ZGlmZiAtLWdpdCBhLy5jbGFuZy1mb3JtYXQgYi8uY2xhbmctZm9ybWF0CmluZGV4IDBjN2Q2YjAuLmNiYTIzZDYgMTAwNjQ0Ci0tLSBhLy5jbGFuZy1mb3JtYXQKKysrIGIvLmNsYW5nLWZvcm1hdApAQCAtMjAsOSArMjAsMTMgQEAKIFNwYWNlQWZ0ZXJUZW1wbGF0ZUtleXdvcmQ6IHRydWUKIEluY2x1ZGVCbG9ja3M6IFJlZ3JvdXAKIEluY2x1ZGVDYXRlZ29yaWVzOgorICAtIFJlZ2V4OiAgICAgICAgICAgJ15bPCJdY21TVExcLmh4eCcKKyAgICBQcmlvcml0eTogICAgICAgIC0yCiAgIC0gUmVnZXg6ICAgICAgICAgICAnXls8Il1jbUNvbmZpZ3VyZVwuaCcKICAgICBQcmlvcml0eTogICAgICAgIC0xCi0gIC0gUmVnZXg6ICAgICAgICAgICAnXig8fCIpY20vJworICAtIFJlZ2V4OiAgICAgICAgICAgJ148cXVldWU+JworICAgIFByaW9yaXR5OiAgICAgICAgMQorICAtIFJlZ2V4OiAgICAgICAgICAgJ14oPHwiKWNtKGV4dCk/LycKICAgICBQcmlvcml0eTogICAgICAgIDIKICAgLSBSZWdleDogICAgICAgICAgICdeKDx8Iil3aW5kb3dzXC5oJwogICAgIFByaW9yaXR5OiAgICAgICAgMwpAQCAtMzAsMTYgKzM0LDE4IEBACiAgICAgUHJpb3JpdHk6ICAgICAgICA1CiAgIC0gUmVnZXg6ICAgICAgICAgICAnXig8fCIpUXQ/W0EtWl0nCiAgICAgUHJpb3JpdHk6ICAgICAgICA2Ci0gIC0gUmVnZXg6ICAgICAgICAgICAnXig8fCIpY21zeXMvJworICAtIFJlZ2V4OiAgICAgICAgICAgJ148Y210cC8nCiAgICAgUHJpb3JpdHk6ICAgICAgICA3Ci0gIC0gUmVnZXg6ICAgICAgICAgICAnXig8fCIpY21fJworICAtIFJlZ2V4OiAgICAgICAgICAgJ14oPHwiKWNtc3lzLycKICAgICBQcmlvcml0eTogICAgICAgIDgKLSAgLSBSZWdleDogICAgICAgICAgICdeKDx8IiljbVtBLVpdW14uXStcLmgnCisgIC0gUmVnZXg6ICAgICAgICAgICAnXig8fCIpY21fJwogICAgIFByaW9yaXR5OiAgICAgICAgOQorICAtIFJlZ2V4OiAgICAgICAgICAgJ14oPHwiKWNtW0EtWl1bXi5dK1wuaCcKKyAgICBQcmlvcml0eTogICAgICAgIDEwCiAgIC0gUmVnZXg6ICAgICAgICAgICAnXjxbXi5dK1wuaCcKICAgICBQcmlvcml0eTogICAgICAgIDQKICAgLSBSZWdleDogICAgICAgICAgICdePCcKICAgICBQcmlvcml0eTogICAgICAgIDEKICAgLSBSZWdleDogICAgICAgICAgICcuKicKLSAgICBQcmlvcml0eTogICAgICAgIDEwCisgICAgUHJpb3JpdHk6ICAgICAgICAxMQogLi4uCmRpZmYgLS1naXQgYS8uY2xhbmctdGlkeSBiLy5jbGFuZy10aWR5CmluZGV4IGE1MjA2NzkuLjEwODE5ZWYgMTAwNjQ0Ci0tLSBhLy5jbGFuZy10aWR5CisrKyBiLy5jbGFuZy10aWR5CkBAIC0xMyw5ICsxMywxMSBAQAogLW1vZGVybml6ZS1hdm9pZC1jLWFycmF5cyxcCiAtbW9kZXJuaXplLXVzZS1ub2Rpc2NhcmQsXAogLW1vZGVybml6ZS11c2Utbm9leGNlcHQsXAorLW1vZGVybml6ZS11c2UtdHJhaWxpbmctcmV0dXJuLXR5cGUsXAogLW1vZGVybml6ZS11c2UtdHJhbnNwYXJlbnQtZnVuY3RvcnMsXAogcGVyZm9ybWFuY2UtKixcCiByZWFkYWJpbGl0eS0qLFwKKy1yZWFkYWJpbGl0eS1jb252ZXJ0LW1lbWJlci1mdW5jdGlvbnMtdG8tc3RhdGljLFwKIC1yZWFkYWJpbGl0eS1mdW5jdGlvbi1zaXplLFwKIC1yZWFkYWJpbGl0eS1pZGVudGlmaWVyLW5hbWluZyxcCiAtcmVhZGFiaWxpdHktaW1wbGljaXQtYm9vbC1jb252ZXJzaW9uLFwKZGlmZiAtLWdpdCBhLy5naXRodWIvcHVsbF9yZXF1ZXN0X3RlbXBsYXRlLm1kIGIvLmdpdGh1Yi9wdWxsX3JlcXVlc3RfdGVtcGxhdGUubWQKaW5kZXggZDkzNGJmOS4uNTI4MWM5MiAxMDA2NDQKLS0tIGEvLmdpdGh1Yi9wdWxsX3JlcXVlc3RfdGVtcGxhdGUubWQKKysrIGIvLmdpdGh1Yi9wdWxsX3JlcXVlc3RfdGVtcGxhdGUubWQKQEAgLTIsNiArMiw2IEBACiBpcyBhIG1pcnJvciBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UsIGJ1dCBDTWFrZSBkb2VzIG5vdCB1c2UgR2l0SHViIHB1bGwKIHJlcXVlc3RzIGZvciBjb250cmlidXRpb24uICBQbGVhc2Ugc2VlCiAKLSAgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvdHJlZS9tYXN0ZXIvQ09OVFJJQlVUSU5HLnJzdAorICBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL3RyZWUvbWFzdGVyL0NPTlRSSUJVVElORy5yc3QKIAogZm9yIGNvbnRyaWJ1dGlvbiBpbnN0cnVjdGlvbnMuICBHaXRIdWIgT0F1dGggbWF5IGJlIHVzZWQgdG8gc2lnbiBpbi4KZGlmZiAtLWdpdCBhLy5naXRsYWItY2kueW1sIGIvLmdpdGxhYi1jaS55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyMzkzYgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWItY2kueW1sCkBAIC0wLDAgKzEsMjAxIEBACitpbmNsdWRlOgorICAgICMgTWV0YWRhdGEgc2hhcmVkIG15IG1hbnkgam9icworICAgIC0gbG9jYWw6IC5naXRsYWIvcnVsZXMueW1sCisgICAgLSBsb2NhbDogLmdpdGxhYi9hcnRpZmFjdHMueW1sCisKKyAgICAjIE9TIGJ1aWxkcy4KKyAgICAtIGxvY2FsOiAuZ2l0bGFiL29zLWxpbnV4LnltbAorICAgIC0gbG9jYWw6IC5naXRsYWIvb3MtbWFjb3MueW1sCisgICAgLSBsb2NhbDogLmdpdGxhYi9vcy13aW5kb3dzLnltbAorCitzdGFnZXM6CisgICAgLSBidWlsZAorICAgIC0gdGVzdAorICAgIC0gdGVzdC1leHQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSm9iIGRlY2xhcmF0aW9ucworIworIyBFYWNoIGpvYiBtdXN0IHB1bGwgaW4gZWFjaCBvZiB0aGUgZm9sbG93aW5nIGtleXM6CisjCisjICAgLSBhICJiYXNlIGltYWdlIgorIyAgIC0gYSBidWlsZCBzY3JpcHQKKyMgICAtIHRhZ3MgZm9yIHRoZSBqb2JzCisjICAgLSBydWxlcyBmb3Igd2hlbiB0byBydW4gdGhlIGpvYgorIworIyBBZGRpdGlvbmFsbHksIGpvYnMgbWF5IGFsc28gY29udGFpbjoKKyMKKyMgICAtIGFydGlmYWN0cworIyAgIC0gZGVwZW5kZW5jeS9uZWVkcyBqb2JzIGZvciByZXF1aXJlZCBqb2JzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIExpbnQgYnVpbGRzCisKK2J1aWxkOmRlYmlhbjEwLWl3eXU6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAuZGViaWFuMTBfaXd5dQorICAgICAgICAtIC5jbWFrZV9idWlsZF9saW51eAorICAgICAgICAtIC5saW51eF9idWlsZGVyX3RhZ3MKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKworYnVpbGQ6ZmVkb3JhMzEtdGlkeToKKyAgICBleHRlbmRzOgorICAgICAgICAtIC5mZWRvcmEzMV90aWR5CisgICAgICAgIC0gLmNtYWtlX2J1aWxkX2xpbnV4CisgICAgICAgIC0gLmxpbnV4X2J1aWxkZXJfdGFnc19xdAorICAgICAgICAtIC5ydW5fYXV0b21hdGljYWxseQorCitidWlsZDpmZWRvcmEzMS1zcGhpbng6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAuZmVkb3JhMzFfc3BoaW54CisgICAgICAgIC0gLmNtYWtlX2J1aWxkX2xpbnV4CisgICAgICAgIC0gLmxpbnV4X2J1aWxkZXJfdGFnc19xdAorICAgICAgICAtIC5ydW5fYXV0b21hdGljYWxseQorCisjIExpbnV4IGJ1aWxkcworCitidWlsZDpjZW50b3M2LXJlbGVhc2U6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAucmVsZWFzZV9saW51eAorICAgICAgICAtIC5jbWFrZV9idWlsZF9yZWxlYXNlX2xpbnV4CisgICAgICAgIC0gLmNtYWtlX3JlbGVhc2VfYXJ0aWZhY3RzCisgICAgICAgIC0gLmxpbnV4X2J1aWxkZXJfdGFncworICAgICAgICAtIC5ydW5fbWFudWFsbHkKKwordGVzdDpmZWRvcmEzMS1tYWtlZmlsZXM6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAuZmVkb3JhMzFfbWFrZWZpbGVzCisgICAgICAgIC0gLmNtYWtlX3Rlc3RfbGludXhfcGFja2FnZQorICAgICAgICAtIC5saW51eF9idWlsZGVyX3RhZ3NfcXQKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKyAgICBkZXBlbmRlbmNpZXM6CisgICAgICAgIC0gYnVpbGQ6Y2VudG9zNi1yZWxlYXNlCisgICAgbmVlZHM6CisgICAgICAgIC0gYnVpbGQ6Y2VudG9zNi1yZWxlYXNlCisKK3Rlc3Q6Y3VkYTEwLjItbnZpZGlhOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLmN1ZGExMC4yX252aWRpYQorICAgICAgICAtIC5jbWFrZV90ZXN0X2xpbnV4X3BhY2thZ2UKKyAgICAgICAgLSAubGludXhfYnVpbGRlcl90YWdzX2N1ZGEKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKyAgICBkZXBlbmRlbmNpZXM6CisgICAgICAgIC0gYnVpbGQ6Y2VudG9zNi1yZWxlYXNlCisgICAgbmVlZHM6CisgICAgICAgIC0gYnVpbGQ6Y2VudG9zNi1yZWxlYXNlCisKK2J1aWxkOmZlZG9yYTMxLW5pbmphOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLmZlZG9yYTMxX25pbmphCisgICAgICAgIC0gLmNtYWtlX2J1aWxkX2xpbnV4CisgICAgICAgIC0gLmNtYWtlX2J1aWxkX2FydGlmYWN0cworICAgICAgICAtIC5saW51eF9idWlsZGVyX3RhZ3NfcXQKKyAgICAgICAgLSAucnVuX21hbnVhbGx5CisKK3Rlc3Q6ZmVkb3JhMzEtbmluamE6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAuZmVkb3JhMzFfbmluamEKKyAgICAgICAgLSAuY21ha2VfdGVzdF9saW51eAorICAgICAgICAtIC5saW51eF9idWlsZGVyX3RhZ3NfcXQKKyAgICAgICAgLSAuY21ha2VfdGVzdF9hcnRpZmFjdHMKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKyAgICBkZXBlbmRlbmNpZXM6CisgICAgICAgIC0gYnVpbGQ6ZmVkb3JhMzEtbmluamEKKyAgICBuZWVkczoKKyAgICAgICAgLSBidWlsZDpmZWRvcmEzMS1uaW5qYQorCit0ZXN0OmZlZG9yYTMxLW5pbmphLW11bHRpOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLmZlZG9yYTMxX25pbmphX211bHRpCisgICAgICAgIC0gLmNtYWtlX3Rlc3RfbGludXhfZXh0ZXJuYWwKKyAgICAgICAgLSAubGludXhfYnVpbGRlcl90YWdzX3F0CisgICAgICAgIC0gLnJ1bl9hdXRvbWF0aWNhbGx5CisgICAgZGVwZW5kZW5jaWVzOgorICAgICAgICAtIHRlc3Q6ZmVkb3JhMzEtbmluamEKKyAgICBuZWVkczoKKyAgICAgICAgLSB0ZXN0OmZlZG9yYTMxLW5pbmphCisKKyMgbWFjT1MgYnVpbGRzCisKK2J1aWxkOm1hY29zLW5pbmphOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLm1hY29zX25pbmphCisgICAgICAgIC0gLmNtYWtlX2J1aWxkX21hY29zCisgICAgICAgIC0gLmNtYWtlX2J1aWxkX2FydGlmYWN0cworICAgICAgICAtIC5tYWNvc19idWlsZGVyX3RhZ3MKKyAgICAgICAgLSAucnVuX21hbnVhbGx5CisKK3Rlc3Q6bWFjb3MtbmluamE6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAubWFjb3NfbmluamEKKyAgICAgICAgLSAuY21ha2VfdGVzdF9tYWNvcworICAgICAgICAtIC5jbWFrZV90ZXN0X2FydGlmYWN0cworICAgICAgICAtIC5tYWNvc19idWlsZGVyX3RhZ3MKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKyAgICBkZXBlbmRlbmNpZXM6CisgICAgICAgIC0gYnVpbGQ6bWFjb3MtbmluamEKKyAgICBuZWVkczoKKyAgICAgICAgLSBidWlsZDptYWNvcy1uaW5qYQorCitidWlsZDptYWNvcy1tYWtlZmlsZXM6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAubWFjb3NfbWFrZWZpbGVzCisgICAgICAgIC0gLmNtYWtlX2J1aWxkX21hY29zCisgICAgICAgIC0gLmNtYWtlX2J1aWxkX2FydGlmYWN0cworICAgICAgICAtIC5tYWNvc19idWlsZGVyX3RhZ3MKKyAgICAgICAgLSAucnVuX21hbnVhbGx5CisKK3Rlc3Q6bWFjb3MtbWFrZWZpbGVzOgorICAgIGV4dGVuZHM6CisgICAgICAgIC0gLm1hY29zX21ha2VmaWxlcworICAgICAgICAtIC5jbWFrZV90ZXN0X21hY29zCisgICAgICAgIC0gLm1hY29zX2J1aWxkZXJfdGFncworICAgICAgICAtIC5ydW5fYXV0b21hdGljYWxseQorICAgIGRlcGVuZGVuY2llczoKKyAgICAgICAgLSBidWlsZDptYWNvcy1tYWtlZmlsZXMKKyAgICBuZWVkczoKKyAgICAgICAgLSBidWlsZDptYWNvcy1tYWtlZmlsZXMKKwordGVzdDptYWNvcy14Y29kZToKKyAgICBleHRlbmRzOgorICAgICAgICAtIC5tYWNvc194Y29kZQorICAgICAgICAtIC5jbWFrZV90ZXN0X21hY29zX2V4dGVybmFsCisgICAgICAgIC0gLm1hY29zX2J1aWxkZXJfZXh0X3RhZ3MKKyAgICAgICAgLSAucnVuX2F1dG9tYXRpY2FsbHkKKyAgICBkZXBlbmRlbmNpZXM6CisgICAgICAgIC0gdGVzdDptYWNvcy1uaW5qYQorICAgIG5lZWRzOgorICAgICAgICAtIHRlc3Q6bWFjb3MtbmluamEKKworIyBXaW5kb3dzIGJ1aWxkcworCitidWlsZDp3aW5kb3dzLXZzMjAxOS14NjQtbmluamE6CisgICAgZXh0ZW5kczoKKyAgICAgICAgLSAud2luZG93c192czIwMTlfeDY0X25pbmphCisgICAgICAgIC0gLmNtYWtlX2J1aWxkX3dpbmRvd3MKKyAgICAgICAgLSAuY21ha2VfYnVpbGRfYXJ0aWZhY3RzCisgICAgICAgIC0gLndpbmRvd3NfYnVpbGRlcl90YWdzCisgICAgICAgIC0gLnJ1bl9tYW51YWxseQorCit0ZXN0OndpbmRvd3MtdnMyMDE5LXg2NC1uaW5qYToKKyAgICBleHRlbmRzOgorICAgICAgICAtIC53aW5kb3dzX3ZzMjAxOV94NjRfbmluamEKKyAgICAgICAgLSAuY21ha2VfdGVzdF93aW5kb3dzCisgICAgICAgIC0gLndpbmRvd3NfYnVpbGRlcl90YWdzCisgICAgICAgIC0gLmNtYWtlX3Rlc3RfYXJ0aWZhY3RzCisgICAgICAgIC0gLnJ1bl9hdXRvbWF0aWNhbGx5CisgICAgZGVwZW5kZW5jaWVzOgorICAgICAgICAtIGJ1aWxkOndpbmRvd3MtdnMyMDE5LXg2NC1uaW5qYQorICAgIG5lZWRzOgorICAgICAgICAtIGJ1aWxkOndpbmRvd3MtdnMyMDE5LXg2NC1uaW5qYQorCit0ZXN0OndpbmRvd3MtdnMyMDE5LXg2NDoKKyAgICBleHRlbmRzOgorICAgICAgICAtIC53aW5kb3dzX3ZzMjAxOV94NjQKKyAgICAgICAgLSAuY21ha2VfdGVzdF93aW5kb3dzX2V4dGVybmFsCisgICAgICAgIC0gLndpbmRvd3NfYnVpbGRlcl9leHRfdGFncworICAgICAgICAtIC5ydW5fYXV0b21hdGljYWxseQorICAgIGRlcGVuZGVuY2llczoKKyAgICAgICAgLSB0ZXN0OndpbmRvd3MtdnMyMDE5LXg2NC1uaW5qYQorICAgIG5lZWRzOgorICAgICAgICAtIHRlc3Q6d2luZG93cy12czIwMTkteDY0LW5pbmphCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2FydGlmYWN0cy55bWwgYi8uZ2l0bGFiL2FydGlmYWN0cy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxMGUyNAotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvYXJ0aWZhY3RzLnltbApAQCAtMCwwICsxLDgxIEBACisjIExpc3RzIG9mIHBhdGhzIGZvciBhcnRpZmFjdHMgb2YgdmFyaW91cyBzdGFnZXMuCisKKy5jbWFrZV9idWlsZF9hcnRpZmFjdHM6CisgICAgYXJ0aWZhY3RzOgorICAgICAgICBleHBpcmVfaW46IDFkCisgICAgICAgIHBhdGhzOgorICAgICAgICAgICAgIyBYWFgoZ2xvYmJpbmcpOiBDYW4gYmUgc2ltcGxpZmllZCB3aXRoIHN1cHBvcnQgZnJvbQorICAgICAgICAgICAgIyBodHRwczovL2dpdGxhYi5jb20vZ2l0bGFiLW9yZy9naXRsYWItcnVubmVyL2lzc3Vlcy80ODQwCisgICAgICAgICAgICAtIGJ1aWxkL0NUZXN0VGVzdGZpbGUuY21ha2UKKyAgICAgICAgICAgIC0gYnVpbGQvKi9DVGVzdFRlc3RmaWxlLmNtYWtlCisgICAgICAgICAgICAtIGJ1aWxkLyovKi9DVGVzdFRlc3RmaWxlLmNtYWtlCisgICAgICAgICAgICAtIGJ1aWxkLyovKi8qL0NUZXN0VGVzdGZpbGUuY21ha2UKKyAgICAgICAgICAgIC0gYnVpbGQvKi8qLyovKi9DVGVzdFRlc3RmaWxlLmNtYWtlCisKKyAgICAgICAgICAgICMgQWxsb3cgQ01ha2UgdG8gZmluZCBDTUFLRV9ST09ULgorICAgICAgICAgICAgLSBidWlsZC9DTWFrZUZpbGVzL0NNYWtlU291cmNlRGlyLnR4dAorCisgICAgICAgICAgICAjIFRha2UgdGhlIGluc3RhbGwgdHJlZS4KKyAgICAgICAgICAgIC0gYnVpbGQvaW5zdGFsbC8KKworICAgICAgICAgICAgIyBXZSBuZWVkIHRoZSBtYWluIGJpbmFyaWVzLgorICAgICAgICAgICAgLSBidWlsZC9iaW4vCisgICAgICAgICAgICAjIFRoZSBjYWNoZSBpcyBuZWVkZWQgZm9yIHRoZSBpbnN0YWxsYXRpb24gdGVzdC4KKyAgICAgICAgICAgIC0gYnVpbGQvQ01ha2VDYWNoZS50eHQKKyAgICAgICAgICAgICMgVGVzdCBiaW5hcmllcy4gRXZlbnR1YWxseSB0aGVzZSBtaWdodCBiZSBiZXR0ZXIgdW5kZXIKKyAgICAgICAgICAgICMgYFNvdXJjZS9UZXN0c2Agb3IgdGhlIGxpa2UuCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0VuZm9yY2VDb25maWcuY21ha2UKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2VCdWlsZFRlc3QuY21ha2UKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2VCdWlsZERvdWJsZVByb2plY3RUZXN0LmNtYWtlCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKi9ydW5jb21waWxlY29tbWFuZHMKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2UqL3J1bmNvbXBpbGVjb21tYW5kcy5leGUKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2UqL3Rlc3QqCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKi9Qc2V1ZG9NZW1jaGVjay92YWxncmluZAorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svcHVyaWZ5CisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKi9Qc2V1ZG9NZW1jaGVjay9tZW1jaGVja19mYWlsCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKi9Qc2V1ZG9NZW1jaGVjay9CQworICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svY3VkYS1tZW1jaGVjaworICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svdmFsZ3JpbmQuZXhlCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKi9Qc2V1ZG9NZW1jaGVjay9wdXJpZnkuZXhlCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKi9Qc2V1ZG9NZW1jaGVjay9tZW1jaGVja19mYWlsLmV4ZQorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svQkMuZXhlCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlKi9Qc2V1ZG9NZW1jaGVjay9jdWRhLW1lbWNoZWNrLmV4ZQorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSovUHNldWRvTWVtY2hlY2svTm9Mb2cKKyAgICAgICAgICAgIC0gYnVpbGQvVGVzdHMvQ01ha2UqTGliLypMaWJUZXN0cworICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZSpMaWIvKkxpYlRlc3RzLmV4ZQorICAgICAgICAgICAgLSBidWlsZC9Tb3VyY2Uva3dzeXMvY21zeXNUZXN0KgorICAgICAgICAgICAgLSBidWlsZC9Tb3VyY2Uva3dzeXMvdGVzdENvbnNvbGVCdWZDaGlsZC5leGUKKyAgICAgICAgICAgIC0gYnVpbGQvVXRpbGl0aWVzL2NtY3VybC9jdXJsdGVzdAorICAgICAgICAgICAgLSBidWlsZC9VdGlsaXRpZXMvY21jdXJsL2N1cmx0ZXN0LmV4ZQorICAgICAgICAgICAgLSBidWlsZC9VdGlsaXRpZXMvS1dJTUwvdGVzdC9rd2ltbF90ZXN0CisgICAgICAgICAgICAtIGJ1aWxkL1V0aWxpdGllcy9LV0lNTC90ZXN0L2t3aW1sX3Rlc3QuZXhlCisgICAgICAgICAgICAtIGJ1aWxkL1NvdXJjZS9rd3N5cy8qY21zeXNUZXN0RHlubG9hZC4qCisgICAgICAgICAgICAtIGJ1aWxkL1NvdXJjZS9rd3N5cy9keW5sb2FkZGlyL2Ntc3lzVGVzdER5bmxvYWRJbXBsLmRsbAorICAgICAgICAgICAgLSBidWlsZC9Tb3VyY2Uva3dzeXMvZHlubG9hZGRpci9jbXN5c1Rlc3REeW5sb2FkVXNlLmRsbAorCisgICAgICAgICAgICAjIFRlc3QgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NUZXN0KgorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9GaW5kKgorICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9RdDUqCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL1J1bkNNYWtlLworICAgICAgICAgICAgLSBidWlsZC9UZXN0cy9DTWFrZU9ubHkvCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RzL0NNYWtlVGVzdHMvCisKKyAgICAgICAgICAgICMgQ1Rlc3QvQ0Rhc2ggaW5mb3JtYXRpb24uCisgICAgICAgICAgICAtIGJ1aWxkL1Rlc3RpbmcvCisgICAgICAgICAgICAtIGJ1aWxkL0RhcnRDb25maWd1YXRpb24udGNsCisgICAgICAgICAgICAtIGJ1aWxkL0NUZXN0Q3VzdG9tLmNtYWtlCisKKy5jbWFrZV9yZWxlYXNlX2FydGlmYWN0czoKKyAgICBhcnRpZmFjdHM6CisgICAgICAgIGV4cGlyZV9pbjogNWQKKyAgICAgICAgcGF0aHM6CisgICAgICAgICAgICAjIEFueSBwYWNrYWdlcyBtYWRlLgorICAgICAgICAgICAgLSBidWlsZC9jbWFrZS0qLUxpbnV4LXg4Nl82NC4qCisKKy5jbWFrZV90ZXN0X2FydGlmYWN0czoKKyAgICBhcnRpZmFjdHM6CisgICAgICAgIGV4cGlyZV9pbjogMWQKKyAgICAgICAgcGF0aHM6CisgICAgICAgICAgICAjIFRha2UgdGhlIGluc3RhbGwgdHJlZS4KKyAgICAgICAgICAgIC0gYnVpbGQvaW5zdGFsbC8KZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY21ha2UucHMxIGIvLmdpdGxhYi9jaS9jbWFrZS5wczEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2I0MmNhZQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY21ha2UucHMxCkBAIC0wLDAgKzEsMTggQEAKKyRlcnJvcmFjdGlvbnByZWZlcmVuY2UgPSAic3RvcCIKKworJHZlcnNpb24gPSAiMy4xNy4yIgorJHNoYTI1NnN1bSA9ICJDRjgyQjFFQjIwQjZGQkU1ODM0ODc2NTZGQ0Q0OTY0OTBGRkNDREZCQ0JCQTBGMjZFMTlGMUM5QzYzQjBCMDQxIgorJGZpbGVuYW1lID0gImNtYWtlLSR2ZXJzaW9uLXdpbjY0LXg2NCIKKyR0YXJiYWxsID0gIiRmaWxlbmFtZS56aXAiCisKKyRvdXRkaXIgPSAkcHdkLlBhdGgKKyRvdXRkaXIgPSAiJG91dGRpclwuZ2l0bGFiIgorSW52b2tlLVdlYlJlcXVlc3QgLVVyaSAiaHR0cHM6Ly9naXRodWIuY29tL0tpdHdhcmUvQ01ha2UvcmVsZWFzZXMvZG93bmxvYWQvdiR2ZXJzaW9uLyR0YXJiYWxsIiAtT3V0RmlsZSAiJG91dGRpclwkdGFyYmFsbCIKKyRoYXNoID0gR2V0LUZpbGVIYXNoICIkb3V0ZGlyXCR0YXJiYWxsIiAtQWxnb3JpdGhtIFNIQTI1NgoraWYgKCRoYXNoLkhhc2ggLW5lICRzaGEyNTZzdW0pIHsKKyAgICBleGl0IDEKK30KKworQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSBTeXN0ZW0uSU8uQ29tcHJlc3Npb24uRmlsZVN5c3RlbQorW1N5c3RlbS5JTy5Db21wcmVzc2lvbi5aaXBGaWxlXTo6RXh0cmFjdFRvRGlyZWN0b3J5KCIkb3V0ZGlyXCR0YXJiYWxsIiwgIiRvdXRkaXIiKQorTW92ZS1JdGVtIC1QYXRoICIkb3V0ZGlyXCRmaWxlbmFtZSIgLURlc3RpbmF0aW9uICIkb3V0ZGlyXGNtYWtlIgpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jbWFrZS5zaCBiLy5naXRsYWIvY2kvY21ha2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjU4YTYyYQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY21ha2Uuc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCityZWFkb25seSB2ZXJzaW9uPSIzLjE3LjIiCisKK2Nhc2UgIiQoIHVuYW1lIC1zICkiIGluCisgICAgTGludXgpCisgICAgICAgIHNoYXRvb2w9InNoYTI1NnN1bSIKKyAgICAgICAgc2hhMjU2c3VtPSJkYzU3ZjNjYzQ0OGNhNjdmYzg3NzZiNGFkNGMyMmIwODdiOWM2YThlNDU5OTM4Yjk2MjJiOGM3ZjRlZjZiMjFlIgorICAgICAgICBwbGF0Zm9ybT0iTGludXgiCisgICAgICAgIDs7CisgICAgRGFyd2luKQorICAgICAgICBzaGF0b29sPSJzaGFzdW0gLWEgMjU2IgorICAgICAgICBzaGEyNTZzdW09IjEzOTUwMGUyMGIwODA0NDRmY2FmZTU3ZjI0ZjU3MjQ4YzY5MWM1MTg3Y2NlNjY5NWJlZTJiOWFhZDY3OTJjN2QiCisgICAgICAgIHBsYXRmb3JtPSJEYXJ3aW4iCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZWNobyAiVW5yZWNvZ25pemVkIHBsYXRmb3JtICQoIHVuYW1lIC1zICkiCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworZXNhYworcmVhZG9ubHkgc2hhdG9vbAorcmVhZG9ubHkgc2hhMjU2c3VtCityZWFkb25seSBwbGF0Zm9ybQorCityZWFkb25seSBmaWxlbmFtZT0iY21ha2UtJHZlcnNpb24tJHBsYXRmb3JtLXg4Nl82NCIKK3JlYWRvbmx5IHRhcmJhbGw9IiRmaWxlbmFtZS50YXIuZ3oiCisKK2NkIC5naXRsYWIKKworZWNobyAiJHNoYTI1NnN1bSAgJHRhcmJhbGwiID4gY21ha2Uuc2hhMjU2c3VtCitjdXJsIC1PTCAiaHR0cHM6Ly9naXRodWIuY29tL0tpdHdhcmUvQ01ha2UvcmVsZWFzZXMvZG93bmxvYWQvdiR2ZXJzaW9uLyR0YXJiYWxsIgorJHNoYXRvb2wgLS1jaGVjayBjbWFrZS5zaGEyNTZzdW0KK3RhciB4ZiAiJHRhcmJhbGwiCittdiAiJGZpbGVuYW1lIiBjbWFrZQorCitpZiBbICIkKCB1bmFtZSAtcyApIiA9ICJEYXJ3aW4iIF07IHRoZW4KKyAgICBsbiAtcyBDTWFrZS5hcHAvQ29udGVudHMvYmluIGNtYWtlL2JpbgorZmkKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX2NvbW1vbi5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX2NvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQ5YjJkCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfY29tbW9uLmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKK3NldChDVEVTVF9VU0VfTEFVTkNIRVJTICJPTiIgQ0FDSEUgQk9PTCAiIikKKworIyBXZSBydW4gdGhlIGluc3RhbGwgcmlnaHQgYWZ0ZXIgdGhlIGJ1aWxkLiBBdm9pZCByZXJ1bm5pbmcgaXQgd2hlbiBpbnN0YWxsaW5nLgorc2V0KENNQUtFX1NLSVBfSU5TVEFMTF9BTExfREVQRU5ERU5DWSAiT04iIENBQ0hFIEJPT0wgIiIpCisjIEluc3RhbGwgQ01ha2UgdW5kZXIgdGhlIGJ1aWxkIHRyZWUuCitzZXQoQ01BS0VfSU5TVEFMTF9QUkVGSVggIiR7Q01BS0VfQklOQVJZX0RJUn0vaW5zdGFsbCIgQ0FDSEUgUEFUSCAiIikKK3NldChDTWFrZV9URVNUX0lOU1RBTEwgIk9GRiIgQ0FDSEUgQk9PTCAiIikKKworaWYgKE5PVCAiJEVOVntDTUFLRV9CVUlMRF9UWVBFfSIgU1RSRVFVQUwgIiIpCisgIHNldChDTUFLRV9CVUlMRF9UWVBFICIkRU5We0NNQUtFX0JVSUxEX1RZUEV9IiBDQUNIRSBTVFJJTkcgIiIpCitlbmRpZiAoKQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9zY2NhY2hlLmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX2N1ZGExMC4yX252aWRpYS5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX2N1ZGExMC4yX252aWRpYS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTk2OTliCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfY3VkYTEwLjJfbnZpZGlhLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KENNYWtlX1RFU1RfQ1VEQSAiTlZJRElBIiBDQUNIRSBTVFJJTkcgIiIpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2V4dGVybmFsX3Rlc3QuY21ha2UiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jb25maWd1cmVfZGViaWFuMTBfaXd5dS5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX2RlYmlhbjEwX2l3eXUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhYTU4MQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX2RlYmlhbjEwX2l3eXUuY21ha2UKQEAgLTAsMCArMSw0IEBACitzZXQoQ01ha2VfUlVOX0lXWVUgT04gQ0FDSEUgQk9PTCAiIikKK3NldChJV1lVX0NPTU1BTkQgIi91c3IvYmluL2luY2x1ZGUtd2hhdC15b3UtdXNlLTYuMCIgQ0FDSEUgRklMRVBBVEggIiIpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2NvbW1vbi5jbWFrZSIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9leHRlcm5hbF90ZXN0LmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZXh0ZXJuYWxfdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM5N2QxCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZXh0ZXJuYWxfdGVzdC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldChDTWFrZV9URVNUX0hPU1RfQ01BS0UgIk9OIiBDQUNIRSBCT09MICIiKQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9jb21tb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfY29tbW9uLmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfY29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMDY4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9mZWRvcmEzMV9jb21tb24uY21ha2UKQEAgLTAsMCArMSw0IEBACitzZXQoQlVJTERfQ3Vyc2VzRGlhbG9nIE9OIENBQ0hFIEJPT0wgIiIpCitzZXQoQlVJTERfUXREaWFsb2cgT04gQ0FDSEUgQk9PTCAiIikKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfY29tbW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX21ha2VmaWxlcy5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX21ha2VmaWxlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDg2M2EyCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfbWFrZWZpbGVzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2V4dGVybmFsX3Rlc3QuY21ha2UiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfbmluamEuY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9mZWRvcmEzMV9uaW5qYS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDc2OGI3Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfbmluamEuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfZmVkb3JhMzFfY29tbW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX25pbmphX211bHRpLmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfbmluamFfbXVsdGkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4NjNhMgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX25pbmphX211bHRpLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2V4dGVybmFsX3Rlc3QuY21ha2UiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfc3BoaW54LmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfc3BoaW54LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYzliOGMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9mZWRvcmEzMV9zcGhpbnguY21ha2UKQEAgLTAsMCArMSw4IEBACitzZXQoU1BISU5YX0lORk8gT04gQ0FDSEUgQk9PTCAiIikKK3NldChTUEhJTlhfTUFOIE9OIENBQ0hFIEJPT0wgIiIpCitzZXQoU1BISU5YX0hUTUwgT04gQ0FDSEUgQk9PTCAiIikKK3NldChTUEhJTlhfU0lOR0xFSFRNTCBPTiBDQUNIRSBCT09MICIiKQorc2V0KFNQSElOWF9RVEhFTFAgT04gQ0FDSEUgQk9PTCAiIikKK3NldChTUEhJTlhfVEVYVCBPTiBDQUNIRSBCT09MICIiKQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9jb21tb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jb25maWd1cmVfZmVkb3JhMzFfdGlkeS5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX3RpZHkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkMDIyYwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX2ZlZG9yYTMxX3RpZHkuY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoQ01ha2VfUlVOX0NMQU5HX1RJRFkgT04gQ0FDSEUgQk9PTCAiIikKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfZmVkb3JhMzFfY29tbW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX21hY29zX2NvbW1vbi5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX21hY29zX2NvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDU5MDJiCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfbWFjb3NfY29tbW9uLmNtYWtlCkBAIC0wLDAgKzEsOSBAQAorIyBPdXIgQ0kgbWFjaGluZXMgZG8gbm90IGNvbnNpc3RlbnRseSBoYXZlIEphdmEgaW5zdGFsbGVkLCBzbyBhIGJ1aWxkIG1heQorIyBkZXRlY3QgdGhhdCBKYXZhIGlzIGF2YWlsYWJsZSBhbmQgd29ya2luZywgYnV0IGEgdGVzdCBtYWNoaW5lIHRoZW4gbm90IGhhdmUgYQorIyB3b3JraW5nIEphdmEgaW5zdGFsbGVkLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCBqdXN0IGFjdCBhcyBpZiBKYXZhIGlzIG5vdAorIyBhdmFpbGFibGUgb24gYW55IENJIG1hY2hpbmUuCitzZXQoSmF2YV9KQVZBX0VYRUNVVEFCTEUgIiIgQ0FDSEUgRklMRVBBVEggIiIpCitzZXQoSmF2YV9KQVZBQ19FWEVDVVRBQkxFICIiIENBQ0hFIEZJTEVQQVRIICIiKQorc2V0KEphdmFfSkFSX0VYRUNVVEFCTEUgIiIgQ0FDSEUgRklMRVBBVEggIiIpCisKK3NldChCVUlMRF9RdERpYWxvZyBPTiBDQUNIRSBCT09MICIiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jb25maWd1cmVfbWFjb3NfbWFrZWZpbGVzLmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfbWFjb3NfbWFrZWZpbGVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZjY3YjUKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9tYWNvc19tYWtlZmlsZXMuY21ha2UKQEAgLTAsMCArMSwyIEBACitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9tYWNvc19jb21tb24uY21ha2UiKQoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfY29tbW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX21hY29zX25pbmphLmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfbWFjb3NfbmluamEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVmNjdiNQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX21hY29zX25pbmphLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfbWFjb3NfY29tbW9uLmNtYWtlIikKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2NvbW1vbi5jbWFrZSIpCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9tYWNvc194Y29kZS5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX21hY29zX3hjb2RlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOTc2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9tYWNvc194Y29kZS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX21hY29zX2NvbW1vbi5jbWFrZSIpCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvbmZpZ3VyZV9leHRlcm5hbF90ZXN0LmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX3NjY2FjaGUuY21ha2UgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9zY2NhY2hlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MWJiMjgKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV9zY2NhY2hlLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0KENNQUtFX0NfQ09NUElMRVJfTEFVTkNIRVIgInNjY2FjaGUiIENBQ0hFIFNUUklORyAiIikKK3NldChDTUFLRV9DWFhfQ09NUElMRVJfTEFVTkNIRVIgInNjY2FjaGUiIENBQ0hFIFNUUklORyAiIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX3dpbmRvd3NfY29tbW9uLmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfd2luZG93c19jb21tb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyNTBhYwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY29uZmlndXJlX3dpbmRvd3NfY29tbW9uLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorc2V0KEJVSUxEX1F0RGlhbG9nIE9OIENBQ0hFIEJPT0wgIiIpCitzZXQoQ01BS0VfUFJFRklYX1BBVEggIiRFTlZ7Q0lfUFJPSkVDVF9ESVJ9Ly5naXRsYWIvcXQiIENBQ0hFIFNUUklORyAiIikKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfY29tbW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY29uZmlndXJlX3dpbmRvd3NfdnMyMDE5X3g2NC5jbWFrZSBiLy5naXRsYWIvY2kvY29uZmlndXJlX3dpbmRvd3NfdnMyMDE5X3g2NC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmVjZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfd2luZG93c192czIwMTlfeDY0LmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KENNYWtlX1RFU1RfV0lYX05PX1ZFUklGWSAiT04iIENBQ0hFIEJPT0wgIiIpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlX2V4dGVybmFsX3Rlc3QuY21ha2UiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jb25maWd1cmVfd2luZG93c192czIwMTlfeDY0X25pbmphLmNtYWtlIGIvLmdpdGxhYi9jaS9jb25maWd1cmVfd2luZG93c192czIwMTlfeDY0X25pbmphLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOWM5M2MKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2NvbmZpZ3VyZV93aW5kb3dzX3ZzMjAxOV94NjRfbmluamEuY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoQ01ha2VfVEVTVF9XSVhfTk9fVkVSSUZZICJPTiIgQ0FDSEUgQk9PTCAiIikKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb25maWd1cmVfd2luZG93c19jb21tb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jdGVzdF9idWlsZC5jbWFrZSBiLy5naXRsYWIvY2kvY3Rlc3RfYnVpbGQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwMmE1ZAotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY3Rlc3RfYnVpbGQuY21ha2UKQEAgLTAsMCArMSw0MSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuOCkKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9naXRsYWJfY2kuY21ha2UiKQorCisjIFJlYWQgdGhlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KK2N0ZXN0X3JlYWRfY3VzdG9tX2ZpbGVzKCIke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9IikKKworIyBQaWNrIHVwIGZyb20gd2hlcmUgdGhlIGNvbmZpZ3VyZSBsZWZ0IG9mZi4KK2N0ZXN0X3N0YXJ0KEFQUEVORCkKKworaWYgKENURVNUX0NNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCAiVW5peCBNYWtlZmlsZXMiKQorICBpbmNsdWRlKFByb2Nlc3NvckNvdW50KQorICBQcm9jZXNzb3JDb3VudChucHJvYykKKyAgc2V0KENURVNUX0JVSUxEX0ZMQUdTICItaiR7bnByb2N9IikKK2VuZGlmICgpCisKK2N0ZXN0X2J1aWxkKAorICBOVU1CRVJfV0FSTklOR1MgbnVtX3dhcm5pbmdzCisgIFJFVFVSTl9WQUxVRSBidWlsZF9yZXN1bHQpCitjdGVzdF9zdWJtaXQoUEFSVFMgQnVpbGQpCisKK2lmIChidWlsZF9yZXN1bHQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiRmFpbGVkIHRvIGJ1aWxkIikKK2VuZGlmICgpCisKK2lmICgiJEVOVntDVEVTVF9OT19XQVJOSU5HU19BTExPV0VEfSIgQU5EIG51bV93YXJuaW5ncyBHUkVBVEVSIDApCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiRm91bmQgJHtudW1fd2FybmluZ3N9IHdhcm5pbmdzICh0cmVhdGluZyBhcyBmYXRhbCkuIikKK2VuZGlmICgpCisKK2lmIChOT1QgIiRFTlZ7Q01ha2VfU0tJUF9JTlNUQUxMfSIpCisgIGN0ZXN0X2J1aWxkKEFQUEVORAorICAgIFRBUkdFVCBpbnN0YWxsCisgICAgUkVUVVJOX1ZBTFVFIGluc3RhbGxfcmVzdWx0KQorCisgIGlmIChpbnN0YWxsX3Jlc3VsdCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAiRmFpbGVkIHRvIGluc3RhbGwiKQorICBlbmRpZiAoKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY3Rlc3RfY29uZmlndXJlLmNtYWtlIGIvLmdpdGxhYi9jaS9jdGVzdF9jb25maWd1cmUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjYWQxMwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvY3Rlc3RfY29uZmlndXJlLmNtYWtlCkBAIC0wLDAgKzEsMzIgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjgpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2l0bGFiX2NpLmNtYWtlIikKKworc2V0KGNtYWtlX2FyZ3MKKyAgLUMgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlXyRFTlZ7Q01BS0VfQ09ORklHVVJBVElPTn0uY21ha2UiKQorCisjIENyZWF0ZSBhbiBlbnRyeSBpbiBDRGFzaC4KK2N0ZXN0X3N0YXJ0KEV4cGVyaW1lbnRhbCBUUkFDSyAiJHtjdGVzdF90cmFja30iKQorCisjIEdhdGhlciB1cGRhdGUgaW5mb3JtYXRpb24uCitmaW5kX3BhY2thZ2UoR2l0KQorc2V0KENURVNUX1VQREFURV9WRVJTSU9OX09OTFkgT04pCitzZXQoQ1RFU1RfVVBEQVRFX0NPTU1BTkQgIiR7R0lUX0VYRUNVVEFCTEV9IikKK2N0ZXN0X3VwZGF0ZSgpCisKKyMgQ29uZmlndXJlIHRoZSBwcm9qZWN0LgorY3Rlc3RfY29uZmlndXJlKAorICBPUFRJT05TICIke2NtYWtlX2FyZ3N9IgorICBSRVRVUk5fVkFMVUUgY29uZmlndXJlX3Jlc3VsdCkKKworIyBSZWFkIHRoZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCitjdGVzdF9yZWFkX2N1c3RvbV9maWxlcygiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSIpCisKKyMgV2UgY2FuIG5vdyBzdWJtaXQgYmVjYXVzZSB3ZSd2ZSBjb25maWd1cmVkLiBUaGlzIGlzIGEgY21iLXN1cGVyYnVpbGQtaXNtLgorY3Rlc3Rfc3VibWl0KFBBUlRTIFVwZGF0ZSkKK2N0ZXN0X3N1Ym1pdChQQVJUUyBDb25maWd1cmUpCisKK2lmIChjb25maWd1cmVfcmVzdWx0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIkZhaWxlZCB0byBjb25maWd1cmUiKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY3Rlc3RfZXhjbHVzaW9ucy5jbWFrZSBiLy5naXRsYWIvY2kvY3Rlc3RfZXhjbHVzaW9ucy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODg1YTZhCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jdGVzdF9leGNsdXNpb25zLmNtYWtlCkBAIC0wLDAgKzEsMTkgQEAKK3NldCh0ZXN0X2V4Y2x1c2lvbnMKKyAgIyBUaGlzIHRlc3QgaGl0cyBnbG9iYWwgcmVzb3VyY2VzIGFuZCBjYW4gYmUgaGFuZGxlZCBieSBuaWdodGx5IHRlc3RpbmcuCisgICMgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9tZXJnZV9yZXF1ZXN0cy80NzY5CisgICJeQnVuZGxlR2VuZXJhdG9yVGVzdCQiCispCisKK2lmIChDVEVTVF9DTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCisgIGxpc3QoQVBQRU5EIHRlc3RfZXhjbHVzaW9ucworICAgICMgVGhpcyB0ZXN0IHRha2VzIGFyb3VuZCA1IG1pbnV0ZXMgd2l0aCBWaXN1YWwgU3R1ZGlvLgorICAgICMgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMjA3MzMKKyAgICAiXkV4dGVybmFsUHJvamVjdFVwZGF0ZSQiCisgICAgIyBUaGlzIHRlc3QgaXMgYSBkZXBlbmRlbmN5IG9mIHRoZSBhYm92ZSBhbmQgaXMgb25seSByZXF1aXJlZCBmb3IgaXQuCisgICAgIl5FeHRlcm5hbFByb2plY3RVcGRhdGVTZXR1cCQiKQorZW5kaWYgKCkKKworc3RyaW5nKFJFUExBQ0UgIjsiICJ8IiB0ZXN0X2V4Y2x1c2lvbnMgIiR7dGVzdF9leGNsdXNpb25zfSIpCitpZiAodGVzdF9leGNsdXNpb25zKQorICBzZXQodGVzdF9leGNsdXNpb25zICIoJHt0ZXN0X2V4Y2x1c2lvbnN9KSIpCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9jdGVzdF90ZXN0LmNtYWtlIGIvLmdpdGxhYi9jaS9jdGVzdF90ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OTEzOWQKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2N0ZXN0X3Rlc3QuY21ha2UKQEAgLTAsMCArMSwyNCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuOCkKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9naXRsYWJfY2kuY21ha2UiKQorCisjIFJlYWQgdGhlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KK2N0ZXN0X3JlYWRfY3VzdG9tX2ZpbGVzKCIke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9IikKKworIyBQaWNrIHVwIGZyb20gd2hlcmUgdGhlIGNvbmZpZ3VyZSBsZWZ0IG9mZi4KK2N0ZXN0X3N0YXJ0KEFQUEVORCkKKworaW5jbHVkZShQcm9jZXNzb3JDb3VudCkKK1Byb2Nlc3NvckNvdW50KG5wcm9jKQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2N0ZXN0X2V4Y2x1c2lvbnMuY21ha2UiKQorY3Rlc3RfdGVzdCgKKyAgUEFSQUxMRUxfTEVWRUwgIiR7bnByb2N9IgorICBSRVRVUk5fVkFMVUUgdGVzdF9yZXN1bHQKKyAgRVhDTFVERSAiJHt0ZXN0X2V4Y2x1c2lvbnN9IikKK2N0ZXN0X3N1Ym1pdChQQVJUUyBUZXN0KQorCitpZiAodGVzdF9yZXN1bHQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiRmFpbGVkIHRvIHRlc3QiKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvY3Rlc3RfdGVzdF9leHRlcm5hbC5jbWFrZSBiLy5naXRsYWIvY2kvY3Rlc3RfdGVzdF9leHRlcm5hbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTJiOTM2Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9jdGVzdF90ZXN0X2V4dGVybmFsLmNtYWtlCkBAIC0wLDAgKzEsNzMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjgpCisKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2l0bGFiX2NpLmNtYWtlIikKKworc2V0KGNtYWtlX2FyZ3MKKyAgLUMgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY29uZmlndXJlXyRFTlZ7Q01BS0VfQ09ORklHVVJBVElPTn0uY21ha2UiKQorCisjIENyZWF0ZSBhbiBlbnRyeSBpbiBDRGFzaC4KK2N0ZXN0X3N0YXJ0KEV4cGVyaW1lbnRhbCBUUkFDSyAiJHtjdGVzdF90cmFja30iKQorCisjIEdhdGhlciB1cGRhdGUgaW5mb3JtYXRpb24uCitmaW5kX3BhY2thZ2UoR2l0KQorc2V0KENURVNUX1VQREFURV9WRVJTSU9OX09OTFkgT04pCitzZXQoQ1RFU1RfVVBEQVRFX0NPTU1BTkQgIiR7R0lUX0VYRUNVVEFCTEV9IikKK2N0ZXN0X3VwZGF0ZSgpCisKKyMgQ29uZmlndXJlIHRoZSBwcm9qZWN0LgorY3Rlc3RfY29uZmlndXJlKAorICBPUFRJT05TICIke2NtYWtlX2FyZ3N9IgorICBSRVRVUk5fVkFMVUUgY29uZmlndXJlX3Jlc3VsdCkKKworIyBSZWFkIHRoZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCitjdGVzdF9yZWFkX2N1c3RvbV9maWxlcygiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSIpCisKKyMgV2UgY2FuIG5vdyBzdWJtaXQgYmVjYXVzZSB3ZSd2ZSBjb25maWd1cmVkLiBUaGlzIGlzIGEgY21iLXN1cGVyYnVpbGQtaXNtLgorY3Rlc3Rfc3VibWl0KFBBUlRTIFVwZGF0ZSkKK2N0ZXN0X3N1Ym1pdChQQVJUUyBDb25maWd1cmUpCisKK2lmIChjb25maWd1cmVfcmVzdWx0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIkZhaWxlZCB0byBjb25maWd1cmUiKQorZW5kaWYgKCkKKworaW5jbHVkZShQcm9jZXNzb3JDb3VudCkKK1Byb2Nlc3NvckNvdW50KG5wcm9jKQorCitpZiAoQ1RFU1RfQ01BS0VfR0VORVJBVE9SIFNUUkVRVUFMICJVbml4IE1ha2VmaWxlcyIpCisgIHNldChDVEVTVF9CVUlMRF9GTEFHUyAiLWoke25wcm9jfSIpCitlbmRpZiAoKQorCitjdGVzdF9idWlsZCgKKyAgTlVNQkVSX1dBUk5JTkdTIG51bV93YXJuaW5ncworICBSRVRVUk5fVkFMVUUgYnVpbGRfcmVzdWx0KQorY3Rlc3Rfc3VibWl0KFBBUlRTIEJ1aWxkKQorCitpZiAoYnVpbGRfcmVzdWx0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIkZhaWxlZCB0byBidWlsZCIpCitlbmRpZiAoKQorCitpZiAoIiRFTlZ7Q1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRH0iIEFORCBudW1fd2FybmluZ3MgR1JFQVRFUiAwKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIkZvdW5kICR7bnVtX3dhcm5pbmdzfSB3YXJuaW5ncyAodHJlYXRpbmcgYXMgZmF0YWwpLiIpCitlbmRpZiAoKQorCitzZXQoY3Rlc3RfbGFiZWxfYXJncykKK2lmIChOT1QgIiRFTlZ7Q1RFU1RfTEFCRUxTfSIgU1RSRVFVQUwgIiIpCisgIGxpc3QoQVBQRU5EIGN0ZXN0X2xhYmVsX2FyZ3MKKyAgICBJTkNMVURFX0xBQkVMICIkRU5We0NURVNUX0xBQkVMU30iKQorZW5kaWYgKCkKKworaW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jdGVzdF9leGNsdXNpb25zLmNtYWtlIikKK2N0ZXN0X3Rlc3QoCisgIFBBUkFMTEVMX0xFVkVMICIke25wcm9jfSIKKyAgUkVUVVJOX1ZBTFVFIHRlc3RfcmVzdWx0CisgICR7Y3Rlc3RfbGFiZWxfYXJnc30KKyAgRVhDTFVERSAiJHt0ZXN0X2V4Y2x1c2lvbnN9IikKK2N0ZXN0X3N1Ym1pdChQQVJUUyBUZXN0KQorCitpZiAodGVzdF9yZXN1bHQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiRmFpbGVkIHRvIHRlc3QiKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvZG9ja2VyL2N1ZGExMC4yL0RvY2tlcmZpbGUgYi8uZ2l0bGFiL2NpL2RvY2tlci9jdWRhMTAuMi9Eb2NrZXJmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZWEwZTcKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2RvY2tlci9jdWRhMTAuMi9Eb2NrZXJmaWxlCkBAIC0wLDAgKzEsNSBAQAorRlJPTSBudmlkaWEvY3VkYToxMC4yLWRldmVsLXVidW50dTE4LjA0CitNQUlOVEFJTkVSIEJlbiBCb2Vja2VsIDxiZW4uYm9lY2tlbEBraXR3YXJlLmNvbT4KKworQ09QWSBpbnN0YWxsX2RlcHMuc2ggL3Jvb3QvaW5zdGFsbF9kZXBzLnNoCitSVU4gc2ggL3Jvb3QvaW5zdGFsbF9kZXBzLnNoCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2RvY2tlci9jdWRhMTAuMi9pbnN0YWxsX2RlcHMuc2ggYi8uZ2l0bGFiL2NpL2RvY2tlci9jdWRhMTAuMi9pbnN0YWxsX2RlcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQ1N2NkMwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvZG9ja2VyL2N1ZGExMC4yL2luc3RhbGxfZGVwcy5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKworc2V0IC1lCisKK2FwdC1nZXQgdXBkYXRlCisKKyMgSW5zdGFsbCBkZXZlbG9wbWVudCB0b29scy4KK2FwdC1nZXQgaW5zdGFsbCAteSBcCisgICAgZysrIFwKKyAgICBjdXJsIFwKKyAgICBnaXQKKworYXB0LWdldCBjbGVhbgpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9kb2NrZXIvZGViaWFuMTAvRG9ja2VyZmlsZSBiLy5naXRsYWIvY2kvZG9ja2VyL2RlYmlhbjEwL0RvY2tlcmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjMzg1MQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvZG9ja2VyL2RlYmlhbjEwL0RvY2tlcmZpbGUKQEAgLTAsMCArMSwxNSBAQAorRlJPTSBkZWJpYW46MTAgYXMgaXd5dS1idWlsZAorTUFJTlRBSU5FUiBCZW4gQm9lY2tlbCA8YmVuLmJvZWNrZWxAa2l0d2FyZS5jb20+CisKK0NPUFkgaW5zdGFsbF9pd3l1LnNoIC9yb290L2luc3RhbGxfaXd5dS5zaAorUlVOIHNoIC9yb290L2luc3RhbGxfaXd5dS5zaAorCitGUk9NIGRlYmlhbjoxMAorTUFJTlRBSU5FUiBCZW4gQm9lY2tlbCA8YmVuLmJvZWNrZWxAa2l0d2FyZS5jb20+CisKK0NPUFkgaW5zdGFsbF9kZXBzLnNoIC9yb290L2luc3RhbGxfZGVwcy5zaAorUlVOIHNoIC9yb290L2luc3RhbGxfZGVwcy5zaAorCitDT1BZIC0tZnJvbT1pd3l1LWJ1aWxkIC9yb290L2l3eXUudGFyLmd6IC9yb290L2l3eXUudGFyLmd6CitSVU4gdGFyIC1DIC8gLXhmIC9yb290L2l3eXUudGFyLmd6CitSVU4gbG4gLXMgL3Vzci9saWIvbGx2bS02LjAvYmluL2luY2x1ZGUtd2hhdC15b3UtdXNlIC91c3IvYmluL2luY2x1ZGUtd2hhdC15b3UtdXNlLTYuMApkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9kb2NrZXIvZGViaWFuMTAvaW5zdGFsbF9kZXBzLnNoIGIvLmdpdGxhYi9jaS9kb2NrZXIvZGViaWFuMTAvaW5zdGFsbF9kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjljMzJkNjQKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL2RvY2tlci9kZWJpYW4xMC9pbnN0YWxsX2RlcHMuc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCithcHQtZ2V0IHVwZGF0ZQorCisjIEluc3RhbGwgYnVpbGQgcmVxdWlyZW1lbnRzLgorYXB0LWdldCBpbnN0YWxsIC15IFwKKyAgICBsaWJzc2wtZGV2CisKKyMgSW5zdGFsbCBkZXZlbG9wbWVudCB0b29scy4KK2FwdC1nZXQgaW5zdGFsbCAteSBcCisgICAgZysrIFwKKyAgICBjdXJsIFwKKyAgICBnaXQKKworIyBJbnN0YWxsIGl3eXUgcnVudGltZSBkZXBzLgorYXB0LWdldCBpbnN0YWxsIC15IFwKKyAgICBjbGFuZy02LjAgXAorICAgIGxpYm5jdXJzZXM2CisKK2FwdC1nZXQgY2xlYW4KZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvZG9ja2VyL2RlYmlhbjEwL2luc3RhbGxfaXd5dS5zaCBiLy5naXRsYWIvY2kvZG9ja2VyL2RlYmlhbjEwL2luc3RhbGxfaXd5dS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NGQyNmVmCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9kb2NrZXIvZGViaWFuMTAvaW5zdGFsbF9pd3l1LnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworIyBJbnN0YWxsIGRldmVsb3BtZW50IHRvb2xzLgorYXB0LWdldCB1cGRhdGUKK2FwdC1nZXQgaW5zdGFsbCAteSBcCisgICAgY2xhbmctNi4wIFwKKyAgICBsaWJjbGFuZy02LjAtZGV2IFwKKyAgICBsbHZtLTYuMC1kZXYgXAorICAgIGxpYnotZGV2IFwKKyAgICBnKysgXAorICAgIGNtYWtlIFwKKyAgICBuaW5qYS1idWlsZCBcCisgICAgZ2l0CisKK2NkIC9yb290CitnaXQgY2xvbmUgImh0dHBzOi8vZ2l0aHViLmNvbS9pbmNsdWRlLXdoYXQteW91LXVzZS9pbmNsdWRlLXdoYXQteW91LXVzZS5naXQiCitjZCBpbmNsdWRlLXdoYXQteW91LXVzZQorcmVhZG9ubHkgbGx2bV92ZXJzaW9uPSIkKCBjbGFuZy02LjAgLS12ZXJzaW9uIHwgaGVhZCAtbjEgfCBjdXQgLWQnICcgLWYzIHwgY3V0IC1kLiAtZi0yICkiCitnaXQgY2hlY2tvdXQgImNsYW5nXyRsbHZtX3ZlcnNpb24iCitta2RpciBidWlsZAorY2QgYnVpbGQKKworY21ha2UgLUdOaW5qYSBcCisgICAgLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgXAorICAgICItRENNQUtFX0lOU1RBTExfUFJFRklYPS91c3IvbGliL2xsdm0tJGxsdm1fdmVyc2lvbiIgXAorICAgICItRElXWVVfTExWTV9ST09UX1BBVEg9L3Vzci9saWIvbGx2bS0kbGx2bV92ZXJzaW9uIiBcCisgICAgLi4KK25pbmphCitERVNURElSPS9yb290L2l3eXUtZGVzdGRpciBuaW5qYSBpbnN0YWxsCit0YXIgLUMgL3Jvb3QvaXd5dS1kZXN0ZGlyIC1jZiAvcm9vdC9pd3l1LnRhci5neiAuCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2RvY2tlci9mZWRvcmEzMS9Eb2NrZXJmaWxlIGIvLmdpdGxhYi9jaS9kb2NrZXIvZmVkb3JhMzEvRG9ja2VyZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTg4YTg1Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9kb2NrZXIvZmVkb3JhMzEvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDUgQEAKK0ZST00gZmVkb3JhOjMxCitNQUlOVEFJTkVSIEJlbiBCb2Vja2VsIDxiZW4uYm9lY2tlbEBraXR3YXJlLmNvbT4KKworQ09QWSBpbnN0YWxsX2RlcHMuc2ggL3Jvb3QvaW5zdGFsbF9kZXBzLnNoCitSVU4gc2ggL3Jvb3QvaW5zdGFsbF9kZXBzLnNoCmRpZmYgLS1naXQgYS8uZ2l0bGFiL2NpL2RvY2tlci9mZWRvcmEzMS9pbnN0YWxsX2RlcHMuc2ggYi8uZ2l0bGFiL2NpL2RvY2tlci9mZWRvcmEzMS9pbnN0YWxsX2RlcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQ4NTdjMQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvZG9ja2VyL2ZlZG9yYTMxL2luc3RhbGxfZGVwcy5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworIyBJbnN0YWxsIGJ1aWxkIHJlcXVpcmVtZW50cy4KK2RuZiBpbnN0YWxsIC0tc2V0b3B0PWluc3RhbGxfd2Vha19kZXBzPUZhbHNlIC15IFwKKyAgICBuY3Vyc2VzLWRldmVsIFwKKyAgICBvcGVuc3NsLWRldmVsIFwKKyAgICBxdDUtcXRiYXNlLWRldmVsCisKKyMgSW5zdGFsbCBkZXZlbG9wbWVudCB0b29scy4KK2RuZiBpbnN0YWxsIC0tc2V0b3B0PWluc3RhbGxfd2Vha19kZXBzPUZhbHNlIC15IFwKKyAgICBjbGFuZy10b29scy1leHRyYSBcCisgICAgZ2NjLWMrKyBcCisgICAgZ2l0LWNvcmUgXAorICAgIG1ha2UKKworIyBJbnN0YWxsIGRvY3VtZW50YXRpb24gdG9vbHMuCitkbmYgaW5zdGFsbCAtLXNldG9wdD1pbnN0YWxsX3dlYWtfZGVwcz1GYWxzZSAteSBcCisgICAgcHl0aG9uMy1zcGhpbnggXAorICAgIHRleGluZm8gXAorICAgIHF0NS1xdHRvb2xzLWRldmVsCisKKyMgVG9vbHMgbmVlZGVkIGZvciB0aGUgdGVzdCBzdWl0ZS4KK2RuZiBpbnN0YWxsIC0tc2V0b3B0PWluc3RhbGxfd2Vha19kZXBzPUZhbHNlIC15IFwKKyAgICBmaW5kdXRpbHMgXAorICAgIGZpbGUKKworZG5mIGNsZWFuIGFsbApkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9kb3dubG9hZF9xdC5jbWFrZSBiLy5naXRsYWIvY2kvZG93bmxvYWRfcXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5MmIxYwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvZG93bmxvYWRfcXQuY21ha2UKQEAgLTAsMCArMSwxNDYgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEyKQorCisjIElucHV0IHZhcmlhYmxlcy4KK3NldChxdF92ZXJzaW9uX21ham9yICI1IikKK3NldChxdF92ZXJzaW9uX21pbm9yICIxNSIpCitzZXQocXRfdmVyc2lvbl9wYXRjaCAiMCIpCisjIFRoaXMgVVJMIGlzIG9ubHkgdmlzaWJsZSBpbnNpZGUgb2YgS2l0d2FyZSdzIG5ldHdvcmsuIFBsZWFzZSB1c2UgeW91ciBvd24gUXQKKyMgQWNjb3VudCB0byBvYnRhaW4gdGhlc2UgZmlsZXMuCitzZXQocXRfdXJsX3Jvb3QgImh0dHBzOi8vcGFyYXZpZXcub3JnL2ZpbGVzL2RlcGVuZGVuY2llcy9pbnRlcm5hbC9xdCIpCisKKyMgRGV0ZXJtaW5lIHRoZSBBQkkgdG8gZmV0Y2ggZm9yIFF0LgoraWYgKCIkRU5We0NNQUtFX0NPTkZJR1VSQVRJT059IiBNQVRDSEVTICJ2czIwMTUiKQorICBzZXQocXRfcGxhdGZvcm0gIndpbmRvd3NfeDg2IikKKyAgc2V0KG1zdmNfeWVhciAiMjAxNSIpCisgIHNldChxdF9hYmkgIndpbjY0X21zdmMke21zdmNfeWVhcn1fNjQiKQorZWxzZWlmICgiJEVOVntDTUFLRV9DT05GSUdVUkFUSU9OfSIgTUFUQ0hFUyAidnMyMDE3IiBPUgorICAgICAgICAiJEVOVntDTUFLRV9DT05GSUdVUkFUSU9OfSIgTUFUQ0hFUyAidnMyMDE5IikKKyAgc2V0KHF0X3BsYXRmb3JtICJ3aW5kb3dzX3g4NiIpCisgIHNldChtc3ZjX3llYXIgIjIwMTciKQorICBzZXQocXRfYWJpICJ3aW42NF9tc3ZjJHttc3ZjX3llYXJ9XzY0IikKK2Vsc2VpZiAoIiRFTlZ7Q01BS0VfQ09ORklHVVJBVElPTn0iIE1BVENIRVMgIm1hY29zIikKKyAgc2V0KHF0X3BsYXRmb3JtICJtYWNfeDY0IikKKyAgc2V0KHF0X2FiaSAiY2xhbmdfNjQiKQorZWxzZSAoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlVua25vd24gQUJJIHRvIHVzZSBmb3IgUXQiKQorZW5kaWYgKCkKKworIyBDb21iaW5lZCB2ZXJzaW9uIHZhcmlhYmxlcy4KK3NldChxdF92ZXJzaW9uICIke3F0X3ZlcnNpb25fbWFqb3J9LiR7cXRfdmVyc2lvbl9taW5vcn0uJHtxdF92ZXJzaW9uX3BhdGNofSIpCitzZXQocXRfdmVyc2lvbl9ub2RvdCAiJHtxdF92ZXJzaW9uX21ham9yfSR7cXRfdmVyc2lvbl9taW5vcn0ke3F0X3ZlcnNpb25fcGF0Y2h9IikKKworIyBGaWxlcyBuZWVkZWQgdG8gZG93bmxvYWQuCitzZXQocXRfZmlsZXMpCitpZiAocXRfcGxhdGZvcm0gU1RSRVFVQUwgIndpbmRvd3NfeDg2IikKKyAgaWYgKG1zdmNfeWVhciBTVFJFUVVBTCAiMjAxNyIpCisgICAgc2V0KHF0X2J1aWxkX3N0YW1wICIyMDIwMDIyNjA1MzYiKQorICBlbHNlaWYgKG1zdmNfeWVhciBTVFJFUVVBTCAiMjAxNSIpCisgICAgc2V0KHF0X2J1aWxkX3N0YW1wICIyMDIwMDUxNTA3MDAiKQorICBlbHNlICgpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICAgIkJ1aWxkIHN0YW1wIGZvciBNU1ZDICR7bXN2Y195ZWFyfSBpcyB1bmtub3duIikKKyAgZW5kaWYgKCkKKworICBzZXQocXRfZmlsZV9uYW1lX3ByZWZpeCAiJHtxdF92ZXJzaW9ufS0wLSR7cXRfYnVpbGRfc3RhbXB9IikKKworICBmb3JlYWNoIChxdF9jb21wb25lbnQgSU4gSVRFTVMgcXRiYXNlIHF0d2luZXh0cmFzKQorICAgIGxpc3QoQVBQRU5EIHF0X2ZpbGVzCisgICAgICAiJHtxdF9maWxlX25hbWVfcHJlZml4fSR7cXRfY29tcG9uZW50fS1XaW5kb3dzLVdpbmRvd3NfMTAtTVNWQyR7bXN2Y195ZWFyfS1XaW5kb3dzLVdpbmRvd3NfMTAtWDg2XzY0Ljd6IikKKyAgZW5kZm9yZWFjaCAoKQorCisgIHNldChxdF9zdWJkaXIgIiR7cXRfdmVyc2lvbn0vbXN2YyR7bXN2Y195ZWFyfV82NCIpCitlbHNlaWYgKHF0X3BsYXRmb3JtIFNUUkVRVUFMICJtYWNfeDY0IikKKyAgc2V0KHF0X2J1aWxkX3N0YW1wICIyMDIwMDUxNDA4MDUiKQorICBzZXQocXRfZmlsZV9uYW1lX3ByZWZpeCAiJHtxdF92ZXJzaW9ufS0wLSR7cXRfYnVpbGRfc3RhbXB9IikKKworICBmb3JlYWNoIChxdF9jb21wb25lbnQgSU4gSVRFTVMgcXRiYXNlKQorICAgIGxpc3QoQVBQRU5EIHF0X2ZpbGVzCisgICAgICAiJHtxdF9maWxlX25hbWVfcHJlZml4fSR7cXRfY29tcG9uZW50fS1NYWNPUy1NYWNPU18xMF8xMy1DbGFuZy1NYWNPUy1NYWNPU18xMF8xMy1YODZfNjQuN3oiKQorICBlbmRmb3JlYWNoICgpCisKKyAgc2V0KHF0X3N1YmRpciAiJHtxdF92ZXJzaW9ufS9jbGFuZ182NCIpCitlbHNlICgpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVW5rbm93biBmaWxlcyBmb3IgJHtxdF9wbGF0Zm9ybX0iKQorZW5kaWYgKCkKKworIyBWZXJpZnkgdGhhdCB3ZSBrbm93IHdoYXQgZGlyZWN0b3J5IHdpbGwgYmUgZXh0cmFjdGVkLgoraWYgKE5PVCBxdF9zdWJkaXIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhlIGV4dHJhY3RlZCBzdWJkaXJlY3RvcnkgaXMgbm90IHNldCIpCitlbmRpZiAoKQorCisjIEJ1aWxkIHVwIHRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGRvd25sb2FkLgorc2V0KHF0X3VybF9wYXRoICIke3F0X3BsYXRmb3JtfS9kZXNrdG9wL3F0NV8ke3F0X3ZlcnNpb25fbm9kb3R9L3F0LnF0NS4ke3F0X3ZlcnNpb25fbm9kb3R9LiR7cXRfYWJpfSIpCitzZXQocXRfdXJsX3ByZWZpeCAiJHtxdF91cmxfcm9vdH0vJHtxdF91cmxfcGF0aH0iKQorCisjIEluY2x1ZGUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgaGFzaGVzIG9mIHRoZSBmaWxlcyB0aGF0IG1hdHRlci4KK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZG93bmxvYWRfcXRfaGFzaGVzLmNtYWtlIikKKworIyBEb3dubG9hZCBhbmQgZXh0cmFjdCBlYWNoIGZpbGUuCitmb3JlYWNoIChxdF9maWxlIElOIExJU1RTIHF0X2ZpbGVzKQorICAjIEVuc3VyZSB3ZSBoYXZlIGEgaGFzaCB0byB2ZXJpZnkuCisgIGlmIChOT1QgREVGSU5FRCAiJHtxdF9maWxlfV9oYXNoIikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAiVW5rbm93biBoYXNoIGZvciAke3F0X2ZpbGV9IikKKyAgZW5kaWYgKCkKKworICAjIERvd25sb2FkIHRoZSBmaWxlLgorICBmaWxlKERPV05MT0FECisgICAgIiR7cXRfdXJsX3ByZWZpeH0vJHtxdF9maWxlfSIKKyAgICAiLmdpdGxhYi8ke3F0X2ZpbGV9IgorICAgIFNUQVRVUyBkb3dubG9hZF9zdGF0dXMKKyAgICBFWFBFQ1RFRF9IQVNIICJTSEEyNTY9JHske3F0X2ZpbGV9X2hhc2h9IikKKworICAjIENoZWNrIHRoZSBkb3dubG9hZCBzdGF0dXMuCisgIGxpc3QoR0VUIGRvd25sb2FkX3N0YXR1cyAwIHJlcykKKyAgaWYgKHJlcykKKyAgICBsaXN0KEdFVCBkb3dubG9hZF9zdGF0dXMgMSBlcnIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICAgIkZhaWxlZCB0byBkb3dubG9hZCAke3F0X2ZpbGV9OiAke2Vycn0iKQorICBlbmRpZiAoKQorCisgICMgRXh0cmFjdCB0aGUgZmlsZS4KKyAgZXhlY3V0ZV9wcm9jZXNzKAorICAgIENPTU1BTkQKKyAgICAgICIke0NNQUtFX0NPTU1BTkR9IgorICAgICAgLUUgdGFyCisgICAgICB4ZiAiJHtxdF9maWxlfSIKKyAgICBXT1JLSU5HX0RJUkVDVE9SWSAiLmdpdGxhYiIKKyAgICBSRVNVTFRfVkFSSUFCTEUgcmVzCisgICAgRVJST1JfVkFSSUFCTEUgZXJyCisgICAgRVJST1JfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKyAgaWYgKHJlcykKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAiRmFpbGVkIHRvIGV4dHJhY3QgJHtxdF9maWxlfTogJHtlcnJ9IikKKyAgZW5kaWYgKCkKK2VuZGZvcmVhY2ggKCkKKworIyBUaGUgV2luZG93cyB0YXJiYWxscyBoYXZlIHNvbWUgdW5mb3J0dW5hdGUgcGVybWlzc2lvbnMgaW4gdGhlbSB0aGF0IHByZXZlbnQKKyMgZGVsZXRpb24gd2hlbiBgZ2l0IGNsZWFuIC1mZmR4YCB0cmllcyB0byBjbGVhbiB1cCB0aGUgZGlyZWN0b3J5LgoraWYgKHF0X3BsYXRmb3JtIFNUUkVRVUFMICJ3aW5kb3dzX3g4NiIpCisgICMgRml4IHBlcm1pc3Npb25zLgorICBmaWxlKFRPX05BVElWRV9QQVRIICIuZ2l0bGFiLyR7cXRfc3ViZGlyfS8qLioiIG5hdGl2ZV9xdF9kaXIpCisgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAjIFJlbW92ZSBhbnkgcmVhZC1vbmx5IGZsYWdzIHRoYXQgYXJlbid0IGFmZmVjdGVkIGJ5IGBpY2FjbHNgLgorICAgIENPTU1BTkQKKyAgICAgIGF0dHJpYgorICAgICAgLXIgIyBSZW1vdmUgcmVhZG9ubHkgZmxhZworICAgICAgIiR7bmF0aXZlX3F0X2Rpcn0iCisgICAgICAvZCAjIFRyZWF0IGFzIGEgZGlyZWN0b3J5CisgICAgICAvcyAjIFJlY3Vyc2l2ZQorICAgICAgL2wgIyBEb24ndCBkZXJlZmVyZW5jZSBzeW1saW5rcworICAgIFJFU1VMVF9WQVJJQUJMRSByZXMKKyAgICBFUlJPUl9WQVJJQUJMRSBlcnIKKyAgICBFUlJPUl9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorICBpZiAocmVzKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICJGYWlsZWQgdG8gZml4IHJlbW92ZSByZWFkLW9ubHkgZmxhZ3MgaW4gJHtxdF9maWxlfTogJHtlcnJ9IikKKyAgZW5kaWYgKCkKK2VuZGlmICgpCisKKyMgTW92ZSB0byBhIHByZWRpY3RhYmxlIHByZWZpeC4KK2ZpbGUoUkVOQU1FCisgICIuZ2l0bGFiLyR7cXRfc3ViZGlyfSIKKyAgIi5naXRsYWIvcXQiKQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9kb3dubG9hZF9xdF9oYXNoZXMuY21ha2UgYi8uZ2l0bGFiL2NpL2Rvd25sb2FkX3F0X2hhc2hlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNiNTk3Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9kb3dubG9hZF9xdF9oYXNoZXMuY21ha2UKQEAgLTAsMCArMSwxMSBAQAorIyBMaW5lcyBjYW4gYmUgZ2VuZXJhdGVkIGJ5IGRvaW5nOgorIworIyAgIHNoYTI1NnN1bSAkZmlsZXMgfCBhd2sgJ3sgcHJpbnQgInNldChcIiIgJDIgIl9oYXNoXCIgIiAkMSAiKSIgfScgPj4gJHRoaXNmaWxlCisKK3NldCgiNS4xNS4wLTAtMjAyMDAyMjYwNTM2cXRiYXNlLVdpbmRvd3MtV2luZG93c18xMC1NU1ZDMjAxNy1XaW5kb3dzLVdpbmRvd3NfMTAtWDg2XzY0Ljd6X2hhc2giIGMwNDE1OTZiZThmN2ExNmM3YmU5ZWE2NzU3YzE0NzY2ZmYzMjAwYWI2ZDU2ZjdkYjhmODY1ZGJmZTAzOWZlMjApCitzZXQoIjUuMTUuMC0wLTIwMjAwMjI2MDUzNnF0d2luZXh0cmFzLVdpbmRvd3MtV2luZG93c18xMC1NU1ZDMjAxNy1XaW5kb3dzLVdpbmRvd3NfMTAtWDg2XzY0Ljd6X2hhc2giIDEwNzk2MTI4ZmFjNTRmMTQ2NzY3ZTMzZjY4NzI5NzViYTIzODg1ODU0N2RlN2E5NjUwZWM0Y2Q5NTgxZmU3MWEpCisKK3NldCgiNS4xNS4wLTAtMjAyMDA1MTUwNzAwcXRiYXNlLVdpbmRvd3MtV2luZG93c18xMC1NU1ZDMjAxNS1XaW5kb3dzLVdpbmRvd3NfMTAtWDg2XzY0Ljd6X2hhc2giIDBjMjY1M2M1ZWNhMjU2ZjU5YzBiNDhiNTM3Y2Q2MzNiMDU1NjBlNDI0MWMwMjI2ODU2ZDJhZTIyYWIwNjZkZjQpCitzZXQoIjUuMTUuMC0wLTIwMjAwNTE1MDcwMHF0d2luZXh0cmFzLVdpbmRvd3MtV2luZG93c18xMC1NU1ZDMjAxNS1XaW5kb3dzLVdpbmRvd3NfMTAtWDg2XzY0Ljd6X2hhc2giIDRiY2EzYThkOGM3NjExZTIxMWE4MmQ4NmIzMzk2ZjhhNjIyYWJlNzg1OWQ1MDUyNDUyNDE0NjQyZWMxOTE4NDQpCisKK3NldCgiNS4xNS4wLTAtMjAyMDA1MTQwODA1cXRiYXNlLU1hY09TLU1hY09TXzEwXzEzLUNsYW5nLU1hY09TLU1hY09TXzEwXzEzLVg4Nl82NC43el9oYXNoIiAwNGQ4NjdjODFkMjQzMWYyODhjNDJjOTc1MjY0Mjc1OTQ2MGI5NDY4NDc3ZGUzNDkzNjhkY2M4ZGUwYzhkZGM0KQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9naXRsYWJfY2kuY21ha2UgYi8uZ2l0bGFiL2NpL2dpdGxhYl9jaS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OThkNWVhCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS9naXRsYWJfY2kuY21ha2UKQEAgLTAsMCArMSw1OCBAQAoraWYgKE5PVCBERUZJTkVEICJFTlZ7R0lUTEFCX0NJfSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhpcyBzY3JpcHQgYXNzdW1lcyBpdCBpcyBiZWluZyBydW4gaW5zaWRlIG9mIEdpdExhYi1DSSIpCitlbmRpZiAoKQorCisjIFNldCB1cCB0aGUgc291cmNlIGFuZCBidWlsZCBwYXRocy4KK3NldChDVEVTVF9TT1VSQ0VfRElSRUNUT1JZICIkRU5We0NJX1BST0pFQ1RfRElSfSIpCitpZiAoTk9UICIkRU5We0NURVNUX1NPVVJDRV9TVUJESVJFQ1RPUll9IiBTVFJFUVVBTCAiIikKKyAgc3RyaW5nKEFQUEVORCBDVEVTVF9TT1VSQ0VfRElSRUNUT1JZICIvJEVOVntDVEVTVF9TT1VSQ0VfU1VCRElSRUNUT1JZfSIpCitlbmRpZiAoKQorc2V0KENURVNUX0JJTkFSWV9ESVJFQ1RPUlkgIiR7Q1RFU1RfU09VUkNFX0RJUkVDVE9SWX0vYnVpbGQiKQorCitpZiAoIiRFTlZ7Q01BS0VfQ09ORklHVVJBVElPTn0iIFNUUkVRVUFMICIiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlRoZSBDTUFLRV9DT05GSUdVUkFUSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlcXVpcmVkIHRvIGtub3cgd2hhdCAiCisgICAgImNhY2hlIGluaXRpYWxpemF0aW9uIGZpbGUgdG8gdXNlLiIpCitlbmRpZiAoKQorCisjIFNldCB0aGUgYnVpbGQgbWV0YWRhdGEuCitzZXQoQ1RFU1RfQlVJTERfTkFNRSAiJEVOVntDSV9QUk9KRUNUX05BTUV9LSRFTlZ7Q01BS0VfQ09ORklHVVJBVElPTn0iKQorc2V0KENURVNUX1NJVEUgImdpdGxhYi1jaSIpCisKKyMgRGVmYXVsdCB0byBSZWxlYXNlIGJ1aWxkcy4KK2lmIChOT1QgIiRFTlZ7Q01BS0VfQlVJTERfVFlQRX0iIFNUUkVRVUFMICIiKQorICBzZXQoQ1RFU1RfQlVJTERfQ09ORklHVVJBVElPTiAiJEVOVntDTUFLRV9CVUlMRF9UWVBFfSIpCitlbmRpZiAoKQoraWYgKE5PVCBDVEVTVF9CVUlMRF9DT05GSUdVUkFUSU9OKQorICBzZXQoQ1RFU1RfQlVJTERfQ09ORklHVVJBVElPTiAiUmVsZWFzZSIpCitlbmRpZiAoKQorc2V0KENURVNUX0NPTkZJR1VSQVRJT05fVFlQRSAiJHtDVEVTVF9CVUlMRF9DT05GSUdVUkFUSU9OfSIpCisKKyMgRGVmYXVsdCB0byB1c2luZyBOaW5qYS4KK2lmIChOT1QgIiRFTlZ7Q01BS0VfR0VORVJBVE9SfSIgU1RSRVFVQUwgIiIpCisgIHNldChDVEVTVF9DTUFLRV9HRU5FUkFUT1IgIiRFTlZ7Q01BS0VfR0VORVJBVE9SfSIpCitlbmRpZiAoKQoraWYgKE5PVCBDVEVTVF9DTUFLRV9HRU5FUkFUT1IpCisgIHNldChDVEVTVF9DTUFLRV9HRU5FUkFUT1IgIk5pbmphIikKK2VuZGlmICgpCisKKyMgU2V0IHRoZSB0b29sc2V0IGFuZCBwbGF0Zm9ybSBpZiByZXF1ZXN0ZWQuCitpZiAoTk9UICIkRU5We0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STX0iIFNUUkVRVUFMICIiKQorICBzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNICIkRU5We0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STX0iKQorZW5kaWYgKCkKK2lmIChOT1QgIiRFTlZ7Q01BS0VfR0VORVJBVE9SX1RPT0xTRVR9IiBTVFJFUVVBTCAiIikKKyAgc2V0KENURVNUX0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUICIkRU5We0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUfSIpCitlbmRpZiAoKQorCisjIERldGVybWluZSB0aGUgdHJhY2sgdG8gc3VibWl0IHRvLgorc2V0KGN0ZXN0X3RyYWNrICJFeHBlcmltZW50YWwiKQoraWYgKE5PVCAiJEVOVntDSV9NRVJHRV9SRVFVRVNUX0lEfSIgU1RSRVFVQUwgIiIpCisgIHNldChjdGVzdF90cmFjayAibWVyZ2UtcmVxdWVzdHMiKQorZWxzZWlmICgiJEVOVntDSV9QUk9KRUNUX1BBVEh9IiBTVFJFUVVBTCAiY21ha2UvY21ha2UiKQorICBpZiAoIiRFTlZ7Q0lfQ09NTUlUX1JFRl9OQU1FfSIgU1RSRVFVQUwgIm1hc3RlciIpCisgICAgc2V0KGN0ZXN0X3RyYWNrICJtYXN0ZXIiKQorICBlbHNlaWYgKCIkRU5We0NJX0NPTU1JVF9SRUZfTkFNRX0iIFNUUkVRVUFMICJyZWxlYXNlIikKKyAgICBzZXQoY3Rlc3RfdHJhY2sgInJlbGVhc2UiKQorICBlbmRpZiAoKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvbmluamEucHMxIGIvLmdpdGxhYi9jaS9uaW5qYS5wczEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTFmOGIwMgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvY2kvbmluamEucHMxCkBAIC0wLDAgKzEsMTcgQEAKKyRlcnJvcmFjdGlvbnByZWZlcmVuY2UgPSAic3RvcCIKKworJHZlcnNpb24gPSAiMS4xMC4wIgorJHNoYTI1NnN1bSA9ICI5MTlGRDE1OEMxNkJGMTM1RThBODUwQkI0MDQ2RUMxQ0UyOEE3NDM5RUUwOEI5NzdDRDBCN0Y2QjM0NjNEMTc4IgorJGZpbGVuYW1lID0gIm5pbmphLXdpbiIKKyR0YXJiYWxsID0gIiRmaWxlbmFtZS56aXAiCisKKyRvdXRkaXIgPSAkcHdkLlBhdGgKKyRvdXRkaXIgPSAiJG91dGRpclwuZ2l0bGFiIgorSW52b2tlLVdlYlJlcXVlc3QgLVVyaSAiaHR0cHM6Ly9naXRodWIuY29tL25pbmphLWJ1aWxkL25pbmphL3JlbGVhc2VzL2Rvd25sb2FkL3YkdmVyc2lvbi8kdGFyYmFsbCIgLU91dEZpbGUgIiRvdXRkaXJcJHRhcmJhbGwiCiskaGFzaCA9IEdldC1GaWxlSGFzaCAiJG91dGRpclwkdGFyYmFsbCIgLUFsZ29yaXRobSBTSEEyNTYKK2lmICgkaGFzaC5IYXNoIC1uZSAkc2hhMjU2c3VtKSB7CisgICAgZXhpdCAxCit9CisKK0FkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLklPLkNvbXByZXNzaW9uLkZpbGVTeXN0ZW0KK1tTeXN0ZW0uSU8uQ29tcHJlc3Npb24uWmlwRmlsZV06OkV4dHJhY3RUb0RpcmVjdG9yeSgiJG91dGRpclwkdGFyYmFsbCIsICIkb3V0ZGlyIikKZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvbmluamEuc2ggYi8uZ2l0bGFiL2NpL25pbmphLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzYzFlZTkKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL25pbmphLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworcmVhZG9ubHkgdmVyc2lvbj0iMS4xMC4wIgorCitjYXNlICIkKCB1bmFtZSAtcyApIiBpbgorICAgIExpbnV4KQorICAgICAgICBzaGF0b29sPSJzaGEyNTZzdW0iCisgICAgICAgIHNoYTI1NnN1bT0iNjU2NjgzNmRkZjNkNzJjYTA2Njg1YjM0ODE0ZTBjNmZhMGYwOTQzNTQyZDY1MWQwZGFiMzE1MGYxMDMwN2M4MiIKKyAgICAgICAgcGxhdGZvcm09ImxpbnV4IgorICAgICAgICA7OworICAgIERhcndpbikKKyAgICAgICAgc2hhdG9vbD0ic2hhc3VtIC1hIDI1NiIKKyAgICAgICAgc2hhMjU2c3VtPSIyZWU0MDVjMGUyMDVkNTU2NjZjNjBjYzljMGQ4ZDA0YzhlZGUwNmQzZWYyZTJjMmFhYmUwOGZkODFjMTdkMjJlIgorICAgICAgICBwbGF0Zm9ybT0ibWFjIgorICAgICAgICA7OworICAgICopCisgICAgICAgIGVjaG8gIlVucmVjb2duaXplZCBwbGF0Zm9ybSAkKCB1bmFtZSAtcyApIgorICAgICAgICBleGl0IDEKKyAgICAgICAgOzsKK2VzYWMKK3JlYWRvbmx5IHNoYXRvb2wKK3JlYWRvbmx5IHNoYTI1NnN1bQorcmVhZG9ubHkgcGxhdGZvcm0KKworcmVhZG9ubHkgZmlsZW5hbWU9Im5pbmphLSRwbGF0Zm9ybSIKK3JlYWRvbmx5IHRhcmJhbGw9IiRmaWxlbmFtZS56aXAiCisKK2NkIC5naXRsYWIKKworZWNobyAiJHNoYTI1NnN1bSAgJHRhcmJhbGwiID4gbmluamEuc2hhMjU2c3VtCitjdXJsIC1PTCAiaHR0cHM6Ly9naXRodWIuY29tL25pbmphLWJ1aWxkL25pbmphL3JlbGVhc2VzL2Rvd25sb2FkL3YkdmVyc2lvbi8kdGFyYmFsbCIKKyRzaGF0b29sIC0tY2hlY2sgbmluamEuc2hhMjU2c3VtCisuL2NtYWtlL2Jpbi9jbWFrZSAtRSB0YXIgeGYgIiR0YXJiYWxsIgpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9jaS9zY2NhY2hlLnNoIGIvLmdpdGxhYi9jaS9zY2NhY2hlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY3ZDUxZmYKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL2NpL3NjY2FjaGUuc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCityZWFkb25seSB2ZXJzaW9uPSIwLjIuMTMiCisKK2Nhc2UgIiQoIHVuYW1lIC1zICkiIGluCisgICAgTGludXgpCisgICAgICAgIHNoYXRvb2w9InNoYTI1NnN1bSIKKyAgICAgICAgc2hhMjU2c3VtPSIyOGE1NDk5ZTM0MDg2NWIwOGI2MzIzMDZiNDM1OTEzYmViNTkwZmJkN2I0OWEzZjg4N2E2MjNiNDU5ZmFiZGViIgorICAgICAgICBwbGF0Zm9ybT0ieDg2XzY0LXVua25vd24tbGludXgtbXVzbCIKKyAgICAgICAgOzsKKyAgICBEYXJ3aW4pCisgICAgICAgIHNoYXRvb2w9InNoYXN1bSAtYSAyNTYiCisgICAgICAgIHNoYTI1NnN1bT0iZjU2NGU5NDhhYmFkZmM5ZTQwOWViMWNkN2JhYmYyNGM2Nzg0MDU3ZDU1MDZjM2IwYTA0Y2RkMzdjZDgzMGFlOSIKKyAgICAgICAgcGxhdGZvcm09Ing4Nl82NC1hcHBsZS1kYXJ3aW4iCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZWNobyAiVW5yZWNvZ25pemVkIHBsYXRmb3JtICQoIHVuYW1lIC1zICkiCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworZXNhYworcmVhZG9ubHkgc2hhdG9vbAorcmVhZG9ubHkgc2hhMjU2c3VtCityZWFkb25seSBwbGF0Zm9ybQorCityZWFkb25seSBmaWxlbmFtZT0ic2NjYWNoZS0kdmVyc2lvbi0kcGxhdGZvcm0iCityZWFkb25seSB0YXJiYWxsPSIkZmlsZW5hbWUudGFyLmd6IgorCitjZCAuZ2l0bGFiCisKK2VjaG8gIiRzaGEyNTZzdW0gICR0YXJiYWxsIiA+IHNjY2FjaGUuc2hhMjU2c3VtCitjdXJsIC1PTCAiaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc2NjYWNoZS9yZWxlYXNlcy9kb3dubG9hZC8kdmVyc2lvbi8kdGFyYmFsbCIKKyRzaGF0b29sIC0tY2hlY2sgc2NjYWNoZS5zaGEyNTZzdW0KK3RhciB4ZiAiJHRhcmJhbGwiCittdiAiJGZpbGVuYW1lL3NjY2FjaGUiIC4KZGlmZiAtLWdpdCBhLy5naXRsYWIvY2kvdmN2YXJzYWxsLnBzMSBiLy5naXRsYWIvY2kvdmN2YXJzYWxsLnBzMQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2QzMzg2Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9jaS92Y3ZhcnNhbGwucHMxCkBAIC0wLDAgKzEsOSBAQAorJGVycm9yYWN0aW9ucHJlZmVyZW5jZSA9ICJzdG9wIgorCitjbWQgL2MgImAiJGVudjpWQ1ZBUlNBTExgIiAkVkNWQVJTUExBVEZPUk0gLXZjdmFyc192ZXI9JFZDVkFSU1ZFUlNJT04gJiBzZXQiIHwKK2ZvcmVhY2ggeworICAgIGlmICgkXyAtbWF0Y2ggIj0iKSB7CisgICAgICAgICR2ID0gJF8uc3BsaXQoIj0iKQorICAgICAgICBbRW52aXJvbm1lbnRdOjpTZXRFbnZpcm9ubWVudFZhcmlhYmxlKCR2WzBdLCAkdlsxXSkKKyAgICB9Cit9CmRpZmYgLS1naXQgYS8uZ2l0bGFiL29zLWxpbnV4LnltbCBiLy5naXRsYWIvb3MtbGludXgueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOTczNzcKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0bGFiL29zLWxpbnV4LnltbApAQCAtMCwwICsxLDIxMCBAQAorIyBMaW51eC1zcGVjaWZpYyBidWlsZGVyIGNvbmZpZ3VyYXRpb25zIGFuZCBidWlsZCBjb21tYW5kcworCisjIyBCYXNlIGltYWdlcworCisjIyMgUmVsZWFzZQorCisucmVsZWFzZV9saW51eDoKKyAgICBpbWFnZTogImtpdHdhcmUvY21ha2U6YnVpbGQtbGludXgteDg2XzY0LWRlcHMtMjAyMC0wNC0wMkBzaGEyNTY6NzdlOWFiMTgzZjM0NjgwOTkwZGI5ZGE1OTQ1NDczZTI4OGYwZDY1NTZiY2U3OWVjYzE1ODk2NzBkNjU2ZTE1NyIKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgR0lUX0NMT05FX1BBVEg6ICIkQ0lfQlVJTERTX0RJUi9jbWFrZSBjaSIKKyAgICAgICAgTEFVTkNIRVI6ICJzY2wgZW5hYmxlIGRldnRvb2xzZXQtNiByaC1weXRob24zNiAtLSIKKworIyMjIERlYmlhbgorCisuZGViaWFuMTA6CisgICAgaW1hZ2U6ICJraXR3YXJlL2NtYWtlOmNpLWRlYmlhbjEwLXg4Nl82NC0yMDIwLTA0LTI3IgorCisgICAgdmFyaWFibGVzOgorICAgICAgICBHSVRfQ0xPTkVfUEFUSDogIiRDSV9CVUlMRFNfRElSL2NtYWtlIGNpIgorCisuZGViaWFuMTBfaXd5dToKKyAgICBleHRlbmRzOiAuZGViaWFuMTAKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgQ01BS0VfQ09ORklHVVJBVElPTjogZGViaWFuMTBfaXd5dQorICAgICAgICBDVEVTVF9OT19XQVJOSU5HU19BTExPV0VEOiAxCisgICAgICAgIENNYWtlX1NLSVBfSU5TVEFMTDogMQorCisjIyMgRmVkb3JhCisKKy5mZWRvcmEzMToKKyAgICBpbWFnZTogImtpdHdhcmUvY21ha2U6Y2ktZmVkb3JhMzEteDg2XzY0LTIwMjAtMDYtMDEiCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIEdJVF9DTE9ORV9QQVRIOiAiJENJX0JVSUxEU19ESVIvY21ha2UgY2kiCisKKyMjIyMgTGludCBidWlsZHMKKworLmZlZG9yYTMxX3RpZHk6CisgICAgZXh0ZW5kczogLmZlZG9yYTMxCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IGZlZG9yYTMxX3RpZHkKKyAgICAgICAgQ1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRDogMQorICAgICAgICBDTWFrZV9TS0lQX0lOU1RBTEw6IDEKKworLmZlZG9yYTMxX3NwaGlueDoKKyAgICBleHRlbmRzOiAuZmVkb3JhMzEKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgQ01BS0VfQ09ORklHVVJBVElPTjogZmVkb3JhMzFfc3BoaW54CisgICAgICAgIENURVNUX05PX1dBUk5JTkdTX0FMTE9XRUQ6IDEKKyAgICAgICAgQ1RFU1RfU09VUkNFX1NVQkRJUkVDVE9SWTogIlV0aWxpdGllcy9TcGhpbngiCisgICAgICAgIENNYWtlX1NLSVBfSU5TVEFMTDogMQorCisjIyMjIEJ1aWxkIGFuZCB0ZXN0CisKKy5mZWRvcmEzMV9uaW5qYToKKyAgICBleHRlbmRzOiAuZmVkb3JhMzEKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgQ01BS0VfQ09ORklHVVJBVElPTjogZmVkb3JhMzFfbmluamEKKyAgICAgICAgQ1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRDogMQorCisuZmVkb3JhMzFfbmluamFfbXVsdGk6CisgICAgZXh0ZW5kczogLmZlZG9yYTMxCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IGZlZG9yYTMxX25pbmphX211bHRpCisgICAgICAgIENURVNUX05PX1dBUk5JTkdTX0FMTE9XRUQ6IDEKKyAgICAgICAgQ01BS0VfR0VORVJBVE9SOiAiTmluamEgTXVsdGktQ29uZmlnIgorCisuZmVkb3JhMzFfbWFrZWZpbGVzOgorICAgIGV4dGVuZHM6IC5mZWRvcmEzMQorCisgICAgdmFyaWFibGVzOgorICAgICAgICBDTUFLRV9DT05GSUdVUkFUSU9OOiBmZWRvcmEzMV9tYWtlZmlsZXMKKyAgICAgICAgQ1RFU1RfTk9fV0FSTklOR1NfQUxMT1dFRDogMQorICAgICAgICBDTUFLRV9HRU5FUkFUT1I6ICJVbml4IE1ha2VmaWxlcyIKKworIyMjIENVREEgYnVpbGRzCisKKy5jdWRhMTAuMjoKKyAgICBpbWFnZTogImtpdHdhcmUvY21ha2U6Y2ktY3VkYTEwLjIteDg2XzY0LTIwMjAtMDYtMTEiCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIEdJVF9DTE9ORV9QQVRIOiAiJENJX0JVSUxEU19ESVIvY21ha2UgY2kiCisgICAgICAgIENURVNUX0xBQkVMUzogIkNVREEiCisKKy5jdWRhMTAuMl9udmlkaWE6CisgICAgZXh0ZW5kczogLmN1ZGExMC4yCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IGN1ZGExMC4yX252aWRpYQorICAgICAgICBDVEVTVF9OT19XQVJOSU5HU19BTExPV0VEOiAxCisKKyMjIFRhZ3MKKworLmxpbnV4X2J1aWxkZXJfdGFnczoKKyAgICB0YWdzOgorICAgICAgICAtIGJ1aWxkCisgICAgICAgIC0gZG9ja2VyCisgICAgICAgIC0gbGludXgKKworLmxpbnV4X2J1aWxkZXJfdGFnc19xdDoKKyAgICB0YWdzOgorICAgICAgICAtIGJ1aWxkCisgICAgICAgIC0gZG9ja2VyCisgICAgICAgIC0gbGludXgKKyAgICAgICAgLSBsaW51eC0zLjE3ICMgTmVlZGVkIHRvIGJlIGFibGUgdG8gbG9hZCBGZWRvcmEncyBRdCBsaWJyYXJpZXMuCisKKy5saW51eF9idWlsZGVyX3RhZ3NfY3VkYToKKyAgICB0YWdzOgorICAgICAgICAtIGN1ZGEtcnQKKyAgICAgICAgLSBkb2NrZXIKKyAgICAgICAgLSBsaW51eAorCisjIyBMaW51eC1zcGVjaWZpYyBzY3JpcHRzCisKKy5iZWZvcmVfc2NyaXB0X2xpbnV4OiAmYmVmb3JlX3NjcmlwdF9saW51eAorICAgIC0gLmdpdGxhYi9jaS9jbWFrZS5zaAorICAgIC0gLmdpdGxhYi9jaS9uaW5qYS5zaAorICAgIC0gZXhwb3J0IFBBVEg9JFBXRC8uZ2l0bGFiOiRQV0QvLmdpdGxhYi9jbWFrZS9iaW46JFBBVEgKKyAgICAtIGNtYWtlIC0tdmVyc2lvbgorICAgIC0gbmluamEgLS12ZXJzaW9uCisKKy5jbWFrZV9idWlsZF9saW51eDoKKyAgICBzdGFnZTogYnVpbGQKKworICAgIHNjcmlwdDoKKyAgICAgICAgLSAqYmVmb3JlX3NjcmlwdF9saW51eAorICAgICAgICAtIC5naXRsYWIvY2kvc2NjYWNoZS5zaAorICAgICAgICAtIHNjY2FjaGUgLS1zdGFydC1zZXJ2ZXIKKyAgICAgICAgLSBzY2NhY2hlIC0tc2hvdy1zdGF0cworICAgICAgICAtICIkTEFVTkNIRVIgY3Rlc3QgLVZWIC1TIC5naXRsYWIvY2kvY3Rlc3RfY29uZmlndXJlLmNtYWtlIgorICAgICAgICAtICIkTEFVTkNIRVIgY3Rlc3QgLVZWIC1TIC5naXRsYWIvY2kvY3Rlc3RfYnVpbGQuY21ha2UiCisgICAgICAgIC0gc2NjYWNoZSAtLXNob3ctc3RhdHMKKworICAgIGludGVycnVwdGlibGU6IHRydWUKKworLmNtYWtlX3Rlc3RfbGludXg6CisgICAgc3RhZ2U6IHRlc3QKKworICAgIHNjcmlwdDoKKyAgICAgICAgLSAqYmVmb3JlX3NjcmlwdF9saW51eAorICAgICAgICAtICIkTEFVTkNIRVIgY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtViAtUyAuZ2l0bGFiL2NpL2N0ZXN0X3Rlc3QuY21ha2UiCisKKyAgICBpbnRlcnJ1cHRpYmxlOiB0cnVlCisKKy5jbWFrZV9idWlsZF9yZWxlYXNlX2xpbnV4OgorICAgIHN0YWdlOiBidWlsZAorCisgICAgc2NyaXB0OgorICAgICAgICAjIEJvb3RzdHJhcC4KKyAgICAgICAgLSBta2RpciBidWlsZC8KKyAgICAgICAgLSBjcCAtdiBVdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvY2FjaGUudHh0IGJ1aWxkL0NNYWtlQ2FjaGUudHh0CisgICAgICAgICMgTWFrZSBzY2NhY2hlIGF2YWlsYWJsZS4KKyAgICAgICAgLSAuZ2l0bGFiL2NpL3NjY2FjaGUuc2gKKyAgICAgICAgLSBleHBvcnQgUEFUSD0kUFdELy5naXRsYWI6JFBBVEgKKyAgICAgICAgIyBBcHBlbmQgc2NjYWNoZSBzZXR0aW5ncyB0byB0aGUgY2FjaGUuCisgICAgICAgIC0gZWNobyAiQ01BS0VfQ19DT01QSUxFUl9MQVVOQ0hFUjpTVFJJTkc9c2NjYWNoZSIgPj4gYnVpbGQvQ01ha2VDYWNoZS50eHQKKyAgICAgICAgLSBlY2hvICJDTUFLRV9DWFhfQ09NUElMRVJfTEFVTkNIRVI6U1RSSU5HPXNjY2FjaGUiID4+IGJ1aWxkL0NNYWtlQ2FjaGUudHh0CisgICAgICAgICMgQ0kgc2V0dGluZ3MuCisgICAgICAgIC0gZWNobyAiQ01ha2VfVEVTVF9JTlNUQUxMOkJPT0w9T0ZGIiA+PiBidWlsZC9DTWFrZUNhY2hlLnR4dAorICAgICAgICAtIGVjaG8gIkNNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9JFBXRC9idWlsZC9pbnN0YWxsIiA+PiBidWlsZC9DTWFrZUNhY2hlLnR4dAorICAgICAgICAtIGVjaG8gIkNNQUtFX1NLSVBfSU5TVEFMTF9BTExfREVQRU5ERU5DWTpCT09MPU9OIiA+PiBidWlsZC9DTWFrZUNhY2hlLnR4dAorICAgICAgICAjIEJvb3RzdHJhcAorICAgICAgICAtIGNkIGJ1aWxkLworICAgICAgICAtICIkTEFVTkNIRVIgLi4vYm9vdHN0cmFwIC0tcGFyYWxsZWw9JChucHJvYykgLS1kb2NkaXI9ZG9jL2NtYWtlIgorICAgICAgICAjIEZJWE1FOiBXaGVuIENUZXN0IGNhbiBkcml2ZSBhbiBleHRlcm5hbCBDTWFrZSBmb3IgdGhlIGJ1aWxkIGFzIHdlbGwsCisgICAgICAgICMgdXNlIHRoZSBzY3JpcHRzIGhlcmUuCisgICAgICAgIC0gIiRMQVVOQ0hFUiBtYWtlIC1qJChucHJvYykiCisgICAgICAgICMgTk9URTogVGhpcyByZWdleCBtYXRjaGVzIHRoYXQgdXNlZCBpbiB0aGUgcmVsZWFzZSBidWlsZC4KKyAgICAgICAgLSAiJExBVU5DSEVSIGJpbi9jdGVzdCAtLW91dHB1dC1vbi1mYWlsdXJlIC1qJChucHJvYykgLVIgJ14oQ01ha2VcXC58Q01ha2VMaWJcXC58Q01ha2VTZXJ2ZXJMaWJcXC58UnVuQ01ha2VcXC5jdGVzdF9tZW1jaGVjayknIgorICAgICAgICAjIE1ha2UgYSBwYWNrYWdlLgorICAgICAgICAtIGJpbi9jcGFjayAtRyBUR1oKKyAgICAgICAgLSBiaW4vY3BhY2sgLUcgU1RHWgorICAgICAgICAtIHNjY2FjaGUgLS1zaG93LXN0YXRzCisKKyAgICBpbnRlcnJ1cHRpYmxlOiB0cnVlCisKKy5jbWFrZV90ZXN0X2xpbnV4X3BhY2thZ2U6CisgICAgc3RhZ2U6IHRlc3QtZXh0CisKKyAgICBzY3JpcHQ6CisgICAgICAgIC0gKmJlZm9yZV9zY3JpcHRfbGludXgKKyAgICAgICAgIyBNYWtlIHRoZSBDTWFrZSBwYWNrYWdlIGF2YWlsYWJsZS4KKyAgICAgICAgLSBta2RpciAtcCBidWlsZC9pbnN0YWxsCisgICAgICAgIC0gdGFyIC1DIGJ1aWxkL2luc3RhbGwgLS1zdHJpcC1jb21wb25lbnRzPTEgLXh6ZiBidWlsZC9jbWFrZS0qLUxpbnV4LXg4Nl82NC50YXIuZ3oKKyAgICAgICAgLSAuZ2l0bGFiL2NpL3NjY2FjaGUuc2gKKyAgICAgICAgLSBzY2NhY2hlIC0tc3RhcnQtc2VydmVyCisgICAgICAgIC0gc2NjYWNoZSAtLXNob3ctc3RhdHMKKyAgICAgICAgLSAiJExBVU5DSEVSIGJ1aWxkL2luc3RhbGwvYmluL2N0ZXN0IC0tb3V0cHV0LW9uLWZhaWx1cmUgLVYgLVMgLmdpdGxhYi9jaS9jdGVzdF90ZXN0X2V4dGVybmFsLmNtYWtlIgorICAgICAgICAtIHNjY2FjaGUgLS1zaG93LXN0YXRzCisKKyAgICBpbnRlcnJ1cHRpYmxlOiB0cnVlCisKKy5jbWFrZV90ZXN0X2xpbnV4X2V4dGVybmFsOgorICAgIHN0YWdlOiB0ZXN0LWV4dAorCisgICAgc2NyaXB0OgorICAgICAgICAtICpiZWZvcmVfc2NyaXB0X2xpbnV4CisgICAgICAgIC0gLmdpdGxhYi9jaS9zY2NhY2hlLnNoCisgICAgICAgIC0gc2NjYWNoZSAtLXN0YXJ0LXNlcnZlcgorICAgICAgICAtIHNjY2FjaGUgLS1zaG93LXN0YXRzCisgICAgICAgIC0gIiRMQVVOQ0hFUiBidWlsZC9pbnN0YWxsL2Jpbi9jdGVzdCAtLW91dHB1dC1vbi1mYWlsdXJlIC1WIC1TIC5naXRsYWIvY2kvY3Rlc3RfdGVzdF9leHRlcm5hbC5jbWFrZSIKKyAgICAgICAgLSBzY2NhY2hlIC0tc2hvdy1zdGF0cworCisgICAgaW50ZXJydXB0aWJsZTogdHJ1ZQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9vcy1tYWNvcy55bWwgYi8uZ2l0bGFiL29zLW1hY29zLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDEyM2VjCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGxhYi9vcy1tYWNvcy55bWwKQEAgLTAsMCArMSwxMTUgQEAKKyMgbWFjT1Mtc3BlY2lmaWMgYnVpbGRlciBjb25maWd1cmF0aW9ucyBhbmQgYnVpbGQgY29tbWFuZHMKKworIyMgQmFzZSBjb25maWd1cmF0aW9ucworCisubWFjb3M6CisgICAgdmFyaWFibGVzOgorICAgICAgICBHSVRfQ0xPTkVfUEFUSDogIiRDSV9CVUlMRFNfRElSL2NtYWtlIGNpIGV4dC8kQ0lfQ09OQ1VSUkVOVF9JRCIKKyAgICAgICAgIyBUT0RPOiBGYWN0b3IgdGhpcyBvdXQgc28gdGhhdCBlYWNoIGpvYiBzZWxlY3RzIHRoZSBYY29kZSB2ZXJzaW9uIHRvCisgICAgICAgICMgdXNlIHNvIHRoYXQgZGlmZmVyZW50IHZlcnNpb25zIGNhbiBiZSB0ZXN0ZWQgaW4gYSBzaW5nbGUgcGlwZWxpbmUuCisgICAgICAgIERFVkVMT1BFUl9ESVI6ICIvQXBwbGljYXRpb25zL1hjb2RlLTExLjUuYXBwL0NvbnRlbnRzL0RldmVsb3BlciIKKworIyMjIEJ1aWxkIGFuZCB0ZXN0CisKKy5tYWNvc19idWlsZDoKKyAgICBleHRlbmRzOiAubWFjb3MKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgIyBOb3RlIHRoYXQgc2hlbGwgcnVubmVycyBvbmx5IHN1cHBvcnQgcnVubmVycyB3aXRoIGEgc2luZ2xlCisgICAgICAgICMgY29uY3VycmVuY3kgbGV2ZWwuIFdlIGNhbid0IHVzZSBgJENJX0NPTkNVUlJFTkNZX0lEYCBiZWNhdXNlIHRoaXMgbWF5CisgICAgICAgICMgY2hhbmdlIGJldHdlZW4gdGhlIGJ1aWxkIGFuZCB0ZXN0IHN0YWdlcyB3aGljaCBDTWFrZSBkb2Vzbid0IHN1cHBvcnQuCisgICAgICAgICMgRXZlbiBpZiB3ZSBjb3VsZCwgaXQgY291bGQgY2hhbmdlIGlmIG90aGVyIHJ1bm5lcnMgb24gdGhlIG1hY2hpbmUKKyAgICAgICAgIyBjb3VsZCBydW4gYXQgdGhlIHNhbWUgdGltZSwgc28gd2UgZHJvcCBpdC4KKyAgICAgICAgR0lUX0NMT05FX1BBVEg6ICIkQ0lfQlVJTERTX0RJUi9jbWFrZSBjaSIKKworLm1hY29zX25pbmphOgorICAgIGV4dGVuZHM6IC5tYWNvc19idWlsZAorCisgICAgdmFyaWFibGVzOgorICAgICAgICBDTUFLRV9DT05GSUdVUkFUSU9OOiBtYWNvc19uaW5qYQorICAgICAgICBDVEVTVF9OT19XQVJOSU5HU19BTExPV0VEOiAxCisKKy5tYWNvc19tYWtlZmlsZXM6CisgICAgZXh0ZW5kczogLm1hY29zX2J1aWxkCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IG1hY29zX21ha2VmaWxlcworICAgICAgICBDVEVTVF9OT19XQVJOSU5HU19BTExPV0VEOiAxCisgICAgICAgIENNQUtFX0dFTkVSQVRPUjogIlVuaXggTWFrZWZpbGVzIgorCisjIyMgRXh0ZXJuYWwgdGVzdGluZworCisubWFjb3NfeGNvZGU6CisgICAgZXh0ZW5kczogLm1hY29zCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IG1hY29zX3hjb2RlCisgICAgICAgIENNQUtFX0dFTkVSQVRPUjogWGNvZGUKKworIyMgVGFncworCisubWFjb3NfYnVpbGRlcl90YWdzOgorICAgIHRhZ3M6CisgICAgICAgIC0gY21ha2UgIyBTaW5jZSB0aGlzIGlzIGEgYmFyZSBydW5uZXIsIHBpbiB0byBhIHByb2plY3QuCisgICAgICAgIC0gbWFjb3MKKyAgICAgICAgLSBzaGVsbAorICAgICAgICAtIHhjb2RlLTExLjUKKyAgICAgICAgLSBub25jb25jdXJyZW50CisKKy5tYWNvc19idWlsZGVyX2V4dF90YWdzOgorICAgIHRhZ3M6CisgICAgICAgIC0gY21ha2UgIyBTaW5jZSB0aGlzIGlzIGEgYmFyZSBydW5uZXIsIHBpbiB0byBhIHByb2plY3QuCisgICAgICAgIC0gbWFjb3MKKyAgICAgICAgLSBzaGVsbAorICAgICAgICAtIHhjb2RlLTExLjUKKyAgICAgICAgLSBjb25jdXJyZW50CisKKyMjIG1hY09TLXNwZWNpZmljIHNjcmlwdHMKKworLmJlZm9yZV9zY3JpcHRfbWFjb3M6ICZiZWZvcmVfc2NyaXB0X21hY29zCisgICAgLSAuZ2l0bGFiL2NpL2NtYWtlLnNoCisgICAgLSAuZ2l0bGFiL2NpL25pbmphLnNoCisgICAgLSBleHBvcnQgUEFUSD0kUFdELy5naXRsYWI6JFBXRC8uZ2l0bGFiL2NtYWtlL2JpbjokUEFUSAorICAgIC0gY21ha2UgLS12ZXJzaW9uCisgICAgLSBuaW5qYSAtLXZlcnNpb24KKyAgICAjIERvd25sb2FkIFF0CisgICAgLSBjbWFrZSAtUCAuZ2l0bGFiL2NpL2Rvd25sb2FkX3F0LmNtYWtlCisgICAgLSBleHBvcnQgQ01BS0VfUFJFRklYX1BBVEg9JFBXRC8uZ2l0bGFiL3F0CisKKy5jbWFrZV9idWlsZF9tYWNvczoKKyAgICBzdGFnZTogYnVpbGQKKworICAgIHNjcmlwdDoKKyAgICAgICAgLSAqYmVmb3JlX3NjcmlwdF9tYWNvcworICAgICAgICAtIC5naXRsYWIvY2kvc2NjYWNoZS5zaAorICAgICAgICAjIEFsbG93IHRoZSBzZXJ2ZXIgdG8gYWxyZWFkeSBiZSBydW5uaW5nLgorICAgICAgICAtICJzY2NhY2hlIC0tc3RhcnQtc2VydmVyIHx8IDoiCisgICAgICAgIC0gc2NjYWNoZSAtLXNob3ctc3RhdHMKKyAgICAgICAgLSBjdGVzdCAtVlYgLVMgLmdpdGxhYi9jaS9jdGVzdF9jb25maWd1cmUuY21ha2UKKyAgICAgICAgLSBjdGVzdCAtVlYgLVMgLmdpdGxhYi9jaS9jdGVzdF9idWlsZC5jbWFrZQorICAgICAgICAtIHNjY2FjaGUgLS1zaG93LXN0YXRzCisKKyAgICBpbnRlcnJ1cHRpYmxlOiB0cnVlCisKKy5jbWFrZV90ZXN0X21hY29zOgorICAgIHN0YWdlOiB0ZXN0CisKKyAgICBzY3JpcHQ6CisgICAgICAgIC0gKmJlZm9yZV9zY3JpcHRfbWFjb3MKKyAgICAgICAgLSBjdGVzdCAtLW91dHB1dC1vbi1mYWlsdXJlIC1WIC1TIC5naXRsYWIvY2kvY3Rlc3RfdGVzdC5jbWFrZQorCisgICAgaW50ZXJydXB0aWJsZTogdHJ1ZQorCisuY21ha2VfdGVzdF9tYWNvc19leHRlcm5hbDoKKyAgICBzdGFnZTogdGVzdC1leHQKKworICAgIHNjcmlwdDoKKyAgICAgICAgLSAqYmVmb3JlX3NjcmlwdF9tYWNvcworICAgICAgICAtIC5naXRsYWIvY2kvc2NjYWNoZS5zaAorICAgICAgICAjIEFsbG93IHRoZSBzZXJ2ZXIgdG8gYWxyZWFkeSBiZSBydW5uaW5nLgorICAgICAgICAtICJzY2NhY2hlIC0tc3RhcnQtc2VydmVyIHx8IDoiCisgICAgICAgIC0gc2NjYWNoZSAtLXNob3ctc3RhdHMKKyAgICAgICAgLSAiJExBVU5DSEVSIGJ1aWxkL2luc3RhbGwvQ01ha2UuYXBwL0NvbnRlbnRzL2Jpbi9jdGVzdCAtLW91dHB1dC1vbi1mYWlsdXJlIC1WIC1TIC5naXRsYWIvY2kvY3Rlc3RfdGVzdF9leHRlcm5hbC5jbWFrZSIKKyAgICAgICAgLSBzY2NhY2hlIC0tc2hvdy1zdGF0cworCisgICAgaW50ZXJydXB0aWJsZTogdHJ1ZQpkaWZmIC0tZ2l0IGEvLmdpdGxhYi9vcy13aW5kb3dzLnltbCBiLy5naXRsYWIvb3Mtd2luZG93cy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwYTIzMgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvb3Mtd2luZG93cy55bWwKQEAgLTAsMCArMSwxMTYgQEAKKyMgV2luZG93cy1zcGVjaWZpYyBidWlsZGVyIGNvbmZpZ3VyYXRpb25zIGFuZCBidWlsZCBjb21tYW5kcworCisjIyBCYXNlIGNvbmZpZ3VyYXRpb25zCisKKy53aW5kb3dzOgorICAgIHZhcmlhYmxlczoKKyAgICAgICAgR0lUX0NMT05FX1BBVEg6ICIkQ0lfQlVJTERTX0RJUlxcY21ha2UgY2kgZXh0XFwkQ0lfQ09OQ1VSUkVOVF9JRCIKKworIyMjIEJ1aWxkIGFuZCB0ZXN0CisKKy53aW5kb3dzX2J1aWxkOgorICAgIGV4dGVuZHM6IC53aW5kb3dzCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgICMgTm90ZSB0aGF0IHNoZWxsIHJ1bm5lcnMgb25seSBzdXBwb3J0IHJ1bm5lcnMgd2l0aCBhIHNpbmdsZQorICAgICAgICAjIGNvbmN1cnJlbmN5IGxldmVsLiBXZSBjYW4ndCB1c2UgYCRDSV9DT05DVVJSRU5DWV9JRGAgYmVjYXVzZSB0aGlzIG1heQorICAgICAgICAjIGNoYW5nZSBiZXR3ZWVuIHRoZSBidWlsZCBhbmQgdGVzdCBzdGFnZXMgd2hpY2ggQ01ha2UgZG9lc24ndCBzdXBwb3J0LgorICAgICAgICAjIEV2ZW4gaWYgd2UgY291bGQsIGl0IGNvdWxkIGNoYW5nZSBpZiBvdGhlciBydW5uZXJzIG9uIHRoZSBtYWNoaW5lCisgICAgICAgICMgY291bGQgcnVuIGF0IHRoZSBzYW1lIHRpbWUsIHNvIHdlIGRyb3AgaXQuCisgICAgICAgIEdJVF9DTE9ORV9QQVRIOiAiJENJX0JVSUxEU19ESVJcXGNtYWtlIGNpIgorCisud2luZG93c19uaW5qYToKKyAgICBleHRlbmRzOiAud2luZG93c19idWlsZAorCisgICAgdmFyaWFibGVzOgorICAgICAgICAjIERlYnVnIGFuZCBSZWxXaXRoRGViaW5mbyBidWlsZCB0eXBlcyB1c2UgdGhlIGAvWmlgIHdoaWNoIHJlc3VsdHMgaW4KKyAgICAgICAgIyB1bmNhY2hlYWJsZSBjb21waWF0aW9ucy4KKyAgICAgICAgIyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zY2NhY2hlL2lzc3Vlcy8yNDIKKyAgICAgICAgQ01BS0VfQlVJTERfVFlQRTogUmVsZWFzZQorICAgICAgICBDVEVTVF9OT19XQVJOSU5HU19BTExPV0VEOiAxCisKKy53aW5kb3dzX3ZzMjAxOV94NjRfbmluamE6CisgICAgZXh0ZW5kczogLndpbmRvd3NfbmluamEKKworICAgIHZhcmlhYmxlczoKKyAgICAgICAgQ01BS0VfQ09ORklHVVJBVElPTjogd2luZG93c192czIwMTlfeDY0X25pbmphCisgICAgICAgIFZDVkFSU0FMTDogIiR7VlMxNjBDT01OVE9PTFN9XFwuLlxcLi5cXFZDXFxBdXhpbGlhcnlcXEJ1aWxkXFx2Y3ZhcnNhbGwuYmF0IgorICAgICAgICBWQ1ZBUlNQTEFURk9STTogIng2NCIKKyAgICAgICAgVkNWQVJTVkVSU0lPTjogIjE0LjI2IgorCisjIyMgRXh0ZXJuYWwgdGVzdGluZworCisud2luZG93c192czIwMTlfeDY0OgorICAgIGV4dGVuZHM6IC53aW5kb3dzCisKKyAgICB2YXJpYWJsZXM6CisgICAgICAgIENNQUtFX0NPTkZJR1VSQVRJT046IHdpbmRvd3NfdnMyMDE5X3g2NAorICAgICAgICBDTUFLRV9HRU5FUkFUT1I6ICJWaXN1YWwgU3R1ZGlvIDE2IDIwMTkiCisgICAgICAgIENNQUtFX0dFTkVSQVRPUl9QTEFURk9STTogIng2NCIKKyAgICAgICAgQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQ6ICJ2MTQyLHZlcnNpb249MTQuMjYiCisKKyMjIFRhZ3MKKworLndpbmRvd3NfYnVpbGRlcl90YWdzOgorICAgIHRhZ3M6CisgICAgICAgIC0gY21ha2UgIyBTaW5jZSB0aGlzIGlzIGEgYmFyZSBydW5uZXIsIHBpbiB0byBhIHByb2plY3QuCisgICAgICAgIC0gd2luZG93cworICAgICAgICAtIHNoZWxsCisgICAgICAgIC0gdnMyMDE5CisgICAgICAgIC0gbXN2Yy0xOS4yNQorICAgICAgICAtIG5vbmNvbmN1cnJlbnQKKworLndpbmRvd3NfYnVpbGRlcl9leHRfdGFnczoKKyAgICB0YWdzOgorICAgICAgICAtIGNtYWtlICMgU2luY2UgdGhpcyBpcyBhIGJhcmUgcnVubmVyLCBwaW4gdG8gYSBwcm9qZWN0LgorICAgICAgICAtIHdpbmRvd3MKKyAgICAgICAgLSBzaGVsbAorICAgICAgICAtIHZzMjAxOQorICAgICAgICAtIG1zdmMtMTkuMjUKKyAgICAgICAgLSBjb25jdXJyZW50CisKKyMjIFdpbmRvd3Mtc3BlY2lmaWMgc2NyaXB0cworCisuYmVmb3JlX3NjcmlwdF93aW5kb3dzOiAmYmVmb3JlX3NjcmlwdF93aW5kb3dzCisgICAgLSBJbnZva2UtRXhwcmVzc2lvbiAtQ29tbWFuZCAuZ2l0bGFiL2NpL2NtYWtlLnBzMQorICAgIC0gSW52b2tlLUV4cHJlc3Npb24gLUNvbW1hbmQgLmdpdGxhYi9jaS9uaW5qYS5wczEKKyAgICAtICRwd2RwYXRoID0gJHB3ZC5QYXRoCisgICAgLSBTZXQtSXRlbSAtRm9yY2UgLVBhdGggImVudjpQQVRIIiAtVmFsdWUgIiRwd2RwYXRoXC5naXRsYWI7JHB3ZHBhdGhcLmdpdGxhYlxjbWFrZVxiaW47JGVudjpQQVRIIgorICAgIC0gY21ha2UgLS12ZXJzaW9uCisgICAgLSBuaW5qYSAtLXZlcnNpb24KKyAgICAtIGNtYWtlIC1QIC5naXRsYWIvY2kvZG93bmxvYWRfcXQuY21ha2UKKyAgICAtIFNldC1JdGVtIC1Gb3JjZSAtUGF0aCAiZW52OlBBVEgiIC1WYWx1ZSAiJHB3ZHBhdGhcLmdpdGxhYlxxdFxiaW47JGVudjpQQVRIIgorCisuY21ha2VfYnVpbGRfd2luZG93czoKKyAgICBzdGFnZTogYnVpbGQKKworICAgIHNjcmlwdDoKKyAgICAgICAgLSAqYmVmb3JlX3NjcmlwdF93aW5kb3dzCisgICAgICAgIC0gU2V0LUl0ZW0gLUZvcmNlIC1QYXRoICJlbnY6UEFUSCIgLVZhbHVlICIkZW52OlBBVEg7JGVudjpTQ0NBQ0hFX1BBVEgiCisgICAgICAgIC0gSW52b2tlLUV4cHJlc3Npb24gLUNvbW1hbmQgLmdpdGxhYi9jaS92Y3ZhcnNhbGwucHMxCisgICAgICAgIC0gc2NjYWNoZSAtLXN0YXJ0LXNlcnZlcgorICAgICAgICAtIHNjY2FjaGUgLS1zaG93LXN0YXRzCisgICAgICAgIC0gY3Rlc3QgLVZWIC1TIC5naXRsYWIvY2kvY3Rlc3RfY29uZmlndXJlLmNtYWtlCisgICAgICAgIC0gY3Rlc3QgLVZWIC1TIC5naXRsYWIvY2kvY3Rlc3RfYnVpbGQuY21ha2UKKyAgICAgICAgLSBzY2NhY2hlIC0tc2hvdy1zdGF0cworICAgICAgICAtIHNjY2FjaGUgLS1zdG9wLXNlcnZlcgorCisgICAgaW50ZXJydXB0aWJsZTogdHJ1ZQorCisuY21ha2VfdGVzdF93aW5kb3dzOgorICAgIHN0YWdlOiB0ZXN0CisKKyAgICBzY3JpcHQ6CisgICAgICAgIC0gKmJlZm9yZV9zY3JpcHRfd2luZG93cworICAgICAgICAtIEludm9rZS1FeHByZXNzaW9uIC1Db21tYW5kIC5naXRsYWIvY2kvdmN2YXJzYWxsLnBzMQorICAgICAgICAtIGN0ZXN0IC0tb3V0cHV0LW9uLWZhaWx1cmUgLVYgLVMgLmdpdGxhYi9jaS9jdGVzdF90ZXN0LmNtYWtlCisKKyAgICBpbnRlcnJ1cHRpYmxlOiB0cnVlCisKKy5jbWFrZV90ZXN0X3dpbmRvd3NfZXh0ZXJuYWw6CisgICAgc3RhZ2U6IHRlc3QtZXh0CisKKyAgICBzY3JpcHQ6CisgICAgICAgIC0gYnVpbGQvaW5zdGFsbC9iaW4vY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtViAtUyAuZ2l0bGFiL2NpL2N0ZXN0X3Rlc3RfZXh0ZXJuYWwuY21ha2UKKworICAgIGludGVycnVwdGlibGU6IHRydWUKZGlmZiAtLWdpdCBhLy5naXRsYWIvcnVsZXMueW1sIGIvLmdpdGxhYi9ydWxlcy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3NTZlYgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRsYWIvcnVsZXMueW1sCkBAIC0wLDAgKzEsMTggQEAKKyMgUnVsZXMgZm9yIHdoZXJlIGpvYnMgY2FuIHJ1bgorCisucnVuX21hbnVhbGx5OgorICAgIHJ1bGVzOgorICAgICAgICAtIGlmOiAnJENJX1BST0pFQ1RfUEFUSCA9PSAiY21ha2UvY21ha2UiJworICAgICAgICAgIHdoZW46IGRlbGF5ZWQKKyAgICAgICAgICBzdGFydF9pbjogNSBtaW51dGVzCisgICAgICAgIC0gaWY6ICckQ0lfTUVSR0VfUkVRVUVTVF9JRCcKKyAgICAgICAgICB3aGVuOiBtYW51YWwKKyAgICAgICAgLSB3aGVuOiBuZXZlcgorCisucnVuX2F1dG9tYXRpY2FsbHk6CisgICAgcnVsZXM6CisgICAgICAgIC0gaWY6ICckQ0lfUFJPSkVDVF9QQVRIID09ICJjbWFrZS9jbWFrZSInCisgICAgICAgICAgd2hlbjogb25fc3VjY2VzcworICAgICAgICAtIGlmOiAnJENJX01FUkdFX1JFUVVFU1RfSUQnCisgICAgICAgICAgd2hlbjogb25fc3VjY2VzcworICAgICAgICAtIHdoZW46IG5ldmVyCmRpZmYgLS1naXQgYS9BdXhpbGlhcnkvQ01ha2VMaXN0cy50eHQgYi9BdXhpbGlhcnkvQ01ha2VMaXN0cy50eHQKaW5kZXggNTNjZjJjNS4uYzBhZWJlZiAxMDA2NDQKLS0tIGEvQXV4aWxpYXJ5L0NNYWtlTGlzdHMudHh0CisrKyBiL0F1eGlsaWFyeS9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDE2IEBACi1pbnN0YWxsKERJUkVDVE9SWSB2aW0vaW5kZW50IHZpbS9zeW50YXggREVTVElOQVRJT04gJHtDTUFLRV9EQVRBX0RJUn0vZWRpdG9ycy92aW0pCi1pbnN0YWxsKEZJTEVTIGNtYWtlLW1vZGUuZWwgREVTVElOQVRJT04gJHtDTUFLRV9EQVRBX0RJUn0vZWRpdG9ycy9lbWFjcykKKyMgSW5zdGFsbCBWaW0gZmlsZXMgdG8gYSB0eXBpY2FsIHN5c3RlbSBpbnRlZ3JhdGlvbiBkaXJlY3RvcnkuCisjIFBhY2thZ2VycyBjYW4gc2V0IENNYWtlX0lOU1RBTExfVklNRklMRVNfRElSIHRvIGNvbnRyb2wgdGhpcy4KK2lmKE5PVCBDTWFrZV9JTlNUQUxMX1ZJTUZJTEVTX0RJUikKKyAgc2V0KENNYWtlX0lOU1RBTExfVklNRklMRVNfRElSICR7Q01BS0VfWERHREFUQV9ESVJ9L3ZpbS92aW1maWxlcykKK2VuZGlmKCkKK2luc3RhbGwoRElSRUNUT1JZIHZpbS9pbmRlbnQgdmltL3N5bnRheCBERVNUSU5BVElPTiAke0NNYWtlX0lOU1RBTExfVklNRklMRVNfRElSfSkKKworIyBJbnN0YWxsIEVtYWNzIGZpbGVzIHRvIGEgdHlwaWNhbCBzeXN0ZW0gaW50ZWdyYXRpb24gZGlyZWN0b3J5LgorIyBQYWNrYWdlcnMgY2FuIHNldCBDTWFrZV9JTlNUQUxMX0VNQUNTX0RJUiB0byBjb250cm9sIHRoaXMuCitpZihOT1QgQ01ha2VfSU5TVEFMTF9FTUFDU19ESVIpCisgIHNldChDTWFrZV9JTlNUQUxMX0VNQUNTX0RJUiAke0NNQUtFX1hER0RBVEFfRElSfS9lbWFjcy9zaXRlLWxpc3ApCitlbmRpZigpCitpbnN0YWxsKEZJTEVTIGNtYWtlLW1vZGUuZWwgREVTVElOQVRJT04gJHtDTWFrZV9JTlNUQUxMX0VNQUNTX0RJUn0pCisKIGluc3RhbGwoRklMRVMgY21ha2UubTQgREVTVElOQVRJT04gJHtDTUFLRV9YREdEQVRBX0RJUn0vYWNsb2NhbCkKIGFkZF9zdWJkaXJlY3RvcnkgKGJhc2gtY29tcGxldGlvbikKZGlmZiAtLWdpdCBhL0F1eGlsaWFyeS9iYXNoLWNvbXBsZXRpb24vQ01ha2VMaXN0cy50eHQgYi9BdXhpbGlhcnkvYmFzaC1jb21wbGV0aW9uL0NNYWtlTGlzdHMudHh0CmluZGV4IGMwYTg4OTkuLjkzYjZmZmQgMTAwNjQ0Ci0tLSBhL0F1eGlsaWFyeS9iYXNoLWNvbXBsZXRpb24vQ01ha2VMaXN0cy50eHQKKysrIGIvQXV4aWxpYXJ5L2Jhc2gtY29tcGxldGlvbi9DTWFrZUxpc3RzLnR4dApAQCAtMSw4ICsxLDIxIEBACi0jIEFsd2F5cyBpbnN0YWxsIGNvbXBsZXRpb24gZmlsZSBpbiBsb2NhbCBkaXIKLSMgaW4gb3JkZXIgdG8gYmUgc3VyZSB0byBhbHdheXMgYmUgYWJsZSB0byBpbnN0YWxsCi0jIGluIGEgbG9jYWwgdXNlciBkaXJlY3Rvcnkgcm9vdGVkIGluIGEgc2luZ2xlIGRpcmVjdG9yeS4KLSMgcGFja2FnZXIgc2hvdWxkIGVpdGhlciBwYXRjaCB0aGF0IG91dCBvcgotIyBhZGQgc3ltbGlua3MgdG8gdGhlIGZpbGVzIGluIGFwcHJvcHJpYXRlIHBsYWNlcwotIyAgL2V0Yy9iYXNoX2NvbXBsZXRpb24uZC8KLSMgIERBVEFESVIvY29tcGxldGlvbnMgKG1heSBiZSAvdXNyL3NoYXJlLzxwYWNrYWdlPi9jb21wbGV0aW9ucwotaW5zdGFsbChGSUxFUyBjbWFrZSBjcGFjayBjdGVzdCBERVNUSU5BVElPTiAke0NNQUtFX0RBVEFfRElSfS9jb21wbGV0aW9ucykKKyMgV2UgbmVlZCB0byBpbnRlZ3JhdGUgaW50byB0aGUgc3lzdGVtIGluc3RhbGwsIG9yIHRoaXMgd2lsbCBzaWxlbnRseSBmYWlsIHRvCisjIGFjY29tcGxpc2ggYW55dGhpbmcgYXQgYWxsLCBhbmQgcGFja2FnZXJzIHdvbid0IGV2ZW4ga25vdyBpdCBleGlzdHMuIFVzZSB0aGUKKyMgYDxzaGFyZWRpcj4vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL2AgaGllcmFyY2h5IGJ5IGRlZmF1bHQsIHJvb3RlZCBpbgorIyBDTWFrZSdzIFhER0RBVEFfRElSIGRlZmluaXRpb24gb2YgdGhlIHNoYXJlZGlyLiBUaGlzIHdvcmtzIHdpdGggaW5zdGFsbGF0aW9uCisjIHRvIGAvdXNyYCBvciBgL3Vzci9sb2NhbGAgKG9yIGFueSBwcmVmaXggd2hpY2ggYmFzaC1jb21wbGV0aW9uIGlzIGNvbmZpZ3VyZWQKKyMgd2l0aCkgYXMgd2VsbCBhcyBhIHNpbXBsZSBpbnN0YWxsYXRpb24gYnkgYSBsb2NhbCB1c2VyIGludG8gdGhlaXIgaG9tZQorIyBkaXJlY3RvcnkgKmlmKiB0aGUgcHJlZml4IGlzIGAkSE9NRS8ubG9jYWxgIHNpbmNlIGAubG9jYWwvc2hhcmUvYCBpcyBwYXJ0IG9mCisjIHRoZSBiYXNoLWNvbXBsZXRpb24gc2VhcmNoIHBhdGggdG9vLgorIyBGb3IgbW9yZSBjb21wbGV4IGluc3RhbGxhdGlvbnMsIHBhY2thZ2VycyBjYW4gc2V0IENNYWtlX0lOU1RBTExfQkFTSF9DT01QX0RJUgorIyB0byBhbm90aGVyIHN5c3RlbSBsb2NhdGlvbi4KKworaWYoTk9UIENNYWtlX0lOU1RBTExfQkFTSF9DT01QX0RJUikKKyAgaWYoQ01BS0VfQkFTSF9DT01QX0RJUikKKyAgICAjIEhvbm9yIHByZXZpb3VzIGN1c3RvbWl6YXRpb24gb3B0aW9uLgorICAgIHNldChDTWFrZV9JTlNUQUxMX0JBU0hfQ09NUF9ESVIgIiR7Q01BS0VfQkFTSF9DT01QX0RJUn0iKQorICBlbHNlKCkKKyAgICAjIERlZmF1bHQuCisgICAgc2V0KENNYWtlX0lOU1RBTExfQkFTSF9DT01QX0RJUiAke0NNQUtFX1hER0RBVEFfRElSfS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMpCisgIGVuZGlmKCkKK2VuZGlmKCkKK2luc3RhbGwoRklMRVMgY21ha2UgY3BhY2sgY3Rlc3QgREVTVElOQVRJT04gJHtDTWFrZV9JTlNUQUxMX0JBU0hfQ09NUF9ESVJ9KQpkaWZmIC0tZ2l0IGEvQXV4aWxpYXJ5L3ZpbS9zeW50YXgvY21ha2UudmltIGIvQXV4aWxpYXJ5L3ZpbS9zeW50YXgvY21ha2UudmltCmluZGV4IDVkZTExN2IuLjJkNjNlYjAgMTAwNjQ0Ci0tLSBhL0F1eGlsaWFyeS92aW0vc3ludGF4L2NtYWtlLnZpbQorKysgYi9BdXhpbGlhcnkvdmltL3N5bnRheC9jbWFrZS52aW0KQEAgLTEwMSw2ICsxMDEsNyBAQAogICAgICAgICAgICAgXCBDTEVBTl9OT19DVVNUT00KICAgICAgICAgICAgIFwgQ01BS0VfQ09ORklHVVJFX0RFUEVORFMKICAgICAgICAgICAgIFwgQ01BS0VfQ1hYX0tOT1dOX0ZFQVRVUkVTCisgICAgICAgICAgICBcIENNQUtFX0NVREFfS05PV05fRkVBVFVSRVMKICAgICAgICAgICAgIFwgQ01BS0VfQ19LTk9XTl9GRUFUVVJFUwogICAgICAgICAgICAgXCBDTUFLRV9ST0xFCiAgICAgICAgICAgICBcIENPTU1PTl9MQU5HVUFHRV9SVU5USU1FCkBAIC0xNjksNiArMTcwLDcgQEAKICAgICAgICAgICAgIFwgRlJBTUVXT1JLX1ZFUlNJT04KICAgICAgICAgICAgIFwgRm9ydHJhbl9GT1JNQVQKICAgICAgICAgICAgIFwgRm9ydHJhbl9NT0RVTEVfRElSRUNUT1JZCisgICAgICAgICAgICBcIEZvcnRyYW5fUFJFUFJPQ0VTUwogICAgICAgICAgICAgXCBHRU5FUkFURUQKICAgICAgICAgICAgIFwgR0VORVJBVE9SX0ZJTEVfTkFNRQogICAgICAgICAgICAgXCBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHCkBAIC0yMjAsNiArMjIyLDcgQEAKICAgICAgICAgICAgIFwgSk9CX1BPT0xTCiAgICAgICAgICAgICBcIEpPQl9QT09MX0NPTVBJTEUKICAgICAgICAgICAgIFwgSk9CX1BPT0xfTElOSworICAgICAgICAgICAgXCBKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUgogICAgICAgICAgICAgXCBLRUVQX0VYVEVOU0lPTgogICAgICAgICAgICAgXCBMQUJFTFMKICAgICAgICAgICAgIFwgTEFOR1VBR0UKQEAgLTcyNSw2ICs3MjgsNyBAQAogICAgICAgICAgICAgXCBDTUFLRV9DVURBX0NPTVBJTEVSX0FSCiAgICAgICAgICAgICBcIENNQUtFX0NVREFfQ09NUElMRVJfQVJDSElURUNUVVJFX0lECiAgICAgICAgICAgICBcIENNQUtFX0NVREFfQ09NUElMRVJfRVhURVJOQUxfVE9PTENIQUlOCisgICAgICAgICAgICBcIENNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUwogICAgICAgICAgICAgXCBDTUFLRV9DVURBX0NPTVBJTEVSX0lECiAgICAgICAgICAgICBcIENNQUtFX0NVREFfQ09NUElMRVJfTEFVTkNIRVIKICAgICAgICAgICAgIFwgQ01BS0VfQ1VEQV9DT01QSUxFUl9MT0FERUQKQEAgLTEwMTYsNiArMTAyMCw3IEBACiAgICAgICAgICAgICBcIENNQUtFX0ZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWQogICAgICAgICAgICAgXCBDTUFLRV9Gb3J0cmFuX09VVFBVVF9FWFRFTlNJT04KICAgICAgICAgICAgIFwgQ01BS0VfRm9ydHJhbl9QTEFURk9STV9JRAorICAgICAgICAgICAgXCBDTUFLRV9Gb3J0cmFuX1BSRVBST0NFU1MKICAgICAgICAgICAgIFwgQ01BS0VfRm9ydHJhbl9TSU1VTEFURV9JRAogICAgICAgICAgICAgXCBDTUFLRV9Gb3J0cmFuX1NJTVVMQVRFX1ZFUlNJT04KICAgICAgICAgICAgIFwgQ01BS0VfRm9ydHJhbl9TSVpFT0ZfREFUQV9QVFIKQEAgLTEwNjQsNiArMTA2OSw3IEBACiAgICAgICAgICAgICBcIENNQUtFX0pPQl9QT09MUwogICAgICAgICAgICAgXCBDTUFLRV9KT0JfUE9PTF9DT01QSUxFCiAgICAgICAgICAgICBcIENNQUtFX0pPQl9QT09MX0xJTksKKyAgICAgICAgICAgIFwgQ01BS0VfSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIKICAgICAgICAgICAgIFwgQ01BS0VfSmF2YQogICAgICAgICAgICAgXCBDTUFLRV9KYXZhX0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkUKICAgICAgICAgICAgIFwgQ01BS0VfSmF2YV9BTkRST0lEX1RPT0xDSEFJTl9QUkVGSVgKQEAgLTI4NjIsNiArMjg2OCwxMSBAQAogICAgICAgICAgICAgXCBfTElOS0VSX1dSQVBQRVJfRkxBRwogICAgICAgICAgICAgXCBfTElOS0VSX1dSQVBQRVJfRkxBR19TRVAKIAorc3luIGtleXdvcmQgY21ha2VLV3RhcmdldF9wcmVjb21waWxlX2hlYWRlcnMgY29udGFpbmVkCisgICAgICAgICAgICBcIElOVEVSRkFDRQorICAgICAgICAgICAgXCBQUklWQVRFCisgICAgICAgICAgICBcIFBVQkxJQworCiBzeW4ga2V5d29yZCBjbWFrZUtXdGFyZ2V0X3NvdXJjZXMgY29udGFpbmVkCiAgICAgICAgICAgICBcIEFMSUFTCiAgICAgICAgICAgICBcIElNUE9SVEVECkBAIC0zMTY2LDYgKzMxNzcsNyBAQAogICAgICAgICAgICAgXCB0YXJnZXRfbGlua19kaXJlY3RvcmllcwogICAgICAgICAgICAgXCB0YXJnZXRfbGlua19saWJyYXJpZXMKICAgICAgICAgICAgIFwgdGFyZ2V0X2xpbmtfb3B0aW9ucworICAgICAgICAgICAgXCB0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzCiAgICAgICAgICAgICBcIHRhcmdldF9zb3VyY2VzCiAgICAgICAgICAgICBcIHRyeV9jb21waWxlCiAgICAgICAgICAgICBcIHRyeV9ydW4KQEAgLTMzMjIsNiArMzMzNCw3IEBACiBoaSBkZWYgbGluayBjbWFrZUtXdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgTW9kZU1zZwogaGkgZGVmIGxpbmsgY21ha2VLV3RhcmdldF9saW5rX2xpYnJhcmllcyBNb2RlTXNnCiBoaSBkZWYgbGluayBjbWFrZUtXdGFyZ2V0X2xpbmtfb3B0aW9ucyBNb2RlTXNnCitoaSBkZWYgbGluayBjbWFrZUtXdGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyBNb2RlTXNnCiBoaSBkZWYgbGluayBjbWFrZUtXdGFyZ2V0X3NvdXJjZXMgTW9kZU1zZwogaGkgZGVmIGxpbmsgY21ha2VLV3RyeV9jb21waWxlIE1vZGVNc2cKIGhpIGRlZiBsaW5rIGNtYWtlS1d0cnlfcnVuIE1vZGVNc2cKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKaW5kZXggNTc2MjA5OS4uMmQ4NjBkNCAxMDA2NDQKLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTM3LDcgKzM3LDcgQEAKICAgaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkhQLVVYIikKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCiAgICAgICAiQ01ha2Ugbm8gbG9uZ2VyIGNvbXBpbGVzIG9uIEhQLVVYLiAgU2VlXG4iCi0gICAgICAiICBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTcxMzdcbiIKKyAgICAgICIgIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzE3MTM3XG4iCiAgICAgICAiVXNlIENNYWtlIDMuOSBvciBsb3dlciBpbnN0ZWFkLiIKICAgICAgICkKICAgZW5kaWYoKQpAQCAtMTA4LDYgKzEwOCwxMSBAQAogICBlbmRpZigpCiBlbmRpZigpCiAKKyMgSW5mb3JtIFNUTCBsaWJyYXJ5IGhlYWRlciB3cmFwcGVycyB3aGV0aGVyIHRvIHVzZSBzeXN0ZW0gdmVyc2lvbnMuCitjb25maWd1cmVfZmlsZSgke0NNYWtlX1NPVVJDRV9ESVJ9L1V0aWxpdGllcy9zdGQvY21TVEwuaHh4LmluCisgICR7Q01ha2VfQklOQVJZX0RJUn0vVXRpbGl0aWVzL2NtU1RMLmh4eAorICBAT05MWSkKKwogIyBzZXQgdGhlIGludGVybmFsIGVuY29kaW5nIG9mIENNYWtlIHRvIFVURi04CiBzZXQoS1dTWVNfRU5DT0RJTkdfREVGQVVMVF9DT0RFUEFHRSBDUF9VVEY4KQogCkBAIC0xNTQsNyArMTU5LDcgQEAKIAogICAjIEFsbG93IHRoZSB1c2VyIHRvIGVuYWJsZS9kaXNhYmxlIGFsbCBzeXN0ZW0gdXRpbGl0eSBsaWJyYXJ5IG9wdGlvbnMgYnkKICAgIyBkZWZpbmluZyBDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUklFUyBvciBDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfJHt1dGlsfS4KLSAgc2V0KFVUSUxJVElFUyBCWklQMiBDVVJMIEVYUEFUIEZPUk0gSlNPTkNQUCBMSUJBUkNISVZFIExJQkxaTUEgTElCUkhBU0ggTElCVVYgWkxJQiBaU1REKQorICBzZXQoVVRJTElUSUVTIEJaSVAyIENVUkwgRVhQQVQgRk9STSBKU09OQ1BQIExJQkFSQ0hJVkUgTElCTFpNQSBMSUJSSEFTSCBMSUJVViBOR0hUVFAyIFpMSUIgWlNURCkKICAgZm9yZWFjaCh1dGlsICR7VVRJTElUSUVTfSkKICAgICBpZihOT1QgREVGSU5FRCBDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfJHt1dGlsfQogICAgICAgICBBTkQgREVGSU5FRCBDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUklFUykKQEAgLTE5Miw2ICsxOTcsOCBAQAogICAgICIke0NNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9aU1REfSIgIk5PVCBDTUFLRV9VU0VfU1lTVEVNX0xJQkFSQ0hJVkUiIE9OKQogICBDTUFLRV9ERVBFTkRFTlRfT1BUSU9OKENNQUtFX1VTRV9TWVNURU1fTElCTFpNQSAiVXNlIHN5c3RlbS1pbnN0YWxsZWQgbGlibHptYSIKICAgICAiJHtDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCTFpNQX0iICJOT1QgQ01BS0VfVVNFX1NZU1RFTV9MSUJBUkNISVZFIiBPTikKKyAgQ01BS0VfREVQRU5ERU5UX09QVElPTihDTUFLRV9VU0VfU1lTVEVNX05HSFRUUDIgIlVzZSBzeXN0ZW0taW5zdGFsbGVkIG5naHR0cDIiCisgICAgIiR7Q01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX05HSFRUUDJ9IiAiTk9UIENNQUtFX1VTRV9TWVNURU1fQ1VSTCIgT04pCiAgIG9wdGlvbihDTUFLRV9VU0VfU1lTVEVNX0ZPUk0gIlVzZSBzeXN0ZW0taW5zdGFsbGVkIGxpYmZvcm0iICIke0NNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9GT1JNfSIpCiAgIG9wdGlvbihDTUFLRV9VU0VfU1lTVEVNX0pTT05DUFAgIlVzZSBzeXN0ZW0taW5zdGFsbGVkIGpzb25jcHAiICIke0NNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9KU09OQ1BQfSIpCiAgIG9wdGlvbihDTUFLRV9VU0VfU1lTVEVNX0xJQlJIQVNIICJVc2Ugc3lzdGVtLWluc3RhbGxlZCBsaWJyaGFzaCIgIiR7Q01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQlJIQVNIfSIpCkBAIC0yNjQsNyArMjcxLDYgQEAKICAgICAgICR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdGluZy9IVE1ML1Rlc3RpbmdSZXN1bHRzL0ljb25zL0xvZ28uZ2lmIENPUFlPTkxZKQogICBlbmRpZigpCiAgIG1hcmtfYXNfYWR2YW5jZWQoREFSVF9ST09UKQotICBtYXJrX2FzX2FkdmFuY2VkKENVUkxfVEVTVElORykKIGVuZG1hY3JvKCkKIAogCkBAIC0zMzYsNiArMzQyLDkgQEAKIG1hY3JvIChDTUFLRV9CVUlMRF9VVElMSVRJRVMpCiAgIGZpbmRfcGFja2FnZShUaHJlYWRzKQogCisgICMgU3VwcHJlc3MgdW5uZWNlc3NhcnkgY2hlY2tzIGluIHRoaXJkLXBhcnR5IGNvZGUuCisgIGluY2x1ZGUoVXRpbGl0aWVzL2NtVGhpcmRQYXJ0eUNoZWNrcy5jbWFrZSkKKwogICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICMgQ3JlYXRlIHRoZSBrd3N5cyBsaWJyYXJ5IGZvciBDTWFrZS4KICAgc2V0KEtXU1lTX05BTUVTUEFDRSBjbXN5cykKQEAgLTM1Miw2ICszNjEsMjEgQEAKICAgaWYoQ01ha2VfTk9fQ1hYX1NUQU5EQVJEKQogICAgIHNldChLV1NZU19DWFhfU1RBTkRBUkQgIiIpCiAgIGVuZGlmKCkKKyAgaWYoV0lOMzIpCisgICAgIyBGSVhNRTogVGVhY2ggS1dTeXMgdG8gaGFyZC1jb2RlIHRoZXNlIGNoZWNrcyBvbiBXaW5kb3dzLgorICAgIHNldChLV1NZU19DX0hBU19DTE9DS19HRVRUSU1FX01PTk9UT05JQ19DT01QSUxFRCAwKQorICAgIHNldChLV1NZU19DX0hBU19QVFJESUZGX1RfQ09NUElMRUQgMSkKKyAgICBzZXQoS1dTWVNfQ1hYX0hBU19FTlZJUk9OX0lOX1NURExJQl9IX0NPTVBJTEVEIDEpCisgICAgc2V0KEtXU1lTX0NYWF9IQVNfUkxJTUlUNjRfQ09NUElMRUQgMCkKKyAgICBzZXQoS1dTWVNfQ1hYX0hBU19TRVRFTlZfQ09NUElMRUQgMCkKKyAgICBzZXQoS1dTWVNfQ1hYX0hBU19VTlNFVEVOVl9DT01QSUxFRCAwKQorICAgIHNldChLV1NZU19DWFhfSEFTX1VUSU1FTlNBVF9DT01QSUxFRCAwKQorICAgIHNldChLV1NZU19DWFhfSEFTX1VUSU1FU19DT01QSUxFRCAwKQorICAgIHNldChLV1NZU19DWFhfU1RBVF9IQVNfU1RfTVRJTV9DT01QSUxFRCAwKQorICAgIHNldChLV1NZU19DWFhfU1RBVF9IQVNfU1RfTVRJTUVTUEVDX0NPTVBJTEVEIDApCisgICAgc2V0KEtXU1lTX1NUTF9IQVNfV1NUUklOR19DT01QSUxFRCAxKQorICAgIHNldChLV1NZU19TWVNfSEFTX0lGQUREUlNfSCAwKQorICBlbmRpZigpCiAgIGFkZF9zdWJkaXJlY3RvcnkoU291cmNlL2t3c3lzKQogICBzZXQoa3dzeXNfZm9sZGVyICJVdGlsaXRpZXMvS1dTeXMiKQogICBDTUFLRV9TRVRfVEFSR0VUX0ZPTERFUigke0tXU1lTX05BTUVTUEFDRX0gIiR7a3dzeXNfZm9sZGVyfSIpCkBAIC0zNzUsMTAgKzM5OSwxMyBAQAogICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNICIke0NNYWtlX1NPVVJDRV9ESVJ9L1V0aWxpdGllcy9zdGQiKQogICBlbmRpZigpCiAKLSAgaW5jbHVkZV9kaXJlY3RvcmllcygKLSAgICAke0NNYWtlX0JJTkFSWV9ESVJ9L1V0aWxpdGllcwotICAgICR7Q01ha2VfU09VUkNFX0RJUn0vVXRpbGl0aWVzCi0gICAgKQorICBpbmNsdWRlX2RpcmVjdG9yaWVzKCIke0NNYWtlX0JJTkFSWV9ESVJ9L1V0aWxpdGllcyIpCisgIGlmICgoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkFJWCIgT1IgQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIk9TNDAwIikgQU5EIENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIikKKyAgICAjIHVzaW5nIC1pc3lzdGVtIG9wdGlvbiBnZW5lcmF0ZSBlcnJvciAidGVtcGxhdGUgd2l0aCBDIGxpbmthZ2UiCisgICAgaW5jbHVkZV9kaXJlY3RvcmllcygiJHtDTWFrZV9TT1VSQ0VfRElSfS9VdGlsaXRpZXMiKQorICBlbHNlKCkKKyAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAiJHtDTWFrZV9TT1VSQ0VfRElSfS9VdGlsaXRpZXMiKQorICBlbmRpZigpCiAKICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAjIEJ1aWxkIENNYWtlIHN0ZCBsaWJyYXJ5IGZvciBDTWFrZSBhbmQgQ1Rlc3QuCkBAIC00MzEsNiArNDU4LDEzIEBACiAgIGVsc2UoKQogICAgIHNldChDTUFLRV9aTElCX0lOQ0xVREVTICR7Q01ha2VfU09VUkNFX0RJUn0vVXRpbGl0aWVzKQogICAgIHNldChDTUFLRV9aTElCX0xJQlJBUklFUyBjbXpsaWIpCisgICAgc2V0KFdJVEhPVVRfWkxJQl9ETEwgIiIpCisgICAgc2V0KFdJVEhPVVRfWkxJQl9ETExfV0lUSF9MSUIgY216bGliKQorICAgIHNldChaTElCX0RMTCAiIikKKyAgICBzZXQoWkxJQl9ETExfV0lUSF9MSUIgY216bGliKQorICAgIHNldChaTElCX1dJTkFQSSAiIikKKyAgICBzZXQoWkxJQl9XSU5BUElfQ09NUElMRUQgMCkKKyAgICBzZXQoWkxJQl9XSU5BUElfV0lUSF9MSUIgY216bGliKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzL2NtemxpYikKICAgICBDTUFLRV9TRVRfVEFSR0VUX0ZPTERFUihjbXpsaWIgIlV0aWxpdGllcy8zcmRQYXJ0eSIpCiAgIGVuZGlmKCkKQEAgLTQ2Niw5ICs1MDAsMTkgQEAKICAgICAgIHNldChDVVJMX0NBX1BBVEggIiIgQ0FDSEUgUEFUSCAiUGF0aCB0byBTU0wgQ0EgQ2VydGlmaWNhdGUgRGlyZWN0b3J5IikKICAgICAgIG1hcmtfYXNfYWR2YW5jZWQoQ1VSTF9DQV9CVU5ETEUgQ1VSTF9DQV9QQVRIKQogICAgIGVuZGlmKCkKKyAgICBpZihOT1QgQ01BS0VfVVNFX1NZU1RFTV9OR0hUVFAyKQorICAgICAgIyBUZWxsIGN1cmwncyBGaW5kTkdIVFRQMiBtb2R1bGUgdG8gdXNlIG91ciBsaWJyYXJ5LgorICAgICAgc2V0KE5HSFRUUDJfTElCUkFSWSBjbW5naHR0cDIpCisgICAgICBzZXQoTkdIVFRQMl9JTkNMVURFX0RJUiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvaW5jbHVkZXMpCisgICAgZW5kaWYoKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzL2NtY3VybCkKICAgICBDTUFLRV9TRVRfVEFSR0VUX0ZPTERFUihjbWN1cmwgIlV0aWxpdGllcy8zcmRQYXJ0eSIpCiAgICAgQ01BS0VfU0VUX1RBUkdFVF9GT0xERVIoTElCQ1VSTCAiVXRpbGl0aWVzLzNyZFBhcnR5IikKKyAgICBpZihOT1QgQ01BS0VfVVNFX1NZU1RFTV9OR0hUVFAyKQorICAgICAgIyBDb25maWd1cmUgYWZ0ZXIgY3VybCB0byByZS11c2Ugc29tZSBjaGVjayByZXN1bHRzLgorICAgICAgYWRkX3N1YmRpcmVjdG9yeShVdGlsaXRpZXMvY21uZ2h0dHAyKQorICAgICAgQ01BS0VfU0VUX1RBUkdFVF9GT0xERVIoY21uZ2h0dHAyICJVdGlsaXRpZXMvM3JkUGFydHkiKQorICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCiAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ5Nyw2ICs1NDEsMTEgQEAKICAgICAgIHNldChCWklQMl9JTkNMVURFX0RJUgogICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1V0aWxpdGllcy9jbWJ6aXAyIikKICAgICAgIHNldChCWklQMl9MSUJSQVJJRVMgY21iemlwMikKKyAgICAgIHNldChCWklQMl9ORUVEX1BSRUZJWCAiIikKKyAgICAgIHNldChVU0VfQlpJUDJfRExMICIiKQorICAgICAgc2V0KFVTRV9CWklQMl9ETExfV0lUSF9MSUIgY21iemlwMikKKyAgICAgIHNldChVU0VfQlpJUDJfU1RBVElDICIiKQorICAgICAgc2V0KFVTRV9CWklQMl9TVEFUSUNfV0lUSF9MSUIgY21iemlwMikKICAgICAgIGFkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzL2NtYnppcDIpCiAgICAgICBDTUFLRV9TRVRfVEFSR0VUX0ZPTERFUihjbWJ6aXAyICJVdGlsaXRpZXMvM3JkUGFydHkiKQogICAgIGVuZGlmKCkKQEAgLTU0OCwyMSArNTk3LDI1IEBACiAgICAgc2V0KFpMSUJfSU5DTFVERV9ESVIgJHtDTUFLRV9aTElCX0lOQ0xVREVTfSkKICAgICBzZXQoWkxJQl9MSUJSQVJZICR7Q01BS0VfWkxJQl9MSUJSQVJJRVN9KQogICAgIGFkZF9kZWZpbml0aW9ucygtRExJQkFSQ0hJVkVfU1RBVElDKQorICAgIHNldChFTkFCTEVfTUJFRFRMUyBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB1c2Ugb2YgbWJlZCBUTFMiKQogICAgIHNldChFTkFCTEVfTkVUVExFIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHVzZSBvZiBOZXR0bGUiKQogICAgIHNldChFTkFCTEVfT1BFTlNTTCAke0NNQUtFX1VTRV9PUEVOU1NMfSBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHVzZSBvZiBPcGVuU1NMIikKKyAgICBzZXQoRU5BQkxFX0xJQkIyIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMSUJCMiBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX0xaTUEgT04gQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTFpNQSBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX0xaNCBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTFo0IGxpYnJhcnkgaWYgZm91bmQiKQogICAgIHNldChFTkFCTEVfTFpPIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMWk8gbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9aTElCIE9OIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIFpMSUIgbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9CWmlwMiBPTiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBCWmlwMiBsaWJyYXJ5IGlmIGZvdW5kIikKKyAgICBzZXQoRU5BQkxFX1pTVEQgT04gQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0genN0ZCBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX0xJQlhNTDIgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIGxpYnhtbDIgbGlicmFyeSBpZiBmb3VuZCIpCi0gICAgc2V0KEVOQUJMRV9FWFBBVCBPTiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBFWFBBVCBsaWJyYXJ5IGlmIGZvdW5kIikKKyAgICBzZXQoRU5BQkxFX0VYUEFUIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBFWFBBVCBsaWJyYXJ5IGlmIGZvdW5kIikKICAgICBzZXQoRU5BQkxFX1BDUkVQT1NJWCBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gUENSRVBPU0lYIGxpYnJhcnkgaWYgZm91bmQiKQogICAgIHNldChFTkFCTEVfTGliR0NDIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMaWJHQ0MgbGlicmFyeSBpZiBmb3VuZCIpCiAgICAgc2V0KEVOQUJMRV9YQVRUUiBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCIpCiAgICAgc2V0KEVOQUJMRV9BQ0wgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgQUNMIHN1cHBvcnQiKQogICAgIHNldChFTkFCTEVfSUNPTlYgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgaWNvbnYgc3VwcG9ydCIpCiAgICAgc2V0KEVOQUJMRV9DTkcgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgdGhlIHVzZSBvZiBDTkcoQ3J5cHRvIE5leHQgR2VuZXJhdGlvbikiKQorICAgIFNFVChQT1NJWF9SRUdFWF9MSUIgIiIgQ0FDSEUgSU5URVJOQUwgIkNob29zZSB3aGF0IGxpYnJhcnkgc2hvdWxkIHByb3ZpZGUgUE9TSVggcmVndWxhciBleHByZXNzaW9uIHN1cHBvcnQiKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzL2NtbGliYXJjaGl2ZSkKICAgICBDTUFLRV9TRVRfVEFSR0VUX0ZPTERFUihjbWxpYmFyY2hpdmUgIlV0aWxpdGllcy8zcmRQYXJ0eSIpCiAgICAgc2V0KENNQUtFX1RBUl9MSUJSQVJJRVMgY21saWJhcmNoaXZlICR7QlpJUDJfTElCUkFSSUVTfSkKQEAgLTY3MSwxMCArNzI0LDYgQEAKICAgc2V0KExJQlJBUllfT1VUUFVUX1BBVEggIiIgQ0FDSEUgSU5URVJOQUwKICAgICAiV2hlcmUgdG8gcHV0IHRoZSBsaWJyYXJpZXMgZm9yIENNYWtlIikKIAotICAjIFRoZSBDTWFrZSBleGVjdXRhYmxlcyB1c3VhbGx5IGRvIG5vdCBuZWVkIGFueSBycGF0aCB0byBydW4gaW4gdGhlIGJ1aWxkIG9yCi0gICMgaW5zdGFsbCB0cmVlLgotICBzZXQoQ01BS0VfU0tJUF9SUEFUSCBPTiBDQUNIRSBJTlRFUk5BTCAiQ01ha2UgZG9lcyBub3QgbmVlZCBSUEFUSHMuIikKLQogICAjIExvYWQgaW5zdGFsbCBkZXN0aW5hdGlvbnMuCiAgIGluY2x1ZGUoU291cmNlL0NNYWtlSW5zdGFsbERlc3RpbmF0aW9ucy5jbWFrZSkKIApAQCAtNjgyLDEwICs3MzEsMTUgQEAKICAgICBpbmNsdWRlKCR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvQ01ha2VJbnN0YWxsLmNtYWtlKQogICBlbmRpZigpCiAKLSAgIyBubyBjbHVlIHdoeSB3ZSBhcmUgdGVzdGluZyBmb3IgdGhpcyBoZXJlCi0gIGluY2x1ZGUoQ2hlY2tTeW1ib2xFeGlzdHMpCi0gIENIRUNLX1NZTUJPTF9FWElTVFModW5zZXRlbnYgInN0ZGxpYi5oIiBIQVZFX1VOU0VURU5WKQotICBDSEVDS19TWU1CT0xfRVhJU1RTKGVudmlyb24gInN0ZGxpYi5oIiBIQVZFX0VOVklST05fTk9UX1JFUVVJUkVfUFJPVE9UWVBFKQorICAjIENoZWNrcyBmb3IgY21TeXN0ZW1Ub29scy4KKyAgaWYoV0lOMzIpCisgICAgc2V0KEhBVkVfVU5TRVRFTlYgMCkKKyAgICBzZXQoSEFWRV9FTlZJUk9OX05PVF9SRVFVSVJFX1BST1RPVFlQRSAxKQorICBlbHNlKCkKKyAgICBpbmNsdWRlKENoZWNrU3ltYm9sRXhpc3RzKQorICAgIENIRUNLX1NZTUJPTF9FWElTVFModW5zZXRlbnYgInN0ZGxpYi5oIiBIQVZFX1VOU0VURU5WKQorICAgIENIRUNLX1NZTUJPTF9FWElTVFMoZW52aXJvbiAic3RkbGliLmgiIEhBVkVfRU5WSVJPTl9OT1RfUkVRVUlSRV9QUk9UT1RZUEUpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogIyBDTUFLRV9URVNUU19DREFTSF9TRVJWRVI6IENEYXNoIHNlcnZlciB1c2VkIGJ5IENNYWtlL1Rlc3RzLgpAQCAtNzE0LDE5ICs3NjgsNiBAQAogICAjIGJ1aWxkIHRoZSB1dGlsaXRpZXMgKGEgbWFjcm8gZGVmaW5lZCBpbiB0aGlzIGZpbGUpCiAgIENNQUtFX0JVSUxEX1VUSUxJVElFUygpCiAKLSAgIyBPbiBOZXRCU0QgbmN1cnNlcyBpcyByZXF1aXJlZCwgc2luY2UgY3Vyc2VzIGRvZXNuJ3QgaGF2ZSB0aGUgd3N5bmN1cCgpCi0gICMgZnVuY3Rpb24uIG5jdXJzZXMgaXMgaW5zdGFsbGVkIHZpYSBwa2dzcmMsIHNvIHRoZSBsaWJyYXJ5IGlzIGluIC91c3IvcGtnL2xpYiwKLSAgIyB3aGljaCBpc24ndCBpbiB0aGUgZGVmYXVsdCBsaW5rZXIgc2VhcmNoIHBhdGguIFNvIHdpdGhvdXQgUlBBVEggY2NtYWtlCi0gICMgZG9lc24ndCBydW4gYW5kIHRoZSBidWlsZCBkb2Vzbid0IHN1Y2NlZWQgc2luY2UgY2NtYWtlIGlzIGV4ZWN1dGVkIGZvcgotICAjIGdlbmVyYXRpbmcgdGhlIGRvY3VtZW50YXRpb24uCi0gIGlmKEJVSUxEX0N1cnNlc0RpYWxvZykKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9DVVJTRVNfRElSICIke0NVUlNFU19MSUJSQVJZfSIgUEFUSCkKLSAgICBzZXQoQ1VSU0VTX05FRURfUlBBVEggRkFMU0UpCi0gICAgaWYoTk9UICIke19DVVJTRVNfRElSfSIgU1RSRVFVQUwgIi9saWIiIEFORCBOT1QgIiR7X0NVUlNFU19ESVJ9IiBTVFJFUVVBTCAiL3Vzci9saWIiIEFORCBOT1QgIiR7X0NVUlNFU19ESVJ9IiBTVFJFUVVBTCAiL2xpYjY0IiBBTkQgTk9UICIke19DVVJTRVNfRElSfSIgU1RSRVFVQUwgIi91c3IvbGliNjQiKQotICAgICAgc2V0KENVUlNFU19ORUVEX1JQQVRIIFRSVUUpCi0gICAgZW5kaWYoKQotICBlbmRpZigpCi0KICAgaWYoQlVJTERfUXREaWFsb2cpCiAgICAgaWYoQVBQTEUpCiAgICAgICBzZXQoQ01BS0VfQlVORExFX1ZFUlNJT04KQEAgLTczOSwyOCArNzgwLDE1IEBACiAgICAgICBzZXQoQ01BS0VfSU5TVEFMTF9QUkVGSVgKICAgICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9Q01ha2UuYXBwL0NvbnRlbnRzIikKICAgICBlbmRpZigpCi0KLSAgICBzZXQoUVRfTkVFRF9SUEFUSCBGQUxTRSkKLSAgICBpZihOT1QgIiR7UVRfTElCUkFSWV9ESVJ9IiBTVFJFUVVBTCAiL2xpYiIgQU5EIE5PVCAiJHtRVF9MSUJSQVJZX0RJUn0iIFNUUkVRVUFMICIvdXNyL2xpYiIgQU5EIE5PVCAiJHtRVF9MSUJSQVJZX0RJUn0iIFNUUkVRVUFMICIvbGliNjQiIEFORCBOT1QgIiR7UVRfTElCUkFSWV9ESVJ9IiBTVFJFUVVBTCAiL3Vzci9saWI2NCIpCi0gICAgICBzZXQoUVRfTkVFRF9SUEFUSCBUUlVFKQotICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCi0KLSAgIyBUaGUgc2FtZSBtaWdodCBiZSB0cnVlIG9uIG90aGVyIHN5c3RlbXMgZm9yIG90aGVyIGxpYnJhcmllcy4KLSAgIyBUaGVuIG9ubHkgZW5hYmxlIFJQQVRIIGlmIHdlIGhhdmUgYXJlIGJ1aWxkaW5nIGF0IGxlYXN0IHdpdGggY21ha2UgMi40LAotICAjIHNpbmNlIHRoaXMgb25lIGhhcyBtdWNoIGJldHRlciBSUEFUSCBmZWF0dXJlcyB0aGFuIGNtYWtlIDIuMi4KLSAgIyBUaGUgZXhlY3V0YWJsZXMgYXJlIHRoZW4gYnVpbHQgd2l0aCB0aGUgUlBBVEggZm9yIHRoZSBsaWJyYXJpZXMgb3V0c2lkZQotICAjIHRoZSBidWlsZCB0cmVlLCB3aGljaCBpcyBib3RoIHRoZSBidWlsZCBhbmQgdGhlIGluc3RhbGwgUlBBVEguCi0gIGlmIChVTklYKQotICAgIGlmKCAgIENNQUtFX1VTRV9TWVNURU1fQ1VSTCAgIE9SICBDTUFLRV9VU0VfU1lTVEVNX1pMSUIKLSAgICAgICAgICBPUiAgQ01BS0VfVVNFX1NZU1RFTV9FWFBBVCAgT1IgIENVUlNFU19ORUVEX1JQQVRIICBPUiAgUVRfTkVFRF9SUEFUSCkKLSAgICAgIHNldChDTUFLRV9TS0lQX1JQQVRIIE9GRiBDQUNIRSBJTlRFUk5BTCAiQ01ha2UgYnVpbHQgd2l0aCBSUEFUSC4iKQotICAgICAgc2V0KENNQUtFX0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSCBUUlVFKQotICAgICAgc2V0KENNQUtFX0JVSUxEX1dJVEhfSU5TVEFMTF9SUEFUSCBUUlVFKQotICAgIGVuZGlmKCkKLSAgZW5kaWYgKCkKLQorICBpZihVTklYKQorICAgICMgSW5zdGFsbCBleGVjdXRhYmxlcyB3aXRoIHRoZSBSUEFUSCBzZXQgZm9yIGxpYnJhcmllcyBvdXRzaWRlIHRoZSBidWlsZCB0cmVlLgorICAgICMgVGhpcyBpcyBhbHNvIHN1aXRhYmxlIGZvciBiaW5hcmllcyBpbiB0aGUgYnVpbGQgdHJlZS4gIEF2b2lkIHJlLWxpbmsgb24gaW5zdGFsbC4KKyAgICBzZXQoQ01BS0VfSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIIE9OIENBQ0hFIEJPT0wgIkluc3RhbGwgd2l0aCBSUEFUSCBzZXQgdG8gZmluZCBjdXN0b20tYnVpbHQgbGlicmFyaWVzLiIpCisgICAgc2V0KENNQUtFX0JVSUxEX1dJVEhfSU5TVEFMTF9SUEFUSCBPTiBDQUNIRSBCT09MICJCdWlsZCB3aXRoIFJQQVRIIHNldCB0byBtYXRjaCBpbnN0YWxsLXRyZWUgUlBBVEguIikKKyAgICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSCBDTUFLRV9CVUlMRF9XSVRIX0lOU1RBTExfUlBBVEgpCisgIGVuZGlmKCkKIAogICAjIGFkZCB0aGUgdW5pbnN0YWxsIHN1cHBvcnQKICAgY29uZmlndXJlX2ZpbGUoCkBAIC04NDEsNyArODY5LDcgQEAKICAgICBQQVRURVJOICIqLnNoKiIgUEVSTUlTU0lPTlMgT1dORVJfUkVBRCBPV05FUl9FWEVDVVRFIE9XTkVSX1dSSVRFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT1JMRF9SRUFEIFdPUkxEX0VYRUNVVEUKLSAgICBQQVRURVJOICJFeHBvcnRJbXBvcnRMaXN0IgorICAgIFJFR0VYICIvKEV4cG9ydEltcG9ydExpc3R8Y3BwKSQiCiAgICAgICBQRVJNSVNTSU9OUyBPV05FUl9SRUFEIE9XTkVSX0VYRUNVVEUgT1dORVJfV1JJVEUKICAgICAgICAgICAgICAgICAgIEdST1VQX1JFQUQgR1JPVVBfRVhFQ1VURQogICAgICAgICAgICAgICAgICAgV09STERfUkVBRCBXT1JMRF9FWEVDVVRFCmRpZmYgLS1naXQgYS9DT05UUklCVVRJTkcucnN0IGIvQ09OVFJJQlVUSU5HLnJzdAppbmRleCA3OTgzYmUxLi4zMDA2MjE0IDEwMDY0NAotLS0gYS9DT05UUklCVVRJTkcucnN0CisrKyBiL0NPTlRSSUJVVElORy5yc3QKQEAgLTExLDExICsxMSwxMSBAQAogCiBDTWFrZSBpcyBtYWludGFpbmVkIGFuZCBzdXBwb3J0ZWQgYnkgYEtpdHdhcmVgXyBhbmQgZGV2ZWxvcGVkIGluCiBjb2xsYWJvcmF0aW9uIHdpdGggYSBwcm9kdWN0aXZlIGNvbW11bml0eSBvZiBjb250cmlidXRvcnMuCi1QbGVhc2Ugc3Vic2NyaWJlIGFuZCBwb3N0IHRvIHRoZSBgQ01ha2UgRGV2ZWxvcGVycyBMaXN0YF8gdG8gcmFpc2UKK1BsZWFzZSBwb3N0IHRvIHRoZSBgYERldmVsb3BtZW50YGAgY2F0ZWdvcnkgb2YgdGhlIGBDTWFrZSBGb3J1bWBfIHRvIHJhaXNlCiBkaXNjdXNzaW9uIG9mIGRldmVsb3BtZW50IHRvcGljcy4KIAogLi4gX2BLaXR3YXJlYDogaHR0cDovL3d3dy5raXR3YXJlLmNvbS9jbWFrZQotLi4gX2BDTWFrZSBEZXZlbG9wZXJzIExpc3RgOiBodHRwczovL2NtYWtlLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2NtYWtlLWRldmVsb3BlcnMKKy4uIF9gQ01ha2UgRm9ydW1gOiBodHRwczovL2Rpc2NvdXJzZS5jbWFrZS5vcmcKIAogUGF0Y2hlcwogPT09PT09PQpkaWZmIC0tZ2l0IGEvQ1Rlc3RDb25maWcuY21ha2UgYi9DVGVzdENvbmZpZy5jbWFrZQppbmRleCAwMjA1ODJlLi40NzZhMWM2IDEwMDY0NAotLS0gYS9DVGVzdENvbmZpZy5jbWFrZQorKysgYi9DVGVzdENvbmZpZy5jbWFrZQpAQCAtMSwxMCArMSwxNCBAQAogIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgogCisjIElmIGNoYW5naW5nIHRoaXMgZmlsZSwgYWxzbyB1cGRhdGUgVXRpbGl0aWVzL1NwaGlueC9DVGVzdENvbmZpZy5jbWFrZQorCiBzZXQoQ1RFU1RfUFJPSkVDVF9OQU1FICJDTWFrZSIpCiBzZXQoQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FICIxOjAwOjAwIFVUQyIpCiAKLXNldChDVEVTVF9EUk9QX01FVEhPRCAiaHR0cCIpCitpZihOT1QgQ1RFU1RfRFJPUF9NRVRIT0QgU1RSRVFVQUwgImh0dHBzIikKKyAgc2V0KENURVNUX0RST1BfTUVUSE9EICJodHRwIikKK2VuZGlmKCkKIHNldChDVEVTVF9EUk9QX1NJVEUgIm9wZW4uY2Rhc2gub3JnIikKIHNldChDVEVTVF9EUk9QX0xPQ0FUSU9OICIvc3VibWl0LnBocD9wcm9qZWN0PUNNYWtlIikKIHNldChDVEVTVF9EUk9QX1NJVEVfQ0RBU0ggVFJVRSkKZGlmZiAtLWdpdCBhL0NUZXN0Q3VzdG9tLmNtYWtlLmluIGIvQ1Rlc3RDdXN0b20uY21ha2UuaW4KaW5kZXggZDNhYjlkMy4uNGM4MjY3ZCAxMDA2NDQKLS0tIGEvQ1Rlc3RDdXN0b20uY21ha2UuaW4KKysrIGIvQ1Rlc3RDdXN0b20uY21ha2UuaW4KQEAgLTExLDYgKzExLDcgQEAKICAgIndhcm5pbmc6IFxcKExvbmcgZG91YmxlIHVzYWdlIGlzIHJlcG9ydGVkIG9ubHkgb25jZSBmb3IgZWFjaCBmaWxlIgogICAid2FybmluZzogVG8gZGlzYWJsZSB0aGlzIHdhcm5pbmcgdXNlIgogICAiY291bGQgbm90IGJlIGlubGluZWQiCisgICJsaWJjbWV4cGF0LipoYXMgbm8gc3ltYm9scyIKICAgImxpYmNtY3VybC4qaGFzIG5vIHN5bWJvbHMiCiAgICJub3Qgc29ydGVkIHNsb3dlciBsaW5rIGVkaXRpbmcgd2lsbCByZXN1bHQiCiAgICJzdGxfZGVxdWUuaDo0NzkiCkBAIC02NCw2ICs2NSw3IEBACiAgICJsZDogd2FybmluZyAuKi9saWJnY2MuYSBhcmNoaXZlJ3MgY3B1dHlwZSIKICAgImxkOiB3YXJuaW5nOiBpZ25vcmluZyBmaWxlIC4qL2xpYmdjYy5hLCBmaWxlIHdhcyBidWlsdCBmb3IgYXJjaGl2ZSB3aGljaCBpcyBub3QgdGhlIGFyY2hpdGVjdHVyZSBiZWluZyBsaW5rZWQiCiAgICJsZDogd2FybmluZzogaW4gLiovbGliZ2NjLmEsIGZpbGUgaXMgbm90IG9mIHJlcXVpcmVkIGFyY2hpdGVjdHVyZSIKKyAgImxkOiB3YXJuaW5nOiBzeW1ib2wgLihkZWZsYXRlfGluZmxhdGUpX2NvcHlyaWdodC4gaGFzIGRpZmZlcmluZyBzaXplcyIgIyBzeXN0ZW0gbGlieiBhbmQgUXRDb3JlIGRpc2FncmVlCiAgICJ3YXJuaW5nLipUaGlzIHZlcnNpb24gb2YgTWFjIE9TIFggaXMgdW5zdXBwb3J0ZWQiCiAgICJjbGFuZy4qOiB3YXJuaW5nOiBhcmd1bWVudCB1bnVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uOiAuLWciCiAgICJub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8iICMgZGlhZ25vc3RpYyBjb250ZXh0IG5vdGUKQEAgLTcyLDYgKzc0LDcgQEAKICAgImNtKFN0cmluZ0NvbW1hbmR8Q1Rlc3RUZXN0SGFuZGxlcilcXC5jeHguKndhcm5pbmcuKnJhbmQuKmlzbi4qdCByYW5kb20iICMgd2UgZG8gbm90IGRvIGNyeXB0bwogICAiY20oU3RyaW5nQ29tbWFuZHxDVGVzdFRlc3RIYW5kbGVyKVxcLmN4eC4qd2FybmluZy4qc3JhbmQuKnNlZWQgY2hvaWNlcyBhcmUuKnBvb3IiICMgd2UgZG8gbm90IGRvIGNyeXB0bwogICAiSVBBIHdhcm5pbmc6IGZ1bmN0aW9uLiptdWx0aXBseSBkZWZpbmVkIGluIgorICAiTElDRU5TRSBXQVJOSU5HIiAjIFBHSSBsaWNlbnNlIGV4cGlyeS4gIE5vdCB1c2VmdWwgaW4gbmlnaHRseSB0ZXN0aW5nLgogCiAgICMgSWdub3JlIGNvbXBpbGVyIHN1bW1hcnkgd2FybmluZywgYXNzdW1pbmcgcHJpb3IgdGV4dCBoYXMgbWF0Y2hlZCBzb21lCiAgICMgb3RoZXIgd2FybmluZyBleHByZXNzaW9uOgpAQCAtNzksNyArODIsNyBAQAogICAiY29tcGlsYXRpb24gY29tcGxldGVkIHdpdGggd2FybmluZ3MiICMgUEdJCiAgICJbMC05XSsgV2FybmluZ1xcKHNcXCkgZGV0ZWN0ZWQiICMgU3VuUHJvCiAKLSMgc2NhbmJ1aWxkIGV4Y2VwdGlvbnMKKyAgIyBzY2FuYnVpbGQgZXhjZXB0aW9ucwogICAiY2hhcl90cmFpdHMuaDouKjogd2FybmluZzogTnVsbCBwb2ludGVyIGFyZ3VtZW50IGluIGNhbGwgdG8gc3RyaW5nIGxlbmd0aCBmdW5jdGlvbiIKICAgInN0bF9jb25zdHJ1Y3QuaDouKjogd2FybmluZzogRm9ybWluZyByZWZlcmVuY2UgdG8gbnVsbCBwb2ludGVyIgogICAiLipzdGxfdW5pbml0aWFsaXplZC5oOjc1OjE5OiB3YXJuaW5nOiBGb3JtaW5nIHJlZmVyZW5jZSB0byBudWxsIHBvaW50ZXIuKiIKQEAgLTk4LDYgKzEwMSw5IEBACiAgICJsaWJsem1hL2NvbW1vbi9pbmRleF9lbmNvZGVyLmM6WzAtOV0rOlswLTldKzogd2FybmluZzogVmFsdWUgc3RvcmVkIHRvIC4qIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb24gaXMgbmV2ZXIgcmVhZCIKICAgImxpYnV2L3NyYy8uKjpbMC05XSs6WzAtOV0rOiB3YXJuaW5nOiBEZXJlZmVyZW5jZSBvZiBudWxsIHBvaW50ZXIiCiAgICJsaWJ1di9zcmMvLio6WzAtOV0rOlswLTldKzogd2FybmluZzogVGhlIGxlZnQgb3BlcmFuZCBvZiAnPT0nIGlzIGEgZ2FyYmFnZSB2YWx1ZSIKKyAgImxpYnV2L3NyYy8uKjpbMC05XSs6WzAtOV0rOiB3YXJuaW5nOiAxc3QgZnVuY3Rpb24gY2FsbCBhcmd1bWVudCBpcyBhbiB1bmluaXRpYWxpemVkIHZhbHVlIgorICAibmdodHRwMi9saWIvLio6WzAtOV0rOlswLTldKzogd2FybmluZzogRGVyZWZlcmVuY2Ugb2YgbnVsbCBwb2ludGVyIgorICAibmdodHRwMi9saWIvLio6WzAtOV0rOlswLTldKzogd2FybmluZzogVmFsdWUgc3RvcmVkIHRvIC4qIGlzIG5ldmVyIHJlYWQiCiAgICkKIAogaWYoTk9UICJAQ01BS0VfR0VORVJBVE9SQCIgTUFUQ0hFUyAiWGNvZGUiKQpkaWZmIC0tZ2l0IGEvQ29weXJpZ2h0LnR4dCBiL0NvcHlyaWdodC50eHQKaW5kZXggZjIzNjIxNC4uYjg2N2QwMSAxMDA2NDQKLS0tIGEvQ29weXJpZ2h0LnR4dAorKysgYi9Db3B5cmlnaHQudHh0CkBAIC0xLDUgKzEsNSBAQAogQ01ha2UgLSBDcm9zcyBQbGF0Zm9ybSBNYWtlZmlsZSBHZW5lcmF0b3IKLUNvcHlyaWdodCAyMDAwLTIwMTkgS2l0d2FyZSwgSW5jLiBhbmQgQ29udHJpYnV0b3JzCitDb3B5cmlnaHQgMjAwMC0yMDIwIEtpdHdhcmUsIEluYy4gYW5kIENvbnRyaWJ1dG9ycwogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05OSw2ICs5OSw3IEBACiAqIFNlYmFzdGlhbiBIb2x0ZXJtYW5uIDxzZWJob2x0QHh3bXcub3JnPgogKiBTdGVwaGVuIEtlbGx5IDxzdGV2ZWlyZUBnbWFpbC5jb20+CiAqIFN5bHZhaW4gSm91YmVydCA8am91YmVydC5zeUBnbWFpbC5jb20+CisqIFRoZSBRdCBDb21wYW55IEx0ZC4KICogVGhvbWFzIFNvbmRlcmdhYXJkIDx0c0BtZWRpY2FsLWluc2lnaHQuY29tPgogKiBUb2JpYXMgSHVuZ2VyIDx0b2JpYXMuaHVuZ2VyQHF0LmlvPgogKiBUb2RkIEdhbWJsaW4gPHRnYW1ibGluQGxsbmwuZ292PgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL0RFVklDRV9MSU5LX09QVElPTlMudHh0IGIvSGVscC9jb21tYW5kL0RFVklDRV9MSU5LX09QVElPTlMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMDIyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2NvbW1hbmQvREVWSUNFX0xJTktfT1BUSU9OUy50eHQKQEAgLTAsMCArMSwxMSBAQAorCitXaGVuIGEgZGV2aWNlIGxpbmsgc3RlcCBpcyBpbnZvbHZlZCwgd2hpY2ggaXMgY29udHJvbGxlZCBieQorOnByb3BfdGd0OmBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTmAgYW5kCis6cHJvcF90Z3Q6YENVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MU2AgcHJvcGVydGllcyBhbmQgcG9saWN5IDpwb2xpY3k6YENNUDAxMDVgLAordGhlIHJhdyBvcHRpb25zIHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZSBob3N0IGFuZCBkZXZpY2UgbGluayBzdGVwcyAod3JhcHBlZCBpbgorYGAtWGNvbXBpbGVyYGAgb3IgZXF1aXZhbGVudCBmb3IgZGV2aWNlIGxpbmspLiBPcHRpb25zIHdyYXBwZWQgd2l0aAorYGAkPERFVklDRV9MSU5LOi4uLj5gYAorOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb24gPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIHdpbGwgYmUgdXNlZAorb25seSBmb3IgdGhlIGRldmljZSBsaW5rIHN0ZXAuIE9wdGlvbnMgd3JhcHBlZCB3aXRoIGBgJDxIT1NUX0xJTks6Li4uPmBgCis6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbiA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgd2lsbCBiZSB1c2VkCitvbmx5IGZvciB0aGUgaG9zdCBsaW5rIHN0ZXAuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvRklORF9YWFgudHh0IGIvSGVscC9jb21tYW5kL0ZJTkRfWFhYLnR4dAppbmRleCA0MmJmNTJiLi40YTYyYzViIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvRklORF9YWFgudHh0CisrKyBiL0hlbHAvY29tbWFuZC9GSU5EX1hYWC50eHQKQEAgLTE1LDYgKzE1LDcgQEAKICAgICAgICAgICAgICBbUEFUSFMgcGF0aDEgW3BhdGgyIC4uLiBFTlYgdmFyXV0KICAgICAgICAgICAgICBbUEFUSF9TVUZGSVhFUyBzdWZmaXgxIFtzdWZmaXgyIC4uLl1dCiAgICAgICAgICAgICAgW0RPQyAiY2FjaGUgZG9jdW1lbnRhdGlvbiBzdHJpbmciXQorICAgICAgICAgICAgIFtSRVFVSVJFRF0KICAgICAgICAgICAgICBbTk9fREVGQVVMVF9QQVRIXQogICAgICAgICAgICAgIFtOT19QQUNLQUdFX1JPT1RfUEFUSF0KICAgICAgICAgICAgICBbTk9fQ01BS0VfUEFUSF0KQEAgLTMxLDggKzMyLDkgQEAKIG9mIHRoaXMgY29tbWFuZC4KIElmIHRoZSB8U0VBUkNIX1hYWHwgaXMgZm91bmQgdGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIHZhcmlhYmxlCiBhbmQgdGhlIHNlYXJjaCB3aWxsIG5vdCBiZSByZXBlYXRlZCB1bmxlc3MgdGhlIHZhcmlhYmxlIGlzIGNsZWFyZWQuCi1JZiBub3RoaW5nIGlzIGZvdW5kLCB0aGUgcmVzdWx0IHdpbGwgYmUKLWBgPFZBUj4tTk9URk9VTkRgYCwgYW5kIHRoZSBzZWFyY2ggd2lsbCBiZSBhdHRlbXB0ZWQgYWdhaW4gdGhlCitJZiBub3RoaW5nIGlzIGZvdW5kLCB0aGUgcmVzdWx0IHdpbGwgYmUgYGA8VkFSPi1OT1RGT1VORGBgLgorVGhlIGBgUkVRVUlSRURgYCBvcHRpb24gc3RvcHMgcHJvY2Vzc2luZyB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaWYgbm90aGluZworaXMgZm91bmQsIG90aGVyd2lzZSB0aGUgc2VhcmNoIHdpbGwgYmUgYXR0ZW1wdGVkIGFnYWluIHRoZQogbmV4dCB0aW1lIHxGSU5EX1hYWHwgaXMgaW52b2tlZCB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlLgogCiBPcHRpb25zIGluY2x1ZGU6CkBAIC01Nyw2ICs1OSw5IEBACiBgYERPQ2BgCiAgIFNwZWNpZnkgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGZvciB0aGUgYGA8VkFSPmBgIGNhY2hlIGVudHJ5LgogCitgYFJFUVVJUkVEYGAKKyAgU3RvcCBwcm9jZXNzaW5nIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiBub3RoaW5nIGlzIGZvdW5kLgorCiBJZiBgYE5PX0RFRkFVTFRfUEFUSGBgIGlzIHNwZWNpZmllZCwgdGhlbiBubyBhZGRpdGlvbmFsIHBhdGhzIGFyZQogYWRkZWQgdG8gdGhlIHNlYXJjaC4KIElmIGBgTk9fREVGQVVMVF9QQVRIYGAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHNlYXJjaCBwcm9jZXNzIGlzIGFzIGZvbGxvd3M6CkBAIC0xMzgsNiArMTQzLDEwIEBACiAgICAqIHxDTUFLRV9TWVNURU1fWFhYX1BBVEh8CiAgICAqIHxDTUFLRV9TWVNURU1fWFhYX01BQ19QQVRIfAogCisgICBUaGUgcGxhdGZvcm0gcGF0aHMgdGhhdCB0aGVzZSB2YXJpYWJsZXMgY29udGFpbiBhcmUgbG9jYXRpb25zIHRoYXQKKyAgIHR5cGljYWxseSBpbmNsdWRlIGluc3RhbGxlZCBzb2Z0d2FyZS4gQW4gZXhhbXBsZSBiZWluZyBgYC91c3IvbG9jYWxgYCBmb3IKKyAgIFVOSVggYmFzZWQgcGxhdGZvcm1zLgorCiA3LiBTZWFyY2ggdGhlIHBhdGhzIHNwZWNpZmllZCBieSB0aGUgUEFUSFMgb3B0aW9uCiAgICBvciBpbiB0aGUgc2hvcnQtaGFuZCB2ZXJzaW9uIG9mIHRoZSBjb21tYW5kLgogICAgVGhlc2UgYXJlIHR5cGljYWxseSBoYXJkLWNvZGVkIGd1ZXNzZXMuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvYWRkX2NvbXBpbGVfZGVmaW5pdGlvbnMucnN0IGIvSGVscC9jb21tYW5kL2FkZF9jb21waWxlX2RlZmluaXRpb25zLnJzdAppbmRleCA4MjI1ZGE3Li40OGUzM2JlIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvYWRkX2NvbXBpbGVfZGVmaW5pdGlvbnMucnN0CisrKyBiL0hlbHAvY29tbWFuZC9hZGRfY29tcGlsZV9kZWZpbml0aW9ucy5yc3QKQEAgLTEsMTYgKzEsMjAgQEAKIGFkZF9jb21waWxlX2RlZmluaXRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIEFkZCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgdG8gdGhlIGNvbXBpbGF0aW9uIG9mIHNvdXJjZSBmaWxlcy4KIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKICAgYWRkX2NvbXBpbGVfZGVmaW5pdGlvbnMoPGRlZmluaXRpb24+IC4uLikKIAotQWRkcyBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgdG8gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZSBmb3IgdGFyZ2V0cyBpbiB0aGUKLWN1cnJlbnQgZGlyZWN0b3J5IGFuZCBiZWxvdyAod2hldGhlciBhZGRlZCBiZWZvcmUgb3IgYWZ0ZXIgdGhpcyBjb21tYW5kIGlzCi1pbnZva2VkKS4gU2VlIGRvY3VtZW50YXRpb24gb2YgdGhlIDpwcm9wX2RpcjpgZGlyZWN0b3J5IDxDT01QSUxFX0RFRklOSVRJT05TPmAKLWFuZCA6cHJvcF90Z3Q6YHRhcmdldCA8Q09NUElMRV9ERUZJTklUSU9OUz5gIGBgQ09NUElMRV9ERUZJTklUSU9OU2BgIHByb3BlcnRpZXMuCitBZGRzIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lLgorCitUaGUgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIGFyZSBhZGRlZCB0byB0aGUgOnByb3BfZGlyOmBDT01QSUxFX0RFRklOSVRJT05TYAorZGlyZWN0b3J5IHByb3BlcnR5IGZvciB0aGUgY3VycmVudCBgYENNYWtlTGlzdHNgYCBmaWxlLiBUaGV5IGFyZSBhbHNvIGFkZGVkIHRvCit0aGUgOnByb3BfdGd0OmBDT01QSUxFX0RFRklOSVRJT05TYCB0YXJnZXQgcHJvcGVydHkgZm9yIGVhY2ggdGFyZ2V0IGluIHRoZQorY3VycmVudCBgYENNYWtlTGlzdHNgYCBmaWxlLgogCiBEZWZpbml0aW9ucyBhcmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBzeW50YXggYGBWQVJgYCBvciBgYFZBUj12YWx1ZWBgLgogRnVuY3Rpb24tc3R5bGUgZGVmaW5pdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuIENNYWtlIHdpbGwgYXV0b21hdGljYWxseQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2FkZF9jb21waWxlX29wdGlvbnMucnN0IGIvSGVscC9jb21tYW5kL2FkZF9jb21waWxlX29wdGlvbnMucnN0CmluZGV4IDQzODA1YzMuLjM2ZjQwM2MgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9hZGRfY29tcGlsZV9vcHRpb25zLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvYWRkX2NvbXBpbGVfb3B0aW9ucy5yc3QKQEAgLTQ2LDMgKzQ2LDYgQEAKIGFuZCA6Y29tbWFuZDpgaW5jbHVkZV9kaXJlY3Rvcmllc2AuCiAKIFRoZSBjb21tYW5kIDpjb21tYW5kOmB0YXJnZXRfY29tcGlsZV9vcHRpb25zYCBhZGRzIHRhcmdldC1zcGVjaWZpYyBvcHRpb25zLgorCitUaGUgc291cmNlIGZpbGUgcHJvcGVydHkgOnByb3Bfc2Y6YENPTVBJTEVfT1BUSU9OU2AgYWRkcyBvcHRpb25zIHRvIG9uZQorc291cmNlIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvYWRkX2N1c3RvbV9jb21tYW5kLnJzdCBiL0hlbHAvY29tbWFuZC9hZGRfY3VzdG9tX2NvbW1hbmQucnN0CmluZGV4IGFiYTM3NDIuLjkyNzk3NDggMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9hZGRfY3VzdG9tX2NvbW1hbmQucnN0CisrKyBiL0hlbHAvY29tbWFuZC9hZGRfY3VzdG9tX2NvbW1hbmQucnN0CkBAIC02OCw2ICs2OCw5IEBACiAgIG9yZGVyLW9ubHkgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGUgYnlwcm9kdWN0cyB3aWxsIGJlCiAgIGF2YWlsYWJsZSBiZWZvcmUgdGhlaXIgZGVwZW5kZW50cyBidWlsZC4KIAorICBUaGUgOnJlZjpgTWFrZWZpbGUgR2VuZXJhdG9yc2Agd2lsbCByZW1vdmUgYGBCWVBST0RVQ1RTYGAgYW5kIG90aGVyCisgIDpwcm9wX3NmOmBHRU5FUkFURURgIGZpbGVzIGR1cmluZyBgYG1ha2UgY2xlYW5gYC4KKwogYGBDT01NQU5EYGAKICAgU3BlY2lmeSB0aGUgY29tbWFuZC1saW5lKHMpIHRvIGV4ZWN1dGUgYXQgYnVpbGQgdGltZS4KICAgSWYgbW9yZSB0aGFuIG9uZSBgYENPTU1BTkRgYCBpcyBzcGVjaWZpZWQgdGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIG9yZGVyLApAQCAtMTEyLDI0ICsxMTUsNDIgQEAKICAgYnVpbGQgdGltZS4KIAogYGBERVBFTkRTYGAKLSAgU3BlY2lmeSBmaWxlcyBvbiB3aGljaCB0aGUgY29tbWFuZCBkZXBlbmRzLiAgSWYgYW55IGRlcGVuZGVuY3kgaXMKLSAgYW4gYGBPVVRQVVRgYCBvZiBhbm90aGVyIGN1c3RvbSBjb21tYW5kIGluIHRoZSBzYW1lIGRpcmVjdG9yeQotICAoYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGUpIENNYWtlIGF1dG9tYXRpY2FsbHkgYnJpbmdzIHRoZSBvdGhlcgorICBTcGVjaWZ5IGZpbGVzIG9uIHdoaWNoIHRoZSBjb21tYW5kIGRlcGVuZHMuICBFYWNoIGFyZ3VtZW50IGlzIGNvbnZlcnRlZAorICB0byBhIGRlcGVuZGVuY3kgYXMgZm9sbG93czoKKworICAxLiBJZiB0aGUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQgKGNyZWF0ZWQgYnkgdGhlCisgICAgIDpjb21tYW5kOmBhZGRfY3VzdG9tX3RhcmdldGAsIDpjb21tYW5kOmBhZGRfZXhlY3V0YWJsZWAsIG9yCisgICAgIDpjb21tYW5kOmBhZGRfbGlicmFyeWAgY29tbWFuZCkgYSB0YXJnZXQtbGV2ZWwgZGVwZW5kZW5jeSBpcworICAgICBjcmVhdGVkIHRvIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0IGlzIGJ1aWx0IGJlZm9yZSBhbnkgdGFyZ2V0CisgICAgIHVzaW5nIHRoaXMgY3VzdG9tIGNvbW1hbmQuICBBZGRpdGlvbmFsbHksIGlmIHRoZSB0YXJnZXQgaXMgYW4KKyAgICAgZXhlY3V0YWJsZSBvciBsaWJyYXJ5LCBhIGZpbGUtbGV2ZWwgZGVwZW5kZW5jeSBpcyBjcmVhdGVkIHRvCisgICAgIGNhdXNlIHRoZSBjdXN0b20gY29tbWFuZCB0byByZS1ydW4gd2hlbmV2ZXIgdGhlIHRhcmdldCBpcworICAgICByZWNvbXBpbGVkLgorCisgIDIuIElmIHRoZSBhcmd1bWVudCBpcyBhbiBhYnNvbHV0ZSBwYXRoLCBhIGZpbGUtbGV2ZWwgZGVwZW5kZW5jeQorICAgICBpcyBjcmVhdGVkIG9uIHRoYXQgcGF0aC4KKworICAzLiBJZiB0aGUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBzb3VyY2UgZmlsZSB0aGF0IGhhcyBiZWVuCisgICAgIGFkZGVkIHRvIGEgdGFyZ2V0IG9yIG9uIHdoaWNoIGEgc291cmNlIGZpbGUgcHJvcGVydHkgaGFzIGJlZW4gc2V0LAorICAgICBhIGZpbGUtbGV2ZWwgZGVwZW5kZW5jeSBpcyBjcmVhdGVkIG9uIHRoYXQgc291cmNlIGZpbGUuCisKKyAgNC4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgcmVsYXRpdmUgcGF0aCBhbmQgaXQgZXhpc3RzIGluIHRoZSBjdXJyZW50CisgICAgIHNvdXJjZSBkaXJlY3RvcnksIGEgZmlsZS1sZXZlbCBkZXBlbmRlbmN5IGlzIGNyZWF0ZWQgb24gdGhhdAorICAgICBmaWxlIGluIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkuCisKKyAgNS4gT3RoZXJ3aXNlLCBhIGZpbGUtbGV2ZWwgZGVwZW5kZW5jeSBpcyBjcmVhdGVkIG9uIHRoYXQgcGF0aCByZWxhdGl2ZQorICAgICB0byB0aGUgY3VycmVudCBiaW5hcnkgZGlyZWN0b3J5LgorCisgIElmIGFueSBkZXBlbmRlbmN5IGlzIGFuIGBgT1VUUFVUYGAgb2YgYW5vdGhlciBjdXN0b20gY29tbWFuZCBpbiB0aGUgc2FtZQorICBkaXJlY3RvcnkgKGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlKSwgQ01ha2UgYXV0b21hdGljYWxseSBicmluZ3MgdGhlIG90aGVyCiAgIGN1c3RvbSBjb21tYW5kIGludG8gdGhlIHRhcmdldCBpbiB3aGljaCB0aGlzIGNvbW1hbmQgaXMgYnVpbHQuCiAgIEEgdGFyZ2V0LWxldmVsIGRlcGVuZGVuY3kgaXMgYWRkZWQgaWYgYW55IGRlcGVuZGVuY3kgaXMgbGlzdGVkIGFzCiAgIGBgQllQUk9EVUNUU2BgIG9mIGEgdGFyZ2V0IG9yIGFueSBvZiBpdHMgYnVpbGQgZXZlbnRzIGluIHRoZSBzYW1lCiAgIGRpcmVjdG9yeSB0byBlbnN1cmUgdGhlIGJ5cHJvZHVjdHMgd2lsbCBiZSBhdmFpbGFibGUuCi0gIElmIGBgREVQRU5EU2BgIGlzIG5vdCBzcGVjaWZpZWQgdGhlIGNvbW1hbmQgd2lsbCBydW4gd2hlbmV2ZXIKKworICBJZiBgYERFUEVORFNgYCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY29tbWFuZCB3aWxsIHJ1biB3aGVuZXZlcgogICB0aGUgYGBPVVRQVVRgYCBpcyBtaXNzaW5nOyBpZiB0aGUgY29tbWFuZCBkb2VzIG5vdCBhY3R1YWxseQotICBjcmVhdGUgdGhlIGBgT1VUUFVUYGAgdGhlbiB0aGUgcnVsZSB3aWxsIGFsd2F5cyBydW4uCi0gIElmIGBgREVQRU5EU2BgIHNwZWNpZmllcyBhbnkgdGFyZ2V0IChjcmVhdGVkIGJ5IHRoZQotICA6Y29tbWFuZDpgYWRkX2N1c3RvbV90YXJnZXRgLCA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgLCBvcgotICA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgIGNvbW1hbmQpIGEgdGFyZ2V0LWxldmVsIGRlcGVuZGVuY3kgaXMKLSAgY3JlYXRlZCB0byBtYWtlIHN1cmUgdGhlIHRhcmdldCBpcyBidWlsdCBiZWZvcmUgYW55IHRhcmdldAotICB1c2luZyB0aGlzIGN1c3RvbSBjb21tYW5kLiAgQWRkaXRpb25hbGx5LCBpZiB0aGUgdGFyZ2V0IGlzIGFuCi0gIGV4ZWN1dGFibGUgb3IgbGlicmFyeSBhIGZpbGUtbGV2ZWwgZGVwZW5kZW5jeSBpcyBjcmVhdGVkIHRvCi0gIGNhdXNlIHRoZSBjdXN0b20gY29tbWFuZCB0byByZS1ydW4gd2hlbmV2ZXIgdGhlIHRhcmdldCBpcwotICByZWNvbXBpbGVkLgorICBjcmVhdGUgdGhlIGBgT1VUUFVUYGAsIHRoZSBydWxlIHdpbGwgYWx3YXlzIHJ1bi4KIAogICBBcmd1bWVudHMgdG8gYGBERVBFTkRTYGAgbWF5IHVzZQogICA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2FkZF9jdXN0b21fdGFyZ2V0LnJzdCBiL0hlbHAvY29tbWFuZC9hZGRfY3VzdG9tX3RhcmdldC5yc3QKaW5kZXggMmQ1ZjVmMC4uNTZhYjQxNCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2FkZF9jdXN0b21fdGFyZ2V0LnJzdAorKysgYi9IZWxwL2NvbW1hbmQvYWRkX2N1c3RvbV90YXJnZXQucnN0CkBAIC00OSw2ICs0OSw5IEBACiAgIG9yZGVyLW9ubHkgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGUgYnlwcm9kdWN0cyB3aWxsIGJlCiAgIGF2YWlsYWJsZSBiZWZvcmUgdGhlaXIgZGVwZW5kZW50cyBidWlsZC4KIAorICBUaGUgOnJlZjpgTWFrZWZpbGUgR2VuZXJhdG9yc2Agd2lsbCByZW1vdmUgYGBCWVBST0RVQ1RTYGAgYW5kIG90aGVyCisgIDpwcm9wX3NmOmBHRU5FUkFURURgIGZpbGVzIGR1cmluZyBgYG1ha2UgY2xlYW5gYC4KKwogYGBDT01NQU5EYGAKICAgU3BlY2lmeSB0aGUgY29tbWFuZC1saW5lKHMpIHRvIGV4ZWN1dGUgYXQgYnVpbGQgdGltZS4KICAgSWYgbW9yZSB0aGFuIG9uZSBgYENPTU1BTkRgYCBpcyBzcGVjaWZpZWQgdGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIG9yZGVyLApkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2FkZF9kZWZpbml0aW9ucy5yc3QgYi9IZWxwL2NvbW1hbmQvYWRkX2RlZmluaXRpb25zLnJzdAppbmRleCBkMDZiMDFjLi5mZTY5MTg4IDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvYWRkX2RlZmluaXRpb25zLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvYWRkX2RlZmluaXRpb25zLnJzdApAQCAtOCw5ICs4LDkgQEAKICAgYWRkX2RlZmluaXRpb25zKC1ERk9PIC1EQkFSIC4uLikKIAogQWRkcyBkZWZpbml0aW9ucyB0byB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lIGZvciB0YXJnZXRzIGluIHRoZSBjdXJyZW50Ci1kaXJlY3RvcnkgYW5kIGJlbG93ICh3aGV0aGVyIGFkZGVkIGJlZm9yZSBvciBhZnRlciB0aGlzIGNvbW1hbmQgaXMgaW52b2tlZCkuCi1UaGlzIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gYWRkIGFueSBmbGFncywgYnV0IGl0IGlzIGludGVuZGVkIHRvIGFkZAotcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLgorZGlyZWN0b3J5LCB3aGV0aGVyIGFkZGVkIGJlZm9yZSBvciBhZnRlciB0aGlzIGNvbW1hbmQgaXMgaW52b2tlZCwgYW5kIGZvcgordGhlIG9uZXMgaW4gc3ViLWRpcmVjdG9yaWVzIGFkZGVkIGFmdGVyLiBUaGlzIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gYWRkIGFueQorZmxhZ3MsIGJ1dCBpdCBpcyBpbnRlbmRlZCB0byBhZGQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLgogCiAuLiBub3RlOjoKIApkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2FkZF9leGVjdXRhYmxlLnJzdCBiL0hlbHAvY29tbWFuZC9hZGRfZXhlY3V0YWJsZS5yc3QKaW5kZXggMGE3ZDdlMS4uZTA3MzIyOCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2FkZF9leGVjdXRhYmxlLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvYWRkX2V4ZWN1dGFibGUucnN0CkBAIC0xLDggKzEsMTUgQEAKIGFkZF9leGVjdXRhYmxlCiAtLS0tLS0tLS0tLS0tLQogCisuLiBvbmx5OjogaHRtbAorCisgIC4uIGNvbnRlbnRzOjoKKwogQWRkIGFuIGV4ZWN1dGFibGUgdG8gdGhlIHByb2plY3QgdXNpbmcgdGhlIHNwZWNpZmllZCBzb3VyY2UgZmlsZXMuCiAKK05vcm1hbCBFeGVjdXRhYmxlcworXl5eXl5eXl5eXl5eXl5eXl5eCisKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCiAgIGFkZF9leGVjdXRhYmxlKDxuYW1lPiBbV0lOMzJdIFtNQUNPU1hfQlVORExFXQpAQCAtNDUsNyArNTIsOCBAQAogcHJlLXByb2Nlc3NlZCwgYW5kIHlvdSB3YW50IHRvIGhhdmUgdGhlIG9yaWdpbmFsIHNvdXJjZXMgcmVhY2hhYmxlIGZyb20KIHdpdGhpbiBJREUuCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbXBvcnRlZCBFeGVjdXRhYmxlcworXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKQEAgLTY1LDcgKzczLDggQEAKIHRoZSBtYWluIGV4ZWN1dGFibGUgZmlsZSBvbiBkaXNrLiAgU2VlIGRvY3VtZW50YXRpb24gb2YgdGhlIGBgSU1QT1JURURfKmBgCiBwcm9wZXJ0aWVzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWxpYXMgRXhlY3V0YWJsZXMKK15eXl5eXl5eXl5eXl5eXl5eCiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCkBAIC03NCw4ICs4MywxMyBAQAogQ3JlYXRlcyBhbiA6cmVmOmBBbGlhcyBUYXJnZXQgPEFsaWFzIFRhcmdldHM+YCwgc3VjaCB0aGF0IGBgPG5hbWU+YGAgY2FuCiBiZSB1c2VkIHRvIHJlZmVyIHRvIGBgPHRhcmdldD5gYCBpbiBzdWJzZXF1ZW50IGNvbW1hbmRzLiAgVGhlIGBgPG5hbWU+YGAKIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgZ2VuZXJhdGVkIGJ1aWxkc3lzdGVtIGFzIGEgbWFrZSB0YXJnZXQuICBUaGUKLWBgPHRhcmdldD5gYCBtYXkgbm90IGJlIGEgbm9uLWBgR0xPQkFMYGAKLTpyZWY6YEltcG9ydGVkIFRhcmdldCA8SW1wb3J0ZWQgVGFyZ2V0cz5gIG9yIGFuIGBgQUxJQVNgYC4KK2BgPHRhcmdldD5gYCBtYXkgbm90IGJlIGFuIGBgQUxJQVNgYC4KKworQW4gYGBBTElBU2BgIHRvIGEgbm9uLWBgR0xPQkFMYGAgOnJlZjpgSW1wb3J0ZWQgVGFyZ2V0IDxJbXBvcnRlZCBUYXJnZXRzPmAKK2hhcyBzY29wZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBhbGlhcyBpcyBjcmVhdGVkIGFuZCBiZWxvdy4KK1RoZSA6cHJvcF90Z3Q6YEFMSUFTX0dMT0JBTGAgdGFyZ2V0IHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZQorYWxpYXMgaXMgZ2xvYmFsIG9yIG5vdC4KKwogYGBBTElBU2BgIHRhcmdldHMgY2FuIGJlIHVzZWQgYXMgdGFyZ2V0cyB0byByZWFkIHByb3BlcnRpZXMKIGZyb20sIGV4ZWN1dGFibGVzIGZvciBjdXN0b20gY29tbWFuZHMgYW5kIGN1c3RvbSB0YXJnZXRzLiAgVGhleSBjYW4gYWxzbyBiZQogdGVzdGVkIGZvciBleGlzdGVuY2Ugd2l0aCB0aGUgcmVndWxhciA6Y29tbWFuZDpgaWYoVEFSR0VUKWAgc3ViY29tbWFuZC4KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9hZGRfbGlicmFyeS5yc3QgYi9IZWxwL2NvbW1hbmQvYWRkX2xpYnJhcnkucnN0CmluZGV4IDcyNzRlNDQuLjUyNTM2YmIgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9hZGRfbGlicmFyeS5yc3QKKysrIGIvSGVscC9jb21tYW5kL2FkZF9saWJyYXJ5LnJzdApAQCAtNjQsNDIgKzY0LDYgQEAKIHByZS1wcm9jZXNzZWQsIGFuZCB5b3Ugd2FudCB0byBoYXZlIHRoZSBvcmlnaW5hbCBzb3VyY2VzIHJlYWNoYWJsZSBmcm9tCiB3aXRoaW4gSURFLgogCi1JbXBvcnRlZCBMaWJyYXJpZXMKLV5eXl5eXl5eXl5eXl5eXl5eXgotCi0uLiBjb2RlLWJsb2NrOjogY21ha2UKLQotICBhZGRfbGlicmFyeSg8bmFtZT4gPFNIQVJFRHxTVEFUSUN8TU9EVUxFfE9CSkVDVHxVTktOT1dOPiBJTVBPUlRFRAotICAgICAgICAgICAgICBbR0xPQkFMXSkKLQotQW4gOnJlZjpgSU1QT1JURUQgbGlicmFyeSB0YXJnZXQgPEltcG9ydGVkIFRhcmdldHM+YCByZWZlcmVuY2VzIGEgbGlicmFyeQotZmlsZSBsb2NhdGVkIG91dHNpZGUgdGhlIHByb2plY3QuICBObyBydWxlcyBhcmUgZ2VuZXJhdGVkIHRvIGJ1aWxkIGl0LCBhbmQKLXRoZSA6cHJvcF90Z3Q6YElNUE9SVEVEYCB0YXJnZXQgcHJvcGVydHkgaXMgYGBUcnVlYGAuICBUaGUgdGFyZ2V0IG5hbWUgaGFzCi1zY29wZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIGNyZWF0ZWQgYW5kIGJlbG93LCBidXQgdGhlIGBgR0xPQkFMYGAKLW9wdGlvbiBleHRlbmRzIHZpc2liaWxpdHkuICBJdCBtYXkgYmUgcmVmZXJlbmNlZCBsaWtlIGFueSB0YXJnZXQgYnVpbHQKLXdpdGhpbiB0aGUgcHJvamVjdC4gIGBgSU1QT1JURURgYCBsaWJyYXJpZXMgYXJlIHVzZWZ1bCBmb3IgY29udmVuaWVudAotcmVmZXJlbmNlIGZyb20gY29tbWFuZHMgbGlrZSA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfbGlicmFyaWVzYC4gIERldGFpbHMKLWFib3V0IHRoZSBpbXBvcnRlZCBsaWJyYXJ5IGFyZSBzcGVjaWZpZWQgYnkgc2V0dGluZyBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzCi1iZWdpbiBpbiBgYElNUE9SVEVEX2BgIGFuZCBgYElOVEVSRkFDRV9gYC4KLQotVGhlIG1vc3QgaW1wb3J0YW50IHByb3BlcnRpZXMgYXJlOgotCi0qIDpwcm9wX3RndDpgSU1QT1JURURfTE9DQVRJT05gIChhbmQgaXRzIHBlci1jb25maWd1cmF0aW9uCi0gIHZhcmlhbnQgOnByb3BfdGd0OmBJTVBPUlRFRF9MT0NBVElPTl88Q09ORklHPmApIHdoaWNoIHNwZWNpZmllcyB0aGUKLSAgbG9jYXRpb24gb2YgdGhlIG1haW4gbGlicmFyeSBmaWxlIG9uIGRpc2suCi0qIDpwcm9wX3RndDpgSU1QT1JURURfT0JKRUNUU2AgKGFuZCA6cHJvcF90Z3Q6YElNUE9SVEVEX09CSkVDVFNfPENPTkZJRz5gKQotICBmb3Igb2JqZWN0IGxpYnJhcmllcywgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbnMgb2Ygb2JqZWN0IGZpbGVzIG9uIGRpc2suCi0qIDpwcm9wX3RndDpgUFVCTElDX0hFQURFUmAgZmlsZXMgdG8gYmUgaW5zdGFsbGVkIGR1cmluZyA6Y29tbWFuZDpgaW5zdGFsbGAgaW52b2NhdGlvbgotCi1TZWUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgYGBJTVBPUlRFRF8qYGAgYW5kIGBgSU5URVJGQUNFXypgYCBwcm9wZXJ0aWVzCi1mb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotQW4gYGBVTktOT1dOYGAgbGlicmFyeSB0eXBlIGlzIHR5cGljYWxseSBvbmx5IHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mCi06cmVmOmBGaW5kIE1vZHVsZXNgLiAgSXQgYWxsb3dzIHRoZSBwYXRoIHRvIGFuIGltcG9ydGVkIGxpYnJhcnkgKG9mdGVuIGZvdW5kCi11c2luZyB0aGUgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAgY29tbWFuZCkgdG8gYmUgdXNlZCB3aXRob3V0IGhhdmluZyB0byBrbm93Ci13aGF0IHR5cGUgb2YgbGlicmFyeSBpdCBpcy4gIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgb24gV2luZG93cyB3aGVyZSBhCi1zdGF0aWMgbGlicmFyeSBhbmQgYSBETEwncyBpbXBvcnQgbGlicmFyeSBib3RoIGhhdmUgdGhlIHNhbWUgZmlsZSBleHRlbnNpb24uCi0KIE9iamVjdCBMaWJyYXJpZXMKIF5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMTI5LDM4ICs5MywxOSBAQAogY29uc2lkZXIgYWRkaW5nIGF0IGxlYXN0IG9uZSByZWFsIHNvdXJjZSBmaWxlIHRvIGFueSB0YXJnZXQgdGhhdCByZWZlcmVuY2VzCiBgYCQ8VEFSR0VUX09CSkVDVFM6b2JqbGliPmBgLgogCi1BbGlhcyBMaWJyYXJpZXMKLV5eXl5eXl5eXl5eXl5eXgotCi0uLiBjb2RlLWJsb2NrOjogY21ha2UKLQotICBhZGRfbGlicmFyeSg8bmFtZT4gQUxJQVMgPHRhcmdldD4pCi0KLUNyZWF0ZXMgYW4gOnJlZjpgQWxpYXMgVGFyZ2V0IDxBbGlhcyBUYXJnZXRzPmAsIHN1Y2ggdGhhdCBgYDxuYW1lPmBgIGNhbiBiZQotdXNlZCB0byByZWZlciB0byBgYDx0YXJnZXQ+YGAgaW4gc3Vic2VxdWVudCBjb21tYW5kcy4gIFRoZSBgYDxuYW1lPmBgIGRvZXMKLW5vdCBhcHBlYXIgaW4gdGhlIGdlbmVyYXRlZCBidWlsZHN5c3RlbSBhcyBhIG1ha2UgdGFyZ2V0LiAgVGhlIGBgPHRhcmdldD5gYAotbWF5IG5vdCBiZSBhIG5vbi1gYEdMT0JBTGBgIDpyZWY6YEltcG9ydGVkIFRhcmdldCA8SW1wb3J0ZWQgVGFyZ2V0cz5gIG9yIGFuCi1gYEFMSUFTYGAuCi1gYEFMSUFTYGAgdGFyZ2V0cyBjYW4gYmUgdXNlZCBhcyBsaW5rYWJsZSB0YXJnZXRzIGFuZCBhcyB0YXJnZXRzIHRvCi1yZWFkIHByb3BlcnRpZXMgZnJvbS4gIFRoZXkgY2FuIGFsc28gYmUgdGVzdGVkIGZvciBleGlzdGVuY2Ugd2l0aCB0aGUKLXJlZ3VsYXIgOmNvbW1hbmQ6YGlmKFRBUkdFVClgIHN1YmNvbW1hbmQuICBUaGUgYGA8bmFtZT5gYCBtYXkgbm90IGJlIHVzZWQKLXRvIG1vZGlmeSBwcm9wZXJ0aWVzIG9mIGBgPHRhcmdldD5gYCwgdGhhdCBpcywgaXQgbWF5IG5vdCBiZSB1c2VkIGFzIHRoZQotb3BlcmFuZCBvZiA6Y29tbWFuZDpgc2V0X3Byb3BlcnR5YCwgOmNvbW1hbmQ6YHNldF90YXJnZXRfcHJvcGVydGllc2AsCi06Y29tbWFuZDpgdGFyZ2V0X2xpbmtfbGlicmFyaWVzYCBldGMuICBBbiBgYEFMSUFTYGAgdGFyZ2V0IG1heSBub3QgYmUKLWluc3RhbGxlZCBvciBleHBvcnRlZC4KLQogSW50ZXJmYWNlIExpYnJhcmllcwogXl5eXl5eXl5eXl5eXl5eXl5eXgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKIAotICBhZGRfbGlicmFyeSg8bmFtZT4gSU5URVJGQUNFIFtJTVBPUlRFRCBbR0xPQkFMXV0pCisgIGFkZF9saWJyYXJ5KDxuYW1lPiBJTlRFUkZBQ0UpCiAKLUNyZWF0ZXMgYW4gOnJlZjpgSW50ZXJmYWNlIExpYnJhcnkgPEludGVyZmFjZSBMaWJyYXJpZXM+YC4gIEFuIGBgSU5URVJGQUNFYGAKLWxpYnJhcnkgdGFyZ2V0IGRvZXMgbm90IGRpcmVjdGx5IGNyZWF0ZSBidWlsZCBvdXRwdXQsIHRob3VnaCBpdCBtYXkKLWhhdmUgcHJvcGVydGllcyBzZXQgb24gaXQgYW5kIGl0IG1heSBiZSBpbnN0YWxsZWQsIGV4cG9ydGVkIGFuZAotaW1wb3J0ZWQuIFR5cGljYWxseSB0aGUgYGBJTlRFUkZBQ0VfKmBgIHByb3BlcnRpZXMgYXJlIHBvcHVsYXRlZCBvbgotdGhlIGludGVyZmFjZSB0YXJnZXQgdXNpbmcgdGhlIGNvbW1hbmRzOgorQ3JlYXRlcyBhbiA6cmVmOmBJbnRlcmZhY2UgTGlicmFyeSA8SW50ZXJmYWNlIExpYnJhcmllcz5gLgorQW4gYGBJTlRFUkZBQ0VgYCBsaWJyYXJ5IHRhcmdldCBkb2VzIG5vdCBjb21waWxlIHNvdXJjZXMgYW5kIGRvZXMKK25vdCBwcm9kdWNlIGEgbGlicmFyeSBhcnRpZmFjdCBvbiBkaXNrLiAgSG93ZXZlciwgaXQgbWF5IGhhdmUKK3Byb3BlcnRpZXMgc2V0IG9uIGl0IGFuZCBpdCBtYXkgYmUgaW5zdGFsbGVkIGFuZCBleHBvcnRlZC4KK1R5cGljYWxseSwgYGBJTlRFUkZBQ0VfKmBgIHByb3BlcnRpZXMgYXJlIHBvcHVsYXRlZCBvbiBhbiBpbnRlcmZhY2UKK3RhcmdldCB1c2luZyB0aGUgY29tbWFuZHM6CiAKICogOmNvbW1hbmQ6YHNldF9wcm9wZXJ0eWAsCiAqIDpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXMoSU5URVJGQUNFKWAsCkBAIC0xNzMsMTAgKzExOCw4MSBAQAogYW5kIHRoZW4gaXQgaXMgdXNlZCBhcyBhbiBhcmd1bWVudCB0byA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfbGlicmFyaWVzYAogbGlrZSBhbnkgb3RoZXIgdGFyZ2V0LgogCi1BbiBgYElOVEVSRkFDRWBgIDpyZWY6YEltcG9ydGVkIFRhcmdldCA8SW1wb3J0ZWQgVGFyZ2V0cz5gIG1heSBhbHNvIGJlCi1jcmVhdGVkIHdpdGggdGhpcyBzaWduYXR1cmUuICBBbiBgYElNUE9SVEVEYGAgbGlicmFyeSB0YXJnZXQgcmVmZXJlbmNlcyBhCi1saWJyYXJ5IGRlZmluZWQgb3V0c2lkZSB0aGUgcHJvamVjdC4gIFRoZSB0YXJnZXQgbmFtZSBoYXMgc2NvcGUgaW4gdGhlCi1kaXJlY3RvcnkgaW4gd2hpY2ggaXQgaXMgY3JlYXRlZCBhbmQgYmVsb3csIGJ1dCB0aGUgYGBHTE9CQUxgYCBvcHRpb24KLWV4dGVuZHMgdmlzaWJpbGl0eS4gIEl0IG1heSBiZSByZWZlcmVuY2VkIGxpa2UgYW55IHRhcmdldCBidWlsdCB3aXRoaW4KLXRoZSBwcm9qZWN0LiAgYGBJTVBPUlRFRGBgIGxpYnJhcmllcyBhcmUgdXNlZnVsIGZvciBjb252ZW5pZW50IHJlZmVyZW5jZQotZnJvbSBjb21tYW5kcyBsaWtlIDpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXNgLgorQW4gaW50ZXJmYWNlIGxpYnJhcnkgaGFzIG5vIHNvdXJjZSBmaWxlcyBpdHNlbGYgYW5kIGlzIG5vdCBpbmNsdWRlZAorYXMgYSB0YXJnZXQgaW4gdGhlIGdlbmVyYXRlZCBidWlsZHN5c3RlbS4KKworSW1wb3J0ZWQgTGlicmFyaWVzCiteXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgYWRkX2xpYnJhcnkoPG5hbWU+IDx0eXBlPiBJTVBPUlRFRCBbR0xPQkFMXSkKKworQ3JlYXRlcyBhbiA6cmVmOmBJTVBPUlRFRCBsaWJyYXJ5IHRhcmdldCA8SW1wb3J0ZWQgVGFyZ2V0cz5gIGNhbGxlZCBgYDxuYW1lPmBgLgorTm8gcnVsZXMgYXJlIGdlbmVyYXRlZCB0byBidWlsZCBpdCwgYW5kIHRoZSA6cHJvcF90Z3Q6YElNUE9SVEVEYCB0YXJnZXQKK3Byb3BlcnR5IGlzIGBgVHJ1ZWBgLiAgVGhlIHRhcmdldCBuYW1lIGhhcyBzY29wZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoCitpdCBpcyBjcmVhdGVkIGFuZCBiZWxvdywgYnV0IHRoZSBgYEdMT0JBTGBgIG9wdGlvbiBleHRlbmRzIHZpc2liaWxpdHkuCitJdCBtYXkgYmUgcmVmZXJlbmNlZCBsaWtlIGFueSB0YXJnZXQgYnVpbHQgd2l0aGluIHRoZSBwcm9qZWN0LgorYGBJTVBPUlRFRGBgIGxpYnJhcmllcyBhcmUgdXNlZnVsIGZvciBjb252ZW5pZW50IHJlZmVyZW5jZSBmcm9tIGNvbW1hbmRzCitsaWtlIDpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXNgLiAgRGV0YWlscyBhYm91dCB0aGUgaW1wb3J0ZWQgbGlicmFyeQorYXJlIHNwZWNpZmllZCBieSBzZXR0aW5nIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgYmVnaW4gaW4gYGBJTVBPUlRFRF9gYCBhbmQKK2BgSU5URVJGQUNFX2BgLgorCitUaGUgYGA8dHlwZT5gYCBtdXN0IGJlIG9uZSBvZjoKKworYGBTVEFUSUNgYCwgYGBTSEFSRURgYCwgYGBNT0RVTEVgYCwgYGBVTktOT1dOYGAKKyAgUmVmZXJlbmNlcyBhIGxpYnJhcnkgZmlsZSBsb2NhdGVkIG91dHNpZGUgdGhlIHByb2plY3QuICBUaGUKKyAgOnByb3BfdGd0OmBJTVBPUlRFRF9MT0NBVElPTmAgdGFyZ2V0IHByb3BlcnR5IChvciBpdHMgcGVyLWNvbmZpZ3VyYXRpb24KKyAgdmFyaWFudCA6cHJvcF90Z3Q6YElNUE9SVEVEX0xPQ0FUSU9OXzxDT05GSUc+YCkgc3BlY2lmaWVzIHRoZQorICBsb2NhdGlvbiBvZiB0aGUgbWFpbiBsaWJyYXJ5IGZpbGUgb24gZGlzay4gIEluIHRoZSBjYXNlIG9mIGEgYGBTSEFSRURgYAorICBsaWJyYXJ5IG9uIFdpbmRvd3MsIHRoZSA6cHJvcF90Z3Q6YElNUE9SVEVEX0lNUExJQmAgdGFyZ2V0IHByb3BlcnR5CisgIChvciBpdHMgcGVyLWNvbmZpZ3VyYXRpb24gdmFyaWFudCA6cHJvcF90Z3Q6YElNUE9SVEVEX0lNUExJQl88Q09ORklHPmApCisgIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIERMTCBpbXBvcnQgbGlicmFyeSBmaWxlIChgYC5saWJgYCBvcgorICBgYC5kbGwuYWBgKSBvbiBkaXNrLCBhbmQgdGhlIGBgSU1QT1JURURfTE9DQVRJT05gYCBpcyB0aGUgbG9jYXRpb24gb2YKKyAgdGhlIGBgLmRsbGBgIHJ1bnRpbWUgbGlicmFyeSAoYW5kIGlzIG9wdGlvbmFsKS4KKyAgQWRkaXRpb25hbCB1c2FnZSByZXF1aXJlbWVudHMgbWF5IGJlIHNwZWNpZmllZCBpbiBgYElOVEVSRkFDRV8qYGAgcHJvcGVydGllcy4KKworICBBbiBgYFVOS05PV05gYCBsaWJyYXJ5IHR5cGUgaXMgdHlwaWNhbGx5IG9ubHkgdXNlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YKKyAgOnJlZjpgRmluZCBNb2R1bGVzYC4gIEl0IGFsbG93cyB0aGUgcGF0aCB0byBhbiBpbXBvcnRlZCBsaWJyYXJ5IChvZnRlbiBmb3VuZAorICB1c2luZyB0aGUgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAgY29tbWFuZCkgdG8gYmUgdXNlZCB3aXRob3V0IGhhdmluZyB0byBrbm93CisgIHdoYXQgdHlwZSBvZiBsaWJyYXJ5IGl0IGlzLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBvbiBXaW5kb3dzIHdoZXJlIGEKKyAgc3RhdGljIGxpYnJhcnkgYW5kIGEgRExMJ3MgaW1wb3J0IGxpYnJhcnkgYm90aCBoYXZlIHRoZSBzYW1lIGZpbGUgZXh0ZW5zaW9uLgorCitgYE9CSkVDVGBgCisgIFJlZmVyZW5jZXMgYSBzZXQgb2Ygb2JqZWN0IGZpbGVzIGxvY2F0ZWQgb3V0c2lkZSB0aGUgcHJvamVjdC4KKyAgVGhlIDpwcm9wX3RndDpgSU1QT1JURURfT0JKRUNUU2AgdGFyZ2V0IHByb3BlcnR5IChvciBpdHMgcGVyLWNvbmZpZ3VyYXRpb24KKyAgdmFyaWFudCA6cHJvcF90Z3Q6YElNUE9SVEVEX09CSkVDVFNfPENPTkZJRz5gKSBzcGVjaWZpZXMgdGhlIGxvY2F0aW9ucyBvZgorICBvYmplY3QgZmlsZXMgb24gZGlzay4KKyAgQWRkaXRpb25hbCB1c2FnZSByZXF1aXJlbWVudHMgbWF5IGJlIHNwZWNpZmllZCBpbiBgYElOVEVSRkFDRV8qYGAgcHJvcGVydGllcy4KKworYGBJTlRFUkZBQ0VgYAorICBEb2VzIG5vdCByZWZlcmVuY2UgYW55IGxpYnJhcnkgb3Igb2JqZWN0IGZpbGVzIG9uIGRpc2ssIGJ1dCBtYXkKKyAgc3BlY2lmeSB1c2FnZSByZXF1aXJlbWVudHMgaW4gYGBJTlRFUkZBQ0VfKmBgIHByb3BlcnRpZXMuCisKK1NlZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBgYElNUE9SVEVEXypgYCBhbmQgYGBJTlRFUkZBQ0VfKmBgIHByb3BlcnRpZXMKK2ZvciBtb3JlIGluZm9ybWF0aW9uLgorCitBbGlhcyBMaWJyYXJpZXMKK15eXl5eXl5eXl5eXl5eXgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBhZGRfbGlicmFyeSg8bmFtZT4gQUxJQVMgPHRhcmdldD4pCisKK0NyZWF0ZXMgYW4gOnJlZjpgQWxpYXMgVGFyZ2V0IDxBbGlhcyBUYXJnZXRzPmAsIHN1Y2ggdGhhdCBgYDxuYW1lPmBgIGNhbiBiZQordXNlZCB0byByZWZlciB0byBgYDx0YXJnZXQ+YGAgaW4gc3Vic2VxdWVudCBjb21tYW5kcy4gIFRoZSBgYDxuYW1lPmBgIGRvZXMKK25vdCBhcHBlYXIgaW4gdGhlIGdlbmVyYXRlZCBidWlsZHN5c3RlbSBhcyBhIG1ha2UgdGFyZ2V0LiAgVGhlIGBgPHRhcmdldD5gYAorbWF5IG5vdCBiZSBhbiBgYEFMSUFTYGAuCisKK0FuIGBgQUxJQVNgYCB0byBhIG5vbi1gYEdMT0JBTGBgIDpyZWY6YEltcG9ydGVkIFRhcmdldCA8SW1wb3J0ZWQgVGFyZ2V0cz5gCitoYXMgc2NvcGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgYWxpYXMgaXMgY3JlYXRlZCBhbmQgYmVsb3cuCitUaGUgOnByb3BfdGd0OmBBTElBU19HTE9CQUxgIHRhcmdldCBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBjaGVjayBpZiB0aGUKK2FsaWFzIGlzIGdsb2JhbCBvciBub3QuCisKK2BgQUxJQVNgYCB0YXJnZXRzIGNhbiBiZSB1c2VkIGFzIGxpbmthYmxlIHRhcmdldHMgYW5kIGFzIHRhcmdldHMgdG8KK3JlYWQgcHJvcGVydGllcyBmcm9tLiAgVGhleSBjYW4gYWxzbyBiZSB0ZXN0ZWQgZm9yIGV4aXN0ZW5jZSB3aXRoIHRoZQorcmVndWxhciA6Y29tbWFuZDpgaWYoVEFSR0VUKWAgc3ViY29tbWFuZC4gIFRoZSBgYDxuYW1lPmBgIG1heSBub3QgYmUgdXNlZAordG8gbW9kaWZ5IHByb3BlcnRpZXMgb2YgYGA8dGFyZ2V0PmBgLCB0aGF0IGlzLCBpdCBtYXkgbm90IGJlIHVzZWQgYXMgdGhlCitvcGVyYW5kIG9mIDpjb21tYW5kOmBzZXRfcHJvcGVydHlgLCA6Y29tbWFuZDpgc2V0X3RhcmdldF9wcm9wZXJ0aWVzYCwKKzpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXNgIGV0Yy4gIEFuIGBgQUxJQVNgYCB0YXJnZXQgbWF5IG5vdCBiZQoraW5zdGFsbGVkIG9yIGV4cG9ydGVkLgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2FkZF9saW5rX29wdGlvbnMucnN0IGIvSGVscC9jb21tYW5kL2FkZF9saW5rX29wdGlvbnMucnN0CmluZGV4IGE4MzAwNWIuLmYwM2U3YzAgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9hZGRfbGlua19vcHRpb25zLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvYWRkX2xpbmtfb3B0aW9ucy5yc3QKQEAgLTEsNiArMSw4IEBACiBhZGRfbGlua19vcHRpb25zCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogQWRkIG9wdGlvbnMgdG8gdGhlIGxpbmsgc3RlcCBmb3IgZXhlY3V0YWJsZSwgc2hhcmVkIGxpYnJhcnkgb3IgbW9kdWxlCiBsaWJyYXJ5IHRhcmdldHMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBiZWxvdyB0aGF0IGFyZSBhZGRlZCBhZnRlcgogdGhpcyBjb21tYW5kIGlzIGludm9rZWQuCkBAIC0yNiw2ICsyOCw4IEBACiBtYW51YWwgZm9yIGF2YWlsYWJsZSBleHByZXNzaW9ucy4gIFNlZSB0aGUgOm1hbnVhbDpgY21ha2UtYnVpbGRzeXN0ZW0oNylgCiBtYW51YWwgZm9yIG1vcmUgb24gZGVmaW5pbmcgYnVpbGRzeXN0ZW0gcHJvcGVydGllcy4KIAorLi4gaW5jbHVkZTo6IERFVklDRV9MSU5LX09QVElPTlMudHh0CisKIC4uIGluY2x1ZGU6OiBPUFRJT05TX1NIRUxMLnR4dAogCiAuLiBpbmNsdWRlOjogTElOS19PUFRJT05TX0xJTktFUi50eHQKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9jbWFrZV9sYW5ndWFnZS5yc3QgYi9IZWxwL2NvbW1hbmQvY21ha2VfbGFuZ3VhZ2UucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOThkNzkKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2NvbW1hbmQvY21ha2VfbGFuZ3VhZ2UucnN0CkBAIC0wLDAgKzEsMTAxIEBACitjbWFrZV9sYW5ndWFnZQorLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitDYWxsIG1ldGEtb3BlcmF0aW9ucyBvbiBDTWFrZSBjb21tYW5kcy4KKworU3lub3BzaXMKK15eXl5eXl5eCisKKy4uIHBhcnNlZC1saXRlcmFsOjoKKworICBjbWFrZV9sYW5ndWFnZShgQ0FMTGBfIDxjb21tYW5kPiBbPGFyZ3M+Li4uXSkKKyAgY21ha2VfbGFuZ3VhZ2UoYEVWQUxgXyBDT0RFIDxjb2RlPi4uLikKKworSW50cm9kdWN0aW9uCiteXl5eXl5eXl5eXl4KKworVGhpcyBjb21tYW5kIHdpbGwgY2FsbCBtZXRhLW9wZXJhdGlvbnMgb24gYnVpbHQtaW4gQ01ha2UgY29tbWFuZHMgb3IKK3Rob3NlIGNyZWF0ZWQgdmlhIHRoZSA6Y29tbWFuZDpgbWFjcm9gIG9yIDpjb21tYW5kOmBmdW5jdGlvbmAgY29tbWFuZHMuCisKK2BgY21ha2VfbGFuZ3VhZ2VgYCBkb2VzIG5vdCBpbnRyb2R1Y2UgYSBuZXcgdmFyaWFibGUgb3IgcG9saWN5IHNjb3BlLgorCitDYWxsaW5nIENvbW1hbmRzCiteXl5eXl5eXl5eXl5eXl5eCisKKy4uIF9DQUxMOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBjbWFrZV9sYW5ndWFnZShDQUxMIDxjb21tYW5kPiBbPGFyZ3M+Li4uXSkKKworQ2FsbHMgdGhlIG5hbWVkIGBgPGNvbW1hbmQ+YGAgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzIChpZiBhbnkpLgorRm9yIGV4YW1wbGUsIHRoZSBjb2RlOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBzZXQobWVzc2FnZV9jb21tYW5kICJtZXNzYWdlIikKKyAgY21ha2VfbGFuZ3VhZ2UoQ0FMTCAke21lc3NhZ2VfY29tbWFuZH0gU1RBVFVTICJIZWxsbyBXb3JsZCEiKQorCitpcyBlcXVpdmFsZW50IHRvCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIG1lc3NhZ2UoU1RBVFVTICJIZWxsbyBXb3JsZCEiKQorCisuLiBub3RlOjoKKyAgVG8gZW5zdXJlIGNvbnNpc3RlbmN5IG9mIHRoZSBjb2RlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBub3QgYWxsb3dlZDoKKworICAqIGBgaWZgYCAvIGBgZWxzZWlmYGAgLyBgYGVsc2VgYCAvIGBgZW5kaWZgYAorICAqIGBgd2hpbGVgYCAvIGBgZW5kd2hpbGVgYAorICAqIGBgZm9yZWFjaGBgIC8gYGBlbmRmb3JlYWNoYGAKKyAgKiBgYGZ1bmN0aW9uYGAgLyBgYGVuZGZ1bmN0aW9uYGAKKyAgKiBgYG1hY3JvYGAgLyBgYGVuZG1hY3JvYGAKKworRXZhbHVhdGluZyBDb2RlCiteXl5eXl5eXl5eXl5eXl4KKworLi4gX0VWQUw6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGNtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSA8Y29kZT4uLi4pCisKK0V2YWx1YXRlcyB0aGUgYGA8Y29kZT4uLi5gYCBhcyBDTWFrZSBjb2RlLgorCitGb3IgZXhhbXBsZSwgdGhlIGNvZGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldChBIFRSVUUpCisgIHNldChCIFRSVUUpCisgIHNldChDIFRSVUUpCisgIHNldChjb25kaXRpb24gIihBIEFORCBCKSBPUiBDIikKKworICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUgIgorICAgIGlmICgke2NvbmRpdGlvbn0pCisgICAgICBtZXNzYWdlKFNUQVRVUyBUUlVFKQorICAgIGVsc2UoKQorICAgICAgbWVzc2FnZShTVEFUVVMgRkFMU0UpCisgICAgZW5kaWYoKSIKKyAgKQorCitpcyBlcXVpdmFsZW50IHRvCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldChBIFRSVUUpCisgIHNldChCIFRSVUUpCisgIHNldChDIFRSVUUpCisgIHNldChjb25kaXRpb24gIihBIEFORCBCKSBPUiBDIikKKworICBmaWxlKFdSSVRFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9ldmFsLmNtYWtlICIKKyAgICBpZiAoJHtjb25kaXRpb259KQorICAgICAgbWVzc2FnZShTVEFUVVMgVFJVRSkKKyAgICBlbHNlKCkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTIEZBTFNFKQorICAgIGVuZGlmKCkiCisgICkKKworICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9ldmFsLmNtYWtlKQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2NtYWtlX3BhcnNlX2FyZ3VtZW50cy5yc3QgYi9IZWxwL2NvbW1hbmQvY21ha2VfcGFyc2VfYXJndW1lbnRzLnJzdAppbmRleCBmY2QzNmQwLi44ODAzZWM4IDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvY21ha2VfcGFyc2VfYXJndW1lbnRzLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvY21ha2VfcGFyc2VfYXJndW1lbnRzLnJzdApAQCAtMSw2ICsxLDggQEAKIGNtYWtlX3BhcnNlX2FyZ3VtZW50cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorCiBQYXJzZSBmdW5jdGlvbiBvciBtYWNybyBhcmd1bWVudHMuCiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2NvbmZpZ3VyZV9maWxlLnJzdCBiL0hlbHAvY29tbWFuZC9jb25maWd1cmVfZmlsZS5yc3QKaW5kZXggMjllODViZC4uNDZkMWEwNSAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2NvbmZpZ3VyZV9maWxlLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvY29uZmlndXJlX2ZpbGUucnN0CkBAIC03LDYgKzcsNyBAQAogCiAgIGNvbmZpZ3VyZV9maWxlKDxpbnB1dD4gPG91dHB1dD4KICAgICAgICAgICAgICAgICAgW0NPUFlPTkxZXSBbRVNDQVBFX1FVT1RFU10gW0BPTkxZXQorICAgICAgICAgICAgICAgICBbTk9fU09VUkNFX1BFUk1JU1NJT05TXQogICAgICAgICAgICAgICAgICBbTkVXTElORV9TVFlMRSBbVU5JWHxET1N8V0lOMzJ8TEZ8Q1JMRl0gXSkKIAogQ29waWVzIGFuIGBgPGlucHV0PmBgIGZpbGUgdG8gYW4gYGA8b3V0cHV0PmBgIGZpbGUgYW5kIHN1YnN0aXR1dGVzCkBAIC04Miw2ICs4MywxMSBAQAogICBSZXN0cmljdCB2YXJpYWJsZSByZXBsYWNlbWVudCB0byByZWZlcmVuY2VzIG9mIHRoZSBmb3JtIGBgQFZBUkBgYC4KICAgVGhpcyBpcyB1c2VmdWwgZm9yIGNvbmZpZ3VyaW5nIHNjcmlwdHMgdGhhdCB1c2UgYGAke1ZBUn1gYCBzeW50YXguCiAKKyBgYE5PX1NPVVJDRV9QRVJNSVNTSU9OU2BgCisgIERvZXMgbm90IHRyYW5zZmVyIHRoZSBmaWxlIHBlcm1pc3Npb25zIG9mIHRoZSBvcmlnaW5hbCBmaWxlIHRvIHRoZSBjb3B5LgorICBUaGUgY29waWVkIGZpbGUgcGVybWlzc2lvbnMgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgNjQ0IHZhbHVlCisgICgtcnctci0tci0tKS4KKwogYGBORVdMSU5FX1NUWUxFIDxzdHlsZT5gYAogICBTcGVjaWZ5IHRoZSBuZXdsaW5lIHN0eWxlIGZvciB0aGUgb3V0cHV0IGZpbGUuICBTcGVjaWZ5CiAgIGBgVU5JWGBgIG9yIGBgTEZgYCBmb3IgYGBcbmBgIG5ld2xpbmVzLCBvciBzcGVjaWZ5CmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvY29udGludWUucnN0IGIvSGVscC9jb21tYW5kL2NvbnRpbnVlLnJzdAppbmRleCAzMWM3MDg5Li5mNjI4MDJlIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvY29udGludWUucnN0CisrKyBiL0hlbHAvY29tbWFuZC9jb250aW51ZS5yc3QKQEAgLTEsNiArMSw4IEBACiBjb250aW51ZQogLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIENvbnRpbnVlIHRvIHRoZSB0b3Agb2YgZW5jbG9zaW5nIGZvcmVhY2ggb3Igd2hpbGUgbG9vcC4KIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvY3Rlc3RfdGVzdC5yc3QgYi9IZWxwL2NvbW1hbmQvY3Rlc3RfdGVzdC5yc3QKaW5kZXggN2EzMzkzYi4uMzU4OTI5NiAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2N0ZXN0X3Rlc3QucnN0CisrKyBiL0hlbHAvY29tbWFuZC9jdGVzdF90ZXN0LnJzdApAQCAtMjAsOSArMjAsMTEgQEAKICAgICAgICAgICAgICBbUkVTT1VSQ0VfU1BFQ19GSUxFIDxmaWxlPl0KICAgICAgICAgICAgICBbVEVTVF9MT0FEIDx0aHJlc2hvbGQ+XQogICAgICAgICAgICAgIFtTQ0hFRFVMRV9SQU5ET00gPE9OfE9GRj5dCisgICAgICAgICAgICAgW1NUT1BfT05fRkFJTFVSRV0KICAgICAgICAgICAgICBbU1RPUF9USU1FIDx0aW1lLW9mLWRheT5dCiAgICAgICAgICAgICAgW1JFVFVSTl9WQUxVRSA8cmVzdWx0LXZhcj5dCiAgICAgICAgICAgICAgW0NBUFRVUkVfQ01BS0VfRVJST1IgPHJlc3VsdC12YXI+XQorICAgICAgICAgICAgIFtSRVBFQVQgPG1vZGU+OjxuPl0KICAgICAgICAgICAgICBbUVVJRVRdCiAgICAgICAgICAgICAgKQogCkBAIC05NSwxMCArOTcsMzIgQEAKICAgYW5kIHRoZW4gdGhlIGBgLS10ZXN0LWxvYWRgYCBjb21tYW5kLWxpbmUgYXJndW1lbnQgdG8gOm1hbnVhbDpgY3Rlc3QoMSlgLgogICBTZWUgYWxzbyB0aGUgYGBUZXN0TG9hZGBgIHNldHRpbmcgaW4gdGhlIDpyZWY6YENUZXN0IFRlc3QgU3RlcGAuCiAKK2BgUkVQRUFUIDxtb2RlPjo8bj5gYAorICBSdW4gdGVzdHMgcmVwZWF0ZWRseSBiYXNlZCBvbiB0aGUgZ2l2ZW4gYGA8bW9kZT5gYCB1cCB0byBgYDxuPmBgIHRpbWVzLgorICBUaGUgbW9kZXMgYXJlOgorCisgIGBgVU5USUxfRkFJTGBgCisgICAgUmVxdWlyZSBlYWNoIHRlc3QgdG8gcnVuIGBgPG4+YGAgdGltZXMgd2l0aG91dCBmYWlsaW5nIGluIG9yZGVyIHRvIHBhc3MuCisgICAgVGhpcyBpcyB1c2VmdWwgaW4gZmluZGluZyBzcG9yYWRpYyBmYWlsdXJlcyBpbiB0ZXN0IGNhc2VzLgorCisgIGBgVU5USUxfUEFTU2BgCisgICAgQWxsb3cgZWFjaCB0ZXN0IHRvIHJ1biB1cCB0byBgYDxuPmBgIHRpbWVzIGluIG9yZGVyIHRvIHBhc3MuCisgICAgUmVwZWF0cyB0ZXN0cyBpZiB0aGV5IGZhaWwgZm9yIGFueSByZWFzb24uCisgICAgVGhpcyBpcyB1c2VmdWwgaW4gdG9sZXJhdGluZyBzcG9yYWRpYyBmYWlsdXJlcyBpbiB0ZXN0IGNhc2VzLgorCisgIGBgQUZURVJfVElNRU9VVGBgCisgICAgQWxsb3cgZWFjaCB0ZXN0IHRvIHJ1biB1cCB0byBgYDxuPmBgIHRpbWVzIGluIG9yZGVyIHRvIHBhc3MuCisgICAgUmVwZWF0cyB0ZXN0cyBvbmx5IGlmIHRoZXkgdGltZW91dC4KKyAgICBUaGlzIGlzIHVzZWZ1bCBpbiB0b2xlcmF0aW5nIHNwb3JhZGljIHRpbWVvdXRzIGluIHRlc3QgY2FzZXMKKyAgICBvbiBidXN5IG1hY2hpbmVzLgorCiBgYFNDSEVEVUxFX1JBTkRPTSA8T058T0ZGPmBgCiAgIExhdW5jaCB0ZXN0cyBpbiBhIHJhbmRvbSBvcmRlci4gIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IgZGV0ZWN0aW5nCiAgIGltcGxpY2l0IHRlc3QgZGVwZW5kZW5jaWVzLgogCitgYFNUT1BfT05fRkFJTFVSRWBgCisgIFN0b3AgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgdGVzdHMgb25jZSBvbmUgaGFzIGZhaWxlZC4KKwogYGBTVE9QX1RJTUUgPHRpbWUtb2YtZGF5PmBgCiAgIFNwZWNpZnkgYSB0aW1lIG9mIGRheSBhdCB3aGljaCB0aGUgdGVzdHMgc2hvdWxkIGFsbCBzdG9wIHJ1bm5pbmcuCiAKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9leGVjdXRlX3Byb2Nlc3MucnN0IGIvSGVscC9jb21tYW5kL2V4ZWN1dGVfcHJvY2Vzcy5yc3QKaW5kZXggMTRmODc5ZC4uYjMyMDI1ZiAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2V4ZWN1dGVfcHJvY2Vzcy5yc3QKKysrIGIvSGVscC9jb21tYW5kL2V4ZWN1dGVfcHJvY2Vzcy5yc3QKQEAgLTIxLDcgKzIxLDkgQEAKICAgICAgICAgICAgICAgICAgIFtDT01NQU5EX0VDSE8gPHdoZXJlPl0KICAgICAgICAgICAgICAgICAgIFtPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRV0KICAgICAgICAgICAgICAgICAgIFtFUlJPUl9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFXQotICAgICAgICAgICAgICAgICAgW0VOQ09ESU5HIDxuYW1lPl0pCisgICAgICAgICAgICAgICAgICBbRU5DT0RJTkcgPG5hbWU+XQorICAgICAgICAgICAgICAgICAgW0VDSE9fT1VUUFVUX1ZBUklBQkxFXQorICAgICAgICAgICAgICAgICAgW0VDSE9fRVJST1JfVkFSSUFCTEVdKQogCiBSdW5zIHRoZSBnaXZlbiBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBjb21tYW5kcy4KIApAQCAtMTA1LDYgKzEwNywxNSBAQAogICAgZm9yIHRoaXMgZW5jb2RpbmcuIEluIENNYWtlIDMuMTEuMCwgYGBVVEYtOGBgIHdhcyBhZGRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aAogICAgdGhlIGBVVEYtOCBSRkMgPGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzNjI5PmBfIG5hbWluZyBjb252ZW50aW9uLgogCitgYEVDSE9fT1VUUFVUX1ZBUklBQkxFYGAsIGBgRUNIT19FUlJPUl9WQVJJQUJMRWBgCisgIFRoZSBzdGFuZGFyZCBvdXRwdXQgb3Igc3RhbmRhcmQgZXJyb3Igd2lsbCBub3QgYmUgZXhjbHVzaXZlbHkgcmVkaXJlY3RlZCB0bworICB0aGUgY29uZmlndXJlZCB2YXJpYWJsZXMuCisKKyAgVGhlIG91dHB1dCB3aWxsIGJlIGR1cGxpY2F0ZWQsIGl0IHdpbGwgYmUgc2VudCBpbnRvIHRoZSBjb25maWd1cmVkIHZhcmlhYmxlcworICBhbmQgYWxzbyBvbiBzdGFuZGFyZCBvdXRwdXQgb3Igc3RhbmRhcmQgZXJyb3IuCisKKyAgVGhpcyBpcyBhbmFsb2dvdXMgdG8gdGhlIGBgdGVlYGAgVW5peCBjb21tYW5kLgorCiBJZiBtb3JlIHRoYW4gb25lIGBgT1VUUFVUXypgYCBvciBgYEVSUk9SXypgYCBvcHRpb24gaXMgZ2l2ZW4gZm9yIHRoZQogc2FtZSBwaXBlIHRoZSBwcmVjZWRlbmNlIGlzIG5vdCBzcGVjaWZpZWQuCiBJZiBubyBgYE9VVFBVVF8qYGAgb3IgYGBFUlJPUl8qYGAgb3B0aW9ucyBhcmUgZ2l2ZW4gdGhlIG91dHB1dCB3aWxsCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZmlsZS5yc3QgYi9IZWxwL2NvbW1hbmQvZmlsZS5yc3QKaW5kZXggYjE4NjE3Ny4uMmNmOTM4YiAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2ZpbGUucnN0CisrKyBiL0hlbHAvY29tbWFuZC9maWxlLnJzdApAQCAtMTksNiArMTksNyBAQAogICAgIGZpbGUoe2BXUklURWBfIHwgYEFQUEVORGBffSA8ZmlsZW5hbWU+IDxjb250ZW50Pi4uLikKICAgICBmaWxlKHtgVE9VQ0hgXyB8IGBUT1VDSF9OT0NSRUFURWBffSBbPGZpbGU+Li4uXSkKICAgICBmaWxlKGBHRU5FUkFURWBfIE9VVFBVVCA8b3V0cHV0LWZpbGU+IFsuLi5dKQorICAgIGZpbGUoYENPTkZJR1VSRWBfIE9VVFBVVCA8b3V0cHV0LWZpbGU+IENPTlRFTlQgPGNvbnRlbnQ+IFsuLi5dKQogCiAgIGBGaWxlc3lzdGVtYF8KICAgICBmaWxlKHtgR0xPQmBfIHwgYEdMT0JfUkVDVVJTRWBffSA8b3V0LXZhcj4gWy4uLl0gWzxnbG9iYmluZy1leHByPi4uLl0pCkBAIC00MSw2ICs0MiwxMCBAQAogICBgTG9ja2luZ2BfCiAgICAgZmlsZShgTE9DS2BfIDxwYXRoPiBbLi4uXSkKIAorICBgQXJjaGl2aW5nYF8KKyAgICBmaWxlKGBBUkNISVZFX0NSRUFURWBfIE9VVFBVVCA8YXJjaGl2ZT4gUEFUSFMgPHBhdGhzPi4uLiBbLi4uXSkKKyAgICBmaWxlKGBBUkNISVZFX0VYVFJBQ1RgXyBJTlBVVCA8YXJjaGl2ZT4gWy4uLl0pCisKIFJlYWRpbmcKIF5eXl5eXl4KIApAQCAtNTQsNyArNTksOSBAQAogUmVhZCBjb250ZW50IGZyb20gYSBmaWxlIGNhbGxlZCBgYDxmaWxlbmFtZT5gYCBhbmQgc3RvcmUgaXQgaW4gYQogYGA8dmFyaWFibGU+YGAuICBPcHRpb25hbGx5IHN0YXJ0IGZyb20gdGhlIGdpdmVuIGBgPG9mZnNldD5gYCBhbmQKIHJlYWQgYXQgbW9zdCBgYDxtYXgtaW4+YGAgYnl0ZXMuICBUaGUgYGBIRVhgYCBvcHRpb24gY2F1c2VzIGRhdGEgdG8KLWJlIGNvbnZlcnRlZCB0byBhIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uICh1c2VmdWwgZm9yIGJpbmFyeSBkYXRhKS4KK2JlIGNvbnZlcnRlZCB0byBhIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uICh1c2VmdWwgZm9yIGJpbmFyeSBkYXRhKS4gSWYgdGhlCitgYEhFWGBgIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGxldHRlcnMgaW4gdGhlIG91dHB1dCAoYGBhYGAgdGhyb3VnaCBgYGZgYCkgYXJlIGluCitsb3dlcmNhc2UuCiAKIC4uIF9TVFJJTkdTOgogCkBAIC0yNDMsOCArMjUwLDggQEAKICAgTGlzdCBvZiBwb3N0LWV4Y2x1ZGUgcmVnZXhlcyB0aHJvdWdoIHdoaWNoIHRvIGZpbHRlciB0aGUgbmFtZXMgb2YgcmVzb2x2ZWQKICAgZGVwZW5kZW5jaWVzLgogCi1UaGVzZSBhcmd1bWVudHMgY2FuIGJlIHVzZWQgdG8gYmxhY2tsaXN0IHVud2FudGVkIHN5c3RlbSBsaWJyYXJpZXMgd2hlbgotcmVzb2x2aW5nIHRoZSBkZXBlbmRlbmNpZXMsIG9yIHRvIHdoaXRlbGlzdCBsaWJyYXJpZXMgZnJvbSBhIHNwZWNpZmljCitUaGVzZSBhcmd1bWVudHMgY2FuIGJlIHVzZWQgdG8gZXhjbHVkZSB1bndhbnRlZCBzeXN0ZW0gbGlicmFyaWVzIHdoZW4KK3Jlc29sdmluZyB0aGUgZGVwZW5kZW5jaWVzLCBvciB0byBpbmNsdWRlIGxpYnJhcmllcyBmcm9tIGEgc3BlY2lmaWMKIGRpcmVjdG9yeS4gVGhlIGZpbHRlcmluZyB3b3JrcyBhcyBmb2xsb3dzOgogCiAxLiBJZiB0aGUgbm90LXlldC1yZXNvbHZlZCBkZXBlbmRlbmN5IG1hdGNoZXMgYW55IG9mIHRoZQpAQCAtMzk1LDggKzQwMiw4IEBACiAgIERldGVybWluZXMgdGhlIHBhdGggdG8gdGhlIHRvb2wgdG8gdXNlIGZvciBkZXBlbmRlbmN5IHJlc29sdXRpb24uIFRoaXMgaXMgdGhlCiAgIGFjdHVhbCBwYXRoIHRvIGBgb2JqZHVtcGBgLCBgYGR1bXBiaW5gYCwgb3IgYGBvdG9vbGBgLgogCi0gIElmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJ5IHN5c3RlbQotICBpbnRyb3NwZWN0aW9uLgorICBJZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mCisgIGBgQ01BS0VfT0JKRFVNUGBgIGlmIHNldCwgZWxzZSBieSBzeXN0ZW0gaW50cm9zcGVjdGlvbi4KIAogV3JpdGluZwogXl5eXl5eXgpAQCAtNDgyLDYgKzQ4OSw0NCBAQAogYGBmaWxlKEdFTkVSQVRFKWBgIGNvbW1hbmQgcmV0dXJucywgaXQgaXMgd3JpdHRlbiBvbmx5IGFmdGVyIHByb2Nlc3NpbmcgYWxsCiBvZiBhIHByb2plY3QncyBgYENNYWtlTGlzdHMudHh0YGAgZmlsZXMuCiAKKy4uIF9DT05GSUdVUkU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGZpbGUoQ09ORklHVVJFIE9VVFBVVCBvdXRwdXQtZmlsZQorICAgICAgIENPTlRFTlQgY29udGVudAorICAgICAgIFtFU0NBUEVfUVVPVEVTXSBbQE9OTFldCisgICAgICAgW05FV0xJTkVfU1RZTEUgW1VOSVh8RE9TfFdJTjMyfExGfENSTEZdIF0pCisKK0dlbmVyYXRlIGFuIG91dHB1dCBmaWxlIHVzaW5nIHRoZSBpbnB1dCBnaXZlbiBieSBgYENPTlRFTlRgYCBhbmQgc3Vic3RpdHV0ZQordmFyaWFibGUgdmFsdWVzIHJlZmVyZW5jZWQgYXMgYGBAVkFSQGBgIG9yIGBgJHtWQVJ9YGAgY29udGFpbmVkIHRoZXJlaW4uIFRoZQorc3Vic3RpdHV0aW9uIHJ1bGVzIGJlaGF2ZSB0aGUgc2FtZSBhcyB0aGUgOmNvbW1hbmQ6YGNvbmZpZ3VyZV9maWxlYCBjb21tYW5kLgorSW4gb3JkZXIgdG8gbWF0Y2ggOmNvbW1hbmQ6YGNvbmZpZ3VyZV9maWxlYCdzIGJlaGF2aW9yLCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMKK2FyZSBub3Qgc3VwcG9ydGVkIGZvciBib3RoIGBgT1VUUFVUYGAgYW5kIGBgQ09OVEVOVGBgLgorCitUaGUgYXJndW1lbnRzIGFyZToKKworYGBPVVRQVVQgPG91dHB1dC1maWxlPmBgCisgIFNwZWNpZnkgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gZ2VuZXJhdGUuIEEgcmVsYXRpdmUgcGF0aCBpcyB0cmVhdGVkIHdpdGgKKyAgcmVzcGVjdCB0byB0aGUgdmFsdWUgb2YgOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJgLgorICBgYDxvdXRwdXQtZmlsZT5gYCBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyYXRvciBleHByZXNzaW9ucy4KKworYGBDT05URU5UIDxjb250ZW50PmBgCisgIFVzZSB0aGUgY29udGVudCBnaXZlbiBleHBsaWNpdGx5IGFzIGlucHV0LgorICBgYDxjb250ZW50PmBgIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zLgorCitgYEVTQ0FQRV9RVU9URVNgYAorICBFc2NhcGUgYW55IHN1YnN0aXR1dGVkIHF1b3RlcyB3aXRoIGJhY2tzbGFzaGVzIChDLXN0eWxlKS4KKworYGBAT05MWWBgCisgIFJlc3RyaWN0IHZhcmlhYmxlIHJlcGxhY2VtZW50IHRvIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0gYGBAVkFSQGBgLgorICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgc2NyaXB0cyB0aGF0IHVzZSBgYCR7VkFSfWBgIHN5bnRheC4KKworYGBORVdMSU5FX1NUWUxFIDxzdHlsZT5gYAorICBTcGVjaWZ5IHRoZSBuZXdsaW5lIHN0eWxlIGZvciB0aGUgb3V0cHV0IGZpbGUuICBTcGVjaWZ5CisgIGBgVU5JWGBgIG9yIGBgTEZgYCBmb3IgYGBcbmBgIG5ld2xpbmVzLCBvciBzcGVjaWZ5CisgIGBgRE9TYGAsIGBgV0lOMzJgYCwgb3IgYGBDUkxGYGAgZm9yIGBgXHJcbmBgIG5ld2xpbmVzLgorCiBGaWxlc3lzdGVtCiBeXl5eXl5eXl5eCiAKQEAgLTU0MCw3ICs1ODUsNyBAQAogQnkgZGVmYXVsdCBgYEdMT0JfUkVDVVJTRWBgIG9taXRzIGRpcmVjdG9yaWVzIGZyb20gcmVzdWx0IGxpc3QgLSBzZXR0aW5nCiBgYExJU1RfRElSRUNUT1JJRVNgYCB0byB0cnVlIGFkZHMgZGlyZWN0b3JpZXMgdG8gcmVzdWx0IGxpc3QuCiBJZiBgYEZPTExPV19TWU1MSU5LU2BgIGlzIGdpdmVuIG9yIHBvbGljeSA6cG9saWN5OmBDTVAwMDA5YCBpcyBub3Qgc2V0IHRvCi1gYE9MRGBgIHRoZW4gYGBMSVNUX0RJUkVDVE9SSUVTYGAgdHJlYXRzIHN5bWxpbmtzIGFzIGRpcmVjdG9yaWVzLgorYGBORVdgYCB0aGVuIGBgTElTVF9ESVJFQ1RPUklFU2BgIHRyZWF0cyBzeW1saW5rcyBhcyBkaXJlY3Rvcmllcy4KIAogRXhhbXBsZXMgb2YgcmVjdXJzaXZlIGdsb2JiaW5nIGluY2x1ZGU6OgogCkBAIC03MzEsMTEgKzc3NiwxNCBAQAogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKIAotICBmaWxlKERPV05MT0FEIDx1cmw+IDxmaWxlPiBbPG9wdGlvbnM+Li4uXSkKKyAgZmlsZShET1dOTE9BRCA8dXJsPiBbPGZpbGU+XSBbPG9wdGlvbnM+Li4uXSkKICAgZmlsZShVUExPQUQgICA8ZmlsZT4gPHVybD4gWzxvcHRpb25zPi4uLl0pCiAKLVRoZSBgYERPV05MT0FEYGAgbW9kZSBkb3dubG9hZHMgdGhlIGdpdmVuIGBgPHVybD5gYCB0byBhIGxvY2FsIGBgPGZpbGU+YGAuCi1UaGUgYGBVUExPQURgYCBtb2RlIHVwbG9hZHMgYSBsb2NhbCBgYDxmaWxlPmBgIHRvIGEgZ2l2ZW4gYGA8dXJsPmBgLgorVGhlIGBgRE9XTkxPQURgYCBtb2RlIGRvd25sb2FkcyB0aGUgZ2l2ZW4gYGA8dXJsPmBgIHRvIGEgbG9jYWwgYGA8ZmlsZT5gYC4gSWYKK2BgPGZpbGU+YGAgaXMgbm90IHNwZWNpZmllZCBmb3IgYGBmaWxlKERPV05MT0FEKWBgLCB0aGUgZmlsZSBpcyBub3Qgc2F2ZWQuIFRoaXMKK2NhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8ga25vdyBpZiBhIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQgKGZvciBleGFtcGxlLCB0bworY2hlY2sgdGhhdCBpdCBleGlzdHMpIHdpdGhvdXQgYWN0dWFsbHkgc2F2aW5nIGl0IGFueXdoZXJlLiBUaGUgYGBVUExPQURgYCBtb2RlCit1cGxvYWRzIGEgbG9jYWwgYGA8ZmlsZT5gYCB0byBhIGdpdmVuIGBgPHVybD5gYC4KIAogT3B0aW9ucyB0byBib3RoIGBgRE9XTkxPQURgYCBhbmQgYGBVUExPQURgYCBhcmU6CiAKQEAgLTc5MCwxNyArODM4LDYgQEAKIElmIG5laXRoZXIgYGBORVRSQ2BgIG9wdGlvbiBpcyBnaXZlbiBDTWFrZSB3aWxsIGNoZWNrIHZhcmlhYmxlcwogYGBDTUFLRV9ORVRSQ2BgIGFuZCBgYENNQUtFX05FVFJDX0ZJTEVgYCwgcmVzcGVjdGl2ZWx5LgogCi1BZGRpdGlvbmFsIG9wdGlvbnMgdG8gYGBET1dOTE9BRGBgIGFyZToKLQotYGBFWFBFQ1RFRF9IQVNIIEFMR089PHZhbHVlPmBgCi0KLSAgVmVyaWZ5IHRoYXQgdGhlIGRvd25sb2FkZWQgY29udGVudCBoYXNoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHZhbHVlLCB3aGVyZQotICBgYEFMR09gYCBpcyBvbmUgb2YgdGhlIGFsZ29yaXRobXMgc3VwcG9ydGVkIGJ5IGBgZmlsZSg8SEFTSD4pYGAuCi0gIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGUgb3BlcmF0aW9uIGZhaWxzIHdpdGggYW4gZXJyb3IuCi0KLWBgRVhQRUNURURfTUQ1IDx2YWx1ZT5gYAotICBIaXN0b3JpY2FsIHNob3J0LWhhbmQgZm9yIGBgRVhQRUNURURfSEFTSCBNRDU9PHZhbHVlPmBgLgotCiBgYFRMU19WRVJJRlkgPE9OfE9GRj5gYAogICBTcGVjaWZ5IHdoZXRoZXIgdG8gdmVyaWZ5IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgZm9yIGBgaHR0cHM6Ly9gYCBVUkxzLgogICBUaGUgZGVmYXVsdCBpcyB0byAqbm90KiB2ZXJpZnkuCkBAIC04MTAsOSArODQ3LDIxIEBACiAKIEZvciBgYGh0dHBzOi8vYGAgVVJMcyBDTWFrZSBtdXN0IGJlIGJ1aWx0IHdpdGggT3BlblNTTCBzdXBwb3J0LiAgYGBUTFMvU1NMYGAKIGNlcnRpZmljYXRlcyBhcmUgbm90IGNoZWNrZWQgYnkgZGVmYXVsdC4gIFNldCBgYFRMU19WRVJJRllgYCB0byBgYE9OYGAgdG8KLWNoZWNrIGNlcnRpZmljYXRlcyBhbmQvb3IgdXNlIGBgRVhQRUNURURfSEFTSGBgIHRvIHZlcmlmeSBkb3dubG9hZGVkIGNvbnRlbnQuCi1JZiBuZWl0aGVyIGBgVExTYGAgb3B0aW9uIGlzIGdpdmVuIENNYWtlIHdpbGwgY2hlY2sgdmFyaWFibGVzCi1gYENNQUtFX1RMU19WRVJJRllgYCBhbmQgYGBDTUFLRV9UTFNfQ0FJTkZPYGAsIHJlc3BlY3RpdmVseS4KK2NoZWNrIGNlcnRpZmljYXRlcy4gSWYgbmVpdGhlciBgYFRMU2BgIG9wdGlvbiBpcyBnaXZlbiBDTWFrZSB3aWxsIGNoZWNrCit2YXJpYWJsZXMgYGBDTUFLRV9UTFNfVkVSSUZZYGAgYW5kIGBgQ01BS0VfVExTX0NBSU5GT2BgLCByZXNwZWN0aXZlbHkuCisKK0FkZGl0aW9uYWwgb3B0aW9ucyB0byBgYERPV05MT0FEYGAgYXJlOgorCitgYEVYUEVDVEVEX0hBU0ggQUxHTz08dmFsdWU+YGAKKworICBWZXJpZnkgdGhhdCB0aGUgZG93bmxvYWRlZCBjb250ZW50IGhhc2ggbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmFsdWUsIHdoZXJlCisgIGBgQUxHT2BgIGlzIG9uZSBvZiB0aGUgYWxnb3JpdGhtcyBzdXBwb3J0ZWQgYnkgYGBmaWxlKDxIQVNIPilgYC4KKyAgSWYgaXQgZG9lcyBub3QgbWF0Y2gsIHRoZSBvcGVyYXRpb24gZmFpbHMgd2l0aCBhbiBlcnJvci4gSXQgaXMgYW4gZXJyb3IgdG8KKyAgc3BlY2lmeSB0aGlzIGlmIGBgRE9XTkxPQURgYCBpcyBub3QgZ2l2ZW4gYSBgYDxmaWxlPmBgLgorCitgYEVYUEVDVEVEX01ENSA8dmFsdWU+YGAKKyAgSGlzdG9yaWNhbCBzaG9ydC1oYW5kIGZvciBgYEVYUEVDVEVEX0hBU0ggTUQ1PTx2YWx1ZT5gYC4gSXQgaXMgYW4gZXJyb3IgdG8KKyAgc3BlY2lmeSB0aGlzIGlmIGBgRE9XTkxPQURgYCBpcyBub3QgZ2l2ZW4gYSBgYDxmaWxlPmBgLgogCiBMb2NraW5nCiBeXl5eXl5eCkBAIC04NDYsMyArODk1LDY2IEBACiBUcnlpbmcgdG8gbG9jayBmaWxlIHR3aWNlIGlzIG5vdCBhbGxvd2VkLiAgQW55IGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyBhbmQKIGZpbGUgaXRzZWxmIHdpbGwgYmUgY3JlYXRlZCBpZiB0aGV5IG5vdCBleGlzdC4gIGBgR1VBUkRgYCBhbmQgYGBUSU1FT1VUYGAKIG9wdGlvbnMgaWdub3JlZCBvbiBgYFJFTEVBU0VgYCBvcGVyYXRpb24uCisKK0FyY2hpdmluZworXl5eXl5eXl5eCisKKy4uIF9BUkNISVZFX0NSRUFURToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgZmlsZShBUkNISVZFX0NSRUFURSBPVVRQVVQgPGFyY2hpdmU+CisgICAgUEFUSFMgPHBhdGhzPi4uLgorICAgIFtGT1JNQVQgPGZvcm1hdD5dCisgICAgW0NPTVBSRVNTSU9OIDxjb21wcmVzc2lvbj5dCisgICAgW01USU1FIDxtdGltZT5dCisgICAgW1ZFUkJPU0VdKQorCitDcmVhdGVzIHRoZSBzcGVjaWZpZWQgYGA8YXJjaGl2ZT5gYCBmaWxlIHdpdGggdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcworbGlzdGVkIGluIGBgPHBhdGhzPmBgLiAgTm90ZSB0aGF0IGBgPHBhdGhzPmBgIG11c3QgbGlzdCBhY3R1YWwgZmlsZXMgb3IKK2RpcmVjdG9yaWVzLCB3aWxkY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisKK1VzZSB0aGUgYGBGT1JNQVRgYCBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYXJjaGl2ZSBmb3JtYXQuICBTdXBwb3J0ZWQgdmFsdWVzCitmb3IgYGA8Zm9ybWF0PmBgIGFyZSBgYDd6aXBgYCwgYGBnbnV0YXJgYCwgYGBwYXhgYCwgYGBwYXhyYGAsIGBgcmF3YGAgYW5kCitgYHppcGBgLiAgSWYgYGBGT1JNQVRgYCBpcyBub3QgZ2l2ZW4sIHRoZSBkZWZhdWx0IGZvcm1hdCBpcyBgYHBheHJgYC4KKworU29tZSBhcmNoaXZlIGZvcm1hdHMgYWxsb3cgdGhlIHR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgc3BlY2lmaWVkLgorVGhlIGBgN3ppcGBgIGFuZCBgYHppcGBgIGFyY2hpdmUgZm9ybWF0cyBhbHJlYWR5IGltcGx5IGEgc3BlY2lmaWMgdHlwZSBvZgorY29tcHJlc3Npb24uICBUaGUgb3RoZXIgZm9ybWF0cyB1c2Ugbm8gY29tcHJlc3Npb24gYnkgZGVmYXVsdCwgYnV0IGNhbiBiZQorZGlyZWN0ZWQgdG8gZG8gc28gd2l0aCB0aGUgYGBDT01QUkVTU0lPTmBgIG9wdGlvbi4gIFZhbGlkIHZhbHVlcyBmb3IKK2BgPGNvbXByZXNzaW9uPmBgIGFyZSBgYE5vbmVgYCwgYGBCWmlwMmBgLCBgYEdaaXBgYCwgYGBYWmBgLCBhbmQgYGBac3RkYGAuCisKKy4uIG5vdGU6OgorICBXaXRoIGBgRk9STUFUYGAgc2V0IHRvIGBgcmF3YGAgb25seSBvbmUgZmlsZSB3aWxsIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUKKyAgY29tcHJlc3Npb24gdHlwZSBzcGVjaWZpZWQgYnkgYGBDT01QUkVTU0lPTmBgLgorCitUaGUgYGBWRVJCT1NFYGAgb3B0aW9uIGVuYWJsZXMgdmVyYm9zZSBvdXRwdXQgZm9yIHRoZSBhcmNoaXZlIG9wZXJhdGlvbi4KKworVG8gc3BlY2lmeSB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgcmVjb3JkZWQgaW4gdGFyYmFsbCBlbnRyaWVzLCB1c2UKK3RoZSBgYE1USU1FYGAgb3B0aW9uLgorCisuLiBfQVJDSElWRV9FWFRSQUNUOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBmaWxlKEFSQ0hJVkVfRVhUUkFDVCBJTlBVVCA8YXJjaGl2ZT4KKyAgICBbREVTVElOQVRJT04gPGRpcj5dCisgICAgW1BBVFRFUk5TIDxwYXR0ZXJucz4uLi5dCisgICAgW0xJU1RfT05MWV0KKyAgICBbVkVSQk9TRV0pCisKK0V4dHJhY3RzIG9yIGxpc3RzIHRoZSBjb250ZW50IG9mIHRoZSBzcGVjaWZpZWQgYGA8YXJjaGl2ZT5gYC4KKworVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgY29udGVudCBvZiB0aGUgYXJjaGl2ZSB3aWxsIGJlIGV4dHJhY3RlZCB0byBjYW4KK2JlIHNwZWNpZmllZCB1c2luZyB0aGUgYGBERVNUSU5BVElPTmBgIG9wdGlvbi4gIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QKK2V4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBJZiBgYERFU1RJTkFUSU9OYGAgaXMgbm90IGdpdmVuLCB0aGUgY3VycmVudAorYmluYXJ5IGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQuCisKK0lmIHJlcXVpcmVkLCB5b3UgbWF5IHNlbGVjdCB3aGljaCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gbGlzdCBvciBleHRyYWN0Citmcm9tIHRoZSBhcmNoaXZlIHVzaW5nIHRoZSBzcGVjaWZpZWQgYGA8cGF0dGVybnM+YGAuICBXaWxkY2FyZHMgYXJlIHN1cHBvcnRlZC4KK0lmIHRoZSBgYFBBVFRFUk5TYGAgb3B0aW9uIGlzIG5vdCBnaXZlbiwgdGhlIGVudGlyZSBhcmNoaXZlIHdpbGwgYmUgbGlzdGVkIG9yCitleHRyYWN0ZWQuCisKK2BgTElTVF9PTkxZYGAgd2lsbCBsaXN0IHRoZSBmaWxlcyBpbiB0aGUgYXJjaGl2ZSByYXRoZXIgdGhhbiBleHRyYWN0IHRoZW0uCisKK1dpdGggYGBWRVJCT1NFYGAsIHRoZSBjb21tYW5kIHdpbGwgcHJvZHVjZSB2ZXJib3NlIG91dHB1dC4KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9maW5kX3BhY2thZ2UucnN0IGIvSGVscC9jb21tYW5kL2ZpbmRfcGFja2FnZS5yc3QKaW5kZXggNjRhMTZmMy4uODU3ZGU3OCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2ZpbmRfcGFja2FnZS5yc3QKKysrIGIvSGVscC9jb21tYW5kL2ZpbmRfcGFja2FnZS5yc3QKQEAgLTU5LDcgKzU5LDcgQEAKIG1lc3NhZ2VzLiAgU29tZSBmaW5kLW1vZHVsZXMgcHJvdmlkZSBsaW1pdGVkIG9yIG5vIHN1cHBvcnQgZm9yIHZlcnNpb25pbmc7CiBjaGVjayB0aGUgbW9kdWxlIGRvY3VtZW50YXRpb24uCiAKLUlmIHRoZSBgYE1PRFVMRWBgIG9wdGlvbiBpcyBub3Qgc3BlY2ZpZWQgaW4gdGhlIGFib3ZlIHNpZ25hdHVyZSwKK0lmIHRoZSBgYE1PRFVMRWBgIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBhYm92ZSBzaWduYXR1cmUsCiBDTWFrZSBmaXJzdCBzZWFyY2hlcyBmb3IgdGhlIHBhY2thZ2UgdXNpbmcgTW9kdWxlIG1vZGUuIFRoZW4sIGlmIHRoZQogcGFja2FnZSBpcyBub3QgZm91bmQsIGl0IHNlYXJjaGVzIGFnYWluIHVzaW5nIENvbmZpZyBtb2RlLiBBIHVzZXIKIG1heSBzZXQgdGhlIHZhcmlhYmxlIDp2YXJpYWJsZTpgQ01BS0VfRklORF9QQUNLQUdFX1BSRUZFUl9DT05GSUdgIHRvCkBAIC0zMDIsMjMgKzMwMiwyMyBAQAogICAgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIGEgYGAtRFZBUj12YWx1ZWBgLgogICAgVGhlIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0cyA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YC4KICAgIFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgYGBOT19DTUFLRV9QQVRIYGAgaXMgcGFzc2VkIG9yIGJ5IHNldHRpbmcgdGhlCi0gICA6dmFyaWFibGU6YENNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEhgIHRvIGBgRkFMU0VgYDo6CisgICA6dmFyaWFibGU6YENNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEhgIHRvIGBgRkFMU0VgYDoKIAotICAgICBDTUFLRV9QUkVGSVhfUEFUSAotICAgICBDTUFLRV9GUkFNRVdPUktfUEFUSAotICAgICBDTUFLRV9BUFBCVU5ETEVfUEFUSAorICAgKiA6dmFyaWFibGU6YENNQUtFX1BSRUZJWF9QQVRIYAorICAgKiA6dmFyaWFibGU6YENNQUtFX0ZSQU1FV09SS19QQVRIYAorICAgKiA6dmFyaWFibGU6YENNQUtFX0FQUEJVTkRMRV9QQVRIYAogCiAzLiBTZWFyY2ggcGF0aHMgc3BlY2lmaWVkIGluIGNtYWtlLXNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlcy4KICAgIFRoZXNlIGFyZSBpbnRlbmRlZCB0byBiZSBzZXQgaW4gdGhlIHVzZXIncyBzaGVsbCBjb25maWd1cmF0aW9uLAogICAgYW5kIHRoZXJlZm9yZSB1c2UgdGhlIGhvc3QncyBuYXRpdmUgcGF0aCBzZXBhcmF0b3IKICAgIChgYDtgYCBvbiBXaW5kb3dzIGFuZCBgYDpgYCBvbiBVTklYKS4KICAgIFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgYGBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRIYGAgaXMgcGFzc2VkIG9yIGJ5IHNldHRpbmcKLSAgIHRoZSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEhgIHRvIGBgRkFMU0VgYDo6CisgICB0aGUgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRIYCB0byBgYEZBTFNFYGA6CiAKLSAgICAgPFBhY2thZ2VOYW1lPl9ESVIKLSAgICAgQ01BS0VfUFJFRklYX1BBVEgKLSAgICAgQ01BS0VfRlJBTUVXT1JLX1BBVEgKLSAgICAgQ01BS0VfQVBQQlVORExFX1BBVEgKKyAgICogYGA8UGFja2FnZU5hbWU+X0RJUmBgCisgICAqIDplbnZ2YXI6YENNQUtFX1BSRUZJWF9QQVRIYAorICAgKiBgYENNQUtFX0ZSQU1FV09SS19QQVRIYGAKKyAgICogYGBDTUFLRV9BUFBCVU5ETEVfUEFUSGBgCiAKIDQuIFNlYXJjaCBwYXRocyBzcGVjaWZpZWQgYnkgdGhlIGBgSElOVFNgYCBvcHRpb24uICBUaGVzZSBzaG91bGQgYmUgcGF0aHMKICAgIGNvbXB1dGVkIGJ5IHN5c3RlbSBpbnRyb3NwZWN0aW9uLCBzdWNoIGFzIGEgaGludCBwcm92aWRlZCBieSB0aGUKQEAgLTMyOSw5ICszMjksOSBAQAogICAgc2tpcHBlZCBpZiBgYE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIYGAgaXMgcGFzc2VkICBvciBieSBzZXR0aW5nIHRoZQogICAgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSGAgdG8gYGBGQUxTRWBgLiBQYXRoIGVudHJpZXMKICAgIGVuZGluZyBpbiBgYC9iaW5gYCBvciBgYC9zYmluYGAgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZWlyCi0gICBwYXJlbnQgZGlyZWN0b3JpZXM6OgorICAgcGFyZW50IGRpcmVjdG9yaWVzOgogCi0gICAgIFBBVEgKKyAgICogYGBQQVRIYGAKIAogNi4gU2VhcmNoIHBhdGhzIHN0b3JlZCBpbiB0aGUgQ01ha2UgOnJlZjpgVXNlciBQYWNrYWdlIFJlZ2lzdHJ5YC4KICAgIFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgYGBOT19DTUFLRV9QQUNLQUdFX1JFR0lTVFJZYGAgaXMgcGFzc2VkIG9yIGJ5CkBAIC0zNDUsMTEgKzM0NSwxNSBAQAogNy4gU2VhcmNoIGNtYWtlIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBQbGF0Zm9ybSBmaWxlcyBmb3IgdGhlCiAgICBjdXJyZW50IHN5c3RlbS4gIFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgYGBOT19DTUFLRV9TWVNURU1fUEFUSGBgIGlzCiAgICBwYXNzZWQgb3IgYnkgc2V0dGluZyB0aGUgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX1VTRV9DTUFLRV9TWVNURU1fUEFUSGAKLSAgIHRvIGBgRkFMU0VgYDo6CisgICB0byBgYEZBTFNFYGA6CiAKLSAgICAgQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRICi0gICAgIENNQUtFX1NZU1RFTV9GUkFNRVdPUktfUEFUSAotICAgICBDTUFLRV9TWVNURU1fQVBQQlVORExFX1BBVEgKKyAgICogOnZhcmlhYmxlOmBDTUFLRV9TWVNURU1fUFJFRklYX1BBVEhgCisgICAqIDp2YXJpYWJsZTpgQ01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRIYAorICAgKiA6dmFyaWFibGU6YENNQUtFX1NZU1RFTV9BUFBCVU5ETEVfUEFUSGAKKworICAgVGhlIHBsYXRmb3JtIHBhdGhzIHRoYXQgdGhlc2UgdmFyaWFibGVzIGNvbnRhaW4gYXJlIGxvY2F0aW9ucyB0aGF0CisgICB0eXBpY2FsbHkgaW5jbHVkZSBpbnN0YWxsZWQgc29mdHdhcmUuIEFuIGV4YW1wbGUgYmVpbmcgYGAvdXNyL2xvY2FsYGAgZm9yCisgICBVTklYIGJhc2VkIHBsYXRmb3Jtcy4KIAogOC4gU2VhcmNoIHBhdGhzIHN0b3JlZCBpbiB0aGUgQ01ha2UgOnJlZjpgU3lzdGVtIFBhY2thZ2UgUmVnaXN0cnlgLgogICAgVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiBgYE5PX0NNQUtFX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZYGAgaXMgcGFzc2VkCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZm9yZWFjaC5yc3QgYi9IZWxwL2NvbW1hbmQvZm9yZWFjaC5yc3QKaW5kZXggYWUyYWZiMi4uYTAxYTEwNCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2ZvcmVhY2gucnN0CisrKyBiL0hlbHAvY29tbWFuZC9mb3JlYWNoLnJzdApAQCAtNDcsNyArNDcsNyBAQAogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKIAotICBmb3JlYWNoKGxvb3BfdmFyIElOIFtMSVNUUyBbPGxpc3RzPl1dIFtJVEVNUyBbPGl0ZW1zPl1dKQorICBmb3JlYWNoKDxsb29wX3Zhcj4gSU4gW0xJU1RTIFs8bGlzdHM+XV0gW0lURU1TIFs8aXRlbXM+XV0pCiAKIEluIHRoaXMgdmFyaWFudCwgYGA8bGlzdHM+YGAgaXMgYSB3aGl0ZXNwYWNlIG9yIHNlbWljb2xvbgogc2VwYXJhdGVkIGxpc3Qgb2YgbGlzdC12YWx1ZWQgdmFyaWFibGVzLiBUaGUgYGBmb3JlYWNoYGAKQEAgLTgyLDMgKzgyLDQ2IEBACiAgIC0tIFg9NgogICAtLSBYPTcKICAgLS0gWD04CisKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgZm9yZWFjaCg8bG9vcF92YXI+Li4uIElOIFpJUF9MSVNUUyA8bGlzdHM+KQorCitJbiB0aGlzIHZhcmlhbnQsIGBgPGxpc3RzPmBgIGlzIGEgd2hpdGVzcGFjZSBvciBzZW1pY29sb24KK3NlcGFyYXRlZCBsaXN0IG9mIGxpc3QtdmFsdWVkIHZhcmlhYmxlcy4gVGhlIGBgZm9yZWFjaGBgCitjb21tYW5kIGl0ZXJhdGVzIG92ZXIgZWFjaCBsaXN0IHNpbXVsdGFuZW91c2x5IHNldHRpbmcgdGhlCitpdGVyYXRpb24gdmFyaWFibGVzIGFzIGZvbGxvd3M6CisKKy0gaWYgdGhlIG9ubHkgYGBsb29wX3ZhcmBgIGdpdmVuLCB0aGVuIGl0IHNldHMgYSBzZXJpZXMgb2YKKyAgYGBsb29wX3Zhcl9OYGAgdmFyaWFibGVzIHRvIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUKKyAgY29ycmVzcG9uZGluZyBsaXN0OworLSBpZiBtdWx0aXBsZSB2YXJpYWJsZSBuYW1lcyBwYXNzZWQsIHRoZWlyIGNvdW50IHNob3VsZCBtYXRjaAorICB0aGUgbGlzdHMgdmFyaWFibGVzIGNvdW50OworLSBpZiBhbnkgb2YgdGhlIGxpc3RzIGFyZSBzaG9ydGVyLCB0aGUgY29ycmVzcG9uZGluZyBpdGVyYXRpb24KKyAgdmFyaWFibGUgaXMgbm90IGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgbGlzdChBUFBFTkQgRW5nbGlzaCBvbmUgdHdvIHRocmVlIGZvdXIpCisgIGxpc3QoQVBQRU5EIEJhaGFzYSBzYXR1IGR1YSB0aWdhKQorCisgIGZvcmVhY2gobnVtIElOIFpJUF9MSVNUUyBFbmdsaXNoIEJhaGFzYSkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJudW1fMD0ke251bV8wfSwgbnVtXzE9JHtudW1fMX0iKQorICBlbmRmb3JlYWNoKCkKKworICBmb3JlYWNoKGVuIGJhIElOIFpJUF9MSVNUUyBFbmdsaXNoIEJhaGFzYSkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJlbj0ke2VufSwgYmE9JHtiYX0iKQorICBlbmRmb3JlYWNoKCkKKworeWllbGRzCis6OgorCisgIC0tIG51bV8wPW9uZSwgbnVtXzE9c2F0dQorICAtLSBudW1fMD10d28sIG51bV8xPWR1YQorICAtLSBudW1fMD10aHJlZSwgbnVtXzE9dGlnYQorICAtLSBudW1fMD1mb3VyLCBudW1fMT0KKyAgLS0gZW49b25lLCBiYT1zYXR1CisgIC0tIGVuPXR3bywgYmE9ZHVhCisgIC0tIGVuPXRocmVlLCBiYT10aWdhCisgIC0tIGVuPWZvdXIsIGJhPQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2Z1bmN0aW9uLnJzdCBiL0hlbHAvY29tbWFuZC9mdW5jdGlvbi5yc3QKaW5kZXggNTNiYTc1NC4uN2E5YjkwNyAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2Z1bmN0aW9uLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvZnVuY3Rpb24ucnN0CkBAIC00NCwxMSArNDQsMTUgQEAKICAgZm9vKCkKICAgRm9vKCkKICAgRk9PKCkKKyAgY21ha2VfbGFuZ3VhZ2UoQ0FMTCBmb28pCiAKIGFuZCBzbyBvbi4gSG93ZXZlciwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gc3RheSB3aXRoIHRoZQogY2FzZSBjaG9zZW4gaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFR5cGljYWxseSBmdW5jdGlvbnMgdXNlCiBhbGwtbG93ZXJjYXNlIG5hbWVzLgogCitUaGUgOmNvbW1hbmQ6YGNtYWtlX2xhbmd1YWdlKENBTEwgLi4uKWAgY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvCitpbnZva2UgdGhlIGZ1bmN0aW9uLgorCiBBcmd1bWVudHMKIF5eXl5eXl5eXgogCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZ2V0X3Byb3BlcnR5LnJzdCBiL0hlbHAvY29tbWFuZC9nZXRfcHJvcGVydHkucnN0CmluZGV4IGMwZjliNDYuLjA2MDI1MTggMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9nZXRfcHJvcGVydHkucnN0CisrKyBiL0hlbHAvY29tbWFuZC9nZXRfcHJvcGVydHkucnN0CkBAIC0xMCw2ICsxMCw3IEBACiAgICAgICAgICAgICAgICAgRElSRUNUT1JZIFs8ZGlyPl0gIHwKICAgICAgICAgICAgICAgICBUQVJHRVQgICAgPHRhcmdldD4gfAogICAgICAgICAgICAgICAgIFNPVVJDRSAgICA8c291cmNlPiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFtESVJFQ1RPUlkgPGRpcj4gfCBUQVJHRVRfRElSRUNUT1JZIDx0YXJnZXQ+XSB8CiAgICAgICAgICAgICAgICAgSU5TVEFMTCAgIDxmaWxlPiAgIHwKICAgICAgICAgICAgICAgICBURVNUICAgICAgPHRlc3Q+ICAgfAogICAgICAgICAgICAgICAgIENBQ0hFICAgICA8ZW50cnk+ICB8CkBAIC0zMCwxOCArMzEsMzYgQEAKICAgU2NvcGUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGJ1dCBhbm90aGVyCiAgIGRpcmVjdG9yeSAoYWxyZWFkeSBwcm9jZXNzZWQgYnkgQ01ha2UpIG1heSBiZSBuYW1lZCBieSB0aGUKICAgZnVsbCBvciByZWxhdGl2ZSBwYXRoIGBgPGRpcj5gYC4KKyAgU2VlIGFsc28gdGhlIDpjb21tYW5kOmBnZXRfZGlyZWN0b3J5X3Byb3BlcnR5YCBjb21tYW5kLgogCiBgYFRBUkdFVGBgCiAgIFNjb3BlIG11c3QgbmFtZSBvbmUgZXhpc3RpbmcgdGFyZ2V0LgorICBTZWUgYWxzbyB0aGUgOmNvbW1hbmQ6YGdldF90YXJnZXRfcHJvcGVydHlgIGNvbW1hbmQuCiAKIGBgU09VUkNFYGAKLSAgU2NvcGUgbXVzdCBuYW1lIG9uZSBzb3VyY2UgZmlsZS4KKyAgU2NvcGUgbXVzdCBuYW1lIG9uZSBzb3VyY2UgZmlsZS4gIEJ5IGRlZmF1bHQsIHRoZSBzb3VyY2UgZmlsZSdzIHByb3BlcnR5CisgIHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkncyBzY29wZSwgYnV0IHRoaXMgY2FuIGJlCisgIG92ZXJyaWRkZW4gd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdWItb3B0aW9uczoKKworICBgYERJUkVDVE9SWSA8ZGlyPmBgCisgICAgVGhlIHNvdXJjZSBmaWxlIHByb3BlcnR5IHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBgYDxkaXI+YGAgZGlyZWN0b3J5J3MKKyAgICBzY29wZS4gIENNYWtlIG11c3QgYWxyZWFkeSBrbm93IGFib3V0IHRoYXQgc291cmNlIGRpcmVjdG9yeSwgZWl0aGVyIGJ5CisgICAgaGF2aW5nIGFkZGVkIGl0IHRocm91Z2ggYSBjYWxsIHRvIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YCBvciBgYDxkaXI+YGAKKyAgICBiZWluZyB0aGUgdG9wIGxldmVsIHNvdXJjZSBkaXJlY3RvcnkuICBSZWxhdGl2ZSBwYXRocyBhcmUgdHJlYXRlZCBhcworICAgIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkuCisKKyAgYGBUQVJHRVRfRElSRUNUT1JZIDx0YXJnZXQ+YGAKKyAgICBUaGUgc291cmNlIGZpbGUgcHJvcGVydHkgd2lsbCBiZSByZWFkIGZyb20gdGhlIGRpcmVjdG9yeSBzY29wZSBpbiB3aGljaAorICAgIGBgPHRhcmdldD5gYCB3YXMgY3JlYXRlZCAoYGA8dGFyZ2V0PmBgIG11c3QgdGhlcmVmb3JlIGFscmVhZHkgZXhpc3QpLgorCisgIFNlZSBhbHNvIHRoZSA6Y29tbWFuZDpgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5YCBjb21tYW5kLgogCiBgYElOU1RBTExgYAogICBTY29wZSBtdXN0IG5hbWUgb25lIGluc3RhbGxlZCBmaWxlIHBhdGguCiAKIGBgVEVTVGBgCiAgIFNjb3BlIG11c3QgbmFtZSBvbmUgZXhpc3RpbmcgdGVzdC4KKyAgU2VlIGFsc28gdGhlIDpjb21tYW5kOmBnZXRfdGVzdF9wcm9wZXJ0eWAgY29tbWFuZC4KIAogYGBDQUNIRWBgCiAgIFNjb3BlIG11c3QgbmFtZSBvbmUgY2FjaGUgZW50cnkuCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5LnJzdCBiL0hlbHAvY29tbWFuZC9nZXRfc291cmNlX2ZpbGVfcHJvcGVydHkucnN0CmluZGV4IGRlY2VjMTkuLjc2ZWQ3NzYgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9nZXRfc291cmNlX2ZpbGVfcHJvcGVydHkucnN0CisrKyBiL0hlbHAvY29tbWFuZC9nZXRfc291cmNlX2ZpbGVfcHJvcGVydHkucnN0CkBAIC01LDE1ICs1LDMzIEBACiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCi0gIGdldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eShWQVIgZmlsZSBwcm9wZXJ0eSkKKyAgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5KDx2YXJpYWJsZT4gPGZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICBbRElSRUNUT1JZIDxkaXI+IHwgVEFSR0VUX0RJUkVDVE9SWSA8dGFyZ2V0Pl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4pCiAKIEdldHMgYSBwcm9wZXJ0eSBmcm9tIGEgc291cmNlIGZpbGUuICBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGlzCi1zdG9yZWQgaW4gdGhlIHZhcmlhYmxlIGBgVkFSYGAuICBJZiB0aGUgc291cmNlIHByb3BlcnR5IGlzIG5vdCBmb3VuZCwgdGhlCi1iZWhhdmlvciBkZXBlbmRzIG9uIHdoZXRoZXIgaXQgaGFzIGJlZW4gZGVmaW5lZCB0byBiZSBhbiBgYElOSEVSSVRFRGBgIHByb3BlcnR5Ci1vciBub3QgKHNlZSA6Y29tbWFuZDpgZGVmaW5lX3Byb3BlcnR5YCkuICBOb24taW5oZXJpdGVkIHByb3BlcnRpZXMgd2lsbCBzZXQKLWBgVkFSYGAgdG8gIk5PVEZPVU5EIiwgd2hlcmVhcyBpbmhlcml0ZWQgcHJvcGVydGllcyB3aWxsIHNlYXJjaCB0aGUgcmVsZXZhbnQKLXBhcmVudCBzY29wZSBhcyBkZXNjcmliZWQgZm9yIHRoZSA6Y29tbWFuZDpgZGVmaW5lX3Byb3BlcnR5YCBjb21tYW5kIGFuZAotaWYgc3RpbGwgdW5hYmxlIHRvIGZpbmQgdGhlIHByb3BlcnR5LCBgYFZBUmBgIHdpbGwgYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZy4KK3N0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIGBgPHZhcmlhYmxlPmBgLiAgSWYgdGhlIHNvdXJjZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQsCit0aGUgYmVoYXZpb3IgZGVwZW5kcyBvbiB3aGV0aGVyIGl0IGhhcyBiZWVuIGRlZmluZWQgdG8gYmUgYW4gYGBJTkhFUklURURgYAorcHJvcGVydHkgb3Igbm90IChzZWUgOmNvbW1hbmQ6YGRlZmluZV9wcm9wZXJ0eWApLiAgTm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzCit3aWxsIHNldCBgYHZhcmlhYmxlYGAgdG8gYGBOT1RGT1VORGBgLCB3aGVyZWFzIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHdpbGwgc2VhcmNoCit0aGUgcmVsZXZhbnQgcGFyZW50IHNjb3BlIGFzIGRlc2NyaWJlZCBmb3IgdGhlIDpjb21tYW5kOmBkZWZpbmVfcHJvcGVydHlgCitjb21tYW5kIGFuZCBpZiBzdGlsbCB1bmFibGUgdG8gZmluZCB0aGUgcHJvcGVydHksIGBgdmFyaWFibGVgYCB3aWxsIGJlIHNldCB0bworYW4gZW1wdHkgc3RyaW5nLgorCitCeSBkZWZhdWx0LCB0aGUgc291cmNlIGZpbGUncyBwcm9wZXJ0eSB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY3VycmVudCBzb3VyY2UKK2RpcmVjdG9yeSdzIHNjb3BlLCBidXQgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nCitzdWItb3B0aW9uczoKKworYGBESVJFQ1RPUlkgPGRpcj5gYAorICBUaGUgc291cmNlIGZpbGUgcHJvcGVydHkgd2lsbCBiZSByZWFkIGZyb20gdGhlIGBgPGRpcj5gYCBkaXJlY3RvcnkncworICBzY29wZS4gIENNYWtlIG11c3QgYWxyZWFkeSBrbm93IGFib3V0IHRoYXQgc291cmNlIGRpcmVjdG9yeSwgZWl0aGVyIGJ5CisgIGhhdmluZyBhZGRlZCBpdCB0aHJvdWdoIGEgY2FsbCB0byA6Y29tbWFuZDpgYWRkX3N1YmRpcmVjdG9yeWAgb3IgYGA8ZGlyPmBgCisgIGJlaW5nIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4gIFJlbGF0aXZlIHBhdGhzIGFyZSB0cmVhdGVkIGFzCisgIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkuCisKK2BgVEFSR0VUX0RJUkVDVE9SWSA8dGFyZ2V0PmBgCisgIFRoZSBzb3VyY2UgZmlsZSBwcm9wZXJ0eSB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgZGlyZWN0b3J5IHNjb3BlIGluIHdoaWNoCisgIGBgPHRhcmdldD5gYCB3YXMgY3JlYXRlZCAoYGA8dGFyZ2V0PmBgIG11c3QgdGhlcmVmb3JlIGFscmVhZHkgZXhpc3QpLgogCiBVc2UgOmNvbW1hbmQ6YHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllc2AgdG8gc2V0IHByb3BlcnR5IHZhbHVlcy4gIFNvdXJjZQogZmlsZSBwcm9wZXJ0aWVzIHVzdWFsbHkgY29udHJvbCBob3cgdGhlIGZpbGUgaXMgYnVpbHQuIE9uZSBwcm9wZXJ0eSB0aGF0IGlzCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvZ2V0X3RhcmdldF9wcm9wZXJ0eS5yc3QgYi9IZWxwL2NvbW1hbmQvZ2V0X3RhcmdldF9wcm9wZXJ0eS5yc3QKaW5kZXggMTFlMDdlYS4uOTg1YjFmZiAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL2dldF90YXJnZXRfcHJvcGVydHkucnN0CisrKyBiL0hlbHAvY29tbWFuZC9nZXRfdGFyZ2V0X3Byb3BlcnR5LnJzdApAQCAtNSwxNSArNSwxNSBAQAogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKIAotICBnZXRfdGFyZ2V0X3Byb3BlcnR5KFZBUiB0YXJnZXQgcHJvcGVydHkpCisgIGdldF90YXJnZXRfcHJvcGVydHkoPFZBUj4gdGFyZ2V0IHByb3BlcnR5KQogCiBHZXQgYSBwcm9wZXJ0eSBmcm9tIGEgdGFyZ2V0LiAgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpcyBzdG9yZWQgaW4KLXRoZSB2YXJpYWJsZSBgYFZBUmBgLiAgSWYgdGhlIHRhcmdldCBwcm9wZXJ0eSBpcyBub3QgZm91bmQsIHRoZSBiZWhhdmlvcgordGhlIHZhcmlhYmxlIGBgPFZBUj5gYC4gIElmIHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgbm90IGZvdW5kLCB0aGUgYmVoYXZpb3IKIGRlcGVuZHMgb24gd2hldGhlciBpdCBoYXMgYmVlbiBkZWZpbmVkIHRvIGJlIGFuIGBgSU5IRVJJVEVEYGAgcHJvcGVydHkKIG9yIG5vdCAoc2VlIDpjb21tYW5kOmBkZWZpbmVfcHJvcGVydHlgKS4gIE5vbi1pbmhlcml0ZWQgcHJvcGVydGllcyB3aWxsCi1zZXQgYGBWQVJgYCB0byBgYE5PVEZPVU5EYGAsIHdoZXJlYXMgaW5oZXJpdGVkIHByb3BlcnRpZXMgd2lsbCBzZWFyY2ggdGhlCi1yZWxldmFudCBwYXJlbnQgc2NvcGUgYXMgZGVzY3JpYmVkIGZvciB0aGUgOmNvbW1hbmQ6YGRlZmluZV9wcm9wZXJ0eWAKLWNvbW1hbmQgYW5kIGlmIHN0aWxsIHVuYWJsZSB0byBmaW5kIHRoZSBwcm9wZXJ0eSwgYGBWQVJgYCB3aWxsIGJlIHNldCB0bworc2V0IGBgPFZBUj5gYCB0byBgYDxWQVI+LU5PVEZPVU5EYGAsIHdoZXJlYXMgaW5oZXJpdGVkIHByb3BlcnRpZXMgd2lsbCBzZWFyY2gKK3RoZSByZWxldmFudCBwYXJlbnQgc2NvcGUgYXMgZGVzY3JpYmVkIGZvciB0aGUgOmNvbW1hbmQ6YGRlZmluZV9wcm9wZXJ0eWAKK2NvbW1hbmQgYW5kIGlmIHN0aWxsIHVuYWJsZSB0byBmaW5kIHRoZSBwcm9wZXJ0eSwgYGA8VkFSPmBgIHdpbGwgYmUgc2V0IHRvCiBhbiBlbXB0eSBzdHJpbmcuCiAKIFVzZSA6Y29tbWFuZDpgc2V0X3RhcmdldF9wcm9wZXJ0aWVzYCB0byBzZXQgdGFyZ2V0IHByb3BlcnR5IHZhbHVlcy4KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9pbmNsdWRlX2d1YXJkLnJzdCBiL0hlbHAvY29tbWFuZC9pbmNsdWRlX2d1YXJkLnJzdAppbmRleCA4NzdhYTg2Li5kY2EzYjZmIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvaW5jbHVkZV9ndWFyZC5yc3QKKysrIGIvSGVscC9jb21tYW5kL2luY2x1ZGVfZ3VhcmQucnN0CkBAIC0xLDYgKzEsOCBAQAogaW5jbHVkZV9ndWFyZAogLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIFByb3ZpZGVzIGFuIGluY2x1ZGUgZ3VhcmQgZm9yIHRoZSBmaWxlIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgYnkgQ01ha2UuCiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2luc3RhbGwucnN0IGIvSGVscC9jb21tYW5kL2luc3RhbGwucnN0CmluZGV4IDVhZmZjNWIuLmMxMWVhZjQgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9pbnN0YWxsLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvaW5zdGFsbC5yc3QKQEAgLTE4LDEwICsxOCwxMiBAQAogSW50cm9kdWN0aW9uCiBeXl5eXl5eXl5eXl4KIAotVGhpcyBjb21tYW5kIGdlbmVyYXRlcyBpbnN0YWxsYXRpb24gcnVsZXMgZm9yIGEgcHJvamVjdC4gIFJ1bGVzCi1zcGVjaWZpZWQgYnkgY2FsbHMgdG8gdGhpcyBjb21tYW5kIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnkgYXJlCi1leGVjdXRlZCBpbiBvcmRlciBkdXJpbmcgaW5zdGFsbGF0aW9uLiAgVGhlIG9yZGVyIGFjcm9zcyBkaXJlY3RvcmllcwotaXMgbm90IGRlZmluZWQuCitUaGlzIGNvbW1hbmQgZ2VuZXJhdGVzIGluc3RhbGxhdGlvbiBydWxlcyBmb3IgYSBwcm9qZWN0LiAgSW5zdGFsbCBydWxlcworc3BlY2lmaWVkIGJ5IGNhbGxzIHRvIHRoZSBgYGluc3RhbGwoKWBgIGNvbW1hbmQgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeQorYXJlIGV4ZWN1dGVkIGluIG9yZGVyIGR1cmluZyBpbnN0YWxsYXRpb24uICBJbnN0YWxsIHJ1bGVzIGluIHN1YmRpcmVjdG9yaWVzCithZGRlZCBieSBjYWxscyB0byB0aGUgOmNvbW1hbmQ6YGFkZF9zdWJkaXJlY3RvcnlgIGNvbW1hbmQgYXJlIGludGVybGVhdmVkCit3aXRoIHRob3NlIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIHJ1biBpbiB0aGUgb3JkZXIgZGVjbGFyZWQgKHNlZQorcG9saWN5IDpwb2xpY3k6YENNUDAwODJgKS4KIAogVGhlcmUgYXJlIG11bHRpcGxlIHNpZ25hdHVyZXMgZm9yIHRoaXMgY29tbWFuZC4gIFNvbWUgb2YgdGhlbSBkZWZpbmUKIGluc3RhbGxhdGlvbiBvcHRpb25zIGZvciBmaWxlcyBhbmQgdGFyZ2V0cy4gIE9wdGlvbnMgY29tbW9uIHRvCkBAIC0zMCwxMyArMzIsMjMgQEAKIAogYGBERVNUSU5BVElPTmBgCiAgIFNwZWNpZnkgdGhlIGRpcmVjdG9yeSBvbiBkaXNrIHRvIHdoaWNoIGEgZmlsZSB3aWxsIGJlIGluc3RhbGxlZC4KLSAgSWYgYSBmdWxsIHBhdGggKHdpdGggYSBsZWFkaW5nIHNsYXNoIG9yIGRyaXZlIGxldHRlcikgaXMgZ2l2ZW4KLSAgaXQgaXMgdXNlZCBkaXJlY3RseS4gIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBnaXZlbiBpdCBpcyBpbnRlcnByZXRlZAotICByZWxhdGl2ZSB0byB0aGUgdmFsdWUgb2YgdGhlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIHZhcmlhYmxlLgorICBBcmd1bWVudHMgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhzLgorCisgIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBnaXZlbiBpdCBpcyBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgdmFsdWUKKyAgb2YgdGhlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIHZhcmlhYmxlLgogICBUaGUgcHJlZml4IGNhbiBiZSByZWxvY2F0ZWQgYXQgaW5zdGFsbCB0aW1lIHVzaW5nIHRoZSBgYERFU1RESVJgYAogICBtZWNoYW5pc20gZXhwbGFpbmVkIGluIHRoZSA6dmFyaWFibGU6YENNQUtFX0lOU1RBTExfUFJFRklYYCB2YXJpYWJsZQogICBkb2N1bWVudGF0aW9uLgogCisgIElmIGFuIGFic29sdXRlIHBhdGggKHdpdGggYSBsZWFkaW5nIHNsYXNoIG9yIGRyaXZlIGxldHRlcikgaXMgZ2l2ZW4KKyAgaXQgaXMgdXNlZCB2ZXJiYXRpbS4KKworICBBcyBhYnNvbHV0ZSBwYXRocyBhcmUgbm90IHN1cHBvcnRlZCBieSA6bWFudWFsOmBjcGFjayA8Y3BhY2soMSk+YCBpbnN0YWxsZXIKKyAgZ2VuZXJhdG9ycywgaXQgaXMgcHJlZmVyYWJsZSB0byB1c2UgcmVsYXRpdmUgcGF0aHMgdGhyb3VnaG91dC4KKyAgSW4gcGFydGljdWxhciwgdGhlcmUgaXMgbm8gbmVlZCB0byBtYWtlIHBhdGhzIGFic29sdXRlIGJ5IHByZXBlbmRpbmcKKyAgOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1BSRUZJWGA7IHRoaXMgcHJlZml4IGlzIHVzZWQgYnkgZGVmYXVsdCBpZgorICB0aGUgREVTVElOQVRJT04gaXMgYSByZWxhdGl2ZSBwYXRoLgorCiBgYFBFUk1JU1NJT05TYGAKICAgU3BlY2lmeSBwZXJtaXNzaW9ucyBmb3IgaW5zdGFsbGVkIGZpbGVzLiAgVmFsaWQgcGVybWlzc2lvbnMgYXJlCiAgIGBgT1dORVJfUkVBRGBgLCBgYE9XTkVSX1dSSVRFYGAsIGBgT1dORVJfRVhFQ1VURWBgLCBgYEdST1VQX1JFQURgYCwKQEAgLTExOSwzMSArMTMxLDM4IEBACiAgICAgICAgICAgKQogCiBUaGUgYGBUQVJHRVRTYGAgZm9ybSBzcGVjaWZpZXMgcnVsZXMgZm9yIGluc3RhbGxpbmcgdGFyZ2V0cyBmcm9tIGEKLXByb2plY3QuICBUaGVyZSBhcmUgc2V2ZXJhbCBraW5kcyBvZiB0YXJnZXQgZmlsZXMgdGhhdCBtYXkgYmUgaW5zdGFsbGVkOgorcHJvamVjdC4gIFRoZXJlIGFyZSBzZXZlcmFsIGtpbmRzIG9mIHRhcmdldCA6cmVmOmBPdXRwdXQgQXJ0aWZhY3RzYAordGhhdCBtYXkgYmUgaW5zdGFsbGVkOgogCiBgYEFSQ0hJVkVgYAotICBTdGF0aWMgbGlicmFyaWVzIGFyZSB0cmVhdGVkIGFzIGBgQVJDSElWRWBgIHRhcmdldHMsIGV4Y2VwdCB0aG9zZQotICBtYXJrZWQgd2l0aCB0aGUgYGBGUkFNRVdPUktgYCBwcm9wZXJ0eSBvbiBtYWNPUyAoc2VlIGBgRlJBTUVXT1JLYGAKLSAgYmVsb3cuKSBGb3IgRExMIHBsYXRmb3JtcyAoYWxsIFdpbmRvd3MtYmFzZWQgc3lzdGVtcyBpbmNsdWRpbmcKLSAgQ3lnd2luKSwgdGhlIERMTCBpbXBvcnQgbGlicmFyeSBpcyB0cmVhdGVkIGFzIGFuIGBgQVJDSElWRWBgIHRhcmdldC4KLSAgT24gQUlYLCB0aGUgbGlua2VyIGltcG9ydCBmaWxlIGNyZWF0ZWQgZm9yIGV4ZWN1dGFibGVzIHdpdGgKLSAgOnByb3BfdGd0OmBFTkFCTEVfRVhQT1JUU2AgaXMgdHJlYXRlZCBhcyBhbiBgYEFSQ0hJVkVgYCB0YXJnZXQuCisgIFRhcmdldCBhcnRpZmFjdHMgb2YgdGhpcyBraW5kIGluY2x1ZGU6CisKKyAgKiAqU3RhdGljIGxpYnJhcmllcyoKKyAgICAoZXhjZXB0IG9uIG1hY09TIHdoZW4gbWFya2VkIGFzIGBgRlJBTUVXT1JLYGAsIHNlZSBiZWxvdyk7CisgICogKkRMTCBpbXBvcnQgbGlicmFyaWVzKgorICAgIChvbiBhbGwgV2luZG93cy1iYXNlZCBzeXN0ZW1zIGluY2x1ZGluZyBDeWd3aW47IHRoZXkgaGF2ZSBleHRlbnNpb24KKyAgICBgYC5saWJgYCwgaW4gY29udHJhc3QgdG8gdGhlIGBgLmRsbGBgIGxpYnJhcmllcyB0aGF0IGdvIHRvIGBgUlVOVElNRWBgKTsKKyAgKiBPbiBBSVgsIHRoZSAqbGlua2VyIGltcG9ydCBmaWxlKiBjcmVhdGVkIGZvciBleGVjdXRhYmxlcyB3aXRoCisgICAgOnByb3BfdGd0OmBFTkFCTEVfRVhQT1JUU2AgZW5hYmxlZC4KIAogYGBMSUJSQVJZYGAKLSAgTW9kdWxlIGxpYnJhcmllcyBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMgYGBMSUJSQVJZYGAgdGFyZ2V0cy4gRm9yIG5vbi0KLSAgRExMIHBsYXRmb3JtcyBzaGFyZWQgbGlicmFyaWVzIGFyZSB0cmVhdGVkIGFzIGBgTElCUkFSWWBgIHRhcmdldHMsCi0gIGV4Y2VwdCB0aG9zZSBtYXJrZWQgd2l0aCB0aGUgYGBGUkFNRVdPUktgYCBwcm9wZXJ0eSBvbiBtYWNPUyAoc2VlCi0gIGBgRlJBTUVXT1JLYGAgYmVsb3cuKQorICBUYXJnZXQgYXJ0aWZhY3RzIG9mIHRoaXMga2luZCBpbmNsdWRlOgorCisgICogKlNoYXJlZCBsaWJyYXJpZXMqLCBleGNlcHQKKworICAgIC0gRExMcyAodGhlc2UgZ28gdG8gYGBSVU5USU1FYGAsIHNlZSBiZWxvdyksCisgICAgLSBvbiBtYWNPUyB3aGVuIG1hcmtlZCBhcyBgYEZSQU1FV09SS2BgIChzZWUgYmVsb3cpLgogCiBgYFJVTlRJTUVgYAotICBFeGVjdXRhYmxlcyBhcmUgdHJlYXRlZCBhcyBgYFJVTlRJTUVgYCBvYmplY3RzLCBleGNlcHQgdGhvc2UgbWFya2VkCi0gIHdpdGggdGhlIGBgTUFDT1NYX0JVTkRMRWBgIHByb3BlcnR5IG9uIG1hY09TIChzZWUgYGBCVU5ETEVgYCBiZWxvdy4pCi0gIEZvciBETEwgcGxhdGZvcm1zIChhbGwgV2luZG93cy1iYXNlZCBzeXN0ZW1zIGluY2x1ZGluZyBDeWd3aW4pLCB0aGUKLSAgRExMIHBhcnQgb2YgYSBzaGFyZWQgbGlicmFyeSBpcyB0cmVhdGVkIGFzIGEgYGBSVU5USU1FYGAgdGFyZ2V0LgorICBUYXJnZXQgYXJ0aWZhY3RzIG9mIHRoaXMga2luZCBpbmNsdWRlOgorCisgICogKkV4ZWN1dGFibGVzKgorICAgIChleGNlcHQgb24gbWFjT1Mgd2hlbiBtYXJrZWQgYXMgYGBNQUNPU1hfQlVORExFYGAsIHNlZSBgYEJVTkRMRWBgIGJlbG93KTsKKyAgKiBETExzIChvbiBhbGwgV2luZG93cy1iYXNlZCBzeXN0ZW1zIGluY2x1ZGluZyBDeWd3aW47IG5vdGUgdGhhdCB0aGUKKyAgICBhY2NvbXBhbnlpbmcgaW1wb3J0IGxpYnJhcmllcyBhcmUgb2Yga2luZCBgYEFSQ0hJVkVgYCkuCiAKIGBgT0JKRUNUU2BgCi0gIE9iamVjdCBsaWJyYXJpZXMgKGEgc2ltcGxlIGdyb3VwIG9mIG9iamVjdCBmaWxlcykgYXJlIGFsd2F5cyB0cmVhdGVkCi0gIGFzIGBgT0JKRUNUU2BgIHRhcmdldHMuCisgIE9iamVjdCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggKm9iamVjdCBsaWJyYXJpZXMqLgogCiBgYEZSQU1FV09SS2BgCiAgIEJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIG1hcmtlZCB3aXRoIHRoZSBgYEZSQU1FV09SS2BgCkBAIC02MzAsNiArNjQ5LDEzIEBACiBgYChJTVBPUlRFRF8pP0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyhfPENPTkZJRz4pP2BgIHRvIGJlIGV4cG9ydGVkLCB3aGVuCiBwb2xpY3kgOnBvbGljeTpgQ01QMDAyMmAgaXMgYGBORVdgYC4KIAorLi4gbm90ZTo6CisgIFRoZSBpbnN0YWxsZWQgYGA8ZXhwb3J0LW5hbWU+LmNtYWtlYGAgZmlsZSBtYXkgY29tZSB3aXRoIGFkZGl0aW9uYWwKKyAgcGVyLWNvbmZpZ3VyYXRpb24gYGA8ZXhwb3J0LW5hbWU+LSouY21ha2VgYCBmaWxlcyB0byBiZSBsb2FkZWQgYnkKKyAgZ2xvYmJpbmcuICBEbyBub3QgdXNlIGFuIGV4cG9ydCBuYW1lIHRoYXQgaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UKKyAgbmFtZSBpbiBjb21iaW5hdGlvbiB3aXRoIGluc3RhbGxpbmcgYSBgYDxwYWNrYWdlLW5hbWU+LWNvbmZpZy5jbWFrZWBgCisgIGZpbGUgb3IgdGhlIGxhdHRlciBtYXkgYmUgaW5jb3JyZWN0bHkgbWF0Y2hlZCBieSB0aGUgZ2xvYiBhbmQgbG9hZGVkLgorCiBXaGVuIGEgYGBDT01QT05FTlRgYCBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBsaXN0ZWQgYGA8Y29tcG9uZW50PmBgIGltcGxpY2l0bHkKIGRlcGVuZHMgb24gYWxsIGNvbXBvbmVudHMgbWVudGlvbmVkIGluIHRoZSBleHBvcnQgc2V0LiBUaGUgZXhwb3J0ZWQKIGBgPG5hbWU+LmNtYWtlYGAgZmlsZSB3aWxsIHJlcXVpcmUgZWFjaCBvZiB0aGUgZXhwb3J0ZWQgY29tcG9uZW50cyB0byBiZQpAQCAtNjg0LDYgKzcxMCwxMSBAQAogR2VuZXJhdGVkIEluc3RhbGxhdGlvbiBTY3JpcHQKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKKy4uIG5vdGU6OgorCisgIFVzZSBvZiB0aGlzIGZlYXR1cmUgaXMgbm90IHJlY29tbWVuZGVkLiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlCisgIGBgLS1pbnN0YWxsYGAgYXJndW1lbnQgb2YgOm1hbnVhbDpgY21ha2UoMSlgIGluc3RlYWQuCisKIFRoZSBgYGluc3RhbGwoKWBgIGNvbW1hbmQgZ2VuZXJhdGVzIGEgZmlsZSwgYGBjbWFrZV9pbnN0YWxsLmNtYWtlYGAsIGluc2lkZQogdGhlIGJ1aWxkIGRpcmVjdG9yeSwgd2hpY2ggaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBnZW5lcmF0ZWQgaW5zdGFsbCB0YXJnZXQKIGFuZCBieSBDUGFjay4gWW91IGNhbiBhbHNvIGludm9rZSB0aGlzIHNjcmlwdCBtYW51YWxseSB3aXRoIGBgY21ha2UgLVBgYC4gVGhpcwpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL2xpc3QucnN0IGIvSGVscC9jb21tYW5kL2xpc3QucnN0CmluZGV4IDUwYmY0MTcuLjRkMzM5YTAgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9saXN0LnJzdAorKysgYi9IZWxwL2NvbW1hbmQvbGlzdC5yc3QKQEAgLTMwOCw2ICszMDgsMTMgQEAKICogYGBTVFJJTkdgYDogU29ydHMgYSBsaXN0IG9mIHN0cmluZ3MgYWxwaGFiZXRpY2FsbHkuICBUaGlzIGlzIHRoZQogICBkZWZhdWx0IGJlaGF2aW9yIGlmIHRoZSBgYENPTVBBUkVgYCBvcHRpb24gaXMgbm90IGdpdmVuLgogKiBgYEZJTEVfQkFTRU5BTUVgYDogU29ydHMgYSBsaXN0IG9mIHBhdGhuYW1lcyBvZiBmaWxlcyBieSB0aGVpciBiYXNlbmFtZXMuCisqIGBgTkFUVVJBTGBgOiBTb3J0cyBhIGxpc3Qgb2Ygc3RyaW5ncyB1c2luZyBuYXR1cmFsIG9yZGVyCisgIChzZWUgYGBzdHJ2ZXJzY21wKDMpYGAgbWFudWFsKSwgaS5lLiBzdWNoIHRoYXQgY29udGlndW91cyBkaWdpdHMKKyAgYXJlIGNvbXBhcmVkIGFzIHdob2xlIG51bWJlcnMuCisgIEZvciBleGFtcGxlOiB0aGUgZm9sbG93aW5nIGxpc3QgYDEwLjAgMS4xIDIuMSA4LjAgMi4wIDMuMWAKKyAgd2lsbCBiZSBzb3J0ZWQgYXMgYDEuMSAyLjAgMi4xIDMuMSA4LjAgMTAuMGAgaWYgdGhlIGBgTkFUVVJBTGBgCisgIGNvbXBhcmlzb24gaXMgc2VsZWN0ZWQgd2hlcmUgaXQgd2lsbCBiZSBzb3J0ZWQgYXMKKyAgYDEuMSAxMC4wIDIuMCAyLjEgMy4xIDguMGAgd2l0aCB0aGUgYGBTVFJJTkdgYCBjb21wYXJpc29uLgogCiBVc2UgdGhlIGBgQ0FTRWBgIGtleXdvcmQgdG8gc2VsZWN0IGEgY2FzZSBzZW5zaXRpdmUgb3IgY2FzZSBpbnNlbnNpdGl2ZQogc29ydCBtb2RlLiAgVGhlIGBgPGNhc2U+YGAgb3B0aW9uIHNob3VsZCBiZSBvbmUgb2Y6CmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvbWFjcm8ucnN0IGIvSGVscC9jb21tYW5kL21hY3JvLnJzdAppbmRleCAwNWU1ZDc5Li43OTdhOTBkIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvbWFjcm8ucnN0CisrKyBiL0hlbHAvY29tbWFuZC9tYWNyby5yc3QKQEAgLTQyLDExICs0MiwxNSBAQAogICBmb28oKQogICBGb28oKQogICBGT08oKQorICBjbWFrZV9sYW5ndWFnZShDQUxMIGZvbykKIAogYW5kIHNvIG9uLiBIb3dldmVyLCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBzdGF5IHdpdGggdGhlCiBjYXNlIGNob3NlbiBpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4gIFR5cGljYWxseSBtYWNyb3MgdXNlCiBhbGwtbG93ZXJjYXNlIG5hbWVzLgogCitUaGUgOmNvbW1hbmQ6YGNtYWtlX2xhbmd1YWdlKENBTEwgLi4uKWAgY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvCitpbnZva2UgdGhlIG1hY3JvLgorCiBBcmd1bWVudHMKIF5eXl5eXl5eXgogCkBAIC05MSw2ICs5NSwxMiBAQAogZnJvbSB0aGUgc2NvcGUgb2YgdGhlIG1hY3JvIGNhbGwuICBUbyBhdm9pZCBjb25mdXNpb24sIGl0IGlzIHJlY29tbWVuZGVkCiB0byBhdm9pZCA6Y29tbWFuZDpgcmV0dXJuKClgIGluIG1hY3JvcyBhbHRvZ2V0aGVyLgogCitVbmxpa2UgYSBmdW5jdGlvbiwgdGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTmAsCis6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJgLAorOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAsCis6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FYCB2YXJpYWJsZXMgYXJlIG5vdAorc2V0IGZvciBhIG1hY3JvLgorCiAuLiBfYEFyZ3VtZW50IENhdmVhdHNgOgogCiBBcmd1bWVudCBDYXZlYXRzCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvbWFya19hc19hZHZhbmNlZC5yc3QgYi9IZWxwL2NvbW1hbmQvbWFya19hc19hZHZhbmNlZC5yc3QKaW5kZXggNTcxMmZiNC4uZTUyZTYyMyAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL21hcmtfYXNfYWR2YW5jZWQucnN0CisrKyBiL0hlbHAvY29tbWFuZC9tYXJrX2FzX2FkdmFuY2VkLnJzdApAQCAtMjIsMyArMjIsOSBAQAogbmV3IHZhbHVlcyB3aWxsIGJlIG1hcmtlZCBhcyBhZHZhbmNlZCwgYnV0IGlmIGEKIHZhcmlhYmxlIGFscmVhZHkgaGFzIGFuIGFkdmFuY2VkL25vbi1hZHZhbmNlZCBzdGF0ZSwKIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuCisKKy4uIG5vdGU6OgorCisgIFBvbGljeSA6cG9saWN5OmBDTVAwMTAyYCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgYGBtYXJrX2FzX2FkdmFuY2VkYGAKKyAgY2FsbC4gV2hlbiBzZXQgdG8gYGBORVdgYCwgdmFyaWFibGVzIHBhc3NlZCB0byB0aGlzIGNvbW1hbmQgd2hpY2ggYXJlIG5vdAorICBhbHJlYWR5IGluIHRoZSBjYWNoZSBhcmUgaWdub3JlZC4gU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMTAyYC4KZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9tZXNzYWdlLnJzdCBiL0hlbHAvY29tbWFuZC9tZXNzYWdlLnJzdAppbmRleCBjNjE0Mjg2Li42YmMwZTRjIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvbWVzc2FnZS5yc3QKKysrIGIvSGVscC9jb21tYW5kL21lc3NhZ2UucnN0CkBAIC0xLDEzICsxLDMzIEBACiBtZXNzYWdlCiAtLS0tLS0tCiAKLURpc3BsYXkgYSBtZXNzYWdlIHRvIHRoZSB1c2VyLgorTG9nIGEgbWVzc2FnZS4KKworU3lub3BzaXMKK15eXl5eXl5eCisKKy4uIHBhcnNlZC1saXRlcmFsOjoKKworICBgR2VuZXJhbCBtZXNzYWdlc2BfCisgICAgbWVzc2FnZShbPG1vZGU+XSAibWVzc2FnZSB0ZXh0IiAuLi4pCisKKyAgYFJlcG9ydGluZyBjaGVja3NgXworICAgIG1lc3NhZ2UoPGNoZWNrU3RhdGU+ICJtZXNzYWdlIHRleHQiIC4uLikKKworCitHZW5lcmFsIG1lc3NhZ2VzCiteXl5eXl5eXl5eXl5eXl5eCiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCi0gIG1lc3NhZ2UoWzxtb2RlPl0gIm1lc3NhZ2UgdG8gZGlzcGxheSIgLi4uKQorICBtZXNzYWdlKFs8bW9kZT5dICJtZXNzYWdlIHRleHQiIC4uLikKIAotVGhlIG9wdGlvbmFsIGBgPG1vZGU+YGAga2V5d29yZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIG1lc3NhZ2U6CitSZWNvcmQgdGhlIHNwZWNpZmllZCBtZXNzYWdlIHRleHQgaW4gdGhlIGxvZy4gIElmIG1vcmUgdGhhbiBvbmUgbWVzc2FnZQorc3RyaW5nIGlzIGdpdmVuLCB0aGV5IGFyZSBjb25jYXRlbmF0ZWQgaW50byBhIHNpbmdsZSBtZXNzYWdlIHdpdGggbm8KK3NlcGFyYXRvciBiZXR3ZWVuIHRoZSBzdHJpbmdzLgorCitUaGUgb3B0aW9uYWwgYGA8bW9kZT5gYCBrZXl3b3JkIGRldGVybWluZXMgdGhlIHR5cGUgb2YgbWVzc2FnZSwgd2hpY2gKK2luZmx1ZW5jZXMgdGhlIHdheSB0aGUgbWVzc2FnZSBpcyBoYW5kbGVkOgogCiBgYEZBVEFMX0VSUk9SYGAKICAgQ01ha2UgRXJyb3IsIHN0b3AgcHJvY2Vzc2luZyBhbmQgZ2VuZXJhdGlvbi4KQEAgLTU5LDEyICs3OSwxMDQgQEAKIG1lc3NhZ2VzIG9uZSBhdCBhIHRpbWUgb24gYSBzdGF0dXMgbGluZSBhbmQgb3RoZXIgbWVzc2FnZXMgaW4gYW4KIGludGVyYWN0aXZlIHBvcC11cCBib3guICBUaGUgYGAtLWxvZy1sZXZlbGBgIGNvbW1hbmQtbGluZSBvcHRpb24gdG8gZWFjaCBvZgogdGhlc2UgdG9vbHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGljaCBtZXNzYWdlcyB3aWxsIGJlIHNob3duLgorVG8gbWFrZSBhIGxvZyBsZXZlbCBwZXJzaXN0IGJldHdlZW4gQ01ha2UgcnVucywgdGhlCis6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfTE9HX0xFVkVMYCB2YXJpYWJsZSBjYW4gYmUgc2V0IGluc3RlYWQuCitOb3RlIHRoYXQgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBjYWNoZSB2YXJpYWJsZS4KIAotTWVzc2FnZXMgb2YgbG9nIGxldmVscyBgYE5PVElDRWBgIGFuZCBiZWxvdyB3aWxsIGFsc28gaGF2ZSBlYWNoIGxpbmUgcHJlY2VkZWQKK01lc3NhZ2VzIG9mIGxvZyBsZXZlbHMgYGBOT1RJQ0VgYCBhbmQgYmVsb3cgd2lsbCBoYXZlIGVhY2ggbGluZSBwcmVjZWRlZAogYnkgdGhlIGNvbnRlbnQgb2YgdGhlIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9JTkRFTlRgIHZhcmlhYmxlIChjb252ZXJ0ZWQgdG8KIGEgc2luZ2xlIHN0cmluZyBieSBjb25jYXRlbmF0aW5nIGl0cyBsaXN0IGl0ZW1zKS4gIEZvciBgYFNUQVRVU2BgIHRvIGBgVFJBQ0VgYAogbWVzc2FnZXMsIHRoaXMgaW5kZW50aW5nIGNvbnRlbnQgd2lsbCBiZSBpbnNlcnRlZCBhZnRlciB0aGUgaHlwaGVucy4KIAorTWVzc2FnZXMgb2YgbG9nIGxldmVscyBgYE5PVElDRWBgIGFuZCBiZWxvdyBjYW4gYWxzbyBoYXZlIGVhY2ggbGluZSBwcmVjZWRlZAord2l0aCBjb250ZXh0IG9mIHRoZSBmb3JtIGBgW3NvbWUuY29udGV4dC5leGFtcGxlXWBgLiAgVGhlIGNvbnRlbnQgYmV0d2VlbiB0aGUKK3NxdWFyZSBicmFja2V0cyBpcyBvYnRhaW5lZCBieSBjb252ZXJ0aW5nIHRoZSA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfQ09OVEVYVGAKK2xpc3QgdmFyaWFibGUgdG8gYSBkb3Qtc2VwYXJhdGVkIHN0cmluZy4gIFRoZSBtZXNzYWdlIGNvbnRleHQgd2lsbCBhbHdheXMKK2FwcGVhciBiZWZvcmUgYW55IGluZGVudGluZyBjb250ZW50IGJ1dCBhZnRlciBhbnkgYXV0b21hdGljYWxseSBhZGRlZCBsZWFkaW5nCitoeXBoZW5zLiBCeSBkZWZhdWx0LCBtZXNzYWdlIGNvbnRleHQgaXMgbm90IHNob3duLCBpdCBoYXMgdG8gYmUgZXhwbGljaXRseQorZW5hYmxlZCBieSBnaXZpbmcgdGhlIDptYW51YWw6YGNtYWtlIDxjbWFrZSgxKT5gIGBgLS1sb2ctY29udGV4dGBgCitjb21tYW5kLWxpbmUgb3B0aW9uIG9yIGJ5IHNldHRpbmcgdGhlIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1dgCit2YXJpYWJsZSB0byB0cnVlLiAgU2VlIHRoZSA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfQ09OVEVYVGAgZG9jdW1lbnRhdGlvbiBmb3IKK3VzYWdlIGV4YW1wbGVzLgorCiBDTWFrZSBXYXJuaW5nIGFuZCBFcnJvciBtZXNzYWdlIHRleHQgZGlzcGxheXMgdXNpbmcgYSBzaW1wbGUgbWFya3VwCiBsYW5ndWFnZS4gIE5vbi1pbmRlbnRlZCB0ZXh0IGlzIGZvcm1hdHRlZCBpbiBsaW5lLXdyYXBwZWQgcGFyYWdyYXBocwogZGVsaW1pdGVkIGJ5IG5ld2xpbmVzLiAgSW5kZW50ZWQgdGV4dCBpcyBjb25zaWRlcmVkIHByZS1mb3JtYXR0ZWQuCisKKworUmVwb3J0aW5nIGNoZWNrcworXl5eXl5eXl5eXl5eXl5eXgorCitBIGNvbW1vbiBwYXR0ZXJuIGluIENNYWtlIG91dHB1dCBpcyBhIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGUgc3RhcnQgb2Ygc29tZQorc29ydCBvZiBjaGVjaywgZm9sbG93ZWQgYnkgYW5vdGhlciBtZXNzYWdlIHJlcG9ydGluZyB0aGUgcmVzdWx0IG9mIHRoYXQgY2hlY2suCitGb3IgZXhhbXBsZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yIHNvbWVoZWFkZXIuaCIpCisgICMuLi4gZG8gdGhlIGNoZWNrcywgc2V0IGNoZWNrU3VjY2VzcyB3aXRoIHRoZSByZXN1bHQKKyAgaWYoY2hlY2tTdWNjZXNzKQorICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBzb21laGVhZGVyLmggLSBmb3VuZCIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBzb21laGVhZGVyLmggLSBub3QgZm91bmQiKQorICBlbmRpZigpCisKK1RoaXMgY2FuIGJlIG1vcmUgcm9idXN0bHkgYW5kIGNvbnZlbmllbnRseSBleHByZXNzZWQgdXNpbmcgdGhlIGBgQ0hFQ0tfLi4uYGAKK2tleXdvcmQgZm9ybSBvZiB0aGUgYGBtZXNzYWdlKClgYCBjb21tYW5kOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBtZXNzYWdlKDxjaGVja1N0YXRlPiAibWVzc2FnZSIgLi4uKQorCit3aGVyZSBgYDxjaGVja1N0YXRlPmBgIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgYGBDSEVDS19TVEFSVGBgCisgICAgUmVjb3JkIGEgY29uY2lzZSBtZXNzYWdlIGFib3V0IHRoZSBjaGVjayBhYm91dCB0byBiZSBwZXJmb3JtZWQuCisKKyAgYGBDSEVDS19QQVNTYGAKKyAgICBSZWNvcmQgYSBzdWNjZXNzZnVsIHJlc3VsdCBmb3IgYSBjaGVjay4KKworICBgYENIRUNLX0ZBSUxgYAorICAgIFJlY29yZCBhbiB1bnN1Y2Nlc3NmdWwgcmVzdWx0IGZvciBhIGNoZWNrLgorCitXaGVuIHJlY29yZGluZyBhIGNoZWNrIHJlc3VsdCwgdGhlIGNvbW1hbmQgcmVwZWF0cyB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtb3N0CityZWNlbnRseSBzdGFydGVkIGNoZWNrIGZvciB3aGljaCBubyByZXN1bHQgaGFzIHlldCBiZWVuIHJlcG9ydGVkLCB0aGVuIHNvbWUKK3NlcGFyYXRvciBjaGFyYWN0ZXJzIGFuZCB0aGVuIHRoZSBtZXNzYWdlIHRleHQgcHJvdmlkZWQgYWZ0ZXIgdGhlCitgYENIRUNLX1BBU1NgYCBvciBgYENIRUNLX0ZBSUxgYCBrZXl3b3JkLiAgQ2hlY2sgbWVzc2FnZXMgYXJlIGFsd2F5cyByZXBvcnRlZAorYXQgYGBTVEFUVVNgYCBsb2cgbGV2ZWwuCisKK0NoZWNrcyBtYXkgYmUgbmVzdGVkIGFuZCBldmVyeSBgYENIRUNLX1NUQVJUYGAgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUKK21hdGNoaW5nIGBgQ0hFQ0tfUEFTU2BgIG9yIGBgQ0hFQ0tfRkFJTGBgLgorVGhlIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9JTkRFTlRgIHZhcmlhYmxlIGNhbiBhbHNvIGJlIHVzZWQgdG8gYWRkCitpbmRlbnRpbmcgdG8gbmVzdGVkIGNoZWNrcyBpZiBkZXNpcmVkLiAgRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkZpbmRpbmcgbXkgdGhpbmdzIikKKyAgbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9JTkRFTlQgIiAgIikKKyAgdW5zZXQobWlzc2luZ0NvbXBvbmVudHMpCisKKyAgbWVzc2FnZShDSEVDS19TVEFSVCAiRmluZGluZyBwYXJ0QSIpCisgICMgLi4uIGRvIGNoZWNrLCBhc3N1bWUgd2UgZmluZCBBCisgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZm91bmQiKQorCisgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkZpbmRpbmcgcGFydEIiKQorICAjIC4uLiBkbyBjaGVjaywgYXNzdW1lIHdlIGRvbid0IGZpbmQgQgorICBsaXN0KEFQUEVORCBtaXNzaW5nQ29tcG9uZW50cyBCKQorICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCisKKyAgbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKKyAgaWYobWlzc2luZ0NvbXBvbmVudHMpCisgICAgbWVzc2FnZShDSEVDS19GQUlMICJtaXNzaW5nIGNvbXBvbmVudHM6ICR7bWlzc2luZ0NvbXBvbmVudHN9IikKKyAgZWxzZSgpCisgICAgbWVzc2FnZShDSEVDS19QQVNTICJhbGwgY29tcG9uZW50cyBmb3VuZCIpCisgIGVuZGlmKCkKKworT3V0cHV0IGZyb20gdGhlIGFib3ZlIHdvdWxkIGFwcGVhciBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOjoKKworICAtLSBGaW5kaW5nIG15IHRoaW5ncworICAtLSAgIEZpbmRpbmcgcGFydEEKKyAgLS0gICBGaW5kaW5nIHBhcnRBIC0gZm91bmQKKyAgLS0gICBGaW5kaW5nIHBhcnRCCisgIC0tICAgRmluZGluZyBwYXJ0QiAtIG5vdCBmb3VuZAorICAtLSBGaW5kaW5nIG15IHRoaW5ncyAtIG1pc3NpbmcgY29tcG9uZW50czogQgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL29wdGlvbi5yc3QgYi9IZWxwL2NvbW1hbmQvb3B0aW9uLnJzdAppbmRleCA4OTU2MzA3Li4wMmI4ZGFjIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvb3B0aW9uLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvb3B0aW9uLnJzdApAQCAtOSw3ICs5LDcgQEAKIAogUHJvdmlkZXMgYW4gb3B0aW9uIGZvciB0aGUgdXNlciB0byBzZWxlY3QgYXMgYGBPTmBgIG9yIGBgT0ZGYGAuCiBJZiBubyBpbml0aWFsIGBgPHZhbHVlPmBgIGlzIHByb3ZpZGVkLCBgYE9GRmBgIGlzIHVzZWQuCi1JZiBgYDx2YXJpYWJsZT5gYCBpcyBhbHJlYWR5IHNldCBhcyBhIG5vcm1hbCB2YXJpYWJsZQorSWYgYGA8dmFyaWFibGU+YGAgaXMgYWxyZWFkeSBzZXQgYXMgYSBub3JtYWwgb3IgY2FjaGUgdmFyaWFibGUsCiB0aGVuIHRoZSBjb21tYW5kIGRvZXMgbm90aGluZyAoc2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMDc3YCkuCiAKIElmIHlvdSBoYXZlIG9wdGlvbnMgdGhhdCBkZXBlbmQgb24gdGhlIHZhbHVlcyBvZiBvdGhlciBvcHRpb25zLCBzZWUKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9wcm9qZWN0LnJzdCBiL0hlbHAvY29tbWFuZC9wcm9qZWN0LnJzdAppbmRleCAzOTUxNDU2Li5iNjA5M2QzIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvcHJvamVjdC5yc3QKKysrIGIvSGVscC9jb21tYW5kL3Byb2plY3QucnN0CkBAIC0xMDIsOSArMTAyLDEyIEBACiBDb2RlIEluamVjdGlvbgogXl5eXl5eXl5eXl5eXl4KIAotSWYgdGhlIDp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRWAgdmFyaWFibGUgaXMgc2V0LCB0aGUgZmlsZQotcG9pbnRlZCB0byBieSB0aGF0IHZhcmlhYmxlIHdpbGwgYmUgaW5jbHVkZWQgYXMgdGhlIGZpcnN0IHN0ZXAgb2YgdGhlCitJZiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUX0lOQ0xVREVfQkVGT1JFYCBvcgorOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVfQkVGT1JFYCB2YXJpYWJsZXMgYXJlIHNldCwKK3RoZSBmaWxlcyB0aGV5IHBvaW50IHRvIHdpbGwgYmUgaW5jbHVkZWQgYXMgdGhlIGZpcnN0IHN0ZXAgb2YgdGhlCiBgYHByb2plY3QoKWBgIGNvbW1hbmQuCitJZiBib3RoIGFyZSBzZXQsIHRoZW4gOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUX0lOQ0xVREVfQkVGT1JFYCB3aWxsIGJlCitpbmNsdWRlZCBiZWZvcmUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVfQkVGT1JFYC4KIAogSWYgdGhlIDp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFYCBvcgogOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVgIHZhcmlhYmxlcyBhcmUgc2V0LCB0aGUgZmlsZXMKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9zZXBhcmF0ZV9hcmd1bWVudHMucnN0IGIvSGVscC9jb21tYW5kL3NlcGFyYXRlX2FyZ3VtZW50cy5yc3QKaW5kZXggZmJjYTg1OS4uYWIzZDVjMSAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3NlcGFyYXRlX2FyZ3VtZW50cy5yc3QKKysrIGIvSGVscC9jb21tYW5kL3NlcGFyYXRlX2FyZ3VtZW50cy5yc3QKQEAgLTE5LDcgKzE5LDcgQEAKIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGtleXdvcmRzOgogCiBgYFVOSVhfQ09NTUFORGBgCi0gIEFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGJ5IHVucXVvdGVkIHdoaXRlc3BhY2UuCisgIEFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IHVucXVvdGVkIHdoaXRlc3BhY2UuCiAgIEJvdGggc2luZ2xlLXF1b3RlIGFuZCBkb3VibGUtcXVvdGUgcGFpcnMgYXJlIHJlc3BlY3RlZC4KICAgQSBiYWNrc2xhc2ggZXNjYXBlcyB0aGUgbmV4dCBsaXRlcmFsIGNoYXJhY3RlciAoYGBcImBgIGlzIGBgImBgKTsKICAgdGhlcmUgYXJlIG5vIHNwZWNpYWwgZXNjYXBlcyAoYGBcbmBgIGlzIGp1c3QgYGBuYGApLgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3NldF9wcm9wZXJ0eS5yc3QgYi9IZWxwL2NvbW1hbmQvc2V0X3Byb3BlcnR5LnJzdAppbmRleCBlYzA4YzhmLi45M2MyZDljIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvc2V0X3Byb3BlcnR5LnJzdAorKysgYi9IZWxwL2NvbW1hbmQvc2V0X3Byb3BlcnR5LnJzdApAQCAtOCwxMiArOCwxNCBAQAogICBzZXRfcHJvcGVydHkoPEdMT0JBTCAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgRElSRUNUT1JZIFs8ZGlyPl0gICAgICAgICAgIHwKICAgICAgICAgICAgICAgICBUQVJHRVQgICAgWzx0YXJnZXQxPiAuLi5dICAgfAotICAgICAgICAgICAgICAgIFNPVVJDRSAgICBbPHNyYzE+IC4uLl0gICAgICB8CisgICAgICAgICAgICAgICAgU09VUkNFICAgIFs8c3JjMT4gLi4uXQorICAgICAgICAgICAgICAgICAgICAgICAgICBbRElSRUNUT1JZIDxkaXJzPiAuLi5dIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1RBUkdFVF9ESVJFQ1RPUlkgPHRhcmdldHM+IC4uLl0KICAgICAgICAgICAgICAgICBJTlNUQUxMICAgWzxmaWxlMT4gLi4uXSAgICAgfAogICAgICAgICAgICAgICAgIFRFU1QgICAgICBbPHRlc3QxPiAuLi5dICAgICB8CiAgICAgICAgICAgICAgICAgQ0FDSEUgICAgIFs8ZW50cnkxPiAuLi5dICAgID4KICAgICAgICAgICAgICAgIFtBUFBFTkRdIFtBUFBFTkRfU1RSSU5HXQotICAgICAgICAgICAgICAgUFJPUEVSVFkgPG5hbWU+IFt2YWx1ZTEgLi4uXSkKKyAgICAgICAgICAgICAgIFBST1BFUlRZIDxuYW1lPiBbPHZhbHVlMT4gLi4uXSkKIAogU2V0cyBvbmUgcHJvcGVydHkgb24gemVybyBvciBtb3JlIG9iamVjdHMgb2YgYSBzY29wZS4KIApAQCAtMzMsOSArMzUsMjMgQEAKICAgU2VlIGFsc28gdGhlIDpjb21tYW5kOmBzZXRfdGFyZ2V0X3Byb3BlcnRpZXNgIGNvbW1hbmQuCiAKIGBgU09VUkNFYGAKLSAgU2NvcGUgbWF5IG5hbWUgemVybyBvciBtb3JlIHNvdXJjZSBmaWxlcy4gIE5vdGUgdGhhdCBzb3VyY2UKLSAgZmlsZSBwcm9wZXJ0aWVzIGFyZSB2aXNpYmxlIG9ubHkgdG8gdGFyZ2V0cyBhZGRlZCBpbiB0aGUgc2FtZQotICBkaXJlY3RvcnkgKGBgQ01ha2VMaXN0cy50eHRgYCkuCisgIFNjb3BlIG1heSBuYW1lIHplcm8gb3IgbW9yZSBzb3VyY2UgZmlsZXMuICBCeSBkZWZhdWx0LCBzb3VyY2UgZmlsZSBwcm9wZXJ0aWVzCisgIGFyZSBvbmx5IHZpc2libGUgdG8gdGFyZ2V0cyBhZGRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKGBgQ01ha2VMaXN0cy50eHRgYCkuCisgIFZpc2liaWxpdHkgY2FuIGJlIHNldCBpbiBvdGhlciBkaXJlY3Rvcnkgc2NvcGVzIHVzaW5nIG9uZSBvciBib3RoIG9mIHRoZQorICBmb2xsb3dpbmcgc3ViLW9wdGlvbnM6CisKKyAgYGBESVJFQ1RPUlkgPGRpcnM+Li4uYGAKKyAgICBUaGUgc291cmNlIGZpbGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgaW4gZWFjaCBvZiB0aGUgYGA8ZGlycz5gYAorICAgIGRpcmVjdG9yaWVzJyBzY29wZXMuICBDTWFrZSBtdXN0IGFscmVhZHkga25vdyBhYm91dCBlYWNoIG9mIHRoZXNlCisgICAgc291cmNlIGRpcmVjdG9yaWVzLCBlaXRoZXIgYnkgaGF2aW5nIGFkZGVkIHRoZW0gdGhyb3VnaCBhIGNhbGwgdG8KKyAgICA6Y29tbWFuZDpgYWRkX3N1YmRpcmVjdG9yeWAgb3IgaXQgYmVpbmcgdGhlIHRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5LgorICAgIFJlbGF0aXZlIHBhdGhzIGFyZSB0cmVhdGVkIGFzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkuCisKKyAgYGBUQVJHRVRfRElSRUNUT1JZIDx0YXJnZXRzPi4uLmBgCisgICAgVGhlIHNvdXJjZSBmaWxlIHByb3BlcnR5IHdpbGwgYmUgc2V0IGluIGVhY2ggb2YgdGhlIGRpcmVjdG9yeSBzY29wZXMKKyAgICB3aGVyZSBhbnkgb2YgdGhlIHNwZWNpZmllZCBgYDx0YXJnZXRzPmBgIHdlcmUgY3JlYXRlZCAodGhlIGBgPHRhcmdldHM+YGAKKyAgICBtdXN0IHRoZXJlZm9yZSBhbHJlYWR5IGV4aXN0KS4KKwogICBTZWUgYWxzbyB0aGUgOmNvbW1hbmQ6YHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllc2AgY29tbWFuZC4KIAogYGBJTlNUQUxMYGAKQEAgLTY2LDcgKzgyLDggQEAKIHByb3BlcnR5IHZhbHVlIGluIHRoZSBmb3JtIG9mIGEgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0LgogCiBJZiB0aGUgYGBBUFBFTkRgYCBvcHRpb24gaXMgZ2l2ZW4gdGhlIGxpc3QgaXMgYXBwZW5kZWQgdG8gYW55IGV4aXN0aW5nCi1wcm9wZXJ0eSB2YWx1ZS4gIElmIHRoZSBgYEFQUEVORF9TVFJJTkdgYCBvcHRpb24gaXMgZ2l2ZW4gdGhlIHN0cmluZyBpcworcHJvcGVydHkgdmFsdWUgKGV4Y2VwdCB0aGF0IGVtcHR5IHZhbHVlcyBhcmUgaWdub3JlZCBhbmQgbm90IGFwcGVuZGVkKS4KK0lmIHRoZSBgYEFQUEVORF9TVFJJTkdgYCBvcHRpb24gaXMgZ2l2ZW4gdGhlIHN0cmluZyBpcwogYXBwZW5kZWQgdG8gYW55IGV4aXN0aW5nIHByb3BlcnR5IHZhbHVlIGFzIHN0cmluZywgaS5lLiBpdCByZXN1bHRzIGluIGEKIGxvbmdlciBzdHJpbmcgYW5kIG5vdCBhIGxpc3Qgb2Ygc3RyaW5ncy4gIFdoZW4gdXNpbmcgYGBBUFBFTkRgYCBvcgogYGBBUFBFTkRfU1RSSU5HYGAgd2l0aCBhIHByb3BlcnR5IGRlZmluZWQgdG8gc3VwcG9ydCBgYElOSEVSSVRFRGBgCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzLnJzdCBiL0hlbHAvY29tbWFuZC9zZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMucnN0CmluZGV4IGFiOTVkNzAuLjk1NThiNDAgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC9zZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMucnN0CisrKyBiL0hlbHAvY29tbWFuZC9zZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMucnN0CkBAIC01LDE1ICs1LDMzIEBACiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCi0gIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhbZmlsZTEgW2ZpbGUyIFsuLi5dXV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgcHJvcDEgdmFsdWUxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcDIgdmFsdWUyIFsuLi5dXSkKKyAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKDxmaWxlcz4gLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRElSRUNUT1JZIDxkaXJzPiAuLi5dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVEFSR0VUX0RJUkVDVE9SWSA8dGFyZ2V0cz4gLi4uXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyA8cHJvcDE+IDx2YWx1ZTE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPHByb3AyPiA8dmFsdWUyPl0gLi4uKQogCiBTZXRzIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyB1c2luZyBhIGtleS92YWx1ZSBwYWlyZWQKIGxpc3QuCiAKK0J5IGRlZmF1bHQsIHNvdXJjZSBmaWxlIHByb3BlcnRpZXMgYXJlIG9ubHkgdmlzaWJsZSB0byB0YXJnZXRzIGFkZGVkIGluIHRoZQorc2FtZSBkaXJlY3RvcnkgKGBgQ01ha2VMaXN0cy50eHRgYCkuICBWaXNpYmlsaXR5IGNhbiBiZSBzZXQgaW4gb3RoZXIgZGlyZWN0b3J5CitzY29wZXMgdXNpbmcgb25lIG9yIGJvdGggb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCitgYERJUkVDVE9SWSA8ZGlycz4uLi5gYAorICBUaGUgc291cmNlIGZpbGUgcHJvcGVydGllcyB3aWxsIGJlIHNldCBpbiBlYWNoIG9mIHRoZSBgYDxkaXJzPmBgCisgIGRpcmVjdG9yaWVzJyBzY29wZXMuICBDTWFrZSBtdXN0IGFscmVhZHkga25vdyBhYm91dCBlYWNoIG9mIHRoZXNlCisgIHNvdXJjZSBkaXJlY3RvcmllcywgZWl0aGVyIGJ5IGhhdmluZyBhZGRlZCB0aGVtIHRocm91Z2ggYSBjYWxsIHRvCisgIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YCBvciBpdCBiZWluZyB0aGUgdG9wIGxldmVsIHNvdXJjZSBkaXJlY3RvcnkuCisgIFJlbGF0aXZlIHBhdGhzIGFyZSB0cmVhdGVkIGFzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkuCisKK2BgVEFSR0VUX0RJUkVDVE9SWSA8dGFyZ2V0cz4uLi5gYAorICBUaGUgc291cmNlIGZpbGUgcHJvcGVydGllcyB3aWxsIGJlIHNldCBpbiBlYWNoIG9mIHRoZSBkaXJlY3Rvcnkgc2NvcGVzCisgIHdoZXJlIGFueSBvZiB0aGUgc3BlY2lmaWVkIGBgPHRhcmdldHM+YGAgd2VyZSBjcmVhdGVkICh0aGUgYGA8dGFyZ2V0cz5gYAorICBtdXN0IHRoZXJlZm9yZSBhbHJlYWR5IGV4aXN0KS4KKworVXNlIDpjb21tYW5kOmBnZXRfc291cmNlX2ZpbGVfcHJvcGVydHlgIHRvIGdldCBwcm9wZXJ0eSB2YWx1ZXMuCiBTZWUgYWxzbyB0aGUgOmNvbW1hbmQ6YHNldF9wcm9wZXJ0eShTT1VSQ0UpYCBjb21tYW5kLgogCiBTZWUgOnJlZjpgU291cmNlIEZpbGUgUHJvcGVydGllc2AgZm9yIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMga25vd24KLXRvIENNYWtlLiAgU291cmNlIGZpbGUgcHJvcGVydGllcyBhcmUgdmlzaWJsZSBvbmx5IHRvIHRhcmdldHMgYWRkZWQKLWluIHRoZSBzYW1lIGRpcmVjdG9yeSAoYGBDTWFrZUxpc3RzLnR4dGBgKS4KK3RvIENNYWtlLgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3NvdXJjZV9ncm91cC5yc3QgYi9IZWxwL2NvbW1hbmQvc291cmNlX2dyb3VwLnJzdAppbmRleCA2NjIzYzk4Li41YWU5ZTUxIDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvc291cmNlX2dyb3VwLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvc291cmNlX2dyb3VwLnJzdApAQCAtMzcsMTEgKzM3LDEzIEBACiBJZiBubyBncm91cCBleHBsaWNpdGx5IGxpc3RzIHRoZSBmaWxlLCB0aGUgKmxhc3QqIGdyb3VwIHdob3NlCiByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hlcyB0aGUgZmlsZSB3aWxsIGJlIGZhdm9yZWQuCiAKLVRoZSBgYDxuYW1lPmBgIG9mIHRoZSBncm91cCBhbmQgYGA8cHJlZml4PmBgIGFyZ3VtZW50IG1heSBjb250YWluIGJhY2tzbGFzaGVzCi10byBzcGVjaWZ5IHN1Ymdyb3VwczoKK1RoZSBgYDxuYW1lPmBgIG9mIHRoZSBncm91cCBhbmQgYGA8cHJlZml4PmBgIGFyZ3VtZW50IG1heSBjb250YWluIGZvcndhcmQKK3NsYXNoZXMgb3IgYmFja3NsYXNoZXMgdG8gc3BlY2lmeSBzdWJncm91cHMuICBCYWNrc2xhc2hlcyBuZWVkIHRvIGJlIGVzY2FwZWQKK2FwcHJvcHJpYXRlbHk6CiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCisgIHNvdXJjZV9ncm91cChiYXNlL3N1YmRpciAuLi4pCiAgIHNvdXJjZV9ncm91cChvdXRlclxcaW5uZXIgLi4uKQogICBzb3VyY2VfZ3JvdXAoVFJFRSA8cm9vdD4gUFJFRklYIHNvdXJjZXNcXGluYyAuLi4pCiAKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC9zdHJpbmcucnN0IGIvSGVscC9jb21tYW5kL3N0cmluZy5yc3QKaW5kZXggODFhMjA2MS4uY2ZjZjkxNCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3N0cmluZy5yc3QKKysrIGIvSGVscC9jb21tYW5kL3N0cmluZy5yc3QKQEAgLTExLDggKzExLDYgQEAKICAgYFNlYXJjaCBhbmQgUmVwbGFjZWBfCiAgICAgc3RyaW5nKGBGSU5EYF8gPHN0cmluZz4gPHN1YnN0cmluZz4gPG91dC12YXI+IFsuLi5dKQogICAgIHN0cmluZyhgUkVQTEFDRWBfIDxtYXRjaC1zdHJpbmc+IDxyZXBsYWNlLXN0cmluZz4gPG91dC12YXI+IDxpbnB1dD4uLi4pCi0KLSAgYFJlZ3VsYXIgRXhwcmVzc2lvbnNgXwogICAgIHN0cmluZyhgUkVHRVggTUFUQ0hgXyA8bWF0Y2gtcmVnZXg+IDxvdXQtdmFyPiA8aW5wdXQ+Li4uKQogICAgIHN0cmluZyhgUkVHRVggTUFUQ0hBTExgXyA8bWF0Y2gtcmVnZXg+IDxvdXQtdmFyPiA8aW5wdXQ+Li4uKQogICAgIHN0cmluZyhgUkVHRVggUkVQTEFDRWBfIDxtYXRjaC1yZWdleD4gPHJlcGxhY2UtZXhwcj4gPG91dC12YXI+IDxpbnB1dD4uLi4pCkBAIC0zOCw2ICszNiw3IEBACiAKICAgYEdlbmVyYXRpb25gXwogICAgIHN0cmluZyhgQVNDSUlgXyA8bnVtYmVyPi4uLiA8b3V0LXZhcj4pCisgICAgc3RyaW5nKGBIRVhgXyA8c3RyaW5nPiA8b3V0LXZhcj4pCiAgICAgc3RyaW5nKGBDT05GSUdVUkVgXyA8c3RyaW5nPiA8b3V0LXZhcj4gWy4uLl0pCiAgICAgc3RyaW5nKGBNQUtFX0NfSURFTlRJRklFUmBfIDxzdHJpbmc+IDxvdXQtdmFyPikKICAgICBzdHJpbmcoYFJBTkRPTWBfIFs8b3B0aW9uPi4uLl0gPG91dC12YXI+KQpAQCAtNDcsNiArNDYsOSBAQAogU2VhcmNoIGFuZCBSZXBsYWNlCiBeXl5eXl5eXl5eXl5eXl5eXl4KIAorU2VhcmNoIGFuZCBSZXBsYWNlIFdpdGggUGxhaW4gU3RyaW5ncworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgorCiAuLiBfRklORDoKIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCkBAIC03NCw4ICs3Niw4IEBACiBSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiBgYDxtYXRjaF9zdHJpbmc+YGAgaW4gdGhlIGBgPGlucHV0PmBgCiB3aXRoIGBgPHJlcGxhY2Vfc3RyaW5nPmBgIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBgYDxvdXRwdXRfdmFyaWFibGU+YGAuCiAKLVJlZ3VsYXIgRXhwcmVzc2lvbnMKLV5eXl5eXl5eXl5eXl5eXl5eXl4KK1NlYXJjaCBhbmQgUmVwbGFjZSBXaXRoIFJlZ3VsYXIgRXhwcmVzc2lvbnMKKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKIAogLi4gX2BSRUdFWCBNQVRDSGA6CiAKQEAgLTg3LDYgKzg5LDcgQEAKIE1hdGNoIHRoZSBgYDxyZWd1bGFyX2V4cHJlc3Npb24+YGAgb25jZSBhbmQgc3RvcmUgdGhlIG1hdGNoIGluIHRoZQogYGA8b3V0cHV0X3ZhcmlhYmxlPmBgLgogQWxsIGBgPGlucHV0PmBgIGFyZ3VtZW50cyBhcmUgY29uY2F0ZW5hdGVkIGJlZm9yZSBtYXRjaGluZy4KK1JlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIHNwZWNpZmllZCBpbiB0aGUgc3Vic2VjdGlvbiBqdXN0IGJlbG93LgogCiAuLiBfYFJFR0VYIE1BVENIQUxMYDoKIApAQCAtMzUzLDYgKzM1NiwxNiBAQAogCiBDb252ZXJ0IGFsbCBudW1iZXJzIGludG8gY29ycmVzcG9uZGluZyBBU0NJSSBjaGFyYWN0ZXJzLgogCisuLiBfSEVYOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBzdHJpbmcoSEVYIDxzdHJpbmc+IDxvdXRwdXRfdmFyaWFibGU+KQorCitDb252ZXJ0IGVhY2ggYnl0ZSBpbiB0aGUgaW5wdXQgYGA8c3RyaW5nPmBgIHRvIGl0cyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbgorYW5kIHN0b3JlIHRoZSBjb25jYXRlbmF0ZWQgaGV4IGRpZ2l0cyBpbiB0aGUgYGA8b3V0cHV0X3ZhcmlhYmxlPmBgLiBMZXR0ZXJzIGluCit0aGUgb3V0cHV0IChgYGFgYCB0aHJvdWdoIGBgZmBgKSBhcmUgaW4gbG93ZXJjYXNlLgorCiAuLiBfQ09ORklHVVJFOgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKZGlmZiAtLWdpdCBhL0hlbHAvY29tbWFuZC90YXJnZXRfY29tcGlsZV9mZWF0dXJlcy5yc3QgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMucnN0CmluZGV4IDkyNzFjZDUuLmI1MGJlMzQgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC90YXJnZXRfY29tcGlsZV9mZWF0dXJlcy5yc3QKKysrIGIvSGVscC9jb21tYW5kL3RhcmdldF9jb21waWxlX2ZlYXR1cmVzLnJzdApAQCAtMSw2ICsxLDggQEAKIHRhcmdldF9jb21waWxlX2ZlYXR1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogQWRkIGV4cGVjdGVkIGNvbXBpbGVyIGZlYXR1cmVzIHRvIGEgdGFyZ2V0LgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKQEAgLTgsOSArMTAsOSBAQAogICB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyg8dGFyZ2V0PiA8UFJJVkFURXxQVUJMSUN8SU5URVJGQUNFPiA8ZmVhdHVyZT4gWy4uLl0pCiAKIFNwZWNpZmllcyBjb21waWxlciBmZWF0dXJlcyByZXF1aXJlZCB3aGVuIGNvbXBpbGluZyBhIGdpdmVuIHRhcmdldC4gIElmIHRoZQotZmVhdHVyZSBpcyBub3QgbGlzdGVkIGluIHRoZSA6dmFyaWFibGU6YENNQUtFX0NfQ09NUElMRV9GRUFUVVJFU2AgdmFyaWFibGUKLW9yIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVNgIHZhcmlhYmxlLAotdGhlbiBhbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGJ5IENNYWtlLiAgSWYgdGhlIHVzZSBvZiB0aGUgZmVhdHVyZSByZXF1aXJlcworZmVhdHVyZSBpcyBub3QgbGlzdGVkIGluIHRoZSA6dmFyaWFibGU6YENNQUtFX0NfQ09NUElMRV9GRUFUVVJFU2AsCis6dmFyaWFibGU6YENNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFU2AsIG9yIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVNgCit2YXJpYWJsZXMsIHRoZW4gYW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBieSBDTWFrZS4gIElmIHRoZSB1c2Ugb2YgdGhlIGZlYXR1cmUgcmVxdWlyZXMKIGFuIGFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZywgc3VjaCBhcyBgYC1zdGQ9Z251KysxMWBgLCB0aGUgZmxhZyB3aWxsIGJlIGFkZGVkCiBhdXRvbWF0aWNhbGx5LgogCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy5yc3QgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy5yc3QKaW5kZXggNDdlN2Q4Ni4uM2M3MzNjNSAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3RhcmdldF9jb21waWxlX29wdGlvbnMucnN0CisrKyBiL0hlbHAvY29tbWFuZC90YXJnZXRfY29tcGlsZV9vcHRpb25zLnJzdApAQCAtNDYsMyArNDYsNSBAQAogYW5kIDpjb21tYW5kOmB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc2AuCiAKIEZvciBkaXJlY3Rvcnktd2lkZSBzZXR0aW5ncywgdGhlcmUgaXMgdGhlIGNvbW1hbmQgOmNvbW1hbmQ6YGFkZF9jb21waWxlX29wdGlvbnNgLgorCitGb3IgZmlsZS1zcGVjaWZpYyBzZXR0aW5ncywgdGhlcmUgaXMgdGhlIHNvdXJjZSBmaWxlIHByb3BlcnR5IDpwcm9wX3NmOmBDT01QSUxFX09QVElPTlNgLgpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzLnJzdCBiL0hlbHAvY29tbWFuZC90YXJnZXRfbGlua19kaXJlY3Rvcmllcy5yc3QKaW5kZXggNzZkYTk0ZC4uYmI3NWEzZCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMucnN0CkBAIC0xLDYgKzEsOCBAQAogdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogQWRkIGxpbmsgZGlyZWN0b3JpZXMgdG8gYSB0YXJnZXQuCiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3RhcmdldF9saW5rX29wdGlvbnMucnN0IGIvSGVscC9jb21tYW5kL3RhcmdldF9saW5rX29wdGlvbnMucnN0CmluZGV4IGI1YWJiYzQuLmU1OWUwZTEgMTAwNjQ0Ci0tLSBhL0hlbHAvY29tbWFuZC90YXJnZXRfbGlua19vcHRpb25zLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X2xpbmtfb3B0aW9ucy5yc3QKQEAgLTEsNiArMSw4IEBACiB0YXJnZXRfbGlua19vcHRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogQWRkIG9wdGlvbnMgdG8gdGhlIGxpbmsgc3RlcCBmb3IgYW4gZXhlY3V0YWJsZSwgc2hhcmVkIGxpYnJhcnkgb3IgbW9kdWxlCiBsaWJyYXJ5IHRhcmdldC4KIApAQCAtNDMsNiArNDUsOCBAQAogbWFudWFsIGZvciBhdmFpbGFibGUgZXhwcmVzc2lvbnMuICBTZWUgdGhlIDptYW51YWw6YGNtYWtlLWJ1aWxkc3lzdGVtKDcpYAogbWFudWFsIGZvciBtb3JlIG9uIGRlZmluaW5nIGJ1aWxkc3lzdGVtIHByb3BlcnRpZXMuCiAKKy4uIGluY2x1ZGU6OiBERVZJQ0VfTElOS19PUFRJT05TLnR4dAorCiAuLiBpbmNsdWRlOjogT1BUSU9OU19TSEVMTC50eHQKIAogLi4gaW5jbHVkZTo6IExJTktfT1BUSU9OU19MSU5LRVIudHh0CmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvdGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycy5yc3QgYi9IZWxwL2NvbW1hbmQvdGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycy5yc3QKaW5kZXggMGQ0ZjQ1YS4uNzAwNTE4MCAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3RhcmdldF9wcmVjb21waWxlX2hlYWRlcnMucnN0CisrKyBiL0hlbHAvY29tbWFuZC90YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzLnJzdApAQCAtMSw2ICsxLDggQEAKIHRhcmdldF9wcmVjb21waWxlX2hlYWRlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBBZGQgYSBsaXN0IG9mIGhlYWRlciBmaWxlcyB0byBwcmVjb21waWxlLgogCiBQcmVjb21waWxpbmcgaGVhZGVyIGZpbGVzIGNhbiBzcGVlZCB1cCBjb21waWxhdGlvbiBieSBjcmVhdGluZyBhIHBhcnRpYWxseQpAQCAtOTMsNyArOTUsNyBAQAogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogVGhlIGNvbW1hbmQgYWxzbyBzdXBwb3J0cyBhIHNlY29uZCBzaWduYXR1cmUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGF0Ci1vbmUgdGFyZ2V0IHJlLXVzZXMgYSBwcmVjb21waWxlZCBoZWFkZXIgZmlsZSBhcnRlZmFjdCBmcm9tIGFub3RoZXIgdGFyZ2V0CitvbmUgdGFyZ2V0IHJlLXVzZXMgYSBwcmVjb21waWxlZCBoZWFkZXIgZmlsZSBhcnRpZmFjdCBmcm9tIGFub3RoZXIgdGFyZ2V0CiBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgaXRzIG93bjoKIAogLi4gY29kZS1ibG9jazo6IGNtYWtlCmRpZmYgLS1naXQgYS9IZWxwL2NvbW1hbmQvdGFyZ2V0X3NvdXJjZXMucnN0IGIvSGVscC9jb21tYW5kL3RhcmdldF9zb3VyY2VzLnJzdAppbmRleCAyN2U3MzdiLi42NTNiOGQ3IDEwMDY0NAotLS0gYS9IZWxwL2NvbW1hbmQvdGFyZ2V0X3NvdXJjZXMucnN0CisrKyBiL0hlbHAvY29tbWFuZC90YXJnZXRfc291cmNlcy5yc3QKQEAgLTEsNiArMSw4IEBACiB0YXJnZXRfc291cmNlcwogLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIEFkZCBzb3VyY2VzIHRvIGEgdGFyZ2V0LgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKQEAgLTksMTkgKzExLDIxIEBACiAgICAgPElOVEVSRkFDRXxQVUJMSUN8UFJJVkFURT4gW2l0ZW1zMS4uLl0KICAgICBbPElOVEVSRkFDRXxQVUJMSUN8UFJJVkFURT4gW2l0ZW1zMi4uLl0gLi4uXSkKIAotU3BlY2lmaWVzIHNvdXJjZXMgdG8gdXNlIHdoZW4gY29tcGlsaW5nIGEgZ2l2ZW4gdGFyZ2V0LiAgUmVsYXRpdmUKLXNvdXJjZSBmaWxlIHBhdGhzIGFyZSBpbnRlcnByZXRlZCBhcyBiZWluZyByZWxhdGl2ZSB0byB0aGUgY3VycmVudAorU3BlY2lmaWVzIHNvdXJjZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgYSB0YXJnZXQgYW5kL29yIGl0cyBkZXBlbmRlbnRzLgorUmVsYXRpdmUgc291cmNlIGZpbGUgcGF0aHMgYXJlIGludGVycHJldGVkIGFzIGJlaW5nIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50CiBzb3VyY2UgZGlyZWN0b3J5IChpLmUuIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSYCkuICBUaGUKIG5hbWVkIGBgPHRhcmdldD5gYCBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5IGEgY29tbWFuZCBzdWNoIGFzCiA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgIG9yIDpjb21tYW5kOmBhZGRfbGlicmFyeWAgYW5kIG11c3Qgbm90IGJlIGFuCiA6cmVmOmBBTElBUyB0YXJnZXQgPEFsaWFzIFRhcmdldHM+YC4KIAogVGhlIGBgSU5URVJGQUNFYGAsIGBgUFVCTElDYGAgYW5kIGBgUFJJVkFURWBgIGtleXdvcmRzIGFyZSByZXF1aXJlZCB0bwotc3BlY2lmeSB0aGUgc2NvcGUgb2YgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMuICBgYFBSSVZBVEVgYCBhbmQgYGBQVUJMSUNgYAorc3BlY2lmeSB0aGUgc2NvcGUgb2YgdGhlIGl0ZW1zIGZvbGxvd2luZyB0aGVtLiAgYGBQUklWQVRFYGAgYW5kIGBgUFVCTElDYGAKIGl0ZW1zIHdpbGwgcG9wdWxhdGUgdGhlIDpwcm9wX3RndDpgU09VUkNFU2AgcHJvcGVydHkgb2YKLWBgPHRhcmdldD5gYC4gIGBgUFVCTElDYGAgYW5kIGBgSU5URVJGQUNFYGAgaXRlbXMgd2lsbCBwb3B1bGF0ZSB0aGUKLTpwcm9wX3RndDpgSU5URVJGQUNFX1NPVVJDRVNgIHByb3BlcnR5IG9mIGBgPHRhcmdldD5gYC4KLSg6cmVmOmBJTVBPUlRFRCB0YXJnZXRzIDxJbXBvcnRlZCBUYXJnZXRzPmAgb25seSBzdXBwb3J0IGBgSU5URVJGQUNFYGAgaXRlbXMuKQorYGA8dGFyZ2V0PmBgLCB3aGljaCBhcmUgdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSB0YXJnZXQgaXRzZWxmLgorYGBQVUJMSUNgYCBhbmQgYGBJTlRFUkZBQ0VgYCBpdGVtcyB3aWxsIHBvcHVsYXRlIHRoZQorOnByb3BfdGd0OmBJTlRFUkZBQ0VfU09VUkNFU2AgcHJvcGVydHkgb2YgYGA8dGFyZ2V0PmBgLCB3aGljaCBhcmUgdXNlZAord2hlbiBidWlsZGluZyBkZXBlbmRlbnRzLiAgKDpyZWY6YElNUE9SVEVEIHRhcmdldHMgPEltcG9ydGVkIFRhcmdldHM+YAorb25seSBzdXBwb3J0IGBgSU5URVJGQUNFYGAgaXRlbXMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYnVpbGQgdGFyZ2V0cy4pCiBUaGUgZm9sbG93aW5nIGFyZ3VtZW50cyBzcGVjaWZ5IHNvdXJjZXMuICBSZXBlYXRlZCBjYWxscyBmb3IgdGhlIHNhbWUKIGBgPHRhcmdldD5gYCBhcHBlbmQgaXRlbXMgaW4gdGhlIG9yZGVyIGNhbGxlZC4KIApkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3RyeV9jb21waWxlLnJzdCBiL0hlbHAvY29tbWFuZC90cnlfY29tcGlsZS5yc3QKaW5kZXggZWRiZjkyYy4uMzIzMDc3YSAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3RyeV9jb21waWxlLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvdHJ5X2NvbXBpbGUucnN0CkBAIC0xMzUsNiArMTM1LDcgQEAKIHRyeV9jb21waWxlIENNYWtlTGlzdHMudHh0IHRvIGluaXRpYWxpemUgY29tcGlsZSB0YXJnZXQgcHJvcGVydGllcyB3aXRoCiBkZWZhdWx0IHZhbHVlczoKIAorKiA6dmFyaWFibGU6YENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZYAogKiA6dmFyaWFibGU6YENNQUtFX0VOQUJMRV9FWFBPUlRTYAogKiA6dmFyaWFibGU6YENNQUtFX0xJTktfU0VBUkNIX1NUQVJUX1NUQVRJQ2AKICogOnZhcmlhYmxlOmBDTUFLRV9MSU5LX1NFQVJDSF9FTkRfU1RBVElDYApkaWZmIC0tZ2l0IGEvSGVscC9jb21tYW5kL3ZhcmlhYmxlX3dhdGNoLnJzdCBiL0hlbHAvY29tbWFuZC92YXJpYWJsZV93YXRjaC5yc3QKaW5kZXggY2U2OWJjZi4uODI5M2Y1YSAxMDA2NDQKLS0tIGEvSGVscC9jb21tYW5kL3ZhcmlhYmxlX3dhdGNoLnJzdAorKysgYi9IZWxwL2NvbW1hbmQvdmFyaWFibGVfd2F0Y2gucnN0CkBAIC03LDkgKzcsNDIgQEAKIAogICB2YXJpYWJsZV93YXRjaCg8dmFyaWFibGU+IFs8Y29tbWFuZD5dKQogCi1JZiB0aGUgc3BlY2lmaWVkIGBgPHZhcmlhYmxlPmBgIGNoYW5nZXMsIGEgbWVzc2FnZSB3aWxsIGJlIHByaW50ZWQKLXRvIGluZm9ybSBhYm91dCB0aGUgY2hhbmdlLgorSWYgdGhlIHNwZWNpZmllZCBgYDx2YXJpYWJsZT5gYCBjaGFuZ2VzIGFuZCBubyBgYDxjb21tYW5kPmBgIGlzIGdpdmVuLAorYSBtZXNzYWdlIHdpbGwgYmUgcHJpbnRlZCB0byBpbmZvcm0gYWJvdXQgdGhlIGNoYW5nZS4KIAotQWRkaXRpb25hbGx5LCBpZiBgYDxjb21tYW5kPmBgIGlzIGdpdmVuLCB0aGlzIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZC4KK0lmIGBgPGNvbW1hbmQ+YGAgaXMgZ2l2ZW4sIHRoaXMgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGluc3RlYWQuCiBUaGUgY29tbWFuZCB3aWxsIHJlY2VpdmUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CiBgYENPTU1BTkQoPHZhcmlhYmxlPiA8YWNjZXNzPiA8dmFsdWU+IDxjdXJyZW50X2xpc3RfZmlsZT4gPHN0YWNrPilgYAorCitgYDx2YXJpYWJsZT5gYAorIE5hbWUgb2YgdGhlIHZhcmlhYmxlIGJlaW5nIGFjY2Vzc2VkLgorCitgYDxhY2Nlc3M+YGAKKyBPbmUgb2YgYGBSRUFEX0FDQ0VTU2BgLCBgYFVOS05PV05fUkVBRF9BQ0NFU1NgYCwgYGBNT0RJRklFRF9BQ0NFU1NgYCwKKyBgYFVOS05PV05fTU9ESUZJRURfQUNDRVNTYGAsIG9yIGBgUkVNT1ZFRF9BQ0NFU1NgYC4gIFRoZSBgYFVOS05PV05fYGAKKyB2YWx1ZXMgYXJlIG9ubHkgdXNlZCB3aGVuIHRoZSB2YXJpYWJsZSBoYXMgbmV2ZXIgYmVlbiBzZXQuICBPbmNlIHNldCwKKyB0aGV5IGFyZSBuZXZlciB1c2VkIGFnYWluIGR1cmluZyB0aGUgc2FtZSBDTWFrZSBydW4sIGV2ZW4gaWYgdGhlCisgdmFyaWFibGUgaXMgbGF0ZXIgdW5zZXQuCisKK2BgPHZhbHVlPmBgCisgVGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZS4gIE9uIGEgbW9kaWZpY2F0aW9uLCB0aGlzIGlzIHRoZSBuZXcKKyAobW9kaWZpZWQpIHZhbHVlIG9mIHRoZSB2YXJpYWJsZS4gIE9uIHJlbW92YWwsIHRoZSB2YWx1ZSBpcyBlbXB0eS4KKworYGA8Y3VycmVudF9saXN0X2ZpbGU+YGAKKyBGdWxsIHBhdGggdG8gdGhlIGZpbGUgZG9pbmcgdGhlIGFjY2Vzcy4KKworYGA8c3RhY2s+YGAKKyBMaXN0IG9mIGFic29sdXRlIHBhdGhzIG9mIGFsbCBmaWxlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrIG9mIGZpbGUKKyBpbmNsdXNpb24sIHdpdGggdGhlIGJvdHRvbS1tb3N0IGZpbGUgZmlyc3QgYW5kIHRoZSBjdXJyZW50bHkKKyBwcm9jZXNzZWQgZmlsZSAodGhhdCBpcywgYGBjdXJyZW50X2xpc3RfZmlsZWBgKSBsYXN0LgorCitOb3RlIHRoYXQgZm9yIHNvbWUgYWNjZXNzZXMgc3VjaCBhcyA6Y29tbWFuZDpgbGlzdChBUFBFTkQpYCwgdGhlIHdhdGNoZXIKK2lzIGV4ZWN1dGVkIHR3aWNlLCBmaXJzdCB3aXRoIGEgcmVhZCBhY2Nlc3MgYW5kIHRoZW4gd2l0aCBhIHdyaXRlIG9uZS4KK0Fsc28gbm90ZSB0aGF0IGFuIDpjb21tYW5kOmBpZihERUZJTkVEKWAgcXVlcnkgb24gdGhlIHZhcmlhYmxlIGRvZXMgbm90CityZWdpc3RlciBhcyBhbiBhY2Nlc3MgYW5kIHRoZSB3YXRjaGVyIGlzIG5vdCBleGVjdXRlZC4KKworT25seSBub24tY2FjaGUgdmFyaWFibGVzIGNhbiBiZSB3YXRjaGVkIHVzaW5nIHRoaXMgY29tbWFuZC4gIEFjY2VzcyB0bworY2FjaGUgdmFyaWFibGVzIGlzIG5ldmVyIHdhdGNoZWQuICBIb3dldmVyLCB0aGUgZXhpc3RlbmNlIG9mIGEgY2FjaGUKK3ZhcmlhYmxlIGBgdmFyYGAgY2F1c2VzIGFjY2Vzc2VzIHRvIHRoZSBub24tY2FjaGUgdmFyaWFibGUgYGB2YXJgYCB0bworbm90IHVzZSB0aGUgYGBVTktOT1dOX2BgIHByZWZpeCwgZXZlbiBpZiBhIG5vbi1jYWNoZSB2YXJpYWJsZSBgYHZhcmBgCitoYXMgbmV2ZXIgZXhpc3RlZC4KZGlmZiAtLWdpdCBhL0hlbHAvY3BhY2tfZ2VuL2FyY2hpdmUucnN0IGIvSGVscC9jcGFja19nZW4vYXJjaGl2ZS5yc3QKaW5kZXggZDQ1NWY0Yi4uMzY1NmFhMiAxMDA2NDQKLS0tIGEvSGVscC9jcGFja19nZW4vYXJjaGl2ZS5yc3QKKysrIGIvSGVscC9jcGFja19nZW4vYXJjaGl2ZS5yc3QKQEAgLTEsOCArMSw4IEBACiBDUGFjayBBcmNoaXZlIEdlbmVyYXRvcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQXJjaGl2ZSBDUGFjayBnZW5lcmF0b3IgdGhhdCBzdXBwb3J0cyBwYWNrYWdpbmcgb2Ygc291cmNlcyBhbmQgYmluYXJpZXMgaW4KLWRpZmZlcmVudCBmb3JtYXRzOgorQ1BhY2sgZ2VuZXJhdG9yIGZvciBwYWNrYWdpbmcgZmlsZXMgaW50byBhbiBhcmNoaXZlLCB3aGljaCBjYW4gaGF2ZQorYW55IG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKIAogICAtIDdaIC0gN3ppcCAtICguN3opCiAgIC0gVEJaMiAoLnRhci5iejIpCkBAIC0xMiwyNSArMTIsNjQgQEAKICAgLSBUWlNUICgudGFyLnpzdCkKICAgLSBaSVAgKC56aXApCiAKK1doZW4gdGhpcyBnZW5lcmF0b3IgaXMgY2FsbGVkIGZyb20gYGBDUGFja1NvdXJjZUNvbmZpZy5jbWFrZWBgIChvciB0aHJvdWdoCit0aGUgYGBwYWNrYWdlX3NvdXJjZWBgIHRhcmdldCksIHRoZW4gdGhlIGdlbmVyYXRlZCBhcmNoaXZlIHdpbGwgY29udGFpbiBhbGwKK2ZpbGVzIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSwgZXhjZXB0IHRob3NlIHNwZWNpZmllZCBpbgorOnZhcmlhYmxlOmBDUEFDS19TT1VSQ0VfSUdOT1JFX0ZJTEVTYC4gIFRoZSBmb2xsb3dpbmcgaXMgb25lIGV4YW1wbGUgb2YKK3BhY2thZ2luZyBhbGwgc291cmNlIGZpbGVzIG9mIGEgcHJvamVjdDoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0KENQQUNLX1NPVVJDRV9HRU5FUkFUT1IgIlRHWiIpCisgIHNldChDUEFDS19TT1VSQ0VfSUdOT1JFX0ZJTEVTCisgICAgXFwuZ2l0LworICAgIGJ1aWxkLworICAgICIuKn4kIgorICApCisgIHNldChDUEFDS19WRVJCQVRJTV9WQVJJQUJMRVMgWUVTKQorICBpbmNsdWRlKENQYWNrKQorCitXaGVuIHRoaXMgZ2VuZXJhdG9yIGlzIGNhbGxlZCBmcm9tIGBgQ1BhY2tDb25maWcuY21ha2VgYCAob3IgdGhyb3VnaCB0aGUKK2BgcGFja2FnZWBgIHRhcmdldCksIHRoZW4gdGhlIGdlbmVyYXRlZCBhcmNoaXZlIHdpbGwgY29udGFpbiBhbGwgZmlsZXMKK3RoYXQgaGF2ZSBiZWVuIGluc3RhbGxlZCB2aWEgQ01ha2UncyA6Y29tbWFuZDpgaW5zdGFsbGAgY29tbWFuZCAoYW5kIHRoZQorZGVwcmVjYXRlZCBjb21tYW5kcyA6Y29tbWFuZDpgaW5zdGFsbF9maWxlc2AsIDpjb21tYW5kOmBpbnN0YWxsX3Byb2dyYW1zYCwKK2FuZCA6Y29tbWFuZDpgaW5zdGFsbF90YXJnZXRzYCkuCisKIFZhcmlhYmxlcyBzcGVjaWZpYyB0byBDUGFjayBBcmNoaXZlIGdlbmVyYXRvcgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfQVJDSElWRV9GSUxFX05BTUUKICAgICAgICAgICAgICAgQ1BBQ0tfQVJDSElWRV88Y29tcG9uZW50Pl9GSUxFX05BTUUKIAotIFBhY2thZ2UgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uIHdoaWNoIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkgZGVwZW5kaW5nCi0gb24gdGhlIGFyY2hpdmUgZm9ybWF0LgotCi0gKiBNYW5kYXRvcnkgOiBZRVMKLSAqIERlZmF1bHQgICA6IGBgPENQQUNLX1BBQ0tBR0VfRklMRV9OQU1FPlstPGNvbXBvbmVudD5dLjxleHRlbnNpb24+YGAgd2l0aAotICAgICAgICAgICAgICAgc3BhY2VzIHJlcGxhY2VkIGJ5ICctJworICBQYWNrYWdlIGZpbGUgbmFtZSB3aXRob3V0IGV4dGVuc2lvbi4gVGhlIGV4dGVuc2lvbiBpcyBkZXRlcm1pbmVkIGZyb20gdGhlCisgIGFyY2hpdmUgZm9ybWF0IChzZWUgbGlzdCBhYm92ZSkgYW5kIGF1dG9tYXRpY2FsbHkgYXBwZW5kZWQgdG8gdGhlIGZpbGUgbmFtZS4KKyAgVGhlIGRlZmF1bHQgaXMgYGA8Q1BBQ0tfUEFDS0FHRV9GSUxFX05BTUU+Wy08Y29tcG9uZW50Pl1gYCwgd2l0aCBzcGFjZXMKKyAgcmVwbGFjZWQgYnkgJy0nLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0FSQ0hJVkVfQ09NUE9ORU5UX0lOU1RBTEwKIAotIEVuYWJsZSBjb21wb25lbnQgcGFja2FnaW5nIGZvciBDUGFja0FyY2hpdmUKKyAgRW5hYmxlIGNvbXBvbmVudCBwYWNrYWdpbmcuIElmIGVuYWJsZWQgKE9OKSwgdGhlbiB0aGUgYXJjaGl2ZSBnZW5lcmF0b3IKKyAgY3JlYXRlcyAgbXVsdGlwbGUgcGFja2FnZXMuIFRoZSBkZWZhdWx0IGlzIE9GRiwgd2hpY2ggbWVhbnMgdGhhdCBhIHNpbmdsZQorICBwYWNrYWdlIGNvbnRhaW5pbmcgZmlsZXMgb2YgYWxsIGNvbXBvbmVudHMgaXMgZ2VuZXJhdGVkLgogCi0gKiBNYW5kYXRvcnkgOiBOTwotICogRGVmYXVsdCAgIDogT0ZGCitWYXJpYWJsZXMgdXNlZCBieSBDUGFjayBBcmNoaXZlIGdlbmVyYXRvcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotIElmIGVuYWJsZWQgKE9OKSBtdWx0aXBsZSBwYWNrYWdlcyBhcmUgZ2VuZXJhdGVkLiBCeSBkZWZhdWx0IGEgc2luZ2xlIHBhY2thZ2UKLSBjb250YWluaW5nIGZpbGVzIG9mIGFsbCBjb21wb25lbnRzIGlzIGdlbmVyYXRlZC4KK1RoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCBieSB0aGUgQXJjaGl2ZSBnZW5lcmF0b3IsIGJ1dCBhcmUgYWxzbyBhdmFpbGFibGUgdG8KK0NQYWNrIGdlbmVyYXRvcnMgd2hpY2ggYXJlIGVzc2VudGlhbGx5IGFyY2hpdmVzIGF0IHRoZWlyIGNvcmUuIFRoZXNlIGluY2x1ZGU6CisKKyAgLSA6Y3BhY2tfZ2VuOmBDUGFjayBDeWd3aW4gR2VuZXJhdG9yYAorICAtIDpjcGFja19nZW46YENQYWNrIEZyZWVCU0QgR2VuZXJhdG9yYAorCisuLiB2YXJpYWJsZTo6IENQQUNLX0FSQ0hJVkVfVEhSRUFEUworCisgIFRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byB1c2Ugd2hlbiBwZXJmb3JtaW5nIHRoZSBjb21wcmVzc2lvbi4gSWYgc2V0IHRvCisgIGBgMGBgLCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjb3JlcyBvbiB0aGUgbWFjaGluZSB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKyAgVGhlIGRlZmF1bHQgaXMgYGAxYGAgd2hpY2ggbGltaXRzIGNvbXByZXNzaW9uIHRvIGEgc2luZ2xlIHRocmVhZC4gTm90ZSB0aGF0CisgIG5vdCBhbGwgY29tcHJlc3Npb24gbW9kZXMgc3VwcG9ydCB0aHJlYWRpbmcgaW4gYWxsIGVudmlyb25tZW50cy4gQ3VycmVudGx5LAorICBvbmx5IHRoZSBYWiBjb21wcmVzc2lvbiBtYXkgc3VwcG9ydCBpdC4KKworLi4gbm90ZTo6CisKKyAgICBPZmZpY2lhbCBDTWFrZSBiaW5hcmllcyBhdmFpbGFibGUgb24gYGBjbWFrZS5vcmdgYCBzaGlwIHdpdGggYSBgYGxpYmx6bWFgYAorICAgIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBwYXJhbGxlbCBjb21wcmVzc2lvbi4KZGlmZiAtLWdpdCBhL0hlbHAvY3BhY2tfZ2VuL2N5Z3dpbi5yc3QgYi9IZWxwL2NwYWNrX2dlbi9jeWd3aW4ucnN0CmluZGV4IDFjNWY3YWYuLmM2NTY1M2UgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL2N5Z3dpbi5yc3QKKysrIGIvSGVscC9jcGFja19nZW4vY3lnd2luLnJzdApAQCAtMyw2ICszLDExIEBACiAKIEN5Z3dpbiBDUGFjayBnZW5lcmF0b3IgKEN5Z3dpbikuCiAKK1ZhcmlhYmxlcyBhZmZlY3RpbmcgdGhlIENQYWNrIEN5Z3dpbiBnZW5lcmF0b3IKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworICAtIDp2YXJpYWJsZTpgQ1BBQ0tfQVJDSElWRV9USFJFQURTYAorCiBWYXJpYWJsZXMgc3BlY2lmaWMgdG8gQ1BhY2sgQ3lnd2luIGdlbmVyYXRvcgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApkaWZmIC0tZ2l0IGEvSGVscC9jcGFja19nZW4vZGViLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL2RlYi5yc3QKaW5kZXggZGI3MWM4Ny4uYmY1MGM1NSAxMDA2NDQKLS0tIGEvSGVscC9jcGFja19nZW4vZGViLnJzdAorKysgYi9IZWxwL2NwYWNrX2dlbi9kZWIucnN0CkBAIC0yNSw4ICsyNSw4IEBACiBIZXJlIGFyZSBzb21lIENQYWNrIERFQiBnZW5lcmF0b3Igd2lraSByZXNvdXJjZXMgdGhhdCBhcmUgaGVyZSBmb3IgaGlzdG9yaWMKIHJlYXNvbnMgYW5kIGFyZSBubyBsb25nZXIgbWFpbnRhaW5lZCBidXQgbWF5IHN0aWxsIHByb3ZlIHVzZWZ1bDoKIAotIC0gaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY29tbXVuaXR5L3dpa2lzL2RvYy9jcGFjay9Db25maWd1cmF0aW9uCi0gLSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvd2lraXMvZG9jL2NwYWNrL1BhY2thZ2VHZW5lcmF0b3JzI2RlYi11bml4LW9ubHkKKyAtIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NvbW11bml0eS8tL3dpa2lzL2RvYy9jcGFjay9Db25maWd1cmF0aW9uCisgLSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvLS93aWtpcy9kb2MvY3BhY2svUGFja2FnZUdlbmVyYXRvcnMjZGViLXVuaXgtb25seQogCiBMaXN0IG9mIENQYWNrIERFQiBnZW5lcmF0b3Igc3BlY2lmaWMgdmFyaWFibGVzOgogCkBAIC0yODIsNyArMjgyLDcgQEAKICAgIFlvdSBtYXkgbmVlZCBzZXQgOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1JQQVRIYCB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZQogICAgaWYgeW91IHVzZSB0aGlzIGZlYXR1cmUsIGJlY2F1c2UgaWYgeW91IGRvbid0IGBgZHBrZy1zaGxpYmRlcHNgYAogICAgbWF5IGZhaWwgdG8gZmluZCB5b3VyIG93biBzaGFyZWQgbGlicy4KLSAgIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvd2lraXMvZG9jL2NtYWtlL1JQQVRILWhhbmRsaW5nCisgICBTZWUgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY29tbXVuaXR5Ly0vd2lraXMvZG9jL2NtYWtlL1JQQVRILWhhbmRsaW5nCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfREVCSUFOX1BBQ0tBR0VfREVCVUcKIApkaWZmIC0tZ2l0IGEvSGVscC9jcGFja19nZW4vZG1nLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL2RtZy5yc3QKaW5kZXggMWUzNzg4OS4uY2VkZTBmMiAxMDA2NDQKLS0tIGEvSGVscC9jcGFja19nZW4vZG1nLnJzdAorKysgYi9IZWxwL2NwYWNrX2dlbi9kbWcucnN0CkBAIC01NCwxMCArNTQsMTIgQEAKIAogICBEaXJlY3Rvcnkgd2hlcmUgbGljZW5zZSBhbmQgbWVudSBmaWxlcyBmb3IgZGlmZmVyZW50IGxhbmd1YWdlcyBhcmUgc3RvcmVkLgogICBTZXR0aW5nIHRoaXMgY2F1c2VzIENQYWNrIHRvIGxvb2sgZm9yIGEgYGA8bGFuZ3VhZ2U+Lm1lbnUudHh0YGAgYW5kCi0gIGBgPGxhbmd1YWdlPi5saWNlbnNlLnR4dGBgIGZpbGUgZm9yIGV2ZXJ5IGxhbmd1YWdlIGRlZmluZWQgaW4KLSAgYGBDUEFDS19ETUdfU0xBX0xBTkdVQUdFU2BgLiBJZiBib3RoIHRoaXMgdmFyaWFibGUgYW5kCisgIGBgPGxhbmd1YWdlPi5saWNlbnNlLnR4dGBgIG9yIGBgPGxhbmd1YWdlPi5saWNlbnNlLnJ0ZmBgIGZpbGUgZm9yIGV2ZXJ5CisgIGxhbmd1YWdlIGRlZmluZWQgaW4gYGBDUEFDS19ETUdfU0xBX0xBTkdVQUdFU2BgLiAgSWYgYm90aCB0aGlzIHZhcmlhYmxlIGFuZAogICBgYENQQUNLX1JFU09VUkNFX0ZJTEVfTElDRU5TRWBgIGFyZSBzZXQsIENQYWNrIHdpbGwgb25seSBsb29rIGZvciB0aGUgbWVudQotICBmaWxlcyBhbmQgdXNlIHRoZSBzYW1lIGxpY2Vuc2UgZmlsZSBmb3IgYWxsIGxhbmd1YWdlcy4KKyAgZmlsZXMgYW5kIHVzZSB0aGUgc2FtZSBsaWNlbnNlIGZpbGUgZm9yIGFsbCBsYW5ndWFnZXMuICBJZiBib3RoCisgIGBgPGxhbmd1YWdlPi5saWNlbnNlLnR4dGBgIGFuZCBgYDxsYW5ndWFnZT4ubGljZW5zZS5ydGZgYCBleGlzdCwgdGhlIGBgLnR4dGBgCisgIGZpbGUgd2lsbCBiZSB1c2VkLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0RNR19TTEFfTEFOR1VBR0VTCiAKQEAgLTgxLDYgKzgzLDEzIEBACiAgIGBgPGxhbmd1YWdlPi5tZW51LnR4dGBgIGFuZCBgYDxsYW5ndWFnZT4ubGljZW5zZS50eHRgYCBpbiB0aGUgZGlyZWN0b3J5CiAgIHNwZWNpZmllZCBieSB0aGUgOnZhcmlhYmxlOmBDUEFDS19ETUdfU0xBX0RJUmAgdmFyaWFibGUuCiAKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfRE1HXzxjb21wb25lbnQ+X0ZJTEVfTkFNRQorCisgRmlsZSBuYW1lIHdoZW4gcGFja2FnaW5nIGBgPGNvbXBvbmVudD5gYCBhcyBpdHMgb3duIERNRworIChgYENQQUNLX0NPTVBPTkVOVFNfR1JPVVBJTkdgYCBzZXQgdG8gSUdOT1JFKS4KKworIC0gRGVmYXVsdDogYGBDUEFDS19QQUNLQUdFX0ZJTEVfTkFNRS08Y29tcG9uZW50PmBgCisKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfQ09NTUFORF9IRElVVElMCiAKICBQYXRoIHRvIHRoZSBgYGhkaXV0aWwoMSlgYCBjb21tYW5kIHVzZWQgdG8gb3BlcmF0ZSBvbiBkaXNrIGltYWdlIGZpbGVzIG9uCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9leHRlcm5hbC5yc3QgYi9IZWxwL2NwYWNrX2dlbi9leHRlcm5hbC5yc3QKaW5kZXggNDA2ZjZiZS4uN2VmMTA3MSAxMDA2NDQKLS0tIGEvSGVscC9jcGFja19nZW4vZXh0ZXJuYWwucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL2V4dGVybmFsLnJzdApAQCAtMjgxLDMgKzI4MSwxMCBAQAogICBJdCBpcyBpbnZva2VkIGFmdGVyIChvcHRpb25hbCkgc3RhZ2luZyB0b29rIHBsYWNlIGFuZCBtYXkKICAgcnVuIGFuIGV4dGVybmFsIHBhY2thZ2luZyB0b29sLiBUaGUgc2NyaXB0IGhhcyBhY2Nlc3MgdG8KICAgdGhlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5IHRoZSBDUGFjayBjb25maWcgZmlsZS4KKworLi4gdmFyaWFibGU6OiBDUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUworCisgIFRoZSBgYENQQUNLX0VYVEVSTkFMX1BBQ0tBR0VfU0NSSVBUYGAgc2NyaXB0IG1heSBzZXQgdGhpcyBsaXN0IHZhcmlhYmxlIHRvIHRoZQorICBmdWxsIHBhdGhzIG9mIGdlbmVyYXRlZCBwYWNrYWdlIGZpbGVzLiAgQ1BhY2sgY29weSB0aGVzZSBmaWxlcyBmcm9tIHRoZSBzdGFnZQorICBkaXJlY3RvcnkgYmFjayB0byB0aGUgdG9wIGJ1aWxkIGRpcmVjdG9yeSBhbmQgcG9zc2libHkgcHJvZHVjZSBjaGVja3N1bSBmaWxlcworICBpZiB0aGUgOnZhcmlhYmxlOmBDUEFDS19QQUNLQUdFX0NIRUNLU1VNYCBpcyBzZXQuCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9mcmVlYnNkLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL2ZyZWVic2QucnN0CmluZGV4IGE4ZGQzMjAuLjQ3YTc3ODQgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL2ZyZWVic2QucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL2ZyZWVic2QucnN0CkBAIC0zLDYgKzMsMTEgQEAKIAogVGhlIGJ1aWx0IGluIChiaW5hcnkpIENQYWNrIEZyZWVCU0QgKHBrZykgZ2VuZXJhdG9yIChVbml4IG9ubHkpCiAKK1ZhcmlhYmxlcyBhZmZlY3RpbmcgdGhlIENQYWNrIEZyZWVCU0QgKHBrZykgZ2VuZXJhdG9yCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisgIC0gOnZhcmlhYmxlOmBDUEFDS19BUkNISVZFX1RIUkVBRFNgCisKIFZhcmlhYmxlcyBzcGVjaWZpYyB0byBDUGFjayBGcmVlQlNEIChwa2cpIGdlbmVyYXRvcgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKZGlmZiAtLWdpdCBhL0hlbHAvY3BhY2tfZ2VuL2lmdy5yc3QgYi9IZWxwL2NwYWNrX2dlbi9pZncucnN0CmluZGV4IGZlY2NkM2QuLjc3NmJiNDYgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL2lmdy5yc3QKKysrIGIvSGVscC9jcGFja19nZW4vaWZ3LnJzdApAQCAtMSw3OCArMSwyOCBAQAogQ1BhY2sgSUZXIEdlbmVyYXRvcgogLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TZWUgOm1vZHVsZTpgQ1BhY2tJRldgIGZvciBkZXRhaWxzIG9uIHRoZSBDUGFja0lGVyBtb2R1bGUuCitDb25maWd1cmUgYW5kIHJ1biB0aGUgUXQgSW5zdGFsbGVyIEZyYW1ld29yayB0byBnZW5lcmF0ZSBhIFF0IGluc3RhbGxlci4KIAotLi4gX1F0SUZXOiBodHRwOi8vZG9jLnF0LmlvL3F0aW5zdGFsbGVyZnJhbWV3b3JrL2luZGV4Lmh0bWwKKy4uIG9ubHk6OiBodG1sCiAKKyAgLi4gY29udGVudHM6OgogCiBPdmVydmlldwogXl5eXl5eXl4KIAotQ1BhY2sgYGBJRldgYCBnZW5lcmF0b3IgaGVscHMgeW91IHRvIGNyZWF0ZSBvbmxpbmUgYW5kIG9mZmxpbmUKLWJpbmFyeSBjcm9zcy1wbGF0Zm9ybSBpbnN0YWxsZXJzIHdpdGggYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UuCitUaGlzIDptYW51YWw6YGNwYWNrIGdlbmVyYXRvciA8Y3BhY2stZ2VuZXJhdG9ycyg3KT5gIGdlbmVyYXRlcworY29uZmlndXJhdGlvbiBhbmQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIGBRdCBJbnN0YWxsZXIgRnJhbWV3b3JrCis8aHR0cDovL2RvYy5xdC5pby9xdGluc3RhbGxlcmZyYW1ld29yay9pbmRleC5odG1sPmBfIChRdElGVyksCithbmQgcnVucyBRdElGVyB0b29scyB0byBnZW5lcmF0ZSBhIFF0IGluc3RhbGxlci4KIAotQ1BhY2sgSUZXIGdlbmVyYXRvciBwcmVwYXJlcyBwcm9qZWN0IGluc3RhbGxhdGlvbiBhbmQgZ2VuZXJhdGVzIGNvbmZpZ3VyYXRpb24KLWFuZCBtZXRhIGluZm9ybWF0aW9uIGZvciBRdElGV18gdG9vbHMuCitRdElGVyBwcm92aWRlcyB0b29scyBhbmQgdXRpbGl0aWVzIHRvIGNyZWF0ZSBpbnN0YWxsZXJzIGZvcgordGhlIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgYFF0IDxodHRwczovL3d3dy5xdC5pbz5gXzogTGludXgsCitNaWNyb3NvZnQgV2luZG93cywgYW5kIG1hY09TLgogCi1UaGUgUXRJRldfIHByb3ZpZGVzIGEgc2V0IG9mIHRvb2xzIGFuZCB1dGlsaXRpZXMgdG8gY3JlYXRlCi1pbnN0YWxsZXJzIGZvciB0aGUgc3VwcG9ydGVkIGRlc2t0b3AgUXQgcGxhdGZvcm1zOiBMaW51eCwgTWljcm9zb2Z0IFdpbmRvd3MsCi1hbmQgbWFjT1MuCi0KLVlvdSBzaG91bGQgYWxzbyBpbnN0YWxsIFF0SUZXXyB0byB1c2UgQ1BhY2sgYGBJRldgYCBnZW5lcmF0b3IuCi0KLUhpbnRzCi1eXl5eXgotCi1HZW5lcmFsbHksIHRoZSBDUGFjayBgYElGV2BgIGdlbmVyYXRvciBhdXRvbWF0aWNhbGx5IGZpbmRzIFF0SUZXXyB0b29scywKLWJ1dCBpZiB5b3UgZG9uJ3QgdXNlIGEgZGVmYXVsdCBwYXRoIGZvciBpbnN0YWxsYXRpb24gb2YgdGhlIFF0SUZXXyB0b29scywKLXRoZSBwYXRoIG1heSBiZSBzcGVjaWZpZWQgaW4gZWl0aGVyIGEgQ01ha2Ugb3IgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU6Ci0KLS4uIHZhcmlhYmxlOjogQ1BBQ0tfSUZXX1JPT1QKLQotIEFuIENNYWtlIHZhcmlhYmxlIHdoaWNoIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIFF0SUZXXyB0b29sIHN1aXRlLgotCi0gVGhlIHZhcmlhYmxlIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBgYENQYWNrQ29uZmlnLmNtYWtlYGAgZmlsZSBhbmQgdXNlZCBhdAotIENQYWNrIHJ1bnRpbWUuCi0KLS4uIHZhcmlhYmxlOjogUVRJRldESVIKLQotIEFuIGVudmlyb25tZW50IHZhcmlhYmxlIHdoaWNoIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIFF0SUZXXyB0b29sCi0gc3VpdGUuCi0KLS4uIG5vdGU6OgotICBUaGUgc3BlY2lmaWVkIHBhdGggc2hvdWxkIG5vdCBjb250YWluICJiaW4iIGF0IHRoZSBlbmQKLSAgKGZvciBleGFtcGxlOiAiRDpcXERldlRvb2xzXFxRdElGVzIuMC41IikuCi0KLVRoZSA6dmFyaWFibGU6YENQQUNLX0lGV19ST09UYCB2YXJpYWJsZSBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgYW5kIG92ZXJyaWRlcwotdGhlIHZhbHVlIG9mIHRoZSA6dmFyaWFibGU6YFFUSUZXRElSYCB2YXJpYWJsZS4KLQotSW50ZXJuYXRpb25hbGl6YXRpb24KLV5eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLVNvbWUgdmFyaWFibGVzIGFuZCBjb21tYW5kIGFyZ3VtZW50cyBzdXBwb3J0IGludGVybmF0aW9uYWxpemF0aW9uIHZpYQotQ01ha2Ugc2NyaXB0LiBUaGlzIGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUuCi0KLUluc3RhbGxlcnMgY3JlYXRlZCBieSBRdElGV18gdG9vbHMgaGF2ZSBidWlsdC1pbiBzdXBwb3J0IGZvcgotaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIG1hbnkgcGhyYXNlcyBhcmUgbG9jYWxpemVkIHRvIG1hbnkgbGFuZ3VhZ2VzLAotYnV0IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB5b3VyIGNvbXBvbmVudHMgYW5kIGdyb3VwcwotdGhhdCB3aWxsIGJlIGRpc3RyaWJ1dGVkLgotCi1Mb2NhbGl6YXRpb24gb2YgdGhlIGRlc2NyaXB0aW9uIG9mIHlvdXIgY29tcG9uZW50cyBhbmQgZ3JvdXBzIGlzIHVzZWZ1bCBmb3IKLXVzZXJzIG9mIHlvdXIgaW5zdGFsbGVycy4KLQotQSBsb2NhbGl6ZWQgdmFyaWFibGUgb3IgYXJndW1lbnQgY2FuIGNvbnRhaW4gYSBzaW5nbGUgZGVmYXVsdCB2YWx1ZSwgYW5kIGEKLXNldCBvZiBwYWlycyB0aGUgbmFtZSBvZiB0aGUgbG9jYWxlIGFuZCB0aGUgbG9jYWxpemVkIHZhbHVlLgotCi1Gb3IgZXhhbXBsZToKLQotLi4gY29kZS1ibG9jazo6IGNtYWtlCi0KLSAgIHNldChMT0NBTElaQUJMRV9WQVJJQUJMRSAiRGVmYXVsdCB2YWx1ZSIKLSAgICAgZW4gIkVuZ2xpc2ggdmFsdWUiCi0gICAgIGVuX1VTICJBbWVyaWNhbiB2YWx1ZSIKLSAgICAgZW5fR0IgIkdyZWF0IEJyaXRhaW4gdmFsdWUiCi0gICAgICkKK1RvIG1ha2UgdXNlIG9mIHRoaXMgZ2VuZXJhdG9yLCBRdElGVyBuZWVkcyB0byBiZSBpbnN0YWxsZWQuCitUaGUgOm1vZHVsZTpgQ1BhY2tJRldgIG1vZHVsZSBsb29rcyBmb3IgdGhlIGxvY2F0aW9uIG9mIHRoZQorUXRJRlcgY29tbWFuZC1saW5lIHV0aWxpdGllcywgYW5kIGRlZmluZXMgc2V2ZXJhbCBjb21tYW5kcyB0bworY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBnZW5lcmF0b3IuCiAKIFZhcmlhYmxlcwogXl5eXl5eXl5eCkBAIC0xNjIsNiArMTEyLDggQEAKICBEZWZhdWx0IHRhcmdldCBkaXJlY3RvcnkgZm9yIGluc3RhbGxhdGlvbi4KICBCeSBkZWZhdWx0IHVzZWQKICAiQEFwcGxpY2F0aW9uc0RpckAvOnZhcmlhYmxlOmBDUEFDS19QQUNLQUdFX0lOU1RBTExfRElSRUNUT1JZYCIKKyAodmFyaWFibGVzIGVtYmVkZGVkIGluICdAJyBhcmUgZXhwYW5kZWQgYnkgdGhlCisgYFF0SUZXIHNjcmlwdGluZyBlbmdpbmUgPGh0dHBzOi8vZG9jLnF0LmlvL3F0aW5zdGFsbGVyZnJhbWV3b3JrL3NjcmlwdGluZy5odG1sPmBfKS4KIAogIFlvdSBjYW4gdXNlIHByZWRlZmluZWQgdmFyaWFibGVzLgogCkBAIC0xODUsNyArMTM3LDcgQEAKICBGaWxlbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIG1haW50ZW5hbmNlIHRvb2wuCiAgVGhlIHBsYXRmb3JtLXNwZWNpZmljIGV4ZWN1dGFibGUgZmlsZSBleHRlbnNpb24gaXMgYXBwZW5kZWQuCiAKLSBCeSBkZWZhdWx0IHVzZWQgUXRJRldfIGRlZmF1bHRzIChgYG1haW50ZW5hbmNldG9vbGBgKS4KKyBCeSBkZWZhdWx0IHVzZWQgUXRJRlcgZGVmYXVsdHMgKGBgbWFpbnRlbmFuY2V0b29sYGApLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0lGV19QQUNLQUdFX1JFTU9WRV9UQVJHRVRfRElSCiAKQEAgLTE5NywxOSArMTQ5LDE5IEBACiAKICBGaWxlbmFtZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBtYWludGVuYW5jZSB0b29sLgogCi0gQnkgZGVmYXVsdCB1c2VkIFF0SUZXXyBkZWZhdWx0cyAoYGBtYWludGVuYW5jZXRvb2wuaW5pYGApLgorIEJ5IGRlZmF1bHQgdXNlZCBRdElGVyBkZWZhdWx0cyAoYGBtYWludGVuYW5jZXRvb2wuaW5pYGApLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0lGV19QQUNLQUdFX0FMTE9XX05PTl9BU0NJSV9DSEFSQUNURVJTCiAKICBTZXQgdG8gYGBPTmBgIGlmIHRoZSBpbnN0YWxsYXRpb24gcGF0aCBjYW4gY29udGFpbiBub24tQVNDSUkgY2hhcmFjdGVycy4KIAotIElzIGBgT05gYCBmb3IgUXRJRldfIGxlc3MgMi4wIHRvb2xzLgorIElzIGBgT05gYCBmb3IgUXRJRlcgbGVzcyAyLjAgdG9vbHMuCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfSUZXX1BBQ0tBR0VfQUxMT1dfU1BBQ0VfSU5fUEFUSAogCiAgU2V0IHRvIGBgT0ZGYGAgaWYgdGhlIGluc3RhbGxhdGlvbiBwYXRoIGNhbm5vdCBjb250YWluIHNwYWNlIGNoYXJhY3RlcnMuCiAKLSBJcyBgYE9OYGAgZm9yIFF0SUZXXyBsZXNzIDIuMCB0b29scy4KKyBJcyBgYE9OYGAgZm9yIFF0SUZXIGxlc3MgMi4wIHRvb2xzLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0lGV19QQUNLQUdFX0NPTlRST0xfU0NSSVBUCiAKQEAgLTI2Niw1NyArMjE4LDExMyBAQAogCiAgQWRkaXRpb25hbCBwcmVwYXJlZCByZXBvc2l0b3J5IGRpcnMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVzb2x2ZSBhbmQKICByZXBhY2sgZGVwZW5kZW50IGNvbXBvbmVudHMuIFRoaXMgZmVhdHVyZSBhdmFpbGFibGUgb25seQotIHNpbmNlIFF0SUZXXyAzLjEuCisgc2luY2UgUXRJRlcgMy4xLgogCi1Ub29scwotIiIiIiIKK1F0SUZXIFRvb2xzCisiIiIiIiIiIiIiIgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0lGV19GUkFNRVdPUktfVkVSU0lPTgogCi0gVGhlIHZlcnNpb24gb2YgdXNlZCBRdElGV18gdG9vbHMuCisgVGhlIHZlcnNpb24gb2YgdXNlZCBRdElGVyB0b29scy4KKworVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgcHJvdmlkZSB0aGUgbG9jYXRpb25zIG9mIHRoZSBRdElGVworY29tbWFuZC1saW5lIHRvb2xzIGFzIGRpc2NvdmVyZWQgYnkgdGhlIG1vZHVsZSA6bW9kdWxlOmBDUGFja0lGV2AuCitUaGVzZSB2YXJpYWJsZXMgYXJlIGNhY2hlZCwgYW5kIG1heSBiZSBjb25maWd1cmVkIGlmIG5lZWRlZC4KIAogLi4gdmFyaWFibGU6OiBDUEFDS19JRldfQklOQVJZQ1JFQVRPUl9FWEVDVVRBQkxFCiAKLSBUaGUgcGF0aCB0byAiYmluYXJ5Y3JlYXRvciIgY29tbWFuZCBsaW5lIGNsaWVudC4KLQotIFRoaXMgdmFyaWFibGUgaXMgY2FjaGVkIGFuZCBtYXkgYmUgY29uZmlndXJlZCBpZiBuZWVkZWQuCisgVGhlIHBhdGggdG8gYGBiaW5hcnljcmVhdG9yYGAuCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfSUZXX1JFUE9HRU5fRVhFQ1VUQUJMRQogCi0gVGhlIHBhdGggdG8gInJlcG9nZW4iIGNvbW1hbmQgbGluZSBjbGllbnQuCi0KLSBUaGlzIHZhcmlhYmxlIGlzIGNhY2hlZCBhbmQgbWF5IGJlIGNvbmZpZ3VyZWQgaWYgbmVlZGVkLgorIFRoZSBwYXRoIHRvIGBgcmVwb2dlbmBgLgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0lGV19JTlNUQUxMRVJCQVNFX0VYRUNVVEFCTEUKIAotIFRoZSBwYXRoIHRvICJpbnN0YWxsZXJiYXNlIiBpbnN0YWxsZXIgZXhlY3V0YWJsZSBiYXNlLgotCi0gVGhpcyB2YXJpYWJsZSBpcyBjYWNoZWQgYW5kIG1heSBiZSBjb25maWd1cmVkIGlmIG5lZWRlZC4KKyBUaGUgcGF0aCB0byBgYGluc3RhbGxlcmJhc2VgYC4KIAogLi4gdmFyaWFibGU6OiBDUEFDS19JRldfREVWVE9PTF9FWEVDVVRBQkxFCiAKLSBUaGUgcGF0aCB0byAiZGV2dG9vbCIgY29tbWFuZCBsaW5lIGNsaWVudC4KKyBUaGUgcGF0aCB0byBgYGRldnRvb2xgYC4KIAotIFRoaXMgdmFyaWFibGUgaXMgY2FjaGVkIGFuZCBtYXkgYmUgY29uZmlndXJlZCBpZiBuZWVkZWQuCitIaW50cyBmb3IgRmluZGluZyBRdElGVworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKIAorR2VuZXJhbGx5LCB0aGUgQ1BhY2sgYGBJRldgYCBnZW5lcmF0b3IgYXV0b21hdGljYWxseSBmaW5kcyBRdElGVyB0b29scywKK2J1dCBpZiB5b3UgZG9uJ3QgdXNlIGEgZGVmYXVsdCBwYXRoIGZvciBpbnN0YWxsYXRpb24gb2YgdGhlIFF0SUZXIHRvb2xzLAordGhlIHBhdGggbWF5IGJlIHNwZWNpZmllZCBpbiBlaXRoZXIgYSBDTWFrZSBvciBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZToKKworLi4gdmFyaWFibGU6OiBDUEFDS19JRldfUk9PVAorCisgQW4gQ01ha2UgdmFyaWFibGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgUXRJRlcgdG9vbCBzdWl0ZS4KKworIFRoZSB2YXJpYWJsZSB3aWxsIGJlIGNhY2hlZCBpbiB0aGUgYGBDUGFja0NvbmZpZy5jbWFrZWBgIGZpbGUgYW5kIHVzZWQgYXQKKyBDUGFjayBydW50aW1lLgorCisuLiB2YXJpYWJsZTo6IFFUSUZXRElSCisKKyBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGljaCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBRdElGVyB0b29sCisgc3VpdGUuCisKKy4uIG5vdGU6OgorICBUaGUgc3BlY2lmaWVkIHBhdGggc2hvdWxkIG5vdCBjb250YWluICJiaW4iIGF0IHRoZSBlbmQKKyAgKGZvciBleGFtcGxlOiAiRDpcXERldlRvb2xzXFxRdElGVzIuMC41IikuCisKK1RoZSA6dmFyaWFibGU6YENQQUNLX0lGV19ST09UYCB2YXJpYWJsZSBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgYW5kIG92ZXJyaWRlcwordGhlIHZhbHVlIG9mIHRoZSA6dmFyaWFibGU6YFFUSUZXRElSYCB2YXJpYWJsZS4KKworT3RoZXIgU2V0dGluZ3MKK15eXl5eXl5eXl5eXl5eCiAKIE9ubGluZSBpbnN0YWxsZXIKLV5eXl5eXl5eXl5eXl5eXl4KKyIiIiIiIiIiIiIiIiIiIiIKIAotQnkgZGVmYXVsdCBDUGFjayBJRlcgZ2VuZXJhdG9yIG1ha2VzIG9mZmxpbmUgaW5zdGFsbGVyLiBUaGlzIG1lYW5zIHRoYXQgYWxsCi1jb21wb25lbnRzIHdpbGwgYmUgcGFja2FnZWQgaW50byBhIGJpbmFyeSBmaWxlLgorQnkgZGVmYXVsdCwgdGhpcyBnZW5lcmF0b3IgZ2VuZXJhdGVzIGFuICpvZmZsaW5lIGluc3RhbGxlciouIFRoaXMgbWVhbnMgdGhhdAordGhhdCBhbGwgcGFja2FnZWQgZmlsZXMgYXJlIGZ1bGx5IGNvbnRhaW5lZCBpbiB0aGUgaW5zdGFsbGVyIGV4ZWN1dGFibGUuCiAKLVRvIG1ha2UgYSBjb21wb25lbnQgZG93bmxvYWRlZCwgeW91IG11c3Qgc2V0IHRoZSBgYERPV05MT0FERURgYCBvcHRpb24gaW4KLTpjb21tYW5kOmBjcGFja19hZGRfY29tcG9uZW50YC4KK0luIGNvbnRyYXN0LCBhbiAqb25saW5lIGluc3RhbGxlciogd2lsbCBkb3dubG9hZCBzb21lIG9yIGFsbCBjb21wb25lbnRzIGZyb20KK2EgcmVtb3RlIHNlcnZlci4KIAotVGhlbiB5b3Ugd291bGQgdXNlIHRoZSBjb21tYW5kIDpjb21tYW5kOmBjcGFja19jb25maWd1cmVfZG93bmxvYWRzYC4KLUlmIHlvdSBzZXQgYGBBTExgYCBvcHRpb24gYWxsIGNvbXBvbmVudHMgd2lsbCBiZSBkb3dubG9hZGVkLgorVGhlIGBgRE9XTkxPQURFRGBgIG9wdGlvbiBpbiB0aGUgOmNvbW1hbmQ6YGNwYWNrX2FkZF9jb21wb25lbnRgIGNvbW1hbmQKK3NwZWNpZmllcyB0aGF0IGEgY29tcG9uZW50IGlzIHRvIGJlIGRvd25sb2FkZWQuIEFsdGVybmF0aXZlbHksIHRoZSBgYEFMTGBgCitvcHRpb24gaW4gdGhlIDpjb21tYW5kOmBjcGFja19jb25maWd1cmVfZG93bmxvYWRzYCBjb21tYW5kIHNwZWNpZmllcyB0aGF0CitgYWxsYCBjb21wb25lbnRzIGFyZSB0byBiZSBiZSBkb3dubG9hZGVkLgogCi1Zb3UgYWxzbyBjYW4gdXNlIGNvbW1hbmQgOmNvbW1hbmQ6YGNwYWNrX2lmd19hZGRfcmVwb3NpdG9yeWAgYW5kCi12YXJpYWJsZSA6dmFyaWFibGU6YENQQUNLX0lGV19ET1dOTE9BRF9BTExgIGZvciBtb3JlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCitUaGUgOmNvbW1hbmQ6YGNwYWNrX2lmd19hZGRfcmVwb3NpdG9yeWAgY29tbWFuZCBhbmQgdGhlCis6dmFyaWFibGU6YENQQUNLX0lGV19ET1dOTE9BRF9BTExgIHZhcmlhYmxlIGFsbG93IGZvciBtb3JlIHNwZWNpZmljCitjb25maWd1cmF0aW9uLgogCi1DUGFjayBJRlcgZ2VuZXJhdG9yIGNyZWF0ZXMgInJlcG9zaXRvcnkiIGRpciBpbiBjdXJyZW50IGJpbmFyeSBkaXIuIFlvdQotd291bGQgY29weSBjb250ZW50IG9mIHRoaXMgZGlyIHRvIHNwZWNpZmllZCBgYHNpdGVgYCAoYGB1cmxgYCkuCitXaGVuIHRoZXJlIGFyZSBvbmxpbmUgY29tcG9uZW50cywgQ1BhY2sgd2lsbCB3cml0ZSB0aGVtIHRvIGFyY2hpdmUgZmlsZXMuCitUaGUgaGVscCBwYWdlIG9mIHRoZSA6bW9kdWxlOmBDUGFja0NvbXBvbmVudGAgbW9kdWxlLCBlc3BlY2lhbGx5IHRoZSBzZWN0aW9uCitvbiB0aGUgOmNvbW1hbmQ6YGNwYWNrX2NvbmZpZ3VyZV9kb3dubG9hZHNgIGZ1bmN0aW9uLCBleHBsYWlucyBob3cgdG8gbWFrZQordGhlc2UgZmlsZXMgYWNjZXNzaWJsZSBmcm9tIGEgZG93bmxvYWQgVVJMLgorCitJbnRlcm5hdGlvbmFsaXphdGlvbgorIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworU29tZSB2YXJpYWJsZXMgYW5kIGNvbW1hbmQgYXJndW1lbnRzIHN1cHBvcnQgaW50ZXJuYXRpb25hbGl6YXRpb24gdmlhCitDTWFrZSBzY3JpcHQuIFRoaXMgaXMgYW4gb3B0aW9uYWwgZmVhdHVyZS4KKworSW5zdGFsbGVycyBjcmVhdGVkIGJ5IFF0SUZXIHRvb2xzIGhhdmUgYnVpbHQtaW4gc3VwcG9ydCBmb3IKK2ludGVybmF0aW9uYWxpemF0aW9uIGFuZCBtYW55IHBocmFzZXMgYXJlIGxvY2FsaXplZCB0byBtYW55IGxhbmd1YWdlcywKK2J1dCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgeW91ciBjb21wb25lbnRzIGFuZCBncm91cHMKK3RoYXQgd2lsbCBiZSBkaXN0cmlidXRlZC4KKworTG9jYWxpemF0aW9uIG9mIHRoZSBkZXNjcmlwdGlvbiBvZiB5b3VyIGNvbXBvbmVudHMgYW5kIGdyb3VwcyBpcyB1c2VmdWwgZm9yCit1c2VycyBvZiB5b3VyIGluc3RhbGxlcnMuCisKK0EgbG9jYWxpemVkIHZhcmlhYmxlIG9yIGFyZ3VtZW50IGNhbiBjb250YWluIGEgc2luZ2xlIGRlZmF1bHQgdmFsdWUsIGFuZCBhCitzZXQgb2YgcGFpcnMgdGhlIG5hbWUgb2YgdGhlIGxvY2FsZSBhbmQgdGhlIGxvY2FsaXplZCB2YWx1ZS4KKworRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICBzZXQoTE9DQUxJWkFCTEVfVkFSSUFCTEUgIkRlZmF1bHQgdmFsdWUiCisgICAgIGVuICJFbmdsaXNoIHZhbHVlIgorICAgICBlbl9VUyAiQW1lcmljYW4gdmFsdWUiCisgICAgIGVuX0dCICJHcmVhdCBCcml0YWluIHZhbHVlIgorICAgICApCiAKIFNlZSBBbHNvCiBeXl5eXl5eXgpAQCAtMzM1LDUgKzM0Myw1IEBACiAqIFByb21vdGluZyBVcGRhdGVzOgogICBodHRwOi8vZG9jLnF0LmlvL3F0aW5zdGFsbGVyZnJhbWV3b3JrL2lmdy11cGRhdGVzLmh0bWwKIAotRG93bmxvYWQgUXQgSW5zdGFsbGVyIEZyYW1ld29yayBmb3IgeW91IHBsYXRmb3JtIGZyb20gUXQgc2l0ZToKK0Rvd25sb2FkIFF0IEluc3RhbGxlciBGcmFtZXdvcmsgZm9yIHlvdXIgcGxhdGZvcm0gZnJvbSBRdCBzaXRlOgogIGh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC1pbnN0YWxsZXItZnJhbWV3b3JrCmRpZmYgLS1naXQgYS9IZWxwL2NwYWNrX2dlbi9uc2lzLnJzdCBiL0hlbHAvY3BhY2tfZ2VuL25zaXMucnN0CmluZGV4IGNkMmFlYTYuLjBkZDg3NmUgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL25zaXMucnN0CisrKyBiL0hlbHAvY3BhY2tfZ2VuL25zaXMucnN0CkBAIC0xLDcgKzEsOSBAQAogQ1BhY2sgTlNJUyBHZW5lcmF0b3IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNQYWNrIE51bGxzb2Z0IFNjcmlwdGFibGUgSW5zdGFsbCBTeXN0ZW0gKE5TSVMpIGdlbmVyYXRvciBzcGVjaWZpYyBvcHRpb25zCitDUGFjayBOdWxsc29mdCBTY3JpcHRhYmxlIEluc3RhbGwgU3lzdGVtIChOU0lTKSBnZW5lcmF0b3Igc3BlY2lmaWMgb3B0aW9ucy4KKworVGhlIE5TSVMgZ2VuZXJhdG9yIHJlcXVpcmVzIE5TSVMgMy4wIG9yIG5ld2VyLgogCiBWYXJpYWJsZXMgc3BlY2lmaWMgdG8gQ1BhY2sgTlNJUyBnZW5lcmF0b3IKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpAQCAtMTI4LDMgKzEzMCwzMiBAQAogICBzZXQoQ1BBQ0tfTlNJU19NRU5VX0xJTktTCiAgICAgICAiZG9jL2NtYWtlLUBDTWFrZV9WRVJTSU9OX01BSk9SQC5AQ01ha2VfVkVSU0lPTl9NSU5PUkAvY21ha2UuaHRtbCIKICAgICAgICJDTWFrZSBIZWxwIiAiaHR0cHM6Ly9jbWFrZS5vcmciICJDTWFrZSBXZWIgU2l0ZSIpCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfTlNJU19VTklOU1RBTExfTkFNRQorCisgU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1bmluc3RhbGwgdGhlIHZlcnNpb24uCisgRGVmYXVsdCBpcyBgYFVuaW5zdGFsbGBgLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX05TSVNfV0VMQ09NRV9USVRMRQorCisgIFRoZSB0aXRsZSB0byBkaXNwbGF5IG9uIHRoZSB0b3Agb2YgdGhlIHBhZ2UgZm9yIHRoZSB3ZWxjb21lIHBhZ2UuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfTlNJU19XRUxDT01FX1RJVExFXzNMSU5FUworCisgRGlzcGxheSB0aGUgdGl0bGUgaW4gdGhlIHdlbGNvbWUgcGFnZSBvbiAzIGxpbmVzIGluc3RlYWQgb2YgMi4KKworLi4gdmFyaWFibGU6OiBDUEFDS19OU0lTX0ZJTklTSF9USVRMRQorCisgVGhlIHRpdGxlIHRvIGRpc3BsYXkgb24gdGhlIHRvcCBvZiB0aGUgcGFnZSBmb3IgdGhlIGZpbmlzaCBwYWdlLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX05TSVNfRklOSVNIX1RJVExFXzNMSU5FUworCisgRGlzcGxheSB0aGUgdGl0bGUgaW4gdGhlIGZpbmlzaCBwYWdlIG9uIDMgbGluZXMgaW5zdGVhZCBvZiAyLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX05TSVNfTVVJX0hFQURFUklNQUdFCisKKyBUaGUgaW1hZ2UgdG8gZGlzcGxheSBvbiB0aGUgaGVhZGVyIG9mIGluc3RhbGxlcnMgcGFnZXMuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfTlNJU19NQU5JRkVTVF9EUElfQVdBUkUKKworIElmIHNldCwgZGVjbGFyZXMgdGhhdCB0aGUgaW5zdGFsbGVyIGlzIERQSS1hd2FyZS4KZGlmZiAtLWdpdCBhL0hlbHAvY3BhY2tfZ2VuL3BhY2thZ2VtYWtlci5yc3QgYi9IZWxwL2NwYWNrX2dlbi9wYWNrYWdlbWFrZXIucnN0CmluZGV4IGU5NDY0YjcuLjM1N2ViNzMgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL3BhY2thZ2VtYWtlci5yc3QKKysrIGIvSGVscC9jcGFja19nZW4vcGFja2FnZW1ha2VyLnJzdApAQCAtMyw2ICszLDExIEBACiAKIFBhY2thZ2VNYWtlciBDUGFjayBnZW5lcmF0b3IgKG1hY09TKS4KIAorLi4gZGVwcmVjYXRlZDo6IDMuMTcKKworICBYY29kZSBubyBsb25nZXIgZGlzdHJpYnV0ZXMgdGhlIFBhY2thZ2VNYWtlciB0b29scy4KKyAgVGhpcyBDUGFjayBnZW5lcmF0b3Igd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgQ1BhY2suCisKIFZhcmlhYmxlcyBzcGVjaWZpYyB0byBDUGFjayBQYWNrYWdlTWFrZXIgZ2VuZXJhdG9yCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0xNSw5ICsyMCw2MCBAQAogIGNvbXBhdGlibGUgd2l0aC4gRGlmZmVyZW50IHZlcnNpb25zIG9mIG1hY09TIHN1cHBvcnQgZGlmZmVyZW50CiAgZmVhdHVyZXMuIEZvciBleGFtcGxlLCBDUGFjayBjYW4gb25seSBidWlsZCBjb21wb25lbnQtYmFzZWQgaW5zdGFsbGVycyBmb3IKICBtYWNPUyAxMC40IG9yIG5ld2VyLCBhbmQgY2FuIG9ubHkgYnVpbGQgaW5zdGFsbGVycyB0aGF0IGRvd25sb2FkCi0gY29tcG9uZW50IHNvbi10aGUtZmx5IGZvciBtYWNPUyAxMC41IG9yIG5ld2VyLiBJZiBsZWZ0IGJsYW5rLCB0aGlzIHZhbHVlCisgY29tcG9uZW50cyBvbi10aGUtZmx5IGZvciBtYWNPUyAxMC41IG9yIG5ld2VyLiBJZiBsZWZ0IGJsYW5rLCB0aGlzIHZhbHVlCiAgd2lsbCBiZSBzZXQgdG8gdGhlIG1pbmltdW0gdmVyc2lvbiBvZiBtYWNPUyB0aGF0IHN1cHBvcnRzIHRoZSByZXF1ZXN0ZWQKICBmZWF0dXJlcy4gU2V0IHRoaXMgdmFyaWFibGUgdG8gc29tZSB2YWx1ZSAoZS5nLiwgMTAuNCkgb25seSBpZiB5b3Ugd2FudCB0bwogIGd1YXJhbnRlZSB0aGF0IHlvdXIgaW5zdGFsbGVyIHdpbGwgd29yayBvbiB0aGF0IHZlcnNpb24gb2YgbWFjT1MsIGFuZAogIGRvbid0IG1pbmQgbWlzc2luZyBleHRyYSBmZWF0dXJlcyBhdmFpbGFibGUgaW4gdGhlIGluc3RhbGxlciBzaGlwcGluZyB3aXRoCiAgbGF0ZXIgdmVyc2lvbnMgb2YgbWFjT1MuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkQKKworIEFkZHMgYSBiYWNrZ3JvdW5kIHRvIERpc3RyaWJ1dGlvbiBYTUwgaWYgc3BlY2lmaWVkLiBUaGUgdmFsdWUgY29udGFpbnMgdGhlCisgcGF0aCB0byBpbWFnZSBpbiBgYFJlc291cmNlc2BgIGRpcmVjdG9yeS4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QQUNLQUdFTUFLRVJfQkFDS0dST1VORF9BTElHTk1FTlQKKworIEFkZHMgYW4gYGBhbGlnbm1lbnRgYCBhdHRyaWJ1dGUgdG8gdGhlIGJhY2tncm91bmQgaW4gRGlzdHJpYnV0aW9uIFhNTC4KKyBSZWZlciB0byBBcHBsZSBkb2N1bWVudGF0aW9uIGZvciB2YWxpZCB2YWx1ZXMuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfU0NBTElORworCisgQWRkcyBhIGBgc2NhbGluZ2BgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFJlZmVyIHRvIEFwcGxlIGRvY3VtZW50YXRpb24gZm9yIHZhbGlkIHZhbHVlcy4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QQUNLQUdFTUFLRVJfQkFDS0dST1VORF9NSU1FX1RZUEUKKworIEFkZHMgYSBgYG1pbWUtdHlwZWBgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFRoZSBvcHRpb24gY29udGFpbnMgTUlNRSB0eXBlIG9mIGFuIGltYWdlLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX1VUSQorCisgQWRkcyBhbiBgYHV0aWBgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFRoZSBvcHRpb24gY29udGFpbnMgVVRJIHR5cGUgb2YgYW4gaW1hZ2UuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfREFSS0FRVUEKKworIEFkZHMgYSBiYWNrZ3JvdW5kIGZvciB0aGUgRGFyayBBcXVhIHRoZW1lIHRvIERpc3RyaWJ1dGlvbiBYTUwgaWYKKyBzcGVjaWZpZWQuIFRoZSB2YWx1ZSBjb250YWlucyB0aGUgcGF0aCB0byBpbWFnZSBpbiBgYFJlc291cmNlc2BgCisgZGlyZWN0b3J5LgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX0RBUktBUVVBX0FMSUdOTUVOVAorCisgRG9lcyB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX0FMSUdOTUVOVGAgb3B0aW9uLAorIGJ1dCBmb3IgdGhlIGRhcmsgdGhlbWUuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfREFSS0FRVUFfU0NBTElORworCisgRG9lcyB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX1NDQUxJTkdgIG9wdGlvbiwKKyBidXQgZm9yIHRoZSBkYXJrIHRoZW1lLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX0RBUktBUVVBX01JTUVfVFlQRQorCisgRG9lcyB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENQQUNLX1BBQ0tBR0VNQUtFUl9CQUNLR1JPVU5EX01JTUVfVFlQRWAgb3B0aW9uLAorIGJ1dCBmb3IgdGhlIGRhcmsgdGhlbWUuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfREFSS0FRVUFfVVRJCisKKyBEb2VzIHRoZSBzYW1lIGFzIDp2YXJpYWJsZTpgQ1BBQ0tfUEFDS0FHRU1BS0VSX0JBQ0tHUk9VTkRfVVRJYCBvcHRpb24sCisgYnV0IGZvciB0aGUgZGFyayB0aGVtZS4KZGlmZiAtLWdpdCBhL0hlbHAvY3BhY2tfZ2VuL3Byb2R1Y3RidWlsZC5yc3QgYi9IZWxwL2NwYWNrX2dlbi9wcm9kdWN0YnVpbGQucnN0CmluZGV4IGQyMmZjZDQuLmZkOTllNWEgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL3Byb2R1Y3RidWlsZC5yc3QKKysrIGIvSGVscC9jcGFja19nZW4vcHJvZHVjdGJ1aWxkLnJzdApAQCAtNTgsNyArNTgsNiBAQAogIGNvbXBvbmVudCBuYW1lLiAgTm8gYGBwb3N0aW5zdGFsbGBgIHNjcmlwdCBpcyBhZGRlZCBpZiB0aGlzIHZhcmlhYmxlIGlzIG5vdAogIGRlZmluZWQgZm9yIGEgZ2l2ZW4gY29tcG9uZW50LgogCi0KIC4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX1JFU09VUkNFU19ESVIKIAogIElmIHNwZWNpZmllZCB0aGUgcHJvZHVjdGJ1aWxkIGdlbmVyYXRvciBjb3BpZXMgZmlsZXMgZnJvbSB0aGlzIGRpcmVjdG9yeQpAQCAtNjYsMyArNjUsNTQgQEAKICBiZWZvcmUgdGhlIDp2YXJpYWJsZTpgQ1BBQ0tfUkVTT1VSQ0VfRklMRV9XRUxDT01FYCwKICA6dmFyaWFibGU6YENQQUNLX1JFU09VUkNFX0ZJTEVfUkVBRE1FYCwgYW5kCiAgOnZhcmlhYmxlOmBDUEFDS19SRVNPVVJDRV9GSUxFX0xJQ0VOU0VgIGZpbGVzIGFyZSBjb3BpZWQuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkQKKworIEFkZHMgYSBiYWNrZ3JvdW5kIHRvIERpc3RyaWJ1dGlvbiBYTUwgaWYgc3BlY2lmaWVkLiBUaGUgdmFsdWUgY29udGFpbnMgdGhlCisgcGF0aCB0byBpbWFnZSBpbiBgYFJlc291cmNlc2BgIGRpcmVjdG9yeS4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QUk9EVUNUQlVJTERfQkFDS0dST1VORF9BTElHTk1FTlQKKworIEFkZHMgYW4gYGBhbGlnbm1lbnRgYCBhdHRyaWJ1dGUgdG8gdGhlIGJhY2tncm91bmQgaW4gRGlzdHJpYnV0aW9uIFhNTC4KKyBSZWZlciB0byBBcHBsZSBkb2N1bWVudGF0aW9uIGZvciB2YWxpZCB2YWx1ZXMuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfU0NBTElORworCisgQWRkcyBhIGBgc2NhbGluZ2BgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFJlZmVyIHRvIEFwcGxlIGRvY3VtZW50YXRpb24gZm9yIHZhbGlkIHZhbHVlcy4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QUk9EVUNUQlVJTERfQkFDS0dST1VORF9NSU1FX1RZUEUKKworIEFkZHMgYSBgYG1pbWUtdHlwZWBgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFRoZSBvcHRpb24gY29udGFpbnMgTUlNRSB0eXBlIG9mIGFuIGltYWdlLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EX1VUSQorCisgQWRkcyBhbiBgYHV0aWBgIGF0dHJpYnV0ZSB0byB0aGUgYmFja2dyb3VuZCBpbiBEaXN0cmlidXRpb24gWE1MLgorIFRoZSBvcHRpb24gY29udGFpbnMgVVRJIHR5cGUgb2YgYW4gaW1hZ2UuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfREFSS0FRVUEKKworIEFkZHMgYSBiYWNrZ3JvdW5kIGZvciB0aGUgRGFyayBBcXVhIHRoZW1lIHRvIERpc3RyaWJ1dGlvbiBYTUwgaWYKKyBzcGVjaWZpZWQuIFRoZSB2YWx1ZSBjb250YWlucyB0aGUgcGF0aCB0byBpbWFnZSBpbiBgYFJlc291cmNlc2BgCisgZGlyZWN0b3J5LgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EX0RBUktBUVVBX0FMSUdOTUVOVAorCisgRG9lcyB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EX0FMSUdOTUVOVGAgb3B0aW9uLAorIGJ1dCBmb3IgdGhlIGRhcmsgdGhlbWUuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfREFSS0FRVUFfU0NBTElORworCisgRG9lcyB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EX1NDQUxJTkdgIG9wdGlvbiwKKyBidXQgZm9yIHRoZSBkYXJrIHRoZW1lLgorCisuLiB2YXJpYWJsZTo6IENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EX0RBUktBUVVBX01JTUVfVFlQRQorCisgRG9lcyB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EX01JTUVfVFlQRWAgb3B0aW9uLAorIGJ1dCBmb3IgdGhlIGRhcmsgdGhlbWUuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfREFSS0FRVUFfVVRJCisKKyBEb2VzIHRoZSBzYW1lIGFzIDp2YXJpYWJsZTpgQ1BBQ0tfUFJPRFVDVEJVSUxEX0JBQ0tHUk9VTkRfVVRJYCBvcHRpb24sCisgYnV0IGZvciB0aGUgZGFyayB0aGVtZS4KZGlmZiAtLWdpdCBhL0hlbHAvY3BhY2tfZ2VuL3JwbS5yc3QgYi9IZWxwL2NwYWNrX2dlbi9ycG0ucnN0CmluZGV4IDI2OTNjN2IuLmNjYjdlYmQgMTAwNjQ0Ci0tLSBhL0hlbHAvY3BhY2tfZ2VuL3JwbS5yc3QKKysrIGIvSGVscC9jcGFja19nZW4vcnBtLnJzdApAQCAtMzYsOCArMzYsOCBAQAogSGVyZSBhcmUgc29tZSBDUGFjayBSUE0gZ2VuZXJhdG9yIHdpa2kgcmVzb3VyY2VzIHRoYXQgYXJlIGhlcmUgZm9yIGhpc3RvcmljCiByZWFzb25zIGFuZCBhcmUgbm8gbG9uZ2VyIG1haW50YWluZWQgYnV0IG1heSBzdGlsbCBwcm92ZSB1c2VmdWw6CiAKLSAtIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NvbW11bml0eS93aWtpcy9kb2MvY3BhY2svQ29uZmlndXJhdGlvbgotIC0gaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY29tbXVuaXR5L3dpa2lzL2RvYy9jcGFjay9QYWNrYWdlR2VuZXJhdG9ycyNycG0tdW5peC1vbmx5CisgLSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvLS93aWtpcy9kb2MvY3BhY2svQ29uZmlndXJhdGlvbgorIC0gaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY29tbXVuaXR5Ly0vd2lraXMvZG9jL2NwYWNrL1BhY2thZ2VHZW5lcmF0b3JzI3JwbS11bml4LW9ubHkKIAogTGlzdCBvZiBDUGFjayBSUE0gZ2VuZXJhdG9yIHNwZWNpZmljIHZhcmlhYmxlczoKIApAQCAtNDczLDM4ICs0NzMsNDIgQEAKIAogLi4gdmFyaWFibGU6OiBDUEFDS19SUE1fUFJFX0lOU1RBTExfU0NSSVBUX0ZJTEUKICAgICAgICAgICAgICAgQ1BBQ0tfUlBNX1BSRV9VTklOU1RBTExfU0NSSVBUX0ZJTEUKKyAgICAgICAgICAgICAgQ1BBQ0tfUlBNX1BSRV9UUkFOU19TQ1JJUFRfRklMRQogCi0gUGF0aCB0byBmaWxlIGNvbnRhaW5pbmcgcHJlICh1bilpbnN0YWxsIHNjcmlwdC4KKyBQYXRoIHRvIGZpbGUgY29udGFpbmluZyBwcmUgaW5zdGFsbC91bmluc3RhbGwvdHJhbnNhY3Rpb24gc2NyaXB0LgogCiAgKiBNYW5kYXRvcnkgOiBOTwogICogRGVmYXVsdCAgIDogLQogCi0gTWF5IGJlIHVzZWQgdG8gZW1iZWQgYSBwcmUgKHVuKWluc3RhbGxhdGlvbiBzY3JpcHQgaW4gdGhlIHNwZWMgZmlsZS4KKyBNYXkgYmUgdXNlZCB0byBlbWJlZCBhIHByZSBpbnN0YWxsYXRpb24vdW5pbnN0YWxsYXRpb24vdHJhbnNhY3Rpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCiAgVGhlIHJlZmVycmVkIHNjcmlwdCBmaWxlIChvciBib3RoKSB3aWxsIGJlIHJlYWQgYW5kIGRpcmVjdGx5CiAgcHV0IGFmdGVyIHRoZSBgYCVwcmVgYCBvciBgYCVwcmV1bmBgIHNlY3Rpb24KLSBJZiA6dmFyaWFibGU6YENQQUNLX1JQTV9DT01QT05FTlRfSU5TVEFMTGAgaXMgc2V0IHRvIE9OIHRoZSAodW4paW5zdGFsbAorIElmIDp2YXJpYWJsZTpgQ1BBQ0tfUlBNX0NPTVBPTkVOVF9JTlNUQUxMYCBpcyBzZXQgdG8gT04gdGhlIGluc3RhbGwvdW5pbnN0YWxsL3RyYW5zYWN0aW9uCiAgc2NyaXB0IGZvciBlYWNoIGNvbXBvbmVudCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoCi0gYGBDUEFDS19SUE1fPENPTVBPTkVOVD5fUFJFX0lOU1RBTExfU0NSSVBUX0ZJTEVgYCBhbmQKLSBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QUkVfVU5JTlNUQUxMX1NDUklQVF9GSUxFYGAuCisgYGBDUEFDS19SUE1fPENPTVBPTkVOVD5fUFJFX0lOU1RBTExfU0NSSVBUX0ZJTEVgYCwKKyBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QUkVfVU5JTlNUQUxMX1NDUklQVF9GSUxFYGAsIGFuZAorIGBgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BSRV9UUkFOU19TQ1JJUFRfRklMRWBgCiAgT25lIG1heSB2ZXJpZnkgd2hpY2ggc2NyaXB0bGV0IGhhcyBiZWVuIGluY2x1ZGVkIHdpdGg6OgogCiAgIHJwbSAtcXAgLS1zY3JpcHRzICBwYWNrYWdlLnJwbQogCiAuLiB2YXJpYWJsZTo6IENQQUNLX1JQTV9QT1NUX0lOU1RBTExfU0NSSVBUX0ZJTEUKICAgICAgICAgICAgICAgQ1BBQ0tfUlBNX1BPU1RfVU5JTlNUQUxMX1NDUklQVF9GSUxFCisgICAgICAgICAgICAgIENQQUNLX1JQTV9QT1NUX1RSQU5TX1NDUklQVF9GSUxFCiAKLSBQYXRoIHRvIGZpbGUgY29udGFpbmluZyBwb3N0ICh1bilpbnN0YWxsIHNjcmlwdC4KKyBQYXRoIHRvIGZpbGUgY29udGFpbmluZyBwb3N0IGluc3RhbGwvdW5pbnN0YWxsL3RyYW5zYWN0aW9uIHNjcmlwdC4KIAogICogTWFuZGF0b3J5IDogTk8KICAqIERlZmF1bHQgICA6IC0KIAotIE1heSBiZSB1c2VkIHRvIGVtYmVkIGEgcG9zdCAodW4paW5zdGFsbGF0aW9uIHNjcmlwdCBpbiB0aGUgc3BlYyBmaWxlLgorIE1heSBiZSB1c2VkIHRvIGVtYmVkIGEgcG9zdCBpbnN0YWxsYXRpb24vdW5pbnN0YWxsYXRpb24vdHJhbnNhY3Rpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCiAgVGhlIHJlZmVycmVkIHNjcmlwdCBmaWxlIChvciBib3RoKSB3aWxsIGJlIHJlYWQgYW5kIGRpcmVjdGx5CiAgcHV0IGFmdGVyIHRoZSBgYCVwb3N0YGAgb3IgYGAlcG9zdHVuYGAgc2VjdGlvbi4KLSBJZiA6dmFyaWFibGU6YENQQUNLX1JQTV9DT01QT05FTlRfSU5TVEFMTGAgaXMgc2V0IHRvIE9OIHRoZSAodW4paW5zdGFsbAorIElmIDp2YXJpYWJsZTpgQ1BBQ0tfUlBNX0NPTVBPTkVOVF9JTlNUQUxMYCBpcyBzZXQgdG8gT04gdGhlIGluc3RhbGwvdW5pbnN0YWxsL3RyYW5zYWN0aW9uCiAgc2NyaXB0IGZvciBlYWNoIGNvbXBvbmVudCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoCi0gYGBDUEFDS19SUE1fPENPTVBPTkVOVD5fUE9TVF9JTlNUQUxMX1NDUklQVF9GSUxFYGAgYW5kCi0gYGBDUEFDS19SUE1fPENPTVBPTkVOVD5fUE9TVF9VTklOU1RBTExfU0NSSVBUX0ZJTEVgYC4KKyBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX0lOU1RBTExfU0NSSVBUX0ZJTEVgYCwKKyBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX1VOSU5TVEFMTF9TQ1JJUFRfRklMRWBgLCBhbmQKKyBgYENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX1RSQU5TX1NDUklQVF9GSUxFYGAKICBPbmUgbWF5IHZlcmlmeSB3aGljaCBzY3JpcHRsZXQgaGFzIGJlZW4gaW5jbHVkZWQgd2l0aDo6CiAKICAgcnBtIC1xcCAtLXNjcmlwdHMgIHBhY2thZ2UucnBtCmRpZmYgLS1naXQgYS9IZWxwL2Rldi9tYWludC5yc3QgYi9IZWxwL2Rldi9tYWludC5yc3QKaW5kZXggNDRlMjI3My4uNGMyYzg5ZiAxMDA2NDQKLS0tIGEvSGVscC9kZXYvbWFpbnQucnN0CisrKyBiL0hlbHAvZGV2L21haW50LnJzdApAQCAtMTQsNiArMTQsMTEgQEAKIFRoZSBgQ01ha2UgUmV2aWV3IFByb2Nlc3NgXyByZXF1aXJlcyBhIG1haW50YWluZXIgdG8gaXNzdWUgdGhlIGBgRG86IG1lcmdlYGAKIGNvbW1hbmQgdG8gaW50ZWdyYXRlIGEgbWVyZ2UgcmVxdWVzdC4gIFBsZWFzZSBjaGVjayBhdCBsZWFzdCB0aGUgZm9sbG93aW5nOgogCisqIElmIHRoZSBNUiBzb3VyY2UgYnJhbmNoIChvciBwYXJ0IG9mIGl0KSBzaG91bGQgYmUgYmFja3BvcnRlZAorICB0byB0aGUgYGByZWxlYXNlYGAgYnJhbmNoIChhbmQgaXMgYWxyZWFkeSBiYXNlZCBvbiBhIGNvbW1pdAorICBjb250YWluZWQgaW4gdGhlIGBgcmVsZWFzZWBgIGJyYW5jaCksIGFkZCBhIGBgQmFja3BvcnQ6IHJlbGVhc2VgYCBvcgorICBgYEJhY2twb3J0OiByZWxlYXNlOjxjb21taXQtaXNoPmBgIHRyYWlsaW5nIGxpbmUgdG8gdGhlIE1SIGRlc2NyaXB0aW9uLgorCiAqIElmIHRoZSBNUiBzb3VyY2UgYnJhbmNoIGlzIG5vdCBuYW1lZCB3ZWxsIGZvciB0aGUgY2hhbmdlIGl0IG1ha2VzCiAgIChlLmcuIGl0IGlzIGp1c3QgYGBtYXN0ZXJgYCBvciB0aGUgcGF0Y2ggY2hhbmdlZCBkdXJpbmcgcmV2aWV3KSwKICAgYWRkIGEgYGBUb3BpYy1yZW5hbWU6IDx0b3BpYz5gYCB0cmFpbGluZyBsaW5lIHRvIHRoZSBNUiBkZXNjcmlwdGlvbgpAQCAtMzgsOSArNDMsMTAgQEAKICAgb2YgdmFyaW91cyBuaWdodGx5IGJ1aWxkZXJzLikKIAogKiBFbnN1cmUgdGhhdCB0aGUgTVIgdGFyZ2V0cyB0aGUgYGBtYXN0ZXJgYCBicmFuY2guICBBIE1SIGludGVuZGVkIGZvcgotICB0aGUgYGByZWxlYXNlYGAgYnJhbmNoIHNob3VsZCBiZSBiYXNlZCBvbiBgYHJlbGVhc2VgYCBidXQgc3RpbGwgbWVyZ2VkCi0gIHRvIGBgbWFzdGVyYGAgZmlyc3QgKHZpYSBgYERvOiBtZXJnZWBgKS4gIEEgbWFpbnRhaW5lciBtYXkgdGhlbiBtZXJnZQotICB0aGUgTVIgdG9waWMgdG8gYGByZWxlYXNlYGAgbWFudWFsbHkuCisgIHRoZSBgYHJlbGVhc2VgYCBicmFuY2ggc2hvdWxkIGJlIGJhc2VkIG9uIGBgcmVsZWFzZWBgIGJ1dCBzdGlsbCB0YXJnZXQKKyAgYGBtYXN0ZXJgYC4gIFVzZSB0aGUgYWJvdmUtbWVudGlvbmVkIGBgQmFja3BvcnQ6IHJlbGVhc2VgYCBsaW5lIHRvIHRlbGwKKyAgYGBEbzogbWVyZ2VgYCB0byBtZXJnZSB0byBib3RoLiAgSWYgYSBNUiBpcyBtZXJnZWQgd2l0aG91dCB0aGUgYmFja3BvcnQKKyAgbGluZSwgYSBtYWludGFpbmVyIG1heSBzdGlsbCBtZXJnZSB0aGUgTVIgdG9waWMgdG8gYGByZWxlYXNlYGAgbWFudWFsbHkuCiAKIE1haW50YWluIEN1cnJlbnQgUmVsZWFzZQogPT09PT09PT09PT09PT09PT09PT09PT09CkBAIC01MSw2ICs1NywxMiBAQAogbnVtYmVyIG9mIHRoZSBjdXJyZW50IHJlbGVhc2UgaW4gdGhlIGZvcm0gYGAkbWFqb3IuJG1pbm9yYGAuICBJdCBpcyBhbHdheXMKIG1lcmdlZCBpbnRvIGBgbWFzdGVyYGAgYmVmb3JlIHB1Ymxpc2hpbmcuCiAKK1RvIG1lcmdlIGFuIG9wZW4gTVIgdG8gdGhlIGBgcmVsZWFzZWBgIGJyYW5jaCwgZWRpdCBpdHMgZGVzY3JpcHRpb24gdG8KK3VzZSB0aGUgYGBCYWNrcG9ydDogcmVsZWFzZWBgIGxpbmUgbWVudGlvbmVkIGFib3ZlIGFuZCB0aGVuIGBgRG86IG1lcmdlYGAKK25vcm1hbGx5LiAgVG8gdXBkYXRlIHRoZSBgYHJlbGVhc2VgYCBicmFuY2ggbWFudWFsbHkgKGUuZy4gdG8gbWVyZ2UgYQorYGAkdG9waWNgYCBicmFuY2ggdGhhdCB3YXMgbWVyZ2VkIHdpdGhvdXQgdGhlIGJhY2twb3J0IGxpbmUpLCB1c2UgdGhlCitmb2xsb3dpbmcgcHJvY2VkdXJlLgorCiBCZWZvcmUgbWVyZ2luZyBhIGBgJHRvcGljYGAgYnJhbmNoIGludG8gYGByZWxlYXNlYGAsIHZlcmlmeSB0aGF0IHRoZQogYGAkdG9waWNgYCBicmFuY2ggaGFzIGFscmVhZHkgYmVlbiBtZXJnZWQgdG8gYGBtYXN0ZXJgYCB2aWEgdGhlIHVzdWFsCiBgYERvOiBtZXJnZWBgIHByb2Nlc3MuICBUaGVuLCB0byBtZXJnZSB0aGUgYGAkdG9waWNgYCBicmFuY2ggaW50bwpAQCAtMTg4LDYgKzIwMCwyMyBAQAogICBBZGQgc2VjdGlvbiBoZWFkZXJzIHNpbWlsYXIgdG8gdGhlICRwcmV2IHJlbGVhc2Ugbm90ZXMgYW5kIG1vdmUgZWFjaAogICBpbmRpdmlkdWFsIGJ1bGxldCBpbnRvIGFuIGFwcHJvcHJpYXRlIHNlY3Rpb24uICBSZXZpc2UgYSBmZXcgYnVsbGV0cy4KIAorVXBkYXRlIFNwaGlueCBgYHZlcnNpb25hZGRlZGBgIGRpcmVjdGl2ZXMgaW4gZG9jdW1lbnRzIGFkZGVkIHNpbmNlCit0aGUgcHJldmlvdXMgcmVsZWFzZSBieSBydW5uaW5nIHRoZSBgdXBkYXRlX3ZlcnNpb25zLnB5YF8gc2NyaXB0OgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwKKworICBVdGlsaXRpZXMvU3BoaW54L3VwZGF0ZV92ZXJzaW9ucy5weSAtLXNpbmNlIHYkcHJldi4wIC0tb3ZlcndyaXRlCisKKy4uIF9gdXBkYXRlX3ZlcnNpb25zLnB5YDogLi4vLi4vVXRpbGl0aWVzL1NwaGlueC91cGRhdGVfdmVyc2lvbnMucHkKKworQ29tbWl0IHRoZSBjaGFuZ2VzIHdpdGggYSBtZXNzYWdlIHN1Y2ggYXM6OgorCisgIEhlbHA6IFVwZGF0ZSBTcGhpbnggdmVyc2lvbmFkZGVkIGRpcmVjdGl2ZXMgZm9yICR2ZXIgcmVsZWFzZQorCisgIFJ1biB0aGUgc2NyaXB0OgorCisgICAgICBVdGlsaXRpZXMvU3BoaW54L3VwZGF0ZV92ZXJzaW9ucy5weSAtLXNpbmNlIHYkcHJldi4wIC0tb3ZlcndyaXRlCisKIE9wZW4gYSBtZXJnZSByZXF1ZXN0IHdpdGggdGhlIGBgZG9jLSR2ZXItcmVsbm90ZXNgYCBicmFuY2ggZm9yIHJldmlldwogYW5kIGludGVncmF0aW9uLiAgRnVydGhlciBzdGVwcyBtYXkgcHJvY2VlZCBhZnRlciB0aGlzIGhhcyBiZWVuIG1lcmdlZAogdG8gYGBtYXN0ZXJgYC4KQEAgLTI4NywzICszMTYsMjggQEAKICAgYmVmb3JlIHN0YWdpbmcgb3IgbWVyZ2luZy4KIAogLi4gX2BDTWFrZSBEaXNjb3Vyc2UgRm9ydW0gRGV2ZWxvcG1lbnQgQ2F0ZWdvcnlgOiBodHRwczovL2Rpc2NvdXJzZS5jbWFrZS5vcmcvYy9kZXZlbG9wbWVudAorCitJbml0aWFsIFBvc3QtUmVsZWFzZSBEZXZlbG9wbWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVwcmVjYXRlIHBvbGljaWVzIG1vcmUgdGhhbiA4IHJlbGVhc2Ugc2VyaWVzIG9sZCBieSB1cGRhdGluZyB0aGUKK3BvbGljeSByYW5nZSBjaGVjayBpbiBgYGNtTWFrZWZpbGU6OlNldFBvbGljeWBgLgorQ29tbWl0IHdpdGggYSBtZXNzYWdlIHN1Y2ggYXM6OgorCisgIEFkZCBkZXByZWNhdGlvbiB3YXJuaW5ncyBmb3IgcG9saWNpZXMgQ01QIyMjIyBhbmQgYmVsb3cKKworICBUaGUgT0xEIGJlaGF2aW9ycyBvZiBhbGwgcG9saWNpZXMgYXJlIGRlcHJlY2F0ZWQsIGJ1dCBvbmx5IGJ5CisgIGRvY3VtZW50YXRpb24uICBBZGQgYW4gZXhwbGljaXQgZGVwcmVjYXRpb24gZGlhZ25vc3RpYyBmb3IgcG9saWNpZXMKKyAgaW50cm9kdWNlZCBpbiBDTWFrZSAkT0xEVkVSIGFuZCBiZWxvdyB0byBlbmNvdXJhZ2UgcHJvamVjdHMgdG8gcG9ydAorICBhd2F5IGZyb20gc2V0dGluZyBwb2xpY2llcyB0byBPTEQuCisKK1VwZGF0ZSB0aGUgYGBjbWFrZV9wb2xpY3lgYCB2ZXJzaW9uIHJhbmdlIGdlbmVyYXRlZCBieSBgYGluc3RhbGwoRVhQT1JUKWBgCitpbiBgYGNtRXhwb3J0RmlsZUdlbmVyYXRvcjo6R2VuZXJhdGVQb2xpY3lIZWFkZXJDb2RlYGAgdG8gZW5kIGF0IHRoZQorcHJldmlvdXMgcmVsZWFzZS4gIFdlIHVzZSBvbmUgcmVsZWFzZSBiYWNrIHNpbmNlIHdlIG5vdyBrbm93IGFsbCB0aGUKK3BvbGljaWVzIGFkZGVkIGZvciB0aGF0IHZlcnNpb24uICBDb21taXQgd2l0aCBhIG1lc3NhZ2Ugc3VjaCBhczo6CisKKyAgZXhwb3J0OiBJbmNyZWFzZSBtYXhpbXVtIHBvbGljeSB2ZXJzaW9uIGluIGV4cG9ydGVkIGZpbGVzIHRvICRwcmV2CisKKyAgVGhlIGZpbGVzIGdlbmVyYXRkIGJ5IGBpbnN0YWxsKEVYUE9SVClgIGFuZCBgZXhwb3J0KClgIGNvbW1hbmRzCisgIGFyZSBrbm93biB0byB3b3JrIHdpdGggcG9saWNpZXMgYXMgb2YgQ01ha2UgJHByZXYsIHNvIGVuYWJsZSB0aGVtCisgIGluIHN1ZmZpY2llbnRseSBuZXcgQ01ha2UgdmVyc2lvbnMuCmRpZmYgLS1naXQgYS9IZWxwL2Rldi9yZXZpZXcucnN0IGIvSGVscC9kZXYvcmV2aWV3LnJzdAppbmRleCBjYmRlNmZlLi5mMmE5MWMwIDEwMDY0NAotLS0gYS9IZWxwL2Rldi9yZXZpZXcucnN0CisrKyBiL0hlbHAvZGV2L3Jldmlldy5yc3QKQEAgLTI4LDcgKzI4LDcgQEAKIFRoaXMgd2lsbCBjYXVzZSB0aGUgTVIgdG9waWMgYnJhbmNoIHRvIGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tCiB0aGUgdXNlcidzIGZvcmsgZHVyaW5nIHRoZSBgTWVyZ2VgXyBzdGVwLgogCi0uLiBfYENNYWtlIE1lcmdlIFJlcXVlc3RzIFBhZ2VgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9tZXJnZV9yZXF1ZXN0cworLi4gX2BDTWFrZSBNZXJnZSBSZXF1ZXN0cyBQYWdlYDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9tZXJnZV9yZXF1ZXN0cwogLi4gX2BDTWFrZSBSZXBvc2l0b3J5YDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UKIAogV29ya2Zsb3cgU3RhdHVzCkBAIC01MywxMCArNTMsMTQgQEAKICAgdG8gYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eS4gIFNlZSB0aGUgYEV4cGlyZWBfIHN0ZXAuICBVc2UgdGhpcyBsYWJlbAogICBhZnRlciBjbG9zaW5nIGEgTVIgZm9yIHRoaXMgcmVhc29uLgogCisqIGBgd29ya2Zsb3c6ZXh0ZXJuYWwtZGlzY3Vzc2lvbmBgIGluZGljYXRlcyB0aGF0IHRoZSBNUiBoYXMgYmVlbiBjbG9zZWQKKyAgcGVuZGluZyBkaXNjdXNzaW9uIGVsc2V3aGVyZS4gIFNlZSB0aGUgYEV4dGVybmFsIERpc2N1c3Npb25gXyBzdGVwLgorICBVc2UgdGhpcyBsYWJlbCBhZnRlciBjbG9zaW5nIGEgTVIgZm9yIHRoaXMgcmVhc29uLgorCiBUaGUgd29ya2Zsb3cgc3RhdHVzIGxhYmVscyBhcmUgaW50ZW5kZWQgdG8gYmUgbXV0dWFsbHkgZXhjbHVzaXZlLAogc28gcGxlYXNlIHJlbW92ZSBhbnkgZXhpc3Rpbmcgd29ya2Zsb3cgbGFiZWwgd2hlbiBhZGRpbmcgb25lLgogCi0uLiBfYENNYWtlIEdpdExhYiBQcm9qZWN0IERldmVsb3BlcnNgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9zZXR0aW5ncy9tZW1iZXJzCisuLiBfYENNYWtlIEdpdExhYiBQcm9qZWN0IERldmVsb3BlcnNgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL3NldHRpbmdzL21lbWJlcnMKIAogUm9ib3QgUmV2aWV3CiA9PT09PT09PT09PT0KQEAgLTI1Niw3ICsyNjAsNyBAQAogSWYgdGhlIGNvbW1pdCBpcyBhIGZpeCBmb3IgdGhlIG1lbnRpb25lZCBjb21taXQsIGNvbnNpZGVyIHVzaW5nIGEgYGBGaXhlczpgYAogdHJhaWxlciBpbiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZvcm1hdC4gVGhpcyB0cmFpbGVyIHNob3VsZAogbm90IGJlIHdvcmQtd3JhcHBlZC4gTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGFsc28gYW4gaXNzdWUgZm9yIHdoYXQgaXMgYmVpbmcKLWZpeGVkLCBpdCBpcyBwcmVmZXJyYWJsZSB0byBsaW5rIHRvIHRoZSBpc3N1ZSBpbnN0ZWFkLgorZml4ZWQsIGl0IGlzIHByZWZlcmFibGUgdG8gbGluayB0byB0aGUgaXNzdWUgaW5zdGVhZC4KIAogSWYgcmVsZXZhbnQsIGFkZCB0aGUgZmlyc3QgcmVsZWFzZSB0YWcgb2YgQ01ha2UgY29udGFpbmluZyB0aGUgY29tbWl0IGFmdGVyCiB0aGUgYGA8ZGF0ZT5gYCwgaS5lLiwgYGBjb21taXQgPHNob3J0aGFzaD4gKDxzdWJqZWN0PiwgPGRhdGU+LCA8dGFnPilgYC4KQEAgLTI3NCw0MiArMjc4LDUyIEBACiBUb3BpYyBUZXN0aW5nCiA9PT09PT09PT09PT09CiAKLUNNYWtlIGhhcyBhIGBidWlsZGJvdGBfIGluc3RhbmNlIHdhdGNoaW5nIGZvciBtZXJnZSByZXF1ZXN0cyB0byB0ZXN0LgotYENNYWtlIEdpdExhYiBQcm9qZWN0IERldmVsb3BlcnNgXyBtYXkgYWN0aXZhdGUgYnVpbGRib3Qgb24gYSBNUiBieQotYWRkaW5nIGEgY29tbWVudCB3aXRoIGEgY29tbWFuZCBhbW9uZyB0aGUgYGNvbW1lbnQgdHJhaWxpbmcgbGluZXNgXzo6CitDTWFrZSB1c2VzIGBHaXRMYWIgQ0lgXyB0byB0ZXN0IG1lcmdlIHJlcXVlc3RzLCBjb25maWd1cmVkIGJ5IHRoZSB0b3AtbGV2ZWwKK2BgLmdpdGxhYi1jaS55bWxgYCBmaWxlLiAgUmVzdWx0cyBtYXkgYmUgc2VlbiBib3RoIG9uIHRoZSBtZXJnZSByZXF1ZXN0J3MKK3BpcGVsaW5lIHBhZ2UgYW5kIG9uIHRoZSBgQ01ha2UgQ0Rhc2ggUGFnZWBfLiAgRmlsdGVyZWQgQ0Rhc2ggcmVzdWx0cworc2hvd2luZyBqdXN0IHRoZSBwaXBlbGluZSdzIGpvYnMgY2FuIGJlIHJlYWNoZWQgYnkgc2VsZWN0aW5nIHRoZSBgYGNkYXNoYGAKK2pvYiBpbiB0aGUgYGBFeHRlcm5hbGBgIHN0YWdlIG9mIHRoZSBwaXBlbGluZS4KIAotICBEbzogdGVzdAorTGludCBhbmQgZG9jdW1lbnRhdGlvbiBidWlsZCBqb2JzIHJ1biBhdXRvbWF0aWNhbGx5IGFmdGVyIGV2ZXJ5IHB1c2guCitIZWF2aWVyIGpvYnMgcmVxdWlyZSBhIG1hbnVhbCB0cmlnZ2VyIHRvIHJ1bjoKIAotYGBAa3dyb2JvdGBgIHdpbGwgYWRkIGFuIGF3YXJkIGVtb2ppIHRvIHRoZSBjb21tZW50IHRvIGluZGljYXRlIHRoYXQgaXQKLXdhcyBwcm9jZXNzZWQgYW5kIGFsc28gaW5mb3JtIGJ1aWxkYm90IGFib3V0IHRoZSByZXF1ZXN0LiAgVGhlIGJ1aWxkYm90Ci11c2VyIChgYEBidWlsZGJvdGBgKSB3aWxsIHNjaGVkdWxlIGJ1aWxkcyBhbmQgcmVzcG9uZCB3aXRoIGEgY29tbWVudAotbGlua2luZyB0byB0aGUgYENNYWtlIENEYXNoIFBhZ2VgXyB3aXRoIGEgZmlsdGVyIGZvciByZXN1bHRzIGFzc29jaWF0ZWQKLXdpdGggdGhlIHRvcGljIHRlc3QgcmVxdWVzdC4gIElmIHRoZSBNUiB0b3BpYyBicmFuY2ggaXMgdXBkYXRlZCBieSBhCi1wdXNoIGEgbmV3IGBgRG86IHRlc3RgYCBjb21tYW5kIGlzIG5lZWRlZCB0byBhY3RpdmF0ZSB0ZXN0aW5nIGFnYWluLgorKiBNZXJnZSByZXF1ZXN0IGF1dGhvcnMgbWF5IHZpc2l0IHRoZWlyIG1lcmdlIHJlcXVlc3QncyBwaXBlbGluZSBhbmQgY2xpY2sgdGhlCisgICJQbGF5IiBidXR0b24gb24gb25lIG9yIG1vcmUgam9icyBtYW51YWxseS4gIElmIHRoZSBtZXJnZSByZXF1ZXN0IGhhcyB0aGUKKyAgIkFsbG93IGNvbW1pdHMgZnJvbSBtZW1iZXJzIHdobyBjYW4gbWVyZ2UgdG8gdGhlIHRhcmdldCBicmFuY2giIGNoZWNrIGJveAorICBlbmFibGVkLCBDTWFrZSBtYWludGFpbmVycyBtYXkgdXNlIHRoZSAiUGxheSIgYnV0dG9uIHRvby4KIAotVGhlIGBgRG86IHRlc3RgYCBjb21tYW5kIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisqIGBDTWFrZSBHaXRMYWIgUHJvamVjdCBEZXZlbG9wZXJzYF8gbWF5IHRyaWdnZXIgQ0kgb24gYSBtZXJnZSByZXF1ZXN0IGJ5CisgIGFkZGluZyBhIGNvbW1lbnQgd2l0aCBhIGNvbW1hbmQgYW1vbmcgdGhlIGBjb21tZW50IHRyYWlsaW5nIGxpbmVzYF86OgogCi0qIGBgLS1zdG9wYGA6IGNsZWFyIHRoZSBsaXN0IG9mIGNvbW1hbmRzIGZvciB0aGUgbWVyZ2UgcmVxdWVzdAotKiBgYC0tY2xlYXJgYDogY2xlYXIgcHJldmlvdXMgY29tbWFuZHMgYmVmb3JlIGFkZGluZyB0aGlzIGNvbW1hbmQKLSogYGAtLXJlZ2V4LWluY2x1ZGUgPGFyZz5gYCBvciBgYC1pIDxhcmc+YGA6IG9ubHkgYnVpbGQgb24gYnVpbGRlcnMKLSAgbWF0Y2hpbmcgYGA8YXJnPmBgIChhIFB5dGhvbiByZWd1bGFyIGV4cHJlc3Npb24pCi0qIGBgLS1yZWdleC1leGNsdWRlIDxhcmc+YGAgb3IgYGAtZSA8YXJnPmBgOiBleGNsdWRlIGJ1aWxkcyBvbiBidWlsZGVycwotICBtYXRjaGluZyBgYDxhcmc+YGAgKGEgUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbikKKyAgICBEbzogdGVzdAogCi1CdWlsZGVyIG5hbWVzIGZvbGxvdyB0aGUgcGF0dGVybiBgYHByb2plY3QtaG9zdC1vcy1idWlsZHR5cGUtZ2VuZXJhdG9yYGA6CisgIGBgQGt3cm9ib3RgYCB3aWxsIGFkZCBhbiBhd2FyZCBlbW9qaSB0byB0aGUgY29tbWVudCB0byBpbmRpY2F0ZSB0aGF0IGl0CisgIHdhcyBwcm9jZXNzZWQgYW5kIGFsc28gdHJpZ2dlciBhbGwgbWFudWFsIGpvYnMgaW4gdGhlIG1lcmdlIHJlcXVlc3QncworICBwaXBlbGluZS4KIAotKiBgYHByb2plY3RgYDogYWx3YXlzIGBgY21ha2VgYCBmb3IgQ01ha2UgYnVpbGRzCi0qIGBgaG9zdGBgOiB0aGUgYnVpbGRib3QgaG9zdAotKiBgYG9zYGA6IG9uZSBvZiBgYHdpbmRvd3NgYCwgYGBvc3hgYCwgb3IgYGBsaW51eGBgCi0qIGBgYnVpbGR0eXBlYGA6IGBgcmVsZWFzZWBgIG9yIGBgZGVidWdgYAotKiBgYGdlbmVyYXRvcmBgOiBgYG5pbmphYGAsIGBgbWFrZWZpbGVzYGAsIGBgdnM8eWVhcj5gYCwKLSAgb3IgYGBsaW50LWl3eXUtdGlkeWBgCisgIFRoZSBgYERvOiB0ZXN0YGAgY29tbWFuZCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgogCi1UaGUgc3BlY2lhbCBgYGxpbnQtPHRvb2xzPmBgIGdlbmVyYXRvciBuYW1lIGlzIGEgYnVpbGRlciB0aGF0IGJ1aWxkcwotQ01ha2UgdXNpbmcgbGludCB0b29scyBidXQgZG9lcyBub3QgcnVuIHRoZSB0ZXN0IHN1aXRlIChzbyB0aGUgYWN0dWFsCi1nZW5lcmF0b3IgZG9lcyBub3QgbWF0dGVyKS4KKyAgKiBgYC0tbmFtZWQgPHJlZ2V4PmBgLCBgYC1uIDxyZWdleD5gYDogVHJpZ2dlciBqb2JzIG1hdGNoaW5nIGBgPHJlZ2V4PmBgCisgICAgYW55d2hlcmUgaW4gdGhlaXIgbmFtZS4gIEpvYiBuYW1lcyBtYXkgYmUgc2VlbiBvbiB0aGUgbWVyZ2UgcmVxdWVzdCdzCisgICAgcGlwZWxpbmUgcGFnZS4KKyAgKiBgYC0tc3RhZ2UgPHN0YWdlPmBgLCBgYC1zIDxzdGFnZT5gYDogT25seSBhZmZlY3Qgam9icyBpbiBhIGdpdmVuIHN0YWdlLgorICAgIFN0YWdlIG5hbWVzIG1heSBiZSBzZWVuIG9uIHRoZSBtZXJnZSByZXF1ZXN0J3MgcGlwZWxpbmUgcGFnZS4gIE5vdGUgdGhhdAorICAgIHRoZSBuYW1lcyBhcmUgZGV0ZXJtaW5lZCBieSB3aGF0IGlzIGluIHRoZSBgYC5naXRsYWItY2kueW1sYGAgZmlsZSBhbmQgbWF5CisgICAgYmUgY2FwaXRhbGl6ZWQgaW4gdGhlIHdlYiBwYWdlLCBzbyBsb3dlcmNhc2luZyB0aGUgd2VicGFnZSdzIGRpc3BsYXkgbmFtZQorICAgIGZvciBzdGFnZXMgbWF5IGJlIHJlcXVpcmVkLgorICAqIGBgLS1hY3Rpb24gPGFjdGlvbj5gYCwgYGAtYSA8YWN0aW9uPmBgOiBUaGUgYWN0aW9uIHRvIHBlcmZvcm0gb24gdGhlIGpvYnMuCisgICAgUG9zc2libGUgYWN0aW9uczoKIAotLi4gX2BidWlsZGJvdGA6IGh0dHA6Ly9idWlsZGJvdC5uZXQKKyAgICAqIGBgbWFudWFsYGAgKHRoZSBkZWZhdWx0KTogU3RhcnQgam9icyBhd2FpdGluZyBtYW51YWwgaW50ZXJhY3Rpb24uCisgICAgKiBgYHVuc3VjY2Vzc2Z1bGBgOiBTdGFydCBvciByZXN0YXJ0IGpvYnMgd2hpY2ggaGF2ZSBub3QgY29tcGxldGVkCisgICAgICBzdWNjZXNzZnVsbHkuCisgICAgKiBgYGZhaWxlZGBgOiBSZXN0YXJ0IGpvYnMgd2hpY2ggaGF2ZSBjb21wbGV0ZWQsIGJ1dCB3aXRob3V0IHN1Y2Nlc3MuCisgICAgKiBgYGNvbXBsZXRlZGBgOiBSZXN0YXJ0IGFsbCBjb21wbGV0ZWQgam9icy4KKworSWYgdGhlIG1lcmdlIHJlcXVlc3QgdG9waWMgYnJhbmNoIGlzIHVwZGF0ZWQgYnkgYSBwdXNoLCBhIG5ldyBtYW51YWwgdHJpZ2dlcgordXNpbmcgb25lIG9mIHRoZSBhYm92ZSBtZXRob2RzIGlzIG5lZWRlZCB0byBzdGFydCBDSSBhZ2Fpbi4KKworLi4gX2BHaXRMYWIgQ0lgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9oZWxwL2NpL1JFQURNRS5tZAogLi4gX2BDTWFrZSBDRGFzaCBQYWdlYDogaHR0cHM6Ly9vcGVuLmNkYXNoLm9yZy9pbmRleC5waHA/cHJvamVjdD1DTWFrZQogCiBJbnRlZ3JhdGlvbiBUZXN0aW5nCkBAIC00MjksMTMgKzQ0MywzMCBAQAogaW4gdGhlIE1SIGRlc2NyaXB0aW9uICh0aGUgZm9sbG93aW5nIGhhdmUgbm8gZWZmZWN0IGlmIHVzZWQgaW4gYSBNUgogY29tbWVudCBpbnN0ZWFkKToKIAorKiBgYEJhY2twb3J0OiByZWxlYXNlWzo8Y29tbWl0LWlzaD5dYGA6IG1lcmdlIHRoZSB0b3BpYyBicmFuY2ggaW50bworICB0aGUgYGByZWxlYXNlYGAgYnJhbmNoIHRvIGJhY2twb3J0IHRoZSBjaGFuZ2UuICBUaGlzIGlzIGFsbG93ZWQKKyAgb25seSBpZiB0aGUgdG9waWMgYnJhbmNoIGlzIGJhc2VkIG9uIGEgY29tbWl0IGluIGBgcmVsZWFzZWBgIGFscmVhZHkuCisgIElmIG9ubHkgcGFydCBvZiB0aGUgdG9waWMgYnJhbmNoIHNob3VsZCBiZSBiYWNrcG9ydGVkLCBzcGVjaWZ5IGl0IGFzCisgIGBgOjxjb21taXQtaXNoPmBgLiAgVGhlIGBgPGNvbW1pdC1pc2g+YGAgbWF5IHVzZSBgZ2l0IHJldi1wYXJzZWBfCisgIHN5bnRheCB0byByZWZlcmVuY2UgY29tbWl0cyByZWxhdGl2ZSB0byB0aGUgdG9waWMgYGBIRUFEYGAuCisgIFNlZSBhZGRpdGlvbmFsIGBiYWNrcG9ydCBpbnN0cnVjdGlvbnNgXyBmb3IgZGV0YWlscy4KKyAgRm9yIGV4YW1wbGU6CisKKyAgYGBCYWNrcG9ydDogcmVsZWFzZWBgCisgICAgTWVyZ2UgdGhlIHRvcGljIGJyYW5jaCBoZWFkIGludG8gYm90aCBgYHJlbGVhc2VgYCBhbmQgYGBtYXN0ZXJgYC4KKyAgYGBCYWNrcG9ydDogcmVsZWFzZTpIRUFEfjFeMmBgCisgICAgTWVyZ2UgdGhlIHRvcGljIGJyYW5jaCBoZWFkJ3MgcGFyZW50J3Mgc2Vjb25kIHBhcmVudCBjb21taXQgaW50bworICAgIHRoZSBgYHJlbGVhc2VgYCBicmFuY2guICBNZXJnZSB0aGUgdG9waWMgYnJhbmNoIGhlYWQgdG8gYGBtYXN0ZXJgYC4KKwogKiBgYFRvcGljLXJlbmFtZTogPHRvcGljPmBgOiBzdWJzdGl0dXRlIGBgPHRvcGljPmBgIGZvciB0aGUgbmFtZSBvZgogICB0aGUgTVIgdG9waWMgYnJhbmNoIGluIHRoZSBjb25zdHJ1Y3RlZCBtZXJnZSBjb21taXQgbWVzc2FnZS4KICAgSXQgaXMgYWxzbyB1c2VkIGluIG1lcmdlIGNvbW1pdHMgY29uc3RydWN0ZWQgYnkgYGBEbzogc3RhZ2VgYC4KICAgVGhlIGBgLXRgYCBvcHRpb24gdG8gYSBgYERvOiBtZXJnZWBgIGNvbW1hbmQgb3ZlcnJpZGVzIGFueSB0b3BpYwogICByZW5hbWUgc2V0IGluIHRoZSBNUiBkZXNjcmlwdGlvbi4KIAotLi4gX2BDTWFrZSBHaXRMYWIgUHJvamVjdCBNYXN0ZXJzYDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2Uvc2V0dGluZ3MvbWVtYmVycworLi4gX2BDTWFrZSBHaXRMYWIgUHJvamVjdCBNYXN0ZXJzYDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9zZXR0aW5ncy9tZW1iZXJzCisuLiBfYGJhY2twb3J0IGluc3RydWN0aW9uc2A6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL3V0aWxzL2dpdC13b3JrZmxvdy8tL3dpa2lzL0JhY2twb3J0LXRvcGljcworLi4gX2BnaXQgcmV2LXBhcnNlYDogaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1yZXYtcGFyc2UKIAogQ2xvc2UKIC0tLS0tCmRpZmYgLS1naXQgYS9IZWxwL2Rldi9zb3VyY2UucnN0IGIvSGVscC9kZXYvc291cmNlLnJzdAppbmRleCAwZjc0ODhiLi5kOTNlNTVjIDEwMDY0NAotLS0gYS9IZWxwL2Rldi9zb3VyY2UucnN0CisrKyBiL0hlbHAvZGV2L3NvdXJjZS5yc3QKQEAgLTIzLDEyICsyMywxNjMgQEAKIEMrKyBTdWJzZXQgUGVybWl0dGVkCiA9PT09PT09PT09PT09PT09PT09PQogCi1DTWFrZSByZXF1aXJlcyBjb21waWxpbmcgYXMgQysrMTEgb3IgYWJvdmUuICBIb3dldmVyLCBpbiBvcmRlciB0byBzdXBwb3J0Ci1idWlsZGluZyBvbiBvbGRlciB0b29sY2hhaW5zIHNvbWUgY29uc3RydWN0cyBuZWVkIHRvIGJlIGhhbmRsZWQgd2l0aCBjYXJlOgorQ01ha2UgcmVxdWlyZXMgY29tcGlsaW5nIGFzIEMrKzExIGluIG9yZGVyIHRvIHN1cHBvcnQgYnVpbGRpbmcgb24gb2xkZXIKK3Rvb2xjaGFpbnMuICBIb3dldmVyLCB0byBmYWNpbGl0YXRlIGRldmVsb3BtZW50LCBzb21lIHN0YW5kYXJkIGxpYnJhcnkKK2ZlYXR1cmVzIGZyb20gbW9yZSByZWNlbnQgQysrIHN0YW5kYXJkcyBhcmUgc3VwcG9ydGVkIHRocm91Z2ggYSBjb21wYXRpYmlsaXR5CitsYXllci4gIFRoZXNlIGZlYXR1cmVzIGFyZSBkZWZpbmVkIHVuZGVyIHRoZSBuYW1lc3BhY2UgYGBjbWBgIGFuZCBoZWFkZXJzCithcmUgYWNjZXNzaWJsZSB1bmRlciB0aGUgYGBjbS9gYCBkaXJlY3RvcnkuICBUaGUgaGVhZGVycyB1bmRlciBgYGNtL2BgIGNhbgorYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUgc3RhbmRhcmQgb25lcyB3aGVuIGV4dGVuZGVkIGZlYXR1cmVzIGFyZSBuZWVkZWQuCitGb3IgZXhhbXBsZSBgYDxjbS9tZW1vcnk+YGAgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgYGA8bWVtb3J5PmBgLgogCi0qIERvIG5vdCB1c2UgYGBzdGQ6OmF1dG9fcHRyYGAuCitBdmFpbGFibGUgZmVhdHVyZXMgYXJlOgogCi0gIFRoZSBgYHN0ZDo6YXV0b19wdHJgYCB0ZW1wbGF0ZSBpcyBkZXByZWNhdGVkIGluIEMrKzExLiBVc2UgYGBzdGQ6OnVuaXF1ZV9wdHJgYC4KKyogRnJvbSBgYEMrKzE0YGA6CisKKyAgKiBgYDxjbS9pb21hbmlwPmBgOgorICAgIGBgY206OnF1b3RlZGBgCisKKyAgKiBgYDxjbS9pdGVyYXRvcj5gYDoKKyAgICBgYGNtOjptYWtlX3JldmVyc2VfaXRlcmF0b3JgYCwgYGBjbTo6Y2JlZ2luYGAsIGBgY206OmNlbmRgYCwKKyAgICBgYGNtOjpyYmVnaW5gYCwgYGBjbTo6cmVuZGBgLCBgYGNtOjpjcmJlZ2luYGAsIGBgY206OmNyZW5kYGAKKworICAqIGBgPGNtL21lbW9yeT5gYDoKKyAgICBgYGNtOjptYWtlX3VuaXF1ZWBgCisKKyAgKiBgYDxjbS9zaGFyZWRfbXV0ZXg+YGA6CisgICAgYGBjbTo6c2hhcmVkX2xvY2tgYAorCisgICogYGA8Y20vdHlwZV90cmFpdHM+YGA6CisgICAgYGBjbTo6ZW5hYmxlX2lmX3RgYAorCisqIEZyb20gYGBDKysxN2BgOgorCisgICogYGA8Y20vYWxnb3JpdGhtPmBgOgorICAgIGBgY206OmNsYW1wYGAKKworICAqIGBgY20vZmlsZXN5c3RlbT5gYDoKKyAgICBgYGNtOjpmaWxlc3lzdGVtOjpwYXRoYGAKKworICAqIGBgPGNtL2l0ZXJhdG9yPmBgOgorICAgIGBgY206OnNpemVgYCwgYGBjbTo6ZW1wdHlgYCwgYGBjbTo6ZGF0YWBgCisKKyAgKiBgYDxjbS9vcHRpb25hbD5gYDoKKyAgICBgYGNtOjpudWxsb3B0X3RgYCwgYGBjbTo6bnVsbG9wdGBgLCBgYGNtOjpvcHRpb25hbGBgLAorICAgIGBgY206Om1ha2Vfb3B0aW9uYWxgYCwgYGBjbTo6YmFkX29wdGlvbmFsX2FjY2Vzc2BgCisKKyAgKiBgYDxjbS9zaGFyZWRfbXV0ZXg+YGA6CisgICAgYGBjbTo6c2hhcmVkX211dGV4YGAKKworICAqIGBgPGNtL3N0cmluZ192aWV3PmBgOgorICAgIGBgY206OnN0cmluZ192aWV3YGAKKworICAqIGBgPGNtL3R5cGVfdHJhaXRzPmBgOgorICAgIGBgY206OmJvb2xfY29uc3RhbnRgYCwgYGBjbTo6aW52b2tlX3Jlc3VsdF90YGAsIGBgY206Omludm9rZV9yZXN1bHRgYCwKKyAgICBgYGNtOjp2b2lkX3RgYAorCisgICogYGA8Y20vdXRpbGl0eT5gYDoKKyAgICBgYGNtOjppbl9wbGFjZV90YGAsIGBgY206OmluX3BsYWNlYGAKKworKiBGcm9tIGBgQysrMjBgYDoKKworICAqIGBgPGNtL2RlcXVlPmBgOgorICAgIGBgY206OmVyYXNlYGAsIGBgY206OmVyYXNlX2lmYGAKKworICAqIGBgPGNtL2xpc3Q+YGA6CisgICAgYGBjbTo6ZXJhc2VgYCwgYGBjbTo6ZXJhc2VfaWZgYAorCisgICogYGA8Y20vbWFwPmBgIDoKKyAgICBgYGNtOjplcmFzZV9pZmBgCisKKyAgKiBgYDxjbS9zZXQ+YGAgOgorICAgIGBgY206OmVyYXNlX2lmYGAKKworICAqIGBgPGNtL3N0cmluZz5gYDoKKyAgICBgYGNtOjplcmFzZWBgLCBgYGNtOjplcmFzZV9pZmBgCisKKyAgKiBgYDxjbS91bm9yZGVyZWRfbWFwPmBgOgorICAgIGBgY206OmVyYXNlX2lmYGAKKworICAqIGBgPGNtL3Vub3JkZXJlZF9zZXQ+YGA6CisgICAgYGBjbTo6ZXJhc2VfaWZgYAorCisgICogYGA8Y20vdmVjdG9yPmBgOgorICAgIGBgY206OmVyYXNlYGAsIGBgY206OmVyYXNlX2lmYGAKKworQWRkaXRpb25hbGx5LCBzb21lIHVzZWZ1bCBub24tc3RhbmRhcmQgZXh0ZW5zaW9ucyB0byB0aGUgQysrIHN0YW5kYXJkIGxpYnJhcnkKK2FyZSBhdmFpbGFibGUgaW4gaGVhZGVycyB1bmRlciB0aGUgZGlyZWN0b3J5IGBgY21leHQvYGAgaW4gbmFtZXNwYWNlIGBgY21gYC4KK1RoZXNlIGFyZToKKworKiBgYDxjbWV4dC9hbGdvcml0aG0+YGA6CisKKyAgKiBgYGNtOjphcHBlbmRgYDoKKyAgICBBcHBlbmQgZWxlbWVudHMgdG8gYSBzZXF1ZW50aWFsIGNvbnRhaW5lci4KKworICAqIGBgY206OmNvbnRhaW5zYGA6CisgICAgQ2hlY2tzIGlmIGVsZW1lbnQgb3Iga2V5IGlzIGNvbnRhaW5lZCBpbiBjb250YWluZXIuCisKKyogYGA8Y21leHQvaXRlcmF0b3I+YGA6CisKKyAgKiBgYGNtOjppc190ZXJhdG9yYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpdGVyYXRvciB0eXBlLgorCisgICogYGBjbTo6aXNfaW5wdXRfaXRlcmF0b3JgYDoKKyAgICBDaGVja3MgaWYgYSB0eXBlIGlzIGFuIGlucHV0IGl0ZXJhdG9yIHR5cGUuCisKKyAgKiBgYGNtOjppc19yYW5nZWBgOgorICAgIENoZWNrcyBpZiBhIHR5cGUgaXMgYSByYW5nZSB0eXBlOiBmdW5jdGlvbnMgYGBzdGQ6OmJlZ2luKClgYCBhbmQKKyAgICBgYHN0ZDo6ZW5kKClgYCBhcHBseS4KKworICAqIGBgY206OmlzX2lucHV0X3JhbmdlYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpbnB1dCByYW5nZSB0eXBlOiBmdW5jdGlvbnMgYGBzdGQ6OmJlZ2luKClgYCBhbmQKKyAgICBgYHN0ZDo6ZW5kKClgYCBhcHBseSBhbmQgcmV0dXJuIGFuIGlucHV0IGl0ZXJhdG9yLgorCisqIGBgPGNtZXh0L21lbW9yeT5gYDoKKworICAqIGBgY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdGBgOgorICAgIEFwcGx5IGEgYGBzdGF0aWNfY2FzdGBgIHRvIGEgc21hcnQgcG9pbnRlci4KKworICAqIGBgY206OmR5bmFtaWNfcmVmZXJlbmNlX2Nhc3RgYDoKKyAgICBBcHBseSBhIGBgZHluYW1pY19jYXN0YGAgdG8gYSBzbWFydCBwb2ludGVyLgorCisqIGBgPGNtZXh0L3R5cGVfdHJhaXRzPmBgOgorCisgICogYGBjbTo6aXNfY29udGFpbmVyYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhIGNvbnRhaW5lciB0eXBlLgorCisgICogYGBjbTo6aXNfYXNzb2NpYXRpdmVfY29udGFpbmVyYGA6CisgICAgQ2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBhc3NvY2lhdGl2ZSBjb250YWluZXIgdHlwZS4KKworICAqIGBgY206OmlzX3Vub3JkZXJlZF9hc3NvY2lhdGl2ZV9jb250YWluZXJgYDoKKyAgICBDaGVja3MgaWYgYSB0eXBlIGlzIGFuIHVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXIgdHlwZS4KKworICAqIGBgY206OmlzX3NlcXVlbmNlX2NvbnRhaW5lcmBgOgorICAgIENoZWNrcyBpZiBhIHR5cGUgaXMgYSBzZXF1ZW5jZSBjb250YWluZXIgdHlwZS4KKworICAqIGBgY206OmlzX3VuaXF1ZV9wdHJgYDoKKyAgICBDaGVja3MgaWYgYSB0eXBlIGlzIGEgYGBzdGQ6OnVuaXF1ZV9wdHJgYCB0eXBlLgorCitEeW5hbWljIE1lbW9yeSBNYW5hZ2VtZW50Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIGVuc3VyZSBlZmZpY2llbnQgbWVtb3J5IG1hbmFnZW1lbnQsIGkuZS4gbm8gbWVtb3J5IGxlYWtzLCBpdCBpcyByZXF1aXJlZAordG8gdXNlIHNtYXJ0IHBvaW50ZXJzLiAgQW55IGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gbXVzdCBiZSBoYW5kbGVkIGJ5IGEKK3NtYXJ0IHBvaW50ZXIgc3VjaCBhcyBgYHN0ZDo6dW5pcXVlX3B0cmBgIG9yIGBgc3RkOjpzaGFyZWRfcHRyYGAuCisKK0l0IGlzIGFsbG93ZWQgdG8gcGFzcyByYXcgcG9pbnRlcnMgYmV0d2VlbiBvYmplY3RzIHRvIGVuYWJsZSBvYmplY3RzIHNoYXJpbmcuCitBIHJhdyBwb2ludGVyICoqbXVzdCoqIG5vdCBiZSBkZWxldGVkLiBPbmx5IHRoZSBvYmplY3Qocykgb3duaW5nIHRoZSBzbWFydAorcG9pbnRlciBhcmUgYWxsb3dlZCB0byBkZWxldGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeS4KKworVGhpcmQgUGFydGllcworPT09PT09PT09PT09PQorCitUbyBidWlsZCBDTWFrZSwgc29tZSB0aGlyZCBwYXJ0aWVzIGFyZSBuZWVkZWQuIFVuZGVyIGBgVXRpbGl0aWVzYGAKK2RpcmVjdG9yeSwgYXJlIHZlcnNpb25zIG9mIHRoZXNlIHRoaXJkIHBhcnRpZXMgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYW4KK2FsdGVybmF0ZSB0byB0aGUgb25lcyBwcm92aWRlZCBieSB0aGUgc3lzdGVtLgorCitUbyBlbmFibGUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdGhpcmQgcGFydGllcyBiZXR3ZWVuIHRoZSBzeXN0ZW0gYW5kIENNYWtlIG9uZXMsCitpbiBDTWFrZSBzb3VyY2VzLCB0aGlyZCBwYXJ0aWVzIGhlYWRlcnMgbXVzdCBiZSBwcmVmaXhlZCBieSBgYGNtM3AvYGAKKyhmb3IgZXhhbXBsZTogYGA8Y20zcC9qc29uL3JlYWRlci5oPmBgKS4gVGhlc2Ugd3JhcHBlcnMgYXJlIGxvY2F0ZWQgdW5kZXIKK2BgVXRpbGl0aWVzL2NtM3BgYCBkaXJlY3RvcnkuCiAKIFNvdXJjZSBUcmVlIExheW91dAogPT09PT09PT09PT09PT09PT09CkBAIC02OSw2ICsyMjAsMTUgQEAKICogYGBVdGlsaXRpZXMvYGA6CiAgIFNjcmlwdHMsIHRoaXJkLXBhcnR5IHNvdXJjZSBjb2RlLgogCisgICogYGBVdGlsaXRpZXMvc3RkL2NtYGA6CisgICAgU3VwcG9ydCBmaWxlcyBmb3IgdmFyaW91cyBDKysgc3RhbmRhcmRzLgorCisgICogYGBVdGlsaXRpZXMvc3RkL2NtZXh0YGA6CisgICAgRXh0ZW5zaW9ucyB0byB0aGUgQysrIFNUTC4KKworICAqIGBgVXRpbGl0aWVzL2NtM3BgYDoKKyAgICBQdWJsaWMgaGVhZGVycyBmb3IgdGhpcmQgcGFydGllcyBuZWVkZWQgdG8gYnVpbGQgQ01ha2UuCisKICAgKiBgYFV0aWxpdGllcy9TcGhpbngvYGA6CiAgICAgU3BoaW54IGNvbmZpZ3VyYXRpb24gdG8gYnVpbGQgQ01ha2UgdXNlciBkb2N1bWVudGF0aW9uLgogCmRpZmYgLS1naXQgYS9IZWxwL2Rldi90ZXN0aW5nLnJzdCBiL0hlbHAvZGV2L3Rlc3RpbmcucnN0CmluZGV4IDIzZDBjYTMuLjI3OWU0YjIgMTAwNjQ0Ci0tLSBhL0hlbHAvZGV2L3Rlc3RpbmcucnN0CisrKyBiL0hlbHAvZGV2L3Rlc3RpbmcucnN0CkBAIC0zMyw3ICszMyw3IEBACiAuLiBfYENNYWtlIFJldmlldyBQcm9jZXNzYDogcmV2aWV3LnJzdAogLi4gX2BDTWFrZSBDRGFzaCBQYWdlYDogaHR0cHM6Ly9vcGVuLmNkYXNoLm9yZy9pbmRleC5waHA/cHJvamVjdD1DTWFrZQogLi4gX2BDTWFrZSBEYXNoYm9hcmQgU2NyaXB0cyBSZXBvc2l0b3J5YDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvZGFzaGJvYXJkLXNjcmlwdHMKLS4uIF9gY21ha2VfY29tbW9uLmNtYWtlYDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvZGFzaGJvYXJkLXNjcmlwdHMvYmxvYi9tYXN0ZXIvY21ha2VfY29tbW9uLmNtYWtlCisuLiBfYGNtYWtlX2NvbW1vbi5jbWFrZWA6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2Rhc2hib2FyZC1zY3JpcHRzLy0vYmxvYi9tYXN0ZXIvY21ha2VfY29tbW9uLmNtYWtlCiAKIE5pZ2h0bHkgU3RhcnQgVGltZQogLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9BU01fRElBTEVDVC5yc3QgYi9IZWxwL2VudnZhci9BU01fRElBTEVDVC5yc3QKaW5kZXggYTA2ZTNjYi4uYTYwNjI4MCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQVNNX0RJQUxFQ1QucnN0CisrKyBiL0hlbHAvZW52dmFyL0FTTV9ESUFMRUNULnJzdApAQCAtMSw2ICsxLDggQEAKIEFTTTxESUFMRUNUPgogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFByZWZlcnJlZCBleGVjdXRhYmxlIGZvciBjb21waWxpbmcgYSBzcGVjaWZpYyBkaWFsZWN0IG9mIGFzc2VtYmx5IGxhbmd1YWdlCkBAIC0xMiwzICsxNCwxMSBAQAogOnZhcmlhYmxlOmBDTUFLRV9BU008RElBTEVDVD5fQ09NUElMRVIgPENNQUtFXzxMQU5HPl9DT01QSUxFUj5gLiBGb3Igc3Vic2VxdWVudAogY29uZmlndXJhdGlvbiBydW5zLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBpZ25vcmVkIGluIGZhdm9yIG9mCiA6dmFyaWFibGU6YENNQUtFX0FTTTxESUFMRUNUPl9DT01QSUxFUiA8Q01BS0VfPExBTkc+X0NPTVBJTEVSPmAuCisKKy4uIG5vdGU6OgorICBPcHRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIG1ha2UgdGhlIGNvbXBpbGVyIHdvcmsgY29ycmVjdGx5IGNhbiBiZSBpbmNsdWRlZDsKKyAgdGhleSBjYW4gbm90IGJlIGNoYW5nZWQuCisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgJCBleHBvcnQgQVNNPSJjdXN0b20tY29tcGlsZXIgLS1hcmcxIC0tYXJnMiIKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0FTTV9ESUFMRUNURkxBR1MucnN0IGIvSGVscC9lbnZ2YXIvQVNNX0RJQUxFQ1RGTEFHUy5yc3QKaW5kZXggM2MzYjAyYS4uNjZhNzVlMiAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQVNNX0RJQUxFQ1RGTEFHUy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQVNNX0RJQUxFQ1RGTEFHUy5yc3QKQEAgLTEsNiArMSw4IEBACiBBU008RElBTEVDVD5GTEFHUwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyB0byBiZSB1c2VkIHdoZW4gY29tcGlsaW5nIGEgc3BlY2lmaWMgZGlhbGVjdCBvZiBhbgpAQCAtMTEsMyArMTMsNSBAQAogYXMgYGBDTUFLRV9BU008RElBTEVDVD5fRkxBR1MgPENNQUtFXzxMQU5HPl9GTEFHUz5gYC4gIEZvciBhbnkgY29uZmlndXJhdGlvbgogcnVuIChpbmNsdWRpbmcgdGhlIGZpcnN0KSwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgaWdub3JlZCwgaWYgdGhlCiBgYENNQUtFX0FTTTxESUFMRUNUPl9GTEFHUyA8Q01BS0VfPExBTkc+X0ZMQUdTPmBgIHZhcmlhYmxlIGlzIGRlZmluZWQuCisKK1NlZSBhbHNvIDp2YXJpYWJsZTpgQ01BS0VfQVNNPERJQUxFQ1Q+X0ZMQUdTX0lOSVQgPENNQUtFXzxMQU5HPl9GTEFHU19JTklUPmAuCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DQy5yc3QgYi9IZWxwL2VudnZhci9DQy5yc3QKaW5kZXggZWYxMjA1OS4uNGM5NzBiNCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ0MucnN0CisrKyBiL0hlbHAvZW52dmFyL0NDLnJzdApAQCAtMSw2ICsxLDggQEAKIENDCiAtLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBQcmVmZXJyZWQgZXhlY3V0YWJsZSBmb3IgY29tcGlsaW5nIGBgQ2BgIGxhbmd1YWdlIGZpbGVzLiBXaWxsIG9ubHkgYmUgdXNlZCBieQpAQCAtOSwzICsxMSwxMSBAQAogOnZhcmlhYmxlOmBDTUFLRV9DX0NPTVBJTEVSIDxDTUFLRV88TEFORz5fQ09NUElMRVI+YC4gRm9yIGFueSBjb25maWd1cmF0aW9uIHJ1bgogKGluY2x1ZGluZyB0aGUgZmlyc3QpLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9DX0NPTVBJTEVSIDxDTUFLRV88TEFORz5fQ09NUElMRVI+YCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCisuLiBub3RlOjoKKyAgT3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCB0byBtYWtlIHRoZSBjb21waWxlciB3b3JrIGNvcnJlY3RseSBjYW4gYmUgaW5jbHVkZWQ7CisgIHRoZXkgY2FuIG5vdCBiZSBjaGFuZ2VkLgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgZXhwb3J0IENDPSJjdXN0b20tY29tcGlsZXIgLS1hcmcxIC0tYXJnMiIKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NDTUFLRV9DT0xPUlMucnN0IGIvSGVscC9lbnZ2YXIvQ0NNQUtFX0NPTE9SUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3NmJmOAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZW52dmFyL0NDTUFLRV9DT0xPUlMucnN0CkBAIC0wLDAgKzEsMzYgQEAKK0NDTUFLRV9DT0xPUlMKKy0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitEZXRlcm1pbmVzIHdoYXQgY29sb3JzIGFyZSB1c2VkIGJ5IHRoZSBDTWFrZSBjdXJzZXMgaW50ZXJmYWNlLAord2hlbiBydW4gb24gYSB0ZXJtaW5hbCB0aGF0IHN1cHBvcnRzIGNvbG9ycy4KK1RoZSBzeW50YXggZm9sbG93cyB0aGUgc2FtZSBjb252ZW50aW9ucyBhcyBgYExTX0NPTE9SU2BgOwordGhhdCBpcywgYSBsaXN0IG9mIGtleS92YWx1ZSBwYWlycyBzZXBhcmF0ZWQgYnkgYGA6YGAuCisKK0tleXMgYXJlIGEgc2luZ2xlIGxldHRlciBjb3JyZXNwb25kaW5nIHRvIGEgQ01ha2UgY2FjaGUgdmFyaWFibGUgdHlwZToKKworLSBgYHNgYDogQSBgYFNUUklOR2BgLgorLSBgYHBgYDogQSBgYEZJTEVQQVRIYGAuCistIGBgY2BgOiBBIHZhbHVlIHdoaWNoIGhhcyBhbiBhc3NvY2lhdGVkIGxpc3Qgb2YgY2hvaWNlcy4KKy0gYGB5YGA6IEEgYGBCT09MYGAgd2hpY2ggaGFzIGEgdHJ1ZS1saWtlIHZhbHVlIChlLmcuIGBgT05gYCwgYGBZRVNgYCkuCistIGBgbmBgOiBBIGBgQk9PTGBgIHdoaWNoIGhhcyBhIGZhbHNlLWxpa2UgdmFsdWUgKGUuZy4gYGBPRkZgYCwgYGBOT2BgKS4KKworVmFsdWVzIGFyZSBhbiBpbnRlZ2VyIG51bWJlciB0aGF0IHNwZWNpZmllcyB3aGF0IGNvbG9yIHRvIHVzZS4KK2BgMGBgIGlzIGJsYWNrICh5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UgdGhhdCkuCitPdGhlcnMgYXJlIGRldGVybWluZWQgYnkgeW91ciB0ZXJtaW5hbCdzIGNvbG9yIHN1cHBvcnQuCitNb3N0IChjb2xvcikgdGVybWluYWxzIHdpbGwgc3VwcG9ydCBhdCBsZWFzdCA4IG9yIDE2IGNvbG9ycy4KK1NvbWUgd2lsbCBzdXBwb3J0IHVwIHRvIDI1NiBjb2xvcnMuIFRoZSBjb2xvcnMgd2lsbCBsaWtlbHkgbWF0Y2gKK2B0aGlzIGNoYXJ0IDxodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzEvMTUvWHRlcm1fMjU2Y29sb3JfY2hhcnQuc3ZnPmBfLAorYWx0aG91Z2ggdGhlIGZpcnN0IDE2IGNvbG9ycyBtYXkgbWF0Y2ggdGhlIG9yaWdpbmFsCitgQ0dBIGNvbG9yIHBhbGV0dGUgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbG9yX0dyYXBoaWNzX0FkYXB0ZXIjQ29sb3JfcGFsZXR0ZT5gXy4KKyhNYW55IG1vZGVybiB0ZXJtaW5hbCBlbXVsYXRvcnMgYWxzbyBhbGxvdyB0aGVpciBjb2xvciBwYWxldHRlLAorYXQgbGVhc3QgZm9yIHRoZSBmaXJzdCAxNiBjb2xvcnMsIHRvIGJlIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIuKQorCitOb3RlIHRoYXQgZmFpcmx5IG1pbmltYWwgY2hlY2tpbmcgaXMgZG9uZSBmb3IgYmFkIGNvbG9ycworKGFsdGhvdWdoIGEgdmFsdWUgaGlnaGVyIHRoYW4gd2hhdCBjdXJzZXMgYmVsaWV2ZXMgeW91ciB0ZXJtaW5hbCBzdXBwb3J0cword2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkKSBvciBiYWQgc3ludGF4LgorCitGb3IgZXhhbXBsZTo6CisKKyAgQ0NNQUtFX0NPTE9SUz0ncz0zOTpwPTIyMDpjPTIwNzpuPTE5Njp5PTQ2JwpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ0ZMQUdTLnJzdCBiL0hlbHAvZW52dmFyL0NGTEFHUy5yc3QKaW5kZXggZmRhOWNjYy4uMzFkYjZhNiAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ0ZMQUdTLnJzdAorKysgYi9IZWxwL2VudnZhci9DRkxBR1MucnN0CkBAIC0xLDYgKzEsOCBAQAogQ0ZMQUdTCiAtLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyB0byBiZSB1c2VkIHdoZW4gY29tcGlsaW5nIGBgQ2BgIGZpbGVzLiBXaWxsIG9ubHkgYmUKQEAgLTksMyArMTEsNSBAQAogYXMgOnZhcmlhYmxlOmBDTUFLRV9DX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YC4gRm9yIGFueSBjb25maWd1cmF0aW9uIHJ1bgogKGluY2x1ZGluZyB0aGUgZmlyc3QpLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9DX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCitTZWUgYWxzbyA6dmFyaWFibGU6YENNQUtFX0NfRkxBR1NfSU5JVCA8Q01BS0VfPExBTkc+X0ZMQUdTX0lOSVQ+YC4KZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX0JVSUxEX1BBUkFMTEVMX0xFVkVMLnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX0JVSUxEX1BBUkFMTEVMX0xFVkVMLnJzdAppbmRleCAxOTljYTNlLi5kYmM1ODlhIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DTUFLRV9CVUlMRF9QQVJBTExFTF9MRVZFTC5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfQlVJTERfUEFSQUxMRUxfTEVWRUwucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQlVJTERfUEFSQUxMRUxfTEVWRUwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBwcm9jZXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX0NPTkZJR19UWVBFLnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX0NPTkZJR19UWVBFLnJzdAppbmRleCAxNjg1OTNkLi5jMjA3YTQ4IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DTUFLRV9DT05GSUdfVFlQRS5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfQ09ORklHX1RZUEUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ09ORklHX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFRoZSBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIDpyZWY6YEJ1aWxkIFRvb2wgTW9kZWAgYW5kCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2NzhiZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZW52dmFyL0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTLnJzdApAQCAtMCwwICsxLDExIEBACitDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCisuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIDp2YXJpYWJsZTpgQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFNgIHdoZW4gdGhlcmUKK2lzIG5vIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24gZ2l2ZW4gb24gdGhlIGZpcnN0IHJ1biB3aGlsZSBjcmVhdGluZyBhIG5ldworYnVpbGQgdHJlZS4gIE9uIGxhdGVyIHJ1bnMgaW4gYW4gZXhpc3RpbmcgYnVpbGQgdHJlZSB0aGUgdmFsdWUgcGVyc2lzdHMgaW4KK3RoZSBjYWNoZSBhcyA6dmFyaWFibGU6YENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTYC4KZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUi5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1IucnN0CmluZGV4IGYyZDA1NWYuLjM0ODhiMDQgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUi5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dFTkVSQVRPUgogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFNwZWNpZmllcyB0aGUgQ01ha2UgZGVmYXVsdCBnZW5lcmF0b3IgdG8gdXNlIHdoZW4gbm8gZ2VuZXJhdG9yIGlzIHN1cHBsaWVkCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UucnN0IGIvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFLnJzdAppbmRleCAxNjU0ZmExLi44Y2E3ZDgwIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UucnN0CisrKyBiL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBEZWZhdWx0IHZhbHVlIGZvciA6dmFyaWFibGU6YENNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRWAgaWYgbm8gQ2FjaGUgZW50cnkgaXMKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STS5yc3QgYi9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0ucnN0CmluZGV4IDkxN2IzMGIuLmIwMzk4NDUgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STS5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dFTkVSQVRPUl9QTEFURk9STQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIERlZmF1bHQgdmFsdWUgZm9yIDp2YXJpYWJsZTpgQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNYCBpZiBubyBDYWNoZSBlbnRyeQpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQucnN0IGIvSGVscC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQucnN0CmluZGV4IDdhYzM4NTYuLjM5NGRkODggMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9UT09MU0VULnJzdAorKysgYi9IZWxwL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfVE9PTFNFVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRGVmYXVsdCB2YWx1ZSBmb3IgOnZhcmlhYmxlOmBDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVGAgaWYgbm8gQ2FjaGUgZW50cnkKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX0xBTkdfQ09NUElMRVJfTEFVTkNIRVIucnN0IGIvSGVscC9lbnZ2YXIvQ01BS0VfTEFOR19DT01QSUxFUl9MQVVOQ0hFUi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4NGZhMQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZW52dmFyL0NNQUtFX0xBTkdfQ09NUElMRVJfTEFVTkNIRVIucnN0CkBAIC0wLDAgKzEsMTIgQEAKK0NNQUtFXzxMQU5HPl9DT01QSUxFUl9MQVVOQ0hFUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CisKK0RlZmF1bHQgY29tcGlsZXIgbGF1bmNoZXIgdG8gdXNlIGZvciB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlLiBXaWxsIG9ubHkgYmUgdXNlZAorYnkgQ01ha2UgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUgb24gdGhlIGZpcnN0IGNvbmZpZ3VyYXRpb24uIEFmdGVyd2FyZHMsIGl0CitpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgY2FjaGUgc2V0dGluZyBvZiB0aGUgdmFyaWFibGUgb2YgdGhlIHNhbWUgbmFtZS4gRm9yCithbnkgY29uZmlndXJhdGlvbiBydW4gKGluY2x1ZGluZyB0aGUgZmlyc3QpLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZQoraWdub3JlZCBpZiB0aGUgOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fQ09NUElMRVJfTEFVTkNIRVJgIHZhcmlhYmxlIGlzIGRlZmluZWQuCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DTUFLRV9NU1ZDSURFX1JVTl9QQVRILnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX01TVkNJREVfUlVOX1BBVEgucnN0CmluZGV4IDc3ZWFkNGQuLjViYWJiZTUgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NNQUtFX01TVkNJREVfUlVOX1BBVEgucnN0CisrKyBiL0hlbHAvZW52dmFyL0NNQUtFX01TVkNJREVfUlVOX1BBVEgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTVNWQ0lERV9SVU5fUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBFeHRyYSBQQVRIIGxvY2F0aW9ucyBmb3IgY3VzdG9tIGNvbW1hbmRzIHdoZW4gdXNpbmcKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX05PX1ZFUkJPU0UucnN0IGIvSGVscC9lbnZ2YXIvQ01BS0VfTk9fVkVSQk9TRS5yc3QKaW5kZXggMTQ5ZWZiZC4uZmU3MzNmOCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ01BS0VfTk9fVkVSQk9TRS5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfTk9fVkVSQk9TRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9OT19WRVJCT1NFCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogRGlzYWJsZXMgdmVyYm9zZSBvdXRwdXQgZnJvbSBDTWFrZSB3aGVuIDplbnZ2YXI6YFZFUkJPU0VgIGVudmlyb25tZW50IHZhcmlhYmxlCiBpcyBzZXQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX09TWF9BUkNISVRFQ1RVUkVTLnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX09TWF9BUkNISVRFQ1RVUkVTLnJzdAppbmRleCBlZjdkNTQ3Li40YmZhMzZhIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DTUFLRV9PU1hfQVJDSElURUNUVVJFUy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFRhcmdldCBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIGZvciBtYWNPUy4KZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NNQUtFX1BSRUZJWF9QQVRILnJzdCBiL0hlbHAvZW52dmFyL0NNQUtFX1BSRUZJWF9QQVRILnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQ2YWExCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9lbnZ2YXIvQ01BS0VfUFJFRklYX1BBVEgucnN0CkBAIC0wLDAgKzEsMTkgQEAKK0NNQUtFX1BSRUZJWF9QQVRICistLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKKy4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAorCitUaGUgYGBDTUFLRV9QUkVGSVhfUEFUSGBgIGVudmlyb25tZW50IHZhcmlhYmxlIG1heSBiZSBzZXQgdG8gYSBsaXN0IG9mCitkaXJlY3RvcmllcyBzcGVjaWZ5aW5nIGluc3RhbGxhdGlvbiAqcHJlZml4ZXMqIHRvIGJlIHNlYXJjaGVkIGJ5IHRoZQorOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAsIDpjb21tYW5kOmBmaW5kX3Byb2dyYW1gLCA6Y29tbWFuZDpgZmluZF9saWJyYXJ5YCwKKzpjb21tYW5kOmBmaW5kX2ZpbGVgLCBhbmQgOmNvbW1hbmQ6YGZpbmRfcGF0aGAgY29tbWFuZHMuICBFYWNoIGNvbW1hbmQgd2lsbAorYWRkIGFwcHJvcHJpYXRlIHN1YmRpcmVjdG9yaWVzIChsaWtlIGBgYmluYGAsIGBgbGliYGAsIG9yIGBgaW5jbHVkZWBgKQorYXMgc3BlY2lmaWVkIGluIGl0cyBvd24gZG9jdW1lbnRhdGlvbi4KKworVGhpcyB2YXJpYWJsZSBtYXkgaG9sZCBhIHNpbmdsZSBwcmVmaXggb3IgYSBsaXN0IG9mIHByZWZpeGVzIHNlcGFyYXRlZAorYnkgYGA6YGAgb24gVU5JWCBvciBgYDtgYCBvbiBXaW5kb3dzICh0aGUgc2FtZSBhcyB0aGUgYGBQQVRIYGAgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGNvbnZlbnRpb24gb24gdGhvc2UgcGxhdGZvcm1zKS4KKworU2VlIGFsc28gdGhlIDp2YXJpYWJsZTpgQ01BS0VfUFJFRklYX1BBVEhgIENNYWtlIHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ1NGTEFHUy5yc3QgYi9IZWxwL2VudnZhci9DU0ZMQUdTLnJzdAppbmRleCA0MDRiYjU5Li5kODc1MjA5IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DU0ZMQUdTLnJzdAorKysgYi9IZWxwL2VudnZhci9DU0ZMQUdTLnJzdApAQCAtMSwxMSArMSwxNSBAQAogQ1NGTEFHUwogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCi1QcmVmZXJyZWQgZXhlY3V0YWJsZSBmb3IgY29tcGlsaW5nIGBgQ1NoYXJwYGAgbGFuZ3VhZ2UgZmlsZXMuIFdpbGwgb25seSBiZQorRGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyB0byBiZSB1c2VkIHdoZW4gY29tcGlsaW5nIGBgQ1NoYXJwYGAgZmlsZXMuIFdpbGwgb25seSBiZQogdXNlZCBieSBDTWFrZSBvbiB0aGUgZmlyc3QgY29uZmlndXJhdGlvbiB0byBkZXRlcm1pbmUgYGBDU2hhcnBgYCBkZWZhdWx0CiBjb21waWxhdGlvbiBmbGFncywgYWZ0ZXIgd2hpY2ggdGhlIHZhbHVlIGZvciBgYENTRkxBR1NgYCBpcyBzdG9yZWQgaW4gdGhlIGNhY2hlCiBhcyA6dmFyaWFibGU6YENNQUtFX0NTaGFycF9GTEFHUyA8Q01BS0VfPExBTkc+X0ZMQUdTPmAuIEZvciBhbnkgY29uZmlndXJhdGlvbgogcnVuIChpbmNsdWRpbmcgdGhlIGZpcnN0KSwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgaWdub3JlZCBpZiB0aGUKIDp2YXJpYWJsZTpgQ01BS0VfQ1NoYXJwX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCitTZWUgYWxzbyA6dmFyaWFibGU6YENNQUtFX0NTaGFycF9GTEFHU19JTklUIDxDTUFLRV88TEFORz5fRkxBR1NfSU5JVD5gLgpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ1RFU1RfSU5URVJBQ1RJVkVfREVCVUdfTU9ERS5yc3QgYi9IZWxwL2VudnZhci9DVEVTVF9JTlRFUkFDVElWRV9ERUJVR19NT0RFLnJzdAppbmRleCBlMTk5MWIyLi5iMjdiYzA5IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DVEVTVF9JTlRFUkFDVElWRV9ERUJVR19NT0RFLnJzdAorKysgYi9IZWxwL2VudnZhci9DVEVTVF9JTlRFUkFDVElWRV9ERUJVR19NT0RFLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0lOVEVSQUNUSVZFX0RFQlVHX01PREUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCB3aWxsIGV4aXN0IGFuZCBiZSBzZXQgdG8gYGAxYGAgd2hlbiBhIHRlc3QgZXhlY3V0ZWQKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NURVNUX09VVFBVVF9PTl9GQUlMVVJFLnJzdCBiL0hlbHAvZW52dmFyL0NURVNUX09VVFBVVF9PTl9GQUlMVVJFLnJzdAppbmRleCBkOGI0MjYyLi45YzZiZDAzIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DVEVTVF9PVVRQVVRfT05fRkFJTFVSRS5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ1RFU1RfT1VUUFVUX09OX0ZBSUxVUkUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfT1VUUFVUX09OX0ZBSUxVUkUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIEJvb2xlYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCBjb250cm9scyBpZiB0aGUgb3V0cHV0IHNob3VsZCBiZSBsb2dnZWQgZm9yCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DVEVTVF9QQVJBTExFTF9MRVZFTC5yc3QgYi9IZWxwL2VudnZhci9DVEVTVF9QQVJBTExFTF9MRVZFTC5yc3QKaW5kZXggZmQ0OTM2ZS4uYTIxYzc4MyAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ1RFU1RfUEFSQUxMRUxfTEVWRUwucnN0CisrKyBiL0hlbHAvZW52dmFyL0NURVNUX1BBUkFMTEVMX0xFVkVMLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX1BBUkFMTEVMX0xFVkVMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBTcGVjaWZ5IHRoZSBudW1iZXIgb2YgdGVzdHMgZm9yIENUZXN0IHRvIHJ1biBpbiBwYXJhbGxlbC4gU2VlIDptYW51YWw6YGN0ZXN0KDEpYApkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ1RFU1RfUFJPR1JFU1NfT1VUUFVULnJzdCBiL0hlbHAvZW52dmFyL0NURVNUX1BST0dSRVNTX09VVFBVVC5yc3QKaW5kZXggYjM2YTZiOC4uOGMyOWQ3ZCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ1RFU1RfUFJPR1JFU1NfT1VUUFVULnJzdAorKysgYi9IZWxwL2VudnZhci9DVEVTVF9QUk9HUkVTU19PVVRQVVQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfUFJPR1JFU1NfT1VUUFVUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogQm9vbGVhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IGFmZmVjdHMgaG93IDptYW51YWw6YGN0ZXN0IDxjdGVzdCgxKT5gCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DVEVTVF9VU0VfTEFVTkNIRVJTX0RFRkFVTFQucnN0IGIvSGVscC9lbnZ2YXIvQ1RFU1RfVVNFX0xBVU5DSEVSU19ERUZBVUxULnJzdAppbmRleCA3OWRiYjc5Li5kZmZkNjNkIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DVEVTVF9VU0VfTEFVTkNIRVJTX0RFRkFVTFQucnN0CisrKyBiL0hlbHAvZW52dmFyL0NURVNUX1VTRV9MQVVOQ0hFUlNfREVGQVVMVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9VU0VfTEFVTkNIRVJTX0RFRkFVTFQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBJbml0aWFsaXplcyB0aGUgOnZhcmlhYmxlOmBDVEVTVF9VU0VfTEFVTkNIRVJTYCB2YXJpYWJsZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ1VEQUNYWC5yc3QgYi9IZWxwL2VudnZhci9DVURBQ1hYLnJzdAppbmRleCAxMGMwZjlkLi42OTQ3MWIwIDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9DVURBQ1hYLnJzdAorKysgYi9IZWxwL2VudnZhci9DVURBQ1hYLnJzdApAQCAtMSw2ICsxLDggQEAKIENVREFDWFgKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogUHJlZmVycmVkIGV4ZWN1dGFibGUgZm9yIGNvbXBpbGluZyBgYENVREFgYCBsYW5ndWFnZSBmaWxlcy4gV2lsbCBvbmx5IGJlIHVzZWQgYnkKQEAgLTksMyArMTEsMTEgQEAKIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFUiA8Q01BS0VfPExBTkc+X0NPTVBJTEVSPmAuIEZvciBhbnkgY29uZmlndXJhdGlvbgogcnVuIChpbmNsdWRpbmcgdGhlIGZpcnN0KSwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgaWdub3JlZCBpZiB0aGUKIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFUiA8Q01BS0VfPExBTkc+X0NPTVBJTEVSPmAgdmFyaWFibGUgaXMgZGVmaW5lZC4KKworLi4gbm90ZTo6CisgIE9wdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gbWFrZSB0aGUgY29tcGlsZXIgd29yayBjb3JyZWN0bHkgY2FuIGJlIGluY2x1ZGVkOworICB0aGV5IGNhbiBub3QgYmUgY2hhbmdlZC4KKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGV4cG9ydCBDVURBQ1hYPSJjdXN0b20tY29tcGlsZXIgLS1hcmcxIC0tYXJnMiIKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0NVREFGTEFHUy5yc3QgYi9IZWxwL2VudnZhci9DVURBRkxBR1MucnN0CmluZGV4IDQ0NTZkNmIuLjFmMWJkZTUgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NVREFGTEFHUy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvQ1VEQUZMQUdTLnJzdApAQCAtMSw2ICsxLDggQEAKIENVREFGTEFHUwogLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIERlZmF1bHQgY29tcGlsYXRpb24gZmxhZ3MgdG8gYmUgdXNlZCB3aGVuIGNvbXBpbGluZyBgYENVREFgYCBmaWxlcy4gV2lsbCBvbmx5IGJlCkBAIC05LDMgKzExLDUgQEAKIGNhY2hlIGFzIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9GTEFHUyA8Q01BS0VfPExBTkc+X0ZMQUdTPmAuIEZvciBhbnkgY29uZmlndXJhdGlvbgogcnVuIChpbmNsdWRpbmcgdGhlIGZpcnN0KSwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgaWdub3JlZCBpZgogdGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9GTEFHUyA8Q01BS0VfPExBTkc+X0ZMQUdTPmAgdmFyaWFibGUgaXMgZGVmaW5lZC4KKworU2VlIGFsc28gOnZhcmlhYmxlOmBDTUFLRV9DVURBX0ZMQUdTX0lOSVQgPENNQUtFXzxMQU5HPl9GTEFHU19JTklUPmAuCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9DVURBSE9TVENYWC5yc3QgYi9IZWxwL2VudnZhci9DVURBSE9TVENYWC5yc3QKaW5kZXggYjlmNjViZC4uODFjMTIyOCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ1VEQUhPU1RDWFgucnN0CisrKyBiL0hlbHAvZW52dmFyL0NVREFIT1NUQ1hYLnJzdApAQCAtMSw2ICsxLDggQEAKIENVREFIT1NUQ1hYCiAtLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBQcmVmZXJyZWQgZXhlY3V0YWJsZSBmb3IgY29tcGlsaW5nIGhvc3QgY29kZSB3aGVuIGNvbXBpbGluZyBgYENVREFgYApkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ1hYLnJzdCBiL0hlbHAvZW52dmFyL0NYWC5yc3QKaW5kZXggZDY1NTM1MC4uOTA4YTUyMSAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvQ1hYLnJzdAorKysgYi9IZWxwL2VudnZhci9DWFgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1hYCiAtLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogUHJlZmVycmVkIGV4ZWN1dGFibGUgZm9yIGNvbXBpbGluZyBgYENYWGBgIGxhbmd1YWdlIGZpbGVzLiBXaWxsIG9ubHkgYmUgdXNlZCBieQpAQCAtOSwzICsxMSwxMSBAQAogOnZhcmlhYmxlOmBDTUFLRV9DWFhfQ09NUElMRVIgPENNQUtFXzxMQU5HPl9DT01QSUxFUj5gLiBGb3IgYW55IGNvbmZpZ3VyYXRpb24KIHJ1biAoaW5jbHVkaW5nIHRoZSBmaXJzdCksIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIGlnbm9yZWQgaWYgdGhlCiA6dmFyaWFibGU6YENNQUtFX0NYWF9DT01QSUxFUiA8Q01BS0VfPExBTkc+X0NPTVBJTEVSPmAgdmFyaWFibGUgaXMgZGVmaW5lZC4KKworLi4gbm90ZTo6CisgIE9wdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gbWFrZSB0aGUgY29tcGlsZXIgd29yayBjb3JyZWN0bHkgY2FuIGJlIGluY2x1ZGVkOworICB0aGV5IGNhbiBub3QgYmUgY2hhbmdlZC4KKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGV4cG9ydCBDWFg9ImN1c3RvbS1jb21waWxlciAtLWFyZzEgLS1hcmcyIgpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvQ1hYRkxBR1MucnN0IGIvSGVscC9lbnZ2YXIvQ1hYRkxBR1MucnN0CmluZGV4IGQ3Mjk2ZGMuLmEzY2VmNzcgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0NYWEZMQUdTLnJzdAorKysgYi9IZWxwL2VudnZhci9DWFhGTEFHUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDWFhGTEFHUwogLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyB0byBiZSB1c2VkIHdoZW4gY29tcGlsaW5nIGBgQ1hYYGAgKEMrKykgZmlsZXMuIFdpbGwKQEAgLTksMyArMTEsNSBAQAogYXMgOnZhcmlhYmxlOmBDTUFLRV9DWFhfRkxBR1MgPENNQUtFXzxMQU5HPl9GTEFHUz5gLiBGb3IgYW55IGNvbmZpZ3VyYXRpb24gcnVuICgKIGluY2x1ZGluZyB0aGUgZmlyc3QpLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBpZ25vcmVkIGlmCiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9DWFhfRkxBR1MgPENNQUtFXzxMQU5HPl9GTEFHUz5gIHZhcmlhYmxlIGlzIGRlZmluZWQuCisKK1NlZSBhbHNvIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX0ZMQUdTX0lOSVQgPENNQUtFXzxMQU5HPl9GTEFHU19JTklUPmAuCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9EQVNIQk9BUkRfVEVTVF9GUk9NX0NURVNULnJzdCBiL0hlbHAvZW52dmFyL0RBU0hCT0FSRF9URVNUX0ZST01fQ1RFU1QucnN0CmluZGV4IDZhNTJkNjQuLjc2MzUzNDIgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0RBU0hCT0FSRF9URVNUX0ZST01fQ1RFU1QucnN0CisrKyBiL0hlbHAvZW52dmFyL0RBU0hCT0FSRF9URVNUX0ZST01fQ1RFU1QucnN0CkBAIC0xLDYgKzEsOCBAQAogREFTSEJPQVJEX1RFU1RfRlJPTV9DVEVTVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBFbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdpbGwgZXhpc3Qgd2hlbiBhIHRlc3QgZXhlY3V0ZWQgYnkgOm1hbnVhbDpgY3Rlc3QoMSlgCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9ERVNURElSLnJzdCBiL0hlbHAvZW52dmFyL0RFU1RESVIucnN0CmluZGV4IGQyMTQ0YWUuLmVlMjkwZjIgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL0RFU1RESVIucnN0CisrKyBiL0hlbHAvZW52dmFyL0RFU1RESVIucnN0CkBAIC0xLDYgKzEsOCBAQAogREVTVERJUgogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBPbiBVTklYIG9uZSBjYW4gdXNlIHRoZSBgYERFU1RESVJgYCBtZWNoYW5pc20gaW4gb3JkZXIgdG8gcmVsb2NhdGUgdGhlCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9GQy5yc3QgYi9IZWxwL2VudnZhci9GQy5yc3QKaW5kZXggZDZjYWJiYy4uZGNlZTAyZCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvRkMucnN0CisrKyBiL0hlbHAvZW52dmFyL0ZDLnJzdApAQCAtMSw2ICsxLDggQEAKIEZDCiAtLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBQcmVmZXJyZWQgZXhlY3V0YWJsZSBmb3IgY29tcGlsaW5nIGBgRm9ydHJhbmBgIGxhbmd1YWdlIGZpbGVzLiBXaWxsIG9ubHkgYmUgdXNlZApAQCAtMTAsMyArMTIsMTEgQEAKIGNvbmZpZ3VyYXRpb24gcnVuIChpbmNsdWRpbmcgdGhlIGZpcnN0KSwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUKIGlnbm9yZWQgaWYgdGhlIDp2YXJpYWJsZTpgQ01BS0VfRm9ydHJhbl9DT01QSUxFUiA8Q01BS0VfPExBTkc+X0NPTVBJTEVSPmAKIHZhcmlhYmxlIGlzIGRlZmluZWQuCisKKy4uIG5vdGU6OgorICBPcHRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIG1ha2UgdGhlIGNvbXBpbGVyIHdvcmsgY29ycmVjdGx5IGNhbiBiZSBpbmNsdWRlZDsKKyAgdGhleSBjYW4gbm90IGJlIGNoYW5nZWQuCisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgJCBleHBvcnQgRkM9ImN1c3RvbS1jb21waWxlciAtLWFyZzEgLS1hcmcyIgpkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvRkZMQUdTLnJzdCBiL0hlbHAvZW52dmFyL0ZGTEFHUy5yc3QKaW5kZXggMDJkM2MzNC4uNGMxZjNkMiAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvRkZMQUdTLnJzdAorKysgYi9IZWxwL2VudnZhci9GRkxBR1MucnN0CkBAIC0xLDYgKzEsOCBAQAogRkZMQUdTCiAtLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogRGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyB0byBiZSB1c2VkIHdoZW4gY29tcGlsaW5nIGBgRm9ydHJhbmBgIGZpbGVzLiBXaWxsIG9ubHkKQEAgLTksMyArMTEsNSBAQAogYXMgOnZhcmlhYmxlOmBDTUFLRV9Gb3J0cmFuX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YC4gRm9yIGFueSBjb25maWd1cmF0aW9uCiBydW4gKGluY2x1ZGluZyB0aGUgZmlyc3QpLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBpZ25vcmVkIGlmCiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9Gb3J0cmFuX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCitTZWUgYWxzbyA6dmFyaWFibGU6YENNQUtFX0ZvcnRyYW5fRkxBR1NfSU5JVCA8Q01BS0VfPExBTkc+X0ZMQUdTX0lOSVQ+YC4KZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL0xERkxBR1MucnN0IGIvSGVscC9lbnZ2YXIvTERGTEFHUy5yc3QKaW5kZXggODE2ZDZlZi4uNzhiMzRmNCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvTERGTEFHUy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvTERGTEFHUy5yc3QKQEAgLTEsNiArMSw4IEBACiBMREZMQUdTCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFdpbGwgb25seSBiZSB1c2VkIGJ5IENNYWtlIG9uIHRoZSBmaXJzdCBjb25maWd1cmF0aW9uIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdApkaWZmIC0tZ2l0IGEvSGVscC9lbnZ2YXIvTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULnJzdCBiL0hlbHAvZW52dmFyL01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC5yc3QKaW5kZXggNjYyYmQwMy4uMTU1ODcwNCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULnJzdAorKysgYi9IZWxwL2VudnZhci9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQucnN0CkBAIC0xLDYgKzEsOCBAQAogTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiAuLiBpbmNsdWRlOjogRU5WX1ZBUi50eHQKIAogU3BlY2lmeSB0aGUgbWluaW11bSB2ZXJzaW9uIG9mIG1hY09TIG9uIHdoaWNoIHRoZSB0YXJnZXQgYmluYXJpZXMgYXJlCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9PQkpDLnJzdCBiL0hlbHAvZW52dmFyL09CSkMucnN0CmluZGV4IDMwYzBkMTMuLjJkOTU4MDYgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL09CSkMucnN0CisrKyBiL0hlbHAvZW52dmFyL09CSkMucnN0CkBAIC0xLDYgKzEsOCBAQAogT0JKQwogLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2LjcKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFByZWZlcnJlZCBleGVjdXRhYmxlIGZvciBjb21waWxpbmcgYGBPQkpDYGAgbGFuZ3VhZ2UgZmlsZXMuIFdpbGwgb25seSBiZSB1c2VkCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9PQkpDWFgucnN0IGIvSGVscC9lbnZ2YXIvT0JKQ1hYLnJzdAppbmRleCBhNzJmN2U3Li43MTI4NmQ5IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9PQkpDWFgucnN0CisrKyBiL0hlbHAvZW52dmFyL09CSkNYWC5yc3QKQEAgLTEsNiArMSw4IEBACiBPQkpDWFgKIC0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2LjcKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIFByZWZlcnJlZCBleGVjdXRhYmxlIGZvciBjb21waWxpbmcgYGBPQkpDWFhgYCBsYW5ndWFnZSBmaWxlcy4gV2lsbCBvbmx5IGJlIHVzZWQKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL1BhY2thZ2VOYW1lX1JPT1QucnN0IGIvSGVscC9lbnZ2YXIvUGFja2FnZU5hbWVfUk9PVC5yc3QKaW5kZXggODJiMGEwNi4uZmMyYTFkNSAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvUGFja2FnZU5hbWVfUk9PVC5yc3QKKysrIGIvSGVscC9lbnZ2YXIvUGFja2FnZU5hbWVfUk9PVC5yc3QKQEAgLTEsNiArMSw4IEBACiA8UGFja2FnZU5hbWU+X1JPT1QKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyLjEKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIENhbGxzIHRvIDpjb21tYW5kOmBmaW5kX3BhY2thZ2UoPFBhY2thZ2VOYW1lPilgIHdpbGwgc2VhcmNoIGluIHByZWZpeGVzCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9SQy5yc3QgYi9IZWxwL2VudnZhci9SQy5yc3QKaW5kZXggNTU3NTIwZS4uYWRmYWVjYyAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvUkMucnN0CisrKyBiL0hlbHAvZW52dmFyL1JDLnJzdApAQCAtMSw2ICsxLDggQEAKIFJDCiAtLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBQcmVmZXJyZWQgZXhlY3V0YWJsZSBmb3IgY29tcGlsaW5nIGBgcmVzb3VyY2VgYCBmaWxlcy4gV2lsbCBvbmx5IGJlIHVzZWQgYnkgQ01ha2UKQEAgLTksMyArMTEsMTEgQEAKIDp2YXJpYWJsZTpgQ01BS0VfUkNfQ09NUElMRVIgPENNQUtFXzxMQU5HPl9DT01QSUxFUj5gLiBGb3IgYW55IGNvbmZpZ3VyYXRpb24gcnVuCiAoaW5jbHVkaW5nIHRoZSBmaXJzdCksIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIGlnbm9yZWQgaWYgdGhlCiA6dmFyaWFibGU6YENNQUtFX1JDX0NPTVBJTEVSIDxDTUFLRV88TEFORz5fQ09NUElMRVI+YCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCisuLiBub3RlOjoKKyAgT3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCB0byBtYWtlIHRoZSBjb21waWxlciB3b3JrIGNvcnJlY3RseSBjYW4gYmUgaW5jbHVkZWQ7CisgIHRoZXkgY2FuIG5vdCBiZSBjaGFuZ2VkLgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgZXhwb3J0IFJDPSJjdXN0b20tY29tcGlsZXIgLS1hcmcxIC0tYXJnMiIKZGlmZiAtLWdpdCBhL0hlbHAvZW52dmFyL1JDRkxBR1MucnN0IGIvSGVscC9lbnZ2YXIvUkNGTEFHUy5yc3QKaW5kZXggNDU0MTlmZS4uZjMzYTlhOCAxMDA2NDQKLS0tIGEvSGVscC9lbnZ2YXIvUkNGTEFHUy5yc3QKKysrIGIvSGVscC9lbnZ2YXIvUkNGTEFHUy5yc3QKQEAgLTEsNiArMSw4IEBACiBSQ0ZMQUdTCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogLi4gaW5jbHVkZTo6IEVOVl9WQVIudHh0CiAKIERlZmF1bHQgY29tcGlsYXRpb24gZmxhZ3MgdG8gYmUgdXNlZCB3aGVuIGNvbXBpbGluZyBgYHJlc291cmNlYGAgZmlsZXMuIFdpbGwKQEAgLTksMyArMTEsNSBAQAogdGhlIGNhY2hlIGFzIDp2YXJpYWJsZTpgQ01BS0VfUkNfRkxBR1MgPENNQUtFXzxMQU5HPl9GTEFHUz5gLiBGb3IgYW55CiBjb25maWd1cmF0aW9uIHJ1biAoaW5jbHVkaW5nIHRoZSBmaXJzdCksIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIGlnbm9yZWQKIGlmIHRoZSA6dmFyaWFibGU6YENNQUtFX1JDX0ZMQUdTIDxDTUFLRV88TEFORz5fRkxBR1M+YCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCitTZWUgYWxzbyA6dmFyaWFibGU6YENNQUtFX1JDX0ZMQUdTX0lOSVQgPENNQUtFXzxMQU5HPl9GTEFHU19JTklUPmAuCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9TV0lGVEMucnN0IGIvSGVscC9lbnZ2YXIvU1dJRlRDLnJzdAppbmRleCBiMTJlNTFkLi44OTZlMTU2IDEwMDY0NAotLS0gYS9IZWxwL2VudnZhci9TV0lGVEMucnN0CisrKyBiL0hlbHAvZW52dmFyL1NXSUZUQy5yc3QKQEAgLTEsNiArMSw4IEBACiBTV0lGVEMKIC0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIC4uIGluY2x1ZGU6OiBFTlZfVkFSLnR4dAogCiBQcmVmZXJyZWQgZXhlY3V0YWJsZSBmb3IgY29tcGlsaW5nIGBgU3dpZnRgYCBsYW5ndWFnZSBmaWxlcy4gV2lsbCBvbmx5IGJlIHVzZWQgYnkKQEAgLTksMyArMTEsMTEgQEAKIDp2YXJpYWJsZTpgQ01BS0VfU3dpZnRfQ09NUElMRVIgPENNQUtFXzxMQU5HPl9DT01QSUxFUj5gLiBGb3IgYW55IGNvbmZpZ3VyYXRpb24gcnVuCiAoaW5jbHVkaW5nIHRoZSBmaXJzdCksIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIGlnbm9yZWQgaWYgdGhlCiA6dmFyaWFibGU6YENNQUtFX1N3aWZ0X0NPTVBJTEVSIDxDTUFLRV88TEFORz5fQ09NUElMRVI+YCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCisuLiBub3RlOjoKKyAgT3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCB0byBtYWtlIHRoZSBjb21waWxlciB3b3JrIGNvcnJlY3RseSBjYW4gYmUgaW5jbHVkZWQ7CisgIHRoZXkgY2FuIG5vdCBiZSBjaGFuZ2VkLgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgZXhwb3J0IFNXSUZUQz0iY3VzdG9tLWNvbXBpbGVyIC0tYXJnMSAtLWFyZzIiCmRpZmYgLS1naXQgYS9IZWxwL2VudnZhci9WRVJCT1NFLnJzdCBiL0hlbHAvZW52dmFyL1ZFUkJPU0UucnN0CmluZGV4IDJkNzc1YTUuLjU5MTE5NTEgMTAwNjQ0Ci0tLSBhL0hlbHAvZW52dmFyL1ZFUkJPU0UucnN0CisrKyBiL0hlbHAvZW52dmFyL1ZFUkJPU0UucnN0CkBAIC0xLDYgKzEsOCBAQAogVkVSQk9TRQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIEFjdGl2YXRlcyB2ZXJib3NlIG91dHB1dCBmcm9tIENNYWtlIGFuZCB5b3VyIGJ1aWxkIHRvb2xzIG9mIGNob2ljZSB3aGVuCiB5b3Ugc3RhcnQgdG8gYWN0dWFsbHkgYnVpbGQgeW91ciBwcm9qZWN0LgogCmRpZmYgLS1naXQgYS9IZWxwL2dlbmVyYXRvci9HcmVlbiBIaWxscyBNVUxUSS5yc3QgYi9IZWxwL2dlbmVyYXRvci9HcmVlbiBIaWxscyBNVUxUSS5yc3QKaW5kZXggZGZmYzY3OS4uMjI0NjY5OSAxMDA2NDQKLS0tIGEvSGVscC9nZW5lcmF0b3IvR3JlZW4gSGlsbHMgTVVMVEkucnN0CisrKyBiL0hlbHAvZ2VuZXJhdG9yL0dyZWVuIEhpbGxzIE1VTFRJLnJzdApAQCAtMSw2ICsxLDggQEAKIEdyZWVuIEhpbGxzIE1VTFRJCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogR2VuZXJhdGVzIEdyZWVuIEhpbGxzIE1VTFRJIHByb2plY3QgZmlsZXMgKGV4cGVyaW1lbnRhbCwgd29yay1pbi1wcm9ncmVzcykuCiAKIFRoZSBidWlsZHN5c3RlbSBoYXMgcHJlZGV0ZXJtaW5lZCBidWlsZC1jb25maWd1cmF0aW9uIHNldHRpbmdzIHRoYXQgY2FuIGJlIGNvbnRyb2xsZWQKZGlmZiAtLWdpdCBhL0hlbHAvZ2VuZXJhdG9yL05pbmphIE11bHRpLUNvbmZpZy5yc3QgYi9IZWxwL2dlbmVyYXRvci9OaW5qYSBNdWx0aS1Db25maWcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzdhMWMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2dlbmVyYXRvci9OaW5qYSBNdWx0aS1Db25maWcucnN0CkBAIC0wLDAgKzEsODkgQEAKK05pbmphIE11bHRpLUNvbmZpZworLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworR2VuZXJhdGVzIG11bHRpcGxlIGBgYnVpbGQtPENvbmZpZz4ubmluamFgYCBmaWxlcy4KKworVGhpcyBnZW5lcmF0b3IgaXMgdmVyeSBtdWNoIGxpa2UgdGhlIDpnZW5lcmF0b3I6YE5pbmphYCBnZW5lcmF0b3IsIGJ1dCB3aXRoCitzb21lIGtleSBkaWZmZXJlbmNlcy4gT25seSB0aGVzZSBkaWZmZXJlbmNlcyB3aWxsIGJlIGRpc2N1c3NlZCBpbiB0aGlzCitkb2N1bWVudC4KKworVW5saWtlIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAgZ2VuZXJhdG9yLCBgYE5pbmphIE11bHRpLUNvbmZpZ2BgIGdlbmVyYXRlcworbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgYXQgb25jZSB3aXRoIDp2YXJpYWJsZTpgQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFU2AKK2luc3RlYWQgb2Ygb25seSBvbmUgY29uZmlndXJhdGlvbiB3aXRoIDp2YXJpYWJsZTpgQ01BS0VfQlVJTERfVFlQRWAuIE9uZQorYGBidWlsZC08Q29uZmlnPi5uaW5qYWBgIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGVhY2ggb2YgdGhlc2UKK2NvbmZpZ3VyYXRpb25zICh3aXRoIGBgPENvbmZpZz5gYCBiZWluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lLikgVGhlc2UgZmlsZXMKK2FyZSBpbnRlbmRlZCB0byBiZSBydW4gd2l0aCBgYG5pbmphIC1mIGJ1aWxkLTxDb25maWc+Lm5pbmphYGAuIEEKK2BgYnVpbGQubmluamFgYCBmaWxlIGlzIGFsc28gZ2VuZXJhdGVkLCB1c2luZyB0aGUgY29uZmlndXJhdGlvbiBmcm9tIGVpdGhlcgorOnZhcmlhYmxlOmBDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEVgIG9yIHRoZSBmaXJzdCBpdGVtIGZyb20KKzp2YXJpYWJsZTpgQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFU2AuCisKK2BgY21ha2UgLS1idWlsZCAuIC0tY29uZmlnIDxDb25maWc+YGAgd2lsbCBhbHdheXMgdXNlIGBgYnVpbGQtPENvbmZpZz4ubmluamFgYAordG8gYnVpbGQuIElmIG5vIGBgLS1jb25maWdgYCBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIGBgY21ha2UgLS1idWlsZCAuYGAgd2lsbAorZGVmYXVsdCB0byBgYGJ1aWxkLURlYnVnLm5pbmphYGAsIHVubGVzcyBhIGBgYnVpbGQubmluamFgYCBpcyBnZW5lcmF0ZWQgKHNlZQorYmVsb3cpLCBpbiB3aGljaCBjYXNlIHRoYXQgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisKK0VhY2ggYGBidWlsZC08Q29uZmlnPi5uaW5qYWBgIGZpbGUgY29udGFpbnMgYGA8dGFyZ2V0PmBgIHRhcmdldHMgYXMgd2VsbCBhcworYGA8dGFyZ2V0Pjo8Q29uZmlnPmBgIHRhcmdldHMsIHdoZXJlIGBgPENvbmZpZz5gYCBpcyB0aGUgc2FtZSBhcyB0aGUKK2NvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGluIGBgYnVpbGQtPENvbmZpZz4ubmluamFgYCBBZGRpdGlvbmFsbHksIGlmCitjcm9zcy1jb25maWcgbW9kZSBpcyBlbmFibGVkLCBgYGJ1aWxkLTxDb25maWc+Lm5pbmphYGAgbWF5IGNvbnRhaW4KK2BgPHRhcmdldD46PE90aGVyQ29uZmlnPmBgIHRhcmdldHMsIHdoZXJlIGBgPE90aGVyQ29uZmlnPmBgIGlzIGEgY3Jvc3MtY29uZmlnLAorYXMgd2VsbCBhcyBgYDx0YXJnZXQ+OmFsbGBgLCB3aGljaCBidWlsZHMgdGhlIHRhcmdldCBpbiBhbGwgY3Jvc3MtY29uZmlncy4gU2VlCitiZWxvdyBmb3IgaG93IHRvIGVuYWJsZSBjcm9zcy1jb25maWcgbW9kZS4KKworVGhlIGBgTmluamEgTXVsdGktQ29uZmlnYGAgZ2VuZXJhdG9yIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisKKzp2YXJpYWJsZTpgQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFU2AKKyAgU3BlY2lmaWVzIHRoZSB0b3RhbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgdG8gYnVpbGQuCisKKzp2YXJpYWJsZTpgQ01BS0VfQ1JPU1NfQ09ORklHU2AKKyAgU3BlY2lmaWVzIGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mCisgIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBmcm9tIGFsbCBgYGJ1aWxkLTxDb25maWc+Lm5pbmphYGAgZmlsZXMuCisKKzp2YXJpYWJsZTpgQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFYAorICBTcGVjaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGJ5IGRlZmF1bHQgaW4gYSBgYGJ1aWxkLm5pbmphYGAgZmlsZS4KKworOnZhcmlhYmxlOmBDTUFLRV9ERUZBVUxUX0NPTkZJR1NgCisgIFNwZWNpZmllcyBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBvZgorICBjb25maWd1cmF0aW9ucyB0byBidWlsZCBmb3IgYSB0YXJnZXQgaW4gYGBidWlsZC5uaW5qYWBgCisgIGlmIG5vIGBgOjxDb25maWc+YGAgc3VmZml4IGlzIHNwZWNpZmllZC4KKworQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKKyAgcHJvamVjdChNdWx0aUNvbmZpZ05pbmphIEMpCisKKyAgYWRkX2V4ZWN1dGFibGUoZ2VuZXJhdG9yIGdlbmVyYXRvci5jKQorICBhZGRfY3VzdG9tX2NvbW1hbmQoT1VUUFVUIGdlbmVyYXRlZC5jIENPTU1BTkQgZ2VuZXJhdG9yIGdlbmVyYXRlZC5jKQorICBhZGRfbGlicmFyeShnZW5lcmF0ZWQgJHtDTUFLRV9CSU5BUllfRElSfS9nZW5lcmF0ZWQuYykKKworTm93IGFzc3VtZSB5b3UgY29uZmlndXJlIHRoZSBwcm9qZWN0IHdpdGggYGBOaW5qYSBNdWx0aS1Db25maWdgYCBhbmQgcnVuIG9uZSBvZgordGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsCisKKyAgbmluamEgLWYgYnVpbGQtRGVidWcubmluamEgZ2VuZXJhdGVkCisgICMgT1IKKyAgY21ha2UgLS1idWlsZCAuIC0tY29uZmlnIERlYnVnIC0tdGFyZ2V0IGdlbmVyYXRlZAorCitUaGlzIHdvdWxkIGJ1aWxkIHRoZSBgYERlYnVnYGAgY29uZmlndXJhdGlvbiBvZiBgYGdlbmVyYXRvcmBgLCB3aGljaCB3b3VsZCBiZQordXNlZCB0byBnZW5lcmF0ZSBgYGdlbmVyYXRlZC5jYGAsIHdoaWNoIHdvdWxkIGJlIHVzZWQgdG8gYnVpbGQgdGhlIGBgRGVidWdgYAorY29uZmlndXJhdGlvbiBvZiBgYGdlbmVyYXRlZGBgLgorCitCdXQgaWYgOnZhcmlhYmxlOmBDTUFLRV9DUk9TU19DT05GSUdTYCBpcyBzZXQgdG8gYGBhbGxgYCwgYW5kIHlvdSBydW4gdGhlCitmb2xsb3dpbmcgaW5zdGVhZDoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsCisKKyAgbmluamEgLWYgYnVpbGQtUmVsZWFzZS5uaW5qYSBnZW5lcmF0ZWQ6RGVidWcKKyAgIyBPUgorICBjbWFrZSAtLWJ1aWxkIC4gLS1jb25maWcgUmVsZWFzZSAtLXRhcmdldCBnZW5lcmF0ZWQ6RGVidWcKKworVGhpcyB3b3VsZCBidWlsZCB0aGUgYGBSZWxlYXNlYGAgY29uZmlndXJhdGlvbiBvZiBgYGdlbmVyYXRvcmBgLCB3aGljaCB3b3VsZCBiZQordXNlZCB0byBnZW5lcmF0ZSBgYGdlbmVyYXRlZC5jYGAsIHdoaWNoIHdvdWxkIGJlIHVzZWQgdG8gYnVpbGQgdGhlIGBgRGVidWdgYAorY29uZmlndXJhdGlvbiBvZiBgYGdlbmVyYXRlZGBgLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcnVubmluZyBhIHJlbGVhc2Utb3B0aW1pemVkCit2ZXJzaW9uIG9mIGEgZ2VuZXJhdG9yIHV0aWxpdHkgd2hpbGUgc3RpbGwgYnVpbGRpbmcgdGhlIGRlYnVnIHZlcnNpb24gb2YgdGhlCit0YXJnZXRzIGJ1aWx0IHdpdGggdGhlIGdlbmVyYXRlZCBjb2RlLgpkaWZmIC0tZ2l0IGEvSGVscC9nZW5lcmF0b3IvTmluamEucnN0IGIvSGVscC9nZW5lcmF0b3IvTmluamEucnN0CmluZGV4IGM3NWQyYzQuLjA4ZWU4MWIgMTAwNjQ0Ci0tLSBhL0hlbHAvZ2VuZXJhdG9yL05pbmphLnJzdAorKysgYi9IZWxwL2dlbmVyYXRvci9OaW5qYS5yc3QKQEAgLTEsNyArMSw3IEBACiBOaW5qYQogLS0tLS0KIAotR2VuZXJhdGVzIGJ1aWxkLm5pbmphIGZpbGVzLgorR2VuZXJhdGVzIGBgYnVpbGQubmluamFgYCBmaWxlcy4KIAogQSBgYGJ1aWxkLm5pbmphYGAgZmlsZSBpcyBnZW5lcmF0ZWQgaW50byB0aGUgYnVpbGQgdHJlZS4gIFVzZSB0aGUgbmluamEKIHByb2dyYW0gdG8gYnVpbGQgdGhlIHByb2plY3QgdGhyb3VnaCB0aGUgYGBhbGxgYCB0YXJnZXQgYW5kIGluc3RhbGwgdGhlCkBAIC0zMyw4ICszMywxMCBAQAogXl5eXl5eXl5eXl5eXl5eCiAKIFRoZSBgYE5pbmphYGAgZ2VuZXJhdG9yIGNvbmRpdGlvbmFsbHkgc3VwcG9ydHMgRm9ydHJhbiB3aGVuIHRoZSBgYG5pbmphYGAKLXRvb2wgaGFzIHRoZSByZXF1aXJlZCBmZWF0dXJlcy4gIEFzIG9mIHRoaXMgdmVyc2lvbiBvZiBDTWFrZSB0aGUgbmVlZGVkCi1mZWF0dXJlcyBoYXZlIG5vdCBiZWVuIGludGVncmF0ZWQgaW50byB1cHN0cmVhbSBOaW5qYS4gIEtpdHdhcmUgbWFpbnRhaW5zCi1hIGJyYW5jaCBvZiBOaW5qYSB3aXRoIHRoZSByZXF1aXJlZCBmZWF0dXJlcyBvbiBgZ2l0aHViLmNvbS9LaXR3YXJlL25pbmphYF8uCit0b29sIGlzIGF0IGxlYXN0IHZlcnNpb24gMS4xMCAod2hpY2ggaGFzIHRoZSByZXF1aXJlZCBmZWF0dXJlcykuCiAKLS4uIF9gZ2l0aHViLmNvbS9LaXR3YXJlL25pbmphYDogaHR0cHM6Ly9naXRodWIuY29tL0tpdHdhcmUvbmluamEvdHJlZS9mZWF0dXJlcy1mb3ItZm9ydHJhbiNyZWFkbWUKK1NlZSBBbHNvCiteXl5eXl5eXgorCitUaGUgOmdlbmVyYXRvcjpgTmluamEgTXVsdGktQ29uZmlnYCBnZW5lcmF0b3IgaXMgc2ltaWxhciB0byB0aGUgYGBOaW5qYWBgCitnZW5lcmF0b3IsIGJ1dCBnZW5lcmF0ZXMgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgYXQgb25jZS4KZGlmZiAtLWdpdCBhL0hlbHAvZ2VuZXJhdG9yL1Zpc3VhbCBTdHVkaW8gMTQgMjAxNS5yc3QgYi9IZWxwL2dlbmVyYXRvci9WaXN1YWwgU3R1ZGlvIDE0IDIwMTUucnN0CmluZGV4IDczODNmN2EuLjQwMTg0NWQgMTAwNjQ0Ci0tLSBhL0hlbHAvZ2VuZXJhdG9yL1Zpc3VhbCBTdHVkaW8gMTQgMjAxNS5yc3QKKysrIGIvSGVscC9nZW5lcmF0b3IvVmlzdWFsIFN0dWRpbyAxNCAyMDE1LnJzdApAQCAtMSw2ICsxLDggQEAKIFZpc3VhbCBTdHVkaW8gMTQgMjAxNQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBHZW5lcmF0ZXMgVmlzdWFsIFN0dWRpbyAxNCAoVlMgMjAxNSkgcHJvamVjdCBmaWxlcy4KIAogUHJvamVjdCBUeXBlcwpkaWZmIC0tZ2l0IGEvSGVscC9nZW5lcmF0b3IvVmlzdWFsIFN0dWRpbyAxNSAyMDE3LnJzdCBiL0hlbHAvZ2VuZXJhdG9yL1Zpc3VhbCBTdHVkaW8gMTUgMjAxNy5yc3QKaW5kZXggN2U2ZjBmYi4uZTdiYWFhZCAxMDA2NDQKLS0tIGEvSGVscC9nZW5lcmF0b3IvVmlzdWFsIFN0dWRpbyAxNSAyMDE3LnJzdAorKysgYi9IZWxwL2dlbmVyYXRvci9WaXN1YWwgU3R1ZGlvIDE1IDIwMTcucnN0CkBAIC0xLDYgKzEsOCBAQAogVmlzdWFsIFN0dWRpbyAxNSAyMDE3CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43LjEKKwogR2VuZXJhdGVzIFZpc3VhbCBTdHVkaW8gMTUgKFZTIDIwMTcpIHByb2plY3QgZmlsZXMuCiAKIFByb2plY3QgVHlwZXMKZGlmZiAtLWdpdCBhL0hlbHAvZ2VuZXJhdG9yL1Zpc3VhbCBTdHVkaW8gMTYgMjAxOS5yc3QgYi9IZWxwL2dlbmVyYXRvci9WaXN1YWwgU3R1ZGlvIDE2IDIwMTkucnN0CmluZGV4IDRhZWM3ZjcuLjNkYTgwOTEgMTAwNjQ0Ci0tLSBhL0hlbHAvZ2VuZXJhdG9yL1Zpc3VhbCBTdHVkaW8gMTYgMjAxOS5yc3QKKysrIGIvSGVscC9nZW5lcmF0b3IvVmlzdWFsIFN0dWRpbyAxNiAyMDE5LnJzdApAQCAtMSw2ICsxLDggQEAKIFZpc3VhbCBTdHVkaW8gMTYgMjAxOQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogR2VuZXJhdGVzIFZpc3VhbCBTdHVkaW8gMTYgKFZTIDIwMTkpIHByb2plY3QgZmlsZXMuCiAKIFByb2plY3QgVHlwZXMKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvQ01ha2VMaXN0cy50eHQgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL0NNYWtlTGlzdHMudHh0CmluZGV4IGVjYTc5ZDkuLjRkOGEzYWQgMTAwNjQ0Ci0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvQ01ha2VMaXN0cy50eHQKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9DTWFrZUxpc3RzLnR4dApAQCAtMyw2ICszLDggQEAKICMgc2V0IHRoZSBwcm9qZWN0IG5hbWUgYW5kIHZlcnNpb24KIHByb2plY3QoVHV0b3JpYWwgVkVSU0lPTiAxLjApCiAKK3NldChDTUFLRV9ERUJVR19QT1NURklYIGQpCisKIGFkZF9saWJyYXJ5KHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzIElOVEVSRkFDRSkKIHRhcmdldF9jb21waWxlX2ZlYXR1cmVzKHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzIElOVEVSRkFDRSBjeHhfc3RkXzExKQogCkBAIC0zNyw2ICszOSw4IEBACiAKICMgYWRkIHRoZSBleGVjdXRhYmxlCiBhZGRfZXhlY3V0YWJsZShUdXRvcmlhbCB0dXRvcmlhbC5jeHgpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVHV0b3JpYWwgUFJPUEVSVElFUyBERUJVR19QT1NURklYICR7Q01BS0VfREVCVUdfUE9TVEZJWH0pCisKIHRhcmdldF9saW5rX2xpYnJhcmllcyhUdXRvcmlhbCBQVUJMSUMgTWF0aEZ1bmN0aW9ucykKIAogIyBhZGQgdGhlIGJpbmFyeSB0cmVlIHRvIHRoZSBzZWFyY2ggcGF0aCBmb3IgaW5jbHVkZSBmaWxlcwpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0IGIvSGVscC9ndWlkZS90dXRvcmlhbC9Db21wbGV0ZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CmluZGV4IGRmYTg0YzkuLmE0N2Q1ZTAgMTAwNjQ0Ci0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDcgKzE3LDcgQEAKIAogICAjIGZpcnN0IHdlIGFkZCB0aGUgZXhlY3V0YWJsZSB0aGF0IGdlbmVyYXRlcyB0aGUgdGFibGUKICAgYWRkX2V4ZWN1dGFibGUoTWFrZVRhYmxlIE1ha2VUYWJsZS5jeHgpCi0gIHRhcmdldF9saW5rX2xpYnJhcmllcyhNYWtlVGFibGUgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3MpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhNYWtlVGFibGUgUFJJVkFURSB0dXRvcmlhbF9jb21waWxlcl9mbGFncykKIAogICAjIGFkZCB0aGUgY29tbWFuZCB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGNvZGUKICAgYWRkX2N1c3RvbV9jb21tYW5kKApAQCAtNTcsNyArNTcsMTEgQEAKIHNldF9wcm9wZXJ0eShUQVJHRVQgTWF0aEZ1bmN0aW9ucyBQUk9QRVJUWSBTT1ZFUlNJT04gIjEiKQogCiAjIGluc3RhbGwgcnVsZXMKLWluc3RhbGwoVEFSR0VUUyBNYXRoRnVuY3Rpb25zIHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzCitzZXQoaW5zdGFsbGFibGVfbGlicyBNYXRoRnVuY3Rpb25zIHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzKQoraWYoVEFSR0VUIFNxcnRMaWJyYXJ5KQorICBsaXN0KEFQUEVORCBpbnN0YWxsYWJsZV9saWJzIFNxcnRMaWJyYXJ5KQorZW5kaWYoKQoraW5zdGFsbChUQVJHRVRTICR7aW5zdGFsbGFibGVfbGlic30KICAgICAgICAgREVTVElOQVRJT04gbGliCiAgICAgICAgIEVYUE9SVCBNYXRoRnVuY3Rpb25zVGFyZ2V0cykKIGluc3RhbGwoRklMRVMgTWF0aEZ1bmN0aW9ucy5oIERFU1RJTkFUSU9OIGluY2x1ZGUpCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL011bHRpQ1BhY2tDb25maWcuY21ha2UgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL011bHRpQ1BhY2tDb25maWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1ODNkZgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvTXVsdGlDUGFja0NvbmZpZy5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK2luY2x1ZGUoInJlbGVhc2UvQ1BhY2tDb25maWcuY21ha2UiKQorCitzZXQoQ1BBQ0tfSU5TVEFMTF9DTUFLRV9QUk9KRUNUUworICAgICJkZWJ1ZztUdXRvcmlhbDtBTEw7LyIKKyAgICAicmVsZWFzZTtUdXRvcmlhbDtBTEw7LyIKKyAgICApCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbXBsZXRlL3R1dG9yaWFsLmN4eCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvdHV0b3JpYWwuY3h4CmluZGV4IDU4NmQxODMuLmE0ZjQ0ZDUgMTAwNjQ0Ci0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvdHV0b3JpYWwuY3h4CisrKyBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29tcGxldGUvdHV0b3JpYWwuY3h4CkBAIC0xLDYgKzEsNSBAQAogLy8gQSBzaW1wbGUgcHJvZ3JhbSB0aGF0IGNvbXB1dGVzIHRoZSBzcXVhcmUgcm9vdCBvZiBhIG51bWJlcgogI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogCiAjaW5jbHVkZSAiTWF0aEZ1bmN0aW9ucy5oIgpAQCAtOSw2ICs4LDcgQEAKIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiB7CiAgIGlmIChhcmdjIDwgMikgeworICAgIC8vIHJlcG9ydCB2ZXJzaW9uCiAgICAgc3RkOjpjb3V0IDw8IGFyZ3ZbMF0gPDwgIiBWZXJzaW9uICIgPDwgVHV0b3JpYWxfVkVSU0lPTl9NQUpPUiA8PCAiLiIKICAgICAgICAgICAgICAgPDwgVHV0b3JpYWxfVkVSU0lPTl9NSU5PUiA8PCBzdGQ6OmVuZGw7CiAgICAgc3RkOjpjb3V0IDw8ICJVc2FnZTogIiA8PCBhcmd2WzBdIDw8ICIgbnVtYmVyIiA8PCBzdGQ6OmVuZGw7CkBAIC0xOCw4ICsxOCw4IEBACiAgIC8vIGNvbnZlcnQgaW5wdXQgdG8gZG91YmxlCiAgIGNvbnN0IGRvdWJsZSBpbnB1dFZhbHVlID0gc3RkOjpzdG9kKGFyZ3ZbMV0pOwogCi0gIC8vIGNhbGN1bGF0ZSBzcXVhcmUgcm9vdAogICBjb25zdCBkb3VibGUgb3V0cHV0VmFsdWUgPSBtYXRoZnVuY3Rpb25zOjpzcXJ0KGlucHV0VmFsdWUpOworCiAgIHN0ZDo6Y291dCA8PCAiVGhlIHNxdWFyZSByb290IG9mICIgPDwgaW5wdXRWYWx1ZSA8PCAiIGlzICIgPDwgb3V0cHV0VmFsdWUKICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbnN1bWVyL0NNYWtlTGlzdHMudHh0IGIvSGVscC9ndWlkZS90dXRvcmlhbC9Db25zdW1lci9DTWFrZUxpc3RzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBlNDU5OC4uMDAwMDAwMAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbnN1bWVyL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTApCi0KLWlmKE5PVCBERUZJTkVEIENNQUtFX0NYWF9TVEFOREFSRCkKLSAgc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKLSAgc2V0KENNQUtFX0NYWF9TVEFOREFSRF9SRVFVSVJFRCBUcnVlKQotZW5kaWYoKQotCi0KLWZ1bmN0aW9uKGZpbmRfZXh0ZXJuYWxfZGVwZW5kZW5jeSBuYW1lKQotICBzZXQoJHtuYW1lfV9ST09UICIiICBDQUNIRSBQQVRIICJSb290IGRpcmVjdG9yeSB0byBmaW5kICR7bmFtZX0iKQotICBtYXJrX2FzX2FkdmFuY2VkKCR7bmFtZX1fRElSKQotICBmaW5kX3BhY2thZ2UoJHtuYW1lfSBQQVRIUyAkeyR7bmFtZX1fUk9PVH0gUkVRVUlSRUQpCi1lbmRmdW5jdGlvbigpCi0KLQotcHJvamVjdChDb25zdW1lcikKLQotZmluZF9leHRlcm5hbF9kZXBlbmRlbmN5KE1hdGhGdW5jdGlvbnMpCi0KLWFkZF9saWJyYXJ5KGNvbnN1bWVyIGNvbnN1bWVyLmN4eCkKLXRhcmdldF9saW5rX2xpYnJhcmllcyhjb25zdW1lciBQVUJMSUMgTWF0aEZ1bmN0aW9ucykKLQotIyBpbnN0YWxsIHRoZSBjb25zdW1lciBsaWJyYXJ5Ci1pbnN0YWxsKFRBUkdFVFMgY29uc3VtZXIgREVTVElOQVRJT04gYmluIEVYUE9SVCBDb25zdW1lclRhcmdldHMpCi0KLSMgaW5zdGFsbCB0aGUgY29uZmlndXJhdGlvbiB0YXJnZXRzCi1pbnN0YWxsKEVYUE9SVCBDb25zdW1lclRhcmdldHMKLSAgRklMRSBDb25zdW1lclRhcmdldHMuY21ha2UKLSAgREVTVElOQVRJT04gbGliL2NtYWtlL0NvbnN1bWVyCi0pCi0KLWluY2x1ZGUoQ01ha2VQYWNrYWdlQ29uZmlnSGVscGVycykKLSMgZ2VuZXJhdGUgdGhlIGNvbmZpZyBmaWxlIHRoYXQgaXMgaW5jbHVkZXMgdGhlIGV4cG9ydHMKLWNvbmZpZ3VyZV9wYWNrYWdlX2NvbmZpZ19maWxlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9Db25maWcuY21ha2UuaW4KLSAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9Db25zdW1lckNvbmZpZy5jbWFrZSIKLSAgSU5TVEFMTF9ERVNUSU5BVElPTiAibGliL2NtYWtlL2V4YW1wbGUiCi0gIE5PX1NFVF9BTkRfQ0hFQ0tfTUFDUk8KLSAgTk9fQ0hFQ0tfUkVRVUlSRURfQ09NUE9ORU5UU19NQUNSTwotICApCi0KLSMgaW5zdGFsbCB0aGUgY29uZmlndXJhdGlvbiBmaWxlCi1pbnN0YWxsKEZJTEVTCi0gICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9Db25zdW1lckNvbmZpZy5jbWFrZQotICBERVNUSU5BVElPTiBsaWIvY21ha2UvQ29uc3VtZXIKLSAgKQotCi0jIGdlbmVyYXRlIHRoZSBleHBvcnQgdGFyZ2V0cyBmb3IgdGhlIGJ1aWxkIHRyZWUKLSMgbmVlZHMgdG8gYmUgYWZ0ZXIgdGhlIGluc3RhbGwoVEFSR0VUUyApIGNvbW1hbmQKLWV4cG9ydChFWFBPUlQgQ29uc3VtZXJUYXJnZXRzCi0gIEZJTEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9Db25zdW1lclRhcmdldHMuY21ha2UiCi0pCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL0NvbnN1bWVyL0NvbmZpZy5jbWFrZS5pbiBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29uc3VtZXIvQ29uZmlnLmNtYWtlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjNmMWU0Li4wMDAwMDAwCi0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29uc3VtZXIvQ29uZmlnLmNtYWtlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotCi1AUEFDS0FHRV9JTklUQAotCi1pbmNsdWRlKENNYWtlRmluZERlcGVuZGVuY3lNYWNybykKLQotZnVuY3Rpb24oZmluZF9leHRlcm5hbF9kZXBlbmRlbmN5IG5hbWUpCi0gIHNldCgke25hbWV9X1JPT1QgIiIgIENBQ0hFIFBBVEggIlJvb3QgZGlyZWN0b3J5IHRvIGZpbmQgJHtuYW1lfSIpCi0gIG1hcmtfYXNfYWR2YW5jZWQoJHtuYW1lfV9ESVIpCi0gIGZpbmRfZGVwZW5kZW5jeSgke25hbWV9IFBBVEhTICR7JHtuYW1lfV9ST09UfSBSRVFVSVJFRCkKLWVuZGZ1bmN0aW9uKCkKLQotZmluZF9leHRlcm5hbF9kZXBlbmRlbmN5KE1hdGhGdW5jdGlvbnMpCi0KLWluY2x1ZGUgKCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9Db25zdW1lclRhcmdldHMuY21ha2UiICkKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvQ29uc3VtZXIvY29uc3VtZXIuY3h4IGIvSGVscC9ndWlkZS90dXRvcmlhbC9Db25zdW1lci9jb25zdW1lci5jeHgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNzg3N2IuLjAwMDAwMDAKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9Db25zdW1lci9jb25zdW1lci5jeHgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0vLyBBIHNpbXBsZSBmdW5jdGlvbiB0aGF0IGNvbXB1dGVzIHRoZSBzcXVhcmUgcm9vdCBvZiBhIG51bWJlcgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiTWF0aEZ1bmN0aW9ucy5oIgotCi1kb3VibGUgc3RyaW5nX3NxdWFyZV9yb290KHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSkKLXsKLSAgcmV0dXJuIG1hdGhmdW5jdGlvbnM6OnNxcnQoc3RkOjpzdG9kKHZhbHVlKSk7Ci19CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWQ0MTdhLi4wMDAwMDAwCi0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEwKQotCi0jIHNldCB0aGUgcHJvamVjdCBuYW1lIGFuZCB2ZXJzaW9uCi1wcm9qZWN0KFR1dG9yaWFsIFZFUlNJT04gMS4wKQotCi1zZXQoQ01BS0VfQ1hYX1NUQU5EQVJEIDExKQotc2V0KENNQUtFX0NYWF9TVEFOREFSRF9SRVFVSVJFRCBUcnVlKQotCi0KLSMgY29udHJvbCB3aGVyZSB0aGUgc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIGFyZSBidWlsdCBzbyB0aGF0IG9uIHdpbmRvd3MKLSMgd2UgZG9uJ3QgbmVlZCB0byB0aW5rZXIgd2l0aCB0aGUgcGF0aCB0byBydW4gdGhlIGV4ZWN1dGFibGUKLXNldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUlkgIiR7UFJPSkVDVF9CSU5BUllfRElSfSIpCi1zZXQoQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZICIke1BST0pFQ1RfQklOQVJZX0RJUn0iKQotc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IikKLQotb3B0aW9uKEJVSUxEX1NIQVJFRF9MSUJTICJCdWlsZCB1c2luZyBzaGFyZWQgbGlicmFyaWVzIiBPTikKLQotaWYoQVBQTEUpCi0gIHNldChDTUFLRV9JTlNUQUxMX1JQQVRIICJAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYiIpCi1lbHNlaWYoVU5JWCkKLSAgc2V0KENNQUtFX0lOU1RBTExfUlBBVEggIiRPUklHSU4vLi4vbGliIikKLWVuZGlmKCkKLQotIyBjb25maWd1cmUgYSBoZWFkZXIgZmlsZSB0byBwYXNzIHRoZSB2ZXJzaW9uIG51bWJlciBvbmx5Ci1jb25maWd1cmVfZmlsZShUdXRvcmlhbENvbmZpZy5oLmluIFR1dG9yaWFsQ29uZmlnLmgpCi0KLSMgYWRkIHRoZSBNYXRoRnVuY3Rpb25zIGxpYnJhcnkKLWFkZF9zdWJkaXJlY3RvcnkoTWF0aEZ1bmN0aW9ucykKLQotIyBhZGQgdGhlIGV4ZWN1dGFibGUKLWFkZF9leGVjdXRhYmxlKFR1dG9yaWFsIHR1dG9yaWFsLmN4eCkKLXRhcmdldF9saW5rX2xpYnJhcmllcyhUdXRvcmlhbCBQVUJMSUMgTWF0aEZ1bmN0aW9ucykKLQotIyBhZGQgdGhlIGJpbmFyeSB0cmVlIHRvIHRoZSBzZWFyY2ggcGF0aCBmb3IgaW5jbHVkZSBmaWxlcwotIyBzbyB0aGF0IHdlIHdpbGwgZmluZCBUdXRvcmlhbENvbmZpZy5oCi10YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhUdXRvcmlhbCBQVUJMSUMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIke1BST0pFQ1RfQklOQVJZX0RJUn0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApCi0KLSMgYWRkIHRoZSBpbnN0YWxsIHRhcmdldHMKLWluc3RhbGwoVEFSR0VUUyBUdXRvcmlhbCBERVNUSU5BVElPTiBiaW4pCi1pbnN0YWxsKEZJTEVTICIke1BST0pFQ1RfQklOQVJZX0RJUn0vVHV0b3JpYWxDb25maWcuaCIKLSAgREVTVElOQVRJT04gaW5jbHVkZQotICApCi0KLSMgZW5hYmxlIHRlc3RpbmcKLWVuYWJsZV90ZXN0aW5nKCkKLQotIyBkb2VzIHRoZSBhcHBsaWNhdGlvbiBydW4KLWFkZF90ZXN0KE5BTUUgUnVucyBDT01NQU5EIFR1dG9yaWFsIDI1KQotCi0jIGRvZXMgdGhlIHVzYWdlIG1lc3NhZ2Ugd29yaz8KLWFkZF90ZXN0KE5BTUUgVXNhZ2UgQ09NTUFORCBUdXRvcmlhbCkKLXNldF90ZXN0c19wcm9wZXJ0aWVzKFVzYWdlCi0gIFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlVzYWdlOi4qbnVtYmVyIgotICApCi0KLSMgZGVmaW5lIGEgZnVuY3Rpb24gdG8gc2ltcGxpZnkgYWRkaW5nIHRlc3RzCi1mdW5jdGlvbihkb190ZXN0IHRhcmdldCBhcmcgcmVzdWx0KQotICBhZGRfdGVzdChOQU1FIENvbXAke2FyZ30gQ09NTUFORCAke3RhcmdldH0gJHthcmd9KQotICBzZXRfdGVzdHNfcHJvcGVydGllcyhDb21wJHthcmd9Ci0gICAgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAke3Jlc3VsdH0KLSAgICApCi1lbmRmdW5jdGlvbihkb190ZXN0KQotCi0jIGRvIGEgYnVuY2ggb2YgcmVzdWx0IGJhc2VkIHRlc3RzCi1kb190ZXN0KFR1dG9yaWFsIDQgIjQgaXMgMiIpCi1kb190ZXN0KFR1dG9yaWFsIDkgIjkgaXMgMyIpCi1kb190ZXN0KFR1dG9yaWFsIDUgIjUgaXMgMi4yMzYiKQotZG9fdGVzdChUdXRvcmlhbCA3ICI3IGlzIDIuNjQ1IikKLWRvX3Rlc3QoVHV0b3JpYWwgMjUgIjI1IGlzIDUiKQotZG9fdGVzdChUdXRvcmlhbCAtMjUgIi0yNSBpcyBbLW5hbnxuYW58MF0iKQotZG9fdGVzdChUdXRvcmlhbCAwLjAwMDEgIjAuMDAwMSBpcyAwLjAxIikKLQotaW5jbHVkZShJbnN0YWxsUmVxdWlyZWRTeXN0ZW1MaWJyYXJpZXMpCi1zZXQoQ1BBQ0tfUkVTT1VSQ0VfRklMRV9MSUNFTlNFICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vTGljZW5zZS50eHQiKQotc2V0KENQQUNLX1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiAiJHtUdXRvcmlhbF9WRVJTSU9OX01BSk9SfSIpCi1zZXQoQ1BBQ0tfUEFDS0FHRV9WRVJTSU9OX01JTk9SICIke1R1dG9yaWFsX1ZFUlNJT05fTUlOT1J9IikKLWluY2x1ZGUoQ1BhY2spCi0KLSMgaW5zdGFsbCB0aGUgY29uZmlndXJhdGlvbiB0YXJnZXRzCi1pbnN0YWxsKEVYUE9SVCBNYXRoRnVuY3Rpb25zVGFyZ2V0cwotICBGSUxFIE1hdGhGdW5jdGlvbnNUYXJnZXRzLmNtYWtlCi0gIERFU1RJTkFUSU9OIGxpYi9jbWFrZS9NYXRoRnVuY3Rpb25zCi0pCi0KLWluY2x1ZGUoQ01ha2VQYWNrYWdlQ29uZmlnSGVscGVycykKLSMgZ2VuZXJhdGUgdGhlIGNvbmZpZyBmaWxlIHRoYXQgaXMgaW5jbHVkZXMgdGhlIGV4cG9ydHMKLWNvbmZpZ3VyZV9wYWNrYWdlX2NvbmZpZ19maWxlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9Db25maWcuY21ha2UuaW4KLSAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9NYXRoRnVuY3Rpb25zQ29uZmlnLmNtYWtlIgotICBJTlNUQUxMX0RFU1RJTkFUSU9OICJsaWIvY21ha2UvZXhhbXBsZSIKLSAgTk9fU0VUX0FORF9DSEVDS19NQUNSTwotICBOT19DSEVDS19SRVFVSVJFRF9DT01QT05FTlRTX01BQ1JPCi0gICkKLSMgZ2VuZXJhdGUgdGhlIHZlcnNpb24gZmlsZSBmb3IgdGhlIGNvbmZpZyBmaWxlCi13cml0ZV9iYXNpY19wYWNrYWdlX3ZlcnNpb25fZmlsZSgKLSAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9NYXRoRnVuY3Rpb25zQ29uZmlnVmVyc2lvbi5jbWFrZSIKLSAgVkVSU0lPTiAiJHtUdXRvcmlhbF9WRVJTSU9OX01BSk9SfS4ke1R1dG9yaWFsX1ZFUlNJT05fTUlOT1J9IgotICBDT01QQVRJQklMSVRZIEFueU5ld2VyVmVyc2lvbgotKQotCi0jIGluc3RhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQotaW5zdGFsbChGSUxFUwotICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTWF0aEZ1bmN0aW9uc0NvbmZpZy5jbWFrZQotICBERVNUSU5BVElPTiBsaWIvY21ha2UvTWF0aEZ1bmN0aW9ucwotICApCi0KLSMgZ2VuZXJhdGUgdGhlIGV4cG9ydCB0YXJnZXRzIGZvciB0aGUgYnVpbGQgdHJlZQotIyBuZWVkcyB0byBiZSBhZnRlciB0aGUgaW5zdGFsbChUQVJHRVRTICkgY29tbWFuZAotZXhwb3J0KEVYUE9SVCBNYXRoRnVuY3Rpb25zVGFyZ2V0cwotICBGSUxFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTWF0aEZ1bmN0aW9uc1RhcmdldHMuY21ha2UiCi0pCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0IGIvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJkZjJhNy4uMDAwMDAwMAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotIyBhZGQgdGhlIGxpYnJhcnkgdGhhdCBydW5zCi1hZGRfbGlicmFyeShNYXRoRnVuY3Rpb25zIE1hdGhGdW5jdGlvbnMuY3h4KQotCi0jIHN0YXRlIHRoYXQgYW55Ym9keSBsaW5raW5nIHRvIHVzIG5lZWRzIHRvIGluY2x1ZGUgdGhlIGN1cnJlbnQgc291cmNlIGRpcgotIyB0byBmaW5kIE1hdGhGdW5jdGlvbnMuaCwgd2hpbGUgd2UgZG9uJ3QuCi10YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhNYXRoRnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFUkZBQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPEJVSUxEX0lOVEVSRkFDRToke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxJTlNUQUxMX0lOVEVSRkFDRTppbmNsdWRlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotCi0jIHNob3VsZCB3ZSB1c2Ugb3VyIG93biBtYXRoIGZ1bmN0aW9ucwotb3B0aW9uKFVTRV9NWU1BVEggIlVzZSB0dXRvcmlhbCBwcm92aWRlZCBtYXRoIGltcGxlbWVudGF0aW9uIiBPTikKLWlmKFVTRV9NWU1BVEgpCi0KLSAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoTWF0aEZ1bmN0aW9ucyBQUklWQVRFICJVU0VfTVlNQVRIIikKLQotICAjIGZpcnN0IHdlIGFkZCB0aGUgZXhlY3V0YWJsZSB0aGF0IGdlbmVyYXRlcyB0aGUgdGFibGUKLSAgYWRkX2V4ZWN1dGFibGUoTWFrZVRhYmxlIE1ha2VUYWJsZS5jeHgpCi0KLSAgIyBhZGQgdGhlIGNvbW1hbmQgdG8gZ2VuZXJhdGUgdGhlIHNvdXJjZSBjb2RlCi0gIGFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1RhYmxlLmgKLSAgICBDT01NQU5EIE1ha2VUYWJsZSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vVGFibGUuaAotICAgIERFUEVORFMgTWFrZVRhYmxlCi0gICAgKQotCi0gICMgbGlicmFyeSB0aGF0IGp1c3QgZG9lcyBzcXJ0Ci0gIGFkZF9saWJyYXJ5KFNxcnRMaWJyYXJ5IFNUQVRJQwotICAgICAgICAgICAgICBteXNxcnQuY3h4Ci0gICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9UYWJsZS5oCi0gICAgICAgICAgICAgICkKLQotICAjIHN0YXRlIHRoYXQgd2UgZGVwZW5kIG9uIG91ciBiaW5hcnkgZGlyIHRvIGZpbmQgVGFibGUuaAotICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhTcXJ0TGlicmFyeSBQUklWQVRFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0KLSAgIyBzdGF0ZSB0aGF0IFNxcnRMaWJyYXJ5IG5lZWQgUElDIHdoZW4gdGhlIGRlZmF1bHQgaXMgc2hhcmVkIGxpYnJhcmllcwotICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoU3FydExpYnJhcnkgUFJPUEVSVElFUwotICAgICAgICAgICAgICAgICAgICAgICAgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSAke0JVSUxEX1NIQVJFRF9MSUJTfQotICAgICAgICAgICAgICAgICAgICAgICAgKQotCi0gIHRhcmdldF9saW5rX2xpYnJhcmllcyhNYXRoRnVuY3Rpb25zIFBSSVZBVEUgU3FydExpYnJhcnkpCi1lbmRpZigpCi0KLSMgZGVmaW5lIHRoZSBzeW1ib2wgc3RhdGluZyB3ZSBhcmUgdXNpbmcgdGhlIGRlY2xzcGVjKGRsbGV4cG9ydCkgd2hlbgotIyBidWlsZGluZyBvbiB3aW5kb3dzCi10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhNYXRoRnVuY3Rpb25zIFBSSVZBVEUgIkVYUE9SVElOR19NWU1BVEgiKQotCi0jIHNldHVwIHRoZSB2ZXJzaW9uIG51bWJlcmluZwotc2V0X3Byb3BlcnR5KFRBUkdFVCBNYXRoRnVuY3Rpb25zIFBST1BFUlRZIFZFUlNJT04gIjEuMC4wIikKLXNldF9wcm9wZXJ0eShUQVJHRVQgTWF0aEZ1bmN0aW9ucyBQUk9QRVJUWSBTT1ZFUlNJT04gIjEiKQotCi0jIGluc3RhbGwgcnVsZXMKLWluc3RhbGwoVEFSR0VUUyBNYXRoRnVuY3Rpb25zCi0gICAgICAgIERFU1RJTkFUSU9OIGxpYgotICAgICAgICBFWFBPUlQgTWF0aEZ1bmN0aW9uc1RhcmdldHMpCi1pbnN0YWxsKEZJTEVTIE1hdGhGdW5jdGlvbnMuaCBERVNUSU5BVElPTiBpbmNsdWRlKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9NYWtlVGFibGUuY3h4IGIvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9NYWtlVGFibGUuY3h4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTU4NTU2Li4wMDAwMDAwCi0tLSBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL01hdGhGdW5jdGlvbnMvTWFrZVRhYmxlLmN4eAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8vIEEgc2ltcGxlIHByb2dyYW0gdGhhdCBidWlsZHMgYSBzcXJ0IHRhYmxlCi0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8ZnN0cmVhbT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKLXsKLSAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIGFyZ3VtZW50cwotICBpZiAoYXJnYyA8IDIpIHsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIHN0ZDo6b2ZzdHJlYW0gZm91dChhcmd2WzFdLCBzdGQ6Omlvc19iYXNlOjpvdXQpOwotICBjb25zdCBib29sIGZpbGVPcGVuID0gZm91dC5pc19vcGVuKCk7Ci0gIGlmIChmaWxlT3BlbikgewotICAgIGZvdXQgPDwgImRvdWJsZSBzcXJ0VGFibGVbXSA9IHsiIDw8IHN0ZDo6ZW5kbDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKLSAgICAgIGZvdXQgPDwgc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGkpKSA8PCAiLCIgPDwgc3RkOjplbmRsOwotICAgIH0KLSAgICAvLyBjbG9zZSB0aGUgdGFibGUgd2l0aCBhIHplcm8KLSAgICBmb3V0IDw8ICIwfTsiIDw8IHN0ZDo6ZW5kbDsKLSAgICBmb3V0LmNsb3NlKCk7Ci0gIH0KLSAgcmV0dXJuIGZpbGVPcGVuID8gMCA6IDE7IC8vIHJldHVybiAwIGlmIHdyb3RlIHRoZSBmaWxlCi19CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL215c3FydC5jeHggYi9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL215c3FydC5jeHgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNjIyYmUuLjAwMDAwMDAKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9teXNxcnQuY3h4CisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi0jaW5jbHVkZSAiTWF0aEZ1bmN0aW9ucy5oIgotCi0vLyBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgdGFibGUKLSNpbmNsdWRlICJUYWJsZS5oIgotCi1uYW1lc3BhY2UgbWF0aGZ1bmN0aW9ucyB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLS8vIGEgaGFjayBzcXVhcmUgcm9vdCBjYWxjdWxhdGlvbiB1c2luZyBzaW1wbGUgb3BlcmF0aW9ucwotZG91YmxlIG15c3FydChkb3VibGUgeCkKLXsKLSAgaWYgKHggPD0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgLy8gdXNlIHRoZSB0YWJsZSB0byBoZWxwIGZpbmQgYW4gaW5pdGlhbCB2YWx1ZQotICBkb3VibGUgcmVzdWx0ID0geDsKLSAgaWYgKHggPj0gMSAmJiB4IDwgMTApIHsKLSAgICByZXN1bHQgPSBzcXJ0VGFibGVbc3RhdGljX2Nhc3Q8aW50Pih4KV07Ci0gIH0KLQotICAvLyBpZiB3ZSBoYXZlIGJvdGggbG9nIGFuZCBleHAgdGhlbiB1c2UgdGhlbQotCi0gIC8vIGRvIHRlbiBpdGVyYXRpb25zCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgIGlmIChyZXN1bHQgPD0gMCkgewotICAgICAgcmVzdWx0ID0gMC4xOwotICAgIH0KLSAgICBkb3VibGUgZGVsdGEgPSB4IC0gKHJlc3VsdCAqIHJlc3VsdCk7Ci0gICAgcmVzdWx0ID0gcmVzdWx0ICsgMC41ICogZGVsdGEgLyByZXN1bHQ7Ci0gICAgc3RkOjpjb3V0IDw8ICJDb21wdXRpbmcgc3FydCBvZiAiIDw8IHggPDwgIiB0byBiZSAiIDw8IHJlc3VsdCA8PCBzdGQ6OmVuZGw7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotfQotfQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTXVsdGlDUGFja0NvbmZpZy5jbWFrZSBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL011bHRpQ1BhY2tDb25maWcuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwM2I2MzMuLjAwMDAwMDAKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTXVsdGlDUGFja0NvbmZpZy5jbWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotCi1pbmNsdWRlKCJyZWxlYXNlL0NQYWNrQ29uZmlnLmNtYWtlIikKLQotc2V0KENQQUNLX0lOU1RBTExfQ01BS0VfUFJPSkVDVFMKLSAgICAiZGVidWc7VHV0b3JpYWw7QUxMOy8iCi0gICAgInJlbGVhc2U7VHV0b3JpYWw7QUxMOy8iCi0gICAgKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvVHV0b3JpYWxDb25maWcuaC5pbiBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL1R1dG9yaWFsQ29uZmlnLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZDJmYzkuLjAwMDAwMDAKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvVHV0b3JpYWxDb25maWcuaC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLy8gdGhlIGNvbmZpZ3VyZWQgdmVyc2lvbiBudW1iZXIKLSNkZWZpbmUgVHV0b3JpYWxfVkVSU0lPTl9NQUpPUiBAVHV0b3JpYWxfVkVSU0lPTl9NQUpPUkAKLSNkZWZpbmUgVHV0b3JpYWxfVkVSU0lPTl9NSU5PUiBAVHV0b3JpYWxfVkVSU0lPTl9NSU5PUkAKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL3R1dG9yaWFsLmN4eCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL3R1dG9yaWFsLmN4eApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3ODA1Yi4uMDAwMDAwMAotLS0gYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS90dXRvcmlhbC5jeHgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vLyBBIHNpbXBsZSBwcm9ncmFtIHRoYXQgY29tcHV0ZXMgdGhlIHNxdWFyZSByb290IG9mIGEgbnVtYmVyCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiTWF0aEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlR1dG9yaWFsQ29uZmlnLmgiCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCi17Ci0gIGlmIChhcmdjIDwgMikgewotICAgIHN0ZDo6Y291dCA8PCBhcmd2WzBdIDw8ICIgVmVyc2lvbiAiIDw8IFR1dG9yaWFsX1ZFUlNJT05fTUFKT1IgPDwgIi4iCi0gICAgICAgICAgICAgIDw8IFR1dG9yaWFsX1ZFUlNJT05fTUlOT1IgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAiVXNhZ2U6ICIgPDwgYXJndlswXSA8PCAiIG51bWJlciIgPDwgc3RkOjplbmRsOwotICAgIHJldHVybiAxOwotICB9Ci0KLSAgLy8gY29udmVydCBpbnB1dCB0byBkb3VibGUKLSAgZG91YmxlIGlucHV0VmFsdWUgPSBzdGQ6OnN0b2QoYXJndlsxXSk7Ci0KLSAgY29uc3QgZG91YmxlIG91dHB1dFZhbHVlID0gbWF0aGZ1bmN0aW9uczo6c3FydChpbnB1dFZhbHVlKTsKLQotICBzdGQ6OmNvdXQgPDwgIlRoZSBzcXVhcmUgcm9vdCBvZiAiIDw8IGlucHV0VmFsdWUgPDwgIiBpcyAiIDw8IG91dHB1dFZhbHVlCi0gICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTAvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEwL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKaW5kZXggZTBjMDYyMS4uMGJmZTIwYyAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTAvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMC9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CkBAIC00Nyw1ICs0Nyw5IEBACiB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhNYXRoRnVuY3Rpb25zIFBSSVZBVEUgIkVYUE9SVElOR19NWU1BVEgiKQogCiAjIGluc3RhbGwgcnVsZXMKLWluc3RhbGwoVEFSR0VUUyBNYXRoRnVuY3Rpb25zIERFU1RJTkFUSU9OIGxpYikKK3NldChpbnN0YWxsYWJsZV9saWJzIE1hdGhGdW5jdGlvbnMpCitpZihUQVJHRVQgU3FydExpYnJhcnkpCisgIGxpc3QoQVBQRU5EIGluc3RhbGxhYmxlX2xpYnMgU3FydExpYnJhcnkpCitlbmRpZigpCitpbnN0YWxsKFRBUkdFVFMgJHtpbnN0YWxsYWJsZV9saWJzfSBERVNUSU5BVElPTiBsaWIpCiBpbnN0YWxsKEZJTEVTIE1hdGhGdW5jdGlvbnMuaCBERVNUSU5BVElPTiBpbmNsdWRlKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTEvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDExL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKaW5kZXggZTZjYjhiYS4uMGQyODdjYSAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTEvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CkBAIC0xNSw3ICsxNSw3IEBACiAKICAgIyBmaXJzdCB3ZSBhZGQgdGhlIGV4ZWN1dGFibGUgdGhhdCBnZW5lcmF0ZXMgdGhlIHRhYmxlCiAgIGFkZF9leGVjdXRhYmxlKE1ha2VUYWJsZSBNYWtlVGFibGUuY3h4KQotICB0YXJnZXRfbGlua19saWJyYXJpZXMoTWFrZVRhYmxlIHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzKQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoTWFrZVRhYmxlIFBSSVZBVEUgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3MpCiAKICAgIyBhZGQgdGhlIGNvbW1hbmQgdG8gZ2VuZXJhdGUgdGhlIHNvdXJjZSBjb2RlCiAgIGFkZF9jdXN0b21fY29tbWFuZCgKQEAgLTUxLDUgKzUxLDkgQEAKIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKE1hdGhGdW5jdGlvbnMgUFJJVkFURSAiRVhQT1JUSU5HX01ZTUFUSCIpCiAKICMgaW5zdGFsbCBydWxlcwotaW5zdGFsbChUQVJHRVRTIE1hdGhGdW5jdGlvbnMgREVTVElOQVRJT04gbGliKQorc2V0KGluc3RhbGxhYmxlX2xpYnMgTWF0aEZ1bmN0aW9ucyB0dXRvcmlhbF9jb21waWxlcl9mbGFncykKK2lmKFRBUkdFVCBTcXJ0TGlicmFyeSkKKyAgbGlzdChBUFBFTkQgaW5zdGFsbGFibGVfbGlicyBTcXJ0TGlicmFyeSkKK2VuZGlmKCkKK2luc3RhbGwoVEFSR0VUUyAke2luc3RhbGxhYmxlX2xpYnN9IERFU1RJTkFUSU9OIGxpYikKIGluc3RhbGwoRklMRVMgTWF0aEZ1bmN0aW9ucy5oIERFU1RJTkFUSU9OIGluY2x1ZGUpCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9DTWFrZUxpc3RzLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTc5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEyMCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCisKKyMgc2V0IHRoZSBwcm9qZWN0IG5hbWUgYW5kIHZlcnNpb24KK3Byb2plY3QoVHV0b3JpYWwgVkVSU0lPTiAxLjApCisKK2FkZF9saWJyYXJ5KHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzIElOVEVSRkFDRSkKK3RhcmdldF9jb21waWxlX2ZlYXR1cmVzKHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzIElOVEVSRkFDRSBjeHhfc3RkXzExKQorCisjIGFkZCBjb21waWxlciB3YXJuaW5nIGZsYWdzIGp1c3Qgd2hlbiBidWlsZGluZyB0aGlzIHByb2plY3QgdmlhCisjIHRoZSBCVUlMRF9JTlRFUkZBQ0UgZ2VuZXgKK3NldChnY2NfbGlrZV9jeHggIiQ8Q09NUElMRV9MQU5HX0FORF9JRDpDWFgsQVJNQ2xhbmcsQXBwbGVDbGFuZyxDbGFuZyxHTlU+IikKK3NldChtc3ZjX2N4eCAiJDxDT01QSUxFX0xBTkdfQU5EX0lEOkNYWCxNU1ZDPiIpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zKHR1dG9yaWFsX2NvbXBpbGVyX2ZsYWdzIElOVEVSRkFDRQorICAiJDwke2djY19saWtlX2N4eH06JDxCVUlMRF9JTlRFUkZBQ0U6LVdhbGw7LVdleHRyYTstV3NoYWRvdzstV2Zvcm1hdD0yOy1XdW51c2VkPj4iCisgICIkPCR7bXN2Y19jeHh9OiQ8QlVJTERfSU5URVJGQUNFOi1XMz4+IgorKQorCisjIGNvbnRyb2wgd2hlcmUgdGhlIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcyBhcmUgYnVpbHQgc28gdGhhdCBvbiB3aW5kb3dzCisjIHdlIGRvbid0IG5lZWQgdG8gdGlua2VyIHdpdGggdGhlIHBhdGggdG8gcnVuIHRoZSBleGVjdXRhYmxlCitzZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZICIke1BST0pFQ1RfQklOQVJZX0RJUn0iKQorc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IikKK3NldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7UFJPSkVDVF9CSU5BUllfRElSfSIpCisKK29wdGlvbihCVUlMRF9TSEFSRURfTElCUyAiQnVpbGQgdXNpbmcgc2hhcmVkIGxpYnJhcmllcyIgT04pCisKK2lmKEFQUExFKQorICBzZXQoQ01BS0VfSU5TVEFMTF9SUEFUSCAiQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIiKQorZWxzZWlmKFVOSVgpCisgIHNldChDTUFLRV9JTlNUQUxMX1JQQVRIICIkT1JJR0lOLy4uL2xpYiIpCitlbmRpZigpCisKKyMgY29uZmlndXJlIGEgaGVhZGVyIGZpbGUgdG8gcGFzcyB0aGUgdmVyc2lvbiBudW1iZXIgb25seQorY29uZmlndXJlX2ZpbGUoVHV0b3JpYWxDb25maWcuaC5pbiBUdXRvcmlhbENvbmZpZy5oKQorCisjIGFkZCB0aGUgTWF0aEZ1bmN0aW9ucyBsaWJyYXJ5CithZGRfc3ViZGlyZWN0b3J5KE1hdGhGdW5jdGlvbnMpCisKKyMgYWRkIHRoZSBleGVjdXRhYmxlCithZGRfZXhlY3V0YWJsZShUdXRvcmlhbCB0dXRvcmlhbC5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMoVHV0b3JpYWwgUFVCTElDIE1hdGhGdW5jdGlvbnMpCisKKyMgYWRkIHRoZSBiaW5hcnkgdHJlZSB0byB0aGUgc2VhcmNoIHBhdGggZm9yIGluY2x1ZGUgZmlsZXMKKyMgc28gdGhhdCB3ZSB3aWxsIGZpbmQgVHV0b3JpYWxDb25maWcuaAordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoVHV0b3JpYWwgUFVCTElDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisjIGFkZCB0aGUgaW5zdGFsbCB0YXJnZXRzCitpbnN0YWxsKFRBUkdFVFMgVHV0b3JpYWwgREVTVElOQVRJT04gYmluKQoraW5zdGFsbChGSUxFUyAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L1R1dG9yaWFsQ29uZmlnLmgiCisgIERFU1RJTkFUSU9OIGluY2x1ZGUKKyAgKQorCisjIGVuYWJsZSB0ZXN0aW5nCitlbmFibGVfdGVzdGluZygpCisKKyMgZG9lcyB0aGUgYXBwbGljYXRpb24gcnVuCithZGRfdGVzdChOQU1FIFJ1bnMgQ09NTUFORCBUdXRvcmlhbCAyNSkKKworIyBkb2VzIHRoZSB1c2FnZSBtZXNzYWdlIHdvcms/CithZGRfdGVzdChOQU1FIFVzYWdlIENPTU1BTkQgVHV0b3JpYWwpCitzZXRfdGVzdHNfcHJvcGVydGllcyhVc2FnZQorICBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJVc2FnZTouKm51bWJlciIKKyAgKQorCisjIGRlZmluZSBhIGZ1bmN0aW9uIHRvIHNpbXBsaWZ5IGFkZGluZyB0ZXN0cworZnVuY3Rpb24oZG9fdGVzdCB0YXJnZXQgYXJnIHJlc3VsdCkKKyAgYWRkX3Rlc3QoTkFNRSBDb21wJHthcmd9IENPTU1BTkQgJHt0YXJnZXR9ICR7YXJnfSkKKyAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoQ29tcCR7YXJnfQorICAgIFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gJHtyZXN1bHR9CisgICAgKQorZW5kZnVuY3Rpb24oZG9fdGVzdCkKKworIyBkbyBhIGJ1bmNoIG9mIHJlc3VsdCBiYXNlZCB0ZXN0cworZG9fdGVzdChUdXRvcmlhbCA0ICI0IGlzIDIiKQorZG9fdGVzdChUdXRvcmlhbCA5ICI5IGlzIDMiKQorZG9fdGVzdChUdXRvcmlhbCA1ICI1IGlzIDIuMjM2IikKK2RvX3Rlc3QoVHV0b3JpYWwgNyAiNyBpcyAyLjY0NSIpCitkb190ZXN0KFR1dG9yaWFsIDI1ICIyNSBpcyA1IikKK2RvX3Rlc3QoVHV0b3JpYWwgLTI1ICItMjUgaXMgWy1uYW58bmFufDBdIikKK2RvX3Rlc3QoVHV0b3JpYWwgMC4wMDAxICIwLjAwMDEgaXMgMC4wMSIpCisKK2luY2x1ZGUoSW5zdGFsbFJlcXVpcmVkU3lzdGVtTGlicmFyaWVzKQorc2V0KENQQUNLX1JFU09VUkNFX0ZJTEVfTElDRU5TRSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0xpY2Vuc2UudHh0IikKK3NldChDUEFDS19QQUNLQUdFX1ZFUlNJT05fTUFKT1IgIiR7VHV0b3JpYWxfVkVSU0lPTl9NQUpPUn0iKQorc2V0KENQQUNLX1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiAiJHtUdXRvcmlhbF9WRVJTSU9OX01JTk9SfSIpCitpbmNsdWRlKENQYWNrKQorCisjIGluc3RhbGwgdGhlIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworaW5zdGFsbChFWFBPUlQgTWF0aEZ1bmN0aW9uc1RhcmdldHMKKyAgRklMRSBNYXRoRnVuY3Rpb25zVGFyZ2V0cy5jbWFrZQorICBERVNUSU5BVElPTiBsaWIvY21ha2UvTWF0aEZ1bmN0aW9ucworKQorCitpbmNsdWRlKENNYWtlUGFja2FnZUNvbmZpZ0hlbHBlcnMpCisjIGdlbmVyYXRlIHRoZSBjb25maWcgZmlsZSB0aGF0IGlzIGluY2x1ZGVzIHRoZSBleHBvcnRzCitjb25maWd1cmVfcGFja2FnZV9jb25maWdfZmlsZSgke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ29uZmlnLmNtYWtlLmluCisgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTWF0aEZ1bmN0aW9uc0NvbmZpZy5jbWFrZSIKKyAgSU5TVEFMTF9ERVNUSU5BVElPTiAibGliL2NtYWtlL2V4YW1wbGUiCisgIE5PX1NFVF9BTkRfQ0hFQ0tfTUFDUk8KKyAgTk9fQ0hFQ0tfUkVRVUlSRURfQ09NUE9ORU5UU19NQUNSTworICApCisjIGdlbmVyYXRlIHRoZSB2ZXJzaW9uIGZpbGUgZm9yIHRoZSBjb25maWcgZmlsZQord3JpdGVfYmFzaWNfcGFja2FnZV92ZXJzaW9uX2ZpbGUoCisgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTWF0aEZ1bmN0aW9uc0NvbmZpZ1ZlcnNpb24uY21ha2UiCisgIFZFUlNJT04gIiR7VHV0b3JpYWxfVkVSU0lPTl9NQUpPUn0uJHtUdXRvcmlhbF9WRVJTSU9OX01JTk9SfSIKKyAgQ09NUEFUSUJJTElUWSBBbnlOZXdlclZlcnNpb24KKykKKworIyBpbnN0YWxsIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKK2luc3RhbGwoRklMRVMKKyAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L01hdGhGdW5jdGlvbnNDb25maWcuY21ha2UKKyAgREVTVElOQVRJT04gbGliL2NtYWtlL01hdGhGdW5jdGlvbnMKKyAgKQorCisjIGdlbmVyYXRlIHRoZSBleHBvcnQgdGFyZ2V0cyBmb3IgdGhlIGJ1aWxkIHRyZWUKKyMgbmVlZHMgdG8gYmUgYWZ0ZXIgdGhlIGluc3RhbGwoVEFSR0VUUyApIGNvbW1hbmQKK2V4cG9ydChFWFBPUlQgTWF0aEZ1bmN0aW9uc1RhcmdldHMKKyAgRklMRSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L01hdGhGdW5jdGlvbnNUYXJnZXRzLmNtYWtlIgorKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvQ1Rlc3RDb25maWcuY21ha2UgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9DVGVzdENvbmZpZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2VmZGIxCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvQ1Rlc3RDb25maWcuY21ha2UKQEAgLTAsMCArMSw3IEBACitzZXQoQ1RFU1RfUFJPSkVDVF9OQU1FICJDTWFrZVR1dG9yaWFsIikKK3NldChDVEVTVF9OSUdIVExZX1NUQVJUX1RJTUUgIjAwOjAwOjAwIEVTVCIpCisKK3NldChDVEVTVF9EUk9QX01FVEhPRCAiaHR0cCIpCitzZXQoQ1RFU1RfRFJPUF9TSVRFICJteS5jZGFzaC5vcmciKQorc2V0KENURVNUX0RST1BfTE9DQVRJT04gIi9zdWJtaXQucGhwP3Byb2plY3Q9Q01ha2VUdXRvcmlhbCIpCitzZXQoQ1RFU1RfRFJPUF9TSVRFX0NEQVNIIFRSVUUpCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9Db25maWcuY21ha2UuaW4gYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9Db25maWcuY21ha2UuaW4Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIEhlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL0NvbmZpZy5jbWFrZS5pbgpyZW5hbWUgdG8gSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvQ29uZmlnLmNtYWtlLmluCmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9MaWNlbnNlLnR4dCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL0xpY2Vuc2UudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBIZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9MaWNlbnNlLnR4dApyZW5hbWUgdG8gSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTGljZW5zZS50eHQKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzg2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNjMgQEAKKyMgYWRkIHRoZSBsaWJyYXJ5IHRoYXQgcnVucworYWRkX2xpYnJhcnkoTWF0aEZ1bmN0aW9ucyBNYXRoRnVuY3Rpb25zLmN4eCkKKworIyBzdGF0ZSB0aGF0IGFueWJvZHkgbGlua2luZyB0byB1cyBuZWVkcyB0byBpbmNsdWRlIHRoZSBjdXJyZW50IHNvdXJjZSBkaXIKKyMgdG8gZmluZCBNYXRoRnVuY3Rpb25zLmgsIHdoaWxlIHdlIGRvbid0LgordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoTWF0aEZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxCVUlMRF9JTlRFUkZBQ0U6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8SU5TVEFMTF9JTlRFUkZBQ0U6aW5jbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworIyBzaG91bGQgd2UgdXNlIG91ciBvd24gbWF0aCBmdW5jdGlvbnMKK29wdGlvbihVU0VfTVlNQVRIICJVc2UgdHV0b3JpYWwgcHJvdmlkZWQgbWF0aCBpbXBsZW1lbnRhdGlvbiIgT04pCitpZihVU0VfTVlNQVRIKQorCisgIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKE1hdGhGdW5jdGlvbnMgUFJJVkFURSAiVVNFX01ZTUFUSCIpCisKKyAgIyBmaXJzdCB3ZSBhZGQgdGhlIGV4ZWN1dGFibGUgdGhhdCBnZW5lcmF0ZXMgdGhlIHRhYmxlCisgIGFkZF9leGVjdXRhYmxlKE1ha2VUYWJsZSBNYWtlVGFibGUuY3h4KQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoTWFrZVRhYmxlIFBSSVZBVEUgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3MpCisKKyAgIyBhZGQgdGhlIGNvbW1hbmQgdG8gZ2VuZXJhdGUgdGhlIHNvdXJjZSBjb2RlCisgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICBPVVRQVVQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1RhYmxlLmgKKyAgICBDT01NQU5EIE1ha2VUYWJsZSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vVGFibGUuaAorICAgIERFUEVORFMgTWFrZVRhYmxlCisgICAgKQorCisgICMgbGlicmFyeSB0aGF0IGp1c3QgZG9lcyBzcXJ0CisgIGFkZF9saWJyYXJ5KFNxcnRMaWJyYXJ5IFNUQVRJQworICAgICAgICAgICAgICBteXNxcnQuY3h4CisgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9UYWJsZS5oCisgICAgICAgICAgICAgICkKKworICAjIHN0YXRlIHRoYXQgd2UgZGVwZW5kIG9uIG91ciBiaW5hcnkgZGlyIHRvIGZpbmQgVGFibGUuaAorICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhTcXJ0TGlicmFyeSBQUklWQVRFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgIyBzdGF0ZSB0aGF0IFNxcnRMaWJyYXJ5IG5lZWQgUElDIHdoZW4gdGhlIGRlZmF1bHQgaXMgc2hhcmVkIGxpYnJhcmllcworICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoU3FydExpYnJhcnkgUFJPUEVSVElFUworICAgICAgICAgICAgICAgICAgICAgICAgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSAke0JVSUxEX1NIQVJFRF9MSUJTfQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhTcXJ0TGlicmFyeSBQVUJMSUMgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3MpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhNYXRoRnVuY3Rpb25zIFBSSVZBVEUgU3FydExpYnJhcnkpCitlbmRpZigpCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyhNYXRoRnVuY3Rpb25zIFBVQkxJQyB0dXRvcmlhbF9jb21waWxlcl9mbGFncykKKworIyBkZWZpbmUgdGhlIHN5bWJvbCBzdGF0aW5nIHdlIGFyZSB1c2luZyB0aGUgZGVjbHNwZWMoZGxsZXhwb3J0KSB3aGVuCisjIGJ1aWxkaW5nIG9uIHdpbmRvd3MKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKE1hdGhGdW5jdGlvbnMgUFJJVkFURSAiRVhQT1JUSU5HX01ZTUFUSCIpCisKKyMgaW5zdGFsbCBydWxlcworc2V0KGluc3RhbGxhYmxlX2xpYnMgTWF0aEZ1bmN0aW9ucyB0dXRvcmlhbF9jb21waWxlcl9mbGFncykKK2lmKFRBUkdFVCBTcXJ0TGlicmFyeSkKKyAgbGlzdChBUFBFTkQgaW5zdGFsbGFibGVfbGlicyBTcXJ0TGlicmFyeSkKK2VuZGlmKCkKK2luc3RhbGwoVEFSR0VUUyAke2luc3RhbGxhYmxlX2xpYnN9CisgICAgICAgIERFU1RJTkFUSU9OIGxpYgorICAgICAgICBFWFBPUlQgTWF0aEZ1bmN0aW9uc1RhcmdldHMpCitpbnN0YWxsKEZJTEVTIE1hdGhGdW5jdGlvbnMuaCBERVNUSU5BVElPTiBpbmNsdWRlKQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwNS9NYXRoRnVuY3Rpb25zL01ha2VUYWJsZS5jeHggYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL01ha2VUYWJsZS5jeHgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIEhlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDUvTWF0aEZ1bmN0aW9ucy9NYWtlVGFibGUuY3h4CnJlbmFtZSB0byBIZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL01ha2VUYWJsZS5jeHgKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL01hdGhGdW5jdGlvbnMvTWF0aEZ1bmN0aW9ucy5jeHggYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL01hdGhGdW5jdGlvbnMuY3h4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBIZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL01hdGhGdW5jdGlvbnMuY3h4CnJlbmFtZSB0byBIZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9NYXRoRnVuY3Rpb25zL01hdGhGdW5jdGlvbnMuY3h4CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL01hdGhGdW5jdGlvbnMuaCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvTWF0aEZ1bmN0aW9ucy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBIZWxwL2d1aWRlL3R1dG9yaWFsL011bHRpUGFja2FnZS9NYXRoRnVuY3Rpb25zL01hdGhGdW5jdGlvbnMuaApyZW5hbWUgdG8gSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9NYXRoRnVuY3Rpb25zLmgKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvbXlzcXJ0LmN4eCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvbXlzcXJ0LmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTUzZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwMTIvTWF0aEZ1bmN0aW9ucy9teXNxcnQuY3h4CkBAIC0wLDAgKzEsMzcgQEAKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgIk1hdGhGdW5jdGlvbnMuaCIKKworLy8gaW5jbHVkZSB0aGUgZ2VuZXJhdGVkIHRhYmxlCisjaW5jbHVkZSAiVGFibGUuaCIKKworbmFtZXNwYWNlIG1hdGhmdW5jdGlvbnMgeworbmFtZXNwYWNlIGRldGFpbCB7CisvLyBhIGhhY2sgc3F1YXJlIHJvb3QgY2FsY3VsYXRpb24gdXNpbmcgc2ltcGxlIG9wZXJhdGlvbnMKK2RvdWJsZSBteXNxcnQoZG91YmxlIHgpCit7CisgIGlmICh4IDw9IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8vIHVzZSB0aGUgdGFibGUgdG8gaGVscCBmaW5kIGFuIGluaXRpYWwgdmFsdWUKKyAgZG91YmxlIHJlc3VsdCA9IHg7CisgIGlmICh4ID49IDEgJiYgeCA8IDEwKSB7CisgICAgc3RkOjpjb3V0IDw8ICJVc2UgdGhlIHRhYmxlIHRvIGhlbHAgZmluZCBhbiBpbml0aWFsIHZhbHVlICIgPDwgc3RkOjplbmRsOworICAgIHJlc3VsdCA9IHNxcnRUYWJsZVtzdGF0aWNfY2FzdDxpbnQ+KHgpXTsKKyAgfQorCisgIC8vIGRvIHRlbiBpdGVyYXRpb25zCisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgIGlmIChyZXN1bHQgPD0gMCkgeworICAgICAgcmVzdWx0ID0gMC4xOworICAgIH0KKyAgICBkb3VibGUgZGVsdGEgPSB4IC0gKHJlc3VsdCAqIHJlc3VsdCk7CisgICAgcmVzdWx0ID0gcmVzdWx0ICsgMC41ICogZGVsdGEgLyByZXN1bHQ7CisgICAgc3RkOjpjb3V0IDw8ICJDb21wdXRpbmcgc3FydCBvZiAiIDw8IHggPDwgIiB0byBiZSAiIDw8IHJlc3VsdCA8PCBzdGQ6OmVuZGw7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorfQorfQpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS90dXRvcmlhbC9NdWx0aVBhY2thZ2UvTWF0aEZ1bmN0aW9ucy9teXNxcnQuaCBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvbXlzcXJ0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIEhlbHAvZ3VpZGUvdHV0b3JpYWwvTXVsdGlQYWNrYWdlL01hdGhGdW5jdGlvbnMvbXlzcXJ0LmgKcmVuYW1lIHRvIEhlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL01hdGhGdW5jdGlvbnMvbXlzcXJ0LmgKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL1R1dG9yaWFsQ29uZmlnLmguaW4gYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9UdXRvcmlhbENvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNGQ3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi9UdXRvcmlhbENvbmZpZy5oLmluCkBAIC0wLDAgKzEsMyBAQAorLy8gdGhlIGNvbmZpZ3VyZWQgb3B0aW9ucyBhbmQgc2V0dGluZ3MgZm9yIFR1dG9yaWFsCisjZGVmaW5lIFR1dG9yaWFsX1ZFUlNJT05fTUFKT1IgQFR1dG9yaWFsX1ZFUlNJT05fTUFKT1JACisjZGVmaW5lIFR1dG9yaWFsX1ZFUlNJT05fTUlOT1IgQFR1dG9yaWFsX1ZFUlNJT05fTUlOT1JACmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi90dXRvcmlhbC5jeHggYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXAxMi90dXRvcmlhbC5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmNDRkNQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDEyL3R1dG9yaWFsLmN4eApAQCAtMCwwICsxLDI2IEBACisvLyBBIHNpbXBsZSBwcm9ncmFtIHRoYXQgY29tcHV0ZXMgdGhlIHNxdWFyZSByb290IG9mIGEgbnVtYmVyCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiTWF0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlR1dG9yaWFsQ29uZmlnLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCit7CisgIGlmIChhcmdjIDwgMikgeworICAgIC8vIHJlcG9ydCB2ZXJzaW9uCisgICAgc3RkOjpjb3V0IDw8IGFyZ3ZbMF0gPDwgIiBWZXJzaW9uICIgPDwgVHV0b3JpYWxfVkVSU0lPTl9NQUpPUiA8PCAiLiIKKyAgICAgICAgICAgICAgPDwgVHV0b3JpYWxfVkVSU0lPTl9NSU5PUiA8PCBzdGQ6OmVuZGw7CisgICAgc3RkOjpjb3V0IDw8ICJVc2FnZTogIiA8PCBhcmd2WzBdIDw8ICIgbnVtYmVyIiA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIDE7CisgIH0KKworICAvLyBjb252ZXJ0IGlucHV0IHRvIGRvdWJsZQorICBjb25zdCBkb3VibGUgaW5wdXRWYWx1ZSA9IHN0ZDo6c3RvZChhcmd2WzFdKTsKKworICBjb25zdCBkb3VibGUgb3V0cHV0VmFsdWUgPSBtYXRoZnVuY3Rpb25zOjpzcXJ0KGlucHV0VmFsdWUpOworCisgIHN0ZDo6Y291dCA8PCAiVGhlIHNxdWFyZSByb290IG9mICIgPDwgaW5wdXRWYWx1ZSA8PCAiIGlzICIgPDwgb3V0cHV0VmFsdWUKKyAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXA2L01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQgYi9IZWxwL2d1aWRlL3R1dG9yaWFsL1N0ZXA2L01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKaW5kZXggNGJmNjAyNC4uZjY0YzZhYyAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9TdGVwNi9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CisrKyBiL0hlbHAvZ3VpZGUvdHV0b3JpYWwvU3RlcDYvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dApAQCAtOCwxMCArOCwyMCBAQAogCiAjIGRvZXMgdGhpcyBzeXN0ZW0gcHJvdmlkZSB0aGUgbG9nIGFuZCBleHAgZnVuY3Rpb25zPwogaW5jbHVkZShDaGVja1N5bWJvbEV4aXN0cykKLXNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgIm0iKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhsb2cgIm1hdGguaCIgSEFWRV9MT0cpCiBjaGVja19zeW1ib2xfZXhpc3RzKGV4cCAibWF0aC5oIiBIQVZFX0VYUCkKK2lmKE5PVCAoSEFWRV9MT0cgQU5EIEhBVkVfRVhQKSkKKyAgdW5zZXQoSEFWRV9MT0cgQ0FDSEUpCisgIHVuc2V0KEhBVkVfRVhQIENBQ0hFKQorICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICJtIikKKyAgY2hlY2tfc3ltYm9sX2V4aXN0cyhsb2cgIm1hdGguaCIgSEFWRV9MT0cpCisgIGNoZWNrX3N5bWJvbF9leGlzdHMoZXhwICJtYXRoLmgiIEhBVkVfRVhQKQorICBpZihIQVZFX0xPRyBBTkQgSEFWRV9FWFApCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKE1hdGhGdW5jdGlvbnMgUFJJVkFURSBtKQorICBlbmRpZigpCitlbmRpZigpCiAKKyMgYWRkIGNvbXBpbGUgZGVmaW5pdGlvbnMKIGlmKEhBVkVfTE9HIEFORCBIQVZFX0VYUCkKICAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoTWF0aEZ1bmN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklWQVRFICJIQVZFX0xPRyIgIkhBVkVfRVhQIikKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdHV0b3JpYWwvaW5kZXgucnN0IGIvSGVscC9ndWlkZS90dXRvcmlhbC9pbmRleC5yc3QKaW5kZXggZDc0ZDE2MC4uNjY1ZDEyMyAxMDA2NDQKLS0tIGEvSGVscC9ndWlkZS90dXRvcmlhbC9pbmRleC5yc3QKKysrIGIvSGVscC9ndWlkZS90dXRvcmlhbC9pbmRleC5yc3QKQEAgLTQ1LDcgKzQ1LDggQEAKIHZlcnNpb24gbnVtYmVyLiBXaGlsZSB3ZSBjb3VsZCBkbyB0aGlzIGV4Y2x1c2l2ZWx5IGluIHRoZSBzb3VyY2UgY29kZSwgdXNpbmcKIGBgQ01ha2VMaXN0cy50eHRgYCBwcm92aWRlcyBtb3JlIGZsZXhpYmlsaXR5LgogCi1GaXJzdCwgbW9kaWZ5IHRoZSBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSB0byBzZXQgdGhlIHZlcnNpb24gbnVtYmVyLgorRmlyc3QsIG1vZGlmeSB0aGUgYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGUgdG8gdXNlIHRoZSA6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZAordG8gc2V0IHRoZSBwcm9qZWN0IG5hbWUgYW5kIHZlcnNpb24gbnVtYmVyLgogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAyL0NNYWtlTGlzdHMudHh0CiAgIDpsYW5ndWFnZTogY21ha2UKQEAgLTgwLDggKzgxLDggQEAKIE5leHQgbW9kaWZ5IGBgdHV0b3JpYWwuY3h4YGAgdG8gaW5jbHVkZSB0aGUgY29uZmlndXJlZCBoZWFkZXIgZmlsZSwKIGBgVHV0b3JpYWxDb25maWcuaGBgLgogCi1GaW5hbGx5LCBsZXQncyBwcmludCBvdXQgdGhlIHZlcnNpb24gbnVtYmVyIGJ5IHVwZGF0aW5nIGBgdHV0b3JpYWwuY3h4YGAgYXMKLWZvbGxvd3M6CitGaW5hbGx5LCBsZXQncyBwcmludCBvdXQgdGhlIGV4ZWN1dGFibGUgbmFtZSBhbmQgdmVyc2lvbiBudW1iZXIgYnkgdXBkYXRpbmcKK2BgdHV0b3JpYWwuY3h4YGAgYXMgZm9sbG93czoKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwMi90dXRvcmlhbC5jeHgKICAgOmxhbmd1YWdlOiBjKysKQEAgLTEwMiw5ICsxMDMsMTEgQEAKIAogV2Ugd2lsbCBuZWVkIHRvIGV4cGxpY2l0bHkgc3RhdGUgaW4gdGhlIENNYWtlIGNvZGUgdGhhdCBpdCBzaG91bGQgdXNlIHRoZQogY29ycmVjdCBmbGFncy4gVGhlIGVhc2llc3Qgd2F5IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBhIHNwZWNpZmljIEMrKyBzdGFuZGFyZAotaW4gQ01ha2UgaXMgYnkgdXNpbmcgdGhlIGBgQ01BS0VfQ1hYX1NUQU5EQVJEYGAgdmFyaWFibGUuIEZvciB0aGlzIHR1dG9yaWFsLAotc2V0IHRoZSBgYENNQUtFX0NYWF9TVEFOREFSRGBgIHZhcmlhYmxlIGluIHRoZSBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSB0byAxMQotYW5kIGBgQ01BS0VfQ1hYX1NUQU5EQVJEX1JFUVVJUkVEYGAgdG8gVHJ1ZToKK2luIENNYWtlIGlzIGJ5IHVzaW5nIHRoZSA6dmFyaWFibGU6YENNQUtFX0NYWF9TVEFOREFSRGAgdmFyaWFibGUuIEZvciB0aGlzCit0dXRvcmlhbCwgc2V0IHRoZSA6dmFyaWFibGU6YENNQUtFX0NYWF9TVEFOREFSRGAgdmFyaWFibGUgaW4gdGhlCitgYENNYWtlTGlzdHMudHh0YGAgZmlsZSB0byAxMSBhbmQgOnZhcmlhYmxlOmBDTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRURgIHRvCitUcnVlLiBNYWtlIHN1cmUgdG8gYWRkIHRoZSBgYENNQUtFX0NYWF9TVEFOREFSRGBgIGRlY2xhcmF0aW9ucyBhYm92ZSB0aGUgY2FsbAordG8gYGBhZGRfZXhlY3V0YWJsZWBgLgogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAyL0NNYWtlTGlzdHMudHh0CiAgIDpsYW5ndWFnZTogY21ha2UKQEAgLTExMywyMiArMTE2LDMzIEBACiBCdWlsZCBhbmQgVGVzdAogLS0tLS0tLS0tLS0tLS0KIAotUnVuICoqY21ha2UqKiBvciAqKmNtYWtlLWd1aSoqIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAorUnVuIHRoZSA6bWFudWFsOmBjbWFrZSA8Y21ha2UoMSk+YCBleGVjdXRhYmxlIG9yIHRoZQorOm1hbnVhbDpgY21ha2UtZ3VpIDxjbWFrZS1ndWkoMSk+YCB0byBjb25maWd1cmUgdGhlIHByb2plY3QgYW5kIHRoZW4gYnVpbGQgaXQKIHdpdGggeW91ciBjaG9zZW4gYnVpbGQgdG9vbC4KIAogRm9yIGV4YW1wbGUsIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3ZSBjb3VsZCBuYXZpZ2F0ZSB0byB0aGUKLWBgSGVscC9ndWlkZS90dXRvcmlhbGBgIGRpcmVjdG9yeSBvZiB0aGUgQ01ha2Ugc291cmNlIGNvZGUgdHJlZSBhbmQgcnVuIHRoZQotZm9sbG93aW5nIGNvbW1hbmRzOgorYGBIZWxwL2d1aWRlL3R1dG9yaWFsYGAgZGlyZWN0b3J5IG9mIHRoZSBDTWFrZSBzb3VyY2UgY29kZSB0cmVlIGFuZCBjcmVhdGUgYQorYnVpbGQgZGlyZWN0b3J5OgogCiAuLiBjb2RlLWJsb2NrOjogY29uc29sZQogCiAgIG1rZGlyIFN0ZXAxX2J1aWxkCisKK05leHQsIG5hdmlnYXRlIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkgYW5kIHJ1biBDTWFrZSB0byBjb25maWd1cmUgdGhlIHByb2plY3QKK2FuZCBnZW5lcmF0ZSBhIG5hdGl2ZSBidWlsZCBzeXN0ZW06CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKICAgY2QgU3RlcDFfYnVpbGQKICAgY21ha2UgLi4vU3RlcDEKKworVGhlbiBjYWxsIHRoYXQgYnVpbGQgc3lzdGVtIHRvIGFjdHVhbGx5IGNvbXBpbGUvbGluayB0aGUgcHJvamVjdDoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKwogICBjbWFrZSAtLWJ1aWxkIC4KIAotTmF2aWdhdGUgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBUdXRvcmlhbCB3YXMgYnVpbHQgKGxpa2VseSB0aGUgbWFrZSBkaXJlY3RvcnkKLW9yIGEgRGVidWcgb3IgUmVsZWFzZSBidWlsZCBjb25maWd1cmF0aW9uIHN1YmRpcmVjdG9yeSkgYW5kIHJ1biB0aGVzZSBjb21tYW5kczoKK0ZpbmFsbHksIHRyeSB0byB1c2UgdGhlIG5ld2x5IGJ1aWx0IGBgVHV0b3JpYWxgYCB3aXRoIHRoZXNlIGNvbW1hbmRzOgogCiAuLiBjb2RlLWJsb2NrOjogY29uc29sZQogCkBAIC0xNTYsMTEgKzE3MCwxMSBAQAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwMy9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CiAgIDpsYW5ndWFnZTogY21ha2UKIAotVG8gbWFrZSB1c2Ugb2YgdGhlIG5ldyBsaWJyYXJ5IHdlIHdpbGwgYWRkIGFuIGBgYWRkX3N1YmRpcmVjdG9yeWBgIGNhbGwgaW4gdGhlCi10b3AtbGV2ZWwgYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGUgc28gdGhhdCB0aGUgbGlicmFyeSB3aWxsIGdldCBidWlsdC4gV2UgYWRkCi10aGUgbmV3IGxpYnJhcnkgdG8gdGhlIGV4ZWN1dGFibGUsIGFuZCBhZGQgYGBNYXRoRnVuY3Rpb25zYGAgYXMgYW4gaW5jbHVkZQotZGlyZWN0b3J5IHNvIHRoYXQgdGhlIGBgbXFzcXJ0LmhgYCBoZWFkZXIgZmlsZSBjYW4gYmUgZm91bmQuIFRoZSBsYXN0IGZldyBsaW5lcwotb2YgdGhlIHRvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSBzaG91bGQgbm93IGxvb2sgbGlrZToKK1RvIG1ha2UgdXNlIG9mIHRoZSBuZXcgbGlicmFyeSB3ZSB3aWxsIGFkZCBhbiA6Y29tbWFuZDpgYWRkX3N1YmRpcmVjdG9yeWAKK2NhbGwgaW4gdGhlIHRvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSBzbyB0aGF0IHRoZSBsaWJyYXJ5IHdpbGwgZ2V0CitidWlsdC4gV2UgYWRkIHRoZSBuZXcgbGlicmFyeSB0byB0aGUgZXhlY3V0YWJsZSwgYW5kIGFkZCBgYE1hdGhGdW5jdGlvbnNgYCBhcworYW4gaW5jbHVkZSBkaXJlY3Rvcnkgc28gdGhhdCB0aGUgYGBtcXNxcnQuaGBgIGhlYWRlciBmaWxlIGNhbiBiZSBmb3VuZC4gVGhlCitsYXN0IGZldyBsaW5lcyBvZiB0aGUgdG9wLWxldmVsIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlIHNob3VsZCBub3cgbG9vayBsaWtlOgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKIApAQCAtMTgwLDcgKzE5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogCiBOb3cgbGV0IHVzIG1ha2UgdGhlIE1hdGhGdW5jdGlvbnMgbGlicmFyeSBvcHRpb25hbC4gV2hpbGUgZm9yIHRoZSB0dXRvcmlhbAotdGhlcmUgcmVhbGx5IGlzbuKAmXQgYW55IG5lZWQgdG8gZG8gc28sIGZvciBsYXJnZXIgcHJvamVjdHMgdGhpcyBpcyBhIGNvbW1vbgordGhlcmUgcmVhbGx5IGlzbid0IGFueSBuZWVkIHRvIGRvIHNvLCBmb3IgbGFyZ2VyIHByb2plY3RzIHRoaXMgaXMgYSBjb21tb24KIG9jY3VycmVuY2UuIFRoZSBmaXJzdCBzdGVwIGlzIHRvIGFkZCBhbiBvcHRpb24gdG8gdGhlIHRvcC1sZXZlbAogYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGUuCiAKQEAgLTE4OSwxMCArMjAzLDExIEBACiAgIDpzdGFydC1hZnRlcjogIyBzaG91bGQgd2UgdXNlIG91ciBvd24gbWF0aCBmdW5jdGlvbnMKICAgOmVuZC1iZWZvcmU6ICMgYWRkIHRoZSBNYXRoRnVuY3Rpb25zIGxpYnJhcnkKIAotVGhpcyBvcHRpb24gd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIENNYWtlIEdVSSBhbmQgY2NtYWtlIHdpdGggYSBkZWZhdWx0Ci12YWx1ZSBvZiBPTiB0aGF0IGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyLiBUaGlzIHNldHRpbmcgd2lsbCBiZSBzdG9yZWQgaW4KLXRoZSBjYWNoZSBzbyB0aGF0IHRoZSB1c2VyIGRvZXMgbm90IG5lZWQgdG8gc2V0IHRoZSB2YWx1ZSBlYWNoIHRpbWUgdGhleSBydW4KLUNNYWtlIG9uIGEgYnVpbGQgZGlyZWN0b3J5LgorVGhpcyBvcHRpb24gd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIDptYW51YWw6YGNtYWtlLWd1aSA8Y21ha2UtZ3VpKDEpPmAgYW5kCis6bWFudWFsOmBjY21ha2UgPGNjbWFrZSgxKT5gCit3aXRoIGEgZGVmYXVsdCB2YWx1ZSBvZiBPTiB0aGF0IGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyLiBUaGlzIHNldHRpbmcgd2lsbAorYmUgc3RvcmVkIGluIHRoZSBjYWNoZSBzbyB0aGF0IHRoZSB1c2VyIGRvZXMgbm90IG5lZWQgdG8gc2V0IHRoZSB2YWx1ZSBlYWNoCit0aW1lIHRoZXkgcnVuIENNYWtlIG9uIGEgYnVpbGQgZGlyZWN0b3J5LgogCiBUaGUgbmV4dCBjaGFuZ2UgaXMgdG8gbWFrZSBidWlsZGluZyBhbmQgbGlua2luZyB0aGUgTWF0aEZ1bmN0aW9ucyBsaWJyYXJ5CiBjb25kaXRpb25hbC4gVG8gZG8gdGhpcyB3ZSBjaGFuZ2UgdGhlIGVuZCBvZiB0aGUgdG9wLWxldmVsIGBgQ01ha2VMaXN0cy50eHRgYApAQCAtMjA4LDggKzIyMyw5IEBACiBjbGFzc2ljIGFwcHJvYWNoIHdoZW4gZGVhbGluZyB3aXRoIG1hbnkgb3B0aW9uYWwgY29tcG9uZW50cywgd2Ugd2lsbCBjb3ZlcgogdGhlIG1vZGVybiBhcHByb2FjaCBpbiB0aGUgbmV4dCBzdGVwLgogCi1UaGUgY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgY29kZSBhcmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gRmlyc3QsCi1pbiBgYHR1dG9yaWFsLmN4eGBgLCBpbmNsdWRlIHRoZSBgYE1hdGhGdW5jdGlvbnMuaGBgIGhlYWRlciBpZiB3ZSBuZWVkIGl0OgorVGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0byB0aGUgc291cmNlIGNvZGUgYXJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQuCitGaXJzdCwgaW4gYGB0dXRvcmlhbC5jeHhgYCwgaW5jbHVkZSB0aGUgYGBNYXRoRnVuY3Rpb25zLmhgYCBoZWFkZXIgaWYgd2UKK25lZWQgaXQ6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDMvdHV0b3JpYWwuY3h4CiAgIDpsYW5ndWFnZTogYysrCkBAIC0yMzQsMTEgKzI1MCwyMiBAQAogKipFeGVyY2lzZSoqOiBXaHkgaXMgaXQgaW1wb3J0YW50IHRoYXQgd2UgY29uZmlndXJlIGBgVHV0b3JpYWxDb25maWcuaC5pbmBgCiBhZnRlciB0aGUgb3B0aW9uIGZvciBgYFVTRV9NWU1BVEhgYD8gV2hhdCB3b3VsZCBoYXBwZW4gaWYgd2UgaW52ZXJ0ZWQgdGhlIHR3bz8KIAotUnVuICoqY21ha2UqKiBvciAqKmNtYWtlLWd1aSoqIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAorUnVuIHRoZSA6bWFudWFsOmBjbWFrZSAgPGNtYWtlKDEpPmAgZXhlY3V0YWJsZSBvciB0aGUKKzptYW51YWw6YGNtYWtlLWd1aSA8Y21ha2UtZ3VpKDEpPmAgdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0IGFuZCB0aGVuIGJ1aWxkIGl0CiB3aXRoIHlvdXIgY2hvc2VuIGJ1aWxkIHRvb2wuIFRoZW4gcnVuIHRoZSBidWlsdCBUdXRvcmlhbCBleGVjdXRhYmxlLgogCi1Vc2UgY2NtYWtlIG9yIHRoZSBDTWFrZSBHVUkgdG8gdXBkYXRlIHRoZSB2YWx1ZSBvZiBgYFVTRV9NWU1BVEhgYC4gUmVidWlsZCBhbmQKLXJ1biB0aGUgdHV0b3JpYWwgYWdhaW4uIFdoaWNoIGZ1bmN0aW9uIGdpdmVzIGJldHRlciByZXN1bHRzLCBzcXJ0IG9yIG15c3FydD8KK05vdyBsZXQncyB1cGRhdGUgdGhlIHZhbHVlIG9mIGBgVVNFX01ZTUFUSGBgLiBUaGUgZWFzaWVzdCB3YXkgaXMgdG8gdXNlIHRoZQorOm1hbnVhbDpgY21ha2UtZ3VpIDxjbWFrZS1ndWkoMSk+YCBvciAgOm1hbnVhbDpgY2NtYWtlIDxjY21ha2UoMSk+YCBpZiB5b3UncmUKK2luIHRoZSB0ZXJtaW5hbC4gT3IsIGFsdGVybmF0aXZlbHksIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgb3B0aW9uIGZyb20gdGhlCitjb21tYW5kLWxpbmUsIHRyeToKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICBjbWFrZSAuLi9TdGVwMiAtRFVTRV9NWU1BVEg9T0ZGCisKK1JlYnVpbGQgYW5kIHJ1biB0aGUgdHV0b3JpYWwgYWdhaW4uCisKK1doaWNoIGZ1bmN0aW9uIGdpdmVzIGJldHRlciByZXN1bHRzLCBzcXJ0IG9yIG15c3FydD8KIAogQWRkaW5nIFVzYWdlIFJlcXVpcmVtZW50cyBmb3IgTGlicmFyeSAoU3RlcCAzKQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjQ4LDE5ICsyNzUsMjAgQEAKIHByb3BlcnR5IG9mIHRhcmdldHMgaW5zaWRlIENNYWtlLiBUaGUgcHJpbWFyeSBjb21tYW5kcyB0aGF0IGxldmVyYWdlIHVzYWdlCiByZXF1aXJlbWVudHMgYXJlOgogCi0gIC0gYGB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9uc2BgCi0gIC0gYGB0YXJnZXRfY29tcGlsZV9vcHRpb25zYGAKLSAgLSBgYHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzYGAKLSAgLSBgYHRhcmdldF9saW5rX2xpYnJhcmllc2BgCisgIC0gOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zYAorICAtIDpjb21tYW5kOmB0YXJnZXRfY29tcGlsZV9vcHRpb25zYAorICAtIDpjb21tYW5kOmB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc2AKKyAgLSA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfbGlicmFyaWVzYAogCiBMZXQncyByZWZhY3RvciBvdXIgY29kZSBmcm9tIGBBZGRpbmcgYSBMaWJyYXJ5IChTdGVwIDIpYF8gdG8gdXNlIHRoZSBtb2Rlcm4KIENNYWtlIGFwcHJvYWNoIG9mIHVzYWdlIHJlcXVpcmVtZW50cy4gV2UgZmlyc3Qgc3RhdGUgdGhhdCBhbnlib2R5IGxpbmtpbmcgdG8KIE1hdGhGdW5jdGlvbnMgbmVlZHMgdG8gaW5jbHVkZSB0aGUgY3VycmVudCBzb3VyY2UgZGlyZWN0b3J5LCB3aGlsZQotTWF0aEZ1bmN0aW9ucyBpdHNlbGYgZG9lc24ndC4gU28gIHRoaXMgY2FuIGJlY29tZSBhbiBgYElOVEVSRkFDRWBgIHVzYWdlCitNYXRoRnVuY3Rpb25zIGl0c2VsZiBkb2Vzbid0LiBTbyB0aGlzIGNhbiBiZWNvbWUgYW4gYGBJTlRFUkZBQ0VgYCB1c2FnZQogcmVxdWlyZW1lbnQuCiAKIFJlbWVtYmVyIGBgSU5URVJGQUNFYGAgbWVhbnMgdGhpbmdzIHRoYXQgY29uc3VtZXJzIHJlcXVpcmUgYnV0IHRoZSBwcm9kdWNlcgotZG9lc24ndC4gQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gdGhlIGVuZCBvZiBgYE1hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHRgYDoKK2RvZXNuJ3QuIEFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZSBlbmQgb2YKK2BgTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dGBgOgogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXA0L01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKICAgOmxhbmd1YWdlOiBjbWFrZQpAQCAtMjgxLDkgKzMwOSwxMCBAQAogICA6bGFuZ3VhZ2U6IGNtYWtlCiAgIDpzdGFydC1hZnRlcjogIyBzbyB0aGF0IHdlIHdpbGwgZmluZCBUdXRvcmlhbENvbmZpZy5oCiAKLU9uY2UgdGhpcyBpcyBkb25lLCBydW4gKipjbWFrZSoqIG9yICoqY21ha2UtZ3VpKiogdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0Ci1hbmQgdGhlbiBidWlsZCBpdCB3aXRoIHlvdXIgY2hvc2VuIGJ1aWxkIHRvb2wgb3IgYnkgdXNpbmcgYGBjbWFrZSAtLWJ1aWxkIC5gYAotZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorT25jZSB0aGlzIGlzIGRvbmUsIHJ1biB0aGUgOm1hbnVhbDpgY21ha2UgIDxjbWFrZSgxKT5gIGV4ZWN1dGFibGUgb3IgdGhlCis6bWFudWFsOmBjbWFrZS1ndWkgPGNtYWtlLWd1aSgxKT5gIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAord2l0aCB5b3VyIGNob3NlbiBidWlsZCB0b29sIG9yIGJ5IHVzaW5nIGBgY21ha2UgLS1idWlsZCAuYGAgZnJvbSB0aGUgYnVpbGQKK2RpcmVjdG9yeS4KIAogSW5zdGFsbGluZyBhbmQgVGVzdGluZyAoU3RlcCA0KQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzEyLDIwICszNDEsMzIgQEAKIAogVGhhdCBpcyBhbGwgdGhhdCBpcyBuZWVkZWQgdG8gY3JlYXRlIGEgYmFzaWMgbG9jYWwgaW5zdGFsbCBvZiB0aGUgdHV0b3JpYWwuCiAKLVJ1biAqKmNtYWtlKiogb3IgKipjbWFrZS1ndWkqKiB0byBjb25maWd1cmUgdGhlIHByb2plY3QgYW5kIHRoZW4gYnVpbGQgaXQKLXdpdGggeW91ciBjaG9zZW4gYnVpbGQgdG9vbC4gUnVuIHRoZSBpbnN0YWxsIHN0ZXAgYnkgdHlwaW5nCi1gYGNtYWtlIC0taW5zdGFsbCAuYGAgKGludHJvZHVjZWQgaW4gMy4xNSwgb2xkZXIgdmVyc2lvbnMgb2YgQ01ha2UgbXVzdCB1c2UKLWBgbWFrZSBpbnN0YWxsYGApIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgYnVpbGQgdGhlIGBgSU5TVEFMTGBgIHRhcmdldCBmcm9tCi1hbiBJREUuIFRoaXMgd2lsbCBpbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgZmlsZXMsIGxpYnJhcmllcywgYW5kCi1leGVjdXRhYmxlcy4KK05vdyBydW4gdGhlIDptYW51YWw6YGNtYWtlICA8Y21ha2UoMSk+YCBleGVjdXRhYmxlIG9yIHRoZQorOm1hbnVhbDpgY21ha2UtZ3VpIDxjbWFrZS1ndWkoMSk+YCB0byBjb25maWd1cmUgdGhlIHByb2plY3QgYW5kIHRoZW4gYnVpbGQgaXQKK3dpdGggeW91ciBjaG9zZW4gYnVpbGQgdG9vbC4KIAotVGhlIENNYWtlIHZhcmlhYmxlIGBgQ01BS0VfSU5TVEFMTF9QUkVGSVhgYCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgcm9vdCBvZgotd2hlcmUgdGhlIGZpbGVzIHdpbGwgYmUgaW5zdGFsbGVkLiBJZiB1c2luZyBgYGNtYWtlIC0taW5zdGFsbGBgIGEgY3VzdG9tCi1pbnN0YWxsYXRpb24gZGlyZWN0b3J5IGNhbiBiZSBnaXZlbiB2aWEgYGAtLXByZWZpeGBgIGFyZ3VtZW50LiBGb3IKLW11bHRpLWNvbmZpZ3VyYXRpb24gdG9vbHMsIHVzZSB0aGUgYGAtLWNvbmZpZ2BgIGFyZ3VtZW50IHRvIHNwZWNpZnkgdGhlCi1jb25maWd1cmF0aW9uLgorVGhlbiBydW4gdGhlIGluc3RhbGwgc3RlcCBieSB1c2luZyB0aGUgYGBpbnN0YWxsYGAgb3B0aW9uIG9mIHRoZQorOm1hbnVhbDpgY21ha2UgIDxjbWFrZSgxKT5gIGNvbW1hbmQgKGludHJvZHVjZWQgaW4gMy4xNSwgb2xkZXIgdmVyc2lvbnMgb2YKK0NNYWtlIG11c3QgdXNlIGBgbWFrZSBpbnN0YWxsYGApIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gRm9yCittdWx0aS1jb25maWd1cmF0aW9uIHRvb2xzLCBkb24ndCBmb3JnZXQgdG8gdXNlIHRoZSBgYC0tY29uZmlnYGAgYXJndW1lbnQgdG8KK3NwZWNpZnkgdGhlIGNvbmZpZ3VyYXRpb24uIElmIHVzaW5nIGFuIElERSwgc2ltcGx5IGJ1aWxkIHRoZSBgYElOU1RBTExgYAordGFyZ2V0LiBUaGlzIHN0ZXAgd2lsbCBpbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgZmlsZXMsIGxpYnJhcmllcywgYW5kCitleGVjdXRhYmxlcy4gRm9yIGV4YW1wbGU6CiAKLVZlcmlmeSB0aGF0IHRoZSBpbnN0YWxsZWQgVHV0b3JpYWwgcnVucy4KKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgY21ha2UgLS1pbnN0YWxsIC4KKworVGhlIENNYWtlIHZhcmlhYmxlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZQorcm9vdCBvZiB3aGVyZSB0aGUgZmlsZXMgd2lsbCBiZSBpbnN0YWxsZWQuIElmIHVzaW5nIHRoZSBgYGNtYWtlIC0taW5zdGFsbGBgCitjb21tYW5kLCB0aGUgaW5zdGFsbGF0aW9uIHByZWZpeCBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlIGBgLS1wcmVmaXhgYAorYXJndW1lbnQuIEZvciBleGFtcGxlOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgIGNtYWtlIC0taW5zdGFsbCAuIC0tcHJlZml4ICIvaG9tZS9teXVzZXIvaW5zdGFsbGRpciIKKworTmF2aWdhdGUgdG8gdGhlIGluc3RhbGwgZGlyZWN0b3J5IGFuZCB2ZXJpZnkgdGhhdCB0aGUgaW5zdGFsbGVkIFR1dG9yaWFsIHJ1bnMuCiAKIFRlc3RpbmcgU3VwcG9ydAogLS0tLS0tLS0tLS0tLS0tCkBAIC0zMzksMjUgKzM4MCwyNSBAQAogICA6c3RhcnQtYWZ0ZXI6ICMgZW5hYmxlIHRlc3RpbmcKIAogVGhlIGZpcnN0IHRlc3Qgc2ltcGx5IHZlcmlmaWVzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHJ1bnMsIGRvZXMgbm90IHNlZ2ZhdWx0IG9yCi1vdGhlcndpc2UgY3Jhc2gsIGFuZCBoYXMgYSB6ZXJvIHJldHVybiB2YWx1ZS4gVGhpcyBpcyB0aGUgYmFzaWMgZm9ybSBvZiBhIENUZXN0Ci10ZXN0Lgorb3RoZXJ3aXNlIGNyYXNoLCBhbmQgaGFzIGEgemVybyByZXR1cm4gdmFsdWUuIFRoaXMgaXMgdGhlIGJhc2ljIGZvcm0gb2YgYQorQ1Rlc3QgdGVzdC4KIAotVGhlIG5leHQgdGVzdCBtYWtlcyB1c2Ugb2YgdGhlIGBgUEFTU19SRUdVTEFSX0VYUFJFU1NJT05gYCB0ZXN0IHByb3BlcnR5IHRvCi12ZXJpZnkgdGhhdCB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0IGNvbnRhaW5zIGNlcnRhaW4gc3RyaW5ncy4gSW4gdGhpcyBjYXNlLAotdmVyaWZ5aW5nIHRoYXQgdGhlIHVzYWdlIG1lc3NhZ2UgaXMgcHJpbnRlZCB3aGVuIGFuIGluY29ycmVjdCBudW1iZXIgb2YKLWFyZ3VtZW50cyBhcmUgcHJvdmlkZWQuCitUaGUgbmV4dCB0ZXN0IG1ha2VzIHVzZSBvZiB0aGUgOnByb3BfdGVzdDpgUEFTU19SRUdVTEFSX0VYUFJFU1NJT05gIHRlc3QKK3Byb3BlcnR5IHRvIHZlcmlmeSB0aGF0IHRoZSBvdXRwdXQgb2YgdGhlIHRlc3QgY29udGFpbnMgY2VydGFpbiBzdHJpbmdzLiBJbgordGhpcyBjYXNlLCB2ZXJpZnlpbmcgdGhhdCB0aGUgdXNhZ2UgbWVzc2FnZSBpcyBwcmludGVkIHdoZW4gYW4gaW5jb3JyZWN0IG51bWJlcgorb2YgYXJndW1lbnRzIGFyZSBwcm92aWRlZC4KIAogTGFzdGx5LCB3ZSBoYXZlIGEgZnVuY3Rpb24gY2FsbGVkIGBgZG9fdGVzdGBgIHRoYXQgcnVucyB0aGUgYXBwbGljYXRpb24gYW5kCiB2ZXJpZmllcyB0aGF0IHRoZSBjb21wdXRlZCBzcXVhcmUgcm9vdCBpcyBjb3JyZWN0IGZvciBnaXZlbiBpbnB1dC4gRm9yIGVhY2gKIGludm9jYXRpb24gb2YgYGBkb190ZXN0YGAsIGFub3RoZXIgdGVzdCBpcyBhZGRlZCB0byB0aGUgcHJvamVjdCB3aXRoIGEgbmFtZSwKIGlucHV0LCBhbmQgZXhwZWN0ZWQgcmVzdWx0cyBiYXNlZCBvbiB0aGUgcGFzc2VkIGFyZ3VtZW50cy4KIAotUmVidWlsZCB0aGUgYXBwbGljYXRpb24gYW5kIHRoZW4gY2QgdG8gdGhlIGJpbmFyeSBkaXJlY3RvcnkgYW5kIHJ1bgotYGBjdGVzdCAtTmBgIGFuZCBgYGN0ZXN0IC1WVmBgLiBGb3IgbXVsdGktY29uZmlnIGdlbmVyYXRvcnMgKGUuZy4gVmlzdWFsCi1TdHVkaW8pLCB0aGUgY29uZmlndXJhdGlvbiB0eXBlIG11c3QgYmUgc3BlY2lmaWVkLiBUbyBydW4gdGVzdHMgaW4gRGVidWcgbW9kZSwKLWZvciBleGFtcGxlLCB1c2UgYGBjdGVzdCAtQyBEZWJ1ZyAtVlZgYCBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkgKG5vdCB0aGUKLURlYnVnIHN1YmRpcmVjdG9yeSEpLiBBbHRlcm5hdGl2ZWx5LCBidWlsZCB0aGUgYGBSVU5fVEVTVFNgYCB0YXJnZXQgZnJvbSB0aGUKLUlERS4KK1JlYnVpbGQgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGVuIGNkIHRvIHRoZSBiaW5hcnkgZGlyZWN0b3J5IGFuZCBydW4gdGhlCis6bWFudWFsOmBjdGVzdCA8Y3Rlc3QoMSk+YCBleGVjdXRhYmxlOiBgYGN0ZXN0IC1OYGAgYW5kIGBgY3Rlc3QgLVZWYGAuIEZvcgorbXVsdGktY29uZmlnIGdlbmVyYXRvcnMgKGUuZy4gVmlzdWFsIFN0dWRpbyksIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgbXVzdCBiZQorc3BlY2lmaWVkLiBUbyBydW4gdGVzdHMgaW4gRGVidWcgbW9kZSwgZm9yIGV4YW1wbGUsIHVzZSBgYGN0ZXN0IC1DIERlYnVnIC1WVmBgCitmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkgKG5vdCB0aGUgRGVidWcgc3ViZGlyZWN0b3J5ISkuIEFsdGVybmF0aXZlbHksIGJ1aWxkCit0aGUgYGBSVU5fVEVTVFNgYCB0YXJnZXQgZnJvbSB0aGUgSURFLgogCiBBZGRpbmcgU3lzdGVtIEludHJvc3BlY3Rpb24gKFN0ZXAgNSkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzcwLDE0ICs0MTEsMTggQEAKIAogSWYgdGhlIHBsYXRmb3JtIGhhcyBgYGxvZ2BgIGFuZCBgYGV4cGBgIHRoZW4gd2Ugd2lsbCB1c2UgdGhlbSB0byBjb21wdXRlIHRoZQogc3F1YXJlIHJvb3QgaW4gdGhlIGBgbXlzcXJ0YGAgZnVuY3Rpb24uIFdlIGZpcnN0IHRlc3QgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YKLXRoZXNlIGZ1bmN0aW9ucyB1c2luZyB0aGUgYGBDaGVja1N5bWJvbEV4aXN0c2BgIG1vZHVsZSBpbiB0aGUgdG9wLWxldmVsCi1gYENNYWtlTGlzdHMudHh0YGAuIFdlJ3JlIGdvaW5nIHRvIHVzZSB0aGUgbmV3IGRlZmluZXMgaW4KLWBgVHV0b3JpYWxDb25maWcuaC5pbmBgLCBzbyBiZSBzdXJlIHRvIHNldCB0aGVtIGJlZm9yZSB0aGF0IGZpbGUgaXMgY29uZmlndXJlZC4KK3RoZXNlIGZ1bmN0aW9ucyB1c2luZyB0aGUgOm1vZHVsZTpgQ2hlY2tTeW1ib2xFeGlzdHNgIG1vZHVsZSBpbiB0aGUgdG9wLWxldmVsCitgYENNYWtlTGlzdHMudHh0YGAuIE9uIHNvbWUgcGxhdGZvcm1zLCB3ZSB3aWxsIG5lZWQgdG8gbGluayB0byB0aGUgbSBsaWJyYXJ5LgorSWYgYGBsb2dgYCBhbmQgYGBleHBgYCBhcmUgbm90IGluaXRpYWxseSBmb3VuZCwgcmVxdWlyZSB0aGUgbSBsaWJyYXJ5IGFuZCB0cnkKK2FnYWluLgorCitXZSdyZSBnb2luZyB0byB1c2UgdGhlIG5ldyBkZWZpbmVzIGluIGBgVHV0b3JpYWxDb25maWcuaC5pbmBgLCBzbyBiZSBzdXJlIHRvCitzZXQgdGhlbSBiZWZvcmUgdGhhdCBmaWxlIGlzIGNvbmZpZ3VyZWQuCiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDYvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAogICA6bGFuZ3VhZ2U6IGNtYWtlCiAgIDpzdGFydC1hZnRlcjogIyBkb2VzIHRoaXMgc3lzdGVtIHByb3ZpZGUgdGhlIGxvZyBhbmQgZXhwIGZ1bmN0aW9ucz8KLSAgOmVuZC1iZWZvcmU6IGlmKEhBVkVfTE9HIEFORCBIQVZFX0VYUCkKKyAgOmVuZC1iZWZvcmU6ICMgYWRkIGNvbXBpbGUgZGVmaW5pdGlvbnMKIAogTm93IGxldCdzIGFkZCB0aGVzZSBkZWZpbmVzIHRvIGBgVHV0b3JpYWxDb25maWcuaC5pbmBgIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtCiBmcm9tIGBgbXlzcXJ0LmN4eGBgOgpAQCAtMzg4LDIyICs0MzMsMjkgQEAKICAgI2NtYWtlZGVmaW5lIEhBVkVfTE9HCiAgICNjbWFrZWRlZmluZSBIQVZFX0VYUAogCi1Nb2RpZnkgYGBteXNxcnQuY3h4YGAgdG8gaW5jbHVkZSBjbWF0aC4gTmV4dCwgaW4gdGhhdCBzYW1lIGZpbGUgaW4gdGhlCi1gYG15c3FydGBgIGZ1bmN0aW9uIHdlIGNhbiBwcm92aWRlIGFuIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbgotYGBsb2dgYCBhbmQgYGBleHBgYCBpZiB0aGV5IGFyZSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSB1c2luZyB0aGUgZm9sbG93aW5nCi1jb2RlIChkb24ndCBmb3JnZXQgdGhlIGBgI2VuZGlmYGAgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzdWx0ISk6CitJZiBgYGxvZ2BgIGFuZCBgYGV4cGBgIGFyZSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSwgdGhlbiB3ZSB3aWxsIHVzZSB0aGVtIHRvCitjb21wdXRlIHRoZSBzcXVhcmUgcm9vdCBpbiB0aGUgYGBteXNxcnRgYCBmdW5jdGlvbi4gQWRkIHRoZSBmb2xsb3dpbmcgY29kZSB0bwordGhlIGBgbXlzcXJ0YGAgZnVuY3Rpb24gaW4gYGBNYXRoRnVuY3Rpb25zL215c3FydC5jeHhgYCAoZG9uJ3QgZm9yZ2V0IHRoZQorYGAjZW5kaWZgYCBiZWZvcmUgcmV0dXJuaW5nIHRoZSByZXN1bHQhKToKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwNi9NYXRoRnVuY3Rpb25zL215c3FydC5jeHgKICAgOmxhbmd1YWdlOiBjKysKICAgOnN0YXJ0LWFmdGVyOiAvLyBpZiB3ZSBoYXZlIGJvdGggbG9nIGFuZCBleHAgdGhlbiB1c2UgdGhlbQogICA6ZW5kLWJlZm9yZTogLy8gZG8gdGVuIGl0ZXJhdGlvbnMKIAotUnVuICoqY21ha2UqKiBvciAqKmNtYWtlLWd1aSoqIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAorV2Ugd2lsbCBhbHNvIG5lZWQgdG8gbW9kaWZ5IGBgbXlzcXJ0LmN4eGBgIHRvIGluY2x1ZGUgYGBjbWF0aGBgLgorCisuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXA2L01hdGhGdW5jdGlvbnMvbXlzcXJ0LmN4eAorICA6bGFuZ3VhZ2U6IGMrKworICA6ZW5kLWJlZm9yZTogI2luY2x1ZGUgPGlvc3RyZWFtPgorCitSdW4gdGhlIDptYW51YWw6YGNtYWtlICA8Y21ha2UoMSk+YCBleGVjdXRhYmxlIG9yIHRoZQorOm1hbnVhbDpgY21ha2UtZ3VpIDxjbWFrZS1ndWkoMSk+YCB0byBjb25maWd1cmUgdGhlIHByb2plY3QgYW5kIHRoZW4gYnVpbGQgaXQKIHdpdGggeW91ciBjaG9zZW4gYnVpbGQgdG9vbCBhbmQgcnVuIHRoZSBUdXRvcmlhbCBleGVjdXRhYmxlLgogCiBZb3Ugd2lsbCBub3RpY2UgdGhhdCB3ZSdyZSBub3QgdXNpbmcgYGBsb2dgYCBhbmQgYGBleHBgYCwgZXZlbiBpZiB3ZSB0aGluayB0aGV5Ci1zaG91bGQgYmUgYXZhaWxhYmxlLiBXZSBzaG91bGQgcmVhbGl6ZSBxdWlja2x5IHRoYXQgd2UgaGF2ZSBmb3Jnb3R0ZW4gdG8gaW5jbHVkZQotYGBUdXRvcmlhbENvbmZpZy5oYGAgaW4gYGBteXNxcnQuY3h4YGAuCitzaG91bGQgYmUgYXZhaWxhYmxlLiBXZSBzaG91bGQgcmVhbGl6ZSBxdWlja2x5IHRoYXQgd2UgaGF2ZSBmb3Jnb3R0ZW4gdG8KK2luY2x1ZGUgYGBUdXRvcmlhbENvbmZpZy5oYGAgaW4gYGBteXNxcnQuY3h4YGAuCiAKIFdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSBgYE1hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHRgYCBzbyBgYG15c3FydC5jeHhgYAoga25vd3Mgd2hlcmUgdGhpcyBmaWxlIGlzIGxvY2F0ZWQ6CkBAIC00MTUsMTAgKzQ2NywxMCBAQAogICAgICAgICAgICAgUFJJVkFURSAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgICAgICAgICAgICApCiAKLUFmdGVyIG1ha2luZyB0aGlzIHVwZGF0ZSwgZ28gYWhlYWQgYW5kIGJ1aWxkIHRoZSBwcm9qZWN0IGFnYWluIGFuZCBydW4gdGhlIGJ1aWx0Ci1UdXRvcmlhbCBleGVjdXRhYmxlLiBJZiBgYGxvZ2BgIGFuZCBgYGV4cGBgIGFyZSBzdGlsbCBub3QgYmVpbmcgdXNlZCwgb3BlbiB0aGUKLWdlbmVyYXRlZCBgYFR1dG9yaWFsQ29uZmlnLmhgYCBmaWxlIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4gTWF5YmUgdGhleSBhcmVuJ3QKLWF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBzeXN0ZW0/CitBZnRlciBtYWtpbmcgdGhpcyB1cGRhdGUsIGdvIGFoZWFkIGFuZCBidWlsZCB0aGUgcHJvamVjdCBhZ2FpbiBhbmQgcnVuIHRoZQorYnVpbHQgVHV0b3JpYWwgZXhlY3V0YWJsZS4gSWYgYGBsb2dgYCBhbmQgYGBleHBgYCBhcmUgc3RpbGwgbm90IGJlaW5nIHVzZWQsCitvcGVuIHRoZSBnZW5lcmF0ZWQgYGBUdXRvcmlhbENvbmZpZy5oYGAgZmlsZSBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuIE1heWJlCit0aGV5IGFyZW4ndCBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgc3lzdGVtPwogCiBXaGljaCBmdW5jdGlvbiBnaXZlcyBiZXR0ZXIgcmVzdWx0cyBub3csIHNxcnQgb3IgbXlzcXJ0PwogCkBAIC00MjcsNyArNDc5LDcgQEAKIAogSXMgdGhlcmUgYSBiZXR0ZXIgcGxhY2UgZm9yIHVzIHRvIHNhdmUgdGhlIGBgSEFWRV9MT0dgYCBhbmQgYGBIQVZFX0VYUGBgIHZhbHVlcwogb3RoZXIgdGhhbiBpbiBgYFR1dG9yaWFsQ29uZmlnLmhgYD8gTGV0J3MgdHJ5IHRvIHVzZQotYGB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9uc2BgLgorOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zYC4KIAogRmlyc3QsIHJlbW92ZSB0aGUgZGVmaW5lcyBmcm9tIGBgVHV0b3JpYWxDb25maWcuaC5pbmBgLiBXZSBubyBsb25nZXIgbmVlZCB0bwogaW5jbHVkZSBgYFR1dG9yaWFsQ29uZmlnLmhgYCBmcm9tIGBgbXlzcXJ0LmN4eGBgIG9yIHRoZSBleHRyYSBpbmNsdWRlIGluCkBAIC00NjAsOCArNTEyLDggQEAKIGBgSEFWRV9FWFBgYCBmcm9tIGBgbXlzcXJ0LmN4eGBgLiBBdCB0aGUgc2FtZSB0aW1lLCB3ZSBjYW4gcmVtb3ZlCiA6Y29kZTpgI2luY2x1ZGUgPGNtYXRoPmAuCiAKLUluIHRoZSBgYE1hdGhGdW5jdGlvbnNgYCBzdWJkaXJlY3RvcnksIGEgbmV3IHNvdXJjZSBmaWxlIG5hbWVkIGBgTWFrZVRhYmxlLmN4eGBgCi1oYXMgYmVlbiBwcm92aWRlZCB0byBnZW5lcmF0ZSB0aGUgdGFibGUuCitJbiB0aGUgYGBNYXRoRnVuY3Rpb25zYGAgc3ViZGlyZWN0b3J5LCBhIG5ldyBzb3VyY2UgZmlsZSBuYW1lZAorYGBNYWtlVGFibGUuY3h4YGAgaGFzIGJlZW4gcHJvdmlkZWQgdG8gZ2VuZXJhdGUgdGhlIHRhYmxlLgogCiBBZnRlciByZXZpZXdpbmcgdGhlIGZpbGUsIHdlIGNhbiBzZWUgdGhhdCB0aGUgdGFibGUgaXMgcHJvZHVjZWQgYXMgdmFsaWQgQysrCiBjb2RlIGFuZCB0aGF0IHRoZSBvdXRwdXQgZmlsZW5hbWUgaXMgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LgpAQCAtNTAwLDYgKzU1Miw3IEBACiBkaXJlY3RvcmllcyBzbyB0aGF0IGBgVGFibGUuaGBgIGNhbiBiZSBmb3VuZCBhbmQgaW5jbHVkZWQgYnkgYGBteXNxcnQuY3h4YGAuCiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDcvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAorICA6bGFuZ3VhZ2U6IGNtYWtlCiAgIDpzdGFydC1hZnRlcjogIyBzdGF0ZSB0aGF0IHdlIGRlcGVuZCBvbiBvdXIgYmluCiAgIDplbmQtYmVmb3JlOiAjIGluc3RhbGwgcnVsZXMKIApAQCAtNTEwLDcgKzU2Myw4IEBACiAgIDpsYW5ndWFnZTogYysrCiAgIDpzdGFydC1hZnRlcjogLy8gYSBoYWNrIHNxdWFyZSByb290IGNhbGN1bGF0aW9uIHVzaW5nIHNpbXBsZSBvcGVyYXRpb25zCiAKLVJ1biAqKmNtYWtlKiogb3IgKipjbWFrZS1ndWkqKiB0byBjb25maWd1cmUgdGhlIHByb2plY3QgYW5kIHRoZW4gYnVpbGQgaXQKK1J1biB0aGUgOm1hbnVhbDpgY21ha2UgIDxjbWFrZSgxKT5gIGV4ZWN1dGFibGUgb3IgdGhlCis6bWFudWFsOmBjbWFrZS1ndWkgPGNtYWtlLWd1aSgxKT5gIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCBhbmQgdGhlbiBidWlsZCBpdAogd2l0aCB5b3VyIGNob3NlbiBidWlsZCB0b29sLgogCiBXaGVuIHRoaXMgcHJvamVjdCBpcyBidWlsdCBpdCB3aWxsIGZpcnN0IGJ1aWxkIHRoZSBgYE1ha2VUYWJsZWBgIGV4ZWN1dGFibGUuCkBAIC01MzAsMjYgKzU4NCwyOCBAQAogaW5zdGFsbGluZyB0aGUgYmluYXJpZXMgdGhhdCB3ZSBoYWQgYnVpbHQgZnJvbSB0aGUgc291cmNlIGNvZGUuIEluIHRoaXMKIGV4YW1wbGUgd2Ugd2lsbCBiZSBidWlsZGluZyBpbnN0YWxsYXRpb24gcGFja2FnZXMgdGhhdCBzdXBwb3J0IGJpbmFyeQogaW5zdGFsbGF0aW9ucyBhbmQgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBUbyBhY2NvbXBsaXNoIHRoaXMgd2Ugd2lsbCB1c2UKLUNQYWNrIHRvIGNyZWF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBpbnN0YWxsZXJzLiBTcGVjaWZpY2FsbHkgd2UgbmVlZCB0byBhZGQKLWEgZmV3IGxpbmVzIHRvIHRoZSBib3R0b20gb2Ygb3VyIHRvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGAgZmlsZS4KK0NQYWNrIHRvIGNyZWF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBpbnN0YWxsZXJzLiBTcGVjaWZpY2FsbHkgd2UgbmVlZCB0byBhZGQgYQorZmV3IGxpbmVzIHRvIHRoZSBib3R0b20gb2Ygb3VyIHRvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGAgZmlsZS4KIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwOC9DTWFrZUxpc3RzLnR4dAogICA6bGFuZ3VhZ2U6IGNtYWtlCiAgIDpzdGFydC1hZnRlcjogIyBzZXR1cCBpbnN0YWxsZXIKIAogVGhhdCBpcyBhbGwgdGhlcmUgaXMgdG8gaXQuIFdlIHN0YXJ0IGJ5IGluY2x1ZGluZwotYGBJbnN0YWxsUmVxdWlyZWRTeXN0ZW1MaWJyYXJpZXNgYC4gVGhpcyBtb2R1bGUgd2lsbCBpbmNsdWRlIGFueSBydW50aW1lCi1saWJyYXJpZXMgdGhhdCBhcmUgbmVlZGVkIGJ5IHRoZSBwcm9qZWN0IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4gTmV4dCB3ZQotc2V0IHNvbWUgQ1BhY2sgdmFyaWFibGVzIHRvIHdoZXJlIHdlIGhhdmUgc3RvcmVkIHRoZSBsaWNlbnNlIGFuZCB2ZXJzaW9uCis6bW9kdWxlOmBJbnN0YWxsUmVxdWlyZWRTeXN0ZW1MaWJyYXJpZXNgLiBUaGlzIG1vZHVsZSB3aWxsIGluY2x1ZGUgYW55IHJ1bnRpbWUKK2xpYnJhcmllcyB0aGF0IGFyZSBuZWVkZWQgYnkgdGhlIHByb2plY3QgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBOZXh0IHdlIHNldAorc29tZSBDUGFjayB2YXJpYWJsZXMgdG8gd2hlcmUgd2UgaGF2ZSBzdG9yZWQgdGhlIGxpY2Vuc2UgYW5kIHZlcnNpb24KIGluZm9ybWF0aW9uIGZvciB0aGlzIHByb2plY3QuIFRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIHdhcyBzZXQgZWFybGllciBpbiB0aGlzCiB0dXRvcmlhbCBhbmQgdGhlIGBgbGljZW5zZS50eHRgYCBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgdG9wLWxldmVsIHNvdXJjZQogZGlyZWN0b3J5IGZvciB0aGlzIHN0ZXAuCiAKLUZpbmFsbHkgd2UgaW5jbHVkZSB0aGUgQ1BhY2sgbW9kdWxlIHdoaWNoIHdpbGwgdXNlIHRoZXNlIHZhcmlhYmxlcyBhbmQgc29tZQotb3RoZXIgcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBzeXN0ZW0gdG8gc2V0dXAgYW4gaW5zdGFsbGVyLgorRmluYWxseSB3ZSBpbmNsdWRlIHRoZSA6bW9kdWxlOmBDUGFjayBtb2R1bGUgPENQYWNrPmAgd2hpY2ggd2lsbCB1c2UgdGhlc2UKK3ZhcmlhYmxlcyBhbmQgc29tZSBvdGhlciBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IHN5c3RlbSB0byBzZXR1cCBhbgoraW5zdGFsbGVyLgogCi1UaGUgbmV4dCBzdGVwIGlzIHRvIGJ1aWxkIHRoZSBwcm9qZWN0IGluIHRoZSB1c3VhbCBtYW5uZXIgYW5kIHRoZW4gcnVuCi1DUGFjayBvbiBpdC4gVG8gYnVpbGQgYSBiaW5hcnkgZGlzdHJpYnV0aW9uLCBmcm9tIHRoZSBiaW5hcnkgZGlyZWN0b3J5IHJ1bjoKK1RoZSBuZXh0IHN0ZXAgaXMgdG8gYnVpbGQgdGhlIHByb2plY3QgaW4gdGhlIHVzdWFsIG1hbm5lciBhbmQgdGhlbiBydW4gdGhlCis6bWFudWFsOmBjcGFjayA8Y3BhY2soMSk+YCBleGVjdXRhYmxlLiBUbyBidWlsZCBhIGJpbmFyeSBkaXN0cmlidXRpb24sIGZyb20gdGhlCitiaW5hcnkgZGlyZWN0b3J5IHJ1bjoKIAogLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKIApAQCAtNTcxLDE2ICs2MjcsMTcgQEAKIEFsdGVybmF0aXZlbHksIHJ1biBgYG1ha2UgcGFja2FnZWBgIG9yIHJpZ2h0IGNsaWNrIHRoZSBgYFBhY2thZ2VgYCB0YXJnZXQgYW5kCiBgYEJ1aWxkIFByb2plY3RgYCBmcm9tIGFuIElERS4KIAotUnVuIHRoZSBpbnN0YWxsZXIgZm91bmQgaW4gdGhlIGJpbmFyeSBkaXJlY3RvcnkuIFRoZW4gcnVuIHRoZQotaW5zdGFsbGVkIGV4ZWN1dGFibGUgYW5kIHZlcmlmeSB0aGF0IGl0IHdvcmtzLgorUnVuIHRoZSBpbnN0YWxsZXIgZm91bmQgaW4gdGhlIGJpbmFyeSBkaXJlY3RvcnkuIFRoZW4gcnVuIHRoZSBpbnN0YWxsZWQKK2V4ZWN1dGFibGUgYW5kIHZlcmlmeSB0aGF0IGl0IHdvcmtzLgogCiBBZGRpbmcgU3VwcG9ydCBmb3IgYSBEYXNoYm9hcmQgKFN0ZXAgOCkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1BZGRpbmcgc3VwcG9ydCBmb3Igc3VibWl0dGluZyBvdXIgdGVzdCByZXN1bHRzIHRvIGEgZGFzaGJvYXJkIGlzIHZlcnkgZWFzeS4gV2UKK0FkZGluZyBzdXBwb3J0IGZvciBzdWJtaXR0aW5nIG91ciB0ZXN0IHJlc3VsdHMgdG8gYSBkYXNoYm9hcmQgaXMgc2ltcGxlLiBXZQogYWxyZWFkeSBkZWZpbmVkIGEgbnVtYmVyIG9mIHRlc3RzIGZvciBvdXIgcHJvamVjdCBpbiBgVGVzdGluZyBTdXBwb3J0YF8uIE5vdyB3ZQoganVzdCBoYXZlIHRvIHJ1biB0aG9zZSB0ZXN0cyBhbmQgc3VibWl0IHRoZW0gdG8gYSBkYXNoYm9hcmQuIFRvIGluY2x1ZGUgc3VwcG9ydAotZm9yIGRhc2hib2FyZHMgd2UgaW5jbHVkZSB0aGUgQ1Rlc3QgbW9kdWxlIGluIG91ciB0b3AtbGV2ZWwgYGBDTWFrZUxpc3RzLnR4dGBgLgorZm9yIGRhc2hib2FyZHMgd2UgaW5jbHVkZSB0aGUgOm1vZHVsZTpgQ1Rlc3RgIG1vZHVsZSBpbiBvdXIgdG9wLWxldmVsCitgYENNYWtlTGlzdHMudHh0YGAuCiAKIFJlcGxhY2U6CiAKQEAgLTU5Niw4ICs2NTMsOCBAQAogICAjIGVuYWJsZSBkYXNoYm9hcmQgc2NyaXB0aW5nCiAgIGluY2x1ZGUoQ1Rlc3QpCiAKLVRoZSBDVGVzdCBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgYGBlbmFibGVfdGVzdGluZygpYGAsIHNvCi13ZSBjYW4gcmVtb3ZlIGl0IGZyb20gb3VyIENNYWtlIGZpbGVzLgorVGhlIDptb2R1bGU6YENUZXN0YCBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgYGBlbmFibGVfdGVzdGluZygpYGAsIHNvIHdlCitjYW4gcmVtb3ZlIGl0IGZyb20gb3VyIENNYWtlIGZpbGVzLgogCiBXZSB3aWxsIGFsc28gbmVlZCB0byBjcmVhdGUgYSBgYENUZXN0Q29uZmlnLmNtYWtlYGAgZmlsZSBpbiB0aGUgdG9wLWxldmVsCiBkaXJlY3Rvcnkgd2hlcmUgd2UgY2FuIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgYW5kIHdoZXJlIHRvIHN1Ym1pdCB0aGUKQEAgLTYwNiw5ICs2NjMsMTEgQEAKIC4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDkvQ1Rlc3RDb25maWcuY21ha2UKICAgOmxhbmd1YWdlOiBjbWFrZQogCi1DVGVzdCB3aWxsIHJlYWQgaW4gdGhpcyBmaWxlIHdoZW4gaXQgcnVucy4gVG8gY3JlYXRlIGEgc2ltcGxlIGRhc2hib2FyZCB5b3UgY2FuCi1ydW4gKipjbWFrZSoqIG9yICoqY21ha2UtZ3VpKiogdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0LCBidXQgZG8gbm90IGJ1aWxkIGl0Ci15ZXQuIEluc3RlYWQsIGNoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIGJpbmFyeSB0cmVlLCBhbmQgdGhlbiBydW46OgorVGhlIDptYW51YWw6YGN0ZXN0IDxjdGVzdCgxKT5gIGV4ZWN1dGFibGUgd2lsbCByZWFkIGluIHRoaXMgZmlsZSB3aGVuIGl0IHJ1bnMuCitUbyBjcmVhdGUgYSBzaW1wbGUgZGFzaGJvYXJkIHlvdSBjYW4gcnVuIHRoZSA6bWFudWFsOmBjbWFrZSA8Y21ha2UoMSk+YAorZXhlY3V0YWJsZSBvciB0aGUgOm1hbnVhbDpgY21ha2UtZ3VpIDxjbWFrZS1ndWkoMSk+YCB0byBjb25maWd1cmUgdGhlIHByb2plY3QsCitidXQgZG8gbm90IGJ1aWxkIGl0IHlldC4gSW5zdGVhZCwgY2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgYmluYXJ5IHRyZWUsIGFuZCB0aGVuCitydW46CiAKICAgY3Rlc3QgWy1WVl0gLUQgRXhwZXJpbWVudGFsCiAKQEAgLTYxOSwyNiArNjc4LDI2IEBACiAKIE9yLCBmcm9tIGFuIElERSwgYnVpbGQgdGhlIGBgRXhwZXJpbWVudGFsYGAgdGFyZ2V0LgogCi1gYGN0ZXN0YGAgd2lsbCBidWlsZCBhbmQgdGVzdCB0aGUgcHJvamVjdCBhbmQgc3VibWl0IHRoZSByZXN1bHRzIHRvIHRoZSBLaXR3YXJlCi1wdWJsaWMgZGFzaGJvYXJkLiBUaGUgcmVzdWx0cyBvZiB5b3VyIGRhc2hib2FyZCB3aWxsIGJlIHVwbG9hZGVkIHRvIEtpdHdhcmUncwotcHVibGljIGRhc2hib2FyZCBoZXJlOiBodHRwczovL215LmNkYXNoLm9yZy9pbmRleC5waHA/cHJvamVjdD1DTWFrZVR1dG9yaWFsLgorVGhlIDptYW51YWw6YGN0ZXN0IDxjdGVzdCgxKT5gIGV4ZWN1dGFibGUgd2lsbCBidWlsZCBhbmQgdGVzdCB0aGUgcHJvamVjdCBhbmQKK3N1Ym1pdCB0aGUgcmVzdWx0cyB0byBLaXR3YXJlJ3MgcHVibGljIGRhc2hib2FyZDoKK2h0dHBzOi8vbXkuY2Rhc2gub3JnL2luZGV4LnBocD9wcm9qZWN0PUNNYWtlVHV0b3JpYWwuCiAKIE1peGluZyBTdGF0aWMgYW5kIFNoYXJlZCAoU3RlcCA5KQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLUluIHRoaXMgc2VjdGlvbiB3ZSB3aWxsIHNob3cgaG93IGJ5IHVzaW5nIHRoZSBgYEJVSUxEX1NIQVJFRF9MSUJTYGAgdmFyaWFibGUKLXdlIGNhbiBjb250cm9sIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGBgYWRkX2xpYnJhcnlgYCwgYW5kIGFsbG93IGNvbnRyb2wKLW92ZXIgaG93IGxpYnJhcmllcyB3aXRob3V0IGFuIGV4cGxpY2l0IHR5cGUgKGBgU1RBVElDYGAsIGBgU0hBUkVEYGAsIGBgTU9EVUxFYGAKLW9yIGBgT0JKRUNUYGApIGFyZSBidWlsdC4KK0luIHRoaXMgc2VjdGlvbiB3ZSB3aWxsIHNob3cgaG93IHRoZSA6dmFyaWFibGU6YEJVSUxEX1NIQVJFRF9MSUJTYCB2YXJpYWJsZSBjYW4KK2JlIHVzZWQgdG8gY29udHJvbCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgLAorYW5kIGFsbG93IGNvbnRyb2wgb3ZlciBob3cgbGlicmFyaWVzIHdpdGhvdXQgYW4gZXhwbGljaXQgdHlwZSAoYGBTVEFUSUNgYCwKK2BgU0hBUkVEYGAsIGBgTU9EVUxFYGAgb3IgYGBPQkpFQ1RgYCkgYXJlIGJ1aWx0LgogCi1UbyBhY2NvbXBsaXNoIHRoaXMgd2UgbmVlZCB0byBhZGQgYGBCVUlMRF9TSEFSRURfTElCU2BgIHRvIHRoZSB0b3AtbGV2ZWwKLWBgQ01ha2VMaXN0cy50eHRgYC4gV2UgdXNlIHRoZSBgYG9wdGlvbmBgIGNvbW1hbmQgYXMgaXQgYWxsb3dzIHVzZXJzIHRvCi1vcHRpb25hbGx5IHNlbGVjdCBpZiB0aGUgdmFsdWUgc2hvdWxkIGJlIE9uIG9yIE9mZi4KK1RvIGFjY29tcGxpc2ggdGhpcyB3ZSBuZWVkIHRvIGFkZCA6dmFyaWFibGU6YEJVSUxEX1NIQVJFRF9MSUJTYCB0byB0aGUKK3RvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGAuIFdlIHVzZSB0aGUgOmNvbW1hbmQ6YG9wdGlvbmAgY29tbWFuZCBhcyBpdCBhbGxvd3MKK3VzZXJzIHRvIG9wdGlvbmFsbHkgc2VsZWN0IGlmIHRoZSB2YWx1ZSBzaG91bGQgYmUgT04gb3IgT0ZGLgogCiBOZXh0IHdlIGFyZSBnb2luZyB0byByZWZhY3RvciBNYXRoRnVuY3Rpb25zIHRvIGJlY29tZSBhIHJlYWwgbGlicmFyeSB0aGF0CiBlbmNhcHN1bGF0ZXMgdXNpbmcgYGBteXNxcnRgYCBvciBgYHNxcnRgYCwgaW5zdGVhZCBvZiByZXF1aXJpbmcgdGhlIGNhbGxpbmcKIGNvZGUgdG8gZG8gdGhpcyBsb2dpYy4gVGhpcyB3aWxsIGFsc28gbWVhbiB0aGF0IGBgVVNFX01ZTUFUSGBgIHdpbGwgbm90IGNvbnRyb2wKLWJ1aWxkaW5nIE1hdGhGdWN0aW9ucywgYnV0IGluc3RlYWQgd2lsbCBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGlzIGxpYnJhcnkuCitidWlsZGluZyBNYXRoRnVuY3Rpb25zLCBidXQgaW5zdGVhZCB3aWxsIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoaXMgbGlicmFyeS4KIAogVGhlIGZpcnN0IHN0ZXAgaXMgdG8gdXBkYXRlIHRoZSBzdGFydGluZyBzZWN0aW9uIG9mIHRoZSB0b3AtbGV2ZWwKIGBgQ01ha2VMaXN0cy50eHRgYCB0byBsb29rIGxpa2U6CkBAIC02NDksOSArNzA4LDkgQEAKIAogTm93IHRoYXQgd2UgaGF2ZSBtYWRlIE1hdGhGdW5jdGlvbnMgYWx3YXlzIGJlIHVzZWQsIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUKIHRoZSBsb2dpYyBvZiB0aGF0IGxpYnJhcnkuIFNvLCBpbiBgYE1hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHRgYCB3ZSBuZWVkIHRvCi1jcmVhdGUgYSBTcXJ0TGlicmFyeSB0aGF0IHdpbGwgY29uZGl0aW9uYWxseSBiZSBidWlsdCB3aGVuIGBgVVNFX01ZTUFUSGBgIGlzCi1lbmFibGVkLiBOb3csIHNpbmNlIHRoaXMgaXMgYSB0dXRvcmlhbCwgd2UgYXJlIGdvaW5nIHRvIGV4cGxpY2l0bHkgcmVxdWlyZQotdGhhdCBTcXJ0TGlicmFyeSBpcyBidWlsdCBzdGF0aWNhbGx5LgorY3JlYXRlIGEgU3FydExpYnJhcnkgdGhhdCB3aWxsIGNvbmRpdGlvbmFsbHkgYmUgYnVpbHQgYW5kIGluc3RhbGxlZCB3aGVuCitgYFVTRV9NWU1BVEhgYCBpcyBlbmFibGVkLiBOb3csIHNpbmNlIHRoaXMgaXMgYSB0dXRvcmlhbCwgd2UgYXJlIGdvaW5nIHRvCitleHBsaWNpdGx5IHJlcXVpcmUgdGhhdCBTcXJ0TGlicmFyeSBpcyBidWlsdCBzdGF0aWNhbGx5LgogCiBUaGUgZW5kIHJlc3VsdCBpcyB0aGF0IGBgTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dGBgIHNob3VsZCBsb29rIGxpa2U6CiAKQEAgLTY3NywxMSArNzM2LDExIEBACiAuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAxMC9NYXRoRnVuY3Rpb25zL01hdGhGdW5jdGlvbnMuaAogICA6bGFuZ3VhZ2U6IGMrKwogCi1BdCB0aGlzIHBvaW50LCBpZiB5b3UgYnVpbGQgZXZlcnl0aGluZywgeW91IHdpbGwgbm90aWNlIHRoYXQgbGlua2luZyBmYWlscworQXQgdGhpcyBwb2ludCwgaWYgeW91IGJ1aWxkIGV2ZXJ5dGhpbmcsIHlvdSBtYXkgbm90aWNlIHRoYXQgbGlua2luZyBmYWlscwogYXMgd2UgYXJlIGNvbWJpbmluZyBhIHN0YXRpYyBsaWJyYXJ5IHdpdGhvdXQgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSB3aXRoIGEKIGxpYnJhcnkgdGhhdCBoYXMgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZS4gVGhlIHNvbHV0aW9uIHRvIHRoaXMgaXMgdG8KLWV4cGxpY2l0bHkgc2V0IHRoZSBgYFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREVgYCB0YXJnZXQgcHJvcGVydHkgb2YgU3FydExpYnJhcnkKLXRvIGJlIFRydWUgbm8gbWF0dGVyIHRoZSBidWlsZCB0eXBlLgorZXhwbGljaXRseSBzZXQgdGhlIDpwcm9wX3RndDpgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERWAgdGFyZ2V0IHByb3BlcnR5IG9mCitTcXJ0TGlicmFyeSB0byBiZSBUcnVlIG5vIG1hdHRlciB0aGUgYnVpbGQgdHlwZS4KIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwMTAvTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dAogICA6bGFuZ3VhZ2U6IGNtYWtlCkBAIC02OTQsMzUgKzc1MywzOSBAQAogQWRkaW5nIEdlbmVyYXRvciBFeHByZXNzaW9ucyAoU3RlcCAxMCkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLUdlbmVyYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGR1cmluZyBidWlsZCBzeXN0ZW0gZ2VuZXJhdGlvbiB0byBwcm9kdWNlCi1pbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBlYWNoIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCis6bWFudWFsOmBHZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIGFyZSBldmFsdWF0ZWQKK2R1cmluZyBidWlsZCBzeXN0ZW0gZ2VuZXJhdGlvbiB0byBwcm9kdWNlIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIGVhY2ggYnVpbGQKK2NvbmZpZ3VyYXRpb24uCiAKLUdlbmVyYXRvciBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiB0aGUgY29udGV4dCBvZiBtYW55IHRhcmdldCBwcm9wZXJ0aWVzLAotc3VjaCBhcyBgYExJTktfTElCUkFSSUVTYGAsIGBgSU5DTFVERV9ESVJFQ1RPUklFU2BgLCBgYENPTVBJTEVfREVGSU5JVElPTlNgYAotYW5kIG90aGVycy4gVGhleSBtYXkgYWxzbyBiZSB1c2VkIHdoZW4gdXNpbmcgY29tbWFuZHMgdG8gcG9wdWxhdGUgdGhvc2UKLXByb3BlcnRpZXMsIHN1Y2ggYXMgYGB0YXJnZXRfbGlua19saWJyYXJpZXMoKWBgLAotYGB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcygpYGAsCi1gYHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKClgYCBhbmQgb3RoZXJzLgorOm1hbnVhbDpgR2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YCBhcmUgYWxsb3dlZCBpbgordGhlIGNvbnRleHQgb2YgbWFueSB0YXJnZXQgcHJvcGVydGllcywgc3VjaCBhcyA6cHJvcF90Z3Q6YExJTktfTElCUkFSSUVTYCwKKzpwcm9wX3RndDpgSU5DTFVERV9ESVJFQ1RPUklFU2AsIDpwcm9wX3RndDpgQ09NUElMRV9ERUZJTklUSU9OU2AgYW5kIG90aGVycy4KK1RoZXkgbWF5IGFsc28gYmUgdXNlZCB3aGVuIHVzaW5nIGNvbW1hbmRzIHRvIHBvcHVsYXRlIHRob3NlIHByb3BlcnRpZXMsIHN1Y2ggYXMKKzpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXNgLCA6Y29tbWFuZDpgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXNgLAorOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zYCBhbmQgb3RoZXJzLgogCi1HZW5lcmF0b3IgZXhwcmVzc2lvbnMgbWF5IGJlIHVzZWQgdG8gZW5hYmxlIGNvbmRpdGlvbmFsIGxpbmtpbmcsIGNvbmRpdGlvbmFsCi1kZWZpbml0aW9ucyB1c2VkIHdoZW4gY29tcGlsaW5nLCBjb25kaXRpb25hbCBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZCBtb3JlLgotVGhlIGNvbmRpdGlvbnMgbWF5IGJlIGJhc2VkIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCB0YXJnZXQgcHJvcGVydGllcywKLXBsYXRmb3JtIGluZm9ybWF0aW9uIG9yIGFueSBvdGhlciBxdWVyeWFibGUgaW5mb3JtYXRpb24uCis6bWFudWFsOmBHZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gICBtYXkgYmUgdXNlZAordG8gZW5hYmxlIGNvbmRpdGlvbmFsIGxpbmtpbmcsIGNvbmRpdGlvbmFsIGRlZmluaXRpb25zIHVzZWQgd2hlbiBjb21waWxpbmcsCitjb25kaXRpb25hbCBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZCBtb3JlLiBUaGUgY29uZGl0aW9ucyBtYXkgYmUgYmFzZWQgb24gdGhlCitidWlsZCBjb25maWd1cmF0aW9uLCB0YXJnZXQgcHJvcGVydGllcywgcGxhdGZvcm0gaW5mb3JtYXRpb24gb3IgYW55IG90aGVyCitxdWVyeWFibGUgaW5mb3JtYXRpb24uCiAKLVRoZXJlIGFyZSBkaWZmZXJlbnQgdHlwZXMgb2YgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluY2x1ZGluZyBMb2dpY2FsLAotSW5mb3JtYXRpb25hbCwgYW5kIE91dHB1dCBleHByZXNzaW9ucy4KK1RoZXJlIGFyZSBkaWZmZXJlbnQgdHlwZXMgb2YKKzptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgaW5jbHVkaW5nCitMb2dpY2FsLCBJbmZvcm1hdGlvbmFsLCBhbmQgT3V0cHV0IGV4cHJlc3Npb25zLgogCiBMb2dpY2FsIGV4cHJlc3Npb25zIGFyZSB1c2VkIHRvIGNyZWF0ZSBjb25kaXRpb25hbCBvdXRwdXQuIFRoZSBiYXNpYwogZXhwcmVzc2lvbnMgYXJlIHRoZSAwIGFuZCAxIGV4cHJlc3Npb25zLiBBIGBgJDwwOi4uLj5gYCByZXN1bHRzIGluIHRoZSBlbXB0eQogc3RyaW5nLCBhbmQgYGA8MTouLi4+YGAgcmVzdWx0cyBpbiB0aGUgY29udGVudCBvZiAiLi4uIi4gIFRoZXkgY2FuIGFsc28gYmUKIG5lc3RlZC4KIAotQSBjb21tb24gdXNhZ2Ugb2YgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGlzIHRvIGNvbmRpdGlvbmFsbHkgYWRkIGNvbXBpbGVyCi1mbGFncywgc3VjaCBhcyB0aG9zZSBmb3IgbGFuZ3VhZ2UgbGV2ZWxzIG9yIHdhcm5pbmdzLiBBIG5pY2UgcGF0dGVybiBpcwotdG8gYXNzb2NpYXRlIHRoaXMgaW5mb3JtYXRpb24gdG8gYW4gYGBJTlRFUkZBQ0VgYCB0YXJnZXQgYWxsb3dpbmcgdGhpcwotaW5mb3JtYXRpb24gdG8gcHJvcGFnYXRlLiBMZXRzIHN0YXJ0IGJ5IGNvbnN0cnVjdGluZyBhbiBgYElOVEVSRkFDRWBgCi10YXJnZXQgYW5kIHNwZWNpZnlpbmcgdGhlIHJlcXVpcmVkIEMrKyBzdGFuZGFyZCBsZXZlbCBvZiBgYDExYGAgaW5zdGVhZAotb2YgdXNpbmcgYGBDTUFLRV9DWFhfU1RBTkRBUkRgYC4KK0EgY29tbW9uIHVzYWdlIG9mCis6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIGlzIHRvCitjb25kaXRpb25hbGx5IGFkZCBjb21waWxlciBmbGFncywgc3VjaCBhcyB0aG9zZSBmb3IgbGFuZ3VhZ2UgbGV2ZWxzIG9yCit3YXJuaW5ncy4gQSBuaWNlIHBhdHRlcm4gaXMgdG8gYXNzb2NpYXRlIHRoaXMgaW5mb3JtYXRpb24gdG8gYW4gYGBJTlRFUkZBQ0VgYAordGFyZ2V0IGFsbG93aW5nIHRoaXMgaW5mb3JtYXRpb24gdG8gcHJvcGFnYXRlLiBMZXQncyBzdGFydCBieSBjb25zdHJ1Y3RpbmcgYW4KK2BgSU5URVJGQUNFYGAgdGFyZ2V0IGFuZCBzcGVjaWZ5aW5nIHRoZSByZXF1aXJlZCBDKysgc3RhbmRhcmQgbGV2ZWwgb2YgYGAxMWBgCitpbnN0ZWFkIG9mIHVzaW5nIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX1NUQU5EQVJEYC4KIAogU28gdGhlIGZvbGxvd2luZyBjb2RlOgogCkBAIC03MzksMTEgKzgwMiwxMCBAQAogICA6ZW5kLWJlZm9yZTogIyBhZGQgY29tcGlsZXIgd2FybmluZyBmbGFncyBqdXN0IHdoZW4gYnVpbGRpbmcgdGhpcyBwcm9qZWN0IHZpYQogCiAKLU5leHQgd2UgYWRkIHRoZSBkZXNpcmVkIGNvbXBpbGVyIHdhcm5pbmcgZmxhZ3MgdGhhdCB3ZSB3YW50IGZvciBvdXIKLXByb2plY3QuIEFzIHdhcm5pbmcgZmxhZ3MgdmFyeSBiYXNlZCBvbiB0aGUgY29tcGlsZXIgd2UgdXNlCi10aGUgYGBDT01QSUxFX0xBTkdfQU5EX0lEYGAgZ2VuZXJhdG9yIGV4cHJlc3Npb24gdG8gY29udHJvbCB3aGljaAotZmxhZ3MgdG8gYXBwbHkgZ2l2ZW4gYSBsYW5ndWFnZSBhbmQgYSBzZXQgb2YgY29tcGlsZXIgaWRzIGFzIHNlZW4KLWJlbG93OgorTmV4dCB3ZSBhZGQgdGhlIGRlc2lyZWQgY29tcGlsZXIgd2FybmluZyBmbGFncyB0aGF0IHdlIHdhbnQgZm9yIG91ciBwcm9qZWN0LiBBcword2FybmluZyBmbGFncyB2YXJ5IGJhc2VkIG9uIHRoZSBjb21waWxlciB3ZSB1c2UgdGhlIGBgQ09NUElMRV9MQU5HX0FORF9JRGBgCitnZW5lcmF0b3IgZXhwcmVzc2lvbiB0byBjb250cm9sIHdoaWNoIGZsYWdzIHRvIGFwcGx5IGdpdmVuIGEgbGFuZ3VhZ2UgYW5kIGEgc2V0CitvZiBjb21waWxlciBpZHMgYXMgc2VlbiBiZWxvdzoKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiBTdGVwMTEvQ01ha2VMaXN0cy50eHQKICAgOmxhbmd1YWdlOiBjbWFrZQpAQCAtNzU1LDggKzgxNyw4IEBACiBwcm9qZWN0IHdpbGwgbm90IGluaGVyaXQgb3VyIHdhcm5pbmcgZmxhZ3MuCiAKIAotKipFeGVyY2lzZSoqOiBNb2RpZnkgYGBNYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0YGAgc28gdGhhdAotYWxsIHRhcmdldHMgaGF2ZSBhIGBgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKClgYCBjYWxsIHRvIGBgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3NgYC4KKyoqRXhlcmNpc2UqKjogTW9kaWZ5IGBgTWF0aEZ1bmN0aW9ucy9DTWFrZUxpc3RzLnR4dGBgIHNvIHRoYXQgYWxsIHRhcmdldHMgaGF2ZQorYSA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfbGlicmFyaWVzYCBjYWxsIHRvIGBgdHV0b3JpYWxfY29tcGlsZXJfZmxhZ3NgYC4KIAogCiBBZGRpbmcgRXhwb3J0IENvbmZpZ3VyYXRpb24gKFN0ZXAgMTEpCkBAIC03NzEsMTIgKzgzMywxMiBAQAogY2FuIHVzZSBvdXIgcHJvamVjdCwgYmUgaXQgZnJvbSBhIGJ1aWxkIGRpcmVjdG9yeSwgYSBsb2NhbCBpbnN0YWxsIG9yIHdoZW4KIHBhY2thZ2VkLgogCi1UaGUgZmlyc3Qgc3RlcCBpcyB0byB1cGRhdGUgb3VyIGBgaW5zdGFsbChUQVJHRVRTKWBgIGNvbW1hbmRzIHRvIG5vdCBvbmx5Ci1zcGVjaWZ5IGEgYGBERVNUSU5BVElPTmBgIGJ1dCBhbHNvIGFuIGBgRVhQT1JUYGAuIFRoZSBgYEVYUE9SVGBgIGtleXdvcmQKK1RoZSBmaXJzdCBzdGVwIGlzIHRvIHVwZGF0ZSBvdXIgOmNvbW1hbmQ6YGluc3RhbGwoVEFSR0VUUylgIGNvbW1hbmRzIHRvIG5vdAorb25seSBzcGVjaWZ5IGEgYGBERVNUSU5BVElPTmBgIGJ1dCBhbHNvIGFuIGBgRVhQT1JUYGAuIFRoZSBgYEVYUE9SVGBgIGtleXdvcmQKIGdlbmVyYXRlcyBhbmQgaW5zdGFsbHMgYSBDTWFrZSBmaWxlIGNvbnRhaW5pbmcgY29kZSB0byBpbXBvcnQgYWxsIHRhcmdldHMKLWxpc3RlZCBpbiB0aGUgaW5zdGFsbCBjb21tYW5kIGZyb20gdGhlIGluc3RhbGxhdGlvbiB0cmVlLiBTbyBsZXQncyBnbyBhaGVhZAotYW5kIGV4cGxpY2l0bHkgYGBFWFBPUlRgYCB0aGUgTWF0aEZ1bmN0aW9ucyBsaWJyYXJ5IGJ5IHVwZGF0aW5nIHRoZQotYGBpbnN0YWxsYGAgY29tbWFuZCBpbiBgYE1hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHRgYCB0byBsb29rIGxpa2U6CitsaXN0ZWQgaW4gdGhlIGluc3RhbGwgY29tbWFuZCBmcm9tIHRoZSBpbnN0YWxsYXRpb24gdHJlZS4gU28gbGV0J3MgZ28gYWhlYWQgYW5kCitleHBsaWNpdGx5IGBgRVhQT1JUYGAgdGhlIE1hdGhGdW5jdGlvbnMgbGlicmFyeSBieSB1cGRhdGluZyB0aGUgYGBpbnN0YWxsYGAKK2NvbW1hbmQgaW4gYGBNYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0YGAgdG8gbG9vayBsaWtlOgogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IENvbXBsZXRlL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKICAgOmxhbmd1YWdlOiBjbWFrZQpAQCAtODA2LDEyICs4NjgsMTIgQEAKIFdoYXQgQ01ha2UgaXMgdHJ5aW5nIHRvIHNheSBpcyB0aGF0IGR1cmluZyBnZW5lcmF0aW5nIHRoZSBleHBvcnQgaW5mb3JtYXRpb24KIGl0IHdpbGwgZXhwb3J0IGEgcGF0aCB0aGF0IGlzIGludHJpbnNpY2FsbHkgdGllZCB0byB0aGUgY3VycmVudCBtYWNoaW5lIGFuZAogd2lsbCBub3QgYmUgdmFsaWQgb24gb3RoZXIgbWFjaGluZXMuIFRoZSBzb2x1dGlvbiB0byB0aGlzIGlzIHRvIHVwZGF0ZSB0aGUKLU1hdGhGdW5jdGlvbnMgYGB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc2BgIHRvIHVuZGVyc3RhbmQgdGhhdCBpdCBuZWVkcworTWF0aEZ1bmN0aW9ucyA6Y29tbWFuZDpgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXNgIHRvIHVuZGVyc3RhbmQgdGhhdCBpdCBuZWVkcwogZGlmZmVyZW50IGBgSU5URVJGQUNFYGAgbG9jYXRpb25zIHdoZW4gYmVpbmcgdXNlZCBmcm9tIHdpdGhpbiB0aGUgYnVpbGQKIGRpcmVjdG9yeSBhbmQgZnJvbSBhbiBpbnN0YWxsIC8gcGFja2FnZS4gVGhpcyBtZWFucyBjb252ZXJ0aW5nIHRoZQotYGB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc2BgIGNhbGwgZm9yIE1hdGhGdW5jdGlvbnMgdG8gbG9vayBsaWtlOgorOmNvbW1hbmQ6YHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzYCBjYWxsIGZvciBNYXRoRnVuY3Rpb25zIHRvIGxvb2sgbGlrZToKIAotLi4gbGl0ZXJhbGluY2x1ZGU6OiBDb21wbGV0ZS9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CisuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAxMi9NYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0CiAgIDpsYW5ndWFnZTogY21ha2UKICAgOnN0YXJ0LWFmdGVyOiAjIHRvIGZpbmQgTWF0aEZ1bmN0aW9ucy5oLCB3aGlsZSB3ZSBkb24ndC4KICAgOmVuZC1iZWZvcmU6ICMgc2hvdWxkIHdlIHVzZSBvdXIgb3duIG1hdGggZnVuY3Rpb25zCkBAIC04MjEsMTYgKzg4MywxNiBAQAogCiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIENNYWtlIHByb3Blcmx5IHBhY2thZ2luZyB0aGUgdGFyZ2V0IGluZm9ybWF0aW9uIHRoYXQgaXMKIHJlcXVpcmVkIGJ1dCB3ZSB3aWxsIHN0aWxsIG5lZWQgdG8gZ2VuZXJhdGUgYSBgYE1hdGhGdW5jdGlvbnNDb25maWcuY21ha2VgYCBzbwotdGhhdCB0aGUgQ01ha2UgYGBmaW5kX3BhY2thZ2VgYCBjb21tYW5kIGNhbiBmaW5kIG91ciBwcm9qZWN0LiBTbyBsZXQncyBnbwordGhhdCB0aGUgQ01ha2UgOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgY29tbWFuZCBjYW4gZmluZCBvdXIgcHJvamVjdC4gU28gbGV0J3MgZ28KIGFoZWFkIGFuZCBhZGQgYSBuZXcgZmlsZSB0byB0aGUgdG9wLWxldmVsIG9mIHRoZSBwcm9qZWN0IGNhbGxlZAogYGBDb25maWcuY21ha2UuaW5gYCB3aXRoIHRoZSBmb2xsb3dpbmcgY29udGVudHM6CiAKLS4uIGxpdGVyYWxpbmNsdWRlOjogQ29tcGxldGUvQ29uZmlnLmNtYWtlLmluCisuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAxMi9Db25maWcuY21ha2UuaW4KIAogVGhlbiwgdG8gcHJvcGVybHkgY29uZmlndXJlIGFuZCBpbnN0YWxsIHRoYXQgZmlsZSwgYWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlCiBib3R0b20gb2YgdGhlIHRvcC1sZXZlbCBgYENNYWtlTGlzdHMudHh0YGA6CiAKLS4uIGxpdGVyYWxpbmNsdWRlOjogQ29tcGxldGUvQ01ha2VMaXN0cy50eHQKKy4uIGxpdGVyYWxpbmNsdWRlOjogU3RlcDEyL0NNYWtlTGlzdHMudHh0CiAgIDpsYW5ndWFnZTogY21ha2UKICAgOnN0YXJ0LWFmdGVyOiAjIGluc3RhbGwgdGhlIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cwogICA6ZW5kLWJlZm9yZTogIyBnZW5lcmF0ZSB0aGUgZXhwb3J0CkBAIC04NDAsNyArOTAyLDcgQEAKIHdlIHdhbnQgb3VyIHByb2plY3QgdG8gYWxzbyBiZSB1c2VkIGZyb20gYSBidWlsZCBkaXJlY3Rvcnkgd2Ugb25seSBoYXZlIHRvIGFkZAogdGhlIGZvbGxvd2luZyB0byB0aGUgYm90dG9tIG9mIHRoZSB0b3AgbGV2ZWwgYGBDTWFrZUxpc3RzLnR4dGBgOgogCi0uLiBsaXRlcmFsaW5jbHVkZTo6IENvbXBsZXRlL0NNYWtlTGlzdHMudHh0CisuLiBsaXRlcmFsaW5jbHVkZTo6IFN0ZXAxMi9DTWFrZUxpc3RzLnR4dAogICA6bGFuZ3VhZ2U6IGNtYWtlCiAgIDpzdGFydC1hZnRlcjogIyBuZWVkcyB0byBiZSBhZnRlciB0aGUgaW5zdGFsbChUQVJHRVRTICkgY29tbWFuZAogCkBAIC04NDgsNTUgKzkxMCw4MSBAQAogY29uZmlndXJlZCBgYE1hdGhGdW5jdGlvbnNDb25maWcuY21ha2VgYCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IHRvIGJlIHVzZWQgYnkKIG90aGVyIHByb2plY3RzLCB3aXRob3V0IG5lZWRpbmcgaXQgdG8gYmUgaW5zdGFsbGVkLgogCi1JbXBvcnQgYSBDTWFrZSBQcm9qZWN0IChDb25zdW1lcikKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUGFja2FnaW5nIERlYnVnIGFuZCBSZWxlYXNlIChTdGVwIDEyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGlzIGV4YW1wbGUgc2hvd3MgaG93IGEgcHJvamVjdCBjYW4gZmluZCBvdGhlciBDTWFrZSBwYWNrYWdlcyB0aGF0Ci1nZW5lcmF0ZSBgYENvbmZpZy5jbWFrZWBgIGZpbGVzLgorKipOb3RlOioqIFRoaXMgZXhhbXBsZSBpcyB2YWxpZCBmb3Igc2luZ2xlLWNvbmZpZ3VyYXRpb24gZ2VuZXJhdG9ycyBhbmQgd2lsbAorbm90IHdvcmsgZm9yIG11bHRpLWNvbmZpZ3VyYXRpb24gZ2VuZXJhdG9ycyAoZS5nLiBWaXN1YWwgU3R1ZGlvKS4KIAotSXQgYWxzbyBzaG93cyBob3cgdG8gc3RhdGUgYSBwcm9qZWN0J3MgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdoZW4gZ2VuZXJhdGluZwotYSBgYENvbmZpZy5jbWFrZWBgLgorQnkgZGVmYXVsdCwgQ01ha2UncyBtb2RlbCBpcyB0aGF0IGEgYnVpbGQgZGlyZWN0b3J5IG9ubHkgY29udGFpbnMgYSBzaW5nbGUKK2NvbmZpZ3VyYXRpb24sIGJlIGl0IERlYnVnLCBSZWxlYXNlLCBNaW5TaXplUmVsLCBvciBSZWxXaXRoRGViSW5mby4gSXQgaXMKK3Bvc3NpYmxlLCBob3dldmVyLCB0byBzZXR1cCBDUGFjayB0byBidW5kbGUgbXVsdGlwbGUgYnVpbGQgZGlyZWN0b3JpZXMgYW5kCitjb25zdHJ1Y3QgYSBwYWNrYWdlIHRoYXQgY29udGFpbnMgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgb2YgdGhlIHNhbWUgcHJvamVjdC4KIAotUGFja2FnaW5nIERlYnVnIGFuZCBSZWxlYXNlIChNdWx0aVBhY2thZ2UpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0ZpcnN0LCB3ZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBkZWJ1ZyBhbmQgcmVsZWFzZSBidWlsZHMgdXNlIGRpZmZlcmVudCBuYW1lcworZm9yIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzIHRoYXQgd2lsbCBiZSBpbnN0YWxsZWQuIExldCdzIHVzZSBgZGAgYXMgdGhlCitwb3N0Zml4IGZvciB0aGUgZGVidWcgZXhlY3V0YWJsZSBhbmQgbGlicmFyaWVzLgogCi1CeSBkZWZhdWx0IENNYWtlJ3MgbW9kZWwgaXMgdGhhdCBhIGJ1aWxkIGRpcmVjdG9yeSBvbmx5IGNvbnRhaW5zIGEgc2luZ2xlCi1jb25maWd1cmF0aW9uLCBiZSBpdCBEZWJ1ZywgUmVsZWFzZSwgTWluU2l6ZVJlbCwgb3IgUmVsV2l0aERlYkluZm8uCitTZXQgOnZhcmlhYmxlOmBDTUFLRV9ERUJVR19QT1NURklYYCBuZWFyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRvcC1sZXZlbAorYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGU6CiAKLUJ1dCBpdCBpcyBwb3NzaWJsZSB0byBzZXR1cCBDUGFjayB0byBidW5kbGUgbXVsdGlwbGUgYnVpbGQgZGlyZWN0b3JpZXMgYXQgdGhlCi1zYW1lIHRpbWUgdG8gYnVpbGQgYSBwYWNrYWdlIHRoYXQgY29udGFpbnMgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgb2YgdGhlCi1zYW1lIHByb2plY3QuCisuLiBsaXRlcmFsaW5jbHVkZTo6IENvbXBsZXRlL0NNYWtlTGlzdHMudHh0CisgIDpsYW5ndWFnZTogY21ha2UKKyAgOnN0YXJ0LWFmdGVyOiBwcm9qZWN0KFR1dG9yaWFsIFZFUlNJT04gMS4wKQorICA6ZW5kLWJlZm9yZTogdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXModHV0b3JpYWxfY29tcGlsZXJfZmxhZ3MKIAotRmlyc3Qgd2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBkaXJlY3RvcnkgY2FsbGVkIGBgbXVsdGlfY29uZmlnYGAsIHdoaWNoCi13aWxsIGNvbnRhaW4gYWxsIHRoZSBidWlsZHMgdGhhdCB3ZSB3YW50IHRvIHBhY2thZ2UgdG9nZXRoZXIuCitBbmQgdGhlIDpwcm9wX3RndDpgREVCVUdfUE9TVEZJWGAgcHJvcGVydHkgb24gdGhlIHR1dG9yaWFsIGV4ZWN1dGFibGU6CiAKLVNlY29uZCBjcmVhdGUgYSBgYGRlYnVnYGAgYW5kIGBgcmVsZWFzZWBgIGRpcmVjdG9yeSB1bmRlcm5lYXRoCi1gYG11bHRpX2NvbmZpZ2BgLiBBdCB0aGUgZW5kIHlvdSBzaG91bGQgaGF2ZSBhIGxheW91dCB0aGF0IGxvb2tzIGxpa2U6CisuLiBsaXRlcmFsaW5jbHVkZTo6IENvbXBsZXRlL0NNYWtlTGlzdHMudHh0CisgIDpsYW5ndWFnZTogY21ha2UKKyAgOnN0YXJ0LWFmdGVyOiAjIGFkZCB0aGUgZXhlY3V0YWJsZQorICA6ZW5kLWJlZm9yZTogIyBhZGQgdGhlIGJpbmFyeSB0cmVlIHRvIHRoZSBzZWFyY2ggcGF0aCBmb3IgaW5jbHVkZSBmaWxlcworCitMZXQncyBhbHNvIGFkZCB2ZXJzaW9uIG51bWJlcmluZyB0byB0aGUgTWF0aEZ1bmN0aW9ucyBsaWJyYXJ5LiBJbgorYGBNYXRoRnVuY3Rpb25zL0NNYWtlTGlzdHMudHh0YGAsIHNldCB0aGUgOnByb3BfdGd0OmBWRVJTSU9OYCBhbmQKKzpwcm9wX3RndDpgU09WRVJTSU9OYCBwcm9wZXJ0aWVzOgorCisuLiBsaXRlcmFsaW5jbHVkZTo6IENvbXBsZXRlL01hdGhGdW5jdGlvbnMvQ01ha2VMaXN0cy50eHQKKyAgOmxhbmd1YWdlOiBjbWFrZQorICA6c3RhcnQtYWZ0ZXI6ICMgc2V0dXAgdGhlIHZlcnNpb24gbnVtYmVyaW5nCisgIDplbmQtYmVmb3JlOiAjIGluc3RhbGwgcnVsZXMKKworRnJvbSB0aGUgYGBTdGVwMTJgYCBkaXJlY3RvcnksIGNyZWF0ZSBgYGRlYnVnYGAgYW5kIGBgcmVsZWFzZWBgCitzdWJiZGlyZWN0b3JpZXMuIFRoZSBsYXlvdXQgd2lsbCBsb29rIGxpa2U6CiAKIC4uIGNvZGUtYmxvY2s6OiBub25lCiAKLSAg4pSAIG11bHRpX2NvbmZpZwotICAgICAg4pSc4pSA4pSAIGRlYnVnCi0gICAgICDilJTilIDilIAgcmVsZWFzZQorICAtIFN0ZXAxMgorICAgICAtIGRlYnVnCisgICAgIC0gcmVsZWFzZQogCi1Ob3cgd2UgbmVlZCB0byBzZXR1cCBkZWJ1ZyBhbmQgcmVsZWFzZSBidWlsZHMsIHdoaWNoIHdvdWxkIHJvdWdobHkgZW50YWlsCi10aGUgZm9sbG93aW5nOgorTm93IHdlIG5lZWQgdG8gc2V0dXAgZGVidWcgYW5kIHJlbGVhc2UgYnVpbGRzLiBXZSBjYW4gdXNlCis6dmFyaWFibGU6YENNQUtFX0JVSUxEX1RZUEVgIHRvIHNldCB0aGUgY29uZmlndXJhdGlvbiB0eXBlOgogCiAuLiBjb2RlLWJsb2NrOjogY29uc29sZQogCiAgIGNkIGRlYnVnCi0gIGNtYWtlIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZyAuLi8uLi9NdWx0aVBhY2thZ2UvCisgIGNtYWtlIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZyAuLgogICBjbWFrZSAtLWJ1aWxkIC4KICAgY2QgLi4vcmVsZWFzZQotICBjbWFrZSAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSAuLi8uLi9NdWx0aVBhY2thZ2UvCisgIGNtYWtlIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlIC4uCiAgIGNtYWtlIC0tYnVpbGQgLgotICBjZCAuLgogCitOb3cgdGhhdCBib3RoIHRoZSBkZWJ1ZyBhbmQgcmVsZWFzZSBidWlsZHMgYXJlIGNvbXBsZXRlLCB3ZSBjYW4gdXNlIGEgY3VzdG9tCitjb25maWd1cmF0aW9uIGZpbGUgdG8gcGFja2FnZSBib3RoIGJ1aWxkcyBpbnRvIGEgc2luZ2xlIHJlbGVhc2UuIEluIHRoZQorYGBTdGVwMTJgYCBkaXJlY3RvcnksIGNyZWF0ZSBhIGZpbGUgY2FsbGVkIGBgTXVsdGlDUGFja0NvbmZpZy5jbWFrZWBgLiBJbiB0aGlzCitmaWxlLCBmaXJzdCBpbmNsdWRlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZQorOm1hbnVhbDpgY21ha2UgIDxjbWFrZSgxKT5gIGV4ZWN1dGFibGUuCiAKLU5vdyB0aGF0IGJvdGggdGhlIGRlYnVnIGFuZCByZWxlYXNlIGJ1aWxkcyBhcmUgY29tcGxldGUsIHdlIGNhbiB1c2UKLWEgY3VzdG9tIGBgTXVsdGlDUGFja0NvbmZpZy5jbWFrZWBgIGZpbGUgdG8gcGFja2FnZSBib3RoIGJ1aWxkcyBpbnRvIGEgc2luZ2xlCi1yZWxlYXNlLgorTmV4dCwgdXNlIHRoZSBgYENQQUNLX0lOU1RBTExfQ01BS0VfUFJPSkVDVFNgYCB2YXJpYWJsZSB0byBzcGVjaWZ5IHdoaWNoCitwcm9qZWN0cyB0byBpbnN0YWxsLiBJbiB0aGlzIGNhc2UsIHdlIHdhbnQgdG8gaW5zdGFsbCBib3RoIGRlYnVnIGFuZCByZWxlYXNlLgorCisuLiBsaXRlcmFsaW5jbHVkZTo6IENvbXBsZXRlL011bHRpQ1BhY2tDb25maWcuY21ha2UKKyAgOmxhbmd1YWdlOiBjbWFrZQorCitGcm9tIHRoZSBgYFN0ZXAxMmBgIGRpcmVjdG9yeSwgcnVuIDptYW51YWw6YGNwYWNrIDxjcGFjaygxKT5gIHNwZWNpZnlpbmcgb3VyCitjdXN0b20gY29uZmlndXJhdGlvbiBmaWxlIHdpdGggdGhlIGBgY29uZmlnYGAgb3B0aW9uOgogCiAuLiBjb2RlLWJsb2NrOjogY29uc29sZQogCi0gIGNwYWNrIC0tY29uZmlnIC4uLy4uL011bHRpUGFja2FnZS9NdWx0aUNQYWNrQ29uZmlnLmNtYWtlCisgIGNwYWNrIC0tY29uZmlnIE11bHRpQ1BhY2tDb25maWcuY21ha2UKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9HVUktQWRkLUVudHJ5LnBuZyBiL0hlbHAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9HVUktQWRkLUVudHJ5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTliZTdlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1BZGQtRW50cnkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9HVUktQ2hvb3NlLUdlbmVyYXRvci5wbmcgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUNob29zZS1HZW5lcmF0b3IucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YWQyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUNob29zZS1HZW5lcmF0b3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9HVUktQ29uZmlndXJlLURpYWxvZy5wbmcgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUNvbmZpZ3VyZS1EaWFsb2cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MzljYWMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLUNvbmZpZ3VyZS1EaWFsb2cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9HVUktU291cmNlLUJpbmFyeS5wbmcgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLVNvdXJjZS1CaW5hcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMzgzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vR1VJLVNvdXJjZS1CaW5hcnkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0hlbHAvZ3VpZGUvdXNlci1pbnRlcmFjdGlvbi9pbmRleC5yc3QgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vaW5kZXgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MjRiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3VzZXItaW50ZXJhY3Rpb24vaW5kZXgucnN0CkBAIC0wLDAgKzEsNjkxIEBACitVc2VyIEludGVyYWN0aW9uIEd1aWRlCisqKioqKioqKioqKioqKioqKioqKioqCisKKy4uIG9ubHk6OiBodG1sCisKKyAgIC4uIGNvbnRlbnRzOjoKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworV2hlcmUgYSBzb2Z0d2FyZSBwYWNrYWdlIHN1cHBsaWVzIGEgQ01ha2UtYmFzZWQgYnVpbGRzeXN0ZW0KK3dpdGggdGhlIHNvdXJjZSBvZiB0aGVpciBzb2Z0d2FyZSwgdGhlIGNvbnN1bWVyIG9mIHRoZQorc29mdHdhcmUgaXMgcmVxdWlyZWQgdG8gcnVuIGEgQ01ha2UgdXNlciBpbnRlcmFjdGlvbiB0b29sCitpbiBvcmRlciB0byBidWlsZCBpdC4KKworV2VsbC1iZWhhdmVkIENNYWtlLWJhc2VkIGJ1aWxkc3lzdGVtcyBkbyBub3QgY3JlYXRlIGFueQorb3V0cHV0IGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCBzbyB0eXBpY2FsbHksIHRoZSB1c2VyCitwZXJmb3JtcyBhbiBvdXQtb2Ytc291cmNlIGJ1aWxkIGFuZCBwZXJmb3JtcyB0aGUgYnVpbGQKK3RoZXJlLiAgRmlyc3QsIENNYWtlIG11c3QgYmUgaW5zdHJ1Y3RlZCB0byBnZW5lcmF0ZSBhCitzdWl0YWJsZSBidWlsZHN5c3RlbSwgdGhlbiB0aGUgdXNlciBpbnZva2VzIGEgYnVpbGQgdG9vbAordG8gcHJvY2VzcyB0aGF0IGdlbmVyYXRlZCBidWlsZHN5c3RlbS4gIFRoZSBnZW5lcmF0ZWQKK2J1aWxkc3lzdGVtIGlzIHNwZWNpZmljIHRvIHRoZSBtYWNoaW5lIHVzZWQgdG8gZ2VuZXJhdGUKK2l0IGFuZCBpcyBub3QgcmVkaXN0cmlidXRhYmxlLiAgRWFjaCBjb25zdW1lciBvZiBhIHByb3ZpZGVkCitzb3VyY2Ugc29mdHdhcmUgcGFja2FnZSBpcyByZXF1aXJlZCB0byB1c2UgQ01ha2UgdG8KK2dlbmVyYXRlIGEgYnVpbGRzeXN0ZW0gc3BlY2lmaWMgdG8gdGhlaXIgc3lzdGVtLgorCitHZW5lcmF0ZWQgYnVpbGRzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgYmUgdHJlYXRlZCBhcworcmVhZC1vbmx5LiBUaGUgQ01ha2UgZmlsZXMgYXMgYSBwcmltYXJ5IGFydGlmYWN0IHNob3VsZAorY29tcGxldGVseSBzcGVjaWZ5IHRoZSBidWlsZHN5c3RlbSBhbmQgdGhlcmUgc2hvdWxkIGJlIG5vCityZWFzb24gdG8gcG9wdWxhdGUgcHJvcGVydGllcyBtYW51YWxseSBpbiBhbiBJREUgZm9yCitleGFtcGxlIGFmdGVyIGdlbmVyYXRpbmcgdGhlIGJ1aWxkc3lzdGVtLiAgQ01ha2Ugd2lsbAorcGVyaW9kaWNhbGx5IHJld3JpdGUgdGhlIGdlbmVyYXRlZCBidWlsZHN5c3RlbSwgc28KK21vZGlmaWNhdGlvbnMgYnkgdXNlcnMgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKworVGhlIGZlYXR1cmVzIGFuZCB1c2VyIGludGVyZmFjZXMgZGVzY3JpYmVkIGluIHRoaXMgbWFudWFsCithcmUgYXZhaWxhYmxlIGZvciBhbGwgQ01ha2UtYmFzZWQgYnVpbGQgc3lzdGVtcyBieSB2aXJ0dWUKK29mIHByb3ZpZGluZyBDTWFrZSBmaWxlcy4KKworVGhlIENNYWtlIHRvb2xpbmcgbWF5IHJlcG9ydCBlcnJvcnMgdG8gdGhlIHVzZXIgd2hlbgorcHJvY2Vzc2luZyBwcm92aWRlZCBDTWFrZSBmaWxlcywgc3VjaCBhcyByZXBvcnRpbmcgdGhhdAordGhlIGNvbXBpbGVyIGlzIG5vdCBzdXBwb3J0ZWQsIG9yIHRoZSBjb21waWxlciBkb2VzIG5vdAorc3VwcG9ydCBhIHJlcXVpcmVkIGNvbXBpbGUgb3B0aW9uLCBvciBhIGRlcGVuZGVuY3kgY2FuCitub3QgYmUgZm91bmQuICBUaGVzZSBlcnJvcnMgbXVzdCBiZSByZXNvbHZlZCBieSB0aGUgdXNlcgorYnkgY2hvb3NpbmcgYSBkaWZmZXJlbnQgY29tcGlsZXIsCis6Z3VpZGU6YGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIDxVc2luZyBEZXBlbmRlbmNpZXMgR3VpZGU+YCwKK29yIGluc3RydWN0aW5nIENNYWtlIHdoZXJlIHRvIGZpbmQgdGhlbSwgZXRjLgorCitDb21tYW5kIExpbmUgY21ha2UgdG9vbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBzaW1wbGUgYnV0IHR5cGljYWwgdXNlIG9mIDptYW51YWw6YGNtYWtlKDEpYCB3aXRoIGEgZnJlc2gKK2NvcHkgb2Ygc29mdHdhcmUgc291cmNlIGNvZGUgaXMgdG8gY3JlYXRlIGEgYnVpbGQgZGlyZWN0b3J5CithbmQgaW52b2tlIGNtYWtlIHRoZXJlOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgY2Qgc29tZV9zb2Z0d2FyZS0xLjQuMgorICAkIG1rZGlyIGJ1aWxkCisgICQgY2QgYnVpbGQKKyAgJCBjbWFrZSAuLiAtRENNQUtFX0lOU1RBTExfUFJFRklYPS9vcHQvdGhlL3ByZWZpeAorICAkIGNtYWtlIC0tYnVpbGQgLgorICAkIGNtYWtlIC0tYnVpbGQgLiAtLXRhcmdldCBpbnN0YWxsCisKK0l0IGlzIHJlY29tbWVuZGVkIHRvIGJ1aWxkIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5IHRvIHRoZQorc291cmNlIGJlY2F1c2UgdGhhdCBrZWVwcyB0aGUgc291cmNlIGRpcmVjdG9yeSBwcmlzdGluZSwKK2FsbG93cyBmb3IgYnVpbGRpbmcgYSBzaW5nbGUgc291cmNlIHdpdGggbXVsdGlwbGUKK3Rvb2xjaGFpbnMsIGFuZCBhbGxvd3MgZWFzeSBjbGVhcmluZyBvZiBidWlsZCBhcnRpZmFjdHMgYnkKK3NpbXBseSBkZWxldGluZyB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCitUaGUgQ01ha2UgdG9vbGluZyBtYXkgcmVwb3J0IHdhcm5pbmdzIHdoaWNoIGFyZSBpbnRlbmRlZAorZm9yIHRoZSBwcm92aWRlciBvZiB0aGUgc29mdHdhcmUsIG5vdCBpbnRlbmRlZCBmb3IgdGhlCitjb25zdW1lciBvZiB0aGUgc29mdHdhcmUuICBTdWNoIHdhcm5pbmdzIGVuZCB3aXRoICJUaGlzCit3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMiLiAgVXNlcnMgbWF5IGRpc2FibGUKK3N1Y2ggd2FybmluZ3MgYnkgcGFzc2luZyB0aGUgYGAtV25vLWRldmBgIGZsYWcgdG8KKzptYW51YWw6YGNtYWtlKDEpYC4KKworY21ha2UtZ3VpIHRvb2wKKy0tLS0tLS0tLS0tLS0tCisKK1VzZXJzIG1vcmUgYWNjdXN0b21lZCB0byBHVUkgaW50ZXJmYWNlcyBtYXkgdXNlIHRoZQorOm1hbnVhbDpgY21ha2UtZ3VpKDEpYCB0b29sIHRvIGludm9rZSBDTWFrZSBhbmQgZ2VuZXJhdGUKK2EgYnVpbGRzeXN0ZW0uCisKK1RoZSBzb3VyY2UgYW5kIGJpbmFyeSBkaXJlY3RvcmllcyBtdXN0IGZpcnN0IGJlCitwb3B1bGF0ZWQuICBJdCBpcyBhbHdheXMgYWR2aXNlZCB0byB1c2UgZGlmZmVyZW50CitkaXJlY3RvcmllcyBmb3IgdGhlIHNvdXJjZSBhbmQgdGhlIGJ1aWxkLgorCisuLiBpbWFnZTo6IC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1Tb3VyY2UtQmluYXJ5LnBuZworICAgOmFsdDogQ2hvb3Npbmcgc291cmNlIGFuZCBiaW5hcnkgZGlyZWN0b3JpZXMKKworR2VuZXJhdGluZyBhIEJ1aWxkc3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHNldmVyYWwgdXNlciBpbnRlcmZhY2UgdG9vbHMgd2hpY2ggbWF5IGJlIHVzZWQKK3RvIGdlbmVyYXRlIGEgYnVpbGRzeXN0ZW0gZnJvbSBDTWFrZSBmaWxlcy4gIFRoZQorOm1hbnVhbDpgY2NtYWtlKDEpYCBhbmQgOm1hbnVhbDpgY21ha2UtZ3VpKDEpYCB0b29scyBndWlkZQordGhlIHVzZXIgdGhyb3VnaCBzZXR0aW5nIHRoZSB2YXJpb3VzIG5lY2Vzc2FyeSBvcHRpb25zLgorVGhlIDptYW51YWw6YGNtYWtlKDEpYCB0b29sIGNhbiBiZSBpbnZva2VkIHRvIHNwZWNpZnkKK29wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMgbWFudWFsIGRlc2NyaWJlcyBvcHRpb25zCit3aGljaCBtYXkgYmUgc2V0IHVzaW5nIGFueSBvZiB0aGUgdXNlciBpbnRlcmZhY2UgdG9vbHMsCit0aG91Z2ggdGhlIG1vZGUgb2Ygc2V0dGluZyBhbiBvcHRpb24gaXMgZGlmZmVyZW50IGZvciBlYWNoCit0b29sLgorCitDb21tYW5kIGxpbmUgZW52aXJvbm1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGludm9raW5nIDptYW51YWw6YGNtYWtlKDEpYCB3aXRoIGEgY29tbWFuZCBsaW5lCitidWlsZHN5c3RlbSBzdWNoIGFzIGBgTWFrZWZpbGVzYGAgb3IgYGBOaW5qYWBgLCBpdCBpcworbmVjZXNzYXJ5IHRvIHVzZSB0aGUgY29ycmVjdCBidWlsZCBlbnZpcm9ubWVudCB0bworZW5zdXJlIHRoYXQgYnVpbGQgdG9vbHMgYXJlIGF2YWlsYWJsZS4gQ01ha2UgbXVzdCBiZQorYWJsZSB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZQorOnZhcmlhYmxlOmBidWlsZCB0b29sIDxDTUFLRV9NQUtFX1BST0dSQU0+YCwKK2NvbXBpbGVyLCBsaW5rZXIgYW5kIG90aGVyIHRvb2xzIGFzIG5lZWRlZC4KKworT24gTGludXggc3lzdGVtcywgdGhlIGFwcHJvcHJpYXRlIHRvb2xzIGFyZSBvZnRlbgorcHJvdmlkZWQgaW4gc3lzdGVtLXdpZGUgbG9jYXRpb25zIGFuZCBtYXkgYmUgcmVhZGlseQoraW5zdGFsbGVkIHRocm91Z2ggdGhlIHN5c3RlbSBwYWNrYWdlIG1hbmFnZXIuIE90aGVyCit0b29sY2hhaW5zIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG9yIGluc3RhbGxlZCBpbgorbm9uLWRlZmF1bHQgbG9jYXRpb25zIGNhbiBhbHNvIGJlIHVzZWQuCisKK1doZW4gY3Jvc3MtY29tcGlsaW5nLCBzb21lIHBsYXRmb3JtcyBtYXkgcmVxdWlyZQorZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGJlIHNldCBvciBtYXkgcHJvdmlkZQorc2NyaXB0cyB0byBzZXQgdGhlIGVudmlyb25tZW50LgorCitWaXN1YWwgU3R1ZGlvIHNoaXBzIG11bHRpcGxlIGNvbW1hbmQgcHJvbXB0cyBhbmQKK2BgdmN2YXJzYWxsLmJhdGBgIHNjcmlwdHMgZm9yIHNldHRpbmcgdXAgdGhlCitjb3JyZWN0IGVudmlyb25tZW50cyBmb3IgY29tbWFuZCBsaW5lIGJ1aWxkc3lzdGVtcy4gV2hpbGUKK25vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gdXNlIGEgY29ycmVzcG9uZGluZworY29tbWFuZCBsaW5lIGVudmlyb25tZW50IHdoZW4gdXNpbmcgYSBWaXN1YWwgU3R1ZGlvCitnZW5lcmF0b3IsIGRvaW5nIHNvIGhhcyBubyBkaXNhZHZhbnRhZ2VzLgorCitXaGVuIHVzaW5nIFhjb2RlLCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBYY29kZQordmVyc2lvbiBpbnN0YWxsZWQuICBXaGljaCBvbmUgdG8gdXNlIGNhbiBiZSBzZWxlY3RlZAoraW4gYSBudW1iZXIgb2YgZGlmZmVyZW50IHdheXMsIGJ1dCB0aGUgbW9zdCBjb21tb24KK21ldGhvZHMgYXJlOgorCisqIFNldHRpbmcgdGhlIGRlZmF1bHQgdmVyc2lvbiBpbiB0aGUgcHJlZmVyZW5jZXMKKyAgb2YgdGhlIFhjb2RlIElERS4KKyogU2V0dGluZyB0aGUgZGVmYXVsdCB2ZXJzaW9uIHZpYSB0aGUgYGB4Y29kZS1zZWxlY3RgYAorICBjb21tYW5kIGxpbmUgdG9vbC4KKyogT3ZlcnJpZGluZyB0aGUgZGVmYXVsdCB2ZXJzaW9uIGJ5IHNldHRpbmcgdGhlCisgIGBgREVWRUxPUEVSX0RJUmBgIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZworICBDTWFrZSBhbmQgdGhlIGJ1aWxkIHRvb2wuCisKK0NvbW1hbmQgbGluZSBgYC1HYGAgb3B0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDTWFrZSBjaG9vc2VzIGEgZ2VuZXJhdG9yIGJ5IGRlZmF1bHQgYmFzZWQgb24gdGhlCitwbGF0Zm9ybS4gIFVzdWFsbHksIHRoZSBkZWZhdWx0IGdlbmVyYXRvciBpcyBzdWZmaWNpZW50Cit0byBhbGxvdyB0aGUgdXNlciB0byBwcm9jZWVkIHRvIGJ1aWxkIHRoZSBzb2Z0d2FyZS4KKworVGhlIHVzZXIgbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGdlbmVyYXRvciB3aXRoCit0aGUgYGAtR2BgIG9wdGlvbjoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGNtYWtlIC4uIC1HIE5pbmphCisKK1RoZSBvdXRwdXQgb2YgYGBjbWFrZSAtLWhlbHBgYCBpbmNsdWRlcyBhIGxpc3Qgb2YKKzptYW51YWw6YGdlbmVyYXRvcnMgPGNtYWtlLWdlbmVyYXRvcnMoNyk+YCBhdmFpbGFibGUKK2ZvciB0aGUgdXNlciB0byBjaG9vc2UgZnJvbS4gIE5vdGUgdGhhdCBnZW5lcmF0b3IKK25hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZS4KKworT24gVW5peC1saWtlIHN5c3RlbXMgKGluY2x1ZGluZyBNYWMgT1MgWCksIHRoZQorOmdlbmVyYXRvcjpgVW5peCBNYWtlZmlsZXNgIGdlbmVyYXRvciBpcyB1c2VkIGJ5CitkZWZhdWx0LiAgQSB2YXJpYW50IG9mIHRoYXQgZ2VuZXJhdG9yIGNhbiBhbHNvIGJlIHVzZWQKK29uIFdpbmRvd3MgaW4gdmFyaW91cyBlbnZpcm9ubWVudHMsIHN1Y2ggYXMgdGhlCis6Z2VuZXJhdG9yOmBOTWFrZSBNYWtlZmlsZXNgIGFuZAorOmdlbmVyYXRvcjpgTWluR1cgTWFrZWZpbGVzYCBnZW5lcmF0b3IuICBUaGVzZSBnZW5lcmF0b3JzCitnZW5lcmF0ZSBhIGBgTWFrZWZpbGVgYCB2YXJpYW50IHdoaWNoIGNhbiBiZSBleGVjdXRlZAord2l0aCBgYG1ha2VgYCwgYGBnbWFrZWBgLCBgYG5tYWtlYGAgb3Igc2ltaWxhciB0b29scy4KK1NlZSB0aGUgaW5kaXZpZHVhbCBnZW5lcmF0b3IgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZQoraW5mb3JtYXRpb24gb24gdGFyZ2V0ZWQgZW52aXJvbm1lbnRzIGFuZCB0b29scy4KKworVGhlIDpnZW5lcmF0b3I6YE5pbmphYCBnZW5lcmF0b3IgaXMgYXZhaWxhYmxlIG9uIGFsbAorbWFqb3IgcGxhdGZvcm1zLiBgYG5pbmphYGAgaXMgYSBidWlsZCB0b29sIHNpbWlsYXIKK2luIHVzZS1jYXNlcyB0byBgYG1ha2VgYCwgYnV0IHdpdGggYSBmb2N1cyBvbgorcGVyZm9ybWFuY2UgYW5kIGVmZmljaWVuY3kuCisKK09uIFdpbmRvd3MsIDptYW51YWw6YGNtYWtlKDEpYCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZQorc29sdXRpb25zIGZvciB0aGUgVmlzdWFsIFN0dWRpbyBJREUuICBWaXN1YWwgU3R1ZGlvCit2ZXJzaW9ucyBtYXkgYmUgc3BlY2lmaWVkIGJ5IHRoZSBwcm9kdWN0IG5hbWUgb2YgdGhlCitJREUsIHdoaWNoIGluY2x1ZGVzIGEgZm91ci1kaWdpdCB5ZWFyLiAgQWxpYXNlcyBhcmUKK3Byb3ZpZGVkIGZvciBvdGhlciBtZWFucyBieSB3aGljaCBWaXN1YWwgU3R1ZGlvCit2ZXJzaW9ucyBhcmUgc29tZXRpbWVzIHJlZmVycmVkIHRvLCBzdWNoIGFzIHR3bworZGlnaXRzIHdoaWNoIGNvcnJlc3BvbmQgdG8gdGhlIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUKK1Zpc3VhbEMrKyBjb21waWxlciwgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgY21ha2UgLi4gLUcgIlZpc3VhbCBTdHVkaW8gMjAxOSIKKyAgJCBjbWFrZSAuLiAtRyAiVmlzdWFsIFN0dWRpbyAxNiIKKyAgJCBjbWFrZSAuLiAtRyAiVmlzdWFsIFN0dWRpbyAxNiAyMDE5IgorCitWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvcnMgY2FuIHRhcmdldCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4KK09uZSBjYW4gc3BlY2lmeSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSB1c2luZyB0aGUgYC1BYCBvcHRpb246CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgY21ha2UgLi4gLUcgIlZpc3VhbCBTdHVkaW8gMjAxOSIgLUEgeDY0CisgIGNtYWtlIC4uIC1HICJWaXN1YWwgU3R1ZGlvIDE2IiAtQSBBUk0KKyAgY21ha2UgLi4gLUcgIlZpc3VhbCBTdHVkaW8gMTYgMjAxOSIgLUEgQVJNNjQKKworT24gQXBwbGUsIHRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgZ2VuZXJhdG9yIG1heSBiZSB1c2VkIHRvCitnZW5lcmF0ZSBwcm9qZWN0IGZpbGVzIGZvciB0aGUgWGNvZGUgSURFLgorCitTb21lIElERXMgc3VjaCBhcyBLRGV2ZWxvcDQsIFF0Q3JlYXRvciBhbmQgQ0xpb24gaGF2ZQorbmF0aXZlIHN1cHBvcnQgZm9yIENNYWtlLWJhc2VkIGJ1aWxkc3lzdGVtcy4gIFRob3NlIElERXMKK3Byb3ZpZGUgdXNlciBpbnRlcmZhY2UgZm9yIHNlbGVjdGluZyBhbiB1bmRlcmx5aW5nCitnZW5lcmF0b3IgdG8gdXNlLCB0eXBpY2FsbHkgYSBjaG9pY2UgYmV0d2VlbiBhIGBgTWFrZWZpbGVgYAorb3IgYSBgYE5pbmphYGAgYmFzZWQgZ2VuZXJhdG9yLgorCitOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgZ2VuZXJhdG9yCit3aXRoIGBgLUdgYCBhZnRlciB0aGUgZmlyc3QgaW52b2NhdGlvbiBvZiBDTWFrZS4gIFRvCitjaGFuZ2UgdGhlIGdlbmVyYXRvciwgdGhlIGJ1aWxkIGRpcmVjdG9yeSBtdXN0IGJlCitkZWxldGVkIGFuZCB0aGUgYnVpbGQgbXVzdCBiZSBzdGFydGVkIGZyb20gc2NyYXRjaC4KKworV2hlbiBnZW5lcmF0aW5nIFZpc3VhbCBTdHVkaW8gcHJvamVjdCBhbmQgc29sdXRpb25zCitmaWxlcyBzZXZlcmFsIG90aGVyIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB1c2Ugd2hlbgoraW5pdGlhbGx5IHJ1bm5pbmcgOm1hbnVhbDpgY21ha2UoMSlgLgorCitUaGUgVmlzdWFsIFN0dWRpbyB0b29sc2V0IGNhbiBiZSBzcGVjaWZpZWQgd2l0aCB0aGUKK2BgLVRgYCBvcHRpb246CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgICAkICMgQnVpbGQgd2l0aCB0aGUgY2xhbmctY2wgdG9vbHNldAorICAgICQgY21ha2UuZXhlIC4uIC1HICJWaXN1YWwgU3R1ZGlvIDE2IDIwMTkiIC1BIHg2NCAtVCBMTFZNCisgICAgJCAjIEJ1aWxkIHRhcmdldGluZyBXaW5kb3dzIFhQCisgICAgJCBjbWFrZS5leGUgLi4gLUcgIlZpc3VhbCBTdHVkaW8gMTYgMjAxOSIgLUEgeDY0IC1UIHYxMjBfeHAKKworV2hlcmVhcyB0aGUgYGAtQWBgIG9wdGlvbiBzcGVjaWZpZXMgdGhlIF90YXJnZXRfCithcmNoaXRlY3R1cmUsIHRoZSBgYC1UYGAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKK2RldGFpbHMgb2YgdGhlIHRvb2xjaGFpbiB1c2VkLiAgRm9yIGV4YW1wbGUsIGAtVGhvc3Q9eDY0YAorY2FuIGJlIGdpdmVuIHRvIHNlbGVjdCB0aGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGhvc3QKK3Rvb2xzLiAgVGhlIGZvbGxvd2luZyBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSA2NC1iaXQKK3Rvb2xzIGFuZCBhbHNvIGJ1aWxkIGZvciBhIDY0LWJpdCB0YXJnZXQgYXJjaGl0ZWN0dXJlOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICAgJCBjbWFrZSAuLiAtRyAiVmlzdWFsIFN0dWRpbyAxNiAyMDE5IiAtQSB4NjQgLVRob3N0PXg2NAorCitDaG9vc2luZyBhIGdlbmVyYXRvciBpbiBjbWFrZS1ndWkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgIkNvbmZpZ3VyZSIgYnV0dG9uIHRyaWdnZXJzIGEgbmV3IGRpYWxvZyB0bworc2VsZWN0IHRoZSBDTWFrZSBnZW5lcmF0b3IgdG8gdXNlLgorCisuLiBpbWFnZTo6IC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1Db25maWd1cmUtRGlhbG9nLnBuZworICAgOmFsdDogQ29uZmlndXJpbmcgYSBnZW5lcmF0b3IKKworQWxsIGdlbmVyYXRvcnMgYXZhaWxhYmxlIG9uIHRoZSBjb21tYW5kIGxpbmUgYXJlIGFsc28KK2F2YWlsYWJsZSBpbiA6bWFudWFsOmBjbWFrZS1ndWkoMSlgLgorCisuLiBpbWFnZTo6IC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1DaG9vc2UtR2VuZXJhdG9yLnBuZworICAgOmFsdDogQ2hvb3NpbmcgYSBnZW5lcmF0b3IKKworV2hlbiBjaG9vc2luZyBhIFZpc3VhbCBTdHVkaW8gZ2VuZXJhdG9yLCBmdXJ0aGVyIG9wdGlvbnMKK2FyZSBhdmFpbGFibGUgdG8gc2V0IGFuIGFyY2hpdGVjdHVyZSB0byBnZW5lcmF0ZSBmb3IuCisKKy4uIGltYWdlOjogL21hbnVhbC9WUy1DaG9vc2UtQXJjaC5wbmcKKyAgIDphbHQ6IENob29zaW5nIGFuIGFyY2hpdGVjdHVyZSBmb3IgVmlzdWFsIFN0dWRpbyBnZW5lcmF0b3JzCisKKy4uIF9gU2V0dGluZyBCdWlsZCBWYXJpYWJsZXNgOgorCitTZXR0aW5nIEJ1aWxkIFZhcmlhYmxlcworPT09PT09PT09PT09PT09PT09PT09PT0KKworU29mdHdhcmUgcHJvamVjdHMgb2Z0ZW4gcmVxdWlyZSB2YXJpYWJsZXMgdG8gYmUKK3NldCBvbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4gaW52b2tpbmcgQ01ha2UuICBTb21lIG9mCit0aGUgbW9zdCBjb21tb25seSB1c2VkIENNYWtlIHZhcmlhYmxlcyBhcmUgbGlzdGVkIGluCit0aGUgdGFibGUgYmVsb3c6CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBWYXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVhbmluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIDp2YXJpYWJsZTpgQ01BS0VfUFJFRklYX1BBVEhgICAgICAgICAgICAgICBQYXRoIHRvIHNlYXJjaCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmd1aWRlOmBkZXBlbmRlbnQgcGFja2FnZXMgPFVzaW5nIERlcGVuZGVuY2llcyBHdWlkZT5gCisgOnZhcmlhYmxlOmBDTUFLRV9NT0RVTEVfUEFUSGAgICAgICAgICAgICAgIFBhdGggdG8gc2VhcmNoIGZvciBhZGRpdGlvbmFsIENNYWtlIG1vZHVsZXMKKyA6dmFyaWFibGU6YENNQUtFX0JVSUxEX1RZUEVgICAgICAgICAgICAgICAgQnVpbGQgY29uZmlndXJhdGlvbiwgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYERlYnVnYGAgb3IgYGBSZWxlYXNlYGAsIGRldGVybWluaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnL29wdGltaXphdGlvbiBmbGFncy4gIFRoaXMgaXMgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudCBmb3Igc2luZ2xlLWNvbmZpZ3VyYXRpb24gYnVpbGRzeXN0ZW1zIHN1Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYGBNYWtlZmlsZWBgIGFuZCBgYE5pbmphYGAuICBNdWx0aS1jb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkc3lzdGVtcyBzdWNoIGFzIHRob3NlIGZvciBWaXN1YWwgU3R1ZGlvIGFuZCBYY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgdGhpcyBzZXR0aW5nLgorIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgICAgICAgICAgICBMb2NhdGlvbiB0byBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSB0byB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGluc3RhbGxgYCBidWlsZCB0YXJnZXQKKyA6dmFyaWFibGU6YENNQUtFX1RPT0xDSEFJTl9GSUxFYCAgICAgICAgICAgRmlsZSBjb250YWluaW5nIGNyb3NzLWNvbXBpbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1hbnVhbDpgdG9vbGNoYWlucyBhbmQgc3lzcm9vdHMgPGNtYWtlLXRvb2xjaGFpbnMoNyk+YC4KKyA6dmFyaWFibGU6YEJVSUxEX1NIQVJFRF9MSUJTYCAgICAgICAgICAgICAgV2hldGhlciB0byBidWlsZCBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBzdGF0aWMgbGlicmFyaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzIHVzZWQgd2l0aG91dCBhIHR5cGUKKyA6dmFyaWFibGU6YENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTYCAgR2VuZXJhdGUgYSBgYGNvbXBpbGVfY29tbWFuZHMuanNvbmBgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIHVzZSB3aXRoIGNsYW5nLWJhc2VkIHRvb2xzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK090aGVyIHByb2plY3Qtc3BlY2lmaWMgdmFyaWFibGVzIG1heSBiZSBhdmFpbGFibGUKK3RvIGNvbnRyb2wgYnVpbGRzLCBzdWNoIGFzIGVuYWJsaW5nIG9yIGRpc2FibGluZworY29tcG9uZW50cyBvZiB0aGUgcHJvamVjdC4KKworVGhlcmUgaXMgbm8gY29udmVudGlvbiBwcm92aWRlZCBieSBDTWFrZSBmb3IgaG93CitzdWNoIHZhcmlhYmxlcyBhcmUgbmFtZWQgYmV0d2VlbiBkaWZmZXJlbnQKK3Byb3ZpZGVkIGJ1aWxkc3lzdGVtcywgZXhjZXB0IHRoYXQgdmFyaWFibGVzIHdpdGgKK3RoZSBwcmVmaXggYGBDTUFLRV9gYCB1c3VhbGx5IHJlZmVyIHRvIG9wdGlvbnMKK3Byb3ZpZGVkIGJ5IENNYWtlIGl0c2VsZiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCitpbiB0aGlyZC1wYXJ0eSBvcHRpb25zLCB3aGljaCBzaG91bGQgdXNlCit0aGVpciBvd24gcHJlZml4IGluc3RlYWQuICBUaGUKKzptYW51YWw6YGNtYWtlLWd1aSgxKWAgdG9vbCBjYW4gZGlzcGxheSBvcHRpb25zCitpbiBncm91cHMgZGVmaW5lZCBieSB0aGVpciBwcmVmaXgsIHNvIGl0IG1ha2VzCitzZW5zZSBmb3IgdGhpcmQgcGFydGllcyB0byBlbnN1cmUgdGhhdCB0aGV5IHVzZSBhCitzZWxmLWNvbnNpc3RlbnQgcHJlZml4LgorCitTZXR0aW5nIHZhcmlhYmxlcyBvbiB0aGUgY29tbWFuZCBsaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NNYWtlIHZhcmlhYmxlcyBjYW4gYmUgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUgZWl0aGVyCit3aGVuIGNyZWF0aW5nIHRoZSBpbml0aWFsIGJ1aWxkOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICAgJCBta2RpciBidWlsZAorICAgICQgY2QgYnVpbGQKKyAgICAkIGNtYWtlIC4uIC1HIE5pbmphIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZworCitvciBsYXRlciBvbiBhIHN1YnNlcXVlbnQgaW52b2NhdGlvbiBvZgorOm1hbnVhbDpgY21ha2UoMSlgOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICAgJCBjZCBidWlsZAorICAgICQgY21ha2UgLiAtRENNQUtFX0JVSUxEX1RZUEU9RGVidWcKKworVGhlIGBgLVVgYCBmbGFnIG1heSBiZSB1c2VkIHRvIHVuc2V0IHZhcmlhYmxlcworb24gdGhlIDptYW51YWw6YGNtYWtlKDEpYCBjb21tYW5kIGxpbmU6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgICAkIGNkIGJ1aWxkCisgICAgJCBjbWFrZSAuIC1VTXlQYWNrYWdlX0RJUgorCitBIENNYWtlIGJ1aWxkc3lzdGVtIHdoaWNoIHdhcyBpbml0aWFsbHkgY3JlYXRlZAorb24gdGhlIGNvbW1hbmQgbGluZSBjYW4gYmUgbW9kaWZpZWQgdXNpbmcgdGhlCis6bWFudWFsOmBjbWFrZS1ndWkoMSlgIGFuZCB2aWNlLXZlcnNhLgorCitUaGUgOm1hbnVhbDpgY21ha2UoMSlgIHRvb2wgYWxsb3dzIHNwZWNpZnlpbmcgYQorZmlsZSB0byB1c2UgdG8gcG9wdWxhdGUgdGhlIGluaXRpYWwgY2FjaGUgdXNpbmcKK3RoZSBgYC1DYGAgb3B0aW9uLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNpbXBsaWZ5Citjb21tYW5kcyBhbmQgc2NyaXB0cyB3aGljaCByZXBlYXRlZGx5IHJlcXVpcmUgdGhlCitzYW1lIGNhY2hlIGVudHJpZXMuCisKK1NldHRpbmcgdmFyaWFibGVzIHdpdGggY21ha2UtZ3VpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWYXJpYWJsZXMgbWF5IGJlIHNldCBpbiB0aGUgY21ha2UtZ3VpIHVzaW5nIHRoZSAiQWRkIEVudHJ5IgorYnV0dG9uLiAgVGhpcyB0cmlnZ2VycyBhIG5ldyBkaWFsb2cgdG8gc2V0IHRoZSB2YWx1ZSBvZgordGhlIHZhcmlhYmxlLgorCisuLiBpbWFnZTo6IC9ndWlkZS91c2VyLWludGVyYWN0aW9uL0dVSS1BZGQtRW50cnkucG5nCisgICA6YWx0OiBFZGl0aW5nIGEgY2FjaGUgZW50cnkKKworVGhlIG1haW4gdmlldyBvZiB0aGUgOm1hbnVhbDpgY21ha2UtZ3VpKDEpYCB1c2VyIGludGVyZmFjZQorY2FuIGJlIHVzZWQgdG8gZWRpdCBleGlzdGluZyB2YXJpYWJsZXMuCisKK1RoZSBDTWFrZSBDYWNoZQorLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gQ01ha2UgaXMgZXhlY3V0ZWQsIGl0IG5lZWRzIHRvIGZpbmQgdGhlIGxvY2F0aW9ucyBvZgorY29tcGlsZXJzLCB0b29scyBhbmQgZGVwZW5kZW5jaWVzLiAgSXQgYWxzbyBuZWVkcyB0byBiZQorYWJsZSB0byBjb25zaXN0ZW50bHkgcmUtZ2VuZXJhdGUgYSBidWlsZHN5c3RlbSB0byB1c2UgdGhlCitzYW1lIGNvbXBpbGUvbGluayBmbGFncyBhbmQgcGF0aHMgdG8gZGVwZW5kZW5jaWVzLiAgU3VjaAorcGFyYW1ldGVycyBhcmUgYWxzbyByZXF1aXJlZCB0byBiZSBjb25maWd1cmFibGUgYnkgdGhlCit1c2VyIGJlY2F1c2UgdGhleSBhcmUgcGF0aHMgYW5kIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlCit1c2VycyBzeXN0ZW0uCisKK1doZW4gaXQgaXMgZmlyc3QgZXhlY3V0ZWQsIENNYWtlIGdlbmVyYXRlcyBhCitgYENNYWtlQ2FjaGUudHh0YGAgZmlsZSBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IGNvbnRhaW5pbmcKK2tleS12YWx1ZSBwYWlycyBmb3Igc3VjaCBhcnRpZmFjdHMuICBUaGUgY2FjaGUgZmlsZSBjYW4gYmUKK3ZpZXdlZCBvciBlZGl0ZWQgYnkgdGhlIHVzZXIgYnkgcnVubmluZyB0aGUKKzptYW51YWw6YGNtYWtlLWd1aSgxKWAgb3IgOm1hbnVhbDpgY2NtYWtlKDEpYCB0b29sLiAgVGhlCit0b29scyBwcm92aWRlIGFuIGludGVyYWN0aXZlIGludGVyZmFjZSBmb3IgcmUtY29uZmlndXJpbmcKK3RoZSBwcm92aWRlZCBzb2Z0d2FyZSBhbmQgcmUtZ2VuZXJhdGluZyB0aGUgYnVpbGRzeXN0ZW0sCithcyBpcyBuZWVkZWQgYWZ0ZXIgZWRpdGluZyBjYWNoZWQgdmFsdWVzLiAgRWFjaCBjYWNoZQorZW50cnkgbWF5IGhhdmUgYW4gYXNzb2NpYXRlZCBzaG9ydCBoZWxwIHRleHQgd2hpY2ggaXMKK2Rpc3BsYXllZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UgdG9vbHMuCisKK1RoZSBjYWNoZSBlbnRyaWVzIG1heSBhbHNvIGhhdmUgYSB0eXBlIHRvIHNpZ25pZnkgaG93IGl0CitzaG91bGQgYmUgcHJlc2VudGVkIGluIHRoZSB1c2VyIGludGVyZmFjZS4gIEZvciBleGFtcGxlLAorYSBjYWNoZSBlbnRyeSBvZiB0eXBlIGBgQk9PTGBgIGNhbiBiZSBlZGl0ZWQgYnkgYQorY2hlY2tib3ggaW4gYSB1c2VyIGludGVyZmFjZSwgYSBgYFNUUklOR2BgIGNhbiBiZSBlZGl0ZWQKK2luIGEgdGV4dCBmaWVsZCwgYW5kIGEgYGBGSUxFUEFUSGBgIHdoaWxlIHNpbWlsYXIgdG8gYQorYGBTVFJJTkdgYCBzaG91bGQgYWxzbyBwcm92aWRlIGEgd2F5IHRvIGxvY2F0ZSBmaWxlc3lzdGVtCitwYXRocyB1c2luZyBhIGZpbGUgZGlhbG9nLiAgQW4gZW50cnkgb2YgdHlwZSBgYFNUUklOR2BgCittYXkgcHJvdmlkZSBhIHJlc3RyaWN0ZWQgbGlzdCBvZiBhbGxvd2VkIHZhbHVlcyB3aGljaCBhcmUKK3RoZW4gcHJvdmlkZWQgaW4gYSBkcm9wLWRvd24gbWVudSBpbiB0aGUKKzptYW51YWw6YGNtYWtlLWd1aSgxKWAgdXNlciBpbnRlcmZhY2UgKHNlZSB0aGUKKzpwcm9wX2NhY2hlOmBTVFJJTkdTYCBjYWNoZSBwcm9wZXJ0eSkuCisKK1RoZSBDTWFrZSBmaWxlcyBzaGlwcGVkIHdpdGggYSBzb2Z0d2FyZSBwYWNrYWdlIG1heSBhbHNvCitkZWZpbmUgYm9vbGVhbiB0b2dnbGUgb3B0aW9ucyB1c2luZyB0aGUgOmNvbW1hbmQ6YG9wdGlvbmAKK2NvbW1hbmQuICBUaGUgY29tbWFuZCBjcmVhdGVzIGEgY2FjaGUgZW50cnkgd2hpY2ggaGFzIGEKK2hlbHAgdGV4dCBhbmQgYSBkZWZhdWx0IHZhbHVlLiAgU3VjaCBjYWNoZSBlbnRyaWVzIGFyZQordHlwaWNhbGx5IHNwZWNpZmljIHRvIHRoZSBwcm92aWRlZCBzb2Z0d2FyZSBhbmQgYWZmZWN0Cit0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYnVpbGQsIHN1Y2ggYXMgd2hldGhlciB0ZXN0cworYW5kIGV4YW1wbGVzIGFyZSBidWlsdCwgd2hldGhlciB0byBidWlsZCB3aXRoIGV4Y2VwdGlvbnMKK2VuYWJsZWQgZXRjLgorCitJbnZva2luZyB0aGUgQnVpbGRzeXN0ZW0KKz09PT09PT09PT09PT09PT09PT09PT09PQorCitBZnRlciBnZW5lcmF0aW5nIHRoZSBidWlsZHN5c3RlbSwgdGhlIHNvZnR3YXJlIGNhbiBiZQorYnVpbHQgYnkgaW52b2tpbmcgdGhlIHBhcnRpY3VsYXIgYnVpbGQgdG9vbC4gIEluIHRoZQorY2FzZSBvZiB0aGUgSURFIGdlbmVyYXRvcnMsIHRoaXMgY2FuIGludm9sdmUgbG9hZGluZwordGhlIGdlbmVyYXRlZCBwcm9qZWN0IGZpbGUgaW50byB0aGUgSURFIHRvIGludm9rZSB0aGUKK2J1aWxkLgorCitDTWFrZSBpcyBhd2FyZSBvZiB0aGUgc3BlY2lmaWMgYnVpbGQgdG9vbCBuZWVkZWQgdG8gaW52b2tlCithIGJ1aWxkIHNvIGluIGdlbmVyYWwsIHRvIGJ1aWxkIGEgYnVpbGRzeXN0ZW0gb3IgcHJvamVjdAorZnJvbSB0aGUgY29tbWFuZCBsaW5lIGFmdGVyIGdlbmVyYXRpbmcsIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgbWF5IGJlIGludm9rZWQgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeToKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGNtYWtlIC0tYnVpbGQgLgorCitUaGUgYGAtLWJ1aWxkYGAgZmxhZyBlbmFibGVzIGEgcGFydGljdWxhciBtb2RlIG9mCitvcGVyYXRpb24gZm9yIHRoZSA6bWFudWFsOmBjbWFrZSgxKWAgdG9vbC4gIEl0IGludm9rZXMKK3RoZSAgOnZhcmlhYmxlOmBDTUFLRV9NQUtFX1BST0dSQU1gIGNvbW1hbmQgYXNzb2NpYXRlZAord2l0aCB0aGUgOm1hbnVhbDpgZ2VuZXJhdG9yIDxjbWFrZS1nZW5lcmF0b3JzKDcpPmAsIG9yCit0aGUgYnVpbGQgdG9vbCBjb25maWd1cmVkIGJ5IHRoZSB1c2VyLgorCitUaGUgYGAtLWJ1aWxkYGAgbW9kZSBhbHNvIGFjY2VwdHMgdGhlIHBhcmFtZXRlcgorYGAtLXRhcmdldGBgIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHRhcmdldCB0byBidWlsZCwKK2ZvciBleGFtcGxlIGEgcGFydGljdWxhciBsaWJyYXJ5LCBleGVjdXRhYmxlIG9yCitjdXN0b20gdGFyZ2V0LCBvciBhIHBhcnRpY3VsYXIgc3BlY2lhbCB0YXJnZXQgbGlrZQorYGBpbnN0YWxsYGA6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgJCBjbWFrZSAtLWJ1aWxkIC4gLS10YXJnZXQgbXlleGUKKworVGhlIGBgLS1idWlsZGBgIG1vZGUgYWxzbyBhY2NlcHRzIGEgYGAtLWNvbmZpZ2BgIHBhcmFtZXRlcgoraW4gdGhlIGNhc2Ugb2YgbXVsdGktY29uZmlnIGdlbmVyYXRvcnMgdG8gc3BlY2lmeSB3aGljaAorcGFydGljdWxhciBjb25maWd1cmF0aW9uIHRvIGJ1aWxkOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgY21ha2UgLS1idWlsZCAuIC0tdGFyZ2V0IG15ZXhlIC0tY29uZmlnIFJlbGVhc2UKKworVGhlIGBgLS1jb25maWdgYCBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiB0aGUgZ2VuZXJhdG9yCitnZW5lcmF0ZXMgYSBidWlsZHN5c3RlbSBzcGVjaWZpYyB0byBhIGNvbmZpZ3VyYXRpb24gd2hpY2gKK2lzIGNob3NlbiB3aGVuIGludm9raW5nIGNtYWtlIHdpdGggdGhlCis6dmFyaWFibGU6YENNQUtFX0JVSUxEX1RZUEVgIHZhcmlhYmxlLgorCitTb21lIGJ1aWxkc3lzdGVtcyBvbWl0IGRldGFpbHMgb2YgY29tbWFuZCBsaW5lcyBpbnZva2VkCitkdXJpbmcgdGhlIGJ1aWxkLiAgVGhlIGBgLS12ZXJib3NlYGAgZmxhZyBjYW4gYmUgdXNlZCB0bworY2F1c2UgdGhvc2UgY29tbWFuZCBsaW5lcyB0byBiZSBzaG93bjoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGNtYWtlIC0tYnVpbGQgLiAtLXRhcmdldCBteWV4ZSAtLXZlcmJvc2UKKworVGhlIGBgLS1idWlsZGBgIG1vZGUgY2FuIGFsc28gcGFzcyBwYXJ0aWN1bGFyIGNvbW1hbmQKK2xpbmUgb3B0aW9ucyB0byB0aGUgdW5kZXJseWluZyBidWlsZCB0b29sIGJ5IGxpc3RpbmcKK3RoZW0gYWZ0ZXIgYGAtLWBgLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNwZWNpZnkKK29wdGlvbnMgdG8gdGhlIGJ1aWxkIHRvb2wsIHN1Y2ggYXMgdG8gY29udGludWUgdGhlCitidWlsZCBhZnRlciBhIGZhaWxlZCBqb2IsIHdoZXJlIENNYWtlIGRvZXMgbm90Citwcm92aWRlIGEgaGlnaC1sZXZlbCB1c2VyIGludGVyZmFjZS4KKworRm9yIGFsbCBnZW5lcmF0b3JzLCBpdCBpcyBwb3NzaWJsZSB0byBydW4gdGhlIHVuZGVybHlpbmcKK2J1aWxkIHRvb2wgYWZ0ZXIgaW52b2tpbmcgQ01ha2UuICBGb3IgZXhhbXBsZSwgYGBtYWtlYGAKK21heSBiZSBleGVjdXRlZCBhZnRlciBnZW5lcmF0aW5nIHdpdGggdGhlCis6Z2VuZXJhdG9yOmBVbml4IE1ha2VmaWxlc2AgZ2VuZXJhdG9yIHRvIGludm9rZSB0aGUgYnVpbGQsCitvciBgYG5pbmphYGAgYWZ0ZXIgZ2VuZXJhdGluZyB3aXRoIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAKK2dlbmVyYXRvciBldGMuICBUaGUgSURFIGJ1aWxkc3lzdGVtcyB1c3VhbGx5IHByb3ZpZGUKK2NvbW1hbmQgbGluZSB0b29saW5nIGZvciBidWlsZGluZyBhIHByb2plY3Qgd2hpY2ggY2FuCithbHNvIGJlIGludm9rZWQuCisKK1NlbGVjdGluZyBhIFRhcmdldAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VhY2ggZXhlY3V0YWJsZSBhbmQgbGlicmFyeSBkZXNjcmliZWQgaW4gdGhlIENNYWtlIGZpbGVzCitpcyBhIGJ1aWxkIHRhcmdldCwgYW5kIHRoZSBidWlsZHN5c3RlbSBtYXkgZGVzY3JpYmUKK2N1c3RvbSB0YXJnZXRzLCBlaXRoZXIgZm9yIGludGVybmFsIHVzZSwgb3IgZm9yIHVzZXIKK2NvbnN1bXB0aW9uLCBmb3IgZXhhbXBsZSB0byBjcmVhdGUgZG9jdW1lbnRhdGlvbi4KKworQ01ha2UgcHJvdmlkZXMgc29tZSBidWlsdC1pbiB0YXJnZXRzIGZvciBhbGwgYnVpbGRzeXN0ZW1zCitwcm92aWRpbmcgQ01ha2UgZmlsZXMuCisKK2BgYWxsYGAKKyAgVGhlIGRlZmF1bHQgdGFyZ2V0IHVzZWQgYnkgYGBNYWtlZmlsZWBgIGFuZCBgYE5pbmphYGAKKyAgZ2VuZXJhdG9ycy4gIEJ1aWxkcyBhbGwgdGFyZ2V0cyBpbiB0aGUgYnVpbGRzeXN0ZW0sCisgIGV4Y2VwdCB0aG9zZSB3aGljaCBhcmUgZXhjbHVkZWQgYnkgdGhlaXIKKyAgOnByb3BfdGd0OmBFWENMVURFX0ZST01fQUxMYCB0YXJnZXQgcHJvcGVydHkgb3IKKyAgOnByb3BfZGlyOmBFWENMVURFX0ZST01fQUxMYCBkaXJlY3RvcnkgcHJvcGVydHkuICBUaGUKKyAgbmFtZSBgYEFMTF9CVUlMRGBgIGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZSBmb3IgdGhlCisgIFhjb2RlIGFuZCBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvcnMuCitgYGhlbHBgYAorICBMaXN0cyB0aGUgdGFyZ2V0cyBhdmFpbGFibGUgZm9yIGJ1aWxkLiAgVGhpcyB0YXJnZXQgaXMKKyAgYXZhaWxhYmxlIHdoZW4gdXNpbmcgdGhlIDpnZW5lcmF0b3I6YFVuaXggTWFrZWZpbGVzYCBvcgorICA6Z2VuZXJhdG9yOmBOaW5qYWAgZ2VuZXJhdG9yLCBhbmQgdGhlIGV4YWN0IG91dHB1dCBpcworICB0b29sLXNwZWNpZmljLgorYGBjbGVhbmBgCisgIERlbGV0ZSBidWlsdCBvYmplY3QgZmlsZXMgYW5kIG90aGVyIG91dHB1dCBmaWxlcy4gIFRoZQorICBgYE1ha2VmaWxlYGAgYmFzZWQgZ2VuZXJhdG9ycyBjcmVhdGUgYSBgYGNsZWFuYGAgdGFyZ2V0CisgIHBlciBkaXJlY3RvcnksIHNvIHRoYXQgYW4gaW5kaXZpZHVhbCBkaXJlY3RvcnkgY2FuIGJlCisgIGNsZWFuZWQuICBUaGUgYGBOaW5qYWBgIHRvb2wgcHJvdmlkZXMgaXRzIG93biBncmFudWxhcgorICBgYC10IGNsZWFuYGAgc3lzdGVtLgorYGB0ZXN0YGAKKyAgUnVucyB0ZXN0cy4gIFRoaXMgdGFyZ2V0IGlzIG9ubHkgYXV0b21hdGljYWxseSBhdmFpbGFibGUKKyAgaWYgdGhlIENNYWtlIGZpbGVzIHByb3ZpZGUgQ1Rlc3QtYmFzZWQgdGVzdHMuICBTZWUgYWxzbworICBgUnVubmluZyBUZXN0c2BfLgorYGBpbnN0YWxsYGAKKyAgSW5zdGFsbHMgdGhlIHNvZnR3YXJlLiAgVGhpcyB0YXJnZXQgaXMgb25seSBhdXRvbWF0aWNhbGx5CisgIGF2YWlsYWJsZSBpZiB0aGUgc29mdHdhcmUgZGVmaW5lcyBpbnN0YWxsIHJ1bGVzIHdpdGggdGhlCisgIDpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kLiAgU2VlIGFsc28KKyAgYFNvZnR3YXJlIEluc3RhbGxhdGlvbmBfLgorYGBwYWNrYWdlYGAKKyAgQ3JlYXRlcyBhIGJpbmFyeSBwYWNrYWdlLiAgVGhpcyB0YXJnZXQgaXMgb25seQorICBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZSBpZiB0aGUgQ01ha2UgZmlsZXMgcHJvdmlkZQorICBDUGFjay1iYXNlZCBwYWNrYWdlcy4KK2BgcGFja2FnZV9zb3VyY2VgYAorICBDcmVhdGVzIGEgc291cmNlIHBhY2thZ2UuICBUaGlzIHRhcmdldCBpcyBvbmx5CisgIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlIGlmIHRoZSBDTWFrZSBmaWxlcyBwcm92aWRlCisgIENQYWNrLWJhc2VkIHBhY2thZ2VzLgorCitGb3IgYGBNYWtlZmlsZWBgIGJhc2VkIHN5c3RlbXMsIGBgL2Zhc3RgYCB2YXJpYW50cyBvZiBiaW5hcnkKK2J1aWxkIHRhcmdldHMgYXJlIHByb3ZpZGVkLiBUaGUgYGAvZmFzdGBgIHZhcmlhbnRzIGFyZSB1c2VkCit0byBidWlsZCB0aGUgc3BlY2lmaWVkIHRhcmdldCB3aXRob3V0IHJlZ2FyZCBmb3IgaXRzCitkZXBlbmRlbmNpZXMuICBUaGUgZGVwZW5kZW5jaWVzIGFyZSBub3QgY2hlY2tlZCBhbmQKK2FyZSBub3QgcmVidWlsdCBpZiBvdXQgb2YgZGF0ZS4gIFRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAKK2dlbmVyYXRvciBpcyBzdWZmaWNpZW50bHkgZmFzdCBhdCBkZXBlbmRlbmN5IGNoZWNraW5nIHRoYXQKK3N1Y2ggdGFyZ2V0cyBhcmUgbm90IHByb3ZpZGVkIGZvciB0aGF0IGdlbmVyYXRvci4KKworYGBNYWtlZmlsZWBgIGJhc2VkIHN5c3RlbXMgYWxzbyBwcm92aWRlIGJ1aWxkLXRhcmdldHMgdG8KK3ByZXByb2Nlc3MsIGFzc2VtYmxlIGFuZCBjb21waWxlIGluZGl2aWR1YWwgZmlsZXMgaW4gYQorcGFydGljdWxhciBkaXJlY3RvcnkuCisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgJCBtYWtlIGZvby5jcHAuaQorICAkIG1ha2UgZm9vLmNwcC5zCisgICQgbWFrZSBmb28uY3BwLm8KKworVGhlIGZpbGUgZXh0ZW5zaW9uIGlzIGJ1aWx0IGludG8gdGhlIG5hbWUgb2YgdGhlIHRhcmdldAorYmVjYXVzZSBhbm90aGVyIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCBhIGRpZmZlcmVudAorZXh0ZW5zaW9uIG1heSBleGlzdC4gIEhvd2V2ZXIsIGJ1aWxkLXRhcmdldHMgd2l0aG91dCB0aGUKK2ZpbGUgZXh0ZW5zaW9uIGFyZSBhbHNvIHByb3ZpZGVkLgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgbWFrZSBmb28uaQorICAkIG1ha2UgZm9vLnMKKyAgJCBtYWtlIGZvby5vCisKK0luIGJ1aWxkc3lzdGVtcyB3aGljaCBjb250YWluIGBgZm9vLmNgYCBhbmQgYGBmb28uY3BwYGAsCitidWlsZGluZyB0aGUgYGBmb28uaWBgIHRhcmdldCB3aWxsIHByZXByb2Nlc3MgYm90aCBmaWxlcy4KKworU3BlY2lmeWluZyBhIEJ1aWxkIFByb2dyYW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBwcm9ncmFtIGludm9rZWQgYnkgdGhlIGBgLS1idWlsZGBgIG1vZGUgaXMgZGV0ZXJtaW5lZAorYnkgdGhlIDp2YXJpYWJsZTpgQ01BS0VfTUFLRV9QUk9HUkFNYCB2YXJpYWJsZS4gIEZvciBtb3N0CitnZW5lcmF0b3JzLCB0aGUgcGFydGljdWxhciBwcm9ncmFtIGRvZXMgbm90IG5lZWQgdG8gYmUKK2NvbmZpZ3VyZWQuCisKKz09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICBHZW5lcmF0b3IgICAgICAgICAgIERlZmF1bHQgbWFrZSBwcm9ncmFtICAgICAgICAgICBBbHRlcm5hdGl2ZXMKKz09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09CisgWENvZGUgICAgICAgICAgICAgICAgIGBgeGNvZGVidWlsZGBgCisgVW5peCBNYWtlZmlsZXMgICAgICAgIGBgbWFrZWBgCisgTk1ha2UgTWFrZWZpbGVzICAgICAgIGBgbm1ha2VgYCAgICAgICAgICAgICAgICAgICBgYGpvbWBgCisgTk1ha2UgTWFrZWZpbGVzIEpPTSAgIGBgam9tYGAgICAgICAgICAgICAgICAgICAgICBgYG5tYWtlYGAKKyBNaW5HVyBNYWtlZmlsZXMgICAgICAgYGBtaW5ndzMyLW1ha2VgYAorIE1TWVMgTWFrZWZpbGVzICAgICAgICBgYG1ha2VgYAorIE5pbmphICAgICAgICAgICAgICAgICBgYG5pbmphYGAKKyBWaXN1YWwgU3R1ZGlvICAgICAgICAgYGBtc2J1aWxkYGAKKyBXYXRjb20gV01ha2UgICAgICAgICAgYGB3bWFrZWBgCis9PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYGBqb21gYCB0b29sIGlzIGNhcGFibGUgb2YgcmVhZGluZyBtYWtlZmlsZXMgb2YgdGhlCitgYE5NYWtlYGAgZmxhdm9yIGFuZCBidWlsZGluZyBpbiBwYXJhbGxlbCwgd2hpbGUgdGhlCitgYG5tYWtlYGAgdG9vbCBhbHdheXMgYnVpbGRzIHNlcmlhbGx5LiAgQWZ0ZXIgZ2VuZXJhdGluZword2l0aCB0aGUgOmdlbmVyYXRvcjpgTk1ha2UgTWFrZWZpbGVzYCBnZW5lcmF0b3IgYSB1c2VyCitjYW4gcnVuIGBgam9tYGAgaW5zdGVhZCBvZiBgYG5tYWtlYGAuICBUaGUgYGAtLWJ1aWxkYGAKK21vZGUgd291bGQgYWxzbyB1c2UgYGBqb21gYCBpZiB0aGUKKzp2YXJpYWJsZTpgQ01BS0VfTUFLRV9QUk9HUkFNYCB3YXMgc2V0IHRvIGBgam9tYGAgd2hpbGUKK3VzaW5nIHRoZSA6Z2VuZXJhdG9yOmBOTWFrZSBNYWtlZmlsZXNgIGdlbmVyYXRvciwgYW5kCithcyBhIGNvbnZlbmllbmNlLCB0aGUgOmdlbmVyYXRvcjpgTk1ha2UgTWFrZWZpbGVzIEpPTWAKK2dlbmVyYXRvciBpcyBwcm92aWRlZCB0byBmaW5kIGBgam9tYGAgaW4gdGhlIG5vcm1hbCB3YXkKK2FuZCB1c2UgaXQgYXMgdGhlIDp2YXJpYWJsZTpgQ01BS0VfTUFLRV9QUk9HUkFNYC4gRm9yCitjb21wbGV0ZW5lc3MsIGBgbm1ha2VgYCBpcyBhbiBhbHRlcm5hdGl2ZSB0b29sIHdoaWNoCitjYW4gcHJvY2VzcyB0aGUgb3V0cHV0IG9mIHRoZQorOmdlbmVyYXRvcjpgTk1ha2UgTWFrZWZpbGVzIEpPTWAgZ2VuZXJhdG9yLCBidXQgZG9pbmcKK3NvIHdvdWxkIGJlIGEgcGVzc2ltaXNhdGlvbi4KKworU29mdHdhcmUgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9QUkVGSVhgIHZhcmlhYmxlIGNhbiBiZQorc2V0IGluIHRoZSBDTWFrZSBjYWNoZSB0byBzcGVjaWZ5IHdoZXJlIHRvIGluc3RhbGwgdGhlCitwcm92aWRlZCBzb2Z0d2FyZS4gIElmIHRoZSBwcm92aWRlZCBzb2Z0d2FyZSBoYXMgaW5zdGFsbAorcnVsZXMsIHNwZWNpZmllZCB1c2luZyB0aGUgOmNvbW1hbmQ6YGluc3RhbGxgIGNvbW1hbmQsCit0aGV5IHdpbGwgaW5zdGFsbCBhcnRpZmFjdHMgaW50byB0aGF0IHByZWZpeC4gIE9uIFdpbmRvd3MsCit0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gbG9jYXRpb24gY29ycmVzcG9uZHMgdG8gdGhlCitgYFByb2dyYW1GaWxlc2BgIHN5c3RlbSBkaXJlY3Rvcnkgd2hpY2ggbWF5IGJlCithcmNoaXRlY3R1cmUgc3BlY2lmaWMuICBPbiBVbml4IGhvc3RzLCBgYC91c3IvbG9jYWxgYCBpcwordGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGxvY2F0aW9uLgorCitUaGUgOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1BSRUZJWGAgdmFyaWFibGUgYWx3YXlzCityZWZlcnMgdG8gdGhlIGluc3RhbGxhdGlvbiBwcmVmaXggb24gdGhlIHRhcmdldAorZmlsZXN5c3RlbS4KKworSW4gY3Jvc3MtY29tcGlsaW5nIG9yIHBhY2thZ2luZyBzY2VuYXJpb3Mgd2hlcmUgdGhlCitzeXNyb290IGlzIHJlYWQtb25seSBvciB3aGVyZSB0aGUgc3lzcm9vdCBzaG91bGQgb3RoZXJ3aXNlCityZW1haW4gcHJpc3RpbmUsIHRoZSA6dmFyaWFibGU6YENNQUtFX1NUQUdJTkdfUFJFRklYYAordmFyaWFibGUgY2FuIGJlIHNldCB0byBhIGxvY2F0aW9uIHRvIGFjdHVhbGx5IGluc3RhbGwKK3RoZSBmaWxlcy4KKworVGhlIGNvbW1hbmRzOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgY21ha2UgLi4gLURDTUFLRV9JTlNUQUxMX1BSRUZJWD0vdXNyL2xvY2FsIFwKKyAgICAtRENNQUtFX1NZU1JPT1Q9JEhPTUUvcm9vdCBcCisgICAgLURDTUFLRV9TVEFHSU5HX1BSRUZJWD0vdG1wL3BhY2thZ2UKKyAgJCBjbWFrZSAtLWJ1aWxkIC4KKyAgJCBjbWFrZSAtLWJ1aWxkIC4gLS10YXJnZXQgaW5zdGFsbAorCityZXN1bHQgaW4gZmlsZXMgYmVpbmcgaW5zdGFsbGVkIHRvIHBhdGhzIHN1Y2gKK2FzIGBgL3RtcC9wYWNrYWdlL2xpYi9saWJmb28uc29gYCBvbiB0aGUgaG9zdCBtYWNoaW5lLgorVGhlIGBgL3Vzci9sb2NhbGBgIGxvY2F0aW9uIG9uIHRoZSBob3N0IG1hY2hpbmUgaXMKK25vdCBhZmZlY3RlZC4KKworU29tZSBwcm92aWRlZCBzb2Z0d2FyZSBtYXkgc3BlY2lmeSBgYHVuaW5zdGFsbGBgIHJ1bGVzLAorYnV0IENNYWtlIGRvZXMgbm90IGdlbmVyYXRlIHN1Y2ggcnVsZXMgYnkgZGVmYXVsdCBpdHNlbGYuCisKK1J1bm5pbmcgVGVzdHMKKz09PT09PT09PT09PT0KKworVGhlIDptYW51YWw6YGN0ZXN0KDEpYCB0b29sIGlzIHNoaXBwZWQgd2l0aCB0aGUgQ01ha2UKK2Rpc3RyaWJ1dGlvbiB0byBleGVjdXRlIHByb3ZpZGVkIHRlc3RzIGFuZCByZXBvcnQKK3Jlc3VsdHMuICBUaGUgYGB0ZXN0YGAgYnVpbGQtdGFyZ2V0IGlzIHByb3ZpZGVkIHRvIHJ1bgorYWxsIGF2YWlsYWJsZSB0ZXN0cywgYnV0IHRoZSA6bWFudWFsOmBjdGVzdCgxKWAgdG9vbAorYWxsb3dzIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGljaCB0ZXN0cyB0byBydW4sIGhvdyB0bworcnVuIHRoZW0sIGFuZCBob3cgdG8gcmVwb3J0IHJlc3VsdHMuICBFeGVjdXRpbmcKKzptYW51YWw6YGN0ZXN0KDEpYCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IGlzIGVxdWl2YWxlbnQKK3RvIHJ1bm5pbmcgdGhlIGBgdGVzdGBgIHRhcmdldDoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGN0ZXN0CisKK0EgcmVndWxhciBleHByZXNzaW9uIGNhbiBiZSBwYXNzZWQgdG8gcnVuIG9ubHkgdGVzdHMKK3doaWNoIG1hdGNoIHRoZSBleHByZXNzaW9uLiAgVG8gcnVuIG9ubHkgdGVzdHMgd2l0aAorYGBRdGBgIGluIHRoZWlyIG5hbWU6CisKKy4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCisKKyAgJCBjdGVzdCAtUiBRdAorCitUZXN0cyBjYW4gYmUgZXhjbHVkZWQgYnkgcmVndWxhciBleHByZXNzaW9uIHRvby4gIFRvCitydW4gb25seSB0ZXN0cyB3aXRob3V0IGBgUXRgYCBpbiB0aGVpciBuYW1lOgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgY3Rlc3QgLUUgUXQKKworVGVzdHMgY2FuIGJlIHJ1biBpbiBwYXJhbGxlbCBieSBwYXNzaW5nIGBgLWpgYCBhcmd1bWVudHMKK3RvIDptYW51YWw6YGN0ZXN0KDEpYDoKKworLi4gY29kZS1ibG9jazo6IGNvbnNvbGUKKworICAkIGN0ZXN0IC1SIFF0IC1qOAorCitUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgOmVudnZhcjpgQ1RFU1RfUEFSQUxMRUxfTEVWRUxgCitjYW4gYWx0ZXJuYXRpdmVseSBiZSBzZXQgdG8gYXZvaWQgdGhlIG5lZWQgdG8gcGFzcworYGAtamBgLgorCitCeSBkZWZhdWx0IDptYW51YWw6YGN0ZXN0KDEpYCBkb2VzIG5vdCBwcmludCB0aGUgb3V0cHV0Citmcm9tIHRoZSB0ZXN0cy4gVGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBgYC1WYGAgKG9yCitgYC0tdmVyYm9zZWBgKSBlbmFibGVzIHZlcmJvc2UgbW9kZSB0byBwcmludCB0aGUKK291dHB1dCBmcm9tIGFsbCB0ZXN0cy4KK1RoZSBgYC0tb3V0cHV0LW9uLWZhaWx1cmVgYCBvcHRpb24gcHJpbnRzIHRoZSB0ZXN0CitvdXRwdXQgZm9yIGZhaWxpbmcgdGVzdHMgb25seS4gIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorOmVudnZhcjpgQ1RFU1RfT1VUUFVUX09OX0ZBSUxVUkVgCitjYW4gYmUgc2V0IHRvIGBgMWBgIGFzIGFuIGFsdGVybmF0aXZlIHRvIHBhc3NpbmcgdGhlCitgYC0tb3V0cHV0LW9uLWZhaWx1cmVgYCBvcHRpb24gdG8gOm1hbnVhbDpgY3Rlc3QoMSlgLgpkaWZmIC0tZ2l0IGEvSGVscC9ndWlkZS91c2luZy1kZXBlbmRlbmNpZXMvaW5kZXgucnN0IGIvSGVscC9ndWlkZS91c2luZy1kZXBlbmRlbmNpZXMvaW5kZXgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZGNjNTUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL2d1aWRlL3VzaW5nLWRlcGVuZGVuY2llcy9pbmRleC5yc3QKQEAgLTAsMCArMSwyMDAgQEAKK1VzaW5nIERlcGVuZGVuY2llcyBHdWlkZQorKioqKioqKioqKioqKioqKioqKioqKioqCisKKy4uIG9ubHk6OiBodG1sCisKKyAgIC4uIGNvbnRlbnRzOjoKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworRm9yIGRldmVsb3BlcnMgd2lzaGluZyB0byB1c2UgQ01ha2UgdG8gY29uc3VtZSBhIHRoaXJkCitwYXJ0eSBiaW5hcnkgcGFja2FnZSwgdGhlcmUgYXJlIG11bHRpcGxlIHBvc3NpYmlsaXRpZXMKK3JlZ2FyZGluZyBob3cgdG8gb3B0aW1hbGx5IGRvIHNvLCBkZXBlbmRpbmcgb24gaG93CitDTWFrZS1hd2FyZSB0aGUgdGhpcmQtcGFydHkgbGlicmFyeSBpcy4KKworQ01ha2UgZmlsZXMgcHJvdmlkZWQgd2l0aCBhIHNvZnR3YXJlIHBhY2thZ2UgY29udGFpbgoraW5zdHJ1Y3Rpb25zIGZvciBmaW5kaW5nIGVhY2ggYnVpbGQgZGVwZW5kZW5jeS4gIFNvbWUKK2J1aWxkIGRlcGVuZGVuY2llcyBhcmUgb3B0aW9uYWwgaW4gdGhhdCB0aGUgYnVpbGQgbWF5CitzdWNjZWVkIHdpdGggYSBkaWZmZXJlbnQgZmVhdHVyZSBzZXQgaWYgdGhlIGRlcGVuZGVuY3kKK2lzIG1pc3NpbmcsIGFuZCBzb21lIGRlcGVuZGVuY2llcyBhcmUgcmVxdWlyZWQuICBDTWFrZQorc2VhcmNoZXMgd2VsbC1rbm93biBsb2NhdGlvbnMgZm9yIGVhY2ggZGVwZW5kZW5jeSwgYW5kCit0aGUgcHJvdmlkZWQgc29mdHdhcmUgbWF5IHN1cHBseSBhZGRpdGlvbmFsIGhpbnRzIG9yCitsb2NhdGlvbnMgdG8gQ01ha2UgdG8gZmluZCBlYWNoIGRlcGVuZGVuY3kuCisKK0lmIGEgcmVxdWlyZWQgZGVwZW5kZW5jeSBpcyBub3QgZm91bmQgYnkKKzptYW51YWw6YGNtYWtlKDEpYCwgdGhlIGNhY2hlIGlzIHBvcHVsYXRlZCB3aXRoIGFuIGVudHJ5Cit3aGljaCBjb250YWlucyBhIGBgTk9URk9VTkRgYCB2YWx1ZS4gIFRoaXMgdmFsdWUgY2FuIGJlCityZXBsYWNlZCBieSBzcGVjaWZ5aW5nIGl0IG9uIHRoZSBjb21tYW5kIGxpbmUsIG9yIGluCit0aGUgOm1hbnVhbDpgY2NtYWtlKDEpYCBvciA6bWFudWFsOmBjbWFrZS1ndWkoMSlgIHRvb2wuCitTZWUgdGhlIDpndWlkZTpgVXNlciBJbnRlcmFjdGlvbiBHdWlkZWAgZm9yCittb3JlIGFib3V0IHNldHRpbmcgY2FjaGUgZW50cmllcy4KKworTGlicmFyaWVzIHByb3ZpZGluZyBDb25maWctZmlsZSBwYWNrYWdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbW9zdCBjb252ZW5pZW50IHdheSBmb3IgYSB0aGlyZC1wYXJ0eSB0byBwcm92aWRlIGxpYnJhcnkKK2JpbmFyaWVzIGZvciB1c2Ugd2l0aCBDTWFrZSBpcyB0byBwcm92aWRlCis6cmVmOmBDb25maWcgRmlsZSBQYWNrYWdlc2AuICBUaGVzZSBwYWNrYWdlcyBhcmUgdGV4dCBmaWxlcworc2hpcHBlZCB3aXRoIHRoZSBsaWJyYXJ5IHdoaWNoIGluc3RydWN0IENNYWtlIGhvdyB0byB1c2UgdGhlCitsaWJyYXJ5IGJpbmFyaWVzIGFuZCBhc3NvY2lhdGVkIGhlYWRlcnMsIGhlbHBlciB0b29scyBhbmQKK0NNYWtlIG1hY3JvcyBwcm92aWRlZCBieSB0aGUgbGlicmFyeS4KKworVGhlIGNvbmZpZyBmaWxlcyBjYW4gdXN1YWxseSBiZSBmb3VuZCBpbiBhIGRpcmVjdG9yeSB3aG9zZQorbmFtZSBtYXRjaGVzIHRoZSBwYXR0ZXJuIGBgbGliL2NtYWtlLzxQYWNrYWdlTmFtZT5gYCwgdGhvdWdoCit0aGV5IG1heSBiZSBpbiBvdGhlciBsb2NhdGlvbnMgaW5zdGVhZC4gIFRoZQorYGA8UGFja2FnZU5hbWU+YGAgY29ycmVzcG9uZHMgdG8gdXNlIGluIENNYWtlIGNvZGUgd2l0aCB0aGUKKzpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQgc3VjaCBhcworYGBmaW5kX3BhY2thZ2UoUGFja2FnZU5hbWUgUkVRVUlSRUQpYGAuCisKK1RoZSBgYGxpYi9jbWFrZS88UGFja2FnZU5hbWU+YGAgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhCitmaWxlIHdoaWNoIGlzIGVpdGhlciBuYW1lZCBgYDxQYWNrYWdlTmFtZT5Db25maWcuY21ha2VgYAorb3IgYGA8UGFja2FnZU5hbWU+LWNvbmZpZy5jbWFrZWBgLiAgVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQKK3RvIHRoZSBwYWNrYWdlIGZvciBDTWFrZS4gIEEgc2VwYXJhdGUgb3B0aW9uYWwgZmlsZSBuYW1lZAorYGA8UGFja2FnZU5hbWU+Q29uZmlnVmVyc2lvbi5jbWFrZWBgIG1heSBhbHNvIGV4aXN0IGluIHRoZQorZGlyZWN0b3J5LiAgVGhpcyBmaWxlIGlzIHVzZWQgYnkgQ01ha2UgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKK3RoZSB2ZXJzaW9uIG9mIHRoZSB0aGlyZCBwYXJ0eSBwYWNrYWdlIHNhdGlzZmllcyB1c2VzIG9mIHRoZQorOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgY29tbWFuZCB3aGljaCBzcGVjaWZ5IHZlcnNpb24KK2NvbnN0cmFpbnRzLiAgSXQgaXMgb3B0aW9uYWwgdG8gc3BlY2lmeSBhIHZlcnNpb24gd2hlbiB1c2luZworOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAsIGV2ZW4gaWYgYSBgYENvbmZpZ1ZlcnNpb25gYCBmaWxlIGlzCitwcmVzZW50LgorCitJZiB0aGUgYGBDb25maWcuY21ha2VgYCBmaWxlIGlzIGZvdW5kIGFuZCB0aGUKK29wdGlvbmFsbHktc3BlY2lmaWVkIHZlcnNpb24gaXMgc2F0aXNmaWVkLCB0aGVuIHRoZSBDTWFrZQorOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgY29tbWFuZCBjb25zaWRlcnMgdGhlIHBhY2thZ2UgdG8gYmUKK2ZvdW5kIGFuZCB0aGUgZW50aXJlIGxpYnJhcnkgcGFja2FnZSBpcyBhc3N1bWVkIHRvIGJlCitjb21wbGV0ZSBhcyBkZXNpZ25lZC4KKworVGhlcmUgbWF5IGJlIGFkZGl0aW9uYWwgZmlsZXMgcHJvdmlkaW5nIENNYWtlIG1hY3JvcyBvcgorOnJlZjpgaW1wb3J0ZWQgdGFyZ2V0c2AgZm9yIHlvdSB0byB1c2UuICBDTWFrZSBkb2VzIG5vdAorZW5mb3JjZSBhbnkgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZXNlCitmaWxlcy4gIFRoZXkgYXJlIHJlbGF0ZWQgdG8gdGhlIHByaW1hcnkgYGBDb25maWdgYCBmaWxlIGJ5Cit1c2Ugb2YgdGhlIENNYWtlIDpjb21tYW5kOmBpbmNsdWRlYCBjb21tYW5kLgorCis6Z3VpZGU6YEludm9raW5nIENNYWtlIDxVc2VyIEludGVyYWN0aW9uIEd1aWRlPmAgd2l0aCB0aGUKK2ludGVudCBvZiB1c2luZyBhIHBhY2thZ2Ugb2YgdGhpcmQgcGFydHkgYmluYXJpZXMgcmVxdWlyZXMKK3RoYXQgY21ha2UgOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgY29tbWFuZHMgc3VjY2VlZCBpbiBmaW5kaW5nCit0aGUgcGFja2FnZS4gIElmIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGFja2FnZSBpcyBpbiBhIGRpcmVjdG9yeQora25vd24gdG8gQ01ha2UsIHRoZSA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYCBjYWxsIHNob3VsZAorc3VjY2VlZC4gIFRoZSBkaXJlY3RvcmllcyBrbm93biB0byBjbWFrZSBhcmUgcGxhdGZvcm0tc3BlY2lmaWMuCitGb3IgZXhhbXBsZSwgcGFja2FnZXMgaW5zdGFsbGVkIG9uIExpbnV4IHdpdGggYSBzdGFuZGFyZAorc3lzdGVtIHBhY2thZ2UgbWFuYWdlciB3aWxsIGJlIGZvdW5kIGluIHRoZSBgYC91c3JgYCBwcmVmaXgKK2F1dG9tYXRpY2FsbHkuICBQYWNrYWdlcyBpbnN0YWxsZWQgaW4gYGBQcm9ncmFtIEZpbGVzYGAgb24KK1dpbmRvd3Mgd2lsbCBzaW1pbGFybHkgYmUgZm91bmQgYXV0b21hdGljYWxseS4KKworUGFja2FnZXMgd2hpY2ggYXJlIG5vdCBmb3VuZCBhdXRvbWF0aWNhbGx5IGFyZSBpbiBsb2NhdGlvbnMKK25vdCBwcmVkaWN0YWJsZSB0byBDTWFrZSBzdWNoIGFzIGBgL29wdC9teWxpYmBgIG9yCitgYCRIT01FL2Rldi9wcmVmaXhgYC4gIFRoaXMgaXMgYSBub3JtYWwgc2l0dWF0aW9uIGFuZCBDTWFrZQorcHJvdmlkZXMgc2V2ZXJhbCB3YXlzIGZvciB1c2VycyB0byBzcGVjaWZ5IHdoZXJlIHRvIGZpbmQKK3N1Y2ggbGlicmFyaWVzLgorCitUaGUgOnZhcmlhYmxlOmBDTUFLRV9QUkVGSVhfUEFUSGAgdmFyaWFibGUgbWF5IGJlCis6cmVmOmBzZXQgd2hlbiBpbnZva2luZyBDTWFrZSA8U2V0dGluZyBCdWlsZCBWYXJpYWJsZXM+YC4KK0l0IGlzIHRyZWF0ZWQgYXMgYSBsaXN0IG9mIHBhdGhzIHRvIHNlYXJjaCBmb3IKKzpyZWY6YENvbmZpZyBGaWxlIFBhY2thZ2VzYC4gIEEgcGFja2FnZSBpbnN0YWxsZWQgaW4KK2BgL29wdC9zb21lcGFja2FnZWBgIHdpbGwgdHlwaWNhbGx5IGluc3RhbGwgY29uZmlnIGZpbGVzCitzdWNoIGFzCitgYC9vcHQvc29tZXBhY2thZ2UvbGliL2NtYWtlL3NvbWVQYWNrYWdlL1NvbWVQYWNrYWdlQ29uZmlnLmNtYWtlYGAuCitJbiB0aGF0IGNhc2UsIGBgL29wdC9zb21lcGFja2FnZWBgIHNob3VsZCBiZSBhZGRlZCB0bworOnZhcmlhYmxlOmBDTUFLRV9QUkVGSVhfUEFUSGAuCisKK1RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYENNQUtFX1BSRUZJWF9QQVRIYGAgbWF5IGFsc28gYmUKK3BvcHVsYXRlZCB3aXRoIHByZWZpeGVzIHRvIHNlYXJjaCBmb3IgcGFja2FnZXMuICBMaWtlIHRoZQorYGBQQVRIYGAgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoaXMgaXMgYSBsaXN0IGFuZCBuZWVkcyB0byB1c2UKK3RoZSBwbGF0Zm9ybS1zcGVjaWZpYyBlbnZpcm9ubWVudCB2YXJpYWJsZSBsaXN0IGl0ZW0gc2VwYXJhdG9yCisoYGA6YGAgb24gVW5peCBhbmQgYGA7YGAgb24gV2luZG93cykuCisKK1RoZSA6dmFyaWFibGU6YENNQUtFX1BSRUZJWF9QQVRIYCB2YXJpYWJsZSBwcm92aWRlcyBjb252ZW5pZW5jZQoraW4gY2FzZXMgd2hlcmUgbXVsdGlwbGUgcHJlZml4ZXMgbmVlZCB0byBiZSBzcGVjaWZpZWQsIG9yIHdoZW4KK211bHRpcGxlIGRpZmZlcmVudCBwYWNrYWdlIGJpbmFyaWVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHNhbWUKK3ByZWZpeC4gIFBhdGhzIHRvIHBhY2thZ2VzIG1heSBhbHNvIGJlIHNwZWNpZmllZCBieSBzZXR0aW5nCit2YXJpYWJsZXMgbWF0Y2hpbmcgYGA8UGFja2FnZU5hbWU+X0RJUmBgLCBzdWNoIGFzCitgYFNvbWVQYWNrYWdlX0RJUmBgLiAgTm90ZSB0aGF0IHRoaXMgaXMgbm90IGEgcHJlZml4IGJ1dCBzaG91bGQKK2JlIGEgZnVsbCBwYXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSBjb25maWctc3R5bGUgcGFja2FnZQorZmlsZSwgc3VjaCBhcyBgYC9vcHQvc29tZXBhY2thZ2UvbGliL2NtYWtlL1NvbWVQYWNrYWdlL2BgIGluCit0aGUgYWJvdmUgZXhhbXBsZS4KKworSW1wb3J0ZWQgVGFyZ2V0cyBmcm9tIFBhY2thZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSB0aGlyZC1wYXJ0eSBwYWNrYWdlIHdoaWNoIHByb3ZpZGVzIGNvbmZpZy1maWxlIHBhY2thZ2VzIG1heQorYWxzbyBwcm92aWRlIDpyZWY6YEltcG9ydGVkIHRhcmdldHNgLiBUaGVzZSB3aWxsIGJlCitzcGVjaWZpZWQgaW4gZmlsZXMgY29udGFpbmluZyBjb25maWd1cmF0aW9uLXNwZWNpZmljIGZpbGUKK3BhdGhzIHJlbGV2YW50IHRvIHRoZSBwYWNrYWdlLCBzdWNoIGFzIGRlYnVnIGFuZCByZWxlYXNlCit2ZXJzaW9ucyBvZiBsaWJyYXJpZXMuCisKK09mdGVuIHRoZSB0aGlyZC1wYXJ0eSBwYWNrYWdlIGRvY3VtZW50YXRpb24gd2lsbCBwb2ludCBvdXQgdGhlCituYW1lcyBvZiBpbXBvcnRlZCB0YXJnZXRzIGF2YWlsYWJsZSBhZnRlciBhIHN1Y2Nlc3NmdWwKK2BgZmluZF9wYWNrYWdlYGAgZm9yIGEgbGlicmFyeS4gIFRob3NlIGltcG9ydGVkIHRhcmdldCBuYW1lcworY2FuIGJlIHVzZWQgd2l0aCB0aGUgOmNvbW1hbmQ6YHRhcmdldF9saW5rX2xpYnJhcmllc2AgY29tbWFuZC4KKworQSBjb21wbGV0ZSBleGFtcGxlIHdoaWNoIG1ha2VzIGEgc2ltcGxlIHVzZSBvZiBhIHRoaXJkIHBhcnR5CitsaWJyYXJ5IG1pZ2h0IGxvb2sgbGlrZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgICBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMCkKKyAgICBwcm9qZWN0KE15RXhlUHJvamVjdCBWRVJTSU9OIDEuMC4wKQorCisgICAgZmluZF9wYWNrYWdlKFNvbWVQYWNrYWdlIFJFUVVJUkVEKQorICAgIGFkZF9leGVjdXRhYmxlKE15RXhlIG1haW4uY3BwKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhNeUV4ZSBQUklWQVRFIFNvbWVQcmVmaXg6OkxpYk5hbWUpCisKK1NlZSA6bWFudWFsOmBjbWFrZS1idWlsZHN5c3RlbSg3KWAgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KK2Fib3V0IGRldmVsb3BpbmcgYSBDTWFrZSBidWlsZHN5c3RlbS4KKworTGlicmFyaWVzIG5vdCBQcm92aWRpbmcgQ29uZmlnLWZpbGUgUGFja2FnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXJkLXBhcnR5IGxpYnJhcmllcyB3aGljaCBkbyBub3QgcHJvdmlkZSBjb25maWctZmlsZSBwYWNrYWdlcworY2FuIHN0aWxsIGJlIGZvdW5kIHdpdGggdGhlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQsIGlmCithIGBgRmluZFNvbWVQYWNrYWdlLmNtYWtlYGAgZmlsZSBpcyBhdmFpbGFibGUuCisKK1RoZXNlIG1vZHVsZS1maWxlIHBhY2thZ2VzIGFyZSBkaWZmZXJlbnQgdG8gY29uZmlnLWZpbGUgcGFja2FnZXMKK2luIHRoYXQ6CisKKyMuIFRoZXkgc2hvdWxkIG5vdCBiZSBwcm92aWRlZCBieSB0aGUgdGhpcmQgcGFydHksIGV4Y2VwdAorICAgcGVyaGFwcyBpbiB0aGUgZm9ybSBvZiBkb2N1bWVudGF0aW9uCisjLiBUaGUgYXZhaWxhYmlsaXR5IG9mIGEgYGBGaW5kPFBhY2thZ2VOYW1lPi5jbWFrZWBgIGZpbGUgZG9lcworICAgbm90IGluZGljYXRlIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGJpbmFyaWVzIHRoZW1zZWx2ZXMuCisjLiBDTWFrZSBkb2VzIG5vdCBzZWFyY2ggdGhlIDp2YXJpYWJsZTpgQ01BS0VfUFJFRklYX1BBVEhgIGZvcgorICAgYGBGaW5kPFBhY2thZ2VOYW1lPi5jbWFrZWBgIGZpbGVzLiAgSW5zdGVhZCBDTWFrZSBzZWFyY2hlcworICAgZm9yIHN1Y2ggZmlsZXMgaW4gdGhlIDp2YXJpYWJsZTpgQ01BS0VfTU9EVUxFX1BBVEhgCisgICB2YXJpYWJsZS4gSXQgaXMgY29tbW9uIGZvciB1c2VycyB0byBzZXQgdGhlCisgICA6dmFyaWFibGU6YENNQUtFX01PRFVMRV9QQVRIYCB3aGVuIHJ1bm5pbmcgQ01ha2UsIGFuZCBpdCBpcworICAgY29tbW9uIGZvciBDTWFrZSBwcm9qZWN0cyB0byBhcHBlbmQgdG8KKyAgIDp2YXJpYWJsZTpgQ01BS0VfTU9EVUxFX1BBVEhgIHRvIGFsbG93IHVzZSBvZiBsb2NhbAorICAgbW9kdWxlLWZpbGUgcGFja2FnZXMuCisjLiBDTWFrZSBzaGlwcyBgYEZpbmQ8UGFja2FnZU5hbWU+LmNtYWtlYGAgZmlsZXMgZm9yIHNvbWUKKyAgIDptYW51YWw6YHRoaXJkIHBhcnR5IHBhY2thZ2VzIDxjbWFrZS1tb2R1bGVzKDcpPmAKKyAgIGZvciBjb252ZW5pZW5jZSBpbiBjYXNlcyB3aGVyZSB0aGUgdGhpcmQgcGFydHkgZG9lcworICAgbm90IHByb3ZpZGUgY29uZmlnLWZpbGUgcGFja2FnZXMgZGlyZWN0bHkuICBUaGVzZSBmaWxlcyBhcmUKKyAgIGEgbWFpbnRlbmFuY2UgYnVyZGVuIGZvciBDTWFrZSwgc28gbmV3IEZpbmQgbW9kdWxlcyBhcmUKKyAgIGdlbmVyYWxseSBub3QgYWRkZWQgdG8gQ01ha2UgYW55bW9yZS4gIFRoaXJkLXBhcnRpZXMgc2hvdWxkCisgICBwcm92aWRlIGNvbmZpZyBmaWxlIHBhY2thZ2VzIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIEZpbmQKKyAgIG1vZHVsZSB0byBiZSBwcm92aWRlZCBieSBDTWFrZS4KKworTW9kdWxlLWZpbGUgcGFja2FnZXMgbWF5IGFsc28gcHJvdmlkZSA6cmVmOmBJbXBvcnRlZCB0YXJnZXRzYC4KK0EgY29tcGxldGUgZXhhbXBsZSB3aGljaCBmaW5kcyBzdWNoIGEgcGFja2FnZSBtaWdodCBsb29rCitsaWtlOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICAgIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEwKQorICAgIHByb2plY3QoTXlFeGVQcm9qZWN0IFZFUlNJT04gMS4wLjApCisKKyAgICBmaW5kX3BhY2thZ2UoUE5HIFJFUVVJUkVEKQorCisgICAgIyBBZGQgcGF0aCB0byBhIEZpbmRTb21lUGFja2FnZS5jbWFrZSBmaWxlCisgICAgbGlzdChBUFBFTkQgQ01BS0VfTU9EVUxFX1BBVEggIiR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2UiKQorICAgIGZpbmRfcGFja2FnZShTb21lUGFja2FnZSBSRVFVSVJFRCkKKworICAgIGFkZF9leGVjdXRhYmxlKE15RXhlIG1haW4uY3BwKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhNeUV4ZSBQUklWQVRFCisgICAgICAgIFBORzo6UE5HCisgICAgICAgIFNvbWVQcmVmaXg6OkxpYk5hbWUKKyAgICApCisKK1RoZSA6dmFyaWFibGU6YDxQYWNrYWdlTmFtZT5fUk9PVGAgdmFyaWFibGUgaXMgYWxzbworc2VhcmNoZWQgYXMgYSBwcmVmaXggZm9yIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNhbGxzIHVzaW5nCittb2R1bGUtZmlsZSBwYWNrYWdlcyBzdWNoIGFzIGBgRmluZFNvbWVQYWNrYWdlYGAuCmRpZmYgLS1naXQgYS9IZWxwL2luZGV4LnJzdCBiL0hlbHAvaW5kZXgucnN0CmluZGV4IGNjNmNlZTYuLjRkOWE5YzggMTAwNjQ0Ci0tLSBhL0hlbHAvaW5kZXgucnN0CisrKyBiL0hlbHAvaW5kZXgucnN0CkBAIC0xLDUgKzEsMzQgQEAKIC4uIHRpdGxlOjogQ01ha2UgUmVmZXJlbmNlIERvY3VtZW50YXRpb24KIAorSW50cm9kdWN0aW9uCisjIyMjIyMjIyMjIyMKKworQ01ha2UgaXMgYSB0b29sIHRvIG1hbmFnZSBidWlsZGluZyBvZiBzb3VyY2UgY29kZS4gIE9yaWdpbmFsbHksIENNYWtlIHdhcworZGVzaWduZWQgYXMgYSBnZW5lcmF0b3IgZm9yIHZhcmlvdXMgZGlhbGVjdHMgb2YgYGBNYWtlZmlsZWBgLCB0b2RheQorQ01ha2UgZ2VuZXJhdGVzIG1vZGVybiBidWlsZHN5c3RlbXMgc3VjaCBhcyBgYE5pbmphYGAgYXMgd2VsbCBhcyBwcm9qZWN0CitmaWxlcyBmb3IgSURFcyBzdWNoIGFzIFZpc3VhbCBTdHVkaW8gYW5kIFhjb2RlLgorCitDTWFrZSBpcyB3aWRlbHkgdXNlZCBmb3IgdGhlIEMgYW5kIEMrKyBsYW5ndWFnZXMsIGJ1dCBpdCBtYXkgYmUgdXNlZCB0bworYnVpbGQgc291cmNlIGNvZGUgb2Ygb3RoZXIgbGFuZ3VhZ2VzIHRvby4KKworUGVvcGxlIGVuY291bnRlcmluZyBDTWFrZSBmb3IgdGhlIGZpcnN0IHRpbWUgbWF5IGhhdmUgZGlmZmVyZW50IGluaXRpYWwKK2dvYWxzLiAgVG8gbGVhcm4gaG93IHRvIGJ1aWxkIGEgc291cmNlIGNvZGUgcGFja2FnZSBkb3dubG9hZGVkIGZyb20gdGhlCitpbnRlcm5ldCwgc3RhcnQgd2l0aCB0aGUgOmd1aWRlOmBVc2VyIEludGVyYWN0aW9uIEd1aWRlYC4KK1RoaXMgd2lsbCBkZXRhaWwgdGhlIHN0ZXBzIG5lZWRlZCB0byBydW4gdGhlIDptYW51YWw6YGNtYWtlKDEpYCBvcgorOm1hbnVhbDpgY21ha2UtZ3VpKDEpYCBleGVjdXRhYmxlIGFuZCBob3cgdG8gY2hvb3NlIGEgZ2VuZXJhdG9yLCBhbmQKK2hvdyB0byBjb21wbGV0ZSB0aGUgYnVpbGQuCisKK1RoZSA6Z3VpZGU6YFVzaW5nIERlcGVuZGVuY2llcyBHdWlkZWAgaXMgYWltZWQgYXQgZGV2ZWxvcGVycword2lzaGluZyB0byBnZXQgc3RhcnRlZCB1c2luZyBhIHRoaXJkLXBhcnR5IGxpYnJhcnkuCisKK0ZvciBkZXZlbG9wZXJzIHN0YXJ0aW5nIGEgcHJvamVjdCB1c2luZyBDTWFrZSwgdGhlIDpndWlkZTpgQ01ha2UgVHV0b3JpYWxgCitpcyBhIHN1aXRhYmxlIHN0YXJ0aW5nIHBvaW50LiAgVGhlIDptYW51YWw6YGNtYWtlLWJ1aWxkc3lzdGVtKDcpYAorbWFudWFsIGlzIGFpbWVkIGF0IGRldmVsb3BlcnMgZXhwYW5kaW5nIHRoZWlyIGtub3dsZWRnZSBvZiBtYWludGFpbmluZworYSBidWlsZHN5c3RlbSBhbmQgYmVjb21pbmcgZmFtaWxpYXIgd2l0aCB0aGUgYnVpbGQgdGFyZ2V0cyB0aGF0CitjYW4gYmUgcmVwcmVzZW50ZWQgaW4gQ01ha2UuICBUaGUgOm1hbnVhbDpgY21ha2UtcGFja2FnZXMoNylgIG1hbnVhbAorZXhwbGFpbnMgaG93IHRvIGNyZWF0ZSBwYWNrYWdlcyB3aGljaCBjYW4gZWFzaWx5IGJlIGNvbnN1bWVkIGJ5Cit0aGlyZC1wYXJ0eSBDTWFrZS1iYXNlZCBidWlsZHN5c3RlbXMuCisKIENvbW1hbmQtTGluZSBUb29scwogIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTUzLDYgKzgyLDggQEAKICAgICA6bWF4ZGVwdGg6IDEKIAogICAgIC9ndWlkZS90dXRvcmlhbC9pbmRleAorICAgIC9ndWlkZS91c2VyLWludGVyYWN0aW9uL2luZGV4CisgICAgL2d1aWRlL3VzaW5nLWRlcGVuZGVuY2llcy9pbmRleAogCiAuLiBvbmx5OjogaHRtbCBvciB0ZXh0CiAKZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL0lEX1JFU0VSVkUudHh0IGIvSGVscC9tYW51YWwvSURfUkVTRVJWRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyYjE2MwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvbWFudWFsL0lEX1JFU0VSVkUudHh0CkBAIC0wLDAgKzEsNyBAQAorLi4gbm90ZTo6CisKKyAgQ01ha2UgcmVzZXJ2ZXMgaWRlbnRpZmllcnMgdGhhdDoKKworICAqIGJlZ2luIHdpdGggYGBDTUFLRV9gYCAodXBwZXItLCBsb3dlci0sIG9yIG1peGVkLWNhc2UpLCBvcgorICAqIGJlZ2luIHdpdGggYGBfQ01BS0VfYGAgKHVwcGVyLSwgbG93ZXItLCBvciBtaXhlZC1jYXNlKSwgb3IKKyAgKiBiZWdpbiB3aXRoIGBgX2BgIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mIGFueSA6bWFudWFsOmBDTWFrZSBDb21tYW5kIDxjbWFrZS1jb21tYW5kcyg3KT5gLgpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvVlMtQ2hvb3NlLUFyY2gucG5nIGIvSGVscC9tYW51YWwvVlMtQ2hvb3NlLUFyY2gucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNmIwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL21hbnVhbC9WUy1DaG9vc2UtQXJjaC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtY29tbWFuZHMuNy5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS1jb21tYW5kcy43LnJzdAppbmRleCA1OWJhODk3Li4wYWE0Zjc1IDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1jb21tYW5kcy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1jb21tYW5kcy43LnJzdApAQCAtMTcsNiArMTcsNyBAQAogCiAgICAvY29tbWFuZC9icmVhawogICAgL2NvbW1hbmQvY21ha2VfaG9zdF9zeXN0ZW1faW5mb3JtYXRpb24KKyAgIC9jb21tYW5kL2NtYWtlX2xhbmd1YWdlCiAgICAvY29tbWFuZC9jbWFrZV9taW5pbXVtX3JlcXVpcmVkCiAgICAvY29tbWFuZC9jbWFrZV9wYXJzZV9hcmd1bWVudHMKICAgIC9jb21tYW5kL2NtYWtlX3BvbGljeQpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtY29tcGlsZS1mZWF0dXJlcy43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLWNvbXBpbGUtZmVhdHVyZXMuNy5yc3QKaW5kZXggYTE0ZTMyMi4uMDVkYzAzOCAxMDA2NDQKLS0tIGEvSGVscC9tYW51YWwvY21ha2UtY29tcGlsZS1mZWF0dXJlcy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1jb21waWxlLWZlYXR1cmVzLjcucnN0CkBAIC0xOSwxMSArMTksMTEgQEAKIENNYWtlIHByb3ZpZGVzIGEgcHJpbWFyeSB1c2VyIGludGVyZmFjZSBiYXNlZCBvbiBncmFudWxhciBoYW5kbGluZyBvZgogdGhlIGZlYXR1cmVzLCBub3QgdGhlIGxhbmd1YWdlIHN0YW5kYXJkIHRoYXQgaW50cm9kdWNlZCB0aGUgZmVhdHVyZS4KIAotVGhlIDpwcm9wX2dibDpgQ01BS0VfQ19LTk9XTl9GRUFUVVJFU2AgYW5kCi06cHJvcF9nYmw6YENNQUtFX0NYWF9LTk9XTl9GRUFUVVJFU2AgZ2xvYmFsIHByb3BlcnRpZXMgY29udGFpbiBhbGwgdGhlCitUaGUgOnByb3BfZ2JsOmBDTUFLRV9DX0tOT1dOX0ZFQVRVUkVTYCwgOnByb3BfZ2JsOmBDTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTYCwKK2FuZCA6cHJvcF9nYmw6YENNQUtFX0NYWF9LTk9XTl9GRUFUVVJFU2AgZ2xvYmFsIHByb3BlcnRpZXMgY29udGFpbiBhbGwgdGhlCiBmZWF0dXJlcyBrbm93biB0byBDTWFrZSwgcmVnYXJkbGVzcyBvZiBjb21waWxlciBzdXBwb3J0IGZvciB0aGUgZmVhdHVyZS4KLVRoZSA6dmFyaWFibGU6YENNQUtFX0NfQ09NUElMRV9GRUFUVVJFU2AgYW5kCi06dmFyaWFibGU6YENNQUtFX0NYWF9DT01QSUxFX0ZFQVRVUkVTYCB2YXJpYWJsZXMgY29udGFpbiBhbGwgZmVhdHVyZXMKK1RoZSA6dmFyaWFibGU6YENNQUtFX0NfQ09NUElMRV9GRUFUVVJFU2AsIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTYAorLCBhbmQgOnZhcmlhYmxlOmBDTUFLRV9DWFhfQ09NUElMRV9GRUFUVVJFU2AgdmFyaWFibGVzIGNvbnRhaW4gYWxsIGZlYXR1cmVzCiBDTWFrZSBrbm93cyBhcmUga25vd24gdG8gdGhlIGNvbXBpbGVyLCByZWdhcmRsZXNzIG9mIGxhbmd1YWdlIHN0YW5kYXJkCiBvciBjb21waWxlIGZsYWdzIG5lZWRlZCB0byB1c2UgdGhlbS4KIApAQCAtMzY4LDggKzM2OCw5IEBACiAqIGFsbCBjb21waWxlcnMgYW5kIHZlcnNpb25zIGxpc3RlZCBhYm92ZSB3aXRoIG9ubHkgbWV0YS1mZWF0dXJlcyBmb3IgQysrLgogKiBgYFRJYGA6IFRleGFzIEluc3RydW1lbnRzIGNvbXBpbGVyLgogCi1DTWFrZSBpcyBjdXJyZW50bHkgYXdhcmUgb2YgdGhlIDpwcm9wX3RndDpgQ1VEQSBzdGFuZGFyZHMgPENVREFfU1RBTkRBUkQ+YAotZnJvbSB0aGUgZm9sbG93aW5nIDp2YXJpYWJsZTpgY29tcGlsZXIgaWRzIDxDTUFLRV88TEFORz5fQ09NUElMRVJfSUQ+YCBhcyBvZiB0aGUKK0NNYWtlIGlzIGN1cnJlbnRseSBhd2FyZSBvZiB0aGUgOnByb3BfdGd0OmBDVURBIHN0YW5kYXJkcyA8Q1VEQV9TVEFOREFSRD5gIGFuZAordGhlaXIgYXNzb2NpYXRlZCBtZXRhLWZlYXR1cmVzIChlLmcuIGBgY3VkYV9zdGRfMTFgYCkgYXZhaWxhYmxlIGZyb20gdGhlCitmb2xsb3dpbmcgOnZhcmlhYmxlOmBjb21waWxlciBpZHMgPENNQUtFXzxMQU5HPl9DT01QSUxFUl9JRD5gIGFzIG9mIHRoZQogdmVyc2lvbnMgc3BlY2lmaWVkIGZvciBlYWNoOgogCiAqIGBgTlZJRElBYGA6IE5WSURJQSBudmNjIGNvbXBpbGVyIDcuNSsuCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1lbnYtdmFyaWFibGVzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtZW52LXZhcmlhYmxlcy43LnJzdAppbmRleCBlYzJjODVkLi5jZTFlMzYwIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1lbnYtdmFyaWFibGVzLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLWVudi12YXJpYWJsZXMuNy5yc3QKQEAgLTE0LDYgKzE0LDEzIEBACiA6cmVmOmBFbnZpcm9ubWVudCBWYXJpYWJsZXMgPENNYWtlIExhbmd1YWdlIEVudmlyb25tZW50IFZhcmlhYmxlcz5gCiBzZWN0aW9uIGluIHRoZSBjbWFrZS1sYW5ndWFnZSBtYW51YWwuCiAKK0Vudmlyb25tZW50IFZhcmlhYmxlcyB0aGF0IENoYW5nZSBCZWhhdmlvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIHRvY3RyZWU6OgorICAgOm1heGRlcHRoOiAxCisKKyAgIC9lbnZ2YXIvQ01BS0VfUFJFRklYX1BBVEgKIAogRW52aXJvbm1lbnQgVmFyaWFibGVzIHRoYXQgQ29udHJvbCB0aGUgQnVpbGQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMywxMCArMzAsMTIgQEAKIAogICAgL2VudnZhci9DTUFLRV9CVUlMRF9QQVJBTExFTF9MRVZFTAogICAgL2VudnZhci9DTUFLRV9DT05GSUdfVFlQRQorICAgL2VudnZhci9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUwogICAgL2VudnZhci9DTUFLRV9HRU5FUkFUT1IKICAgIC9lbnZ2YXIvQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFCiAgICAvZW52dmFyL0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STQogICAgL2VudnZhci9DTUFLRV9HRU5FUkFUT1JfVE9PTFNFVAorICAgL2VudnZhci9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSCiAgICAvZW52dmFyL0NNQUtFX01TVkNJREVfUlVOX1BBVEgKICAgIC9lbnZ2YXIvQ01BS0VfTk9fVkVSQk9TRQogICAgL2VudnZhci9DTUFLRV9PU1hfQVJDSElURUNUVVJFUwpAQCAtNzMsMyArODIsMTEgQEAKICAgIC9lbnZ2YXIvQ1RFU1RfUFJPR1JFU1NfT1VUUFVUCiAgICAvZW52dmFyL0NURVNUX1VTRV9MQVVOQ0hFUlNfREVGQVVMVAogICAgL2VudnZhci9EQVNIQk9BUkRfVEVTVF9GUk9NX0NURVNUCisKK0Vudmlyb25tZW50IFZhcmlhYmxlcyBmb3IgdGhlIENNYWtlIGN1cnNlcyBpbnRlcmZhY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gdG9jdHJlZTo6CisgICA6bWF4ZGVwdGg6IDEKKworICAgL2VudnZhci9DQ01BS0VfQ09MT1JTCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1maWxlLWFwaS43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLWZpbGUtYXBpLjcucnN0CmluZGV4IDA0YjZlZDIuLjM0ZWRjNTYgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLWZpbGUtYXBpLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLWZpbGUtYXBpLjcucnN0CkBAIC0xOTksNiArMTk5LDcgQEAKICAgICAgICAgInJvb3QiOiAiL3ByZWZpeC9zaGFyZS9jbWFrZS0zLjE0IgogICAgICAgfSwKICAgICAgICJnZW5lcmF0b3IiOiB7CisgICAgICAgICJtdWx0aUNvbmZpZyI6IGZhbHNlLAogICAgICAgICAibmFtZSI6ICJVbml4IE1ha2VmaWxlcyIKICAgICAgIH0KICAgICB9LApAQCAtMjY3LDYgKzI2OCw5IEBACiAgICAgQSBKU09OIG9iamVjdCBkZXNjcmliaW5nIHRoZSBDTWFrZSBnZW5lcmF0b3IgdXNlZCBmb3IgdGhlIGJ1aWxkLgogICAgIEl0IGhhcyBtZW1iZXJzOgogCisgICAgYGBtdWx0aUNvbmZpZ2BgCisgICAgICBBIGJvb2xlYW4gc3BlY2lmeWluZyB3aGV0aGVyIHRoZSBnZW5lcmF0b3Igc3VwcG9ydHMgbXVsdGlwbGUgb3V0cHV0CisgICAgICBjb25maWd1cmF0aW9ucy4KICAgICBgYG5hbWVgYAogICAgICAgQSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdG9yLgogICAgIGBgcGxhdGZvcm1gYApAQCAtNDIxLDcgKzQyNSw3IEBACiAKICAgewogICAgICJraW5kIjogImNvZGVtb2RlbCIsCi0gICAgInZlcnNpb24iOiB7ICJtYWpvciI6IDIsICJtaW5vciI6IDAgfSwKKyAgICAidmVyc2lvbiI6IHsgIm1ham9yIjogMiwgIm1pbm9yIjogMiB9LAogICAgICJwYXRocyI6IHsKICAgICAgICJzb3VyY2UiOiAiL3BhdGgvdG8vdG9wLWxldmVsLXNvdXJjZS1kaXIiLAogICAgICAgImJ1aWxkIjogIi9wYXRoL3RvL3RvcC1sZXZlbC1idWlsZC1kaXIiCkBAIC04NjUsNiArODY5LDI2IEBACiAgICAgQSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgbGFuZ3VhZ2UgKGUuZy4gYGBDYGAsIGBgQ1hYYGAsIGBgRm9ydHJhbmBgKQogICAgIG9mIHRoZSB0b29sY2hhaW4gaXMgdXNlZCB0byBjb21waWxlIHRoZSBzb3VyY2UgZmlsZS4KIAorICBgYGxhbmd1YWdlU3RhbmRhcmRgYAorICAgIE9wdGlvbmFsIG1lbWJlciB0aGF0IGlzIHByZXNlbnQgd2hlbiB0aGUgbGFuZ3VhZ2Ugc3RhbmRhcmQgaXMgc2V0CisgICAgZXhwbGljaXRseSAoZS5nLiB2aWEgOnByb3BfdGd0OmBDWFhfU1RBTkRBUkRgKSBvciBpbXBsaWNpdGx5IGJ5CisgICAgY29tcGlsZSBmZWF0dXJlcy4gIEVhY2ggZW50cnkgaXMgYSBKU09OIG9iamVjdCB3aXRoIHR3byBtZW1iZXJzOgorCisgICAgYGBiYWNrdHJhY2VzYGAKKyAgICAgIE9wdGlvbmFsIG1lbWJlciB0aGF0IGlzIHByZXNlbnQgd2hlbiBhIENNYWtlIGxhbmd1YWdlIGJhY2t0cmFjZSB0bworICAgICAgdGhlIGBgPExBTkc+X1NUQU5EQVJEYGAgc2V0dGluZyBpcyBhdmFpbGFibGUuICBJZiB0aGUgbGFuZ3VhZ2UKKyAgICAgIHN0YW5kYXJkIHdhcyBzZXQgaW1wbGljaXRseSBieSBjb21waWxlIGZlYXR1cmVzIHRob3NlIGFyZSB1c2VkIGFzCisgICAgICB0aGUgYmFja3RyYWNlKHMpLiAgSXQncyBwb3NzaWJsZSBmb3IgbXVsdGlwbGUgY29tcGlsZSBmZWF0dXJlcyB0bworICAgICAgcmVxdWlyZSB0aGUgc2FtZSBsYW5ndWFnZSBzdGFuZGFyZCBzbyB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZQorICAgICAgYmFja3RyYWNlcy4gVGhlIHZhbHVlIGlzIGEgSlNPTiBhcnJheSB3aXRoIGVhY2ggZW50cnkgYmVpbmcgYW4KKyAgICAgIHVuc2lnbmVkIGludGVnZXIgMC1iYXNlZCBpbmRleCBpbnRvIHRoZSBgYGJhY2t0cmFjZUdyYXBoYGAKKyAgICAgIG1lbWJlcidzIGBgbm9kZXNgYCBhcnJheS4KKworICAgIGBgc3RhbmRhcmRgYAorICAgICAgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbGFuZ3VhZ2Ugc3RhbmRhcmQuCisKKyAgICBUaGlzIGZpZWxkIHdhcyBhZGRlZCBpbiBjb2RlbW9kZWwgdmVyc2lvbiAyLjIuCisKICAgYGBjb21waWxlQ29tbWFuZEZyYWdtZW50c2BgCiAgICAgT3B0aW9uYWwgbWVtYmVyIHRoYXQgaXMgcHJlc2VudCB3aGVuIGZyYWdtZW50cyBvZiB0aGUgY29tcGlsZXIgY29tbWFuZAogICAgIGxpbmUgaW52b2NhdGlvbiBhcmUgYXZhaWxhYmxlLiAgVGhlIHZhbHVlIGlzIGEgSlNPTiBhcnJheSBvZiBlbnRyaWVzCkBAIC04OTUsNiArOTE5LDI0IEBACiAgICAgICBhbiB1bnNpZ25lZCBpbnRlZ2VyIDAtYmFzZWQgaW5kZXggaW50byB0aGUgYGBiYWNrdHJhY2VHcmFwaGBgCiAgICAgICBtZW1iZXIncyBgYG5vZGVzYGAgYXJyYXkuCiAKKyAgYGBwcmVjb21waWxlSGVhZGVyc2BgCisgICAgT3B0aW9uYWwgbWVtYmVyIHRoYXQgaXMgcHJlc2VudCB3aGVuIDpjb21tYW5kOmB0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzYAorICAgIG9yIG90aGVyIGNvbW1hbmQgaW52b2NhdGlvbnMgc2V0IDpwcm9wX3RndDpgUFJFQ09NUElMRV9IRUFERVJTYCBvbiB0aGUKKyAgICB0YXJnZXQuICBUaGUgdmFsdWUgaXMgYSBKU09OIGFycmF5IHdpdGggYW4gZW50cnkgZm9yIGVhY2ggaGVhZGVyLiAgRWFjaAorICAgIGVudHJ5IGlzIGEgSlNPTiBvYmplY3Qgd2l0aCBtZW1iZXJzOgorCisgICAgYGBoZWFkZXJgYAorICAgICAgRnVsbCBwYXRoIHRvIHRoZSBwcmVjb21waWxlIGhlYWRlciBmaWxlLgorCisgICAgYGBiYWNrdHJhY2VgYAorICAgICAgT3B0aW9uYWwgbWVtYmVyIHRoYXQgaXMgcHJlc2VudCB3aGVuIGEgQ01ha2UgbGFuZ3VhZ2UgYmFja3RyYWNlIHRvCisgICAgICB0aGUgOmNvbW1hbmQ6YHRhcmdldF9wcmVjb21waWxlX2hlYWRlcnNgIG9yIG90aGVyIGNvbW1hbmQgaW52b2NhdGlvbgorICAgICAgdGhhdCBhZGRlZCB0aGlzIHByZWNvbXBpbGVkIGhlYWRlciBpcyBhdmFpbGFibGUuICBUaGUgdmFsdWUgaXMgYW4KKyAgICAgIHVuc2lnbmVkIGludGVnZXIgMC1iYXNlZCBpbmRleCBpbnRvIHRoZSBgYGJhY2t0cmFjZUdyYXBoYGAgbWVtYmVyJ3MKKyAgICAgIGBgbm9kZXNgYCBhcnJheS4KKworICAgIFRoaXMgZmllbGQgd2FzIGFkZGVkIGluIGNvZGVtb2RlbCB2ZXJzaW9uIDIuMS4KKwogICBgYGRlZmluZXNgYAogICAgIE9wdGlvbmFsIG1lbWJlciB0aGF0IGlzIHByZXNlbnQgd2hlbiB0aGVyZSBhcmUgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLgogICAgIFRoZSB2YWx1ZSBpcyBhIEpTT04gYXJyYXkgd2l0aCBhbiBlbnRyeSBmb3IgZWFjaCBkZWZpbml0aW9uLiAgRWFjaApkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zLjcucnN0CmluZGV4IDc1ZjRiZDQuLmM3ZjZiMjcgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMuNy5yc3QKQEAgLTEwNSwxMCArMTA1LDExIEBACiAKIGBgJDxUQVJHRVRfRVhJU1RTOnRhcmdldD5gYAogICBgYDFgYCBpZiBgYHRhcmdldGBgIGV4aXN0cywgZWxzZSBgYDBgYC4KLWBgJDxDT05GSUc6Y2ZnPmBgCi0gIGBgMWBgIGlmIGNvbmZpZyBpcyBgYGNmZ2BgLCBlbHNlIGBgMGBgLiBUaGlzIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uLgotICBUaGUgbWFwcGluZyBpbiA6cHJvcF90Z3Q6YE1BUF9JTVBPUlRFRF9DT05GSUdfPENPTkZJRz5gIGlzIGFsc28gY29uc2lkZXJlZCBieQotICB0aGlzIGV4cHJlc3Npb24gd2hlbiBpdCBpcyBldmFsdWF0ZWQgb24gYSBwcm9wZXJ0eSBvbiBhbiA6cHJvcF90Z3Q6YElNUE9SVEVEYAorYGAkPENPTkZJRzpjZmdzPmBgCisgIGBgMWBgIGlmIGNvbmZpZyBpcyBhbnkgb25lIG9mIHRoZSBlbnRyaWVzIGluIGBgY2Znc2BgLCBlbHNlIGBgMGBgLiBUaGlzIGlzIGEKKyAgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uLiBUaGUgbWFwcGluZyBpbgorICA6cHJvcF90Z3Q6YE1BUF9JTVBPUlRFRF9DT05GSUdfPENPTkZJRz5gIGlzIGFsc28gY29uc2lkZXJlZCBieSB0aGlzCisgIGV4cHJlc3Npb24gd2hlbiBpdCBpcyBldmFsdWF0ZWQgb24gYSBwcm9wZXJ0eSBvbiBhbiA6cHJvcF90Z3Q6YElNUE9SVEVEYAogICB0YXJnZXQuCiBgYCQ8UExBVEZPUk1fSUQ6cGxhdGZvcm1faWRzPmBgCiAgIHdoZXJlIGBgcGxhdGZvcm1faWRzYGAgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KQEAgLTI1OSw2ICsyNjAsMTIyIEBACiAgICAgYWRkX2V4ZWN1dGFibGUobXlhcHAgbWFpbi5jcHApCiAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG15YXBwIG15YXBwX2MgbXlhcHBfY3h4KQogCisuLiBfYEJvb2xlYW4gTElOS19MQU5HVUFHRSBHZW5lcmF0b3IgRXhwcmVzc2lvbmA6CisKK2BgJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmd1YWdlLGNvbXBpbGVyX2lkcz5gYAorICBgYDFgYCB3aGVuIHRoZSBsYW5ndWFnZSB1c2VkIGZvciBsaW5rIHN0ZXAgbWF0Y2hlcyBgYGxhbmd1YWdlYGAgYW5kIHRoZQorICBDTWFrZSdzIGNvbXBpbGVyIGlkIG9mIHRoZSBsYW5ndWFnZSBsaW5rZXIgbWF0Y2hlcyBhbnkgb25lIG9mIHRoZSBlbnRyaWVzCisgIGluIGBgY29tcGlsZXJfaWRzYGAsIG90aGVyd2lzZSBgYDBgYC4gVGhpcyBleHByZXNzaW9uIGlzIGEgc2hvcnQgZm9ybSBmb3IgdGhlCisgIGNvbWJpbmF0aW9uIG9mIGBgJDxMSU5LX0xBTkdVQUdFOmxhbmd1YWdlPmBgIGFuZAorICBgYCQ8TEFOR19DT01QSUxFUl9JRDpjb21waWxlcl9pZHM+YGAuIFRoaXMgZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIG9wdGlvbnMsIGxpbmsgZGlyZWN0b3JpZXMgYW5kIGxpbmsgZGVwZW5kZW5jaWVzIG9mIGEKKyAgcGFydGljdWxhciBsYW5ndWFnZSBhbmQgbGlua2VyIGNvbWJpbmF0aW9uIGluIGEgdGFyZ2V0LiBGb3IgZXhhbXBsZToKKworICAuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICAgIGFkZF9saWJyYXJ5KGxpYkNfQ2xhbmcgLi4uKQorICAgIGFkZF9saWJyYXJ5KGxpYkNYWF9DbGFuZyAuLi4pCisgICAgYWRkX2xpYnJhcnkobGliQ19JbnRlbCAuLi4pCisgICAgYWRkX2xpYnJhcnkobGliQ1hYX0ludGVsIC4uLikKKworICAgIGFkZF9leGVjdXRhYmxlKG15YXBwIG1haW4uYykKKyAgICBpZiAoQ1hYX0NPTkZJRykKKyAgICAgIHRhcmdldF9zb3VyY2VzKG15YXBwIFBSSVZBVEUgZmlsZS5jeHgpCisgICAgZW5kaWYoKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWFwcAorICAgICAgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQ2xhbmcsQXBwbGVDbGFuZz46bGliQ1hYX0NsYW5nPgorICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLENsYW5nLEFwcGxlQ2xhbmc+OmxpYkNfQ2xhbmc+CisgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxJbnRlbD46bGliQ1hYX0ludGVsPgorICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEludGVsPjpsaWJDX0ludGVsPikKKworICBUaGlzIHNwZWNpZmllcyB0aGUgdXNlIG9mIGRpZmZlcmVudCBsaW5rIGxpYnJhcmllcyBiYXNlZCBvbiBib3RoIHRoZQorICBjb21waWxlciBpZCBhbmQgbGluayBsYW5ndWFnZS4gVGhpcyBleGFtcGxlIHdpbGwgaGF2ZSB0YXJnZXQgYGBsaWJDWFhfQ2xhbmdgYAorICBhcyBsaW5rIGRlcGVuZGVuY3kgd2hlbiBgYENsYW5nYGAgb3IgYGBBcHBsZUNsYW5nYGAgaXMgdGhlIGBgQ1hYYGAKKyAgbGlua2VyLCBhbmQgYGBsaWJDWFhfSW50ZWxgYCB3aGVuIGBgSW50ZWxgYCBpcyB0aGUgYGBDWFhgYCBsaW5rZXIuCisgIExpa2V3aXNlIHdoZW4gdGhlIGBgQ2BgIGxpbmtlciBpcyBgYENsYW5nYGAgb3IgYGBBcHBsZUNsYW5nYGAsIHRhcmdldAorICBgYGxpYkNfQ2xhbmdgYCB3aWxsIGJlIGFkZGVkIGFzIGxpbmsgZGVwZW5kZW5jeSBhbmQgYGBsaWJDX0ludGVsYGAgd2hlbgorICBgYEludGVsYGAgaXMgdGhlIGBgQ2BgIGxpbmtlci4KKworICBTZWUgOnJlZjpgdGhlIG5vdGUgcmVsYXRlZCB0bworICA8Q29uc3RyYWludHMgTElOS19MQU5HVUFHRSBHZW5lcmF0b3IgRXhwcmVzc2lvbj5gCisgIGBgJDxMSU5LX0xBTkdVQUdFOmxhbmd1YWdlPmBgIGZvciBjb25zdHJhaW50cyBhYm91dCB0aGUgdXNhZ2Ugb2YgdGhpcworICBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KKworYGAkPExJTktfTEFOR1VBR0U6bGFuZ3VhZ2VzPmBgCisgIGBgMWBgIHdoZW4gdGhlIGxhbmd1YWdlIHVzZWQgZm9yIGxpbmsgc3RlcCBtYXRjaGVzIGFueSBvZiB0aGUgZW50cmllcworICBpbiBgYGxhbmd1YWdlc2BgLCBvdGhlcndpc2UgYGAwYGAuICBUaGlzIGV4cHJlc3Npb24gbWF5IGJlIHVzZWQgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBvcHRpb25zLCBsaW5rIGRpcmVjdG9yaWVzIGFuZCBsaW5rIGRlcGVuZGVuY2llcyBvZiBhCisgIHBhcnRpY3VsYXIgbGFuZ3VhZ2UgaW4gYSB0YXJnZXQuIEZvciBleGFtcGxlOgorCisgIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICAgYWRkX2xpYnJhcnkoYXBpX0MgLi4uKQorICAgIGFkZF9saWJyYXJ5KGFwaV9DWFggLi4uKQorICAgIGFkZF9saWJyYXJ5KGFwaSBJTlRFUkZBQ0UpCisgICAgdGFyZ2V0X2xpbmtfb3B0aW9ucyhhcGkgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdVQUdFOkM+Oi1vcHRfYz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+Oi1vcHRfY3h4PikKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoYXBpIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HVUFHRTpDPjphcGlfQz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OmFwaV9DWFg+KQorCisgICAgYWRkX2V4ZWN1dGFibGUobXlhcHAxIG1haW4uYykKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKG15YXBwMSBQUklWQVRFIGFwaSkKKworICAgIGFkZF9leGVjdXRhYmxlKG15YXBwMiBtYWluLmNwcCkKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKG15YXBwMiBQUklWQVRFIGFwaSkKKworICBUaGlzIHNwZWNpZmllcyB0byB1c2UgdGhlIGBgYXBpYGAgdGFyZ2V0IGZvciBsaW5raW5nIHRhcmdldHMgYGBteWFwcDFgYCBhbmQKKyAgYGBteWFwcDJgYC4gSW4gcHJhY3RpY2UsIGBgbXlhcHAxYGAgd2lsbCBsaW5rIHdpdGggdGFyZ2V0IGBgYXBpX0NgYCBhbmQKKyAgb3B0aW9uIGBgLW9wdF9jYGAgYmVjYXVzZSBpdCB3aWxsIHVzZSBgYENgYCBhcyBsaW5rIGxhbmd1YWdlLiBBbmQgYGBteWFwcDJgYAorICB3aWxsIGxpbmsgd2l0aCBgYGFwaV9DWFhgYCBhbmQgb3B0aW9uIGBgLW9wdF9jeHhgYCBiZWNhdXNlIGBgQ1hYYGAgd2lsbCBiZQorICB0aGUgbGluayBsYW5ndWFnZS4KKworICAuLiBfYENvbnN0cmFpbnRzIExJTktfTEFOR1VBR0UgR2VuZXJhdG9yIEV4cHJlc3Npb25gOgorCisgIC4uIG5vdGU6OgorCisgICAgVG8gZGV0ZXJtaW5lIHRoZSBsaW5rIGxhbmd1YWdlIG9mIGEgdGFyZ2V0LCBpdCBpcyByZXF1aXJlZCB0byBjb2xsZWN0LAorICAgIHRyYW5zaXRpdmVseSwgYWxsIHRoZSB0YXJnZXRzIHdoaWNoIHdpbGwgYmUgbGlua2VkIHRvIGl0LiBTbywgZm9yIGxpbmsKKyAgICBsaWJyYXJpZXMgcHJvcGVydGllcywgYSBkb3VibGUgZXZhbHVhdGlvbiB3aWxsIGJlIGRvbmUuIER1cmluZyB0aGUgZmlyc3QKKyAgICBldmFsdWF0aW9uLCBgYCQ8TElOS19MQU5HVUFHRTouLj5gYCBleHByZXNzaW9ucyB3aWxsIGFsd2F5cyByZXR1cm4gYGAwYGAuCisgICAgVGhlIGxpbmsgbGFuZ3VhZ2UgY29tcHV0ZWQgYWZ0ZXIgdGhpcyBmaXJzdCBwYXNzIHdpbGwgYmUgdXNlZCB0byBkbyB0aGUKKyAgICBzZWNvbmQgcGFzcy4gVG8gYXZvaWQgaW5jb25zaXN0ZW5jeSwgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgc2Vjb25kIHBhc3MKKyAgICBkbyBub3QgY2hhbmdlIHRoZSBsaW5rIGxhbmd1YWdlLiBNb3Jlb3ZlciwgdG8gYXZvaWQgdW5leHBlY3RlZAorICAgIHNpZGUtZWZmZWN0cywgaXQgaXMgcmVxdWlyZWQgdG8gc3BlY2lmeSBjb21wbGV0ZSBlbnRpdGllcyBhcyBwYXJ0IG9mIHRoZQorICAgIGBgJDxMSU5LX0xBTkdVQUdFOi4uPmBgIGV4cHJlc3Npb24uIEZvciBleGFtcGxlOgorCisgICAgLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgICAgIGFkZF9saWJyYXJ5KGxpYiBTVEFUSUMgZmlsZS5jeHgpCisgICAgICBhZGRfbGlicmFyeShsaWJvdGhlciBTVEFUSUMgZmlsZS5jKQorCisgICAgICAjIGJhZCB1c2FnZQorICAgICAgYWRkX2V4ZWN1dGFibGUobXlhcHAxIG1haW4uYykKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWFwcDEgUFJJVkFURSBsaWIkPCQ8TElOS19MQU5HVUFHRTpDPjpvdGhlcj4pCisKKyAgICAgICMgY29ycmVjdCB1c2FnZQorICAgICAgYWRkX2V4ZWN1dGFibGUobXlhcHAyIG1haW4uYykKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWFwcDIgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpsaWJvdGhlcj4pCisKKyAgICBJbiB0aGlzIGV4YW1wbGUsIGZvciBgYG15YXBwMWBgLCB0aGUgZmlyc3QgcGFzcyB3aWxsLCB1bmV4cGVjdGVkbHksCisgICAgZGV0ZXJtaW5lIHRoYXQgdGhlIGxpbmsgbGFuZ3VhZ2UgaXMgYGBDWFhgYCBiZWNhdXNlIHRoZSBldmFsdWF0aW9uIG9mIHRoZQorICAgIGdlbmVyYXRvciBleHByZXNzaW9uIHdpbGwgYmUgYW4gZW1wdHkgc3RyaW5nIHNvIGBgbXlhcHAxYGAgd2lsbCBkZXBlbmRzIG9uCisgICAgdGFyZ2V0IGBgbGliYGAgd2hpY2ggaXMgYGBDKytgYC4gT24gdGhlIGNvbnRyYXJ5LCBmb3IgYGBteWFwcDJgYCwgdGhlIGZpcnN0CisgICAgZXZhbHVhdGlvbiB3aWxsIGdpdmUgYGBDYGAgYXMgbGluayBsYW5ndWFnZSwgc28gdGhlIHNlY29uZCBwYXNzIHdpbGwKKyAgICBjb3JyZWN0bHkgYWRkIHRhcmdldCBgYGxpYm90aGVyYGAgYXMgbGluayBkZXBlbmRlbmN5LgorCitgYCQ8REVWSUNFX0xJTks6bGlzdD5gYAorICBSZXR1cm5zIHRoZSBsaXN0IGlmIGl0IGlzIHRoZSBkZXZpY2UgbGluayBzdGVwLCBhbiBlbXB0eSBsaXN0IG90aGVyd2lzZS4KKyAgVGhlIGRldmljZSBsaW5rIHN0ZXAgaXMgY29udHJvbGxlZCBieSA6cHJvcF90Z3Q6YENVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OYAorICBhbmQgOnByb3BfdGd0OmBDVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFNgIHByb3BlcnRpZXMgYW5kCisgIHBvbGljeSA6cG9saWN5OmBDTVAwMTA1YC4gVGhpcyBleHByZXNzaW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCisKK2BgJDxIT1NUX0xJTks6bGlzdD5gYAorICBSZXR1cm5zIHRoZSBsaXN0IGlmIGl0IGlzIHRoZSBub3JtYWwgbGluayBzdGVwLCBhbiBlbXB0eSBsaXN0IG90aGVyd2lzZS4KKyAgVGhpcyBleHByZXNzaW9uIGlzIG1haW5seSB1c2VmdWwgd2hlbiBhIGRldmljZSBsaW5rIHN0ZXAgaXMgYWxzbyBpbnZvbHZlZAorICAoc2VlIGBgJDxERVZJQ0VfTElOSzpsaXN0PmBgIGdlbmVyYXRvciBleHByZXNzaW9uKS4gVGhpcyBleHByZXNzaW9uIGNhbiBvbmx5CisgIGJlIHVzZWQgdG8gc3BlY2lmeSBsaW5rIG9wdGlvbnMuCisKIFN0cmluZy1WYWx1ZWQgR2VuZXJhdG9yIEV4cHJlc3Npb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC00NTAsMjIgKzU2Nyw0MSBAQAogICA8Qm9vbGVhbiBDT01QSUxFX0xBTkdVQUdFIEdlbmVyYXRvciBFeHByZXNzaW9uPmAKICAgYGAkPENPTVBJTEVfTEFOR1VBR0U6bGFuZ3VhZ2U+YGAKICAgZm9yIG5vdGVzIGFib3V0IHRoZSBwb3J0YWJpbGl0eSBvZiB0aGlzIGdlbmVyYXRvciBleHByZXNzaW9uLgorYGAkPExJTktfTEFOR1VBR0U+YGAKKyAgVGhlIGxpbmsgbGFuZ3VhZ2Ugb2YgdGFyZ2V0IHdoZW4gZXZhbHVhdGluZyBsaW5rIG9wdGlvbnMuCisgIFNlZSA6cmVmOmB0aGUgcmVsYXRlZCBib29sZWFuIGV4cHJlc3Npb24KKyAgPEJvb2xlYW4gTElOS19MQU5HVUFHRSBHZW5lcmF0b3IgRXhwcmVzc2lvbj5gIGBgJDxMSU5LX0xBTkdVQUdFOmxhbmd1YWdlPmBgCisgIGZvciBub3RlcyBhYm91dCB0aGUgcG9ydGFiaWxpdHkgb2YgdGhpcyBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KKworICAuLiBub3RlOjoKKworICAgIFRoaXMgZ2VuZXJhdG9yIGV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGluayBsaWJyYXJpZXMKKyAgICBwcm9wZXJ0aWVzIHRvIGF2b2lkIHNpZGUtZWZmZWN0cyBkdWUgdG8gdGhlIGRvdWJsZSBldmFsdWF0aW9uIG9mCisgICAgdGhlc2UgcHJvcGVydGllcy4KIAogVGFyZ2V0LURlcGVuZGVudCBRdWVyaWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYGAkPFRBUkdFVF9OQU1FX0lGX0VYSVNUUzp0Z3Q+YGAKLSAgRXhwYW5kcyB0byB0aGUgYGB0Z3RgYCBpZiB0aGUgZ2l2ZW4gdGFyZ2V0IGV4aXN0cywgYW4gZW1wdHkgc3RyaW5nCi0gIG90aGVyd2lzZS4KLWBgJDxUQVJHRVRfRklMRTp0Z3Q+YGAKLSAgRnVsbCBwYXRoIHRvIG1haW4gZmlsZSAoLmV4ZSwgLnNvLjEuMiwgLmEpIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYQotICB0YXJnZXQuCi1gYCQ8VEFSR0VUX0ZJTEVfQkFTRV9OQU1FOnRndD5gYAotICBCYXNlIG5hbWUgb2YgbWFpbiBmaWxlIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCitUaGVzZSBxdWVyaWVzIHJlZmVyIHRvIGEgdGFyZ2V0IGBgdGd0YGAuIFRoaXMgY2FuIGJlIGFueSBydW50aW1lIGFydGlmYWN0LAorbmFtZWx5OgogCi0gIFRoZSBiYXNlIG5hbWUgY29ycmVzcG9uZHMgdG8gdGhlIHRhcmdldCBmaWxlIG5hbWUgKHNlZQotICBgYCQ8VEFSR0VUX0ZJTEVfTkFNRTp0Z3Q+YGApIHdpdGhvdXQgcHJlZml4IGFuZCBzdWZmaXguIEZvciBleGFtcGxlLCBpZgotICB0YXJnZXQgZmlsZSBuYW1lIGlzIGBgbGliYmFzZS5zb2BgLCB0aGUgYmFzZSBuYW1lIGlzIGBgYmFzZWBgLgorKiBhbiBleGVjdXRhYmxlIHRhcmdldCBjcmVhdGVkIGJ5IDpjb21tYW5kOmBhZGRfZXhlY3V0YWJsZWAKKyogYSBzaGFyZWQgbGlicmFyeSB0YXJnZXQgKGBgLnNvYGAsIGBgLmRsbGBgIGJ1dCBub3QgdGhlaXIgYGAubGliYGAgaW1wb3J0IGxpYnJhcnkpCisgIGNyZWF0ZWQgYnkgOmNvbW1hbmQ6YGFkZF9saWJyYXJ5YAorKiBhIHN0YXRpYyBsaWJyYXJ5IHRhcmdldCBjcmVhdGVkIGJ5IDpjb21tYW5kOmBhZGRfbGlicmFyeWAKKworSW4gdGhlIGZvbGxvd2luZywgInRoZSBgYHRndGBgIGZpbGVuYW1lIiBtZWFucyB0aGUgbmFtZSBvZiB0aGUgYGB0Z3RgYAorYmluYXJ5IGZpbGUuIFRoaXMgaGFzIHRvIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSAidGhlIHRhcmdldCBuYW1lIiwKK3doaWNoIGlzIGp1c3QgdGhlIHN0cmluZyBgYHRndGBgLgorCitgYCQ8VEFSR0VUX05BTUVfSUZfRVhJU1RTOnRndD5gYAorICBUaGUgdGFyZ2V0IG5hbWUgYGB0Z3RgYCBpZiB0aGUgdGFyZ2V0IGV4aXN0cywgYW4gZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KK2BgJDxUQVJHRVRfRklMRTp0Z3Q+YGAKKyAgRnVsbCBwYXRoIHRvIHRoZSBgYHRndGBgIGJpbmFyeSBmaWxlLgorYGAkPFRBUkdFVF9GSUxFX0JBU0VfTkFNRTp0Z3Q+YGAKKyAgQmFzZSBuYW1lIG9mIGBgdGd0YGAsIGkuZS4gYGAkPFRBUkdFVF9GSUxFX05BTUU6dGd0PmBgIHdpdGhvdXQgcHJlZml4IGFuZAorICBzdWZmaXguCisgIEZvciBleGFtcGxlLCBpZiB0aGUgYGB0Z3RgYCBmaWxlbmFtZSBpcyBgYGxpYmJhc2Uuc29gYCwgdGhlIGJhc2UgbmFtZSBpcyBgYGJhc2VgYC4KIAogICBTZWUgYWxzbyB0aGUgOnByb3BfdGd0OmBPVVRQVVRfTkFNRWAsIDpwcm9wX3RndDpgQVJDSElWRV9PVVRQVVRfTkFNRWAsCiAgIDpwcm9wX3RndDpgTElCUkFSWV9PVVRQVVRfTkFNRWAgYW5kIDpwcm9wX3RndDpgUlVOVElNRV9PVVRQVVRfTkFNRWAKQEAgLTQ4MCwzMiArNjE2LDMxIEBACiAgIE5vdGUgdGhhdCBgYHRndGBgIGlzIG5vdCBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgb2YgdGhlIHRhcmdldCB0aGlzCiAgIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uLgogYGAkPFRBUkdFVF9GSUxFX1BSRUZJWDp0Z3Q+YGAKLSAgUHJlZml4IG9mIG1haW4gZmlsZSB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgorICBQcmVmaXggb2YgdGhlIGBgdGd0YGAgZmlsZW5hbWUgKHN1Y2ggYXMgYGBsaWJgYCkuCiAKICAgU2VlIGFsc28gdGhlIDpwcm9wX3RndDpgUFJFRklYYCB0YXJnZXQgcHJvcGVydHkuCiAKICAgTm90ZSB0aGF0IGBgdGd0YGAgaXMgbm90IGFkZGVkIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgdGFyZ2V0IHRoaXMKICAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb24uCiBgYCQ8VEFSR0VUX0ZJTEVfU1VGRklYOnRndD5gYAotICBTdWZmaXggb2YgbWFpbiBmaWxlIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCi0KLSAgVGhlIHN1ZmZpeCBjb3JyZXNwb25kcyB0byB0aGUgZmlsZSBleHRlbnNpb24gKHN1Y2ggYXMgIi5zbyIgb3IgIi5leGUiKS4KKyAgU3VmZml4IG9mIHRoZSBgYHRndGBgIGZpbGVuYW1lIChleHRlbnNpb24gc3VjaCBhcyBgYC5zb2BgIG9yIGBgLmV4ZWBgKS4KIAogICBTZWUgYWxzbyB0aGUgOnByb3BfdGd0OmBTVUZGSVhgIHRhcmdldCBwcm9wZXJ0eS4KIAogICBOb3RlIHRoYXQgYGB0Z3RgYCBpcyBub3QgYWRkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSB0YXJnZXQgdGhpcwogICBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbi4KIGBgJDxUQVJHRVRfRklMRV9OQU1FOnRndD5gYAotICBOYW1lIG9mIG1haW4gZmlsZSAoLmV4ZSwgLnNvLjEuMiwgLmEpLgorICBUaGUgYGB0Z3RgYCBmaWxlbmFtZS4KIGBgJDxUQVJHRVRfRklMRV9ESVI6dGd0PmBgCi0gIERpcmVjdG9yeSBvZiBtYWluIGZpbGUgKC5leGUsIC5zby4xLjIsIC5hKS4KKyAgRGlyZWN0b3J5IG9mIHRoZSBgYHRndGBgIGJpbmFyeSBmaWxlLgogYGAkPFRBUkdFVF9MSU5LRVJfRklMRTp0Z3Q+YGAKLSAgRmlsZSB1c2VkIHRvIGxpbmsgKC5hLCAubGliLCAuc28pIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCisgIEZpbGUgdXNlZCB3aGVuIGxpbmtpbmcgdG8gdGhlIGBgdGd0YGAgdGFyZ2V0LiAgVGhpcyB3aWxsIHVzdWFsbHkKKyAgYmUgdGhlIGxpYnJhcnkgdGhhdCBgYHRndGBgIHJlcHJlc2VudHMgKGBgLmFgYCwgYGAubGliYGAsIGBgLnNvYGApLAorICBidXQgZm9yIGEgc2hhcmVkIGxpYnJhcnkgb24gRExMIHBsYXRmb3JtcywgaXQgd291bGQgYmUgdGhlIGBgLmxpYmBgCisgIGltcG9ydCBsaWJyYXJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgRExMLgogYGAkPFRBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUU6dGd0PmBgCi0gIEJhc2UgbmFtZSBvZiBmaWxlIHVzZWQgdG8gbGluayB3aGVyZSBgYHRndGBgIGlzIHRoZSBuYW1lIG9mIGEgdGFyZ2V0LgotCi0gIFRoZSBiYXNlIG5hbWUgY29ycmVzcG9uZHMgdG8gdGhlIHRhcmdldCBsaW5rZXIgZmlsZSBuYW1lIChzZWUKLSAgYGAkPFRBUkdFVF9MSU5LRVJfRklMRV9OQU1FOnRndD5gYCkgd2l0aG91dCBwcmVmaXggYW5kIHN1ZmZpeC4gRm9yIGV4YW1wbGUsCisgIEJhc2UgbmFtZSBvZiBmaWxlIHVzZWQgdG8gbGluayB0aGUgdGFyZ2V0IGBgdGd0YGAsIGkuZS4KKyAgYGAkPFRBUkdFVF9MSU5LRVJfRklMRV9OQU1FOnRndD5gYCB3aXRob3V0IHByZWZpeCBhbmQgc3VmZml4LiBGb3IgZXhhbXBsZSwKICAgaWYgdGFyZ2V0IGZpbGUgbmFtZSBpcyBgYGxpYmJhc2UuYWBgLCB0aGUgYmFzZSBuYW1lIGlzIGBgYmFzZWBgLgogCiAgIFNlZSBhbHNvIHRoZSA6cHJvcF90Z3Q6YE9VVFBVVF9OQU1FYCwgOnByb3BfdGd0OmBBUkNISVZFX09VVFBVVF9OQU1FYCwKQEAgLTUyMCw3ICs2NTUsNyBAQAogICBOb3RlIHRoYXQgYGB0Z3RgYCBpcyBub3QgYWRkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSB0YXJnZXQgdGhpcwogICBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbi4KIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYOnRndD5gYAotICBQcmVmaXggb2YgZmlsZSB1c2VkIHRvIGxpbmsgd2hlcmUgYGB0Z3RgYCBpcyB0aGUgbmFtZSBvZiBhIHRhcmdldC4KKyAgUHJlZml4IG9mIGZpbGUgdXNlZCB0byBsaW5rIHRhcmdldCBgYHRndGBgLgogCiAgIFNlZSBhbHNvIHRoZSA6cHJvcF90Z3Q6YFBSRUZJWGAgYW5kIDpwcm9wX3RndDpgSU1QT1JUX1BSRUZJWGAgdGFyZ2V0CiAgIHByb3BlcnRpZXMuCkBAIC01MzgsMTUgKzY3MywxNSBAQAogICBOb3RlIHRoYXQgYGB0Z3RgYCBpcyBub3QgYWRkZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSB0YXJnZXQgdGhpcwogICBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbi4KIGBgJDxUQVJHRVRfTElOS0VSX0ZJTEVfTkFNRTp0Z3Q+YGAKLSAgTmFtZSBvZiBmaWxlIHVzZWQgdG8gbGluayAoLmEsIC5saWIsIC5zbykuCisgIE5hbWUgb2YgZmlsZSB1c2VkIHRvIGxpbmsgdGFyZ2V0IGBgdGd0YGAuCiBgYCQ8VEFSR0VUX0xJTktFUl9GSUxFX0RJUjp0Z3Q+YGAKLSAgRGlyZWN0b3J5IG9mIGZpbGUgdXNlZCB0byBsaW5rICguYSwgLmxpYiwgLnNvKS4KKyAgRGlyZWN0b3J5IG9mIGZpbGUgdXNlZCB0byBsaW5rIHRhcmdldCBgYHRndGBgLgogYGAkPFRBUkdFVF9TT05BTUVfRklMRTp0Z3Q+YGAKLSAgRmlsZSB3aXRoIHNvbmFtZSAoLnNvLjMpIHdoZXJlIGBgdGd0YGAgaXMgdGhlIG5hbWUgb2YgYSB0YXJnZXQuCisgIEZpbGUgd2l0aCBzb25hbWUgKGBgLnNvLjNgYCkgd2hlcmUgYGB0Z3RgYCBpcyB0aGUgbmFtZSBvZiBhIHRhcmdldC4KIGBgJDxUQVJHRVRfU09OQU1FX0ZJTEVfTkFNRTp0Z3Q+YGAKLSAgTmFtZSBvZiBmaWxlIHdpdGggc29uYW1lICguc28uMykuCisgIE5hbWUgb2YgZmlsZSB3aXRoIHNvbmFtZSAoYGAuc28uM2BgKS4KIGBgJDxUQVJHRVRfU09OQU1FX0ZJTEVfRElSOnRndD5gYAotICBEaXJlY3Rvcnkgb2Ygd2l0aCBzb25hbWUgKC5zby4zKS4KKyAgRGlyZWN0b3J5IG9mIHdpdGggc29uYW1lIChgYC5zby4zYGApLgogYGAkPFRBUkdFVF9QREJfRklMRTp0Z3Q+YGAKICAgRnVsbCBwYXRoIHRvIHRoZSBsaW5rZXIgZ2VuZXJhdGVkIHByb2dyYW0gZGF0YWJhc2UgZmlsZSAoLnBkYikKICAgd2hlcmUgYGB0Z3RgYCBpcyB0aGUgbmFtZSBvZiBhIHRhcmdldC4KQEAgLTU4OSwxNCArNzI0LDE0IEBACiAgIE5vdGUgdGhhdCBgYHRndGBgIGlzIG5vdCBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgb2YgdGhlIHRhcmdldCB0aGlzCiAgIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uLgogYGAkPFRBUkdFVF9QUk9QRVJUWTpwcm9wPmBgCi0gIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBgYHByb3BgYCBvbiB0aGUgdGFyZ2V0IG9uIHdoaWNoIHRoZSBnZW5lcmF0b3IKLSAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuIE5vdGUgdGhhdCBmb3IgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluCi0gIDpyZWY6YFRhcmdldCBVc2FnZSBSZXF1aXJlbWVudHNgIHRoaXMgaXMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eQotICBvbiB0aGUgY29uc3VtaW5nIHRhcmdldCByYXRoZXIgdGhhbiB0aGUgdGFyZ2V0IHNwZWNpZnlpbmcgdGhlCi0gIHJlcXVpcmVtZW50LgorICBWYWx1ZSBvZiB0aGUgcHJvcGVydHkgYGBwcm9wYGAgb24gdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGV4cHJlc3Npb24KKyAgaXMgYmVpbmcgZXZhbHVhdGVkLiBOb3RlIHRoYXQgZm9yIGdlbmVyYXRvciBleHByZXNzaW9ucyBpbgorICA6cmVmOmBUYXJnZXQgVXNhZ2UgUmVxdWlyZW1lbnRzYCB0aGlzIGlzIHRoZSBjb25zdW1pbmcgdGFyZ2V0IHJhdGhlcgorICB0aGFuIHRoZSB0YXJnZXQgc3BlY2lmeWluZyB0aGUgcmVxdWlyZW1lbnQuCiBgYCQ8SU5TVEFMTF9QUkVGSVg+YGAKICAgQ29udGVudCBvZiB0aGUgaW5zdGFsbCBwcmVmaXggd2hlbiB0aGUgdGFyZ2V0IGlzIGV4cG9ydGVkIHZpYQotICA6Y29tbWFuZDpgaW5zdGFsbChFWFBPUlQpYCBhbmQgZW1wdHkgb3RoZXJ3aXNlLgorICA6Y29tbWFuZDpgaW5zdGFsbChFWFBPUlQpYCwgb3Igd2hlbiBldmFsdWF0ZWQgaW4KKyAgOnByb3BfdGd0OmBJTlNUQUxMX05BTUVfRElSYCwgYW5kIGVtcHR5IG90aGVyd2lzZS4KIAogT3V0cHV0LVJlbGF0ZWQgRXhwcmVzc2lvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1nZW5lcmF0b3JzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtZ2VuZXJhdG9ycy43LnJzdAppbmRleCA0MWY3NjUyLi42Zjg4YzBhIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1nZW5lcmF0b3JzLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLWdlbmVyYXRvcnMuNy5yc3QKQEAgLTUyLDEzICs1MiwxNCBAQAogICAgL2dlbmVyYXRvci9Vbml4IE1ha2VmaWxlcwogICAgL2dlbmVyYXRvci9XYXRjb20gV01ha2UKIAotTmluamEgR2VuZXJhdG9yCi1eXl5eXl5eXl5eXl5eXl4KK05pbmphIEdlbmVyYXRvcnMKK15eXl5eXl5eXl5eXl5eXl4KIAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDEKIAogICAgL2dlbmVyYXRvci9OaW5qYQorICAgL2dlbmVyYXRvci9OaW5qYSBNdWx0aS1Db25maWcKIAogLi4gX2BJREUgQnVpbGQgVG9vbCBHZW5lcmF0b3JzYDoKIApkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtbGFuZ3VhZ2UuNy5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS1sYW5ndWFnZS43LnJzdAppbmRleCA0Y2E4ZTNhLi5iN2YwODYxIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1sYW5ndWFnZS43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1sYW5ndWFnZS43LnJzdApAQCAtNTY3LDYgKzU2Nyw4IEBACiB0aGF0IGFyZSBwcm92aWRlZCBieSBDTWFrZSBvciBoYXZlIG1lYW5pbmcgdG8gQ01ha2Ugd2hlbiBzZXQKIGJ5IHByb2plY3QgY29kZS4KIAorLi4gaW5jbHVkZTo6IElEX1JFU0VSVkUudHh0CisKIC4uIF9gQ01ha2UgTGFuZ3VhZ2UgRW52aXJvbm1lbnQgVmFyaWFibGVzYDoKIAogRW52aXJvbm1lbnQgVmFyaWFibGVzCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jbWFrZS1tb2R1bGVzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtbW9kdWxlcy43LnJzdAppbmRleCBjNjBkYzQwLi41MDEzMWU4IDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1tb2R1bGVzLjcucnN0CisrKyBiL0hlbHAvbWFudWFsL2NtYWtlLW1vZHVsZXMuNy5yc3QKQEAgLTM2LDYgKzM2LDcgQEAKICAgIC9tb2R1bGUvQ2hlY2tJbmNsdWRlRmlsZXMKICAgIC9tb2R1bGUvQ2hlY2tMYW5ndWFnZQogICAgL21vZHVsZS9DaGVja0xpYnJhcnlFeGlzdHMKKyAgIC9tb2R1bGUvQ2hlY2tMaW5rZXJGbGFnCiAgICAvbW9kdWxlL0NoZWNrT0JKQ0NvbXBpbGVyRmxhZwogICAgL21vZHVsZS9DaGVja09CSkNTb3VyY2VDb21waWxlcwogICAgL21vZHVsZS9DaGVja09CSkNTb3VyY2VSdW5zCkBAIC0xMjIsNiArMTIzLDcgQEAKICAgIC9tb2R1bGUvRmluZENBQkxFCiAgICAvbW9kdWxlL0ZpbmRDb2luM0QKICAgIC9tb2R1bGUvRmluZEN1cHMKKyAgIC9tb2R1bGUvRmluZENVREFUb29sa2l0CiAgICAvbW9kdWxlL0ZpbmRDVVJMCiAgICAvbW9kdWxlL0ZpbmRDdXJzZXMKICAgIC9tb2R1bGUvRmluZENWUwpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtcG9saWNpZXMuNy5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS1wb2xpY2llcy43LnJzdAppbmRleCA0NGVhMWE4Li4zY2ViMWRmIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS1wb2xpY2llcy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1wb2xpY2llcy43LnJzdApAQCAtNTEsNiArNTEsMzkgQEAKIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJlcG9ydCBhbiBlcnJvciBvbiB1c2Ugb2YgZGVwcmVjYXRlZCBtYWNyb3Mgb3IKIGZ1bmN0aW9ucy4KIAorUG9saWNpZXMgSW50cm9kdWNlZCBieSBDTWFrZSAzLjE4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gdG9jdHJlZTo6CisgICA6bWF4ZGVwdGg6IDEKKworICAgQ01QMDEwOTogZmluZF9wcm9ncmFtKCkgcmVxdWlyZXMgcGVybWlzc2lvbiB0byBleGVjdXRlIGJ1dCBub3QgdG8gcmVhZC4gPC9wb2xpY3kvQ01QMDEwOT4KKworUG9saWNpZXMgSW50cm9kdWNlZCBieSBDTWFrZSAzLjE4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gdG9jdHJlZTo6CisgICA6bWF4ZGVwdGg6IDEKKworICAgQ01QMDEwODogQSB0YXJnZXQgY2Fubm90IGxpbmsgdG8gaXRzZWxmIHRocm91Z2ggYW4gYWxpYXMuIDwvcG9saWN5L0NNUDAxMDg+CisgICBDTVAwMTA3OiBBbiBBTElBUyB0YXJnZXQgY2Fubm90IG92ZXJ3cml0ZSBhbm90aGVyIHRhcmdldC4gPC9wb2xpY3kvQ01QMDEwNz4KKyAgIENNUDAxMDY6IFRoZSBEb2N1bWVudGF0aW9uIG1vZHVsZSBpcyByZW1vdmVkLiA8L3BvbGljeS9DTVAwMTA2PgorICAgQ01QMDEwNTogRGV2aWNlIGxpbmsgc3RlcCB1c2VzIHRoZSBsaW5rIG9wdGlvbnMuIDwvcG9saWN5L0NNUDAxMDU+CisgICBDTVAwMTA0OiBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgbm93IGRldGVjdGVkIGZvciBOVkNDLCBlbXB0eSBDVURBX0FSQ0hJVEVDVFVSRVMgbm90IGFsbG93ZWQuIDwvcG9saWN5L0NNUDAxMDQ+CisgICBDTVAwMTAzOiBNdWx0aXBsZSBleHBvcnQoKSB3aXRoIHNhbWUgRklMRSB3aXRob3V0IEFQUEVORCBpcyBub3QgYWxsb3dlZC4gPC9wb2xpY3kvQ01QMDEwMz4KKworUG9saWNpZXMgSW50cm9kdWNlZCBieSBDTWFrZSAzLjE3Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gdG9jdHJlZTo6CisgICA6bWF4ZGVwdGg6IDEKKworICAgQ01QMDEwMjogbWFya19hc19hZHZhbmNlZCgpIGRvZXMgbm90aGluZyBpZiBhIGNhY2hlIGVudHJ5IGRvZXMgbm90IGV4aXN0LiA8L3BvbGljeS9DTVAwMTAyPgorICAgQ01QMDEwMTogdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyBob25vcnMgQkVGT1JFIGtleXdvcmQgaW4gYWxsIHNjb3Blcy4gPC9wb2xpY3kvQ01QMDEwMT4KKyAgIENNUDAxMDA6IExldCBBVVRPTU9DIGFuZCBBVVRPVUlDIHByb2Nlc3MgLmhoIGhlYWRlciBmaWxlcy4gPC9wb2xpY3kvQ01QMDEwMD4KKyAgIENNUDAwOTk6IExpbmsgcHJvcGVydGllcyBhcmUgdHJhbnNpdGl2ZSBvdmVyIHByaXZhdGUgZGVwZW5kZW5jeSBvbiBzdGF0aWMgbGlicmFyaWVzLiA8L3BvbGljeS9DTVAwMDk5PgorICAgQ01QMDA5ODogRmluZEZMRVggcnVucyBmbGV4IGluIENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUiB3aGVuIGV4ZWN1dGluZy4gPC9wb2xpY3kvQ01QMDA5OD4KKwogUG9saWNpZXMgSW50cm9kdWNlZCBieSBDTWFrZSAzLjE2CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtcHJvcGVydGllcy43LnJzdCBiL0hlbHAvbWFudWFsL2NtYWtlLXByb3BlcnRpZXMuNy5yc3QKaW5kZXggZTcwNDM3MS4uMzBiMmEwNSAxMDA2NDQKLS0tIGEvSGVscC9tYW51YWwvY21ha2UtcHJvcGVydGllcy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS1wcm9wZXJ0aWVzLjcucnN0CkBAIC0yMiwxMCArMjIsMTMgQEAKICAgIC9wcm9wX2dibC9BVVRPTU9DX1RBUkdFVFNfRk9MREVSCiAgICAvcHJvcF9nYmwvQVVUT1JDQ19TT1VSQ0VfR1JPVVAKICAgIC9wcm9wX2dibC9DTUFLRV9DX0tOT1dOX0ZFQVRVUkVTCisgICAvcHJvcF9nYmwvQ01BS0VfQ1VEQV9LTk9XTl9GRUFUVVJFUwogICAgL3Byb3BfZ2JsL0NNQUtFX0NYWF9LTk9XTl9GRUFUVVJFUwogICAgL3Byb3BfZ2JsL0NNQUtFX1JPTEUKICAgIC9wcm9wX2dibC9ERUJVR19DT05GSUdVUkFUSU9OUwogICAgL3Byb3BfZ2JsL0RJU0FCTEVEX0ZFQVRVUkVTCisgICAvcHJvcF9nYmwvRUNMSVBTRV9FWFRSQV9DUFJPSkVDVF9DT05URU5UUworICAgL3Byb3BfZ2JsL0VDTElQU0VfRVhUUkFfTkFUVVJFUwogICAgL3Byb3BfZ2JsL0VOQUJMRURfRkVBVFVSRVMKICAgIC9wcm9wX2dibC9FTkFCTEVEX0xBTkdVQUdFUwogICAgL3Byb3BfZ2JsL0ZJTkRfTElCUkFSWV9VU0VfTElCMzJfUEFUSFMKQEAgLTM2LDEyICszOSwxMCBAQAogICAgL3Byb3BfZ2JsL0dMT0JBTF9ERVBFTkRTX0RFQlVHX01PREUKICAgIC9wcm9wX2dibC9HTE9CQUxfREVQRU5EU19OT19DWUNMRVMKICAgIC9wcm9wX2dibC9JTl9UUllfQ09NUElMRQorICAgL3Byb3BfZ2JsL0pPQl9QT09MUwogICAgL3Byb3BfZ2JsL1BBQ0tBR0VTX0ZPVU5ECiAgICAvcHJvcF9nYmwvUEFDS0FHRVNfTk9UX0ZPVU5ECi0gICAvcHJvcF9nYmwvSk9CX1BPT0xTCiAgICAvcHJvcF9nYmwvUFJFREVGSU5FRF9UQVJHRVRTX0ZPTERFUgotICAgL3Byb3BfZ2JsL0VDTElQU0VfRVhUUkFfTkFUVVJFUwotICAgL3Byb3BfZ2JsL0VDTElQU0VfRVhUUkFfQ1BST0pFQ1RfQ09OVEVOVFMKICAgIC9wcm9wX2dibC9SRVBPUlRfVU5ERUZJTkVEX1BST1BFUlRJRVMKICAgIC9wcm9wX2dibC9SVUxFX0xBVU5DSF9DT01QSUxFCiAgICAvcHJvcF9nYmwvUlVMRV9MQVVOQ0hfQ1VTVE9NCkBAIC0xMDMsNiArMTA0LDggQEAKICAgIDptYXhkZXB0aDogMQogCiAgICAvcHJvcF90Z3QvQURESVRJT05BTF9DTEVBTl9GSUxFUworICAgL3Byb3BfdGd0L0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMKKyAgIC9wcm9wX3RndC9BTElBU19HTE9CQUwKICAgIC9wcm9wX3RndC9BTElBU0VEX1RBUkdFVAogICAgL3Byb3BfdGd0L0FORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUwogICAgL3Byb3BfdGd0L0FORFJPSURfQVBJCkBAIC0xMjksMjAgKzEzMiwyMCBAQAogICAgL3Byb3BfdGd0L0FVVE9HRU5fT1JJR0lOX0RFUEVORFMKICAgIC9wcm9wX3RndC9BVVRPR0VOX1BBUkFMTEVMCiAgICAvcHJvcF90Z3QvQVVUT0dFTl9UQVJHRVRfREVQRU5EUworICAgL3Byb3BfdGd0L0FVVE9NT0MKICAgIC9wcm9wX3RndC9BVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVMKICAgIC9wcm9wX3RndC9BVVRPTU9DX0RFUEVORF9GSUxURVJTCiAgICAvcHJvcF90Z3QvQVVUT01PQ19FWEVDVVRBQkxFCiAgICAvcHJvcF90Z3QvQVVUT01PQ19NQUNST19OQU1FUwogICAgL3Byb3BfdGd0L0FVVE9NT0NfTU9DX09QVElPTlMKICAgIC9wcm9wX3RndC9BVVRPTU9DX1BBVEhfUFJFRklYCi0gICAvcHJvcF90Z3QvQVVUT01PQworICAgL3Byb3BfdGd0L0FVVE9SQ0MKKyAgIC9wcm9wX3RndC9BVVRPUkNDX0VYRUNVVEFCTEUKKyAgIC9wcm9wX3RndC9BVVRPUkNDX09QVElPTlMKICAgIC9wcm9wX3RndC9BVVRPVUlDCiAgICAvcHJvcF90Z3QvQVVUT1VJQ19FWEVDVVRBQkxFCiAgICAvcHJvcF90Z3QvQVVUT1VJQ19PUFRJT05TCiAgICAvcHJvcF90Z3QvQVVUT1VJQ19TRUFSQ0hfUEFUSFMKLSAgIC9wcm9wX3RndC9BVVRPUkNDCi0gICAvcHJvcF90Z3QvQVVUT1JDQ19FWEVDVVRBQkxFCi0gICAvcHJvcF90Z3QvQVVUT1JDQ19PUFRJT05TCiAgICAvcHJvcF90Z3QvQklOQVJZX0RJUgogICAgL3Byb3BfdGd0L0JVSUxEX1JQQVRICiAgICAvcHJvcF90Z3QvQlVJTERfUlBBVEhfVVNFX09SSUdJTgpAQCAtMTY5LDkgKzE3MiwxMSBAQAogICAgL3Byb3BfdGd0L0NPTkZJR19PVVRQVVRfTkFNRQogICAgL3Byb3BfdGd0L0NPTkZJR19QT1NURklYCiAgICAvcHJvcF90Z3QvQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IKKyAgIC9wcm9wX3RndC9DVURBX0FSQ0hJVEVDVFVSRVMKICAgIC9wcm9wX3RndC9DVURBX1BUWF9DT01QSUxBVElPTgogICAgL3Byb3BfdGd0L0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OCiAgICAvcHJvcF90Z3QvQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTCisgICAvcHJvcF90Z3QvQ1VEQV9SVU5USU1FX0xJQlJBUlkKICAgIC9wcm9wX3RndC9DVURBX0VYVEVOU0lPTlMKICAgIC9wcm9wX3RndC9DVURBX1NUQU5EQVJECiAgICAvcHJvcF90Z3QvQ1VEQV9TVEFOREFSRF9SRVFVSVJFRApAQCAtMTgyLDcgKzE4Nyw5IEBACiAgICAvcHJvcF90Z3QvREVGSU5FX1NZTUJPTAogICAgL3Byb3BfdGd0L0RFUExPWU1FTlRfUkVNT1RFX0RJUkVDVE9SWQogICAgL3Byb3BfdGd0L0RFUExPWU1FTlRfQURESVRJT05BTF9GSUxFUworICAgL3Byb3BfdGd0L0RFUFJFQ0FUSU9OCiAgICAvcHJvcF90Z3QvRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMKKyAgIC9wcm9wX3RndC9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSwogICAgL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04KICAgIC9wcm9wX3RndC9FY2hvU3RyaW5nCiAgICAvcHJvcF90Z3QvRU5BQkxFX0VYUE9SVFMKQEAgLTE5NCw3ICsyMDEsOSBAQAogICAgL3Byb3BfdGd0L0ZPTERFUgogICAgL3Byb3BfdGd0L0ZvcnRyYW5fRk9STUFUCiAgICAvcHJvcF90Z3QvRm9ydHJhbl9NT0RVTEVfRElSRUNUT1JZCisgICAvcHJvcF90Z3QvRm9ydHJhbl9QUkVQUk9DRVNTCiAgICAvcHJvcF90Z3QvRlJBTUVXT1JLCisgICAvcHJvcF90Z3QvRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYX0NPTkZJRwogICAgL3Byb3BfdGd0L0ZSQU1FV09SS19WRVJTSU9OCiAgICAvcHJvcF90Z3QvR0VORVJBVE9SX0ZJTEVfTkFNRQogICAgL3Byb3BfdGd0L0dIU19JTlRFR1JJVFlfQVBQCkBAIC0yNTEsNiArMjYwLDcgQEAKICAgIC9wcm9wX3RndC9JT1NfSU5TVEFMTF9DT01CSU5FRAogICAgL3Byb3BfdGd0L0pPQl9QT09MX0NPTVBJTEUKICAgIC9wcm9wX3RndC9KT0JfUE9PTF9MSU5LCisgICAvcHJvcF90Z3QvSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIKICAgIC9wcm9wX3RndC9MQUJFTFMKICAgIC9wcm9wX3RndC9MQU5HX0NMQU5HX1RJRFkKICAgIC9wcm9wX3RndC9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSCkBAIC0yNzksNiArMjg5LDggQEAKICAgIC9wcm9wX3RndC9MSU5LX1dIQVRfWU9VX1VTRQogICAgL3Byb3BfdGd0L0xPQ0FUSU9OX0NPTkZJRwogICAgL3Byb3BfdGd0L0xPQ0FUSU9OCisgICAvcHJvcF90Z3QvTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OCisgICAvcHJvcF90Z3QvTUFDSE9fQ1VSUkVOVF9WRVJTSU9OCiAgICAvcHJvcF90Z3QvTUFDT1NYX0JVTkRMRV9JTkZPX1BMSVNUCiAgICAvcHJvcF90Z3QvTUFDT1NYX0JVTkRMRQogICAgL3Byb3BfdGd0L01BQ09TWF9GUkFNRVdPUktfSU5GT19QTElTVApAQCAtMjk5LDYgKzMxMSw3IEBACiAgICAvcHJvcF90Z3QvT1NYX0FSQ0hJVEVDVFVSRVMKICAgIC9wcm9wX3RndC9PVVRQVVRfTkFNRV9DT05GSUcKICAgIC9wcm9wX3RndC9PVVRQVVRfTkFNRQorICAgL3Byb3BfdGd0L1BDSF9XQVJOX0lOVkFMSUQKICAgIC9wcm9wX3RndC9QREJfTkFNRV9DT05GSUcKICAgIC9wcm9wX3RndC9QREJfTkFNRQogICAgL3Byb3BfdGd0L1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRwpAQCAtMzM1LDYgKzM0OCw3IEBACiAgICAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQkFUQ0hfU0laRQogICAgL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0NPREVfQUZURVJfSU5DTFVERQogICAgL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0NPREVfQkVGT1JFX0lOQ0xVREUKKyAgIC9wcm9wX3RndC9VTklUWV9CVUlMRF9NT0RFCiAgICAvcHJvcF90Z3QvVkVSU0lPTgogICAgL3Byb3BfdGd0L1ZJU0lCSUxJVFlfSU5MSU5FU19ISURERU4KICAgIC9wcm9wX3RndC9WU19DT05GSUdVUkFUSU9OX1RZUEUKQEAgLTM0OCw2ICszNjIsNyBAQAogICAgL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VTCiAgICAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRVNfQ09QWV9MT0NBTAogICAgL3Byb3BfdGd0L1ZTX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04KKyAgIC9wcm9wX3RndC9WU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFCiAgICAvcHJvcF90Z3QvVlNfRFBJX0FXQVJFCiAgICAvcHJvcF90Z3QvVlNfR0xPQkFMX0tFWVdPUkQKICAgIC9wcm9wX3RndC9WU19HTE9CQUxfUFJPSkVDVF9UWVBFUwpAQCAtMzYwLDEyICszNzUsMTUgQEAKICAgIC9wcm9wX3RndC9WU19NT0JJTEVfRVhURU5TSU9OU19WRVJTSU9OCiAgICAvcHJvcF90Z3QvVlNfTk9fU09MVVRJT05fREVQTE9ZCiAgICAvcHJvcF90Z3QvVlNfUEFDS0FHRV9SRUZFUkVOQ0VTCisgICAvcHJvcF90Z3QvVlNfUExBVEZPUk1fVE9PTFNFVAogICAgL3Byb3BfdGd0L1ZTX1BST0pFQ1RfSU1QT1JUCiAgICAvcHJvcF90Z3QvVlNfU0NDX0FVWFBBVEgKICAgIC9wcm9wX3RndC9WU19TQ0NfTE9DQUxQQVRICiAgICAvcHJvcF90Z3QvVlNfU0NDX1BST0pFQ1ROQU1FCiAgICAvcHJvcF90Z3QvVlNfU0NDX1BST1ZJREVSCiAgICAvcHJvcF90Z3QvVlNfU0RLX1JFRkVSRU5DRVMKKyAgIC9wcm9wX3RndC9WU19TT0xVVElPTl9ERVBMT1kKKyAgIC9wcm9wX3RndC9WU19TT1VSQ0VfU0VUVElOR1NfdG9vbAogICAgL3Byb3BfdGd0L1ZTX1VTRVJfUFJPUFMKICAgIC9wcm9wX3RndC9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9NSU5fVkVSU0lPTgogICAgL3Byb3BfdGd0L1ZTX1dJTlJUX0NPTVBPTkVOVApAQCAtMzk2LDYgKzQxNCw3IEBACiAgICAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVJfU1RPUAogICAgL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUgogICAgL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QCisgICAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZCiAgICAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1pPTUJJRV9PQkpFQ1RTCiAgICAvcHJvcF90Z3QvWENURVNUCiAKQEAgLTQ0MiwxMyArNDYxLDE0IEBACiAgICA6bWF4ZGVwdGg6IDEKIAogICAgL3Byb3Bfc2YvQUJTVFJBQ1QKLSAgIC9wcm9wX3NmL0FVVE9VSUNfT1BUSU9OUwogICAgL3Byb3Bfc2YvQVVUT1JDQ19PUFRJT05TCisgICAvcHJvcF9zZi9BVVRPVUlDX09QVElPTlMKICAgIC9wcm9wX3NmL0NPTVBJTEVfREVGSU5JVElPTlMKICAgIC9wcm9wX3NmL0NPTVBJTEVfRkxBR1MKICAgIC9wcm9wX3NmL0NPTVBJTEVfT1BUSU9OUwogICAgL3Byb3Bfc2YvRVhURVJOQUxfT0JKRUNUCiAgICAvcHJvcF9zZi9Gb3J0cmFuX0ZPUk1BVAorICAgL3Byb3Bfc2YvRm9ydHJhbl9QUkVQUk9DRVNTCiAgICAvcHJvcF9zZi9HRU5FUkFURUQKICAgIC9wcm9wX3NmL0hFQURFUl9GSUxFX09OTFkKICAgIC9wcm9wX3NmL0lOQ0xVREVfRElSRUNUT1JJRVMKQEAgLTQ2OCwxMiArNDg4LDE0IEBACiAgICAvcHJvcF9zZi9Td2lmdF9ERVBFTkRFTkNJRVNfRklMRQogICAgL3Byb3Bfc2YvU3dpZnRfRElBR05PU1RJQ1NfRklMRQogICAgL3Byb3Bfc2YvU1lNQk9MSUMKKyAgIC9wcm9wX3NmL1VOSVRZX0dST1VQCiAgICAvcHJvcF9zZi9WU19DT1BZX1RPX09VVF9ESVIKICAgIC9wcm9wX3NmL1ZTX0NTSEFSUF90YWduYW1lCiAgICAvcHJvcF9zZi9WU19ERVBMT1lNRU5UX0NPTlRFTlQKICAgIC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfTE9DQVRJT04KICAgIC9wcm9wX3NmL1ZTX0lOQ0xVREVfSU5fVlNJWAogICAgL3Byb3Bfc2YvVlNfUkVTT1VSQ0VfR0VORVJBVE9SCisgICAvcHJvcF9zZi9WU19TRVRUSU5HUwogICAgL3Byb3Bfc2YvVlNfU0hBREVSX0RJU0FCTEVfT1BUSU1JWkFUSU9OUwogICAgL3Byb3Bfc2YvVlNfU0hBREVSX0VOQUJMRV9ERUJVRwogICAgL3Byb3Bfc2YvVlNfU0hBREVSX0VOVFJZUE9JTlQKZGlmZiAtLWdpdCBhL0hlbHAvbWFudWFsL2NtYWtlLXRvb2xjaGFpbnMuNy5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS10b29sY2hhaW5zLjcucnN0CmluZGV4IGYyMzNkMDguLmU4YmFkZDQgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLXRvb2xjaGFpbnMuNy5yc3QKKysrIGIvSGVscC9tYW51YWwvY21ha2UtdG9vbGNoYWlucy43LnJzdApAQCAtMjMzLDYgKzIzMyw5IEBACiAgIHNldChDTUFLRV9DWFhfQ09NUElMRVIgUUNDKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX1RBUkdFVCAke2FyY2h9KQogCisgIHNldChDTUFLRV9TWVNST09UICRFTlZ7UU5YX1RBUkdFVH0pCisKKwogQ3Jvc3MgQ29tcGlsaW5nIGZvciBXaW5kb3dzIENFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UtdmFyaWFibGVzLjcucnN0IGIvSGVscC9tYW51YWwvY21ha2UtdmFyaWFibGVzLjcucnN0CmluZGV4IDUzYjdmOGQuLjRjZTgzNjUgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2NtYWtlLXZhcmlhYmxlcy43LnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS12YXJpYWJsZXMuNy5yc3QKQEAgLTE0LDYgKzE0LDcgQEAKIDpyZWY6YFZhcmlhYmxlcyA8Q01ha2UgTGFuZ3VhZ2UgVmFyaWFibGVzPmAKIHNlY3Rpb24gaW4gdGhlIGNtYWtlLWxhbmd1YWdlIG1hbnVhbC4KIAorLi4gaW5jbHVkZTo6IElEX1JFU0VSVkUudHh0CiAKIFZhcmlhYmxlcyB0aGF0IFByb3ZpZGUgSW5mb3JtYXRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM3LDE3ICszOCwyNCBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX0NST1NTQ09NUElMSU5HX0VNVUxBVE9SCiAgICAvdmFyaWFibGUvQ01BS0VfQ1RFU1RfQ09NTUFORAogICAgL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUgorICAgL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT04KKyAgIC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSCisgICAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUKKyAgIC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORQogICAgL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfTElTVF9ESVIKICAgIC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0xJU1RfRklMRQogICAgL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfTElTVF9MSU5FCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSCisgICAvdmFyaWFibGUvQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMKICAgIC92YXJpYWJsZS9DTUFLRV9ESVJFQ1RPUllfTEFCRUxTCiAgICAvdmFyaWFibGUvQ01BS0VfRExfTElCUworICAgL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLCiAgICAvdmFyaWFibGUvQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTgogICAgL3ZhcmlhYmxlL0NNQUtFX0VESVRfQ09NTUFORAogICAgL3ZhcmlhYmxlL0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYCiAgICAvdmFyaWFibGUvQ01BS0VfRVhUUkFfR0VORVJBVE9SCiAgICAvdmFyaWFibGUvQ01BS0VfRVhUUkFfU0hBUkVEX0xJQlJBUllfU1VGRklYRVMKKyAgIC92YXJpYWJsZS9DTUFLRV9GSU5EX0RFQlVHX01PREUKICAgIC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRQogICAgL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX0RJUkVDVElPTgogICAgL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX09SREVSCkBAIC01OSw2ICs2Nyw3IEBACiAgICAvdmFyaWFibGUvQ01BS0VfSU1QT1JUX0xJQlJBUllfU1VGRklYCiAgICAvdmFyaWFibGUvQ01BS0VfSk9CX1BPT0xfQ09NUElMRQogICAgL3ZhcmlhYmxlL0NNQUtFX0pPQl9QT09MX0xJTksKKyAgIC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUgogICAgL3ZhcmlhYmxlL0NNQUtFX0pPQl9QT09MUwogICAgL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfQVIKICAgIC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX1JBTkxJQgpAQCAtNzAsNyArNzksNiBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX01BS0VfUFJPR1JBTQogICAgL3ZhcmlhYmxlL0NNQUtFX01BVENIX0NPVU5UCiAgICAvdmFyaWFibGUvQ01BS0VfTUFUQ0hfbgotICAgL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfSU5ERU5UCiAgICAvdmFyaWFibGUvQ01BS0VfTUlOSU1VTV9SRVFVSVJFRF9WRVJTSU9OCiAgICAvdmFyaWFibGUvQ01BS0VfTUlOT1JfVkVSU0lPTgogICAgL3ZhcmlhYmxlL0NNQUtFX05FVFJDCkBAIC0xNTUsNyArMTYzLDYgQEAKICAgIC92YXJpYWJsZS9DTUFLRV9DT0RFTElURV9VU0VfVEFSR0VUUwogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTE9SX01BS0VGSUxFCiAgICAvdmFyaWFibGUvQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUwotICAgL3ZhcmlhYmxlL0NNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTCiAgICAvdmFyaWFibGUvQ01BS0VfREVQRU5EU19JTl9QUk9KRUNUX09OTFkKICAgIC92YXJpYWJsZS9DTUFLRV9ESVNBQkxFX0ZJTkRfUEFDS0FHRV9QYWNrYWdlTmFtZQogICAgL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfR0VORVJBVEVfTElOS0VEX1JFU09VUkNFUwpAQCAtMjA2LDYgKzIxMywxMCBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX0xJTktfRElSRUNUT1JJRVNfQkVGT1JFCiAgICAvdmFyaWFibGUvQ01BS0VfTUZDX0ZMQUcKICAgIC92YXJpYWJsZS9DTUFLRV9NQVhJTVVNX1JFQ1VSU0lPTl9ERVBUSAorICAgL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVAorICAgL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVF9TSE9XCisgICAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9JTkRFTlQKKyAgIC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0xPR19MRVZFTAogICAgL3ZhcmlhYmxlL0NNQUtFX01PRFVMRV9QQVRICiAgICAvdmFyaWFibGUvQ01BS0VfUE9MSUNZX0RFRkFVTFRfQ01QTk5OTgogICAgL3ZhcmlhYmxlL0NNQUtFX1BPTElDWV9XQVJOSU5HX0NNUE5OTk4KQEAgLTIxNCw2ICsyMjUsNyBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERQogICAgL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkUKICAgIC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFCisgICAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9QUk9KRUNULU5BTUVfSU5DTFVERV9CRUZPUkUKICAgIC92YXJpYWJsZS9DTUFLRV9TS0lQX0lOU1RBTExfQUxMX0RFUEVOREVOQ1kKICAgIC92YXJpYWJsZS9DTUFLRV9TVEFHSU5HX1BSRUZJWAogICAgL3ZhcmlhYmxlL0NNQUtFX1NVQkxJTUVfVEVYVF8yX0VOVl9TRVRUSU5HUwpAQCAtMjM5LDYgKzI1MSw3IEBACiAgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUgogICAgL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJQlJBUllfTE9BRFMKICAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFCisgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0VOVklST05NRU5UCiAgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0dVQVJEX01BTExPQwogICAgL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUlOX1RIUkVBRF9DSEVDS0VSX1NUT1AKICAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX0dVQVJEX0VER0VTCkBAIC0yNDgsNiArMjYxLDcgQEAKICAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QCiAgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSCiAgICAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSX1NUT1AKKyAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkKICAgIC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMKICAgIC92YXJpYWJsZS9QYWNrYWdlTmFtZV9ST09UCiAKQEAgLTMwOSw2ICszMjMsNyBAQAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDEKIAorICAgL3ZhcmlhYmxlL0NNQUtFX0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMKICAgIC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMKICAgIC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FQSQogICAgL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVBJX01JTgpAQCAtMzU3LDkgKzM3MiwxNCBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkKICAgIC92YXJpYWJsZS9DTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRwogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTkZJR19QT1NURklYCisgICAvdmFyaWFibGUvQ01BS0VfQ1JPU1NfQ09ORklHUworICAgL3ZhcmlhYmxlL0NNQUtFX0NURVNUX0FSR1VNRU5UUwogICAgL3ZhcmlhYmxlL0NNQUtFX0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTCisgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkKICAgIC92YXJpYWJsZS9DTUFLRV9ERUJVR19QT1NURklYCisgICAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFCisgICAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9DT05GSUdTCiAgICAvdmFyaWFibGUvQ01BS0VfRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMKICAgIC92YXJpYWJsZS9DTUFLRV9FTkFCTEVfRVhQT1JUUwogICAgL3ZhcmlhYmxlL0NNQUtFX0VYRV9MSU5LRVJfRkxBR1MKQEAgLTM2OCw4ICszODgsMTAgQEAKICAgIC92YXJpYWJsZS9DTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0lOSVQKICAgIC92YXJpYWJsZS9DTUFLRV9GT0xERVIKICAgIC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUksKKyAgIC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfQ09ORklHCiAgICAvdmFyaWFibGUvQ01BS0VfRm9ydHJhbl9GT1JNQVQKICAgIC92YXJpYWJsZS9DTUFLRV9Gb3J0cmFuX01PRFVMRV9ESVJFQ1RPUlkKKyAgIC92YXJpYWJsZS9DTUFLRV9Gb3J0cmFuX1BSRVBST0NFU1MKICAgIC92YXJpYWJsZS9DTUFLRV9HSFNfTk9fU09VUkNFX0dST1VQX0ZJTEUKICAgIC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVQKICAgIC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVRfTkFNRQpAQCAtNDE3LDYgKzQzOSw3IEBACiAgICAvdmFyaWFibGUvQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMKICAgIC92YXJpYWJsZS9DTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVQKICAgIC92YXJpYWJsZS9DTUFLRV9PU1hfU1lTUk9PVAorICAgL3ZhcmlhYmxlL0NNQUtFX1BDSF9XQVJOX0lOVkFMSUQKICAgIC92YXJpYWJsZS9DTUFLRV9QREJfT1VUUFVUX0RJUkVDVE9SWQogICAgL3ZhcmlhYmxlL0NNQUtFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRwogICAgL3ZhcmlhYmxlL0NNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUKQEAgLTQ2Niw2ICs0ODksOCBAQAogICAgL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUNDCiAgICAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VQ1hYCiAgICAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VRzc3CisgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTCisgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9FWFRFTlNJT05TCiAgICAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TVEFOREFSRApAQCAtNjAwLDYgKzYyNSw3IEBACiAgICAvdmFyaWFibGUvQ1RFU1RfUDRfQ09NTUFORAogICAgL3ZhcmlhYmxlL0NURVNUX1A0X09QVElPTlMKICAgIC92YXJpYWJsZS9DVEVTVF9QNF9VUERBVEVfT1BUSU9OUworICAgL3ZhcmlhYmxlL0NURVNUX1JFU09VUkNFX1NQRUNfRklMRQogICAgL3ZhcmlhYmxlL0NURVNUX1JVTl9DVVJSRU5UX1NDUklQVAogICAgL3ZhcmlhYmxlL0NURVNUX1NDUF9DT01NQU5ECiAgICAvdmFyaWFibGUvQ1RFU1RfU0lURQpkaWZmIC0tZ2l0IGEvSGVscC9tYW51YWwvY21ha2UuMS5yc3QgYi9IZWxwL21hbnVhbC9jbWFrZS4xLnJzdAppbmRleCA0YWI1NWEwLi5jNWUwYWFlIDEwMDY0NAotLS0gYS9IZWxwL21hbnVhbC9jbWFrZS4xLnJzdAorKysgYi9IZWxwL21hbnVhbC9jbWFrZS4xLnJzdApAQCAtMjA2LDkgKzIwNiwyNCBAQAogIFRoZSA6Y29tbWFuZDpgbWVzc2FnZWAgY29tbWFuZCB3aWxsIG9ubHkgb3V0cHV0IG1lc3NhZ2VzIG9mIHRoZSBzcGVjaWZpZWQKICBsb2cgbGV2ZWwgb3IgaGlnaGVyLiAgVGhlIGRlZmF1bHQgbG9nIGxldmVsIGlzIGBgU1RBVFVTYGAuCiAKKyBUbyBtYWtlIGEgbG9nIGxldmVsIHBlcnNpc3QgYmV0d2VlbiBDTWFrZSBydW5zLCBzZXQKKyA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfTE9HX0xFVkVMYCBhcyBhIGNhY2hlIHZhcmlhYmxlIGluc3RlYWQuCisgSWYgYm90aCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmQgdGhlIHZhcmlhYmxlIGFyZSBnaXZlbiwgdGhlIGNvbW1hbmQgbGluZQorIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlLgorCiAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucywgYGAtLWxvZ2xldmVsYGAgaXMgYWxzbyBhY2NlcHRlZCBhcyBhCiAgc3lub255bSBmb3IgdGhpcyBvcHRpb24uCiAKK2BgLS1sb2ctY29udGV4dGBgCisgRW5hYmxlIHRoZSA6Y29tbWFuZDpgbWVzc2FnZWAgY29tbWFuZCBvdXRwdXR0aW5nIGNvbnRleHQgYXR0YWNoZWQgdG8gZWFjaAorIG1lc3NhZ2UuCisKKyBUaGlzIG9wdGlvbiB0dXJucyBvbiBzaG93aW5nIGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IENNYWtlIHJ1biBvbmx5LgorIFRvIG1ha2Ugc2hvd2luZyB0aGUgY29udGV4dCBwZXJzaXN0ZW50IGZvciBhbGwgc3Vic2VxdWVudCBDTWFrZSBydW5zLCBzZXQKKyA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfQ09OVEVYVF9TSE9XYCBhcyBhIGNhY2hlIHZhcmlhYmxlIGluc3RlYWQuCisgV2hlbiB0aGlzIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgZ2l2ZW4sIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1dgCisgaXMgaWdub3JlZC4KKwogYGAtLWRlYnVnLXRyeWNvbXBpbGVgYAogIERvIG5vdCBkZWxldGUgdGhlIDpjb21tYW5kOmB0cnlfY29tcGlsZWAgYnVpbGQgdHJlZS4KICBPbmx5IHVzZWZ1bCBvbiBvbmUgOmNvbW1hbmQ6YHRyeV9jb21waWxlYCBhdCBhIHRpbWUuCkBAIC0yMjYsNiArMjQxLDE0IEBACiAgUHJpbnQgZXh0cmEgaW5mb3JtYXRpb24gZHVyaW5nIHRoZSBjbWFrZSBydW4gbGlrZSBzdGFjayB0cmFjZXMgd2l0aAogIDpjb21tYW5kOmBtZXNzYWdlKFNFTkRfRVJST1IpYCBjYWxscy4KIAorYGAtLWRlYnVnLWZpbmRgYAorIFB1dCBjbWFrZSBmaW5kIGNvbW1hbmRzIGluIGEgZGVidWcgbW9kZS4KKworIFByaW50IGV4dHJhIGZpbmQgY2FsbCBpbmZvcm1hdGlvbiBkdXJpbmcgdGhlIGNtYWtlIHJ1biB0byBzdGFuZGFyZAorIGVycm9yLiBPdXRwdXQgaXMgZGVzaWduZWQgZm9yIGh1bWFuIGNvbnN1bXB0aW9uIGFuZCBub3QgZm9yIHBhcnNpbmcuCisgU2VlIGFsc28gdGhlIDp2YXJpYWJsZTpgQ01BS0VfRklORF9ERUJVR19NT0RFYCB2YXJpYWJsZSBmb3IgZGVidWdnaW5nCisgYSBtb3JlIGxvY2FsIHBhcnQgb2YgdGhlIHByb2plY3QuCisKIGBgLS10cmFjZWBgCiAgUHV0IGNtYWtlIGluIHRyYWNlIG1vZGUuCiAKQEAgLTIzNiw2ICsyNTksNzQgQEAKIAogIExpa2UgYGAtLXRyYWNlYGAsIGJ1dCB3aXRoIHZhcmlhYmxlcyBleHBhbmRlZC4KIAorYGAtLXRyYWNlLWZvcm1hdD08Zm9ybWF0PmBgCisgUHV0IGNtYWtlIGluIHRyYWNlIG1vZGUgYW5kIHNldHMgdGhlIHRyYWNlIG91dHB1dCBmb3JtYXQuCisKKyBgYDxmb3JtYXQ+YGAgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy4KKworICAgYGBodW1hbmBgCisgICAgIFByaW50cyBlYWNoIHRyYWNlIGxpbmUgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtYXQuIFRoaXMgaXMgdGhlCisgICAgIGRlZmF1bHQgZm9ybWF0LgorCisgICBgYGpzb24tdjFgYAorICAgICBQcmludHMgZWFjaCBsaW5lIGFzIGEgc2VwYXJhdGUgSlNPTiBkb2N1bWVudC4gRWFjaCBkb2N1bWVudCBpcworICAgICBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lICggYGBcbmBgICkuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCBubworICAgICBuZXdsaW5lIGNoYXJhY3RlcnMgd2lsbCBiZSBwcmVzZW50IGluc2lkZSBhIEpTT04gZG9jdW1lbnQuCisKKyAgICAgSlNPTiB0cmFjZSBmb3JtYXQ6CisKKyAgICAgLi4gY29kZS1ibG9jazo6IGpzb24KKworICAgICAgIHsKKyAgICAgICAgICJmaWxlIjogIi9mdWxsL3BhdGgvdG8vdGhlL0NNYWtlL2ZpbGUudHh0IiwKKyAgICAgICAgICJsaW5lIjogMCwKKyAgICAgICAgICJjbWQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgImFyZ3MiOiBbImZvbyIsICJiYXIiXSwKKyAgICAgICAgICJ0aW1lIjogMTU3OTUxMjUzNS45Njg3MjMxLAorICAgICAgICAgImZyYW1lIjogMgorICAgICAgIH0KKworICAgICBUaGUgbWVtYmVycyBhcmU6CisKKyAgICAgYGBmaWxlYGAKKyAgICAgICBUaGUgZnVsbCBwYXRoIHRvIHRoZSBDTWFrZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgZnVuY3Rpb24KKyAgICAgICB3YXMgY2FsbGVkLgorCisgICAgIGBgbGluZWBgCisgICAgICAgVGhlIGxpbmUgaW4gYGBmaWxlYGAgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCisKKyAgICAgYGBjbWRgYAorICAgICAgIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBjYWxsZWQuCisKKyAgICAgYGBhcmdzYGAKKyAgICAgICBBIHN0cmluZyBsaXN0IG9mIGFsbCBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorCisgICAgIGBgdGltZWBgCisgICAgICAgVGltZXN0YW1wIChzZWNvbmRzIHNpbmNlIGVwb2NoKSBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KKworICAgICBgYGZyYW1lYGAKKyAgICAgICBTdGFjayBmcmFtZSBkZXB0aCBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgY2FsbGVkLgorCisgICAgIEFkZGl0aW9uYWxseSwgdGhlIGZpcnN0IEpTT04gZG9jdW1lbnQgb3V0cHV0dGVkIGNvbnRhaW5zIHRoZQorICAgICBgYHZlcnNpb25gYCBrZXkgZm9yIHRoZSBjdXJyZW50IG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG9mIHRoZQorCisgICAgIEpTT04gdHJhY2UgZm9ybWF0OgorCisgICAgIC4uIGNvZGUtYmxvY2s6OiBqc29uCisKKyAgICAgICB7CisgICAgICAgICAidmVyc2lvbiI6IHsKKyAgICAgICAgICAgIm1ham9yIjogMSwKKyAgICAgICAgICAgIm1pbm9yIjogMAorICAgICAgICAgfQorICAgICAgIH0KKworICAgICBUaGUgbWVtYmVycyBhcmU6CisKKyAgICAgYGB2ZXJzaW9uYGAKKyAgICAgICBJbmRpY2F0ZXMgdGhlIHZlcnNpb24gb2YgdGhlIEpTT04gZm9ybWF0LiBUaGUgdmVyc2lvbiBoYXMgYQorICAgICAgIG1ham9yIGFuZCBtaW5vciBjb21wb25lbnRzIGZvbGxvd2luZyBzZW1hbnRpYyB2ZXJzaW9uIGNvbnZlbnRpb25zLgorCiBgYC0tdHJhY2Utc291cmNlPTxmaWxlPmBgCiAgUHV0IGNtYWtlIGluIHRyYWNlIG1vZGUsIGJ1dCBvdXRwdXQgb25seSBsaW5lcyBvZiBhIHNwZWNpZmllZCBmaWxlLgogCkBAIC0yNTAsOSArMzQxLDkgQEAKICBQcmludCBhIHdhcm5pbmcgd2hlbiBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGlzIHVzZWQuCiAKIGBgLS13YXJuLXVudXNlZC12YXJzYGAKLSBXYXJuIGFib3V0IHVudXNlZCB2YXJpYWJsZXMuCi0KLSBGaW5kIHZhcmlhYmxlcyB0aGF0IGFyZSBkZWNsYXJlZCBvciBzZXQsIGJ1dCBub3QgdXNlZC4KKyBEb2VzIG5vdGhpbmcuICBJbiBDTWFrZSB2ZXJzaW9ucyAzLjIgYW5kIGJlbG93IHRoaXMgZW5hYmxlZCB3YXJuaW5ncyBhYm91dAorIHVudXNlZCB2YXJpYWJsZXMuICBJbiBDTWFrZSB2ZXJzaW9ucyAzLjMgdGhyb3VnaCAzLjE4IHRoZSBvcHRpb24gd2FzIGJyb2tlbi4KKyBJbiBDTWFrZSAzLjE5IGFuZCBhYm92ZSB0aGUgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQuCiAKIGBgLS1uby13YXJuLXVudXNlZC1jbGlgYAogIERvbid0IHdhcm4gYWJvdXQgY29tbWFuZCBsaW5lIG9wdGlvbnMuCkBAIC0yNjcsNiArMzU4LDIwIEBACiAgaW4gOnZhcmlhYmxlOmBDTUFLRV9TT1VSQ0VfRElSYCBhbmQgOnZhcmlhYmxlOmBDTUFLRV9CSU5BUllfRElSYC4KICBUaGlzIGZsYWcgdGVsbHMgQ01ha2UgdG8gd2FybiBhYm91dCBvdGhlciBmaWxlcyBhcyB3ZWxsLgogCitgYC0tcHJvZmlsaW5nLW91dHB1dD08cGF0aD5gYAorIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgYC0tcHJvZmlsaW5nLWZvcm1hdGBgIHRvIG91dHB1dCB0byBhIGdpdmVuIHBhdGguCisKK2BgLS1wcm9maWxpbmctZm9ybWF0PTxmaWxlPmBgCisgRW5hYmxlIHRoZSBvdXRwdXQgb2YgcHJvZmlsaW5nIGRhdGEgb2YgQ01ha2Ugc2NyaXB0IGluIHRoZSBnaXZlbiBmb3JtYXQuCisKKyBUaGlzIGNhbiBhaWQgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb2YgQ01ha2Ugc2NyaXB0cyBleGVjdXRlZC4gVGhpcmQgcGFydHkKKyBhcHBsaWNhdGlvbnMgc2hvdWxkIGJlIHVzZWQgdG8gcHJvY2VzcyB0aGUgb3V0cHV0IGludG8gaHVtYW4gcmVhZGFibGUgZm9ybWF0LgorCisgQ3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgYXJlOgorIGBgZ29vZ2xlLXRyYWNlYGAgT3V0cHV0cyBpbiBHb29nbGUgVHJhY2UgRm9ybWF0LCB3aGljaCBjYW4gYmUgcGFyc2VkIGJ5IHRoZQorIGFib3V0OnRyYWNpbmcgdGFiIG9mIEdvb2dsZSBDaHJvbWUgb3IgdXNpbmcgYSBwbHVnaW4gZm9yIGEgdG9vbCBsaWtlIFRyYWNlCisgQ29tcGFzcy4KKwogLi4gX2BCdWlsZCBUb29sIE1vZGVgOgogCiBCdWlsZCBhIFByb2plY3QKQEAgLTM0NSw2ICs0NTAsOSBAQAogYGAtLWNvbXBvbmVudCA8Y29tcD5gYAogICBDb21wb25lbnQtYmFzZWQgaW5zdGFsbC4gT25seSBpbnN0YWxsIGNvbXBvbmVudCBgYDxjb21wPmBgLgogCitgYC0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgPHBlcm1pc3Npb25zPmBgCisgIERlZmF1bHQgZGlyZWN0b3J5IGluc3RhbGwgcGVybWlzc2lvbnMuIFBlcm1pc3Npb25zIGluIGZvcm1hdCBgYDx1PXJ3eCxnPXJ4LG89cng+YGAuCisKIGBgLS1wcmVmaXggPHByZWZpeD5gYAogICBPdmVycmlkZSB0aGUgaW5zdGFsbGF0aW9uIHByZWZpeCwgOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1BSRUZJWGAuCiAKQEAgLTM3NiwxMyArNDg0LDE3IEBACiAKIC4uIGNvZGUtYmxvY2s6OiBzaGVsbAogCi0gIGNtYWtlIFt7LUQgPHZhcj49PHZhbHVlPn0uLi5dIC1QIDxjbWFrZS1zY3JpcHQtZmlsZT4KKyAgY21ha2UgW3stRCA8dmFyPj08dmFsdWU+fS4uLl0gLVAgPGNtYWtlLXNjcmlwdC1maWxlPiBbLS0gPHVucGFyc2VkLW9wdGlvbnM+Li4uXQogCiBQcm9jZXNzIHRoZSBnaXZlbiBjbWFrZSBmaWxlIGFzIGEgc2NyaXB0IHdyaXR0ZW4gaW4gdGhlIENNYWtlCiBsYW5ndWFnZS4gIE5vIGNvbmZpZ3VyZSBvciBnZW5lcmF0ZSBzdGVwIGlzIHBlcmZvcm1lZCBhbmQgdGhlIGNhY2hlCiBpcyBub3QgbW9kaWZpZWQuICBJZiB2YXJpYWJsZXMgYXJlIGRlZmluZWQgdXNpbmcgYGAtRGBgLCB0aGlzIG11c3QgYmUKIGRvbmUgYmVmb3JlIHRoZSBgYC1QYGAgYXJndW1lbnQuCiAKK0FueSBvcHRpb25zIGFmdGVyIGBgLS1gYCBhcmUgbm90IHBhcnNlZCBieSBDTWFrZSwgYnV0IHRoZXkgYXJlIHN0aWxsIGluY2x1ZGVkCitpbiB0aGUgc2V0IG9mIDp2YXJpYWJsZTpgQ01BS0VfQVJHVjxuPiA8Q01BS0VfQVJHVjA+YCB2YXJpYWJsZXMgcGFzc2VkIHRvIHRoZQorc2NyaXB0IChpbmNsdWRpbmcgdGhlIGBgLS1gYCBpdHNlbGYpLgorCiAKIFJ1biBhIENvbW1hbmQtTGluZSBUb29sCiA9PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDQ5LDEyICs1NjEsMTYgQEAKICAgYGBzZXJ2ZXJNb2RlYGAKICAgICBgYHRydWVgYCBpZiBjbWFrZSBzdXBwb3J0cyBzZXJ2ZXItbW9kZSBhbmQgYGBmYWxzZWBgIG90aGVyd2lzZS4KIAorYGBjYXQgPGZpbGVzPi4uLmBgCisgIENvbmNhdGVuYXRlIGZpbGVzIGFuZCBwcmludCBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCiBgYGNoZGlyIDxkaXI+IDxjbWQ+IFs8YXJnPi4uLl1gYAogICBDaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHJ1biBhIGNvbW1hbmQuCiAKIGBgY29tcGFyZV9maWxlcyBbLS1pZ25vcmUtZW9sXSA8ZmlsZTE+IDxmaWxlMj5gYAogICBDaGVjayBpZiBgYDxmaWxlMT5gYCBpcyBzYW1lIGFzIGBgPGZpbGUyPmBgLiBJZiBmaWxlcyBhcmUgdGhlIHNhbWUsCi0gIHRoZW4gcmV0dXJucyBgYDBgYCwgaWYgbm90IGl0IHJldHVybnMgYGAxYGAuICBUaGUgYGAtLWlnbm9yZS1lb2xgYCBvcHRpb24KKyAgdGhlbiByZXR1cm5zIGBgMGBgLCBpZiBub3QgaXQgcmV0dXJucyBgYDFgYC4gIEluIGNhc2Ugb2YgaW52YWxpZAorICBhcmd1bWVudHMsIGl0IHJldHVybnMgMi4gVGhlIGBgLS1pZ25vcmUtZW9sYGAgb3B0aW9uCiAgIGltcGxpZXMgbGluZS13aXNlIGNvbXBhcmlzb24gYW5kIGlnbm9yZXMgTEYvQ1JMRiBkaWZmZXJlbmNlcy4KIAogYGBjb3B5IDxmaWxlPi4uLiA8ZGVzdGluYXRpb24+YGAKQEAgLTQ4Miw2ICs1OTgsMTMgQEAKICAgLi4gbm90ZTo6CiAgICAgUGF0aCB0byB3aGVyZSBgYDxuZXc+YGAgc3ltYm9saWMgbGluayB3aWxsIGJlIGNyZWF0ZWQgaGFzIHRvIGV4aXN0IGJlZm9yZWhhbmQuCiAKK2BgY3JlYXRlX2hhcmRsaW5rIDxvbGQ+IDxuZXc+YGAKKyAgQ3JlYXRlIGEgaGFyZCBsaW5rIGBgPG5ldz5gYCBuYW1pbmcgYGA8b2xkPmBgLgorCisgIC4uIG5vdGU6OgorICAgIFBhdGggdG8gd2hlcmUgYGA8bmV3PmBgIGhhcmQgbGluayB3aWxsIGJlIGNyZWF0ZWQgaGFzIHRvIGV4aXN0IGJlZm9yZWhhbmQuCisgICAgYGA8b2xkPmBgIGhhcyB0byBleGlzdCBiZWZvcmVoYW5kLgorCiBgYGVjaG8gWzxzdHJpbmc+Li4uXWBgCiAgIERpc3BsYXlzIGFyZ3VtZW50cyBhcyB0ZXh0LgogCkBAIC01MzksMjIgKzY2MiwzOCBAQAogICAgICA3YTBiNTQ4OTZmZTVlNzBjY2E2ZGQ2NDNhZDZmNjcyNjE0YjE4OWJmMjZmODE1MzA2MWM0ZDIxOTQ3NGIwNWRhZDA4YzRlNzI5YWY5ZjRiMDA5ZjFhMWEyODBjYjYyNTQ1NGJmNTg3YzY5MGY0NjE3YzI3ZTNhZWJkZjNiN2EyZCAgZmlsZTIudHh0CiAKIGBgcmVtb3ZlIFstZl0gPGZpbGU+Li4uYGAKLSAgUmVtb3ZlIHRoZSBmaWxlKHMpLiBJZiBhbnkgb2YgdGhlIGxpc3RlZCBmaWxlcyBhbHJlYWR5IGRvIG5vdAotICBleGlzdCwgdGhlIGNvbW1hbmQgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgY29kZSwgYnV0IG5vIG1lc3NhZ2UKLSAgaXMgbG9nZ2VkLiBUaGUgYGAtZmBgIG9wdGlvbiBjaGFuZ2VzIHRoZSBiZWhhdmlvciB0byByZXR1cm4gYQorICAuLiBkZXByZWNhdGVkOjogMy4xNworCisgIFJlbW92ZSB0aGUgZmlsZShzKS4gVGhlIHBsYW5uZWQgYmVoYXZpb3VyIHdhcyB0aGF0IGlmIGFueSBvZiB0aGUKKyAgbGlzdGVkIGZpbGVzIGFscmVhZHkgZG8gbm90IGV4aXN0LCB0aGUgY29tbWFuZCByZXR1cm5zIGEgbm9uLXplcm8gZXhpdCBjb2RlLAorICBidXQgbm8gbWVzc2FnZSBpcyBsb2dnZWQuIFRoZSBgYC1mYGAgb3B0aW9uIGNoYW5nZXMgdGhlIGJlaGF2aW9yIHRvIHJldHVybiBhCiAgIHplcm8gZXhpdCBjb2RlIChpLmUuIHN1Y2Nlc3MpIGluIHN1Y2ggc2l0dWF0aW9ucyBpbnN0ZWFkLgogICBgYHJlbW92ZWBgIGRvZXMgbm90IGZvbGxvdyBzeW1saW5rcy4gVGhhdCBtZWFucyBpdCByZW1vdmUgb25seSBzeW1saW5rcwogICBhbmQgbm90IGZpbGVzIGl0IHBvaW50IHRvLgogCisgIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgYnVnZ3kgYW5kIGFsd2F5cyByZXR1cm5lZCAwLiBJdCBjYW5ub3QgYmUgZml4ZWQgd2l0aG91dAorICBicmVha2luZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVXNlIGBgcm1gYCBpbnN0ZWFkLgorCiBgYHJlbW92ZV9kaXJlY3RvcnkgPGRpcj4uLi5gYAotICBSZW1vdmUgYGA8ZGlyPmBgIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBjb250ZW50cy4gIElmIGEgZGlyZWN0b3J5IGRvZXMKKyAgLi4gZGVwcmVjYXRlZDo6IDMuMTcKKworICBSZW1vdmUgYGA8ZGlyPmBgIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBjb250ZW50cy4gSWYgYSBkaXJlY3RvcnkgZG9lcwogICBub3QgZXhpc3QgaXQgd2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkLiAgSWYgYGA8ZGlyPmBgIGlzIGEgc3ltbGluayB0bwogICBhIGRpcmVjdG9yeSwganVzdCB0aGUgc3ltbGluayB3aWxsIGJlIHJlbW92ZWQuCisgIFVzZSBgYHJtYGAgaW5zdGVhZC4KIAogYGByZW5hbWUgPG9sZG5hbWU+IDxuZXduYW1lPmBgCiAgIFJlbmFtZSBhIGZpbGUgb3IgZGlyZWN0b3J5IChvbiBvbmUgdm9sdW1lKS4gSWYgZmlsZSB3aXRoIHRoZSBgYDxuZXduYW1lPmBgIG5hbWUKICAgYWxyZWFkeSBleGlzdHMsIHRoZW4gaXQgd2lsbCBiZSBzaWxlbnRseSByZXBsYWNlZC4KIAorYGBybSBbLXJSZl0gPGZpbGU+IDxkaXI+Li4uYGAKKyAgUmVtb3ZlIHRoZSBmaWxlcyBgYDxmaWxlPmBgIG9yIGRpcmVjdG9yaWVzIGBgZGlyYGAuCisgIFVzZSBgYC1yYGAgb3IgYGAtUmBgIHRvIHJlbW92ZSBkaXJlY3RvcmllcyBhbmQgdGhlaXIgY29udGVudHMgcmVjdXJzaXZlbHkuCisgIElmIGFueSBvZiB0aGUgbGlzdGVkIGZpbGVzL2RpcmVjdG9yaWVzIGRvIG5vdCBleGlzdCwgdGhlIGNvbW1hbmQgcmV0dXJucyBhCisgIG5vbi16ZXJvIGV4aXQgY29kZSwgYnV0IG5vIG1lc3NhZ2UgaXMgbG9nZ2VkLiBUaGUgYGAtZmBgIG9wdGlvbiBjaGFuZ2VzCisgIHRoZSBiZWhhdmlvciB0byByZXR1cm4gYSB6ZXJvIGV4aXQgY29kZSAoaS5lLiBzdWNjZXNzKSBpbiBzdWNoCisgIHNpdHVhdGlvbnMgaW5zdGVhZC4KKwogYGBzZXJ2ZXJgYAogICBMYXVuY2ggOm1hbnVhbDpgY21ha2Utc2VydmVyKDcpYCBtb2RlLgogCmRpZmYgLS1naXQgYS9IZWxwL21hbnVhbC9jdGVzdC4xLnJzdCBiL0hlbHAvbWFudWFsL2N0ZXN0LjEucnN0CmluZGV4IGUyOWViY2EuLmI1YmIxYzEgMTAwNjQ0Ci0tLSBhL0hlbHAvbWFudWFsL2N0ZXN0LjEucnN0CisrKyBiL0hlbHAvbWFudWFsL2N0ZXN0LjEucnN0CkBAIC03Miw2ICs3Miw5IEBACiAgVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgZW5hYmxlZCBieSBzZXR0aW5nIHRoZQogIDplbnZ2YXI6YENURVNUX09VVFBVVF9PTl9GQUlMVVJFYCBlbnZpcm9ubWVudCB2YXJpYWJsZQogCitgYC0tc3RvcC1vbi1mYWlsdXJlYGAKKyBTdG9wIHJ1bm5pbmcgdGhlIHRlc3RzIHdoZW4gdGhlIGZpcnN0IGZhaWx1cmUgaGFwcGVucy4KKwogYGAtRmBgCiAgRW5hYmxlIGZhaWxvdmVyLgogCkBAIC0yNjEsMTAgKzI2NCwyNyBAQAogIGZhaWwsIHN1YnNlcXVlbnQgY2FsbHMgdG8gQ1Rlc3Qgd2l0aCB0aGUgYGAtLXJlcnVuLWZhaWxlZGBgIG9wdGlvbiB3aWxsIHJ1bgogIHRoZSBzZXQgb2YgdGVzdHMgdGhhdCBtb3N0IHJlY2VudGx5IGZhaWxlZCAoaWYgYW55KS4KIAotYGAtLXJlcGVhdC11bnRpbC1mYWlsIDxuPmBgCi0gUmVxdWlyZSBlYWNoIHRlc3QgdG8gcnVuIGBgPG4+YGAgdGltZXMgd2l0aG91dCBmYWlsaW5nIGluIG9yZGVyIHRvIHBhc3MuCitgYC0tcmVwZWF0IDxtb2RlPjo8bj5gYAorICBSdW4gdGVzdHMgcmVwZWF0ZWRseSBiYXNlZCBvbiB0aGUgZ2l2ZW4gYGA8bW9kZT5gYCB1cCB0byBgYDxuPmBgIHRpbWVzLgorICBUaGUgbW9kZXMgYXJlOgogCi0gVGhpcyBpcyB1c2VmdWwgaW4gZmluZGluZyBzcG9yYWRpYyBmYWlsdXJlcyBpbiB0ZXN0IGNhc2VzLgorICBgYHVudGlsLWZhaWxgYAorICAgIFJlcXVpcmUgZWFjaCB0ZXN0IHRvIHJ1biBgYDxuPmBgIHRpbWVzIHdpdGhvdXQgZmFpbGluZyBpbiBvcmRlciB0byBwYXNzLgorICAgIFRoaXMgaXMgdXNlZnVsIGluIGZpbmRpbmcgc3BvcmFkaWMgZmFpbHVyZXMgaW4gdGVzdCBjYXNlcy4KKworICBgYHVudGlsLXBhc3NgYAorICAgIEFsbG93IGVhY2ggdGVzdCB0byBydW4gdXAgdG8gYGA8bj5gYCB0aW1lcyBpbiBvcmRlciB0byBwYXNzLgorICAgIFJlcGVhdHMgdGVzdHMgaWYgdGhleSBmYWlsIGZvciBhbnkgcmVhc29uLgorICAgIFRoaXMgaXMgdXNlZnVsIGluIHRvbGVyYXRpbmcgc3BvcmFkaWMgZmFpbHVyZXMgaW4gdGVzdCBjYXNlcy4KKworICBgYGFmdGVyLXRpbWVvdXRgYAorICAgIEFsbG93IGVhY2ggdGVzdCB0byBydW4gdXAgdG8gYGA8bj5gYCB0aW1lcyBpbiBvcmRlciB0byBwYXNzLgorICAgIFJlcGVhdHMgdGVzdHMgb25seSBpZiB0aGV5IHRpbWVvdXQuCisgICAgVGhpcyBpcyB1c2VmdWwgaW4gdG9sZXJhdGluZyBzcG9yYWRpYyB0aW1lb3V0cyBpbiB0ZXN0IGNhc2VzCisgICAgb24gYnVzeSBtYWNoaW5lcy4KKworYGAtLXJlcGVhdC11bnRpbC1mYWlsIDxuPmBgCisgRXF1aXZhbGVudCB0byBgYC0tcmVwZWF0IHVudGlsLWZhaWw6PG4+YGAuCiAKIGBgLS1tYXgtd2lkdGggPHdpZHRoPmBgCiAgU2V0IHRoZSBtYXggd2lkdGggZm9yIGEgdGVzdCBuYW1lIHRvIG91dHB1dC4KQEAgLTM1Myw2ICszNzMsMTQgQEAKICBUaGlzIG9wdGlvbiB3aWxsIG5vdCBydW4gYW55IHRlc3RzLCBpdCB3aWxsIHNpbXBseSBwcmludCB0aGUgbGlzdCBvZgogIGFsbCBsYWJlbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXN0IHNldC4KIAorYGAtLW5vLXRlc3RzPTxbZXJyb3J8aWdub3JlXT5gYAorIFJlZ2FyZCBubyB0ZXN0cyBmb3VuZCBlaXRoZXIgYXMgZXJyb3Igb3IgaWdub3JlIGl0LgorCisgSWYgbm8gdGVzdHMgd2VyZSBmb3VuZCwgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgQ1Rlc3QgaXMgdG8gYWx3YXlzIGxvZyBhbgorIGVycm9yIG1lc3NhZ2UgYnV0IHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluIHNjcmlwdCBtb2RlIG9ubHkuICBUaGlzIG9wdGlvbgorIHVuaWZpZXMgdGhlIGJlaGF2aW9yIG9mIENUZXN0IGJ5IGVpdGhlciByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBpZiBubyB0ZXN0cworIHdlcmUgZm91bmQgb3IgYnkgaWdub3JpbmcgaXQuCisKIC4uIGluY2x1ZGU6OiBPUFRJT05TX0hFTFAudHh0CiAKIC4uIF9gTGFiZWwgYW5kIFN1YnByb2plY3QgU3VtbWFyeWA6CkBAIC05NjksOCArOTk3LDEyIEBACiAKIGBgUmVzb3VyY2VTcGVjRmlsZWBgCiAgIFNwZWNpZnkgYQotICA6cmVmOmByZXNvdXJjZSBzcGVjaWZpY2F0aW9uIGZpbGUgPGN0ZXN0LXJlc291cmNlLXNwZWNpZmljYXRpb24tZmlsZT5gLiBTZWUKLSAgOnJlZjpgY3Rlc3QtcmVzb3VyY2UtYWxsb2NhdGlvbmAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgIDpyZWY6YHJlc291cmNlIHNwZWNpZmljYXRpb24gZmlsZSA8Y3Rlc3QtcmVzb3VyY2Utc3BlY2lmaWNhdGlvbi1maWxlPmAuCisKKyAgKiBgQ1Rlc3QgU2NyaXB0YF8gdmFyaWFibGU6IDp2YXJpYWJsZTpgQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFYAorICAqIDptb2R1bGU6YENUZXN0YCBtb2R1bGUgdmFyaWFibGU6IGBgQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFYGAKKworICBTZWUgOnJlZjpgY3Rlc3QtcmVzb3VyY2UtYWxsb2NhdGlvbmAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIGBgTGFiZWxzRm9yU3VicHJvamVjdHNgYAogICBTcGVjaWZ5IGEgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGxhYmVscyB0aGF0IHdpbGwgYmUgdHJlYXRlZCBhcwpAQCAtMTA5Niw2ICsxMTI4LDIwIEBACiAgICogYENUZXN0IFNjcmlwdGBfIHZhcmlhYmxlOiBub25lCiAgICogOm1vZHVsZTpgQ1Rlc3RgIG1vZHVsZSB2YXJpYWJsZTogYGBWQUxHUklORF9DT01NQU5EX09QVElPTlNgYAogCitgYERyTWVtb3J5Q29tbWFuZGBgCisgIFNwZWNpZnkgYSBgYE1lbW9yeUNoZWNrQ29tbWFuZGBgIHRoYXQgaXMga25vd24gdG8gYmUgYSBjb21tYW5kLWxpbmUKKyAgY29tcGF0aWJsZSB3aXRoIERyTWVtb3J5LgorCisgICogYENUZXN0IFNjcmlwdGBfIHZhcmlhYmxlOiBub25lCisgICogOm1vZHVsZTpgQ1Rlc3RgIG1vZHVsZSB2YXJpYWJsZTogYGBEUk1FTU9SWV9DT01NQU5EYGAKKworYGBEck1lbW9yeUNvbW1hbmRPcHRpb25zYGAKKyAgU3BlY2lmeSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0byB0aGUgYGBEck1lbW9yeUNvbW1hbmRgYCB0b29sLgorICBUaGV5IHdpbGwgYmUgcGxhY2VkIHByaW9yIHRvIHRoZSB0ZXN0IGNvbW1hbmQgbGluZS4KKworICAqIGBDVGVzdCBTY3JpcHRgXyB2YXJpYWJsZTogbm9uZQorICAqIDptb2R1bGU6YENUZXN0YCBtb2R1bGUgdmFyaWFibGU6IGBgRFJNRU1PUllfQ09NTUFORF9PUFRJT05TYGAKKwogLi4gX2BDVGVzdCBTdWJtaXQgU3RlcGA6CiAKIENUZXN0IFN1Ym1pdCBTdGVwCkBAIC0xMjg3LDExICsxMzMzLDIwIEBACiA9PT09PT09PT09PT09PT09PT09CiAKIENUZXN0IHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciB0ZXN0cyB0byBzcGVjaWZ5IHRoZSByZXNvdXJjZXMgdGhhdCB0aGV5IG5lZWQKLWluIGEgZmluZS1ncmFpbmVkIHdheSwgYW5kIGZvciB1c2VycyB0byBzcGVjaWZ5IHRoZSByZXNvdXJjZXMgYXZhaWxpYWJsZSBvbgoraW4gYSBmaW5lLWdyYWluZWQgd2F5LCBhbmQgZm9yIHVzZXJzIHRvIHNwZWNpZnkgdGhlIHJlc291cmNlcyBhdmFpbGFibGUgb24KIHRoZSBydW5uaW5nIG1hY2hpbmUuIFRoaXMgYWxsb3dzIENUZXN0IHRvIGludGVybmFsbHkga2VlcCB0cmFjayBvZiB3aGljaAogcmVzb3VyY2VzIGFyZSBpbiB1c2UgYW5kIHdoaWNoIGFyZSBmcmVlLCBzY2hlZHVsaW5nIHRlc3RzIGluIGEgd2F5IHRoYXQKIHByZXZlbnRzIHRoZW0gZnJvbSB0cnlpbmcgdG8gY2xhaW0gcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUuCiAKK1doZW4gdGhlIHJlc291cmNlIGFsbG9jYXRpb24gZmVhdHVyZSBpcyB1c2VkLCBDVGVzdCB3aWxsIG5vdCBvdmVyc3Vic2NyaWJlCityZXNvdXJjZXMuIEZvciBleGFtcGxlLCBpZiBhIHJlc291cmNlIGhhcyA4IHNsb3RzLCBDVGVzdCB3aWxsIG5vdCBydW4gdGVzdHMKK3RoYXQgY29sbGVjdGl2ZWx5IHVzZSBtb3JlIHRoYW4gOCBzbG90cyBhdCBhIHRpbWUuIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YKK2xpbWl0aW5nIGhvdyBtYW55IHRlc3RzIGNhbiBydW4gYXQgYW55IGdpdmVuIHRpbWUsIGV2ZW4gaWYgYSBoaWdoIGBgLWpgYAorYXJndW1lbnQgaXMgdXNlZCwgaWYgdGhvc2UgdGVzdHMgYWxsIHVzZSBzb21lIHNsb3RzIGZyb20gdGhlIHNhbWUgcmVzb3VyY2UuCitJbiBhZGRpdGlvbiwgaXQgbWVhbnMgdGhhdCBhIHNpbmdsZSB0ZXN0IHRoYXQgdXNlcyBtb3JlIG9mIGEgcmVzb3VyY2UgdGhhbiBpcworYXZhaWxhYmxlIG9uIGEgbWFjaGluZSB3aWxsIG5vdCBydW4gYXQgYWxsIChhbmQgd2lsbCBiZSByZXBvcnRlZCBhcworYGBOb3QgUnVuYGApLgorCiBBIGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBmZWF0dXJlIGlzIGZvciB0ZXN0cyB0aGF0IHJlcXVpcmUgdGhlIHVzZSBvZiBhIEdQVS4KIE11bHRpcGxlIHRlc3RzIGNhbiBzaW11bHRhbmVvdXNseSBhbGxvY2F0ZSBtZW1vcnkgZnJvbSBhIEdQVSwgYnV0IGlmIHRvbyBtYW55CiB0ZXN0cyB0cnkgdG8gZG8gdGhpcyBhdCBvbmNlLCBzb21lIG9mIHRoZW0gd2lsbCBmYWlsIHRvIGFsbG9jYXRlLCByZXN1bHRpbmcgaW4KQEAgLTEzNTUsOSArMTQxMCwxNiBAQAogCiBUaGUgcmVzb3VyY2Ugc3BlY2lmaWNhdGlvbiBmaWxlIGlzIGEgSlNPTiBmaWxlIHdoaWNoIGlzIHBhc3NlZCB0byBDVGVzdCwgZWl0aGVyCiBvbiB0aGUgOm1hbnVhbDpgY3Rlc3QoMSlgIGNvbW1hbmQgbGluZSBhcyBgYC0tcmVzb3VyY2Utc3BlYy1maWxlYGAsIG9yIGFzIHRoZQotYGBSRVNPVVJDRV9TUEVDX0ZJTEVgYCBhcmd1bWVudCBvZiA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAuIFRoZSByZXNvdXJjZQotc3BlY2lmaWNhdGlvbiBmaWxlIG11c3QgYmUgYSBKU09OIG9iamVjdC4gQWxsIGV4YW1wbGVzIGluIHRoaXMgZG9jdW1lbnQgYXNzdW1lCi10aGUgZm9sbG93aW5nIHJlc291cmNlIHNwZWNpZmljYXRpb24gZmlsZToKK2BgUkVTT1VSQ0VfU1BFQ19GSUxFYGAgYXJndW1lbnQgb2YgOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgLiBJZiBhIGRhc2hib2FyZCBzY3JpcHQKK2lzIHVzZWQgYW5kIGBgUkVTT1VSQ0VfU1BFQ19GSUxFYGAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHZhbHVlIG9mCis6dmFyaWFibGU6YENURVNUX1JFU09VUkNFX1NQRUNfRklMRWAgaW4gdGhlIGRhc2hib2FyZCBzY3JpcHQgaXMgdXNlZCBpbnN0ZWFkLgorSWYgYGAtLXJlc291cmNlLXNwZWMtZmlsZWBgLCBgYFJFU09VUkNFX1NQRUNfRklMRWBgLCBhbmQKKzp2YXJpYWJsZTpgQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFYCBpbiB0aGUgZGFzaGJvYXJkIHNjcmlwdCBhcmUgbm90IHNwZWNpZmllZCwKK3RoZSB2YWx1ZSBvZiA6dmFyaWFibGU6YENURVNUX1JFU09VUkNFX1NQRUNfRklMRWAgaW4gdGhlIENNYWtlIGJ1aWxkIGlzIHVzZWQKK2luc3RlYWQuIElmIG5vbmUgb2YgdGhlc2UgYXJlIHNwZWNpZmllZCwgbm8gcmVzb3VyY2Ugc3BlYyBmaWxlIGlzIHVzZWQuCisKK1RoZSByZXNvdXJjZSBzcGVjaWZpY2F0aW9uIGZpbGUgbXVzdCBiZSBhIEpTT04gb2JqZWN0LiBBbGwgZXhhbXBsZXMgaW4gdGhpcworZG9jdW1lbnQgYXNzdW1lIHRoZSBmb2xsb3dpbmcgcmVzb3VyY2Ugc3BlY2lmaWNhdGlvbiBmaWxlOgogCiAuLiBjb2RlLWJsb2NrOjoganNvbgogCmRpZmYgLS1naXQgYS9IZWxwL21vZHVsZS9DUGFja0FyY2hpdmUucnN0IGIvSGVscC9tb2R1bGUvQ1BhY2tBcmNoaXZlLnJzdAppbmRleCA4NjE2MDk4Li5mNWQ2ZGE0IDEwMDY0NAotLS0gYS9IZWxwL21vZHVsZS9DUGFja0FyY2hpdmUucnN0CisrKyBiL0hlbHAvbW9kdWxlL0NQYWNrQXJjaGl2ZS5yc3QKQEAgLTEsNCArMSw2IEBACiBDUGFja0FyY2hpdmUKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBDUGFjayBBcmNoaXZlIGdlbmVyYXRvciBoYXMgbW92ZWQgaGVyZTogOmNwYWNrX2dlbjpgQ1BhY2sgQXJjaGl2ZSBHZW5lcmF0b3JgCmRpZmYgLS1naXQgYS9IZWxwL21vZHVsZS9DUGFja0ZyZWVCU0QucnN0IGIvSGVscC9tb2R1bGUvQ1BhY2tGcmVlQlNELnJzdAppbmRleCA2OTcwMWI4Li43YWU2MTY0IDEwMDY0NAotLS0gYS9IZWxwL21vZHVsZS9DUGFja0ZyZWVCU0QucnN0CisrKyBiL0hlbHAvbW9kdWxlL0NQYWNrRnJlZUJTRC5yc3QKQEAgLTEsNCArMSw2IEBACiBDUGFja0ZyZWVCU0QKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgQ1BhY2sgRnJlZUJTRCBnZW5lcmF0b3IgaGFzIG1vdmVkIGhlcmU6IDpjcGFja19nZW46YENQYWNrIEZyZWVCU0QgR2VuZXJhdG9yYApkaWZmIC0tZ2l0IGEvSGVscC9tb2R1bGUvQ1BhY2tOdUdldC5yc3QgYi9IZWxwL21vZHVsZS9DUGFja051R2V0LnJzdAppbmRleCA0ZjM5YjNhLi5iYmVkN2Y5IDEwMDY0NAotLS0gYS9IZWxwL21vZHVsZS9DUGFja051R2V0LnJzdAorKysgYi9IZWxwL21vZHVsZS9DUGFja051R2V0LnJzdApAQCAtMSw0ICsxLDYgQEAKIENQYWNrTnVHZXQKIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIENQYWNrIE51R2V0IGdlbmVyYXRvciBoYXMgbW92ZWQgaGVyZTogOmNwYWNrX2dlbjpgQ1BhY2sgTnVHZXQgR2VuZXJhdG9yYApkaWZmIC0tZ2l0IGEvSGVscC9tb2R1bGUvQ1BhY2tQcm9kdWN0QnVpbGQucnN0IGIvSGVscC9tb2R1bGUvQ1BhY2tQcm9kdWN0QnVpbGQucnN0CmluZGV4IDhjZDkxOTguLmUxMmNkMzIgMTAwNjQ0Ci0tLSBhL0hlbHAvbW9kdWxlL0NQYWNrUHJvZHVjdEJ1aWxkLnJzdAorKysgYi9IZWxwL21vZHVsZS9DUGFja1Byb2R1Y3RCdWlsZC5yc3QKQEAgLTEsNCArMSw2IEBACiBDUGFja1Byb2R1Y3RCdWlsZAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgQ1BhY2sgcHJvZHVjdGJ1aWxkIGdlbmVyYXRvciBoYXMgbW92ZWQgaGVyZTogOmNwYWNrX2dlbjpgQ1BhY2sgcHJvZHVjdGJ1aWxkIEdlbmVyYXRvcmAKZGlmZiAtLWdpdCBhL0hlbHAvbW9kdWxlL0NoZWNrTGlua2VyRmxhZy5yc3QgYi9IZWxwL21vZHVsZS9DaGVja0xpbmtlckZsYWcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMDU3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL21vZHVsZS9DaGVja0xpbmtlckZsYWcucnN0CkBAIC0wLDAgKzEgQEAKKy4uIGNtYWtlLW1vZHVsZTo6IC4uLy4uL01vZHVsZXMvQ2hlY2tMaW5rZXJGbGFnLmNtYWtlCmRpZmYgLS1naXQgYS9IZWxwL21vZHVsZS9GaW5kQ1VEQVRvb2xraXQucnN0IGIvSGVscC9tb2R1bGUvRmluZENVREFUb29sa2l0LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjAxZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9tb2R1bGUvRmluZENVREFUb29sa2l0LnJzdApAQCAtMCwwICsxIEBACisuLiBjbWFrZS1tb2R1bGU6OiAuLi8uLi9Nb2R1bGVzL0ZpbmRDVURBVG9vbGtpdC5jbWFrZQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA1MS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDUxLnJzdAppbmRleCA2YjY3OWU1Li4wNTNiYzk3IDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDUxLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDUxLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNTEKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIExpc3QgVEFSR0VUX09CSkVDVFMgaW4gU09VUkNFUyB0YXJnZXQgcHJvcGVydHkuCiAKIENNYWtlIDMuMCBhbmQgbG93ZXIgZGlkIG5vdCBpbmNsdWRlIHRoZSBgYFRBUkdFVF9PQkpFQ1RTYGAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNTIucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA1Mi5yc3QKaW5kZXggZWUyZTZlOC4uYzc1ZjlhYiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA1Mi5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA1Mi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDUyCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBSZWplY3Qgc291cmNlIGFuZCBidWlsZCBkaXJzIGluIGluc3RhbGxlZAogOnByb3BfdGd0OmBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFU2AuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNTMucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA1My5yc3QKaW5kZXggMDMyYjNlNS4uOWIxOGIyZCAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA1My5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA1My5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDUzCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTaW1wbGlmeSB2YXJpYWJsZSByZWZlcmVuY2UgYW5kIGVzY2FwZSBzZXF1ZW5jZSBldmFsdWF0aW9uLgogCiBDTWFrZSAzLjEgaW50cm9kdWNlZCBhIG11Y2ggZmFzdGVyIGltcGxlbWVudGF0aW9uIG9mIGV2YWx1YXRpb24gb2YgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDU0LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNTQucnN0CmluZGV4IDFlMDAwYTYuLmM3YWUwMTkgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNTQucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNTQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA1NAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogT25seSBpbnRlcnByZXQgOmNvbW1hbmQ6YGlmYCBhcmd1bWVudHMgYXMgdmFyaWFibGVzIG9yIGtleXdvcmRzIHdoZW4gdW5xdW90ZWQuCiAKIENNYWtlIDMuMSBhbmQgYWJvdmUgbm8gbG9uZ2VyIGltcGxpY2l0bHkgZGVyZWZlcmVuY2UgdmFyaWFibGVzIG9yCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDU1LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNTUucnN0CmluZGV4IGJjNWFkMDguLjQ3Y2FjOGUgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNTUucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNTUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA1NQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogU3RyaWN0IGNoZWNraW5nIGZvciB0aGUgOmNvbW1hbmQ6YGJyZWFrYCBjb21tYW5kLgogCiBDTWFrZSAzLjEgYW5kIGxvd2VyIGFsbG93ZWQgY2FsbHMgdG8gdGhlIDpjb21tYW5kOmBicmVha2AgY29tbWFuZApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA1Ni5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDU2LnJzdAppbmRleCA4MzRkYTg0Li42MjhhNmExIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDU2LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDU2LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNTYKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIEhvbm9yIGxpbmsgZmxhZ3MgaW4gOmNvbW1hbmQ6YHRyeV9jb21waWxlYCBzb3VyY2UtZmlsZSBzaWduYXR1cmUuCiAKIFRoZSA6Y29tbWFuZDpgdHJ5X2NvbXBpbGVgIGNvbW1hbmQgc291cmNlLWZpbGUgc2lnbmF0dXJlIGdlbmVyYXRlcyBhCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDU3LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNTcucnN0CmluZGV4IDgzZGIxODYuLjc2YWViZmIgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNTcucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNTcucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA1NwogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogU3VwcG9ydCBuZXcgOmNvbW1hbmQ6YGlmYCBJTl9MSVNUIG9wZXJhdG9yLgogCiBDTWFrZSAzLjMgYWRkcyBzdXBwb3J0IGZvciB0aGUgbmV3IElOX0xJU1Qgb3BlcmF0b3IuCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDU4LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNTgucnN0CmluZGV4IDA1ZWZkNDguLjA2Y2M3NGIgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNTgucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNTgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA1OAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogTmluamEgcmVxdWlyZXMgY3VzdG9tIGNvbW1hbmQgYnlwcm9kdWN0cyB0byBiZSBleHBsaWNpdC4KIAogV2hlbiBhbiBpbnRlcm1lZGlhdGUgZmlsZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBidWlsZCBpcyBjb25zdW1lZApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA1OS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDU5LnJzdAppbmRleCBiY2U5ODJlLi42MzE3ZDA1IDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDU5LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDU5LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNTkKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIERvIG5vdCB0cmVhdCBgYERFRklOSVRJT05TYGAgYXMgYSBidWlsdC1pbiBkaXJlY3RvcnkgcHJvcGVydHkuCiAKIENNYWtlIDMuMyBhbmQgYWJvdmUgbm8gbG9uZ2VyIG1ha2UgYSBsaXN0IG9mIGRlZmluaXRpb25zIGF2YWlsYWJsZSB0aHJvdWdoCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDYwLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNjAucnN0CmluZGV4IDk4YWMyY2YuLjA5MjU3ZDEgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNjAucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNjAucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA2MAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogTGluayBsaWJyYXJpZXMgYnkgZnVsbCBwYXRoIGV2ZW4gaW4gaW1wbGljaXQgZGlyZWN0b3JpZXMuCiAKIFBvbGljeSA6cG9saWN5OmBDTVAwMDAzYCB3YXMgaW50cm9kdWNlZCB3aXRoIHRoZSBpbnRlbnRpb24gb2YgYWx3YXlzCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDYxLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNjEucnN0CmluZGV4IDU3ZTQxNjEuLmFjYTU1MWQgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNjEucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNjEucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA2MQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogQ1Rlc3QgZG9lcyBub3QgYnkgZGVmYXVsdCB0ZWxsIGBgbWFrZWBgIHRvIGlnbm9yZSBlcnJvcnMgKGBgLWlgYCkuCiAKIFRoZSA6Y29tbWFuZDpgY3Rlc3RfYnVpbGRgIGFuZCA6Y29tbWFuZDpgYnVpbGRfY29tbWFuZGAgY29tbWFuZHMgbm8KZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNjIucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA2Mi5yc3QKaW5kZXggMGRiN2FhZi4uMDFlOTNmMCAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA2Mi5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA2Mi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDYyCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBEaXNhbGxvdyA6Y29tbWFuZDpgaW5zdGFsbGAgb2YgOmNvbW1hbmQ6YGV4cG9ydGAgcmVzdWx0LgogCiBUaGUgOmNvbW1hbmQ6YGV4cG9ydCgpYCBjb21tYW5kIGdlbmVyYXRlcyBhIGZpbGUgY29udGFpbmluZwpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA2My5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDYzLnJzdAppbmRleCBkNzM2ZDA2Li5mZWMzYWQ4IDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDYzLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDYzLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNjMKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIEhvbm9yIHZpc2liaWxpdHkgcHJvcGVydGllcyBmb3IgYWxsIHRhcmdldCB0eXBlcy4KIAogVGhlIDpwcm9wX3RndDpgPExBTkc+X1ZJU0lCSUxJVFlfUFJFU0VUYCBhbmQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNjQucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA2NC5yc3QKaW5kZXggZTlhMDYxYi4uMGMyMGMxMyAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA2NC5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA2NC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDY0CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBSZWNvZ25pemUgYGBURVNUYGAgYXMgYSBvcGVyYXRvciBmb3IgdGhlIDpjb21tYW5kOmBpZmAgY29tbWFuZC4KIAogVGhlIGBgVEVTVGBgIG9wZXJhdG9yIHdhcyBhZGRlZCB0byB0aGUgOmNvbW1hbmQ6YGlmYCBjb21tYW5kIHRvIGRldGVybWluZSBpZiBhCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDY1LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNjUucnN0CmluZGV4IGI4MjBhYWQuLjg5NjhiOTEgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNjUucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNjUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA2NQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRG8gbm90IGFkZCBmbGFncyB0byBleHBvcnQgc3ltYm9scyBmcm9tIGV4ZWN1dGFibGVzIHdpdGhvdXQKIHRoZSA6cHJvcF90Z3Q6YEVOQUJMRV9FWFBPUlRTYCB0YXJnZXQgcHJvcGVydHkuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNjYucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA2Ni5yc3QKaW5kZXggZTExMGFlMS4uYjA4NDMwZiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA2Ni5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA2Ni5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDY2CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBIb25vciBwZXItY29uZmlnIGZsYWdzIGluIDpjb21tYW5kOmB0cnlfY29tcGlsZWAgc291cmNlLWZpbGUgc2lnbmF0dXJlLgogCiBUaGUgc291cmNlIGZpbGUgc2lnbmF0dXJlIG9mIHRoZSA6Y29tbWFuZDpgdHJ5X2NvbXBpbGVgIGNvbW1hbmQgdXNlcyB0aGUgdmFsdWUKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNjcucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA2Ny5yc3QKaW5kZXggZjgwMjc4Ny4uODM1OGJiMiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA2Ny5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA2Ny5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDY3CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBIb25vciBsYW5ndWFnZSBzdGFuZGFyZCBpbiA6Y29tbWFuZDpgdHJ5X2NvbXBpbGVgIHNvdXJjZS1maWxlIHNpZ25hdHVyZS4KIAogVGhlIDpjb21tYW5kOmB0cnlfY29tcGlsZWAgc291cmNlIGZpbGUgc2lnbmF0dXJlIGlzIGludGVuZGVkIHRvIGFsbG93CmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDY4LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNjgucnN0CmluZGV4IDk3OGE2ZTMuLjVkMmE0YjEgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNjgucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNjgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA2OAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogYGBSUEFUSGBgIHNldHRpbmdzIG9uIG1hY09TIGRvIG5vdCBhZmZlY3QgYGBpbnN0YWxsX25hbWVgYC4KIAogQ01ha2UgMy45IGFuZCBuZXdlciByZW1vdmUgYW55IGVmZmVjdCB0aGUgZm9sbG93aW5nIHNldHRpbmdzIG1heSBoYXZlIG9uIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA2OS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDY5LnJzdAppbmRleCAwZDVkZGZkLi5lYWZhYzQ1IDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDY5LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDY5LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNjkKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIDpwcm9wX3RndDpgSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTmAgaXMgZW5mb3JjZWQgd2hlbiBlbmFibGVkLgogCiBDTWFrZSAzLjkgYW5kIG5ld2VyIHByZWZlciB0byBhZGQgSVBPIGZsYWdzIHdoZW5ldmVyIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA3MC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDcwLnJzdAppbmRleCAwZmIzNjE3Li5jODgwZDFmIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDcwLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDcwLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNzAKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBEZWZpbmUgOmNvbW1hbmQ6YGZpbGUoR0VORVJBVEUpYCBiZWhhdmlvciBmb3IgcmVsYXRpdmUgcGF0aHMuCiAKIENNYWtlIDMuMTAgYW5kIG5ld2VyIGRlZmluZSB0aGF0IHJlbGF0aXZlIHBhdGhzIGdpdmVuIHRvIGBgSU5QVVRgYCBhbmQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNzEucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA3MS5yc3QKaW5kZXggODU1ZWNmMC4uNzAwZDNiMCAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA3MS5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA3MS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDcxCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogTGV0IDpwcm9wX3RndDpgQVVUT01PQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1VJQ2AgcHJvY2VzcwogOnByb3Bfc2Y6YEdFTkVSQVRFRGAgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNzIucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA3Mi5yc3QKaW5kZXggM2FiYmFkNy4uMWRjZGZlZiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA3Mi5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA3Mi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDcyCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogOm1vZHVsZTpgRmluZE9wZW5HTGAgcHJlZmVycyBHTFZORCBieSBkZWZhdWx0IHdoZW4gYXZhaWxhYmxlLgogCiBUaGUgOm1vZHVsZTpgRmluZE9wZW5HTGAgbW9kdWxlIHByb3ZpZGVzIGFuIGBgT3BlbkdMOjpHTGBgIHRhcmdldCBhbmQgYW4KZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNzMucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA3My5yc3QKaW5kZXggOWJmYTBlOS4uOGYwMzQ1YyAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA3My5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA3My5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDczCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogRG8gbm90IHByb2R1Y2UgbGVnYWN5IGBgX0xJQl9ERVBFTkRTYGAgY2FjaGUgZW50cmllcy4KIAogQW5jaWVudCBDTWFrZSB2ZXJzaW9ucyBvbmNlIHVzZWQgYGA8dGd0Pl9MSUJfREVQRU5EU2BgIGNhY2hlIGVudHJpZXMgdG8KZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNzQucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA3NC5yc3QKaW5kZXggNjNlYmY3Yi4uODYzYmJiMiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA3NC5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA3NC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDc0CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgdXNlcyBgYDxQYWNrYWdlTmFtZT5fUk9PVGBgIHZhcmlhYmxlcy4KIAogSW4gQ01ha2UgMy4xMiBhbmQgYWJvdmUgdGhlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2UoPFBhY2thZ2VOYW1lPilgIGNvbW1hbmQgbm93CmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDc1LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNzUucnN0CmluZGV4IGFhNWMzZjcuLjQyMTM3ODIgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNzUucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNzUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA3NQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIEluY2x1ZGUgZmlsZSBjaGVjayBtYWNyb3MgaG9ub3IgYGBDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVNgYC4KIAogSW4gQ01ha2UgMy4xMiBhbmQgYWJvdmUsIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA3Ni5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDc2LnJzdAppbmRleCBkZDI1ZjgwLi5lZGNhNzQyIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDc2LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDc2LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwNzYKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBUaGUgOmNvbW1hbmQ6YHRhcmdldF9zb3VyY2VzYCBjb21tYW5kIGNvbnZlcnRzIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlLgogCiBJbiBDTWFrZSAzLjEzIGFuZCBhYm92ZSwgdGhlIDpjb21tYW5kOmB0YXJnZXRfc291cmNlc2AgY29tbWFuZCBub3cgY29udmVydHMKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNzcucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA3Ny5yc3QKaW5kZXggNDQ3OTdiNi4uMTc0Y2RlOSAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA3Ny5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA3Ny5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDc3CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogOmNvbW1hbmQ6YG9wdGlvbmAgaG9ub3JzIG5vcm1hbCB2YXJpYWJsZXMuCiAKIFRoZSA6Y29tbWFuZDpgb3B0aW9uYCBjb21tYW5kIGlzIHR5cGljYWxseSB1c2VkIHRvIGNyZWF0ZSBhIGNhY2hlIGVudHJ5CmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDc4LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwNzgucnN0CmluZGV4IDJlOTc5MzQuLjg5ZmRiMGIgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwNzgucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwNzgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA3OAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIDptb2R1bGU6YFVzZVNXSUdgIGdlbmVyYXRlcyBzdGFuZGFyZCB0YXJnZXQgbmFtZXMuCiAKIFN0YXJ0aW5nIHdpdGggQ01ha2UgMy4xMywgOm1vZHVsZTpgVXNlU1dJR2AgZ2VuZXJhdGVzIG5vdyBzdGFuZGFyZCB0YXJnZXQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwNzkucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA3OS5yc3QKaW5kZXggMDI0NGQ2Yy4uMDFhYTA4ZCAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA3OS5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA3OS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDc5CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogOmNvbW1hbmQ6YHRhcmdldF9saW5rX2xpYnJhcmllc2AgYWxsb3dzIHVzZSB3aXRoIHRhcmdldHMgaW4gb3RoZXIgZGlyZWN0b3JpZXMuCiAKIFByaW9yIHRvIENNYWtlIDMuMTMgdGhlIDpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXNgIGNvbW1hbmQgZGlkIG5vdApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA4MC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDgwLnJzdAppbmRleCA1Y2U5NTkxLi43ODllZmVhIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDgwLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDgwLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwODAKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiA6bW9kdWxlOmBCdW5kbGVVdGlsaXRpZXNgIGNhbm5vdCBiZSBpbmNsdWRlZCBhdCBjb25maWd1cmUgdGltZS4KIAogVGhlIG1hY3JvcyBwcm92aWRlZCBieSA6bW9kdWxlOmBCdW5kbGVVdGlsaXRpZXNgIGFyZSBpbnRlbmRlZCB0byBiZSBpbnZva2VkCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDgxLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwODEucnN0CmluZGV4IGQzYjI4NzIuLmQxNTczZGQgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwODEucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwODEucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA4MQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFJlbGF0aXZlIHBhdGhzIG5vdCBhbGxvd2VkIGluIDpwcm9wX3RndDpgTElOS19ESVJFQ1RPUklFU2AgdGFyZ2V0IHByb3BlcnR5LgogCiBDTWFrZSAzLjEyIGFuZCBsb3dlciBhbGxvd2VkIHRoZSA6cHJvcF9kaXI6YExJTktfRElSRUNUT1JJRVNgIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA4Mi5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDgyLnJzdAppbmRleCBkODg3NjE2Li4yNWM5NTgwIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDgyLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDgyLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwODIKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBJbnN0YWxsIHJ1bGVzIGZyb20gOmNvbW1hbmQ6YGFkZF9zdWJkaXJlY3RvcnlgIGNhbGxzIGFyZSBpbnRlcmxlYXZlZCB3aXRoCiB0aG9zZSBpbiBjYWxsZXIuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwODMucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA4My5yc3QKaW5kZXggZTBiMDljZi4uNzUxOGVlMyAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA4My5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA4My5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDgzCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogVG8gY29udHJvbCBnZW5lcmF0aW9uIG9mIFBvc2l0aW9uIEluZGVwZW5kZW50IEV4ZWN1dGFibGUgKGBgUElFYGApIG9yIG5vdCwgc29tZQogZmxhZ3MgYXJlIHJlcXVpcmVkIGF0IGxpbmsgdGltZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA4NC5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDg0LnJzdAppbmRleCA3MTNkMjk1Li45NTQ3NzAxIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDg0LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDg0LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwODQKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBUaGUgOm1vZHVsZTpgRmluZFF0YCBtb2R1bGUgZG9lcyBub3QgZXhpc3QgZm9yIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgLgogCiBUaGUgZXhpc3RlbmNlIG9mIDptb2R1bGU6YEZpbmRRdGAgbWVhbnMgdGhhdCBmb3IgUXQgdXBzdHJlYW0gdG8gcHJvdmlkZQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA4NS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDg1LnJzdAppbmRleCBkOWVjOWEyLi5kOTBjNzJmIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDg1LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDg1LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwODUKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBgYCQ8SU5fTElTVDouLi4+YGAgaGFuZGxlcyBlbXB0eSBsaXN0IGl0ZW1zLgogCiBJbiBDTWFrZSAzLjEzIGFuZCBsb3dlciwgdGhlIGBgJDxJTl9MSVNUOi4uLj5gYCBnZW5lcmF0b3IgZXhwcmVzc2lvbiBhbHdheXMKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwODYucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA4Ni5yc3QKaW5kZXggNGE5ZThiOC4uNzI1YjUwMiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA4Ni5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA4Ni5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDg2CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogOm1vZHVsZTpgVXNlU1dJR2AgaG9ub3JzIGBgU1dJR19NT0RVTEVfTkFNRWBgIHZpYSBgYC1tb2R1bGVgYCBmbGFnLgogCiBTdGFydGluZyB3aXRoIENNYWtlIDMuMTQsIDptb2R1bGU6YFVzZVNXSUdgIHBhc3NlcyBvcHRpb24KZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwODcucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA4Ny5yc3QKaW5kZXggNGM0NWI5OS4uNGE2NTUwNiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA4Ny5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA4Ny5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDg3CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogOmNvbW1hbmQ6YGluc3RhbGwoQ09ERSlgIGFuZCA6Y29tbWFuZDpgaW5zdGFsbChTQ1JJUFQpYCBzdXBwb3J0IGdlbmVyYXRvcgogZXhwcmVzc2lvbnMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwODgucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA4OC5yc3QKaW5kZXggODJjMDRlZi4uMTg0MGE1OCAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA4OC5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA4OC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDg4CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogOm1vZHVsZTpgRmluZEJJU09OYCBydW5zIGJpc29uIGluIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSYAogd2hlbiBleGVjdXRpbmcuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwODkucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA4OS5yc3QKaW5kZXggMDI5ZGU1NS4uZTNmYzc3YSAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA4OS5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA4OS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDg5CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogQ29tcGlsZXIgaWQgZm9yIElCTSBDbGFuZy1iYXNlZCBYTCBjb21waWxlcnMgaXMgbm93IGBgWExDbGFuZ2BgLgogCiBDTWFrZSAzLjE1IGFuZCBhYm92ZSByZWNvZ25pemUgdGhhdCBJQk0ncyBDbGFuZy1iYXNlZCBYTCBjb21waWxlcnMKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwOTAucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA5MC5yc3QKaW5kZXggNzIwYzE3Yy4uNThkZDk5OSAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA5MC5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA5MC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDkwCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogOmNvbW1hbmQ6YGV4cG9ydChQQUNLQUdFKWAgZG9lcyBub3QgcG9wdWxhdGUgcGFja2FnZSByZWdpc3RyeSBieSBkZWZhdWx0LgogCiBJbiBDTWFrZSAzLjE0IGFuZCBiZWxvdyB0aGUgOmNvbW1hbmQ6YGV4cG9ydChQQUNLQUdFKWAgY29tbWFuZCBwb3B1bGF0ZWQgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDkxLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwOTEucnN0CmluZGV4IDFhNTg3OGEuLmZmYzBhZGUgMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwOTEucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwOTEucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA5MQogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIE1TVkMgcnVudGltZSBsaWJyYXJ5IGZsYWdzIGFyZSBzZWxlY3RlZCBieSBhbiBhYnN0cmFjdGlvbi4KIAogQ29tcGlsZXJzIHRhcmdldGluZyB0aGUgTVNWQyBBQkkgaGF2ZSBmbGFncyB0byBzZWxlY3QgdGhlIE1TVkMgcnVudGltZSBsaWJyYXJ5LgpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA5Mi5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDkyLnJzdAppbmRleCA4ZDNhMjg4Li4yZjM5ODMwIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDkyLnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDkyLnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwOTIKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBNU1ZDIHdhcm5pbmcgZmxhZ3MgYXJlIG5vdCBpbiA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9GTEFHU2AgYnkgZGVmYXVsdC4KIAogV2hlbiB1c2luZyBNU1ZDLWxpa2UgY29tcGlsZXJzIGluIENNYWtlIDMuMTQgYW5kIGJlbG93LCB3YXJuaW5nIGZsYWdzCkBAIC0xNiw3ICsxOCw3IEBACiBUaGlzIHBvbGljeSBwcm92aWRlcyBjb21wYXRpYmlsaXR5IHdpdGggcHJvamVjdHMgdGhhdCBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQKIHRvIGV4cGVjdCB0aGUgbGFjayBvZiB3YXJuaW5nIGZsYWdzLiAgVGhlIHBvbGljeSBzZXR0aW5nIHRha2VzIGVmZmVjdCBhcyBvZgogdGhlIGZpcnN0IDpjb21tYW5kOmBwcm9qZWN0YCBvciA6Y29tbWFuZDpgZW5hYmxlX2xhbmd1YWdlYCBjb21tYW5kIHRoYXQKLWluaXRpYWxpemVzIDp2YXJpYWJsZTpgQ01BS0VfPExBTkc+X0ZMQUdTYCBmb3IgYSBnaXZlbiBsYW51YWdlIGBgPExBTkc+YGAuCitpbml0aWFsaXplcyA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9GTEFHU2AgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgYGA8TEFORz5gYC4KIAogLi4gbm90ZTo6CiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwOTMucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA5My5yc3QKaW5kZXggMGZmYzQ5My4uNGE5OTU1ZiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA5My5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA5My5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDkzCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogOm1vZHVsZTpgRmluZEJvb3N0YCByZXBvcnRzIGBgQm9vc3RfVkVSU0lPTmBgIGluIGBgeC55LnpgYCBmb3JtYXQuCiAKIEluIENNYWtlIDMuMTQgYW5kIGJlbG93IHRoZSBtb2R1bGUgd291bGQgcmVwb3J0IHRoZSBCb29zdCB2ZXJzaW9uCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDk0LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwOTQucnN0CmluZGV4IDgzNmYzMGYuLjFiNTc2NTggMTAwNjQ0Ci0tLSBhL0hlbHAvcG9saWN5L0NNUDAwOTQucnN0CisrKyBiL0hlbHAvcG9saWN5L0NNUDAwOTQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01QMDA5NAogLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIE1vZHVsZXMgOm1vZHVsZTpgRmluZFB5dGhvbjNgLCA6bW9kdWxlOmBGaW5kUHl0aG9uMmAgYW5kIDptb2R1bGU6YEZpbmRQeXRob25gCiB1c2UgYGBMT0NBVElPTmBgIGZvciBsb29rdXAgc3RyYXRlZ3kuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwOTUucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA5NS5yc3QKaW5kZXggNGM1NmEwNS4uZWJkYmFiNiAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA5NS5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA5NS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDk1CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogYGBSUEFUSGBgIGVudHJpZXMgYXJlIHByb3Blcmx5IGVzY2FwZWQgaW4gdGhlIGludGVybWVkaWFyeSBDTWFrZSBpbnN0YWxsIHNjcmlwdC4KIAogSW4gQ01ha2UgMy4xNSBhbmQgZWFybGllciwgYGBSUEFUSGBgIGVudHJpZXMgc2V0IHZpYQpkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDA5Ni5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMDk2LnJzdAppbmRleCA4ZWFmMGY5Li44ZmQ2ZjcyIDEwMDY0NAotLS0gYS9IZWxwL3BvbGljeS9DTVAwMDk2LnJzdAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDk2LnJzdApAQCAtMSw2ICsxLDggQEAKIENNUDAwOTYKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBUaGUgOmNvbW1hbmQ6YHByb2plY3RgIGNvbW1hbmQgcHJlc2VydmVzIGxlYWRpbmcgemVyb3MgaW4gdmVyc2lvbiBjb21wb25lbnRzLgogCiBXaGVuIGEgYGBWRVJTSU9OIDxtYWpvcj5bLjxtaW5vcj5bLjxwYXRjaD5bLjx0d2Vhaz5dXV1dYGAgYXJndW1lbnQgaXMgZ2l2ZW4KZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAwOTcucnN0IGIvSGVscC9wb2xpY3kvQ01QMDA5Ny5yc3QKaW5kZXggNDg0MGFhNi4uMjI0MDg3NCAxMDA2NDQKLS0tIGEvSGVscC9wb2xpY3kvQ01QMDA5Ny5yc3QKKysrIGIvSGVscC9wb2xpY3kvQ01QMDA5Ny5yc3QKQEAgLTEsNiArMSw4IEBACiBDTVAwMDk3CiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogOmNvbW1hbmQ6YEV4dGVybmFsUHJvamVjdF9BZGRgIHdpdGggYGBHSVRfU1VCTU9EVUxFUyAiImBgIGluaXRpYWxpemVzIG5vCiBzdWJtb2R1bGVzLgogCmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDk4LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwOTgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTMzODAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDk4LnJzdApAQCAtMCwwICsxLDMyIEBACitDTVAwMDk4CistLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworOm1vZHVsZTpgRmluZEZMRVhgIHJ1bnMgYGBmbGV4YGAgaW4gZGlyZWN0b3J5Cis6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUmAgd2hlbiBleGVjdXRpbmcuCisKK1RoZSBtb2R1bGUgcHJvdmlkZXMgYSBgYEZMRVhfVEFSR0VUYGAgbWFjcm8gd2hpY2ggZ2VuZXJhdGVzIEZMRVggb3V0cHV0LgorSW4gQ01ha2UgMy4xNiBhbmQgYmVsb3cgdGhlIG1hY3JvIHdvdWxkIGdlbmVyYXRlIGEgY3VzdG9tIGNvbW1hbmQgdGhhdCBydW5zCitgYGZsZXhgYCBpbiB0aGUgY3VycmVudCBzb3VyY2UgZGlyZWN0b3J5LiAgQ01ha2UgMy4xNyBhbmQgbGF0ZXIgcHJlZmVyIHRvCitydW4gaXQgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSBhbmQgdXNlIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSYAorYXMgdGhlIGBgV09SS0lOR19ESVJFQ1RPUllgYCBvZiBpdHMgOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAgaW52b2NhdGlvbi4KK1RoaXMgZW5zdXJlcyB0aGF0IGFueSBpbXBsaWNpdGx5IGdlbmVyYXRlZCBmaWxlIGlzIHdyaXR0ZW4gcmVsYXRpdmUgdG8gdGhlCitidWlsZCB0cmVlIHJhdGhlciB0aGFuIHRoZSBzb3VyY2UgdHJlZSwgdW5sZXNzIHRoZSBnZW5lcmF0ZWQgZmlsZSBpcworcHJvdmlkZWQgYXMgYWJzb2x1dGUgcGF0aC4KKworVGhpcyBwb2xpY3kgcHJvdmlkZXMgY29tcGF0aWJpbGl0eSBmb3IgcHJvamVjdHMgdGhhdCBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQKK3RvIGV4cGVjdCB0aGUgbmV3IGJlaGF2aW9yLgorCitUaGUgYGBPTERgYCBiZWhhdmlvciBmb3IgdGhpcyBwb2xpY3kgaXMgZm9yIGBgRkxFWF9UQVJHRVRgYCB0byB1c2UKK3RoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3RvcnkgZm9yIHRoZSBgYFdPUktJTkdfRElSRUNUT1JZYGAgYW5kIHdoZXJlCit0byBnZW5lcmF0ZSBpbXBsaWNpdCBmaWxlcy4gVGhlIGBgTkVXYGAgYmVoYXZpb3Igb2YgdGhpcyBwb2xpY3kgaXMgdG8KK3VzZSB0aGUgY3VycmVudCBiaW5hcnkgZGlyZWN0b3J5IGZvciB0aGUgYGBXT1JLSU5HX0RJUkVDVE9SWWBgIHJlbGF0aXZlIHRvCit3aGljaCBpbXBsaWNpdCBmaWxlcyBhcmUgZ2VuZXJhdGVkIHVubGVzcyBwcm92aWRlZCBhcyBhYnNvbHV0ZSBwYXRoLgorCitUaGlzIHBvbGljeSB3YXMgaW50cm9kdWNlZCBpbiBDTWFrZSB2ZXJzaW9uIDMuMTcuICBVc2UgdGhlCis6Y29tbWFuZDpgY21ha2VfcG9saWN5YCBjb21tYW5kIHRvIHNldCBpdCB0byBgYE9MRGBgIG9yIGBgTkVXYGAgZXhwbGljaXRseS4KK1VubGlrZSBtYW55IHBvbGljaWVzLCBDTWFrZSB2ZXJzaW9uIHxyZWxlYXNlfCBkb2VzICpub3QqIHdhcm4KK3doZW4gdGhpcyBwb2xpY3kgaXMgbm90IHNldCBhbmQgc2ltcGx5IHVzZXMgYGBPTERgYCBiZWhhdmlvci4KKworLi4gaW5jbHVkZTo6IERFUFJFQ0FURUQudHh0CmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMDk5LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAwOTkucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjQ5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3BvbGljeS9DTVAwMDk5LnJzdApAQCAtMCwwICsxLDI2IEBACitDTVAwMDk5CistLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworVGFyZ2V0IGxpbmsgcHJvcGVydGllcyA6cHJvcF90Z3Q6YElOVEVSRkFDRV9MSU5LX09QVElPTlNgLAorOnByb3BfdGd0OmBJTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFU2AgYW5kIDpwcm9wX3RndDpgSU5URVJGQUNFX0xJTktfREVQRU5EU2AKK2FyZSBub3cgdHJhbnNpdGl2ZSBvdmVyIHByaXZhdGUgZGVwZW5kZW5jaWVzIG9mIHN0YXRpYyBsaWJyYXJpZXMuCisKK0luIENNYWtlIDMuMTYgYW5kIGJlbG93IHRoZSBpbnRlcmZhY2UgbGluayBwcm9wZXJ0aWVzIGF0dGFjaGVkIHRvIGxpYnJhcmllcworYXJlIG5vdCBwcm9wYWdhdGVkIGZvciBwcml2YXRlIGRlcGVuZGVuY2llcyBvZiBzdGF0aWMgbGlicmFyaWVzLgorT25seSB0aGUgbGlicmFyaWVzIHRoZW1zZWx2ZXMgYXJlIHByb3BhZ2F0ZWQgdG8gbGluayB0aGUgZGVwZW5kZW50IGJpbmFyeS4KK0NNYWtlIDMuMTcgYW5kIGxhdGVyIHByZWZlciB0byBwcm9wYWdhdGUgYWxsIGludGVyZmFjZSBsaW5rIHByb3BlcnRpZXMuCitUaGlzIHBvbGljeSBwcm92aWRlcyBjb21wYXRpYmlsaXR5IGZvciBwcm9qZWN0cyB0aGF0IGhhdmUgbm90IGJlZW4gdXBkYXRlZAordG8gZXhwZWN0IHRoZSBuZXcgYmVoYXZpb3IuCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyB0byBub3QgcHJvcGFnYXRlIGludGVyZmFjZSBsaW5rCitwcm9wZXJ0aWVzLiBUaGUgYGBORVdgYCBiZWhhdmlvciBvZiB0aGlzIHBvbGljeSBpcyB0byBwcm9wYWdhdGUgaW50ZXJmYWNlIGxpbmsKK3Byb3BlcnRpZXMuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xNy4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorVW5saWtlIG1hbnkgcG9saWNpZXMsIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8IGRvZXMgKm5vdCogd2Fybgord2hlbiB0aGlzIHBvbGljeSBpcyBub3Qgc2V0IGFuZCBzaW1wbHkgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDAucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwMC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwZmE4MgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDAucnN0CkBAIC0wLDAgKzEsNDIgQEAKK0NNUDAxMDAKKy0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitMZXQgOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQgOnByb3BfdGd0OmBBVVRPVUlDYCBwcm9jZXNzCitoZWFkZXIgZmlsZXMgdGhhdCBlbmQgd2l0aCBhIGBgLmhoYGAgZXh0ZW5zaW9uLgorCitTaW5jZSB2ZXJzaW9uIDMuMTcsIENNYWtlIHByb2Nlc3NlcyBoZWFkZXIgZmlsZXMgdGhhdCBlbmQgd2l0aCBhCitgYC5oaGBgIGV4dGVuc2lvbiBpbiA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZCA6cHJvcF90Z3Q6YEFVVE9VSUNgLgorSW4gZWFybGllciBDTWFrZSB2ZXJzaW9ucywgdGhlc2UgaGVhZGVyIGZpbGVzIHdlcmUgaWdub3JlZCBieQorOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQgOnByb3BfdGd0OmBBVVRPVUlDYC4KKworVGhpcyBwb2xpY3kgYWZmZWN0cyBob3cgaGVhZGVyIGZpbGVzIHRoYXQgZW5kIHdpdGggYSBgYC5oaGBgIGV4dGVuc2lvbgorZ2V0IHRyZWF0ZWQgaW4gOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQgOnByb3BfdGd0OmBBVVRPVUlDYC4KKworVGhlIGBgT0xEYGAgYmVoYXZpb3IgZm9yIHRoaXMgcG9saWN5IGlzIHRvIGlnbm9yZSBgYC5oaGBgIGhlYWRlciBmaWxlcworaW4gOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQgOnByb3BfdGd0OmBBVVRPVUlDYC4KKworVGhlIGBgTkVXYGAgYmVoYXZpb3IgZm9yIHRoaXMgcG9saWN5IGlzIHRvIHByb2Nlc3MgYGAuaGhgYCBoZWFkZXIgZmlsZXMKK2luIDpwcm9wX3RndDpgQVVUT01PQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1VJQ2AganVzdCBsaWtlIG90aGVyIGhlYWRlciBmaWxlcy4KKworLi4gbm90ZTo6CisKKyAgVG8gc2lsZW5jZSB0aGUgYGBDTVAwMTAwYGAgd2FybmluZyBzb3VyY2UgZmlsZXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20KKyAgOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQgOnByb3BfdGd0OmBBVVRPVUlDYCBwcm9jZXNzaW5nIGJ5IHNldHRpbmcgdGhlCisgIHNvdXJjZSBmaWxlIHByb3BlcnRpZXMgOnByb3Bfc2Y6YFNLSVBfQVVUT01PQ2AsIDpwcm9wX3NmOmBTS0lQX0FVVE9VSUNgIG9yCisgIDpwcm9wX3NmOmBTS0lQX0FVVE9HRU5gLgorCisgIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICAgIyBTb3VyY2Ugc2tpcCBleGFtcGxlOgorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgL3BhdGgvdG8vZmlsZTEuaGggUFJPUEVSVFkgU0tJUF9BVVRPTU9DIE9OKQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgL3BhdGgvdG8vZmlsZTIuaGggUFJPUEVSVFkgU0tJUF9BVVRPVUlDIE9OKQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgL3BhdGgvdG8vZmlsZTMuaGggUFJPUEVSVFkgU0tJUF9BVVRPR0VOIE9OKQorCitUaGlzIHBvbGljeSB3YXMgaW50cm9kdWNlZCBpbiBDTWFrZSB2ZXJzaW9uIDMuMTcuMC4gIENNYWtlIHZlcnNpb24KK3xyZWxlYXNlfCB3YXJucyB3aGVuIHRoZSBwb2xpY3kgaXMgbm90IHNldCBhbmQgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorVXNlIHRoZSA6Y29tbWFuZDpgY21ha2VfcG9saWN5YCBjb21tYW5kIHRvIHNldCBpdCB0byBgYE9MRGBgIG9yIGBgTkVXYGAKK2V4cGxpY2l0bHkuCisKKy4uIGluY2x1ZGU6OiBERVBSRUNBVEVELnR4dApkaWZmIC0tZ2l0IGEvSGVscC9wb2xpY3kvQ01QMDEwMS5yc3QgYi9IZWxwL3BvbGljeS9DTVAwMTAxLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDJiY2NjCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wb2xpY3kvQ01QMDEwMS5yc3QKQEAgLTAsMCArMSwyMiBAQAorQ01QMDEwMQorLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKKzpjb21tYW5kOmB0YXJnZXRfY29tcGlsZV9vcHRpb25zYCBub3cgaG9ub3JzIGBgQkVGT1JFYGAga2V5d29yZCBpbiBhbGwgc2NvcGVzLgorCitJbiBDTWFrZSAzLjE2IGFuZCBiZWxvdyB0aGUgOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX29wdGlvbnNgIGlnbm9yZXMgdGhlCitgYEJFRk9SRWBgIGtleXdvcmQgaW4gcHJpdmF0ZSBzY29wZS4gQ01ha2UgMy4xNyBhbmQgbGF0ZXIgaG9ub3JzCitgYEJFRk9SRWBgIGtleXdvcmQgaW4gYWxsIHNjb3Blcy4gVGhpcyBwb2xpY3kgcHJvdmlkZXMgY29tcGF0aWJpbGl0eSBmb3IKK3Byb2plY3RzIHRoYXQgaGF2ZSBub3QgYmVlbiB1cGRhdGVkIHRvIGV4cGVjdCB0aGUgbmV3IGJlaGF2aW9yLgorCitUaGUgYGBPTERgYCBiZWhhdmlvciBmb3IgdGhpcyBwb2xpY3kgaXMgdG8gbm90IGhvbm9yIGBgQkVGT1JFYGAga2V5d29yZCBpbgorcHJpdmF0ZSBzY29wZS4gVGhlIGBgTkVXYGAgYmVoYXZpb3Igb2YgdGhpcyBwb2xpY3kgaXMgdG8gaG9ub3IKK2BgQkVGT1JFYGAga2V5d29yZCBpbiBhbGwgc2NvcGVzLgorCitUaGlzIHBvbGljeSB3YXMgaW50cm9kdWNlZCBpbiBDTWFrZSB2ZXJzaW9uIDMuMTcuICBVc2UgdGhlCis6Y29tbWFuZDpgY21ha2VfcG9saWN5YCBjb21tYW5kIHRvIHNldCBpdCB0byBgYE9MRGBgIG9yIGBgTkVXYGAgZXhwbGljaXRseS4KK1VubGlrZSBtYW55IHBvbGljaWVzLCBDTWFrZSB2ZXJzaW9uIHxyZWxlYXNlfCBkb2VzICpub3QqIHdhcm4KK3doZW4gdGhpcyBwb2xpY3kgaXMgbm90IHNldCBhbmQgc2ltcGx5IHVzZXMgYGBPTERgYCBiZWhhdmlvci4KKworLi4gaW5jbHVkZTo6IERFUFJFQ0FURUQudHh0CmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMTAyLnJzdCBiL0hlbHAvcG9saWN5L0NNUDAxMDIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YjU1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3BvbGljeS9DTVAwMTAyLnJzdApAQCAtMCwwICsxLDI3IEBACitDTVAwMTAyCistLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworVGhlIDpjb21tYW5kOmBtYXJrX2FzX2FkdmFuY2VkYCBjb21tYW5kIG5vIGxvbmdlciBjcmVhdGVzIGEgY2FjaGUgZW50cnkgaWYgb25lCitkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorCitJbiBDTWFrZSAzLjE2IGFuZCBiZWxvdywgaWYgYSB2YXJpYWJsZSB3YXMgbm90IGRlZmluZWQgYXQgYWxsIG9yIGp1c3QgZGVmaW5lZAorbG9jYWxseSwgdGhlIDpjb21tYW5kOmBtYXJrX2FzX2FkdmFuY2VkYCBjb21tYW5kIHdvdWxkIGNyZWF0ZSBhIG5ldyBjYWNoZQorZW50cnkgd2l0aCBhbiBgYFVOSU5JVElBTElaRURgYCB0eXBlIGFuZCBubyB2YWx1ZS4gV2hlbiBhIDpjb21tYW5kOmBmaW5kX3BhdGhgCisob3Igb3RoZXIgc2ltaWxhciBgYGZpbmRfYGAgY29tbWFuZCkgd291bGQgbmV4dCBydW4sIGl0IHdvdWxkIGZpbmQgdGhpcwordW5kZWZpbmVkIGNhY2hlIGVudHJ5IGFuZCBzZXQgaXQgdXAgd2l0aCBhbiBlbXB0eSBzdHJpbmcgdmFsdWUuIFRoaXMgcHJvY2Vzcword291bGQgZW5kIHVwIGRlbGV0aW5nIHRoZSBsb2NhbCB2YXJpYWJsZSBpbiB0aGUgcHJvY2VzcyAoZHVlIHRvIHRoZSB3YXkgdGhlCitjYWNoZSB3b3JrcyksIGVmZmVjdGl2ZWx5IGNsZWFyaW5nIGFueSBzdG9yZWQgYGBmaW5kX2BgIHJlc3VsdHMgdGhhdCB3ZXJlIG9ubHkKK2F2YWlsYWJsZSBpbiB0aGUgbG9jYWwgc2NvcGUuCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyB0byBjcmVhdGUgdGhlIGVtcHR5IGNhY2hlIGRlZmluaXRpb24uCitUaGUgYGBORVdgYCBiZWhhdmlvciBvZiB0aGlzIHBvbGljeSBpcyB0byBpZ25vcmUgdmFyaWFibGVzIHdoaWNoIGRvIG5vdAorYWxyZWFkeSBleGlzdCBpbiB0aGUgY2FjaGUuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xNy4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorVW5saWtlIG1hbnkgcG9saWNpZXMsIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8IGRvZXMgKm5vdCogd2Fybgord2hlbiB0aGlzIHBvbGljeSBpcyBub3Qgc2V0IGFuZCBzaW1wbHkgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDMucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwMy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmNDRkMQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDMucnN0CkBAIC0wLDAgKzEsMjQgQEAKK0NNUDAxMDMKKy0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitNdWx0aXBsZSBjYWxscyB0byA6Y29tbWFuZDpgZXhwb3J0YCBjb21tYW5kIHdpdGggc2FtZSBgYEZJTEVgYCB3aXRob3V0CitgYEFQUEVORGBgIGlzIG5vIGxvbmdlciBhbGxvd2VkLgorCitJbiBDTWFrZSAzLjE3IGFuZCBiZWxvdywgbXVsdGlwbGUgY2FsbHMgdG8gOmNvbW1hbmQ6YGV4cG9ydGAgY29tbWFuZCB3aXRoIHRoZQorc2FtZSBgYEZJTEVgYCB3aXRob3V0IGBgQVBQRU5EYGAgYXJlIGFjY2VwdGVkIHNpbGVudGx5IGJ1dCBvbmx5IHRoZSBsYXN0CitvY2N1cnJlbmNlIGlzIHRha2VuIGludG8gYWNjb3VudCBkdXJpbmcgdGhlIGdlbmVyYXRpb24uCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyB0byBpZ25vcmUgdGhlIG11bHRpcGxlIG9jY3VycmVuY2VzIG9mCisgOmNvbW1hbmQ6YGV4cG9ydGAgY29tbWFuZCBleGNlcHQgdGhlIGxhc3Qgb25lLgorCitUaGUgYGBORVdgYCBiZWhhdmlvciBvZiB0aGlzIHBvbGljeSBpcyB0byByYWlzZSBhbiBlcnJvciBvbiBzZWNvbmQgY2FsbCB0bworOmNvbW1hbmQ6YGV4cG9ydGAgY29tbWFuZCB3aXRoIHNhbWUgYGBGSUxFYGAgd2l0aG91dCBgYEFQUEVORGBgLgorCitUaGlzIHBvbGljeSB3YXMgaW50cm9kdWNlZCBpbiBDTWFrZSB2ZXJzaW9uIDMuMTguICBDTWFrZSB2ZXJzaW9uCit8cmVsZWFzZXwgd2FybnMgd2hlbiB0aGUgcG9saWN5IGlzIG5vdCBzZXQgYW5kIHVzZXMgYGBPTERgYCBiZWhhdmlvci4KK1VzZSB0aGUgOmNvbW1hbmQ6YGNtYWtlX3BvbGljeWAgY29tbWFuZCB0byBzZXQgaXQgdG8gYGBPTERgYCBvciBgYE5FV2BgCitleHBsaWNpdGx5LgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDQucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwNC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3YTE2ZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDQucnN0CkBAIC0wLDAgKzEsNTggQEAKK0NNUDAxMDQKKy0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitJbml0aWFsaXplIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTYCB3aGVuCis6dmFyaWFibGU6YENNQUtFX0NVREFfQ09NUElMRVJfSUQgPENNQUtFXzxMQU5HPl9DT01QSUxFUl9JRD5gIGlzIGBgTlZJRElBYGAuCitSYWlzZSBhbiBlcnJvciBpZiA6cHJvcF90Z3Q6YENVREFfQVJDSElURUNUVVJFU2AgaXMgZW1wdHkuCisKKzp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTYCBpbnRyb2R1Y2VkIGluIENNYWtlIDMuMTggaXMgdXNlZCB0bworaW5pdGlhbGl6ZSA6cHJvcF90Z3Q6YENVREFfQVJDSElURUNUVVJFU2AsIHdoaWNoIHBhc3NlcyBjb3JyZWN0IGNvZGUgZ2VuZXJhdGlvbgorZmxhZ3MgdG8gdGhlIENVREEgY29tcGlsZXIuCisKK1ByZXZpb3VzIHRvIHRoaXMgdXNlcnMgaGFkIHRvIG1hbnVhbGx5IHNwZWNpZnkgdGhlIGNvZGUgZ2VuZXJhdGlvbiBmbGFncy4gVGhpcworcG9saWN5IGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG1hbnVhbGx5IHNwZWNpZnlpbmcgY29kZSBnZW5lcmF0aW9uCitmbGFncy4KKworVGhlIGBgT0xEYGAgYmVoYXZpb3IgZm9yIHRoaXMgcG9saWN5IGlzIHRvIG5vdCBpbml0aWFsaXplCis6dmFyaWFibGU6YENNQUtFX0NVREFfQVJDSElURUNUVVJFU2Agd2hlbgorOnZhcmlhYmxlOmBDTUFLRV9DVURBX0NPTVBJTEVSX0lEIDxDTUFLRV88TEFORz5fQ09NUElMRVJfSUQ+YCBpcyBgYE5WSURJQWBgLgorRW1wdHkgOnByb3BfdGd0OmBDVURBX0FSQ0hJVEVDVFVSRVNgIGlzIGFsbG93ZWQuCisKK1RoZSBgYE5FV2BgIGJlaGF2aW9yIG9mIHRoaXMgcG9saWN5IGlzIHRvIGluaXRpYWxpemUKKzp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTYCB3aGVuCis6dmFyaWFibGU6YENNQUtFX0NVREFfQ09NUElMRVJfSUQgPENNQUtFXzxMQU5HPl9DT01QSUxFUl9JRD5gIGlzIGBgTlZJRElBYGAKK2FuZCByYWlzZSBhbiBlcnJvciBpZiA6cHJvcF90Z3Q6YENVREFfQVJDSElURUNUVVJFU2AgaXMgZW1wdHkgZHVyaW5nIGdlbmVyYXRpb24uCisKK0lmIDpwcm9wX3RndDpgQ1VEQV9BUkNISVRFQ1RVUkVTYCBpcyBzZXQgdG8gYSBmYWxzZSB2YWx1ZSBubyBhcmNoaXRlY3R1cmVzCitmbGFncyBhcmUgcGFzc2VkIHRvIHRoZSBjb21waWxlci4gVGhpcyBpcyBpbnRlbmRlZCB0byBzdXBwb3J0IHBhY2thZ2VycyBhbmQKK3RoZSByYXJlIGNhc2VzIHdoZXJlIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBwYXNzZWQgZmxhZ3MgaXMgcmVxdWlyZWQuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xOC4gIENNYWtlIHZlcnNpb24KK3xyZWxlYXNlfCB3YXJucyB3aGVuIHRoZSBwb2xpY3kgaXMgbm90IHNldCBhbmQgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorVXNlIHRoZSA6Y29tbWFuZDpgY21ha2VfcG9saWN5YCBjb21tYW5kIHRvIHNldCBpdCB0byBgYE9MRGBgIG9yIGBgTkVXYGAKK2V4cGxpY2l0bHkuCisKKy4uIGluY2x1ZGU6OiBERVBSRUNBVEVELnR4dAorCitFeGFtcGxlcworXl5eXl5eXl4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0Z3QgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIDM1IDUwIDcyKQorCitHZW5lcmF0ZXMgY29kZSBmb3IgcmVhbCBhbmQgdmlydHVhbCBhcmNoaXRlY3R1cmVzIGBgMzBgYCwgYGA1MGBgIGFuZCBgYDcyYGAuCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGd0IFBST1BFUlRZIENVREFfQVJDSElURUNUVVJFUyA3MC1yZWFsIDcyLXZpcnR1YWwpCisKK0dlbmVyYXRlcyBjb2RlIGZvciByZWFsIGFyY2hpdGVjdHVyZSBgYDcwYGAgYW5kIHZpcnR1YWwgYXJjaGl0ZWN0dXJlIGBgNzJgYC4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0Z3QgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIE9GRikKKworQ01ha2Ugd2lsbCBub3QgcGFzcyBhbnkgYXJjaGl0ZWN0dXJlIGZsYWdzIHRvIHRoZSBjb21waWxlci4KZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDUucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwNS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3YTU5YQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDUucnN0CkBAIC0wLDAgKzEsMjEgQEAKK0NNUDAxMDUKKy0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCis6cHJvcF90Z3Q6YExJTktfT1BUSU9OU2AgYW5kIDpwcm9wX3RndDpgSU5URVJGQUNFX0xJTktfT1BUSU9OU2AgdGFyZ2V0Citwcm9wZXJ0aWVzIGFyZSBub3cgdXNlZCBmb3IgdGhlIGRldmljZSBsaW5rIHN0ZXAuCisKK0luIENNYWtlIDMuMTcgYW5kIGJlbG93LCBsaW5rIG9wdGlvbnMgYXJlIG5vdCB1c2VkIGJ5IHRoZSBkZXZpY2UgbGluayBzdGVwLgorCitUaGUgYGBPTERgYCBiZWhhdmlvciBmb3IgdGhpcyBwb2xpY3kgaXMgdG8gaWdub3JlIHRoZSBsaW5rIG9wdGlvbnMuCisKK1RoZSBgYE5FV2BgIGJlaGF2aW9yIG9mIHRoaXMgcG9saWN5IGlzIHRvIHVzZSB0aGUgbGluayBvcHRpb25zIGR1cmluZyB0aGUKK2RldmljZSBsaW5rIHN0ZXAuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xNy4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorVW5saWtlIG1hbnkgcG9saWNpZXMsIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8IGRvZXMgKm5vdCogd2Fybgord2hlbiB0aGlzIHBvbGljeSBpcyBub3Qgc2V0IGFuZCBzaW1wbHkgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDYucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwNi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhNjYzNQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDYucnN0CkBAIC0wLDAgKzEsMjEgQEAKK0NNUDAxMDYKKy0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitUaGUgOm1vZHVsZTpgRG9jdW1lbnRhdGlvbmAgbW9kdWxlIGlzIHJlbW92ZWQuCisKK1RoZSA6bW9kdWxlOmBEb2N1bWVudGF0aW9uYCB3YXMgYWRkZWQgYXMgYSBzdXBwb3J0IG1lY2hhbmlzbSBmb3IgdGhlIFZUSworcHJvamVjdCBhbmQgd2FzIHR1bmVkIGZvciB0aGF0IHByb2plY3QuIEluc3RlYWQgb2YgQ01ha2UgcHJvdmlkaW5nIHRoaXMgbW9kdWxlCit3aXRoIChub3cgb2xkKSBWVEsgcGF0dGVybnMgZm9yIGNhY2hlIHZhcmlhYmxlcyBhbmQgcmVxdWlyZWQgcGFja2FnZXMsIHRoZQorbW9kdWxlIGlzIG5vdyBkZXByZWNhdGVkIGJ5IENNYWtlIGl0c2VsZi4KKworVGhlIGBgT0xEYGAgYmVoYXZpb3Igb2YgdGhpcyBwb2xpY3kgaXMgZm9yIDptb2R1bGU6YERvY3VtZW50YXRpb25gIHRvIGFkZAorY2FjaGUgdmFyaWFibGVzIGFuZCBmaW5kIFZUSyBkb2N1bWVudGF0aW9uIGRlcGVuZGVudCBwYWNrYWdlcy4gVGhlIGBgTkVXYGAKK2JlaGF2aW9yIGlzIHRvIGFjdCBhcyBhbiBlbXB0eSBtb2R1bGUuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xOC4gIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8Cit3YXJucyB3aGVuIHRoZSBwb2xpY3kgaXMgbm90IHNldCBhbmQgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLiBVc2UgdGhlCis6Y29tbWFuZDpgY21ha2VfcG9saWN5YCBjb21tYW5kIHRvIHNldCBpdCB0byBgYE9MRGBgIG9yIGBgTkVXYGAgZXhwbGljaXRseS4KKworLi4gaW5jbHVkZTo6IERFUFJFQ0FURUQudHh0CmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMTA3LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAxMDcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNWFlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3BvbGljeS9DTVAwMTA3LnJzdApAQCAtMCwwICsxLDIxIEBACitDTVAwMTA3CistLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworSXQgaXMgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGFuIGBgQUxJQVNgYCB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuCithbm90aGVyIHRhcmdldC4KKworSW4gQ01ha2UgMy4xNyBhbmQgYmVsb3csIGFuIGBgQUxJQVNgYCB0YXJnZXQgY2FuIG92ZXJ3cml0ZSBzaWxlbnRseSBhbiBleGlzdGluZwordGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZS4KKworVGhlIGBgT0xEYGAgYmVoYXZpb3IgZm9yIHRoaXMgcG9saWN5IGlzIHRvIGFsbG93IHRhcmdldCBvdmVyd3JpdGUuCisKK1RoZSBgYE5FV2BgIGJlaGF2aW9yIG9mIHRoaXMgcG9saWN5IGlzIHRvIHByZXZlbnQgdGFyZ2V0IG92ZXJ3cml0aW5nLgorCitUaGlzIHBvbGljeSB3YXMgaW50cm9kdWNlZCBpbiBDTWFrZSB2ZXJzaW9uIDMuMTcuICBVc2UgdGhlCis6Y29tbWFuZDpgY21ha2VfcG9saWN5YCBjb21tYW5kIHRvIHNldCBpdCB0byBgYE9MRGBgIG9yIGBgTkVXYGAgZXhwbGljaXRseS4KK1VubGlrZSBtYW55IHBvbGljaWVzLCBDTWFrZSB2ZXJzaW9uIHxyZWxlYXNlfCBkb2VzICpub3QqIHdhcm4KK3doZW4gdGhpcyBwb2xpY3kgaXMgbm90IHNldCBhbmQgc2ltcGx5IHVzZXMgYGBPTERgYCBiZWhhdmlvci4KKworLi4gaW5jbHVkZTo6IERFUFJFQ0FURUQudHh0CmRpZmYgLS1naXQgYS9IZWxwL3BvbGljeS9DTVAwMTA4LnJzdCBiL0hlbHAvcG9saWN5L0NNUDAxMDgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMTA5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3BvbGljeS9DTVAwMTA4LnJzdApAQCAtMCwwICsxLDIxIEBACitDTVAwMTA4CistLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworQSB0YXJnZXQgaXMgbm90IGFsbG93ZWQgdG8gbGluayB0byBpdHNlbGYgZXZlbiB0aHJvdWdoIGFuIGBgQUxJQVNgYCB0YXJnZXQuCisKK0luIENNYWtlIDMuMTcgYW5kIGJlbG93LCBhIHRhcmdldCBjYW4gbGluayB0byBhIHRhcmdldCBhbGlhc2VkIHRvIGl0c2VsZi4KKworVGhlIGBgT0xEYGAgYmVoYXZpb3IgZm9yIHRoaXMgcG9saWN5IGlzIHRvIGFsbG93IGEgdGFyZ2V0IHRvIGxpbmsgdG8gYSB0YXJnZXQKK2FsaWFzZWQgdG8gaXRzZWxmLgorCitUaGUgYGBORVdgYCBiZWhhdmlvciBvZiB0aGlzIHBvbGljeSBpcyB0byBwcmV2ZW50IGEgdGFyZ2V0IHRvIGxpbmsgdG8gaXRzZWxmCit0aHJvdWdoIGFuIGBgQUxJQVNgYCB0YXJnZXQuCisKK1RoaXMgcG9saWN5IHdhcyBpbnRyb2R1Y2VkIGluIENNYWtlIHZlcnNpb24gMy4xNy4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorVW5saWtlIG1hbnkgcG9saWNpZXMsIENNYWtlIHZlcnNpb24gfHJlbGVhc2V8IGRvZXMgKm5vdCogd2Fybgord2hlbiB0aGlzIHBvbGljeSBpcyBub3Qgc2V0IGFuZCBzaW1wbHkgdXNlcyBgYE9MRGBgIGJlaGF2aW9yLgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcG9saWN5L0NNUDAxMDkucnN0IGIvSGVscC9wb2xpY3kvQ01QMDEwOS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2Mjg3ZgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcG9saWN5L0NNUDAxMDkucnN0CkBAIC0wLDAgKzEsMjQgQEAKK0NNUDAxMDkKKy0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOQorCis6Y29tbWFuZDpgZmluZF9wcm9ncmFtYCByZXF1aXJlcyBwZXJtaXNzaW9uIHRvIGV4ZWN1dGUgYnV0IG5vdCB0byByZWFkLgorCitJbiBDTWFrZSAzLjE4IGFuZCBiZWxvdywgdGhlIDpjb21tYW5kOmBmaW5kX3Byb2dyYW1gIGNvbW1hbmQgb24gVU5JWAord291bGQgZmluZCBmaWxlcyB0aGF0IGFyZSByZWFkYWJsZSB3aXRob3V0IHJlcXVpcmluZyBleGVjdXRlIHBlcm1pc3Npb24sCithbmQgd291bGQgbm90IGZpbmQgZmlsZXMgdGhhdCBhcmUgZXhlY3V0YWJsZSB3aXRob3V0IHJlYWQgcGVybWlzc2lvbi4KK0luIENNYWtlIDMuMTkgYW5kIGFib3ZlLCBgYGZpbmRfcHJvZ3JhbWBgIG5vdyBwcmVmZXJzIHRvIHJlcXVpcmUgZXhlY3V0ZQorcGVybWlzc2lvbiBidXQgbm90IHJlYWQgcGVybWlzc2lvbi4gIFRoaXMgcG9saWN5IHByb3ZpZGVzIGNvbXBhdGliaWxpdHkKK3dpdGggcHJvamVjdHMgdGhhdCBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQgdG8gZXhwZWN0IHRoZSBuZXcgYmVoYXZpb3IuCisKK1RoZSBgYE9MRGBgIGJlaGF2aW9yIGZvciB0aGlzIHBvbGljeSBpcyBmb3IgYGBmaW5kX3Byb2dyYW1gYCB0byByZXF1aXJlCityZWFkIHBlcm1pc3Npb24gYnV0IG5vdCBleGVjdXRlIHBlcm1pc3Npb24uCitUaGUgYGBORVdgYCBiZWhhdmlvciBmb3IgdGhpcyBwb2xpY3kgaXMgZm9yIGBgZmluZF9wcm9ncmFtYGAgdG8gcmVxdWlyZQorZXhlY3V0ZSBwZXJtaXNzaW9uIGJ1dCBub3QgcmVhZCBwZXJtaXNzaW9uLgorCitUaGlzIHBvbGljeSB3YXMgaW50cm9kdWNlZCBpbiBDTWFrZSB2ZXJzaW9uIDMuMTkuICBDTWFrZSB2ZXJzaW9uIHxyZWxlYXNlfAord2FybnMgd2hlbiB0aGUgcG9saWN5IGlzIG5vdCBzZXQgYW5kIHVzZXMgYGBPTERgYCBiZWhhdmlvci4gIFVzZSB0aGUKKzpjb21tYW5kOmBjbWFrZV9wb2xpY3lgIGNvbW1hbmQgdG8gc2V0IGl0IHRvIGBgT0xEYGAgb3IgYGBORVdgYCBleHBsaWNpdGx5LgorCisuLiBpbmNsdWRlOjogREVQUkVDQVRFRC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9kaXIvQURESVRJT05BTF9DTEVBTl9GSUxFUy5yc3QgYi9IZWxwL3Byb3BfZGlyL0FERElUSU9OQUxfQ0xFQU5fRklMRVMucnN0CmluZGV4IDA1MWQyMmEuLjYwOTdkMTQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9kaXIvQURESVRJT05BTF9DTEVBTl9GSUxFUy5yc3QKKysrIGIvSGVscC9wcm9wX2Rpci9BRERJVElPTkFMX0NMRUFOX0ZJTEVTLnJzdApAQCAtMSw2ICsxLDggQEAKIEFERElUSU9OQUxfQ0xFQU5fRklMRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBBIDpyZWY6YDstbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBvZiBmaWxlcyBvciBkaXJlY3RvcmllcyB0aGF0IHdpbGwgYmUKIHJlbW92ZWQgYXMgYSBwYXJ0IG9mIHRoZSBnbG9iYWwgYGBjbGVhbmBgIHRhcmdldC4gIEl0IGlzIHVzZWZ1bCBmb3IKIHNwZWNpZnlpbmcgZ2VuZXJhdGVkIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHVzZWQgYnkgbXVsdGlwbGUgdGFyZ2V0cwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2Rpci9CSU5BUllfRElSLnJzdCBiL0hlbHAvcHJvcF9kaXIvQklOQVJZX0RJUi5yc3QKaW5kZXggNTk3Yzc5YS4uZmNmOWQxNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2Rpci9CSU5BUllfRElSLnJzdAorKysgYi9IZWxwL3Byb3BfZGlyL0JJTkFSWV9ESVIucnN0CkBAIC0xLDUgKzEsNyBAQAogQklOQVJZX0RJUgogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVGhpcyByZWFkLW9ubHkgZGlyZWN0b3J5IHByb3BlcnR5IHJlcG9ydHMgYWJzb2x1dGUgcGF0aCB0byB0aGUgYmluYXJ5CiBkaXJlY3RvcnkgY29ycmVzcG9uZGluZyB0byB0aGUgc291cmNlIG9uIHdoaWNoIGl0IGlzIHJlYWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZGlyL0JVSUxEU1lTVEVNX1RBUkdFVFMucnN0IGIvSGVscC9wcm9wX2Rpci9CVUlMRFNZU1RFTV9UQVJHRVRTLnJzdAppbmRleCAwNGJiNTZlLi41YzU4OTNkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZGlyL0JVSUxEU1lTVEVNX1RBUkdFVFMucnN0CisrKyBiL0hlbHAvcHJvcF9kaXIvQlVJTERTWVNURU1fVEFSR0VUUy5yc3QKQEAgLTEsNiArMSw4IEBACiBCVUlMRFNZU1RFTV9UQVJHRVRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGlzIHJlYWQtb25seSBkaXJlY3RvcnkgcHJvcGVydHkgY29udGFpbnMgYQogOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIGJ1aWxkc3lzdGVtIHRhcmdldHMgYWRkZWQgaW4gdGhlCiBkaXJlY3RvcnkgYnkgY2FsbHMgdG8gdGhlIDpjb21tYW5kOmBhZGRfbGlicmFyeWAsIDpjb21tYW5kOmBhZGRfZXhlY3V0YWJsZWAsCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZGlyL0xBQkVMUy5yc3QgYi9IZWxwL3Byb3BfZGlyL0xBQkVMUy5yc3QKaW5kZXggZGUyN2Q5MC4uYmYxNDM2OCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2Rpci9MQUJFTFMucnN0CisrKyBiL0hlbHAvcHJvcF9kaXIvTEFCRUxTLnJzdApAQCAtMSw2ICsxLDggQEAKIExBQkVMUwogLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogU3BlY2lmeSBhIGxpc3Qgb2YgdGV4dCBsYWJlbHMgYXNzb2NpYXRlZCB3aXRoIGEgZGlyZWN0b3J5IGFuZCBhbGwgb2YgaXRzCiBzdWJkaXJlY3Rvcmllcy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIDpwcm9wX3RndDpgTEFCRUxTYCB0YXJnZXQKIHByb3BlcnR5IGFuZCB0aGUgOnByb3BfdGVzdDpgTEFCRUxTYCB0ZXN0IHByb3BlcnR5IG9uIGFsbCB0YXJnZXRzIGFuZCB0ZXN0cyBpbgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2Rpci9MSU5LX09QVElPTlMucnN0IGIvSGVscC9wcm9wX2Rpci9MSU5LX09QVElPTlMucnN0CmluZGV4IDU0YWM2ZGQuLjNhNWM3MmYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9kaXIvTElOS19PUFRJT05TLnJzdAorKysgYi9IZWxwL3Byb3BfZGlyL0xJTktfT1BUSU9OUy5yc3QKQEAgLTEsOCArMSwxMCBAQAogTElOS19PUFRJT05TCiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBMaXN0IG9mIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgbGluayBzdGVwIG9mIHNoYXJlZCBsaWJyYXJ5LCBtb2R1bGUKLWFuZCBleGVjdXRhYmxlIHRhcmdldHMuCithbmQgZXhlY3V0YWJsZSB0YXJnZXRzIGFzIHdlbGwgYXMgdGhlIGRldmljZSBsaW5rIHN0ZXAuCiAKIFRoaXMgcHJvcGVydHkgaG9sZHMgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2Ygb3B0aW9ucwogZ2l2ZW4gc28gZmFyIHRvIHRoZSA6Y29tbWFuZDpgYWRkX2xpbmtfb3B0aW9uc2AgY29tbWFuZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9kaXIvU09VUkNFX0RJUi5yc3QgYi9IZWxwL3Byb3BfZGlyL1NPVVJDRV9ESVIucnN0CmluZGV4IGFjOThjM2IuLmQ3MzcwN2QgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9kaXIvU09VUkNFX0RJUi5yc3QKKysrIGIvSGVscC9wcm9wX2Rpci9TT1VSQ0VfRElSLnJzdApAQCAtMSw1ICsxLDcgQEAKIFNPVVJDRV9ESVIKIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFRoaXMgcmVhZC1vbmx5IGRpcmVjdG9yeSBwcm9wZXJ0eSByZXBvcnRzIGFic29sdXRlIHBhdGggdG8gdGhlIHNvdXJjZQogZGlyZWN0b3J5IG9uIHdoaWNoIGl0IGlzIHJlYWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZGlyL1NVQkRJUkVDVE9SSUVTLnJzdCBiL0hlbHAvcHJvcF9kaXIvU1VCRElSRUNUT1JJRVMucnN0CmluZGV4IDZhMGFjODAuLjcxZWE0OTYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9kaXIvU1VCRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvcHJvcF9kaXIvU1VCRElSRUNUT1JJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogU1VCRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGlzIHJlYWQtb25seSBkaXJlY3RvcnkgcHJvcGVydHkgY29udGFpbnMgYQogOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIHN1YmRpcmVjdG9yaWVzIHByb2Nlc3NlZCBzbyBmYXIgYnkKIHRoZSA6Y29tbWFuZDpgYWRkX3N1YmRpcmVjdG9yeWAgb3IgOmNvbW1hbmQ6YHN1YmRpcnNgIGNvbW1hbmRzLiAgRWFjaCBlbnRyeSBpcwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2Rpci9URVNUUy5yc3QgYi9IZWxwL3Byb3BfZGlyL1RFU1RTLnJzdAppbmRleCAxYzlmNmU1Li4yOTRiZTE3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZGlyL1RFU1RTLnJzdAorKysgYi9IZWxwL3Byb3BfZGlyL1RFU1RTLnJzdApAQCAtMSw2ICsxLDggQEAKIFRFU1RTCiAtLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIExpc3Qgb2YgdGVzdHMuCiAKIFRoaXMgcmVhZC1vbmx5IHByb3BlcnR5IGhvbGRzIGEKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9kaXIvVEVTVF9JTkNMVURFX0ZJTEVTLnJzdCBiL0hlbHAvcHJvcF9kaXIvVEVTVF9JTkNMVURFX0ZJTEVTLnJzdAppbmRleCBjM2U0NjAyLi5mOWE2NmY0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZGlyL1RFU1RfSU5DTFVERV9GSUxFUy5yc3QKKysrIGIvSGVscC9wcm9wX2Rpci9URVNUX0lOQ0xVREVfRklMRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogVEVTVF9JTkNMVURFX0ZJTEVTCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBBIGxpc3Qgb2YgY21ha2UgZmlsZXMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIHdoZW4gY3Rlc3QgaXMgcnVuLgogCiBJZiB5b3Ugc3BlY2lmeSBgYFRFU1RfSU5DTFVERV9GSUxFU2BgLCB0aG9zZSBmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGFuZApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2Rpci9WU19TVEFSVFVQX1BST0pFQ1QucnN0IGIvSGVscC9wcm9wX2Rpci9WU19TVEFSVFVQX1BST0pFQ1QucnN0CmluZGV4IDI2ODBkZmEuLjhhMGMzYzggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9kaXIvVlNfU1RBUlRVUF9QUk9KRUNULnJzdAorKysgYi9IZWxwL3Byb3BfZGlyL1ZTX1NUQVJUVVBfUFJPSkVDVC5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19TVEFSVFVQX1BST0pFQ1QKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogU3BlY2lmeSB0aGUgZGVmYXVsdCBzdGFydHVwIHByb2plY3QgaW4gYSBWaXN1YWwgU3R1ZGlvIHNvbHV0aW9uLgogCiBUaGUgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBjcmVhdGUgYSBgYC5zbG5gYCBmaWxlIGZvciBlYWNoIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9BVVRPR0VOX1NPVVJDRV9HUk9VUC5yc3QgYi9IZWxwL3Byb3BfZ2JsL0FVVE9HRU5fU09VUkNFX0dST1VQLnJzdAppbmRleCBkMjk0ZWIxLi4yZTMyMzIwIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZ2JsL0FVVE9HRU5fU09VUkNFX0dST1VQLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL0FVVE9HRU5fU09VUkNFX0dST1VQLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9HRU5fU09VUkNFX0dST1VQCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogTmFtZSBvZiB0aGUgIDpjb21tYW5kOmBzb3VyY2VfZ3JvdXBgIGZvciA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZAogOnByb3BfdGd0OmBBVVRPUkNDYCBnZW5lcmF0ZWQgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9nYmwvQVVUT01PQ19TT1VSQ0VfR1JPVVAucnN0IGIvSGVscC9wcm9wX2dibC9BVVRPTU9DX1NPVVJDRV9HUk9VUC5yc3QKaW5kZXggMjQ1NWRjNy4uYTI2NmZkZSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2dibC9BVVRPTU9DX1NPVVJDRV9HUk9VUC5yc3QKKysrIGIvSGVscC9wcm9wX2dibC9BVVRPTU9DX1NPVVJDRV9HUk9VUC5yc3QKQEAgLTEsNiArMSw4IEBACiBBVVRPTU9DX1NPVVJDRV9HUk9VUAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIE5hbWUgb2YgdGhlICA6Y29tbWFuZDpgc291cmNlX2dyb3VwYCBmb3IgOnByb3BfdGd0OmBBVVRPTU9DYCBnZW5lcmF0ZWQgZmlsZXMuCiAKIFdoZW4gc2V0IHRoaXMgaXMgdXNlZCBpbnN0ZWFkIG9mIDpwcm9wX2dibDpgQVVUT0dFTl9TT1VSQ0VfR1JPVVBgIGZvcgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9BVVRPUkNDX1NPVVJDRV9HUk9VUC5yc3QgYi9IZWxwL3Byb3BfZ2JsL0FVVE9SQ0NfU09VUkNFX0dST1VQLnJzdAppbmRleCA2NWVhOTViLi41NGViYWJiIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZ2JsL0FVVE9SQ0NfU09VUkNFX0dST1VQLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL0FVVE9SQ0NfU09VUkNFX0dST1VQLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9SQ0NfU09VUkNFX0dST1VQCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogTmFtZSBvZiB0aGUgIDpjb21tYW5kOmBzb3VyY2VfZ3JvdXBgIGZvciA6cHJvcF90Z3Q6YEFVVE9SQ0NgIGdlbmVyYXRlZCBmaWxlcy4KIAogV2hlbiBzZXQgdGhpcyBpcyB1c2VkIGluc3RlYWQgb2YgOnByb3BfZ2JsOmBBVVRPR0VOX1NPVVJDRV9HUk9VUGAgZm9yCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZ2JsL0NNQUtFX0NVREFfS05PV05fRkVBVFVSRVMucnN0IGIvSGVscC9wcm9wX2dibC9DTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGUzMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX2dibC9DTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTLnJzdApAQCAtMCwwICsxLDMyIEBACitDTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworTGlzdCBvZiBDVURBIGZlYXR1cmVzIGtub3duIHRvIHRoaXMgdmVyc2lvbiBvZiBDTWFrZS4KKworVGhlIGZlYXR1cmVzIGxpc3RlZCBpbiB0aGlzIGdsb2JhbCBwcm9wZXJ0eSBtYXkgYmUga25vd24gdG8gYmUgYXZhaWxhYmxlIHRvIHRoZQorQ1VEQSBjb21waWxlci4gIElmIHRoZSBmZWF0dXJlIGlzIGF2YWlsYWJsZSB3aXRoIHRoZSBDKysgY29tcGlsZXIsIGl0IHdpbGwKK2JlIGxpc3RlZCBpbiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVNgIHZhcmlhYmxlLgorCitUaGUgZmVhdHVyZXMgbGlzdGVkIGhlcmUgbWF5IGJlIHVzZWQgd2l0aCB0aGUgOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX2ZlYXR1cmVzYAorY29tbWFuZC4gIFNlZSB0aGUgOm1hbnVhbDpgY21ha2UtY29tcGlsZS1mZWF0dXJlcyg3KWAgbWFudWFsIGZvciBpbmZvcm1hdGlvbiBvbgorY29tcGlsZSBmZWF0dXJlcyBhbmQgYSBsaXN0IG9mIHN1cHBvcnRlZCBjb21waWxlcnMuCisKKworVGhlIGZlYXR1cmVzIGtub3duIHRvIHRoaXMgdmVyc2lvbiBvZiBDTWFrZSBhcmU6CisKK2BgY3VkYV9zdGRfMDNgYAorICBDb21waWxlciBtb2RlIGlzIGF0IGxlYXN0IENVREEvQysrIDAzLgorCitgYGN1ZGFfc3RkXzExYGAKKyAgQ29tcGlsZXIgbW9kZSBpcyBhdCBsZWFzdCBDVURBL0MrKyAxMS4KKworYGBjdWRhX3N0ZF8xNGBgCisgIENvbXBpbGVyIG1vZGUgaXMgYXQgbGVhc3QgQ1VEQS9DKysgMTQuCisKK2BgY3VkYV9zdGRfMTdgYAorICBDb21waWxlciBtb2RlIGlzIGF0IGxlYXN0IENVREEvQysrIDE3LgorCitgYGN1ZGFfc3RkXzIwYGAKKyAgQ29tcGlsZXIgbW9kZSBpcyBhdCBsZWFzdCBDVURBL0MrKyAyMC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9nYmwvQ01BS0VfQ1hYX0tOT1dOX0ZFQVRVUkVTLnJzdCBiL0hlbHAvcHJvcF9nYmwvQ01BS0VfQ1hYX0tOT1dOX0ZFQVRVUkVTLnJzdAppbmRleCBiOTIxYzZiLi45YjUzMjgyIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZ2JsL0NNQUtFX0NYWF9LTk9XTl9GRUFUVVJFUy5yc3QKKysrIGIvSGVscC9wcm9wX2dibC9DTUFLRV9DWFhfS05PV05fRkVBVFVSRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1hYX0tOT1dOX0ZFQVRVUkVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIExpc3Qgb2YgQysrIGZlYXR1cmVzIGtub3duIHRvIHRoaXMgdmVyc2lvbiBvZiBDTWFrZS4KIAogVGhlIGZlYXR1cmVzIGxpc3RlZCBpbiB0aGlzIGdsb2JhbCBwcm9wZXJ0eSBtYXkgYmUga25vd24gdG8gYmUgYXZhaWxhYmxlIHRvIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9DTUFLRV9DX0tOT1dOX0ZFQVRVUkVTLnJzdCBiL0hlbHAvcHJvcF9nYmwvQ01BS0VfQ19LTk9XTl9GRUFUVVJFUy5yc3QKaW5kZXggZTVmODk2ZS4uNzE2NjM4MSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2dibC9DTUFLRV9DX0tOT1dOX0ZFQVRVUkVTLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL0NNQUtFX0NfS05PV05fRkVBVFVSRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ19LTk9XTl9GRUFUVVJFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogTGlzdCBvZiBDIGZlYXR1cmVzIGtub3duIHRvIHRoaXMgdmVyc2lvbiBvZiBDTWFrZS4KIAogVGhlIGZlYXR1cmVzIGxpc3RlZCBpbiB0aGlzIGdsb2JhbCBwcm9wZXJ0eSBtYXkgYmUga25vd24gdG8gYmUgYXZhaWxhYmxlIHRvIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9DTUFLRV9ST0xFLnJzdCBiL0hlbHAvcHJvcF9nYmwvQ01BS0VfUk9MRS5yc3QKaW5kZXggMjc1MTJmYS4uM2Y0NDkyZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2dibC9DTUFLRV9ST0xFLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL0NNQUtFX1JPTEUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfUk9MRQogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIFRlbGxzIHdoYXQgbW9kZSB0aGUgY3VycmVudCBydW5uaW5nIHNjcmlwdCBpcyBpbi4gQ291bGQgYmUgb25lIG9mIHNldmVyYWwKIHZhbHVlczoKIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9FQ0xJUFNFX0VYVFJBX0NQUk9KRUNUX0NPTlRFTlRTLnJzdCBiL0hlbHAvcHJvcF9nYmwvRUNMSVBTRV9FWFRSQV9DUFJPSkVDVF9DT05URU5UUy5yc3QKaW5kZXggNTBjNDFhOS4uMmYxMTBhNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2dibC9FQ0xJUFNFX0VYVFJBX0NQUk9KRUNUX0NPTlRFTlRTLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL0VDTElQU0VfRVhUUkFfQ1BST0pFQ1RfQ09OVEVOVFMucnN0CkBAIC0xLDYgKzEsOCBAQAogRUNMSVBTRV9FWFRSQV9DUFJPSkVDVF9DT05URU5UUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIEFkZGl0aW9uYWwgY29udGVudHMgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgZ2VuZXJhdGVkIEVjbGlwc2UgY3Byb2plY3QgZmlsZS4KIAogVGhlIGNwcm9qZWN0IGZpbGUgZGVmaW5lcyB0aGUgQ0RUIHNwZWNpZmljIGluZm9ybWF0aW9uLiBTb21lIHRoaXJkIHBhcnR5IElERSdzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZ2JsL0ZJTkRfTElCUkFSWV9VU0VfTElCMzJfUEFUSFMucnN0IGIvSGVscC9wcm9wX2dibC9GSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTLnJzdAppbmRleCA4Mzk2MDI2Li5mNmNhZDY2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfZ2JsL0ZJTkRfTElCUkFSWV9VU0VfTElCMzJfUEFUSFMucnN0CisrKyBiL0hlbHAvcHJvcF9nYmwvRklORF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIUy5yc3QKQEAgLTEsNiArMSw4IEBACiBGSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBXaGV0aGVyIHRoZSA6Y29tbWFuZDpgZmluZF9saWJyYXJ5YCBjb21tYW5kIHNob3VsZCBhdXRvbWF0aWNhbGx5IHNlYXJjaAogYGBsaWIzMmBgIGRpcmVjdG9yaWVzLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZ2JsL0ZJTkRfTElCUkFSWV9VU0VfTElCWDMyX1BBVEhTLnJzdCBiL0hlbHAvcHJvcF9nYmwvRklORF9MSUJSQVJZX1VTRV9MSUJYMzJfUEFUSFMucnN0CmluZGV4IGI4N2IwOWIuLjg1MWY4NTkgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9nYmwvRklORF9MSUJSQVJZX1VTRV9MSUJYMzJfUEFUSFMucnN0CisrKyBiL0hlbHAvcHJvcF9nYmwvRklORF9MSUJSQVJZX1VTRV9MSUJYMzJfUEFUSFMucnN0CkBAIC0xLDYgKzEsOCBAQAogRklORF9MSUJSQVJZX1VTRV9MSUJYMzJfUEFUSFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBXaGV0aGVyIHRoZSA6Y29tbWFuZDpgZmluZF9saWJyYXJ5YCBjb21tYW5kIHNob3VsZCBhdXRvbWF0aWNhbGx5IHNlYXJjaAogYGBsaWJ4MzJgYCBkaXJlY3Rvcmllcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHLnJzdCBiL0hlbHAvcHJvcF9nYmwvR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRy5yc3QKaW5kZXggYjhlYzhhNi4uNmYxYTllMSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2dibC9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcucnN0CkBAIC0xLDYgKzEsOCBAQAogR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogUmVhZC1vbmx5IHByb3BlcnR5IHRoYXQgaXMgdHJ1ZSBvbiBtdWx0aS1jb25maWd1cmF0aW9uIGdlbmVyYXRvcnMuCiAKIFRydWUgd2hlbiB1c2luZyBhIG11bHRpLWNvbmZpZ3VyYXRpb24gZ2VuZXJhdG9yCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfZ2JsL1RBUkdFVF9NRVNTQUdFUy5yc3QgYi9IZWxwL3Byb3BfZ2JsL1RBUkdFVF9NRVNTQUdFUy5yc3QKaW5kZXggMjc1YjA3NC4uYmI5MTc3MiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2dibC9UQVJHRVRfTUVTU0FHRVMucnN0CisrKyBiL0hlbHAvcHJvcF9nYmwvVEFSR0VUX01FU1NBR0VTLnJzdApAQCAtMSw2ICsxLDggQEAKIFRBUkdFVF9NRVNTQUdFUwogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTcGVjaWZ5IHdoZXRoZXIgdG8gcmVwb3J0IHRoZSBjb21wbGV0aW9uIG9mIGVhY2ggdGFyZ2V0LgogCiBUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB3aGV0aGVyIDpyZWY6YE1ha2VmaWxlIEdlbmVyYXRvcnNgIHNob3VsZApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2dibC9YQ09ERV9FTUlUX0VGRkVDVElWRV9QTEFURk9STV9OQU1FLnJzdCBiL0hlbHAvcHJvcF9nYmwvWENPREVfRU1JVF9FRkZFQ1RJVkVfUExBVEZPUk1fTkFNRS5yc3QKaW5kZXggOTUwMDQ0My4uMzkyYjcwNCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2dibC9YQ09ERV9FTUlUX0VGRkVDVElWRV9QTEFURk9STV9OQU1FLnJzdAorKysgYi9IZWxwL3Byb3BfZ2JsL1hDT0RFX0VNSVRfRUZGRUNUSVZFX1BMQVRGT1JNX05BTUUucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfRU1JVF9FRkZFQ1RJVkVfUExBVEZPUk1fTkFNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogQ29udHJvbCBlbWlzc2lvbiBvZiBgYEVGRkVDVElWRV9QTEFURk9STV9OQU1FYGAgYnkgdGhlIDpnZW5lcmF0b3I6YFhjb2RlYAogZ2VuZXJhdG9yLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfaW5zdC9DUEFDS19ERVNLVE9QX1NIT1JUQ1VUUy5yc3QgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19ERVNLVE9QX1NIT1JUQ1VUUy5yc3QKaW5kZXggNzI5YWI2MC4uNTVlOWEyMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfREVTS1RPUF9TSE9SVENVVFMucnN0CisrKyBiL0hlbHAvcHJvcF9pbnN0L0NQQUNLX0RFU0tUT1BfU0hPUlRDVVRTLnJzdApAQCAtMSw2ICsxLDggQEAKIENQQUNLX0RFU0tUT1BfU0hPUlRDVVRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogU3BlY2llcyBhIGxpc3Qgb2Ygc2hvcnRjdXQgbmFtZXMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCBvbiB0aGUgYERlc2t0b3BgCiBmb3IgdGhpcyBmaWxlLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfaW5zdC9DUEFDS19ORVZFUl9PVkVSV1JJVEUucnN0IGIvSGVscC9wcm9wX2luc3QvQ1BBQ0tfTkVWRVJfT1ZFUldSSVRFLnJzdAppbmRleCA0Nzg5ZTI1Li4xMmVlZjllIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfaW5zdC9DUEFDS19ORVZFUl9PVkVSV1JJVEUucnN0CisrKyBiL0hlbHAvcHJvcF9pbnN0L0NQQUNLX05FVkVSX09WRVJXUklURS5yc3QKQEAgLTEsNiArMSw4IEBACiBDUEFDS19ORVZFUl9PVkVSV1JJVEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogUmVxdWVzdCB0aGF0IHRoaXMgZmlsZSBub3QgYmUgb3ZlcndyaXR0ZW4gb24gaW5zdGFsbCBvciByZWluc3RhbGwuCiAKIFRoZSBwcm9wZXJ0eSBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgYnkgdGhlIDpjcGFja19nZW46YENQYWNrIFdJWCBHZW5lcmF0b3JgLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfUEVSTUFORU5ULnJzdCBiL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1BFUk1BTkVOVC5yc3QKaW5kZXggOTg1ZGUwZC4uZTg5YzU1MiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfUEVSTUFORU5ULnJzdAorKysgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19QRVJNQU5FTlQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1BBQ0tfUEVSTUFORU5UCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFJlcXVlc3QgdGhhdCB0aGlzIGZpbGUgbm90IGJlIHJlbW92ZWQgb24gdW5pbnN0YWxsLgogCiBUaGUgcHJvcGVydHkgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBXSVggR2VuZXJhdG9yYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1NUQVJUVVBfU0hPUlRDVVRTLnJzdCBiL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1NUQVJUVVBfU0hPUlRDVVRTLnJzdAppbmRleCBkOTIwOGI5Li5lODk2YWNkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfaW5zdC9DUEFDS19TVEFSVFVQX1NIT1JUQ1VUUy5yc3QKKysrIGIvSGVscC9wcm9wX2luc3QvQ1BBQ0tfU1RBUlRVUF9TSE9SVENVVFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1BBQ0tfU1RBUlRVUF9TSE9SVENVVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBTcGVjaWVzIGEgbGlzdCBvZiBzaG9ydGN1dCBuYW1lcyB0aGF0IHNob3VsZCBiZSBjcmVhdGVkIGluIHRoZSBgU3RhcnR1cGAgZm9sZGVyCiBmb3IgdGhpcyBmaWxlLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfaW5zdC9DUEFDS19TVEFSVF9NRU5VX1NIT1JUQ1VUUy5yc3QgYi9IZWxwL3Byb3BfaW5zdC9DUEFDS19TVEFSVF9NRU5VX1NIT1JUQ1VUUy5yc3QKaW5kZXggMDkyMzM0YS4uZmI4ODA3ZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX2luc3QvQ1BBQ0tfU1RBUlRfTUVOVV9TSE9SVENVVFMucnN0CisrKyBiL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1NUQVJUX01FTlVfU0hPUlRDVVRTLnJzdApAQCAtMSw2ICsxLDggQEAKIENQQUNLX1NUQVJUX01FTlVfU0hPUlRDVVRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogU3BlY2llcyBhIGxpc3Qgb2Ygc2hvcnRjdXQgbmFtZXMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCBpbiB0aGUgYFN0YXJ0IE1lbnVgCiBmb3IgdGhpcyBmaWxlLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfaW5zdC9DUEFDS19XSVhfQUNMLnJzdCBiL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1dJWF9BQ0wucnN0CmluZGV4IGM4OGY0MjYuLjhiNGZiNWMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1dJWF9BQ0wucnN0CisrKyBiL0hlbHAvcHJvcF9pbnN0L0NQQUNLX1dJWF9BQ0wucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1BBQ0tfV0lYX0FDTAogLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmaWVzIGFjY2VzcyBwZXJtaXNzaW9ucyBmb3IgZmlsZXMgb3IgZGlyZWN0b3JpZXMKIGluc3RhbGxlZCBieSBhIFdpWCBpbnN0YWxsZXIuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9DT01QSUxFX09QVElPTlMucnN0IGIvSGVscC9wcm9wX3NmL0NPTVBJTEVfT1BUSU9OUy5yc3QKaW5kZXggN2U0ODI3MS4uYTY5NGMzZSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL0NPTVBJTEVfT1BUSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3NmL0NPTVBJTEVfT1BUSU9OUy5yc3QKQEAgLTEsMTMgKzEsMTMgQEAKIENPTVBJTEVfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogTGlzdCBvZiBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29tcGlsZXIuCiAKIFRoaXMgcHJvcGVydHkgaG9sZHMgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2Ygb3B0aW9ucwogYW5kIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgY29tcGlsZSBmbGFncyB3aGVuIHRoaXMKLXNvdXJjZSBmaWxlIGJ1aWxkcy4gIFVzZSA6cHJvcF9zZjpgQ09NUElMRV9ERUZJTklUSU9OU2AgdG8gcGFzcwotYWRkaXRpb25hbCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgYW5kIDpwcm9wX3NmOmBJTkNMVURFX0RJUkVDVE9SSUVTYCB0byBwYXNzCi1hZGRpdGlvbmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMuCitzb3VyY2UgZmlsZSBidWlsZHMuCiAKIENvbnRlbnRzIG9mIGBgQ09NUElMRV9PUFRJT05TYGAgbWF5IHVzZSAiZ2VuZXJhdG9yIGV4cHJlc3Npb25zIiB3aXRoIHRoZQogc3ludGF4IGBgJDwuLi4+YGAuICBTZWUgdGhlIDptYW51YWw6YGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KWAgbWFudWFsCkBAIC0xNiw2ICsxNiwxOSBAQAogdGhhdCBkZXBlbmQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYXJlIG5vdCBhbGxvd2VkIHdpdGggdGhhdAogZ2VuZXJhdG9yLgogCi0uLiBub3RlOjoKK1VzYWdlIGV4YW1wbGU6CiAKLSAgVGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgcHJlZmVycmVkIG92ZXIgdGhlIDpwcm9wX3NmOmBDT01QSUxFX0ZMQUdTYCBwcm9wZXJ0eS4KKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhmb28uY3BwIFBST1BFUlRJRVMgQ09NUElMRV9PUFRJT05TICItV25vLXVudXNlZC1wYXJhbWV0ZXI7LVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVyIikKKworUmVsYXRlZCBwcm9wZXJ0aWVzOgorCisqIFByZWZlciB0aGlzIHByb3BlcnR5IG92ZXIgOnByb3Bfc2Y6YENPTVBJTEVfRkxBR1NgLgorKiBVc2UgOnByb3Bfc2Y6YENPTVBJTEVfREVGSU5JVElPTlNgIHRvIHBhc3MgYWRkaXRpb25hbCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuCisqIFVzZSA6cHJvcF9zZjpgSU5DTFVERV9ESVJFQ1RPUklFU2AgdG8gcGFzcyBhZGRpdGlvbmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMuCisKK1JlbGF0ZWQgY29tbWFuZHM6CisKKyogOmNvbW1hbmQ6YGFkZF9jb21waWxlX29wdGlvbnNgIGZvciBkaXJlY3Rvcnktd2lkZSBzZXR0aW5ncworKiA6Y29tbWFuZDpgdGFyZ2V0X2NvbXBpbGVfb3B0aW9uc2AgZm9yIHRhcmdldC1zcGVjaWZpYyBzZXR0aW5ncwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL0ZvcnRyYW5fRk9STUFULnJzdCBiL0hlbHAvcHJvcF9zZi9Gb3J0cmFuX0ZPUk1BVC5yc3QKaW5kZXggMWNiYmY0OC4uZWYzMzkyNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL0ZvcnRyYW5fRk9STUFULnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvRm9ydHJhbl9GT1JNQVQucnN0CkBAIC00LDcgKzQsOSBAQAogU2V0IHRvIGBgRklYRURgYCBvciBgYEZSRUVgYCB0byBpbmRpY2F0ZSB0aGUgRm9ydHJhbiBzb3VyY2UgbGF5b3V0LgogCiBUaGlzIHByb3BlcnR5IHRlbGxzIENNYWtlIHdoZXRoZXIgYSBnaXZlbiBGb3J0cmFuIHNvdXJjZSBmaWxlIHVzZXMKLWZpeGVkLWZvcm1hdCBvciBmcmVlLWZvcm1hdC4gIENNYWtlIHdpbGwgcGFzcyB0aGUgY29ycmVzcG9uZGluZyBmb3JtYXQKLWZsYWcgdG8gdGhlIGNvbXBpbGVyLiAgQ29uc2lkZXIgdXNpbmcgdGhlIHRhcmdldC13aWRlCi06cHJvcF90Z3Q6YEZvcnRyYW5fRk9STUFUYCBwcm9wZXJ0eSBpZiBhbGwgc291cmNlIGZpbGVzIGluIGEgdGFyZ2V0Ci1zaGFyZSB0aGUgc2FtZSBmb3JtYXQuCitmaXhlZC1mb3JtYXQgb3IgZnJlZS1mb3JtYXQuICBDTWFrZSB3aWxsIHBhc3MgdGhlIGNvcnJlc3BvbmRpbmcgZm9ybWF0IGZsYWcKK3RvIHRoZSBjb21waWxlci4gIENvbnNpZGVyIHVzaW5nIHRoZSB0YXJnZXQtd2lkZSA6cHJvcF90Z3Q6YEZvcnRyYW5fRk9STUFUYAorcHJvcGVydHkgaWYgYWxsIHNvdXJjZSBmaWxlcyBpbiBhIHRhcmdldCBzaGFyZSB0aGUgc2FtZSBmb3JtYXQuCisKKy4uIG5vdGU6OiBGb3Igc29tZSBjb21waWxlcnMsIGBgTkFHYGAsIGBgUEdJYGAgYW5kIGBgU29sYXJpcyBTdHVkaW9gYCwKKyAgICAgICAgICBzZXR0aW5nIHRoaXMgdG8gYGBPRkZgYCB3aWxsIGhhdmUgbm8gZWZmZWN0LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL0ZvcnRyYW5fUFJFUFJPQ0VTUy5yc3QgYi9IZWxwL3Byb3Bfc2YvRm9ydHJhbl9QUkVQUk9DRVNTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDhhOTdiCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3NmL0ZvcnRyYW5fUFJFUFJPQ0VTUy5yc3QKQEAgLTAsMCArMSwxOSBAQAorRm9ydHJhbl9QUkVQUk9DRVNTCistLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitDb250cm9sIHdoZXRoZXIgdGhlIEZvcnRyYW4gc291cmNlIGZpbGUgc2hvdWxkIGJlIHVuY29uZGl0aW9uYWxseSBwcmVwcm9jZXNzZWQuCisKK0lmIHVuc2V0IG9yIGVtcHR5LCByZWx5IG9uIHRoZSBjb21waWxlciB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZQorc2hvdWxkIGJlIHByZXByb2Nlc3NlZC4gSWYgZXhwbGljaXRseSBzZXQgdG8gYGBPRkZgYCB0aGVuIHRoZSBmaWxlCitkb2VzIG5vdCBuZWVkIHRvIGJlIHByZXByb2Nlc3NlZC4gSWYgZXhwbGljaXRseSBzZXQgdG8gYGBPTmBgLCB0aGVuCit0aGUgZmlsZSBkb2VzIG5lZWQgdG8gYmUgcHJlcHJvY2Vzc2VkIGFzIHBhcnQgb2YgdGhlIGNvbXBpbGF0aW9uIHN0ZXAuCisKK1doZW4gdXNpbmcgdGhlIDpnZW5lcmF0b3I6YE5pbmphYCBnZW5lcmF0b3IsIGFsbCBzb3VyY2UgZmlsZXMgYXJlCitmaXJzdCBwcmVwcm9jZXNzZWQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgbW9kdWxlIGRlcGVuZGVuY3kKK2luZm9ybWF0aW9uLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gYGBPRkZgYCB3aWxsIG1ha2UgYGBOaW5qYWBgCitza2lwIHRoaXMgc3RlcC4KKworQ29uc2lkZXIgdXNpbmcgdGhlIHRhcmdldC13aWRlIDpwcm9wX3RndDpgRm9ydHJhbl9QUkVQUk9DRVNTYCBwcm9wZXJ0eQoraWYgYWxsIHNvdXJjZSBmaWxlcyBpbiBhIHRhcmdldCBuZWVkIHRvIGJlIHByZXByb2Nlc3NlZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9HRU5FUkFURUQucnN0IGIvSGVscC9wcm9wX3NmL0dFTkVSQVRFRC5yc3QKaW5kZXggZDQzMGVlMi4uNDhmZjcwYyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL0dFTkVSQVRFRC5yc3QKKysrIGIvSGVscC9wcm9wX3NmL0dFTkVSQVRFRC5yc3QKQEAgLTQsMTYgKzQsMjkgQEAKIElzIHRoaXMgc291cmNlIGZpbGUgZ2VuZXJhdGVkIGFzIHBhcnQgb2YgdGhlIGJ1aWxkIG9yIENNYWtlIHByb2Nlc3MuCiAKIFRlbGxzIHRoZSBpbnRlcm5hbCBDTWFrZSBlbmdpbmUgdGhhdCBhIHNvdXJjZSBmaWxlIGlzIGdlbmVyYXRlZCBieSBhbiBvdXRzaWRlCi1wcm9jZXNzIHN1Y2ggYXMgYW5vdGhlciBidWlsZCBzdGVwLCBvciB0aGUgZXhlY3V0aW9uIG9mIENNYWtlIGl0c2VsZi4gVGhpcwotaW5mb3JtYXRpb24gaXMgdGhlbiB1c2VkIHRvIGV4ZW1wdCB0aGUgZmlsZSBmcm9tIGFueSBleGlzdGVuY2Ugb3IgdmFsaWRpdHkKLWNoZWNrcy4gR2VuZXJhdGVkIGZpbGVzIGFyZSBjcmVhdGVkIGJ5IHRoZSBleGVjdXRpb24gb2YgY29tbWFuZHMgc3VjaCBhcwotOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAgYW5kIDpjb21tYW5kOmBmaWxlKEdFTkVSQVRFKWAuCitwcm9jZXNzIHN1Y2ggYXMgYW5vdGhlciBidWlsZCBzdGVwLCBvciB0aGUgZXhlY3V0aW9uIG9mIENNYWtlIGl0c2VsZi4KK1RoaXMgaW5mb3JtYXRpb24gaXMgdGhlbiB1c2VkIHRvIGV4ZW1wdCB0aGUgZmlsZSBmcm9tIGFueSBleGlzdGVuY2Ugb3IKK3ZhbGlkaXR5IGNoZWNrcy4KIAotV2hlbiBhIGdlbmVyYXRlZCBmaWxlIGNyZWF0ZWQgYnkgYW4gOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAgY29tbWFuZAotaXMgZXhwbGljaXRseSBsaXN0ZWQgYXMgYSBzb3VyY2UgZmlsZSBmb3IgYW55IHRhcmdldCBpbiB0aGUgc2FtZQotZGlyZWN0b3J5IHNjb3BlICh3aGljaCB1c3VhbGx5IG1lYW5zIHRoZSBzYW1lIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlKSwKLUNNYWtlIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYSBkZXBlbmRlbmN5IHRvIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcwotZ2VuZXJhdGVkIGJlZm9yZSBidWlsZGluZyB0aGF0IHRhcmdldC4KK0FueSBmaWxlIHRoYXQgaXMKKworLSBjcmVhdGVkIGJ5IHRoZSBleGVjdXRpb24gb2YgY29tbWFuZHMgc3VjaCBhcworICA6Y29tbWFuZDpgYWRkX2N1c3RvbV9jb21tYW5kYCBhbmQgOmNvbW1hbmQ6YGZpbGUoR0VORVJBVEUpYAorLSBsaXN0ZWQgYXMgb25lIG9mIHRoZSBgYEJZUFJPRFVDVFNgYCBvZiBhbiA6Y29tbWFuZDpgYWRkX2N1c3RvbV9jb21tYW5kYAorICBvciA6Y29tbWFuZDpgYWRkX2N1c3RvbV90YXJnZXRgIGNvbW1hbmQsIG9yCistIGNyZWF0ZWQgYnkgYSBDTWFrZSBgYEFVVE9HRU5gYCBvcGVyYXRpb24gc3VjaCBhcyA6cHJvcF90Z3Q6YEFVVE9NT0NgLAorICA6cHJvcF90Z3Q6YEFVVE9SQ0NgLCBvciA6cHJvcF90Z3Q6YEFVVE9VSUNgCisKK3dpbGwgYmUgbWFya2VkIHdpdGggdGhlIGBgR0VORVJBVEVEYGAgcHJvcGVydHkuCisKK1doZW4gYSBnZW5lcmF0ZWQgZmlsZSBjcmVhdGVkIGFzIHRoZSBgYE9VVFBVVGBgIG9mIGFuCis6Y29tbWFuZDpgYWRkX2N1c3RvbV9jb21tYW5kYCBjb21tYW5kIGlzIGV4cGxpY2l0bHkgbGlzdGVkIGFzIGEgc291cmNlIGZpbGUKK2ZvciBhbnkgdGFyZ2V0IGluIHRoZSBzYW1lIGRpcmVjdG9yeSBzY29wZSAod2hpY2ggdXN1YWxseSBtZWFucyB0aGUgc2FtZQorYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGUpLCBDTWFrZSB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgZGVwZW5kZW5jeSB0bworbWFrZSBzdXJlIHRoZSBmaWxlIGlzIGdlbmVyYXRlZCBiZWZvcmUgYnVpbGRpbmcgdGhhdCB0YXJnZXQuCisKK1RoZSA6cmVmOmBNYWtlZmlsZSBHZW5lcmF0b3JzYCB3aWxsIHJlbW92ZSBgYEdFTkVSQVRFRGBgIGZpbGVzIGR1cmluZworYGBtYWtlIGNsZWFuYGAuCiAKIEdlbmVyYXRlZCBzb3VyY2VzIG1heSBiZSBoaWRkZW4gaW4gc29tZSBJREUgdG9vbHMsIHdoaWxlIGluIG90aGVycyB0aGV5IG1pZ2h0CiBiZSBzaG93bi4gRm9yIHRoZSBzcGVjaWFsIGNhc2Ugb2Ygc291cmNlcyBnZW5lcmF0ZWQgYnkgQ01ha2UncyA6cHJvcF90Z3Q6YEFVVE9NT0NgCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3Byb3Bfc2YvSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QKaW5kZXggMjNkZTcwZS4uODlmZmQxNSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL0lOQ0xVREVfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9JTkNMVURFX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIElOQ0xVREVfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBMaXN0IG9mIHByZXByb2Nlc3NvciBpbmNsdWRlIGZpbGUgc2VhcmNoIGRpcmVjdG9yaWVzLgogCiBUaGlzIHByb3BlcnR5IGhvbGRzIGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIHBhdGhzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvT0JKRUNUX09VVFBVVFMucnN0IGIvSGVscC9wcm9wX3NmL09CSkVDVF9PVVRQVVRTLnJzdAppbmRleCBlN2U4ODBiLi4zZTc5OWVkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvT0JKRUNUX09VVFBVVFMucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9PQkpFQ1RfT1VUUFVUUy5yc3QKQEAgLTcsMyArNyw2IEBACiBvZiB0aGVzZSBvdXRwdXRzIGlzIG1pc3NpbmcgdGhlIG9iamVjdCB3aWxsIGJlIHJlY29tcGlsZWQuICBUaGlzIGlzCiBzdXBwb3J0ZWQgb25seSBvbiB0aGUgOmdlbmVyYXRvcjpgTmluamFgIGFuZCA6cmVmOmBNYWtlZmlsZSBHZW5lcmF0b3JzYAogYW5kIHdpbGwgYmUgaWdub3JlZCBvbiBvdGhlciBnZW5lcmF0b3JzLgorCitUaGlzIHByb3BlcnR5IHN1cHBvcnRzCis6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1NLSVBfQVVUT0dFTi5yc3QgYi9IZWxwL3Byb3Bfc2YvU0tJUF9BVVRPR0VOLnJzdAppbmRleCBmMzExODVhLi4yMTczZjU5IDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvU0tJUF9BVVRPR0VOLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvU0tJUF9BVVRPR0VOLnJzdApAQCAtMSw2ICsxLDggQEAKIFNLSVBfQVVUT0dFTgogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBFeGNsdWRlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIDpwcm9wX3RndDpgQVVUT01PQ2AsIDpwcm9wX3RndDpgQVVUT1VJQ2AgYW5kCiA6cHJvcF90Z3Q6YEFVVE9SQ0NgIHByb2Nlc3NpbmcgKGZvciBRdCBwcm9qZWN0cykuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9TS0lQX0FVVE9NT0MucnN0IGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT01PQy5yc3QKaW5kZXggYTkyOTQ0OC4uZTkyY2ZlMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1NLSVBfQVVUT01PQy5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT01PQy5yc3QKQEAgLTEsNiArMSw4IEBACiBTS0lQX0FVVE9NT0MKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRXhjbHVkZSB0aGUgc291cmNlIGZpbGUgZnJvbSA6cHJvcF90Z3Q6YEFVVE9NT0NgIHByb2Nlc3NpbmcgKGZvciBRdCBwcm9qZWN0cykuCiAKIEZvciBicm9hZGVyIGV4Y2x1c2lvbiBjb250cm9sIHNlZSA6cHJvcF9zZjpgU0tJUF9BVVRPR0VOYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9TS0lQX0FVVE9SQ0MucnN0IGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1JDQy5yc3QKaW5kZXggYmNjY2NmYy4uMjgyOWMyNSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1JDQy5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1JDQy5yc3QKQEAgLTEsNiArMSw4IEBACiBTS0lQX0FVVE9SQ0MKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRXhjbHVkZSB0aGUgc291cmNlIGZpbGUgZnJvbSA6cHJvcF90Z3Q6YEFVVE9SQ0NgIHByb2Nlc3NpbmcgKGZvciBRdCBwcm9qZWN0cykuCiAKIEZvciBicm9hZGVyIGV4Y2x1c2lvbiBjb250cm9sIHNlZSA6cHJvcF9zZjpgU0tJUF9BVVRPR0VOYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9TS0lQX0FVVE9VSUMucnN0IGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1VJQy5yc3QKaW5kZXggOGM5NjJkYi4uYWU5NzI1YSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1VJQy5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1NLSVBfQVVUT1VJQy5yc3QKQEAgLTEsNiArMSw4IEBACiBTS0lQX0FVVE9VSUMKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRXhjbHVkZSB0aGUgc291cmNlIGZpbGUgZnJvbSA6cHJvcF90Z3Q6YEFVVE9VSUNgIHByb2Nlc3NpbmcgKGZvciBRdCBwcm9qZWN0cykuCiAKIDpwcm9wX3NmOmBTS0lQX0FVVE9VSUNgIGNhbiBiZSBzZXQgb24gQysrIGhlYWRlciBhbmQgc291cmNlIGZpbGVzIGFuZCBvbgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1NLSVBfUFJFQ09NUElMRV9IRUFERVJTLnJzdCBiL0hlbHAvcHJvcF9zZi9TS0lQX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKaW5kZXggNWYzOWYzMC4uNjYwZGUzZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1NLSVBfUFJFQ09NUElMRV9IRUFERVJTLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvU0tJUF9QUkVDT01QSUxFX0hFQURFUlMucnN0CkBAIC0xLDEzICsxLDE1IEBACiBTS0lQX1BSRUNPTVBJTEVfSEVBREVSUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBJcyB0aGlzIHNvdXJjZSBmaWxlIHNraXBwZWQgYnkgOnByb3BfdGd0OmBQUkVDT01QSUxFX0hFQURFUlNgIGZlYXR1cmUuCiAKIFRoaXMgcHJvcGVydHkgaGVscHMgd2l0aCBidWlsZCBwcm9ibGVtcyB0aGF0IG9uZSB3b3VsZCBydW4gaW50bwogd2hlbiB1c2luZyB0aGUgOnByb3BfdGd0OmBQUkVDT01QSUxFX0hFQURFUlNgIGZlYXR1cmUuCiAKLU9uZSBleGFtcGxlIHdvdWxkIGJlIHRoZSB1c2FnZSBvZiBPYmplY3RpdmUtQyAoKi5tKSBmaWxlcywgYW5kCi1PYmplY3RpdmUtQysrICgqLm1tKSBmaWxlcywgd2hpY2ggbGVhZCB0byBjb21waWxhdGlvbiBmYWlsdXJlCitPbmUgZXhhbXBsZSB3b3VsZCBiZSB0aGUgdXNhZ2Ugb2YgT2JqZWN0aXZlLUMgKGBgKi5tYGApIGZpbGVzLCBhbmQKK09iamVjdGl2ZS1DKysgKGBgKi5tbWBgKSBmaWxlcywgd2hpY2ggbGVhZCB0byBjb21waWxhdGlvbiBmYWlsdXJlCiBiZWNhdXNlIHRoZXkgYXJlIHRyZWF0ZWQgKGluIGNhc2Ugb2YgTmluamEgLyBNYWtlZmlsZSBnZW5lcmF0b3IpCiBhcyBDLCBhbmQgQ1hYIHJlc3BlY3RpdmVseS4gVGhlIHByZWNvbXBpbGUgaGVhZGVycyBhcmUgbm90CiBjb21wYXRpYmxlIGJldHdlZW4gbGFuZ3VhZ2VzLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1NLSVBfVU5JVFlfQlVJTERfSU5DTFVTSU9OLnJzdCBiL0hlbHAvcHJvcF9zZi9TS0lQX1VOSVRZX0JVSUxEX0lOQ0xVU0lPTi5yc3QKaW5kZXggNmQxZTYwZC4uYWU1MjZhYyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1NLSVBfVU5JVFlfQlVJTERfSU5DTFVTSU9OLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvU0tJUF9VTklUWV9CVUlMRF9JTkNMVVNJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogU0tJUF9VTklUWV9CVUlMRF9JTkNMVVNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogU2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIHRydWUgZW5zdXJlcyB0aGUgc291cmNlIGZpbGUgd2lsbCBiZSBza2lwcGVkIGJ5CiB1bml0eSBidWlsZHMgd2hlbiBpdHMgYXNzb2NpYXRlZCB0YXJnZXQgaGFzIGl0cyA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEYAogcHJvcGVydHkgc2V0IHRvIHRydWUuICBUaGUgc291cmNlIGZpbGUgd2lsbCBpbnN0ZWFkIGJlIGNvbXBpbGVkIG9uIGl0cyBvd24KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9Td2lmdF9ERVBFTkRFTkNJRVNfRklMRS5yc3QgYi9IZWxwL3Byb3Bfc2YvU3dpZnRfREVQRU5ERU5DSUVTX0ZJTEUucnN0CmluZGV4IGZhYWMyZGYuLmE5MGM3ZWIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9Td2lmdF9ERVBFTkRFTkNJRVNfRklMRS5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1N3aWZ0X0RFUEVOREVOQ0lFU19GSUxFLnJzdApAQCAtMSw1ICsxLDcgQEAKIFN3aWZ0X0RFUEVOREVOQ0lFU19GSUxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIFRoaXMgcHJvcGVydHkgc2V0cyB0aGUgcGF0aCBmb3IgdGhlIFN3aWZ0IGRlcGVuZGVuY3kgZmlsZSAoc3dpZnRkZXBzKSBmb3IgdGhlCiBzb3VyY2UuICBJZiBvbmUgaXMgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBkZWZhdWx0IHRvIGBgPE9CSkVDVD4uc3dpZnRkZXBzYGAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvU3dpZnRfRElBR05PU1RJQ1NfRklMRS5yc3QgYi9IZWxwL3Byb3Bfc2YvU3dpZnRfRElBR05PU1RJQ1NfRklMRS5yc3QKaW5kZXggNWJmNWQ1OS4uNDdkNWFjMyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1N3aWZ0X0RJQUdOT1NUSUNTX0ZJTEUucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9Td2lmdF9ESUFHTk9TVElDU19GSUxFLnJzdApAQCAtMSw0ICsxLDYgQEAKIFN3aWZ0X0RJQUdOT1NUSUNTX0ZJTEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHdoZXJlIHRoZSBTd2lmdCBkaWFnbm9zdGljcyBhcmUgc2VyaWFsaXplZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9VTklUWV9HUk9VUC5yc3QgYi9IZWxwL3Byb3Bfc2YvVU5JVFlfR1JPVVAucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMThiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3Bfc2YvVU5JVFlfR1JPVVAucnN0CkBAIC0wLDAgKzEsNyBAQAorVU5JVFlfR1JPVVAKKy0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworVGhpcyBwcm9wZXJ0eSBjb250cm9scyB3aGljaCAqYnVja2V0KiB0aGUgc291cmNlIHdpbGwgYmUgcGFydCBvZiB3aGVuCit0aGUgOnByb3BfdGd0OmBVTklUWV9CVUlMRF9NT0RFYCBpcyBzZXQgdG8gYGBHUk9VUGBgLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX0NPUFlfVE9fT1VUX0RJUi5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfQ09QWV9UT19PVVRfRElSLnJzdAppbmRleCAxNmM4ZDgzLi5lYmMzMDYxIDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvVlNfQ09QWV9UT19PVVRfRElSLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfQ09QWV9UT19PVVRfRElSLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX0NPUFlfVE9fT1VUX0RJUgogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBTZXRzIHRoZSBgYDxDb3B5VG9PdXRwdXREaXJlY3Rvcnk+YGAgdGFnIGZvciBhIHNvdXJjZSBmaWxlIGluIGEKIFZpc3VhbCBTdHVkaW8gcHJvamVjdCBmaWxlLiBWYWxpZCB2YWx1ZXMgYXJlIGBgTmV2ZXJgYCwgYGBBbHdheXNgYAogYW5kIGBgUHJlc2VydmVOZXdlc3RgYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19DU0hBUlBfdGFnbmFtZS5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfQ1NIQVJQX3RhZ25hbWUucnN0CmluZGV4IDkxYzRhMDYuLjc1NzIwZjggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19DU0hBUlBfdGFnbmFtZS5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX0NTSEFSUF90YWduYW1lLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX0NTSEFSUF88dGFnbmFtZT4KIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFZpc3VhbCBTdHVkaW8gYW5kIENTaGFycCBzb3VyY2UtZmlsZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLgogCiBUZWxsIHRoZSA6bWFudWFsOmBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvcnMgPGNtYWtlLWdlbmVyYXRvcnMoNyk+YApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfQ09OVEVOVC5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfREVQTE9ZTUVOVF9DT05URU5ULnJzdAppbmRleCA2YTM4NDc4Li5lZTQ5YjI3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvVlNfREVQTE9ZTUVOVF9DT05URU5ULnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfREVQTE9ZTUVOVF9DT05URU5ULnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX0RFUExPWU1FTlRfQ09OVEVOVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBNYXJrIGEgc291cmNlIGZpbGUgYXMgY29udGVudCBmb3IgZGVwbG95bWVudCB3aXRoIGEgV2luZG93cyBQaG9uZSBvcgogV2luZG93cyBTdG9yZSBhcHBsaWNhdGlvbiB3aGVuIGJ1aWx0IHdpdGggYQogOm1hbnVhbDpgVmlzdWFsIFN0dWRpbyBnZW5lcmF0b3JzIDxjbWFrZS1nZW5lcmF0b3JzKDcpPmAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfREVQTE9ZTUVOVF9MT0NBVElPTi5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfREVQTE9ZTUVOVF9MT0NBVElPTi5yc3QKaW5kZXggMmNlMjJmYy4uYjE3MDU0NCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX0RFUExPWU1FTlRfTE9DQVRJT04ucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19ERVBMT1lNRU5UX0xPQ0FUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX0RFUExPWU1FTlRfTE9DQVRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZmllcyB0aGUgZGVwbG95bWVudCBsb2NhdGlvbiBmb3IgYSBjb250ZW50IHNvdXJjZSBmaWxlIHdpdGggYSBXaW5kb3dzCiBQaG9uZSBvciBXaW5kb3dzIFN0b3JlIGFwcGxpY2F0aW9uIHdoZW4gYnVpbHQKIHdpdGggYSA6bWFudWFsOmBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvcnMgPGNtYWtlLWdlbmVyYXRvcnMoNyk+YC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19JTkNMVURFX0lOX1ZTSVgucnN0IGIvSGVscC9wcm9wX3NmL1ZTX0lOQ0xVREVfSU5fVlNJWC5yc3QKaW5kZXggZGI0NzBlZi4uMTZjNTZiZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX0lOQ0xVREVfSU5fVlNJWC5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX0lOQ0xVREVfSU5fVlNJWC5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19JTkNMVURFX0lOX1ZTSVgKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogQm9vbGVhbiBwcm9wZXJ0eSB0byBzcGVjaWZ5IGlmIHRoZSBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCB3aXRoaW4gYQogVlNJWCAoVmlzdWFsIFN0dWRpbyBJbnRlZ3JhdGlvbiBFeHRlbnNpb24pIGV4dGVuc2lvbiBwYWNrYWdlLgogVGhpcyBpcyBuZWVkZWQgZm9yIGRldmVsb3BtZW50IG9mIFZpc3VhbCBTdHVkaW8gZXh0ZW5zaW9ucy4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19SRVNPVVJDRV9HRU5FUkFUT1IucnN0IGIvSGVscC9wcm9wX3NmL1ZTX1JFU09VUkNFX0dFTkVSQVRPUi5yc3QKaW5kZXggOTdlNWFhYy4uYzViYjRmNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX1JFU09VUkNFX0dFTkVSQVRPUi5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX1JFU09VUkNFX0dFTkVSQVRPUi5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19SRVNPVVJDRV9HRU5FUkFUT1IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogVGhpcyBwcm9wZXJ0eSBhbGxvd3MgdG8gc3BlY2lmeSB0aGUgcmVzb3VyY2UgZ2VuZXJhdG9yIHRvIGJlIHVzZWQKIG9uIHRoaXMgZmlsZS4gSXQgZGVmYXVsdHMgdG8gYGBQdWJsaWNSZXNYRmlsZUNvZGVHZW5lcmF0b3JgYCBpZgogbm90IHNldC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19TRVRUSU5HUy5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0VUVElOR1MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMmY1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfU0VUVElOR1MucnN0CkBAIC0wLDAgKzEsMjAgQEAKK1ZTX1NFVFRJTkdTCistLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK1NldCBhbnkgaXRlbSBtZXRhZGF0YSBvbiBhIG5vbi1idWlsdCBmaWxlLgorCitUYWtlcyBhIGxpc3Qgb2YgYGBLZXk9VmFsdWVgYCBwYWlycy4gVGVsbHMgdGhlIFZpc3VhbCBTdHVkaW8gZ2VuZXJhdG9yIHRvIHNldAorYGBLZXlgYCB0byBgYFZhbHVlYGAgYXMgaXRlbSBtZXRhZGF0YSBvbiB0aGUgZmlsZS4KKworRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldF9wcm9wZXJ0eShTT1VSQ0UgZmlsZS5obHNsIFBST1BFUlRZIFZTX1NFVFRJTkdTICJLZXk9VmFsdWUiICJLZXkyPVZhbHVlMiIpCisKK3dpbGwgc2V0IGBgS2V5YGAgdG8gYGBWYWx1ZWBgIGFuZCBgYEtleTJgYCB0byBgYFZhbHVlMmBgIG9uIHRoZQorYGBmaWxlLmhsc2xgYCBpdGVtIGFzIG1ldGFkYXRhLgorCis6bWFudWFsOmBHZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIGFyZSBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0RJU0FCTEVfT1BUSU1JWkFUSU9OUy5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0RJU0FCTEVfT1BUSU1JWkFUSU9OUy5yc3QKaW5kZXggNDQ2ZGQyNi4uNmZiNjc3OCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9ESVNBQkxFX09QVElNSVpBVElPTlMucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRElTQUJMRV9PUFRJTUlaQVRJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX1NIQURFUl9ESVNBQkxFX09QVElNSVpBVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBEaXNhYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgZm9yIGFuIGBgLmhsc2xgYCBzb3VyY2UgZmlsZS4gIFRoaXMgYWRkcyB0aGUKIGBgLU9kYGAgZmxhZyB0byB0aGUgY29tbWFuZCBsaW5lIGZvciB0aGUgRnhDb21waWxlciB0b29sLiAgU3BlY2lmeSB0aGUgdmFsdWUKIGBgdHJ1ZWBgIGZvciB0aGlzIHByb3BlcnR5IHRvIGRpc2FibGUgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRU5BQkxFX0RFQlVHLnJzdCBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRU5BQkxFX0RFQlVHLnJzdAppbmRleCBjMGU2MGEzLi45YzhmOWQ3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0VOQUJMRV9ERUJVRy5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9FTkFCTEVfREVCVUcucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfU0hBREVSX0VOQUJMRV9ERUJVRwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIEVuYWJsZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGFuIGBgLmhsc2xgYCBzb3VyY2UgZmlsZS4gIFRoaXMgYWRkcyB0aGUKIGBgLVppYGAgZmxhZyB0byB0aGUgY29tbWFuZCBsaW5lIGZvciB0aGUgRnhDb21waWxlciB0b29sLiAgU3BlY2lmeSB0aGUgdmFsdWUKIGBgdHJ1ZWBgIHRvIGdlbmVyYXRlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbXBpbGVkIHNoYWRlci4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRU5UUllQT0lOVC5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0VOVFJZUE9JTlQucnN0CmluZGV4IGZlMzQ3MWYuLjRiMzExYmEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRU5UUllQT0lOVC5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9FTlRSWVBPSU5ULnJzdApAQCAtMSw1ICsxLDcgQEAKIFZTX1NIQURFUl9FTlRSWVBPSU5UCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHNoYWRlciBvZiBhIGBgLmhsc2xgYCBzb3VyY2UKIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX0ZMQUdTLnJzdCBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRkxBR1MucnN0CmluZGV4IDBhNTNhZmQuLjA3Zjg0OTcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRkxBR1MucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfRkxBR1MucnN0CkBAIC0xLDQgKzEsNiBAQAogVlNfU0hBREVSX0ZMQUdTCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIFNldCBhZGRpdGlvbmFsIFZpc3VhbCBTdHVkaW8gc2hhZGVyIGZsYWdzIG9mIGEgYGAuaGxzbGBgIHNvdXJjZSBmaWxlLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9NT0RFTC5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX01PREVMLnJzdAppbmRleCBiMWNmMGRmLi4wNzJkZjg5IDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX01PREVMLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX01PREVMLnJzdApAQCAtMSw1ICsxLDcgQEAKIFZTX1NIQURFUl9NT0RFTAogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZpZXMgdGhlIHNoYWRlciBtb2RlbCBvZiBhIGBgLmhsc2xgYCBzb3VyY2UgZmlsZS4gU29tZSBzaGFkZXIgdHlwZXMgY2FuCiBvbmx5IGJlIHVzZWQgd2l0aCByZWNlbnQgc2hhZGVyIG1vZGVscwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9PQkpFQ1RfRklMRV9OQU1FLnJzdCBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfT0JKRUNUX0ZJTEVfTkFNRS5yc3QKaW5kZXggMDkzYmNjNi4uMzY0N2E1ZSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9PQkpFQ1RfRklMRV9OQU1FLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX09CSkVDVF9GSUxFX05BTUUucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfU0hBREVSX09CSkVDVF9GSUxFX05BTUUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogU3BlY2lmaWVzIGEgZmlsZSBuYW1lIGZvciB0aGUgY29tcGlsZWQgc2hhZGVyIG9iamVjdCBmaWxlIGZvciBhbiBgYC5obHNsYGAKIHNvdXJjZSBmaWxlLiAgVGhpcyBhZGRzIHRoZSBgYC1Gb2BgIGZsYWcgdG8gdGhlIGNvbW1hbmQgbGluZSBmb3IgdGhlIEZ4Q29tcGlsZXIKIHRvb2wuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX09VVFBVVF9IRUFERVJfRklMRS5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX09VVFBVVF9IRUFERVJfRklMRS5yc3QKaW5kZXggZTY3NjNkMy4uNDExM2ExNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9PVVRQVVRfSEVBREVSX0ZJTEUucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfT1VUUFVUX0hFQURFUl9GSUxFLnJzdApAQCAtMSw1ICsxLDcgQEAKIFZTX1NIQURFUl9PVVRQVVRfSEVBREVSX0ZJTEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBTZXQgZmlsZW5hbWUgZm9yIG91dHB1dCBoZWFkZXIgZmlsZSBjb250YWluaW5nIG9iamVjdCBjb2RlIG9mIGEgYGAuaGxzbGBgCiBzb3VyY2UgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfVFlQRS5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX1RZUEUucnN0CmluZGV4IGYxMDQ4MzcuLjNmYjdlNjAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfVFlQRS5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9UWVBFLnJzdApAQCAtMSw0ICsxLDYgQEAKIFZTX1NIQURFUl9UWVBFCiAtLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU2V0IHRoZSBWaXN1YWwgU3R1ZGlvIHNoYWRlciB0eXBlIG9mIGEgYGAuaGxzbGBgIHNvdXJjZSBmaWxlLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9WQVJJQUJMRV9OQU1FLnJzdCBiL0hlbHAvcHJvcF9zZi9WU19TSEFERVJfVkFSSUFCTEVfTkFNRS5yc3QKaW5kZXggMWE1ZTM2OS4uMzM2MWI0MCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX1NIQURFUl9WQVJJQUJMRV9OQU1FLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvVlNfU0hBREVSX1ZBUklBQkxFX05BTUUucnN0CkBAIC0xLDUgKzEsNyBAQAogVlNfU0hBREVSX1ZBUklBQkxFX05BTUUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogU2V0IG5hbWUgb2YgdmFyaWFibGUgaW4gaGVhZGVyIGZpbGUgY29udGFpbmluZyBvYmplY3QgY29kZSBvZiBhIGBgLmhsc2xgYAogc291cmNlIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3Bfc2YvVlNfVE9PTF9PVkVSUklERS5yc3QgYi9IZWxwL3Byb3Bfc2YvVlNfVE9PTF9PVkVSUklERS5yc3QKaW5kZXggOGJkYzVjYS4uYjJmNDExMiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX1RPT0xfT1ZFUlJJREUucnN0CisrKyBiL0hlbHAvcHJvcF9zZi9WU19UT09MX09WRVJSSURFLnJzdApAQCAtMSw1ICsxLDcgQEAKIFZTX1RPT0xfT1ZFUlJJREUKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIE92ZXJyaWRlIHRoZSBkZWZhdWx0IFZpc3VhbCBTdHVkaW8gdG9vbCB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgc291cmNlIGZpbGUKIHdpdGggYSBuZXcgdG9vbCBub3QgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9WU19YQU1MX1RZUEUucnN0IGIvSGVscC9wcm9wX3NmL1ZTX1hBTUxfVFlQRS5yc3QKaW5kZXggMWEyNzRiYS4uNjEyYjA3YiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3NmL1ZTX1hBTUxfVFlQRS5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1ZTX1hBTUxfVFlQRS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19YQU1MX1RZUEUKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogTWFyayBhIEV4dGVuc2libGUgQXBwbGljYXRpb24gTWFya3VwIExhbmd1YWdlIChYQU1MKSBzb3VyY2UgZmlsZQogYXMgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBkZWZhdWx0IGBgUGFnZWBgLgogVGhlIG1vc3QgY29tbW9uIHVzYWdlIHdvdWxkIGJlIHRvIHNldCB0aGUgZGVmYXVsdCBgYEFwcC54YW1sYGAgZmlsZSBhcwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1hDT0RFX0VYUExJQ0lUX0ZJTEVfVFlQRS5yc3QgYi9IZWxwL3Byb3Bfc2YvWENPREVfRVhQTElDSVRfRklMRV9UWVBFLnJzdAppbmRleCBiOGNmOTQ2Li41YTUwZDdkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvWENPREVfRVhQTElDSVRfRklMRV9UWVBFLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvWENPREVfRVhQTElDSVRfRklMRV9UWVBFLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX0VYUExJQ0lUX0ZJTEVfVFlQRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTZXQgdGhlIDpnZW5lcmF0b3I6YFhjb2RlYCBgYGV4cGxpY2l0RmlsZVR5cGVgYCBhdHRyaWJ1dGUgb24gaXRzIHJlZmVyZW5jZSB0byBhCiBzb3VyY2UgZmlsZS4gIENNYWtlIGNvbXB1dGVzIGEgZGVmYXVsdCBiYXNlZCBvbiBmaWxlIGV4dGVuc2lvbiBidXQKIGNhbiBiZSB0b2xkIGV4cGxpY2l0bHkgd2l0aCB0aGlzIHByb3BlcnR5LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3NmL1hDT0RFX0ZJTEVfQVRUUklCVVRFUy5yc3QgYi9IZWxwL3Byb3Bfc2YvWENPREVfRklMRV9BVFRSSUJVVEVTLnJzdAppbmRleCA0YzkzZjQ0Li5iYTUxZTAwIDEwMDY0NAotLS0gYS9IZWxwL3Byb3Bfc2YvWENPREVfRklMRV9BVFRSSUJVVEVTLnJzdAorKysgYi9IZWxwL3Byb3Bfc2YvWENPREVfRklMRV9BVFRSSUJVVEVTLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX0ZJTEVfQVRUUklCVVRFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBBZGQgdmFsdWVzIHRvIHRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgYGBBVFRSSUJVVEVTYGAgc2V0dGluZyBvbiBpdHMgcmVmZXJlbmNlIHRvIGEKIHNvdXJjZSBmaWxlLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgcm9sZSBvbgogYSBgYC5taWdgYCBmaWxlOjoKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF9zZi9YQ09ERV9MQVNUX0tOT1dOX0ZJTEVfVFlQRS5yc3QgYi9IZWxwL3Byb3Bfc2YvWENPREVfTEFTVF9LTk9XTl9GSUxFX1RZUEUucnN0CmluZGV4IGIyMTg5MWYuLjBiODRlMzEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF9zZi9YQ09ERV9MQVNUX0tOT1dOX0ZJTEVfVFlQRS5yc3QKKysrIGIvSGVscC9wcm9wX3NmL1hDT0RFX0xBU1RfS05PV05fRklMRV9UWVBFLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX0xBU1RfS05PV05fRklMRV9UWVBFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU2V0IHRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgYGBsYXN0S25vd25GaWxlVHlwZWBgIGF0dHJpYnV0ZSBvbiBpdHMgcmVmZXJlbmNlIHRvCiBhIHNvdXJjZSBmaWxlLiAgQ01ha2UgY29tcHV0ZXMgYSBkZWZhdWx0IGJhc2VkIG9uIGZpbGUgZXh0ZW5zaW9uIGJ1dAogY2FuIGJlIHRvbGQgZXhwbGljaXRseSB3aXRoIHRoaXMgcHJvcGVydHkuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGVzdC9ERVBFTkRTLnJzdCBiL0hlbHAvcHJvcF90ZXN0L0RFUEVORFMucnN0CmluZGV4IDg5Yzc1NTMuLjVhYTM2YjQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90ZXN0L0RFUEVORFMucnN0CisrKyBiL0hlbHAvcHJvcF90ZXN0L0RFUEVORFMucnN0CkBAIC04LDMgKzgsMTUgQEAKIHB1cmVseSBmb3Igb3JkZXIgb2YgZXhlY3V0aW9uIChpLmUuIGl0IGlzIHJlYWxseSBqdXN0IGEgKnJ1biBhZnRlcioKIHJlbGF0aW9uc2hpcCkuIENvbnNpZGVyIHVzaW5nIHRlc3QgZml4dHVyZXMgd2l0aCBzZXR1cCB0ZXN0cyBpZiBhIGRlcGVuZGVuY3kKIHdpdGggc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIGlzIHJlcXVpcmVkIChzZWUgOnByb3BfdGVzdDpgRklYVFVSRVNfUkVRVUlSRURgKS4KKworRXhhbXBsZXMKK35+fn5+fn5+CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGFkZF90ZXN0KE5BTUUgYmFzZVRlc3QxIC4uLikKKyAgYWRkX3Rlc3QoTkFNRSBiYXNlVGVzdDIgLi4uKQorICBhZGRfdGVzdChOQU1FIGRlcGVuZHNUZXN0MTIgLi4uKQorCisgIHNldF90ZXN0c19wcm9wZXJ0aWVzKGRlcGVuZHNUZXN0MTIgUFJPUEVSVElFUyBERVBFTkRTICJiYXNlVGVzdDE7YmFzZVRlc3QyIikKKyAgIyBkZXBlbmRzVGVzdDEyIHJ1bnMgYWZ0ZXIgYmFzZVRlc3QxIGFuZCBiYXNlVGVzdDIsIGV2ZW4gaWYgdGhleSBmYWlsCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGVzdC9ESVNBQkxFRC5yc3QgYi9IZWxwL3Byb3BfdGVzdC9ESVNBQkxFRC5yc3QKaW5kZXggMWQ0NjllOC4uY2JmMDdhNSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3Rlc3QvRElTQUJMRUQucnN0CisrKyBiL0hlbHAvcHJvcF90ZXN0L0RJU0FCTEVELnJzdApAQCAtMSw2ICsxLDggQEAKIERJU0FCTEVECiAtLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogSWYgc2V0IHRvIGBgVHJ1ZWBgLCB0aGUgdGVzdCB3aWxsIGJlIHNraXBwZWQgYW5kIGl0cyBzdGF0dXMgd2lsbCBiZSAnTm90IFJ1bicuIEEKIGBgRElTQUJMRURgYCB0ZXN0IHdpbGwgbm90IGJlIGNvdW50ZWQgaW4gdGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBhbmQgaXRzCiBjb21wbGV0aW9uIHN0YXR1cyB3aWxsIGJlIHJlcG9ydGVkIHRvIENEYXNoIGFzIGBgRGlzYWJsZWRgYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX0NMRUFOVVAucnN0IGIvSGVscC9wcm9wX3Rlc3QvRklYVFVSRVNfQ0xFQU5VUC5yc3QKaW5kZXggMzA3NWI0ZC4uYWEwNDNkYSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3Rlc3QvRklYVFVSRVNfQ0xFQU5VUC5yc3QKKysrIGIvSGVscC9wcm9wX3Rlc3QvRklYVFVSRVNfQ0xFQU5VUC5yc3QKQEAgLTEsNiArMSw4IEBACiBGSVhUVVJFU19DTEVBTlVQCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBTcGVjaWZpZXMgYSBsaXN0IG9mIGZpeHR1cmVzIGZvciB3aGljaCB0aGUgdGVzdCBpcyB0byBiZSB0cmVhdGVkIGFzIGEgY2xlYW51cAogdGVzdC4gVGhlc2UgZml4dHVyZSBuYW1lcyBhcmUgZGlzdGluY3QgZnJvbSB0ZXN0IGNhc2UgbmFtZXMgYW5kIGFyZSBub3QKIHJlcXVpcmVkIHRvIGhhdmUgYW55IHNpbWlsYXJpdHkgdG8gdGhlIG5hbWVzIG9mIHRlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3Rlc3QvRklYVFVSRVNfUkVRVUlSRUQucnN0IGIvSGVscC9wcm9wX3Rlc3QvRklYVFVSRVNfUkVRVUlSRUQucnN0CmluZGV4IGUzZjYwYzQuLmQ5MjgwOGEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX1JFUVVJUkVELnJzdAorKysgYi9IZWxwL3Byb3BfdGVzdC9GSVhUVVJFU19SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBGSVhUVVJFU19SRVFVSVJFRAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFNwZWNpZmllcyBhIGxpc3Qgb2YgZml4dHVyZXMgdGhlIHRlc3QgcmVxdWlyZXMuIEZpeHR1cmUgbmFtZXMgYXJlIGNhc2UKIHNlbnNpdGl2ZSBhbmQgdGhleSBhcmUgbm90IHJlcXVpcmVkIHRvIGhhdmUgYW55IHNpbWlsYXJpdHkgdG8gdGVzdCBuYW1lcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3Rlc3QvRklYVFVSRVNfU0VUVVAucnN0IGIvSGVscC9wcm9wX3Rlc3QvRklYVFVSRVNfU0VUVVAucnN0CmluZGV4IGZkYjIxY2MuLjA0YTA5ZDggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90ZXN0L0ZJWFRVUkVTX1NFVFVQLnJzdAorKysgYi9IZWxwL3Byb3BfdGVzdC9GSVhUVVJFU19TRVRVUC5yc3QKQEAgLTEsNiArMSw4IEBACiBGSVhUVVJFU19TRVRVUAogLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFNwZWNpZmllcyBhIGxpc3Qgb2YgZml4dHVyZXMgZm9yIHdoaWNoIHRoZSB0ZXN0IGlzIHRvIGJlIHRyZWF0ZWQgYXMgYSBzZXR1cAogdGVzdC4gVGhlc2UgZml4dHVyZSBuYW1lcyBhcmUgZGlzdGluY3QgZnJvbSB0ZXN0IGNhc2UgbmFtZXMgYW5kIGFyZSBub3QKIHJlcXVpcmVkIHRvIGhhdmUgYW55IHNpbWlsYXJpdHkgdG8gdGhlIG5hbWVzIG9mIHRlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3Rlc3QvUFJPQ0VTU09SX0FGRklOSVRZLnJzdCBiL0hlbHAvcHJvcF90ZXN0L1BST0NFU1NPUl9BRkZJTklUWS5yc3QKaW5kZXggMzhlYzE3OS4uZjQ4YTY5YyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3Rlc3QvUFJPQ0VTU09SX0FGRklOSVRZLnJzdAorKysgYi9IZWxwL3Byb3BfdGVzdC9QUk9DRVNTT1JfQUZGSU5JVFkucnN0CkBAIC0xLDYgKzEsOCBAQAogUFJPQ0VTU09SX0FGRklOSVRZCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBTZXQgdG8gYSB0cnVlIHZhbHVlIHRvIGFzayBDVGVzdCB0byBsYXVuY2ggdGhlIHRlc3QgcHJvY2VzcyB3aXRoIENQVSBhZmZpbml0eQogZm9yIGEgZml4ZWQgc2V0IG9mIHByb2Nlc3NvcnMuICBJZiBlbmFibGVkIGFuZCBzdXBwb3J0ZWQgZm9yIHRoZSBjdXJyZW50CiBwbGF0Zm9ybSwgQ1Rlc3Qgd2lsbCBjaG9vc2UgYSBzZXQgb2YgcHJvY2Vzc29ycyB0byBwbGFjZSBpbiB0aGUgQ1BVIGFmZmluaXR5CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGVzdC9SRVFVSVJFRF9GSUxFUy5yc3QgYi9IZWxwL3Byb3BfdGVzdC9SRVFVSVJFRF9GSUxFUy5yc3QKaW5kZXggZmFjMzU3Yy4uYmFmMjA5YyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3Rlc3QvUkVRVUlSRURfRklMRVMucnN0CisrKyBiL0hlbHAvcHJvcF90ZXN0L1JFUVVJUkVEX0ZJTEVTLnJzdApAQCAtMSw3ICsxLDM4IEBACiBSRVFVSVJFRF9GSUxFUwogLS0tLS0tLS0tLS0tLS0KIAotTGlzdCBvZiBmaWxlcyByZXF1aXJlZCB0byBydW4gdGhlIHRlc3QuCitMaXN0IG9mIGZpbGVzIHJlcXVpcmVkIHRvIHJ1biB0aGUgdGVzdC4gIFRoZSBmaWxlbmFtZXMgYXJlIHJlbGF0aXZlIHRvIHRoZQordGVzdCA6cHJvcF90ZXN0OmBXT1JLSU5HX0RJUkVDVE9SWWAgdW5sZXNzIGFuIGFic29sdXRlIHBhdGggaXMgc3BlY2lmaWVkLgogCiBJZiBzZXQgdG8gYSBsaXN0IG9mIGZpbGVzLCB0aGUgdGVzdCB3aWxsIG5vdCBiZSBydW4gdW5sZXNzIGFsbCBvZiB0aGUKIGZpbGVzIGV4aXN0LgorCitFeGFtcGxlcworfn5+fn5+fn4KKworU3VwcG9zZSB0aGF0IGBgdGVzdC50eHRgYCBpcyBjcmVhdGVkIGJ5IHRlc3QgYGBiYXNlVGVzdGBgIGFuZCBgYG5vbmUudHh0YGAKK2RvZXMgbm90IGV4aXN0OgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBhZGRfdGVzdChOQU1FIGJhc2VUZXN0IC4uLikgICAjIEFzc3VtZWQgdG8gY3JlYXRlIHRlc3QudHh0CisgIGFkZF90ZXN0KE5BTUUgZmlsZVRlc3QgLi4uKQorCisgICMgVGhlIGZvbGxvd2luZyBlbnN1cmVzIHRoYXQgaWYgYmFzZVRlc3QgaXMgc3VjY2Vzc2Z1bCwgdGVzdC50eHQgd2lsbAorICAjIGhhdmUgYmVlbiBjcmVhdGVkIGJlZm9yZSBmaWxlVGVzdCBpcyBydW4KKyAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoZmlsZVRlc3QgUFJPUEVSVElFUworICAgIERFUEVORFMgYmFzZVRlc3QKKyAgICBSRVFVSVJFRF9GSUxFUyB0ZXN0LnR4dAorICApCisKKyAgYWRkX3Rlc3QoTkFNRSBub3RSdW5UZXN0IC4uLikKKworICAjIFRoZSBmb2xsb3dpbmcgbWFrZXMgbm90UnVuVGVzdCBkZXBlbmQgb24gdHdvIGZpbGVzLiBOb3RoaW5nIGNyZWF0ZXMKKyAgIyB0aGUgbm9uZS50eHQgZmlsZSwgc28gbm90UnVuVGVzdCB3aWxsIGZhaWwgd2l0aCBzdGF0dXMgIk5vdCBSdW4iLgorICBzZXRfdGVzdHNfcHJvcGVydGllcyhub3RSdW5UZXN0IFBST1BFUlRJRVMKKyAgICBSRVFVSVJFRF9GSUxFUyAidGVzdC50eHQ7bm9uZS50eHQiCisgICkKKworVGhlIGFib3ZlIGV4YW1wbGUgZGVtb25zdHJhdGVzIGhvdyBgYFJFUVVJUkVEX0ZJTEVTYGAgd29ya3MsIGJ1dCBpdCBpcyBub3QgdGhlCittb3N0IHJvYnVzdCB3YXkgdG8gaW1wbGVtZW50IHRlc3Qgb3JkZXJpbmcgd2l0aCBmYWlsdXJlIGRldGVjdGlvbi4gIEZvciB0aGF0LAordGVzdCBmaXh0dXJlcyBhcmUgYSBiZXR0ZXIgYWx0ZXJuYXRpdmUgKHNlZSA6cHJvcF90ZXN0OmBGSVhUVVJFU19SRVFVSVJFRGApLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3Rlc3QvUkVTT1VSQ0VfR1JPVVBTLnJzdCBiL0hlbHAvcHJvcF90ZXN0L1JFU09VUkNFX0dST1VQUy5yc3QKaW5kZXggNjNjNTZjZS4uMjZjOGZhMiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3Rlc3QvUkVTT1VSQ0VfR1JPVVBTLnJzdAorKysgYi9IZWxwL3Byb3BfdGVzdC9SRVNPVVJDRV9HUk9VUFMucnN0CkBAIC0xLDYgKzEsOCBAQAogUkVTT1VSQ0VfR1JPVVBTCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBTcGVjaWZ5IHJlc291cmNlcyByZXF1aXJlZCBieSBhIHRlc3QsIGdyb3VwZWQgaW4gYSB3YXkgdGhhdCBpcyBtZWFuaW5nZnVsIHRvCiB0aGUgdGVzdC4gIFNlZSA6cmVmOmByZXNvdXJjZSBhbGxvY2F0aW9uIDxjdGVzdC1yZXNvdXJjZS1hbGxvY2F0aW9uPmAKIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHByb3BlcnR5IGludGVncmF0ZXMgaW50byB0aGUgQ1Rlc3QgcmVzb3VyY2UKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90ZXN0L1NLSVBfUkVHVUxBUl9FWFBSRVNTSU9OLnJzdCBiL0hlbHAvcHJvcF90ZXN0L1NLSVBfUkVHVUxBUl9FWFBSRVNTSU9OLnJzdAppbmRleCAyYzZkOTgwLi40NmM0MzYzIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGVzdC9TS0lQX1JFR1VMQVJfRVhQUkVTU0lPTi5yc3QKKysrIGIvSGVscC9wcm9wX3Rlc3QvU0tJUF9SRUdVTEFSX0VYUFJFU1NJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogU0tJUF9SRUdVTEFSX0VYUFJFU1NJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogSWYgdGhlIG91dHB1dCBtYXRjaGVzIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHRoZSB0ZXN0IHdpbGwgYmUgbWFya2VkIGFzIHNraXBwZWQuCiAKIElmIHNldCwgaWYgdGhlIG91dHB1dCBtYXRjaGVzIG9uZSBvZiBzcGVjaWZpZWQgcmVndWxhciBleHByZXNzaW9ucywKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90ZXN0L1RJTUVPVVRfQUZURVJfTUFUQ0gucnN0IGIvSGVscC9wcm9wX3Rlc3QvVElNRU9VVF9BRlRFUl9NQVRDSC5yc3QKaW5kZXggZDYwNzk5Mi4uNzI2ZGNhYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3Rlc3QvVElNRU9VVF9BRlRFUl9NQVRDSC5yc3QKKysrIGIvSGVscC9wcm9wX3Rlc3QvVElNRU9VVF9BRlRFUl9NQVRDSC5yc3QKQEAgLTEsNiArMSw4IEBACiBUSU1FT1VUX0FGVEVSX01BVENICiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNgorCiBDaGFuZ2UgYSB0ZXN0J3MgdGltZW91dCBkdXJhdGlvbiBhZnRlciBhIG1hdGNoaW5nIGxpbmUgaXMgZW5jb3VudGVyZWQKIGluIGl0cyBvdXRwdXQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQURESVRJT05BTF9DTEVBTl9GSUxFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FERElUSU9OQUxfQ0xFQU5fRklMRVMucnN0CmluZGV4IDNiOWQ5NjUuLmRjODdkMjMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQURESVRJT05BTF9DTEVBTl9GSUxFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BRERJVElPTkFMX0NMRUFOX0ZJTEVTLnJzdApAQCAtMSw2ICsxLDggQEAKIEFERElUSU9OQUxfQ0xFQU5fRklMRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBBIDpyZWY6YDstbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBvZiBmaWxlcyBvciBkaXJlY3RvcmllcyB0aGF0IHdpbGwgYmUKIHJlbW92ZWQgYXMgYSBwYXJ0IG9mIHRoZSBnbG9iYWwgYGBjbGVhbmBgIHRhcmdldC4gIEl0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IGFyZSBnZW5lcmF0ZWQgYXMgcGFydCBvZiBidWlsZGluZyB0aGUgdGFyZ2V0IG9yCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FJWF9FWFBPUlRfQUxMX1NZTUJPTFMucnN0IGIvSGVscC9wcm9wX3RndC9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTk4ZmRmCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdApAQCAtMCwwICsxLDE0IEBACitBSVhfRVhQT1JUX0FMTF9TWU1CT0xTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworT24gQUlYLCBDTWFrZSBhdXRvbWF0aWNhbGx5IGV4cG9ydHMgYWxsIHN5bWJvbHMgZnJvbSBzaGFyZWQgbGlicmFyaWVzLCBhbmQKK2Zyb20gZXhlY3V0YWJsZXMgd2l0aCB0aGUgOnByb3BfdGd0OmBFTkFCTEVfRVhQT1JUU2AgdGFyZ2V0IHByb3BlcnR5IHNldC4KK0V4cGxpY2l0bHkgZGlzYWJsZSB0aGlzIGJvb2xlYW4gcHJvcGVydHkgdG8gc3VwcHJlc3MgdGhlIGJlaGF2aW9yIGFuZAorZXhwb3J0IG5vIHN5bWJvbHMgYnkgZGVmYXVsdC4gIEluIHRoaXMgY2FzZSBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBwcm9qZWN0Cit3aWxsIHVzZSBvdGhlciBtZWFucyB0byBleHBvcnQgc29tZSBzeW1ib2xzLgorCitUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZgordGhlIDp2YXJpYWJsZTpgQ01BS0VfQUlYX0VYUE9SVF9BTExfU1lNQk9MU2AgdmFyaWFibGUgaWYgaXQgaXMgc2V0Cit3aGVuIGEgdGFyZ2V0IGlzIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FMSUFTX0dMT0JBTC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FMSUFTX0dMT0JBTC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4NTljNgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF90Z3QvQUxJQVNfR0xPQkFMLnJzdApAQCAtMCwwICsxLDE5IEBACitBTElBU19HTE9CQUwKKy0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK1JlYWQtb25seSBwcm9wZXJ0eSBpbmRpY2F0aW5nIG9mIHdoZXRoZXIgYW4gOnJlZjpgQUxJQVMgdGFyZ2V0IDxBbGlhcyBUYXJnZXRzPmAKK2lzIGdsb2JhbGx5IHZpc2libGUuCisKK1RoZSBib29sZWFuIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgaXMgYGBUUlVFYGAgZm9yIGFsaWFzZXMgdG8KKzpyZWY6YElNUE9SVEVEIHRhcmdldHMgPEltcG9ydGVkIFRhcmdldHM+YCBjcmVhdGVkCit3aXRoIHRoZSBgYEdMT0JBTGBgIG9wdGlvbnMgdG8gOmNvbW1hbmQ6YGFkZF9leGVjdXRhYmxlKClgIG9yCis6Y29tbWFuZDpgYWRkX2xpYnJhcnkoKWAsIGBgRkFMU0VgYCBvdGhlcndpc2UuIEl0IGlzIHVuZGVmaW5lZCBmb3IKK3RhcmdldHMgYnVpbHQgd2l0aGluIHRoZSBwcm9qZWN0LgorCisuLiBub3RlOjoKKworICBQcm9tb3RpbmcgYW4gOnJlZjpgSU1QT1JURUQgdGFyZ2V0IDxJbXBvcnRlZCBUYXJnZXRzPmAgZnJvbSBgYExPQ0FMYGAKKyAgdG8gYGBHTE9CQUxgYCBzY29wZSBieSBjaGFuZ2luZyB0aGUgdmFsdWUgb3IgOnByb3BfdGd0OmBJTVBPUlRFRF9HTE9CQUxgCisgIHRhcmdldCBwcm9wZXJ0eSBkbyBub3QgY2hhbmdlIHRoZSBzY29wZSBvZiBsb2NhbCBhbGlhc2VzLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMucnN0CmluZGV4IGFmNmI0MDUuLmVjZWIxN2QgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BTlRfQURESVRJT05BTF9PUFRJT05TLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUy5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU2V0IHRoZSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIEFuZHJvaWQgQW50IGJ1aWxkIHN5c3RlbS4gVGhpcyBpcwogYSBzdHJpbmcgdmFsdWUgY29udGFpbmluZyBhbGwgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIHRoZSBBbnQgYnVpbGQuCiBUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BUEkucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0FQSS5yc3QKaW5kZXggNjM0NjRkNy4uNzY2NGYxOCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0FQSS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0FQSS5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX0FQSQogLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkIHdpdGggTlZJRElBIE5zaWdodCBUZWdyYSBWaXN1YWwgU3R1ZGlvCiBFZGl0aW9uYCwgdGhpcyBwcm9wZXJ0eSBzZXRzIHRoZSBBbmRyb2lkIHRhcmdldCBBUEkgdmVyc2lvbiAoZS5nLiBgYDE1YGApLgogVGhlIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgYSBwb3NpdGl2ZSBkZWNpbWFsIGludGVnZXIuICBUaGlzIHByb3BlcnR5IGlzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVBJX01JTi5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVBJX01JTi5yc3QKaW5kZXggNzczYWIzZi4uN2NhMjQ1NSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0FQSV9NSU4ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BUElfTUlOLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfQVBJX01JTgogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiBTZXQgdGhlIEFuZHJvaWQgTUlOIEFQSSB2ZXJzaW9uIChlLmcuIGBgOWBgKS4gIFRoZSB2ZXJzaW9uIG51bWJlcgogbXVzdCBiZSBhIHBvc2l0aXZlIGRlY2ltYWwgaW50ZWdlci4gIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkKIHRoZSB2YWx1ZSBvZiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9BTkRST0lEX0FQSV9NSU5gIHZhcmlhYmxlIGlmIGl0IGlzIHNldApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0FSQ0gucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0FSQ0gucnN0CmluZGV4IDNlMDdlNWEuLjk0Yjc2ZGQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9BUkNILnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVJDSC5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX0FSQ0gKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWQgd2l0aCBOVklESUEgTnNpZ2h0IFRlZ3JhIFZpc3VhbCBTdHVkaW8KIEVkaXRpb25gLCB0aGlzIHByb3BlcnR5IHNldHMgdGhlIEFuZHJvaWQgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0FTU0VUU19ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTLnJzdAppbmRleCA3NjRhNTgyLi5iMDlhOGI3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU2V0IHRoZSBBbmRyb2lkIGFzc2V0cyBkaXJlY3RvcmllcyB0byBjb3B5IGludG8gdGhlIG1haW4gYXNzZXRzCiBmb2xkZXIgYmVmb3JlIGJ1aWxkLiBUaGlzIGEgc3RyaW5nIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlCiBkaXJlY3RvcnkgcGF0aHMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbi4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9HVUkucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0dVSS5yc3QKaW5kZXggOTJlMjA0MS4uY2MwMjJkYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0dVSS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0dVSS5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX0dVSQogLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkIHdpdGggTlZJRElBIE5zaWdodCBUZWdyYSBWaXN1YWwgU3R1ZGlvCiBFZGl0aW9uYCwgdGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hldGhlciB0byBidWlsZCBhbiBleGVjdXRhYmxlIGFzIGFuCiBhcHBsaWNhdGlvbiBwYWNrYWdlIG9uIEFuZHJvaWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfSkFSX0RFUEVOREVOQ0lFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfSkFSX0RFUEVOREVOQ0lFUy5yc3QKaW5kZXggNDI5MzdjMS4uOTg4MGRhZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0pBUl9ERVBFTkRFTkNJRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfSkFSX0RFUEVOREVOQ0lFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTZXQgdGhlIEFuZHJvaWQgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgSkFSIGRlcGVuZGVuY2llcy4KIFRoaXMgaXMgYSBzdHJpbmcgdmFsdWUgcHJvcGVydHkuIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQKIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9BTkRST0lEX0pBUl9ERVBFTkRFTkNJRVNgCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfSkFSX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMucnN0CmluZGV4IDU0ZjBhOGYuLjZmZWY1MGIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTZXQgdGhlIEFuZHJvaWQgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvcgogdGhlIEpBUiBsaWJyYXJpZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9KQVZBX1NPVVJDRV9ESVIucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0pBVkFfU09VUkNFX0RJUi5yc3QKaW5kZXggOTBlZjFjZS4uOWVhOTg4NCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BTkRST0lEX0pBVkFfU09VUkNFX0RJUi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX0pBVkFfU09VUkNFX0RJUi5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX0pBVkFfU09VUkNFX0RJUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNldCB0aGUgQW5kcm9pZCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgdGhlIEphdmEgc291cmNlIGNvZGUgcm9vdCBkaXJlY3Rvcmllcy4KIFRoaXMgYSBzdHJpbmcgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgZGlyZWN0b3J5IHBhdGhzIHNlcGFyYXRlZCBieSBzZW1pY29sb24uCiBUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9OQVRJVkVfTElCX0RFUEVOREVOQ0lFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMucnN0CmluZGV4IDc1OWEzN2IuLjNhYTc0MWYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9OQVRJVkVfTElCX0RFUEVOREVOQ0lFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX05BVElWRV9MSUJfREVQRU5ERU5DSUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNldCB0aGUgQW5kcm9pZCBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyB0aGUgLnNvIGRlcGVuZGVuY2llcy4KIFRoaXMgaXMgYSBzdHJpbmcgcHJvcGVydHkuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTLnJzdAppbmRleCBkMGNkMjlkLi45ODIwMGQ5IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfTkFUSVZFX0xJQl9ESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX05BVElWRV9MSUJfRElSRUNUT1JJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNldCB0aGUgQW5kcm9pZCBwcm9wZXJ0eSB0aGF0IHNwZWNpZmllcyBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIHRoZSBgYC5zb2BgCiBsaWJyYXJpZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9QUk9DRVNTX01BWC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfUFJPQ0VTU19NQVgucnN0CmluZGV4IDg0N2FjYWUuLjBiNmFiYTcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9QUk9DRVNTX01BWC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX1BST0NFU1NfTUFYLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfUFJPQ0VTU19NQVgKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNldCB0aGUgQW5kcm9pZCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGEKIHBhcmFsbGVsIEFuZHJvaWQgTkRLIGNvbXBpbGVyIHByb2Nlc3NlcyAoZS5nLiBgYDRgYCkuCiBUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9QUk9HVUFSRC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfUFJPR1VBUkQucnN0CmluZGV4IGRhZmM1MWUuLmI1Y2UxNjYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9QUk9HVUFSRC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX1BST0dVQVJELnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfUFJPR1VBUkQKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSB0aGF0IGVuYWJsZXMgdGhlIFByb0d1YXJkIHRvb2wgdG8gc2hyaW5rLAogb3B0aW1pemUsIGFuZCBvYmZ1c2NhdGUgdGhlIGNvZGUgYnkgcmVtb3ZpbmcgdW51c2VkIGNvZGUgYW5kIHJlbmFtaW5nCiBjbGFzc2VzLCBmaWVsZHMsIGFuZCBtZXRob2RzIHdpdGggc2VtYW50aWNhbGx5IG9ic2N1cmUgbmFtZXMuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfUFJPR1VBUkRfQ09ORklHX1BBVEgucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX1BST0dVQVJEX0NPTkZJR19QQVRILnJzdAppbmRleCAwZTkyOWQxLi42YWM1OWQ4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfUFJPR1VBUkRfQ09ORklHX1BBVEgucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX1BST0dVQVJEX0NPTkZJR19QQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTZXQgdGhlIEFuZHJvaWQgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBQcm9HdWFyZAogY29uZmlnIGZpbGUuIExlYXZlIGVtcHR5IHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUuCiBUaGlzIGEgc3RyaW5nIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIHBhdGggdG8gUHJvR3VhcmQgY29uZmlnIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfU0VDVVJFX1BST1BTX1BBVEgucnN0IGIvSGVscC9wcm9wX3RndC9BTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRILnJzdAppbmRleCA5NTMzZjFhLi5mMmZmYTJlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfU0VDVVJFX1BST1BTX1BBVEgucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBBTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTZXQgdGhlIEFuZHJvaWQgcHJvcGVydHkgdGhhdCBzdGF0ZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzZWN1cmUgcHJvcGVydGllcyBmaWxlLgogVGhpcyBpcyBhIHN0cmluZyBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBmaWxlIHBhdGguCiBUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9TS0lQX0FOVF9TVEVQLnJzdCBiL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9TS0lQX0FOVF9TVEVQLnJzdAppbmRleCA2MzYxODk2Li4xYTU0YmNlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FORFJPSURfU0tJUF9BTlRfU1RFUC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX1NLSVBfQU5UX1NURVAucnN0CkBAIC0xLDYgKzEsOCBAQAogQU5EUk9JRF9TS0lQX0FOVF9TVEVQCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNldCB0aGUgQW5kcm9pZCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgd2hldGhlciBvciBub3QgdG8gc2tpcCB0aGUgQW50IGJ1aWxkIHN0ZXAuCiBUaGlzIGlzIGEgYm9vbGVhbiBwcm9wZXJ0eSBpbml0aWFsaXplZCBieSB0aGUgdmFsdWUgb2YgdGhlCiA6dmFyaWFibGU6YENNQUtFX0FORFJPSURfU0tJUF9BTlRfU1RFUGAgdmFyaWFibGUgaWYgaXQgaXMgc2V0IHdoZW4gYSB0YXJnZXQgaXMgY3JlYXRlZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9TVExfVFlQRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0FORFJPSURfU1RMX1RZUEUucnN0CmluZGV4IDM4NmU5NmUuLmM4MzcxMmIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQU5EUk9JRF9TVExfVFlQRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BTkRST0lEX1NUTF9UWVBFLnJzdApAQCAtMSw2ICsxLDggQEAKIEFORFJPSURfU1RMX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkIHdpdGggTlZJRElBIE5zaWdodCBUZWdyYSBWaXN1YWwgU3R1ZGlvCiBFZGl0aW9uYCwgdGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgU1RMIHN1cHBvcnQgZm9yIHRoZSBwcm9qZWN0LgogVGhpcyBpcyBhIHN0cmluZyBwcm9wZXJ0eSB0aGF0IGNvdWxkIHNldCB0byB0aGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BVVRPR0VOX0JVSUxEX0RJUi5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fQlVJTERfRElSLnJzdAppbmRleCA5MDliMTRjLi5mZjQyYWU4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fQlVJTERfRElSLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fQlVJTERfRElSLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9HRU5fQlVJTERfRElSCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogRGlyZWN0b3J5IHdoZXJlIDpwcm9wX3RndDpgQVVUT01PQ2AsIDpwcm9wX3RndDpgQVVUT1VJQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1JDQ2AKIGdlbmVyYXRlIGZpbGVzIGZvciB0aGUgdGFyZ2V0LgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fT1JJR0lOX0RFUEVORFMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPR0VOX09SSUdJTl9ERVBFTkRTLnJzdAppbmRleCAwMjJiYWI1Li41NjMxOTBhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fT1JJR0lOX0RFUEVORFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9PUklHSU5fREVQRU5EUy5yc3QKQEAgLTEsNiArMSw4IEBACiBBVVRPR0VOX09SSUdJTl9ERVBFTkRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogU3dpdGNoIGZvciBmb3J3YXJkaW5nIG9yaWdpbiB0YXJnZXQgZGVwZW5kZW5jaWVzIHRvIHRoZSBjb3JyZXNwb25kaW5nCiBgYF9hdXRvZ2VuYGAgdGFyZ2V0LgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fUEFSQUxMRUwucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPR0VOX1BBUkFMTEVMLnJzdAppbmRleCAwN2ZiYzVhLi42NjNiNTRlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fUEFSQUxMRUwucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9QQVJBTExFTC5yc3QKQEAgLTEsMTIgKzEsMTQgQEAKIEFVVE9HRU5fUEFSQUxMRUwKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBOdW1iZXIgb2YgcGFyYWxsZWwgYGBtb2NgYCBvciBgYHVpY2BgIHByb2Nlc3NlcyB0byBzdGFydCB3aGVuIHVzaW5nCiA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZCA6cHJvcF90Z3Q6YEFVVE9VSUNgLgogCi1UaGUgY3VzdG9tIGA8b3JpZ2luPl9hdXRvZ2VuYCB0YXJnZXQgc3RhcnRzIGEgbnVtYmVyIG9mIHRocmVhZHMgb2Ygd2hpY2gKK1RoZSBjdXN0b20gYGA8b3JpZ2luPl9hdXRvZ2VuYGAgdGFyZ2V0IHN0YXJ0cyBhIG51bWJlciBvZiB0aHJlYWRzIG9mIHdoaWNoCiBlYWNoIG9uZSBwYXJzZXMgYSBzb3VyY2UgZmlsZSBhbmQgb24gZGVtYW5kIHN0YXJ0cyBhIGBgbW9jYGAgb3IgYGB1aWNgYAotcHJvY2Vzcy4gIDpwcm9wX3RndDpgQVVUT0dFTl9QQVJBTExFTGAgY29udHJvbHMgaG93IG1hbnkgcGFyYWxsZWwgdGhyZWFkcworcHJvY2Vzcy4gIGBgQVVUT0dFTl9QQVJBTExFTGBgIGNvbnRyb2xzIGhvdyBtYW55IHBhcmFsbGVsIHRocmVhZHMKIChhbmQgdGhlcmVmb3JlIGBgbW9jYGAgb3IgYGB1aWNgYCBwcm9jZXNzZXMpIGFyZSBzdGFydGVkLgogCiAtIEFuIGVtcHR5IChvciB1bnNldCkgdmFsdWUgb3IgdGhlIHN0cmluZyBgYEFVVE9gYCBzZXRzIHRoZSBudW1iZXIgb2YKQEAgLTE0LDcgKzE2LDcgQEAKIC0gQSBwb3NpdGl2ZSBub24gemVybyBpbnRlZ2VyIHZhbHVlIHNldHMgdGhlIGV4YWN0IHRocmVhZC9wcm9jZXNzIGNvdW50LgogLSBPdGhlcndpc2UgYSBzaW5nbGUgdGhyZWFkL3Byb2Nlc3MgaXMgc3RhcnRlZC4KIAotQnkgZGVmYXVsdCA6cHJvcF90Z3Q6YEFVVE9HRU5fUEFSQUxMRUxgIGlzIGluaXRpYWxpemVkIGZyb20KK0J5IGRlZmF1bHQgYGBBVVRPR0VOX1BBUkFMTEVMYGAgaXMgaW5pdGlhbGl6ZWQgZnJvbQogOnZhcmlhYmxlOmBDTUFLRV9BVVRPR0VOX1BBUkFMTEVMYC4KIAogU2VlIHRoZSA6bWFudWFsOmBjbWFrZS1xdCg3KWAgbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIENNYWtlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fVEFSR0VUX0RFUEVORFMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPR0VOX1RBUkdFVF9ERVBFTkRTLnJzdAppbmRleCBkNWM1ZTE0Li45MmI1MmEzIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9HRU5fVEFSR0VUX0RFUEVORFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT0dFTl9UQVJHRVRfREVQRU5EUy5yc3QKQEAgLTMzLDQgKzMzLDQgQEAKICAgOnByb3Bfc2Y6YFNLSVBfQVVUT1VJQ2AsIDpwcm9wX3NmOmBTS0lQX0FVVE9HRU5gIG9yIDpwb2xpY3k6YENNUDAwNzFgIG9yCiAtIGEgZmlsZSB0aGF0IGlzbid0IGluIHRoZSBvcmlnaW4gdGFyZ2V0J3Mgc291cmNlcwogCi1pdCBtdXN0IGFkZGVkIHRvIDpwcm9wX3RndDpgQVVUT0dFTl9UQVJHRVRfREVQRU5EU2AuCitpdCBtdXN0IGJlIGFkZGVkIHRvIDpwcm9wX3RndDpgQVVUT0dFTl9UQVJHRVRfREVQRU5EU2AuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0MucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPTU9DLnJzdAppbmRleCBmNmRmYWJkLi5jMTg4NTliIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0MucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQy5yc3QKQEAgLTE3Miw3ICsxNzIsNyBAQAogdGhlbiB0aGUgdmVyc2lvbiB2YXJpYWJsZXMgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSB0byB0aGUgOnByb3BfdGd0OmBBVVRPTU9DYAogZW5hYmxlZCB0YXJnZXQuCiBJbiB0aGF0IGNhc2UgdGhlIHZlcnNpb24gdmFyaWFibGVzIGNhbiBiZSBmb3J3YXJkZWQgZnJvbSB0aGUKLWBmaW5kX3BhY2thZ2UoUXRbNDVdLi4uKWAgY2FsbGluZyBjb250ZXh0IHRvIHRoZSA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgCitgYGZpbmRfcGFja2FnZShRdFs0NV0uLi4pYGAgY2FsbGluZyBjb250ZXh0IHRvIHRoZSA6Y29tbWFuZDpgYWRkX2V4ZWN1dGFibGVgCiBvciA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgIGNhbGxpbmcgY29udGV4dCBhcyBkaXJlY3RvcnkgcHJvcGVydGllcy4KIFRoZSBmb2xsb3dpbmcgUXQ1IGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoZSBwcm9jZWR1cmUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTLnJzdAppbmRleCA1N2E2NDdmLi44OTk4Mjg0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfQ09NUElMRVJfUFJFREVGSU5FUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBCb29sZWFuIHZhbHVlIHVzZWQgYnkgOnByb3BfdGd0OmBBVVRPTU9DYCB0byBkZXRlcm1pbmUgaWYgdGhlCiBjb21waWxlciBwcmUgZGVmaW5pdGlvbnMgZmlsZSBgYG1vY19wcmVkZWZzLmhgYCBzaG91bGQgYmUgZ2VuZXJhdGVkLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfREVQRU5EX0ZJTFRFUlMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX0RFUEVORF9GSUxURVJTLnJzdAppbmRleCA2OTk1N2JmLi4xZjMxNzAwIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfREVQRU5EX0ZJTFRFUlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19ERVBFTkRfRklMVEVSUy5yc3QKQEAgLTEsNiArMSw4IEBACiBBVVRPTU9DX0RFUEVORF9GSUxURVJTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBGaWx0ZXIgZGVmaW5pdGlvbnMgdXNlZCBieSA6cHJvcF90Z3Q6YEFVVE9NT0NgIHRvIGV4dHJhY3QgZmlsZSBuYW1lcyBmcm9tIGEKIHNvdXJjZSBmaWxlIHRoYXQgYXJlIHJlZ2lzdGVyZWQgYXMgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgZm9yIHRoZQogYGBtb2NgYCBmaWxlIG9mIHRoZSBzb3VyY2UgZmlsZS4KQEAgLTI2LDYgKzI4LDkgQEAKIEJ5IGRlZmF1bHQgOnByb3BfdGd0OmBBVVRPTU9DX0RFUEVORF9GSUxURVJTYCBpcyBpbml0aWFsaXplZCBmcm9tCiA6dmFyaWFibGU6YENNQUtFX0FVVE9NT0NfREVQRU5EX0ZJTFRFUlNgLCB3aGljaCBpcyBlbXB0eSBieSBkZWZhdWx0LgogCitGcm9tIFF0IDUuMTUuMCBvbiB0aGlzIHZhcmlhYmxlIGlzIGlnbm9yZWQgYXMgbW9jIGlzIGFibGUgdG8gb3V0cHV0IHRoZSBjb3JyZWN0CitkZXBlbmRlbmNpZXMuCisKIFNlZSB0aGUgOm1hbnVhbDpgY21ha2UtcXQoNylgIG1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBDTWFrZQogd2l0aCBRdC4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BVVRPTU9DX0VYRUNVVEFCTEUucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX0VYRUNVVEFCTEUucnN0CmluZGV4IDZiNjZjZTguLmY0YjgzOTYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19FWEVDVVRBQkxFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfRVhFQ1VUQUJMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBBVVRPTU9DX0VYRUNVVEFCTEUKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIDpwcm9wX3RndDpgQVVUT01PQ19FWEVDVVRBQkxFYCBpcyBmaWxlIHBhdGggcG9pbnRpbmcgdG8gdGhlIGBgbW9jYGAKIGV4ZWN1dGFibGUgdG8gdXNlIGZvciA6cHJvcF90Z3Q6YEFVVE9NT0NgIGVuYWJsZWQgZmlsZXMuIFNldHRpbmcKIHRoaXMgcHJvcGVydHkgd2lsbCBtYWtlIENNYWtlIHNraXAgdGhlIGF1dG9tYXRpYyBkZXRlY3Rpb24gb2YgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfTUFDUk9fTkFNRVMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX01BQ1JPX05BTUVTLnJzdAppbmRleCA1MzI5YmJhLi5hNTM4MTBkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfTUFDUk9fTkFNRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19NQUNST19OQU1FUy5yc3QKQEAgLTEsNiArMSw4IEBACiBBVVRPTU9DX01BQ1JPX05BTUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogQSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgbGlzdCBvZiBtYWNybyBuYW1lcyB1c2VkIGJ5CiA6cHJvcF90Z3Q6YEFVVE9NT0NgIHRvIGRldGVybWluZSBpZiBhIEMrKyBmaWxlIG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBieSBgYG1vY2BgLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfTU9DX09QVElPTlMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX01PQ19PUFRJT05TLnJzdAppbmRleCBlYmQ1YzQ5Li4zMzA4NDliIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfTU9DX09QVElPTlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19NT0NfT1BUSU9OUy5yc3QKQEAgLTEsNyArMSw3IEBACiBBVVRPTU9DX01PQ19PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgbW9jIHdoZW4gdXNpbmcgOnByb3BfdGd0OmBBVVRPTU9DYAorQWRkaXRpb25hbCBvcHRpb25zIGZvciBgYG1vY2BgIHdoZW4gdXNpbmcgOnByb3BfdGd0OmBBVVRPTU9DYAogCiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgdXNlZCBpZiB0aGUgOnByb3BfdGd0OmBBVVRPTU9DYCBwcm9wZXJ0eSBpcyBgYE9OYGAKIGZvciB0aGlzIHRhcmdldC4gIEluIHRoaXMgY2FzZSwgaXQgaG9sZHMgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUKQEAgLTksNyArOSw5IEBACiBpdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBvcHRpb25hbCBgYE9QVElPTlNgYCBhcmd1bWVudCBvZiB0aGUKIDptb2R1bGU6YHF0NF93cmFwX2NwcCgpIDxGaW5kUXQ0PmAgbWFjcm8uCiAKLUJ5IGRlZmF1bHQgaXQgaXMgZW1wdHkuCitUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKKzp2YXJpYWJsZTpgQ01BS0VfQVVUT01PQ19NT0NfT1BUSU9OU2AgdmFyaWFibGUgaWYgaXQgaXMgc2V0IHdoZW4gYSB0YXJnZXQKK2lzIGNyZWF0ZWQsIG9yIGFuIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCiAKIFNlZSB0aGUgOm1hbnVhbDpgY21ha2UtcXQoNylgIG1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBDTWFrZQogd2l0aCBRdC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19QQVRIX1BSRUZJWC5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9NT0NfUEFUSF9QUkVGSVgucnN0CmluZGV4IGUyZWJiM2YuLjRmODVjMTYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT01PQ19QQVRIX1BSRUZJWC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPTU9DX1BBVEhfUFJFRklYLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9NT0NfUEFUSF9QUkVGSVgKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBXaGVuIHRoaXMgcHJvcGVydHkgaXMgYGBPTmBgLCBDTWFrZSB3aWxsIGdlbmVyYXRlIHRoZSBgYC1wYGAgcGF0aCBwcmVmaXgKIG9wdGlvbiBmb3IgYGBtb2NgYCBvbiA6cHJvcF90Z3Q6YEFVVE9NT0NgIGVuYWJsZWQgUXQgdGFyZ2V0cy4KIApAQCAtMjEsMTEgKzIzLDExIEBACiBSZXByb2R1Y2libGUgYnVpbGRzCiBeXl5eXl5eXl5eXl5eXl5eXl5eCiAKLUZvciByZXByb2R1Y2libGUgYnVpbGRzIGlzIGlzIHJlY29tbWVuZGVkIHRvIGtlZXAgaGVhZGVycyB0aGF0IGFyZSBgYG1vY2BgCitGb3IgcmVwcm9kdWNpYmxlIGJ1aWxkcyBpdCBpcyByZWNvbW1lbmRlZCB0byBrZWVwIGhlYWRlcnMgdGhhdCBhcmUgYGBtb2NgYAogY29tcGlsZWQgaW4gb25lIG9mIHRoZSB0YXJnZXQKIDpjb21tYW5kOmBpbmNsdWRlIGRpcmVjdG9yaWVzIDx0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcz5gIGFuZCBzZXQKIDpwcm9wX3RndDpgQVVUT01PQ19QQVRIX1BSRUZJWGAgdG8gYGBPTmBgICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuICBUaGlzIGVuc3VyZXMKLXRoYXQKK3RoYXQ6CiAKIC0gYGBtb2NgYCBvdXRwdXQgZmlsZXMgYXJlIGlkZW50aWNhbCBvbiBkaWZmZXJlbnQgYnVpbGQgc2V0dXBzLAogLSBgYG1vY2BgIG91dHB1dCBmaWxlcyB3aWxsIGNvbXBpbGUgY29ycmVjdGx5IHdoZW4gdGhlIHNvdXJjZSBhbmQvb3IKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT1JDQy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9SQ0MucnN0CmluZGV4IGNjYTNlNTguLjlhOThmNDQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT1JDQy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPUkNDLnJzdApAQCAtMzEsOSArMzEsMTAgQEAKIFRoZSBgYHJjY2BgIGV4ZWN1dGFibGUgd2lsbCBiZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBidXQgY2FuIGJlIGZvcmNlZCB0bwogYSBjZXJ0YWluIGJpbmFyeSBieSBzZXR0aW5nIHRoaXMgdGFyZ2V0IHByb3BlcnR5LgogCi06cHJvcF9zZjpgQVVUT1JDQ19PUFRJT05TYDoKLUFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIGBgcmNjYGAgY2FuIGJlIHNldCB2aWEgdGhpcyBgYC5xcmNgYAotc291cmNlIGZpbGUgcHJvcGVydHkuCis6cHJvcF90Z3Q6YEFVVE9SQ0NfT1BUSU9OU2A6CitBZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciBgYHJjY2BgIGNhbiBiZSBzZXQgdmlhIHRoaXMgdGFyZ2V0Citwcm9wZXJ0eS4gIFRoZSBjb3JyZXNwb25kaW5nIDpwcm9wX3NmOmBBVVRPUkNDX09QVElPTlNgIHNvdXJjZSBmaWxlIHByb3BlcnR5CitjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9wdGlvbnMgdG8gYmUgYXBwbGllZCBvbmx5IHRvIGEgc3BlY2lmaWMgYGAucXJjYGAgZmlsZS4KIAogOnByb3Bfc2Y6YFNLSVBfQVVUT1JDQ2A6CiBgYC5xcmNgYCBmaWxlcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSA6cHJvcF90Z3Q6YEFVVE9SQ0NgIHByb2Nlc3NpbmcgYnkKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT1JDQ19FWEVDVVRBQkxFLnJzdCBiL0hlbHAvcHJvcF90Z3QvQVVUT1JDQ19FWEVDVVRBQkxFLnJzdAppbmRleCBjYTBmYmQ3Li40Zjg1ZmJhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9SQ0NfRVhFQ1VUQUJMRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPUkNDX0VYRUNVVEFCTEUucnN0CkBAIC0xLDYgKzEsOCBAQAogQVVUT1JDQ19FWEVDVVRBQkxFCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiA6cHJvcF90Z3Q6YEFVVE9SQ0NfRVhFQ1VUQUJMRWAgaXMgZmlsZSBwYXRoIHBvaW50aW5nIHRvIHRoZSBgYHJjY2BgCiBleGVjdXRhYmxlIHRvIHVzZSBmb3IgOnByb3BfdGd0OmBBVVRPUkNDYCBlbmFibGVkIGZpbGVzLiBTZXR0aW5nCiB0aGlzIHByb3BlcnR5IHdpbGwgbWFrZSBDTWFrZSBza2lwIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9BVVRPUkNDX09QVElPTlMucnN0IGIvSGVscC9wcm9wX3RndC9BVVRPUkNDX09QVElPTlMucnN0CmluZGV4IGQ2YWRlNWEuLjUyNjFhZmYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT1JDQ19PUFRJT05TLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0FVVE9SQ0NfT1BUSU9OUy5yc3QKQEAgLTgsMTEgKzgsOSBAQAogaS5lLiBpdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBvcHRpb25hbCBgYE9QVElPTlNgYCBhcmd1bWVudCBvZiB0aGUKIDptb2R1bGU6YHF0NF9hZGRfcmVzb3VyY2VzKCkgPEZpbmRRdDQ+YCBtYWNyby4KIAotQnkgZGVmYXVsdCBpdCBpcyBlbXB0eS4KLQogVGhpcyBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCBieSB0aGUgdmFsdWUgb2YgdGhlCiA6dmFyaWFibGU6YENNQUtFX0FVVE9SQ0NfT1BUSU9OU2AgdmFyaWFibGUgaWYgaXQgaXMgc2V0IHdoZW4gYSB0YXJnZXQgaXMKLWNyZWF0ZWQuCitjcmVhdGVkLCBvciBhbiBlbXB0eSBzdHJpbmcgb3RoZXJ3aXNlLgogCiBUaGUgb3B0aW9ucyBzZXQgb24gdGhlIHRhcmdldCBtYXkgYmUgb3ZlcnJpZGRlbiBieSA6cHJvcF9zZjpgQVVUT1JDQ19PUFRJT05TYAogc2V0IG9uIHRoZSBgYC5xcmNgYCBzb3VyY2UgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT1VJQy5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9VSUMucnN0CmluZGV4IDVjZjg3NTUuLmNkMjRmNWUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT1VJQy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPVUlDLnJzdApAQCAtNTIsOCArNTIsMTEgQEAKIFRoZSBgYHVpY2BgIGV4ZWN1dGFibGUgd2lsbCBiZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBidXQgY2FuIGJlIGZvcmNlZCB0bwogYSBjZXJ0YWluIGJpbmFyeSB1c2luZyB0aGlzIHRhcmdldCBwcm9wZXJ0eS4KIAotOnByb3Bfc2Y6YEFVVE9VSUNfT1BUSU9OU2A6IEFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIGBgdWljYGAgY2FuCi1iZSBzZXQgdmlhIHRoaXMgc291cmNlIGZpbGUgcHJvcGVydHkgb24gYSBgYDxiYXNlX25hbWU+LnVpYGAgZmlsZS4KKzpwcm9wX3RndDpgQVVUT1VJQ19PUFRJT05TYDoKK0FkZGl0aW9uYWwgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIGBgdWljYGAgY2FuIGJlIHNldCB2aWEgdGhpcyB0YXJnZXQKK3Byb3BlcnR5LiAgVGhlIGNvcnJlc3BvbmRpbmcgOnByb3Bfc2Y6YEFVVE9VSUNfT1BUSU9OU2Agc291cmNlIGZpbGUgcHJvcGVydHkKK2NhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb3B0aW9ucyB0byBiZSBhcHBsaWVkIG9ubHkgdG8gYSBzcGVjaWZpYworYGA8YmFzZV9uYW1lPi51aWBgIGZpbGUuCiAKIDpwcm9wX3NmOmBTS0lQX0FVVE9VSUNgOgogU291cmNlIGZpbGVzIGNhbiBiZSBleGNsdWRlZCBmcm9tIDpwcm9wX3RndDpgQVVUT1VJQ2AgcHJvY2Vzc2luZyBieSBzZXR0aW5nCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9VSUNfRVhFQ1VUQUJMRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0FVVE9VSUNfRVhFQ1VUQUJMRS5yc3QKaW5kZXggMDNiZDU1NC4uNTk2NjMyNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9BVVRPVUlDX0VYRUNVVEFCTEUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT1VJQ19FWEVDVVRBQkxFLnJzdApAQCAtMSw2ICsxLDggQEAKIEFVVE9VSUNfRVhFQ1VUQUJMRQogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogOnByb3BfdGd0OmBBVVRPVUlDX0VYRUNVVEFCTEVgIGlzIGZpbGUgcGF0aCBwb2ludGluZyB0byB0aGUgYGB1aWNgYAogZXhlY3V0YWJsZSB0byB1c2UgZm9yIDpwcm9wX3RndDpgQVVUT1VJQ2AgZW5hYmxlZCBmaWxlcy4gU2V0dGluZwogdGhpcyBwcm9wZXJ0eSB3aWxsIG1ha2UgQ01ha2Ugc2tpcCB0aGUgYXV0b21hdGljIGRldGVjdGlvbiBvZiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQVVUT1VJQ19PUFRJT05TLnJzdCBiL0hlbHAvcHJvcF90Z3QvQVVUT1VJQ19PUFRJT05TLnJzdAppbmRleCAzZjYxM2I5Li40MjVlYTFjIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0FVVE9VSUNfT1BUSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9BVVRPVUlDX09QVElPTlMucnN0CkBAIC04LDExICs4LDkgQEAKIGVxdWl2YWxlbnQgdG8gdGhlIG9wdGlvbmFsIGBgT1BUSU9OU2BgIGFyZ3VtZW50IG9mIHRoZQogOm1vZHVsZTpgcXQ0X3dyYXBfdWkoKSA8RmluZFF0ND5gIG1hY3JvLgogCi1CeSBkZWZhdWx0IGl0IGlzIGVtcHR5LgotCiBUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKIDp2YXJpYWJsZTpgQ01BS0VfQVVUT1VJQ19PUFRJT05TYCB2YXJpYWJsZSBpZiBpdCBpcyBzZXQgd2hlbiBhIHRhcmdldCBpcwotY3JlYXRlZC4KK2NyZWF0ZWQsIG9yIGFuIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCiAKIFRoZSBvcHRpb25zIHNldCBvbiB0aGUgdGFyZ2V0IG1heSBiZSBvdmVycmlkZGVuIGJ5IDpwcm9wX3NmOmBBVVRPVUlDX09QVElPTlNgCiBzZXQgb24gdGhlIGBgLnVpYGAgc291cmNlIGZpbGUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0FVVE9VSUNfU0VBUkNIX1BBVEhTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQVVUT1VJQ19TRUFSQ0hfUEFUSFMucnN0CmluZGV4IDk2ZDlmODkuLjg3ZmVhNDggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQVVUT1VJQ19TRUFSQ0hfUEFUSFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQVVUT1VJQ19TRUFSQ0hfUEFUSFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQVVUT1VJQ19TRUFSQ0hfUEFUSFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBTZWFyY2ggcGF0aCBsaXN0IHVzZWQgYnkgOnByb3BfdGd0OmBBVVRPVUlDYCB0byBmaW5kIGluY2x1ZGVkCiBgYC51aWBgIGZpbGVzLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0JJTkFSWV9ESVIucnN0IGIvSGVscC9wcm9wX3RndC9CSU5BUllfRElSLnJzdAppbmRleCAyNDZmN2U2Li5iZWFiMTJjIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0JJTkFSWV9ESVIucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQklOQVJZX0RJUi5yc3QKQEAgLTEsNiArMSw4IEBACiBCSU5BUllfRElSCiAtLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUaGlzIHJlYWQtb25seSBwcm9wZXJ0eSByZXBvcnRzIHRoZSB2YWx1ZSBvZiB0aGUKIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSYCB2YXJpYWJsZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoCiB0aGUgdGFyZ2V0IHdhcyBkZWZpbmVkLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9CVUlMRF9SUEFUSC5yc3QgYi9IZWxwL3Byb3BfdGd0L0JVSUxEX1JQQVRILnJzdAppbmRleCBkOTc4Yjk0Li4xZjkxN2E1IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0JVSUxEX1JQQVRILnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0JVSUxEX1JQQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIEJVSUxEX1JQQVRICiAtLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogQSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgc3BlY2lmeWluZyBydW50aW1lIHBhdGggKGBgUlBBVEhgYCkKIGVudHJpZXMgdG8gYWRkIHRvIGJpbmFyaWVzIGxpbmtlZCBpbiB0aGUgYnVpbGQgdHJlZSAoZm9yIHBsYXRmb3JtcyB0aGF0CiBzdXBwb3J0IGl0KS4gIFRoZSBlbnRyaWVzIHdpbGwgKm5vdCogYmUgdXNlZCBmb3IgYmluYXJpZXMgaW4gdGhlIGluc3RhbGwKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQlVJTERfUlBBVEhfVVNFX09SSUdJTi5yc3QgYi9IZWxwL3Byb3BfdGd0L0JVSUxEX1JQQVRIX1VTRV9PUklHSU4ucnN0CmluZGV4IDMzNzg3OTcuLjJjZGZhMGQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQlVJTERfUlBBVEhfVVNFX09SSUdJTi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9CVUlMRF9SUEFUSF9VU0VfT1JJR0lOLnJzdApAQCAtMSw2ICsxLDggQEAKIEJVSUxEX1JQQVRIX1VTRV9PUklHSU4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBXaGV0aGVyIHRvIHVzZSByZWxhdGl2ZSBwYXRocyBmb3IgdGhlIGJ1aWxkIGBgUlBBVEhgYC4KIAogVGhpcyBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCBieSB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0JVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUi5yc3QgYi9IZWxwL3Byb3BfdGd0L0JVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUi5yc3QKaW5kZXggYmJiOWEyNC4uMDczZGNlNSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9CVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSLnJzdApAQCAtMSw2ICsxLDggQEAKIEJVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBgYEJVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUmBgIGlzIGEgYm9vbGVhbiBzcGVjaWZ5aW5nIHdoZXRoZXIgdGhlIG1hY09TCiBgYGluc3RhbGxfbmFtZWBgIG9mIGEgdGFyZ2V0IGluIHRoZSBidWlsZCB0cmVlIHVzZXMgdGhlIGRpcmVjdG9yeSBnaXZlbiBieQogOnByb3BfdGd0OmBJTlNUQUxMX05BTUVfRElSYC4gIFRoaXMgc2V0dGluZyBvbmx5IGFwcGxpZXMgdG8gdGFyZ2V0cyBvbiBtYWNPUy4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ09NTU9OX0xBTkdVQUdFX1JVTlRJTUUucnN0IGIvSGVscC9wcm9wX3RndC9DT01NT05fTEFOR1VBR0VfUlVOVElNRS5yc3QKaW5kZXggMDUyYWM2ZC4uYWRmYTZmNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT01NT05fTEFOR1VBR0VfUlVOVElNRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DT01NT05fTEFOR1VBR0VfUlVOVElNRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDT01NT05fTEFOR1VBR0VfUlVOVElNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBCeSBzZXR0aW5nIHRoaXMgdGFyZ2V0IHByb3BlcnR5LCB0aGUgdGFyZ2V0IGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgd2l0aAogYGBDKysvQ0xJYGAgc3VwcG9ydC4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DT01QSUxFX0ZFQVRVUkVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9GRUFUVVJFUy5yc3QKaW5kZXggMTk1MjE1ZS4uOWI5MzdlZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT01QSUxFX0ZFQVRVUkVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfRkVBVFVSRVMucnN0CkBAIC0xLDEwICsxLDEzIEBACiBDT01QSUxFX0ZFQVRVUkVTCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBDb21waWxlciBmZWF0dXJlcyBlbmFibGVkIGZvciB0aGlzIHRhcmdldC4KIAogVGhlIGxpc3Qgb2YgZmVhdHVyZXMgaW4gdGhpcyBwcm9wZXJ0eSBhcmUgYSBzdWJzZXQgb2YgdGhlIGZlYXR1cmVzIGxpc3RlZAotaW4gdGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVNgIHZhcmlhYmxlLgoraW4gdGhlIDp2YXJpYWJsZTpgQ01BS0VfQ19DT01QSUxFX0ZFQVRVUkVTYCwgOnZhcmlhYmxlOmBDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVNgLCBhbmQKKzp2YXJpYWJsZTpgQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVNgIHZhcmlhYmxlcy4KIAogQ29udGVudHMgb2YgYGBDT01QSUxFX0ZFQVRVUkVTYGAgbWF5IHVzZSAiZ2VuZXJhdG9yIGV4cHJlc3Npb25zIiB3aXRoIHRoZQogc3ludGF4IGBgJDwuLi4+YGAuICBTZWUgdGhlIDptYW51YWw6YGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KWAgbWFudWFsIGZvcgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9QREJfTkFNRS5yc3QKaW5kZXggMjRhOWY2Mi4uYjc2YWZlYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX05BTUUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ09NUElMRV9QREJfTkFNRQogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogT3V0cHV0IG5hbWUgZm9yIHRoZSBNUyBkZWJ1ZyBzeW1ib2wgYGAucGRiYGAgZmlsZSBnZW5lcmF0ZWQgYnkgdGhlCiBjb21waWxlciB3aGlsZSBidWlsZGluZyBzb3VyY2UgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9QREJfTkFNRV9DT05GSUcucnN0IGIvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FX0NPTkZJRy5yc3QKaW5kZXggZTQwNzdmNS4uNGM5ODI1ZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FX0NPTkZJRy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9OQU1FX0NPTkZJRy5yc3QKQEAgLTEsNiArMSw4IEBACiBDT01QSUxFX1BEQl9OQU1FXzxDT05GSUc+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBQZXItY29uZmlndXJhdGlvbiBvdXRwdXQgbmFtZSBmb3IgdGhlIE1TIGRlYnVnIHN5bWJvbCBgYC5wZGJgYCBmaWxlCiBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHdoaWxlIGJ1aWxkaW5nIHNvdXJjZSBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWS5yc3QKaW5kZXggMzRmNDliZS4uM2YzZGY2NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogT3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIE1TIGRlYnVnIHN5bWJvbCBgYC5wZGJgYCBmaWxlCiBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHdoaWxlIGJ1aWxkaW5nIHNvdXJjZSBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAppbmRleCBmMjYxNzU2Li5jMjVjMmZjIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIENPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUllfPENPTkZJRz4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFBlci1jb25maWd1cmF0aW9uIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBNUyBkZWJ1ZyBzeW1ib2wgYGAucGRiYGAgZmlsZQogZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB3aGlsZSBidWlsZGluZyBzb3VyY2UgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ09ORklHX1BPU1RGSVgucnN0IGIvSGVscC9wcm9wX3RndC9DT05GSUdfUE9TVEZJWC5yc3QKaW5kZXggMTFiNTBiOS4uNWMyZmJkNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DT05GSUdfUE9TVEZJWC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DT05GSUdfUE9TVEZJWC5yc3QKQEAgLTgsMyArOCw2IEBACiB0YXJnZXRzLCB0aGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKIENNQUtFXzxDT05GSUc+X1BPU1RGSVggaWYgaXQgaXMgc2V0IHdoZW4gYSB0YXJnZXQgaXMgY3JlYXRlZC4gIFRoaXMKIHByb3BlcnR5IGlzIGlnbm9yZWQgb24gdGhlIE1hYyBmb3IgRnJhbWV3b3JrcyBhbmQgQXBwIEJ1bmRsZXMuCisKK0ZvciBtYWNPUyBzZWUgYWxzbyB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfPENPTkZJRz5gCit0YXJnZXQgcHJvcGVydHkuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NST1NTQ09NUElMSU5HX0VNVUxBVE9SLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0CmluZGV4IDg3YzU5NzguLmQ3ZmI5YjEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBVc2UgdGhlIGdpdmVuIGVtdWxhdG9yIHRvIHJ1biBleGVjdXRhYmxlcyBjcmVhdGVkIHdoZW4gY3Jvc3Njb21waWxpbmcuCiBUaGlzIGNvbW1hbmQgd2lsbCBiZSBhZGRlZCBhcyBhIHByZWZpeCB0byA6Y29tbWFuZDpgYWRkX3Rlc3RgLAogOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAsIGFuZCA6Y29tbWFuZDpgYWRkX2N1c3RvbV90YXJnZXRgIGNvbW1hbmRzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NVREFfQVJDSElURUNUVVJFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0NVREFfQVJDSElURUNUVVJFUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2Yjc2OQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9BUkNISVRFQ1RVUkVTLnJzdApAQCAtMCwwICsxLDQyIEBACitDVURBX0FSQ0hJVEVDVFVSRVMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK0xpc3Qgb2YgYXJjaGl0ZWN0dXJlcyB0byBnZW5lcmF0ZSBkZXZpY2UgY29kZSBmb3IuCisKK0FuIGFyY2hpdGVjdHVyZSBjYW4gYmUgc3VmZml4ZWQgYnkgZWl0aGVyIGBgLXJlYWxgYCBvciBgYC12aXJ0dWFsYGAgdG8gc3BlY2lmeQordGhlIGtpbmQgb2YgYXJjaGl0ZWN0dXJlIHRvIGdlbmVyYXRlIGNvZGUgZm9yLgorSWYgbm8gc3VmZml4IGlzIGdpdmVuIHRoZW4gY29kZSBpcyBnZW5lcmF0ZWQgZm9yIGJvdGggcmVhbCBhbmQgdmlydHVhbAorYXJjaGl0ZWN0dXJlcy4KKworQSBub24tZW1wdHkgZmFsc2UgdmFsdWUgKGUuZy4gYGBPRkZgYCkgZGlzYWJsZXMgYWRkaW5nIGFyY2hpdGVjdHVyZXMuCitUaGlzIGlzIGludGVuZGVkIHRvIHN1cHBvcnQgcGFja2FnZXJzIGFuZCByYXJlIGNhc2VzIHdoZXJlIGZ1bGwgY29udHJvbAorb3ZlciB0aGUgcGFzc2VkIGZsYWdzIGlzIHJlcXVpcmVkLgorCitUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVNgCit2YXJpYWJsZSBpZiBpdCBpcyBzZXQgd2hlbiBhIHRhcmdldCBpcyBjcmVhdGVkLgorCitUaGUgYGBDVURBX0FSQ0hJVEVDVFVSRVNgYCB0YXJnZXQgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gYSBub24tZW1wdHkgdmFsdWUgb24gdGFyZ2V0cwordGhhdCBjb21waWxlIENVREEgc291cmNlcywgb3IgaXQgaXMgYW4gZXJyb3IuICBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDRgLgorCitFeGFtcGxlcworXl5eXl5eXl4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0Z3QgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIDM1IDUwIDcyKQorCitHZW5lcmF0ZXMgY29kZSBmb3IgcmVhbCBhbmQgdmlydHVhbCBhcmNoaXRlY3R1cmVzIGBgMzBgYCwgYGA1MGBgIGFuZCBgYDcyYGAuCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGd0IFBST1BFUlRZIENVREFfQVJDSElURUNUVVJFUyA3MC1yZWFsIDcyLXZpcnR1YWwpCisKK0dlbmVyYXRlcyBjb2RlIGZvciByZWFsIGFyY2hpdGVjdHVyZSBgYDcwYGAgYW5kIHZpcnR1YWwgYXJjaGl0ZWN0dXJlIGBgNzJgYC4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0Z3QgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIE9GRikKKworQ01ha2Ugd2lsbCBub3QgcGFzcyBhbnkgYXJjaGl0ZWN0dXJlIGZsYWdzIHRvIHRoZSBjb21waWxlci4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ1VEQV9FWFRFTlNJT05TLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9FWFRFTlNJT05TLnJzdAppbmRleCAwOThjYTNjLi4yZGRiYTBiIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NVREFfRVhURU5TSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DVURBX0VYVEVOU0lPTlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1VEQV9FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIEJvb2xlYW4gc3BlY2lmeWluZyB3aGV0aGVyIGNvbXBpbGVyIHNwZWNpZmljIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hldGhlciBjb21waWxlciBzcGVjaWZpYyBleHRlbnNpb25zIHNob3VsZCBiZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DVURBX1BUWF9DT01QSUxBVElPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L0NVREFfUFRYX0NPTVBJTEFUSU9OLnJzdAppbmRleCAwZWUzNzJiLi40ZTkwYWZlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NVREFfUFRYX0NPTVBJTEFUSU9OLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NVREFfUFRYX0NPTVBJTEFUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENVREFfUFRYX0NPTVBJTEFUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogQ29tcGlsZSBDVURBIHNvdXJjZXMgdG8gYGAucHR4YGAgZmlsZXMgaW5zdGVhZCBvZiBgYC5vYmpgYCBmaWxlcwogd2l0aGluIDpyZWY6YE9iamVjdCBMaWJyYXJpZXNgLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0NVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MUy5yc3QKaW5kZXggZGFlOTYwZi4uODE5Y2UzZSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTLnJzdApAQCAtMSw2ICsxLDggQEAKIENVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBDVURBIG9ubHk6IEVuYWJsZXMgZGV2aWNlIGxpbmtpbmcgZm9yIHRoZSBzcGVjaWZpYyBsaWJyYXJ5IHRhcmdldCB3aGVyZQogcmVxdWlyZWQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ1VEQV9SVU5USU1FX0xJQlJBUlktVkFMVUVTLnR4dCBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9SVU5USU1FX0xJQlJBUlktVkFMVUVTLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmQ3MDUwCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWS1WQUxVRVMudHh0CkBAIC0wLDAgKzEsOSBAQAorYGBOb25lYGAKKyAgTGluayB3aXRoIGBgLWN1ZGFydD1ub25lYGAgb3IgZXF1aXZhbGVudCBmbGFnKHMpIHRvIHVzZSBubyBDVURBCisgIHJ1bnRpbWUgbGlicmFyeS4KK2BgU2hhcmVkYGAKKyAgTGluayB3aXRoIGBgLWN1ZGFydD1zaGFyZWRgYCBvciBlcXVpdmFsZW50IGZsYWcocykgdG8gdXNlIGEKKyAgZHluYW1pY2FsbHktbGlua2VkIENVREEgcnVudGltZSBsaWJyYXJ5LgorYGBTdGF0aWNgYAorICBMaW5rIHdpdGggYGAtY3VkYXJ0PXN0YXRpY2BgIG9yIGVxdWl2YWxlbnQgZmxhZyhzKSB0byB1c2UgYQorICBzdGF0aWNhbGx5LWxpbmtlZCBDVURBIHJ1bnRpbWUgbGlicmFyeS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ1VEQV9SVU5USU1FX0xJQlJBUlkucnN0IGIvSGVscC9wcm9wX3RndC9DVURBX1JVTlRJTUVfTElCUkFSWS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzN2ZjNgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9SVU5USU1FX0xJQlJBUlkucnN0CkBAIC0wLDAgKzEsMjMgQEAKK0NVREFfUlVOVElNRV9MSUJSQVJZCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKK1NlbGVjdCB0aGUgQ1VEQSBydW50aW1lIGxpYnJhcnkgZm9yIHVzZSBieSBjb21waWxlcnMgdGFyZ2V0aW5nIHRoZSBDVURBIGxhbmd1YWdlLgorCitUaGUgYWxsb3dlZCBjYXNlIGluc2Vuc2l0aXZlIHZhbHVlcyBhcmU6CisKKy4uIGluY2x1ZGU6OiBDVURBX1JVTlRJTUVfTElCUkFSWS1WQUxVRVMudHh0CisKK0NvbnRlbnRzIG9mIGBgQ1VEQV9SVU5USU1FX0xJQlJBUllgYCBtYXkgdXNlCis6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgorCitJZiB0aGF0IHByb3BlcnR5IGlzIG5vdCBzZXQgdGhlbiBDTWFrZSB1c2VzIGFuIGFwcHJvcHJpYXRlIGRlZmF1bHQKK3ZhbHVlIGJhc2VkIG9uIHRoZSBjb21waWxlciB0byBzZWxlY3QgdGhlIENVREEgcnVudGltZSBsaWJyYXJ5LgorCisuLiBub3RlOjoKKworICBUaGlzIHByb3BlcnR5IGhhcyBlZmZlY3Qgb25seSB3aGVuIHRoZSBgYENVREFgYCBsYW5ndWFnZSBpcyBlbmFibGVkLiBUbworICBjb250cm9sIHRoZSBDVURBIHJ1bnRpbWUgbGlua2luZyB3aGVuIG9ubHkgdXNpbmcgdGhlIENVREEgU0RLIHdpdGggdGhlCisgIGBgQ2BgIG9yIGBgQysrYGAgbGFuZ3VhZ2Ugd2UgcmVjb21tZW5kIHVzaW5nIHRoZSA6bW9kdWxlOmBGaW5kQ1VEQVRvb2xraXRgCisgIG1vZHVsZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04ucnN0IGIvSGVscC9wcm9wX3RndC9DVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTi5yc3QKaW5kZXggZDMwNmQ3Zi4uMzIyMjJmOSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIENVREEgb25seTogRW5hYmxlcyBzZXBhcmF0ZSBjb21waWxhdGlvbiBvZiBkZXZpY2UgY29kZQogCiBJZiBzZXQgdGhpcyB3aWxsIGVuYWJsZSBzZXBhcmFibGUgY29tcGlsYXRpb24gZm9yIGFsbCBDVURBIGZpbGVzIGZvcgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DVURBX1NUQU5EQVJELnJzdCBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9TVEFOREFSRC5yc3QKaW5kZXggYTNhMmY1Ni4uZmNjNDcyNSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DVURBX1NUQU5EQVJELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NVREFfU1RBTkRBUkQucnN0CkBAIC0xLDEzICsxLDE1IEBACiBDVURBX1NUQU5EQVJECiAtLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBUaGUgQ1VEQS9DKysgc3RhbmRhcmQgd2hvc2UgZmVhdHVyZXMgYXJlIHJlcXVlc3RlZCB0byBidWlsZCB0aGlzIHRhcmdldC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIENVREEvQysrIHN0YW5kYXJkIHdob3NlIGZlYXR1cmVzIGFyZSByZXF1ZXN0ZWQKIHRvIGJ1aWxkIHRoaXMgdGFyZ2V0LiAgRm9yIHNvbWUgY29tcGlsZXJzLCB0aGlzIHJlc3VsdHMgaW4gYWRkaW5nIGEKIGZsYWcgc3VjaCBhcyBgYC1zdGQ9Z251KysxMWBgIHRvIHRoZSBjb21waWxlIGxpbmUuCiAKLVN1cHBvcnRlZCB2YWx1ZXMgYXJlIGBgOThgYCwgYGAxMWBgLCBgYDE0YGAuCitTdXBwb3J0ZWQgdmFsdWVzIGFyZSBgYDk4YGAsIGBgMDNgYCwgYGAxMWBgLCBgYDE0YGAsIGBgMTdgYCwgYGAyMGBgLgogCiBJZiB0aGUgdmFsdWUgcmVxdWVzdGVkIGRvZXMgbm90IHJlc3VsdCBpbiBhIGNvbXBpbGUgZmxhZyBiZWluZyBhZGRlZCBmb3IKIHRoZSBjb21waWxlciBpbiB1c2UsIGEgcHJldmlvdXMgc3RhbmRhcmQgZmxhZyB3aWxsIGJlIGFkZGVkIGluc3RlYWQuICBUaGlzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NVREFfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC9wcm9wX3RndC9DVURBX1NUQU5EQVJEX1JFUVVJUkVELnJzdAppbmRleCBiMmQ1YjI4Li5jOTMwMWI1IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NVREFfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1VEQV9TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDVURBX1NUQU5EQVJEX1JFUVVJUkVECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBCb29sZWFuIGRlc2NyaWJpbmcgd2hldGhlciB0aGUgdmFsdWUgb2YgOnByb3BfdGd0OmBDVURBX1NUQU5EQVJEYCBpcyBhIHJlcXVpcmVtZW50LgogCiBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBgYE9OYGAsIHRoZW4gdGhlIHZhbHVlIG9mIHRoZQpAQCAtOCw3ICsxMCw3IEBACiBwcm9wZXJ0eSBpcyBgYE9GRmBgIG9yIHVuc2V0LCB0aGUgOnByb3BfdGd0OmBDVURBX1NUQU5EQVJEYCB0YXJnZXQgcHJvcGVydHkgaXMKIHRyZWF0ZWQgYXMgb3B0aW9uYWwgYW5kIG1heSAiZGVjYXkiIHRvIGEgcHJldmlvdXMgc3RhbmRhcmQgaWYgdGhlIHJlcXVlc3RlZCBpcwogbm90IGF2YWlsYWJsZS4gIEZvciBjb21waWxlcnMgdGhhdCBoYXZlIG5vIG5vdGlvbiBvZiBhIHN0YW5kYXJkIGxldmVsLCBzdWNoIGFzCi1NU1ZDLCB0aGlzIGhhcyBubyBlZmZlY3QuCitNU1ZDIDE4MDAgKFZpc3VhbCBTdHVkaW8gMjAxMykgYW5kIGxvd2VyLCB0aGlzIGhhcyBubyBlZmZlY3QuCiAKIFNlZSB0aGUgOm1hbnVhbDpgY21ha2UtY29tcGlsZS1mZWF0dXJlcyg3KWAgbWFudWFsIGZvciBpbmZvcm1hdGlvbiBvbgogY29tcGlsZSBmZWF0dXJlcyBhbmQgYSBsaXN0IG9mIHN1cHBvcnRlZCBjb21waWxlcnMuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NYWF9FWFRFTlNJT05TLnJzdCBiL0hlbHAvcHJvcF90Z3QvQ1hYX0VYVEVOU0lPTlMucnN0CmluZGV4IDI4MGJiM2EuLmJkYTUzMWUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQ1hYX0VYVEVOU0lPTlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1hYX0VYVEVOU0lPTlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1hYX0VYVEVOU0lPTlMKIC0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBCb29sZWFuIHNwZWNpZnlpbmcgd2hldGhlciBjb21waWxlciBzcGVjaWZpYyBleHRlbnNpb25zIGFyZSByZXF1ZXN0ZWQuCiAKIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHdoZXRoZXIgY29tcGlsZXIgc3BlY2lmaWMgZXh0ZW5zaW9ucyBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvQ1hYX1NUQU5EQVJELnJzdCBiL0hlbHAvcHJvcF90Z3QvQ1hYX1NUQU5EQVJELnJzdAppbmRleCBjY2MwMTQ3Li5mMzIyZmZlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NYWF9TVEFOREFSRC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9DWFhfU1RBTkRBUkQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1hYX1NUQU5EQVJECiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFRoZSBDKysgc3RhbmRhcmQgd2hvc2UgZmVhdHVyZXMgYXJlIHJlcXVlc3RlZCB0byBidWlsZCB0aGlzIHRhcmdldC4KIAogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIEMrKyBzdGFuZGFyZCB3aG9zZSBmZWF0dXJlcyBhcmUgcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QgYi9IZWxwL3Byb3BfdGd0L0NYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QKaW5kZXggNjk3ZDdmNi4uOGIxNzQ5MCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ1hYX1NUQU5EQVJEX1JFUVVJUkVELnJzdApAQCAtMSw2ICsxLDggQEAKIENYWF9TVEFOREFSRF9SRVFVSVJFRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBCb29sZWFuIGRlc2NyaWJpbmcgd2hldGhlciB0aGUgdmFsdWUgb2YgOnByb3BfdGd0OmBDWFhfU1RBTkRBUkRgIGlzIGEgcmVxdWlyZW1lbnQuCiAKIElmIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIGBgT05gYCwgdGhlbiB0aGUgdmFsdWUgb2YgdGhlCkBAIC04LDcgKzEwLDcgQEAKIHByb3BlcnR5IGlzIGBgT0ZGYGAgb3IgdW5zZXQsIHRoZSA6cHJvcF90Z3Q6YENYWF9TVEFOREFSRGAgdGFyZ2V0IHByb3BlcnR5IGlzCiB0cmVhdGVkIGFzIG9wdGlvbmFsIGFuZCBtYXkgImRlY2F5IiB0byBhIHByZXZpb3VzIHN0YW5kYXJkIGlmIHRoZSByZXF1ZXN0ZWQgaXMKIG5vdCBhdmFpbGFibGUuICBGb3IgY29tcGlsZXJzIHRoYXQgaGF2ZSBubyBub3Rpb24gb2YgYSBzdGFuZGFyZCBsZXZlbCwgc3VjaCBhcwotTVNWQywgdGhpcyBoYXMgbm8gZWZmZWN0LgorTVNWQyAxODAwIChWaXN1YWwgU3R1ZGlvIDIwMTMpIGFuZCBsb3dlciwgdGhpcyBoYXMgbm8gZWZmZWN0LgogCiBTZWUgdGhlIDptYW51YWw6YGNtYWtlLWNvbXBpbGUtZmVhdHVyZXMoNylgIG1hbnVhbCBmb3IgaW5mb3JtYXRpb24gb24KIGNvbXBpbGUgZmVhdHVyZXMgYW5kIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY29tcGlsZXJzLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DX0VYVEVOU0lPTlMucnN0IGIvSGVscC9wcm9wX3RndC9DX0VYVEVOU0lPTlMucnN0CmluZGV4IDA1YjE0Y2UuLmIyYWJiNDYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvQ19FWFRFTlNJT05TLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NfRVhURU5TSU9OUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDX0VYVEVOU0lPTlMKIC0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogQm9vbGVhbiBzcGVjaWZ5aW5nIHdoZXRoZXIgY29tcGlsZXIgc3BlY2lmaWMgZXh0ZW5zaW9ucyBhcmUgcmVxdWVzdGVkLgogCiBUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB3aGV0aGVyIGNvbXBpbGVyIHNwZWNpZmljIGV4dGVuc2lvbnMgc2hvdWxkIGJlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0NfU1RBTkRBUkQucnN0IGIvSGVscC9wcm9wX3RndC9DX1NUQU5EQVJELnJzdAppbmRleCBlN2Y3OTA0Li45OTlhOWU3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0NfU1RBTkRBUkQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvQ19TVEFOREFSRC5yc3QKQEAgLTEsMTMgKzEsMTUgQEAKIENfU1RBTkRBUkQKIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFRoZSBDIHN0YW5kYXJkIHdob3NlIGZlYXR1cmVzIGFyZSByZXF1ZXN0ZWQgdG8gYnVpbGQgdGhpcyB0YXJnZXQuCiAKIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBDIHN0YW5kYXJkIHdob3NlIGZlYXR1cmVzIGFyZSByZXF1ZXN0ZWQKIHRvIGJ1aWxkIHRoaXMgdGFyZ2V0LiAgRm9yIHNvbWUgY29tcGlsZXJzLCB0aGlzIHJlc3VsdHMgaW4gYWRkaW5nIGEKIGZsYWcgc3VjaCBhcyBgYC1zdGQ9Z251MTFgYCB0byB0aGUgY29tcGlsZSBsaW5lLiAgRm9yIGNvbXBpbGVycyB0aGF0Ci1oYXZlIG5vIG5vdGlvbiBvZiBhIHN0YW5kYXJkIGxldmVsLCBzdWNoIGFzIE1pY3Jvc29mdCBWaXN1YWwgQysrIGJlZm9yZQotMjAxNSBVcGRhdGUgMywgdGhpcyBoYXMgbm8gZWZmZWN0LgoraGF2ZSBubyBub3Rpb24gb2YgYSBDIHN0YW5kYXJkIGxldmVsLCBzdWNoIGFzIGFsbCB2ZXJzaW9ucyBvZgorTVNWQyBrbm93biBhcyBvZiB0aGlzIHZlcnNpb24gb2YgQ01ha2UsIHRoaXMgaGFzIG5vIGVmZmVjdC4KIAogU3VwcG9ydGVkIHZhbHVlcyBhcmUgYGA5MGBgLCBgYDk5YGAgYW5kIGBgMTFgYC4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9DX1NUQU5EQVJEX1JFUVVJUkVELnJzdCBiL0hlbHAvcHJvcF90Z3QvQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QKaW5kZXggYWNmYWQ5OC4uNTViZmYwNCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9DX1NUQU5EQVJEX1JFUVVJUkVELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0NfU1RBTkRBUkRfUkVRVUlSRUQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ19TVEFOREFSRF9SRVFVSVJFRAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogQm9vbGVhbiBkZXNjcmliaW5nIHdoZXRoZXIgdGhlIHZhbHVlIG9mIDpwcm9wX3RndDpgQ19TVEFOREFSRGAgaXMgYSByZXF1aXJlbWVudC4KIAogSWYgdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gYGBPTmBgLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUKQEAgLTgsNyArMTAsNyBAQAogcHJvcGVydHkgaXMgYGBPRkZgYCBvciB1bnNldCwgdGhlIDpwcm9wX3RndDpgQ19TVEFOREFSRGAgdGFyZ2V0IHByb3BlcnR5IGlzCiB0cmVhdGVkIGFzIG9wdGlvbmFsIGFuZCBtYXkgImRlY2F5IiB0byBhIHByZXZpb3VzIHN0YW5kYXJkIGlmIHRoZSByZXF1ZXN0ZWQgaXMKIG5vdCBhdmFpbGFibGUuICBGb3IgY29tcGlsZXJzIHRoYXQgaGF2ZSBubyBub3Rpb24gb2YgYSBzdGFuZGFyZCBsZXZlbCwgc3VjaCBhcwotTVNWQywgdGhpcyBoYXMgbm8gZWZmZWN0LgorTVNWQyAxODAwIChWaXN1YWwgU3R1ZGlvIDIwMTMpIGFuZCBsb3dlciwgdGhpcyBoYXMgbm8gZWZmZWN0LgogCiBTZWUgdGhlIDptYW51YWw6YGNtYWtlLWNvbXBpbGUtZmVhdHVyZXMoNylgIG1hbnVhbCBmb3IgaW5mb3JtYXRpb24gb24KIGNvbXBpbGUgZmVhdHVyZXMgYW5kIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY29tcGlsZXJzLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ERUJVR19QT1NURklYLnJzdCBiL0hlbHAvcHJvcF90Z3QvREVCVUdfUE9TVEZJWC5yc3QKaW5kZXggMDRlMzEyZS4uZWNhN2NiMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9ERUJVR19QT1NURklYLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0RFQlVHX1BPU1RGSVgucnN0CkBAIC0xLDcgKzEsNyBAQAogREVCVUdfUE9TVEZJWAogLS0tLS0tLS0tLS0tLQogCi1TZWUgdGFyZ2V0IHByb3BlcnR5IGBgPENPTkZJRz5fUE9TVEZJWGBgLgorU2VlIHRhcmdldCBwcm9wZXJ0eSA6cHJvcF90Z3Q6YDxDT05GSUc+X1BPU1RGSVhgLgogCi1UaGlzIHByb3BlcnR5IGlzIGEgc3BlY2lhbCBjYXNlIG9mIHRoZSBtb3JlLWdlbmVyYWwgYGA8Q09ORklHPl9QT1NURklYYGAKK1RoaXMgcHJvcGVydHkgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgdGhlIG1vcmUtZ2VuZXJhbCA6cHJvcF90Z3Q6YDxDT05GSUc+X1BPU1RGSVhgCiBwcm9wZXJ0eSBmb3IgdGhlIGBgREVCVUdgYCBjb25maWd1cmF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ERVBMT1lNRU5UX0FERElUSU9OQUxfRklMRVMucnN0IGIvSGVscC9wcm9wX3RndC9ERVBMT1lNRU5UX0FERElUSU9OQUxfRklMRVMucnN0CmluZGV4IDVlOWMxOTEuLmYxMWZlN2MgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvREVQTE9ZTUVOVF9BRERJVElPTkFMX0ZJTEVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0RFUExPWU1FTlRfQURESVRJT05BTF9GSUxFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBERVBMT1lNRU5UX0FERElUSU9OQUxfRklMRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFNldCB0aGUgV2luQ0UgcHJvamVjdCBgYEFkZGl0aW9uYWxGaWxlc2BgIGluIGBgRGVwbG95bWVudFRvb2xgYCBpbiBgYC52Y3Byb2pgYAogZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSA6Z2VuZXJhdG9yOmBWaXN1YWwgU3R1ZGlvIDkgMjAwOGAgZ2VuZXJhdG9yLgogVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBkZWJ1ZyBvbiByZW1vdGUgV2luQ0UgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkucnN0IGIvSGVscC9wcm9wX3RndC9ERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkucnN0CmluZGV4IDM2ODc2OGEuLjA2ODAyMzggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvREVQTE9ZTUVOVF9SRU1PVEVfRElSRUNUT1JZLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0RFUExPWU1FTlRfUkVNT1RFX0RJUkVDVE9SWS5yc3QKQEAgLTEsNiArMSw4IEBACiBERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogU2V0IHRoZSBXaW5DRSBwcm9qZWN0IGBgUmVtb3RlRGlyZWN0b3J5YGAgaW4gYGBEZXBsb3ltZW50VG9vbGBgIGFuZAogYGBSZW1vdGVFeGVjdXRhYmxlYGAgaW4gYGBEZWJ1Z2dlclRvb2xgYCBpbiBgYC52Y3Byb2pgYCBmaWxlcyBnZW5lcmF0ZWQKIGJ5IHRoZSA6Z2VuZXJhdG9yOmBWaXN1YWwgU3R1ZGlvIDkgMjAwOGAgZ2VuZXJhdG9yLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9ERVBSRUNBVElPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L0RFUFJFQ0FUSU9OLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWNhODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9ERVBSRUNBVElPTi5yc3QKQEAgLTAsMCArMSw5IEBACitERVBSRUNBVElPTgorLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitEZXByZWNhdGlvbiBtZXNzYWdlIGZyb20gaW1wb3J0ZWQgdGFyZ2V0J3MgZGV2ZWxvcGVyLgorCitgYERFUFJFQ0FUSU9OYGAgaXMgdGhlIG1lc3NhZ2UgcmVnYXJkaW5nIGEgZGVwcmVjYXRpb24gc3RhdHVzIHRvIGJlIGRpc3BsYXllZAordG8gZG93bnN0cmVhbSB1c2VycyBvZiBhIHRhcmdldC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMucnN0IGIvSGVscC9wcm9wX3RndC9ESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKaW5kZXggNGNlZjAyMy4uN2IzODI2YiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9ESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9ESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKQEAgLTEsNiArMSw4IEBACiBESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBEaXNhYmxlcyB0aGUgcHJlY29tcGlsYXRpb24gb2YgaGVhZGVyIGZpbGVzIHNwZWNpZmllZCBieQogOnByb3BfdGd0OmBQUkVDT01QSUxFX0hFQURFUlNgIHByb3BlcnR5LgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdCBiL0hlbHAvcHJvcF90Z3QvRE9UTkVUX1RBUkdFVF9GUkFNRVdPUksucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTRlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdApAQCAtMCwwICsxLDE1IEBACitET1RORVRfVEFSR0VUX0ZSQU1FV09SSworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitTcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsuCisKK1VzZWQgdG8gc3BlY2lmeSB0aGUgLk5FVCB0YXJnZXQgZnJhbWV3b3JrIGZvciBDKysvQ0xJIGFuZCBDIy4gIEZvcgorZXhhbXBsZTogYGBuZXRjb3JlYXBwMi4xYGAuCisKK1RoaXMgcHJvcGVydHkgaXMgb25seSBldmFsdWF0ZWQgZm9yIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AKK1ZTIDIwMTAgYW5kIGFib3ZlLgorCitDYW4gYmUgaW5pdGlhbGl6ZWQgZm9yIGFsbCB0YXJnZXRzIHVzaW5nIHRoZSB2YXJpYWJsZQorOnZhcmlhYmxlOmBDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS2AuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdAppbmRleCBjMTAwMzI2Li5mYmQxYWFiIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTi5yc3QKQEAgLTEsMTMgKzEsMTcgQEAKIERPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBTcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsgdmVyc2lvbi4KIAotVXNlZCB0byBzcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsgdmVyc2lvbiBmb3IgQysrL0NMSS4gIEZvcgotZXhhbXBsZTogYGB2NC41YGAuCitVc2VkIHRvIHNwZWNpZnkgdGhlIC5ORVQgdGFyZ2V0IGZyYW1ld29yayB2ZXJzaW9uIGZvciBDKysvQ0xJIGFuZCBDIy4KK0ZvciBleGFtcGxlOiBgYHY0LjVgYC4KIAogVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGV2YWx1YXRlZCBmb3IgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYAogVlMgMjAxMCBhbmQgYWJvdmUuCiAKLUNhbiBiZSBpbml0aWFsaXplZCBmb3IgYWxsIHRhcmdldHMgdXNpbmcgdGhlIHZhcmlhYmxlCi06dmFyaWFibGU6YENNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT05gLgorVG8gaW5pdGlhbGl6ZSB0aGlzIHZhcmlhYmxlIGZvciBhbGwgdGFyZ2V0cyBzZXQKKzp2YXJpYWJsZTpgQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktgIG9yCis6dmFyaWFibGU6YENNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT05gLiBJZiBib3RoIGFyZSBzZXQsCit0aGUgbGF0dGVyIGlzIGlnbm9yZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0VYQ0xVREVfRlJPTV9BTEwucnN0IGIvSGVscC9wcm9wX3RndC9FWENMVURFX0ZST01fQUxMLnJzdAppbmRleCAzYWEyOTZkLi5mMDIwMGYzIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0VYQ0xVREVfRlJPTV9BTEwucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvRVhDTFVERV9GUk9NX0FMTC5yc3QKQEAgLTEzLDkgKzEzLDE2IEBACiAKIFdpdGggYGBFWENMVURFX0ZST01fQUxMYGAgc2V0IHRvIGZhbHNlIG9yIG5vdCBzZXQgYXQgYWxsLCB0aGUgdGFyZ2V0CiB3aWxsIGJlIGJyb3VnaHQgdXAgdG8gZGF0ZSBhcyBwYXJ0IG9mIGRvaW5nIGEgYGBtYWtlIGluc3RhbGxgYCBvciBpdHMKLWVxdWl2YWxlbnQgZm9yIHRoZSBDTWFrZSBnZW5lcmF0b3IgYmVpbmcgdXNlZC4gIElmIGEgdGFyZ2V0IGhhcwotYGBFWENMVURFX0ZST01fQUxMYGAgc2V0IHRvIHRydWUsIHRoZW4gYW55IGF0dGVtcHQgdG8gaW5zdGFsbCB0aGF0Ci10YXJnZXQgaGFzIHVuZGVmaW5lZCBiZWhhdmlvci4gIE5vdGUgdGhhdCBzdWNoIGEgdGFyZ2V0IGNhbiBzdGlsbCBzYWZlbHkKLWJlIGxpc3RlZCBpbiBhbiA6Y29tbWFuZDpgaW5zdGFsbChUQVJHRVRTKWAgY29tbWFuZCBhcyBsb25nIGFzIHRoZSBpbnN0YWxsCi1jb21wb25lbnRzIHRoZSB0YXJnZXQgYmVsb25ncyB0byBhcmUgbm90IHBhcnQgb2YgdGhlIHNldCBvZiBjb21wb25lbnRzCi10aGF0IGFueXRoaW5nIHRyaWVzIHRvIGluc3RhbGwuCitlcXVpdmFsZW50IGZvciB0aGUgQ01ha2UgZ2VuZXJhdG9yIGJlaW5nIHVzZWQuCisKK0lmIGEgdGFyZ2V0IGhhcyBgYEVYQ0xVREVfRlJPTV9BTExgYCBzZXQgdG8gdHJ1ZSwgaXQgbWF5IHN0aWxsIGJlIGxpc3RlZAoraW4gYW4gOmNvbW1hbmQ6YGluc3RhbGwoVEFSR0VUUylgIGNvbW1hbmQsIGJ1dCB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3IKK2Vuc3VyaW5nIHRoYXQgdGhlIHRhcmdldCdzIGJ1aWxkIGFydGlmYWN0cyBhcmUgbm90IG1pc3Npbmcgb3Igb3V0ZGF0ZWQgd2hlbgorYW4gaW5zdGFsbCBpcyBwZXJmb3JtZWQuCisKK1RoaXMgcHJvcGVydHkgbWF5IHVzZSAiZ2VuZXJhdG9yIGV4cHJlc3Npb25zIiB3aXRoIHRoZSBzeW50YXggYGAkPC4uLj5gYC4gU2VlCit0aGUgOm1hbnVhbDpgY21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpYCBtYW51YWwgZm9yIGF2YWlsYWJsZSBleHByZXNzaW9ucy4KKworT25seSB0aGUgIk5pbmphIE11bHRpLUNvbmZpZyIgZ2VuZXJhdG9yIHN1cHBvcnRzIGEgcHJvcGVydHkgdmFsdWUgdGhhdCB2YXJpZXMgYnkKK2NvbmZpZ3VyYXRpb24uICBGb3IgYWxsIG90aGVyIGdlbmVyYXRvcnMgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgbXVzdCBiZSB0aGUKK3NhbWUgZm9yIGFsbCBjb25maWd1cmF0aW9ucy4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvRVhQT1JUX1BST1BFUlRJRVMucnN0IGIvSGVscC9wcm9wX3RndC9FWFBPUlRfUFJPUEVSVElFUy5yc3QKaW5kZXggYmNmNDdhNi4uMzRjMDU0ZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9FWFBPUlRfUFJPUEVSVElFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9FWFBPUlRfUFJPUEVSVElFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBFWFBPUlRfUFJPUEVSVElFUwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBMaXN0IGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBleHBvcnQgZm9yIGEgdGFyZ2V0LgogCiBUaGlzIHByb3BlcnR5IGNvbnRhaW5zIGEgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHNob3VsZCBiZSBleHBvcnRlZCBieQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfQ09ORklHLnJzdCBiL0hlbHAvcHJvcF90Z3QvRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYX0NPTkZJRy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkMGMxZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF90Z3QvRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYX0NPTkZJRy5yc3QKQEAgLTAsMCArMSwyOCBAQAorRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYXzxDT05GSUc+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitQb3N0Zml4IHRvIGFwcGVuZCB0byB0aGUgZnJhbWV3b3JrIGZpbGUgbmFtZSBmb3IgY29uZmlndXJhdGlvbiBgYDxDT05GSUc+YGAsCit3aGVuIHVzaW5nIGEgbXVsdGktY29uZmlnIGdlbmVyYXRvciAobGlrZSBYY29kZSBhbmQgTmluamEgTXVsdGktQ29uZmlnKS4KKworV2hlbiBidWlsZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gYGA8Q09ORklHPmBgIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5CitpcyBhcHBlbmRlZCB0byB0aGUgZnJhbWV3b3JrIGZpbGUgbmFtZSBidWlsdCBvbiBkaXNrLgorCitGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBmcmFtZXdvcmsgY2FsbGVkIGBgbXlfZndgYCwgYSB2YWx1ZSBvZiBgYF9kZWJ1Z2BgCitmb3IgdGhlIGBgRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYX0RFQlVHYGAgcHJvcGVydHksIGFuZAorYGBEZWJ1ZztSZWxlYXNlYGAgaW4gOnZhcmlhYmxlOmBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTYCwgdGhlIGZvbGxvd2luZworcmVsZXZhbnQgZmlsZXMgd291bGQgYmUgY3JlYXRlZCBmb3IgdGhlIGBgRGVidWdgYCBhbmQgYGBSZWxlYXNlYGAKK2NvbmZpZ3VyYXRpb25zOgorCistIGBgUmVsZWFzZS9teV9mdy5mcmFtZXdvcmsvbXlfZndgYAorLSBgYFJlbGVhc2UvbXlfZncuZnJhbWV3b3JrL1ZlcnNpb25zL0EvbXlfZndgYAorLSBgYERlYnVnL215X2Z3LmZyYW1ld29yay9teV9md19kZWJ1Z2BgCistIGBgRGVidWcvbXlfZncuZnJhbWV3b3JrL1ZlcnNpb25zL0EvbXlfZndfZGVidWdgYAorCitGb3IgZnJhbWV3b3JrIHRhcmdldHMsIHRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZQorOnZhcmlhYmxlOmBDTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfPENPTkZJRz5gIHZhcmlhYmxlIGlmIGl0CitpcyBzZXQgd2hlbiBhIHRhcmdldCBpcyBjcmVhdGVkLgorCitUaGlzIHByb3BlcnR5IGlzIGlnbm9yZWQgZm9yIG5vbi1mcmFtZXdvcmsgdGFyZ2V0cywgYW5kIHdoZW4gdXNpbmcgc2luZ2xlCitjb25maWcgZ2VuZXJhdG9ycy4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvRlJBTUVXT1JLX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9GUkFNRVdPUktfVkVSU0lPTi5yc3QKaW5kZXggYzJhZTdiOS4uMzhiODEzNyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9GUkFNRVdPUktfVkVSU0lPTi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9GUkFNRVdPUktfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBGUkFNRVdPUktfVkVSU0lPTgogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFZlcnNpb24gb2YgYSBmcmFtZXdvcmsgY3JlYXRlZCB1c2luZyB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktgIHRhcmdldAogcHJvcGVydHkgKGUuZy4gYGBBYGApLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0ZvcnRyYW5fUFJFUFJPQ0VTUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0ZvcnRyYW5fUFJFUFJPQ0VTUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlMmZiYQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF90Z3QvRm9ydHJhbl9QUkVQUk9DRVNTLnJzdApAQCAtMCwwICsxLDI1IEBACitGb3J0cmFuX1BSRVBST0NFU1MKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK0NvbnRyb2wgd2hldGhlciB0aGUgRm9ydHJhbiBzb3VyY2UgZmlsZSBzaG91bGQgYmUgdW5jb25kaXRpb25hbGx5CitwcmVwcm9jZXNzZWQuCisKK0lmIHVuc2V0IG9yIGVtcHR5LCByZWx5IG9uIHRoZSBjb21waWxlciB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZQorc2hvdWxkIGJlIHByZXByb2Nlc3NlZC4gSWYgZXhwbGljaXRseSBzZXQgdG8gYGBPRkZgYCB0aGVuIHRoZSBmaWxlIGRvZXMgbm90CituZWVkIHRvIGJlIHByZXByb2Nlc3NlZC4gSWYgZXhwbGljaXRseSBzZXQgdG8gYGBPTmBgLCB0aGVuIHRoZSBmaWxlIGRvZXMKK25lZWQgdG8gYmUgcHJlcHJvY2Vzc2VkIGFzIHBhcnQgb2YgdGhlIGNvbXBpbGF0aW9uIHN0ZXAuCisKK1doZW4gdXNpbmcgdGhlIDpnZW5lcmF0b3I6YE5pbmphYCBnZW5lcmF0b3IsIGFsbCBzb3VyY2UgZmlsZXMgYXJlCitmaXJzdCBwcmVwcm9jZXNzZWQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgbW9kdWxlIGRlcGVuZGVuY3kKK2luZm9ybWF0aW9uLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gYGBPRkZgYCB3aWxsIG1ha2UgYGBOaW5qYWBgCitza2lwIHRoaXMgc3RlcC4KKworVXNlIHRoZSBzb3VyY2Utc3BlY2lmaWMgOnByb3Bfc2Y6YEZvcnRyYW5fUFJFUFJPQ0VTU2AgcHJvcGVydHkgaWYgYSBzaW5nbGUKK2ZpbGUgbmVlZHMgdG8gYmUgcHJlcHJvY2Vzc2VkLiBJZiB0aGUgdmFyaWFibGUKKzp2YXJpYWJsZTpgQ01BS0VfRm9ydHJhbl9QUkVQUk9DRVNTYCBpcyBzZXQgd2hlbiBhIHRhcmdldCBpcyBjcmVhdGVkIGl0cwordmFsdWUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoaXMgcHJvcGVydHkuCisKKy4uIG5vdGU6OiBGb3Igc29tZSBjb21waWxlcnMsIGBgTkFHYGAsIGBgUEdJYGAgYW5kIGBgU29sYXJpcyBTdHVkaW9gYCwKKyAgICAgICAgICBzZXR0aW5nIHRoaXMgdG8gYGBPRkZgYCB3aWxsIGhhdmUgbm8gZWZmZWN0LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9HSFNfSU5URUdSSVRZX0FQUC5yc3QgYi9IZWxwL3Byb3BfdGd0L0dIU19JTlRFR1JJVFlfQVBQLnJzdAppbmRleCBiNjY5NzgxLi5jY2NkMDg3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0dIU19JTlRFR1JJVFlfQVBQLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0dIU19JTlRFR1JJVFlfQVBQLnJzdApAQCAtMSw2ICsxLDggQEAKIEdIU19JTlRFR1JJVFlfQVBQCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIGBgT05gYCAvIGBgT0ZGYGAgYm9vbGVhbiB0byBkZXRlcm1pbmUgaWYgYW4gZXhlY3V0YWJsZSB0YXJnZXQgc2hvdWxkCiBiZSB0cmVhdGVkIGFzIGFuIGBJbnRlZ3JpdHkgQXBwbGljYXRpb25gLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRS5yc3QKaW5kZXggMTFjZTBiMjIuLmZlNmI4ZTYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvR0hTX05PX1NPVVJDRV9HUk9VUF9GSUxFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBHSFNfTk9fU09VUkNFX0dST1VQX0ZJTEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIGBgT05gYCAvIGBgT0ZGYGAgYm9vbGVhbiB0byBjb250cm9sIGlmIHRoZSBwcm9qZWN0IGZpbGUgZm9yIGEgdGFyZ2V0IHNob3VsZAogYmUgb25lIHNpbmdsZSBmaWxlIG9yIG11bHRpcGxlIGZpbGVzLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0NPTU1PTl9MQU5HVUFHRV9SVU5USU1FLnJzdCBiL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfQ09NTU9OX0xBTkdVQUdFX1JVTlRJTUUucnN0CmluZGV4IDk5ZTNiYzQuLjhjMjBlMDcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfQ09NTU9OX0xBTkdVQUdFX1JVTlRJTUUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfQ09NTU9OX0xBTkdVQUdFX1JVTlRJTUUucnN0CkBAIC0xLDYgKzEsOCBAQAogSU1QT1JURURfQ09NTU9OX0xBTkdVQUdFX1JVTlRJTUUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogUHJvcGVydHkgdG8gZGVmaW5lIGlmIHRoZSB0YXJnZXQgdXNlcyBgYEMrKy9DTElgYC4KIAogSWdub3JlZCBmb3Igbm9uLWltcG9ydGVkIHRhcmdldHMuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0dMT0JBTC5yc3QgYi9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0dMT0JBTC5yc3QKaW5kZXggMWZlY2EwNC4uMTc2MTI3ZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9HTE9CQUwucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfR0xPQkFMLnJzdApAQCAtMSw2ICsxLDggQEAKIElNUE9SVEVEX0dMT0JBTAogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogSW5kaWNhdGlvbiBvZiB3aGV0aGVyIGFuIDpyZWY6YElNUE9SVEVEIHRhcmdldCA8SW1wb3J0ZWQgVGFyZ2V0cz5gIGlzCiBnbG9iYWxseSB2aXNpYmxlLgogCkBAIC0xNiw3ICsxOCwxNSBAQAogdGFyZ2V0IHRvIGdsb2JhbCBzY29wZS4gVGhpcyBwcm9tb3Rpb24gY2FuIG9ubHkgYmUgZG9uZSBpbiB0aGUgc2FtZQogZGlyZWN0b3J5IHdoZXJlIHRoYXQgYGBJTVBPUlRFRGBgIHRhcmdldCB3YXMgY3JlYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuCiAKLU9uY2UgYW4gaW1wb3J0ZWQgdGFyZ2V0IGhhcyBiZWVuIG1hZGUgZ2xvYmFsLCBpdCBjYW5ub3QgYmUgY2hhbmdlZCBiYWNrIHRvCi1ub24tZ2xvYmFsLiBUaGVyZWZvcmUsIGlmIGEgcHJvamVjdCBzZXRzIHRoaXMgcHJvcGVydHksIGl0IG1heSBvbmx5Ci1wcm92aWRlIGEgdmFsdWUgb2YgVHJ1ZS4gQ01ha2Ugd2lsbCBpc3N1ZSBhbiBlcnJvciBpZiB0aGUgcHJvamVjdCB0cmllcyB0bwotc2V0IHRoZSBwcm9wZXJ0eSB0byBhIG5vbi1UcnVlIHZhbHVlLCBldmVuIGlmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBGYWxzZS4KKy4uIG5vdGU6OgorCisgIE9uY2UgYW4gaW1wb3J0ZWQgdGFyZ2V0IGhhcyBiZWVuIG1hZGUgZ2xvYmFsLCBpdCBjYW5ub3QgYmUgY2hhbmdlZCBiYWNrIHRvCisgIG5vbi1nbG9iYWwuIFRoZXJlZm9yZSwgaWYgYSBwcm9qZWN0IHNldHMgdGhpcyBwcm9wZXJ0eSwgaXQgbWF5IG9ubHkKKyAgcHJvdmlkZSBhIHZhbHVlIG9mIFRydWUuIENNYWtlIHdpbGwgaXNzdWUgYW4gZXJyb3IgaWYgdGhlIHByb2plY3QgdHJpZXMgdG8KKyAgc2V0IHRoZSBwcm9wZXJ0eSB0byBhIG5vbi1UcnVlIHZhbHVlLCBldmVuIGlmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBGYWxzZS4KKworLi4gbm90ZTo6CisKKyAgTG9jYWwgOnJlZjpgQUxJQVMgdGFyZ2V0cyA8QWxpYXMgVGFyZ2V0cz5gIGNyZWF0ZWQgYmVmb3JlIHByb21vdGluZyBhbgorICA6cmVmOmBJTVBPUlRFRCB0YXJnZXQgPEltcG9ydGVkIFRhcmdldHM+YCBmcm9tIGBgTE9DQUxgYCB0byBgYEdMT0JBTGBgLCBrZWVwCisgIHRoZWlyIGluaXRpYWwgc2NvcGUgKHNlZSA6cHJvcF90Z3Q6YEFMSUFTX0dMT0JBTGAgdGFyZ2V0IHByb3BlcnR5KS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfTElCTkFNRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0xJQk5BTUUucnN0CmluZGV4IDE5NDNkYmEuLjdhODM5MDYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfTElCTkFNRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9MSUJOQU1FLnJzdApAQCAtMSw2ICsxLDggQEAKIElNUE9SVEVEX0xJQk5BTUUKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFNwZWNpZnkgdGhlIGxpbmsgbGlicmFyeSBuYW1lIGZvciBhbiA6cmVmOmBpbXBvcnRlZCA8SW1wb3J0ZWQgVGFyZ2V0cz5gCiA6cmVmOmBJbnRlcmZhY2UgTGlicmFyeSA8SW50ZXJmYWNlIExpYnJhcmllcz5gLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX0xJQk5BTUVfQ09ORklHLnJzdCBiL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfTElCTkFNRV9DT05GSUcucnN0CmluZGV4IGEyOGI4MzguLmRmNjQ3NjkgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfTElCTkFNRV9DT05GSUcucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfTElCTkFNRV9DT05GSUcucnN0CkBAIC0xLDYgKzEsOCBAQAogSU1QT1JURURfTElCTkFNRV88Q09ORklHPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogPENPTkZJRz4tc3BlY2lmaWMgdmVyc2lvbiBvZiA6cHJvcF90Z3Q6YElNUE9SVEVEX0xJQk5BTUVgIHByb3BlcnR5LgogCiBDb25maWd1cmF0aW9uIG5hbWVzIGNvcnJlc3BvbmQgdG8gdGhvc2UgcHJvdmlkZWQgYnkgdGhlIHByb2plY3QgZnJvbQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9PQkpFQ1RTLnJzdCBiL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfT0JKRUNUUy5yc3QKaW5kZXggNTBhMzI5Zi4uYmJiY2Q4NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9PQkpFQ1RTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lNUE9SVEVEX09CSkVDVFMucnN0CkBAIC0xLDYgKzEsOCBAQAogSU1QT1JURURfT0JKRUNUUwogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogQSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2YgYWJzb2x1dGUgcGF0aHMgdG8gdGhlIG9iamVjdAogZmlsZXMgb24gZGlzayBmb3IgYW4gOnJlZjpgaW1wb3J0ZWQgPEltcG9ydGVkIHRhcmdldHM+YAogOnJlZjpgb2JqZWN0IGxpYnJhcnkgPG9iamVjdCBsaWJyYXJpZXM+YC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvSU1QT1JURURfT0JKRUNUU19DT05GSUcucnN0IGIvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9PQkpFQ1RTX0NPTkZJRy5yc3QKaW5kZXggNDQxOWVkMS4uYjEyY2EzOCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9PQkpFQ1RTX0NPTkZJRy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9JTVBPUlRFRF9PQkpFQ1RTX0NPTkZJRy5yc3QKQEAgLTEsNiArMSw4IEBACiBJTVBPUlRFRF9PQkpFQ1RTXzxDT05GSUc+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiA8Q09ORklHPi1zcGVjaWZpYyB2ZXJzaW9uIG9mIDpwcm9wX3RndDpgSU1QT1JURURfT0JKRUNUU2AgcHJvcGVydHkuCiAKIENvbmZpZ3VyYXRpb24gbmFtZXMgY29ycmVzcG9uZCB0byB0aG9zZSBwcm92aWRlZCBieSB0aGUgcHJvamVjdCBmcm9tCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfTkFNRV9ESVIucnN0IGIvSGVscC9wcm9wX3RndC9JTlNUQUxMX05BTUVfRElSLnJzdAppbmRleCAyMjE2MDcyLi43NDc2MTVhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfTkFNRV9ESVIucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU5TVEFMTF9OQU1FX0RJUi5yc3QKQEAgLTEwLDMgKzEwLDcgQEAKIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQogOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX05BTUVfRElSYCBpZiBpdCBpcyBzZXQgd2hlbiBhIHRhcmdldCBpcwogY3JlYXRlZC4KKworVGhpcyBwcm9wZXJ0eSBzdXBwb3J0cyA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgorSW4gcGFydGljdWxhciwgdGhlIGBgJDxJTlNUQUxMX1BSRUZJWD5gYCBnZW5lcmF0b3IgZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlCitkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlIGluc3RhbGwtdGltZSBwcmVmaXguCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRILnJzdCBiL0hlbHAvcHJvcF90Z3QvSU5TVEFMTF9SRU1PVkVfRU5WSVJPTk1FTlRfUlBBVEgucnN0CmluZGV4IDcyZGNhYTAuLmY0MWU0MWMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU5TVEFMTF9SRU1PVkVfRU5WSVJPTk1FTlRfUlBBVEgucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU5TVEFMTF9SRU1PVkVfRU5WSVJPTk1FTlRfUlBBVEgucnN0CkBAIC0xLDYgKzEsOCBAQAogSU5TVEFMTF9SRU1PVkVfRU5WSVJPTk1FTlRfUlBBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQ29udHJvbHMgd2hldGhlciB0b29sY2hhaW4tZGVmaW5lZCBycGF0aHMgc2hvdWxkIGJlIHJlbW92ZWQgZHVyaW5nIGluc3RhbGxhdGlvbi4KIAogV2hlbiBhIHRhcmdldCBpcyBiZWluZyBpbnN0YWxsZWQsIENNYWtlIG1heSBuZWVkIHRvIHJld3JpdGUgaXRzIHJwYXRoCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUlBBVEgucnN0IGIvSGVscC9wcm9wX3RndC9JTlNUQUxMX1JQQVRILnJzdAppbmRleCA5M2I0NDg4Li40NTQ5YjkyIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUlBBVEgucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU5TVEFMTF9SUEFUSC5yc3QKQEAgLTgsNSArOCw5IEBACiBieSB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIDp2YXJpYWJsZTpgQ01BS0VfSU5TVEFMTF9SUEFUSGAgaWYgaXQgaXMgc2V0IHdoZW4KIGEgdGFyZ2V0IGlzIGNyZWF0ZWQuCiAKK0JlY2F1c2UgdGhlIHJwYXRoIG1heSBjb250YWluIGBgJHtPUklHSU59YGAsIHdoaWNoIGNvaW5jaWRlcyB3aXRoIENNYWtlIHN5bnRheCwKK3RoZSBjb250ZW50cyBvZiBgYElOU1RBTExfUlBBVEhgYCBhcmUgcHJvcGVybHkgZXNjYXBlZCBpbiB0aGUKK2BgY21ha2VfaW5zdGFsbC5jbWFrZWBgIHNjcmlwdCAoc2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMDk1YC4pCisKIFRoaXMgcHJvcGVydHkgc3VwcG9ydHMKIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSC5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSC5yc3QKaW5kZXggZDhiZTk1NC4uZDE2YTdhMSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEgucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRILnJzdApAQCAtMyw4ICszLDEyIEBACiAKIEFkZCBwYXRocyB0byBsaW5rZXIgc2VhcmNoIGFuZCBpbnN0YWxsZWQgcnBhdGguCiAKLWBgSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIYGAgaXMgYSBib29sZWFuIHRoYXQgaWYgc2V0IHRvIGBgVHJ1ZWBgIHdpbGwKLWFwcGVuZCBkaXJlY3RvcmllcyBpbiB0aGUgbGlua2VyIHNlYXJjaCBwYXRoIGFuZCBvdXRzaWRlIHRoZSBwcm9qZWN0Ci10byB0aGUgOnByb3BfdGd0OmBJTlNUQUxMX1JQQVRIYC4gIFRoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mCi10aGUgdmFyaWFibGUgYGBDTUFLRV9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEhgYCBpZiBpdCBpcyBzZXQgd2hlbiBhCi10YXJnZXQgaXMgY3JlYXRlZC4KK2BgSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIYGAgaXMgYSBib29sZWFuIHRoYXQgaWYgc2V0IHRvIGBgVHJ1ZWBgCit3aWxsIGFwcGVuZCB0byB0aGUgcnVudGltZSBzZWFyY2ggcGF0aCAocnBhdGgpIG9mIGluc3RhbGxlZCBiaW5hcmllcworYW55IGRpcmVjdG9yaWVzIG91dHNpZGUgdGhlIHByb2plY3QgdGhhdCBhcmUgaW4gdGhlIGxpbmtlciBzZWFyY2ggcGF0aCBvcgorY29udGFpbiBsaW5rZWQgbGlicmFyeSBmaWxlcy4gIFRoZSBkaXJlY3RvcmllcyBhcmUgYXBwZW5kZWQgYWZ0ZXIgdGhlCit2YWx1ZSBvZiB0aGUgOnByb3BfdGd0OmBJTlNUQUxMX1JQQVRIYCB0YXJnZXQgcHJvcGVydHkuCisKK1RoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQorOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEhgIGlmIGl0IGlzIHNldCB3aGVuIGEgdGFyZ2V0IGlzCitjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfQ09NUElMRV9GRUFUVVJFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9DT01QSUxFX0ZFQVRVUkVTLnJzdAppbmRleCAzMWI1OTRmLi4wZGIzYjBjIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9DT01QSUxFX0ZFQVRVUkVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9DT01QSUxFX0ZFQVRVUkVTLnJzdApAQCAtMSw2ICsxLDggQEAKIElOVEVSRkFDRV9DT01QSUxFX0ZFQVRVUkVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogLi4gfHByb3BlcnR5X25hbWV8IHJlcGxhY2U6OiBjb21waWxlIGZlYXR1cmVzCiAuLiB8Y29tbWFuZF9uYW1lfCByZXBsYWNlOjogOmNvbW1hbmQ6YHRhcmdldF9jb21waWxlX2ZlYXR1cmVzYAogLi4gfFBST1BFUlRZX0lOVEVSRkFDRV9OQU1FfCByZXBsYWNlOjogYGBJTlRFUkZBQ0VfQ09NUElMRV9GRUFUVVJFU2BgCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9MSU5LX0RFUEVORFMucnN0IGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19ERVBFTkRTLnJzdAppbmRleCA3OTA1NTRkLi45YzgyNzVkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9MSU5LX0RFUEVORFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX0xJTktfREVQRU5EUy5yc3QKQEAgLTEsNiArMSw4IEBACiBJTlRFUkZBQ0VfTElOS19ERVBFTkRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogQWRkaXRpb25hbCBwdWJsaWMgaW50ZXJmYWNlIGZpbGVzIG9uIHdoaWNoIGEgdGFyZ2V0IGJpbmFyeSBkZXBlbmRzIGZvciBsaW5raW5nLgogCiBUaGlzIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBvbmx5IGJ5IDpnZW5lcmF0b3I6YE5pbmphYCBhbmQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX0xJTktfRElSRUNUT1JJRVMucnN0IGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFUy5yc3QKaW5kZXggNTZhNGVjMC4uZGUxZGFiYiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBJTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiAuLiB8cHJvcGVydHlfbmFtZXwgcmVwbGFjZTo6IGxpbmsgZGlyZWN0b3JpZXMKIC4uIHxjb21tYW5kX25hbWV8IHJlcGxhY2U6OiA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXNgCiAuLiB8UFJPUEVSVFlfSU5URVJGQUNFX05BTUV8IHJlcGxhY2U6OiBgYElOVEVSRkFDRV9MSU5LX0RJUkVDVE9SSUVTYGAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX0xJTktfT1BUSU9OUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9MSU5LX09QVElPTlMucnN0CmluZGV4IGMyOTNiOTguLjQyNDVmZTkgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX0xJTktfT1BUSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfTElOS19PUFRJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIElOVEVSRkFDRV9MSU5LX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiAuLiB8cHJvcGVydHlfbmFtZXwgcmVwbGFjZTo6IGxpbmsgb3B0aW9ucwogLi4gfGNvbW1hbmRfbmFtZXwgcmVwbGFjZTo6IDpjb21tYW5kOmB0YXJnZXRfbGlua19vcHRpb25zYAogLi4gfFBST1BFUlRZX0lOVEVSRkFDRV9OQU1FfCByZXBsYWNlOjogYGBJTlRFUkZBQ0VfTElOS19PUFRJT05TYGAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9QUkVDT01QSUxFX0hFQURFUlMucnN0CmluZGV4IGUyODU0MDcuLjIyOTkyNjQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvSU5URVJGQUNFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfUFJFQ09NUElMRV9IRUFERVJTLnJzdApAQCAtMSw2ICsxLDggQEAKIElOVEVSRkFDRV9QUkVDT01QSUxFX0hFQURFUlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBMaXN0IG9mIGludGVyZmFjZSBoZWFkZXIgZmlsZXMgdG8gcHJlY29tcGlsZSBpbnRvIGNvbnN1bWluZyB0YXJnZXRzLgogCiBUYXJnZXRzIG1heSBwb3B1bGF0ZSB0aGlzIHByb3BlcnR5IHRvIHB1Ymxpc2ggdGhlIGhlYWRlciBmaWxlcwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JTlRFUkZBQ0VfU09VUkNFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9TT1VSQ0VTLnJzdAppbmRleCBhMjI0YjY4Li43NTljNDgyIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9TT1VSQ0VTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lOVEVSRkFDRV9TT1VSQ0VTLnJzdApAQCAtMSw2ICsxLDggQEAKIElOVEVSRkFDRV9TT1VSQ0VTCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogTGlzdCBvZiBpbnRlcmZhY2Ugc291cmNlcyB0byBjb21waWxlIGludG8gY29uc3VtaW5nIHRhcmdldHMuCiAKIFRhcmdldHMgbWF5IHBvcHVsYXRlIHRoaXMgcHJvcGVydHkgdG8gcHVibGlzaCB0aGUgc291cmNlcwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9JT1NfSU5TVEFMTF9DT01CSU5FRC5yc3QgYi9IZWxwL3Byb3BfdGd0L0lPU19JTlNUQUxMX0NPTUJJTkVELnJzdAppbmRleCA1OWY2N2E3Li4yM2E4NmU2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0lPU19JTlNUQUxMX0NPTUJJTkVELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0lPU19JTlNUQUxMX0NPTUJJTkVELnJzdApAQCAtMSw2ICsxLDggQEAKIElPU19JTlNUQUxMX0NPTUJJTkVECiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogQnVpbGQgYSBjb21iaW5lZCAoZGV2aWNlIGFuZCBzaW11bGF0b3IpIHRhcmdldCB3aGVuIGluc3RhbGxpbmcuCiAKIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gc2V0IHRvIGZhbHNlICh3aGljaCBpcyB0aGUgZGVmYXVsdCkgdGhlbiBpdCB3aWxsCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0pPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSLnJzdCBiL0hlbHAvcHJvcF90Z3QvSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyY2FjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L0pPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSLnJzdApAQCAtMCwwICsxLDIzIEBACitKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitOaW5qYSBvbmx5OiBQb29sIHVzZWQgZm9yIGdlbmVyYXRpbmcgcHJlLWNvbXBpbGVkIGhlYWRlcnMuCisKK1RoZSBudW1iZXIgb2YgcGFyYWxsZWwgY29tcGlsZSBwcm9jZXNzZXMgY291bGQgYmUgbGltaXRlZCBieSBkZWZpbmluZworcG9vbHMgd2l0aCB0aGUgZ2xvYmFsIDpwcm9wX2dibDpgSk9CX1BPT0xTYAorcHJvcGVydHkgYW5kIHRoZW4gc3BlY2lmeWluZyBoZXJlIHRoZSBwb29sIG5hbWUuCisKK0ZvciBpbnN0YW5jZToKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBteWV4ZSBQUk9QRVJUWSBKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUiB0d29fam9icykKKworVGhpcyBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCBieSB0aGUgdmFsdWUgb2YKKzp2YXJpYWJsZTpgQ01BS0VfSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVJgLgorCitJZiBuZWl0aGVyIDpwcm9wX3RndDpgSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVJgIG5vcgorOnZhcmlhYmxlOmBDTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUmAgYXJlIHNldCB0aGVuCis6cHJvcF90Z3Q6YEpPQl9QT09MX0NPTVBJTEVgIHdpbGwgYmUgdXNlZCBmb3IgdGhpcyB0YXNrLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9MQU5HX0NMQU5HX1RJRFkucnN0IGIvSGVscC9wcm9wX3RndC9MQU5HX0NMQU5HX1RJRFkucnN0CmluZGV4IDJiZmVmNjYuLjdmYzIzNzIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTEFOR19DTEFOR19USURZLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0xBTkdfQ0xBTkdfVElEWS5yc3QKQEAgLTEsNiArMSw4IEBACiA8TEFORz5fQ0xBTkdfVElEWQogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIFRoaXMgcHJvcGVydHkgaXMgaW1wbGVtZW50ZWQgb25seSB3aGVuIGBgPExBTkc+YGAgaXMgYGBDYGAgb3IgYGBDWFhgYC4KIAogU3BlY2lmeSBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBjb250YWluaW5nIGEgY29tbWFuZApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdCBiL0hlbHAvcHJvcF90Z3QvTEFOR19DT01QSUxFUl9MQVVOQ0hFUi5yc3QKaW5kZXggYTZmMmIyNC4uNzdhZTFmNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0xBTkdfQ09NUElMRVJfTEFVTkNIRVIucnN0CkBAIC0xLDYgKzEsOCBAQAogPExBTkc+X0NPTVBJTEVSX0xBVU5DSEVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoaXMgcHJvcGVydHkgaXMgaW1wbGVtZW50ZWQgb25seSB3aGVuIGBgPExBTkc+YGAgaXMgYGBDYGAsIGBgQ1hYYGAsCiBgYEZvcnRyYW5gYCwgYGBPQkpDYGAsIGBgT0JKQ1hYYGAsIG9yIGBgQ1VEQWBgLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L0xBTkdfQ1BQQ0hFQ0sucnN0IGIvSGVscC9wcm9wX3RndC9MQU5HX0NQUENIRUNLLnJzdAppbmRleCA2MDc4NWQwLi44MGFjYmMwIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0xBTkdfQ1BQQ0hFQ0sucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvTEFOR19DUFBDSEVDSy5yc3QKQEAgLTEsNiArMSw4IEBACiA8TEFORz5fQ1BQQ0hFQ0sKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIFRoaXMgcHJvcGVydHkgaXMgc3VwcG9ydGVkIG9ubHkgd2hlbiBgYDxMQU5HPmBgIGlzIGBgQ2BgIG9yIGBgQ1hYYGAuCiAKIFNwZWNpZnkgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgY29udGFpbmluZyBhIGNvbW1hbmQgbGluZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9MQU5HX0NQUExJTlQucnN0IGIvSGVscC9wcm9wX3RndC9MQU5HX0NQUExJTlQucnN0CmluZGV4IDk5NDRjODguLmJlNmRiNDYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTEFOR19DUFBMSU5ULnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0xBTkdfQ1BQTElOVC5yc3QKQEAgLTEsNiArMSw4IEBACiA8TEFORz5fQ1BQTElOVAogLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFRoaXMgcHJvcGVydHkgaXMgc3VwcG9ydGVkIG9ubHkgd2hlbiBgYDxMQU5HPmBgIGlzIGBgQ2BgIG9yIGBgQ1hYYGAuCiAKIFNwZWNpZnkgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgY29udGFpbmluZyBhIGNvbW1hbmQgbGluZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9MQU5HX0lOQ0xVREVfV0hBVF9ZT1VfVVNFLnJzdCBiL0hlbHAvcHJvcF90Z3QvTEFOR19JTkNMVURFX1dIQVRfWU9VX1VTRS5yc3QKaW5kZXggMzUyMjBlNC4uZWViZWY1NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9MQU5HX0lOQ0xVREVfV0hBVF9ZT1VfVVNFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0xBTkdfSU5DTFVERV9XSEFUX1lPVV9VU0UucnN0CkBAIC0xLDYgKzEsOCBAQAogPExBTkc+X0lOQ0xVREVfV0hBVF9ZT1VfVVNFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIFRoaXMgcHJvcGVydHkgaXMgaW1wbGVtZW50ZWQgb25seSB3aGVuIGBgPExBTkc+YGAgaXMgYGBDYGAgb3IgYGBDWFhgYC4KIAogU3BlY2lmeSBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBjb250YWluaW5nIGEgY29tbWFuZApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9MSU5LX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvTElOS19ESVJFQ1RPUklFUy5yc3QKaW5kZXggYzI5MDViMy4uNjdiZTQ5NCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9MSU5LX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0xJTktfRElSRUNUT1JJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogTElOS19ESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIExpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gdXNlIGZvciB0aGUgbGluayBzdGVwIG9mIHNoYXJlZCBsaWJyYXJ5LCBtb2R1bGUKIGFuZCBleGVjdXRhYmxlIHRhcmdldHMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTElOS19MSUJSQVJJRVNfSU5ESVJFQ1RJT04udHh0IGIvSGVscC9wcm9wX3RndC9MSU5LX0xJQlJBUklFU19JTkRJUkVDVElPTi50eHQKaW5kZXggMWZkYjZhZC4uNDc2ZTRhNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9MSU5LX0xJQlJBUklFU19JTkRJUkVDVElPTi50eHQKKysrIGIvSGVscC9wcm9wX3RndC9MSU5LX0xJQlJBUklFU19JTkRJUkVDVElPTi50eHQKQEAgLTEsOSArMSw5IEBACiAuLiBub3RlOjoKICAgQSBjYWxsIHRvIDpjb21tYW5kOmB0YXJnZXRfbGlua19saWJyYXJpZXMoPHRhcmdldD4gLi4uKWAgbWF5IHVwZGF0ZSB0aGlzCiAgIHByb3BlcnR5IG9uIGBgPHRhcmdldD5gYC4gIElmIGBgPHRhcmdldD5gYCB3YXMgbm90IGNyZWF0ZWQgaW4gdGhlIHNhbWUKLSAgZGlyZWN0b3J5IGFzIHRoZSBjYWxsIHRoZW4gOmNvbW1hbmQ6YHRhcmdldF9saW5rX2xpYnJhcmllc2Agd2lsbCBhZGQgYQotICBzdWZmaXggb2YgdGhlIGZvcm0gYGA6OkA8ZGlyZWN0b3J5LWlkPmBgIHRvIGVhY2ggZW50cnksIHdoZXJlIHRoZQotICBgYDo6QGBgIGlzIGEgc2VwYXJhdG9yIGFuZCB0aGUgYGA8ZGlyZWN0b3J5LWlkPmBgIGlzIHVuc3BlY2lmaWVkLgorICBkaXJlY3RvcnkgYXMgdGhlIGNhbGwgdGhlbiA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfbGlicmFyaWVzYCB3aWxsIHdyYXAgZWFjaAorICBlbnRyeSB3aXRoIHRoZSBmb3JtIGBgOjpAKGRpcmVjdG9yeS1pZCk7Li4uOzo6QGBgLCB3aGVyZSB0aGUgYGA6OkBgYCBpcworICBsaXRlcmFsIGFuZCB0aGUgYGAoZGlyZWN0b3J5LWlkKWBgIGlzIHVuc3BlY2lmaWVkLgogICBUaGlzIHRlbGxzIHRoZSBnZW5lcmF0b3JzIHRoYXQgdGhlIG5hbWVkIGxpYnJhcmllcyBtdXN0IGJlIGxvb2tlZCB1cCBpbgogICB0aGUgc2NvcGUgb2YgdGhlIGNhbGxlciByYXRoZXIgdGhhbiBpbiB0aGUgc2NvcGUgaW4gd2hpY2ggdGhlCiAgIGBgPHRhcmdldD5gYCB3YXMgY3JlYXRlZC4gIFZhbGlkIGRpcmVjdG9yeSBpZHMgYXJlIHN0cmlwcGVkIG9uIGV4cG9ydApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9MSU5LX09QVElPTlMucnN0IGIvSGVscC9wcm9wX3RndC9MSU5LX09QVElPTlMucnN0CmluZGV4IDJhMDVlYTcuLjhjMGRmYzQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvTElOS19PUFRJT05TLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0xJTktfT1BUSU9OUy5yc3QKQEAgLTEsMTMgKzEsMTkgQEAKIExJTktfT1BUSU9OUwogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogTGlzdCBvZiBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIGxpbmsgc3RlcCBvZiBzaGFyZWQgbGlicmFyeSwgbW9kdWxlCi1hbmQgZXhlY3V0YWJsZSB0YXJnZXRzLiBUYXJnZXRzIHRoYXQgYXJlIHN0YXRpYyBsaWJyYXJpZXMgbmVlZCB0byB1c2UKLXRoZSA6cHJvcF90Z3Q6YFNUQVRJQ19MSUJSQVJZX09QVElPTlNgIHRhcmdldCBwcm9wZXJ0eS4KK2FuZCBleGVjdXRhYmxlIHRhcmdldHMgYXMgd2VsbCBhcyB0aGUgZGV2aWNlIGxpbmsgc3RlcC4gVGFyZ2V0cyB0aGF0IGFyZSBzdGF0aWMKK2xpYnJhcmllcyBuZWVkIHRvIHVzZSB0aGUgOnByb3BfdGd0OmBTVEFUSUNfTElCUkFSWV9PUFRJT05TYCB0YXJnZXQgcHJvcGVydHkuCiAKK1RoZXNlIG9wdGlvbnMgYXJlIHVzZWQgZm9yIGJvdGggbm9ybWFsIGxpbmtpbmcgYW5kIGRldmljZSBsaW5raW5nCisoc2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMTA1YCkuIFRvIGNvbnRyb2wgbGluayBvcHRpb25zIGZvciBub3JtYWwgYW5kIGRldmljZQorbGluayBzdGVwcywgYGAkPEhPU1RfTElOSz5gYCBhbmQgYGAkPERFVklDRV9MSU5LPmBgCis6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIGNhbiBiZSB1c2VkLgogCi1UaGlzIHByb3BlcnR5IGhvbGRzIGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIG9wdGlvbnMKLXNwZWNpZmllZCBzbyBmYXIgZm9yIGl0cyB0YXJnZXQuICBVc2UgdGhlIDpjb21tYW5kOmB0YXJnZXRfbGlua19vcHRpb25zYAorVGhpcyBwcm9wZXJ0eSBob2xkcyBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YCBvZgorb3B0aW9ucyBzcGVjaWZpZWQgc28gZmFyIGZvciBpdHMgdGFyZ2V0LiAgVXNlIHRoZSA6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfb3B0aW9uc2AKIGNvbW1hbmQgdG8gYXBwZW5kIG1vcmUgb3B0aW9ucy4KIAogVGhpcyBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCBieSB0aGUgOnByb3BfZGlyOmBMSU5LX09QVElPTlNgIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9MSU5LX1dIQVRfWU9VX1VTRS5yc3QgYi9IZWxwL3Byb3BfdGd0L0xJTktfV0hBVF9ZT1VfVVNFLnJzdAppbmRleCAzMmQ2ZWRiLi4yZWQ5M2FkIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L0xJTktfV0hBVF9ZT1VfVVNFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L0xJTktfV0hBVF9ZT1VfVVNFLnJzdApAQCAtMSw2ICsxLDggQEAKIExJTktfV0hBVF9ZT1VfVVNFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFRoaXMgaXMgYSBib29sZWFuIG9wdGlvbiB0aGF0IHdoZW4gc2V0IHRvIGBgVFJVRWBgIHdpbGwgYXV0b21hdGljYWxseSBydW4KIGBgbGRkIC1yIC11YGAgb24gdGhlIHRhcmdldCBhZnRlciBpdCBpcyBsaW5rZWQuIEluIGFkZGl0aW9uLCB0aGUgbGlua2VyIGZsYWcKIGBgLVdsLC0tbm8tYXMtbmVlZGVkYGAgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHRhcmdldCB3aXRoIHRoZSBsaW5rIGNvbW1hbmQgc28KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OLnJzdCBiL0hlbHAvcHJvcF90Z3QvTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjRiMjU1Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9NQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT04ucnN0CkBAIC0wLDAgKzEsMjcgQEAKK01BQ0hPX0NPTVBBVElCSUxJVFlfVkVSU0lPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworV2hhdCBjb21wYXRpYmlsaXR5IHZlcnNpb24gbnVtYmVyIGlzIHRoaXMgdGFyZ2V0IGZvciBNYWNoLU8gYmluYXJpZXMuCisKK0ZvciBzaGFyZWQgbGlicmFyaWVzIG9uIE1hY2gtTyBzeXN0ZW1zIChlLmcuIG1hY09TLCBpT1MpCit0aGUgYGBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT05gYCBwcm9wZXJ0eSBjb3JyZXNwb25kcyB0byB0aGUKKypjb21wYXRpYmlsaXR5IHZlcnNpb24qIGFuZCA6cHJvcF90Z3Q6YE1BQ0hPX0NVUlJFTlRfVkVSU0lPTmAgY29ycmVzcG9uZHMgdG8KK3RoZSAqY3VycmVudCB2ZXJzaW9uKi4gIFRoZXNlIGFyZSBib3RoIGVtYmVkZGVkIGluIHRoZSBzaGFyZWQgbGlicmFyeSBiaW5hcnkKK2FuZCBjYW4gYmUgY2hlY2tlZCB3aXRoIHRoZSBgYG90b29sIC1MIDxiaW5hcnk+YGAgY29tbWFuZC4KKworSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIDpwcm9wX3RndDpgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYCBhbmQKK2BgTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OYGAgcHJvcGVydGllcyBkbyBub3QgYWZmZWN0IHRoZSBmaWxlCituYW1lcyBvciB2ZXJzaW9uLXJlbGF0ZWQgc3ltbGlua3MgdGhhdCBDTWFrZSBnZW5lcmF0ZXMgZm9yIHRoZSBsaWJyYXJ5LgorVGhlIDpwcm9wX3RndDpgVkVSU0lPTmAgYW5kIDpwcm9wX3RndDpgU09WRVJTSU9OYCB0YXJnZXQgcHJvcGVydGllcyBzdGlsbAorY29udHJvbCB0aGUgZmlsZSBhbmQgc3ltbGluayBuYW1lcy4gIFRoZSBgYGluc3RhbGxfbmFtZWBgIGlzIGFsc28gc3RpbGwKK2NvbnRyb2xsZWQgYnkgOnByb3BfdGd0OmBTT1ZFUlNJT05gLgorCitXaGVuIDpwcm9wX3RndDpgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYCBhbmQgYGBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT05gYAorYXJlIG5vdCBnaXZlbiwgOnByb3BfdGd0OmBWRVJTSU9OYCBhbmQgOnByb3BfdGd0OmBTT1ZFUlNJT05gIGFyZSB1c2VkIGZvcgordGhlIHZlcnNpb24gZGV0YWlscyB0byBiZSBlbWJlZGRlZCBpbiB0aGUgYmluYXJpZXMgcmVzcGVjdGl2ZWx5LgorVGhlIDpwcm9wX3RndDpgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYCBhbmQgYGBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT05gYAorcHJvcGVydGllcyBvbmx5IG5lZWQgdG8gYmUgZ2l2ZW4gaWYgdGhlIHByb2plY3QgbmVlZHMgdG8gZGVjb3VwbGUgdGhlIGZpbGUKK2FuZCBzeW1saW5rIG5hbWluZyBmcm9tIHRoZSB2ZXJzaW9uIGRldGFpbHMgZW1iZWRkZWQgaW4gdGhlIGJpbmFyaWVzCisoZS5nLiB0byBtYXRjaCBsaWJ0b29sIGNvbnZlbnRpb25zKS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTUFDSE9fQ1VSUkVOVF9WRVJTSU9OLnJzdCBiL0hlbHAvcHJvcF90Z3QvTUFDSE9fQ1VSUkVOVF9WRVJTSU9OLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzBmNzliCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9NQUNIT19DVVJSRU5UX1ZFUlNJT04ucnN0CkBAIC0wLDAgKzEsMjcgQEAKK01BQ0hPX0NVUlJFTlRfVkVSU0lPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworV2hhdCBjdXJyZW50IHZlcnNpb24gbnVtYmVyIGlzIHRoaXMgdGFyZ2V0IGZvciBNYWNoLU8gYmluYXJpZXMuCisKK0ZvciBzaGFyZWQgbGlicmFyaWVzIG9uIE1hY2gtTyBzeXN0ZW1zIChlLmcuIG1hY09TLCBpT1MpCit0aGUgOnByb3BfdGd0OmBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT05gIHByb3BlcnR5IGNvcnJlc3BvbmRzIHRvIHRoZQorKmNvbXBhdGliaWxpdHkgdmVyc2lvbiogYW5kIGBgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYGAgY29ycmVzcG9uZHMgdG8gdGhlCisqY3VycmVudCB2ZXJzaW9uKi4gIFRoZXNlIGFyZSBib3RoIGVtYmVkZGVkIGluIHRoZSBzaGFyZWQgbGlicmFyeSBiaW5hcnkKK2FuZCBjYW4gYmUgY2hlY2tlZCB3aXRoIHRoZSBgYG90b29sIC1MIDxiaW5hcnk+YGAgY29tbWFuZC4KKworSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIGBgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYGAgYW5kCis6cHJvcF90Z3Q6YE1BQ0hPX0NPTVBBVElCSUxJVFlfVkVSU0lPTmAgcHJvcGVydGllcyBkbyBub3QgYWZmZWN0IHRoZSBmaWxlCituYW1lcyBvciB2ZXJzaW9uLXJlbGF0ZWQgc3ltbGlua3MgdGhhdCBDTWFrZSBnZW5lcmF0ZXMgZm9yIHRoZSBsaWJyYXJ5LgorVGhlIDpwcm9wX3RndDpgVkVSU0lPTmAgYW5kIDpwcm9wX3RndDpgU09WRVJTSU9OYCB0YXJnZXQgcHJvcGVydGllcyBzdGlsbAorY29udHJvbCB0aGUgZmlsZSBhbmQgc3ltbGluayBuYW1lcy4gIFRoZSBgYGluc3RhbGxfbmFtZWBgIGlzIGFsc28gc3RpbGwKK2NvbnRyb2xsZWQgYnkgOnByb3BfdGd0OmBTT1ZFUlNJT05gLgorCitXaGVuIGBgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYGAgYW5kIDpwcm9wX3RndDpgTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OYAorYXJlIG5vdCBnaXZlbiwgOnByb3BfdGd0OmBWRVJTSU9OYCBhbmQgOnByb3BfdGd0OmBTT1ZFUlNJT05gIGFyZSB1c2VkIGZvcgordGhlIHZlcnNpb24gZGV0YWlscyB0byBiZSBlbWJlZGRlZCBpbiB0aGUgYmluYXJpZXMgcmVzcGVjdGl2ZWx5LgorVGhlIGBgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYGAgYW5kIDpwcm9wX3RndDpgTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OYAorcHJvcGVydGllcyBvbmx5IG5lZWQgdG8gYmUgZ2l2ZW4gaWYgdGhlIHByb2plY3QgbmVlZHMgdG8gZGVjb3VwbGUgdGhlIGZpbGUKK2FuZCBzeW1saW5rIG5hbWluZyBmcm9tIHRoZSB2ZXJzaW9uIGRldGFpbHMgZW1iZWRkZWQgaW4gdGhlIGJpbmFyaWVzCisoZS5nLiB0byBtYXRjaCBsaWJ0b29sIGNvbnZlbnRpb25zKS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvTUFOVUFMTFlfQURERURfREVQRU5ERU5DSUVTLnJzdCBiL0hlbHAvcHJvcF90Z3QvTUFOVUFMTFlfQURERURfREVQRU5ERU5DSUVTLnJzdAppbmRleCBjMTJlYTE0Li43Mjg3MWIzIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L01BTlVBTExZX0FEREVEX0RFUEVOREVOQ0lFUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9NQU5VQUxMWV9BRERFRF9ERVBFTkRFTkNJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogTUFOVUFMTFlfQURERURfREVQRU5ERU5DSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIEdldCBtYW51YWxseSBhZGRlZCBkZXBlbmRlbmNpZXMgdG8gb3RoZXIgdG9wLWxldmVsIHRhcmdldHMuCiAKIFRoaXMgcmVhZC1vbmx5IHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IGFsbCBkZXBlbmRlbmNpZXMgdGhhdApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9NU1ZDX1JVTlRJTUVfTElCUkFSWS5yc3QgYi9IZWxwL3Byb3BfdGd0L01TVkNfUlVOVElNRV9MSUJSQVJZLnJzdAppbmRleCA3Mzc5MmRlLi45Yjk3OGIyIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L01TVkNfUlVOVElNRV9MSUJSQVJZLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L01TVkNfUlVOVElNRV9MSUJSQVJZLnJzdApAQCAtMSw2ICsxLDggQEAKIE1TVkNfUlVOVElNRV9MSUJSQVJZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIFNlbGVjdCB0aGUgTVNWQyBydW50aW1lIGxpYnJhcnkgZm9yIHVzZSBieSBjb21waWxlcnMgdGFyZ2V0aW5nIHRoZSBNU1ZDIEFCSS4KIAogVGhlIGFsbG93ZWQgdmFsdWVzIGFyZToKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvT0JKQ1hYX0VYVEVOU0lPTlMucnN0IGIvSGVscC9wcm9wX3RndC9PQkpDWFhfRVhURU5TSU9OUy5yc3QKaW5kZXggOWY5ZDgwNC4uOGEyNTRmMiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9PQkpDWFhfRVhURU5TSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9PQkpDWFhfRVhURU5TSU9OUy5yc3QKQEAgLTEsNiArMSw4IEBACiBPQkpDWFhfRVhURU5TSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBCb29sZWFuIHNwZWNpZnlpbmcgd2hldGhlciBjb21waWxlciBzcGVjaWZpYyBleHRlbnNpb25zIGFyZSByZXF1ZXN0ZWQuCiAKIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHdoZXRoZXIgY29tcGlsZXIgc3BlY2lmaWMgZXh0ZW5zaW9ucyBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvT0JKQ1hYX1NUQU5EQVJELnJzdCBiL0hlbHAvcHJvcF90Z3QvT0JKQ1hYX1NUQU5EQVJELnJzdAppbmRleCAzYzkyNWRjLi4xMDY3MTUzIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L09CSkNYWF9TVEFOREFSRC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9PQkpDWFhfU1RBTkRBUkQucnN0CkBAIC0xLDYgKzEsOCBAQAogT0JKQ1hYX1NUQU5EQVJECiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBUaGUgT2JqQysrIHN0YW5kYXJkIHdob3NlIGZlYXR1cmVzIGFyZSByZXF1ZXN0ZWQgdG8gYnVpbGQgdGhpcyB0YXJnZXQuCiAKIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBPYmpDKysgc3RhbmRhcmQgd2hvc2UgZmVhdHVyZXMgYXJlIHJlcXVlc3RlZApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9PQkpDWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC9wcm9wX3RndC9PQkpDWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0CmluZGV4IGMzMzBhYmYuLjNjZWU3NDAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvT0JKQ1hYX1NUQU5EQVJEX1JFUVVJUkVELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L09CSkNYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBPQkpDWFhfU1RBTkRBUkRfUkVRVUlSRUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIEJvb2xlYW4gZGVzY3JpYmluZyB3aGV0aGVyIHRoZSB2YWx1ZSBvZiA6cHJvcF90Z3Q6YE9CSkNYWF9TVEFOREFSRGAgaXMgYSByZXF1aXJlbWVudC4KIAogSWYgdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gYGBPTmBgLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvT0JKQ19FWFRFTlNJT05TLnJzdCBiL0hlbHAvcHJvcF90Z3QvT0JKQ19FWFRFTlNJT05TLnJzdAppbmRleCAyZGU5ZTQ4Li5lZjFjNzU0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L09CSkNfRVhURU5TSU9OUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9PQkpDX0VYVEVOU0lPTlMucnN0CkBAIC0xLDYgKzEsOCBAQAogT0JKQ19FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBCb29sZWFuIHNwZWNpZnlpbmcgd2hldGhlciBjb21waWxlciBzcGVjaWZpYyBleHRlbnNpb25zIGFyZSByZXF1ZXN0ZWQuCiAKIFRoaXMgcHJvcGVydHkgc3BlY2lmaWVzIHdoZXRoZXIgY29tcGlsZXIgc3BlY2lmaWMgZXh0ZW5zaW9ucyBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvT0JKQ19TVEFOREFSRC5yc3QgYi9IZWxwL3Byb3BfdGd0L09CSkNfU1RBTkRBUkQucnN0CmluZGV4IGQxZTFiMjQuLjIxNDNmZjkgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvT0JKQ19TVEFOREFSRC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9PQkpDX1NUQU5EQVJELnJzdApAQCAtMSw2ICsxLDggQEAKIE9CSkNfU1RBTkRBUkQKIC0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBUaGUgT0JKQyBzdGFuZGFyZCB3aG9zZSBmZWF0dXJlcyBhcmUgcmVxdWVzdGVkIHRvIGJ1aWxkIHRoaXMgdGFyZ2V0LgogCiBUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgT0JKQyBzdGFuZGFyZCB3aG9zZSBmZWF0dXJlcyBhcmUgcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L09CSkNfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC9wcm9wX3RndC9PQkpDX1NUQU5EQVJEX1JFUVVJUkVELnJzdAppbmRleCA4Y2YzNzdjLi4xMTU0N2M4IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L09CSkNfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvT0JKQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBPQkpDX1NUQU5EQVJEX1JFUVVJUkVECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQm9vbGVhbiBkZXNjcmliaW5nIHdoZXRoZXIgdGhlIHZhbHVlIG9mIDpwcm9wX3RndDpgT0JKQ19TVEFOREFSRGAgaXMgYSByZXF1aXJlbWVudC4KIAogSWYgdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gYGBPTmBgLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvUENIX1dBUk5fSU5WQUxJRC5yc3QgYi9IZWxwL3Byb3BfdGd0L1BDSF9XQVJOX0lOVkFMSUQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNWVjNTUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3Byb3BfdGd0L1BDSF9XQVJOX0lOVkFMSUQucnN0CkBAIC0wLDAgKzEsMTIgQEAKK1BDSF9XQVJOX0lOVkFMSUQKKy0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitXaGVuIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUsIHRoZSBwcmVjb21waWxlIGhlYWRlciBjb21waWxlciBvcHRpb25zCit3aWxsIGNvbnRhaW4gYSBjb21waWxlciBmbGFnIHdoaWNoIHNob3VsZCB3YXJuIGFib3V0IGludmFsaWQgcHJlY29tcGlsZWQKK2hlYWRlcnMgZS5nLiBgYC1XaW52YWxpZC1wY2hgYCBmb3IgR05VIGNvbXBpbGVyLgorCitUaGlzIHByb3BlcnR5IGlzIGluaXRpYWxpemVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKKzp2YXJpYWJsZTpgQ01BS0VfUENIX1dBUk5fSU5WQUxJRGAgdmFyaWFibGUgaWYgaXQgaXMgc2V0IHdoZW4gYSB0YXJnZXQgaXMKK2NyZWF0ZWQuICBJZiB0aGF0IHZhcmlhYmxlIGlzIG5vdCBzZXQsIHRoZSBwcm9wZXJ0eSBkZWZhdWx0cyB0byBgYE9OYGAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1BSRUNPTVBJTEVfSEVBREVSUy5yc3QgYi9IZWxwL3Byb3BfdGd0L1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKaW5kZXggOWU3MGI2NS4uYWYyNzk0NyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9QUkVDT01QSUxFX0hFQURFUlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvUFJFQ09NUElMRV9IRUFERVJTLnJzdApAQCAtMSw2ICsxLDggQEAKIFBSRUNPTVBJTEVfSEVBREVSUwogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogTGlzdCBvZiBoZWFkZXIgZmlsZXMgdG8gcHJlY29tcGlsZS4KIAogVGhpcyBwcm9wZXJ0eSBob2xkcyBhIDpyZWY6YHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCA8Q01ha2UgTGFuZ3VhZ2UgTGlzdHM+YApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9QUkVDT01QSUxFX0hFQURFUlNfUkVVU0VfRlJPTS5yc3QgYi9IZWxwL3Byb3BfdGd0L1BSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NLnJzdAppbmRleCA5YzNlN2VhLi42ZjU2MzViIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1BSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1BSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NLnJzdApAQCAtMSw2ICsxLDggQEAKIFBSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFRhcmdldCBmcm9tIHdoaWNoIHRvIHJldXNlIHRoZSBwcmVjb21waWxlZCBoZWFkZXJzIGJ1aWxkIGFydGlmYWN0LgogCiBTZWUgdGhlIHNlY29uZCBzaWduYXR1cmUgb2YgOmNvbW1hbmQ6YHRhcmdldF9wcmVjb21waWxlX2hlYWRlcnNgIGNvbW1hbmQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvU09VUkNFX0RJUi5yc3QgYi9IZWxwL3Byb3BfdGd0L1NPVVJDRV9ESVIucnN0CmluZGV4IGIyNTgxM2IuLjc4Y2UyMjAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvU09VUkNFX0RJUi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9TT1VSQ0VfRElSLnJzdApAQCAtMSw2ICsxLDggQEAKIFNPVVJDRV9ESVIKIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoaXMgcmVhZC1vbmx5IHByb3BlcnR5IHJlcG9ydHMgdGhlIHZhbHVlIG9mIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJgIHZhcmlhYmxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2gKIHRoZSB0YXJnZXQgd2FzIGRlZmluZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1NPVkVSU0lPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L1NPVkVSU0lPTi5yc3QKaW5kZXggYjA3YzE3Yy4uYjM3N2YyMiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9TT1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvU09WRVJTSU9OLnJzdApAQCAtMjEsNyArMjEsMTcgQEAKIF5eXl5eXl5eXl5eXl5eXgogCiBGb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgb24gTWFjaC1PIHN5c3RlbXMgKGUuZy4gbWFjT1MsIGlPUyksCi10aGUgYGBTT1ZFUlNJT05gYCBwcm9wZXJ0eSBjb3JyZXNwb25kcyB0byAqY29tcGF0aWJpbGl0eSB2ZXJzaW9uKiBhbmQKLTpwcm9wX3RndDpgVkVSU0lPTmAgdG8gKmN1cnJlbnQgdmVyc2lvbiouICBTZWUgdGhlIDpwcm9wX3RndDpgRlJBTUVXT1JLYCB0YXJnZXQKLXByb3BlcnR5IGZvciBhbiBleGFtcGxlLiAgVmVyc2lvbnMgb2YgTWFjaC1PIGJpbmFyaWVzIG1heSBiZSBjaGVja2VkIHdpdGggdGhlCi1gYG90b29sIC1MIDxiaW5hcnk+YGAgY29tbWFuZC4KK3RoZSBgYFNPVkVSU0lPTmBgIHByb3BlcnR5IGNvcnJlc3BvbmRzIHRvIHRoZSAqY29tcGF0aWJpbGl0eSB2ZXJzaW9uKiBhbmQKKzpwcm9wX3RndDpgVkVSU0lPTmAgY29ycmVzcG9uZHMgdG8gdGhlICpjdXJyZW50IHZlcnNpb24qICh1bmxlc3MgTWFjaC1PCitzcGVjaWZpYyBvdmVycmlkZXMgYXJlIHByb3ZpZGVkLCBhcyBkaXNjdXNzZWQgYmVsb3cpLgorU2VlIHRoZSA6cHJvcF90Z3Q6YEZSQU1FV09SS2AgdGFyZ2V0IHByb3BlcnR5IGZvciBhbiBleGFtcGxlLgorCitGb3Igc2hhcmVkIGxpYnJhcmllcywgdGhlIDpwcm9wX3RndDpgTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OYCBhbmQKKzpwcm9wX3RndDpgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYCBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvCitvdmVycmlkZSB0aGUgKmNvbXBhdGliaWxpdHkgdmVyc2lvbiogYW5kICpjdXJyZW50IHZlcnNpb24qIHJlc3BlY3RpdmVseS4KK05vdGUgdGhhdCBgYFNPVkVSU0lPTmBgIHdpbGwgc3RpbGwgYmUgdXNlZCB0byBmb3JtIHRoZSBgYGluc3RhbGxfbmFtZWBgCithbmQgYm90aCBgYFNPVkVSU0lPTmBgIGFuZCA6cHJvcF90Z3Q6YFZFUlNJT05gIG1heSBhbHNvIGFmZmVjdCB0aGUgZmlsZQorYW5kIHN5bWxpbmsgbmFtZXMuCisKK1ZlcnNpb25zIG9mIE1hY2gtTyBiaW5hcmllcyBtYXkgYmUgY2hlY2tlZCB3aXRoIHRoZSBgYG90b29sIC1MIDxiaW5hcnk+YGAKK2NvbW1hbmQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1NUQVRJQ19MSUJSQVJZX09QVElPTlMucnN0IGIvSGVscC9wcm9wX3RndC9TVEFUSUNfTElCUkFSWV9PUFRJT05TLnJzdAppbmRleCBkMDVmZGE0Li4yZjRhM2JhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1NUQVRJQ19MSUJSQVJZX09QVElPTlMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvU1RBVElDX0xJQlJBUllfT1BUSU9OUy5yc3QKQEAgLTEsNiArMSw4IEBACiBTVEFUSUNfTElCUkFSWV9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogQXJjaGl2ZXIgKG9yIE1TVkMgbGlicmFyaWFuKSBmbGFncyBmb3IgYSBzdGF0aWMgbGlicmFyeSB0YXJnZXQuCiBUYXJnZXRzIHRoYXQgYXJlIHNoYXJlZCBsaWJyYXJpZXMsIG1vZHVsZXMsIG9yIGV4ZWN1dGFibGVzIG5lZWQgdG8gdXNlCiB0aGUgOnByb3BfdGd0OmBMSU5LX09QVElPTlNgIHRhcmdldCBwcm9wZXJ0eS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvU3dpZnRfREVQRU5ERU5DSUVTX0ZJTEUucnN0IGIvSGVscC9wcm9wX3RndC9Td2lmdF9ERVBFTkRFTkNJRVNfRklMRS5yc3QKaW5kZXggNDZjOWExZC4uMGY5NDRiNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9Td2lmdF9ERVBFTkRFTkNJRVNfRklMRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9Td2lmdF9ERVBFTkRFTkNJRVNfRklMRS5yc3QKQEAgLTEsNSArMSw3IEBACiBTd2lmdF9ERVBFTkRFTkNJRVNfRklMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBUaGlzIHByb3BlcnR5IHNldHMgdGhlIHBhdGggZm9yIHRoZSBTd2lmdCBkZXBlbmRlbmN5IGZpbGUgKHN3aWZ0ZGVwKSBmb3IgdGhlCiB0YXJnZXQuICBJZiBvbmUgaXMgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBkZWZhdWx0IHRvIGBgPFRBUkdFVD4uc3dpZnRkZXBzYGAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9Td2lmdF9MQU5HVUFHRV9WRVJTSU9OLnJzdAppbmRleCA3NTc5NDQ3Li5hZmM2YjMxIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvU3dpZnRfTEFOR1VBR0VfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBTd2lmdF9MQU5HVUFHRV9WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogVGhpcyBwcm9wZXJ0eSBzZXRzIHRoZSBsYW5ndWFnZSB2ZXJzaW9uIGZvciB0aGUgU3dpZnQgc291cmNlcyBpbiB0aGUgdGFyZ2V0LiAgSWYKIG9uZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gYGA8Q01BS0VfU3dpZnRfTEFOR1VBR0VfVkVSU0lPTj5gYCBpZgogc3BlY2lmaWVkLCBvdGhlcndpc2UgaXQgaXMgdGhlIGxhdGVzdCB2ZXJzaW9uIHN1cHBvcnRlZCBieSB0aGUgY29tcGlsZXIuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1N3aWZ0X01PRFVMRV9ESVJFQ1RPUlkucnN0IGIvSGVscC9wcm9wX3RndC9Td2lmdF9NT0RVTEVfRElSRUNUT1JZLnJzdAppbmRleCBkNDA0MjUxLi5hNjQ4NGYyIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1N3aWZ0X01PRFVMRV9ESVJFQ1RPUlkucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvU3dpZnRfTU9EVUxFX0RJUkVDVE9SWS5yc3QKQEAgLTEsNiArMSw4IEBACiBTd2lmdF9NT0RVTEVfRElSRUNUT1JZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogU3BlY2lmeSBvdXRwdXQgZGlyZWN0b3J5IGZvciBTd2lmdCBtb2R1bGVzIHByb3ZpZGVkIGJ5IHRoZSB0YXJnZXQuCiAKIElmIHRoZSB0YXJnZXQgY29udGFpbnMgU3dpZnQgc291cmNlIGZpbGVzLCB0aGlzIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IGluIHdoaWNoCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1N3aWZ0X01PRFVMRV9OQU1FLnJzdCBiL0hlbHAvcHJvcF90Z3QvU3dpZnRfTU9EVUxFX05BTUUucnN0CmluZGV4IDI4NjYwMjAuLmQ5NDFiNTQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvU3dpZnRfTU9EVUxFX05BTUUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvU3dpZnRfTU9EVUxFX05BTUUucnN0CkBAIC0xLDUgKzEsNyBAQAogU3dpZnRfTU9EVUxFX05BTUUKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogVGhpcyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIFN3aWZ0IG1vZHVsZS4gIEl0IGlzIGRlZmF1bHRlZCB0byB0aGUKIG5hbWUgb2YgdGhlIHRhcmdldC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTEQucnN0IGIvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRC5yc3QKaW5kZXggNDc5ODAyZS4uMDRjZWRlNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRC5yc3QKQEAgLTEsMTIgKzEsMzQgQEAKIFVOSVRZX0JVSUxECiAtLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIHRhcmdldCBzb3VyY2UgZmlsZXMgd2lsbCBiZSBjb21iaW5lZAogaW50byBiYXRjaGVzIGZvciBmYXN0ZXIgY29tcGlsYXRpb24uICBUaGlzIGlzIGRvbmUgYnkgY3JlYXRpbmcgYSAoc2V0IG9mKQogdW5pdHkgc291cmNlcyB3aGljaCBgYCNpbmNsdWRlYGAgdGhlIG9yaWdpbmFsIHNvdXJjZXMsIHRoZW4gY29tcGlsaW5nIHRoZXNlCiB1bml0eSBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFscy4gIFRoaXMgaXMga25vd24gYXMgYSAqVW5pdHkqIG9yICpKdW1ibyoKLWJ1aWxkLiAgVGhlIDpwcm9wX3RndDpgVU5JVFlfQlVJTERfQkFUQ0hfU0laRWAgcHJvcGVydHkgY29udHJvbHMgdGhlIHVwcGVyCi1saW1pdCBvbiBob3cgbWFueSBzb3VyY2VzIGNhbiBiZSBjb21iaW5lZCBwZXIgdW5pdHkgc291cmNlIGZpbGUuCitidWlsZC4KKworQ01ha2UgcHJvdmlkZXMgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIHNlbGVjdGluZyB3aGljaCBzb3VyY2VzIGFyZSBncm91cGVkCit0b2dldGhlciBpbnRvIGEgKmJ1Y2tldCouIEFsZ29yaXRobSBzZWxlY3Rpb24gaXMgZGVjaWRlZCBieSB0aGUKKzpwcm9wX3RndDpgVU5JVFlfQlVJTERfTU9ERWAgdGFyZ2V0IHByb3BlcnR5LCB3aGljaCBoYXMgdGhlIGZvbGxvd2luZyBhY2NlcHRhYmxlCit2YWx1ZXM6CisKKyogYGBCQVRDSGBgCisgIFdoZW4gaW4gdGhpcyBtb2RlIENNYWtlIGRldGVybWluZXMgd2hpY2ggZmlsZXMgYXJlIGdyb3VwZWQgdG9nZXRoZXIuCisgIFRoZSA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEX0JBVENIX1NJWkVgIHByb3BlcnR5IGNvbnRyb2xzIHRoZSB1cHBlciBsaW1pdCBvbgorICBob3cgbWFueSBzb3VyY2VzIGNhbiBiZSBjb21iaW5lZCBwZXIgdW5pdHkgc291cmNlIGZpbGUuCisKKyogYGBHUk9VUGBgCisgIFdoZW4gaW4gdGhpcyBtb2RlIGVhY2ggdGFyZ2V0IGV4cGxpY2l0bHkgc3BlY2lmaWVzIGhvdyB0byBncm91cAorICBzb3VyY2UgZmlsZXMuIEVhY2ggc291cmNlIGZpbGUgdGhhdCBoYXMgdGhlIHNhbWUKKyAgOnByb3Bfc2Y6YFVOSVRZX0dST1VQYCB2YWx1ZSB3aWxsIGJlIGdyb3VwZWQgdG9nZXRoZXIuIEFueSBzb3VyY2VzCisgIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgY29tcGlsZWQgaW5kaXZpZHVhbGx5LiBUaGUKKyAgOnByb3BfdGd0OmBVTklUWV9CVUlMRF9CQVRDSF9TSVpFYCBwcm9wZXJ0eSBpcyBpZ25vcmVkIHdoZW4gdXNpbmcKKyAgdGhpcyBtb2RlLgorCitJZiBubyBleHBsaWNpdCA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEX01PREVgIGhhcyBiZWVuIHNwZWNpZmllZCwgQ01ha2Ugd2lsbAorZGVmYXVsdCB0byBgYEJBVENIYGAuCiAKIFVuaXR5IGJ1aWxkcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIGFsbCBsYW5ndWFnZXMuICBDTWFrZSB2ZXJzaW9uCiB8cmVsZWFzZXwgc3VwcG9ydHMgY29tYmluaW5nIGBgQ2BgIGFuZCBgYENYWGBgIHNvdXJjZSBmaWxlcy4gIEZvciB0YXJnZXRzIHRoYXQKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQkFUQ0hfU0laRS5yc3QgYi9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0JBVENIX1NJWkUucnN0CmluZGV4IDQ0ZmZlMjcuLjM4ODZlYzkgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQkFUQ0hfU0laRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9CQVRDSF9TSVpFLnJzdApAQCAtMSw2ICsxLDggQEAKIFVOSVRZX0JVSUxEX0JBVENIX1NJWkUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNvdXJjZSBmaWxlcyB0aGF0IGNhbiBiZSBjb21iaW5lZCBpbnRvIGFueSBvbmUKIHVuaXR5IHNvdXJjZSBmaWxlIHdoZW4gdW5pdHkgYnVpbGRzIGFyZSBlbmFibGVkIGJ5IHRoZSA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEYAogdGFyZ2V0IHByb3BlcnR5LiAgVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcyBhcyBtYW55CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0NPREVfQUZURVJfSU5DTFVERS5yc3QgYi9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0NPREVfQUZURVJfSU5DTFVERS5yc3QKaW5kZXggNzIzMWI2MS4uYWMyYjE5YyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9DT0RFX0FGVEVSX0lOQ0xVREUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQ09ERV9BRlRFUl9JTkNMVURFLnJzdApAQCAtMSw2ICsxLDggQEAKIFVOSVRZX0JVSUxEX0NPREVfQUZURVJfSU5DTFVERQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQ29kZSBzbmlwcGV0IHdoaWNoIGlzIGluY2x1ZGVkIHZlcmJhdGltIGJ5IHRoZSA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEYAogZmVhdHVyZSBqdXN0IGFmdGVyIGV2ZXJ5IGBgI2luY2x1ZGVgYCBzdGF0ZW1lbnQgaW4gdGhlIGdlbmVyYXRlZCB1bml0eQogc291cmNlIGZpbGVzLiAgRm9yIGV4YW1wbGU6CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0NPREVfQkVGT1JFX0lOQ0xVREUucnN0IGIvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9DT0RFX0JFRk9SRV9JTkNMVURFLnJzdAppbmRleCA3ZWQ2ZmExLi42ZjBkNTZiIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1VOSVRZX0JVSUxEX0NPREVfQkVGT1JFX0lOQ0xVREUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfQ09ERV9CRUZPUkVfSU5DTFVERS5yc3QKQEAgLTEsNiArMSw4IEBACiBVTklUWV9CVUlMRF9DT0RFX0JFRk9SRV9JTkNMVURFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQ29kZSBzbmlwcGV0IHdoaWNoIGlzIGluY2x1ZGVkIHZlcmJhdGltIGJ5IHRoZSA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEYAogZmVhdHVyZSBqdXN0IGJlZm9yZSBldmVyeSBgYCNpbmNsdWRlYGAgc3RhdGVtZW50IGluIHRoZSBnZW5lcmF0ZWQgdW5pdHkKIHNvdXJjZSBmaWxlcy4gIEZvciBleGFtcGxlOgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9VTklUWV9CVUlMRF9NT0RFLnJzdCBiL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfTU9ERS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzNDUxZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcHJvcF90Z3QvVU5JVFlfQlVJTERfTU9ERS5yc3QKQEAgLTAsMCArMSw2MCBAQAorVU5JVFlfQlVJTERfTU9ERQorLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK0NNYWtlIHByb3ZpZGVzIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBzZWxlY3Rpbmcgd2hpY2ggc291cmNlcyBhcmUgZ3JvdXBlZAordG9nZXRoZXIgaW50byBhICpidWNrZXQqLiBTZWxlY3Rpb24gaXMgZGVjaWRlZCBieSB0aGlzIHByb3BlcnR5LAord2hpY2ggaGFzIHRoZSBmb2xsb3dpbmcgYWNjZXB0YWJsZSB2YWx1ZXM6CisKK2BgQkFUQ0hgYAorICBXaGVuIGluIHRoaXMgbW9kZSBDTWFrZSBkZXRlcm1pbmVzIHdoaWNoIGZpbGVzIGFyZSBncm91cGVkIHRvZ2V0aGVyLgorICBUaGUgOnByb3BfdGd0OmBVTklUWV9CVUlMRF9CQVRDSF9TSVpFYCBwcm9wZXJ0eSBjb250cm9scyB0aGUgdXBwZXIgbGltaXQgb24KKyAgaG93IG1hbnkgc291cmNlcyBjYW4gYmUgY29tYmluZWQgcGVyIHVuaXR5IHNvdXJjZSBmaWxlLgorCisgIEV4YW1wbGUgdXNhZ2U6CisKKyAgLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgICBhZGRfbGlicmFyeShleGFtcGxlX2xpYnJhcnkKKyAgICAgICAgICAgICAgICBzb3VyY2UxLmN4eAorICAgICAgICAgICAgICAgIHNvdXJjZTIuY3h4CisgICAgICAgICAgICAgICAgc291cmNlMy5jeHgKKyAgICAgICAgICAgICAgICBzb3VyY2U0LmN4eCkKKworICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhleGFtcGxlX2xpYnJhcnkgUFJPUEVSVElFUworICAgICAgICAgICAgICAgICAgICAgICAgICBVTklUWV9CVUlMRF9NT0RFIEJBVENICisgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVRZX0JVSUxEX0JBVENIX1NJWkUgMgorICAgICAgICAgICAgICAgICAgICAgICAgICApCisKK2BgR1JPVVBgYAorICBXaGVuIGluIHRoaXMgbW9kZSBlYWNoIHRhcmdldCBleHBsaWNpdGx5IHNwZWNpZmllcyBob3cgdG8gZ3JvdXAKKyAgc291cmNlIGZpbGVzLiBFYWNoIHNvdXJjZSBmaWxlIHRoYXQgaGFzIHRoZSBzYW1lCisgIDpwcm9wX3NmOmBVTklUWV9HUk9VUGAgdmFsdWUgd2lsbCBiZSBncm91cGVkIHRvZ2V0aGVyLiBBbnkgc291cmNlcworICB0aGF0IGRvbid0IGhhdmUgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGNvbXBpbGVkIGluZGl2aWR1YWxseS4gVGhlCisgIDpwcm9wX3RndDpgVU5JVFlfQlVJTERfQkFUQ0hfU0laRWAgcHJvcGVydHkgaXMgaWdub3JlZCB3aGVuIHVzaW5nCisgIHRoaXMgbW9kZS4KKworICBFeGFtcGxlIHVzYWdlOgorCisgIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICAgYWRkX2xpYnJhcnkoZXhhbXBsZV9saWJyYXJ5CisgICAgICAgICAgICAgICAgc291cmNlMS5jeHgKKyAgICAgICAgICAgICAgICBzb3VyY2UyLmN4eAorICAgICAgICAgICAgICAgIHNvdXJjZTMuY3h4CisgICAgICAgICAgICAgICAgc291cmNlNC5jeHgpCisKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZXhhbXBsZV9saWJyYXJ5IFBST1BFUlRJRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JVFlfQlVJTERfTU9ERSBHUk9VUAorICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoc291cmNlMS5jeHggc291cmNlMi5jeHggc291cmNlMy5jeHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAiYnVja2V0MSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzb3VyY2U0LmN4eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJidWNrZXQyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKK0lmIG5vIGV4cGxpY2l0IDpwcm9wX3RndDpgVU5JVFlfQlVJTERfTU9ERWAgaGFzIGJlZW4gc3BlY2lmaWVkLCBDTWFrZSB3aWxsCitkZWZhdWx0IHRvIGBgQkFUQ0hgYC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVkVSU0lPTi5yc3QgYi9IZWxwL3Byb3BfdGd0L1ZFUlNJT04ucnN0CmluZGV4IGZmM2IzMDMuLjk1ZGI0ODMgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVkVSU0lPTi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WRVJTSU9OLnJzdApAQCAtMjMsNyArMjMsMTcgQEAKIF5eXl5eXl5eXl5eXl5eXgogCiBGb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgb24gTWFjaC1PIHN5c3RlbXMgKGUuZy4gbWFjT1MsIGlPUyksCi10aGUgOnByb3BfdGd0OmBTT1ZFUlNJT05gIHByb3BlcnR5IGNvcnJlc3BvbmQgdG8gKmNvbXBhdGliaWxpdHkgdmVyc2lvbiogYW5kCi1gYFZFUlNJT05gYCB0byAqY3VycmVudCB2ZXJzaW9uKi4gIFNlZSB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktgIHRhcmdldAotcHJvcGVydHkgZm9yIGFuIGV4YW1wbGUuICBWZXJzaW9ucyBvZiBNYWNoLU8gYmluYXJpZXMgbWF5IGJlIGNoZWNrZWQgd2l0aCB0aGUKLWBgb3Rvb2wgLUwgPGJpbmFyeT5gYCBjb21tYW5kLgordGhlIDpwcm9wX3RndDpgU09WRVJTSU9OYCBwcm9wZXJ0eSBjb3JyZXNwb25kcyB0byB0aGUgKmNvbXBhdGliaWxpdHkgdmVyc2lvbioKK2FuZCBgYFZFUlNJT05gYCBjb3JyZXNwb25kcyB0byB0aGUgKmN1cnJlbnQgdmVyc2lvbiogKHVubGVzcyBNYWNoLU8gc3BlY2lmaWMKK292ZXJyaWRlcyBhcmUgcHJvdmlkZWQsIGFzIGRpc2N1c3NlZCBiZWxvdykuCitTZWUgdGhlIDpwcm9wX3RndDpgRlJBTUVXT1JLYCB0YXJnZXQgcHJvcGVydHkgZm9yIGFuIGV4YW1wbGUuCisKK0ZvciBzaGFyZWQgbGlicmFyaWVzLCB0aGUgOnByb3BfdGd0OmBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT05gIGFuZAorOnByb3BfdGd0OmBNQUNIT19DVVJSRU5UX1ZFUlNJT05gIHByb3BlcnRpZXMgY2FuIGJlIHVzZWQgdG8KK292ZXJyaWRlIHRoZSAqY29tcGF0aWJpbGl0eSB2ZXJzaW9uKiBhbmQgKmN1cnJlbnQgdmVyc2lvbiogcmVzcGVjdGl2ZWx5LgorTm90ZSB0aGF0IDpwcm9wX3RndDpgU09WRVJTSU9OYCB3aWxsIHN0aWxsIGJlIHVzZWQgdG8gZm9ybSB0aGUKK2BgaW5zdGFsbF9uYW1lYGAgYW5kIGJvdGggOnByb3BfdGd0OmBTT1ZFUlNJT05gIGFuZCBgYFZFUlNJT05gYCBtYXkgYWxzbworYWZmZWN0IHRoZSBmaWxlIGFuZCBzeW1saW5rIG5hbWVzLgorCitWZXJzaW9ucyBvZiBNYWNoLU8gYmluYXJpZXMgbWF5IGJlIGNoZWNrZWQgd2l0aCB0aGUgYGBvdG9vbCAtTCA8YmluYXJ5PmBgCitjb21tYW5kLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19DT05GSUdVUkFUSU9OX1RZUEUucnN0IGIvSGVscC9wcm9wX3RndC9WU19DT05GSUdVUkFUSU9OX1RZUEUucnN0CmluZGV4IDY0MGJlZDUuLjRhZGZmZDQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfQ09ORklHVVJBVElPTl9UWVBFLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX0NPTkZJR1VSQVRJT05fVFlQRS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19DT05GSUdVUkFUSU9OX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogVmlzdWFsIFN0dWRpbyBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gdHlwZS4KIAogU2V0cyB0aGUgYGBDb25maWd1cmF0aW9uVHlwZWBgIGF0dHJpYnV0ZSBmb3IgYSBnZW5lcmF0ZWQgVmlzdWFsIFN0dWRpbyBwcm9qZWN0LgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5ELnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfQ09NTUFORC5yc3QKaW5kZXggYmE1ZmQwYS4uNTg0NzZkNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5ELnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX0RFQlVHR0VSX0NPTU1BTkQucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfREVCVUdHRVJfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFNldHMgdGhlIGxvY2FsIGRlYnVnZ2VyIGNvbW1hbmQgZm9yIFZpc3VhbCBTdHVkaW8gQysrIHRhcmdldHMuCiBUaGUgcHJvcGVydHkgdmFsdWUgbWF5IHVzZQogOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfQ09NTUFORF9BUkdVTUVOVFMucnN0IGIvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5EX0FSR1VNRU5UUy5yc3QKaW5kZXggMDZlZjVkNS4uNmMyNjYwMSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5EX0FSR1VNRU5UUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9DT01NQU5EX0FSR1VNRU5UUy5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19ERUJVR0dFUl9DT01NQU5EX0FSR1VNRU5UUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBTZXRzIHRoZSBsb2NhbCBkZWJ1Z2dlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciBWaXN1YWwgU3R1ZGlvIEMrKyB0YXJnZXRzLgogVGhlIHByb3BlcnR5IHZhbHVlIG1heSB1c2UKIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0RFQlVHR0VSX0VOVklST05NRU5ULnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfRU5WSVJPTk1FTlQucnN0CmluZGV4IGY1NWFjN2IuLjJmNTlhODIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfRU5WSVJPTk1FTlQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfRU5WSVJPTk1FTlQucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfREVCVUdHRVJfRU5WSVJPTk1FTlQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogU2V0cyB0aGUgbG9jYWwgZGVidWdnZXIgZW52aXJvbm1lbnQgZm9yIFZpc3VhbCBTdHVkaW8gQysrIHRhcmdldHMuCiBUaGUgcHJvcGVydHkgdmFsdWUgbWF5IHVzZQogOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfREVCVUdHRVJfV09SS0lOR19ESVJFQ1RPUlkucnN0IGIvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKaW5kZXggMDA4YmJmNi4uYzE2M2FiZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFNldHMgdGhlIGxvY2FsIGRlYnVnZ2VyIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBWaXN1YWwgU3R1ZGlvIEMrKyB0YXJnZXRzLgogVGhlIHByb3BlcnR5IHZhbHVlIG1heSB1c2UKIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0RFU0tUT1BfRVhURU5TSU9OU19WRVJTSU9OLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CmluZGV4IDE5ZDE2MjAuLjVmZDIzZTEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBWaXN1YWwgU3R1ZGlvIFdpbmRvd3MgMTAgRGVza3RvcCBFeHRlbnNpb25zIFZlcnNpb24KIAogU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBEZXNrdG9wIEV4dGVuc2lvbnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9ET0NVTUVOVEFUSU9OX0ZJTEUucnN0IGIvSGVscC9wcm9wX3RndC9WU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzg4MjU2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9WU19ET1RORVRfRE9DVU1FTlRBVElPTl9GSUxFLnJzdApAQCAtMCwwICsxLDggQEAKK1ZTX0RPVE5FVF9ET0NVTUVOVEFUSU9OX0ZJTEUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitWaXN1YWwgU3R1ZGlvIG1hbmFnZWQgcHJvamVjdCAuTkVUIGRvY3VtZW50YXRpb24gb3V0cHV0CisKK1NldHMgdGhlIHRhcmdldCBYTUwgZG9jdW1lbnRhdGlvbiBmaWxlIG91dHB1dC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRVBST1BfcmVmbmFtZV9UQUdfdGFnbmFtZS5yc3QgYi9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VQUk9QX3JlZm5hbWVfVEFHX3RhZ25hbWUucnN0CmluZGV4IGFiMzExZWEuLjViOWNhZWUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRVBST1BfcmVmbmFtZV9UQUdfdGFnbmFtZS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19ET1RORVRfUkVGRVJFTkNFUFJPUF9yZWZuYW1lX1RBR190YWduYW1lLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX0RPVE5FVF9SRUZFUkVOQ0VQUk9QXzxyZWZuYW1lPl9UQUdfPHRhZ25hbWU+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIERlZmluZXMgYW4gWE1MIHByb3BlcnR5IGBgPHRhZ25hbWU+YGAgZm9yIGEgLk5FVCByZWZlcmVuY2UKIGBgPHJlZm5hbWU+YGAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRVNfQ09QWV9MT0NBTC5yc3QgYi9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VTX0NPUFlfTE9DQUwucnN0CmluZGV4IDc2NDFiYTUuLjU1NmZhOGEgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRVNfQ09QWV9MT0NBTC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19ET1RORVRfUkVGRVJFTkNFU19DT1BZX0xPQ0FMLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX0RPVE5FVF9SRUZFUkVOQ0VTX0NPUFlfTE9DQUwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFNldHMgdGhlICoqQ29weSBMb2NhbCoqIHByb3BlcnR5IGZvciBhbGwgLk5FVCBoaW50IHJlZmVyZW5jZXMgaW4gdGhlIHRhcmdldAogCiBCb29sZWFuIHByb3BlcnR5IHRvIGVuYWJsZS9kaXNhYmxlIGNvcHlpbmcgb2YgLk5FVCBoaW50IHJlZmVyZW5jZXMgdG8KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRV9yZWZuYW1lLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1JFRkVSRU5DRV9yZWZuYW1lLnJzdAppbmRleCA1ODE0MDA1Li45YzRkMzRhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9SRUZFUkVOQ0VfcmVmbmFtZS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19ET1RORVRfUkVGRVJFTkNFX3JlZm5hbWUucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfRE9UTkVUX1JFRkVSRU5DRV88cmVmbmFtZT4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBWaXN1YWwgU3R1ZGlvIG1hbmFnZWQgcHJvamVjdCAuTkVUIHJlZmVyZW5jZSB3aXRoIG5hbWUgYGA8cmVmbmFtZT5gYAogYW5kIGhpbnQgcGF0aC4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTi5yc3QKaW5kZXggOWY1YTMxMy4uNmNiOGY4NiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0CkBAIC0zLDggKzMsOSBAQAogCiBTcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsgdmVyc2lvbi4KIAotVXNlZCB0byBzcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsgdmVyc2lvbiBmb3IgQysrL0NMSS4gIEZvcgorVXNlZCB0byBzcGVjaWZ5IHRoZSAuTkVUIHRhcmdldCBmcmFtZXdvcmsgdmVyc2lvbiBmb3IgQysrL0NMSS4gRm9yCiBleGFtcGxlLCAidjQuNSIuCiAKIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZQorOnByb3BfdGd0OmBET1RORVRfVEFSR0VUX0ZSQU1FV09SS2Agb3IKIDpwcm9wX3RndDpgRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTmAgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfRFBJX0FXQVJFLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfRFBJX0FXQVJFLnJzdAppbmRleCA4MjY0MGNjLi40N2NlMWNlIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0RQSV9BV0FSRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19EUElfQVdBUkUucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfRFBJX0FXQVJFCiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBTZXQgdGhlIE1hbmlmZXN0IFRvb2wgLT4gSW5wdXQgYW5kIE91dHB1dCAtPiBEUEkgQXdhcmVuZXNzIGluIHRoZSBWaXN1YWwgU3R1ZGlvCiB0YXJnZXQgcHJvamVjdCBwcm9wZXJ0aWVzLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0lPVF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9WU19JT1RfRVhURU5TSU9OU19WRVJTSU9OLnJzdAppbmRleCAyN2M4YTNkLi5jYTZhM2NhIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0lPVF9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfSU9UX0VYVEVOU0lPTlNfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19JT1RfRVhURU5TSU9OU19WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBWaXN1YWwgU3R1ZGlvIFdpbmRvd3MgMTAgSW9UIEV4dGVuc2lvbnMgVmVyc2lvbgogCiBTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlIElvVCBFeHRlbnNpb25zIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19JT1RfU1RBUlRVUF9UQVNLLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfSU9UX1NUQVJUVVBfVEFTSy5yc3QKaW5kZXggYWRkNTBjYi4uMjU5MDU1ZCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19JT1RfU1RBUlRVUF9UQVNLLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX0lPVF9TVEFSVFVQX1RBU0sucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfSU9UX1NUQVJUVVBfVEFTSwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVmlzdWFsIFN0dWRpbyBXaW5kb3dzIDEwIElvVCBDb250aW51b3VzIEJhY2tncm91bmQgVGFzawogCiBTcGVjaWZpZXMgdGhhdCB0aGUgdGFyZ2V0IHNob3VsZCBiZSBjb21waWxlZCBhcyBhIENvbnRpbnVvdXMgQmFja2dyb3VuZCBUYXNrIGxpYnJhcnkuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcucnN0IGIvSGVscC9wcm9wX3RndC9WU19KVVNUX01ZX0NPREVfREVCVUdHSU5HLnJzdAppbmRleCA0MmZiOGFkLi43MjRiZDJmIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfSlVTVF9NWV9DT0RFX0RFQlVHR0lORy5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19KVVNUX01ZX0NPREVfREVCVUdHSU5HCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogRW5hYmxlIEp1c3QgTXkgQ29kZSB3aXRoIFZpc3VhbCBTdHVkaW8gZGVidWdnZXIuCiAKIFN1cHBvcnRlZCBvbiA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBoaWdoZXIsCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX01PQklMRV9FWFRFTlNJT05TX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9WU19NT0JJTEVfRVhURU5TSU9OU19WRVJTSU9OLnJzdAppbmRleCBiZTNjOWEwLi5iMzA3ZTg0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX01PQklMRV9FWFRFTlNJT05TX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfTU9CSUxFX0VYVEVOU0lPTlNfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19NT0JJTEVfRVhURU5TSU9OU19WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBWaXN1YWwgU3R1ZGlvIFdpbmRvd3MgMTAgTW9iaWxlIEV4dGVuc2lvbnMgVmVyc2lvbgogCiBTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlIE1vYmlsZSBFeHRlbnNpb25zIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19OT19TT0xVVElPTl9ERVBMT1kucnN0IGIvSGVscC9wcm9wX3RndC9WU19OT19TT0xVVElPTl9ERVBMT1kucnN0CmluZGV4IGZmY2JkZTUuLmJmNmFjMTAgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfTk9fU09MVVRJT05fREVQTE9ZLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX05PX1NPTFVUSU9OX0RFUExPWS5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19OT19TT0xVVElPTl9ERVBMT1kKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIFNwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHNob3VsZCBub3QgYmUgbWFya2VkIGZvciBkZXBsb3ltZW50IHRvIGEgV2luZG93cyBDRQogb3IgV2luZG93cyBQaG9uZSBkZXZpY2UgaW4gdGhlIGdlbmVyYXRlZCBWaXN1YWwgU3R1ZGlvIHNvbHV0aW9uLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1BBQ0tBR0VfUkVGRVJFTkNFUy5yc3QgYi9IZWxwL3Byb3BfdGd0L1ZTX1BBQ0tBR0VfUkVGRVJFTkNFUy5yc3QKaW5kZXggNWEwNDY1Yi4uZWMxNzU2NyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19QQUNLQUdFX1JFRkVSRU5DRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfUEFDS0FHRV9SRUZFUkVOQ0VTLnJzdApAQCAtMSw2ICsxLDggQEAKIFZTX1BBQ0tBR0VfUkVGRVJFTkNFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogVmlzdWFsIFN0dWRpbyBwYWNrYWdlIHJlZmVyZW5jZXMgZm9yIG51Z2V0LgogCiBBZGRzIG9uZSBvciBtb3JlIHNlbWljb2xvbi1kZWxpbWl0ZWQgcGFja2FnZSByZWZlcmVuY2VzIHRvIGEgZ2VuZXJhdGVkCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1BMQVRGT1JNX1RPT0xTRVQucnN0IGIvSGVscC9wcm9wX3RndC9WU19QTEFURk9STV9UT09MU0VULnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2E5MmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9WU19QTEFURk9STV9UT09MU0VULnJzdApAQCAtMCwwICsxLDEyIEBACitWU19QTEFURk9STV9UT09MU0VUCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworT3ZlcnJpZGVzIHRoZSBwbGF0Zm9ybSB0b29sc2V0IHVzZWQgdG8gYnVpbGQgYSB0YXJnZXQuCisKK09ubHkgc3VwcG9ydGVkIHdoZW4gdGhlIGNvbXBpbGVyIHVzZWQgYnkgdGhlIGdpdmVuIHRvb2xzZXQgaXMgdGhlCitzYW1lIGFzIHRoZSBjb21waWxlciB1c2VkIHRvIGJ1aWxkIHRoZSB3aG9sZSBzb3VyY2UgdHJlZS4KKworVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB0byBjcmVhdGUgZHJpdmVyIHByb2plY3RzIHdpdGggdGhlIHRvb2xzZXRzCisiV2luZG93c1VzZXJNb2RlRHJpdmVyMTAuMCIgb3IgIldpbmRvd3NLZXJuZWxNb2RlRHJpdmVyMTAuMCIuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1BST0pFQ1RfSU1QT1JULnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfUFJPSkVDVF9JTVBPUlQucnN0CmluZGV4IDU2OWM4ZWEuLmY1ZTk2OTggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfUFJPSkVDVF9JTVBPUlQucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfUFJPSkVDVF9JTVBPUlQucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfUFJPSkVDVF9JTVBPUlQKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogVmlzdWFsIFN0dWRpbyBtYW5hZ2VkIHByb2plY3QgaW1wb3J0cwogCiBBZGRzIHRvIGEgZ2VuZXJhdGVkIFZpc3VhbCBTdHVkaW8gcHJvamVjdCBvbmUgb3IgbW9yZSBzZW1pY29sb24tZGVsaW1pdGVkIHBhdGhzCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1NES19SRUZFUkVOQ0VTLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfU0RLX1JFRkVSRU5DRVMucnN0CmluZGV4IDk5OTg3ZjUuLjlhMDgyZTcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfU0RLX1JFRkVSRU5DRVMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfU0RLX1JFRkVSRU5DRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogVlNfU0RLX1JFRkVSRU5DRVMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBWaXN1YWwgU3R1ZGlvIHByb2plY3QgU0RLIHJlZmVyZW5jZXMuCiBTcGVjaWZ5IGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIFNESyByZWZlcmVuY2VzCiB0byBiZSBhZGRlZCB0byBhIGdlbmVyYXRlZCBWaXN1YWwgU3R1ZGlvIHByb2plY3QsIGUuZy4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfU09MVVRJT05fREVQTE9ZLnJzdCBiL0hlbHAvcHJvcF90Z3QvVlNfU09MVVRJT05fREVQTE9ZLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTZmNDExCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9WU19TT0xVVElPTl9ERVBMT1kucnN0CkBAIC0wLDAgKzEsMjkgQEAKK1ZTX1NPTFVUSU9OX0RFUExPWQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworU3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgc2hvdWxkIGJlIG1hcmtlZCBmb3IgZGVwbG95bWVudCB3aGVuIG5vdCB0YXJnZXRpbmcKK1dpbmRvd3MgQ0UsIFdpbmRvd3MgUGhvbmUgb3IgYSBXaW5kb3dzIFN0b3JlIGFwcGxpY2F0aW9uLgorCitJZiB0aGUgdGFyZ2V0IHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBkZXBsb3ltZW50LCB0aGlzIHByb3BlcnR5IHdvbid0IGhhdmUKK2FueSBlZmZlY3QuCisKKzptYW51YWw6YEdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAgYXJlIHN1cHBvcnRlZC4KKworRXhhbXBsZXMKK15eXl5eXl5eCisKK0Fsd2F5cyBkZXBsb3kgdGFyZ2V0IGBgZm9vYGA6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGFkZF9leGVjdXRhYmxlKGZvbyBTSEFSRUQgZm9vLmNwcCkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBmb28gUFJPUEVSVFkgVlNfU09MVVRJT05fREVQTE9ZIE9OKQorCitEZXBsb3kgdGFyZ2V0IGBgZm9vYGAgZm9yIGFsbCBjb25maWd1cmF0aW9ucyBleGNlcHQgYGBSZWxlYXNlYGA6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGFkZF9leGVjdXRhYmxlKGZvbyBTSEFSRUQgZm9vLmNwcCkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBmb28gUFJPUEVSVFkgVlNfU09MVVRJT05fREVQTE9ZICIkPE5PVDokPENPTkZJRzpSZWxlYXNlPj4iKQpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19TT1VSQ0VfU0VUVElOR1NfdG9vbC5yc3QgYi9IZWxwL3Byb3BfdGd0L1ZTX1NPVVJDRV9TRVRUSU5HU190b29sLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE3NmZjCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9WU19TT1VSQ0VfU0VUVElOR1NfdG9vbC5yc3QKQEAgLTAsMCArMSwyMSBAQAorVlNfU09VUkNFX1NFVFRJTkdTXzx0b29sPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK1NldCBhbnkgaXRlbSBtZXRhZGF0YSBvbiBhbGwgbm9uLWJ1aWx0IGZpbGVzIHRoYXQgdXNlIDx0b29sPi4KKworVGFrZXMgYSBsaXN0IG9mIGBgS2V5PVZhbHVlYGAgcGFpcnMuIFRlbGxzIHRoZSBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvcgordG8gc2V0IGBgS2V5YGAgdG8gYGBWYWx1ZWBgIGFzIGl0ZW0gbWV0YWRhdGEgb24gYWxsIG5vbi1idWlsdCBmaWxlcwordGhhdCB1c2UgYGA8dG9vbD5gYC4KKworRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgbWFpbiBQUk9QRVJUWSBWU19TT1VSQ0VfU0VUVElOR1NfRlhDb21waWxlICJLZXk9VmFsdWUiICJLZXkyPVZhbHVlMiIpCisKK3dpbGwgc2V0IGBgS2V5YGAgdG8gYGBWYWx1ZWBgIGFuZCBgYEtleTJgYCB0byBgYFZhbHVlMmBgIGZvciBhbGwKK25vbi1idWlsdCBmaWxlcyB0aGF0IHVzZSBgYEZYQ29tcGlsZWBgLgorCis6bWFudWFsOmBHZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gIGFyZSBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1ZTX1VTRVJfUFJPUFMucnN0IGIvSGVscC9wcm9wX3RndC9WU19VU0VSX1BST1BTLnJzdAppbmRleCAxYmUyMjJiLi44ZjJhMTA1IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1ZTX1VTRVJfUFJPUFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvVlNfVVNFUl9QUk9QUy5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19VU0VSX1BST1BTCiAtLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBTZXRzIHRoZSB1c2VyIHByb3BzIGZpbGUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHZpc3VhbCBzdHVkaW8KIEMrKyBwcm9qZWN0IGZpbGUuIFRoZSBzdGFuZGFyZCBwYXRoIGlzCiBgYCQoVXNlclJvb3REaXIpXFxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHNgYCwgd2hpY2ggaXMKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvVlNfV0lORE9XU19UQVJHRVRfUExBVEZPUk1fTUlOX1ZFUlNJT04ucnN0IGIvSGVscC9wcm9wX3RndC9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9NSU5fVkVSU0lPTi5yc3QKaW5kZXggMWFkN2E3MS4uNTBjZjIwMyAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9NSU5fVkVSU0lPTi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9NSU5fVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9NSU5fVkVSU0lPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFZpc3VhbCBTdHVkaW8gV2luZG93cyBUYXJnZXQgUGxhdGZvcm0gTWluaW11bSBWZXJzaW9uCiAKIEZvciBXaW5kb3dzIDEwLiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gdmVyc2lvbiBvZiB0aGUgT1MgdGhhdCBpcyBiZWluZwpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9WU19XSU5SVF9DT01QT05FTlQucnN0IGIvSGVscC9wcm9wX3RndC9WU19XSU5SVF9DT01QT05FTlQucnN0CmluZGV4IGUxNjBiZDYuLjhiNGFhZjcgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvVlNfV0lOUlRfQ09NUE9ORU5ULnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1ZTX1dJTlJUX0NPTVBPTkVOVC5yc3QKQEAgLTEsNiArMSw4IEBACiBWU19XSU5SVF9DT01QT05FTlQKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogTWFyayBhIHRhcmdldCBhcyBhIFdpbmRvd3MgUnVudGltZSBjb21wb25lbnQgZm9yIHRoZSBWaXN1YWwgU3R1ZGlvIGdlbmVyYXRvci4KIENvbXBpbGUgdGhlIHRhcmdldCB3aXRoIGBgQysrL0NYYGAgbGFuZ3VhZ2UgZXh0ZW5zaW9ucyBmb3IgV2luZG93cyBSdW50aW1lLgogRm9yIGBgU0hBUkVEYGAgYW5kIGBgTU9EVUxFYGAgbGlicmFyaWVzLCB0aGlzIGFsc28gZGVmaW5lcyB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvV0lORE9XU19FWFBPUlRfQUxMX1NZTUJPTFMucnN0IGIvSGVscC9wcm9wX3RndC9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKaW5kZXggODY3MTFiZi4uMDBmMzJmNiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKQEAgLTEsNiArMSw4IEBACiBXSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoaXMgcHJvcGVydHkgaXMgaW1wbGVtZW50ZWQgb25seSBmb3IgTVMtY29tcGF0aWJsZSB0b29scyBvbiBXaW5kb3dzLgogCiBFbmFibGUgdGhpcyBib29sZWFuIHByb3BlcnR5IHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgbW9kdWxlIGRlZmluaXRpb24KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfRVhQTElDSVRfRklMRV9UWVBFLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfRVhQTElDSVRfRklMRV9UWVBFLnJzdAppbmRleCBkYzkyOTAyLi5lMDFhMDM0IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX0VYUExJQ0lUX0ZJTEVfVFlQRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9FWFBMSUNJVF9GSUxFX1RZUEUucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfRVhQTElDSVRfRklMRV9UWVBFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFNldCB0aGUgWGNvZGUgYGBleHBsaWNpdEZpbGVUeXBlYGAgYXR0cmlidXRlIG9uIGl0cyByZWZlcmVuY2UgdG8gYQogdGFyZ2V0LiAgQ01ha2UgY29tcHV0ZXMgYSBkZWZhdWx0IGJhc2VkIG9uIHRhcmdldCB0eXBlIGJ1dAogY2FuIGJlIHRvbGQgZXhwbGljaXRseSB3aXRoIHRoaXMgcHJvcGVydHkuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX0dFTkVSQVRFX1NDSEVNRS5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX0dFTkVSQVRFX1NDSEVNRS5yc3QKaW5kZXggMGUxODJjZi4uMDZhM2NmOSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9HRU5FUkFURV9TQ0hFTUUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfR0VORVJBVEVfU0NIRU1FLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX0dFTkVSQVRFX1NDSEVNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogSWYgZW5hYmxlZCwgdGhlIDpnZW5lcmF0b3I6YFhjb2RlYCBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBzY2hlbWEgZmlsZXMuICBUaGVzZQogYXJlIHVzZWZ1bCB0byBpbnZva2UgYW5hbHl6ZSwgYXJjaGl2ZSwgYnVpbGQtZm9yLXRlc3RpbmcgYW5kIHRlc3QKIGFjdGlvbnMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgpAQCAtMzgsMyArNDAsNCBAQAogLSA6cHJvcF90Z3Q6YFhDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HYAogLSA6cHJvcF90Z3Q6YFhDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVGAKIC0gOnByb3BfdGd0OmBYQ09ERV9TQ0hFTUVfRVhFQ1VUQUJMRWAKKy0gOnByb3BfdGd0OmBYQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUllgCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1BST0RVQ1RfVFlQRS5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1BST0RVQ1RfVFlQRS5yc3QKaW5kZXggZjRlZjVjMC4uMTdhOWMzZiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9QUk9EVUNUX1RZUEUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfUFJPRFVDVF9UWVBFLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1BST0RVQ1RfVFlQRQogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBTZXQgdGhlIFhjb2RlIGBgcHJvZHVjdFR5cGVgYCBhdHRyaWJ1dGUgb24gaXRzIHJlZmVyZW5jZSB0byBhCiB0YXJnZXQuICBDTWFrZSBjb21wdXRlcyBhIGRlZmF1bHQgYmFzZWQgb24gdGFyZ2V0IHR5cGUgYnV0CiBjYW4gYmUgdG9sZCBleHBsaWNpdGx5IHdpdGggdGhpcyBwcm9wZXJ0eS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSLnJzdAppbmRleCBjYzliYWMyLi5jNzJlYzA2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUi5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfQUREUkVTU19TQU5JVElaRVIucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYEFkZHJlc3MgU2FuaXRpemVyYGAgaW4gdGhlIERpYWdub3N0aWNzCiBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSX1VTRV9BRlRFUl9SRVRVUk4ucnN0CmluZGV4IDM3YTA0M2EuLjI5M2I1ZDQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSX1VTRV9BRlRFUl9SRVRVUk4ucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSX1VTRV9BRlRFUl9SRVRVUk4ucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSX1VTRV9BRlRFUl9SRVRVUk4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBEZXRlY3QgdXNlIG9mIHN0YWNrIGFmdGVyIHJldHVybmBgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfQVJHVU1FTlRTLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0FSR1VNRU5UUy5yc3QKaW5kZXggMWYyMjhlMy4uMmJmY2I0MSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfQVJHVU1FTlRTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9BUkdVTUVOVFMucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0FSR1VNRU5UUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFNwZWNpZnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgQXJndW1lbnRzCiBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ERUJVR19BU19ST09ULnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RFQlVHX0FTX1JPT1QucnN0CmluZGV4IDU0MDdlODAuLjI1MjNkZWIgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RFQlVHX0FTX1JPT1QucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RFQlVHX0FTX1JPT1QucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0RFQlVHX0FTX1JPT1QKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogV2hldGhlciB0byBkZWJ1ZyB0aGUgdGFyZ2V0IGFzICdyb290Jy4KIAogUGxlYXNlIHJlZmVyIHRvIHRoZSA6cHJvcF90Z3Q6YFhDT0RFX0dFTkVSQVRFX1NDSEVNRWAgdGFyZ2V0IHByb3BlcnR5CmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ERUJVR19ET0NVTUVOVF9WRVJTSU9OSU5HLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RFQlVHX0RPQ1VNRU5UX1ZFUlNJT05JTkcucnN0CmluZGV4IDlhZmVlZGQuLmJiY2FlMzUgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RFQlVHX0RPQ1VNRU5UX1ZFUlNJT05JTkcucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RFQlVHX0RPQ1VNRU5UX1ZFUlNJT05JTkcucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0RFQlVHX0RPQ1VNRU5UX1ZFUlNJT05JTkcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogV2hldGhlciB0byBlbmFibGUKIGBgQWxsb3cgZGVidWdnaW5nIHdoZW4gdXNpbmcgZG9jdW1lbnQgVmVyc2lvbnMgQnJvd3NlcmBgCiBpbiB0aGUgT3B0aW9ucyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRElTQUJMRV9NQUlOX1RIUkVBRF9DSEVDS0VSLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUi5yc3QKaW5kZXggMWE2ZmNmZC4uM2QzMTVhMiAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRElTQUJMRV9NQUlOX1RIUkVBRF9DSEVDS0VSLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9ESVNBQkxFX01BSU5fVEhSRUFEX0NIRUNLRVIucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgYGBNYWluIFRocmVhZCBDaGVja2VyYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJQlJBUllfTE9BRFMucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSUJSQVJZX0xPQURTLnJzdAppbmRleCA5MjI0MDIyLi4yY2EyMGY3IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJQlJBUllfTE9BRFMucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RZTkFNSUNfTElCUkFSWV9MT0FEUy5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSUJSQVJZX0xPQURTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBEeW5hbWljIExpYnJhcnkgTG9hZHNgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RZTkFNSUNfTElOS0VSX0FQSV9VU0FHRS5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJTktFUl9BUElfVVNBR0UucnN0CmluZGV4IDIwM2M4MDMuLjI3OGM5ZWYgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0RZTkFNSUNfTElOS0VSX0FQSV9VU0FHRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9EWU5BTUlDX0xJTktFUl9BUElfVVNBR0UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYER5bmFtaWMgTGlua2VyIEFQSSB1c2FnZWBgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlQucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlQucnN0CmluZGV4IGM2ZDg3NWUuLjE2NTQyZjggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0VOVklST05NRU5ULnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVC5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFNwZWNpZnkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBBcmd1bWVudHMKIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0VYRUNVVEFCTEUucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRVhFQ1VUQUJMRS5yc3QKaW5kZXggMTA0ODQxYi4uYjQ1M2YxMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRVhFQ1VUQUJMRS5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfRVhFQ1VUQUJMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9TQ0hFTUVfRVhFQ1VUQUJMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBTcGVjaWZ5IHBhdGggdG8gZXhlY3V0YWJsZSBpbiB0aGUgSW5mbyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQKIFhjb2RlIHNjaGVtZS4gSWYgbm90IHNldCB0aGUgc2NoZW1hIGdlbmVyYXRvciB3aWxsIHNlbGVjdCB0aGUKIGN1cnJlbnQgdGFyZ2V0IGlmIGl0IGlzIGFjdHVhbGx5IGV4ZWN1dGFibGUuCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9HVUFSRF9NQUxMT0MucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfR1VBUkRfTUFMTE9DLnJzdAppbmRleCBjNGU4M2RhLi40YjI0MmEyIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9HVUFSRF9NQUxMT0MucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX0dVQVJEX01BTExPQy5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9TQ0hFTUVfR1VBUkRfTUFMTE9DCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYEd1YXJkIE1hbGxvY2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFJTl9USFJFQURfQ0hFQ0tFUl9TVE9QLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUC5yc3QKaW5kZXggNzM5OTJjMy4uMmE4MTNhYSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFJTl9USFJFQURfQ0hFQ0tFUl9TVE9QLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9NQUlOX1RIUkVBRF9DSEVDS0VSX1NUT1AucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX01BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBgYE1haW4gVGhyZWFkIENoZWNrZXJgYCBvcHRpb24KIGBgUGF1c2Ugb24gaXNzdWVzYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFMTE9DX0dVQVJEX0VER0VTLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BTExPQ19HVUFSRF9FREdFUy5yc3QKaW5kZXggY2E3NjFjMC4uNzUwZGE3NCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFMTE9DX0dVQVJEX0VER0VTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9NQUxMT0NfR1VBUkRfRURHRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX01BTExPQ19HVUFSRF9FREdFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgTWFsbG9jIEd1YXJkIEVkZ2VzYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9NQUxMT0NfU0NSSUJCTEUucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NDUklCQkxFLnJzdAppbmRleCBjNWRkYjk1Li40ZWJkMjFiIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9NQUxMT0NfU0NSSUJCTEUucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BTExPQ19TQ1JJQkJMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9TQ0hFTUVfTUFMTE9DX1NDUklCQkxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYE1hbGxvYyBTY3JpYmJsZWBgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NUQUNLLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX01BTExPQ19TVEFDSy5yc3QKaW5kZXggMTcwZjMzZC4uNWFmZTM0ZSAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NUQUNLLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9NQUxMT0NfU1RBQ0sucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX01BTExPQ19TVEFDSwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgTWFsbG9jIFN0YWNrYGAgaW4gdGhlIERpYWdub3N0aWNzCiBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVIucnN0CmluZGV4IGJiNzAxNDEuLmNjNzc0YzQgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVIucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVIucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBUaHJlYWQgU2FuaXRpemVyYGAgaW4gdGhlIERpYWdub3N0aWNzCiBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSX1NUT1AucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QLnJzdAppbmRleCA1ZGVhZGIxLi4zYmIyNTk2IDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSX1NUT1AucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVJfU1RPUC5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBUaHJlYWQgU2FuaXRpemVyIC0gUGF1c2Ugb24gaXNzdWVzYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUi5yc3QgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUi5yc3QKaW5kZXggMGNkODIzZC4uMTE0NjEzMCAxMDA2NDQKLS0tIGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVIucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSLnJzdApAQCAtMSw2ICsxLDggQEAKIFhDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSX1NUT1AucnN0CmluZGV4IGQxYTliY2EuLjM1OGYyOTggMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSX1NUT1AucnN0CisrKyBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSX1NUT1AucnN0CkBAIC0xLDYgKzEsOCBAQAogWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSX1NUT1AKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyYGAgb3B0aW9uCiBgYFBhdXNlIG9uIGlzc3Vlc2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZLnJzdCBiL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGQ1NmZjCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkucnN0CkBAIC0wLDAgKzEsMTUgQEAKK1hDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworU3BlY2lmeSB0aGUgYGBXb3JraW5nIERpcmVjdG9yeWBgIG9mIHRoZSAqUnVuKiBhbmQgKlByb2ZpbGUqCithY3Rpb25zIGluIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLiBJbiBjYXNlIHRoZSB2YWx1ZSBjb250YWlucworZ2VuZXJhdG9yIGV4cHJlc3Npb25zIHRob3NlIGFyZSBldmFsdWF0ZWQuCisKK1RoaXMgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQorOnZhcmlhYmxlOmBDTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUllgIGlmIGl0IGlzIHNldAord2hlbiBhIHRhcmdldCBpcyBjcmVhdGVkLgorCitQbGVhc2UgcmVmZXIgdG8gdGhlIDpwcm9wX3RndDpgWENPREVfR0VORVJBVEVfU0NIRU1FYCB0YXJnZXQgcHJvcGVydHkKK2RvY3VtZW50YXRpb24gdG8gc2VlIGFsbCBYY29kZSBzY2hlbWEgcmVsYXRlZCBwcm9wZXJ0aWVzLgpkaWZmIC0tZ2l0IGEvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMucnN0IGIvSGVscC9wcm9wX3RndC9YQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMucnN0CmluZGV4IDZlNzBlOGIuLjYwMzAxMDkgMTAwNjQ0Ci0tLSBhL0hlbHAvcHJvcF90Z3QvWENPREVfU0NIRU1FX1pPTUJJRV9PQkpFQ1RTLnJzdAorKysgYi9IZWxwL3Byb3BfdGd0L1hDT0RFX1NDSEVNRV9aT01CSUVfT0JKRUNUUy5yc3QKQEAgLTEsNiArMSw4IEBACiBYQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgWm9tYmllIE9iamVjdHNgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvcHJvcF90Z3QvWENURVNULnJzdCBiL0hlbHAvcHJvcF90Z3QvWENURVNULnJzdAppbmRleCBlYjQ3ZTYwLi42N2U5YTcwIDEwMDY0NAotLS0gYS9IZWxwL3Byb3BfdGd0L1hDVEVTVC5yc3QKKysrIGIvSGVscC9wcm9wX3RndC9YQ1RFU1QucnN0CkBAIC0xLDYgKzEsOCBAQAogWENURVNUCiAtLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIFRoaXMgdGFyZ2V0IGlzIGEgWENUZXN0IENGQnVuZGxlIG9uIHRoZSBNYWMuCiAKIFRoaXMgcHJvcGVydHkgd2lsbCB1c3VhbGx5IGdldCBzZXQgdmlhIHRoZSA6Y29tbWFuZDpgeGN0ZXN0X2FkZF9idW5kbGVgCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvMy4xLnJzdCBiL0hlbHAvcmVsZWFzZS8zLjEucnN0CmluZGV4IDhiZWEyOGYuLjNmNDcxMmIgMTAwNjQ0Ci0tLSBhL0hlbHAvcmVsZWFzZS8zLjEucnN0CisrKyBiL0hlbHAvcmVsZWFzZS8zLjEucnN0CkBAIC04Myw3ICs4Myw3IEBACiAgIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9uIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YC4KIAogKiBUaGUgOmNvbW1hbmQ6YHN0cmluZ2AgY29tbWFuZCBsZWFybmVkIGEgbmV3IGBgVVVJRGBgIHN1YmNvbW1hbmQKLSAgdG8gZ2VuZXJhdGUgYSB1bml2ZXJhbGx5IHVuaXF1ZSBpZGVudGlmaWVyLgorICB0byBnZW5lcmF0ZSBhIHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyLgogCiAqIE5ldyA6Y29tbWFuZDpgdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXNgIGNvbW1hbmQgYWxsb3dzIHBvcHVsYXRpbmcgdGhlCiAgIDpwcm9wX3RndDpgQ09NUElMRV9GRUFUVVJFU2AgdGFyZ2V0IHByb3BlcnR5LCBqdXN0IGxpa2UgYW55IG90aGVyCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvMy4xMC5yc3QgYi9IZWxwL3JlbGVhc2UvMy4xMC5yc3QKaW5kZXggMDNlZGEzNi4uMTE3NDE1YiAxMDA2NDQKLS0tIGEvSGVscC9yZWxlYXNlLzMuMTAucnN0CisrKyBiL0hlbHAvcmVsZWFzZS8zLjEwLnJzdApAQCAtMjM2LDcgKzIzNiw3IEBACiAgIHN1cHBvcnQgZm9yIEMrKzExIGFuZCBhIHBvcnQgb2YgbGlidXYuICBTZWUgYENNYWtlIElzc3VlIDE3MTM3YF8uCiAgIFVzZSBDTWFrZSAzLjkgb3IgbG93ZXIgaW5zdGVhZCBmb3IgSFAtVVggc3VwcG9ydC4KIAotLi4gX2BDTWFrZSBJc3N1ZSAxNzEzN2A6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xNzEzNworLi4gX2BDTWFrZSBJc3N1ZSAxNzEzN2A6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzE3MTM3CiAKIE90aGVyIENoYW5nZXMKID09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS8zLjE3LnJzdCBiL0hlbHAvcmVsZWFzZS8zLjE3LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2M2NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlLzMuMTcucnN0CkBAIC0wLDAgKzEsMzQ4IEBACitDTWFrZSAzLjE3IFJlbGVhc2UgTm90ZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKgorCisuLiBvbmx5OjogaHRtbAorCisgIC4uIGNvbnRlbnRzOjoKKworQ2hhbmdlcyBtYWRlIHNpbmNlIENNYWtlIDMuMTYgaW5jbHVkZSB0aGUgZm9sbG93aW5nLgorCitOZXcgRmVhdHVyZXMKKz09PT09PT09PT09PQorCitHZW5lcmF0b3JzCistLS0tLS0tLS0tCisKKyogOm1hbnVhbDpgY21ha2UoMSlgIGdhaW5lZCBhIDpnZW5lcmF0b3I6YE5pbmphIE11bHRpLUNvbmZpZ2AgZ2VuZXJhdG9yLAorICB3aGljaCBpcyBzaW1pbGFyIHRvIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAgZ2VuZXJhdG9yIGJ1dCBjYW4gYmUgdXNlZCB0byBidWlsZAorICBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyBhdCBvbmNlLgorCisqIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgbGVhcm5lZCB0byBzdXBwb3J0IHBlci1jb25maWcgc291cmNlcy4KKyAgUHJldmlvdXNseSBvbmx5IDpyZWY6YENvbW1hbmQtTGluZSBCdWlsZCBUb29sIEdlbmVyYXRvcnNgIHN1cHBvcnRlZCB0aGVtLgorCisqIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTAgYW5kIGFib3ZlIG5vdyBzdXBwb3J0CisgIHNwZWNpZnlpbmcgdGhlIGBgVkNUYXJnZXRzUGF0aGBgIHZhbHVlIGZvciBwcm9qZWN0IGZpbGVzIGluCisgIDp2YXJpYWJsZTpgQ01BS0VfR0VORVJBVE9SX1RPT0xTRVRgIHNldHRpbmcuCisKKyogOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBmb3IgVlMgMjAxMCBhbmQgYWJvdmUgbGVhcm5lZCB0bworICBzdXBwb3J0IC5ORVQgU3RhbmRhcmQgYW5kIC5ORVQgQ29yZS4gIFNlZSB0aGUKKyAgOnByb3BfdGd0OmBET1RORVRfVEFSR0VUX0ZSQU1FV09SS2AgdGFyZ2V0IHByb3BlcnR5IGFuZAorICBhc3NvY2lhdGVkIDp2YXJpYWJsZTpgQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktgIHZhcmlhYmxlLgorCitMYW5ndWFnZXMKKy0tLS0tLS0tLQorCisqIFRoZSA6bWFudWFsOmBDb21waWxlIEZlYXR1cmVzIDxjbWFrZS1jb21waWxlLWZlYXR1cmVzKDcpPmAgZnVuY3Rpb25hbGl0eQorICBub3cgb2ZmZXJzIG1ldGEtZmVhdHVyZXMgZm9yIHRoZSBDVURBIGxhbmd1YWdlIHN0YW5kYXJkIGxldmVscworICAoZS5nLiBgYGN1ZGFfc3RkXzAzYGAsIGBgY3VkYV9zdGRfMTRgYCkuICBTZWUKKyAgOnByb3BfZ2JsOmBDTUFLRV9DVURBX0tOT1dOX0ZFQVRVUkVTYC4KKworQ29tcGlsZXJzCistLS0tLS0tLS0KKworKiBUaGUgSUJNIFhMIEZvcnRyYW4gY29tcGlsZXIgaXMgbm93IHN1cHBvcnRlZCBieSB0aGUgOmdlbmVyYXRvcjpgTmluamFgCisgIGdlbmVyYXRvci4KKworQ29tbWFuZC1MaW5lCistLS0tLS0tLS0tLS0KKworKiA6bWFudWFsOmBjbWFrZSgxKWAgZ2FpbmVkIGEgYGAtLWRlYnVnLWZpbmRgYCBjb21tYW5kLWxpbmUgb3B0aW9uIHRvCisgIGVuYWJsZSBhZGRpdGlvbmFsIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBvbiB3aGVyZSBgYGZpbmRfKmBgIGNvbW1hbmRzIHNlYXJjaC4KKworKiA6bWFudWFsOmBjbWFrZSgxKWAgZ2FpbmVkIGEgYGAtLXRyYWNlLWZvcm1hdGBgIGNvbW1hbmQtbGluZSBvcHRpb24gdGhhdAorICBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGBgLS10cmFjZWBgIG91dHB1dCBmb3JtYXQuIEN1cnJlbnRseSwgdGhlIG9sZAorICBodW1hbiByZWFkYWJsZSBhbmQgdGhlIG5ldyBKU09OIGZvcm1hdCBhcmUgc3VwcG9ydGVkLiBUaGUgbmV3IEpTT04gZm9ybWF0CisgIGlzIGVhc2llciB0byBwYXJzZSBhdXRvbWF0aWNhbGx5IHRoYW4gdGhlIGV4aXN0aW5nIGZvcm1hdC4KKworKiA6bWFudWFsOmBjbWFrZSgxKWAgZ2FpbmVkIGEgYGAtRSBybWBgIGNvbW1hbmQtbGluZSB0b29sIHRoYXQgY2FuIGJlCisgIHVzZWQgdG8gcmVtb3ZlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcy4gIFRoaXMgc3VwZXJzZWRlcyB0aGUgZXhpc3RpbmcKKyAgYGAtRSByZW1vdmVgYCBhbmQgYGAtRSByZW1vdmVfZGlyZWN0b3J5YGAgdG9vbHMgYW5kIGhhcyBiZXR0ZXIgc2VtYW50aWNzLgorCitDb21tYW5kcworLS0tLS0tLS0KKworKiBUaGUgOmNvbW1hbmQ6YGFkZF9jdXN0b21fY29tbWFuZGAgY29tbWFuZCBsZWFybmVkIHRvIGludGVycHJldCBwYXRocyBpbgorICBgYERFUEVORFNgYCBhcmd1bWVudHMgdGhhdCBhcmUgc3BlY2lmaWVkIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50CisgIGJpbmFyeSBkaXJlY3RvcnkuCisKKyogVGhlIDpjb21tYW5kOmBmb3JlYWNoYCBjb21tYW5kIGxlYXJuZWQgYSBuZXcgYGBaSVBfTElTVFNgYCBvcHRpb24gdG8gaXRlcmF0ZQorICBvdmVyIG11bHRpcGxlIGxpc3RzIHNpbXVsdGFuZW91c2x5LgorCisqIFRoZSA6Y29tbWFuZDpgbG9hZF9jYWNoZShSRUFEX1dJVEhfUFJFRklYKWAgY29tbWFuZCBtb2RlIGlzIG5vdyBhbGxvd2VkCisgIHdoZW4gdXNpbmcgYGBjbWFrZSAtUGBgIHRvIDpyZWY6YFJ1biBhIFNjcmlwdCA8U2NyaXB0IFByb2Nlc3NpbmcgTW9kZT5gLgorCisqIFRoZSA6Y29tbWFuZDpgbWVzc2FnZWAgY29tbWFuZCBsZWFybmVkIHRvIG91dHB1dCBjb250ZXh0IHByb3ZpZGVkIGluCisgIHRoZSA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfQ09OVEVYVGAgdmFyaWFibGUgZm9yIGxvZyBsZXZlbHMKKyAgYGBOT1RJQ0VgYCBhbmQgYmVsb3cuICBFbmFibGUgdGhpcyBvdXRwdXQgd2l0aCB0aGUgbmV3IGBgLS1sb2ctY29udGV4dGBgCisgIGNvbW1hbmQtbGluZSBvcHRpb24gb3IgOnZhcmlhYmxlOmBDTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPV2AgdmFyaWFibGUuCisKKyogVGhlIDpjb21tYW5kOmBtZXNzYWdlYCBjb21tYW5kIGdhaW5lZCBuZXcga2V5d29yZHMgYGBDSEVDS19TVEFSVGBgLAorICBgYENIRUNLX1BBU1NgYCBhbmQgYGBDSEVDS19GQUlMYGAuCisKKyogVGhlIDpjb21tYW5kOmB0YXJnZXRfY29tcGlsZV9vcHRpb25zYCBjb21tYW5kIG5vdyBob25vcnMgdGhlIGBgQkVGT1JFYGAKKyAga2V5d29yZCBtb3JlIGNvbnNpc3RlbnRseS4gIFNlZSBwb2xpY3kgOnBvbGljeTpgQ01QMDEwMWAuCisKK1ZhcmlhYmxlcworLS0tLS0tLS0tCisKKyogQSA6dmFyaWFibGU6YENNQUtFX0NURVNUX0FSR1VNRU5UU2AgdmFyaWFibGUgd2FzIGFkZGVkIHRvIHNwZWNpZnkgYSBsaXN0CisgIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgcGFzc2VkIHRvIENUZXN0IHdoZW4gcnVubmluZyB0aHJvdWdoIHRoZQorICBgYHRlc3RgYCAob3IgYGBSVU5fVEVTVFNgYCkgdGFyZ2V0IG9mIHRoZSBnZW5lcmF0ZWQgYnVpbGQgc3lzdGVtLgorCisqIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBub3cgZGVmaW5lZCBpbnNpZGUgYSA6Y29tbWFuZDpgZnVuY3Rpb25gOgorCisgIC0gOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OYAorICAtIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUmAKKyAgLSA6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFYAorICAtIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkVgCisKKyogVGhlIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllgIHZhcmlhYmxlIGFuZAorICA6cHJvcF90Z3Q6YENVREFfUlVOVElNRV9MSUJSQVJZYCB0YXJnZXQgcHJvcGVydHkgd2VyZSBpbnRyb2R1Y2VkIHRvCisgIHNlbGVjdCB0aGUgQ1VEQSBydW50aW1lIGxpYnJhcnkgdXNlZCB3aGVuIGxpbmtpbmcgdGFyZ2V0cyB0aGF0CisgIHVzZSBDVURBLgorCisqIFRoZSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfREVCVUdfTU9ERWAgdmFyaWFibGUgd2FzIGludHJvZHVjZWQgdG8KKyAgcHJpbnQgZXh0cmEgYGBmaW5kXypgYCBjYWxsIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgY21ha2UgcnVuIHRvIHN0YW5kYXJkCisgIGVycm9yLiBPdXRwdXQgaXMgZGVzaWduZWQgZm9yIGh1bWFuIGNvbnN1bXB0aW9uIGFuZCBub3QgZm9yIHBhcnNpbmcuCisKKyogVGhlIDp2YXJpYWJsZTpgQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFNgIHZhcmlhYmxlIG5vdyB0YWtlcyBpdHMKKyAgaW5pdGlhbCB2YWx1ZSBmcm9tIHRoZSA6ZW52dmFyOmBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EU2AgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgaWYgbm8gZXhwbGljaXQgY29uZmlndXJhdGlvbiBpcyBnaXZlbi4KKworKiBUaGUgOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fQ09NUElMRVJfTEFVTkNIRVJgIHZhcmlhYmxlLCBpZiBub3Qgc2V0CisgIGV4cGxpY2l0bHksIG5vdyB0YWtlcyBpdHMgaW5pdGlhbCB2YWx1ZSBmcm9tIHRoZQorICA6ZW52dmFyOmBDTUFLRV88TEFORz5fQ09NUElMRVJfTEFVTkNIRVJgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisqIFRoZSA6dmFyaWFibGU6YENNQUtFX01FU1NBR0VfTE9HX0xFVkVMYCB2YXJpYWJsZSBjYW4gbm93IGJlIHVzZWQKKyAgdG8gcGVyc2lzdCBhIGxvZyBsZXZlbCBiZXR3ZWVuIENNYWtlIHJ1bnMsIHVubGlrZSB0aGUgYGAtLWxvZy1sZXZlbGBgCisgIGNvbW1hbmQgbGluZSBvcHRpb24gd2hpY2ggb25seSBhcHBsaWVzIHRvIHRoYXQgcGFydGljdWxhciBydW4uCisKKyogVGhlIDp2YXJpYWJsZTpgQ01BS0VfWENPREVfU0NIRU1FX0VOVklST05NRU5UYCB2YXJpYWJsZSB3YXMgYWRkZWQKKyAgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBYQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlRgIHRhcmdldCBwcm9wZXJ0eS4KKworKiBUaGUgOnZhcmlhYmxlOmBDTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUllgIHZhcmlhYmxlIGFuZAorICBhc3NvY2lhdGVkIDpwcm9wX3RndDpgWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZYCB0YXJnZXQgcHJvcGVydHkKKyAgd2VyZSBhZGRlZCB0byB0ZWxsIHRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgZ2VuZXJhdG9yIHRvIHNldCB0aGUgdmFsdWUgb2YKKyAgdGhlIGBgQ3VzdG9tIFdvcmtpbmcgRGlyZWN0b3J5YGAgc2NoZW1hIG9wdGlvbi4KKworUHJvcGVydGllcworLS0tLS0tLS0tLQorCisqIFRoZSA6cHJvcF90Z3Q6YEFJWF9FWFBPUlRfQUxMX1NZTUJPTFNgIHRhcmdldCBwcm9wZXJ0eSBhbmQgYXNzb2NpYXRlZAorICA6dmFyaWFibGU6YENNQUtFX0FJWF9FWFBPUlRfQUxMX1NZTUJPTFNgIHZhcmlhYmxlIHdlcmUgY3JlYXRlZCB0bworICBvcHRpb25hbGx5IGV4cGxpY2l0bHkgZGlzYWJsZSBhdXRvbWF0aWMgZXhwb3J0IG9mIHN5bWJvbHMgZnJvbSBzaGFyZWQKKyAgbGlicmFyaWVzIG9uIEFJWC4KKworKiBUaGUgOnByb3BfdGd0OmBERVBSRUNBVElPTmAgdGFyZ2V0IHByb3BlcnR5IHdhcyBhZGRlZCB0byBtYXJrCisgIGEgdGFyZ2V0IGFzIGRlcHJlY2F0ZWQuICBJZiBhIGxpbmtlZCB0YXJnZXQgaXMgbWFya2VkIGFzCisgIGRlcHJlY2F0ZWQsIGEgd2FybmluZyB3aXRoIHRoZSBkZXByZWNhdGlvbiBtZXNzYWdlIGlzIGlzc3VlZAorICBhdCBnZW5lcmF0ZSB0aW1lLgorCisqIFRoZSA6cHJvcF90Z3Q6YElOU1RBTExfTkFNRV9ESVJgIHRhcmdldCBwcm9wZXJ0eSBub3cgc3VwcG9ydHMKKyAgOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YC4KKyAgSW4gcGFydGljdWxhciwgdGhlIGBgJDxJTlNUQUxMX1BSRUZJWD5gYCBnZW5lcmF0b3IgZXhwcmVzc2lvbiBjYW4KKyAgYmUgdXNlZCB0byBzZXQgdGhlIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgaW5zdGFsbC10aW1lIHByZWZpeC4KKworKiBUYXJnZXQgcHJvcGVydGllcyA6cHJvcF90Z3Q6YE1BQ0hPX0NPTVBBVElCSUxJVFlfVkVSU0lPTmAgYW5kCisgIDpwcm9wX3RndDpgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OYCB3ZXJlIGFkZGVkIHRvIHNldCB0aGUKKyAgYGBjb21wYXRpYmlsaXR5X3ZlcnNpb25gYCBhbmQgYGBjdXJlbnRfdmVyc2lvbmBgLCByZXNwZWN0aXZlbHksCisgIGZvciBNYWNoLU8gYmluYXJpZXMuICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlmIHRoZXNlIHByb3BlcnRpZXMKKyAgYXJlIG5vdCBzZXQsIDpwcm9wX3RndDpgU09WRVJTSU9OYCBhbmQgOnByb3BfdGd0OmBWRVJTSU9OYAorICBhcmUgdXNlZCByZXNwZWN0aXZlbHkgYXMgZmFsbGJhY2tzLgorCisqIFRoZSA6cHJvcF90Z3Q6YFZTX0RPVE5FVF9ET0NVTUVOVEFUSU9OX0ZJTEVgIHRhcmdldCBwcm9wZXJ0eSB3YXMgYWRkZWQKKyAgdG8gdGVsbCA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIHRvIGdlbmVyYXRlIGEgYGBEb2N1bWVudGF0aW9uRmlsZWBgCisgIHJlZmVyZW5jZSBpbiBgYC5jc3Byb2pgYCBmaWxlcy4KKworTW9kdWxlcworLS0tLS0tLQorCisqIFRoZSA6bW9kdWxlOmBFeHRlcm5hbFByb2plY3RgIG1vZHVsZSA6Y29tbWFuZDpgRXh0ZXJuYWxQcm9qZWN0X0FkZGAKKyAgY29tbWFuZCBnYWluZWQgYSBgYEdJVF9TVUJNT0RVTEVTX1JFQ1VSU0VgYCBvcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyCisgIEdpdCBzdWJtb2R1bGVzIHNob3VsZCBiZSB1cGRhdGVkIHJlY3Vyc2l2ZWx5LiAgVGhlIGRlZmF1bHQgaXMgb24gdG8KKyAgcHJlc2VydmUgZXhpc3RpbmcgYmVoYXZpb3IuCisKKyogVGhlIDptb2R1bGU6YEZpbmRDVURBVG9vbGtpdGAgbW9kdWxlIHdhcyBhZGRlZCB0byBmaW5kIHRoZQorICBDVURBIFRvb2xraXQgd2l0aG91dCBlbmFibGluZyBDVURBIGFzIGEgbGFuZ3VhZ2UuCisKKyogVGhlIDptb2R1bGU6YEZpbmRDVVJMYCBtb2R1bGUgbGVhcm5lZCB0byBmaW5kIENVUkwgdXNpbmcKKyAgdGhlIGBgQ1VSTENvbmZpZy5jbWFrZWBgIHBhY2thZ2UgY29uZmlndXJhdGlvbiBmaWxlIGdlbmVyYXRlZCBieQorICBDVVJMJ3MgY21ha2UgYnVpbGRzeXN0ZW0uICBJdCBhbHNvIGdhaW5lZCBhIG5ldyBgYENVUkxfTk9fQ1VSTF9DTUFLRWBgCisgIG9wdGlvbiB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuCisKKyogVGhlIDptb2R1bGU6YEZpbmRGTEVYYCBtb2R1bGUncyBgYEZMRVhfVEFSR0VUYGAgY29tbWFuZCBub3cgcnVucyBgYGZsZXhgYAorICB3aXRoIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSYCBhcyB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisgIFNlZSBwb2xpY3kgOnBvbGljeTpgQ01QMDA5OGAuCisKKyogVGhlIDptb2R1bGU6YEZpbmRMaWJBcmNoaXZlYCBtb2R1bGUgbm93IHByb3ZpZGVzIGFuIGltcG9ydGVkIHRhcmdldAorICBmb3IgbGliYXJjaGl2ZS4KKworKiBUaGUgOm1vZHVsZTpgRmluZFB5dGhvbmAgbW9kdWxlIGhhcyBsZWFybmVkIHRvIGZpbmQgUHl0aG9uIGNvbXBvbmVudHMKKyAgaW4gYWN0aXZlIHZpcnR1YWwgZW52aXJvbm1lbnRzIG1hbmFnZWQgYnkgYGBjb25kYWBgLgorCisqIFRoZSA6bW9kdWxlOmBGaW5kUHl0aG9uM2AgYW5kIDptb2R1bGU6YEZpbmRQeXRob25gIG1vZHVsZXMgZ2FpbmVkLAorICByZXNwZWN0aXZlbHksIHZhcmlhYmxlIGBgUHl0aG9uM19TT0FCSWBgIGFuZCBgYFB5dGhvbl9TT0FCSWBgIGdpdmluZworICB0aGUgc3RhbmRhcmQgZXh0ZW5zaW9uIHN1ZmZpeCBmb3IgbW9kdWxlcy4gTW9yZW92ZXIsIGNvbW1hbmRzCisgIGBgUHl0aG9uM19hZGRfbGlicmFyeSgpYGAgYW5kIGBgUHl0aG9uX2FkZF9saWJyYXJ5KClgYCBnYWluZWQgdGhlIG9wdGlvbgorICBgYFdJVEhfU09BQklgYCB0byBwcmVmaXggdGhlIGxpYnJhcnkgc3VmZml4IHdpdGggdGhlIHZhbHVlIG9mIGBgU09BQklgYC4KKworKiBUaGUgOm1vZHVsZTpgRmluZExpYlhtbDJgIG1vZHVsZSBub3cgcHJvdmlkZXMgYW4gaW1wb3J0ZWQgdGFyZ2V0IGZvciB0aGUKKyAgYGB4bWxsaW50YGAgZXhlY3V0YWJsZS4KKworQXV0b2dlbgorLS0tLS0tLQorCisqIDpwcm9wX3RndDpgQVVUT01PQ2AgYW5kIDpwcm9wX3RndDpgQVVUT1VJQ2AgbGVhcm5lZCB0byBwcm9jZXNzIGhlYWRlcnMKKyAgd2l0aCBhIGBgLmhoYGAgZXh0ZW5zaW9uLiAgU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMTAwYC4KKworQ1Rlc3QKKy0tLS0tCisKKyogVGhlIDp2YXJpYWJsZTpgQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFYCB2YXJpYWJsZSBpcyBub3cgc2V0IGZyb20gdGhlCisgIGNvbW1hbmQgbGluZSB3aGVuIDptYW51YWw6YGN0ZXN0KDEpYCBpcyBpbnZva2VkIHdpdGggYGAtQyA8Y2ZnPmBgLgorCisqIFRoZSA6bWFudWFsOmBjdGVzdCgxKWAgdG9vbCBnYWluZWQgc3VwcG9ydCBmb3IgRHIuIE1lbW9yeSB0byBydW4KKyAgbWVtY2hlY2sgcnVucy4KKworKiBUaGUgOm1hbnVhbDpgY3Rlc3QoMSlgIHRvb2wgZ2FpbmVkIGEgYGAtLW5vLXRlc3RzPTxbZXJyb3J8aWdub3JlXT5gYCBvcHRpb24KKyAgdG8gZXhwbGljaXRseSBzZXQgYW5kIHVuaWZ5IHRoZSBiZWhhdmlvciBiZXR3ZWVuIGRpcmVjdCBpbnZvY2F0aW9uIGFuZAorICBzY3JpcHQgbW9kZSBpZiBubyB0ZXN0cyB3ZXJlIGZvdW5kLgorCisqIFRoZSA6bWFudWFsOmBjdGVzdCgxKWAgdG9vbCBnYWluZWQgYSBgYC0tcmVwZWF0IDxtb2RlPjo8bj5gYCBvcHRpb24KKyAgdG8gc3BlY2lmeSBjb25kaXRpb25zIGluIHdoaWNoIHRvIHJlcGVhdCB0ZXN0cy4gIFRoaXMgZ2VuZXJhbGl6ZXMKKyAgdGhlIGV4aXN0aW5nIGBgLS1yZXBlYXQtdW50aWwtZmFpbCA8bj5gYCBvcHRpb24gdG8gYWRkIG1vZGVzIGZvcgorICBgYHVudGlsLXBhc3NgYCBhbmQgYGBhZnRlci10aW1lb3V0YGAuCisKKyogVGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YCBjb21tYW5kIGdhaW5lZCBhIGBgUkVQRUFUIDxtb2RlPjo8bj5gYCBvcHRpb24KKyAgdG8gc3BlY2lmeSBjb25kaXRpb25zIGluIHdoaWNoIHRvIHJlcGVhdCB0ZXN0cy4KKworQ1BhY2sKKy0tLS0tCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIERyYWdORHJvcCBHZW5lcmF0b3JgIGxlYXJuZWQgdG8gdXNlCisgIHRoZSA6dmFyaWFibGU6YENQQUNLX0RNR188Y29tcG9uZW50Pl9GSUxFX05BTUVgIHZhcmlhYmxlCisgIHRvIHNldCBhIGN1c3RvbSBmaWxlbmFtZSB3aGVuIHBhY2thZ2luZyBjb21wb25lbnRzIGludG8KKyAgdGhlaXIgb3duIERNR3MuCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIERyYWdORHJvcCBHZW5lcmF0b3JgIGxlYXJuZWQgdG8gaGFuZGxlCisgIFJURiBmb3JtYXR0ZWQgbGljZW5zZSBmaWxlcy4gIFdoZW4gOnZhcmlhYmxlOmBDUEFDS19ETUdfU0xBX0RJUmAKKyAgdmFyaWFibGUgaXMgc2V0LCBgYDxsYW5ndWFnZT4ubGljZW5zZS5ydGZgYCBpcyBjb25zaWRlcmVkLCBidXQKKyAgb25seSBhcyBhIGZhbGxiYWNrIHdoZW4gdGhlIHBsYWludGV4dCAoYGAudHh0YGApIGZpbGUgaXMgbm90IGZvdW5kCisgIGluIG9yZGVyIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisqIFRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBOU0lTIEdlbmVyYXRvcmAgZ2FpbmVkIGEgbmV3IHZhcmlhYmxlCisgIDp2YXJpYWJsZTpgQ1BBQ0tfTlNJU19NVUlfSEVBREVSSU1BR0VgIHRvIHNldCB0aGUgaGVhZGVyIGltYWdlLgorICBUbyBub3QgYnJlYWsgZXhpc3Rpbmcgc2V0dXBzLCBpdCBzdGlsbCBkZWZhdWx0cyB0bworICA6dmFyaWFibGU6YENQQUNLX1BBQ0tBR0VfSUNPTmAgaWYgdGhlIG5ldyB2YXJpYWJsZSBpcyBub3Qgc2V0LgorCisqIFRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBOU0lTIEdlbmVyYXRvcmAgbm93IHN1cHBvcnRzCisgIDp2YXJpYWJsZTpgQ1BBQ0tfTlNJU19VTklOU1RBTExfTkFNRWAuCisgIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgVW5pbnN0YWxsIHByb2dyYW0uCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIE5TSVMgR2VuZXJhdG9yYCBub3cgc3VwcG9ydHMKKyAgOnZhcmlhYmxlOmBDUEFDS19OU0lTX1dFTENPTUVfVElUTEVgIGFuZAorICA6dmFyaWFibGU6YENQQUNLX05TSVNfV0VMQ09NRV9USVRMRV8zTElORVNgLgorICBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB3ZWxjb21lIHBhZ2UgdGl0bGUgYW5kIGRpc3BsYXkgaXQgaW4gMyBsaW5lcy4KKworKiBUaGUgOmNwYWNrX2dlbjpgQ1BhY2sgTlNJUyBHZW5lcmF0b3JgIG5vdyBzdXBwb3J0cworICA6dmFyaWFibGU6YENQQUNLX05TSVNfRklOSVNIX1RJVExFYCBhbmQKKyAgOnZhcmlhYmxlOmBDUEFDS19OU0lTX0ZJTklTSF9USVRMRV8zTElORVNgLgorICBUaGVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaW5pc2ggcGFnZSB0aXRsZSBhbmQgZGlzcGxheSBpdCBpbiAzIGxpbmVzLgorCisqIFRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBwcm9kdWN0YnVpbGQgR2VuZXJhdG9yYCBnYWluZWQgc3VwcG9ydCBmb3IgYQorICA6dmFyaWFibGU6YENQQUNLX1BST0RVQ1RCVUlMRF9CQUNLR1JPVU5EYCB2YXJpYWJsZSB0byBzcGVjaWZ5IGEgYmFja2dyb3VuZAorICBpbWFnZSBmb3IgdGhlIG1hY09TIGluc3RhbGxlci4KKworT3RoZXIKKy0tLS0tCisKKyogOm1hbnVhbDpgY2NtYWtlKDEpYCBub3cgZGlzcGxheXMgY2FjaGUgdmFsdWVzIHVzaW5nIGNvbG9ycworICBiYXNlZCBvbiB0aGUgZW50cnkgdHlwZSBpZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgY29sb3IuCisKKyogOm1hbnVhbDpgY2NtYWtlKDEpYCBub3cgZGlzcGxheXMgbWVzc2FnZXMgYW5kIGEgcHJvZ3Jlc3MgYmFyIGR1cmluZworICBjb25maWd1cmUgYW5kIGdlbmVyYXRlLiAgSXQgd2lsbCBrZWVwIHRoZSBvdXRwdXQgZGlzcGxheWVkIGlmIGFueQorICBlcnJvcnMgb3Igd2FybmluZ3Mgb2NjdXJyZWQuCisKK0RlcHJlY2F0ZWQgYW5kIFJlbW92ZWQgRmVhdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBBbiBleHBsaWNpdCBkZXByZWNhdGlvbiBkaWFnbm9zdGljIHdhcyBhZGRlZCBmb3IgcG9saWN5IGBgQ01QMDA2OGBgCisgIGFuZCBwb2xpY3kgYGBDTVAwMDY5YGAgKGBgQ01QMDA2N2BgIGFuZCBiZWxvdyB3ZXJlIGFscmVhZHkgZGVwcmVjYXRlZCkuCisgIFRoZSA6bWFudWFsOmBjbWFrZS1wb2xpY2llcyg3KWAgbWFudWFsIGV4cGxhaW5zIHRoYXQgdGhlIE9MRCBiZWhhdmlvcnMKKyAgb2YgYWxsIHBvbGljaWVzIGFyZSBkZXByZWNhdGVkIGFuZCB0aGF0IHByb2plY3RzIHNob3VsZCBwb3J0IHRvIHRoZQorICBORVcgYmVoYXZpb3JzLgorCisqIFRoZSA6Y3BhY2tfZ2VuOmBDUGFjayBQYWNrYWdlTWFrZXIgR2VuZXJhdG9yYCBnZW5lcmF0b3IgaGFzIGJlZW4KKyAgZGVwcmVjYXRlZCBiZWNhdXNlIFhjb2RlIG5vIGxvbmdlciBkaXN0cmlidXRlcyB0aGUgUGFja2FnZU1ha2VyIHRvb2xzLgorICBUaGUgdW5kb2N1bWVudGVkIGBgT1NYWDExYGAgZ2VuZXJhdG9yIGhhcyBhbHNvIGJlZW4gZGVwcmVjYXRlZC4KKworKiBUaGUgOm1hbnVhbDpgY21ha2UoMSlgIGNvbW1hbmQtbGluZSBgYC1FIHJlbW92ZWBgIGFuZCBgYC1FIHJlbW92ZV9kaXJlY3RvcnlgYAorICB0b29scyBhcmUgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgbmV3IGBgLUUgcm1gYCB0b29sLiAgVGhlIG9sZGVyIHRvb2xzCisgIGFsd2F5cyByZXR1cm5lZCAwIGlmIGEgbmFtZWQgcGF0aCBkaWQgbm90IGV4aXN0IGV2ZW4gd2l0aG91dCB0aGUgZm9yY2UKKyAgb3B0aW9uIGFuZCBjYW5ub3QgYmUgZml4ZWQgd2l0aG91dCBicmVha2luZyBjb21wYXRpYmlsaXR5LCBhbmQgc28gaGF2ZQorICBiZWVuIHN1cGVyc2VkZWQuCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIE5TSVMgR2VuZXJhdG9yYCBub3cgcmVxdWlyZXMgTlNJUyAzLjAgb3IgbGF0ZXIuCisKK090aGVyIENoYW5nZXMKKz09PT09PT09PT09PT0KKworKiBUaGUgOm1hbnVhbDpgZmlsZSBBUEkgPGNtYWtlLWZpbGUtYXBpKDcpPmAgaW5kZXggZmlsZSBub3cgZW1pdHMgYQorICBgYG11bHRpQ29uZmlnYGAgZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBnZW5lcmF0b3Igc3VwcG9ydHMKKyAgbXVsdGlwbGUgb3V0cHV0IGNvbmZpZ3VyYXRpb25zLgorCisqIFRhcmdldCBsaW5rIHByb3BlcnRpZXMgOnByb3BfdGd0OmBJTlRFUkZBQ0VfTElOS19PUFRJT05TYCwKKyAgOnByb3BfdGd0OmBJTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFU2AgYW5kCisgIDpwcm9wX3RndDpgSU5URVJGQUNFX0xJTktfREVQRU5EU2AgYXJlIG5vdyB0cmFuc2l0aXZlIG92ZXIgcHJpdmF0ZQorICBkZXBlbmRlbmNpZXMgb24gc3RhdGljIGxpYnJhcmllcy4KKyAgU2VlIHBvbGljeSA6cG9saWN5OmBDTVAwMDk5YC4KKworKiBXaGVuIHVzaW5nIE1pbkdXIHRvb2xzLCB0aGUgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAgY29tbWFuZCBubyBsb25nZXIKKyAgZmluZHMgYGAuZGxsYGAgZmlsZXMgYnkgZGVmYXVsdC4gIEluc3RlYWQsIGl0IGV4cGVjdHMgYGAuZGxsLmFgYCBpbXBvcnQKKyAgbGlicmFyaWVzIHRvIGJlIGF2YWlsYWJsZS4KKworKiBUaGUgOmdlbmVyYXRvcjpgTWluR1cgTWFrZWZpbGVzYCBnZW5lcmF0b3Igbm8gbG9uZ2VyIGlzc3VlcyBhbiBlcnJvciBpZgorICBgYHNoLmV4ZWBgIGlzIHByZXNlbnQgaW4gdGhlIGVudmlyb25tZW50J3MgYGBQQVRIYGAuCisKKyogVGhlIDpnZW5lcmF0b3I6YE5pbmphYCBnZW5lcmF0b3Igbm93IHByZWZlcnMgdGhlIGZpcnN0IG5pbmphIGJ1aWxkCisgIHRvb2wgdG8gYXBwZWFyIGluIHRoZSBgYFBBVEhgYCBubyBtYXR0ZXIgd2hldGhlciBpdCBpcyBjYWxsZWQKKyAgYGBuaW5qYS1idWlsZGBgLCBgYG5pbmphYGAsIG9yIGBgc2FtdWBgLiAgUHJldmlvdXNseSB0aGUgZmlyc3QKKyAgb2YgdGhvc2UgbmFtZXMgdG8gYXBwZWFyIGFueXdoZXJlIGluIHRoZSBgYFBBVEhgYCB3b3VsZCBiZSBwcmVmZXJyZWQuCisKKyogV2l0aCBTRENDIHRoZSBgYHNkYXJgYCB0b29sIGlzIG5vdyBwcmVmZXJyZWQgb3ZlciBgYHNkY2NsaWJgYCBhcyBsaWJyYXJpYW4uCisgIFRoZSBsYXR0ZXIgd2FzIGRlcHJlY2F0ZWQgYnkgU0RDQyAzLjIuMCBhbmQgcmVtb3ZlZCBpbiBTRENDIDMuOC42LgorCisqIFdpdGggU0RDQyB0aGUgZGVmYXVsdCBmbGFncyBubyBsb25nZXIgaW5jbHVkZSBhbnkgdGFyZ2V0LXNwZWNpZmljIGZsYWdzLgorICBQcmV2aW91c2x5IHRoZSBkZWZhdWx0IGZsYWdzIHdlcmUgaGFyZC1jb2RlZCBmb3IgODA1MS4KKworKiBUaGUgOnZhcmlhYmxlOmBDTUFLRV9WU19HTE9CQUxTYCB2YXJpYWJsZSB2YWx1ZSBub3cgYXBwbGllcyBkdXJpbmcKKyAgY29tcGlsZXIgaWRlbnRpZmljYXRpb24gYW5kIGluIHRhcmdldHMgY3JlYXRlZCBieSB0aGUKKyAgOmNvbW1hbmQ6YGFkZF9jdXN0b21fdGFyZ2V0YCBjb21tYW5kLgorCisqIFRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgZ2VuZXJhdG9yIG5vIGxvbmdlciBoYXJkLWNvZGVzIGBgLVdtb3N0YGAsCisgIGBgLVduby1mb3VyLWNoYXItY29uc3RhbnRzYGAsIGFuZCBgYC1Xbm8tdW5rbm93bi1wcmFnbWFzYGAgd2FybmluZyBmbGFncy4KKworVXBkYXRlcworPT09PT09PQorCitDaGFuZ2VzIG1hZGUgc2luY2UgQ01ha2UgMy4xNy4wIGluY2x1ZGUgdGhlIGZvbGxvd2luZy4KKworMy4xNy4xCistLS0tLS0KKworKiBDTWFrZSAzLjE3LjAgdXBkYXRlZCB0aGUgOmNwYWNrX2dlbjpgQ1BhY2sgTlNJUyBHZW5lcmF0b3JgIHdpdGggY2hhbmdlcworICB0aGF0IHJlcXVpcmUgTlNJUyAzLjAgb3IgbGF0ZXIuICBDTWFrZSAzLjE3LjEgbm93IGVuZm9yY2VzIHRoZSB1c2UKKyAgb2YgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24uCisKKzMuMTcuMworLS0tLS0tCisKKyogU2VsZWN0aW9uIG9mIHRoZSBPYmplY3RpdmUgQyBvciBDKysgY29tcGlsZXIgbm93IGNvbnNpZGVycyB0aGUKKyAgOmVudnZhcjpgQ0NgIG9yIDplbnZ2YXI6YENYWGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgdGhlCisgIDplbnZ2YXI6YE9CSkNgIG9yIDplbnZ2YXI6YE9CSkNYWGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldC4KKworKiBUaGUgOm1vZHVsZTpgRmluZFBrZ0NvbmZpZ2AgbW9kdWxlIG5vdyBleHRyYWN0cyBpbmNsdWRlIGRpcmVjdG9yaWVzCisgIHByZWZpeGVkIHdpdGggYGAtaXN5c3RlbWBgIGludG8gdGhlIGBgKl9JTkNMVURFX0RJUlNgYCB2YXJpYWJsZXMgYW5kCisgIDpwcm9wX3RndDpgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVNgIHRhcmdldCBwcm9wZXJ0aWVzLgorICBQcmV2aW91c2x5IHRoZXkgd291bGQgYmUgcGxhY2VzIGluIGBgKl9DRkxBR1NfT1RIRVJgYCB2YXJpYWJsZXMgYW5kCisgIDpwcm9wX3RndDpgSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OU2AgdGFyZ2V0IHByb3BlcnRpZXMuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvMy4xOC5yc3QgYi9IZWxwL3JlbGVhc2UvMy4xOC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4MGQyYgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS8zLjE4LnJzdApAQCAtMCwwICsxLDM0MSBAQAorQ01ha2UgMy4xOCBSZWxlYXNlIE5vdGVzCisqKioqKioqKioqKioqKioqKioqKioqKioKKworLi4gb25seTo6IGh0bWwKKworICAuLiBjb250ZW50czo6CisKK0NoYW5nZXMgbWFkZSBzaW5jZSBDTWFrZSAzLjE3IGluY2x1ZGUgdGhlIGZvbGxvd2luZy4KKworTmV3IEZlYXR1cmVzCis9PT09PT09PT09PT0KKworTGFuZ3VhZ2VzCistLS0tLS0tLS0KKworKiBUaGUgYGBDVURBYGAgbGFuZ3VhZ2UgY2FuIG5vdyBiZSBjb21waWxlZCB1c2luZyBDbGFuZyBvbiBub24tV2luZG93cworICBwbGF0Zm9ybXMuIFNlcGFyYWJsZSBjb21waWxhdGlvbiBpcyBub3QgeWV0IHN1cHBvcnRlZCBvbiBhbnkgcGxhdGZvcm0uCisKK0NvbW1hbmQtTGluZQorLS0tLS0tLS0tLS0tCisKKyogOm1hbnVhbDpgY21ha2UoMSlgIGdhaW5lZCBzdXBwb3J0IGZvciBwcm9maWxpbmcgb2YgQ01ha2Ugc2NyaXB0cyB0aHJvdWdoCisgIHRoZSBwYXJhbWV0ZXJzIGBgLS1wcm9maWxpbmctb3V0cHV0YGAgYW5kIGBgLS1wcm9maWxpbmctZm9ybWF0YGAuCisKKyogOm1hbnVhbDpgY21ha2UoMSlgIGdhaW5lZCBhIGBgY2F0YGAgY29tbWFuZCBsaW5lCisgIG9wdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmNhdGVuYXRlIGZpbGVzIGFuZCBwcmludCB0aGVtCisgIG9uIHN0YW5kYXJkIG91dHB1dC4KKworQ29tbWFuZHMKKy0tLS0tLS0tCisKKyogVGhlIDpjb21tYW5kOmBhZGRfbGlicmFyeWAgYW5kIDpjb21tYW5kOmBhZGRfZXhlY3V0YWJsZWAgY29tbWFuZHMKKyAgbGVhcm5lZCB0byBjcmVhdGUgOnJlZjpgQWxpYXMgVGFyZ2V0c2AgcmVmZXJlbmNpbmcgbm9uLWBgR0xPQkFMYGAKKyAgOnJlZjpgSW1wb3J0ZWQgVGFyZ2V0c2AuCisKKyogVGhlIDpjb21tYW5kOmBjbWFrZV9sYW5ndWFnZSgpYCBjb21tYW5kIHdhcyBhZGRlZCBmb3IgbWV0YS1vcGVyYXRpb25zIG9uCisgIHNjcmlwdGVkIG9yIGJ1aWx0LWluIGNvbW1hbmRzLCBzdGFydGluZyB3aXRoIGEgbW9kZSB0byBgYENBTExgYCBvdGhlcgorICBjb21tYW5kcywgYW5kIGBgRVZBTCBDT0RFYGAgdG8gaW5wbGFjZSBldmFsdWF0ZSBhIENNYWtlIHNjcmlwdC4KKworKiBUaGUgOmNvbW1hbmQ6YGV4ZWN1dGVfcHJvY2Vzc2AgY29tbWFuZCBnYWluZWQgdGhlIGBgRUNIT19PVVRQVVRfVkFSSUFCTEVgYAorICBhbmQgYGBFQ0hPX0VSUk9SX1ZBUklBQkxFYGAgb3B0aW9ucy4KKworKiBUaGUgOmNvbW1hbmQ6YGV4cG9ydGAgY29tbWFuZCBub3cgcmFpc2UgYW4gZXJyb3IgaWYgdXNlZCBtdWx0aXBsZSB0aW1lcyB3aXRoCisgIHNhbWUgYGBGSUxFYGAgd2l0aG91dCBgYEFQUEVORGBgLiBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDNgLgorCisqIFRoZSA6Y29tbWFuZDpgZmlsZWAgY29tbWFuZCBnYWluZWQgdGhlIGBgQVJDSElWRV9DUkVBVEVgYCBhbmQKKyAgYGBBUkNISVZFX0VYVFJBQ1RgYCBzdWJjb21tYW5kcyB0byBleHBvc2UgdGhlIDptYW51YWw6YGNtYWtlKDEpYCBgYC1FIHRhcmBgCisgIGZ1bmN0aW9uYWxpdHkgdG8gQ01ha2Ugc2NyaXB0aW5nIGNvZGUuCisKKyogVGhlIDpjb21tYW5kOmBmaWxlKENPTkZJR1VSRSlgIHN1YmNvbW1hbmQgd2FzIGNyZWF0ZWQgaW4gb3JkZXIgdG8gcmVwbGljYXRlCisgIHRoZSA6Y29tbWFuZDpgY29uZmlndXJlX2ZpbGVgIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCByZXNvcnRpbmcgdG8gYQorICBwcmUtZXhpc3RpbmcgZmlsZSBvbiBkaXNrIGFzIGlucHV0LiBUaGUgY29udGVudCBpcyBpbnN0ZWFkIHBhc3NlZCBhcyBhCisgIHN0cmluZy4KKworKiBUaGUgOmNvbW1hbmQ6YGZpbGUoVVBMT0FEKWAgY29tbWFuZCBnYWluZWQgYGBUTFNfVkVSSUZZYGAgYW5kIGBgVExTX0NBSU5GT2BgCisgIG9wdGlvbnMgdG8gY29udHJvbCBzZXJ2ZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uLgorCisqIFRoZSA6Y29tbWFuZDpgZmluZF9wcm9ncmFtYCwgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAsIDpjb21tYW5kOmBmaW5kX3BhdGhgCisgIGFuZCA6Y29tbWFuZDpgZmluZF9maWxlYCBjb21tYW5kcyBnYWluZWQgYSBuZXcgYGBSRVFVSVJFRGBgIG9wdGlvbiB0aGF0IHdpbGwKKyAgc3RvcCBwcm9jZXNzaW5nIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiBub3RoaW5nIGlzIGZvdW5kLgorCisqIFRoZSA6Y29tbWFuZDpgZ2V0X3Byb3BlcnR5YCBjb21tYW5kIHdpdGggYGBTT1VSQ0VgYCBzY29wZSBnYWluZWQgdGhlCisgIGBgRElSRUNUT1JZYGAgYW5kIGBgVEFSR0VUX0RJUkVDVE9SWWBgIG9wdGlvbnMgdG8gZ2V0IGEgcHJvcGVydHkKKyAgZnJvbSB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5IHNjb3BlLgorCisqIFRoZSA6Y29tbWFuZDpgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5YCBjb21tYW5kIGdhaW5lZCB0aGUgYGBESVJFQ1RPUllgYAorICBhbmQgYGBUQVJHRVRfRElSRUNUT1JZYGAgb3B0aW9ucyB0byBnZXQgYSBwcm9wZXJ0eSBmcm9tIHRoZQorICBwcm92aWRlZCBkaXJlY3Rvcnkgc2NvcGUuCisKKyogVGhlIDpjb21tYW5kOmBsaXN0YCBvcGVyYXRpb24gYGBTT1JUYGAgZ2FpbmVkIHRoZSBgYE5BVFVSQUxgYCBzb3J0CisgIG9wdGlvbiB0byBzb3J0IHVzaW5nIG5hdHVyYWwgb3JkZXIgKHNlZSBgYHN0cnZlcnNjbXAoMylgYCBtYW51YWwpLgorCisqIFRoZSA6Y29tbWFuZDpgc2V0X3Byb3BlcnR5YCBjb21tYW5kIHdpdGggdGhlIGBgU09VUkNFYGAgc2NvcGUgZ2FpbmVkIHRoZQorICBgYERJUkVDVE9SWWBgIGFuZCBgYFRBUkdFVF9ESVJFQ1RPUllgYCBvcHRpb25zIHRvIHNldCBwcm9wZXJ0aWVzCisgIGluIHRoZSBwcm92aWRlZCBkaXJlY3Rvcnkgc2NvcGVzLgorCisqIFRoZSA6Y29tbWFuZDpgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzYCBjb21tYW5kIGdhaW5lZCB0aGUgYGBESVJFQ1RPUllgYAorICBhbmQgYGBUQVJHRVRfRElSRUNUT1JZYGAgb3B0aW9ucyB0byBzZXQgcHJvcGVydGllcyBpbiB0aGUgcHJvdmlkZWQKKyAgZGlyZWN0b3J5IHNjb3Blcy4KKworKiBUaGUgOmNvbW1hbmQ6YHN0cmluZ2AgY29tbWFuZCBsZWFybmVkIGEgbmV3IGBgSEVYYGAgc3ViLWNvbW1hbmQsIHdoaWNoCisgIGNvbnZlcnRzIHN0cmluZ3MgaW50byB0aGVpciBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KKworVmFyaWFibGVzCistLS0tLS0tLS0KKworKiBBIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTYCB2YXJpYWJsZSB3YXMgYWRkZWQgdG8gc3BlY2lmeQorICBDVURBIG91dHB1dCBhcmNoaXRlY3R1cmVzLiAgVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIHRoaXMgaW5zdGVhZCBvZgorICBzcGVjaWZ5aW5nIG9wdGlvbnMgbWFudWFsbHksIGFzIHRoaXMgYXBwcm9hY2ggaXMgY29tcGlsZXItYWdub3N0aWMuCisgIFRoZSB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBhdXRvbWF0aWNhbGx5IHdoZW4KKyAgOnZhcmlhYmxlOmBDTUFLRV9DVURBX0NPTVBJTEVSX0lEIDxDTUFLRV88TEFORz5fQ09NUElMRVJfSUQ+YCBpcyBgYE5WSURJQWBgLgorICBUaGUgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBuZXcgOnByb3BfdGd0OmBDVURBX0FSQ0hJVEVDVFVSRVNgCisgIHRhcmdldCBwcm9wZXJ0eS4gIFNlZSBwb2xpY3kgOnBvbGljeTpgQ01QMDEwNGAuCisKKyogVGhlIDp2YXJpYWJsZTpgQ01BS0VfUENIX1dBUk5fSU5WQUxJRGAgdmFyaWFibGUgd2FzIGFkZGVkIHRvIGluaXRpYWxpemUgdGhlCisgIDpwcm9wX3RndDpgUENIX1dBUk5fSU5WQUxJRGAgdGFyZ2V0IHByb3BlcnR5IHRvIGFsbG93IHRoZSByZW1vdmFsIG9mIHRoZQorICBwcmVjb21waWxlZCBoZWFkZXIgaW52YWxpZCB3YXJuaW5nLgorCitQcm9wZXJ0aWVzCistLS0tLS0tLS0tCisKKyogVGhlIDpwcm9wX3RndDpgQ1VEQV9BUkNISVRFQ1RVUkVTYCB0YXJnZXQgcHJvcGVydHkgd2FzIGFkZGVkIHRvIHNwZWNpZnkKKyAgQ1VEQSBvdXRwdXQgYXJjaGl0ZWN0dXJlcy4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIHRoaXMgaW5zdGVhZCBvZgorICBzcGVjaWZ5aW5nIG9wdGlvbnMgbWFudWFsbHksIGFzIHRoaXMgYXBwcm9hY2ggaXMgY29tcGlsZXItYWdub3N0aWMuCisgIFRoZSBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCBieSB0aGUgbmV3IDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTYAorICB2YXJpYWJsZS4gIFNlZSBwb2xpY3kgOnBvbGljeTpgQ01QMDEwNGAuCisKKyogVGhlIDpwcm9wX3RndDpgRm9ydHJhbl9QUkVQUk9DRVNTYCB0YXJnZXQgcHJvcGVydHkgYW5kCisgIDpwcm9wX3NmOmBGb3J0cmFuX1BSRVBST0NFU1NgIHNvdXJjZS1maWxlIHByb3BlcnR5IHdlcmUgYWRkZWQgdG8KKyAgY29udHJvbCBwcmVwcm9jZXNzaW5nIG9mIEZvcnRyYW4gc291cmNlIGZpbGVzLgorCisqIFRoZSA6cHJvcF90Z3Q6YEZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF88Q09ORklHPmAgdGFyZ2V0IHByb3BlcnR5CisgIGFuZCBhc3NvY2lhdGVkIDp2YXJpYWJsZTpgQ01BS0VfRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYXzxDT05GSUc+YAorICB2YXJpYWJsZSB3ZXJlIGNyZWF0ZWQgdG8gYWxsb3cgYWRkaW5nIGEgcG9zdGZpeCB0byB0aGUgbmFtZSBvZiBhCisgIGZyYW1ld29yayBmaWxlIG5hbWUgd2hlbiB1c2luZyBhIG11bHRpLWNvbmZpZyBnZW5lcmF0b3IuCisKKyogVGhlIDpwcm9wX3NmOmBPQkpFQ1RfT1VUUFVUU2Agc291cmNlIGZpbGUgcHJvcGVydHkgbm93IHN1cHBvcnRzCisgIDptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAuCisKKyogVGhlIDpwcm9wX3RndDpgUENIX1dBUk5fSU5WQUxJRGAgdGFyZ2V0IHByb3BlcnR5IHdhcyBhZGRlZCB0byBhbGxvdyB0aGUKKyAgcmVtb3ZhbCBvZiB0aGUgcHJlY29tcGlsZWQgaGVhZGVyIGludmFsaWQgd2FybmluZy4KKworKiBUaGUgOnByb3BfdGd0OmBVTklUWV9CVUlMRF9NT0RFYCB0YXJnZXQgcHJvcGVydHkgd2FzIGFkZGVkIHRvIHRlbGwKKyAgZ2VuZXJhdG9ycyB3aGljaCBhbGdvcml0aG0gdG8gdXNlIGZvciBncm91cGluZyBpbmNsdWRlZCBzb3VyY2UKKyAgZmlsZXMuCisKKyogVGhlIDpwcm9wX3RndDpgVlNfU09VUkNFX1NFVFRJTkdTXzx0b29sPmAgdGFyZ2V0IHByb3BlcnR5IHdhcyBhZGRlZAorICB0byB0ZWxsIDpyZWY6YFZpc3VhbCBTdHVkaW8gR2VuZXJhdG9yc2AgZm9yIFZTIDIwMTAgYW5kIGFib3ZlIHRvIGFkZAorICBtZXRhZGF0YSB0byBub24tYnVpbHQgc291cmNlIGZpbGVzIHVzaW5nIGBgPHRvb2w+YGAuCisKKyogVGhlIDpwcm9wX3NmOmBWU19TRVRUSU5HU2Agc291cmNlIGZpbGUgcHJvcGVydHkgd2FzIGFkZGVkIHRvIHRlbGwKKyAgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBmb3IgVlMgMjAxMCBhbmQgYWJvdmUgdG8gYWRkCisgIG1ldGFkYXRhIHRvIGEgbm9uLWJ1aWx0IHNvdXJjZSBmaWxlLgorCisqIFRoZSA6cHJvcF90Z3Q6YFZTX1BMQVRGT1JNX1RPT0xTRVRgIHRhcmdldCBwcm9wZXJ0eSB3YXMgYWRkZWQgdG8gdGVsbAorICA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBhYm92ZSB0byBvdmVycmlkZQorICB0aGUgcGxhdGZvcm0gdG9vbHNldC4KKworKiBUaGUgOnByb3BfdGd0OmBWU19TT0xVVElPTl9ERVBMT1lgIHRhcmdldCBwcm9wZXJ0eSB3YXMgYWRkZWQgdG8gdGVsbAorICA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBhYm92ZSB0byBtYXJrIGEKKyAgdGFyZ2V0IGZvciBkZXBsb3ltZW50IGV2ZW4gd2hlbiBub3QgYnVpbGRpbmcgZm9yIFdpbmRvd3MgUGhvbmUvU3RvcmUvQ0UuCisKK01vZHVsZXMKKy0tLS0tLS0KKworKiBUaGUgOm1vZHVsZTpgQ2hlY2tMaW5rZXJGbGFnYCBtb2R1bGUgaGFzIGJlZW4gYWRkZWQgdG8gcHJvdmlkZSBhCisgIGZhY2lsaXR5IHRvIGNoZWNrIHZhbGlkaXR5IG9mIGxpbmsgZmxhZ3MuCisKKyogVGhlIDptb2R1bGU6YEV4dGVybmFsUHJvamVjdGAgbW9kdWxlIDpjb21tYW5kOmBFeHRlcm5hbFByb2plY3RfQWRkYCBjb21tYW5kCisgIGdhaW5lZCBhIG5ldyBgYEdJVF9SRU1PVEVfVVBEQVRFX1NUUkFURUdZYGAga2V5d29yZC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KKyAgc3BlY2lmeSBob3cgZmFpbGVkIHJlYmFzZSBvcGVyYXRpb25zIGR1cmluZyBhIGdpdCB1cGRhdGUgc2hvdWxkIGJlIGhhbmRsZWQuCisgIFRoZSBgYENNQUtFX0VQX0dJVF9SRU1PVEVfVVBEQVRFX1NUUkFURUdZYGAgdmFyaWFibGUgd2FzIGFsc28gYWRkZWQgYXMgYQorICBnbG9iYWwgZGVmYXVsdCBhbmQgaXMgaG9ub3JlZCBieSBib3RoIHRoZSA6bW9kdWxlOmBFeHRlcm5hbFByb2plY3RgIGFuZAorICA6bW9kdWxlOmBGZXRjaENvbnRlbnRgIG1vZHVsZXMuCisKKyogVGhlIDptb2R1bGU6YEZldGNoQ29udGVudGAgbW9kdWxlIDpjb21tYW5kOmBGZXRjaENvbnRlbnRfRGVjbGFyZWAgY29tbWFuZAorICBub3cgc3VwcG9ydHMgYSBgYFNPVVJDRV9TVUJESVJgYCBvcHRpb24uICBJdCBjYW4gYmUgdXNlZCB0byBkaXJlY3QKKyAgOmNvbW1hbmQ6YEZldGNoQ29udGVudF9NYWtlQXZhaWxhYmxlYCB0byBsb29rIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uCisgIGZvciB0aGUgYGBDTWFrZUxpc3RzLnR4dGBgIGZpbGUuCisKKyogVGhlIDptb2R1bGU6YEZpbmRCTEFTYCBtb2R1bGUgbm93IHByb3ZpZGVzIGFuIGltcG9ydGVkIHRhcmdldC4KKworKiBUaGUgOm1vZHVsZTpgRmluZENVREFUb29sa2l0YCBtb2R1bGU6CisKKyAgKiBnYWluZWQgdGhlIHZhcmlhYmxlCisgICAgYGBDVURBVG9vbGtpdF9MSUJSQVJZX1JPT1RgYCwgd2hpY2ggaXMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorICAgIGBgbnZ2bWBgIGRpcmVjdG9yeSBhbmQgYGB2ZXJzaW9uLnR4dGBgLgorCisgICogdXNlcyB0b29sa2l0IGFuZCBsaWJyYXJ5IHJvb3QgZm91bmQgZHVyaW5nIGBgQ1VEQWBgIGNvbXBpbGVyIGRldGVjdGlvbi4KKworKiBUaGUgOm1vZHVsZTpgRmluZExBUEFDS2AgbW9kdWxlIG5vdyBwcm92aWRlcyBhbiBpbXBvcnRlZCB0YXJnZXQuCisKKyogVGhlIDptb2R1bGU6YEZpbmRQeXRob24zYCwgOm1vZHVsZTpgRmluZFB5dGhvbjJgIGFuZCA6bW9kdWxlOmBGaW5kUHl0aG9uYAorICBtb2R1bGVzOgorCisgICogZ2FpbmVkIHRoZSBwb3NzaWJpbGl0eSB0byBjcmVhdGUgcGVyLWFydGlmYWN0IGNhY2hlIHZhcmlhYmxlcyBmb3IKKyAgICBpbnRlcmFjdGl2ZSBlZGl0aW5nIGluIDptYW51YWw6YGNtYWtlLWd1aSgxKWAgYW5kIDptYW51YWw6YGNjbWFrZSgxKWAuCisKKyAgKiBnYWluZWQgc3ViLWNvbXBvbmVudHMgYGBEZXZlbG9wbWVudC5Nb2R1bGVgYCBhbmQKKyAgICBgYERldmVsb3BtZW50LkVtYmVkYGAgdW5kZXIgdGhlIGBgRGV2ZWxvcG1lbnRgYCBjb21wb25lbnQuCisKKyAgKiBnYWluZWQgdGhlIGNhcGFiaWxpdHkgdG8gc3BlY2lmeSB3aGljaCBQeXRob24gaW1wbGVtZW50YXRpb25zIHRvIGZpbmQsCisgICAgaW5jbHVkaW5nIGBgSXJvblB5dGhvbmBgIGFuZCBgYFB5UHlgYC4KKworKiBUaGUgOm1vZHVsZTpgRmluZFJ1YnlgIG1vZHVsZSBpbnB1dCBhbmQgb3V0cHV0IHZhcmlhYmxlcyB3ZXJlIGFsbCByZW5hbWVkCisgIGZyb20gYGBSVUJZX2BgIHRvIGBgUnVieV9gYCBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBmaW5kIG1vZHVsZXMuCisgIElucHV0IHZhcmlhYmxlcyBvZiB0aGUgb2xkIGNhc2Ugd2lsbCBiZSBob25vcmVkIGlmIHByb3ZpZGVkLCBhbmQgb3V0cHV0CisgIHZhcmlhYmxlcyBvZiB0aGUgb2xkIGNhc2UgYXJlIGFsd2F5cyBwcm92aWRlZC4KKworKiBUaGUgOm1vZHVsZTpgRmluZFNXSUdgIG1vZHVsZSBub3cgYWNjZXB0cyB0YXJnZXQgbGFuZ3VhZ2VzIGFzICBgYENPTVBPTkVOVFNgYAorICBhbmQgYGBPUFRJT05BTF9DT01QT05FTlRTYGAgYXJndW1lbnRzIHRvIGBgZmluZF9wYWNrYWdlYGAuCisKKyogVGhlIDptb2R1bGU6YEdvb2dsZVRlc3RgIG1vZHVsZSA6Y29tbWFuZDpgZ3Rlc3RfZGlzY292ZXJfdGVzdHNgIGNvbW1hbmQ6CisKKyAgKiBnYWluZWQgYSBuZXcgYGBESVNDT1ZFUllfTU9ERWBgIG9wdGlvbiB0byBjb250cm9sIHdoZW4gdGhlIHRlc3QKKyAgICBkaXNjb3Zlcnkgc3RlcCBpcyBydW4uICBJdCBvZmZlcnMgYSBuZXcgYGBQUkVfVEVTVGBgIHNldHRpbmcgdG8KKyAgICBydW4gdGhlIGRpc2NvdmVyeSBhdCB0ZXN0IHRpbWUgaW5zdGVhZCBvZiBidWlsZCB0aW1lLiAgQSBuZXcKKyAgICBgYENNQUtFX0dURVNUX0RJU0NPVkVSX1RFU1RTX0RJU0NPVkVSWV9NT0RFYGAgdmFyaWFibGUgY2FuIGJlIHVzZWQKKyAgICB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgZ2xvYmFsbHkuCisKKyAgKiBnYWluZWQgYSBuZXcgb3B0aW9uYWwgcGFyYW1ldGVyIGBgWE1MX09VVFBVVF9ESVJgYC4gV2hlbiBzZXQgdGhlCisgICAgSlVuaXQgWE1MIHRlc3QgcmVzdWx0cyBhcmUgc3RvcmVkIGluIHRoYXQgZGlyZWN0b3J5LgorCisqIFRoZSA6bW9kdWxlOmBGaW5kTGliWHNsdGAgbW9kdWxlIG5vdyBwcm92aWRlcyBpbXBvcnRlZCB0YXJnZXRzLgorCisqIFRoZSA6bW9kdWxlOmBVc2VTV0lHYCBtb2R1bGUgbm93IHN1cHBvcnRzIEZvcnRyYW4gYXMgYSB0YXJnZXQgbGFuZ3VhZ2UgaWYKKyAgdGhlIGBgU1dJR19FWEVDVVRBQkxFYGAgaXMgU1dJRy1Gb3J0cmFuXy4KKworLi4gX2BTV0lHLUZvcnRyYW5gOiBodHRwczovL2dpdGh1Yi5jb20vc3dpZy1mb3J0cmFuL3N3aWcKKworR2VuZXJhdG9yIEV4cHJlc3Npb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgYGAkPERFVklDRV9MSU5LOi4uLj5gYCBhbmQgYGAkPEhPU1RfTElOSzouLi4+YGAKKyAgOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YCB3ZXJlIGFkZGVkCisgIHRvIG1hbmFnZSBkZXZpY2UgYW5kIGhvc3QgbGluayBzdGVwcy4KKworKiBUaGUgYGAkPExJTktfTEFOR1VBR0U6Li4uPmBgIGFuZCBgYCQ8TElOS19MQU5HX0FORF9JRDouLi4+YGAKKyAgOm1hbnVhbDpgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIDxjbWFrZS1nZW5lcmF0b3ItZXhwcmVzc2lvbnMoNyk+YCB3ZXJlIGFkZGVkLgorCitDVGVzdAorLS0tLS0KKworKiA6bWFudWFsOmBjdGVzdCgxKWAgZ2FpbmVkIGEgbmV3IDp2YXJpYWJsZTpgQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFYAorICB2YXJpYWJsZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhCisgIDpyZWY6YHJlc291cmNlIHNwZWNpZmljYXRpb24gZmlsZSA8Y3Rlc3QtcmVzb3VyY2Utc3BlY2lmaWNhdGlvbi1maWxlPmAuCisKKyogOm1hbnVhbDpgY3Rlc3QoMSlgIGdhaW5lZCBhIGBgLS1zdG9wLW9uLWZhaWx1cmVgYCBvcHRpb24sCisgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgcnVubmluZyB0aGUgdGVzdHMgb25jZSBvbmUgaGFzIGZhaWxlZC4KKworKiBUaGUgOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgIGNvbW1hbmQgZ2FpbmVkIGEgYGBTVE9QX09OX0ZBSUxVUkVgYCBvcHRpb24KKyAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcCBydW5uaW5nIHRoZSB0ZXN0cyBvbmNlIG9uZSBoYXMgZmFpbGVkLgorCisqIFRoZSA6bW9kdWxlOmBDVGVzdENvdmVyYWdlQ29sbGVjdEdDT1ZgIG1vZHVsZQorICA6Y29tbWFuZDpgY3Rlc3RfY292ZXJhZ2VfY29sbGVjdF9nY292YCBjb21tYW5kIGdhaW5lZCBhCisgIGBgVEFSQkFMTF9DT01QUkVTU0lPTmBgIG9wdGlvbiB0byBjb250cm9sIGNvbXByZXNzaW9uIG9mIHRoZQorICB0YXJiYWxsIG9mIGNvbGxlY3RlZCByZXN1bHRzLgorCitDUGFjaworLS0tLS0KKworKiBUaGUgOmNwYWNrX2dlbjpgQ1BhY2sgQXJjaGl2ZSBHZW5lcmF0b3JgJ3MgYGBUWFpgYCBmb3JtYXQgbGVhcm5lZCB0aGUKKyAgOnZhcmlhYmxlOmBDUEFDS19BUkNISVZFX1RIUkVBRFNgIHZhcmlhYmxlIHRvIGVuYWJsZSBwYXJhbGxlbCBjb21wcmVzc2lvbi4KKyAgUmVxdWlyZXMgc3VwcG9ydCBpbiB0aGUgYGBsaWJsem1hYGAgdXNlZCBieSBDTWFrZS4KKworKiBUaGUgOmNwYWNrX2dlbjpgQ1BhY2sgTlNJUyBHZW5lcmF0b3JgIGdhaW5lZCBhIG5ldyB2YXJpYWJsZQorICA6dmFyaWFibGU6YENQQUNLX05TSVNfTUFOSUZFU1RfRFBJX0FXQVJFYCB0byBkZWNsYXJlIHRoYXQgdGhlCisgIGluc3RhbGxlciBpcyBEUEktYXdhcmUuCisKKyogVGhlIDpjcGFja19nZW46YENQYWNrIFJQTSBHZW5lcmF0b3JgIGdhaW5lZAorICA6dmFyaWFibGU6YENQQUNLX1JQTV9QUkVfVFJBTlNfU0NSSVBUX0ZJTEVgIGFuZAorICA6dmFyaWFibGU6YENQQUNLX1JQTV9QT1NUX1RSQU5TX1NDUklQVF9GSUxFYAorICB2YXJpYWJsZXMgdG8gc3BlY2lmeSBwcmUtIGFuZCBwb3N0LXRyYW5zYWN0aW9uIHNjcmlwdHMuCisKK090aGVyCistLS0tLQorCisqIDptYW51YWw6YGNtYWtlLWd1aSgxKWAgbm93IHBvcHVsYXRlcyBpdHMgZ2VuZXJhdG9yIHNlbGVjdGlvbgorICB3aWRnZXQgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSA6ZW52dmFyOmBDTUFLRV9HRU5FUkFUT1JgIGVudmlyb25tZW50CisgIHZhcmlhYmxlLiAgQWRkaXRpb25hbGx5LCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgOmVudnZhcjpgQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNYCBhbmQgOmVudnZhcjpgQ01BS0VfR0VORVJBVE9SX1RPT0xTRVRgCisgIGFyZSB1c2VkIHRvIHBvcHVsYXRlIHRoZWlyIHJlc3BlY3RpdmUgd2lkZ2V0IGRlZmF1bHRzLgorCisqIDptYW51YWw6YGNjbWFrZSgxKWAgbGVhcm5lZCB0byByZWFkIGEgOmVudnZhcjpgQ0NNQUtFX0NPTE9SU2AKKyAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY3VzdG9taXplIGNvbG9ycy4KKworRGVwcmVjYXRlZCBhbmQgUmVtb3ZlZCBGZWF0dXJlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIFRoZSA6bW9kdWxlOmBEb2N1bWVudGF0aW9uYCBtb2R1bGUgaGFzIGJlZW4gZGVwcmVjYXRlZCB2aWEKKyAgOnBvbGljeTpgQ01QMDEwNmAuIFRoaXMgbW9kdWxlIHdhcyBlc3NlbnRpYWxseSBWVEsgY29kZSB0aGF0IENNYWtlIHNob3VsZAorICBub3QgYmUgc2hpcHBpbmcgYW55bW9yZS4KKworKiBBbiBleHBsaWNpdCBkZXByZWNhdGlvbiBkaWFnbm9zdGljIHdhcyBhZGRlZCBmb3IgcG9saWN5IGBgQ01QMDA3MGBgCisgIGFuZCBwb2xpY3kgYGBDTVAwMDcxYGAgKGBgQ01QMDA2OWBgIGFuZCBiZWxvdyB3ZXJlIGFscmVhZHkgZGVwcmVjYXRlZCkuCisgIFRoZSA6bWFudWFsOmBjbWFrZS1wb2xpY2llcyg3KWAgbWFudWFsIGV4cGxhaW5zIHRoYXQgdGhlIE9MRCBiZWhhdmlvcnMKKyAgb2YgYWxsIHBvbGljaWVzIGFyZSBkZXByZWNhdGVkIGFuZCB0aGF0IHByb2plY3RzIHNob3VsZCBwb3J0IHRvIHRoZQorICBORVcgYmVoYXZpb3JzLgorCitPdGhlciBDaGFuZ2VzCis9PT09PT09PT09PT09CisKKyogT24gV2luZG93cywgdGhlIDpnZW5lcmF0b3I6YE5pbmphYCBhbmQgOmdlbmVyYXRvcjpgTmluamEgTXVsdGktQ29uZmlnYAorICBnZW5lcmF0b3JzLCB3aGVuIGEgY29tcGlsZXIgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBub3cgc2VsZWN0CisgIHRoZSBmaXJzdCBjb21waWxlciAob2YgYW55IG5hbWUpIGZvdW5kIGluIGRpcmVjdG9yaWVzIGxpc3RlZCBieSB0aGUKKyAgYGBQQVRIYGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKyogVGhlIDpwcm9wX3RndDpgTElOS19PUFRJT05TYCBhbmQgOnByb3BfdGd0OmBJTlRFUkZBQ0VfTElOS19PUFRJT05TYCB0YXJnZXQKKyAgcHJvcGVydGllcyBhcmUgbm93IHVzZWQgZm9yIHRoZSBkZXZpY2UgbGluayBzdGVwLgorICBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDVgLgorCisqIENyZWF0aW9uIG9mIGFuIGBgQUxJQVNgYCB0YXJnZXQgb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgdGFyZ2V0IG5vdyByYWlzZXMgYW4KKyAgZXJyb3IuIFNlZSBwb2xpY3kgOnBvbGljeTpgQ01QMDEwN2AuCisKKyogTGlua2luZyBhIHRhcmdldCB0byBpdHNlbGYgdGhyb3VnaCBhbiBhbGlhcyBub3cgcmFpc2VzIGFuIGVycm9yLgorICBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDhgLgorCisqIFRoZSA6bW9kdWxlOmBGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJnc2AgbW9kdWxlIG9wdGlvbiBgYFJFUVVJUkVEX1ZBUlNgYAorICBpcyBub3cgb3B0aW9uYWwgaWYgYGBIQU5ETEVfQ09NUE9ORU5UU2BgIGlzIHNwZWNpZmllZC4KKworKiBUaGUgOmNvbW1hbmQ6YHNvdXJjZV9ncm91cGAgY29tbWFuZCBub3cgYWxzbyByZWNvZ25pemVzIGZvcndhcmQgc2xhc2hlcworICBhcyBzdWJncm91cCBkZWxpbWl0ZXJzLCBub3QganVzdCBiYWNrc2xhc2hlcy4KKworKiA6bWFudWFsOmBjdGVzdCgxKWAgbm93IGxvZ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgaXQgc2V0cyBmb3IgZWFjaCB0ZXN0LAorICBlaXRoZXIgZHVlIHRvIHRoZSA6cHJvcF90ZXN0OmBFTlZJUk9OTUVOVGAgcHJvcGVydHkgb3IgdGhlCisgIDpyZWY6YHJlc291cmNlIGFsbG9jYXRpb24gPGN0ZXN0LXJlc291cmNlLWFsbG9jYXRpb24+YCBmZWF0dXJlLCBhbmQgc3VibWl0cworICB0aGlzIGxvZyB0byBDRGFzaC4gSXQgZG9lcyBub3QgbG9nIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHdlcmUgc2V0CisgIG91dHNpZGUgb2YgQ1Rlc3QuCisKKyogV2hlbiBidWlsZGluZyBDTWFrZSBpdHNlbGYgZnJvbSBzb3VyY2UgYW5kIG5vdCB1c2luZyBhIHN5c3RlbS1wcm92aWRlZAorICBsaWJjdXJsLCBIVFRQLzIgc3VwcG9ydCBpcyBub3cgZW5hYmxlZCBmb3IgY29tbWFuZHMgc3VwcG9ydGluZworICBuZXR3b3JrIGNvbW11bmljYXRpb24gdmlhIGBgaHR0cChzKWBgLCBzdWNoIGFzIDpjb21tYW5kOmBmaWxlKERPV05MT0FEKWAsCisgIDpjb21tYW5kOmBmaWxlKFVQTE9BRClgLCBhbmQgOmNvbW1hbmQ6YGN0ZXN0X3N1Ym1pdGAuCisgIFRoZSBwcmVjb21waWxlZCBiaW5hcmllcyBwcm92aWRlZCBvbiBgYGNtYWtlLm9yZ2BgIG5vdyBzdXBwb3J0IEhUVFAvMi4KKworKiBUaGUgOm1hbnVhbDpgY21ha2UtZmlsZS1hcGkoNylgICJjb2RlbW9kZWwiIHZlcnNpb24gMiBgYHZlcnNpb25gYCBmaWVsZCBoYXMKKyAgYmVlbiB1cGRhdGVkIHRvIDIuMS4KKworKiBUaGUgOm1hbnVhbDpgY21ha2UtZmlsZS1hcGkoNylgICJjb2RlbW9kZWwiIHZlcnNpb24gMiAidGFyZ2V0IiBvYmplY3QgZ2FpbmVkCisgIGEgbmV3IGBgcHJlY29tcGlsZUhlYWRlcnNgYCBmaWVsZCBpbiB0aGUgYGBjb21waWxlR3JvdXBzYGAgb2JqZWN0cy4KKworVXBkYXRlcworPT09PT09PQorCitDaGFuZ2VzIG1hZGUgc2luY2UgQ01ha2UgMy4xOC4wIGluY2x1ZGUgdGhlIGZvbGxvd2luZy4KKworMy4xOC4xCistLS0tLS0KKworKiBUaGUgOmdlbmVyYXRvcjpgWGNvZGVgIGdlbmVyYXRvciwgd2hlbiA6dmFyaWFibGU6YENNQUtFX09TWF9BUkNISVRFQ1RVUkVTYAorICBpcyBub3QgZGVmaW5lZCwgbm93IHNlbGVjdHMgYGAkKE5BVElWRV9BUkNIX0FDVFVBTClgYCBhcyB0aGUgZGVmYXVsdAorICBhcmNoaXRlY3R1cmUgKHRoZSBYY29kZSBgYEFSQ0hTYGAgc2V0dGluZykuICBUaGlzIGlzIG5lZWRlZCBmb3IgWGNvZGUgMTIKKyAgdG8gc2VsZWN0IHRoZSBob3N0J3MgYXJjaGl0ZWN0dXJlLCB3aGljaCBvbGRlciB2ZXJzaW9ucyBvZiBYY29kZSBkaWQKKyAgYnkgZGVmYXVsdC4KKworKiBJbiBDTWFrZSAzLjE4LjAgdGhlIDpjb21tYW5kOmBhZGRfdGVzdGAgY29tbWFuZCBsZWFybmVkIHRvIHN1cHBvcnQKKyAgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRlc3QgbmFtZXMuICBUaGlzIHdhcyBhY2NpZGVudGFsbHkgbGVmdCBvdXQgb2YKKyAgaXRzIHJlbGVhc2Ugbm90ZXMuICBVbmZvcnR1bmF0ZWx5IHRoZSBmaXggYnJlYWtzIGV4aXN0aW5nIHByb2plY3RzCisgIHRoYXQgd2VyZSB1c2luZyBtYW51YWwgcXVvdGluZyBvciBlc2NhcGluZyB0byB3b3JrIGFyb3VuZCB0aGUgcHJpb3IKKyAgbGltaXRhdGlvbi4gIFRoaXMgZml4IGhhcyBiZWVuIHJldmVydGVkIGluIDMuMTguMSwgYnV0IG1heSBiZQorICByZS1pbnRyb2R1Y2VkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBDTWFrZSB3aXRoIGEgcG9saWN5IGZvciBjb21wYXRpYmlsaXR5LgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlLzMuMy5yc3QgYi9IZWxwL3JlbGVhc2UvMy4zLnJzdAppbmRleCA2NjU3ZThkLi40NGY0ZTE5IDEwMDY0NAotLS0gYS9IZWxwL3JlbGVhc2UvMy4zLnJzdAorKysgYi9IZWxwL3JlbGVhc2UvMy4zLnJzdApAQCAtMTk2LDcgKzE5Niw3IEBACiAgIDpwcm9wX2luc3Q6YENQQUNLX1NUQVJUX01FTlVfU0hPUlRDVVRTYCwKICAgOnByb3BfaW5zdDpgQ1BBQ0tfREVTS1RPUF9TSE9SVENVVFNgIGFuZAogICA6cHJvcF9pbnN0OmBDUEFDS19TVEFSVFVQX1NIT1JUQ1VUU2AgaW5zdGFsbGVkIGZpbGUgcHJvcGVydGllcyB3aGljaCBjYW4KLSAgYmUgdXNlZCB0byBpbnN0YWxsIHNob3JjdXRzIGluIHRoZSBTdGFydCBNZW51LCBvbiB0aGUgRGVza3RvcCBhbmQKKyAgYmUgdXNlZCB0byBpbnN0YWxsIHNob3J0Y3V0cyBpbiB0aGUgU3RhcnQgTWVudSwgb24gdGhlIERlc2t0b3AgYW5kCiAgIGluIHRoZSBTdGFydHVwIEZvbGRlciByZXNwZWN0aXZlbHkuCiAKIE90aGVyCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2LzAtc2FtcGxlLXRvcGljLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvMC1zYW1wbGUtdG9waWMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Y2MwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2LzAtc2FtcGxlLXRvcGljLnJzdApAQCAtMCwwICsxLDcgQEAKKzAtc2FtcGxlLXRvcGljCistLS0tLS0tLS0tLS0tLQorCisqIFRoaXMgaXMgYSBzYW1wbGUgcmVsZWFzZSBub3RlIGZvciB0aGUgY2hhbmdlIGluIGEgdG9waWMuCisgIERldmVsb3BlcnMgc2hvdWxkIGFkZCBzaW1pbGFyIG5vdGVzIGZvciBlYWNoIHRvcGljIGJyYW5jaAorICBtYWtpbmcgYSBub3Rld29ydGh5IGNoYW5nZS4gIEVhY2ggZG9jdW1lbnQgc2hvdWxkIGJlIG5hbWVkCisgIGFuZCB0aXRsZWQgdG8gbWF0Y2ggdGhlIHRvcGljIG5hbWUgdG8gYXZvaWQgbWVyZ2UgY29uZmxpY3RzLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9DUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUy5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L0NQQUNLX0VYVEVSTkFMX0JVSUxUX1BBQ0tBR0VTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjQ0NmQyCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9DUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUy5yc3QKQEAgLTAsMCArMSw0IEBACitDUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiA6Y3BhY2tfZ2VuOmBDUGFjayBFeHRlcm5hbCBHZW5lcmF0b3JgIGxlYXJuZWQgdGhlIDp2YXJpYWJsZTpgQ1BBQ0tfRVhURVJOQUxfQlVJTFRfUEFDS0FHRVNgIHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9FWENMVURFX0ZST01fQUxMLWdlbmV4LnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvRVhDTFVERV9GUk9NX0FMTC1nZW5leC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1YTgzYwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvRVhDTFVERV9GUk9NX0FMTC1nZW5leC5yc3QKQEAgLTAsMCArMSw1IEBACitFWENMVURFX0ZST01fQUxMLWdlbmV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDpwcm9wX3RndDpgRVhDTFVERV9GUk9NX0FMTGAgdGFyZ2V0IHByb3BlcnR5IGdhaW5lZCBzdXBwb3J0IGZvcgorICA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgPGNtYWtlLWdlbmVyYXRvci1leHByZXNzaW9ucyg3KT5gLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9GaW5kQ1VEQVRvb2xraXQtbm8tbnZjYy5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L0ZpbmRDVURBVG9vbGtpdC1uby1udmNjLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODE1ODc2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kQ1VEQVRvb2xraXQtbm8tbnZjYy5yc3QKQEAgLTAsMCArMSw1IEBACitGaW5kQ1VEQVRvb2xraXQtbm8tbnZjYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOm1vZHVsZTpgRmluZENVREFUb29sa2l0YCBtb2R1bGUgZ2FpbmVkIHN1cHBvcnQgZm9yIGZpbmRpbmcgQ1VEQSB0b29sa2l0cworICB0aGF0IGRvIG5vdCBjb250YWluIGBgbnZjY2BgLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9GaW5kU0RMLXVwZGF0ZS5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L0ZpbmRTREwtdXBkYXRlLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODVkMmI5Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kU0RMLXVwZGF0ZS5yc3QKQEAgLTAsMCArMSwxMSBAQAorRmluZFNETC11cGRhdGUKKy0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDptb2R1bGU6YEZpbmRTRExgIG1vZHVsZSBub3cgcHJvdmlkZXM6CisKKyAgKiBpbXBvcnRlZCB0YXJnZXQgYGBTREw6OlNETGBgLAorCisgICogcmVzdWx0IHZhcmlhYmxlcyBgYFNETF9MSUJSQVJJRVNgYCBhbmQgYGBTRExfSU5DTFVERV9ESVJTYGAsCisKKyAgKiB2ZXJzaW9uIHZhcmlhYmxlcyBgYFNETF9WRVJTSU9OYGAsIGBgU0RMX1ZFUlNJT05fTUFKT1JgYAorICAgIGBgU0RMX1ZFUlNJT05fTUlOT1JgYCwgYW5kIGBgU0RMX1ZFUlNJT05fUEFUQ0hgYC4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvRmluZFRJRkYtdGlmZnh4LnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvRmluZFRJRkYtdGlmZnh4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZkMzhmCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kVElGRi10aWZmeHgucnN0CkBAIC0wLDAgKzEsNSBAQAorRmluZFRJRkYtdGlmZnh4CistLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOm1vZHVsZTpgRmluZFRJRkZgIG1vZHVsZSBnYWluZWQgYSBgYENYWGBgIGNvbXBvbmVudCB0bworICBmaW5kIHRoZSBgYHRpZmZ4eGBgIGxpYnJhcnkgY29udGFpbmluZyBDKysgYmluZGluZ3MuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L0ZpbmRWdWxrYW4tZ2xzbGMucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kVnVsa2FuLWdsc2xjLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDZiYzhmCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9GaW5kVnVsa2FuLWdsc2xjLnJzdApAQCAtMCwwICsxLDEwIEBACitGaW5kVnVsa2FuLWdsc2xjCistLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDptb2R1bGU6YEZpbmRWdWxrYW5gIG1vZHVsZSBnYWluZWQgYSBuZXcgb3V0cHV0IHZhcmlhYmxlCisgIGBgVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEVgYCB3aGljaCBjb250YWlucyB0aGUgcGF0aCB0byB0aGUKKyAgR0xTTCBTUElSLVYgY29tcGlsZXIuCisKKyogVGhlIDptb2R1bGU6YEZpbmRWdWxrYW5gIG1vZHVsZSBnYWluZWQgYSBuZXcgdGFyZ2V0CisgIGBgVnVsa2FuOjpnbHNsY2BgIHdoaWNoIGNvbnRhaW5zIHRoZSBwYXRoIHRvIHRoZQorICBHTFNMIFNQSVItViBjb21waWxlci4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvY21ha2UtRS1jcmVhdGVfaGFyZGxpbmsucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9jbWFrZS1FLWNyZWF0ZV9oYXJkbGluay5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjZGM4NwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvY21ha2UtRS1jcmVhdGVfaGFyZGxpbmsucnN0CkBAIC0wLDAgKzEsNSBAQAorY21ha2UtRS1jcmVhdGVfaGFyZGxpbmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDptYW51YWw6YGNtYWtlKDEpYCBnYWluZWQgYSBgYC1FIGNyZWF0ZV9oYXJkbGlua2BgIGNvbW1hbmQtbGluZSB0b29sCisgIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGhhcmRsaW5rcyBiZXR3ZWVuIGZpbGVzLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9jb21waWxlcl9mbGFncy5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2NvbXBpbGVyX2ZsYWdzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM4ZTgwCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9jb21waWxlcl9mbGFncy5yc3QKQEAgLTAsMCArMSw5IEBACitjb21waWxlcl9mbGFncworLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fQ09NUElMRVJgIHZhcmlhYmxlIG1heSBub3cgYmUgdXNlZCB0bworICBzdG9yZSAibWFuZGF0b3J5IiBjb21waWxlciBmbGFncyBsaWtlIHRoZSA6ZW52dmFyOmBDQ2AgYW5kIG90aGVyIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworKiBUaGUgOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fRkxBR1NfSU5JVGAgdmFyaWFibGUgd2lsbCBub3cgYmUgY29uc2lkZXJlZCBkdXJpbmcKKyAgdGhlIGNvbXBpbGVyIGluZGVudGlmaWNhdGlvbiBjaGVjayBpZiBvdGhlciBzb3VyY2VzIGxpa2UgOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fRkxBR1NgCisgIG9yIDplbnZ2YXI6YENGTEFHU2AgYXJlIG5vdCBzZXQuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2NvbmZpZ3VyZV9maWxlLXBlcm1pc3Npb24tY29udHJvbC5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2NvbmZpZ3VyZV9maWxlLXBlcm1pc3Npb24tY29udHJvbC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRiNTJiNwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvY29uZmlndXJlX2ZpbGUtcGVybWlzc2lvbi1jb250cm9sLnJzdApAQCAtMCwwICsxLDUgQEAKK2NvbmZpZ3VyZV9maWxlLXBlcm1pc3Npb24tY29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDpjb21tYW5kOmBjb25maWd1cmVfZmlsZWAgY29tbWFuZCBnYWluZWQgYSBgYE5PX1NPVVJDRV9QRVJNSVNTSU9OU2BgCisgIG9wdGlvbiB0byBzdXBwcmVzcyBjb3B5aW5nIHRoZSBpbnB1dCBmaWxlJ3MgcGVybWlzc2lvbnMgdG8gdGhlIG91dHB1dCBmaWxlLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9jcGFjay1wcmUtYW5kLXBvc3QtYnVpbGQtc2NyaXB0cy5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2NwYWNrLXByZS1hbmQtcG9zdC1idWlsZC1zY3JpcHRzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjc5NThiCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9jcGFjay1wcmUtYW5kLXBvc3QtYnVpbGQtc2NyaXB0cy5yc3QKQEAgLTAsMCArMSw1IEBACitjcGFjay1wcmUtYW5kLXBvc3QtYnVpbGQtc2NyaXB0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBDUGFjayBsZWFybmVkIHRoZSA6dmFyaWFibGU6YENQQUNLX1BSRV9CVUlMRF9TQ1JJUFRTYCwgOnZhcmlhYmxlOmBDUEFDS19QT1NUX0JVSUxEX1NDUklQVFNgLAorICBhbmQgOnZhcmlhYmxlOmBDUEFDS19QQUNLQUdFX0ZJTEVTYCB2YXJpYWJsZXMuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2N0ZXN0LWN1ZGEtbWVtY2hlY2sucnN0IGIvSGVscC9yZWxlYXNlL2Rldi9jdGVzdC1jdWRhLW1lbWNoZWNrLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGY4NjFhCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC9yZWxlYXNlL2Rldi9jdGVzdC1jdWRhLW1lbWNoZWNrLnJzdApAQCAtMCwwICsxLDggQEAKK0NUZXN0CistLS0tLQorCisqIDptYW51YWw6YGN0ZXN0KDEpYCBnYWluZWQgc3VwcG9ydCBmb3IgY3VkYS1tZW1jaGVjayBhcyBgYENURVNUX01FTU9SWUNIRUNLX0NPTU1BTkRgYC4KKyAgVGhlIGRpZmZlcmVudCB0b29scyAobWVtY2hlY2ssIHJhY2VjaGVjaywgc3luY2NoZWNrLCBpbml0Y2hlY2spIHN1cHBsaWVkIGJ5CisgIGN1ZGEtbWVtY2hlY2sgY2FuIGJlIHNlbGVjdGVkIGJ5IHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIHVzaW5nIHRoZQorICBgYENURVNUX01FTU9SWUNIRUNLX0NPTU1BTkRfT1BUSU9OU2BgIHZhcmlhYmxlLgorICBUaGUgZGVmYXVsdCBmbGFncyBhcmUgYC0tdG9vbCBtZW1jaGVjayAtLWxlYWstY2hlY2sgZnVsbGAuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2RlcHJlY2F0ZS1wb2xpY3ktb2xkLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvZGVwcmVjYXRlLXBvbGljeS1vbGQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzAxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L2RlcHJlY2F0ZS1wb2xpY3ktb2xkLnJzdApAQCAtMCwwICsxLDEzIEBACitkZXByZWNhdGUtcG9saWN5LW9sZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBBbiBleHBsaWNpdCBkZXByZWNhdGlvbiBkaWFnbm9zdGljIHdhcyBhZGRlZCBmb3IgcG9saWN5IGBgQ01QMDA3MWBgCisgIChgYENNUDAwNzFgYCBhbmQgYmVsb3cgd2VyZSBhbHJlYWR5IGRlcHJlY2F0ZWQpLgorICBUaGUgOm1hbnVhbDpgY21ha2UtcG9saWNpZXMoNylgIG1hbnVhbCBleHBsYWlucyB0aGF0IHRoZSBPTEQgYmVoYXZpb3JzCisgIG9mIGFsbCBwb2xpY2llcyBhcmUgZGVwcmVjYXRlZCBhbmQgdGhhdCBwcm9qZWN0cyBzaG91bGQgcG9ydCB0byB0aGUKKyAgTkVXIGJlaGF2aW9ycy4KKworKiBDb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbnMgb2YgQ01ha2Ugb2xkZXIgdGhhbiAyLjguMTIgaXMgbm93IGRlcHJlY2F0ZWQKKyAgYW5kIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24uICBDYWxscyB0bworICA6Y29tbWFuZDpgY21ha2VfbWluaW11bV9yZXF1aXJlZGAgb3IgOmNvbW1hbmQ6YGNtYWtlX3BvbGljeWAgdGhhdCBzZXQKKyAgdGhlIHBvbGljeSB2ZXJzaW9uIHRvIGFuIG9sZGVyIHZhbHVlIG5vdyBpc3N1ZSBhIGRlcHJlY2F0aW9uIGRpYWdub3N0aWMuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2ZpbGUtZG93bmxvYWQtb3B0aW9uYWwtZmlsZS5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2ZpbGUtZG93bmxvYWQtb3B0aW9uYWwtZmlsZS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkYzI0YwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvZmlsZS1kb3dubG9hZC1vcHRpb25hbC1maWxlLnJzdApAQCAtMCwwICsxLDUgQEAKK2ZpbGUtZG93bmxvYWQtb3B0aW9uYWwtZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIGBgPGZpbGU+YGAgYXJndW1lbnQgaXMgbm93IG9wdGlvbmFsIGZvciA6Y29tbWFuZDpgZmlsZShET1dOTE9BRClgLiBJZiBpdAorICBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlsZSBpcyBub3Qgc2F2ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2ZpbGVhcGktY29kZW1vZGVsLTIuMi5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2ZpbGVhcGktY29kZW1vZGVsLTIuMi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1NGRmNgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvZmlsZWFwaS1jb2RlbW9kZWwtMi4yLnJzdApAQCAtMCwwICsxLDcgQEAKK2ZpbGVhcGktY29kZW1vZGVsLTIuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDptYW51YWw6YGNtYWtlLWZpbGUtYXBpKDcpYCAiY29kZW1vZGVsIiB2ZXJzaW9uIDIgYGB2ZXJzaW9uYGAgZmllbGQgaGFzCisgIGJlZW4gdXBkYXRlZCB0byAyLjIuCisqIFRoZSA6bWFudWFsOmBjbWFrZS1maWxlLWFwaSg3KWAgImNvZGVtb2RlbCIgdmVyc2lvbiAyICJ0YXJnZXQiIG9iamVjdCBnYWluZWQKKyAgYSBuZXcgYGBsYW5ndWFnZVN0YW5kYXJkYGAgZmllbGQgaW4gdGhlIGBgY29tcGlsZUdyb3Vwc2BgIG9iamVjdHMuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L2ZpbmRfcHJvZ3JhbS1leGUtbm8tcmVhZC5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L2ZpbmRfcHJvZ3JhbS1leGUtbm8tcmVhZC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxYjVkYgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvZmluZF9wcm9ncmFtLWV4ZS1uby1yZWFkLnJzdApAQCAtMCwwICsxLDUgQEAKK2ZpbmRfcHJvZ3JhbS1leGUtbm8tcmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIDpjb21tYW5kOmBmaW5kX3Byb2dyYW1gIGNvbW1hbmQgbm93IHJlcXVpcmVzIHBlcm1pc3Npb24gdG8gZXhlY3V0ZQorICBidXQgbm90IHRvIHJlYWQgdGhlIGZpbGUgZm91bmQuICBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDlgLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi9pbnN0YWxsLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvaW5zdGFsbC1kZWZhdWx0LWRpcmVjdG9yeS1wZXJtaXNzaW9ucy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjZmZlZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvcmVsZWFzZS9kZXYvaW5zdGFsbC1kZWZhdWx0LWRpcmVjdG9yeS1wZXJtaXNzaW9ucy5yc3QKQEAgLTAsMCArMSw1IEBACitpbnN0YWxsLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIGBgLS1pbnN0YWxsYGAgYXJndW1lbnQgb2YgdGhlIDptYW51YWw6YGNtYWtlKDEpYCBjb21tYW5kIGxpbmUgdG9vbCBnYWluZWQgYQorICBgYC0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnNgYCBhcmd1bWVudC4KZGlmZiAtLWdpdCBhL0hlbHAvcmVsZWFzZS9kZXYvbWFjT1Mtc2RrLWxhdGVzdC5yc3QgYi9IZWxwL3JlbGVhc2UvZGV2L21hY09TLXNkay1sYXRlc3QucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YWMzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L21hY09TLXNkay1sYXRlc3QucnN0CkBAIC0wLDAgKzEsMTAgQEAKK21hY09TLXNkay1sYXRlc3QKKy0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWlsZGluZyBmb3IgbWFjT1Mgd2lsbCBub3cgdXNlIHRoZSBsYXRlc3QgU0RLIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLAorICB1bmxlc3MgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgY2hvc2VuIGEgU0RLIHVzaW5nIDp2YXJpYWJsZTpgQ01BS0VfT1NYX1NZU1JPT1RgLgorCisgIFRoZSBkZXBsb3ltZW50IHRhcmdldCBvciBzeXN0ZW0gbWFjT1MgdmVyc2lvbiB3aWxsIG5vdCBhZmZlY3QKKyAgdGhlIGNob2ljZSBvZiBTREsuCisKKyogbWFjT1MgU0RLcyBvbGRlciB0aGFuIDEwLjUgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L3JlbW92ZS1jbWFrZS1ndWktcXQ0LnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvcmVtb3ZlLWNtYWtlLWd1aS1xdDQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjliNzUKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L3JlbW92ZS1jbWFrZS1ndWktcXQ0LnJzdApAQCAtMCwwICsxLDUgQEAKK3JlbW92ZS1jbWFrZS1ndWktcXQ0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIDptYW51YWw6YGNtYWtlLWd1aSgxKWAgbm93IHJlcXVpcmVzIFF0NS4gU3VwcG9ydCBmb3IgY29tcGlsaW5nIHdpdGggUXQ0IGhhcworICBiZWVuIHJlbW92ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvZGV2L3JlbW92ZS13YXJuLXVudXNlZC12YXJzLnJzdCBiL0hlbHAvcmVsZWFzZS9kZXYvcmVtb3ZlLXdhcm4tdW51c2VkLXZhcnMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMDZlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L3JlbW92ZS13YXJuLXVudXNlZC12YXJzLnJzdApAQCAtMCwwICsxLDYgQEAKK3JlbW92ZS13YXJuLXVudXNlZC12YXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6bWFudWFsOmBjbWFrZSgxKWAgY29tbWFuZC1saW5lIG9wdGlvbiBgYC0td2Fybi11bnVzZWQtdmFyc2BgIGhhcworICBiZWVuIHJlbW92ZWQgYW5kIGlzIG5vdyBzaWxlbnRseSBpZ25vcmVkLiAgVGhlIG9wdGlvbiBoYXMgbm90IHdvcmtlZAorICBjb3JyZWN0bHkgc2luY2UgQ01ha2UgMy4zLgpkaWZmIC0tZ2l0IGEvSGVscC9yZWxlYXNlL2Rldi92aXN1YWwtc3R1ZGlvLWFuZHJvaWQucnN0IGIvSGVscC9yZWxlYXNlL2Rldi92aXN1YWwtc3R1ZGlvLWFuZHJvaWQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMWExMTAKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3JlbGVhc2UvZGV2L3Zpc3VhbC1zdHVkaW8tYW5kcm9pZC5yc3QKQEAgLTAsMCArMSw3IEBACit2aXN1YWwtc3R1ZGlvLWFuZHJvaWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWaXN1YWwgU3R1ZGlvIDIwMTUgYW5kIGFib3ZlIGdhaW5lZAorICBzdXBwb3J0IGZvciB0aGUgVmlzdWFsIFN0dWRpbyBUb29scyBmb3IgQW5kcm9pZC4gVGhpcyBhbGxvd3MgeW91IHRvIHNldAorICA6dmFyaWFibGU6YENNQUtFX1NZU1RFTV9OQU1FYCB0byBgQW5kcm9pZGAgdG8gZ2VuZXJhdGUgYC52Y3hwcm9qYCBmaWxlcyBmb3IKKyAgdGhlIEFuZHJvaWQgdG9vbHMuCmRpZmYgLS1naXQgYS9IZWxwL3JlbGVhc2UvaW5kZXgucnN0IGIvSGVscC9yZWxlYXNlL2luZGV4LnJzdAppbmRleCAwY2MzZjk3Li5jZGMzZThiIDEwMDY0NAotLS0gYS9IZWxwL3JlbGVhc2UvaW5kZXgucnN0CisrKyBiL0hlbHAvcmVsZWFzZS9pbmRleC5yc3QKQEAgLTcsMTIgKzcsMTYgQEAKICAgVGhpcyBmaWxlIHNob3VsZCBpbmNsdWRlIHRoZSBhZGphY2VudCAiZGV2LnR4dCIgZmlsZQogICBpbiBkZXZlbG9wbWVudCB2ZXJzaW9ucyBidXQgbm90IGluIHJlbGVhc2UgdmVyc2lvbnMuCiAKKy4uIGluY2x1ZGU6OiBkZXYudHh0CisKIFJlbGVhc2VzCiA9PT09PT09PQogCiAuLiB0b2N0cmVlOjoKICAgIDptYXhkZXB0aDogMQogCisgICAzLjE4IDwzLjE4PgorICAgMy4xNyA8My4xNz4KICAgIDMuMTYgPDMuMTY+CiAgICAzLjE1IDwzLjE1PgogICAgMy4xNCA8My4xND4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQU5EUk9JRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0FORFJPSUQucnN0CmluZGV4IGZlZGU0Y2EuLjY4ZGNjZjIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQU5EUk9JRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9BTkRST0lELnJzdApAQCAtMSw1ICsxLDcgQEAKIEFORFJPSUQKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFNldCB0byBgYDFgYCB3aGVuIHRoZSB0YXJnZXQgc3lzdGVtICg6dmFyaWFibGU6YENNQUtFX1NZU1RFTV9OQU1FYCkgaXMKIGBgQW5kcm9pZGBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DQUNIRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NBQ0hFLnJzdAppbmRleCAyY2VmMjdlLi5kNTQ4OWM4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NBQ0hFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NBQ0hFLnJzdApAQCAtMSw2ICsxLDggQEAKIENBQ0hFCiAtLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIE9wZXJhdG9yIHRvIHJlYWQgY2FjaGUgdmFyaWFibGVzLgogCiBVc2UgdGhlIHN5bnRheCBgYCRDQUNIRXtWQVJ9YGAgdG8gcmVhZCBjYWNoZSBlbnRyeSBgYFZBUmBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQUlYX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5ZmUwZgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQUlYX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKQEAgLTAsMCArMSw4IEBACitDTUFLRV9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBBSVhfRVhQT1JUX0FMTF9TWU1CT0xTYCB0YXJnZXQgcHJvcGVydHkuCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb24gZWFjaCB0YXJnZXQgYXMgaXQgaXMKK2NyZWF0ZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUy5yc3QKaW5kZXggODg2MmJhOS4uMmQ2YjRiOSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BTlRfQURESVRJT05BTF9PUFRJT05TLnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfQU5UX0FERElUSU9OQUxfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBEZWZhdWx0IHZhbHVlIGZvciB0aGUgOnByb3BfdGd0OmBBTkRST0lEX0FOVF9BRERJVElPTkFMX09QVElPTlNgIHRhcmdldCBwcm9wZXJ0eS4KIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUEkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FQSS5yc3QKaW5kZXggYzA3YTA1YS4uNDM4OGJmMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FQSS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FQSS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BTkRST0lEX0FQSQogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkIHdpdGggTlZJRElBIE5zaWdodCBUZWdyYSBWaXN1YWwgU3R1ZGlvCiBFZGl0aW9uYCwgdGhpcyB2YXJpYWJsZSBtYXkgYmUgc2V0IHRvIHNwZWNpZnkgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQogOnByb3BfdGd0OmBBTkRST0lEX0FQSWAgdGFyZ2V0IHByb3BlcnR5LiAgU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvcgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FQSV9NSU4ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FQSV9NSU4ucnN0CmluZGV4IDAyNDZjNzUuLmEwZDJhYjQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUElfTUlOLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVBJX01JTi5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9BTkRST0lEX0FQSV9NSU4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9BUElfTUlOYCB0YXJnZXQgcHJvcGVydHkuCiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJDSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJDSC5yc3QKaW5kZXggYjkxY2E1Ny4uOWYxMjc0MiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSQ0gucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUkNILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FORFJPSURfQVJDSAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZCB3aXRoIE5WSURJQSBOc2lnaHQgVGVncmEgVmlzdWFsIFN0dWRpbwogRWRpdGlvbmAsIHRoaXMgdmFyaWFibGUgbWF5IGJlIHNldCB0byBzcGVjaWZ5IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUKIDpwcm9wX3RndDpgQU5EUk9JRF9BUkNIYCB0YXJnZXQgcHJvcGVydHkuICBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJDSF9BQkkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSQ0hfQUJJLnJzdAppbmRleCAwYTNlZDNjLi41YTJlM2VjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJDSF9BQkkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUkNIX0FCSS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BTkRST0lEX0FSQ0hfQUJJCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZGAsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZQogdGFyZ2V0IGFyY2hpdGVjdHVyZSBhbmQgQUJJIHRvIGJlIHVzZWQuICBWYWxpZCB2YWx1ZXMgYXJlOgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJNX01PREUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSTV9NT0RFLnJzdAppbmRleCBhZDNjMzdjLi45NzNmZjdlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJNX01PREUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUk1fTU9ERS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BTkRST0lEX0FSTV9NT0RFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZGAgYW5kIDp2YXJpYWJsZTpgQ01BS0VfQU5EUk9JRF9BUkNIX0FCSWAKIGlzIHNldCB0byBvbmUgb2YgdGhlIGBgYXJtZWFiaWBgIGFyY2hpdGVjdHVyZXMsIHNldCBgYENNQUtFX0FORFJPSURfQVJNX01PREVgYAogdG8gYGBPTmBgIHRvIHRhcmdldCAzMi1iaXQgQVJNIHByb2Nlc3NvcnMgKGBgLW1hcm1gYCkuICBPdGhlcndpc2UsIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSTV9ORU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9BUk1fTkVPTi5yc3QKaW5kZXggNGI3YWUwMy4uNmI5Y2YwOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FSTV9ORU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVJNX05FT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQU5EUk9JRF9BUk1fTkVPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWRgIGFuZCA6dmFyaWFibGU6YENNQUtFX0FORFJPSURfQVJDSF9BQklgCiBpcyBzZXQgdG8gYGBhcm1lYWJpLXY3YWBgIHNldCBgYENNQUtFX0FORFJPSURfQVJNX05FT05gYCB0byBgYE9OYGAgdG8gdGFyZ2V0CiBBUk0gTkVPTiBkZXZpY2VzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0FTU0VUU19ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTLnJzdAppbmRleCBjMzcyZmU0Li4zZGUyYmU0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfQVNTRVRTX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9BU1NFVFNfRElSRUNUT1JJRVNgIHRhcmdldCBwcm9wZXJ0eS4KIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9HVUkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0dVSS5yc3QKaW5kZXggMTc1NTM3NS4uODIxYmJlZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0dVSS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0dVSS5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9BTkRST0lEX0dVSQogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfR1VJYCB0YXJnZXQgcHJvcGVydHkgb2YKIGV4ZWN1dGFibGVzLiAgU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0pBUl9ERVBFTkRFTkNJRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0pBUl9ERVBFTkRFTkNJRVMucnN0CmluZGV4IDQ1MWE5MjkuLjgwYWI4NDIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfSkFSX0RFUEVOREVOQ0lFUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9BTkRST0lEX0pBUl9ERVBFTkRFTkNJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTYCB0YXJnZXQgcHJvcGVydHkuCiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfSkFSX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMucnN0CmluZGV4IGFmODNlMzQuLjRkMTQ4ZDggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBEZWZhdWx0IHZhbHVlIGZvciB0aGUgOnByb3BfdGd0OmBBTkRST0lEX0pBUl9ESVJFQ1RPUklFU2AgdGFyZ2V0IHByb3BlcnR5LgogU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX0pBVkFfU09VUkNFX0RJUi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfSkFWQV9TT1VSQ0VfRElSLnJzdAppbmRleCAzZGMwNWUwLi4wMjFiYWEwIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfSkFWQV9TT1VSQ0VfRElSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfSkFWQV9TT1VSQ0VfRElSLnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfSkFWQV9TT1VSQ0VfRElSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9KQVZBX1NPVVJDRV9ESVJgIHRhcmdldCBwcm9wZXJ0eS4KIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OQVRJVkVfTElCX0RFUEVOREVOQ0lFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMucnN0CmluZGV4IDQxOTE5MDcuLjQxZDRjYzMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OQVRJVkVfTElCX0RFUEVOREVOQ0lFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05BVElWRV9MSUJfREVQRU5ERU5DSUVTLnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIHRoZSA6cHJvcF90Z3Q6YEFORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVNgIHRhcmdldAogcHJvcGVydHkuICBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkFUSVZFX0xJQl9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkFUSVZFX0xJQl9ESVJFQ1RPUklFUy5yc3QKaW5kZXggN2NiOTUyNy4uZTg3NTQ3ZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05BVElWRV9MSUJfRElSRUNUT1JJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0FORFJPSURfTkFUSVZFX0xJQl9ESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBEZWZhdWx0IHZhbHVlIGZvciB0aGUgOnByb3BfdGd0OmBBTkRST0lEX05BVElWRV9MSUJfRElSRUNUT1JJRVNgIHRhcmdldAogcHJvcGVydHkuICBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OREsucnN0CmluZGV4IGQyNDFkZDAuLjcyYWM5OWUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OREsucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OREsucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQU5EUk9JRF9OREsKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZCB3aXRoIHRoZSBOREtgLCB0aGlzIHZhcmlhYmxlIGhvbGRzCiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIE5ESy4gIFRoZSBkaXJlY3RvcnkgbXVzdAogY29udGFpbiBhIGBgcGxhdGZvcm1zYGAgc3ViZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGBgYW5kcm9pZC08YXBpPmBgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLX0RFUFJFQ0FURURfSEVBREVSUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLX0RFUFJFQ0FURURfSEVBREVSUy5yc3QKaW5kZXggOGVhMTI1Ny4uNDBhNWMxYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19ERVBSRUNBVEVEX0hFQURFUlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OREtfREVQUkVDQVRFRF9IRUFERVJTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FORFJPSURfTkRLX0RFUFJFQ0FURURfSEVBREVSUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZCB3aXRoIHRoZSBOREtgLCB0aGlzIHZhcmlhYmxlCiBtYXkgYmUgc2V0IHRvIHNwZWNpZnkgd2hldGhlciB0byB1c2UgdGhlIGRlcHJlY2F0ZWQgcGVyLWFwaS1sZXZlbAogaGVhZGVycyBpbnN0ZWFkIG9mIHRoZSB1bmlmaWVkIGhlYWRlcnMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9IT1NUX1RBRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9IT1NUX1RBRy5yc3QKaW5kZXggMjA3MDE5YS4uOWQ2MWZhNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fSE9TVF9UQUcucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9OREtfVE9PTENIQUlOX0hPU1RfVEFHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9IT1NUX1RBRwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNy4xCisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkIHdpdGggdGhlIE5ES2AsIHRoaXMgdmFyaWFibGUKIHByb3ZpZGVzIHRoZSBOREsncyAiaG9zdCB0YWciIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwYXRoIHRvIHByZWJ1aWx0CiB0b29sY2hhaW5zIHRoYXQgcnVuIG9uIHRoZSBob3N0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fVkVSU0lPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9WRVJTSU9OLnJzdAppbmRleCAyMjgwOGUzLi4xNWZlMThmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9WRVJTSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9WRVJTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWQgd2l0aCB0aGUgTkRLYCwgdGhpcyB2YXJpYWJsZQogbWF5IGJlIHNldCB0byBzcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIHRoZSB0b29sY2hhaW4gdG8gYmUgdXNlZAogYXMgdGhlIGNvbXBpbGVyLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1BST0NFU1NfTUFYLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9QUk9DRVNTX01BWC5yc3QKaW5kZXggMTlmYjUyNy4uYmUyNDFjMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1BST0NFU1NfTUFYLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfUFJPQ0VTU19NQVgucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQU5EUk9JRF9QUk9DRVNTX01BWAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9QUk9DRVNTX01BWGAgdGFyZ2V0IHByb3BlcnR5LgogU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1BST0dVQVJELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9QUk9HVUFSRC5yc3QKaW5kZXggYjhmZGQ0Ni4uYmIwMDFkMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1BST0dVQVJELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfUFJPR1VBUkQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQU5EUk9JRF9QUk9HVUFSRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9QUk9HVUFSRGAgdGFyZ2V0IHByb3BlcnR5LgogU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1BST0dVQVJEX0NPTkZJR19QQVRILnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSC5yc3QKaW5kZXggOGRlYTAwOS4uNmZkNDA2NyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1BST0dVQVJEX0NPTkZJR19QQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfUFJPR1VBUkRfQ09ORklHX1BBVEgucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9QUk9HVUFSRF9DT05GSUdfUEFUSGAgdGFyZ2V0IHByb3BlcnR5LgogU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRILnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSC5yc3QKaW5kZXggNjlhNGQwYi4uOWY1NzQzZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU0VDVVJFX1BST1BTX1BBVEgucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSGAgdGFyZ2V0IHByb3BlcnR5LgogU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NLSVBfQU5UX1NURVAucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NLSVBfQU5UX1NURVAucnN0CmluZGV4IDBhOTZkZjkuLjU4ODc2OWIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TS0lQX0FOVF9TVEVQLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU0tJUF9BTlRfU1RFUC5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9BTkRST0lEX1NLSVBfQU5UX1NURVAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDpwcm9wX3RndDpgQU5EUk9JRF9TS0lQX0FOVF9TVEVQYCB0YXJnZXQgcHJvcGVydHkuCiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU4ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOLnJzdAppbmRleCBlYTYyY2FiLi4zY2E4OWY1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU4ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBXaGVuIDpyZWY6YENyb3NzIENvbXBpbGluZyBmb3IgQW5kcm9pZCB3aXRoIGEgU3RhbmRhbG9uZSBUb29sY2hhaW5gLCB0aGlzCiB2YXJpYWJsZSBob2xkcyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHRvb2xjaGFpbi4KIFRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IG11c3QgY29udGFpbiBhIGBgc3lzcm9vdGBgIHN1YmRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TVExfVFlQRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FORFJPSURfU1RMX1RZUEUucnN0CmluZGV4IGQxNzQ1NzUuLjM3NzgxODEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQU5EUk9JRF9TVExfVFlQRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BTkRST0lEX1NUTF9UWVBFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FORFJPSURfU1RMX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkIHdpdGggTlZJRElBIE5zaWdodCBUZWdyYSBWaXN1YWwgU3R1ZGlvCiBFZGl0aW9uYCwgdGhpcyB2YXJpYWJsZSBtYXkgYmUgc2V0IHRvIHNwZWNpZnkgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQogOnByb3BfdGd0OmBBTkRST0lEX1NUTF9UWVBFYCB0YXJnZXQgcHJvcGVydHkuICBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcucnN0CmluZGV4IDk0YzJiNmUuLmQ4YmQ4MmMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWV88Q09ORklHPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBXaGVyZSB0byBwdXQgYWxsIHRoZSA6cmVmOmBBUkNISVZFIDxBcmNoaXZlIE91dHB1dCBBcnRpZmFjdHM+YAogdGFyZ2V0IGZpbGVzIHdoZW4gYnVpbHQgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPR0VOX09SSUdJTl9ERVBFTkRTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT0dFTl9PUklHSU5fREVQRU5EUy5yc3QKaW5kZXggMTM5OGU3OC4uYzI0ZTQ2MiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPR0VOX09SSUdJTl9ERVBFTkRTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9HRU5fT1JJR0lOX0RFUEVORFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQVVUT0dFTl9PUklHSU5fREVQRU5EUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIFN3aXRjaCBmb3IgZm9yd2FyZGluZyBvcmlnaW4gdGFyZ2V0IGRlcGVuZGVuY2llcyB0byB0aGUgY29ycmVzcG9uZGluZwogYGBfYXV0b2dlbmBgIHRhcmdldHMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT0dFTl9QQVJBTExFTC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9HRU5fUEFSQUxMRUwucnN0CmluZGV4IGRkOTQ5OWEuLjJhZGEwMTIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT0dFTl9QQVJBTExFTC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPR0VOX1BBUkFMTEVMLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FVVE9HRU5fUEFSQUxMRUwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBOdW1iZXIgb2YgcGFyYWxsZWwgYGBtb2NgYCBvciBgYHVpY2BgIHByb2Nlc3NlcyB0byBzdGFydCB3aGVuIHVzaW5nCiA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZCA6cHJvcF90Z3Q6YEFVVE9VSUNgLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9HRU5fVkVSQk9TRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9HRU5fVkVSQk9TRS5yc3QKaW5kZXggYmFkOWNmMi4uZjc3ZWQ2YSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPR0VOX1ZFUkJPU0UucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT0dFTl9WRVJCT1NFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FVVE9HRU5fVkVSQk9TRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogU2V0cyB0aGUgdmVyYm9zaXR5IG9mIDpwcm9wX3RndDpgQVVUT01PQ2AsIDpwcm9wX3RndDpgQVVUT1VJQ2AgYW5kCiA6cHJvcF90Z3Q6YEFVVE9SQ0NgLiAgQSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIG9yIGEgdHJ1ZSBib29sZWFuIHZhbHVlCiBsZXRzIHRoZSBgYEFVVE8qYGAgZ2VuZXJhdG9ycyBvdXRwdXQgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVMucnN0CmluZGV4IDdlMWM1M2QuLmYxYjAzYTAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfQ09NUElMRVJfUFJFREVGSU5FUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9BVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YEFVVE9NT0NfQ09NUElMRVJfUFJFREVGSU5FU2AKIHByb3BlcnR5IG9uIGFsbCB0aGUgdGFyZ2V0cy4gU2VlIHRoYXQgdGFyZ2V0IHByb3BlcnR5IGZvciBhZGRpdGlvbmFsCiBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19ERVBFTkRfRklMVEVSUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfREVQRU5EX0ZJTFRFUlMucnN0CmluZGV4IDVjMzY2MmQuLjJjMTU1MWEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19ERVBFTkRfRklMVEVSUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPTU9DX0RFUEVORF9GSUxURVJTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FVVE9NT0NfREVQRU5EX0ZJTFRFUlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIEZpbHRlciBkZWZpbml0aW9ucyB1c2VkIGJ5IDp2YXJpYWJsZTpgQ01BS0VfQVVUT01PQ2AKIHRvIGV4dHJhY3QgZmlsZSBuYW1lcyBmcm9tIHNvdXJjZSBjb2RlIGFzIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzCiBmb3IgdGhlIGBgbW9jYGAgZmlsZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19NQUNST19OQU1FUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfTUFDUk9fTkFNRVMucnN0CmluZGV4IGJhMWI5ZDIuLjhlMzRkZjIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19NQUNST19OQU1FUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPTU9DX01BQ1JPX05BTUVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FVVE9NT0NfTUFDUk9fTkFNRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiA6cmVmOmBTZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgbGlzdCBvZiBtYWNybyBuYW1lcyB1c2VkIGJ5CiA6dmFyaWFibGU6YENNQUtFX0FVVE9NT0NgIHRvIGRldGVybWluZSBpZiBhIEMrKyBmaWxlIG5lZWRzIHRvIGJlCiBwcm9jZXNzZWQgYnkgYGBtb2NgYC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19QQVRIX1BSRUZJWC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9NT0NfUEFUSF9QUkVGSVgucnN0CmluZGV4IGRjYTBiMDYuLjA3YTZjYzggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQVVUT01PQ19QQVRIX1BSRUZJWC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPTU9DX1BBVEhfUFJFRklYLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FVVE9NT0NfUEFUSF9QUkVGSVgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBXaGV0aGVyIHRvIGdlbmVyYXRlIHRoZSBgYC1wYGAgcGF0aCBwcmVmaXggb3B0aW9uIGZvciBgYG1vY2BgIG9uCiA6cHJvcF90Z3Q6YEFVVE9NT0NgIGVuYWJsZWQgUXQgdGFyZ2V0cy4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9BVVRPVUlDX1NFQVJDSF9QQVRIUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9VSUNfU0VBUkNIX1BBVEhTLnJzdAppbmRleCBhYTEzMmJmLi4wMjYyMzY4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9VSUNfU0VBUkNIX1BBVEhTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0FVVE9VSUNfU0VBUkNIX1BBVEhTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0FVVE9VSUNfU0VBUkNIX1BBVEhTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogU2VhcmNoIHBhdGggbGlzdCB1c2VkIGJ5IDp2YXJpYWJsZTpgQ01BS0VfQVVUT1VJQ2AgdG8gZmluZCBpbmNsdWRlZAogYGAudWlgYCBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9SUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0JVSUxEX1JQQVRILnJzdAppbmRleCBmNWQ1M2I4Li43YThhY2U3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0JVSUxEX1JQQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0JVSUxEX1JQQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0JVSUxEX1JQQVRICiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogOnJlZjpgU2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIHNwZWNpZnlpbmcgcnVudGltZSBwYXRoIChgYFJQQVRIYGApCiBlbnRyaWVzIHRvIGFkZCB0byBiaW5hcmllcyBsaW5rZWQgaW4gdGhlIGJ1aWxkIHRyZWUgKGZvciBwbGF0Zm9ybXMgdGhhdAogc3VwcG9ydCBpdCkuICBUaGUgZW50cmllcyB3aWxsICpub3QqIGJlIHVzZWQgZm9yIGJpbmFyaWVzIGluIHRoZSBpbnN0YWxsCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0JVSUxEX1JQQVRIX1VTRV9PUklHSU4ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9SUEFUSF9VU0VfT1JJR0lOLnJzdAppbmRleCBlMzRlZGU2Li5lY2Q5Mjc4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0JVSUxEX1JQQVRIX1VTRV9PUklHSU4ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQlVJTERfUlBBVEhfVVNFX09SSUdJTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9CVUlMRF9SUEFUSF9VU0VfT1JJR0lOCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogV2hldGhlciB0byB1c2UgcmVsYXRpdmUgcGF0aHMgZm9yIHRoZSBidWlsZCBgYFJQQVRIYGAuCiAKIFRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YEJVSUxEX1JQQVRIX1VTRV9PUklHSU5gIHRhcmdldApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9CVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIucnN0CmluZGV4IDMwZDVkM2IuLjViYTc3NWMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQlVJTERfV0lUSF9JTlNUQUxMX05BTUVfRElSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0JVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9CVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogV2hldGhlciB0byB1c2UgOnByb3BfdGd0OmBJTlNUQUxMX05BTUVfRElSYCBvbiB0YXJnZXRzIGluIHRoZSBidWlsZCB0cmVlLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBCVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVJgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NGR19JTlRESVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DRkdfSU5URElSLnJzdAppbmRleCBhZjgyZjc1Li44NDI2NTRlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NGR19JTlRESVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ0ZHX0lOVERJUi5yc3QKQEAgLTE2LDYgKzE2LDEzIEBACiAgICQoQ29uZmlndXJhdGlvbikgICAgID0gVmlzdWFsIFN0dWRpbyAxMAogICAkKENPTkZJR1VSQVRJT04pICAgICA9IFhjb2RlCiAgIC4gICAgICAgICAgICAgICAgICAgID0gTWFrZS1iYXNlZCB0b29scworICAuICAgICAgICAgICAgICAgICAgICA9IE5pbmphCisgICR7Q09ORklHVVJBVElPTn0gICAgID0gTmluamEgTXVsdGktQ29uZmlnCisKK05vdGUgdGhhdCB0aGlzIHZhcmlhYmxlIG9ubHkgaGFzIGxpbWl0ZWQgc3VwcG9ydCBvbgorOmdlbmVyYXRvcjpgTmluamEgTXVsdGktQ29uZmlnYC4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoZQorYGAkPENPTkZJRz5gYCA6bWFudWFsOmBnZW5lcmF0b3IgZXhwcmVzc2lvbiA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAKK2luc3RlYWQuCiAKIFNpbmNlIHRoZXNlIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGJ5IHRoZSBuYXRpdmUgYnVpbGQgc3lzdGVtLCB0aGlzCiB2YXJpYWJsZSBpcyBzdWl0YWJsZSBvbmx5IGZvciB1c2UgaW4gY29tbWFuZCBsaW5lcyB0aGF0IHdpbGwgYmUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09ERUJMT0NLU19DT01QSUxFUl9JRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPREVCTE9DS1NfQ09NUElMRVJfSUQucnN0CmluZGV4IGFkMjcwOWQuLjBiMmIwYTAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09ERUJMT0NLU19DT01QSUxFUl9JRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DT0RFQkxPQ0tTX0NPTVBJTEVSX0lELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NPREVCTE9DS1NfQ09NUElMRVJfSUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBDaGFuZ2UgdGhlIGNvbXBpbGVyIGlkIGluIHRoZSBnZW5lcmF0ZWQgQ29kZUJsb2NrcyBwcm9qZWN0IGZpbGVzLgogCiBDb2RlQmxvY2tzIHVzZXMgaXRzIG93biBjb21waWxlciBpZCBzdHJpbmcgd2hpY2ggZGlmZmVycyBmcm9tCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUy5yc3QKaW5kZXggODBmZmNlMy4uZGJiODYwNiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT0RFQkxPQ0tTX0VYQ0xVREVfRVhURVJOQUxfRklMRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09ERUJMT0NLU19FWENMVURFX0VYVEVSTkFMX0ZJTEVTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogQ2hhbmdlIHRoZSB3YXkgdGhlIENvZGVCbG9ja3MgZ2VuZXJhdG9yIGNyZWF0ZXMgcHJvamVjdCBmaWxlcy4KIAogSWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gYGBPTmBgIHRoZSBnZW5lcmF0b3IgZXhjbHVkZXMgZnJvbQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT0RFTElURV9VU0VfVEFSR0VUUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPREVMSVRFX1VTRV9UQVJHRVRTLnJzdAppbmRleCAzM2NkZjZjLi4yMWFmNWY3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPREVMSVRFX1VTRV9UQVJHRVRTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPREVMSVRFX1VTRV9UQVJHRVRTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NPREVMSVRFX1VTRV9UQVJHRVRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogQ2hhbmdlIHRoZSB3YXkgdGhlIENvZGVMaXRlIGdlbmVyYXRvciBjcmVhdGVzIHByb2plY3RmaWxlcy4KIAogSWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gYGBPTmBgIGF0IHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFUl9JU19HTlVDQy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUNDLnJzdAppbmRleCBhNDA2NjdlLi45MWNmODQ4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUNDLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUNDLnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVHJ1ZSBpZiB0aGUgYGBDYGAgY29tcGlsZXIgaXMgR05VLgogVXNlIDp2YXJpYWJsZTpgQ01BS0VfQ19DT01QSUxFUl9JRCA8Q01BS0VfPExBTkc+X0NPTVBJTEVSX0lEPmAgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VQ1hYLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VQ1hYLnJzdAppbmRleCBmMWY1Y2Y3Li5lNjc3MThhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFUl9JU19HTlVDWFgucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfQ09NUElMRVJfSVNfR05VQ1hYCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFRydWUgaWYgdGhlIEMrKyAoYGBDWFhgYCkgY29tcGlsZXIgaXMgR05VLgogVXNlIDp2YXJpYWJsZTpgQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIDxDTUFLRV88TEFORz5fQ09NUElMRVJfSUQ+YCBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFUl9JU19HTlVHNzcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFUl9JU19HTlVHNzcucnN0CmluZGV4IDNkNmRhYjQuLmY2OWMwMWEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRVJfSVNfR05VRzc3LnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVSX0lTX0dOVUc3Ny5yc3QKQEAgLTEsNSArMSw3IEBACiBDTUFLRV9DT01QSUxFUl9JU19HTlVHNzcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVHJ1ZSBpZiB0aGUgYGBGb3J0cmFuYGAgY29tcGlsZXIgaXMgR05VLgogVXNlIDp2YXJpYWJsZTpgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCA8Q01BS0VfPExBTkc+X0NPTVBJTEVSX0lEPmAgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkucnN0CmluZGV4IGVhMzNjN2QuLjExZjUyYzcgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIE91dHB1dCBkaXJlY3RvcnkgZm9yIE1TIGRlYnVnIHN5bWJvbCBgYC5wZGJgYCBmaWxlcwogZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB3aGlsZSBidWlsZGluZyBzb3VyY2UgZmlsZXMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QKaW5kZXggZmRlYjlhYi4uOTlkMGJkYyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZXzxDT05GSUc+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBQZXItY29uZmlndXJhdGlvbiBvdXRwdXQgZGlyZWN0b3J5IGZvciBNUyBkZWJ1ZyBzeW1ib2wgYGAucGRiYGAgZmlsZXMKIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgd2hpbGUgYnVpbGRpbmcgc291cmNlIGZpbGVzLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NQQUNLX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DUEFDS19DT01NQU5ELnJzdAppbmRleCA1NTkxMDhhLi4zYTgxZDY4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NQQUNLX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1BBQ0tfQ09NTUFORC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DUEFDS19DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogRnVsbCBwYXRoIHRvIDptYW51YWw6YGNwYWNrKDEpYCBjb21tYW5kIGluc3RhbGxlZCB3aXRoIENNYWtlLgogCiBUaGlzIGlzIHRoZSBmdWxsIHBhdGggdG8gdGhlIENQYWNrIGV4ZWN1dGFibGUgOm1hbnVhbDpgY3BhY2soMSlgIHdoaWNoIGlzCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NST1NTQ09NUElMSU5HX0VNVUxBVE9SLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0CmluZGV4IDFkMDEzYjcuLjgxNWRhMDAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBUaGlzIHZhcmlhYmxlIGlzIG9ubHkgdXNlZCB3aGVuIDp2YXJpYWJsZTpgQ01BS0VfQ1JPU1NDT01QSUxJTkdgIGlzIG9uLiBJdAogc2hvdWxkIHBvaW50IHRvIGEgY29tbWFuZCBvbiB0aGUgaG9zdCBzeXN0ZW0gdGhhdCBjYW4gcnVuIGV4ZWN1dGFibGUgYnVpbHQKIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1JPU1NfQ09ORklHUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NST1NTX0NPTkZJR1MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOTIxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NST1NTX0NPTkZJR1MucnN0CkBAIC0wLDAgKzEsMTcgQEAKK0NNQUtFX0NST1NTX0NPTkZJR1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitTcGVjaWZpZXMgYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2YKK2NvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBmcm9tIGFsbCBgYGJ1aWxkLTxDb25maWc+Lm5pbmphYGAgZmlsZXMgaW4gdGhlCis6Z2VuZXJhdG9yOmBOaW5qYSBNdWx0aS1Db25maWdgIGdlbmVyYXRvci4gIFRoaXMgdmFyaWFibGUgYWN0aXZhdGVzCitjcm9zcy1jb25maWcgbW9kZS4gVGFyZ2V0cyBmcm9tIGVhY2ggY29uZmlnIHNwZWNpZmllZCBpbiB0aGlzIHZhcmlhYmxlIGNhbiBiZQorYnVpbHQgZnJvbSBhbnkgYGBidWlsZC08Q29uZmlnPi5uaW5qYWBgIGZpbGUuIEN1c3RvbSBjb21tYW5kcyB3aWxsIHVzZSB0aGUKK2NvbmZpZ3VyYXRpb24gbmF0aXZlIHRvIGBgYnVpbGQtPENvbmZpZz4ubmluamFgYC4gSWYgaXQgaXMgc2V0IHRvIGBgYWxsYGAsIGFsbAorY29uZmlndXJhdGlvbnMgZnJvbSA6dmFyaWFibGU6YENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVNgIGFyZSBjcm9zcy1jb25maWdzLiBJZgoraXQgaXMgbm90IHNwZWNpZmllZCwgb3IgZW1wdHksIGVhY2ggYGBidWlsZC08Q29uZmlnPi5uaW5qYWBgIGZpbGUgd2lsbCBvbmx5Citjb250YWluIGJ1aWxkIHJ1bGVzIGZvciBpdHMgb3duIGNvbmZpZ3VyYXRpb24uCisKK1RoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIG11c3QgYmUgYSBzdWJzZXQgb2YKKzp2YXJpYWJsZTpgQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFU2AuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NURVNUX0FSR1VNRU5UUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NURVNUX0FSR1VNRU5UUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmYzhmZQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1RFU1RfQVJHVU1FTlRTLnJzdApAQCAtMCwwICsxLDggQEAKK0NNQUtFX0NURVNUX0FSR1VNRU5UUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworU2V0IHRoaXMgdG8gYSA6cmVmOmBzZW1pY29sb24tc2VwYXJhdGVkIGxpc3QgPENNYWtlIExhbmd1YWdlIExpc3RzPmAgb2YKK2NvbW1hbmQtbGluZSBhcmd1bWVudHMgdG8gcGFzcyB0byA6bWFudWFsOmBjdGVzdCgxKWAgd2hlbiBydW5uaW5nIHRlc3RzCit0aHJvdWdoIHRoZSBgYHRlc3RgYCAob3IgYGBSVU5fVEVTVFNgYCkgdGFyZ2V0IG9mIHRoZSBnZW5lcmF0ZWQgYnVpbGQgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NTA0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfQVJDSElURUNUVVJFUy5yc3QKQEAgLTAsMCArMSwxOSBAQAorQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xOAorCitEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YENVREFfQVJDSElURUNUVVJFU2AgcHJvcGVydHkgb2YgdGFyZ2V0cy4KKworVGhpcyBpcyBpbml0aWFsaXplZCBhcyBmb2xsb3dzIGRlcGVuZGluZyBvbiA6dmFyaWFibGU6YENNQUtFX0NVREFfQ09NUElMRVJfSUQgPENNQUtFXzxMQU5HPl9DT01QSUxFUl9JRD5gOgorCistIEZvciBgYENsYW5nYGA6IHRoZSBvbGRlc3QgYXJjaGl0ZWN0dXJlIHRoYXQgd29ya3MuCisKKy0gRm9yIGBgTlZJRElBYGA6IHRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSBjaG9zZW4gYnkgdGhlIGNvbXBpbGVyLgorICBTZWUgcG9saWN5IDpwb2xpY3k6YENNUDAxMDRgLgorCitVc2VycyBhcmUgZW5jb3VyYWdlZCB0byBvdmVycmlkZSB0aGlzLCBhcyB0aGUgZGVmYXVsdCB2YXJpZXMgYWNyb3NzIGNvbXBpbGVycworYW5kIGNvbXBpbGVyIHZlcnNpb25zLgorCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBDVURBX0FSQ0hJVEVDVFVSRVNgIHByb3BlcnR5CitvbiBhbGwgdGFyZ2V0cy4gU2VlIHRoZSB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjMjcwYwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTLnJzdApAQCAtMCwwICsxLDEzIEBACitDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKK0xpc3Qgb2YgZmVhdHVyZXMga25vd24gdG8gdGhlIENVREEgY29tcGlsZXIKKworVGhlc2UgZmVhdHVyZXMgYXJlIGtub3duIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGggdGhlIENVREEgY29tcGlsZXIuIFRoaXMKK2xpc3QgaXMgYSBzdWJzZXQgb2YgdGhlIGZlYXR1cmVzIGxpc3RlZCBpbiB0aGUKKzpwcm9wX2dibDpgQ01BS0VfQ1VEQV9LTk9XTl9GRUFUVVJFU2AgZ2xvYmFsIHByb3BlcnR5LgorCitTZWUgdGhlIDptYW51YWw6YGNtYWtlLWNvbXBpbGUtZmVhdHVyZXMoNylgIG1hbnVhbCBmb3IgaW5mb3JtYXRpb24gb24KK2NvbXBpbGUgZmVhdHVyZXMgYW5kIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY29tcGlsZXJzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX0VYVEVOU0lPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX0VYVEVOU0lPTlMucnN0CmluZGV4IDRmZTc1OGUuLmI4NmMwZWEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9FWFRFTlNJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfRVhURU5TSU9OUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DVURBX0VYVEVOU0lPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBDVURBX0VYVEVOU0lPTlNgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YENVREFfRVhURU5TSU9OU2AKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSLnJzdAppbmRleCA2ZDM0YzVjLi4wNzM0MmI1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfSE9TVF9DT01QSUxFUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX0hPU1RfQ09NUElMRVIucnN0CkBAIC0xLDggKzEsMjUgQEAKIENNQUtFX0NVREFfSE9TVF9DT01QSUxFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUV4ZWN1dGFibGUgdG8gdXNlIHdoZW4gY29tcGlsaW5nIGhvc3QgY29kZSB3aGVuIGNvbXBpbGluZyBgYENVREFgYCBsYW5ndWFnZQotZmlsZXMuIE1hcHMgdG8gdGhlIGBgbnZjYyAtY2NiaW5gYCBvcHRpb24uICBXaWxsIG9ubHkgYmUgdXNlZCBieSBDTWFrZSBvbiB0aGUgZmlyc3QKLWNvbmZpZ3VyYXRpb24gdG8gZGV0ZXJtaW5lIGEgdmFsaWQgaG9zdCBjb21waWxlciBmb3IgYGBDVURBYGAuIEFmdGVyIGEgdmFsaWQKLWhvc3QgY29tcGlsZXIgaGFzIGJlZW4gZm91bmQsIHRoaXMgdmFsdWUgaXMgcmVhZC1vbmx5LiAgVGhpcyB2YXJpYWJsZSB0YWtlcwotcHJpb3JpdHkgb3ZlciB0aGUgOmVudnZhcjpgQ1VEQUhPU1RDWFhgIGVudmlyb25tZW50IHZhcmlhYmxlLgorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCitXaGVuIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFUiA8Q01BS0VfPExBTkc+X0NPTVBJTEVSPmAgaXMgc2V0IHRvCitOVklESUEgYGBudmNjYGAsIGBgQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSYGAgc2VsZWN0cyB0aGUgY29tcGlsZXIKK2V4ZWN1dGFibGUgdG8gdXNlIHdoZW4gY29tcGlsaW5nIGhvc3QgY29kZSBmb3IgYGBDVURBYGAgbGFuZ3VhZ2UgZmlsZXMuCitUaGlzIG1hcHMgdG8gdGhlIGBgbnZjYyAtY2NiaW5gYCBvcHRpb24uCisKK1RoZSBgYENNQUtFX0NVREFfSE9TVF9DT01QSUxFUmBgIHZhcmlhYmxlIG1heSBiZSBzZXQgZXhwbGljaXRseSBiZWZvcmUgQ1VEQSBpcworZmlyc3QgZW5hYmxlZCBieSBhIDpjb21tYW5kOmBwcm9qZWN0YCBvciA6Y29tbWFuZDpgZW5hYmxlX2xhbmd1YWdlYCBjb21tYW5kLgorVGhpcyBjYW4gYmUgZG9uZSB2aWEgYGAtRENNQUtFX0NVREFfSE9TVF9DT01QSUxFUj0uLi5gYCBvbiB0aGUgY29tbWFuZCBsaW5lCitvciBpbiBhIDpyZWY6YHRvb2xjaGFpbiBmaWxlIDxDcm9zcyBDb21waWxpbmcgVG9vbGNoYWluPmAuICBPciwgb25lIG1heSBzZXQKK3RoZSA6ZW52dmFyOmBDVURBSE9TVENYWGAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuCisKK09uY2UgdGhlIENVREEgbGFuZ3VhZ2UgaXMgZW5hYmxlZCwgdGhlIGBgQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSYGAgdmFyaWFibGUKK2lzIHJlYWQtb25seSBhbmQgY2hhbmdlcyB0byBpdCBhcmUgdW5kZWZpbmVkIGJlaGF2aW9yLgorCisuLiBub3RlOjoKKworICBTaW5jZSBgYENNQUtFX0NVREFfSE9TVF9DT01QSUxFUmBgIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIHRoZQorICBgYENNQUtFX0NVREFfQ09NUElMRVJgYCBpcyBgYG52Y2NgYCwgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0bworICBzZXQgYGBDTUFLRV9DVURBX0hPU1RfQ09NUElMRVJgYCBleHBsaWNpdGx5IHdpdGhvdXQgYWxzbyBzZXR0aW5nCisgIGBgQ01BS0VfQ1VEQV9DT01QSUxFUmBgIGV4cGxpY2l0bHkgdG8gYmUgc3VyZSBpdCBpcyBgYG52Y2NgYC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTLnJzdAppbmRleCBmYzgzNWNkLi40NzRiYWVlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YENVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MU2AgdGFyZ2V0CiBwcm9wZXJ0eS4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uIGVhY2ggdGFyZ2V0IGFzCiBpdCBpcyBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWI5ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWS5yc3QKQEAgLTAsMCArMSwyNyBAQAorQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworU2VsZWN0IHRoZSBDVURBIHJ1bnRpbWUgbGlicmFyeSBmb3IgdXNlIHdoZW4gY29tcGlsaW5nIGFuZCBsaW5raW5nIENVREEuCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBDVURBX1JVTlRJTUVfTElCUkFSWWAKK3Byb3BlcnR5IG9uIGFsbCB0YXJnZXRzIGFzIHRoZXkgYXJlIGNyZWF0ZWQuCisKK1RoZSBhbGxvd2VkIGNhc2UgaW5zZW5zaXRpdmUgdmFsdWVzIGFyZToKKworLi4gaW5jbHVkZTo6IC4uL3Byb3BfdGd0L0NVREFfUlVOVElNRV9MSUJSQVJZLVZBTFVFUy50eHQKKworQ29udGVudHMgb2YgYGBDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWWBgIG1heSB1c2UKKzptYW51YWw6YGdlbmVyYXRvciBleHByZXNzaW9ucyA8Y21ha2UtZ2VuZXJhdG9yLWV4cHJlc3Npb25zKDcpPmAuCisKK0lmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCB0aGVuIHRoZSA6cHJvcF90Z3Q6YENVREFfUlVOVElNRV9MSUJSQVJZYCB0YXJnZXQKK3Byb3BlcnR5IHdpbGwgbm90IGJlIHNldCBhdXRvbWF0aWNhbGx5LiAgSWYgdGhhdCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHRoZW4KK0NNYWtlIHVzZXMgYW4gYXBwcm9wcmlhdGUgZGVmYXVsdCB2YWx1ZSBiYXNlZCBvbiB0aGUgY29tcGlsZXIgdG8gc2VsZWN0IHRoZQorQ1VEQSBydW50aW1lIGxpYnJhcnkuCisKKy4uIG5vdGU6OgorCisgIFRoaXMgcHJvcGVydHkgaGFzIGVmZmVjdCBvbmx5IHdoZW4gdGhlIGBgQ1VEQWBgIGxhbmd1YWdlIGlzIGVuYWJsZWQuIFRvCisgIGNvbnRyb2wgdGhlIENVREEgcnVudGltZSBsaW5raW5nIHdoZW4gb25seSB1c2luZyB0aGUgQ1VEQSBTREsgd2l0aCB0aGUKKyAgYGBDYGAgb3IgYGBDKytgYCBsYW5ndWFnZSB3ZSByZWNvbW1lbmQgdXNpbmcgdGhlIDptb2R1bGU6YEZpbmRDVURBVG9vbGtpdGAKKyAgbW9kdWxlLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OLnJzdAppbmRleCBlZWY5MmZiLi4zZGJhZWY5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT05gIHRhcmdldCBwcm9wZXJ0eS4KIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwcm9wZXJ0eSBvbiBlYWNoIHRhcmdldCBhcyBpdCBpcwogY3JlYXRlZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TVEFOREFSRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfU1RBTkRBUkQucnN0CmluZGV4IDZjMjMwMzEuLjc5OGFiMWUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TVEFOREFSRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1NUQU5EQVJELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NVREFfU1RBTkRBUkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgQ1VEQV9TVEFOREFSRGAgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgQ1VEQV9TVEFOREFSRGAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TVEFOREFSRF9SRVFVSVJFRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVREFfU1RBTkRBUkRfUkVRVUlSRUQucnN0CmluZGV4IDkzNWQ2MDUuLmFlMmY1MmYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9TVEFOREFSRF9SRVFVSVJFRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1NUQU5EQVJEX1JFUVVJUkVELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NVREFfU1RBTkRBUkRfUkVRVUlSRUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgQ1VEQV9TVEFOREFSRF9SRVFVSVJFRGAgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgQ1VEQV9TVEFOREFSRF9SRVFVSVJFRGAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QKaW5kZXggN2RlNTBhNS4uZTU4NmRhYiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFdoZW4gdGhlIGBgQ1VEQWBgIGxhbmd1YWdlIGhhcyBiZWVuIGVuYWJsZWQsIHRoaXMgcHJvdmlkZXMgYQogOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIGluY2x1ZGUgZGlyZWN0b3JpZXMgcHJvdmlkZWQKIGJ5IHRoZSBDVURBIFRvb2xraXQuICBUaGUgdmFsdWUgbWF5IGJlIHVzZWZ1bCBmb3IgQysrIHNvdXJjZSBmaWxlcwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxYTRlOQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5yc3QKQEAgLTAsMCArMSwxMiBAQAorQ01BS0VfQ1VSUkVOVF9GVU5DVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKK1doZW4gZXhlY3V0aW5nIGNvZGUgaW5zaWRlIGEgOmNvbW1hbmQ6YGZ1bmN0aW9uYCwgdGhpcyB2YXJpYWJsZQorY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uICBJdCBjYW4gYmUgdXNlZnVsIGZvcgorZGlhZ25vc3RpYyBvciBkZWJ1ZyBtZXNzYWdlcy4KKworU2VlIGFsc28gOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYCwKKzp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEVgIGFuZAorOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORWAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGY1NTNkCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSLnJzdApAQCAtMCwwICsxLDQzIEBACitDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworV2hlbiBleGVjdXRpbmcgY29kZSBpbnNpZGUgYSA6Y29tbWFuZDpgZnVuY3Rpb25gLCB0aGlzIHZhcmlhYmxlCitjb250YWlucyB0aGUgZnVsbCBkaXJlY3Rvcnkgb2YgdGhlIGxpc3RmaWxlIHRoYXQgZGVmaW5lZCB0aGUgY3VycmVudCBmdW5jdGlvbi4KKworSXQgaXMgcXVpdGUgY29tbW9uIHByYWN0aWNlIGluIENNYWtlIGZvciBtb2R1bGVzIHRvIHVzZSBzb21lIGFkZGl0aW9uYWwgZmlsZXMsCitzdWNoIGFzIHRlbXBsYXRlcyB0byBiZSBjb3BpZWQgaW4gYWZ0ZXIgc3Vic3RpdHV0aW5nIENNYWtlIHZhcmlhYmxlcy4KK0luIHN1Y2ggY2FzZXMsIGEgZnVuY3Rpb24gbmVlZHMgdG8ga25vdyB3aGVyZSB0byBsb2NhdGUgdGhvc2UgZmlsZXMgaW4gYSB3YXkKK3RoYXQgZG9lc24ndCBkZXBlbmQgb24gd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gIFdpdGhvdXQKK2BgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUmBgLCB0aGUgY29kZSB0byBkbyB0aGF0IHdvdWxkIHR5cGljYWxseSB1c2UKK3RoZSBmb2xsb3dpbmcgcGF0dGVybjoKKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgc2V0KF9USElTX01PRFVMRV9CQVNFX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIpCisKKyAgZnVuY3Rpb24oZm9vKQorICAgIGNvbmZpZ3VyZV9maWxlKAorICAgICAgIiR7X1RISVNfTU9EVUxFX0JBU0VfRElSfS9zb21lLnRlbXBsYXRlLmluIgorICAgICAgc29tZS5vdXRwdXQKKyAgICApCisgIGVuZGZ1bmN0aW9uKCkKKworVXNpbmcgYGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYGAgaW5zaWRlIHRoZSBmdW5jdGlvbiBpbnN0ZWFkCitlbGltaW5hdGVzIHRoZSBuZWVkIGZvciB0aGUgZXh0cmEgdmFyaWFibGUgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGJlIHZpc2libGUKK291dHNpZGUgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUuCitUaGUgYWJvdmUgZXhhbXBsZSBjYW4gYmUgd3JpdHRlbiBpbiB0aGUgbW9yZSBjb25jaXNlIGFuZCBtb3JlIHJvYnVzdCBmb3JtOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBmdW5jdGlvbihmb28pCisgICAgY29uZmlndXJlX2ZpbGUoCisgICAgICAiJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSfS9zb21lLnRlbXBsYXRlLmluIgorICAgICAgc29tZS5vdXRwdXQKKyAgICApCisgIGVuZGZ1bmN0aW9uKCkKKworU2VlIGFsc28gOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OYCwKKzp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEVgIGFuZAorOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORWAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzN2RmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFLnJzdApAQCAtMCwwICsxLDExIEBACitDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitXaGVuIGV4ZWN1dGluZyBjb2RlIGluc2lkZSBhIDpjb21tYW5kOmBmdW5jdGlvbmAsIHRoaXMgdmFyaWFibGUKK2NvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGxpc3RmaWxlIHRoYXQgZGVmaW5lZCB0aGUgY3VycmVudCBmdW5jdGlvbi4KKworU2VlIGFsc28gOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OYCwKKzp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUmAgYW5kCis6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FYC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjNzAxMgotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUucnN0CkBAIC0wLDAgKzEsMTIgQEAKK0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKK1doZW4gZXhlY3V0aW5nIGNvZGUgaW5zaWRlIGEgOmNvbW1hbmQ6YGZ1bmN0aW9uYCwgdGhpcyB2YXJpYWJsZQorY29udGFpbnMgdGhlIGxpbmUgbnVtYmVyIGluIHRoZSBsaXN0ZmlsZSB3aGVyZSB0aGUgY3VycmVudCBmdW5jdGlvbgord2FzIGRlZmluZWQuCisKK1NlZSBhbHNvIDp2YXJpYWJsZTpgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTmAsCis6dmFyaWFibGU6YENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJgIGFuZAorOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9DT01QSUxFX0ZFQVRVUkVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVMucnN0CmluZGV4IDVjNTlmOTUuLjhmY2ZiYWUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ1hYX0NPTVBJTEVfRkVBVFVSRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBMaXN0IG9mIGZlYXR1cmVzIGtub3duIHRvIHRoZSBDKysgY29tcGlsZXIKIAogVGhlc2UgZmVhdHVyZXMgYXJlIGtub3duIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGggdGhlIEMrKyBjb21waWxlci4gVGhpcwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DWFhfRVhURU5TSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9FWFRFTlNJT05TLnJzdAppbmRleCA0YTkyNDI1Li5lYThjNGJlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9FWFRFTlNJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9FWFRFTlNJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NYWF9FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBDWFhfRVhURU5TSU9OU2AgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgQ1hYX0VYVEVOU0lPTlNgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9TVEFOREFSRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9TVEFOREFSRC5yc3QKaW5kZXggOGE4YmRmZi4uOGVmOGM4MCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9DWFhfU1RBTkRBUkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX1NUQU5EQVJELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0NYWF9TVEFOREFSRAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YENYWF9TVEFOREFSRGAgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgQ1hYX1NUQU5EQVJEYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0CmluZGV4IDRjNzEwNTguLmY3YjJhZTkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ1hYX1NUQU5EQVJEX1JFUVVJUkVELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBDWFhfU1RBTkRBUkRfUkVRVUlSRURgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YENYWF9TVEFOREFSRF9SRVFVSVJFRGAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19DT01QSUxFX0ZFQVRVUkVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19DT01QSUxFX0ZFQVRVUkVTLnJzdAppbmRleCA4ZDFlY2EwLi4yYjMwNmEzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfQ09NUElMRV9GRUFUVVJFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DX0NPTVBJTEVfRkVBVFVSRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ19DT01QSUxFX0ZFQVRVUkVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIExpc3Qgb2YgZmVhdHVyZXMga25vd24gdG8gdGhlIEMgY29tcGlsZXIKIAogVGhlc2UgZmVhdHVyZXMgYXJlIGtub3duIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGggdGhlIEMgY29tcGlsZXIuIFRoaXMKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19FWFRFTlNJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19FWFRFTlNJT05TLnJzdAppbmRleCBmYTUxMGQ0Li5mY2U4ZmM3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfRVhURU5TSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9DX0VYVEVOU0lPTlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfQ19FWFRFTlNJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgQ19FWFRFTlNJT05TYCBwcm9wZXJ0eSBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBDX0VYVEVOU0lPTlNgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfU1RBTkRBUkQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DX1NUQU5EQVJELnJzdAppbmRleCBiNTVlMDBjLi42NGVmOGNlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfU1RBTkRBUkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19TVEFOREFSRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DX1NUQU5EQVJECiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YENfU1RBTkRBUkRgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YENfU1RBTkRBUkRgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9DX1NUQU5EQVJEX1JFUVVJUkVELnJzdAppbmRleCA3ZjcwZjZlLi5lNzBiNmJkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0NfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9DX1NUQU5EQVJEX1JFUVVJUkVECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YENfU1RBTkRBUkRfUkVRVUlSRURgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YENfU1RBTkRBUkRfUkVRVUlSRURgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkYmYzYQotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFLnJzdApAQCAtMCwwICsxLDE0IEBACitDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKK1NwZWNpZmllcyB0aGUgY29uZmlndXJhdGlvbiB0byB1c2UgYnkgZGVmYXVsdCBpbiBhIGBgYnVpbGQubmluamFgYCBmaWxlIGluIHRoZQorOmdlbmVyYXRvcjpgTmluamEgTXVsdGktQ29uZmlnYCBnZW5lcmF0b3IuIElmIHRoaXMgdmFyaWFibGUgaXMgc3BlY2lmaWVkLAorYGBidWlsZC5uaW5qYWBgIHVzZXMgYnVpbGQgcnVsZXMgZnJvbSBgYGJ1aWxkLTxDb25maWc+Lm5pbmphYGAgYnkgZGVmYXVsdC4gQWxsCitjdXN0b20gY29tbWFuZHMgYXJlIGV4ZWN1dGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLiBJZiB0aGUgdmFyaWFibGUgaXMgbm90CitzcGVjaWZpZWQsIHRoZSBmaXJzdCBpdGVtIGZyb20gOnZhcmlhYmxlOmBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTYCBpcyB1c2VkCitpbnN0ZWFkLgorCitUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBtdXN0IGJlIG9uZSBvZiB0aGUgaXRlbXMgZnJvbQorOnZhcmlhYmxlOmBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTYC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9DT05GSUdTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfREVGQVVMVF9DT05GSUdTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWE1ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9ERUZBVUxUX0NPTkZJR1MucnN0CkBAIC0wLDAgKzEsMjEgQEAKK0NNQUtFX0RFRkFVTFRfQ09ORklHUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworU3BlY2lmaWVzIGEgOnJlZjpgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IDxDTWFrZSBMYW5ndWFnZSBMaXN0cz5gIG9mIGNvbmZpZ3VyYXRpb25zCit0byBidWlsZCBmb3IgYSB0YXJnZXQgaW4gYGBidWlsZC5uaW5qYWBgIGlmIG5vIGBgOjxDb25maWc+YGAgc3VmZml4IGlzIHNwZWNpZmllZCBpbgordGhlIDpnZW5lcmF0b3I6YE5pbmphIE11bHRpLUNvbmZpZ2AgZ2VuZXJhdG9yLiBJZiBpdCBpcyBzZXQgdG8gYGBhbGxgYCwgYWxsCitjb25maWd1cmF0aW9ucyBmcm9tIDp2YXJpYWJsZTpgQ01BS0VfQ1JPU1NfQ09ORklHU2AgYXJlIHVzZWQuIElmIGl0IGlzIG5vdAorc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byA6dmFyaWFibGU6YENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRWAuCisKK0ZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IDp2YXJpYWJsZTpgQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFYCB0byBgYFJlbGVhc2VgYCwKK2J1dCBzZXQgOnZhcmlhYmxlOmBDTUFLRV9ERUZBVUxUX0NPTkZJR1NgIHRvIGBgRGVidWdgYCBvciBgYGFsbGBgLCBhbGwKK2BgPHRhcmdldD5gYCBhbGlhc2VzIGluIGBgYnVpbGQubmluamFgYCB3aWxsIHJlc29sdmUgdG8gYGA8dGFyZ2V0PjpEZWJ1Z2BgIG9yCitgYDx0YXJnZXQ+OmFsbGBgLCBidXQgY3VzdG9tIGNvbW1hbmRzIHdpbGwgc3RpbGwgdXNlIHRoZSBgYFJlbGVhc2VgYAorY29uZmlndXJhdGlvbi4KKworVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgbXVzdCBiZSBhIHN1YnNldCBvZiA6dmFyaWFibGU6YENNQUtFX0NST1NTX0NPTkZJR1NgCitvciBiZSB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRWAuIEl0IG11c3Qgbm90IGJlCitzcGVjaWZpZWQgaWYgOnZhcmlhYmxlOmBDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEVgIG9yCis6dmFyaWFibGU6YENNQUtFX0NST1NTX0NPTkZJR1NgIGlzIG5vdCB1c2VkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9ERVBFTkRTX0lOX1BST0pFQ1RfT05MWS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFUEVORFNfSU5fUFJPSkVDVF9PTkxZLnJzdAppbmRleCA3MTc5MDcxLi5iZmU5NDAyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFUEVORFNfSU5fUFJPSkVDVF9PTkxZLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RFUEVORFNfSU5fUFJPSkVDVF9PTkxZLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0RFUEVORFNfSU5fUFJPSkVDVF9PTkxZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogV2hlbiBzZXQgdG8gYGBUUlVFYGAgaW4gYSBkaXJlY3RvcnksIHRoZSBidWlsZCBzeXN0ZW0gcHJvZHVjZWQgYnkgdGhlCiA6cmVmOmBNYWtlZmlsZSBHZW5lcmF0b3JzYCBpcyBzZXQgdXAgdG8gb25seSBjb25zaWRlciBkZXBlbmRlbmNpZXMgb24gc291cmNlCiBmaWxlcyB0aGF0IGFwcGVhciBlaXRoZXIgaW4gdGhlIHNvdXJjZSBvciBpbiB0aGUgYmluYXJ5IGRpcmVjdG9yaWVzLiAgQ2hhbmdlcwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9ESVJFQ1RPUllfTEFCRUxTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRElSRUNUT1JZX0xBQkVMUy5yc3QKaW5kZXggMmE2YzQxMC4uODFkNmRkMSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9ESVJFQ1RPUllfTEFCRUxTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RJUkVDVE9SWV9MQUJFTFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRElSRUNUT1JZX0xBQkVMUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBTcGVjaWZ5IGxhYmVscyBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogCiBUaGlzIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfZGlyOmBMQUJFTFNgIGRpcmVjdG9yeSBwcm9wZXJ0eS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9ESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKaW5kZXggN2MzMGVkZS4uY2Y1Mjc3NiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9ESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9ESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9ESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YERJU0FCTEVfUFJFQ09NUElMRV9IRUFERVJTYCBvZiB0YXJnZXRzLgogCiBCeSBkZWZhdWx0IGBgQ01BS0VfRElTQUJMRV9QUkVDT01QSUxFX0hFQURFUlNgYCBpcyBgYE9GRmBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTI0OWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSy5yc3QKQEAgLTAsMCArMSwxOCBAQAorQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUksKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBET1RORVRfVEFSR0VUX0ZSQU1FV09SS2AgcHJvcGVydHkJb2YKK3RhcmdldHMuCisKK1RoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZQorOnByb3BfdGd0OmBET1RORVRfVEFSR0VUX0ZSQU1FV09SS2AgcHJvcGVydHkgb24gYWxsIHRhcmdldHMuIFNlZSB0aGF0Cit0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKK1NldHRpbmcgYGBDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS2BgIG1heSBiZSBuZWNlc3NhcnkKK3doZW4gd29ya2luZyB3aXRoIGBgQyNgYCBhbmQgbmV3ZXIgLk5FVCBmcmFtZXdvcmsgdmVyc2lvbnMgdG8KK2F2b2lkIHJlZmVyZW5jaW5nIGVycm9ycyB3aXRoIHRoZSBgYEFMTF9CVUlMRGBgIENNYWtlIHRhcmdldC4KKworVGhpcyB2YXJpYWJsZSBpcyBvbmx5IGV2YWx1YXRlZCBmb3IgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYAorVlMgMjAxMCBhbmQgYWJvdmUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OLnJzdAppbmRleCAxMjRmZWZlLi5mYzNjMzYwIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTi5yc3QKQEAgLTEsMTIgKzEsMTggQEAKIENNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YERPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT05gCiBwcm9wZXJ0eSBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUKIDpwcm9wX3RndDpgRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTmAgcHJvcGVydHkgb24gYWxsCi10YXJnZXRzLiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCit0YXJnZXRzLiBTZWUgdGhhdCB0YXJnZXQgcHJvcGVydHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIFdoZW4gc2V0LAorOnZhcmlhYmxlOmBDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS2AgdGFrZXMgcHJlY2VkbmVjZSBvdmVyIHRoaXMKK3ZhcmlhYmxlLiBTZWUgdGhhdCB2YXJpYWJsZSBvciB0aGUgYXNzb2NpYXRlZCB0YXJnZXQgcHJvcGVydHkKKzpwcm9wX3RndDpgRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorCiAKIFNldHRpbmcgYGBDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OYGAgbWF5IGJlIG5lY2Vzc2FyeQogd2hlbiB3b3JraW5nIHdpdGggYGBDI2BgIGFuZCBuZXdlciAuTkVUIGZyYW1ld29yayB2ZXJzaW9ucyB0bwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX0dFTkVSQVRFX0xJTktFRF9SRVNPVVJDRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX0dFTkVSQVRFX0xJTktFRF9SRVNPVVJDRVMucnN0CmluZGV4IDMzMWFhZTguLjU0OGM1NjMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9HRU5FUkFURV9MSU5LRURfUkVTT1VSQ0VTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfR0VORVJBVEVfTElOS0VEX1JFU09VUkNFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9FQ0xJUFNFX0dFTkVSQVRFX0xJTktFRF9SRVNPVVJDRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogVGhpcyBjYWNoZSB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBFY2xpcHNlIHByb2plY3QgZ2VuZXJhdG9yLiAgU2VlCiA6bWFudWFsOmBjbWFrZS1nZW5lcmF0b3JzKDcpYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX0dFTkVSQVRFX1NPVVJDRV9QUk9KRUNULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9HRU5FUkFURV9TT1VSQ0VfUFJPSkVDVC5yc3QKaW5kZXggN2I0MzY3ZC4uZmMyOGViYiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX0dFTkVSQVRFX1NPVVJDRV9QUk9KRUNULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfR0VORVJBVEVfU09VUkNFX1BST0pFQ1QucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRUNMSVBTRV9HRU5FUkFURV9TT1VSQ0VfUFJPSkVDVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogVGhpcyBjYWNoZSB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBFY2xpcHNlIHByb2plY3QgZ2VuZXJhdG9yLiAgU2VlCiA6bWFudWFsOmBjbWFrZS1nZW5lcmF0b3JzKDcpYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX01BS0VfQVJHVU1FTlRTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9NQUtFX0FSR1VNRU5UUy5yc3QKaW5kZXggNmU4YTQwOC4uOTBlMzZmNSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX01BS0VfQVJHVU1FTlRTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfTUFLRV9BUkdVTUVOVFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRUNMSVBTRV9NQUtFX0FSR1VNRU5UUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogVGhpcyBjYWNoZSB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBFY2xpcHNlIHByb2plY3QgZ2VuZXJhdG9yLiAgU2VlCiA6bWFudWFsOmBjbWFrZS1nZW5lcmF0b3JzKDcpYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX1JFU09VUkNFX0VOQ09ESU5HLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9SRVNPVVJDRV9FTkNPRElORy5yc3QKaW5kZXggMzE0ZWZlNS4uNDkyYWNkOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX1JFU09VUkNFX0VOQ09ESU5HLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfUkVTT1VSQ0VfRU5DT0RJTkcucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRUNMSVBTRV9SRVNPVVJDRV9FTkNPRElORwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFRoaXMgY2FjaGUgdmFyaWFibGUgdGVsbHMgdGhlIDpnZW5lcmF0b3I6YEVjbGlwc2UgQ0RUNGAgcHJvamVjdCBnZW5lcmF0b3IKIHRvIHNldCB0aGUgcmVzb3VyY2UgZW5jb2RpbmcgdG8gdGhlIGdpdmVuIHZhbHVlIGluIGdlbmVyYXRlZCBwcm9qZWN0IGZpbGVzLgogSWYgbm8gdmFsdWUgaXMgZ2l2ZW4sIG5vIGVuY29kaW5nIHdpbGwgYmUgc2V0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX1ZFUlNJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9FQ0xJUFNFX1ZFUlNJT04ucnN0CmluZGV4IDhjYzc4ODIuLmRiNjVkODkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRUNMSVBTRV9WRVJTSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VDTElQU0VfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9FQ0xJUFNFX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogVGhpcyBjYWNoZSB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBFY2xpcHNlIHByb2plY3QgZ2VuZXJhdG9yLiAgU2VlCiA6bWFudWFsOmBjbWFrZS1nZW5lcmF0b3JzKDcpYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FTkFCTEVfRVhQT1JUUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VOQUJMRV9FWFBPUlRTLnJzdAppbmRleCA4ODQ4ZGExLi45ZjQzZGUzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VOQUJMRV9FWFBPUlRTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VOQUJMRV9FWFBPUlRTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0VOQUJMRV9FWFBPUlRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogU3BlY2lmeSB3aGV0aGVyIGV4ZWN1dGFibGVzIGV4cG9ydCBzeW1ib2xzIGZvciBsb2FkYWJsZSBtb2R1bGVzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBFTkFCTEVfRVhQT1JUU2AgdGFyZ2V0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYRUNVVEVfUFJPQ0VTU19DT01NQU5EX0VDSE8ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWEVDVVRFX1BST0NFU1NfQ09NTUFORF9FQ0hPLnJzdAppbmRleCA3NjU2MWQ4Li45MGExNmMzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYRUNVVEVfUFJPQ0VTU19DT01NQU5EX0VDSE8ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhFQ1VURV9QUk9DRVNTX0NPTU1BTkRfRUNITy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9FWEVDVVRFX1BST0NFU1NfQ09NTUFORF9FQ0hPCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gYGBTVERFUlJgYCwgYGBTVERPVVRgYCBvciBgYE5PTkVgYCB0aGVuIGNvbW1hbmRzCiBpbiA6Y29tbWFuZDpgZXhlY3V0ZV9wcm9jZXNzYCBjYWxscyB3aWxsIGJlIHByaW50ZWQgdG8gZWl0aGVyIHN0ZGVyciBvcgogc3Rkb3V0IG9yIG5vdCBhdCBhbGwuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYRV9MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdAppbmRleCA1OTJhMzY5Li40ZDI3MThhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYRV9MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhFX0xJTktFUl9GTEFHU19DT05GSUdfSU5JVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9FWEVfTElOS0VSX0ZMQUdTXzxDT05GSUc+X0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFX0VYRV9MSU5LRVJfRkxBR1NfPENPTkZJRz5gCiBjYWNoZSBlbnRyeSB0aGUgZmlyc3QgdGltZSBhIGJ1aWxkIHRyZWUgaXMgY29uZmlndXJlZC4KIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEgOnZhcmlhYmxlOmB0b29sY2hhaW4gZmlsZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0lOSVQucnN0CmluZGV4IDBiOGFmZTQuLjZlMzkyN2MgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFX0VYRV9MSU5LRVJfRkxBR1NgCiBjYWNoZSBlbnRyeSB0aGUgZmlyc3QgdGltZSBhIGJ1aWxkIHRyZWUgaXMgY29uZmlndXJlZC4KIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEgOnZhcmlhYmxlOmB0b29sY2hhaW4gZmlsZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTLnJzdAppbmRleCA0NTQ4YWJjLi43MjRmMzA5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogRW5hYmxlL0Rpc2FibGUgb3V0cHV0IG9mIGNvbXBpbGUgY29tbWFuZHMgZHVyaW5nIGdlbmVyYXRpb24uCiAKIElmIGVuYWJsZWQsIGdlbmVyYXRlcyBhIGBgY29tcGlsZV9jb21tYW5kcy5qc29uYGAgZmlsZSBjb250YWluaW5nIHRoZSBleGFjdApAQCAtMjUsNiArMjcsOSBAQAogICAgIH0KICAgXQogCitUaGlzIGlzIGluaXRpYWxpemVkIGJ5IHRoZSA6ZW52dmFyOmBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EU2AgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLgorCiAuLiBub3RlOjoKICAgVGhpcyBvcHRpb24gaXMgaW1wbGVtZW50ZWQgb25seSBieSA6cmVmOmBNYWtlZmlsZSBHZW5lcmF0b3JzYAogICBhbmQgdGhlIDpnZW5lcmF0b3I6YE5pbmphYC4gIEl0IGlzIGlnbm9yZWQgb24gb3RoZXIgZ2VuZXJhdG9ycy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhQT1JUX05PX1BBQ0tBR0VfUkVHSVNUUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfTk9fUEFDS0FHRV9SRUdJU1RSWS5yc3QKaW5kZXggNzY4ZWQ2NC4uNTc3MjQ5MCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfTk9fUEFDS0FHRV9SRUdJU1RSWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9FWFBPUlRfTk9fUEFDS0FHRV9SRUdJU1RSWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9FWFBPUlRfTk9fUEFDS0FHRV9SRUdJU1RSWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIERpc2FibGUgdGhlIDpjb21tYW5kOmBleHBvcnQoUEFDS0FHRSlgIGNvbW1hbmQgd2hlbiA6cG9saWN5OmBDTVAwMDkwYAogaXMgbm90IHNldCB0byBgYE5FV2BgLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0VYUE9SVF9QQUNLQUdFX1JFR0lTVFJZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhQT1JUX1BBQ0tBR0VfUkVHSVNUUlkucnN0CmluZGV4IDM0NzZhMTkuLjY2MzYzOWIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhQT1JUX1BBQ0tBR0VfUkVHSVNUUlkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRVhQT1JUX1BBQ0tBR0VfUkVHSVNUUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRVhQT1JUX1BBQ0tBR0VfUkVHSVNUUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogRW5hYmxlcyB0aGUgOmNvbW1hbmQ6YGV4cG9ydChQQUNLQUdFKWAgY29tbWFuZCB3aGVuIDpwb2xpY3k6YENNUDAwOTBgCiBpcyBzZXQgdG8gYGBORVdgYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0FQUEJVTkRMRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfQVBQQlVORExFLnJzdAppbmRleCA3YTA1ZmFjLi4xNzU2M2YzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfQVBQQlVORExFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfQVBQQlVORExFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfQVBQQlVORExFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVGhpcyB2YXJpYWJsZSBhZmZlY3RzIGhvdyBgYGZpbmRfKmBgIGNvbW1hbmRzIGNob29zZSBiZXR3ZWVuCiBtYWNPUyBBcHBsaWNhdGlvbiBCdW5kbGVzIGFuZCB1bml4LXN0eWxlIHBhY2thZ2UgY29tcG9uZW50cy4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0RFQlVHX01PREUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0RFQlVHX01PREUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMmE4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfREVCVUdfTU9ERS5yc3QKQEAgLTAsMCArMSwyNSBAQAorQ01BS0VfRklORF9ERUJVR19NT0RFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitQcmludCBleHRyYSBmaW5kIGNhbGwgaW5mb3JtYXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gc3RhbmRhcmQKK2Vycm9yOgorCisqIDpjb21tYW5kOmBmaW5kX3Byb2dyYW1gCisqIDpjb21tYW5kOmBmaW5kX2xpYnJhcnlgCisqIDpjb21tYW5kOmBmaW5kX2ZpbGVgCisqIDpjb21tYW5kOmBmaW5kX3BhdGhgCisqIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgCisKK091dHB1dCBpcyBkZXNpZ25lZCBmb3IgaHVtYW4gY29uc3VtcHRpb24gYW5kIG5vdCBmb3IgcGFyc2luZy4KK0VuYWJsaW5nIHRoaXMgdmFyaWFibGUgaXMgZXF1aXZhbGVudCB0byB1c2luZyA6bWFudWFsOmBjbWFrZSA8Y21ha2UoMSk+YCBgYC0tZGVidWctZmluZGBgCit3aXRoIHRoZSBhZGRlZCBhYmlsaXR5IHRvIGVuYWJsZSBkZWJ1Z2dpbmcgZm9yIGEgc3Vic2V0IG9mIGZpbmQgY2FsbHMuCisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIHNldChDTUFLRV9GSU5EX0RFQlVHX01PREUgVFJVRSkKKyAgZmluZF9wcm9ncmFtKC4uLikKKyAgc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSBGQUxTRSkKKworRGVmYXVsdCBpcyB1bnNldC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9GUkFNRVdPUksucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0ZSQU1FV09SSy5yc3QKaW5kZXggNGQ1MDc4Zi4uM2I2MmNkYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0ZSQU1FV09SSy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0ZSQU1FV09SSy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX0ZSQU1FV09SSwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoaXMgdmFyaWFibGUgYWZmZWN0cyBob3cgYGBmaW5kXypgYCBjb21tYW5kcyBjaG9vc2UgYmV0d2VlbgogbWFjT1MgRnJhbWV3b3JrcyBhbmQgdW5peC1zdHlsZSBwYWNrYWdlIGNvbXBvbmVudHMuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9MSUJSQVJZX0NVU1RPTV9MSUJfU1VGRklYLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9MSUJSQVJZX0NVU1RPTV9MSUJfU1VGRklYLnJzdAppbmRleCBhZGE4OTU1Li5jYTJhZDdmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfTElCUkFSWV9DVVNUT01fTElCX1NVRkZJWC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX0xJQlJBUllfQ1VTVE9NX0xJQl9TVUZGSVgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRklORF9MSUJSQVJZX0NVU1RPTV9MSUJfU1VGRklYCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFNwZWNpZnkgYSBgYDxzdWZmaXg+YGAgdG8gdGVsbCB0aGUgOmNvbW1hbmQ6YGZpbmRfbGlicmFyeWAgY29tbWFuZCB0bwogc2VhcmNoIGluIGEgYGBsaWI8c3VmZml4PmBgIGRpcmVjdG9yeSBiZWZvcmUgZWFjaCBgYGxpYmBgIGRpcmVjdG9yeSB0aGF0CiB3b3VsZCBub3JtYWxseSBiZSBzZWFyY2hlZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX05BTUUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRS5yc3QKaW5kZXggYmQxYTMwZi4uZmMxZmQ0MyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xLjEKKwogRGVmaW5lZCBieSB0aGUgOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgY29tbWFuZCB3aGlsZSBsb2FkaW5nCiBhIGZpbmQgbW9kdWxlIHRvIHJlY29yZCB0aGUgY2FsbGVyLXNwZWNpZmllZCBwYWNrYWdlIG5hbWUuCiBTZWUgY29tbWFuZCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTk9fUEFDS0FHRV9SRUdJU1RSWS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9OT19QQUNLQUdFX1JFR0lTVFJZLnJzdAppbmRleCA0ZWU5ZDhiLi44ZDg2YTk0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9OT19QQUNLQUdFX1JFR0lTVFJZLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9OT19QQUNLQUdFX1JFR0lTVFJZLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfUEFDS0FHRV9OT19QQUNLQUdFX1JFR0lTVFJZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogLi4gZGVwcmVjYXRlZDo6IDMuMTYKIAogICBVc2UgdGhlIDp2YXJpYWJsZTpgQ01BS0VfRklORF9VU0VfUEFDS0FHRV9SRUdJU1RSWWAgdmFyaWFibGUgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX05PX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX05PX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZLnJzdAppbmRleCAxMDdjMTgzLi5jYzY3ZjA4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9OT19TWVNURU1fUEFDS0FHRV9SRUdJU1RSWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfTk9fU1lTVEVNX1BBQ0tBR0VfUkVHSVNUUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRklORF9QQUNLQUdFX05PX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIC4uIGRlcHJlY2F0ZWQ6OiAzLjE2CiAKICAgVXNlIHRoZSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9QQUNLQUdFX1JFR0lTVFJZYCB2YXJpYWJsZSBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfUFJFRkVSX0NPTkZJRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9QUkVGRVJfQ09ORklHLnJzdAppbmRleCBkYjY1OGExLi5iYTgxNTI5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9QUkVGRVJfQ09ORklHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9QUkVGRVJfQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfUEFDS0FHRV9QUkVGRVJfQ09ORklHCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBUZWxsIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIHRvIHRyeSAiQ29uZmlnIiBtb2RlIGJlZm9yZSAiTW9kdWxlIiBtb2RlIGlmIG5vCiBtb2RlIHdhcyBzcGVjaWZpZWQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1JFU09MVkVfU1lNTElOS1MucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfUkVTT0xWRV9TWU1MSU5LUy5yc3QKaW5kZXggZGZiZGUyMC4uODZkNzVlNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfUkVTT0xWRV9TWU1MSU5LUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfUkVTT0xWRV9TWU1MSU5LUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1BBQ0tBR0VfUkVTT0xWRV9TWU1MSU5LUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBTZXQgdG8gYGBUUlVFYGAgdG8gdGVsbCA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYCBjYWxscyB0byByZXNvbHZlIHN5bWJvbGljCiBsaW5rcyBpbiB0aGUgdmFsdWUgb2YgYGA8UGFja2FnZU5hbWU+X0RJUmBgLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX0RJUkVDVElPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX0RJUkVDVElPTi5yc3QKaW5kZXggOTllNGVjMS4uOThjMmE4ZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1BBQ0tBR0VfU09SVF9ESVJFQ1RJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfRElSRUNUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX0RJUkVDVElPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGUgc29ydGluZyBkaXJlY3Rpb24gdXNlZCBieSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX09SREVSYC4KIEl0IGNhbiBhc3N1bWUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfUEFDS0FHRV9TT1JUX09SREVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfT1JERVIucnN0CmluZGV4IGJhNWYzYTguLjE3MjViYTEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfT1JERVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfT1JERVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRklORF9QQUNLQUdFX1NPUlRfT1JERVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGUgZGVmYXVsdCBvcmRlciBmb3Igc29ydGluZyBwYWNrYWdlcyBmb3VuZCB1c2luZyA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYC4KIEl0IGNhbiBhc3N1bWUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRILnJzdAppbmRleCA5NTdlOTU2Li5kZTFiYWQ3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQ29udHJvbHMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBmb3Igd2hldGhlciBvciBub3QgdG8KIHNlYXJjaCBwYXRocyBwcm92aWRlZCBieSBjbWFrZS1zcGVjaWZpYyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfQ01BS0VfUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEgucnN0CmluZGV4IGQyYmRiMDkuLjQ3Y2UzYTMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfQ01BS0VfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb250cm9scyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciB3aGV0aGVyIG9yIG5vdCB0bwogc2VhcmNoIHBhdGhzIHByb3ZpZGVkIGJ5IGNtYWtlLXNwZWNpZmljIGNhY2hlIHZhcmlhYmxlczoKIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9DTUFLRV9TWVNURU1fUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRILnJzdAppbmRleCBiOTkwODFkLi4yZmQwMGRmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIENvbnRyb2xzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgZm9yIHdoZXRoZXIgb3Igbm90IHRvCiBzZWFyY2ggcGF0aHMgcHJvdmlkZWQgYnkgcGxhdGZvcm0tc3BlY2lmaWMgY21ha2UgdmFyaWFibGVzOgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX1BBQ0tBR0VfUkVHSVNUUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JFR0lTVFJZLnJzdAppbmRleCA3YzdjYTM2Li4zMTI3MjA2IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZJTkRfVVNFX1BBQ0tBR0VfUkVHSVNUUlkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfUEFDS0FHRV9SRUdJU1RSWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JFR0lTVFJZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQ29udHJvbHMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQgZm9yCiB3aGV0aGVyIG9yIG5vdCB0byBzZWFyY2ggcGF0aHMgcHJvdmlkZWQgYnkgdGhlIDpyZWY6YFVzZXIgUGFja2FnZSBSZWdpc3RyeWAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfUEFDS0FHRV9ST09UX1BBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSC5yc3QKaW5kZXggZTdmNWIwZi4uNjRlNWM2ZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb250cm9scyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciB3aGV0aGVyIG9yIG5vdCB0bwogc2VhcmNoIHBhdGhzIHByb3ZpZGVkIGJ5IDp2YXJpYWJsZTpgPFBhY2thZ2VOYW1lPl9ST09UYCB2YXJpYWJsZXM6CiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSC5yc3QKaW5kZXggZmJhYmE1YS4uYTBhODZlNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb250cm9scyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciB3aGV0aGVyIG9yIG5vdCB0bwogc2VhcmNoIHBhdGhzIHByb3ZpZGVkIGJ5IHN0YW5kYXJkIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRklORF9VU0VfU1lTVEVNX1BBQ0tBR0VfUkVHSVNUUlkucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fUEFDS0FHRV9SRUdJU1RSWS5yc3QKaW5kZXggY2I0ZWVjNS4uNTA0YjdlOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fUEFDS0FHRV9SRUdJU1RSWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GSU5EX1VTRV9TWVNURU1fUEFDS0FHRV9SRUdJU1RSWS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GSU5EX1VTRV9TWVNURU1fUEFDS0FHRV9SRUdJU1RSWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDb250cm9scyBzZWFyY2hpbmcgdGhlIDpyZWY6YFN5c3RlbSBQYWNrYWdlIFJlZ2lzdHJ5YCBieSB0aGUKIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRk9MREVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRk9MREVSLnJzdAppbmRleCA1MGEyYjg4Li4zN2YxMzdjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZPTERFUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GT0xERVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfRk9MREVSCiAtLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBTZXQgdGhlIGZvbGRlciBuYW1lLiBVc2UgdG8gb3JnYW5pemUgdGFyZ2V0cyBpbiBhbiBJREUuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YEZPTERFUmAgcHJvcGVydHkgb24gYWxsIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUksucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUksucnN0CmluZGV4IDU5MTA0MWMuLjM3Mzg1YmYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRlJBTUVXT1JLLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZSQU1FV09SSy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9GUkFNRVdPUksKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgRlJBTUVXT1JLYCBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBGUkFNRVdPUktgIHByb3BlcnR5IG9uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0ZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF9DT05GSUcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfQ09ORklHLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2ZiNjZlCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfQ09ORklHLnJzdApAQCAtMCwwICsxLDEwIEBACitDTUFLRV9GUkFNRVdPUktfTVVMVElfQ09ORklHX1BPU1RGSVhfPENPTkZJRz4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE4CisKK0RlZmF1bHQgZnJhbWV3b3JrIGZpbGVuYW1lIHBvc3RmaXggdW5kZXIgY29uZmlndXJhdGlvbiBgYDxDT05GSUc+YGAgd2hlbgordXNpbmcgYSBtdWx0aS1jb25maWcgZ2VuZXJhdG9yLgorCitXaGVuIGEgZnJhbWV3b3JrIHRhcmdldCBpcyBjcmVhdGVkIGl0cyA6cHJvcF90Z3Q6YEZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF88Q09ORklHPmAKK3RhcmdldCBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlmIGl0IGlzIHNldC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfRm9ydHJhbl9QUkVQUk9DRVNTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfRm9ydHJhbl9QUkVQUk9DRVNTLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQwNWYzCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9Gb3J0cmFuX1BSRVBST0NFU1MucnN0CkBAIC0wLDAgKzEsMTAgQEAKK0NNQUtFX0ZvcnRyYW5fUFJFUFJPQ0VTUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBGb3J0cmFuX1BSRVBST0NFU1NgIG9mIHRhcmdldHMuCisKK1RoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YEZvcnRyYW5fUFJFUFJPQ0VTU2AKK3Byb3BlcnR5IG9uIGFsbCB0aGUgdGFyZ2V0cy4gIFNlZSB0aGF0IHRhcmdldCBwcm9wZXJ0eSBmb3IgYWRkaXRpb25hbAoraW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRS5yc3QKaW5kZXggMzY1N2VkNC4uNTg1OGQ3YSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogR2VuZXJhdG9yLXNwZWNpZmljIGluc3RhbmNlIHNwZWNpZmljYXRpb24gcHJvdmlkZWQgYnkgdXNlci4KIAogU29tZSBDTWFrZSBnZW5lcmF0b3JzIHN1cHBvcnQgc2VsZWN0aW9uIG9mIGFuIGluc3RhbmNlIG9mIHRoZSBuYXRpdmUgYnVpbGQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNLnJzdAppbmRleCAyYzExNWEzLi5iMTdkODNhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIEdlbmVyYXRvci1zcGVjaWZpYyB0YXJnZXQgcGxhdGZvcm0gc3BlY2lmaWNhdGlvbiBwcm92aWRlZCBieSB1c2VyLgogCiBTb21lIENNYWtlIGdlbmVyYXRvcnMgc3VwcG9ydCBhIHRhcmdldCBwbGF0Zm9ybSBuYW1lIHRvIGJlIGdpdmVuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dFTkVSQVRPUl9UT09MU0VULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQucnN0CmluZGV4IDIyMjgyNGYuLjUzYWQyZjMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQucnN0CkBAIC01OCwzICs1OCw4IEBACiAgIFNwZWNpZnkgdGhlIHRvb2xzZXQgdmVyc2lvbiB0byB1c2UuICBTdXBwb3J0ZWQgYnkgVlMgMjAxNwogICBhbmQgYWJvdmUgd2l0aCB0aGUgc3BlY2lmaWVkIHRvb2xzZXQgaW5zdGFsbGVkLgogICBTZWUgdGhlIDp2YXJpYWJsZTpgQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WRVJTSU9OYCB2YXJpYWJsZS4KKworYGBWQ1RhcmdldHNQYXRoPTxwYXRoPmBgCisgIFNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgYGBWQ1RhcmdldHNQYXRoYGAgdmFsdWUgZm9yIFZpc3VhbCBTdHVkaW8KKyAgcHJvamVjdCBmaWxlcy4gIFRoaXMgYWxsb3dzIHVzZSBvZiBWUyBwbGF0Zm9ybSBleHRlbnNpb24gY29uZmlndXJhdGlvbgorICBmaWxlcyAoYGAucHJvcHNgYCBhbmQgYGAudGFyZ2V0c2BgKSB0aGF0IGFyZSBub3QgaW5zdGFsbGVkIHdpdGggVlMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRS5yc3QKaW5kZXggYjY3NjhhMS4uMGU4YWU1ZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9HSFNfTk9fU09VUkNFX0dST1VQX0ZJTEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0hTX05PX1NPVVJDRV9HUk9VUF9GSUxFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogYGBPTmBgIC8gYGBPRkZgYCBib29sZWFuIHRvIGNvbnRyb2wgaWYgdGhlIHByb2plY3QgZmlsZSBmb3IgYSB0YXJnZXQgc2hvdWxkCiBiZSBvbmUgc2luZ2xlIGZpbGUgb3IgbXVsdGlwbGUgZmlsZXMuICBSZWZlciB0bwogOnByb3BfdGd0OmBHSFNfTk9fU09VUkNFX0dST1VQX0ZJTEVgIGZvciBmdXJ0aGVyIGRldGFpbHMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVC5yc3QKaW5kZXggZTgyODY3ZC4uOTZlOTkwNyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VULnJzdApAQCAtMSw5ICsxLDExIEBACiBDTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIFN3aXRjaCB0byBlbmFibGUgZ2VuZXJhdGlvbiBvZiBhIGdsb2JhbCBgYGF1dG9nZW5gYCB0YXJnZXQuCiAKLVdoZW4gOnZhcmlhYmxlOmBDTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVRgIGlzIGVuYWJsZWQsIGEgY3VzdG9tIHRhcmdldAorV2hlbiA6dmFyaWFibGU6YENNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVGAgaXMgZW5hYmxlZCwgYSBjdXN0b20gdGFyZ2V0CiBgYGF1dG9nZW5gYCBpcyBnZW5lcmF0ZWQuICBUaGlzIHRhcmdldCBkZXBlbmRzIG9uIGFsbCA6cHJvcF90Z3Q6YEFVVE9NT0NgIGFuZAogOnByb3BfdGd0OmBBVVRPVUlDYCBnZW5lcmF0ZWQgYGA8T1JJR0lOPl9hdXRvZ2VuYGAgdGFyZ2V0cyBpbiB0aGUgcHJvamVjdC4KIEJ5IGJ1aWxkaW5nIHRoZSBnbG9iYWwgYGBhdXRvZ2VuYGAgdGFyZ2V0LCBhbGwgOnByb3BfdGd0OmBBVVRPTU9DYCBhbmQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUX05BTUUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVRfTkFNRS5yc3QKaW5kZXggYzg2YTVkMC4uNGFmNGJjMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVRfTkFNRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVRfTkFNRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVRfTkFNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBDaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIGdsb2JhbCBgYGF1dG9nZW5gYCB0YXJnZXQuCiAKIFdoZW4gOnZhcmlhYmxlOmBDTUFLRV9HTE9CQUxfQVVUT0dFTl9UQVJHRVRgIGlzIGVuYWJsZWQsIGEgZ2xvYmFsIGN1c3RvbSB0YXJnZXQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VULnJzdAppbmRleCBmOTIxMjhjLi5lZmVhNWJlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0dMT0JBTF9BVVRPUkNDX1RBUkdFVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBTd2l0Y2ggdG8gZW5hYmxlIGdlbmVyYXRpb24gb2YgYSBnbG9iYWwgYGBhdXRvcmNjYGAgdGFyZ2V0LgogCiBXaGVuIDp2YXJpYWJsZTpgQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUYCBpcyBlbmFibGVkLCBhIGN1c3RvbSB0YXJnZXQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUX05BTUUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVRfTkFNRS5yc3QKaW5kZXggYzZlMDVkZS4uNGQyZTMxMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVRfTkFNRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVRfTkFNRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVRfTkFNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBDaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIGdsb2JhbCBgYGF1dG9yY2NgYCB0YXJnZXQuCiAKIFdoZW4gOnZhcmlhYmxlOmBDTUFLRV9HTE9CQUxfQVVUT1JDQ19UQVJHRVRgIGlzIGVuYWJsZWQsIGEgZ2xvYmFsIGN1c3RvbSB0YXJnZXQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSE9TVF9TT0xBUklTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSE9TVF9TT0xBUklTLnJzdAppbmRleCA4MmI1ZDY5Li43MDU0YWNkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0hPU1RfU09MQVJJUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9IT1NUX1NPTEFSSVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfSE9TVF9TT0xBUklTCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIGBgVHJ1ZWBgIGZvciBPcmFjbGUgU29sYXJpcyBvcGVyYXRpbmcgc3lzdGVtcy4KIAogU2V0IHRvIGBgdHJ1ZWBgIHdoZW4gdGhlIGhvc3Qgc3lzdGVtIGlzIE9yYWNsZSBTb2xhcmlzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9IT1NUX1NZU1RFTV9QUk9DRVNTT1IucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9IT1NUX1NZU1RFTV9QUk9DRVNTT1IucnN0CmluZGV4IGJhOGE4NTAuLjVmMDg3MjggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSE9TVF9TWVNURU1fUFJPQ0VTU09SLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0hPU1RfU1lTVEVNX1BST0NFU1NPUi5yc3QKQEAgLTMsNiArMywxMyBAQAogCiBUaGUgbmFtZSBvZiB0aGUgQ1BVIENNYWtlIGlzIHJ1bm5pbmcgb24uCiAKLU9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGBgdW5hbWVgYCwgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIG91dHB1dCBvZgotYGB1bmFtZSAtcGBgLiAgT24gV2luZG93cyBpdCBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotYGBQUk9DRVNTT1JfQVJDSElURUNUVVJFYGAuCitPbiBXaW5kb3dzLCB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCitgYFBST0NFU1NPUl9BUkNISVRFQ1RVUkVgYC4gT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgYGB1bmFtZWBgLCB0aGlzIHZhcmlhYmxlIGlzCitzZXQgdG8gdGhlIG91dHB1dCBvZjoKKworLSBgYHVuYW1lIC1tYGAgb24gR05VLCBMaW51eCwgQ3lnd2luLCBEYXJ3aW4sIEFuZHJvaWQsIG9yCistIGBgYXJjaGBgIG9uIE9wZW5CU0QsIG9yCistIG9uIG90aGVyIHN5c3RlbXMsCisKKyAgKiBgYHVuYW1lIC1wYGAgaWYgaXRzIGV4aXQgY29kZSBpcyBub256ZXJvLCBvcgorICAqIGBgdW5hbWUgLW1gYCBvdGhlcndpc2UuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TLnJzdAppbmRleCBmOTk0ZmJlLi5hYWQ5OWU0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogRGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgZGlyZWN0b3JpZXMgY3JlYXRlZCBpbXBsaWNpdGx5IGR1cmluZyBpbnN0YWxsYXRpb24KIG9mIGZpbGVzIGJ5IDpjb21tYW5kOmBpbnN0YWxsYCBhbmQgOmNvbW1hbmQ6YGZpbGUoSU5TVEFMTClgLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfTUVTU0FHRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfTUVTU0FHRS5yc3QKaW5kZXggMzA0ZGYyNi4uNGYzOWNmZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX01FU1NBR0UucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9NRVNTQUdFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0lOU1RBTExfTUVTU0FHRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHZlcmJvc2l0eSBvZiBpbnN0YWxsYXRpb24gc2NyaXB0IGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZQogOmNvbW1hbmQ6YGluc3RhbGxgIGNvbW1hbmQgKHVzaW5nIHRoZSA6Y29tbWFuZDpgZmlsZShJTlNUQUxMKWAgY29tbWFuZCkuCiBGb3IgcGF0aHMgdGhhdCBhcmUgbmV3bHkgaW5zdGFsbGVkIG9yIHVwZGF0ZWQsIGluc3RhbGxhdGlvbgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX1BSRUZJWF9JTklUSUFMSVpFRF9UT19ERUZBVUxULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9QUkVGSVhfSU5JVElBTElaRURfVE9fREVGQVVMVC5yc3QKaW5kZXggMmE1ODQyZC4uOTNjYzMxOSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX1BSRUZJWF9JTklUSUFMSVpFRF9UT19ERUZBVUxULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUFJFRklYX0lOSVRJQUxJWkVEX1RPX0RFRkFVTFQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfSU5TVEFMTF9QUkVGSVhfSU5JVElBTElaRURfVE9fREVGQVVMVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcuMQorCiBDTWFrZSBzZXRzIHRoaXMgdmFyaWFibGUgdG8gYSBgYFRSVUVgYCB2YWx1ZSB3aGVuIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1BSRUZJWGAgaGFzIGp1c3QgYmVlbiBpbml0aWFsaXplZCB0bwogaXRzIGRlZmF1bHQgdmFsdWUsIHR5cGljYWxseSBvbiB0aGUgZmlyc3QgcnVuIG9mIENNYWtlIHdpdGhpbgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX1JFTU9WRV9FTlZJUk9OTUVOVF9SUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRILnJzdAppbmRleCA3NmNhM2RhLi5jODZlNDMzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0lOU1RBTExfUkVNT1ZFX0VOVklST05NRU5UX1JQQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFNldHMgdGhlIGRlZmF1bHQgZm9yIHdoZXRoZXIgdG9vbGNoYWluLWRlZmluZWQgcnBhdGhzIHNob3VsZCBiZSByZW1vdmVkIGR1cmluZwogaW5zdGFsbGF0aW9uLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSC5yc3QKaW5kZXggNzgxNDhkNS4uMzQ1MjRkMSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX1JQQVRIX1VTRV9MSU5LX1BBVEgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRILnJzdApAQCAtMyw3ICszLDExIEBACiAKIEFkZCBwYXRocyB0byBsaW5rZXIgc2VhcmNoIGFuZCBpbnN0YWxsZWQgcnBhdGguCiAKLWBgQ01BS0VfSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIYGAgaXMgYSBib29sZWFuIHRoYXQgaWYgc2V0IHRvIGBgdHJ1ZWBgCi13aWxsIGFwcGVuZCBkaXJlY3RvcmllcyBpbiB0aGUgbGlua2VyIHNlYXJjaCBwYXRoIGFuZCBvdXRzaWRlIHRoZQotcHJvamVjdCB0byB0aGUgOnByb3BfdGd0OmBJTlNUQUxMX1JQQVRIYC4gIFRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZQotdGFyZ2V0IHByb3BlcnR5IDpwcm9wX3RndDpgSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIYCBmb3IgYWxsIHRhcmdldHMuCitgYENNQUtFX0lOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSGBgIGlzIGEgYm9vbGVhbiB0aGF0IGlmIHNldCB0byBgYFRydWVgYAord2lsbCBhcHBlbmQgdG8gdGhlIHJ1bnRpbWUgc2VhcmNoIHBhdGggKHJwYXRoKSBvZiBpbnN0YWxsZWQgYmluYXJpZXMKK2FueSBkaXJlY3RvcmllcyBvdXRzaWRlIHRoZSBwcm9qZWN0IHRoYXQgYXJlIGluIHRoZSBsaW5rZXIgc2VhcmNoIHBhdGggb3IKK2NvbnRhaW4gbGlua2VkIGxpYnJhcnkgZmlsZXMuICBUaGUgZGlyZWN0b3JpZXMgYXJlIGFwcGVuZGVkIGFmdGVyIHRoZQordmFsdWUgb2YgdGhlIDpwcm9wX3RndDpgSU5TVEFMTF9SUEFUSGAgdGFyZ2V0IHByb3BlcnR5LgorCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdGFyZ2V0IHByb3BlcnR5Cis6cHJvcF90Z3Q6YElOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSGAgZm9yIGFsbCB0YXJnZXRzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTi5yc3QKaW5kZXggYjBjYmI2Mi4uY2Y3ZGE3NiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBJTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OYCBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBJTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OX0NPTkZJRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fQ09ORklHLnJzdAppbmRleCBiMjkxMTAyLi41YjNlZTc3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fQ09ORklHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0lOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fQ09ORklHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0lOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fPENPTkZJRz4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTl88Q09ORklHPmAgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTl88Q09ORklHPmAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSU9TX0lOU1RBTExfQ09NQklORUQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9JT1NfSU5TVEFMTF9DT01CSU5FRC5yc3QKaW5kZXggYzVjYjliNi4uY2Q3ZmQ4ZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9JT1NfSU5TVEFMTF9DT01CSU5FRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9JT1NfSU5TVEFMTF9DT01CSU5FRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9JT1NfSU5TVEFMTF9DT01CSU5FRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgSU9TX0lOU1RBTExfQ09NQklORURgIG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YElPU19JTlNUQUxMX0NPTUJJTkVEYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTFMucnN0CmluZGV4IDcyYjUwYjQuLjQzZDNjODQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfSk9CX1BPT0xTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0pPQl9QT09MUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9KT0JfUE9PTFMKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIElmIHRoZSA6cHJvcF9nYmw6YEpPQl9QT09MU2AgZ2xvYmFsIHByb3BlcnR5IGlzIG5vdCBzZXQsIHRoZSB2YWx1ZQogb2YgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIGl0cyBwbGFjZS4gIFNlZSA6cHJvcF9nYmw6YEpPQl9QT09MU2AKIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0pPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTZmNjZhCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUi5yc3QKQEAgLTAsMCArMSw4IEBACitDTUFLRV9KT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUmAKK3Byb3BlcnR5IG9uIGFsbCB0aGUgdGFyZ2V0cy4gU2VlIDpwcm9wX3RndDpgSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVJgCitmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FLnJzdAppbmRleCBkMzM2MzY0Li5mNTM5Mjc3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNy4xCisKIFdoZW4gOnJlZjpgQ3Jvc3MgQ29tcGlsaW5nIGZvciBBbmRyb2lkYCB0aGlzIHZhcmlhYmxlIGNvbnRhaW5zIHRoZQogdG9vbGNoYWluIGJpbnV0aWxzIG1hY2hpbmUgbmFtZSAoZS5nLiBgYGdjYyAtZHVtcG1hY2hpbmVgYCkuICBUaGUKIGJpbnV0aWxzIHR5cGljYWxseSBoYXZlIGEgYGA8bWFjaGluZT4tYGAgcHJlZml4IG9uIHRoZWlyIG5hbWUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQU5EUk9JRF9UT09MQ0hBSU5fUFJFRklYLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9QUkVGSVgucnN0CmluZGV4IGRiMDRhZjMuLmZmMDcyY2EgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9QUkVGSVgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9QUkVGSVgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0FORFJPSURfVE9PTENIQUlOX1BSRUZJWAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWRgIHRoaXMgdmFyaWFibGUgY29udGFpbnMgdGhlIGFic29sdXRlCiBwYXRoIHByZWZpeGluZyB0aGUgdG9vbGNoYWluIEdOVSBjb21waWxlciBhbmQgaXRzIGJpbnV0aWxzLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQU5EUk9JRF9UT09MQ0hBSU5fU1VGRklYLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9TVUZGSVgucnN0CmluZGV4IDE1OWViMjIuLmQ1OTUyODAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9TVUZGSVgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19BTkRST0lEX1RPT0xDSEFJTl9TVUZGSVgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0FORFJPSURfVE9PTENIQUlOX1NVRkZJWAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogV2hlbiA6cmVmOmBDcm9zcyBDb21waWxpbmcgZm9yIEFuZHJvaWRgIHRoaXMgdmFyaWFibGUgY29udGFpbnMgdGhlCiBob3N0IHBsYXRmb3JtIHN1ZmZpeCBvZiB0aGUgdG9vbGNoYWluIEdOVSBjb21waWxlciBhbmQgaXRzIGJpbnV0aWxzLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ0xBTkdfVElEWS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ0xBTkdfVElEWS5yc3QKaW5kZXggYmQ0OWRlMy4uNzhmMGY2YSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NMQU5HX1RJRFkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DTEFOR19USURZLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9DTEFOR19USURZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmA8TEFORz5fQ0xBTkdfVElEWWAgdGFyZ2V0IHByb3BlcnR5CiB3aGVuIGBgPExBTkc+YGAgaXMgYGBDYGAgb3IgYGBDWFhgYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUi5yc3QKaW5kZXggODlkZjQ5NS4uZTY5NGIzMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVIucnN0CkBAIC01LDMgKzUsMjggQEAKIAogVGhpcyBpcyB0aGUgY29tbWFuZCB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgYGA8TEFORz5gYCBjb21waWxlci4gIE9uY2UKIHNldCwgeW91IGNhbiBub3QgY2hhbmdlIHRoaXMgdmFyaWFibGUuCisKK1VzYWdlCiteXl5eXgorCitUaGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQgYnkgdGhlIHVzZXIgZHVyaW5nIHRoZSBmaXJzdCB0aW1lIGEgYnVpbGQgdHJlZSBpcyBjb25maWd1cmVkLgorCitJZiBhIG5vbi1mdWxsIHBhdGggdmFsdWUgaXMgc3VwcGxpZWQgdGhlbiBDTWFrZSB3aWxsIHJlc29sdmUgdGhlIGZ1bGwgcGF0aCBvZgordGhlIGNvbXBpbGVyLgorCitUaGUgdmFyaWFibGUgY291bGQgYmUgc2V0IGluIGEgdXNlciBzdXBwbGllZCB0b29sY2hhaW4gZmlsZSBvciB2aWEgYC1EYCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisuLiBub3RlOjoKKyAgT3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCB0byBtYWtlIHRoZSBjb21waWxlciB3b3JrIGNvcnJlY3RseSBjYW4gYmUgaW5jbHVkZWQKKyAgYXMgaXRlbXMgaW4gYSBsaXN0OyB0aGV5IGNhbiBub3QgYmUgY2hhbmdlZC4KKworLi4gY29kZS1ibG9jazo6IGNtYWtlCisKKyAgI3NldCB3aXRoaW4gdXNlciBzdXBwbGllZCB0b29sY2hhaW4gZmlsZQorICBzZXQoQ01BS0VfQ19DT01QSUxFUiAvZnVsbC9wYXRoL3RvL3FjYyAtLWFyZzEgLS1hcmcyKQorCitvcgorCisuLiBjb2RlLWJsb2NrOjogY29uc29sZQorCisgICQgY21ha2UgLi4uIC1EQ01BS0VfQ19DT01QSUxFUj0ncWNjOy0tYXJnMTstLWFyZzInCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfQVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX0FSLnJzdAppbmRleCBiODNhMWQ0Li43NGYyNzU4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfQVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9BUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV88TEFORz5fQ09NUElMRVJfQVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogQSB3cmFwcGVyIGFyb3VuZCBgYGFyYGAgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSBgYC0tcGx1Z2luYGAgb3B0aW9uIGZvciB0aGUKIGNvbXBpbGVyLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfQVJDSElURUNUVVJFX0lELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQucnN0CmluZGV4IDA1NGM2NDguLjgwNTc1NjYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIEFuIGludGVybmFsIHZhcmlhYmxlIHN1YmplY3QgdG8gY2hhbmdlLgogCiBUaGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHZhcmlhbnQgb2YgYSBjb21waWxlciBiYXNlZCBvbiBpdHMgdGFyZ2V0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfTEFVTkNIRVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX0xBVU5DSEVSLnJzdAppbmRleCA2YjdlMzVhLi45ODYzNGMyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfTEFVTkNIRVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9MQVVOQ0hFUi5yc3QKQEAgLTEsNyArMSwxMiBAQAogQ01BS0VfPExBTkc+X0NPTVBJTEVSX0xBVU5DSEVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgPExBTkc+X0NPTVBJTEVSX0xBVU5DSEVSYCB0YXJnZXQgcHJvcGVydHkuCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb24gZWFjaCB0YXJnZXQgYXMgaXQgaXMKIGNyZWF0ZWQuICBUaGlzIGlzIGRvbmUgb25seSB3aGVuIGBgPExBTkc+YGAgaXMgYGBDYGAsIGBgQ1hYYGAsIGBgRm9ydHJhbmBgLAogYGBPQkpDYGAsIGBgT0JKQ1hYYGAsIG9yIGBgQ1VEQWBgLgorCitUaGlzIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIHRoZSA6ZW52dmFyOmBDTUFLRV88TEFORz5fQ09NUElMRVJfTEFVTkNIRVJgCitlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBpdCBpcyBzZXQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfUFJFREVGSU5FU19DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9QUkVERUZJTkVTX0NPTU1BTkQucnN0CmluZGV4IGUwNTBmNDMuLjkzNTMyOWEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9QUkVERUZJTkVTX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9QUkVERUZJTkVTX0NPTU1BTkQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0NPTVBJTEVSX1BSRURFRklORVNfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIENvbW1hbmQgdGhhdCBvdXRwdXRzIHRoZSBjb21waWxlciBwcmUgZGVmaW5pdGlvbnMuCiAKIFNlZSA6cHJvcF90Z3Q6YEFVVE9NT0NgIHdoaWNoIHVzZXMKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9SQU5MSUIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX1JBTkxJQi5yc3QKaW5kZXggOTQ1MTYwYi4uMWQxMGI1NSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX1JBTkxJQi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX1JBTkxJQi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV88TEFORz5fQ09NUElMRVJfUkFOTElCCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOQorCiBBIHdyYXBwZXIgYXJvdW5kIGBgcmFubGliYGAgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSBgYC0tcGx1Z2luYGAgb3B0aW9uIGZvciB0aGUKIGNvbXBpbGVyLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfVkVSU0lPTl9JTlRFUk5BTC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ09NUElMRVJfVkVSU0lPTl9JTlRFUk5BTC5yc3QKaW5kZXggYzNjZDk4MC4uNTk2YTk4OSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NPTVBJTEVSX1ZFUlNJT05fSU5URVJOQUwucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DT01QSUxFUl9WRVJTSU9OX0lOVEVSTkFMLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9DT01QSUxFUl9WRVJTSU9OX0lOVEVSTkFMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEwCisKIEFuIGludGVybmFsIHZhcmlhYmxlIHN1YmplY3QgdG8gY2hhbmdlLgogCiBUaGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHZhcmlhbnQgb2YgYSBjb21waWxlciBiYXNlZCBvbiBhbiBpbnRlcm5hbApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NQUENIRUNLLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DUFBDSEVDSy5yc3QKaW5kZXggNTBiNDc4Zi4uNWFlNWZhZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NQUENIRUNLLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ1BQQ0hFQ0sucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0NQUENIRUNLCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YDxMQU5HPl9DUFBDSEVDS2AgdGFyZ2V0IHByb3BlcnR5LiBUaGlzIHZhcmlhYmxlCiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uIGVhY2ggdGFyZ2V0IGFzIGl0IGlzIGNyZWF0ZWQuICBUaGlzCiBpcyBkb25lIG9ubHkgd2hlbiBgYDxMQU5HPmBgIGlzIGBgQ2BgIG9yIGBgQ1hYYGAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ1BQTElOVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfQ1BQTElOVC5yc3QKaW5kZXggM2I2ZjQ1Mi4uYWI3YjBmYyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0NQUExJTlQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19DUFBMSU5ULnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9DUFBMSU5UCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmA8TEFORz5fQ1BQTElOVGAgdGFyZ2V0IHByb3BlcnR5LiBUaGlzIHZhcmlhYmxlCiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHByb3BlcnR5IG9uIGVhY2ggdGFyZ2V0IGFzIGl0IGlzIGNyZWF0ZWQuICBUaGlzCiBpcyBkb25lIG9ubHkgd2hlbiBgYDxMQU5HPmBgIGlzIGBgQ2BgIG9yIGBgQ1hYYGAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfQ09ORklHLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19DT05GSUcucnN0CmluZGV4IDFkYmQwMzYuLjYyOGI2MmIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19DT05GSUcucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19DT05GSUcucnN0CkBAIC0xLDQgKzEsNiBAQAogQ01BS0VfPExBTkc+X0ZMQUdTXzxDT05GSUc+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBGbGFncyBmb3IgbGFuZ3VhZ2UgYGA8TEFORz5gYCB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYGA8Q09ORklHPmBgIGNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfQ09ORklHX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX0NPTkZJR19JTklULnJzdAppbmRleCAxZWI1YjNmLi4xNzY2OWEyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfQ09ORklHX0lOSVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19DT05GSUdfSU5JVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV88TEFORz5fRkxBR1NfPENPTkZJRz5fSU5JVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBWYWx1ZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDp2YXJpYWJsZTpgQ01BS0VfPExBTkc+X0ZMQUdTXzxDT05GSUc+YCBjYWNoZQogZW50cnkgdGhlIGZpcnN0IHRpbWUgYSBidWlsZCB0cmVlIGlzIGNvbmZpZ3VyZWQgZm9yIGxhbmd1YWdlIGBgPExBTkc+YGAuCiBUaGlzIHZhcmlhYmxlIGlzIG1lYW50IHRvIGJlIHNldCBieSBhIDp2YXJpYWJsZTpgdG9vbGNoYWluIGZpbGUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19ERUJVR19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19ERUJVR19JTklULnJzdAppbmRleCBkZTdmY2ZjLi40OWM5ZTk5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfREVCVUdfSU5JVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX0RFQlVHX0lOSVQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfPExBTkc+X0ZMQUdTX0RFQlVHX0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGlzIHZhcmlhYmxlIGlzIHRoZSBgYERlYnVnYGAgdmFyaWFudCBvZiB0aGUKIDp2YXJpYWJsZTpgQ01BS0VfPExBTkc+X0ZMQUdTXzxDT05GSUc+X0lOSVRgIHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX0lOSVQucnN0CmluZGV4IGE4OGQxMjIuLjY3ZmYyY2IgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfSU5JVC5yc3QKQEAgLTEsMTEgKzEsMTcgQEAKIENNQUtFXzxMQU5HPl9GTEFHU19JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9GTEFHU2AgY2FjaGUgZW50cnkKIHRoZSBmaXJzdCB0aW1lIGEgYnVpbGQgdHJlZSBpcyBjb25maWd1cmVkIGZvciBsYW5ndWFnZSBgYDxMQU5HPmBgLgogVGhpcyB2YXJpYWJsZSBpcyBtZWFudCB0byBiZSBzZXQgYnkgYSA6dmFyaWFibGU6YHRvb2xjaGFpbiBmaWxlCiA8Q01BS0VfVE9PTENIQUlOX0ZJTEU+YC4gIENNYWtlIG1heSBwcmVwZW5kIG9yIGFwcGVuZCBjb250ZW50IHRvCi10aGUgdmFsdWUgYmFzZWQgb24gdGhlIGVudmlyb25tZW50IGFuZCB0YXJnZXQgcGxhdGZvcm0uCit0aGUgdmFsdWUgYmFzZWQgb24gdGhlIGVudmlyb25tZW50IGFuZCB0YXJnZXQgcGxhdGZvcm0uICBGb3IgZXhhbXBsZSwKK3RoZSBjb250ZW50cyBvZiBhIGBgeHh4RkxBR1NgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIHByZXBlbmRlZCwKK3doZXJlIGBgeHh4YGAgd2lsbCBiZSBsYW5ndWFnZS1zcGVjaWZpYyBidXQgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzCitgYDxMQU5HPmBgIChlLmcuIDplbnZ2YXI6YENYWEZMQUdTYCBmb3IgYGBDWFhgYCwgOmVudnZhcjpgRkZMQUdTYCBmb3IKK2BgRm9ydHJhbmBgLCBhbmQgc28gb24pLgogCiBTZWUgYWxzbyB0aGUgY29uZmlndXJhdGlvbi1zcGVjaWZpYwogOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fRkxBR1NfPENPTkZJRz5fSU5JVGAgdmFyaWFibGUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfTUlOU0laRVJFTF9JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19NSU5TSVpFUkVMX0lOSVQucnN0CmluZGV4IDFlNzAwM2MuLjM2MDA5MDkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19NSU5TSVpFUkVMX0lOSVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19NSU5TSVpFUkVMX0lOSVQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfPExBTkc+X0ZMQUdTX01JTlNJWkVSRUxfSU5JVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVGhpcyB2YXJpYWJsZSBpcyB0aGUgYGBNaW5TaXplUmVsYGAgdmFyaWFudCBvZiB0aGUKIDp2YXJpYWJsZTpgQ01BS0VfPExBTkc+X0ZMQUdTXzxDT05GSUc+X0lOSVRgIHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX1JFTEVBU0VfSU5JVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfUkVMRUFTRV9JTklULnJzdAppbmRleCBlN2M3M2ZlLi5lODg5ODUyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfUkVMRUFTRV9JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfUkVMRUFTRV9JTklULnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFXzxMQU5HPl9GTEFHU19SRUxFQVNFX0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFRoaXMgdmFyaWFibGUgaXMgdGhlIGBgUmVsZWFzZWBgIHZhcmlhbnQgb2YgdGhlCiA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9GTEFHU188Q09ORklHPl9JTklUYCB2YXJpYWJsZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19SRUxXSVRIREVCSU5GT19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19GTEFHU19SRUxXSVRIREVCSU5GT19JTklULnJzdAppbmRleCAzYWIzOTc1Li5iNDJjYWVlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfRkxBR1NfUkVMV0lUSERFQklORk9fSU5JVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0ZMQUdTX1JFTFdJVEhERUJJTkZPX0lOSVQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ01BS0VfPExBTkc+X0ZMQUdTX1JFTFdJVEhERUJJTkZPX0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBUaGlzIHZhcmlhYmxlIGlzIHRoZSBgYFJlbFdpdGhEZWJJbmZvYGAgdmFyaWFudCBvZiB0aGUKIDp2YXJpYWJsZTpgQ01BS0VfPExBTkc+X0ZMQUdTXzxDT05GSUc+X0lOSVRgIHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0lOQ0xVREVfV0hBVF9ZT1VfVVNFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19JTkNMVURFX1dIQVRfWU9VX1VTRS5yc3QKaW5kZXggMmM4MDI4YS4uYmU2YzIxMCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0lOQ0xVREVfV0hBVF9ZT1VfVVNFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfSU5DTFVERV9XSEFUX1lPVV9VU0UucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0lOQ0xVREVfV0hBVF9ZT1VfVVNFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgPExBTkc+X0lOQ0xVREVfV0hBVF9ZT1VfVVNFYCB0YXJnZXQgcHJvcGVydHkuCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvcGVydHkgb24gZWFjaCB0YXJnZXQgYXMgaXQgaXMKIGNyZWF0ZWQuICBUaGlzIGlzIGRvbmUgb25seSB3aGVuIGBgPExBTkc+YGAgaXMgYGBDYGAgb3IgYGBDWFhgYC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LRVJfV1JBUFBFUl9GTEFHLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LRVJfV1JBUFBFUl9GTEFHLnJzdAppbmRleCBkZjUxNDA3Li40NzFjMzUxIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS0VSX1dSQVBQRVJfRkxBRy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktFUl9XUkFQUEVSX0ZMQUcucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0xJTktFUl9XUkFQUEVSX0ZMQUcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogRGVmaW5lcyB0aGUgc3ludGF4IG9mIGNvbXBpbGVyIGRyaXZlciBvcHRpb24gdG8gcGFzcyBvcHRpb25zIHRvIHRoZSBsaW5rZXIKIHRvb2wuIEl0IHdpbGwgYmUgdXNlZCB0byB0cmFuc2xhdGUgdGhlIGBgTElOS0VSOmBgIHByZWZpeCBpbiB0aGUgbGluayBvcHRpb25zCiAoc2VlIDpjb21tYW5kOmBhZGRfbGlua19vcHRpb25zYCBhbmQgOmNvbW1hbmQ6YHRhcmdldF9saW5rX29wdGlvbnNgKS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LRVJfV1JBUFBFUl9GTEFHX1NFUC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS0VSX1dSQVBQRVJfRkxBR19TRVAucnN0CmluZGV4IGZhZjE0ODEuLmEzODk1YWYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LRVJfV1JBUFBFUl9GTEFHX1NFUC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktFUl9XUkFQUEVSX0ZMQUdfU0VQLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9MSU5LRVJfV1JBUFBFUl9GTEFHX1NFUAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdpdGggOnZhcmlhYmxlOmBDTUFLRV88TEFORz5fTElOS0VSX1dSQVBQRVJfRkxBR2AKIHZhcmlhYmxlIHRvIGZvcm1hdCBgYExJTktFUjpgYCBwcmVmaXggaW4gdGhlIGxpbmsgb3B0aW9ucwogKHNlZSA6Y29tbWFuZDpgYWRkX2xpbmtfb3B0aW9uc2AgYW5kIDpjb21tYW5kOmB0YXJnZXRfbGlua19vcHRpb25zYCkuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS19MSUJSQVJZX0ZJTEVfRkxBRy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS19MSUJSQVJZX0ZJTEVfRkxBRy5yc3QKaW5kZXggZDU0ZjA4MC4uMjNlY2U4OCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktfTElCUkFSWV9GSUxFX0ZMQUcucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LX0xJQlJBUllfRklMRV9GTEFHLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9MSU5LX0xJQlJBUllfRklMRV9GTEFHCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIExhbmd1YWdlLXNwZWNpZmljIGZsYWcgdG8gYmUgdXNlZCB0byBsaW5rIGEgbGlicmFyeSBzcGVjaWZpZWQgYnkKIGEgcGF0aCB0byBpdHMgZmlsZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktfTElCUkFSWV9GTEFHLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LX0xJQlJBUllfRkxBRy5yc3QKaW5kZXggZDdiYjBkOC4uMGY1MjhkYiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktfTElCUkFSWV9GTEFHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS19MSUJSQVJZX0ZMQUcucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X0xJTktfTElCUkFSWV9GTEFHCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBGbGFnIHRvIGJlIHVzZWQgdG8gbGluayBhIGxpYnJhcnkgaW50byBhIHNoYXJlZCBsaWJyYXJ5IG9yIGV4ZWN1dGFibGUuCiAKIFRoaXMgZmxhZyB3aWxsIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxpYnJhcnkgdG8gbGluayB0byBhIHNoYXJlZCBsaWJyYXJ5IG9yIGFuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS19MSUJSQVJZX1NVRkZJWC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfTElOS19MSUJSQVJZX1NVRkZJWC5yc3QKaW5kZXggYTM3ODY1Ny4uMzU5ZTI5ZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX0xJTktfTElCUkFSWV9TVUZGSVgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19MSU5LX0xJQlJBUllfU1VGRklYLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFXzxMQU5HPl9MSU5LX0xJQlJBUllfU1VGRklYCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIExhbmd1YWdlLXNwZWNpZmljIHN1ZmZpeCBmb3IgbGlicmFyaWVzIHRoYXQgeW91IGxpbmsgdG8uCiAKIFRoZSBzdWZmaXggdG8gdXNlIGZvciB0aGUgZW5kIG9mIGEgbGlicmFyeSBmaWxlbmFtZSwgYGAubGliYGAgb24gV2luZG93cy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTLnJzdAppbmRleCBjOGUzZDU3Li4yNGFjYThiIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MQU5HX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNgorCiBJbmNsdWRlIGRpcmVjdG9yaWVzIHRvIGJlIHVzZWQgZm9yIGV2ZXJ5IHNvdXJjZSBmaWxlIGNvbXBpbGVkIHdpdGgKIHRoZSBgYDxMQU5HPmBgIGNvbXBpbGVyLiAgVGhpcyBpcyBtZWFudCBmb3Igc3BlY2lmaWNhdGlvbiBvZiBzeXN0ZW0KIGluY2x1ZGUgZGlyZWN0b3JpZXMgbmVlZGVkIGJ5IHRoZSBsYW5ndWFnZSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xBTkdfU1RBTkRBUkRfTElCUkFSSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19TVEFOREFSRF9MSUJSQVJJRVMucnN0CmluZGV4IGJhNmRmOTMuLmQ1ZjMzNTEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19TVEFOREFSRF9MSUJSQVJJRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTEFOR19TVEFOREFSRF9MSUJSQVJJRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfPExBTkc+X1NUQU5EQVJEX0xJQlJBUklFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogTGlicmFyaWVzIGxpbmtlZCBpbnRvIGV2ZXJ5IGV4ZWN1dGFibGUgYW5kIHNoYXJlZCBsaWJyYXJ5IGxpbmtlZAogZm9yIGxhbmd1YWdlIGBgPExBTkc+YGAuICBUaGlzIGlzIG1lYW50IGZvciBzcGVjaWZpY2F0aW9uIG9mIHN5c3RlbQogbGlicmFyaWVzIG5lZWRlZCBieSB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QKaW5kZXggZTA2OWNkZC4uMDhmOTVjNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZXzxDT05GSUc+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIFdoZXJlIHRvIHB1dCBhbGwgdGhlIDpyZWY6YExJQlJBUlkgPExpYnJhcnkgT3V0cHV0IEFydGlmYWN0cz5gCiB0YXJnZXQgZmlsZXMgd2hlbiBidWlsdCBmb3IgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfRElSRUNUT1JJRVNfQkVGT1JFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTElOS19ESVJFQ1RPUklFU19CRUZPUkUucnN0CmluZGV4IDAyNmNhMzUuLmYxMjA4NjYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTElOS19ESVJFQ1RPUklFU19CRUZPUkUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTElOS19ESVJFQ1RPUklFU19CRUZPUkUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTElOS19ESVJFQ1RPUklFU19CRUZPUkUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBhcHBlbmQgb3IgcHJlcGVuZCBkaXJlY3RvcmllcyBieSBkZWZhdWx0IGluCiA6Y29tbWFuZDpgbGlua19kaXJlY3Rvcmllc2AuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTElOS19TRUFSQ0hfRU5EX1NUQVRJQy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfU0VBUkNIX0VORF9TVEFUSUMucnN0CmluZGV4IDU0Y2RhYWEuLmY0Y2NjMDQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTElOS19TRUFSQ0hfRU5EX1NUQVRJQy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX1NFQVJDSF9FTkRfU1RBVElDLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0xJTktfU0VBUkNIX0VORF9TVEFUSUMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEVuZCBhIGxpbmsgbGluZSBzdWNoIHRoYXQgc3RhdGljIHN5c3RlbSBsaWJyYXJpZXMgYXJlIHVzZWQuCiAKIFNvbWUgbGlua2VycyBzdXBwb3J0IHN3aXRjaGVzIHN1Y2ggYXMgYGAtQnN0YXRpY2BgIGFuZCBgYC1CZHluYW1pY2BgIHRvCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfU0VBUkNIX1NUQVJUX1NUQVRJQy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfU0VBUkNIX1NUQVJUX1NUQVRJQy5yc3QKaW5kZXggMGQ1MmEzMS4uMjAyNWM3MiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX1NFQVJDSF9TVEFSVF9TVEFUSUMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTElOS19TRUFSQ0hfU1RBUlRfU1RBVElDLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0xJTktfU0VBUkNIX1NUQVJUX1NUQVRJQwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBBc3N1bWUgdGhlIGxpbmtlciBsb29rcyBmb3Igc3RhdGljIGxpYnJhcmllcyBieSBkZWZhdWx0LgogCiBTb21lIGxpbmtlcnMgc3VwcG9ydCBzd2l0Y2hlcyBzdWNoIGFzIGBgLUJzdGF0aWNgYCBhbmQgYGAtQmR5bmFtaWNgYCB0bwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9MSU5LX1dIQVRfWU9VX1VTRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfV0hBVF9ZT1VfVVNFLnJzdAppbmRleCA5MGM0ZDNmLi4wNmIzYWE4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfV0hBVF9ZT1VfVVNFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX0xJTktfV0hBVF9ZT1VfVVNFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX0xJTktfV0hBVF9ZT1VfVVNFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgTElOS19XSEFUX1lPVV9VU0VgIHRhcmdldCBwcm9wZXJ0eS4KIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwcm9wZXJ0eSBvbiBlYWNoIHRhcmdldCBhcyBpdCBpcwogY3JlYXRlZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFUQ0hfQ09VTlQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NQVRDSF9DT1VOVC5yc3QKaW5kZXggMzU1ZTgzNC4uZGVlZWM4YiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9NQVRDSF9DT1VOVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NQVRDSF9DT1VOVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9NQVRDSF9DT1VOVAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIFRoZSBudW1iZXIgb2YgbWF0Y2hlcyB3aXRoIHRoZSBsYXN0IHJlZ3VsYXIgZXhwcmVzc2lvbi4KIAogV2hlbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBpcyB1c2VkLCBDTWFrZSBmaWxscyBpbgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9NQVRDSF9uLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFUQ0hfbi5yc3QKaW5kZXggYzdkZDYyMy4uYTkyNzg4ZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9NQVRDSF9uLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01BVENIX24ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTUFUQ0hfPG4+CiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIENhcHR1cmUgZ3JvdXAgYGA8bj5gYCBtYXRjaGVkIGJ5IHRoZSBsYXN0IHJlZ3VsYXIgZXhwcmVzc2lvbiwgZm9yIGdyb3VwcwogMCB0aHJvdWdoIDkuICBHcm91cCAwIGlzIHRoZSBlbnRpcmUgbWF0Y2guICBHcm91cHMgMSB0aHJvdWdoIDkgYXJlIHRoZQogc3ViZXhwcmVzc2lvbnMgY2FwdHVyZWQgYnkgYGAoKWBgIHN5bnRheC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTUFYSU1VTV9SRUNVUlNJT05fREVQVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9NQVhJTVVNX1JFQ1VSU0lPTl9ERVBUSC5yc3QKaW5kZXggNzExMGIxNi4uNTljNjBkMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9NQVhJTVVNX1JFQ1VSU0lPTl9ERVBUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NQVhJTVVNX1JFQ1VSU0lPTl9ERVBUSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9NQVhJTVVNX1JFQ1VSU0lPTl9ERVBUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBmb3IgQ01ha2Ugc2NyaXB0cy4gSXQgaXMgaW50ZW5kZWQgdG8gYmUgc2V0IG9uIHRoZQogY29tbWFuZCBsaW5lIHdpdGggYGAtRENNQUtFX01BWElNVU1fUkVDVVJTSU9OX0RFUFRIPTx4PmBgLCBvciB3aXRoaW4KIGBgQ01ha2VMaXN0cy50eHRgYCBieSBwcm9qZWN0cyB0aGF0IHJlcXVpcmUgYSBsYXJnZSByZWN1cnNpb24gZGVwdGguIFByb2plY3RzCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhY2U0MwotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9DT05URVhULnJzdApAQCAtMCwwICsxLDY0IEBACitDTUFLRV9NRVNTQUdFX0NPTlRFWFQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKK1doZW4gZW5hYmxlZCBieSB0aGUgOm1hbnVhbDpgY21ha2UgPGNtYWtlKDEpPmAgYGAtLWxvZy1jb250ZXh0YGAgY29tbWFuZCBsaW5lCitvcHRpb24gb3IgdGhlIDp2YXJpYWJsZTpgQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1dgIHZhcmlhYmxlLCB0aGUKKzpjb21tYW5kOmBtZXNzYWdlYCBjb21tYW5kIGNvbnZlcnRzIHRoZSBgYENNQUtFX01FU1NBR0VfQ09OVEVYVGBgIGxpc3QgaW50byBhCitkb3Qtc2VwYXJhdGVkIHN0cmluZyBzdXJyb3VuZGVkIGJ5IHNxdWFyZSBicmFja2V0cyBhbmQgcHJlcGVuZHMgaXQgdG8gZWFjaCBsaW5lCitmb3IgbWVzc2FnZXMgb2YgbG9nIGxldmVscyBgYE5PVElDRWBgIGFuZCBiZWxvdy4KKworRm9yIGxvZ2dpbmcgY29udGV4dHMgdG8gd29yayBlZmZlY3RpdmVseSwgcHJvamVjdHMgc2hvdWxkIGdlbmVyYWxseQorYGBBUFBFTkRgYCBhbmQgYGBQT1BfQkFDS2BgIGFuIGl0ZW0gdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YKK2BgQ01BS0VfTUVTU0FHRV9DT05URVhUYGAgcmF0aGVyIHRoYW4gcmVwbGFjZSBpdC4KK1Byb2plY3RzIHNob3VsZCBub3QgYXNzdW1lIHRoZSBtZXNzYWdlIGNvbnRleHQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUKK2lzIGVtcHR5LCBhcyB0aGVyZSBhcmUgc2NlbmFyaW9zIHdoZXJlIHRoZSBjb250ZXh0IG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHNldAorKGUuZy4gaGllcmFyY2hpY2FsIHByb2plY3RzKS4KKworLi4gd2FybmluZzo6CisKKyAgVmFsaWQgY29udGV4dCBuYW1lcyBhcmUgcmVzdHJpY3RlZCB0byBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIHVzZWQKKyAgYXMgYSBDTWFrZSB2YXJpYWJsZSBuYW1lLiAgQWxsIG5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlCisgIG9yIHRoZSBzdHJpbmcgYGBjbWFrZV9gYCBhcmUgYWxzbyByZXNlcnZlZCBmb3IgdXNlIGJ5IENNYWtlIGFuZAorICBzaG91bGQgbm90IGJlIHVzZWQgYnkgcHJvamVjdHMuCisKK0V4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgIGZ1bmN0aW9uKGJhcikKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0NPTlRFWFQgImJhciIpCisgICAgbWVzc2FnZShWRVJCT1NFICJiYXIgVkVSQk9TRSBtZXNzYWdlIikKKyAgZW5kZnVuY3Rpb24oKQorCisgIGZ1bmN0aW9uKGJheikKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0NPTlRFWFQgImJheiIpCisgICAgbWVzc2FnZShERUJVRyAiYmF6IERFQlVHIG1lc3NhZ2UiKQorICBlbmRmdW5jdGlvbigpCisKKyAgZnVuY3Rpb24oZm9vKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfQ09OVEVYVCAiZm9vIikKKyAgICBiYXIoKQorICAgIG1lc3NhZ2UoVFJBQ0UgImZvbyBUUkFDRSBtZXNzYWdlIikKKyAgICBiYXooKQorICBlbmRmdW5jdGlvbigpCisKKyAgbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9DT05URVhUICJ0b3AiKQorCisgIG1lc3NhZ2UoVkVSQk9TRSAiQmVmb3JlIGBmb29gIikKKyAgZm9vKCkKKyAgbWVzc2FnZShWRVJCT1NFICJBZnRlciBgZm9vYCIpCisKKyAgbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0NPTlRFWFQpCisKKworV2hpY2ggcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIG91dHB1dDoKKworLi4gY29kZS1ibG9jazo6IG5vbmUKKworICAtLSBbdG9wXSBCZWZvcmUgYGZvb2AKKyAgLS0gW3RvcC5mb28uYmFyXSBiYXIgVkVSQk9TRSBtZXNzYWdlCisgIC0tIFt0b3AuZm9vXSBmb28gVFJBQ0UgbWVzc2FnZQorICAtLSBbdG9wLmZvby5iYXpdIGJheiBERUJVRyBtZXNzYWdlCisgIC0tIFt0b3BdIEFmdGVyIGBmb29gCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVF9TSE9XLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1cucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MmU5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfQ09OVEVYVF9TSE9XLnJzdApAQCAtMCwwICsxLDE3IEBACitDTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPVworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gdHJ1ZSBlbmFibGVzIHNob3dpbmcgYSBjb250ZXh0IHdpdGggZWFjaCBsaW5lCitsb2dnZWQgYnkgdGhlIDpjb21tYW5kOmBtZXNzYWdlYCBjb21tYW5kIChzZWUgOnZhcmlhYmxlOmBDTUFLRV9NRVNTQUdFX0NPTlRFWFRgCitmb3IgaG93IHRoZSBjb250ZXh0IGl0c2VsZiBpcyBzcGVjaWZpZWQpLgorCitUaGlzIHZhcmlhYmxlIGlzIGFuIGFsdGVybmF0aXZlIHRvIHByb3ZpZGluZyB0aGUgYGAtLWxvZy1jb250ZXh0YGAgb3B0aW9uCitvbiB0aGUgOm1hbnVhbDpgY21ha2UgPGNtYWtlKDEpPmAgY29tbWFuZCBsaW5lLiAgV2hlcmVhcyB0aGUgY29tbWFuZCBsaW5lCitvcHRpb24gd2lsbCBhcHBseSBvbmx5IHRvIHRoYXQgb25lIENNYWtlIHJ1biwgc2V0dGluZworYGBDTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPV2BgIHRvIHRydWUgYXMgYSBjYWNoZSB2YXJpYWJsZSB3aWxsIGVuc3VyZSB0aGF0CitzdWJzZXF1ZW50IENNYWtlIHJ1bnMgd2lsbCBjb250aW51ZSB0byBzaG93IHRoZSBtZXNzYWdlIGNvbnRleHQuCisKK1Byb2plY3RzIHNob3VsZCBub3Qgc2V0IGBgQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1dgYC4gIEl0IGlzIGludGVuZGVkIGZvcgordXNlcnMgc28gdGhhdCB0aGV5IG1heSBjb250cm9sIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgY29udGV4dCB3aXRoIG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0lOREVOVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfSU5ERU5ULnJzdAppbmRleCA3ZTQ0YTRjLi5jNjI2M2QyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfSU5ERU5ULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfSU5ERU5ULnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX01FU1NBR0VfSU5ERU5UCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFRoZSA6Y29tbWFuZDpgbWVzc2FnZWAgY29tbWFuZCBqb2lucyB0aGUgc3RyaW5ncyBmcm9tIHRoaXMgbGlzdCBhbmQgZm9yCiBsb2cgbGV2ZWxzIG9mIGBgTk9USUNFYGAgYW5kIGJlbG93LCBpdCBwcmVwZW5kcyB0aGUgcmVzdWx0YW50IHN0cmluZyB0bwogZWFjaCBsaW5lIG9mIHRoZSBtZXNzYWdlLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0xPR19MRVZFTC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01FU1NBR0VfTE9HX0xFVkVMLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQ1ZDFkCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NRVNTQUdFX0xPR19MRVZFTC5yc3QKQEAgLTAsMCArMSwxNyBAQAorQ01BS0VfTUVTU0FHRV9MT0dfTEVWRUwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTcKKworV2hlbiBzZXQsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBsb2dnaW5nIGxldmVsIHVzZWQgYnkgdGhlCis6Y29tbWFuZDpgbWVzc2FnZWAgY29tbWFuZC4gIFZhbGlkIHZhbHVlcyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgZm9yIHRoZQorYGAtLWxvZy1sZXZlbGBgIGNvbW1hbmQgbGluZSBvcHRpb24gb2YgdGhlIDptYW51YWw6YGNtYWtlKDEpYCBwcm9ncmFtLgorSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgYW5kIHRoZSBgYC0tbG9nLWxldmVsYGAgY29tbWFuZCBsaW5lIG9wdGlvbiBpcworZ2l2ZW4sIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIHRha2VzIHByZWNlZGVuY2UuCisKK1RoZSBtYWluIGFkdmFudGFnZSB0byB1c2luZyB0aGlzIHZhcmlhYmxlIGlzIHRvIG1ha2UgYSBsb2cgbGV2ZWwgcGVyc2lzdAorYmV0d2VlbiBDTWFrZSBydW5zLiAgU2V0dGluZyBpdCBhcyBhIGNhY2hlIHZhcmlhYmxlIHdpbGwgZW5zdXJlIHRoYXQKK3N1YnNlcXVlbnQgQ01ha2UgcnVucyB3aWxsIGNvbnRpbnVlIHRvIHVzZSB0aGUgY2hvc2VuIGxvZyBsZXZlbC4KKworUHJvamVjdHMgc2hvdWxkIG5vdCBzZXQgdGhpcyB2YXJpYWJsZSwgaXQgaXMgaW50ZW5kZWQgZm9yIHVzZXJzIHNvIHRoYXQKK3RoZXkgbWF5IGNvbnRyb2wgdGhlIGxvZyBsZXZlbCBhY2NvcmRpbmcgdG8gdGhlaXIgb3duIG5lZWRzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU19DT05GSUdfSU5JVC5yc3QKaW5kZXggMzI3OTAxNC4uZThhNjQwMSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU188Q09ORklHPl9JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnZhcmlhYmxlOmBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTXzxDT05GSUc+YAogY2FjaGUgZW50cnkgdGhlIGZpcnN0IHRpbWUgYSBidWlsZCB0cmVlIGlzIGNvbmZpZ3VyZWQuCiBUaGlzIHZhcmlhYmxlIGlzIG1lYW50IHRvIGJlIHNldCBieSBhIDp2YXJpYWJsZTpgdG9vbGNoYWluIGZpbGUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU19JTklULnJzdAppbmRleCA5MWIzOWY2Li5kNTllOWJmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfSU5JVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU19JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnZhcmlhYmxlOmBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTYAogY2FjaGUgZW50cnkgdGhlIGZpcnN0IHRpbWUgYSBidWlsZCB0cmVlIGlzIGNvbmZpZ3VyZWQuCiBUaGlzIHZhcmlhYmxlIGlzIG1lYW50IHRvIGJlIHNldCBieSBhIDp2YXJpYWJsZTpgdG9vbGNoYWluIGZpbGUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTVNWQ0lERV9SVU5fUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX01TVkNJREVfUlVOX1BBVEgucnN0CmluZGV4IDIyZTcyN2YuLjcyMWNlYWEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTVNWQ0lERV9SVU5fUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9NU1ZDSURFX1JVTl9QQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX01TVkNJREVfUlVOX1BBVEgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBFeHRyYSBQQVRIIGxvY2F0aW9ucyB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gZXhlY3V0aW5nCiA6Y29tbWFuZDpgYWRkX2N1c3RvbV9jb21tYW5kYCBvciA6Y29tbWFuZDpgYWRkX2N1c3RvbV90YXJnZXRgIHdoZW4gdXNpbmcgdGhlCiA6Z2VuZXJhdG9yOmBWaXN1YWwgU3R1ZGlvIDkgMjAwOGAgKG9yIGFib3ZlKSBnZW5lcmF0b3IuIFRoaXMgYWxsb3dzCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX01TVkNfUlVOVElNRV9MSUJSQVJZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUlkucnN0CmluZGV4IDhiNTRlN2UuLjE0ODA2ZTYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUlkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogU2VsZWN0IHRoZSBNU1ZDIHJ1bnRpbWUgbGlicmFyeSBmb3IgdXNlIGJ5IGNvbXBpbGVycyB0YXJnZXRpbmcgdGhlIE1TVkMgQUJJLgogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgTVNWQ19SVU5USU1FX0xJQlJBUllgCiBwcm9wZXJ0eSBvbiBhbGwgdGFyZ2V0cyBhcyB0aGV5IGFyZSBjcmVhdGVkLiAgSXQgaXMgYWxzbyBwcm9wYWdhdGVkIGJ5CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX05FVFJDLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTkVUUkMucnN0CmluZGV4IDkwM2VjMzEuLjJjNjRhODEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTkVUUkMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTkVUUkMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTkVUUkMKIC0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGBgTkVUUkNgYCBvcHRpb24gZm9yCiA6Y29tbWFuZDpgZmlsZShET1dOTE9BRClgIGFuZCA6Y29tbWFuZDpgZmlsZShVUExPQUQpYCBjb21tYW5kcyBhbmQgdGhlCiBtb2R1bGUgOm1vZHVsZTpgRXh0ZXJuYWxQcm9qZWN0YC4gU2VlIHRob3NlIGNvbW1hbmRzIGZvciBhZGRpdGlvbmFsCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX05FVFJDX0ZJTEUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9ORVRSQ19GSUxFLnJzdAppbmRleCAwZjA5YWZlLi45N2E2NDVlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX05FVFJDX0ZJTEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTkVUUkNfRklMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9ORVRSQ19GSUxFCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGBgTkVUUkNfRklMRWBgIG9wdGlvbiBmb3IKIDpjb21tYW5kOmBmaWxlKERPV05MT0FEKWAgYW5kIDpjb21tYW5kOmBmaWxlKFVQTE9BRClgIGNvbW1hbmRzIGFuZCB0aGUKIG1vZHVsZSA6bW9kdWxlOmBFeHRlcm5hbFByb2plY3RgLiBTZWUgdGhvc2UgY29tbWFuZHMgZm9yIGFkZGl0aW9uYWwKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfTklOSkFfT1VUUFVUX1BBVEhfUFJFRklYLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfTklOSkFfT1VUUFVUX1BBVEhfUFJFRklYLnJzdAppbmRleCA2NDA5MWFhLi5hOGM0MDM1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX05JTkpBX09VVFBVVF9QQVRIX1BSRUZJWC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9OSU5KQV9PVVRQVVRfUEFUSF9QUkVGSVgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfTklOSkFfT1VUUFVUX1BBVEhfUFJFRklYCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIFNldCBvdXRwdXQgZmlsZXMgcGF0aCBwcmVmaXggZm9yIHRoZSA6Z2VuZXJhdG9yOmBOaW5qYWAgZ2VuZXJhdG9yLgogCiBFdmVyeSBvdXRwdXQgZmlsZXMgbGlzdGVkIGluIHRoZSBnZW5lcmF0ZWQgYGBidWlsZC5uaW5qYWBgIHdpbGwgYmUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ1hYX0VYVEVOU0lPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfRVhURU5TSU9OUy5yc3QKaW5kZXggOGFmYTZmMi4uYjUyMjVlYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfRVhURU5TSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfRVhURU5TSU9OUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9PQkpDWFhfRVhURU5TSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YE9CSkNYWF9FWFRFTlNJT05TYCBwcm9wZXJ0eSBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBPQkpDWFhfRVhURU5TSU9OU2AKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ1hYX1NUQU5EQVJELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ1hYX1NUQU5EQVJELnJzdAppbmRleCA0ZTUwMTZhLi45OGU0NjI0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNYWF9TVEFOREFSRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfU1RBTkRBUkQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfT0JKQ1hYX1NUQU5EQVJECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YE9CSkNYWF9TVEFOREFSRGAgcHJvcGVydHkgb2YgdGFyZ2V0cy4KIAogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgT0JKQ1hYX1NUQU5EQVJEYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDWFhfU1RBTkRBUkRfUkVRVUlSRUQucnN0CmluZGV4IDNhMDYwMmEuLjRiNWU3N2MgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ1hYX1NUQU5EQVJEX1JFUVVJUkVELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNYWF9TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9PQkpDWFhfU1RBTkRBUkRfUkVRVUlSRUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgT0JKQ1hYX1NUQU5EQVJEX1JFUVVJUkVEYCBwcm9wZXJ0eSBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBPQkpDWFhfU1RBTkRBUkRfUkVRVUlSRURgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNfRVhURU5TSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNfRVhURU5TSU9OUy5yc3QKaW5kZXggZDk2MTlkOC4uZDZlM2M3ZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDX0VYVEVOU0lPTlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ19FWFRFTlNJT05TLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX09CSkNfRVhURU5TSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBPQkpDX0VYVEVOU0lPTlNgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YE9CSkNfRVhURU5TSU9OU2AKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ19TVEFOREFSRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNfU1RBTkRBUkQucnN0CmluZGV4IDk3NmM0NDEuLmZkZTM2N2QgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ19TVEFOREFSRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDX1NUQU5EQVJELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX09CSkNfU1RBTkRBUkQKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBEZWZhdWx0IHZhbHVlIGZvciA6cHJvcF90Z3Q6YE9CSkNfU1RBTkRBUkRgIHByb3BlcnR5IG9mIHRhcmdldHMuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YE9CSkNfU1RBTkRBUkRgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNfU1RBTkRBUkRfUkVRVUlSRUQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9PQkpDX1NUQU5EQVJEX1JFUVVJUkVELnJzdAppbmRleCA1YzAyMDk2Li44ZDI2ZDk1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX09CSkNfU1RBTkRBUkRfUkVRVUlSRUQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfT0JKQ19TVEFOREFSRF9SRVFVSVJFRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9PQkpDX1NUQU5EQVJEX1JFUVVJUkVECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogRGVmYXVsdCB2YWx1ZSBmb3IgOnByb3BfdGd0OmBPQkpDX1NUQU5EQVJEX1JFUVVJUkVEYCBwcm9wZXJ0eSBvZiB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBPQkpDX1NUQU5EQVJEX1JFUVVJUkVEYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QQ0hfV0FSTl9JTlZBTElELnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUENIX1dBUk5fSU5WQUxJRC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3YTQyOAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUENIX1dBUk5fSU5WQUxJRC5yc3QKQEAgLTAsMCArMSw3IEBACitDTUFLRV9QQ0hfV0FSTl9JTlZBTElECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIDpwcm9wX3RndDpgUENIX1dBUk5fSU5WQUxJRGAKK3Byb3BlcnR5IG9mIHRhcmdldHMgd2hlbiB0aGV5IGFyZSBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QT0xJQ1lfV0FSTklOR19DTVBOTk5OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUE9MSUNZX1dBUk5JTkdfQ01QTk5OTi5yc3QKaW5kZXggZmM1MmU3Yi4uZGU3MWQwZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QT0xJQ1lfV0FSTklOR19DTVBOTk5OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BPTElDWV9XQVJOSU5HX0NNUE5OTk4ucnN0CkBAIC0yMyw2ICsyMyw4IEBACiAgIHBvbGljeSA6cG9saWN5OmBDTVAwMDgyYC4KICogYGBDTUFLRV9QT0xJQ1lfV0FSTklOR19DTVAwMDg5YGAgY29udHJvbHMgdGhlIHdhcm5pbmcgZm9yCiAgIHBvbGljeSA6cG9saWN5OmBDTVAwMDg5YC4KKyogYGBDTUFLRV9QT0xJQ1lfV0FSTklOR19DTVAwMTAyYGAgY29udHJvbHMgdGhlIHdhcm5pbmcgZm9yCisgIHBvbGljeSA6cG9saWN5OmBDTVAwMTAyYC4KIAogVGhpcyB2YXJpYWJsZSBzaG91bGQgbm90IGJlIHNldCBieSBhIHByb2plY3QgaW4gQ01ha2UgY29kZS4gIFByb2plY3QKIGRldmVsb3BlcnMgcnVubmluZyBDTWFrZSBtYXkgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlaXIgY2FjaGUgdG8KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9ERVNDUklQVElPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfREVTQ1JJUFRJT04ucnN0CmluZGV4IDUxYjA1OTIuLjk1Y2JlNDAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9ERVNDUklQVElPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0RFU0NSSVBUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1BST0pFQ1RfREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdG9wIGxldmVsIHByb2plY3QuCiAKIFRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9qZWN0IGFzIHNwZWNpZmllZCBpbiB0aGUgdG9wCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSE9NRVBBR0VfVVJMLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9IT01FUEFHRV9VUkwucnN0CmluZGV4IGVlMGJmN2MuLjRjNWRlYmUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9IT01FUEFHRV9VUkwucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9IT01FUEFHRV9VUkwucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfUFJPSkVDVF9IT01FUEFHRV9VUkwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhlIGhvbWVwYWdlIFVSTCBvZiB0aGUgdG9wIGxldmVsIHByb2plY3QuCiAKIFRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIGhvbWVwYWdlIFVSTCBvZiB0aGUgcHJvamVjdCBhcyBzcGVjaWZpZWQgaW4gdGhlIHRvcApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREUucnN0CmluZGV4IDk2NWM5NGUuLjQxZDllNWQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9JTkNMVURFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERS5yc3QKQEAgLTEsOSArMSwxMiBAQAogQ01BS0VfUFJPSkVDVF9JTkNMVURFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBBIENNYWtlIGxhbmd1YWdlIGZpbGUgb3IgbW9kdWxlIHRvIGJlIGluY2x1ZGVkIGFzIHRoZSBsYXN0IHN0ZXAgb2YgYWxsCiA6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZCBjYWxscy4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGluamVjdGluZyBjdXN0b20gY29kZQogaW50byBwcm9qZWN0IGJ1aWxkcyB3aXRob3V0IG1vZGlmeWluZyB0aGVpciBzb3VyY2UuCiAKLVNlZSBhbHNvIHRoZSA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfPFBST0pFQ1QtTkFNRT5fSU5DTFVERWAgYW5kCitTZWUgYWxzbyB0aGUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVgLAorOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVfQkVGT1JFYCBhbmQKIDp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRWAgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREVfQkVGT1JFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRS5yc3QKaW5kZXggNzBiMTVlNi4uYzJmZDBmOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX0lOQ0xVREVfQkVGT1JFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkUucnN0CkBAIC0xLDkgKzEsMTIgQEAKIENNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBBIENNYWtlIGxhbmd1YWdlIGZpbGUgb3IgbW9kdWxlIHRvIGJlIGluY2x1ZGVkIGFzIHRoZSBmaXJzdCBzdGVwIG9mIGFsbAogOmNvbW1hbmQ6YHByb2plY3RgIGNvbW1hbmQgY2FsbHMuICBUaGlzIGlzIGludGVuZGVkIGZvciBpbmplY3RpbmcgY3VzdG9tIGNvZGUKIGludG8gcHJvamVjdCBidWlsZHMgd2l0aG91dCBtb2RpZnlpbmcgdGhlaXIgc291cmNlLgogCi1TZWUgYWxzbyB0aGUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVgIGFuZAorU2VlIGFsc28gdGhlIDp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF88UFJPSkVDVC1OQU1FPl9JTkNMVURFYCwKKzp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF88UFJPSkVDVC1OQU1FPl9JTkNMVURFX0JFRk9SRWAgYW5kCiA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfSU5DTFVERWAgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9QUk9KRUNULU5BTUVfSU5DTFVERS5yc3QKaW5kZXggMzQ4NWMzOC4uNzQyNDdmMSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfUFJPSkVDVC1OQU1FX0lOQ0xVREUucnN0CkBAIC02LDUgKzYsNiBAQAogbmFtZS4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGluamVjdGluZyBjdXN0b20gY29kZSBpbnRvIHByb2plY3QgYnVpbGRzIHdpdGhvdXQKIG1vZGlmeWluZyB0aGVpciBzb3VyY2UuCiAKLVNlZSBhbHNvIHRoZSA6dmFyaWFibGU6YENNQUtFX1BST0pFQ1RfSU5DTFVERWAgYW5kCitTZWUgYWxzbyB0aGUgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUXzxQUk9KRUNULU5BTUU+X0lOQ0xVREVfQkVGT1JFYCwKKzp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFYCBhbmQKIDp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRWAgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFX0JFRk9SRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfUFJPSkVDVC1OQU1FX0lOQ0xVREVfQkVGT1JFLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWFiYjEyCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1BST0pFQ1QtTkFNRV9JTkNMVURFX0JFRk9SRS5yc3QKQEAgLTAsMCArMSwxMyBAQAorQ01BS0VfUFJPSkVDVF88UFJPSkVDVC1OQU1FPl9JTkNMVURFX0JFRk9SRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKK0EgQ01ha2UgbGFuZ3VhZ2UgZmlsZSBvciBtb2R1bGUgdG8gYmUgaW5jbHVkZWQgYXMgdGhlIGZpcnN0IHN0ZXAgb2YgYW55Cis6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZCBjYWxscyB0aGF0IHNwZWNpZnkgYGA8UFJPSkVDVC1OQU1FPmBgIGFzIHRoZSBwcm9qZWN0CituYW1lLiAgVGhpcyBpcyBpbnRlbmRlZCBmb3IgaW5qZWN0aW5nIGN1c3RvbSBjb2RlIGludG8gcHJvamVjdCBidWlsZHMgd2l0aG91dAorbW9kaWZ5aW5nIHRoZWlyIHNvdXJjZS4KKworU2VlIGFsc28gdGhlIDp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF88UFJPSkVDVC1OQU1FPl9JTkNMVURFYCwKKzp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFYCBhbmQKKzp2YXJpYWJsZTpgQ01BS0VfUFJPSkVDVF9JTkNMVURFX0JFRk9SRWAgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT04ucnN0CmluZGV4IDRmOGY1NTYuLjQ1MGMxMzYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9QUk9KRUNUX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoZSB2ZXJzaW9uIG9mIHRoZSB0b3AgbGV2ZWwgcHJvamVjdC4KIAogVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCBhcyBzcGVjaWZpZWQgaW4gdGhlIHRvcApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fTUFKT1IucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fTUFKT1IucnN0CmluZGV4IGYxMDAxYWMuLmM3NTExZTcgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OX01BSk9SLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9NQUpPUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9QUk9KRUNUX1ZFUlNJT05fTUFKT1IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoZSBtYWpvciB2ZXJzaW9uIG9mIHRoZSB0b3AgbGV2ZWwgcHJvamVjdC4KIAogVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCBhcyBzcGVjaWZpZWQgaW4gdGhlIHRvcApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fTUlOT1IucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fTUlOT1IucnN0CmluZGV4IDEzMjAyYmUuLmRkOTFkY2YgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OX01JTk9SLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9NSU5PUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9QUk9KRUNUX1ZFUlNJT05fTUlOT1IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSB0b3AgbGV2ZWwgcHJvamVjdC4KIAogVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCBhcyBzcGVjaWZpZWQgaW4gdGhlIHRvcApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fUEFUQ0gucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fUEFUQ0gucnN0CmluZGV4IGI4NTcwZDkuLjYxZmQxZjMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OX1BBVENILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9QQVRDSC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9QUk9KRUNUX1ZFUlNJT05fUEFUQ0gKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoZSBwYXRjaCB2ZXJzaW9uIG9mIHRoZSB0b3AgbGV2ZWwgcHJvamVjdC4KIAogVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgcGF0Y2ggdmVyc2lvbiBvZiB0aGUgcHJvamVjdCBhcyBzcGVjaWZpZWQgaW4gdGhlIHRvcApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fVFdFQUsucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9QUk9KRUNUX1ZFUlNJT05fVFdFQUsucnN0CmluZGV4IGUxYWQ0YmUuLjBkZWFlOGIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfUFJPSkVDVF9WRVJTSU9OX1RXRUFLLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1BST0pFQ1RfVkVSU0lPTl9UV0VBSy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9QUk9KRUNUX1ZFUlNJT05fVFdFQUsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoZSB0d2VhayB2ZXJzaW9uIG9mIHRoZSB0b3AgbGV2ZWwgcHJvamVjdC4KIAogVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgdHdlYWsgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCBhcyBzcGVjaWZpZWQgaW4gdGhlIHRvcApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9SVUxFX01FU1NBR0VTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUlVMRV9NRVNTQUdFUy5yc3QKaW5kZXggNzQ2MGE4MS4uMzliZTJlOSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9SVUxFX01FU1NBR0VTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1JVTEVfTUVTU0FHRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfUlVMRV9NRVNTQUdFUwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFNwZWNpZnkgd2hldGhlciB0byByZXBvcnQgYSBtZXNzYWdlIGZvciBlYWNoIG1ha2UgcnVsZS4KIAogSWYgc2V0IGluIHRoZSBjYWNoZSBpdCBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHZhbHVlIG9mIHRoZSA6cHJvcF9nYmw6YFJVTEVfTUVTU0FHRVNgIHByb3BlcnR5LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZX0NPTkZJRy5yc3QKaW5kZXggMDgwZGVhNi4uYzljNTVjNSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfQ09ORklHLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWV9DT05GSUcucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZXzxDT05GSUc+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIFdoZXJlIHRvIHB1dCBhbGwgdGhlIDpyZWY6YFJVTlRJTUUgPFJ1bnRpbWUgT3V0cHV0IEFydGlmYWN0cz5gCiB0YXJnZXQgZmlsZXMgd2hlbiBidWlsdCBmb3IgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdAppbmRleCAxODVkZjM4Li43ZjNkZWM3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19DT05GSUdfSU5JVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTXzxDT05GSUc+X0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfPENPTkZJRz5gCiBjYWNoZSBlbnRyeSB0aGUgZmlyc3QgdGltZSBhIGJ1aWxkIHRyZWUgaXMgY29uZmlndXJlZC4KIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEgOnZhcmlhYmxlOmB0b29sY2hhaW4gZmlsZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTX0lOSVQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTX0lOSVQucnN0CmluZGV4IGNiODE5YTcuLjZkNTFhZmUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfSU5JVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTX0lOSVQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogVmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6dmFyaWFibGU6YENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NgCiBjYWNoZSBlbnRyeSB0aGUgZmlyc3QgdGltZSBhIGJ1aWxkIHRyZWUgaXMgY29uZmlndXJlZC4KIFRoaXMgdmFyaWFibGUgaXMgbWVhbnQgdG8gYmUgc2V0IGJ5IGEgOnZhcmlhYmxlOmB0b29sY2hhaW4gZmlsZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHU19DT05GSUdfSU5JVC5yc3QKaW5kZXggYTQ5ZDFjYi4uNWU2NWVmMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTX0NPTkZJR19JTklULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NUQVRJQ19MSU5LRVJfRkxBR1NfQ09ORklHX0lOSVQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHU188Q09ORklHPl9JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnZhcmlhYmxlOmBDTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTXzxDT05GSUc+YAogY2FjaGUgZW50cnkgdGhlIGZpcnN0IHRpbWUgYSBidWlsZCB0cmVlIGlzIGNvbmZpZ3VyZWQuCiBUaGlzIHZhcmlhYmxlIGlzIG1lYW50IHRvIGJlIHNldCBieSBhIDp2YXJpYWJsZTpgdG9vbGNoYWluIGZpbGUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHU19JTklULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHU19JTklULnJzdAppbmRleCAxMTNjYTcxLi5jYmY2ODFjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NUQVRJQ19MSU5LRVJfRkxBR1NfSU5JVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTX0lOSVQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHU19JTklUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIFZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnZhcmlhYmxlOmBDTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTYAogY2FjaGUgZW50cnkgdGhlIGZpcnN0IHRpbWUgYSBidWlsZCB0cmVlIGlzIGNvbmZpZ3VyZWQuCiBUaGlzIHZhcmlhYmxlIGlzIG1lYW50IHRvIGJlIHNldCBieSBhIDp2YXJpYWJsZTpgdG9vbGNoYWluIGZpbGUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1VCTElNRV9URVhUXzJfRU5WX1NFVFRJTkdTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1VCTElNRV9URVhUXzJfRU5WX1NFVFRJTkdTLnJzdAppbmRleCAwMmM4NjYzLi41YzFjOGQxIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NVQkxJTUVfVEVYVF8yX0VOVl9TRVRUSU5HUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9TVUJMSU1FX1RFWFRfMl9FTlZfU0VUVElOR1MucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU1VCTElNRV9URVhUXzJfRU5WX1NFVFRJTkdTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIFRoaXMgdmFyaWFibGUgY29udGFpbnMgYSBsaXN0IG9mIGVudiB2YXJzIGFzIGEgbGlzdCBvZiB0b2tlbnMgd2l0aCB0aGUKIHN5bnRheCBgYHZhcj12YWx1ZWBgLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NVQkxJTUVfVEVYVF8yX0VYQ0xVREVfQlVJTERfVFJFRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NVQkxJTUVfVEVYVF8yX0VYQ0xVREVfQlVJTERfVFJFRS5yc3QKaW5kZXggZDY1NDQyNS4uMjhiMGRiZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9TVUJMSU1FX1RFWFRfMl9FWENMVURFX0JVSUxEX1RSRUUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1VCTElNRV9URVhUXzJfRVhDTFVERV9CVUlMRF9UUkVFLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1NVQkxJTUVfVEVYVF8yX0VYQ0xVREVfQlVJTERfVFJFRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBJZiB0aGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byBgYE9OYGAgYXQgdGhlIGVuZCBvZiB0aGUgdG9wLWxldmVsCiBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSwgdGhlIDpnZW5lcmF0b3I6YFN1YmxpbWUgVGV4dCAyYCBleHRyYSBnZW5lcmF0b3IKIGV4Y2x1ZGVzIHRoZSBidWlsZCB0cmVlIGZyb20gdGhlIGBgLnN1YmxpbWUtcHJvamVjdGBgIGlmIGl0IGlzIGluc2lkZSB0aGUKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1VQUFJFU1NfUkVHRU5FUkFUSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1VQUFJFU1NfUkVHRU5FUkFUSU9OLnJzdAppbmRleCA5NjE4NGRkLi40ODQ5MGZmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NVUFBSRVNTX1JFR0VORVJBVElPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9TVVBQUkVTU19SRUdFTkVSQVRJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU1VQUFJFU1NfUkVHRU5FUkFUSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBJZiBgYENNQUtFX1NVUFBSRVNTX1JFR0VORVJBVElPTmBgIGlzIGBgT0ZGYGAsIHdoaWNoIGlzIGRlZmF1bHQsIHRoZW4gQ01ha2UKIGFkZHMgYSBzcGVjaWFsIHRhcmdldCBvbiB3aGljaCBhbGwgb3RoZXIgdGFyZ2V0cyBkZXBlbmQgdGhhdCBjaGVja3MgdGhlIGJ1aWxkCiBzeXN0ZW0gYW5kIG9wdGlvbmFsbHkgcmUtcnVucyBDTWFrZSB0byByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gd2hlbgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNST09UX0NPTVBJTEUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNST09UX0NPTVBJTEUucnN0CmluZGV4IGU5NmM2MmIuLjRhZWE0OGUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTUk9PVF9DT01QSUxFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1JPT1RfQ09NUElMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9TWVNST09UX0NPTVBJTEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogUGF0aCB0byBwYXNzIHRvIHRoZSBjb21waWxlciBpbiB0aGUgYGAtLXN5c3Jvb3RgYCBmbGFnIHdoZW4gY29tcGlsaW5nIHNvdXJjZQogZmlsZXMuICBUaGlzIGlzIHRoZSBzYW1lIGFzIDp2YXJpYWJsZTpgQ01BS0VfU1lTUk9PVGAgYnV0IGlzIHVzZWQgb25seSBmb3IKIGNvbXBpbGluZyBzb3VyY2VzIGFuZCBub3QgbGlua2luZy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTUk9PVF9MSU5LLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTUk9PVF9MSU5LLnJzdAppbmRleCA4OGI0OGVmLi45NzQ5YjdiIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1JPT1RfTElOSy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNST09UX0xJTksucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU1lTUk9PVF9MSU5LCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFBhdGggdG8gcGFzcyB0byB0aGUgY29tcGlsZXIgaW4gdGhlIGBgLS1zeXNyb290YGAgZmxhZyB3aGVuIGxpbmtpbmcuICBUaGlzIGlzCiB0aGUgc2FtZSBhcyA6dmFyaWFibGU6YENNQUtFX1NZU1JPT1RgIGJ1dCBpcyB1c2VkIG9ubHkgZm9yIGxpbmtpbmcgYW5kIG5vdAogY29tcGlsaW5nIHNvdXJjZXMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1RFTV9BUFBCVU5ETEVfUEFUSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1RFTV9BUFBCVU5ETEVfUEFUSC5yc3QKaW5kZXggNjY2YWY0Ni4uMDZhOTlhOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fQVBQQlVORExFX1BBVEgucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX0FQUEJVTkRMRV9QQVRILnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1NZU1RFTV9BUFBCVU5ETEVfUEFUSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBTZWFyY2ggcGF0aCBmb3IgbWFjT1MgYXBwbGljYXRpb24gYnVuZGxlcyB1c2VkIGJ5IHRoZSA6Y29tbWFuZDpgZmluZF9wcm9ncmFtYCwKIGFuZCA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYCBjb21tYW5kcy4gIEJ5IGRlZmF1bHQgaXQgY29udGFpbnMgdGhlIHN0YW5kYXJkCiBkaXJlY3RvcmllcyBmb3IgdGhlIGN1cnJlbnQgc3lzdGVtLiAgSXQgaXMgKm5vdCogaW50ZW5kZWQgdG8gYmUgbW9kaWZpZWQgYnkKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRILnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRILnJzdAppbmRleCAxNGJhMThlLi4xYTQwMmMxIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1RFTV9GUkFNRVdPUktfUEFUSC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fRlJBTUVXT1JLX1BBVEgucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRICiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNlYXJjaCBwYXRoIGZvciBtYWNPUyBmcmFtZXdvcmtzIHVzZWQgYnkgdGhlIDpjb21tYW5kOmBmaW5kX2xpYnJhcnlgLAogOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAsIDpjb21tYW5kOmBmaW5kX3BhdGhgLCBhbmQgOmNvbW1hbmQ6YGZpbmRfZmlsZWAKIGNvbW1hbmRzLiAgQnkgZGVmYXVsdCBpdCBjb250YWlucyB0aGUgc3RhbmRhcmQgZGlyZWN0b3JpZXMgZm9yIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fUFJFRklYX1BBVEgucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9TWVNURU1fUFJFRklYX1BBVEgucnN0CmluZGV4IDg3YTlkMDYuLjgxYTdhMGIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSC5yc3QKQEAgLTgsMTEgKzgsNDMgQEAKIHN1YmRpcmVjdG9yaWVzIChsaWtlIGBgYmluYGAsIGBgbGliYGAsIG9yIGBgaW5jbHVkZWBgKSBhcyBzcGVjaWZpZWQgaW4gaXRzIG93bgogZG9jdW1lbnRhdGlvbi4KIAotQnkgZGVmYXVsdCB0aGlzIGNvbnRhaW5zIHRoZSBzdGFuZGFyZCBkaXJlY3RvcmllcyBmb3IgdGhlIGN1cnJlbnQgc3lzdGVtLCB0aGUKK0J5IGRlZmF1bHQgdGhpcyBjb250YWlucyB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzIGZvciB0aGUgY3VycmVudCBzeXN0ZW0sIHRoZQogOnZhcmlhYmxlOmBDTUFLRV9JTlNUQUxMX1BSRUZJWGAsIGFuZCB0aGUgOnZhcmlhYmxlOmBDTUFLRV9TVEFHSU5HX1BSRUZJWGAuCiBUaGUgaW5zdGFsbGF0aW9uIGFuZCBzdGFnaW5nIHByZWZpeGVzIG1heSBiZSBleGNsdWRlZCBieSBzZXR0aW5nCiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX05PX0lOU1RBTExfUFJFRklYYCB2YXJpYWJsZS4KIAorVGhlIHN5c3RlbSBkaXJlY3RvcmllcyB0aGF0IGFyZSBjb250YWluZWQgaW4gYGBDTUFLRV9TWVNURU1fUFJFRklYX1BBVEhgYCBhcmUKK2xvY2F0aW9ucyB0aGF0IHR5cGljYWxseSBpbmNsdWRlIGluc3RhbGxlZCBzb2Z0d2FyZS4gQW4gZXhhbXBsZSBiZWluZworYGAvdXNyL2xvY2FsYGAgZm9yIFVOSVggYmFzZWQgcGxhdGZvcm1zLiBJbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBwbGF0Zm9ybQorbG9jYXRpb25zLCBDTWFrZSB3aWxsIGFsc28gYWRkIHZhbHVlcyB0byBgYENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSGBgIGJhc2VkIG9uCitlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHNlYXJjaCBsb2NhdGlvbnMgdGhhdAorQ01ha2UgdXNlcyBtYXkgZXZvbHZlIG92ZXIgdGltZSwgYXMgcGxhdGZvcm1zIGFuZCB0aGVpciBjb252ZW50aW9ucyBhbHNvCitldm9sdmUuIFRoZSBmb2xsb3dpbmcgcHJvdmlkZXMgYW4gaW5kaWNhdGl2ZSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcworYW5kIGxvY2F0aW9ucyB0aGF0IENNYWtlIHNlYXJjaGVzLCBidXQgdGhleSBhcmUgc3ViamVjdCB0byBjaGFuZ2U6CisKKworQ3JheUxpbnV4RW52aXJvbm1lbnQ6CisgICogYGBFTlZ7U1lTUk9PVF9ESVJ9L2BgCisgICogYGBFTlZ7U1lTUk9PVF9ESVJ9L3VzcmBgCisgICogYGBFTlZ7U1lTUk9PVF9ESVJ9L3Vzci9sb2NhbGBgCisKK0RhcndpbjoKKyAgKiBgYEVOVntTREtST09UfS91c3JgYCBXaGVuIGBgQ01BS0VfT1NYX1NZU1JPT1RgYCBpcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQuCisKK09wZW5CU0Q6CisgICogYGBFTlZ7TE9DQUxCQVNFfWBgCisKK1VuaXg6CisgICogYGBFTlZ7Q09OREFfUFJFRklYfWBgIHdoZW4gdXNpbmcgYSBjb25kYSBjb21waWxlcgorCitXaW5kb3dzOgorICAqIGBgRU5We1Byb2dyYW1XNjQzMn1gYAorICAqIGBgRU5We1Byb2dyYW1GaWxlc31gYAorICAqIGBgRU5We1Byb2dyYW1GaWxlcyh4ODYpfWBgCisgICogYGBFTlZ7U3lzdGVtRHJpdmV9L1Byb2dyYW0gRmlsZXNgYAorICAqIGBgRU5We1N5c3RlbURyaXZlfS9Qcm9ncmFtIEZpbGVzICh4ODYpYGAKKworCiBgYENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSGBgIGlzICpub3QqIGludGVuZGVkIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBwcm9qZWN0OwogdXNlIDp2YXJpYWJsZTpgQ01BS0VfUFJFRklYX1BBVEhgIGZvciB0aGlzLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9Td2lmdF9MQU5HVUFHRV9WRVJTSU9OLnJzdAppbmRleCBiNGE3NGViLi5mY2U2ZmE3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU3dpZnRfTEFOR1VBR0VfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9Td2lmdF9MQU5HVUFHRV9WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNworCiBTZXQgdG8gdGhlIFN3aWZ0IGxhbmd1YWdlIHZlcnNpb24gbnVtYmVyLiAgSWYgbm90IHNldCwgdGhlIG9sZGVzdCBsZWdhY3kKIHZlcnNpb24ga25vd24gdG8gYmUgYXZhaWxhYmxlIGluIHRoZSBob3N0IFhjb2RlIHZlcnNpb24gaXMgYXNzdW1lZDoKIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9Td2lmdF9NT0RVTEVfRElSRUNUT1JZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfU3dpZnRfTU9EVUxFX0RJUkVDVE9SWS5yc3QKaW5kZXggYjExMjUzYi4uMzY5NDk3MyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9Td2lmdF9NT0RVTEVfRElSRUNUT1JZLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X01PRFVMRV9ESVJFQ1RPUlkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfU3dpZnRfTU9EVUxFX0RJUkVDVE9SWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1CisKIFN3aWZ0IG1vZHVsZSBvdXRwdXQgZGlyZWN0b3J5LgogCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGlzZSB0aGUgOnByb3BfdGd0OmBTd2lmdF9NT0RVTEVfRElSRUNUT1JZYApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9Td2lmdF9OVU1fVEhSRUFEUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X05VTV9USFJFQURTLnJzdAppbmRleCBjYjMzNjc4Li5lMWRhZmIwIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X05VTV9USFJFQURTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1N3aWZ0X05VTV9USFJFQURTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1N3aWZ0X05VTV9USFJFQURTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE1LjEKKwogTnVtYmVyIG9mIHRocmVhZHMgZm9yIHBhcmFsbGVsIGNvbXBpbGF0aW9uIGZvciBTd2lmdCB0YXJnZXRzLgogCiBUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgam9icyB0aGF0IHRoZSBzd2lmdCBkcml2ZXIgY3JlYXRlcwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9UUllfQ09NUElMRV9QTEFURk9STV9WQVJJQUJMRVMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9UUllfQ09NUElMRV9QTEFURk9STV9WQVJJQUJMRVMucnN0CmluZGV4IDBmOTY3ODcuLmQxNzg1MTMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVFJZX0NPTVBJTEVfUExBVEZPUk1fVkFSSUFCTEVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1RSWV9DT01QSUxFX1BMQVRGT1JNX1ZBUklBQkxFUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9UUllfQ09NUElMRV9QTEFURk9STV9WQVJJQUJMRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjYKKwogTGlzdCBvZiB2YXJpYWJsZXMgdGhhdCB0aGUgOmNvbW1hbmQ6YHRyeV9jb21waWxlYCBjb21tYW5kIHNvdXJjZSBmaWxlIHNpZ25hdHVyZQogbXVzdCBwcm9wYWdhdGUgaW50byB0aGUgdGVzdCBwcm9qZWN0IGluIG9yZGVyIHRvIHRhcmdldCB0aGUgc2FtZSBwbGF0Zm9ybSBhcwogdGhlIGhvc3QgcHJvamVjdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRS5yc3QKaW5kZXggNWZhOGRmYy4uYjYwNTM5ZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy42CisKIFR5cGUgb2YgdGFyZ2V0IGdlbmVyYXRlZCBmb3IgOmNvbW1hbmQ6YHRyeV9jb21waWxlYCBjYWxscyB1c2luZyB0aGUKIHNvdXJjZSBmaWxlIHNpZ25hdHVyZS4gIFZhbGlkIHZhbHVlcyBhcmU6CiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVU5JVFlfQlVJTEQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9VTklUWV9CVUlMRC5yc3QKaW5kZXggYTg2Y2Q2Ny4uNTRhNzgxYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9VTklUWV9CVUlMRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9VTklUWV9CVUlMRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9VTklUWV9CVUlMRAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgOnByb3BfdGd0OmBVTklUWV9CVUlMRGAKIHByb3BlcnR5IG9mIHRhcmdldHMgd2hlbiB0aGV5IGFyZSBjcmVhdGVkLiAgU2V0dGluZyBpdCB0byB0cnVlCiBlbmFibGVzIGJhdGNoIGNvbXBpbGF0aW9uIG9mIG11bHRpcGxlIHNvdXJjZXMgd2l0aGluIGVhY2ggdGFyZ2V0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9VTklUWV9CVUlMRF9CQVRDSF9TSVpFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVU5JVFlfQlVJTERfQkFUQ0hfU0laRS5yc3QKaW5kZXggNzk4OGQ0Yi4uNzczM2ZlOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9VTklUWV9CVUlMRF9CQVRDSF9TSVpFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1VOSVRZX0JVSUxEX0JBVENIX1NJWkUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfVU5JVFlfQlVJTERfQkFUQ0hfU0laRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YFVOSVRZX0JVSUxEX0JBVENIX1NJWkVgCiBwcm9wZXJ0eSBvZiB0YXJnZXRzIHdoZW4gdGhleSBhcmUgY3JlYXRlZC4gIEl0IHNwZWNpZmllcyB0aGUgZGVmYXVsdCB1cHBlcgogbGltaXQgb24gdGhlIG51bWJlciBvZiBzb3VyY2UgZmlsZXMgdGhhdCBtYXkgYmUgY29tYmluZWQgaW4gYW55IG9uZSB1bml0eQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19HTE9CQUxTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfR0xPQkFMUy5yc3QKaW5kZXggODM3NzdiNi4uZDQ1MTRmZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19HTE9CQUxTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0dMT0JBTFMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfVlNfR0xPQkFMUwogLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIExpc3Qgb2YgYGBLZXk9VmFsdWVgYCByZWNvcmRzIHRvIGJlIHNldCBwZXIgdGFyZ2V0IGFzIHRhcmdldCBwcm9wZXJ0aWVzCiA6cHJvcF90Z3Q6YFZTX0dMT0JBTF88dmFyaWFibGU+YCB3aXRoIGBgdmFyaWFibGU9S2V5YGAgYW5kIHZhbHVlIGBgVmFsdWVgYC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19JTkNMVURFX0lOU1RBTExfVE9fREVGQVVMVF9CVUlMRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0lOQ0xVREVfSU5TVEFMTF9UT19ERUZBVUxUX0JVSUxELnJzdAppbmRleCBmNTQ0NzJhLi5hY2U5NGU0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0lOQ0xVREVfSU5TVEFMTF9UT19ERUZBVUxUX0JVSUxELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0lOQ0xVREVfSU5TVEFMTF9UT19ERUZBVUxUX0JVSUxELnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1ZTX0lOQ0xVREVfSU5TVEFMTF9UT19ERUZBVUxUX0JVSUxECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKwogSW5jbHVkZSBgYElOU1RBTExgYCB0YXJnZXQgdG8gZGVmYXVsdCBidWlsZC4KIAogSW4gVmlzdWFsIFN0dWRpbyBzb2x1dGlvbiwgYnkgZGVmYXVsdCB0aGUgYGBJTlNUQUxMYGAgdGFyZ2V0IHdpbGwgbm90IGJlIHBhcnQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfSU5DTFVERV9QQUNLQUdFX1RPX0RFRkFVTFRfQlVJTEQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19JTkNMVURFX1BBQ0tBR0VfVE9fREVGQVVMVF9CVUlMRC5yc3QKaW5kZXggNjkzYmE0NS4uYWI0ZDBmYSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19JTkNMVURFX1BBQ0tBR0VfVE9fREVGQVVMVF9CVUlMRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19JTkNMVURFX1BBQ0tBR0VfVE9fREVGQVVMVF9CVUlMRC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19JTkNMVURFX1BBQ0tBR0VfVE9fREVGQVVMVF9CVUlMRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy44CisKIEluY2x1ZGUgYGBQQUNLQUdFYGAgdGFyZ2V0IHRvIGRlZmF1bHQgYnVpbGQuCiAKIEluIFZpc3VhbCBTdHVkaW8gc29sdXRpb24sIGJ5IGRlZmF1bHQgdGhlIGBgUEFDS0FHRWBgIHRhcmdldCB3aWxsIG5vdCBiZSBwYXJ0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19KVVNUX01ZX0NPREVfREVCVUdHSU5HLnJzdAppbmRleCA1NDZjZGY0Li4wYTAyYTMyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfSlVTVF9NWV9DT0RFX0RFQlVHR0lORy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19KVVNUX01ZX0NPREVfREVCVUdHSU5HCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTUKKwogRW5hYmxlIEp1c3QgTXkgQ29kZSB3aXRoIFZpc3VhbCBTdHVkaW8gZGVidWdnZXIuCiAKIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSA6cHJvcF90Z3Q6YFZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkdgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX05zaWdodFRlZ3JhX1ZFUlNJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19Oc2lnaHRUZWdyYV9WRVJTSU9OLnJzdAppbmRleCAzODZjM2E5Li4yOTgyYjM5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX05zaWdodFRlZ3JhX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfTnNpZ2h0VGVncmFfVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19Oc2lnaHRUZWdyYV9WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBXaGVuIHVzaW5nIGEgVmlzdWFsIFN0dWRpbyBnZW5lcmF0b3Igd2l0aCB0aGUKIDp2YXJpYWJsZTpgQ01BS0VfU1lTVEVNX05BTUVgIHZhcmlhYmxlIHNldCB0byBgYEFuZHJvaWRgYCwKIHRoaXMgdmFyaWFibGUgY29udGFpbnMgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9OQU1FLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fTkFNRS5yc3QKaW5kZXggN2E0NjQyYS4uN2QwOGFkZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9OQU1FLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX05BTUUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfVlNfUExBVEZPUk1fTkFNRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogVmlzdWFsIFN0dWRpbyB0YXJnZXQgcGxhdGZvcm0gbmFtZSB1c2VkIGJ5IHRoZSBjdXJyZW50IGdlbmVyYXRvci4KIAogVlMgOCBhbmQgYWJvdmUgYWxsb3cgcHJvamVjdCBmaWxlcyB0byBzcGVjaWZ5IGEgdGFyZ2V0IHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9OQU1FX0RFRkFVTFQucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9OQU1FX0RFRkFVTFQucnN0CmluZGV4IGMxOGU2ZmQuLjY0NDAxNzQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fTkFNRV9ERUZBVUxULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX05BTUVfREVGQVVMVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19QTEFURk9STV9OQU1FX0RFRkFVTFQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0LjMKKwogRGVmYXVsdCBmb3IgdGhlIFZpc3VhbCBTdHVkaW8gdGFyZ2V0IHBsYXRmb3JtIG5hbWUgZm9yIHRoZSBjdXJyZW50IGdlbmVyYXRvcgogd2l0aG91dCBjb25zaWRlcmluZyB0aGUgdmFsdWUgb2YgdGhlIDp2YXJpYWJsZTpgQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNYAogdmFyaWFibGUuICBGb3IgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBmb3IgVlMgMjAxNyBhbmQgYmVsb3cgdGhpcyBpcwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREEucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREEucnN0CmluZGV4IDY3YjdmNzQuLmU2NjM3OGQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfQ1VEQS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREEKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogTlZJRElBIENVREEgVG9vbGtpdCB2ZXJzaW9uIHdob3NlIFZpc3VhbCBTdHVkaW8gdG9vbHNldCB0byB1c2UuCiAKIFRoZSA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBhYm92ZSBzdXBwb3J0IHVzaW5nCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfQ1VEQV9DVVNUT01fRElSLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVIucnN0CmluZGV4IDA2MDY0OGEuLjc0ZGI2YjEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVIucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogUGF0aCB0byBzdGFuZGFsb25lIE5WSURJQSBDVURBIFRvb2xraXQgKGVnLiBleHRyYWN0ZWQgZnJvbSBpbnN0YWxsZXIpLgogCiBUaGUgOnJlZjpgVmlzdWFsIFN0dWRpbyBHZW5lcmF0b3JzYCBmb3IgVlMgMjAxMCBhbmQgYWJvdmUgc3VwcG9ydCB1c2luZwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0hPU1RfQVJDSElURUNUVVJFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9IT1NUX0FSQ0hJVEVDVFVSRS5yc3QKaW5kZXggOTlhYzkwZC4uODRkNzIxMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0hPU1RfQVJDSElURUNUVVJFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfSE9TVF9BUkNISVRFQ1RVUkUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9IT1NUX0FSQ0hJVEVDVFVSRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjgKKwogVmlzdWFsIFN0dWRpbyBwcmVmZXJyZWQgdG9vbCBhcmNoaXRlY3R1cmUuCiAKIFRoZSA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEzIGFuZCBhYm92ZSBzdXBwb3J0IHVzaW5nCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfVkVSU0lPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfVkVSU0lPTi5yc3QKaW5kZXggNGQ5Yjk3OC4uNjRmMmUzOSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19QTEFURk9STV9UT09MU0VUX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WRVJTSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfVkVSU0lPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVmlzdWFsIFN0dWRpbyBQbGF0Zm9ybSBUb29sc2V0IHZlcnNpb24uCiAKIFRoZSA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDE3IGFuZCBhYm92ZSBhbGxvdyB0bwpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfRVhDTFVERV9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19FWENMVURFX0RJUkVDVE9SSUVTLnJzdAppbmRleCAzNmM0ZGNjLi45NjlmMzI4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19FWENMVURFX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19FWENMVURFX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw0ICsxLDYgQEAKIENNQUtFX1ZTX1NES19FWENMVURFX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoaXMgdmFyaWFibGUgYWxsb3dzIHRvIG92ZXJyaWRlIFZpc3VhbCBTdHVkaW8gZGVmYXVsdCBFeGNsdWRlIERpcmVjdG9yaWVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfRVhFQ1VUQUJMRV9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19FWEVDVVRBQkxFX0RJUkVDVE9SSUVTLnJzdAppbmRleCAzZWM3NTViLi43NDU1ZTEwIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19FWEVDVVRBQkxFX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19FWEVDVVRBQkxFX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw0ICsxLDYgQEAKIENNQUtFX1ZTX1NES19FWEVDVVRBQkxFX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoaXMgdmFyaWFibGUgYWxsb3dzIHRvIG92ZXJyaWRlIFZpc3VhbCBTdHVkaW8gZGVmYXVsdCBFeGVjdXRhYmxlIERpcmVjdG9yaWVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfSU5DTFVERV9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19JTkNMVURFX0RJUkVDVE9SSUVTLnJzdAppbmRleCBkYTEwYmRlLi4zZjI3YWVhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19JTkNMVURFX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19JTkNMVURFX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw0ICsxLDYgQEAKIENNQUtFX1ZTX1NES19JTkNMVURFX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoaXMgdmFyaWFibGUgYWxsb3dzIHRvIG92ZXJyaWRlIFZpc3VhbCBTdHVkaW8gZGVmYXVsdCBJbmNsdWRlIERpcmVjdG9yaWVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfTElCUkFSWV9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19MSUJSQVJZX0RJUkVDVE9SSUVTLnJzdAppbmRleCBiMzM3NTRhLi4zNWU0NWEzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19MSUJSQVJZX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19MSUJSQVJZX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw0ICsxLDYgQEAKIENNQUtFX1ZTX1NES19MSUJSQVJZX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoaXMgdmFyaWFibGUgYWxsb3dzIHRvIG92ZXJyaWRlIFZpc3VhbCBTdHVkaW8gZGVmYXVsdCBMaWJyYXJ5IERpcmVjdG9yaWVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfTElCUkFSWV9XSU5SVF9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19MSUJSQVJZX1dJTlJUX0RJUkVDVE9SSUVTLnJzdAppbmRleCBiMDIyMjE1Li4yNGI5MGI2IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19MSUJSQVJZX1dJTlJUX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19MSUJSQVJZX1dJTlJUX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw1ICsxLDcgQEAKIENNQUtFX1ZTX1NES19MSUJSQVJZX1dJTlJUX0RJUkVDVE9SSUVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoaXMgdmFyaWFibGUgYWxsb3dzIHRvIG92ZXJyaWRlIFZpc3VhbCBTdHVkaW8gZGVmYXVsdCBMaWJyYXJ5IFdpblJUCiBEaXJlY3Rvcmllcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX1JFRkVSRU5DRV9ESVJFQ1RPUklFUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19SRUZFUkVOQ0VfRElSRUNUT1JJRVMucnN0CmluZGV4IGMwM2YwYWUuLjAwMzgyZmUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX1JFRkVSRU5DRV9ESVJFQ1RPUklFUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfUkVGRVJFTkNFX0RJUkVDVE9SSUVTLnJzdApAQCAtMSw0ICsxLDYgQEAKIENNQUtFX1ZTX1NES19SRUZFUkVOQ0VfRElSRUNUT1JJRVMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBUaGlzIHZhcmlhYmxlIGFsbG93cyB0byBvdmVycmlkZSBWaXN1YWwgU3R1ZGlvIGRlZmF1bHQgUmVmZXJlbmNlIERpcmVjdG9yaWVzLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfU09VUkNFX0RJUkVDVE9SSUVTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfU0RLX1NPVVJDRV9ESVJFQ1RPUklFUy5yc3QKaW5kZXggMGM3M2YwNi4uYjk4Yzk5OSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19TREtfU09VUkNFX0RJUkVDVE9SSUVTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1NES19TT1VSQ0VfRElSRUNUT1JJRVMucnN0CkBAIC0xLDQgKzEsNiBAQAogQ01BS0VfVlNfU0RLX1NPVVJDRV9ESVJFQ1RPUklFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoaXMgdmFyaWFibGUgYWxsb3dzIHRvIG92ZXJyaWRlIFZpc3VhbCBTdHVkaW8gZGVmYXVsdCBTb3VyY2UgRGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1dJTkRPV1NfVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9WRVJTSU9OLnJzdAppbmRleCA4M2I5YmMxLi5jYjU1YmMyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1dJTkRPV1NfVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfV0lORE9XU19UQVJHRVRfUExBVEZPUk1fVkVSU0lPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9WU19XSU5ET1dTX1RBUkdFVF9QTEFURk9STV9WRVJTSU9OCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBWaXN1YWwgU3R1ZGlvIFdpbmRvd3MgVGFyZ2V0IFBsYXRmb3JtIFZlcnNpb24uCiAKIFdoZW4gdGFyZ2V0aW5nIFdpbmRvd3MgMTAgYW5kIGFib3ZlIFZpc3VhbCBTdHVkaW8gMjAxNSBhbmQgYWJvdmUgc3VwcG9ydApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19XSU5SVF9CWV9ERUZBVUxULnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfVlNfV0lOUlRfQllfREVGQVVMVC5yc3QKaW5kZXggMmJhOGZlMi4uOWRlZDg1ZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9WU19XSU5SVF9CWV9ERUZBVUxULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1ZTX1dJTlJUX0JZX0RFRkFVTFQucnN0CkBAIC0xLDggKzEsMjAgQEAKIENNQUtFX1ZTX1dJTlJUX0JZX0RFRkFVTFQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGVsbCA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBhYm92ZSB0aGF0IHRoZQotdGFyZ2V0IHBsYXRmb3JtIGNvbXBpbGVzIGFzIFdpblJUIGJ5IGRlZmF1bHQgKGNvbXBpbGVzIHdpdGggYGAvWldgYCkuCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKK0luZm9ybSA6cmVmOmBWaXN1YWwgU3R1ZGlvIEdlbmVyYXRvcnNgIGZvciBWUyAyMDEwIGFuZCBhYm92ZSB0aGF0IHRoZQordGFyZ2V0IHBsYXRmb3JtIGVuYWJsZXMgV2luUlQgY29tcGlsYXRpb24gYnkgZGVmYXVsdCBhbmQgaXQgbmVlZHMgdG8KK2JlIGV4cGxpY2l0bHkgZGlzYWJsZWQgaWYgYGAvWldgYCBvciA6cHJvcF90Z3Q6YFZTX1dJTlJUX0NPTVBPTkVOVGAgaXMKK29taXR0ZWQgKGFzIG9wcG9zZWQgdG8gZW5hYmxpbmcgaXQgd2hlbiBlaXRoZXIgb2YgdGhvc2Ugb3B0aW9ucyBpcworcHJlc2VudCkKKworVGhpcyBtYWtlcyBjbWFrZSBjb25maWd1cmF0aW9uIGNvbnNpc3RlbnQgaW4gdGVybXMgb2YgV2luUlQgYW1vbmcKK3BsYXRmb3JtcyAtIGlmIHlvdSBkaWQgbm90IGVuYWJsZSB0aGUgV2luUlQgY29tcGlsYXRpb24gZXhwbGljaXRseSwgaXQKK3dpbGwgYmUgZGlzYWJsZWQgKGJ5IGVpdGhlciBub3QgZW5hYmxpbmcgaXQgb3IgZXhwbGljaXRseSBkaXNhYmxpbmcgaXQpCisKK05vdGU6IFdpblJUIGNvbXBpbGF0aW9uIGlzIGFsd2F5cyBleHBsaWNpdGx5IGRpc2FibGVkIGZvciBDIGxhbmd1YWdlCitzb3VyY2UgZmlsZXMsIGV2ZW4gaWYgaXQgaXMgZXhwbGljbHR5IGVuYWJsZWQgZm9yIGEgcHJvamVjdAogCiBUaGlzIHZhcmlhYmxlIGlzIG1lYW50IHRvIGJlIHNldCBieSBhCiA6dmFyaWFibGU6YHRvb2xjaGFpbiBmaWxlIDxDTUFLRV9UT09MQ0hBSU5fRklMRT5gIGZvciBzdWNoIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfV0lORE9XU19FWFBPUlRfQUxMX1NZTUJPTFMucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKaW5kZXggMTYzNjg0Mi4uN2IwMTE4NSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIERlZmF1bHQgdmFsdWUgZm9yIDpwcm9wX3RndDpgV0lORE9XU19FWFBPUlRfQUxMX1NZTUJPTFNgIHRhcmdldCBwcm9wZXJ0eS4KIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwcm9wZXJ0eSBvbiBlYWNoIHRhcmdldCBhcyBpdCBpcwogY3JlYXRlZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfQVRUUklCVVRFX2FuLWF0dHJpYnV0ZS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX0FUVFJJQlVURV9hbi1hdHRyaWJ1dGUucnN0CmluZGV4IGJlNjgzZDYuLjkwZTRjMGUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfQVRUUklCVVRFX2FuLWF0dHJpYnV0ZS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9BVFRSSUJVVEVfYW4tYXR0cmlidXRlLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX0FUVFJJQlVURV88YW4tYXR0cmlidXRlPgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTZXQgWGNvZGUgdGFyZ2V0IGF0dHJpYnV0ZXMgZGlyZWN0bHkuCiAKIFRlbGwgdGhlIDpnZW5lcmF0b3I6YFhjb2RlYCBnZW5lcmF0b3IgdG8gc2V0ICc8YW4tYXR0cmlidXRlPicgdG8gYSBnaXZlbiB2YWx1ZQpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9HRU5FUkFURV9TQ0hFTUUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9HRU5FUkFURV9TQ0hFTUUucnN0CmluZGV4IDViMWEwMDMuLjQwMDcwZTEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfR0VORVJBVEVfU0NIRU1FLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX0dFTkVSQVRFX1NDSEVNRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9HRU5FUkFURV9TQ0hFTUUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjkKKwogSWYgZW5hYmxlZCwgdGhlIDpnZW5lcmF0b3I6YFhjb2RlYCBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBzY2hlbWEgZmlsZXMuICBUaGVzZQogYXJlIHVzZWZ1bCB0byBpbnZva2UgYW5hbHl6ZSwgYXJjaGl2ZSwgYnVpbGQtZm9yLXRlc3RpbmcgYW5kIHRlc3QKIGFjdGlvbnMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9HRU5FUkFURV9UT1BfTEVWRUxfUFJPSkVDVF9PTkxZLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfR0VORVJBVEVfVE9QX0xFVkVMX1BST0pFQ1RfT05MWS5yc3QKaW5kZXggZWEzZTI0MC4uMzhkMDQzYyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9HRU5FUkFURV9UT1BfTEVWRUxfUFJPSkVDVF9PTkxZLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX0dFTkVSQVRFX1RPUF9MRVZFTF9QUk9KRUNUX09OTFkucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfR0VORVJBVEVfVE9QX0xFVkVMX1BST0pFQ1RfT05MWQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIElmIGVuYWJsZWQsIHRoZSA6Z2VuZXJhdG9yOmBYY29kZWAgZ2VuZXJhdG9yIHdpbGwgZ2VuZXJhdGUgb25seSBhCiBzaW5nbGUgWGNvZGUgcHJvamVjdCBmaWxlIGZvciB0aGUgdG9wbW9zdCA6Y29tbWFuZDpgcHJvamVjdCgpYCBjb21tYW5kCiBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgb25lIGZvciBldmVyeSBgYHByb2plY3QoKWBgIGNvbW1hbmQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUi5yc3QKaW5kZXggYjk3MmJhNS4uYjNmYTkzYiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfQUREUkVTU19TQU5JVElaRVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0FERFJFU1NfU0FOSVRJWkVSLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBBZGRyZXNzIFNhbml0aXplcmBgIGluIHRoZSBEaWFnbm9zdGljcwogc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfQUREUkVTU19TQU5JVElaRVJfVVNFX0FGVEVSX1JFVFVSTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOLnJzdAppbmRleCA1OWViMzJkLi4xYTBhMTdhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUl9VU0VfQUZURVJfUkVUVVJOCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgRGV0ZWN0IHVzZSBvZiBzdGFjayBhZnRlciByZXR1cm5gYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RFQlVHX0RPQ1VNRU5UX1ZFUlNJT05JTkcucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfREVCVUdfRE9DVU1FTlRfVkVSU0lPTklORy5yc3QKaW5kZXggYTI2NGQzNi4uOTE3ZmM3ZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfREVCVUdfRE9DVU1FTlRfVkVSU0lPTklORy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfREVCVUdfRE9DVU1FTlRfVkVSU0lPTklORy5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfREVCVUdfRE9DVU1FTlRfVkVSU0lPTklORwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBXaGV0aGVyIHRvIGVuYWJsZQogYGBBbGxvdyBkZWJ1Z2dpbmcgd2hlbiB1c2luZyBkb2N1bWVudCBWZXJzaW9ucyBCcm93c2VyYGAKIGluIHRoZSBPcHRpb25zIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9ESVNBQkxFX01BSU5fVEhSRUFEX0NIRUNLRVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRElTQUJMRV9NQUlOX1RIUkVBRF9DSEVDS0VSLnJzdAppbmRleCA3MWJjZjQyLi5iNjA0NTk4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9ESVNBQkxFX01BSU5fVEhSRUFEX0NIRUNLRVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfRElTQUJMRV9NQUlOX1RIUkVBRF9DSEVDS0VSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBkaXNhYmxlIHRoZSBgYE1haW4gVGhyZWFkIENoZWNrZXJgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RZTkFNSUNfTElCUkFSWV9MT0FEUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJQlJBUllfTE9BRFMucnN0CmluZGV4IDUzZjU1ZTYuLjA3MGRkZmMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RZTkFNSUNfTElCUkFSWV9MT0FEUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSUJSQVJZX0xPQURTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJQlJBUllfTE9BRFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYER5bmFtaWMgTGlicmFyeSBMb2Fkc2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0RZTkFNSUNfTElOS0VSX0FQSV9VU0FHRS5yc3QKaW5kZXggNzg0Y2ViNi4uNDI5MTgxNiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9EWU5BTUlDX0xJTktFUl9BUElfVVNBR0UucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX0RZTkFNSUNfTElOS0VSX0FQSV9VU0FHRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgRHluYW1pYyBMaW5rZXIgQVBJIHVzYWdlYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiNjk4ZAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0VOVklST05NRU5ULnJzdApAQCAtMCwwICsxLDE3IEBACitDTUFLRV9YQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKK1NwZWNpZnkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBBcmd1bWVudHMKK3NlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCisKK0lmIHNldCB0byBhIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB2YWx1ZXMgb2YgdGhlIGZvcm0KK2BgTVlWQVI9dmFsdWVgYCB0aG9zZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUKK3NjaGVtZS4KKworVGhpcyB2YXJpYWJsZSBpbml0aWFsaXplcyB0aGUgOnByb3BfdGd0OmBYQ09ERV9TQ0hFTUVfRU5WSVJPTk1FTlRgCitwcm9wZXJ0eSBvbiBhbGwgdGFyZ2V0cy4KKworUGxlYXNlIHJlZmVyIHRvIHRoZSA6cHJvcF90Z3Q6YFhDT0RFX0dFTkVSQVRFX1NDSEVNRWAgdGFyZ2V0IHByb3BlcnR5Citkb2N1bWVudGF0aW9uIHRvIHNlZSBhbGwgWGNvZGUgc2NoZW1hIHJlbGF0ZWQgcHJvcGVydGllcy4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0dVQVJEX01BTExPQy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9HVUFSRF9NQUxMT0MucnN0CmluZGV4IDkzNTAyNDQuLjQ4YjQ4MWUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX0dVQVJEX01BTExPQy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfR1VBUkRfTUFMTE9DLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9HVUFSRF9NQUxMT0MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYEd1YXJkIE1hbGxvY2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFJTl9USFJFQURfQ0hFQ0tFUl9TVE9QLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUC5yc3QKaW5kZXggNDVhMmRhZC4uZWY4ZWQ5YiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFJTl9USFJFQURfQ0hFQ0tFUl9TVE9QLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUlOX1RIUkVBRF9DSEVDS0VSX1NUT1AucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX01BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBgYE1haW4gVGhyZWFkIENoZWNrZXJgYCBvcHRpb24KIGBgUGF1c2Ugb24gaXNzdWVzYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX0dVQVJEX0VER0VTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19HVUFSRF9FREdFUy5yc3QKaW5kZXggOTRkMWM2MS4uZDRhZTllYiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX0dVQVJEX0VER0VTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfR1VBUkRfRURHRVMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19HVUFSRF9FREdFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgTWFsbG9jIEd1YXJkIEVkZ2VzYGAKIGluIHRoZSBEaWFnbm9zdGljcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgWGNvZGUgc2NoZW1lLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfU0NSSUJCTEUucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NDUklCQkxFLnJzdAppbmRleCA5YmYwZWI0Li5lMjhmNmExIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfU0NSSUJCTEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19TQ1JJQkJMRS5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NDUklCQkxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBNYWxsb2MgU2NyaWJibGVgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19TVEFDSy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfU1RBQ0sucnN0CmluZGV4IDRjYzIxZWUuLjU5ZmNmZDMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX01BTExPQ19TVEFDSy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfTUFMTE9DX1NUQUNLLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9NQUxMT0NfU1RBQ0sKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMworCiBXaGV0aGVyIHRvIGVuYWJsZSBgYE1hbGxvYyBTdGFja2BgIGluIHRoZSBEaWFnbm9zdGljcwogc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUi5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSLnJzdAppbmRleCA2ZDFiNTZlLi41MTFlYjA0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgVGhyZWFkIFNhbml0aXplcmBgIGluIHRoZSBEaWFnbm9zdGljcwogc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QLnJzdCBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVJfU1RPUC5yc3QKaW5kZXggZGU0MDQ3OC4uNmYzYjhjZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVEhSRUFEX1NBTklUSVpFUl9TVE9QLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9USFJFQURfU0FOSVRJWkVSX1NUT1AucnN0CkBAIC0xLDYgKzEsOCBAQAogQ01BS0VfWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVJfU1RPUAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgVGhyZWFkIFNhbml0aXplciAtIFBhdXNlIG9uIGlzc3Vlc2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVIucnN0IGIvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVIucnN0CmluZGV4IGVjNWRmNjYuLjQ2ZDNjY2YgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1VOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUi5yc3QKQEAgLTEsNiArMSw4IEBACiBDTUFLRV9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcmBgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfVU5ERUZJTkVEX0JFSEFWSU9VUl9TQU5JVElaRVJfU1RPUC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QLnJzdAppbmRleCBkY2VjOWIwLi44ZmE1ZWNlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEzCisKIFdoZXRoZXIgdG8gZW5hYmxlIGBgVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplcmBgIG9wdGlvbgogYGBQYXVzZSBvbiBpc3N1ZXNgYAogaW4gdGhlIERpYWdub3N0aWNzIHNlY3Rpb24gb2YgdGhlIGdlbmVyYXRlZCBYY29kZSBzY2hlbWUuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9XT1JLSU5HX0RJUkVDVE9SWS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyMWU0OAotLS0gL2Rldi9udWxsCisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZLnJzdApAQCAtMCwwICsxLDE0IEBACitDTUFLRV9YQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE3CisKK1NwZWNpZnkgdGhlIGBgV29ya2luZyBEaXJlY3RvcnlgYCBvZiB0aGUgKlJ1biogYW5kICpQcm9maWxlKgorYWN0aW9ucyBpbiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KKworVGhpcyB2YXJpYWJsZSBpbml0aWFsaXplcyB0aGUKKzpwcm9wX3RndDpgWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZYAorcHJvcGVydHkgb24gYWxsIHRhcmdldHMuCisKK1BsZWFzZSByZWZlciB0byB0aGUgOnByb3BfdGd0OmBYQ09ERV9HRU5FUkFURV9TQ0hFTUVgIHRhcmdldCBwcm9wZXJ0eQorZG9jdW1lbnRhdGlvbiB0byBzZWUgYWxsIFhjb2RlIHNjaGVtYSByZWxhdGVkIHByb3BlcnRpZXMuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9aT01CSUVfT0JKRUNUUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NNQUtFX1hDT0RFX1NDSEVNRV9aT01CSUVfT0JKRUNUUy5yc3QKaW5kZXggODJlOWQ3Ni4uZmQ5NDg4ZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DTUFLRV9YQ09ERV9TQ0hFTUVfWk9NQklFX09CSkVDVFMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ01BS0VfWENPREVfU0NIRU1FX1pPTUJJRV9PQkpFQ1RTLnJzdApAQCAtMSw2ICsxLDggQEAKIENNQUtFX1hDT0RFX1NDSEVNRV9aT01CSUVfT0JKRUNUUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTMKKwogV2hldGhlciB0byBlbmFibGUgYGBab21iaWUgT2JqZWN0c2BgCiBpbiB0aGUgRGlhZ25vc3RpY3Mgc2VjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIFhjb2RlIHNjaGVtZS4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DUEFDS19JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1BBQ0tfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUy5yc3QKaW5kZXggODNkNWNlNy4uMDFmYjE4OSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DUEFDS19JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NQQUNLX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1BBQ0tfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjExCisKIERlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGltcGxpY2l0bHkgY3JlYXRlZCBkaXJlY3RvcmllcyBkdXJpbmcgcGFja2FnaW5nLgogCiBUaGlzIHZhcmlhYmxlIHNlcnZlcyB0aGUgc2FtZSBwdXJwb3NlIGR1cmluZyBwYWNrYWdpbmcgYXMgdGhlCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0JJTkFSWV9ESVJFQ1RPUlkucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9CSU5BUllfRElSRUNUT1JZLnJzdAppbmRleCBmZDg0NjFmLi44NDEzZTM3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0JJTkFSWV9ESVJFQ1RPUlkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQklOQVJZX0RJUkVDVE9SWS5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9CSU5BUllfRElSRUNUT1JZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYEJ1aWxkRGlyZWN0b3J5YGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0JVSUxEX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9CVUlMRF9DT01NQU5ELnJzdAppbmRleCA3YjEzYmEwLi4zMWM0NGUyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0JVSUxEX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQlVJTERfQ09NTUFORC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9CVUlMRF9DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYE1ha2VDb21tYW5kYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0JVSUxEX05BTUUucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9CVUlMRF9OQU1FLnJzdAppbmRleCBkMjVkODRjLi4zZDA4Mzk3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0JVSUxEX05BTUUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQlVJTERfTkFNRS5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9CVUlMRF9OQU1FCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYEJ1aWxkTmFtZWBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9CWlJfQ09NTUFORC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0JaUl9DT01NQU5ELnJzdAppbmRleCA0NzRkNjIxLi4wYzA1ZDFhIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0JaUl9DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0JaUl9DT01NQU5ELnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0JaUl9DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBCWlJDb21tYW5kYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0JaUl9VUERBVEVfT1BUSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0JaUl9VUERBVEVfT1BUSU9OUy5yc3QKaW5kZXggZDBmOTU3OS4uNGRkNWU1YiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9CWlJfVVBEQVRFX09QVElPTlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQlpSX1VQREFURV9PUFRJT05TLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0JaUl9VUERBVEVfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYEJaUlVwZGF0ZU9wdGlvbnNgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ0hBTkdFX0lELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ0hBTkdFX0lELnJzdAppbmRleCBhNDIzZjQ5Li5hNmQxNWY3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NIQU5HRV9JRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DSEFOR0VfSUQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ0hBTkdFX0lECiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNwZWNpZnkgdGhlIENUZXN0IGBgQ2hhbmdlSWRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DSEVDS09VVF9DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ0hFQ0tPVVRfQ09NTUFORC5yc3QKaW5kZXggZGEyNTZmMi4uODUyYzI4ZSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DSEVDS09VVF9DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NIRUNLT1VUX0NPTU1BTkQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfQ0hFQ0tPVVRfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogVGVsbCB0aGUgOmNvbW1hbmQ6YGN0ZXN0X3N0YXJ0YCBjb21tYW5kIGhvdyB0byBjaGVja291dCBvciBpbml0aWFsaXplCiB0aGUgc291cmNlIGRpcmVjdG9yeSBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFLnJzdAppbmRleCBjOTA1NDgwLi4zOTI4NDVlIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DT05GSUdVUkFUSU9OX1RZUEUucnN0CkBAIC0xLDUgKzEsMTAgQEAKIENURVNUX0NPTkZJR1VSQVRJT05fVFlQRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYERlZmF1bHRDVGVzdENvbmZpZ3VyYXRpb25UeXBlYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCisKK0lmIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgaXMgc2V0IHZpYSBgYC1DIDxjZmc+YGAgZnJvbSB0aGUgY29tbWFuZCBsaW5lCit0aGVuIHRoaXMgdmFyaWFibGUgaXMgcG9wdWxhdGVkIGFjY29yZGluZ2x5LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DT05GSUdVUkVfQ09NTUFORC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPTkZJR1VSRV9DT01NQU5ELnJzdAppbmRleCA1NTYxYjZkLi45OTJlZjQ3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPTkZJR1VSRV9DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPTkZJR1VSRV9DT01NQU5ELnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0NPTkZJR1VSRV9DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBDb25maWd1cmVDb21tYW5kYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPVkVSQUdFX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DT1ZFUkFHRV9DT01NQU5ELnJzdAppbmRleCBhNzg3OTJlLi5mNTQyNWNiIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPVkVSQUdFX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09WRVJBR0VfQ09NTUFORC5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DT1ZFUkFHRV9DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYENvdmVyYWdlQ29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NPVkVSQUdFX0VYVFJBX0ZMQUdTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09WRVJBR0VfRVhUUkFfRkxBR1MucnN0CmluZGV4IDI5ODE5NTUuLjM5ZDliNWQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09WRVJBR0VfRVhUUkFfRkxBR1MucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ09WRVJBR0VfRVhUUkFfRkxBR1MucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfQ09WRVJBR0VfRVhUUkFfRkxBR1MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYENvdmVyYWdlRXh0cmFGbGFnc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVJMX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVJMX09QVElPTlMucnN0CmluZGV4IGZjNWRmYzQuLjE0YWY0ZTQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VSTF9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVUkxfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9DVVJMX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBDdXJsT3B0aW9uc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fQ09WRVJBR0VfRVhDTFVERS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9DT1ZFUkFHRV9FWENMVURFLnJzdAppbmRleCBkNTg5M2M5Li44NGJhMTJkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9DT1ZFUkFHRV9FWENMVURFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9DT1ZFUkFHRV9FWENMVURFLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9DT1ZFUkFHRV9FWENMVURFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGV4Y2x1ZGUgZmlsZXMgYnkgdGhlaXIKIHBhdGggZnJvbSBjb3ZlcmFnZSBvdXRwdXQgYnkgdGhlIDpjb21tYW5kOmBjdGVzdF9jb3ZlcmFnZWAgY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfRVhDRVBUSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX0VYQ0VQVElPTi5yc3QKaW5kZXggY2Q2NWFlMy4uNzE5MWNlNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfRVhDRVBUSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9FWENFUFRJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX0VSUk9SX0VYQ0VQVElPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGV4Y2x1ZGUgd2hlbiBkZXRlY3RpbmcKIGVycm9yIG1lc3NhZ2VzIGluIGJ1aWxkIG91dHB1dHMgYnkgdGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YCBjb21tYW5kLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9NQVRDSC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9NQVRDSC5yc3QKaW5kZXggNTU4ZjVlNS4uNWQyMTNmMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfTUFUQ0gucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX01BVENILnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9FUlJPUl9NQVRDSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBBIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IGVycm9yIG1lc3NhZ2VzIGluCiBidWlsZCBvdXRwdXRzIGJ5IHRoZSA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfUE9TVF9DT05URVhULnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX1BPU1RfQ09OVEVYVC5yc3QKaW5kZXggNjE0ODU5Yi4uNDUyZDA2MCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfUE9TVF9DT05URVhULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9QT1NUX0NPTlRFWFQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX0VSUk9SX1BPU1RfQ09OVEVYVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVGhlIG51bWJlciBvZiBsaW5lcyB0byBpbmNsdWRlIGFzIGNvbnRleHQgd2hpY2ggZm9sbG93IGFuIGVycm9yIG1lc3NhZ2UgYnkgdGhlCiA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZC4gVGhlIGRlZmF1bHQgaXMgMTAuCiAKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX1BSRV9DT05URVhULnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX0VSUk9SX1BSRV9DT05URVhULnJzdAppbmRleCA3NGRjNDdhLi5iNzcxN2RkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9FUlJPUl9QUkVfQ09OVEVYVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fRVJST1JfUFJFX0NPTlRFWFQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX0VSUk9SX1BSRV9DT05URVhUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoZSBudW1iZXIgb2YgbGluZXMgdG8gaW5jbHVkZSBhcyBjb250ZXh0IHdoaWNoIHByZWNlZGUgYW4gZXJyb3IgbWVzc2FnZSBieQogdGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YCBjb21tYW5kLiBUaGUgZGVmYXVsdCBpcyAxMC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9GQUlMRURfVEVTVF9PVVRQVVRfU0laRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX0ZBSUxFRF9URVNUX09VVFBVVF9TSVpFLnJzdAppbmRleCA1YWVhZTg4Li4zMWJhMDk5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX0ZBSUxFRF9URVNUX09VVFBVVF9TSVpFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX0ZBSUxFRF9URVNUX09VVFBVVF9TSVpFLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9NQVhJTVVNX0ZBSUxFRF9URVNUX09VVFBVVF9TSVpFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogV2hlbiBzYXZpbmcgYSBmYWlsaW5nIHRlc3QncyBvdXRwdXQsIHRoaXMgaXMgdGhlIG1heGltdW0gc2l6ZSwgaW4gYnl0ZXMsIHRoYXQKIHdpbGwgYmUgY29sbGVjdGVkIGJ5IHRoZSA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZC4gRGVmYXVsdHMgdG8gMzA3MjAwCiAoMzAwIEtpQikuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX05VTUJFUl9PRl9FUlJPUlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9OVU1CRVJfT0ZfRVJST1JTLnJzdAppbmRleCA5MjBjYjA0Li5lNWJlMWFkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX05VTUJFUl9PRl9FUlJPUlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01BWElNVU1fTlVNQkVSX09GX0VSUk9SUy5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DVVNUT01fTUFYSU1VTV9OVU1CRVJfT0ZfRVJST1JTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGluIGEgc2luZ2xlIGJ1aWxkIHN0ZXAgd2hpY2ggd2lsbCBiZSBkZXRlY3RlZC4KIEFmdGVyIHRoaXMsIHRoZSA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZCB3aWxsIHRydW5jYXRlIHRoZSBvdXRwdXQuCiBEZWZhdWx0cyB0byA1MC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01BWElNVU1fTlVNQkVSX09GX1dBUk5JTkdTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01BWElNVU1fTlVNQkVSX09GX1dBUk5JTkdTLnJzdAppbmRleCBhMWYxY2MxLi5iNTEzYTVjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX05VTUJFUl9PRl9XQVJOSU5HUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUFYSU1VTV9OVU1CRVJfT0ZfV0FSTklOR1MucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX01BWElNVU1fTlVNQkVSX09GX1dBUk5JTkdTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFRoZSBtYXhpbXVtIG51bWJlciBvZiB3YXJuaW5ncyBpbiBhIHNpbmdsZSBidWlsZCBzdGVwIHdoaWNoIHdpbGwgYmUgZGV0ZWN0ZWQuCiBBZnRlciB0aGlzLCB0aGUgOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgIGNvbW1hbmQgd2lsbCB0cnVuY2F0ZSB0aGUgb3V0cHV0LgogRGVmYXVsdHMgdG8gNTAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NQVhJTVVNX1BBU1NFRF9URVNUX09VVFBVVF9TSVpFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01BWElNVU1fUEFTU0VEX1RFU1RfT1VUUFVUX1NJWkUucnN0CmluZGV4IDFmYmI4YzUuLjA4NzYyZDggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01BWElNVU1fUEFTU0VEX1RFU1RfT1VUUFVUX1NJWkUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01BWElNVU1fUEFTU0VEX1RFU1RfT1VUUFVUX1NJWkUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX01BWElNVU1fUEFTU0VEX1RFU1RfT1VUUFVUX1NJWkUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBXaGVuIHNhdmluZyBhIHBhc3NpbmcgdGVzdCdzIG91dHB1dCwgdGhpcyBpcyB0aGUgbWF4aW11bSBzaXplLCBpbiBieXRlcywgdGhhdAogd2lsbCBiZSBjb2xsZWN0ZWQgYnkgdGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YCBjb21tYW5kLiBEZWZhdWx0cyB0byAxMDI0CiAoMSBLaUIpLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUVNQ0hFQ0tfSUdOT1JFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX01FTUNIRUNLX0lHTk9SRS5yc3QKaW5kZXggNTc4NTc2Yy4uNDA1ZmMzMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fTUVNQ0hFQ0tfSUdOT1JFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9NRU1DSEVDS19JR05PUkUucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX01FTUNIRUNLX0lHTk9SRQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gdXNlIHRvIGV4Y2x1ZGUgdGVzdHMgZHVyaW5nIHRoZQogOmNvbW1hbmQ6YGN0ZXN0X21lbWNoZWNrYCBjb21tYW5kLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QT1NUX01FTUNIRUNLLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BPU1RfTUVNQ0hFQ0sucnN0CmluZGV4IDQwMjkxZmUuLjVlNDg4YTcgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BPU1RfTUVNQ0hFQ0sucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BPU1RfTUVNQ0hFQ0sucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX1BPU1RfTUVNQ0hFQ0sKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBBIGxpc3Qgb2YgY29tbWFuZHMgdG8gcnVuIGF0IHRoZSBlbmQgb2YgdGhlIDpjb21tYW5kOmBjdGVzdF9tZW1jaGVja2AgY29tbWFuZC4KIAogLi4gaW5jbHVkZTo6IENURVNUX0NVU1RPTV9YWFgudHh0CmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QT1NUX1RFU1QucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fUE9TVF9URVNULnJzdAppbmRleCA3OTEyOTJjLi43ZWM0MmY3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QT1NUX1RFU1QucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BPU1RfVEVTVC5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DVVNUT01fUE9TVF9URVNUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBBIGxpc3Qgb2YgY29tbWFuZHMgdG8gcnVuIGF0IHRoZSBlbmQgb2YgdGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YCBjb21tYW5kLgogCiAuLiBpbmNsdWRlOjogQ1RFU1RfQ1VTVE9NX1hYWC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BSRV9NRU1DSEVDSy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QUkVfTUVNQ0hFQ0sucnN0CmluZGV4IDAwZGU4YWEuLjk5ZTQ3YmQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BSRV9NRU1DSEVDSy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fUFJFX01FTUNIRUNLLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9QUkVfTUVNQ0hFQ0sKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEEgbGlzdCBvZiBjb21tYW5kcyB0byBydW4gYXQgdGhlIHN0YXJ0IG9mIHRoZSA6Y29tbWFuZDpgY3Rlc3RfbWVtY2hlY2tgCiBjb21tYW5kLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QUkVfVEVTVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9QUkVfVEVTVC5yc3QKaW5kZXggNmFmNzE1Mi4uOTVjNjMxNCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fUFJFX1RFU1QucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1BSRV9URVNULnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9QUkVfVEVTVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIGNvbW1hbmRzIHRvIHJ1biBhdCB0aGUgc3RhcnQgb2YgdGhlIDpjb21tYW5kOmBjdGVzdF90ZXN0YCBjb21tYW5kLgogCiAuLiBpbmNsdWRlOjogQ1RFU1RfQ1VTVE9NX1hYWC50eHQKZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1RFU1RTX0lHTk9SRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9URVNUU19JR05PUkUucnN0CmluZGV4IDU3MjIyY2EuLjI3YTc1ZDkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1RFU1RTX0lHTk9SRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fVEVTVFNfSUdOT1JFLnJzdApAQCAtMSw2ICsxLDggQEAKIENURVNUX0NVU1RPTV9URVNUU19JR05PUkUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBBIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucyB0byB1c2UgdG8gZXhjbHVkZSB0ZXN0cyBkdXJpbmcgdGhlCiA6Y29tbWFuZDpgY3Rlc3RfdGVzdGAgY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fV0FSTklOR19FWENFUFRJT04ucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVVNUT01fV0FSTklOR19FWENFUFRJT04ucnN0CmluZGV4IGEwM2Q0NzMuLjUzOTc2MGIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1dBUk5JTkdfRVhDRVBUSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9XQVJOSU5HX0VYQ0VQVElPTi5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9DVVNUT01fV0FSTklOR19FWENFUFRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGV4Y2x1ZGUgd2hlbiBkZXRlY3RpbmcKIHdhcm5pbmcgbWVzc2FnZXMgaW4gYnVpbGQgb3V0cHV0cyBieSB0aGUgOmNvbW1hbmQ6YGN0ZXN0X2J1aWxkYCBjb21tYW5kLgogCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NVU1RPTV9XQVJOSU5HX01BVENILnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1dBUk5JTkdfTUFUQ0gucnN0CmluZGV4IDE4YWE2YjMuLjUzZTc3MDcgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1dBUk5JTkdfTUFUQ0gucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1VTVE9NX1dBUk5JTkdfTUFUQ0gucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfQ1VTVE9NX1dBUk5JTkdfTUFUQ0gKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBBIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IHdhcm5pbmcgbWVzc2FnZXMgaW4KIGJ1aWxkIG91dHB1dHMgYnkgdGhlIDpjb21tYW5kOmBjdGVzdF9idWlsZGAgY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9DVlNfQ0hFQ0tPVVQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVlNfQ0hFQ0tPVVQucnN0CmluZGV4IDY0MzFjMDIuLjMyY2Y5ZWIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1ZTX0NIRUNLT1VULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0NWU19DSEVDS09VVC5yc3QKQEAgLTEsNCArMSw2IEBACiBDVEVTVF9DVlNfQ0hFQ0tPVVQKIC0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogRGVwcmVjYXRlZC4gIFVzZSA6dmFyaWFibGU6YENURVNUX0NIRUNLT1VUX0NPTU1BTkRgIGluc3RlYWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NWU19DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1ZTX0NPTU1BTkQucnN0CmluZGV4IDA0OTcwMGIuLjc5MzIwNzAgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1ZTX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1ZTX0NPTU1BTkQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfQ1ZTX0NPTU1BTkQKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYENWU0NvbW1hbmRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1ZTX1VQREFURV9PUFRJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfQ1ZTX1VQREFURV9PUFRJT05TLnJzdAppbmRleCBkN2YyZjdjLi4zNTllNzA4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0NWU19VUERBVEVfT1BUSU9OUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9DVlNfVVBEQVRFX09QVElPTlMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfQ1ZTX1VQREFURV9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgQ1ZTVXBkYXRlT3B0aW9uc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX0xPQ0FUSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9MT0NBVElPTi5yc3QKaW5kZXggYzBmMjIxNS4uZjY2NzkzYiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX0xPQ0FUSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfTE9DQVRJT04ucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfRFJPUF9MT0NBVElPTgogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBEcm9wTG9jYXRpb25gYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9NRVRIT0QucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX01FVEhPRC5yc3QKaW5kZXggNTBmYmQ0ZC4uM2E4NDY1OCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX01FVEhPRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX01FVEhPRC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9EUk9QX01FVEhPRAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgRHJvcE1ldGhvZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEUucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEUucnN0CmluZGV4IGQxNWQ5OWIuLjljODcxZTMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfU0lURS5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9EUk9QX1NJVEUKIC0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBEcm9wU2l0ZWBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEVfQ0RBU0gucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEVfQ0RBU0gucnN0CmluZGV4IDIyYjk3NzYuLmRjZGIyODYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFX0NEQVNILnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfU0lURV9DREFTSC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9EUk9QX1NJVEVfQ0RBU0gKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBJc0NEYXNoYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfU0lURV9QQVNTV09SRC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0RST1BfU0lURV9QQVNTV09SRC5yc3QKaW5kZXggOTA0ZDJjOC4uODI1OTY1MSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEVfUEFTU1dPUkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFX1BBU1NXT1JELnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0RST1BfU0lURV9QQVNTV09SRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYERyb3BTaXRlUGFzc3dvcmRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfRFJPUF9TSVRFX1VTRVIucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEVfVVNFUi5yc3QKaW5kZXggYTg2MGEwMy4uOGQyZTNhMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEVfVVNFUi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9EUk9QX1NJVEVfVVNFUi5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9EUk9QX1NJVEVfVVNFUgogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgRHJvcFNpdGVVc2VyYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0VYVFJBX0NPVkVSQUdFX0dMT0IucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9FWFRSQV9DT1ZFUkFHRV9HTE9CLnJzdAppbmRleCAyODZmN2RmLi4xZDdlOGQ0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0VYVFJBX0NPVkVSQUdFX0dMT0IucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfRVhUUkFfQ09WRVJBR0VfR0xPQi5yc3QKQEAgLTEsNiArMSw4IEBACiBDVEVTVF9FWFRSQV9DT1ZFUkFHRV9HTE9CCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBBIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZmluZCBmaWxlcyB3aGljaCBzaG91bGQgYmUKIGNvdmVyZWQgYnkgdGhlIDpjb21tYW5kOmBjdGVzdF9jb3ZlcmFnZWAgY29tbWFuZC4KIApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfQ09NTUFORC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9DT01NQU5ELnJzdAppbmRleCBlYjgzNzkyLi5lYjliNDQwIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9DT01NQU5ELnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9DT01NQU5ELnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0dJVF9DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBHSVRDb21tYW5kYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9JTklUX1NVQk1PRFVMRVMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfSU5JVF9TVUJNT0RVTEVTLnJzdAppbmRleCBmZDI3MDAzLi41MjliZmM3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9JTklUX1NVQk1PRFVMRVMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfR0lUX0lOSVRfU1VCTU9EVUxFUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9HSVRfSU5JVF9TVUJNT0RVTEVTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNgorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYEdJVEluaXRTdWJtb2R1bGVzYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9VUERBVEVfQ1VTVE9NLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfR0lUX1VQREFURV9DVVNUT00ucnN0CmluZGV4IDBjNDc5ZTYuLjgyYThhNmEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfR0lUX1VQREFURV9DVVNUT00ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfR0lUX1VQREFURV9DVVNUT00ucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfR0lUX1VQREFURV9DVVNUT00KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYEdJVFVwZGF0ZUN1c3RvbWBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfVVBEQVRFX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9HSVRfVVBEQVRFX09QVElPTlMucnN0CmluZGV4IDQ1OTBhNzguLjE1NjgyMzkgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfR0lUX1VQREFURV9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0dJVF9VUERBVEVfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9HSVRfVVBEQVRFX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBHSVRVcGRhdGVPcHRpb25zYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0hHX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9IR19DT01NQU5ELnJzdAppbmRleCAzODU0OTUwLi4zMzcyZmU0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0hHX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfSEdfQ09NTUFORC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9IR19DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYEhHQ29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9IR19VUERBVEVfT1BUSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0hHX1VQREFURV9PUFRJT05TLnJzdAppbmRleCA5MDQ5YzFmLi44NWM2YjAzIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX0hHX1VQREFURV9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0hHX1VQREFURV9PUFRJT05TLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0hHX1VQREFURV9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBIR1VwZGF0ZU9wdGlvbnNgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTEFCRUxTX0ZPUl9TVUJQUk9KRUNUUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX0xBQkVMU19GT1JfU1VCUFJPSkVDVFMucnN0CmluZGV4IDk1OTU5NmIuLmRkNmQxMjUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTEFCRUxTX0ZPUl9TVUJQUk9KRUNUUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9MQUJFTFNfRk9SX1NVQlBST0pFQ1RTLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX0xBQkVMU19GT1JfU1VCUFJPSkVDVFMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMAorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYExhYmVsc0ZvclN1YnByb2plY3RzYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19DT01NQU5ELnJzdAppbmRleCA4YzE5OWJhLi4yNWYxYmQ5IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfQ09NTUFORC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9NRU1PUllDSEVDS19DT01NQU5ECiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYE1lbW9yeUNoZWNrQ29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19DT01NQU5EX09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19DT01NQU5EX09QVElPTlMucnN0CmluZGV4IDNlMjZhYjUuLjUxODMwZDUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfQ09NTUFORF9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX0NPTU1BTkRfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9NRU1PUllDSEVDS19DT01NQU5EX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBNZW1vcnlDaGVja0NvbW1hbmRPcHRpb25zYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1NBTklUSVpFUl9PUFRJT05TLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfU0FOSVRJWkVSX09QVElPTlMucnN0CmluZGV4IDJkZTVmYjYuLjZjZDUxZmEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfU0FOSVRJWkVSX09QVElPTlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfU0FOSVRJWkVSX09QVElPTlMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfTUVNT1JZQ0hFQ0tfU0FOSVRJWkVSX09QVElPTlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYE1lbW9yeUNoZWNrU2FuaXRpemVyT3B0aW9uc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19TVVBQUkVTU0lPTlNfRklMRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1NVUFBSRVNTSU9OU19GSUxFLnJzdAppbmRleCAxMTQ3ZWU4Li5hNjFhM2VmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1NVUFBSRVNTSU9OU19GSUxFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1NVUFBSRVNTSU9OU19GSUxFLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX01FTU9SWUNIRUNLX1NVUFBSRVNTSU9OU19GSUxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBNZW1vcnlDaGVja1N1cHByZXNzaW9uRmlsZWBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19UWVBFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfTUVNT1JZQ0hFQ0tfVFlQRS5yc3QKaW5kZXggYjhiNGMzMC4uMjQ1MjIyOCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9NRU1PUllDSEVDS19UWVBFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX01FTU9SWUNIRUNLX1RZUEUucnN0CkBAIC0xLDggKzEsMTAgQEAKIENURVNUX01FTU9SWUNIRUNLX1RZUEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgTWVtb3J5Q2hlY2tUeXBlYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCi1WYWxpZCB2YWx1ZXMgYXJlIGBgVmFsZ3JpbmRgYCwgYGBQdXJpZnlgYCwgYGBCb3VuZHNDaGVja2VyYGAsIGFuZAorVmFsaWQgdmFsdWVzIGFyZSBgYFZhbGdyaW5kYGAsIGBgUHVyaWZ5YGAsIGBgQm91bmRzQ2hlY2tlcmBgLCBgYERyTWVtb3J5YGAgYW5kCiBgYFRocmVhZFNhbml0aXplcmBgLCBgYEFkZHJlc3NTYW5pdGl6ZXJgYCwgYGBMZWFrU2FuaXRpemVyYGAsIGBgTWVtb3J5U2FuaXRpemVyYGAsIGFuZAogYGBVbmRlZmluZWRCZWhhdmlvclNhbml0aXplcmBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9OSUdIVExZX1NUQVJUX1RJTUUucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9OSUdIVExZX1NUQVJUX1RJTUUucnN0CmluZGV4IGJjODAyNzYuLjJkNzA3ZDUgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX05JR0hUTFlfU1RBUlRfVElNRS5yc3QKQEAgLTEsNSArMSwxMSBAQAogQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU3BlY2lmeSB0aGUgQ1Rlc3QgYGBOaWdodGx5U3RhcnRUaW1lYGAgc2V0dGluZwotaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKworU3BlY2lmeSB0aGUgQ1Rlc3QgYGBOaWdodGx5U3RhcnRUaW1lYGAgc2V0dGluZyBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYAorZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCisKK05vdGUgdGhhdCB0aGlzIHZhcmlhYmxlIG11c3QgYWx3YXlzIGJlIHNldCBmb3IgYSBuaWdodGx5IGJ1aWxkIGluIGEKK2Rhc2hib2FyZCBzY3JpcHQuIEl0IGlzIG5lZWRlZCBzbyB0aGF0IG5pZ2h0bHkgYnVpbGRzIGNhbiBiZSBwcm9wZXJseSBncm91cGVkCit0b2dldGhlciBpbiBDRGFzaC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfUDRfQ0xJRU5ULnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfUDRfQ0xJRU5ULnJzdAppbmRleCAzNDdlYTU0Li4wNzc4YzViIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X0NMSUVOVC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9DTElFTlQucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfUDRfQ0xJRU5UCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgUDRDbGllbnRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfUDRfQ09NTUFORC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X0NPTU1BTkQucnN0CmluZGV4IGRlZmFiMTIuLjVjYzJhODEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfUDRfQ09NTUFORC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9DT01NQU5ELnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1A0X0NPTU1BTkQKIC0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgUDRDb21tYW5kYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X09QVElPTlMucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9PUFRJT05TLnJzdAppbmRleCBmZWU0Y2UyLi4wMWI2NTM0IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X09QVElPTlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfUDRfT1BUSU9OUy5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9QNF9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYFA0T3B0aW9uc2BgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9QNF9VUERBVEVfT1BUSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X1VQREFURV9PUFRJT05TLnJzdAppbmRleCAwZTI3OTBmLi4zNjVhYTNmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X1VQREFURV9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1A0X1VQREFURV9PUFRJT05TLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1A0X1VQREFURV9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBQNFVwZGF0ZU9wdGlvbnNgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTliZjAxCi0tLSAvZGV2L251bGwKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9SRVNPVVJDRV9TUEVDX0ZJTEUucnN0CkBAIC0wLDAgKzEsMTIgQEAKK0NURVNUX1JFU09VUkNFX1NQRUNfRklMRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworU3BlY2lmeSB0aGUgQ1Rlc3QgYGBSZXNvdXJjZVNwZWNGaWxlYGAgc2V0dGluZyBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYAorZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCisKK1RoaXMgY2FuIGFsc28gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSByZXNvdXJjZSBzcGVjIGZpbGUgZnJvbSBhIENNYWtlIGJ1aWxkLiBJZgorbm8gYGBSRVNPVVJDRV9TUEVDX0ZJTEVgYCBpcyBwYXNzZWQgdG8gOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgLCBhbmQKK2BgQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFYGAgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgZGFzaGJvYXJkIHNjcmlwdCwgdGhlCit2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGZyb20gdGhlIGJ1aWxkIGlzIHVzZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1JVTl9DVVJSRU5UX1NDUklQVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1JVTl9DVVJSRU5UX1NDUklQVC5yc3QKaW5kZXggYWJjMTIzYy4uMzJjODVhZCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9SVU5fQ1VSUkVOVF9TQ1JJUFQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfUlVOX0NVUlJFTlRfU0NSSVBULnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1JVTl9DVVJSRU5UX1NDUklQVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTEKKwogU2V0dGluZyB0aGlzIHRvIDAgcHJldmVudHMgOm1hbnVhbDpgY3Rlc3QoMSlgIGZyb20gYmVpbmcgcnVuIGFnYWluIHdoZW4gaXQKIHJlYWNoZXMgdGhlIGVuZCBvZiBhIHNjcmlwdCBydW4gYnkgY2FsbGluZyBgYGN0ZXN0IC1TYGAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NDUF9DT01NQU5ELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU0NQX0NPTU1BTkQucnN0CmluZGV4IDE5ZWE4YjMuLjE1NWIwNTggMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfU0NQX0NPTU1BTkQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU0NQX0NPTU1BTkQucnN0CkBAIC0xLDQgKzEsNiBAQAogQ1RFU1RfU0NQX0NPTU1BTkQKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBMZWdhY3kgb3B0aW9uLiAgTm90IHVzZWQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NJVEUucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9TSVRFLnJzdAppbmRleCA4YTVlYzI1Li41MjZlNmVkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NJVEUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU0lURS5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9TSVRFCiAtLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYFNpdGVgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfU09VUkNFX0RJUkVDVE9SWS5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1NPVVJDRV9ESVJFQ1RPUlkucnN0CmluZGV4IGI2ODM3ZDEuLjRjNmFjNTQgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfU09VUkNFX0RJUkVDVE9SWS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9TT1VSQ0VfRElSRUNUT1JZLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1NPVVJDRV9ESVJFQ1RPUlkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgU291cmNlRGlyZWN0b3J5YGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NVQk1JVF9VUkwucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9TVUJNSVRfVVJMLnJzdAppbmRleCA3ZDg0ZGE0Li5iNmU3ZjY4IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NVQk1JVF9VUkwucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU1VCTUlUX1VSTC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9TVUJNSVRfVVJMCiAtLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBTdWJtaXRVUkxgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfU1ZOX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fQ09NTUFORC5yc3QKaW5kZXggYWY5MDE0My4uZTk3YWNkMCAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fQ09NTUFORC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fQ09NTUFORC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9TVk5fQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgU1ZOQ29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fT1BUSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1NWTl9PUFRJT05TLnJzdAppbmRleCA3NjU1MWRjLi41MzI2ZTIwIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NWTl9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1NWTl9PUFRJT05TLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1NWTl9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBTVk5PcHRpb25zYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1NWTl9VUERBVEVfT1BUSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1NWTl9VUERBVEVfT1BUSU9OUy5yc3QKaW5kZXggNWYwMWExOS4uMjRlMGJiZiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9TVk5fVVBEQVRFX09QVElPTlMucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfU1ZOX1VQREFURV9PUFRJT05TLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1NWTl9VUERBVEVfT1BUSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYFNWTlVwZGF0ZU9wdGlvbnNgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVEVTVF9MT0FELnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVEVTVF9MT0FELnJzdAppbmRleCA4MDgyM2ZlLi5iNmE5ZDYyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1RFU1RfTE9BRC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9URVNUX0xPQUQucnN0CkBAIC0xLDYgKzEsOCBAQAogQ1RFU1RfVEVTVF9MT0FECiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFNwZWNpZnkgdGhlIGBgVGVzdExvYWRgYCBzZXR0aW5nIGluIHRoZSA6cmVmOmBDVGVzdCBUZXN0IFN0ZXBgCiBvZiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4gIFRoaXMgc2V0cyB0aGUKIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBgYFRFU1RfTE9BRGBgIG9wdGlvbiBvZiB0aGUgOmNvbW1hbmQ6YGN0ZXN0X3Rlc3RgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1RFU1RfVElNRU9VVC5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1RFU1RfVElNRU9VVC5yc3QKaW5kZXggYzAzMTQzNy4uNjFkOTE5MSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9URVNUX1RJTUVPVVQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVEVTVF9USU1FT1VULnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1RFU1RfVElNRU9VVAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCBgYFRpbWVPdXRgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVFJJR0dFUl9TSVRFLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVFJJR0dFUl9TSVRFLnJzdAppbmRleCBhNTBlNDA1Li42YWJiODUyIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1RSSUdHRVJfU0lURS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9UUklHR0VSX1NJVEUucnN0CkBAIC0xLDQgKzEsNiBAQAogQ1RFU1RfVFJJR0dFUl9TSVRFCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIExlZ2FjeSBvcHRpb24uICBOb3QgdXNlZC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX0NPTU1BTkQucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfQ09NTUFORC5yc3QKaW5kZXggOTAxNTVkMC4uYzRlZDY0NSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfQ09NTUFORC5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfQ09NTUFORC5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9VUERBVEVfQ09NTUFORAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFNwZWNpZnkgdGhlIENUZXN0IGBgVXBkYXRlQ29tbWFuZGBgIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfT1BUSU9OUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1VQREFURV9PUFRJT05TLnJzdAppbmRleCBlNDNkNjFkLi45NmM0YjZjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1VQREFURV9PUFRJT05TLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1VQREFURV9PUFRJT05TLnJzdApAQCAtMSw1ICsxLDcgQEAKIENURVNUX1VQREFURV9PUFRJT05TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBVcGRhdGVPcHRpb25zYGAgc2V0dGluZwogaW4gYSA6bWFudWFsOmBjdGVzdCgxKWAgZGFzaGJvYXJkIGNsaWVudCBzY3JpcHQuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1VQREFURV9WRVJTSU9OX09OTFkucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfVkVSU0lPTl9PTkxZLnJzdAppbmRleCBhODYyYmFhLi5mN2M4NjNjIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0NURVNUX1VQREFURV9WRVJTSU9OX09OTFkucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX1ZFUlNJT05fT05MWS5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9VUERBVEVfVkVSU0lPTl9PTkxZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBTcGVjaWZ5IHRoZSBDVGVzdCA6cmVmOmBVcGRhdGVWZXJzaW9uT25seSA8VXBkYXRlVmVyc2lvbk9ubHk+YCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVBEQVRFX1ZFUlNJT05fT1ZFUlJJREUucnN0IGIvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfVkVSU0lPTl9PVkVSUklERS5yc3QKaW5kZXggMzlmYmFiYS4uODc5MThjYiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfVkVSU0lPTl9PVkVSUklERS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9DVEVTVF9VUERBVEVfVkVSU0lPTl9PVkVSUklERS5yc3QKQEAgLTEsNSArMSw3IEBACiBDVEVTVF9VUERBVEVfVkVSU0lPTl9PVkVSUklERQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBTcGVjaWZ5IHRoZSBDVGVzdCA6cmVmOmBVcGRhdGVWZXJzaW9uT3ZlcnJpZGUgPFVwZGF0ZVZlcnNpb25PdmVycmlkZT5gIHNldHRpbmcKIGluIGEgOm1hbnVhbDpgY3Rlc3QoMSlgIGRhc2hib2FyZCBjbGllbnQgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9DVEVTVF9VU0VfTEFVTkNIRVJTLnJzdCBiL0hlbHAvdmFyaWFibGUvQ1RFU1RfVVNFX0xBVU5DSEVSUy5yc3QKaW5kZXggOWY0OGEyZS4uNzI4Y2RjNSAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9DVEVTVF9VU0VfTEFVTkNIRVJTLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL0NURVNUX1VTRV9MQVVOQ0hFUlMucnN0CkBAIC0xLDUgKzEsNyBAQAogQ1RFU1RfVVNFX0xBVU5DSEVSUwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogU3BlY2lmeSB0aGUgQ1Rlc3QgYGBVc2VMYXVuY2hlcnNgYCBzZXR0aW5nCiBpbiBhIDptYW51YWw6YGN0ZXN0KDEpYCBkYXNoYm9hcmQgY2xpZW50IHNjcmlwdC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvR0hTLU1VTFRJLnJzdCBiL0hlbHAvdmFyaWFibGUvR0hTLU1VTFRJLnJzdAppbmRleCBmZTNiMTdlLi5iYjEzOWFmIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0dIUy1NVUxUSS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9HSFMtTVVMVEkucnN0CkBAIC0xLDQgKzEsNiBAQAogR0hTLU1VTFRJCiAtLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIGBgVHJ1ZWBgIHdoZW4gdXNpbmcgOmdlbmVyYXRvcjpgR3JlZW4gSGlsbHMgTVVMVElgIGdlbmVyYXRvci4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvSU9TLnJzdCBiL0hlbHAvdmFyaWFibGUvSU9TLnJzdAppbmRleCBlNWNjM2Y2Li5iMjdiZTU1IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL0lPUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9JT1MucnN0CkBAIC0xLDQgKzEsNiBAQAogSU9TCiAtLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBTZXQgdG8gYGAxYGAgd2hlbiB0aGUgdGFyZ2V0IHN5c3RlbSAoOnZhcmlhYmxlOmBDTUFLRV9TWVNURU1fTkFNRWApIGlzIGBgaU9TYGAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL01JTkdXLnJzdCBiL0hlbHAvdmFyaWFibGUvTUlOR1cucnN0CmluZGV4IDZkMjliZTQuLjI3YzU2ZWEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvTUlOR1cucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvTUlOR1cucnN0CkBAIC0xLDYgKzEsOCBAQAogTUlOR1cKIC0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiBgYFRydWVgYCB3aGVuIHVzaW5nIE1pbkdXCiAKIFNldCB0byBgYHRydWVgYCB3aGVuIHRoZSBjb21waWxlciBpcyBzb21lIHZlcnNpb24gb2YgTWluR1cuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL01TVkMxNC5yc3QgYi9IZWxwL3ZhcmlhYmxlL01TVkMxNC5yc3QKaW5kZXggNzllMGMxMC4uMWViNTE4MyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9NU1ZDMTQucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvTVNWQzE0LnJzdApAQCAtMSw2ICsxLDggQEAKIE1TVkMxNAogLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBEaXNjb3VyYWdlZC4gIFVzZSB0aGUgOnZhcmlhYmxlOmBNU1ZDX1ZFUlNJT05gIHZhcmlhYmxlIGluc3RlYWQuCiAKIGBgVHJ1ZWBgIHdoZW4gdXNpbmcgdGhlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIGBgdjE0MGBgIG9yIGBgdjE0MWBgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL01TVkNfVE9PTFNFVF9WRVJTSU9OLnJzdCBiL0hlbHAvdmFyaWFibGUvTVNWQ19UT09MU0VUX1ZFUlNJT04ucnN0CmluZGV4IGY0YTMzZTIuLmM2NDJhOWYgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvTVNWQ19UT09MU0VUX1ZFUlNJT04ucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvTVNWQ19UT09MU0VUX1ZFUlNJT04ucnN0CkBAIC0xLDYgKzEsOCBAQAogTVNWQ19UT09MU0VUX1ZFUlNJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTIKKwogVGhlIHRvb2xzZXQgdmVyc2lvbiBvZiBNaWNyb3NvZnQgVmlzdWFsIEMvQysrIGJlaW5nIHVzZWQgaWYgYW55LgogSWYgTVNWQy1saWtlIGlzIGJlaW5nIHVzZWQsIHRoaXMgdmFyaWFibGUgaXMgc2V0IGJhc2VkIG9uIHRoZSB2ZXJzaW9uCiBvZiB0aGUgY29tcGlsZXIgYXMgZ2l2ZW4gYnkgdGhlIDp2YXJpYWJsZTpgTVNWQ19WRVJTSU9OYCB2YXJpYWJsZS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvTVNZUy5yc3QgYi9IZWxwL3ZhcmlhYmxlL01TWVMucnN0CmluZGV4IDI1ZGRjN2YuLjZiZTc2ODEgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvTVNZUy5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9NU1lTLnJzdApAQCAtMSw0ICsxLDYgQEAKIE1TWVMKIC0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBgYFRydWVgYCB3aGVuIHVzaW5nIHRoZSA6Z2VuZXJhdG9yOmBNU1lTIE1ha2VmaWxlc2AgZ2VuZXJhdG9yLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9QUk9KRUNULU5BTUVfREVTQ1JJUFRJT04ucnN0IGIvSGVscC92YXJpYWJsZS9QUk9KRUNULU5BTUVfREVTQ1JJUFRJT04ucnN0CmluZGV4IDJiODhiMWEuLmYzNzJmNWMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvUFJPSkVDVC1OQU1FX0RFU0NSSVBUSU9OLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL1BST0pFQ1QtTkFNRV9ERVNDUklQVElPTi5yc3QKQEAgLTEsNSArMSw3IEBACiA8UFJPSkVDVC1OQU1FPl9ERVNDUklQVElPTgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBWYWx1ZSBnaXZlbiB0byB0aGUgYGBERVNDUklQVElPTmBgIG9wdGlvbiBvZiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byB0aGUKIDpjb21tYW5kOmBwcm9qZWN0YCBjb21tYW5kIHdpdGggcHJvamVjdCBuYW1lIGBgPFBST0pFQ1QtTkFNRT5gYCwgaWYgYW55LgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9QUk9KRUNULU5BTUVfSE9NRVBBR0VfVVJMLnJzdCBiL0hlbHAvdmFyaWFibGUvUFJPSkVDVC1OQU1FX0hPTUVQQUdFX1VSTC5yc3QKaW5kZXggMjJjYzMwNC4uNDgwMGIxMyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9QUk9KRUNULU5BTUVfSE9NRVBBR0VfVVJMLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL1BST0pFQ1QtTkFNRV9IT01FUEFHRV9VUkwucnN0CkBAIC0xLDUgKzEsNyBAQAogPFBST0pFQ1QtTkFNRT5fSE9NRVBBR0VfVVJMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBWYWx1ZSBnaXZlbiB0byB0aGUgYGBIT01FUEFHRV9VUkxgYCBvcHRpb24gb2YgdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8gdGhlCiA6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZCB3aXRoIHByb2plY3QgbmFtZSBgYDxQUk9KRUNULU5BTUU+YGAsIGlmIGFueS4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvUFJPSkVDVF9ERVNDUklQVElPTi5yc3QgYi9IZWxwL3ZhcmlhYmxlL1BST0pFQ1RfREVTQ1JJUFRJT04ucnN0CmluZGV4IDI4MzNlMTEuLjFmZWZjZGMgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvUFJPSkVDVF9ERVNDUklQVElPTi5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9QUk9KRUNUX0RFU0NSSVBUSU9OLnJzdApAQCAtMSw2ICsxLDggQEAKIFBST0pFQ1RfREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFNob3J0IHByb2plY3QgZGVzY3JpcHRpb24gZ2l2ZW4gdG8gdGhlIHByb2plY3QgY29tbWFuZC4KIAogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gZ2l2ZW4gdG8gdGhlIG1vc3QgcmVjZW50bHkgY2FsbGVkIDpjb21tYW5kOmBwcm9qZWN0YApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9QUk9KRUNUX0hPTUVQQUdFX1VSTC5yc3QgYi9IZWxwL3ZhcmlhYmxlL1BST0pFQ1RfSE9NRVBBR0VfVVJMLnJzdAppbmRleCA3NTRjOWU4Li4wZDJjOTM3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL1BST0pFQ1RfSE9NRVBBR0VfVVJMLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL1BST0pFQ1RfSE9NRVBBR0VfVVJMLnJzdApAQCAtMSw2ICsxLDggQEAKIFBST0pFQ1RfSE9NRVBBR0VfVVJMCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIFRoZSBob21lcGFnZSBVUkwgb2YgdGhlIHByb2plY3QuCiAKIFRoaXMgaXMgdGhlIGhvbWVwYWdlIFVSTCBnaXZlbiB0byB0aGUgbW9zdCByZWNlbnRseSBjYWxsZWQgOmNvbW1hbmQ6YHByb2plY3RgCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL1BST0pFQ1RfU09VUkNFX0RJUi5yc3QgYi9IZWxwL3ZhcmlhYmxlL1BST0pFQ1RfU09VUkNFX0RJUi5yc3QKaW5kZXggMjdmMjgzOC4uYjQ2MDFjMiAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9QUk9KRUNUX1NPVVJDRV9ESVIucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvUFJPSkVDVF9TT1VSQ0VfRElSLnJzdApAQCAtMSw2ICsxLDggQEAKIFBST0pFQ1RfU09VUkNFX0RJUgogLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5IGZvciB0aGUgY3VycmVudCBwcm9qZWN0LgotCi1UaGlzIGlzIHRoZSBzb3VyY2UgZGlyZWN0b3J5IG9mIHRoZSBtb3N0IHJlY2VudCA6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZC4KK1RoaXMgaXMgdGhlIHNvdXJjZSBkaXJlY3Rvcnkgb2YgdGhlIGxhc3QgY2FsbCB0byB0aGUKKzpjb21tYW5kOmBwcm9qZWN0YCBjb21tYW5kIG1hZGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHNjb3BlIG9yIG9uZQorb2YgaXRzIHBhcmVudHMuIE5vdGUsIGl0IGlzIG5vdCBhZmZlY3RlZCBieSBjYWxscyB0bworOmNvbW1hbmQ6YHByb2plY3RgIG1hZGUgd2l0aGluIGEgY2hpbGQgZGlyZWN0b3J5IHNjb3BlIChpLmUuIGZyb20KK3dpdGhpbiBhIGNhbGwgdG8gOmNvbW1hbmQ6YGFkZF9zdWJkaXJlY3RvcnlgIGZyb20gdGhlIGN1cnJlbnQgc2NvcGUpLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9QYWNrYWdlTmFtZV9ST09ULnJzdCBiL0hlbHAvdmFyaWFibGUvUGFja2FnZU5hbWVfUk9PVC5yc3QKaW5kZXggMWMyZmQzNC4uM2Y3ZWU0YyAxMDA2NDQKLS0tIGEvSGVscC92YXJpYWJsZS9QYWNrYWdlTmFtZV9ST09ULnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL1BhY2thZ2VOYW1lX1JPT1QucnN0CkBAIC0xLDYgKzEsOCBAQAogPFBhY2thZ2VOYW1lPl9ST09UCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMi4xCisKIENhbGxzIHRvIDpjb21tYW5kOmBmaW5kX3BhY2thZ2UoPFBhY2thZ2VOYW1lPilgIHdpbGwgc2VhcmNoIGluIHByZWZpeGVzCiBzcGVjaWZpZWQgYnkgdGhlIGBgPFBhY2thZ2VOYW1lPl9ST09UYGAgQ01ha2UgdmFyaWFibGUsIHdoZXJlCiBgYDxQYWNrYWdlTmFtZT5gYCBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgOmNvbW1hbmQ6YGZpbmRfcGFja2FnZWAgY2FsbApkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9XSU5DRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL1dJTkNFLnJzdAppbmRleCA1NGZmN2RlLi40ZGNhMjk3IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL1dJTkNFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL1dJTkNFLnJzdApAQCAtMSw1ICsxLDcgQEAKIFdJTkNFCiAtLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogVHJ1ZSB3aGVuIHRoZSA6dmFyaWFibGU6YENNQUtFX1NZU1RFTV9OQU1FYCB2YXJpYWJsZSBpcyBzZXQKIHRvIGBgV2luZG93c0NFYGAuCmRpZmYgLS1naXQgYS9IZWxwL3ZhcmlhYmxlL1dJTkRPV1NfUEhPTkUucnN0IGIvSGVscC92YXJpYWJsZS9XSU5ET1dTX1BIT05FLnJzdAppbmRleCA2MWQ5MWIwLi5iZjcwOTlkIDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL1dJTkRPV1NfUEhPTkUucnN0CisrKyBiL0hlbHAvdmFyaWFibGUvV0lORE9XU19QSE9ORS5yc3QKQEAgLTEsNSArMSw3IEBACiBXSU5ET1dTX1BIT05FCiAtLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBUcnVlIHdoZW4gdGhlIDp2YXJpYWJsZTpgQ01BS0VfU1lTVEVNX05BTUVgIHZhcmlhYmxlIGlzIHNldAogdG8gYGBXaW5kb3dzUGhvbmVgYC4KZGlmZiAtLWdpdCBhL0hlbHAvdmFyaWFibGUvV0lORE9XU19TVE9SRS5yc3QgYi9IZWxwL3ZhcmlhYmxlL1dJTkRPV1NfU1RPUkUucnN0CmluZGV4IGRhZTNiNTMuLjEzODMxYzIgMTAwNjQ0Ci0tLSBhL0hlbHAvdmFyaWFibGUvV0lORE9XU19TVE9SRS5yc3QKKysrIGIvSGVscC92YXJpYWJsZS9XSU5ET1dTX1NUT1JFLnJzdApAQCAtMSw1ICsxLDcgQEAKIFdJTkRPV1NfU1RPUkUKIC0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIFRydWUgd2hlbiB0aGUgOnZhcmlhYmxlOmBDTUFLRV9TWVNURU1fTkFNRWAgdmFyaWFibGUgaXMgc2V0CiB0byBgYFdpbmRvd3NTdG9yZWBgLgpkaWZmIC0tZ2l0IGEvSGVscC92YXJpYWJsZS9YQ09ERS5yc3QgYi9IZWxwL3ZhcmlhYmxlL1hDT0RFLnJzdAppbmRleCA5OWYyMGZiLi4xNjdjYTg2IDEwMDY0NAotLS0gYS9IZWxwL3ZhcmlhYmxlL1hDT0RFLnJzdAorKysgYi9IZWxwL3ZhcmlhYmxlL1hDT0RFLnJzdApAQCAtMSw0ICsxLDYgQEAKIFhDT0RFCiAtLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogYGBUcnVlYGAgd2hlbiB1c2luZyA6Z2VuZXJhdG9yOmBYY29kZWAgZ2VuZXJhdG9yLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9BbmRyb2lkVGVzdFV0aWxpdGllcy5jbWFrZSBiL01vZHVsZXMvQW5kcm9pZFRlc3RVdGlsaXRpZXMuY21ha2UKaW5kZXggZTMzM2NkYi4uZGRjY2Y1OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9BbmRyb2lkVGVzdFV0aWxpdGllcy5jbWFrZQorKysgYi9Nb2R1bGVzL0FuZHJvaWRUZXN0VXRpbGl0aWVzLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQW5kcm9pZFRlc3RVdGlsaXRpZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjcKKwogQ3JlYXRlIGEgdGVzdCB0aGF0IGF1dG9tYXRpY2FsbHkgbG9hZHMgc3BlY2lmaWVkIGRhdGEgb250byBhbiBBbmRyb2lkIGRldmljZS4KIAogSW50cm9kdWN0aW9uCkBAIC03Niw4ICs3OCw2IEBACiAKIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9FeHRlcm5hbERhdGEuY21ha2UpCiAKLXNldChfQW5kcm9pZFRlc3RVdGlsaXRpZXNfU0VMRl9ESVIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0iKQotCiAjIFRoZSBwYXJhbWV0ZXJzIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHNldCB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcywKICMgZmlsZXMsIGFuZCBsaWJyYXJpZXMgdGhhdCBuZWVkIHRvIGJlIGluc3RhbGxlZCBwcmlvciB0byB0ZXN0aW5nLgogZnVuY3Rpb24oYW5kcm9pZF9hZGRfdGVzdF9kYXRhIHRlc3RfbmFtZSkKQEAgLTE1OSw2ICsxNTksNiBAQAogICAgICAgIi1EYXJnX2ZpbGVzPSR7cHJvY2Vzc2VkX0ZJTEVTfSIKICAgICAgICItRGFyZ19saWJzPSR7QVNUX0xJQlN9IgogICAgICAgIi1EYXJnX3NyY19kaXI9JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IgotICAgICAgLVAgJHtfQW5kcm9pZFRlc3RVdGlsaXRpZXNfU0VMRl9ESVJ9L0FuZHJvaWRUZXN0VXRpbGl0aWVzL1B1c2hUb0FuZHJvaWREZXZpY2UuY21ha2UpCisgICAgICAtUCAke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJ9L0FuZHJvaWRUZXN0VXRpbGl0aWVzL1B1c2hUb0FuZHJvaWREZXZpY2UuY21ha2UpCiAgIGVuZGlmKCkKIGVuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQnVuZGxlVXRpbGl0aWVzLmNtYWtlIGIvTW9kdWxlcy9CdW5kbGVVdGlsaXRpZXMuY21ha2UKaW5kZXggMmYzYjllMS4uZjUyMWQyMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9CdW5kbGVVdGlsaXRpZXMuY21ha2UKKysrIGIvTW9kdWxlcy9CdW5kbGVVdGlsaXRpZXMuY21ha2UKQEAgLTg5NCwxMSArODk0LDE2IEBACiAgICMgdG8gaW5zdGFsbF9uYW1lX3Rvb2w6CiAgICMKICAgaWYoY2hhbmdlcykKLSAgICBzZXQoY21kICR7Q01BS0VfSU5TVEFMTF9OQU1FX1RPT0x9ICR7Y2hhbmdlc30gIiR7cmVzb2x2ZWRfZW1iZWRkZWRfaXRlbX0iKQotICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Y21kfSBSRVNVTFRfVkFSSUFCTEUgaW5zdGFsbF9uYW1lX3Rvb2xfcmVzdWx0KQotICAgIGlmKE5PVCBpbnN0YWxsX25hbWVfdG9vbF9yZXN1bHQgRVFVQUwgMCkKLSAgICAgIHN0cmluZyhSRVBMQUNFICI7IiAiJyAnIiBtc2cgIicke2NtZH0nIikKLSAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvbW1hbmQgZmFpbGVkOlxuICR7bXNnfSIpCisgICAgIyBDaGVjayBmb3IgYSBzY3JpcHQgYnkgZXh0ZW5zaW9uICguYmF0LC5zaCwuLi4pIG9yIGlmIHRoZSBmaWxlIHN0YXJ0cyB3aXRoICIjISIgKHNoZWJhbmcpCisgICAgZmlsZShSRUFEICR7cmVzb2x2ZWRfZW1iZWRkZWRfaXRlbX0gZmlsZV9jb250ZW50cyBMSU1JVCA1KQorICAgIGlmKE5PVCAiJHtyZXNvbHZlZF9lbWJlZGRlZF9pdGVtfSIgTUFUQ0hFUyAiXFwuKGJhdHxjP3NofGJhc2h8a3NofGNtZCkkIiBBTkQKKyAgICAgICBOT1QgZmlsZV9jb250ZW50cyBNQVRDSEVTICJeIyEiKQorICAgICAgc2V0KGNtZCAke0NNQUtFX0lOU1RBTExfTkFNRV9UT09MfSAke2NoYW5nZXN9ICIke3Jlc29sdmVkX2VtYmVkZGVkX2l0ZW19IikKKyAgICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Y21kfSBSRVNVTFRfVkFSSUFCTEUgaW5zdGFsbF9uYW1lX3Rvb2xfcmVzdWx0KQorICAgICAgaWYoTk9UIGluc3RhbGxfbmFtZV90b29sX3Jlc3VsdCBFUVVBTCAwKQorICAgICAgICBzdHJpbmcoUkVQTEFDRSAiOyIgIicgJyIgbXNnICInJHtjbWR9JyIpCisgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvbW1hbmQgZmFpbGVkOlxuICR7bXNnfSIpCisgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiBlbmRmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQVNNQ29tcGlsZXIuY21ha2UuaW4gYi9Nb2R1bGVzL0NNYWtlQVNNQ29tcGlsZXIuY21ha2UuaW4KaW5kZXggYjhlMDlmZS4uMzk1M2IzMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUFTTUNvbXBpbGVyLmNtYWtlLmluCisrKyBiL01vZHVsZXMvQ01ha2VBU01Db21waWxlci5jbWFrZS5pbgpAQCAtMTAsNyArMTAsOSBAQAogc2V0KENNQUtFX0FTTUBBU01fRElBTEVDVEBfQ09NUElMRVJfSUQgIkBfQ01BS0VfQVNNX0NPTVBJTEVSX0lEQCIpCiBzZXQoQ01BS0VfQVNNQEFTTV9ESUFMRUNUQF9DT01QSUxFUl9WRVJTSU9OICJAX0NNQUtFX0FTTV9DT01QSUxFUl9WRVJTSU9OQCIpCiBzZXQoQ01BS0VfQVNNQEFTTV9ESUFMRUNUQF9DT01QSUxFUl9FTlZfVkFSICJAX0NNQUtFX0FTTV9DT01QSUxFUl9FTlZfVkFSQCIpCitAX1NFVF9DTUFLRV9BU01fQ09NUElMRVJfSURfVkVORE9SX01BVENIQAogQF9TRVRfQ01BS0VfQVNNX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JREAKK0BfU0VUX0NNQUtFX0FTTV9DT01QSUxFUl9TWVNST09UQAogCiBzZXQoQ01BS0VfQVNNQEFTTV9ESUFMRUNUQF9JR05PUkVfRVhURU5TSU9OUyBoO0g7bztPO29iajtPQko7ZGVmO0RFRjtyYztSQykKIHNldChDTUFLRV9BU01AQVNNX0RJQUxFQ1RAX0xJTktFUl9QUkVGRVJFTkNFIDApCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQVNNSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlQVNNSW5mb3JtYXRpb24uY21ha2UKaW5kZXggNmI3MzczMC4uMmRjMTU4NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUFTTUluZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VBU01JbmZvcm1hdGlvbi5jbWFrZQpAQCAtNzYsMTIgKzc2LDEyIEBACiBpZihOT1QgQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZKQogICBzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZCiAgICAgICAiPENNQUtFX0FSPiBjciA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICIKLSAgICAgICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiAiKQorICAgICAgIjxDTUFLRV9SQU5MSUI+IDxUQVJHRVQ+IikKIGVuZGlmKCkKIAogaWYoTk9UIENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9FWEVDVVRBQkxFX1JVTlRJTUVfQVNNJHtBU01fRElBTEVDVH1fRkxBRykKQEAgLTk2LDE1ICs5Niw1IEBACiAgIHNldChDTUFLRV9FWEVDVVRBQkxFX1JQQVRIX0xJTktfQVNNJHtBU01fRElBTEVDVH1fRkxBRyAke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1JQQVRIX0xJTktfQVNNJHtBU01fRElBTEVDVH1fRkxBR30pCiBlbmRpZigpCiAKLSMgdG8gYmUgZG9uZQotaWYoTk9UIENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NSRUFURV9TSEFSRURfTElCUkFSWSkKLSAgc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NSRUFURV9TSEFSRURfTElCUkFSWSkKLWVuZGlmKCkKLQotaWYoTk9UIENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NSRUFURV9TSEFSRURfTU9EVUxFKQotICBzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ1JFQVRFX1NIQVJFRF9NT0RVTEUpCi1lbmRpZigpCi0KIAogc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0lORk9NQVRJT05fTE9BREVEIDEpCi0KZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VBU01fTUFTTUluZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUFTTV9NQVNNSW5mb3JtYXRpb24uY21ha2UKaW5kZXggOWY3ZTkzNC4uNmQxZTE3NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUFTTV9NQVNNSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUFTTV9NQVNNSW5mb3JtYXRpb24uY21ha2UKQEAgLTgsNyArOCw3IEBACiAKIHNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9TT1VSQ0VfRklMRV9FWFRFTlNJT05TIGFzbSkKIAotc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVfT0JKRUNUICI8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gL2MgIC9GbyA8T0JKRUNUPiA8U09VUkNFPiIpCitzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRV9PQkpFQ1QgIjxDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAvYyAvRm8gPE9CSkVDVD4gPFNPVVJDRT4iKQogCiAjIFRoZSBBU01fTUFTTSBjb21waWxlciBpZCBmb3IgdGhpcyBjb21waWxlciBpcyAiTVNWQyIsIHNvIGZpbGwgb3V0IHRoZSBydW50aW1lIGxpYnJhcnkgdGFibGUuCiBzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRV9PUFRJT05TX01TVkNfUlVOVElNRV9MSUJSQVJZX011bHRpVGhyZWFkZWQgICAgICAgICAiIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VBU01fTkFTTUluZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUFTTV9OQVNNSW5mb3JtYXRpb24uY21ha2UKaW5kZXggY2I3OTNlNy4uOTdjYjQ4OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUFTTV9OQVNNSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUFTTV9OQVNNSW5mb3JtYXRpb24uY21ha2UKQEAgLTgsMTkgKzgsMjUgQEAKIAogaWYoTk9UIENNQUtFX0FTTV9OQVNNX09CSkVDVF9GT1JNQVQpCiAgIGlmKFdJTjMyKQotICAgIGlmKENNQUtFX0NfU0laRU9GX0RBVEFfUFRSIEVRVUFMIDgpCisgICAgaWYoREVGSU5FRCBDTUFLRV9DX1NJWkVPRl9EQVRBX1BUUiBBTkQgQ01BS0VfQ19TSVpFT0ZfREFUQV9QVFIgRVFVQUwgOCkKKyAgICAgIHNldChDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUIHdpbjY0KQorICAgIGVsc2VpZihERUZJTkVEIENNQUtFX0NYWF9TSVpFT0ZfREFUQV9QVFIgQU5EIENNQUtFX0NYWF9TSVpFT0ZfREFUQV9QVFIgRVFVQUwgOCkKICAgICAgIHNldChDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUIHdpbjY0KQogICAgIGVsc2UoKQogICAgICAgc2V0KENNQUtFX0FTTV9OQVNNX09CSkVDVF9GT1JNQVQgd2luMzIpCiAgICAgZW5kaWYoKQogICBlbHNlaWYoQVBQTEUpCi0gICAgaWYoQ01BS0VfQ19TSVpFT0ZfREFUQV9QVFIgRVFVQUwgOCkKKyAgICBpZihERUZJTkVEIENNQUtFX0NfU0laRU9GX0RBVEFfUFRSIEFORCBDTUFLRV9DX1NJWkVPRl9EQVRBX1BUUiBFUVVBTCA4KQorICAgICAgc2V0KENNQUtFX0FTTV9OQVNNX09CSkVDVF9GT1JNQVQgbWFjaG82NCkKKyAgICBlbHNlaWYoREVGSU5FRCBDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSIEFORCBDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSIEVRVUFMIDgpCiAgICAgICBzZXQoQ01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVCBtYWNobzY0KQogICAgIGVsc2UoKQogICAgICAgc2V0KENNQUtFX0FTTV9OQVNNX09CSkVDVF9GT1JNQVQgbWFjaG8pCiAgICAgZW5kaWYoKQogICBlbHNlKCkKLSAgICBpZihDTUFLRV9DX1NJWkVPRl9EQVRBX1BUUiBFUVVBTCA4KQorICAgIGlmKERFRklORUQgQ01BS0VfQ19TSVpFT0ZfREFUQV9QVFIgQU5EIENNQUtFX0NfU0laRU9GX0RBVEFfUFRSIEVRVUFMIDgpCisgICAgICBzZXQoQ01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVCBlbGY2NCkKKyAgICBlbHNlaWYoREVGSU5FRCBDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSIEFORCBDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSIEVRVUFMIDgpCiAgICAgICBzZXQoQ01BS0VfQVNNX05BU01fT0JKRUNUX0ZPUk1BVCBlbGY2NCkKICAgICBlbHNlKCkKICAgICAgIHNldChDTUFLRV9BU01fTkFTTV9PQkpFQ1RfRk9STUFUIGVsZikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VBZGRGb3J0cmFuU3ViZGlyZWN0b3J5LmNtYWtlIGIvTW9kdWxlcy9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkuY21ha2UKaW5kZXggMjYxMzU2OS4uNjlhODQxNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkuY21ha2UKQEAgLTQzLDcgKzQzLDYgQEAKIGJpbmFyaWVzIGR1cmluZyBgYG1ha2UgaW5zdGFsbGBgLgogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAotc2V0KF9NU19NSU5HV19TT1VSQ0VfRElSICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0pCiBpbmNsdWRlKENoZWNrTGFuZ3VhZ2UpCiBpbmNsdWRlKEV4dGVybmFsUHJvamVjdCkKIApAQCAtODcsMTEgKzg2LDExIEBACiAgIGZpbGUoVE9fTkFUSVZFX1BBVEggIiR7TUlOR1dfUEFUSH0iIE1JTkdXX1BBVEgpCiAgIHN0cmluZyhSRVBMQUNFICJcXCIgIlxcXFwiIE1JTkdXX1BBVEggIiR7TUlOR1dfUEFUSH0iKQogICBjb25maWd1cmVfZmlsZSgKLSAgICAke19NU19NSU5HV19TT1VSQ0VfRElSfS9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkvY29uZmlnX21pbmd3LmNtYWtlLmluCisgICAgJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSfS9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkvY29uZmlnX21pbmd3LmNtYWtlLmluCiAgICAgJHtidWlsZF9kaXJ9L2NvbmZpZ19taW5ndy5jbWFrZQogICAgIEBPTkxZKQogICBjb25maWd1cmVfZmlsZSgKLSAgICAke19NU19NSU5HV19TT1VSQ0VfRElSfS9DTWFrZUFkZEZvcnRyYW5TdWJkaXJlY3RvcnkvYnVpbGRfbWluZ3cuY21ha2UuaW4KKyAgICAke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJ9L0NNYWtlQWRkRm9ydHJhblN1YmRpcmVjdG9yeS9idWlsZF9taW5ndy5jbWFrZS5pbgogICAgICR7YnVpbGRfZGlyfS9idWlsZF9taW5ndy5jbWFrZQogICAgIEBPTkxZKQogZW5kZnVuY3Rpb24oKQpAQCAtMTUwLDE3ICsxNDksOSBAQAogICAgIC1QICR7YnVpbGRfZGlyfS9jb25maWdfbWluZ3cuY21ha2UKICAgICBCVUlMRF9DT01NQU5EICR7Q01BS0VfQ09NTUFORH0KICAgICAtUCAke2J1aWxkX2Rpcn0vYnVpbGRfbWluZ3cuY21ha2UKKyAgICBCVUlMRF9BTFdBWVMgMQogICAgIElOU1RBTExfQ09NTUFORCAiIgogICAgICkKLSAgIyBtYWtlIHRoZSBleHRlcm5hbCBwcm9qZWN0IGFsd2F5cyBydW4gbWFrZSB3aXRoIGVhY2ggYnVpbGQKLSAgZXh0ZXJuYWxwcm9qZWN0X2FkZF9zdGVwKCR7cHJvamVjdF9uYW1lfV9idWlsZCBmb3JjZWJ1aWxkCi0gICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9Ci0gICAgLUUgcmVtb3ZlCi0gICAgJHtDTUFLRV9DVVJSRU5UX0JVSUxEX0RJUn0vJHtwcm9qZWN0X25hbWV9LXByZWZpeC9zcmMvJHtwcm9qZWN0X25hbWV9LXN0YW1wLyR7cHJvamVjdF9uYW1lfS1idWlsZAotICAgIERFUEVOREVFUyBjb25maWd1cmUKLSAgICBERVBFTkRFUlMgYnVpbGQKLSAgICBBTFdBWVMgMQotICAgICkKICAgIyBjcmVhdGUgaW1wb3J0ZWQgdGFyZ2V0cyBmb3IgYWxsIGxpYnJhcmllcwogICBmb3JlYWNoKGxpYiAke2xpYnJhcmllc30pCiAgICAgYWRkX2xpYnJhcnkoJHtsaWJ9IFNIQVJFRCBJTVBPUlRFRCBHTE9CQUwpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ0NvbXBpbGVyLmNtYWtlLmluIGIvTW9kdWxlcy9DTWFrZUNDb21waWxlci5jbWFrZS5pbgppbmRleCA5YjhkNDIzLi5lZWEzZjVkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlQ0NvbXBpbGVyLmNtYWtlLmluCisrKyBiL01vZHVsZXMvQ01ha2VDQ29tcGlsZXIuY21ha2UuaW4KQEAgLTE1LDYgKzE1LDcgQEAKIHNldChDTUFLRV9DX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlQgIkBDTUFLRV9DX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlRAIikKIHNldChDTUFLRV9DX1NJTVVMQVRFX1ZFUlNJT04gIkBDTUFLRV9DX1NJTVVMQVRFX1ZFUlNJT05AIikKIEBfU0VUX0NNQUtFX0NfQ09NUElMRVJfQVJDSElURUNUVVJFX0lEQAorQF9TRVRfQ01BS0VfQ19DT01QSUxFUl9TWVNST09UQAogQFNFVF9NU1ZDX0NfQVJDSElURUNUVVJFX0lEQAogQFNFVF9DTUFLRV9YQ09ERV9BUkNIU0AKIHNldChDTUFLRV9BUiAiQENNQUtFX0FSQCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ0luZm9ybWF0aW9uLmNtYWtlIGIvTW9kdWxlcy9DTWFrZUNJbmZvcm1hdGlvbi5jbWFrZQppbmRleCBkZjQzNTU5Li5mNmQ2MjBmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlQ0luZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VDSW5mb3JtYXRpb24uY21ha2UKQEAgLTExMCw2ICsxMTAsMTEgQEAKICAgbWFya19hc19hZHZhbmNlZChDTUFLRV9DX1NUQU5EQVJEX0xJQlJBUklFUykKIGVuZGlmKCkKIAoraWYoTk9UIENNQUtFX0NfQ09NUElMRVJfTEFVTkNIRVIgQU5EIERFRklORUQgRU5We0NNQUtFX0NfQ09NUElMRVJfTEFVTkNIRVJ9KQorICBzZXQoQ01BS0VfQ19DT01QSUxFUl9MQVVOQ0hFUiAiJEVOVntDTUFLRV9DX0NPTVBJTEVSX0xBVU5DSEVSfSIKKyAgICBDQUNIRSBTVFJJTkcgIkNvbXBpbGVyIGxhdW5jaGVyIGZvciBDLiIpCitlbmRpZigpCisKIGluY2x1ZGUoQ01ha2VDb21tb25MYW5ndWFnZUluY2x1ZGUpCiAKICMgbm93IGRlZmluZSB0aGUgZm9sbG93aW5nIHJ1bGUgdmFyaWFibGVzCkBAIC0xNTYsNyArMTYxLDcgQEAKICAgc2V0KENNQUtFX0NfQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcWMgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9DX0FSQ0hJVkVfQVBQRU5EKQotICBzZXQoQ01BS0VfQ19BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFX0NfQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKIGVuZGlmKCkKIGlmKE5PVCBERUZJTkVEIENNQUtFX0NfQVJDSElWRV9GSU5JU0gpCiAgIHNldChDTUFLRV9DX0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCkBAIC0xNjUsMTIgKzE3MCwxMiBAQAogIyBjb21waWxlIGEgQyBmaWxlIGludG8gYW4gb2JqZWN0IGZpbGUKIGlmKE5PVCBDTUFLRV9DX0NPTVBJTEVfT0JKRUNUKQogICBzZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVAotICAgICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAgIC1jIDxTT1VSQ0U+IikKKyAgICAiPENNQUtFX0NfQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUpCiAgIHNldChDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ19DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPENNQUtFX0NfQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX0NfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIGVuZGlmKCkKIAogaWYoTk9UIENNQUtFX0VYRUNVVEFCTEVfUlVOVElNRV9DX0ZMQUcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ1NoYXJwSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlQ1NoYXJwSW5mb3JtYXRpb24uY21ha2UKaW5kZXggNDhlMWExZS4uNDFjZDQ0OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUNTaGFycEluZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VDU2hhcnBJbmZvcm1hdGlvbi5jbWFrZQpAQCAtMTAsNyArMTAsNyBAQAogCiBzZXQoQ01BS0VfQlVJTERfVFlQRV9JTklUIERlYnVnKQogCi1zZXQoQ01BS0VfQ1NoYXJwX0ZMQUdTX0lOSVQgIi9kZWZpbmU6VFJBQ0UgL2xhbmd2ZXJzaW9uOjMiKQorc2V0KENNQUtFX0NTaGFycF9GTEFHU19JTklUICIvZGVmaW5lOlRSQUNFIikKIHNldChDTUFLRV9DU2hhcnBfRkxBR1NfREVCVUdfSU5JVCAiL2RlYnVnOmZ1bGwgL29wdGltaXplLSAvd2FybjozIC9lcnJvcnJlcG9ydDpwcm9tcHQgL2RlZmluZTpERUJVRyIpCiBzZXQoQ01BS0VfQ1NoYXJwX0ZMQUdTX1JFTEVBU0VfSU5JVCAiL2RlYnVnOm5vbmUgL29wdGltaXplICAvd2FybjoxICAvZXJyb3JyZXBvcnQ6cXVldWUiKQogc2V0KENNQUtFX0NTaGFycF9GTEFHU19SRUxXSVRIREVCSU5GT19JTklUICIvZGVidWc6ZnVsbCAvb3B0aW1pemUtIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuaW4gYi9Nb2R1bGVzL0NNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlLmluCmluZGV4IDcxMTEyOWEuLjcwNGFkMDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuaW4KKysrIGIvTW9kdWxlcy9DTWFrZUNVREFDb21waWxlci5jbWFrZS5pbgpAQCAtNCw5ICs0LDE5IEBACiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCAiQENNQUtFX0NVREFfQ09NUElMRVJfSURAIikKIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gIkBDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT05AIikKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEX0NPTVBVVEVEX0RFRkFVTFQgIkBDTUFLRV9DVURBX1NUQU5EQVJEX0NPTVBVVEVEX0RFRkFVTFRAIikKK3NldChDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVMgIkBDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVNAIikKK3NldChDTUFLRV9DVURBMDNfQ09NUElMRV9GRUFUVVJFUyAiQENNQUtFX0NVREEwM19DT01QSUxFX0ZFQVRVUkVTQCIpCitzZXQoQ01BS0VfQ1VEQTExX0NPTVBJTEVfRkVBVFVSRVMgIkBDTUFLRV9DVURBMTFfQ09NUElMRV9GRUFUVVJFU0AiKQorc2V0KENNQUtFX0NVREExNF9DT01QSUxFX0ZFQVRVUkVTICJAQ01BS0VfQ1VEQTE0X0NPTVBJTEVfRkVBVFVSRVNAIikKK3NldChDTUFLRV9DVURBMTdfQ09NUElMRV9GRUFUVVJFUyAiQENNQUtFX0NVREExN19DT01QSUxFX0ZFQVRVUkVTQCIpCitzZXQoQ01BS0VfQ1VEQTIwX0NPTVBJTEVfRkVBVFVSRVMgIkBDTUFLRV9DVURBMjBfQ09NUElMRV9GRUFUVVJFU0AiKQorCitzZXQoQ01BS0VfQ1VEQV9QTEFURk9STV9JRCAiQENNQUtFX0NVREFfUExBVEZPUk1fSURAIikKIHNldChDTUFLRV9DVURBX1NJTVVMQVRFX0lEICJAQ01BS0VfQ1VEQV9TSU1VTEFURV9JREAiKQorc2V0KENNQUtFX0NVREFfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVCAiQENNQUtFX0NVREFfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVEAiKQogc2V0KENNQUtFX0NVREFfU0lNVUxBVEVfVkVSU0lPTiAiQENNQUtFX0NVREFfU0lNVUxBVEVfVkVSU0lPTkAiKQogQFNFVF9NU1ZDX0NVREFfQVJDSElURUNUVVJFX0lEQAorQF9TRVRfQ01BS0VfQ1VEQV9DT01QSUxFUl9TWVNST09UQAogCiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9FTlZfVkFSICJDVURBQ1hYIikKIHNldChDTUFLRV9DVURBX0hPU1RfQ09NUElMRVJfRU5WX1ZBUiAiQ1VEQUhPU1RDWFgiKQpAQCAtMTcsNiArMjcsMjUgQEAKIHNldChDTUFLRV9DVURBX0xJTktFUl9QUkVGRVJFTkNFIDE1KQogc2V0KENNQUtFX0NVREFfTElOS0VSX1BSRUZFUkVOQ0VfUFJPUEFHQVRFUyAxKQogCitzZXQoQ01BS0VfQ1VEQV9TSVpFT0ZfREFUQV9QVFIgIkBDTUFLRV9DVURBX1NJWkVPRl9EQVRBX1BUUkAiKQorc2V0KENNQUtFX0NVREFfQ09NUElMRVJfQUJJICJAQ01BS0VfQ1VEQV9DT01QSUxFUl9BQklAIikKK3NldChDTUFLRV9DVURBX0xJQlJBUllfQVJDSElURUNUVVJFICJAQ01BS0VfQ1VEQV9MSUJSQVJZX0FSQ0hJVEVDVFVSRUAiKQorCitpZihDTUFLRV9DVURBX1NJWkVPRl9EQVRBX1BUUikKKyAgc2V0KENNQUtFX1NJWkVPRl9WT0lEX1AgIiR7Q01BS0VfQ1VEQV9TSVpFT0ZfREFUQV9QVFJ9IikKK2VuZGlmKCkKKworaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9BQkkpCisgIHNldChDTUFLRV9JTlRFUk5BTF9QTEFURk9STV9BQkkgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9BQkl9IikKK2VuZGlmKCkKKworaWYoQ01BS0VfQ1VEQV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSkKKyAgc2V0KENNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFICJAQ01BS0VfQ1VEQV9MSUJSQVJZX0FSQ0hJVEVDVFVSRUAiKQorZW5kaWYoKQorCitzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1QgIkBDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVEAiKQorc2V0KENNQUtFX0NVREFfQ09NUElMRVJfTElCUkFSWV9ST09UICJAQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1RAIikKKwogc2V0KENNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTICJAQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVNAIikKIAogc2V0KENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyAiQENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU0AiKQpAQCAtMjgsNSArNTcsOCBAQAogc2V0KENNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFUyAiQENNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU0AiKQogc2V0KENNQUtFX0NVREFfSU1QTElDSVRfTElOS19GUkFNRVdPUktfRElSRUNUT1JJRVMgIkBDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRlJBTUVXT1JLX0RJUkVDVE9SSUVTQCIpCiAKK0BfU0VUX0NNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFRACisKIHNldChDTUFLRV9MSU5LRVIgIkBDTUFLRV9MSU5LRVJAIikKK3NldChDTUFLRV9BUiAiQENNQUtFX0FSQCIpCiBzZXQoQ01BS0VfTVQgIkBDTUFLRV9NVEAiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUNVREFDb21waWxlcklkLmN1LmluIGIvTW9kdWxlcy9DTWFrZUNVREFDb21waWxlcklkLmN1LmluCmluZGV4IDZlZGE5MjQuLjIwNTVkZTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXJJZC5jdS5pbgorKysgYi9Nb2R1bGVzL0NNYWtlQ1VEQUNvbXBpbGVySWQuY3UuaW4KQEAgLTI2LDcgKzI2LDcgQEAKICNlbGlmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKICAgIjExIgogI2Vsc2UKLSAgIjk4IgorICAiMDMiCiAjZW5kaWYKICJdIjsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUNVREFJbmZvcm1hdGlvbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VDVURBSW5mb3JtYXRpb24uY21ha2UKaW5kZXggYjBkODBkMS4uZjlmNzU3NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUNVREFJbmZvcm1hdGlvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlQ1VEQUluZm9ybWF0aW9uLmNtYWtlCkBAIC04LDYgKzgsMTkgQEAKIGVuZGlmKCkKIHNldChDTUFLRV9JTkNMVURFX0ZMQUdfQ1VEQSAiLUkiKQogCisjIFNldCBpbXBsaWNpdCBsaW5rcyBlYXJseSBzbyBjb21waWxlci1zcGVjaWZpYyBtb2R1bGVzIGNhbiB1c2UgdGhlbS4KK3NldChfX0lNUExJQ1RfTElOS1MgKQorZm9yZWFjaChkaXIgJHtDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30pCisgIHN0cmluZyhBUFBFTkQgX19JTVBMSUNUX0xJTktTICIgLUxcIiR7ZGlyfVwiIikKK2VuZGZvcmVhY2goKQorZm9yZWFjaChsaWIgJHtDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVN9KQorICBpZigke2xpYn0gTUFUQ0hFUyAiLyIpCisgICAgc3RyaW5nKEFQUEVORCBfX0lNUExJQ1RfTElOS1MgIiBcIiR7bGlifVwiIikKKyAgZWxzZSgpCisgICAgc3RyaW5nKEFQUEVORCBfX0lNUExJQ1RfTElOS1MgIiAtbCR7bGlifSIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCiAjIExvYWQgY29tcGlsZXItc3BlY2lmaWMgaW5mb3JtYXRpb24uCiBpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEKQogICBpbmNsdWRlKENvbXBpbGVyLyR7Q01BS0VfQ1VEQV9DT01QSUxFUl9JRH0tQ1VEQSBPUFRJT05BTCkKQEAgLTgyLDYgKzk1LDExIEBACiAgIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfQ1VEQV9TVEFOREFSRF9MSUJSQVJJRVMpCiBlbmRpZigpCiAKK2lmKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVSX0xBVU5DSEVSIEFORCBERUZJTkVEIEVOVntDTUFLRV9DVURBX0NPTVBJTEVSX0xBVU5DSEVSfSkKKyAgc2V0KENNQUtFX0NVREFfQ09NUElMRVJfTEFVTkNIRVIgIiRFTlZ7Q01BS0VfQ1VEQV9DT01QSUxFUl9MQVVOQ0hFUn0iCisgICAgQ0FDSEUgU1RSSU5HICJDb21waWxlciBsYXVuY2hlciBmb3IgQ1VEQS4iKQorZW5kaWYoKQorCiBpbmNsdWRlKENNYWtlQ29tbW9uTGFuZ3VhZ2VJbmNsdWRlKQogCiAjIG5vdyBkZWZpbmUgdGhlIGZvbGxvd2luZyBydWxlczoKQEAgLTkyLDI0ICsxMTAsMTAgQEAKICMgQ01BS0VfQ1VEQV9DT01QSUxFX1NFUEFSQUJMRV9DT01QSUxBVElPTgogIyBDTUFLRV9DVURBX0xJTktfRVhFQ1VUQUJMRQogCi1pZihDTUFLRV9DVURBX0hPU1RfQ09NUElMRVIpCi0gIHNldChDTUFLRV9DVURBX0hPU1RfRkxBR1MgIi1jY2Jpbj08Q01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSPiIpCi1lbHNlKCkKLSAgc2V0KENNQUtFX0NVREFfSE9TVF9GTEFHUyAiIikKK2lmKENNQUtFX0NVREFfSE9TVF9DT01QSUxFUiBBTkQgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTlZJRElBIikKKyAgc3RyaW5nKEFQUEVORCBfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHUyAiIC1jY2Jpbj08Q01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSPiIpCiBlbmRpZigpCiAKLXNldChfX0lNUExJQ1RfTElOS1MgKQotZm9yZWFjaChkaXIgJHtDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30pCi0gIHN0cmluZyhBUFBFTkQgX19JTVBMSUNUX0xJTktTICIgLUxcIiR7ZGlyfVwiIikKLWVuZGZvcmVhY2goKQotZm9yZWFjaChsaWIgJHtDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVN9KQotICBpZigke2xpYn0gTUFUQ0hFUyAiLyIpCi0gICAgc3RyaW5nKEFQUEVORCBfX0lNUExJQ1RfTElOS1MgIiBcIiR7bGlifVwiIikKLSAgZWxzZSgpCi0gICAgc3RyaW5nKEFQUEVORCBfX0lNUExJQ1RfTElOS1MgIiAtbCR7bGlifSIpCi0gIGVuZGlmKCkKLWVuZGZvcmVhY2goKQotCiAjIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5CiBpZihOT1QgQ01BS0VfQ1VEQV9DUkVBVEVfU0hBUkVEX0xJQlJBUlkpCiAgIHNldChDTUFLRV9DVURBX0NSRUFURV9TSEFSRURfTElCUkFSWQpAQCAtMTI2LDcgKzEzMCw3IEBACiAgIHNldChDTUFLRV9DVURBX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfQ1VEQV9BUkNISVZFX0FQUEVORCkKLSAgc2V0KENNQUtFX0NVREFfQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSAgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCisgIHNldChDTUFLRV9DVURBX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9DVURBX0FSQ0hJVkVfRklOSVNIKQogICBzZXQoQ01BS0VfQ1VEQV9BUkNISVZFX0ZJTklTSCAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4iKQpAQCAtMTM1LDI2ICsxMzksMjYgQEAKICNTcGVjaWZ5IGhvdyB0byBjb21waWxlIHdoZW4gcHR4IGhhcyBiZWVuIHJlcXVlc3RlZAogaWYoTk9UIENNQUtFX0NVREFfQ09NUElMRV9QVFhfQ09NUElMQVRJT04pCiAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVfUFRYX0NPTVBJTEFUSU9OCi0gICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke0NNQUtFX0NVREFfSE9TVF9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBjdSAtcHR4IDxTT1VSQ0U+IC1vIDxPQkpFQ1Q+IikKKyAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gJHtfQ01BS0VfQ09NUElMRV9BU19DVURBX0ZMQUd9ICR7X0NNQUtFX0NVREFfUFRYX0ZMQUd9IDxTT1VSQ0U+IC1vIDxPQkpFQ1Q+IikKIGVuZGlmKCkKIAogI1NwZWNpZnkgaG93IHRvIGNvbXBpbGUgd2hlbiBzZXBhcmFibGUgY29tcGlsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkCiBpZihOT1QgQ01BS0VfQ1VEQV9DT01QSUxFX1NFUEFSQUJMRV9DT01QSUxBVElPTikKICAgc2V0KENNQUtFX0NVREFfQ09NUElMRV9TRVBBUkFCTEVfQ09NUElMQVRJT04KLSAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7Q01BS0VfQ1VEQV9IT1NUX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IGN1IC1kYyA8U09VUkNFPiAtbyA8T0JKRUNUPiIpCisgICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+ICR7X0NNQUtFX0NPTVBJTEVfQVNfQ1VEQV9GTEFHfSAtZGMgPFNPVVJDRT4gLW8gPE9CSkVDVD4iKQogZW5kaWYoKQogCiAjU3BlY2lmeSBob3cgdG8gY29tcGlsZSB3aGVuIHdob2xlIGNvbXBpbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZAogaWYoTk9UIENNQUtFX0NVREFfQ09NUElMRV9XSE9MRV9DT01QSUxBVElPTikKICAgc2V0KENNQUtFX0NVREFfQ09NUElMRV9XSE9MRV9DT01QSUxBVElPTgotICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtDTUFLRV9DVURBX0hPU1RfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggY3UgLWMgPFNPVVJDRT4gLW8gPE9CSkVDVD4iKQorICAgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLWMgPFNPVVJDRT4gLW8gPE9CSkVDVD4iKQogZW5kaWYoKQogCi1pZihDTUFLRV9HRU5FUkFUT1IgU1RSRVFVQUwgIk5pbmphIikKK2lmKENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCAiTmluamEiIEFORCBOT1QgQ01BS0VfREVQRklMRV9GTEFHU19DVURBKQogICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX0RFUEVOREVOQ1lfREVURUNUSU9OCi0gICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke0NNQUtFX0NVREFfSE9TVF9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBjdSAtTSA8U09VUkNFPiAtTVQgPE9CSkVDVD4gLW8gJERFUF9GSUxFIikKKyAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gJHtfQ01BS0VfQ09NUElMRV9BU19DVURBX0ZMQUd9IC1NIDxTT1VSQ0U+IC1NVCA8T0JKRUNUPiAtbyAkREVQX0ZJTEUiKQogICAjVGhlIE5pbmphIGdlbmVyYXRvciB1c2VzIHRoZSBtYWtlIGZpbGUgZGVwZW5kZW5jeSBmaWxlcyB0byBkZXRlcm1pbmUgd2hhdAotICAjZmlsZXMgbmVlZCB0byBiZSByZWNvbXBpbGVkLiBVbmZvcnR1bmF0ZWx5LCBudmNjIGRvZXNuJ3Qgc3VwcG9ydCBidWlsZGluZworICAjZmlsZXMgbmVlZCB0byBiZSByZWNvbXBpbGVkLiBVbmZvcnR1bmF0ZWx5LCBudmNjIDwgMTAuMiBkb2Vzbid0IHN1cHBvcnQgYnVpbGRpbmcKICAgI2Egc291cmNlIGZpbGUgYW5kIGdlbmVyYXRpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBzYWlkIGZpbGUgaW4gYSBzaW5nbGUKICAgI2ludm9jYXRpb24uIEluc3RlYWQgd2UgaGF2ZSB0byBzdGF0ZSB0aGF0IHlvdSBuZWVkIHRvIGNoYWluIHR3byBjb21tYW5kcy4KICAgIwpAQCAtMTcxLDEzICsxNzUsNiBAQAogICAgICI8Q01BS0VfQ1VEQV9IT1NUX0xJTktfTEFVTkNIRVI+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiR7X19JTVBMSUNUX0xJTktTfSIpCiBlbmRpZigpCiAKLWlmKCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiIEFORAotICAgIENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjguMC4wIikKLSAgc2V0KF9DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTICItV25vLWRlcHJlY2F0ZWQtZ3B1LXRhcmdldHMiKQotZWxzZSgpCi0gIHNldChfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHUyAiIikKLWVuZGlmKCkKLQogIyBBZGQgaW1wbGljaXQgaG9zdCBsaW5rIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBkZXZpY2UgbGlicmFyaWVzCiAjIHRvIHRoZSBkZXZpY2UgbGluayBsaW5lLgogc2V0KF9fSU1QTElDVF9ETElOS19ESVJTICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKQEAgLTE5MiwxNyArMTg5LDE3IEBACiBlbmRmb3JlYWNoKCkKIHVuc2V0KF9fSU1QTElDVF9ETElOS19ESVJTKQogCisKICNUaGVzZSBhcmUgdXNlZCB3aGVuIGxpbmtpbmcgcmVsb2NhdGFibGUgKGRjKSBjdWRhIGNvZGUKIGlmKE5PVCBDTUFLRV9DVURBX0RFVklDRV9MSU5LX0xJQlJBUlkpCiAgIHNldChDTUFLRV9DVURBX0RFVklDRV9MSU5LX0xJQlJBUlkKLSAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7Q01BS0VfQ1VEQV9IT1NUX0ZMQUdTfSA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gJHtDTUFLRV9DVURBX0NPTVBJTEVfT1BUSU9OU19QSUN9ICR7X0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1N9IC1zaGFyZWQgLWRsaW5rIDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+JHtfX0lNUExJQ1RfRExJTktfRkxBR1N9IikKKyAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7X0NNQUtFX0NVREFfRVhUUkFfRkxBR1N9IDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8TElOS19GTEFHUz4gJHtDTUFLRV9DVURBX0NPTVBJTEVfT1BUSU9OU19QSUN9ICR7X0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1N9IC1zaGFyZWQgLWRsaW5rIDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+JHtfX0lNUExJQ1RfRExJTktfRkxBR1N9IikKIGVuZGlmKCkKIGlmKE5PVCBDTUFLRV9DVURBX0RFVklDRV9MSU5LX0VYRUNVVEFCTEUpCiAgIHNldChDTUFLRV9DVURBX0RFVklDRV9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7Q01BS0VfQ1VEQV9IT1NUX0ZMQUdTfSA8RkxBR1M+ICR7Q01BS0VfQ1VEQV9DT01QSUxFX09QVElPTlNfUElDfSAke19DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTfSAtc2hhcmVkIC1kbGluayA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiR7X19JTVBMSUNUX0RMSU5LX0ZMQUdTfSIpCisgICAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+ICR7Q01BS0VfQ1VEQV9DT01QSUxFX09QVElPTlNfUElDfSAke19DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTfSAtc2hhcmVkIC1kbGluayA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiR7X19JTVBMSUNUX0RMSU5LX0ZMQUdTfSIpCiBlbmRpZigpCiAKLXVuc2V0KF9DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTKQogdW5zZXQoX19JTVBMSUNUX0RMSU5LX0ZMQUdTKQogCiBzZXQoQ01BS0VfQ1VEQV9JTkZPUk1BVElPTl9MT0FERUQgMSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VDWFhDb21waWxlci5jbWFrZS5pbiBiL01vZHVsZXMvQ01ha2VDWFhDb21waWxlci5jbWFrZS5pbgppbmRleCBlZmI4YWJmLi4wOWJkYzIzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlQ1hYQ29tcGlsZXIuY21ha2UuaW4KKysrIGIvTW9kdWxlcy9DTWFrZUNYWENvbXBpbGVyLmNtYWtlLmluCkBAIC0xNyw2ICsxNyw3IEBACiBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlQgIkBDTUFLRV9DWFhfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVEAiKQogc2V0KENNQUtFX0NYWF9TSU1VTEFURV9WRVJTSU9OICJAQ01BS0VfQ1hYX1NJTVVMQVRFX1ZFUlNJT05AIikKIEBfU0VUX0NNQUtFX0NYWF9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSURACitAX1NFVF9DTUFLRV9DWFhfQ09NUElMRVJfU1lTUk9PVEAKIEBTRVRfTVNWQ19DWFhfQVJDSElURUNUVVJFX0lEQAogQFNFVF9DTUFLRV9YQ09ERV9BUkNIU0AKIHNldChDTUFLRV9BUiAiQENNQUtFX0FSQCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ1hYSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlQ1hYSW5mb3JtYXRpb24uY21ha2UKaW5kZXggYTg5NmI5OS4uZGJiNDM2NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUNYWEluZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VDWFhJbmZvcm1hdGlvbi5jbWFrZQpAQCAtMjA3LDYgKzIwNywxMSBAQAogICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0NYWF9TVEFOREFSRF9MSUJSQVJJRVMpCiBlbmRpZigpCiAKK2lmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfTEFVTkNIRVIgQU5EIERFRklORUQgRU5We0NNQUtFX0NYWF9DT01QSUxFUl9MQVVOQ0hFUn0pCisgIHNldChDTUFLRV9DWFhfQ09NUElMRVJfTEFVTkNIRVIgIiRFTlZ7Q01BS0VfQ1hYX0NPTVBJTEVSX0xBVU5DSEVSfSIKKyAgICBDQUNIRSBTVFJJTkcgIkNvbXBpbGVyIGxhdW5jaGVyIGZvciBDWFguIikKK2VuZGlmKCkKKwogaW5jbHVkZShDTWFrZUNvbW1vbkxhbmd1YWdlSW5jbHVkZSkKIAogIyBub3cgZGVmaW5lIHRoZSBmb2xsb3dpbmcgcnVsZXM6CkBAIC0yNTMsNyArMjU4LDcgQEAKICAgc2V0KENNQUtFX0NYWF9BUkNISVZFX0NSRUFURSAiPENNQUtFX0FSPiBxYyA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKIGVuZGlmKCkKIGlmKE5PVCBERUZJTkVEIENNQUtFX0NYWF9BUkNISVZFX0FQUEVORCkKLSAgc2V0KENNQUtFX0NYWF9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFX0NYWF9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfQ1hYX0FSQ0hJVkVfRklOSVNIKQogICBzZXQoQ01BS0VfQ1hYX0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCkBAIC0yNjIsMTIgKzI2NywxMiBAQAogIyBjb21waWxlIGEgQysrIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQogaWYoTk9UIENNQUtFX0NYWF9DT01QSUxFX09CSkVDVCkKICAgc2V0KENNQUtFX0NYWF9DT01QSUxFX09CSkVDVAotICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCisgICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gIDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiBlbmRpZigpCiAKIG1hcmtfYXNfYWR2YW5jZWQoCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlQ2hlY2tDb21waWxlckZsYWdDb21tb25QYXR0ZXJucy5jbWFrZSBiL01vZHVsZXMvQ01ha2VDaGVja0NvbXBpbGVyRmxhZ0NvbW1vblBhdHRlcm5zLmNtYWtlCmluZGV4IGUxY2U2MTcuLjJkYzc1ZDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VDaGVja0NvbXBpbGVyRmxhZ0NvbW1vblBhdHRlcm5zLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VDaGVja0NvbXBpbGVyRmxhZ0NvbW1vblBhdHRlcm5zLmNtYWtlCkBAIC05LDYgKzksNyBAQAogbWFjcm8gKENIRUNLX0NPTVBJTEVSX0ZMQUdfQ09NTU9OX1BBVFRFUk5TIF9WQVIpCiAgIHNldCgke19WQVJ9CiAgICAgRkFJTF9SRUdFWCAiW1V1XW5yZWNvZ25pW3N6XWVkIC4qb3B0aW9uIiAgICAgICAgICAgICAgICMgR05VLCBOQUcKKyAgICBGQUlMX1JFR0VYICJzd2l0Y2ggLiogaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIgICAgICAgICAgIyBHTlUKICAgICBGQUlMX1JFR0VYICJ1bmtub3duIC4qb3B0aW9uIiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDbGFuZwogICAgIEZBSUxfUkVHRVggIm9wdGltaXphdGlvbiBmbGFnIC4qIG5vdCBzdXBwb3J0ZWQiICAgICAgICAjIENsYW5nCiAgICAgRkFJTF9SRUdFWCAidW5rbm93biBhcmd1bWVudCBpZ25vcmVkIiAgICAgICAgICAgICAgICAgICMgQ2xhbmcgKGNsKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUNvbXBpbGVySWREZXRlY3Rpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlQ29tcGlsZXJJZERldGVjdGlvbi5jbWFrZQppbmRleCBiYjU3M2I3Li5hY2QxNWRmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlQ29tcGlsZXJJZERldGVjdGlvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlQ29tcGlsZXJJZERldGVjdGlvbi5jbWFrZQpAQCAtODksOSArODksOCBAQAogICAgICAgKQogICAgIGVuZGlmKCkKIAotICAgICNDdXJyZW50bHkgdGhlIG9ubHkgQ1VEQSBjb21waWxlcnMgYXJlIE5WSURJQQogICAgIGlmKGxhbmcgU1RSRVFVQUwgQ1VEQSkKLSAgICAgIHNldChvcmRlcmVkX2NvbXBpbGVycyBOVklESUEpCisgICAgICBzZXQob3JkZXJlZF9jb21waWxlcnMgTlZJRElBIENsYW5nKQogICAgIGVuZGlmKCkKIAogICAgIGlmKENJRF9JRF9ERUZJTkUpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQVNNQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQVNNQ29tcGlsZXIuY21ha2UKaW5kZXggZTQ3ZjNhNC4uYTNlNWExMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZUFTTUNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVBU01Db21waWxlci5jbWFrZQpAQCAtMTEsNyArMTEsNyBAQAogICBpZihOT1QgJEVOVntBU00ke0FTTV9ESUFMRUNUfX0gU1RSRVFVQUwgIiIpCiAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9JTklUICRFTlZ7QVNNJHtBU01fRElBTEVDVH19IFBST0dSQU0gUFJPR1JBTV9BUkdTIENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0ZMQUdTX0VOVl9JTklUKQogICAgIGlmKENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0ZMQUdTX0VOVl9JTklUKQotICAgICAgc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0FSRzEgIiR7Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fRkxBR1NfRU5WX0lOSVR9IiBDQUNIRSBTVFJJTkcgIkZpcnN0IGFyZ3VtZW50IHRvIEFTTSR7QVNNX0RJQUxFQ1R9IGNvbXBpbGVyIikKKyAgICAgIHNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9BUkcxICIke0NNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0ZMQUdTX0VOVl9JTklUfSIgQ0FDSEUgU1RSSU5HICJBcmd1bWVudHMgdG8gQVNNJHtBU01fRElBTEVDVH0gY29tcGlsZXIiKQogICAgIGVuZGlmKCkKICAgICBpZihOT1QgRVhJU1RTICR7Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfSU5JVH0pCiAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZmluZCBjb21waWxlciBzZXQgaW4gZW52aXJvbm1lbnQgdmFyaWFibGUgQVNNJHtBU01fRElBTEVDVH06XG4kRU5We0FTTSR7QVNNX0RJQUxFQ1R9fS4iKQpAQCAtMTM0LDYgKzEzNCw5IEBACiAgICAgICBsaXN0KEdFVCBfYWxsX2NvbXBpbGVpZF9tYXRjaGVzICItMSIgQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQorCisgIF9jbWFrZV9maW5kX2NvbXBpbGVyX3N5c3Jvb3QoQVNNJHtBU01fRElBTEVDVH0pCisKICAgdW5zZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfSURfT1VUUFVUKQogICB1bnNldChfYWxsX2NvbXBpbGVpZF9tYXRjaGVzKQogICB1bnNldChfY29tcGlsZWlkKQpAQCAtMjExLDYgKzIxNCwyMSBAQAogICBzZXQoX0NNQUtFX0FTTV8ke192YXJ9ICIke0NNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9XyR7X3Zhcn19IikKIGVuZGZvcmVhY2goKQogCitpZihDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9TWVNST09UKQorICBzdHJpbmcoQ09OQ0FUIF9TRVRfQ01BS0VfQVNNX0NPTVBJTEVSX1NZU1JPT1QKKyAgICAic2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX1NZU1JPT1QgXCIke0NNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX1NZU1JPT1R9XCIpXG4iCisgICAgInNldChDTUFLRV9DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9TWVNST09UfVwiKSIpCitlbHNlKCkKKyAgc2V0KF9TRVRfQ01BS0VfQVNNX0NPTVBJTEVSX1NZU1JPT1QgIiIpCitlbmRpZigpCisKK2lmKENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSCkKKyAgc2V0KF9TRVRfQ01BS0VfQVNNX0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSAorICAgICJzZXQoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfSURfVkVORE9SX01BVENIIFs9PVske0NNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSH1dPT1dKSIpCitlbHNlKCkKKyAgc2V0KF9TRVRfQ01BS0VfQVNNX0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSCAiIikKK2VuZGlmKCkKKwogaWYoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEKQogICBzZXQoX1NFVF9DTUFLRV9BU01fQ09NUElMRVJfQVJDSElURUNUVVJFX0lECiAgICAgInNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQgJHtDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUR9KSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ0NvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNDb21waWxlci5jbWFrZQppbmRleCAwMzdjMzNiLi45NmYzMmU1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ0NvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDQ29tcGlsZXIuY21ha2UKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBpZihOT1QgJEVOVntDQ30gU1RSRVFVQUwgIiIpCiAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENNQUtFX0NfQ09NUElMRVJfSU5JVCAkRU5We0NDfSBQUk9HUkFNIFBST0dSQU1fQVJHUyBDTUFLRV9DX0ZMQUdTX0VOVl9JTklUKQogICAgICAgaWYoQ01BS0VfQ19GTEFHU19FTlZfSU5JVCkKLSAgICAgICAgc2V0KENNQUtFX0NfQ09NUElMRVJfQVJHMSAiJHtDTUFLRV9DX0ZMQUdTX0VOVl9JTklUfSIgQ0FDSEUgU1RSSU5HICJGaXJzdCBhcmd1bWVudCB0byBDIGNvbXBpbGVyIikKKyAgICAgICAgc2V0KENNQUtFX0NfQ09NUElMRVJfQVJHMSAiJHtDTUFLRV9DX0ZMQUdTX0VOVl9JTklUfSIgQ0FDSEUgU1RSSU5HICJBcmd1bWVudHMgdG8gQyBjb21waWxlciIpCiAgICAgICBlbmRpZigpCiAgICAgICBpZihOT1QgRVhJU1RTICR7Q01BS0VfQ19DT01QSUxFUl9JTklUfSkKICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGZpbmQgY29tcGlsZXIgc2V0IGluIGVudmlyb25tZW50IHZhcmlhYmxlIENDOlxuJEVOVntDQ30uIikKQEAgLTg3LDcgKzg3LDkgQEAKICAgICAiLS10YXJnZXQ9YXJtLWFybS1ub25lLWVhYmkgLW1jcHU9Y29ydGV4LW0zIgogICAgICkKIGVuZGlmKCkKLQoraWYoQ01BS0VfQ19DT01QSUxFUl9UQVJHRVQpCisgIGxpc3QoUFJFUEVORCBDTUFLRV9DX0NPTVBJTEVSX0lEX1RFU1RfRkxBR1MgIi1jIC0tdGFyZ2V0PSR7Q01BS0VfQ19DT01QSUxFUl9UQVJHRVR9IikKK2VuZGlmKCkKICMgQnVpbGQgYSBzbWFsbCBzb3VyY2UgZmlsZSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIuCiBpZihOT1QgQ01BS0VfQ19DT01QSUxFUl9JRF9SVU4pCiAgIHNldChDTUFLRV9DX0NPTVBJTEVSX0lEX1JVTiAxKQpAQCAtOTksNyArMTAxLDcgQEAKICAgICBDTUFLRV9DX0NPTVBJTEVSX0lEX1BMQVRGT1JNX0NPTlRFTlQpCiAKICAgIyBUaGUgSUFSIGNvbXBpbGVyIHByb2R1Y2VzIHdlaXJkIG91dHB1dC4KLSAgIyBTZWUgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzEwMTc2I25vdGVfMTUzNTkxCisgICMgU2VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzEwMTc2I25vdGVfMTUzNTkxCiAgIGxpc3QoQVBQRU5EIENNQUtFX0NfQ09NUElMRVJfSURfVkVORE9SUyBJQVIpCiAgIHNldChDTUFLRV9DX0NPTVBJTEVSX0lEX1ZFTkRPUl9GTEFHU19JQVIgKQogICBzZXQoQ01BS0VfQ19DT01QSUxFUl9JRF9WRU5ET1JfUkVHRVhfSUFSICJJQVIgLisgQ29tcGlsZXIiKQpAQCAtMTE1LDYgKzExNyw4IEBACiAgIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJJZC5jbWFrZSkKICAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0lEKEMgQ0ZMQUdTIENNYWtlQ0NvbXBpbGVySWQuYykKIAorICBfY21ha2VfZmluZF9jb21waWxlcl9zeXNyb290KEMpCisKICAgIyBTZXQgb2xkIGNvbXBpbGVyIGFuZCBwbGF0Zm9ybSBpZCB2YXJpYWJsZXMuCiAgIGlmKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkdOVSIpCiAgICAgc2V0KENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDIDEpCkBAIC0xNTMsNyArMTU3LDcgQEAKICMgTkFNRV9XRSBjYW5ub3QgYmUgdXNlZCBzaW5jZSB0aGVuIHRoaXMgdGVzdCB3aWxsIGZhaWwgZm9yIG5hbWVzIGxpa2UKICMgImFybS11bmtub3duLW50by1xbng2LjMuMC1nY2MuZXhlIiwgd2hlcmUgQkFTRU5BTUUgd291bGQgYmUKICMgImFybS11bmtub3duLW50by1xbng2IiBpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0ICJhcm0tdW5rbm93bi1udG8tcW54Ni4zLjAtIgotaWYgKENNQUtFX0NST1NTQ09NUElMSU5HICBBTkQgTk9UIF9DTUFLRV9UT09MQ0hBSU5fUFJFRklYKQoraWYgKE5PVCBfQ01BS0VfVE9PTENIQUlOX1BSRUZJWCkKIAogICBpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVXxDbGFuZ3xRQ0MiKQogICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ09NUElMRVJfQkFTRU5BTUUgIiR7Q01BS0VfQ19DT01QSUxFUn0iIE5BTUUpCkBAIC0xOTEsNiArMTk1LDE0IEBACiBpbmNsdWRlKENvbXBpbGVyLyR7Q01BS0VfQ19DT01QSUxFUl9JRH0tRmluZEJpblV0aWxzIE9QVElPTkFMKQogdW5zZXQoX0NNQUtFX1BST0NFU1NJTkdfTEFOR1VBR0UpCiAKK2lmKENNQUtFX0NfQ09NUElMRVJfU1lTUk9PVCkKKyAgc3RyaW5nKENPTkNBVCBfU0VUX0NNQUtFX0NfQ09NUElMRVJfU1lTUk9PVAorICAgICJzZXQoQ01BS0VfQ19DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9DX0NPTVBJTEVSX1NZU1JPT1R9XCIpXG4iCisgICAgInNldChDTUFLRV9DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9DX0NPTVBJTEVSX1NZU1JPT1R9XCIpIikKK2Vsc2UoKQorICBzZXQoX1NFVF9DTUFLRV9DX0NPTVBJTEVSX1NZU1JPT1QgIiIpCitlbmRpZigpCisKIGlmKENNQUtFX0NfQ09NUElMRVJfQVJDSElURUNUVVJFX0lEKQogICBzZXQoX1NFVF9DTUFLRV9DX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRAogICAgICJzZXQoQ01BS0VfQ19DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQgJHtDTUFLRV9DX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRH0pIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDVURBQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ1VEQUNvbXBpbGVyLmNtYWtlCmluZGV4IDQ5MGQ2NTkuLmRhY2EzODIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDVURBQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNVREFDb21waWxlci5jbWFrZQpAQCAtMiw3ICsyLDcgQEAKICMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KIAogaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlci5jbWFrZSkKLWluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzLy9DTWFrZVBhcnNlSW1wbGljaXRMaW5rSW5mby5jbWFrZSkKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlUGFyc2VJbXBsaWNpdExpbmtJbmZvLmNtYWtlKQogCiBpZiggTk9UICggKCIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIk1ha2UiKSBPUgogICAgICAgICAgICgiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJOaW5qYSIpIE9SCkBAIC0xOSw3ICsxOSw3IEBACiAgICAgICBpZihOT1QgJEVOVntDVURBQ1hYfSBTVFJFUVVBTCAiIikKICAgICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDTUFLRV9DVURBX0NPTVBJTEVSX0lOSVQgJEVOVntDVURBQ1hYfSBQUk9HUkFNIFBST0dSQU1fQVJHUyBDTUFLRV9DVURBX0ZMQUdTX0VOVl9JTklUKQogICAgICAgICBpZihDTUFLRV9DVURBX0ZMQUdTX0VOVl9JTklUKQotICAgICAgICAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX0FSRzEgIiR7Q01BS0VfQ1VEQV9GTEFHU19FTlZfSU5JVH0iIENBQ0hFIFNUUklORyAiRmlyc3QgYXJndW1lbnQgdG8gQ1hYIGNvbXBpbGVyIikKKyAgICAgICAgICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9BUkcxICIke0NNQUtFX0NVREFfRkxBR1NfRU5WX0lOSVR9IiBDQUNIRSBTVFJJTkcgIkFyZ3VtZW50cyB0byBDWFggY29tcGlsZXIiKQogICAgICAgICBlbmRpZigpCiAgICAgICAgIGlmKE5PVCBFWElTVFMgJHtDTUFLRV9DVURBX0NPTVBJTEVSX0lOSVR9KQogICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIGNvbXBpbGVyIHNldCBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBDVURBQ1hYOlxuJEVOVntDVURBQ1hYfS5cbiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9JTklUfSIpCkBAIC01MSwyOSArNTEsMjEwIEBACiBpZihOT1QgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9SVU4pCiAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX0lEX1JVTiAxKQogCi0gICMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBjb21waWxlci4KKyAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlcklkLmNtYWtlKQorCisgIGlmKCR7Q01BS0VfR0VORVJBVE9SfSBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgICAjIFdlIHdpbGwgbm90IGtub3cgQ01BS0VfQ1VEQV9DT01QSUxFUiB1bnRpbCB0aGUgbWFpbiBjb21waWxlciBpZCBzdGVwCisgICAgIyBiZWxvdyBleHRyYWN0cyBpdCwgYnV0IHdlIGRvIGtub3cgdGhhdCB0aGUgY29tcGlsZXIgaWQgd2lsbCBiZSBOVklESUEuCisgICAgc2V0KENNQUtFX0NVREFfQ09NUElMRVJfSUQgIk5WSURJQSIpCisgIGVsc2UoKQorICAgICMgV2UgZGV0ZXJtaW5lIHRoZSB2ZW5kb3IgdG8gaGVscCB3aXRoIGZpbmQgdGhlIHRvb2xraXQgYW5kIHVzZSB0aGUgcmlnaHQgZmxhZ3MgZm9yIGRldGVjdGlvbiByaWdodCBhd2F5LgorICAgICMgVGhlIG1haW4gY29tcGlsZXIgaWRlbnRpZmljYXRpb24gaXMgc3RpbGwgbmVlZGVkIGJlbG93IHRvIGV4dHJhY3Qgb3RoZXIgaW5mb3JtYXRpb24uCisgICAgbGlzdChBUFBFTkQgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9WRU5ET1JTIE5WSURJQSBDbGFuZykKKyAgICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9WRU5ET1JfUkVHRVhfTlZJRElBICJudmNjOiBOVklESUEgXFwoUlxcKSBDdWRhIGNvbXBpbGVyIGRyaXZlciIpCisgICAgc2V0KENNQUtFX0NVREFfQ09NUElMRVJfSURfVkVORE9SX1JFR0VYX0NsYW5nICIoY2xhbmcgdmVyc2lvbikiKQorICAgIENNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9JRF9WRU5ET1IoQ1VEQSAiLS12ZXJzaW9uIikKKworICAgICMgRmluZCB0aGUgQ1VEQSB0b29sa2l0LiBXZSBzdG9yZSB0aGUgQ01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1QgYW5kIENNQUtFX0NVREFfQ09NUElMRVJfTElCUkFSWV9ST09UCisgICAgIyBpbiBDTWFrZUNVREFDb21waWxlci5jbWFrZSwgc28gRmluZENVREFUb29sa2l0IGNhbiBhdm9pZCBzZWFyY2hpbmcgb24gZnV0dXJlIHJ1bnMgYW5kIHRoZSB0b29sa2l0IHN0YXlzIHRoZSBzYW1lLgorICAgICMgVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gRmluZENVREFUb29sa2l0LCBidXQgc29tZXdoYXQgc2ltcGxpZmllZCBzaW5jZSB3ZSBjYW4gaXNzdWUgZmF0YWwgZXJyb3JzCisgICAgIyBpZiB3ZSBmYWlsIHRvIGZpbmQgdGhpbmdzIHdlIG5lZWQgYW5kIHdlIGRvbid0IG5lZWQgdG8gYWNjb3VudCBmb3Igc2VhcmNoaW5nIHRoZSBsaWJyYXJpZXMuCisKKyAgICAjIEZvciBOVkNDIHdlIGNhbiBlYXNpbHkgZGVkdWNlIHRoZSBTREsgYmluYXJ5IGRpcmVjdG9yeSBmcm9tIHRoZSBjb21waWxlciBwYXRoLgorICAgIGlmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgIk5WSURJQSIpCisgICAgICBzZXQoX0NVREFfTlZDQ19FWEVDVVRBQkxFICIke0NNQUtFX0NVREFfQ09NUElMRVJ9IikKKyAgICBlbHNlKCkKKyAgICAgICMgU2VhcmNoIHVzaW5nIENVREFUb29sa2l0X1JPT1QgYW5kIHRoZW4gQ1VEQV9QQVRIIGZvciBlcXVpdmFsZW5jZSB3aXRoIEZpbmRDVURBVG9vbGtpdC4KKyAgICAgICMgSW4gRmluZENVREFUb29sa2l0IENVREFUb29sa2l0X1JPT1QgaXMgc2VhcmNoZWQgYXV0b21hdGljYWxseSBkdWUgdG8gYmVpbmcgaW4gYSBmaW5kX3BhY2thZ2UoKS4KKyAgICAgICMgRmlyc3Qgd2Ugc2VhcmNoIGNhbmRpZGF0ZSBub24tZGVmYXVsdCBwYXRocyB0byBnaXZlIHRoZW0gcHJpb3JpdHkuCisgICAgICBmaW5kX3Byb2dyYW0oX0NVREFfTlZDQ19FWEVDVVRBQkxFCisgICAgICAgIE5BTUVTIG52Y2MgbnZjYy5leGUKKyAgICAgICAgUEFUSFMgJHtDVURBVG9vbGtpdF9ST09UfQorICAgICAgICBFTlYgQ1VEQVRvb2xraXRfUk9PVAorICAgICAgICBFTlYgQ1VEQV9QQVRICisgICAgICAgIFBBVEhfU1VGRklYRVMgYmluCisgICAgICAgIE5PX0RFRkFVTFRfUEFUSAorICAgICAgKQorCisgICAgICAjIElmIHdlIGRpZG4ndCBmaW5kIE5WQ0MsIHRoZW4gdHJ5IHRoZSBkZWZhdWx0IHBhdGhzLgorICAgICAgZmluZF9wcm9ncmFtKF9DVURBX05WQ0NfRVhFQ1VUQUJMRQorICAgICAgICBOQU1FUyBudmNjIG52Y2MuZXhlCisgICAgICAgIFBBVEhfU1VGRklYRVMgYmluCisgICAgICApCisKKyAgICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIENVREFUb29sa2l0X1JPT1QgYnV0IG52Y2MgY291bGQgbm90IGJlIGZvdW5kLCB0aGlzIGlzIGFuIGVycm9yLgorICAgICAgaWYoTk9UIF9DVURBX05WQ0NfRVhFQ1VUQUJMRSBBTkQgKERFRklORUQgQ1VEQVRvb2xraXRfUk9PVCBPUiBERUZJTkVEIEVOVntDVURBVG9vbGtpdF9ST09UfSkpCisgICAgICAgIHNldChmYWlsX2Jhc2UgIkNvdWxkIG5vdCBmaW5kIG52Y2MgZXhlY3V0YWJsZSBpbiBwYXRoIHNwZWNpZmllZCBieSIpCisKKyAgICAgICAgaWYoREVGSU5FRCBDVURBVG9vbGtpdF9ST09UKQorICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7ZmFpbF9iYXNlfSBDVURBVG9vbGtpdF9ST09UPSR7Q1VEQVRvb2xraXRfUk9PVH0iKQorICAgICAgICBlbHNlaWYoREVGSU5FRCBFTlZ7Q1VEQVRvb2xraXRfUk9PVH0pCisgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiJHtmYWlsX2Jhc2V9IGVudmlyb25tZW50IHZhcmlhYmxlIENVREFUb29sa2l0X1JPT1Q9JEVOVntDVURBVG9vbGtpdF9ST09UfSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGlmKCkKKworICAgICAgIyBDVURBVG9vbGtpdF9ST09UIGNtYWtlL2VudiB2YXJpYWJsZSBub3Qgc3BlY2lmaWVkLCB0cnkgcGxhdGZvcm0gZGVmYXVsdHMuCisgICAgICAjCisgICAgICAjIC0gTGludXg6IC91c3IvbG9jYWwvY3VkYS1YLlkKKyAgICAgICMgLSBtYWNPUzogL0RldmVsb3Blci9OVklESUEvQ1VEQS1YLlkKKyAgICAgICMgLSBXaW5kb3dzOiBDOlxQcm9ncmFtIEZpbGVzXE5WSURJQSBHUFUgQ29tcHV0aW5nIFRvb2xraXRcQ1VEQVx2WC5ZCisgICAgICAjCisgICAgICAjIFdlIHdpbGwgYWxzbyBzZWFyY2ggdGhlIGRlZmF1bHQgc3ltbGluayBsb2NhdGlvbiAvdXNyL2xvY2FsL2N1ZGEgZmlyc3Qgc2luY2UKKyAgICAgICMgaWYgQ1VEQVRvb2xraXRfUk9PVCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHN5bWxpbmtlZAorICAgICAgIyBkaXJlY3RvcnkgaXMgdGhlIGRlc2lyZWQgbG9jYXRpb24uCisgICAgICBpZihOT1QgX0NVREFfTlZDQ19FWEVDVVRBQkxFKQorICAgICAgICBpZihVTklYKQorICAgICAgICAgIGlmKE5PVCBBUFBMRSkKKyAgICAgICAgICAgIHNldChwbGF0Zm9ybV9iYXNlICIvdXNyL2xvY2FsL2N1ZGEtIikKKyAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgIHNldChwbGF0Zm9ybV9iYXNlICIvRGV2ZWxvcGVyL05WSURJQS9DVURBLSIpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQocGxhdGZvcm1fYmFzZSAiQzpcXFByb2dyYW0gRmlsZXNcXE5WSURJQSBHUFUgQ29tcHV0aW5nIFRvb2xraXRcXENVREFcXHYiKQorICAgICAgICBlbmRpZigpCisKKyAgICAgICAgIyBCdWlsZCBvdXQgYSBkZXNjZW5kaW5nIGxpc3Qgb2YgcG9zc2libGUgY3VkYSBpbnN0YWxsYXRpb25zLCBlLmcuCisgICAgICAgIGZpbGUoR0xPQiBwb3NzaWJsZV9wYXRocyAiJHtwbGF0Zm9ybV9iYXNlfSoiKQorICAgICAgICAjIEl0ZXJhdGUgdGhlIGdsb2IgcmVzdWx0cyBhbmQgY3JlYXRlIGEgZGVzY2VuZGluZyBsaXN0LgorICAgICAgICBzZXQodmVyc2lvbnMpCisgICAgICAgIGZvcmVhY2gocCAke3Bvc3NpYmxlX3BhdGhzfSkKKyAgICAgICAgICAjIEV4dHJhY3QgdmVyc2lvbiBudW1iZXIgZnJvbSBlbmQgb2Ygc3RyaW5nCisgICAgICAgICAgc3RyaW5nKFJFR0VYIE1BVENIICJbMC05XVswLTldP1xcLlswLTldJCIgcF92ZXJzaW9uICR7cH0pCisgICAgICAgICAgaWYoSVNfRElSRUNUT1JZICR7cH0gQU5EIHBfdmVyc2lvbikKKyAgICAgICAgICAgIGxpc3QoQVBQRU5EIHZlcnNpb25zICR7cF92ZXJzaW9ufSkKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGZvcmVhY2goKQorCisgICAgICAgICMgU29ydCBudW1lcmljYWxseSBpbiBkZXNjZW5kaW5nIG9yZGVyLCBzbyB3ZSB0cnkgdGhlIG5ld2VzdCB2ZXJzaW9ucyBmaXJzdC4KKyAgICAgICAgbGlzdChTT1JUIHZlcnNpb25zIENPTVBBUkUgTkFUVVJBTCBPUkRFUiBERVNDRU5ESU5HKQorCisgICAgICAgICMgV2l0aCBhIGRlc2NlbmRpbmcgbGlzdCBvZiB2ZXJzaW9ucywgcG9wdWxhdGUgcG9zc2libGUgcGF0aHMgdG8gc2VhcmNoLgorICAgICAgICBzZXQoc2VhcmNoX3BhdGhzKQorICAgICAgICBmb3JlYWNoKHYgJHt2ZXJzaW9uc30pCisgICAgICAgICAgbGlzdChBUFBFTkQgc2VhcmNoX3BhdGhzICIke3BsYXRmb3JtX2Jhc2V9JHt2fSIpCisgICAgICAgIGVuZGZvcmVhY2goKQorCisgICAgICAgICMgRm9yY2UgdGhlIGdsb2JhbCBkZWZhdWx0IC91c3IvbG9jYWwvY3VkYSB0byB0aGUgZnJvbnQgb24gVW5peC4KKyAgICAgICAgaWYoVU5JWCkKKyAgICAgICAgICBsaXN0KElOU0VSVCBzZWFyY2hfcGF0aHMgMCAiL3Vzci9sb2NhbC9jdWRhIikKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgICMgTm93IHNlYXJjaCBmb3IgbnZjYyBhZ2FpbiB1c2luZyB0aGUgcGxhdGZvcm0gZGVmYXVsdCBzZWFyY2ggcGF0aHMuCisgICAgICAgIGZpbmRfcHJvZ3JhbShfQ1VEQV9OVkNDX0VYRUNVVEFCTEUKKyAgICAgICAgICBOQU1FUyBudmNjIG52Y2MuZXhlCisgICAgICAgICAgUEFUSFMgJHtzZWFyY2hfcGF0aHN9CisgICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4KKyAgICAgICAgKQorCisgICAgICAgICMgV2UgYXJlIGRvbmUgd2l0aCB0aGVzZSB2YXJpYWJsZXMgbm93LCBjbGVhbnVwLgorICAgICAgICB1bnNldChwbGF0Zm9ybV9iYXNlKQorICAgICAgICB1bnNldChwb3NzaWJsZV9wYXRocykKKyAgICAgICAgdW5zZXQodmVyc2lvbnMpCisgICAgICAgIHVuc2V0KHNlYXJjaF9wYXRocykKKworICAgICAgICBpZihOT1QgX0NVREFfTlZDQ19FWEVDVVRBQkxFKQorICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIG52Y2MsIHBsZWFzZSBzZXQgQ1VEQVRvb2xraXRfUk9PVC4iKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorCisgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVCAiJHtfQ1VEQV9OVkNDX0VYRUNVVEFCTEV9IiBESVJFQ1RPUlkpCisgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVCAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVH0iIERJUkVDVE9SWSkKKworICAgICMgQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1QgY29udGFpbnMgdGhlIGRldmljZSBsaWJyYXJ5IGFuZCB2ZXJzaW9uIGZpbGUuCisgICAgIyBJbiBhIG5vbi1zY2F0dGVyZWQgaW5zdGFsbGF0aW9uIHRoaXMgaXMgZXF1aXZhbGVudCB0byBDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVC4KKyAgICAjIFdlIGZpcnN0IGNoZWNrIGZvciBhIG5vbi1zY2F0dGVyZWQgaW5zdGFsbGF0aW9uIHRvIHByZWZlciBpdCBvdmVyIGEgc2NhdHRlcmVkIGluc3RhbGxhdGlvbi4KKyAgICBpZihFWElTVFMgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9L3ZlcnNpb24udHh0IikKKyAgICAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX0xJQlJBUllfUk9PVCAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVH0iKQorICAgIGVsc2VpZihDTUFLRV9TWVNST09UX0xJTksgQU5EIEVYSVNUUyAiJHtDTUFLRV9TWVNST09UX0xJTkt9L3Vzci9saWIvY3VkYS92ZXJzaW9uLnR4dCIpCisgICAgICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1QgIiR7Q01BS0VfU1lTUk9PVF9MSU5LfS91c3IvbGliL2N1ZGEiKQorICAgIGVsc2VpZihFWElTVFMgIiR7Q01BS0VfU1lTUk9PVH0vdXNyL2xpYi9jdWRhL3ZlcnNpb24udHh0IikKKyAgICAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX0xJQlJBUllfUk9PVCAiJHtDTUFLRV9TWVNST09UfS91c3IvbGliL2N1ZGEiKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCisgIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX0lEX0ZMQUdTX0FMV0FZUyAiLXYiKQorCisgIGlmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgIk5WSURJQSIpCisgICAgc2V0KG52Y2NfdGVzdF9mbGFncyAiLS1rZWVwIC0ta2VlcC1kaXIgdG1wIikKKyAgICBpZihDTUFLRV9DVURBX0hPU1RfQ09NUElMRVIpCisgICAgICBzdHJpbmcoQVBQRU5EIG52Y2NfdGVzdF9mbGFncyAiIC1jY2Jpbj1cIiR7Q01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSfVwiIikKKyAgICBlbmRpZigpCisgIGVsc2VpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJDbGFuZyIpCisgICAgaWYoV0lOMzIpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDbGFuZyB3aXRoIENVREEgaXMgbm90IHlldCBzdXBwb3J0ZWQgb24gV2luZG93cy4gU2VlIENNYWtlIGlzc3VlICMyMDc3Ni4iKQorICAgIGVuZGlmKCkKKworICAgIHNldChjbGFuZ190ZXN0X2ZsYWdzICItLWN1ZGEtcGF0aD1cIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1R9XCIiKQorICAgIGlmKENNQUtFX0NST1NTQ09NUElMSU5HKQorICAgICAgIyBOZWVkIHRvIHBhc3MgdGhlIGhvc3QgdGFyZ2V0IGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGlmIHdlJ3JlIGNyb3NzY29tcGlsaW5nLgorICAgICAgc3RyaW5nKEFQUEVORCBjbGFuZ190ZXN0X2ZsYWdzICIgLS1zeXNyb290PVwiJHtDTUFLRV9TWVNST09UfVwiIC0tdGFyZ2V0PSR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UQVJHRVR9IikKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICAjIEZpcnN0IHRyeSB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBhcmNoaXRlY3R1cmVzLgorICBpZihDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMpCisgICAgc2V0KGNsYW5nX2FyY2hzICIke2NsYW5nX3Rlc3RfZmxhZ3N9IikKKyAgICBzZXQobnZjY19hcmNocyAiJHtudmNjX3Rlc3RfZmxhZ3N9IikKKworICAgIGZvcmVhY2goYXJjaCAke0NNQUtFX0NVREFfQVJDSElURUNUVVJFU30pCisgICAgICAjIFN0cmlwIHNwZWNpZmllcnMgYXMgUFRYIHZzIGJpbmFyeSBkb2Vzbid0IG1hdHRlci4KKyAgICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiWzAtOV0rIiBhcmNoX25hbWUgIiR7YXJjaH0iKQorICAgICAgc3RyaW5nKEFQUEVORCBjbGFuZ19hcmNocyAiIC0tY3VkYS1ncHUtYXJjaD1zbV8ke2FyY2hfbmFtZX0iKQorICAgICAgc3RyaW5nKEFQUEVORCBudmNjX2FyY2hzICIgLWdlbmNvZGU9YXJjaD1jb21wdXRlXyR7YXJjaF9uYW1lfSxjb2RlPXNtXyR7YXJjaF9uYW1lfSIpCisgICAgICBsaXN0KEFQUEVORCB0ZXN0ZWRfYXJjaGl0ZWN0dXJlcyAiJHthcmNoX25hbWV9IikKKyAgICBlbmRmb3JlYWNoKCkKKworICAgIGxpc3QoQVBQRU5EIENNQUtFX0NVREFfQ09NUElMRVJfSURfVEVTVF9GTEFHU19GSVJTVCAiJHtjbGFuZ19hcmNoc30iKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX0NVREFfQ09NUElMRVJfSURfVEVTVF9GTEFHU19GSVJTVCAiJHtudmNjX2FyY2hzfSIpCisgIGVuZGlmKCkKKworICAjIEZhbGxiYWNrIGRlZmF1bHQgTlZDQyBmbGFncy4KKyAgbGlzdChBUFBFTkQgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9URVNUX0ZMQUdTX0ZJUlNUICR7bnZjY190ZXN0X2ZsYWdzfSkKKworICAjIENsYW5nIGRvZXNuJ3QgYXV0b21hdGljYWxseSBzZWxlY3QgYW4gYXJjaGl0ZWN0dXJlIHN1cHBvcnRlZCBieSB0aGUgU0RLLgorICAjIFRyeSBpbiByZXZlcnNlIG9yZGVyIG9mIGRlcHJlY2F0aW9uIHdpdGggdGhlIG1vc3QgcmVjZW50IGF0IGZyb250IChpLmUuIHRoZSBtb3N0IGxpa2VseSB0byB3b3JrIGZvciBuZXcgc2V0dXBzKS4KKyAgZm9yZWFjaChhcmNoICIyMCIgIjMwIiAiNTIiKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX0NVREFfQ09NUElMRVJfSURfVEVTVF9GTEFHU19GSVJTVCAiJHtjbGFuZ190ZXN0X2ZsYWdzfSAtLWN1ZGEtZ3B1LWFyY2g9c21fJHthcmNofSIpCisgIGVuZGZvcmVhY2goKQorCisgICMgRmluYWxseSBhbHNvIHRyeSB0aGUgZGVmYXVsdC4KKyAgbGlzdChBUFBFTkQgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9URVNUX0ZMQUdTX0ZJUlNUICIke2NsYW5nX3Rlc3RfZmxhZ3N9IikKKworICAjIFdlIHBlcmZvcm0gY29tcGlsZXIgaWRlbnRpZmljYXRpb24gZm9yIGEgc2Vjb25kIHRpbWUgdG8gZXh0cmFjdCBpbXBsaWNpdCBsaW5raW5nIGluZm8gYW5kIGhvc3QgY29tcGlsZXIgZm9yIE5WQ0MuCisgICMgV2UgYWxzbyB1c2UgaXQgdG8gdmVyaWZ5IHRoYXQgQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIGFuZCBhZGRpdGlvbmFsbHkgb24gQ2xhbmcgdGhhdCBDVURBIHRvb2xraXQgcGF0aCB3b3Jrcy4KKyAgIyBUaGUgbGF0dGVyIGNvdWxkIGJlIGRvbmUgZHVyaW5nIGNvbXBpbGVyIHRlc3RpbmcgaW4gdGhlIGZ1dHVyZSB0byBhdm9pZCBkb2luZyB0aGlzIGZvciBDbGFuZy4KKyAgIyBXZSBuZWVkIHRvIHVuc2V0IHRoZSBjb21waWxlciBJRCBvdGhlcndpc2UgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0lEKCkgZG9lc24ndCB3b3JrLgogICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCkKICAgc2V0KENNQUtFX0NVREFfUExBVEZPUk1fSUQpCiAgIGZpbGUoUkVBRCAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VQbGF0Zm9ybUlkLmguaW4KICAgICBDTUFLRV9DVURBX0NPTVBJTEVSX0lEX1BMQVRGT1JNX0NPTlRFTlQpCiAKLSAgbGlzdChBUFBFTkQgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9NQVRDSF9WRU5ET1JTIE5WSURJQSkKLSAgc2V0KENNQUtFX0NVREFfQ09NUElMRVJfSURfTUFUQ0hfVkVORE9SX1JFR0VYX05WSURJQSAibnZjYzogTlZJRElBIFwoUlwpIEN1ZGEgY29tcGlsZXIgZHJpdmVyIikKKyAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0lEKENVREEgQ1VEQUZMQUdTIENNYWtlQ1VEQUNvbXBpbGVySWQuY3UpCiAKLSAgc2V0KENNQUtFX0NYWF9DT01QSUxFUl9JRF9UT09MX01BVENIX1JFR0VYICJcbkxkW15cbl0qKFxuWyBcdF0rW15cbl0qKSpcblsgXHRdKyhbXiBcdFxyXG5dKylbXlxyXG5dKi1vW15cclxuXSpDb21waWxlcklkQ1VEQS8oXFwuLyk/KENvbXBpbGVySWRDVURBLnhjdGVzdC8pP0NvbXBpbGVySWRDVURBWyBcdFxuXFxcIl0iKQotICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEX1RPT0xfTUFUQ0hfSU5ERVggMikKLQotICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRF9GTEFHU19BTFdBWVMgLXYgLS1rZWVwIC0ta2VlcC1kaXIgdG1wKQotICBpZihDTUFLRV9DVURBX0hPU1RfQ09NUElMRVIpCi0gICAgICBsaXN0KEFQUEVORCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEX0ZMQUdTX0FMV0FZUyAiLWNjYmluPSR7Q01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSfSIpCisgIGlmKCR7Q01BS0VfR0VORVJBVE9SfSBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgICAjIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHBhdGggdG8gbnZjYywgd2UgY2FuIGNvbXB1dGUgdGhlIHRvb2xraXQgcm9vdC4KKyAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENNQUtFX0NVREFfQ09NUElMRVJfVE9PTEtJVF9ST09UICIke0NNQUtFX0NVREFfQ09NUElMRVJ9IiBESVJFQ1RPUlkpCisgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVCAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1RPT0xLSVRfUk9PVH0iIERJUkVDVE9SWSkKKyAgICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1QgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9IikKICAgZW5kaWYoKQogCi0gIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJJZC5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0lEKENVREEgQ1VEQUZMQUdTIENNYWtlQ1VEQUNvbXBpbGVySWQuY3UpCisgIF9jbWFrZV9maW5kX2NvbXBpbGVyX3N5c3Jvb3QoQ1VEQSkKIGVuZGlmKCkKIAogc2V0KF9DTUFLRV9QUk9DRVNTSU5HX0xBTkdVQUdFICJDVURBIikKIGluY2x1ZGUoQ01ha2VGaW5kQmluVXRpbHMpCitpbmNsdWRlKENvbXBpbGVyLyR7Q01BS0VfQ1VEQV9DT01QSUxFUl9JRH0tRmluZEJpblV0aWxzIE9QVElPTkFMKQogdW5zZXQoX0NNQUtFX1BST0NFU1NJTkdfTEFOR1VBR0UpCiAKIGlmKE1TVkNfQ1VEQV9BUkNISVRFQ1RVUkVfSUQpCkBAIC04Niw3ICsyNjcsODUgQEAKICAgc2V0KENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyAiIikKICAgc2V0KENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTICIiKQogICBzZXQoQ01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfRlJBTUVXT1JLX0RJUkVDVE9SSUVTICIiKQotZWxzZWlmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgTlZJRElBKQorCisgICMgV2UgZG8gbm90IGN1cnJlbnRseSBkZXRlY3QgQ01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTIGJ1dCB3ZQorICAjIGRvIG5lZWQgdG8gZGV0ZWN0IENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFQgZnJvbSB0aGUgY29tcGlsZXIgYnkKKyAgIyBsb29raW5nIGF0IHdoaWNoIGN1ZGFydCBsaWJyYXJ5IGV4aXN0cyBpbiB0aGUgaW1wbGljaXQgbGluayBsaWJyYXJpZXMgcGFzc2VkCisgICMgdG8gdGhlIGhvc3QgbGlua2VyLgorICBpZihDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVCBNQVRDSEVTICJsaW5rXFwuZXhlIFteXG5dKmN1ZGFydF9zdGF0aWNcXC5saWIiKQorICAgIHNldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUICJTVEFUSUMiKQorICBlbHNlaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9QUk9EVUNFRF9PVVRQVVQgTUFUQ0hFUyAibGlua1xcLmV4ZSBbXlxuXSpjdWRhcnRcXC5saWIiKQorICAgIHNldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUICJTSEFSRUQiKQorICBlbHNlKCkKKyAgICBzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVCAiTk9ORSIpCisgIGVuZGlmKCkKKyAgc2V0KF9TRVRfQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVAorICAgICJzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVCBcIiR7Q01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVH1cIikiKQorZWxzZWlmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNsYW5nIikKKyAgaWYoTk9UIENNQUtFX0NVREFfQVJDSElURUNUVVJFUykKKyAgICAjIEZpbmQgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHdlIHN1Y2Nlc3NmdWxseSBjb21waWxlZCB1c2luZyBhbmQgc2V0IGl0IGFzIHRoZSBkZWZhdWx0LgorICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiLXRhcmdldC1jcHUgc21fKFswLTldKykiIGRvbnRfY2FyZSAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVH0iKQorICAgIHNldChkZXRlY3RlZF9hcmNoaXRlY3R1cmUgIiR7Q01BS0VfTUFUQ0hfMX0iKQorICBlbHNlKCkKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0hBTEwgIi10YXJnZXQtY3B1IHNtXyhbMC05XSspIiB0YXJnZXRfY3B1cyAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVH0iKQorCisgICAgZm9yZWFjaChjcHUgJHt0YXJnZXRfY3B1c30pCisgICAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIi10YXJnZXQtY3B1IHNtXyhbMC05XSspIiBkb250X2NhcmUgIiR7Y3B1fSIpCisgICAgICBsaXN0KEFQUEVORCBhcmNoaXRlY3R1cmVzICIke0NNQUtFX01BVENIXzF9IikKKyAgICBlbmRmb3JlYWNoKCkKKyAgZW5kaWYoKQorCisgICMgRmluZCB0YXJnZXQgZGlyZWN0b3J5LiBBY2NvdW50IGZvciBjcm9zc2NvbXBpbGluZy4KKyAgaWYoQ01BS0VfQ1JPU1NDT01QSUxJTkcpCisgICAgaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAiYXJtdjctYSIpCisgICAgICAjIFN1cHBvcnQgZm9yIE5WUEFDSworICAgICAgc2V0KF9DVURBX1RBUkdFVF9OQU1FICJhcm12Ny1saW51eC1hbmRyb2lkZWFiaSIpCisgICAgZWxzZWlmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgTUFUQ0hFUyAiYXJtIikKKyAgICAgIHNldChfQ1VEQV9UQVJHRVRfTkFNRSAiYXJtdjctbGludXgtZ251ZWFiaWhmIikKKyAgICBlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBNQVRDSEVTICJhYXJjaDY0IikKKyAgICAgIGlmKEFORFJPSURfQVJDSF9OQU1FIFNUUkVRVUFMICJhcm02NCIpCisgICAgICAgIHNldChfQ1VEQV9UQVJHRVRfTkFNRSAiYWFyY2g2NC1saW51eC1hbmRyb2lkZWFiaSIpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KF9DVURBX1RBUkdFVF9OQU1FICJhYXJjaDY0LWxpbnV4IikKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAieDg2XzY0IikKKyAgICAgIHNldChfQ1VEQV9UQVJHRVRfTkFNRSAieDg2XzY0LWxpbnV4IikKKyAgICBlbmRpZigpCisKKyAgICBpZihFWElTVFMgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9L3RhcmdldHMvJHtfQ1VEQV9UQVJHRVRfTkFNRX0iKQorICAgICAgc2V0KF9DVURBX1RBUkdFVF9ESVIgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9L3RhcmdldHMvJHtfQ1VEQV9UQVJHRVRfTkFNRX0iKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgc2V0KF9DVURBX1RBUkdFVF9ESVIgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9IikKKyAgZW5kaWYoKQorCisgICMgV2UgY2FuJ3QgdXNlIGZpbmRfbGlicmFyeSgpIHlldCBhdCB0aGlzIHBvaW50LCBzbyB0cnkgYSBmZXcgZ3Vlc3Nlcy4KKyAgaWYoRVhJU1RTICIke19DVURBX1RBUkdFVF9ESVJ9L2xpYjY0IikKKyAgICBzZXQoX0NVREFfTElCUkFSWV9ESVIgIiR7X0NVREFfVEFSR0VUX0RJUn0vbGliNjQiKQorICBlbHNlaWYoRVhJU1RTICIke19DVURBX1RBUkdFVF9ESVJ9L2xpYi94NjQiKQorICAgIHNldChfQ1VEQV9MSUJSQVJZX0RJUiAiJHtfQ1VEQV9UQVJHRVRfRElSfS9saWIveDY0IikKKyAgZWxzZWlmKEVYSVNUUyAiJHtfQ1VEQV9UQVJHRVRfRElSfS9saWIiKQorICAgIHNldChfQ1VEQV9MSUJSQVJZX0RJUiAiJHtfQ1VEQV9UQVJHRVRfRElSfS9saWIiKQorICBlbHNlKCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmFibGUgdG8gZmluZCBfQ1VEQV9MSUJSQVJZX0RJUiBiYXNlZCBvbiBfQ1VEQV9UQVJHRVRfRElSPSR7X0NVREFfVEFSR0VUX0RJUn0iKQorICBlbmRpZigpCisKKyAgIyBfQ1VEQV9UQVJHRVRfRElSIGFsd2F5cyBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbmNsdWRlIGRpcmVjdG9yeS4KKyAgIyBPbiBhIHNjYXR0ZXJlZCBpbnN0YWxsYXRpb24gL3Vzciwgb24gYSBub24tc2NhdHRlcmVkIHNvbWV0aGluZyBsaWtlIC91c3IvbG9jYWwvY3VkYSBvciAvdXNyL2xvY2FsL2N1ZGEtMTAuMi90YXJnZXRzL2FhcmNoNjQtbGludXguCisgIGlmKEVYSVNUUyAiJHtfQ1VEQV9UQVJHRVRfRElSfS9pbmNsdWRlL2N1ZGFfcnVudGltZS5oIikKKyAgICBzZXQoX0NVREFfSU5DTFVERV9ESVIgIiR7X0NVREFfVEFSR0VUX0RJUn0vaW5jbHVkZSIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlVuYWJsZSB0byBmaW5kIGN1ZGFfcnVudGltZS5oIGluIFwiJHtfQ1VEQV9UQVJHRVRfRElSfS9pbmNsdWRlXCIgZm9yIF9DVURBX0lOQ0xVREVfRElSLiIpCisgIGVuZGlmKCkKKworICAjIENsYW5nIGRvZXMgbm90IGFkZCBhbnkgQ1VEQSBTREsgbGlicmFyaWVzIG9yIGRpcmVjdG9yaWVzIHdoZW4gaW52b2tpbmcgdGhlIGhvc3QgbGlua2VyLgorICAjIEFkZCB0aGUgQ1VEQSB0b29sa2l0IGxpYnJhcnkgZGlyZWN0b3J5IG91cnNlbHZlcyBzbyB0aGF0IGxpbmtpbmcgd29ya3MuCisgICMgVGhlIENVREEgcnVudGltZSBsaWJyYXJpZXMgYXJlIGhhbmRsZWQgZWxzZXdoZXJlIGJ5IENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZLgorICBzZXQoQ01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7X0NVREFfSU5DTFVERV9ESVJ9IikKKyAgc2V0KENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTICIke19DVURBX0xJQlJBUllfRElSfSIpCisgIHNldChDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVMgIiIpCisgIHNldChDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19GUkFNRVdPUktfRElSRUNUT1JJRVMgIiIpCitlbHNlaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTlZJRElBIikKICAgc2V0KF9udmNjX2xvZyAiIikKICAgc3RyaW5nKFJFUExBQ0UgIlxyIiAiIiBfbnZjY19vdXRwdXRfb3JpZyAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVH0iKQogICBpZihfbnZjY19vdXRwdXRfb3JpZyBNQVRDSEVTICIjXFxcJCArUEFUSD0gKihbXlxuXSopXG4iKQpAQCAtMTc5LDE1ICs0MzgsNTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0NNQUtFX0NVREFfSU1QTElDSVRfT0JKRUNUX1JFR0VYfSIpCiAKKyAgICAjIERldGVjdCBDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUIGZyb20gdGhlIGNvbXBpbGVyIGJ5IGxvb2tpbmcgYXQgd2hpY2gKKyAgICAjIGN1ZGFydCBsaWJyYXJ5IGV4aXN0cyBpbiB0aGUgaW1wbGljaXQgbGluayBsaWJyYXJpZXMgcGFzc2VkIHRvIHRoZSBob3N0IGxpbmtlci4KKyAgICAjIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiBhIHByb2plY3Qgc2V0cyB0aGUgY3VkYSBydW50aW1lIGxpYnJhcnkgYXMgcGFydCBvZiB0aGUKKyAgICAjIGluaXRpYWwgZmxhZ3MuCisgICAgaWYoIjske0NNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU307IiBNQVRDSEVTIFtbO2N1ZGFydF9zdGF0aWMoXC5saWIpPztdXSkKKyAgICAgIHNldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUICJTVEFUSUMiKQorICAgIGVsc2VpZigiOyR7Q01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTfTsiIE1BVENIRVMgW1s7Y3VkYXJ0KFwubGliKT87XV0pCisgICAgICBzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVCAiU0hBUkVEIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUICJOT05FIikKKyAgICBlbmRpZigpCisgICAgc2V0KF9TRVRfQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfREVGQVVMVAorICAgICAgInNldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUIFwiJHtDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUfVwiKSIpCisKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgIlBhcnNlZCBDVURBIG52Y2MgaW1wbGljaXQgbGluayBpbmZvcm1hdGlvbiBmcm9tIGFib3ZlIG91dHB1dDpcbiR7X252Y2NfbG9nfVxuJHtsb2d9XG5cbiIpCiAgIGVsc2UoKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKLSAgICAgICJGYWlsZWQgdG8gcGFyc2VkIENVREEgbnZjYyBpbXBsaWNpdCBsaW5rIGluZm9ybWF0aW9uOlxuJHtfbnZjY19sb2d9XG5cbiIpCisgICAgICAiRmFpbGVkIHRvIHBhcnNlIENVREEgbnZjYyBpbXBsaWNpdCBsaW5rIGluZm9ybWF0aW9uOlxuJHtfbnZjY19sb2d9XG5cbiIpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIGV4dHJhY3QgbnZjYyBpbXBsaWNpdCBsaW5rIGxpbmUuIikKICAgZW5kaWYoKQorZW5kaWYoKQogCi0gIHNldChDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUyApCisjIENNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyBpcyBkZXRlY3RlZCBhYm92ZSBhcyB0aGUgbGlzdCBvZgorIyBsaWJyYXJpZXMgdGhhdCB0aGUgQ1VEQSBjb21waWxlciBpbXBsaWNpdGx5IHBhc3NlcyB0byB0aGUgaG9zdCBsaW5rZXIuCisjIENNYWtlIGludm9rZXMgdGhlIGhvc3QgbGlua2VyIGRpcmVjdGx5IGFuZCBzbyBuZWVkcyB0byBwYXNzIHRoZXNlIGxpYnJhcmllcy4KKyMgV2UgZmlsdGVyIG91dCB0aG9zZSB0aGF0IHNob3VsZCBub3QgYmUgcGFzc2VkIHVuY29uZGl0aW9uYWxseSBib3RoIGhlcmUKKyMgYW5kIGZyb20gQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyBpbiBDTWFrZVRlc3RDVURBQ29tcGlsZXIuCitzZXQoQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU19FWENMVURFCisgICMgVGhlIENVREEgcnVudGltZSBsaWJyYXJpZXMgYXJlIGNvbnRyb2xsZWQgYnkgQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkuCisgIGN1ZGFydCAgICAgICAgY3VkYXJ0LmxpYgorICBjdWRhcnRfc3RhdGljIGN1ZGFydF9zdGF0aWMubGliCisgIGN1ZGFkZXZydCAgICAgY3VkYWRldnJ0LmxpYgorCisgICMgRGVwZW5kZW5jaWVzIG9mIHRoZSBDVURBIHN0YXRpYyBydW50aW1lIGxpYnJhcnkgb24gTGludXggaG9zdHMuCisgIHJ0CisgIHB0aHJlYWQKKyAgZGwKKyAgKQorbGlzdChSRU1PVkVfSVRFTSBDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVMgJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTX0VYQ0xVREV9KQorCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX1NZU1JPT1QpCisgIHN0cmluZyhDT05DQVQgX1NFVF9DTUFLRV9DVURBX0NPTVBJTEVSX1NZU1JPT1QKKyAgICAic2V0KENNQUtFX0NVREFfQ09NUElMRVJfU1lTUk9PVCBcIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9TWVNST09UfVwiKVxuIgorICAgICJzZXQoQ01BS0VfQ09NUElMRVJfU1lTUk9PVCBcIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9TWVNST09UfVwiKSIpCitlbHNlKCkKKyAgc2V0KF9TRVRfQ01BS0VfQ1VEQV9DT01QSUxFUl9TWVNST09UICIiKQorZW5kaWYoKQorCisjIERldGVybWluZSBDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUworaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTlZJRElBIikKKyAgc2V0KENNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTKQorICBzdHJpbmcoUkVQTEFDRSAiXHIiICIiIF9udmNjX291dHB1dF9vcmlnICIke0NNQUtFX0NVREFfQ09NUElMRVJfUFJPRFVDRURfT1VUUFVUfSIpCiAgIGlmKF9udmNjX291dHB1dF9vcmlnIE1BVENIRVMgIiNcXFwkICtJTkNMVURFUz0gKihbXlxuXSopXG4iKQogICAgIHNldChfbnZjY19pbmNsdWRlcyAiJHtDTUFLRV9NQVRDSF8xfSIpCiAgICAgc3RyaW5nKEFQUEVORCBfbnZjY19sb2cgIiAgZm91bmQgJ0lOQ0xVREVTPScgc3RyaW5nOiBbJHtfbnZjY19pbmNsdWRlc31dXG4iKQpAQCAtMTk4LDcgKzUwMSw3IEBACiAgIGVuZGlmKCkKICAgaWYoX252Y2NfaW5jbHVkZXMpCiAgICAgIyBhY3Jvc3MgYWxsIG9wZXJhdGluZyBzeXN0ZW0gZWFjaCBpbmNsdWRlIGRpcmVjdG9yeSBpcyBwcmVmaXhlZCB3aXRoIC1JCi0gICAgc2VwYXJhdGVfYXJndW1lbnRzKF9udmNjX291dHB1dCBVTklYX0NPTU1BTkQgIiR7X252Y2NfaW5jbHVkZXN9IikKKyAgICBzZXBhcmF0ZV9hcmd1bWVudHMoX252Y2Nfb3V0cHV0IE5BVElWRV9DT01NQU5EICIke19udmNjX2luY2x1ZGVzfSIpCiAgICAgZm9yZWFjaChsaW5lIElOIExJU1RTIF9udmNjX291dHB1dCkKICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeLUkiICIiIGxpbmUgIiR7bGluZX0iKQogICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChsaW5lICIke2xpbmV9IiBBQlNPTFVURSkKQEAgLTIxMiwxNCArNTE1LDYxIEBACiAgICAgICAiRmFpbGVkIHRvIGRldGVjdCBDVURBIG52Y2MgaW5jbHVkZSBpbmZvcm1hdGlvbjpcbiR7X252Y2NfbG9nfVxuXG4iKQogICBlbmRpZigpCiAKKyAgIyBQYXJzZSBkZWZhdWx0IENVREEgYXJjaGl0ZWN0dXJlLgorICBjbWFrZV9wb2xpY3koR0VUIENNUDAxMDQgX0NVREFfQ01QMDEwNCkKKyAgaWYoTk9UIENNQUtFX0NVREFfQVJDSElURUNUVVJFUyBBTkQgX0NVREFfQ01QMDEwNCBTVFJFUVVBTCAiTkVXIikKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0ggImFyY2hbID1dY29tcHV0ZV8oWzAtOV0rKSIgZG9udF9jYXJlICIke0NNQUtFX0NVREFfQ09NUElMRVJfUFJPRFVDRURfT1VUUFVUfSIpCisgICAgc2V0KGRldGVjdGVkX2FyY2hpdGVjdHVyZSAiJHtDTUFLRV9NQVRDSF8xfSIpCisgIGVsc2VpZihDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMpCisgICAgc3RyaW5nKFJFR0VYIE1BVENIQUxMICItYXJjaCBjb21wdXRlXyhbMC05XSspIiB0YXJnZXRfY3B1cyAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX1BST0RVQ0VEX09VVFBVVH0iKQogCisgICAgZm9yZWFjaChjcHUgJHt0YXJnZXRfY3B1c30pCisgICAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIi1hcmNoIGNvbXB1dGVfKFswLTldKykiIGRvbnRfY2FyZSAiJHtjcHV9IikKKyAgICAgIGxpc3QoQVBQRU5EIGFyY2hpdGVjdHVyZXMgIiR7Q01BS0VfTUFUQ0hfMX0iKQorICAgIGVuZGZvcmVhY2goKQorICBlbmRpZigpCitlbmRpZigpCisKKyMgSWYgdGhlIHVzZXIgZGlkbid0IHNldCB0aGUgYXJjaGl0ZWN0dXJlcywgdGhlbiBzZXQgdGhlbSB0byBhIGRlZmF1bHQuCisjIElmIHRoZSB1c2VyIGRpZCwgdGhlbiBtYWtlIHN1cmUgdGhvc2UgYXJjaGl0ZWN0dXJlcyB3b3JrZWQuCitpZihERUZJTkVEIGRldGVjdGVkX2FyY2hpdGVjdHVyZSBBTkQgIiR7Q01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTfSIgU1RSRVFVQUwgIiIpCisgIHNldChDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgIiR7ZGV0ZWN0ZWRfYXJjaGl0ZWN0dXJlfSIgQ0FDSEUgU1RSSU5HICJDVURBIGFyY2hpdGVjdHVyZXMiKQorCisgIGlmKE5PVCBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIGZpbmQgYSB3b3JraW5nIENVREEgYXJjaGl0ZWN0dXJlLiIpCisgIGVuZGlmKCkKK2Vsc2VpZihhcmNoaXRlY3R1cmVzKQorICAjIFNvcnQgc2luY2Ugb3JkZXIgbXVzdG4ndCBtYXR0ZXIuCisgIGxpc3QoU09SVCBhcmNoaXRlY3R1cmVzKQorICBsaXN0KFNPUlQgdGVzdGVkX2FyY2hpdGVjdHVyZXMpCisKKyAgIyBXZSBkb24ndCBkaXN0aW5ndWlzaCByZWFsL3ZpcnR1YWwgYXJjaGl0ZWN0dXJlcyBkdXJpbmcgdGVzdGluZy4KKyAgIyBGb3IgIjcwLXJlYWw7NzAtdmlydHVhbCIgd2UgZGV0ZWN0ICI3MCIgYXMgd29ya2luZyBhbmQgdGVzdGVkX2FyY2hpdGVjdHVyZXMgaXMgIjcwOzcwIi4KKyAgIyBUaHVzIHdlIG5lZWQgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMgYmVmb3JlIGNoZWNraW5nIGlmIHRoZXkncmUgZXF1YWwuCisgIGxpc3QoUkVNT1ZFX0RVUExJQ0FURVMgdGVzdGVkX2FyY2hpdGVjdHVyZXMpCisKKyAgaWYoTk9UICIke2FyY2hpdGVjdHVyZXN9IiBTVFJFUVVBTCAiJHt0ZXN0ZWRfYXJjaGl0ZWN0dXJlc30iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICJUaGUgQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTOlxuIgorICAgICAgIiAgJHtDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVN9XG4iCisgICAgICAiZG8gbm90IGFsbCB3b3JrIHdpdGggdGhpcyBjb21waWxlci4gIFRyeTpcbiIKKyAgICAgICIgICR7YXJjaGl0ZWN0dXJlc31cbiIKKyAgICAgICJpbnN0ZWFkLiIpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogIyBjb25maWd1cmUgYWxsIHZhcmlhYmxlcyBzZXQgaW4gdGhpcyBmaWxlCiBjb25maWd1cmVfZmlsZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuaW4KICAgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDVURBQ29tcGlsZXIuY21ha2UKICAgQE9OTFkKLSAgKQorKQorCisjIERvbid0IGxlYWsgdmFyaWFibGVzIHVubmVjZXNzYXJpbHkgdG8gdXNlciBjb2RlLgordW5zZXQoX0NVREFfSU5DTFVERV9ESVIgQ0FDSEUpCit1bnNldChfQ1VEQV9OVkNDX0VYRUNVVEFCTEUgQ0FDSEUpCit1bnNldChfQ1VEQV9MSUJSQVJZX0RJUikKK3Vuc2V0KF9DVURBX1RBUkdFVF9ESVIpCit1bnNldChfQ1VEQV9UQVJHRVRfTkFNRSkKIAogc2V0KENNQUtFX0NVREFfQ09NUElMRVJfRU5WX1ZBUiAiQ1VEQUNYWCIpCiBzZXQoQ01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSX0VOVl9WQVIgIkNVREFIT1NUQ1hYIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDWFhDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDWFhDb21waWxlci5jbWFrZQppbmRleCA3Mjc0ZWVjLi40YzI5MjRhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ1hYQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNYWENvbXBpbGVyLmNtYWtlCkBAIC00Miw3ICs0Miw3IEBACiAgICAgaWYoTk9UICRFTlZ7Q1hYfSBTVFJFUVVBTCAiIikKICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ01BS0VfQ1hYX0NPTVBJTEVSX0lOSVQgJEVOVntDWFh9IFBST0dSQU0gUFJPR1JBTV9BUkdTIENNQUtFX0NYWF9GTEFHU19FTlZfSU5JVCkKICAgICAgIGlmKENNQUtFX0NYWF9GTEFHU19FTlZfSU5JVCkKLSAgICAgICAgc2V0KENNQUtFX0NYWF9DT01QSUxFUl9BUkcxICIke0NNQUtFX0NYWF9GTEFHU19FTlZfSU5JVH0iIENBQ0hFIFNUUklORyAiRmlyc3QgYXJndW1lbnQgdG8gQ1hYIGNvbXBpbGVyIikKKyAgICAgICAgc2V0KENNQUtFX0NYWF9DT01QSUxFUl9BUkcxICIke0NNQUtFX0NYWF9GTEFHU19FTlZfSU5JVH0iIENBQ0hFIFNUUklORyAiQXJndW1lbnRzIHRvIENYWCBjb21waWxlciIpCiAgICAgICBlbmRpZigpCiAgICAgICBpZihOT1QgRVhJU1RTICR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lOSVR9KQogICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZmluZCBjb21waWxlciBzZXQgaW4gZW52aXJvbm1lbnQgdmFyaWFibGUgQ1hYOlxuJEVOVntDWFh9LlxuJHtDTUFLRV9DWFhfQ09NUElMRVJfSU5JVH0iKQpAQCAtODMsNiArODMsMTAgQEAKICAgICApCiBlbmRpZigpCiAKK2lmKENNQUtFX0NYWF9DT01QSUxFUl9UQVJHRVQpCisgIGxpc3QoUFJFUEVORCBDTUFLRV9DWFhfQ09QTUlMRVJfSURfVEVTVF9GTEFHUyAiLWMgLS10YXJnZXQ9JHtDTUFLRV9DWFhfQ09NUElMRVJfVEFSR0VUfSIpCitlbmRpZigpCisKICMgQnVpbGQgYSBzbWFsbCBzb3VyY2UgZmlsZSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIuCiBpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX0lEX1JVTikKICAgc2V0KENNQUtFX0NYWF9DT01QSUxFUl9JRF9SVU4gMSkKQEAgLTk0LDcgKzk4LDcgQEAKICAgICBDTUFLRV9DWFhfQ09NUElMRVJfSURfUExBVEZPUk1fQ09OVEVOVCkKIAogICAjIFRoZSBJQVIgY29tcGlsZXIgcHJvZHVjZXMgd2VpcmQgb3V0cHV0LgotICAjIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTAxNzYjbm90ZV8xNTM1OTEKKyAgIyBTZWUgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTAxNzYjbm90ZV8xNTM1OTEKICAgbGlzdChBUFBFTkQgQ01BS0VfQ1hYX0NPTVBJTEVSX0lEX1ZFTkRPUlMgSUFSKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEX1ZFTkRPUl9GTEFHU19JQVIgKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEX1ZFTkRPUl9SRUdFWF9JQVIgIklBUiAuKyBDb21waWxlciIpCkBAIC0xMTAsNiArMTE0LDggQEAKICAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlcklkLmNtYWtlKQogICBDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfSUQoQ1hYIENYWEZMQUdTIENNYWtlQ1hYQ29tcGlsZXJJZC5jcHApCiAKKyAgX2NtYWtlX2ZpbmRfY29tcGlsZXJfc3lzcm9vdChDWFgpCisKICAgIyBTZXQgb2xkIGNvbXBpbGVyIGFuZCBwbGF0Zm9ybSBpZCB2YXJpYWJsZXMuCiAgIGlmKENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIikKICAgICBzZXQoQ01BS0VfQ09NUElMRVJfSVNfR05VQ1hYIDEpCkBAIC0xNTAsNyArMTU2LDcgQEAKICMgImFybS11bmtub3duLW50by1xbng2IiBpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0ICJhcm0tdW5rbm93bi1udG8tcW54Ni4zLjAtIgogCiAKLWlmIChDTUFLRV9DUk9TU0NPTVBJTElORyAgQU5EIE5PVCAgX0NNQUtFX1RPT0xDSEFJTl9QUkVGSVgpCitpZiAoTk9UIF9DTUFLRV9UT09MQ0hBSU5fUFJFRklYKQogCiAgIGlmKCIke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0iIE1BVENIRVMgIkdOVXxDbGFuZ3xRQ0MiKQogICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ09NUElMRVJfQkFTRU5BTUUgIiR7Q01BS0VfQ1hYX0NPTVBJTEVSfSIgTkFNRSkKQEAgLTE4OSw2ICsxOTUsMTQgQEAKIGluY2x1ZGUoQ29tcGlsZXIvJHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9LUZpbmRCaW5VdGlscyBPUFRJT05BTCkKIHVuc2V0KF9DTUFLRV9QUk9DRVNTSU5HX0xBTkdVQUdFKQogCitpZihDTUFLRV9DWFhfQ09NUElMRVJfU1lTUk9PVCkKKyAgc3RyaW5nKENPTkNBVCBfU0VUX0NNQUtFX0NYWF9DT01QSUxFUl9TWVNST09UCisgICAgInNldChDTUFLRV9DWFhfQ09NUElMRVJfU1lTUk9PVCBcIiR7Q01BS0VfQ1hYX0NPTVBJTEVSX1NZU1JPT1R9XCIpXG4iCisgICAgInNldChDTUFLRV9DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9DWFhfQ09NUElMRVJfU1lTUk9PVH1cIikiKQorZWxzZSgpCisgIHNldChfU0VUX0NNQUtFX0NYWF9DT01QSUxFUl9TWVNST09UICIiKQorZW5kaWYoKQorCiBpZihDTUFLRV9DWFhfQ09NUElMRVJfQVJDSElURUNUVVJFX0lEKQogICBzZXQoX1NFVF9DTUFLRV9DWFhfQ09NUElMRVJfQVJDSElURUNUVVJFX0lECiAgICAgInNldChDTUFLRV9DWFhfQ09NUElMRVJfQVJDSElURUNUVVJFX0lEICR7Q01BS0VfQ1hYX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRH0pIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZUZlYXR1cmVzLmNtYWtlCmluZGV4IDAxYTgxYTEuLmI1MGU1ZjEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVGZWF0dXJlcy5jbWFrZQpAQCAtNSw3ICs1LDcgQEAKIGZ1bmN0aW9uKGNtYWtlX2RldGVybWluZV9jb21waWxlX2ZlYXR1cmVzIGxhbmcpCiAKICAgaWYobGFuZyBTVFJFUVVBTCBDIEFORCBDT01NQU5EIGNtYWtlX3JlY29yZF9jX2NvbXBpbGVfZmVhdHVyZXMpCi0gICAgbWVzc2FnZShTVEFUVVMgIkRldGVjdGluZyAke2xhbmd9IGNvbXBpbGUgZmVhdHVyZXMiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkRldGVjdGluZyAke2xhbmd9IGNvbXBpbGUgZmVhdHVyZXMiKQogCiAgICAgc2V0KENNQUtFX0M5MF9DT01QSUxFX0ZFQVRVUkVTKQogICAgIHNldChDTUFLRV9DOTlfQ09NUElMRV9GRUFUVVJFUykKQEAgLTE2LDcgKzE2LDcgQEAKICAgICBjbWFrZV9yZWNvcmRfY19jb21waWxlX2ZlYXR1cmVzKCkKIAogICAgIGlmKE5PVCBfcmVzdWx0IEVRVUFMIDApCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZSBmZWF0dXJlcyAtIGZhaWxlZCIpCisgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgImZhaWxlZCIpCiAgICAgICByZXR1cm4oKQogICAgIGVuZGlmKCkKIApAQCAtNDAsMTAgKzQwLDEwIEBACiAgICAgc2V0KENNQUtFX0M5OV9DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQzk5X0NPTVBJTEVfRkVBVFVSRVN9IFBBUkVOVF9TQ09QRSkKICAgICBzZXQoQ01BS0VfQzExX0NPTVBJTEVfRkVBVFVSRVMgJHtDTUFLRV9DMTFfQ09NUElMRV9GRUFUVVJFU30gUEFSRU5UX1NDT1BFKQogCi0gICAgbWVzc2FnZShTVEFUVVMgIkRldGVjdGluZyAke2xhbmd9IGNvbXBpbGUgZmVhdHVyZXMgLSBkb25lIikKKyAgICBtZXNzYWdlKENIRUNLX1BBU1MgImRvbmUiKQogCiAgIGVsc2VpZihsYW5nIFNUUkVRVUFMIENYWCBBTkQgQ09NTUFORCBjbWFrZV9yZWNvcmRfY3h4X2NvbXBpbGVfZmVhdHVyZXMpCi0gICAgbWVzc2FnZShTVEFUVVMgIkRldGVjdGluZyAke2xhbmd9IGNvbXBpbGUgZmVhdHVyZXMiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkRldGVjdGluZyAke2xhbmd9IGNvbXBpbGUgZmVhdHVyZXMiKQogCiAgICAgc2V0KENNQUtFX0NYWDk4X0NPTVBJTEVfRkVBVFVSRVMpCiAgICAgc2V0KENNQUtFX0NYWDExX0NPTVBJTEVfRkVBVFVSRVMpCkBAIC01Niw3ICs1Niw3IEBACiAgICAgY21ha2VfcmVjb3JkX2N4eF9jb21waWxlX2ZlYXR1cmVzKCkKIAogICAgIGlmKE5PVCBfcmVzdWx0IEVRVUFMIDApCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZSBmZWF0dXJlcyAtIGZhaWxlZCIpCisgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgImZhaWxlZCIpCiAgICAgICByZXR1cm4oKQogICAgIGVuZGlmKCkKIApAQCAtOTAsNyArOTAsNTggQEAKICAgICBzZXQoQ01BS0VfQ1hYMTdfQ09NUElMRV9GRUFUVVJFUyAke0NNQUtFX0NYWDE3X0NPTVBJTEVfRkVBVFVSRVN9IFBBUkVOVF9TQ09QRSkKICAgICBzZXQoQ01BS0VfQ1hYMjBfQ09NUElMRV9GRUFUVVJFUyAke0NNQUtFX0NYWDIwX0NPTVBJTEVfRkVBVFVSRVN9IFBBUkVOVF9TQ09QRSkKIAotICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlIGZlYXR1cmVzIC0gZG9uZSIpCisgICAgbWVzc2FnZShDSEVDS19QQVNTICJkb25lIikKKworICBlbHNlaWYobGFuZyBTVFJFUVVBTCBDVURBIEFORCBDT01NQU5EIGNtYWtlX3JlY29yZF9jdWRhX2NvbXBpbGVfZmVhdHVyZXMpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZSBmZWF0dXJlcyIpCisKKyAgICBzZXQoQ01BS0VfQ1VEQTAzX0NPTVBJTEVfRkVBVFVSRVMpCisgICAgc2V0KENNQUtFX0NVREExMV9DT01QSUxFX0ZFQVRVUkVTKQorICAgIHNldChDTUFLRV9DVURBMTRfQ09NUElMRV9GRUFUVVJFUykKKyAgICBzZXQoQ01BS0VfQ1VEQTE3X0NPTVBJTEVfRkVBVFVSRVMpCisgICAgc2V0KENNQUtFX0NVREEyMF9DT01QSUxFX0ZFQVRVUkVTKQorCisgICAgaW5jbHVkZSgiJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0ludGVybmFsL0ZlYXR1cmVUZXN0aW5nLmNtYWtlIikKKworICAgIGNtYWtlX3JlY29yZF9jdWRhX2NvbXBpbGVfZmVhdHVyZXMoKQorCisgICAgaWYoTk9UIF9yZXN1bHQgRVFVQUwgMCkKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiZmFpbGVkIikKKyAgICAgIHJldHVybigpCisgICAgZW5kaWYoKQorCisgIGlmIChDTUFLRV9DVURBMTdfQ09NUElMRV9GRUFUVVJFUyBBTkQgQ01BS0VfQ1VEQTIwX0NPTVBJTEVfRkVBVFVSRVMpCisgICAgICBsaXN0KFJFTU9WRV9JVEVNIENNQUtFX0NVREEyMF9DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1VEQTE3X0NPTVBJTEVfRkVBVFVSRVN9KQorICAgIGVuZGlmKCkKKyAgICBpZiAoQ01BS0VfQ1VEQTE0X0NPTVBJTEVfRkVBVFVSRVMgQU5EIENNQUtFX0NVREExN19DT01QSUxFX0ZFQVRVUkVTKQorICAgICAgbGlzdChSRU1PVkVfSVRFTSBDTUFLRV9DVURBMTdfQ09NUElMRV9GRUFUVVJFUyAke0NNQUtFX0NVREExNF9DT01QSUxFX0ZFQVRVUkVTfSkKKyAgICBlbmRpZigpCisgICAgaWYgKENNQUtFX0NVREExMV9DT01QSUxFX0ZFQVRVUkVTIEFORCBDTUFLRV9DVURBMTRfQ09NUElMRV9GRUFUVVJFUykKKyAgICAgIGxpc3QoUkVNT1ZFX0lURU0gQ01BS0VfQ1VEQTE0X0NPTVBJTEVfRkVBVFVSRVMgJHtDTUFLRV9DVURBMTFfQ09NUElMRV9GRUFUVVJFU30pCisgICAgZW5kaWYoKQorICAgIGlmIChDTUFLRV9DVURBMDNfQ09NUElMRV9GRUFUVVJFUyBBTkQgQ01BS0VfQ1VEQTExX0NPTVBJTEVfRkVBVFVSRVMpCisgICAgICBsaXN0KFJFTU9WRV9JVEVNIENNQUtFX0NVREExMV9DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1VEQTAzX0NPTVBJTEVfRkVBVFVSRVN9KQorICAgIGVuZGlmKCkKKworICAgIGlmKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVfRkVBVFVSRVMpCisgICAgICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX0ZFQVRVUkVTCisgICAgICAgICR7Q01BS0VfQ1VEQTAzX0NPTVBJTEVfRkVBVFVSRVN9CisgICAgICAgICR7Q01BS0VfQ1VEQTExX0NPTVBJTEVfRkVBVFVSRVN9CisgICAgICAgICR7Q01BS0VfQ1VEQTE0X0NPTVBJTEVfRkVBVFVSRVN9CisgICAgICAgICR7Q01BS0VfQ1VEQTE3X0NPTVBJTEVfRkVBVFVSRVN9CisgICAgICAgICR7Q01BS0VfQ1VEQTIwX0NPTVBJTEVfRkVBVFVSRVN9CisgICAgICApCisgICAgZW5kaWYoKQorCisgICAgc2V0KENNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFUyAke0NNQUtFX0NVREFfQ09NUElMRV9GRUFUVVJFU30gUEFSRU5UX1NDT1BFKQorICAgIHNldChDTUFLRV9DVURBMDNfQ09NUElMRV9GRUFUVVJFUyAke0NNQUtFX0NVREEwM19DT01QSUxFX0ZFQVRVUkVTfSBQQVJFTlRfU0NPUEUpCisgICAgc2V0KENNQUtFX0NVREExMV9DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1VEQTExX0NPTVBJTEVfRkVBVFVSRVN9IFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoQ01BS0VfQ1VEQTE0X0NPTVBJTEVfRkVBVFVSRVMgJHtDTUFLRV9DVURBMTRfQ09NUElMRV9GRUFUVVJFU30gUEFSRU5UX1NDT1BFKQorICAgIHNldChDTUFLRV9DVURBMTdfQ09NUElMRV9GRUFUVVJFUyAke0NNQUtFX0NVREExN19DT01QSUxFX0ZFQVRVUkVTfSBQQVJFTlRfU0NPUEUpCisgICAgc2V0KENNQUtFX0NVREEyMF9DT01QSUxFX0ZFQVRVUkVTICR7Q01BS0VfQ1VEQTIwX0NPTVBJTEVfRkVBVFVSRVN9IFBBUkVOVF9TQ09QRSkKKworICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZG9uZSIpCisKICAgZW5kaWYoKQogCiBlbmRmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXIuY21ha2UKaW5kZXggYzM3YWRhZS4uMjc4MDM5OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlci5jbWFrZQpAQCAtNTMsNiArNTMsMjAgQEAKICAgICAgIE5PX0RFRkFVTFRfUEFUSAogICAgICAgRE9DICIke2xhbmd9IGNvbXBpbGVyIikKICAgZW5kaWYoKQorICBpZihDTUFLRV9IT1NUX1dJTjMyIEFORCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiTmluamEiKQorICAgICMgT24gV2luZG93cyBjb21tYW5kLWxpbmUgYnVpbGRzLCB0aGUgTWFrZWZpbGUgZ2VuZXJhdG9ycyBlYWNoIGltcGx5CisgICAgIyBhIHByZWZlcnJlZCBjb21waWxlciB0b29sLiAgVGhlIE5pbmphIGdlbmVyYXRvciBkb2VzIG5vdCBpbXBseSBhCisgICAgIyBjb21waWxlciB0b29sLCBzbyB1c2UgdGhlIGNvbXBpbGVyIHRoYXQgb2NjdXJzIGZpcnN0IGluIFBBVEguCisgICAgZmluZF9wcm9ncmFtKENNQUtFXyR7bGFuZ31fQ09NUElMRVIKKyAgICAgIE5BTUVTICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9MSVNUfQorICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgRE9DICIke2xhbmd9IGNvbXBpbGVyIgorICAgICAgTk9fUEFDS0FHRV9ST09UX1BBVEgKKyAgICAgIE5PX0NNQUtFX1BBVEgKKyAgICAgIE5PX0NNQUtFX0VOVklST05NRU5UX1BBVEgKKyAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRICisgICAgICApCisgIGVuZGlmKCkKICAgZmluZF9wcm9ncmFtKENNQUtFXyR7bGFuZ31fQ09NUElMRVIgTkFNRVMgJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0xJU1R9IERPQyAiJHtsYW5nfSBjb21waWxlciIpCiAgIGlmKENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSU5JVCBBTkQgTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVIpCiAgICAgc2V0X3Byb3BlcnR5KENBQ0hFIENNQUtFXyR7bGFuZ31fQ09NUElMRVIgUFJPUEVSVFkgVkFMVUUgIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9JTklUfSIpCkBAIC05MywxNiArMTA3LDE0IEBACiAgIGlmKENNQUtFXyR7bGFuZ31fQ09NUElMRVIpCiAgICAgIyB3ZSBvbmx5IGdldCBoZXJlIGlmIENNQUtFXyR7bGFuZ31fQ09NUElMRVIgd2FzIHNwZWNpZmllZCB1c2luZyAtRCBvciBhIHByZS1tYWRlIENNYWtlQ2FjaGUudHh0CiAgICAgIyAoZS5nLiB2aWEgY3Rlc3QpIG9yIHNldCBpbiBDTUFLRV9UT09MQ0hBSU5fRklMRQotICAgICMgaWYgQ01BS0VfJHtsYW5nfV9DT01QSUxFUiBpcyBhIGxpc3Qgb2YgbGVuZ3RoIDIsIHVzZSB0aGUgZmlyc3QgaXRlbSBhcwotICAgICMgQ01BS0VfJHtsYW5nfV9DT01QSUxFUiBhbmQgdGhlIDJuZCBvbmUgYXMgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9BUkcxCi0gICAgbGlzdChMRU5HVEggQ01BS0VfJHtsYW5nfV9DT01QSUxFUiBfQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9MSVNUX0xFTkdUSCkKLSAgICBpZigiJHtfQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9MSVNUX0xFTkdUSH0iIEVRVUFMIDIpCi0gICAgICBsaXN0KEdFVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSIDEgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9BUkcxKQotICAgICAgbGlzdChHRVQgQ01BS0VfJHtsYW5nfV9DT01QSUxFUiAwIENNQUtFXyR7bGFuZ31fQ09NUElMRVIpCi0gICAgZW5kaWYoKQotICAgIHVuc2V0KF9DTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0xJU1RfTEVOR1RIKQorICAgICMgaWYgQ01BS0VfJHtsYW5nfV9DT01QSUxFUiBpcyBhIGxpc3QsIHVzZSB0aGUgZmlyc3QgaXRlbSBhcworICAgICMgQ01BS0VfJHtsYW5nfV9DT01QSUxFUiBhbmQgdGhlIHJlc3QgYXMgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9BUkcxCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRVJfQVJHMSAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSfSIpCisgICAgbGlzdChQT1BfRlJPTlQgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9BUkcxIENNQUtFXyR7bGFuZ31fQ09NUElMRVIpCisgICAgbGlzdChKT0lOIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfQVJHMSAiICIgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9BUkcxKQogCiAgICAgIyBmaW5kIHRoZSBjb21waWxlciBpbiB0aGUgUEFUSCBpZiBuZWNlc3NhcnkKKyAgICAjIGlmIGNvbXBpbGVyIChhbmQgYXJndW1lbnRzKSBjb21lcyBmcm9tIGNhY2hlIHRoZW4gc3luY2hyb25pemUgY2FjaGUgd2l0aCB1cGRhdGVkIENNQUtFXzxMQU5HPl9DT01QSUxFUgogICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX0NNQUtFX1VTRVJfJHtsYW5nfV9DT01QSUxFUl9QQVRIICIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJ9IiBQQVRIKQogICAgIGlmKE5PVCBfQ01BS0VfVVNFUl8ke2xhbmd9X0NPTVBJTEVSX1BBVEgpCiAgICAgICBmaW5kX3Byb2dyYW0oQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9XSVRIX1BBVEggTkFNRVMgJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSfSkKQEAgLTExNSw2ICsxMjcsMzAgQEAKICAgICAgICAgdW5zZXQoX0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfQ0FDSEVEKQogICAgICAgZW5kaWYoKQogICAgICAgdW5zZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9XSVRIX1BBVEggQ0FDSEUpCisgICAgZWxzZWlmIChFWElTVFMgJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSfSkKKyAgICAgIGdldF9wcm9wZXJ0eShfQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9DQUNIRUQgQ0FDSEUgQ01BS0VfJHtsYW5nfV9DT01QSUxFUiBQUk9QRVJUWSBUWVBFKQorICAgICAgaWYoX0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfQ0FDSEVEKQorICAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUiAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSfSIgQ0FDSEUgU1RSSU5HICIke2xhbmd9IGNvbXBpbGVyIiBGT1JDRSkKKyAgICAgIGVuZGlmKCkKKyAgICAgIHVuc2V0KF9DTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0NBQ0hFRCkKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIGVuZG1hY3JvKCkKKworZnVuY3Rpb24oX2NtYWtlX2ZpbmRfY29tcGlsZXJfc3lzcm9vdCBsYW5nKQorICBpZihDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiKQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJ9IiAtcHJpbnQtc3lzcm9vdAorICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKyAgICAgIE9VVFBVVF9WQVJJQUJMRSBfY21ha2Vfc3lzcm9vdF9ydW5fb3V0CisgICAgICBFUlJPUl9WQVJJQUJMRSBfY21ha2Vfc3lzcm9vdF9ydW5fZXJyKQorCisgICAgaWYoX2NtYWtlX3N5c3Jvb3RfcnVuX291dCBBTkQgTk9UIF9jbWFrZV9zeXNyb290X3J1bl9lcnIKKyAgICAgICAgQU5EIE5PVCBfY21ha2Vfc3lzcm9vdF9ydW5fb3V0IFNUUkVRVUFMICIvIgorICAgICAgICBBTkQgSVNfRElSRUNUT1JZICIke19jbWFrZV9zeXNyb290X3J1bl9vdXR9L3VzciIpCisgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiR7X2NtYWtlX3N5c3Jvb3RfcnVuX291dH0vdXNyIiBfY21ha2Vfc3lzcm9vdF9ydW5fb3V0X3VzcikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1NZU1JPT1QgIiR7X2NtYWtlX3N5c3Jvb3RfcnVuX291dF91c3J9IiBQQVJFTlRfU0NPUEUpCisgICAgZWxzZSgpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9TWVNST09UICIiIFBBUkVOVF9TQ09QRSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZQppbmRleCAwNmYzYmEyLi41MGQ1Y2QxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyQUJJLmNtYWtlCkBAIC0xMiw3ICsxMiw3IEBACiAKIGZ1bmN0aW9uKENNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkgbGFuZyBzcmMpCiAgIGlmKE5PVCBERUZJTkVEIENNQUtFXyR7bGFuZ31fQUJJX0NPTVBJTEVEKQotICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlciBBQkkgaW5mbyIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiRGV0ZWN0aW5nICR7bGFuZ30gY29tcGlsZXIgQUJJIGluZm8iKQogCiAgICAgIyBDb21waWxlIHRoZSBBQkkgaWRlbnRpZmljYXRpb24gc291cmNlLgogICAgIHNldChCSU4gIiR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQklfJHtsYW5nfS5iaW4iKQpAQCAtMzIsNiArMzIsOSBAQAogICAgIGVuZGlmKCkKICAgICBfX1Rlc3RDb21waWxlcl9zZXRUcnlDb21waWxlVGFyZ2V0VHlwZSgpCiAKKyAgICAjIEF2b2lkIGZhaWxpbmcgQUJJIGRldGVjdGlvbiBvbiB3YXJuaW5ncy4KKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiKF58ICktV2Vycm9yKD1bXiBdKik/KCB8JCkiICIgIiBDTUFLRV8ke2xhbmd9X0ZMQUdTICIke0NNQUtFXyR7bGFuZ31fRkxBR1N9IikKKwogICAgICMgU2F2ZSB0aGUgY3VycmVudCBMQ19BTEwsIExDX01FU1NBR0VTLCBhbmQgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgICAjIGFuZCBzZXQgdGhlbSB0byAiQyIgdGhhdCB3YXkgR0NDJ3MgInNlYXJjaCBzdGFydHMgaGVyZSIgdGV4dCBpcyBpbgogICAgICMgRW5nbGlzaCBhbmQgd2UgY2FuIGdyb2sgaXQuCkBAIC02MiwxMSArNjUsMTQgQEAKICAgICAjIE1vdmUgcmVzdWx0IGZyb20gY2FjaGUgdG8gbm9ybWFsIHZhcmlhYmxlLgogICAgIHNldChDTUFLRV8ke2xhbmd9X0FCSV9DT01QSUxFRCAke0NNQUtFXyR7bGFuZ31fQUJJX0NPTVBJTEVEfSkKICAgICB1bnNldChDTUFLRV8ke2xhbmd9X0FCSV9DT01QSUxFRCBDQUNIRSkKKyAgICBpZihDTUFLRV8ke2xhbmd9X0FCSV9DT01QSUxFRCBBTkQgX2NvcHlfZXJyb3IpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9BQklfQ09NUElMRUQgMCkKKyAgICBlbmRpZigpCiAgICAgc2V0KENNQUtFXyR7bGFuZ31fQUJJX0NPTVBJTEVEICR7Q01BS0VfJHtsYW5nfV9BQklfQ09NUElMRUR9IFBBUkVOVF9TQ09QRSkKIAogICAgICMgTG9hZCB0aGUgcmVzdWx0aW5nIGluZm9ybWF0aW9uIHN0cmluZ3MuCi0gICAgaWYoQ01BS0VfJHtsYW5nfV9BQklfQ09NUElMRUQgQU5EIE5PVCBfY29weV9lcnJvcikKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlciBBQkkgaW5mbyAtIGRvbmUiKQorICAgIGlmKENNQUtFXyR7bGFuZ31fQUJJX0NPTVBJTEVEKQorICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJkb25lIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlciBBQkkgaW5mbyBjb21waWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCiAgICAgICBmaWxlKFNUUklOR1MgIiR7QklOfSIgQUJJX1NUUklOR1MgTElNSVRfQ09VTlQgMiBSRUdFWCAiSU5GTzpbQS1aYS16MC05X10rXFxbW15dXSpcXF0iKQpAQCAtMTI0LDggKzEzMCw3IEBACiAgICAgICAjIGEgdHJ5LWNvbXBpbGUKICAgICAgIGlmKCIke2xhbmd9IiBNQVRDSEVTICJGb3J0cmFuIgogICAgICAgICAgIEFORCAiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKLSAgICAgICAgc2V0KF9kZXNjICJEZXRlcm1pbmUgSW50ZWwgRm9ydHJhbiBDb21waWxlciBJbXBsaWNpdCBMaW5rIFBhdGgiKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtfZGVzY30iKQorICAgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJEZXRlcm1pbmUgSW50ZWwgRm9ydHJhbiBDb21waWxlciBJbXBsaWNpdCBMaW5rIFBhdGgiKQogICAgICAgICAjIEJ1aWxkIGEgc2FtcGxlIHByb2plY3Qgd2hpY2ggcmVwb3J0cyBzeW1ib2xzLgogICAgICAgICB0cnlfY29tcGlsZShJRk9SVF9MSUJfUEFUSF9DT01QSUxFRAogICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9JbnRlbFZTSW1wbGljaXRQYXRoCkBAIC0xMzgsOCArMTQzLDcgQEAKICAgICAgICAgICAiJHtDTUFLRV9CSU5BUllfRElSfS9DTWFrZUZpbGVzL0ludGVsVlNJbXBsaWNpdFBhdGgvb3V0cHV0LnR4dCIKICAgICAgICAgICAiJHtfb3V0cHV0fSIpCiAgICAgICAgIGluY2x1ZGUoJHtDTUFLRV9CSU5BUllfRElSfS9DTWFrZUZpbGVzL0ludGVsVlNJbXBsaWNpdFBhdGgvb3V0cHV0LmNtYWtlIE9QVElPTkFMKQotICAgICAgICBzZXQoX2Rlc2MgIkRldGVybWluZSBJbnRlbCBGb3J0cmFuIENvbXBpbGVyIEltcGxpY2l0IExpbmsgUGF0aCAtLSBkb25lIikKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7X2Rlc2N9IikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJkb25lIikKICAgICAgIGVuZGlmKCkKIAogICAgICAgIyBJbXBsaWNpdCBsaW5rIGxpYnJhcmllcyBjYW5ub3QgYmUgdXNlZCBleHBsaWNpdGx5IGZvciBtdWx0aXBsZQpAQCAtMTYzLDEwICsxNjcsMjIgQEAKICAgICAgICAgICAgIGJyZWFrKCkKICAgICAgICAgICBlbmRpZigpCiAgICAgICAgIGVuZGZvcmVhY2goKQorICAgICAgZWxzZWlmKENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCBRQ0MpCisgICAgICAgIGZvcmVhY2goZGlyICR7aW1wbGljaXRfZGlyc30pCisgICAgICAgICAgaWYgKGRpciBNQVRDSEVTICIvbGliJCIpCisgICAgICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGFzc3VtZWRBcmNoRGlyICIke2Rpcn0iIERJUkVDVE9SWSkKKyAgICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoYXJjaFBhcmVudERpciAiJHthc3N1bWVkQXJjaERpcn0iIERJUkVDVE9SWSkKKyAgICAgICAgICAgIGlmIChhcmNoUGFyZW50RGlyIFNUUkVRVUFMIENNQUtFX1NZU1JPT1QpCisgICAgICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoYXJjaERpck5hbWUgIiR7YXNzdW1lZEFyY2hEaXJ9IiBOQU1FKQorICAgICAgICAgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSAiJHthcmNoRGlyTmFtZX0iIFBBUkVOVF9TQ09QRSkKKyAgICAgICAgICAgICAgYnJlYWsoKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kZm9yZWFjaCgpCiAgICAgICBlbmRpZigpCiAKICAgICBlbHNlKCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlciBBQkkgaW5mbyAtIGZhaWxlZCIpCisgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgImZhaWxlZCIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJEZXRlY3RpbmcgJHtsYW5nfSBjb21waWxlciBBQkkgaW5mbyBmYWlsZWQgdG8gY29tcGlsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG4ke19jb3B5X2Vycm9yfVxuXG4iKQogICAgIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlcklkLmNtYWtlIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVySWQuY21ha2UKaW5kZXggN2I1NzFjMy4uZDdhMzVlMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVySWQuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVySWQuY21ha2UKQEAgLTE0LDggKzE0LDEwIEBACiAgICMgTWFrZSBzdXJlIHVzZXItc3BlY2lmaWVkIGNvbXBpbGVyIGZsYWdzIGFyZSB1c2VkLgogICBpZihDTUFLRV8ke2xhbmd9X0ZMQUdTKQogICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX0ZMQUdTICR7Q01BS0VfJHtsYW5nfV9GTEFHU30pCi0gIGVsc2UoKQorICBlbHNlaWYoREVGSU5FRCBFTlZ7JHtmbGFndmFyfX0pCiAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfRkxBR1MgJEVOVnske2ZsYWd2YXJ9fSkKKyAgZWxzZShDTUFLRV8ke2xhbmd9X0ZMQUdTX0lOSVQpCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfRkxBR1MgJHtDTUFLRV8ke2xhbmd9X0ZMQUdTX0lOSVR9KQogICBlbmRpZigpCiAgIHN0cmluZyhSRVBMQUNFICIgIiAiOyIgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9GTEFHU19MSVNUICIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfRkxBR1N9IikKIApAQCAtMTI4LDcgKzEzMCw3IEBACiAgICAgc2V0KENNQUtFX0VYRUNVVEFCTEVfRk9STUFUICJVbmtub3duIiBDQUNIRSBJTlRFUk5BTCAiRXhlY3V0YWJsZSBmaWxlIGZvcm1hdCIpCiAgIGVuZGlmKCkKIAotICBpZihDTUFLRV9HRU5FUkFUT1IgU1RSRVFVQUwgIk5pbmphIiBBTkQgTVNWQ18ke2xhbmd9X0FSQ0hJVEVDVFVSRV9JRCkKKyAgaWYoQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIl5OaW5qYSIgQU5EIE1TVkNfJHtsYW5nfV9BUkNISVRFQ1RVUkVfSUQpCiAgICAgZm9yZWFjaCh1c2VyZmxhZ3MgIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9GTEFHU19MSVNUfSIgIiIpCiAgICAgICBDTUFLRV9ERVRFUk1JTkVfTVNWQ19TSE9XSU5DTFVERVNfUFJFRklYKCR7bGFuZ30gIiR7dXNlcmZsYWdzfSIpCiAgICAgZW5kZm9yZWFjaCgpCkBAIC0xODIsNiArMTg0LDEwIEBACiAgICAgbWVzc2FnZShTVEFUVVMgIlRoZSAke2xhbmd9IGNvbXBpbGVyIGlkZW50aWZpY2F0aW9uIGlzIHVua25vd24iKQogICBlbmRpZigpCiAKKyAgaWYobGFuZyBTVFJFUVVBTCAiRm9ydHJhbiIgQU5EIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSUQgU1RSRVFVQUwgIlhMIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9YTF9DUFAgIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9DUFB9IiBQQVJFTlRfU0NPUEUpCisgIGVuZGlmKCkKKwogICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRCAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEfSIgUEFSRU5UX1NDT1BFKQogICBzZXQoQ01BS0VfJHtsYW5nfV9QTEFURk9STV9JRCAiJHtDTUFLRV8ke2xhbmd9X1BMQVRGT1JNX0lEfSIgUEFSRU5UX1NDT1BFKQogICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQgIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUR9IiBQQVJFTlRfU0NPUEUpCkBAIC0yNDQsNiArMjUwLDggQEAKICAgICBzZXQoaWRfUG9zdEJ1aWxkRXZlbnRfQ29tbWFuZCAiIikKICAgICBpZihDTUFLRV9WU19QTEFURk9STV9UT09MU0VUIE1BVENIRVMgIl5bTGxdW0xsXVtWdl1bTW1dKF92WzAtOV0rKF94cCk/KT8kIikKICAgICAgIHNldChpZF9jbF92YXIgIkNsYW5nQ2xFeGVjdXRhYmxlIikKKyAgICBlbHNlaWYoQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVCBNQVRDSEVTICJeW0NjXVtMbF1bQWFdW05uXVtHZ10oW0NjXVtMbF0kfF9bMC05XSkiKQorICAgICAgc2V0KGlkX2NsICIkKENMVG9vbEV4ZSkiKQogICAgIGVsc2VpZihDTUFLRV9WU19QTEFURk9STV9UT09MU0VUIE1BVENIRVMgInZbMC05XStfY2xhbmdfLioiKQogICAgICAgc2V0KGlkX2NsIGNsYW5nLmV4ZSkKICAgICBlbHNlKCkKQEAgLTMwNCwyMyArMzEyLDUzIEBACiAgICAgICBzZXQoaWRfUHJlZmVycmVkVG9vbEFyY2hpdGVjdHVyZSAiIikKICAgICBlbmRpZigpCiAgICAgaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIldpbmRvd3NQaG9uZSIpCisgICAgICBzZXQoaWRfa2V5d29yZCAiV2luMzJQcm9qIikKICAgICAgIHNldChpZF9zeXN0ZW0gIjxBcHBsaWNhdGlvblR5cGU+V2luZG93cyBQaG9uZTwvQXBwbGljYXRpb25UeXBlPiIpCiAgICAgZWxzZWlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJXaW5kb3dzU3RvcmUiKQorICAgICAgc2V0KGlkX2tleXdvcmQgIldpbjMyUHJvaiIpCiAgICAgICBzZXQoaWRfc3lzdGVtICI8QXBwbGljYXRpb25UeXBlPldpbmRvd3MgU3RvcmU8L0FwcGxpY2F0aW9uVHlwZT4iKQorICAgIGVsc2VpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiQW5kcm9pZCIpCisgICAgICBzZXQoaWRfa2V5d29yZCAiQW5kcm9pZCIpCisgICAgICBzZXQoaWRfc3lzdGVtICI8QXBwbGljYXRpb25UeXBlPkFuZHJvaWQ8L0FwcGxpY2F0aW9uVHlwZT4iKQogICAgIGVsc2UoKQorICAgICAgc2V0KGlkX2tleXdvcmQgIldpbjMyUHJvaiIpCiAgICAgICBzZXQoaWRfc3lzdGVtICIiKQogICAgIGVuZGlmKCkKLSAgICBpZihpZF9zeXN0ZW0gQU5EIENNQUtFX1NZU1RFTV9WRVJTSU9OIE1BVENIRVMgIl4oWzAtOV0rXFwuWzAtOV0rKSIpCisgICAgaWYoaWRfa2V5d29yZCBTVFJFUVVBTCAiQW5kcm9pZCIpCisgICAgICBpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyAxNCIpCisgICAgICAgIHNldChpZF9zeXN0ZW1fdmVyc2lvbiAiPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjIuMDwvQXBwbGljYXRpb25UeXBlUmV2aXNpb24+IikKKyAgICAgIGVsc2VpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyAxWzU2XSIpCisgICAgICAgIHNldChpZF9zeXN0ZW1fdmVyc2lvbiAiPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPjMuMDwvQXBwbGljYXRpb25UeXBlUmV2aXNpb24+IikKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQoaWRfc3lzdGVtX3ZlcnNpb24gIiIpCisgICAgICBlbmRpZigpCisgICAgZWxzZWlmKGlkX3N5c3RlbSBBTkQgQ01BS0VfU1lTVEVNX1ZFUlNJT04gTUFUQ0hFUyAiXihbMC05XStcXC5bMC05XSspIikKICAgICAgIHNldChpZF9zeXN0ZW1fdmVyc2lvbiAiPEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uPiR7Q01BS0VfTUFUQ0hfMX08L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPiIpCiAgICAgZWxzZSgpCiAgICAgICBzZXQoaWRfc3lzdGVtX3ZlcnNpb24gIiIpCiAgICAgZW5kaWYoKQorICAgIGlmKGlkX2tleXdvcmQgU1RSRVFVQUwgIkFuZHJvaWQiKQorICAgICAgc2V0KGlkX2NvbmZpZ190eXBlICJEeW5hbWljTGlicmFyeSIpCisgICAgZWxzZSgpCisgICAgICBzZXQoaWRfY29uZmlnX3R5cGUgIkFwcGxpY2F0aW9uIikKKyAgICBlbmRpZigpCiAgICAgaWYoQ01BS0VfVlNfV0lORE9XU19UQVJHRVRfUExBVEZPUk1fVkVSU0lPTikKICAgICAgIHNldChpZF9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uICI8V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4ke0NNQUtFX1ZTX1dJTkRPV1NfVEFSR0VUX1BMQVRGT1JNX1ZFUlNJT059PC9XaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPiIpCiAgICAgZW5kaWYoKQotICAgIGlmKGlkX3BsYXRmb3JtIFNUUkVRVUFMIEFSTTY0KQorICAgIGlmKENNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfVkNUQVJHRVRTX0NVU1RPTV9ESVIpCisgICAgICBzZXQoaWRfVG9vbHNldFZDVGFyZ2V0c0RpciAiPFZDVGFyZ2V0c1BhdGg+JHtDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX1ZDVEFSR0VUU19DVVNUT01fRElSfTwvVkNUYXJnZXRzUGF0aD4iKQorICAgIGVuZGlmKCkKKyAgICBzZXQoaWRfQ3VzdG9tR2xvYmFscyAiIikKKyAgICBmb3JlYWNoKHBhaXIgSU4gTElTVFMgQ01BS0VfVlNfR0xPQkFMUykKKyAgICAgIGlmKCIke3BhaXJ9IiBNQVRDSEVTICIoW149XSspPSguKikkIikKKyAgICAgICAgc3RyaW5nKEFQUEVORCBpZF9DdXN0b21HbG9iYWxzICI8JHtDTUFLRV9NQVRDSF8xfT4ke0NNQUtFX01BVENIXzJ9PC8ke0NNQUtFX01BVENIXzF9PlxuICAgICIpCisgICAgICBlbmRpZigpCisgICAgZW5kZm9yZWFjaCgpCisgICAgaWYoaWRfa2V5d29yZCBTVFJFUVVBTCAiQW5kcm9pZCIpCisgICAgICBzZXQoaWRfV2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0ICIiKQorICAgIGVsc2VpZihpZF9wbGF0Zm9ybSBTVFJFUVVBTCAiQVJNNjQiKQogICAgICAgc2V0KGlkX1dpbmRvd3NTREtEZXNrdG9wQVJNU3VwcG9ydCAiPFdpbmRvd3NTREtEZXNrdG9wQVJNNjRTdXBwb3J0PnRydWU8L1dpbmRvd3NTREtEZXNrdG9wQVJNNjRTdXBwb3J0PiIpCi0gICAgZWxzZWlmKGlkX3BsYXRmb3JtIFNUUkVRVUFMIEFSTSkKKyAgICBlbHNlaWYoaWRfcGxhdGZvcm0gU1RSRVFVQUwgIkFSTSIpCiAgICAgICBzZXQoaWRfV2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0ICI8V2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0PnRydWU8L1dpbmRvd3NTREtEZXNrdG9wQVJNU3VwcG9ydD4iKQogICAgIGVsc2UoKQogICAgICAgc2V0KGlkX1dpbmRvd3NTREtEZXNrdG9wQVJNU3VwcG9ydCAiIikKQEAgLTM1Myw2ICszOTEsNyBAQAogICAgICAgZW5kaWYoKQogICAgICAgc2V0KGN1ZGFfdG9vbHMgIkNVREEgJHtDTUFLRV9WU19QTEFURk9STV9UT09MU0VUX0NVREF9IikKICAgICAgIHNldChpZF9jb21waWxlICJDdWRhQ29tcGlsZSIpCisgICAgICBzZXQoaWRfSXRlbURlZmluaXRpb25Hcm91cF9lbnRyeSAiPEN1ZGFDb21waWxlPjxBZGRpdGlvbmFsT3B0aW9ucz4lKEFkZGl0aW9uYWxPcHRpb25zKS12PC9BZGRpdGlvbmFsT3B0aW9ucz48L0N1ZGFDb21waWxlPiIpCiAgICAgICBzZXQoaWRfUG9zdEJ1aWxkRXZlbnRfQ29tbWFuZCBbW2VjaG8gQ01BS0VfQ1VEQV9DT01QSUxFUj0kKEN1ZGFUb29sa2l0QmluRGlyKVxudmNjLmV4ZV1dKQogICAgICAgaWYoQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVIpCiAgICAgICAgIHNldChpZF9DdWRhVG9vbGtpdEN1c3RvbURpciAiPEN1ZGFUb29sa2l0Q3VzdG9tRGlyPiR7Q01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVJ9bnZjYzwvQ3VkYVRvb2xraXRDdXN0b21EaXI+IikKQEAgLTM2Myw5ICs0MDIsMTMgQEAKICAgICAgICAgc3RyaW5nKENPTkNBVCBpZF9JbXBvcnRfdGFyZ2V0cyBbWzxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxCdWlsZEN1c3RvbWl6YXRpb25zXF1dICIke2N1ZGFfdG9vbHN9IiBbWy50YXJnZXRzIiAvPl1dKQogICAgICAgZW5kaWYoKQogICAgICAgaWYoQ01BS0VfVlNfUExBVEZPUk1fTkFNRSBTVFJFUVVBTCB4NjQpCi0gICAgICAgIHNldChpZF9JdGVtRGVmaW5pdGlvbkdyb3VwX2VudHJ5ICI8Q3VkYUNvbXBpbGU+PFRhcmdldE1hY2hpbmVQbGF0Zm9ybT42NDwvVGFyZ2V0TWFjaGluZVBsYXRmb3JtPjwvQ3VkYUNvbXBpbGU+IikKKyAgICAgICAgc2V0KGlkX0l0ZW1EZWZpbml0aW9uR3JvdXBfZW50cnkgIjxDdWRhQ29tcGlsZT48VGFyZ2V0TWFjaGluZVBsYXRmb3JtPjY0PC9UYXJnZXRNYWNoaW5lUGxhdGZvcm0+PEFkZGl0aW9uYWxPcHRpb25zPiUoQWRkaXRpb25hbE9wdGlvbnMpLXY8L0FkZGl0aW9uYWxPcHRpb25zPjwvQ3VkYUNvbXBpbGU+IikKICAgICAgIGVuZGlmKCkKLSAgICAgIHNldChpZF9MaW5rX0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMgIjxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmN1ZGFydC5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+IikKKyAgICAgIGlmKENNQUtFX0NVREFfRkxBR1MgTUFUQ0hFUyAiKF58ICktY3VkYXJ0ICtzaGFyZWQoIHwkKSIpCisgICAgICAgIHNldChpZF9MaW5rX0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMgIjxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmN1ZGFydC5saWI8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+IikKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQoaWRfTGlua19BZGRpdGlvbmFsRGVwZW5kZW5jaWVzICI8QWRkaXRpb25hbERlcGVuZGVuY2llcz5jdWRhcnRfc3RhdGljLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4iKQorICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgICBjb25maWd1cmVfZmlsZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ29tcGlsZXJJZC9WUy0ke3Z9LiR7ZXh0fS5pbgogICAgICAgJHtpZF9kaXJ9L0NvbXBpbGVySWQke2xhbmd9LiR7ZXh0fSBAT05MWSkKQEAgLTQ0OSw2ICs0OTIsMTIgQEAKICAgICAgICAgc2V0KGlkX2NsYW5nX2N4eF9saWJyYXJ5ICJDTEFOR19DWFhfTElCUkFSWSA9IFwiJHtDTUFLRV9NQVRDSF8zfVwiOyIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQorICAgIGlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJEYXJ3aW4iIEFORCBDTUFLRV9PU1hfU1lTUk9PVCBNQVRDSEVTICJeJHxbTW1dW0FhXVtDY11bT29dW1NzXSIpCisgICAgICAjIFdoZW4gdGFyZ2V0aW5nIG1hY09TLCB1c2Ugb25seSB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuCisgICAgICBzZXQoaWRfYXJjaHMgW1tBUkNIUyA9ICIkKE5BVElWRV9BUkNIX0FDVFVBTCkiO11dKQorICAgIGVsc2UoKQorICAgICAgc2V0KGlkX2FyY2hzICIiKQorICAgIGVuZGlmKCkKICAgICBjb25maWd1cmVfZmlsZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ29tcGlsZXJJZC9YY29kZS0zLnBieHByb2ouaW4KICAgICAgICR7aWRfZGlyfS9Db21waWxlcklkJHtsYW5nfS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIEBPTkxZKQogICAgIHVuc2V0KF9FTlZfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUKQpAQCAtNTM0LDYgKzU4MywxMiBAQAogICAgICAgRVJST1JfVkFSSUFCTEUgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9PVVRQVVQKICAgICAgIFJFU1VMVF9WQVJJQUJMRSBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX1JFU1VMVAogICAgICAgKQorICAgIGlmKCIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfT1VUUFVUfSIgTUFUQ0hFUyAiZXhlYzogW15cbl0qXFwoKC9bXixcbl0qL2NwcCksQ01ha2VGb3J0cmFuQ29tcGlsZXJJZC5GIikKKyAgICAgIHNldChfY3BwICIke0NNQUtFX01BVENIXzF9IikKKyAgICAgIGlmKEVYSVNUUyAiJHtfY3BwfSIpCisgICAgICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX0NQUCAiJHtfY3BwfSIgUEFSRU5UX1NDT1BFKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCiAgICMgQ2hlY2sgdGhlIHJlc3VsdCBvZiBjb21waWxhdGlvbi4KQEAgLTY3MCw3ICs3MjUsNyBAQAogICAgIGZvcmVhY2goaW5mbyAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfU1RSSU5HU30pCiAgICAgICAjIFRoZSBJQVItQVZSIGNvbXBpbGVyIHVzZXMgYSBiaW5hcnkgZm9ybWF0IHRoYXQgcGxhY2VzIGEgJzYnCiAgICAgICAjIGNoYXJhY3RlciAoMHgzNCkgYmVmb3JlIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuICBTdHJpcAotICAgICAgIyBvdXQgdGhlc2UgY2hhcmFjdGVycyB3aXRob3V0IHJlbW92aW5nIGFueSBsZWdpdGFtYXRlIGNoYXJhY3RlcnMuCisgICAgICAjIG91dCB0aGVzZSBjaGFyYWN0ZXJzIHdpdGhvdXQgcmVtb3ZpbmcgYW55IGxlZ2l0aW1hdGUgY2hhcmFjdGVycy4KICAgICAgIGlmKCIke2luZm99IiBNQVRDSEVTICIoLilJLk4uRi5PLjouIikKICAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIiR7Q01BS0VfTUFUQ0hfMX0oLikiICJcXDEiIGluZm8gIiR7aW5mb30iKQogICAgICAgZW5kaWYoKQpAQCAtODQ4LDYgKzkwMywxNCBAQAogICAgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX0RJUn0pCiAgIGVuZGlmKCkKIAorICAjIFNhdmUgdGhlIGN1cnJlbnQgTENfQUxMLCBMQ19NRVNTQUdFUywgYW5kIExBTkcgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICMgYW5kIHNldCB0aGVtIHRvICJDIiBzbyB3ZSBnZXQgdGhlIGV4cGVjdGVkIG91dHB1dCB0byBtYXRjaC4KKyAgc2V0KF9vcmlnX2xjX2FsbCAgICAgICRFTlZ7TENfQUxMfSkKKyAgc2V0KF9vcmlnX2xjX21lc3NhZ2VzICRFTlZ7TENfTUVTU0FHRVN9KQorICBzZXQoX29yaWdfbGFuZyAgICAgICAgJEVOVntMQU5HfSkKKyAgc2V0KEVOVntMQ19BTEx9ICAgICAgQykKKyAgc2V0KEVOVntMQ19NRVNTQUdFU30gQykKKyAgc2V0KEVOVntMQU5HfSAgICAgICAgQykKIAogICBmb3JlYWNoKHZlbmRvciAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfVkVORE9SU30pCiAgICAgc2V0KGZsYWdzICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRF9WRU5ET1JfRkxBR1NfJHt2ZW5kb3J9fSkKQEAgLTg2OSw2ICs5MzIsNyBAQAogICAgICAgICAibWF0Y2hlZCBcIiR7cmVnZXh9XCI6XG4ke291dHB1dH0iKQogICAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSUQgIiR7dmVuZG9yfSIgUEFSRU5UX1NDT1BFKQogICAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSURfT1VUUFVUICIke291dHB1dH0iIFBBUkVOVF9TQ09QRSkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSCAiJHtDTUFLRV9NQVRDSF8xfSIgUEFSRU5UX1NDT1BFKQogICAgICAgYnJlYWsoKQogICAgIGVsc2UoKQogICAgICAgaWYoIiR7cmVzdWx0fSIgTUFUQ0hFUyAgInRpbWVvdXQiKQpAQCAtODgyLDYgKzk0NiwxMSBAQAogICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQorCisgICMgUmVzdG9yZSBvcmlnaW5hbCBMQ19BTEwsIExDX01FU1NBR0VTLCBhbmQgTEFORworICBzZXQoRU5We0xDX0FMTH0gICAgICAke19vcmlnX2xjX2FsbH0pCisgIHNldChFTlZ7TENfTUVTU0FHRVN9ICR7X29yaWdfbGNfbWVzc2FnZXN9KQorICBzZXQoRU5We0xBTkd9ICAgICAgICAke19vcmlnX2xhbmd9KQogZW5kZnVuY3Rpb24oKQogCiBmdW5jdGlvbihDTUFLRV9ERVRFUk1JTkVfTVNWQ19TSE9XSU5DTFVERVNfUFJFRklYIGxhbmcgdXNlcmZsYWdzKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZUZvcnRyYW5Db21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVGb3J0cmFuQ29tcGlsZXIuY21ha2UKaW5kZXggNWRkZDY0Zi4uOGE1NzQwOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZUZvcnRyYW5Db21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lRm9ydHJhbkNvbXBpbGVyLmNtYWtlCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgaWYoTk9UICRFTlZ7RkN9IFNUUkVRVUFMICIiKQogICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lOSVQgJEVOVntGQ30gUFJPR1JBTSBQUk9HUkFNX0FSR1MgQ01BS0VfRm9ydHJhbl9GTEFHU19FTlZfSU5JVCkKICAgICAgIGlmKENNQUtFX0ZvcnRyYW5fRkxBR1NfRU5WX0lOSVQpCi0gICAgICAgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0FSRzEgIiR7Q01BS0VfRm9ydHJhbl9GTEFHU19FTlZfSU5JVH0iIENBQ0hFIFNUUklORyAiRmlyc3QgYXJndW1lbnQgdG8gRm9ydHJhbiBjb21waWxlciIpCisgICAgICAgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0FSRzEgIiR7Q01BS0VfRm9ydHJhbl9GTEFHU19FTlZfSU5JVH0iIENBQ0hFIFNUUklORyAiQXJndW1lbnRzIHRvIEZvcnRyYW4gY29tcGlsZXIiKQogICAgICAgZW5kaWYoKQogICAgICAgaWYoRVhJU1RTICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUl9JTklUfSkKICAgICAgIGVsc2UoKQpAQCAtMTg2LDYgKzE4Niw4IEBACiAgIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJJZC5jbWFrZSkKICAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0lEKEZvcnRyYW4gRkZMQUdTIENNYWtlRm9ydHJhbkNvbXBpbGVySWQuRikKIAorICBfY21ha2VfZmluZF9jb21waWxlcl9zeXNyb290KEZvcnRyYW4pCisKICAgIyBGYWxsIGJhY2sgdG8gb2xkIGlzLUdOVSB0ZXN0LgogICBpZihOT1QgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCkKICAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9ICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRF9GTEFHU19MSVNUfSAtRSAiJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlVGVzdEdOVS5jIgpAQCAtMjQ5LDcgKzI1MSw3IEBACiAjIE5BTUVfV0UgY2Fubm90IGJlIHVzZWQgc2luY2UgdGhlbiB0aGlzIHRlc3Qgd2lsbCBmYWlsIGZvciBuYW1lcyBsaWtlCiAjICJhcm0tdW5rbm93bi1udG8tcW54Ni4zLjAtZ2NjLmV4ZSIsIHdoZXJlIEJBU0VOQU1FIHdvdWxkIGJlCiAjICJhcm0tdW5rbm93bi1udG8tcW54NiIgaW5zdGVhZCBvZiB0aGUgY29ycmVjdCAiYXJtLXVua25vd24tbnRvLXFueDYuMy4wLSIKLWlmIChDTUFLRV9DUk9TU0NPTVBJTElORyAgQU5EIE5PVCBfQ01BS0VfVE9PTENIQUlOX1BSRUZJWCkKK2lmIChOT1QgX0NNQUtFX1RPT0xDSEFJTl9QUkVGSVgpCiAKICAgaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBNQVRDSEVTICJHTlUiKQogICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ09NUElMRVJfQkFTRU5BTUUgIiR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0iIE5BTUUpCkBAIC0yNzEsNiArMjczLDE5IEBACiBpbmNsdWRlKENvbXBpbGVyLyR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRH0tRmluZEJpblV0aWxzIE9QVElPTkFMKQogdW5zZXQoX0NNQUtFX1BST0NFU1NJTkdfTEFOR1VBR0UpCiAKK2lmKENNQUtFX0ZvcnRyYW5fWExfQ1BQKQorICBzZXQoX1NFVF9DTUFLRV9Gb3J0cmFuX1hMX0NQUAorICAgICJzZXQoQ01BS0VfRm9ydHJhbl9YTF9DUFAgXCIke0NNQUtFX0ZvcnRyYW5fWExfQ1BQfVwiKSIpCitlbmRpZigpCisKK2lmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1lTUk9PVCkKKyAgc3RyaW5nKENPTkNBVCBfU0VUX0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1lTUk9PVAorICAgICJzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NZU1JPT1R9XCIpXG4iCisgICAgInNldChDTUFLRV9DT01QSUxFUl9TWVNST09UIFwiJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NZU1JPT1R9XCIpIikKK2Vsc2UoKQorICBzZXQoX1NFVF9DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1NZU1JPT1QgIiIpCitlbmRpZigpCisKIGlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfQVJDSElURUNUVVJFX0lEKQogICBzZXQoX1NFVF9DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRAogICAgICJzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9BUkNISVRFQ1RVUkVfSUQgJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JRH0pIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVKYXZhQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lSmF2YUNvbXBpbGVyLmNtYWtlCmluZGV4IDMwOTJiYjUuLmRiNDU2YzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVKYXZhQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZURldGVybWluZUphdmFDb21waWxlci5jbWFrZQpAQCAtMTEsNyArMTEsNyBAQAogICBpZihOT1QgJEVOVntKQVZBX0NPTVBJTEVSfSBTVFJFUVVBTCAiIikKICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENNQUtFX0phdmFfQ09NUElMRVJfSU5JVCAkRU5We0pBVkFfQ09NUElMRVJ9IFBST0dSQU0gUFJPR1JBTV9BUkdTIENNQUtFX0phdmFfRkxBR1NfRU5WX0lOSVQpCiAgICAgaWYoQ01BS0VfSmF2YV9GTEFHU19FTlZfSU5JVCkKLSAgICAgIHNldChDTUFLRV9KYXZhX0NPTVBJTEVSX0FSRzEgIiR7Q01BS0VfSmF2YV9GTEFHU19FTlZfSU5JVH0iIENBQ0hFIFNUUklORyAiRmlyc3QgYXJndW1lbnQgdG8gSmF2YSBjb21waWxlciIpCisgICAgICBzZXQoQ01BS0VfSmF2YV9DT01QSUxFUl9BUkcxICIke0NNQUtFX0phdmFfRkxBR1NfRU5WX0lOSVR9IiBDQUNIRSBTVFJJTkcgIkFyZ3VtZW50cyB0byBKYXZhIGNvbXBpbGVyIikKICAgICBlbmRpZigpCiAgICAgaWYoTk9UIEVYSVNUUyAke0NNQUtFX0phdmFfQ09NUElMRVJfSU5JVH0pCiAgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkNvdWxkIG5vdCBmaW5kIGNvbXBpbGVyIHNldCBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBKQVZBX0NPTVBJTEVSOlxuJEVOVntKQVZBX0NPTVBJTEVSfS4iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZU9CSkNDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVPQkpDQ29tcGlsZXIuY21ha2UKaW5kZXggMTFiNDdmZC4uNzA5ZWIyNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZU9CSkNDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lT0JKQ0NvbXBpbGVyLmNtYWtlCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICBpZigkRU5WeyR7dmFyfX0gTUFUQ0hFUyAiLisiKQogICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENNQUtFX09CSkNfQ09NUElMRVJfSU5JVCAkRU5WeyR7dmFyfX0gUFJPR1JBTSBQUk9HUkFNX0FSR1MgQ01BS0VfT0JKQ19GTEFHU19FTlZfSU5JVCkKICAgICAgICAgaWYoQ01BS0VfT0JKQ19GTEFHU19FTlZfSU5JVCkKLSAgICAgICAgICBzZXQoQ01BS0VfT0JKQ19DT01QSUxFUl9BUkcxICIke0NNQUtFX09CSkNfRkxBR1NfRU5WX0lOSVR9IiBDQUNIRSBTVFJJTkcgIkZpcnN0IGFyZ3VtZW50IHRvIE9iamVjdGl2ZS1DIGNvbXBpbGVyIikKKyAgICAgICAgICBzZXQoQ01BS0VfT0JKQ19DT01QSUxFUl9BUkcxICIke0NNQUtFX09CSkNfRkxBR1NfRU5WX0lOSVR9IiBDQUNIRSBTVFJJTkcgIkFyZ3VtZW50cyB0byBPYmplY3RpdmUtQyBjb21waWxlciIpCiAgICAgICAgIGVuZGlmKCkKICAgICAgICAgaWYoTk9UIEVYSVNUUyAke0NNQUtFX09CSkNfQ09NUElMRVJfSU5JVH0pCiAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGZpbmQgY29tcGlsZXIgc2V0IGluIGVudmlyb25tZW50IHZhcmlhYmxlICR7dmFyfTpcbiAgJEVOVnske3Zhcn19IikKQEAgLTY1LDE0ICs2NSwxMSBAQAogICBlbHNlKCkKICAgICAjIHdlIG9ubHkgZ2V0IGhlcmUgaWYgQ01BS0VfT0JKQ19DT01QSUxFUiB3YXMgc3BlY2lmaWVkIHVzaW5nIC1EIG9yIGEgcHJlLW1hZGUgQ01ha2VDYWNoZS50eHQKICAgICAjIChlLmcuIHZpYSBjdGVzdCkgb3Igc2V0IGluIENNQUtFX1RPT0xDSEFJTl9GSUxFCi0gICAgIyBpZiBDTUFLRV9PQkpDX0NPTVBJTEVSIGlzIGEgbGlzdCBvZiBsZW5ndGggMiwgdXNlIHRoZSBmaXJzdCBpdGVtIGFzCi0gICAgIyBDTUFLRV9PQkpDX0NPTVBJTEVSIGFuZCB0aGUgMm5kIG9uZSBhcyBDTUFLRV9PQkpDX0NPTVBJTEVSX0FSRzEKLQotICAgIGxpc3QoTEVOR1RIIENNQUtFX09CSkNfQ09NUElMRVIgX0NNQUtFX09CSkNfQ09NUElMRVJfTElTVF9MRU5HVEgpCi0gICAgaWYoIiR7X0NNQUtFX09CSkNfQ09NUElMRVJfTElTVF9MRU5HVEh9IiBFUVVBTCAyKQotICAgICAgbGlzdChHRVQgQ01BS0VfT0JKQ19DT01QSUxFUiAxIENNQUtFX09CSkNfQ09NUElMRVJfQVJHMSkKLSAgICAgIGxpc3QoR0VUIENNQUtFX09CSkNfQ09NUElMRVIgMCBDTUFLRV9PQkpDX0NPTVBJTEVSKQotICAgIGVuZGlmKCkKKyAgICAjIGlmIENNQUtFX09CSkNfQ09NUElMRVIgaXMgYSBsaXN0LCB1c2UgdGhlIGZpcnN0IGl0ZW0gYXMKKyAgICAjIENNQUtFX09CSkNfQ09NUElMRVIgYW5kIHRoZSByZXN0IGFzIENNQUtFX09CSkNfQ09NUElMRVJfQVJHMQorICAgIHNldChDTUFLRV9PQkpDX0NPTVBJTEVSX0FSRzEgIiR7Q01BS0VfT0JKQ19DT01QSUxFUn0iKQorICAgIGxpc3QoUE9QX0ZST05UIENNQUtFX09CSkNfQ09NUElMRVJfQVJHMSBDTUFLRV9PQkpDX0NPTVBJTEVSKQorICAgIGxpc3QoSk9JTiBDTUFLRV9PQkpDX0NPTVBJTEVSX0FSRzEgIiAiIENNQUtFX09CSkNfQ09NUElMRVJfQVJHMSkKIAogICAgICMgaWYgYSBjb21waWxlciB3YXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIGJ1dCB3aXRob3V0IHBhdGgsCiAgICAgIyBub3cgdHJ5IHRvIGZpbmQgaXQgd2l0aCB0aGUgZnVsbCBwYXRoCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lT0JKQ1hYQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lT0JKQ1hYQ29tcGlsZXIuY21ha2UKaW5kZXggZGI4NzRkMS4uZmZkMDA5MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZURldGVybWluZU9CSkNYWENvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVPQkpDWFhDb21waWxlci5jbWFrZQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgaWYoJEVOVnske3Zhcn19IE1BVENIRVMgIi4rIikKICAgICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDTUFLRV9PQkpDWFhfQ09NUElMRVJfSU5JVCAkRU5WeyR7dmFyfX0gUFJPR1JBTSBQUk9HUkFNX0FSR1MgQ01BS0VfT0JKQ1hYX0ZMQUdTX0VOVl9JTklUKQogICAgICAgICBpZihDTUFLRV9PQkpDWFhfRkxBR1NfRU5WX0lOSVQpCi0gICAgICAgICAgc2V0KENNQUtFX09CSkNYWF9DT01QSUxFUl9BUkcxICIke0NNQUtFX09CSkNYWF9GTEFHU19FTlZfSU5JVH0iIENBQ0hFIFNUUklORyAiRmlyc3QgYXJndW1lbnQgdG8gT2JqZWN0aXZlLUMrKyBjb21waWxlciIpCisgICAgICAgICAgc2V0KENNQUtFX09CSkNYWF9DT01QSUxFUl9BUkcxICIke0NNQUtFX09CSkNYWF9GTEFHU19FTlZfSU5JVH0iIENBQ0hFIFNUUklORyAiQXJndW1lbnRzIHRvIE9iamVjdGl2ZS1DKysgY29tcGlsZXIiKQogICAgICAgICBlbmRpZigpCiAgICAgICAgIGlmKE5PVCBFWElTVFMgJHtDTUFLRV9PQkpDWFhfQ09NUElMRVJfSU5JVH0pCiAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGZpbmQgY29tcGlsZXIgc2V0IGluIGVudmlyb25tZW50IHZhcmlhYmxlICR7dmFyfTpcbiAgJEVOVnske3Zhcn19IikKQEAgLTY3LDE0ICs2NywxMSBAQAogICBlbHNlKCkKICAgICAjIHdlIG9ubHkgZ2V0IGhlcmUgaWYgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSIHdhcyBzcGVjaWZpZWQgdXNpbmcgLUQgb3IgYSBwcmUtbWFkZSBDTWFrZUNhY2hlLnR4dAogICAgICMgKGUuZy4gdmlhIGN0ZXN0KSBvciBzZXQgaW4gQ01BS0VfVE9PTENIQUlOX0ZJTEUKLSAgICAjIGlmIENNQUtFX09CSkNYWF9DT01QSUxFUiBpcyBhIGxpc3Qgb2YgbGVuZ3RoIDIsIHVzZSB0aGUgZmlyc3QgaXRlbSBhcwotICAgICMgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSIGFuZCB0aGUgMm5kIG9uZSBhcyBDTUFLRV9PQkpDWFhfQ09NUElMRVJfQVJHMQotCi0gICAgbGlzdChMRU5HVEggQ01BS0VfT0JKQ1hYX0NPTVBJTEVSIF9DTUFLRV9PQkpDWFhfQ09NUElMRVJfTElTVF9MRU5HVEgpCi0gICAgaWYoIiR7X0NNQUtFX09CSkNYWF9DT01QSUxFUl9MSVNUX0xFTkdUSH0iIEVRVUFMIDIpCi0gICAgICBsaXN0KEdFVCBDTUFLRV9PQkpDWFhfQ09NUElMRVIgMSBDTUFLRV9PQkpDWFhfQ09NUElMRVJfQVJHMSkKLSAgICAgIGxpc3QoR0VUIENNQUtFX09CSkNYWF9DT01QSUxFUiAwIENNQUtFX09CSkNYWF9DT01QSUxFUikKLSAgICBlbmRpZigpCisgICAgIyBpZiBDTUFLRV9PQkpDWFhfQ09NUElMRVIgaXMgYSBsaXN0LCB1c2UgdGhlIGZpcnN0IGl0ZW0gYXMKKyAgICAjIENNQUtFX09CSkNYWF9DT01QSUxFUiBhbmQgdGhlIHJlc3QgYXMgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX0FSRzEKKyAgICBzZXQoQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX0FSRzEgIiR7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSfSIpCisgICAgbGlzdChQT1BfRlJPTlQgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX0FSRzEgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSKQorICAgIGxpc3QoSk9JTiBDTUFLRV9PQkpDWFhfQ09NUElMRVJfQVJHMSAiICIgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX0FSRzEpCiAKICAgICAjIGlmIGEgY29tcGlsZXIgd2FzIHNwZWNpZmllZCBieSB0aGUgdXNlciBidXQgd2l0aG91dCBwYXRoLAogICAgICMgbm93IHRyeSB0byBmaW5kIGl0IHdpdGggdGhlIGZ1bGwgcGF0aApAQCAtMTQ4LDcgKzE0NSw3IEBACiAjICJhcm0tdW5rbm93bi1udG8tcW54NiIgaW5zdGVhZCBvZiB0aGUgY29ycmVjdCAiYXJtLXVua25vd24tbnRvLXFueDYuMy4wLSIKIAogCi1pZiAoQ01BS0VfQ1JPU1NDT01QSUxJTkcgIEFORCBOT1QgIF9DTUFLRV9UT09MQ0hBSU5fUFJFRklYKQoraWYgKE5PVCBfQ01BS0VfVE9PTENIQUlOX1BSRUZJWCkKIAogICBpZigiJHtDTUFLRV9PQkpDWFhfQ09NUElMRVJfSUR9IiBNQVRDSEVTICJHTlV8Q2xhbmd8UUNDIikKICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENPTVBJTEVSX0JBU0VOQU1FICIke0NNQUtFX09CSkNYWF9DT01QSUxFUn0iIE5BTUUpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lUkNDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVSQ0NvbXBpbGVyLmNtYWtlCmluZGV4IDg4MDFlMTYuLmY4ZDU1YTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVSQ0NvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVSQ0NvbXBpbGVyLmNtYWtlCkBAIC0xMyw3ICsxMyw3IEBACiAgIGlmKE5PVCAkRU5We1JDfSBTVFJFUVVBTCAiIikKICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENNQUtFX1JDX0NPTVBJTEVSX0lOSVQgJEVOVntSQ30gUFJPR1JBTSBQUk9HUkFNX0FSR1MgQ01BS0VfUkNfRkxBR1NfRU5WX0lOSVQpCiAgICAgaWYoQ01BS0VfUkNfRkxBR1NfRU5WX0lOSVQpCi0gICAgICBzZXQoQ01BS0VfUkNfQ09NUElMRVJfQVJHMSAiJHtDTUFLRV9SQ19GTEFHU19FTlZfSU5JVH0iIENBQ0hFIFNUUklORyAiRmlyc3QgYXJndW1lbnQgdG8gUkMgY29tcGlsZXIiKQorICAgICAgc2V0KENNQUtFX1JDX0NPTVBJTEVSX0FSRzEgIiR7Q01BS0VfUkNfRkxBR1NfRU5WX0lOSVR9IiBDQUNIRSBTVFJJTkcgIkFyZ3VtZW50cyB0byBSQyBjb21waWxlciIpCiAgICAgZW5kaWYoKQogICAgIGlmKEVYSVNUUyAke0NNQUtFX1JDX0NPTVBJTEVSX0lOSVR9KQogICAgIGVsc2UoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZURldGVybWluZVN3aWZ0Q29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lU3dpZnRDb21waWxlci5jbWFrZQppbmRleCA5YWFmZTQ4Li5hYWFkNTYwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lU3dpZnRDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lU3dpZnRDb21waWxlci5jbWFrZQpAQCAtMTYsNyArMTYsNyBAQAogICBlbmRpZigpCiAgIHNldChDTUFLRV9Td2lmdF9DT01QSUxFUl9YQ09ERV9UWVBFIHNvdXJjZWNvZGUuc3dpZnQpCiAgIF9jbWFrZV9maW5kX2NvbXBpbGVyX3BhdGgoU3dpZnQpCi1lbHNlaWYoIiR7Q01BS0VfR0VORVJBVE9SfSIgU1RSRVFVQUwgIk5pbmphIikKK2Vsc2VpZigiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJeTmluamEiKQogICBpZihDTUFLRV9Td2lmdF9DT01QSUxFUikKICAgICBfY21ha2VfZmluZF9jb21waWxlcl9wYXRoKFN3aWZ0KQogICBlbHNlKCkKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgUFJPR1JBTV9BUkdTIENNQUtFX1N3aWZ0X0ZMQUdTX0VOVl9JTklUKQogICAgICAgaWYoQ01BS0VfU3dpZnRfRkxBR1NfRU5WX0lOSVQpCiAgICAgICAgIHNldChDTUFLRV9Td2lmdF9DT01QSUxFUl9BUkcxICIke0NNQUtFX1N3aWZ0X0ZMQUdTX0VOVl9JTklUfSIgQ0FDSEUKLSAgICAgICAgICBTVFJJTkcgIkZpcnN0IGFyZ3VtZW50IHRvIHRoZSBTd2lmdCBjb21waWxlciIpCisgICAgICAgICAgU1RSSU5HICJBcmd1bWVudHMgdG8gdGhlIFN3aWZ0IGNvbXBpbGVyIikKICAgICAgIGVuZGlmKCkKICAgICAgIGlmKE5PVCBFWElTVFMgJHtDTUFLRV9Td2lmdF9DT01QSUxFUl9JTklUfSkKICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGZpbmQgY29tcGlsZXIgc2V0IGluIGVudmlyb25tZW50IHZhcmlhYmxlIFNXSUZUQ1xuJEVOVntTV0lGVEN9LlxuJHtDTUFLRV9Td2lmdF9DT01QSUxFUl9JTklUfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lU3lzdGVtLmNtYWtlIGIvTW9kdWxlcy9DTWFrZURldGVybWluZVN5c3RlbS5jbWFrZQppbmRleCBkYzIwOGM2Li5mM2VjNGRhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lU3lzdGVtLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VEZXRlcm1pbmVTeXN0ZW0uY21ha2UKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBlbHNlKCkKICAgICAgIGV4ZWNfcHJvZ3JhbSgke0NNQUtFX1VOQU1FfSBBUkdTIC1yIE9VVFBVVF9WQVJJQUJMRSBDTUFLRV9IT1NUX1NZU1RFTV9WRVJTSU9OKQogICAgIGVuZGlmKCkKLSAgICBpZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIE1BVENIRVMgIkxpbnV4fENZR1dJTi4qfERhcndpbnxeR05VJCIpCisgICAgaWYoQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eHxDWUdXSU4uKnxEYXJ3aW58XkdOVSR8QW5kcm9pZCIpCiAgICAgICBleGVjX3Byb2dyYW0oJHtDTUFLRV9VTkFNRX0gQVJHUyAtbSBPVVRQVVRfVkFSSUFCTEUgQ01BS0VfSE9TVF9TWVNURU1fUFJPQ0VTU09SCiAgICAgICAgIFJFVFVSTl9WQUxVRSB2YWwpCiAgICAgICBpZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJEYXJ3aW4iIEFORApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUZpbmRCaW5VdGlscy5jbWFrZSBiL01vZHVsZXMvQ01ha2VGaW5kQmluVXRpbHMuY21ha2UKaW5kZXggYzIzZTQ0Ny4uZGU5ZWY5YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUZpbmRCaW5VdGlscy5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlRmluZEJpblV0aWxzLmNtYWtlCkBAIC03NSw2ICs3NSw3IEBACiAgIGVuZGlmKCkKIAogICBmaW5kX3Byb2dyYW0oQ01BS0VfTElOS0VSIE5BTUVTICR7X0NNQUtFX0FERElUSU9OQUxfTElOS0VSX05BTUVTfSBsaW5rIEhJTlRTICR7X0NNQUtFX1RPT0xDSEFJTl9MT0NBVElPTn0pCisgIGZpbmRfcHJvZ3JhbShDTUFLRV9BUiAgICAgTkFNRVMgbGliICBISU5UUyAke19DTUFLRV9UT09MQ0hBSU5fTE9DQVRJT059KQogICBmaW5kX3Byb2dyYW0oQ01BS0VfTVQgICAgIE5BTUVTIG10ICAgSElOVFMgJHtfQ01BS0VfVE9PTENIQUlOX0xPQ0FUSU9OfSkKIAogICBsaXN0KEFQUEVORCBfQ01BS0VfVE9PTF9WQVJTIExJTktFUiBNVCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VGaW5kRWNsaXBzZUNEVDQuY21ha2UgYi9Nb2R1bGVzL0NNYWtlRmluZEVjbGlwc2VDRFQ0LmNtYWtlCmluZGV4IDE5OTAwNWQuLmU1NjNhMTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VGaW5kRWNsaXBzZUNEVDQuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUZpbmRFY2xpcHNlQ0RUNC5jbWFrZQpAQCAtMjUsNyArMjUsNyBAQAogCiAgIGlmKE5PVCBERUZJTkVEIENNQUtFX0VDTElQU0VfVkVSU0lPTikKICAgICBpZihDTUFLRV9FQ0xJUFNFX0VYRUNVVEFCTEUpCi0gICAgICAjIHVzZSBSRUFMUEFUSCB0byByZXNvbHZlIHN5bWxpbmtzIChodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTMwMzYpCisgICAgICAjIHVzZSBSRUFMUEFUSCB0byByZXNvbHZlIHN5bWxpbmtzIChodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xMzAzNikKICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX1JFQUxQQVRIX0NNQUtFX0VDTElQU0VfRVhFQ1VUQUJMRSAiJHtDTUFLRV9FQ0xJUFNFX0VYRUNVVEFCTEV9IiBSRUFMUEFUSCkKICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX0VDTElQU0VfRElSICIke19SRUFMUEFUSF9DTUFLRV9FQ0xJUFNFX0VYRUNVVEFCTEV9IiBQQVRIKQogICAgICAgZmlsZShHTE9CIF9FQ0xJUFNFX0ZFQVRVUkVfRElSICIke19FQ0xJUFNFX0RJUn0vZmVhdHVyZXMvb3JnLmVjbGlwc2UucGxhdGZvcm0qIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VGaW5kRnJhbWV3b3Jrcy5jbWFrZSBiL01vZHVsZXMvQ01ha2VGaW5kRnJhbWV3b3Jrcy5jbWFrZQppbmRleCAwNmMwNWZiLi44OTA2ZjQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRmluZEZyYW1ld29ya3MuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUZpbmRGcmFtZXdvcmtzLmNtYWtlCkBAIC0xNywxMyArMTcsMjUgQEAKICAgbWFjcm8oQ01BS0VfRklORF9GUkFNRVdPUktTIGZ3aykKICAgICBzZXQoJHtmd2t9X0ZSQU1FV09SS1MpCiAgICAgaWYoQVBQTEUpCi0gICAgICBmb3JlYWNoKGRpcgotICAgICAgICAgIH4vTGlicmFyeS9GcmFtZXdvcmtzLyR7ZndrfS5mcmFtZXdvcmsKLSAgICAgICAgICAvdXNyL2xvY2FsL0ZyYW1ld29ya3MvJHtmd2t9LmZyYW1ld29yawotICAgICAgICAgIC9MaWJyYXJ5L0ZyYW1ld29ya3MvJHtmd2t9LmZyYW1ld29yawotICAgICAgICAgIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzLyR7ZndrfS5mcmFtZXdvcmsKLSAgICAgICAgICAvTmV0d29yay9MaWJyYXJ5L0ZyYW1ld29ya3MvJHtmd2t9LmZyYW1ld29yawotICAgICAgICAgICR7Q01BS0VfRklORF9GUkFNRVdPUktfRVhUUkFfTE9DQVRJT05TfSkKKyAgICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntDTUFLRV9GUkFNRVdPUktfUEFUSH0iIF9jbWZmX0NNQUtFX0ZSQU1FV09SS19QQVRIKQorICAgICAgc2V0KF9jbWZmX3NlYXJjaF9wYXRocworICAgICAgICAgICAgJHtDTUFLRV9GUkFNRVdPUktfUEFUSH0KKyAgICAgICAgICAgICR7X2NtZmZfQ01BS0VfRlJBTUVXT1JLX1BBVEh9CisgICAgICAgICAgICB+L0xpYnJhcnkvRnJhbWV3b3JrcworICAgICAgICAgICAgL3Vzci9sb2NhbC9GcmFtZXdvcmtzCisgICAgICAgICAgICAvTGlicmFyeS9GcmFtZXdvcmtzCisgICAgICAgICAgICAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3JrcworICAgICAgICAgICAgL05ldHdvcmsvTGlicmFyeS9GcmFtZXdvcmtzCisgICAgICAgICAgICAke0NNQUtFX1NZU1RFTV9GUkFNRVdPUktfUEFUSH0pCisKKyAgICAgICMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMsCisgICAgICAjIENNQUtFX0ZJTkRfRlJBTUVXT1JLX0VYVFJBX0xPQ0FUSU9OUyBpbmNsdWRlcyAke2Z3a30uZnJhbWV3b3JrCisgICAgICBsaXN0KFRSQU5TRk9STSBfY21mZl9zZWFyY2hfcGF0aHMgQVBQRU5EIC8ke2Z3a30uZnJhbWV3b3JrKQorICAgICAgbGlzdChBUFBFTkQgX2NtZmZfc2VhcmNoX3BhdGhzICR7Q01BS0VfRklORF9GUkFNRVdPUktfRVhUUkFfTE9DQVRJT05TfSkKKworICAgICAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfY21mZl9zZWFyY2hfcGF0aHMpCisKKyAgICAgIGZvcmVhY2goZGlyIElOIExJU1RTIF9jbWZmX3NlYXJjaF9wYXRocykKICAgICAgICAgaWYoRVhJU1RTICR7ZGlyfSkKICAgICAgICAgICBzZXQoJHtmd2t9X0ZSQU1FV09SS1MgJHske2Z3a31fRlJBTUVXT1JLU30gJHtkaXJ9KQogICAgICAgICBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlLmluIGIvTW9kdWxlcy9DTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZS5pbgppbmRleCBhZTdiNzNhLi4wNmVlNTI4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlLmluCisrKyBiL01vZHVsZXMvQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UuaW4KQEAgLTYsNyArNiw5IEBACiBzZXQoQ01BS0VfRm9ydHJhbl9QTEFURk9STV9JRCAiQENNQUtFX0ZvcnRyYW5fUExBVEZPUk1fSURAIikKIHNldChDTUFLRV9Gb3J0cmFuX1NJTVVMQVRFX0lEICJAQ01BS0VfRm9ydHJhbl9TSU1VTEFURV9JREAiKQogc2V0KENNQUtFX0ZvcnRyYW5fU0lNVUxBVEVfVkVSU0lPTiAiQENNQUtFX0ZvcnRyYW5fU0lNVUxBVEVfVkVSU0lPTkAiKQorQF9TRVRfQ01BS0VfRm9ydHJhbl9YTF9DUFBACiBAX1NFVF9DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0FSQ0hJVEVDVFVSRV9JREAKK0BfU0VUX0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1lTUk9PVEAKIEBTRVRfTVNWQ19Gb3J0cmFuX0FSQ0hJVEVDVFVSRV9JREAKIHNldChDTUFLRV9BUiAiQENNQUtFX0FSQCIpCiBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9BUiAiQENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfQVJAIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VGb3J0cmFuSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlRm9ydHJhbkluZm9ybWF0aW9uLmNtYWtlCmluZGV4IGZmYTZhMjQuLjlhNGNlNjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VGb3J0cmFuSW5mb3JtYXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZUZvcnRyYW5JbmZvcm1hdGlvbi5jbWFrZQpAQCAtMTYzLDYgKzE2MywxMSBAQAogCiBjbWFrZV9pbml0aWFsaXplX3Blcl9jb25maWdfdmFyaWFibGUoQ01BS0VfRm9ydHJhbl9GTEFHUyAiRmxhZ3MgdXNlZCBieSB0aGUgRm9ydHJhbiBjb21waWxlciIpCiAKK2lmKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xBVU5DSEVSIEFORCBERUZJTkVEIEVOVntDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xBVU5DSEVSfSkKKyAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTEFVTkNIRVIgIiRFTlZ7Q01BS0VfRm9ydHJhbl9DT01QSUxFUl9MQVVOQ0hFUn0iCisgICAgQ0FDSEUgU1RSSU5HICJDb21waWxlciBsYXVuY2hlciBmb3IgRm9ydHJhbi4iKQorZW5kaWYoKQorCiBpbmNsdWRlKENNYWtlQ29tbW9uTGFuZ3VhZ2VJbmNsdWRlKQogCiAjIG5vdyBkZWZpbmUgdGhlIGZvbGxvd2luZyBydWxlIHZhcmlhYmxlcwpAQCAtMTg4LDcgKzE5Myw3IEBACiAgIHNldChDTUFLRV9Gb3J0cmFuX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfRm9ydHJhbl9BUkNISVZFX0FQUEVORCkKLSAgc2V0KENNQUtFX0ZvcnRyYW5fQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSAgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCisgIHNldChDTUFLRV9Gb3J0cmFuX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9Gb3J0cmFuX0FSQ0hJVkVfRklOSVNIKQogICBzZXQoQ01BS0VfRm9ydHJhbl9BUkNISVZFX0ZJTklTSCAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4iKQpAQCAtMjA0LDcgKzIwOSw3IEBACiAjIGxpbmsgYSBmb3J0cmFuIHByb2dyYW0KIGlmKE5PVCBDTUFLRV9Gb3J0cmFuX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX0ZvcnRyYW5fTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiA8Q01BS0VfRm9ydHJhbl9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPEZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfRm9ydHJhbl9DT01QSUxFUj4gPENNQUtFX0ZvcnRyYW5fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxGTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kaWYoKQogCiBpZihDTUFLRV9Gb3J0cmFuX1NUQU5EQVJEX0xJQlJBUklFU19JTklUKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUdlbmVyaWNTeXN0ZW0uY21ha2UgYi9Nb2R1bGVzL0NNYWtlR2VuZXJpY1N5c3RlbS5jbWFrZQppbmRleCA3N2Q4Y2ZkLi4wMDBmYmExIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlR2VuZXJpY1N5c3RlbS5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlR2VuZXJpY1N5c3RlbS5jbWFrZQpAQCAtMjcsNyArMjcsNyBAQAogc2V0KENNQUtFX0FVVE9HRU5fT1JJR0lOX0RFUEVORFMgT04pCiBzZXQoQ01BS0VfQVVUT01PQ19DT01QSUxFUl9QUkVERUZJTkVTIE9OKQogc2V0KENNQUtFX0FVVE9NT0NfUEFUSF9QUkVGSVggT04pCi1zZXQoQ01BS0VfQVVUT01PQ19NQUNST19OQU1FUyAiUV9PQkpFQ1QiICJRX0dBREdFVCIgIlFfTkFNRVNQQUNFIikKK3NldChDTUFLRV9BVVRPTU9DX01BQ1JPX05BTUVTICJRX09CSkVDVCIgIlFfR0FER0VUIiAiUV9OQU1FU1BBQ0UiICJRX05BTUVTUEFDRV9FWFBPUlQiKQogCiAjIGJhc2ljYWxseSBhbGwgZ2VuZXJhbCBwdXJwb3NlIE9TcyBzdXBwb3J0IHNoYXJlZCBsaWJzCiBzZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZIFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCUyBUUlVFKQpAQCAtNTAsMTcgKzUwLDExIEBACiAgIGlmKERFRklORUQgQ01BS0VfVEFSR0VUX01FU1NBR0VTKQogICAgIHNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkgVEFSR0VUX01FU1NBR0VTICR7Q01BS0VfVEFSR0VUX01FU1NBR0VTfSkKICAgZW5kaWYoKQotICBpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiVW5peCBNYWtlZmlsZXMiKQotICAgIHNldChDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyBPRkYgQ0FDSEUgQk9PTAotICAgICAgIkVuYWJsZS9EaXNhYmxlIG91dHB1dCBvZiBjb21waWxlIGNvbW1hbmRzIGR1cmluZyBnZW5lcmF0aW9uLiIKLSAgICAgICkKLSAgICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTKQotICBlbmRpZigpCiBlbmRpZigpCiAKLWlmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJOaW5qYSIpCi0gIHNldChDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyBPRkYgQ0FDSEUgQk9PTAotICAgICJFbmFibGUvRGlzYWJsZSBvdXRwdXQgb2YgY29tcGlsZSBjb21tYW5kcyBkdXJpbmcgZ2VuZXJhdGlvbi4iCitpZihOT1QgREVGSU5FRCBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyBBTkQgQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIk5pbmphfFVuaXggTWFrZWZpbGVzIikKKyAgc2V0KENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTICIkRU5We0NNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTfSIKKyAgICBDQUNIRSBCT09MICJFbmFibGUvRGlzYWJsZSBvdXRwdXQgb2YgY29tcGlsZSBjb21tYW5kcyBkdXJpbmcgZ2VuZXJhdGlvbi4iCiAgICAgKQogICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0VYUE9SVF9DT01QSUxFX0NPTU1BTkRTKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZSBiL01vZHVsZXMvQ01ha2VHcmFwaFZpek9wdGlvbnMuY21ha2UKaW5kZXggMTkxMWU3My4uYmU0YTNiZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlR3JhcGhWaXpPcHRpb25zLmNtYWtlCkBAIC01LDExOSArNSwxNDUgQEAKIENNYWtlR3JhcGhWaXpPcHRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgYnVpbHRpbiBncmFwaHZpeiBzdXBwb3J0IG9mIENNYWtlLgorVGhlIGJ1aWx0aW4gR3JhcGh2aXogc3VwcG9ydCBvZiBDTWFrZS4KIAotVmFyaWFibGVzIHNwZWNpZmljIHRvIHRoZSBncmFwaHZpeiBzdXBwb3J0Ci1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK0dlbmVyYXRpbmcgR3JhcGh2aXogZmlsZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotQ01ha2UKLWNhbiBnZW5lcmF0ZSBgZ3JhcGh2aXogPGh0dHA6Ly93d3cuZ3JhcGh2aXoub3JnLz5gXyBmaWxlcywgc2hvd2luZyB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlCi10YXJnZXRzIGluIGEgcHJvamVjdCBhbmQgYWxzbyBleHRlcm5hbCBsaWJyYXJpZXMgd2hpY2ggYXJlIGxpbmtlZAotYWdhaW5zdC4gIFdoZW4gQ01ha2UgaXMgcnVuIHdpdGggdGhlIGBgLS1ncmFwaHZpej1mb28uZG90YGAgb3B0aW9uLCBpdCB3aWxsCi1wcm9kdWNlOgorQ01ha2UgY2FuIGdlbmVyYXRlIGBHcmFwaHZpeiA8aHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnLz5gXyBmaWxlcyBzaG93aW5nIHRoZQorZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHRhcmdldHMgaW4gYSBwcm9qZWN0LCBhcyB3ZWxsIGFzIGV4dGVybmFsIGxpYnJhcmllcword2hpY2ggYXJlIGxpbmtlZCBhZ2FpbnN0LgogCi0qIGEgYGBmb28uZG90YGAgZmlsZSBzaG93aW5nIGFsbCBkZXBlbmRlbmNpZXMgaW4gdGhlIHByb2plY3QKLSogYSBgYGZvby5kb3QuPHRhcmdldD5gYCBmaWxlIGZvciBlYWNoIHRhcmdldCwgZmlsZSBzaG93aW5nIG9uIHdoaWNoIG90aGVyIHRhcmdldHMgdGhlIHJlc3BlY3RpdmUgdGFyZ2V0IGRlcGVuZHMKLSogYSBgYGZvby5kb3QuPHRhcmdldD4uZGVwZW5kZXJzYGAgZmlsZSwgc2hvd2luZyB3aGljaCBvdGhlciB0YXJnZXRzIGRlcGVuZCBvbiB0aGUgcmVzcGVjdGl2ZSB0YXJnZXQKK1doZW4gcnVubmluZyBDTWFrZSB3aXRoIHRoZSBgYC0tZ3JhcGh2aXo9Zm9vLmRvdGBgIG9wdGlvbiwgaXQgcHJvZHVjZXM6CiAKLVRoZSBkaWZmZXJlbnQgZGVwZW5kZW5jeSB0eXBlcyBgYFBVQkxJQ2BgLCBgYFBSSVZBVEVgYCBhbmQgYGBJTlRFUkZBQ0VgYAorKiBhIGBgZm9vLmRvdGBgIGZpbGUsIHNob3dpbmcgYWxsIGRlcGVuZGVuY2llcyBpbiB0aGUgcHJvamVjdAorKiBhIGBgZm9vLmRvdC48dGFyZ2V0PmBgIGZpbGUgZm9yIGVhY2ggdGFyZ2V0LCBzaG93aW5nIG9uIHdoaWNoIG90aGVyIHRhcmdldHMKKyAgaXQgZGVwZW5kcworKiBhIGBgZm9vLmRvdC48dGFyZ2V0Pi5kZXBlbmRlcnNgYCBmaWxlIGZvciBlYWNoIHRhcmdldCwgc2hvd2luZyB3aGljaCBvdGhlcgorICB0YXJnZXRzIGRlcGVuZCBvbiBpdAorCitUaG9zZSAuZG90IGZpbGVzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gaW1hZ2VzIHVzaW5nIHRoZSAqZG90KiBjb21tYW5kIGZyb20gdGhlCitHcmFwaHZpeiBwYWNrYWdlOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwKKworICBkb3QgLVRwbmcgLW8gZm9vLnBuZyBmb28uZG90CisKK1RoZSBkaWZmZXJlbnQgZGVwZW5kZW5jeSB0eXBlcyBgYFBVQkxJQ2BgLCBgYElOVEVSRkFDRWBgIGFuZCBgYFBSSVZBVEVgYAogYXJlIHJlcHJlc2VudGVkIGFzIHNvbGlkLCBkYXNoZWQgYW5kIGRvdHRlZCBlZGdlcy4KIAotVGhpcyBjYW4gcmVzdWx0IGluIGh1Z2UgZ3JhcGhzLiAgVXNpbmcgdGhlIGZpbGUKLWBgQ01ha2VHcmFwaFZpek9wdGlvbnMuY21ha2VgYCB0aGUgbG9vayBhbmQgY29udGVudCBvZiB0aGUgZ2VuZXJhdGVkCi1ncmFwaHMgY2FuIGJlIGluZmx1ZW5jZWQuICBUaGlzIGZpbGUgaXMgc2VhcmNoZWQgZmlyc3QgaW4KLTp2YXJpYWJsZTpgQ01BS0VfQklOQVJZX0RJUmAgYW5kIHRoZW4gaW4gOnZhcmlhYmxlOmBDTUFLRV9TT1VSQ0VfRElSYC4gIElmIGZvdW5kLCBpdCBpcwotcmVhZCBhbmQgdGhlIHZhcmlhYmxlcyBzZXQgaW4gaXQgYXJlIHVzZWQgdG8gYWRqdXN0IG9wdGlvbnMgZm9yIHRoZQotZ2VuZXJhdGVkIGdyYXBodml6IGZpbGVzLgorVmFyaWFibGVzIHNwZWNpZmljIHRvIHRoZSBHcmFwaHZpeiBzdXBwb3J0CiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9HUkFQSF9UWVBFCi0KLSBUaGUgZ3JhcGggdHlwZS4KLQotICogTWFuZGF0b3J5IDogTk8KLSAqIERlZmF1bHQgICA6ICJkaWdyYXBoIgotCi0gVmFsaWQgZ3JhcGggdHlwZXMgYXJlOgotCi0gKiAiZ3JhcGgiIDogTm9kZXMgYXJlIGpvaW5lZCB3aXRoIGxpbmVzCi0gKiAiZGlncmFwaCIgOiBOb2RlcyBhcmUgam9pbmVkIHdpdGggYXJyb3dzIHNob3dpbmcgZGlyZWN0aW9uCi0gKiAic3RyaWN0IGdyYXBoIiA6IExpa2UgImdyYXBoIiBidXQgbWF4IG9uZSBsaW5lIGJldHdlZW4gZWFjaCBub2RlCi0gKiAic3RyaWN0IGRpZ3JhcGgiIDogTGlrZSAiZ3JhcGgiIGJ1dCBtYXggb25lIGxpbmUgYmV0d2VlbiBlYWNoIG5vZGUgaW4gZWFjaCBkaXJlY3Rpb24KK1RoZSByZXN1bHRpbmcgZ3JhcGhzIGNhbiBiZSBodWdlLiAgVGhlIGxvb2sgYW5kIGNvbnRlbnQgb2YgdGhlIGdlbmVyYXRlZCBncmFwaHMKK2NhbiBiZSBjb250cm9sbGVkIHVzaW5nIHRoZSBmaWxlIGBgQ01ha2VHcmFwaFZpek9wdGlvbnMuY21ha2VgYC4gIFRoaXMgZmlsZSBpcworZmlyc3Qgc2VhcmNoZWQgaW4gOnZhcmlhYmxlOmBDTUFLRV9CSU5BUllfRElSYCwgYW5kIHRoZW4gaW4KKzp2YXJpYWJsZTpgQ01BS0VfU09VUkNFX0RJUmAuICBJZiBmb3VuZCwgdGhlIHZhcmlhYmxlcyBzZXQgaW4gaXQgYXJlIHVzZWQgdG8KK2FkanVzdCBvcHRpb25zIGZvciB0aGUgZ2VuZXJhdGVkIEdyYXBodml6IGZpbGVzLgogCiAuLiB2YXJpYWJsZTo6IEdSQVBIVklaX0dSQVBIX05BTUUKIAogIFRoZSBncmFwaCBuYW1lLgogCi0gKiBNYW5kYXRvcnkgOiBOTwotICogRGVmYXVsdCAgIDogIkdHIgorICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogdmFsdWUgb2YgOnZhcmlhYmxlOmBDTUFLRV9QUk9KRUNUX05BTUVgCiAKIC4uIHZhcmlhYmxlOjogR1JBUEhWSVpfR1JBUEhfSEVBREVSCiAKLSBUaGUgaGVhZGVyIHdyaXR0ZW4gYXQgdGhlIHRvcCBvZiB0aGUgZ3JhcGh2aXogZmlsZS4KKyBUaGUgaGVhZGVyIHdyaXR0ZW4gYXQgdGhlIHRvcCBvZiB0aGUgR3JhcGh2aXogZmlsZXMuCiAKLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiAibm9kZSBbbiAgZm9udHNpemUgPSAiMTIiXTsiCisgKiBNYW5kYXRvcnk6IE5PCisgKiBEZWZhdWx0OiAibm9kZSBbIGZvbnRzaXplID0gIjEyIiBdOyIKIAogLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9OT0RFX1BSRUZJWAogCi0gVGhlIHByZWZpeCBmb3IgZWFjaCBub2RlIGluIHRoZSBncmFwaHZpeiBmaWxlLgorIFRoZSBwcmVmaXggZm9yIGVhY2ggbm9kZSBpbiB0aGUgR3JhcGh2aXogZmlsZXMuCiAKLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiAibm9kZSIKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6ICJub2RlIgogCiAuLiB2YXJpYWJsZTo6IEdSQVBIVklaX0VYRUNVVEFCTEVTCiAKLSBTZXQgdGhpcyB0byBGQUxTRSB0byBleGNsdWRlIGV4ZWN1dGFibGVzIGZyb20gdGhlIGdlbmVyYXRlZCBncmFwaHMuCisgU2V0IHRvIEZBTFNFIHRvIGV4Y2x1ZGUgZXhlY3V0YWJsZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KIAotICogTWFuZGF0b3J5IDogTk8KLSAqIERlZmF1bHQgICA6IFRSVUUKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6IFRSVUUKIAogLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9TVEFUSUNfTElCUwogCi0gU2V0IHRoaXMgdG8gRkFMU0UgdG8gZXhjbHVkZSBzdGF0aWMgbGlicmFyaWVzIGZyb20gdGhlIGdlbmVyYXRlZCBncmFwaHMuCisgU2V0IHRvIEZBTFNFIHRvIGV4Y2x1ZGUgc3RhdGljIGxpYnJhcmllcyBmcm9tIHRoZSBnZW5lcmF0ZWQgZ3JhcGhzLgogCi0gKiBNYW5kYXRvcnkgOiBOTwotICogRGVmYXVsdCAgIDogVFJVRQorICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogVFJVRQogCiAuLiB2YXJpYWJsZTo6IEdSQVBIVklaX1NIQVJFRF9MSUJTCiAKLSBTZXQgdGhpcyB0byBGQUxTRSB0byBleGNsdWRlIHNoYXJlZCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KKyBTZXQgdG8gRkFMU0UgdG8gZXhjbHVkZSBzaGFyZWQgbGlicmFyaWVzIGZyb20gdGhlIGdlbmVyYXRlZCBncmFwaHMuCiAKLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiBUUlVFCisgKiBNYW5kYXRvcnk6IE5PCisgKiBEZWZhdWx0OiBUUlVFCiAKIC4uIHZhcmlhYmxlOjogR1JBUEhWSVpfTU9EVUxFX0xJQlMKIAotIFNldCB0aGlzIHRvIEZBTFNFIHRvIGV4Y2x1ZGUgbW9kdWxlIGxpYnJhcmllcyBmcm9tIHRoZSBnZW5lcmF0ZWQgZ3JhcGhzLgorIFNldCB0byBGQUxTRSB0byBleGNsdWRlIG1vZHVsZSBsaWJyYXJpZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KIAotICogTWFuZGF0b3J5IDogTk8KLSAqIERlZmF1bHQgICA6IFRSVUUKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6IFRSVUUKKworLi4gdmFyaWFibGU6OiBHUkFQSFZJWl9JTlRFUkZBQ0VfTElCUworCisgU2V0IHRvIEZBTFNFIHRvIGV4Y2x1ZGUgaW50ZXJmYWNlIGxpYnJhcmllcyBmcm9tIHRoZSBnZW5lcmF0ZWQgZ3JhcGhzLgorCisgKiBNYW5kYXRvcnk6IE5PCisgKiBEZWZhdWx0OiBUUlVFCisKKy4uIHZhcmlhYmxlOjogR1JBUEhWSVpfT0JKRUNUX0xJQlMKKworIFNldCB0byBGQUxTRSB0byBleGNsdWRlIG9iamVjdCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KKworICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogVFJVRQorCisuLiB2YXJpYWJsZTo6IEdSQVBIVklaX1VOS05PV05fTElCUworCisgU2V0IHRvIEZBTFNFIHRvIGV4Y2x1ZGUgdW5rbm93biBsaWJyYXJpZXMgZnJvbSB0aGUgZ2VuZXJhdGVkIGdyYXBocy4KKworICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogVFJVRQogCiAuLiB2YXJpYWJsZTo6IEdSQVBIVklaX0VYVEVSTkFMX0xJQlMKIAotIFNldCB0aGlzIHRvIEZBTFNFIHRvIGV4Y2x1ZGUgZXh0ZXJuYWwgbGlicmFyaWVzIGZyb20gdGhlIGdlbmVyYXRlZCBncmFwaHMuCisgU2V0IHRvIEZBTFNFIHRvIGV4Y2x1ZGUgZXh0ZXJuYWwgbGlicmFyaWVzIGZyb20gdGhlIGdlbmVyYXRlZCBncmFwaHMuCiAKLSAqIE1hbmRhdG9yeSA6IE5PCi0gKiBEZWZhdWx0ICAgOiBUUlVFCisgKiBNYW5kYXRvcnk6IE5PCisgKiBEZWZhdWx0OiBUUlVFCisKKy4uIHZhcmlhYmxlOjogR1JBUEhWSVpfQ1VTVE9NX1RBUkdFVFMKKworIFNldCB0byBUUlVFIHRvIGluY2x1ZGUgY3VzdG9tIHRhcmdldHMgaW4gdGhlIGdlbmVyYXRlZCBncmFwaHMuCisKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6IEZBTFNFCiAKIC4uIHZhcmlhYmxlOjogR1JBUEhWSVpfSUdOT1JFX1RBUkdFVFMKIAotIEEgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBpZ25vcmluZyB0YXJnZXRzLgorIEEgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBuYW1lcyBvZiB0YXJnZXRzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUKKyBnZW5lcmF0ZWQgZ3JhcGhzLgogCi0gKiBNYW5kYXRvcnkgOiBOTwotICogRGVmYXVsdCAgIDogZW1wdHkKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6IGVtcHR5CiAKIC4uIHZhcmlhYmxlOjogR1JBUEhWSVpfR0VORVJBVEVfUEVSX1RBUkdFVAogCi0gU2V0IHRoaXMgdG8gRkFMU0UgdG8gZXhjbHVkZSBwZXIgdGFyZ2V0IGdyYXBocyBgYGZvby5kb3QuPHRhcmdldD5gYC4KKyBTZXQgdG8gRkFMU0UgdG8gbm90IGdlbmVyYXRlIHBlci10YXJnZXQgZ3JhcGhzIGBgZm9vLmRvdC48dGFyZ2V0PmBgLgogCi0gKiBNYW5kYXRvcnkgOiBOTwotICogRGVmYXVsdCAgIDogVFJVRQorICogTWFuZGF0b3J5OiBOTworICogRGVmYXVsdDogVFJVRQogCiAuLiB2YXJpYWJsZTo6IEdSQVBIVklaX0dFTkVSQVRFX0RFUEVOREVSUwogCi0gU2V0IHRoaXMgdG8gRkFMU0UgdG8gZXhjbHVkZSBkZXBlbmRlciBncmFwaHMgYGBmb28uZG90Ljx0YXJnZXQ+LmRlcGVuZGVyc2BgLgorIFNldCB0byBGQUxTRSB0byBub3QgZ2VuZXJhdGUgZGVwZW5kZXIgZ3JhcGhzIGBgZm9vLmRvdC48dGFyZ2V0Pi5kZXBlbmRlcnNgYC4KIAotICogTWFuZGF0b3J5IDogTk8KLSAqIERlZmF1bHQgICA6IFRSVUUKKyAqIE1hbmRhdG9yeTogTk8KKyAqIERlZmF1bHQ6IFRSVUUKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlTWluR1dGaW5kTWFrZS5jbWFrZSBiL01vZHVsZXMvQ01ha2VNaW5HV0ZpbmRNYWtlLmNtYWtlCmluZGV4IDUyM2YwMGMuLmYwMjZlOWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VNaW5HV0ZpbmRNYWtlLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VNaW5HV0ZpbmRNYWtlLmNtYWtlCkBAIC03LDEwICs3LDUgQEAKICAgYzovTWluR1cvYmluIC9NaW5HVy9iaW4KICAgIltIS0VZX0NVUlJFTlRfVVNFUlxcU29mdHdhcmVcXENvZGVCbG9ja3M7UGF0aF0vTWluR1cvYmluIgogICApCi1maW5kX3Byb2dyYW0oQ01BS0VfU0ggc2guZXhlICkKLWlmKENNQUtFX1NIKQotICBtZXNzYWdlKEZBVEFMX0VSUk9SICJzaC5leGUgd2FzIGZvdW5kIGluIHlvdXIgUEFUSCwgaGVyZTpcbiR7Q01BS0VfU0h9XG5Gb3IgTWluR1cgbWFrZSB0byB3b3JrIGNvcnJlY3RseSBzaC5leGUgbXVzdCBOT1QgYmUgaW4geW91ciBwYXRoLlxuUnVuIGNtYWtlIGZyb20gYSBzaGVsbCB0aGF0IGRvZXMgbm90IGhhdmUgc2guZXhlIGluIHlvdXIgUEFUSC5cbklmIHlvdSB3YW50IHRvIHVzZSBhIFVOSVggc2hlbGwsIHRoZW4gdXNlIE1TWVMgTWFrZWZpbGVzLlxuIikKLSAgc2V0KENNQUtFX01BS0VfUFJPR1JBTSBOT1RGT1VORCkKLWVuZGlmKCkKIAotbWFya19hc19hZHZhbmNlZChDTUFLRV9NQUtFX1BST0dSQU0gQ01BS0VfU0gpCittYXJrX2FzX2FkdmFuY2VkKENNQUtFX01BS0VfUFJPR1JBTSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VOaW5qYUZpbmRNYWtlLmNtYWtlIGIvTW9kdWxlcy9DTWFrZU5pbmphRmluZE1ha2UuY21ha2UKaW5kZXggNzAyYWYxMy4uMzJmNzhkYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZU5pbmphRmluZE1ha2UuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZU5pbmphRmluZE1ha2UuY21ha2UKQEAgLTQsNSArNCw2IEBACiAKIGZpbmRfcHJvZ3JhbShDTUFLRV9NQUtFX1BST0dSQU0KICAgTkFNRVMgbmluamEtYnVpbGQgbmluamEgc2FtdQorICBOQU1FU19QRVJfRElSCiAgIERPQyAiUHJvZ3JhbSB1c2VkIHRvIGJ1aWxkIGZyb20gYnVpbGQubmluamEgZmlsZXMuIikKIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfTUFLRV9QUk9HUkFNKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZU9CSkNJbmZvcm1hdGlvbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VPQkpDSW5mb3JtYXRpb24uY21ha2UKaW5kZXggY2I2MWNiOC4uYjNkYTgyZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZU9CSkNJbmZvcm1hdGlvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlT0JKQ0luZm9ybWF0aW9uLmNtYWtlCkBAIC0xMTAsNiArMTEwLDExIEBACiAgIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfT0JKQ19TVEFOREFSRF9MSUJSQVJJRVMpCiBlbmRpZigpCiAKK2lmKE5PVCBDTUFLRV9PQkpDX0NPTVBJTEVSX0xBVU5DSEVSIEFORCBERUZJTkVEIEVOVntDTUFLRV9PQkpDX0NPTVBJTEVSX0xBVU5DSEVSfSkKKyAgc2V0KENNQUtFX09CSkNfQ09NUElMRVJfTEFVTkNIRVIgIiRFTlZ7Q01BS0VfT0JKQ19DT01QSUxFUl9MQVVOQ0hFUn0iCisgICAgQ0FDSEUgU1RSSU5HICJDb21waWxlciBsYXVuY2hlciBmb3IgT0JKQy4iKQorZW5kaWYoKQorCiBpbmNsdWRlKENNYWtlQ29tbW9uTGFuZ3VhZ2VJbmNsdWRlKQogCiAjIG5vdyBkZWZpbmUgdGhlIGZvbGxvd2luZyBydWxlIHZhcmlhYmxlcwpAQCAtMTU2LDcgKzE2MSw3IEBACiAgIHNldChDTUFLRV9PQkpDX0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFjIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfT0JKQ19BUkNISVZFX0FQUEVORCkKLSAgc2V0KENNQUtFX09CSkNfQVJDSElWRV9BUFBFTkQgIjxDTUFLRV9BUj4gcSAgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCisgIHNldChDTUFLRV9PQkpDX0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCiBlbmRpZigpCiBpZihOT1QgREVGSU5FRCBDTUFLRV9PQkpDX0FSQ0hJVkVfRklOSVNIKQogICBzZXQoQ01BS0VfT0JKQ19BUkNISVZFX0ZJTklTSCAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4iKQpAQCAtMTY1LDEyICsxNzAsMTIgQEAKICMgY29tcGlsZSBhbiBPYmplY3RpdmUtQyBmaWxlIGludG8gYW4gb2JqZWN0IGZpbGUKIGlmKE5PVCBDTUFLRV9PQkpDX0NPTVBJTEVfT0JKRUNUKQogICBzZXQoQ01BS0VfT0JKQ19DT01QSUxFX09CSkVDVAotICAgICI8Q01BS0VfT0JKQ19DT01QSUxFUj4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBvYmplY3RpdmUtYyAtbyA8T0JKRUNUPiAgIC1jIDxTT1VSQ0U+IikKKyAgICAiPENNQUtFX09CSkNfQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggb2JqZWN0aXZlLWMgLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfT0JKQ19MSU5LX0VYRUNVVEFCTEUpCiAgIHNldChDTUFLRV9PQkpDX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfT0JKQ19DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfT0JKQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPENNQUtFX09CSkNfQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX09CSkNfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIGVuZGlmKCkKIAogaWYoTk9UIENNQUtFX0VYRUNVVEFCTEVfUlVOVElNRV9PQkpDX0ZMQUcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlT0JKQ1hYSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlT0JKQ1hYSW5mb3JtYXRpb24uY21ha2UKaW5kZXggNzFhYzI2YS4uNzFiZWI3ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZU9CSkNYWEluZm9ybWF0aW9uLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VPQkpDWFhJbmZvcm1hdGlvbi5jbWFrZQpAQCAtMjAzLDYgKzIwMywxMSBAQAogICBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX09CSkNYWF9TVEFOREFSRF9MSUJSQVJJRVMpCiBlbmRpZigpCiAKK2lmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfTEFVTkNIRVIgQU5EIERFRklORUQgRU5We0NNQUtFX09CSkNYWF9DT01QSUxFUl9MQVVOQ0hFUn0pCisgIHNldChDTUFLRV9PQkpDWFhfQ09NUElMRVJfTEFVTkNIRVIgIiRFTlZ7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSX0xBVU5DSEVSfSIKKyAgICBDQUNIRSBTVFJJTkcgIkNvbXBpbGVyIGxhdW5jaGVyIGZvciBPQkpDWFguIikKK2VuZGlmKCkKKwogaW5jbHVkZShDTWFrZUNvbW1vbkxhbmd1YWdlSW5jbHVkZSkKIAogIyBub3cgZGVmaW5lIHRoZSBmb2xsb3dpbmcgcnVsZXM6CkBAIC0yNDksNyArMjU0LDcgQEAKICAgc2V0KENNQUtFX09CSkNYWF9BUkNISVZFX0NSRUFURSAiPENNQUtFX0FSPiBxYyA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKIGVuZGlmKCkKIGlmKE5PVCBERUZJTkVEIENNQUtFX09CSkNYWF9BUkNISVZFX0FQUEVORCkKLSAgc2V0KENNQUtFX09CSkNYWF9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgc2V0KENNQUtFX09CSkNYWF9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogZW5kaWYoKQogaWYoTk9UIERFRklORUQgQ01BS0VfT0JKQ1hYX0FSQ0hJVkVfRklOSVNIKQogICBzZXQoQ01BS0VfT0JKQ1hYX0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCkBAIC0yNTgsMTIgKzI2MywxMiBAQAogIyBjb21waWxlIGFuIE9iamVjdGl2ZS1DKysgZmlsZSBpbnRvIGFuIG9iamVjdCBmaWxlCiBpZihOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVfT0JKRUNUKQogICBzZXQoQ01BS0VfT0JKQ1hYX0NPTVBJTEVfT0JKRUNUCi0gICAgIjxDTUFLRV9PQkpDWFhfQ09NUElMRVI+ICA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IG9iamVjdGl2ZS1jKysgLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQorICAgICI8Q01BS0VfT0JKQ1hYX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IG9iamVjdGl2ZS1jKysgLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfT0JKQ1hYX0xJTktfRVhFQ1VUQUJMRSkKICAgc2V0KENNQUtFX09CSkNYWF9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFX09CSkNYWF9DT01QSUxFUj4gIDxGTEFHUz4gPENNQUtFX09CSkNYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPENNQUtFX09CSkNYWF9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfT0JKQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiBlbmRpZigpCiAKIG1hcmtfYXNfYWR2YW5jZWQoCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlUGFyc2VJbXBsaWNpdEluY2x1ZGVJbmZvLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVBhcnNlSW1wbGljaXRJbmNsdWRlSW5mby5jbWFrZQppbmRleCBmZjRjMzI1Li43Y2Q3NTQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlUGFyc2VJbXBsaWNpdEluY2x1ZGVJbmZvLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VQYXJzZUltcGxpY2l0SW5jbHVkZUluZm8uY21ha2UKQEAgLTcsNyArNyw3IEBACiAjIGZvciBjb21waWxlcnMgdGhhdCByZXBvcnQgdGhlbSB0aGF0IHdheS4gIG9uIHN1Y2Nlc3Mgd2UgcmV0dXJuIHRoZQogIyBsaXN0IG9mIGRpcnMgaW4gaWRfdmFyIGFuZCBzZXQgc3RhdGVfdmFyIHRvIHRoZSAnZG9uZScgc3RhdGUuCiBmdW5jdGlvbihjbWFrZV9wYXJzZV9pbXBsaWNpdF9pbmNsdWRlX2xpbmUgbGluZSBsYW5nIGlkX3ZhciBsb2dfdmFyIHN0YXRlX3ZhcikKLSAgIyBjbGVhciB2YXJpYWJsZXMgd2UgYXBwZW5kIHRvIChhdm9pZHMgcG9zc2libGUgcG9sdXRpb24gZnJvbSBwYXJlbnQgc2NvcGVzKQorICAjIGNsZWFyIHZhcmlhYmxlcyB3ZSBhcHBlbmQgdG8gKGF2b2lkcyBwb3NzaWJsZSBwb2xsdXRpb24gZnJvbSBwYXJlbnQgc2NvcGVzKQogICB1bnNldChydikKICAgc2V0KGxvZyAiIikKIApAQCAtMTYyLDcgKzE2Miw3IEBACiBmdW5jdGlvbihjbWFrZV9wYXJzZV9pbXBsaWNpdF9pbmNsdWRlX2luZm8gdGV4dCBsYW5nIGRpcl92YXIgbG9nX3ZhciBzdGF0ZV92YXIpCiAgIHNldChzdGF0ZSBzdGFydCkgICAgIyB2YWx1ZXM6IHN0YXJ0LCBsb2FkaW5nLCBkb25lCiAKLSAgIyBjbGVhciB2YXJpYWJsZXMgd2UgYXBwZW5kIHRvIChhdm9pZHMgcG9zc2libGUgcG9sdXRpb24gZnJvbSBwYXJlbnQgc2NvcGVzKQorICAjIGNsZWFyIHZhcmlhYmxlcyB3ZSBhcHBlbmQgdG8gKGF2b2lkcyBwb3NzaWJsZSBwb2xsdXRpb24gZnJvbSBwYXJlbnQgc2NvcGVzKQogICBzZXQoaW1wbGljaXRfZGlyc190bXApCiAgIHNldChsb2cgIiIpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VQbGF0Zm9ybUlkLmguaW4gYi9Nb2R1bGVzL0NNYWtlUGxhdGZvcm1JZC5oLmluCmluZGV4IDY0YTAwYjMuLjBiODFjODggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VQbGF0Zm9ybUlkLmguaW4KKysrIGIvTW9kdWxlcy9DTWFrZVBsYXRmb3JtSWQuaC5pbgpAQCAtODcsNiArODcsOSBAQAogIyBlbGlmIGRlZmluZWQoX19XSU5ET1dTX18pCiAjICBkZWZpbmUgUExBVEZPUk1fSUQgIldpbmRvd3MzeCIKIAorIyBlbGlmIGRlZmluZWQoX19WWFdPUktTX18pCisjICBkZWZpbmUgUExBVEZPUk1fSUQgIlZ4V29ya3MiCisKICMgZWxzZSAvKiB1bmtub3duIHBsYXRmb3JtICovCiAjICBkZWZpbmUgUExBVEZPUk1fSUQKICMgZW5kaWYKQEAgLTIwMyw2ICsyMDYsMjQgQEAKICMgZWxzZSAvKiB1bmtub3duIGFyY2hpdGVjdHVyZSAqLwogIyAgZGVmaW5lIEFSQ0hJVEVDVFVSRV9JRCAiIgogIyBlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fVElfQ09NUElMRVJfVkVSU0lPTl9fKQorIyBpZiBkZWZpbmVkKF9fVElfQVJNX18pCisjICBkZWZpbmUgQVJDSElURUNUVVJFX0lEICJBUk0iCisKKyMgZWxpZiBkZWZpbmVkKF9fTVNQNDMwX18pCisjICBkZWZpbmUgQVJDSElURUNUVVJFX0lEICJNU1A0MzAiCisKKyMgZWxpZiBkZWZpbmVkKF9fVE1TMzIwQzI4WFhfXykKKyMgIGRlZmluZSBBUkNISVRFQ1RVUkVfSUQgIlRNUzMyMEMyOHgiCisKKyMgZWxpZiBkZWZpbmVkKF9fVE1TMzIwQzZYX18pIHx8IGRlZmluZWQoX1RNUzMyMEM2WCkKKyMgIGRlZmluZSBBUkNISVRFQ1RVUkVfSUQgIlRNUzMyMEM2eCIKKworIyBlbHNlIC8qIHVua25vd24gYXJjaGl0ZWN0dXJlICovCisjICBkZWZpbmUgQVJDSElURUNUVVJFX0lEICIiCisjIGVuZGlmCisKICNlbHNlCiAjICBkZWZpbmUgQVJDSElURUNUVVJFX0lECiAjZW5kaWYKQEAgLTI4MCw0ICszMDEsMyBAQAogICAgYXJyYXkgcmF0aGVyIHRoYW4gYXNzaWduaW5nIGEgcG9pbnRlciB0byBhIHN0YXRpYyBhcnJheS4gICovCiBjaGFyIGNvbnN0KiBpbmZvX3BsYXRmb3JtID0gIklORk8iICI6IiAicGxhdGZvcm1bIiBQTEFURk9STV9JRCAiXSI7CiBjaGFyIGNvbnN0KiBpbmZvX2FyY2ggPSAiSU5GTyIgIjoiICJhcmNoWyIgQVJDSElURUNUVVJFX0lEICJdIjsKLQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVByaW50U3lzdGVtSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlUHJpbnRTeXN0ZW1JbmZvcm1hdGlvbi5jbWFrZQppbmRleCBmODczYTRkLi5kNDRlOTMzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlUHJpbnRTeXN0ZW1JbmZvcm1hdGlvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlUHJpbnRTeXN0ZW1JbmZvcm1hdGlvbi5jbWFrZQpAQCAtNSwxMyArNSwxMyBAQAogQ01ha2VQcmludFN5c3RlbUluZm9ybWF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotcHJpbnQgc3lzdGVtIGluZm9ybWF0aW9uCitQcmludCBzeXN0ZW0gaW5mb3JtYXRpb24uCiAKLVRoaXMgZmlsZSBjYW4gYmUgdXNlZCBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBqdXN0IGluY2x1ZGUgaXQgaW4gYQorVGhpcyBtb2R1bGUgc2VydmVzIGRpYWdub3N0aWMgcHVycG9zZXMuIEp1c3QgaW5jbHVkZSBpdCBpbiBhCiBwcm9qZWN0IHRvIHNlZSB2YXJpb3VzIGludGVybmFsIENNYWtlIHZhcmlhYmxlcy4KICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKLW1lc3NhZ2UoIkNNQUtFX1NZU1RFTSBpcyAke0NNQUtFX1NZU1RFTX0gJHtDTUFLRV9TWVNURU1fTkFNRX0gJHtDTUFLRV9TWVNURU1fVkVSU0lPTn0iKQorbWVzc2FnZSgiQ01BS0VfU1lTVEVNIGlzICR7Q01BS0VfU1lTVEVNfSAke0NNQUtFX1NZU1RFTV9OQU1FfSAke0NNQUtFX1NZU1RFTV9WRVJTSU9OfSAke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9IikKIG1lc3NhZ2UoIkNNQUtFX1NZU1RFTSBmaWxlIGlzICR7Q01BS0VfU1lTVEVNX0lORk9fRklMRX0iKQogbWVzc2FnZSgiQ01BS0VfQ19DT01QSUxFUiBpcyAke0NNQUtFX0NfQ09NUElMRVJ9IikKIG1lc3NhZ2UoIkNNQUtFX0NYWF9DT01QSUxFUiBpcyAke0NNQUtFX0NYWF9DT01QSUxFUn0iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVJDSW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlUkNJbmZvcm1hdGlvbi5jbWFrZQppbmRleCA3YzNhNWFiLi5iNjM0Nzk2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlUkNJbmZvcm1hdGlvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlUkNJbmZvcm1hdGlvbi5jbWFrZQpAQCAtMzksNyArMzksNyBAQAogCiAjIG5vdyBkZWZpbmUgdGhlIGZvbGxvd2luZyBydWxlIHZhcmlhYmxlcwogIyBDTUFLRV9SQ19DT01QSUxFX09CSkVDVAotc2V0KENNQUtFX0lOQ0xVREVfRkxBR19SQyAiLUkiKQorc2V0KENNQUtFX0lOQ0xVREVfRkxBR19SQyAiLUkgIikKICMgY29tcGlsZSBhIFJlc291cmNlIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQogaWYoTk9UIENNQUtFX1JDX0NPTVBJTEVfT0JKRUNUKQogICBzZXQoQ01BS0VfUkNfQ09NUElMRV9PQkpFQ1QKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VTd2lmdENvbXBpbGVyLmNtYWtlLmluIGIvTW9kdWxlcy9DTWFrZVN3aWZ0Q29tcGlsZXIuY21ha2UuaW4KaW5kZXggN2M4ZDFjMS4uNDdhZGEzOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVN3aWZ0Q29tcGlsZXIuY21ha2UuaW4KKysrIGIvTW9kdWxlcy9DTWFrZVN3aWZ0Q29tcGlsZXIuY21ha2UuaW4KQEAgLTEyLDMgKzEyLDUgQEAKIAogc2V0KENNQUtFX1N3aWZ0X0NPTVBJTEVSX0lEX1JVTiAxKQogc2V0KENNQUtFX1N3aWZ0X1NPVVJDRV9GSUxFX0VYVEVOU0lPTlMgc3dpZnQpCisKK3NldChDTUFLRV9Td2lmdF9JTVBMSUNJVF9JTkNMVURFX0RJUkVDVE9SSUVTICJAQ01BS0VfU3dpZnRfSU1QTElDSVRfSU5DTFVERV9ESVJFQ1RPUklFU0AiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVN3aWZ0SW5mb3JtYXRpb24uY21ha2UgYi9Nb2R1bGVzL0NNYWtlU3dpZnRJbmZvcm1hdGlvbi5jbWFrZQppbmRleCAyYzU0ZGEwLi44ZjA5MDljIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlU3dpZnRJbmZvcm1hdGlvbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlU3dpZnRJbmZvcm1hdGlvbi5jbWFrZQpAQCAtMTcsNiArMTcsOCBAQAogICBpbmNsdWRlKFBsYXRmb3JtLyR7Q01BS0VfRUZGRUNUSVZFX1NZU1RFTV9OQU1FfS0ke0NNQUtFX1N3aWZ0X0NPTVBJTEVSX0lEfS1Td2lmdCBPUFRJT05BTCkKIGVuZGlmKCkKIAorc2V0KENNQUtFX0VYRV9FWFBPUlRTX1N3aWZ0X0ZMQUcgIi1lbWl0LW1vZHVsZSAtZW1pdC1tb2R1bGUtcGF0aCA8U1dJRlRfTU9EVUxFPiAke0NNQUtFX1N3aWZ0X0lNUExJQl9MSU5LRVJfRkxBR1N9IikKKwogc2V0KENNQUtFX0lOQ0xVREVfRkxBR19Td2lmdCAiLUkgIikKIGlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMIERhcndpbikKICAgc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1NPTkFNRV9Td2lmdF9GTEFHICItWGxpbmtlciAtaW5zdGFsbF9uYW1lIC1YbGlua2VyICIpCkBAIC0yNSw4ICsyNywxNSBAQAogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgV2luZG93cykKKyAgc2V0KENNQUtFX0VYRUNVVEFCTEVfUlVOVElNRV9Td2lmdF9GTEFHICItWGxpbmtlciAtcnBhdGggLVhsaW5rZXIgIikKICAgc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfU3dpZnRfRkxBRyAiLVhsaW5rZXIgLXJwYXRoIC1YbGlua2VyICIpCi0gIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9SVU5USU1FX1N3aWZ0X0ZMQUdfU0VQICI6IikKKyAgaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgRGFyd2luKQorICAgIHNldChDTUFLRV9FWEVDVVRBQkxFX1JVTlRJTUVfU3dpZnRfRkxBR19TRVAgIiIpCisgICAgc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfU3dpZnRfRkxBR19TRVAgIiIpCisgIGVsc2UoKQorICAgIHNldChDTUFLRV9FWEVDVVRBQkxFX1JVTlRJTUVfU3dpZnRfRkxBR19TRVAgIjoiKQorICAgIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9SVU5USU1FX1N3aWZ0X0ZMQUdfU0VQICI6IikKKyAgZW5kaWYoKQogZW5kaWYoKQogCiBzZXQoQ01BS0VfU3dpZnRfQ09NUElMRV9PUFRJT05TX1RBUkdFVCAiLXRhcmdldCAiKQpAQCAtNzIsMTAgKzgxLDYgQEAKICAgY21ha2VfaG9zdF9zeXN0ZW1faW5mb3JtYXRpb24oUkVTVUxUIENNQUtFX1N3aWZ0X05VTV9USFJFQURTIFFVRVJZIE5VTUJFUl9PRl9MT0dJQ0FMX0NPUkVTKQogZW5kaWYoKQogCi1pZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCBXaW5kb3dzKQotICBzZXQoQ01BS0VfU3dpZnRfSU1QTElCX0xJTktFUl9GTEFHUyAiLVhsaW5rZXIgLWltcGxpYjo8VEFSR0VUX0lNUExJQj4iKQotZW5kaWYoKQotCiBpZihOT1QgQ01BS0VfU3dpZnRfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZKQogICBzZXQoQ01BS0VfU3dpZnRfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZICI8Q01BS0VfU3dpZnRfQ09NUElMRVI+IC1vdXRwdXQtZmlsZS1tYXAgPFNXSUZUX09VVFBVVF9GSUxFX01BUD4gLWluY3JlbWVudGFsIC1qICR7Q01BS0VfU3dpZnRfTlVNX1RIUkVBRFN9IC1lbWl0LWxpYnJhcnkgLW8gPFRBUkdFVD4gLW1vZHVsZS1uYW1lIDxTV0lGVF9NT0RVTEVfTkFNRT4gLW1vZHVsZS1saW5rLW5hbWUgPFNXSUZUX0xJQlJBUllfTkFNRT4gLWVtaXQtbW9kdWxlIC1lbWl0LW1vZHVsZS1wYXRoIDxTV0lGVF9NT0RVTEU+IC1lbWl0LWRlcGVuZGVuY2llcyA8REVGSU5FUz4gPEZMQUdTPiA8SU5DTFVERVM+IDxTV0lGVF9TT1VSQ0VTPiA8TElOS19GTEFHUz4gPFNPTkFNRV9GTEFHPiA8VEFSR0VUX0lOU1RBTExOQU1FX0RJUj48VEFSR0VUX1NPTkFNRT4gJHtDTUFLRV9Td2lmdF9JTVBMSUJfTElOS0VSX0ZMQUdTfSA8TElOS19MSUJSQVJJRVM+IikKIGVuZGlmKCkKQEAgLTg1LDcgKzkwLDcgQEAKIGVuZGlmKCkKIAogaWYoTk9UIENNQUtFX1N3aWZ0X0xJTktfRVhFQ1VUQUJMRSkKLSAgc2V0KENNQUtFX1N3aWZ0X0xJTktfRVhFQ1VUQUJMRSAiPENNQUtFX1N3aWZ0X0NPTVBJTEVSPiAtb3V0cHV0LWZpbGUtbWFwIDxTV0lGVF9PVVRQVVRfRklMRV9NQVA+IC1pbmNyZW1lbnRhbCAtaiAke0NNQUtFX1N3aWZ0X05VTV9USFJFQURTfSAtZW1pdC1leGVjdXRhYmxlIC1vIDxUQVJHRVQ+IC1lbWl0LW1vZHVsZSAtZW1pdC1tb2R1bGUtcGF0aCA8U1dJRlRfTU9EVUxFPiAtZW1pdC1kZXBlbmRlbmNpZXMgPERFRklORVM+IDxGTEFHUz4gPElOQ0xVREVTPiA8U1dJRlRfU09VUkNFUz4gPExJTktfRkxBR1M+ICR7Q01BS0VfU3dpZnRfSU1QTElCX0xJTktFUl9GTEFHU30gPExJTktfTElCUkFSSUVTPiIpCisgIHNldChDTUFLRV9Td2lmdF9MSU5LX0VYRUNVVEFCTEUgIjxDTUFLRV9Td2lmdF9DT01QSUxFUj4gLW91dHB1dC1maWxlLW1hcCA8U1dJRlRfT1VUUFVUX0ZJTEVfTUFQPiAtaW5jcmVtZW50YWwgLWogJHtDTUFLRV9Td2lmdF9OVU1fVEhSRUFEU30gLWVtaXQtZXhlY3V0YWJsZSAtbyA8VEFSR0VUPiAtZW1pdC1kZXBlbmRlbmNpZXMgPERFRklORVM+IDxGTEFHUz4gPElOQ0xVREVTPiA8U1dJRlRfU09VUkNFUz4gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kaWYoKQogCiBpZihOT1QgQ01BS0VfU3dpZnRfQ1JFQVRFX1NUQVRJQ19MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVRlc3RDQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlVGVzdENDb21waWxlci5jbWFrZQppbmRleCA3YmY2ZmRlLi4wM2YyZGIyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlVGVzdENDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlVGVzdENDb21waWxlci5jbWFrZQpAQCAtMTEsNyArMTEsNyBAQAogCiBpbmNsdWRlKENNYWtlVGVzdENvbXBpbGVyQ29tbW9uKQogCi0jIHdvcmsgYXJvdW5kIGVuZm9yY2VkIGNvZGUgc2lnbmluZyBhbmQgLyBvciBtaXNzaW5nIGV4ZWN0dWFibGUgdGFyZ2V0IHR5cGUKKyMgd29yayBhcm91bmQgZW5mb3JjZWQgY29kZSBzaWduaW5nIGFuZCAvIG9yIG1pc3NpbmcgZXhlY3V0YWJsZSB0YXJnZXQgdHlwZQogc2V0KF9fQ01BS0VfU0FWRURfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUgJHtDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRX0pCiBpZihfQ01BS0VfRkVBVFVSRV9ERVRFQ1RJT05fVEFSR0VUX1RZUEUpCiAgIHNldChDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRSAke19DTUFLRV9GRUFUVVJFX0RFVEVDVElPTl9UQVJHRVRfVFlQRX0pCkBAIC0yMSwxMyArMjEsMjIgQEAKICMgV2Ugbm93IHN0b3JlIHRoaXMgaW4gQ01ha2VDQ29tcGlsZXIuY21ha2UuCiB1bnNldChDTUFLRV9DX0NPTVBJTEVSX1dPUktTIENBQ0hFKQogCisjIFRyeSB0byBpZGVudGlmeSB0aGUgQUJJIGFuZCBjb25maWd1cmUgaXQgaW50byBDTWFrZUNDb21waWxlci5jbWFrZQoraW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoQyAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDQ29tcGlsZXJBQkkuYykKK2lmKENNQUtFX0NfQUJJX0NPTVBJTEVEKQorICAjIFRoZSBjb21waWxlciB3b3JrZWQgc28gc2tpcCBkZWRpY2F0ZWQgdGVzdCBiZWxvdy4KKyAgc2V0KENNQUtFX0NfQ09NUElMRVJfV09SS1MgVFJVRSkKKyAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciB3b3JraW5nIEMgY29tcGlsZXI6ICR7Q01BS0VfQ19DT01QSUxFUn0gLSBza2lwcGVkIikKK2VuZGlmKCkKKwogIyBUaGlzIGZpbGUgaXMgdXNlZCBieSBFbmFibGVMYW5ndWFnZSBpbiBjbUdsb2JhbEdlbmVyYXRvciB0bwogIyBkZXRlcm1pbmUgdGhhdCB0aGF0IHNlbGVjdGVkIEMgY29tcGlsZXIgY2FuIGFjdHVhbGx5IGNvbXBpbGUKICMgYW5kIGxpbmsgdGhlIG1vc3QgYmFzaWMgb2YgcHJvZ3JhbXMuICAgSWYgbm90LCBhIGZhdGFsIGVycm9yCiAjIGlzIHNldCBhbmQgY21ha2Ugc3RvcHMgcHJvY2Vzc2luZyBjb21tYW5kcyBhbmQgd2lsbCBub3QgZ2VuZXJhdGUKICMgYW55IG1ha2VmaWxlcyBvciBwcm9qZWN0cy4KIGlmKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQyIgIiIpCisgIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDIikKICAgX19UZXN0Q29tcGlsZXJfc2V0VHJ5Q29tcGlsZVRhcmdldFR5cGUoKQogICBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdENDb21waWxlci5jCiAgICAgIiNpZmRlZiBfX2NwbHVzcGx1c1xuIgpAQCAtNDcsNDkgKzU2LDQxIEBACiAgICMgTW92ZSByZXN1bHQgZnJvbSBjYWNoZSB0byBub3JtYWwgdmFyaWFibGUuCiAgIHNldChDTUFLRV9DX0NPTVBJTEVSX1dPUktTICR7Q01BS0VfQ19DT01QSUxFUl9XT1JLU30pCiAgIHVuc2V0KENNQUtFX0NfQ09NUElMRVJfV09SS1MgQ0FDSEUpCi0gIHNldChDX1RFU1RfV0FTX1JVTiAxKQogICBfX1Rlc3RDb21waWxlcl9yZXN0b3JlVHJ5Q29tcGlsZVRhcmdldFR5cGUoKQorICBpZihOT1QgQ01BS0VfQ19DT01QSUxFUl9XT1JLUykKKyAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19GQUlMICJicm9rZW4iKQorICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKKyAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQyBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCisgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ19DT01QSUxFUl9PVVRQVVR9XG5cbiIpCisgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgX291dHB1dCAiJHtfX0NNQUtFX0NfQ09NUElMRVJfT1VUUFVUfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIEMgY29tcGlsZXJcbiAgXCIke0NNQUtFX0NfQ09NUElMRVJ9XCJcbiIKKyAgICAgICJpcyBub3QgYWJsZSB0byBjb21waWxlIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbS5cbkl0IGZhaWxzICIKKyAgICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKKyAgICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKKyAgZW5kaWYoKQorICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19QQVNTICJ3b3JrcyIpCisgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCisgICAgIkRldGVybWluaW5nIGlmIHRoZSBDIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKKyAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ19DT01QSUxFUl9PVVRQVVR9XG5cbiIpCiBlbmRpZigpCiAKLWlmKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQyIgIiAtLSBicm9rZW4iKQotICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCi0gICAgIkRldGVybWluaW5nIGlmIHRoZSBDIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKLSAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ19DT01QSUxFUl9PVVRQVVR9XG5cbiIpCi0gIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIF9vdXRwdXQgIiR7X19DTUFLRV9DX0NPTVBJTEVSX09VVFBVVH0iKQotICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgQyBjb21waWxlclxuICBcIiR7Q01BS0VfQ19DT01QSUxFUn1cIlxuIgotICAgICJpcyBub3QgYWJsZSB0byBjb21waWxlIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbS5cbkl0IGZhaWxzICIKLSAgICAid2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiAgJHtfb3V0cHV0fVxuXG4iCi0gICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQotZWxzZSgpCi0gIGlmKENfVEVTVF9XQVNfUlVOKQotICAgIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDIiAiIC0tIHdvcmtzIikKLSAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwotICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBDIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKLSAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DX0NPTVBJTEVSX09VVFBVVH1cblxuIikKLSAgZW5kaWYoKQorIyBUcnkgdG8gaWRlbnRpZnkgdGhlIGNvbXBpbGVyIGZlYXR1cmVzCitpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVGZWF0dXJlcy5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFX0ZFQVRVUkVTKEMpCiAKLSAgIyBUcnkgdG8gaWRlbnRpZnkgdGhlIEFCSSBhbmQgY29uZmlndXJlIGl0IGludG8gQ01ha2VDQ29tcGlsZXIuY21ha2UKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0FCSShDICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNDb21waWxlckFCSS5jKQotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UpCi0gIENNQUtFX0RFVEVSTUlORV9DT01QSUxFX0ZFQVRVUkVTKEMpCisjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCitjb25maWd1cmVfZmlsZSgKKyAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlQ0NvbXBpbGVyLmNtYWtlLmluCisgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlQ0NvbXBpbGVyLmNtYWtlCisgIEBPTkxZCisgICkKK2luY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDQ29tcGlsZXIuY21ha2UpCiAKLSAgIyBSZS1jb25maWd1cmUgdG8gc2F2ZSBsZWFybmVkIGluZm9ybWF0aW9uLgotICBjb25maWd1cmVfZmlsZSgKLSAgICAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDQ29tcGlsZXIuY21ha2UuaW4KLSAgICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUNDb21waWxlci5jbWFrZQotICAgIEBPTkxZCi0gICAgKQotICBpbmNsdWRlKCR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlQ0NvbXBpbGVyLmNtYWtlKQotCi0gIGlmKENNQUtFX0NfU0laRU9GX0RBVEFfUFRSKQotICAgIGZvcmVhY2goZiAke0NNQUtFX0NfQUJJX0ZJTEVTfSkKLSAgICAgIGluY2x1ZGUoJHtmfSkKLSAgICBlbmRmb3JlYWNoKCkKLSAgICB1bnNldChDTUFLRV9DX0FCSV9GSUxFUykKLSAgZW5kaWYoKQoraWYoQ01BS0VfQ19TSVpFT0ZfREFUQV9QVFIpCisgIGZvcmVhY2goZiAke0NNQUtFX0NfQUJJX0ZJTEVTfSkKKyAgICBpbmNsdWRlKCR7Zn0pCisgIGVuZGZvcmVhY2goKQorICB1bnNldChDTUFLRV9DX0FCSV9GSUxFUykKIGVuZGlmKCkKIAogc2V0KENNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFICR7X19DTUFLRV9TQVZFRF9UUllfQ09NUElMRV9UQVJHRVRfVFlQRX0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlVGVzdENTaGFycENvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVRlc3RDU2hhcnBDb21waWxlci5jbWFrZQppbmRleCA2NzE1YzMwLi4xMTE5YTQ1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlVGVzdENTaGFycENvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VUZXN0Q1NoYXJwQ29tcGlsZXIuY21ha2UKQEAgLTIwLDcgKzIwLDkgQEAKICMgaXMgc2V0IGFuZCBjbWFrZSBzdG9wcyBwcm9jZXNzaW5nIGNvbW1hbmRzIGFuZCB3aWxsIG5vdCBnZW5lcmF0ZQogIyBhbnkgbWFrZWZpbGVzIG9yIHByb2plY3RzLgogaWYoTk9UIENNQUtFX0NTaGFycF9DT01QSUxFUl9XT1JLUykKLSAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIkMjIiAiJHtDTUFLRV9DU2hhcnBfQ09NUElMRVJ9IikKKyAgIyBEb24ndCBjYWxsIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCkgYmVjYXVzZSB0aGUgIkMjIiB3ZSB3YW50IHRvIHBhc3MKKyAgIyBhcyB0aGUgTEFORyBkb2Vzbid0IG1hdGNoIHdpdGggdGhlIHZhcmlhYmxlIG5hbWUgIkNNQUtFX0NTaGFycF9DT01QSUxFUiIKKyAgbWVzc2FnZShDSEVDS19TVEFSVCAiQ2hlY2sgZm9yIHdvcmtpbmcgQyMgY29tcGlsZXI6ICR7Q01BS0VfQ1NoYXJwX0NPTVBJTEVSfSIpCiAgIGZpbGUoV1JJVEUgIiR7dGVzdF9jb21waWxlX2ZpbGV9IgogICAgICJuYW1lc3BhY2UgVGVzdCB7IgogICAgICIgICBwdWJsaWMgY2xhc3MgQ1NoYXJwIHsiCkBAIC0zOCw3ICs0MCw3IEBACiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9DU2hhcnBfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDIyIgIiR7Q01BS0VfQ1NoYXJwX0NPTVBJTEVSfSAtLSBicm9rZW4iKQorICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19GQUlMICJicm9rZW4iKQogICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgIkRldGVybWluaW5nIGlmIHRoZSBDIyBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCiAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NTaGFycF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCkBAIC00OSw3ICs1MSw3IEBACiAgICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQogZWxzZSgpCiAgIGlmKENTaGFycF9URVNUX1dBU19SVU4pCi0gICAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIkMjIiAiJHtDTUFLRV9DU2hhcnBfQ09NUElMRVJ9IC0tIHdvcmtzIikKKyAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19QQVNTICJ3b3JrcyIpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQyMgY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgogICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NTaGFycF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlVGVzdENVREFDb21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VUZXN0Q1VEQUNvbXBpbGVyLmNtYWtlCmluZGV4IGYwNDU0ZGEuLmExODk0N2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VUZXN0Q1VEQUNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VUZXN0Q1VEQUNvbXBpbGVyLmNtYWtlCkBAIC0xNCwxMyArMTQsMjIgQEAKICMgV2Ugbm93IHN0b3JlIHRoaXMgaW4gQ01ha2VDVURBQ29tcGlsZXIuY21ha2UuCiB1bnNldChDTUFLRV9DVURBX0NPTVBJTEVSX1dPUktTIENBQ0hFKQogCisjIFRyeSB0byBpZGVudGlmeSB0aGUgQUJJIGFuZCBjb25maWd1cmUgaXQgaW50byBDTWFrZUNVREFDb21waWxlci5jbWFrZQoraW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoQ1VEQSAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXJBQkkuY3UpCitpZihDTUFLRV9DVURBX0FCSV9DT01QSUxFRCkKKyAgIyBUaGUgY29tcGlsZXIgd29ya2VkIHNvIHNraXAgZGVkaWNhdGVkIHRlc3QgYmVsb3cuCisgIHNldChDTUFLRV9DVURBX0NPTVBJTEVSX1dPUktTIFRSVUUpCisgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3Igd29ya2luZyBDVURBIGNvbXBpbGVyOiAke0NNQUtFX0NVREFfQ09NUElMRVJ9IC0gc2tpcHBlZCIpCitlbmRpZigpCisKICMgVGhpcyBmaWxlIGlzIHVzZWQgYnkgRW5hYmxlTGFuZ3VhZ2UgaW4gY21HbG9iYWxHZW5lcmF0b3IgdG8KICMgZGV0ZXJtaW5lIHRoYXQgdGhlIHNlbGVjdGVkIGN1ZGEgY29tcGlsZXIgY2FuIGFjdHVhbGx5IGNvbXBpbGUKICMgYW5kIGxpbmsgdGhlIG1vc3QgYmFzaWMgb2YgcHJvZ3JhbXMuICAgSWYgbm90LCBhIGZhdGFsIGVycm9yCiAjIGlzIHNldCBhbmQgY21ha2Ugc3RvcHMgcHJvY2Vzc2luZyBjb21tYW5kcyBhbmQgd2lsbCBub3QgZ2VuZXJhdGUKICMgYW55IG1ha2VmaWxlcyBvciBwcm9qZWN0cy4KIGlmKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQ1VEQSIgIiIpCisgIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDVURBIikKICAgZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL21haW4uY3UKICAgICAiI2lmbmRlZiBfX0NVREFDQ19fXG4iCiAgICAgIiMgZXJyb3IgXCJUaGUgQ01BS0VfQ1VEQV9DT01QSUxFUiBpcyBzZXQgdG8gYW4gaW52YWxpZCBDVURBIGNvbXBpbGVyXCJcbiIKQEAgLTM0LDQ0ICs0Myw1NiBAQAogICAjIE1vdmUgcmVzdWx0IGZyb20gY2FjaGUgdG8gbm9ybWFsIHZhcmlhYmxlLgogICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9XT1JLUyAke0NNQUtFX0NVREFfQ09NUElMRVJfV09SS1N9KQogICB1bnNldChDTUFLRV9DVURBX0NPTVBJTEVSX1dPUktTIENBQ0hFKQotICBzZXQoQ1VEQV9URVNUX1dBU19SVU4gMSkKLWVuZGlmKCkKLQotaWYoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDVURBIiAiIC0tIGJyb2tlbiIpCi0gIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKLSAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENVREEgY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgotICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9DVURBX0NPTVBJTEVSX09VVFBVVH1cblxuIikKLSAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgX291dHB1dCAiJHtfX0NNQUtFX0NVREFfQ09NUElMRVJfT1VUUFVUfSIpCi0gIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlRoZSBDVURBIGNvbXBpbGVyXG4gIFwiJHtDTUFLRV9DVURBX0NPTVBJTEVSfVwiXG4iCi0gICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgotICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKLSAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCi1lbHNlKCkKLSAgaWYoQ1VEQV9URVNUX1dBU19SVU4pCi0gICAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIkNVREEiICIgLS0gd29ya3MiKQotICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCi0gICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENVREEgY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgorICBpZihOT1QgQ01BS0VfQ1VEQV9DT01QSUxFUl9XT1JLUykKKyAgICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19GQUlMICJicm9rZW4iKQorICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKKyAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1VEQSBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCiAgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ1VEQV9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCisgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgX291dHB1dCAiJHtfX0NNQUtFX0NVREFfQ09NUElMRVJfT1VUUFVUfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIENVREEgY29tcGlsZXJcbiAgXCIke0NNQUtFX0NVREFfQ09NUElMRVJ9XCJcbiIKKyAgICAgICJpcyBub3QgYWJsZSB0byBjb21waWxlIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbS5cbkl0IGZhaWxzICIKKyAgICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKKyAgICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKICAgZW5kaWYoKQotCi0gICMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBBQkkgYW5kIGNvbmZpZ3VyZSBpdCBpbnRvIENNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlCi0gIGluY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UpCi0gIENNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoQ1VEQSAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDVURBQ29tcGlsZXJBQkkuY3UpCi0KLSAgaWYoIngke0NNQUtFX0NVREFfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQotICAgIHNldChDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTICIke0NNQUtFX0NVREFfSE9TVF9JTVBMSUNJVF9MSU5LX0xJQlJBUklFU30iKQotICAgIHNldChDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVMgIiR7Q01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9IikKLSAgZW5kaWYoKQotCi0gICMgUmUtY29uZmlndXJlIHRvIHNhdmUgbGVhcm5lZCBpbmZvcm1hdGlvbi4KLSAgY29uZmlndXJlX2ZpbGUoCi0gICAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlLmluCi0gICAgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDVURBQ29tcGlsZXIuY21ha2UKLSAgICBAT05MWQotICAgICkKLSAgaW5jbHVkZSgke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUNVREFDb21waWxlci5jbWFrZSkKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQorICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1VEQSBjb21waWxlciB3b3JrcyBwYXNzZWQgd2l0aCAiCisgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NVREFfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQogZW5kaWYoKQogCisjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZUZlYXR1cmVzLmNtYWtlKQorQ01BS0VfREVURVJNSU5FX0NPTVBJTEVfRkVBVFVSRVMoQ1VEQSkKKworaWYoIngke0NNQUtFX0NVREFfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQorICBzZXQoQ01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0xJQlJBUklFUyAiJHtDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19MSUJSQVJJRVN9IikKKyAgc2V0KENNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFUyAiJHtDTUFLRV9DVURBX0hPU1RfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30iKQorZW5kaWYoKQorCisjIEZpbHRlciBvdXQgaW1wbGljaXQgbGluayBsaWJyYXJpZXMgdGhhdCBzaG91bGQgbm90IGJlIHBhc3NlZCB1bmNvbmRpdGlvbmFsbHkuCisjIFNlZSBDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTX0VYQ0xVREUgaW4gQ01ha2VEZXRlcm1pbmVDVURBQ29tcGlsZXIuCitsaXN0KFJFTU9WRV9JVEVNIENNQUtFX0NVREFfSU1QTElDSVRfTElOS19MSUJSQVJJRVMgJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTX0VYQ0xVREV9KQorCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICAjIFJlbW92ZSB0aGUgQ1VEQSBUb29sa2l0IGluY2x1ZGUgZGlyZWN0b3JpZXMgZnJvbSB0aGUgc2V0IG9mCisgICMgaW1wbGljaXQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMuCisgICMgVGhpcyByZXNvbHZlcyB0aGUgaXNzdWUgdGhhdCBOVkNDIGRvZXNuJ3Qgc3BlY2lmeSB0aGVzZQorICAjIGluY2x1ZGVzIGFzIFNZU1RFTSBpbmNsdWRlcyB3aGVuIGNvbXBpbGluZyBkZXZpY2UgY29kZSwgYW5kIHNvbWV0aW1lcworICAjIHRoZXkgY29udGFpbiBoZWFkZXJzIHRoYXQgZ2VuZXJhdGUgd2FybmluZ3MsIHNvIGxldCB1c2VycyBtYXJrIHRoZW0KKyAgIyBhcyBTWVNURU0gZXhwbGljaXRseQorICBpZihDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUykKKyAgICBsaXN0KFJFTU9WRV9JVEVNIENNQUtFX0NVREFfSU1QTElDSVRfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgJHtDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFU30KKyAgICAgICkKKyAgZW5kaWYoKQorZW5kaWYoKQorCisjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCitjb25maWd1cmVfZmlsZSgKKyAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlLmluCisgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlQ1VEQUNvbXBpbGVyLmNtYWtlCisgIEBPTkxZCisgICkKK2luY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDVURBQ29tcGlsZXIuY21ha2UpCiAKIHVuc2V0KF9fQ01BS0VfQ1VEQV9DT01QSUxFUl9PVVRQVVQpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlVGVzdENYWENvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVRlc3RDWFhDb21waWxlci5jbWFrZQppbmRleCA3ZTU5NWI3Li4wZDJkMGIwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NNYWtlVGVzdENYWENvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VUZXN0Q1hYQ29tcGlsZXIuY21ha2UKQEAgLTExLDcgKzExLDcgQEAKIAogaW5jbHVkZShDTWFrZVRlc3RDb21waWxlckNvbW1vbikKIAotIyB3b3JrIGFyb3VuZCBlbmZvcmNlZCBjb2RlIHNpZ25pbmcgYW5kIC8gb3IgbWlzc2luZyBleGVjdHVhYmxlIHRhcmdldCB0eXBlCisjIHdvcmsgYXJvdW5kIGVuZm9yY2VkIGNvZGUgc2lnbmluZyBhbmQgLyBvciBtaXNzaW5nIGV4ZWN1dGFibGUgdGFyZ2V0IHR5cGUKIHNldChfX0NNQUtFX1NBVkVEX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFICR7Q01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEV9KQogaWYoX0NNQUtFX0ZFQVRVUkVfREVURUNUSU9OX1RBUkdFVF9UWVBFKQogICBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUgJHtfQ01BS0VfRkVBVFVSRV9ERVRFQ1RJT05fVEFSR0VUX1RZUEV9KQpAQCAtMjEsMTMgKzIxLDIyIEBACiAjIFdlIG5vdyBzdG9yZSB0aGlzIGluIENNYWtlQ1hYQ29tcGlsZXIuY21ha2UuCiB1bnNldChDTUFLRV9DWFhfQ09NUElMRVJfV09SS1MgQ0FDSEUpCiAKKyMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBBQkkgYW5kIGNvbmZpZ3VyZSBpdCBpbnRvIENNYWtlQ1hYQ29tcGlsZXIuY21ha2UKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UpCitDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfQUJJKENYWCAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDWFhDb21waWxlckFCSS5jcHApCitpZihDTUFLRV9DWFhfQUJJX0NPTVBJTEVEKQorICAjIFRoZSBjb21waWxlciB3b3JrZWQgc28gc2tpcCBkZWRpY2F0ZWQgdGVzdCBiZWxvdy4KKyAgc2V0KENNQUtFX0NYWF9DT01QSUxFUl9XT1JLUyBUUlVFKQorICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgZm9yIHdvcmtpbmcgQ1hYIGNvbXBpbGVyOiAke0NNQUtFX0NYWF9DT01QSUxFUn0gLSBza2lwcGVkIikKK2VuZGlmKCkKKwogIyBUaGlzIGZpbGUgaXMgdXNlZCBieSBFbmFibGVMYW5ndWFnZSBpbiBjbUdsb2JhbEdlbmVyYXRvciB0bwogIyBkZXRlcm1pbmUgdGhhdCB0aGUgc2VsZWN0ZWQgQysrIGNvbXBpbGVyIGNhbiBhY3R1YWxseSBjb21waWxlCiAjIGFuZCBsaW5rIHRoZSBtb3N0IGJhc2ljIG9mIHByb2dyYW1zLiAgIElmIG5vdCwgYSBmYXRhbCBlcnJvcgogIyBpcyBzZXQgYW5kIGNtYWtlIHN0b3BzIHByb2Nlc3NpbmcgY29tbWFuZHMgYW5kIHdpbGwgbm90IGdlbmVyYXRlCiAjIGFueSBtYWtlZmlsZXMgb3IgcHJvamVjdHMuCiBpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQ1hYIiAiIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIkNYWCIpCiAgIF9fVGVzdENvbXBpbGVyX3NldFRyeUNvbXBpbGVUYXJnZXRUeXBlKCkKICAgZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3Rlc3RDWFhDb21waWxlci5jeHgKICAgICAiI2lmbmRlZiBfX2NwbHVzcGx1c1xuIgpAQCAtNDAsNDkgKzQ5LDQxIEBACiAgICMgTW92ZSByZXN1bHQgZnJvbSBjYWNoZSB0byBub3JtYWwgdmFyaWFibGUuCiAgIHNldChDTUFLRV9DWFhfQ09NUElMRVJfV09SS1MgJHtDTUFLRV9DWFhfQ09NUElMRVJfV09SS1N9KQogICB1bnNldChDTUFLRV9DWFhfQ09NUElMRVJfV09SS1MgQ0FDSEUpCi0gIHNldChDWFhfVEVTVF9XQVNfUlVOIDEpCiAgIF9fVGVzdENvbXBpbGVyX3Jlc3RvcmVUcnlDb21waWxlVGFyZ2V0VHlwZSgpCisgIGlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfV09SS1MpCisgICAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfRkFJTCAiYnJva2VuIikKKyAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCisgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENYWCBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCisgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ1hYX0NPTVBJTEVSX09VVFBVVH1cblxuIikKKyAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBfb3V0cHV0ICIke19fQ01BS0VfQ1hYX0NPTVBJTEVSX09VVFBVVH0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlRoZSBDKysgY29tcGlsZXJcbiAgXCIke0NNQUtFX0NYWF9DT01QSUxFUn1cIlxuIgorICAgICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgorICAgICAgIndpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4gICR7X291dHB1dH1cblxuIgorICAgICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQorICBlbmRpZigpCisgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX1BBU1MgIndvcmtzIikKKyAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKKyAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENYWCBjb21waWxlciB3b3JrcyBwYXNzZWQgd2l0aCAiCisgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NYWF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCiBlbmRpZigpCiAKLWlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJDWFgiICIgLS0gYnJva2VuIikKLSAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwotICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKLSAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfQ1hYX0NPTVBJTEVSX09VVFBVVH1cblxuIikKLSAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgX291dHB1dCAiJHtfX0NNQUtFX0NYWF9DT01QSUxFUl9PVVRQVVR9IikKLSAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIEMrKyBjb21waWxlclxuICBcIiR7Q01BS0VfQ1hYX0NPTVBJTEVSfVwiXG4iCi0gICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgotICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKLSAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCi1lbHNlKCkKLSAgaWYoQ1hYX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclN0YXR1cygiQ1hYIiAiIC0tIHdvcmtzIikKLSAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwotICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBDWFggY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgotICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX0NYWF9DT01QSUxFUl9PVVRQVVR9XG5cbiIpCi0gIGVuZGlmKCkKKyMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBjb21waWxlciBmZWF0dXJlcworaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlRmVhdHVyZXMuY21ha2UpCitDTUFLRV9ERVRFUk1JTkVfQ09NUElMRV9GRUFUVVJFUyhDWFgpCiAKLSAgIyBUcnkgdG8gaWRlbnRpZnkgdGhlIEFCSSBhbmQgY29uZmlndXJlIGl0IGludG8gQ01ha2VDWFhDb21waWxlci5jbWFrZQotICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyQUJJLmNtYWtlKQotICBDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfQUJJKENYWCAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDWFhDb21waWxlckFCSS5jcHApCi0gICMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBjb21waWxlciBmZWF0dXJlcwotICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVGZWF0dXJlcy5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVfRkVBVFVSRVMoQ1hYKQorIyBSZS1jb25maWd1cmUgdG8gc2F2ZSBsZWFybmVkIGluZm9ybWF0aW9uLgorY29uZmlndXJlX2ZpbGUoCisgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNYWENvbXBpbGVyLmNtYWtlLmluCisgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlQ1hYQ29tcGlsZXIuY21ha2UKKyAgQE9OTFkKKyAgKQoraW5jbHVkZSgke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUNYWENvbXBpbGVyLmNtYWtlKQogCi0gICMgUmUtY29uZmlndXJlIHRvIHNhdmUgbGVhcm5lZCBpbmZvcm1hdGlvbi4KLSAgY29uZmlndXJlX2ZpbGUoCi0gICAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlQ1hYQ29tcGlsZXIuY21ha2UuaW4KLSAgICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUNYWENvbXBpbGVyLmNtYWtlCi0gICAgQE9OTFkKLSAgICApCi0gIGluY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VDWFhDb21waWxlci5jbWFrZSkKLQotICBpZihDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSKQotICAgIGZvcmVhY2goZiAke0NNQUtFX0NYWF9BQklfRklMRVN9KQotICAgICAgaW5jbHVkZSgke2Z9KQotICAgIGVuZGZvcmVhY2goKQotICAgIHVuc2V0KENNQUtFX0NYWF9BQklfRklMRVMpCi0gIGVuZGlmKCkKK2lmKENNQUtFX0NYWF9TSVpFT0ZfREFUQV9QVFIpCisgIGZvcmVhY2goZiAke0NNQUtFX0NYWF9BQklfRklMRVN9KQorICAgIGluY2x1ZGUoJHtmfSkKKyAgZW5kZm9yZWFjaCgpCisgIHVuc2V0KENNQUtFX0NYWF9BQklfRklMRVMpCiBlbmRpZigpCiAKIHNldChDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRSAke19fQ01BS0VfU0FWRURfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEV9KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVRlc3RDb21waWxlckNvbW1vbi5jbWFrZSBiL01vZHVsZXMvQ01ha2VUZXN0Q29tcGlsZXJDb21tb24uY21ha2UKaW5kZXggNmVlNTE3NS4uZGE3YzAwNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVRlc3RDb21waWxlckNvbW1vbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlVGVzdENvbXBpbGVyQ29tbW9uLmNtYWtlCkBAIC0yLDggKzIsMTUgQEAKICMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KIAogCi1mdW5jdGlvbihQcmludFRlc3RDb21waWxlclN0YXR1cyBMQU5HIE1TRykKLSAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciB3b3JraW5nICR7TEFOR30gY29tcGlsZXI6ICR7Q01BS0VfJHtMQU5HfV9DT01QSUxFUn0ke01TR30iKQorZnVuY3Rpb24oUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMgTEFORykKKyAgIyBBUkdOIHNob3VsZG4ndCBiZSBuZWVkZWQgbm93LCBidXQgaXQgaXMgdGhlcmUgdG8gcHJlc2VydmUgYmFja3dhcmQKKyAgIyBjb21wYXRpYmlsaXR5IGluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwcm9qZWN0IGNvZGUgb3IKKyAgIyBjdXN0b20gdG9vbGNoYWlucyAodGhleSBzaG91bGRuJ3QsIGJ1dCB3ZSBjYW4gZWFzaWx5IHN1cHBvcnQgaXQpCisgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNrIGZvciB3b3JraW5nICR7TEFOR30gY29tcGlsZXI6ICR7Q01BS0VfJHtMQU5HfV9DT01QSUxFUn0ke0FSR059IikKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQgVFlQRSBNU0cpCisgIG1lc3NhZ2UoJHtUWVBFfSAiJHtNU0d9IikKIGVuZGZ1bmN0aW9uKCkKIAogIyBpZiByZXF1aXJlZCBzZXQgdGhlIHRhcmdldCB0eXBlIGlmIG5vdCBhbHJlYWR5IGV4cGxpY2l0bHkgc2V0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NNYWtlVGVzdEZvcnRyYW5Db21waWxlci5jbWFrZSBiL01vZHVsZXMvQ01ha2VUZXN0Rm9ydHJhbkNvbXBpbGVyLmNtYWtlCmluZGV4IGU5ODYwZTkuLjEwZmIwYTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VUZXN0Rm9ydHJhbkNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvQ01ha2VUZXN0Rm9ydHJhbkNvbXBpbGVyLmNtYWtlCkBAIC0xNSwxMyArMTUsMjIgQEAKICMgV2Ugbm93IHN0b3JlIHRoaXMgaW4gQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UuCiB1bnNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1dPUktTIENBQ0hFKQogCisjIFRyeSB0byBpZGVudGlmeSB0aGUgQUJJIGFuZCBjb25maWd1cmUgaXQgaW50byBDTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZQoraW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoRm9ydHJhbiAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VGb3J0cmFuQ29tcGlsZXJBQkkuRikKK2lmKENNQUtFX0ZvcnRyYW5fQUJJX0NPTVBJTEVEKQorICAjIFRoZSBjb21waWxlciB3b3JrZWQgc28gc2tpcCBkZWRpY2F0ZWQgdGVzdCBiZWxvdy4KKyAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfV09SS1MgVFJVRSkKKyAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciB3b3JraW5nIEZvcnRyYW4gY29tcGlsZXI6ICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0gLSBza2lwcGVkIikKK2VuZGlmKCkKKwogIyBUaGlzIGZpbGUgaXMgdXNlZCBieSBFbmFibGVMYW5ndWFnZSBpbiBjbUdsb2JhbEdlbmVyYXRvciB0bwogIyBkZXRlcm1pbmUgdGhhdCB0aGUgc2VsZWN0ZWQgRm9ydHJhbiBjb21waWxlciBjYW4gYWN0dWFsbHkgY29tcGlsZQogIyBhbmQgbGluayB0aGUgbW9zdCBiYXNpYyBvZiBwcm9ncmFtcy4gICBJZiBub3QsIGEgZmF0YWwgZXJyb3IKICMgaXMgc2V0IGFuZCBjbWFrZSBzdG9wcyBwcm9jZXNzaW5nIGNvbW1hbmRzIGFuZCB3aWxsIG5vdCBnZW5lcmF0ZQogIyBhbnkgbWFrZWZpbGVzIG9yIHByb2plY3RzLgogaWYoTk9UIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJGb3J0cmFuIiAiIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIkZvcnRyYW4iKQogICBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdEZvcnRyYW5Db21waWxlci5mICIKICAgICAgICAgUFJPR1JBTSBURVNURm9ydHJhbgogICAgICAgICBQUklOVCAqLCAnSGVsbG8nCkBAIC0zMyw3MCArNDIsNjEgQEAKICAgIyBNb3ZlIHJlc3VsdCBmcm9tIGNhY2hlIHRvIG5vcm1hbCB2YXJpYWJsZS4KICAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfV09SS1MgJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1dPUktTfSkKICAgdW5zZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9XT1JLUyBDQUNIRSkKLSAgc2V0KEZPUlRSQU5fVEVTVF9XQVNfUlVOIDEpCisgIGlmKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1dPUktTKQorICAgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCisgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZworICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKKyAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQorICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIF9vdXRwdXQgIiR7T1VUUFVUfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIEZvcnRyYW4gY29tcGlsZXJcbiAgXCIke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9XCJcbiIKKyAgICAgICJpcyBub3QgYWJsZSB0byBjb21waWxlIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbS5cbkl0IGZhaWxzICIKKyAgICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKKyAgICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKKyAgZW5kaWYoKQorICBQcmludFRlc3RDb21waWxlclJlc3VsdChDSEVDS19QQVNTICJ3b3JrcyIpCisgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCisgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKKyAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKIGVuZGlmKCkKIAotaWYoTk9UIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJGb3J0cmFuIiAiICAtLSBicm9rZW4iKQotICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCi0gICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKLSAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKLSAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgX291dHB1dCAiJHtPVVRQVVR9IikKLSAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIEZvcnRyYW4gY29tcGlsZXJcbiAgXCIke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9XCJcbiIKLSAgICAiaXMgbm90IGFibGUgdG8gY29tcGlsZSBhIHNpbXBsZSB0ZXN0IHByb2dyYW0uXG5JdCBmYWlscyAiCi0gICAgIndpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4gICR7X291dHB1dH1cblxuIgotICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKLWVsc2UoKQotICBpZihGT1JUUkFOX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclN0YXR1cygiRm9ydHJhbiIgIiAgLS0gd29ya3MiKQotICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCi0gICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEZvcnRyYW4gY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgotICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gIGVuZGlmKCkKLQotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgQUJJIGFuZCBjb25maWd1cmUgaXQgaW50byBDTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZQotICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyQUJJLmNtYWtlKQotICBDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfQUJJKEZvcnRyYW4gJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRm9ydHJhbkNvbXBpbGVyQUJJLkYpCi0KLSAgIyBUZXN0IGZvciBGb3J0cmFuIDkwIHN1cHBvcnQgYnkgdXNpbmcgYW4gZjkwLXNwZWNpZmljIGNvbnN0cnVjdC4KLSAgaWYoTk9UIERFRklORUQgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTApCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHdoZXRoZXIgJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSfSBzdXBwb3J0cyBGb3J0cmFuIDkwIikKLSAgICBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdEZvcnRyYW5Db21waWxlckY5MC5mOTAgIgotICAgICAgUFJPR1JBTSBURVNURm9ydHJhbjkwCi0gICAgICBpbnRlZ2VyIHN0b3AgOyBzdG9wID0gMSA7IGRvIHdoaWxlICggc3RvcCAuZXEuIDAgKSA7IGVuZCBkbwotICAgICAgRU5EIFBST0dSQU0gVEVTVEZvcnRyYW45MAorIyBUZXN0IGZvciBGb3J0cmFuIDkwIHN1cHBvcnQgYnkgdXNpbmcgYW4gZjkwLXNwZWNpZmljIGNvbnN0cnVjdC4KK2lmKE5PVCBERUZJTkVEIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwKQorICBtZXNzYWdlKENIRUNLX1NUQVJUICJDaGVja2luZyB3aGV0aGVyICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0gc3VwcG9ydHMgRm9ydHJhbiA5MCIpCisgIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC90ZXN0Rm9ydHJhbkNvbXBpbGVyRjkwLmY5MCAiCisgICAgUFJPR1JBTSBURVNURm9ydHJhbjkwCisgICAgaW50ZWdlciBzdG9wIDsgc3RvcCA9IDEgOyBkbyB3aGlsZSAoIHN0b3AgLmVxLiAwICkgOyBlbmQgZG8KKyAgICBFTkQgUFJPR1JBTSBURVNURm9ydHJhbjkwCiAiKQotICAgIHRyeV9jb21waWxlKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwICR7Q01BS0VfQklOQVJZX0RJUn0KLSAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdEZvcnRyYW5Db21waWxlckY5MC5mOTAKLSAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCi0gICAgaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTApCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgd2hldGhlciAke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9IHN1cHBvcnRzIEZvcnRyYW4gOTAgLS0geWVzIikKLSAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCi0gICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgRm9ydHJhbiBjb21waWxlciBzdXBwb3J0cyBGb3J0cmFuIDkwIHBhc3NlZCB3aXRoICIKLSAgICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gICAgICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgMSkKLSAgICBlbHNlKCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyB3aGV0aGVyICR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0gc3VwcG9ydHMgRm9ydHJhbiA5MCAtLSBubyIpCi0gICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCi0gICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgRm9ydHJhbiBjb21waWxlciBzdXBwb3J0cyBGb3J0cmFuIDkwIGZhaWxlZCB3aXRoICIKLSAgICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gICAgICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgMCkKLSAgICBlbmRpZigpCi0gICAgdW5zZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgQ0FDSEUpCisgIHRyeV9jb21waWxlKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwICR7Q01BS0VfQklOQVJZX0RJUn0KKyAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3Rlc3RGb3J0cmFuQ29tcGlsZXJGOTAuZjkwCisgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKKyAgaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTApCisgICAgbWVzc2FnZShDSEVDS19QQVNTICJ5ZXMiKQorICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCisgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEZvcnRyYW4gY29tcGlsZXIgc3VwcG9ydHMgRm9ydHJhbiA5MCBwYXNzZWQgd2l0aCAiCisgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKKyAgICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgMSkKKyAgZWxzZSgpCisgICAgbWVzc2FnZShDSEVDS19GQUlMICJubyIpCisgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZworICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBGb3J0cmFuIGNvbXBpbGVyIHN1cHBvcnRzIEZvcnRyYW4gOTAgZmFpbGVkIHdpdGggIgorICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCisgICAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwIDApCiAgIGVuZGlmKCkKKyAgdW5zZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgQ0FDSEUpCitlbmRpZigpCiAKLSAgIyBSZS1jb25maWd1cmUgdG8gc2F2ZSBsZWFybmVkIGluZm9ybWF0aW9uLgotICBjb25maWd1cmVfZmlsZSgKLSAgICAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VGb3J0cmFuQ29tcGlsZXIuY21ha2UuaW4KLSAgICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZQotICAgIEBPTkxZCi0gICAgKQotICBpbmNsdWRlKCR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlKQorIyBSZS1jb25maWd1cmUgdG8gc2F2ZSBsZWFybmVkIGluZm9ybWF0aW9uLgorY29uZmlndXJlX2ZpbGUoCisgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZS5pbgorICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZUZvcnRyYW5Db21waWxlci5jbWFrZQorICBAT05MWQorICApCitpbmNsdWRlKCR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlRm9ydHJhbkNvbXBpbGVyLmNtYWtlKQogCi0gIGlmKENNQUtFX0ZvcnRyYW5fU0laRU9GX0RBVEFfUFRSKQotICAgIGZvcmVhY2goZiAke0NNQUtFX0ZvcnRyYW5fQUJJX0ZJTEVTfSkKLSAgICAgIGluY2x1ZGUoJHtmfSkKLSAgICBlbmRmb3JlYWNoKCkKLSAgICB1bnNldChDTUFLRV9Gb3J0cmFuX0FCSV9GSUxFUykKLSAgZW5kaWYoKQoraWYoQ01BS0VfRm9ydHJhbl9TSVpFT0ZfREFUQV9QVFIpCisgIGZvcmVhY2goZiAke0NNQUtFX0ZvcnRyYW5fQUJJX0ZJTEVTfSkKKyAgICBpbmNsdWRlKCR7Zn0pCisgIGVuZGZvcmVhY2goKQorICB1bnNldChDTUFLRV9Gb3J0cmFuX0FCSV9GSUxFUykKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VUZXN0T0JKQ0NvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVRlc3RPQkpDQ29tcGlsZXIuY21ha2UKaW5kZXggMDAzMDY4My4uMjk4MjcyYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DTWFrZVRlc3RPQkpDQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZVRlc3RPQkpDQ29tcGlsZXIuY21ha2UKQEAgLTExLDcgKzExLDcgQEAKIAogaW5jbHVkZShDTWFrZVRlc3RDb21waWxlckNvbW1vbikKIAotIyB3b3JrIGFyb3VuZCBlbmZvcmNlZCBjb2RlIHNpZ25pbmcgYW5kIC8gb3IgbWlzc2luZyBleGVjdHVhYmxlIHRhcmdldCB0eXBlCisjIHdvcmsgYXJvdW5kIGVuZm9yY2VkIGNvZGUgc2lnbmluZyBhbmQgLyBvciBtaXNzaW5nIGV4ZWN1dGFibGUgdGFyZ2V0IHR5cGUKIHNldChfX0NNQUtFX1NBVkVEX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFICR7Q01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEV9KQogaWYoX0NNQUtFX0ZFQVRVUkVfREVURUNUSU9OX1RBUkdFVF9UWVBFKQogICBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUgJHtfQ01BS0VfRkVBVFVSRV9ERVRFQ1RJT05fVEFSR0VUX1RZUEV9KQpAQCAtMjEsMTMgKzIxLDIyIEBACiAjIFdlIG5vdyBzdG9yZSB0aGlzIGluIENNYWtlQ0NvbXBpbGVyLmNtYWtlLgogdW5zZXQoQ01BS0VfT0JKQ19DT01QSUxFUl9XT1JLUyBDQUNIRSkKIAorIyBUcnkgdG8gaWRlbnRpZnkgdGhlIEFCSSBhbmQgY29uZmlndXJlIGl0IGludG8gQ01ha2VPQkpDQ29tcGlsZXIuY21ha2UKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZXJBQkkuY21ha2UpCitDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfQUJJKE9CSkMgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlT0JKQ0NvbXBpbGVyQUJJLm0pCitpZihDTUFLRV9PQkpDX0FCSV9DT01QSUxFRCkKKyAgIyBUaGUgY29tcGlsZXIgd29ya2VkIHNvIHNraXAgZGVkaWNhdGVkIHRlc3QgYmVsb3cuCisgIHNldChDTUFLRV9PQkpDX0NPTVBJTEVSX1dPUktTIFRSVUUpCisgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3Igd29ya2luZyBPQkpDIGNvbXBpbGVyOiAke0NNQUtFX09CSkNfQ09NUElMRVJ9IC0gc2tpcHBlZCIpCitlbmRpZigpCisKICMgVGhpcyBmaWxlIGlzIHVzZWQgYnkgRW5hYmxlTGFuZ3VhZ2UgaW4gY21HbG9iYWxHZW5lcmF0b3IgdG8KICMgZGV0ZXJtaW5lIHRoYXQgdGhhdCBzZWxlY3RlZCBPYmplY3RpdmUtQyBjb21waWxlciBjYW4gYWN0dWFsbHkgY29tcGlsZQogIyBhbmQgbGluayB0aGUgbW9zdCBiYXNpYyBvZiBwcm9ncmFtcy4gICBJZiBub3QsIGEgZmF0YWwgZXJyb3IKICMgaXMgc2V0IGFuZCBjbWFrZSBzdG9wcyBwcm9jZXNzaW5nIGNvbW1hbmRzIGFuZCB3aWxsIG5vdCBnZW5lcmF0ZQogIyBhbnkgbWFrZWZpbGVzIG9yIHByb2plY3RzLgogaWYoTk9UIENNQUtFX09CSkNfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJPQkpDIiAiIikKKyAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIk9CSkMiKQogICBfX1Rlc3RDb21waWxlcl9zZXRUcnlDb21waWxlVGFyZ2V0VHlwZSgpCiAgIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC90ZXN0T0JKQ0NvbXBpbGVyLm0KICAgICAiI2lmZGVmIF9fY3BsdXNwbHVzXG4iCkBAIC00NCw0OSArNTMsNDEgQEAKICAgIyBNb3ZlIHJlc3VsdCBmcm9tIGNhY2hlIHRvIG5vcm1hbCB2YXJpYWJsZS4KICAgc2V0KENNQUtFX09CSkNfQ09NUElMRVJfV09SS1MgJHtDTUFLRV9PQkpDX0NPTVBJTEVSX1dPUktTfSkKICAgdW5zZXQoQ01BS0VfT0JKQ19DT01QSUxFUl9XT1JLUyBDQUNIRSkKLSAgc2V0KE9CSkNfVEVTVF9XQVNfUlVOIDEpCiAgIF9fVGVzdENvbXBpbGVyX3Jlc3RvcmVUcnlDb21waWxlVGFyZ2V0VHlwZSgpCisgIGlmKE5PVCBDTUFLRV9PQkpDX0NPTVBJTEVSX1dPUktTKQorICAgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCisgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZworICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBPYmplY3RpdmUtQyBjb21waWxlciB3b3JrcyBmYWlsZWQgd2l0aCAiCisgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfT0JKQ19DT01QSUxFUl9PVVRQVVR9XG5cbiIpCisgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgX291dHB1dCAiJHtfX0NNQUtFX09CSkNfQ09NUElMRVJfT1VUUFVUfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIE9iamVjdGl2ZS1DIGNvbXBpbGVyXG4gIFwiJHtDTUFLRV9PQkpDX0NPTVBJTEVSfVwiXG4iCisgICAgICAiaXMgbm90IGFibGUgdG8gY29tcGlsZSBhIHNpbXBsZSB0ZXN0IHByb2dyYW0uXG5JdCBmYWlscyAiCisgICAgICAid2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiAgJHtfb3V0cHV0fVxuXG4iCisgICAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCisgIGVuZGlmKCkKKyAgUHJpbnRUZXN0Q29tcGlsZXJSZXN1bHQoQ0hFQ0tfUEFTUyAid29ya3MiKQorICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICJEZXRlcm1pbmluZyBpZiB0aGUgT2JqZWN0aXZlLUMgY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgorICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9PQkpDX0NPTVBJTEVSX09VVFBVVH1cblxuIikKIGVuZGlmKCkKIAotaWYoTk9UIENNQUtFX09CSkNfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJPQkpDIiAiIC0tIGJyb2tlbiIpCi0gIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKLSAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIE9iamVjdGl2ZS1DIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKLSAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfT0JKQ19DT01QSUxFUl9PVVRQVVR9XG5cbiIpCi0gIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIF9vdXRwdXQgIiR7X19DTUFLRV9PQkpDX0NPTVBJTEVSX09VVFBVVH0iKQotICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgT2JqZWN0aXZlLUMgY29tcGlsZXJcbiAgXCIke0NNQUtFX09CSkNfQ09NUElMRVJ9XCJcbiIKLSAgICAiaXMgbm90IGFibGUgdG8gY29tcGlsZSBhIHNpbXBsZSB0ZXN0IHByb2dyYW0uXG5JdCBmYWlscyAiCi0gICAgIndpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4gICR7X291dHB1dH1cblxuIgotICAgICJDTWFrZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGlzIHByb2plY3QuIikKLWVsc2UoKQotICBpZihPQkpDX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclN0YXR1cygiT0JKQyIgIiAtLSB3b3JrcyIpCi0gICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKLSAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgT2JqZWN0aXZlLUMgY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgotICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtfX0NNQUtFX09CSkNfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQotICBlbmRpZigpCisjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZUZlYXR1cmVzLmNtYWtlKQorQ01BS0VfREVURVJNSU5FX0NPTVBJTEVfRkVBVFVSRVMoT0JKQykKIAotICAjIFRyeSB0byBpZGVudGlmeSB0aGUgQUJJIGFuZCBjb25maWd1cmUgaXQgaW50byBDTWFrZU9CSkNDb21waWxlci5jbWFrZQotICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVyQUJJLmNtYWtlKQotICBDTUFLRV9ERVRFUk1JTkVfQ09NUElMRVJfQUJJKE9CSkMgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlT0JKQ0NvbXBpbGVyQUJJLm0pCi0gICMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBjb21waWxlciBmZWF0dXJlcwotICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVGZWF0dXJlcy5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVfRkVBVFVSRVMoT0JKQykKKyMgUmUtY29uZmlndXJlIHRvIHNhdmUgbGVhcm5lZCBpbmZvcm1hdGlvbi4KK2NvbmZpZ3VyZV9maWxlKAorICAke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VPQkpDQ29tcGlsZXIuY21ha2UuaW4KKyAgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VPQkpDQ29tcGlsZXIuY21ha2UKKyAgQE9OTFkKKyAgKQoraW5jbHVkZSgke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZU9CSkNDb21waWxlci5jbWFrZSkKIAotICAjIFJlLWNvbmZpZ3VyZSB0byBzYXZlIGxlYXJuZWQgaW5mb3JtYXRpb24uCi0gIGNvbmZpZ3VyZV9maWxlKAotICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZU9CSkNDb21waWxlci5jbWFrZS5pbgotICAgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlT0JKQ0NvbXBpbGVyLmNtYWtlCi0gICAgQE9OTFkKLSAgICApCi0gIGluY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VPQkpDQ29tcGlsZXIuY21ha2UpCi0KLSAgaWYoQ01BS0VfT0JKQ19TSVpFT0ZfREFUQV9QVFIpCi0gICAgZm9yZWFjaChmICR7Q01BS0VfT0JKQ19BQklfRklMRVN9KQotICAgICAgaW5jbHVkZSgke2Z9KQotICAgIGVuZGZvcmVhY2goKQotICAgIHVuc2V0KENNQUtFX09CSkNfQUJJX0ZJTEVTKQotICBlbmRpZigpCitpZihDTUFLRV9PQkpDX1NJWkVPRl9EQVRBX1BUUikKKyAgZm9yZWFjaChmICR7Q01BS0VfT0JKQ19BQklfRklMRVN9KQorICAgIGluY2x1ZGUoJHtmfSkKKyAgZW5kZm9yZWFjaCgpCisgIHVuc2V0KENNQUtFX09CSkNfQUJJX0ZJTEVTKQogZW5kaWYoKQogCiBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUgJHtfX0NNQUtFX1NBVkVEX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFfSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ01ha2VUZXN0T0JKQ1hYQ29tcGlsZXIuY21ha2UgYi9Nb2R1bGVzL0NNYWtlVGVzdE9CSkNYWENvbXBpbGVyLmNtYWtlCmluZGV4IGJjY2UyZjEuLjM2ZTNlZmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VUZXN0T0JKQ1hYQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9DTWFrZVRlc3RPQkpDWFhDb21waWxlci5jbWFrZQpAQCAtMTEsNyArMTEsNyBAQAogCiBpbmNsdWRlKENNYWtlVGVzdENvbXBpbGVyQ29tbW9uKQogCi0jIHdvcmsgYXJvdW5kIGVuZm9yY2VkIGNvZGUgc2lnbmluZyBhbmQgLyBvciBtaXNzaW5nIGV4ZWN0dWFibGUgdGFyZ2V0IHR5cGUKKyMgd29yayBhcm91bmQgZW5mb3JjZWQgY29kZSBzaWduaW5nIGFuZCAvIG9yIG1pc3NpbmcgZXhlY3V0YWJsZSB0YXJnZXQgdHlwZQogc2V0KF9fQ01BS0VfU0FWRURfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUgJHtDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRX0pCiBpZihfQ01BS0VfRkVBVFVSRV9ERVRFQ1RJT05fVEFSR0VUX1RZUEUpCiAgIHNldChDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRSAke19DTUFLRV9GRUFUVVJFX0RFVEVDVElPTl9UQVJHRVRfVFlQRX0pCkBAIC0yMSwxMyArMjEsMjIgQEAKICMgV2Ugbm93IHN0b3JlIHRoaXMgaW4gQ01ha2VPQkpDWFhDb21waWxlci5jbWFrZS4KIHVuc2V0KENNQUtFX09CSkNYWF9DT01QSUxFUl9XT1JLUyBDQUNIRSkKIAorIyBUcnkgdG8gaWRlbnRpZnkgdGhlIEFCSSBhbmQgY29uZmlndXJlIGl0IGludG8gQ01ha2VPQkpDWFhDb21waWxlci5jbWFrZQoraW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKK0NNQUtFX0RFVEVSTUlORV9DT01QSUxFUl9BQkkoT0JKQ1hYICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZU9CSkNYWENvbXBpbGVyQUJJLm1tKQoraWYoQ01BS0VfT0JKQ1hYX0FCSV9DT01QSUxFRCkKKyAgIyBUaGUgY29tcGlsZXIgd29ya2VkIHNvIHNraXAgZGVkaWNhdGVkIHRlc3QgYmVsb3cuCisgIHNldChDTUFLRV9PQkpDWFhfQ09NUElMRVJfV09SS1MgVFJVRSkKKyAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciB3b3JraW5nIE9CSkNYWCBjb21waWxlcjogJHtDTUFLRV9PQkpDWFhfQ09NUElMRVJ9IC0gc2tpcHBlZCIpCitlbmRpZigpCisKICMgVGhpcyBmaWxlIGlzIHVzZWQgYnkgRW5hYmxlTGFuZ3VhZ2UgaW4gY21HbG9iYWxHZW5lcmF0b3IgdG8KICMgZGV0ZXJtaW5lIHRoYXQgdGhlIHNlbGVjdGVkIE9iamVjdGl2ZS1DKysgY29tcGlsZXIgY2FuIGFjdHVhbGx5IGNvbXBpbGUKICMgYW5kIGxpbmsgdGhlIG1vc3QgYmFzaWMgb2YgcHJvZ3JhbXMuICAgSWYgbm90LCBhIGZhdGFsIGVycm9yCiAjIGlzIHNldCBhbmQgY21ha2Ugc3RvcHMgcHJvY2Vzc2luZyBjb21tYW5kcyBhbmQgd2lsbCBub3QgZ2VuZXJhdGUKICMgYW55IG1ha2VmaWxlcyBvciBwcm9qZWN0cy4KIGlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfV09SS1MpCi0gIFByaW50VGVzdENvbXBpbGVyU3RhdHVzKCJPQkpDWFgiICIiKQorICBQcmludFRlc3RDb21waWxlclN0YXR1cygiT0JKQ1hYIikKICAgX19UZXN0Q29tcGlsZXJfc2V0VHJ5Q29tcGlsZVRhcmdldFR5cGUoKQogICBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvdGVzdE9CSkNYWENvbXBpbGVyLm1tCiAgICAgIiNpZm5kZWYgX19jcGx1c3BsdXNcbiIKQEAgLTQzLDQ5ICs1Miw0MSBAQAogICAjIE1vdmUgcmVzdWx0IGZyb20gY2FjaGUgdG8gbm9ybWFsIHZhcmlhYmxlLgogICBzZXQoQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1dPUktTICR7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSX1dPUktTfSkKICAgdW5zZXQoQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1dPUktTIENBQ0hFKQotICBzZXQoT0JKQ1hYX1RFU1RfV0FTX1JVTiAxKQogICBfX1Rlc3RDb21waWxlcl9yZXN0b3JlVHJ5Q29tcGlsZVRhcmdldFR5cGUoKQorICBpZihOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1dPUktTKQorICAgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCisgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZworICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBPYmplY3RpdmUtQysrIGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKKyAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9PQkpDWFhfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQorICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIF9vdXRwdXQgIiR7X19DTUFLRV9PQkpDWFhfQ09NUElMRVJfT1VUUFVUfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIE9iamVjdGl2ZS1DKysgY29tcGlsZXJcbiAgXCIke0NNQUtFX09CSkNYWF9DT01QSUxFUn1cIlxuIgorICAgICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgorICAgICAgIndpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4gICR7X291dHB1dH1cblxuIgorICAgICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQorICBlbmRpZigpCisgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX1BBU1MgIndvcmtzIikKKyAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKKyAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIE9iamVjdGl2ZS1DKysgY29tcGlsZXIgd29ya3MgcGFzc2VkIHdpdGggIgorICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9PQkpDWFhfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQogZW5kaWYoKQogCi1pZihOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiT0JKQ1hYIiAiIC0tIGJyb2tlbiIpCi0gIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKLSAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIE9iamVjdGl2ZS1DKysgY29tcGlsZXIgd29ya3MgZmFpbGVkIHdpdGggIgotICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9PQkpDWFhfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQotICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBfb3V0cHV0ICIke19fQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX09VVFBVVH0iKQotICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgT2JqZWN0aXZlLUMrKyBjb21waWxlclxuICBcIiR7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSfVwiXG4iCi0gICAgImlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLlxuSXQgZmFpbHMgIgotICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuICAke19vdXRwdXR9XG5cbiIKLSAgICAiQ01ha2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgdGhpcyBwcm9qZWN0LiIpCi1lbHNlKCkKLSAgaWYoT0JKQ1hYX1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclN0YXR1cygiT0JKQ1hYIiAiIC0tIHdvcmtzIikKLSAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwotICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBPYmplY3RpdmUtQysrIGNvbXBpbGVyIHdvcmtzIHBhc3NlZCB3aXRoICIKLSAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7X19DTUFLRV9PQkpDWFhfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQotICBlbmRpZigpCisjIFRyeSB0byBpZGVudGlmeSB0aGUgY29tcGlsZXIgZmVhdHVyZXMKK2luY2x1ZGUoJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlRGV0ZXJtaW5lQ29tcGlsZUZlYXR1cmVzLmNtYWtlKQorQ01BS0VfREVURVJNSU5FX0NPTVBJTEVfRkVBVFVSRVMoT0JKQ1hYKQogCi0gICMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBBQkkgYW5kIGNvbmZpZ3VyZSBpdCBpbnRvIENNYWtlT0JKQ1hYQ29tcGlsZXIuY21ha2UKLSAgaW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VEZXRlcm1pbmVDb21waWxlckFCSS5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVSX0FCSShPQkpDWFggJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlT0JKQ1hYQ29tcGlsZXJBQkkubW0pCi0gICMgVHJ5IHRvIGlkZW50aWZ5IHRoZSBjb21waWxlciBmZWF0dXJlcwotICBpbmNsdWRlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZURldGVybWluZUNvbXBpbGVGZWF0dXJlcy5jbWFrZSkKLSAgQ01BS0VfREVURVJNSU5FX0NPTVBJTEVfRkVBVFVSRVMoT0JKQ1hYKQorIyBSZS1jb25maWd1cmUgdG8gc2F2ZSBsZWFybmVkIGluZm9ybWF0aW9uLgorY29uZmlndXJlX2ZpbGUoCisgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZU9CSkNYWENvbXBpbGVyLmNtYWtlLmluCisgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlT0JKQ1hYQ29tcGlsZXIuY21ha2UKKyAgQE9OTFkKKyAgKQoraW5jbHVkZSgke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZU9CSkNYWENvbXBpbGVyLmNtYWtlKQogCi0gICMgUmUtY29uZmlndXJlIHRvIHNhdmUgbGVhcm5lZCBpbmZvcm1hdGlvbi4KLSAgY29uZmlndXJlX2ZpbGUoCi0gICAgJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlT0JKQ1hYQ29tcGlsZXIuY21ha2UuaW4KLSAgICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9DTWFrZU9CSkNYWENvbXBpbGVyLmNtYWtlCi0gICAgQE9OTFkKLSAgICApCi0gIGluY2x1ZGUoJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0vQ01ha2VPQkpDWFhDb21waWxlci5jbWFrZSkKLQotICBpZihDTUFLRV9PQkpDWFhfU0laRU9GX0RBVEFfUFRSKQotICAgIGZvcmVhY2goZiAke0NNQUtFX09CSkNYWF9BQklfRklMRVN9KQotICAgICAgaW5jbHVkZSgke2Z9KQotICAgIGVuZGZvcmVhY2goKQotICAgIHVuc2V0KENNQUtFX09CSkNYWF9BQklfRklMRVMpCi0gIGVuZGlmKCkKK2lmKENNQUtFX09CSkNYWF9TSVpFT0ZfREFUQV9QVFIpCisgIGZvcmVhY2goZiAke0NNQUtFX09CSkNYWF9BQklfRklMRVN9KQorICAgIGluY2x1ZGUoJHtmfSkKKyAgZW5kZm9yZWFjaCgpCisgIHVuc2V0KENNQUtFX09CSkNYWF9BQklfRklMRVMpCiBlbmRpZigpCiAKIHNldChDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRSAke19fQ01BS0VfU0FWRURfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEV9KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DTWFrZVRlc3RTd2lmdENvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9DTWFrZVRlc3RTd2lmdENvbXBpbGVyLmNtYWtlCmluZGV4IDg0MWFlZTYuLmQ5OGRjOWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ01ha2VUZXN0U3dpZnRDb21waWxlci5jbWFrZQorKysgYi9Nb2R1bGVzL0NNYWtlVGVzdFN3aWZ0Q29tcGlsZXIuY21ha2UKQEAgLTIwLDcgKzIwLDcgQEAKICMgaXMgc2V0IGFuZCBjbWFrZSBzdG9wcyBwcm9jZXNzaW5nIGNvbW1hbmRzIGFuZCB3aWxsIG5vdCBnZW5lcmF0ZQogIyBhbnkgbWFrZWZpbGVzIG9yIHByb2plY3RzLgogaWYoTk9UIENNQUtFX1N3aWZ0X0NPTVBJTEVSX1dPUktTKQotICBQcmludFRlc3RDb21waWxlclN0YXR1cygiU3dpZnQiICIiKQorICBQcmludFRlc3RDb21waWxlclN0YXR1cygiU3dpZnQiKQogICBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvbWFpbi5zd2lmdAogICAgICJwcmludChcIkNNYWtlXCIpXG4iKQogICB0cnlfY29tcGlsZShDTUFLRV9Td2lmdF9DT01QSUxFUl9XT1JLUyAke0NNQUtFX0JJTkFSWV9ESVJ9CkBAIC0zMyw3ICszMyw3IEBACiBlbmRpZigpCiAKIGlmKE5PVCBDTUFLRV9Td2lmdF9DT01QSUxFUl9XT1JLUykKLSAgUHJpbnRUZXN0Q29tcGlsZXJTdGF0dXMoIlN3aWZ0IiAiIC0tIGJyb2tlbiIpCisgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX0ZBSUwgImJyb2tlbiIpCiAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIFN3aWZ0IGNvbXBpbGVyIHdvcmtzIGZhaWxlZCB3aXRoICIKICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfU3dpZnRfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQpAQCAtNDQsMTIgKzQ0LDE3IEBACiAgICAgIkNNYWtlIHdpbGwgbm90IGJlIGFibGUgdG8gY29ycmVjdGx5IGdlbmVyYXRlIHRoaXMgcHJvamVjdC4iKQogZWxzZSgpCiAgIGlmKFN3aWZ0X1RFU1RfV0FTX1JVTikKLSAgICBQcmludFRlc3RDb21waWxlclN0YXR1cygiU3dpZnQiICIgLS0gd29ya3MiKQorICAgIFByaW50VGVzdENvbXBpbGVyUmVzdWx0KENIRUNLX1BBU1MgIndvcmtzIikKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBTd2lmdCBjb21waWxlciB3b3JrcyBwYXNzZWQgd2l0aCAiCiAgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19fQ01BS0VfU3dpZnRfQ09NUElMRVJfT1VUUFVUfVxuXG4iKQogICBlbmRpZigpCiAKKyAgIyBVbmxpa2UgQyBhbmQgQ1hYIHdlIGRvIG5vdCB5ZXQgZGV0ZWN0IGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgU3dpZnQgQUJJLgorICAjIEhvd2V2ZXIsIG9uZSBvZiB0aGUgc3RlcHMgZG9uZSBmb3IgQyBhbmQgQ1hYIGFzIHBhcnQgb2YgdGhhdCBkZXRlY3Rpb24gaXMKKyAgIyB0byBpbml0aWFsaXplIHRoZSBpbXBsaWNpdCBpbmNsdWRlIGRpcmVjdG9yaWVzLiAgVGhhdCBpcyByZWxldmFudCBoZXJlLgorICBzZXQoQ01BS0VfU3dpZnRfSU1QTElDSVRfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtfQ01BS0VfU3dpZnRfSU1QTElDSVRfSU5DTFVERV9ESVJFQ1RPUklFU19JTklUfSIpCisKICAgIyBSZS1jb25maWd1cmUgdG8gc2F2ZSBsZWFybmVkIGluZm9ybWF0aW9uLgogICBjb25maWd1cmVfZmlsZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VTd2lmdENvbXBpbGVyLmNtYWtlLmluCiAgICAgICAgICAgICAgICAgICR7Q01BS0VfUExBVEZPUk1fSU5GT19ESVJ9L0NNYWtlU3dpZnRDb21waWxlci5jbWFrZSBAT05MWSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ1BhY2suY21ha2UgYi9Nb2R1bGVzL0NQYWNrLmNtYWtlCmluZGV4IGMyZWQzZGUuLjhhMGVmMzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ1BhY2suY21ha2UKKysrIGIvTW9kdWxlcy9DUGFjay5jbWFrZQpAQCAtNSwyNiArNSwzNSBAQAogQ1BhY2sKIC0tLS0tCiAKLUJ1aWxkIGJpbmFyeSBhbmQgc291cmNlIHBhY2thZ2UgaW5zdGFsbGVycy4KK0NvbmZpZ3VyZSBnZW5lcmF0b3JzIGZvciBiaW5hcnkgaW5zdGFsbGVycyBhbmQgc291cmNlIHBhY2thZ2VzLgogCiBJbnRyb2R1Y3Rpb24KIF5eXl5eXl5eXl5eXgogCi1UaGUgQ1BhY2sgbW9kdWxlIGdlbmVyYXRlcyBhIGZpbGUgYGBDUGFja0NvbmZpZy5jbWFrZWBgIGludGVuZGVkIGZvcgotdXNlIGluIGEgc3Vic2VxdWVudCBydW4gb2YgIHRoZSA6bWFudWFsOmBjcGFjayA8Y3BhY2soMSk+YCBwcm9ncmFtCi13aGVyZSBpdCBzdGVlcnMgdGhlIGdlbmVyYXRpb24gb2YgaW5zdGFsbGVycyBvci9hbmQgc291cmNlIHBhY2thZ2VzLgorVGhlIENQYWNrIG1vZHVsZSBnZW5lcmF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYGBDUGFja0NvbmZpZy5jbWFrZWBgCithbmQgYGBDUGFja1NvdXJjZUNvbmZpZy5jbWFrZWBgLiBUaGV5IGFyZSBpbnRlbmRlZCBmb3IgdXNlIGluIGEgc3Vic2VxdWVudAorcnVuIG9mICB0aGUgOm1hbnVhbDpgY3BhY2sgPGNwYWNrKDEpPmAgcHJvZ3JhbSB3aGVyZSB0aGV5IHN0ZWVyIHRoZSBnZW5lcmF0aW9uCitvZiBpbnN0YWxsZXJzIG9yL2FuZCBzb3VyY2UgcGFja2FnZXMuCiAKLUluY2x1c2lvbiBvZiB0aGUgQ1BhY2sgbW9kdWxlIGFkZHMgdHdvIG5ldyBidWlsZCB0YXJnZXRzLCBgYHBhY2thZ2VgYAotYW5kIGBgcGFja2FnZV9zb3VyY2VgYCwgd2hpY2ggYnVpbGQgdGhlIGJpbmFyeSBhbmQgc291cmNlIGluc3RhbGxlcnMKLXJlc3BlY3RpdmVseS4gIFRoZSBnZW5lcmF0ZWQgYmluYXJ5IGluc3RhbGxlcnMgY29udGFpbiBldmVyeXRoaW5nCi1pbnN0YWxsZWQgdmlhIENNYWtlJ3MgOmNvbW1hbmQ6YGluc3RhbGxgIGNvbW1hbmQgKGFuZCB0aGUgZGVwcmVjYXRlZAotY29tbWFuZHMgOmNvbW1hbmQ6YGluc3RhbGxfZmlsZXNgLCA6Y29tbWFuZDpgaW5zdGFsbF9wcm9ncmFtc2AsIGFuZAotOmNvbW1hbmQ6YGluc3RhbGxfdGFyZ2V0c2ApLgorRGVwZW5kaW5nIG9uIHRoZSBDTWFrZSBnZW5lcmF0b3IsIHRoZSBDUGFjayBtb2R1bGUgbWF5IGFsc28gYWRkIHR3byBuZXcgYnVpbGQKK3RhcmdldHMsIGBgcGFja2FnZWBgIGFuZCBgYHBhY2thZ2Vfc291cmNlYGAuIFNlZSB0aGUgYHBhY2thZ2luZyB0YXJnZXRzYF8KK3NlY3Rpb24gYmVsb3cgZm9yIGRldGFpbHMuCiAKLUZvciBjZXJ0YWluIGtpbmRzIG9mIGJpbmFyeSBpbnN0YWxsZXJzIChpbmNsdWRpbmcgdGhlIGdyYXBoaWNhbAotaW5zdGFsbGVycyBvbiBtYWNPUyBhbmQgV2luZG93cyksIENQYWNrIGdlbmVyYXRlcyBpbnN0YWxsZXJzIHRoYXQKLWFsbG93IHVzZXJzIHRvIHNlbGVjdCBpbmRpdmlkdWFsIGFwcGxpY2F0aW9uIGNvbXBvbmVudHMgdG8gaW5zdGFsbC4KLVNlZSA6bW9kdWxlOmBDUGFja0NvbXBvbmVudGAgbW9kdWxlIGZvciBmdXJ0aGVyIGRldGFpbHMuCitUaGUgZ2VuZXJhdGVkIGJpbmFyeSBpbnN0YWxsZXJzIHdpbGwgY29udGFpbiBhbGwgZmlsZXMgdGhhdCBoYXZlIGJlZW4gaW5zdGFsbGVkCit2aWEgQ01ha2UncyA6Y29tbWFuZDpgaW5zdGFsbGAgY29tbWFuZCAoYW5kIHRoZSBkZXByZWNhdGVkIGNvbW1hbmRzCis6Y29tbWFuZDpgaW5zdGFsbF9maWxlc2AsIDpjb21tYW5kOmBpbnN0YWxsX3Byb2dyYW1zYCwgYW5kCis6Y29tbWFuZDpgaW5zdGFsbF90YXJnZXRzYCkuIE5vdGUgdGhhdCB0aGUgYGBERVNUSU5BVElPTmBgIG9wdGlvbiBvZiB0aGUKKzpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kIG11c3QgYmUgYSByZWxhdGl2ZSBwYXRoOyBvdGhlcndpc2UgaW5zdGFsbGVkIGZpbGVzCithcmUgaWdub3JlZCBieSBDUGFjay4KKworQ2VydGFpbiBraW5kcyBvZiBiaW5hcnkgaW5zdGFsbGVycyBjYW4gYmUgY29uZmlndXJlZCBzdWNoIHRoYXQgdXNlcnMgY2FuIHNlbGVjdAoraW5kaXZpZHVhbCBhcHBsaWNhdGlvbiBjb21wb25lbnRzIHRvIGluc3RhbGwuICBTZWUgdGhlIDptb2R1bGU6YENQYWNrQ29tcG9uZW50YAorbW9kdWxlIGZvciBmdXJ0aGVyIGRldGFpbHMuCisKK1NvdXJjZSBwYWNrYWdlcyAoY29uZmlndXJlZCB0aHJvdWdoIGBgQ1BhY2tTb3VyY2VDb25maWcuY21ha2VgYCBhbmQgZ2VuZXJhdGVkCitieSB0aGUgOmNwYWNrX2dlbjpgQ1BhY2sgQXJjaGl2ZSBHZW5lcmF0b3JgKSB3aWxsIGNvbnRhaW4gYWxsIHNvdXJjZSBmaWxlcyBpbgordGhlIHByb2plY3QgZGlyZWN0b3J5IGV4Y2VwdCB0aG9zZSBzcGVjaWZpZWQgaW4KKzp2YXJpYWJsZTpgQ1BBQ0tfU09VUkNFX0lHTk9SRV9GSUxFU2AuCiAKIENQYWNrIEdlbmVyYXRvcnMKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTM3LDEwICs0Niw2IEBACiA6dmFyaWFibGU6YENQQUNLX0dFTkVSQVRPUmAgaXMgYSAqc3RyaW5nIG5hbWluZyBhIHNpbmdsZSBnZW5lcmF0b3IqLiAgSWYgeW91CiBuZWVkIHBlci1jcGFjay1nZW5lcmF0b3IgbG9naWMgdG8gY29udHJvbCAqb3RoZXIqIGNwYWNrIHNldHRpbmdzLCB0aGVuIHlvdQogbmVlZCBhIDp2YXJpYWJsZTpgQ1BBQ0tfUFJPSkVDVF9DT05GSUdfRklMRWAuCi0KLVRoZSBDTWFrZSBzb3VyY2UgdHJlZSBpdHNlbGYgY29udGFpbnMgYSA6dmFyaWFibGU6YENQQUNLX1BST0pFQ1RfQ09ORklHX0ZJTEVgLgotU2VlIHRoZSB0b3AgbGV2ZWwgZmlsZSBgYENNYWtlQ1BhY2tPcHRpb25zLmNtYWtlLmluYGAgZm9yIGFuIGV4YW1wbGUuCi0KIElmIHNldCwgdGhlIDp2YXJpYWJsZTpgQ1BBQ0tfUFJPSkVDVF9DT05GSUdfRklMRWAgaXMgaW5jbHVkZWQgYXV0b21hdGljYWxseQogb24gYSBwZXItZ2VuZXJhdG9yIGJhc2lzLiAgSXQgb25seSBuZWVkIGNvbnRhaW4gb3ZlcnJpZGVzLgogCkBAIC02Myw2ICs2OCwyNiBAQAogaW50ZXJuYWxseSB0byAqdGhlIG9uZSBjdXJyZW50bHkgYmVpbmcgdXNlZCogYW5kIHRoZW4gaW5jbHVkZSB0aGUKIDp2YXJpYWJsZTpgQ1BBQ0tfUFJPSkVDVF9DT05GSUdfRklMRWAuCiAKK0ZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGdlbmVyYXRvcnMsIHNlZSA6bWFudWFsOmBjcGFjay1nZW5lcmF0b3JzKDcpYC4KKworLi4gX2BwYWNrYWdpbmcgdGFyZ2V0c2A6CisKK1RhcmdldHMgcGFja2FnZSBhbmQgcGFja2FnZV9zb3VyY2UKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSWYgQ01ha2UgaXMgcnVuIHdpdGggdGhlIE1ha2VmaWxlLCBOaW5qYSwgb3IgWGNvZGUgZ2VuZXJhdG9yLCB0aGVuCitgYGluY2x1ZGUoQ1BhY2spYGAgZ2VuZXJhdGVzIGEgdGFyZ2V0IGBgcGFja2FnZWBgLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlCit0byBidWlsZCBhIGJpbmFyeSBpbnN0YWxsZXIgZnJvbSBDTWFrZSwgTWFrZSwgb3IgTmluamE6IEluc3RlYWQgb2YgYGBjcGFja2BgLAorb25lIG1heSBjYWxsIGBgY21ha2UgLS1idWlsZCAuIC0tdGFyZ2V0IHBhY2thZ2VgYCBvciBgYG1ha2UgcGFja2FnZWBgIG9yCitgYG5pbmphIHBhY2thZ2VgYC4gVGhlIFZTIGdlbmVyYXRvciBjcmVhdGVzIGFuIHVwcGVyY2FzZSB0YXJnZXQgYGBQQUNLQUdFYGAuCisKK0lmIENNYWtlIGlzIHJ1biB3aXRoIHRoZSBNYWtlZmlsZSBvciBOaW5qYSBnZW5lcmF0b3IsIHRoZW4gYGBpbmNsdWRlKENQYWNrKWBgCithbHNvIGdlbmVyYXRlcyBhIHRhcmdldCBgYHBhY2thZ2Vfc291cmNlYGAuIFRvIGJ1aWxkIGEgc291cmNlIHBhY2thZ2UsCitpbnN0ZWFkIG9mIGBgY3BhY2sgLUcgVEdaIC0tY29uZmlnIENQYWNrU291cmNlQ29uZmlnLmNtYWtlYGAgb25lIG1heSBjYWxsCitgYGNtYWtlIC0tYnVpbGQgLiAtLXRhcmdldCBwYWNrYWdlX3NvdXJjZWBgLCBgYG1ha2UgcGFja2FnZV9zb3VyY2VgYCwKK29yIGBgbmluamEgcGFja2FnZV9zb3VyY2VgYC4KKworCiBWYXJpYWJsZXMgY29tbW9uIHRvIGFsbCBDUGFjayBHZW5lcmF0b3JzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKQEAgLTM2NSw2ICszOTAsMjEgQEAKICAgc2VsZWN0IHRoZSBDUGFjayBnZW5lcmF0b3IocykgdG8gYmUgdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBgYHBhY2thZ2VgYAogICB0YXJnZXQgb3Igd2hlbiBydW5uaW5nIDptYW51YWw6YGNwYWNrIDxjcGFjaygxKT5gIHdpdGhvdXQgdGhlIGBgLUdgYCBvcHRpb24uCiAKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUFJFX0JVSUxEX1NDUklQVFMKKworICBMaXN0IG9mIENNYWtlIHNjcmlwdHMgdG8gZXhlY3V0ZSBhZnRlciBDUGFjayBoYXMgaW5zdGFsbGVkIHRoZSBmaWxlcyB0bworICBiZSBwYWNrZWQgaW50byBhIHN0YWdpbmcgZGlyZWN0b3J5IGFuZCBiZWZvcmUgcHJvZHVjaW5nIHRoZSByZXN1bHQKKyAgcGFja2FnZXMuCisKKy4uIHZhcmlhYmxlOjogQ1BBQ0tfUE9TVF9CVUlMRF9TQ1JJUFRTCisKKyAgTGlzdCBvZiBDTWFrZSBzY3JpcHRzIHRvIGV4ZWN1dGUgYWZ0ZXIgQ1BhY2sgaGFzIHByb2R1Y2VkIHRoZSByZXN1bHQKKyAgcGFja2FnZXMgYW5kIGJlZm9yZSBjb3B5aW5nIHRoZW0gYmFjayB0byBhIGJ1aWxkIGRpcmVjdG9yeS4KKworLi4gdmFyaWFibGU6OiBDUEFDS19QQUNLQUdFX0ZJTEVTCisKKyAgTGlzdCBvZiByZXN1bHRpbmcgcGFja2FnZSBmaWxlcyBwYXNzZWQgdG8gdGhlIGBgQ1BBQ0tfUE9TVF9CVUlMRF9TQ1JJUFRTYGAuCisKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKICMgRGVmaW5lIHRoaXMgdmFyIGluIG9yZGVyIHRvIGF2b2lkIChvciB3YXJuKSBjb25jZXJuaW5nIG11bHRpcGxlIGluY2x1c2lvbgpAQCAtMzk5LDcgKzQzOSw3IEBACiAjIGZpbmQgYW55IHZhcmlhYmxlIHRoYXQgc3RhcnRzIHdpdGggQ1BBQ0sgYW5kIGNyZWF0ZSBhIHZhcmlhYmxlCiAjIF9DUEFDS19PVEhFUl9WQVJJQUJMRVNfIHRoYXQgY29udGFpbnMgU0VUIGNvbW1hbmRzIGZvcgogIyBlYWNoIGNwYWNrIHZhcmlhYmxlLiAgX0NQQUNLX09USEVSX1ZBUklBQkxFU18gaXMgdGhlbgotIyB1c2VkIGFzIGFuIEAgcmVwbGFjbWVudCBpbiBjb25maWd1cmVfZmlsZSBmb3IgdGhlIENQYWNrQ29uZmlnLgorIyB1c2VkIGFzIGFuIEAgcmVwbGFjZW1lbnQgaW4gY29uZmlndXJlX2ZpbGUgZm9yIHRoZSBDUGFja0NvbmZpZy4KIGZ1bmN0aW9uKGNwYWNrX2VuY29kZV92YXJpYWJsZXMpCiAgIHNldChjb21tYW5kcyAiIikKICAgZ2V0X2NtYWtlX3Byb3BlcnR5KHJlcyBWQVJJQUJMRVMpCkBAIC01NjMsMTEgKzYwMywxOSBAQAogICAgICAgaWYoQVBQTEUpCiAgICAgICAgIG9wdGlvbihDUEFDS19CSU5BUllfQlVORExFICAgICAgICJFbmFibGUgdG8gYnVpbGQgT1NYIGJ1bmRsZXMiICAgICAgT0ZGKQogICAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX0RSQUdORFJPUCAgICAiRW5hYmxlIHRvIGJ1aWxkIE9TWCBEcmFnIEFuZCBEcm9wIHBhY2thZ2UiIE9GRikKLSAgICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9PU1hYMTEgICAgICAgIkVuYWJsZSB0byBidWlsZCBPU1ggWDExIHBhY2thZ2VzIiAgICAgIE9GRikKLSAgICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9QQUNLQUdFTUFLRVIgIkVuYWJsZSB0byBidWlsZCBQYWNrYWdlTWFrZXIgcGFja2FnZXMiIE9GRikKKyAgICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9PU1hYMTEgICAgICAgIkVuYWJsZSB0byBidWlsZCBPU1ggWDExIHBhY2thZ2VzIChkZXByZWNhdGVkKSIgT0ZGKQorICAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX1BBQ0tBR0VNQUtFUiAiRW5hYmxlIHRvIGJ1aWxkIFBhY2thZ2VNYWtlciBwYWNrYWdlcyAoZGVwcmVjYXRlZCkiIE9GRikKICAgICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9QUk9EVUNUQlVJTEQgIkVuYWJsZSB0byBidWlsZCBwcm9kdWN0YnVpbGQgcGFja2FnZXMiIE9GRikKKyAgICAgICAgbWFya19hc19hZHZhbmNlZCgKKyAgICAgICAgICBDUEFDS19CSU5BUllfQlVORExFCisgICAgICAgICAgQ1BBQ0tfQklOQVJZX0RSQUdORFJPUAorICAgICAgICAgIENQQUNLX0JJTkFSWV9PU1hYMTEKKyAgICAgICAgICBDUEFDS19CSU5BUllfUEFDS0FHRU1BS0VSCisgICAgICAgICAgQ1BBQ0tfQklOQVJZX1BST0RVQ1RCVUlMRAorICAgICAgICAgICkKICAgICAgIGVsc2UoKQogICAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX1RaICAiRW5hYmxlIHRvIGJ1aWxkIFRaIHBhY2thZ2VzIiAgICAgT04pCisgICAgICAgIG1hcmtfYXNfYWR2YW5jZWQoQ1BBQ0tfQklOQVJZX1RaKQogICAgICAgZW5kaWYoKQogICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9ERUIgICJFbmFibGUgdG8gYnVpbGQgRGViaWFuIHBhY2thZ2VzIiAgT0ZGKQogICAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9GUkVFQlNEICAiRW5hYmxlIHRvIGJ1aWxkIEZyZWVCU0QgcGFja2FnZXMiICBPRkYpCkBAIC01NzcsNiArNjI1LDE2IEBACiAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX1RCWjIgIkVuYWJsZSB0byBidWlsZCBUQloyIHBhY2thZ2VzIiAgICBPRkYpCiAgICAgICBvcHRpb24oQ1BBQ0tfQklOQVJZX1RHWiAgIkVuYWJsZSB0byBidWlsZCBUR1ogcGFja2FnZXMiICAgICBPTikKICAgICAgIG9wdGlvbihDUEFDS19CSU5BUllfVFhaICAiRW5hYmxlIHRvIGJ1aWxkIFRYWiBwYWNrYWdlcyIgICAgIE9GRikKKyAgICAgIG1hcmtfYXNfYWR2YW5jZWQoCisgICAgICAgIENQQUNLX0JJTkFSWV9ERUIKKyAgICAgICAgQ1BBQ0tfQklOQVJZX0ZSRUVCU0QKKyAgICAgICAgQ1BBQ0tfQklOQVJZX05TSVMKKyAgICAgICAgQ1BBQ0tfQklOQVJZX1JQTQorICAgICAgICBDUEFDS19CSU5BUllfU1RHWgorICAgICAgICBDUEFDS19CSU5BUllfVEJaMgorICAgICAgICBDUEFDS19CSU5BUllfVEdaCisgICAgICAgIENQQUNLX0JJTkFSWV9UWFoKKyAgICAgICAgKQogICAgIGVuZGlmKCkKICAgZWxzZSgpCiAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV83WiAgICAiRW5hYmxlIHRvIGJ1aWxkIDctWmlwIHBhY2thZ2VzIiBPRkYpCkBAIC01ODQsOCArNjQyLDE2IEBACiAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9OVUdFVCAiRW5hYmxlIHRvIGJ1aWxkIE51R2V0IHBhY2thZ2VzIiBPRkYpCiAgICAgb3B0aW9uKENQQUNLX0JJTkFSWV9XSVggICAiRW5hYmxlIHRvIGJ1aWxkIFdpWCBwYWNrYWdlcyIgT0ZGKQogICAgIG9wdGlvbihDUEFDS19CSU5BUllfWklQICAgIkVuYWJsZSB0byBidWlsZCBaSVAgcGFja2FnZXMiIE9GRikKKyAgICBtYXJrX2FzX2FkdmFuY2VkKAorICAgICAgQ1BBQ0tfQklOQVJZXzdaCisgICAgICBDUEFDS19CSU5BUllfTlNJUworICAgICAgQ1BBQ0tfQklOQVJZX05VR0VUCisgICAgICBDUEFDS19CSU5BUllfV0lYCisgICAgICBDUEFDS19CSU5BUllfWklQCisgICAgICApCiAgIGVuZGlmKCkKICAgb3B0aW9uKENQQUNLX0JJTkFSWV9JRlcgIkVuYWJsZSB0byBidWlsZCBJRlcgcGFja2FnZXMiIE9GRikKKyAgbWFya19hc19hZHZhbmNlZChDUEFDS19CSU5BUllfSUZXKQogCiAgIGNwYWNrX29wdGlvbmFsX2FwcGVuZChDUEFDS19HRU5FUkFUT1IgIENQQUNLX0JJTkFSWV83WiAgICAgICAgICAgN1opCiAgIGNwYWNrX29wdGlvbmFsX2FwcGVuZChDUEFDS19HRU5FUkFUT1IgIENQQUNLX0JJTkFSWV9CVU5ETEUgICAgICAgQnVuZGxlKQpAQCAtNjE1LDYgKzY4MSw3IEBACiAgIGlmKFVOSVgpCiAgICAgaWYoQ1lHV0lOKQogICAgICAgb3B0aW9uKENQQUNLX1NPVVJDRV9DWUdXSU4gIkVuYWJsZSB0byBidWlsZCBDeWd3aW4gc291cmNlIHBhY2thZ2VzIiBPTikKKyAgICAgIG1hcmtfYXNfYWR2YW5jZWQoQ1BBQ0tfU09VUkNFX0NZR1dJTikKICAgICBlbHNlKCkKICAgICAgIG9wdGlvbihDUEFDS19TT1VSQ0VfUlBNICAiRW5hYmxlIHRvIGJ1aWxkIFJQTSBzb3VyY2UgcGFja2FnZXMiICBPRkYpCiAgICAgICBvcHRpb24oQ1BBQ0tfU09VUkNFX1RCWjIgIkVuYWJsZSB0byBidWlsZCBUQloyIHNvdXJjZSBwYWNrYWdlcyIgT04pCkBAIC02MjIsMTAgKzY4OSwyMiBAQAogICAgICAgb3B0aW9uKENQQUNLX1NPVVJDRV9UWFogICJFbmFibGUgdG8gYnVpbGQgVFhaIHNvdXJjZSBwYWNrYWdlcyIgIE9OKQogICAgICAgb3B0aW9uKENQQUNLX1NPVVJDRV9UWiAgICJFbmFibGUgdG8gYnVpbGQgVFogc291cmNlIHBhY2thZ2VzIiAgIE9OKQogICAgICAgb3B0aW9uKENQQUNLX1NPVVJDRV9aSVAgICJFbmFibGUgdG8gYnVpbGQgWklQIHNvdXJjZSBwYWNrYWdlcyIgIE9GRikKKyAgICAgIG1hcmtfYXNfYWR2YW5jZWQoCisgICAgICAgIENQQUNLX1NPVVJDRV9SUE0KKyAgICAgICAgQ1BBQ0tfU09VUkNFX1RCWjIKKyAgICAgICAgQ1BBQ0tfU09VUkNFX1RHWgorICAgICAgICBDUEFDS19TT1VSQ0VfVFhaCisgICAgICAgIENQQUNLX1NPVVJDRV9UWgorICAgICAgICBDUEFDS19TT1VSQ0VfWklQCisgICAgICAgICkKICAgICBlbmRpZigpCiAgIGVsc2UoKQogICAgIG9wdGlvbihDUEFDS19TT1VSQ0VfN1ogICJFbmFibGUgdG8gYnVpbGQgNy1aaXAgc291cmNlIHBhY2thZ2VzIiBPTikKICAgICBvcHRpb24oQ1BBQ0tfU09VUkNFX1pJUCAiRW5hYmxlIHRvIGJ1aWxkIFpJUCBzb3VyY2UgcGFja2FnZXMiIE9OKQorICAgIG1hcmtfYXNfYWR2YW5jZWQoCisgICAgICBDUEFDS19TT1VSQ0VfN1oKKyAgICAgIENQQUNLX1NPVVJDRV9aSVAKKyAgICAgICkKICAgZW5kaWYoKQogCiAgIGNwYWNrX29wdGlvbmFsX2FwcGVuZChDUEFDS19TT1VSQ0VfR0VORVJBVE9SICBDUEFDS19TT1VSQ0VfN1ogICAgICA3WikKQEAgLTYzOCwzOCArNzE3LDYgQEAKICAgY3BhY2tfb3B0aW9uYWxfYXBwZW5kKENQQUNLX1NPVVJDRV9HRU5FUkFUT1IgIENQQUNLX1NPVVJDRV9aSVAgICAgIFpJUCkKIGVuZGlmKCkKIAotIyBtYXJrIHRoZSBhYm92ZSBvcHRpb25zIGFzIGFkdmFuY2VkCi1tYXJrX2FzX2FkdmFuY2VkKAotICBDUEFDS19CSU5BUllfN1oKLSAgQ1BBQ0tfQklOQVJZX0JVTkRMRQotICBDUEFDS19CSU5BUllfQ1lHV0lOCi0gIENQQUNLX0JJTkFSWV9ERUIKLSAgQ1BBQ0tfQklOQVJZX0RSQUdORFJPUAotICBDUEFDS19CSU5BUllfRlJFRUJTRAotICBDUEFDS19CSU5BUllfSUZXCi0gIENQQUNLX0JJTkFSWV9OU0lTCi0gIENQQUNLX0JJTkFSWV9OVUdFVAotICBDUEFDS19CSU5BUllfT1NYWDExCi0gIENQQUNLX0JJTkFSWV9QQUNLQUdFTUFLRVIKLSAgQ1BBQ0tfQklOQVJZX1BST0RVQ1RCVUlMRAotICBDUEFDS19CSU5BUllfUlBNCi0gIENQQUNLX0JJTkFSWV9TVEdaCi0gIENQQUNLX0JJTkFSWV9UQloyCi0gIENQQUNLX0JJTkFSWV9UR1oKLSAgQ1BBQ0tfQklOQVJZX1RYWgotICBDUEFDS19CSU5BUllfVFoKLSAgQ1BBQ0tfQklOQVJZX1dJWAotICBDUEFDS19CSU5BUllfWklQCi0gIENQQUNLX1NPVVJDRV83WgotICBDUEFDS19TT1VSQ0VfQ1lHV0lOCi0gIENQQUNLX1NPVVJDRV9SUE0KLSAgQ1BBQ0tfU09VUkNFX1RCWjIKLSAgQ1BBQ0tfU09VUkNFX1RHWgotICBDUEFDS19TT1VSQ0VfVFhaCi0gIENQQUNLX1NPVVJDRV9UWgotICBDUEFDS19TT1VSQ0VfWklQCi0gICkKLQogIyBTZXQgc29tZSBvdGhlciB2YXJpYWJsZXMKIF9jcGFja19zZXRfZGVmYXVsdChDUEFDS19JTlNUQUxMX0NNQUtFX1BST0pFQ1RTCiAgICIke0NNQUtFX0JJTkFSWV9ESVJ9OyR7Q01BS0VfUFJPSkVDVF9OQU1FfTtBTEw7LyIpCkBAIC02ODQsNiArNzMxLDggQEAKICMgdmFsdWUgb2YgQ1BBQ0tfTlNJU19QQUNLQUdFX05BTUUgIGluc3RlYWQKICMgb2YgQ1BBQ0tfUEFDS0FHRV9JTlNUQUxMX0RJUkVDVE9SWQogX2NwYWNrX3NldF9kZWZhdWx0KENQQUNLX05TSVNfRElTUExBWV9OQU1FICIke0NQQUNLX1BBQ0tBR0VfSU5TVEFMTF9ESVJFQ1RPUll9IikKKyMgU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgVW5pbnN0YWxsIGZpbGUgaW4gTlNJUworX2NwYWNrX3NldF9kZWZhdWx0KENQQUNLX05TSVNfVU5JTlNUQUxMX05BTUUgIlVuaW5zdGFsbCIpCiAKIGlmKENQQUNLX05TSVNfRElTUExBWV9OQU1FX1NFVCkKICAgX2NwYWNrX3NldF9kZWZhdWx0KENQQUNLX05TSVNfUEFDS0FHRV9OQU1FICIke0NQQUNLX05TSVNfRElTUExBWV9OQU1FfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NQYWNrQ29tcG9uZW50LmNtYWtlIGIvTW9kdWxlcy9DUGFja0NvbXBvbmVudC5jbWFrZQppbmRleCAyMTFkNzY3Li4xZjhjMzhjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NQYWNrQ29tcG9uZW50LmNtYWtlCisrKyBiL01vZHVsZXMvQ1BhY2tDb21wb25lbnQuY21ha2UKQEAgLTUsMjkgKzUsMzQgQEAKIENQYWNrQ29tcG9uZW50CiAtLS0tLS0tLS0tLS0tLQogCi1CdWlsZCBiaW5hcnkgYW5kIHNvdXJjZSBwYWNrYWdlIGluc3RhbGxlcnMKK0NvbmZpZ3VyZSBjb21wb25lbnRzIGZvciBiaW5hcnkgaW5zdGFsbGVycyBhbmQgc291cmNlIHBhY2thZ2VzLgogCi1WYXJpYWJsZXMgY29uY2VybmluZyBDUGFjayBDb21wb25lbnRzCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisuLiBvbmx5OjogaHRtbAogCi1UaGUgQ1BhY2tDb21wb25lbnQgbW9kdWxlIGlzIHRoZSBtb2R1bGUgd2hpY2ggaGFuZGxlcyB0aGUgY29tcG9uZW50Ci1wYXJ0IG9mIENQYWNrLiAgU2VlIENQYWNrIG1vZHVsZSBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBDUGFjay4KKyAgLi4gY29udGVudHM6OgogCi1Gb3IgY2VydGFpbiBraW5kcyBvZiBiaW5hcnkgaW5zdGFsbGVycyAoaW5jbHVkaW5nIHRoZSBncmFwaGljYWwKLWluc3RhbGxlcnMgb24gbWFjT1MgYW5kIFdpbmRvd3MpLCBDUGFjayBnZW5lcmF0ZXMgaW5zdGFsbGVycyB0aGF0Ci1hbGxvdyB1c2VycyB0byBzZWxlY3QgaW5kaXZpZHVhbCBhcHBsaWNhdGlvbiBjb21wb25lbnRzIHRvIGluc3RhbGwuCi1UaGUgY29udGVudHMgb2YgZWFjaCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaWRlbnRpZmllZCBieSB0aGUgQ09NUE9ORU5UCi1hcmd1bWVudCBvZiBDTWFrZSdzIElOU1RBTEwgY29tbWFuZC4gIFRoZXNlIGNvbXBvbmVudHMgY2FuIGJlCitJbnRyb2R1Y3Rpb24KK15eXl5eXl5eXl5eXgorCitUaGlzIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJ5IDptb2R1bGU6YENQYWNrYC4KKworQ2VydGFpbiBiaW5hcnkgaW5zdGFsbGVycyAoZXNwZWNpYWxseSB0aGUgZ3JhcGhpY2FsIGluc3RhbGxlcnMpIGdlbmVyYXRlZAorYnkgQ1BhY2sgYWxsb3cgdXNlcnMgdG8gc2VsZWN0IGluZGl2aWR1YWwgYXBwbGljYXRpb24gKmNvbXBvbmVudHMqIHRvIGluc3RhbGwuCitUaGlzIG1vZHVsZSBhbGxvd3MgZGV2ZWxvcGVycyB0byBjb25maWd1cmUgdGhlIHBhY2thZ2luZyBvZiBzdWNoIGNvbXBvbmVudHMuCisKK0NvbnRlbnRzIGlzIGFzc2lnbmVkIHRvIGNvbXBvbmVudHMgYnkgdGhlIGBgQ09NUE9ORU5UYGAKK2FyZ3VtZW50IG9mIENNYWtlJ3MgOmNvbW1hbmQ6YGluc3RhbGxgIGNvbW1hbmQuICBDb21wb25lbnRzIGNhbiBiZQogYW5ub3RhdGVkIHdpdGggdXNlci1mcmllbmRseSBuYW1lcyBhbmQgZGVzY3JpcHRpb25zLCBpbnRlci1jb21wb25lbnQKIGRlcGVuZGVuY2llcywgZXRjLiwgYW5kIGdyb3VwZWQgaW4gdmFyaW91cyB3YXlzIHRvIGN1c3RvbWl6ZSB0aGUKLXJlc3VsdGluZyBpbnN0YWxsZXIuICBTZWUgdGhlIGNwYWNrX2FkZF8qIGNvbW1hbmRzLCBkZXNjcmliZWQgYmVsb3csCi1mb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb21wb25lbnQtc3BlY2lmaWMgaW5zdGFsbGF0aW9ucy4KK3Jlc3VsdGluZyBpbnN0YWxsZXIsIHVzaW5nIHRoZSBjb21tYW5kcyBkZXNjcmliZWQgYmVsb3cuCiAKLUNvbXBvbmVudC1zcGVjaWZpYyBpbnN0YWxsYXRpb24gYWxsb3dzIHVzZXJzIHRvIHNlbGVjdCBzcGVjaWZpYyBzZXRzCi1vZiBjb21wb25lbnRzIHRvIGluc3RhbGwgZHVyaW5nIHRoZSBpbnN0YWxsIHByb2Nlc3MuICBJbnN0YWxsYXRpb24KLWNvbXBvbmVudHMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIENPTVBPTkVOVCBhcmd1bWVudCBvZiBDTWFrZSdzIElOU1RBTEwKLWNvbW1hbmRzLCBhbmQgc2hvdWxkIGJlIGZ1cnRoZXIgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgQ1BhY2sKLWNvbW1hbmRzOgorVG8gc3BlY2lmeSBkaWZmZXJlbnQgZ3JvdXBpbmdzIGZvciBkaWZmZXJlbnQgQ1BhY2sgZ2VuZXJhdG9ycyB1c2UKK2EgQ1BBQ0tfUFJPSkVDVF9DT05GSUdfRklMRS4KKworVmFyaWFibGVzCiteXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaW5mbHVlbmNlIHRoZSBjb21wb25lbnQtc3BlY2lmaWMgcGFja2FnaW5nOgogCiAuLiB2YXJpYWJsZTo6IENQQUNLX0NPTVBPTkVOVFNfQUxMCiAKQEAgLTYxLDE2ICs2NiwxNCBAQAogIFNwZWNpZnkgaG93IGNvbXBvbmVudHMgYXJlIGdyb3VwZWQgZm9yIG11bHRpLXBhY2thZ2UgY29tcG9uZW50LWF3YXJlIENQYWNrCiAgZ2VuZXJhdG9ycy4KIAotIFNvbWUgZ2VuZXJhdG9ycyBsaWtlIFJQTSBvciBBUkNISVZFIGZhbWlseSAoVEdaLCBaSVAsIC4uLikgZ2VuZXJhdGVzCi0gc2V2ZXJhbCBwYWNrYWdlcyBmaWxlcyB3aGVuIGFza2VkIGZvciBjb21wb25lbnQgcGFja2FnaW5nLiAgVGhleSBncm91cAotIHRoZSBjb21wb25lbnQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlOgorIFNvbWUgZ2VuZXJhdG9ycyBsaWtlIFJQTSBvciBBUkNISVZFIChUR1osIFpJUCwgLi4uKSBtYXkgZ2VuZXJhdGUKKyBzZXZlcmFsIHBhY2thZ2VzIGZpbGVzIHdoZW4gdGhlcmUgYXJlIGNvbXBvbmVudHMsIGRlcGVuZGluZworIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlOgogCi0gKiBPTkVfUEVSX0dST1VQIChkZWZhdWx0KTogY3JlYXRlcyBvbmUgcGFja2FnZSBmaWxlIHBlciBjb21wb25lbnQgZ3JvdXAKLSAqIEFMTF9DT01QT05FTlRTX0lOX09ORSA6IGNyZWF0ZXMgYSBzaW5nbGUgcGFja2FnZSB3aXRoIGFsbCAocmVxdWVzdGVkKSBjb21wb25lbnRzCi0gKiBJR05PUkUgOiBjcmVhdGVzIG9uZSBwYWNrYWdlIHBlciBjb21wb25lbnQsIGkuZS4gSUdOT1JFIGNvbXBvbmVudCBncm91cAotCi0gT25lIGNhbiBzcGVjaWZ5IGRpZmZlcmVudCBncm91cGluZyBmb3IgZGlmZmVyZW50IENQYWNrIGdlbmVyYXRvciBieQotIHVzaW5nIGEgQ1BBQ0tfUFJPSkVDVF9DT05GSUdfRklMRS4KKyAqIE9ORV9QRVJfR1JPVVAgKGRlZmF1bHQpOiBjcmVhdGUgb25lIHBhY2thZ2UgcGVyIGNvbXBvbmVudCBncm91cAorICogSUdOT1JFIDogY3JlYXRlIG9uZSBwYWNrYWdlIHBlciBjb21wb25lbnQgKGlnbm9yZSB0aGUgZ3JvdXBzKQorICogQUxMX0NPTVBPTkVOVFNfSU5fT05FIDogY3JlYXRlIGEgc2luZ2xlIHBhY2thZ2Ugd2l0aCBhbGwgcmVxdWVzdGVkCisgICBjb21wb25lbnRzCiAKIC4uIHZhcmlhYmxlOjogQ1BBQ0tfQ09NUE9ORU5UXzxjb21wTmFtZT5fRElTUExBWV9OQU1FCiAKQEAgLTEwMCwxMCArMTAzLDE1IEBACiAKICBUcnVlIGlmIHRoaXMgY29tcG9uZW50IGlzIG5vdCBzZWxlY3RlZCB0byBiZSBpbnN0YWxsZWQgYnkgZGVmYXVsdC4KIAorQ29tbWFuZHMKK15eXl5eXl5eCisKK0FkZCBjb21wb25lbnQKKyIiIiIiIiIiIiIiIiIKKwogLi4gY29tbWFuZDo6IGNwYWNrX2FkZF9jb21wb25lbnQKIAotRGVzY3JpYmVzIGEgQ1BhY2sgaW5zdGFsbGF0aW9uCi1jb21wb25lbnQgbmFtZWQgYnkgdGhlIENPTVBPTkVOVCBhcmd1bWVudCB0byBhIENNYWtlIElOU1RBTEwgY29tbWFuZC4KK0Rlc2NyaWJlIGFuIGluc3RhbGxhdGlvbiBjb21wb25lbnQuCiAKIDo6CiAKQEAgLTExOCwxMyArMTI2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgW0FSQ0hJVkVfRklMRSBmaWxlbmFtZV0KICAgICAgICAgICAgICAgICAgICAgICBbUExJU1QgZmlsZW5hbWVdKQogCi0KLQotVGhlIGNtYWtlX2FkZF9jb21wb25lbnQgY29tbWFuZCBkZXNjcmliZXMgYW4gaW5zdGFsbGF0aW9uIGNvbXBvbmVudCwKLXdoaWNoIHRoZSB1c2VyIGNhbiBvcHQgdG8gaW5zdGFsbCBvciByZW1vdmUgYXMgcGFydCBvZiB0aGUgZ3JhcGhpY2FsCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIGNvbXBuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQsIGFzCi1wcm92aWRlZCB0byB0aGUgQ09NUE9ORU5UIGFyZ3VtZW50IG9mIG9uZSBvciBtb3JlIENNYWtlIElOU1RBTEwKLWNvbW1hbmRzLgorYGBjb21wbmFtZWBgIGlzIHRoZSBuYW1lIG9mIGFuIGluc3RhbGxhdGlvbiBjb21wb25lbnQsIGFzIGRlZmluZWQgYnkgdGhlCitgYENPTVBPTkVOVGBgIGFyZ3VtZW50IG9mIG9uZSBvciBtb3JlIENNYWtlIDpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kcy4KK1dpdGggdGhlIGBgY3BhY2tfYWRkX2NvbXBvbmVudGBgIGNvbW1hbmQgb25lIGNhbiBzZXQgYSBuYW1lLCBhIGRlc2NyaXB0aW9uLAorYW5kIG90aGVyIGF0dHJpYnV0ZXMgb2YgYW4gaW5zdGFsbGF0aW9uIGNvbXBvbmVudC4KK09uZSBjYW4gYWxzbyBhc3NpZ24gYSBjb21wb25lbnQgdG8gYSBjb21wb25lbnQgZ3JvdXAuCiAKIERJU1BMQVlfTkFNRSBpcyB0aGUgZGlzcGxheWVkIG5hbWUgb2YgdGhlIGNvbXBvbmVudCwgdXNlZCBpbiBncmFwaGljYWwKIGluc3RhbGxlcnMgdG8gZGlzcGxheSB0aGUgY29tcG9uZW50IG5hbWUuICBUaGlzIHZhbHVlIGNhbiBiZSBhbnkKQEAgLTE3Nyw2ICsxODMsOSBAQAogUExJU1QgZ2l2ZXMgYSBmaWxlbmFtZSB0aGF0IGlzIHBhc3NlZCB0byBwa2didWlsZCB3aXRoIHRoZQogYGAtLWNvbXBvbmVudC1wbGlzdGBgIGFyZ3VtZW50IHdoZW4gdXNpbmcgdGhlIHByb2R1Y3RidWlsZCBnZW5lcmF0b3IuCiAKK0FkZCBjb21wb25lbnQgZ3JvdXAKKyIiIiIiIiIiIiIiIiIiIiIiIiIKKwogLi4gY29tbWFuZDo6IGNwYWNrX2FkZF9jb21wb25lbnRfZ3JvdXAKIAogRGVzY3JpYmVzIGEgZ3JvdXAgb2YgcmVsYXRlZCBDUGFjayBpbnN0YWxsYXRpb24gY29tcG9uZW50cy4KQEAgLTIyNSw2ICsyMzQsOSBAQAogQk9MRF9USVRMRSBpbmRpY2F0ZXMgdGhhdCB0aGUgZ3JvdXAgdGl0bGUgc2hvdWxkIGFwcGVhciBpbiBib2xkLCB0bwogY2FsbCB0aGUgdXNlcidzIGF0dGVudGlvbiB0byB0aGUgZ3JvdXAuCiAKK0FkZCBpbnN0YWxsYXRpb24gdHlwZQorIiIiIiIiIiIiIiIiIiIiIiIiIiIiCisKIC4uIGNvbW1hbmQ6OiBjcGFja19hZGRfaW5zdGFsbF90eXBlCiAKIEFkZCBhIG5ldyBpbnN0YWxsYXRpb24gdHlwZSBjb250YWluaW5nCkBAIC0yNDksNiArMjYxLDkgQEAKIHR5cGljYWxseSBzaG93IHVwIGluIGEgZHJvcC1kb3duIGJveCB3aXRoaW4gYSBncmFwaGljYWwgaW5zdGFsbGVyLgogVGhpcyB2YWx1ZSBjYW4gYmUgYW55IHN0cmluZy4KIAorQ29uZmlndXJlIGRvd25sb2FkcworIiIiIiIiIiIiIiIiIiIiIiIiIgorCiAuLiBjb21tYW5kOjogY3BhY2tfY29uZmlndXJlX2Rvd25sb2FkcwogCiBDb25maWd1cmUgQ1BhY2sgdG8gZG93bmxvYWQKQEAgLTI4MSw4ICsyOTYsNiBAQAogCiAgIGh0dHA6Ly9uc2lzLnNvdXJjZWZvcmdlLm5ldC9aaXBETExfcGx1Zy1pbgogCi0KLQogT24gbWFjT1MsIGluc3RhbGxlcnMgdGhhdCBkb3dubG9hZCBjb21wb25lbnRzIG9uLXRoZS1mbHkgY2FuIG9ubHkKIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgb24gc3lzdGVtIHVzaW5nIG1hY09TIDEwLjUgb3IgbGF0ZXIuCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ1BhY2tJRlcuY21ha2UgYi9Nb2R1bGVzL0NQYWNrSUZXLmNtYWtlCmluZGV4IDQyZWY4YzcuLjU4ZTZhMzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ1BhY2tJRlcuY21ha2UKKysrIGIvTW9kdWxlcy9DUGFja0lGVy5jbWFrZQpAQCAtNSwxNSArNSwxNCBAQAogQ1BhY2tJRlcKIC0tLS0tLS0tCiAKLVRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgQ1BhY2sgSUZXIGdlbmVyYXRvciBoYXMgbW92ZWQgaGVyZTogOmNwYWNrX2dlbjpgQ1BhY2sgSUZXIEdlbmVyYXRvcmAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQogCi0uLiBfUXRJRlc6IGh0dHA6Ly9kb2MucXQuaW8vcXRpbnN0YWxsZXJmcmFtZXdvcmsvaW5kZXguaHRtbAotCi1UaGlzIG1vZHVsZSBsb29rcyBmb3IgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tYW5kIGxpbmUgdXRpbGl0aWVzIHN1cHBsaWVkCi13aXRoIHRoZSBRdCBJbnN0YWxsZXIgRnJhbWV3b3JrIChRdElGV18pLgorVGhpcyBtb2R1bGUgbG9va3MgZm9yIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbWFuZC1saW5lIHV0aWxpdGllcyBzdXBwbGllZCB3aXRoIHRoZQorYFF0IEluc3RhbGxlciBGcmFtZXdvcmsgPGh0dHA6Ly9kb2MucXQuaW8vcXRpbnN0YWxsZXJmcmFtZXdvcmsvaW5kZXguaHRtbD5gXworKFF0SUZXKS4KIAogVGhlIG1vZHVsZSBhbHNvIGRlZmluZXMgc2V2ZXJhbCBjb21tYW5kcyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGUKLUNQYWNrIGBgSUZXYGAgZ2VuZXJhdG9yLgorOmNwYWNrX2dlbjpgQ1BhY2sgSUZXIEdlbmVyYXRvcmAuCiAKIENvbW1hbmRzCiBeXl5eXl5eXgpAQCAtNjIsNyArNjEsNyBAQAogCiAgIGBgRk9SQ0VEX0lOU1RBTExBVElPTmBgCiAgICAgaWYgc2V0LCB0aGVuIHRoZSBjb21wb25lbnQgbXVzdCBhbHdheXMgYmUgaW5zdGFsbGVkLgotICAgIEl0IGlzIGEgZXF1aXZhbGVudCBvZiB0aGUgYGBSRVFVQVJFRGBgIG9wdGlvbiBmcm9tIHRoZQorICAgIEl0IGlzIGEgZXF1aXZhbGVudCBvZiB0aGUgYGBSRVFVSVJFRGBgIG9wdGlvbiBmcm9tIHRoZQogICAgIDpjb21tYW5kOmBjcGFja19hZGRfY29tcG9uZW50YCBjb21tYW5kLgogCiAgIGBgUkVRVUlSRVNfQURNSU5fUklHSFRTYGAKQEAgLTEwMiwxMCArMTAxLDEwIEBACiAKICAgYGBERVBFTkRTYGAgfCBgYERFUEVOREVOQ0lFU2BgCiAgICAgbGlzdCBvZiBkZXBlbmRlbmN5IGNvbXBvbmVudCBvciBjb21wb25lbnQgZ3JvdXAgaWRlbnRpZmllcnMgaW4KLSAgICBRdElGV18gc3R5bGUuCisgICAgUXRJRlcgc3R5bGUuCiAKICAgYGBBVVRPX0RFUEVORF9PTmBgCi0gICAgbGlzdCBvZiBpZGVudGlmaWVycyBvZiBjb21wb25lbnQgb3IgY29tcG9uZW50IGdyb3VwIGluIFF0SUZXXyBzdHlsZQorICAgIGxpc3Qgb2YgaWRlbnRpZmllcnMgb2YgY29tcG9uZW50IG9yIGNvbXBvbmVudCBncm91cCBpbiBRdElGVyBzdHlsZQogICAgIHRoYXQgdGhpcyBjb21wb25lbnQgaGFzIGFuIGF1dG9tYXRpYyBkZXBlbmRlbmN5IG9uLgogCiAgIGBgTElDRU5TRVNgYApAQCAtMjA3LDEwICsyMDYsMTAgQEAKIAogICBgYERFUEVORFNgYCB8IGBgREVQRU5ERU5DSUVTYGAKICAgICBsaXN0IG9mIGRlcGVuZGVuY3kgY29tcG9uZW50IG9yIGNvbXBvbmVudCBncm91cCBpZGVudGlmaWVycyBpbgotICAgIFF0SUZXXyBzdHlsZS4KKyAgICBRdElGVyBzdHlsZS4KIAogICBgYEFVVE9fREVQRU5EX09OYGAKLSAgICBsaXN0IG9mIGlkZW50aWZpZXJzIG9mIGNvbXBvbmVudCBvciBjb21wb25lbnQgZ3JvdXAgaW4gUXRJRldfIHN0eWxlCisgICAgbGlzdCBvZiBpZGVudGlmaWVycyBvZiBjb21wb25lbnQgb3IgY29tcG9uZW50IGdyb3VwIGluIFF0SUZXIHN0eWxlCiAgICAgdGhhdCB0aGlzIGNvbXBvbmVudCBncm91cCBoYXMgYW4gYXV0b21hdGljIGRlcGVuZGVuY3kgb24uCiAKICAgYGBMSUNFTlNFU2BgCkBAIC0yNDIsNyArMjQxLDcgQEAKIAogLi4gY29tbWFuZDo6IGNwYWNrX2lmd19hZGRfcmVwb3NpdG9yeQogCi0gIEFkZCBRdElGV18gc3BlY2lmaWMgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYmluYXJ5IGluc3RhbGxlci4KKyAgQWRkIFF0SUZXIHNwZWNpZmljIHJlbW90ZSByZXBvc2l0b3J5IHRvIGJpbmFyeSBpbnN0YWxsZXIuCiAKICAgOjoKIApAQCAtMjczLDcgKzI3Miw3IEBACiAKIC4uIGNvbW1hbmQ6OiBjcGFja19pZndfdXBkYXRlX3JlcG9zaXRvcnkKIAotICBVcGRhdGUgUXRJRldfIHNwZWNpZmljIHJlcG9zaXRvcnkgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS4KKyAgVXBkYXRlIFF0SUZXIHNwZWNpZmljIHJlcG9zaXRvcnkgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS4KIAogICA6OgogCkBAIC0zNjIsNiArMzYxLDggQEAKICAgIlF0SUZXLSIpCiAKIHNldChfQ1BBQ0tfSUZXX1ZFUlNJT05TCisgICIzLjIiCisgICIzLjIuMCIKICAgIjMuMSIKICAgIjMuMS4wIgogICAiMy4wIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DUGFja0lGV0NvbmZpZ3VyZUZpbGUuY21ha2UgYi9Nb2R1bGVzL0NQYWNrSUZXQ29uZmlndXJlRmlsZS5jbWFrZQppbmRleCAwYWJlMGRhLi4yOTZiMTNmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NQYWNrSUZXQ29uZmlndXJlRmlsZS5jbWFrZQorKysgYi9Nb2R1bGVzL0NQYWNrSUZXQ29uZmlndXJlRmlsZS5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENQYWNrSUZXQ29uZmlndXJlRmlsZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBUaGUgbW9kdWxlIGRlZmluZXMgOmNvbW1hbmQ6YGNvbmZpZ3VyZV9maWxlYCBzaW1pbGFyIGNvbW1hbmQgdG8KIGNvbmZpZ3VyZSBmaWxlIHRlbXBsYXRlcyBwcmVwYXJlZCBpbiBRdElGVy9TREsvQ3JlYXRvciBzdHlsZS4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DU2hhcnBVdGlsaXRpZXMuY21ha2UgYi9Nb2R1bGVzL0NTaGFycFV0aWxpdGllcy5jbWFrZQppbmRleCA2YTRiNWM3Li5kZWRiMTQ2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NTaGFycFV0aWxpdGllcy5jbWFrZQorKysgYi9Nb2R1bGVzL0NTaGFycFV0aWxpdGllcy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENTaGFycFV0aWxpdGllcwogLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuOAorCiBGdW5jdGlvbnMgdG8gbWFrZSBjb25maWd1cmF0aW9uIG9mIENTaGFycC8uTkVUIHRhcmdldHMgZWFzaWVyLgogCiBBIGNvbGxlY3Rpb24gb2YgQ01ha2UgdXRpbGl0eSBmdW5jdGlvbnMgdXNlZnVsIGZvciBkZWFsaW5nIHdpdGggQ1NoYXJwCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NUZXN0LmNtYWtlIGIvTW9kdWxlcy9DVGVzdC5jbWFrZQppbmRleCAzYTExMWNhLi44MTA5MTA4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NUZXN0LmNtYWtlCisrKyBiL01vZHVsZXMvQ1Rlc3QuY21ha2UKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgICJIb3cgbWFueSB0aW1lcyB0byByZXRyeSB0aW1lZC1vdXQgQ1Rlc3Qgc3VibWlzc2lvbnMuIikKIAogICBmaW5kX3Byb2dyYW0oTUVNT1JZQ0hFQ0tfQ09NTUFORAotICAgIE5BTUVTIHB1cmlmeSB2YWxncmluZCBib3VuZHNjaGVjaworICAgIE5BTUVTIHB1cmlmeSB2YWxncmluZCBib3VuZHNjaGVjayBkcm1lbW9yeQogICAgIFBBVEhTCiAgICAgIltIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxSYXRpb25hbCBTb2Z0d2FyZVxcUHVyaWZ5XFxTZXR1cDtJbnN0YWxsRm9sZGVyXSIKICAgICBET0MgIlBhdGggdG8gdGhlIG1lbW9yeSBjaGVja2luZyBjb21tYW5kLCB1c2VkIGZvciBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uLiIKQEAgLTI0Myw3ICsyNDMsNiBAQAogCiAgIG1hcmtfYXNfYWR2YW5jZWQoCiAgICAgQlpSQ09NTUFORAotICAgIEJaUl9VUERBVEVfT1BUSU9OUwogICAgIENPVkVSQUdFX0NPTU1BTkQKICAgICBDT1ZFUkFHRV9FWFRSQV9GTEFHUwogICAgIENURVNUX1NVQk1JVF9SRVRSWV9ERUxBWQpAQCAtMjU3LDEzICsyNTYsMTAgQEAKICAgICBNQUtFQ09NTUFORAogICAgIE1FTU9SWUNIRUNLX0NPTU1BTkQKICAgICBNRU1PUllDSEVDS19TVVBQUkVTU0lPTlNfRklMRQotICAgIFBVUklGWUNPTU1BTkQKLSAgICBTQ1BDT01NQU5ECiAgICAgU0xVUk1fU0JBVENIX0NPTU1BTkQKICAgICBTTFVSTV9TUlVOX0NPTU1BTkQKICAgICBTSVRFCiAgICAgU1ZOQ09NTUFORAotICAgIFNWTl9VUERBVEVfT1BUSU9OUwogICAgICkKICAgaWYoTk9UIFJVTl9GUk9NX0RBUlQpCiAgICAgc2V0KFJVTl9GUk9NX0NURVNUX09SX0RBUlQgMSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WLmNtYWtlIGIvTW9kdWxlcy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YuY21ha2UKaW5kZXggZmY0OGNjMi4uYTAxYTJmZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YuY21ha2UKKysrIGIvTW9kdWxlcy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YuY21ha2UKQEAgLTUsNiArNSw4IEBACiBDVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGBgY3Rlc3RfY292ZXJhZ2VfY29sbGVjdF9nY292YGAgZnVuY3Rpb24uCiAKIFRoaXMgZnVuY3Rpb24gcnVucyBnY292IG9uIGFsbCAuZ2NkYSBmaWxlcyBmb3VuZCBpbiB0aGUgYmluYXJ5IHRyZWUKQEAgLTM3LDYgKzM5LDE3IEBACiAgICAgdXBsb2FkIHRvIENEYXNoLiAgUmVsYXRpdmUgcGF0aHMgd2lsbCBiZSBpbnRlcnByZXRlZCB3aXRoIHJlc3BlY3QKICAgICB0byB0aGUgdG9wLWxldmVsIGJ1aWxkIGRpcmVjdG9yeS4KIAorICBgYFRBUkJBTExfQ09NUFJFU1NJT04gPG9wdGlvbj5gYCBTcGVjaWZ5IGEgY29tcHJlc3Npb24gYWxnb3JpdGhtIGZvciB0aGUKKyAgICBgYFRBUkJBTExgYCBkYXRhIGZpbGUuICBVc2luZyB0aGlzIG9wdGlvbiByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkYXRhIGZpbGUKKyAgICBiZWZvcmUgaXQgaXMgc3VibWl0dGVkIHRvIENEYXNoLiAgYGA8b3B0aW9uPmBgIG11c3QgYmUgb25lIG9mIGBgR1pJUGBgLAorICAgIGBgQlpJUDJgYCwgYGBYWmBgLCBgYFpTVERgYCwgYGBGUk9NX0VYVGBgLCBvciBhbiBleHByZXNzaW9uIHRoYXQgQ01ha2UKKyAgICBldmFsdWF0ZXMgYXMgYGBGQUxTRWBgLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYEJaSVAyYGAuCisKKyAgICBJZiBgYEZST01fRVhUYGAgaXMgc3BlY2lmaWVkLCB0aGUgcmVzdWx0aW5nIGZpbGUgd2lsbCBiZSBjb21wcmVzc2VkIGJhc2VkIG9uCisgICAgdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBgYDx0YXJmaWxlPmBgIChpLmUuIGBgLnRhci5nemBgIHdpbGwgdXNlIGBgR1pJUGBgCisgICAgY29tcHJlc3Npb24pLiBGaWxlIGV4dGVuc2lvbnMgdGhhdCB3aWxsIHByb2R1Y2UgY29tcHJlc3NlZCBvdXRwdXQgaW5jbHVkZQorICAgIGBgLnRhci5nemBgLCBgYC50Z3pgYCwgYGAudGFyLmJ6aXAyYGAsIGBgLnRiemBgLCBgYC50YXIueHpgYCwgYW5kIGBgLnR4emBgLgorCiAgIGBgU09VUkNFIDxzb3VyY2VfZGlyPmBgCiAgICAgU3BlY2lmeSB0aGUgdG9wLWxldmVsIHNvdXJjZSBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZC4KICAgICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiA6dmFyaWFibGU6YENURVNUX1NPVVJDRV9ESVJFQ1RPUllgLgpAQCAtNjgsNyArODEsNyBAQAogCiBmdW5jdGlvbihjdGVzdF9jb3ZlcmFnZV9jb2xsZWN0X2djb3YpCiAgIHNldChvcHRpb25zIFFVSUVUIEdMT0IgREVMRVRFKQotICBzZXQob25lVmFsdWVBcmdzIFRBUkJBTEwgU09VUkNFIEJVSUxEIEdDT1ZfQ09NTUFORCkKKyAgc2V0KG9uZVZhbHVlQXJncyBUQVJCQUxMIFNPVVJDRSBCVUlMRCBHQ09WX0NPTU1BTkQgVEFSQkFMTF9DT01QUkVTU0lPTikKICAgc2V0KG11bHRpVmFsdWVBcmdzIEdDT1ZfT1BUSU9OUykKICAgY21ha2VfcGFyc2VfYXJndW1lbnRzKEdDT1YgICIke29wdGlvbnN9IiAiJHtvbmVWYWx1ZUFyZ3N9IgogICAgICIke211bHRpVmFsdWVBcmdzfSIgIiIgJHtBUkdOfSApCkBAIC05MSw2ICsxMDQsMTMgQEAKICAgZWxzZSgpCiAgICAgc2V0KGdjb3ZfY29tbWFuZCAiJHtHQ09WX0dDT1ZfQ09NTUFORH0iKQogICBlbmRpZigpCisgIGlmKE5PVCBERUZJTkVEIEdDT1ZfVEFSQkFMTF9DT01QUkVTU0lPTikKKyAgICBzZXQoR0NPVl9UQVJCQUxMX0NPTVBSRVNTSU9OICJCWklQMiIpCisgIGVsc2VpZiggR0NPVl9UQVJCQUxMX0NPTVBSRVNTSU9OIEFORAorICAgICAgTk9UIEdDT1ZfVEFSQkFMTF9DT01QUkVTU0lPTiBNQVRDSEVTICJeKEdaSVB8QlpJUDJ8WFp8WlNURHxGUk9NX0VYVCkkIikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUQVJCQUxMX0NPTVBSRVNTSU9OIG11c3QgYmUgb25lIG9mIE9GRiwgR1pJUCwgIgorICAgICAgIkJaSVAyLCBYWiwgWlNURCwgb3IgRlJPTV9FWFQgZm9yIGN0ZXN0X2NvdmVyYWdlX2NvbGxlY3RfZ2NvdiIpCisgIGVuZGlmKCkKICAgIyBydW4gZ2NvdiBvbiBlYWNoIGdjZGEgZmlsZSBpbiB0aGUgYmluYXJ5IHRyZWUKICAgc2V0KGdjZGFfZmlsZXMpCiAgIHNldChsYWJlbF9maWxlcykKQEAgLTEzNywxMSArMTU3LDIzIEBACiAgIGlmKE5PVCBERUZJTkVEIEdDT1ZfR0NPVl9PUFRJT05TKQogICAgIHNldChHQ09WX0dDT1ZfT1BUSU9OUyAtYiAteCkKICAgZW5kaWYoKQorICBpZiAoR0NPVl9RVUlFVCkKKyAgICBzZXQoY292ZXJhZ2Vfb3V0X29wdHMKKyAgICAgIE9VVFBVVF9RVUlFVAorICAgICAgRVJST1JfUVVJRVQKKyAgICAgICkKKyAgZWxzZSgpCisgICAgc2V0KGNvdmVyYWdlX291dF9vcHRzCisgICAgICBPVVRQVVRfRklMRSAiJHtjb3ZlcmFnZV9kaXJ9L2djb3YubG9nIgorICAgICAgRVJST1JfRklMRSAgIiR7Y292ZXJhZ2VfZGlyfS9nY292LmxvZyIKKyAgICAgICkKKyAgZW5kaWYoKQogICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORAogICAgICR7Z2Nvdl9jb21tYW5kfSAke0dDT1ZfR0NPVl9PUFRJT05TfSAke2djZGFfZmlsZXN9Ci0gICAgT1VUUFVUX1ZBUklBQkxFIG91dAogICAgIFJFU1VMVF9WQVJJQUJMRSByZXMKLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke2NvdmVyYWdlX2Rpcn0pCisgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtjb3ZlcmFnZV9kaXJ9CisgICAgJHtjb3ZlcmFnZV9vdXRfb3B0c30KKyAgICApCiAKICAgaWYgKEdDT1ZfREVMRVRFKQogICAgIGZpbGUoUkVNT1ZFICR7Z2NkYV9maWxlc30pCkBAIC0xNDksNyArMTgxLDcgQEAKIAogICBpZihOT1QgIiR7cmVzfSIgRVFVQUwgMCkKICAgICBpZiAoTk9UIEdDT1ZfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiRXJyb3IgcnVubmluZyBnY292OiAke3Jlc30gJHtvdXR9IikKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJFcnJvciBydW5uaW5nIGdjb3Y6ICR7cmVzfSwgc2VlXG4gICR7Y292ZXJhZ2VfZGlyfS9nY292LmxvZyIpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAgICMgY3JlYXRlIGpzb24gZmlsZSB3aXRoIHByb2plY3QgaW5mb3JtYXRpb24KQEAgLTI1OCwxNCArMjkwLDM4IEBACiAke3VuY292ZXJlZF9maWxlc19mb3JfdGFyfQogIikKIAotICBpZiAoR0NPVl9RVUlFVCkKLSAgICBzZXQodGFyX29wdHMgImNmaiIpCi0gIGVsc2UoKQotICAgIHNldCh0YXJfb3B0cyAiY3ZmaiIpCisgICMgUHJlcGFyZSB0YXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworCisgIHNldCh0YXJfb3B0cyAiIikKKyAgIyBTZWxlY3QgZGF0YSBjb21wcmVzc2lvbiBtb2RlCisgIGlmKCBHQ09WX1RBUkJBTExfQ09NUFJFU1NJT04gU1RSRVFVQUwgIkZST01fRVhUIikKKyAgICBpZiggR0NPVl9UQVJCQUxMIE1BVENIRVMgW1tcLih0Z3p8dGFyLmd6KSRdXSApCisgICAgICBzdHJpbmcoQVBQRU5EIHRhcl9vcHRzICJ6IikKKyAgICBlbHNlaWYoIEdDT1ZfVEFSQkFMTCBNQVRDSEVTIFtbXC4odHh6fHRhci54eikkXV0gKQorICAgICAgc3RyaW5nKEFQUEVORCB0YXJfb3B0cyAiSiIpCisgICAgZWxzZWlmKCBHQ09WX1RBUkJBTEwgTUFUQ0hFUyBbW1wuKHRienx0YXIuYnopJF1dICkKKyAgICAgIHN0cmluZyhBUFBFTkQgdGFyX29wdHMgImoiKQorICAgIGVuZGlmKCkKKyAgZWxzZWlmKEdDT1ZfVEFSQkFMTF9DT01QUkVTU0lPTiBTVFJFUVVBTCAiR1pJUCIpCisgICAgc3RyaW5nKEFQUEVORCB0YXJfb3B0cyAieiIpCisgIGVsc2VpZihHQ09WX1RBUkJBTExfQ09NUFJFU1NJT04gU1RSRVFVQUwgIlhaIikKKyAgICBzdHJpbmcoQVBQRU5EIHRhcl9vcHRzICJKIikKKyAgZWxzZWlmKEdDT1ZfVEFSQkFMTF9DT01QUkVTU0lPTiBTVFJFUVVBTCAiQlpJUDIiKQorICAgIHN0cmluZyhBUFBFTkQgdGFyX29wdHMgImoiKQorICBlbHNlaWYoR0NPVl9UQVJCQUxMX0NPTVBSRVNTSU9OIFNUUkVRVUFMICJaU1REIikKKyAgICBzZXQoenN0ZF90YXJfb3B0ICItLXpzdGQiKQogICBlbmRpZigpCisgICMgVmVyYm9zaXR5IG9wdGlvbnMKKyAgaWYoTk9UIEdDT1ZfUVVJRVQgQU5EIE5PVCB0YXJfb3B0cyBNQVRDSEVTIHYpCisgICAgc3RyaW5nKEFQUEVORCB0YXJfb3B0cyAidiIpCisgIGVuZGlmKCkKKyAgIyBQcmVwZW5kIG9wdGlvbiAnYycgc3BlY2lmeWluZyAnY3JlYXRlJworICBzdHJpbmcoUFJFUEVORCB0YXJfb3B0cyAiYyIpCisgICMgQXBwZW5kIG9wdGlvbiAnZicgc28gdGhhdCB0aGUgbmV4dCBhcmd1bWVudCBpcyB0aGUgZmlsZW5hbWUKKyAgc3RyaW5nKEFQUEVORCB0YXJfb3B0cyAiZiIpCiAKICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQKLSAgICAke0NNQUtFX0NPTU1BTkR9IC1FIHRhciAke3Rhcl9vcHRzfSAke0dDT1ZfVEFSQkFMTH0KKyAgICAke0NNQUtFX0NPTU1BTkR9IC1FIHRhciAke3Rhcl9vcHRzfSAke0dDT1ZfVEFSQkFMTH0gJHt6c3RkX3Rhcl9vcHR9CiAgICAgIi0tbXRpbWU9MTk3MC0wMS0wMSAwOjA6MCBVVEMiCiAgICAgIi0tZm9ybWF0PWdudXRhciIKICAgICAtLWZpbGVzLWZyb209JHtjb3ZlcmFnZV9kaXJ9L2NvdmVyYWdlX2ZpbGVfbGlzdC50eHQKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tDQ29tcGlsZXJGbGFnLmNtYWtlIGIvTW9kdWxlcy9DaGVja0NDb21waWxlckZsYWcuY21ha2UKaW5kZXggYTNlMmRhMy4uNmQ2NTMxMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0NDb21waWxlckZsYWcuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0NDb21waWxlckZsYWcuY21ha2UKQEAgLTM2LDI4ICszNiwyMyBAQAogaW5jbHVkZShDaGVja0NTb3VyY2VDb21waWxlcykKIGluY2x1ZGUoQ01ha2VDaGVja0NvbXBpbGVyRmxhZ0NvbW1vblBhdHRlcm5zKQogCi1tYWNybyAoQ0hFQ0tfQ19DT01QSUxFUl9GTEFHIF9GTEFHIF9SRVNVTFQpCi0gIHNldChTQUZFX0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TICIke0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TfSIpCi0gIHNldChDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OUyAiJHtfRkxBR30iKQorZnVuY3Rpb24oY2hlY2tfY19jb21waWxlcl9mbGFnIF9mbGFnIF92YXIpCisgIHNldChDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OUyAiJHtfZmxhZ30iKQogCi0gICAjIE5vcm1hbGl6ZSBsb2NhbGUgZHVyaW5nIHRlc3QgY29tcGlsYXRpb24uCi0gIHNldChfQ2hlY2tDQ29tcGlsZXJGbGFnX0xPQ0FMRV9WQVJTIExDX0FMTCBMQ19NRVNTQUdFUyBMQU5HKQotICBmb3JlYWNoKHYgJHtfQ2hlY2tDQ29tcGlsZXJGbGFnX0xPQ0FMRV9WQVJTfSkKLSAgICBzZXQoX0NoZWNrQ0NvbXBpbGVyRmxhZ19TQVZFRF8ke3Z9ICIkRU5WeyR7dn19IikKKyAgIyBOb3JtYWxpemUgbG9jYWxlIGR1cmluZyB0ZXN0IGNvbXBpbGF0aW9uLgorICBzZXQoX2xvY2FsZV92YXJzIExDX0FMTCBMQ19NRVNTQUdFUyBMQU5HKQorICBmb3JlYWNoKHYgSU4gTElTVFMgX2xvY2FsZV92YXJzKQorICAgIHNldChfbG9jYWxlX3ZhcnNfc2F2ZWRfJHt2fSAiJEVOVnske3Z9fSIpCiAgICAgc2V0KEVOVnske3Z9fSBDKQogICBlbmRmb3JlYWNoKCkKLSAgQ0hFQ0tfQ09NUElMRVJfRkxBR19DT01NT05fUEFUVEVSTlMoX0NoZWNrQ0NvbXBpbGVyRmxhZ19DT01NT05fUEFUVEVSTlMpCi0gIENIRUNLX0NfU09VUkNFX0NPTVBJTEVTKCJpbnQgbWFpbih2b2lkKSB7IHJldHVybiAwOyB9IiAke19SRVNVTFR9CisgIGNoZWNrX2NvbXBpbGVyX2ZsYWdfY29tbW9uX3BhdHRlcm5zKF9jb21tb25fcGF0dGVybnMpCisgIGNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCJpbnQgbWFpbih2b2lkKSB7IHJldHVybiAwOyB9IiAke192YXJ9CiAgICAgIyBTb21lIGNvbXBpbGVycyBkbyBub3QgZmFpbCB3aXRoIGEgYmFkIGZsYWcKICAgICBGQUlMX1JFR0VYICJjb21tYW5kIGxpbmUgb3B0aW9uIC4qIGlzIHZhbGlkIGZvciAuKiBidXQgbm90IGZvciBDIiAjIEdOVQotICAgICR7X0NoZWNrQ0NvbXBpbGVyRmxhZ19DT01NT05fUEFUVEVSTlN9CisgICAgJHtfY29tbW9uX3BhdHRlcm5zfQogICAgICkKLSAgZm9yZWFjaCh2ICR7X0NoZWNrQ0NvbXBpbGVyRmxhZ19MT0NBTEVfVkFSU30pCi0gICAgc2V0KEVOVnske3Z9fSAke19DaGVja0NDb21waWxlckZsYWdfU0FWRURfJHt2fX0pCi0gICAgdW5zZXQoX0NoZWNrQ0NvbXBpbGVyRmxhZ19TQVZFRF8ke3Z9KQorICBmb3JlYWNoKHYgSU4gTElTVFMgX2xvY2FsZV92YXJzKQorICAgIHNldChFTlZ7JHt2fX0gJHtfbG9jYWxlX3ZhcnNfc2F2ZWRfJHt2fX0pCiAgIGVuZGZvcmVhY2goKQotICB1bnNldChfQ2hlY2tDQ29tcGlsZXJGbGFnX0xPQ0FMRV9WQVJTKQotICB1bnNldChfQ2hlY2tDQ29tcGlsZXJGbGFnX0NPTU1PTl9QQVRURVJOUykKLQotICBzZXQgKENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TICIke1NBRkVfQ01BS0VfUkVRVUlSRURfREVGSU5JVElPTlN9IikKLWVuZG1hY3JvICgpCisgIHNldCgke192YXJ9ICIkeyR7X3Zhcn19IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrQ1NvdXJjZUNvbXBpbGVzLmNtYWtlIGIvTW9kdWxlcy9DaGVja0NTb3VyY2VDb21waWxlcy5jbWFrZQppbmRleCA3N2JhMGNjLi42N2ZjOTkzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrQ1NvdXJjZUNvbXBpbGVzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tDU291cmNlQ29tcGlsZXMuY21ha2UKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgIiR7U09VUkNFfVxuIikKIAogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfY29tcGlsZSgke1ZBUn0KICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgIGlmKCR7VkFSfSkKICAgICAgIHNldCgke1ZBUn0gMSBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIFN1Y2Nlc3MiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgIlN1Y2Nlc3MiKQogICAgICAgZW5kaWYoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgQyBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBzdWNjZWVkZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICAiU291cmNlIGZpbGUgd2FzOlxuJHtTT1VSQ0V9XG4iKQogICAgIGVsc2UoKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIEZhaWxlZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiRmFpbGVkIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUn0gIiIgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tDU291cmNlUnVucy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tDU291cmNlUnVucy5jbWFrZQppbmRleCBlYmE3MGYyLi43ZDExNmRiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrQ1NvdXJjZVJ1bnMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0NTb3VyY2VSdW5zLmNtYWtlCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAiJHtTT1VSQ0V9XG4iKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQorICAgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCiAgICAgZW5kaWYoKQogICAgIHRyeV9ydW4oJHtWQVJ9X0VYSVRDT0RFICR7VkFSfV9DT01QSUxFRAogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgaWYoIiR7JHtWQVJ9X0VYSVRDT0RFfSIgRVFVQUwgMCkKICAgICAgIHNldCgke1ZBUn0gMSBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIFN1Y2Nlc3MiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgIlN1Y2Nlc3MiKQogICAgICAgZW5kaWYoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgQyBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBzdWNjZWVkZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbXBpbGUgb3V0cHV0OlxuIgpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICBlbmRpZigpCiAKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBGYWlsZWQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIkZhaWxlZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIEMgU09VUkNFIEZJTEUgVGVzdCAke1ZBUn0gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb21waWxlIG91dHB1dDpcbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tDWFhDb21waWxlckZsYWcuY21ha2UgYi9Nb2R1bGVzL0NoZWNrQ1hYQ29tcGlsZXJGbGFnLmNtYWtlCmluZGV4IDU3Mjk4NDMuLjVlMDdjMjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tDWFhDb21waWxlckZsYWcuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0NYWENvbXBpbGVyRmxhZy5jbWFrZQpAQCAtMzYsMjggKzM2LDIzIEBACiBpbmNsdWRlKENoZWNrQ1hYU291cmNlQ29tcGlsZXMpCiBpbmNsdWRlKENNYWtlQ2hlY2tDb21waWxlckZsYWdDb21tb25QYXR0ZXJucykKIAotbWFjcm8gKENIRUNLX0NYWF9DT01QSUxFUl9GTEFHIF9GTEFHIF9SRVNVTFQpCi0gIHNldChTQUZFX0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TICIke0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TfSIpCi0gIHNldChDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OUyAiJHtfRkxBR30iKQorZnVuY3Rpb24oY2hlY2tfY3h4X2NvbXBpbGVyX2ZsYWcgX2ZsYWcgX3ZhcikKKyAgc2V0KENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TICIke19mbGFnfSIpCiAKICAgIyBOb3JtYWxpemUgbG9jYWxlIGR1cmluZyB0ZXN0IGNvbXBpbGF0aW9uLgotICBzZXQoX0NoZWNrQ1hYQ29tcGlsZXJGbGFnX0xPQ0FMRV9WQVJTIExDX0FMTCBMQ19NRVNTQUdFUyBMQU5HKQotICBmb3JlYWNoKHYgJHtfQ2hlY2tDWFhDb21waWxlckZsYWdfTE9DQUxFX1ZBUlN9KQotICAgIHNldChfQ2hlY2tDWFhDb21waWxlckZsYWdfU0FWRURfJHt2fSAiJEVOVnske3Z9fSIpCisgIHNldChfbG9jYWxlX3ZhcnMgTENfQUxMIExDX01FU1NBR0VTIExBTkcpCisgIGZvcmVhY2godiBJTiBMSVNUUyBfbG9jYWxlX3ZhcnMpCisgICAgc2V0KF9sb2NhbGVfdmFyc19zYXZlZF8ke3Z9ICIkRU5WeyR7dn19IikKICAgICBzZXQoRU5WeyR7dn19IEMpCiAgIGVuZGZvcmVhY2goKQotICBDSEVDS19DT01QSUxFUl9GTEFHX0NPTU1PTl9QQVRURVJOUyhfQ2hlY2tDWFhDb21waWxlckZsYWdfQ09NTU9OX1BBVFRFUk5TKQotICBDSEVDS19DWFhfU09VUkNFX0NPTVBJTEVTKCJpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0iICR7X1JFU1VMVH0KKyAgY2hlY2tfY29tcGlsZXJfZmxhZ19jb21tb25fcGF0dGVybnMoX2NvbW1vbl9wYXR0ZXJucykKKyAgY2hlY2tfY3h4X3NvdXJjZV9jb21waWxlcygiaW50IG1haW4oKSB7IHJldHVybiAwOyB9IiAke192YXJ9CiAgICAgIyBTb21lIGNvbXBpbGVycyBkbyBub3QgZmFpbCB3aXRoIGEgYmFkIGZsYWcKICAgICBGQUlMX1JFR0VYICJjb21tYW5kIGxpbmUgb3B0aW9uIC4qIGlzIHZhbGlkIGZvciAuKiBidXQgbm90IGZvciBDXFxcXCtcXFxcKyIgIyBHTlUKLSAgICAke19DaGVja0NYWENvbXBpbGVyRmxhZ19DT01NT05fUEFUVEVSTlN9CisgICAgJHtfY29tbW9uX3BhdHRlcm5zfQogICAgICkKLSAgZm9yZWFjaCh2ICR7X0NoZWNrQ1hYQ29tcGlsZXJGbGFnX0xPQ0FMRV9WQVJTfSkKLSAgICBzZXQoRU5WeyR7dn19ICR7X0NoZWNrQ1hYQ29tcGlsZXJGbGFnX1NBVkVEXyR7dn19KQotICAgIHVuc2V0KF9DaGVja0NYWENvbXBpbGVyRmxhZ19TQVZFRF8ke3Z9KQorICBmb3JlYWNoKHYgSU4gTElTVFMgX2xvY2FsZV92YXJzKQorICAgIHNldChFTlZ7JHt2fX0gJHtfbG9jYWxlX3ZhcnNfc2F2ZWRfJHt2fX0pCiAgIGVuZGZvcmVhY2goKQotICB1bnNldChfQ2hlY2tDWFhDb21waWxlckZsYWdfTE9DQUxFX1ZBUlMpCi0gIHVuc2V0KF9DaGVja0NYWENvbXBpbGVyRmxhZ19DT01NT05fUEFUVEVSTlMpCi0KLSAgc2V0IChDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OUyAiJHtTQUZFX0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TfSIpCi1lbmRtYWNybyAoKQorICBzZXQoJHtfdmFyfSAiJHske192YXJ9fSIgUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja0NYWFNvdXJjZUNvbXBpbGVzLmNtYWtlIGIvTW9kdWxlcy9DaGVja0NYWFNvdXJjZUNvbXBpbGVzLmNtYWtlCmluZGV4IGNjNDU3YTUuLmM2OTNkMzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tDWFhTb3VyY2VDb21waWxlcy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrQ1hYU291cmNlQ29tcGlsZXMuY21ha2UKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgIiR7U09VUkNFfVxuIikKIAogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfY29tcGlsZSgke1ZBUn0KICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgIGlmKCR7VkFSfSkKICAgICAgIHNldCgke1ZBUn0gMSBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIFN1Y2Nlc3MiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgIlN1Y2Nlc3MiKQogICAgICAgZW5kaWYoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgQysrIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgICJTb3VyY2UgZmlsZSB3YXM6XG4ke1NPVVJDRX1cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gRmFpbGVkIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJGYWlsZWQiKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KCR7VkFSfSAiIiBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja0NYWFNvdXJjZVJ1bnMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrQ1hYU291cmNlUnVucy5jbWFrZQppbmRleCA1ZTNmMTk1Li40MDhlMTgzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrQ1hYU291cmNlUnVucy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrQ1hYU291cmNlUnVucy5jbWFrZQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgIiR7U09VUkNFfVxuIikKIAogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfcnVuKCR7VkFSfV9FWElUQ09ERSAke1ZBUn1fQ09NUElMRUQKICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIGlmKCIkeyR7VkFSfV9FWElUQ09ERX0iIEVRVUFMIDApCiAgICAgICBzZXQoJHtWQVJ9IDEgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBTdWNjZXNzIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJTdWNjZXNzIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIEMrKyBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBzdWNjZWVkZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgZW5kaWYoKQogCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gRmFpbGVkIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJGYWlsZWQiKQogICAgICAgZW5kaWYoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiUGVyZm9ybWluZyBDKysgU09VUkNFIEZJTEUgVGVzdCAke1ZBUn0gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrRm9ydHJhbkNvbXBpbGVyRmxhZy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tGb3J0cmFuQ29tcGlsZXJGbGFnLmNtYWtlCmluZGV4IDI5OWNkOGMuLmI4ZmFjOTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuQ29tcGlsZXJGbGFnLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tGb3J0cmFuQ29tcGlsZXJGbGFnLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ2hlY2tGb3J0cmFuQ29tcGlsZXJGbGFnCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIENoZWNrIHdoZXRoZXIgdGhlIEZvcnRyYW4gY29tcGlsZXIgc3VwcG9ydHMgYSBnaXZlbiBmbGFnLgogCiAuLiBjb21tYW5kOjogY2hlY2tfZm9ydHJhbl9jb21waWxlcl9mbGFnCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrRm9ydHJhbkZ1bmN0aW9uRXhpc3RzLmNtYWtlIGIvTW9kdWxlcy9DaGVja0ZvcnRyYW5GdW5jdGlvbkV4aXN0cy5jbWFrZQppbmRleCA3Y2EyMDVhLi5kMDYyMDNmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrRm9ydHJhbkZ1bmN0aW9uRXhpc3RzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tGb3J0cmFuRnVuY3Rpb25FeGlzdHMuY21ha2UKQEAgLTM4LDcgKzM4LDcgQEAKIAogbWFjcm8oQ0hFQ0tfRk9SVFJBTl9GVU5DVElPTl9FWElTVFMgRlVOQ1RJT04gVkFSSUFCTEUpCiAgIGlmKE5PVCBERUZJTkVEICR7VkFSSUFCTEV9KQotICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBGb3J0cmFuICR7RlVOQ1RJT059IikKKyAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciBGb3J0cmFuICR7RlVOQ1RJT059IikKICAgICBpZihDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlMpCiAgICAgICBzZXQoQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0FERF9MSU5LX09QVElPTlMKICAgICAgICAgTElOS19PUFRJT05TICR7Q01BS0VfUkVRVUlSRURfTElOS19PUFRJT05TfSkKQEAgLTYxLDIxICs2MSwyMCBAQAogICAgICIKICAgICApCiAgICAgdHJ5X2NvbXBpbGUoJHtWQVJJQUJMRX0KLSAgICAke0NNQUtFX0JJTkFSWV9ESVJ9Ci0gICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC90ZXN0Rm9ydHJhbkNvbXBpbGVyLmYKLSAgICAke0NIRUNLX0ZVTkNUSU9OX0VYSVNUU19BRERfTElOS19PUFRJT05TfQotICAgICR7Q0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0FERF9MSUJSQVJJRVN9Ci0gICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVAorICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQorICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC90ZXN0Rm9ydHJhbkNvbXBpbGVyLmYKKyAgICAgICR7Q0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0FERF9MSU5LX09QVElPTlN9CisgICAgICAke0NIRUNLX0ZVTkNUSU9OX0VYSVNUU19BRERfTElCUkFSSUVTfQorICAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVAogICAgICkKLSMgICAgbWVzc2FnZShTVEFUVVMgIiR7T1VUUFVUfSIpCiAgICAgaWYoJHtWQVJJQUJMRX0pCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gMSBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBGb3J0cmFuIGZ1bmN0aW9uICR7RlVOQ1RJT059IikKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBGb3J0cmFuICR7RlVOQ1RJT059IC0gZm91bmQiKQorICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIEZvcnRyYW4gJHtGVU5DVElPTn0gZXhpc3RzIHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgogICAgICAgICAiJHtPVVRQVVR9XG5cbiIpCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgRm9ydHJhbiAke0ZVTkNUSU9OfSAtIG5vdCBmb3VuZCIpCisgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gIiIgQ0FDSEUgSU5URVJOQUwgIkhhdmUgRm9ydHJhbiBmdW5jdGlvbiAke0ZVTkNUSU9OfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgRm9ydHJhbiAke0ZVTkNUSU9OfSBleGlzdHMgZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrRm9ydHJhblNvdXJjZUNvbXBpbGVzLmNtYWtlIGIvTW9kdWxlcy9DaGVja0ZvcnRyYW5Tb3VyY2VDb21waWxlcy5jbWFrZQppbmRleCBmOTRiMjU0Li5kNzc2YjBjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrRm9ydHJhblNvdXJjZUNvbXBpbGVzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlQ29tcGlsZXMuY21ha2UKQEAgLTUsNiArNSw4IEBACiBDaGVja0ZvcnRyYW5Tb3VyY2VDb21waWxlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIENoZWNrIGlmIGdpdmVuIEZvcnRyYW4gc291cmNlIGNvbXBpbGVzIGFuZCBsaW5rcyBpbnRvIGFuIGV4ZWN1dGFibGUuCiAKIC4uIGNvbW1hbmQ6OiBjaGVja19mb3J0cmFuX3NvdXJjZV9jb21waWxlcwpAQCAtMTAzLDggKzEwNSw2IEBACiAgICAgaWYoTk9UIF9TUkNfRVhUKQogICAgICAgc2V0KF9TUkNfRVhUIEYpCiAgICAgZW5kaWYoKQotICAgIHNldChNQUNST19DSEVDS19GVU5DVElPTl9ERUZJTklUSU9OUwotICAgICAgIi1EJHtWQVJ9ICR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IikKICAgICBpZihDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlMpCiAgICAgICBzZXQoQ0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0xJTktfT1BUSU9OUwogICAgICAgICBMSU5LX09QVElPTlMgJHtDTUFLRV9SRVFVSVJFRF9MSU5LX09QVElPTlN9KQpAQCAtMTI3LDE1ICsxMjcsMTUgQEAKICAgICAgICIke1NPVVJDRX1cbiIpCiAKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKICAgICBlbmRpZigpCiAgICAgdHJ5X2NvbXBpbGUoJHtWQVJ9CiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3NyYy4ke19TUkNfRVhUfQotICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyAke0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TfQorICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyAtRCR7VkFSfSAke0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TfQogICAgICAgJHtDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFU19BRERfTElOS19PUFRJT05TfQogICAgICAgJHtDSEVDS19Gb3J0cmFuX1NPVVJDRV9DT01QSUxFU19BRERfTElCUkFSSUVTfQotICAgICAgQ01BS0VfRkxBR1MgLURDT01QSUxFX0RFRklOSVRJT05TOlNUUklORz0ke01BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TfQorICAgICAgQ01BS0VfRkxBR1MgLURDT01QSUxFX0RFRklOSVRJT05TOlNUUklORz0ke0NNQUtFX1JFUVVJUkVEX0ZMQUdTfQogICAgICAgIiR7Q0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0lOQ0xVREVTfSIKICAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgIGlmKCR7VkFSfSkKICAgICAgIHNldCgke1ZBUn0gMSBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIFN1Y2Nlc3MiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgIlN1Y2Nlc3MiKQogICAgICAgZW5kaWYoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgRm9ydHJhbiBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBzdWNjZWVkZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAiU291cmNlIGZpbGUgd2FzOlxuJHtTT1VSQ0V9XG4iKQogICAgIGVsc2UoKQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIEZhaWxlZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiRmFpbGVkIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUn0gIiIgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlUnVucy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tGb3J0cmFuU291cmNlUnVucy5jbWFrZQppbmRleCBhODBjMTNkLi5hNzEwMzUyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrRm9ydHJhblNvdXJjZVJ1bnMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0ZvcnRyYW5Tb3VyY2VSdW5zLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ2hlY2tGb3J0cmFuU291cmNlUnVucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE0CisKIENoZWNrIGlmIGdpdmVuIEZvcnRyYW4gc291cmNlIGNvbXBpbGVzIGFuZCBsaW5rcyBpbnRvIGFuIGV4ZWN1dGFibGUgYW5kIGNhbgogc3Vic2VxdWVudGx5IGJlIHJ1bi4KIApAQCAtOTgsOCArMTAwLDYgQEAKICAgICBpZihOT1QgX1NSQ19FWFQpCiAgICAgICBzZXQoX1NSQ19FWFQgRjkwKQogICAgIGVuZGlmKCkKLSAgICBzZXQoTUFDUk9fQ0hFQ0tfRlVOQ1RJT05fREVGSU5JVElPTlMKLSAgICAgICItRCR7VkFSfSAke0NNQUtFX1JFUVVJUkVEX0ZMQUdTfSIpCiAgICAgaWYoQ01BS0VfUkVRVUlSRURfTElOS19PUFRJT05TKQogICAgICAgc2V0KENIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTX0FERF9MSU5LX09QVElPTlMKICAgICAgICAgTElOS19PUFRJT05TICR7Q01BS0VfUkVRVUlSRURfTElOS19PUFRJT05TfSkKQEAgLTEyMiwxNSArMTIyLDE1IEBACiAgICAgICAiJHtTT1VSQ0V9XG4iKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQorICAgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCiAgICAgZW5kaWYoKQogICAgIHRyeV9ydW4oJHtWQVJ9X0VYSVRDT0RFICR7VkFSfV9DT01QSUxFRAogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9zcmMuJHtfU1JDX0VYVH0KLSAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgJHtDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OU30KKyAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgLUQke1ZBUn0gJHtDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OU30KICAgICAgICR7Q0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0xJTktfT1BUSU9OU30KICAgICAgICR7Q0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVNfQUREX0xJQlJBUklFU30KLSAgICAgIENNQUtFX0ZMQUdTIC1EQ09NUElMRV9ERUZJTklUSU9OUzpTVFJJTkc9JHtNQUNST19DSEVDS19GVU5DVElPTl9ERUZJTklUSU9OU30KKyAgICAgIENNQUtFX0ZMQUdTIC1EQ09NUElMRV9ERUZJTklUSU9OUzpTVFJJTkc9JHtDTUFLRV9SRVFVSVJFRF9GTEFHU30KICAgICAgIC1EQ01BS0VfU0tJUF9SUEFUSDpCT09MPSR7Q01BS0VfU0tJUF9SUEFUSH0KICAgICAgICIke0NIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTX0FERF9JTkNMVURFU30iCiAgICAgICBDT01QSUxFX09VVFBVVF9WQVJJQUJMRSBPVVRQVVQKQEAgLTE0NCw3ICsxNDQsNyBAQAogICAgIGlmKCIkeyR7VkFSfV9FWElUQ09ERX0iIEVRVUFMIDApCiAgICAgICBzZXQoJHtWQVJ9IDEgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBTdWNjZXNzIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJTdWNjZXNzIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIEZvcnRyYW4gU09VUkNFIEZJTEUgVGVzdCAke1ZBUn0gc3VjY2VlZGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICAgIGVuZGlmKCkKIAogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIEZhaWxlZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiRmFpbGVkIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgRm9ydHJhbiBTT1VSQ0UgRklMRSBUZXN0ICR7VkFSfSBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tGdW5jdGlvbkV4aXN0cy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tGdW5jdGlvbkV4aXN0cy5jbWFrZQppbmRleCBjMzkxNDRmLi4xMzZkYTg5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrRnVuY3Rpb25FeGlzdHMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0Z1bmN0aW9uRXhpc3RzLmNtYWtlCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgc2V0KE1BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TCiAgICAgICAiLURDSEVDS19GVU5DVElPTl9FWElTVFM9JHtGVU5DVElPTn0gJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30iKQogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0ZVTkNUSU9OfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciAke0ZVTkNUSU9OfSIpCiAgICAgZW5kaWYoKQogICAgIGlmKENNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OUykKICAgICAgIHNldChDSEVDS19GVU5DVElPTl9FWElTVFNfQUREX0xJTktfT1BUSU9OUwpAQCAtMTAxLDE0ICsxMDEsMTQgQEAKICAgICBpZigke1ZBUklBQkxFfSkKICAgICAgIHNldCgke1ZBUklBQkxFfSAxIENBQ0hFIElOVEVSTkFMICJIYXZlIGZ1bmN0aW9uICR7RlVOQ1RJT059IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7RlVOQ1RJT059IC0gZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgZnVuY3Rpb24gJHtGVU5DVElPTn0gZXhpc3RzIHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgogICAgICAgICAiJHtPVVRQVVR9XG5cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0ZVTkNUSU9OfSAtIG5vdCBmb3VuZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm90IGZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUklBQkxFfSAiIiBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBmdW5jdGlvbiAke0ZVTkNUSU9OfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrSVBPU3VwcG9ydGVkLmNtYWtlIGIvTW9kdWxlcy9DaGVja0lQT1N1cHBvcnRlZC5jbWFrZQppbmRleCAwZDZhZDIwLi4xZGQ5NTFkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrSVBPU3VwcG9ydGVkLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tJUE9TdXBwb3J0ZWQuY21ha2UKQEAgLTUsNiArNSw4IEBACiBDaGVja0lQT1N1cHBvcnRlZAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIENoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGFuIGludGVycHJvY2VkdXJhbCBvcHRpbWl6YXRpb24gKElQTy9MVE8pLgogVXNlIHRoaXMgYmVmb3JlIGVuYWJsaW5nIHRoZSA6cHJvcF90Z3Q6YElOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05gIHRhcmdldAogcHJvcGVydHkuCkBAIC0xMTMsNyArMTE1LDcgQEAKICAgZW5kZm9yZWFjaCgpCiAKICAgdHJ5X2NvbXBpbGUoCi0gICAgICByZXN1bHQKKyAgICAgIF9JUE9fTEFOR1VBR0VfQ0hFQ0tfUkVTVUxUCiAgICAgICAiJHtiaW5kaXJ9IgogICAgICAgIiR7c3JjZGlyfSIKICAgICAgICIke1RSWV9DT01QSUxFX1BST0pFQ1RfTkFNRX0iCkBAIC0xMjIsOCArMTI0LDEwIEBACiAgICAgICAiLURDTUFLRV9JTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OPU9OIgogICAgICAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAogICApCisgIHNldChfSVBPX0xBTkdVQUdFX0NIRUNLX1JFU1VMVCAiJHtfSVBPX0xBTkdVQUdFX0NIRUNLX1JFU1VMVH0iKQorICB1bnNldChfSVBPX0xBTkdVQUdFX0NIRUNLX1JFU1VMVCBDQUNIRSkKIAotICBpZihOT1QgcmVzdWx0KQorICBpZihOT1QgX0lQT19MQU5HVUFHRV9DSEVDS19SRVNVTFQpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgIiR7bGFuZ3VhZ2V9IGNvbXBpbGVyIElQTyBjaGVjayBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICIke291dHB1dH1cbiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGUuY21ha2UgYi9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGUuY21ha2UKaW5kZXggZDdiOTQ4MS4uM2ExMDQ3MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tJbmNsdWRlRmlsZS5jbWFrZQpAQCAtNTUsNyArNTUsNyBAQAogICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlLmMuaW4KICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VUbXAvQ2hlY2tJbmNsdWRlRmlsZS5jKQogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0lOQ0xVREV9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkxvb2tpbmcgZm9yICR7SU5DTFVERX0iKQogICAgIGVuZGlmKCkKICAgICBpZigke0FSR0N9IEVRVUFMIDMpCiAgICAgICBzZXQoQ01BS0VfQ19GTEFHU19TQVZFICR7Q01BS0VfQ19GTEFHU30pCkBAIC0xMDksNyArMTA5LDcgQEAKIAogICAgIGlmKCR7VkFSSUFCTEV9KQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgJHtJTkNMVURFfSAtIGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gMSBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBpbmNsdWRlICR7SU5DTFVERX0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICAiJHtPVVRQVVR9XG5cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0lOQ0xVREV9IC0gbm90IGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJub3QgZm91bmQiKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KCR7VkFSSUFCTEV9ICIiIENBQ0hFIElOVEVSTkFMICJIYXZlIGluY2x1ZGUgJHtJTkNMVURFfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGVDWFguY21ha2UgYi9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGVDWFguY21ha2UKaW5kZXggZGU1YTgzYi4uNDk2NTUwZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tJbmNsdWRlRmlsZUNYWC5jbWFrZQpAQCAtNTQsNyArNTQsNyBAQAogICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlLmN4eC5pbgogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9DaGVja0luY2x1ZGVGaWxlLmN4eCkKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgQysrIGluY2x1ZGUgJHtJTkNMVURFfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciBDKysgaW5jbHVkZSAke0lOQ0xVREV9IikKICAgICBlbmRpZigpCiAgICAgaWYoJHtBUkdDfSBFUVVBTCAzKQogICAgICAgc2V0KENNQUtFX0NYWF9GTEFHU19TQVZFICR7Q01BS0VfQ1hYX0ZMQUdTfSkKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgaWYoJHtWQVJJQUJMRX0pCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBDKysgaW5jbHVkZSAke0lOQ0xVREV9IC0gZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUklBQkxFfSAxIENBQ0hFIElOVEVSTkFMICJIYXZlIGluY2x1ZGUgJHtJTkNMVURFfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICIke09VVFBVVH1cblxuIikKICAgICBlbHNlKCkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yIEMrKyBpbmNsdWRlICR7SU5DTFVERX0gLSBub3QgZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gIiIgQ0FDSEUgSU5URVJOQUwgIkhhdmUgaW5jbHVkZSAke0lOQ0xVREV9IikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tJbmNsdWRlRmlsZXMuY21ha2UgYi9Nb2R1bGVzL0NoZWNrSW5jbHVkZUZpbGVzLmNtYWtlCmluZGV4IGY1MmFiNTUuLjhlMTBjZDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tJbmNsdWRlRmlsZXMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlcy5jbWFrZQpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgZW5kaWYoKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7X2Rlc2NyaXB0aW9ufSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciAke19kZXNjcmlwdGlvbn0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfY29tcGlsZSgke1ZBUklBQkxFfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgdW5zZXQoX0NJRl9MSU5LX0xJQlJBUklFUykKICAgICBpZigke1ZBUklBQkxFfSkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7X2Rlc2NyaXB0aW9ufSAtIGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gMSBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBpbmNsdWRlICR7SU5DTFVERX0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAiJHtPVVRQVVR9XG5cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke19kZXNjcmlwdGlvbn0gLSBub3QgZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gIiIgQ0FDSEUgSU5URVJOQUwgIkhhdmUgaW5jbHVkZXMgJHtJTkNMVURFfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrTGFuZ3VhZ2UuY21ha2UgYi9Nb2R1bGVzL0NoZWNrTGFuZ3VhZ2UuY21ha2UKaW5kZXggOTVlNGZiZS4uNDQzODdkNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja0xhbmd1YWdlLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tMYW5ndWFnZS5jbWFrZQpAQCAtMjAsNyArMjAsNyBAQAogYXMgdGhlIGNvbXBpbGVyIHRoYXQgd2FzIGZvdW5kLCBvciBgYE5PVEZPVU5EYGAgaWYgdGhlIGxhbmd1YWdlIGNhbm5vdCBiZQogZW5hYmxlZC4gRm9yIENVREEgd2hpY2ggY2FuIGhhdmUgYW4gZXhwbGljaXQgaG9zdCBjb21waWxlciwgdGhlIGNhY2hlCiA6dmFyaWFibGU6YENNQUtFX0NVREFfSE9TVF9DT01QSUxFUmAgdmFyaWFibGUgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIHJlcXVpcmVkCi1mb3IgY29tcGlsYXRpb24uCitmb3IgY29tcGlsYXRpb24gKGFuZCBjbGVhcmVkIGlmIGl0IHdhcyBub3QpLgogCiBFeGFtcGxlOgogCkBAIC0zOSw3ICszOSw3IEBACiBtYWNybyhjaGVja19sYW5ndWFnZSBsYW5nKQogICBpZihOT1QgREVGSU5FRCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSKQogICAgIHNldChfZGVzYyAiTG9va2luZyBmb3IgYSAke2xhbmd9IGNvbXBpbGVyIikKLSAgICBtZXNzYWdlKFNUQVRVUyAke19kZXNjfSkKKyAgICBtZXNzYWdlKENIRUNLX1NUQVJUICIke19kZXNjfSIpCiAgICAgZmlsZShSRU1PVkVfUkVDVVJTRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9DaGVjayR7bGFuZ30pCiAKICAgICBzZXQoZXh0cmFfY29tcGlsZXJfdmFyaWFibGVzKQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgc2V0KGV4dHJhX2NvbXBpbGVyX3ZhcmlhYmxlcyAic2V0KENNQUtFX0NVREFfSE9TVF9DT01QSUxFUiBcXFwiXCR7Q01BS0VfQ1VEQV9IT1NUX0NPTVBJTEVSfVxcXCIpIikKICAgICBlbmRpZigpCiAKLSAgICBzZXQoY29udGVudAorICAgIHNldChfY2xfY29udGVudAogICAgICAgImNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAke0NNQUtFX1ZFUlNJT059KQogcHJvamVjdChDaGVjayR7bGFuZ30gJHtsYW5nfSkKIGZpbGUoV1JJVEUgXCJcJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Jlc3VsdC5jbWFrZVwiCkBAIC01NywzNCArNTcsNDIgQEAKICAgICApCiAKICAgICBmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9DaGVjayR7bGFuZ30vQ01ha2VMaXN0cy50eHQiCi0gICAgICAiJHtjb250ZW50fSIpCisgICAgICAiJHtfY2xfY29udGVudH0iKQogICAgIGlmKENNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRSkKICAgICAgIHNldChfRF9DTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UgIi1EQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFOklOVEVSTkFMPSR7Q01BS0VfR0VORVJBVE9SX0lOU1RBTkNFfSIpCiAgICAgZWxzZSgpCiAgICAgICBzZXQoX0RfQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFICIiKQogICAgIGVuZGlmKCkKKyAgICBpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiXihYY29kZSR8R3JlZW4gSGlsbHMgTVVMVEkkfFZpc3VhbCBTdHVkaW8pIikKKyAgICAgIHNldChfRF9DTUFLRV9NQUtFX1BST0dSQU0gIiIpCisgICAgZWxzZSgpCisgICAgICBzZXQoX0RfQ01BS0VfTUFLRV9QUk9HUkFNICItRENNQUtFX01BS0VfUFJPR1JBTTpGSUxFUEFUSD0ke0NNQUtFX01BS0VfUFJPR1JBTX0iKQorICAgIGVuZGlmKCkKICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9DaGVjayR7bGFuZ30KICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAuIC1HICR7Q01BS0VfR0VORVJBVE9SfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUEgIiR7Q01BS0VfR0VORVJBVE9SX1BMQVRGT1JNfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1UICIke0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7X0RfQ01BS0VfR0VORVJBVE9SX0lOU1RBTkNFfQotICAgICAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAotICAgICAgRVJST1JfVkFSSUFCTEUgb3V0cHV0Ci0gICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke19EX0NNQUtFX01BS0VfUFJPR1JBTX0KKyAgICAgIE9VVFBVVF9WQVJJQUJMRSBfY2xfb3V0cHV0CisgICAgICBFUlJPUl9WQVJJQUJMRSBfY2xfb3V0cHV0CisgICAgICBSRVNVTFRfVkFSSUFCTEUgX2NsX3Jlc3VsdAogICAgICAgKQogICAgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvQ2hlY2ske2xhbmd9L3Jlc3VsdC5jbWFrZSBPUFRJT05BTCkKLSAgICBpZihDTUFLRV8ke2xhbmd9X0NPTVBJTEVSIEFORCAiJHtyZXN1bHR9IiBTVFJFUVVBTCAiMCIpCisgICAgaWYoQ01BS0VfJHtsYW5nfV9DT01QSUxFUiBBTkQgIiR7X2NsX3Jlc3VsdH0iIFNUUkVRVUFMICIwIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICIke19kZXNjfSBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKLSAgICAgICAgIiR7b3V0cHV0fVxuIikKKyAgICAgICAgIiR7X2NsX291dHB1dH1cbiIpCisgICAgICBzZXQoX0NIRUNLX0NPTVBJTEVSX1NUQVRVUyBDSEVDS19QQVNTKQogICAgIGVsc2UoKQogICAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRVIgTk9URk9VTkQpCisgICAgICBzZXQoX0NIRUNLX0NPTVBJTEVSX1NUQVRVUyBDSEVDS19GQUlMKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiJHtfZGVzY30gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCi0gICAgICAgICIke291dHB1dH1cbiIpCisgICAgICAgICIke19jbF9vdXRwdXR9XG4iKQogICAgIGVuZGlmKCkKLSAgICBtZXNzYWdlKFNUQVRVUyAiJHtfZGVzY30gLSAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJ9IikKKyAgICBtZXNzYWdlKCR7X0NIRUNLX0NPTVBJTEVSX1NUQVRVU30gIiR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUn0iKQogICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSICIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJ9IiBDQUNIRSBGSUxFUEFUSCAiJHtsYW5nfSBjb21waWxlciIpCiAgICAgbWFya19hc19hZHZhbmNlZChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrTGlicmFyeUV4aXN0cy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tMaWJyYXJ5RXhpc3RzLmNtYWtlCmluZGV4IDY1MDRkZjUuLjY0NzBkZmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tMaWJyYXJ5RXhpc3RzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tMaWJyYXJ5RXhpc3RzLmNtYWtlCkBAIC00Miw3ICs0Miw3IEBACiAgICAgc2V0KE1BQ1JPX0NIRUNLX0xJQlJBUllfRVhJU1RTX0RFRklOSVRJT04KICAgICAgICItRENIRUNLX0ZVTkNUSU9OX0VYSVNUUz0ke0ZVTkNUSU9OfSAke0NNQUtFX1JFUVVJUkVEX0ZMQUdTfSIpCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7RlVOQ1RJT059IGluICR7TElCUkFSWX0iKQorICAgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiTG9va2luZyBmb3IgJHtGVU5DVElPTn0gaW4gJHtMSUJSQVJZfSIpCiAgICAgZW5kaWYoKQogICAgIHNldChDSEVDS19MSUJSQVJZX0VYSVNUU19MSU5LX09QVElPTlMpCiAgICAgaWYoQ01BS0VfUkVRVUlSRURfTElOS19PUFRJT05TKQpAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgaWYoJHtWQVJJQUJMRX0pCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0ZVTkNUSU9OfSBpbiAke0xJQlJBUll9IC0gZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUklBQkxFfSAxIENBQ0hFIElOVEVSTkFMICJIYXZlIGxpYnJhcnkgJHtMSUJSQVJZfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwpAQCAtODcsNyArODcsNyBAQAogICAgICAgICAiJHtPVVRQVVR9XG5cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciAke0ZVTkNUSU9OfSBpbiAke0xJQlJBUll9IC0gbm90IGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJub3QgZm91bmQiKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KCR7VkFSSUFCTEV9ICIiIENBQ0hFIElOVEVSTkFMICJIYXZlIGxpYnJhcnkgJHtMSUJSQVJZfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrTGlua2VyRmxhZy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tMaW5rZXJGbGFnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNzMwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL0NoZWNrTGlua2VyRmxhZy5jbWFrZQpAQCAtMCwwICsxLDgzIEBACisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKKyNbPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1bLnJzdDoKK0NoZWNrTGlua2VyRmxhZworLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTgKKworQ2hlY2sgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYSBnaXZlbiBsaW5rIGZsYWcuCisKKy4uIGNvbW1hbmQ6OiBjaGVja19saW5rZXJfZmxhZworCisgIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICAgY2hlY2tfbGlua2VyX2ZsYWcoPGxhbmc+IDxmbGFnPiA8dmFyPikKKworQ2hlY2sgdGhhdCB0aGUgbGluayBgYDxmbGFnPmBgIGlzIGFjY2VwdGVkIGJ5IHRoZSBgYDxsYW5nPmBgIGNvbXBpbGVyIHdpdGhvdXQKK2EgZGlhZ25vc3RpYy4gIFN0b3JlcyB0aGUgcmVzdWx0IGluIGFuIGludGVybmFsIGNhY2hlIGVudHJ5IG5hbWVkIGBgPHZhcj5gYC4KKworVGhpcyBjb21tYW5kIHRlbXBvcmFyaWx5IHNldHMgdGhlIGBgQ01BS0VfUkVRVUlSRURfTElOS19PUFRJT05TYGAgdmFyaWFibGUKK2FuZCBjYWxscyB0aGUgYGBjaGVja188bGFuZz5fc291cmNlX2NvbXBpbGVzYGAgbWFjcm8gZnJvbSB0aGUKK2BgQ2hlY2s8bGFuZz5Tb3VyY2VDb21waWxlc2BgIG1vZHVsZSAoOm1vZHVsZTpgQ2hlY2tDU291cmNlQ29tcGlsZXNgLAorOm1vZHVsZTpgQ2hlY2tDU291cmNlQ29tcGlsZXNgLCA6bW9kdWxlOmBDaGVja0NYWFNvdXJjZUNvbXBpbGVzYCwKKzptb2R1bGU6YENoZWNrT0JKQ1NvdXJjZUNvbXBpbGVzYCwgOm1vZHVsZTpgQ2hlY2tPQkpDWFhTb3VyY2VDb21waWxlc2Agb3IKKzptb2R1bGU6YENoZWNrRm9ydHJhblNvdXJjZUNvbXBpbGVzYCkuICBTZWUgZG9jdW1lbnRhdGlvbiBvZiB0aGVzZQorbW9kdWxlcyBmb3IgYSBsaXN0aW5nIG9mIHZhcmlhYmxlcyB0aGF0IGNhbiBvdGhlcndpc2UgbW9kaWZ5IHRoZSBidWlsZC4KKworVGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gcmVseSBvbiA6cHJvcF90Z3Q6YExJTktfT1BUSU9OU2AgcHJvcGVydHkgdG8KK2NoZWNrIHRoZSBzcGVjaWZpZWQgZmxhZy4gVGhlIGBgTElOS0VSOmBgIHByZWZpeCwgYXMgZGVzY3JpYmVkIGluCis6Y29tbWFuZDpgdGFyZ2V0X2xpbmtfb3B0aW9uc2AgY29tbWFuZCwgY2FuIGJlIHVzZWQgYXMgd2VsbC4KKworQSBwb3NpdGl2ZSByZXN1bHQgZnJvbSB0aGlzIGNoZWNrIGluZGljYXRlcyBvbmx5IHRoYXQgdGhlIGNvbXBpbGVyIGRpZCBub3QKK2lzc3VlIGEgZGlhZ25vc3RpYyBtZXNzYWdlIHdoZW4gZ2l2ZW4gdGhlIGxpbmsgZmxhZy4gIFdoZXRoZXIgdGhlIGZsYWcgaGFzIGFueQorZWZmZWN0IG9yIGV2ZW4gYSBzcGVjaWZpYyBvbmUgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIG1vZHVsZS4KKworLi4gbm90ZTo6CisgIFNpbmNlIHRoZSA6Y29tbWFuZDpgdHJ5X2NvbXBpbGVgIGNvbW1hbmQgZm9yd2FyZHMgZmxhZ3MgZnJvbSB2YXJpYWJsZXMKKyAgbGlrZSA6dmFyaWFibGU6YENNQUtFXzxMQU5HPl9GTEFHU2AsIHVua25vd24gZmxhZ3MgaW4gc3VjaCB2YXJpYWJsZXMgbWF5CisgIGNhdXNlIGEgZmFsc2UgbmVnYXRpdmUgZm9yIHRoaXMgY2hlY2suCisjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQorCitpbmNsdWRlX2d1YXJkKEdMT0JBTCkKKworaW5jbHVkZShDTWFrZUNoZWNrQ29tcGlsZXJGbGFnQ29tbW9uUGF0dGVybnMpCisKK2Z1bmN0aW9uKENIRUNLX0xJTktFUl9GTEFHIF9sYW5nIF9mbGFnIF92YXIpCisgIGdldF9wcm9wZXJ0eSAoX3N1cHBvcnRlZF9sYW5ndWFnZXMgR0xPQkFMIFBST1BFUlRZIEVOQUJMRURfTEFOR1VBR0VTKQorICBpZiAoTk9UIF9sYW5nIElOX0xJU1QgX3N1cHBvcnRlZF9sYW5ndWFnZXMpCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiY2hlY2tfbGlua2VyX2ZsYWc6ICR7X2xhbmd9OiB1bmtub3duIGxhbmd1YWdlLiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGluY2x1ZGUgKENoZWNrJHtfbGFuZ31Tb3VyY2VDb21waWxlcykKKworICBzZXQoQ01BS0VfUkVRVUlSRURfTElOS19PUFRJT05TICIke19mbGFnfSIpCisKKyAgIyBOb3JtYWxpemUgbG9jYWxlIGR1cmluZyB0ZXN0IGNvbXBpbGF0aW9uLgorICBzZXQoX2xvY2FsZV92YXJzIExDX0FMTCBMQ19NRVNTQUdFUyBMQU5HKQorICBmb3JlYWNoKHYgSU4gTElTVFMgX2xvY2FsZV92YXJzKQorICAgIHNldChfbG9jYWxlX3ZhcnNfc2F2ZWRfJHt2fSAiJEVOVnske3Z9fSIpCisgICAgc2V0KEVOVnske3Z9fSBDKQorICBlbmRmb3JlYWNoKCkKKworICBpZiAoX2xhbmcgTUFUQ0hFUyAiXihDfENYWCkkIikKKyAgICBzZXQgKF9zb3VyY2UgImludCBtYWluKCkgeyByZXR1cm4gMDsgfSIpCisgIGVsc2VpZiAoX2xhbmcgU1RSRVFVQUwgIkZvcnRyYW4iKQorICAgIHNldCAoX3NvdXJjZSAiICAgICAgIHByb2dyYW0gdGVzdFxuICAgICAgIHN0b3BcbiAgICAgICBlbmQgcHJvZ3JhbSIpCisgIGVsc2VpZiAoX2xhbmcgTUFUQ0hFUyAiXihPQkpDfE9CSkNYWCkkIikKKyAgICBzZXQgKF9zb3VyY2UgIiNpZm5kZWYgX19PQkpDX19cbiMgIGVycm9yIFwiTm90IGFuIE9iamVjdGl2ZS1DKysgY29tcGlsZXJcIlxuI2VuZGlmXG5pbnQgbWFpbih2b2lkKSB7IHJldHVybiAwOyB9IikKKyAgZWxzZSgpCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiY2hlY2tfbGlua2VyX2ZsYWc6ICR7X2xhbmd9OiB1bnN1cHBvcnRlZCBsYW5ndWFnZS4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKyAgY2hlY2tfY29tcGlsZXJfZmxhZ19jb21tb25fcGF0dGVybnMoX2NvbW1vbl9wYXR0ZXJucykKKworICBjbWFrZV9sYW5ndWFnZSAoQ0FMTCBjaGVja18ke19sYW5nfV9zb3VyY2VfY29tcGlsZXMgIiR7X3NvdXJjZX0iICR7X3Zhcn0gJHtfY29tbW9uX3BhdHRlcm5zfSkKKworICBmb3JlYWNoKHYgSU4gTElTVFMgX2xvY2FsZV92YXJzKQorICAgIHNldChFTlZ7JHt2fX0gJHtfbG9jYWxlX3ZhcnNfc2F2ZWRfJHt2fX0pCisgIGVuZGZvcmVhY2goKQorICBzZXQoJHtfdmFyfSAiJHske192YXJ9fSIgUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja09CSkNDb21waWxlckZsYWcuY21ha2UgYi9Nb2R1bGVzL0NoZWNrT0JKQ0NvbXBpbGVyRmxhZy5jbWFrZQppbmRleCAxZDk3NWRhLi5hOThmNDI5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrT0JKQ0NvbXBpbGVyRmxhZy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrT0JKQ0NvbXBpbGVyRmxhZy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENoZWNrT0JKQ0NvbXBpbGVyRmxhZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQ2hlY2sgd2hldGhlciB0aGUgT2JqZWN0aXZlLUMgY29tcGlsZXIgc3VwcG9ydHMgYSBnaXZlbiBmbGFnLgogCiAuLiBjb21tYW5kOjogY2hlY2tfb2JqY19jb21waWxlcl9mbGFnCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrT0JKQ1NvdXJjZUNvbXBpbGVzLmNtYWtlIGIvTW9kdWxlcy9DaGVja09CSkNTb3VyY2VDb21waWxlcy5jbWFrZQppbmRleCBhNDY3NmFkLi41MDJlZDc0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrT0JKQ1NvdXJjZUNvbXBpbGVzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tPQkpDU291cmNlQ29tcGlsZXMuY21ha2UKQEAgLTUsNiArNSw4IEBACiBDaGVja09CSkNTb3VyY2VDb21waWxlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDaGVjayBpZiBnaXZlbiBPYmplY3RpdmUtQyBzb3VyY2UgY29tcGlsZXMgYW5kIGxpbmtzIGludG8gYW4gZXhlY3V0YWJsZS4KIAogLi4gY29tbWFuZDo6IGNoZWNrX29iamNfc291cmNlX2NvbXBpbGVzCkBAIC0xMDQsNyArMTA2LDcgQEAKICAgICAgICIke1NPVVJDRX1cbiIpCiAKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKICAgICBlbmRpZigpCiAgICAgdHJ5X2NvbXBpbGUoJHtWQVJ9CiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CkBAIC0xMjUsNyArMTI3LDcgQEAKICAgICBpZigke1ZBUn0pCiAgICAgICBzZXQoJHtWQVJ9IDEgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBTdWNjZXNzIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJTdWNjZXNzIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIE9iamVjdGl2ZS1DIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpAQCAtMTMzLDcgKzEzNSw3IEBACiAgICAgICAgICJTb3VyY2UgZmlsZSB3YXM6XG4ke1NPVVJDRX1cbiIpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gRmFpbGVkIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJGYWlsZWQiKQogICAgICAgZW5kaWYoKQogICAgICAgc2V0KCR7VkFSfSAiIiBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke1ZBUn0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9DaGVja09CSkNTb3VyY2VSdW5zLmNtYWtlIGIvTW9kdWxlcy9DaGVja09CSkNTb3VyY2VSdW5zLmNtYWtlCmluZGV4IDAwYTFlYmQuLjlkNGZiMWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tPQkpDU291cmNlUnVucy5jbWFrZQorKysgYi9Nb2R1bGVzL0NoZWNrT0JKQ1NvdXJjZVJ1bnMuY21ha2UKQEAgLTUsNiArNSw4IEBACiBDaGVja09CSkNTb3VyY2VSdW5zCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTYKKwogQ2hlY2sgaWYgZ2l2ZW4gT2JqZWN0aXZlLUMgc291cmNlIGNvbXBpbGVzIGFuZCBsaW5rcyBpbnRvIGFuIGV4ZWN1dGFibGUgYW5kIGNhbgogc3Vic2VxdWVudGx5IGJlIHJ1bi4KIApAQCAtOTIsNyArOTQsNyBAQAogICAgICAgIiR7U09VUkNFfVxuIikKIAogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfcnVuKCR7VkFSfV9FWElUQ09ERSAke1ZBUn1fQ09NUElMRUQKICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KQEAgLTExMyw3ICsxMTUsNyBAQAogICAgIGlmKCIkeyR7VkFSfV9FWElUQ09ERX0iIEVRVUFMIDApCiAgICAgICBzZXQoJHtWQVJ9IDEgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBTdWNjZXNzIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJTdWNjZXNzIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIE9iamVjdGl2ZS1DIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tcGlsZSBvdXRwdXQ6XG4iCkBAIC0xMzAsNyArMTMyLDcgQEAKICAgICAgIGVuZGlmKCkKIAogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSAtIEZhaWxlZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiRmFpbGVkIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIlBlcmZvcm1pbmcgT2JqZWN0aXZlLUMgU09VUkNFIEZJTEUgVGVzdCAke1ZBUn0gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb21waWxlIG91dHB1dDpcbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tPQkpDWFhDb21waWxlckZsYWcuY21ha2UgYi9Nb2R1bGVzL0NoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnLmNtYWtlCmluZGV4IGMzMjc0MWIuLjc5NDRhYjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tPQkpDWFhDb21waWxlckZsYWcuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja09CSkNYWENvbXBpbGVyRmxhZy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIENoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIENoZWNrIHdoZXRoZXIgdGhlIE9iamVjdGl2ZS1DKysgY29tcGlsZXIgc3VwcG9ydHMgYSBnaXZlbiBmbGFnLgogCiAuLiBjb21tYW5kOjogY2hlY2tfb2JqY3h4X2NvbXBpbGVyX2ZsYWcKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VDb21waWxlcy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VDb21waWxlcy5jbWFrZQppbmRleCA0YzBmZGQwLi43YjgzOWU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrT0JKQ1hYU291cmNlQ29tcGlsZXMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja09CSkNYWFNvdXJjZUNvbXBpbGVzLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ2hlY2tPQkpDWFhTb3VyY2VDb21waWxlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjE2CisKIENoZWNrIGlmIGdpdmVuIE9iamVjdGl2ZS1DKysgc291cmNlIGNvbXBpbGVzIGFuZCBsaW5rcyBpbnRvIGFuIGV4ZWN1dGFibGUuCiAKIC4uIGNvbW1hbmQ6OiBjaGVja19vYmpjeHhfc291cmNlX2NvbXBpbGVzCkBAIC0xMDUsNyArMTA3LDcgQEAKICAgICAgICIke1NPVVJDRX1cbiIpCiAKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKICAgICBlbmRpZigpCiAgICAgdHJ5X2NvbXBpbGUoJHtWQVJ9CiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CkBAIC0xMjYsNyArMTI4LDcgQEAKICAgICBpZigke1ZBUn0pCiAgICAgICBzZXQoJHtWQVJ9IDEgQ0FDSEUgSU5URVJOQUwgIlRlc3QgJHtWQVJ9IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBTdWNjZXNzIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJTdWNjZXNzIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIE9iamVjdGl2ZS1DKysgU09VUkNFIEZJTEUgVGVzdCAke1ZBUn0gc3VjY2VlZGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCkBAIC0xMzQsNyArMTM2LDcgQEAKICAgICAgICAgIlNvdXJjZSBmaWxlIHdhczpcbiR7U09VUkNFfVxuIikKICAgICBlbHNlKCkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBGYWlsZWQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIkZhaWxlZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtWQVJ9ICIiIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7VkFSfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrT0JKQ1hYU291cmNlUnVucy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VSdW5zLmNtYWtlCmluZGV4IGEzZDU5MjMuLmMzMjc1OTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VSdW5zLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tPQkpDWFhTb3VyY2VSdW5zLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogQ2hlY2tPQkpDWFhTb3VyY2VSdW5zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNgorCiBDaGVjayBpZiBnaXZlbiBPYmplY3RpdmUtQysrIHNvdXJjZSBjb21waWxlcyBhbmQgbGlua3MgaW50byBhbiBleGVjdXRhYmxlIGFuZCBjYW4KIHN1YnNlcXVlbnRseSBiZSBydW4uCiAKQEAgLTkyLDcgKzk0LDcgQEAKICAgICAgICIke1NPVVJDRX1cbiIpCiAKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7VkFSfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IikKICAgICBlbmRpZigpCiAgICAgdHJ5X3J1bigke1ZBUn1fRVhJVENPREUgJHtWQVJ9X0NPTVBJTEVECiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CkBAIC0xMTQsNyArMTE2LDcgQEAKICAgICBpZigiJHske1ZBUn1fRVhJVENPREV9IiBFUVVBTCAwKQogICAgICAgc2V0KCR7VkFSfSAxIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7VkFSfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHtWQVJ9IC0gU3VjY2VzcyIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiU3VjY2VzcyIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiUGVyZm9ybWluZyBPYmplY3RpdmUtQysrIFNPVVJDRSBGSUxFIFRlc3QgJHtWQVJ9IHN1Y2NlZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpAQCAtMTMxLDcgKzEzMyw3IEBACiAgICAgICBlbmRpZigpCiAKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke1ZBUn0gLSBGYWlsZWQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIkZhaWxlZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJQZXJmb3JtaW5nIE9iamVjdGl2ZS1DKysgU09VUkNFIEZJTEUgVGVzdCAke1ZBUn0gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrUElFU3VwcG9ydGVkLmNtYWtlIGIvTW9kdWxlcy9DaGVja1BJRVN1cHBvcnRlZC5jbWFrZQppbmRleCA2ZDYzZjBiLi5hOTlkOGM0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrUElFU3VwcG9ydGVkLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tQSUVTdXBwb3J0ZWQuY21ha2UKQEAgLTUsNiArNSw4IEBACiBDaGVja1BJRVN1cHBvcnRlZAogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBDaGVjayB3aGV0aGVyIHRoZSBsaW5rZXIgc3VwcG9ydHMgUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZSAoUElFKSBvciBObwogUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZSAoTk9fUElFKSBmb3IgZXhlY3V0YWJsZXMuCiBVc2UgdGhpcyB0byBlbnN1cmUgdGhhdCB0aGUgOnByb3BfdGd0OmBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFYCB0YXJnZXQKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tQcm90b3R5cGVEZWZpbml0aW9uLmNtYWtlIGIvTW9kdWxlcy9DaGVja1Byb3RvdHlwZURlZmluaXRpb24uY21ha2UKaW5kZXggYTdiMDIwYy4uOGIwNjQwMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja1Byb3RvdHlwZURlZmluaXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja1Byb3RvdHlwZURlZmluaXRpb24uY21ha2UKQEAgLTU0LDYgKzU0LDkgQEAKIGZ1bmN0aW9uKGNoZWNrX3Byb3RvdHlwZV9kZWZpbml0aW9uIF9GVU5DVElPTiBfUFJPVE9UWVBFIF9SRVRVUk4gX0hFQURFUiBfVkFSSUFCTEUpCiAKICAgaWYgKE5PVCBERUZJTkVEICR7X1ZBUklBQkxFfSkKKyAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJDaGVja2luZyBwcm90b3R5cGUgJHtfRlVOQ1RJT059IGZvciAke19WQVJJQUJMRX0iKQorICAgIGVuZGlmKCkKICAgICBzZXQoQ0hFQ0tfUFJPVE9UWVBFX0RFRklOSVRJT05fQ09OVEVOVCAiLyogKi9cbiIpCiAKICAgICBzZXQoQ0hFQ0tfUFJPVE9UWVBFX0RFRklOSVRJT05fRkxBR1MgJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30pCkBAIC0xMDMsMTQgKzEwNiwxNCBAQAogICAgIGlmICgke19WQVJJQUJMRX0pCiAgICAgICBzZXQoJHtfVkFSSUFCTEV9IDEgQ0FDSEUgSU5URVJOQUwgIkhhdmUgY29ycmVjdCBwcm90b3R5cGUgZm9yICR7X0ZVTkNUSU9OfSIpCiAgICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBwcm90b3R5cGUgJHtfRlVOQ1RJT059IGZvciAke19WQVJJQUJMRX0gLSBUcnVlIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJUcnVlIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgcHJvdG90eXBlICR7X0ZVTkNUSU9OfSBleGlzdHMgZm9yICR7X1ZBUklBQkxFfSBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuXG4iKQogICAgIGVsc2UgKCkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHByb3RvdHlwZSAke19GVU5DVElPTn0gZm9yICR7X1ZBUklBQkxFfSAtIEZhbHNlIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJGYWxzZSIpCiAgICAgICBlbmRpZigpCiAgICAgICBzZXQoJHtfVkFSSUFCTEV9IDAgQ0FDSEUgSU5URVJOQUwgIkhhdmUgY29ycmVjdCBwcm90b3R5cGUgZm9yICR7X0ZVTkNUSU9OfSIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrU3ltYm9sRXhpc3RzLmNtYWtlIGIvTW9kdWxlcy9DaGVja1N5bWJvbEV4aXN0cy5jbWFrZQppbmRleCAxMDUzMzgzLi40ZjIwMmM0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrU3ltYm9sRXhpc3RzLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tTeW1ib2xFeGlzdHMuY21ha2UKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgIiR7U09VUkNFRklMRX0iIEBPTkxZKQogCiAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7U1lNQk9MfSIpCisgICAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciAke1NZTUJPTH0iKQogICAgIGVuZGlmKCkKICAgICB0cnlfY29tcGlsZSgke1ZBUklBQkxFfQogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQpAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUKQogICAgIGlmKCR7VkFSSUFCTEV9KQogICAgICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgJHtTWU1CT0x9IC0gZm91bmQiKQorICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUklBQkxFfSAxIENBQ0hFIElOVEVSTkFMICJIYXZlIHN5bWJvbCAke1NZTUJPTH0iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAiJHtDTUFLRV9DT05GSUdVUkFCTEVfRklMRV9DT05URU5UfVxuIikKICAgICBlbHNlKCkKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7U1lNQk9MfSAtIG5vdCBmb3VuZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm90IGZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldCgke1ZBUklBQkxFfSAiIiBDQUNIRSBJTlRFUk5BTCAiSGF2ZSBzeW1ib2wgJHtTWU1CT0x9IikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tUeXBlU2l6ZS5jLmluIGIvTW9kdWxlcy9DaGVja1R5cGVTaXplLmMuaW4KaW5kZXggODIwMzVhMy4uZmI5MzA3MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja1R5cGVTaXplLmMuaW4KKysrIGIvTW9kdWxlcy9DaGVja1R5cGVTaXplLmMuaW4KQEAgLTUsMTAgKzUsMTQgQEAKICMgZGVmaW5lIEtFWSAnXycsJ18nLCdpJywnMycsJzgnLCc2JwogI2VsaWYgZGVmaW5lZChfX3g4Nl82NCkKICMgZGVmaW5lIEtFWSAnXycsJ18nLCd4JywnOCcsJzYnLCdfJywnNicsJzQnCi0jZWxpZiBkZWZpbmVkKF9fcHBjX18pCi0jIGRlZmluZSBLRVkgJ18nLCdfJywncCcsJ3AnLCdjJywnXycsJ18nCisjZWxpZiBkZWZpbmVkKF9fUFBDNjRfXykKKyMgZGVmaW5lIEtFWSAnXycsJ18nLCdQJywnUCcsJ0MnLCc2JywnNCcsJ18nLCdfJwogI2VsaWYgZGVmaW5lZChfX3BwYzY0X18pCiAjIGRlZmluZSBLRVkgJ18nLCdfJywncCcsJ3AnLCdjJywnNicsJzQnLCdfJywnXycKKyNlbGlmIGRlZmluZWQoX19QUENfXykKKyMgZGVmaW5lIEtFWSAnXycsJ18nLCdQJywnUCcsJ0MnLCdfJywnXycKKyNlbGlmIGRlZmluZWQoX19wcGNfXykKKyMgZGVmaW5lIEtFWSAnXycsJ18nLCdwJywncCcsJ2MnLCdfJywnXycKICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCiAjIGRlZmluZSBLRVkgJ18nLCdfJywnYScsJ2EnLCdyJywnYycsJ2gnLCc2JywnNCcsJ18nLCdfJwogI2VsaWYgZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrVHlwZVNpemUuY21ha2UgYi9Nb2R1bGVzL0NoZWNrVHlwZVNpemUuY21ha2UKaW5kZXggMzcyNzM3My4uMTdiZWFkYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9DaGVja1R5cGVTaXplLmNtYWtlCisrKyBiL01vZHVsZXMvQ2hlY2tUeXBlU2l6ZS5jbWFrZQpAQCAtODYsMjggKzg2LDEwIEBACiAjIEhlbHBlciBmdW5jdGlvbi4gIERPIE5PVCBDQUxMIERJUkVDVExZLgogZnVuY3Rpb24oX19jaGVja190eXBlX3NpemVfaW1wbCB0eXBlIHZhciBtYXAgYnVpbHRpbiBsYW5ndWFnZSkKICAgaWYoTk9UIENNQUtFX1JFUVVJUkVEX1FVSUVUKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBzaXplIG9mICR7dHlwZX0iKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNrIHNpemUgb2YgJHt0eXBlfSIpCiAgIGVuZGlmKCkKIAotICAjIEluY2x1ZGUgaGVhZGVyIGZpbGVzLgotICBzZXQoaGVhZGVycykKLSAgaWYoYnVpbHRpbikKLSAgICBpZihIQVZFX1NZU19UWVBFU19IKQotICAgICAgc3RyaW5nKEFQUEVORCBoZWFkZXJzICIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XG4iKQotICAgIGVuZGlmKCkKLSAgICBpZihIQVZFX1NURElOVF9IKQotICAgICAgc3RyaW5nKEFQUEVORCBoZWFkZXJzICIjaW5jbHVkZSA8c3RkaW50Lmg+XG4iKQotICAgIGVuZGlmKCkKLSAgICBpZihIQVZFX1NURERFRl9IKQotICAgICAgc3RyaW5nKEFQUEVORCBoZWFkZXJzICIjaW5jbHVkZSA8c3RkZGVmLmg+XG4iKQotICAgIGVuZGlmKCkKLSAgZW5kaWYoKQotICBmb3JlYWNoKGggJHtDTUFLRV9FWFRSQV9JTkNMVURFX0ZJTEVTfSkKLSAgICBzdHJpbmcoQVBQRU5EIGhlYWRlcnMgIiNpbmNsdWRlIFwiJHtofVwiXG4iKQotICBlbmRmb3JlYWNoKCkKLQotICAjIFBlcmZvcm0gdGhlIGNoZWNrLgotCisgICMgUGVyZm9ybSBsYW5ndWFnZSBjaGVjawogICBpZihsYW5ndWFnZSBTVFJFUVVBTCAiQyIpCiAgICAgc2V0KHNyYyAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NoZWNrVHlwZVNpemUvJHt2YXJ9LmMpCiAgIGVsc2VpZihsYW5ndWFnZSBTVFJFUVVBTCAiQ1hYIikKQEAgLTExNSw2ICs5NywzNyBAQAogICBlbHNlKCkKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmtub3duIGxhbmd1YWdlOlxuICAke2xhbmd1YWdlfVxuU3VwcG9ydGVkIGxhbmd1YWdlczogQywgQ1hYLlxuIikKICAgZW5kaWYoKQorCisgICMgSW5jbHVkZSBoZWFkZXIgZmlsZXMuCisgIHNldChoZWFkZXJzKQorICBpZihidWlsdGluKQorICAgIGlmKGxhbmd1YWdlIFNUUkVRVUFMICJDWFgiIEFORCB0eXBlIE1BVENIRVMgIl5zdGQ6OiIpCisgICAgICBpZihIQVZFX1NZU19UWVBFU19IKQorICAgICAgICBzdHJpbmcoQVBQRU5EIGhlYWRlcnMgIiNpbmNsdWRlIDxzeXMvdHlwZXMuaD5cbiIpCisgICAgICBlbmRpZigpCisgICAgICBpZihIQVZFX0NTVERJTlQpCisgICAgICAgIHN0cmluZyhBUFBFTkQgaGVhZGVycyAiI2luY2x1ZGUgPGNzdGRpbnQ+XG4iKQorICAgICAgZW5kaWYoKQorICAgICAgaWYoSEFWRV9DU1REREVGKQorICAgICAgICBzdHJpbmcoQVBQRU5EIGhlYWRlcnMgIiNpbmNsdWRlIDxjc3RkZGVmPlxuIikKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKKyAgICAgIGlmKEhBVkVfU1lTX1RZUEVTX0gpCisgICAgICAgIHN0cmluZyhBUFBFTkQgaGVhZGVycyAiI2luY2x1ZGUgPHN5cy90eXBlcy5oPlxuIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKEhBVkVfU1RESU5UX0gpCisgICAgICAgIHN0cmluZyhBUFBFTkQgaGVhZGVycyAiI2luY2x1ZGUgPHN0ZGludC5oPlxuIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKEhBVkVfU1REREVGX0gpCisgICAgICAgIHN0cmluZyhBUFBFTkQgaGVhZGVycyAiI2luY2x1ZGUgPHN0ZGRlZi5oPlxuIikKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKyAgZm9yZWFjaChoICR7Q01BS0VfRVhUUkFfSU5DTFVERV9GSUxFU30pCisgICAgc3RyaW5nKEFQUEVORCBoZWFkZXJzICIjaW5jbHVkZSBcIiR7aH1cIlxuIikKKyAgZW5kZm9yZWFjaCgpCisKKyAgIyBQZXJmb3JtIHRoZSBjaGVjay4KICAgc2V0KGJpbiAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NoZWNrVHlwZVNpemUvJHt2YXJ9LmJpbikKICAgY29uZmlndXJlX2ZpbGUoJHtfX2NoZWNrX3R5cGVfc2l6ZV9kaXJ9L0NoZWNrVHlwZVNpemUuYy5pbiAke3NyY30gQE9OTFkpCiAgIHRyeV9jb21waWxlKEhBVkVfJHt2YXJ9ICR7Q01BS0VfQklOQVJZX0RJUn0gJHtzcmN9CkBAIC0xNzMsNyArMTg2LDcgQEAKICAgICBlbmRpZigpCiAKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgc2l6ZSBvZiAke3R5cGV9IC0gZG9uZSIpCisgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImRvbmUiKQogICAgIGVuZGlmKCkKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgIkRldGVybWluaW5nIHNpemUgb2YgJHt0eXBlfSBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7b3V0cHV0fVxuXG4iKQpAQCAtMTgxLDcgKzE5NCw3IEBACiAgIGVsc2UoKQogICAgICMgVGhlIGNoZWNrIGZhaWxlZCB0byBjb21waWxlLgogICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBzaXplIG9mICR7dHlwZX0gLSBmYWlsZWQiKQorICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJmYWlsZWQiKQogICAgIGVuZGlmKCkKICAgICBmaWxlKFJFQUQgJHtzcmN9IGNvbnRlbnQpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpAQCAtMjMyLDggKzI0NSwxMyBAQAogICAgICAgY2hlY2tfaW5jbHVkZV9maWxlKHN0ZGRlZi5oIEhBVkVfU1REREVGX0gpCiAgICAgZWxzZWlmKF9sYW5ndWFnZSBTVFJFUVVBTCAiQ1hYIikKICAgICAgIGNoZWNrX2luY2x1ZGVfZmlsZV9jeHgoc3lzL3R5cGVzLmggSEFWRV9TWVNfVFlQRVNfSCkKLSAgICAgIGNoZWNrX2luY2x1ZGVfZmlsZV9jeHgoc3RkaW50LmggSEFWRV9TVERJTlRfSCkKLSAgICAgIGNoZWNrX2luY2x1ZGVfZmlsZV9jeHgoc3RkZGVmLmggSEFWRV9TVERERUZfSCkKKyAgICAgIGlmKCIke1RZUEV9IiBNQVRDSEVTICJec3RkOjoiKQorICAgICAgICBjaGVja19pbmNsdWRlX2ZpbGVfY3h4KGNzdGRpbnQgSEFWRV9DU1RESU5UKQorICAgICAgICBjaGVja19pbmNsdWRlX2ZpbGVfY3h4KGNzdGRkZWYgSEFWRV9DU1REREVGKQorICAgICAgZWxzZSgpCisgICAgICAgIGNoZWNrX2luY2x1ZGVfZmlsZV9jeHgoc3RkaW50LmggSEFWRV9TVERJTlRfSCkKKyAgICAgICAgY2hlY2tfaW5jbHVkZV9maWxlX2N4eChzdGRkZWYuaCBIQVZFX1NURERFRl9IKQorICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogICB1bnNldChfQ0hFQ0tfVFlQRV9TSVpFX0JVSUxUSU5fVFlQRVNfT05MWSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ2hlY2tWYXJpYWJsZUV4aXN0cy5jbWFrZSBiL01vZHVsZXMvQ2hlY2tWYXJpYWJsZUV4aXN0cy5jbWFrZQppbmRleCBmNDk1M2EzLi44YTkzNTM1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NoZWNrVmFyaWFibGVFeGlzdHMuY21ha2UKKysrIGIvTW9kdWxlcy9DaGVja1ZhcmlhYmxlRXhpc3RzLmNtYWtlCkBAIC00Miw3ICs0Miw3IEBACiAgICAgc2V0KE1BQ1JPX0NIRUNLX1ZBUklBQkxFX0RFRklOSVRJT05TCiAgICAgICAiLURDSEVDS19WQVJJQUJMRV9FWElTVFM9JHtWQVJ9ICR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IikKICAgICBpZihOT1QgQ01BS0VfUkVRVUlSRURfUVVJRVQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgJHtWQVJ9IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkxvb2tpbmcgZm9yICR7VkFSfSIpCiAgICAgZW5kaWYoKQogICAgIGlmKENNQUtFX1JFUVVJUkVEX0xJTktfT1BUSU9OUykKICAgICAgIHNldChDSEVDS19WQVJJQUJMRV9FWElTVFNfQUREX0xJTktfT1BUSU9OUwpAQCAtNjcsNyArNjcsNyBAQAogICAgIGlmKCR7VkFSSUFCTEV9KQogICAgICAgc2V0KCR7VkFSSUFCTEV9IDEgQ0FDSEUgSU5URVJOQUwgIkhhdmUgdmFyaWFibGUgJHtWQVJ9IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7VkFSfSAtIGZvdW5kIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgICBlbmRpZigpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIHZhcmlhYmxlICR7VkFSfSBleGlzdHMgcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCkBAIC03NSw3ICs3NSw3IEBACiAgICAgZWxzZSgpCiAgICAgICBzZXQoJHtWQVJJQUJMRX0gIiIgQ0FDSEUgSU5URVJOQUwgIkhhdmUgdmFyaWFibGUgJHtWQVJ9IikKICAgICAgIGlmKE5PVCBDTUFLRV9SRVFVSVJFRF9RVUlFVCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yICR7VkFSfSAtIG5vdCBmb3VuZCIpCisgICAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm90IGZvdW5kIikKICAgICAgIGVuZGlmKCkKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIHRoZSB2YXJpYWJsZSAke1ZBUn0gZXhpc3RzIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9BUk1DbGFuZy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQVJNQ2xhbmcuY21ha2UKaW5kZXggMjUxOGFjNy4uNzBlNmZmYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9BUk1DbGFuZy5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0FSTUNsYW5nLmNtYWtlCkBAIC0xOSw2ICsxOSwxMyBAQAogc2V0KENNQUtFX0FSICIke0NNQUtFX0FSTUNsYW5nX0FSfSIgQ0FDSEUgRklMRVBBVEggIlRoZSBBUk1DbGFuZyBhcmNoaXZlciIgRk9SQ0UpCiBtYXJrX2FzX2FkdmFuY2VkKENNQUtFX0FSTUNsYW5nX0FSKQogCitpZiAoQ01BS0VfTElOS0VSIE1BVENIRVMgImFybWxpbmsiKQorICBzZXQoX19DTUFLRV9BUk1DbGFuZ19VU0lOR19hcm1saW5rIFRSVUUpCisgIHNldChDTUFLRV9MSUJSQVJZX1BBVEhfRkxBRyAiLS11c2VybGlicGF0aD0iKQorZWxzZSgpCisgIHNldChfX0NNQUtFX0FSTUNsYW5nX1VTSU5HX2FybWxpbmsgRkFMU0UpCitlbmRpZigpCisKICMgZ2V0IGNvbXBpbGVyIHN1cHBvcnRlZCBjcHUgbGlzdAogZnVuY3Rpb24oX19hcm1jbGFuZ19zZXRfcHJvY2Vzc29yX2xpc3QgbGFuZyBvdXRfdmFyKQogICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSfSIgLS10YXJnZXQ9JHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1RBUkdFVH0gLW1jcHU9bGlzdApAQCAtMzksNiArNDYsMzIgQEAKICAgZW5kaWYoKQogZW5kZnVuY3Rpb24oKQogCisjIGdldCBjb21waWxlciBzdXBwb3J0ZWQgYXJjaCBsaXN0CitmdW5jdGlvbihfX2FybWNsYW5nX3NldF9hcmNoX2xpc3QgbGFuZyBvdXRfdmFyKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSfSIgLS10YXJnZXQ9JHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1RBUkdFVH0gLW1hcmNoPWxpc3QKKyAgICBPVVRQVVRfVkFSSUFCTEUgYXJjaF9saXN0CisgICAgRVJST1JfVkFSSUFCTEUgYXJjaF9saXN0KQorICBzdHJpbmcoUkVHRVggTUFUQ0hBTEwgIi1tYXJjaD0oW14gXG5dKikiIGFyY2hfbGlzdCAiJHthcmNoX2xpc3R9IikKKyAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi1tYXJjaD0iICIiIGFyY2hfbGlzdCAiJHthcmNoX2xpc3R9IikKKyAgc2V0KCR7b3V0X3Zhcn0gIiR7YXJjaF9saXN0fSIgUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQorCisjIGdldCBsaW5rZXIgc3VwcG9ydGVkIGNwdSBsaXN0CitmdW5jdGlvbihfX2FybWxpbmtfc2V0X2NwdV9saXN0IGxhbmcgb3V0X3ZhcikKKyAgaWYoX19DTUFLRV9BUk1DbGFuZ19VU0lOR19hcm1saW5rKQorICAgIHNldChfX2xpbmtlcl93cmFwcGVyX2ZsYWdzICIiKQorICBlbHNlKCkKKyAgICBzZXQoX19saW5rZXJfd3JhcHBlcl9mbGFncyAtLXRhcmdldD0ke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfVEFSR0VUfSAtWGxpbmtlcikKKyAgZW5kaWYoKQorCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICIke0NNQUtFX0xJTktFUn0iICR7X19saW5rZXJfd3JhcHBlcl9mbGFnc30gLS1jcHU9bGlzdAorICAgIE9VVFBVVF9WQVJJQUJMRSBjcHVfbGlzdAorICAgIEVSUk9SX1ZBUklBQkxFIGNwdV9saXN0KQorICBzdHJpbmcoUkVHRVggTUFUQ0hBTEwgIi0tY3B1PShbXiBcbl0qKSIgY3B1X2xpc3QgIiR7Y3B1X2xpc3R9IikKKyAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi0tY3B1PSIgIiIgY3B1X2xpc3QgIiR7Y3B1X2xpc3R9IikKKyAgc2V0KCR7b3V0X3Zhcn0gIiR7Y3B1X2xpc3R9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKIG1hY3JvKF9fY29tcGlsZXJfYXJtY2xhbmcgbGFuZykKICAgaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVEFSR0VUKQogICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1RBUkdFVCBhcm0tYXJtLW5vbmUtZWFiaSkKQEAgLTQ2LDI0ICs3OSw1MCBAQAogICBpZihOT1QgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9QUk9DRVNTT1JfTElTVCkKICAgICBfX2FybWNsYW5nX3NldF9wcm9jZXNzb3JfbGlzdCgke2xhbmd9IENNQUtFXyR7bGFuZ31fQ09NUElMRVJfUFJPQ0VTU09SX0xJU1QpCiAgIGVuZGlmKCkKLSAgaWYoTk9UIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IpCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiICBDTUFLRV9TWVNURU1fUFJPQ0VTU09SIG11c3QgYmUgc2V0IGZvciBBUk1DbGFuZ1xuIgotICAgICAgIiAgU3VwcG9ydGVkIHByb2Nlc3NvcjogJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1BST0NFU1NPUl9MSVNUfVxuIikKLSAgZWxzZSgpCi0gICAgX19hcm1jbGFuZ19jaGVja19wcm9jZXNzb3IoIiR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0iICIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfUFJPQ0VTU09SX0xJU1R9IiBfQ01BS0VfJHtsYW5nfV9DSEVDS19SRVNVTFQpCi0gICAgaWYoTk9UIF9DTUFLRV8ke2xhbmd9X0NIRUNLX1JFU1VMVCkKLSAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiAgU3lzdGVtIHByb2Nlc3NvciAnJHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfScgbm90IHN1cHBvcnRlZCBieSBBUk1DbGFuZyAke2xhbmd9IGNvbXBpbGVyXG4iCi0gICAgICAgICIgIFN1cHBvcnRlZCBwcm9jZXNzb3I6ICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9QUk9DRVNTT1JfTElTVH1cbiIpCi0gICAgZW5kaWYoKQotICAgIHVuc2V0KF9DTUFLRV8ke2xhbmd9X0NIRUNLX1JFU1VMVCkKKyAgaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfQVJDSF9MSVNUKQorICAgIF9fYXJtY2xhbmdfc2V0X2FyY2hfbGlzdCgke2xhbmd9IENNQUtFXyR7bGFuZ31fQ09NUElMRVJfQVJDSF9MSVNUKQogICBlbmRpZigpCi0gIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19JTklUICItbWNwdT0ke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9IikKLSAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1MgIi0tY3B1PSR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0iKQorICBpZihOT1QgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBBTkQgTk9UIENNQUtFX1NZU1RFTV9BUkNIKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiAgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBvciBDTUFLRV9TWVNURU1fQVJDSCBtdXN0IGJlIHNldCBmb3IgQVJNQ2xhbmdcbiIKKyAgICAgICIgIFN1cHBvcnRlZCBwcm9jZXNzb3I6ICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9QUk9DRVNTT1JfTElTVH1cbiIKKyAgICAgICIgIFN1cHBvcnRlZCBBcmNoaXRlY3R1cmU6ICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9BUkNIX0xJU1R9IikKKyAgZWxzZSgpCisgICAgX19hcm1jbGFuZ19jaGVja19wcm9jZXNzb3IoIiR7Q01BS0VfU1lTVEVNX0FSQ0h9IiAiJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0FSQ0hfTElTVH0iIF9DTUFLRV8ke2xhbmd9X0NIRUNLX0FSQ0hfUkVTVUxUKQorICAgIGlmKCBfQ01BS0VfJHtsYW5nfV9DSEVDS19BUkNIX1JFU1VMVCkKKyAgICAgIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19JTklUICItbWFyY2g9JHtDTUFLRV9TWVNURU1fQVJDSH0iKQorICAgICAgc2V0KF9fbWFyY2hfZmxhZ19zZXQgVFJVRSkKKyAgICBlbmRpZigpCisgICAgX19hcm1jbGFuZ19jaGVja19wcm9jZXNzb3IoIiR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0iICIke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJfUFJPQ0VTU09SX0xJU1R9IiBfQ01BS0VfJHtsYW5nfV9DSEVDS19QUk9DRVNTT1JfUkVTVUxUKQorICAgIGlmKF9DTUFLRV8ke2xhbmd9X0NIRUNLX1BST0NFU1NPUl9SRVNVTFQpCisgICAgICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfSU5JVCAiLW1jcHU9JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSIpCisgICAgICBzZXQoX19tY3B1X2ZsYWdfc2V0IFRSVUUpCisgICAgZW5kaWYoKQorICAgIGlmKE5PVCBfX21hcmNoX2ZsYWdfc2V0IEFORCBOT1QgX19tY3B1X2ZsYWdfc2V0KQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQXQgbGVhc3Qgb25lIG9mIHRoZSB2YXJpYWJsZXMgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBvciBDTUFLRV9TWVNURU1fQVJDSCBtdXN0IGJlIHNldCBmb3IgQVJNQ2xhbmdcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cHBvcnRlZCBwcm9jZXNzb3I6ICR7Q01BS0VfJHtsYW5nfV9DT01QSUxFUl9QUk9DRVNTT1JfTElTVH1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgU3VwcG9ydGVkIEFyY2hpdGVjdHVyZTogJHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0FSQ0hfTElTVH0iKQorICAgIGVuZGlmKCkKKyAgICB1bnNldChfQ01BS0VfJHtsYW5nfV9DSEVDS19QUk9DRVNTT1JfUkVTVUxUKQorICAgIHVuc2V0KF9DTUFLRV8ke2xhbmd9X0NIRUNLX0FSQ0hfUkVTVUxUKQorICBlbmRpZigpCiAKLSAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFICI8Q01BS0VfTElOS0VSPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPExJTktfTElCUkFSSUVTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLS1saXN0IDxUQVJHRVRfQkFTRT4ubWFwIikKKyAgI2NoZWNrIGlmIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgYmVsb25ncyB0byBzdXBwb3J0ZWQgY3B1IGxpc3QgZm9yIGFybWxpbmsKKyAgX19hcm1saW5rX3NldF9jcHVfbGlzdCggJHtsYW5nfSBDTUFLRV9MSU5LRVJfQ1BVX0xJU1QpCisgIGxpc3QoVFJBTlNGT1JNIENNQUtFX0xJTktFUl9DUFVfTElTVCBUT0xPV0VSKQorICBfX2FybWNsYW5nX2NoZWNrX3Byb2Nlc3NvcigiJHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSIgIiR7Q01BS0VfTElOS0VSX0NQVV9MSVNUfSIgX0NNQUtFX0NIRUNLX0xJTktfQ1BVX1JFU1VMVCkKKyAgaWYoX0NNQUtFX0NIRUNLX0xJTktfQ1BVX1JFU1VMVCkKKyAgICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fTElOS19GTEFHUyAiLS1jcHU9JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSIpCisgIGVuZGlmKCkKKworICBpZihfX0NNQUtFX0FSTUNsYW5nX1VTSU5HX2FybWxpbmspCisgICAgc2V0KF9fQ01BS0VfQVJNQ2xhbmdfVVNJTkdfYXJtbGlua19XUkFQUEVSICIiKQorICBlbHNlKCkKKyAgICBzZXQoX19DTUFLRV9BUk1DbGFuZ19VU0lOR19hcm1saW5rX1dSQVBQRVIgJHtDTUFLRV8ke2xhbmd9X0xJTktFUl9XUkFQUEVSX0ZMQUd9KQorICBlbmRpZigpCisgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRSAiPENNQUtFX0xJTktFUj4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+ICR7X19DTUFLRV9BUk1DbGFuZ19VU0lOR19hcm1saW5rX1dSQVBQRVJ9IC0tbGlzdCA8VEFSR0VUX0JBU0U+Lm1hcCIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWSAgIjxDTUFLRV9BUj4gLS1jcmVhdGUgLWNyIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0NSRUFURSAgICAgICAgICI8Q01BS0VfQVI+IC0tY3JlYXRlIC1jciA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKLSAgc2V0KENNQUtFXyR7bGFuZ31fUkVTUE9OU0VfRklMRV9MSU5LX0ZMQUcgIi0tdmlhPSIpCisgIHNldChDTUFLRV8ke2xhbmd9X1JFU1BPTlNFX0ZJTEVfTElOS19GTEFHICIke19fQ01BS0VfQVJNQ2xhbmdfVVNJTkdfYXJtbGlua19XUkFQUEVSfSAtLXZpYT0iKQogICBzZXQoQ01BS0VfJHtsYW5nfV9PVVRQVVRfRVhURU5TSU9OICIubyIpCiAgIHNldChDTUFLRV8ke2xhbmd9X09VVFBVVF9FWFRFTlNJT05fUkVQTEFDRSAxKQogZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9BYnNvZnQtRm9ydHJhbi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQWJzb2Z0LUZvcnRyYW4uY21ha2UKaW5kZXggNzY1MDJkYy4uODcyNGY4NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9BYnNvZnQtRm9ydHJhbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0Fic29mdC1Gb3J0cmFuLmNtYWtlCkBAIC05LDMgKzksNSBAQAogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZJWEVEX0ZMQUcgIi1mZml4ZWQiKQogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZSRUVfRkxBRyAiLWZmcmVlIikKIHNldChDTUFLRV9Gb3J0cmFuX0xJTktFUl9XUkFQUEVSX0ZMQUcgIi1YIikKK3NldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09OICItY3BwIikKK3NldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiAiLW5vLWNwcCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0FwcGxlQ2xhbmctQy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DLmNtYWtlCmluZGV4IDI3OTRmNTIuLjI2YTRiYmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DLmNtYWtlCkBAIC0xLDYgKzEsOCBAQAogaW5jbHVkZShDb21waWxlci9DbGFuZykKIF9fY29tcGlsZXJfY2xhbmcoQykKIAorc2V0KENNQUtFX0NfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMpCisKIGlmKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDQuMCkKICAgc2V0KENNQUtFX0M5MF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jOTAiKQogICBzZXQoQ01BS0VfQzkwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnU5MCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0FwcGxlQ2xhbmctQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9BcHBsZUNsYW5nLUNYWC5jbWFrZQppbmRleCAzZmE2OTkwLi42MTFjNjc0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0FwcGxlQ2xhbmctQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1DWFguY21ha2UKQEAgLTEsNiArMSw4IEBACiBpbmNsdWRlKENvbXBpbGVyL0NsYW5nKQogX19jb21waWxlcl9jbGFuZyhDWFgpCiAKK3NldChDTUFLRV9DWFhfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMrKykKKwogaWYoTk9UICJ4JHtDTUFLRV9DWFhfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQogICBzZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT1BUSU9OU19WSVNJQklMSVRZX0lOTElORVNfSElEREVOICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iKQogZW5kaWYoKQpAQCAtMjUsNyArMjcsMTAgQEAKICAgc2V0KENNQUtFX0NYWDE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQogZW5kaWYoKQogCi1pZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA2LjEpCitpZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxMC4wKQorICBzZXQoQ01BS0VfQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTciKQorICBzZXQoQ01BS0VfQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTciKQorZWxzZWlmIChOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDYuMSkKICAgc2V0KENNQUtFX0NYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzF6IikKICAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF6IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1PQkpDWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0FwcGxlQ2xhbmctT0JKQ1hYLmNtYWtlCmluZGV4IDJjMDg0YWYuLjQwOWJkNGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvQXBwbGVDbGFuZy1PQkpDWFguY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9BcHBsZUNsYW5nLU9CSkNYWC5jbWFrZQpAQCAtMjIsNyArMjIsMTAgQEAKICAgc2V0KENNQUtFX09CSkNYWDE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQogZW5kaWYoKQogCi1pZiAoTk9UIENNQUtFX09CSkNYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA2LjEpCitpZiAoTk9UIENNQUtFX09CSkNYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxMC4wKQorICBzZXQoQ01BS0VfT0JKQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTciKQorICBzZXQoQ01BS0VfT0JKQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTciKQorZWxzZWlmIChOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDYuMSkKICAgc2V0KENNQUtFX09CSkNYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzF6IikKICAgc2V0KENNQUtFX09CSkNYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF6IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQ01ha2VDb21tb25Db21waWxlck1hY3Jvcy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQ01ha2VDb21tb25Db21waWxlck1hY3Jvcy5jbWFrZQppbmRleCA5NjUzN2Y4Li40MDliNjVhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0NNYWtlQ29tbW9uQ29tcGlsZXJNYWNyb3MuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9DTWFrZUNvbW1vbkNvbXBpbGVyTWFjcm9zLmNtYWtlCkBAIC0xMzQsMyArMTM0LDQ3IEBACiAgICAgdW5zZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQpCiAgIGVuZGlmKCkKIGVuZG1hY3JvKCkKKworbWFjcm8oY21ha2VfcmVjb3JkX2N1ZGFfY29tcGlsZV9mZWF0dXJlcykKKyAgc2V0KF9yZXN1bHQgMCkKKyAgaWYoX3Jlc3VsdCBFUVVBTCAwIEFORCBERUZJTkVEIENNQUtFX0NVREEyMF9TVEFOREFSRF9DT01QSUxFX09QVElPTikKKyAgICBpZihDTUFLRV9DVURBMjBfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQpCisgICAgICBfaGFzX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEoMjApCisgICAgZWxzZSgpCisgICAgICBfcmVjb3JkX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEoMjApCisgICAgZW5kaWYoKQorICAgIHVuc2V0KENNQUtFX0NVREEyMF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgZW5kaWYoKQorICBpZihfcmVzdWx0IEVRVUFMIDAgQU5EIERFRklORUQgQ01BS0VfQ1VEQTE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OKQorICAgIGlmKENNQUtFX0NVREExN19TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgICAgIF9oYXNfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSgxNykKKyAgICBlbHNlKCkKKyAgICAgIF9yZWNvcmRfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSgxNykKKyAgICBlbmRpZigpCisgICAgdW5zZXQoQ01BS0VfQ1VEQTE3X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICBlbmRpZigpCisgIGlmKF9yZXN1bHQgRVFVQUwgMCBBTkQgREVGSU5FRCBDTUFLRV9DVURBMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04pCisgICAgaWYoQ01BS0VfQ1VEQTE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICAgICAgX2hhc19jb21waWxlcl9mZWF0dXJlc19jdWRhKDE0KQorICAgIGVsc2UoKQorICAgICAgX3JlY29yZF9jb21waWxlcl9mZWF0dXJlc19jdWRhKDE0KQorICAgIGVuZGlmKCkKKyAgICB1bnNldChDTUFLRV9DVURBMTRfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQpCisgIGVuZGlmKCkKKyAgaWYoX3Jlc3VsdCBFUVVBTCAwIEFORCBERUZJTkVEIENNQUtFX0NVREExMV9TVEFOREFSRF9DT01QSUxFX09QVElPTikKKyAgICBpZihDTUFLRV9DVURBMTFfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQpCisgICAgICBfaGFzX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEoMTEpCisgICAgZWxzZSgpCisgICAgICBfcmVjb3JkX2NvbXBpbGVyX2ZlYXR1cmVzX2N1ZGEoMTEpCisgICAgZW5kaWYoKQorICAgIHVuc2V0KENNQUtFX0NVREExMV9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgZW5kaWYoKQorICBpZihfcmVzdWx0IEVRVUFMIDAgQU5EIERFRklORUQgQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OKQorICAgIGlmKENNQUtFX0NVREEwM19TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgICAgIF9oYXNfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSgwMykKKyAgICBlbHNlKCkKKyAgICAgIF9yZWNvcmRfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSgwMykKKyAgICBlbmRpZigpCisgICAgdW5zZXQoQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUKQorICBlbmRpZigpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUMuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLUMuY21ha2UKaW5kZXggMDQ0ODk2NS4uZmI2ZmZhNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctQy5jbWFrZQpAQCAtNiw2ICs2LDEyIEBACiAgIHJldHVybigpCiBlbmRpZigpCiAKK2lmKCJ4JHtDTUFLRV9DX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieE1TVkMiKQorICBzZXQoQ01BS0VfQ19DTEFOR19USURZX0RSSVZFUl9NT0RFICJjbCIpCitlbHNlaWYoIngke0NNQUtFX0NYWF9DT01QSUxFUl9GUk9OVEVORF9WQVJJQU5UfSIgU1RSRVFVQUwgInhHTlUiKQorICBzZXQoQ01BS0VfQ19DT01QSUxFX09QVElPTlNfRVhQTElDSVRfTEFOR1VBR0UgLXggYykKK2VuZGlmKCkKKwogaWYoTk9UIENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy40KQogICBpZihOT1QgIngke0NNQUtFX0NfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQogICAgIHNldChDTUFLRV9DOTBfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YzkwIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctQ1VEQS5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctQ1VEQS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzY4MjdiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DVURBLmNtYWtlCkBAIC0wLDAgKzEsMjggQEAKK2luY2x1ZGUoQ29tcGlsZXIvQ2xhbmcpCitfX2NvbXBpbGVyX2NsYW5nKENVREEpCisKKyMgU2V0IGV4cGxpY2l0bHksIGJlY2F1c2UgX19jb21waWxlcl9jbGFuZygpIGRvZXNuJ3Qgc2V0IHRoaXMgaWYgd2UncmUgc2ltdWxhdGluZyBNU1ZDLgorc2V0KENNQUtFX0RFUEZJTEVfRkxBR1NfQ1VEQSAiLU1EIC1NVCA8T0JKRUNUPiAtTUYgPERFUEZJTEU+IikKKworIyBDKyswMyBpc24ndCBzdXBwb3J0ZWQgZm9yIENYWCwgYnV0IGlzIGZvciBDVURBLCBzbyB3ZSBuZWVkIHRvIHNldCB0aGVzZSBtYW51YWxseS4KKyMgRG8gdGhpcyBiZWZvcmUgX19jb21waWxlcl9jbGFuZ19jeHhfc3RhbmRhcmRzKCkgc2luY2UgdGhhdCBhZGRzIHRoZSBmZWF0dXJlLgorc2V0KENNQUtFX0NVREEwM19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKyswMyIpCitzZXQoQ01BS0VfQ1VEQTAzX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzAzIikKK19fY29tcGlsZXJfY2xhbmdfY3h4X3N0YW5kYXJkcyhDVURBKQorCitzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9IQVNfREVWSUNFX0xJTktfUEhBU0UgVFJVRSkKK3NldChfQ01BS0VfQ09NUElMRV9BU19DVURBX0ZMQUcgIi14IGN1ZGEiKQorc2V0KF9DTUFLRV9DVURBX1BUWF9GTEFHICItLWN1ZGEtZGV2aWNlLW9ubHkgLVMiKQorCisjIFJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyIGV4cGFuZHMgY3Jvc3Njb21waWxlIHZhcmlhYmxlcyBsaWtlIHN5c3Jvb3QgYW5kIHRhcmdldCBvbmx5IGZvciBDTUFLRV88TEFORz5fQ09NUElMRVIuIE92ZXJyaWRlIHRoZSBkZWZhdWx0Lgorc2V0KENNQUtFX0NVREFfTElOS19FWEVDVVRBQkxFICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+JHtfX0lNUExJQ1RfTElOS1N9IikKK3NldChDTUFLRV9DVURBX0NSRUFURV9TSEFSRURfTElCUkFSWSAiPENNQUtFX0NVREFfQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9DVURBX0ZMQUdTPiA8TElOS19GTEFHUz4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV9DVURBX0ZMQUdTPiA8U09OQU1FX0ZMQUc+PFRBUkdFVF9TT05BTUU+IC1vIDxUQVJHRVQ+IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+JHtfX0lNUExJQ1RfTElOS1N9IikKKworc2V0KENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFQgIlNUQVRJQyIpCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX1NUQVRJQyAiY3VkYWRldnJ0O2N1ZGFydF9zdGF0aWMiKQorc2V0KENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU19TSEFSRUQgImN1ZGFkZXZydDtjdWRhcnQiKQorc2V0KENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU19OT05FICAgIiIpCisKK2lmKFVOSVgpCisgIGxpc3QoQVBQRU5EIENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU19TVEFUSUMgInJ0IiAicHRocmVhZCIgImRsIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DWFguY21ha2UKaW5kZXggNjE3MDlmOC4uMzExZDJiMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DWFguY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy1DWFguY21ha2UKQEAgLTEsNyArMSwxMCBAQAogaW5jbHVkZShDb21waWxlci9DbGFuZykKIF9fY29tcGlsZXJfY2xhbmcoQ1hYKQorX19jb21waWxlcl9jbGFuZ19jeHhfc3RhbmRhcmRzKENYWCkKKwogCiBpZigieCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieEdOVSIpCisgIHNldChDTUFLRV9DWFhfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMrKykKICAgc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfVklTSUJJTElUWV9JTkxJTkVTX0hJRERFTiAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIikKIGVuZGlmKCkKIApAQCAtMTAsMTIxICsxMyw2IEBACiAgIHJldHVybigpCiBlbmRpZigpCiAKLQotaWYoIngke0NNQUtFX0NYWF9DT01QSUxFUl9GUk9OVEVORF9WQVJJQU5UfSIgU1RSRVFVQUwgInhHTlUiKQotICBpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDIuMSkKLSAgICBzZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrOTgiKQotICAgIHNldChDTUFLRV9DWFg5OF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251Kys5OCIpCi0gIGVuZGlmKCkKLQotICBpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuMSkKLSAgICBzZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCi0gICAgc2V0KENNQUtFX0NYWDExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzExIikKLSAgICBzZXQoQ01BS0VfQ1hYMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTEiKQotICAgIHNldChDTUFLRV9DWFgxMV9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKLSAgZWxzZWlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi4xKQotICAgIHNldChDTUFLRV9DWFgxMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysweCIpCi0gICAgc2V0KENNQUtFX0NYWDExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzB4IikKLSAgZW5kaWYoKQotCi0gIGlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy41KQotICAgIHNldChDTUFLRV9DWFgxNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNCIpCi0gICAgc2V0KENNQUtFX0NYWDE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzE0IikKLSAgICBzZXQoQ01BS0VfQ1hYMTRfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCi0gIGVsc2VpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuNCkKLSAgICBzZXQoQ01BS0VfQ1hYMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMXkiKQotICAgIHNldChDTUFLRV9DWFgxNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxeSIpCi0gICAgc2V0KENNQUtFX0NYWDE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQotICBlbmRpZigpCi0KLSAgc2V0KF9jbGFuZ192ZXJzaW9uX3N0ZDE3IDUuMCkKLSAgaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkFuZHJvaWQiKQotICAgIHNldChfY2xhbmdfdmVyc2lvbl9zdGQxNyA2LjApCi0gIGVuZGlmKCkKLQotICBpZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiJHtfY2xhbmdfdmVyc2lvbl9zdGQxN30iKQotICAgIHNldChDTUFLRV9DWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNyIpCi0gICAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzE3IikKLSAgZWxzZWlmIChOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuNSkKLSAgICBzZXQoQ01BS0VfQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMXoiKQotICAgIHNldChDTUFLRV9DWFgxN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxeiIpCi0gIGVuZGlmKCkKLQotICBpZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiJHtfY2xhbmdfdmVyc2lvbl9zdGQxN30iKQotICAgIHNldChDTUFLRV9DWFgyMF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysyYSIpCi0gICAgc2V0KENNQUtFX0NYWDIwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzJhIikKLSAgZW5kaWYoKQotCi0gIHVuc2V0KF9jbGFuZ192ZXJzaW9uX3N0ZDE3KQotCi0gIGlmKCJ4JHtDTUFLRV9DWFhfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQotICAgICMgVGhlIE1TVkMgc3RhbmRhcmQgbGlicmFyeSByZXF1aXJlcyBDKysxNCwgYW5kIE1TVkMgaXRzZWxmIGhhcyBubwotICAgICMgbm90aW9uIG9mIG9wZXJhdGluZyBpbiBhIG1vZGUgbm90IGF3YXJlIG9mIGF0IGxlYXN0IHRoYXQgc3RhbmRhcmQuCi0gICAgc2V0KENNQUtFX0NYWDk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE0IikKLSAgICBzZXQoQ01BS0VfQ1hYOThfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTQiKQotICAgIHNldChDTUFLRV9DWFgxMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNCIpCi0gICAgc2V0KENNQUtFX0NYWDExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzE0IikKLQotICAgICMgVGhpcyBjbGFuZysrIGlzIG1pc3Npbmcgc29tZSBmZWF0dXJlcyBiZWNhdXNlIG9mIE1TVkMgY29tcGF0aWJpbGl0eS4KLSAgICB1bnNldChDTUFLRV9DWFgxMV9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKLSAgICB1bnNldChDTUFLRV9DWFgxNF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKLSAgICB1bnNldChDTUFLRV9DWFgxN19TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKLSAgICB1bnNldChDTUFLRV9DWFgyMF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKLSAgZW5kaWYoKQotCi0gIF9fY29tcGlsZXJfY2hlY2tfZGVmYXVsdF9sYW5ndWFnZV9zdGFuZGFyZChDWFggMi4xIDk4KQotZWxzZWlmKENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAzLjkKLSAgICBBTkQgQ01BS0VfQ1hYX1NJTVVMQVRFX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDE5LjApCi0gICMgVGhpcyB2ZXJzaW9uIG9mIGNsYW5nLWNsIGFuZCB0aGUgTVNWQyB2ZXJzaW9uIGl0IHNpbXVsYXRlcyBoYXZlCi0gICMgc3VwcG9ydCBmb3IgLXN0ZDogZmxhZ3MuCi0gIHNldChDTUFLRV9DWFg5OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDk4X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQotICBzZXQoQ01BS0VfQ1hYMTFfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCi0gIHNldChDTUFLRV9DWFgxMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCi0gIHNldChDTUFLRV9DWFgxNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNCIpCi0gIHNldChDTUFLRV9DWFgxNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrMTQiKQotICBpZiAoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDYuMCkKLSAgICBzZXQoQ01BS0VfQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrMTciKQotICAgIHNldChDTUFLRV9DWFgxN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrMTciKQotICAgIHNldChDTUFLRV9DWFgyMF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZDpjKytsYXRlc3QiKQotICAgIHNldChDTUFLRV9DWFgyMF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrbGF0ZXN0IikKLSAgZWxzZSgpCi0gICAgc2V0KENNQUtFX0NYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrK2xhdGVzdCIpCi0gICAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKytsYXRlc3QiKQotICBlbmRpZigpCi0KLSAgX19jb21waWxlcl9jaGVja19kZWZhdWx0X2xhbmd1YWdlX3N0YW5kYXJkKENYWCAzLjkgMTQpCi1lbHNlKCkKLSAgIyBUaGlzIHZlcnNpb24gb2YgY2xhbmctY2wsIG9yIHRoZSBNU1ZDIHZlcnNpb24gaXQgc2ltdWxhdGVzLCBkb2VzIG5vdCBoYXZlCi0gICMgbGFuZ3VhZ2Ugc3RhbmRhcmRzLiAgU2V0IHRoZXNlIG9wdGlvbnMgYXMgZW1wdHkgc3RyaW5ncyBzbyB0aGUgZmVhdHVyZQotICAjIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgY2FuIGF0IGxlYXN0IGNoZWNrIHRvIHNlZSBpZiB0aGV5IGFyZSBkZWZpbmVkLgotICBzZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCi0gIHNldChDTUFLRV9DWFg5OF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCi0gIHNldChDTUFLRV9DWFgxMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfQ1hYMTRfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCi0gIHNldChDTUFLRV9DWFgxN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCi0gIHNldChDTUFLRV9DWFgyMF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX0NYWDIwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKLQotICAjIFRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgZGVmYXVsdCBmb3IgdGhpcwotICBzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEX0RFRkFVTFQgIiIpCi0KLSAgIyBUaGVyZSBhcmUgbm8gY29tcGlsZXIgbW9kZXMgc28gd2Ugb25seSBuZWVkIHRvIHRlc3QgZmVhdHVyZXMgb25jZS4KLSAgIyBPdmVycmlkZSB0aGUgZGVmYXVsdCBtYWNybyBmb3IgdGhpcyBzcGVjaWFsIGNhc2UuICBQcmV0ZW5kIHRoYXQKLSAgIyBhbGwgbGFuZ3VhZ2Ugc3RhbmRhcmRzIGFyZSBhdmFpbGFibGUgc28gdGhhdCBhdCBsZWFzdCBjb21waWxhdGlvbgotICAjIGNhbiBiZSBhdHRlbXB0ZWQuCi0gIG1hY3JvKGNtYWtlX3JlY29yZF9jeHhfY29tcGlsZV9mZWF0dXJlcykKLSAgICBsaXN0KEFQUEVORCBDTUFLRV9DWFhfQ09NUElMRV9GRUFUVVJFUwotICAgICAgY3h4X3N0ZF85OAotICAgICAgY3h4X3N0ZF8xMQotICAgICAgY3h4X3N0ZF8xNAotICAgICAgY3h4X3N0ZF8xNwotICAgICAgY3h4X3N0ZF8yMAotICAgICAgKQotICAgIF9yZWNvcmRfY29tcGlsZXJfZmVhdHVyZXMoQ1hYICIiIENNQUtFX0NYWF9DT01QSUxFX0ZFQVRVUkVTKQotICBlbmRtYWNybygpCitpZigieCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieE1TVkMiKQorICBzZXQoQ01BS0VfQ1hYX0NMQU5HX1RJRFlfRFJJVkVSX01PREUgImNsIikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmctT0JKQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy1PQkpDWFguY21ha2UKaW5kZXggYjAxY2U2NC4uNDUzYjVmZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9DbGFuZy1PQkpDWFguY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy1PQkpDWFguY21ha2UKQEAgLTEsNzAgKzEsMyBAQAogaW5jbHVkZShDb21waWxlci9DbGFuZykKIF9fY29tcGlsZXJfY2xhbmcoT0JKQ1hYKQotCi1pZigieCR7Q01BS0VfT0JKQ1hYX0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieEdOVSIpCi0gIGlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi4xKQotICAgIHNldChDTUFLRV9PQkpDWFg5OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKys5OCIpCi0gICAgc2V0KENNQUtFX09CSkNYWDk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzk4IikKLSAgZW5kaWYoKQotCi0gIGlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4xKQotICAgIHNldChDTUFLRV9PQkpDWFg5OF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTFfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTEiKQotICAgIHNldChDTUFLRV9PQkpDWFgxMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxMSIpCi0gICAgc2V0KENNQUtFX09CSkNYWDExX1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQotICBlbHNlaWYoTk9UIENNQUtFX09CSkNYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAyLjEpCi0gICAgc2V0KENNQUtFX09CSkNYWDExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzB4IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMHgiKQotICBlbmRpZigpCi0KLSAgaWYoTk9UIENNQUtFX09CSkNYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjUpCi0gICAgc2V0KENNQUtFX09CSkNYWDE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE0IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTRfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTQiKQotICAgIHNldChDTUFLRV9PQkpDWFgxNF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKLSAgZWxzZWlmKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy40KQotICAgIHNldChDTUFLRV9PQkpDWFgxNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxeSIpCi0gICAgc2V0KENNQUtFX09CSkNYWDE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF5IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTRfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCi0gIGVuZGlmKCkKLQotICBzZXQoX2NsYW5nX3ZlcnNpb25fc3RkMTcgNS4wKQotCi0gIGlmIChOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIke19jbGFuZ192ZXJzaW9uX3N0ZDE3fSIpCi0gICAgc2V0KENNQUtFX09CSkNYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE3IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTciKQotICBlbHNlaWYgKE5PVCBDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy41KQotICAgIHNldChDTUFLRV9PQkpDWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxeiIpCi0gICAgc2V0KENNQUtFX09CSkNYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzF6IikKLSAgZW5kaWYoKQotCi0gIGlmIChOT1QgQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIke19jbGFuZ192ZXJzaW9uX3N0ZDE3fSIpCi0gICAgc2V0KENNQUtFX09CSkNYWDIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzJhIikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMjBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMmEiKQotICBlbmRpZigpCi0KLSAgdW5zZXQoX2NsYW5nX3ZlcnNpb25fc3RkMTcpCi0KLSAgX19jb21waWxlcl9jaGVja19kZWZhdWx0X2xhbmd1YWdlX3N0YW5kYXJkKE9CSkNYWCAyLjEgOTgpCi1lbHNlaWYoQ01BS0VfT0JKQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDMuOQotICAgIEFORCBDTUFLRV9PQkpDWFhfU0lNVUxBVEVfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTkuMCkKLSAgIyBUaGlzIHZlcnNpb24gb2YgY2xhbmctY2wgYW5kIHRoZSBNU1ZDIHZlcnNpb24gaXQgc2ltdWxhdGVzIGhhdmUKLSAgIyBzdXBwb3J0IGZvciAtc3RkOiBmbGFncy4KLSAgc2V0KENNQUtFX09CSkNYWDk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfT0JKQ1hYOThfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfT0JKQ1hYOThfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCi0gIHNldChDTUFLRV9PQkpDWFgxMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX09CSkNYWDExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKLSAgc2V0KENNQUtFX09CSkNYWDE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrKzE0IikKLSAgc2V0KENNQUtFX09CSkNYWDE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNCIpCi0gIGlmIChDTUFLRV9PQkpDWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgNi4wKQotICAgIHNldChDTUFLRV9PQkpDWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNyIpCi0gICAgc2V0KENNQUtFX09CSkNYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNyIpCi0gICAgc2V0KENNQUtFX09CSkNYWDIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrK2xhdGVzdCIpCi0gICAgc2V0KENNQUtFX09CSkNYWDIwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZDpjKytsYXRlc3QiKQotICBlbHNlKCkKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrbGF0ZXN0IikKLSAgICBzZXQoQ01BS0VfT0JKQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrK2xhdGVzdCIpCi0gIGVuZGlmKCkKLQotICBfX2NvbXBpbGVyX2NoZWNrX2RlZmF1bHRfbGFuZ3VhZ2Vfc3RhbmRhcmQoT0JKQ1hYIDMuOSAxNCkKLWVuZGlmKCkKK19fY29tcGlsZXJfY2xhbmdfY3h4X3N0YW5kYXJkcyhPQkpDWFgpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9DbGFuZy5jbWFrZQppbmRleCA1Y2M5MzI4Li41MmQ1MzUwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0NsYW5nLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQ2xhbmcuY21ha2UKQEAgLTEwMSw3ICsxMDEsMTM0IEBACiAgICAgaWYgKE5PVCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiWGNvZGUiKQogICAgICAgc2V0KENNQUtFX1BDSF9QUk9MT0dVRSAiI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyIikKICAgICBlbmRpZigpCi0gICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1VTRV9QQ0ggLVhjbGFuZyAtaW5jbHVkZS1wY2ggLVhjbGFuZyA8UENIX0ZJTEU+KQorICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1YY2xhbmcgLWluY2x1ZGUtcGNoIC1YY2xhbmcgPFBDSF9GSUxFPiAtWGNsYW5nIC1pbmNsdWRlIC1YY2xhbmcgPFBDSF9IRUFERVI+KQogICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19DUkVBVEVfUENIIC1YY2xhbmcgLWVtaXQtcGNoIC1YY2xhbmcgLWluY2x1ZGUgLVhjbGFuZyA8UENIX0hFQURFUj4pCiAgIGVuZG1hY3JvKCkKIGVuZGlmKCkKKworbWFjcm8oX19jb21waWxlcl9jbGFuZ19jeHhfc3RhbmRhcmRzIGxhbmcpCisgIGlmKCJ4JHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX0ZST05URU5EX1ZBUklBTlR9IiBTVFJFUVVBTCAieEdOVSIpCisgICAgaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi4xKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ305OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKys5OCIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzk4IikKKyAgICBlbmRpZigpCisKKyAgICBpZihOT1QgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjEpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTk4X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxMSIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzExIikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTFfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCisgICAgZWxzZWlmKE5PVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDIuMSkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTFfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMHgiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysweCIpCisgICAgZW5kaWYoKQorCisgICAgaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy41KQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNCIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzE0IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTRfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCisgICAgZWxzZWlmKE5PVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuNCkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMXkiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxeSIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTE0X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQorICAgIGVuZGlmKCkKKworICAgIHNldChfY2xhbmdfdmVyc2lvbl9zdGQxNyA1LjApCisgICAgaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkFuZHJvaWQiKQorICAgICAgc2V0KF9jbGFuZ192ZXJzaW9uX3N0ZDE3IDYuMCkKKyAgICBlbmRpZigpCisKKyAgICBpZiAoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIiR7X2NsYW5nX3ZlcnNpb25fc3RkMTd9IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTciKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxNyIpCisgICAgZWxzZWlmIChOT1QgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjUpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzF6IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMXoiKQorICAgIGVuZGlmKCkKKworICAgIGlmKE5PVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDYuMCkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTdfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCisgICAgZW5kaWYoKQorCisgICAgaWYoTk9UIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTEuMCkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MjBfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMjAiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30yMF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysyMCIpCisgICAgZWxzZWlmKE5PVCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIke19jbGFuZ192ZXJzaW9uX3N0ZDE3fSIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTIwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzJhIikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MjBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMmEiKQorICAgIGVuZGlmKCkKKworICAgIHVuc2V0KF9jbGFuZ192ZXJzaW9uX3N0ZDE3KQorCisgICAgaWYoIngke0NNQUtFXyR7bGFuZ31fU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQorICAgICAgIyBUaGUgTVNWQyBzdGFuZGFyZCBsaWJyYXJ5IHJlcXVpcmVzIEMrKzE0LCBhbmQgTVNWQyBpdHNlbGYgaGFzIG5vCisgICAgICAjIG5vdGlvbiBvZiBvcGVyYXRpbmcgaW4gYSBtb2RlIG5vdCBhd2FyZSBvZiBhdCBsZWFzdCB0aGF0IHN0YW5kYXJkLgorICAgICAgc2V0KENNQUtFXyR7bGFuZ305OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNCIpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfTk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnUrKzE0IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTFfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTQiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysxNCIpCisKKyAgICAgICMgVGhpcyBjbGFuZysrIGlzIG1pc3Npbmcgc29tZSBmZWF0dXJlcyBiZWNhdXNlIG9mIE1TVkMgY29tcGF0aWJpbGl0eS4KKyAgICAgIHVuc2V0KENNQUtFXyR7bGFuZ30xMV9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgICAgIHVuc2V0KENNQUtFXyR7bGFuZ30xNF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgICAgIHVuc2V0KENNQUtFXyR7bGFuZ30xN19TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgICAgIHVuc2V0KENNQUtFXyR7bGFuZ30yMF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCkKKyAgICBlbmRpZigpCisKKyAgICBfX2NvbXBpbGVyX2NoZWNrX2RlZmF1bHRfbGFuZ3VhZ2Vfc3RhbmRhcmQoJHtsYW5nfSAyLjEgOTgpCisgIGVsc2VpZihDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDMuOQorICAgICAgQU5EIENNQUtFXyR7bGFuZ31fU0lNVUxBVEVfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTkuMCkKKyAgICAjIFRoaXMgdmVyc2lvbiBvZiBjbGFuZy1jbCBhbmQgdGhlIE1TVkMgdmVyc2lvbiBpdCBzaW11bGF0ZXMgaGF2ZQorICAgICMgc3VwcG9ydCBmb3IgLXN0ZDogZmxhZ3MuCisgICAgc2V0KENNQUtFXyR7bGFuZ305OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTk4X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQorICAgIHNldChDTUFLRV8ke2xhbmd9MTFfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ30xMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ30xNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZDpjKysxNCIpCisgICAgc2V0KENNQUtFXyR7bGFuZ30xNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrMTQiKQorICAgIGlmIChDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDYuMCkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrMTciKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30xN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrMTciKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30yMF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZDpjKytsYXRlc3QiKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ30yMF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrbGF0ZXN0IikKKyAgICBlbHNlKCkKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ6YysrbGF0ZXN0IikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9MTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkOmMrK2xhdGVzdCIpCisgICAgZW5kaWYoKQorCisgICAgX19jb21waWxlcl9jaGVja19kZWZhdWx0X2xhbmd1YWdlX3N0YW5kYXJkKCR7bGFuZ30gMy45IDE0KQorICBlbHNlKCkKKyAgICAjIFRoaXMgdmVyc2lvbiBvZiBjbGFuZy1jbCwgb3IgdGhlIE1TVkMgdmVyc2lvbiBpdCBzaW11bGF0ZXMsIGRvZXMgbm90IGhhdmUKKyAgICAjIGxhbmd1YWdlIHN0YW5kYXJkcy4gIFNldCB0aGVzZSBvcHRpb25zIGFzIGVtcHR5IHN0cmluZ3Mgc28gdGhlIGZlYXR1cmUKKyAgICAjIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgY2FuIGF0IGxlYXN0IGNoZWNrIHRvIHNlZSBpZiB0aGV5IGFyZSBkZWZpbmVkLgorICAgIHNldChDTUFLRV8ke2xhbmd9OThfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ305OF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ30xMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICAgIHNldChDTUFLRV8ke2xhbmd9MTRfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQorICAgIHNldChDTUFLRV8ke2xhbmd9MTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ30xN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFXyR7bGFuZ30yMF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfTIwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKworICAgICMgVGhlcmUgaXMgbm8gbWVhbmluZ2Z1bCBkZWZhdWx0IGZvciB0aGlzCisgICAgc2V0KENNQUtFXyR7bGFuZ31fU1RBTkRBUkRfREVGQVVMVCAiIikKKworICAgICMgVGhlcmUgYXJlIG5vIGNvbXBpbGVyIG1vZGVzIHNvIHdlIG9ubHkgbmVlZCB0byB0ZXN0IGZlYXR1cmVzIG9uY2UuCisgICAgIyBPdmVycmlkZSB0aGUgZGVmYXVsdCBtYWNybyBmb3IgdGhpcyBzcGVjaWFsIGNhc2UuICBQcmV0ZW5kIHRoYXQKKyAgICAjIGFsbCBsYW5ndWFnZSBzdGFuZGFyZHMgYXJlIGF2YWlsYWJsZSBzbyB0aGF0IGF0IGxlYXN0IGNvbXBpbGF0aW9uCisgICAgIyBjYW4gYmUgYXR0ZW1wdGVkLgorICAgIG1hY3JvKGNtYWtlX3JlY29yZF8ke2xhbmd9X2NvbXBpbGVfZmVhdHVyZXMpCisgICAgICBsaXN0KEFQUEVORCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVfRkVBVFVSRVMKKyAgICAgICAgY3h4X3N0ZF85OAorICAgICAgICBjeHhfc3RkXzExCisgICAgICAgIGN4eF9zdGRfMTQKKyAgICAgICAgY3h4X3N0ZF8xNworICAgICAgICBjeHhfc3RkXzIwCisgICAgICAgICkKKyAgICAgIF9yZWNvcmRfY29tcGlsZXJfZmVhdHVyZXMoJHtsYW5nfSAiIiBDTUFLRV8ke2xhbmd9X0NPTVBJTEVfRkVBVFVSRVMpCisgICAgZW5kbWFjcm8oKQorICBlbmRpZigpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0NyYXktRm9ydHJhbi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvQ3JheS1Gb3J0cmFuLmNtYWtlCmluZGV4IGNjYjdjMmUuLjY5NmFlNzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvQ3JheS1Gb3J0cmFuLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvQ3JheS1Gb3J0cmFuLmNtYWtlCkBAIC0xMSwzICsxMSwxMSBAQAogc2V0KENNQUtFX0ZvcnRyYW5fTU9ERElSX0RFRkFVTFQgLikKIHNldChDTUFLRV9Gb3J0cmFuX0ZPUk1BVF9GSVhFRF9GTEFHICItZiBmaXhlZCIpCiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRlJFRV9GTEFHICItZiBmcmVlIikKKworaWYgKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDguNSkKKyAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIi1lVCIpCisgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiAiLWRUIikKK2Vsc2UoKQorICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PTiAiLWVaIikKKyAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT0ZGICItZFoiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9GbGFuZy1Gb3J0cmFuLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9GbGFuZy1Gb3J0cmFuLmNtYWtlCmluZGV4IGYwZTYxZDguLmRlMDQ4NGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvRmxhbmctRm9ydHJhbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0ZsYW5nLUZvcnRyYW4uY21ha2UKQEAgLTExLDMgKzExLDYgQEAKIHNldChDTUFLRV9Gb3J0cmFuX0ZPUk1BVF9GUkVFX0ZMQUcgIi1mZnJlZS1mb3JtIikKIAogc2V0KENNQUtFX0ZvcnRyYW5fTU9ERElSX0ZMQUcgIi1KIikKKworc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIi1jcHAiKQorc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT0ZGICItbm9jcHAiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9HOTUtRm9ydHJhbi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvRzk1LUZvcnRyYW4uY21ha2UKaW5kZXggMDNiN2UwOC4uNWRiYTA0ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9HOTUtRm9ydHJhbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0c5NS1Gb3J0cmFuLmNtYWtlCkBAIC05LDMgKzksNSBAQAogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZSRUVfRkxBRyAiLWZmcmVlLWZvcm0iKQogc2V0KENNQUtFX0ZvcnRyYW5fTElOS0VSX1dSQVBQRVJfRkxBRyAiLVdsLCIpCiBzZXQoQ01BS0VfRm9ydHJhbl9MSU5LRVJfV1JBUFBFUl9GTEFHX1NFUCAiLCIpCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PTiAiLWNwcCIpCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PRkYgIi1uby1jcHAiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9HTlUtQVNNLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9HTlUtQVNNLmNtYWtlCmluZGV4IGUwNzQwMWQuLjk0YWY0MDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvR05VLUFTTS5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1BU00uY21ha2UKQEAgLTQsMyArNCwxMCBAQAogc2V0KENNQUtFX0FTTV9TT1VSQ0VfRklMRV9FWFRFTlNJT05TIHM7Uzthc20pCiAKIF9fY29tcGlsZXJfZ251KEFTTSkKKworaWYoQ01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfSURfVkVORE9SX01BVENIIFNUUkVRVUFMICJHTlUgYXNzZW1ibGVyIikKKyAgc2V0KENNQUtFX0RFUEZJTEVfRkxBR1NfQVNNJHtBU01fRElBTEVDVH0gIi0tTUQgPERFUEZJTEU+IikKKyAgc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRVhFQ1VUQUJMRQorICAgICI8Q01BS0VfTElOS0VSPiA8RkxBR1M+IDxDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICBzZXQoQ01BS0VfQVNNX0RFRklORV9GTEFHICItLWRlZnN5bSAiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9HTlUtQy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvR05VLUMuY21ha2UKaW5kZXggY2EyODZiMy4uODEwNWE3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9HTlUtQy5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1DLmNtYWtlCkBAIC0xLDYgKzEsOCBAQAogaW5jbHVkZShDb21waWxlci9HTlUpCiBfX2NvbXBpbGVyX2dudShDKQogCitzZXQoQ01BS0VfQ19DT01QSUxFX09QVElPTlNfRVhQTElDSVRfTEFOR1VBR0UgLXggYykKKwogaWYgKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDQuNSkKICAgc2V0KENNQUtFX0M5MF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jOTAiKQogICBzZXQoQ01BS0VfQzkwX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1nbnU5MCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1DWFguY21ha2UKaW5kZXggZmNhYWVhYi4uNTllYzA1NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9HTlUtQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvR05VLUNYWC5jbWFrZQpAQCAtMSw2ICsxLDggQEAKIGluY2x1ZGUoQ29tcGlsZXIvR05VKQogX19jb21waWxlcl9nbnUoQ1hYKQogCitzZXQoQ01BS0VfQ1hYX0NPTVBJTEVfT1BUSU9OU19FWFBMSUNJVF9MQU5HVUFHRSAteCBjKyspCisKIGlmIChXSU4zMikKICAgaWYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA0LjYpCiAgICAgc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfVklTSUJJTElUWV9JTkxJTkVTX0hJRERFTiAiLWZuby1rZWVwLWlubGluZS1kbGxleHBvcnQiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9HTlUtRm9ydHJhbi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvR05VLUZvcnRyYW4uY21ha2UKaW5kZXggNjQxMzc2OS4uNWRmYjAzZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9HTlUtRm9ydHJhbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0dOVS1Gb3J0cmFuLmNtYWtlCkBAIC0xMCw2ICsxMCwxMSBAQAogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZJWEVEX0ZMQUcgIi1mZml4ZWQtZm9ybSIpCiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRlJFRV9GTEFHICItZmZyZWUtZm9ybSIpCiAKK2lmIChOT1QgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA0LjQpCisgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09OICItY3BwIikKKyAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT0ZGICItbm9jcHAiKQorZW5kaWYoKQorCiBzZXQoQ01BS0VfRm9ydHJhbl9QT1NUUFJPQ0VTU19GTEFHICItZnByZXByb2Nlc3NlZCIpCiAKICMgTm8gLUROREVCVUcgZm9yIEZvcnRyYW4uCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0dOVS5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvR05VLmNtYWtlCmluZGV4IDFjMDUwYTIuLjY2OGE2YTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvR05VLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvR05VLmNtYWtlCkBAIC00NCw3ICs0NCw4IEBACiAgICMgdGVzdHMgdG8gYWx3YXlzIHN1Y2NlZWQuICBXb3JrIGFyb3VuZCB0aGlzIGJ5IGRpc2FibGluZyBkZXBlbmRlbmN5IHRyYWNraW5nCiAgICMgaW4gdHJ5X2NvbXBpbGUgbW9kZS4KICAgZ2V0X3Byb3BlcnR5KF9JTl9UQyBHTE9CQUwgUFJPUEVSVFkgSU5fVFJZX0NPTVBJTEUpCi0gIGlmKE5PVCBfSU5fVEMgT1IgQ01BS0VfRk9SQ0VfREVQRklMRVMpCisgIGlmKENNQUtFXyR7bGFuZ31fQ09NUElMRVJfSUQgU1RSRVFVQUwgIkdOVSIgQU5EIF9JTl9UQyBBTkQgTk9UIENNQUtFX0ZPUkNFX0RFUEZJTEVTKQorICBlbHNlKCkKICAgICAjIGRpc3RjYyBkb2VzIG5vdCB0cmFuc2Zvcm0gLW8gdG8gLU1UIHdoZW4gaW52b2tpbmcgdGhlIHByZXByb2Nlc3NvcgogICAgICMgaW50ZXJuYWxseSwgYXMgaXQgb3VnaHQgdG8uICBXb3JrIGFyb3VuZCB0aGlzIGJ1ZyBieSBzZXR0aW5nIC1NVCBoZXJlCiAgICAgIyBldmVuIHRob3VnaCBpdCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkuCkBAIC0xMTAsMTAgKzExMSwxMyBAQAogICBlbmRpZigpCiAgIGxpc3QoQVBQRU5EIENNQUtFXyR7bGFuZ31fQ09NUElMRVJfUFJFREVGSU5FU19DT01NQU5EICItZE0iICItRSIgIi1jIiAiJHtDTUFLRV9ST09UfS9Nb2R1bGVzL0NNYWtlQ1hYQ29tcGlsZXJBQkkuY3BwIikKIAotICBzZXQoQ01BS0VfUENIX0VYVEVOU0lPTiAuZ2NoKQotICBpZiAoTk9UIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJYY29kZSIpCi0gICAgc2V0KENNQUtFX1BDSF9QUk9MT0dVRSAiI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlciIpCisgIGlmKE5PVCAieCR7bGFuZ30iIFNUUkVRVUFMICJ4Rm9ydHJhbiIpCisgICAgc2V0KENNQUtFX1BDSF9FWFRFTlNJT04gLmdjaCkKKyAgICBpZiAoTk9UIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJYY29kZSIpCisgICAgICBzZXQoQ01BS0VfUENIX1BST0xPR1VFICIjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyIikKKyAgICBlbmRpZigpCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0lOVkFMSURfUENIIC1XaW52YWxpZC1wY2gpCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1VTRV9QQ0ggLWluY2x1ZGUgPFBDSF9IRUFERVI+KQorICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19DUkVBVEVfUENIIC14ICR7X19wY2hfaGVhZGVyXyR7bGFuZ319IC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKICAgZW5kaWYoKQotICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfVVNFX1BDSCAtV2ludmFsaWQtcGNoIC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKLSAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0ggLVdpbnZhbGlkLXBjaCAteCAke19fcGNoX2hlYWRlcl8ke2xhbmd9fSAtaW5jbHVkZSA8UENIX0hFQURFUj4pCiBlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0hQLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0hQLUZvcnRyYW4uY21ha2UKaW5kZXggNjNhMDMzMS4uZDNlMmEzMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9IUC1Gb3J0cmFuLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvSFAtRm9ydHJhbi5jbWFrZQpAQCAtNywzICs3LDYgQEAKIAogc2V0KENNQUtFX0ZvcnRyYW5fTElOS0VSX1dSQVBQRVJfRkxBRyAiLVdsLCIpCiBzZXQoQ01BS0VfRm9ydHJhbl9MSU5LRVJfV1JBUFBFUl9GTEFHICIsIikKKworc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIitjcHA9eWVzIikKK3NldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiAiK2NwcD1ubyIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL0lBUi5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvSUFSLmNtYWtlCmluZGV4IDhlNzVjYWEuLjI5NmUyZmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvSUFSLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvSUFSLmNtYWtlCkBAIC0xLDYgKzEsNiBAQAogIyBUaGlzIGZpbGUgaXMgcHJvY2Vzc2VkIHdoZW4gdGhlIElBUiBjb21waWxlciBpcyB1c2VkIGZvciBhIEMgb3IgQysrIGZpbGUKICMgRG9jdW1lbnRhdGlvbiBjYW4gYmUgZG93bmxvYWRlZCBoZXJlOiBodHRwOi8vd3d3Lmlhci5jb20vd2Vic2l0ZTEvMS4wLjEuMC82NzUvMS8KLSMgVGhlIGluaXRpYWwgZmVhdHVyZSByZXF1ZXN0IGlzIGhlcmU6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xMDE3NgorIyBUaGUgaW5pdGlhbCBmZWF0dXJlIHJlcXVlc3QgaXMgaGVyZTogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvMTAxNzYKICMgSXQgYWxzbyBjb250YWlucyBhZGRpdGlvbmFsIGxpbmtzIGFuZCBpbmZvcm1hdGlvbi4KICMgU2VlIFVTRVIgR1VJREVTIC0+IEMvQysrIERldmVsb3BtZW50IEd1aWRlIGFuZCBSZWxlYXNlTm90ZXMgZm9yIEVXQVJNOgogIyB2ZXJzaW9uIDYuMzAuODogaHR0cDovL3N1cHAuaWFyLmNvbS9GaWxlc1B1YmxpYy9VUERJTkZPLzAwNjYwNy9hcm0vZG9jL2luZm9jZW50ZXIvaW5kZXguRU5VLmh0bWwKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwtQy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwtQy5jbWFrZQppbmRleCBlOWU1OWEyLi4zMjJmNjNkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUMuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9JbnRlbC1DLmNtYWtlCkBAIC05LDYgKzksOCBAQAogCiBpZigieCR7Q01BS0VfQ19TSU1VTEFURV9JRH0iIFNUUkVRVUFMICJ4TVNWQyIpCiAKKyAgc2V0KENNQUtFX0NfQ0xBTkdfVElEWV9EUklWRVJfTU9ERSAiY2wiKQorCiAgIGlmIChOT1QgQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxNi4wLjApCiAgICAgc2V0KENNQUtFX0MxMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLVFzdGQ9YzExIikKICAgICBzZXQoQ01BS0VfQzExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLVFzdGQ9YzExIikKQEAgLTI2LDYgKzI4LDggQEAKIAogZWxzZSgpCiAKKyAgc2V0KENNQUtFX0NfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMpCisKICAgaWYgKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE1LjAuMCkKICAgICBzZXQoQ01BS0VfQzExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMxMSIpCiAgICAgc2V0KENNQUtFX0MxMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251MTEiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9JbnRlbC1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUNYWC5jbWFrZQppbmRleCBiNjMwYTZiLi40MmFkZmQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUNYWC5jbWFrZQpAQCAtOSw2ICs5LDEzIEBACiAKIGlmKCJ4JHtDTUFLRV9DWFhfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQogCisgIHNldChDTUFLRV9DWFhfQ0xBTkdfVElEWV9EUklWRVJfTU9ERSAiY2wiKQorCisgIGlmIChOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE5LjAuMCkKKyAgICBzZXQoQ01BS0VfQ1hYMjBfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1Rc3RkPWMrKzIwIikKKyAgICBzZXQoQ01BS0VfQ1hYMjBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItUXN0ZD1jKysyMCIpCisgIGVuZGlmKCkKKwogICBpZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxOC4wLjApCiAgICAgc2V0KENNQUtFX0NYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItUXN0ZD1jKysxNyIpCiAgICAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLVFzdGQ9YysrMTciKQpAQCAtMzUsNiArNDIsMTMgQEAKIAogZWxzZSgpCiAKKyAgc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfRVhQTElDSVRfTEFOR1VBR0UgLXggYysrKQorCisgIGlmIChOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE5LjAuMCkKKyAgICBzZXQoQ01BS0VfQ1hYMjBfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMjAiKQorICAgIHNldChDTUFLRV9DWFgyMF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9Z251KysyMCIpCisgIGVuZGlmKCkKKwogICBpZiAoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxOC4wLjApCiAgICAgc2V0KENNQUtFX0NYWDE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzE3IikKICAgICBzZXQoQ01BS0VfQ1hYMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudSsrMTciKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9JbnRlbC1Gb3J0cmFuLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9JbnRlbC1Gb3J0cmFuLmNtYWtlCmluZGV4IDE1NmI1MzMuLjcxZjI1ZjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwtRm9ydHJhbi5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLUZvcnRyYW4uY21ha2UKQEAgLTE1LDMgKzE1LDUgQEAKIAogc2V0KENNQUtFX0ZvcnRyYW5fUFJFUFJPQ0VTU19TT1VSQ0UKICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiAtZnBwIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLUUgPFNPVVJDRT4gPiA8UFJFUFJPQ0VTU0VEX1NPVVJDRT4iKQorc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIi1mcHAiKQorc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT0ZGICItbm9mcHAiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9JbnRlbC5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvSW50ZWwuY21ha2UKaW5kZXggZDg5NWVkMC4uOWE3NjBjOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9JbnRlbC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL0ludGVsLmNtYWtlCkBAIC0zMywxMSArMzMsMTQgQEAKICAgICBlbmRpZigpCiAgICAgbGlzdChBUFBFTkQgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9QUkVERUZJTkVTX0NPTU1BTkQgIi1RZE0iICItUCIgIi1aYSIgIiR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DTWFrZUNYWENvbXBpbGVyQUJJLmNwcCIpCiAKLSAgICAjIFByZWNvbXBpbGUgSGVhZGVycwotICAgIHNldChDTUFLRV9QQ0hfRVhURU5TSU9OIC5wY2hpKQotICAgIHNldChDTUFLRV9MSU5LX1BDSCBPTikKLSAgICBzZXQoQ01BS0VfUENIX0VQSUxPR1VFICIjcHJhZ21hIGhkcnN0b3AiKQotICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1XaW52YWxpZC1wY2ggLVduby1wY2gtbWVzc2FnZXMgLXBjaC11c2UgPFBDSF9GSUxFPiAtaW5jbHVkZSA8UENIX0hFQURFUj4pCi0gICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0ggLVdpbnZhbGlkLXBjaCAtV25vLXBjaC1tZXNzYWdlcyAtcGNoLWNyZWF0ZSA8UENIX0ZJTEU+IC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKKyAgICBpZihOT1QgIngke2xhbmd9IiBTVFJFUVVBTCAieEZvcnRyYW4iKQorICAgICAgIyBQcmVjb21waWxlIEhlYWRlcnMKKyAgICAgIHNldChDTUFLRV9QQ0hfRVhURU5TSU9OIC5wY2hpKQorICAgICAgc2V0KENNQUtFX0xJTktfUENIIE9OKQorICAgICAgc2V0KENNQUtFX1BDSF9FUElMT0dVRSAiI3ByYWdtYSBoZHJzdG9wIikKKyAgICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19JTlZBTElEX1BDSCAtV2ludmFsaWQtcGNoKQorICAgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1VTRV9QQ0ggLVduby1wY2gtbWVzc2FnZXMgLXBjaC11c2UgPFBDSF9GSUxFPiAtaW5jbHVkZSA8UENIX0hFQURFUj4pCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfQ1JFQVRFX1BDSCAtV25vLXBjaC1tZXNzYWdlcyAtcGNoLWNyZWF0ZSA8UENIX0ZJTEU+IC1pbmNsdWRlIDxQQ0hfSEVBREVSPikKKyAgICBlbmRpZigpCiAgIGVuZG1hY3JvKCkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvTVNWQy1DLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9NU1ZDLUMuY21ha2UKaW5kZXggMjA3ODdhMy4uYmNhOTc2NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9NU1ZDLUMuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9NU1ZDLUMuY21ha2UKQEAgLTExLDYgKzExLDggQEAKICMgVGhlcmUgaXMgbm8gbWVhbmluZ2Z1bCBkZWZhdWx0IGZvciB0aGlzCiBzZXQoQ01BS0VfQ19TVEFOREFSRF9ERUZBVUxUICIiKQogCitzZXQoQ01BS0VfQ19DTEFOR19USURZX0RSSVZFUl9NT0RFICJjbCIpCisKICMgVGhlcmUgYXJlIG5vIEMgY29tcGlsZXIgbW9kZXMgc28gd2UgaGFyZC1jb2RlIHRoZSBrbm93biBjb21waWxlciBzdXBwb3J0ZWQKICMgZmVhdHVyZXMuIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1hY3JvIGZvciB0aGlzIHNwZWNpYWwgY2FzZS4gIFByZXRlbmQgdGhhdAogIyBhbGwgbGFuZ3VhZ2Ugc3RhbmRhcmRzIGFyZSBhdmFpbGFibGUgc28gdGhhdCBhdCBsZWFzdCBjb21waWxhdGlvbgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9NU1ZDLUNYWC5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvTVNWQy1DWFguY21ha2UKaW5kZXggOTE1Mjk1ZC4uMWRmYzc2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9NU1ZDLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL01TVkMtQ1hYLmNtYWtlCkBAIC0zLDYgKzMsOCBAQAogCiBpbmNsdWRlKENvbXBpbGVyL0NNYWtlQ29tbW9uQ29tcGlsZXJNYWNyb3MpCiAKK3NldChDTUFLRV9DWFhfQ0xBTkdfVElEWV9EUklWRVJfTU9ERSAiY2wiKQorCiBpZiAoKENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxOS4wLjI0MjE1LjEgQU5ECiAgICAgIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxOS4xMCkgT1IKICAgIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxOS4xMC4yNTAxNykKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvTkFHLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL05BRy1Gb3J0cmFuLmNtYWtlCmluZGV4IGVkYzU2ZmQuLmZmY2U5N2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvTkFHLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9OQUctRm9ydHJhbi5jbWFrZQpAQCAtMSw2ICsxLDYgQEAKICMgSGVscCBDTUFLRV9QQVJTRV9JTVBMSUNJVF9MSU5LX0lORk8gZGV0ZWN0IE5BRyBGb3J0cmFuIG9iamVjdCBmaWxlcy4KIGlmKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1dPUktTIEFORCBOT1QgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9GT1JDRUQpCi0gIG1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgTkFHIEZvcnRyYW4gZGlyZWN0b3J5IikKKyAgbWVzc2FnZShDSEVDS19TVEFSVCAiRGV0ZWN0aW5nIE5BRyBGb3J0cmFuIGRpcmVjdG9yeSIpCiAgICMgUnVuIHdpdGggLWRyeXJ1biB0byBzZWUgc2FtcGxlICJsaW5rIiBsaW5lLgogICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgQ09NTUFORCAke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9IGR1bW15Lm8gLWRyeXJ1bgpAQCAtMjAsMTEgKzIwLDExIEBACiAgICAgICAiICBkaXJlY3Rvcnk6ICR7X25hZ19kaXJ9XG4iCiAgICAgICAiICByZWdleDogJHtDTUFLRV9Gb3J0cmFuX0lNUExJQ0lUX09CSkVDVF9SRUdFWH1cbiIKICAgICAgICJmcm9tIG91dHB1dDpcbiR7X2RyeXJ1bn1cblxuIikKLSAgICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nIE5BRyBGb3J0cmFuIGRpcmVjdG9yeSAtICR7X25hZ19kaXJ9IikKKyAgICBtZXNzYWdlKENIRUNLX1BBU1MgIiR7X25hZ19kaXJ9IikKICAgZWxzZSgpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgIkRldGVjdGluZyBOQUcgRm9ydHJhbiBkaXJlY3Rvcnkgd2l0aCAtZHJ5cnVuIGZhaWxlZDpcbiR7X2RyeXJ1bn1cblxuIikKLSAgICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nIE5BRyBGb3J0cmFuIGRpcmVjdG9yeSAtIGZhaWxlZCIpCisgICAgbWVzc2FnZShDSEVDS19GQUlMICJmYWlsZWQiKQogICBlbmRpZigpCiBlbmRpZigpCiAKQEAgLTM3LDMgKzM3LDQgQEAKIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QSUMgIi1QSUMiKQogc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BJRSAiLVBJQyIpCiBzZXQoQ01BS0VfRm9ydHJhbl9SRVNQT05TRV9GSUxFX0xJTktfRkxBRyAiLVdsLEAiKQorc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIi1mcHAiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9OVklESUEtQ1VEQS5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvTlZJRElBLUNVREEuY21ha2UKaW5kZXggYWU0MDEwMC4uZmViNWVjYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9OVklESUEtQ1VEQS5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL05WSURJQS1DVURBLmNtYWtlCkBAIC0xLDcgKzEsMzUgQEAKK2luY2x1ZGUoQ29tcGlsZXIvQ01ha2VDb21tb25Db21waWxlck1hY3JvcykKKwogc2V0KENNQUtFX0NVREFfQ09NUElMRVJfSEFTX0RFVklDRV9MSU5LX1BIQVNFIFRydWUpCiBzZXQoQ01BS0VfQ1VEQV9WRVJCT1NFX0ZMQUcgIi12IikKIHNldChDTUFLRV9DVURBX1ZFUkJPU0VfQ09NUElMRV9GTEFHICItWGNvbXBpbGVyPS12IikKIAorc2V0KF9DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBRyAiLXggY3UiKQorc2V0KF9DTUFLRV9DVURBX1BUWF9GTEFHICItcHR4IikKKworaWYgKENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTAuMi44OSkKKyAgIyBUaGUgLWZvcndhcmQtdW5rbm93bi10by1ob3N0LWNvbXBpbGVyIGZsYWcgd2FzIG9ubHkKKyAgIyBhZGRlZCB0byBudmNjIGluIDEwLjIgc28gYmVmb3JlIHRoYXQgd2UgaGFkIG5vIGdvb2QKKyAgIyB3YXkgdG8gaW52b2tlIHRoZSBDVURBIGNvbXBpbGVyIGFuZCBwcm9wYWdhdGUgdW5rbm93bgorICAjIGZsYWdzIHN1Y2ggYXMgLXB0aHJlYWQgdG8gdGhlIGhvc3QgY29tcGlsZXIKKyAgc2V0KF9DTUFLRV9DVURBX0VYVFJBX0ZMQUdTICItZm9yd2FyZC11bmtub3duLXRvLWhvc3QtY29tcGlsZXIiKQorZWxzZSgpCisgIHNldChfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHUyAiIikKK2VuZGlmKCkKKworaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAiOC4wLjAiKQorICBzZXQoX0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1MgIi1Xbm8tZGVwcmVjYXRlZC1ncHUtdGFyZ2V0cyIpCitlbHNlKCkKKyAgc2V0KF9DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTICIiKQorZW5kaWYoKQorCitpZiAoQ01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxMC4yLjg5KQorICAjIFRoZSAtTUQgZmxhZyB3YXMgb25seSBhZGRlZCB0byBudmNjIGluIDEwLjIgc28KKyAgIyBiZWZvcmUgdGhhdCB3ZSBoYWQgdG8gaW52b2tlIHRoZSBjb21waWxlciB0d2ljZQorICAjIHRvIGdldCBoZWFkZXIgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbgorICBzZXQoQ01BS0VfREVQRklMRV9GTEFHU19DVURBICItTUQgLU1UIDxPQkpFQ1Q+IC1NRiA8REVQRklMRT4iKQorZW5kaWYoKQorCiBpZihOT1QgIngke0NNQUtFX0NVREFfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQogICBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX09QVElPTlNfUElFIC1YY29tcGlsZXI9LWZQSUUpCiAgIHNldChDTUFLRV9DVURBX0NPTVBJTEVfT1BUSU9OU19QSUMgLVhjb21waWxlcj0tZlBJQykKQEAgLTE4LDIyICs0Niw2MyBAQAogc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV9DVURBX0ZMQUdTIC1zaGFyZWQpCiBzZXQoQ01BS0VfSU5DTFVERV9TWVNURU1fRkxBR19DVURBIC1pc3lzdGVtPSkKIAoraWYgKENNQUtFX0NVREFfU0lNVUxBVEVfSUQgU1RSRVFVQUwgIkdOVSIpCisgIHNldChDTUFLRV9DVURBX0xJTktFUl9XUkFQUEVSX0ZMQUcgIi1XbCwiKQorICBzZXQoQ01BS0VfQ1VEQV9MSU5LRVJfV1JBUFBFUl9GTEFHX1NFUCAiLCIpCitlbHNlaWYoQ01BS0VfQ1VEQV9TSU1VTEFURV9JRCBTVFJFUVVBTCAiQ2xhbmciKQorICBzZXQoQ01BS0VfQ1VEQV9MSU5LRVJfV1JBUFBFUl9GTEFHICItWGxpbmtlciIgIiAiKQorICBzZXQoQ01BS0VfQ1VEQV9MSU5LRVJfV1JBUFBFUl9GTEFHX1NFUCkKK2VuZGlmKCkKKworc2V0KENNQUtFX0NVREFfREVWSUNFX0NPTVBJTEVSX1dSQVBQRVJfRkxBRyAiLVhjb21waWxlcj0iKQorc2V0KENNQUtFX0NVREFfREVWSUNFX0NPTVBJTEVSX1dSQVBQRVJfRkxBR19TRVAgIiwiKQorc2V0KENNQUtFX0NVREFfREVWSUNFX0xJTktFUl9XUkFQUEVSX0ZMQUcgIi1YbGlua2VyPSIpCitzZXQoQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS0VSX1dSQVBQRVJfRkxBR19TRVAgIiwiKQorCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX1NUQVRJQyAgImN1ZGFkZXZydDtjdWRhcnRfc3RhdGljIikKK3NldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9MSU5LX09QVElPTlNfU0hBUkVEICAiY3VkYWRldnJ0O2N1ZGFydCIpCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX05PTkUgICAgIiIpCisKK2lmKFVOSVgpCisgIGxpc3QoQVBQRU5EIENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU19TVEFUSUMgInJ0IiAicHRocmVhZCIgImRsIikKK2VuZGlmKCkKKwogaWYoIngke0NNQUtFX0NVREFfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQotICBzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRF9ERUZBVUxUICIiKQorICBzZXQoQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICBzZXQoQ01BS0VfQ1VEQTAzX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKworICBzZXQoQ01BS0VfQ1VEQTExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICBzZXQoQ01BS0VfQ1VEQTExX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKworICBpZiAoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgOS4wKQorICAgIHNldChDTUFLRV9DVURBMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCisgICAgc2V0KENNQUtFX0NVREExNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCisgIGVuZGlmKCkKKworICBpZiAoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTEuMCkKKyAgICBzZXQoQ01BS0VfQ1VEQTE3X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQorICAgIHNldChDTUFLRV9DVURBMTdfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICIiKQorICBlbmRpZigpCisKIGVsc2UoKQotICBzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRF9ERUZBVUxUIDk4KQotICBzZXQoQ01BS0VfQ1VEQTk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQotICBzZXQoQ01BS0VfQ1VEQTk4X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiIikKKyAgc2V0KENNQUtFX0NVREEwM19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiIikKKyAgc2V0KENNQUtFX0NVREEwM19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCisKICAgc2V0KENNQUtFX0NVREExMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxMSIpCiAgIHNldChDTUFLRV9DVURBMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzExIikKIAogICBpZiAoTk9UIENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgOS4wKQotICAgIHNldChDTUFLRV9DVURBOThfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMDMiKQotICAgIHNldChDTUFLRV9DVURBOThfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzAzIikKKyAgICBzZXQoQ01BS0VfQ1VEQTAzX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItc3RkPWMrKzAzIikKKyAgICBzZXQoQ01BS0VfQ1VEQTAzX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXN0ZD1jKyswMyIpCiAgICAgc2V0KENNQUtFX0NVREExNF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNCIpCiAgICAgc2V0KENNQUtFX0NVREExNF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTQiKQogICBlbmRpZigpCiAKKyAgaWYgKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDExLjApCisgICAgc2V0KENNQUtFX0NVREExN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAiLXN0ZD1jKysxNyIpCisgICAgc2V0KENNQUtFX0NVREExN19FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1zdGQ9YysrMTciKQorICBlbmRpZigpCisKIGVuZGlmKCkKIAogIyBGSVhNRTogaW52ZXN0aWdhdGUgdXNlIG9mIC0tb3B0aW9ucy1maWxlLgpAQCAtNDYsMyArMTE1LDUgQEAKICAgc2V0KENNQUtFX0NVREFfUkVTUE9OU0VfRklMRV9ERVZJQ0VfTElOS19GTEFHICItLW9wdGlvbnMtZmlsZSAiKQogICBzZXQoQ01BS0VfQ1VEQV9SRVNQT05TRV9GSUxFX0ZMQUcgIi0tb3B0aW9ucy1maWxlICIpCiBlbmRpZigpCisKK19fY29tcGlsZXJfY2hlY2tfZGVmYXVsdF9sYW5ndWFnZV9zdGFuZGFyZChDVURBIDYuMCAwMykKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvTlZJRElBLURldGVybWluZUNvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9OVklESUEtRGV0ZXJtaW5lQ29tcGlsZXIuY21ha2UKaW5kZXggYmY5MTExYS4uNGY2ZGRjMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9OVklESUEtRGV0ZXJtaW5lQ29tcGlsZXIuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9OVklESUEtRGV0ZXJtaW5lQ29tcGlsZXIuY21ha2UKQEAgLTExLDkgKzExLDE5IEBACiAgICAvKiBfTVNDX1ZFUiA9IFZWUlIgKi8KICMgIGRlZmluZSBAUFJFRklYQFNJTVVMQVRFX1ZFUlNJT05fTUFKT1IgQE1BQ1JPX0RFQ0AoX01TQ19WRVIgLyAxMDApCiAjICBkZWZpbmUgQFBSRUZJWEBTSU1VTEFURV9WRVJTSU9OX01JTk9SIEBNQUNST19ERUNAKF9NU0NfVkVSICUgMTAwKQorIyBlbGlmIGRlZmluZWQoX19jbGFuZ19fKQorIyAgZGVmaW5lIEBQUkVGSVhAU0lNVUxBVEVfVkVSU0lPTl9NQUpPUiBATUFDUk9fREVDQChfX2NsYW5nX21ham9yX18pCisjICBkZWZpbmUgQFBSRUZJWEBTSU1VTEFURV9WRVJTSU9OX01JTk9SIEBNQUNST19ERUNAKF9fY2xhbmdfbWlub3JfXykKKyMgZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIEBQUkVGSVhAU0lNVUxBVEVfVkVSU0lPTl9NQUpPUiBATUFDUk9fREVDQChfX0dOVUNfXykKKyMgIGRlZmluZSBAUFJFRklYQFNJTVVMQVRFX1ZFUlNJT05fTUlOT1IgQE1BQ1JPX0RFQ0AoX19HTlVDX01JTk9SX18pCiAjIGVuZGlmIikKIAogc2V0KF9jb21waWxlcl9pZF9zaW11bGF0ZSAiCiAjIGlmIGRlZmluZWQoX01TQ19WRVIpCiAjICBkZWZpbmUgQFBSRUZJWEBTSU1VTEFURV9JRCBcIk1TVkNcIgorIyBlbGlmIGRlZmluZWQoX19jbGFuZ19fKQorIyAgZGVmaW5lIEBQUkVGSVhAU0lNVUxBVEVfSUQgXCJDbGFuZ1wiCisjIGVsaWYgZGVmaW5lZChfX0dOVUNfXykKKyMgIGRlZmluZSBAUFJFRklYQFNJTVVMQVRFX0lEIFwiR05VXCIKICMgZW5kaWYiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9PcGVuV2F0Y29tLUMuY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL09wZW5XYXRjb20tQy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWUzMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9Db21waWxlci9PcGVuV2F0Y29tLUMuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShDb21waWxlci9PcGVuV2F0Y29tKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9PcGVuV2F0Y29tLUNYWC5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvT3BlbldhdGNvbS1DWFguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllMzM1OQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvT3BlbldhdGNvbS1DWFguY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShDb21waWxlci9PcGVuV2F0Y29tKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9PcGVuV2F0Y29tLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9PcGVuV2F0Y29tLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjI1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL09wZW5XYXRjb20uY21ha2UKQEAgLTAsMCArMSwxMTggQEAKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KKworIyBUaGlzIG1vZHVsZSBpcyBzaGFyZWQgYnkgbXVsdGlwbGUgbGFuZ3VhZ2VzOyB1c2UgaW5jbHVkZSBibG9ja2VyLgoraW5jbHVkZV9ndWFyZCgpCisKK3NldChDTUFLRV9MSUJSQVJZX1BBVEhfRkxBRyAibGlicGF0aCAiKQorc2V0KENNQUtFX0xJTktfTElCUkFSWV9GTEFHICJsaWJyYXJ5ICIpCitzZXQoQ01BS0VfTElOS19MSUJSQVJZX0ZJTEVfRkxBRyAibGlicmFyeSAiKQorCitpZihDTUFLRV9WRVJCT1NFX01BS0VGSUxFKQorICBzZXQoQ01BS0VfV0NMX1FVSUVUKQorICBzZXQoQ01BS0VfV0xJTktfUVVJRVQpCisgIHNldChDTUFLRV9MSUJfUVVJRVQpCitlbHNlKCkKKyAgc2V0KENNQUtFX1dDTF9RVUlFVCAiLXpxIikKKyAgc2V0KENNQUtFX1dMSU5LX1FVSUVUICJvcHRpb24gcXVpZXQiKQorICBzZXQoQ01BS0VfTElCX1FVSUVUICItcSIpCitlbmRpZigpCisKK2ZvcmVhY2godHlwZSBDUkVBVEVfU0hBUkVEX0xJQlJBUlkgQ1JFQVRFX1NIQVJFRF9NT0RVTEUgTElOS19FWEVDVVRBQkxFKQorICBzZXQoQ01BS0VfQ18ke3R5cGV9X1VTRV9XQVRDT01fUVVPVEUgMSkKKyAgc2V0KENNQUtFX0NYWF8ke3R5cGV9X1VTRV9XQVRDT01fUVVPVEUgMSkKK2VuZGZvcmVhY2goKQorCitmb3JlYWNoKHR5cGUgU0hBUkVEIE1PRFVMRSBFWEUpCisgICMgbGlua2VyIG1hcCBmaWxlIGNyZWF0aW9uIGRpcmVjdGl2ZXMKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke3R5cGV9X0xJTktFUl9GTEFHU19JTklUICIgb3B0IG1hcCIpCisgICMgbGlua2VyIGRlYnVnIGRpcmVjdGl2ZXMKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke3R5cGV9X0xJTktFUl9GTEFHU19ERUJVR19JTklUICIgZGVidWcgYWxsIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke3R5cGV9X0xJTktFUl9GTEFHU19SRUxXSVRIREVCSU5GT19JTklUICIgZGVidWcgYWxsIikKK2VuZGZvcmVhY2goKQorCitmb3JlYWNoKGxhbmcgQyBDWFgpCisgICMgd2FybmluZyBsZXZlbAorICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfSU5JVCAiIC13MyIpCisgICMgZGVidWcgb3B0aW9ucworICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfREVCVUdfSU5JVCAiIC1kMiIpCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19NSU5TSVpFUkVMX0lOSVQgIiAtcyAtb3MgLWQwIC1kTkRFQlVHIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX1JFTEVBU0VfSU5JVCAiIC1zIC1vdCAtZDAgLWROREVCVUciKQorICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfUkVMV0lUSERFQklORk9fSU5JVCAiIC1zIC1vdCAtZDEgLWROREVCVUciKQorZW5kZm9yZWFjaCgpCisKKyMgQyBjcmVhdGUgaW1wb3J0IGxpYnJhcnkKK3NldChDTUFLRV9DX0NSRUFURV9JTVBPUlRfTElCUkFSWQorICAid2xpYiAtYyAtcSAtbiAtYiA8VEFSR0VUX0lNUExJQj4gKzxUQVJHRVRfUVVPVEVEPiIpCisjIEMrKyBjcmVhdGUgaW1wb3J0IGxpYnJhcnkKK3NldChDTUFLRV9DWFhfQ1JFQVRFX0lNUE9SVF9MSUJSQVJZICR7Q01BS0VfQ19DUkVBVEVfSU1QT1JUX0xJQlJBUll9KQorCisjIEMgbGluayBhIG9iamVjdCBmaWxlcyBpbnRvIGFuIGV4ZWN1dGFibGUgZmlsZQorc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFCisgICJ3bGluayAke0NNQUtFX1dMSU5LX1FVSUVUfSBuYW1lIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiBmaWxlIHs8T0JKRUNUUz59IDxMSU5LX0xJQlJBUklFUz4iKQorIyBDKysgbGluayBhIG9iamVjdCBmaWxlcyBpbnRvIGFuIGV4ZWN1dGFibGUgZmlsZQorc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUgJHtDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRX0pCisKKyMgQyBjb21waWxlIGEgZmlsZSBpbnRvIGFuIG9iamVjdCBmaWxlCitzZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVAorICAiPENNQUtFX0NfQ09NUElMRVI+ICR7Q01BS0VfV0NMX1FVSUVUfSAtZCsgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtZm88T0JKRUNUPiAtYyAtY2MgPFNPVVJDRT4iKQorIyBDKysgY29tcGlsZSBhIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQorc2V0KENNQUtFX0NYWF9DT01QSUxFX09CSkVDVAorICAiPENNQUtFX0NYWF9DT01QSUxFUj4gJHtDTUFLRV9XQ0xfUVVJRVR9IC1kKyA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1mbzxPQkpFQ1Q+IC1jIC1jYysrIDxTT1VSQ0U+IikKKworIyBDIHByZXByb2Nlc3MgYSBzb3VyY2UgZmlsZQorc2V0KENNQUtFX0NfQ1JFQVRFX1BSRVBST0NFU1NFRF9TT1VSQ0UKKyAgIjxDTUFLRV9DX0NPTVBJTEVSPiAke0NNQUtFX1dDTF9RVUlFVH0gLWQrIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLWZvPFBSRVBST0NFU1NFRF9TT1VSQ0U+IC1wbCAtY2MgPFNPVVJDRT4iKQorIyBDKysgcHJlcHJvY2VzcyBhIHNvdXJjZSBmaWxlCitzZXQoQ01BS0VfQ1hYX0NSRUFURV9QUkVQUk9DRVNTRURfU09VUkNFCisgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAke0NNQUtFX1dDTF9RVUlFVH0gLWQrIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLWZvPFBSRVBST0NFU1NFRF9TT1VSQ0U+IC1wbCAtY2MrKyA8U09VUkNFPiIpCisKKyMgQyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeQorc2V0KENNQUtFX0NfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZCisgICJ3bGluayAke0NNQUtFX1dMSU5LX1FVSUVUfSBuYW1lIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiBvcHRpb24gaW1wbGliPTxUQVJHRVRfSU1QTElCPiBmaWxlIHs8T0JKRUNUUz59IDxMSU5LX0xJQlJBUklFUz4iKQorIyBDKysgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkKK3NldChDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZICR7Q01BS0VfQ19DUkVBVEVfU0hBUkVEX0xJQlJBUll9KQorCisjIEMgY3JlYXRlIGEgc2hhcmVkIG1vZHVsZQorc2V0KENNQUtFX0NfQ1JFQVRFX1NIQVJFRF9NT0RVTEUKKyAgIndsaW5rICR7Q01BS0VfV0xJTktfUVVJRVR9IG5hbWUgPFRBUkdFVD4gPExJTktfRkxBR1M+IGZpbGUgezxPQkpFQ1RTPn0gPExJTktfTElCUkFSSUVTPiIpCisjIEMrKyBjcmVhdGUgYSBzaGFyZWQgbW9kdWxlCitzZXQoQ01BS0VfQ1hYX0NSRUFURV9TSEFSRURfTU9EVUxFICR7Q01BS0VfQ19DUkVBVEVfU0hBUkVEX01PRFVMRX0pCisKKyMgQyBjcmVhdGUgYSBzdGF0aWMgbGlicmFyeQorc2V0KENNQUtFX0NfQ1JFQVRFX1NUQVRJQ19MSUJSQVJZCisgICJ3bGliICR7Q01BS0VfTElCX1FVSUVUfSAtYyAtbiAtYiA8VEFSR0VUX1FVT1RFRD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAiKQorIyBDKysgY3JlYXRlIGEgc3RhdGljIGxpYnJhcnkKK3NldChDTUFLRV9DWFhfQ1JFQVRFX1NUQVRJQ19MSUJSQVJZICR7Q01BS0VfQ19DUkVBVEVfU1RBVElDX0xJQlJBUll9KQorCisKKyMgb2xkIENNYWtlIGludGVybmFsbHkgdXNlZCBPcGVuV2F0Y29tIHZlcnNpb24gbWFjcm9zCisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CitpZihOT1QgX0NNQUtFX1dBVENPTV9WRVJTSU9OKQorICBzZXQoX0NNQUtFX1dBVENPTV9WRVJTSU9OIDEpCisgIGlmKENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTikKKyAgICBzZXQoX2NvbXBpbGVyX3ZlcnNpb24gJHtDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT059KQorICAgIHNldChfY29tcGlsZXJfaWQgJHtDTUFLRV9DX0NPTVBJTEVSX0lEfSkKKyAgZWxzZSgpCisgICAgc2V0KF9jb21waWxlcl92ZXJzaW9uICR7Q01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT059KQorICAgIHNldChfY29tcGlsZXJfaWQgJHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9KQorICBlbmRpZigpCisgIHNldChXQVRDT00xNikKKyAgc2V0KFdBVENPTTE3KQorICBzZXQoV0FUQ09NMTgpCisgIHNldChXQVRDT00xOSkKKyAgaWYoIiR7X2NvbXBpbGVyX2lkfSIgU1RSRVFVQUwgIk9wZW5XYXRjb20iKQorICAgIGlmKCIke19jb21waWxlcl92ZXJzaW9ufSIgVkVSU0lPTl9MRVNTIDEuNykKKyAgICAgIHNldChXQVRDT00xNiAxKQorICAgIGVuZGlmKCkKKyAgICBpZigiJHtfY29tcGlsZXJfdmVyc2lvbn0iIFZFUlNJT05fRVFVQUwgMS43KQorICAgICAgc2V0KFdBVENPTTE3IDEpCisgICAgZW5kaWYoKQorICAgIGlmKCIke19jb21waWxlcl92ZXJzaW9ufSIgVkVSU0lPTl9FUVVBTCAxLjgpCisgICAgICBzZXQoV0FUQ09NMTggMSkKKyAgICBlbmRpZigpCisgICAgaWYoIiR7X2NvbXBpbGVyX3ZlcnNpb259IiBWRVJTSU9OX0VRVUFMIDEuOSkKKyAgICAgIHNldChXQVRDT00xOSAxKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9QR0ktQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9QR0ktQ1hYLmNtYWtlCmluZGV4IGM3N2RlMzYuLjJkN2EzMDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvUEdJLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL1BHSS1DWFguY21ha2UKQEAgLTQsMTkgKzQsMTkgQEAKIHN0cmluZyhBUFBFTkQgQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0VfSU5JVCAiIC1ETkRFQlVHIikKIAogaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEyLjEwKQotICBzZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIC1BKQorICBzZXQoQ01BS0VfQ1hYOThfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIiIpCiAgIHNldChDTUFLRV9DWFg5OF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gLS1nbnVfZXh0ZW5zaW9ucykKICAgc2V0KENNQUtFX0NYWDk4X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQogICBpZihDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTMuMTApCi0gICAgc2V0KENNQUtFX0NYWDExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICAtLWMrKzExIC1BKQorICAgIHNldChDTUFLRV9DWFgxMV9TVEFOREFSRF9DT01QSUxFX09QVElPTiAgLS1jKysxMSkKICAgICBzZXQoQ01BS0VfQ1hYMTFfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OIC0tYysrMTEgLS1nbnVfZXh0ZW5zaW9ucykKICAgICBzZXQoQ01BS0VfQ1hYMTFfU1RBTkRBUkRfX0hBU19GVUxMX1NVUFBPUlQgT04pCiAgICAgaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDE1LjcpCi0gICAgICBzZXQoQ01BS0VfQ1hYMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIC0tYysrMTQgLUEpCisgICAgICBzZXQoQ01BS0VfQ1hYMTRfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIC0tYysrMTQpCiAgICAgICBzZXQoQ01BS0VfQ1hYMTRfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OIC0tYysrMTQgLS1nbnVfZXh0ZW5zaW9ucykKICAgICAgIHNldChDTUFLRV9DWFgxNF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKICAgICAgIGlmKENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxNy4xKQotICAgICAgICBzZXQoQ01BS0VfQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIC0tYysrMTcgLUEpCisgICAgICAgIHNldChDTUFLRV9DWFgxN19TVEFOREFSRF9DT01QSUxFX09QVElPTiAgLS1jKysxNykKICAgICAgICAgc2V0KENNQUtFX0NYWDE3X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAtLWMrKzE3IC0tZ251X2V4dGVuc2lvbnMpCiAgICAgICAgIHNldChDTUFLRV9DWFgxN19TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKICAgICAgIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvUEdJLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1BHSS1Gb3J0cmFuLmNtYWtlCmluZGV4IDNkYWY3OTguLmZmODc1NzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvUEdJLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9QR0ktRm9ydHJhbi5jbWFrZQpAQCAtNiw2ICs2LDcgQEAKIAogc2V0KENNQUtFX0ZvcnRyYW5fUFJFUFJPQ0VTU19TT1VSQ0UKICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiAtTXByZXByb2Nlc3MgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtRSA8U09VUkNFPiA+IDxQUkVQUk9DRVNTRURfU09VUkNFPiIpCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PTiAiLU1wcmVwcm9jZXNzIikKIAogc2V0KENNQUtFX0ZvcnRyYW5fRk9STUFUX0ZJWEVEX0ZMQUcgIi1Nbm9mcmVlZm9ybSIpCiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRlJFRV9GTEFHICItTWZyZWVmb3JtIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvUGF0aFNjYWxlLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1BhdGhTY2FsZS1Gb3J0cmFuLmNtYWtlCmluZGV4IGQ5MDM2MjEuLjg5MWQ5M2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvUGF0aFNjYWxlLUZvcnRyYW4uY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9QYXRoU2NhbGUtRm9ydHJhbi5jbWFrZQpAQCAtNCwzICs0LDYgQEAKIHNldChDTUFLRV9Gb3J0cmFuX01PRERJUl9GTEFHICItbW9kdWxlICIpCiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRklYRURfRkxBRyAiLWZpeGVkZm9ybSIpCiBzZXQoQ01BS0VfRm9ydHJhbl9GT1JNQVRfRlJFRV9GTEFHICItZnJlZWZvcm0iKQorCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PTiAiLWNwcCIpCitzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFX09QVElPTlNfUFJFUFJPQ0VTU19PRkYgIi1ub2NwcCIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1FDQy1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1FDQy1DWFguY21ha2UKaW5kZXggMGU3MzE0YS4uNDIzMDNmNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9RQ0MtQ1hYLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvUUNDLUNYWC5jbWFrZQpAQCAtMTAsNiArMTAsNiBAQAogICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLWxhbmctYysrIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQogCiBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRQotICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLWxhbmctYysrIDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC1sYW5nLWMrKyA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKIAogc2V0KENNQUtFX0NYWF9DT01QSUxFX09QVElPTlNfVklTSUJJTElUWV9JTkxJTkVTX0hJRERFTiAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvUUNDLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9RQ0MuY21ha2UKaW5kZXggOWRmODI2OS4uMTBlMTM4OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9RQ0MuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9RQ0MuY21ha2UKQEAgLTEwLDYgKzEwLDkgQEAKICAgIyBodHRwOi8vd3d3LnFueC5jb20vZGV2ZWxvcGVycy9kb2NzLzYuNC4wL25ldXRyaW5vL3V0aWxpdGllcy9xL3FjYy5odG1sI2V4YW1wbGVzCiAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19UQVJHRVQgIi1WIikKIAorICBzZXQoQ01BS0VfUFJFRklYX0xJQlJBUllfQVJDSElURUNUVVJFICJPTiIpCisKKyAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1NZU1JPT1QgIi1XYywtaXN5c3Jvb3QsIikKICAgc2V0KENNQUtFX0lOQ0xVREVfU1lTVEVNX0ZMQUdfJHtsYW5nfSAiLVdwLC1pc3lzdGVtLCIpCiAgIHNldChDTUFLRV9ERVBGSUxFX0ZMQUdTXyR7bGFuZ30gIi1XcCwtTUQsPERFUEZJTEU+IC1XcCwtTVQsPE9CSkVDVD4gLVdwLC1NRiw8REVQRklMRT4iKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1N1blByby1Gb3J0cmFuLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9TdW5Qcm8tRm9ydHJhbi5jbWFrZQppbmRleCAwYzkzYzk0Li4wYmE1MDE1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL1N1blByby1Gb3J0cmFuLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvU3VuUHJvLUZvcnRyYW4uY21ha2UKQEAgLTMwLDMgKzMwLDUgQEAKIAogc2V0KENNQUtFX0ZvcnRyYW5fQ1JFQVRFX1BSRVBST0NFU1NFRF9TT1VSQ0UgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1GIC1mcHAgPFNPVVJDRT4gLW8gPFBSRVBST0NFU1NFRF9TT1VSQ0U+IikKIHNldChDTUFLRV9Gb3J0cmFuX0NSRUFURV9BU1NFTUJMWV9TT1VSQ0UgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1TIDxTT1VSQ0U+IC1vIDxBU1NFTUJMWV9TT1VSQ0U+IikKKworc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIi1mcHAiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9USS1BU00uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1RJLUFTTS5jbWFrZQppbmRleCBhNTY2ZDcwLi4wMTk2NWQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL1RJLUFTTS5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL1RJLUFTTS5jbWFrZQpAQCAtMSw4ICsxLDQgQEAKLXNldChDTUFLRV9MSUJSQVJZX1BBVEhfRkxBRyAiLS1zZWFyY2hfcGF0aD0iKQotc2V0KENNQUtFX0xJTktfTElCUkFSWV9GTEFHICItLWxpYnJhcnk9IikKLXNldChDTUFLRV9JTkNMVURFX0ZMQUdfQVNNICItLWluY2x1ZGVfcGF0aD0iKQotCi1zZXQoQ01BS0VfQVNNX0NPTVBJTEVfT0JKRUNUICAiPENNQUtFX0FTTV9DT01QSUxFUj4gLS1jb21waWxlX29ubHkgLS1hc21fZmlsZT08U09VUkNFPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC0tb3V0cHV0X2ZpbGU9PE9CSkVDVD4iKQotc2V0KENNQUtFX0FTTV9MSU5LX0VYRUNVVEFCTEUgIjxDTUFLRV9BU01fQ09NUElMRVI+IDxPQkpFQ1RTPiAtLXJ1bl9saW5rZXIgLS1vdXRwdXRfZmlsZT08VEFSR0VUPiA8Q01BS0VfQVNNX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8TElOS19MSUJSQVJJRVM+IikKK2luY2x1ZGUoQ29tcGlsZXIvVEkpCitfX2NvbXBpbGVyX3RpKEFTTSkKIAogc2V0KENNQUtFX0FTTV9TT1VSQ0VfRklMRV9FWFRFTlNJT05TIGFzbTtzO2FicykKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvVEktQy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvVEktQy5jbWFrZQppbmRleCAxYzBmNGJjLi44ZWEwMWI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL1RJLUMuY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9USS1DLmNtYWtlCkBAIC0xLDE4ICsxLDggQEAKLXNldChDTUFLRV9MSUJSQVJZX1BBVEhfRkxBRyAiLS1zZWFyY2hfcGF0aD0iKQotc2V0KENNQUtFX0xJTktfTElCUkFSWV9GTEFHICItLWxpYnJhcnk9IikKLXNldChDTUFLRV9JTkNMVURFX0ZMQUdfQyAiLS1pbmNsdWRlX3BhdGg9IikKK2luY2x1ZGUoQ29tcGlsZXIvVEkpCitfX2NvbXBpbGVyX3RpKEMpCiAKIHNldChDTUFLRV9DOTBfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi0tYzg5IikKIHNldChDTUFLRV9DOTBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItLWM4OSAtLXJlbGF4ZWRfYW5zaSIpCiAKIHNldChDTUFLRV9DOTlfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gIi0tYzk5IikKIHNldChDTUFLRV9DOTlfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItLWM5OSAtLXJlbGF4ZWRfYW5zaSIpCi0KLXNldChDTUFLRV9ERVBGSUxFX0ZMQUdTX0MgIi0tcHJlcHJvY193aXRoX2NvbXBpbGUgLS1wcmVwcm9jX2RlcGVuZGVuY3k9PERFUEZJTEU+IikKLQotc2V0KENNQUtFX0NfQ1JFQVRFX0FTU0VNQkxZX1NPVVJDRSAiPENNQUtFX0NfQ09NUElMRVI+IC0tY29tcGlsZV9vbmx5IC0tc2tpcF9hc3NlbWJsZXIgLS1jX2ZpbGU9PFNPVVJDRT4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtLW91dHB1dF9maWxlPTxBU1NFTUJMWV9TT1VSQ0U+IikKLXNldChDTUFLRV9DX0NSRUFURV9QUkVQUk9DRVNTRURfU09VUkNFICI8Q01BS0VfQ19DT01QSUxFUj4gLS1wcmVwcm9jX29ubHkgLS1jX2ZpbGU9PFNPVVJDRT4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtLW91dHB1dF9maWxlPTxQUkVQUk9DRVNTRURfU09VUkNFPiIpCi0KLXNldChDTUFLRV9DX0NPTVBJTEVfT0JKRUNUICAiPENNQUtFX0NfQ09NUElMRVI+IC0tY29tcGlsZV9vbmx5IC0tY19maWxlPTxTT1VSQ0U+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLS1vdXRwdXRfZmlsZT08T0JKRUNUPiIpCi1zZXQoQ01BS0VfQ19BUkNISVZFX0NSRUFURSAiPENNQUtFX0FSPiAtciA8VEFSR0VUPiA8T0JKRUNUUz4iKQotc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFICI8Q01BS0VfQ19DT01QSUxFUj4gLS1ydW5fbGlua2VyIC0tb3V0cHV0X2ZpbGU9PFRBUkdFVD4gLS1tYXBfZmlsZT08VEFSR0VUPi5tYXAgPENNQUtFX0NfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+IikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvVEktQ1hYLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9USS1DWFguY21ha2UKaW5kZXggNGM2YWYwNi4uYzA4ZDlhMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9USS1DWFguY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9USS1DWFguY21ha2UKQEAgLTEsMTIgKzEsMiBAQAotc2V0KENNQUtFX0xJQlJBUllfUEFUSF9GTEFHICItLXNlYXJjaF9wYXRoPSIpCi1zZXQoQ01BS0VfTElOS19MSUJSQVJZX0ZMQUcgIi0tbGlicmFyeT0iKQotc2V0KENNQUtFX0lOQ0xVREVfRkxBR19DWFggIi0taW5jbHVkZV9wYXRoPSIpCi0KLXNldChDTUFLRV9ERVBGSUxFX0ZMQUdTX0NYWCAiLS1wcmVwcm9jX3dpdGhfY29tcGlsZSAtLXByZXByb2NfZGVwZW5kZW5jeT08REVQRklMRT4iKQotCi1zZXQoQ01BS0VfQ1hYX0NSRUFURV9BU1NFTUJMWV9TT1VSQ0UgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC0tY29tcGlsZV9vbmx5IC0tc2tpcF9hc3NlbWJsZXIgLS1jcHBfZmlsZT08U09VUkNFPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC0tb3V0cHV0X2ZpbGU9PEFTU0VNQkxZX1NPVVJDRT4iKQotc2V0KENNQUtFX0NYWF9DUkVBVEVfUFJFUFJPQ0VTU0VEX1NPVVJDRSAiPENNQUtFX0NYWF9DT01QSUxFUj4gLS1wcmVwcm9jX29ubHkgLS1jcHBfZmlsZT08U09VUkNFPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC0tb3V0cHV0X2ZpbGU9PFBSRVBST0NFU1NFRF9TT1VSQ0U+IikKLQotc2V0KENNQUtFX0NYWF9DT01QSUxFX09CSkVDVCAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC0tY29tcGlsZV9vbmx5IC0tY3BwX2ZpbGU9PFNPVVJDRT4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtLW91dHB1dF9maWxlPTxPQkpFQ1Q+IikKLXNldChDTUFLRV9DWFhfQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gLXIgPFRBUkdFVD4gPE9CSkVDVFM+IikKLXNldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAtLXJ1bl9saW5rZXIgLS1vdXRwdXRfZmlsZT08VEFSR0VUPiAtLW1hcF9maWxlPTxUQVJHRVQ+Lm1hcCA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCitpbmNsdWRlKENvbXBpbGVyL1RJKQorX19jb21waWxlcl90aShDWFgpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1RJLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9USS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjJlODEzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9Db21waWxlci9USS5jbWFrZQpAQCAtMCwwICsxLDQwIEBACisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKKworIyBUaGlzIG1vZHVsZSBpcyBzaGFyZWQgYnkgbXVsdGlwbGUgbGFuZ3VhZ2VzOyB1c2UgaW5jbHVkZSBibG9ja2VyLgoraWYoX19DT01QSUxFUl9USSkKKyAgcmV0dXJuKCkKK2VuZGlmKCkKK3NldChfX0NPTVBJTEVSX1RJIDEpCisKK21hY3JvKF9fY29tcGlsZXJfdGkgbGFuZykKKyAgc3RyaW5nKFRPTE9XRVIgJHtsYW5nfSBwcmVmaXgpCisgIGlmKCJ4JHtsYW5nfSIgU1RSRVFVQUwgInhDWFgiKQorICAgIHNldChwcmVmaXggImNwcCIpCisgIGVuZGlmKCkKKworICBzZXQoQ01BS0VfJHtsYW5nfV9SRVNQT05TRV9GSUxFX0ZMQUcgIi0tY21kX2ZpbGU9IikKKworICBzZXQoQ01BS0VfSU5DTFVERV9GTEFHXyR7bGFuZ30gIi0taW5jbHVkZV9wYXRoPSIpCisgIHNldChDTUFLRV9ERVBGSUxFX0ZMQUdTXyR7bGFuZ30gIi0tcHJlcHJvY193aXRoX2NvbXBpbGUgLS1wcmVwcm9jX2RlcGVuZGVuY3k9PERFUEZJTEU+IikKKworICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfUFJFUFJPQ0VTU0VEX1NPVVJDRSAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IC0tcHJlcHJvY19vbmx5IC0tJHtwcmVmaXh9X2ZpbGU9PFNPVVJDRT4gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtLW91dHB1dF9maWxlPTxQUkVQUk9DRVNTRURfU09VUkNFPiIpCisgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9BU1NFTUJMWV9TT1VSQ0UgICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLS1jb21waWxlX29ubHkgLS1za2lwX2Fzc2VtYmxlciAtLSR7cHJlZml4fV9maWxlPTxTT1VSQ0U+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLS1vdXRwdXRfZmlsZT08QVNTRU1CTFlfU09VUkNFPiIpCisKKyAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PQkpFQ1QgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLS1jb21waWxlX29ubHkgLS0ke3ByZWZpeH1fZmlsZT08U09VUkNFPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC0tb3V0cHV0X2ZpbGU9PE9CSkVDVD4iKQorCisgIHNldChDTUFLRV8ke2xhbmd9X0FSQ0hJVkVfQ1JFQVRFICI8Q01BS0VfQVI+IHFyIDxUQVJHRVQ+IDxPQkpFQ1RTPiIpCisgIHNldChDTUFLRV8ke2xhbmd9X0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHFhIDxUQVJHRVQ+IDxPQkpFQ1RTPiIpCisgIHNldChDTUFLRV8ke2xhbmd9X0FSQ0hJVkVfRklOSVNIICIiKQorCisgICMgQWZ0ZXIgdGhlIC0tcnVuX2xpbmtlciBmbGFnIGEgcmVzcG9uc2UgZmlsZSBpcyBub3QgcG9zc2libGUKKyAgc2V0KENNQUtFXyR7bGFuZ31fUkVTUE9OU0VfRklMRV9MSU5LX0ZMQUcgIiIpCisgIHNldChDTUFLRV8ke2xhbmd9X1VTRV9SRVNQT05TRV9GSUxFX0ZPUl9MSUJSQVJJRVMgMCkKKyAgc2V0KENNQUtFXyR7bGFuZ31fVVNFX1JFU1BPTlNFX0ZJTEVfRk9SX09CSkVDVFMgMCkKKworICBzZXQoQ01BS0VfJHtsYW5nfV9MSU5LX0VYRUNVVEFCTEUgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiA8RkxBR1M+IC0tcnVuX2xpbmtlciAtLW91dHB1dF9maWxlPTxUQVJHRVQ+IC0tbWFwX2ZpbGU9PFRBUkdFVF9OQU1FPi5tYXAgPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+IikKK2VuZG1hY3JvKCkKKworc2V0KENNQUtFX0xJQlJBUllfUEFUSF9GTEFHICItLXNlYXJjaF9wYXRoPSIpCitzZXQoQ01BS0VfTElOS19MSUJSQVJZX0ZMQUcgIi0tbGlicmFyeT0iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9YTC1DLmNtYWtlIGIvTW9kdWxlcy9Db21waWxlci9YTC1DLmNtYWtlCmluZGV4IDIwNzdiZGEuLjc4YzQ0ZDUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvWEwtQy5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL1hMLUMuY21ha2UKQEAgLTYsNiArNiw4IEBACiAjIC1xdGhyZWFkZWQgPSBFbnN1cmVzIHRoYXQgYWxsIG9wdGltaXphdGlvbnMgd2lsbCBiZSB0aHJlYWQtc2FmZQogc3RyaW5nKEFQUEVORCBDTUFLRV9DX0ZMQUdTX0lOSVQgIiAtcXRocmVhZGVkIikKIAorc2V0KENNQUtFX0NfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC1xc291cmNldHlwZT1jKQorCiBpZiAoQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxMC4xKQogICBzZXQoQ01BS0VfQzkwX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItcWxhbmdsdmw9c3RkYzg5IikKICAgc2V0KENNQUtFX0M5MF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1xbGFuZ2x2bD1leHRjODkiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9YTC1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1hMLUNYWC5jbWFrZQppbmRleCAzMDM3ODUxLi4zYjkxMWYzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVyL1hMLUNYWC5jbWFrZQorKysgYi9Nb2R1bGVzL0NvbXBpbGVyL1hMLUNYWC5jbWFrZQpAQCAtNiw2ICs2LDggQEAKICMgLXF0aHJlYWRlZCA9IEVuc3VyZXMgdGhhdCBhbGwgb3B0aW1pemF0aW9ucyB3aWxsIGJlIHRocmVhZC1zYWZlCiBzdHJpbmcoQVBQRU5EIENNQUtFX0NYWF9GTEFHU19JTklUICIgLXF0aHJlYWRlZCIpCiAKK3NldChDTUFLRV9DWFhfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC0rKQorCiBpZiAoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEwLjEpCiAgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJMaW51eCIpCiAgICAgc2V0KENNQUtFX0NYWDk4X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICIiKQpAQCAtMTcsOCArMTksMTQgQEAKICAgc2V0KENNQUtFX0NYWDExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItcWxhbmdsdmw9ZXh0ZW5kZWQweCIpCiAgIHNldChDTUFLRV9DWFgxMV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIi1xbGFuZ2x2bD1leHRlbmRlZDB4IikKICAgc2V0KENNQUtFX0NYWDk4X1NUQU5EQVJEX19IQVNfRlVMTF9TVVBQT1JUIE9OKQorCisgICMgWEwgZG9lcyBub3QgcmVhbGx5IGhhdmUgZnVsbCBDKysxMSBvciBDKysxNCBzdXBwb3J0LCBidXQgc2luY2Ugd2UgZG8gbm90CisgICMgaGF2ZSBhIGdyYW51bGFyIFhMLUNYWC1GZWF0dXJlVGVzdHMgdGFibGUgZm9yIGl0IGp1c3QgcHJldGVuZCBpdCBkb2VzLgorICAjIFRoaXMgd2F5IHByb2plY3RzIHRoYXQgc3BlY2lmeSBncmFudWxhciBmZWF0dXJlcyB3aWxsIGF0IGxlYXN0IGdldCBhCisgICMgY29tcGlsZXIgbW9kZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3RhbmRhcmQuCiAgIHNldChDTUFLRV9DWFgxMV9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKLSAgaWYgKENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxNi4xLjApCisKKyAgaWYgKENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxNi4xLjAgQU5EIENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJMaW51eCIpCiAgICAgc2V0KENNQUtFX0NYWDE0X1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OICItcWxhbmdsdmw9ZXh0ZW5kZWQxeSIpCiAgICAgc2V0KENNQUtFX0NYWDE0X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAiLXFsYW5nbHZsPWV4dGVuZGVkMXkiKQogICAgIHNldChDTUFLRV9DWFgxNF9TVEFOREFSRF9fSEFTX0ZVTExfU1VQUE9SVCBPTikKQEAgLTI2LDYgKzM0LDMgQEAKIGVuZGlmICgpCiAKIF9fY29tcGlsZXJfY2hlY2tfZGVmYXVsdF9sYW5ndWFnZV9zdGFuZGFyZChDWFggMTAuMSA5OCkKLQotc2V0KENNQUtFX0NYWF9DT01QSUxFX09CSkVDVAotICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLSsgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1hMLUZvcnRyYW4uY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1hMLUZvcnRyYW4uY21ha2UKaW5kZXggYzRmYjA5Ny4uY2MxNWU2NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Db21waWxlci9YTC1Gb3J0cmFuLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvWEwtRm9ydHJhbi5jbWFrZQpAQCAtOCw2ICs4LDcgQEAKIHNldChDTUFLRV9Gb3J0cmFuX0ZPUk1BVF9GUkVFX0ZMQUcgIi1xZnJlZSIpICMgWz1mOTB8aWJtXQogCiBzZXQoQ01BS0VfRm9ydHJhbl9NT0RESVJfRkxBRyAiLXFtb2RkaXI9IikKK3NldChDTUFLRV9Gb3J0cmFuX01PRERJUl9JTkNMVURFX0ZMQUcgIi1JIikgIyAtcW1vZGRpcj0gZG9lcyBub3QgYWZmZWN0IHNlYXJjaCBwYXRoCiAKIHNldChDTUFLRV9Gb3J0cmFuX0RFRklORV9GTEFHICItV0YsLUQiKQogCkBAIC0xOCwzICsxOSwxMiBAQAogIyB4bGY6IDE1MDEtMjE0IChXKSBjb21tYW5kIG9wdGlvbiBFIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIC0gaWdub3JlZAogc2V0KENNQUtFX0ZvcnRyYW5fQ1JFQVRFX1BSRVBST0NFU1NFRF9TT1VSQ0UpCiBzZXQoQ01BS0VfRm9ydHJhbl9DUkVBVEVfQVNTRU1CTFlfU09VUkNFKQorCitzZXQoQ01BS0VfRm9ydHJhbl9QUkVQUk9DRVNTX1NPVVJDRQorICAiPENNQUtFX0ZvcnRyYW5fQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXFwcmVwcm9jZXNzIC1xbm9vYmplY3QgLXFzdXBwcmVzcz0xNTE3LTAyMCAtdEYgLUIgXCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1hMLUZvcnRyYW4vXCIgLVdGLC0tY3BwLFwiJHtDTUFLRV9Gb3J0cmFuX1hMX0NQUH1cIiwtLW91dCw8UFJFUFJPQ0VTU0VEX1NPVVJDRT4gPFNPVVJDRT4iCisgICkKKworaWYgKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDE1LjEuNikKKyAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04gIi1xcHJlcHJvY2VzcyIpCisgIHNldChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiAiLXFub3ByZXByb2Nlc3MiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Db21waWxlci9YTC1Gb3J0cmFuL2NwcCBiL01vZHVsZXMvQ29tcGlsZXIvWEwtRm9ydHJhbi9jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWZkNjJjMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvWEwtRm9ydHJhbi9jcHAKQEAgLTAsMCArMSwyOSBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorCisjIFNvdXJjZSBmaWxlLgorc3JjPSIkKHByaW50ZiAlcSAiJDEiKSIKK3NoaWZ0CisKKyMgT3V0cHV0IGZpbGUgdGhlIGNvbXBpbGVyIGV4cGVjdHMuCitvdXQ9IiQocHJpbnRmICVxICIkMSIpIgorc2hpZnQKKworIyBDcmVhdGUgdGhlIGZpbGUgdGhlIGNvbXBpbGVyIGV4cGVjdHMuICBJdCB3aWxsIGNoZWNrIHN5bnRheC4KKz4iJG91dCIKKworY3BwPSdjcHAnCitvcHRzPScnCit3aGlsZSB0ZXN0ICIkIyIgIT0gMDsgZG8KKyAgICBjYXNlICIkMSIgaW4KKyAgICAjIEV4dHJhY3QgdGhlIG9wdGlvbiBmb3IgdGhlIHBhdGggdG8gY3BwLgorICAgIC0tY3BwKSBzaGlmdDsgY3BwPSIkKHByaW50ZiAlcSAiJDEiKSIgOzsKKyAgICAjIEV4dHJhY3QgdGhlIG9wdGlvbiBmb3Igb3VyIG93biBvdXRwdXQgZmlsZS4KKyAgICAtLW91dCkgc2hpZnQ7IG91dD0iJChwcmludGYgJXEgIiQxIikiIDs7CisgICAgIyBDb2xsZWN0IHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUuCisgICAgKikgb3B0cz0iJG9wdHMgJChwcmludGYgJXEgIiQxIikiIDs7CisgICAgZXNhYworICAgIHNoaWZ0Citkb25lCisKKyMgRXhlY3V0ZSB0aGUgcmVhbCBwcmVwcm9jZXNzb3IgdG9vbC4KK2V2YWwgImV4ZWMgJGNwcCAkc3JjICRvdXQgJG9wdHMiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVyL1hMQ2xhbmctQy5jbWFrZSBiL01vZHVsZXMvQ29tcGlsZXIvWExDbGFuZy1DLmNtYWtlCmluZGV4IDU0YzE4YTYuLjE2NjhhNGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvWExDbGFuZy1DLmNtYWtlCisrKyBiL01vZHVsZXMvQ29tcGlsZXIvWExDbGFuZy1DLmNtYWtlCkBAIC0xLDYgKzEsOCBAQAogaW5jbHVkZShDb21waWxlci9YTENsYW5nKQogX19jb21waWxlcl94bGNsYW5nKEMpCiAKK3NldChDTUFLRV9DX0NPTVBJTEVfT1BUSU9OU19FWFBMSUNJVF9MQU5HVUFHRSAteCBjKQorCiBpZiAoQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxMy4xLjEpCiAgIHNldChDTUFLRV9DOTBfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04gICItc3RkPWM4OSIpCiAgIHNldChDTUFLRV9DOTBfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICItc3RkPWdudTg5IikKZGlmZiAtLWdpdCBhL01vZHVsZXMvQ29tcGlsZXIvWExDbGFuZy1DWFguY21ha2UgYi9Nb2R1bGVzL0NvbXBpbGVyL1hMQ2xhbmctQ1hYLmNtYWtlCmluZGV4IDllYTNkN2MuLjAyNjM4YzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXIvWExDbGFuZy1DWFguY21ha2UKKysrIGIvTW9kdWxlcy9Db21waWxlci9YTENsYW5nLUNYWC5jbWFrZQpAQCAtMSw2ICsxLDggQEAKIGluY2x1ZGUoQ29tcGlsZXIvWExDbGFuZykKIF9fY29tcGlsZXJfeGxjbGFuZyhDWFgpCiAKK3NldChDTUFLRV9DWFhfQ09NUElMRV9PUFRJT05TX0VYUExJQ0lUX0xBTkdVQUdFIC14IGMrKykKKwogaWYgKENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxMy4xLjEpCiAgIHNldChDTUFLRV9DWFg5OF9TVEFOREFSRF9DT01QSUxFX09QVElPTiAgIiIpCiAgIHNldChDTUFLRV9DWFg5OF9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gIiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVySWQvVlMtMTAudmN4cHJvai5pbiBiL01vZHVsZXMvQ29tcGlsZXJJZC9WUy0xMC52Y3hwcm9qLmluCmluZGV4IGQ3NDIyNzQuLjM1OThmYzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvQ29tcGlsZXJJZC9WUy0xMC52Y3hwcm9qLmluCisrKyBiL01vZHVsZXMvQ29tcGlsZXJJZC9WUy0xMC52Y3hwcm9qLmluCkBAIC05LDEyICs5LDE0IEBACiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KICAgICA8UHJvamVjdEd1aWQ+e0NBRTA3MTc1LUQwMDctNEZDMy1CRkU4LTQ3QjM5MjgxNDE1OX08L1Byb2plY3RHdWlkPgogICAgIDxSb290TmFtZXNwYWNlPkNvbXBpbGVySWRAaWRfbGFuZ0A8L1Jvb3ROYW1lc3BhY2U+Ci0gICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxLZXl3b3JkPkBpZF9rZXl3b3JkQDwvS2V5d29yZD4KICAgICBAaWRfc3lzdGVtQAogICAgIEBpZF9zeXN0ZW1fdmVyc2lvbkAKICAgICBAaWRfV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbkAKICAgICBAaWRfV2luZG93c1NES0Rlc2t0b3BBUk1TdXBwb3J0QAogICAgIEBpZF9DdWRhVG9vbGtpdEN1c3RvbURpckAKKyAgICBAaWRfVG9vbHNldFZDVGFyZ2V0c0RpckAKKyAgICBAaWRfQ3VzdG9tR2xvYmFsc0AKICAgPC9Qcm9wZXJ0eUdyb3VwPgogICBAaWRfdG9vbHNldF92ZXJzaW9uX3Byb3BzQAogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgpAQCAtMjIsNyArMjQsNyBAQAogICAgIEBpZF9QcmVmZXJyZWRUb29sQXJjaGl0ZWN0dXJlQAogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8QGlkX3BsYXRmb3JtQCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5AaWRfY29uZmlnX3R5cGVAPC9Db25maWd1cmF0aW9uVHlwZT4KICAgICBAaWRfdG9vbHNldEAKICAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CmRpZmYgLS1naXQgYS9Nb2R1bGVzL0NvbXBpbGVySWQvWGNvZGUtMy5wYnhwcm9qLmluIGIvTW9kdWxlcy9Db21waWxlcklkL1hjb2RlLTMucGJ4cHJvai5pbgppbmRleCA2NzIwNDRlLi42ZmUxN2U1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0NvbXBpbGVySWQvWGNvZGUtMy5wYnhwcm9qLmluCisrKyBiL01vZHVsZXMvQ29tcGlsZXJJZC9YY29kZS0zLnBieHByb2ouaW4KQEAgLTg0LDYgKzg0LDcgQEAKIAkJCQlDT0RFX1NJR05JTkdfUkVRVUlSRUQgPSBOTzsKIAkJCQlDT05GSUdVUkFUSU9OX0JVSUxEX0RJUiA9ICIkKEJVSUxEX0RJUikiOwogCQkJCVNZTVJPT1QgPSAuOworCQkJCUBpZF9hcmNoc0AKIAkJCQlAaWRfdG9vbHNldEAKIAkJCQlAaWRfbGFuZ192ZXJzaW9uQAogCQkJCUBpZF9jbGFuZ19jeHhfbGlicmFyeUAKZGlmZiAtLWdpdCBhL01vZHVsZXMvRGFydENvbmZpZ3VyYXRpb24udGNsLmluIGIvTW9kdWxlcy9EYXJ0Q29uZmlndXJhdGlvbi50Y2wuaW4KaW5kZXggZTQ1MTNiMy4uMDg2YmEwNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9EYXJ0Q29uZmlndXJhdGlvbi50Y2wuaW4KKysrIGIvTW9kdWxlcy9EYXJ0Q29uZmlndXJhdGlvbi50Y2wuaW4KQEAgLTY5LDYgKzY5LDggQEAKIFB1cmlmeUNvbW1hbmQ6IEBQVVJJRllDT01NQU5EQAogVmFsZ3JpbmRDb21tYW5kOiBAVkFMR1JJTkRfQ09NTUFOREAKIFZhbGdyaW5kQ29tbWFuZE9wdGlvbnM6IEBWQUxHUklORF9DT01NQU5EX09QVElPTlNACitEck1lbW9yeUNvbW1hbmQ6IEBEUk1FTU9SWV9DT01NQU5EQAorRHJNZW1vcnlDb21tYW5kT3B0aW9uczogQERSTUVNT1JZX0NPTU1BTkRfT1BUSU9OU0AKIE1lbW9yeUNoZWNrVHlwZTogQE1FTU9SWUNIRUNLX1RZUEVACiBNZW1vcnlDaGVja1Nhbml0aXplck9wdGlvbnM6IEBNRU1PUllDSEVDS19TQU5JVElaRVJfT1BUSU9OU0AKIE1lbW9yeUNoZWNrQ29tbWFuZDogQE1FTU9SWUNIRUNLX0NPTU1BTkRACmRpZmYgLS1naXQgYS9Nb2R1bGVzL0RlcGxveVF0NC5jbWFrZSBiL01vZHVsZXMvRGVwbG95UXQ0LmNtYWtlCmluZGV4IDRhMTg5MjcuLjlhYTQzODMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRGVwbG95UXQ0LmNtYWtlCisrKyBiL01vZHVsZXMvRGVwbG95UXQ0LmNtYWtlCkBAIC0xMDYsNyArMTA2LDYgQEAKICMgVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgZmlsZSBkZXBlbmQgb24gdGhlIGZpeHVwX2J1bmRsZSBmdW5jdGlvbgogIyAoYW5kIG90aGVycykgZm91bmQgaW4gQnVuZGxlVXRpbGl0aWVzLmNtYWtlCiAKLXNldChEZXBsb3lRdDRfY21ha2VfZGlyICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9IikKIHNldChEZXBsb3lRdDRfYXBwbGVfcGx1Z2luc19kaXIgIlBsdWdJbnMiKQogCiBmdW5jdGlvbih3cml0ZV9xdDRfY29uZiBxdF9jb25mX2RpciBxdF9jb25mX2NvbnRlbnRzKQpAQCAtMzkyLDcgKzM5MSw3IEBACiAgIHJlc29sdmVfcXQ0X3BhdGhzKGxpYnMgIiIpCiAKICAgaW5zdGFsbChDT0RFCi0iaW5jbHVkZShcIiR7RGVwbG95UXQ0X2NtYWtlX2Rpcn0vRGVwbG95UXQ0LmNtYWtlXCIpCisiaW5jbHVkZShcIiR7Q01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUn0vRGVwbG95UXQ0LmNtYWtlXCIpCiBzZXQoQlVfQ0hNT0RfQlVORExFX0lURU1TIFRSVUUpCiBGSVhVUF9RVDRfRVhFQ1VUQUJMRShcIlwkRU5We0RFU1RESVJ9XCR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7ZXhlY3V0YWJsZX1cIiBcIlwiIFwiJHtsaWJzfVwiIFwiJHtkaXJzfVwiIFwiJHtwbHVnaW5zX2Rpcn1cIiBcIiR7cmVxdWVzdF9xdF9jb25mfVwiKSIKICAgICAgICAgICAke2NvbXBvbmVudH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvRG9jdW1lbnRhdGlvbi5jbWFrZSBiL01vZHVsZXMvRG9jdW1lbnRhdGlvbi5jbWFrZQppbmRleCBhYWYyNGY2Li5jMjk3MjMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0RvY3VtZW50YXRpb24uY21ha2UKKysrIGIvTW9kdWxlcy9Eb2N1bWVudGF0aW9uLmNtYWtlCkBAIC05LDYgKzksMzAgQEAKIHJlbGllcyBvbiBzZXZlcmFsIHRvb2xzIChEb3h5Z2VuLCBQZXJsLCBldGMpLgogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAorY21ha2VfcG9saWN5KEdFVCBDTVAwMTA2IF9Eb2N1bWVudGF0aW9uX3BvbGljeSkKKworaWYgKF9Eb2N1bWVudGF0aW9uX3BvbGljeSBTVFJFUVVBTCAiTkVXIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJEb2N1bWVudGF0aW9uLmNtYWtlIGlzIFZUSy1zcGVjaWZpYyBjb2RlIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gIgorICAgICJub24tVlRLIHByb2plY3RzLiBUaGlzIGxvZ2ljIGluIHRoaXMgbW9kdWxlIGlzIGJlc3Qgc2hpcHBlZCB3aXRoIHRoZSAiCisgICAgInByb2plY3QgdXNpbmcgaXQgcmF0aGVyIHRoYW4gd2l0aCBDTWFrZS4gVGhpcyBpcyBub3cgYW4gZXJyb3IgYWNjb3JkaW5nICIKKyAgICAidG8gcG9saWN5IENNUDAxMDYuIikKK2Vsc2UgKCkKKworaWYgKF9Eb2N1bWVudGF0aW9uX3BvbGljeSBTVFJFUVVBTCAiIikKKyAgIyBJZ25vcmUgdGhlIHdhcm5pbmcgaWYgdGhlIHByb2plY3QgaXMgZGV0ZWN0ZWQgYXMgVlRLIGl0c2VsZi4KKyAgaWYgKE5PVCBDTUFLRV9QUk9KRUNUX05BTUUgU1RSRVFVQUwgIlZUSyIgQU5ECisgICAgICBOT1QgUFJPSkVDVF9OQU1FIFNUUkVRVUFMICJWVEsiKQorICAgIGNtYWtlX3BvbGljeShHRVRfV0FSTklORyBDTVAwMTA2IF9Eb2N1bWVudGF0aW9uX3BvbGljeV93YXJuaW5nKQorICAgIG1lc3NhZ2UoQVVUSE9SX1dBUk5JTkcKKyAgICAgICIke19Eb2N1bWVudGF0aW9uX3BvbGljeV93YXJuaW5nfVxuIgorICAgICAgIkRvY3VtZW50YXRpb24uY21ha2UgaXMgVlRLLXNwZWNpZmljIGNvZGUgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiAiCisgICAgICAibm9uLVZUSyBwcm9qZWN0cy4gVGhpcyBsb2dpYyBpbiB0aGlzIG1vZHVsZSBpcyBiZXN0IHNoaXBwZWQgd2l0aCB0aGUgIgorICAgICAgInByb2plY3QgdXNpbmcgaXQgcmF0aGVyIHRoYW4gd2l0aCBDTWFrZS4iKQorICBlbmRpZiAoKQorICB1bnNldChfRG9jdW1lbnRhdGlvbl9wb2xpY3lfd2FybmluZykKK2VuZGlmICgpCisKICMKICMgQnVpbGQgdGhlIGRvY3VtZW50YXRpb24gPwogIwpAQCAtNDQsMyArNjgsNyBAQAogICAjCiAKIGVuZGlmICgpCisKK2VuZGlmICgpCisKK3Vuc2V0KF9Eb2N1bWVudGF0aW9uX3BvbGljeSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LWdpdHVwZGF0ZS5jbWFrZS5pbiBiL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LWdpdHVwZGF0ZS5jbWFrZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmYzOWMxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9FeHRlcm5hbFByb2plY3QtZ2l0dXBkYXRlLmNtYWtlLmluCkBAIC0wLDAgKzEsMjE2IEBACisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjUpCisKK2V4ZWN1dGVfcHJvY2VzcygKKyAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFECisgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICBPVVRQVVRfVkFSSUFCTEUgaGVhZF9zaGEKKyAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKyAgKQoraWYoZXJyb3JfY29kZSkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIGdldCB0aGUgaGFzaCBmb3IgSEVBRCIpCitlbmRpZigpCisKK2V4ZWN1dGVfcHJvY2VzcygKKyAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgc2hvdy1yZWYgIkBnaXRfdGFnQCIKKyAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgIE9VVFBVVF9WQVJJQUJMRSBzaG93X3JlZl9vdXRwdXQKKyAgKQorIyBJZiBhIHJlbW90ZSByZWYgaXMgYXNrZWQgZm9yLCB3aGljaCBjYW4gcG9zc2libHkgbW92ZSBhcm91bmQsCisjIHdlIG11c3QgYWx3YXlzIGRvIGEgZmV0Y2ggYW5kIGNoZWNrb3V0LgoraWYoIiR7c2hvd19yZWZfb3V0cHV0fSIgTUFUQ0hFUyAicmVtb3RlcyIpCisgIHNldChpc19yZW1vdGVfcmVmIDEpCitlbHNlKCkKKyAgc2V0KGlzX3JlbW90ZV9yZWYgMCkKK2VuZGlmKCkKKworIyBUYWcgaXMgaW4gdGhlIGZvcm0gPHJlbW90ZT4vPHRhZz4gKGkuZS4gb3JpZ2luL21hc3Rlcikgd2UgbXVzdCBzdHJpcAorIyB0aGUgcmVtb3RlIGZyb20gdGhlIHRhZy4KK2lmKCIke3Nob3dfcmVmX291dHB1dH0iIE1BVENIRVMgInJlZnMvcmVtb3Rlcy9AZ2l0X3RhZ0AiKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIl4oW14vXSspLyguKykkIiBfdW51c2VkICJAZ2l0X3RhZ0AiKQorICBzZXQoZ2l0X3JlbW90ZSAiJHtDTUFLRV9NQVRDSF8xfSIpCisgIHNldChnaXRfdGFnICIke0NNQUtFX01BVENIXzJ9IikKK2Vsc2UoKQorICBzZXQoZ2l0X3JlbW90ZSAiQGdpdF9yZW1vdGVfbmFtZUAiKQorICBzZXQoZ2l0X3RhZyAiQGdpdF90YWdAIikKK2VuZGlmKCkKKworIyBUaGlzIHdpbGwgZmFpbCBpZiB0aGUgdGFnIGRvZXMgbm90IGV4aXN0IChpdCBwcm9iYWJseSBoYXMgbm90IGJlZW4gZmV0Y2hlZAorIyB5ZXQpLgorZXhlY3V0ZV9wcm9jZXNzKAorICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiByZXYtbGlzdCAtLW1heC1jb3VudD0xICIke2dpdF90YWd9IgorICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgT1VUUFVUX1ZBUklBQkxFIHRhZ19zaGEKKyAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKyAgKQorCisjIElzIHRoZSBoYXNoIGNoZWNrb3V0IG91dCB0aGF0IHdlIHdhbnQ/CitpZihlcnJvcl9jb2RlIE9SIGlzX3JlbW90ZV9yZWYgT1IgTk9UICgiJHt0YWdfc2hhfSIgU1RSRVFVQUwgIiR7aGVhZF9zaGF9IikpCisgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiBmZXRjaAorICAgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCisgICAgKQorICBpZihlcnJvcl9jb2RlKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBmZXRjaCByZXBvc2l0b3J5ICdAZ2l0X3JlcG9zaXRvcnlAJyIpCisgIGVuZGlmKCkKKworICBpZihpc19yZW1vdGVfcmVmKQorICAgICMgQ2hlY2sgaWYgc3Rhc2ggaXMgbmVlZGVkCisgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgc3RhdHVzIC0tcG9yY2VsYWluCisgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCisgICAgICBPVVRQVVRfVkFSSUFCTEUgcmVwb19zdGF0dXMKKyAgICAgICkKKyAgICBpZihlcnJvcl9jb2RlKQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIGdldCB0aGUgc3RhdHVzIikKKyAgICBlbmRpZigpCisgICAgc3RyaW5nKExFTkdUSCAiJHtyZXBvX3N0YXR1c30iIG5lZWRfc3Rhc2gpCisKKyAgICAjIElmIG5vdCBpbiBjbGVhbiBzdGF0ZSwgc3Rhc2ggY2hhbmdlcyBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHBlcmZvcm0gYQorICAgICMgcmViYXNlIG9yIGNoZWNrb3V0IHdpdGhvdXQgbG9zaW5nIHRob3NlIGNoYW5nZXMgcGVybWFuZW50bHkKKyAgICBpZihuZWVkX3N0YXNoKQorICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiBzdGFzaCBzYXZlIEBnaXRfc3Rhc2hfc2F2ZV9vcHRpb25zQAorICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICAgKQorICAgICAgaWYoZXJyb3JfY29kZSkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIHN0YXNoIGNoYW5nZXMiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKworICAgIGlmKCJAZ2l0X3VwZGF0ZV9zdHJhdGVneUAiIFNUUkVRVUFMICJDSEVDS09VVCIpCisgICAgICBleGVjdXRlX3Byb2Nlc3MoCisgICAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIGNoZWNrb3V0ICIke2dpdF9yZW1vdGV9LyR7Z2l0X3RhZ30iCisgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICAgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgICApCisgICAgICBpZihlcnJvcl9jb2RlKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gY2hlY2tvdXQgdGFnOiAnJHtnaXRfcmVtb3RlfS8ke2dpdF90YWd9JyIpCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICAjIFB1bGwgY2hhbmdlcyBmcm9tIHRoZSByZW1vdGUgYnJhbmNoCisgICAgICBleGVjdXRlX3Byb2Nlc3MoCisgICAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHJlYmFzZSAiJHtnaXRfcmVtb3RlfS8ke2dpdF90YWd9IgorICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICAgT1VUUFVUX1ZBUklBQkxFIHJlYmFzZV9vdXRwdXQKKyAgICAgICAgRVJST1JfVkFSSUFCTEUgIHJlYmFzZV9vdXRwdXQKKyAgICAgICAgKQorICAgICAgaWYoZXJyb3JfY29kZSkKKyAgICAgICAgIyBSZWJhc2UgZmFpbGVkLCB1bmRvIHRoZSByZWJhc2UgYXR0ZW1wdCBiZWZvcmUgY29udGludWluZworICAgICAgICBleGVjdXRlX3Byb2Nlc3MoCisgICAgICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgcmViYXNlIC0tYWJvcnQKKyAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgICAgKQorCisgICAgICAgIGlmKE5PVCAiQGdpdF91cGRhdGVfc3RyYXRlZ3lAIiBTVFJFUVVBTCAiUkVCQVNFX0NIRUNLT1VUIikKKyAgICAgICAgICAjIE5vdCBhbGxvd2VkIHRvIGRvIGEgY2hlY2tvdXQgYXMgYSBmYWxsYmFjaywgc28gY2Fubm90IHByb2NlZWQKKyAgICAgICAgICBpZihuZWVkX3N0YXNoKQorICAgICAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICAgICAgICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiBzdGFzaCBwb3AgLS1pbmRleCAtLXF1aWV0CisgICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICAgICAgICAgICAgICApCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlxuRmFpbGVkIHRvIHJlYmFzZSBpbjogJ0B3b3JrX2RpckAnLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbk91dHB1dCBmcm9tIHRoZSBhdHRlbXB0ZWQgcmViYXNlIGZvbGxvd3M6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuJHtyZWJhc2Vfb3V0cHV0fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblxuWW91IHdpbGwgaGF2ZSB0byByZXNvbHZlIHRoZSBjb25mbGljdHMgbWFudWFsbHkiKQorICAgICAgICBlbmRpZigpCisKKyAgICAgICAgIyBGYWxsIGJhY2sgdG8gY2hlY2tvdXQuIFdlIGNyZWF0ZSBhbiBhbm5vdGF0ZWQgdGFnIHNvIHRoYXQgdGhlIHVzZXIKKyAgICAgICAgIyBjYW4gbWFudWFsbHkgaW5zcGVjdCB0aGUgc2l0dWF0aW9uIGFuZCByZXZlcnQgaWYgcmVxdWlyZWQuCisgICAgICAgICMgV2UgY2FuJ3QgbG9nIHRoZSBmYWlsZWQgcmViYXNlIG91dHB1dCBiZWNhdXNlIE1TVkMgc2VlcyBpdCBhbmQKKyAgICAgICAgIyBpbnRlcnZlbmVzLCBjYXVzaW5nIHRoZSBidWlsZCB0byBmYWlsIGV2ZW4gdGhvdWdoIGl0IGNvbXBsZXRlcy4KKyAgICAgICAgIyBXcml0ZSBpdCB0byBhIGZpbGUgaW5zdGVhZC4KKyAgICAgICAgc3RyaW5nKFRJTUVTVEFNUCB0YWdfdGltZXN0YW1wICIlWSVtJWRUJUglTSVTIiBVVEMpCisgICAgICAgIHNldCh0YWdfbmFtZSBfY21ha2VfRXh0ZXJuYWxQcm9qZWN0X21vdmVkX2Zyb21faGVyZV8ke3RhZ190aW1lc3RhbXB9WikKKyAgICAgICAgc2V0KGVycm9yX2xvZ19maWxlICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcmViYXNlX2Vycm9yXyR7dGFnX3RpbWVzdGFtcH1aLmxvZykKKyAgICAgICAgZmlsZShXUklURSAke2Vycm9yX2xvZ19maWxlfSAiJHtyZWJhc2Vfb3V0cHV0fSIpCisgICAgICAgIG1lc3NhZ2UoV0FSTklORyAiUmViYXNlIGZhaWxlZCwgb3V0cHV0IGhhcyBiZWVuIHNhdmVkIHRvICR7ZXJyb3JfbG9nX2ZpbGV9IgorICAgICAgICAgICAgICAgICAgICAgICAgIlxuRmFsbGluZyBiYWNrIHRvIGNoZWNrb3V0LCBwcmV2aW91cyBjb21taXQgdGFnZ2VkIGFzICR7dGFnX25hbWV9IikKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHRhZyAtYQorICAgICAgICAgICAgICAgICAgLW0gIkV4dGVybmFsUHJvamVjdCBhdHRlbXB0aW5nIHRvIG1vdmUgZnJvbSBoZXJlIHRvICR7Z2l0X3JlbW90ZX0vJHtnaXRfdGFnfSIKKyAgICAgICAgICAgICAgICAgICR7dGFnX25hbWV9CisgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICAgKQorICAgICAgICBpZihlcnJvcl9jb2RlKQorICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBhZGQgbWFya2VyIHRhZyIpCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICBleGVjdXRlX3Byb2Nlc3MoCisgICAgICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgY2hlY2tvdXQgIiR7Z2l0X3JlbW90ZX0vJHtnaXRfdGFnfSIKKyAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgICApCisgICAgICAgIGlmKGVycm9yX2NvZGUpCisgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIGNoZWNrb3V0IDogJyR7Z2l0X3JlbW90ZX0vJHtnaXRfdGFnfSciKQorICAgICAgICBlbmRpZigpCisKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisKKyAgICBpZihuZWVkX3N0YXNoKQorICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICBDT01NQU5EICJAZ2l0X0VYRUNVVEFCTEVAIiBzdGFzaCBwb3AgLS1pbmRleCAtLXF1aWV0CisgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICAgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgICApCisgICAgICBpZihlcnJvcl9jb2RlKQorICAgICAgICAjIFN0YXNoIHBvcCAtLWluZGV4IGZhaWxlZDogVHJ5IGFnYWluIGRyb3BwaW5nIHRoZSBpbmRleAorICAgICAgICBleGVjdXRlX3Byb2Nlc3MoCisgICAgICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgcmVzZXQgLS1oYXJkIC0tcXVpZXQKKyAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgICAgICkKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHN0YXNoIHBvcCAtLXF1aWV0CisgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICAgICApCisgICAgICAgIGlmKGVycm9yX2NvZGUpCisgICAgICAgICAgIyBTdGFzaCBwb3AgZmFpbGVkOiBSZXN0b3JlIHByZXZpb3VzIHN0YXRlLgorICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgICAgICAgIENPTU1BTkQgIkBnaXRfRVhFQ1VUQUJMRUAiIHJlc2V0IC0taGFyZCAtLXF1aWV0ICR7aGVhZF9zaGF9CisgICAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgICAgICApCisgICAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgc3Rhc2ggcG9wIC0taW5kZXggLS1xdWlldAorICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIkB3b3JrX2RpckAiCisgICAgICAgICAgKQorICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlxuRmFpbGVkIHRvIHVuc3Rhc2ggY2hhbmdlcyBpbjogJ0B3b3JrX2RpckAnLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbllvdSB3aWxsIGhhdmUgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzIG1hbnVhbGx5IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgY2hlY2tvdXQgIiR7Z2l0X3RhZ30iCisgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiQHdvcmtfZGlyQCIKKyAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCisgICAgICApCisgICAgaWYoZXJyb3JfY29kZSkKKyAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBjaGVja291dCB0YWc6ICcke2dpdF90YWd9JyIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKKyAgc2V0KGluaXRfc3VibW9kdWxlcyAiQGluaXRfc3VibW9kdWxlc0AiKQorICBpZihpbml0X3N1Ym1vZHVsZXMpCisgICAgZXhlY3V0ZV9wcm9jZXNzKAorICAgICAgQ09NTUFORCAiQGdpdF9FWEVDVVRBQkxFQCIgc3VibW9kdWxlIHVwZGF0ZSBAZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZUAgLS1pbml0IEBnaXRfc3VibW9kdWxlc0AKKyAgICAgIFdPUktJTkdfRElSRUNUT1JZICJAd29ya19kaXJAIgorICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICkKKyAgZW5kaWYoKQorICBpZihlcnJvcl9jb2RlKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byB1cGRhdGUgc3VibW9kdWxlcyBpbjogJ0B3b3JrX2RpckAnIikKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2UgYi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZQppbmRleCA2NjA2MWExLi5hZWNjMDBiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZQorKysgYi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZQpAQCAtOSw4ICs5LDExIEBACiAKICAgIC4uIGNvbnRlbnRzOjoKIAorQ29tbWFuZHMKK15eXl5eXl5eCisKIEV4dGVybmFsIFByb2plY3QgRGVmaW5pdGlvbgotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKIAogLi4gY29tbWFuZDo6IEV4dGVybmFsUHJvamVjdF9BZGQKIApAQCAtMjY1LDYgKzI2OCwxMSBAQAogICAgICAgICBpcyBzZXQgdG8gYGBORVdgYCBpZiB0aGlzIHZhbHVlIGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdGhlbiBubyBzdWJtb2R1bGVzCiAgICAgICAgIGFyZSBpbml0aWFsaXplZCBvciB1cGRhdGVkLgogCisgICAgICBgYEdJVF9TVUJNT0RVTEVTX1JFQ1VSU0UgPGJvb2w+YGAKKyAgICAgICAgU3BlY2lmeSB3aGV0aGVyIGdpdCBzdWJtb2R1bGVzIChpZiBhbnkpIHNob3VsZCB1cGRhdGUgcmVjdXJzaXZlbHkgYnkKKyAgICAgICAgcGFzc2luZyB0aGUgYGAtLXJlY3Vyc2l2ZWBgIGZsYWcgdG8gYGBnaXQgc3VibW9kdWxlIHVwZGF0ZWBgLgorICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyBvbi4KKwogICAgICAgYGBHSVRfU0hBTExPVyA8Ym9vbD5gYAogICAgICAgICBXaGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBgYGdpdCBjbG9uZWBgIG9wZXJhdGlvbiB3aWxsIGJlIGdpdmVuCiAgICAgICAgIHRoZSBgYC0tZGVwdGggMWBgIG9wdGlvbi4gVGhpcyBwZXJmb3JtcyBhIHNoYWxsb3cgY2xvbmUsIHdoaWNoIGF2b2lkcwpAQCAtMjg2LDYgKzI5NCw0MiBAQAogICAgICAgICBgYGdpdCBjbG9uZWBgIGNvbW1hbmQgbGluZSwgd2l0aCBlYWNoIG9wdGlvbiByZXF1aXJlZCB0byBiZSBpbiB0aGUKICAgICAgICAgZm9ybSBgYGtleT12YWx1ZWBgLgogCisgICAgICBgYEdJVF9SRU1PVEVfVVBEQVRFX1NUUkFURUdZIDxzdHJhdGVneT5gYAorICAgICAgICBXaGVuIGBgR0lUX1RBR2BgIHJlZmVycyB0byBhIHJlbW90ZSBicmFuY2gsIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvCisgICAgICAgIHNwZWNpZnkgaG93IHRoZSB1cGRhdGUgc3RlcCBiZWhhdmVzLiAgVGhlIGBgPHN0cmF0ZWd5PmBgIG11c3QgYmUgb25lIG9mCisgICAgICAgIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgYGBDSEVDS09VVGBgCisgICAgICAgICAgSWdub3JlIHRoZSBsb2NhbCBicmFuY2ggYW5kIGFsd2F5cyBjaGVja291dCB0aGUgYnJhbmNoIHNwZWNpZmllZCBieQorICAgICAgICAgIGBgR0lUX1RBR2BgLgorCisgICAgICAgIGBgUkVCQVNFYGAKKyAgICAgICAgICBUcnkgdG8gcmViYXNlIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgb25lIHNwZWNpZmllZCBieSBgYEdJVF9UQUdgYC4KKyAgICAgICAgICBJZiB0aGVyZSBhcmUgbG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgdGhleSB3aWxsIGJlIHN0YXNoZWQgZmlyc3QKKyAgICAgICAgICBhbmQgcG9wcGVkIGFnYWluIGFmdGVyIHJlYmFzaW5nLiAgSWYgcmViYXNpbmcgb3IgcG9wcGluZyBzdGFzaGVkCisgICAgICAgICAgY2hhbmdlcyBmYWlsLCBhYm9ydCB0aGUgcmViYXNlIGFuZCBoYWx0IHdpdGggYW4gZXJyb3IuCisgICAgICAgICAgV2hlbiBgYEdJVF9SRU1PVEVfVVBEQVRFX1NUUkFURUdZYGAgaXMgbm90IHByZXNlbnQsIHRoaXMgaXMgdGhlCisgICAgICAgICAgZGVmYXVsdCBzdHJhdGVneSB1bmxlc3MgdGhlIGRlZmF1bHQgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aXRoCisgICAgICAgICAgYGBDTUFLRV9FUF9HSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWWBgIChzZWUgYmVsb3cpLgorCisgICAgICAgIGBgUkVCQVNFX0NIRUNLT1VUYGAKKyAgICAgICAgICBTYW1lIGFzIGBgUkVCQVNFYGAgZXhjZXB0IGlmIHRoZSByZWJhc2UgZmFpbHMsIGFuIGFubm90YXRlZCB0YWcgd2lsbAorICAgICAgICAgIGJlIGNyZWF0ZWQgYXQgdGhlIG9yaWdpbmFsIGBgSEVBRGBgIHBvc2l0aW9uIGZyb20gYmVmb3JlIHRoZSByZWJhc2UKKyAgICAgICAgICBhbmQgdGhlbiBjaGVja291dCBgYEdJVF9UQUdgYCBqdXN0IGxpa2UgdGhlIGBgQ0hFQ0tPVVRgYCBzdHJhdGVneS4KKyAgICAgICAgICBUaGUgbWVzc2FnZSBzdG9yZWQgb24gdGhlIGFubm90YXRlZCB0YWcgd2lsbCBnaXZlIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgICAgd2hhdCB3YXMgYXR0ZW1wdGVkIGFuZCB0aGUgdGFnIG5hbWUgd2lsbCBpbmNsdWRlIGEgdGltZXN0YW1wIHNvIHRoYXQKKyAgICAgICAgICBlYWNoIGZhaWxlZCBydW4gd2lsbCBhZGQgYSBuZXcgdGFnLiAgVGhpcyBzdHJhdGVneSBlbnN1cmVzIG5vIGNoYW5nZXMKKyAgICAgICAgICB3aWxsIGJlIGxvc3QsIGJ1dCB1cGRhdGVzIHNob3VsZCBhbHdheXMgc3VjY2VlZCBpZiBgYEdJVF9UQUdgYCByZWZlcnMKKyAgICAgICAgICB0byBhIHZhbGlkIHJlZiB1bmxlc3MgdGhlcmUgYXJlIHVuY29tbWl0dGVkIGNoYW5nZXMgdGhhdCBjYW5ub3QgYmUKKyAgICAgICAgICBwb3BwZWQgc3VjY2Vzc2Z1bGx5LgorCisgICAgICAgIFRoZSB2YXJpYWJsZSBgYENNQUtFX0VQX0dJVF9SRU1PVEVfVVBEQVRFX1NUUkFURUdZYGAgY2FuIGJlIHNldCB0bworICAgICAgICBvdmVycmlkZSB0aGUgZGVmYXVsdCBzdHJhdGVneS4gIFRoaXMgdmFyaWFibGUgc2hvdWxkIG5vdCBiZSBzZXQgYnkgYQorICAgICAgICBwcm9qZWN0LCBpdCBpcyBpbnRlbmRlZCBmb3IgdGhlIHVzZXIgdG8gc2V0LiAgSXQgaXMgcHJpbWFyaWx5IGludGVuZGVkCisgICAgICAgIGZvciB1c2UgaW4gY29udGludW91cyBpbnRlZ3JhdGlvbiBzY3JpcHRzIHRvIGVuc3VyZSB0aGF0IHdoZW4gaGlzdG9yeQorICAgICAgICBpcyByZXdyaXR0ZW4gb24gYSByZW1vdGUgYnJhbmNoLCB0aGUgYnVpbGQgZG9lc24ndCBlbmQgdXAgd2l0aCB1bmludGVuZGVkCisgICAgICAgIGNoYW5nZXMgb3IgZmFpbGVkIGJ1aWxkcyByZXN1bHRpbmcgZnJvbSBjb25mbGljdHMgZHVyaW5nIHJlYmFzZSBvcGVyYXRpb25zLgorCiAgICAgKlN1YnZlcnNpb24qCiAgICAgICBgYFNWTl9SRVBPU0lUT1JZIDx1cmw+YGAKICAgICAgICAgVVJMIG9mIHRoZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuCkBAIC02NjAsNyArNzA0LDcgQEAKICAgYXV0b21hdGljIHN1YnN0aXR1dGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGZvciBzb21lIG9wdGlvbnMuCiAKIE9idGFpbmluZyBQcm9qZWN0IFByb3BlcnRpZXMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKIAogLi4gY29tbWFuZDo6IEV4dGVybmFsUHJvamVjdF9HZXRfUHJvcGVydHkKIApAQCAtNjgxLDcgKzcyNSw3IEBACiAgICAgbWVzc2FnZSgiU291cmNlIGRpciBvZiBteUV4dFByb2ogPSAke1NPVVJDRV9ESVJ9IikKIAogRXhwbGljaXQgU3RlcCBNYW5hZ2VtZW50Ci1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgogCiBUaGUgYGBFeHRlcm5hbFByb2plY3RfQWRkKClgYCBmdW5jdGlvbiBvbiBpdHMgb3duIGlzIG9mdGVuIHN1ZmZpY2llbnQgZm9yCiBpbmNvcnBvcmF0aW5nIGFuIGV4dGVybmFsIHByb2plY3QgaW50byB0aGUgbWFpbiBidWlsZC4gQ2VydGFpbiBzY2VuYXJpb3MKQEAgLTkzMCw2ICs5NzQsNyBAQAogCiBjbWFrZV9wb2xpY3koUFVTSCkKIGNtYWtlX3BvbGljeShTRVQgQ01QMDA1NCBORVcpICMgaWYoKSBxdW90ZWQgdmFyaWFibGVzIG5vdCBkZXJlZmVyZW5jZWQKK2NtYWtlX3BvbGljeShTRVQgQ01QMDA1NyBORVcpICMgaWYoKSBzdXBwb3J0cyBJTl9MSVNUCiAKICMgUHJlLWNvbXB1dGUgYSByZWdleCB0byBtYXRjaCBkb2N1bWVudGVkIGtleXdvcmRzIGZvciBlYWNoIGNvbW1hbmQuCiBtYXRoKEVYUFIgX2VwX2RvY3VtZW50YXRpb25fbGluZV9jb3VudCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfTElORX0gLSA0IikKQEAgLTEwNjUsNyArMTExMCw3IEBACiAgICJFeHRlcm5hbFByb2plY3QgbW9kdWxlLiIKICAgKQogCi1mdW5jdGlvbihfZXBfd3JpdGVfZ2l0Y2xvbmVfc2NyaXB0IHNjcmlwdF9maWxlbmFtZSBzb3VyY2VfZGlyIGdpdF9FWEVDVVRBQkxFIGdpdF9yZXBvc2l0b3J5IGdpdF90YWcgZ2l0X3JlbW90ZV9uYW1lIGluaXRfc3VibW9kdWxlcyBnaXRfc3VibW9kdWxlcyBnaXRfc2hhbGxvdyBnaXRfcHJvZ3Jlc3MgZ2l0X2NvbmZpZyBzcmNfbmFtZSB3b3JrX2RpciBnaXRjbG9uZV9pbmZvZmlsZSBnaXRjbG9uZV9zdGFtcGZpbGUgdGxzX3ZlcmlmeSkKK2Z1bmN0aW9uKF9lcF93cml0ZV9naXRjbG9uZV9zY3JpcHQgc2NyaXB0X2ZpbGVuYW1lIHNvdXJjZV9kaXIgZ2l0X0VYRUNVVEFCTEUgZ2l0X3JlcG9zaXRvcnkgZ2l0X3RhZyBnaXRfcmVtb3RlX25hbWUgaW5pdF9zdWJtb2R1bGVzIGdpdF9zdWJtb2R1bGVzX3JlY3Vyc2UgZ2l0X3N1Ym1vZHVsZXMgZ2l0X3NoYWxsb3cgZ2l0X3Byb2dyZXNzIGdpdF9jb25maWcgc3JjX25hbWUgd29ya19kaXIgZ2l0Y2xvbmVfaW5mb2ZpbGUgZ2l0Y2xvbmVfc3RhbXBmaWxlIHRsc192ZXJpZnkpCiAgIGlmKE5PVCBHSVRfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuOC41KQogICAgICMgVXNlIGBnaXQgY2hlY2tvdXQgPHRyZWUtaXNoPiAtLWAgdG8gYXZvaWQgYW1iaWd1aXR5IHdpdGggYSBsb2NhbCBwYXRoLgogICAgIHNldChnaXRfY2hlY2tvdXRfZXhwbGljaXQtLSAiLS0iKQpAQCAtMTA3OSw3ICsxMTI0LDExIEBACiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGFnIGZvciBnaXQgY2hlY2tvdXQgc2hvdWxkIG5vdCBiZSBlbXB0eS4iKQogICBlbmRpZigpCiAKLSAgc2V0KGdpdF9jbG9uZV9vcHRpb25zICItLW5vLWNoZWNrb3V0IikKKyAgaWYoR0lUX1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAyLjIwIE9SIDIuMjEgVkVSU0lPTl9MRVNTX0VRVUFMIEdJVF9WRVJTSU9OX1NUUklORykKKyAgICBzZXQoZ2l0X2Nsb25lX29wdGlvbnMgIi0tbm8tY2hlY2tvdXQiKQorICBlbHNlKCkKKyAgICBzZXQoZ2l0X2Nsb25lX29wdGlvbnMpCisgIGVuZGlmKCkKICAgaWYoZ2l0X3NoYWxsb3cpCiAgICAgaWYoTk9UIEdJVF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS43LjEwKQogICAgICAgbGlzdChBUFBFTkQgZ2l0X2Nsb25lX29wdGlvbnMgIi0tZGVwdGggMSAtLW5vLXNpbmdsZS1icmFuY2giKQpAQCAtMTA5MSw3ICsxMTQwLDcgQEAKICAgICBsaXN0KEFQUEVORCBnaXRfY2xvbmVfb3B0aW9ucyAtLXByb2dyZXNzKQogICBlbmRpZigpCiAgIGZvcmVhY2goY29uZmlnIElOIExJU1RTIGdpdF9jb25maWcpCi0gICAgbGlzdChBUFBFTkQgZ2l0X2Nsb25lX29wdGlvbnMgLS1jb25maWcgJHtjb25maWd9KQorICAgIGxpc3QoQVBQRU5EIGdpdF9jbG9uZV9vcHRpb25zIC0tY29uZmlnIFwiJHtjb25maWd9XCIpCiAgIGVuZGZvcmVhY2goKQogICBpZihOT1QgJHtnaXRfcmVtb3RlX25hbWV9IFNUUkVRVUFMICJvcmlnaW4iKQogICAgIGxpc3QoQVBQRU5EIGdpdF9jbG9uZV9vcHRpb25zIC0tb3JpZ2luIFwiJHtnaXRfcmVtb3RlX25hbWV9XCIpCkBAIC0xMTE1LDcgKzExNjQsNyBAQAogZW5kaWYoKQogCiBleGVjdXRlX3Byb2Nlc3MoCi0gIENPTU1BTkQgXCR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeSBcIiR7c291cmNlX2Rpcn1cIgorICBDT01NQU5EIFwke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZiBcIiR7c291cmNlX2Rpcn1cIgogICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQogICApCiBpZihlcnJvcl9jb2RlKQpAQCAtMTE1Myw3ICsxMjAyLDcgQEAKIHNldChpbml0X3N1Ym1vZHVsZXMgJHtpbml0X3N1Ym1vZHVsZXN9KQogaWYoaW5pdF9zdWJtb2R1bGVzKQogICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgJHtnaXRfb3B0aW9uc30gc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAtLWluaXQgJHtnaXRfc3VibW9kdWxlc30KKyAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiAke2dpdF9vcHRpb25zfSBzdWJtb2R1bGUgdXBkYXRlICR7Z2l0X3N1Ym1vZHVsZXNfcmVjdXJzZX0gLS1pbml0ICR7Z2l0X3N1Ym1vZHVsZXN9CiAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfS8ke3NyY19uYW1lfVwiCiAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKICAgICApCkBAIC0xMTkxLDcgKzEyNDAsNyBAQAogZW5kaWYoKQogCiBleGVjdXRlX3Byb2Nlc3MoCi0gIENPTU1BTkQgXCR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeSBcIiR7c291cmNlX2Rpcn1cIgorICBDT01NQU5EIFwke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZiBcIiR7c291cmNlX2Rpcn1cIgogICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQogICApCiBpZihlcnJvcl9jb2RlKQpAQCAtMTIzNCw3ICsxMjgzLDcgQEAKIGVuZGZ1bmN0aW9uKCkKIAogCi1mdW5jdGlvbihfZXBfd3JpdGVfZ2l0dXBkYXRlX3NjcmlwdCBzY3JpcHRfZmlsZW5hbWUgZ2l0X0VYRUNVVEFCTEUgZ2l0X3RhZyBnaXRfcmVtb3RlX25hbWUgaW5pdF9zdWJtb2R1bGVzIGdpdF9zdWJtb2R1bGVzIGdpdF9yZXBvc2l0b3J5IHdvcmtfZGlyKQorZnVuY3Rpb24oX2VwX3dyaXRlX2dpdHVwZGF0ZV9zY3JpcHQgc2NyaXB0X2ZpbGVuYW1lIGdpdF9FWEVDVVRBQkxFIGdpdF90YWcgZ2l0X3JlbW90ZV9uYW1lIGluaXRfc3VibW9kdWxlcyBnaXRfc3VibW9kdWxlc19yZWN1cnNlIGdpdF9zdWJtb2R1bGVzIGdpdF9yZXBvc2l0b3J5IHdvcmtfZGlyIGdpdF91cGRhdGVfc3RyYXRlZ3kpCiAgIGlmKCIke2dpdF90YWd9IiBTVFJFUVVBTCAiIikKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUYWcgZm9yIGdpdCBjaGVja291dCBzaG91bGQgbm90IGJlIGVtcHR5LiIpCiAgIGVuZGlmKCkKQEAgLTEyNDMsMTcxICsxMjkyLDEzIEBACiAgIGVsc2UoKQogICAgIHNldChnaXRfc3Rhc2hfc2F2ZV9vcHRpb25zIC0tcXVpZXQpCiAgIGVuZGlmKCkKLSAgZmlsZShXUklURSAke3NjcmlwdF9maWxlbmFtZX0KLSIKLWV4ZWN1dGVfcHJvY2VzcygKLSAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFECi0gIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn1cIgotICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQotICBPVVRQVVRfVkFSSUFCTEUgaGVhZF9zaGEKLSAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKworICBjb25maWd1cmVfZmlsZSgKKyAgICAgICIke19FeHRlcm5hbFByb2plY3RfU0VMRl9ESVJ9L0V4dGVybmFsUHJvamVjdC1naXR1cGRhdGUuY21ha2UuaW4iCisgICAgICAiJHtzY3JpcHRfZmlsZW5hbWV9IgorICAgICAgQE9OTFkKICAgKQotaWYoZXJyb3JfY29kZSkKLSAgbWVzc2FnZShGQVRBTF9FUlJPUiBcIkZhaWxlZCB0byBnZXQgdGhlIGhhc2ggZm9yIEhFQURcIikKLWVuZGlmKCkKLQotZXhlY3V0ZV9wcm9jZXNzKAotICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiBzaG93LXJlZiAke2dpdF90YWd9Ci0gIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn1cIgotICBPVVRQVVRfVkFSSUFCTEUgc2hvd19yZWZfb3V0cHV0Ci0gICkKLSMgSWYgYSByZW1vdGUgcmVmIGlzIGFza2VkIGZvciwgd2hpY2ggY2FuIHBvc3NpYmx5IG1vdmUgYXJvdW5kLAotIyB3ZSBtdXN0IGFsd2F5cyBkbyBhIGZldGNoIGFuZCBjaGVja291dC4KLWlmKFwiXCR7c2hvd19yZWZfb3V0cHV0fVwiIE1BVENIRVMgXCJyZW1vdGVzXCIpCi0gIHNldChpc19yZW1vdGVfcmVmIDEpCi1lbHNlKCkKLSAgc2V0KGlzX3JlbW90ZV9yZWYgMCkKLWVuZGlmKCkKLQotIyBUYWcgaXMgaW4gdGhlIGZvcm0gPHJlbW90ZT4vPHRhZz4gKGkuZS4gb3JpZ2luL21hc3Rlcikgd2UgbXVzdCBzdHJpcAotIyB0aGUgcmVtb3RlIGZyb20gdGhlIHRhZy4KLWlmKFwiXCR7c2hvd19yZWZfb3V0cHV0fVwiIE1BVENIRVMgXCJyZWZzL3JlbW90ZXMvJHtnaXRfdGFnfVwiKQotICBzdHJpbmcoUkVHRVggTUFUQ0ggXCJeKFteL10rKS8oLispJFwiIF91bnVzZWQgXCIke2dpdF90YWd9XCIpCi0gIHNldChnaXRfcmVtb3RlIFwiXCR7Q01BS0VfTUFUQ0hfMX1cIikKLSAgc2V0KGdpdF90YWcgXCJcJHtDTUFLRV9NQVRDSF8yfVwiKQotZWxzZSgpCi0gIHNldChnaXRfcmVtb3RlIFwiJHtnaXRfcmVtb3RlX25hbWV9XCIpCi0gIHNldChnaXRfdGFnIFwiJHtnaXRfdGFnfVwiKQotZW5kaWYoKQotCi0jIFRoaXMgd2lsbCBmYWlsIGlmIHRoZSB0YWcgZG9lcyBub3QgZXhpc3QgKGl0IHByb2JhYmx5IGhhcyBub3QgYmVlbiBmZXRjaGVkCi0jIHlldCkuCi1leGVjdXRlX3Byb2Nlc3MoCi0gIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHJldi1saXN0IC0tbWF4LWNvdW50PTEgJHtnaXRfdGFnfQotICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKLSAgT1VUUFVUX1ZBUklBQkxFIHRhZ19zaGEKLSAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKLSAgKQotCi0jIElzIHRoZSBoYXNoIGNoZWNrb3V0IG91dCB0aGF0IHdlIHdhbnQ/Ci1pZihlcnJvcl9jb2RlIE9SIGlzX3JlbW90ZV9yZWYgT1IgTk9UIChcIlwke3RhZ19zaGF9XCIgU1RSRVFVQUwgXCJcJHtoZWFkX3NoYX1cIikpCi0gIGV4ZWN1dGVfcHJvY2VzcygKLSAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiBmZXRjaAotICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn1cIgotICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCi0gICAgKQotICBpZihlcnJvcl9jb2RlKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgXCJGYWlsZWQgdG8gZmV0Y2ggcmVwb3NpdG9yeSAnJHtnaXRfcmVwb3NpdG9yeX0nXCIpCi0gIGVuZGlmKCkKLQotICBpZihpc19yZW1vdGVfcmVmKQotICAgICMgQ2hlY2sgaWYgc3Rhc2ggaXMgbmVlZGVkCi0gICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgc3RhdHVzIC0tcG9yY2VsYWluCi0gICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCi0gICAgICBPVVRQVVRfVkFSSUFCTEUgcmVwb19zdGF0dXMKLSAgICAgICkKLSAgICBpZihlcnJvcl9jb2RlKQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiBcIkZhaWxlZCB0byBnZXQgdGhlIHN0YXR1c1wiKQotICAgIGVuZGlmKCkKLSAgICBzdHJpbmcoTEVOR1RIIFwiXCR7cmVwb19zdGF0dXN9XCIgbmVlZF9zdGFzaCkKLQotICAgICMgSWYgbm90IGluIGNsZWFuIHN0YXRlLCBzdGFzaCBjaGFuZ2VzIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gYmUgYWJsZSB0bwotICAgICMgcGVyZm9ybSBnaXQgcHVsbCAtLXJlYmFzZQotICAgIGlmKG5lZWRfc3Rhc2gpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHN0YXNoIHNhdmUgJHtnaXRfc3Rhc2hfc2F2ZV9vcHRpb25zfQotICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKLSAgICAgICAgKQotICAgICAgaWYoZXJyb3JfY29kZSkKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiBcIkZhaWxlZCB0byBzdGFzaCBjaGFuZ2VzXCIpCi0gICAgICBlbmRpZigpCi0gICAgZW5kaWYoKQotCi0gICAgIyBQdWxsIGNoYW5nZXMgZnJvbSB0aGUgcmVtb3RlIGJyYW5jaAotICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHJlYmFzZSBcJHtnaXRfcmVtb3RlfS9cJHtnaXRfdGFnfQotICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfVwiCi0gICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQotICAgICAgKQotICAgIGlmKGVycm9yX2NvZGUpCi0gICAgICAjIFJlYmFzZSBmYWlsZWQ6IFJlc3RvcmUgcHJldmlvdXMgc3RhdGUuCi0gICAgICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHJlYmFzZSAtLWFib3J0Ci0gICAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn1cIgotICAgICAgKQotICAgICAgaWYobmVlZF9zdGFzaCkKLSAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHN0YXNoIHBvcCAtLWluZGV4IC0tcXVpZXQKLSAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgICAgICAgICApCi0gICAgICBlbmRpZigpCi0gICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SIFwiXFxuRmFpbGVkIHRvIHJlYmFzZSBpbjogJyR7d29ya19kaXJ9LyR7c3JjX25hbWV9Jy5cXG5Zb3Ugd2lsbCBoYXZlIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cyBtYW51YWxseVwiKQotICAgIGVuZGlmKCkKLQotICAgIGlmKG5lZWRfc3Rhc2gpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIHN0YXNoIHBvcCAtLWluZGV4IC0tcXVpZXQKLSAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfVwiCi0gICAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCi0gICAgICAgICkKLSAgICAgIGlmKGVycm9yX2NvZGUpCi0gICAgICAgICMgU3Rhc2ggcG9wIC0taW5kZXggZmFpbGVkOiBUcnkgYWdhaW4gZHJvcHBpbmcgdGhlIGluZGV4Ci0gICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgICAgICBDT01NQU5EIFwiJHtnaXRfRVhFQ1VUQUJMRX1cIiByZXNldCAtLWhhcmQgLS1xdWlldAotICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn1cIgotICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBlcnJvcl9jb2RlCi0gICAgICAgICAgKQotICAgICAgICBleGVjdXRlX3Byb2Nlc3MoCi0gICAgICAgICAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgc3Rhc2ggcG9wIC0tcXVpZXQKLSAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQotICAgICAgICAgICkKLSAgICAgICAgaWYoZXJyb3JfY29kZSkKLSAgICAgICAgICAjIFN0YXNoIHBvcCBmYWlsZWQ6IFJlc3RvcmUgcHJldmlvdXMgc3RhdGUuCi0gICAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgICAgICAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgcmVzZXQgLS1oYXJkIC0tcXVpZXQgXCR7aGVhZF9zaGF9Ci0gICAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSBcIiR7d29ya19kaXJ9XCIKLSAgICAgICAgICApCi0gICAgICAgICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgICAgICAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgc3Rhc2ggcG9wIC0taW5kZXggLS1xdWlldAotICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCIke3dvcmtfZGlyfVwiCi0gICAgICAgICAgKQotICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgXCJcXG5GYWlsZWQgdG8gdW5zdGFzaCBjaGFuZ2VzIGluOiAnJHt3b3JrX2Rpcn0vJHtzcmNfbmFtZX0nLlxcbllvdSB3aWxsIGhhdmUgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzIG1hbnVhbGx5XCIpCi0gICAgICAgIGVuZGlmKCkKLSAgICAgIGVuZGlmKCkKLSAgICBlbmRpZigpCi0gIGVsc2UoKQotICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgIENPTU1BTkQgXCIke2dpdF9FWEVDVVRBQkxFfVwiIGNoZWNrb3V0ICR7Z2l0X3RhZ30KLSAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn1cIgotICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKLSAgICAgICkKLSAgICBpZihlcnJvcl9jb2RlKQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiBcIkZhaWxlZCB0byBjaGVja291dCB0YWc6ICcke2dpdF90YWd9J1wiKQotICAgIGVuZGlmKCkKLSAgZW5kaWYoKQotCi0gIHNldChpbml0X3N1Ym1vZHVsZXMgJHtpbml0X3N1Ym1vZHVsZXN9KQotICBpZihpbml0X3N1Ym1vZHVsZXMpCi0gICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgQ09NTUFORCBcIiR7Z2l0X0VYRUNVVEFCTEV9XCIgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAtLWluaXQgJHtnaXRfc3VibW9kdWxlc30KLSAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwiJHt3b3JrX2Rpcn0vJHtzcmNfbmFtZX1cIgotICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKLSAgICAgICkKLSAgZW5kaWYoKQotICBpZihlcnJvcl9jb2RlKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgXCJGYWlsZWQgdG8gdXBkYXRlIHN1Ym1vZHVsZXMgaW46ICcke3dvcmtfZGlyfS8ke3NyY19uYW1lfSdcIikKLSAgZW5kaWYoKQotZW5kaWYoKQotCi0iCi0pCi0KLWVuZGZ1bmN0aW9uKF9lcF93cml0ZV9naXR1cGRhdGVfc2NyaXB0KQorZW5kZnVuY3Rpb24oKQogCiBmdW5jdGlvbihfZXBfd3JpdGVfZG93bmxvYWRmaWxlX3NjcmlwdCBzY3JpcHRfZmlsZW5hbWUgUkVNT1RFIExPQ0FMIHRpbWVvdXQgbm9fcHJvZ3Jlc3MgaGFzaCB0bHNfdmVyaWZ5IHRsc19jYWluZm8gdXNlcnB3ZCBodHRwX2hlYWRlcnMgbmV0cmMgbmV0cmNfZmlsZSkKICAgaWYodGltZW91dCkKQEAgLTE3NzIsNiArMTY2MywxMSBAQAogICAjIFJlcGxhY2UgbG9jYXRpb24gdGFncy4KICAgX2VwX3JlcGxhY2VfbG9jYXRpb25fdGFncygke3RhcmdldF9uYW1lfSBzY3JpcHRfaW5pdGlhbF9jYWNoZSkKICAgX2VwX3JlcGxhY2VfbG9jYXRpb25fdGFncygke3RhcmdldF9uYW1lfSBzY3JpcHRfZmlsZW5hbWUpCisgICMgUmVwbGFjZSBsaXN0IHNlcGFyYXRvcnMuCisgIGdldF9wcm9wZXJ0eShzZXAgVEFSR0VUICR7dGFyZ2V0X25hbWV9IFBST1BFUlRZIF9FUF9MSVNUX1NFUEFSQVRPUikKKyAgaWYoc2VwIEFORCBzY3JpcHRfaW5pdGlhbF9jYWNoZSkKKyAgICBzdHJpbmcoUkVQTEFDRSAiJHtzZXB9IiAiOyIgc2NyaXB0X2luaXRpYWxfY2FjaGUgIiR7c2NyaXB0X2luaXRpYWxfY2FjaGV9IikKKyAgZW5kaWYoKQogICAjIFdyaXRlIG91dCB0aGUgaW5pdGlhbCBjYWNoZSBmaWxlIHRvIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQuCiAgIGZpbGUoR0VORVJBVEUgT1VUUFVUICIke3NjcmlwdF9maWxlbmFtZX0iIENPTlRFTlQgIiR7c2NyaXB0X2luaXRpYWxfY2FjaGV9IikKIGVuZGZ1bmN0aW9uKCkKQEAgLTE4OTUsNyArMTc5MSwxMSBAQAogICAgIGdldF90YXJnZXRfcHJvcGVydHkoYXJncyAke25hbWV9IF9FUF8ke3N0ZXB9X0FSR1MpCiAgIGVuZGlmKCkKIAotICBsaXN0KEFQUEVORCBjbWQgJHthcmdzfSkKKyAgaWYoTk9UICIke2FyZ3N9IiBTVFJFUVVBTCAiIikKKyAgICAjIGFyZ3MgY291bGQgaGF2ZSBlbXB0eSBpdGVtcywgc28gd2UgbXVzdCBxdW90ZSBpdCB0byBwcmV2ZW50IHRoZW0KKyAgICAjIGZyb20gYmVpbmcgc2lsZW50bHkgcmVtb3ZlZAorICAgIGxpc3QoQVBQRU5EIGNtZCAiJHthcmdzfSIpCisgIGVuZGlmKCkKICAgc2V0KCR7Y21kX3Zhcn0gIiR7Y21kfSIgUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQogCkBAIC0yMjExLDE3ICsyMTExLDIzIEBACiAgICAgc2V0KGNvbW1hbmQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvX2FwcGVuZCkKICAgZW5kaWYoKQogCi0gIGFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtzdGFtcF9maWxlfQotICAgIEJZUFJPRFVDVFMgJHtieXByb2R1Y3RzfQotICAgIENPTU1FTlQgJHtjb21tZW50fQotICAgIENPTU1BTkQgJHtjb21tYW5kfQotICAgIENPTU1BTkQgJHt0b3VjaH0KLSAgICBERVBFTkRTICR7ZGVwZW5kc30KLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke3dvcmtfZGlyfQotICAgIFZFUkJBVElNCi0gICAgJHt1c2VzX3Rlcm1pbmFsfQotICAgICkKKyAgc2V0KF9fY21kUXVvdGVkKQorICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBjb21tYW5kKQorICAgIHN0cmluZyhBUFBFTkQgX19jbWRRdW90ZWQgIiBbPT1bJHtfX2l0ZW19XT09XSIpCisgIGVuZGZvcmVhY2goKQorICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUgIgorICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgIE9VVFBVVCBcJHtzdGFtcF9maWxlfQorICAgICAgQllQUk9EVUNUUyBcJHtieXByb2R1Y3RzfQorICAgICAgQ09NTUVOVCBcJHtjb21tZW50fQorICAgICAgQ09NTUFORCAke19fY21kUXVvdGVkfQorICAgICAgQ09NTUFORCBcJHt0b3VjaH0KKyAgICAgIERFUEVORFMgXCR7ZGVwZW5kc30KKyAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwke3dvcmtfZGlyfQorICAgICAgVkVSQkFUSU0KKyAgICAgICR7dXNlc190ZXJtaW5hbH0KKyAgICApIgorICApCiAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtuYW1lfSBBUFBFTkQgUFJPUEVSVFkgX0VQX1NURVBTICR7c3RlcH0pCiAKICAgIyBBZGQgY3VzdG9tICJzdGVwIHRhcmdldCI/CkBAIC0yMjY5LDcgKzIxNzUsNyBAQAogCiAgIGdldF9wcm9wZXJ0eShzdGVwcyBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfU1RFUFMpCiAgIGxpc3QoRklORCBzdGVwcyAke3N0ZXB9IGlzX3N0ZXApCi0gIGlmKE5PVCBpc19zdGVwKQorICBpZihpc19zdGVwIExFU1MgMCkKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJFeHRlcm5hbCBwcm9qZWN0IFwiJHtuYW1lfVwiIGRvZXMgbm90IGhhdmUgYSBzdGVwIFwiJHtzdGVwfVwiLiIpCiAgIGVuZGlmKCkKIApAQCAtMjMyOSw2ICsyMjM1LDI5IEBACiAgIGVuZGlmKCkKIGVuZGZ1bmN0aW9uKCkKIAorZnVuY3Rpb24oX2VwX2dldF9naXRfc3VibW9kdWxlc19yZWN1cnNlIGdpdF9zdWJtb2R1bGVzX3JlY3Vyc2UpCisgICMgQ2hlY2tzIGZvciBHSVRfU1VCTU9EVUxFU19SRUNVUlNFIHByb3BlcnR5CisgICMgRGVmYXVsdCBpcyBPTiwgd2hpY2ggc2V0cyBnaXRfc3VibW9kdWxlc19yZWN1cnNlIG91dHB1dCB2YXJpYWJsZSB0byAiLS1yZWN1cnNpdmUiCisgICMgT3RoZXJ3aXNlLCB0aGUgb3V0cHV0IHZhcmlhYmxlIGlzIHNldCB0byBhbiBlbXB0eSB2YWx1ZSAiIgorICBnZXRfcHJvcGVydHkoZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZV9zZXQgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgX0VQX0dJVF9TVUJNT0RVTEVTX1JFQ1VSU0UgU0VUKQorICBpZihOT1QgZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZV9zZXQpCisgICAgc2V0KHJlY3Vyc2VGbGFnICItLXJlY3Vyc2l2ZSIpCisgIGVsc2UoKQorICAgIGdldF9wcm9wZXJ0eShnaXRfc3VibW9kdWxlc19yZWN1cnNlX3ZhbHVlIFRBUkdFVCAke25hbWV9IFBST1BFUlRZIF9FUF9HSVRfU1VCTU9EVUxFU19SRUNVUlNFKQorICAgIGlmKGdpdF9zdWJtb2R1bGVzX3JlY3Vyc2VfdmFsdWUpCisgICAgICBzZXQocmVjdXJzZUZsYWcgIi0tcmVjdXJzaXZlIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChyZWN1cnNlRmxhZyAiIikKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKyAgc2V0KCR7Z2l0X3N1Ym1vZHVsZXNfcmVjdXJzZX0gIiR7cmVjdXJzZUZsYWd9IiBQQVJFTlRfU0NPUEUpCisKKyAgIyBUaGUgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJy0tcmVjdXJzaXZlJyBmbGFnIHJlcXVpcmVzIGdpdCA+PSB2MS42LjUKKyAgaWYocmVjdXJzZUZsYWcgQU5EIEdJVF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42LjUpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXJyb3I6IGdpdCB2ZXJzaW9uIDEuNi41IG9yIGxhdGVyIHJlcXVpcmVkIGZvciAtLXJlY3Vyc2l2ZSBmbGFnIHdpdGggJ2dpdCBzdWJtb2R1bGUgLi4uJzogR0lUX1ZFUlNJT05fU1RSSU5HPScke0dJVF9WRVJTSU9OX1NUUklOR30nIikKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCiAKIGZ1bmN0aW9uKF9lcF9hZGRfZG93bmxvYWRfY29tbWFuZCBuYW1lKQogICBFeHRlcm5hbFByb2plY3RfR2V0X1Byb3BlcnR5KCR7bmFtZX0gc291cmNlX2RpciBzdGFtcF9kaXIgZG93bmxvYWRfZGlyIHRtcF9kaXIpCkBAIC0yNDIxLDExICsyMzUwLDcgQEAKICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImVycm9yOiBjb3VsZCBub3QgZmluZCBnaXQgZm9yIGNsb25lIG9mICR7bmFtZX0iKQogICAgIGVuZGlmKCkKIAotICAgICMgVGhlIGdpdCBzdWJtb2R1bGUgdXBkYXRlICctLXJlY3Vyc2l2ZScgZmxhZyByZXF1aXJlcyBnaXQgPj0gdjEuNi41Ci0gICAgIwotICAgIGlmKEdJVF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42LjUpCi0gICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJlcnJvcjogZ2l0IHZlcnNpb24gMS42LjUgb3IgbGF0ZXIgcmVxdWlyZWQgZm9yICdnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSc6IEdJVF9WRVJTSU9OX1NUUklORz0nJHtHSVRfVkVSU0lPTl9TVFJJTkd9JyIpCi0gICAgZW5kaWYoKQorICAgIF9lcF9nZXRfZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZShnaXRfc3VibW9kdWxlc19yZWN1cnNlKQogCiAgICAgZ2V0X3Byb3BlcnR5KGdpdF90YWcgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgX0VQX0dJVF9UQUcpCiAgICAgaWYoTk9UIGdpdF90YWcpCkBAIC0yNDc3LDcgKzI0MDIsNyBAQAogICAgICMgVGhlIHNjcmlwdCB3aWxsIGRlbGV0ZSB0aGUgc291cmNlIGRpcmVjdG9yeSBhbmQgdGhlbiBjYWxsIGdpdCBjbG9uZS4KICAgICAjCiAgICAgX2VwX3dyaXRlX2dpdGNsb25lX3NjcmlwdCgke3RtcF9kaXJ9LyR7bmFtZX0tZ2l0Y2xvbmUuY21ha2UgJHtzb3VyY2VfZGlyfQotICAgICAgJHtHSVRfRVhFQ1VUQUJMRX0gJHtnaXRfcmVwb3NpdG9yeX0gJHtnaXRfdGFnfSAke2dpdF9yZW1vdGVfbmFtZX0gJHtnaXRfaW5pdF9zdWJtb2R1bGVzfSAiJHtnaXRfc3VibW9kdWxlc30iICIke2dpdF9zaGFsbG93fSIgIiR7Z2l0X3Byb2dyZXNzfSIgIiR7Z2l0X2NvbmZpZ30iICR7c3JjX25hbWV9ICR7d29ya19kaXJ9CisgICAgICAke0dJVF9FWEVDVVRBQkxFfSAke2dpdF9yZXBvc2l0b3J5fSAke2dpdF90YWd9ICR7Z2l0X3JlbW90ZV9uYW1lfSAke2dpdF9pbml0X3N1Ym1vZHVsZXN9ICIke2dpdF9zdWJtb2R1bGVzX3JlY3Vyc2V9IiAiJHtnaXRfc3VibW9kdWxlc30iICIke2dpdF9zaGFsbG93fSIgIiR7Z2l0X3Byb2dyZXNzfSIgIiR7Z2l0X2NvbmZpZ30iICR7c3JjX25hbWV9ICR7d29ya19kaXJ9CiAgICAgICAke3N0YW1wX2Rpcn0vJHtuYW1lfS1naXRpbmZvLnR4dCAke3N0YW1wX2Rpcn0vJHtuYW1lfS1naXRjbG9uZS1sYXN0cnVuLnR4dCAiJHt0bHNfdmVyaWZ5fSIKICAgICAgICkKICAgICBzZXQoY29tbWVudCAiUGVyZm9ybWluZyBkb3dubG9hZCBzdGVwIChnaXQgY2xvbmUpIGZvciAnJHtuYW1lfSciKQpAQCAtMjU2MywxMCArMjQ4OCwxMCBAQAogICAgIGlmKElTX0RJUkVDVE9SWSAiJHt1cmx9IikKICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoYWJzX2RpciAiJHt1cmx9IiBBQlNPTFVURSkKICAgICAgIHNldChjb21tZW50ICJQZXJmb3JtaW5nIGRvd25sb2FkIHN0ZXAgKERJUiBjb3B5KSBmb3IgJyR7bmFtZX0nIikKLSAgICAgIHNldChjbWQgICAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZV9kaXJlY3RvcnkgJHtzb3VyY2VfZGlyfQorICAgICAgc2V0KGNtZCAgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmICR7c291cmNlX2Rpcn0KICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHlfZGlyZWN0b3J5ICR7YWJzX2Rpcn0gJHtzb3VyY2VfZGlyfSkKICAgICBlbHNlKCkKLSAgICAgIGdldF9wcm9wZXJ0eShub19leHRyYWN0IFRBUkdFVCAiJHtuYW1lfSIgUFJPUEVSVFkgX0VQX0RPV05MT0FEX05PX0VYVFJBQ1QgU0VUKQorICAgICAgZ2V0X3Byb3BlcnR5KG5vX2V4dHJhY3QgVEFSR0VUICIke25hbWV9IiBQUk9QRVJUWSBfRVBfRE9XTkxPQURfTk9fRVhUUkFDVCkKICAgICAgIGlmKCIke3VybH0iIE1BVENIRVMgIl5bYS16XSs6Ly8iKQogICAgICAgICAjIFRPRE86IFNob3VsZCBkb3dubG9hZCBhbmQgZXh0cmFjdGlvbiBiZSBkaWZmZXJlbnQgc3RlcHM/CiAgICAgICAgIGlmKCJ4JHtmbmFtZX0iIFNUUkVRVUFMICJ4IikKQEAgLTI2NTcsMTcgKzI1ODIsMzIgQEAKICAgICBzZXQodXNlc190ZXJtaW5hbCAiIikKICAgZW5kaWYoKQogCi0gIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcCgke25hbWV9IGRvd25sb2FkCi0gICAgQ09NTUVOVCAke2NvbW1lbnR9Ci0gICAgQ09NTUFORCAke2NtZH0KLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke3dvcmtfZGlyfQotICAgIERFUEVORFMgJHtkZXBlbmRzfQotICAgIERFUEVOREVFUyBta2RpcgotICAgICR7bG9nfQotICAgICR7dXNlc190ZXJtaW5hbH0KLSAgICApCisgIHNldChfX2NtZFF1b3RlZCkKKyAgZm9yZWFjaChfX2l0ZW0gSU4gTElTVFMgY21kKQorICAgIHN0cmluZyhBUFBFTkQgX19jbWRRdW90ZWQgIiBbPT1bJHtfX2l0ZW19XT09XSIpCisgIGVuZGZvcmVhY2goKQorICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUgIgorICAgIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcChcJHtuYW1lfSBkb3dubG9hZAorICAgICAgQ09NTUVOVCBcJHtjb21tZW50fQorICAgICAgQ09NTUFORCAke19fY21kUXVvdGVkfQorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCR7d29ya19kaXJ9CisgICAgICBERVBFTkRTIFwke2RlcGVuZHN9CisgICAgICBERVBFTkRFRVMgbWtkaXIKKyAgICAgICR7bG9nfQorICAgICAgJHt1c2VzX3Rlcm1pbmFsfQorICAgICAgKSIKKyAgKQogZW5kZnVuY3Rpb24oKQogCitmdW5jdGlvbihfZXBfZ2V0X3VwZGF0ZV9kaXNjb25uZWN0ZWQgdmFyIG5hbWUpCisgIGdldF9wcm9wZXJ0eSh1cGRhdGVfZGlzY29ubmVjdGVkX3NldCBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfVVBEQVRFX0RJU0NPTk5FQ1RFRCBTRVQpCisgIGlmKHVwZGF0ZV9kaXNjb25uZWN0ZWRfc2V0KQorICAgIGdldF9wcm9wZXJ0eSh1cGRhdGVfZGlzY29ubmVjdGVkIFRBUkdFVCAke25hbWV9IFBST1BFUlRZIF9FUF9VUERBVEVfRElTQ09OTkVDVEVEKQorICBlbHNlKCkKKyAgICBnZXRfcHJvcGVydHkodXBkYXRlX2Rpc2Nvbm5lY3RlZCBESVJFQ1RPUlkgUFJPUEVSVFkgRVBfVVBEQVRFX0RJU0NPTk5FQ1RFRCkKKyAgZW5kaWYoKQorICBzZXQoJHt2YXJ9ICIke3VwZGF0ZV9kaXNjb25uZWN0ZWR9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCiAKIGZ1bmN0aW9uKF9lcF9hZGRfdXBkYXRlX2NvbW1hbmQgbmFtZSkKICAgRXh0ZXJuYWxQcm9qZWN0X0dldF9Qcm9wZXJ0eSgke25hbWV9IHNvdXJjZV9kaXIgdG1wX2RpcikKQEAgLTI2NzgsMTIgKzI2MTgsOCBAQAogICBnZXRfcHJvcGVydHkoc3ZuX3JlcG9zaXRvcnkgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgX0VQX1NWTl9SRVBPU0lUT1JZKQogICBnZXRfcHJvcGVydHkoZ2l0X3JlcG9zaXRvcnkgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgX0VQX0dJVF9SRVBPU0lUT1JZKQogICBnZXRfcHJvcGVydHkoaGdfcmVwb3NpdG9yeSAgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgX0VQX0hHX1JFUE9TSVRPUlkgKQotICBnZXRfcHJvcGVydHkodXBkYXRlX2Rpc2Nvbm5lY3RlZF9zZXQgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgX0VQX1VQREFURV9ESVNDT05ORUNURUQgU0VUKQotICBpZih1cGRhdGVfZGlzY29ubmVjdGVkX3NldCkKLSAgICBnZXRfcHJvcGVydHkodXBkYXRlX2Rpc2Nvbm5lY3RlZCBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfVVBEQVRFX0RJU0NPTk5FQ1RFRCkKLSAgZWxzZSgpCi0gICAgZ2V0X3Byb3BlcnR5KHVwZGF0ZV9kaXNjb25uZWN0ZWQgRElSRUNUT1JZIFBST1BFUlRZIEVQX1VQREFURV9ESVNDT05ORUNURUQpCi0gIGVuZGlmKCkKKworICBfZXBfZ2V0X3VwZGF0ZV9kaXNjb25uZWN0ZWQodXBkYXRlX2Rpc2Nvbm5lY3RlZCAke25hbWV9KQogCiAgIHNldCh3b3JrX2RpcikKICAgc2V0KGNvbW1lbnQpCkBAIC0yNzUyLDggKzI2ODgsMjIgQEAKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAKKyAgICBnZXRfcHJvcGVydHkoZ2l0X3VwZGF0ZV9zdHJhdGVneSBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBfRVBfR0lUX1JFTU9URV9VUERBVEVfU1RSQVRFR1kpCisgICAgaWYoTk9UIGdpdF91cGRhdGVfc3RyYXRlZ3kpCisgICAgICBzZXQoZ2l0X3VwZGF0ZV9zdHJhdGVneSAiJHtDTUFLRV9FUF9HSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWX0iKQorICAgIGVuZGlmKCkKKyAgICBpZihOT1QgZ2l0X3VwZGF0ZV9zdHJhdGVneSkKKyAgICAgIHNldChnaXRfdXBkYXRlX3N0cmF0ZWd5IFJFQkFTRSkKKyAgICBlbmRpZigpCisgICAgc2V0KHN0cmF0ZWdpZXMgQ0hFQ0tPVVQgUkVCQVNFIFJFQkFTRV9DSEVDS09VVCkKKyAgICBpZihOT1QgZ2l0X3VwZGF0ZV9zdHJhdGVneSBJTl9MSVNUIHN0cmF0ZWdpZXMpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICInJHtnaXRfdXBkYXRlX3N0cmF0ZWd5fScgaXMgbm90IG9uZSBvZiB0aGUgc3VwcG9ydGVkIHN0cmF0ZWdpZXM6ICR7c3RyYXRlZ2llc30iKQorICAgIGVuZGlmKCkKKworICAgIF9lcF9nZXRfZ2l0X3N1Ym1vZHVsZXNfcmVjdXJzZShnaXRfc3VibW9kdWxlc19yZWN1cnNlKQorCiAgICAgX2VwX3dyaXRlX2dpdHVwZGF0ZV9zY3JpcHQoJHt0bXBfZGlyfS8ke25hbWV9LWdpdHVwZGF0ZS5jbWFrZQotICAgICAgJHtHSVRfRVhFQ1VUQUJMRX0gJHtnaXRfdGFnfSAke2dpdF9yZW1vdGVfbmFtZX0gJHtnaXRfaW5pdF9zdWJtb2R1bGVzfSAiJHtnaXRfc3VibW9kdWxlc30iICR7Z2l0X3JlcG9zaXRvcnl9ICR7d29ya19kaXJ9CisgICAgICAke0dJVF9FWEVDVVRBQkxFfSAke2dpdF90YWd9ICR7Z2l0X3JlbW90ZV9uYW1lfSAke2dpdF9pbml0X3N1Ym1vZHVsZXN9ICIke2dpdF9zdWJtb2R1bGVzX3JlY3Vyc2V9IiAiJHtnaXRfc3VibW9kdWxlc30iICR7Z2l0X3JlcG9zaXRvcnl9ICR7d29ya19kaXJ9ICR7Z2l0X3VwZGF0ZV9zdHJhdGVneX0KICAgICAgICkKICAgICBzZXQoY21kICR7Q01BS0VfQ09NTUFORH0gLVAgJHt0bXBfZGlyfS8ke25hbWV9LWdpdHVwZGF0ZS5jbWFrZSkKICAgICBzZXQoYWx3YXlzIDEpCkBAIC0yNzk1LDE2ICsyNzQ1LDIyIEBACiAgICAgc2V0KHVzZXNfdGVybWluYWwgIiIpCiAgIGVuZGlmKCkKIAotICBFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXAoJHtuYW1lfSB1cGRhdGUKLSAgICBDT01NRU5UICR7Y29tbWVudH0KLSAgICBDT01NQU5EICR7Y21kfQotICAgIEFMV0FZUyAke2Fsd2F5c30KLSAgICBFWENMVURFX0ZST01fTUFJTiAke3VwZGF0ZV9kaXNjb25uZWN0ZWR9Ci0gICAgV09SS0lOR19ESVJFQ1RPUlkgJHt3b3JrX2Rpcn0KLSAgICBERVBFTkRFRVMgZG93bmxvYWQKLSAgICAke2xvZ30KLSAgICAke3VzZXNfdGVybWluYWx9Ci0gICAgKQorICBzZXQoX19jbWRRdW90ZWQpCisgIGZvcmVhY2goX19pdGVtIElOIExJU1RTIGNtZCkKKyAgICBzdHJpbmcoQVBQRU5EIF9fY21kUXVvdGVkICIgWz09WyR7X19pdGVtfV09PV0iKQorICBlbmRmb3JlYWNoKCkKKyAgY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFICIKKyAgICBFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXAoJHtuYW1lfSB1cGRhdGUKKyAgICAgIENPTU1FTlQgXCR7Y29tbWVudH0KKyAgICAgIENPTU1BTkQgJHtfX2NtZFF1b3RlZH0KKyAgICAgIEFMV0FZUyBcJHthbHdheXN9CisgICAgICBFWENMVURFX0ZST01fTUFJTiBcJHt1cGRhdGVfZGlzY29ubmVjdGVkfQorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCR7d29ya19kaXJ9CisgICAgICBERVBFTkRFRVMgZG93bmxvYWQKKyAgICAgICR7bG9nfQorICAgICAgJHt1c2VzX3Rlcm1pbmFsfQorICAgICAgKSIKKyAgKQogCiAgIGlmKHVwZGF0ZV9kaXNjb25uZWN0ZWQpCiAgICAgX2VwX2dldF9zdGVwX3N0YW1wZmlsZSgke25hbWV9IHNraXAtdXBkYXRlIHNraXAtdXBkYXRlX3N0YW1wX2ZpbGUpCkBAIC0yODQzLDEyICsyNzk5LDI1IEBACiAgICAgc2V0KGxvZyAiIikKICAgZW5kaWYoKQogCi0gIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcCgke25hbWV9IHBhdGNoCi0gICAgQ09NTUFORCAke2NtZH0KLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke3dvcmtfZGlyfQotICAgIERFUEVOREVFUyBkb3dubG9hZAotICAgICR7bG9nfQotICAgICkKKyAgX2VwX2dldF91cGRhdGVfZGlzY29ubmVjdGVkKHVwZGF0ZV9kaXNjb25uZWN0ZWQgJHtuYW1lfSkKKyAgaWYodXBkYXRlX2Rpc2Nvbm5lY3RlZCkKKyAgICBzZXQodXBkYXRlX2RlcCBza2lwLXVwZGF0ZSkKKyAgZWxzZSgpCisgICAgc2V0KHVwZGF0ZV9kZXAgdXBkYXRlKQorICBlbmRpZigpCisKKyAgc2V0KF9fY21kUXVvdGVkKQorICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBjbWQpCisgICAgc3RyaW5nKEFQUEVORCBfX2NtZFF1b3RlZCAiIFs9PVske19faXRlbX1dPT1dIikKKyAgZW5kZm9yZWFjaCgpCisgIGNtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSAiCisgICAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gcGF0Y2gKKyAgICAgIENPTU1BTkQgJHtfX2NtZFF1b3RlZH0KKyAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwke3dvcmtfZGlyfQorICAgICAgREVQRU5ERUVTIGRvd25sb2FkIFwke3VwZGF0ZV9kZXB9CisgICAgICAke2xvZ30KKyAgICAgICkiCisgICkKIGVuZGZ1bmN0aW9uKCkKIAogCkBAIC0yOTQzLDYgKzI5MTIsMTAgQEAKICAgICAgIGVuZGlmKCkKICAgICAgIF9lcF93cml0ZV9pbml0aWFsX2NhY2hlKCR7bmFtZX0gIiR7X2VwX2NhY2hlX2FyZ3Nfc2NyaXB0fSIgIiR7c2NyaXB0X2luaXRpYWxfY2FjaGVfZm9yY2V9JHtzY3JpcHRfaW5pdGlhbF9jYWNoZV9kZWZhdWx0fSIpCiAgICAgICBsaXN0KEFQUEVORCBjbWQgIi1DJHtfZXBfY2FjaGVfYXJnc19zY3JpcHR9IikKKyAgICAgIF9lcF9yZXBsYWNlX2xvY2F0aW9uX3RhZ3MoJHtuYW1lfSBfZXBfY2FjaGVfYXJnc19zY3JpcHQpCisgICAgICBzZXQoX2VwX2NhY2hlX2FyZ3Nfc2NyaXB0CisgICAgICAgICIke19lcF9jYWNoZV9hcmdzX3NjcmlwdH0iCisgICAgICAgIFBBUkVOVF9TQ09QRSkKICAgICBlbmRpZigpCiAKICAgICBsaXN0KEFQUEVORCBjbWQgIjxTT1VSQ0VfRElSPjxTT1VSQ0VfU1VCRElSPiIpCkBAIC0yOTczLDcgKzI5NDYsNyBAQAogCiAgICMgSWYgYW55dGhpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGNoYW5nZXMsIChjb21tYW5kIGl0c2VsZiwgY21ha2UKICAgIyB1c2VkLCBjbWFrZSBhcmdzIG9yIGNtYWtlIGdlbmVyYXRvcikgdGhlbiByZS1ydW4gdGhlIGNvbmZpZ3VyZSBzdGVwLgotICAjIEZpeGVzIGlzc3VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xMDI1OAorICAjIEZpeGVzIGlzc3VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzEwMjU4CiAgICMKICAgaWYoTk9UIEVYSVNUUyAke3RtcF9kaXJ9LyR7bmFtZX0tY2ZnY21kLnR4dC5pbikKICAgICBmaWxlKFdSSVRFICR7dG1wX2Rpcn0vJHtuYW1lfS1jZmdjbWQudHh0LmluICJjbWQ9J1xAY21kXEAnXG4iKQpAQCAtMjk5NywyNiArMjk3MCwyNyBAQAogICAgIHNldCh1c2VzX3Rlcm1pbmFsICIiKQogICBlbmRpZigpCiAKLSAgZ2V0X3Byb3BlcnR5KHVwZGF0ZV9kaXNjb25uZWN0ZWRfc2V0IFRBUkdFVCAke25hbWV9IFBST1BFUlRZIF9FUF9VUERBVEVfRElTQ09OTkVDVEVEIFNFVCkKLSAgaWYodXBkYXRlX2Rpc2Nvbm5lY3RlZF9zZXQpCi0gICAgZ2V0X3Byb3BlcnR5KHVwZGF0ZV9kaXNjb25uZWN0ZWQgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgX0VQX1VQREFURV9ESVNDT05ORUNURUQpCi0gIGVsc2UoKQotICAgIGdldF9wcm9wZXJ0eSh1cGRhdGVfZGlzY29ubmVjdGVkIERJUkVDVE9SWSBQUk9QRVJUWSBFUF9VUERBVEVfRElTQ09OTkVDVEVEKQotICBlbmRpZigpCisgIF9lcF9nZXRfdXBkYXRlX2Rpc2Nvbm5lY3RlZCh1cGRhdGVfZGlzY29ubmVjdGVkICR7bmFtZX0pCiAgIGlmKHVwZGF0ZV9kaXNjb25uZWN0ZWQpCiAgICAgc2V0KHVwZGF0ZV9kZXAgc2tpcC11cGRhdGUpCiAgIGVsc2UoKQogICAgIHNldCh1cGRhdGVfZGVwIHVwZGF0ZSkKICAgZW5kaWYoKQogCi0gIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcCgke25hbWV9IGNvbmZpZ3VyZQotICAgIENPTU1BTkQgJHtjbWR9Ci0gICAgV09SS0lOR19ESVJFQ1RPUlkgJHtiaW5hcnlfZGlyfQotICAgIERFUEVOREVFUyAke3VwZGF0ZV9kZXB9IHBhdGNoCi0gICAgREVQRU5EUyAke2ZpbGVfZGVwc30KLSAgICAke2xvZ30KLSAgICAke3VzZXNfdGVybWluYWx9Ci0gICAgKQorICBzZXQoX19jbWRRdW90ZWQpCisgIGZvcmVhY2goX19pdGVtIElOIExJU1RTIGNtZCkKKyAgICBzdHJpbmcoQVBQRU5EIF9fY21kUXVvdGVkICIgWz09WyR7X19pdGVtfV09PV0iKQorICBlbmRmb3JlYWNoKCkKKyAgY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFICIKKyAgICBFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXAoJHtuYW1lfSBjb25maWd1cmUKKyAgICAgIENPTU1BTkQgJHtfX2NtZFF1b3RlZH0KKyAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwke2JpbmFyeV9kaXJ9CisgICAgICBERVBFTkRFRVMgXCR7dXBkYXRlX2RlcH0gcGF0Y2gKKyAgICAgIERFUEVORFMgXCR7ZmlsZV9kZXBzfQorICAgICAgJHtsb2d9CisgICAgICAke3VzZXNfdGVybWluYWx9CisgICAgICApIgorICApCiBlbmRmdW5jdGlvbigpCiAKIApAQCAtMzA1NCwxNSArMzAyOCwyMSBAQAogCiAgIGdldF9wcm9wZXJ0eShidWlsZF9ieXByb2R1Y3RzIFRBUkdFVCAke25hbWV9IFBST1BFUlRZIF9FUF9CVUlMRF9CWVBST0RVQ1RTKQogCi0gIEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcCgke25hbWV9IGJ1aWxkCi0gICAgQ09NTUFORCAke2NtZH0KLSAgICBCWVBST0RVQ1RTICR7YnVpbGRfYnlwcm9kdWN0c30KLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke2JpbmFyeV9kaXJ9Ci0gICAgREVQRU5ERUVTIGNvbmZpZ3VyZQotICAgIEFMV0FZUyAke2Fsd2F5c30KLSAgICAke2xvZ30KLSAgICAke3VzZXNfdGVybWluYWx9Ci0gICAgKQorICBzZXQoX19jbWRRdW90ZWQpCisgIGZvcmVhY2goX19pdGVtIElOIExJU1RTIGNtZCkKKyAgICBzdHJpbmcoQVBQRU5EIF9fY21kUXVvdGVkICIgWz09WyR7X19pdGVtfV09PV0iKQorICBlbmRmb3JlYWNoKCkKKyAgY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFICIKKyAgICBFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXAoJHtuYW1lfSBidWlsZAorICAgICAgQ09NTUFORCAke19fY21kUXVvdGVkfQorICAgICAgQllQUk9EVUNUUyBcJHtidWlsZF9ieXByb2R1Y3RzfQorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCR7YmluYXJ5X2Rpcn0KKyAgICAgIERFUEVOREVFUyBjb25maWd1cmUKKyAgICAgIEFMV0FZUyBcJHthbHdheXN9CisgICAgICAke2xvZ30KKyAgICAgICR7dXNlc190ZXJtaW5hbH0KKyAgICAgICkiCisgICkKIGVuZGZ1bmN0aW9uKCkKIAogCkBAIC0zMDkxLDEzICszMDcxLDE5IEBACiAgICAgc2V0KHVzZXNfdGVybWluYWwgIiIpCiAgIGVuZGlmKCkKIAotICBFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXAoJHtuYW1lfSBpbnN0YWxsCi0gICAgQ09NTUFORCAke2NtZH0KLSAgICBXT1JLSU5HX0RJUkVDVE9SWSAke2JpbmFyeV9kaXJ9Ci0gICAgREVQRU5ERUVTIGJ1aWxkCi0gICAgJHtsb2d9Ci0gICAgJHt1c2VzX3Rlcm1pbmFsfQotICAgICkKKyAgc2V0KF9fY21kUXVvdGVkKQorICBmb3JlYWNoKF9faXRlbSBJTiBMSVNUUyBjbWQpCisgICAgc3RyaW5nKEFQUEVORCBfX2NtZFF1b3RlZCAiIFs9PVske19faXRlbX1dPT1dIikKKyAgZW5kZm9yZWFjaCgpCisgIGNtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSAiCisgICAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gaW5zdGFsbAorICAgICAgQ09NTUFORCAke19fY21kUXVvdGVkfQorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgXCR7YmluYXJ5X2Rpcn0KKyAgICAgIERFUEVOREVFUyBidWlsZAorICAgICAgJHtsb2d9CisgICAgICAke3VzZXNfdGVybWluYWx9CisgICAgICApIgorICApCiBlbmRmdW5jdGlvbigpCiAKIApAQCAtMzE1MiwxNSArMzEzOCwyMSBAQAogICAgICAgc2V0KHVzZXNfdGVybWluYWwgIiIpCiAgICAgZW5kaWYoKQogCi0gICAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gdGVzdAotICAgICAgQ09NTUFORCAke2NtZH0KLSAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7YmluYXJ5X2Rpcn0KLSAgICAgICR7ZGVwZW5kZWVzX2FyZ3N9Ci0gICAgICAke2RlcGVuZGVyc19hcmdzfQotICAgICAgJHtleGNsdWRlX2FyZ3N9Ci0gICAgICAke2xvZ30KLSAgICAgICR7dXNlc190ZXJtaW5hbH0KLSAgICAgICkKKyAgICBzZXQoX19jbWRRdW90ZWQpCisgICAgZm9yZWFjaChfX2l0ZW0gSU4gTElTVFMgY21kKQorICAgICAgc3RyaW5nKEFQUEVORCBfX2NtZFF1b3RlZCAiIFs9PVske19faXRlbX1dPT1dIikKKyAgICBlbmRmb3JlYWNoKCkKKyAgICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUgIgorICAgICAgRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7bmFtZX0gdGVzdAorICAgICAgICBDT01NQU5EICR7X19jbWRRdW90ZWR9CisgICAgICAgIFdPUktJTkdfRElSRUNUT1JZIFwke2JpbmFyeV9kaXJ9CisgICAgICAgICR7ZGVwZW5kZWVzX2FyZ3N9CisgICAgICAgICR7ZGVwZW5kZXJzX2FyZ3N9CisgICAgICAgICR7ZXhjbHVkZV9hcmdzfQorICAgICAgICAke2xvZ30KKyAgICAgICAgJHt1c2VzX3Rlcm1pbmFsfQorICAgICAgICApIgorICAgICkKICAgZW5kaWYoKQogZW5kZnVuY3Rpb24oKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZldGNoQ29udGVudC5jbWFrZSBiL01vZHVsZXMvRmV0Y2hDb250ZW50LmNtYWtlCmluZGV4IDU3MTZiMDEuLmM4NWUyZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmV0Y2hDb250ZW50LmNtYWtlCisrKyBiL01vZHVsZXMvRmV0Y2hDb250ZW50LmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmV0Y2hDb250ZW50CiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiAuLiBvbmx5OjogaHRtbAogCiAgIC4uIGNvbnRlbnRzOjoKQEAgLTc2LDggKzc4LDExIEBACiBwb3B1bGF0ZSBzb21lIGNvbnRlbnQgaW4gQ01ha2UncyBzY3JpcHQgbW9kZS4KIAogCitDb21tYW5kcworXl5eXl5eXl4KKwogRGVjbGFyaW5nIENvbnRlbnQgRGV0YWlscwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgogCiAuLiBjb21tYW5kOjogRmV0Y2hDb250ZW50X0RlY2xhcmUKIApAQCAtMTA1LDkgKzExMCwxMyBAQAogICBUaGUgYGA8Y29udGVudE9wdGlvbnM+YGAgY2FuIGJlIGFueSBvZiB0aGUgZG93bmxvYWQgb3IgdXBkYXRlL3BhdGNoIG9wdGlvbnMKICAgdGhhdCB0aGUgOmNvbW1hbmQ6YEV4dGVybmFsUHJvamVjdF9BZGRgIGNvbW1hbmQgdW5kZXJzdGFuZHMuICBUaGUgY29uZmlndXJlLAogICBidWlsZCwgaW5zdGFsbCBhbmQgdGVzdCBzdGVwcyBhcmUgZXhwbGljaXRseSBkaXNhYmxlZCBhbmQgdGhlcmVmb3JlIG9wdGlvbnMKLSAgcmVsYXRlZCB0byB0aGVtIHdpbGwgYmUgaWdub3JlZC4gIEluIG1vc3QgY2FzZXMsIGBgPGNvbnRlbnRPcHRpb25zPmBgIHdpbGwKLSAganVzdCBiZSBhIGNvdXBsZSBvZiBvcHRpb25zIGRlZmluaW5nIHRoZSBkb3dubG9hZCBtZXRob2QgYW5kIG1ldGhvZC1zcGVjaWZpYwotICBkZXRhaWxzIGxpa2UgYSBjb21taXQgdGFnIG9yIGFyY2hpdmUgaGFzaC4gIEZvciBleGFtcGxlOgorICByZWxhdGVkIHRvIHRoZW0gd2lsbCBiZSBpZ25vcmVkLiAgVGhlIGBgU09VUkNFX1NVQkRJUmBgIG9wdGlvbiBpcyBhbgorICBleGNlcHRpb24sIHNlZSA6Y29tbWFuZDpgRmV0Y2hDb250ZW50X01ha2VBdmFpbGFibGVgIGZvciBkZXRhaWxzIG9uIGhvdyB0aGF0CisgIGFmZmVjdHMgYmVoYXZpb3IuCisKKyAgSW4gbW9zdCBjYXNlcywgYGA8Y29udGVudE9wdGlvbnM+YGAgd2lsbCBqdXN0IGJlIGEgY291cGxlIG9mIG9wdGlvbnMgZGVmaW5pbmcKKyAgdGhlIGRvd25sb2FkIG1ldGhvZCBhbmQgbWV0aG9kLXNwZWNpZmljIGRldGFpbHMgbGlrZSBhIGNvbW1pdCB0YWcgb3IgYXJjaGl2ZQorICBoYXNoLiAgRm9yIGV4YW1wbGU6CiAKICAgLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKQEAgLTEzMCw3ICsxMzksNyBAQAogICAgICkKIAogUG9wdWxhdGluZyBUaGUgQ29udGVudAotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgogCiBGb3IgbW9zdCBjb21tb24gc2NlbmFyaW9zLCBwb3B1bGF0aW9uIG1lYW5zIG1ha2luZyBjb250ZW50IGF2YWlsYWJsZSB0byB0aGUKIG1haW4gYnVpbGQgYWNjb3JkaW5nIHRvIHByZXZpb3VzbHkgZGVjbGFyZWQgZGV0YWlscyBmb3IgdGhhdCBkZXBlbmRlbmN5LgpAQCAtMTYxLDggKzE3MCw5IEBACiBUaGUgYWJvdmUgaXMgc3VjaCBhIGNvbW1vbiBwYXR0ZXJuIHRoYXQsIHdoZXJlIG5vIGN1c3RvbSBzdGVwcyBhcmUgbmVlZGVkCiBiZXR3ZWVuIHRoZSBjYWxscyB0byA6Y29tbWFuZDpgRmV0Y2hDb250ZW50X1BvcHVsYXRlYCBhbmQKIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YCwgZXF1aXZhbGVudCBsb2dpYyBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZwotOmNvbW1hbmQ6YEZldGNoQ29udGVudF9NYWtlQXZhaWxhYmxlYCBpbnN0ZWFkIChhbmQgc2hvdWxkIGJlIHByZWZlcnJlZCB3aGVyZQotaXQgbWVldHMgdGhlIG5lZWRzIG9mIHRoZSBwcm9qZWN0KS4KKzpjb21tYW5kOmBGZXRjaENvbnRlbnRfTWFrZUF2YWlsYWJsZWAgaW5zdGVhZC4gIFdoZXJlIGl0IG1lZXRzIHRoZSBuZWVkcyBvZgordGhlIHByb2plY3QsIDpjb21tYW5kOmBGZXRjaENvbnRlbnRfTWFrZUF2YWlsYWJsZWAgc2hvdWxkIGJlIHByZWZlcnJlZCwgYXMgaXQKK2lzIHNpbXBsZXIgYW5kIHByb3ZpZGVzIGFkZGl0aW9uYWwgZmVhdHVyZXMgb3ZlciB0aGUgcGF0dGVybiBhYm92ZS4KIAogLi4gY29tbWFuZDo6IEZldGNoQ29udGVudF9Qb3B1bGF0ZQogCkBAIC0zMzIsNiArMzQyLDggQEAKICAgICBgYCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS88bGNOYW1lPi1zdWJidWlsZGBgIGFuZCBpdCB3b3VsZCBiZSB1bnVzdWFsCiAgICAgdG8gbmVlZCB0byBvdmVycmlkZSB0aGlzIGRlZmF1bHQuICBJZiBhIHJlbGF0aXZlIHBhdGggaXMgc3BlY2lmaWVkLCBpdCB3aWxsCiAgICAgYmUgaW50ZXJwcmV0ZWQgYXMgcmVsYXRpdmUgdG8gOnZhcmlhYmxlOmBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJgLgorICAgIFRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgYGBTT1VSQ0VfU1VCRElSYGAgb3B0aW9uIHdoaWNoCisgICAgb25seSBhZmZlY3RzIHRoZSA6Y29tbWFuZDpgRmV0Y2hDb250ZW50X01ha2VBdmFpbGFibGVgIGNvbW1hbmQuCiAKICAgYGBTT1VSQ0VfRElSYGAsIGBgQklOQVJZX0RJUmBgCiAgICAgVGhlIGBgU09VUkNFX0RJUmBgIGFuZCBgYEJJTkFSWV9ESVJgYCBhcmd1bWVudHMgYXJlIHN1cHBvcnRlZCBieQpAQCAtNDA2LDE1ICs0MTgsMjIgQEAKIAogICBUaGlzIGNvbW1hbmQgaW1wbGVtZW50cyB0aGUgY29tbW9uIHBhdHRlcm4gdHlwaWNhbGx5IG5lZWRlZCBmb3IgbW9zdAogICBkZXBlbmRlbmNpZXMuICBJdCBpdGVyYXRlcyBvdmVyIGVhY2ggb2YgdGhlIG5hbWVkIGRlcGVuZGVuY2llcyBpbiB0dXJuCi0gIGFuZCBmb3IgZWFjaCBvbmUgaXQgbG9vc2VseSBmb2xsb3dzIHRoZSBzYW1lCisgIGFuZCBmb3IgZWFjaCBvbmUgaXQgbG9vc2VseSBmb2xsb3dzIHRoZQogICA6cmVmOmBjYW5vbmljYWwgcGF0dGVybiA8ZmV0Y2gtY29udGVudC1jYW5vbmljYWwtcGF0dGVybj5gIGFzCi0gIHByZXNlbnRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2VjdGlvbi4gIE9uZSBzbWFsbCBkaWZmZXJlbmNlIHRvCi0gIHRoYXQgcGF0dGVybiBpcyB0aGF0IGl0IHdpbGwgb25seSBjYWxsIDpjb21tYW5kOmBhZGRfc3ViZGlyZWN0b3J5YCBvbiB0aGUKKyAgcHJlc2VudGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzZWN0aW9uLiAgQW4gaW1wb3J0YW50IGRpZmZlcmVuY2UgaXMKKyAgdGhhdCA6Y29tbWFuZDpgYWRkX3N1YmRpcmVjdG9yeWAgd2lsbCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUKICAgcG9wdWxhdGVkIGNvbnRlbnQgaWYgdGhlcmUgaXMgYSBgYENNYWtlTGlzdHMudHh0YGAgZmlsZSBpbiBpdHMgdG9wIGxldmVsCiAgIHNvdXJjZSBkaXJlY3RvcnkuICBUaGlzIGFsbG93cyB0aGUgY29tbWFuZCB0byBiZSB1c2VkIGZvciBkZXBlbmRlbmNpZXMKICAgdGhhdCBtYWtlIGRvd25sb2FkZWQgY29udGVudCBhdmFpbGFibGUgYXQgYSBrbm93biBsb2NhdGlvbiBidXQgd2hpY2ggZG8KICAgbm90IG5lZWQgb3Igc3VwcG9ydCBiZWluZyBhZGRlZCBkaXJlY3RseSB0byB0aGUgYnVpbGQuCiAKKyAgVGhlIGBgU09VUkNFX1NVQkRJUmBgIG9wdGlvbiBjYW4gYmUgZ2l2ZW4gaW4gdGhlIGRlY2xhcmVkIGRldGFpbHMgdG8KKyAgaW5zdHJ1Y3QgYGBGZXRjaENvbnRlbnRfTWFrZUF2YWlsYWJsZSgpYGAgdG8gbG9vayBmb3IgYSBgYENNYWtlTGlzdHMudHh0YGAKKyAgZmlsZSBpbiBhIHN1YmRpcmVjdG9yeSBiZWxvdyB0aGUgdG9wIGxldmVsIChpLmUuIHRoZSBzYW1lIHdheSB0aGF0CisgIGBgU09VUkNFX1NVQkRJUmBgIGlzIHVzZWQgYnkgdGhlIDpjb21tYW5kOmBFeHRlcm5hbFByb2plY3RfQWRkYCBjb21tYW5kKS4KKyAgYGBTT1VSQ0VfU1VCRElSYGAgbXVzdCBhbHdheXMgYmUgYSByZWxhdGl2ZSBwYXRoLiAgU2VlIHRoZSBuZXh0IHNlY3Rpb24KKyAgZm9yIGFuIGV4YW1wbGUgb2YgdGhpcyBvcHRpb24uCisKIAogLi4gX2BmZXRjaC1jb250ZW50LWV4YW1wbGVzYDoKIApAQCAtNDQyLDYgKzQ2MSwyMyBAQAogICAjIENhdGNoMiB3aWxsIGJlIGRlZmluZWQgYW5kIGF2YWlsYWJsZSB0byB0aGUgcmVzdCBvZiB0aGUgYnVpbGQKICAgRmV0Y2hDb250ZW50X01ha2VBdmFpbGFibGUoZ29vZ2xldGVzdCBDYXRjaDIpCiAKK0lmIHRoZSBzdWItcHJvamVjdCdzIGBgQ01ha2VMaXN0cy50eHRgYCBmaWxlIGlzIG5vdCBhdCB0aGUgdG9wIGxldmVsIG9mIGl0cworc291cmNlIHRyZWUsIHRoZSBgYFNPVVJDRV9TVUJESVJgYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gdGVsbCBgYEZldGNoQ29udGVudGBgCit3aGVyZSB0byBmaW5kIGl0LiAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgdGhhdCBvcHRpb24gYW5kCitpdCBhbHNvIHNldHMgYSB2YXJpYWJsZSB3aGljaCBpcyBtZWFuaW5nZnVsIHRvIHRoZSBzdWJwcm9qZWN0IGJlZm9yZSBwdWxsaW5nCitpdCBpbnRvIHRoZSBtYWluIGJ1aWxkOgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICBpbmNsdWRlKEZldGNoQ29udGVudCkKKyAgRmV0Y2hDb250ZW50X0RlY2xhcmUoCisgICAgcHJvdG9idWYKKyAgICBHSVRfUkVQT1NJVE9SWSBodHRwczovL2dpdGh1Yi5jb20vcHJvdG9jb2xidWZmZXJzL3Byb3RvYnVmLmdpdAorICAgIEdJVF9UQUcgICAgICAgIHYzLjEyLjAKKyAgICBTT1VSQ0VfU1VCRElSICBjbWFrZQorICApCisgIHNldChwcm90b2J1Zl9CVUlMRF9URVNUUyBPRkYpCisgIEZldGNoQ29udGVudF9NYWtlQXZhaWxhYmxlKHByb3RvYnVmKQogCiBJbiBtb3JlIGNvbXBsZXggcHJvamVjdCBoaWVyYXJjaGllcywgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBjYW4gYmUgbW9yZQogY29tcGxpY2F0ZWQuICBDb25zaWRlciBhIGhpZXJhcmNoeSB3aGVyZSBgYHByb2pBYGAgaXMgdGhlIHRvcCBsZXZlbCBwcm9qZWN0IGFuZApAQCAtNTk2LDkgKzYzMiw2IEBACiAKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKLQotc2V0KF9fRmV0Y2hDb250ZW50X3ByaXZhdGVEaXIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmV0Y2hDb250ZW50IikKLQogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIFJlY29yZGluZyBhbmQgcmV0cmlldmluZyBjb250ZW50IGRldGFpbHMgZm9yIGxhdGVyIHBvcHVsYXRpb24KICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNjI1LDcgKzY1OCwxMiBAQAogICAgICAgQlJJRUZfRE9DUyAiSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIEZldGNoQ29udGVudF9Qb3B1bGF0ZSgpIgogICAgICAgRlVMTF9ET0NTICAiRGV0YWlscyB1c2VkIGJ5IEZldGNoQ29udGVudF9Qb3B1bGF0ZSgpIGZvciAke2NvbnRlbnROYW1lfSIKICAgICApCi0gICAgc2V0X3Byb3BlcnR5KEdMT0JBTCBQUk9QRVJUWSAke3Byb3BlcnR5TmFtZX0gJHtBUkdOfSkKKyAgICBzZXQoX19jbWRBcmdzKQorICAgIGZvcmVhY2goX19pdGVtIElOIExJU1RTIEFSR04pCisgICAgICBzdHJpbmcoQVBQRU5EIF9fY21kQXJncyAiIFs9PVske19faXRlbX1dPT1dIikKKyAgICBlbmRmb3JlYWNoKCkKKyAgICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUKKyAgICAgICJzZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZICR7cHJvcGVydHlOYW1lfSAke19fY21kQXJnc30pIikKICAgZW5kaWYoKQogCiBlbmRmdW5jdGlvbigpCkBAIC02NTgsNyArNjk2LDggQEAKICAgc2V0KG9uZVZhbHVlQXJncyBTVk5fUkVQT1NJVE9SWSkKICAgc2V0KG11bHRpVmFsdWVBcmdzICIiKQogCi0gIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyhBUkcgIiR7b3B0aW9uc30iICIke29uZVZhbHVlQXJnc30iICIke211bHRpVmFsdWVBcmdzfSIgJHtBUkdOfSkKKyAgY21ha2VfcGFyc2VfYXJndW1lbnRzKFBBUlNFX0FSR1YgMSBBUkcKKyAgICAiJHtvcHRpb25zfSIgIiR7b25lVmFsdWVBcmdzfSIgIiR7bXVsdGlWYWx1ZUFyZ3N9IikKIAogICB1bnNldChzcmNEaXJTdWZmaXgpCiAgIHVuc2V0KHN2blJlcG9BcmdzKQpAQCAtNjc2LDEzICs3MTUsMjAgQEAKICAgZW5kaWYoKQogCiAgIHN0cmluZyhUT0xPV0VSICR7Y29udGVudE5hbWV9IGNvbnRlbnROYW1lTG93ZXIpCi0gIF9fRmV0Y2hDb250ZW50X2RlY2xhcmVEZXRhaWxzKAotICAgICR7Y29udGVudE5hbWVMb3dlcn0KLSAgICBTT1VSQ0VfRElSICIke0ZFVENIQ09OVEVOVF9CQVNFX0RJUn0vJHtjb250ZW50TmFtZUxvd2VyfS1zcmMke3NyY0RpclN1ZmZpeH0iCi0gICAgQklOQVJZX0RJUiAiJHtGRVRDSENPTlRFTlRfQkFTRV9ESVJ9LyR7Y29udGVudE5hbWVMb3dlcn0tYnVpbGQiCi0gICAgJHtzdm5SZXBvQXJnc30KLSAgICAjIExpc3QgdGhlc2UgbGFzdCBzbyB0aGV5IGNhbiBvdmVycmlkZSB0aGluZ3Mgd2Ugc2V0IGFib3ZlCi0gICAgJHtBUkdfVU5QQVJTRURfQVJHVU1FTlRTfQorCisgIHNldChfX2FyZ3NRdW90ZWQpCisgIGZvcmVhY2goX19pdGVtIElOIExJU1RTIEFSR19VTlBBUlNFRF9BUkdVTUVOVFMpCisgICAgc3RyaW5nKEFQUEVORCBfX2FyZ3NRdW90ZWQgIiBbPT1bJHtfX2l0ZW19XT09XSIpCisgIGVuZGZvcmVhY2goKQorICBjbWFrZV9sYW5ndWFnZShFVkFMIENPREUgIgorICAgIF9fRmV0Y2hDb250ZW50X2RlY2xhcmVEZXRhaWxzKAorICAgICAgJHtjb250ZW50TmFtZUxvd2VyfQorICAgICAgU09VUkNFX0RJUiBcIiR7RkVUQ0hDT05URU5UX0JBU0VfRElSfS8ke2NvbnRlbnROYW1lTG93ZXJ9LXNyYyR7c3JjRGlyU3VmZml4fVwiCisgICAgICBCSU5BUllfRElSIFwiJHtGRVRDSENPTlRFTlRfQkFTRV9ESVJ9LyR7Y29udGVudE5hbWVMb3dlcn0tYnVpbGRcIgorICAgICAgXCR7c3ZuUmVwb0FyZ3N9CisgICAgICAjIExpc3QgdGhlc2UgbGFzdCBzbyB0aGV5IGNhbiBvdmVycmlkZSB0aGluZ3Mgd2Ugc2V0IGFib3ZlCisgICAgICAke19fYXJnc1F1b3RlZH0KKyAgICApIgogICApCiAKIGVuZGZ1bmN0aW9uKCkKQEAgLTc5Niw2ICs4NDIsOCBAQAogICAgICAgU1VCQlVJTERfRElSCiAgICAgICBTT1VSQ0VfRElSCiAgICAgICBCSU5BUllfRElSCisgICAgICAjIFdlIG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nIGlmIERPV05MT0FEX05PX0VYVFJBQ1QgaXMgdHJ1ZQorICAgICAgRE9XTkxPQURfTk9fRVhUUkFDVAogICAgICAgIyBQcmV2ZW50IHRoZSBmb2xsb3dpbmcgZnJvbSBiZWluZyBwYXNzZWQgdGhyb3VnaAogICAgICAgQ09ORklHVVJFX0NPTU1BTkQKICAgICAgIEJVSUxEX0NPTU1BTkQKQEAgLTgxMSw3ICs4NTksOCBAQAogICApCiAgIHNldChtdWx0aVZhbHVlQXJncyAiIikKIAotICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoQVJHICIke29wdGlvbnN9IiAiJHtvbmVWYWx1ZUFyZ3N9IiAiJHttdWx0aVZhbHVlQXJnc30iICR7QVJHTn0pCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyhQQVJTRV9BUkdWIDEgQVJHCisgICAgIiR7b3B0aW9uc30iICIke29uZVZhbHVlQXJnc30iICIke211bHRpVmFsdWVBcmdzfSIpCiAKICAgaWYoTk9UIEFSR19TVUJCVUlMRF9ESVIpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiSW50ZXJuYWwgZXJyb3I6IFNVQkJVSUxEX0RJUiBub3Qgc2V0IikKQEAgLTg0Niw2ICs4OTUsMjYgQEAKICAgICBzZXQoQVJHX0VYVFJBICIke0FSR19FWFRSQX0gXCIke2FyZ31cIiIpCiAgIGVuZGZvcmVhY2goKQogCisgIGlmKEFSR19ET1dOTE9BRF9OT19FWFRSQUNUKQorICAgIHNldChBUkdfRVhUUkEgIiR7QVJHX0VYVFJBfSBET1dOTE9BRF9OT19FWFRSQUNUIFlFUyIpCisgICAgc2V0KF9fRkVUQ0hDT05URU5UX0NPUFlfRklMRQorIgorRXh0ZXJuYWxQcm9qZWN0X0dldF9Qcm9wZXJ0eSgke2NvbnRlbnROYW1lfS1wb3B1bGF0ZSBET1dOTE9BREVEX0ZJTEUpCitnZXRfZmlsZW5hbWVfY29tcG9uZW50KGRsRmlsZU5hbWUgXCJcJHtET1dOTE9BREVEX0ZJTEV9XCIgTkFNRSkKKworRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKCR7Y29udGVudE5hbWV9LXBvcHVsYXRlIGNvcHlmaWxlCisgIENPTU1BTkQgICAgXCIke0NNQUtFX0NPTU1BTkR9XCIgLUUgY29weV9pZl9kaWZmZXJlbnQKKyAgICAgICAgICAgICBcIjxET1dOTE9BREVEX0ZJTEU+XCIgXCIke0FSR19TT1VSQ0VfRElSfVwiCisgIERFUEVOREVFUyAgcGF0Y2gKKyAgREVQRU5ERVJTICBjb25maWd1cmUKKyAgQllQUk9EVUNUUyBcIiR7QVJHX1NPVVJDRV9ESVJ9L1wke2RsRmlsZU5hbWV9XCIKKyAgQ09NTUVOVCAgICBcIkNvcHlpbmcgZmlsZSB0byBTT1VSQ0VfRElSXCIKKykKKyIpCisgIGVsc2UoKQorICAgIHVuc2V0KF9fRkVUQ0hDT05URU5UX0NPUFlfRklMRSkKKyAgZW5kaWYoKQorCiAgICMgSGlkZSBvdXRwdXQgaWYgcmVxdWVzdGVkLCBidXQgc2F2ZSBpdCB0byBhIHZhcmlhYmxlIGluIGNhc2UgdGhlcmUncyBhbgogICAjIGVycm9yIHNvIHdlIGNhbiBzaG93IHRoZSBvdXRwdXQgdXBvbiBmYWlsdXJlLiBXaGVuIG5vdCBxdWlldCwgZG9uJ3QKICAgIyBjYXB0dXJlIHRoZSBvdXRwdXQgdG8gYSB2YXJpYWJsZSBiZWNhdXNlIHRoZSB1c2VyIG1heSB3YW50IHRvIHNlZSB0aGUKQEAgLTg2MywxNiArOTMyLDE2IEBACiAgIGVuZGlmKCkKIAogICBpZihDTUFLRV9HRU5FUkFUT1IpCi0gICAgc2V0KGdlbmVyYXRvck9wdHMgIi1HJHtDTUFLRV9HRU5FUkFUT1J9IikKKyAgICBzZXQoc3ViQ01ha2VPcHRzICItRyR7Q01BS0VfR0VORVJBVE9SfSIpCiAgICAgaWYoQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNKQotICAgICAgbGlzdChBUFBFTkQgZ2VuZXJhdG9yT3B0cyAiLUEke0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STX0iKQorICAgICAgbGlzdChBUFBFTkQgc3ViQ01ha2VPcHRzICItQSR7Q01BS0VfR0VORVJBVE9SX1BMQVRGT1JNfSIpCiAgICAgZW5kaWYoKQogICAgIGlmKENNQUtFX0dFTkVSQVRPUl9UT09MU0VUKQotICAgICAgbGlzdChBUFBFTkQgZ2VuZXJhdG9yT3B0cyAiLVQke0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUfSIpCisgICAgICBsaXN0KEFQUEVORCBzdWJDTWFrZU9wdHMgIi1UJHtDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVH0iKQogICAgIGVuZGlmKCkKIAogICAgIGlmKENNQUtFX01BS0VfUFJPR1JBTSkKLSAgICAgIGxpc3QoQVBQRU5EIGdlbmVyYXRvck9wdHMgIi1EQ01BS0VfTUFLRV9QUk9HUkFNOkZJTEVQQVRIPSR7Q01BS0VfTUFLRV9QUk9HUkFNfSIpCisgICAgICBsaXN0KEFQUEVORCBzdWJDTWFrZU9wdHMgIi1EQ01BS0VfTUFLRV9QUk9HUkFNOkZJTEVQQVRIPSR7Q01BS0VfTUFLRV9QUk9HUkFNfSIpCiAgICAgZW5kaWYoKQogCiAgIGVsc2UoKQpAQCAtODgwLDcgKzk0OSwxMiBAQAogICAgICMgZ2VuZXJhdG9yIGlzIHNldCAoYW5kIGhlbmNlIENNQUtFX01BS0VfUFJPR1JBTSBjb3VsZCBub3QgYmUKICAgICAjIHRydXN0ZWQgZXZlbiBpZiBwcm92aWRlZCkuIFdlIHdpbGwgaGF2ZSB0byByZWx5IG9uIGJlaW5nCiAgICAgIyBhYmxlIHRvIGZpbmQgdGhlIGRlZmF1bHQgZ2VuZXJhdG9yIGFuZCBidWlsZCB0b29sLgotICAgIHVuc2V0KGdlbmVyYXRvck9wdHMpCisgICAgdW5zZXQoc3ViQ01ha2VPcHRzKQorICBlbmRpZigpCisKKyAgaWYoREVGSU5FRCBDTUFLRV9FUF9HSVRfUkVNT1RFX1VQREFURV9TVFJBVEVHWSkKKyAgICBsaXN0KEFQUEVORCBzdWJDTWFrZU9wdHMKKyAgICAgICItRENNQUtFX0VQX0dJVF9SRU1PVEVfVVBEQVRFX1NUUkFURUdZPSR7Q01BS0VfRVBfR0lUX1JFTU9URV9VUERBVEVfU1RSQVRFR1l9IikKICAgZW5kaWYoKQogCiAgICMgQ3JlYXRlIGFuZCBidWlsZCBhIHNlcGFyYXRlIENNYWtlIHByb2plY3QgdG8gY2Fycnkgb3V0IHRoZSBwb3B1bGF0aW9uLgpAQCAtODg4LDEwICs5NjIsMTAgQEAKICAgIyBhbnl0aGluZyB0byBiZSB1cGRhdGVkLCBzbyBleHRyYSByZWJ1aWxkcyBvZiB0aGUgcHJvamVjdCB3b24ndCBvY2N1ci4KICAgIyBNYWtlIHN1cmUgdG8gcGFzcyB0aHJvdWdoIENNQUtFX01BS0VfUFJPR1JBTSBpbiBjYXNlIHRoZSBtYWluIHByb2plY3QKICAgIyBoYXMgdGhpcyBzZXQgdG8gc29tZXRoaW5nIG5vdCBmaW5kYWJsZSBvbiB0aGUgUEFUSC4KLSAgY29uZmlndXJlX2ZpbGUoIiR7X19GZXRjaENvbnRlbnRfcHJpdmF0ZURpcn0vQ01ha2VMaXN0cy5jbWFrZS5pbiIKKyAgY29uZmlndXJlX2ZpbGUoIiR7Q01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUn0vRmV0Y2hDb250ZW50L0NNYWtlTGlzdHMuY21ha2UuaW4iCiAgICAgICAgICAgICAgICAgICIke0FSR19TVUJCVUlMRF9ESVJ9L0NNYWtlTGlzdHMudHh0IikKICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAke2dlbmVyYXRvck9wdHN9IC4KKyAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gJHtzdWJDTWFrZU9wdHN9IC4KICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CiAgICAgJHtvdXRwdXRPcHRpb25zfQogICAgIFdPUktJTkdfRElSRUNUT1JZICIke0FSR19TVUJCVUlMRF9ESVJ9IgpAQCAtMTAwMywxNyArMTA3NywyMyBAQAogICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTm8gZGV0YWlscyBoYXZlIGJlZW4gc2V0IGZvciBjb250ZW50OiAke2NvbnRlbnROYW1lfSIpCiAgICAgZW5kaWYoKQogCi0gICAgX19GZXRjaENvbnRlbnRfZGlyZWN0UG9wdWxhdGUoCi0gICAgICAke2NvbnRlbnROYW1lTG93ZXJ9Ci0gICAgICAke3F1aWV0RmxhZ30KLSAgICAgIFVQREFURV9ESVNDT05ORUNURUQgJHtkaXNjb25uZWN0VXBkYXRlc30KLSAgICAgIFNVQkJVSUxEX0RJUiAiJHtGRVRDSENPTlRFTlRfQkFTRV9ESVJ9LyR7Y29udGVudE5hbWVMb3dlcn0tc3ViYnVpbGQiCi0gICAgICBTT1VSQ0VfRElSICAgIiR7RkVUQ0hDT05URU5UX0JBU0VfRElSfS8ke2NvbnRlbnROYW1lTG93ZXJ9LXNyYyIKLSAgICAgIEJJTkFSWV9ESVIgICAiJHtGRVRDSENPTlRFTlRfQkFTRV9ESVJ9LyR7Y29udGVudE5hbWVMb3dlcn0tYnVpbGQiCi0gICAgICAjIFB1dCB0aGUgc2F2ZWQgZGV0YWlscyBsYXN0IHNvIHRoZXkgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUKLSAgICAgICMgdGhlIG9wdGlvbnMgd2Ugc2V0IGFib3ZlICh0aGlzIGNhbiBpbmNsdWRlIFNPVVJDRV9ESVIgb3IKLSAgICAgICMgQlVJTERfRElSKQotICAgICAgJHtjb250ZW50RGV0YWlsc30KKyAgICBzZXQoX19kZXRhaWxzUXVvdGVkKQorICAgIGZvcmVhY2goX19pdGVtIElOIExJU1RTIGNvbnRlbnREZXRhaWxzKQorICAgICAgc3RyaW5nKEFQUEVORCBfX2RldGFpbHNRdW90ZWQgIiBbPT1bJHtfX2l0ZW19XT09XSIpCisgICAgZW5kZm9yZWFjaCgpCisgICAgY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFICIKKyAgICAgIF9fRmV0Y2hDb250ZW50X2RpcmVjdFBvcHVsYXRlKAorICAgICAgICAke2NvbnRlbnROYW1lTG93ZXJ9CisgICAgICAgICR7cXVpZXRGbGFnfQorICAgICAgICBVUERBVEVfRElTQ09OTkVDVEVEICR7ZGlzY29ubmVjdFVwZGF0ZXN9CisgICAgICAgIFNVQkJVSUxEX0RJUiBcIiR7RkVUQ0hDT05URU5UX0JBU0VfRElSfS8ke2NvbnRlbnROYW1lTG93ZXJ9LXN1YmJ1aWxkXCIKKyAgICAgICAgU09VUkNFX0RJUiAgIFwiJHtGRVRDSENPTlRFTlRfQkFTRV9ESVJ9LyR7Y29udGVudE5hbWVMb3dlcn0tc3JjXCIKKyAgICAgICAgQklOQVJZX0RJUiAgIFwiJHtGRVRDSENPTlRFTlRfQkFTRV9ESVJ9LyR7Y29udGVudE5hbWVMb3dlcn0tYnVpbGRcIgorICAgICAgICAjIFB1dCB0aGUgc2F2ZWQgZGV0YWlscyBsYXN0IHNvIHRoZXkgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUKKyAgICAgICAgIyB0aGUgb3B0aW9ucyB3ZSBzZXQgYWJvdmUgKHRoaXMgY2FuIGluY2x1ZGUgU09VUkNFX0RJUiBvcgorICAgICAgICAjIEJVSUxEX0RJUikKKyAgICAgICAgJHtfX2RldGFpbHNRdW90ZWR9CisgICAgICApIgogICAgICkKICAgZW5kaWYoKQogCkBAIC0xMDUwLDExICsxMTMwLDI2IEBACiAgICAgICAjIGNhbiBiZSB0cmVhdGVkIHRoYXQgd2F5LiBQcm90ZWN0aW5nIHRoZSBjYWxsIHdpdGggdGhlIGNoZWNrCiAgICAgICAjIGFsbG93cyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIHByb2plY3RzIHRoYXQganVzdCB3YW50CiAgICAgICAjIHRvIGVuc3VyZSB0aGUgY29udGVudCBleGlzdHMsIHN1Y2ggYXMgdG8gcHJvdmlkZSBjb250ZW50IGF0Ci0gICAgICAjIGEga25vd24gbG9jYXRpb24uCi0gICAgICBpZihFWElTVFMgJHske2NvbnRlbnROYW1lTG93ZXJ9X1NPVVJDRV9ESVJ9L0NNYWtlTGlzdHMudHh0KQotICAgICAgICBhZGRfc3ViZGlyZWN0b3J5KCR7JHtjb250ZW50TmFtZUxvd2VyfV9TT1VSQ0VfRElSfQotICAgICAgICAgICAgICAgICAgICAgICAgICR7JHtjb250ZW50TmFtZUxvd2VyfV9CSU5BUllfRElSfSkKKyAgICAgICMgYSBrbm93biBsb2NhdGlvbi4gV2UgY2hlY2sgdGhlIHNhdmVkIGRldGFpbHMgZm9yIGFuIG9wdGlvbmFsCisgICAgICAjIFNPVVJDRV9TVUJESVIgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGl0cyBtZWFuaW5nCisgICAgICAjIGZvciBFeHRlcm5hbFByb2plY3QuIEl0IHdvbid0IG1hdHRlciBpZiBpdCB3YXMgcGFzc2VkIHRocm91Z2gKKyAgICAgICMgdG8gdGhlIEV4dGVybmFsUHJvamVjdCBzdWItYnVpbGQsIHNpbmNlIGl0IHdvdWxkIGhhdmUgYmVlbgorICAgICAgIyBpZ25vcmVkIHRoZXJlLgorICAgICAgc2V0KF9fZmNfc3JjZGlyICIkeyR7Y29udGVudE5hbWVMb3dlcn1fU09VUkNFX0RJUn0iKQorICAgICAgX19GZXRjaENvbnRlbnRfZ2V0U2F2ZWREZXRhaWxzKCR7Y29udGVudE5hbWV9IGNvbnRlbnREZXRhaWxzKQorICAgICAgaWYoIiR7Y29udGVudERldGFpbHN9IiBTVFJFUVVBTCAiIikKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTm8gZGV0YWlscyBoYXZlIGJlZW4gc2V0IGZvciBjb250ZW50OiAke2NvbnRlbnROYW1lfSIpCiAgICAgICBlbmRpZigpCisgICAgICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoX19mY19hcmcgIiIgIlNPVVJDRV9TVUJESVIiICIiICR7Y29udGVudERldGFpbHN9KQorICAgICAgaWYoTk9UICIke19fZmNfYXJnX1NPVVJDRV9TVUJESVJ9IiBTVFJFUVVBTCAiIikKKyAgICAgICAgc3RyaW5nKEFQUEVORCBfX2ZjX3NyY2RpciAiLyR7X19mY19hcmdfU09VUkNFX1NVQkRJUn0iKQorICAgICAgZW5kaWYoKQorCisgICAgICBpZihFWElTVFMgJHtfX2ZjX3NyY2Rpcn0vQ01ha2VMaXN0cy50eHQpCisgICAgICAgIGFkZF9zdWJkaXJlY3RvcnkoJHtfX2ZjX3NyY2Rpcn0gJHske2NvbnRlbnROYW1lTG93ZXJ9X0JJTkFSWV9ESVJ9KQorICAgICAgZW5kaWYoKQorCisgICAgICB1bnNldChfX2ZjX3NyY2RpcikKICAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZldGNoQ29udGVudC9DTWFrZUxpc3RzLmNtYWtlLmluIGIvTW9kdWxlcy9GZXRjaENvbnRlbnQvQ01ha2VMaXN0cy5jbWFrZS5pbgppbmRleCAwMDk1YjExLi40NWU0ZGYwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZldGNoQ29udGVudC9DTWFrZUxpc3RzLmNtYWtlLmluCisrKyBiL01vZHVsZXMvRmV0Y2hDb250ZW50L0NNYWtlTGlzdHMuY21ha2UuaW4KQEAgLTIxLDMgKzIxLDUgQEAKICAgICAgICAgICAgICAgICAgICAgVVNFU19URVJNSU5BTF9ET1dOTE9BRCAgWUVTCiAgICAgICAgICAgICAgICAgICAgIFVTRVNfVEVSTUlOQUxfVVBEQVRFICAgIFlFUwogKQorCitAX19GRVRDSENPTlRFTlRfQ09QWV9GSUxFQApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQXJtYWRpbGxvLmNtYWtlIGIvTW9kdWxlcy9GaW5kQXJtYWRpbGxvLmNtYWtlCmluZGV4IGM0ZTU1Y2UuLmM4YTMxYTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEFybWFkaWxsby5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRBcm1hZGlsbG8uY21ha2UKQEAgLTYsNyArNiw3IEBACiAtLS0tLS0tLS0tLS0tCiAKIEZpbmQgdGhlIEFybWFkaWxsbyBDKysgbGlicmFyeS4KLUFybWFkaWxsbyBpcyBsaWJyYXJ5IGZvciBsaW5lYXIgYWxnZWJyYSAmIHNjaWVudGlmaWMgY29tcHV0aW5nLgorQXJtYWRpbGxvIGlzIGEgbGlicmFyeSBmb3IgbGluZWFyIGFsZ2VicmEgJiBzY2llbnRpZmljIGNvbXB1dGluZy4KIAogVXNpbmcgQXJtYWRpbGxvOgogCkBAIC0zMSwxOSArMzEsMTMgQEAKICAgQVJNQURJTExPX1ZFUlNJT05fTkFNRSAtIG5hbWUgb2YgdGhlIHZlcnNpb24gKGV4OiAiQW50aXBvZGVhbiBBbnRpbGVlY2giKQogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAotIyBVTklYIHBhdGhzIGFyZSBzdGFuZGFyZCwgbm8gbmVlZCB0byB3cml0ZS4KLWZpbmRfbGlicmFyeShBUk1BRElMTE9fTElCUkFSWQotICBOQU1FUyBhcm1hZGlsbG8KLSAgUEFUSFMgIiRFTlZ7UHJvZ3JhbUZpbGVzfS9Bcm1hZGlsbG8vbGliIiAgIiRFTlZ7UHJvZ3JhbUZpbGVzfS9Bcm1hZGlsbG8vbGliNjQiICIkRU5We1Byb2dyYW1GaWxlc30vQXJtYWRpbGxvIgotICApCiBmaW5kX3BhdGgoQVJNQURJTExPX0lOQ0xVREVfRElSCiAgIE5BTUVTIGFybWFkaWxsbwogICBQQVRIUyAiJEVOVntQcm9ncmFtRmlsZXN9L0FybWFkaWxsby9pbmNsdWRlIgogICApCi0KK21hcmtfYXNfYWR2YW5jZWQoQVJNQURJTExPX0lOQ0xVREVfRElSKQogCiBpZihBUk1BRElMTE9fSU5DTFVERV9ESVIpCi0KICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIyAgRXh0cmFjdCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gPGFybWFkaWxsbz4KICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU5LDMyICs1Myw4MCBAQAogICBpZihFWElTVFMgIiR7QVJNQURJTExPX0lOQ0xVREVfRElSfS9hcm1hZGlsbG9fYml0cy9hcm1hX3ZlcnNpb24uaHBwIikKIAogICAgICMgUmVhZCBhbmQgcGFyc2UgYXJtZGlsbG8gdmVyc2lvbiBoZWFkZXIgZmlsZSBmb3IgdmVyc2lvbiBudW1iZXIKLSAgICBmaWxlKFNUUklOR1MgIiR7QVJNQURJTExPX0lOQ0xVREVfRElSfS9hcm1hZGlsbG9fYml0cy9hcm1hX3ZlcnNpb24uaHBwIiBfYXJtYWRpbGxvX0hFQURFUl9DT05URU5UUyBSRUdFWCAiI2RlZmluZSBBUk1BX1ZFUlNJT05fW0EtWl0rICIpCi0gICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qI2RlZmluZSBBUk1BX1ZFUlNJT05fTUFKT1IgKFswLTldKykuKiIgIlxcMSIgQVJNQURJTExPX1ZFUlNJT05fTUFKT1IgIiR7X2FybWFkaWxsb19IRUFERVJfQ09OVEVOVFN9IikKLSAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLiojZGVmaW5lIEFSTUFfVkVSU0lPTl9NSU5PUiAoWzAtOV0rKS4qIiAiXFwxIiBBUk1BRElMTE9fVkVSU0lPTl9NSU5PUiAiJHtfYXJtYWRpbGxvX0hFQURFUl9DT05URU5UU30iKQotICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIuKiNkZWZpbmUgQVJNQV9WRVJTSU9OX1BBVENIIChbMC05XSspLioiICJcXDEiIEFSTUFESUxMT19WRVJTSU9OX1BBVENIICIke19hcm1hZGlsbG9fSEVBREVSX0NPTlRFTlRTfSIpCisgICAgZmlsZShTVFJJTkdTICIke0FSTUFESUxMT19JTkNMVURFX0RJUn0vYXJtYWRpbGxvX2JpdHMvYXJtYV92ZXJzaW9uLmhwcCIgX0FSTUFfSEVBREVSX0NPTlRFTlRTIFJFR0VYICIjZGVmaW5lIEFSTUFfVkVSU0lPTl9bQS1aXSsgIikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLiojZGVmaW5lIEFSTUFfVkVSU0lPTl9NQUpPUiAoWzAtOV0rKS4qIiAiXFwxIiBBUk1BRElMTE9fVkVSU0lPTl9NQUpPUiAiJHtfQVJNQV9IRUFERVJfQ09OVEVOVFN9IikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLiojZGVmaW5lIEFSTUFfVkVSU0lPTl9NSU5PUiAoWzAtOV0rKS4qIiAiXFwxIiBBUk1BRElMTE9fVkVSU0lPTl9NSU5PUiAiJHtfQVJNQV9IRUFERVJfQ09OVEVOVFN9IikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLiojZGVmaW5lIEFSTUFfVkVSU0lPTl9QQVRDSCAoWzAtOV0rKS4qIiAiXFwxIiBBUk1BRElMTE9fVkVSU0lPTl9QQVRDSCAiJHtfQVJNQV9IRUFERVJfQ09OVEVOVFN9IikKIAogICAgICMgV0FSTklORzogVGhlIG51bWJlciBvZiBzcGFjZXMgYmVmb3JlIHRoZSB2ZXJzaW9uIG5hbWUgaXMgbm90IG9uZS4KLSAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLiojZGVmaW5lIEFSTUFfVkVSU0lPTl9OQU1FICtcIihbMC05YS16QS1aIF8tXSspXCIuKiIgIlxcMSIgQVJNQURJTExPX1ZFUlNJT05fTkFNRSAiJHtfYXJtYWRpbGxvX0hFQURFUl9DT05URU5UU30iKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIuKiNkZWZpbmUgQVJNQV9WRVJTSU9OX05BTUVcICtcIihbMC05YS16QS1aXCBfLV0rKVwiLioiICJcXDEiIEFSTUFESUxMT19WRVJTSU9OX05BTUUgIiR7X0FSTUFfSEVBREVSX0NPTlRFTlRTfSIpCiAKLSAgICB1bnNldChfYXJtYWRpbGxvX0hFQURFUl9DT05URU5UUykKICAgZW5kaWYoKQogCiAgIHNldChBUk1BRElMTE9fVkVSU0lPTl9TVFJJTkcgIiR7QVJNQURJTExPX1ZFUlNJT05fTUFKT1J9LiR7QVJNQURJTExPX1ZFUlNJT05fTUlOT1J9LiR7QVJNQURJTExPX1ZFUlNJT05fUEFUQ0h9IikKIGVuZGlmICgpCiAKK2lmKEVYSVNUUyAiJHtBUk1BRElMTE9fSU5DTFVERV9ESVJ9L2FybWFkaWxsb19iaXRzL2NvbmZpZy5ocHAiKQorICBmaWxlKFNUUklOR1MgIiR7QVJNQURJTExPX0lOQ0xVREVfRElSfS9hcm1hZGlsbG9fYml0cy9jb25maWcuaHBwIiBfQVJNQV9DT05GSUdfQ09OVEVOVFMgUkVHRVggIl4jZGVmaW5lIEFSTUFfVVNFX1tBLVpdKyIpCisgIHN0cmluZyhSRUdFWCBNQVRDSCAiQVJNQV9VU0VfV1JBUFBFUiIgX0FSTUFfVVNFX1dSQVBQRVIgIiR7X0FSTUFfQ09ORklHX0NPTlRFTlRTfSIpCisgIHN0cmluZyhSRUdFWCBNQVRDSCAiQVJNQV9VU0VfTEFQQUNLIiBfQVJNQV9VU0VfTEFQQUNLICIke19BUk1BX0NPTkZJR19DT05URU5UU30iKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIkFSTUFfVVNFX0JMQVMiIF9BUk1BX1VTRV9CTEFTICIke19BUk1BX0NPTkZJR19DT05URU5UU30iKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIkFSTUFfVVNFX0FSUEFDSyIgX0FSTUFfVVNFX0FSUEFDSyAiJHtfQVJNQV9DT05GSUdfQ09OVEVOVFN9IikKKyAgc3RyaW5nKFJFR0VYIE1BVENIICJBUk1BX1VTRV9IREY1IiBfQVJNQV9VU0VfSERGNSAiJHtfQVJNQV9DT05GSUdfQ09OVEVOVFN9IikKK2VuZGlmKCkKKwogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQorCisjIElmIF9BUk1BX1VTRV9XUkFQUEVSIGlzIHNldCwgdGhlbiB3ZSBqdXN0IGxpbmsgdG8gYXJtYWRpbGxvLCBidXQgaWYgaXQncyBub3QgdGhlbiB3ZSBuZWVkIHN1cHBvcnQgbGlicmFyaWVzIGluc3RlYWQKK3NldChfQVJNQV9TVVBQT1JUX0xJQlJBUklFUykKKworaWYoX0FSTUFfVVNFX1dSQVBQRVIpCisgICMgTGluayB0byB0aGUgYXJtYWRpbGxvIHdyYXBwZXIgbGlicmFyeS4KKyAgZmluZF9saWJyYXJ5KEFSTUFESUxMT19MSUJSQVJZCisgICAgTkFNRVMgYXJtYWRpbGxvCisgICAgTkFNRVNfUEVSX0RJUgorICAgIFBBVEhTCisgICAgICAiJEVOVntQcm9ncmFtRmlsZXN9L0FybWFkaWxsby9saWIiCisgICAgICAiJEVOVntQcm9ncmFtRmlsZXN9L0FybWFkaWxsby9saWI2NCIKKyAgICAgICIkRU5We1Byb2dyYW1GaWxlc30vQXJtYWRpbGxvIgorICAgICkKKyAgbWFya19hc19hZHZhbmNlZChBUk1BRElMTE9fTElCUkFSWSkKKyAgc2V0KF9BUk1BX1JFUVVJUkVEX1ZBUlMgQVJNQURJTExPX0xJQlJBUlkpCitlbHNlKCkKKyAgIyBMaW5rIGRpcmVjdGx5IHRvIGluZGl2aWR1YWwgY29tcG9uZW50cy4KKyAgc2V0KEFSTUFESUxMT19MSUJSQVJZICIiKQorICBmb3JlYWNoKHBrZworICAgICAgTEFQQUNLCisgICAgICBCTEFTCisgICAgICBBUlBBQ0sKKyAgICAgIEhERjUKKyAgICAgICkKKyAgICBpZihfQVJNQV9VU0VfJHtwa2d9KQorICAgICAgZmluZF9wYWNrYWdlKCR7cGtnfSBRVUlFVCkKKyAgICAgIGxpc3QoQVBQRU5EIF9BUk1BX1JFUVVJUkVEX1ZBUlMgIiR7cGtnfV9GT1VORCIpCisgICAgICBpZigke3BrZ31fRk9VTkQpCisgICAgICAgIGxpc3QoQVBQRU5EIF9BUk1BX1NVUFBPUlRfTElCUkFSSUVTICR7JHtwa2d9X0xJQlJBUklFU30pCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKK2VuZGlmKCkKKwogZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKEFybWFkaWxsbwotICBSRVFVSVJFRF9WQVJTIEFSTUFESUxMT19MSUJSQVJZIEFSTUFESUxMT19JTkNMVURFX0RJUgorICBSRVFVSVJFRF9WQVJTIEFSTUFESUxMT19JTkNMVURFX0RJUiAke19BUk1BX1JFUVVJUkVEX1ZBUlN9CiAgIFZFUlNJT05fVkFSIEFSTUFESUxMT19WRVJTSU9OX1NUUklORykKLSMgdmVyc2lvbl92YXIgZmFpbHMgd2l0aCBjbWFrZSA8IDIuOC40LgogCiBpZiAoQVJNQURJTExPX0ZPVU5EKQogICBzZXQoQVJNQURJTExPX0lOQ0xVREVfRElSUyAke0FSTUFESUxMT19JTkNMVURFX0RJUn0pCi0gIHNldChBUk1BRElMTE9fTElCUkFSSUVTICR7QVJNQURJTExPX0xJQlJBUll9KQorICBzZXQoQVJNQURJTExPX0xJQlJBUklFUyAke0FSTUFESUxMT19MSUJSQVJZfSAke19BUk1BX1NVUFBPUlRfTElCUkFSSUVTfSkKIGVuZGlmICgpCiAKLSMgSGlkZSBpbnRlcm5hbCB2YXJpYWJsZXMKLW1hcmtfYXNfYWR2YW5jZWQoCi0gIEFSTUFESUxMT19JTkNMVURFX0RJUgotICBBUk1BRElMTE9fTElCUkFSWSkKKyMgQ2xlYW4gdXAgaW50ZXJuYWwgdmFyaWFibGVzCit1bnNldChfQVJNQV9SRVFVSVJFRF9WQVJTKQordW5zZXQoX0FSTUFfU1VQUE9SVF9MSUJSQVJJRVMpCit1bnNldChfQVJNQV9VU0VfV1JBUFBFUikKK3Vuc2V0KF9BUk1BX1VTRV9MQVBBQ0spCit1bnNldChfQVJNQV9VU0VfQkxBUykKK3Vuc2V0KF9BUk1BX1VTRV9BUlBBQ0spCit1bnNldChfQVJNQV9VU0VfSERGNSkKK3Vuc2V0KF9BUk1BX0NPTkZJR19DT05URU5UUykKK3Vuc2V0KF9BUk1BX0hFQURFUl9DT05URU5UUykKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEJJU09OLmNtYWtlIGIvTW9kdWxlcy9GaW5kQklTT04uY21ha2UKaW5kZXggNmI1ODI4ZS4uMWUxYTVhMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kQklTT04uY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQklTT04uY21ha2UKQEAgLTgyLDcgKzgyLDcgQEAKICAgYWRkX2V4ZWN1dGFibGUoRm9vIG1haW4uY3BwICR7QklTT05fTXlQYXJzZXJfT1VUUFVUU30pCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi1maW5kX3Byb2dyYW0oQklTT05fRVhFQ1VUQUJMRSBOQU1FUyBiaXNvbiB3aW5fYmlzb24gRE9DICJwYXRoIHRvIHRoZSBiaXNvbiBleGVjdXRhYmxlIikKK2ZpbmRfcHJvZ3JhbShCSVNPTl9FWEVDVVRBQkxFIE5BTUVTIGJpc29uIHdpbi1iaXNvbiB3aW5fYmlzb24gRE9DICJwYXRoIHRvIHRoZSBiaXNvbiBleGVjdXRhYmxlIikKIG1hcmtfYXNfYWR2YW5jZWQoQklTT05fRVhFQ1VUQUJMRSkKIAogaWYoQklTT05fRVhFQ1VUQUJMRSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEJMQVMuY21ha2UgYi9Nb2R1bGVzL0ZpbmRCTEFTLmNtYWtlCmluZGV4IGQzYWNhZmMuLjg4YTI1MmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEJMQVMuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQkxBUy5jbWFrZQpAQCAtOCw4ICs4LDkgQEAKIEZpbmQgQmFzaWMgTGluZWFyIEFsZ2VicmEgU3VicHJvZ3JhbXMgKEJMQVMpIGxpYnJhcnkKIAogVGhpcyBtb2R1bGUgZmluZHMgYW4gaW5zdGFsbGVkIEZvcnRyYW4gbGlicmFyeSB0aGF0IGltcGxlbWVudHMgdGhlCi1CTEFTIGxpbmVhci1hbGdlYnJhIGludGVyZmFjZSAoc2VlIGh0dHA6Ly93d3cubmV0bGliLm9yZy9ibGFzLykuICBUaGUKLWxpc3Qgb2YgbGlicmFyaWVzIHNlYXJjaGVkIGZvciBpcyB0YWtlbiBmcm9tIHRoZSBgYGF1dG9jb25mYGAgbWFjcm8gZmlsZSwKK0JMQVMgbGluZWFyLWFsZ2VicmEgaW50ZXJmYWNlIChzZWUgaHR0cDovL3d3dy5uZXRsaWIub3JnL2JsYXMvKS4KKworVGhlIGFwcHJvYWNoIGZvbGxvd3MgdGhhdCB0YWtlbiBmb3IgdGhlIGBgYXV0b2NvbmZgYCBtYWNybyBmaWxlLAogYGBhY3hfYmxhcy5tNGBgIChkaXN0cmlidXRlZCBhdAogaHR0cDovL2FjLWFyY2hpdmUuc291cmNlZm9yZ2UubmV0L2FjLWFyY2hpdmUvYWN4X2JsYXMuaHRtbCkuCiAKQEAgLTI1LDI4ICsyNiwzMyBAQAogICBJZiBzZXQsIGNoZWNrcyBvbmx5IHRoZSBzcGVjaWZpZWQgdmVuZG9yLCBpZiBub3Qgc2V0IGNoZWNrcyBhbGwgdGhlCiAgIHBvc3NpYmlsaXRpZXMuICBMaXN0IG9mIHZlbmRvcnMgdmFsaWQgaW4gdGhpcyBtb2R1bGU6CiAKLSAgKiBHb3RvCi0gICogT3BlbkJMQVMKLSAgKiBGTEFNRQotICAqIEFUTEFTIFBoaVBBQ0sKLSAgKiBDWE1MCi0gICogRFhNTAotICAqIFN1blBlcmYKLSAgKiBTQ1NMCi0gICogU0dJTUFUSAotICAqIElCTUVTU0wKLSAgKiBJbnRlbDEwXzMyIChpbnRlbCBta2wgdjEwIDMyIGJpdCkKLSAgKiBJbnRlbDEwXzY0bHAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgdGhyZWFkZWQgY29kZSwgbHA2NCBtb2RlbCkKLSAgKiBJbnRlbDEwXzY0bHBfc2VxIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHNlcXVlbnRpYWwgY29kZSwgbHA2NCBtb2RlbCkKLSAgKiBJbnRlbDEwXzY0aWxwIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHRocmVhZGVkIGNvZGUsIGlscDY0IG1vZGVsKQotICAqIEludGVsMTBfNjRpbHBfc2VxIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHNlcXVlbnRpYWwgY29kZSwgaWxwNjQgbW9kZWwpCi0gICogSW50ZWwgKG9ic29sZXRlIHZlcnNpb25zIG9mIG1rbCAzMiBhbmQgNjQgYml0KQotICAqIEFDTUwKLSAgKiBBQ01MX01QCi0gICogQUNNTF9HUFUKLSAgKiBBcHBsZQotICAqIE5BUwotICAqIEdlbmVyaWMKKyAgKiBgYEdvdG9gYAorICAqIGBgT3BlbkJMQVNgYAorICAqIGBgRkxBTUVgYAorICAqIGBgQVRMQVMgUGhpUEFDS2BgCisgICogYGBDWE1MYGAKKyAgKiBgYERYTUxgYAorICAqIGBgU3VuUGVyZmBgCisgICogYGBTQ1NMYGAKKyAgKiBgYFNHSU1BVEhgYAorICAqIGBgSUJNRVNTTGBgCisgICogYGBJbnRlbDEwXzMyYGAgKGludGVsIG1rbCB2MTAgMzIgYml0LCB0aHJlYWRlZCBjb2RlKQorICAqIGBgSW50ZWwxMF82NGxwYGAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgdGhyZWFkZWQgY29kZSwgbHA2NCBtb2RlbCkKKyAgKiBgYEludGVsMTBfNjRscF9zZXFgYCAoaW50ZWwgbWtsIHYxMCsgNjQgYml0LCBzZXF1ZW50aWFsIGNvZGUsIGxwNjQgbW9kZWwpCisgICogYGBJbnRlbDEwXzY0aWxwYGAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgdGhyZWFkZWQgY29kZSwgaWxwNjQgbW9kZWwpCisgICogYGBJbnRlbDEwXzY0aWxwX3NlcWBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHNlcXVlbnRpYWwgY29kZSwgaWxwNjQgbW9kZWwpCisgICogYGBJbnRlbDEwXzY0X2R5bmBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHNpbmdsZSBkeW5hbWljIGxpYnJhcnkpCisgICogYGBJbnRlbGBgIChvYnNvbGV0ZSB2ZXJzaW9ucyBvZiBta2wgMzIgYW5kIDY0IGJpdCkKKyAgKiBgYEFDTUxgYAorICAqIGBgQUNNTF9NUGBgCisgICogYGBBQ01MX0dQVWBgCisgICogYGBBcHBsZWBgCisgICogYGBOQVNgYAorICAqIGBgQXJtYGAKKyAgKiBgYEFybV9tcGBgCisgICogYGBBcm1faWxwNjRgYAorICAqIGBgQXJtX2lscDY0X21wYGAKKyAgKiBgYEdlbmVyaWNgYAogCiBgYEJMQV9GOTVgYAogICBpZiBgYE9OYGAgdHJpZXMgdG8gZmluZCB0aGUgQkxBUzk1IGludGVyZmFjZXMKQEAgLTU1LDYgKzYxLDE1IEBACiAgIGlmIHNldCBgYHBrZy1jb25maWdgYCB3aWxsIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhIEJMQVMgbGlicmFyeSBmaXJzdAogICBhbmQgaWYgb25lIGlzIGZvdW5kIHRoYXQgaXMgcHJlZmVycmVkCiAKK0ltcG9ydGVkIHRhcmdldHMKK15eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIDpwcm9wX3RndDpgSU1QT1JURURgIHRhcmdldDoKKworYGBCTEFTOjpCTEFTYGAKKyAgVGhlIGxpYnJhcmllcyB0byB1c2UgZm9yIEJMQVMsIGlmIGZvdW5kLgorCisKIFJlc3VsdCBWYXJpYWJsZXMKIF5eXl5eXl5eXl5eXl5eXl4KIApAQCAtNzUsNyArOTAsOCBAQAogCiAuLiBub3RlOjoKIAotICBDIG9yIENYWCBtdXN0IGJlIGVuYWJsZWQgdG8gdXNlIEludGVsIE1hdGggS2VybmVsIExpYnJhcnkgKE1LTCkKKyAgQywgQ1hYIG9yIEZvcnRyYW4gbXVzdCBiZSBlbmFibGVkIHRvIGRldGVjdCBhIEJMQVMgbGlicmFyeS4KKyAgQyBvciBDWFggbXVzdCBiZSBlbmFibGVkIHRvIHVzZSBJbnRlbCBNYXRoIEtlcm5lbCBMaWJyYXJ5IChNS0wpLgogCiAgIEZvciBleGFtcGxlLCB0byB1c2UgSW50ZWwgTUtMIGxpYnJhcmllcyBhbmQvb3IgSW50ZWwgY29tcGlsZXI6CiAKQEAgLTg3LDIyICsxMDMsMTUgQEAKIEhpbnRzCiBeXl5eXgogCi1TZXQgYGBNS0xST09UYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhbiBNS0wKLWluc3RhbGxhdGlvbi4KK1NldCB0aGUgYGBNS0xST09UYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhbiBNS0wKK2luc3RhbGxhdGlvbiwgb3IgYWRkIHRoZSBkaXJlY3RvcnkgdG8gdGhlIGR5bmFtaWMgbGlicmFyeSBsb2FkZXIgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGZvciB5b3VyIHBsYXRmb3JtIChgYExJQmBgLCBgYERZTERfTElCUkFSWV9QQVRIYGAgb3IKK2BgTERfTElCUkFSWV9QQVRIYGApLgogCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi1pbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ2hlY2tGdW5jdGlvbkV4aXN0cy5jbWFrZSkKLWluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DaGVja0ZvcnRyYW5GdW5jdGlvbkV4aXN0cy5jbWFrZSkKLWluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DTWFrZVB1c2hDaGVja1N0YXRlLmNtYWtlKQotaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQotY21ha2VfcHVzaF9jaGVja19zdGF0ZSgpCi1zZXQoQ01BS0VfUkVRVUlSRURfUVVJRVQgJHtCTEFTX0ZJTkRfUVVJRVRMWX0pCi0KLXNldChfYmxhc19PUklHX0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCi0KICMgQ2hlY2sgdGhlIGxhbmd1YWdlIGJlaW5nIHVzZWQKLWlmKCBOT1QgKENNQUtFX0NfQ09NUElMRVJfTE9BREVEIE9SIENNQUtFX0NYWF9DT01QSUxFUl9MT0FERUQgT1IgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9MT0FERUQpICkKK2lmKE5PVCAoQ01BS0VfQ19DT01QSUxFUl9MT0FERUQgT1IgQ01BS0VfQ1hYX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkpCiAgIGlmKEJMQVNfRklORF9SRVFVSVJFRCkKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGaW5kQkxBUyByZXF1aXJlcyBGb3J0cmFuLCBDLCBvciBDKysgdG8gYmUgZW5hYmxlZC4iKQogICBlbHNlKCkKQEAgLTExMSwxNyArMTIwLDU1IEBACiAgIGVuZGlmKCkKIGVuZGlmKCkKIAorZnVuY3Rpb24oX2FkZF9ibGFzX3RhcmdldCkKKyAgaWYoTk9UIFRBUkdFVCBCTEFTOjpCTEFTKQorICAgIGFkZF9saWJyYXJ5KEJMQVM6OkJMQVMgSU5URVJGQUNFIElNUE9SVEVEKQorICAgIGlmKEJMQVNfTElCUkFSSUVTKQorICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEJMQVM6OkJMQVMgUFJPUEVSVElFUworICAgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIiR7QkxBU19MSUJSQVJJRVN9IgorICAgICAgKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCitpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkKKyAgaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NoZWNrRm9ydHJhbkZ1bmN0aW9uRXhpc3RzLmNtYWtlKQorZWxzZSgpCisgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DaGVja0Z1bmN0aW9uRXhpc3RzLmNtYWtlKQorZW5kaWYoKQoraW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NNYWtlUHVzaENoZWNrU3RhdGUuY21ha2UpCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCitjbWFrZV9wdXNoX2NoZWNrX3N0YXRlKCkKK3NldChDTUFLRV9SRVFVSVJFRF9RVUlFVCAke0JMQVNfRklORF9RVUlFVExZfSkKKwogaWYoQkxBX1BSRUZFUl9QS0dDT05GSUcpCiAgIGZpbmRfcGFja2FnZShQa2dDb25maWcpCiAgIHBrZ19jaGVja19tb2R1bGVzKFBLR0NfQkxBUyBibGFzKQogICBpZihQS0dDX0JMQVNfRk9VTkQpCiAgICAgc2V0KEJMQVNfRk9VTkQgJHtQS0dDX0JMQVNfRk9VTkR9KQogICAgIHNldChCTEFTX0xJQlJBUklFUyAiJHtQS0dDX0JMQVNfTElOS19MSUJSQVJJRVN9IikKKyAgICBfYWRkX2JsYXNfdGFyZ2V0KCkKICAgICByZXR1cm4oKQogICBlbmRpZigpCiBlbmRpZigpCiAKLW1hY3JvKENoZWNrX0ZvcnRyYW5fTGlicmFyaWVzIExJQlJBUklFUyBfcHJlZml4IF9uYW1lIF9mbGFncyBfbGlzdCBfdGhyZWFkKQorc2V0KF9ibGFzX09SSUdfQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKK2lmKEJMQV9TVEFUSUMpCisgIGlmKFdJTjMyKQorICAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgLmxpYiAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCisgIGVsc2UoKQorICAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgLmEgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQorICBlbmRpZigpCitlbHNlKCkKKyAgaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkxpbnV4IikKKyAgICAjIGZvciB1YnVudHUncyBsaWJibGFzM2dmIGFuZCBsaWJsYXBhY2szZ2YgcGFja2FnZXMKKyAgICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSAuc28uM2dmKQorICBlbmRpZigpCitlbmRpZigpCisKKyMgVE9ETzogbW92ZSB0aGlzIHN0dWZmIHRvIGEgc2VwYXJhdGUgbW9kdWxlCisKK21hY3JvKENIRUNLX0JMQVNfTElCUkFSSUVTIExJQlJBUklFUyBfcHJlZml4IF9uYW1lIF9mbGFncyBfbGlzdCBfdGhyZWFkbGlicyBfYWRkbGliZGlyIF9zdWJkaXJzKQogICAjIFRoaXMgbWFjcm8gY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBjb21iaW5hdGlvbiBvZiBmb3J0cmFuIGxpYnJhcmllcwogICAjIGdpdmVuIGJ5IF9saXN0LiAgSWYgdGhlIGNvbWJpbmF0aW9uIGlzIGZvdW5kLCB0aGlzIG1hY3JvIGNoZWNrcyAodXNpbmcgdGhlCiAgICMgQ2hlY2tfRm9ydHJhbl9GdW5jdGlvbl9FeGlzdHMgbWFjcm8pIHdoZXRoZXIgY2FuIGxpbmsgYWdhaW5zdCB0aGF0IGxpYnJhcnkKQEAgLTEzMiw1OSArMTc5LDUyIEBACiAKICAgIyBOLkIuIF9wcmVmaXggaXMgdGhlIHByZWZpeCBhcHBsaWVkIHRvIHRoZSBuYW1lcyBvZiBhbGwgY2FjaGVkIHZhcmlhYmxlcyB0aGF0CiAgICMgYXJlIGdlbmVyYXRlZCBpbnRlcm5hbGx5IGFuZCBtYXJrZWQgYWR2YW5jZWQgYnkgdGhpcyBtYWNyby4KLQotICBzZXQoX2xpYmRpciAke0FSR059KQorICAjIF9hZGRsaWJkaXIgaXMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgc2VhcmNoIHBhdGhzLiBfc3ViZGlycyBpcyBhIGxpc3Qgb2YgcGF0aAorICAjIHN1ZmZpeGVzIHRvIGJlIHVzZWQgYnkgZmluZF9saWJyYXJ5KCkuCiAKICAgc2V0KF9saWJyYXJpZXNfd29yayBUUlVFKQogICBzZXQoJHtMSUJSQVJJRVN9KQogICBzZXQoX2NvbWJpbmVkX25hbWUpCi0gIGlmIChOT1QgX2xpYmRpcikKLSAgICBpZiAoV0lOMzIpCi0gICAgICBzZXQoX2xpYmRpciBFTlYgTElCKQotICAgIGVsc2VpZiAoQVBQTEUpCi0gICAgICBzZXQoX2xpYmRpciBFTlYgRFlMRF9MSUJSQVJZX1BBVEgpCi0gICAgZWxzZSAoKQotICAgICAgc2V0KF9saWJkaXIgRU5WIExEX0xJQlJBUllfUEFUSCkKLSAgICBlbmRpZiAoKQotICBlbmRpZiAoKQogCi0gIGxpc3QoQVBQRU5EIF9saWJkaXIgIiR7Q01BS0VfQ19JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSIpCisgIHNldChfZXh0YWRkbGliZGlyICIke19hZGRsaWJkaXJ9IikKKyAgaWYoV0lOMzIpCisgICAgbGlzdChBUFBFTkQgX2V4dGFkZGxpYmRpciBFTlYgTElCKQorICBlbHNlaWYoQVBQTEUpCisgICAgbGlzdChBUFBFTkQgX2V4dGFkZGxpYmRpciBFTlYgRFlMRF9MSUJSQVJZX1BBVEgpCisgIGVsc2UoKQorICAgIGxpc3QoQVBQRU5EIF9leHRhZGRsaWJkaXIgRU5WIExEX0xJQlJBUllfUEFUSCkKKyAgZW5kaWYoKQorICBsaXN0KEFQUEVORCBfZXh0YWRkbGliZGlyICIke0NNQUtFX0NfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30iKQogCiAgIGZvcmVhY2goX2xpYnJhcnkgJHtfbGlzdH0pCi0gICAgc2V0KF9jb21iaW5lZF9uYW1lICR7X2NvbWJpbmVkX25hbWV9XyR7X2xpYnJhcnl9KQotICAgIGlmKE5PVCAiJHtfdGhyZWFkfSIgU1RSRVFVQUwgIiIpCi0gICAgICBzZXQoX2NvbWJpbmVkX25hbWUgJHtfY29tYmluZWRfbmFtZX1fdGhyZWFkKQotICAgIGVuZGlmKCkKLSAgICBpZihfbGlicmFyaWVzX3dvcmspCi0gICAgICBpZiAoQkxBX1NUQVRJQykKLSAgICAgICAgaWYgKFdJTjMyKQotICAgICAgICAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgLmxpYiAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCi0gICAgICAgIGVuZGlmICgpCi0gICAgICAgIGlmIChBUFBMRSkKLSAgICAgICAgICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTIC5saWIgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQotICAgICAgICBlbHNlICgpCi0gICAgICAgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAuYSAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCi0gICAgICAgIGVuZGlmICgpCi0gICAgICBlbHNlICgpCi0gICAgICAgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQotICAgICAgICAgICMgZm9yIHVidW50dSdzIGxpYmJsYXMzZ2YgYW5kIGxpYmxhcGFjazNnZiBwYWNrYWdlcwotICAgICAgICAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9IC5zby4zZ2YpCi0gICAgICAgIGVuZGlmICgpCi0gICAgICBlbmRpZiAoKQotICAgICAgZmluZF9saWJyYXJ5KCR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWQotICAgICAgICBOQU1FUyAke19saWJyYXJ5fQotICAgICAgICBQQVRIUyAke19saWJkaXJ9CisgICAgaWYoX2xpYnJhcnkgTUFUQ0hFUyAiXi1XbCwtLShzdGFydHxlbmQpLWdyb3VwJCIpCisgICAgICAjIFJlc3BlY3QgbGlua2VyIGZsYWdzIGxpa2UgLS1zdGFydC9lbmQtZ3JvdXAgKHJlcXVpcmVkIGJ5IE1LTCkKKyAgICAgIHNldCgke0xJQlJBUklFU30gJHske0xJQlJBUklFU319ICIke19saWJyYXJ5fSIpCisgICAgZWxzZSgpCisgICAgICBzZXQoX2NvbWJpbmVkX25hbWUgJHtfY29tYmluZWRfbmFtZX1fJHtfbGlicmFyeX0pCisgICAgICBpZihOT1QgIiR7X3RocmVhZGxpYnN9IiBTVFJFUVVBTCAiIikKKyAgICAgICAgc2V0KF9jb21iaW5lZF9uYW1lICR7X2NvbWJpbmVkX25hbWV9X3RocmVhZGxpYnMpCisgICAgICBlbmRpZigpCisgICAgICBpZihfbGlicmFyaWVzX3dvcmspCisgICAgICAgIGZpbmRfbGlicmFyeSgke19wcmVmaXh9XyR7X2xpYnJhcnl9X0xJQlJBUlkKKyAgICAgICAgICBOQU1FUyAke19saWJyYXJ5fQorICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICBQQVRIUyAke19leHRhZGRsaWJkaXJ9CisgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke19zdWJkaXJzfQogICAgICAgICApCi0gICAgICBtYXJrX2FzX2FkdmFuY2VkKCR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWSkKLSAgICAgIHNldCgke0xJQlJBUklFU30gJHske0xJQlJBUklFU319ICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSkKLSAgICAgIHNldChfbGlicmFyaWVzX3dvcmsgJHske19wcmVmaXh9XyR7X2xpYnJhcnl9X0xJQlJBUll9KQorICAgICAgICAjbWVzc2FnZSgiREVCVUc6IGZpbmRfbGlicmFyeSgke19saWJyYXJ5fSkgZ290ICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSIpCisgICAgICAgIG1hcmtfYXNfYWR2YW5jZWQoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZKQorICAgICAgICBzZXQoJHtMSUJSQVJJRVN9ICR7JHtMSUJSQVJJRVN9fSAkeyR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWX0pCisgICAgICAgIHNldChfbGlicmFyaWVzX3dvcmsgJHske19wcmVmaXh9XyR7X2xpYnJhcnl9X0xJQlJBUll9KQorICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCisKICAgaWYoX2xpYnJhcmllc193b3JrKQogICAgICMgVGVzdCB0aGlzIGNvbWJpbmF0aW9uIG9mIGxpYnJhcmllcy4KLSAgICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICR7X2ZsYWdzfSAkeyR7TElCUkFSSUVTfX0gJHtfdGhyZWFkfSkKLSAgICAjICBtZXNzYWdlKCJERUJVRzogQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTID0gJHtDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVN9IikKLSAgICBpZiAoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9MT0FERUQpCisgICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke19mbGFnc30gJHske0xJQlJBUklFU319ICR7X3RocmVhZGxpYnN9KQorICAgICNtZXNzYWdlKCJERUJVRzogQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTID0gJHtDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVN9IikKKyAgICBpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkKICAgICAgIGNoZWNrX2ZvcnRyYW5fZnVuY3Rpb25fZXhpc3RzKCIke19uYW1lfSIgJHtfcHJlZml4fSR7X2NvbWJpbmVkX25hbWV9X1dPUktTKQogICAgIGVsc2UoKQogICAgICAgY2hlY2tfZnVuY3Rpb25fZXhpc3RzKCIke19uYW1lfV8iICR7X3ByZWZpeH0ke19jb21iaW5lZF9uYW1lfV9XT1JLUykKQEAgLTE5MiwxMSArMjMyLDEyIEBACiAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKICAgICBzZXQoX2xpYnJhcmllc193b3JrICR7JHtfcHJlZml4fSR7X2NvbWJpbmVkX25hbWV9X1dPUktTfSkKICAgZW5kaWYoKQorCiAgIGlmKF9saWJyYXJpZXNfd29yaykKICAgICBpZigiJHtfbGlzdH0iIFNUUkVRVUFMICIiKQogICAgICAgc2V0KCR7TElCUkFSSUVTfSAiJHtMSUJSQVJJRVN9LVBMQUNFSE9MREVSLUZPUi1FTVBUWS1MSUJSQVJJRVMiKQogICAgIGVsc2UoKQotICAgICAgc2V0KCR7TElCUkFSSUVTfSAkeyR7TElCUkFSSUVTfX0gJHtfdGhyZWFkfSkgICMgZm9yIHN0YXRpYyBsaW5rCisgICAgICBzZXQoJHtMSUJSQVJJRVN9ICR7JHtMSUJSQVJJRVN9fSAke190aHJlYWRsaWJzfSkKICAgICBlbmRpZigpCiAgIGVsc2UoKQogICAgIHNldCgke0xJQlJBUklFU30gRkFMU0UpCkBAIC0yMDcsOTEgKzI0OCw5NiBAQAogc2V0KEJMQVNfTElOS0VSX0ZMQUdTKQogc2V0KEJMQVNfTElCUkFSSUVTKQogc2V0KEJMQVM5NV9MSUJSQVJJRVMpCi1pZiAoTk9UICRFTlZ7QkxBX1ZFTkRPUn0gU1RSRVFVQUwgIiIpCitpZihOT1QgJEVOVntCTEFfVkVORE9SfSBTVFJFUVVBTCAiIikKICAgc2V0KEJMQV9WRU5ET1IgJEVOVntCTEFfVkVORE9SfSkKLWVsc2UgKCkKK2Vsc2UoKQogICBpZihOT1QgQkxBX1ZFTkRPUikKICAgICBzZXQoQkxBX1ZFTkRPUiAiQWxsIikKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisjIEltcGxpY2l0bHkgbGlua2VkIEJMQVMgbGlicmFyaWVzPworaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQotICAgICMgSW1wbGljaXRseSBsaW5rZWQgQkxBUyBsaWJyYXJpZXMKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICIiCiAgICAgICAiIgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICApCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKLSNCTEFTIGluIGludGVsIG1rbCAxMCsgbGlicmFyeT8gKGVtNjR0IDY0Yml0KQotaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiSW50ZWwiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCi0gIGlmIChOT1QgQkxBU19MSUJSQVJJRVMpCi0KLSAgICAjIFN5c3RlbS1zcGVjaWZpYyBzZXR0aW5ncwotICAgIGlmIChXSU4zMikKLSAgICAgIGlmIChCTEFfU1RBVElDKQotICAgICAgICBzZXQoQkxBU19ta2xfRExMX1NVRkZJWCAiIikKKyMgQkxBUyBpbiB0aGUgSW50ZWwgTUtMIDEwKyBsaWJyYXJ5PworaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJJbnRlbCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQorICAgIGlmKENNQUtFX0NfQ09NUElMRVJfTE9BREVEIE9SIENNQUtFX0NYWF9DT01QSUxFUl9MT0FERUQpCisgICAgICAjIFN5c3RlbS1zcGVjaWZpYyBzZXR0aW5ncworICAgICAgaWYoV0lOMzIpCisgICAgICAgIGlmKEJMQV9TVEFUSUMpCisgICAgICAgICAgc2V0KEJMQVNfbWtsX0RMTF9TVUZGSVggIiIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHNldChCTEFTX21rbF9ETExfU1VGRklYICJfZGxsIikKKyAgICAgICAgZW5kaWYoKQogICAgICAgZWxzZSgpCi0gICAgICAgIHNldChCTEFTX21rbF9ETExfU1VGRklYICJfZGxsIikKKyAgICAgICAgaWYoQkxBX1NUQVRJQykKKyAgICAgICAgICBzZXQoQkxBU19ta2xfU1RBUlRfR1JPVVAgIi1XbCwtLXN0YXJ0LWdyb3VwIikKKyAgICAgICAgICBzZXQoQkxBU19ta2xfRU5EX0dST1VQICItV2wsLS1lbmQtZ3JvdXAiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQoQkxBU19ta2xfU1RBUlRfR1JPVVAgIiIpCisgICAgICAgICAgc2V0KEJMQVNfbWtsX0VORF9HUk9VUCAiIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICAjIFN3aXRjaCB0byBHTlUgRm9ydHJhbiBzdXBwb3J0IGxheWVyIGlmIG5lZWRlZCAoYnV0IG5vdCBvbiBBcHBsZSwgd2hlcmUgTUtMIGRvZXMgbm90IHByb3ZpZGUgaXQpCisgICAgICAgIGlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEIEFORCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiIEFORCBOT1QgQVBQTEUpCisgICAgICAgICAgICBzZXQoQkxBU19ta2xfSU5URkFDRSAiZ2YiKQorICAgICAgICAgICAgc2V0KEJMQVNfbWtsX1RIUkVBRElORyAiZ251IikKKyAgICAgICAgICAgIHNldChCTEFTX21rbF9PTVAgImdvbXAiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgIHNldChCTEFTX21rbF9JTlRGQUNFICJpbnRlbCIpCisgICAgICAgICAgICBzZXQoQkxBU19ta2xfVEhSRUFESU5HICJpbnRlbCIpCisgICAgICAgICAgICBzZXQoQkxBU19ta2xfT01QICJpb21wNSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgc2V0KEJMQVNfbWtsX0xNICItbG0iKQorICAgICAgICBzZXQoQkxBU19ta2xfTERMICItbGRsIikKICAgICAgIGVuZGlmKCkKLSAgICBlbHNlKCkKLSAgICAgICMgU3dpdGNoIHRvIEdOVSBGb3J0cmFuIHN1cHBvcnQgbGF5ZXIgaWYgbmVlZGVkIChidXQgbm90IG9uIEFwcGxlLCB3aGVyZSBNS0wgZG9lcyBub3QgcHJvdmlkZSBpdCkKLSAgICAgIGlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEIEFORCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiIEFORCBOT1QgQVBQTEUpCi0gICAgICAgICAgc2V0KEJMQVNfbWtsX0lOVEZBQ0UgImdmIikKLSAgICAgICAgICBzZXQoQkxBU19ta2xfVEhSRUFESU5HICJnbnUiKQotICAgICAgICAgIHNldChCTEFTX21rbF9PTVAgImdvbXAiKQotICAgICAgZWxzZSgpCi0gICAgICAgICAgc2V0KEJMQVNfbWtsX0lOVEZBQ0UgImludGVsIikKLSAgICAgICAgICBzZXQoQkxBU19ta2xfVEhSRUFESU5HICJpbnRlbCIpCi0gICAgICAgICAgc2V0KEJMQVNfbWtsX09NUCAiaW9tcDUiKQotICAgICAgZW5kaWYoKQotICAgICAgc2V0KEJMQVNfbWtsX0xNICItbG0iKQotICAgICAgc2V0KEJMQVNfbWtsX0xETCAiLWxkbCIpCi0gICAgZW5kaWYoKQogCi0gICAgaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXzY0aWxwIikKLSAgICAgIHNldChCTEFTX21rbF9JTFBfTU9ERSAiaWxwNjQiKQotICAgIGVsc2UgKCkKLSAgICAgIHNldChCTEFTX21rbF9JTFBfTU9ERSAibHA2NCIpCi0gICAgZW5kaWYgKCkKLQotICAgIGlmIChDTUFLRV9DX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9DWFhfQ09NUElMRVJfTE9BREVEKQogICAgICAgaWYoQkxBU19GSU5EX1FVSUVUTFkgT1IgTk9UIEJMQVNfRklORF9SRVFVSVJFRCkKICAgICAgICAgZmluZF9wYWNrYWdlKFRocmVhZHMpCiAgICAgICBlbHNlKCkKICAgICAgICAgZmluZF9wYWNrYWdlKFRocmVhZHMgUkVRVUlSRUQpCiAgICAgICBlbmRpZigpCiAKKyAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXzY0aWxwIikKKyAgICAgICAgc2V0KEJMQVNfbWtsX0lMUF9NT0RFICJpbHA2NCIpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KEJMQVNfbWtsX0lMUF9NT0RFICJscDY0IikKKyAgICAgIGVuZGlmKCkKKwogICAgICAgc2V0KEJMQVNfU0VBUkNIX0xJQlMgIiIpCiAKICAgICAgIGlmKEJMQV9GOTUpCi0gICAgICAgIHNldChCTEFTX21rbF9TRUFSQ0hfU1lNQk9MIHNnZW1tX2Y5NSkKKyAgICAgICAgc2V0KEJMQVNfbWtsX1NFQVJDSF9TWU1CT0wgInNnZW1tX2Y5NSIpCiAgICAgICAgIHNldChfTElCUkFSSUVTIEJMQVM5NV9MSUJSQVJJRVMpCi0gICAgICAgIGlmIChXSU4zMikKKyAgICAgICAgaWYoV0lOMzIpCiAgICAgICAgICAgIyBGaW5kIHRoZSBtYWluIGZpbGUgKDMyLWJpdCBvciA2NC1iaXQpCiAgICAgICAgICAgc2V0KEJMQVNfU0VBUkNIX0xJQlNfV0lOX01BSU4gIiIpCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgICAgICAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiSW50ZWwxMF8zMiIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX01BSU4KICAgICAgICAgICAgICAgIm1rbF9ibGFzOTUke0JMQVNfbWtsX0RMTF9TVUZGSVh9IG1rbF9pbnRlbF9jJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgZW5kaWYoKQotICAgICAgICAgIGlmIChCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKworICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCU19XSU5fTUFJTgogICAgICAgICAgICAgICAibWtsX2JsYXM5NV8ke0JMQVNfbWtsX0lMUF9NT0RFfSR7QkxBU19ta2xfRExMX1NVRkZJWH0gbWtsX2ludGVsXyR7QkxBU19ta2xfSUxQX01PREV9JHtCTEFTX21rbF9ETExfU1VGRklYfSIpCi0gICAgICAgICAgZW5kaWYgKCkKKyAgICAgICAgICBlbmRpZigpCiAKICAgICAgICAgICAjIEFkZCB0aHJlYWRpbmcvc2VxdWVudGlhbCBsaWJzCiAgICAgICAgICAgc2V0KEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRCAiIikKLSAgICAgICAgICBpZiAoQkxBX1ZFTkRPUiBNQVRDSEVTICJfc2VxJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKLSAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRAotICAgICAgICAgICAgICAibWtsX3NlcXVlbnRpYWwke0JMQVNfbWtsX0RMTF9TVUZGSVh9IikKLSAgICAgICAgICBlbmRpZigpCi0gICAgICAgICAgaWYgKE5PVCBCTEFfVkVORE9SIE1BVENIRVMgIl9zZXEkIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgICAgICAgICAgICMgb2xkIHZlcnNpb24KICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRAogICAgICAgICAgICAgICAibGliZ3VpZGU0MCBta2xfaW50ZWxfdGhyZWFkJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCkBAIC0yOTksNTYgKzM0NSw2NCBAQAogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCU19XSU5fVEhSRUFECiAgICAgICAgICAgICAgICJsaWJpb21wNW1kIG1rbF9pbnRlbF90aHJlYWQke0JMQVNfbWtsX0RMTF9TVUZGSVh9IikKICAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJeSW50ZWwxMF82NGk/bHBfc2VxJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRAorICAgICAgICAgICAgICAibWtsX3NlcXVlbnRpYWwke0JMQVNfbWtsX0RMTF9TVUZGSVh9IikKKyAgICAgICAgICBlbmRpZigpCiAKICAgICAgICAgICAjIENhcnRlc2lhbiBwcm9kdWN0IG9mIHRoZSBhYm92ZQotICAgICAgICAgIGZvcmVhY2ggKE1BSU4gJHtCTEFTX1NFQVJDSF9MSUJTX1dJTl9NQUlOfSkKLSAgICAgICAgICAgIGZvcmVhY2ggKFRIUkVBRCAke0JMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRH0pCisgICAgICAgICAgZm9yZWFjaChNQUlOICR7QkxBU19TRUFSQ0hfTElCU19XSU5fTUFJTn0pCisgICAgICAgICAgICBmb3JlYWNoKFRIUkVBRCAke0JMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRH0pCiAgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlMKICAgICAgICAgICAgICAgICAiJHtNQUlOfSAke1RIUkVBRH0gbWtsX2NvcmUke0JMQVNfbWtsX0RMTF9TVUZGSVh9IikKICAgICAgICAgICAgIGVuZGZvcmVhY2goKQogICAgICAgICAgIGVuZGZvcmVhY2goKQotICAgICAgICBlbHNlICgpCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICAjIG9sZCB2ZXJzaW9uCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCiAgICAgICAgICAgICAgICJta2xfYmxhczk1IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlIGd1aWRlIikKIAogICAgICAgICAgICAgIyBta2wgPj0gMTAuMwogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwotICAgICAgICAgICAgICAibWtsX2JsYXM5NSBta2xfJHtCTEFTX21rbF9JTlRGQUNFfSBta2xfJHtCTEFTX21rbF9USFJFQURJTkd9X3RocmVhZCBta2xfY29yZSAke0JMQVNfbWtsX09NUH0iKQotICAgICAgICAgIGVuZGlmICgpCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICAgICAgIiR7QkxBU19ta2xfU1RBUlRfR1JPVVB9IG1rbF9ibGFzOTUgbWtsXyR7QkxBU19ta2xfSU5URkFDRX0gbWtsXyR7QkxBU19ta2xfVEhSRUFESU5HfV90aHJlYWQgbWtsX2NvcmUgJHtCTEFTX21rbF9FTkRfR1JPVVB9ICR7QkxBU19ta2xfT01QfSIpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgICAgICAgICAgICMgb2xkIHZlcnNpb24KICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlMKICAgICAgICAgICAgICAgIm1rbF9ibGFzOTUgbWtsXyR7QkxBU19ta2xfSU5URkFDRX1fJHtCTEFTX21rbF9JTFBfTU9ERX0gbWtsXyR7QkxBU19ta2xfVEhSRUFESU5HfV90aHJlYWQgbWtsX2NvcmUgZ3VpZGUiKQogCiAgICAgICAgICAgICAjIG1rbCA+PSAxMC4zCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCi0gICAgICAgICAgICAgICJta2xfYmxhczk1XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlICR7QkxBU19ta2xfT01QfSIpCi0gICAgICAgICAgZW5kaWYgKCkKLSAgICAgICAgICBpZiAoQkxBX1ZFTkRPUiBNQVRDSEVTICJeSW50ZWwxMF82NGk/bHBfc2VxJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICAgICAgIiR7QkxBU19ta2xfU1RBUlRfR1JPVVB9IG1rbF9ibGFzOTVfJHtCTEFTX21rbF9JTFBfTU9ERX0gbWtsXyR7QkxBU19ta2xfSU5URkFDRX1fJHtCTEFTX21rbF9JTFBfTU9ERX0gbWtsXyR7QkxBU19ta2xfVEhSRUFESU5HfV90aHJlYWQgbWtsX2NvcmUgJHtCTEFTX21rbF9FTkRfR1JPVVB9ICR7QkxBU19ta2xfT01QfSIpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwX3NlcSQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCi0gICAgICAgICAgICAgICJta2xfYmxhczk1XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF9zZXF1ZW50aWFsIG1rbF9jb3JlIikKLSAgICAgICAgICBlbmRpZiAoKQotICAgICAgICBlbmRpZiAoKQotICAgICAgZWxzZSAoKQorICAgICAgICAgICAgICAiJHtCTEFTX21rbF9TVEFSVF9HUk9VUH0gbWtsX2JsYXM5NV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfJHtCTEFTX21rbF9JTlRGQUNFfV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfc2VxdWVudGlhbCBta2xfY29yZSAke0JMQVNfbWtsX0VORF9HUk9VUH0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgZWxzZSgpCiAgICAgICAgIHNldChCTEFTX21rbF9TRUFSQ0hfU1lNQk9MIHNnZW1tKQogICAgICAgICBzZXQoX0xJQlJBUklFUyBCTEFTX0xJQlJBUklFUykKLSAgICAgICAgaWYgKFdJTjMyKQorICAgICAgICBpZihXSU4zMikKICAgICAgICAgICAjIEZpbmQgdGhlIG1haW4gZmlsZSAoMzItYml0IG9yIDY0LWJpdCkKICAgICAgICAgICBzZXQoQkxBU19TRUFSQ0hfTElCU19XSU5fTUFJTiAiIikKLSAgICAgICAgICBpZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiSW50ZWwxMF8zMiIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJJbnRlbDEwXzMyIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCU19XSU5fTUFJTgogICAgICAgICAgICAgICAibWtsX2ludGVsX2Mke0JMQVNfbWtsX0RMTF9TVUZGSVh9IikKICAgICAgICAgICBlbmRpZigpCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCU19XSU5fTUFJTgogICAgICAgICAgICAgICAibWtsX2ludGVsXyR7QkxBU19ta2xfSUxQX01PREV9JHtCTEFTX21rbF9ETExfU1VGRklYfSIpCi0gICAgICAgICAgZW5kaWYgKCkKKyAgICAgICAgICBlbmRpZigpCiAKICAgICAgICAgICAjIEFkZCB0aHJlYWRpbmcvc2VxdWVudGlhbCBsaWJzCiAgICAgICAgICAgc2V0KEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRCAiIikKLSAgICAgICAgICBpZiAoTk9UIEJMQV9WRU5ET1IgTUFUQ0hFUyAiX3NlcSQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgICAgICAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiSW50ZWwxMF8zMiIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRAorICAgICAgICAgICAgICAibGliaW9tcDVtZCBta2xfaW50ZWxfdGhyZWFkJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgICAgICAgICAgICMgb2xkIHZlcnNpb24KICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRAogICAgICAgICAgICAgICAibGliZ3VpZGU0MCBta2xfaW50ZWxfdGhyZWFkJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCkBAIC0zNTYsOTYgKzQxMCwxMjAgQEAKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlNfV0lOX1RIUkVBRAogICAgICAgICAgICAgICAibGliaW9tcDVtZCBta2xfaW50ZWxfdGhyZWFkJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgZW5kaWYoKQotICAgICAgICAgIGlmIChCTEFfVkVORE9SIE1BVENIRVMgIl9zZXEkIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwX3NlcSQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUQKICAgICAgICAgICAgICAgIm1rbF9zZXF1ZW50aWFsJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgICAgIyBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0aGUgYWJvdmUKLSAgICAgICAgICBmb3JlYWNoIChNQUlOICR7QkxBU19TRUFSQ0hfTElCU19XSU5fTUFJTn0pCi0gICAgICAgICAgICBmb3JlYWNoIChUSFJFQUQgJHtCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUR9KQorICAgICAgICAgIGZvcmVhY2goTUFJTiAke0JMQVNfU0VBUkNIX0xJQlNfV0lOX01BSU59KQorICAgICAgICAgICAgZm9yZWFjaChUSFJFQUQgJHtCTEFTX1NFQVJDSF9MSUJTX1dJTl9USFJFQUR9KQogICAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCiAgICAgICAgICAgICAgICAgIiR7TUFJTn0gJHtUSFJFQUR9IG1rbF9jb3JlJHtCTEFTX21rbF9ETExfU1VGRklYfSIpCiAgICAgICAgICAgICBlbmRmb3JlYWNoKCkKICAgICAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgICAgZWxzZSAoKQotICAgICAgICAgIGlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJJbnRlbDEwXzMyIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJJbnRlbDEwXzMyIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgIyBvbGQgdmVyc2lvbgogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwogICAgICAgICAgICAgICAibWtsXyR7QkxBU19ta2xfSU5URkFDRX0gbWtsXyR7QkxBU19ta2xfVEhSRUFESU5HfV90aHJlYWQgbWtsX2NvcmUgZ3VpZGUiKQogCiAgICAgICAgICAgICAjIG1rbCA+PSAxMC4zCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCi0gICAgICAgICAgICAgICJta2xfJHtCTEFTX21rbF9JTlRGQUNFfSBta2xfJHtCTEFTX21rbF9USFJFQURJTkd9X3RocmVhZCBta2xfY29yZSAke0JMQVNfbWtsX09NUH0iKQotICAgICAgICAgIGVuZGlmICgpCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICAgICAgIiR7QkxBU19ta2xfU1RBUlRfR1JPVVB9IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlICR7QkxBU19ta2xfRU5EX0dST1VQfSAke0JMQVNfbWtsX09NUH0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scCQiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgICAgICAgICAgICAjIG9sZCB2ZXJzaW9uCiAgICAgICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCiAgICAgICAgICAgICAgICJta2xfJHtCTEFTX21rbF9JTlRGQUNFfV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfJHtCTEFTX21rbF9USFJFQURJTkd9X3RocmVhZCBta2xfY29yZSBndWlkZSIpCiAKICAgICAgICAgICAgICMgbWtsID49IDEwLjMKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlMKLSAgICAgICAgICAgICAgIm1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlICR7QkxBU19ta2xfT01QfSIpCi0gICAgICAgICAgZW5kaWYgKCkKLSAgICAgICAgICBpZiAoQkxBX1ZFTkRPUiBNQVRDSEVTICJeSW50ZWwxMF82NGk/bHBfc2VxJCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICAgICAgICAgICAgIiR7QkxBU19ta2xfU1RBUlRfR1JPVVB9IG1rbF8ke0JMQVNfbWtsX0lOVEZBQ0V9XyR7QkxBU19ta2xfSUxQX01PREV9IG1rbF8ke0JMQVNfbWtsX1RIUkVBRElOR31fdGhyZWFkIG1rbF9jb3JlICR7QkxBU19ta2xfRU5EX0dST1VQfSAke0JMQVNfbWtsX09NUH0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl5JbnRlbDEwXzY0aT9scF9zZXEkIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwotICAgICAgICAgICAgICAibWtsXyR7QkxBU19ta2xfSU5URkFDRX1fJHtCTEFTX21rbF9JTFBfTU9ERX0gbWtsX3NlcXVlbnRpYWwgbWtsX2NvcmUiKQotICAgICAgICAgIGVuZGlmICgpCisgICAgICAgICAgICAgICIke0JMQVNfbWtsX1NUQVJUX0dST1VQfSBta2xfJHtCTEFTX21rbF9JTlRGQUNFfV8ke0JMQVNfbWtsX0lMUF9NT0RFfSBta2xfc2VxdWVudGlhbCBta2xfY29yZSAke0JMQVNfbWtsX0VORF9HUk9VUH0iKQorICAgICAgICAgIGVuZGlmKCkKIAotICAgICAgICAgICNvbGRlciB2ZXNpb25zIG9mIGludGVsIG1rbCBsaWJzCi0gICAgICAgICAgaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAgICNvbGRlciB2ZXJzaW9ucyBvZiBpbnRlbCBta2wgbGlicworICAgICAgICAgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQkxBU19TRUFSQ0hfTElCUwogICAgICAgICAgICAgICAibWtsIikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlMKICAgICAgICAgICAgICAgIm1rbF9pYTMyIikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEJMQVNfU0VBUkNIX0xJQlMKICAgICAgICAgICAgICAgIm1rbF9lbTY0dCIpCi0gICAgICAgICAgZW5kaWYgKCkKLSAgICAgICAgZW5kaWYgKCkKLSAgICAgIGVuZGlmICgpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCiAKLSAgICAgIGlmIChERUZJTkVEIEVOVntNS0xST09UfSkKLSAgICAgICAgaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiKQotICAgICAgICAgIHNldChfQkxBU19NS0xST09UX0xJQl9ESVIgIiRFTlZ7TUtMUk9PVH0vbGliL2lhMzIiKQotICAgICAgICBlbHNlaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXkludGVsMTBfNjRpP2xwJCIgT1IgQkxBX1ZFTkRPUiBNQVRDSEVTICJeSW50ZWwxMF82NGk/bHBfc2VxJCIpCi0gICAgICAgICAgc2V0KF9CTEFTX01LTFJPT1RfTElCX0RJUiAiJEVOVntNS0xST09UfS9saWIvaW50ZWw2NCIpCi0gICAgICAgIGVuZGlmICgpCi0gICAgICBlbmRpZiAoKQotICAgICAgaWYgKF9CTEFTX01LTFJPT1RfTElCX0RJUikKLSAgICAgICAgaWYgKFdJTjMyKQotICAgICAgICAgIHN0cmluZyhBUFBFTkQgX0JMQVNfTUtMUk9PVF9MSUJfRElSICJfd2luIikKLSAgICAgICAgZWxzZWlmIChBUFBMRSkKLSAgICAgICAgICBzdHJpbmcoQVBQRU5EIF9CTEFTX01LTFJPT1RfTElCX0RJUiAiX21hYyIpCi0gICAgICAgIGVsc2UgKCkKLSAgICAgICAgICBzdHJpbmcoQVBQRU5EIF9CTEFTX01LTFJPT1RfTElCX0RJUiAiX2xpbiIpCi0gICAgICAgIGVuZGlmICgpCi0gICAgICBlbmRpZiAoKQorICAgICAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJeSW50ZWwxMF82NF9keW4kIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgICAgICAjIG1rbCA+PSAxMC4zIHdpdGggc2luZ2xlIGR5bmFtaWMgbGlicmFyeQorICAgICAgICBsaXN0KEFQUEVORCBCTEFTX1NFQVJDSF9MSUJTCisgICAgICAgICAgIm1rbF9ydCIpCisgICAgICBlbmRpZigpCiAKLSAgICAgIGZvcmVhY2ggKElUICR7QkxBU19TRUFSQ0hfTElCU30pCisgICAgICAjIE1LTCB1c2VzIGEgbXVsdGl0dWRlIG9mIHBhcnRpYWxseSBwbGF0Zm9ybS1zcGVjaWZpYyBzdWJkaXJlY3RvcmllczoKKyAgICAgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkludGVsMTBfMzIiKQorICAgICAgICBzZXQoQkxBU19ta2xfQVJDSF9OQU1FICJpYTMyIikKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQoQkxBU19ta2xfQVJDSF9OQU1FICJpbnRlbDY0IikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKFdJTjMyKQorICAgICAgICBzZXQoQkxBU19ta2xfT1NfTkFNRSAid2luIikKKyAgICAgIGVsc2VpZihBUFBMRSkKKyAgICAgICAgc2V0KEJMQVNfbWtsX09TX05BTUUgIm1hYyIpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KEJMQVNfbWtsX09TX05BTUUgImxpbiIpCisgICAgICBlbmRpZigpCisgICAgICBpZihERUZJTkVEIEVOVntNS0xST09UfSkKKyAgICAgICAgZmlsZShUT19DTUFLRV9QQVRIICIkRU5We01LTFJPT1R9IiBCTEFTX21rbF9NS0xST09UKQorICAgICAgICAjIElmIE1LTFJPT1QgcG9pbnRzIHRvIHRoZSBzdWJkaXJlY3RvcnkgJ21rbCcsIHVzZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBpbnN0ZWFkCisgICAgICAgICMgc28gd2UgY2FuIGJldHRlciBkZXRlY3Qgb3RoZXIgcmVsZXZhbnQgbGlicmFyaWVzIGluICdjb21waWxlcicgb3IgJ3RiYic6CisgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQkxBU19ta2xfTUtMUk9PVF9MQVNUX0RJUiAiJHtCTEFTX21rbF9NS0xST09UfSIgTkFNRSkKKyAgICAgICAgaWYoQkxBU19ta2xfTUtMUk9PVF9MQVNUX0RJUiBTVFJFUVVBTCAibWtsIikKKyAgICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQkxBU19ta2xfTUtMUk9PVCAiJHtCTEFTX21rbF9NS0xST09UfSIgRElSRUNUT1JZKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCisgICAgICBzZXQoQkxBU19ta2xfTElCX1BBVEhfU1VGRklYRVMKKyAgICAgICAgICAiY29tcGlsZXIvbGliIiAiY29tcGlsZXIvbGliLyR7QkxBU19ta2xfQVJDSF9OQU1FfV8ke0JMQVNfbWtsX09TX05BTUV9IgorICAgICAgICAgICJjb21waWxlci9saWIvJHtCTEFTX21rbF9BUkNIX05BTUV9IgorICAgICAgICAgICJta2wvbGliIiAibWtsL2xpYi8ke0JMQVNfbWtsX0FSQ0hfTkFNRX1fJHtCTEFTX21rbF9PU19OQU1FfSIKKyAgICAgICAgICAibWtsL2xpYi8ke0JMQVNfbWtsX0FSQ0hfTkFNRX0iCisgICAgICAgICAgImxpYi8ke0JMQVNfbWtsX0FSQ0hfTkFNRX1fJHtCTEFTX21rbF9PU19OQU1FfSIpCisKKyAgICAgIGZvcmVhY2goSVQgJHtCTEFTX1NFQVJDSF9MSUJTfSkKICAgICAgICAgc3RyaW5nKFJFUExBQ0UgIiAiICI7IiBTRUFSQ0hfTElCUyAke0lUfSkKLSAgICAgICAgaWYgKE5PVCAke19MSUJSQVJJRVN9KQotICAgICAgICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzKAorICAgICAgICBpZihOT1QgJHtfTElCUkFSSUVTfSkKKyAgICAgICAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgICAgICAgICR7X0xJQlJBUklFU30KICAgICAgICAgICAgIEJMQVMKICAgICAgICAgICAgICR7QkxBU19ta2xfU0VBUkNIX1NZTUJPTH0KICAgICAgICAgICAgICIiCiAgICAgICAgICAgICAiJHtTRUFSQ0hfTElCU30iCiAgICAgICAgICAgICAiJHtDTUFLRV9USFJFQURfTElCU19JTklUfTske0JMQVNfbWtsX0xNfTske0JMQVNfbWtsX0xETH0iCi0gICAgICAgICAgICAiJHtfQkxBU19NS0xST09UX0xJQl9ESVJ9IgorICAgICAgICAgICAgIiR7QkxBU19ta2xfTUtMUk9PVH0iCisgICAgICAgICAgICAiJHtCTEFTX21rbF9MSUJfUEFUSF9TVUZGSVhFU30iCiAgICAgICAgICAgICApCi0gICAgICAgIGVuZGlmICgpCi0gICAgICBlbmRmb3JlYWNoICgpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGZvcmVhY2goKQogCi0gICAgZW5kaWYgKCkKLSAgICB1bnNldChCTEFTX21rbF9JTFBfTU9ERSkKLSAgICB1bnNldChCTEFTX21rbF9JTlRGQUNFKQotICAgIHVuc2V0KEJMQVNfbWtsX1RIUkVBRElORykKLSAgICB1bnNldChCTEFTX21rbF9PTVApCi0gICAgdW5zZXQoQkxBU19ta2xfRExMX1NVRkZJWCkKLSAgICB1bnNldChCTEFTX21rbF9MTSkKLSAgICB1bnNldChCTEFTX21rbF9MREwpCi0gIGVuZGlmICgpCi1lbmRpZiAoKQorICAgICAgdW5zZXQoQkxBU19ta2xfSUxQX01PREUpCisgICAgICB1bnNldChCTEFTX21rbF9JTlRGQUNFKQorICAgICAgdW5zZXQoQkxBU19ta2xfVEhSRUFESU5HKQorICAgICAgdW5zZXQoQkxBU19ta2xfT01QKQorICAgICAgdW5zZXQoQkxBU19ta2xfRExMX1NVRkZJWCkKKyAgICAgIHVuc2V0KEJMQVNfbWtsX0xNKQorICAgICAgdW5zZXQoQkxBU19ta2xfTERMKQorICAgICAgdW5zZXQoQkxBU19ta2xfTUtMUk9PVCkKKyAgICAgIHVuc2V0KEJMQVNfbWtsX01LTFJPT1RfTEFTVF9ESVIpCisgICAgICB1bnNldChCTEFTX21rbF9BUkNIX05BTUUpCisgICAgICB1bnNldChCTEFTX21rbF9PU19OQU1FKQorICAgICAgdW5zZXQoQkxBU19ta2xfTElCX1BBVEhfU1VGRklYRVMpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRpZigpCiAKIGlmKEJMQV9GOTUpCiAgIGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhCTEFTIFJFUVVJUkVEX1ZBUlMgQkxBUzk1X0xJQlJBUklFUykKQEAgLTQ1NSwzMCArNTMzLDM0IEBACiAgIGVuZGlmKCkKIGVuZGlmKCkKIAotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkdvdG8iIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisjIGdvdG9ibGFzPyAoaHR0cDovL3d3dy50YWNjLnV0ZXhhcy5lZHUvdGFjYy1wcm9qZWN0cy9nb3RvYmxhczIpCitpZihCTEFfVkVORE9SIFNUUkVRVUFMICJHb3RvIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgIyBnb3RvYmxhcyAoaHR0cDovL3d3dy50YWNjLnV0ZXhhcy5lZHUvdGFjYy1wcm9qZWN0cy9nb3RvYmxhczIpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIiCiAgICAgICAiZ290bzIiCiAgICAgICAiIgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICApCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJPcGVuQkxBUyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyMgT3BlbkJMQVM/IChodHRwOi8vd3d3Lm9wZW5ibGFzLm5ldCkKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIk9wZW5CTEFTIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgIyBPcGVuQkxBUyAoaHR0cDovL3d3dy5vcGVuYmxhcy5uZXQpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIiCiAgICAgICAib3BlbmJsYXMiCiAgICAgICAiIgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICApCiAgIGVuZGlmKCkKICAgaWYoTk9UIEJMQVNfTElCUkFSSUVTIEFORCAoQ01BS0VfQ19DT01QSUxFUl9MT0FERUQgT1IgQ01BS0VfQ1hYX0NPTVBJTEVSX0xPQURFRCkpCkBAIC00ODcsMjQ2ICs1NjksMjk1IEBACiAgICAgZWxzZSgpCiAgICAgICBmaW5kX3BhY2thZ2UoVGhyZWFkcyBSRVFVSVJFRCkKICAgICBlbmRpZigpCi0gICAgIyBPcGVuQkxBUyAoaHR0cDovL3d3dy5vcGVuYmxhcy5uZXQpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIiCiAgICAgICAib3BlbmJsYXMiCiAgICAgICAiJHtDTUFLRV9USFJFQURfTElCU19JTklUfSIKKyAgICAgICIiCisgICAgICAiIgogICAgICAgKQogICBlbmRpZigpCi1lbmRpZiAoKQorZW5kaWYoKQogCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiRkxBTUUiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisjIEFybVBMIGJsYXMgbGlicmFyeT8gKGh0dHBzOi8vZGV2ZWxvcGVyLmFybS5jb20vdG9vbHMtYW5kLXNvZnR3YXJlL3NlcnZlci1hbmQtaHBjL2NvbXBpbGUvYXJtLWNvbXBpbGVyLWZvci1saW51eC9hcm0tcGVyZm9ybWFuY2UtbGlicmFyaWVzKQoraWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJBcm0iIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisKKyAgICMgQ2hlY2sgZm9yIDY0Yml0IEludGVnZXIgc3VwcG9ydAorICAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJfaWxwNjQiKQorICAgICBzZXQoQkxBU19hcm1wbF9MSUIgImFybXBsX2lscDY0IikKKyAgIGVsc2UoKQorICAgICBzZXQoQkxBU19hcm1wbF9MSUIgImFybXBsX2xwNjQiKQorICAgZW5kaWYoKQorCisgICAjIENoZWNrIGZvciBPcGVuTVAgc3VwcG9ydCwgVklBIEJMQV9WRU5ET1Igb2YgQXJtX21wIG9yIEFybV9pcGw2NF9tcAorICAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJfbXAiKQorICAgICBzZXQoQkxBU19hcm1wbF9MSUIgIiR7QkxBU19hcm1wbF9MSUJ9X21wIikKKyAgIGVuZGlmKCkKKworICAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAorICAgICAgQkxBU19MSUJSQVJJRVMKKyAgICAgIEJMQVMKKyAgICAgIHNnZW1tCisgICAgICAiIgorICAgICAgIiR7QkxBU19hcm1wbF9MSUJ9IgorICAgICAgIiIKKyAgICAgICIiCisgICAgICAiIgorICAgICAgKQorICBlbmRpZigpCisKK2VuZGlmKCkKKworIyBGTEFNRSdzIGJsaXMgbGlicmFyeT8gKGh0dHBzOi8vZ2l0aHViLmNvbS9mbGFtZS9ibGlzKQoraWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiRkxBTUUiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICAjIEZMQU1FJ3MgYmxpcyBsaWJyYXJ5IChodHRwczovL2dpdGh1Yi5jb20vZmxhbWUvYmxpcykKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICJibGlzIgogICAgICAgIiIKKyAgICAgICIiCisgICAgICAiIgogICAgICAgKQogICBlbmRpZigpCi1lbmRpZiAoKQorZW5kaWYoKQogCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQVRMQVMiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisjIEJMQVMgaW4gdGhlIEFUTEFTIGxpYnJhcnk/IChodHRwOi8vbWF0aC1hdGxhcy5zb3VyY2Vmb3JnZS5uZXQvKQoraWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQVRMQVMiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICAjIEJMQVMgaW4gQVRMQVMgbGlicmFyeT8gKGh0dHA6Ly9tYXRoLWF0bGFzLnNvdXJjZWZvcmdlLm5ldC8pCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgZGdlbW0KICAgICAgICIiCi0gICAgICAiZjc3YmxhczthdGxhcyIKKyAgICAgICJibGFzO2Y3N2JsYXM7YXRsYXMiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICIiCiAgICAgICApCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKICMgQkxBUyBpbiBQaGlQQUNLIGxpYnJhcmllcz8gKHJlcXVpcmVzIGdlbmVyaWMgQkxBUyBsaWIsIHRvbykKLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJQaGlQQUNLIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQoraWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiUGhpUEFDSyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzKAorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIHNnZW1tCiAgICAgICAiIgogICAgICAgInNnZW1tO2RnZW1tO2JsYXMiCiAgICAgICAiIgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICApCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKICMgQkxBUyBpbiBBbHBoYSBDWE1MIGxpYnJhcnk/Ci1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQ1hNTCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkNYTUwiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICJjeG1sIgogICAgICAgIiIKKyAgICAgICIiCisgICAgICAiIgogICAgICAgKQogICBlbmRpZigpCi1lbmRpZiAoKQorZW5kaWYoKQogCiAjIEJMQVMgaW4gQWxwaGEgRFhNTCBsaWJyYXJ5PyAobm93IGNhbGxlZCBDWE1MLCBzZWUgYWJvdmUpCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiRFhNTCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkRYTUwiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICJkeG1sIgogICAgICAgIiIKKyAgICAgICIiCisgICAgICAiIgogICAgICAgKQogICBlbmRpZigpCi1lbmRpZiAoKQorZW5kaWYoKQogCiAjIEJMQVMgaW4gU3VuIFBlcmZvcm1hbmNlIGxpYnJhcnk/Ci1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiU3VuUGVyZiIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIlN1blBlcmYiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIi14bGljX2xpYj1zdW5wZXJmIgogICAgICAgInN1bnBlcmY7c3VubWF0aCIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgICBpZihCTEFTX0xJQlJBUklFUykKICAgICAgIHNldChCTEFTX0xJTktFUl9GTEFHUyAiLXhsaWNfbGliPXN1bnBlcmYiKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAogIyBCTEFTIGluIFNDU0wgbGlicmFyeT8gIChTR0kvQ3JheSBTY2llbnRpZmljIExpYnJhcnkpCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiU0NTTCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIlNDU0wiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCiAgIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcygKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQogICAgICAgIiIKICAgICAgICJzY3NsIgogICAgICAgIiIKKyAgICAgICIiCisgICAgICAiIgogICAgICAgKQogICBlbmRpZigpCi1lbmRpZiAoKQorZW5kaWYoKQogCiAjIEJMQVMgaW4gU0dJTUFUSCBsaWJyYXJ5PwotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIlNHSU1BVEgiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCitpZihCTEFfVkVORE9SIFNUUkVRVUFMICJTR0lNQVRIIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgc2dlbW0KICAgICAgICIiCiAgICAgICAiY29tcGxpYi5zZ2ltYXRoIgogICAgICAgIiIKKyAgICAgICIiCisgICAgICAiIgogICAgICAgKQogICBlbmRpZigpCi1lbmRpZiAoKQorZW5kaWYoKQogCiAjIEJMQVMgaW4gSUJNIEVTU0wgbGlicmFyeT8gKHJlcXVpcmVzIGdlbmVyaWMgQkxBUyBsaWIsIHRvbykKLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJJQk1FU1NMIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQoraWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiSUJNRVNTTCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzKAorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIHNnZW1tCiAgICAgICAiIgogICAgICAgImVzc2w7YmxhcyIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAotI0JMQVMgaW4gYWNtbCBsaWJyYXJ5PwotaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiQUNNTCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKLSAgaWYoICgoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQUNNTCIpIEFORCAoTk9UIEJMQVNfQUNNTF9MSUJfRElSUykpIE9SCisjIEJMQVMgaW4gYWNtbCBsaWJyYXJ5PworaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJBQ01MIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICBpZigoKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFDTUwiKSBBTkQgKE5PVCBCTEFTX0FDTUxfTElCX0RJUlMpKSBPUgogICAgICgoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQUNNTF9NUCIpIEFORCAoTk9UIEJMQVNfQUNNTF9NUF9MSUJfRElSUykpIE9SCiAgICAgKChCTEFfVkVORE9SIFNUUkVRVUFMICJBQ01MX0dQVSIpIEFORCAoTk9UIEJMQVNfQUNNTF9HUFVfTElCX0RJUlMpKQogICAgICkKICAgIyB0cnkgdG8gZmluZCBhY21sIGluICJzdGFuZGFyZCIgcGF0aHMKLSAgaWYoIFdJTjMyICkKLSAgICBmaWxlKCBHTE9CIF9BQ01MX1JPT1QgIkM6L0FNRC9hY21sKi9BQ01MLUVVTEEudHh0IiApCisgIGlmKFdJTjMyKQorICAgIGZpbGUoR0xPQiBfQUNNTF9ST09UICJDOi9BTUQvYWNtbCovQUNNTC1FVUxBLnR4dCIpCiAgIGVsc2UoKQotICAgIGZpbGUoIEdMT0IgX0FDTUxfUk9PVCAiL29wdC9hY21sKi9BQ01MLUVVTEEudHh0IiApCisgICAgZmlsZShHTE9CIF9BQ01MX1JPT1QgIi9vcHQvYWNtbCovQUNNTC1FVUxBLnR4dCIpCiAgIGVuZGlmKCkKLSAgaWYoIFdJTjMyICkKLSAgICBmaWxlKCBHTE9CIF9BQ01MX0dQVV9ST09UICJDOi9BTUQvYWNtbCovR1BHUFVleGFtcGxlcyIgKQorICBpZihXSU4zMikKKyAgICBmaWxlKEdMT0IgX0FDTUxfR1BVX1JPT1QgIkM6L0FNRC9hY21sKi9HUEdQVWV4YW1wbGVzIikKICAgZWxzZSgpCi0gICAgZmlsZSggR0xPQiBfQUNNTF9HUFVfUk9PVCAiL29wdC9hY21sKi9HUEdQVWV4YW1wbGVzIiApCisgICAgZmlsZShHTE9CIF9BQ01MX0dQVV9ST09UICIvb3B0L2FjbWwqL0dQR1BVZXhhbXBsZXMiKQogICBlbmRpZigpCiAgIGxpc3QoR0VUIF9BQ01MX1JPT1QgMCBfQUNNTF9ST09UKQogICBsaXN0KEdFVCBfQUNNTF9HUFVfUk9PVCAwIF9BQ01MX0dQVV9ST09UKQotICBpZiggX0FDTUxfUk9PVCApCi0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCggX0FDTUxfUk9PVCAke19BQ01MX1JPT1R9IFBBVEggKQotICAgIGlmKCBTSVpFT0ZfSU5URUdFUiBFUVVBTCA4ICkKLSAgICAgIHNldCggX0FDTUxfUEFUSF9TVUZGSVggIl9pbnQ2NCIgKQorICBpZihfQUNNTF9ST09UKQorICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX0FDTUxfUk9PVCAke19BQ01MX1JPT1R9IFBBVEgpCisgICAgaWYoU0laRU9GX0lOVEVHRVIgRVFVQUwgOCkKKyAgICAgIHNldChfQUNNTF9QQVRIX1NVRkZJWCAiX2ludDY0IikKICAgICBlbHNlKCkKLSAgICAgIHNldCggX0FDTUxfUEFUSF9TVUZGSVggIiIgKQorICAgICAgc2V0KF9BQ01MX1BBVEhfU1VGRklYICIiKQogICAgIGVuZGlmKCkKLSAgICBpZiggQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiSW50ZWwiICkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVIzMiAiaWZvcnQzMiIgKQotICAgICAgc2V0KCBfQUNNTF9DT01QSUxFUjY0ICJpZm9ydDY0IiApCi0gICAgZWxzZWlmKCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJTdW5Qcm8iICkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVIzMiAic3VuMzIiICkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVI2NCAic3VuNjQiICkKLSAgICBlbHNlaWYoIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgIlBHSSIgKQotICAgICAgc2V0KCBfQUNNTF9DT01QSUxFUjMyICJwZ2kzMiIgKQotICAgICAgaWYoIFdJTjMyICkKLSAgICAgICAgc2V0KCBfQUNNTF9DT01QSUxFUjY0ICJ3aW42NCIgKQorICAgIGlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgIkludGVsIikKKyAgICAgIHNldChfQUNNTF9DT01QSUxFUjMyICJpZm9ydDMyIikKKyAgICAgIHNldChfQUNNTF9DT01QSUxFUjY0ICJpZm9ydDY0IikKKyAgICBlbHNlaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiU3VuUHJvIikKKyAgICAgIHNldChfQUNNTF9DT01QSUxFUjMyICJzdW4zMiIpCisgICAgICBzZXQoX0FDTUxfQ09NUElMRVI2NCAic3VuNjQiKQorICAgIGVsc2VpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJQR0kiKQorICAgICAgc2V0KF9BQ01MX0NPTVBJTEVSMzIgInBnaTMyIikKKyAgICAgIGlmKFdJTjMyKQorICAgICAgICBzZXQoX0FDTUxfQ09NUElMRVI2NCAid2luNjQiKQogICAgICAgZWxzZSgpCi0gICAgICAgIHNldCggX0FDTUxfQ09NUElMRVI2NCAicGdpNjQiICkKKyAgICAgICAgc2V0KF9BQ01MX0NPTVBJTEVSNjQgInBnaTY0IikKICAgICAgIGVuZGlmKCkKLSAgICBlbHNlaWYoIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgIk9wZW42NCIgKQorICAgIGVsc2VpZihDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJPcGVuNjQiKQogICAgICAgIyAzMiBiaXQgYnVpbGRzIG5vdCBzdXBwb3J0ZWQgb24gT3BlbjY0IGJ1dCBmb3IgY29kZSBzaW1wbGljaXR5CiAgICAgICAjIFdlJ2xsIGp1c3QgdXNlIHRoZSBzYW1lIGRpcmVjdG9yeSB0d2ljZQotICAgICAgc2V0KCBfQUNNTF9DT01QSUxFUjMyICJvcGVuNjRfNjQiICkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVI2NCAib3BlbjY0XzY0IiApCi0gICAgZWxzZWlmKCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOQUciICkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVIzMiAibmFnMzIiICkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVI2NCAibmFnNjQiICkKKyAgICAgIHNldChfQUNNTF9DT01QSUxFUjMyICJvcGVuNjRfNjQiKQorICAgICAgc2V0KF9BQ01MX0NPTVBJTEVSNjQgIm9wZW42NF82NCIpCisgICAgZWxzZWlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgIk5BRyIpCisgICAgICBzZXQoX0FDTUxfQ09NUElMRVIzMiAibmFnMzIiKQorICAgICAgc2V0KF9BQ01MX0NPTVBJTEVSNjQgIm5hZzY0IikKICAgICBlbHNlKCkKLSAgICAgIHNldCggX0FDTUxfQ09NUElMRVIzMiAiZ2ZvcnRyYW4zMiIgKQotICAgICAgc2V0KCBfQUNNTF9DT01QSUxFUjY0ICJnZm9ydHJhbjY0IiApCisgICAgICBzZXQoX0FDTUxfQ09NUElMRVIzMiAiZ2ZvcnRyYW4zMiIpCisgICAgICBzZXQoX0FDTUxfQ09NUElMRVI2NCAiZ2ZvcnRyYW42NCIpCiAgICAgZW5kaWYoKQogCi0gICAgaWYoIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFDTUxfTVAiICkKKyAgICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJBQ01MX01QIikKICAgICAgIHNldChfQUNNTF9NUF9MSUJfRElSUwogICAgICAgICAiJHtfQUNNTF9ST09UfS8ke19BQ01MX0NPTVBJTEVSMzJ9X21wJHtfQUNNTF9QQVRIX1NVRkZJWH0vbGliIgotICAgICAgICAiJHtfQUNNTF9ST09UfS8ke19BQ01MX0NPTVBJTEVSNjR9X21wJHtfQUNNTF9QQVRIX1NVRkZJWH0vbGliIiApCisgICAgICAgICIke19BQ01MX1JPT1R9LyR7X0FDTUxfQ09NUElMRVI2NH1fbXAke19BQ01MX1BBVEhfU1VGRklYfS9saWIiKQogICAgIGVsc2UoKQogICAgICAgc2V0KF9BQ01MX0xJQl9ESVJTCiAgICAgICAgICIke19BQ01MX1JPT1R9LyR7X0FDTUxfQ09NUElMRVIzMn0ke19BQ01MX1BBVEhfU1VGRklYfS9saWIiCi0gICAgICAgICIke19BQ01MX1JPT1R9LyR7X0FDTUxfQ09NUElMRVI2NH0ke19BQ01MX1BBVEhfU1VGRklYfS9saWIiICkKKyAgICAgICAgIiR7X0FDTUxfUk9PVH0vJHtfQUNNTF9DT01QSUxFUjY0fSR7X0FDTUxfUEFUSF9TVUZGSVh9L2xpYiIpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiBlbHNlaWYoQkxBU18ke0JMQV9WRU5ET1J9X0xJQl9ESVJTKQogICBzZXQoXyR7QkxBX1ZFTkRPUn1fTElCX0RJUlMgJHtCTEFTXyR7QkxBX1ZFTkRPUn1fTElCX0RJUlN9KQogZW5kaWYoKQogCi1pZiggQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQUNNTF9NUCIgKQotICBmb3JlYWNoKCBCTEFTX0FDTUxfTVBfTElCX0RJUlMgJHtfQUNNTF9NUF9MSUJfRElSU30pCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMgKAoraWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQUNNTF9NUCIpCisgIGZvcmVhY2goQkxBU19BQ01MX01QX0xJQl9ESVJTICR7X0FDTUxfTVBfTElCX0RJUlN9KQorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIHNnZW1tCi0gICAgICAiIiAiYWNtbF9tcDthY21sX212IiAiIiAke0JMQVNfQUNNTF9NUF9MSUJfRElSU30KKyAgICAgICIiICJhY21sX21wO2FjbWxfbXYiICIiICR7QkxBU19BQ01MX01QX0xJQl9ESVJTfSAiIgogICAgICAgKQotICAgIGlmKCBCTEFTX0xJQlJBUklFUyApCisgICAgaWYoQkxBU19MSUJSQVJJRVMpCiAgICAgICBicmVhaygpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKLWVsc2VpZiggQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQUNNTF9HUFUiICkKLSAgZm9yZWFjaCggQkxBU19BQ01MX0dQVV9MSUJfRElSUyAke19BQ01MX0dQVV9MSUJfRElSU30pCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMgKAorZWxzZWlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFDTUxfR1BVIikKKyAgZm9yZWFjaChCTEFTX0FDTUxfR1BVX0xJQl9ESVJTICR7X0FDTUxfR1BVX0xJQl9ESVJTfSkKKyAgICBjaGVja19ibGFzX2xpYnJhcmllcygKICAgICAgIEJMQVNfTElCUkFSSUVTCiAgICAgICBCTEFTCiAgICAgICBzZ2VtbQotICAgICAgIiIgImFjbWw7YWNtbF9tdjtDQUxCTEFTIiAiIiAke0JMQVNfQUNNTF9HUFVfTElCX0RJUlN9CisgICAgICAiIiAiYWNtbDthY21sX212O0NBTEJMQVMiICIiICR7QkxBU19BQ01MX0dQVV9MSUJfRElSU30gIiIKICAgICAgICkKLSAgICBpZiggQkxBU19MSUJSQVJJRVMgKQorICAgIGlmKEJMQVNfTElCUkFSSUVTKQogICAgICAgYnJlYWsoKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCiBlbHNlKCkKLSAgZm9yZWFjaCggQkxBU19BQ01MX0xJQl9ESVJTICR7X0FDTUxfTElCX0RJUlN9ICkKLSAgICBjaGVja19mb3J0cmFuX2xpYnJhcmllcyAoCisgIGZvcmVhY2goQkxBU19BQ01MX0xJQl9ESVJTICR7X0FDTUxfTElCX0RJUlN9KQorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIHNnZW1tCi0gICAgICAiIiAiYWNtbDthY21sX212IiAiIiAke0JMQVNfQUNNTF9MSUJfRElSU30KKyAgICAgICIiICJhY21sO2FjbWxfbXYiICIiICR7QkxBU19BQ01MX0xJQl9ESVJTfSAiIgogICAgICAgKQotICAgIGlmKCBCTEFTX0xJQlJBUklFUyApCisgICAgaWYoQkxBU19MSUJSQVJJRVMpCiAgICAgICBicmVhaygpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKQEAgLTczNCw4NyArODY1LDEwMiBAQAogCiAjIEVpdGhlciBhY21sIG9yIGFjbWxfbXAgc2hvdWxkIGJlIGluIExEX0xJQlJBUllfUEFUSCBidXQgbm90IGJvdGgKIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgIEJMQVNfTElCUkFSSUVTCiAgICAgQkxBUwogICAgIHNnZW1tCiAgICAgIiIKICAgICAiYWNtbDthY21sX212IgogICAgICIiCisgICAgIiIKKyAgICAiIgogICAgICkKIGVuZGlmKCkKIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgIEJMQVNfTElCUkFSSUVTCiAgICAgQkxBUwogICAgIHNnZW1tCiAgICAgIiIKICAgICAiYWNtbF9tcDthY21sX212IgogICAgICIiCisgICAgIiIKKyAgICAiIgogICAgICkKIGVuZGlmKCkKIGlmKE5PVCBCTEFTX0xJQlJBUklFUykKLSAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgIEJMQVNfTElCUkFSSUVTCiAgICAgQkxBUwogICAgIHNnZW1tCiAgICAgIiIKICAgICAiYWNtbDthY21sX212O0NBTEJMQVMiCiAgICAgIiIKKyAgICAiIgorICAgICIiCiAgICAgKQogZW5kaWYoKQotZW5kaWYgKCkgIyBBQ01MCitlbmRpZigpICMgQUNNTAogCiAjIEFwcGxlIEJMQVMgbGlicmFyeT8KLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJBcHBsZSIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFwcGxlIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQogICBpZihOT1QgQkxBU19MSUJSQVJJRVMpCi0gICAgY2hlY2tfZm9ydHJhbl9saWJyYXJpZXMoCisgICAgY2hlY2tfYmxhc19saWJyYXJpZXMoCiAgICAgICBCTEFTX0xJQlJBUklFUwogICAgICAgQkxBUwogICAgICAgZGdlbW0KICAgICAgICIiCiAgICAgICAiQWNjZWxlcmF0ZSIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKICAgZW5kaWYoKQotZW5kaWYgKCkKK2VuZGlmKCkKIAotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIk5BUyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKLSAgaWYgKCBOT1QgQkxBU19MSUJSQVJJRVMgKQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzKAorIyBBcHBsZSBOQVMgKHZlY0xpYikgbGlicmFyeT8KK2lmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIk5BUyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIGRnZW1tCiAgICAgICAiIgogICAgICAgInZlY0xpYiIKICAgICAgICIiCisgICAgICAiIgorICAgICAgIiIKICAgICAgICkKLSAgZW5kaWYgKCkKLWVuZGlmICgpCisgIGVuZGlmKCkKK2VuZGlmKCkKIAogIyBHZW5lcmljIEJMQVMgbGlicmFyeT8KLWlmIChCTEFfVkVORE9SIFNUUkVRVUFMICJHZW5lcmljIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQoraWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiR2VuZXJpYyIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKICAgaWYoTk9UIEJMQVNfTElCUkFSSUVTKQotICAgIGNoZWNrX2ZvcnRyYW5fbGlicmFyaWVzKAorICAgIGNoZWNrX2JsYXNfbGlicmFyaWVzKAogICAgICAgQkxBU19MSUJSQVJJRVMKICAgICAgIEJMQVMKICAgICAgIHNnZW1tCiAgICAgICAiIgogICAgICAgImJsYXMiCiAgICAgICAiIgorICAgICAgIiIKKyAgICAgICIiCiAgICAgICApCiAgIGVuZGlmKCkKLWVuZGlmICgpCitlbmRpZigpCiAKIGlmKE5PVCBCTEFfRjk1KQogICBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoQkxBUyBSRVFVSVJFRF9WQVJTIEJMQVNfTElCUkFSSUVTKQogZW5kaWYoKQogCisKICMgT24gY29tcGlsZXJzIHRoYXQgaW1wbGljaXRseSBsaW5rIEJMQVMgKHN1Y2ggYXMgZnRuLCBjYywgYW5kIENDIG9uIENyYXkgSFBDIG1hY2hpbmVzKQogIyB3ZSB1c2VkIGEgcGxhY2Vob2xkZXIgZm9yIGVtcHR5IEJMQVNfTElCUkFSSUVTIHRvIGdldCB0aHJvdWdoIG91ciBsb2dpYyBhYm92ZS4KLWlmIChCTEFTX0xJQlJBUklFUyBTVFJFUVVBTCAiQkxBU19MSUJSQVJJRVMtUExBQ0VIT0xERVItRk9SLUVNUFRZLUxJQlJBUklFUyIpCitpZihCTEFTX0xJQlJBUklFUyBTVFJFUVVBTCAiQkxBU19MSUJSQVJJRVMtUExBQ0VIT0xERVItRk9SLUVNUFRZLUxJQlJBUklFUyIpCiAgIHNldChCTEFTX0xJQlJBUklFUyAiIikKIGVuZGlmKCkKIAorX2FkZF9ibGFzX3RhcmdldCgpCiBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQogc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke19ibGFzX09SSUdfQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEJaaXAyLmNtYWtlIGIvTW9kdWxlcy9GaW5kQlppcDIuY21ha2UKaW5kZXggOThhYjcyYy4uNTcwNGQxZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kQlppcDIuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQlppcDIuY21ha2UKQEAgLTQ1LDggKzQ1LDggQEAKIGZpbmRfcGF0aChCWklQMl9JTkNMVURFX0RJUiBiemxpYi5oICR7X0JaSVAyX1BBVEhTfSBQQVRIX1NVRkZJWEVTIGluY2x1ZGUpCiAKIGlmIChOT1QgQlpJUDJfTElCUkFSSUVTKQotICAgIGZpbmRfbGlicmFyeShCWklQMl9MSUJSQVJZX1JFTEVBU0UgTkFNRVMgYnoyIGJ6aXAyIGxpYmJ6MiBsaWJiemlwMiAke19CWklQMl9QQVRIU30gUEFUSF9TVUZGSVhFUyBsaWIpCi0gICAgZmluZF9saWJyYXJ5KEJaSVAyX0xJQlJBUllfREVCVUcgTkFNRVMgYnoyZCBiemlwMmQgbGliYnoyZCBsaWJiemlwMmQgJHtfQlpJUDJfUEFUSFN9IFBBVEhfU1VGRklYRVMgbGliKQorICAgIGZpbmRfbGlicmFyeShCWklQMl9MSUJSQVJZX1JFTEVBU0UgTkFNRVMgYnoyIGJ6aXAyIGxpYmJ6MiBsaWJiemlwMiBOQU1FU19QRVJfRElSICR7X0JaSVAyX1BBVEhTfSBQQVRIX1NVRkZJWEVTIGxpYikKKyAgICBmaW5kX2xpYnJhcnkoQlpJUDJfTElCUkFSWV9ERUJVRyBOQU1FUyBiejJkIGJ6aXAyZCBsaWJiejJkIGxpYmJ6aXAyZCBOQU1FU19QRVJfRElSICR7X0JaSVAyX1BBVEhTfSBQQVRIX1NVRkZJWEVTIGxpYikKIAogICAgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9TZWxlY3RMaWJyYXJ5Q29uZmlndXJhdGlvbnMuY21ha2UpCiAgICAgU0VMRUNUX0xJQlJBUllfQ09ORklHVVJBVElPTlMoQlpJUDIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRCb29zdC5jbWFrZSBiL01vZHVsZXMvRmluZEJvb3N0LmNtYWtlCmluZGV4IDBlODRmYWIuLmVjMDg3YWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEJvb3N0LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEJvb3N0LmNtYWtlCkBAIC0xNTUsNiArMTU1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgaWYgbXVsdGlwbGUgY29tcGF0aWJsZSBzdWZmaXhlcyBzaG91bGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdGVzdGVkIGZvciwgaW4gZGVjcmVhc2luZyBvcmRlciBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJlbmNlLgorICBCb29zdF9MSUJfUFJFRklYICAgICAgICAgLSBTZXQgdG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIGxpYnJhcnkgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKGUuZy4gImxpYiIpIHVzZWQgYnkgQm9vc3Qgc3RhdGljIGxpYnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgbmVlZGVkIG9ubHkgb24gcGxhdGZvcm1zIHdoZXJlIENNYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGtub3cgdGhlIHByZWZpeCBieSBkZWZhdWx0LgogICBCb29zdF9BUkNISVRFQ1RVUkUgICAgICAgLSBTZXQgdG8gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsaWJyYXJ5IHN1ZmZpeAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiLXg2NCIpLiAgRGVmYXVsdCBpcyBhdXRvLWNvbXB1dGVkIGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQysrIGNvbXBpbGVyIGluIHVzZS4KQEAgLTI0OCw2ICsyNTIsNyBAQAogIyBTYXZlIHByb2plY3QncyBwb2xpY2llcwogY21ha2VfcG9saWN5KFBVU0gpCiBjbWFrZV9wb2xpY3koU0VUIENNUDAwNTcgTkVXKSAjIGlmIElOX0xJU1QKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwMiBORVcpICMgaWYgbWFya19hc19hZHZhbmNlZChub25fY2FjaGVfdmFyKQogCiBmdW5jdGlvbihfYm9vc3RfZ2V0X2V4aXN0aW5nX3RhcmdldCBjb21wb25lbnQgdGFyZ2V0X3ZhcikKICAgc2V0KG5hbWVzICIke2NvbXBvbmVudH0iKQpAQCAtMzAwLDcgKzMwNSw3IEBACiBlbmRmdW5jdGlvbigpCiAKIG1hY3JvKF9ib29zdF9zZXRfaW5fcGFyZW50X3Njb3BlIG5hbWUgdmFsdWUpCi0gICMgU2V0IGEgdmFyaWFibGUgaW4gcGFyZW50IHNjb3BlIGFuZCBtYWtlIGl0IHZpc2liaWxlIGluIGN1cnJlbnQgc2NvcGUKKyAgIyBTZXQgYSB2YXJpYWJsZSBpbiBwYXJlbnQgc2NvcGUgYW5kIG1ha2UgaXQgdmlzaWJsZSBpbiBjdXJyZW50IHNjb3BlCiAgIHNldCgke25hbWV9ICIke3ZhbHVlfSIgUEFSRU5UX1NDT1BFKQogICBzZXQoJHtuYW1lfSAiJHt2YWx1ZX0iKQogZW5kbWFjcm8oKQpAQCAtNDQxLDcgKzQ0Niw5IEBACiAgICMgTm90ZSB0aGF0IGFyZ3MgYXJlIHBhc3NlZCBpbiB0aGUgQm9vc3RfRklORF94eHh4eCB2YXJpYWJsZXMsIHNvIHRoZXJlIGlzIG5vCiAgICMgbmVlZCB0byBkZWxlZ2F0ZSB0aGVtIHRvIHRoaXMgZmluZF9wYWNrYWdlIGNhbGwuCiAgIGZpbmRfcGFja2FnZShCb29zdCBRVUlFVCBOT19NT0RVTEUpCi0gIG1hcmtfYXNfYWR2YW5jZWQoQm9vc3RfRElSKQorICBpZiAoREVGSU5FRCBCb29zdF9ESVIpCisgICAgbWFya19hc19hZHZhbmNlZChCb29zdF9ESVIpCisgIGVuZGlmICgpCiAKICAgIyBJZiB3ZSBmb3VuZCBhIGJvb3N0IGNtYWtlIHBhY2thZ2UsIHRoZW4gd2UncmUgZG9uZS4gUHJpbnQgb3V0IHdoYXQgd2UgZm91bmQuCiAgICMgT3RoZXJ3aXNlIGxldCB0aGUgcmVzdCBvZiB0aGUgbW9kdWxlIHRyeSB0byBmaW5kIGl0LgpAQCAtNzQ3LDcgKzc1NCwxMSBAQAogICAgICAgICBzZXQoX2Jvb3N0X0NPTVBJTEVSICItbWd3IikgIyBubyBHQ0MgdmVyc2lvbiBlbmNvZGluZyBwcmlvciB0byAxLjM0CiAgICAgZWxzZSgpCiAgICAgICBfQm9vc3RfQ09NUElMRVJfRFVNUFZFUlNJT04oX2Jvb3N0X0NPTVBJTEVSX1ZFUlNJT04gX2Jvb3N0X0NPTVBJTEVSX1ZFUlNJT05fTUFKT1IgX2Jvb3N0X0NPTVBJTEVSX1ZFUlNJT05fTUlOT1IpCi0gICAgICBzZXQoX2Jvb3N0X0NPTVBJTEVSICItbWd3JHtfYm9vc3RfQ09NUElMRVJfVkVSU0lPTn0iKQorICAgICAgaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEuNzMgQU5EIF9ib29zdF9DT01QSUxFUl9WRVJTSU9OX01BSk9SIFZFUlNJT05fR1JFQVRFUl9FUVVBTCA1KQorICAgICAgICBzZXQoX2Jvb3N0X0NPTVBJTEVSICItbWd3JHtfYm9vc3RfQ09NUElMRVJfVkVSU0lPTl9NQUpPUn0iKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldChfYm9vc3RfQ09NUElMRVIgIi1tZ3cke19ib29zdF9DT01QSUxFUl9WRVJTSU9OfSIpCisgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbHNlaWYgKFVOSVgpCiAgICAgX0Jvb3N0X0NPTVBJTEVSX0RVTVBWRVJTSU9OKF9ib29zdF9DT01QSUxFUl9WRVJTSU9OIF9ib29zdF9DT01QSUxFUl9WRVJTSU9OX01BSk9SIF9ib29zdF9DT01QSUxFUl9WRVJTSU9OX01JTk9SKQpAQCAtODQ3LDMxOCArODU4LDMzNCBAQAogICBlbmRpZigpCiAKICAgc2V0KF9Cb29zdF9JTVBPUlRFRF9UQVJHRVRTIFRSVUUpCi0gIGlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS4zMy4wKQotICAgIG1lc3NhZ2UoV0FSTklORyAiSW1wb3J0ZWQgdGFyZ2V0cyBhbmQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlIGZvciBCb29zdCB2ZXJzaW9uICR7Qm9vc3RfVkVSU0lPTl9TVFJJTkd9IChhbGwgdmVyc2lvbnMgb2xkZXIgdGhhbiAxLjMzKSIpCi0gICAgc2V0KF9Cb29zdF9JTVBPUlRFRF9UQVJHRVRTIEZBTFNFKQotICBlbHNlaWYoTk9UIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjMzLjAgQU5EIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjM1LjApCi0gICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4IHRocmVhZCkKLSAgICBzZXQoX0Jvb3N0X1JFR0VYX0RFUEVOREVOQ0lFUyB0aHJlYWQpCi0gICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHRocmVhZCkKLSAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICBlbHNlaWYoTk9UIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjM1LjAgQU5EIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjM2LjApCi0gICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQotICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gdGhyZWFkKQotICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gIGVsc2VpZihOT1QgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuMzYuMCBBTkQgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuMzguMCkKLSAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCi0gICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwpCi0gICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSB0aHJlYWQpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS4zOC4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS40My4wKQotICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKLSAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCkKLSAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gdGhyZWFkIGRhdGVfdGltZSkKLSAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICBlbHNlaWYoTk9UIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjQzLjAgQU5EIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjQ0LjApCi0gICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQotICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIHJhbmRvbSkKLSAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gdGhyZWFkIGRhdGVfdGltZSkKLSAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICBlbHNlaWYoTk9UIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjQ0LjAgQU5EIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjQ1LjApCi0gICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQotICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIHJhbmRvbSBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uIGZpbGVzeXN0ZW0gc3lzdGVtIHRocmVhZCBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS40NS4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS40Ny4wKQotICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKLSAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCByYW5kb20pCi0gICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGRhdGVfdGltZSkKLSAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGRhdGVfdGltZSkKLSAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICBlbHNlaWYoTk9UIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjQ3LjAgQU5EIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjQ4LjApCi0gICAgc2V0KF9Cb29zdF9DSFJPTk9fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCi0gICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgcmFuZG9tKQotICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS40OC4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41MC4wKQotICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQotICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIHJhbmRvbSkKLSAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41MC4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41My4wKQotICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQotICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIHJlZ2V4IHJhbmRvbSkKLSAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9USU1FUl9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41My4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41NC4wKQotICAgIHNldChfQm9vc3RfQVRPTUlDX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9DSFJPTk9fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCi0gICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgcmVnZXggcmFuZG9tKQotICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9USU1FUl9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41NC4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41NS4wKQotICAgIHNldChfQm9vc3RfQVRPTUlDX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9DSFJPTk9fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCi0gICAgc2V0KF9Cb29zdF9MT0dfREVQRU5ERU5DSUVTIGxvZ19zZXR1cCBkYXRlX3RpbWUgc3lzdGVtIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubykKLSAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCByZWdleCByYW5kb20pCi0gICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtKQotICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41NS4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41Ni4wKQotICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9DT1JPVVRJTkVfREVQRU5ERU5DSUVTIGNvbnRleHQgc3lzdGVtKQotICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKLSAgICBzZXQoX0Jvb3N0X0xPR19ERVBFTkRFTkNJRVMgbG9nX3NldHVwIGRhdGVfdGltZSBzeXN0ZW0gZmlsZXN5c3RlbSB0aHJlYWQgcmVnZXggY2hyb25vKQotICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIHJlZ2V4IHJhbmRvbSkKLSAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICBlbHNlaWYoTk9UIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjU2LjAgQU5EIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjU5LjApCi0gICAgc2V0KF9Cb29zdF9DSFJPTk9fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQotICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBsb2dfc2V0dXAgZGF0ZV90aW1lIHN5c3RlbSBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8pCi0gICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgYXRvbWljKQotICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfUkFORE9NX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtKQotICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41OS4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42MC4wKQotICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9DT1JPVVRJTkVfREVQRU5ERU5DSUVTIGNvbnRleHQgc3lzdGVtKQotICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKLSAgICBzZXQoX0Jvb3N0X0xPR19ERVBFTkRFTkNJRVMgbG9nX3NldHVwIGRhdGVfdGltZSBzeXN0ZW0gZmlsZXN5c3RlbSB0aHJlYWQgcmVnZXggY2hyb25vIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9SQU5ET01fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICBlbHNlaWYoTk9UIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjYwLjAgQU5EIEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjYxLjApCi0gICAgc2V0KF9Cb29zdF9DSFJPTk9fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQotICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUgbG9nX3NldHVwIHN5c3RlbSBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8gYXRvbWljKQotICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X1JBTkRPTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9USU1FUl9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gIGVsc2VpZihOT1QgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNjEuMCBBTkQgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNjIuMCkKLSAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfQ09OVEVYVF9ERVBFTkRFTkNJRVMgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfQ09ST1VUSU5FX0RFUEVOREVOQ0lFUyBjb250ZXh0IHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCi0gICAgc2V0KF9Cb29zdF9MT0dfREVQRU5ERU5DSUVTIGRhdGVfdGltZSBsb2dfc2V0dXAgc3lzdGVtIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubyBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgYXRvbWljKQotICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfUkFORE9NX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gIGVsc2VpZihOT1QgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNjIuMCBBTkQgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNjMuMCkKLSAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfQ09OVEVYVF9ERVBFTkRFTkNJRVMgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfQ09ST1VUSU5FX0RFUEVOREVOQ0lFUyBjb250ZXh0IHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0ZJQkVSX0RFUEVOREVOQ0lFUyBjb250ZXh0IHRocmVhZCBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSkKLSAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCi0gICAgc2V0KF9Cb29zdF9MT0dfREVQRU5ERU5DSUVTIGRhdGVfdGltZSBsb2dfc2V0dXAgc3lzdGVtIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubyBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgYXRvbWljKQotICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfUkFORE9NX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gIGVsc2VpZihOT1QgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNjMuMCBBTkQgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNjUuMCkKLSAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfQ09OVEVYVF9ERVBFTkRFTkNJRVMgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfQ09ST1VUSU5FX0RFUEVOREVOQ0lFUyBjb250ZXh0IHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0NPUk9VVElORTJfREVQRU5ERU5DSUVTIGNvbnRleHQgZmliZXIgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfRklCRVJfREVQRU5ERU5DSUVTIGNvbnRleHQgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKLSAgICBzZXQoX0Jvb3N0X0xPR19ERVBFTkRFTkNJRVMgZGF0ZV90aW1lIGxvZ19zZXR1cCBzeXN0ZW0gZmlsZXN5c3RlbSB0aHJlYWQgcmVnZXggY2hyb25vIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9SQU5ET01fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42NS4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42Ny4wKQotICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9DT05URVhUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9DT1JPVVRJTkVfREVQRU5ERU5DSUVTIGNvbnRleHQgc3lzdGVtKQotICAgIHNldChfQm9vc3RfRklCRVJfREVQRU5ERU5DSUVTIGNvbnRleHQgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKLSAgICBzZXQoX0Jvb3N0X0xPR19ERVBFTkRFTkNJRVMgZGF0ZV90aW1lIGxvZ19zZXR1cCBzeXN0ZW0gZmlsZXN5c3RlbSB0aHJlYWQgcmVnZXggY2hyb25vIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9OVU1QWV9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259KQotICAgIHNldChfQm9vc3RfUkFORE9NX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtKQotICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42Ny4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42OC4wKQotICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9DT05URVhUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9DT1JPVVRJTkVfREVQRU5ERU5DSUVTIGNvbnRleHQgc3lzdGVtKQotICAgIHNldChfQm9vc3RfRklCRVJfREVQRU5ERU5DSUVTIGNvbnRleHQgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKLSAgICBzZXQoX0Jvb3N0X0xPR19ERVBFTkRFTkNJRVMgZGF0ZV90aW1lIGxvZ19zZXR1cCBzeXN0ZW0gZmlsZXN5c3RlbSB0aHJlYWQgcmVnZXggY2hyb25vIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCi0gICAgc2V0KF9Cb29zdF9OVU1QWV9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259KQotICAgIHNldChfQm9vc3RfUkFORE9NX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtKQotICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42OC4wIEFORCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42OS4wKQotICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9DT05URVhUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCi0gICAgc2V0KF9Cb29zdF9DT05UUkFDVF9ERVBFTkRFTkNJRVMgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfQ09ST1VUSU5FX0RFUEVOREVOQ0lFUyBjb250ZXh0IHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0ZJQkVSX0RFUEVOREVOQ0lFUyBjb250ZXh0IHRocmVhZCBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSkKLSAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCi0gICAgc2V0KF9Cb29zdF9MT0dfREVQRU5ERU5DSUVTIGRhdGVfdGltZSBsb2dfc2V0dXAgc3lzdGVtIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubyBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgYXRvbWljKQotICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQotICAgIHNldChfQm9vc3RfTlVNUFlfREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSkKLSAgICBzZXQoX0Jvb3N0X1JBTkRPTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQotICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9USU1FUl9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSkKLSAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gIGVsc2VpZihOT1QgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNjkuMCBBTkQgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNzAuMCkKLSAgICBzZXQoX0Jvb3N0X0NPTlRSQUNUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSkKLSAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCkKLSAgICBzZXQoX0Jvb3N0X0ZJQkVSX0RFUEVOREVOQ0lFUyBjb250ZXh0KQotICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKLSAgICBzZXQoX0Jvb3N0X0xPR19ERVBFTkRFTkNJRVMgZGF0ZV90aW1lIGxvZ19zZXR1cCBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8gYXRvbWljKQotICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X05VTVBZX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0pCi0gICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCi0gIGVsc2VpZihOT1QgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNzAuMCBBTkQgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNzIuMCkKLSAgICBzZXQoX0Jvb3N0X0NPTlRSQUNUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSkKLSAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCkKLSAgICBzZXQoX0Jvb3N0X0ZJQkVSX0RFUEVOREVOQ0lFUyBjb250ZXh0KQotICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKLSAgICBzZXQoX0Jvb3N0X0xPR19ERVBFTkRFTkNJRVMgZGF0ZV90aW1lIGxvZ19zZXR1cCBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8gYXRvbWljKQotICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X05VTVBZX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubykKLSAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgZWxzZWlmKE5PVCBCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS43Mi4wKQotICAgIHNldChfQm9vc3RfQ09OVFJBQ1RfREVQRU5ERU5DSUVTIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lKQotICAgIHNldChfQm9vc3RfQ09ST1VUSU5FX0RFUEVOREVOQ0lFUyBjb250ZXh0KQotICAgIHNldChfQm9vc3RfRklCRVJfREVQRU5ERU5DSUVTIGNvbnRleHQpCi0gICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQotICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUgbG9nX3NldHVwIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubyBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgY2hyb25vIGF0b21pYykKLSAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKLSAgICBzZXQoX0Jvb3N0X05VTVBZX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0pCi0gICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQotICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubykKLSAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCi0gICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKLSAgICBpZihOT1QgQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNzMuMCkKLSAgICAgIG1lc3NhZ2UoV0FSTklORyAiTmV3IEJvb3N0IHZlcnNpb24gbWF5IGhhdmUgaW5jb3JyZWN0IG9yIG1pc3NpbmcgZGVwZW5kZW5jaWVzIGFuZCBpbXBvcnRlZCB0YXJnZXRzIikKKyAgaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcpCisgICAgaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuMzMuMCkKKyAgICAgIG1lc3NhZ2UoV0FSTklORyAiSW1wb3J0ZWQgdGFyZ2V0cyBhbmQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlIGZvciBCb29zdCB2ZXJzaW9uICR7Qm9vc3RfVkVSU0lPTl9TVFJJTkd9IChhbGwgdmVyc2lvbnMgb2xkZXIgdGhhbiAxLjMzKSIpCisgICAgICBzZXQoX0Jvb3N0X0lNUE9SVEVEX1RBUkdFVFMgRkFMU0UpCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjM1LjApCisgICAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXggdGhyZWFkKQorICAgICAgc2V0KF9Cb29zdF9SRUdFWF9ERVBFTkRFTkNJRVMgdGhyZWFkKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHRocmVhZCkKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjM2LjApCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHRocmVhZCkKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjM4LjApCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsKQorICAgICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gdGhyZWFkKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNDMuMCkKKyAgICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQorICAgICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwpCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gdGhyZWFkIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjQ0LjApCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIHJhbmRvbSkKKyAgICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSB0aHJlYWQgZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNDUuMCkKKyAgICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQorICAgICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgcmFuZG9tIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbiBmaWxlc3lzdGVtIHN5c3RlbSB0aHJlYWQgZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNDcuMCkKKyAgICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQorICAgICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgcmFuZG9tKQorICAgICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjQ4LjApCisgICAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCByYW5kb20pCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNTAuMCkKKyAgICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIHJhbmRvbSkKKyAgICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9USU1FUl9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNTMuMCkKKyAgICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIHJlZ2V4IHJhbmRvbSkKKyAgICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNTQuMCkKKyAgICAgIHNldChfQm9vc3RfQVRPTUlDX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCByZWdleCByYW5kb20pCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgIGVsc2VpZihCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS41NS4wKQorICAgICAgc2V0KF9Cb29zdF9BVE9NSUNfREVQRU5ERU5DSUVTIHRocmVhZCBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBsb2dfc2V0dXAgZGF0ZV90aW1lIHN5c3RlbSBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8pCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCByZWdleCByYW5kb20pCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNTYuMCkKKyAgICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBsb2dfc2V0dXAgZGF0ZV90aW1lIHN5c3RlbSBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8pCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCByZWdleCByYW5kb20pCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNTkuMCkKKyAgICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBsb2dfc2V0dXAgZGF0ZV90aW1lIHN5c3RlbSBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8pCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9SQU5ET01fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjYwLjApCisgICAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9DT1JPVVRJTkVfREVQRU5ERU5DSUVTIGNvbnRleHQgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCisgICAgICBzZXQoX0Jvb3N0X0xPR19ERVBFTkRFTkNJRVMgbG9nX3NldHVwIGRhdGVfdGltZSBzeXN0ZW0gZmlsZXN5c3RlbSB0aHJlYWQgcmVnZXggY2hyb25vIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X1JBTkRPTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfVElNRVJfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNjEuMCkKKyAgICAgIHNldChfQm9vc3RfQ0hST05PX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUgbG9nX3NldHVwIHN5c3RlbSBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8gYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfUkFORE9NX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9USU1FUl9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgIGVsc2VpZihCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42Mi4wKQorICAgICAgc2V0KF9Cb29zdF9DSFJPTk9fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfQ09OVEVYVF9ERVBFTkRFTkNJRVMgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9DT1JPVVRJTkVfREVQRU5ERU5DSUVTIGNvbnRleHQgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9GSUxFU1lTVEVNX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0lPU1RSRUFNU19ERVBFTkRFTkNJRVMgcmVnZXgpCisgICAgICBzZXQoX0Jvb3N0X0xPR19ERVBFTkRFTkNJRVMgZGF0ZV90aW1lIGxvZ19zZXR1cCBzeXN0ZW0gZmlsZXN5c3RlbSB0aHJlYWQgcmVnZXggY2hyb25vIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X1JBTkRPTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgIGVsc2VpZihCb29zdF9WRVJTSU9OX1NUUklORyBWRVJTSU9OX0xFU1MgMS42My4wKQorICAgICAgc2V0KF9Cb29zdF9DSFJPTk9fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfQ09OVEVYVF9ERVBFTkRFTkNJRVMgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9DT1JPVVRJTkVfREVQRU5ERU5DSUVTIGNvbnRleHQgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9GSUJFUl9ERVBFTkRFTkNJRVMgY29udGV4dCB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUgbG9nX3NldHVwIHN5c3RlbSBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8gYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfUkFORE9NX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjY1LjApCisgICAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9DT05URVhUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0NPUk9VVElORTJfREVQRU5ERU5DSUVTIGNvbnRleHQgZmliZXIgdGhyZWFkIGNocm9ubyBzeXN0ZW0gZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9GSUJFUl9ERVBFTkRFTkNJRVMgY29udGV4dCB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X0ZJTEVTWVNURU1fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUgbG9nX3NldHVwIHN5c3RlbSBmaWxlc3lzdGVtIHRocmVhZCByZWdleCBjaHJvbm8gYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9NQVRIX0RFUEVOREVOQ0lFUyBtYXRoX2M5OSBtYXRoX2M5OWYgbWF0aF9jOTlsIG1hdGhfdHIxIG1hdGhfdHIxZiBtYXRoX3RyMWwgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9NUElfREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X01QSV9QWVRIT05fREVQRU5ERU5DSUVTIHB5dGhvbiR7Y29tcG9uZW50X3B5dGhvbl92ZXJzaW9ufSBtcGkgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfUkFORE9NX0RFUEVOREVOQ0lFUyBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjY3LjApCisgICAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9DT05URVhUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0ZJQkVSX0RFUEVOREVOQ0lFUyBjb250ZXh0IHRocmVhZCBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQorICAgICAgc2V0KF9Cb29zdF9MT0dfREVQRU5ERU5DSUVTIGRhdGVfdGltZSBsb2dfc2V0dXAgc3lzdGVtIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubyBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9OVU1QWV9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259KQorICAgICAgc2V0KF9Cb29zdF9SQU5ET01fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjY4LjApCisgICAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9DT05URVhUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0ZJQkVSX0RFUEVOREVOQ0lFUyBjb250ZXh0IHRocmVhZCBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQorICAgICAgc2V0KF9Cb29zdF9MT0dfREVQRU5ERU5DSUVTIGRhdGVfdGltZSBsb2dfc2V0dXAgc3lzdGVtIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubyBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9OVU1QWV9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259KQorICAgICAgc2V0KF9Cb29zdF9SQU5ET01fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjY5LjApCisgICAgICBzZXQoX0Jvb3N0X0NIUk9OT19ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9DT05URVhUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X0NPTlRSQUNUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIHN5c3RlbSBkYXRlX3RpbWUpCisgICAgICBzZXQoX0Jvb3N0X0NPUk9VVElORV9ERVBFTkRFTkNJRVMgY29udGV4dCBzeXN0ZW0pCisgICAgICBzZXQoX0Jvb3N0X0ZJQkVSX0RFUEVOREVOQ0lFUyBjb250ZXh0IHRocmVhZCBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfRklMRVNZU1RFTV9ERVBFTkRFTkNJRVMgc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQorICAgICAgc2V0KF9Cb29zdF9MT0dfREVQRU5ERU5DSUVTIGRhdGVfdGltZSBsb2dfc2V0dXAgc3lzdGVtIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubyBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9OVU1QWV9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259KQorICAgICAgc2V0KF9Cb29zdF9SQU5ET01fREVQRU5ERU5DSUVTIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfVEhSRUFEX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtIGRhdGVfdGltZSBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8gc3lzdGVtKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjcwLjApCisgICAgICBzZXQoX0Jvb3N0X0NPTlRSQUNUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfQ09ST1VUSU5FX0RFUEVOREVOQ0lFUyBjb250ZXh0KQorICAgICAgc2V0KF9Cb29zdF9GSUJFUl9ERVBFTkRFTkNJRVMgY29udGV4dCkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUgbG9nX3NldHVwIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubyBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9OVU1QWV9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259KQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9USU1FUl9ERVBFTkRFTkNJRVMgY2hyb25vIHN5c3RlbSkKKyAgICAgIHNldChfQm9vc3RfV0FWRV9ERVBFTkRFTkNJRVMgZmlsZXN5c3RlbSBzZXJpYWxpemF0aW9uIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfV1NFUklBTElaQVRJT05fREVQRU5ERU5DSUVTIHNlcmlhbGl6YXRpb24pCisgICAgZWxzZWlmKEJvb3N0X1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAxLjcyLjApCisgICAgICBzZXQoX0Jvb3N0X0NPTlRSQUNUX0RFUEVOREVOQ0lFUyB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSkKKyAgICAgIHNldChfQm9vc3RfQ09ST1VUSU5FX0RFUEVOREVOQ0lFUyBjb250ZXh0KQorICAgICAgc2V0KF9Cb29zdF9GSUJFUl9ERVBFTkRFTkNJRVMgY29udGV4dCkKKyAgICAgIHNldChfQm9vc3RfSU9TVFJFQU1TX0RFUEVOREVOQ0lFUyByZWdleCkKKyAgICAgIHNldChfQm9vc3RfTE9HX0RFUEVOREVOQ0lFUyBkYXRlX3RpbWUgbG9nX3NldHVwIGZpbGVzeXN0ZW0gdGhyZWFkIHJlZ2V4IGNocm9ubyBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01BVEhfREVQRU5ERU5DSUVTIG1hdGhfYzk5IG1hdGhfYzk5ZiBtYXRoX2M5OWwgbWF0aF90cjEgbWF0aF90cjFmIG1hdGhfdHIxbCBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9OVU1QWV9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259KQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9USU1FUl9ERVBFTkRFTkNJRVMgY2hyb25vKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTIDEuNzMuMCkKKyAgICAgIHNldChfQm9vc3RfQ09OVFJBQ1RfREVQRU5ERU5DSUVTIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9DT1JPVVRJTkVfREVQRU5ERU5DSUVTIGNvbnRleHQpCisgICAgICBzZXQoX0Jvb3N0X0ZJQkVSX0RFUEVOREVOQ0lFUyBjb250ZXh0KQorICAgICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQorICAgICAgc2V0KF9Cb29zdF9MT0dfREVQRU5ERU5DSUVTIGRhdGVfdGltZSBsb2dfc2V0dXAgZmlsZXN5c3RlbSB0aHJlYWQgcmVnZXggY2hyb25vIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIGNocm9ubyBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X01QSV9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259IG1waSBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9OVU1QWV9ERVBFTkRFTkNJRVMgcHl0aG9uJHtjb21wb25lbnRfcHl0aG9uX3ZlcnNpb259KQorICAgICAgc2V0KF9Cb29zdF9USFJFQURfREVQRU5ERU5DSUVTIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9USU1FUl9ERVBFTkRFTkNJRVMgY2hyb25vKQorICAgICAgc2V0KF9Cb29zdF9XQVZFX0RFUEVOREVOQ0lFUyBmaWxlc3lzdGVtIHNlcmlhbGl6YXRpb24gdGhyZWFkIGNocm9ubyBkYXRlX3RpbWUgYXRvbWljKQorICAgICAgc2V0KF9Cb29zdF9XU0VSSUFMSVpBVElPTl9ERVBFTkRFTkNJRVMgc2VyaWFsaXphdGlvbikKKyAgICBlbHNlKCkKKyAgICAgIHNldChfQm9vc3RfQ09OVFJBQ1RfREVQRU5ERU5DSUVTIHRocmVhZCBjaHJvbm8gZGF0ZV90aW1lKQorICAgICAgc2V0KF9Cb29zdF9DT1JPVVRJTkVfREVQRU5ERU5DSUVTIGNvbnRleHQpCisgICAgICBzZXQoX0Jvb3N0X0ZJQkVSX0RFUEVOREVOQ0lFUyBjb250ZXh0KQorICAgICAgc2V0KF9Cb29zdF9JT1NUUkVBTVNfREVQRU5ERU5DSUVTIHJlZ2V4KQorICAgICAgc2V0KF9Cb29zdF9MT0dfREVQRU5ERU5DSUVTIGRhdGVfdGltZSBsb2dfc2V0dXAgZmlsZXN5c3RlbSB0aHJlYWQgcmVnZXggY2hyb25vIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfTUFUSF9ERVBFTkRFTkNJRVMgbWF0aF9jOTkgbWF0aF9jOTlmIG1hdGhfYzk5bCBtYXRoX3RyMSBtYXRoX3RyMWYgbWF0aF90cjFsIGF0b21pYykKKyAgICAgIHNldChfQm9vc3RfTVBJX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgICAgc2V0KF9Cb29zdF9NUElfUFlUSE9OX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0gbXBpIHNlcmlhbGl6YXRpb24pCisgICAgICBzZXQoX0Jvb3N0X05VTVBZX0RFUEVOREVOQ0lFUyBweXRob24ke2NvbXBvbmVudF9weXRob25fdmVyc2lvbn0pCisgICAgICBzZXQoX0Jvb3N0X1RIUkVBRF9ERVBFTkRFTkNJRVMgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X1RJTUVSX0RFUEVOREVOQ0lFUyBjaHJvbm8pCisgICAgICBzZXQoX0Jvb3N0X1dBVkVfREVQRU5ERU5DSUVTIGZpbGVzeXN0ZW0gc2VyaWFsaXphdGlvbiB0aHJlYWQgY2hyb25vIGRhdGVfdGltZSBhdG9taWMpCisgICAgICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0RFUEVOREVOQ0lFUyBzZXJpYWxpemF0aW9uKQorICAgICAgaWYoQm9vc3RfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEuNzQuMCkKKyAgICAgICAgbWVzc2FnZShXQVJOSU5HICJOZXcgQm9vc3QgdmVyc2lvbiBtYXkgaGF2ZSBpbmNvcnJlY3Qgb3IgbWlzc2luZyBkZXBlbmRlbmNpZXMgYW5kIGltcG9ydGVkIHRhcmdldHMiKQorICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCkBAIC0xMjIxLDYgKzEyNDgsNyBAQAogICBzZXQoX0Jvb3N0X01QSV9IRUFERVJTICAgICAgICAgICAgICAgICAiYm9vc3QvbXBpLmhwcCIpCiAgIHNldChfQm9vc3RfTVBJX1BZVEhPTl9IRUFERVJTICAgICAgICAgICJib29zdC9tcGkvcHl0aG9uL2NvbmZpZy5ocHAiKQogICBzZXQoX0Jvb3N0X05VTVBZX0hFQURFUlMgICAgICAgICAgICAgICAiYm9vc3QvcHl0aG9uL251bXB5LmhwcCIpCisgIHNldChfQm9vc3RfTk9XSURFX0hFQURFUlMgICAgICAgICAgICAgICJib29zdC9ub3dpZGUvY3N0ZGxpYi5ocHAiKQogICBzZXQoX0Jvb3N0X1BSR19FWEVDX01PTklUT1JfSEVBREVSUyAgICAiYm9vc3QvdGVzdC9wcmdfZXhlY19tb25pdG9yLmhwcCIpCiAgIHNldChfQm9vc3RfUFJPR1JBTV9PUFRJT05TX0hFQURFUlMgICAgICJib29zdC9wcm9ncmFtX29wdGlvbnMuaHBwIikKICAgc2V0KF9Cb29zdF9QWVRIT05fSEVBREVSUyAgICAgICAgICAgICAgImJvb3N0L3B5dGhvbi5ocHAiKQpAQCAtMTI0MiwxMCArMTI3MCw4IEBACiAgIHNldChfQm9vc3RfVU5JVF9URVNUX0ZSQU1FV09SS19IRUFERVJTICJib29zdC90ZXN0L2ZyYW1ld29yay5ocHAiKQogICBzZXQoX0Jvb3N0X1dBVkVfSEVBREVSUyAgICAgICAgICAgICAgICAiYm9vc3Qvd2F2ZS5ocHAiKQogICBzZXQoX0Jvb3N0X1dTRVJJQUxJWkFUSU9OX0hFQURFUlMgICAgICAiYm9vc3QvYXJjaGl2ZS90ZXh0X3dpYXJjaGl2ZS5ocHAiKQotICBpZihXSU4zMikKLSAgICBzZXQoX0Jvb3N0X0JaSVAyX0hFQURFUlMgICAgICAgICAgICAgImJvb3N0L2lvc3RyZWFtcy9maWx0ZXIvYnppcDIuaHBwIikKLSAgICBzZXQoX0Jvb3N0X1pMSUJfSEVBREVSUyAgICAgICAgICAgICAgImJvb3N0L2lvc3RyZWFtcy9maWx0ZXIvemxpYi5ocHAiKQotICBlbmRpZigpCisgIHNldChfQm9vc3RfQlpJUDJfSEVBREVSUyAgICAgICAgICAgICAgICJib29zdC9pb3N0cmVhbXMvZmlsdGVyL2J6aXAyLmhwcCIpCisgIHNldChfQm9vc3RfWkxJQl9IRUFERVJTICAgICAgICAgICAgICAgICJib29zdC9pb3N0cmVhbXMvZmlsdGVyL3psaWIuaHBwIikKIAogICBzdHJpbmcoVE9VUFBFUiAke2NvbXBvbmVudH0gdXBwZXJjb21wb25lbnQpCiAgIHNldCgke19oZHJzfSAke19Cb29zdF8ke3VwcGVyY29tcG9uZW50fV9IRUFERVJTfSBQQVJFTlRfU0NPUEUpCkBAIC0xNDI5LDcgKzE0NTUsNyBAQAogICAjIF9Cb29zdF9DT01QT05FTlRfSEVBREVSUy4gIFNlZSB0aGUgaW5zdHJ1Y3Rpb25zIGF0IHRoZSB0b3Agb2YKICAgIyBfQm9vc3RfQ09NUE9ORU5UX0RFUEVOREVOQ0lFUy4KICAgc2V0KF9Cb29zdF9LTk9XTl9WRVJTSU9OUyAke0Jvb3N0X0FERElUSU9OQUxfVkVSU0lPTlN9Ci0gICAgIjEuNzIuMCIgIjEuNzIiICIxLjcxLjAiICIxLjcxIiAiMS43MC4wIiAiMS43MCIgIjEuNjkuMCIgIjEuNjkiCisgICAgIjEuNzMuMCIgIjEuNzMiICIxLjcyLjAiICIxLjcyIiAiMS43MS4wIiAiMS43MSIgIjEuNzAuMCIgIjEuNzAiICIxLjY5LjAiICIxLjY5IgogICAgICIxLjY4LjAiICIxLjY4IiAiMS42Ny4wIiAiMS42NyIgIjEuNjYuMCIgIjEuNjYiICIxLjY1LjEiICIxLjY1LjAiICIxLjY1IgogICAgICIxLjY0LjAiICIxLjY0IiAiMS42My4wIiAiMS42MyIgIjEuNjIuMCIgIjEuNjIiICIxLjYxLjAiICIxLjYxIiAiMS42MC4wIiAiMS42MCIKICAgICAiMS41OS4wIiAiMS41OSIgIjEuNTguMCIgIjEuNTgiICIxLjU3LjAiICIxLjU3IiAiMS41Ni4wIiAiMS41NiIgIjEuNTUuMCIgIjEuNTUiCkBAIC0xNDY3LDQzICsxNDkzLDYgQEAKIF9Cb29zdF9ERUJVR19QUklOVF9WQVIoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfTElORX0iICJCb29zdF9BRERJVElPTkFMX1ZFUlNJT05TIikKIF9Cb29zdF9ERUJVR19QUklOVF9WQVIoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfTElORX0iICJCb29zdF9OT19TWVNURU1fUEFUSFMiKQogCi0jIFN1cHBseSBCb29zdF9MSUJfRElBR05PU1RJQ19ERUZJTklUSU9OUyBhcyBhIGNvbnZlbmllbmNlIHRhcmdldC4gSXQKLSMgd2lsbCBvbmx5IGNvbnRhaW4gYW55IGludGVyZmFjZSBkZWZpbml0aW9ucyBvbiBXSU4zMiwgYnV0IGlzIGNyZWF0ZWQKLSMgb24gYWxsIHBsYXRmb3JtcyB0byBrZWVwIGVuZCB1c2VyIGNvZGUgZnJlZSBmcm9tIHBsYXRmb3JtIGRlcGVuZGVudAotIyBjb2RlLiAgQWxzbyBwcm92aWRlIGNvbnZlbmllbmNlIHRhcmdldHMgdG8gZGlzYWJsZSBhdXRvbGlua2luZyBhbmQKLSMgZW5hYmxlIGR5bmFtaWMgbGlua2luZy4KLWlmKE5PVCBUQVJHRVQgQm9vc3Q6OmRpYWdub3N0aWNfZGVmaW5pdGlvbnMpCi0gIGFkZF9saWJyYXJ5KEJvb3N0OjpkaWFnbm9zdGljX2RlZmluaXRpb25zIElOVEVSRkFDRSBJTVBPUlRFRCkKLSAgYWRkX2xpYnJhcnkoQm9vc3Q6OmRpc2FibGVfYXV0b2xpbmtpbmcgSU5URVJGQUNFIElNUE9SVEVEKQotICBhZGRfbGlicmFyeShCb29zdDo6ZHluYW1pY19saW5raW5nIElOVEVSRkFDRSBJTVBPUlRFRCkKLSAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEJvb3N0OjpkeW5hbWljX2xpbmtpbmcgUFJPUEVSVElFUwotICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TICJCT09TVF9BTExfRFlOX0xJTksiKQotZW5kaWYoKQotaWYoV0lOMzIpCi0gICMgSW4gd2luZG93cywgYXV0b21hdGljIGxpbmtpbmcgaXMgcGVyZm9ybWVkLCBzbyB5b3UgZG8gbm90IGhhdmUKLSAgIyB0byBzcGVjaWZ5IHRoZSBsaWJyYXJpZXMuICBJZiB5b3UgYXJlIGxpbmtpbmcgdG8gYSBkeW5hbWljCi0gICMgcnVudGltZSwgdGhlbiB5b3UgY2FuIGNob29zZSB0byBsaW5rIHRvIGVpdGhlciBhIHN0YXRpYyBvciBhCi0gICMgZHluYW1pYyBCb29zdCBsaWJyYXJ5LCB0aGUgZGVmYXVsdCBpcyB0byBkbyBhIHN0YXRpYyBsaW5rLiAgWW91Ci0gICMgY2FuIGFsdGVyIHRoaXMgZm9yIGEgc3BlY2lmaWMgbGlicmFyeSAid2hhdGV2ZXIiIGJ5IGRlZmluaW5nCi0gICMgQk9PU1RfV0hBVEVWRVJfRFlOX0xJTksgdG8gZm9yY2UgQm9vc3QgbGlicmFyeSAid2hhdGV2ZXIiIHRvIGJlCi0gICMgbGlua2VkIGR5bmFtaWNhbGx5LiAgQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGZvcmNlIGFsbCBCb29zdAotICAjIGxpYnJhcmllcyB0byBkeW5hbWljIGxpbmsgYnkgZGVmaW5pbmcgQk9PU1RfQUxMX0RZTl9MSU5LLgotCi0gICMgVGhpcyBmZWF0dXJlIGNhbiBiZSBkaXNhYmxlZCBmb3IgQm9vc3QgbGlicmFyeSAid2hhdGV2ZXIiIGJ5Ci0gICMgZGVmaW5pbmcgQk9PU1RfV0hBVEVWRVJfTk9fTElCLCBvciBmb3IgYWxsIG9mIEJvb3N0IGJ5IGRlZmluaW5nCi0gICMgQk9PU1RfQUxMX05PX0xJQi4KLQotICAjIElmIHlvdSB3YW50IHRvIG9ic2VydmUgd2hpY2ggbGlicmFyaWVzIGFyZSBiZWluZyBsaW5rZWQgYWdhaW5zdAotICAjIHRoZW4gZGVmaW5pbmcgQk9PU1RfTElCX0RJQUdOT1NUSUMgd2lsbCBjYXVzZSB0aGUgYXV0by1saW5raW5nCi0gICMgY29kZSB0byBlbWl0IGEgI3ByYWdtYSBtZXNzYWdlIGVhY2ggdGltZSBhIGxpYnJhcnkgaXMgc2VsZWN0ZWQKLSAgIyBmb3IgbGlua2luZy4KLSAgc2V0KEJvb3N0X0xJQl9ESUFHTk9TVElDX0RFRklOSVRJT05TICItREJPT1NUX0xJQl9ESUFHTk9TVElDIikKLSAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEJvb3N0OjpkaWFnbm9zdGljX2RlZmluaXRpb25zIFBST1BFUlRJRVMKLSAgICBJTlRFUkZBQ0VfQ09NUElMRV9ERUZJTklUSU9OUyAiQk9PU1RfTElCX0RJQUdOT1NUSUMiKQotICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQm9vc3Q6OmRpc2FibGVfYXV0b2xpbmtpbmcgUFJPUEVSVElFUwotICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TICJCT09TVF9BTExfTk9fTElCIikKLWVuZGlmKCkKLQogY21ha2VfcG9saWN5KEdFVCBDTVAwMDc0IF9Cb29zdF9DTVAwMDc0KQogaWYoTk9UICJ4JHtfQm9vc3RfQ01QMDA3NH14IiBTVFJFUVVBTCAieE5FV3giKQogICBfQm9vc3RfQ0hFQ0tfU1BFTExJTkcoQm9vc3RfUk9PVCkKQEAgLTE2ODAsMTAgKzE2NjksMTcgQEAKICMgIFByZWZpeCBpbml0aWFsaXphdGlvbgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc2V0KEJvb3N0X0xJQl9QUkVGSVggIiIpCi1pZiAoIChHSFNNVUxUSSBBTkQgQm9vc3RfVVNFX1NUQVRJQ19MSUJTKSBPUgotICAgIChXSU4zMiBBTkQgQm9vc3RfVVNFX1NUQVRJQ19MSUJTIEFORCBOT1QgQ1lHV0lOKSApCi0gIHNldChCb29zdF9MSUJfUFJFRklYICJsaWIiKQoraWYgKCBOT1QgREVGSU5FRCBCb29zdF9MSUJfUFJFRklYICkKKyAgIyBCb29zdCdzIHN0YXRpYyBsaWJyYXJpZXMgdXNlIGEgImxpYiIgcHJlZml4IG9uIERMTCBwbGF0Zm9ybXMKKyAgIyB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gdGhlIERMTCBpbXBvcnQgbGlicmFyaWVzLgorICBpZiAoQm9vc3RfVVNFX1NUQVRJQ19MSUJTIEFORCAoCisgICAgICAoV0lOMzIgQU5EIE5PVCBDWUdXSU4pCisgICAgICBPUiBHSFNNVUxUSQorICAgICAgKSkKKyAgICBzZXQoQm9vc3RfTElCX1BSRUZJWCAibGliIikKKyAgZWxzZSgpCisgICAgc2V0KEJvb3N0X0xJQl9QUkVGSVggIiIpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogaWYgKCBOT1QgQm9vc3RfTkFNRVNQQUNFICkKQEAgLTIyOTYsNiArMjI5Miw0MyBAQAogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCisKKyAgIyBTdXBwbHkgQm9vc3RfTElCX0RJQUdOT1NUSUNfREVGSU5JVElPTlMgYXMgYSBjb252ZW5pZW5jZSB0YXJnZXQuIEl0CisgICMgd2lsbCBvbmx5IGNvbnRhaW4gYW55IGludGVyZmFjZSBkZWZpbml0aW9ucyBvbiBXSU4zMiwgYnV0IGlzIGNyZWF0ZWQKKyAgIyBvbiBhbGwgcGxhdGZvcm1zIHRvIGtlZXAgZW5kIHVzZXIgY29kZSBmcmVlIGZyb20gcGxhdGZvcm0gZGVwZW5kZW50CisgICMgY29kZS4gIEFsc28gcHJvdmlkZSBjb252ZW5pZW5jZSB0YXJnZXRzIHRvIGRpc2FibGUgYXV0b2xpbmtpbmcgYW5kCisgICMgZW5hYmxlIGR5bmFtaWMgbGlua2luZy4KKyAgaWYoTk9UIFRBUkdFVCBCb29zdDo6ZGlhZ25vc3RpY19kZWZpbml0aW9ucykKKyAgICBhZGRfbGlicmFyeShCb29zdDo6ZGlhZ25vc3RpY19kZWZpbml0aW9ucyBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgYWRkX2xpYnJhcnkoQm9vc3Q6OmRpc2FibGVfYXV0b2xpbmtpbmcgSU5URVJGQUNFIElNUE9SVEVEKQorICAgIGFkZF9saWJyYXJ5KEJvb3N0OjpkeW5hbWljX2xpbmtpbmcgSU5URVJGQUNFIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhCb29zdDo6ZHluYW1pY19saW5raW5nIFBST1BFUlRJRVMKKyAgICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TICJCT09TVF9BTExfRFlOX0xJTksiKQorICBlbmRpZigpCisgIGlmKFdJTjMyKQorICAgICMgSW4gd2luZG93cywgYXV0b21hdGljIGxpbmtpbmcgaXMgcGVyZm9ybWVkLCBzbyB5b3UgZG8gbm90IGhhdmUKKyAgICAjIHRvIHNwZWNpZnkgdGhlIGxpYnJhcmllcy4gIElmIHlvdSBhcmUgbGlua2luZyB0byBhIGR5bmFtaWMKKyAgICAjIHJ1bnRpbWUsIHRoZW4geW91IGNhbiBjaG9vc2UgdG8gbGluayB0byBlaXRoZXIgYSBzdGF0aWMgb3IgYQorICAgICMgZHluYW1pYyBCb29zdCBsaWJyYXJ5LCB0aGUgZGVmYXVsdCBpcyB0byBkbyBhIHN0YXRpYyBsaW5rLiAgWW91CisgICAgIyBjYW4gYWx0ZXIgdGhpcyBmb3IgYSBzcGVjaWZpYyBsaWJyYXJ5ICJ3aGF0ZXZlciIgYnkgZGVmaW5pbmcKKyAgICAjIEJPT1NUX1dIQVRFVkVSX0RZTl9MSU5LIHRvIGZvcmNlIEJvb3N0IGxpYnJhcnkgIndoYXRldmVyIiB0byBiZQorICAgICMgbGlua2VkIGR5bmFtaWNhbGx5LiAgQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGZvcmNlIGFsbCBCb29zdAorICAgICMgbGlicmFyaWVzIHRvIGR5bmFtaWMgbGluayBieSBkZWZpbmluZyBCT09TVF9BTExfRFlOX0xJTksuCisKKyAgICAjIFRoaXMgZmVhdHVyZSBjYW4gYmUgZGlzYWJsZWQgZm9yIEJvb3N0IGxpYnJhcnkgIndoYXRldmVyIiBieQorICAgICMgZGVmaW5pbmcgQk9PU1RfV0hBVEVWRVJfTk9fTElCLCBvciBmb3IgYWxsIG9mIEJvb3N0IGJ5IGRlZmluaW5nCisgICAgIyBCT09TVF9BTExfTk9fTElCLgorCisgICAgIyBJZiB5b3Ugd2FudCB0byBvYnNlcnZlIHdoaWNoIGxpYnJhcmllcyBhcmUgYmVpbmcgbGlua2VkIGFnYWluc3QKKyAgICAjIHRoZW4gZGVmaW5pbmcgQk9PU1RfTElCX0RJQUdOT1NUSUMgd2lsbCBjYXVzZSB0aGUgYXV0by1saW5raW5nCisgICAgIyBjb2RlIHRvIGVtaXQgYSAjcHJhZ21hIG1lc3NhZ2UgZWFjaCB0aW1lIGEgbGlicmFyeSBpcyBzZWxlY3RlZAorICAgICMgZm9yIGxpbmtpbmcuCisgICAgc2V0KEJvb3N0X0xJQl9ESUFHTk9TVElDX0RFRklOSVRJT05TICItREJPT1NUX0xJQl9ESUFHTk9TVElDIikKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQm9vc3Q6OmRpYWdub3N0aWNfZGVmaW5pdGlvbnMgUFJPUEVSVElFUworICAgICAgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMgIkJPT1NUX0xJQl9ESUFHTk9TVElDIikKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQm9vc3Q6OmRpc2FibGVfYXV0b2xpbmtpbmcgUFJPUEVSVElFUworICAgICAgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMgIkJPT1NUX0FMTF9OT19MSUIiKQorICBlbmRpZigpCiBlbmRpZigpCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRDVURBLmNtYWtlIGIvTW9kdWxlcy9GaW5kQ1VEQS5jbWFrZQppbmRleCBiNjg1OWFhLi5hOTNkNGZkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRDVURBLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZENVREEuY21ha2UKQEAgLTUsMTcgKzUsMjIgQEAKIC4uIGRlcHJlY2F0ZWQ6OiAzLjEwCiAKICAgU3VwZXJzZWRlZCBieSBmaXJzdC1jbGFzcyBzdXBwb3J0IGZvciB0aGUgQ1VEQSBsYW5ndWFnZSBpbiBDTWFrZS4KKyAgU3VwZXJzZWRlZCBieSB0aGUgOm1vZHVsZTpgRmluZENVREFUb29sa2l0YCBmb3IgQ1VEQSB0b29sa2l0IGxpYnJhcmllcy4KIAogUmVwbGFjZW1lbnQKIF5eXl5eXl5eXl5eCiAKLUl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gdXNlIHRoaXMgbW9kdWxlIG9yIGNhbGwgYGBmaW5kX3BhY2thZ2UoQ1VEQSlgYC4KLUluc3RlYWQsIGxpc3QgYGBDVURBYGAgYW1vbmcgdGhlIGxhbmd1YWdlcyBuYW1lZCBpbiB0aGUgdG9wLWxldmVsCi1jYWxsIHRvIHRoZSA6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZCwgb3IgY2FsbCB0aGUKK0l0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gdXNlIHRoaXMgbW9kdWxlIG9yIGNhbGwgYGBmaW5kX3BhY2thZ2UoQ1VEQSlgYAorZm9yIGNvbXBpbGluZyBDVURBIGNvZGUuIEluc3RlYWQsIGxpc3QgYGBDVURBYGAgYW1vbmcgdGhlIGxhbmd1YWdlcyBuYW1lZAoraW4gdGhlIHRvcC1sZXZlbCBjYWxsIHRvIHRoZSA6Y29tbWFuZDpgcHJvamVjdGAgY29tbWFuZCwgb3IgY2FsbCB0aGUKIDpjb21tYW5kOmBlbmFibGVfbGFuZ3VhZ2VgIGNvbW1hbmQgd2l0aCBgYENVREFgYC4KIFRoZW4gb25lIGNhbiBhZGQgQ1VEQSAoYGAuY3VgYCkgc291cmNlcyB0byBwcm9ncmFtcyBkaXJlY3RseQogaW4gY2FsbHMgdG8gOmNvbW1hbmQ6YGFkZF9saWJyYXJ5YCBhbmQgOmNvbW1hbmQ6YGFkZF9leGVjdXRhYmxlYC4KIAorVG8gZmluZCBhbmQgdXNlIHRoZSBDVURBIHRvb2xraXQgbGlicmFyaWVzIHRoZSA6bW9kdWxlOmBGaW5kQ1VEQVRvb2xraXRgCittb2R1bGUgaGFzIHN1cGVyc2VkZWQgdGhpcyBtb2R1bGUuICBJdCB3b3JrcyB3aGV0aGVyIG9yIG5vdCB0aGUgYGBDVURBYGAKK2xhbmd1YWdlIGlzIGVuYWJsZWQuCisKIERvY3VtZW50YXRpb24gb2YgRGVwcmVjYXRlZCBVc2FnZQogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKQEAgLTM1Miw3ICszNTcsOCBAQAogICBDVURBX25wcGljY19MSUJSQVJZICAgLS0gTlZJRElBIFBlcmZvcm1hbmNlIFByaW1pdGl2ZXMgbGliIChpbWFnZSBwcm9jZXNzaW5nKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgYXZhaWxhYmxlIGZvciBDVURBIHZlcnNpb24gOS4wLgogICBDVURBX25wcGljb21fTElCUkFSWSAgLS0gTlZJRElBIFBlcmZvcm1hbmNlIFByaW1pdGl2ZXMgbGliIChpbWFnZSBwcm9jZXNzaW5nKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgYXZhaWxhYmxlIGZvciBDVURBIHZlcnNpb24gOS4wLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBhdmFpbGFibGUgZm9yIENVREEgdmVyc2lvbiA5LjAgLSAxMC4yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwbGFjZWQgYnkgbnZqcGVnLgogICBDVURBX25wcGlkZWlfTElCUkFSWSAgLS0gTlZJRElBIFBlcmZvcm1hbmNlIFByaW1pdGl2ZXMgbGliIChpbWFnZSBwcm9jZXNzaW5nKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgYXZhaWxhYmxlIGZvciBDVURBIHZlcnNpb24gOS4wLgogICBDVURBX25wcGlmX0xJQlJBUlkgICAgLS0gTlZJRElBIFBlcmZvcm1hbmNlIFByaW1pdGl2ZXMgbGliIChpbWFnZSBwcm9jZXNzaW5nKS4KQEAgLTY3Niw3ICs2ODIsNyBAQAogIyBTZWFyY2ggZm9yIHRoZSBjdWRhIGRpc3RyaWJ1dGlvbi4KIGlmKE5PVCBDVURBX1RPT0xLSVRfUk9PVF9ESVIgQU5EIE5PVCBDTUFLRV9DUk9TU0NPTVBJTElORykKICAgIyBTZWFyY2ggaW4gdGhlIENVREFfQklOX1BBVEggZmlyc3QuCi0gIGZpbmRfcGF0aChDVURBX1RPT0xLSVRfUk9PVF9ESVIKKyAgZmluZF9wcm9ncmFtKENVREFfVE9PTEtJVF9ST09UX0RJUl9OVkNDCiAgICAgTkFNRVMgbnZjYyBudmNjLmV4ZQogICAgIFBBVEhTCiAgICAgICBFTlYgQ1VEQV9UT09MS0lUX1JPT1QKQEAgLTY4OCwxOSArNjk0LDIyIEBACiAgICAgKQogCiAgICMgTm93IHNlYXJjaCBkZWZhdWx0IHBhdGhzCi0gIGZpbmRfcGF0aChDVURBX1RPT0xLSVRfUk9PVF9ESVIKKyAgZmluZF9wcm9ncmFtKENVREFfVE9PTEtJVF9ST09UX0RJUl9OVkNDCiAgICAgTkFNRVMgbnZjYyBudmNjLmV4ZQogICAgIFBBVEhTIC9vcHQvY3VkYS9iaW4KICAgICBQQVRIX1NVRkZJWEVTIGN1ZGEvYmluCiAgICAgRE9DICJUb29sa2l0IGxvY2F0aW9uLiIKICAgICApCiAKLSAgaWYgKENVREFfVE9PTEtJVF9ST09UX0RJUikKKyAgaWYgKENVREFfVE9PTEtJVF9ST09UX0RJUl9OVkNDKQorICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ1VEQV9UT09MS0lUX1JPT1RfRElSX05WQ0NfUEFSICIke0NVREFfVE9PTEtJVF9ST09UX0RJUl9OVkNDfSIgRElSRUNUT1JZKQorICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ1VEQV9UT09MS0lUX1JPT1RfRElSICIke0NVREFfVE9PTEtJVF9ST09UX0RJUl9OVkNDX1BBUn0iIERJUkVDVE9SWSBDQUNIRSkKICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiWy9cXFxcXT9iaW5bNjRdKlsvXFxcXF0/JCIgIiIgQ1VEQV9UT09MS0lUX1JPT1RfRElSICR7Q1VEQV9UT09MS0lUX1JPT1RfRElSfSkKICAgICAjIFdlIG5lZWQgdG8gZm9yY2UgdGhpcyBiYWNrIGludG8gdGhlIGNhY2hlLgogICAgIHNldChDVURBX1RPT0xLSVRfUk9PVF9ESVIgJHtDVURBX1RPT0xLSVRfUk9PVF9ESVJ9IENBQ0hFIFBBVEggIlRvb2xraXQgbG9jYXRpb24uIiBGT1JDRSkKICAgICBzZXQoQ1VEQV9UT09MS0lUX1RBUkdFVF9ESVIgJHtDVURBX1RPT0xLSVRfUk9PVF9ESVJ9KQogICBlbmRpZigpCisgIHVuc2V0KENVREFfVE9PTEtJVF9ST09UX0RJUl9OVkNDIENBQ0hFKQogCiAgIGlmIChOT1QgRVhJU1RTICR7Q1VEQV9UT09MS0lUX1JPT1RfRElSfSkKICAgICBpZihDVURBX0ZJTkRfUkVRVUlSRUQpCkBAIC05MjEsNyArOTMwLDExIEBACiBpZihDVURBX0JVSUxEX0VNVUxBVElPTiBBTkQgQ1VEQV9DVURBUlRFTVVfTElCUkFSWSkKICAgbGlzdChBUFBFTkQgQ1VEQV9MSUJSQVJJRVMgJHtDVURBX0NVREFSVEVNVV9MSUJSQVJZfSkKIGVsc2VpZihDVURBX1VTRV9TVEFUSUNfQ1VEQV9SVU5USU1FIEFORCBDVURBX2N1ZGFydF9zdGF0aWNfTElCUkFSWSkKLSAgbGlzdChBUFBFTkQgQ1VEQV9MSUJSQVJJRVMgJHtDVURBX2N1ZGFydF9zdGF0aWNfTElCUkFSWX0gJHtDTUFLRV9USFJFQURfTElCU19JTklUfSAke0NNQUtFX0RMX0xJQlN9KQorICBsaXN0KEFQUEVORCBDVURBX0xJQlJBUklFUyAke0NVREFfY3VkYXJ0X3N0YXRpY19MSUJSQVJZfSkKKyAgaWYgKFRBUkdFVCBUaHJlYWRzOjpUaHJlYWRzKQorICAgIGxpc3QoQVBQRU5EIENVREFfTElCUkFSSUVTIFRocmVhZHM6OlRocmVhZHMpCisgIGVuZGlmKCkKKyAgbGlzdChBUFBFTkQgQ1VEQV9MSUJSQVJJRVMgJHtDTUFLRV9ETF9MSUJTfSkKICAgaWYgKENVREFfcnRfTElCUkFSWSkKICAgICBsaXN0KEFQUEVORCBDVURBX0xJQlJBUklFUyAke0NVREFfcnRfTElCUkFSWX0pCiAgIGVuZGlmKCkKQEAgLTk5MCw3ICsxMDAzLDkgQEAKICAgZmluZF9jdWRhX2hlbHBlcl9saWJzKG5wcGMpCiAgIGZpbmRfY3VkYV9oZWxwZXJfbGlicyhucHBpYWwpCiAgIGZpbmRfY3VkYV9oZWxwZXJfbGlicyhucHBpY2MpCi0gIGZpbmRfY3VkYV9oZWxwZXJfbGlicyhucHBpY29tKQorICBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxMS4wIikKKyAgICBmaW5kX2N1ZGFfaGVscGVyX2xpYnMobnBwaWNvbSkKKyAgZW5kaWYoKQogICBmaW5kX2N1ZGFfaGVscGVyX2xpYnMobnBwaWRlaSkKICAgZmluZF9jdWRhX2hlbHBlcl9saWJzKG5wcGlmKQogICBmaW5kX2N1ZGFfaGVscGVyX2xpYnMobnBwaWcpCkBAIC0yMDAzLDcgKzIwMTgsNyBAQAogICAgIHN0cmluZyhUT1VQUEVSICR7Y3VkYV9jbGVhbl90YXJnZXRfbmFtZX0gY3VkYV9jbGVhbl90YXJnZXRfbmFtZSkKICAgZW5kaWYoKQogICBhZGRfY3VzdG9tX3RhcmdldCgke2N1ZGFfY2xlYW5fdGFyZ2V0X25hbWV9Ci0gICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZSAke0NVREFfQURESVRJT05BTF9DTEVBTl9GSUxFU30pCisgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1mICR7Q1VEQV9BRERJVElPTkFMX0NMRUFOX0ZJTEVTfSkKIAogICAjIENsZWFyIG91dCB0aGUgdmFyaWFibGUsIHNvIHRoZSBuZXh0IHRpbWUgd2UgY29uZmlndXJlIGl0IHdpbGwgYmUgZW1wdHkuCiAgICMgVGhpcyBpcyB1c2VmdWwgc28gdGhhdCB0aGUgZmlsZXMgd29uJ3QgcGVyc2lzdCBpbiB0aGUgbGlzdCBhZnRlciB0YXJnZXRzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRDVURBL3J1bl9udmNjLmNtYWtlIGIvTW9kdWxlcy9GaW5kQ1VEQS9ydW5fbnZjYy5jbWFrZQppbmRleCBhZjE1ZDU1Li4xN2UxMmY4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRDVURBL3J1bl9udmNjLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZENVREEvcnVuX252Y2MuY21ha2UKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgICMgY29weSBhbmQgcGFzdGUgYSBydW5uYWJsZSBjb21tYW5kIGxpbmUuCiAgICAgc2V0KGN1ZGFfZXhlY3V0ZV9wcm9jZXNzX3N0cmluZykKICAgICBmb3JlYWNoKGFyZyAke0FSR059KQotICAgICAgIyBJZiB0aGVyZSBhcmUgcXVvdGVzLCBleGNhcGUgdGhlbSwgc28gdGhleSBjb21lIHRocm91Z2guCisgICAgICAjIElmIHRoZXJlIGFyZSBxdW90ZXMsIGVzY2FwZSB0aGVtLCBzbyB0aGV5IGNvbWUgdGhyb3VnaC4KICAgICAgIHN0cmluZyhSRVBMQUNFICJcIiIgIlxcXCIiIGFyZyAke2FyZ30pCiAgICAgICAjIEFyZ3Mgd2l0aCBzcGFjZXMgbmVlZCBxdW90ZXMgYXJvdW5kIHRoZW0gdG8gZ2V0IHRoZW0gdG8gYmUgcGFyc2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50LgogICAgICAgaWYoYXJnIE1BVENIRVMgIiAiKQpAQCAtMTc0LDcgKzE3NCw3IEBACiAjIERlbGV0ZSB0aGUgdGFyZ2V0IGZpbGUKIGN1ZGFfZXhlY3V0ZV9wcm9jZXNzKAogICAiUmVtb3ZpbmcgJHtnZW5lcmF0ZWRfZmlsZX0iCi0gIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIHJlbW92ZSAiJHtnZW5lcmF0ZWRfZmlsZX0iCisgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIHJtIC1mICIke2dlbmVyYXRlZF9maWxlfSIKICAgKQogCiAjIEZvciBDVURBIDIuMyBhbmQgYmVsb3csIC1HIC1NIGRvZXNuJ3Qgd29yaywgc28gcmVtb3ZlIHRoZSAtRyBmbGFnCkBAIC0yNDEsNyArMjQxLDcgQEAKICMgRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZQogY3VkYV9leGVjdXRlX3Byb2Nlc3MoCiAgICJSZW1vdmluZyAke2NtYWtlX2RlcGVuZGVuY3lfZmlsZX0udG1wIGFuZCAke05WQ0NfZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZmlsZX0iCi0gIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIHJlbW92ZSAiJHtjbWFrZV9kZXBlbmRlbmN5X2ZpbGV9LnRtcCIgIiR7TlZDQ19nZW5lcmF0ZWRfZGVwZW5kZW5jeV9maWxlfSIKKyAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgcm0gLWYgIiR7Y21ha2VfZGVwZW5kZW5jeV9maWxlfS50bXAiICIke05WQ0NfZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZmlsZX0iCiAgICkKIAogaWYoQ1VEQV9yZXN1bHQpCkBAIC0yNjcsNyArMjY3LDcgQEAKICAgIyBTaW5jZSBudmNjIGNhbiBzb21ldGltZXMgbGVhdmUgaGFsZiBkb25lIGZpbGVzIG1ha2Ugc3VyZSB0aGF0IHdlIGRlbGV0ZSB0aGUgb3V0cHV0IGZpbGUuCiAgIGN1ZGFfZXhlY3V0ZV9wcm9jZXNzKAogICAgICJSZW1vdmluZyAke2dlbmVyYXRlZF9maWxlfSIKLSAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSByZW1vdmUgIiR7Z2VuZXJhdGVkX2ZpbGV9IgorICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIHJtIC1mICIke2dlbmVyYXRlZF9maWxlfSIKICAgICApCiAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkVycm9yIGdlbmVyYXRpbmcgZmlsZSAke2dlbmVyYXRlZF9maWxlfSIpCiBlbHNlKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZENVREEvc2VsZWN0X2NvbXB1dGVfYXJjaC5jbWFrZSBiL01vZHVsZXMvRmluZENVREEvc2VsZWN0X2NvbXB1dGVfYXJjaC5jbWFrZQppbmRleCA3ZGRiNzA5Li5jMTE3MjVkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRDVURBL3NlbGVjdF9jb21wdXRlX2FyY2guY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQ1VEQS9zZWxlY3RfY29tcHV0ZV9hcmNoLmNtYWtlCkBAIC01LDkgKzUsOSBAQAogIyAgICAgICAtICJBdXRvIiBkZXRlY3RzIGxvY2FsIG1hY2hpbmUgR1BVIGNvbXB1dGUgYXJjaCBhdCBydW50aW1lLgogIyAgICAgICAtICJDb21tb24iIGFuZCAiQWxsIiBjb3ZlciBjb21tb24gYW5kIGVudGlyZSBzdWJzZXRzIG9mIGFyY2hpdGVjdHVyZXMKICMgICAgICBBUkNIX0FORF9QVFggOiBOQU1FIHwgTlVNLk5VTSB8IE5VTS5OVU0oTlVNLk5VTSkgfCBOVU0uTlVNK1BUWAotIyAgICAgIE5BTUU6IEZlcm1pIEtlcGxlciBNYXh3ZWxsIEtlcGxlcitUZWdyYSBLZXBsZXIrVGVzbGEgTWF4d2VsbCtUZWdyYSBQYXNjYWwgVm9sdGEgVHVyaW5nCisjICAgICAgTkFNRTogRmVybWkgS2VwbGVyIE1heHdlbGwgS2VwbGVyK1RlZ3JhIEtlcGxlcitUZXNsYSBNYXh3ZWxsK1RlZ3JhIFBhc2NhbCBWb2x0YSBUdXJpbmcgQW1wZXJlCiAjICAgICAgTlVNOiBBbnkgbnVtYmVyLiBPbmx5IHRob3NlIHBhaXJzIGFyZSBjdXJyZW50bHkgYWNjZXB0ZWQgYnkgTlZDQyB0aG91Z2g6Ci0jICAgICAgICAgICAgMi4wIDIuMSAzLjAgMy4yIDMuNSAzLjcgNS4wIDUuMiA1LjMgNi4wIDYuMiA3LjAgNy4yIDcuNQorIyAgICAgICAgICAgIDIuMCAyLjEgMy4wIDMuMiAzLjUgMy43IDUuMCA1LjIgNS4zIDYuMCA2LjIgNy4wIDcuMiA3LjUgOC4wCiAjICAgICAgUmV0dXJucyBMSVNUIG9mIGZsYWdzIHRvIGJlIGFkZGVkIHRvIENVREFfTlZDQ19GTEFHUyBpbiAke291dF92YXJpYWJsZX0KICMgICAgICBBZGRpdGlvbmFsbHksIHNldHMgJHtvdXRfdmFyaWFibGV9X3JlYWRhYmxlIHRvIHRoZSByZXN1bHRpbmcgbnVtZXJpYyBsaXN0CiAjICAgICAgRXhhbXBsZToKQEAgLTMwLDcgKzMwLDEyIEBACiBzZXQoQ1VEQV9LTk9XTl9HUFVfQVJDSElURUNUVVJFUyAgIkZlcm1pIiAiS2VwbGVyIiAiTWF4d2VsbCIpCiAKICMgVGhpcyBsaXN0IHdpbGwgYmUgdXNlZCBmb3IgQ1VEQV9BUkNIX05BTUUgPSBDb21tb24gb3B0aW9uIChlbmFibGVkIGJ5IGRlZmF1bHQpCi1zZXQoQ1VEQV9DT01NT05fR1BVX0FSQ0hJVEVDVFVSRVMgIjMuMCIgIjMuNSIgIjUuMCIpCitzZXQoQ1VEQV9DT01NT05fR1BVX0FSQ0hJVEVDVFVSRVMgIjMuNSIgIjUuMCIpCisjIDMuMCBpcyByZW1vdmVkIGluIENVREEgMTEsIHNlZToKKyMgaHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9jdWRhLXRvb2xraXQtcmVsZWFzZS1ub3Rlcy9pbmRleC5odG1sI2RlcHJlY2F0ZWQtZmVhdHVyZXMKK2lmKENVREFfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjExLjAiKQorICBsaXN0KEFQUEVORCBDVURBX0NPTU1PTl9HUFVfQVJDSElURUNUVVJFUyAiMy4wIikKK2VuZGlmKCkKIAogaWYoQ1VEQV9WRVJTSU9OIFZFUlNJT05fTEVTUyAiNy4wIikKICAgc2V0KENVREFfTElNSVRfR1BVX0FSQ0hJVEVDVFVSRSAiNS4yIikKQEAgLTU1LDI3ICs2MCwzOSBAQAogICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiNi4wIiAiNi4xIiAiNi4yIikKIAogICBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9MRVNTICI5LjAiKQotICAgIGxpc3QoQVBQRU5EIENVREFfQ09NTU9OX0dQVV9BUkNISVRFQ1RVUkVTICI2LjErUFRYIikKKyAgICBsaXN0KEFQUEVORCBDVURBX0NPTU1PTl9HUFVfQVJDSElURUNUVVJFUyAiNi4yK1BUWCIpCiAgICAgc2V0KENVREFfTElNSVRfR1BVX0FSQ0hJVEVDVFVSRSAiNy4wIikKICAgZW5kaWYoKQogZW5kaWYgKCkKIAogaWYoQ1VEQV9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAiOS4wIikKICAgbGlzdChBUFBFTkQgQ1VEQV9LTk9XTl9HUFVfQVJDSElURUNUVVJFUyAiVm9sdGEiKQotICBsaXN0KEFQUEVORCBDVURBX0NPTU1PTl9HUFVfQVJDSElURUNUVVJFUyAiNy4wIiAiNy4wK1BUWCIpCi0gIGxpc3QoQVBQRU5EIENVREFfQUxMX0dQVV9BUkNISVRFQ1RVUkVTICI3LjAiICI3LjArUFRYIiAiNy4yIiAiNy4yK1BUWCIpCisgIGxpc3QoQVBQRU5EIENVREFfQ09NTU9OX0dQVV9BUkNISVRFQ1RVUkVTICI3LjAiKQorICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiNy4wIiAiNy4yIikKIAogICBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxMC4wIikKKyAgICBsaXN0KEFQUEVORCBDVURBX0NPTU1PTl9HUFVfQVJDSElURUNUVVJFUyAiNy4yK1BUWCIpCiAgICAgc2V0KENVREFfTElNSVRfR1BVX0FSQ0hJVEVDVFVSRSAiOC4wIikKICAgZW5kaWYoKQogZW5kaWYoKQogCiBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIxMC4wIikKICAgbGlzdChBUFBFTkQgQ1VEQV9LTk9XTl9HUFVfQVJDSElURUNUVVJFUyAiVHVyaW5nIikKLSAgbGlzdChBUFBFTkQgQ1VEQV9DT01NT05fR1BVX0FSQ0hJVEVDVFVSRVMgIjcuNSIgIjcuNStQVFgiKQotICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiNy41IiAiNy41K1BUWCIpCisgIGxpc3QoQVBQRU5EIENVREFfQ09NTU9OX0dQVV9BUkNISVRFQ1RVUkVTICI3LjUiKQorICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiNy41IikKIAogICBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxMS4wIikKKyAgICBzZXQoQ1VEQV9MSU1JVF9HUFVfQVJDSElURUNUVVJFICI4LjAiKQorICAgIGxpc3QoQVBQRU5EIENVREFfQ09NTU9OX0dQVV9BUkNISVRFQ1RVUkVTICI3LjUrUFRYIikKKyAgZW5kaWYoKQorZW5kaWYoKQorCitpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIxMS4wIikKKyAgbGlzdChBUFBFTkQgQ1VEQV9LTk9XTl9HUFVfQVJDSElURUNUVVJFUyAiQW1wZXJlIikKKyAgbGlzdChBUFBFTkQgQ1VEQV9DT01NT05fR1BVX0FSQ0hJVEVDVFVSRVMgIjguMCIgIjguMCtQVFgiKQorICBsaXN0KEFQUEVORCBDVURBX0FMTF9HUFVfQVJDSElURUNUVVJFUyAiOC4wIikKKworICBpZihDVURBX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxMi4wIikKICAgICBzZXQoQ1VEQV9MSU1JVF9HUFVfQVJDSElURUNUVVJFICI5LjAiKQogICBlbmRpZigpCiBlbmRpZigpCkBAIC0yMTQsNiArMjMxLDkgQEAKICAgICAgIGVsc2VpZigke2FyY2hfbmFtZX0gU1RSRVFVQUwgIlR1cmluZyIpCiAgICAgICAgIHNldChhcmNoX2JpbiA3LjUpCiAgICAgICAgIHNldChhcmNoX3B0eCA3LjUpCisgICAgICBlbHNlaWYoJHthcmNoX25hbWV9IFNUUkVRVUFMICJBbXBlcmUiKQorICAgICAgICBzZXQoYXJjaF9iaW4gOC4wKQorICAgICAgICBzZXQoYXJjaF9wdHggOC4wKQogICAgICAgZWxzZSgpCiAgICAgICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiVW5rbm93biBDVURBIEFyY2hpdGVjdHVyZSBOYW1lICR7YXJjaF9uYW1lfSBpbiBDVURBX1NFTEVDVF9OVkNDX0FSQ0hfRkxBR1MiKQogICAgICAgZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kQ1VEQVRvb2xraXQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRDVURBVG9vbGtpdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDU0ZjYwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9GaW5kQ1VEQVRvb2xraXQuY21ha2UKQEAgLTAsMCArMSw5MjggQEAKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KKworI1s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVsucnN0OgorRmluZENVREFUb29sa2l0CistLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xNworCitUaGlzIHNjcmlwdCBsb2NhdGVzIHRoZSBOVklESUEgQ1VEQSB0b29sa2l0IGFuZCB0aGUgYXNzb2NpYXRlZCBsaWJyYXJpZXMsIGJ1dAorZG9lcyBub3QgcmVxdWlyZSB0aGUgYGBDVURBYGAgbGFuZ3VhZ2UgYmUgZW5hYmxlZCBmb3IgYSBnaXZlbiBwcm9qZWN0LiBUaGlzCittb2R1bGUgZG9lcyBub3Qgc2VhcmNoIGZvciB0aGUgTlZJRElBIENVREEgU2FtcGxlcy4KKworU2VhcmNoIEJlaGF2aW9yCiteXl5eXl5eXl5eXl5eXl4KKworVGhlIENVREEgVG9vbGtpdCBzZWFyY2ggYmVoYXZpb3IgdXNlcyB0aGUgZm9sbG93aW5nIG9yZGVyOgorCisxLiBJZiB0aGUgYGBDVURBYGAgbGFuZ3VhZ2UgaGFzIGJlZW4gZW5hYmxlZCB3ZSB3aWxsIHVzZSB0aGUgZGlyZWN0b3J5CisgICBjb250YWluaW5nIHRoZSBjb21waWxlciBhcyB0aGUgZmlyc3Qgc2VhcmNoIGxvY2F0aW9uIGZvciBgYG52Y2NgYC4KKworMi4gSWYgdGhlIGBgQ1VEQVRvb2xraXRfUk9PVGBgIGNtYWtlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKGUuZy4sCisgICBgYC1EQ1VEQVRvb2xraXRfUk9PVD0vc29tZS9wYXRoYGApICpvciogZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZGVmaW5lZCwgaXQKKyAgIHdpbGwgYmUgc2VhcmNoZWQuICBJZiBib3RoIGFuIGVudmlyb25tZW50IHZhcmlhYmxlICoqYW5kKiogYQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhcmUgc3BlY2lmaWVkLCB0aGUgKmNvbmZpZ3VyYXRpb24qIHZhcmlhYmxlIHRha2VzCisgICBwcmVjZWRlbmNlLgorCisgICBUaGUgZGlyZWN0b3J5IHNwZWNpZmllZCBoZXJlIG11c3QgYmUgc3VjaCB0aGF0IHRoZSBleGVjdXRhYmxlIGBgbnZjY2BgIG9yCisgICB0aGUgYXBwcm9wcmlhdGUgYGB2ZXJzaW9uLnR4dGBgIGZpbGUgY2FuIGJlIGZvdW5kIHVuZGVybmVhdGggdGhlIHNwZWNpZmllZAorICAgZGlyZWN0b3J5LgorCiszLiBJZiB0aGUgQ1VEQV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGRlZmluZWQsIGl0IHdpbGwgYmUgc2VhcmNoZWQKKyAgIGZvciBgYG52Y2NgYC4KKworNC4gVGhlIHVzZXIncyBwYXRoIGlzIHNlYXJjaGVkIGZvciBgYG52Y2NgYCB1c2luZyA6Y29tbWFuZDpgZmluZF9wcm9ncmFtYC4gIElmCisgICB0aGlzIGlzIGZvdW5kLCBubyBzdWJzZXF1ZW50IHNlYXJjaCBhdHRlbXB0cyBhcmUgcGVyZm9ybWVkLiAgVXNlcnMgYXJlCisgICByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgZmlyc3QgYGBudmNjYGAgdG8gc2hvdyB1cCBpbiB0aGUgcGF0aCBpcworICAgdGhlIGRlc2lyZWQgcGF0aCBpbiB0aGUgZXZlbnQgdGhhdCBtdWx0aXBsZSBDVURBIFRvb2xraXRzIGFyZSBpbnN0YWxsZWQuCisKKzUuIE9uIFVuaXggc3lzdGVtcywgaWYgdGhlIHN5bWJvbGljIGxpbmsgYGAvdXNyL2xvY2FsL2N1ZGFgYCBleGlzdHMsIHRoaXMgaXMKKyAgIHVzZWQuICBObyBzdWJzZXF1ZW50IHNlYXJjaCBhdHRlbXB0cyBhcmUgcGVyZm9ybWVkLiAgTm8gZGVmYXVsdCBzeW1ib2xpYyBsaW5rCisgICBsb2NhdGlvbiBleGlzdHMgZm9yIHRoZSBXaW5kb3dzIHBsYXRmb3JtLgorCis2LiBUaGUgcGxhdGZvcm0gc3BlY2lmaWMgZGVmYXVsdCBpbnN0YWxsIGxvY2F0aW9ucyBhcmUgc2VhcmNoZWQuICBJZiBleGFjdGx5IG9uZQorICAgY2FuZGlkYXRlIGlzIGZvdW5kLCB0aGlzIGlzIHVzZWQuICBUaGUgZGVmYXVsdCBDVURBIFRvb2xraXQgaW5zdGFsbCBsb2NhdGlvbnMKKyAgIHNlYXJjaGVkIGFyZToKKworICAgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgUGxhdGZvcm0gICAgfCBTZWFyY2ggUGF0dGVybiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBtYWNPUyAgICAgICB8IGBgL0RldmVsb3Blci9OVklESUEvQ1VEQS1YLllgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IE90aGVyIFVuaXggIHwgYGAvdXNyL2xvY2FsL2N1ZGEtWC5ZYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgV2luZG93cyAgICAgfCBgYEM6XFByb2dyYW0gRmlsZXNcTlZJRElBIEdQVSBDb21wdXRpbmcgVG9vbGtpdFxDVURBXHZYLllgYCB8CisgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBXaGVyZSBgYFguWWBgIHdvdWxkIGJlIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgQ1VEQSBUb29sa2l0LCBzdWNoIGFzCisgICBgYC91c3IvbG9jYWwvY3VkYS05LjBgYCBvcgorICAgYGBDOlxQcm9ncmFtIEZpbGVzXE5WSURJQSBHUFUgQ29tcHV0aW5nIFRvb2xraXRcQ1VEQVx2OS4wYGAKKworICAgLi4gbm90ZTo6CisKKyAgICAgICBXaGVuIG11bHRpcGxlIENVREEgVG9vbGtpdHMgYXJlIGluc3RhbGxlZCBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiBhCisgICAgICAgc3lzdGVtIChlLmcuLCBib3RoIGBgL3Vzci9sb2NhbC9jdWRhLTkuMGBgIGFuZCBgYC91c3IvbG9jYWwvY3VkYS0xMC4wYGAKKyAgICAgICBleGlzdCBidXQgdGhlIGBgL3Vzci9sb2NhbC9jdWRhYGAgc3ltYm9saWMgbGluayBkb2VzICoqbm90KiogZXhpc3QpLCB0aGlzCisgICAgICAgcGFja2FnZSBpcyBtYXJrZWQgYXMgKipub3QqKiBmb3VuZC4KKworICAgICAgIFRoZXJlIGFyZSB0b28gbWFueSBmYWN0b3JzIGludm9sdmVkIGluIG1ha2luZyBhbiBhdXRvbWF0aWMgZGVjaXNpb24gaW4KKyAgICAgICB0aGUgcHJlc2VuY2Ugb2YgbXVsdGlwbGUgQ1VEQSBUb29sa2l0cyBiZWluZyBpbnN0YWxsZWQuICBJbiB0aGlzCisgICAgICAgc2l0dWF0aW9uLCB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byBlaXRoZXIgKDEpIHNldCBgYENVREFUb29sa2l0X1JPT1RgYCBvcgorICAgICAgICgyKSBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBgYG52Y2NgYCBleGVjdXRhYmxlIHNob3dzIHVwIGluIGBgJFBBVEhgYCBmb3IKKyAgICAgICA6Y29tbWFuZDpgZmluZF9wcm9ncmFtYCB0byBmaW5kLgorCitPcHRpb25zCiteXl5eXl5eCisKK2BgVkVSU0lPTmBgCisgICAgSWYgc3BlY2lmaWVkLCBkZXNjcmliZXMgdGhlIHZlcnNpb24gb2YgdGhlIENVREEgVG9vbGtpdCB0byBzZWFyY2ggZm9yLgorCitgYFJFUVVJUkVEYGAKKyAgICBJZiBzcGVjaWZpZWQsIGNvbmZpZ3VyYXRpb24gd2lsbCBlcnJvciBpZiBhIHN1aXRhYmxlIENVREEgVG9vbGtpdCBpcyBub3QKKyAgICBmb3VuZC4KKworYGBRVUlFVGBgCisgICAgSWYgc3BlY2lmaWVkLCB0aGUgc2VhcmNoIGZvciBhIHN1aXRhYmxlIENVREEgVG9vbGtpdCB3aWxsIG5vdCBwcm9kdWNlIGFueQorICAgIG1lc3NhZ2VzLgorCitgYEVYQUNUYGAKKyAgICBJZiBzcGVjaWZpZWQsIHRoZSBDVURBIFRvb2xraXQgaXMgY29uc2lkZXJlZCBmb3VuZCBvbmx5IGlmIHRoZSBleGFjdAorICAgIGBgVkVSU0lPTmBgIHNwZWNpZmllZCBpcyByZWNvdmVyZWQuCisKK0ltcG9ydGVkIHRhcmdldHMKK15eXl5eXl5eXl5eXl5eXl4KKworQW4gOnJlZjpgaW1wb3J0ZWQgdGFyZ2V0IDxJbXBvcnRlZCB0YXJnZXRzPmAgbmFtZWQgYGBDVURBOjp0b29sa2l0YGAgaXMgcHJvdmlkZWQuCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgOnByb3BfdGd0OmBJTVBPUlRFRGAgdGFyZ2V0cyBmb3IgZWFjaAorb2YgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgQ1VEQVRvb2xraXQ6CisKKy0gOnJlZjpgQ1VEQSBSdW50aW1lIExpYnJhcnk8Y3VkYV90b29sa2l0X3J0X2xpYj5gCistIDpyZWY6YENVREEgRHJpdmVyIExpYnJhcnk8Y3VkYV90b29sa2l0X2RyaXZlcl9saWI+YAorLSA6cmVmOmBjdUJMQVM8Y3VkYV90b29sa2l0X2N1QkxBUz5gCistIDpyZWY6YGN1RkZUPGN1ZGFfdG9vbGtpdF9jdUZGVD5gCistIDpyZWY6YGN1UkFORDxjdWRhX3Rvb2xraXRfY3VSQU5EPmAKKy0gOnJlZjpgY3VTT0xWRVI8Y3VkYV90b29sa2l0X2N1U09MVkVSPmAKKy0gOnJlZjpgY3VTUEFSU0U8Y3VkYV90b29sa2l0X2N1U1BBUlNFPmAKKy0gOnJlZjpgY3VQVEk8Y3VkYV90b29sa2l0X2N1cHRpPmAKKy0gOnJlZjpgTlBQPGN1ZGFfdG9vbGtpdF9OUFA+YAorLSA6cmVmOmBudkJMQVM8Y3VkYV90b29sa2l0X252QkxBUz5gCistIDpyZWY6YG52R1JBUEg8Y3VkYV90b29sa2l0X252R1JBUEg+YAorLSA6cmVmOmBudkpQRUc8Y3VkYV90b29sa2l0X252SlBFRz5gCistIDpyZWY6YG52aWRpYS1NTDxjdWRhX3Rvb2xraXRfbnZNTD5gCistIDpyZWY6YG52UlRDPGN1ZGFfdG9vbGtpdF9udlJUQz5gCistIDpyZWY6YG52VG9vbHNFeHQ8Y3VkYV90b29sa2l0X252VG9vbHNFeHQ+YAorLSA6cmVmOmBPcGVuQ0w8Y3VkYV90b29sa2l0X29wZW5jbD5gCistIDpyZWY6YGN1TElCT1M8Y3VkYV90b29sa2l0X2N1TElCT1M+YAorCisuLiBfYGN1ZGFfdG9vbGtpdF9ydF9saWJgOgorCitDVURBIFJ1bnRpbWUgTGlicmFyeQorIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworVGhlIENVREEgUnVudGltZSBsaWJyYXJ5IChjdWRhcnQpIGFyZSB3aGF0IG1vc3QgYXBwbGljYXRpb25zIHdpbGwgdHlwaWNhbGx5CituZWVkIHRvIGxpbmsgYWdhaW5zdCB0byBtYWtlIGFueSBjYWxscyBzdWNoIGFzIGBjdWRhTWFsbG9jYCwgYW5kIGBjdWRhRnJlZWAuCisKK1RhcmdldHMgQ3JlYXRlZDoKKworLSBgYENVREE6OmN1ZGFydGBgCistIGBgQ1VEQTo6Y3VkYXJ0X3N0YXRpY2BgCisKKy4uIF9gY3VkYV90b29sa2l0X2RyaXZlcl9saWJgOgorCitDVURBIERyaXZlciBMaWJyYXJ5CisiIiIiIiIiIiIiIiIiIiIiIiIiIgorCitUaGUgQ1VEQSBEcml2ZXIgbGlicmFyeSAoY3VkYSkgYXJlIHVzZWQgYnkgYXBwbGljYXRpb25zIHRoYXQgdXNlIGNhbGxzCitzdWNoIGFzIGBjdU1lbUFsbG9jYCwgYW5kIGBjdU1lbUZyZWVgLiBUaGlzIGlzIGdlbmVyYWxseSB1c2VkIGJ5IGFkdmFuY2VkCisKKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VkYV9kcml2ZXJgYAorLSBgYENVREE6OmN1ZGFfZHJpdmVyYGAKKworLi4gX2BjdWRhX3Rvb2xraXRfY3VCTEFTYDoKKworY3VCTEFTCisiIiIiIiIKKworVGhlIGBjdUJMQVMgPGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvY3VibGFzL2luZGV4Lmh0bWw+YF8gbGlicmFyeS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VibGFzYGAKKy0gYGBDVURBOjpjdWJsYXNfc3RhdGljYGAKKy0gYGBDVURBOjpjdWJsYXNMdGBgIHN0YXJ0aW5nIGluIENVREEgMTAuMQorLSBgYENVREE6OmN1Ymxhc0x0X3N0YXRpY2BgIHN0YXJ0aW5nIGluIENVREEgMTAuMQorCisuLiBfYGN1ZGFfdG9vbGtpdF9jdUZGVGA6CisKK2N1RkZUCisiIiIiIgorCitUaGUgYGN1RkZUIDxodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL2N1ZmZ0L2luZGV4Lmh0bWw+YF8gbGlicmFyeS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VmZnRgYAorLSBgYENVREE6OmN1ZmZ0d2BgCistIGBgQ1VEQTo6Y3VmZnRfc3RhdGljYGAKKy0gYGBDVURBOjpjdWZmdHdfc3RhdGljYGAKKworY3VSQU5ECisiIiIiIiIKKworVGhlIGBjdVJBTkQgPGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvY3VyYW5kL2luZGV4Lmh0bWw+YF8gbGlicmFyeS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VyYW5kYGAKKy0gYGBDVURBOjpjdXJhbmRfc3RhdGljYGAKKworLi4gX2BjdWRhX3Rvb2xraXRfY3VTT0xWRVJgOgorCitjdVNPTFZFUgorIiIiIiIiIiIKKworVGhlIGBjdVNPTFZFUiA8aHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9jdXNvbHZlci9pbmRleC5odG1sPmBfIGxpYnJhcnkuCisKK1RhcmdldHMgQ3JlYXRlZDoKKworLSBgYENVREE6OmN1c29sdmVyYGAKKy0gYGBDVURBOjpjdXNvbHZlcl9zdGF0aWNgYAorCisuLiBfYGN1ZGFfdG9vbGtpdF9jdVNQQVJTRWA6CisKK2N1U1BBUlNFCisiIiIiIiIiIgorCitUaGUgYGN1U1BBUlNFIDxodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL2N1c3BhcnNlL2luZGV4Lmh0bWw+YF8gbGlicmFyeS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VzcGFyc2VgYAorLSBgYENVREE6OmN1c3BhcnNlX3N0YXRpY2BgCisKKy4uIF9gY3VkYV90b29sa2l0X2N1cHRpYDoKKworY3VwdGkKKyIiIiIiCisKK1RoZSBgTlZJRElBIENVREEgUHJvZmlsaW5nIFRvb2xzIEludGVyZmFjZSA8aHR0cHM6Ly9kZXZlbG9wZXIubnZpZGlhLmNvbS9DVVBUST5gXy4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6Y3VwdGlgYAorLSBgYENVREE6OmN1cHRpX3N0YXRpY2BgCisKKy4uIF9gY3VkYV90b29sa2l0X05QUGA6CisKK05QUAorIiIiCisKK1RoZSBgTlBQIDxodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL25wcC9pbmRleC5odG1sPmBfIGxpYnJhcmllcy4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBucHBjYDoKKworICAtIGBgQ1VEQTo6bnBwY2BgCisgIC0gYGBDVURBOjpucHBjX3N0YXRpY2BgCisKKy0gYG5wcGlhbGA6IEFyaXRobWV0aWMgYW5kIGxvZ2ljYWwgb3BlcmF0aW9uIGZ1bmN0aW9ucyBpbiBgbnBwaV9hcml0aG1ldGljX2FuZF9sb2dpY2FsX29wZXJhdGlvbnMuaGAKKworICAtIGBgQ1VEQTo6bnBwaWFsYGAKKyAgLSBgYENVREE6Om5wcGlhbF9zdGF0aWNgYAorCistIGBucHBpY2NgOiBDb2xvciBjb252ZXJzaW9uIGFuZCBzYW1wbGluZyBmdW5jdGlvbnMgaW4gYG5wcGlfY29sb3JfY29udmVyc2lvbi5oYAorCisgIC0gYGBDVURBOjpucHBpY2NgYAorICAtIGBgQ1VEQTo6bnBwaWNjX3N0YXRpY2BgCisKKy0gYG5wcGljb21gOiBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucyBpbiBgbnBwaV9jb21wcmVzc2lvbl9mdW5jdGlvbnMuaGAKKyAgUmVtb3ZlZCBzdGFydGluZyBpbiBDVURBIDExLjAsIHVzZSA6cmVmOmBudkpQRUc8Y3VkYV90b29sa2l0X252SlBFRz5gIGluc3RlYWQuCisKKyAgLSBgYENVREE6Om5wcGljb21gYAorICAtIGBgQ1VEQTo6bnBwaWNvbV9zdGF0aWNgYAorCistIGBucHBpZGVpYDogRGF0YSBleGNoYW5nZSBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGluIGBucHBpX2RhdGFfZXhjaGFuZ2VfYW5kX2luaXRpYWxpemF0aW9uLmhgCisKKyAgLSBgYENVREE6Om5wcGlkZWlgYAorICAtIGBgQ1VEQTo6bnBwaWRlaV9zdGF0aWNgYAorCistIGBucHBpZmA6IEZpbHRlcmluZyBhbmQgY29tcHV0ZXIgdmlzaW9uIGZ1bmN0aW9ucyBpbiBgbnBwaV9maWx0ZXJfZnVuY3Rpb25zLmhgCisKKyAgLSBgYENVREE6Om5wcGlmYGAKKyAgLSBgYENVREE6Om5wcGlmX3N0YXRpY2BgCisKKy0gYG5wcGlnYDogR2VvbWV0cnkgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zIGZvdW5kIGluIGBucHBpX2dlb21ldHJ5X3RyYW5zZm9ybXMuaGAKKworICAtIGBgQ1VEQTo6bnBwaWdgYAorICAtIGBgQ1VEQTo6bnBwaWdfc3RhdGljYGAKKworLSBgbnBwaW1gOiBNb3JwaG9sb2dpY2FsIG9wZXJhdGlvbiBmdW5jdGlvbnMgZm91bmQgaW4gYG5wcGlfbW9ycGhvbG9naWNhbF9vcGVyYXRpb25zLmhgCisKKyAgLSBgYENVREE6Om5wcGltYGAKKyAgLSBgYENVREE6Om5wcGltX3N0YXRpY2BgCisKKy0gYG5wcGlzdGA6IFN0YXRpc3RpY3MgYW5kIGxpbmVhciB0cmFuc2Zvcm0gaW4gYG5wcGlfc3RhdGlzdGljc19mdW5jdGlvbnMuaGAgYW5kIGBucHBpX2xpbmVhcl90cmFuc2Zvcm1zLmhgCisKKyAgLSBgYENVREE6Om5wcGlzdGBgCisgIC0gYGBDVURBOjpucHBpc3Rfc3RhdGljYGAKKworLSBgbnBwaXN1YDogTWVtb3J5IHN1cHBvcnQgZnVuY3Rpb25zIGluIGBucHBpX3N1cHBvcnRfZnVuY3Rpb25zLmhgCisKKyAgLSBgYENVREE6Om5wcGlzdWBgCisgIC0gYGBDVURBOjpucHBpc3Vfc3RhdGljYGAKKworLSBgbnBwaXRjYDogVGhyZXNob2xkIGFuZCBjb21wYXJlIG9wZXJhdGlvbiBmdW5jdGlvbnMgaW4gYG5wcGlfdGhyZXNob2xkX2FuZF9jb21wYXJlX29wZXJhdGlvbnMuaGAKKworICAtIGBgQ1VEQTo6bnBwaXRjYGAKKyAgLSBgYENVREE6Om5wcGl0Y19zdGF0aWNgYAorCistIGBucHBzYDoKKworICAtIGBgQ1VEQTo6bnBwc2BgCisgIC0gYGBDVURBOjpucHBzX3N0YXRpY2BgCisKKy4uIF9gY3VkYV90b29sa2l0X252QkxBU2A6CisKK252QkxBUworIiIiIiIiCisKK1RoZSBgbnZCTEFTIDxodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL252Ymxhcy9pbmRleC5odG1sPmBfIGxpYnJhcmllcy4KK1RoaXMgaXMgYSBzaGFyZWQgbGlicmFyeSBvbmx5LgorCitUYXJnZXRzIENyZWF0ZWQ6CisKKy0gYGBDVURBOjpudmJsYXNgYAorCisuLiBfYGN1ZGFfdG9vbGtpdF9udkdSQVBIYDoKKworbnZHUkFQSAorIiIiIiIiIgorCitUaGUgYG52R1JBUEggPGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvbnZncmFwaC9pbmRleC5odG1sPmBfIGxpYnJhcnkuCitSZW1vdmVkIHN0YXJ0aW5nIGluIENVREEgMTEuMAorCitUYXJnZXRzIENyZWF0ZWQ6CisKKy0gYGBDVURBOjpudmdyYXBoYGAKKy0gYGBDVURBOjpudmdyYXBoX3N0YXRpY2BgCisKKworLi4gX2BjdWRhX3Rvb2xraXRfbnZKUEVHYDoKKworbnZKUEVHCisiIiIiIiIKKworVGhlIGBudkpQRUcgPGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvbnZqcGVnL2luZGV4Lmh0bWw+YF8gbGlicmFyeS4KK0ludHJvZHVjZWQgaW4gQ1VEQSAxMC4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6bnZqcGVnYGAKKy0gYGBDVURBOjpudmpwZWdfc3RhdGljYGAKKworLi4gX2BjdWRhX3Rvb2xraXRfbnZSVENgOgorCitudlJUQworIiIiIiIKKworVGhlIGBudlJUQyA8aHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9udnJ0Yy9pbmRleC5odG1sPmBfIChSdW50aW1lIENvbXBpbGF0aW9uKSBsaWJyYXJ5LgorVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5IG9ubHkuCisKK1RhcmdldHMgQ3JlYXRlZDoKKworLSBgYENVREE6Om52cnRjYGAKKworLi4gX2BjdWRhX3Rvb2xraXRfbnZtbGA6CisKK252aWRpYS1NTAorIiIiIiIiIiIiCisKK1RoZSBgTlZJRElBIE1hbmFnZW1lbnQgTGlicmFyeSA8aHR0cHM6Ly9kZXZlbG9wZXIubnZpZGlhLmNvbS9udmlkaWEtbWFuYWdlbWVudC1saWJyYXJ5LW52bWw+YF8uCitUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkgb25seS4KKworVGFyZ2V0cyBDcmVhdGVkOgorCistIGBgQ1VEQTo6bnZtbGBgCisKKy4uIF9gY3VkYV90b29sa2l0X252VG9vbHNFeHRgOgorCitudlRvb2xzRXh0CisiIiIiIiIiIiIiCisKK1RoZSBgTlZJRElBIFRvb2xzIEV4dGVuc2lvbiA8aHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vZ2FtZXdvcmtzL2NvbnRlbnQvZ2FtZXdvcmtzbGlicmFyeS9udnR4L252aWRpYV90b29sc19leHRlbnNpb25fbGlicmFyeV9udnR4Lmh0bT5gXy4KK1RoaXMgaXMgYSBzaGFyZWQgbGlicmFyeSBvbmx5LgorCitUYXJnZXRzIENyZWF0ZWQ6CisKKy0gYGBDVURBOjpudlRvb2xzRXh0YGAKKworLi4gX2BjdWRhX3Rvb2xraXRfb3BlbmNsYDoKKworT3BlbkNMCisiIiIiIiIKKworVGhlIGBOVklESUEgT3BlbkNMIExpYnJhcnkgPGh0dHBzOi8vZGV2ZWxvcGVyLm52aWRpYS5jb20vb3BlbmNsPmBfLgorVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5IG9ubHkuCisKK1RhcmdldHMgQ3JlYXRlZDoKKworLSBgYENVREE6Ok9wZW5DTGBgCisKKy4uIF9gY3VkYV90b29sa2l0X2N1TElCT1NgOgorCitjdUxJQk9TCisiIiIiIiIiCisKK1RoZSBjdUxJQk9TIGxpYnJhcnkgaXMgYSBiYWNrZW5kIHRocmVhZCBhYnN0cmFjdGlvbiBsYXllciBsaWJyYXJ5IHdoaWNoIGlzCitzdGF0aWMgb25seS4gIFRoZSBgYENVREE6OmN1Ymxhc19zdGF0aWNgYCwgYGBDVURBOjpjdXNwYXJzZV9zdGF0aWNgYCwKK2BgQ1VEQTo6Y3VmZnRfc3RhdGljYGAsIGBgQ1VEQTo6Y3VyYW5kX3N0YXRpY2BgLCBhbmQgKHdoZW4gaW1wbGVtZW50ZWQpIE5QUAorbGlicmFyaWVzIGFsbCBhdXRvbWF0aWNhbGx5IGhhdmUgdGhpcyBkZXBlbmRlbmN5IGxpbmtlZC4KKworVGFyZ2V0IENyZWF0ZWQ6CisKKy0gYGBDVURBOjpjdWxpYm9zYGAKKworKipOb3RlKio6IGRpcmVjdCB1c2FnZSBvZiB0aGlzIHRhcmdldCBieSBjb25zdW1lcnMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuCisKKy4uIF9gY3VkYV90b29sa2l0X2N1UkFORGA6CisKKworCitSZXN1bHQgdmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl5eCisKK2BgQ1VEQVRvb2xraXRfRk9VTkRgYAorICAgIEEgYm9vbGVhbiBzcGVjaWZ5aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBDVURBIFRvb2xraXQgd2FzIGZvdW5kLgorCitgYENVREFUb29sa2l0X1ZFUlNJT05gYAorICAgIFRoZSBleGFjdCB2ZXJzaW9uIG9mIHRoZSBDVURBIFRvb2xraXQgZm91bmQgKGFzIHJlcG9ydGVkIGJ5CisgICAgYGBudmNjIC0tdmVyc2lvbmBgIG9yIGBgdmVyc2lvbi50eHRgYCkuCisKK2BgQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUmBgCisgICAgVGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIENVREEgVG9vbGtpdC4KKworYGBDVURBVG9vbGtpdF9WRVJTSU9OX01BSk9SYGAKKyAgICBUaGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgQ1VEQSBUb29sa2l0LgorCitgYENVREFUb29sa2l0X1ZFUlNJT05fUEFUQ0hgYAorICAgIFRoZSBwYXRjaCB2ZXJzaW9uIG9mIHRoZSBDVURBIFRvb2xraXQuCisKK2BgQ1VEQVRvb2xraXRfQklOX0RJUmBgCisgICAgVGhlIHBhdGggdG8gdGhlIENVREEgVG9vbGtpdCBsaWJyYXJ5IGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBDVURBCisgICAgZXhlY3V0YWJsZSBgYG52Y2NgYC4KKworYGBDVURBVG9vbGtpdF9JTkNMVURFX0RJUlNgYAorICAgIFRoZSBwYXRoIHRvIHRoZSBDVURBIFRvb2xraXQgYGBpbmNsdWRlYGAgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGhlYWRlciBmaWxlcworICAgIHJlcXVpcmVkIHRvIGNvbXBpbGUgYSBwcm9qZWN0IGxpbmtpbmcgYWdhaW5zdCBDVURBLgorCitgYENVREFUb29sa2l0X0xJQlJBUllfRElSYGAKKyAgICBUaGUgcGF0aCB0byB0aGUgQ1VEQSBUb29sa2l0IGxpYnJhcnkgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIENVREEKKyAgICBSdW50aW1lIGxpYnJhcnkgYGBjdWRhcnRgYC4KKworYGBDVURBVG9vbGtpdF9MSUJSQVJZX1JPT1RgYAorICAgIFRoZSBwYXRoIHRvIHRoZSBDVURBIFRvb2xraXQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG52dm0gZGlyZWN0b3J5IGFuZAorICAgIHZlcnNpb24udHh0LgorCitgYENVREFUb29sa2l0X1RBUkdFVF9ESVJgYAorICAgIFRoZSBwYXRoIHRvIHRoZSBDVURBIFRvb2xraXQgZGlyZWN0b3J5IGluY2x1ZGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZQorICAgIHdoZW4gY3Jvc3MtY29tcGlsaW5nLiBXaGVuIG5vdCBjcm9zcy1jb21waWxpbmcgdGhpcyB3aWxsIGJlIGVxdWl2YWxlbnQgdG8KKyAgICB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiBgYENVREFUb29sa2l0X0JJTl9ESVJgYC4KKworYGBDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEVgYAorICAgIFRoZSBwYXRoIHRvIHRoZSBOVklESUEgQ1VEQSBjb21waWxlciBgYG52Y2NgYC4gIE5vdGUgdGhhdCB0aGlzIHBhdGggbWF5CisgICAgKipub3QqKiBiZSB0aGUgc2FtZSBhcworICAgIDp2YXJpYWJsZTpgQ01BS0VfQ1VEQV9DT01QSUxFUiA8Q01BS0VfPExBTkc+X0NPTVBJTEVSPmAuICBgYG52Y2NgYCBtdXN0IGJlCisgICAgZm91bmQgdG8gZGV0ZXJtaW5lIHRoZSBDVURBIFRvb2xraXQgdmVyc2lvbiBhcyB3ZWxsIGFzIGRldGVybWluaW5nIG90aGVyCisgICAgZmVhdHVyZXMgb2YgdGhlIFRvb2xraXQuICBUaGlzIHZhcmlhYmxlIGlzIHNldCBmb3IgdGhlIGNvbnZlbmllbmNlIG9mCisgICAgbW9kdWxlcyB0aGF0IGRlcGVuZCBvbiB0aGlzIG9uZS4KKworCisjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQorCisjIE5PVEU6IG11Y2ggb2YgdGhpcyB3YXMgc2ltcGx5IGV4dHJhY3RlZCBmcm9tIEZpbmRDVURBLmNtYWtlLgorCisjICAgSmFtZXMgQmlnbGVyLCBOVklESUEgQ29ycCAobnZpZGlhLmNvbSAtIGpiaWdsZXIpCisjICAgQWJlIFN0ZXBoZW5zLCBTQ0kgSW5zdGl0dXRlIC0tIGh0dHA6Ly93d3cuc2NpLnV0YWguZWR1L35hYmUvRmluZEN1ZGEuaHRtbAorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMDkgTlZJRElBIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOQorIyAgIFNjaWVudGlmaWMgQ29tcHV0aW5nIGFuZCBJbWFnaW5nIEluc3RpdHV0ZSwgVW5pdmVyc2l0eSBvZiBVdGFoCisjCisjICAgVGhpcyBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gIFNlZSB0aGUgRmluZENVREEuY21ha2Ugc2NyaXB0CisjICAgZm9yIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlLgorCisjIFRoZSBNSVQgTGljZW5zZQorIworIyBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyMgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisjIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisjIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworIyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyMgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhlIHRvb2xraXQgaXMgbG9jYXRlZCBkdXJpbmcgY29tcGlsZXIgZGV0ZWN0aW9uIGZvciBDVURBIGFuZCBzdG9yZWQgaW4gQ01ha2VDVURBQ29tcGlsZXIuY21ha2UgYXMKKyMgQ01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1QgYW5kIENNQUtFX0NVREFfQ09NUElMRVJfTElCUkFSWV9ST09ULgorIyBXZSBjb21wdXRlIHRoZSByZXN0IGJhc2VkIG9uIHRob3NlIGhlcmUgdG8gYXZvaWQgcmUtc2VhcmNoaW5nIGFuZCB0byBhdm9pZCBmaW5kaW5nIGEgcG9zc2libHkKKyMgZGlmZmVyZW50IGluc3RhbGxhdGlvbi4KK2lmKENNQUtFX0NVREFfQ09NUElMRVJfVE9PTEtJVF9ST09UKQorICBzZXQoQ1VEQVRvb2xraXRfUk9PVF9ESVIgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUl9UT09MS0lUX1JPT1R9IikKKyAgc2V0KENVREFUb29sa2l0X0xJQlJBUllfUk9PVCAiJHtDTUFLRV9DVURBX0NPTVBJTEVSX0xJQlJBUllfUk9PVH0iKQorICBzZXQoQ1VEQVRvb2xraXRfQklOX0RJUiAiJHtDVURBVG9vbGtpdF9ST09UX0RJUn0vYmluIikKKyAgc2V0KENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSAiJHtDVURBVG9vbGtpdF9CSU5fRElSfS9udmNjJHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0iKQorZWxzZSgpCisKKyAgZnVuY3Rpb24oX0NVREFUb29sa2l0X2ZpbmRfcm9vdF9kaXIgKQorICAgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyhhcmcgIiIgIiIgIlNFQVJDSF9QQVRIUztGSU5EX0ZMQUdTIiAke0FSR059KQorCisKKyAgICBpZihOT1QgQ1VEQVRvb2xraXRfQklOX0RJUikKKyAgICAgIGlmKE5PVCBDVURBVG9vbGtpdF9TRU5USU5FTF9GSUxFKQorICAgICAgICBmaW5kX3Byb2dyYW0oQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFCisgICAgICAgICAgTkFNRVMgbnZjYyBudmNjLmV4ZQorICAgICAgICAgIFBBVEhTICR7YXJnX1NFQVJDSF9QQVRIU30KKyAgICAgICAgICAke2FyZ19GSU5EX0ZMQUdTfQorICAgICAgICApCisgICAgICBlbmRpZigpCisKKyAgICAgIGlmKE5PVCBDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEUpCisgICAgICAgIGZpbmRfZmlsZShDVURBVG9vbGtpdF9TRU5USU5FTF9GSUxFCisgICAgICAgICAgTkFNRVMgdmVyc2lvbi50eHQKKyAgICAgICAgICBQQVRIUyAke2FyZ19TRUFSQ0hfUEFUSFN9CisgICAgICAgICAgTk9fREVGQVVMVF9QQVRICisgICAgICAgICkKKyAgICAgIGVuZGlmKCkKKworICAgICAgaWYoQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFKQorICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENVREFUb29sa2l0X0JJTl9ESVIgIiR7Q1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFfSIgRElSRUNUT1JZKQorCisgICAgICAgIHNldChDVURBVG9vbGtpdF9CSU5fRElSICIke0NVREFUb29sa2l0X0JJTl9ESVJ9IiBDQUNIRSBQQVRIICIiIEZPUkNFKQorICAgICAgICBtYXJrX2FzX2FkdmFuY2VkKENVREFUb29sa2l0X0JJTl9ESVIpCisgICAgICBlbHNlaWYoQ1VEQVRvb2xraXRfU0VOVElORUxfRklMRSkKKyAgICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDVURBVG9vbGtpdF9CSU5fRElSICR7Q1VEQVRvb2xraXRfU0VOVElORUxfRklMRX0gRElSRUNUT1JZIEFCU09MVVRFKQorICAgICAgICBzZXQoQ1VEQVRvb2xraXRfQklOX0RJUiAiJHtDVURBVG9vbGtpdF9CSU5fRElSfS9iaW4iKQorCisgICAgICAgIHNldChDVURBVG9vbGtpdF9CSU5fRElSICIke0NVREFUb29sa2l0X0JJTl9ESVJ9IiBDQUNIRSBQQVRIICIiIEZPUkNFKQorICAgICAgICBtYXJrX2FzX2FkdmFuY2VkKENVREFUb29sa2l0X0JJTl9ESVIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorCisgICAgaWYoQ1VEQVRvb2xraXRfQklOX0RJUikKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoQ1VEQVRvb2xraXRfUk9PVF9ESVIgJHtDVURBVG9vbGtpdF9CSU5fRElSfSBESVJFQ1RPUlkgQUJTT0xVVEUpCisgICAgICBzZXQoQ1VEQVRvb2xraXRfUk9PVF9ESVIgIiR7Q1VEQVRvb2xraXRfUk9PVF9ESVJ9IiBQQVJFTlRfU0NPUEUpCisgICAgZW5kaWYoKQorCisgIGVuZGZ1bmN0aW9uKCkKKworICBmdW5jdGlvbihfQ1VEQVRvb2xraXRfZmluZF92ZXJzaW9uX2ZpbGUgcmVzdWx0X3ZhcmlhYmxlKQorICAgICMgV2UgZmlyc3QgY2hlY2sgZm9yIGEgbm9uLXNjYXR0ZXJlZCBpbnN0YWxsYXRpb24gdG8gcHJlZmVyIGl0IG92ZXIgYSBzY2F0dGVyZWQgaW5zdGFsbGF0aW9uLgorICAgIGlmKENVREFUb29sa2l0X1JPT1QgQU5EIEVYSVNUUyAiJHtDVURBVG9vbGtpdF9ST09UfS92ZXJzaW9uLnR4dCIpCisgICAgICBzZXQoJHtyZXN1bHRfdmFyaWFibGV9ICIke0NVREFUb29sa2l0X1JPT1R9L3ZlcnNpb24udHh0IiBQQVJFTlRfU0NPUEUpCisgICAgZWxzZWlmKENVREFUb29sa2l0X1JPT1RfRElSIEFORCBFWElTVFMgIiR7Q1VEQVRvb2xraXRfUk9PVF9ESVJ9L3ZlcnNpb24udHh0IikKKyAgICAgIHNldCgke3Jlc3VsdF92YXJpYWJsZX0gIiR7Q1VEQVRvb2xraXRfUk9PVF9ESVJ9L3ZlcnNpb24udHh0IiBQQVJFTlRfU0NPUEUpCisgICAgZWxzZWlmKENNQUtFX1NZU1JPT1RfTElOSyBBTkQgRVhJU1RTICIke0NNQUtFX1NZU1JPT1RfTElOS30vdXNyL2xpYi9jdWRhL3ZlcnNpb24udHh0IikKKyAgICAgIHNldCgke3Jlc3VsdF92YXJpYWJsZX0gIiR7Q01BS0VfU1lTUk9PVF9MSU5LfS91c3IvbGliL2N1ZGEvdmVyc2lvbi50eHQiIFBBUkVOVF9TQ09QRSkKKyAgICBlbHNlaWYoRVhJU1RTICIke0NNQUtFX1NZU1JPT1R9L3Vzci9saWIvY3VkYS92ZXJzaW9uLnR4dCIpCisgICAgICBzZXQoJHtyZXN1bHRfdmFyaWFibGV9ICIke0NNQUtFX1NZU1JPT1R9L3Vzci9saWIvY3VkYS92ZXJzaW9uLnR4dCIgUEFSRU5UX1NDT1BFKQorICAgIGVuZGlmKCkKKyAgZW5kZnVuY3Rpb24oKQorCisgICMgRm9yIE5WQ0Mgd2UgY2FuIGVhc2lseSBkZWR1Y2UgdGhlIFNESyBiaW5hcnkgZGlyZWN0b3J5IGZyb20gdGhlIGNvbXBpbGVyIHBhdGguCisgIGlmKENNQUtFX0NVREFfQ09NUElMRVJfTE9BREVEIEFORCBOT1QgQ1VEQVRvb2xraXRfQklOX0RJUiBBTkQgQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTlZJRElBIikKKyAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENVREFUb29sa2l0X0JJTl9ESVIgIiR7Q01BS0VfQ1VEQV9DT01QSUxFUn0iIERJUkVDVE9SWSkKKyAgICBzZXQoQ1VEQVRvb2xraXRfQklOX0RJUiAiJHtDVURBVG9vbGtpdF9CSU5fRElSfSIgQ0FDSEUgUEFUSCAiIikKKyAgICAjIFRyeSBsYW5ndWFnZSBwcm92aWRlZCBwYXRoIGZpcnN0LgorICAgIF9DVURBVG9vbGtpdF9maW5kX3Jvb3RfZGlyKFNFQVJDSF9QQVRIUyAiJHtDVURBVG9vbGtpdF9CSU5fRElSfSIgRklORF9GTEFHUyBOT19ERUZBVUxUX1BBVEgpCisgICAgbWFya19hc19hZHZhbmNlZChDVURBVG9vbGtpdF9CSU5fRElSKQorICBlbmRpZigpCisKKyAgIyBUcnkgdXNlciBwcm92aWRlZCBwYXRoCisgIGlmKE5PVCBDVURBVG9vbGtpdF9ST09UX0RJUiBBTkQgQ1VEQVRvb2xraXRfUk9PVCkKKyAgICBfQ1VEQVRvb2xraXRfZmluZF9yb290X2RpcihTRUFSQ0hfUEFUSFMgIiR7Q1VEQVRvb2xraXRfUk9PVH0iIEZJTkRfRkxBR1MgUEFUSF9TVUZGSVhFUyBiaW4gTk9fREVGQVVMVF9QQVRIKQorICBlbmRpZigpCisgIGlmKE5PVCBDVURBVG9vbGtpdF9ST09UX0RJUikKKyAgICBfQ1VEQVRvb2xraXRfZmluZF9yb290X2RpcihGSU5EX0ZMQUdTIFBBVEhTICJFTlYgQ1VEQV9QQVRIIiBQQVRIX1NVRkZJWEVTIGJpbikKKyAgZW5kaWYoKQorCisgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIENVREFUb29sa2l0X1JPT1QgYnV0IHRoZSB0b29sa2l0IGNvdWxkIG5vdCBiZSBmb3VuZCwgdGhpcyBpcyBhbiBlcnJvci4KKyAgaWYoTk9UIENVREFUb29sa2l0X1JPT1RfRElSIEFORCAoREVGSU5FRCBDVURBVG9vbGtpdF9ST09UIE9SIERFRklORUQgRU5We0NVREFUb29sa2l0X1JPT1R9KSkKKyAgICAjIERlY2xhcmUgZXJyb3IgbWVzc2FnZXMgbm93LCBwcmludCBsYXRlciBkZXBlbmRpbmcgb24gZmluZF9wYWNrYWdlIGFyZ3MuCisgICAgc2V0KGZhaWxfYmFzZSAiQ291bGQgbm90IGZpbmQgbnZjYyBleGVjdXRhYmxlIGluIHBhdGggc3BlY2lmaWVkIGJ5IikKKyAgICBzZXQoY3VkYV9yb290X2ZhaWwgIiR7ZmFpbF9iYXNlfSBDVURBVG9vbGtpdF9ST09UPSR7Q1VEQVRvb2xraXRfUk9PVH0iKQorICAgIHNldChlbnZfY3VkYV9yb290X2ZhaWwgIiR7ZmFpbF9iYXNlfSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDVURBVG9vbGtpdF9ST09UPSRFTlZ7Q1VEQVRvb2xraXRfUk9PVH0iKQorCisgICAgaWYoQ1VEQVRvb2xraXRfRklORF9SRVFVSVJFRCkKKyAgICAgIGlmKERFRklORUQgQ1VEQVRvb2xraXRfUk9PVCkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAke2N1ZGFfcm9vdF9mYWlsfSkKKyAgICAgIGVsc2VpZihERUZJTkVEIEVOVntDVURBVG9vbGtpdF9ST09UfSkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAke2Vudl9jdWRhX3Jvb3RfZmFpbH0pCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBpZihOT1QgQ1VEQVRvb2xraXRfRklORF9RVUlFVExZKQorICAgICAgICBpZihERUZJTkVEIENVREFUb29sa2l0X1JPT1QpCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMgJHtjdWRhX3Jvb3RfZmFpbH0pCisgICAgICAgIGVsc2VpZihERUZJTkVEIEVOVntDVURBVG9vbGtpdF9ST09UfSkKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAke2Vudl9jdWRhX3Jvb3RfZmFpbH0pCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGlmKCkKKyAgICAgIHNldChDVURBVG9vbGtpdF9GT1VORCBGQUxTRSkKKyAgICAgIHVuc2V0KGZhaWxfYmFzZSkKKyAgICAgIHVuc2V0KGN1ZGFfcm9vdF9mYWlsKQorICAgICAgdW5zZXQoZW52X2N1ZGFfcm9vdF9mYWlsKQorICAgICAgcmV0dXJuKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICAjIENVREFUb29sa2l0X1JPT1QgY21ha2UgLyBlbnYgdmFyaWFibGUgbm90IHNwZWNpZmllZCwgdHJ5IHBsYXRmb3JtIGRlZmF1bHRzLgorICAjCisgICMgLSBMaW51eDogL3Vzci9sb2NhbC9jdWRhLVguWQorICAjIC0gbWFjT1M6IC9EZXZlbG9wZXIvTlZJRElBL0NVREEtWC5ZCisgICMgLSBXaW5kb3dzOiBDOlxQcm9ncmFtIEZpbGVzXE5WSURJQSBHUFUgQ29tcHV0aW5nIFRvb2xraXRcQ1VEQVx2WC5ZCisgICMKKyAgIyBXZSB3aWxsIGFsc28gc2VhcmNoIHRoZSBkZWZhdWx0IHN5bWxpbmsgbG9jYXRpb24gL3Vzci9sb2NhbC9jdWRhIGZpcnN0IHNpbmNlCisgICMgaWYgQ1VEQVRvb2xraXRfUk9PVCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHN5bWxpbmtlZAorICAjIGRpcmVjdG9yeSBpcyB0aGUgZGVzaXJlZCBsb2NhdGlvbi4KKyAgaWYoTk9UIENVREFUb29sa2l0X1JPT1RfRElSKQorICAgIGlmKFVOSVgpCisgICAgICBpZihOT1QgQVBQTEUpCisgICAgICAgIHNldChwbGF0Zm9ybV9iYXNlICIvdXNyL2xvY2FsL2N1ZGEtIikKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQocGxhdGZvcm1fYmFzZSAiL0RldmVsb3Blci9OVklESUEvQ1VEQS0iKQorICAgICAgZW5kaWYoKQorICAgIGVsc2UoKQorICAgICAgc2V0KHBsYXRmb3JtX2Jhc2UgIkM6XFxQcm9ncmFtIEZpbGVzXFxOVklESUEgR1BVIENvbXB1dGluZyBUb29sa2l0XFxDVURBXFx2IikKKyAgICBlbmRpZigpCisKKyAgICAjIEJ1aWxkIG91dCBhIGRlc2NlbmRpbmcgbGlzdCBvZiBwb3NzaWJsZSBjdWRhIGluc3RhbGxhdGlvbnMsIGUuZy4KKyAgICBmaWxlKEdMT0IgcG9zc2libGVfcGF0aHMgIiR7cGxhdGZvcm1fYmFzZX0qIikKKyAgICAjIEl0ZXJhdGUgdGhlIGdsb2IgcmVzdWx0cyBhbmQgY3JlYXRlIGEgZGVzY2VuZGluZyBsaXN0LgorICAgIHNldCh2ZXJzaW9ucykKKyAgICBmb3JlYWNoKHAgJHtwb3NzaWJsZV9wYXRoc30pCisgICAgICAjIEV4dHJhY3QgdmVyc2lvbiBudW1iZXIgZnJvbSBlbmQgb2Ygc3RyaW5nCisgICAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIlswLTldWzAtOV0/XFwuWzAtOV0kIiBwX3ZlcnNpb24gJHtwfSkKKyAgICAgIGlmKElTX0RJUkVDVE9SWSAke3B9IEFORCBwX3ZlcnNpb24pCisgICAgICAgIGxpc3QoQVBQRU5EIHZlcnNpb25zICR7cF92ZXJzaW9ufSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRmb3JlYWNoKCkKKworICAgICMgU29ydCBudW1lcmljYWxseSBpbiBkZXNjZW5kaW5nIG9yZGVyLCBzbyB3ZSB0cnkgdGhlIG5ld2VzdCB2ZXJzaW9ucyBmaXJzdC4KKyAgICBsaXN0KFNPUlQgdmVyc2lvbnMgQ09NUEFSRSBOQVRVUkFMIE9SREVSIERFU0NFTkRJTkcpCisKKyAgICAjIFdpdGggYSBkZXNjZW5kaW5nIGxpc3Qgb2YgdmVyc2lvbnMsIHBvcHVsYXRlIHBvc3NpYmxlIHBhdGhzIHRvIHNlYXJjaC4KKyAgICBzZXQoc2VhcmNoX3BhdGhzKQorICAgIGZvcmVhY2godiAke3ZlcnNpb25zfSkKKyAgICAgIGxpc3QoQVBQRU5EIHNlYXJjaF9wYXRocyAiJHtwbGF0Zm9ybV9iYXNlfSR7dn0iKQorICAgIGVuZGZvcmVhY2goKQorCisgICAgIyBGb3JjZSB0aGUgZ2xvYmFsIGRlZmF1bHQgL3Vzci9sb2NhbC9jdWRhIHRvIHRoZSBmcm9udCBvbiBVbml4LgorICAgIGlmKFVOSVgpCisgICAgICBsaXN0KElOU0VSVCBzZWFyY2hfcGF0aHMgMCAiL3Vzci9sb2NhbC9jdWRhIikKKyAgICBlbmRpZigpCisKKyAgICAjIE5vdyBzZWFyY2ggZm9yIHRoZSB0b29sa2l0IGFnYWluIHVzaW5nIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IHNlYXJjaCBwYXRocy4KKyAgICBfQ1VEQVRvb2xraXRfZmluZF9yb290X2RpcihTRUFSQ0hfUEFUSFMgIiR7c2VhcmNoX3BhdGhzfSIgRklORF9GTEFHUyBQQVRIX1NVRkZJWEVTIGJpbikKKworICAgICMgV2UgYXJlIGRvbmUgd2l0aCB0aGVzZSB2YXJpYWJsZXMgbm93LCBjbGVhbnVwIGZvciBjYWxsZXIuCisgICAgdW5zZXQocGxhdGZvcm1fYmFzZSkKKyAgICB1bnNldChwb3NzaWJsZV9wYXRocykKKyAgICB1bnNldCh2ZXJzaW9ucykKKyAgICB1bnNldChzZWFyY2hfcGF0aHMpCisKKyAgICBpZihOT1QgQ1VEQVRvb2xraXRfUk9PVF9ESVIpCisgICAgICBpZihDVURBVG9vbGtpdF9GSU5EX1JFUVVJUkVEKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZmluZCBudmNjLCBwbGVhc2Ugc2V0IENVREFUb29sa2l0X1JPT1QuIikKKyAgICAgIGVsc2VpZihOT1QgQ1VEQVRvb2xraXRfRklORF9RVUlFVExZKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiQ291bGQgbm90IGZpbmQgbnZjYywgcGxlYXNlIHNldCBDVURBVG9vbGtpdF9ST09ULiIpCisgICAgICBlbmRpZigpCisKKyAgICAgIHNldChDVURBVG9vbGtpdF9GT1VORCBGQUxTRSkKKyAgICAgIHJldHVybigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKKyAgX0NVREFUb29sa2l0X2ZpbmRfdmVyc2lvbl9maWxlKCBfQ1VEQVRvb2xraXRfdmVyc2lvbl9maWxlICkKKyAgaWYoX0NVREFUb29sa2l0X3ZlcnNpb25fZmlsZSkKKyAgICAjIENVREFUb29sa2l0X0xJQlJBUllfUk9PVCBjb250YWlucyB0aGUgZGV2aWNlIGxpYnJhcnkgYW5kIHZlcnNpb24gZmlsZS4KKyAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KENVREFUb29sa2l0X0xJQlJBUllfUk9PVCAiJHtfQ1VEQVRvb2xraXRfdmVyc2lvbl9maWxlfSIgRElSRUNUT1JZIEFCU09MVVRFKQorICBlbmRpZigpCisgIHVuc2V0KF9DVURBVG9vbGtpdF92ZXJzaW9uX2ZpbGUpCitlbmRpZigpCisKKyMgSGFuZGxlIGNyb3NzIGNvbXBpbGF0aW9uCitpZihDTUFLRV9DUk9TU0NPTVBJTElORykKKyAgaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAiYXJtdjctYSIpCisgICAgIyBTdXBwb3J0IGZvciBOVlBBQ0sKKyAgICBzZXQoQ1VEQVRvb2xraXRfVEFSR0VUX05BTUUgImFybXY3LWxpbnV4LWFuZHJvaWRlYWJpIikKKyAgZWxzZWlmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgTUFUQ0hFUyAiYXJtIikKKyAgICAjIFN1cHBvcnQgZm9yIGFybSBjcm9zcyBjb21waWxhdGlvbgorICAgIHNldChDVURBVG9vbGtpdF9UQVJHRVRfTkFNRSAiYXJtdjctbGludXgtZ251ZWFiaWhmIikKKyAgZWxzZWlmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgTUFUQ0hFUyAiYWFyY2g2NCIpCisgICAgIyBTdXBwb3J0IGZvciBhYXJjaDY0IGNyb3NzIGNvbXBpbGF0aW9uCisgICAgaWYoQU5EUk9JRF9BUkNIX05BTUUgU1RSRVFVQUwgImFybTY0IikKKyAgICAgIHNldChDVURBVG9vbGtpdF9UQVJHRVRfTkFNRSAiYWFyY2g2NC1saW51eC1hbmRyb2lkZWFiaSIpCisgICAgZWxzZSgpCisgICAgICBzZXQoQ1VEQVRvb2xraXRfVEFSR0VUX05BTUUgImFhcmNoNjQtbGludXgiKQorICAgIGVuZGlmKEFORFJPSURfQVJDSF9OQU1FIFNUUkVRVUFMICJhcm02NCIpCisgIGVsc2VpZihDTUFLRV9TWVNURU1fUFJPQ0VTU09SIFNUUkVRVUFMICJ4ODZfNjQiKQorICAgIHNldChDVURBVG9vbGtpdF9UQVJHRVRfTkFNRSAieDg2XzY0LWxpbnV4IikKKyAgZW5kaWYoKQorCisgIGlmKEVYSVNUUyAiJHtDVURBVG9vbGtpdF9ST09UX0RJUn0vdGFyZ2V0cy8ke0NVREFUb29sa2l0X1RBUkdFVF9OQU1FfSIpCisgICAgc2V0KENVREFUb29sa2l0X1RBUkdFVF9ESVIgIiR7Q1VEQVRvb2xraXRfUk9PVF9ESVJ9L3RhcmdldHMvJHtDVURBVG9vbGtpdF9UQVJHRVRfTkFNRX0iKQorICAgICMgYWRkIGtub3duIENVREEgdGFyZ2V0IHJvb3QgcGF0aCB0byB0aGUgc2V0IG9mIGRpcmVjdG9yaWVzIHdlIHNlYXJjaCBmb3IgcHJvZ3JhbXMsIGxpYnJhcmllcyBhbmQgaGVhZGVycworICAgIGxpc3QoUFJFUEVORCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAiJHtDVURBVG9vbGtpdF9UQVJHRVRfRElSfSIpCisKKyAgICAjIE1hcmsgdGhhdCB3ZSBuZWVkIHRvIHBvcCB0aGUgcm9vdCBzZWFyY2ggcGF0aCBjaGFuZ2VzIGFmdGVyIHdlIGhhdmUKKyAgICAjIGZvdW5kIGFsbCBjdWRhIGxpYnJhcmllcyBzbyB0aGF0IHNlYXJjaGVzIGZvciBvdXIgY3Jvc3MtY29tcGlsYXRpb24KKyAgICAjIGxpYnJhcmllcyB3b3JrIHdoZW4gYW5vdGhlciBjdWRhIHNkayBpcyBpbiBDTUFLRV9QUkVGSVhfUEFUSCBvcgorICAgICMgUEFUaAorICAgIHNldChfQ1VEQVRvb2xraXRfUG9wX1JPT1RfUEFUSCBUcnVlKQorICBlbmRpZigpCitlbHNlKCkKKyAgIyBOb3QgY3Jvc3MgY29tcGlsaW5nCisgIHNldChDVURBVG9vbGtpdF9UQVJHRVRfRElSICIke0NVREFUb29sa2l0X1JPT1RfRElSfSIpCisgICMgTm93IHRoYXQgd2UgaGF2ZSB0aGUgcmVhbCBST09UX0RJUiwgZmluZCBjb21wb25lbnRzIGluc2lkZSBpdC4KKyAgbGlzdChBUFBFTkQgQ01BS0VfUFJFRklYX1BBVEggJHtDVURBVG9vbGtpdF9ST09UX0RJUn0pCisKKyAgIyBNYXJrIHRoYXQgd2UgbmVlZCB0byBwb3AgdGhlIHByZWZpeCBwYXRoIGNoYW5nZXMgYWZ0ZXIgd2UgaGF2ZQorICAjIGZvdW5kIHRoZSBjdWRhcnQgbGlicmFyeS4KKyAgc2V0KF9DVURBVG9vbGtpdF9Qb3BfUHJlZml4IFRydWUpCitlbmRpZigpCisKKyMgQ1VEQVRvb2xraXRfVEFSR0VUX0RJUiBhbHdheXMgcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW5jbHVkZSBkaXJlY3RvcnkuCisjIE9uIGEgc2NhdHRlcmVkIGluc3RhbGxhdGlvbiAvdXNyLCBvbiBhIG5vbi1zY2F0dGVyZWQgc29tZXRoaW5nIGxpa2UgL3Vzci9sb2NhbC9jdWRhIG9yIC91c3IvbG9jYWwvY3VkYS0xMC4yL3RhcmdldHMvYWFyY2g2NC1saW51eC4KK2lmKEVYSVNUUyAiJHtDVURBVG9vbGtpdF9UQVJHRVRfRElSfS9pbmNsdWRlL2N1ZGFfcnVudGltZS5oIikKKyAgc2V0KENVREFUb29sa2l0X0lOQ0xVREVfRElSICIke0NVREFUb29sa2l0X1RBUkdFVF9ESVJ9L2luY2x1ZGUiKQorZWxzZWlmKE5PVCBDVURBVG9vbGtpdF9GSU5EX1FVSUVUTFkpCisgIG1lc3NhZ2UoU1RBVFVTICJVbmFibGUgdG8gZmluZCBjdWRhX3J1bnRpbWUuaCBpbiBcIiR7Q1VEQVRvb2xraXRfVEFSR0VUX0RJUn0vaW5jbHVkZVwiIGZvciBDVURBVG9vbGtpdF9JTkNMVURFX0RJUi4iKQorZW5kaWYoKQorCitpZihDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEUgQU5ECisgICBDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEUgU1RSRVFVQUwgQ01BS0VfQ1VEQV9DT01QSUxFUikKKyAgIyBOZWVkIHRvIHNldCB0aGVzZSBiYXNlZCBvZmYgdGhlIGFscmVhZHkgY29tcHV0ZWQgQ01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OIHZhbHVlCisgICMgVGhpcyBpZiBzdGF0ZW1lbnQgd2lsbCBhbHdheXMgbWF0Y2gsIGJ1dCBpcyB1c2VkIHRvIHByb3ZpZGUgdmFyaWFibGVzIGZvciBNQVRDSCAxLDIsMy4uLgorICBpZihDTUFLRV9DVURBX0NPTVBJTEVSX1ZFUlNJT04gTUFUQ0hFUyBbPVsoWzAtOV0rKVwuKFswLTldKylcLihbMC05XSspXT1dKQorICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX01BSk9SICIke0NNQUtFX01BVENIXzF9IikKKyAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTl9NSU5PUiAiJHtDTUFLRV9NQVRDSF8yfSIpCisgICAgc2V0KENVREFUb29sa2l0X1ZFUlNJT05fUEFUQ0ggIiR7Q01BS0VfTUFUQ0hfM30iKQorICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OICIke0NNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTn0iKQorICBlbmRpZigpCitlbHNlaWYoQ1VEQVRvb2xraXRfTlZDQ19FWEVDVVRBQkxFKQorICAjIENvbXB1dGUgdGhlIHZlcnNpb24gYnkgaW52b2tpbmcgbnZjYworICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRX0gIi0tdmVyc2lvbiIgT1VUUFVUX1ZBUklBQkxFIE5WQ0NfT1VUKQorICBpZihOVkNDX09VVCBNQVRDSEVTIFs9WyBWKFswLTldKylcLihbMC05XSspXC4oWzAtOV0rKV09XSkKKyAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUiAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgc2V0KENVREFUb29sa2l0X1ZFUlNJT05fTUlOT1IgIiR7Q01BS0VfTUFUQ0hfMn0iKQorICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX1BBVENIICIke0NNQUtFX01BVENIXzN9IikKKyAgICBzZXQoQ1VEQVRvb2xraXRfVkVSU0lPTiAgIiR7Q01BS0VfTUFUQ0hfMX0uJHtDTUFLRV9NQVRDSF8yfS4ke0NNQUtFX01BVENIXzN9IikKKyAgZW5kaWYoKQorICB1bnNldChOVkNDX09VVCkKK2Vsc2UoKQorICBfQ1VEQVRvb2xraXRfZmluZF92ZXJzaW9uX2ZpbGUodmVyc2lvbl9maWxlKQorICBpZih2ZXJzaW9uX2ZpbGUpCisgICAgZmlsZShSRUFEICIke3ZlcnNpb25fZmlsZX0iIFZFUlNJT05fSU5GTykKKyAgICBpZihWRVJTSU9OX0lORk8gTUFUQ0hFUyBbPVtDVURBIFZlcnNpb24gKFswLTldKylcLihbMC05XSspXC4oWzAtOV0rKV09XSkKKyAgICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX01BSk9SICIke0NNQUtFX01BVENIXzF9IikKKyAgICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX01JTk9SICIke0NNQUtFX01BVENIXzJ9IikKKyAgICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OX1BBVENIICIke0NNQUtFX01BVENIXzN9IikKKyAgICAgIHNldChDVURBVG9vbGtpdF9WRVJTSU9OICAiJHtDTUFLRV9NQVRDSF8xfS4ke0NNQUtFX01BVENIXzJ9LiR7Q01BS0VfTUFUQ0hfM30iKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCisjIEZpbmQgdGhlIENVREEgUnVudGltZSBMaWJyYXJ5IGxpYmN1ZGFydAorZmluZF9saWJyYXJ5KENVREFfQ1VEQVJUCisgIE5BTUVTIGN1ZGFydAorICBQQVRIX1NVRkZJWEVTIGxpYjY0IGxpYi94NjQKKykKK2ZpbmRfbGlicmFyeShDVURBX0NVREFSVAorICBOQU1FUyBjdWRhcnQKKyAgUEFUSF9TVUZGSVhFUyBsaWI2NC9zdHVicyBsaWIveDY0L3N0dWJzCispCisKK2lmKE5PVCBDVURBX0NVREFSVCBBTkQgTk9UIENVREFUb29sa2l0X0ZJTkRfUVVJRVRMWSkKKyAgbWVzc2FnZShTVEFUVVMgIlVuYWJsZSB0byBmaW5kIGN1ZGFydCBsaWJyYXJ5LiIpCitlbmRpZigpCisKK2lmKF9DVURBVG9vbGtpdF9Qb3BfUHJlZml4KQorICBsaXN0KFJFTU9WRV9BVCBDTUFLRV9QUkVGSVhfUEFUSCAtMSkKKyAgdW5zZXQoX0NVREFUb29sa2l0X1BvcF9QcmVmaXgpCitlbmRpZigpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIHZlcnNpb24gY29tcGFyaXNvbiBhbmQgdmFsaWRhdGUgYWxsIHJlcXVpcmVkIHZhcmlhYmxlcyBhcmUgc2V0LgoraW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKENVREFUb29sa2l0CisgIFJFUVVJUkVEX1ZBUlMKKyAgICBDVURBVG9vbGtpdF9JTkNMVURFX0RJUgorICAgIENVREFfQ1VEQVJUCisgICAgQ1VEQVRvb2xraXRfQklOX0RJUgorICBWRVJTSU9OX1ZBUgorICAgIENVREFUb29sa2l0X1ZFUlNJT04KKykKKwordW5zZXQoQ1VEQVRvb2xraXRfUk9PVF9ESVIpCittYXJrX2FzX2FkdmFuY2VkKENVREFfQ1VEQVJUCisgICAgICAgICAgICAgICAgIENVREFUb29sa2l0X0lOQ0xVREVfRElSCisgICAgICAgICAgICAgICAgIENVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRQorICAgICAgICAgICAgICAgICBDVURBVG9vbGtpdF9TRU5USU5FTF9GSUxFCisgICAgICAgICAgICAgICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbnN0cnVjdCByZXN1bHQgdmFyaWFibGVzCitpZihDVURBVG9vbGtpdF9GT1VORCkKKyAgc2V0KENVREFUb29sa2l0X0lOQ0xVREVfRElSUyAke0NVREFUb29sa2l0X0lOQ0xVREVfRElSfSkKKyAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChDVURBVG9vbGtpdF9MSUJSQVJZX0RJUiAke0NVREFfQ1VEQVJUfSBESVJFQ1RPUlkgQUJTT0xVVEUpCitlbmRpZigpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25zdHJ1Y3QgaW1wb3J0IHRhcmdldHMKK2lmKENVREFUb29sa2l0X0ZPVU5EKQorCisgIGZ1bmN0aW9uKF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYiBsaWJfbmFtZSkKKyAgICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoYXJnICIiICIiICJBTFQ7REVQUztFWFRSQV9QQVRIX1NVRkZJWEVTIiAke0FSR059KQorCisgICAgc2V0KHNlYXJjaF9uYW1lcyAke2xpYl9uYW1lfSAke2FyZ19BTFR9KQorCisgICAgZmluZF9saWJyYXJ5KENVREFfJHtsaWJfbmFtZX1fTElCUkFSWQorICAgICAgTkFNRVMgJHtzZWFyY2hfbmFtZXN9CisgICAgICBISU5UUyAke0NVREFUb29sa2l0X0xJQlJBUllfRElSfQorICAgICAgICAgICAgRU5WIENVREFfUEFUSAorICAgICAgUEFUSF9TVUZGSVhFUyBudmlkaWEvY3VycmVudCBsaWI2NCBsaWIveDY0IGxpYgorICAgICAgICAgICAgICAgICAgICAke2FyZ19FWFRSQV9QQVRIX1NVRkZJWEVTfQorICAgICkKKyAgICAjIERvbid0IHRyeSBhbnkgc3R1YiBkaXJlY3RvcmllcyB1bnRpbCB3ZSBoYXZlIGV4aGF1c3RlZCBhbGwgb3RoZXIKKyAgICAjIHNlYXJjaCBsb2NhdGlvbnMuCisgICAgZmluZF9saWJyYXJ5KENVREFfJHtsaWJfbmFtZX1fTElCUkFSWQorICAgICAgTkFNRVMgJHtzZWFyY2hfbmFtZXN9CisgICAgICBISU5UUyAke0NVREFUb29sa2l0X0xJQlJBUllfRElSfQorICAgICAgICAgICAgRU5WIENVREFfUEFUSAorICAgICAgUEFUSF9TVUZGSVhFUyBsaWI2NC9zdHVicyBsaWIveDY0L3N0dWJzIGxpYi9zdHVicyBzdHVicworICAgICkKKworICAgIG1hcmtfYXNfYWR2YW5jZWQoQ1VEQV8ke2xpYl9uYW1lfV9MSUJSQVJZKQorCisgICAgaWYgKE5PVCBUQVJHRVQgQ1VEQTo6JHtsaWJfbmFtZX0gQU5EIENVREFfJHtsaWJfbmFtZX1fTElCUkFSWSkKKyAgICAgIGFkZF9saWJyYXJ5KENVREE6OiR7bGliX25hbWV9IElNUE9SVEVEIElOVEVSRkFDRSkKKyAgICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKENVREE6OiR7bGliX25hbWV9IFNZU1RFTSBJTlRFUkZBQ0UgIiR7Q1VEQVRvb2xraXRfSU5DTFVERV9ESVJTfSIpCisgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoQ1VEQTo6JHtsaWJfbmFtZX0gSU5URVJGQUNFICIke0NVREFfJHtsaWJfbmFtZX1fTElCUkFSWX0iKQorICAgICAgZm9yZWFjaChkZXAgJHthcmdfREVQU30pCisgICAgICAgIGlmKFRBUkdFVCBDVURBOjoke2RlcH0pCisgICAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKENVREE6OiR7bGliX25hbWV9IElOVEVSRkFDRSBDVURBOjoke2RlcH0pCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgIGVuZGlmKCkKKyAgZW5kZnVuY3Rpb24oKQorCisgIGlmKE5PVCBUQVJHRVQgQ1VEQTo6dG9vbGtpdCkKKyAgICBhZGRfbGlicmFyeShDVURBOjp0b29sa2l0IElNUE9SVEVEIElOVEVSRkFDRSkKKyAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhDVURBOjp0b29sa2l0IFNZU1RFTSBJTlRFUkZBQ0UgIiR7Q1VEQVRvb2xraXRfSU5DTFVERV9ESVJTfSIpCisgICAgdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMoQ1VEQTo6dG9vbGtpdCBJTlRFUkZBQ0UgIiR7Q1VEQVRvb2xraXRfTElCUkFSWV9ESVJ9IikKKyAgZW5kaWYoKQorCisgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYihjdWRhX2RyaXZlciBBTFQgY3VkYSkKKworICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3VkYXJ0KQorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3VkYXJ0X3N0YXRpYykKKworICAjIHNldHVwIGRlcGVuZGVuY2llcyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgY3VkYXJ0X3N0YXRpYyB3aGVuIGJ1aWxkaW5nCisgICMgb24gbGludXguIFRoZXNlIGFyZSBnZW5lcmFsbHkgb25seSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBDVURBIHRvb2xraXQKKyAgIyB3aGVuIENVREEgbGFuZ3VhZ2UgaXMgZGlzYWJsZWQKKyAgaWYoTk9UIFRBUkdFVCBDVURBOjpjdWRhcnRfc3RhdGljX2RlcHMKKyAgICAgQU5EIFRBUkdFVCBDVURBOjpjdWRhcnRfc3RhdGljKQorCisgICAgYWRkX2xpYnJhcnkoQ1VEQTo6Y3VkYXJ0X3N0YXRpY19kZXBzIElNUE9SVEVEIElOVEVSRkFDRSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoQ1VEQTo6Y3VkYXJ0X3N0YXRpYyBJTlRFUkZBQ0UgQ1VEQTo6Y3VkYXJ0X3N0YXRpY19kZXBzKQorCisgICAgaWYoVU5JWCBBTkQgKENNQUtFX0NfQ09NUElMRVIgT1IgQ01BS0VfQ1hYX0NPTVBJTEVSKSkKKyAgICAgIGZpbmRfcGFja2FnZShUaHJlYWRzIFJFUVVJUkVEKQorICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKENVREE6OmN1ZGFydF9zdGF0aWNfZGVwcyBJTlRFUkZBQ0UgVGhyZWFkczo6VGhyZWFkcyAke0NNQUtFX0RMX0xJQlN9KQorICAgIGVuZGlmKCkKKworICAgIGlmKFVOSVggQU5EIE5PVCBBUFBMRSkKKyAgICAgICMgT24gTGludXgsIHlvdSBtdXN0IGxpbmsgYWdhaW5zdCBsaWJydCB3aGVuIHVzaW5nIHRoZSBzdGF0aWMgY3VkYSBydW50aW1lLgorICAgICAgZmluZF9saWJyYXJ5KENVREFUb29sa2l0X3J0X0xJQlJBUlkgcnQpCisgICAgICBtYXJrX2FzX2FkdmFuY2VkKENVREFUb29sa2l0X3J0X0xJQlJBUlkpCisgICAgICBpZihOT1QgQ1VEQVRvb2xraXRfcnRfTElCUkFSWSkKKyAgICAgICAgbWVzc2FnZShXQVJOSU5HICJDb3VsZCBub3QgZmluZCBsaWJydCBsaWJyYXJ5LCBuZWVkZWQgYnkgQ1VEQTo6Y3VkYXJ0X3N0YXRpYyIpCisgICAgICBlbHNlKCkKKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKENVREE6OmN1ZGFydF9zdGF0aWNfZGVwcyBJTlRFUkZBQ0UgJHtDVURBVG9vbGtpdF9ydF9MSUJSQVJZfSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3VsaWJvcykgIyBpdCdzIGEgc3RhdGljIGxpYnJhcnkKKyAgZm9yZWFjaCAoY3VkYV9saWIgY3VibGFzTHQgY3VibGFzIGN1ZmZ0IGN1cmFuZCBjdXNwYXJzZSBucHBjIG52anBlZykKKyAgICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoJHtjdWRhX2xpYn0pCisgICAgX0NVREFUb29sa2l0X2ZpbmRfYW5kX2FkZF9pbXBvcnRfbGliKCR7Y3VkYV9saWJ9X3N0YXRpYyBERVBTIGN1bGlib3MpCisgIGVuZGZvcmVhY2goKQorCisgICMgY3VGRlRXIGRlcGVuZHMgb24gY3VGRlQKKyAgX0NVREFUb29sa2l0X2ZpbmRfYW5kX2FkZF9pbXBvcnRfbGliKGN1ZmZ0dyBERVBTIGN1ZmZ0KQorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3VmZnR3IERFUFMgY3VmZnRfc3RhdGljKQorCisgICMgY3VTT0xWRVIgZGVwZW5kcyBvbiBjdUJMQVMsIGFuZCBjdVNQQVJTRQorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoY3Vzb2x2ZXIgREVQUyBjdWJsYXMgY3VzcGFyc2UpCisgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYihjdXNvbHZlcl9zdGF0aWMgREVQUyBjdWJsYXNfc3RhdGljIGN1c3BhcnNlX3N0YXRpYyBjdWxpYm9zKQorCisgICMgbnZHUkFQSCBkZXBlbmRzIG9uIGN1UkFORCwgYW5kIGN1U09MVkVSLgorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIobnZncmFwaCBERVBTIGN1cmFuZCBjdXNvbHZlcikKKyAgX0NVREFUb29sa2l0X2ZpbmRfYW5kX2FkZF9pbXBvcnRfbGliKG52Z3JhcGhfc3RhdGljIERFUFMgY3VyYW5kX3N0YXRpYyBjdXNvbHZlcl9zdGF0aWMpCisKKyAgIyBQcm9jZXNzIHRoZSBtYWpvcml0eSBvZiB0aGUgTlBQIGxpYnJhcmllcy4KKyAgZm9yZWFjaCAoY3VkYV9saWIgbnBwaWFsIG5wcGljYyBucHBpZGVpIG5wcGlmIG5wcGlnIG5wcGltIG5wcGlzdCBucHBpdGMgbnBwcyBucHBpY29tIG5wcGlzdSkKKyAgICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIoJHtjdWRhX2xpYn0gREVQUyBucHBjKQorICAgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYigke2N1ZGFfbGlifV9zdGF0aWMgREVQUyBucHBjX3N0YXRpYykKKyAgZW5kZm9yZWFjaCgpCisKKyAgX0NVREFUb29sa2l0X2ZpbmRfYW5kX2FkZF9pbXBvcnRfbGliKGN1cHRpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQV9QQVRIX1NVRkZJWEVTIC4uL2V4dHJhcy9DVVBUSS9saWI2NC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4vZXh0cmFzL0NVUFRJL2xpYi8pCisgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYihjdXB0aV9zdGF0aWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBX1BBVEhfU1VGRklYRVMgLi4vZXh0cmFzL0NVUFRJL2xpYjY0LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi9leHRyYXMvQ1VQVEkvbGliLykKKworICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIobnZydGMgREVQUyBjdWRhX2RyaXZlcikKKworICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIobnZtbCBBTFQgbnZpZGlhLW1sIG52bWwpCisKKyAgaWYoV0lOMzIpCisgICAgIyBudnRvb2xzIGNhbiBiZSBpbnN0YWxsZWQgb3V0c2lkZSB0aGUgQ1VEQSB0b29sa2l0IGRpcmVjdG9yeQorICAgICMgc28gcHJlZmVyIHRoZSBOVlRPT0xTRVhUX1BBVEggd2luZG93cyBvbmx5IGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgIyBJbiBhZGRpdGlvbiBvbiB3aW5kb3dzIHRoZSBtb3N0IGNvbW1vbiBuYW1lIGlzIG52VG9vbHNFeHQ2NF8xCisgICAgZmluZF9saWJyYXJ5KENVREFfbnZUb29sc0V4dF9MSUJSQVJZCisgICAgICBOQU1FUyBudlRvb2xzRXh0NjRfMSBudlRvb2xzRXh0NjQgbnZUb29sc0V4dAorICAgICAgUEFUSFMgRU5WIE5WVE9PTFNFWFRfUEFUSAorICAgICAgICAgICAgRU5WIENVREFfUEFUSAorICAgICAgUEFUSF9TVUZGSVhFUyBsaWIveDY0IGxpYgorICAgICkKKyAgZW5kaWYoKQorICBfQ1VEQVRvb2xraXRfZmluZF9hbmRfYWRkX2ltcG9ydF9saWIobnZUb29sc0V4dCBBTFQgbnZUb29sc0V4dDY0KQorCisgIF9DVURBVG9vbGtpdF9maW5kX2FuZF9hZGRfaW1wb3J0X2xpYihPcGVuQ0wpCitlbmRpZigpCisKK2lmKF9DVURBVG9vbGtpdF9Qb3BfUk9PVF9QQVRIKQorICBsaXN0KFJFTU9WRV9BVCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAwKQorICB1bnNldChfQ1VEQVRvb2xraXRfUG9wX1JPT1RfUEFUSCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZENVUkwuY21ha2UgYi9Nb2R1bGVzL0ZpbmRDVVJMLmNtYWtlCmluZGV4IGFlZWJjODQuLjc0YjM2YzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZENVUkwuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQ1VSTC5jbWFrZQpAQCAtMzcsOCArMzcsMzUgQEAKIAogYGBDVVJMX1ZFUlNJT05fU1RSSU5HYGAKICAgVGhlIHZlcnNpb24gb2YgYGBjdXJsYGAgZm91bmQuCisKK0NVUkwgQ01ha2UKK15eXl5eXl5eXl4KKworSWYgQ1VSTCB3YXMgYnVpbHQgdXNpbmcgdGhlIENNYWtlIGJ1aWxkc3lzdGVtIHRoZW4gaXQgcHJvdmlkZXMgaXRzIG93bgorYGBDVVJMQ29uZmlnLmNtYWtlYGAgZmlsZSBmb3IgdXNlIHdpdGggdGhlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQncworY29uZmlnIG1vZGUuIFRoaXMgbW9kdWxlIGxvb2tzIGZvciB0aGlzIGZpbGUgYW5kLCBpZiBmb3VuZCwKK3JldHVybnMgaXRzIHJlc3VsdHMgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbi4KKworU2V0IGBgQ1VSTF9OT19DVVJMX0NNQUtFYGAgdG8gYGBPTmBgIHRvIGRpc2FibGUgdGhpcyBzZWFyY2guCisKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKKworaWYoTk9UIENVUkxfTk9fQ1VSTF9DTUFLRSkKKyAgIyBkbyBhIGZpbmQgcGFja2FnZSBjYWxsIHRvIHNwZWNpZmljYWxseSBsb29rIGZvciB0aGUgQ01ha2UgdmVyc2lvbgorICAjIG9mIGN1cmwKKyAgZmluZF9wYWNrYWdlKENVUkwgUVVJRVQgTk9fTU9EVUxFKQorICBtYXJrX2FzX2FkdmFuY2VkKENVUkxfRElSKQorCisgICMgaWYgd2UgZm91bmQgdGhlIENVUkwgY21ha2UgcGFja2FnZSB0aGVuIHdlIGFyZSBkb25lLCBhbmQKKyAgIyBjYW4gcHJpbnQgd2hhdCB3ZSBmb3VuZCBhbmQgcmV0dXJuLgorICBpZihDVVJMX0ZPVU5EKQorICAgIGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhDVVJMIEhBTkRMRV9DT01QT05FTlRTIENPTkZJR19NT0RFKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZGlmKCkKKwogZmluZF9wYWNrYWdlKFBrZ0NvbmZpZyBRVUlFVCkKIGlmKFBLR19DT05GSUdfRk9VTkQpCiAgIHBrZ19jaGVja19tb2R1bGVzKFBDX0NVUkwgUVVJRVQgbGliY3VybCkKQEAgLTY1LDYgKzkyLDcgQEAKICAgICAgIGN1cmxsaWJfc3RhdGljCiAgICAgIyBXaW5kb3dzIG9sZGVyICJXaW4zMiAtIE1TVkMiIHByZWJ1aWx0cyAobGliY3VybC5saWIsIGUuZy4gbGliY3VybC03LjE1LjUtd2luMzItbXN2Yy56aXApOgogICAgICAgbGliY3VybAorICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgSElOVFMgJHtQQ19DVVJMX0xJQlJBUllfRElSU30KICAgKQogICBtYXJrX2FzX2FkdmFuY2VkKENVUkxfTElCUkFSWV9SRUxFQVNFKQpAQCAtNzMsNiArMTAxLDcgQEAKICAgICAjIFdpbmRvd3MgTVNWQyBDTWFrZSBidWlsZHMgaW4gZGVidWcgY29uZmlndXJhdGlvbiBvbiB2Y3BrZzoKICAgICAgIGxpYmN1cmwtZF9pbXAKICAgICAgIGxpYmN1cmwtZAorICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgSElOVFMgJHtQQ19DVVJMX0xJQlJBUllfRElSU30KICAgKQogICBtYXJrX2FzX2FkdmFuY2VkKENVUkxfTElCUkFSWV9ERUJVRykKQEAgLTEyMSwxNiArMTUwLDE2IEBACiAgIGVuZGlmKCkKICAgZm9yZWFjaChjb21wb25lbnQgSU4gTElTVFMgQ1VSTF9GSU5EX0NPTVBPTkVOVFMpCiAgICAgbGlzdChGSU5EIENVUkxfS05PV05fUFJPVE9DT0xTICR7Y29tcG9uZW50fSBfZm91bmQpCi0gICAgaWYoX2ZvdW5kKQorICAgIGlmKE5PVCBfZm91bmQgRVFVQUwgLTEpCiAgICAgICBsaXN0KEZJTkQgQ1VSTF9TVVBQT1JURURfUFJPVE9DT0xTICR7Y29tcG9uZW50fSBfZm91bmQpCi0gICAgICBpZihfZm91bmQpCisgICAgICBpZihOT1QgX2ZvdW5kIEVRVUFMIC0xKQogICAgICAgICBzZXQoQ1VSTF8ke2NvbXBvbmVudH1fRk9VTkQgVFJVRSkKICAgICAgIGVsc2VpZihDVVJMX0ZJTkRfUkVRVUlSRUQpCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNVUkw6IFJlcXVpcmVkIHByb3RvY29sICR7Y29tcG9uZW50fSBpcyBub3QgZm91bmQiKQogICAgICAgZW5kaWYoKQogICAgIGVsc2UoKQogICAgICAgbGlzdChGSU5EIENVUkxfU1VQUE9SVEVEX0ZFQVRVUkVTICR7Y29tcG9uZW50fSBfZm91bmQpCi0gICAgICBpZihfZm91bmQpCisgICAgICBpZihOT1QgX2ZvdW5kIEVRVUFMIC0xKQogICAgICAgICBzZXQoQ1VSTF8ke2NvbXBvbmVudH1fRk9VTkQgVFJVRSkKICAgICAgIGVsc2VpZihDVVJMX0ZJTkRfUkVRVUlSRUQpCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNVUkw6IFJlcXVpcmVkIGZlYXR1cmUgJHtjb21wb25lbnR9IGlzIG5vdCBmb3VuZCIpCkBAIC0xMzksNyArMTY4LDYgQEAKICAgZW5kZm9yZWFjaCgpCiBlbmRpZigpCiAKLWluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKIGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhDVVJMCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRURfVkFSUyBDVVJMX0xJQlJBUlkgQ1VSTF9JTkNMVURFX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fVkFSIENVUkxfVkVSU0lPTl9TVFJJTkcKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEN1cnNlcy5jbWFrZSBiL01vZHVsZXMvRmluZEN1cnNlcy5jbWFrZQppbmRleCBlM2U3MjczLi5jZGUzYTRkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRDdXJzZXMuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kQ3Vyc2VzLmNtYWtlCkBAIC0xNTYsOSArMTU2LDE1IEBACiAKICAgQ0hFQ0tfTElCUkFSWV9FWElTVFMoIiR7Q1VSU0VTX05DVVJTRVNfTElCUkFSWX0iCiAgICAgY2JyZWFrICIiIENVUlNFU19OQ1VSU0VTX0hBU19DQlJFQUspCi0gIGlmKE5PVCBDVVJTRVNfTkNVUlNFU19IQVNfQ0JSRUFLKQorICBDSEVDS19MSUJSQVJZX0VYSVNUUygiJHtDVVJTRVNfTkNVUlNFU19MSUJSQVJZfSIKKyAgICBub2RlbGF5ICIiIENVUlNFU19OQ1VSU0VTX0hBU19OT0RFTEFZKQorICBpZihOT1QgQ1VSU0VTX05DVVJTRVNfSEFTX0NCUkVBSyBPUiBOT1QgQ1VSU0VTX05DVVJTRVNfSEFTX05PREVMQVkpCiAgICAgZmluZF9saWJyYXJ5KENVUlNFU19FWFRSQV9MSUJSQVJZICIke0NVUlNFU19USU5GT19MSUJSQVJZX05BTUV9IiBISU5UUyAiJHtfY3Vyc2VzTGliRGlyfSIpCiAgICAgZmluZF9saWJyYXJ5KENVUlNFU19FWFRSQV9MSUJSQVJZICIke0NVUlNFU19USU5GT19MSUJSQVJZX05BTUV9IiApCisKKyAgICBtYXJrX2FzX2FkdmFuY2VkKAorICAgICAgQ1VSU0VTX0VYVFJBX0xJQlJBUlkKKyAgICAgICkKICAgZW5kaWYoKQogZWxzZSgpCiAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2N1cnNlc0xpYkRpciAiJHtDVVJTRVNfQ1VSU0VTX0xJQlJBUll9IiBQQVRIKQpAQCAtMjYyLDYgKzI2OCw1IEBACiAgIENVUlNFU19JTkNMVURFX1BBVEgKICAgQ1VSU0VTX0NVUlNFU19MSUJSQVJZCiAgIENVUlNFU19OQ1VSU0VTX0xJQlJBUlkKLSAgQ1VSU0VTX0VYVFJBX0xJQlJBUlkKICAgQ1VSU0VTX0ZPUk1fTElCUkFSWQogICApCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmREQ01USy5jbWFrZSBiL01vZHVsZXMvRmluZERDTVRLLmNtYWtlCmluZGV4IGQ0OGRlMDguLmIyZTAwZGYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZERDTVRLLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZERDTVRLLmNtYWtlCkBAIC0xMDIsNyArMTAyLDcgQEAKICMgU3RlcDE6IEF0dGVtcHQgdG8gZmluZCBhIHZlcnNpb24gb2YgRENNVEsgcHJvdmlkaW5nIGEgRENNVEtDb25maWcuY21ha2UgZmlsZS4KICMKIGlmKE5PVCBEQ01US19GSU5EX1FVSUVUTFkpCi0gIG1lc3NhZ2UoU1RBVFVTICJUcnlpbmcgdG8gZmluZCBEQ01USyBleHBlY3RpbmcgRENNVEtDb25maWcuY21ha2UiKQorICBtZXNzYWdlKENIRUNLX1NUQVJUICJUcnlpbmcgdG8gZmluZCBEQ01USyBleHBlY3RpbmcgRENNVEtDb25maWcuY21ha2UiKQogZW5kaWYoKQogZmluZF9wYWNrYWdlKERDTVRLIFFVSUVUIE5PX01PRFVMRSkKIGlmKERDTVRLX0ZPVU5ECkBAIC0xMTAsMTIgKzExMCwxMiBAQAogICAgIEFORCBOT1QgIngiIFNUUkVRVUFMICJ4JHtEQ01US19JTkNMVURFX0RJUlN9IikKIAogICBpZihOT1QgRENNVEtfRklORF9RVUlFVExZKQotICAgIG1lc3NhZ2UoU1RBVFVTICJUcnlpbmcgdG8gZmluZCBEQ01USyBleHBlY3RpbmcgRENNVEtDb25maWcuY21ha2UgLSBvayIpCisgICAgbWVzc2FnZShDSEVDS19QQVNTICJvayIpCiAgIGVuZGlmKCkKICAgcmV0dXJuKCkKIGVsc2UoKQogICBpZihOT1QgRENNVEtfRklORF9RVUlFVExZKQotICAgIG1lc3NhZ2UoU1RBVFVTICJUcnlpbmcgdG8gZmluZCBEQ01USyBleHBlY3RpbmcgRENNVEtDb25maWcuY21ha2UgLSBmYWlsZWQiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAiZmFpbGVkIikKICAgZW5kaWYoKQogZW5kaWYoKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmREb3h5Z2VuLmNtYWtlIGIvTW9kdWxlcy9GaW5kRG94eWdlbi5jbWFrZQppbmRleCBmYWEwM2Y5Li4xODRhOWEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmREb3h5Z2VuLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZERveHlnZW4uY21ha2UKQEAgLTk5OSw5ICs5OTksMTEgQEAKICAgICBmb3JlYWNoKF9pdGVtIElOIExJU1RTIERPWFlHRU5fSU5QVVQpCiAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2Fic19pdGVtICIke19pdGVtfSIgQUJTT0xVVEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQVNFX0RJUiAiJHtfYXJnc19XT1JLSU5HX0RJUkVDVE9SWX0iKQotICAgICAgICBpZihFWElTVFMgIiR7X2Fic19pdGVtfSIgQU5ECi0gICAgICAgICAgIE5PVCBJU19ESVJFQ1RPUlkgIiR7X2Fic19pdGVtfSIgQU5ECi0gICAgICAgICAgIE5PVCBJU19TWU1MSU5LICIke19hYnNfaXRlbX0iKQorICAgICAgICBnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkoX2lzR2VuZXJhdGVkICIke19hYnNfaXRlbX0iIEdFTkVSQVRFRCkKKyAgICAgICAgaWYoX2lzR2VuZXJhdGVkIE9SCisgICAgICAgICAgIChFWElTVFMgIiR7X2Fic19pdGVtfSIgQU5ECisgICAgICAgICAgICBOT1QgSVNfRElSRUNUT1JZICIke19hYnNfaXRlbX0iIEFORAorICAgICAgICAgICAgTk9UIElTX1NZTUxJTksgIiR7X2Fic19pdGVtfSIpKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgX3NvdXJjZXMgIiR7X2Fic19pdGVtfSIpCiAgICAgICAgIGVsc2VpZihfYXJnc19VU0VfU1RBTVBfRklMRSkKICAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlNvdXJjZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBmaWxlOlxuIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kRVhQQVQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRFWFBBVC5jbWFrZQppbmRleCAxNWI0MTlhLi5iMGJiMDJhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRFWFBBVC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRFWFBBVC5jbWFrZQpAQCAtMzgsNyArMzgsNyBAQAogZmluZF9wYXRoKEVYUEFUX0lOQ0xVREVfRElSIE5BTUVTIGV4cGF0LmggSElOVFMgJHtQQ19FWFBBVF9JTkNMVURFX0RJUlN9KQogCiAjIExvb2sgZm9yIHRoZSBsaWJyYXJ5LgotZmluZF9saWJyYXJ5KEVYUEFUX0xJQlJBUlkgTkFNRVMgZXhwYXQgbGliZXhwYXQgSElOVFMgJHtQQ19FWFBBVF9MSUJSQVJZX0RJUlN9KQorZmluZF9saWJyYXJ5KEVYUEFUX0xJQlJBUlkgTkFNRVMgZXhwYXQgbGliZXhwYXQgTkFNRVNfUEVSX0RJUiBISU5UUyAke1BDX0VYUEFUX0xJQlJBUllfRElSU30pCiAKIGlmIChFWFBBVF9JTkNMVURFX0RJUiBBTkQgRVhJU1RTICIke0VYUEFUX0lOQ0xVREVfRElSfS9leHBhdC5oIikKICAgICBmaWxlKFNUUklOR1MgIiR7RVhQQVRfSU5DTFVERV9ESVJ9L2V4cGF0LmgiIGV4cGF0X3ZlcnNpb25fc3RyCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRFbnZNb2R1bGVzLmNtYWtlIGIvTW9kdWxlcy9GaW5kRW52TW9kdWxlcy5jbWFrZQppbmRleCA0ZGQ1MTE2Li5hNGFjMGI0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRFbnZNb2R1bGVzLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEVudk1vZHVsZXMuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kRW52TW9kdWxlcwogLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNQorCiBMb2NhdGUgYW4gZW52aXJvbm1lbnQgbW9kdWxlIGltcGxlbWVudGF0aW9uIGFuZCBtYWtlIGNvbW1hbmRzIGF2YWlsYWJsZSB0bwogQ01ha2Ugc2NyaXB0cyB0byB1c2UgdGhlbS4gIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIGJvdGggTHVhLWJhc2VkIExtb2QKIGFuZCBUQ0wtYmFzZWQgRW52aXJvbm1lbnRNb2R1bGVzLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kRkxFWC5jbWFrZSBiL01vZHVsZXMvRmluZEZMRVguY21ha2UKaW5kZXggZDIyYjdlYy4uMTM4NDczNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kRkxFWC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRGTEVYLmNtYWtlCkBAIC05OSw3ICs5OSw3IEBACiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi1maW5kX3Byb2dyYW0oRkxFWF9FWEVDVVRBQkxFIE5BTUVTIGZsZXggd2luX2ZsZXggRE9DICJwYXRoIHRvIHRoZSBmbGV4IGV4ZWN1dGFibGUiKQorZmluZF9wcm9ncmFtKEZMRVhfRVhFQ1VUQUJMRSBOQU1FUyBmbGV4IHdpbi1mbGV4IHdpbl9mbGV4IERPQyAicGF0aCB0byB0aGUgZmxleCBleGVjdXRhYmxlIikKIG1hcmtfYXNfYWR2YW5jZWQoRkxFWF9FWEVDVVRBQkxFKQogCiBmaW5kX2xpYnJhcnkoRkxfTElCUkFSWSBOQU1FUyBmbApAQCAtMTQyLDggKzE0Miw2IEBACiAgICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIwogICBtYWNybyhGTEVYX1RBUkdFVCBOYW1lIElucHV0IE91dHB1dCkKLSAgICBzZXQoRkxFWF9UQVJHRVRfb3V0cHV0cyAiJHtPdXRwdXR9IikKLSAgICBzZXQoRkxFWF9FWEVDVVRBQkxFX29wdHMgIiIpCiAKICAgICBzZXQoRkxFWF9UQVJHRVRfUEFSQU1fT1BUSU9OUykKICAgICBzZXQoRkxFWF9UQVJHRVRfUEFSQU1fT05FX1ZBTFVFX0tFWVdPUkRTCkBAIC0xNjUsMzEgKzE2Myw2OCBAQAogICAgIGlmKE5PVCAiJHtGTEVYX1RBUkdFVF9BUkdfVU5QQVJTRURfQVJHVU1FTlRTfSIgU1RSRVFVQUwgIiIpCiAgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgJHtGTEVYX1RBUkdFVF91c2FnZX0pCiAgICAgZWxzZSgpCi0gICAgICBpZihOT1QgIiR7RkxFWF9UQVJHRVRfQVJHX0NPTVBJTEVfRkxBR1N9IiBTVFJFUVVBTCAiIikKLSAgICAgICAgc2V0KEZMRVhfRVhFQ1VUQUJMRV9vcHRzICIke0ZMRVhfVEFSR0VUX0FSR19DT01QSUxFX0ZMQUdTfSIpCi0gICAgICAgIHNlcGFyYXRlX2FyZ3VtZW50cyhGTEVYX0VYRUNVVEFCTEVfb3B0cykKKworICAgICAgY21ha2VfcG9saWN5KEdFVCBDTVAwMDk4IF9mbGV4X0NNUDAwOTgKKyAgICAgICAgICBQQVJFTlRfU0NPUEUgIyB1bmRvY3VtZW50ZWQsIGRvIG5vdCB1c2Ugb3V0c2lkZSBvZiBDTWFrZQorICAgICAgICApCisgICAgICBzZXQoX2ZsZXhfSU5QVVQgIiR7SW5wdXR9IikKKyAgICAgIGlmKCJ4JHtfZmxleF9DTVAwMDk4fXgiIFNUUkVRVUFMICJ4TkVXeCIpCisgICAgICAgIHNldChfZmxleF9XT1JLSU5HX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IikKKyAgICAgICAgaWYoTk9UIElTX0FCU09MVVRFICIke19mbGV4X0lOUFVUfSIpCisgICAgICAgICAgc2V0KF9mbGV4X0lOUFVUICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtfZmxleF9JTlBVVH0iKQorICAgICAgICBlbmRpZigpCisgICAgICBlbHNlKCkKKyAgICAgICAgc2V0KF9mbGV4X1dPUktJTkdfRElSICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0iKQogICAgICAgZW5kaWYoKQotICAgICAgaWYoTk9UICIke0ZMRVhfVEFSR0VUX0FSR19ERUZJTkVTX0ZJTEV9IiBTVFJFUVVBTCAiIikKLSAgICAgICAgbGlzdChBUFBFTkQgRkxFWF9UQVJHRVRfb3V0cHV0cyAiJHtGTEVYX1RBUkdFVF9BUkdfREVGSU5FU19GSUxFfSIpCi0gICAgICAgIGxpc3QoQVBQRU5EIEZMRVhfRVhFQ1VUQUJMRV9vcHRzIC0taGVhZGVyLWZpbGU9JHtGTEVYX1RBUkdFVF9BUkdfREVGSU5FU19GSUxFfSkKKyAgICAgIHVuc2V0KF9mbGV4X0NNUDAwOTgpCisKKyAgICAgIHNldChfZmxleF9PVVRQVVQgIiR7T3V0cHV0fSIpCisgICAgICBpZihOT1QgSVNfQUJTT0xVVEUgJHtfZmxleF9PVVRQVVR9KQorICAgICAgICBzZXQoX2ZsZXhfT1VUUFVUICIke19mbGV4X1dPUktJTkdfRElSfS8ke19mbGV4X09VVFBVVH0iKQorICAgICAgZW5kaWYoKQorICAgICAgc2V0KF9mbGV4X1RBUkdFVF9PVVRQVVRTICIke19mbGV4X09VVFBVVH0iKQorCisgICAgICBzZXQoX2ZsZXhfRVhFX09QVFMgIiIpCisgICAgICBpZihOT1QgIiR7RkxFWF9UQVJHRVRfQVJHX0NPTVBJTEVfRkxBR1N9IiBTVFJFUVVBTCAiIikKKyAgICAgICAgc2V0KF9mbGV4X0VYRV9PUFRTICIke0ZMRVhfVEFSR0VUX0FSR19DT01QSUxFX0ZMQUdTfSIpCisgICAgICAgIHNlcGFyYXRlX2FyZ3VtZW50cyhfZmxleF9FWEVfT1BUUykKICAgICAgIGVuZGlmKCkKIAotICAgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0ZMRVhfVEFSR0VUX291dHB1dHN9Ci0gICAgICAgIENPTU1BTkQgJHtGTEVYX0VYRUNVVEFCTEV9ICR7RkxFWF9FWEVDVVRBQkxFX29wdHN9IC1vJHtPdXRwdXR9ICR7SW5wdXR9CisgICAgICBzZXQoX2ZsZXhfT1VUUFVUX0hFQURFUiAiIikKKyAgICAgIGlmKE5PVCAiJHtGTEVYX1RBUkdFVF9BUkdfREVGSU5FU19GSUxFfSIgU1RSRVFVQUwgIiIpCisgICAgICAgIHNldChfZmxleF9PVVRQVVRfSEVBREVSICIke0ZMRVhfVEFSR0VUX0FSR19ERUZJTkVTX0ZJTEV9IikKKyAgICAgICAgaWYoSVNfQUJTT0xVVEUgIiR7X2ZsZXhfT1VUUFVUX0hFQURFUn0iKQorICAgICAgICAgIHNldChfZmxleF9PVVRQVVRfSEVBREVSX0FCUyAiJHtfZmxleF9PVVRQVVRfSEVBREVSfSIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHNldChfZmxleF9PVVRQVVRfSEVBREVSX0FCUyAiJHtfZmxleF9XT1JLSU5HX0RJUn0vJHtfZmxleF9PVVRQVVRfSEVBREVSfSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgbGlzdChBUFBFTkQgX2ZsZXhfVEFSR0VUX09VVFBVVFMgIiR7X2ZsZXhfT1VUUFVUX0hFQURFUl9BQlN9IikKKyAgICAgICAgbGlzdChBUFBFTkQgX2ZsZXhfRVhFX09QVFMgLS1oZWFkZXItZmlsZT0ke19mbGV4X09VVFBVVF9IRUFERVJfQUJTfSkKKyAgICAgIGVuZGlmKCkKKworICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfZmxleF9FWEVfTkFNRV9XRSAiJHtGTEVYX0VYRUNVVEFCTEV9IiBOQU1FX1dFKQorICAgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke19mbGV4X1RBUkdFVF9PVVRQVVRTfQorICAgICAgICBDT01NQU5EICR7RkxFWF9FWEVDVVRBQkxFfSAke19mbGV4X0VYRV9PUFRTfSAtbyR7X2ZsZXhfT1VUUFVUfSAke19mbGV4X0lOUFVUfQogICAgICAgICBWRVJCQVRJTQotICAgICAgICBERVBFTkRTICR7SW5wdXR9Ci0gICAgICAgIENPTU1FTlQgIltGTEVYXVske05hbWV9XSBCdWlsZGluZyBzY2FubmVyIHdpdGggZmxleCAke0ZMRVhfVkVSU0lPTn0iCi0gICAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKKyAgICAgICAgREVQRU5EUyAke19mbGV4X0lOUFVUfQorICAgICAgICBDT01NRU5UICJbRkxFWF1bJHtOYW1lfV0gQnVpbGRpbmcgc2Nhbm5lciB3aXRoICR7X2ZsZXhfRVhFX05BTUVfV0V9ICR7RkxFWF9WRVJTSU9OfSIKKyAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtfZmxleF9XT1JLSU5HX0RJUn0pCiAKICAgICAgIHNldChGTEVYXyR7TmFtZX1fREVGSU5FRCBUUlVFKQotICAgICAgc2V0KEZMRVhfJHtOYW1lfV9PVVRQVVRTICR7T3V0cHV0fSkKLSAgICAgIHNldChGTEVYXyR7TmFtZX1fSU5QVVQgJHtJbnB1dH0pCi0gICAgICBzZXQoRkxFWF8ke05hbWV9X0NPTVBJTEVfRkxBR1MgJHtGTEVYX0VYRUNVVEFCTEVfb3B0c30pCi0gICAgICBpZigiJHtGTEVYX1RBUkdFVF9BUkdfREVGSU5FU19GSUxFfSIgU1RSRVFVQUwgIiIpCi0gICAgICAgIHNldChGTEVYXyR7TmFtZX1fT1VUUFVUX0hFQURFUiAiIikKLSAgICAgIGVsc2UoKQotICAgICAgICBzZXQoRkxFWF8ke05hbWV9X09VVFBVVF9IRUFERVIgJHtGTEVYX1RBUkdFVF9BUkdfREVGSU5FU19GSUxFfSkKLSAgICAgIGVuZGlmKCkKKyAgICAgIHNldChGTEVYXyR7TmFtZX1fT1VUUFVUUyAke19mbGV4X1RBUkdFVF9PVVRQVVRTfSkKKyAgICAgIHNldChGTEVYXyR7TmFtZX1fSU5QVVQgJHtfZmxleF9JTlBVVH0pCisgICAgICBzZXQoRkxFWF8ke05hbWV9X0NPTVBJTEVfRkxBR1MgJHtfZmxleF9FWEVfT1BUU30pCisgICAgICBzZXQoRkxFWF8ke05hbWV9X09VVFBVVF9IRUFERVIgJHtfZmxleF9PVVRQVVRfSEVBREVSfSkKKworICAgICAgdW5zZXQoX2ZsZXhfRVhFX05BTUVfV0UpCisgICAgICB1bnNldChfZmxleF9FWEVfT1BUUykKKyAgICAgIHVuc2V0KF9mbGV4X0lOUFVUKQorICAgICAgdW5zZXQoX2ZsZXhfT1VUUFVUKQorICAgICAgdW5zZXQoX2ZsZXhfT1VUUFVUX0hFQURFUikKKyAgICAgIHVuc2V0KF9mbGV4X09VVFBVVF9IRUFERVJfQUJTKQorICAgICAgdW5zZXQoX2ZsZXhfVEFSR0VUX09VVFBVVFMpCisgICAgICB1bnNldChfZmxleF9XT1JLSU5HX0RJUikKKwogICAgIGVuZGlmKCkKICAgZW5kbWFjcm8oKQogICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRGb250Y29uZmlnLmNtYWtlIGIvTW9kdWxlcy9GaW5kRm9udGNvbmZpZy5jbWFrZQppbmRleCBhNmYwMTgwLi41MjI4ODMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRGb250Y29uZmlnLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEZvbnRjb25maWcuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kRm9udGNvbmZpZwogLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xNAorCiBGaW5kIEZvbnRjb25maWcgaGVhZGVycyBhbmQgbGlicmFyeS4KIAogSW1wb3J0ZWQgVGFyZ2V0cwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kR0lGLmNtYWtlIGIvTW9kdWxlcy9GaW5kR0lGLmNtYWtlCmluZGV4IGQ1YTE0M2UuLmNlYTljZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEdJRi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRHSUYuY21ha2UKQEAgLTYwLDYgKzYwLDcgQEAKIAogZmluZF9saWJyYXJ5KEdJRl9MSUJSQVJZCiAgIE5BTUVTICR7UE9URU5USUFMX0dJRl9MSUJTfQorICBOQU1FU19QRVJfRElSCiAgIEhJTlRTCiAgICAgRU5WIEdJRl9ESVIKICAgUEFUSF9TVUZGSVhFUyBsaWIKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEdMRVcuY21ha2UgYi9Nb2R1bGVzL0ZpbmRHTEVXLmNtYWtlCmluZGV4IGJkNjk4MTkuLjA4MDM3MWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEdMRVcuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kR0xFVy5jbWFrZQpAQCAtMTAsNyArMTAsNyBAQAogSW5wdXQgVmFyaWFibGVzCiBeXl5eXl5eXl5eXl5eXl4KIAotVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgbWF5IGJlIHNldCB0byBpbmZsdWVuY2UgdGhpcyBtb2R1bGXigJlzIGJlaGF2aW9yOgorVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgbWF5IGJlIHNldCB0byBpbmZsdWVuY2UgdGhpcyBtb2R1bGUncyBiZWhhdmlvcjoKIAogYGBHTEVXX1VTRV9TVEFUSUNfTElCU2BgCiAgIHRvIGZpbmQgYW5kIGNyZWF0ZSA6cHJvcF90Z3Q6YElNUE9SVEVEYCB0YXJnZXQgZm9yIHN0YXRpYyBsaW5rYWdlLgpAQCAtMTM5LDExICsxMzksMTMgQEAKIAogZmluZF9saWJyYXJ5KEdMRVdfU0hBUkVEX0xJQlJBUllfUkVMRUFTRQogICAgICAgICAgICAgIE5BTUVTIEdMRVcgZ2xldyBnbGV3MzIKKyAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBsaWIgbGliNjQgbGlieDMyIGxpYi9SZWxlYXNlLyR7X2FyY2h9CiAgICAgICAgICAgICAgUEFUSFMgRU5WIEdMRVdfUk9PVCkKIAogZmluZF9saWJyYXJ5KEdMRVdfU0hBUkVEX0xJQlJBUllfREVCVUcKICAgICAgICAgICAgICBOQU1FUyBHTEVXZCBnbGV3ZCBnbGV3MzJkCisgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgbGliIGxpYjY0CiAgICAgICAgICAgICAgUEFUSFMgRU5WIEdMRVdfUk9PVCkKIApAQCAtMTUyLDExICsxNTQsMTMgQEAKIAogZmluZF9saWJyYXJ5KEdMRVdfU1RBVElDX0xJQlJBUllfUkVMRUFTRQogICAgICAgICAgICAgIE5BTUVTIEdMRVcgZ2xldyBnbGV3MzJzCisgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgbGliIGxpYjY0IGxpYngzMiBsaWIvUmVsZWFzZS8ke19hcmNofQogICAgICAgICAgICAgIFBBVEhTIEVOViBHTEVXX1JPT1QpCiAKIGZpbmRfbGlicmFyeShHTEVXX1NUQVRJQ19MSUJSQVJZX0RFQlVHCiAgICAgICAgICAgICAgTkFNRVMgR0xFV2RzIGdsZXdkcyBnbGV3MzJkcworICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGxpYiBsaWI2NAogICAgICAgICAgICAgIFBBVEhTIEVOViBHTEVXX1JPT1QpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEdTTC5jbWFrZSBiL01vZHVsZXMvRmluZEdTTC5jbWFrZQppbmRleCBkYTFiM2M0Li4zZDRlN2Y5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRHU0wuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kR1NMLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZEdTTAogLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIEZpbmQgdGhlIG5hdGl2ZSBHTlUgU2NpZW50aWZpYyBMaWJyYXJ5IChHU0wpIGluY2x1ZGVzIGFuZCBsaWJyYXJpZXMuCiAKIFRoZSBHTlUgU2NpZW50aWZpYyBMaWJyYXJ5IChHU0wpIGlzIGEgbnVtZXJpY2FsIGxpYnJhcnkgZm9yIEMgYW5kIEMrKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kR1RLMi5jbWFrZSBiL01vZHVsZXMvRmluZEdUSzIuY21ha2UKaW5kZXggNjAwZTRhYS4uNjJmMTYxNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kR1RLMi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRHVEsyLmNtYWtlCkBAIC01LDk2ICs1LDgzIEBACiBGaW5kR1RLMgogLS0tLS0tLS0KIAotRmluZCB0aGUgR1RLMiB3aWRnZXQgbGlicmFyaWVzIGFuZCBzZXZlcmFsIG9mIGl0cwotb3RoZXIgb3B0aW9uYWwgY29tcG9uZW50cyBsaWtlIGBgZ3RrbW1gYCwgYGBnbGFkZWBgLCBhbmQgYGBnbGFkZW1tYGAuCi0KLU5PVEU6IElmIHlvdSBpbnRlbmQgdG8gdXNlIHZlcnNpb24gY2hlY2tpbmcsIENNYWtlIDIuNi4yIG9yIGxhdGVyIGlzCi0KLTo6Ci0KLSAgICAgICByZXF1aXJlZC4KLQotCitGaW5kIHRoZSBHVEsyIHdpZGdldCBsaWJyYXJpZXMgYW5kIHNldmVyYWwgb2YgaXRzIG90aGVyIG9wdGlvbmFsIGNvbXBvbmVudHMKK2xpa2UgYGBndGttbWBgLCBgYGdsYWRlYGAsIGFuZCBgYGdsYWRlbW1gYC4KIAogU3BlY2lmeSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgYXMgeW91IGNhbGwgdGhpcyBmaW5kCiBtb2R1bGUuICBTZWUgZXhhbXBsZSBiZWxvdy4KIAotOjoKKyogYGBndGtgYAorKiBgYGd0a21tYGAKKyogYGBnbGFkZWBgCisqIGBgZ2xhZGVtbWBgCiAKLSAgIGd0awotICAgZ3RrbW0KLSAgIGdsYWRlCi0gICBnbGFkZW1tCi0KLQorUmVzdWx0IFZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXgogCiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyB3aWxsIGJlIGRlZmluZWQgZm9yIHlvdXIgdXNlCiAKLTo6CitgYEdUSzJfRk9VTkRgYAorICBXZXJlIGFsbCBvZiB5b3VyIHNwZWNpZmllZCBjb21wb25lbnRzIGZvdW5kPworYGBHVEsyX0lOQ0xVREVfRElSU2BgCisgIEFsbCBpbmNsdWRlIGRpcmVjdG9yaWVzCitgYEdUSzJfTElCUkFSSUVTYGAKKyAgQWxsIGxpYnJhcmllcworYGBHVEsyX1RBUkdFVFNgYAorICBBbGwgaW1wb3J0ZWQgdGFyZ2V0cworYGBHVEsyX0RFRklOSVRJT05TYGAKKyAgQWRkaXRpb25hbCBjb21waWxlciBmbGFncworYGBHVEsyX1ZFUlNJT05gYAorICBUaGUgdmVyc2lvbiBvZiBHVEsyIGZvdW5kICh4LnkueikKK2BgR1RLMl9NQUpPUl9WRVJTSU9OYGAKKyAgVGhlIG1ham9yIHZlcnNpb24gb2YgR1RLMgorYGBHVEsyX01JTk9SX1ZFUlNJT05gYAorICBUaGUgbWlub3IgdmVyc2lvbiBvZiBHVEsyCitgYEdUSzJfUEFUQ0hfVkVSU0lPTmBgCisgIFRoZSBwYXRjaCB2ZXJzaW9uIG9mIEdUSzIKIAotICAgR1RLMl9GT1VORCAtIFdlcmUgYWxsIG9mIHlvdXIgc3BlY2lmaWVkIGNvbXBvbmVudHMgZm91bmQ/Ci0gICBHVEsyX0lOQ0xVREVfRElSUyAtIEFsbCBpbmNsdWRlIGRpcmVjdG9yaWVzCi0gICBHVEsyX0xJQlJBUklFUyAtIEFsbCBsaWJyYXJpZXMKLSAgIEdUSzJfVEFSR0VUUyAtIEFsbCBpbXBvcnRlZCB0YXJnZXRzCi0gICBHVEsyX0RFRklOSVRJT05TIC0gQWRkaXRpb25hbCBjb21waWxlciBmbGFncwotCi0KLQotOjoKLQotICAgR1RLMl9WRVJTSU9OIC0gVGhlIHZlcnNpb24gb2YgR1RLMiBmb3VuZCAoeC55LnopCi0gICBHVEsyX01BSk9SX1ZFUlNJT04gLSBUaGUgbWFqb3IgdmVyc2lvbiBvZiBHVEsyCi0gICBHVEsyX01JTk9SX1ZFUlNJT04gLSBUaGUgbWlub3IgdmVyc2lvbiBvZiBHVEsyCi0gICBHVEsyX1BBVENIX1ZFUlNJT04gLSBUaGUgcGF0Y2ggdmVyc2lvbiBvZiBHVEsyCi0KLQorSW5wdXQgVmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl4KIAogT3B0aW9uYWwgdmFyaWFibGVzIHlvdSBjYW4gZGVmaW5lIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBtb2R1bGU6CiAKLTo6CitgYEdUSzJfREVCVUdgYAorICBFbmFibGVzIHZlcmJvc2UgZGVidWdnaW5nIG9mIHRoZSBtb2R1bGUKK2BgR1RLMl9BRERJVElPTkFMX1NVRkZJWEVTYGAKKyAgQWxsb3dzIGRlZmluaW5nIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBpbmNsdWRlIGZpbGVzCiAKLSAgIEdUSzJfREVCVUcgLSBFbmFibGVzIHZlcmJvc2UgZGVidWdnaW5nIG9mIHRoZSBtb2R1bGUKLSAgIEdUSzJfQURESVRJT05BTF9TVUZGSVhFUyAtIEFsbG93cyBkZWZpbmluZyBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2ggZm9yIGluY2x1ZGUgZmlsZXMKK0V4YW1wbGUgVXNhZ2UKK15eXl5eXl5eXl5eXl4KIAorQ2FsbCA6Y29tbWFuZDpgZmluZF9wYWNrYWdlYCBvbmNlLiAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyB0byBwaWNrIGZyb206CiAKK1JlcXVpcmUgR1RLIDIuNiBvciBsYXRlcjoKIAotPT09PT09PT09PT09PT09PT0gRXhhbXBsZSBVc2FnZToKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCi06OgorICBmaW5kX3BhY2thZ2UoR1RLMiAyLjYgUkVRVUlSRUQgZ3RrKQogCi0gICBDYWxsIGZpbmRfcGFja2FnZSgpIG9uY2UsIGhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgdG8gcGljayBmcm9tOgorUmVxdWlyZSBHVEsgMi4xMCBvciBsYXRlciBhbmQgR2xhZGU6CiAKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCisgIGZpbmRfcGFja2FnZShHVEsyIDIuMTAgUkVRVUlSRUQgZ3RrIGdsYWRlKQogCi06OgorU2VhcmNoIGZvciBHVEsvR1RLTU0gMi44IG9yIGxhdGVyOgogCi0gICBSZXF1aXJlIEdUSyAyLjYgb3IgbGF0ZXIKLSAgICAgICBmaW5kX3BhY2thZ2UoR1RLMiAyLjYgUkVRVUlSRUQgZ3RrKQorLi4gY29kZS1ibG9jazo6IGNtYWtlCiAKKyAgZmluZF9wYWNrYWdlKEdUSzIgMi44IENPTVBPTkVOVFMgZ3RrIGd0a21tKQogCitVc2UgdGhlIHJlc3VsdHM6CiAKLTo6CisuLiBjb2RlLWJsb2NrOjogY21ha2UKIAotICAgUmVxdWlyZSBHVEsgMi4xMCBvciBsYXRlciBhbmQgR2xhZGUKLSAgICAgICBmaW5kX3BhY2thZ2UoR1RLMiAyLjEwIFJFUVVJUkVEIGd0ayBnbGFkZSkKLQotCi0KLTo6Ci0KLSAgIFNlYXJjaCBmb3IgR1RLL0dUS01NIDIuOCBvciBsYXRlcgotICAgICAgIGZpbmRfcGFja2FnZShHVEsyIDIuOCBDT01QT05FTlRTIGd0ayBndGttbSkKLQotCi0KLTo6Ci0KLSAgIGlmKEdUSzJfRk9VTkQpCi0gICAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7R1RLMl9JTkNMVURFX0RJUlN9KQotICAgICAgYWRkX2V4ZWN1dGFibGUobXlndWkgbXlndWkuY2MpCi0gICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobXlndWkgJHtHVEsyX0xJQlJBUklFU30pCi0gICBlbmRpZigpCisgIGlmKEdUSzJfRk9VTkQpCisgICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke0dUSzJfSU5DTFVERV9ESVJTfSkKKyAgICBhZGRfZXhlY3V0YWJsZShteWd1aSBteWd1aS5jYykKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobXlndWkgJHtHVEsyX0xJQlJBUklFU30pCisgIGVuZGlmKCkKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKICMgVmVyc2lvbiAxLjYgKENNYWtlIDMuMCkKQEAgLTg4NCw2ICs4NzEsNyBAQAogCiAgICAgc2V0KEdUSzJfJHtfQ09NUE9ORU5UX1VQUEVSfV9GSU5EX1FVSUVUTFkgJHtHVEsyX0ZJTkRfUVVJRVRMWX0pCiAKKyAgICBzZXQoRlBIU0FfTkFNRV9NSVNNQVRDSEVEIDEpCiAgICAgaWYoX0dUSzJfY29tcG9uZW50IFNUUkVRVUFMICJndGsiKQogICAgICAgICBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoR1RLMl8ke19DT01QT05FTlRfVVBQRVJ9ICJTb21lIG9yIGFsbCBvZiB0aGUgZ3RrIGxpYnJhcmllcyB3ZXJlIG5vdCBmb3VuZC4iCiAgICAgICAgICAgICBHVEsyX0dUS19MSUJSQVJZCkBAIC05MjYsNiArOTE0LDcgQEAKICAgICAgICAgICAgIEdUSzJfR0xBREVNTUNPTkZJR19JTkNMVURFX0RJUgogICAgICAgICApCiAgICAgZW5kaWYoKQorICAgIHVuc2V0KEZQSFNBX05BTUVfTUlTTUFUQ0hFRCkKIAogICAgIGlmKE5PVCBHVEsyXyR7X0NPTVBPTkVOVF9VUFBFUn1fRk9VTkQpCiAgICAgICAgIHNldChfR1RLMl9kaWRfd2VfZmluZF9ldmVyeXRoaW5nIGZhbHNlKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kR1Rlc3QuY21ha2UgYi9Nb2R1bGVzL0ZpbmRHVGVzdC5jbWFrZQppbmRleCBlMDE1YTk4Li4xMGUzMWIyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRHVGVzdC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRHVGVzdC5jbWFrZQpAQCAtOTYsNiArOTYsMjcgQEAKICAgICBtYXJrX2FzX2FkdmFuY2VkKCR7X25hbWV9KQogZW5kZnVuY3Rpb24oKQogCitmdW5jdGlvbihfX2d0ZXN0X2ZpbmRfbGlicmFyeV9jb25maWd1cmF0aW9uIF9uYW1lIF9saWIgX2NmZ19zdWZmaXgpCisgICAgc2V0KF9saWJzICR7X2xpYn0pCisgICAgaWYoTVNWQyBBTkQgR1RFU1RfTVNWQ19TRUFSQ0ggU1RSRVFVQUwgIk1EIikKKyAgICAgICAgIyBUaGUgcHJvdmlkZWQgL01EIHByb2plY3QgZmlsZXMgZm9yIEdvb2dsZSBUZXN0IGFkZCAtbWQgc3VmZml4ZXMgdG8gdGhlCisgICAgICAgICMgbGlicmFyeSBuYW1lcy4KKyAgICAgICAgbGlzdChJTlNFUlQgX2xpYnMgMCAke19saWJ9LW1kKQorICAgIGVuZGlmKCkKKyAgICBsaXN0KFRSQU5TRk9STSBfbGlicyBBUFBFTkQgIiR7X2NmZ19zdWZmaXh9IikKKworICAgIF9fZ3Rlc3RfZmluZF9saWJyYXJ5KCR7X25hbWV9ICR7X2xpYnN9KQorZW5kZnVuY3Rpb24oKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vU2VsZWN0TGlicmFyeUNvbmZpZ3VyYXRpb25zLmNtYWtlKQorZnVuY3Rpb24oX19ndGVzdF9maW5kX2FuZF9zZWxlY3RfbGlicmFyeV9jb25maWd1cmF0aW9ucyBfYmFzZW5hbWUgX2xpYikKKyAgICBfX2d0ZXN0X2ZpbmRfbGlicmFyeV9jb25maWd1cmF0aW9uKCR7X2Jhc2VuYW1lfV9MSUJSQVJZX1JFTEVBU0UgJHtfbGlifSAiIikKKyAgICBfX2d0ZXN0X2ZpbmRfbGlicmFyeV9jb25maWd1cmF0aW9uKCR7X2Jhc2VuYW1lfV9MSUJSQVJZX0RFQlVHICAgJHtfbGlifSAiZCIpCisKKyAgICBzZWxlY3RfbGlicmFyeV9jb25maWd1cmF0aW9ucygke19iYXNlbmFtZX0pCisgICAgc2V0KCR7X2Jhc2VuYW1lfV9MSUJSQVJZICR7JHtfYmFzZW5hbWV9X0xJQlJBUll9IFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKwogbWFjcm8oX19ndGVzdF9kZXRlcm1pbmVfd2luZG93c19saWJyYXJ5X3R5cGUgX3ZhcikKICAgICBpZihFWElTVFMgIiR7JHtfdmFyfX0iKQogICAgICAgICBmaWxlKFRPX05BVElWRV9QQVRIICIkeyR7X3Zhcn19IiBfbGliX3BhdGgpCkBAIC0xODcsMTggKzIwOCwxMyBAQAogKQogbWFya19hc19hZHZhbmNlZChHVEVTVF9JTkNMVURFX0RJUikKIAotaWYoTVNWQyBBTkQgR1RFU1RfTVNWQ19TRUFSQ0ggU1RSRVFVQUwgIk1EIikKLSAgICAjIFRoZSBwcm92aWRlZCAvTUQgcHJvamVjdCBmaWxlcyBmb3IgR29vZ2xlIFRlc3QgYWRkIC1tZCBzdWZmaXhlcyB0byB0aGUKLSAgICAjIGxpYnJhcnkgbmFtZXMuCi0gICAgX19ndGVzdF9maW5kX2xpYnJhcnkoR1RFU1RfTElCUkFSWSAgICAgICAgICAgIGd0ZXN0LW1kICBndGVzdCkKLSAgICBfX2d0ZXN0X2ZpbmRfbGlicmFyeShHVEVTVF9MSUJSQVJZX0RFQlVHICAgICAgZ3Rlc3QtbWRkIGd0ZXN0ZCkKLSAgICBfX2d0ZXN0X2ZpbmRfbGlicmFyeShHVEVTVF9NQUlOX0xJQlJBUlkgICAgICAgZ3Rlc3RfbWFpbi1tZCAgZ3Rlc3RfbWFpbikKLSAgICBfX2d0ZXN0X2ZpbmRfbGlicmFyeShHVEVTVF9NQUlOX0xJQlJBUllfREVCVUcgZ3Rlc3RfbWFpbi1tZGQgZ3Rlc3RfbWFpbmQpCi1lbHNlKCkKLSAgICBfX2d0ZXN0X2ZpbmRfbGlicmFyeShHVEVTVF9MSUJSQVJZICAgICAgICAgICAgZ3Rlc3QpCi0gICAgX19ndGVzdF9maW5kX2xpYnJhcnkoR1RFU1RfTElCUkFSWV9ERUJVRyAgICAgIGd0ZXN0ZCkKLSAgICBfX2d0ZXN0X2ZpbmRfbGlicmFyeShHVEVTVF9NQUlOX0xJQlJBUlkgICAgICAgZ3Rlc3RfbWFpbikKLSAgICBfX2d0ZXN0X2ZpbmRfbGlicmFyeShHVEVTVF9NQUlOX0xJQlJBUllfREVCVUcgZ3Rlc3RfbWFpbmQpCisjIEFsbG93IEdURVNUX0xJQlJBUlkgYW5kIEdURVNUX01BSU5fTElCUkFSWSB0byBiZSBzZXQgbWFudWFsbHksIGFzIHRoZQorIyBsb2NhdGlvbnMgb2YgdGhlIGd0ZXN0IGFuZCBndGVzdF9tYWluIGxpYnJhcmllcywgcmVzcGVjdGl2ZWx5LgoraWYoTk9UIEdURVNUX0xJQlJBUlkpCisgICAgX19ndGVzdF9maW5kX2FuZF9zZWxlY3RfbGlicmFyeV9jb25maWd1cmF0aW9ucyhHVEVTVCBndGVzdCkKK2VuZGlmKCkKK2lmKE5PVCBHVEVTVF9NQUlOX0xJQlJBUlkpCisgICAgX19ndGVzdF9maW5kX2FuZF9zZWxlY3RfbGlicmFyeV9jb25maWd1cmF0aW9ucyhHVEVTVF9NQUlOIGd0ZXN0X21haW4pCiBlbmRpZigpCiAKIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKQEAgLTI0MCw0ICsyNTYsMTUgQEAKICAgICAgICAgX19ndGVzdF9pbXBvcnRfbGlicmFyeShHVGVzdDo6TWFpbiBHVEVTVF9NQUlOX0xJQlJBUlkgIlJFTEVBU0UiKQogICAgICAgICBfX2d0ZXN0X2ltcG9ydF9saWJyYXJ5KEdUZXN0OjpNYWluIEdURVNUX01BSU5fTElCUkFSWSAiREVCVUciKQogICAgIGVuZGlmKCkKKworICAgICMgQWRkIHRhcmdldHMgbWFwcGluZyB0aGUgc2FtZSBsaWJyYXJ5IG5hbWVzIGFzIGRlZmluZWQgaW4KKyAgICAjIEdUZXN0J3MgQ01ha2UgcGFja2FnZSBjb25maWcuCisgICAgaWYoTk9UIFRBUkdFVCBHVGVzdDo6Z3Rlc3QpCisgICAgICAgIGFkZF9saWJyYXJ5KEdUZXN0OjpndGVzdCBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhHVGVzdDo6Z3Rlc3QgSU5URVJGQUNFIEdUZXN0OjpHVGVzdCkKKyAgICBlbmRpZigpCisgICAgaWYoTk9UIFRBUkdFVCBHVGVzdDo6Z3Rlc3RfbWFpbikKKyAgICAgICAgYWRkX2xpYnJhcnkoR1Rlc3Q6Omd0ZXN0X21haW4gSU5URVJGQUNFIElNUE9SVEVEKQorICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoR1Rlc3Q6Omd0ZXN0X21haW4gSU5URVJGQUNFIEdUZXN0OjpNYWluKQorICAgIGVuZGlmKCkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEhERjUuY21ha2UgYi9Nb2R1bGVzL0ZpbmRIREY1LmNtYWtlCmluZGV4IGI0ODg0MTguLjdhMWMyNTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEhERjUuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kSERGNS5jbWFrZQpAQCAtMTksOSArMTksMTIgQEAKIGBgQ09NUE9ORU5UU2BgIGFyZSBzcGVjaWZpZWQsIHRoZW4gdGhlIGZpbmQgbW9kdWxlIHdpbGwgZGVmYXVsdCB0byBmaW5kaW5nCiBvbmx5IHRoZSBgYEhERjVgYCBDIGxpYnJhcnkuICBJZiBvbmUgb3IgbW9yZSBgYENPTVBPTkVOVFNgYCBhcmUgc3BlY2lmaWVkLCB0aGUKIG1vZHVsZSB3aWxsIGF0dGVtcHQgdG8gZmluZCB0aGUgbGFuZ3VhZ2UgYmluZGluZ3MgZm9yIHRoZSBzcGVjaWZpZWQKLWNvbXBvbmVudHMuICBUaGUgb25seSB2YWxpZCBjb21wb25lbnRzIGFyZSBgYENgYCwgYGBDWFhgYCwgYGBGb3J0cmFuYGAsIGBgSExgYCwKLWFuZCBgYEZvcnRyYW5fSExgYC4gIElmIHRoZSBgYENPTVBPTkVOVFNgYCBhcmd1bWVudCBpcyBub3QgZ2l2ZW4sIHRoZSBtb2R1bGUgd2lsbAorY29tcG9uZW50cy4gIFRoZSB2YWxpZCBjb21wb25lbnRzIGFyZSBgYENgYCwgYGBDWFhgYCwgYGBGb3J0cmFuYGAsIGBgSExgYC4KK2BgSExgYCByZWZlcnMgdG8gdGhlICJoaWdoLWxldmVsIiBIREY1IGZ1bmN0aW9ucyBmb3IgQyBhbmQgRm9ydHJhbi4KK0lmIHRoZSBgYENPTVBPTkVOVFNgYCBhcmd1bWVudCBpcyBub3QgZ2l2ZW4sIHRoZSBtb2R1bGUgd2lsbAogYXR0ZW1wdCB0byBmaW5kIG9ubHkgdGhlIEMgYmluZGluZ3MuCitGb3IgZXhhbXBsZSwgdG8gdXNlIEZvcnRyYW4gSERGNSBhbmQgSERGNS1ITCBmdW5jdGlvbnMsIGRvOgorYGBmaW5kX3BhY2thZ2UoSERGNSBDT01QT05FTlRTIEZvcnRyYW4gSEwpYGAuCiAKIFRoaXMgbW9kdWxlIHdpbGwgcmVhZCB0aGUgdmFyaWFibGUKIGBgSERGNV9VU0VfU1RBVElDX0xJQlJBUklFU2BgIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBwcmVmZXIgYQpAQCAtMjksMTYgKzMyLDExIEBACiBUbyB1c2UgdGhpcyBmZWF0dXJlLCBtYWtlIHN1cmUgdGhhdCB0aGUgYGBIREY1X1VTRV9TVEFUSUNfTElCUkFSSUVTYGAKIHZhcmlhYmxlIGlzIHNldCBiZWZvcmUgdGhlIGNhbGwgdG8gZmluZF9wYWNrYWdlLgogCi1UbyBwcm92aWRlIHRoZSBtb2R1bGUgd2l0aCBhIGhpbnQgYWJvdXQgd2hlcmUgdG8gZmluZCB5b3VyIGBgSERGNWBgCi1pbnN0YWxsYXRpb24sIHlvdSBjYW4gc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYEhERjVfUk9PVGBgLiAgVGhlCi1GaW5kIG1vZHVsZSB3aWxsIHRoZW4gbG9vayBpbiB0aGlzIHBhdGggd2hlbiBzZWFyY2hpbmcgZm9yIGBgSERGNWBgCi1leGVjdXRhYmxlcywgcGF0aHMsIGFuZCBsaWJyYXJpZXMuCi0KIEJvdGggdGhlIHNlcmlhbCBhbmQgcGFyYWxsZWwgYGBIREY1YGAgd3JhcHBlcnMgYXJlIGNvbnNpZGVyZWQgYW5kIHRoZSBmaXJzdAogZGlyZWN0b3J5IHRvIGNvbnRhaW4gZWl0aGVyIG9uZSB3aWxsIGJlIHVzZWQuICBJbiB0aGUgZXZlbnQgdGhhdCBib3RoIGFwcGVhcgogaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRoZSBzZXJpYWwgdmVyc2lvbiBpcyBwcmVmZXJlbnRpYWxseSBzZWxlY3RlZC4gVGhpcwogYmVoYXZpb3IgY2FuIGJlIHJldmVyc2VkIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlIGBgSERGNV9QUkVGRVJfUEFSQUxMRUxgYCB0bwotYGBUcnVlYGAuCitgYFRSVUVgYC4KIAogSW4gYWRkaXRpb24gdG8gZmluZGluZyB0aGUgaW5jbHVkZXMgYW5kIGxpYnJhcmllcyByZXF1aXJlZCB0byBjb21waWxlCiBhbiBgYEhERjVgYCBjbGllbnQgYXBwbGljYXRpb24sIHRoaXMgbW9kdWxlIGFsc28gbWFrZXMgYW4gZWZmb3J0IHRvIGZpbmQKQEAgLTExNSwxMCArMTEzLDEwIEBACiBIaW50cwogXl5eXl4KIAotVGhlIGZvbGxvd2luZyB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIGd1aWRlIHRoZSBzZWFyY2ggZm9yIEhERjUgbGlicmFyaWVzIGFuZCBpbmNsdWRlczoKK1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGNhbiBiZSBzZXQgdG8gZ3VpZGUgdGhlIHNlYXJjaCBmb3IgSERGNSBsaWJyYXJpZXMgYW5kIGluY2x1ZGVzOgogCi1gYEhERjVfUk9PVGBgCi0gIFNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIEhERjUgaW5zdGFsbGF0aW9uIHRvIHVzZS4KK2BgSERGNV9QUkVGRVJfUEFSQUxMRUxgYAorICBzZXQgYGB0cnVlYGAgdG8gcHJlZmVyIHBhcmFsbGVsIEhERjUgKGJ5IGRlZmF1bHQsIHNlcmlhbCBpcyBwcmVmZXJyZWQpCiAKIGBgSERGNV9GSU5EX0RFQlVHYGAKICAgU2V0IGBgdHJ1ZWBgIHRvIGdldCBleHRyYSBkZWJ1Z2dpbmcgb3V0cHV0LgpAQCAtMTI3LDggKzEyNSw2IEBACiAgIFNldCBgYHRydWVgYCB0byBza2lwIHRyeWluZyB0byBmaW5kIGBgaGRmNS1jb25maWcuY21ha2VgYC4KICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKLSMgVGhpcyBtb2R1bGUgaXMgbWFpbnRhaW5lZCBieSBXaWxsIERpY2hhcnJ5IDx3ZGljaGFycnlAc3RlbGxhcnNjaWVuY2UuY29tPi4KLQogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1NlbGVjdExpYnJhcnlDb25maWd1cmF0aW9ucy5jbWFrZSkKIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKIApAQCAtMTQxLDI4ICsxMzcsMzAgQEAKIGVsc2UoKQogICBzZXQoSERGNV9MQU5HVUFHRV9CSU5ESU5HUykKICAgIyBhZGQgdGhlIGV4dHJhIHNwZWNpZmllZCBjb21wb25lbnRzLCBlbnN1cmluZyB0aGF0IHRoZXkgYXJlIHZhbGlkLgotICBzZXQoRklORF9ITCBPRkYpCi0gIGZvcmVhY2goY29tcG9uZW50IElOIExJU1RTIEhERjVfRklORF9DT01QT05FTlRTKQotICAgIGxpc3QoRklORCBIREY1X1ZBTElEX0xBTkdVQUdFX0JJTkRJTkdTICR7Y29tcG9uZW50fSBjb21wb25lbnRfbG9jYXRpb24pCi0gICAgaWYoTk9UIGNvbXBvbmVudF9sb2NhdGlvbiBFUVVBTCAtMSkKLSAgICAgIGxpc3QoQVBQRU5EIEhERjVfTEFOR1VBR0VfQklORElOR1MgJHtjb21wb25lbnR9KQotICAgIGVsc2VpZihjb21wb25lbnQgU1RSRVFVQUwgIkhMIikKLSAgICAgIHNldChGSU5EX0hMIE9OKQotICAgIGVsc2VpZihjb21wb25lbnQgU1RSRVFVQUwgIkZvcnRyYW5fSEwiKSAjIG9ubHkgZm9yIGNvbXBhdGliaWxpdHkKKyAgc2V0KEhERjVfRklORF9ITCBPRkYpCisgIGZvcmVhY2goX2NvbXBvbmVudCBJTiBMSVNUUyBIREY1X0ZJTkRfQ09NUE9ORU5UUykKKyAgICBsaXN0KEZJTkQgSERGNV9WQUxJRF9MQU5HVUFHRV9CSU5ESU5HUyAke19jb21wb25lbnR9IF9jb21wb25lbnRfbG9jYXRpb24pCisgICAgaWYoTk9UIF9jb21wb25lbnRfbG9jYXRpb24gRVFVQUwgLTEpCisgICAgICBsaXN0KEFQUEVORCBIREY1X0xBTkdVQUdFX0JJTkRJTkdTICR7X2NvbXBvbmVudH0pCisgICAgZWxzZWlmKF9jb21wb25lbnQgU1RSRVFVQUwgIkhMIikKKyAgICAgIHNldChIREY1X0ZJTkRfSEwgT04pCisgICAgZWxzZWlmKF9jb21wb25lbnQgU1RSRVFVQUwgIkZvcnRyYW5fSEwiKSAjIG9ubHkgZm9yIGNvbXBhdGliaWxpdHkKICAgICAgIGxpc3QoQVBQRU5EIEhERjVfTEFOR1VBR0VfQklORElOR1MgRm9ydHJhbikKLSAgICAgIHNldChGSU5EX0hMIE9OKQotICAgICAgc2V0KEhERjVfRklORF9SRVFVSVJFRF9Gb3J0cmFuX0hMIEZhbHNlKQotICAgICAgc2V0KEhERjVfRklORF9SRVFVSVJFRF9Gb3J0cmFuIFRydWUpCi0gICAgICBzZXQoSERGNV9GSU5EX1JFUVVJUkVEX0hMIFRydWUpCisgICAgICBzZXQoSERGNV9GSU5EX0hMIE9OKQorICAgICAgc2V0KEhERjVfRklORF9SRVFVSVJFRF9Gb3J0cmFuX0hMIEZBTFNFKQorICAgICAgc2V0KEhERjVfRklORF9SRVFVSVJFRF9Gb3J0cmFuIFRSVUUpCisgICAgICBzZXQoSERGNV9GSU5EX1JFUVVJUkVEX0hMIFRSVUUpCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICIke2NvbXBvbmVudH0gaXMgbm90IGEgdmFsaWQgSERGNSBjb21wb25lbnQuIikKKyAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7X2NvbXBvbmVudH0gaXMgbm90IGEgdmFsaWQgSERGNSBjb21wb25lbnQuIikKICAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQorICB1bnNldChfY29tcG9uZW50KQorICB1bnNldChfY29tcG9uZW50X2xvY2F0aW9uKQogICBpZihOT1QgSERGNV9MQU5HVUFHRV9CSU5ESU5HUykKLSAgICBnZXRfcHJvcGVydHkoX19sYW5ncyBHTE9CQUwgUFJPUEVSVFkgRU5BQkxFRF9MQU5HVUFHRVMpCi0gICAgZm9yZWFjaChfX2xhbmcgSU4gTElTVFMgX19sYW5ncykKLSAgICAgIGlmKF9fbGFuZyBNQVRDSEVTICJeKEN8Q1hYfEZvcnRyYW4pJCIpCi0gICAgICAgIGxpc3QoQVBQRU5EIEhERjVfTEFOR1VBR0VfQklORElOR1MgJHtfX2xhbmd9KQorICAgIGdldF9wcm9wZXJ0eShfbGFuZ3MgR0xPQkFMIFBST1BFUlRZIEVOQUJMRURfTEFOR1VBR0VTKQorICAgIGZvcmVhY2goX2xhbmcgSU4gTElTVFMgX2xhbmdzKQorICAgICAgaWYoX2xhbmcgTUFUQ0hFUyAiXihDfENYWHxGb3J0cmFuKSQiKQorICAgICAgICBsaXN0KEFQUEVORCBIREY1X0xBTkdVQUdFX0JJTkRJTkdTICR7X2xhbmd9KQogICAgICAgZW5kaWYoKQogICAgIGVuZGZvcmVhY2goKQogICBlbmRpZigpCkBAIC0zMjgsOTcgKzMyNiwxMTEgQEAKIAogIyBJbnZva2UgdGhlIEhERjUgd3JhcHBlciBjb21waWxlci4gIFRoZSBjb21waWxlciByZXR1cm4gdmFsdWUgaXMgc3RvcmVkIHRvIHRoZQogIyByZXR1cm5fdmFsdWUgYXJndW1lbnQsIHRoZSB0ZXh0IG91dHB1dCBpcyBzdG9yZWQgdG8gdGhlIG91dHB1dCB2YXJpYWJsZS4KLW1hY3JvKCBfSERGNV9pbnZva2VfY29tcGlsZXIgbGFuZ3VhZ2Ugb3V0cHV0IHJldHVybl92YWx1ZSB2ZXJzaW9uIGlzX3BhcmFsbGVsKQotICAgIHNldCgke3ZlcnNpb259KQotICAgIGlmKEhERjVfVVNFX1NUQVRJQ19MSUJSQVJJRVMpCi0gICAgICAgIHNldChsaWJfdHlwZV9hcmdzIC1ub3NobGliKQotICAgIGVsc2UoKQotICAgICAgICBzZXQobGliX3R5cGVfYXJncyAtc2hsaWIpCi0gICAgZW5kaWYoKQotICAgIHNldChzY3JhdGNoX2RpciAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vaGRmNSkKLSAgICBpZigiJHtsYW5ndWFnZX0iIFNUUkVRVUFMICJDIikKLSAgICAgICAgc2V0KHRlc3RfZmlsZSAke3NjcmF0Y2hfZGlyfS9jbWFrZV9oZGY1X3Rlc3QuYykKLSAgICBlbHNlaWYoIiR7bGFuZ3VhZ2V9IiBTVFJFUVVBTCAiQ1hYIikKLSAgICAgICAgc2V0KHRlc3RfZmlsZSAke3NjcmF0Y2hfZGlyfS9jbWFrZV9oZGY1X3Rlc3QuY3h4KQotICAgIGVsc2VpZigiJHtsYW5ndWFnZX0iIFNUUkVRVUFMICJGb3J0cmFuIikKLSAgICAgICAgc2V0KHRlc3RfZmlsZSAke3NjcmF0Y2hfZGlyfS9jbWFrZV9oZGY1X3Rlc3QuZjkwKQotICAgIGVuZGlmKCkKK2Z1bmN0aW9uKCBfSERGNV9pbnZva2VfY29tcGlsZXIgbGFuZ3VhZ2Ugb3V0cHV0X3ZhciByZXR1cm5fdmFsdWVfdmFyIHZlcnNpb25fdmFyIGlzX3BhcmFsbGVsX3ZhcikKKyAgc2V0KGlzX3BhcmFsbGVsIEZBTFNFKQorICBpZihIREY1X1VTRV9TVEFUSUNfTElCUkFSSUVTKQorICAgIHNldChsaWJfdHlwZV9hcmdzIC1ub3NobGliKQorICBlbHNlKCkKKyAgICBzZXQobGliX3R5cGVfYXJncyAtc2hsaWIpCisgIGVuZGlmKCkKKyAgc2V0KHNjcmF0Y2hfZGlyICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9oZGY1KQorICBpZigiJHtsYW5ndWFnZX0iIFNUUkVRVUFMICJDIikKKyAgICBzZXQodGVzdF9maWxlICR7c2NyYXRjaF9kaXJ9L2NtYWtlX2hkZjVfdGVzdC5jKQorICBlbHNlaWYoIiR7bGFuZ3VhZ2V9IiBTVFJFUVVBTCAiQ1hYIikKKyAgICBzZXQodGVzdF9maWxlICR7c2NyYXRjaF9kaXJ9L2NtYWtlX2hkZjVfdGVzdC5jeHgpCisgIGVsc2VpZigiJHtsYW5ndWFnZX0iIFNUUkVRVUFMICJGb3J0cmFuIikKKyAgICBzZXQodGVzdF9maWxlICR7c2NyYXRjaF9kaXJ9L2NtYWtlX2hkZjVfdGVzdC5mOTApCisgIGVuZGlmKCkKKyAgIyBWZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgd3JhcHBlciBjYW4gYWN0dWFsbHkgY29tcGlsZTogc29tZXRpbWVzIHRoZSBjb21waWxlcgorICAjIHdyYXBwZXIgZXhpc3RzLCBidXQgbm90IHRoZSBjb21waWxlci4gIEUuZy4gTWluaWNvbmRhIC8gQW5hY29uZGEgUHl0aG9uCisgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICBDT01NQU5EICR7SERGNV8ke2xhbmd1YWdlfV9DT01QSUxFUl9FWEVDVVRBQkxFfSAke3Rlc3RfZmlsZX0KKyAgICBXT1JLSU5HX0RJUkVDVE9SWSAke3NjcmF0Y2hfZGlyfQorICAgIFJFU1VMVF9WQVJJQUJMRSByZXR1cm5fdmFsdWUKKyAgICApCisgIGlmKHJldHVybl92YWx1ZSkKKyAgICBtZXNzYWdlKFNUQVRVUworICAgICAgIkhERjUgJHtsYW5ndWFnZX0gY29tcGlsZXIgd3JhcHBlciBpcyB1bmFibGUgdG8gY29tcGlsZSBhIG1pbmltYWwgSERGNSBwcm9ncmFtLiIpCisgIGVsc2UoKQogICAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICAgIENPTU1BTkQgJHtIREY1XyR7bGFuZ3VhZ2V9X0NPTVBJTEVSX0VYRUNVVEFCTEV9IC1zaG93ICR7bGliX3R5cGVfYXJnc30gJHt0ZXN0X2ZpbGV9Ci0gICAgICBPVVRQVVRfVkFSSUFCTEUgJHtvdXRwdXR9Ci0gICAgICBFUlJPUl9WQVJJQUJMRSAke291dHB1dH0KLSAgICAgIFJFU1VMVF9WQVJJQUJMRSAke3JldHVybl92YWx1ZX0KKyAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7c2NyYXRjaF9kaXJ9CisgICAgICBPVVRQVVRfVkFSSUFCTEUgb3V0cHV0CisgICAgICBFUlJPUl9WQVJJQUJMRSBvdXRwdXQKKyAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXR1cm5fdmFsdWUKKyAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCiAgICAgICApCi0gICAgaWYoTk9UICR7JHtyZXR1cm5fdmFsdWV9fSBFUVVBTCAwKQotICAgICAgICBtZXNzYWdlKFNUQVRVUwotICAgICAgICAgICJVbmFibGUgdG8gZGV0ZXJtaW5lIEhERjUgJHtsYW5ndWFnZX0gZmxhZ3MgZnJvbSBIREY1IHdyYXBwZXIuIikKKyAgICBpZihyZXR1cm5fdmFsdWUpCisgICAgICBtZXNzYWdlKFNUQVRVUworICAgICAgICAiVW5hYmxlIHRvIGRldGVybWluZSBIREY1ICR7bGFuZ3VhZ2V9IGZsYWdzIGZyb20gSERGNSB3cmFwcGVyLiIpCiAgICAgZW5kaWYoKQogICAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICAgIENPTU1BTkQgJHtIREY1XyR7bGFuZ3VhZ2V9X0NPTVBJTEVSX0VYRUNVVEFCTEV9IC1zaG93Y29uZmlnCiAgICAgICBPVVRQVVRfVkFSSUFCTEUgY29uZmlnX291dHB1dAogICAgICAgRVJST1JfVkFSSUFCTEUgY29uZmlnX291dHB1dAotICAgICAgUkVTVUxUX1ZBUklBQkxFIGNvbmZpZ19yZXR1cm4KKyAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXR1cm5fdmFsdWUKKyAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCiAgICAgICApCi0gICAgaWYoTk9UICR7cmV0dXJuX3ZhbHVlfSBFUVVBTCAwKQotICAgICAgICBtZXNzYWdlKCBTVEFUVVMKLSAgICAgICAgICAiVW5hYmxlIHRvIGRldGVybWluZSBIREY1ICR7bGFuZ3VhZ2V9IHZlcnNpb24gZnJvbSBIREY1IHdyYXBwZXIuIikKKyAgICBpZihyZXR1cm5fdmFsdWUpCisgICAgICBtZXNzYWdlKFNUQVRVUworICAgICAgICAiVW5hYmxlIHRvIGRldGVybWluZSBIREY1ICR7bGFuZ3VhZ2V9IHZlcnNpb25fdmFyIGZyb20gSERGNSB3cmFwcGVyLiIpCiAgICAgZW5kaWYoKQotICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiSERGNSBWZXJzaW9uOiAoW2EtekEtWjAtOVxcLlxcLV0qKSIgdmVyc2lvbl9tYXRjaCAiJHtjb25maWdfb3V0cHV0fSIpCi0gICAgaWYodmVyc2lvbl9tYXRjaCkKLSAgICAgICAgc3RyaW5nKFJFUExBQ0UgIkhERjUgVmVyc2lvbjogIiAiIiAke3ZlcnNpb259ICIke3ZlcnNpb25fbWF0Y2h9IikKLSAgICAgICAgc3RyaW5nKFJFUExBQ0UgIi1wYXRjaCIgIi4iICR7dmVyc2lvbn0gIiR7JHt2ZXJzaW9ufX0iKQorICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiSERGNSBWZXJzaW9uOiAoW2EtekEtWjAtOVxcLlxcLV0qKSIgdmVyc2lvbiAiJHtjb25maWdfb3V0cHV0fSIpCisgICAgaWYodmVyc2lvbikKKyAgICAgIHN0cmluZyhSRVBMQUNFICJIREY1IFZlcnNpb246ICIgIiIgdmVyc2lvbiAiJHt2ZXJzaW9ufSIpCisgICAgICBzdHJpbmcoUkVQTEFDRSAiLXBhdGNoIiAiLiIgdmVyc2lvbiAiJHt2ZXJzaW9ufSIpCiAgICAgZW5kaWYoKQogICAgIGlmKGNvbmZpZ19vdXRwdXQgTUFUQ0hFUyAiUGFyYWxsZWwgSERGNTogeWVzIikKLSAgICAgIHNldCgke2lzX3BhcmFsbGVsfSBUUlVFKQotICAgIGVsc2UoKQotICAgICAgc2V0KCR7aXNfcGFyYWxsZWx9IEZBTFNFKQorICAgICAgc2V0KGlzX3BhcmFsbGVsIFRSVUUpCiAgICAgZW5kaWYoKQotZW5kbWFjcm8oKQorICBlbmRpZigpCisgIGZvcmVhY2godmFyIG91dHB1dCByZXR1cm5fdmFsdWUgdmVyc2lvbiBpc19wYXJhbGxlbCkKKyAgICBzZXQoJHske3Zhcn1fdmFyfSAkeyR7dmFyfX0gUEFSRU5UX1NDT1BFKQorICBlbmRmb3JlYWNoKCkKK2VuZGZ1bmN0aW9uKCkKIAogIyBQYXJzZSBhIGNvbXBpbGUgbGluZSBmb3IgZGVmaW5pdGlvbnMsIGluY2x1ZGVzLCBsaWJyYXJ5IHBhdGhzLCBhbmQgbGlicmFyaWVzLgotbWFjcm8oIF9IREY1X3BhcnNlX2NvbXBpbGVfbGluZQotICAgIGNvbXBpbGVfbGluZV92YXIKLSAgICBpbmNsdWRlX3BhdGhzCi0gICAgZGVmaW5pdGlvbnMKLSAgICBsaWJyYXJ5X3BhdGhzCi0gICAgbGlicmFyaWVzCi0gICAgbGlicmFyaWVzX2hsKQorZnVuY3Rpb24oX0hERjVfcGFyc2VfY29tcGlsZV9saW5lIGNvbXBpbGVfbGluZV92YXIgaW5jbHVkZV9wYXRocyBkZWZpbml0aW9ucworICAgIGxpYnJhcnlfcGF0aHMgbGlicmFyaWVzIGxpYnJhcmllc19obCkKIAotICBzZXBhcmF0ZV9hcmd1bWVudHMoX0hERjVfQ09NUElMRV9BUkdTIE5BVElWRV9DT01NQU5EICIkeyR7Y29tcGlsZV9saW5lX3Zhcn19IikKKyAgc2VwYXJhdGVfYXJndW1lbnRzKF9jb21waWxlX2FyZ3MgTkFUSVZFX0NPTU1BTkQgIiR7JHtjb21waWxlX2xpbmVfdmFyfX0iKQogCi0gIGZvcmVhY2goYXJnIElOIExJU1RTIF9IREY1X0NPTVBJTEVfQVJHUykKLSAgICBpZigiJHthcmd9IiBNQVRDSEVTICJeLUkoLiopJCIpCisgIGZvcmVhY2goX2FyZyBJTiBMSVNUUyBfY29tcGlsZV9hcmdzKQorICAgIGlmKCIke19hcmd9IiBNQVRDSEVTICJeLUkoLiopJCIpCiAgICAgICAjIGluY2x1ZGUgZGlyZWN0b3J5Ci0gICAgICBsaXN0KEFQUEVORCAke2luY2x1ZGVfcGF0aHN9ICIke0NNQUtFX01BVENIXzF9IikKLSAgICBlbHNlaWYoIiR7YXJnfSIgTUFUQ0hFUyAiXi1EKC4qKSQiKQorICAgICAgbGlzdChBUFBFTkQgaW5jbHVkZV9wYXRocyAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgZWxzZWlmKCIke19hcmd9IiBNQVRDSEVTICJeLUQoLiopJCIpCiAgICAgICAjIGNvbXBpbGUgZGVmaW5pdGlvbgotICAgICAgbGlzdChBUFBFTkQgJHtkZWZpbml0aW9uc30gIi1EJHtDTUFLRV9NQVRDSF8xfSIpCi0gICAgZWxzZWlmKCIke2FyZ30iIE1BVENIRVMgIl4tTCguKikkIikKKyAgICAgIGxpc3QoQVBQRU5EIGRlZmluaXRpb25zICItRCR7Q01BS0VfTUFUQ0hfMX0iKQorICAgIGVsc2VpZigiJHtfYXJnfSIgTUFUQ0hFUyAiXi1MKC4qKSQiKQogICAgICAgIyBsaWJyYXJ5IHNlYXJjaCBwYXRoCi0gICAgICBsaXN0KEFQUEVORCAke2xpYnJhcnlfcGF0aHN9ICIke0NNQUtFX01BVENIXzF9IikKLSAgICBlbHNlaWYoIiR7YXJnfSIgTUFUQ0hFUyAiXi1sKGhkZjUuKmhsLiopJCIpCisgICAgICBsaXN0KEFQUEVORCBsaWJyYXJ5X3BhdGhzICIke0NNQUtFX01BVENIXzF9IikKKyAgICBlbHNlaWYoIiR7X2FyZ30iIE1BVENIRVMgIl4tbChoZGY1LipobC4qKSQiKQogICAgICAgIyBsaWJyYXJ5IG5hbWUgKGhsKQotICAgICAgbGlzdChBUFBFTkQgJHtsaWJyYXJpZXNfaGx9ICIke0NNQUtFX01BVENIXzF9IikKLSAgICBlbHNlaWYoIiR7YXJnfSIgTUFUQ0hFUyAiXi1sKC4qKSQiKQorICAgICAgbGlzdChBUFBFTkQgbGlicmFyaWVzX2hsICIke0NNQUtFX01BVENIXzF9IikKKyAgICBlbHNlaWYoIiR7X2FyZ30iIE1BVENIRVMgIl4tbCguKikkIikKICAgICAgICMgbGlicmFyeSBuYW1lCi0gICAgICBsaXN0KEFQUEVORCAke2xpYnJhcmllc30gIiR7Q01BS0VfTUFUQ0hfMX0iKQotICAgIGVsc2VpZigiJHthcmd9IiBNQVRDSEVTICJeKC46KT9bL1xcXS4qXFwuKGF8c298ZHlsaWJ8c2x8bGliKSQiKQorICAgICAgbGlzdChBUFBFTkQgbGlicmFyaWVzICIke0NNQUtFX01BVENIXzF9IikKKyAgICBlbHNlaWYoIiR7X2FyZ30iIE1BVENIRVMgIl4oLjopP1svXFxdLipcXC4oYXxzb3xkeWxpYnxzbHxsaWIpJCIpCiAgICAgICAjIGxpYnJhcnkgZmlsZQotICAgICAgaWYoTk9UIEVYSVNUUyAiJHthcmd9IikKKyAgICAgIGlmKE5PVCBFWElTVFMgIiR7X2FyZ30iKQogICAgICAgICBjb250aW51ZSgpCiAgICAgICBlbmRpZigpCi0gICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9IREY1X0xQQVRIICIke2FyZ30iIERJUkVDVE9SWSkKLSAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX0hERjVfTE5BTUUgIiR7YXJnfSIgTkFNRV9XRSkKLSAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJebGliIiAiIiBfSERGNV9MTkFNRSAiJHtfSERGNV9MTkFNRX0iKQotICAgICAgbGlzdChBUFBFTkQgJHtsaWJyYXJ5X3BhdGhzfSAiJHtfSERGNV9MUEFUSH0iKQotICAgICAgaWYoX0hERjVfTE5BTUUgTUFUQ0hFUyAiaGRmNS4qaGwiKQotICAgICAgICBsaXN0KEFQUEVORCAke2xpYnJhcmllc19obH0gIiR7X0hERjVfTE5BTUV9IikKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX2xwYXRoICIke19hcmd9IiBESVJFQ1RPUlkpCisgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9sbmFtZSAiJHtfYXJnfSIgTkFNRV9XRSkKKyAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJebGliIiAiIiBfbG5hbWUgIiR7X2xuYW1lfSIpCisgICAgICBsaXN0KEFQUEVORCBsaWJyYXJ5X3BhdGhzICIke19scGF0aH0iKQorICAgICAgaWYoX2xuYW1lIE1BVENIRVMgImhkZjUuKmhsIikKKyAgICAgICAgbGlzdChBUFBFTkQgbGlicmFyaWVzX2hsICIke19sbmFtZX0iKQogICAgICAgZWxzZSgpCi0gICAgICAgIGxpc3QoQVBQRU5EICR7bGlicmFyaWVzfSAiJHtfSERGNV9MTkFNRX0iKQorICAgICAgICBsaXN0KEFQUEVORCBsaWJyYXJpZXMgIiR7X2xuYW1lfSIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKLWVuZG1hY3JvKCkKKyAgZm9yZWFjaCh2YXIgaW5jbHVkZV9wYXRocyBkZWZpbml0aW9ucyBsaWJyYXJ5X3BhdGhzIGxpYnJhcmllcyBsaWJyYXJpZXNfaGwpCisgICAgc2V0KCR7JHt2YXJ9X3Zhcn0gJHske3Zhcn19IFBBUkVOVF9TQ09QRSkKKyAgZW5kZm9yZWFjaCgpCitlbmRmdW5jdGlvbigpCiAKICMgU2VsZWN0IGEgcHJlZmVycmVkIGltcG9ydGVkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIHRhcmdldAogZnVuY3Rpb24oX0hERjVfc2VsZWN0X2ltcG9ydGVkX2NvbmZpZyB0YXJnZXQgaW1wb3J0ZWRfY29uZikKQEAgLTUyOCwxMCArNTQwLDEwIEBACiAgICAgICAgICAgICAgICAgc2V0KEhERjVfJHtfbGFuZ31fTElCUkFSWSAke19oZGY1X2xhbmdfbG9jYXRpb259KQogICAgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfTElCUkFSSUVTICR7SERGNV8ke19sYW5nfV9UQVJHRVR9JHtfc3VmZml4fSkKICAgICAgICAgICAgICAgICBzZXQoSERGNV8ke19sYW5nfV9MSUJSQVJJRVMgJHtIREY1XyR7X2xhbmd9X1RBUkdFVH0ke19zdWZmaXh9KQotICAgICAgICAgICAgICAgIHNldChIREY1XyR7X2xhbmd9X0ZPVU5EIFRydWUpCisgICAgICAgICAgICAgICAgc2V0KEhERjVfJHtfbGFuZ31fRk9VTkQgVFJVRSkKICAgICAgICAgICAgIGVuZGlmKCkKLSAgICAgICAgICAgIGlmKEZJTkRfSEwpCi0gICAgICAgICAgICAgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShfX2xhbmdfaGxfbG9jYXRpb24gJHtIREY1XyR7X2xhbmd9X0hMX1RBUkdFVH0ke19zdWZmaXh9IElNUE9SVEVEX0lNUExJQl8ke19oZGY1X2ltcG9ydGVkX2NvbmZ9ICkKKyAgICAgICAgICAgIGlmKEhERjVfRklORF9ITCkKKyAgICAgICAgICAgICAgICBnZXRfdGFyZ2V0X3Byb3BlcnR5KF9sYW5nX2hsX2xvY2F0aW9uICR7SERGNV8ke19sYW5nfV9ITF9UQVJHRVR9JHtfc3VmZml4fSBJTVBPUlRFRF9JTVBMSUJfJHtfaGRmNV9pbXBvcnRlZF9jb25mfSApCiAgICAgICAgICAgICAgICAgaWYgKE5PVCBfaGRmNV9sYW5nX2hsX2xvY2F0aW9uKQogICAgICAgICAgICAgICAgICAgICBnZXRfdGFyZ2V0X3Byb3BlcnR5KF9oZGY1X2xhbmdfaGxfbG9jYXRpb24gJHtIREY1XyR7X2xhbmd9X0hMX1RBUkdFVH0ke19zdWZmaXh9IExPQ0FUSU9OXyR7X2hkZjVfaW1wb3J0ZWRfY29uZn0pCiAgICAgICAgICAgICAgICAgICAgIGlmIChOT1QgX2hkZjVfaGxfbGFuZ19sb2NhdGlvbikKQEAgLTU0Miw3ICs1NTQsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZXQoSERGNV8ke19sYW5nfV9ITF9MSUJSQVJZICR7X2hkZjVfbGFuZ19obF9sb2NhdGlvbn0pCiAgICAgICAgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfSExfTElCUkFSSUVTICR7SERGNV8ke19sYW5nfV9ITF9UQVJHRVR9JHtfc3VmZml4fSkKICAgICAgICAgICAgICAgICAgICAgc2V0KEhERjVfJHtfbGFuZ31fSExfTElCUkFSSUVTICR7SERGNV8ke19sYW5nfV9ITF9UQVJHRVR9JHtfc3VmZml4fSkKLSAgICAgICAgICAgICAgICAgICAgc2V0KEhERjVfSExfRk9VTkQgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgc2V0KEhERjVfSExfRk9VTkQgVFJVRSkKICAgICAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgICAgICAgdW5zZXQoX2hkZjVfbGFuZ19obF9sb2NhdGlvbikKICAgICAgICAgICAgIGVuZGlmKCkKQEAgLTU1MywxNzIgKzU2NSwxNzcgQEAKIGVuZGlmKCkKIAogaWYoTk9UIEhERjVfRk9VTkQpCi0gIHNldChfSERGNV9ORUVEX1RPX1NFQVJDSCBGYWxzZSkKLSAgc2V0KEhERjVfQ09NUElMRVJfTk9fSU5URVJST0dBVEUgVHJ1ZSkKKyAgc2V0KF9IREY1X05FRURfVE9fU0VBUkNIIEZBTFNFKQorICBzZXQoSERGNV9DT01QSUxFUl9OT19JTlRFUlJPR0FURSBUUlVFKQogICAjIE9ubHkgc2VhcmNoIGZvciBsYW5ndWFnZXMgd2UndmUgZW5hYmxlZAotICBmb3JlYWNoKF9fbGFuZyBJTiBMSVNUUyBIREY1X0xBTkdVQUdFX0JJTkRJTkdTKQorICBmb3JlYWNoKF9sYW5nIElOIExJU1RTIEhERjVfTEFOR1VBR0VfQklORElOR1MpCiAgICAgIyBGaXJzdCBjaGVjayB0byBzZWUgaWYgb3VyIHJlZ3VsYXIgY29tcGlsZXIgaXMgb25lIG9mIHdyYXBwZXJzCi0gICAgaWYoX19sYW5nIFNUUkVRVUFMICJDIikKKyAgICBpZihfbGFuZyBTVFJFUVVBTCAiQyIpCiAgICAgICBfSERGNV90ZXN0X3JlZ3VsYXJfY29tcGlsZXJfQygKLSAgICAgICAgSERGNV8ke19fbGFuZ31fQ09NUElMRVJfTk9fSU5URVJST0dBVEUKLSAgICAgICAgSERGNV8ke19fbGFuZ31fVkVSU0lPTgotICAgICAgICBIREY1XyR7X19sYW5nfV9JU19QQVJBTExFTCkKLSAgICBlbHNlaWYoX19sYW5nIFNUUkVRVUFMICJDWFgiKQorICAgICAgICBIREY1XyR7X2xhbmd9X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFCisgICAgICAgIEhERjVfJHtfbGFuZ31fVkVSU0lPTgorICAgICAgICBIREY1XyR7X2xhbmd9X0lTX1BBUkFMTEVMKQorICAgIGVsc2VpZihfbGFuZyBTVFJFUVVBTCAiQ1hYIikKICAgICAgIF9IREY1X3Rlc3RfcmVndWxhcl9jb21waWxlcl9DWFgoCi0gICAgICAgIEhERjVfJHtfX2xhbmd9X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFCi0gICAgICAgIEhERjVfJHtfX2xhbmd9X1ZFUlNJT04KLSAgICAgICAgSERGNV8ke19fbGFuZ31fSVNfUEFSQUxMRUwpCi0gICAgZWxzZWlmKF9fbGFuZyBTVFJFUVVBTCAiRm9ydHJhbiIpCisgICAgICAgIEhERjVfJHtfbGFuZ31fQ09NUElMRVJfTk9fSU5URVJST0dBVEUKKyAgICAgICAgSERGNV8ke19sYW5nfV9WRVJTSU9OCisgICAgICAgIEhERjVfJHtfbGFuZ31fSVNfUEFSQUxMRUwpCisgICAgZWxzZWlmKF9sYW5nIFNUUkVRVUFMICJGb3J0cmFuIikKICAgICAgIF9IREY1X3Rlc3RfcmVndWxhcl9jb21waWxlcl9Gb3J0cmFuKAotICAgICAgICBIREY1XyR7X19sYW5nfV9DT01QSUxFUl9OT19JTlRFUlJPR0FURQotICAgICAgICBIREY1XyR7X19sYW5nfV9JU19QQVJBTExFTCkKKyAgICAgICAgSERGNV8ke19sYW5nfV9DT01QSUxFUl9OT19JTlRFUlJPR0FURQorICAgICAgICBIREY1XyR7X2xhbmd9X0lTX1BBUkFMTEVMKQogICAgIGVsc2UoKQogICAgICAgY29udGludWUoKQogICAgIGVuZGlmKCkKLSAgICBpZihIREY1XyR7X19sYW5nfV9DT01QSUxFUl9OT19JTlRFUlJPR0FURSkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1OiBVc2luZyBoZGY1IGNvbXBpbGVyIHdyYXBwZXIgZm9yIGFsbCAke19fbGFuZ30gY29tcGlsaW5nIikKLSAgICAgIHNldChIREY1XyR7X19sYW5nfV9GT1VORCBUcnVlKQotICAgICAgc2V0KEhERjVfJHtfX2xhbmd9X0NPTVBJTEVSX0VYRUNVVEFCTEVfTk9fSU5URVJST0dBVEUKLSAgICAgICAgICAiJHtDTUFLRV8ke19fbGFuZ31fQ09NUElMRVJ9IgotICAgICAgICAgIENBQ0hFIEZJTEVQQVRIICJIREY1ICR7X19sYW5nfSBjb21waWxlciB3cmFwcGVyIikKLSAgICAgIHNldChIREY1XyR7X19sYW5nfV9ERUZJTklUSU9OUykKLSAgICAgIHNldChIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUlMpCi0gICAgICBzZXQoSERGNV8ke19fbGFuZ31fTElCUkFSSUVTKQotICAgICAgc2V0KEhERjVfJHtfX2xhbmd9X0hMX0xJQlJBUklFUykKKyAgICBpZihIREY1XyR7X2xhbmd9X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFKQorICAgICAgaWYoSERGNV9GSU5EX0RFQlVHKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiSERGNTogVXNpbmcgaGRmNSBjb21waWxlciB3cmFwcGVyIGZvciBhbGwgJHtfbGFuZ30gY29tcGlsaW5nIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIHNldChIREY1XyR7X2xhbmd9X0ZPVU5EIFRSVUUpCisgICAgICBzZXQoSERGNV8ke19sYW5nfV9DT01QSUxFUl9FWEVDVVRBQkxFX05PX0lOVEVSUk9HQVRFCisgICAgICAgICAgIiR7Q01BS0VfJHtfbGFuZ31fQ09NUElMRVJ9IgorICAgICAgICAgIENBQ0hFIEZJTEVQQVRIICJIREY1ICR7X2xhbmd9IGNvbXBpbGVyIHdyYXBwZXIiKQorICAgICAgc2V0KEhERjVfJHtfbGFuZ31fREVGSU5JVElPTlMpCisgICAgICBzZXQoSERGNV8ke19sYW5nfV9JTkNMVURFX0RJUlMpCisgICAgICBzZXQoSERGNV8ke19sYW5nfV9MSUJSQVJJRVMpCisgICAgICBzZXQoSERGNV8ke19sYW5nfV9ITF9MSUJSQVJJRVMpCiAKLSAgICAgIG1hcmtfYXNfYWR2YW5jZWQoSERGNV8ke19fbGFuZ31fQ09NUElMRVJfRVhFQ1VUQUJMRV9OT19JTlRFUlJPR0FURSkKKyAgICAgIG1hcmtfYXNfYWR2YW5jZWQoSERGNV8ke19sYW5nfV9DT01QSUxFUl9FWEVDVVRBQkxFX05PX0lOVEVSUk9HQVRFKQogCi0gICAgICBzZXQoSERGNV8ke19fbGFuZ31fRk9VTkQgVHJ1ZSkKLSAgICAgIHNldChIREY1X0hMX0ZPVU5EIFRydWUpCisgICAgICBzZXQoSERGNV8ke19sYW5nfV9GT1VORCBUUlVFKQorICAgICAgc2V0KEhERjVfSExfRk9VTkQgVFJVRSkKICAgICBlbHNlKCkKLSAgICAgIHNldChIREY1X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFIEZhbHNlKQorICAgICAgc2V0KEhERjVfQ09NUElMRVJfTk9fSU5URVJST0dBVEUgRkFMU0UpCiAgICAgICAjIElmIHRoaXMgbGFuZ3VhZ2UgaXNuJ3QgdXNpbmcgdGhlIHdyYXBwZXIsIHRoZW4gdHJ5IHRvIHNlZWQgdGhlCiAgICAgICAjIHNlYXJjaCBvcHRpb25zIHdpdGggdGhlIHdyYXBwZXIKLSAgICAgIGZpbmRfcHJvZ3JhbShIREY1XyR7X19sYW5nfV9DT01QSUxFUl9FWEVDVVRBQkxFCi0gICAgICAgIE5BTUVTICR7SERGNV8ke19fbGFuZ31fQ09NUElMRVJfTkFNRVN9IE5BTUVTX1BFUl9ESVIKKyAgICAgIGZpbmRfcHJvZ3JhbShIREY1XyR7X2xhbmd9X0NPTVBJTEVSX0VYRUNVVEFCTEUKKyAgICAgICAgTkFNRVMgJHtIREY1XyR7X2xhbmd9X0NPTVBJTEVSX05BTUVTfSBOQU1FU19QRVJfRElSCiAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfQogICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiBCaW4KLSAgICAgICAgRE9DICJIREY1ICR7X19sYW5nfSBXcmFwcGVyIGNvbXBpbGVyLiAgVXNlZCBvbmx5IHRvIGRldGVjdCBIREY1IGNvbXBpbGUgZmxhZ3MuIgorICAgICAgICBET0MgIkhERjUgJHtfbGFuZ30gV3JhcHBlciBjb21waWxlci4gIFVzZWQgb25seSB0byBkZXRlY3QgSERGNSBjb21waWxlIGZsYWdzLiIKICAgICAgICAgJHtfSERGNV9TRUFSQ0hfT1BUU30KICAgICAgICkKLSAgICAgIG1hcmtfYXNfYWR2YW5jZWQoIEhERjVfJHtfX2xhbmd9X0NPTVBJTEVSX0VYRUNVVEFCTEUgKQotICAgICAgdW5zZXQoSERGNV8ke19fbGFuZ31fQ09NUElMRVJfTkFNRVMpCisgICAgICBtYXJrX2FzX2FkdmFuY2VkKCBIREY1XyR7X2xhbmd9X0NPTVBJTEVSX0VYRUNVVEFCTEUgKQorICAgICAgdW5zZXQoSERGNV8ke19sYW5nfV9DT01QSUxFUl9OQU1FUykKIAotICAgICAgaWYoSERGNV8ke19fbGFuZ31fQ09NUElMRVJfRVhFQ1VUQUJMRSkKLSAgICAgICAgX0hERjVfaW52b2tlX2NvbXBpbGVyKCR7X19sYW5nfSBIREY1XyR7X19sYW5nfV9DT01QSUxFX0xJTkUKLSAgICAgICAgICBIREY1XyR7X19sYW5nfV9SRVRVUk5fVkFMVUUgSERGNV8ke19fbGFuZ31fVkVSU0lPTiBIREY1XyR7X19sYW5nfV9JU19QQVJBTExFTCkKLSAgICAgICAgaWYoSERGNV8ke19fbGFuZ31fUkVUVVJOX1ZBTFVFIEVRVUFMIDApCi0gICAgICAgICAgbWVzc2FnZShTVEFUVVMgIkhERjU6IFVzaW5nIGhkZjUgY29tcGlsZXIgd3JhcHBlciB0byBkZXRlcm1pbmUgJHtfX2xhbmd9IGNvbmZpZ3VyYXRpb24iKQotICAgICAgICAgIF9IREY1X3BhcnNlX2NvbXBpbGVfbGluZSggSERGNV8ke19fbGFuZ31fQ09NUElMRV9MSU5FCi0gICAgICAgICAgICBIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUlMKLSAgICAgICAgICAgIEhERjVfJHtfX2xhbmd9X0RFRklOSVRJT05TCi0gICAgICAgICAgICBIREY1XyR7X19sYW5nfV9MSUJSQVJZX0RJUlMKLSAgICAgICAgICAgIEhERjVfJHtfX2xhbmd9X0xJQlJBUllfTkFNRVMKLSAgICAgICAgICAgIEhERjVfJHtfX2xhbmd9X0hMX0xJQlJBUllfTkFNRVMKKyAgICAgIGlmKEhERjVfJHtfbGFuZ31fQ09NUElMRVJfRVhFQ1VUQUJMRSkKKyAgICAgICAgX0hERjVfaW52b2tlX2NvbXBpbGVyKCR7X2xhbmd9IEhERjVfJHtfbGFuZ31fQ09NUElMRV9MSU5FCisgICAgICAgICAgSERGNV8ke19sYW5nfV9SRVRVUk5fVkFMVUUgSERGNV8ke19sYW5nfV9WRVJTSU9OIEhERjVfJHtfbGFuZ31fSVNfUEFSQUxMRUwpCisgICAgICAgIGlmKEhERjVfJHtfbGFuZ31fUkVUVVJOX1ZBTFVFIEVRVUFMIDApCisgICAgICAgICAgaWYoSERGNV9GSU5EX0RFQlVHKQorICAgICAgICAgICAgbWVzc2FnZShTVEFUVVMgIkhERjU6IFVzaW5nIGhkZjUgY29tcGlsZXIgd3JhcHBlciB0byBkZXRlcm1pbmUgJHtfbGFuZ30gY29uZmlndXJhdGlvbiIpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIF9IREY1X3BhcnNlX2NvbXBpbGVfbGluZSggSERGNV8ke19sYW5nfV9DT01QSUxFX0xJTkUKKyAgICAgICAgICAgIEhERjVfJHtfbGFuZ31fSU5DTFVERV9ESVJTCisgICAgICAgICAgICBIREY1XyR7X2xhbmd9X0RFRklOSVRJT05TCisgICAgICAgICAgICBIREY1XyR7X2xhbmd9X0xJQlJBUllfRElSUworICAgICAgICAgICAgSERGNV8ke19sYW5nfV9MSUJSQVJZX05BTUVTCisgICAgICAgICAgICBIREY1XyR7X2xhbmd9X0hMX0xJQlJBUllfTkFNRVMKICAgICAgICAgICApCi0gICAgICAgICAgc2V0KEhERjVfJHtfX2xhbmd9X0xJQlJBUklFUykKKyAgICAgICAgICBzZXQoSERGNV8ke19sYW5nfV9MSUJSQVJJRVMpCiAKLSAgICAgICAgICBmb3JlYWNoKEwgSU4gTElTVFMgSERGNV8ke19fbGFuZ31fTElCUkFSWV9OQU1FUykKKyAgICAgICAgICBmb3JlYWNoKF9saWIgSU4gTElTVFMgSERGNV8ke19sYW5nfV9MSUJSQVJZX05BTUVTKQogICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9OQU1FU19MT0NBTCkKLSAgICAgICAgICAgIGlmKCJ4JHtMfSIgTUFUQ0hFUyAiaGRmNSIpCisgICAgICAgICAgICBpZigieCR7X2xpYn0iIE1BVENIRVMgImhkZjUiKQogICAgICAgICAgICAgICAjIGhkZjUgbGlicmFyeQogICAgICAgICAgICAgICBzZXQoX0hERjVfU0VBUkNIX09QVFNfTE9DQUwgJHtfSERGNV9TRUFSQ0hfT1BUU30pCiAgICAgICAgICAgICAgIGlmKEhERjVfVVNFX1NUQVRJQ19MSUJSQVJJRVMpCiAgICAgICAgICAgICAgICAgaWYoV0lOMzIpCi0gICAgICAgICAgICAgICAgICBzZXQoX0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMIGxpYiR7TH0pCisgICAgICAgICAgICAgICAgICBzZXQoX0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMIGxpYiR7X2xpYn0pCiAgICAgICAgICAgICAgICAgZWxzZSgpCi0gICAgICAgICAgICAgICAgICBzZXQoX0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMIGxpYiR7TH0uYSkKKyAgICAgICAgICAgICAgICAgIHNldChfSERGNV9TRUFSQ0hfTkFNRVNfTE9DQUwgbGliJHtfbGlifS5hKQogICAgICAgICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgICAgZWxzZSgpCiAgICAgICAgICAgICAgICMgZXh0ZXJuYWwgbGlicmFyeQogICAgICAgICAgICAgICBzZXQoX0hERjVfU0VBUkNIX09QVFNfTE9DQUwpCiAgICAgICAgICAgICBlbmRpZigpCi0gICAgICAgICAgICBmaW5kX2xpYnJhcnkoSERGNV8ke19fbGFuZ31fTElCUkFSWV8ke0x9Ci0gICAgICAgICAgICAgIE5BTUVTICR7X0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMfSAke0x9IE5BTUVTX1BFUl9ESVIKLSAgICAgICAgICAgICAgSElOVFMgJHtIREY1XyR7X19sYW5nfV9MSUJSQVJZX0RJUlN9CisgICAgICAgICAgICBmaW5kX2xpYnJhcnkoSERGNV8ke19sYW5nfV9MSUJSQVJZXyR7X2xpYn0KKyAgICAgICAgICAgICAgTkFNRVMgJHtfSERGNV9TRUFSQ0hfTkFNRVNfTE9DQUx9ICR7X2xpYn0gTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICBISU5UUyAke0hERjVfJHtfbGFuZ31fTElCUkFSWV9ESVJTfQogICAgICAgICAgICAgICAgICAgICAke0hERjVfUk9PVH0KICAgICAgICAgICAgICAgJHtfSERGNV9TRUFSQ0hfT1BUU19MT0NBTH0KICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgdW5zZXQoX0hERjVfU0VBUkNIX09QVFNfTE9DQUwpCiAgICAgICAgICAgICB1bnNldChfSERGNV9TRUFSQ0hfTkFNRVNfTE9DQUwpCi0gICAgICAgICAgICBpZihIREY1XyR7X19sYW5nfV9MSUJSQVJZXyR7TH0pCi0gICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfX2xhbmd9X0xJQlJBUklFUyAke0hERjVfJHtfX2xhbmd9X0xJQlJBUllfJHtMfX0pCisgICAgICAgICAgICBpZihIREY1XyR7X2xhbmd9X0xJQlJBUllfJHtfbGlifSkKKyAgICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV8ke19sYW5nfV9MSUJSQVJJRVMgJHtIREY1XyR7X2xhbmd9X0xJQlJBUllfJHtfbGlifX0pCiAgICAgICAgICAgICBlbHNlKCkKLSAgICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV8ke19fbGFuZ31fTElCUkFSSUVTICR7TH0pCisgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfbGFuZ31fTElCUkFSSUVTICR7X2xpYn0pCiAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgZW5kZm9yZWFjaCgpCi0gICAgICAgICAgaWYoRklORF9ITCkKLSAgICAgICAgICAgIHNldChIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJJRVMpCi0gICAgICAgICAgICBmb3JlYWNoKEwgSU4gTElTVFMgSERGNV8ke19fbGFuZ31fSExfTElCUkFSWV9OQU1FUykKKyAgICAgICAgICBpZihIREY1X0ZJTkRfSEwpCisgICAgICAgICAgICBzZXQoSERGNV8ke19sYW5nfV9ITF9MSUJSQVJJRVMpCisgICAgICAgICAgICBmb3JlYWNoKF9saWIgSU4gTElTVFMgSERGNV8ke19sYW5nfV9ITF9MSUJSQVJZX05BTUVTKQogICAgICAgICAgICAgICBzZXQoX0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMKQotICAgICAgICAgICAgICBpZigieCR7TH0iIE1BVENIRVMgImhkZjUiKQorICAgICAgICAgICAgICBpZigieCR7X2xpYn0iIE1BVENIRVMgImhkZjUiKQogICAgICAgICAgICAgICAgICMgaGRmNSBsaWJyYXJ5CiAgICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9PUFRTX0xPQ0FMICR7X0hERjVfU0VBUkNIX09QVFN9KQogICAgICAgICAgICAgICAgIGlmKEhERjVfVVNFX1NUQVRJQ19MSUJSQVJJRVMpCiAgICAgICAgICAgICAgICAgICBpZihXSU4zMikKLSAgICAgICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9OQU1FU19MT0NBTCBsaWIke0x9KQorICAgICAgICAgICAgICAgICAgICBzZXQoX0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMIGxpYiR7X2xpYn0pCiAgICAgICAgICAgICAgICAgICBlbHNlKCkKLSAgICAgICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9OQU1FU19MT0NBTCBsaWIke0x9LmEpCisgICAgICAgICAgICAgICAgICAgIHNldChfSERGNV9TRUFSQ0hfTkFNRVNfTE9DQUwgbGliJHtfbGlifS5hKQogICAgICAgICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgICAgICAgZWxzZSgpCiAgICAgICAgICAgICAgICAgIyBleHRlcm5hbCBsaWJyYXJ5CiAgICAgICAgICAgICAgICAgc2V0KF9IREY1X1NFQVJDSF9PUFRTX0xPQ0FMKQogICAgICAgICAgICAgICBlbmRpZigpCi0gICAgICAgICAgICAgIGZpbmRfbGlicmFyeShIREY1XyR7X19sYW5nfV9MSUJSQVJZXyR7TH0KLSAgICAgICAgICAgICAgICBOQU1FUyAke19IREY1X1NFQVJDSF9OQU1FU19MT0NBTH0gJHtMfSBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgSElOVFMgJHtIREY1XyR7X19sYW5nfV9MSUJSQVJZX0RJUlN9CisgICAgICAgICAgICAgIGZpbmRfbGlicmFyeShIREY1XyR7X2xhbmd9X0xJQlJBUllfJHtfbGlifQorICAgICAgICAgICAgICAgIE5BTUVTICR7X0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMfSAke19saWJ9IE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfJHtfbGFuZ31fTElCUkFSWV9ESVJTfQogICAgICAgICAgICAgICAgICAgICAgICR7SERGNV9ST09UfQogICAgICAgICAgICAgICAgICR7X0hERjVfU0VBUkNIX09QVFNfTE9DQUx9CiAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICB1bnNldChfSERGNV9TRUFSQ0hfT1BUU19MT0NBTCkKICAgICAgICAgICAgICAgdW5zZXQoX0hERjVfU0VBUkNIX05BTUVTX0xPQ0FMKQotICAgICAgICAgICAgICBpZihIREY1XyR7X19sYW5nfV9MSUJSQVJZXyR7TH0pCi0gICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV8ke19fbGFuZ31fSExfTElCUkFSSUVTICR7SERGNV8ke19fbGFuZ31fTElCUkFSWV8ke0x9fSkKKyAgICAgICAgICAgICAgaWYoSERGNV8ke19sYW5nfV9MSUJSQVJZXyR7X2xpYn0pCisgICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV8ke19sYW5nfV9ITF9MSUJSQVJJRVMgJHtIREY1XyR7X2xhbmd9X0xJQlJBUllfJHtfbGlifX0pCiAgICAgICAgICAgICAgIGVsc2UoKQotICAgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfX2xhbmd9X0hMX0xJQlJBUklFUyAke0x9KQorICAgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfbGFuZ31fSExfTElCUkFSSUVTICR7X2xpYn0pCiAgICAgICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgICAgIGVuZGZvcmVhY2goKQotICAgICAgICAgICAgc2V0KEhERjVfSExfRk9VTkQgVHJ1ZSkKKyAgICAgICAgICAgIHNldChIREY1X0hMX0ZPVU5EIFRSVUUpCiAgICAgICAgICAgZW5kaWYoKQogCi0gICAgICAgICAgc2V0KEhERjVfJHtfX2xhbmd9X0ZPVU5EIFRydWUpCi0gICAgICAgICAgX0hERjVfcmVtb3ZlX2R1cGxpY2F0ZXNfZnJvbV9iZWdpbm5pbmcoSERGNV8ke19fbGFuZ31fREVGSU5JVElPTlMpCi0gICAgICAgICAgX0hERjVfcmVtb3ZlX2R1cGxpY2F0ZXNfZnJvbV9iZWdpbm5pbmcoSERGNV8ke19fbGFuZ31fSU5DTFVERV9ESVJTKQotICAgICAgICAgIF9IREY1X3JlbW92ZV9kdXBsaWNhdGVzX2Zyb21fYmVnaW5uaW5nKEhERjVfJHtfX2xhbmd9X0xJQlJBUklFUykKLSAgICAgICAgICBfSERGNV9yZW1vdmVfZHVwbGljYXRlc19mcm9tX2JlZ2lubmluZyhIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJJRVMpCisgICAgICAgICAgc2V0KEhERjVfJHtfbGFuZ31fRk9VTkQgVFJVRSkKKyAgICAgICAgICBfSERGNV9yZW1vdmVfZHVwbGljYXRlc19mcm9tX2JlZ2lubmluZyhIREY1XyR7X2xhbmd9X0RFRklOSVRJT05TKQorICAgICAgICAgIF9IREY1X3JlbW92ZV9kdXBsaWNhdGVzX2Zyb21fYmVnaW5uaW5nKEhERjVfJHtfbGFuZ31fSU5DTFVERV9ESVJTKQorICAgICAgICAgIF9IREY1X3JlbW92ZV9kdXBsaWNhdGVzX2Zyb21fYmVnaW5uaW5nKEhERjVfJHtfbGFuZ31fTElCUkFSSUVTKQorICAgICAgICAgIF9IREY1X3JlbW92ZV9kdXBsaWNhdGVzX2Zyb21fYmVnaW5uaW5nKEhERjVfJHtfbGFuZ31fSExfTElCUkFSSUVTKQogICAgICAgICBlbHNlKCkKLSAgICAgICAgICBzZXQoX0hERjVfTkVFRF9UT19TRUFSQ0ggVHJ1ZSkKKyAgICAgICAgICBzZXQoX0hERjVfTkVFRF9UT19TRUFSQ0ggVFJVRSkKICAgICAgICAgZW5kaWYoKQogICAgICAgZWxzZSgpCi0gICAgICAgIHNldChfSERGNV9ORUVEX1RPX1NFQVJDSCBUcnVlKQorICAgICAgICBzZXQoX0hERjVfTkVFRF9UT19TRUFSQ0ggVFJVRSkKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCi0gICAgaWYoSERGNV8ke19fbGFuZ31fVkVSU0lPTikKKyAgICBpZihIREY1XyR7X2xhbmd9X1ZFUlNJT04pCiAgICAgICBpZihOT1QgSERGNV9WRVJTSU9OKQotICAgICAgICBzZXQoSERGNV9WRVJTSU9OICR7SERGNV8ke19fbGFuZ31fVkVSU0lPTn0pCi0gICAgICBlbHNlaWYoTk9UIEhERjVfVkVSU0lPTiBWRVJTSU9OX0VRVUFMIEhERjVfJHtfX2xhbmd9X1ZFUlNJT04pCi0gICAgICAgIG1lc3NhZ2UoV0FSTklORyAiSERGNSBWZXJzaW9uIGZvdW5kIGZvciBsYW5ndWFnZSAke19fbGFuZ30sICR7SERGNV8ke19fbGFuZ31fVkVSU0lPTn0gaXMgZGlmZmVyZW50IHRoYW4gcHJldmlvdXNseSBmb3VuZCB2ZXJzaW9uICR7SERGNV9WRVJTSU9OfSIpCisgICAgICAgIHNldChIREY1X1ZFUlNJT04gJHtIREY1XyR7X2xhbmd9X1ZFUlNJT059KQorICAgICAgZWxzZWlmKE5PVCBIREY1X1ZFUlNJT04gVkVSU0lPTl9FUVVBTCBIREY1XyR7X2xhbmd9X1ZFUlNJT04pCisgICAgICAgIG1lc3NhZ2UoV0FSTklORyAiSERGNSBWZXJzaW9uIGZvdW5kIGZvciBsYW5ndWFnZSAke19sYW5nfSwgJHtIREY1XyR7X2xhbmd9X1ZFUlNJT059IGlzIGRpZmZlcmVudCB0aGFuIHByZXZpb3VzbHkgZm91bmQgdmVyc2lvbiAke0hERjVfVkVSU0lPTn0iKQogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKLSAgICBpZihERUZJTkVEIEhERjVfJHtfX2xhbmd9X0lTX1BBUkFMTEVMKQorICAgIGlmKERFRklORUQgSERGNV8ke19sYW5nfV9JU19QQVJBTExFTCkKICAgICAgIGlmKE5PVCBERUZJTkVEIEhERjVfSVNfUEFSQUxMRUwpCi0gICAgICAgIHNldChIREY1X0lTX1BBUkFMTEVMICR7SERGNV8ke19fbGFuZ31fSVNfUEFSQUxMRUx9KQotICAgICAgZWxzZWlmKE5PVCBIREY1X0lTX1BBUkFMTEVMIEFORCBIREY1XyR7X19sYW5nfV9JU19QQVJBTExFTCkKLSAgICAgICAgbWVzc2FnZShXQVJOSU5HICJIREY1IGZvdW5kIGZvciBsYW5ndWFnZSAke19fbGFuZ30gaXMgcGFyYWxsZWwgYnV0IHByZXZpb3VzbHkgZm91bmQgbGFuZ3VhZ2UgaXMgbm90IHBhcmFsbGVsLiIpCi0gICAgICBlbHNlaWYoSERGNV9JU19QQVJBTExFTCBBTkQgTk9UIEhERjVfJHtfX2xhbmd9X0lTX1BBUkFMTEVMKQotICAgICAgICBtZXNzYWdlKFdBUk5JTkcgIkhERjUgZm91bmQgZm9yIGxhbmd1YWdlICR7X19sYW5nfSBpcyBub3QgcGFyYWxsZWwgYnV0IHByZXZpb3VzbHkgZm91bmQgbGFuZ3VhZ2UgaXMgcGFyYWxsZWwuIikKKyAgICAgICAgc2V0KEhERjVfSVNfUEFSQUxMRUwgJHtIREY1XyR7X2xhbmd9X0lTX1BBUkFMTEVMfSkKKyAgICAgIGVsc2VpZihOT1QgSERGNV9JU19QQVJBTExFTCBBTkQgSERGNV8ke19sYW5nfV9JU19QQVJBTExFTCkKKyAgICAgICAgbWVzc2FnZShXQVJOSU5HICJIREY1IGZvdW5kIGZvciBsYW5ndWFnZSAke19sYW5nfSBpcyBwYXJhbGxlbCBidXQgcHJldmlvdXNseSBmb3VuZCBsYW5ndWFnZSBpcyBub3QgcGFyYWxsZWwuIikKKyAgICAgIGVsc2VpZihIREY1X0lTX1BBUkFMTEVMIEFORCBOT1QgSERGNV8ke19sYW5nfV9JU19QQVJBTExFTCkKKyAgICAgICAgbWVzc2FnZShXQVJOSU5HICJIREY1IGZvdW5kIGZvciBsYW5ndWFnZSAke19sYW5nfSBpcyBub3QgcGFyYWxsZWwgYnV0IHByZXZpb3VzbHkgZm91bmQgbGFuZ3VhZ2UgaXMgcGFyYWxsZWwuIikKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAgIGVuZGZvcmVhY2goKQorICB1bnNldChfbGliKQogZWxzZSgpCi0gIHNldChfSERGNV9ORUVEX1RPX1NFQVJDSCBUcnVlKQorICBzZXQoX0hERjVfTkVFRF9UT19TRUFSQ0ggVFJVRSkKIGVuZGlmKCkKIAogaWYoTk9UIEhERjVfRk9VTkQgQU5EIEhERjVfQ09NUElMRVJfTk9fSU5URVJST0dBVEUpCiAgICMgTm8gYXJndW1lbnRzIG5lY2Vzc2FyeSwgYWxsIGxhbmd1YWdlcyBjYW4gdXNlIHRoZSBjb21waWxlciB3cmFwcGVycwotICBzZXQoSERGNV9GT1VORCBUcnVlKQorICBzZXQoSERGNV9GT1VORCBUUlVFKQogICBzZXQoSERGNV9NRVRIT0QgIkluY2x1ZGVkIGJ5IGNvbXBpbGVyIHdyYXBwZXJzIikKICAgc2V0KEhERjVfUkVRVUlSRURfVkFSUyBIREY1X01FVEhPRCkKIGVsc2VpZihOT1QgSERGNV9GT1VORCBBTkQgTk9UIF9IREY1X05FRURfVE9fU0VBUkNIKQpAQCAtNzI3LDE0ICs3NDQsMTQgQEAKICAgc2V0KEhERjVfSU5DTFVERV9ESVJTKQogICBzZXQoSERGNV9MSUJSQVJJRVMpCiAgIHNldChIREY1X0hMX0xJQlJBUklFUykKLSAgZm9yZWFjaChfX2xhbmcgSU4gTElTVFMgSERGNV9MQU5HVUFHRV9CSU5ESU5HUykKLSAgICBpZihIREY1XyR7X19sYW5nfV9GT1VORCkKLSAgICAgIGlmKE5PVCBIREY1XyR7X19sYW5nfV9DT01QSUxFUl9OT19JTlRFUlJPR0FURSkKLSAgICAgICAgbGlzdChBUFBFTkQgSERGNV9ERUZJTklUSU9OUyAke0hERjVfJHtfX2xhbmd9X0RFRklOSVRJT05TfSkKLSAgICAgICAgbGlzdChBUFBFTkQgSERGNV9JTkNMVURFX0RJUlMgJHtIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUlN9KQotICAgICAgICBsaXN0KEFQUEVORCBIREY1X0xJQlJBUklFUyAke0hERjVfJHtfX2xhbmd9X0xJQlJBUklFU30pCi0gICAgICAgIGlmKEZJTkRfSEwpCi0gICAgICAgICAgbGlzdChBUFBFTkQgSERGNV9ITF9MSUJSQVJJRVMgJHtIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJJRVN9KQorICBmb3JlYWNoKF9sYW5nIElOIExJU1RTIEhERjVfTEFOR1VBR0VfQklORElOR1MpCisgICAgaWYoSERGNV8ke19sYW5nfV9GT1VORCkKKyAgICAgIGlmKE5PVCBIREY1XyR7X2xhbmd9X0NPTVBJTEVSX05PX0lOVEVSUk9HQVRFKQorICAgICAgICBsaXN0KEFQUEVORCBIREY1X0RFRklOSVRJT05TICR7SERGNV8ke19sYW5nfV9ERUZJTklUSU9OU30pCisgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfSU5DTFVERV9ESVJTICR7SERGNV8ke19sYW5nfV9JTkNMVURFX0RJUlN9KQorICAgICAgICBsaXN0KEFQUEVORCBIREY1X0xJQlJBUklFUyAke0hERjVfJHtfbGFuZ31fTElCUkFSSUVTfSkKKyAgICAgICAgaWYoSERGNV9GSU5EX0hMKQorICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfSExfTElCUkFSSUVTICR7SERGNV8ke19sYW5nfV9ITF9MSUJSQVJJRVN9KQogICAgICAgICBlbmRpZigpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQpAQCAtNzQzLDkgKzc2MCw5IEBACiAgIF9IREY1X3JlbW92ZV9kdXBsaWNhdGVzX2Zyb21fYmVnaW5uaW5nKEhERjVfSU5DTFVERV9ESVJTKQogICBfSERGNV9yZW1vdmVfZHVwbGljYXRlc19mcm9tX2JlZ2lubmluZyhIREY1X0xJQlJBUklFUykKICAgX0hERjVfcmVtb3ZlX2R1cGxpY2F0ZXNfZnJvbV9iZWdpbm5pbmcoSERGNV9ITF9MSUJSQVJJRVMpCi0gIHNldChIREY1X0ZPVU5EIFRydWUpCisgIHNldChIREY1X0ZPVU5EIFRSVUUpCiAgIHNldChIREY1X1JFUVVJUkVEX1ZBUlMgSERGNV9MSUJSQVJJRVMpCi0gIGlmKEZJTkRfSEwpCisgIGlmKEhERjVfRklORF9ITCkKICAgICBsaXN0KEFQUEVORCBIREY1X1JFUVVJUkVEX1ZBUlMgSERGNV9ITF9MSUJSQVJJRVMpCiAgIGVuZGlmKCkKIGVuZGlmKCkKQEAgLTc2OSwzMyArNzg2LDQ0IEBACiAgICAgc2V0KEhERjVfRm9ydHJhbl9MSUJSQVJZX05BTUVTICAgIGhkZjVfZm9ydHJhbiAgICR7SERGNV9DX0xJQlJBUllfTkFNRVN9KQogICAgIHNldChIREY1X0ZvcnRyYW5fSExfTElCUkFSWV9OQU1FUyBoZGY1aGxfZm9ydHJhbiAke0hERjVfQ19ITF9MSUJSQVJZX05BTUVTfSAke0hERjVfRm9ydHJhbl9MSUJSQVJZX05BTUVTfSkKIAotICAgIGZvcmVhY2goX19sYW5nIElOIExJU1RTIEhERjVfTEFOR1VBR0VfQklORElOR1MpCisgICAgIyBzdWZmaXhlcyBhcyBzZWVuIG9uIExpbnV4LCBNU1lTMiwgLi4uCisgICAgc2V0KF9saWJfc3VmZml4ZXMgaGRmNSkKKyAgICBpZihOT1QgSERGNV9QUkVGRVJfUEFSQUxMRUwpCisgICAgICBsaXN0KEFQUEVORCBfbGliX3N1ZmZpeGVzIGhkZjUvc2VyaWFsKQorICAgIGVuZGlmKCkKKyAgICBpZihIREY1X1VTRV9TVEFUSUNfTElCUkFSSUVTKQorICAgICAgc2V0KF9pbmNfc3VmZml4ZXMgaW5jbHVkZS9zdGF0aWMpCisgICAgZWxzZSgpCisgICAgICBzZXQoX2luY19zdWZmaXhlcyBpbmNsdWRlL3NoYXJlZCkKKyAgICBlbmRpZigpCisKKyAgICBmb3JlYWNoKF9sYW5nIElOIExJU1RTIEhERjVfTEFOR1VBR0VfQklORElOR1MpCiAgICAgICAgICMgZmluZCB0aGUgSERGNSBpbmNsdWRlIGRpcmVjdG9yaWVzCi0gICAgICAgIGlmKCIke19fbGFuZ30iIFNUUkVRVUFMICJGb3J0cmFuIikKKyAgICAgICAgaWYoIiR7X2xhbmd9IiBTVFJFUVVBTCAiRm9ydHJhbiIpCiAgICAgICAgICAgICBzZXQoSERGNV9JTkNMVURFX0ZJTEVOQU1FIGhkZjUubW9kIEhERjUubW9kKQotICAgICAgICBlbHNlaWYoIiR7X19sYW5nfSIgU1RSRVFVQUwgIkNYWCIpCisgICAgICAgIGVsc2VpZigiJHtfbGFuZ30iIFNUUkVRVUFMICJDWFgiKQogICAgICAgICAgICAgc2V0KEhERjVfSU5DTFVERV9GSUxFTkFNRSBINUNwcC5oKQogICAgICAgICBlbHNlKCkKICAgICAgICAgICAgIHNldChIREY1X0lOQ0xVREVfRklMRU5BTUUgaGRmNS5oKQogICAgICAgICBlbmRpZigpCiAKLSAgICAgICAgZmluZF9wYXRoKEhERjVfJHtfX2xhbmd9X0lOQ0xVREVfRElSICR7SERGNV9JTkNMVURFX0ZJTEVOQU1FfQorICAgICAgICBmaW5kX3BhdGgoSERGNV8ke19sYW5nfV9JTkNMVURFX0RJUiAke0hERjVfSU5DTFVERV9GSUxFTkFNRX0KICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfQogICAgICAgICAgICAgUEFUSFMgJEVOVntIT01FfS8ubG9jYWwvaW5jbHVkZQotICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBpbmNsdWRlIEluY2x1ZGUKKyAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgaW5jbHVkZSBJbmNsdWRlICR7X2luY19zdWZmaXhlc30gJHtfbGliX3N1ZmZpeGVzfQogICAgICAgICAgICAgJHtfSERGNV9TRUFSQ0hfT1BUU30KICAgICAgICAgKQotICAgICAgICBtYXJrX2FzX2FkdmFuY2VkKEhERjVfJHtfX2xhbmd9X0lOQ0xVREVfRElSKQorICAgICAgICBtYXJrX2FzX2FkdmFuY2VkKEhERjVfJHtfbGFuZ31fSU5DTFVERV9ESVIpCiAgICAgICAgICMgc2V0IHRoZSBfRElSUyB2YXJpYWJsZSBhcyB0aGlzIGlzIHdoYXQgdGhlIHVzZXIgd2lsbCBub3JtYWxseSB1c2UKLSAgICAgICAgc2V0KEhERjVfJHtfX2xhbmd9X0lOQ0xVREVfRElSUyAke0hERjVfJHtfX2xhbmd9X0lOQ0xVREVfRElSfSkKLSAgICAgICAgbGlzdChBUFBFTkQgSERGNV9JTkNMVURFX0RJUlMgJHtIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUn0pCisgICAgICAgIHNldChIREY1XyR7X2xhbmd9X0lOQ0xVREVfRElSUyAke0hERjVfJHtfbGFuZ31fSU5DTFVERV9ESVJ9KQorICAgICAgICBsaXN0KEFQUEVORCBIREY1X0lOQ0xVREVfRElSUyAke0hERjVfJHtfbGFuZ31fSU5DTFVERV9ESVJ9KQogCiAgICAgICAgICMgZmluZCB0aGUgSERGNSBsaWJyYXJpZXMKLSAgICAgICAgZm9yZWFjaChMSUIgSU4gTElTVFMgSERGNV8ke19fbGFuZ31fTElCUkFSWV9OQU1FUykKKyAgICAgICAgZm9yZWFjaChMSUIgSU4gTElTVFMgSERGNV8ke19sYW5nfV9MSUJSQVJZX05BTUVTKQogICAgICAgICAgICAgaWYoSERGNV9VU0VfU1RBVElDX0xJQlJBUklFUykKICAgICAgICAgICAgICAgICAjIEFjY29yZGluZyB0byBidWcgMTY0MyBvbiB0aGUgQ01ha2UgYnVnIHRyYWNrZXIsIHRoaXMgaXMgdGhlCiAgICAgICAgICAgICAgICAgIyBwcmVmZXJyZWQgbWV0aG9kIGZvciBzZWFyY2hpbmcgZm9yIGEgc3RhdGljIGxpYnJhcnkuCi0gICAgICAgICAgICAgICAgIyBTZWUgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzE2NDMuICBXZSBzZWFyY2gKKyAgICAgICAgICAgICAgICAjIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xNjQzLiAgV2Ugc2VhcmNoCiAgICAgICAgICAgICAgICAgIyBmaXJzdCBmb3IgdGhlIGZ1bGwgc3RhdGljIGxpYnJhcnkgbmFtZSwgYnV0IGZhbGwgYmFjayB0byBhCiAgICAgICAgICAgICAgICAgIyBnZW5lcmljIHNlYXJjaCBvbiB0aGUgbmFtZSBpZiB0aGUgc3RhdGljIHNlYXJjaCBmYWlscy4KICAgICAgICAgICAgICAgICBzZXQoIFRISVNfTElCUkFSWV9TRUFSQ0hfREVCVUcKQEAgLTgxMSwzMSArODM5LDMyIEBACiAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgICBmaW5kX2xpYnJhcnkoSERGNV8ke0xJQn1fTElCUkFSWV9ERUJVRwogICAgICAgICAgICAgICAgIE5BTUVTICR7VEhJU19MSUJSQVJZX1NFQVJDSF9ERUJVR30KLSAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0gUEFUSF9TVUZGSVhFUyBsaWIgTGliCisgICAgICAgICAgICAgICAgSElOVFMgJHtIREY1X1JPT1R9IFBBVEhfU1VGRklYRVMgbGliIExpYiAke19saWJfc3VmZml4ZXN9CiAgICAgICAgICAgICAgICAgJHtfSERGNV9TRUFSQ0hfT1BUU30KICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGZpbmRfbGlicmFyeSggSERGNV8ke0xJQn1fTElCUkFSWV9SRUxFQVNFCisgICAgICAgICAgICBmaW5kX2xpYnJhcnkoSERGNV8ke0xJQn1fTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgTkFNRVMgJHtUSElTX0xJQlJBUllfU0VBUkNIX1JFTEVBU0V9Ci0gICAgICAgICAgICAgICAgSElOVFMgJHtIREY1X1JPT1R9IFBBVEhfU1VGRklYRVMgbGliIExpYgorICAgICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfSBQQVRIX1NVRkZJWEVTIGxpYiBMaWIgJHtfbGliX3N1ZmZpeGVzfQogICAgICAgICAgICAgICAgICR7X0hERjVfU0VBUkNIX09QVFN9CiAgICAgICAgICAgICApCisKICAgICAgICAgICAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKCBIREY1XyR7TElCfSApCi0gICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1XyR7X19sYW5nfV9MSUJSQVJJRVMgJHtIREY1XyR7TElCfV9MSUJSQVJZfSkKKyAgICAgICAgICAgIGxpc3QoQVBQRU5EIEhERjVfJHtfbGFuZ31fTElCUkFSSUVTICR7SERGNV8ke0xJQn1fTElCUkFSWX0pCiAgICAgICAgIGVuZGZvcmVhY2goKQotICAgICAgICBpZihIREY1XyR7X19sYW5nfV9MSUJSQVJJRVMpCi0gICAgICAgICAgICBzZXQoSERGNV8ke19fbGFuZ31fRk9VTkQgVHJ1ZSkKKyAgICAgICAgaWYoSERGNV8ke19sYW5nfV9MSUJSQVJJRVMpCisgICAgICAgICAgICBzZXQoSERGNV8ke19sYW5nfV9GT1VORCBUUlVFKQogICAgICAgICBlbmRpZigpCiAKICAgICAgICAgIyBBcHBlbmQgdGhlIGxpYnJhcmllcyBmb3IgdGhpcyBsYW5ndWFnZSBiaW5kaW5nIHRvIHRoZSBsaXN0IG9mIGFsbAogICAgICAgICAjIHJlcXVpcmVkIGxpYnJhcmllcy4KLSAgICAgICAgbGlzdChBUFBFTkQgSERGNV9MSUJSQVJJRVMgJHtIREY1XyR7X19sYW5nfV9MSUJSQVJJRVN9KQorICAgICAgICBsaXN0KEFQUEVORCBIREY1X0xJQlJBUklFUyAke0hERjVfJHtfbGFuZ31fTElCUkFSSUVTfSkKIAotICAgICAgICBpZihGSU5EX0hMKQotICAgICAgICAgICAgZm9yZWFjaChMSUIgSU4gTElTVFMgSERGNV8ke19fbGFuZ31fSExfTElCUkFSWV9OQU1FUykKKyAgICAgICAgaWYoSERGNV9GSU5EX0hMKQorICAgICAgICAgICAgZm9yZWFjaChMSUIgSU4gTElTVFMgSERGNV8ke19sYW5nfV9ITF9MSUJSQVJZX05BTUVTKQogICAgICAgICAgICAgICAgIGlmKEhERjVfVVNFX1NUQVRJQ19MSUJSQVJJRVMpCiAgICAgICAgICAgICAgICAgICAgICMgQWNjb3JkaW5nIHRvIGJ1ZyAxNjQzIG9uIHRoZSBDTWFrZSBidWcgdHJhY2tlciwgdGhpcyBpcyB0aGUKICAgICAgICAgICAgICAgICAgICAgIyBwcmVmZXJyZWQgbWV0aG9kIGZvciBzZWFyY2hpbmcgZm9yIGEgc3RhdGljIGxpYnJhcnkuCi0gICAgICAgICAgICAgICAgICAgICMgU2VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xNjQzLiAgV2Ugc2VhcmNoCisgICAgICAgICAgICAgICAgICAgICMgU2VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzE2NDMuICBXZSBzZWFyY2gKICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBmb3IgdGhlIGZ1bGwgc3RhdGljIGxpYnJhcnkgbmFtZSwgYnV0IGZhbGwgYmFjayB0byBhCiAgICAgICAgICAgICAgICAgICAgICMgZ2VuZXJpYyBzZWFyY2ggb24gdGhlIG5hbWUgaWYgdGhlIHN0YXRpYyBzZWFyY2ggZmFpbHMuCiAgICAgICAgICAgICAgICAgICAgIHNldCggVEhJU19MSUJSQVJZX1NFQVJDSF9ERUJVRwpAQCAtODQ4LDI1ICs4NzcsMjYgQEAKICAgICAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgICAgICAgZmluZF9saWJyYXJ5KEhERjVfJHtMSUJ9X0xJQlJBUllfREVCVUcKICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtUSElTX0xJQlJBUllfU0VBUkNIX0RFQlVHfQotICAgICAgICAgICAgICAgICAgICBISU5UUyAke0hERjVfUk9PVH0gUEFUSF9TVUZGSVhFUyBsaWIgTGliCisgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfSBQQVRIX1NVRkZJWEVTIGxpYiBMaWIgJHtfbGliX3N1ZmZpeGVzfQogICAgICAgICAgICAgICAgICAgICAke19IREY1X1NFQVJDSF9PUFRTfQogICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICBmaW5kX2xpYnJhcnkoIEhERjVfJHtMSUJ9X0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICAgICAgIGZpbmRfbGlicmFyeShIREY1XyR7TElCfV9MSUJSQVJZX1JFTEVBU0UKICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtUSElTX0xJQlJBUllfU0VBUkNIX1JFTEVBU0V9Ci0gICAgICAgICAgICAgICAgICAgIEhJTlRTICR7SERGNV9ST09UfSBQQVRIX1NVRkZJWEVTIGxpYiBMaWIKKyAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtIREY1X1JPT1R9IFBBVEhfU1VGRklYRVMgbGliIExpYiAke19saWJfc3VmZml4ZXN9CiAgICAgICAgICAgICAgICAgICAgICR7X0hERjVfU0VBUkNIX09QVFN9CiAgICAgICAgICAgICAgICAgKQorCiAgICAgICAgICAgICAgICAgc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMoIEhERjVfJHtMSUJ9ICkKLSAgICAgICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJJRVMgJHtIREY1XyR7TElCfV9MSUJSQVJZfSkKKyAgICAgICAgICAgICAgICBsaXN0KEFQUEVORCBIREY1XyR7X2xhbmd9X0hMX0xJQlJBUklFUyAke0hERjVfJHtMSUJ9X0xJQlJBUll9KQogICAgICAgICAgICAgZW5kZm9yZWFjaCgpCiAKICAgICAgICAgICAgICMgQXBwZW5kIHRoZSBsaWJyYXJpZXMgZm9yIHRoaXMgbGFuZ3VhZ2UgYmluZGluZyB0byB0aGUgbGlzdCBvZiBhbGwKICAgICAgICAgICAgICMgcmVxdWlyZWQgbGlicmFyaWVzLgotICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV9ITF9MSUJSQVJJRVMgJHtIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJJRVN9KQorICAgICAgICAgICAgbGlzdChBUFBFTkQgSERGNV9ITF9MSUJSQVJJRVMgJHtIREY1XyR7X2xhbmd9X0hMX0xJQlJBUklFU30pCiAgICAgICAgIGVuZGlmKCkKICAgICBlbmRmb3JlYWNoKCkKLSAgICBpZihGSU5EX0hMIEFORCBIREY1X0hMX0xJQlJBUklFUykKLSAgICAgICAgc2V0KEhERjVfSExfRk9VTkQgVHJ1ZSkKKyAgICBpZihIREY1X0ZJTkRfSEwgQU5EIEhERjVfSExfTElCUkFSSUVTKQorICAgICAgICBzZXQoSERGNV9ITF9GT1VORCBUUlVFKQogICAgIGVuZGlmKCkKIAogICAgIF9IREY1X3JlbW92ZV9kdXBsaWNhdGVzX2Zyb21fYmVnaW5uaW5nKEhERjVfREVGSU5JVElPTlMpCkBAIC05MDMsMTIgKzkzMywxNCBAQAogICAgICAgICBlbmRpZigpCiAgICAgICBlbmRmb3JlYWNoKCkKICAgICBlbmRmb3JlYWNoKCkKKyAgICB1bnNldChfaGRyKQorICAgIHVuc2V0KF9kaXIpCiAgICAgc2V0KCBIREY1X0lTX1BBUkFMTEVMICR7SERGNV9JU19QQVJBTExFTH0gQ0FDSEUgQk9PTAogICAgICAgICAiSERGNSBsaWJyYXJ5IGNvbXBpbGVkIHdpdGggcGFyYWxsZWwgSU8gc3VwcG9ydCIgKQogICAgIG1hcmtfYXNfYWR2YW5jZWQoIEhERjVfSVNfUEFSQUxMRUwgKQogCiAgICAgc2V0KEhERjVfUkVRVUlSRURfVkFSUyBIREY1X0xJQlJBUklFUyBIREY1X0lOQ0xVREVfRElSUykKLSAgICBpZihGSU5EX0hMKQorICAgIGlmKEhERjVfRklORF9ITCkKICAgICAgICAgbGlzdChBUFBFTkQgSERGNV9SRVFVSVJFRF9WQVJTIEhERjVfSExfTElCUkFSSUVTKQogICAgIGVuZGlmKCkKIGVuZGlmKCkKQEAgLTk0NiwxMyArOTc4LDE1IEBACiAgIG1lc3NhZ2UoU1RBVFVTICJIREY1X0lOQ0xVREVfRElSUzogJHtIREY1X0lOQ0xVREVfRElSU30iKQogICBtZXNzYWdlKFNUQVRVUyAiSERGNV9MSUJSQVJJRVM6ICR7SERGNV9MSUJSQVJJRVN9IikKICAgbWVzc2FnZShTVEFUVVMgIkhERjVfSExfTElCUkFSSUVTOiAke0hERjVfSExfTElCUkFSSUVTfSIpCi0gIGZvcmVhY2goX19sYW5nIElOIExJU1RTIEhERjVfTEFOR1VBR0VfQklORElOR1MpCi0gICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfX2xhbmd9X0RFRklOSVRJT05TOiAke0hERjVfJHtfX2xhbmd9X0RFRklOSVRJT05TfSIpCi0gICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfX2xhbmd9X0lOQ0xVREVfRElSOiAke0hERjVfJHtfX2xhbmd9X0lOQ0xVREVfRElSfSIpCi0gICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfX2xhbmd9X0lOQ0xVREVfRElSUzogJHtIREY1XyR7X19sYW5nfV9JTkNMVURFX0RJUlN9IikKLSAgICBtZXNzYWdlKFNUQVRVUyAiSERGNV8ke19fbGFuZ31fTElCUkFSWTogJHtIREY1XyR7X19sYW5nfV9MSUJSQVJZfSIpCi0gICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfX2xhbmd9X0xJQlJBUklFUzogJHtIREY1XyR7X19sYW5nfV9MSUJSQVJJRVN9IikKLSAgICBtZXNzYWdlKFNUQVRVUyAiSERGNV8ke19fbGFuZ31fSExfTElCUkFSWTogJHtIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJZfSIpCi0gICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfX2xhbmd9X0hMX0xJQlJBUklFUzogJHtIREY1XyR7X19sYW5nfV9ITF9MSUJSQVJJRVN9IikKKyAgZm9yZWFjaChfbGFuZyBJTiBMSVNUUyBIREY1X0xBTkdVQUdFX0JJTkRJTkdTKQorICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1XyR7X2xhbmd9X0RFRklOSVRJT05TOiAke0hERjVfJHtfbGFuZ31fREVGSU5JVElPTlN9IikKKyAgICBtZXNzYWdlKFNUQVRVUyAiSERGNV8ke19sYW5nfV9JTkNMVURFX0RJUjogJHtIREY1XyR7X2xhbmd9X0lOQ0xVREVfRElSfSIpCisgICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfbGFuZ31fSU5DTFVERV9ESVJTOiAke0hERjVfJHtfbGFuZ31fSU5DTFVERV9ESVJTfSIpCisgICAgbWVzc2FnZShTVEFUVVMgIkhERjVfJHtfbGFuZ31fTElCUkFSWTogJHtIREY1XyR7X2xhbmd9X0xJQlJBUll9IikKKyAgICBtZXNzYWdlKFNUQVRVUyAiSERGNV8ke19sYW5nfV9MSUJSQVJJRVM6ICR7SERGNV8ke19sYW5nfV9MSUJSQVJJRVN9IikKKyAgICBtZXNzYWdlKFNUQVRVUyAiSERGNV8ke19sYW5nfV9ITF9MSUJSQVJZOiAke0hERjVfJHtfbGFuZ31fSExfTElCUkFSWX0iKQorICAgIG1lc3NhZ2UoU1RBVFVTICJIREY1XyR7X2xhbmd9X0hMX0xJQlJBUklFUzogJHtIREY1XyR7X2xhbmd9X0hMX0xJQlJBUklFU30iKQogICBlbmRmb3JlYWNoKCkKIGVuZGlmKCkKK3Vuc2V0KF9sYW5nKQordW5zZXQoX0hERjVfTkVFRF9UT19TRUFSQ0gpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRJQ1UuY21ha2UgYi9Nb2R1bGVzL0ZpbmRJQ1UuY21ha2UKaW5kZXggMzgwODFmNS4uYzhiM2UxZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kSUNVLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZElDVS5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRJQ1UKIC0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIEZpbmQgdGhlIEludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgVW5pY29kZSAoSUNVKSBsaWJyYXJpZXMgYW5kCiBwcm9ncmFtcy4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kSWNlLmNtYWtlIGIvTW9kdWxlcy9GaW5kSWNlLmNtYWtlCmluZGV4IDVjZTJiNDIuLjBmODIxZTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEljZS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRJY2UuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kSWNlCiAtLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBGaW5kIHRoZSBaZXJvQyBJbnRlcm5ldCBDb21tdW5pY2F0aW9uIEVuZ2luZSAoSUNFKSBwcm9ncmFtcywKIGxpYnJhcmllcyBhbmQgZGF0YWZpbGVzLgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRJY29udi5jbWFrZSBiL01vZHVsZXMvRmluZEljb252LmNtYWtlCmluZGV4IGJmMjBmNmYuLjQxYjc1NTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEljb252LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEljb252LmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZEljb252CiAtLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMQorCiBUaGlzIG1vZHVsZSBmaW5kcyB0aGUgYGBpY29udigpYGAgUE9TSVguMSBmdW5jdGlvbnMgb24gdGhlIHN5c3RlbS4KIFRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSBwcm92aWRlZCBpbiB0aGUgcmVndWxhciBDIGxpYnJhcnkgb3IgZXh0ZXJuYWxseQogaW4gdGhlIGZvcm0gb2YgYW4gYWRkaXRpb25hbCBsaWJyYXJ5LgpAQCAtMTEwLDYgKzExMiw3IEBACiAKIGZpbmRfbGlicmFyeShJY29udl9MSUJSQVJZCiAgIE5BTUVTICR7SWNvbnZfTElCUkFSWV9OQU1FU30KKyAgTkFNRVNfUEVSX0RJUgogICBET0MgImljb252IGxpYnJhcnkgKHBvdGVudGlhbGx5IHRoZSBDIGxpYnJhcnkpIikKIAogbWFya19hc19hZHZhbmNlZChJY29udl9JTkNMVURFX0RJUikKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZEludGwuY21ha2UgYi9Nb2R1bGVzL0ZpbmRJbnRsLmNtYWtlCmluZGV4IDM4MThkNDUuLjFhMDlhNjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZEludGwuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kSW50bC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRJbnRsCiAtLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogRmluZCB0aGUgR2V0dGV4dCBsaWJpbnRsIGhlYWRlcnMgYW5kIGxpYnJhcmllcy4KIAogVGhpcyBtb2R1bGUgcmVwb3J0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgR2V0dGV4dCBsaWJpbnRsCkBAIC00MCw3ICs0Miw3IEBACiBtYXJrX2FzX2FkdmFuY2VkKEludGxfSU5DTFVERV9ESVIpCiAKICMgRmluZCBhbGwgSW50bCBsaWJyYXJpZXMKLWZpbmRfbGlicmFyeShJbnRsX0xJQlJBUlkgImludGwiCitmaW5kX2xpYnJhcnkoSW50bF9MSUJSQVJZICJpbnRsIiBOQU1FU19QRVJfRElSCiAgIERPQyAibGliaW50bCBsaWJyYXJpZXMgKGlmIG5vdCBpbiB0aGUgQyBsaWJyYXJ5KSIpCiBtYXJrX2FzX2FkdmFuY2VkKEludGxfTElCUkFSWSkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kSlBFRy5jbWFrZSBiL01vZHVsZXMvRmluZEpQRUcuY21ha2UKaW5kZXggMGJiNjk4OS4uNjMyZmM5YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kSlBFRy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRKUEVHLmNtYWtlCkBAIC01OCw4ICs1OCw4IEBACiBlbmRmb3JlYWNoKCkKIAogaWYoTk9UIEpQRUdfTElCUkFSWSkKLSAgZmluZF9saWJyYXJ5KEpQRUdfTElCUkFSWV9SRUxFQVNFIE5BTUVTICR7anBlZ19uYW1lc30pCi0gIGZpbmRfbGlicmFyeShKUEVHX0xJQlJBUllfREVCVUcgTkFNRVMgJHtqcGVnX25hbWVzX2RlYnVnfSkKKyAgZmluZF9saWJyYXJ5KEpQRUdfTElCUkFSWV9SRUxFQVNFIE5BTUVTICR7anBlZ19uYW1lc30gTkFNRVNfUEVSX0RJUikKKyAgZmluZF9saWJyYXJ5KEpQRUdfTElCUkFSWV9ERUJVRyBOQU1FUyAke2pwZWdfbmFtZXNfZGVidWd9IE5BTUVTX1BFUl9ESVIpCiAgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9TZWxlY3RMaWJyYXJ5Q29uZmlndXJhdGlvbnMuY21ha2UpCiAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKEpQRUcpCiAgIG1hcmtfYXNfYWR2YW5jZWQoSlBFR19MSUJSQVJZX1JFTEVBU0UgSlBFR19MSUJSQVJZX0RFQlVHKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kSmF2YS5jbWFrZSBiL01vZHVsZXMvRmluZEphdmEuY21ha2UKaW5kZXggOTQ1ZGYzYy4uOWRiNzQwYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kSmF2YS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRKYXZhLmNtYWtlCkBAIC0xNjAsOSArMTYwLDggQEAKICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCiAgICAgICBFUlJPUl9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQogICAgIGlmKCByZXMgKQotICAgICAgaWYodmFyIE1BVENIRVMgIk5vIEphdmEgcnVudGltZSBwcmVzZW50LCByZXF1ZXN0aW5nIGluc3RhbGwiKQotICAgICAgICBzZXRfcHJvcGVydHkoQ0FDSEUgSmF2YV9KQVZBX0VYRUNVVEFCTEUKLSAgICAgICAgICBQUk9QRVJUWSBWQUxVRSAiSmF2YV9KQVZBX0VYRUNVVEFCTEUtTk9URk9VTkQiKQorICAgICAgaWYodmFyIE1BVENIRVMgIlVuYWJsZSB0byBsb2NhdGUgYSBKYXZhIFJ1bnRpbWUgdG8gaW52b2tlfE5vIEphdmEgcnVudGltZSBwcmVzZW50LCByZXF1ZXN0aW5nIGluc3RhbGwiKQorICAgICAgICBzZXQoSmF2YV9KQVZBX0VYRUNVVEFCTEUgSmF2YV9KQVZBX0VYRUNVVEFCTEUtTk9URk9VTkQpCiAgICAgICBlbHNlaWYoJHtKYXZhX0ZJTkRfUkVRVUlSRUR9KQogICAgICAgICBtZXNzYWdlKCBGQVRBTF9FUlJPUiAiRXJyb3IgZXhlY3V0aW5nIGphdmEgLXZlcnNpb24iICkKICAgICAgIGVsc2UoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTEFQQUNLLmNtYWtlIGIvTW9kdWxlcy9GaW5kTEFQQUNLLmNtYWtlCmluZGV4IDNjYjM2NTMuLmY5OTZkNGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZExBUEFDSy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRMQVBBQ0suY21ha2UKQEAgLTcsMTAgKzcsMTAgQEAKIAogRmluZCBMaW5lYXIgQWxnZWJyYSBQQUNLYWdlIChMQVBBQ0spIGxpYnJhcnkKIAotVGhpcyBtb2R1bGUgZmluZHMgYW4gaW5zdGFsbGVkIGZvcnRyYW4gbGlicmFyeSB0aGF0IGltcGxlbWVudHMgdGhlCitUaGlzIG1vZHVsZSBmaW5kcyBhbiBpbnN0YWxsZWQgRm9ydHJhbiBsaWJyYXJ5IHRoYXQgaW1wbGVtZW50cyB0aGUKIExBUEFDSyBsaW5lYXItYWxnZWJyYSBpbnRlcmZhY2UgKHNlZSBodHRwOi8vd3d3Lm5ldGxpYi5vcmcvbGFwYWNrLykuCiAKLVRoZSBhcHByb2FjaCBmb2xsb3dzIHRoYXQgdGFrZW4gZm9yIHRoZSBhdXRvY29uZiBtYWNybyBmaWxlLAorVGhlIGFwcHJvYWNoIGZvbGxvd3MgdGhhdCB0YWtlbiBmb3IgdGhlIGBgYXV0b2NvbmZgYCBtYWNybyBmaWxlLAogYGBhY3hfbGFwYWNrLm00YGAgKGRpc3RyaWJ1dGVkIGF0CiBodHRwOi8vYWMtYXJjaGl2ZS5zb3VyY2Vmb3JnZS5uZXQvYWMtYXJjaGl2ZS9hY3hfbGFwYWNrLmh0bWwpLgogCkBAIC0yNiwyMSArMjYsMzQgQEAKICAgSWYgc2V0LCBjaGVja3Mgb25seSB0aGUgc3BlY2lmaWVkIHZlbmRvciwgaWYgbm90IHNldCBjaGVja3MgYWxsIHRoZQogICBwb3NzaWJpbGl0aWVzLiAgTGlzdCBvZiB2ZW5kb3JzIHZhbGlkIGluIHRoaXMgbW9kdWxlOgogCi0gICogYGBJbnRlbDEwXzMyYGAgKGludGVsIG1rbCB2MTAgMzIgYml0KQorICAqIGBgT3BlbkJMQVNgYAorICAqIGBgRkxBTUVgYAorICAqIGBgSW50ZWwxMF8zMmBgIChpbnRlbCBta2wgdjEwIDMyIGJpdCwgdGhyZWFkZWQgY29kZSkKICAgKiBgYEludGVsMTBfNjRscGBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHRocmVhZGVkIGNvZGUsIGxwNjQgbW9kZWwpCiAgICogYGBJbnRlbDEwXzY0bHBfc2VxYGAgKGludGVsIG1rbCB2MTArIDY0IGJpdCwgc2VxdWVudGlhbCBjb2RlLCBscDY0IG1vZGVsKQogICAqIGBgSW50ZWwxMF82NGlscGBgIChpbnRlbCBta2wgdjEwKyA2NCBiaXQsIHRocmVhZGVkIGNvZGUsIGlscDY0IG1vZGVsKQogICAqIGBgSW50ZWwxMF82NGlscF9zZXFgYCAoaW50ZWwgbWtsIHYxMCsgNjQgYml0LCBzZXF1ZW50aWFsIGNvZGUsIGlscDY0IG1vZGVsKQorICAqIGBgSW50ZWwxMF82NF9keW5gYCAoaW50ZWwgbWtsIHYxMCsgNjQgYml0LCBzaW5nbGUgZHluYW1pYyBsaWJyYXJ5KQogICAqIGBgSW50ZWxgYCAob2Jzb2xldGUgdmVyc2lvbnMgb2YgbWtsIDMyIGFuZCA2NCBiaXQpCi0gICogYGBPcGVuQkxBU2BgCi0gICogYGBGTEFNRWBgCiAgICogYGBBQ01MYGAKICAgKiBgYEFwcGxlYGAKICAgKiBgYE5BU2BgCisgICogYGBBcm1gYAorICAqIGBgQXJtX21wYGAKKyAgKiBgYEFybV9pbHA2NGBgCisgICogYGBBcm1faWxwNjRfbXBgYAogICAqIGBgR2VuZXJpY2BgCiAKIGBgQkxBX0Y5NWBgCi0gIGlmIGBgT05gYCB0cmllcyB0byBmaW5kIEJMQVM5NS9MQVBBQ0s5NQorICBpZiBgYE9OYGAgdHJpZXMgdG8gZmluZCB0aGUgQkxBUzk1L0xBUEFDSzk1IGludGVyZmFjZXMKKworSW1wb3J0ZWQgdGFyZ2V0cworXl5eXl5eXl5eXl5eXl5eXgorCitUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgOnByb3BfdGd0OmBJTVBPUlRFRGAgdGFyZ2V0OgorCitgYExBUEFDSzo6TEFQQUNLYGAKKyAgVGhlIGxpYnJhcmllcyB0byB1c2UgZm9yIExBUEFDSywgaWYgZm91bmQuCiAKIFJlc3VsdCBWYXJpYWJsZXMKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTUwLDcgKzYzLDcgQEAKIGBgTEFQQUNLX0ZPVU5EYGAKICAgbGlicmFyeSBpbXBsZW1lbnRpbmcgdGhlIExBUEFDSyBpbnRlcmZhY2UgaXMgZm91bmQKIGBgTEFQQUNLX0xJTktFUl9GTEFHU2BgCi0gIHVuY2FjaGVkIGxpc3Qgb2YgcmVxdWlyZWQgbGlua2VyIGZsYWdzIChleGNsdWRpbmcgLWwgYW5kIC1MKS4KKyAgdW5jYWNoZWQgbGlzdCBvZiByZXF1aXJlZCBsaW5rZXIgZmxhZ3MgKGV4Y2x1ZGluZyBgYC1sYGAgYW5kIGBgLUxgYCkuCiBgYExBUEFDS19MSUJSQVJJRVNgYAogICB1bmNhY2hlZCBsaXN0IG9mIGxpYnJhcmllcyAodXNpbmcgZnVsbCBwYXRoIG5hbWUpIHRvIGxpbmsgYWdhaW5zdAogICB0byB1c2UgTEFQQUNLCkBAIC02Miw3ICs3NSw4IEBACiAKIC4uIG5vdGU6OgogCi0gIEMgb3IgQ1hYIG11c3QgYmUgZW5hYmxlZCB0byB1c2UgSW50ZWwgTUtMCisgIEMsIENYWCBvciBGb3J0cmFuIG11c3QgYmUgZW5hYmxlZCB0byBkZXRlY3QgYSBCTEFTL0xBUEFDSyBsaWJyYXJ5LgorICBDIG9yIENYWCBtdXN0IGJlIGVuYWJsZWQgdG8gdXNlIEludGVsIE1hdGggS2VybmVsIExpYnJhcnkgKE1LTCkuCiAKICAgRm9yIGV4YW1wbGUsIHRvIHVzZSBJbnRlbCBNS0wgbGlicmFyaWVzIGFuZC9vciBJbnRlbCBjb21waWxlcjoKIApAQCAtNzIsMTAgKzg2LDggQEAKICAgICBmaW5kX3BhY2thZ2UoTEFQQUNLKQogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAotc2V0KF9sYXBhY2tfT1JJR19DTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQotCiAjIENoZWNrIHRoZSBsYW5ndWFnZSBiZWluZyB1c2VkCi1pZiggTk9UIChDTUFLRV9DX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9DWFhfQ09NUElMRVJfTE9BREVEIE9SIENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEKSApCitpZihOT1QgKENNQUtFX0NfQ09NUElMRVJfTE9BREVEIE9SIENNQUtFX0NYWF9DT01QSUxFUl9MT0FERUQgT1IgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9MT0FERUQpKQogICBpZihMQVBBQ0tfRklORF9SRVFVSVJFRCkKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGaW5kTEFQQUNLIHJlcXVpcmVzIEZvcnRyYW4sIEMsIG9yIEMrKyB0byBiZSBlbmFibGVkLiIpCiAgIGVsc2UoKQpAQCAtODQsMTEgKzk2LDExIEBACiAgIGVuZGlmKCkKIGVuZGlmKCkKIAotaWYgKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEKQotaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NoZWNrRm9ydHJhbkZ1bmN0aW9uRXhpc3RzLmNtYWtlKQotZWxzZSAoKQotaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NoZWNrRnVuY3Rpb25FeGlzdHMuY21ha2UpCi1lbmRpZiAoKQoraWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9MT0FERUQpCisgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DaGVja0ZvcnRyYW5GdW5jdGlvbkV4aXN0cy5jbWFrZSkKK2Vsc2UoKQorICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ2hlY2tGdW5jdGlvbkV4aXN0cy5jbWFrZSkKK2VuZGlmKCkKIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DTWFrZVB1c2hDaGVja1N0YXRlLmNtYWtlKQogCiBjbWFrZV9wdXNoX2NoZWNrX3N0YXRlKCkKQEAgLTk3LDI5MCArMTA5LDM3NyBAQAogc2V0KExBUEFDS19GT1VORCBGQUxTRSkKIHNldChMQVBBQ0s5NV9GT1VORCBGQUxTRSkKIAotIyBUT0RPOiBtb3ZlIHRoaXMgc3R1ZmYgdG8gc2VwYXJhdGUgbW9kdWxlCi0KLW1hY3JvKENoZWNrX0xhcGFja19MaWJyYXJpZXMgTElCUkFSSUVTIF9wcmVmaXggX25hbWUgX2ZsYWdzIF9saXN0IF9ibGFzIF90aHJlYWRzKQotIyBUaGlzIG1hY3JvIGNoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgY29tYmluYXRpb24gb2YgZm9ydHJhbiBsaWJyYXJpZXMKLSMgZ2l2ZW4gYnkgX2xpc3QuICBJZiB0aGUgY29tYmluYXRpb24gaXMgZm91bmQsIHRoaXMgbWFjcm8gY2hlY2tzICh1c2luZyB0aGUKLSMgQ2hlY2tfRm9ydHJhbl9GdW5jdGlvbl9FeGlzdHMgbWFjcm8pIHdoZXRoZXIgY2FuIGxpbmsgYWdhaW5zdCB0aGF0IGxpYnJhcnkKLSMgY29tYmluYXRpb24gdXNpbmcgdGhlIG5hbWUgb2YgYSByb3V0aW5lIGdpdmVuIGJ5IF9uYW1lIHVzaW5nIHRoZSBsaW5rZXIKLSMgZmxhZ3MgZ2l2ZW4gYnkgX2ZsYWdzLiAgSWYgdGhlIGNvbWJpbmF0aW9uIG9mIGxpYnJhcmllcyBpcyBmb3VuZCBhbmQgcGFzc2VzCi0jIHRoZSBsaW5rIHRlc3QsIExJQlJBUklFUyBpcyBzZXQgdG8gdGhlIGxpc3Qgb2YgY29tcGxldGUgbGlicmFyeSBwYXRocyB0aGF0Ci0jIGhhdmUgYmVlbiBmb3VuZC4gIE90aGVyd2lzZSwgTElCUkFSSUVTIGlzIHNldCB0byBGQUxTRS4KLQotIyBOLkIuIF9wcmVmaXggaXMgdGhlIHByZWZpeCBhcHBsaWVkIHRvIHRoZSBuYW1lcyBvZiBhbGwgY2FjaGVkIHZhcmlhYmxlcyB0aGF0Ci0jIGFyZSBnZW5lcmF0ZWQgaW50ZXJuYWxseSBhbmQgbWFya2VkIGFkdmFuY2VkIGJ5IHRoaXMgbWFjcm8uCi0KLXNldChfbGlicmFyaWVzX3dvcmsgVFJVRSkKLXNldCgke0xJQlJBUklFU30pCi1zZXQoX2NvbWJpbmVkX25hbWUpCi1pZiAoTk9UIF9saWJkaXIpCi0gIGlmIChXSU4zMikKLSAgICBzZXQoX2xpYmRpciBFTlYgTElCKQotICBlbHNlaWYgKEFQUExFKQotICAgIHNldChfbGliZGlyIEVOViBEWUxEX0xJQlJBUllfUEFUSCkKLSAgZWxzZSAoKQotICAgIHNldChfbGliZGlyIEVOViBMRF9MSUJSQVJZX1BBVEgpCi0gIGVuZGlmICgpCi1lbmRpZiAoKQotCi1saXN0KEFQUEVORCBfbGliZGlyICIke0NNQUtFX0NfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30iKQotCi1mb3JlYWNoKF9saWJyYXJ5ICR7X2xpc3R9KQotICBzZXQoX2NvbWJpbmVkX25hbWUgJHtfY29tYmluZWRfbmFtZX1fJHtfbGlicmFyeX0pCi0KLSAgaWYoX2xpYnJhcmllc193b3JrKQotICAgIGlmIChCTEFfU1RBVElDKQotICAgICAgaWYgKFdJTjMyKQotICAgICAgICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTIC5saWIgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQotICAgICAgZW5kaWYgKCkKLSAgICAgIGlmIChBUFBMRSkKLSAgICAgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAubGliICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKLSAgICAgIGVsc2UgKCkKLSAgICAgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAuYSAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30pCi0gICAgICBlbmRpZiAoKQotICAgIGVsc2UgKCkKLSAgICAgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQotICAgICAgICAjIGZvciB1YnVudHUncyBsaWJibGFzM2dmIGFuZCBsaWJsYXBhY2szZ2YgcGFja2FnZXMKLSAgICAgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30gLnNvLjNnZikKLSAgICAgIGVuZGlmICgpCi0gICAgZW5kaWYgKCkKLSAgICBmaW5kX2xpYnJhcnkoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZCi0gICAgICBOQU1FUyAke19saWJyYXJ5fQotICAgICAgUEFUSFMgJHtfbGliZGlyfQotICAgICAgKQotICAgIG1hcmtfYXNfYWR2YW5jZWQoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZKQotICAgIHNldCgke0xJQlJBUklFU30gJHske0xJQlJBUklFU319ICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSkKLSAgICBzZXQoX2xpYnJhcmllc193b3JrICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSkKLSAgZW5kaWYoKQotZW5kZm9yZWFjaCgpCi0KLWlmKF9saWJyYXJpZXNfd29yaykKLSAgIyBUZXN0IHRoaXMgY29tYmluYXRpb24gb2YgbGlicmFyaWVzLgotICBpZihVTklYIEFORCBCTEFfU1RBVElDKQotICAgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtfZmxhZ3N9ICItV2wsLS1zdGFydC1ncm91cCIgJHske0xJQlJBUklFU319ICR7X2JsYXN9ICItV2wsLS1lbmQtZ3JvdXAiICR7X3RocmVhZHN9KQorc2V0KF9sYXBhY2tfT1JJR19DTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQoraWYoQkxBX1NUQVRJQykKKyAgaWYoV0lOMzIpCisgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAubGliICR7Q01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTfSkKICAgZWxzZSgpCi0gICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke19mbGFnc30gJHske0xJQlJBUklFU319ICR7X2JsYXN9ICR7X3RocmVhZHN9KQorICAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgLmEgJHtDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQogICBlbmRpZigpCi0jICBtZXNzYWdlKCJERUJVRzogQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTID0gJHtDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVN9IikKLSAgaWYgKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkKLSAgICBjaGVja19mdW5jdGlvbl9leGlzdHMoIiR7X25hbWV9XyIgJHtfcHJlZml4fSR7X2NvbWJpbmVkX25hbWV9X1dPUktTKQotICBlbHNlICgpCi0gICAgY2hlY2tfZm9ydHJhbl9mdW5jdGlvbl9leGlzdHMoJHtfbmFtZX0gJHtfcHJlZml4fSR7X2NvbWJpbmVkX25hbWV9X1dPUktTKQotICBlbmRpZiAoKQotICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTKQotICBzZXQoX2xpYnJhcmllc193b3JrICR7JHtfcHJlZml4fSR7X2NvbWJpbmVkX25hbWV9X1dPUktTfSkKLSAgI21lc3NhZ2UoIkRFQlVHOiAke0xJQlJBUklFU30gPSAkeyR7TElCUkFSSUVTfX0iKQorZWxzZSgpCisgIGlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJMaW51eCIpCisgICAgIyBmb3IgdWJ1bnR1J3MgbGliYmxhczNnZiBhbmQgbGlibGFwYWNrM2dmIHBhY2thZ2VzCisgICAgc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFU30gLnNvLjNnZikKKyAgZW5kaWYoKQogZW5kaWYoKQogCi0gaWYoX2xpYnJhcmllc193b3JrKQotICAgaWYoIiR7X2xpc3R9JHtfYmxhc30iIFNUUkVRVUFMICIiKQotICAgICBzZXQoJHtMSUJSQVJJRVN9ICIke0xJQlJBUklFU30tUExBQ0VIT0xERVItRk9SLUVNUFRZLUxJQlJBUklFUyIpCi0gICBlbHNlKCkKLSAgICAgc2V0KCR7TElCUkFSSUVTfSAkeyR7TElCUkFSSUVTfX0gJHtfYmxhc30gJHtfdGhyZWFkc30pCi0gICBlbmRpZigpCi0gZWxzZSgpCisjIFRPRE86IG1vdmUgdGhpcyBzdHVmZiB0byBhIHNlcGFyYXRlIG1vZHVsZQorCittYWNybyhDSEVDS19MQVBBQ0tfTElCUkFSSUVTIExJQlJBUklFUyBfcHJlZml4IF9uYW1lIF9mbGFncyBfbGlzdCBfdGhyZWFkbGlicyBfYWRkbGliZGlyIF9zdWJkaXJzIF9ibGFzKQorICAjIFRoaXMgbWFjcm8gY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBjb21iaW5hdGlvbiBvZiBmb3J0cmFuIGxpYnJhcmllcworICAjIGdpdmVuIGJ5IF9saXN0LiAgSWYgdGhlIGNvbWJpbmF0aW9uIGlzIGZvdW5kLCB0aGlzIG1hY3JvIGNoZWNrcyAodXNpbmcgdGhlCisgICMgQ2hlY2tfRm9ydHJhbl9GdW5jdGlvbl9FeGlzdHMgbWFjcm8pIHdoZXRoZXIgY2FuIGxpbmsgYWdhaW5zdCB0aGF0IGxpYnJhcnkKKyAgIyBjb21iaW5hdGlvbiB1c2luZyB0aGUgbmFtZSBvZiBhIHJvdXRpbmUgZ2l2ZW4gYnkgX25hbWUgdXNpbmcgdGhlIGxpbmtlcgorICAjIGZsYWdzIGdpdmVuIGJ5IF9mbGFncy4gIElmIHRoZSBjb21iaW5hdGlvbiBvZiBsaWJyYXJpZXMgaXMgZm91bmQgYW5kIHBhc3NlcworICAjIHRoZSBsaW5rIHRlc3QsIExJQlJBUklFUyBpcyBzZXQgdG8gdGhlIGxpc3Qgb2YgY29tcGxldGUgbGlicmFyeSBwYXRocyB0aGF0CisgICMgaGF2ZSBiZWVuIGZvdW5kLiAgT3RoZXJ3aXNlLCBMSUJSQVJJRVMgaXMgc2V0IHRvIEZBTFNFLgorCisgICMgTi5CLiBfcHJlZml4IGlzIHRoZSBwcmVmaXggYXBwbGllZCB0byB0aGUgbmFtZXMgb2YgYWxsIGNhY2hlZCB2YXJpYWJsZXMgdGhhdAorICAjIGFyZSBnZW5lcmF0ZWQgaW50ZXJuYWxseSBhbmQgbWFya2VkIGFkdmFuY2VkIGJ5IHRoaXMgbWFjcm8uCisgICMgX2FkZGxpYmRpciBpcyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzZWFyY2ggcGF0aHMuIF9zdWJkaXJzIGlzIGEgbGlzdCBvZiBwYXRoCisgICMgc3VmZml4ZXMgdG8gYmUgdXNlZCBieSBmaW5kX2xpYnJhcnkoKS4KKworICBzZXQoX2xpYnJhcmllc193b3JrIFRSVUUpCisgIHNldCgke0xJQlJBUklFU30pCisgIHNldChfY29tYmluZWRfbmFtZSkKKworICBzZXQoX2V4dGFkZGxpYmRpciAiJHtfYWRkbGliZGlyfSIpCisgIGlmKFdJTjMyKQorICAgIGxpc3QoQVBQRU5EIF9leHRhZGRsaWJkaXIgRU5WIExJQikKKyAgZWxzZWlmKEFQUExFKQorICAgIGxpc3QoQVBQRU5EIF9leHRhZGRsaWJkaXIgRU5WIERZTERfTElCUkFSWV9QQVRIKQorICBlbHNlKCkKKyAgICBsaXN0KEFQUEVORCBfZXh0YWRkbGliZGlyIEVOViBMRF9MSUJSQVJZX1BBVEgpCisgIGVuZGlmKCkKKyAgbGlzdChBUFBFTkQgX2V4dGFkZGxpYmRpciAiJHtDTUFLRV9DX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9IikKKworICBmb3JlYWNoKF9saWJyYXJ5ICR7X2xpc3R9KQorICAgIGlmKF9saWJyYXJ5IE1BVENIRVMgIl4tV2wsLS0oc3RhcnR8ZW5kKS1ncm91cCQiKQorICAgICAgIyBSZXNwZWN0IGxpbmtlciBmbGFncyBsaWtlIC0tc3RhcnQvZW5kLWdyb3VwIChyZXF1aXJlZCBieSBNS0wpCisgICAgICBzZXQoJHtMSUJSQVJJRVN9ICR7JHtMSUJSQVJJRVN9fSAiJHtfbGlicmFyeX0iKQorICAgIGVsc2UoKQorICAgICAgc2V0KF9jb21iaW5lZF9uYW1lICR7X2NvbWJpbmVkX25hbWV9XyR7X2xpYnJhcnl9KQorICAgICAgaWYoX2xpYnJhcmllc193b3JrKQorICAgICAgICBmaW5kX2xpYnJhcnkoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZCisgICAgICAgICAgTkFNRVMgJHtfbGlicmFyeX0KKyAgICAgICAgICBOQU1FU19QRVJfRElSCisgICAgICAgICAgUEFUSFMgJHtfZXh0YWRkbGliZGlyfQorICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfc3ViZGlyc30KKyAgICAgICAgKQorICAgICAgICAjbWVzc2FnZSgiREVCVUc6IGZpbmRfbGlicmFyeSgke19saWJyYXJ5fSkgZ290ICR7JHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZfSIpCisgICAgICAgIG1hcmtfYXNfYWR2YW5jZWQoJHtfcHJlZml4fV8ke19saWJyYXJ5fV9MSUJSQVJZKQorICAgICAgICBzZXQoJHtMSUJSQVJJRVN9ICR7JHtMSUJSQVJJRVN9fSAkeyR7X3ByZWZpeH1fJHtfbGlicmFyeX1fTElCUkFSWX0pCisgICAgICAgIHNldChfbGlicmFyaWVzX3dvcmsgJHske19wcmVmaXh9XyR7X2xpYnJhcnl9X0xJQlJBUll9KQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYoX2xpYnJhcmllc193b3JrKQorICAgICMgVGVzdCB0aGlzIGNvbWJpbmF0aW9uIG9mIGxpYnJhcmllcy4KKyAgICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICR7X2ZsYWdzfSAkeyR7TElCUkFSSUVTfX0gJHtfYmxhc30gJHtfdGhyZWFkbGlic30pCisgICAgI21lc3NhZ2UoIkRFQlVHOiBDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgPSAke0NNQUtFX1JFUVVJUkVEX0xJQlJBUklFU30iKQorICAgIGlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfTE9BREVEKQorICAgICAgY2hlY2tfZm9ydHJhbl9mdW5jdGlvbl9leGlzdHMoIiR7X25hbWV9IiAke19wcmVmaXh9JHtfY29tYmluZWRfbmFtZX1fV09SS1MpCisgICAgZWxzZSgpCisgICAgICBjaGVja19mdW5jdGlvbl9leGlzdHMoIiR7X25hbWV9XyIgJHtfcHJlZml4fSR7X2NvbWJpbmVkX25hbWV9X1dPUktTKQorICAgIGVuZGlmKCkKKyAgICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTKQorICAgIHNldChfbGlicmFyaWVzX3dvcmsgJHske19wcmVmaXh9JHtfY29tYmluZWRfbmFtZX1fV09SS1N9KQorICBlbmRpZigpCisKKyAgaWYoX2xpYnJhcmllc193b3JrKQorICAgIGlmKCIke19saXN0fSR7X2JsYXN9IiBTVFJFUVVBTCAiIikKKyAgICAgIHNldCgke0xJQlJBUklFU30gIiR7TElCUkFSSUVTfS1QTEFDRUhPTERFUi1GT1ItRU1QVFktTElCUkFSSUVTIikKKyAgICBlbHNlKCkKKyAgICAgIHNldCgke0xJQlJBUklFU30gJHske0xJQlJBUklFU319ICR7X2JsYXN9ICR7X3RocmVhZGxpYnN9KQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCiAgICAgc2V0KCR7TElCUkFSSUVTfSBGQUxTRSkKLSBlbmRpZigpCi0KKyAgZW5kaWYoKQorICAjbWVzc2FnZSgiREVCVUc6ICR7TElCUkFSSUVTfSA9ICR7JHtMSUJSQVJJRVN9fSIpCiBlbmRtYWNybygpCiAKLQogc2V0KExBUEFDS19MSU5LRVJfRkxBR1MpCiBzZXQoTEFQQUNLX0xJQlJBUklFUykKIHNldChMQVBBQ0s5NV9MSUJSQVJJRVMpCiAKLQogaWYoTEFQQUNLX0ZJTkRfUVVJRVRMWSBPUiBOT1QgTEFQQUNLX0ZJTkRfUkVRVUlSRUQpCiAgIGZpbmRfcGFja2FnZShCTEFTKQogZWxzZSgpCiAgIGZpbmRfcGFja2FnZShCTEFTIFJFUVVJUkVEKQogZW5kaWYoKQogCi0KIGlmKEJMQVNfRk9VTkQpCiAgIHNldChMQVBBQ0tfTElOS0VSX0ZMQUdTICR7QkxBU19MSU5LRVJfRkxBR1N9KQotICBpZiAoTk9UICRFTlZ7QkxBX1ZFTkRPUn0gU1RSRVFVQUwgIiIpCisgIGlmKE5PVCAkRU5We0JMQV9WRU5ET1J9IFNUUkVRVUFMICIiKQogICAgIHNldChCTEFfVkVORE9SICRFTlZ7QkxBX1ZFTkRPUn0pCi0gIGVsc2UgKCkKKyAgZWxzZSgpCiAgICAgaWYoTk9UIEJMQV9WRU5ET1IpCiAgICAgICBzZXQoQkxBX1ZFTkRPUiAiQWxsIikKICAgICBlbmRpZigpCi0gIGVuZGlmICgpCisgIGVuZGlmKCkKIAotI2ludGVsIGxhcGFjawotaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiSW50ZWwiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCi0gIGlmKE5PVCBMQVBBQ0tfTElCUkFSSUVTKQotICBpZiAoTk9UIFdJTjMyKQotICAgIHNldChMQVBBQ0tfbWtsX0xNICItbG0iKQotICAgIHNldChMQVBBQ0tfbWtsX0xETCAiLWxkbCIpCi0gIGVuZGlmICgpCi0gIGlmIChDTUFLRV9DX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9DWFhfQ09NUElMRVJfTE9BREVEKQotICAgIGlmKExBUEFDS19GSU5EX1FVSUVUTFkgT1IgTk9UIExBUEFDS19GSU5EX1JFUVVJUkVEKQotICAgICAgZmluZF9QQUNLQUdFKFRocmVhZHMpCi0gICAgZWxzZSgpCi0gICAgICBmaW5kX3BhY2thZ2UoVGhyZWFkcyBSRVFVSVJFRCkKLSAgICBlbmRpZigpCisgICMgTEFQQUNLIGluIHRoZSBJbnRlbCBNS0wgMTArIGxpYnJhcnk/CisgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiSW50ZWwiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgaWYoTk9UIExBUEFDS19MSUJSQVJJRVMpCisgICAgICBpZihDTUFLRV9DX0NPTVBJTEVSX0xPQURFRCBPUiBDTUFLRV9DWFhfQ09NUElMRVJfTE9BREVEKQorICAgICAgICAjIFN5c3RlbS1zcGVjaWZpYyBzZXR0aW5ncworICAgICAgICBpZihOT1QgV0lOMzIpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfTE0gIi1sbSIpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfTERMICItbGRsIikKKyAgICAgICAgZW5kaWYoKQogCi0gICAgaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiXzY0aWxwIikKLSAgICAgIHNldChMQVBBQ0tfbWtsX0lMUF9NT0RFICJpbHA2NCIpCi0gICAgZWxzZSAoKQotICAgICAgc2V0KExBUEFDS19ta2xfSUxQX01PREUgImxwNjQiKQotICAgIGVuZGlmICgpCisgICAgICAgIGlmKExBUEFDS19GSU5EX1FVSUVUTFkgT1IgTk9UIExBUEFDS19GSU5EX1JFUVVJUkVEKQorICAgICAgICAgIGZpbmRfcGFja2FnZShUaHJlYWRzKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBmaW5kX3BhY2thZ2UoVGhyZWFkcyBSRVFVSVJFRCkKKyAgICAgICAgZW5kaWYoKQogCi0gICAgc2V0KExBUEFDS19TRUFSQ0hfTElCUyAiIikKKyAgICAgICAgaWYoQkxBX1ZFTkRPUiBNQVRDSEVTICJfNjRpbHAiKQorICAgICAgICAgIHNldChMQVBBQ0tfbWtsX0lMUF9NT0RFICJpbHA2NCIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHNldChMQVBBQ0tfbWtsX0lMUF9NT0RFICJscDY0IikKKyAgICAgICAgZW5kaWYoKQogCi0gICAgaWYgKEJMQV9GOTUpCi0gICAgICBzZXQoTEFQQUNLX21rbF9TRUFSQ0hfU1lNQk9MICJjaGVldl9mOTUiKQotICAgICAgc2V0KF9MSUJSQVJJRVMgTEFQQUNLOTVfTElCUkFSSUVTKQotICAgICAgc2V0KF9CTEFTX0xJQlJBUklFUyAke0JMQVM5NV9MSUJSQVJJRVN9KQorICAgICAgICBzZXQoTEFQQUNLX1NFQVJDSF9MSUJTICIiKQogCi0gICAgICAjIG9sZAotICAgICAgbGlzdChBUFBFTkQgTEFQQUNLX1NFQVJDSF9MSUJTCi0gICAgICAgICJta2xfbGFwYWNrOTUiKQotICAgICAgIyBuZXcgPj0gMTAuMwotICAgICAgbGlzdChBUFBFTkQgTEFQQUNLX1NFQVJDSF9MSUJTCi0gICAgICAgICJta2xfaW50ZWxfYyIpCi0gICAgICBsaXN0KEFQUEVORCBMQVBBQ0tfU0VBUkNIX0xJQlMKLSAgICAgICAgIm1rbF9sYXBhY2s5NV8ke0xBUEFDS19ta2xfSUxQX01PREV9IikKLSAgICBlbHNlKCkKLSAgICAgIHNldChMQVBBQ0tfbWtsX1NFQVJDSF9TWU1CT0wgImNoZWV2IikKLSAgICAgIHNldChfTElCUkFSSUVTIExBUEFDS19MSUJSQVJJRVMpCi0gICAgICBzZXQoX0JMQVNfTElCUkFSSUVTICR7QkxBU19MSUJSQVJJRVN9KQorICAgICAgICBpZihCTEFfRjk1KQorICAgICAgICAgIHNldChMQVBBQ0tfbWtsX1NFQVJDSF9TWU1CT0wgImNoZWV2X2Y5NSIpCisgICAgICAgICAgc2V0KF9MSUJSQVJJRVMgTEFQQUNLOTVfTElCUkFSSUVTKQorICAgICAgICAgIHNldChfQkxBU19MSUJSQVJJRVMgJHtCTEFTOTVfTElCUkFSSUVTfSkKIAotICAgICAgIyBvbGQKLSAgICAgIGxpc3QoQVBQRU5EIExBUEFDS19TRUFSQ0hfTElCUwotICAgICAgICAibWtsX2xhcGFjayIpCi0gICAgZW5kaWYoKQorICAgICAgICAgICMgb2xkCisgICAgICAgICAgbGlzdChBUFBFTkQgTEFQQUNLX1NFQVJDSF9MSUJTCisgICAgICAgICAgICAibWtsX2xhcGFjazk1IikKKyAgICAgICAgICAjIG5ldyA+PSAxMC4zCisgICAgICAgICAgbGlzdChBUFBFTkQgTEFQQUNLX1NFQVJDSF9MSUJTCisgICAgICAgICAgICAibWtsX2ludGVsX2MiKQorICAgICAgICAgIGxpc3QoQVBQRU5EIExBUEFDS19TRUFSQ0hfTElCUworICAgICAgICAgICAgIm1rbF9sYXBhY2s5NV8ke0xBUEFDS19ta2xfSUxQX01PREV9IikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfU0VBUkNIX1NZTUJPTCAiY2hlZXYiKQorICAgICAgICAgIHNldChfTElCUkFSSUVTIExBUEFDS19MSUJSQVJJRVMpCisgICAgICAgICAgc2V0KF9CTEFTX0xJQlJBUklFUyAke0JMQVNfTElCUkFSSUVTfSkKIAotICAgICMgRmlyc3QgdHJ5IGVtcHR5IGxhcGFjayBsaWJzCi0gICAgaWYgKE5PVCAke19MSUJSQVJJRVN9KQotICAgICAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKLSAgICAgICAgJHtfTElCUkFSSUVTfQotICAgICAgICBMQVBBQ0sKLSAgICAgICAgJHtMQVBBQ0tfbWtsX1NFQVJDSF9TWU1CT0x9Ci0gICAgICAgICIiCi0gICAgICAgICIiCi0gICAgICAgICIke19CTEFTX0xJQlJBUklFU30iCi0gICAgICAgICIiCi0gICAgICAgICkKLSAgICBlbmRpZiAoKQotICAgICMgVGhlbiB0cnkgdGhlIHNlYXJjaCBsaWJzCi0gICAgZm9yZWFjaCAoSVQgJHtMQVBBQ0tfU0VBUkNIX0xJQlN9KQotICAgICAgaWYgKE5PVCAke19MSUJSQVJJRVN9KQotICAgICAgICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAotICAgICAgICAgICR7X0xJQlJBUklFU30KLSAgICAgICAgICBMQVBBQ0sKLSAgICAgICAgICAke0xBUEFDS19ta2xfU0VBUkNIX1NZTUJPTH0KLSAgICAgICAgICAiIgotICAgICAgICAgICIke0lUfSIKLSAgICAgICAgICAiJHtfQkxBU19MSUJSQVJJRVN9IgotICAgICAgICAgICIke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9OyR7TEFQQUNLX21rbF9MTX07JHtMQVBBQ0tfbWtsX0xETH0iCisgICAgICAgICAgIyBvbGQgYW5kIG5ldyA+PSAxMC4zCisgICAgICAgICAgbGlzdChBUFBFTkQgTEFQQUNLX1NFQVJDSF9MSUJTCisgICAgICAgICAgICAibWtsX2xhcGFjayIpCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICAjIE1LTCB1c2VzIGEgbXVsdGl0dWRlIG9mIHBhcnRpYWxseSBwbGF0Zm9ybS1zcGVjaWZpYyBzdWJkaXJlY3RvcmllczoKKyAgICAgICAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiSW50ZWwxMF8zMiIpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfQVJDSF9OQU1FICJpYTMyIikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfQVJDSF9OQU1FICJpbnRlbDY0IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBpZihXSU4zMikKKyAgICAgICAgICBzZXQoTEFQQUNLX21rbF9PU19OQU1FICJ3aW4iKQorICAgICAgICBlbHNlaWYoQVBQTEUpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfT1NfTkFNRSAibWFjIikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KExBUEFDS19ta2xfT1NfTkFNRSAibGluIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBpZihERUZJTkVEIEVOVntNS0xST09UfSkKKyAgICAgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7TUtMUk9PVH0iIExBUEFDS19ta2xfTUtMUk9PVCkKKyAgICAgICAgICAjIElmIE1LTFJPT1QgcG9pbnRzIHRvIHRoZSBzdWJkaXJlY3RvcnkgJ21rbCcsIHVzZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBpbnN0ZWFkCisgICAgICAgICAgIyBzbyB3ZSBjYW4gYmV0dGVyIGRldGVjdCBvdGhlciByZWxldmFudCBsaWJyYXJpZXMgaW4gJ2NvbXBpbGVyJyBvciAndGJiJzoKKyAgICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KExBUEFDS19ta2xfTUtMUk9PVF9MQVNUX0RJUiAiJHtMQVBBQ0tfbWtsX01LTFJPT1R9IiBOQU1FKQorICAgICAgICAgIGlmKExBUEFDS19ta2xfTUtMUk9PVF9MQVNUX0RJUiBTVFJFUVVBTCAibWtsIikKKyAgICAgICAgICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChMQVBBQ0tfbWtsX01LTFJPT1QgIiR7TEFQQUNLX21rbF9NS0xST09UfSIgRElSRUNUT1JZKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBzZXQoTEFQQUNLX21rbF9MSUJfUEFUSF9TVUZGSVhFUworICAgICAgICAgICAgImNvbXBpbGVyL2xpYiIgImNvbXBpbGVyL2xpYi8ke0xBUEFDS19ta2xfQVJDSF9OQU1FfV8ke0xBUEFDS19ta2xfT1NfTkFNRX0iCisgICAgICAgICAgICAiY29tcGlsZXIvbGliLyR7TEFQQUNLX21rbF9BUkNIX05BTUV9IgorICAgICAgICAgICAgIm1rbC9saWIiICJta2wvbGliLyR7TEFQQUNLX21rbF9BUkNIX05BTUV9XyR7TEFQQUNLX21rbF9PU19OQU1FfSIKKyAgICAgICAgICAgICJta2wvbGliLyR7TEFQQUNLX21rbF9BUkNIX05BTUV9IgorICAgICAgICAgICAgImxpYi8ke0xBUEFDS19ta2xfQVJDSF9OQU1FfV8ke0xBUEFDS19ta2xfT1NfTkFNRX0iKQorCisgICAgICAgICMgRmlyc3QgdHJ5IGVtcHR5IGxhcGFjayBsaWJzCisgICAgICAgIGlmKE5PVCAke19MSUJSQVJJRVN9KQorICAgICAgICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCisgICAgICAgICAgICAke19MSUJSQVJJRVN9CisgICAgICAgICAgICBMQVBBQ0sKKyAgICAgICAgICAgICR7TEFQQUNLX21rbF9TRUFSQ0hfU1lNQk9MfQorICAgICAgICAgICAgIiIKKyAgICAgICAgICAgICIiCisgICAgICAgICAgICAiJHtDTUFLRV9USFJFQURfTElCU19JTklUfTske0xBUEFDS19ta2xfTE19OyR7TEFQQUNLX21rbF9MREx9IgorICAgICAgICAgICAgIiR7TEFQQUNLX21rbF9NS0xST09UfSIKKyAgICAgICAgICAgICIke0xBUEFDS19ta2xfTElCX1BBVEhfU1VGRklYRVN9IgorICAgICAgICAgICAgIiR7X0JMQVNfTElCUkFSSUVTfSIKICAgICAgICAgICApCi0gICAgICBlbmRpZiAoKQotICAgIGVuZGZvcmVhY2ggKCkKKyAgICAgICAgZW5kaWYoKQogCi0gICAgdW5zZXQoTEFQQUNLX21rbF9JTFBfTU9ERSkKLSAgICB1bnNldChMQVBBQ0tfbWtsX1NFQVJDSF9TWU1CT0wpCi0gICAgdW5zZXQoTEFQQUNLX21rbF9MTSkKLSAgICB1bnNldChMQVBBQ0tfbWtsX0xETCkKLSAgZW5kaWYgKCkKKyAgICAgICAgIyBUaGVuIHRyeSB0aGUgc2VhcmNoIGxpYnMKKyAgICAgICAgZm9yZWFjaChJVCAke0xBUEFDS19TRUFSQ0hfTElCU30pCisgICAgICAgICAgc3RyaW5nKFJFUExBQ0UgIiAiICI7IiBTRUFSQ0hfTElCUyAke0lUfSkKKyAgICAgICAgICBpZihOT1QgJHtfTElCUkFSSUVTfSkKKyAgICAgICAgICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCisgICAgICAgICAgICAgICR7X0xJQlJBUklFU30KKyAgICAgICAgICAgICAgTEFQQUNLCisgICAgICAgICAgICAgICR7TEFQQUNLX21rbF9TRUFSQ0hfU1lNQk9MfQorICAgICAgICAgICAgICAiIgorICAgICAgICAgICAgICAiJHtTRUFSQ0hfTElCU30iCisgICAgICAgICAgICAgICIke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9OyR7TEFQQUNLX21rbF9MTX07JHtMQVBBQ0tfbWtsX0xETH0iCisgICAgICAgICAgICAgICIke0xBUEFDS19ta2xfTUtMUk9PVH0iCisgICAgICAgICAgICAgICIke0xBUEFDS19ta2xfTElCX1BBVEhfU1VGRklYRVN9IgorICAgICAgICAgICAgICAiJHtfQkxBU19MSUJSQVJJRVN9IgorICAgICAgICAgICAgKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kZm9yZWFjaCgpCisKKyAgICAgICAgdW5zZXQoTEFQQUNLX21rbF9JTFBfTU9ERSkKKyAgICAgICAgdW5zZXQoTEFQQUNLX21rbF9TRUFSQ0hfU1lNQk9MKQorICAgICAgICB1bnNldChMQVBBQ0tfbWtsX0xNKQorICAgICAgICB1bnNldChMQVBBQ0tfbWtsX0xETCkKKyAgICAgICAgdW5zZXQoTEFQQUNLX21rbF9NS0xST09UKQorICAgICAgICB1bnNldChMQVBBQ0tfbWtsX0FSQ0hfTkFNRSkKKyAgICAgICAgdW5zZXQoTEFQQUNLX21rbF9PU19OQU1FKQorICAgICAgICB1bnNldChMQVBBQ0tfbWtsX0xJQl9QQVRIX1NVRkZJWEVTKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKICAgZW5kaWYoKQotZW5kaWYoKQogCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiR290byIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKLSBpZihOT1QgTEFQQUNLX0xJQlJBUklFUykKLSAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKLSAgTEFQQUNLX0xJQlJBUklFUwotICBMQVBBQ0sKLSAgY2hlZXYKLSAgIiIKLSAgImdvdG8yIgotICAiJHtCTEFTX0xJQlJBUklFU30iCi0gICIiCi0gICkKLSBlbmRpZigpCi1lbmRpZiAoKQotCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiT3BlbkJMQVMiIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCi0gaWYoTk9UIExBUEFDS19MSUJSQVJJRVMpCi0gIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCi0gIExBUEFDS19MSUJSQVJJRVMKLSAgTEFQQUNLCi0gIGNoZWV2Ci0gICIiCi0gICJvcGVuYmxhcyIKLSAgIiR7QkxBU19MSUJSQVJJRVN9IgotICAiIgotICApCi0gZW5kaWYoKQotZW5kaWYgKCkKLQotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkZMQU1FIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQotIGlmKE5PVCBMQVBBQ0tfTElCUkFSSUVTKQotICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAotICBMQVBBQ0tfTElCUkFSSUVTCi0gIExBUEFDSwotICBjaGVldgotICAiIgotICAiZmxhbWUiCi0gICIke0JMQVNfTElCUkFSSUVTfSIKLSAgIiIKLSAgKQotIGVuZGlmKCkKLWVuZGlmICgpCi0KLSNhY21sIGxhcGFjawotaWYgKEJMQV9WRU5ET1IgTUFUQ0hFUyAiQUNNTCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKLSAgaWYgKEJMQVNfTElCUkFSSUVTIE1BVENIRVMgIi4rYWNtbC4rIikKLSAgICBzZXQgKExBUEFDS19MSUJSQVJJRVMgJHtCTEFTX0xJQlJBUklFU30pCi0gIGVuZGlmICgpCi1lbmRpZiAoKQotCi0jIEFwcGxlIExBUEFDSyBsaWJyYXJ5PwotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFwcGxlIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQotICBpZihOT1QgTEFQQUNLX0xJQlJBUklFUykKLSAgICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAotICAgIExBUEFDS19MSUJSQVJJRVMKLSAgICBMQVBBQ0sKLSAgICBjaGVldgotICAgICIiCi0gICAgIkFjY2VsZXJhdGUiCi0gICAgIiR7QkxBU19MSUJSQVJJRVN9IgotICAgICIiCi0gICAgKQorICAjIGdvdG9ibGFzPyAoaHR0cDovL3d3dy50YWNjLnV0ZXhhcy5lZHUvdGFjYy1wcm9qZWN0cy9nb3RvYmxhczIpCisgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkdvdG8iIE9SIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFsbCIpCisgICAgaWYoTk9UIExBUEFDS19MSUJSQVJJRVMpCisgICAgICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAorICAgICAgICBMQVBBQ0tfTElCUkFSSUVTCisgICAgICAgIExBUEFDSworICAgICAgICBjaGVldgorICAgICAgICAiIgorICAgICAgICAiZ290bzIiCisgICAgICAgICIiCisgICAgICAgICIiCisgICAgICAgICIiCisgICAgICAgICIke0JMQVNfTElCUkFSSUVTfSIKKyAgICAgICkKKyAgICBlbmRpZigpCiAgIGVuZGlmKCkKLWVuZGlmICgpCi1pZiAoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiTkFTIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQotICBpZiAoIE5PVCBMQVBBQ0tfTElCUkFSSUVTICkKLSAgICBjaGVja19sYXBhY2tfbGlicmFyaWVzKAotICAgIExBUEFDS19MSUJSQVJJRVMKLSAgICBMQVBBQ0sKLSAgICBjaGVldgotICAgICIiCi0gICAgInZlY0xpYiIKLSAgICAiJHtCTEFTX0xJQlJBUklFU30iCi0gICAgIiIKLSAgICApCi0gIGVuZGlmICgpCi1lbmRpZiAoKQotIyBHZW5lcmljIExBUEFDSyBsaWJyYXJ5PwotaWYgKEJMQV9WRU5ET1IgU1RSRVFVQUwgIkdlbmVyaWMiIE9SCi0gICAgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQVRMQVMiIE9SCi0gICAgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKLSAgaWYgKCBOT1QgTEFQQUNLX0xJQlJBUklFUyApCi0gICAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKLSAgICBMQVBBQ0tfTElCUkFSSUVTCi0gICAgTEFQQUNLCi0gICAgY2hlZXYKLSAgICAiIgotICAgICJsYXBhY2siCi0gICAgIiR7QkxBU19MSUJSQVJJRVN9IgotICAgICIiCi0gICAgKQotICBlbmRpZiAoKQotZW5kaWYgKCkKIAorICAjIE9wZW5CTEFTPyAoaHR0cDovL3d3dy5vcGVuYmxhcy5uZXQpCisgIGlmKEJMQV9WRU5ET1IgU1RSRVFVQUwgIk9wZW5CTEFTIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgIGlmKE5PVCBMQVBBQ0tfTElCUkFSSUVTKQorICAgICAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKKyAgICAgICAgTEFQQUNLX0xJQlJBUklFUworICAgICAgICBMQVBBQ0sKKyAgICAgICAgY2hlZXYKKyAgICAgICAgIiIKKyAgICAgICAgIm9wZW5ibGFzIgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiJHtCTEFTX0xJQlJBUklFU30iCisgICAgICApCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKKyAgIyBBcm1QTD8gKGh0dHBzOi8vZGV2ZWxvcGVyLmFybS5jb20vdG9vbHMtYW5kLXNvZnR3YXJlL3NlcnZlci1hbmQtaHBjL2NvbXBpbGUvYXJtLWNvbXBpbGVyLWZvci1saW51eC9hcm0tcGVyZm9ybWFuY2UtbGlicmFyaWVzKQorICBpZihCTEFfVkVORE9SIE1BVENIRVMgIkFybSIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKworICAgICMgQ2hlY2sgZm9yIDY0Yml0IEludGVnZXIgc3VwcG9ydAorICAgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiX2lscDY0IikKKyAgICAgIHNldChMQVBBQ0tfYXJtcGxfTElCICJhcm1wbF9pbHA2NCIpCisgICAgZWxzZSgpCisgICAgICBzZXQoTEFQQUNLX2FybXBsX0xJQiAiYXJtcGxfbHA2NCIpCisgICAgZW5kaWYoKQorCisgICAgIyBDaGVjayBmb3IgT3Blbk1QIHN1cHBvcnQsIFZJQSBCTEFfVkVORE9SIG9mIEFybV9tcCBvciBBcm1faXBsNjRfbXAKKyAgICBpZihCTEFfVkVORE9SIE1BVENIRVMgIl9tcCIpCisgICAgIHNldChMQVBBQ0tfYXJtcGxfTElCICIke0xBUEFDS19hcm1wbF9MSUJ9X21wIikKKyAgICBlbmRpZigpCisKKyAgICBpZihOT1QgTEFQQUNLX0xJQlJBUklFUykKKyAgICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCisgICAgICAgIExBUEFDS19MSUJSQVJJRVMKKyAgICAgICAgTEFQQUNLCisgICAgICAgIGNoZWV2CisgICAgICAgICIiCisgICAgICAgICIke0xBUEFDS19hcm1wbF9MSUJ9IgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiJHtCTEFTX0xJQlJBUklFU30iCisgICAgICApCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKKyAgIyBGTEFNRSdzIGJsaXMgbGlicmFyeT8gKGh0dHBzOi8vZ2l0aHViLmNvbS9mbGFtZS9ibGlzKQorICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJGTEFNRSIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICBpZihOT1QgTEFQQUNLX0xJQlJBUklFUykKKyAgICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCisgICAgICAgIExBUEFDS19MSUJSQVJJRVMKKyAgICAgICAgTEFQQUNLCisgICAgICAgIGNoZWV2CisgICAgICAgICIiCisgICAgICAgICJmbGFtZSIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiR7QkxBU19MSUJSQVJJRVN9IgorICAgICAgKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCisgICMgQkxBUyBpbiBhY21sIGxpYnJhcnk/CisgIGlmKEJMQV9WRU5ET1IgTUFUQ0hFUyAiQUNNTCIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICBpZihCTEFTX0xJQlJBUklFUyBNQVRDSEVTICIuK2FjbWwuKyIpCisgICAgICBzZXQoTEFQQUNLX0xJQlJBUklFUyAke0JMQVNfTElCUkFSSUVTfSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICAjIEFwcGxlIExBUEFDSyBsaWJyYXJ5PworICBpZihCTEFfVkVORE9SIFNUUkVRVUFMICJBcHBsZSIgT1IgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICBpZihOT1QgTEFQQUNLX0xJQlJBUklFUykKKyAgICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCisgICAgICAgIExBUEFDS19MSUJSQVJJRVMKKyAgICAgICAgTEFQQUNLCisgICAgICAgIGNoZWV2CisgICAgICAgICIiCisgICAgICAgICJBY2NlbGVyYXRlIgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiIgorICAgICAgICAiJHtCTEFTX0xJQlJBUklFU30iCisgICAgICApCisgICAgZW5kaWYoKQorICBlbmRpZigpCisKKyAgIyBBcHBsZSBOQVMgKHZlY0xpYikgbGlicmFyeT8KKyAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiTkFTIiBPUiBCTEFfVkVORE9SIFNUUkVRVUFMICJBbGwiKQorICAgIGlmKE5PVCBMQVBBQ0tfTElCUkFSSUVTKQorICAgICAgY2hlY2tfbGFwYWNrX2xpYnJhcmllcygKKyAgICAgICAgTEFQQUNLX0xJQlJBUklFUworICAgICAgICBMQVBBQ0sKKyAgICAgICAgY2hlZXYKKyAgICAgICAgIiIKKyAgICAgICAgInZlY0xpYiIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiIKKyAgICAgICAgIiR7QkxBU19MSUJSQVJJRVN9IgorICAgICAgKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCisgICMgR2VuZXJpYyBMQVBBQ0sgbGlicmFyeT8KKyAgaWYoQkxBX1ZFTkRPUiBTVFJFUVVBTCAiR2VuZXJpYyIgT1IKKyAgICAgIEJMQV9WRU5ET1IgU1RSRVFVQUwgIkFUTEFTIiBPUgorICAgICAgQkxBX1ZFTkRPUiBTVFJFUVVBTCAiQWxsIikKKyAgICBpZihOT1QgTEFQQUNLX0xJQlJBUklFUykKKyAgICAgIGNoZWNrX2xhcGFja19saWJyYXJpZXMoCisgICAgICAgIExBUEFDS19MSUJSQVJJRVMKKyAgICAgICAgTEFQQUNLCisgICAgICAgIGNoZWV2CisgICAgICAgICIiCisgICAgICAgICJsYXBhY2siCisgICAgICAgICIiCisgICAgICAgICIiCisgICAgICAgICIiCisgICAgICAgICIke0JMQVNfTElCUkFSSUVTfSIKKyAgICAgICkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIGVsc2UoKQogICBtZXNzYWdlKFNUQVRVUyAiTEFQQUNLIHJlcXVpcmVzIEJMQVMiKQogZW5kaWYoKQpAQCAtMzk3LDExICs0OTYsMTEgQEAKICAgICBlbHNlKCkKICAgICAgIGlmKExBUEFDS19GSU5EX1JFUVVJUkVEKQogICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCi0gICAgICAgICJBIHJlcXVpcmVkIGxpYnJhcnkgd2l0aCBMQVBBQ0s5NSBBUEkgbm90IGZvdW5kLiBQbGVhc2Ugc3BlY2lmeSBsaWJyYXJ5IGxvY2F0aW9uLiIKKyAgICAgICAgICAiQSByZXF1aXJlZCBsaWJyYXJ5IHdpdGggTEFQQUNLOTUgQVBJIG5vdCBmb3VuZC4gUGxlYXNlIHNwZWNpZnkgbGlicmFyeSBsb2NhdGlvbi4iCiAgICAgICAgICkKICAgICAgIGVsc2UoKQogICAgICAgICBtZXNzYWdlKFNUQVRVUwotICAgICAgICAiQSBsaWJyYXJ5IHdpdGggTEFQQUNLOTUgQVBJIG5vdCBmb3VuZC4gUGxlYXNlIHNwZWNpZnkgbGlicmFyeSBsb2NhdGlvbi4iCisgICAgICAgICAgIkEgbGlicmFyeSB3aXRoIExBUEFDSzk1IEFQSSBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IGxpYnJhcnkgbG9jYXRpb24uIgogICAgICAgICApCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQpAQCAtNDIxLDExICs1MjAsMTEgQEAKICAgICBlbHNlKCkKICAgICAgIGlmKExBUEFDS19GSU5EX1JFUVVJUkVEKQogICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCi0gICAgICAgICJBIHJlcXVpcmVkIGxpYnJhcnkgd2l0aCBMQVBBQ0sgQVBJIG5vdCBmb3VuZC4gUGxlYXNlIHNwZWNpZnkgbGlicmFyeSBsb2NhdGlvbi4iCisgICAgICAgICAgIkEgcmVxdWlyZWQgbGlicmFyeSB3aXRoIExBUEFDSyBBUEkgbm90IGZvdW5kLiBQbGVhc2Ugc3BlY2lmeSBsaWJyYXJ5IGxvY2F0aW9uLiIKICAgICAgICAgKQogICAgICAgZWxzZSgpCiAgICAgICAgIG1lc3NhZ2UoU1RBVFVTCi0gICAgICAgICJBIGxpYnJhcnkgd2l0aCBMQVBBQ0sgQVBJIG5vdCBmb3VuZC4gUGxlYXNlIHNwZWNpZnkgbGlicmFyeSBsb2NhdGlvbi4iCisgICAgICAgICAgIkEgbGlicmFyeSB3aXRoIExBUEFDSyBBUEkgbm90IGZvdW5kLiBQbGVhc2Ugc3BlY2lmeSBsaWJyYXJ5IGxvY2F0aW9uLiIKICAgICAgICAgKQogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKQEAgLTQzNCw5ICs1MzMsMjYgQEAKIAogIyBPbiBjb21waWxlcnMgdGhhdCBpbXBsaWNpdGx5IGxpbmsgTEFQQUNLIChzdWNoIGFzIGZ0biwgY2MsIGFuZCBDQyBvbiBDcmF5IEhQQyBtYWNoaW5lcykKICMgd2UgdXNlZCBhIHBsYWNlaG9sZGVyIGZvciBlbXB0eSBMQVBBQ0tfTElCUkFSSUVTIHRvIGdldCB0aHJvdWdoIG91ciBsb2dpYyBhYm92ZS4KLWlmIChMQVBBQ0tfTElCUkFSSUVTIFNUUkVRVUFMICJMQVBBQ0tfTElCUkFSSUVTLVBMQUNFSE9MREVSLUZPUi1FTVBUWS1MSUJSQVJJRVMiKQoraWYoTEFQQUNLX0xJQlJBUklFUyBTVFJFUVVBTCAiTEFQQUNLX0xJQlJBUklFUy1QTEFDRUhPTERFUi1GT1ItRU1QVFktTElCUkFSSUVTIikKICAgc2V0KExBUEFDS19MSUJSQVJJRVMgIiIpCiBlbmRpZigpCiAKK2lmKE5PVCBUQVJHRVQgTEFQQUNLOjpMQVBBQ0spCisgIGFkZF9saWJyYXJ5KExBUEFDSzo6TEFQQUNLIElOVEVSRkFDRSBJTVBPUlRFRCkKKyAgc2V0KF9sYXBhY2tfbGlicyAiJHtMQVBBQ0tfTElCUkFSSUVTfSIpCisgIGlmKF9sYXBhY2tfbGlicyBBTkQgVEFSR0VUIEJMQVM6OkJMQVMpCisgICAgIyByZW1vdmUgdGhlICR7QkxBU19MSUJSQVJJRVN9IGZyb20gdGhlIGludGVyZmFjZSBhbmQgcmVwbGFjZSBpdAorICAgICMgd2l0aCB0aGUgQkxBUzo6QkxBUyB0YXJnZXQKKyAgICBsaXN0KFJFTU9WRV9JVEVNIF9sYXBhY2tfbGlicyAiJHtCTEFTX0xJQlJBUklFU30iKQorICBlbmRpZigpCisKKyAgaWYoX2xhcGFja19saWJzKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhMQVBBQ0s6OkxBUEFDSyBQUk9QRVJUSUVTCisgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIiR7X2xhcGFja19saWJzfSIKKyAgICApCisgIGVuZGlmKCkKKyAgdW5zZXQoX2xhcGFja19saWJzKQorZW5kaWYoKQorCiBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQogc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke19sYXBhY2tfT1JJR19DTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTFRUbmdVU1QuY21ha2UgYi9Nb2R1bGVzL0ZpbmRMVFRuZ1VTVC5jbWFrZQppbmRleCA5Y2QxN2ViLi5mNDc4ZTRkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRMVFRuZ1VTVC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRMVFRuZ1VTVC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRMVFRuZ1VTVAogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNgorCiBGaW5kCiBgTGludXggVHJhY2UgVG9vbGtpdCBOZXh0IEdlbmVyYXRpb24gKExUVG5nLVVTVCkgPGh0dHA6Ly9sdHRuZy5vcmcvPmBfXyBsaWJyYXJ5LgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRMaWJBcmNoaXZlLmNtYWtlIGIvTW9kdWxlcy9GaW5kTGliQXJjaGl2ZS5jbWFrZQppbmRleCBlZjI3YjdkLi5jZTNjOGI4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRMaWJBcmNoaXZlLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZExpYkFyY2hpdmUuY21ha2UKQEAgLTE2LDE4ICsxNiwyNiBAQAogICBMaWJBcmNoaXZlX0lOQ0xVREVfRElSUyAtIGluY2x1ZGUgc2VhcmNoIHBhdGgKICAgTGliQXJjaGl2ZV9MSUJSQVJJRVMgICAgLSBsaWJyYXJpZXMgdG8gbGluawogICBMaWJBcmNoaXZlX1ZFUlNJT04gICAgICAtIGxpYmFyY2hpdmUgMy1jb21wb25lbnQgdmVyc2lvbiBudW1iZXIKKworVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgYGBJTVBPUlRFRGBgIHRhcmdldHM6CisKKzo6CisKKyAgTGliQXJjaGl2ZTo6TGliQXJjaGl2ZSAgLSB0YXJnZXQgZm9yIGxpbmtpbmcgYWdhaW5zdCBsaWJhcmNoaXZlCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiBmaW5kX3BhdGgoTGliQXJjaGl2ZV9JTkNMVURFX0RJUgogICBOQU1FUyBhcmNoaXZlLmgKICAgUEFUSFMKICAgIltIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxHbnVXaW4zMlxcTGliQXJjaGl2ZTtJbnN0YWxsUGF0aF0vaW5jbHVkZSIKKyAgRE9DICJsaWJhcmNoaXZlIGluY2x1ZGUgZGlyZWN0b3J5IgogICApCiAKIGZpbmRfbGlicmFyeShMaWJBcmNoaXZlX0xJQlJBUlkKICAgTkFNRVMgYXJjaGl2ZSBsaWJhcmNoaXZlCiAgIFBBVEhTCiAgICJbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcR251V2luMzJcXExpYkFyY2hpdmU7SW5zdGFsbFBhdGhdL2xpYiIKKyAgRE9DICJsaWJhcmNoaXZlIGxpYnJhcnkiCiAgICkKIAogbWFya19hc19hZHZhbmNlZChMaWJBcmNoaXZlX0lOQ0xVREVfRElSIExpYkFyY2hpdmVfTElCUkFSWSkKQEAgLTU4LDQgKzY2LDExIEBACiBpZihMaWJBcmNoaXZlX0ZPVU5EKQogICBzZXQoTGliQXJjaGl2ZV9JTkNMVURFX0RJUlMgJHtMaWJBcmNoaXZlX0lOQ0xVREVfRElSfSkKICAgc2V0KExpYkFyY2hpdmVfTElCUkFSSUVTICAgICR7TGliQXJjaGl2ZV9MSUJSQVJZfSkKKworICBpZiAoTk9UIFRBUkdFVCBMaWJBcmNoaXZlOjpMaWJBcmNoaXZlKQorICAgIGFkZF9saWJyYXJ5KExpYkFyY2hpdmU6OkxpYkFyY2hpdmUgVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTGliQXJjaGl2ZTo6TGliQXJjaGl2ZSBQUk9QRVJUSUVTCisgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHtMaWJBcmNoaXZlX0xJQlJBUll9IgorICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7TGliQXJjaGl2ZV9JTkNMVURFX0RJUn0iKQorICBlbmRpZiAoKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTGliTFpNQS5jbWFrZSBiL01vZHVsZXMvRmluZExpYkxaTUEuY21ha2UKaW5kZXggMjAwZDZiZi4uNGE3OWExMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kTGliTFpNQS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRMaWJMWk1BLmNtYWtlCkBAIC00Myw4ICs0Myw4IEBACiAKIGZpbmRfcGF0aChMSUJMWk1BX0lOQ0xVREVfRElSIGx6bWEuaCApCiBpZihOT1QgTElCTFpNQV9MSUJSQVJZKQotICBmaW5kX2xpYnJhcnkoTElCTFpNQV9MSUJSQVJZX1JFTEVBU0UgTkFNRVMgbHptYSBsaWJsem1hIFBBVEhfU1VGRklYRVMgbGliKQotICBmaW5kX2xpYnJhcnkoTElCTFpNQV9MSUJSQVJZX0RFQlVHIE5BTUVTIGx6bWFkIGxpYmx6bWFkIFBBVEhfU1VGRklYRVMgbGliKQorICBmaW5kX2xpYnJhcnkoTElCTFpNQV9MSUJSQVJZX1JFTEVBU0UgTkFNRVMgbHptYSBsaWJsem1hIE5BTUVTX1BFUl9ESVIgUEFUSF9TVUZGSVhFUyBsaWIpCisgIGZpbmRfbGlicmFyeShMSUJMWk1BX0xJQlJBUllfREVCVUcgTkFNRVMgbHptYWQgbGlibHptYWQgTkFNRVNfUEVSX0RJUiBQQVRIX1NVRkZJWEVTIGxpYikKICAgaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1NlbGVjdExpYnJhcnlDb25maWd1cmF0aW9ucy5jbWFrZSkKICAgc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMoTElCTFpNQSkKIGVsc2UoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTGliWG1sMi5jbWFrZSBiL01vZHVsZXMvRmluZExpYlhtbDIuY21ha2UKaW5kZXggZGE4YmZlMC4uZjU1MWRmZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kTGliWG1sMi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRMaWJYbWwyLmNtYWtlCkBAIC0xMCw4ICsxMCwxMiBAQAogSU1QT1JURUQgVGFyZ2V0cwogXl5eXl5eXl5eXl5eXl5eXgogCi1UaGlzIG1vZHVsZSBkZWZpbmVzIDpwcm9wX3RndDpgSU1QT1JURURgIHRhcmdldCBgYExpYlhtbDI6OkxpYlhtbDJgYCwgaWYKLWxpYnhtbDIgaGFzIGJlZW4gZm91bmQuCitUaGUgZm9sbG93aW5nIDpwcm9wX3RndDpgSU1QT1JURURgIHRhcmdldHMgbWF5IGJlIGRlZmluZWQ6CisKK2BgTGliWG1sMjo6TGliWG1sMmBgCisgIElmIHRoZSBsaWJ4bWwyIGxpYnJhcnkgaGFzIGJlZW4gZm91bmQKK2BgTGliWG1sMjo6eG1sbGludGBgCisgIElmIHRoZSB4bWxsaW50IGNvbW1hbmQtbGluZSBleGVjdXRhYmxlIGhhcyBiZWVuIGZvdW5kCiAKIFJlc3VsdCB2YXJpYWJsZXMKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTQ4LDcgKzUyLDYgQEAKICMgaW4gdGhlIGZpbmRfcGF0aCgpIGFuZCBmaW5kX2xpYnJhcnkoKSBjYWxscwogZmluZF9wYWNrYWdlKFBrZ0NvbmZpZyBRVUlFVCkKIFBLR19DSEVDS19NT0RVTEVTKFBDX0xJQlhNTCBRVUlFVCBsaWJ4bWwtMi4wKQotc2V0KExJQlhNTDJfREVGSU5JVElPTlMgJHtQQ19MSUJYTUxfQ0ZMQUdTX09USEVSfSkKIAogZmluZF9wYXRoKExJQlhNTDJfSU5DTFVERV9ESVIgTkFNRVMgbGlieG1sL3hwYXRoLmgKICAgIEhJTlRTCkBAIC03NCw5ICs3Nyw3IEBACiAjIGZvciBiYWNrd2FyZHMgY29tcGF0LiB3aXRoIEtERSA0LjAueDoKIHNldChYTUxMSU5UX0VYRUNVVEFCTEUgIiR7TElCWE1MMl9YTUxMSU5UX0VYRUNVVEFCTEV9IikKIAotaWYoUENfTElCWE1MX1ZFUlNJT04pCi0gICAgc2V0KExJQlhNTDJfVkVSU0lPTl9TVFJJTkcgJHtQQ19MSUJYTUxfVkVSU0lPTn0pCi1lbHNlaWYoTElCWE1MMl9JTkNMVURFX0RJUiBBTkQgRVhJU1RTICIke0xJQlhNTDJfSU5DTFVERV9ESVJ9L2xpYnhtbC94bWx2ZXJzaW9uLmgiKQoraWYoTElCWE1MMl9JTkNMVURFX0RJUiBBTkQgRVhJU1RTICIke0xJQlhNTDJfSU5DTFVERV9ESVJ9L2xpYnhtbC94bWx2ZXJzaW9uLmgiKQogICAgIGZpbGUoU1RSSU5HUyAiJHtMSUJYTUwyX0lOQ0xVREVfRElSfS9saWJ4bWwveG1sdmVyc2lvbi5oIiBsaWJ4bWwyX3ZlcnNpb25fc3RyCiAgICAgICAgICBSRUdFWCAiXiNkZWZpbmVbXHQgXStMSUJYTUxfRE9UVEVEX1ZFUlNJT05bXHQgXStcIi4qXCIiKQogCkBAIC04NSw5ICs4NiwyMCBAQAogICAgIHVuc2V0KGxpYnhtbDJfdmVyc2lvbl9zdHIpCiBlbmRpZigpCiAKLXNldChMSUJYTUwyX0lOQ0xVREVfRElSUyAke0xJQlhNTDJfSU5DTFVERV9ESVJ9ICR7UENfTElCWE1MX0lOQ0xVREVfRElSU30pCitzZXQoTElCWE1MMl9JTkNMVURFX0RJUlMgJHtMSUJYTUwyX0lOQ0xVREVfRElSfSkKIHNldChMSUJYTUwyX0xJQlJBUklFUyAke0xJQlhNTDJfTElCUkFSWX0pCiAKKyMgRGlkIHdlIGZpbmQgdGhlIHNhbWUgaW5zdGFsbGF0aW9uIGFzIHBrZy1jb25maWc/CisjIElmIHNvLCB1c2UgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmcm9tIGl0LgordW5zZXQoTElCWE1MMl9ERUZJTklUSU9OUykKK2ZvcmVhY2gobGlieG1sMl9wY19saWJfZGlyIElOIExJU1RTIFBDX0xJQlhNTF9MSUJESVIgUENfTElCWE1MX0xJQlJBUllfRElSUykKKyAgaWYgKExJQlhNTDJfTElCUkFSWSBNQVRDSEVTICJeJHtsaWJ4bWwyX3BjX2xpYl9kaXJ9IikKKyAgICBsaXN0KEFQUEVORCBMSUJYTUwyX0lOQ0xVREVfRElSUyAke1BDX0xJQlhNTF9JTkNMVURFX0RJUlN9KQorICAgIHNldChMSUJYTUwyX0RFRklOSVRJT05TICR7UENfTElCWE1MX0NGTEFHU19PVEhFUn0pCisgICAgYnJlYWsoKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKwogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQogRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKExpYlhtbDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFRF9WQVJTIExJQlhNTDJfTElCUkFSWSBMSUJYTUwyX0lOQ0xVREVfRElSCkBAIC05OCw1ICsxMTAsMTEgQEAKIGlmKExpYlhtbDJfRk9VTkQgQU5EIE5PVCBUQVJHRVQgTGliWG1sMjo6TGliWG1sMikKICAgYWRkX2xpYnJhcnkoTGliWG1sMjo6TGliWG1sMiBVTktOT1dOIElNUE9SVEVEKQogICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTGliWG1sMjo6TGliWG1sMiBQUk9QRVJUSUVTIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke0xJQlhNTDJfSU5DTFVERV9ESVJTfSIpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhMaWJYbWwyOjpMaWJYbWwyIFBST1BFUlRJRVMgSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OUyAiJHtMSUJYTUwyX0RFRklOSVRJT05TfSIpCiAgIHNldF9wcm9wZXJ0eShUQVJHRVQgTGliWG1sMjo6TGliWG1sMiBBUFBFTkQgUFJPUEVSVFkgSU1QT1JURURfTE9DQVRJT04gIiR7TElCWE1MMl9MSUJSQVJZfSIpCiBlbmRpZigpCisKK2lmKExJQlhNTDJfWE1MTElOVF9FWEVDVVRBQkxFIEFORCBOT1QgVEFSR0VUIExpYlhtbDI6OnhtbGxpbnQpCisgIGFkZF9leGVjdXRhYmxlKExpYlhtbDI6OnhtbGxpbnQgSU1QT1JURUQpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhMaWJYbWwyOjp4bWxsaW50IFBST1BFUlRJRVMgSU1QT1JURURfTE9DQVRJT04gIiR7TElCWE1MMl9YTUxMSU5UX0VYRUNVVEFCTEV9IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZExpYlhzbHQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRMaWJYc2x0LmNtYWtlCmluZGV4IDAxYTlkOGIuLmZjN2FkZWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZExpYlhzbHQuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kTGliWHNsdC5jbWFrZQpAQCAtOCw5ICs4LDIyIEBACiBGaW5kIHRoZSBYU0wgVHJhbnNmb3JtYXRpb25zLCBFeHRlbnNpYmxlIFN0eWxlc2hlZXQgTGFuZ3VhZ2UKIFRyYW5zZm9ybWF0aW9ucyAoWFNMVCkgbGlicmFyeSAoTGliWHNsdCkKIAotT25jZSBkb25lIHRoaXMgd2lsbCBkZWZpbmUKK0lNUE9SVEVEIFRhcmdldHMKK15eXl5eXl5eXl5eXl5eXl4KIAotOjoKK1RoZSBmb2xsb3dpbmcgOnByb3BfdGd0OmBJTVBPUlRFRGAgdGFyZ2V0cyBtYXkgYmUgZGVmaW5lZDoKKworYGBMaWJYc2x0OjpMaWJYc2x0YGAKKyAgSWYgdGhlIGxpYnhzbHQgbGlicmFyeSBoYXMgYmVlbiBmb3VuZAorYGBMaWJYc2x0OjpMaWJFeHNsdGBgCisgIElmIHRoZSBsaWJleHNsdCBsaWJyYXJ5IGhhcyBiZWVuIGZvdW5kCitgYExpYlhzbHQ6OnhzbHRwcm9jYGAKKyAgSWYgdGhlIHhzbHRwcm9jIGNvbW1hbmQtbGluZSBleGVjdXRhYmxlIGhhcyBiZWVuIGZvdW5kCisKK1Jlc3VsdCB2YXJpYWJsZXMKK15eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBtb2R1bGUgd2lsbCBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaW4geW91ciBwcm9qZWN0OgogCiAgIExJQlhTTFRfRk9VTkQgLSBzeXN0ZW0gaGFzIExpYlhzbHQKICAgTElCWFNMVF9JTkNMVURFX0RJUiAtIHRoZSBMaWJYc2x0IGluY2x1ZGUgZGlyZWN0b3J5CkBAIC0yMSw2ICszNCw4IEBACiBBZGRpdGlvbmFsbHksIHRoZSBmb2xsb3dpbmcgdHdvIHZhcmlhYmxlcyBhcmUgc2V0IChidXQgbm90IHJlcXVpcmVkCiBmb3IgdXNpbmcgeHNsdCk6CiAKK2BgTElCWFNMVF9FWFNMVF9JTkNMVURFX0RJUmBgCisgIFRoZSBpbmNsdWRlIGRpcmVjdG9yeSBmb3IgZXhzbHQuCiBgYExJQlhTTFRfRVhTTFRfTElCUkFSSUVTYGAKICAgTGluayB0byB0aGVzZSBpZiB5b3UgbmVlZCB0byBsaW5rIGFnYWluc3QgdGhlIGV4c2x0IGxpYnJhcnkuCiBgYExJQlhTTFRfWFNMVFBST0NfRVhFQ1VUQUJMRWBgCkBAIC0zOSwxNiArNTQsMzYgQEAKICAgICR7UENfTElCWFNMVF9JTkNMVURFX0RJUlN9CiAgICkKIAotZmluZF9saWJyYXJ5KExJQlhTTFRfTElCUkFSSUVTIE5BTUVTIHhzbHQgbGlieHNsdAorIyBDTWFrZSAzLjE3IGFuZCBiZWxvdyB1c2VkICdMSUJYU0xUX0xJQlJBUklFUycgYXMgdGhlIG5hbWUgb2YKKyMgdGhlIGNhY2hlIGVudHJ5IHN0b3JpbmcgdGhlIGZpbmRfbGlicmFyeSByZXN1bHQuICBVc2UgdGhlCisjIHZhbHVlIGlmIGl0IHdhcyBzZXQgYnkgdGhlIHByb2plY3Qgb3IgdXNlci4KK2lmKERFRklORUQgTElCWFNMVF9MSUJSQVJJRVMgQU5EIE5PVCBERUZJTkVEIExJQlhTTFRfTElCUkFSWSkKKyAgc2V0KExJQlhTTFRfTElCUkFSWSAke0xJQlhTTFRfTElCUkFSSUVTfSkKK2VuZGlmKCkKKworZmluZF9saWJyYXJ5KExJQlhTTFRfTElCUkFSWSBOQU1FUyB4c2x0IGxpYnhzbHQKICAgICBISU5UUwogICAgJHtQQ19MSUJYU0xUX0xJQkRJUn0KICAgICR7UENfTElCWFNMVF9MSUJSQVJZX0RJUlN9CiAgICkKIAorc2V0KExJQlhTTFRfTElCUkFSSUVTICR7TElCWFNMVF9MSUJSQVJZfSkKKworUEtHX0NIRUNLX01PRFVMRVMoUENfTElCWFNMVF9FWFNMVCBRVUlFVCBsaWJleHNsdCkKK3NldChMSUJYU0xUX0VYU0xUX0RFRklOSVRJT05TICR7UENfTElCWFNMVF9FWFNMVF9DRkxBR1NfT1RIRVJ9KQorCitmaW5kX3BhdGgoTElCWFNMVF9FWFNMVF9JTkNMVURFX0RJUiBOQU1FUyBsaWJleHNsdC9leHNsdC5oCisgIEhJTlRTCisgICR7UENfTElCWFNMVF9FWFNMVF9JTkNMVURFRElSfQorICAke1BDX0xJQlhTTFRfRVhTTFRfSU5DTFVERV9ESVJTfQorKQorCiBmaW5kX2xpYnJhcnkoTElCWFNMVF9FWFNMVF9MSUJSQVJZIE5BTUVTIGV4c2x0IGxpYmV4c2x0CiAgICAgSElOVFMKICAgICAke1BDX0xJQlhTTFRfTElCRElSfQogICAgICR7UENfTElCWFNMVF9MSUJSQVJZX0RJUlN9CisgICAgJHtQQ19MSUJYU0xUX0VYU0xUX0xJQkRJUn0KKyAgICAke1BDX0xJQlhTTFRfRVhTTFRfTElCUkFSWV9ESVJTfQogICApCiAKIHNldChMSUJYU0xUX0VYU0xUX0xJQlJBUklFUyAke0xJQlhTTFRfRVhTTFRfTElCUkFSWX0gKQpAQCAtNzUsMyArMTEwLDIyIEBACiAgICAgICAgICAgICAgICAgIExJQlhTTFRfTElCUkFSSUVTCiAgICAgICAgICAgICAgICAgIExJQlhTTFRfRVhTTFRfTElCUkFSWQogICAgICAgICAgICAgICAgICBMSUJYU0xUX1hTTFRQUk9DX0VYRUNVVEFCTEUpCisKK2lmKExJQlhTTFRfRk9VTkQgQU5EIE5PVCBUQVJHRVQgTGliWHNsdDo6TGliWHNsdCkKKyAgYWRkX2xpYnJhcnkoTGliWHNsdDo6TGliWHNsdCBVTktOT1dOIElNUE9SVEVEKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTGliWHNsdDo6TGliWHNsdCBQUk9QRVJUSUVTIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke0xJQlhTTFRfSU5DTFVERV9ESVJ9IikKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKExpYlhzbHQ6OkxpYlhzbHQgUFJPUEVSVElFUyBJTlRFUkZBQ0VfQ09NUElMRV9PUFRJT05TICIke0xJQlhTTFRfREVGSU5JVElPTlN9IikKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBMaWJYc2x0OjpMaWJYc2x0IEFQUEVORCBQUk9QRVJUWSBJTVBPUlRFRF9MT0NBVElPTiAiJHtMSUJYU0xUX0xJQlJBUll9IikKK2VuZGlmKCkKKworaWYoTElCWFNMVF9GT1VORCBBTkQgTk9UIFRBUkdFVCBMaWJYc2x0OjpMaWJFeHNsdCkKKyAgYWRkX2xpYnJhcnkoTGliWHNsdDo6TGliRXhzbHQgVU5LTk9XTiBJTVBPUlRFRCkKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKExpYlhzbHQ6OkxpYkV4c2x0IFBST1BFUlRJRVMgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7TElCWFNMVF9FWFNMVF9JTkNMVURFX0RJUn0iKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTGliWHNsdDo6TGliRXhzbHQgUFJPUEVSVElFUyBJTlRFUkZBQ0VfQ09NUElMRV9PUFRJT05TICIke0xJQlhTTFRfRVhTTFRfREVGSU5JVElPTlN9IikKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBMaWJYc2x0OjpMaWJFeHNsdCBBUFBFTkQgUFJPUEVSVFkgSU1QT1JURURfTE9DQVRJT04gIiR7TElCWFNMVF9FWFNMVF9MSUJSQVJZfSIpCitlbmRpZigpCisKK2lmKExJQlhTTFRfWFNMVFBST0NfRVhFQ1VUQUJMRSBBTkQgTk9UIFRBUkdFVCBMaWJYc2x0Ojp4c2x0cHJvYykKKyAgYWRkX2V4ZWN1dGFibGUoTGliWHNsdDo6eHNsdHByb2MgSU1QT1JURUQpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhMaWJYc2x0Ojp4c2x0cHJvYyBQUk9QRVJUSUVTIElNUE9SVEVEX0xPQ0FUSU9OICIke0xJQlhTTFRfWFNMVFBST0NfRVhFQ1VUQUJMRX0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTGliaW5wdXQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRMaWJpbnB1dC5jbWFrZQppbmRleCBjMWZlNDU1Li44OGQ1YjJmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRMaWJpbnB1dC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRMaWJpbnB1dC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRMaWJpbnB1dAogLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogRmluZCBsaWJpbnB1dCBoZWFkZXJzIGFuZCBsaWJyYXJ5LgogCiBJbXBvcnRlZCBUYXJnZXRzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRMdWEuY21ha2UgYi9Nb2R1bGVzL0ZpbmRMdWEuY21ha2UKaW5kZXggY2FmOWQ2OS4uYzQzNjFiNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kTHVhLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZEx1YS5jbWFrZQpAQCAtNDgsNyArNDgsNyBAQAogCiAjIHRoaXMgaXMgYSBmdW5jdGlvbiBvbmx5IHRvIGhhdmUgYWxsIHRoZSB2YXJpYWJsZXMgaW5zaWRlIGdvIGF3YXkgYXV0b21hdGljYWxseQogZnVuY3Rpb24oX2x1YV9nZXRfdmVyc2lvbnMpCi0gICAgc2V0KExVQV9WRVJTSU9OUzUgNS4zIDUuMiA1LjEgNS4wKQorICAgIHNldChMVUFfVkVSU0lPTlM1IDUuNCA1LjMgNS4yIDUuMSA1LjApCiAKICAgICBpZiAoTHVhX0ZJTkRfVkVSU0lPTl9FWEFDVCkKICAgICAgICAgaWYgKEx1YV9GSU5EX1ZFUlNJT05fQ09VTlQgR1JFQVRFUiAxKQpAQCAtMjExLDYgKzIxMSw3IEBACiAgICMgaW5jbHVkZSB0aGUgbWF0aCBsaWJyYXJ5IGZvciBVbml4CiAgIGlmIChVTklYIEFORCBOT1QgQVBQTEUgQU5EIE5PVCBCRU9TKQogICAgIGZpbmRfbGlicmFyeShMVUFfTUFUSF9MSUJSQVJZIG0pCisgICAgbWFya19hc19hZHZhbmNlZChMVUFfTUFUSF9MSUJSQVJZKQogICAgIHNldChMVUFfTElCUkFSSUVTICIke0xVQV9MSUJSQVJZfTske0xVQV9NQVRIX0xJQlJBUll9IikKIAogICAgICMgaW5jbHVkZSBkbCBsaWJyYXJ5IGZvciBzdGF0aWNhbGx5LWxpbmtlZCBMdWEgbGlicmFyeQpAQCAtMjMyLDYgKzIzMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRURfVkFSUyBMVUFfTElCUkFSSUVTIExVQV9JTkNMVURFX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fVkFSIExVQV9WRVJTSU9OX1NUUklORykKIAotbWFya19hc19hZHZhbmNlZChMVUFfSU5DTFVERV9ESVIgTFVBX0xJQlJBUlkgTFVBX01BVEhfTElCUkFSWSkKK21hcmtfYXNfYWR2YW5jZWQoTFVBX0lOQ0xVREVfRElSIExVQV9MSUJSQVJZKQogCiBjbWFrZV9wb2xpY3koUE9QKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kTUZDLmNtYWtlIGIvTW9kdWxlcy9GaW5kTUZDLmNtYWtlCmluZGV4IGUzNjY2MTkuLmI4Y2E3MWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE1GQy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRNRkMuY21ha2UKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBzZXQoQ0hFQ0tfSU5DTFVERV9GSUxFX1ZBUiAiYWZ4d2luLmgiKQogICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfUk9PVH0vTW9kdWxlcy9DaGVja0luY2x1ZGVGaWxlLmN4eC5pbgogICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9DaGVja0luY2x1ZGVGaWxlLmN4eCkKLSAgICBtZXNzYWdlKFNUQVRVUyAiTG9va2luZyBmb3IgTUZDIikKKyAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciBNRkMiKQogICAgICMgVHJ5IGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgYXMgdGhlIHJvb3QgcHJvamVjdCBtYXkgaGF2ZSBzZXQgdGhlIC9NVCBmbGFnCiAgICAgdHJ5X2NvbXBpbGUoTUZDX0hBVkVfTUZDCiAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CkBAIC01MSwxMyArNTEsMTMgQEAKICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKICAgICBlbmRpZigpCiAgICAgaWYoTUZDX0hBVkVfTUZDKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkxvb2tpbmcgZm9yIE1GQyAtIGZvdW5kIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiZm91bmQiKQogICAgICAgc2V0KE1GQ19IQVZFX01GQyAxIENBQ0hFIElOVEVSTkFMICJIYXZlIE1GQz8iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIE1GQyBleGlzdHMgcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgICAgICIke09VVFBVVH1cblxuIikKICAgICBlbHNlKCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJMb29raW5nIGZvciBNRkMgLSBub3QgZm91bmQiKQorICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJub3QgZm91bmQiKQogICAgICAgc2V0KE1GQ19IQVZFX01GQyAwIENBQ0hFIElOVEVSTkFMICJIYXZlIE1GQz8iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgTUZDIGV4aXN0cyBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE1QSS5jbWFrZSBiL01vZHVsZXMvRmluZE1QSS5jbWFrZQppbmRleCA0Mjk0MWM5Li5iMjUyNmMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRNUEkuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kTVBJLmNtYWtlCkBAIC03NjAsNyArNzYwLDcgQEAKICAgIyBTYXZlIHRoZSBleHBsaWNpdGx5IGdpdmVuIGxpbmsgZGlyZWN0b3JpZXMKICAgc2V0KE1QSV9MSU5LX0RJUkVDVE9SSUVTX0xFRlRPVkVSICIke01QSV9MSU5LX0RJUkVDVE9SSUVTX1dPUkt9IikKIAotICAjIEFuIE1QSSBjb21waWxlciB3cmFwcGVyIGNvdWxkIGhhdmUgaXRzIE1QSSBsaWJyYXJpZXMgaW4gdGhlIGltcGxpY3RseQorICAjIEFuIE1QSSBjb21waWxlciB3cmFwcGVyIGNvdWxkIGhhdmUgaXRzIE1QSSBsaWJyYXJpZXMgaW4gdGhlIGltcGxpY2l0bHkKICAgIyBsaW5rZWQgZGlyZWN0b3JpZXMgb2YgdGhlIGNvbXBpbGVyIGl0c2VsZi4KICAgaWYoREVGSU5FRCBDTUFLRV8ke0xBTkd9X0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVMpCiAgICAgbGlzdChBUFBFTkQgTVBJX0xJTktfRElSRUNUT1JJRVNfV09SSyAiJHtDTUFLRV8ke0xBTkd9X0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9IikKQEAgLTg0Miw4ICs4NDIsOCBAQAogICBpZihOT1QgTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUykKICAgICBzZXQoTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUyAgICAgICR7TVBJX0NPTVBJTEVfREVGSU5JVElPTlNfV09SS30gQ0FDSEUgU1RSSU5HICJNUEkgJHtMQU5HfSBjb21waWxhdGlvbiBkZWZpbml0aW9ucyIgICAgICAgIEZPUkNFKQogICBlbmRpZigpCi0gIGlmKE5PVCBNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSUykKLSAgICBzZXQoTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgICR7TVBJX0lOQ0xVREVfRElSU19XT1JLfSAgICAgICAgQ0FDSEUgU1RSSU5HICJNUEkgJHtMQU5HfSBhZGRpdGlvbmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMiIEZPUkNFKQorICBpZihOT1QgTVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTKQorICAgIHNldChNUElfJHtMQU5HfV9DT01QSUxFUl9JTkNMVURFX0RJUlMgICAgJHtNUElfSU5DTFVERV9ESVJTX1dPUkt9ICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGNvbXBpbGVyIHdyYXBwZXIgaW5jbHVkZSBkaXJlY3RvcmllcyIgRk9SQ0UpCiAgIGVuZGlmKCkKICAgaWYoTk9UIE1QSV8ke0xBTkd9X0xJTktfRkxBR1MpCiAgICAgc2V0KE1QSV8ke0xBTkd9X0xJTktfRkxBR1MgICAgICAgICAgICAgICAke01QSV9MSU5LX0ZMQUdTX1dPUkt9ICAgICAgICAgIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gbGlua2VyIGZsYWdzIiAgICAgICAgICAgICAgICAgICBGT1JDRSkKQEAgLTg2NywxMSArODY3LDExIEBACiAgICAgICAjIFdlIGZpcnN0IGF0dGVtcHQgdG8gbG9jYXRlIHRoZSBtc21waS5saWIuIFNob3VsZCBiZSBmaW5kIGl0LCB3ZSdsbCBhc3N1bWUgdGhhdCB0aGUgTVBJIHByZXNlbnQgaXMgaW5kZWVkCiAgICAgICAjIE1pY3Jvc29mdCBNUEkuCiAgICAgICBpZigiJHtDTUFLRV9TSVpFT0ZfVk9JRF9QfSIgRVFVQUwgOCkKLSAgICAgICAgc2V0KE1QSV9NU01QSV9MSUJfUEFUSCAiJEVOVntNU01QSV9MSUI2NH0iKQotICAgICAgICBzZXQoTVBJX01TTVBJX0lOQ19QQVRIX0VYVFJBICIkRU5We01TTVBJX0lOQ30veDY0IikKKyAgICAgICAgZmlsZShUT19DTUFLRV9QQVRIICIkRU5We01TTVBJX0xJQjY0fSIgTVBJX01TTVBJX0xJQl9QQVRIKQorICAgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7TVNNUElfSU5DfS94NjQiIE1QSV9NU01QSV9JTkNfUEFUSF9FWFRSQSkKICAgICAgIGVsc2UoKQotICAgICAgICBzZXQoTVBJX01TTVBJX0xJQl9QQVRIICIkRU5We01TTVBJX0xJQjMyfSIpCi0gICAgICAgIHNldChNUElfTVNNUElfSU5DX1BBVEhfRVhUUkEgIiRFTlZ7TVNNUElfSU5DfS94ODYiKQorICAgICAgICBmaWxlKFRPX0NNQUtFX1BBVEggIiRFTlZ7TVNNUElfTElCMzJ9IiBNUElfTVNNUElfTElCX1BBVEgpCisgICAgICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntNU01QSV9JTkN9L3g4NiIgTVBJX01TTVBJX0lOQ19QQVRIX0VYVFJBKQogICAgICAgZW5kaWYoKQogCiAgICAgICBmaW5kX2xpYnJhcnkoTVBJX21zbXBpX0xJQlJBUlkKQEAgLTEwNzIsMzQgKzEwNzIsMjggQEAKIGVuZG1hY3JvKCkKIAogbWFjcm8oX01QSV9hc3NlbWJsZV9pbmNsdWRlX2RpcnMgTEFORykKLSAgaWYoIiR7TVBJXyR7TEFOR31fQ09NUElMRVJ9IiBTVFJFUVVBTCAiJHtDTUFLRV8ke0xBTkd9X0NPTVBJTEVSfSIpCi0gICAgc2V0KE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiIikKLSAgZWxzZSgpCi0gICAgc2V0KE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSU30iKQotICAgIGlmKCIke0xBTkd9IiBNQVRDSEVTICIoQ3xDWFgpIikKLSAgICAgIGlmKE1QSV8ke0xBTkd9X0hFQURFUl9ESVIpCi0gICAgICAgIGxpc3QoQVBQRU5EIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9IRUFERVJfRElSfSIpCi0gICAgICBlbmRpZigpCi0gICAgZWxzZSgpICMgRm9ydHJhbgotICAgICAgaWYoTVBJXyR7TEFOR31fRjc3X0hFQURFUl9ESVIpCi0gICAgICAgIGxpc3QoQVBQRU5EIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9GNzdfSEVBREVSX0RJUn0iKQotICAgICAgZW5kaWYoKQotICAgICAgaWYoTVBJXyR7TEFOR31fTU9EVUxFX0RJUiBBTkQgTk9UICIke01QSV8ke0xBTkd9X01PRFVMRV9ESVJ9IiBJTl9MSVNUIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUykKLSAgICAgICAgbGlzdChBUFBFTkQgTVBJXyR7TEFOR31fSU5DTFVERV9ESVJTICIke01QSV8ke0xBTkd9X01PRFVMRV9ESVJ9IikKLSAgICAgIGVuZGlmKCkKKyAgc2V0KE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUworICAgICR7TVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTfQorICAgICR7TVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlN9CisgICAgKQorICBpZigiJHtMQU5HfSIgTUFUQ0hFUyAiKEN8Q1hYKSIpCisgICAgaWYoTVBJXyR7TEFOR31fSEVBREVSX0RJUikKKyAgICAgIGxpc3QoQVBQRU5EIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9IRUFERVJfRElSfSIpCiAgICAgZW5kaWYoKQotICAgIGlmKE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9WQVJTKQotICAgICAgZm9yZWFjaChNUElfQURESVRJT05BTF9JTkNfRElSIElOIExJU1RTIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9WQVJTKQotICAgICAgICBsaXN0KEFQUEVORCBNUElfJHtMQU5HfV9JTkNMVURFX0RJUlMgIiR7TVBJXyR7TVBJX0FERElUSU9OQUxfSU5DX0RJUn1fSU5DTFVERV9ESVJ9IikKLSAgICAgIGVuZGZvcmVhY2goKQorICBlbHNlKCkgIyBGb3J0cmFuCisgICAgaWYoTVBJXyR7TEFOR31fRjc3X0hFQURFUl9ESVIpCisgICAgICBsaXN0KEFQUEVORCBNUElfJHtMQU5HfV9JTkNMVURFX0RJUlMgIiR7TVBJXyR7TEFOR31fRjc3X0hFQURFUl9ESVJ9IikKICAgICBlbmRpZigpCisgICAgaWYoTVBJXyR7TEFOR31fTU9EVUxFX0RJUikKKyAgICAgIGxpc3QoQVBQRU5EIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUyAiJHtNUElfJHtMQU5HfV9NT0RVTEVfRElSfSIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUykKKyAgICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIE1QSV8ke0xBTkd9X0lOQ0xVREVfRElSUykKICAgZW5kaWYoKQogZW5kbWFjcm8oKQogCi1mdW5jdGlvbihfTVBJX3NwbGl0X2luY2x1ZGVfZGlycyBMQU5HKQotICBpZigiJHtNUElfJHtMQU5HfV9DT01QSUxFUn0iIFNUUkVRVUFMICIke0NNQUtFXyR7TEFOR31fQ09NUElMRVJ9IikKLSAgICByZXR1cm4oKQotICBlbmRpZigpCittYWNybyhfTVBJX3NwbGl0X2luY2x1ZGVfZGlycyBMQU5HKQogICAjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OiBTZWFyY2ggSU5DTFVERV9QQVRIIGlmIGdpdmVuLgogICBpZihNUElfJHtMQU5HfV9JTkNMVURFX1BBVEgpCiAgICAgbGlzdChBUFBFTkQgTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgIiR7TVBJXyR7TEFOR31fSU5DTFVERV9QQVRIfSIpCkBAIC0xMTA5LDIzICsxMTAzLDMwIEBACiAgICMgRm9yIEMvQysrLCB3ZSBqdXN0IG5lZWQgdG8gaGF2ZSBhIGxvb2sgZm9yIG1waS5oLgogICBpZigiJHtMQU5HfSIgTUFUQ0hFUyAiKEN8Q1hYKSIpCiAgICAgZmluZF9wYXRoKE1QSV8ke0xBTkd9X0hFQURFUl9ESVIgIm1waS5oIgotICAgICAgSElOVFMgJHtNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSU30KKyAgICAgIEhJTlRTCisgICAgICAgICR7TVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTfQorICAgICAgICAke01QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTfQogICAgICkKICAgICBtYXJrX2FzX2FkdmFuY2VkKE1QSV8ke0xBTkd9X0hFQURFUl9ESVIpCiAgICAgaWYoTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMpCiAgICAgICBsaXN0KFJFTU9WRV9JVEVNIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTICIke01QSV8ke0xBTkd9X0hFQURFUl9ESVJ9IikKICAgICBlbmRpZigpCisKICAgIyBGb3J0cmFuIGlzIG1vcmUgY29tcGxpY2F0ZWQgaGVyZTogQW4gaW1wbGVtZW50YXRpb24gY291bGQgcHJvdmlkZQogICAjIGFueSBvZiB0aGUgRm9ydHJhbiA3Ny85MC8yMDA4IEFQSXMgZm9yIE1QSS4gRm9yIGV4YW1wbGUsIE1TTVBJCiAgICMgb25seSBwcm92aWRlcyBGb3J0cmFuIDc3IGFuZCAtIGlmIG1waS5mOTAgaXMgYnVpbHQgLSBwb3RlbnRpYWxseQogICAjIGEgRm9ydHJhbiA5MCBtb2R1bGUuCiAgIGVsc2VpZigiJHtMQU5HfSIgU1RSRVFVQUwgIkZvcnRyYW4iKQogICAgIGZpbmRfcGF0aChNUElfJHtMQU5HfV9GNzdfSEVBREVSX0RJUiAibXBpZi5oIgotICAgICAgSElOVFMgJHtNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSU30KKyAgICAgIEhJTlRTCisgICAgICAgICR7TVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTfQorICAgICAgICAke01QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTfQogICAgICkKICAgICBmaW5kX3BhdGgoTVBJXyR7TEFOR31fTU9EVUxFX0RJUgogICAgICAgTkFNRVMgIm1waS5tb2QiICJtcGlfZjA4Lm1vZCIKLSAgICAgIEhJTlRTICR7TVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlN9CisgICAgICBISU5UUworICAgICAgICAke01QSV8ke0xBTkd9X0NPTVBJTEVSX0lOQ0xVREVfRElSU30KKyAgICAgICAgJHtNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSU30KICAgICApCiAgICAgaWYoTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMpCiAgICAgICBsaXN0KFJFTU9WRV9JVEVNIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTCkBAIC0xMTM1LDYgKzExMzYsNyBAQAogICAgIGVuZGlmKCkKICAgICBtYXJrX2FzX2FkdmFuY2VkKE1QSV8ke0xBTkd9X0Y3N19IRUFERVJfRElSIE1QSV8ke0xBTkd9X01PRFVMRV9ESVIpCiAgIGVuZGlmKCkKKwogICAjIFJlbW92ZSBkdXBsaWNhdGVzIGFuZCBkZWZhdWx0IHN5c3RlbSBkaXJlY3RvcmllcyBmcm9tIHRoZSBsaXN0LgogICBpZihNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSUykKICAgICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTKQpAQCAtMTE0MiwxNiArMTE0NCwxOSBAQAogICAgICAgbGlzdChSRU1PVkVfSVRFTSBNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSUyAke01QSV9JTVBMSUNJVF9JTkNfRElSfSkKICAgICBlbmRmb3JlYWNoKCkKICAgZW5kaWYoKQorCiAgIHNldChNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSUyAke01QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTfSBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGFkZGl0aW9uYWwgaW5jbHVkZSBkaXJlY3RvcmllcyIgRk9SQ0UpCi1lbmRmdW5jdGlvbigpCitlbmRtYWNybygpCiAKIG1hY3JvKF9NUElfY3JlYXRlX2ltcG9ydGVkX3RhcmdldCBMQU5HKQogICBpZihOT1QgVEFSR0VUIE1QSTo6TVBJXyR7TEFOR30pCiAgICAgYWRkX2xpYnJhcnkoTVBJOjpNUElfJHtMQU5HfSBJTlRFUkZBQ0UgSU1QT1JURUQpCiAgIGVuZGlmKCkKIAotICAjIFdoZW4gdGhpcyBpcyBjb25zdW1lZCBmb3IgY29tcGlsaW5nIENVREEsIHVzZSAnLVhjb21waWxlcicgdG8gd3JhcCAnLXB0aHJlYWQnLgotICBzdHJpbmcoUkVQTEFDRSAiLXB0aHJlYWQiICIkPCQ8Q09NUElMRV9MQU5HVUFHRTpDVURBPjpTSEVMTDotWGNvbXBpbGVyID4tcHRocmVhZCIKKyAgIyBXaGVuIHRoaXMgaXMgY29uc3VtZWQgZm9yIGNvbXBpbGluZyBDVURBLCB1c2UgJy1YY29tcGlsZXInIHRvIHdyYXAgJy1wdGhyZWFkJyBhbmQgJy1mZXhjZXB0aW9ucycuCisgIHN0cmluZyhSRVBMQUNFICItcHRocmVhZCIgIiQ8JDxDT01QSUxFX0xBTkdfQU5EX0lEOkNVREEsTlZJRElBPjpTSEVMTDotWGNvbXBpbGVyID4tcHRocmVhZCIKKyAgICBfTVBJXyR7TEFOR31fQ09NUElMRV9PUFRJT05TICIke01QSV8ke0xBTkd9X0NPTVBJTEVfT1BUSU9OU30iKQorICBzdHJpbmcoUkVQTEFDRSAiLWZleGNlcHRpb25zIiAiJDwkPENPTVBJTEVfTEFOR19BTkRfSUQ6Q1VEQSxOVklESUE+OlNIRUxMOi1YY29tcGlsZXIgPi1mZXhjZXB0aW9ucyIKICAgICBfTVBJXyR7TEFOR31fQ09NUElMRV9PUFRJT05TICIke01QSV8ke0xBTkd9X0NPTVBJTEVfT1BUSU9OU30iKQogICBzZXRfcHJvcGVydHkoVEFSR0VUIE1QSTo6TVBJXyR7TEFOR30gUFJPUEVSVFkgSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OUyAiJHtfTVBJXyR7TEFOR31fQ09NUElMRV9PUFRJT05TfSIpCiAgIHVuc2V0KF9NUElfJHtMQU5HfV9DT01QSUxFX09QVElPTlMpCkBAIC0xMTU5LDYgKzExNjQsOCBAQAogICBzZXRfcHJvcGVydHkoVEFSR0VUIE1QSTo6TVBJXyR7TEFOR30gUFJPUEVSVFkgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMgIiR7TVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OU30iKQogCiAgIGlmKE1QSV8ke0xBTkd9X0xJTktfRkxBR1MpCisgICAgc3RyaW5nKFJFUExBQ0UgIi1wdGhyZWFkIiAiJDwkPExJTktfTEFOR19BTkRfSUQ6Q1VEQSxOVklESUE+Oi1YbGlua2VyID4tcHRocmVhZCIKKyAgICAgIF9NUElfJHtMQU5HfV9MSU5LX0ZMQUdTICIke01QSV8ke0xBTkd9X0xJTktfRkxBR1N9IikKICAgICBzZXRfcHJvcGVydHkoVEFSR0VUIE1QSTo6TVBJXyR7TEFOR30gUFJPUEVSVFkgSU5URVJGQUNFX0xJTktfT1BUSU9OUyAiU0hFTEw6JHtNUElfJHtMQU5HfV9MSU5LX0ZMQUdTfSIpCiAgIGVuZGlmKCkKICAgIyBJZiB0aGUgY29tcGlsZXIgbGlua3MgTVBJIGltcGxpY2l0bHksIG5vIGxpYnJhcmllcyB3aWxsIGJlIGZvdW5kIGFzIHRoZXkncmUgY29udGFpbmVkIHdpdGhpbgpAQCAtMTQwMywxMyArMTQxMCwxNCBAQAogICAgIGVuZGlmKCkKICAgZWxzZSgpCiAgICAgc2V0KF9NUElfRklORF8ke0xBTkd9IEZBTFNFKQorICAgIHN0cmluZyhBUFBFTkQgX01QSV9GQUlMX1JFQVNPTiAiTVBJIGNvbXBvbmVudCAnJHtMQU5HfScgd2FzIHJlcXVlc3RlZCwgYnV0IGxhbmd1YWdlICR7TEFOR30gaXMgbm90IGVuYWJsZWQuICAiKQogICBlbmRpZigpCiAgIGlmKF9NUElfRklORF8ke0xBTkd9KQogICAgIGlmKCAke0xBTkd9IFNUUkVRVUFMIENYWCBBTkQgTk9UIE1QSUNYWCBJTl9MSVNUIE1QSV9GSU5EX0NPTVBPTkVOVFMgKQogICAgICAgc2V0KE1QSV9DWFhfU0tJUF9NUElDWFggRkFMU0UgQ0FDSEUgQk9PTCAiSWYgdHJ1ZSwgdGhlIE1QSS0yIEMrKyBiaW5kaW5ncyBhcmUgZGlzYWJsZWQgdXNpbmcgZGVmaW5pdGlvbnMuIikKICAgICAgIG1hcmtfYXNfYWR2YW5jZWQoTVBJX0NYWF9TS0lQX01QSUNYWCkKICAgICBlbmRpZigpCi0gICAgaWYoTk9UIChNUElfJHtMQU5HfV9MSUJfTkFNRVMgQU5EIChNUElfJHtMQU5HfV9JTkNMVURFX1BBVEggT1IgTVBJXyR7TEFOR31fSU5DTFVERV9ESVJTIE9SIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTKSkpCisgICAgaWYoTk9UIChNUElfJHtMQU5HfV9MSUJfTkFNRVMgQU5EIChNUElfJHtMQU5HfV9JTkNMVURFX1BBVEggT1IgTVBJXyR7TEFOR31fSU5DTFVERV9ESVJTIE9SIE1QSV8ke0xBTkd9X0NPTVBJTEVSX0lOQ0xVREVfRElSUykpKQogICAgICAgc2V0KE1QSV8ke0xBTkd9X1RSSUVEX0lNUExJQ0lUIEZBTFNFKQogICAgICAgc2V0KE1QSV8ke0xBTkd9X1dPUktTX0lNUExJQ0lUIEZBTFNFKQogICAgICAgaWYoTk9UIE1QSV8ke0xBTkd9X0NPTVBJTEVSIEFORCBOT1QgTVBJX0FTU1VNRV9OT19CVUlMVElOX01QSSkKQEAgLTE0OTQsNyArMTUwMiw3IEBACiAgICAgICAgICAgICBpZigiJHtMQU5HfSIgU1RSRVFVQUwgIkNYWCIgQU5EIE1QSV9DX1dSQVBQRVJfRk9VTkQpCiAgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9DT01QSUxFX09QVElPTlMgICAgICAgICAgJHtNUElfQ19DT01QSUxFX09QVElPTlN9ICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGNvbXBpbGF0aW9uIG9wdGlvbnMiICAgICAgICAgICApCiAgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9DT01QSUxFX0RFRklOSVRJT05TICAgICAgJHtNUElfQ19DT01QSUxFX0RFRklOSVRJT05TfSBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGNvbXBpbGF0aW9uIGRlZmluaXRpb25zIiAgICAgICApCi0gICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9BRERJVElPTkFMX0lOQ0xVREVfRElSUyAgJHtNUElfQ19JTkNMVURFX0RJUlN9ICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGFkZGl0aW9uYWwgaW5jbHVkZSBkaXJlY3RvcmllcyIpCisgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9DT01QSUxFUl9JTkNMVURFX0RJUlMgICAgJHtNUElfQ19JTkNMVURFX0RJUlN9ICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGNvbXBpbGVyIHdyYXBwZXIgaW5jbHVkZSBkaXJlY3RvcmllcyIpCiAgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9MSU5LX0ZMQUdTICAgICAgICAgICAgICAgJHtNUElfQ19MSU5LX0ZMQUdTfSAgICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGxpbmtlciBmbGFncyIgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgIHNldChNUElfJHtMQU5HfV9MSUJfTkFNRVMgICAgICAgICAgICAgICAgJHtNUElfQ19MSUJfTkFNRVN9ICAgICAgICAgICBDQUNIRSBTVFJJTkcgIk1QSSAke0xBTkd9IGxpYnJhcmllcyB0byBsaW5rIGFnYWluc3QiICAgICApCiAgICAgICAgICAgICBlbHNlKCkKQEAgLTE1MDUsOCArMTUxMywxMiBAQAogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKIAotICAgIF9NUElfc3BsaXRfaW5jbHVkZV9kaXJzKCR7TEFOR30pCi0gICAgX01QSV9hc3NlbWJsZV9pbmNsdWRlX2RpcnMoJHtMQU5HfSkKKyAgICBpZihOT1QgIiR7TVBJXyR7TEFOR31fQ09NUElMRVJ9IiBTVFJFUVVBTCAiJHtDTUFLRV8ke0xBTkd9X0NPTVBJTEVSfSIpCisgICAgICBfTVBJX3NwbGl0X2luY2x1ZGVfZGlycygke0xBTkd9KQorICAgICAgX01QSV9hc3NlbWJsZV9pbmNsdWRlX2RpcnMoJHtMQU5HfSkKKyAgICBlbHNlKCkKKyAgICAgIHNldChNUElfJHtMQU5HfV9JTkNMVURFX0RJUlMgIiIpCisgICAgZW5kaWYoKQogICAgIF9NUElfYXNzZW1ibGVfbGlicmFyaWVzKCR7TEFOR30pCiAKICAgICBfTVBJX2FkanVzdF9jb21waWxlX2RlZmluaXRpb25zKCR7TEFOR30pCkBAIC0xNTIwLDEzICsxNTMyLDIxIEBACiAgICAgIyBOZXh0LCB3ZSdsbCBpbml0aWFsaXplIHRoZSBNUEkgdmFyaWFibGVzIHRoYXQgaGF2ZSBub3QgYmVlbiBwcmV2aW91c2x5IHNldC4KICAgICBzZXQoTVBJXyR7TEFOR31fQ09NUElMRV9PUFRJT05TICAgICAgICAgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gY29tcGlsYXRpb24gZmxhZ3MiICAgICAgICAgICAgICkKICAgICBzZXQoTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUyAgICAgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gY29tcGlsYXRpb24gZGVmaW5pdGlvbnMiICAgICAgICkKKyAgICBzZXQoTVBJXyR7TEFOR31fQ09NUElMRVJfSU5DTFVERV9ESVJTICAgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gY29tcGlsZXIgd3JhcHBlciBpbmNsdWRlIGRpcmVjdG9yaWVzIikKICAgICBzZXQoTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gYWRkaXRpb25hbCBpbmNsdWRlIGRpcmVjdG9yaWVzIikKICAgICBzZXQoTVBJXyR7TEFOR31fTElOS19GTEFHUyAgICAgICAgICAgICAgICIiIENBQ0hFIFNUUklORyAiTVBJICR7TEFOR30gbGlua2VyIGZsYWdzIiAgICAgICAgICAgICAgICAgICkKICAgICBpZihOT1QgTVBJXyR7TEFOR31fQ09NUElMRVIgU1RSRVFVQUwgQ01BS0VfJHtMQU5HfV9DT01QSUxFUikKICAgICAgIHNldChNUElfJHtMQU5HfV9MSUJfTkFNRVMgICAgICAgICAgICAgICAgIiIgQ0FDSEUgU1RSSU5HICJNUEkgJHtMQU5HfSBsaWJyYXJpZXMgdG8gbGluayBhZ2FpbnN0IiAgICkKICAgICBlbmRpZigpCi0gICAgbWFya19hc19hZHZhbmNlZChNUElfJHtMQU5HfV9DT01QSUxFX09QVElPTlMgTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUyBNUElfJHtMQU5HfV9MSU5LX0ZMQUdTCi0gICAgICBNUElfJHtMQU5HfV9MSUJfTkFNRVMgTVBJXyR7TEFOR31fQURESVRJT05BTF9JTkNMVURFX0RJUlMgTVBJXyR7TEFOR31fQ09NUElMRVIpCisgICAgbWFya19hc19hZHZhbmNlZCgKKyAgICAgIE1QSV8ke0xBTkd9X0NPTVBJTEVfT1BUSU9OUworICAgICAgTVBJXyR7TEFOR31fQ09NUElMRV9ERUZJTklUSU9OUworICAgICAgTVBJXyR7TEFOR31fTElOS19GTEFHUworICAgICAgTVBJXyR7TEFOR31fTElCX05BTUVTCisgICAgICBNUElfJHtMQU5HfV9DT01QSUxFUl9JTkNMVURFX0RJUlMKKyAgICAgIE1QSV8ke0xBTkd9X0FERElUSU9OQUxfSU5DTFVERV9ESVJTCisgICAgICBNUElfJHtMQU5HfV9DT01QSUxFUgorICAgICAgKQogCiAgICAgIyBJZiB3ZSd2ZSBmb3VuZCBNUEksIHRoZW4gd2UnbGwgcGVyZm9ybSBhZGRpdGlvbmFsIGFuYWx5c2lzOiBEZXRlcm1pbmUgdGhlIE1QSSB2ZXJzaW9uLCBNUEkgbGlicmFyeSB2ZXJzaW9uLCBzdXBwb3J0ZWQKICAgICAjIE1QSSBBUElzIChpLmUuIE1QSS0yIEMrKyBiaW5kaW5ncykuIEZvciBGb3J0cmFuIHdlIGFsc28gbmVlZCB0byBmaW5kIHNwZWNpZmljIHBhcmFtZXRlcnMgaWYgd2UncmUgdW5kZXIgTVBJLTMuCkBAIC0xNjc1LDcgKzE2OTUsOCBAQAogICAgICAgICBsaXN0KEFQUEVORCBNUElfJHtMQU5HfV9SRVFVSVJFRF9WQVJTICJNUElfJHtMQU5HfV9XT1JLUyIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQotICAgIGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhNUElfJHtMQU5HfSBSRVFVSVJFRF9WQVJTICR7TVBJXyR7TEFOR31fUkVRVUlSRURfVkFSU30KKyAgICBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTVBJXyR7TEFOR30gTkFNRV9NSVNNQVRDSEVECisgICAgICBSRVFVSVJFRF9WQVJTICR7TVBJXyR7TEFOR31fUkVRVUlSRURfVkFSU30KICAgICAgIFZFUlNJT05fVkFSIE1QSV8ke0xBTkd9X1ZFUlNJT04pCiAKICAgICBpZihERUZJTkVEIE1QSV8ke0xBTkd9X1ZFUlNJT04pCkBAIC0xNzAwLDYgKzE3MjEsNyBAQAogZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE1QSQogICAgIFJFUVVJUkVEX1ZBUlMgJHtfTVBJX1JFUV9WQVJTfQogICAgIFZFUlNJT05fVkFSICR7X01QSV9NSU5fVkVSU0lPTn0KKyAgICBSRUFTT05fRkFJTFVSRV9NRVNTQUdFICIke19NUElfRkFJTF9SRUFTT059IgogICAgIEhBTkRMRV9DT01QT05FTlRTKQogCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE1hdGxhYi5jbWFrZSBiL01vZHVsZXMvRmluZE1hdGxhYi5jbWFrZQppbmRleCA5MmVlNzI5Li4wNWVjM2FlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRNYXRsYWIuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kTWF0bGFiLmNtYWtlCkBAIC0yNDEsNiArMjQxLDcgQEAKIGVuZGlmKCkKIAogc2V0KE1BVExBQl9WRVJTSU9OU19NQVBQSU5HCisgICJSMjAyMGE9OS44IgogICAiUjIwMTliPTkuNyIKICAgIlIyMDE5YT05LjYiCiAgICJSMjAxOGI9OS41IgpAQCAtOTkxLDcgKzk5MiwxMCBAQAogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCi0gIGlmKE5PVCBNYXRsYWJfVkVSU0lPTl9TVFJJTkcgVkVSU0lPTl9MRVNTICI5LjQiKSAjIEZvciA5LjQgKFIyMDE4YSkgYW5kIG5ld2VyLCBhZGQgQVBJIG1hY3JvCisgICMgRm9yIDkuNCAoUjIwMThhKSBhbmQgbmV3ZXIsIGFkZCBBUEkgbWFjcm8uCisgICMgQWRkIGl0IGZvciB1bmtub3duIHZlcnNpb25zIHRvbywganVzdCBpbiBjYXNlLgorICBpZihOT1QgTWF0bGFiX1ZFUlNJT05fU1RSSU5HIFZFUlNJT05fTEVTUyAiOS40IgorICAgICAgT1IgTWF0bGFiX1ZFUlNJT05fU1RSSU5HIFNUUkVRVUFMICJ1bmtub3duIikKICAgICBpZigkeyR7cHJlZml4fV9SMjAxOGF9KQogICAgICAgc2V0KE1FWF9BUElfTUFDUk8gIk1BVExBQl9ERUZBVUxUX1JFTEVBU0U9UjIwMThhIikKICAgICBlbHNlKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE9EQkMuY21ha2UgYi9Nb2R1bGVzL0ZpbmRPREJDLmNtYWtlCmluZGV4IDNmNzEwZGIuLjg4NDY1M2MgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE9EQkMuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kT0RCQy5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRPREJDCiAtLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIEZpbmQgYW4gT3BlbiBEYXRhYmFzZSBDb25uZWN0aXZpdHkgKE9EQkMpIGluY2x1ZGUgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5LgogCiBPbiBXaW5kb3dzLCB3aGVuIGJ1aWxkaW5nIHdpdGggVmlzdWFsIFN0dWRpbywgdGhpcyBtb2R1bGUgYXNzdW1lcyB0aGUgT0RCQwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kT3BlbkFDQy5jbWFrZSBiL01vZHVsZXMvRmluZE9wZW5BQ0MuY21ha2UKaW5kZXggNzQzZTBlMi4uZWQ1MmUzNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kT3BlbkFDQy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRPcGVuQUNDLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZE9wZW5BQ0MKIC0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogRGV0ZWN0IE9wZW5BQ0Mgc3VwcG9ydCBieSB0aGUgY29tcGlsZXIuCiAKIFRoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGRldGVjdCBPcGVuQUNDIHN1cHBvcnQgaW4gYSBjb21waWxlci4KQEAgLTI1NCw2ICsyNTYsNyBAQAogICAgIF9PUEVOQUNDX1NFVF9WRVJTSU9OX0JZX1NQRUNfREFURSgiJHtMQU5HfSIpCiAKICAgICBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoT3BlbkFDQ18ke0xBTkd9CisgICAgICBOQU1FX01JU01BVENIRUQKICAgICAgIFJFUVVJUkVEX1ZBUlMgT3BlbkFDQ18ke0xBTkd9X0ZMQUdTCiAgICAgICBWRVJTSU9OX1ZBUiBPcGVuQUNDXyR7TEFOR31fVkVSU0lPTgogICAgICkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE9wZW5BTC5jbWFrZSBiL01vZHVsZXMvRmluZE9wZW5BTC5jbWFrZQppbmRleCAyN2RjYWY1Li5iNWI5MmM1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRPcGVuQUwuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kT3BlbkFMLmNtYWtlCkBAIC01LDI3ICs1LDQ1IEBACiBGaW5kT3BlbkFMCiAtLS0tLS0tLS0tCiAKLQogRmluZHMgT3BlbiBBdWRpbyBMaWJyYXJ5IChPcGVuQUwpLgotVGhpcyBtb2R1bGUgZGVmaW5lcyBgYE9QRU5BTF9MSUJSQVJZIE9QRU5BTF9GT1VORGBgLCBpZgotZmFsc2UsIGRvIG5vdCB0cnkgdG8gbGluayB0byBPcGVuQUwgYGBPUEVOQUxfSU5DTFVERV9ESVJgYCwgd2hlcmUgdG8gZmluZAotdGhlIGhlYWRlcnMuCiAKLWBgJE9QRU5BTERJUmBgIGlzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgd291bGQgY29ycmVzcG9uZCB0byB0aGUKLWBgLi9jb25maWd1cmUgLS1wcmVmaXg9JE9QRU5BTERJUmBgIHVzZWQgaW4gYnVpbGRpbmcgT3BlbkFMLgorUHJvamVjdHMgdXNpbmcgdGhpcyBtb2R1bGUgc2hvdWxkIHVzZSBgYCNpbmNsdWRlICJhbC5oImBgIHRvIGluY2x1ZGUgdGhlIE9wZW5BTAoraGVhZGVyIGZpbGUsICoqbm90KiogYGAjaW5jbHVkZSA8QUwvYWwuaD5gYC4gIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUKK2xhdHRlciBpcyBub3QgZW50aXJlbHkgcG9ydGFibGUuICBXaW5kb3dzL0NyZWF0aXZlIExhYnMgZG9lcyBub3QgYnkgZGVmYXVsdCBwdXQKK3RoZWlyIGhlYWRlcnMgaW4gYGBBTC9gYCBhbmQgbWFjT1MgdXNlcyB0aGUgY29udmVudGlvbiBgYDxPcGVuQUwvYWwuaD5gYC4KIAotQ3JlYXRlZCBieSBFcmljIFdpbmcuICBUaGlzIHdhcyBpbmZsdWVuY2VkIGJ5IHRoZSBgYEZpbmRTREwuY21ha2VgYAotbW9kdWxlLgorSGludHMKK15eXl5eCisKK0Vudmlyb25tZW50IHZhcmlhYmxlIGBgJE9QRU5BTERJUmBgIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgcHJlZml4IG9mIE9wZW5BTAoraW5zdGFsbGF0aW9uIHRvIGJlIGZvdW5kLgorCitCeSBkZWZhdWx0IG9uIG1hY09TLCBzeXN0ZW0gZnJhbWV3b3JrIGlzIHNlYXJjaCBmaXJzdC4gIEluIG90aGVyIHdvcmRzLAorT3BlbkFMIGlzIHNlYXJjaGVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CisKKzEuIFN5c3RlbSBmcmFtZXdvcms6IGBgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3NgYCwgd2hvc2UgcHJpb3JpdHkgY2FuIGJlCisgICBjaGFuZ2VkIHZpYSBzZXR0aW5nIHRoZSA6dmFyaWFibGU6YENNQUtFX0ZJTkRfRlJBTUVXT1JLYCB2YXJpYWJsZS4KKzIuIEVudmlyb25tZW50IHZhcmlhYmxlIGBgJE9QRU5BTERJUmBgLgorMy4gU3lzdGVtIHBhdGhzLgorNC4gVXNlci1jb21waWxlZCBmcmFtZXdvcms6IGBgfi9MaWJyYXJ5L0ZyYW1ld29ya3NgYC4KKzUuIE1hbnVhbGx5IGNvbXBpbGVkIGZyYW1ld29yazogYGAvTGlicmFyeS9GcmFtZXdvcmtzYGAuCis2LiBBZGQtb24gcGFja2FnZTogYGAvb3B0YGAuCisKK1Jlc3VsdCBWYXJpYWJsZXMKK15eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKworYGBPUEVOQUxfRk9VTkRgYAorICBJZiBmYWxzZSwgZG8gbm90IHRyeSB0byBsaW5rIHRvIE9wZW5BTAorYGBPUEVOQUxfSU5DTFVERV9ESVJgYAorICBPcGVuQUwgaW5jbHVkZSBkaXJlY3RvcnkKK2BgT1BFTkFMX0xJQlJBUllgYAorICBQYXRoIHRvIHRoZSBPcGVuQUwgbGlicmFyeQorYGBPUEVOQUxfVkVSU0lPTl9TVFJJTkdgYAorICBIdW1hbi1yZWFkYWJsZSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiBvZiBPcGVuQUwKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKLSMgVGhpcyBtYWtlcyB0aGUgcHJlc3VtcHRpb24gdGhhdCB5b3UgYXJlIGluY2x1ZGUgYWwuaCBsaWtlCi0jICNpbmNsdWRlICJhbC5oIgotIyBhbmQgbm90Ci0jICNpbmNsdWRlIDxBTC9hbC5oPgotIyBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIGxhdHRlciBpcyBub3QgZW50aXJlbHkgcG9ydGFibGUuCi0jIFdpbmRvd3MvQ3JlYXRpdmUgTGFicyBkb2VzIG5vdCBieSBkZWZhdWx0IHB1dCB0aGVpciBoZWFkZXJzIGluIEFMLyBhbmQKLSMgT1MgWCB1c2VzIHRoZSBjb252ZW50aW9uIDxPcGVuQUwvYWwuaD4uCi0jCiAjIEZvciBXaW5kb3dzLCBDcmVhdGl2ZSBMYWJzIHNlZW1zIHRvIGhhdmUgYWRkZWQgYSByZWdpc3RyeSBrZXkgZm9yIHRoZWlyCiAjIE9wZW5BTCAxLjEgaW5zdGFsbGVyLiBJIGhhdmUgYWRkZWQgdGhhdCBrZXkgdG8gdGhlIGxpc3Qgb2Ygc2VhcmNoIHBhdGhzLAogIyBob3dldmVyLCB0aGUga2V5IGxvb2tzIGxpa2UgaXQgY291bGQgYmUgYSBsaXR0bGUgZnJhZ2lsZSBkZXBlbmRpbmcgb24KQEAgLTM2LDM2ICs1NCwxNyBAQAogIyBwbGF0Zm9ybXMgYXJlIGludHJvZHVjZWQuCiAjIFRoZSBPcGVuQUwgMS4wIGluc3RhbGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIHVzZWZ1bCBrZXkgSSBjYW4gdXNlLgogIyBJIGRvIG5vdCBrbm93IGlmIHRoZSBOdmlkaWEgT3BlbkFMIFNESyBoYXMgYSByZWdpc3RyeSBrZXkuCi0jCi0jIEZvciBPUyBYLCByZW1lbWJlciB0aGF0IE9wZW5BTCB3YXMgYWRkZWQgYnkgQXBwbGUgaW4gMTAuNCAoVGlnZXIpLgotIyBUbyBzdXBwb3J0IHRoZSBmcmFtZXdvcmssIEkgb3JpZ2luYWxseSB3cm90ZSBzcGVjaWFsIGZyYW1ld29yayBkZXRlY3Rpb24KLSMgY29kZSBpbiB0aGlzIG1vZHVsZSB3aGljaCBJIGhhdmUgbm93IHJlbW92ZWQgd2l0aCBDTWFrZSdzIGludHJvZHVjdGlvbgotIyBvZiBuYXRpdmUgc3VwcG9ydCBmb3IgZnJhbWV3b3Jrcy4KLSMgSW4gYWRkaXRpb24sIE9wZW5BTCBpcyBvcGVuIHNvdXJjZSwgYW5kIGl0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgb24gUGFudGhlci4KLSMgRnVydGhlcm1vcmUsIGR1ZSB0byBidWdzIGluIHRoZSBpbml0aWFsIE9wZW5BTCByZWxlYXNlLCBhbmQgdGhlCi0jIHRyYW5zaXRpb24gdG8gT3BlbkFMIDEuMSwgaXQgaXMgY29tbW9uIHRvIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGJ1aWx0LWluCi0jIGZyYW1ld29yay4KLSMgUGVyIG15IHJlcXVlc3QsIENNYWtlIHNob3VsZCBzZWFyY2ggZm9yIGZyYW1ld29ya3MgZmlyc3QgaW4KLSMgdGhlIGZvbGxvd2luZyBvcmRlcjoKLSMgfi9MaWJyYXJ5L0ZyYW1ld29ya3MvT3BlbkFMLmZyYW1ld29yay9IZWFkZXJzCi0jIC9MaWJyYXJ5L0ZyYW1ld29ya3MvT3BlbkFMLmZyYW1ld29yay9IZWFkZXJzCi0jIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5BTC5mcmFtZXdvcmsvSGVhZGVycwotIwotIyBPbiBPUyBYLCB0aGlzIHdpbGwgcHJlZmVyIHRoZSBGcmFtZXdvcmsgdmVyc2lvbiAoaWYgZm91bmQpIG92ZXIgb3RoZXJzLgotIyBQZW9wbGUgd2lsbCBoYXZlIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUgY2FjaGUgdmFsdWVzIG9mCi0jIE9QRU5BTF9MSUJSQVJZIHRvIG92ZXJyaWRlIHRoaXMgc2VsZWN0aW9uIG9yIHNldCB0aGUgQ01ha2UgZW52aXJvbm1lbnQKLSMgQ01BS0VfSU5DTFVERV9QQVRIIHRvIG1vZGlmeSB0aGUgc2VhcmNoIHBhdGhzLgogCiBmaW5kX3BhdGgoT1BFTkFMX0lOQ0xVREVfRElSIGFsLmgKICAgSElOVFMKICAgICBFTlYgT1BFTkFMRElSCi0gIFBBVEhfU1VGRklYRVMgaW5jbHVkZS9BTCBpbmNsdWRlL09wZW5BTCBpbmNsdWRlIEFMIE9wZW5BTAogICBQQVRIUwotICB+L0xpYnJhcnkvRnJhbWV3b3JrcwotICAvTGlicmFyeS9GcmFtZXdvcmtzCi0gIC9vcHQKLSAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXENyZWF0aXZlXCBMYWJzXFxPcGVuQUxcIDEuMVwgU29mdHdhcmVcIERldmVsb3BtZW50XCBLaXRcXDEuMDAuMDAwMDtJbnN0YWxsRGlyXQotKQorICAgIH4vTGlicmFyeS9GcmFtZXdvcmtzCisgICAgL0xpYnJhcnkvRnJhbWV3b3JrcworICAgIC9vcHQKKyAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcQ3JlYXRpdmVcIExhYnNcXE9wZW5BTFwgMS4xXCBTb2Z0d2FyZVwgRGV2ZWxvcG1lbnRcIEtpdFxcMS4wMC4wMDAwO0luc3RhbGxEaXJdCisgIFBBVEhfU1VGRklYRVMgaW5jbHVkZS9BTCBpbmNsdWRlL09wZW5BTCBpbmNsdWRlIEFMIE9wZW5BTAorICApCiAKIGlmKENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgOCkKICAgc2V0KF9PcGVuQUxfQVJDSF9ESVIgbGlicy9XaW42NCkKQEAgLTc3LDE3ICs3NiwyMSBAQAogICBOQU1FUyBPcGVuQUwgYWwgb3BlbmFsIE9wZW5BTDMyCiAgIEhJTlRTCiAgICAgRU5WIE9QRU5BTERJUgotICBQQVRIX1NVRkZJWEVTIGxpYngzMiBsaWI2NCBsaWIgbGliczY0IGxpYnMgJHtfT3BlbkFMX0FSQ0hfRElSfQogICBQQVRIUwotICB+L0xpYnJhcnkvRnJhbWV3b3JrcwotICAvTGlicmFyeS9GcmFtZXdvcmtzCi0gIC9vcHQKLSAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXENyZWF0aXZlXCBMYWJzXFxPcGVuQUxcIDEuMVwgU29mdHdhcmVcIERldmVsb3BtZW50XCBLaXRcXDEuMDAuMDAwMDtJbnN0YWxsRGlyXQotKQorICAgIH4vTGlicmFyeS9GcmFtZXdvcmtzCisgICAgL0xpYnJhcnkvRnJhbWV3b3JrcworICAgIC9vcHQKKyAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcQ3JlYXRpdmVcIExhYnNcXE9wZW5BTFwgMS4xXCBTb2Z0d2FyZVwgRGV2ZWxvcG1lbnRcIEtpdFxcMS4wMC4wMDAwO0luc3RhbGxEaXJdCisgIFBBVEhfU1VGRklYRVMgbGlieDMyIGxpYjY0IGxpYiBsaWJzNjQgbGlicyAke19PcGVuQUxfQVJDSF9ESVJ9CisgICkKIAogdW5zZXQoX09wZW5BTF9BUkNIX0RJUikKIAogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQotRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKE9wZW5BTCAgREVGQVVMVF9NU0cgIE9QRU5BTF9MSUJSQVJZIE9QRU5BTF9JTkNMVURFX0RJUikKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncygKKyAgT3BlbkFMCisgIFJFUVVJUkVEX1ZBUlMgT1BFTkFMX0xJQlJBUlkgT1BFTkFMX0lOQ0xVREVfRElSCisgIFZFUlNJT05fVkFSIE9QRU5BTF9WRVJTSU9OX1NUUklORworICApCiAKIG1hcmtfYXNfYWR2YW5jZWQoT1BFTkFMX0xJQlJBUlkgT1BFTkFMX0lOQ0xVREVfRElSKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kT3BlbkNMLmNtYWtlIGIvTW9kdWxlcy9GaW5kT3BlbkNMLmNtYWtlCmluZGV4IDk4OTE3MjQuLmIzZTVhOWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE9wZW5DTC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRPcGVuQ0wuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kT3BlbkNMCiAtLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiBGaW5kcyBPcGVuIENvbXB1dGluZyBMYW5ndWFnZSAoT3BlbkNMKQogCiBJTVBPUlRFRCBUYXJnZXRzCkBAIC03OCw2ICs4MCw4IEBACiAgICAgRU5WIENVREFfUEFUSAogICAgIEVOViBBVElTVFJFQU1TREtST09UCiAgICAgRU5WIE9DTF9ST09UCisgICAgL3Vzci9sb2NhbC9jdWRhCisgICAgL29wdC9jdWRhCiAgIFBBVEhfU1VGRklYRVMKICAgICBpbmNsdWRlCiAgICAgT3BlbkNML2NvbW1vbi9pbmMKQEAgLTEyNiw2ICsxMzAsOCBAQAogICAgICAgUEFUSFMKICAgICAgICAgRU5WIEFNREFQUFNES1JPT1QKICAgICAgICAgRU5WIENVREFfUEFUSAorICAgICAgICAvdXNyL2xvY2FsL2N1ZGEKKyAgICAgICAgL29wdC9jdWRhCiAgICAgICBQQVRIX1NVRkZJWEVTCiAgICAgICAgIGxpYi94ODYKICAgICAgICAgbGliKQpAQCAtMTM1LDYgKzE0MSw4IEBACiAgICAgICBQQVRIUwogICAgICAgICBFTlYgQU1EQVBQU0RLUk9PVAogICAgICAgICBFTlYgQ1VEQV9QQVRICisgICAgICAgIC91c3IvbG9jYWwvY3VkYQorICAgICAgICAvb3B0L2N1ZGEKICAgICAgIFBBVEhfU1VGRklYRVMKICAgICAgICAgbGliL3g4Nl82NAogICAgICAgICBsaWIveDY0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRPcGVuR0wuY21ha2UgYi9Nb2R1bGVzL0ZpbmRPcGVuR0wuY21ha2UKaW5kZXggMjNiYjAwMWQuLmUxMjcxZDQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZE9wZW5HTC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRPcGVuR0wuY21ha2UKQEAgLTEzMCwxNCArMTMwLDkgQEAKICAgc2V0KE9QRU5HTF9VU0VfJHtfQ09NUE9ORU5UfSAxKQogZW5kZm9yZWFjaCgpCiAKLWlmIChDWUdXSU4pCi0gIGZpbmRfcGF0aChPUEVOR0xfSU5DTFVERV9ESVIgR0wvZ2wuaCApCi0gIGxpc3QoQVBQRU5EIF9PcGVuR0xfUkVRVUlSRURfVkFSUyBPUEVOR0xfSU5DTFVERV9ESVIpCitzZXQoX09wZW5HTF9DQUNIRV9WQVJTKQogCi0gIGZpbmRfbGlicmFyeShPUEVOR0xfZ2xfTElCUkFSWSBvcGVuZ2wzMiApCi0gIGZpbmRfbGlicmFyeShPUEVOR0xfZ2x1X0xJQlJBUlkgZ2x1MzIgKQotCi1lbHNlaWYgKFdJTjMyKQoraWYgKFdJTjMyKQogCiAgIGlmKEJPUkxBTkQpCiAgICAgc2V0IChPUEVOR0xfZ2xfTElCUkFSWSBpbXBvcnQzMiBDQUNIRSBTVFJJTkcgIk9wZW5HTCBsaWJyYXJ5IGZvciB3aW4zMiIpCkBAIC0xNDcsNiArMTQyLDEwIEBACiAgICAgc2V0IChPUEVOR0xfZ2x1X0xJQlJBUlkgZ2x1MzIgQ0FDSEUgU1RSSU5HICJHTFUgbGlicmFyeSBmb3Igd2luMzIiKQogICBlbmRpZigpCiAKKyAgbGlzdChBUFBFTkQgX09wZW5HTF9DQUNIRV9WQVJTCisgICAgT1BFTkdMX2dsX0xJQlJBUlkKKyAgICBPUEVOR0xfZ2x1X0xJQlJBUlkKKyAgICApCiBlbHNlaWYgKEFQUExFKQogICAjIFRoZSBPcGVuR0wuZnJhbWV3b3JrIHByb3ZpZGVzIGJvdGggZ2wgYW5kIGdsdQogICBmaW5kX2xpYnJhcnkoT1BFTkdMX2dsX0xJQlJBUlkgT3BlbkdMIERPQyAiT3BlbkdMIGxpYnJhcnkgZm9yIE9TIFgiKQpAQCAtMTU1LDYgKzE1NCwxMSBAQAogICBmaW5kX3BhdGgoT1BFTkdMX0lOQ0xVREVfRElSIE9wZW5HTC9nbC5oIERPQyAiSW5jbHVkZSBmb3IgT3BlbkdMIG9uIE9TIFgiKQogICBsaXN0KEFQUEVORCBfT3BlbkdMX1JFUVVJUkVEX1ZBUlMgT1BFTkdMX0lOQ0xVREVfRElSKQogCisgIGxpc3QoQVBQRU5EIF9PcGVuR0xfQ0FDSEVfVkFSUworICAgIE9QRU5HTF9JTkNMVURFX0RJUgorICAgIE9QRU5HTF9nbF9MSUJSQVJZCisgICAgT1BFTkdMX2dsdV9MSUJSQVJZCisgICAgKQogZWxzZSgpCiAgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJIUC1VWCIpCiAgICAgIyBIYW5kbGUgSFAtVVggY2FzZXMgd2hlcmUgd2Ugb25seSB3YW50IHRvIGZpbmQgT3BlbkdMIGluIGVpdGhlciBocHV4NjQKQEAgLTE5NCw2ICsxOTgsMTIgQEAKICAgICAvdXNyL29wZW53aW4vc2hhcmUvaW5jbHVkZQogICAgIC9vcHQvZ3JhcGhpY3MvT3BlbkdML2luY2x1ZGUKICAgKQorICBsaXN0KEFQUEVORCBfT3BlbkdMX0NBQ0hFX1ZBUlMKKyAgICBPUEVOR0xfSU5DTFVERV9ESVIKKyAgICBPUEVOR0xfR0xYX0lOQ0xVREVfRElSCisgICAgT1BFTkdMX0VHTF9JTkNMVURFX0RJUgorICAgIE9QRU5HTF94bWVzYV9JTkNMVURFX0RJUgorICAgICkKIAogICAjIFNlYXJjaCBmb3IgdGhlIEdMVk5EIGxpYnJhcmllcy4gIFdlIGRvIHRoaXMgcmVnYXJkbGVzcyBvZiBDT01QT05FTlRTOyB3ZSdsbAogICAjIHRha2UgaW50byBhY2NvdW50IHRoZSBDT01QT05FTlRTIGxvZ2ljIGxhdGVyLgpAQCAtMjIyLDYgKzIzMiwxMyBAQAogICAgICAgICAgIC91c3Ivc2hsaWIKICAgKQogCisgIGxpc3QoQVBQRU5EIF9PcGVuR0xfQ0FDSEVfVkFSUworICAgIE9QRU5HTF9vcGVuZ2xfTElCUkFSWQorICAgIE9QRU5HTF9nbHhfTElCUkFSWQorICAgIE9QRU5HTF9lZ2xfTElCUkFSWQorICAgIE9QRU5HTF9nbHVfTElCUkFSWQorICAgICkKKwogICBzZXQoX09wZW5HTF9HTF9QT0xJQ1lfV0FSTiAwKQogICBpZihOT1QgREVGSU5FRCBPcGVuR0xfR0xfUFJFRkVSRU5DRSkKICAgICBzZXQoT3BlbkdMX0dMX1BSRUZFUkVOQ0UgIiIpCkBAIC0yNjgsNiArMjg1LDcgQEAKICAgICAgICAgICAgICR7X09QRU5HTF9MSUJfUEFUSH0KICAgICAgIFBBVEhfU1VGRklYRVMgbGliZ2x2bmQKICAgICAgICkKKyAgICBsaXN0KEFQUEVORCBfT3BlbkdMX0NBQ0hFX1ZBUlMgT1BFTkdMX2dsX0xJQlJBUlkpCiAgIGVuZGlmKCkKIAogICBpZihfT3BlbkdMX0dMX1BPTElDWV9XQVJOIEFORCBPUEVOR0xfZ2xfTElCUkFSWSBBTkQgT1BFTkdMX29wZW5nbF9MSUJSQVJZIEFORCBPUEVOR0xfZ2x4X0xJQlJBUlkpCkBAIC01MzIsMTQgKzU1MCw1IEBACiAjIFRoaXMgZGVwcmVjYXRlZCBzZXR0aW5nIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggQ01ha2UxLjQKIHNldChPUEVOR0xfSU5DTFVERV9QQVRIICR7T1BFTkdMX0lOQ0xVREVfRElSfSkKIAotbWFya19hc19hZHZhbmNlZCgKLSAgT1BFTkdMX0lOQ0xVREVfRElSCi0gIE9QRU5HTF94bWVzYV9JTkNMVURFX0RJUgotICBPUEVOR0xfZWdsX0xJQlJBUlkKLSAgT1BFTkdMX2dsdV9MSUJSQVJZCi0gIE9QRU5HTF9nbHhfTElCUkFSWQotICBPUEVOR0xfZ2xfTElCUkFSWQotICBPUEVOR0xfb3BlbmdsX0xJQlJBUlkKLSAgT1BFTkdMX0VHTF9JTkNMVURFX0RJUgotICBPUEVOR0xfR0xYX0lOQ0xVREVfRElSCi0pCittYXJrX2FzX2FkdmFuY2VkKCR7X09wZW5HTF9DQUNIRV9WQVJTfSkKK3Vuc2V0KF9PcGVuR0xfQ0FDSEVfVkFSUykKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZE9wZW5NUC5jbWFrZSBiL01vZHVsZXMvRmluZE9wZW5NUC5jbWFrZQppbmRleCA5MGQxYzNlLi5iYjM4ZTI4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRPcGVuTVAuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kT3Blbk1QLmNtYWtlCkBAIC05Niw3ICs5Niw3IEBACiAgICAgdW5zZXQoT3Blbk1QX0ZMQUdfQ0FORElEQVRFUykKIAogICAgIHNldChPTVBfRkxBR19HTlUgIi1mb3Blbm1wIikKLSAgICBzZXQoT01QX0ZMQUdfQ2xhbmcgIi1mb3Blbm1wPWxpYm9tcCIgIi1mb3Blbm1wPWxpYmlvbXA1IiAiLWZvcGVubXAiKQorICAgIHNldChPTVBfRkxBR19DbGFuZyAiLWZvcGVubXA9bGlib21wIiAiLWZvcGVubXA9bGliaW9tcDUiICItZm9wZW5tcCIgIi1YY2xhbmcgLWZvcGVubXAiKQogICAgIHNldChPTVBfRkxBR19BcHBsZUNsYW5nICItWGNsYW5nIC1mb3Blbm1wIikKICAgICBzZXQoT01QX0ZMQUdfSFAgIitPb3Blbm1wIikKICAgICBpZihXSU4zMikKQEAgLTI5OSw2ICsyOTksMjUgQEAKICAgICAgICAgICBicmVhaygpCiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYoQ01BS0VfJHtMQU5HfV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiQ2xhbmciIEFORCBXSU4zMikKKyAgICAgICMgQ2hlY2sgZm9yIHNlcGFyYXRlIE9wZW5NUCBsaWJyYXJ5IGZvciBDbGFuZyBvbiBXaW5kb3dzCisgICAgICBmaW5kX2xpYnJhcnkoT3Blbk1QX2xpYm9tcF9MSUJSQVJZCisgICAgICAgIE5BTUVTIGxpYm9tcCBsaWJnb21wIGxpYmlvbXA1CisgICAgICAgIEhJTlRTICR7Q01BS0VfJHtMQU5HfV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfQorICAgICAgKQorICAgICAgbWFya19hc19hZHZhbmNlZChPcGVuTVBfbGlib21wX0xJQlJBUlkpCisgICAgICBpZihPcGVuTVBfbGlib21wX0xJQlJBUlkpCisgICAgICAgIHRyeV9jb21waWxlKCBPcGVuTVBfQ09NUElMRV9SRVNVTFRfJHtGTEFHX01PREV9XyR7T1BFTk1QX1BMQUlOX0ZMQUd9ICR7Q01BS0VfQklOQVJZX0RJUn0gJHtfT1BFTk1QX1RFU1RfU1JDfQorICAgICAgICAgIENNQUtFX0ZMQUdTICItRENPTVBJTEVfREVGSU5JVElPTlM6U1RSSU5HPSR7T1BFTk1QX0ZMQUdTX1RFU1R9IgorICAgICAgICAgIExJTktfTElCUkFSSUVTICR7Q01BS0VfJHtMQU5HfV9WRVJCT1NFX0ZMQUd9ICR7T3Blbk1QX2xpYm9tcF9MSUJSQVJZfQorICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBPcGVuTVBfVFJZX0NPTVBJTEVfT1VUUFVUCisgICAgICAgICkKKyAgICAgICAgaWYoT3Blbk1QX0NPTVBJTEVfUkVTVUxUXyR7RkxBR19NT0RFfV8ke09QRU5NUF9QTEFJTl9GTEFHfSkKKyAgICAgICAgICBzZXQoIiR7T1BFTk1QX0ZMQUdfVkFSfSIgIiR7T1BFTk1QX0ZMQUd9IiBQQVJFTlRfU0NPUEUpCisgICAgICAgICAgc2V0KCIke09QRU5NUF9MSUJfTkFNRVNfVkFSfSIgImxpYm9tcCIgUEFSRU5UX1NDT1BFKQorICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQogICAgIGVsc2UoKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiRGV0ZWN0aW5nICR7TEFOR30gT3Blbk1QIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPcGVuTVBfVFJZX0NPTVBJTEVfT1VUUFVUfVxuXG4iKQpAQCAtNDI1LDEzICs0NDQsMTIgQEAKICAgICBpZihOT1QgREVGSU5FRCBPcGVuTVBfJHtMQU5HfV9GTEFHUyBPUiAiJHtPcGVuTVBfJHtMQU5HfV9GTEFHU30iIFNUUkVRVUFMICJOT1RGT1VORCIKICAgICAgIE9SIE5PVCBERUZJTkVEIE9wZW5NUF8ke0xBTkd9X0xJQl9OQU1FUyBPUiAiJHtPcGVuTVBfJHtMQU5HfV9MSUJfTkFNRVN9IiBTVFJFUVVBTCAiTk9URk9VTkQiKQogICAgICAgX09QRU5NUF9HRVRfRkxBR1MoIiR7TEFOR30iICIke0xBTkd9IiBPcGVuTVBfJHtMQU5HfV9GTEFHU19XT1JLIE9wZW5NUF8ke0xBTkd9X0xJQl9OQU1FU19XT1JLKQorICAgICAgc2V0KE9wZW5NUF8ke0xBTkd9X0ZMQUdTICIke09wZW5NUF8ke0xBTkd9X0ZMQUdTX1dPUkt9IgorICAgICAgICBDQUNIRSBTVFJJTkcgIiR7TEFOR30gY29tcGlsZXIgZmxhZ3MgZm9yIE9wZW5NUCBwYXJhbGxlbGl6YXRpb24iIEZPUkNFKQorICAgICAgc2V0KE9wZW5NUF8ke0xBTkd9X0xJQl9OQU1FUyAiJHtPcGVuTVBfJHtMQU5HfV9MSUJfTkFNRVNfV09SS30iCisgICAgICAgIENBQ0hFIFNUUklORyAiJHtMQU5HfSBjb21waWxlciBsaWJyYXJpZXMgZm9yIE9wZW5NUCBwYXJhbGxlbGl6YXRpb24iIEZPUkNFKQorICAgICAgbWFya19hc19hZHZhbmNlZChPcGVuTVBfJHtMQU5HfV9GTEFHUyBPcGVuTVBfJHtMQU5HfV9MSUJfTkFNRVMpCiAgICAgZW5kaWYoKQotCi0gICAgc2V0KE9wZW5NUF8ke0xBTkd9X0ZMQUdTICIke09wZW5NUF8ke0xBTkd9X0ZMQUdTX1dPUkt9IgotICAgICAgQ0FDSEUgU1RSSU5HICIke0xBTkd9IGNvbXBpbGVyIGZsYWdzIGZvciBPcGVuTVAgcGFyYWxsZWxpemF0aW9uIikKLSAgICBzZXQoT3Blbk1QXyR7TEFOR31fTElCX05BTUVTICIke09wZW5NUF8ke0xBTkd9X0xJQl9OQU1FU19XT1JLfSIKLSAgICAgIENBQ0hFIFNUUklORyAiJHtMQU5HfSBjb21waWxlciBsaWJyYXJpZXMgZm9yIE9wZW5NUCBwYXJhbGxlbGl6YXRpb24iKQotICAgIG1hcmtfYXNfYWR2YW5jZWQoT3Blbk1QXyR7TEFOR31fRkxBR1MgT3Blbk1QXyR7TEFOR31fTElCX05BTUVTKQogICBlbmRpZigpCiBlbmRmb3JlYWNoKCkKIApAQCAtNDkxLDggKzUwOSw4IEBACiAgICAgICBfT1BFTk1QX0dFVF9TUEVDX0RBVEUoIiR7TEFOR30iIE9wZW5NUF8ke0xBTkd9X1NQRUNfREFURV9JTlRFUk5BTCkKICAgICAgIHNldChPcGVuTVBfJHtMQU5HfV9TUEVDX0RBVEUgIiR7T3Blbk1QXyR7TEFOR31fU1BFQ19EQVRFX0lOVEVSTkFMfSIgQ0FDSEUKICAgICAgICAgSU5URVJOQUwgIiR7TEFOR30gY29tcGlsZXIncyBPcGVuTVAgc3BlY2lmaWNhdGlvbiBkYXRlIikKLSAgICAgIF9PUEVOTVBfU0VUX1ZFUlNJT05fQllfU1BFQ19EQVRFKCIke0xBTkd9IikKICAgICBlbmRpZigpCisgICAgX09QRU5NUF9TRVRfVkVSU0lPTl9CWV9TUEVDX0RBVEUoIiR7TEFOR30iKQogCiAgICAgc2V0KE9wZW5NUF8ke0xBTkd9X0ZJTkRfUVVJRVRMWSAke09wZW5NUF9GSU5EX1FVSUVUTFl9KQogICAgIHNldChPcGVuTVBfJHtMQU5HfV9GSU5EX1JFUVVJUkVEICR7T3Blbk1QX0ZJTkRfUkVRVUlSRUR9KQpAQCAtNTA5LDYgKzUyNyw3IEBACiAgICAgZW5kaWYoKQogCiAgICAgZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE9wZW5NUF8ke0xBTkd9CisgICAgICBOQU1FX01JU01BVENIRUQKICAgICAgIFJFUVVJUkVEX1ZBUlMgT3Blbk1QXyR7TEFOR31fRkxBR1MgJHtfT1BFTk1QXyR7TEFOR31fUkVRVUlSRURfTElCX1ZBUlN9CiAgICAgICBWRVJTSU9OX1ZBUiBPcGVuTVBfJHtMQU5HfV9WRVJTSU9OCiAgICAgKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kT3BlblNTTC5jbWFrZSBiL01vZHVsZXMvRmluZE9wZW5TU0wuY21ha2UKaW5kZXggNDc4YTU5Mi4uOTE5Njg1MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kT3BlblNTTC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRPcGVuU1NMLmNtYWtlCkBAIC0yMiw2ICsyMiwyNyBAQAogICBUaGUgT3BlblNTTCBgYHNzbGBgIGxpYnJhcnksIGlmIGZvdW5kLgogYGBPcGVuU1NMOjpDcnlwdG9gYAogICBUaGUgT3BlblNTTCBgYGNyeXB0b2BgIGxpYnJhcnksIGlmIGZvdW5kLgorYGBPcGVuU1NMOjphcHBsaW5rYGAKKyAgVGhlIE9wZW5TU0wgYGBhcHBsaW5rYGAgY29tcG9uZW50cyB0aGF0IG1pZ2h0IGJlIG5lZWQgdG8gYmUgY29tcGlsZWQgaW50bworICBwcm9qZWN0cyB1bmRlciBNU1ZDLiBUaGlzIHRhcmdldCBpcyBhdmFpbGFibGUgb25seSBpZiBmb3VuZCBPcGVuU1NMIHZlcnNpb24KKyAgaXMgbm90IGxlc3MgdGhhbiAwLjkuOC4gQnkgbGlua2luZyB0aGlzIHRhcmdldCB0aGUgYWJvdmUgT3BlblNTTCB0YXJnZXRzIGNhbgorICBiZSBsaW5rZWQgZXZlbiBpZiB0aGUgcHJvamVjdCBoYXMgZGlmZmVyZW50IE1TVkMgcnVudGltZSBjb25maWd1cmF0aW9ucyB3aXRoCisgIHRoZSBhYm92ZSBPcGVuU1NMIHRhcmdldHMuIFRoaXMgdGFyZ2V0IGhhcyBubyBlZmZlY3Qgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4KKyAgTVNWQy4KKworTk9URTogRHVlIHRvIGhvdyBgYElOVEVSRkFDRV9TT1VSQ0VTYGAgYXJlIGNvbnN1bWVkIGJ5IHRoZSBjb25zdW1pbmcgdGFyZ2V0LAordW5sZXNzIHlvdSBjZXJ0YWlubHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIGl0IGlzIGFsd2F5cyBwcmVmZXJyZWQgdG8gbGluaworYGBPcGVuU1NMOjphcHBsaW5rYGAgdGFyZ2V0IGFzIGBgUFJJVkFURWBgIGFuZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIHRhcmdldCBpcworbGlua2VkIGF0IG1vc3Qgb25jZSBmb3IgdGhlIHdob2xlIGRlcGVuZGVuY3kgZ3JhcGggb2YgYW55IGxpYnJhcnkgb3IKK2V4ZWN1dGFibGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQorCisgICB0YXJnZXRfbGlua19saWJyYXJpZXMobXlUYXJnZXQgUFJJVkFURSBPcGVuU1NMOjphcHBsaW5rKQorCitPdGhlcndpc2UgeW91IHdvdWxkIHByb2JhYmx5IGVuY291bnRlciB1bmV4cGVjdGVkIHJhbmRvbSBwcm9ibGVtcyB3aGVuIGJ1aWxkaW5nCithbmQgbGlua2luZywgYXMgYm90aCB0aGUgSVNPIEMgYW5kIHRoZSBJU08gQysrIHN0YW5kYXJkIGNsYWltcyBhbG1vc3Qgbm90aGluZworYWJvdXQgd2hhdCBhIGxpbmsgcHJvY2VzcyBzaG91bGQgYmUuCiAKIFJlc3VsdCBWYXJpYWJsZXMKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTQ1LDYgKzY2LDEwIEBACiAgIEFsbCBPcGVuU1NMIGxpYnJhcmllcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLgogYGBPUEVOU1NMX1ZFUlNJT05gYAogICBUaGlzIGlzIHNldCB0byBgYCRtYWpvci4kbWlub3IuJHJldmlzaW9uJHBhdGNoYGAgKGUuZy4gYGAwLjkuOHNgYCkuCitgYE9QRU5TU0xfQVBQTElOS19TT1VSQ0VgYAorICBUaGUgc291cmNlcyBpbiB0aGUgdGFyZ2V0IGBgT3BlblNTTDo6YXBwbGlua2BgIHRoYXQgaXMgbWVudGlvbmVkIGFib3ZlLiBUaGlzCisgIHZhcmlhYmxlIHNoYWxsIGFsd2F5cyBiZSB1bmRlZmluZWQgaWYgZm91bmQgb3BlbnNzbCB2ZXJzaW9uIGlzIGxlc3MgdGhhbgorICAwLjkuOCBvciBpZiBwbGF0Zm9ybSBpcyBub3QgTVNWQy4KIAogSGludHMKIF5eXl5eCkBAIC0xMzEsNiArMTU2LDcgQEAKICAgJHtfT1BFTlNTTF9ST09UX0hJTlRTX0FORF9QQVRIU30KICAgSElOVFMKICAgICAke19PUEVOU1NMX0lOQ0xVREVESVJ9CisgICAgJHtfT1BFTlNTTF9JTkNMVURFX0RJUlN9CiAgIFBBVEhfU1VGRklYRVMKICAgICBpbmNsdWRlCiApCkBAIC0zMTksNiArMzQ1LDcgQEAKICAgICAke19PUEVOU1NMX1JPT1RfSElOVFNfQU5EX1BBVEhTfQogICAgIEhJTlRTCiAgICAgICAke19PUEVOU1NMX0xJQkRJUn0KKyAgICAgICR7X09QRU5TU0xfTElCUkFSWV9ESVJTfQogICAgIFBBVEhfU1VGRklYRVMKICAgICAgIGxpYgogICApCkBAIC0zMzAsNiArMzU3LDcgQEAKICAgICAke19PUEVOU1NMX1JPT1RfSElOVFNfQU5EX1BBVEhTfQogICAgIEhJTlRTCiAgICAgICAke19PUEVOU1NMX0xJQkRJUn0KKyAgICAgICR7X09QRU5TU0xfTElCUkFSWV9ESVJTfQogICAgIFBBVEhfU1VGRklYRVMKICAgICAgIGxpYgogICApCkBAIC00MTIsNiArNDQwLDE3IEBACiAgICAgZW5kaWYgKCkKIAogICAgIHNldChPUEVOU1NMX1ZFUlNJT04gIiR7T1BFTlNTTF9WRVJTSU9OX01BSk9SfS4ke09QRU5TU0xfVkVSU0lPTl9NSU5PUn0uJHtPUEVOU1NMX1ZFUlNJT05fRklYfSR7T1BFTlNTTF9WRVJTSU9OX1BBVENIX1NUUklOR30iKQorICBlbHNlICgpCisgICAgIyBTaW5jZSBPcGVuU1NMIDMuMC4wLCB0aGUgbmV3IHZlcnNpb24gZm9ybWF0IGlzIE1BSk9SLk1JTk9SLlBBVENIIGFuZAorICAgICMgYSBuZXcgT1BFTlNTTF9WRVJTSU9OX1NUUiBtYWNybyBjb250YWlucyBleGFjdGx5IHRoYXQKKyAgICBmaWxlKFNUUklOR1MgIiR7T1BFTlNTTF9JTkNMVURFX0RJUn0vb3BlbnNzbC9vcGVuc3Nsdi5oIiBPUEVOU1NMX1ZFUlNJT05fU1RSCisgICAgICAgICBSRUdFWCAiXiNbXHQgXSpkZWZpbmVbXHQgXStPUEVOU1NMX1ZFUlNJT05fU1RSW1x0IF0rXCIoWzAtOV0pK1xcLihbMC05XSkrXFwuKFswLTldKStcIi4qIikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi4qT1BFTlNTTF9WRVJTSU9OX1NUUltcdCBdK1wiKFswLTldK1xcLlswLTldK1xcLlswLTldKylcIi4qJCIKKyAgICAgICAgICAgIlxcMSIgT1BFTlNTTF9WRVJTSU9OX1NUUiAiJHtPUEVOU1NMX1ZFUlNJT05fU1RSfSIpCisKKyAgICBzZXQoT1BFTlNTTF9WRVJTSU9OICIke09QRU5TU0xfVkVSU0lPTl9TVFJ9IikKKworICAgIHVuc2V0KE9QRU5TU0xfVkVSU0lPTl9TVFIpCiAgIGVuZGlmICgpCiBlbmRpZiAoKQogCkBAIC00NTUsNyArNDk0LDcgQEAKICAgICAiQ291bGQgTk9UIGZpbmQgT3BlblNTTCwgdHJ5IHRvIHNldCB0aGUgcGF0aCB0byBPcGVuU1NMIHJvb3QgZm9sZGVyIGluIHRoZSBzeXN0ZW0gdmFyaWFibGUgT1BFTlNTTF9ST09UX0RJUiIKICkKIAotbWFya19hc19hZHZhbmNlZChPUEVOU1NMX0lOQ0xVREVfRElSIE9QRU5TU0xfTElCUkFSSUVTKQorbWFya19hc19hZHZhbmNlZChPUEVOU1NMX0lOQ0xVREVfRElSKQogCiBpZihPUEVOU1NMX0ZPVU5EKQogICBpZihOT1QgVEFSR0VUIE9wZW5TU0w6OkNyeXB0byBBTkQKQEAgLTUyMSw2ICs1NjAsMjggQEAKICAgICBlbmRpZigpCiAgICAgX09wZW5TU0xfdGFyZ2V0X2FkZF9kZXBlbmRlbmNpZXMoT3BlblNTTDo6U1NMKQogICBlbmRpZigpCisKKyAgaWYoIiR7T1BFTlNTTF9WRVJTSU9OX01BSk9SfS4ke09QRU5TU0xfVkVSU0lPTl9NQUpPUn0uJHtPUEVOU1NMX1ZFUlNJT05fRklYfSIgVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIwLjkuOCIpCisgICAgaWYoTVNWQykKKyAgICAgIGlmKEVYSVNUUyAiJHtPUEVOU1NMX0lOQ0xVREVfRElSfSIpCisgICAgICAgIHNldChfT1BFTlNTTF9hcHBsaW5rX3BhdGhzIFBBVEhTICR7T1BFTlNTTF9JTkNMVURFX0RJUn0pCisgICAgICBlbmRpZigpCisgICAgICBmaW5kX2ZpbGUoT1BFTlNTTF9BUFBMSU5LX1NPVVJDRQorICAgICAgICBOQU1FUworICAgICAgICAgIG9wZW5zc2wvYXBwbGluay5jCisgICAgICAgICR7X09QRU5TU0xfYXBwbGlua19wYXRoc30KKyAgICAgICAgTk9fREVGQVVMVF9QQVRIKQorICAgICAgaWYoT1BFTlNTTF9BUFBMSU5LX1NPVVJDRSkKKyAgICAgICAgc2V0KF9PUEVOU1NMX2FwcGxpbmtfaW50ZXJmYWNlX3NyY3MgJHtPUEVOU1NMX0FQUExJTktfU09VUkNFfSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgICAgaWYoTk9UIFRBUkdFVCBPcGVuU1NMOjphcHBsaW5rKQorICAgICAgYWRkX2xpYnJhcnkoT3BlblNTTDo6YXBwbGluayBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgICBzZXRfcHJvcGVydHkoVEFSR0VUIE9wZW5TU0w6OmFwcGxpbmsgQVBQRU5ECisgICAgICAgIFBST1BFUlRZIElOVEVSRkFDRV9TT1VSQ0VTCisgICAgICAgICAgJHtfT1BFTlNTTF9hcHBsaW5rX2ludGVyZmFjZV9zcmNzfSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogIyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmaW5kIGxpYnJhcnkgb3JkZXJpbmcKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFBORy5jbWFrZSBiL01vZHVsZXMvRmluZFBORy5jbWFrZQppbmRleCBiZDQwMGM3Li5mZDBlNGU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQTkcuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUE5HLmNtYWtlCkBAIC03Niw4ICs3Niw4IEBACiAgICMgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBwcmlvciB0byB0aGlzIG11bHRpLWNvbmZpZyBzZWFyY2gsIGhvbm9yCiAgICMgYW55IFBOR19MSUJSQVJZIHRoYXQgaXMgYWxyZWFkeSBzcGVjaWZpZWQgYW5kIHNraXAgdGhlIHNlYXJjaC4KICAgaWYoTk9UIFBOR19MSUJSQVJZKQotICAgIGZpbmRfbGlicmFyeShQTkdfTElCUkFSWV9SRUxFQVNFIE5BTUVTICR7UE5HX05BTUVTfSkKLSAgICBmaW5kX2xpYnJhcnkoUE5HX0xJQlJBUllfREVCVUcgTkFNRVMgJHtQTkdfTkFNRVNfREVCVUd9KQorICAgIGZpbmRfbGlicmFyeShQTkdfTElCUkFSWV9SRUxFQVNFIE5BTUVTICR7UE5HX05BTUVTfSBOQU1FU19QRVJfRElSKQorICAgIGZpbmRfbGlicmFyeShQTkdfTElCUkFSWV9ERUJVRyBOQU1FUyAke1BOR19OQU1FU19ERUJVR30gTkFNRVNfUEVSX0RJUikKICAgICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vU2VsZWN0TGlicmFyeUNvbmZpZ3VyYXRpb25zLmNtYWtlKQogICAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKFBORykKICAgICBtYXJrX2FzX2FkdmFuY2VkKFBOR19MSUJSQVJZX1JFTEVBU0UgUE5HX0xJQlJBUllfREVCVUcpCkBAIC05NCw2ICs5NCwxMCBAQAogICAgICAgc2V0KFBOR19JTkNMVURFX0RJUlMgJHtQTkdfUE5HX0lOQ0xVREVfRElSfSAke1pMSUJfSU5DTFVERV9ESVJ9ICkKICAgICAgIHNldChQTkdfSU5DTFVERV9ESVIgJHtQTkdfSU5DTFVERV9ESVJTfSApICMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAgIHNldChQTkdfTElCUkFSSUVTICR7UE5HX0xJQlJBUll9ICR7WkxJQl9MSUJSQVJZfSkKKyAgICAgIGlmKChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKSBBTkQKKyAgICAgICAgICgiJHtQTkdfTElCUkFSWX0iIE1BVENIRVMgIlxcJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVh9JCIpKQorICAgICAgICBsaXN0KEFQUEVORCBQTkdfTElCUkFSSUVTIG0pCisgICAgICBlbmRpZigpCiAKICAgICAgIGlmIChDWUdXSU4pCiAgICAgICAgIGlmKEJVSUxEX1NIQVJFRF9MSUJTKQpAQCAtMTEwLDYgKzExNCwxMiBAQAogICAgICAgICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TICIke19QTkdfQ09NUElMRV9ERUZJTklUSU9OU30iCiAgICAgICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7UE5HX0lOQ0xVREVfRElSU30iCiAgICAgICAgICAgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIFpMSUI6OlpMSUIpCisgICAgICAgIGlmKChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKSBBTkQKKyAgICAgICAgICAgKCIke1BOR19MSUJSQVJZfSIgTUFUQ0hFUyAiXFwke0NNQUtFX1NUQVRJQ19MSUJSQVJZX1NVRkZJWH0kIikpCisgICAgICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBQTkc6OlBORyBBUFBFTkQgUFJPUEVSVFkKKyAgICAgICAgICAgIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyBtKQorICAgICAgICBlbmRpZigpCisKICAgICAgICAgaWYoRVhJU1RTICIke1BOR19MSUJSQVJZfSIpCiAgICAgICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFBORzo6UE5HIFBST1BFUlRJRVMKICAgICAgICAgICAgIElNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xBTkdVQUdFUyAiQyIKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UgYi9Nb2R1bGVzL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlCmluZGV4IGQ4MjRlZTguLjRmYjA4MjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZQpAQCAtMjcsNiArMjcsNyBAQAogICAgICAgW1ZFUlNJT05fVkFSIDx2ZXJzaW9uLXZhcj5dCiAgICAgICBbSEFORExFX0NPTVBPTkVOVFNdCiAgICAgICBbQ09ORklHX01PREVdCisgICAgICBbTkFNRV9NSVNNQVRDSEVEXQogICAgICAgW1JFQVNPTl9GQUlMVVJFX01FU1NBR0UgPHJlYXNvbi1mYWlsdXJlLW1lc3NhZ2U+XQogICAgICAgW0ZBSUxfTUVTU0FHRSA8Y3VzdG9tLWZhaWx1cmUtbWVzc2FnZT5dCiAgICAgICApCkBAIC01Niw3ICs1Nyw4IEBACiAgICAgVGhlc2UgbWF5IGJlIG5hbWVkIGluIHRoZSBnZW5lcmF0ZWQgZmFpbHVyZSBtZXNzYWdlIGFza2luZyB0aGUKICAgICB1c2VyIHRvIHNldCB0aGUgbWlzc2luZyB2YXJpYWJsZSB2YWx1ZXMuICBUaGVyZWZvcmUgdGhlc2Ugc2hvdWxkCiAgICAgdHlwaWNhbGx5IGJlIGNhY2hlIGVudHJpZXMgc3VjaCBhcyBgYEZPT19MSUJSQVJZYGAgYW5kIG5vdCBvdXRwdXQKLSAgICB2YXJpYWJsZXMgbGlrZSBgYEZPT19MSUJSQVJJRVNgYC4KKyAgICB2YXJpYWJsZXMgbGlrZSBgYEZPT19MSUJSQVJJRVNgYC4gVGhpcyBvcHRpb24gaXMgbWFuZGF0b3J5IGlmCisgICAgYGBIQU5ETEVfQ09NUE9ORU5UU2BgIGlzIG5vdCBzcGVjaWZpZWQuCiAKICAgYGBWRVJTSU9OX1ZBUiA8dmVyc2lvbi12YXI+YGAKICAgICBTcGVjaWZ5IHRoZSBuYW1lIG9mIGEgdmFyaWFibGUgdGhhdCBob2xkcyB0aGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZQpAQCAtOTAsNiArOTIsMTIgQEAKICAgICBTcGVjaWZ5IGEgY3VzdG9tIGZhaWx1cmUgbWVzc2FnZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0CiAgICAgZ2VuZXJhdGVkIG1lc3NhZ2UuICBOb3QgcmVjb21tZW5kZWQuCiAKKyAgYGBOQU1FX01JU01BVENIRURgYAorICAgIEluZGljYXRlIHRoYXQgdGhlIGBgPFBhY2thZ2VOYW1lPmBgIGRvZXMgbm90IG1hdGNoCisgICAgYGAke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfWBgLiBUaGlzIGlzIHVzdWFsbHkgYSBtaXN0YWtlIGFuZCByYWlzZXMgYQorICAgIHdhcm5pbmcsIGJ1dCBpdCBtYXkgYmUgaW50ZW50aW9uYWwgZm9yIHVzYWdlIG9mIHRoZSBjb21tYW5kIGZvciBjb21wb25lbnRzCisgICAgb2YgYSBsYXJnZXIgcGFja2FnZS4KKwogRXhhbXBsZSBmb3IgdGhlIHNpbXBsZSBzaWduYXR1cmU6CiAKIC4uIGNvZGUtYmxvY2s6OiBjbWFrZQpAQCAtMTA2LDYgKzExNCwxNyBAQAogdGhlIGNvbnRlbnQgb2YgdGhlIGZpcnN0IGBgPHJlcXVpcmVkLXZhcj5gYC4gIE9uIHJlcGVhdGVkIENNYWtlIHJ1bnMsCiB0aGUgc2FtZSBtZXNzYWdlIHdpbGwgbm90IGJlIHByaW50ZWQgYWdhaW4uCiAKKy4uIG5vdGU6OgorCisgIElmIGBgPFBhY2thZ2VOYW1lPmBgIGRvZXMgbm90IG1hdGNoIGBgQ01BS0VfRklORF9QQUNLQUdFX05BTUVgYCBmb3IgdGhlCisgIGNhbGxpbmcgbW9kdWxlLCBhIHdhcm5pbmcgdGhhdCB0aGVyZSBpcyBhIG1pc21hdGNoIGlzIGdpdmVuLiBUaGUKKyAgYGBGUEhTQV9OQU1FX01JU01BVENIRURgYCB2YXJpYWJsZSBtYXkgYmUgc2V0IHRvIGJ5cGFzcyB0aGUgd2FybmluZyBpZiB1c2luZworICB0aGUgb2xkIHNpZ25hdHVyZSBhbmQgdGhlIGBgTkFNRV9NSVNNQVRDSEVEYGAgYXJndW1lbnQgdXNpbmcgdGhlIG5ldworICBzaWduYXR1cmUuIFRvIGF2b2lkIGZvcmNpbmcgdGhlIGNhbGxlciB0byByZXF1aXJlIG5ld2VyIHZlcnNpb25zIG9mIENNYWtlIGZvcgorICB1c2FnZSwgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgd2lsbCBiZSB1c2VkIGlmIGRlZmluZWQgd2hlbiB0aGUKKyAgYGBOQU1FX01JU01BVENIRURgYCBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGZvciB0aGUgbmV3IHNpZ25hdHVyZSAoYnV0IHVzaW5nCisgIGJvdGggaXMgYW4gZXJyb3IpLi4KKwogRXhhbXBsZSBmb3IgdGhlIGZ1bGwgc2lnbmF0dXJlOgogCiAuLiBjb2RlLWJsb2NrOjogY21ha2UKQEAgLTE5MCwxNSArMjA5LDMyIEBACiAKIGZ1bmN0aW9uKEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyBfTkFNRSBfRklSU1RfQVJHKQogCi0jIFNldCB1cCB0aGUgYXJndW1lbnRzIGZvciBgY21ha2VfcGFyc2VfYXJndW1lbnRzYC4KLSAgc2V0KG9wdGlvbnMgIENPTkZJR19NT0RFICBIQU5ETEVfQ09NUE9ORU5UUykKKyAgIyBTZXQgdXAgdGhlIGFyZ3VtZW50cyBmb3IgYGNtYWtlX3BhcnNlX2FyZ3VtZW50c2AuCisgIHNldChvcHRpb25zICBDT05GSUdfTU9ERSAgSEFORExFX0NPTVBPTkVOVFMgTkFNRV9NSVNNQVRDSEVEKQogICBzZXQob25lVmFsdWVBcmdzICBGQUlMX01FU1NBR0UgIFJFQVNPTl9GQUlMVVJFX01FU1NBR0UgVkVSU0lPTl9WQVIgIEZPVU5EX1ZBUikKICAgc2V0KG11bHRpVmFsdWVBcmdzIFJFUVVJUkVEX1ZBUlMpCiAKLSMgQ2hlY2sgd2hldGhlciB3ZSBhcmUgaW4gJ3NpbXBsZScgb3IgJ2V4dGVuZGVkJyBtb2RlOgorICAjIENoZWNrIHdoZXRoZXIgd2UgYXJlIGluICdzaW1wbGUnIG9yICdleHRlbmRlZCcgbW9kZToKICAgc2V0KF9LRVlXT1JEU19GT1JfRVhURU5ERURfTU9ERSAgJHtvcHRpb25zfSAke29uZVZhbHVlQXJnc30gJHttdWx0aVZhbHVlQXJnc30gKQogICBsaXN0KEZJTkQgX0tFWVdPUkRTX0ZPUl9FWFRFTkRFRF9NT0RFICIke19GSVJTVF9BUkd9IiBJTkRFWCkKIAorICB1bnNldChGUEhTQV9OQU1FX01JU01BVENIRURfb3ZlcnJpZGUpCisgIGlmIChERUZJTkVEIEZQSFNBX05BTUVfTUlTTUFUQ0hFRCkKKyAgICAjIElmIHRoZSB2YXJpYWJsZSBOQU1FX01JU01BVENIRUQgdmFyaWFibGUgaXMgc2V0LCBlcnJvciBpZiBpdCBpcyBwYXNzZWQgYXMKKyAgICAjIGFuIGFyZ3VtZW50LiBUaGUgZm9ybWVyIGlzIGZvciBvbGQgc2lnbmF0dXJlcywgdGhlIGxhdHRlciBpcyBmb3IgbmV3CisgICAgIyBzaWduYXR1cmVzLgorICAgIGxpc3QoRklORCBBUkdOICJOQU1FX01JU01BVENIRUQiIG5hbWVfbWlzbWF0Y2hlZF9pZHgpCisgICAgaWYgKE5PVCBuYW1lX21pc21hdGNoZWRfaWR4IEVRVUFMICItMSIpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAgICJUaGUgYE5BTUVfTUlTTUFUQ0hFRGAgYXJndW1lbnQgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVudCBvciAiCisgICAgICAgICJ0aGUgdmFyaWFibGUsIG5vdCBib3RoLiIpCisgICAgZW5kaWYgKCkKKworICAgICMgQnV0IHVzZSB0aGUgdmFyaWFibGUgaWYgaXQgaXMgbm90IGFuIGFyZ3VtZW50IHRvIGF2b2lkIGZvcmNpbmcgbWluaW11bQorICAgICMgQ01ha2UgdmVyc2lvbiBidW1wcyBmb3IgY2FsbGluZyBtb2R1bGVzLgorICAgIHNldChGUEhTQV9OQU1FX01JU01BVENIRURfb3ZlcnJpZGUgIiR7RlBIU0FfTkFNRV9NSVNNQVRDSEVEfSIpCisgIGVuZGlmICgpCisKICAgaWYoJHtJTkRFWH0gRVFVQUwgLTEpCiAgICAgc2V0KEZQSFNBX0ZBSUxfTUVTU0FHRSAke19GSVJTVF9BUkd9KQogICAgIHNldChGUEhTQV9SRVFVSVJFRF9WQVJTICR7QVJHTn0pCkBAIC0yMjIsMjcgKzI1OCw0NiBAQAogICAgICAgc2V0KEZQSFNBX1ZFUlNJT05fVkFSICR7X05BTUV9X1ZFUlNJT04pCiAgICAgZW5kaWYoKQogCi0gICAgaWYoTk9UIEZQSFNBX1JFUVVJUkVEX1ZBUlMpCisgICAgaWYoTk9UIEZQSFNBX1JFUVVJUkVEX1ZBUlMgQU5EIE5PVCBGUEhTQV9IQU5ETEVfQ09NUE9ORU5UUykKICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIk5vIFJFUVVJUkVEX1ZBUlMgc3BlY2lmaWVkIGZvciBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoKSIpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKKyAgaWYgKERFRklORUQgRlBIU0FfTkFNRV9NSVNNQVRDSEVEX292ZXJyaWRlKQorICAgIHNldChGUEhTQV9OQU1FX01JU01BVENIRUQgIiR7RlBIU0FfTkFNRV9NSVNNQVRDSEVEX292ZXJyaWRlfSIpCisgIGVuZGlmICgpCisKKyAgaWYgKERFRklORUQgQ01BS0VfRklORF9QQUNLQUdFX05BTUUKKyAgICAgIEFORCBOT1QgRlBIU0FfTkFNRV9NSVNNQVRDSEVECisgICAgICBBTkQgTk9UIF9OQU1FIFNUUkVRVUFMIENNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FKQorICAgIG1lc3NhZ2UoQVVUSE9SX1dBUk5JTkcKKyAgICAgICJUaGUgcGFja2FnZSBuYW1lIHBhc3NlZCB0byBgZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzYCAiCisgICAgICAiKCR7X05BTUV9KSBkb2VzIG5vdCBtYXRjaCB0aGUgbmFtZSBvZiB0aGUgY2FsbGluZyBwYWNrYWdlICIKKyAgICAgICIoJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX0pLiBUaGlzIGNhbiBsZWFkIHRvIHByb2JsZW1zIGluIGNhbGxpbmcgIgorICAgICAgImNvZGUgdGhhdCBleHBlY3RzIGBmaW5kX3BhY2thZ2VgIHJlc3VsdCB2YXJpYWJsZXMgKGUuZy4sIGBfRk9VTkRgKSAiCisgICAgICAidG8gZm9sbG93IGEgY2VydGFpbiBwYXR0ZXJuLiIpCisgIGVuZGlmICgpCisKICMgbm93IHRoYXQgd2UgY29sbGVjdGVkIGFsbCBhcmd1bWVudHMsIHByb2Nlc3MgdGhlbQogCiAgIGlmKCJ4JHtGUEhTQV9GQUlMX01FU1NBR0V9IiBTVFJFUVVBTCAieERFRkFVTFRfTVNHIikKICAgICBzZXQoRlBIU0FfRkFJTF9NRVNTQUdFICJDb3VsZCBOT1QgZmluZCAke19OQU1FfSIpCiAgIGVuZGlmKCkKIAotICBsaXN0KEdFVCBGUEhTQV9SRVFVSVJFRF9WQVJTIDAgX0ZJUlNUX1JFUVVJUkVEX1ZBUikKKyAgaWYgKEZQSFNBX1JFUVVJUkVEX1ZBUlMpCisgICAgbGlzdChHRVQgRlBIU0FfUkVRVUlSRURfVkFSUyAwIF9GSVJTVF9SRVFVSVJFRF9WQVIpCisgIGVuZGlmKCkKIAogICBzdHJpbmcoVE9VUFBFUiAke19OQU1FfSBfTkFNRV9VUFBFUikKICAgc3RyaW5nKFRPTE9XRVIgJHtfTkFNRX0gX05BTUVfTE9XRVIpCiAKICAgaWYoRlBIU0FfRk9VTkRfVkFSKQotICAgIGlmKEZQSFNBX0ZPVU5EX1ZBUiBNQVRDSEVTICJeJHtfTkFNRX1fRk9VTkQkIiAgT1IgIEZQSFNBX0ZPVU5EX1ZBUiBNQVRDSEVTICJeJHtfTkFNRV9VUFBFUn1fRk9VTkQkIikKKyAgICBzZXQoX0ZPVU5EX1ZBUl9VUFBFUiAke19OQU1FX1VQUEVSfV9GT1VORCkKKyAgICBzZXQoX0ZPVU5EX1ZBUl9NSVhFRCAke19OQU1FfV9GT1VORCkKKyAgICBpZihGUEhTQV9GT1VORF9WQVIgU1RSRVFVQUwgX0ZPVU5EX1ZBUl9NSVhFRCAgT1IgIEZQSFNBX0ZPVU5EX1ZBUiBTVFJFUVVBTCBfRk9VTkRfVkFSX1VQUEVSKQogICAgICAgc2V0KF9GT1VORF9WQVIgJHtGUEhTQV9GT1VORF9WQVJ9KQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIGFyZ3VtZW50IGZvciBGT1VORF9WQVIgaXMgXCIke0ZQSFNBX0ZPVU5EX1ZBUn1cIiwgYnV0IG9ubHkgXCIke19OQU1FfV9GT1VORFwiIGFuZCBcIiR7X05BTUVfVVBQRVJ9X0ZPVU5EXCIgYXJlIHZhbGlkIG5hbWVzLiIpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgYXJndW1lbnQgZm9yIEZPVU5EX1ZBUiBpcyBcIiR7RlBIU0FfRk9VTkRfVkFSfVwiLCBidXQgb25seSBcIiR7X0ZPVU5EX1ZBUl9NSVhFRH1cIiBhbmQgXCIke19GT1VORF9WQVJfVVBQRVJ9XCIgYXJlIHZhbGlkIG5hbWVzLiIpCiAgICAgZW5kaWYoKQogICBlbHNlKCkKICAgICBzZXQoX0ZPVU5EX1ZBUiAke19OQU1FX1VQUEVSfV9GT1VORCkKQEAgLTM4OCw3ICs0NDMsMTcgQEAKICAgICAgIF9GUEhTQV9IQU5ETEVfRkFJTFVSRV9DT05GSUdfTU9ERSgpCiAgICAgZWxzZSgpCiAgICAgICBpZihOT1QgVkVSU0lPTl9PSykKLSAgICAgICAgX0ZQSFNBX0ZBSUxVUkVfTUVTU0FHRSgiJHtGUEhTQV9GQUlMX01FU1NBR0V9OiAke1ZFUlNJT05fTVNHfSAoZm91bmQgJHske19GSVJTVF9SRVFVSVJFRF9WQVJ9fSkiKQorICAgICAgICBzZXQoUkVTVUxUX01TRykKKyAgICAgICAgaWYgKF9GSVJTVF9SRVFVSVJFRF9WQVIpCisgICAgICAgICAgc3RyaW5nIChBUFBFTkQgUkVTVUxUX01TRyAiZm91bmQgJHske19GSVJTVF9SRVFVSVJFRF9WQVJ9fSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgaWYgKENPTVBPTkVOVF9NU0cpCisgICAgICAgICAgaWYgKFJFU1VMVF9NU0cpCisgICAgICAgICAgICBzdHJpbmcgKEFQUEVORCBSRVNVTFRfTVNHICIsICIpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIHN0cmluZyAoQVBQRU5EIFJFU1VMVF9NU0cgIiR7Rk9VTkRfQ09NUE9ORU5UU19NU0d9IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBfRlBIU0FfRkFJTFVSRV9NRVNTQUdFKCIke0ZQSFNBX0ZBSUxfTUVTU0FHRX06ICR7VkVSU0lPTl9NU0d9ICgke1JFU1VMVF9NU0d9KSIpCiAgICAgICBlbHNlKCkKICAgICAgICAgX0ZQSFNBX0ZBSUxVUkVfTUVTU0FHRSgiJHtGUEhTQV9GQUlMX01FU1NBR0V9IChtaXNzaW5nOiR7TUlTU0lOR19WQVJTfSkgJHtWRVJTSU9OX01TR30iKQogICAgICAgZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUGF0Y2guY21ha2UgYi9Nb2R1bGVzL0ZpbmRQYXRjaC5jbWFrZQppbmRleCA0OTk4ODM5Li40MTA4NjUxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQYXRjaC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRQYXRjaC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRQYXRjaAogLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTAKKwogVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgogCiBgYFBhdGNoX0VYRUNVVEFCTEVgYApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUGVybExpYnMuY21ha2UgYi9Nb2R1bGVzL0ZpbmRQZXJsTGlicy5jbWFrZQppbmRleCA3ZTI3ZjMxLi5kNTc2Yjg2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQZXJsTGlicy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRQZXJsTGlicy5jbWFrZQpAQCAtMTA4LDYgKzEwOCw5IEBACiAgIGlmIChOT1QgUEVSTF9QT1NTSUJMRV9MSUJSQVJZX05BTUVTKQogICAgIHNldChQRVJMX1BPU1NJQkxFX0xJQlJBUllfTkFNRVMgcGVybCR7UEVSTF9WRVJTSU9OX1NUUklOR30gcGVybCkKICAgZW5kaWYoKQorICBpZihDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJDWUdXSU4iKQorICAgIGxpc3QgKEFQUEVORCBQRVJMX1BPU1NJQkxFX0xJQlJBUllfTkFNRVMgcGVybCR7UEVSTF9WRVJTSU9OX1NUUklOR30pCisgIGVuZGlmKCkKICAgaWYgKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIk1TWVN8Q1lHV0lOIikKICAgICAjIG9uIE1TWVMgYW5kIENZR1dJTiBlbnZpcm9ubWVudHMsIGN1cnJlbnQgcGVybCAtVjpsaWJwZXJsIGdpdmVzIHNoYXJlZCBsaWJyYXJ5IG5hbWUKICAgICAjIHJhdGhlciB0aGFuIHRoZSBpbXBvcnQgbGlicmFyeS4gU28sIGV4dGVuZHMgcG9zc2libGUgbGlicmFyeSBuYW1lcwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUGtnQ29uZmlnLmNtYWtlIGIvTW9kdWxlcy9GaW5kUGtnQ29uZmlnLmNtYWtlCmluZGV4IDIxMjFmNjYuLjkzODI3ZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFBrZ0NvbmZpZy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRQa2dDb25maWcuY21ha2UKQEAgLTM0LDE2ICszNCwzMSBAQAogZmluZF9wcm9ncmFtKFBLR19DT05GSUdfRVhFQ1VUQUJMRSBOQU1FUyBwa2ctY29uZmlnIERPQyAicGtnLWNvbmZpZyBleGVjdXRhYmxlIikKIG1hcmtfYXNfYWR2YW5jZWQoUEtHX0NPTkZJR19FWEVDVVRBQkxFKQogCitzZXQoX1BLR19DT05GSUdfRkFJTFVSRV9NRVNTQUdFICIiKQogaWYgKFBLR19DT05GSUdfRVhFQ1VUQUJMRSkKICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtQS0dfQ09ORklHX0VYRUNVVEFCTEV9IC0tdmVyc2lvbgotICAgIE9VVFBVVF9WQVJJQUJMRSBQS0dfQ09ORklHX1ZFUlNJT05fU1RSSU5HCi0gICAgRVJST1JfUVVJRVQKLSAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKyAgICBPVVRQVVRfVkFSSUFCTEUgUEtHX0NPTkZJR19WRVJTSU9OX1NUUklORyBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQorICAgIEVSUk9SX1ZBUklBQkxFIF9QS0dfQ09ORklHX1ZFUlNJT05fRVJST1IgRVJST1JfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQorICAgIFJFU1VMVF9WQVJJQUJMRSBfUEtHX0NPTkZJR19WRVJTSU9OX1JFU1VMVAorICAgICkKKworICBpZiAoTk9UIF9QS0dfQ09ORklHX1ZFUlNJT05fUkVTVUxUIEVRVUFMIDApCisgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICAgIiBfUEtHX0NPTkZJR19WRVJTSU9OX0VSUk9SICIgICAgICAke19QS0dfQ09ORklHX1ZFUlNJT05fRVJST1J9IikKKyAgICBzdHJpbmcoQVBQRU5EIF9QS0dfQ09ORklHX0ZBSUxVUkVfTUVTU0FHRQorICAgICAgIlRoZSBjb21tYW5kXG4iCisgICAgICAiICAgICAgXCIke1BLR19DT05GSUdfRVhFQ1VUQUJMRX1cIiAtLXZlcnNpb25cbiIKKyAgICAgICIgICAgZmFpbGVkIHdpdGggb3V0cHV0XG4ke19QS0dfQ09ORklHX1ZFUlNJT05fRVJST1J9IgorICAgICAgKQorICAgIHNldChQS0dfQ09ORklHX0VYRUNVVEFCTEUgIiIpCisgICAgdW5zZXQoUEtHX0NPTkZJR19WRVJTSU9OX1NUUklORykKKyAgZW5kaWYgKCkKKyAgdW5zZXQoX1BLR19DT05GSUdfVkVSU0lPTl9SRVNVTFQpCiBlbmRpZiAoKQogCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCiBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoUGtnQ29uZmlnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRURfVkFSUyBQS0dfQ09ORklHX0VYRUNVVEFCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFTT05fRkFJTFVSRV9NRVNTQUdFICIke19QS0dfQ09ORklHX0ZBSUxVUkVfTUVTU0FHRX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9WQVIgUEtHX0NPTkZJR19WRVJTSU9OX1NUUklORykKIAogIyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBtb2R1bGUgbmFtZSBpcyAiUGtnQ29uZmlnIiBidXQgdGhlIG5hbWUgb2YKQEAgLTE5Nyw3ICsyMTIsMTMgQEAKICAgZW5kaWYoKQogCiAgIHVuc2V0KF9zZWFyY2hfcGF0aHMpCisgIHVuc2V0KF9uZXh0X2lzX2ZyYW1ld29yaykKICAgZm9yZWFjaCAoZmxhZyBJTiBMSVNUUyAke19wcmVmaXh9X0xERkxBR1MpCisgICAgaWYgKF9uZXh0X2lzX2ZyYW1ld29yaykKKyAgICAgIGxpc3QoQVBQRU5EIF9saWJzICItZnJhbWV3b3JrICR7ZmxhZ30iKQorICAgICAgdW5zZXQoX25leHRfaXNfZnJhbWV3b3JrKQorICAgICAgY29udGludWUoKQorICAgIGVuZGlmICgpCiAgICAgaWYgKGZsYWcgTUFUQ0hFUyAiXi1MKC4qKSIpCiAgICAgICBsaXN0KEFQUEVORCBfc2VhcmNoX3BhdGhzICR7Q01BS0VfTUFUQ0hfMX0pCiAgICAgICBjb250aW51ZSgpCkBAIC0yMDUsNiArMjI2LDkgQEAKICAgICBpZiAoZmxhZyBNQVRDSEVTICJeLWwoLiopIikKICAgICAgIHNldChfcGtnX3NlYXJjaCAiJHtDTUFLRV9NQVRDSF8xfSIpCiAgICAgZWxzZSgpCisgICAgICBpZiAoZmxhZyBTVFJFUVVBTCAiLWZyYW1ld29yayIpCisgICAgICAgIHNldChfbmV4dF9pc19mcmFtZXdvcmsgVFJVRSkKKyAgICAgIGVuZGlmICgpCiAgICAgICBjb250aW51ZSgpCiAgICAgZW5kaWYoKQogCkBAIC0zNDEsNyArMzY1LDcgQEAKICAgICAgICMgcmVtb3ZlIGVtcHR5IHZhbHVlcyBmcm9tIHRoZSBsaXN0CiAgICAgICBsaXN0KFJFTU9WRV9JVEVNIF9wa2djb25maWdfcGF0aCAiIikKICAgICAgIGZpbGUoVE9fTkFUSVZFX1BBVEggIiR7X3BrZ2NvbmZpZ19wYXRofSIgX3BrZ2NvbmZpZ19wYXRoKQotICAgICAgaWYoVU5JWCkKKyAgICAgIGlmKENNQUtFX0hPU1RfVU5JWCkKICAgICAgICAgc3RyaW5nKFJFUExBQ0UgIjsiICI6IiBfcGtnY29uZmlnX3BhdGggIiR7X3BrZ2NvbmZpZ19wYXRofSIpCiAgICAgICAgIHN0cmluZyhSRVBMQUNFICJcXCAiICIgIiBfcGtnY29uZmlnX3BhdGggIiR7X3BrZ2NvbmZpZ19wYXRofSIpCiAgICAgICBlbmRpZigpCkBAIC0zNjQsNiArMzg4LDMwIEBACiAgIHVuc2V0KF9wa2djb25maWdfcGF0aF9vbGQpCiBlbmRtYWNybygpCiAKKyMgcGtnLWNvbmZpZyByZXR1cm5zIGZyYW1ld29ya3MgaW4gLS1saWJzLW9ubHktb3RoZXIKKyMgdGhleSBuZWVkIHRvIGJlIGluICR7X3ByZWZpeH1fTElCUkFSSUVTIHNvICItZnJhbWV3b3JrIGEgLWZyYW1ld29yayBiIiBkb2VzCisjIG5vdCBpbmNvcnJlY3RseSBiZSBjb21iaW5lZCB0byAiLWZyYW1ld29yayBhIGIiCitmdW5jdGlvbihfcGtnY29uZmlnX2V4dHJhY3RfZnJhbWV3b3JrcyBfcHJlZml4KQorICBzZXQobGRmbGFncyAiJHske19wcmVmaXh9X0xERkxBR1NfT1RIRVJ9IikKKyAgbGlzdChGSU5EIGxkZmxhZ3MgIi1mcmFtZXdvcmsiIEZSX1BPUykKKyAgbGlzdChMRU5HVEggbGRmbGFncyBMRF9MRU5HVEgpCisKKyAgIyByZWR1Y2UgbGVuZ3RoIGJ5IDEgYXMgd2UgbmVlZCAiLWZyYW1ld29yayIgYW5kIHRoZSBuZXh0IGVudHJ5CisgIG1hdGgoRVhQUiBMRF9MRU5HVEggIiR7TERfTEVOR1RIfSAtIDEiKQorICB3aGlsZSAoRlJfUE9TIEdSRUFURVIgLTEgQU5EIExEX0xFTkdUSCBHUkVBVEVSIEZSX1BPUykKKyAgICBsaXN0KFJFTU9WRV9BVCBsZGZsYWdzICR7RlJfUE9TfSkKKyAgICBsaXN0KEdFVCBsZGZsYWdzICR7RlJfUE9TfSBIRUFEKQorICAgIGxpc3QoUkVNT1ZFX0FUIGxkZmxhZ3MgJHtGUl9QT1N9KQorICAgIG1hdGgoRVhQUiBMRF9MRU5HVEggIiR7TERfTEVOR1RIfSAtIDIiKQorCisgICAgbGlzdChBUFBFTkQgTElCUyAiLWZyYW1ld29yayAke0hFQUR9IikKKworICAgIGxpc3QoRklORCBsZGZsYWdzICItZnJhbWV3b3JrIiBGUl9QT1MpCisgIGVuZHdoaWxlICgpCisgIHNldCgke19wcmVmaXh9X0xJQlJBUklFUyAkeyR7X3ByZWZpeH1fTElCUkFSSUVTfSAke0xJQlN9IFBBUkVOVF9TQ09QRSkKKyAgc2V0KCR7X3ByZWZpeH1fTERGTEFHU19PVEhFUiAiJHtsZGZsYWdzfSIgUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQorCiAjIHBrZy1jb25maWcgcmV0dXJucyAtaXN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzIGluIC0tY2ZsYWdzLW9ubHktb3RoZXIsCiAjIGRlcGVuZGluZyBvbiB0aGUgdmVyc2lvbiBhbmQgaWYgdGhlcmUgaXMgYSBzcGFjZSBiZXR3ZWVuIC1pc3lzdGVtIGFuZAogIyB0aGUgYWN0dWFsIHBhdGgKQEAgLTUzMiw2ICs1ODAsMTAgQEAKICAgICAgIF9wa2djb25maWdfaW52b2tlX2R5bigiJHtfcGtnX2NoZWNrX21vZHVsZXNfcGFja2FnZXN9IiAiJHtfcHJlZml4fSIgTERGTEFHUyAgICAgICAiIiAgICAgICAgICAgICAgICAgICAgLS1saWJzICkKICAgICAgIF9wa2djb25maWdfaW52b2tlX2R5bigiJHtfcGtnX2NoZWNrX21vZHVsZXNfcGFja2FnZXN9IiAiJHtfcHJlZml4fSIgTERGTEFHU19PVEhFUiAiIiAgICAgICAgICAgICAgICAgICAgLS1saWJzLW9ubHktb3RoZXIgKQogCisgICAgICBpZiAoQVBQTEUgQU5EICItZnJhbWV3b3JrIiBJTl9MSVNUICR7X3ByZWZpeH1fTERGTEFHU19PVEhFUikKKyAgICAgICAgX3BrZ2NvbmZpZ19leHRyYWN0X2ZyYW1ld29ya3MoIiR7X3ByZWZpeH0iKQorICAgICAgZW5kaWYoKQorCiAgICAgICBfcGtnY29uZmlnX2ludm9rZV9keW4oIiR7X3BrZ19jaGVja19tb2R1bGVzX3BhY2thZ2VzfSIgIiR7X3ByZWZpeH0iIElOQ0xVREVfRElSUyAgIihefCApKC1JfC1pc3lzdGVtID8pIiAtLWNmbGFncy1vbmx5LUkgKQogICAgICAgX3BrZ2NvbmZpZ19pbnZva2VfZHluKCIke19wa2dfY2hlY2tfbW9kdWxlc19wYWNrYWdlc30iICIke19wcmVmaXh9IiBDRkxBR1MgICAgICAgICIiICAgICAgICAgICAgICAgICAgICAtLWNmbGFncyApCiAgICAgICBfcGtnY29uZmlnX2ludm9rZV9keW4oIiR7X3BrZ19jaGVja19tb2R1bGVzX3BhY2thZ2VzfSIgIiR7X3ByZWZpeH0iIENGTEFHU19PVEhFUiAgIiIgICAgICAgICAgICAgICAgICAgIC0tY2ZsYWdzLW9ubHktb3RoZXIgKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUHJvdG9idWYuY21ha2UgYi9Nb2R1bGVzL0ZpbmRQcm90b2J1Zi5jbWFrZQppbmRleCAyZDQ1OTY1Li5mNmQ4ZmUzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQcm90b2J1Zi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRQcm90b2J1Zi5jbWFrZQpAQCAtMTE3LDcgKzExNyw3IEBACiAgIGBgUFlgYAogICAgIFZhcmlhYmxlIHRvIGRlZmluZSB3aXRoIGF1dG9nZW5lcmF0ZWQgUHl0aG9uIGZpbGVzCiAgIGBgQVJHTmBgCi0gICAgYGAucHJvdG9gYCBmaWxlc3MKKyAgICBgYC5wcm90b2BgIGZpbGVzCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiBmdW5jdGlvbihwcm90b2J1Zl9nZW5lcmF0ZSkKQEAgLTM3NiwxMSArMzc2LDEzIEBACiAgIGVsc2UoKQogICAgIGZpbmRfbGlicmFyeSgke25hbWV9X0xJQlJBUllfUkVMRUFTRQogICAgICAgTkFNRVMgJHtmaWxlbmFtZX0KKyAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgIFBBVEhTICR7UHJvdG9idWZfU1JDX1JPT1RfRk9MREVSfS92c3Byb2plY3RzLyR7X1BST1RPQlVGX0FSQ0hfRElSfVJlbGVhc2UpCiAgICAgbWFya19hc19hZHZhbmNlZCgke25hbWV9X0xJQlJBUllfUkVMRUFTRSkKIAogICAgIGZpbmRfbGlicmFyeSgke25hbWV9X0xJQlJBUllfREVCVUcKICAgICAgIE5BTUVTICR7ZmlsZW5hbWV9ZCAke2ZpbGVuYW1lfQorICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgUEFUSFMgJHtQcm90b2J1Zl9TUkNfUk9PVF9GT0xERVJ9L3ZzcHJvamVjdHMvJHtfUFJPVE9CVUZfQVJDSF9ESVJ9RGVidWcpCiAgICAgbWFya19hc19hZHZhbmNlZCgke25hbWV9X0xJQlJBUllfREVCVUcpCiAKQEAgLTQ4MiwyMiArNDg0LDI0IEBACiAgICAgICAgICIke19QUk9UT0JVRl9DT01NT05fSEVBREVSfSByZXZlYWxzIHByb3RvYnVmICR7UHJvdG9idWZfVkVSU0lPTn0iKQogICBlbmRpZigpCiAKLSAgIyBDaGVjayBQcm90b2J1ZiBjb21waWxlciB2ZXJzaW9uIHRvIGJlIGFsaWduZWQgd2l0aCBsaWJyYXJpZXMgdmVyc2lvbgotICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1Byb3RvYnVmX1BST1RPQ19FWEVDVVRBQkxFfSAtLXZlcnNpb24KLSAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfUFJPVE9CVUZfUFJPVE9DX0VYRUNVVEFCTEVfVkVSU0lPTikKKyAgaWYoUHJvdG9idWZfUFJPVE9DX0VYRUNVVEFCTEUpCisgICAgIyBDaGVjayBQcm90b2J1ZiBjb21waWxlciB2ZXJzaW9uIHRvIGJlIGFsaWduZWQgd2l0aCBsaWJyYXJpZXMgdmVyc2lvbgorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7UHJvdG9idWZfUFJPVE9DX0VYRUNVVEFCTEV9IC0tdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT04pCiAKLSAgaWYoIiR7X1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT059IiBNQVRDSEVTICJsaWJwcm90b2MgKFswLTkuXSspIikKLSAgICBzZXQoX1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT04gIiR7Q01BS0VfTUFUQ0hfMX0iKQotICBlbmRpZigpCisgICAgaWYoIiR7X1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT059IiBNQVRDSEVTICJsaWJwcm90b2MgKFswLTkuXSspIikKKyAgICAgIHNldChfUFJPVE9CVUZfUFJPVE9DX0VYRUNVVEFCTEVfVkVSU0lPTiAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgZW5kaWYoKQogCi0gIGlmKFByb3RvYnVmX0RFQlVHKQotICAgIG1lc3NhZ2UoU1RBVFVTICJbICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9OiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0xJTkV9IF0gIgotICAgICAgICAiJHtQcm90b2J1Zl9QUk9UT0NfRVhFQ1VUQUJMRX0gcmV2ZWFscyB2ZXJzaW9uICR7X1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT059IikKLSAgZW5kaWYoKQorICAgIGlmKFByb3RvYnVmX0RFQlVHKQorICAgICAgbWVzc2FnZShTVEFUVVMgIlsgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX06JHtDTUFLRV9DVVJSRU5UX0xJU1RfTElORX0gXSAiCisgICAgICAgICAgIiR7UHJvdG9idWZfUFJPVE9DX0VYRUNVVEFCTEV9IHJldmVhbHMgdmVyc2lvbiAke19QUk9UT0JVRl9QUk9UT0NfRVhFQ1VUQUJMRV9WRVJTSU9OfSIpCisgICAgZW5kaWYoKQogCi0gIGlmKE5PVCAiJHtfUFJPVE9CVUZfUFJPVE9DX0VYRUNVVEFCTEVfVkVSU0lPTn0iIFZFUlNJT05fRVFVQUwgIiR7UHJvdG9idWZfVkVSU0lPTn0iKQorICAgIGlmKE5PVCAiJHtfUFJPVE9CVUZfUFJPVE9DX0VYRUNVVEFCTEVfVkVSU0lPTn0iIFZFUlNJT05fRVFVQUwgIiR7UHJvdG9idWZfVkVSU0lPTn0iKQogICAgICAgbWVzc2FnZShXQVJOSU5HICJQcm90b2J1ZiBjb21waWxlciB2ZXJzaW9uICR7X1BST1RPQlVGX1BST1RPQ19FWEVDVVRBQkxFX1ZFUlNJT059IgotICAgICAgICAgICIgZG9lc24ndCBtYXRjaCBsaWJyYXJ5IHZlcnNpb24gJHtQcm90b2J1Zl9WRVJTSU9OfSIpCisgICAgICAgICIgZG9lc24ndCBtYXRjaCBsaWJyYXJ5IHZlcnNpb24gJHtQcm90b2J1Zl9WRVJTSU9OfSIpCisgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgaWYoUHJvdG9idWZfTElCUkFSWSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFB5dGhvbi5jbWFrZSBiL01vZHVsZXMvRmluZFB5dGhvbi5jbWFrZQppbmRleCAyYmRmYWYzLi5kODkwMjlhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQeXRob24uY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUHl0aG9uLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZFB5dGhvbgogLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIEZpbmQgUHl0aG9uIGludGVycHJldGVyLCBjb21waWxlciBhbmQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgKGluY2x1ZGUKIGRpcmVjdG9yaWVzIGFuZCBsaWJyYXJpZXMpLgogCkBAIC0xMywxMyArMTUsMjQgQEAKICogYGBJbnRlcnByZXRlcmBgOiBzZWFyY2ggZm9yIFB5dGhvbiBpbnRlcnByZXRlci4KICogYGBDb21waWxlcmBgOiBzZWFyY2ggZm9yIFB5dGhvbiBjb21waWxlci4gT25seSBvZmZlcmVkIGJ5IElyb25QeXRob24uCiAqIGBgRGV2ZWxvcG1lbnRgYDogc2VhcmNoIGZvciBkZXZlbG9wbWVudCBhcnRpZmFjdHMgKGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCi0gIGxpYnJhcmllcykuCisgIGxpYnJhcmllcykuIFRoaXMgY29tcG9uZW50IGluY2x1ZGVzIHR3byBzdWItY29tcG9uZW50cyB3aGljaCBjYW4gYmUgc3BlY2lmaWVkCisgIGluZGVwZW5kZW50bHk6CisKKyAgKiBgYERldmVsb3BtZW50Lk1vZHVsZWBgOiBzZWFyY2ggZm9yIGFydGlmYWN0cyBmb3IgUHl0aG9uIG1vZHVsZQorICAgIGRldmVsb3BtZW50cy4KKyAgKiBgYERldmVsb3BtZW50LkVtYmVkYGA6IHNlYXJjaCBmb3IgYXJ0aWZhY3RzIGZvciBQeXRob24gZW1iZWRkaW5nCisgICAgZGV2ZWxvcG1lbnRzLgorCiAqIGBgTnVtUHlgYDogc2VhcmNoIGZvciBOdW1QeSBpbmNsdWRlIGRpcmVjdG9yaWVzLgogCiBJZiBubyBgYENPTVBPTkVOVFNgYCBhcmUgc3BlY2lmaWVkLCBgYEludGVycHJldGVyYGAgaXMgYXNzdW1lZC4KIAorSWYgY29tcG9uZW50IGBgRGV2ZWxvcG1lbnRgYCBpcyBzcGVjaWZpZWQsIGl0IGltcGxpZXMgc3ViLWNvbXBvbmVudHMKK2BgRGV2ZWxvcG1lbnQuTW9kdWxlYGAgYW5kIGBgRGV2ZWxvcG1lbnQuRW1iZWRgYC4KKwogVG8gZW5zdXJlIGNvbnNpc3RlbnQgdmVyc2lvbnMgYmV0d2VlbiBjb21wb25lbnRzIGBgSW50ZXJwcmV0ZXJgYCwgYGBDb21waWxlcmBgLAotYGBEZXZlbG9wbWVudGBgIGFuZCBgYE51bVB5YGAsIHNwZWNpZnkgYWxsIGNvbXBvbmVudHMgYXQgdGhlIHNhbWUgdGltZTo6CitgYERldmVsb3BtZW50YGAgKG9yIG9uZSBvZiBpdHMgc3ViLWNvbXBvbmVudHMpIGFuZCBgYE51bVB5YGAsIHNwZWNpZnkgYWxsCitjb21wb25lbnRzIGF0IHRoZSBzYW1lIHRpbWU6OgogCiAgIGZpbmRfcGFja2FnZSAoUHl0aG9uIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCiAKQEAgLTMwLDEwICs0MywxMSBAQAogCiAuLiBub3RlOjoKIAotICBJZiBjb21wb25lbnRzIGBgSW50ZXJwcmV0ZXJgYCBhbmQgYGBEZXZlbG9wbWVudGBgIGFyZSBib3RoIHNwZWNpZmllZCwgdGhpcwotICBtb2R1bGUgc2VhcmNoIG9ubHkgZm9yIGludGVycHJldGVyIHdpdGggc2FtZSBwbGF0Zm9ybSBhcmNoaXRlY3R1cmUgYXMgdGhlIG9uZQotICBkZWZpbmVkIGJ5IGBgQ01ha2VgYCBjb25maWd1cmF0aW9uLiBUaGlzIGNvbnRyYWludCBkb2VzIG5vdCBhcHBseSBpZiBvbmx5Ci0gIGBgSW50ZXJwcmV0ZXJgYCBjb21wb25lbnQgaXMgc3BlY2lmaWVkLgorICBJZiBjb21wb25lbnRzIGBgSW50ZXJwcmV0ZXJgYCBhbmQgYGBEZXZlbG9wbWVudGBgIChvciBvbmUgb2YgaXRzCisgIHN1Yi1jb21wb25lbnRzKSBhcmUgYm90aCBzcGVjaWZpZWQsIHRoaXMgbW9kdWxlIHNlYXJjaCBvbmx5IGZvciBpbnRlcnByZXRlcgorICB3aXRoIHNhbWUgcGxhdGZvcm0gYXJjaGl0ZWN0dXJlIGFzIHRoZSBvbmUgZGVmaW5lZCBieSBgYENNYWtlYGAKKyAgY29uZmlndXJhdGlvbi4gVGhpcyBjb25zdHJhaW50IGRvZXMgbm90IGFwcGx5IGlmIG9ubHkgYGBJbnRlcnByZXRlcmBgCisgIGNvbXBvbmVudCBpcyBzcGVjaWZpZWQuCiAKIEltcG9ydGVkIFRhcmdldHMKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTQ1LDEyICs1OSwxMiBAQAogICBQeXRob24gaW50ZXJwcmV0ZXIuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudCBgYEludGVycHJldGVyYGAgaXMgZm91bmQuCiBgYFB5dGhvbjo6Q29tcGlsZXJgYAogICBQeXRob24gY29tcGlsZXIuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudCBgYENvbXBpbGVyYGAgaXMgZm91bmQuCitgYFB5dGhvbjo6TW9kdWxlYGAKKyAgUHl0aG9uIGxpYnJhcnkgZm9yIFB5dGhvbiBtb2R1bGUuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudAorICBgYERldmVsb3BtZW50Lk1vZHVsZWBgIGlzIGZvdW5kLgogYGBQeXRob246OlB5dGhvbmBgCiAgIFB5dGhvbiBsaWJyYXJ5IGZvciBQeXRob24gZW1iZWRkaW5nLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQKLSAgYGBEZXZlbG9wbWVudGBgIGlzIGZvdW5kLgotYGBQeXRob246Ok1vZHVsZWBgCi0gIFB5dGhvbiBsaWJyYXJ5IGZvciBQeXRob24gbW9kdWxlLiBUYXJnZXQgZGVmaW5lZCBpZiBjb21wb25lbnQgYGBEZXZlbG9wbWVudGBgCi0gIGlzIGZvdW5kLgorICBgYERldmVsb3BtZW50LkVtYmVkYGAgaXMgZm91bmQuCiBgYFB5dGhvbjo6TnVtUHlgYAogICBOdW1QeSBQeXRob24gbGlicmFyeS4gVGFyZ2V0IGRlZmluZWQgaWYgY29tcG9uZW50IGBgTnVtUHlgYCBpcyBmb3VuZC4KIApAQCAtNzMsMjYgKzg3LDQwIEBACiAgICAgKiBBbmFjb25kYQogICAgICogQ2Fub3B5CiAgICAgKiBJcm9uUHl0aG9uCisgICAgKiBQeVB5CiBgYFB5dGhvbl9TVERMSUJgYAogICBTdGFuZGFyZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgogCiAgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1UcnVlKWBgLgorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9VHJ1ZSlgYAorICBvciBlbHNlIGBgc3lzY29uZmlnLmdldF9wYXRoKCdzdGRsaWInKWBgLgogYGBQeXRob25fU1REQVJDSGBgCiAgIFN0YW5kYXJkIHBsYXRmb3JtIGRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgogCiAgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPVRydWUpYGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPVRydWUpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdHN0ZGxpYicpYGAuCiBgYFB5dGhvbl9TSVRFTElCYGAKICAgVGhpcmQtcGFydHkgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9RmFsc2UpYGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1GYWxzZSlgYAorICBvciBlbHNlIGBgc3lzY29uZmlnLmdldF9wYXRoKCdwdXJlbGliJylgYC4KIGBgUHl0aG9uX1NJVEVBUkNIYGAKICAgVGhpcmQtcGFydHkgcGxhdGZvcm0gZGVwZW5kZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCiAKICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKLSAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9RmFsc2UpYGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPUZhbHNlKWBgCisgIG9yIGVsc2UgYGBzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRsaWInKWBgLgorYGBQeXRob25fU09BQklgYAorICBFeHRlbnNpb24gc3VmZml4IGZvciBtb2R1bGVzLgorCisgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5CisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU09BQkknKWBgIG9yIGNvbXB1dGVkIGZyb20KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJylgYCBvcgorICBgYHB5dGhvbi1jb25maWcgLS1leHRlbnNpb24tc3VmZml4YGAuIElmIHBhY2thZ2UgYGBkaXN0dXRpbHMuc3lzY29uZmlnYGAgaXMKKyAgbm90IGF2YWlsYWJsZSwgYGBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPQUJJJylgYCBvcgorICBgYHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpYGAgYXJlIHVzZWQuCiBgYFB5dGhvbl9Db21waWxlcl9GT1VORGBgCiAgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiBjb21waWxlci4KIGBgUHl0aG9uX0NPTVBJTEVSYGAKQEAgLTEwMCw4ICsxMjgsMTQgQEAKIGBgUHl0aG9uX0NPTVBJTEVSX0lEYGAKICAgQSBzaG9ydCBzdHJpbmcgdW5pcXVlIHRvIHRoZSBjb21waWxlci4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6CiAgICAgKiBJcm9uUHl0aG9uCitgYFB5dGhvbl9ET1RORVRfTEFVTkNIRVJgYAorICBUaGUgYGAuTmV0YGAgaW50ZXJwcmV0ZXIuIE9ubHkgdXNlZCBieSBgYElyb25QeXRob25gYCBpbXBsZW1lbnRhdGlvbi4KIGBgUHl0aG9uX0RldmVsb3BtZW50X0ZPVU5EYGAKICAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIGRldmVsb3BtZW50IGFydGlmYWN0cy4KK2BgUHl0aG9uX0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORGBgCisgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiBkZXZlbG9wbWVudCBhcnRpZmFjdHMgZm9yIFB5dGhvbiBtb2R1bGUuCitgYFB5dGhvbl9EZXZlbG9wbWVudC5FbWJlZF9GT1VORGBgCisgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiBkZXZlbG9wbWVudCBhcnRpZmFjdHMgZm9yIFB5dGhvbiBlbWJlZGRpbmcuCiBgYFB5dGhvbl9JTkNMVURFX0RJUlNgYAogICBUaGUgUHl0aG9uIGluY2x1ZGUgZGlyZWN0b3JpZXMuCiBgYFB5dGhvbl9MSUJSQVJJRVNgYApAQCAtMTE4LDEwICsxNTIsMTIgQEAKICAgUHl0aG9uIG1pbm9yIHZlcnNpb24uCiBgYFB5dGhvbl9WRVJTSU9OX1BBVENIYGAKICAgUHl0aG9uIHBhdGNoIHZlcnNpb24uCitgYFB5dGhvbl9QeVB5X1ZFUlNJT05gYAorICBQeXRob24gUHlQeSB2ZXJzaW9uLgogYGBQeXRob25fTnVtUHlfRk9VTkRgYAogICBTeXN0ZW0gaGFzIHRoZSBOdW1QeS4KIGBgUHl0aG9uX051bVB5X0lOQ0xVREVfRElSU2BgCi0gIFRoZSBOdW1QeSBpbmNsdWRlIGRpcmVjdHJpZXMuCisgIFRoZSBOdW1QeSBpbmNsdWRlIGRpcmVjdG9yaWVzLgogYGBQeXRob25fTnVtUHlfVkVSU0lPTmBgCiAgIFRoZSBOdW1QeSB2ZXJzaW9uLgogCkBAIC0xNTUsNyArMTkxLDcgQEAKIAogICAqIGBgT05gYDogQ29ycmVzcG9uZGluZyBmbGFnIGlzIHNlbGVjdGVkLgogICAqIGBgT0ZGYGA6IENvcnJlc3BvbmRpbmcgZmxhZyBpcyBub3Qgc2VsZWN0ZWQuCi0gICogYGBBTllgYDogVGhlIHR3byBwb3NpYmlsdGllcyAoYGBPTmBgIGFuZCBgYE9GRmBgKSB3aWxsIGJlIHNlYXJjaGVkLgorICAqIGBgQU5ZYGA6IFRoZSB0d28gcG9zc2liaWxpdGllcyAoYGBPTmBgIGFuZCBgYE9GRmBgKSB3aWxsIGJlIHNlYXJjaGVkLgogCiAgIEZyb20gdGhpcyAzLXR1cGxlLCB2YXJpb3VzIEFCSXMgd2lsbCBiZSBzZWFyY2hlZCBzdGFydGluZyBmcm9tIHRoZSBtb3N0CiAgIHNwZWNpYWxpemVkIHRvIHRoZSBtb3N0IGdlbmVyYWwuIE1vcmVvdmVyLCBgYGRlYnVnYGAgdmVyc2lvbnMgd2lsbCBiZQpAQCAtMTg0LDggKzIyMCw3IEBACiAKIGBgUHl0aG9uX0ZJTkRfU1RSQVRFR1lgYAogICBUaGlzIHZhcmlhYmxlIGRlZmluZXMgaG93IGxvb2t1cCB3aWxsIGJlIGRvbmUuCi0gIFRoZSBgYFB5dGhvbl9GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgVGhlIGBgUHl0aG9uX0ZJTkRfU1RSQVRFR1lgYCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogCiAgICogYGBWRVJTSU9OYGA6IFRyeSB0byBmaW5kIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIGluIGFsbCBzcGVjaWZpZWQKICAgICBsb2NhdGlvbnMuCkBAIC0xOTgsOCArMjMzLDcgQEAKIGBgUHl0aG9uX0ZJTkRfUkVHSVNUUllgYAogICBPbiBXaW5kb3dzIHRoZSBgYFB5dGhvbl9GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgZGV0ZXJtaW5lIHRoZSBvcmRlcgogICBvZiBwcmVmZXJlbmNlIGJldHdlZW4gcmVnaXN0cnkgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLSAgdGhlIGBgUHl0aG9uX0ZJTkRfUkVHSVNUUllgYCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIGVtcHR5IG9yIG9uZSBvZiB0aGUKLSAgZm9sbG93aW5nOgorICB0aGUgYGBQeXRob25fRklORF9SRUdJU1RSWWBgIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAKICAgKiBgYEZJUlNUYGA6IFRyeSB0byB1c2UgcmVnaXN0cnkgYmVmb3JlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0LgpAQCAtMjA5LDggKzI0Myw4IEBACiBgYFB5dGhvbl9GSU5EX0ZSQU1FV09SS2BgCiAgIE9uIG1hY09TIHRoZSBgYFB5dGhvbl9GSU5EX0ZSQU1FV09SS2BgIHZhcmlhYmxlIGRldGVybWluZSB0aGUgb3JkZXIgb2YKICAgcHJlZmVyZW5jZSBiZXR3ZWVuIEFwcGxlLXN0eWxlIGFuZCB1bml4LXN0eWxlIHBhY2thZ2UgY29tcG9uZW50cy4KLSAgVGhpcyB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIGVtcHR5IG9yIHRha2Ugc2FtZSB2YWx1ZXMgYXMKLSAgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX0ZSQU1FV09SS2AgdmFyaWFibGUuCisgIFRoaXMgdmFyaWFibGUgY2FuIHRha2Ugc2FtZSB2YWx1ZXMgYXMgOnZhcmlhYmxlOmBDTUFLRV9GSU5EX0ZSQU1FV09SS2AKKyAgdmFyaWFibGUuCiAKICAgLi4gbm90ZTo6CiAKQEAgLTIyMCwxMSArMjU0LDExIEBACiAgIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCwgaWYgYW55LgogCiBgYFB5dGhvbl9GSU5EX1ZJUlRVQUxFTlZgYAotICBUaGlzIHZhcmlhYmxlIGRlZmluZXMgdGhlIGhhbmRsaW5nIG9mIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBJdCBpcyBtZWFuaW5nZnVsbAotICBvbmx5IHdoZW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGFjdGl2ZSAoaS5lLiB0aGUgYGBhY3RpdmF0ZWBgIHNjcmlwdCBoYXMKLSAgYmVlbiBldmFsdWF0ZWQpLiBJbiB0aGlzIGNhc2UsIGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlcgotICBgYFB5dGhvbl9GSU5EX1JFR0lTVFJZYGAgYW5kIGBgQ01BS0VfRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZXMuCi0gIFRoZSBgYFB5dGhvbl9GSU5EX1ZJUlRVQUxFTlZgYCB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIGVtcHR5IG9yIG9uZSBvZiB0aGUKKyAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzIHRoZSBoYW5kbGluZyBvZiB2aXJ0dWFsIGVudmlyb25tZW50cyBtYW5hZ2VkIGJ5CisgIGBgdmlydHVhbGVudmBgIG9yIGBgY29uZGFgYC4gSXQgaXMgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gYSB2aXJ0dWFsIGVudmlyb25tZW50CisgIGlzIGFjdGl2ZSAoaS5lLiB0aGUgYGBhY3RpdmF0ZWBgIHNjcmlwdCBoYXMgYmVlbiBldmFsdWF0ZWQpLiBJbiB0aGlzIGNhc2UsIGl0CisgIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBgYFB5dGhvbl9GSU5EX1JFR0lTVFJZYGAgYW5kIGBgQ01BS0VfRklORF9GUkFNRVdPUktgYAorICB2YXJpYWJsZXMuICBUaGUgYGBQeXRob25fRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlCiAgIGZvbGxvd2luZzoKIAogICAqIGBgRklSU1RgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgdXNlZCBiZWZvcmUgYW55IG90aGVyIHN0YW5kYXJkCkBAIC0yMzIsOCArMjY2LDkgQEAKICAgKiBgYE9OTFlgYDogT25seSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpcyB1c2VkIHRvIGxvb2stdXAgZm9yIHRoZQogICAgIGludGVycHJldGVyLgogICAqIGBgU1RBTkRBUkRgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgbm90IHVzZWQgdG8gbG9vay11cCBmb3IgdGhlCi0gICAgaW50ZXJwcmV0ZXIuIEluIHRoaXMgY2FzZSwgdmFyaWFibGUgYGBQeXRob25fRklORF9SRUdJU1RSWWBgIChXaW5kb3dzKQotICAgIG9yIGBgQ01BS0VfRklORF9GUkFNRVdPUktgYCAobWFjT1MpIGNhbiBiZSBzZXQgd2l0aCB2YWx1ZSBgYExBU1RgYCBvcgorICAgIGludGVycHJldGVyIGJ1dCBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYFBBVEhgYCBpcyBhbHdheXMgY29uc2lkZXJlZC4KKyAgICBJbiB0aGlzIGNhc2UsIHZhcmlhYmxlIGBgUHl0aG9uX0ZJTkRfUkVHSVNUUllgYCAoV2luZG93cykgb3IKKyAgICBgYENNQUtFX0ZJTkRfRlJBTUVXT1JLYGAgKG1hY09TKSBjYW4gYmUgc2V0IHdpdGggdmFsdWUgYGBMQVNUYGAgb3IKICAgICBgYE5FVkVSYGAgdG8gc2VsZWN0IHByZWZlcmFibHkgdGhlIGludGVycHJldGVyIGZyb20gdGhlIHZpcnR1YWwKICAgICBlbnZpcm9ubWVudC4KIApAQCAtMjQzLDYgKzI3OCwzOSBAQAogICAgIHJlY29tbWVuZGVkIHRvIGFsc28gaW5jbHVkZSB0aGUgY29tcG9uZW50IGBgSW50ZXJwcmV0ZXJgYCB0byBnZXQgZXhwZWN0ZWQKICAgICByZXN1bHQuCiAKK2BgUHl0aG9uX0ZJTkRfSU1QTEVNRU5UQVRJT05TYGAKKyAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzLCBpbiBhbiBvcmRlcmVkIGxpc3QsIHRoZSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zCisgIHdoaWNoIHdpbGwgYmUgc2VhcmNoZWQuIFRoZSBgYFB5dGhvbl9GSU5EX0lNUExFTUVOVEFUSU9OU2BgIHZhcmlhYmxlIGNhbgorICBob2xkIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgICogYGBDUHl0aG9uYGA6IHRoaXMgaXMgdGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uLiBWYXJpb3VzIHByb2R1Y3RzLCBsaWtlCisgICAgYGBBbmFjb25kYWBgIG9yIGBgQWN0aXZlUHl0aG9uYGAsIHJlbHkgb24gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAgKiBgYElyb25QeXRob25gYDogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2UgdGhlIGBgQ1NoYXJwYGAgbGFuZ3VhZ2UgZm9yCisgICAgYGAuTkVUIEZyYW1ld29ya2BgIG9uIHRvcCBvZiB0aGUgYER5bmFtaWMgTGFuZ3VhZ2UgUnVudGltZWAgKGBgRExSYGApLgorICAgIFNlZSBgSXJvblB5dGhvbiA8aHR0cDovL2lyb25weXRob24ubmV0PmBfLgorICAqIGBgUHlQeWBgOiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZSBgYFJQeXRob25gYCBsYW5ndWFnZSBhbmQKKyAgICBgYFJQeXRob24gdHJhbnNsYXRpb24gdG9vbGNoYWluYGAgdG8gcHJvZHVjZSB0aGUgcHl0aG9uIGludGVycHJldGVyLgorICAgIFNlZSBgUHlQeSA8aHR0cHM6Ly93d3cucHlweS5vcmc+YF8uCisKKyAgVGhlIGRlZmF1bHQgdmFsdWUgaXM6CisKKyAgKiBXaW5kb3dzIHBsYXRmb3JtOiBgYENQeXRob25gYCwgYGBJcm9uUHl0aG9uYGAKKyAgKiBPdGhlciBwbGF0Zm9ybXM6IGBgQ1B5dGhvbmBgCisKKyAgLi4gbm90ZTo6CisKKyAgICBUaGlzIGhpbnQgaGFzIHRoZSBsb3dlc3QgcHJpb3JpdHkgb2YgYWxsIGhpbnRzLCBzbyBldmVuIGlmLCBmb3IgZXhhbXBsZSwKKyAgICB5b3Ugc3BlY2lmeSBgYElyb25QeXRob25gYCBmaXJzdCBhbmQgYGBDUHl0aG9uYGAgaW4gc2Vjb25kLCBhIHB5dGhvbgorICAgIHByb2R1Y3QgYmFzZWQgb24gYGBDUHl0aG9uYGAgY2FuIGJlIHNlbGVjdGVkIGJlY2F1c2UsIGZvciBleGFtcGxlIHdpdGgKKyAgICBgYFB5dGhvbl9GSU5EX1NUUkFURUdZPUxPQ0FUSU9OYGAsIGVhY2ggbG9jYXRpb24gd2lsbCBiZSBzZWFyY2ggZmlyc3QgZm9yCisgICAgYGBJcm9uUHl0aG9uYGAgYW5kIHNlY29uZCBmb3IgYGBDUHl0aG9uYGAuCisKKyAgLi4gbm90ZTo6CisKKyAgICBXaGVuIGBgSXJvblB5dGhvbmBgIGlzIHNwZWNpZmllZCwgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gYGBXaW5kb3dzYGAsIHRoZQorICAgIGBgLk5ldGBgIGludGVycHJldGVyIChpLmUuIGBgbW9ub2BgIGNvbW1hbmQpIGlzIGV4cGVjdGVkIHRvIGJlIGF2YWlsYWJsZQorICAgIHRocm91Z2ggdGhlIGBgUEFUSGBgIHZhcmlhYmxlLgorCiBBcnRpZmFjdHMgU3BlY2lmaWNhdGlvbgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMjU1LDYgKzMyMyw5IEBACiBgYFB5dGhvbl9DT01QSUxFUmBgCiAgIFRoZSBwYXRoIHRvIHRoZSBjb21waWxlci4KIAorYGBQeXRob25fRE9UTkVUX0xBVU5DSEVSYGAKKyAgVGhlIGBgLk5ldGBgIGludGVycHJldGVyLiBPbmx5IHVzZWQgYnkgYGBJcm9uUHl0aG9uYGAgaW1wbGVtZW50YXRpb24uCisKIGBgUHl0aG9uX0xJQlJBUllgYAogICBUaGUgcGF0aCB0byB0aGUgbGlicmFyeS4gSXQgd2lsbCBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlCiAgIHZhcmlhYmxlcyBgYFB5dGhvbl9MSUJSQVJJRVNgYCwgYGBQeXRob25fTElCUkFZX0RJUlNgYCBhbmQKQEAgLTI3OCw5ICszNDksMjUgQEAKICAgV2hlbiBhbiBhcnRpZmFjdCBpcyBzcGVjaWZpZWQsIGFsbCBgYEhJTlRTYGAgd2lsbCBiZSBpZ25vcmVkIGFuZCBubyBzZWFyY2gKICAgd2lsbCBiZSBwZXJmb3JtZWQgZm9yIHRoaXMgYXJ0aWZhY3QuCiAKLSAgSWYgbW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBpcyBzcGVjaWZpZWQsIGl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2FiaWxpdHkgdG8KKyAgSWYgbW9yZSB0aGFuIG9uZSBhcnRpZmFjdCBpcyBzcGVjaWZpZWQsIGl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8KICAgZW5zdXJlIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgdmFyaW91cyBhcnRpZmFjdHMuCiAKK0J5IGRlZmF1bHQsIHRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhbGxzIGluIGRpZmZlcmVudCBkaXJlY3RvcmllcyBvZiBhCitwcm9qZWN0IHdpdGggZGlmZmVyZW50IHZlcnNpb24vY29tcG9uZW50IHJlcXVpcmVtZW50cyB3aGlsZSBwcm92aWRpbmcgY29ycmVjdAorYW5kIGNvbnNpc3RlbnQgcmVzdWx0cyBmb3IgZWFjaCBjYWxsLiBUbyBzdXBwb3J0IHRoaXMgYmVoYXZpb3IsIGBgQ01ha2VgYCBjYWNoZQoraXMgbm90IHVzZWQgaW4gdGhlIHRyYWRpdGlvbmFsIHdheSB3aGljaCBjYW4gYmUgcHJvYmxlbWF0aWMgZm9yIGludGVyYWN0aXZlCitzcGVjaWZpY2F0aW9uLiBTbywgdG8gZW5hYmxlIGFsc28gaW50ZXJhY3RpdmUgc3BlY2lmaWNhdGlvbiwgbW9kdWxlIGJlaGF2aW9yCitjYW4gYmUgY29udHJvbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6CisKK2BgUHl0aG9uX0FSVElGQUNUU19JTlRFUkFDVElWRWBgCisgIFNlbGVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtb2R1bGUuIFRoaXMgaXMgYSBib29sZWFuIHZhcmlhYmxlOgorCisgICogSWYgc2V0IHRvIGBgVFJVRWBgOiBDcmVhdGUgQ01ha2UgY2FjaGUgZW50cmllcyBmb3IgdGhlIGFib3ZlIGFydGlmYWN0CisgICAgc3BlY2lmaWNhdGlvbiB2YXJpYWJsZXMgc28gdGhhdCB1c2VycyBjYW4gZWRpdCB0aGVtIGludGVyYWN0aXZlbHkuCisgICAgVGhpcyBkaXNhYmxlcyBzdXBwb3J0IGZvciBtdWx0aXBsZSB2ZXJzaW9uL2NvbXBvbmVudCByZXF1aXJlbWVudHMuCisgICogSWYgc2V0IHRvIGBgRkFMU0VgYCBvciB1bmRlZmluZWQ6IEVuYWJsZSBtdWx0aXBsZSB2ZXJzaW9uL2NvbXBvbmVudAorICAgIHJlcXVpcmVtZW50cy4KKwogQ29tbWFuZHMKIF5eXl5eXl5eCiAKQEAgLTI5MCw5ICszNzcsMTMgQEAKIHdoZW4gbGlicmFyeSB0eXBlIGlzIGBgTU9EVUxFYGAsIHRvIHRhcmdldCBgYFB5dGhvbjo6TW9kdWxlYGAgYW5kIHRha2VzIGNhcmUgb2YKIFB5dGhvbiBtb2R1bGUgbmFtaW5nIHJ1bGVzOjoKIAotICBQeXRob25fYWRkX2xpYnJhcnkgKG15X21vZHVsZSBNT0RVTEUgc3JjMS5jcHApCisgIFB5dGhvbl9hZGRfbGlicmFyeSAoPG5hbWU+IFtTVEFUSUMgfCBTSEFSRUQgfCBNT0RVTEUgW1dJVEhfU09BQkldXQorICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UxPiBbPHNvdXJjZTI+IC4uLl0pCiAKLUlmIGxpYnJhcnkgdHlwZSBpcyBub3Qgc3BlY2lmaWVkLCBgYE1PRFVMRWBgIGlzIGFzc3VtZWQuCitJZiB0aGUgbGlicmFyeSB0eXBlIGlzIG5vdCBzcGVjaWZpZWQsIGBgTU9EVUxFYGAgaXMgYXNzdW1lZC4KKworRm9yIGBgTU9EVUxFYGAgbGlicmFyeSB0eXBlLCBpZiBvcHRpb24gYGBXSVRIX1NPQUJJYGAgaXMgc3BlY2lmaWVkLCB0aGUKK21vZHVsZSBzdWZmaXggd2lsbCBpbmNsdWRlIHRoZSBgYFB5dGhvbl9TT0FCSWBgIHZhbHVlLCBpZiBhbnkuCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFB5dGhvbi9TdXBwb3J0LmNtYWtlIGIvTW9kdWxlcy9GaW5kUHl0aG9uL1N1cHBvcnQuY21ha2UKaW5kZXggNTBkZDdiYS4uMWJlMDYyNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kUHl0aG9uL1N1cHBvcnQuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUHl0aG9uL1N1cHBvcnQuY21ha2UKQEAgLTIyLDkgKzIyLDkgQEAKIGlmIChOT1QgREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUikKICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZpbmRQeXRob246IElOVEVSTkFMIEVSUk9SIikKIGVuZGlmKCkKLWlmIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUiBFUVVBTCAzKQoraWYgKF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SIEVRVUFMICIzIikKICAgc2V0KF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OUyAzLjkgMy44IDMuNyAzLjYgMy41IDMuNCAzLjMgMy4yIDMuMSAzLjApCi1lbHNlaWYgKF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SIEVRVUFMIDIpCitlbHNlaWYgKF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SIEVRVUFMICIyIikKICAgc2V0KF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OUyAyLjcgMi42IDIuNSAyLjQgMi4zIDIuMiAyLjEgMi4wKQogZWxzZSgpCiAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGaW5kUHl0aG9uOiBJTlRFUk5BTCBFUlJPUiIpCkBAIC03NSw3MCArNzUsMTM1IEBACiAgICAgICAoX1BZVEhPTl9pc011bHRpQ29uZmlnIE9SIENNQUtFX0JVSUxEX1RZUEUpKQogICAgICMgaWYgdGhlIGdlbmVyYXRvciBpcyBtdWx0aS1jb25maWcgb3IgaWYgQ01BS0VfQlVJTERfVFlQRSBpcyBzZXQgZm9yCiAgICAgIyBzaW5nbGUtY29uZmlnIGdlbmVyYXRvcnMsIHNldCBvcHRpbWl6ZWQgYW5kIGRlYnVnIGxpYnJhcmllcwotICAgIHNldCAoJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZICIiKQotICAgIGZvcmVhY2ggKF9QWVRIT05fbGlibmFtZSBJTiBMSVNUUyAke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfUkVMRUFTRSApCi0gICAgICBsaXN0KCBBUFBFTkQgJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZIG9wdGltaXplZCAiJHtfUFlUSE9OX2xpYm5hbWV9IiApCisgICAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyAiIikKKyAgICBmb3JlYWNoIChfUFlUSE9OX2xpYm5hbWUgSU4gTElTVFMgJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZX1JFTEVBU0UpCisgICAgICBsaXN0KCBBUFBFTkQgJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJJRVMgb3B0aW1pemVkICIke19QWVRIT05fbGlibmFtZX0iKQogICAgIGVuZGZvcmVhY2goKQotICAgIGZvcmVhY2ggKF9QWVRIT05fbGlibmFtZSBJTiBMSVNUUyAke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfREVCVUcgKQotICAgICAgbGlzdCggQVBQRU5EICR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWSBkZWJ1ZyAiJHtfUFlUSE9OX2xpYm5hbWV9IiApCisgICAgZm9yZWFjaCAoX1BZVEhPTl9saWJuYW1lIElOIExJU1RTICR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWV9ERUJVRykKKyAgICAgIGxpc3QoIEFQUEVORCAke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyBkZWJ1ZyAiJHtfUFlUSE9OX2xpYm5hbWV9IikKICAgICBlbmRmb3JlYWNoKCkKICAgZWxzZWlmICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfUkVMRUFTRSkKLSAgICBzZXQgKCR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWSAiJHske19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfUkVMRUFTRX0iKQorICAgIHNldCAoJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJJRVMgIiR7JHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZX1JFTEVBU0V9IikKICAgZWxzZWlmICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfREVCVUcpCi0gICAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUlkgIiR7JHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZX0RFQlVHfSIpCisgICAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyAiJHske19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUllfREVCVUd9IikKICAgZWxzZSgpCi0gICAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUlkgIiR7X1BZVEhPTl9CQVNFTkFNRX1fTElCUkFSWS1OT1RGT1VORCIpCisgICAgc2V0ICgke19QWVRIT05fQkFTRU5BTUV9X0xJQlJBUklFUyAiJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZLU5PVEZPVU5EIikKICAgZW5kaWYoKQotCi0gIHNldCAoJHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJJRVMgIiR7JHtfUFlUSE9OX0JBU0VOQU1FfV9MSUJSQVJZfSIpCiBlbmRtYWNybygpCiAKIAogbWFjcm8gKF9QWVRIT05fRklORF9GUkFNRVdPUktTKQotICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS1MpCiAgIGlmIChDTUFLRV9IT1NUX0FQUExFIE9SIEFQUExFKQorICAgIGZpbGUoVE9fQ01BS0VfUEFUSCAiJEVOVntDTUFLRV9GUkFNRVdPUktfUEFUSH0iIF9wZmZfQ01BS0VfRlJBTUVXT1JLX1BBVEgpCiAgICAgc2V0IChfcGZmX2ZyYW1ld29ya3MgJHtDTUFLRV9GUkFNRVdPUktfUEFUSH0KLSAgICAgICAgICAgICAgICAgICAgJEVOVntDTUFLRV9GUkFNRVdPUktfUEFUSH0KLSAgICAgICAgICAgICAgICAgICAgfi9MaWJyYXJ5L0ZyYW1ld29ya3MKLSAgICAgICAgICAgICAgICAgICAgL3Vzci9sb2NhbC9GcmFtZXdvcmtzCi0gICAgICAgICAgICAgICAgICAgICR7Q01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRIfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke19wZmZfQ01BS0VfRlJBTUVXT1JLX1BBVEh9CisgICAgICAgICAgICAgICAgICAgICAgICAgfi9MaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAvdXNyL2xvY2FsL0ZyYW1ld29ya3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX1NZU1RFTV9GUkFNRVdPUktfUEFUSH0pCiAgICAgbGlzdCAoUkVNT1ZFX0RVUExJQ0FURVMgX3BmZl9mcmFtZXdvcmtzKQotICAgIGZvcmVhY2ggKF9wZmZfZnJhbWV3b3JrIElOIExJU1RTIF9wZmZfZnJhbWV3b3JrcykKLSAgICAgIGlmIChFWElTVFMgJHtfcGZmX2ZyYW1ld29ya30vUHl0aG9uJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUn0uZnJhbWV3b3JrKQotICAgICAgICBsaXN0IChBUFBFTkQgJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLUyAke19wZmZfZnJhbWV3b3JrfS9QeXRob24ke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfS5mcmFtZXdvcmspCi0gICAgICBlbmRpZigpCi0gICAgICBpZiAoRVhJU1RTICR7X3BmZl9mcmFtZXdvcmt9L1B5dGhvbi5mcmFtZXdvcmspCi0gICAgICAgIGxpc3QgKEFQUEVORCAke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktTICR7X3BmZl9mcmFtZXdvcmt9L1B5dGhvbi5mcmFtZXdvcmspCisgICAgZm9yZWFjaCAoX3BmZl9pbXBsZW1lbnRhdGlvbiBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMpCisgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9XyR7X3BmZl9pbXBsZW1lbnRhdGlvbn1fRlJBTUVXT1JLUykKKyAgICAgIGlmIChfcGZmX2ltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJDUHl0aG9uIikKKyAgICAgICAgZm9yZWFjaCAoX3BmZl9mcmFtZXdvcmsgSU4gTElTVFMgX3BmZl9mcmFtZXdvcmtzKQorICAgICAgICAgIGlmIChFWElTVFMgJHtfcGZmX2ZyYW1ld29ya30vUHl0aG9uJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUn0uZnJhbWV3b3JrKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV8ke19wZmZfaW1wbGVtZW50YXRpb259X0ZSQU1FV09SS1MgJHtfcGZmX2ZyYW1ld29ya30vUHl0aG9uJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUn0uZnJhbWV3b3JrKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBpZiAoRVhJU1RTICR7X3BmZl9mcmFtZXdvcmt9L1B5dGhvbi5mcmFtZXdvcmspCisgICAgICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9XyR7X3BmZl9pbXBsZW1lbnRhdGlvbn1fRlJBTUVXT1JLUyAke19wZmZfZnJhbWV3b3JrfS9QeXRob24uZnJhbWV3b3JrKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICBlbHNlaWYgKF9wZmZfaW1wbGVtZW50YXRpb24gU1RSRVFVQUwgIklyb25QeXRob24iKQorICAgICAgICBmb3JlYWNoIChfcGZmX2ZyYW1ld29yayBJTiBMSVNUUyBfcGZmX2ZyYW1ld29ya3MpCisgICAgICAgICAgaWYgKEVYSVNUUyAke19wZmZfZnJhbWV3b3JrfS9Jcm9uUHl0aG9uLmZyYW1ld29yaykKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fJHtfcGZmX2ltcGxlbWVudGF0aW9ufV9GUkFNRVdPUktTICR7X3BmZl9mcmFtZXdvcmt9L0lyb25QeXRob24uZnJhbWV3b3JrKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kZm9yZWFjaCgpCiAgICAgICBlbmRpZigpCiAgICAgZW5kZm9yZWFjaCgpCisgICAgdW5zZXQgKF9wZmZfaW1wbGVtZW50YXRpb24pCiAgICAgdW5zZXQgKF9wZmZfZnJhbWV3b3JrcykKICAgICB1bnNldCAoX3BmZl9mcmFtZXdvcmspCiAgIGVuZGlmKCkKIGVuZG1hY3JvKCkKIAotZnVuY3Rpb24gKF9QWVRIT05fR0VUX0ZSQU1FV09SS1MgX1BZVEhPTl9QR0ZfRlJBTUVXT1JLX1BBVEhTIF9QWVRIT05fVkVSU0lPTikKLSAgc2V0IChfUFlUSE9OX0ZSQU1FV09SS19QQVRIUykKLSAgZm9yZWFjaCAoX1BZVEhPTl9GUkFNRVdPUksgSU4gTElTVFMgJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLUykKLSAgICBsaXN0IChBUFBFTkQgX1BZVEhPTl9GUkFNRVdPUktfUEFUSFMKLSAgICAgICAgICAiJHtfUFlUSE9OX0ZSQU1FV09SS30vVmVyc2lvbnMvJHtfUFlUSE9OX1ZFUlNJT059IikKK2Z1bmN0aW9uIChfUFlUSE9OX0dFVF9GUkFNRVdPUktTIF9QWVRIT05fUEdGX0ZSQU1FV09SS19QQVRIUykKKyAgY21ha2VfcGFyc2VfYXJndW1lbnRzIChQQVJTRV9BUkdWIDEgX1BHRiAiIiAiIiAiSU1QTEVNRU5UQVRJT05TO1ZFUlNJT04iKQorCisgIGlmIChOT1QgX1BHRl9JTVBMRU1FTlRBVElPTlMpCisgICAgc2V0IChfUEdGX0lNUExFTUVOVEFUSU9OUyAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OU30pCisgIGVuZGlmKCkKKworICBzZXQgKGZyYW1ld29ya19wYXRocykKKworICBmb3JlYWNoIChpbXBsZW1lbnRhdGlvbiBJTiBMSVNUUyBfUEdGX0lNUExFTUVOVEFUSU9OUykKKyAgICBpZiAoaW1wbGVtZW50YXRpb24gU1RSRVFVQUwgIkNQeXRob24iKQorICAgICAgZm9yZWFjaCAodmVyc2lvbiBJTiBMSVNUUyBfUEdGX1ZFUlNJT04pCisgICAgICAgIGZvcmVhY2ggKGZyYW1ld29yayBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fJHtpbXBsZW1lbnRhdGlvbn1fRlJBTUVXT1JLUykKKyAgICAgICAgICBpZiAoRVhJU1RTICIke2ZyYW1ld29ya30vVmVyc2lvbnMvJHt2ZXJzaW9ufSIpCisgICAgICAgICAgICBsaXN0IChBUFBFTkQgZnJhbWV3b3JrX3BhdGhzICIke2ZyYW1ld29ya30vVmVyc2lvbnMvJHt2ZXJzaW9ufSIpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRmb3JlYWNoKCkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgIGVsc2VpZiAoaW1wbGVtZW50YXRpb24gU1RSRVFVQUwgIklyb25QeXRob24iKQorICAgICAgZm9yZWFjaCAodmVyc2lvbiBJTiBMSVNUUyBfUEdGX1ZFUlNJT04pCisgICAgICAgIGZvcmVhY2ggKGZyYW1ld29yayBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fJHtpbXBsZW1lbnRhdGlvbn1fRlJBTUVXT1JLUykKKyAgICAgICAgICAjIHBpY2stdXAgYWxsIGF2YWlsYWJsZSB2ZXJzaW9ucworICAgICAgICAgIGZpbGUgKEdMT0IgdmVyc2lvbnMgTElTVF9ESVJFQ1RPUklFUyB0cnVlIFJFTEFUSVZFICIke2ZyYW1ld29ya30vVmVyc2lvbnMvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7ZnJhbWV3b3JrfS9WZXJzaW9ucy8ke3ZlcnNpb259KiIpCisgICAgICAgICAgbGlzdCAoU09SVCB2ZXJzaW9ucyBPUkRFUiBERVNDRU5ESU5HKQorICAgICAgICAgIGxpc3QgKFRSQU5TRk9STSB2ZXJzaW9ucyBQUkVQRU5EICIke2ZyYW1ld29ya30vVmVyc2lvbnMvIikKKyAgICAgICAgICBsaXN0IChBUFBFTkQgZnJhbWV3b3JrX3BhdGhzICR7dmVyc2lvbnN9KQorICAgICAgICBlbmRmb3JlYWNoKCkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCi0gIHNldCAoJHtfUFlUSE9OX1BHRl9GUkFNRVdPUktfUEFUSFN9ICR7X1BZVEhPTl9GUkFNRVdPUktfUEFUSFN9IFBBUkVOVF9TQ09QRSkKKworICBzZXQgKCR7X1BZVEhPTl9QR0ZfRlJBTUVXT1JLX1BBVEhTfSAke2ZyYW1ld29ya19wYXRoc30gUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQogCi1mdW5jdGlvbiAoX1BZVEhPTl9HRVRfUkVHSVNUUklFUyBfUFlUSE9OX1BHUl9SRUdJU1RSWV9QQVRIUyBfUFlUSE9OX1ZFUlNJT04pCi0gIHN0cmluZyAoUkVQTEFDRSAiLiIgIiIgX1BZVEhPTl9WRVJTSU9OX05PX0RPVFMgJHtfUFlUSE9OX1ZFUlNJT059KQotICBzZXQgKCR7X1BZVEhPTl9QR1JfUkVHSVNUUllfUEFUSFN9Ci0gICAgICAgW0hLRVlfQ1VSUkVOVF9VU0VSXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwke19QWVRIT05fVkVSU0lPTn0tJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH1cXEluc3RhbGxQYXRoXQotICAgICAgIFtIS0VZX0NVUlJFTlRfVVNFUlxcU09GVFdBUkVcXFB5dGhvblxcUHl0aG9uQ29yZVxcJHtfUFlUSE9OX1ZFUlNJT059LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0gyfVxcSW5zdGFsbFBhdGhdCi0gICAgICAgW0hLRVlfQ1VSUkVOVF9VU0VSXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwke19QWVRIT05fVkVSU0lPTn1cXEluc3RhbGxQYXRoXQotICAgICAgIFtIS0VZX0NVUlJFTlRfVVNFUlxcU09GVFdBUkVcXFB5dGhvblxcQ29udGludXVtQW5hbHl0aWNzXFxBbmFjb25kYSR7X1BZVEhPTl9WRVJTSU9OX05PX0RPVFN9LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0h9XFxJbnN0YWxsUGF0aF0KLSAgICAgICBbSEtFWV9DVVJSRU5UX1VTRVJcXFNPRlRXQVJFXFxQeXRob25cXENvbnRpbnV1bUFuYWx5dGljc1xcQW5hY29uZGEke19QWVRIT05fVkVSU0lPTl9OT19ET1RTfS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIMn1cXEluc3RhbGxQYXRoXQotICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCR7X1BZVEhPTl9WRVJTSU9OfS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIfVxcSW5zdGFsbFBhdGhdCi0gICAgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXFB5dGhvblxcUHl0aG9uQ29yZVxcJHtfUFlUSE9OX1ZFUlNJT059LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0gyfVxcSW5zdGFsbFBhdGhdCi0gICAgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXFB5dGhvblxcUHl0aG9uQ29yZVxcJHtfUFlUSE9OX1ZFUlNJT059XFxJbnN0YWxsUGF0aF0KLSAgICAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcUHl0aG9uXFxDb250aW51dW1BbmFseXRpY3NcXEFuYWNvbmRhJHtfUFlUSE9OX1ZFUlNJT05fTk9fRE9UU30tJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH1cXEluc3RhbGxQYXRoXQotICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxQeXRob25cXENvbnRpbnV1bUFuYWx5dGljc1xcQW5hY29uZGEke19QWVRIT05fVkVSU0lPTl9OT19ET1RTfS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIMn1cXEluc3RhbGxQYXRoXQotICAgICAgIFBBUkVOVF9TQ09QRSkKK2Z1bmN0aW9uIChfUFlUSE9OX0dFVF9SRUdJU1RSSUVTIF9QWVRIT05fUEdSX1JFR0lTVFJZX1BBVEhTKQorICBjbWFrZV9wYXJzZV9hcmd1bWVudHMgKFBBUlNFX0FSR1YgMSBfUEdSICIiICIiICJJTVBMRU1FTlRBVElPTlM7VkVSU0lPTiIpCisKKyAgaWYgKE5PVCBfUEdSX0lNUExFTUVOVEFUSU9OUykKKyAgICBzZXQgKF9QR1JfSU1QTEVNRU5UQVRJT05TICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TfSkKKyAgZW5kaWYoKQorCisgIHNldCAocmVnaXN0cmllcykKKworICBmb3JlYWNoIChpbXBsZW1lbnRhdGlvbiBJTiBMSVNUUyBfUEdSX0lNUExFTUVOVEFUSU9OUykKKyAgICBpZiAoaW1wbGVtZW50YXRpb24gU1RSRVFVQUwgIkNQeXRob24iKQorICAgICAgZm9yZWFjaCAodmVyc2lvbiBJTiBMSVNUUyBfUEdSX1ZFUlNJT04pCisgICAgICAgIHN0cmluZyAoUkVQTEFDRSAiLiIgIiIgdmVyc2lvbl9ub19kb3RzICR7dmVyc2lvbn0pCisgICAgICAgIGxpc3QgKEFQUEVORCByZWdpc3RyaWVzCisgICAgICAgICAgICAgICAgICAgICBbSEtFWV9DVVJSRU5UX1VTRVJcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCR7dmVyc2lvbn0tJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH1cXEluc3RhbGxQYXRoXQorICAgICAgICAgICAgICAgICAgICAgW0hLRVlfQ1VSUkVOVF9VU0VSXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwke3ZlcnNpb259LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0gyfVxcSW5zdGFsbFBhdGhdKQorICAgICAgICBpZiAodmVyc2lvbiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjMuNSIpCisgICAgICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoYXJjaCAiW0hLRVlfQ1VSUkVOVF9VU0VSXFxTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFwke3ZlcnNpb259O1N5c0FyY2hpdGVjdHVyZV0iIE5BTUUpCisgICAgICAgICAgaWYgKGFyY2ggTUFUQ0hFUyAiKCR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0h9fCR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0gyfSliaXQiKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIHJlZ2lzdHJpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBbSEtFWV9DVVJSRU5UX1VTRVJcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCR7dmVyc2lvbn1cXEluc3RhbGxQYXRoXSkKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIGxpc3QgKEFQUEVORCByZWdpc3RyaWVzCisgICAgICAgICAgICAgICAgICAgICAgIFtIS0VZX0NVUlJFTlRfVVNFUlxcU09GVFdBUkVcXFB5dGhvblxcUHl0aG9uQ29yZVxcJHt2ZXJzaW9ufVxcSW5zdGFsbFBhdGhdKQorICAgICAgICBlbmRpZigpCisgICAgICAgIGxpc3QgKEFQUEVORCByZWdpc3RyaWVzCisgICAgICAgICAgICAgICAgICAgICBbSEtFWV9DVVJSRU5UX1VTRVJcXFNPRlRXQVJFXFxQeXRob25cXENvbnRpbnV1bUFuYWx5dGljc1xcQW5hY29uZGEke3ZlcnNpb25fbm9fZG90c30tJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH1cXEluc3RhbGxQYXRoXQorICAgICAgICAgICAgICAgICAgICAgW0hLRVlfQ1VSUkVOVF9VU0VSXFxTT0ZUV0FSRVxcUHl0aG9uXFxDb250aW51dW1BbmFseXRpY3NcXEFuYWNvbmRhJHt2ZXJzaW9uX25vX2RvdHN9LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0gyfVxcSW5zdGFsbFBhdGhdCisgICAgICAgICAgICAgICAgICAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwke3ZlcnNpb259LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0h9XFxJbnN0YWxsUGF0aF0KKyAgICAgICAgICAgICAgICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCR7dmVyc2lvbn0tJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDJ9XFxJbnN0YWxsUGF0aF0KKyAgICAgICAgICAgICAgICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCR7dmVyc2lvbn1cXEluc3RhbGxQYXRoXQorICAgICAgICAgICAgICAgICAgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXFB5dGhvblxcQ29udGludXVtQW5hbHl0aWNzXFxBbmFjb25kYSR7dmVyc2lvbl9ub19kb3RzfS0ke18ke19QWVRIT05fUFJFRklYfV9BUkNIfVxcSW5zdGFsbFBhdGhdCisgICAgICAgICAgICAgICAgICAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcUHl0aG9uXFxDb250aW51dW1BbmFseXRpY3NcXEFuYWNvbmRhJHt2ZXJzaW9uX25vX2RvdHN9LSR7XyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0gyfVxcSW5zdGFsbFBhdGhdKQorICAgICAgZW5kZm9yZWFjaCgpCisgICAgZWxzZWlmIChpbXBsZW1lbnRhdGlvbiBTVFJFUVVBTCAiSXJvblB5dGhvbiIpCisgICAgICBmb3JlYWNoICh2ZXJzaW9uICBJTiBMSVNUUyBfUEdSX1ZFUlNJT04pCisgICAgICAgIGxpc3QgKEFQUEVORCByZWdpc3RyaWVzIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxJcm9uUHl0aG9uXFwke3ZlcnNpb259XFxJbnN0YWxsUGF0aF0pCisgICAgICBlbmRmb3JlYWNoKCkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorCisgIHNldCAoJHtfUFlUSE9OX1BHUl9SRUdJU1RSWV9QQVRIU30gIiR7cmVnaXN0cmllc30iIFBBUkVOVF9TQ09QRSkKIGVuZGZ1bmN0aW9uKCkKIAogCkBAIC0xODYsNyArMjUxLDExIEBACiBlbmRmdW5jdGlvbigpCiAKIGZ1bmN0aW9uIChfUFlUSE9OX0dFVF9QQVRIX1NVRkZJWEVTIF9QWVRIT05fUEdQU19QQVRIX1NVRkZJWEVTKQotICBjbWFrZV9wYXJzZV9hcmd1bWVudHMgKFBBUlNFX0FSR1YgMSBfUEdQUyAiTElCUkFSWTtJTkNMVURFIiAiVkVSU0lPTiIgIiIpCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAoUEFSU0VfQVJHViAxIF9QR1BTICJJTlRFUlBSRVRFUjtDT01QSUxFUjtMSUJSQVJZO0lOQ0xVREUiICIiICJJTVBMRU1FTlRBVElPTlM7VkVSU0lPTiIpCisKKyAgaWYgKE5PVCBfUEdQU19JTVBMRU1FTlRBVElPTlMpCisgICAgc2V0IChfUEdQU19JTVBMRU1FTlRBVElPTlMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlN9KQorICBlbmRpZigpCiAKICAgaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTKQogICAgIHNldCAoYWJpICIke18ke19QWVRIT05fUFJFRklYfV9BQklGTEFHU30iKQpAQCAtMTk1LDkzICsyNjQsMTYzIEBACiAgIGVuZGlmKCkKIAogICBzZXQgKHBhdGhfc3VmZml4ZXMpCi0gIGlmIChfUEdQU19MSUJSQVJZKQotICAgIGlmIChDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSkKLSAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzIGxpYi8ke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfSkKLSAgICBlbmRpZigpCi0gICAgbGlzdCAoQVBQRU5EIHBhdGhfc3VmZml4ZXMgbGliIGxpYnMpCiAKLSAgICBpZiAoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUpCi0gICAgICBzZXQgKHN1ZmZpeGVzICIke2FiaX0iKQotICAgICAgaWYgKHN1ZmZpeGVzKQotICAgICAgICBsaXN0IChUUkFOU0ZPUk0gc3VmZml4ZXMgUFJFUEVORCAibGliL3B5dGhvbiR7X1BHUFNfVkVSU0lPTn0vY29uZmlnLSR7X1BHUFNfVkVSU0lPTn0iKQotICAgICAgICBsaXN0IChUUkFOU0ZPUk0gc3VmZml4ZXMgQVBQRU5EICItJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0iKQorICBmb3JlYWNoIChpbXBsZW1lbnRhdGlvbiBJTiBMSVNUUyBfUEdQU19JTVBMRU1FTlRBVElPTlMpCisgICAgaWYgKGltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJDUHl0aG9uIikKKyAgICAgIGlmIChfUEdQU19JTlRFUlBSRVRFUikKKyAgICAgICAgbGlzdCAoQVBQRU5EIHBhdGhfc3VmZml4ZXMgYmluIFNjcmlwdHMpCiAgICAgICBlbHNlKCkKLSAgICAgICAgc2V0IChzdWZmaXhlcyAibGliL3B5dGhvbiR7X1BHUFNfVkVSU0lPTn0vY29uZmlnLSR7X1BHUFNfVkVSU0lPTn0tJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0iKQorICAgICAgICBmb3JlYWNoICh2ZXJzaW9uIElOIExJU1RTIF9QR1BTX1ZFUlNJT04pCisgICAgICAgICAgaWYgKF9QR1BTX0xJQlJBUlkpCisgICAgICAgICAgICBpZiAoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUpCisgICAgICAgICAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzIGxpYi8ke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfSkKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzIGxpYiBsaWJzKQorCisgICAgICAgICAgICBpZiAoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUpCisgICAgICAgICAgICAgIHNldCAoc3VmZml4ZXMgIiR7YWJpfSIpCisgICAgICAgICAgICAgIGlmIChzdWZmaXhlcykKKyAgICAgICAgICAgICAgICBsaXN0IChUUkFOU0ZPUk0gc3VmZml4ZXMgUFJFUEVORCAibGliL3B5dGhvbiR7X1BHUFNfVkVSU0lPTn0vY29uZmlnLSR7X1BHUFNfVkVSU0lPTn0iKQorICAgICAgICAgICAgICAgIGxpc3QgKFRSQU5TRk9STSBzdWZmaXhlcyBBUFBFTkQgIi0ke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfSIpCisgICAgICAgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgICAgIHNldCAoc3VmZml4ZXMgImxpYi9weXRob24ke19QR1BTX1ZFUlNJT059L2NvbmZpZy0ke19QR1BTX1ZFUlNJT059LSR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9IikKKyAgICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgICAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyAke3N1ZmZpeGVzfSkKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICAgIHNldCAoc3VmZml4ZXMgIiR7YWJpfSIpCisgICAgICAgICAgICBpZiAoc3VmZml4ZXMpCisgICAgICAgICAgICAgIGxpc3QgKFRSQU5TRk9STSBzdWZmaXhlcyBQUkVQRU5EICJsaWIvcHl0aG9uJHtfUEdQU19WRVJTSU9OfS9jb25maWctJHtfUEdQU19WRVJTSU9OfSIpCisgICAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgICAgc2V0IChzdWZmaXhlcyAibGliL3B5dGhvbiR7X1BHUFNfVkVSU0lPTn0vY29uZmlnLSR7X1BHUFNfVkVSU0lPTn0iKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIHBhdGhfc3VmZml4ZXMgJHtzdWZmaXhlc30pCisgICAgICAgICAgZWxzZWlmIChfUEdQU19JTkNMVURFKQorICAgICAgICAgICAgc2V0IChzdWZmaXhlcyAiJHthYml9IikKKyAgICAgICAgICAgIGlmIChzdWZmaXhlcykKKyAgICAgICAgICAgICAgbGlzdCAoVFJBTlNGT1JNIHN1ZmZpeGVzIFBSRVBFTkQgImluY2x1ZGUvcHl0aG9uJHtfUEdQU19WRVJTSU9OfSIpCisgICAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgICAgc2V0IChzdWZmaXhlcyAiaW5jbHVkZS9weXRob24ke19QR1BTX1ZFUlNJT059IikKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzICR7c3VmZml4ZXN9IGluY2x1ZGUpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRmb3JlYWNoKCkKICAgICAgIGVuZGlmKCkKLSAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzICR7c3VmZml4ZXN9KQorICAgIGVsc2VpZiAoaW1wbGVtZW50YXRpb24gU1RSRVFVQUwgIklyb25QeXRob24iKQorICAgICAgaWYgKF9QR1BTX0lOVEVSUFJFVEVSIE9SIF9QR1BTX0NPTVBJTEVSKQorICAgICAgICBmb3JlYWNoICh2ZXJzaW9uIElOIExJU1RTIF9QR1BTX1ZFUlNJT04pCisgICAgICAgICAgbGlzdCAoQVBQRU5EIHBhdGhfc3VmZml4ZXMgInNoYXJlL2lyb25weXRob24ke3ZlcnNpb259IikKKyAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9KQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZiAoaW1wbGVtZW50YXRpb24gU1RSRVFVQUwgIlB5UHkiKQorICAgICAgaWYgKF9QR1BTX0lOVEVSUFJFVEVSKQorICAgICAgICBsaXN0IChBUFBFTkQgcGF0aF9zdWZmaXhlcyAke18ke19QWVRIT05fUFJFRklYfV9QWVBZX0VYRUNVVEFCTEVfUEFUSF9TVUZGSVhFU30pCisgICAgICBlbHNlaWYgKF9QR1BTX0xJQlJBUlkpCisgICAgICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BZUFlfTElCUkFSWV9QQVRIX1NVRkZJWEVTfSkKKyAgICAgIGVsc2VpZiAoX1BHUFNfSU5DTFVERSkKKyAgICAgICAgbGlzdCAoQVBQRU5EIHBhdGhfc3VmZml4ZXMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9JTkNMVURFX1BBVEhfU1VGRklYRVN9KQorICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKLSAgICBzZXQgKHN1ZmZpeGVzICIke2FiaX0iKQotICAgIGlmIChzdWZmaXhlcykKLSAgICAgIGxpc3QgKFRSQU5TRk9STSBzdWZmaXhlcyBQUkVQRU5EICJsaWIvcHl0aG9uJHtfUEdQU19WRVJTSU9OfS9jb25maWctJHtfUEdQU19WRVJTSU9OfSIpCi0gICAgZWxzZSgpCi0gICAgICBzZXQgKHN1ZmZpeGVzICJsaWIvcHl0aG9uJHtfUEdQU19WRVJTSU9OfS9jb25maWctJHtfUEdQU19WRVJTSU9OfSIpCi0gICAgZW5kaWYoKQotICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzICR7c3VmZml4ZXN9KQotICBlbHNlaWYgKF9QR1BTX0lOQ0xVREUpCi0gICAgc2V0IChzdWZmaXhlcyAiJHthYml9IikKLSAgICBpZiAoc3VmZml4ZXMpCi0gICAgICBsaXN0IChUUkFOU0ZPUk0gc3VmZml4ZXMgUFJFUEVORCAiaW5jbHVkZS9weXRob24ke19QR1BTX1ZFUlNJT059IikKLSAgICBlbHNlKCkKLSAgICAgIHNldCAoc3VmZml4ZXMgImluY2x1ZGUvcHl0aG9uJHtfUEdQU19WRVJTSU9OfSIpCi0gICAgZW5kaWYoKQotICAgIGxpc3QgKEFQUEVORCBwYXRoX3N1ZmZpeGVzICR7c3VmZml4ZXN9IGluY2x1ZGUpCi0gIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIHBhdGhfc3VmZml4ZXMpCiAKICAgc2V0ICgke19QWVRIT05fUEdQU19QQVRIX1NVRkZJWEVTfSAke3BhdGhfc3VmZml4ZXN9IFBBUkVOVF9TQ09QRSkKIGVuZGZ1bmN0aW9uKCkKIAogZnVuY3Rpb24gKF9QWVRIT05fR0VUX05BTUVTIF9QWVRIT05fUEdOX05BTUVTKQotICBjbWFrZV9wYXJzZV9hcmd1bWVudHMgKFBBUlNFX0FSR1YgMSBfUEdOICJQT1NJWDtFWEVDVVRBQkxFO0NPTkZJRztMSUJSQVJZO1dJTjMyO0RFQlVHIiAiVkVSU0lPTiIgIiIpCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAoUEFSU0VfQVJHViAxIF9QR04gIlBPU0lYO0lOVEVSUFJFVEVSO0NPTVBJTEVSO0NPTkZJRztMSUJSQVJZO1dJTjMyO0RFQlVHIiAiIiAiSU1QTEVNRU5UQVRJT05TO1ZFUlNJT04iKQorCisgIGlmIChOT1QgX1BHTl9JTVBMRU1FTlRBVElPTlMpCisgICAgc2V0IChfUEdOX0lNUExFTUVOVEFUSU9OUyAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OU30pCisgIGVuZGlmKCkKIAogICBzZXQgKG5hbWVzKQogCi0gIGlmIChfUEdOX1dJTjMyKQotICAgIHN0cmluZyAoUkVQTEFDRSAiLiIgIiIgX1BZVEhPTl9WRVJTSU9OX05PX0RPVFMgJHtfUEdOX1ZFUlNJT059KQorICBmb3JlYWNoIChpbXBsZW1lbnRhdGlvbiBJTiBMSVNUUyBfUEdOX0lNUExFTUVOVEFUSU9OUykKKyAgICBpZiAoaW1wbGVtZW50YXRpb24gU1RSRVFVQUwgIkNQeXRob24iKQorICAgICAgZm9yZWFjaCAodmVyc2lvbiBJTiBMSVNUUyBfUEdOX1ZFUlNJT04pCisgICAgICAgIGlmIChfUEdOX1dJTjMyKQorICAgICAgICAgIHN0cmluZyAoUkVQTEFDRSAiLiIgIiIgdmVyc2lvbl9ub19kb3RzICR7dmVyc2lvbn0pCiAKLSAgICBzZXQgKG5hbWUgcHl0aG9uJHtfUFlUSE9OX1ZFUlNJT05fTk9fRE9UU30pCi0gICAgaWYgKF9QR05fREVCVUcpCi0gICAgICBzdHJpbmcgKEFQUEVORCBuYW1lICJfZCIpCi0gICAgZW5kaWYoKQorICAgICAgICAgIHNldCAobmFtZSBweXRob24ke3ZlcnNpb25fbm9fZG90c30pCisgICAgICAgICAgaWYgKF9QR05fREVCVUcpCisgICAgICAgICAgICBzdHJpbmcgKEFQUEVORCBuYW1lICJfZCIpCisgICAgICAgICAgZW5kaWYoKQogCi0gICAgbGlzdCAoQVBQRU5EIG5hbWVzICIke25hbWV9IikKLSAgZW5kaWYoKQorICAgICAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyAiJHtuYW1lfSIpCisgICAgICAgIGVuZGlmKCkKIAotICBpZiAoX1BHTl9QT1NJWCkKLSAgICBpZiAoREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MpCi0gICAgICBzZXQgKGFiaSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1N9IikKLSAgICBlbHNlKCkKLSAgICAgIGlmIChfUEdOX0VYRUNVVEFCTEUgT1IgX1BHTl9DT05GSUcpCi0gICAgICAgIHNldCAoYWJpICIiKQotICAgICAgZWxzZSgpCi0gICAgICAgIHNldCAoYWJpICJtdSIgIm0iICJ1IiAiIikKKyAgICAgICAgaWYgKF9QR05fUE9TSVgpCisgICAgICAgICAgaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTKQorICAgICAgICAgICAgc2V0IChhYmkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTfSIpCisgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICBpZiAoX1BHTl9JTlRFUlBSRVRFUiBPUiBfUEdOX0NPTkZJRykKKyAgICAgICAgICAgICAgc2V0IChhYmkgIiIpCisgICAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgICAgc2V0IChhYmkgIm11IiAibSIgInUiICIiKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGVuZGlmKCkKKworICAgICAgICAgIGlmIChhYmkpCisgICAgICAgICAgICBpZiAoX1BHTl9DT05GSUcgQU5EIERFRklORUQgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUpCisgICAgICAgICAgICAgIHNldCAoYWJpbmFtZXMgIiR7YWJpfSIpCisgICAgICAgICAgICAgIGxpc3QgKFRSQU5TRk9STSBhYmluYW1lcyBQUkVQRU5EICIke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfS1weXRob24ke3ZlcnNpb259IikKKyAgICAgICAgICAgICAgbGlzdCAoVFJBTlNGT1JNIGFiaW5hbWVzIEFQUEVORCAiLWNvbmZpZyIpCisgICAgICAgICAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyAke2FiaW5hbWVzfSkKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICAgIHNldCAoYWJpbmFtZXMgIiR7YWJpfSIpCisgICAgICAgICAgICBsaXN0IChUUkFOU0ZPUk0gYWJpbmFtZXMgUFJFUEVORCAicHl0aG9uJHt2ZXJzaW9ufSIpCisgICAgICAgICAgICBpZiAoX1BHTl9DT05GSUcpCisgICAgICAgICAgICAgIGxpc3QgKFRSQU5TRk9STSBhYmluYW1lcyBBUFBFTkQgIi1jb25maWciKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIG5hbWVzICR7YWJpbmFtZXN9KQorICAgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgdW5zZXQgKGFiaW5hbWVzKQorICAgICAgICAgICAgaWYgKF9QR05fQ09ORklHIEFORCBERUZJTkVEIENNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFKQorICAgICAgICAgICAgICBzZXQgKGFiaW5hbWVzICIke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfS1weXRob24ke3ZlcnNpb259IikKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBhYmluYW1lcyAicHl0aG9uJHt2ZXJzaW9ufSIpCisgICAgICAgICAgICBpZiAoX1BHTl9DT05GSUcpCisgICAgICAgICAgICAgIGxpc3QgKFRSQU5TRk9STSBhYmluYW1lcyBBUFBFTkQgIi1jb25maWciKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIG5hbWVzICR7YWJpbmFtZXN9KQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kZm9yZWFjaCgpCisgICAgICBpZiAoX1BHTl9JTlRFUlBSRVRFUikKKyAgICAgICAgbGlzdCAoQVBQRU5EIG5hbWVzIHB5dGhvbiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1J9IHB5dGhvbikKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYgKGltcGxlbWVudGF0aW9uIFNUUkVRVUFMICJJcm9uUHl0aG9uIikKKyAgICAgIGlmIChfUEdOX0lOVEVSUFJFVEVSKQorICAgICAgICBpZiAoTk9UIENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJMaW51eCIpCisgICAgICAgICAgIyBEbyBub3QgdXNlIHdyYXBwZXIgc2NyaXB0IG9uIExpbnV4IGJlY2F1c2UgaXQgaXMgYnVnZ3k6IC1jIGludGVycHJldGVyIG9wdGlvbiBjYW5ub3QgYmUgdXNlZAorICAgICAgICAgIGZvcmVhY2ggKHZlcnNpb24gSU4gTElTVFMgX1BHTl9WRVJTSU9OKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIG5hbWVzICJpcHkke3ZlcnNpb259IikKKyAgICAgICAgICBlbmRmb3JlYWNoKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBsaXN0IChBUFBFTkQgbmFtZXMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fSU5URVJQUkVURVJfTkFNRVN9KQorICAgICAgZWxzZWlmIChfUEdOX0NPTVBJTEVSKQorICAgICAgICBsaXN0IChBUFBFTkQgbmFtZXMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fQ09NUElMRVJfTkFNRVN9KQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZiAoaW1wbGVtZW50YXRpb24gU1RSRVFVQUwgIlB5UHkiKQorICAgICAgaWYgKF9QR05fSU5URVJQUkVURVIpCisgICAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyAke18ke19QWVRIT05fUFJFRklYfV9QWVBZX05BTUVTfSkKKyAgICAgIGVsc2VpZiAoX1BHTl9MSUJSQVJZKQorICAgICAgICBpZiAoX1BHTl9XSU4zMikKKyAgICAgICAgICBmb3JlYWNoICh2ZXJzaW9uIElOIExJU1RTIF9QR05fVkVSU0lPTikKKyAgICAgICAgICAgIHN0cmluZyAoUkVQTEFDRSAiLiIgIiIgdmVyc2lvbl9ub19kb3RzICR7dmVyc2lvbn0pCisKKyAgICAgICAgICAgIHNldCAobmFtZSAicHl0aG9uJHt2ZXJzaW9uX25vX2RvdHN9IikKKyAgICAgICAgICAgIGlmIChfUEdOX0RFQlVHKQorICAgICAgICAgICAgICBzdHJpbmcgKEFQUEVORCBuYW1lICJfZCIpCisgICAgICAgICAgICBlbmRpZigpCisgICAgICAgICAgICBsaXN0IChBUFBFTkQgbmFtZXMgIiR7bmFtZX0iKQorICAgICAgICAgIGVuZGZvcmVhY2goKQorICAgICAgICBlbmRpZigpCisgICAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyAke18ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQl9OQU1FU30pCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQotCi0gICAgaWYgKGFiaSkKLSAgICAgIGlmIChfUEdOX0NPTkZJRyBBTkQgREVGSU5FRCBDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSkKLSAgICAgICAgc2V0IChhYmluYW1lcyAiJHthYml9IikKLSAgICAgICAgbGlzdCAoVFJBTlNGT1JNIGFiaW5hbWVzIFBSRVBFTkQgIiR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9LXB5dGhvbiR7X1BHTl9WRVJTSU9OfSIpCi0gICAgICAgIGxpc3QgKFRSQU5TRk9STSBhYmluYW1lcyBBUFBFTkQgIi1jb25maWciKQotICAgICAgICBsaXN0IChBUFBFTkQgbmFtZXMgJHthYmluYW1lc30pCi0gICAgICBlbmRpZigpCi0gICAgICBzZXQgKGFiaW5hbWVzICIke2FiaX0iKQotICAgICAgbGlzdCAoVFJBTlNGT1JNIGFiaW5hbWVzIFBSRVBFTkQgInB5dGhvbiR7X1BHTl9WRVJTSU9OfSIpCi0gICAgICBpZiAoX1BHTl9DT05GSUcpCi0gICAgICAgIGxpc3QgKFRSQU5TRk9STSBhYmluYW1lcyBBUFBFTkQgIi1jb25maWciKQotICAgICAgZW5kaWYoKQotICAgICAgbGlzdCAoQVBQRU5EIG5hbWVzICR7YWJpbmFtZXN9KQotICAgIGVsc2UoKQotICAgICAgaWYgKF9QR05fQ09ORklHIEFORCBERUZJTkVEIENNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFKQotICAgICAgICBzZXQgKGFiaW5hbWVzICIke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfS1weXRob24ke19QR05fVkVSU0lPTn0iKQotICAgICAgZW5kaWYoKQotICAgICAgbGlzdCAoQVBQRU5EIGFiaW5hbWVzICJweXRob24ke19QR05fVkVSU0lPTn0iKQotICAgICAgaWYgKF9QR05fQ09ORklHKQotICAgICAgICBsaXN0IChUUkFOU0ZPUk0gYWJpbmFtZXMgQVBQRU5EICItY29uZmlnIikKLSAgICAgIGVuZGlmKCkKLSAgICAgIGxpc3QgKEFQUEVORCBuYW1lcyAke2FiaW5hbWVzfSkKLSAgICBlbmRpZigpCi0gIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCiAKICAgc2V0ICgke19QWVRIT05fUEdOX05BTUVTfSAke25hbWVzfSBQQVJFTlRfU0NPUEUpCiBlbmRmdW5jdGlvbigpCkBAIC0yODksMTIgKzQyOCwxNiBAQAogZnVuY3Rpb24gKF9QWVRIT05fR0VUX0NPTkZJR19WQVIgX1BZVEhPTl9QR0NWX1ZBTFVFIE5BTUUpCiAgIHVuc2V0ICgke19QWVRIT05fUEdDVl9WQUxVRX0gUEFSRU5UX1NDT1BFKQogCi0gIGlmIChOT1QgTkFNRSBNQVRDSEVTICJeKFBSRUZJWHxBQklGTEFHU3xDT05GSUdESVJ8SU5DTFVERVN8TElCUykkIikKKyAgaWYgKE5PVCBOQU1FIE1BVENIRVMgIl4oUFJFRklYfEFCSUZMQUdTfENPTkZJR0RJUnxJTkNMVURFU3xMSUJTfFNPQUJJKSQiKQogICAgIHJldHVybigpCiAgIGVuZGlmKCkKIAogICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRykKLSAgICBzZXQgKGNvbmZpZ19mbGFnICItLSR7TkFNRX0iKQorICAgIGlmIChOQU1FIFNUUkVRVUFMICJTT0FCSSIpCisgICAgICBzZXQgKGNvbmZpZ19mbGFnICItLWV4dGVuc2lvbi1zdWZmaXgiKQorICAgIGVsc2UoKQorICAgICAgc2V0IChjb25maWdfZmxhZyAiLS0ke05BTUV9IikKKyAgICBlbmRpZigpCiAgICAgc3RyaW5nIChUT0xPV0VSICIke2NvbmZpZ19mbGFnfSIgY29uZmlnX2ZsYWcpCiAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9DT05GSUd9IiAke2NvbmZpZ19mbGFnfQogICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9yZXN1bHQKQEAgLTMwOSwxMyArNDUyLDE2IEBACiAgICAgICAgIHN0cmluZyAoUkVHRVggTUFUQ0hBTEwgIigtSXwtaXdpdGhzeXNyb290KVsgXSpbXiBdKyIgX3ZhbHVlcyAiJHtfdmFsdWVzfSIpCiAgICAgICAgIHN0cmluZyAoUkVHRVggUkVQTEFDRSAiKC1JfC1pd2l0aHN5c3Jvb3QpWyBdKiIgIiIgX3ZhbHVlcyAiJHtfdmFsdWVzfSIpCiAgICAgICAgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF92YWx1ZXMpCisgICAgICBlbHNlaWYgKE5BTUUgU1RSRVFVQUwgIlNPQUJJIikKKyAgICAgICAgIyBjbGVhbi11cDogcmVtb3ZlIHByZWZpeCBjaGFyYWN0ZXIgYW5kIHN1ZmZpeAorICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIl5bLi1dKC4rKSgke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWH18XFwuKHNvfHB5ZCkpJCIgIlxcMSIgX3ZhbHVlcyAiJHtfdmFsdWVzfSIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIEFORCBOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcpCiAgICAgaWYgKE5BTUUgU1RSRVFVQUwgIlBSRUZJWCIpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZzsgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLlBSRUZJWCxzeXNjb25maWcuRVhFQ19QUkVGSVgsc3lzY29uZmlnLkJBU0VfRVhFQ19QUkVGSVhdKSkiCisgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMgImltcG9ydCBzeXNcbnRyeTpcbiAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWdcbiAgIHN5cy5zdGRvdXQud3JpdGUoJzsnLmpvaW4oW3N5c2NvbmZpZy5QUkVGSVgsc3lzY29uZmlnLkVYRUNfUFJFRklYLHN5c2NvbmZpZy5CQVNFX0VYRUNfUFJFRklYXSkpXG5leGNlcHQgRXhjZXB0aW9uOlxuICAgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdiYXNlJykgb3IgJycsIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignaW5zdGFsbGVkX2Jhc2UnKSBvciAnJ10pKSIKICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9yZXN1bHQKICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF92YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKQEAgLTMyNiwyMCArNDcyLDUwIEBACiAgICAgICAgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF92YWx1ZXMpCiAgICAgICBlbmRpZigpCiAgICAgZWxzZWlmIChOQU1FIFNUUkVRVUFMICJJTkNMVURFUyIpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZzsgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9VHJ1ZSksc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9RmFsc2UpXSkpIgorICAgICAgaWYgKFdJTjMyKQorICAgICAgICBzZXQgKF9zY2hlbWUgIm50IikKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQgKF9zY2hlbWUgInBvc2l4X3ByZWZpeCIpCisgICAgICBlbmRpZigpCisgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5c1xudHJ5OlxuICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9VHJ1ZSksc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9RmFsc2UpXSkpXG5leGNlcHQgRXhjZXB0aW9uOlxuICAgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0aW5jbHVkZScpLHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGluY2x1ZGUnLCcke19zY2hlbWV9Jyksc3lzY29uZmlnLmdldF9wYXRoKCdpbmNsdWRlJyksc3lzY29uZmlnLmdldF9wYXRoKCdpbmNsdWRlJywnJHtfc2NoZW1lfScpXSkpIgogICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX3Jlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX3ZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKICAgICAgIGlmIChfcmVzdWx0KQogICAgICAgICB1bnNldCAoX3ZhbHVlcykKKyAgICAgIGVsc2UoKQorICAgICAgICBsaXN0IChSRU1PVkVfRFVQTElDQVRFUyBfdmFsdWVzKQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZiAoTkFNRSBTVFJFUVVBTCAiU09BQkkiKQorICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXNcbnRyeTpcbiAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWdcbiAgIHN5cy5zdGRvdXQud3JpdGUoJzsnLmpvaW4oW3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU09BQkknKSBvciAnJyxzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBvciAnJ10pKVxuZXhjZXB0IEV4Y2VwdGlvbjpcbiAgIGltcG9ydCBzeXNjb25maWc7c3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTT0FCSScpIG9yICcnLHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIG9yICcnXSkpIgorICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX3Jlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX3NvYWJpCisgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCisgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorICAgICAgaWYgKF9yZXN1bHQpCisgICAgICAgIHVuc2V0IChfdmFsdWVzKQorICAgICAgZWxzZSgpCisgICAgICAgIGZvcmVhY2ggKF9pdGVtIElOIExJU1RTIF9zb2FiaSkKKyAgICAgICAgICBpZiAoX2l0ZW0pCisgICAgICAgICAgICBzZXQgKF92YWx1ZXMgIiR7X2l0ZW19IikKKyAgICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGZvcmVhY2goKQorICAgICAgICBpZiAoX3ZhbHVlcykKKyAgICAgICAgICAjIGNsZWFuLXVwOiByZW1vdmUgcHJlZml4IGNoYXJhY3RlciBhbmQgc3VmZml4CisgICAgICAgICAgc3RyaW5nIChSRUdFWCBSRVBMQUNFICJeWy4tXSguKykoJHtDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVh9fFxcLihzb3xweWQpKSQiICJcXDEiIF92YWx1ZXMgIiR7X3ZhbHVlc30iKQorICAgICAgICBlbmRpZigpCiAgICAgICBlbmRpZigpCiAgICAgZWxzZSgpCiAgICAgICBzZXQgKGNvbmZpZ19mbGFnICIke05BTUV9IikKICAgICAgIGlmIChOQU1FIFNUUkVRVUFMICJDT05GSUdESVIiKQogICAgICAgICBzZXQgKGNvbmZpZ19mbGFnICJMSUJQTCIpCiAgICAgICBlbmRpZigpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZzsgc3lzLnN0ZG91dC53cml0ZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJyR7Y29uZmlnX2ZsYWd9JykpIgorICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXNcbnRyeTpcbiAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWdcbiAgIHN5cy5zdGRvdXQud3JpdGUoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCcke2NvbmZpZ19mbGFnfScpKVxuZXhjZXB0IEV4Y2VwdGlvbjpcbiAgIGltcG9ydCBzeXNjb25maWdcbiAgIHN5cy5zdGRvdXQud3JpdGUoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCcke2NvbmZpZ19mbGFnfScpKSIKICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9yZXN1bHQKICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF92YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKQEAgLTM2Nyw2ICs1NDMsMTAgQEAKICAgICBsaXN0IChSRU1PVkVfRFVQTElDQVRFUyBfdmFsdWVzKQogICBlbmRpZigpCiAKKyAgaWYgKFdJTjMyIEFORCBOQU1FIE1BVENIRVMgIl4oUFJFRklYfENPTkZJR0RJUnxJTkNMVURFUykkIikKKyAgICBmaWxlIChUT19DTUFLRV9QQVRIICIke192YWx1ZXN9IiBfdmFsdWVzKQorICBlbmRpZigpCisKICAgc2V0ICgke19QWVRIT05fUEdDVl9WQUxVRX0gIiR7X3ZhbHVlc30iIFBBUkVOVF9TQ09QRSkKIGVuZGZ1bmN0aW9uKCkKIApAQCAtMzkzLDYgKzU3MywxNiBAQAogICAgICAgICBzZXQgKCR7X1BHVl9QUkVGSVh9VkVSU0lPTl9NSU5PUiAiJHtDTUFLRV9NQVRDSF8yfSIgUEFSRU5UX1NDT1BFKQogICAgICAgICBzZXQgKCR7X1BHVl9QUkVGSVh9VkVSU0lPTiAiJHtDTUFLRV9NQVRDSF8xfS4ke0NNQUtFX01BVENIXzJ9IiBQQVJFTlRfU0NPUEUpCiAgICAgICAgIHNldCAoJHtfUEdWX1BSRUZJWH1BQkkgIiR7Q01BS0VfTUFUQ0hfM30iIFBBUkVOVF9TQ09QRSkKKyAgICAgIGVsc2VpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBNQVRDSEVTICJweXB5KDMpPyIpCisgICAgICAgIHNldCAodmVyc2lvbiAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgICAgIGlmICh2ZXJzaW9uIEVRVUFMICIzIikKKyAgICAgICAgICBzZXQgKCR7X1BHVl9QUkVGSVh9VkVSU0lPTl9NQUpPUiAiMyIgUEFSRU5UX1NDT1BFKQorICAgICAgICAgIHNldCAoJHtfUEdWX1BSRUZJWH1WRVJTSU9OICIzIiBQQVJFTlRfU0NPUEUpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHNldCAoJHtfUEdWX1BSRUZJWH1WRVJTSU9OX01BSk9SICIyIiBQQVJFTlRfU0NPUEUpCisgICAgICAgICAgc2V0ICgke19QR1ZfUFJFRklYfVZFUlNJT04gIjIiIFBBUkVOVF9TQ09QRSkKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBzZXQgKCR7X1BHVl9QUkVGSVh9QUJJICIiIFBBUkVOVF9TQ09QRSkKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAgIGVsc2UoKQpAQCAtNDA3LDEzICs1OTcsMTMgQEAKICAgICAgIGxpc3QgKEdFVCB2ZXJzaW9ucyAxIHZlcnNpb25fbWlub3IpCiAgICAgICBsaXN0IChHRVQgdmVyc2lvbnMgMiB2ZXJzaW9uX3BhdGNoKQogCi0gICAgICBzZXQgKCR7X1BHVl9QUkVGSVh9VkVSU0lPTiAiJHt2ZXJzaW9uX21ham9yfS4ke3ZlcnNpb25fbWlub3J9IiBQQVJFTlRfU0NPUEUpCisgICAgICBzZXQgKCR7X1BHVl9QUkVGSVh9VkVSU0lPTiAiJHt2ZXJzaW9uX21ham9yfS4ke3ZlcnNpb25fbWlub3J9LiR7dmVyc2lvbl9wYXRjaH0iIFBBUkVOVF9TQ09QRSkKICAgICAgIHNldCAoJHtfUEdWX1BSRUZJWH1WRVJTSU9OX01BSk9SICR7dmVyc2lvbl9tYWpvcn0gUEFSRU5UX1NDT1BFKQogICAgICAgc2V0ICgke19QR1ZfUFJFRklYfVZFUlNJT05fTUlOT1IgJHt2ZXJzaW9uX21pbm9yfSBQQVJFTlRfU0NPUEUpCiAgICAgICBzZXQgKCR7X1BHVl9QUkVGSVh9VkVSU0lPTl9QQVRDSCAke3ZlcnNpb25fcGF0Y2h9IFBBUkVOVF9TQ09QRSkKIAogICAgICAgIyBjb21wdXRlIEFCSSBmbGFncwotICAgICAgaWYgKHZlcnNpb25fbWFqb3IgVkVSU0lPTl9HUkVBVEVSIDIpCisgICAgICBpZiAodmVyc2lvbl9tYWpvciBWRVJTSU9OX0dSRUFURVIgIjIiKQogICAgICAgICBmaWxlIChTVFJJTkdTICIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn0vcHljb25maWcuaCIgY29uZmlnIFJFR0VYICIoUHlfREVCVUd8V0lUSF9QWU1BTExPQ3xQeV9VTklDT0RFX1NJWkV8TVNfV0lOMzIpIikKICAgICAgICAgc2V0IChhYmkpCiAgICAgICAgIGlmIChjb25maWcgTUFUQ0hFUyAiI1sgXSpkZWZpbmVbIF0rTVNfV0lOMzIiKQpAQCAtNDM5LDYgKzYyOSwzNiBAQAogICBlbmRpZigpCiBlbmRmdW5jdGlvbigpCiAKK2Z1bmN0aW9uIChfUFlUSE9OX0dFVF9MQVVOQ0hFUiBfUFlUSE9OX1BHTF9OQU1FKQorICBjbWFrZV9wYXJzZV9hcmd1bWVudHMgKFBBUlNFX0FSR1YgMSBfUEdMICJJTlRFUlBSRVRFUjtDT01QSUxFUiIgIiIgIiIpCisKKyAgdW5zZXQgKHtfUFlUSE9OX1BHTF9OQU1FfSBQQVJFTlRfU0NPUEUpCisKKyAgaWYgKChfUEdMX0lOVEVSUFJFVEVSIEFORCBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUpCisgICAgICBPUiAoX1BHTF9DT01QSUxFUiBBTkQgTk9UIF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGlmICgiSXJvblB5dGhvbiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMKKyAgICAgIEFORCBOT1QgU1lTVEVNX05BTUUgTUFUQ0hFUyAiV2luZG93c3xMaW51eCIpCisgICAgaWYgKF9QR0xfSU5URVJQUkVURVIpCisgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50IChuYW1lICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgTkFNRSkKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKGV4dCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIExBU1RfRVhUKQorICAgICAgaWYgKG5hbWUgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fSU5URVJQUkVURVJfTkFNRVMKKyAgICAgICAgICBBTkQgZXh0IFNUUkVRVUFMICIuZXhlIikKKyAgICAgICAgc2V0ICgke19QWVRIT05fUEdMX05BTUV9ICIkeyR7X1BZVEhPTl9QUkVGSVh9X0RPVE5FVF9MQVVOQ0hFUn0iIFBBUkVOVF9TQ09QRSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKG5hbWUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfSIgTkFNRSkKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKGV4dCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IiBMQVNUX0VYVCkKKyAgICAgIGlmIChuYW1lIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0NPTVBJTEVSX05BTUVTCisgICAgICAgICAgQU5EIGV4dCBTVFJFUVVBTCAiLmV4ZSIpCisgICAgICAgIHNldCAoJHtfUFlUSE9OX1BHTF9OQU1FfSAiJHske19QWVRIT05fUFJFRklYfV9ET1RORVRfTEFVTkNIRVJ9IiBQQVJFTlRfU0NPUEUpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKIAogZnVuY3Rpb24gKF9QWVRIT05fVkFMSURBVEVfSU5URVJQUkVURVIpCiAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUpCkBAIC00NDcsMjAgKzY2NywyMyBAQAogCiAgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAoUEFSU0VfQVJHViAwIF9QVkkgIkVYQUNUO0NIRUNLX0VYSVNUUyIgIiIgIiIpCiAgIGlmIChfUFZJX1VOUEFSU0VEX0FSR1VNRU5UUykKLSAgICBzZXQgKGV4cGVjdGVkX3ZlcnNpb24gJHtfUFZJX1VOUEFSU0VEX0FSR1VNRU5UU30pCisgICAgc2V0IChleHBlY3RlZF92ZXJzaW9uICIke19QVklfVU5QQVJTRURfQVJHVU1FTlRTfSIpCiAgIGVsc2UoKQogICAgIHVuc2V0IChleHBlY3RlZF92ZXJzaW9uKQogICBlbmRpZigpCiAKICAgaWYgKF9QVklfQ0hFQ0tfRVhJU1RTIEFORCBOT1QgRVhJU1RTICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIpCiAgICAgIyBpbnRlcnByZXRlciBkb2VzIG5vdCBleGlzdCBhbnltb3JlCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBpbnRlcnByZXRlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9XCIiIFBBUkVOVF9TQ09QRSkKICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFLU5PVEZPVU5EIikKICAgICByZXR1cm4oKQogICBlbmRpZigpCiAKKyAgX3B5dGhvbl9nZXRfbGF1bmNoZXIgKGxhdW5jaGVyIElOVEVSUFJFVEVSKQorCiAgICMgdmFsaWRhdGUgQUJJIGNvbXBhdGliaWxpdHkKICAgaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQUJJKQotICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7bGF1bmNoZXJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLmFiaWZsYWdzKSIKICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBhYmkKQEAgLTQ3Miw2ICs2OTUsNyBAQAogICAgIGVuZGlmKCkKICAgICBpZiAoTk9UIGFiaSBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUykKICAgICAgICMgaW5jb21wYXRpYmxlIEFCSQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfUkVBU09OX0ZBSUxVUkUgIldyb25nIEFCSSBmb3IgdGhlIGludGVycHJldGVyIFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX1cIiIgUEFSRU5UX1NDT1BFKQogICAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRS1OT1RGT1VORCIpCiAgICAgICByZXR1cm4oKQogICAgIGVuZGlmKCkKQEAgLTQ3OSwyNCArNzAzLDUyIEBACiAKICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAocHl0aG9uX25hbWUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiBOQU1FKQogCi0gIGlmIChleHBlY3RlZF92ZXJzaW9uIEFORCBOT1QgcHl0aG9uX25hbWUgU1RSRVFVQUwgInB5dGhvbiR7ZXhwZWN0ZWRfdmVyc2lvbn0ke2FiaX0ke0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYfSIpCi0gICAgIyBleGVjdXRhYmxlIGZvdW5kIG11c3QgaGF2ZSBhIHNwZWNpZmljIHZlcnNpb24KLSAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgnLicuam9pbihbc3RyKHgpIGZvciB4IGluIHN5cy52ZXJzaW9uX2luZm9bOjJdXSkpIgotICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAotICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIHZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCi0gICAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKLSAgICBpZiAocmVzdWx0IE9SIChfUFZJX0VYQUNUIEFORCBOT1QgdmVyc2lvbiBWRVJTSU9OX0VRVUFMIGV4cGVjdGVkX3ZlcnNpb24pIE9SICh2ZXJzaW9uIFZFUlNJT05fTEVTUyBleHBlY3RlZF92ZXJzaW9uKSkKLSAgICAgICMgaW50ZXJwcmV0ZXIgbm90IHVzYWJsZSBvciBoYXMgd3JvbmcgbWFqb3IgdmVyc2lvbgotICAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRS1OT1RGT1VORCIpCi0gICAgICByZXR1cm4oKQorICBpZiAoZXhwZWN0ZWRfdmVyc2lvbikKKyAgICBpZiAoTk9UIHB5dGhvbl9uYW1lIFNUUkVRVUFMICJweXRob24ke2V4cGVjdGVkX3ZlcnNpb259JHthYml9JHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0iKQorICAgICAgIyBjb21wdXRlIG51bWJlciBvZiBjb21wb25lbnRzIGZvciB2ZXJzaW9uCisgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIlteLl0iICIiIGRvdHMgIiR7ZXhwZWN0ZWRfdmVyc2lvbn0iKQorICAgICAgIyBhZGQgb25lIGRvdCBiZWNhdXNlIHRoZXJlIGlzIG9uZSBkb3QgbGVzcyB0aGFuIHRoZXJlIGFyZSBjb21wb25lbnRzCisgICAgICBzdHJpbmcgKExFTkdUSCAiJHtkb3RzfS4iIGNvdW50KQorICAgICAgaWYgKGNvdW50IEdSRUFURVIgMykKKyAgICAgICAgc2V0IChjb3VudCAzKQorICAgICAgZW5kaWYoKQorCisgICAgICAjIGV4ZWN1dGFibGUgZm91bmQgbXVzdCBoYXZlIGEgc3BlY2lmaWMgdmVyc2lvbgorICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7bGF1bmNoZXJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgnLicuam9pbihbc3RyKHgpIGZvciB4IGluIHN5cy52ZXJzaW9uX2luZm9bOiR7Y291bnR9XV0pKSIKKyAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAorICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKyAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICMgaW50ZXJwcmV0ZXIgaXMgbm90IHVzYWJsZQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IHVzZSB0aGUgaW50ZXJwcmV0ZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfVwiIiBQQVJFTlRfU0NPUEUpCisgICAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUtTk9URk9VTkQiKQorICAgICAgZWxzZSgpCisgICAgICAgIGlmIChfUFZJX0VYQUNUIEFORCBOT1QgdmVyc2lvbiBWRVJTSU9OX0VRVUFMIGV4cGVjdGVkX3ZlcnNpb24pCisgICAgICAgICAgIyBpbnRlcnByZXRlciBoYXMgd3JvbmcgdmVyc2lvbgorICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFICJXcm9uZyB2ZXJzaW9uIGZvciB0aGUgaW50ZXJwcmV0ZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfVwiIiBQQVJFTlRfU0NPUEUpCisgICAgICAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRS1OT1RGT1VORCIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgICMgY2hlY2sgdGhhdCB2ZXJzaW9uIGlzIE9LCisgICAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4oWzAtOV0rKVxcLj8uKiQiICJcXDEiIG1ham9yX3ZlcnNpb24gIiR7dmVyc2lvbn0iKQorICAgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeKFswLTldKylcXC4/LiokIiAiXFwxIiBleHBlY3RlZF9tYWpvcl92ZXJzaW9uICIke2V4cGVjdGVkX3ZlcnNpb259IikKKyAgICAgICAgICBpZiAoTk9UIG1ham9yX3ZlcnNpb24gVkVSU0lPTl9FUVVBTCBleHBlY3RlZF9tYWpvcl92ZXJzaW9uCisgICAgICAgICAgICAgIE9SIE5PVCB2ZXJzaW9uIFZFUlNJT05fR1JFQVRFUl9FUVVBTCBleHBlY3RlZF92ZXJzaW9uKQorICAgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfUkVBU09OX0ZBSUxVUkUgIldyb25nIHZlcnNpb24gZm9yIHRoZSBpbnRlcnByZXRlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9XCIiIFBBUkVOVF9TQ09QRSkKKyAgICAgICAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUtTk9URk9VTkQiKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQorICAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKKyAgICAgICAgcmV0dXJuKCkKKyAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAgIGVsc2UoKQogICAgIGlmIChOT1QgcHl0aG9uX25hbWUgU1RSRVFVQUwgInB5dGhvbiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1J9JHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0iKQogICAgICAgIyBleGVjdXRhYmxlIGZvdW5kIGRvIG5vdCBoYXZlIHZlcnNpb24gaW4gbmFtZQogICAgICAgIyBlbnN1cmUgbWFqb3IgdmVyc2lvbiBpcyBPSwotICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAke2xhdW5jaGVyfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy52ZXJzaW9uX2luZm9bMF0pKSIKICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAogICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgdmVyc2lvbgpAQCAtNTA0LDE2ICs3NTYsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCiAgICAgICBpZiAocmVzdWx0IE9SIE5PVCB2ZXJzaW9uIEVRVUFMIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SKQogICAgICAgICAjIGludGVycHJldGVyIG5vdCB1c2FibGUgb3IgaGFzIHdyb25nIG1ham9yIHZlcnNpb24KKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IHVzZSB0aGUgaW50ZXJwcmV0ZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfVwiIiBQQVJFTlRfU0NPUEUpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFICJXcm9uZyBtYWpvciB2ZXJzaW9uIGZvciB0aGUgaW50ZXJwcmV0ZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfVwiIiBQQVJFTlRfU0NPUEUpCisgICAgICAgIGVuZGlmKCkKICAgICAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRS1OT1RGT1VORCIpCiAgICAgICAgIHJldHVybigpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKLSAgaWYgKENNQUtFX1NJWkVPRl9WT0lEX1AgQU5EICJEZXZlbG9wbWVudCIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMKKyAgaWYgKENNQUtFX1NJWkVPRl9WT0lEX1AgQU5EICgiRGV2ZWxvcG1lbnQuTW9kdWxlIiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUworICAgICAgICBPUiAiRGV2ZWxvcG1lbnQuRW1iZWQiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTKQogICAgICAgQU5EIE5PVCBDTUFLRV9DUk9TU0NPTVBJTElORykKICAgICAjIEluIHRoaXMgY2FzZSwgaW50ZXJwcmV0ZXIgbXVzdCBoYXZlIHNhbWUgYXJjaGl0ZWN0dXJlIGFzIGVudmlyb25tZW50Ci0gICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtsYXVuY2hlcn0gIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5cywgc3RydWN0OyBzeXMuc3Rkb3V0LndyaXRlKHN0cihzdHJ1Y3QuY2FsY3NpemUoXCJQXCIpKSkiCiAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgc2l6ZQpAQCAtNTIxLDYgKzc3OSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCiAgICAgaWYgKHJlc3VsdCBPUiBOT1Qgc2l6ZSBFUVVBTCBDTUFLRV9TSVpFT0ZfVk9JRF9QKQogICAgICAgIyBpbnRlcnByZXRlciBub3QgdXNhYmxlIG9yIGhhcyB3cm9uZyBhcmNoaXRlY3R1cmUKKyAgICAgIGlmIChyZXN1bHQpCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFICJDYW5ub3QgdXNlIHRoZSBpbnRlcnByZXRlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9XCIiIFBBUkVOVF9TQ09QRSkKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiV3JvbmcgYXJjaGl0ZWN0dXJlIGZvciB0aGUgaW50ZXJwcmV0ZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfVwiIiBQQVJFTlRfU0NPUEUpCisgICAgICBlbmRpZigpCiAgICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFLU5PVEZPVU5EIikKICAgICAgIHJldHVybigpCiAgICAgZW5kaWYoKQpAQCAtNTI4LDQ5ICs3OTEsNjggQEAKIGVuZGZ1bmN0aW9uKCkKIAogCi1mdW5jdGlvbiAoX1BZVEhPTl9WQUxJREFURV9DT01QSUxFUiBleHBlY3RlZF92ZXJzaW9uKQorZnVuY3Rpb24gKF9QWVRIT05fVkFMSURBVEVfQ09NUElMRVIpCiAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQogICAgIHJldHVybigpCiAgIGVuZGlmKCkKIAotICBjbWFrZV9wYXJzZV9hcmd1bWVudHMgKF9QVkMgIkVYQUNUO0NIRUNLX0VYSVNUUyIgIiIgIiIgJHtBUkdOfSkKKyAgY21ha2VfcGFyc2VfYXJndW1lbnRzIChQQVJTRV9BUkdWIDAgX1BWQyAiRVhBQ1Q7Q0hFQ0tfRVhJU1RTIiAiIiAiIikKICAgaWYgKF9QVkNfVU5QQVJTRURfQVJHVU1FTlRTKQogICAgIHNldCAobWFqb3JfdmVyc2lvbiBGQUxTRSkKLSAgICBzZXQgKGV4cGVjdGVkX3ZlcnNpb24gJHtfUFZDX1VOUEFSU0VEX0FSR1VNRU5UU30pCisgICAgc2V0IChleHBlY3RlZF92ZXJzaW9uICIke19QVkNfVU5QQVJTRURfQVJHVU1FTlRTfSIpCiAgIGVsc2UoKQogICAgIHNldCAobWFqb3JfdmVyc2lvbiBUUlVFKQotICAgIHNldCAoZXhwZWN0ZWRfdmVyc2lvbiAke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfSkKKyAgICBzZXQgKGV4cGVjdGVkX3ZlcnNpb24gIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1J9IikKICAgICBzZXQgKF9QVkNfRVhBQ1QgVFJVRSkKICAgZW5kaWYoKQogCiAgIGlmIChfUFZDX0NIRUNLX0VYSVNUUyBBTkQgTk9UIEVYSVNUUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IikKICAgICAjIENvbXBpbGVyIGRvZXMgbm90IGV4aXN0IGFueW1vcmUKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9Db21waWxlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IGZpbmQgdGhlIGNvbXBpbGVyIFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9XCIiIFBBUkVOVF9TQ09QRSkKICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUiBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVItTk9URk9VTkQiKQogICAgIHJldHVybigpCiAgIGVuZGlmKCkKIAorICBfcHl0aG9uX2dldF9sYXVuY2hlciAobGF1bmNoZXIgQ09NUElMRVIpCisKICAgIyByZXRyaWV2ZSBweXRob24gZW52aXJvbm1lbnQgdmVyc2lvbiBmcm9tIGNvbXBpbGVyCiAgIHNldCAod29ya2luZ19kaXIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9QeXRob25Db21waWxlclZlcnNpb24uZGlyIikKICAgaWYgKG1ham9yX3ZlcnNpb24pCiAgICAgIyBjaGVjayBvbmx5IG1ham9yIHZlcnNpb24KICAgICBmaWxlIChXUklURSAiJHt3b3JraW5nX2Rpcn0vdmVyc2lvbi5weSIgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy52ZXJzaW9uX2luZm9bMF0pKSIpCiAgIGVsc2UoKQotICAgIGZpbGUgKFdSSVRFICIke3dvcmtpbmdfZGlyfS92ZXJzaW9uLnB5IiAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgnLicuam9pbihbc3RyKHgpIGZvciB4IGluIHN5cy52ZXJzaW9uX2luZm9bOjJdXSkpXG4iKQorICAgICMgY29tcHV0ZSBudW1iZXIgb2YgY29tcG9uZW50cyBmb3IgdmVyc2lvbgorICAgIHN0cmluZyAoUkVHRVggUkVQTEFDRSAiW14uXSIgIiIgZG90cyAiJHtleHBlY3RlZF92ZXJzaW9ufSIpCisgICAgIyBhZGQgb25lIGRvdCBiZWNhdXNlIHRoZXJlIGlzIG9uZSBkb3QgbGVzcyB0aGFuIHRoZXJlIGFyZSBjb21wb25lbnRzCisgICAgc3RyaW5nIChMRU5HVEggIiR7ZG90c30uIiBjb3VudCkKKyAgICBpZiAoY291bnQgR1JFQVRFUiAzKQorICAgICAgc2V0IChjb3VudCAzKQorICAgIGVuZGlmKCkKKyAgICBmaWxlIChXUklURSAiJHt3b3JraW5nX2Rpcn0vdmVyc2lvbi5weSIgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoJy4nLmpvaW4oW3N0cih4KSBmb3IgeCBpbiBzeXMudmVyc2lvbl9pbmZvWzoke2NvdW50fV1dKSlcbiIpCiAgIGVuZGlmKCkKLSAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUn0iIC90YXJnZXQ6ZXhlIC9lbWJlZCAiJHt3b3JraW5nX2Rpcn0vdmVyc2lvbi5weSIKKyAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7bGF1bmNoZXJ9ICIke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9DT01QSUxFUl9BUkNIX0ZMQUdTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgL3RhcmdldDpleGUgL2VtYmVkICIke3dvcmtpbmdfZGlyfS92ZXJzaW9uLnB5IgogICAgICAgICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke3dvcmtpbmdfZGlyfSIKICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUVVJRVQKICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAogICAgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQotICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7d29ya2luZ19kaXJ9L3ZlcnNpb24iCisgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKGlyX2RpciAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IiBESVJFQ1RPUlkpCisgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52ICJNT05PX1BBVEg9JHtpcl9kaXJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7JHtfUFlUSE9OX1BSRUZJWH1fRE9UTkVUX0xBVU5DSEVSfSAiJHt3b3JraW5nX2Rpcn0vdmVyc2lvbi5leGUiCiAgICAgICAgICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7d29ya2luZ19kaXJ9IgogICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgdmVyc2lvbgogICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUKQotICBmaWxlIChSRU1PVkVfUkVDVVJTRSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9ESVJ9IikKLQotICBpZiAocmVzdWx0IE9SIChfUFZDX0VYQUNUIEFORCBOT1QgdmVyc2lvbiBWRVJTSU9OX0VRVUFMIGV4cGVjdGVkX3ZlcnNpb24pIE9SICh2ZXJzaW9uIFZFUlNJT05fTEVTUyBleHBlY3RlZF92ZXJzaW9uKSkKLSAgICAjIENvbXBpbGVyIG5vdCB1c2FibGUgb3IgaGFzIHdyb25nIHZlcnNpb24KKyAgZmlsZSAoUkVNT1ZFX1JFQ1VSU0UgIiR7d29ya2luZ19kaXJ9IikKKyAgaWYgKHJlc3VsdCkKKyAgICAjIGNvbXBpbGVyIGlzIG5vdCB1c2FibGUKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9Db21waWxlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IHVzZSB0aGUgY29tcGlsZXIgXCIke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUn1cIiIgUEFSRU5UX1NDT1BFKQorICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9DT01QSUxFUi1OT1RGT1VORCIpCisgIGVsc2VpZiAoKF9QVkNfRVhBQ1QgQU5EIE5PVCB2ZXJzaW9uIFZFUlNJT05fRVFVQUwgZXhwZWN0ZWRfdmVyc2lvbikKKyAgICAgICAgICBPUiBOT1QgdmVyc2lvbiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgZXhwZWN0ZWRfdmVyc2lvbikKKyAgICAjIENvbXBpbGVyIGhhcyB3cm9uZyB2ZXJzaW9uCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ29tcGlsZXJfUkVBU09OX0ZBSUxVUkUgIldyb25nIHZlcnNpb24gZm9yIHRoZSBjb21waWxlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfVwiIiBQQVJFTlRfU0NPUEUpCiAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSLU5PVEZPVU5EIikKICAgZW5kaWYoKQogZW5kZnVuY3Rpb24oKQpAQCAtNTc4LDYgKzg2MCw3IEBACiAKIGZ1bmN0aW9uIChfUFlUSE9OX1ZBTElEQVRFX0xJQlJBUlkpCiAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSkKKyAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcpCiAgICAgcmV0dXJuKCkKICAgZW5kaWYoKQogCkBAIC01OTAsNiArODczLDcgQEAKIAogICBpZiAoX1BWTF9DSEVDS19FWElTVFMgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iKQogICAgICMgbGlicmFyeSBkb2VzIG5vdCBleGlzdCBhbnltb3JlCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfVwiIiBQQVJFTlRfU0NPUEUpCiAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UtTk9URk9VTkQiKQogICAgIGlmIChXSU4zMikKICAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUctTk9URk9VTkQiKQpAQCAtNjAzLDE2ICs4ODcsMjEgQEAKIAogICBpZiAoREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9BQkkgQU5EIE5PVCBsaWJfQUJJIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTKQogICAgICMgaW5jb21wYXRpYmxlIEFCSQorICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X1JFQVNPTl9GQUlMVVJFICJXcm9uZyBBQkkgZm9yIHRoZSBsaWJyYXJ5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfVwiIiBQQVJFTlRfU0NPUEUpCiAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UtTk9URk9VTkQiKQogICBlbHNlKCkKICAgICBpZiAoZXhwZWN0ZWRfdmVyc2lvbikKLSAgICAgIGlmICgoX1BWTF9FWEFDVCBBTkQgTk9UIGxpYl9WRVJTSU9OIFZFUlNJT05fRVFVQUwgZXhwZWN0ZWRfdmVyc2lvbikgT1IgKGxpYl9WRVJTSU9OIFZFUlNJT05fTEVTUyBleHBlY3RlZF92ZXJzaW9uKSkKKyAgICAgICMgbGlicmFyeSBoYXZlIG9ubHkgbWFqb3IubWlub3IgaW5mb3JtYXRpb24KKyAgICAgIHN0cmluZyAoUkVHRVggTUFUQ0ggIlswLTldKFxcLlswLTldKyk/IiB2ZXJzaW9uICIke2V4cGVjdGVkX3ZlcnNpb259IikKKyAgICAgIGlmICgoX1BWTF9FWEFDVCBBTkQgTk9UIGxpYl9WRVJTSU9OIFZFUlNJT05fRVFVQUwgdmVyc2lvbikgT1IgKGxpYl9WRVJTSU9OIFZFUlNJT05fTEVTUyB2ZXJzaW9uKSkKICAgICAgICAgIyBsaWJyYXJ5IGhhcyB3cm9uZyB2ZXJzaW9uCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X1JFQVNPTl9GQUlMVVJFICJXcm9uZyB2ZXJzaW9uIGZvciB0aGUgbGlicmFyeSBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX1cIiIgUEFSRU5UX1NDT1BFKQogICAgICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRS1OT1RGT1VORCIpCiAgICAgICBlbmRpZigpCiAgICAgZWxzZSgpCiAgICAgICBpZiAoTk9UIGxpYl9WRVJTSU9OX01BSk9SIFZFUlNJT05fRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IpCiAgICAgICAgICMgbGlicmFyeSBoYXMgd3JvbmcgbWFqb3IgdmVyc2lvbgorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9SRUFTT05fRkFJTFVSRSAiV3JvbmcgbWFqb3IgdmVyc2lvbiBmb3IgdGhlIGxpYnJhcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9XCIiIFBBUkVOVF9TQ09QRSkKICAgICAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UtTk9URk9VTkQiKQogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKQEAgLTY0Myw2ICs5MzIsNyBAQAogCiAgIGlmIChfUFZJRF9DSEVDS19FWElTVFMgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfSIpCiAgICAgIyBpbmNsdWRlIGZpbGUgZG9lcyBub3QgZXhpc3QgYW55bW9yZQorICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X1JFQVNPTl9GQUlMVVJFICJDYW5ub3QgZmluZCB0aGUgZGlyZWN0b3J5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9XCIiIFBBUkVOVF9TQ09QRSkKICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVItTk9URk9VTkQiKQogICAgIHJldHVybigpCiAgIGVuZGlmKCkKQEAgLTY1MiwxNiArOTQyLDE5IEBACiAKICAgaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQUJJIEFORCBOT1QgaW5jX0FCSSBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUykKICAgICAjIGluY29tcGF0aWJsZSBBQkkKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9SRUFTT05fRkFJTFVSRSAiV3JvbmcgQUJJIGZvciB0aGUgZGlyZWN0b3J5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9XCIiIFBBUkVOVF9TQ09QRSkKICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVItTk9URk9VTkQiKQogICBlbHNlKCkKICAgICBpZiAoZXhwZWN0ZWRfdmVyc2lvbikKICAgICAgIGlmICgoX1BWSURfRVhBQ1QgQU5EIE5PVCBpbmNfVkVSU0lPTiBWRVJTSU9OX0VRVUFMIGV4cGVjdGVkX3ZlcnNpb24pIE9SIChpbmNfVkVSU0lPTiBWRVJTSU9OX0xFU1MgZXhwZWN0ZWRfdmVyc2lvbikpCiAgICAgICAgICMgaW5jbHVkZSBkaXIgaGFzIHdyb25nIHZlcnNpb24KKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIldyb25nIHZlcnNpb24gZm9yIHRoZSBkaXJlY3RvcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn1cIiIgUEFSRU5UX1NDT1BFKQogICAgICAgICBzZXRfcHJvcGVydHkgKENBQ0hFIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVItTk9URk9VTkQiKQogICAgICAgZW5kaWYoKQogICAgIGVsc2UoKQogICAgICAgaWYgKE5PVCBpbmNfVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0VRVUFMIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SKQogICAgICAgICAjIGluY2x1ZGUgZGlyIGhhcyB3cm9uZyBtYWpvciB2ZXJzaW9uCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X1JFQVNPTl9GQUlMVVJFICJXcm9uZyBtYWpvciB2ZXJzaW9uIGZvciB0aGUgZGlyZWN0b3J5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9XCIiIFBBUkVOVF9TQ09QRSkKICAgICAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSLU5PVEZPVU5EIikKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCkBAIC02OTQsMTMgKzk4NywzMCBAQAogICAgICAgbGlzdCAoQVBQRU5EIF9QWVRIT05fRElSUyAiJHtfUFlUSE9OX0RJUn0iKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCi0gIGlmIChfUFlUSE9OX0RJUlMpCi0gICAgbGlzdCAoUkVNT1ZFX0RVUExJQ0FURVMgX1BZVEhPTl9ESVJTKQotICBlbmRpZigpCisgIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF9QWVRIT05fRElSUykKICAgc2V0ICgke19QWVRIT05fU0xEX1JFU1VMVH0gJHtfUFlUSE9OX0RJUlN9IFBBUkVOVF9TQ09QRSkKIGVuZGZ1bmN0aW9uKCkKIAogCitmdW5jdGlvbiAoX1BZVEhPTl9TRVRfREVWRUxPUE1FTlRfTU9EVUxFX0ZPVU5EIG1vZHVsZSkKKyAgaWYgKCJEZXZlbG9wbWVudC4ke21vZHVsZX0iIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTKQorICAgIHN0cmluZyhUT1VQUEVSICIke21vZHVsZX0iIGlkKQorICAgIHNldCAobW9kdWxlX2ZvdW5kIFRSVUUpCisKKyAgICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfJHtpZH1fQVJUSUZBQ1RTCisgICAgICAgIEFORCBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSkKKyAgICAgIHNldCAobW9kdWxlX2ZvdW5kIEZBTFNFKQorICAgIGVuZGlmKCkKKyAgICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UXyR7aWR9X0FSVElGQUNUUworICAgICAgICBBTkQgTk9UIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKKyAgICAgIHNldCAobW9kdWxlX2ZvdW5kIEZBTFNFKQorICAgIGVuZGlmKCkKKworICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuJHttb2R1bGV9X0ZPVU5EICR7bW9kdWxlX2ZvdW5kfSBQQVJFTlRfU0NPUEUpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKworCiAjIElmIG1ham9yIHZlcnNpb24gaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIHRoZSBzYW1lIGFzIGludGVybmFsIG1ham9yIHZlcnNpb24KIGlmIChERUZJTkVEICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9NQUpPUgogICAgIEFORCBOT1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX01BSk9SIFZFUlNJT05fRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IpCkBAIC03MTQsMjYgKzEwMjQsNDkgQEAKICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9GSU5EX1JFUVVJUkVEX0ludGVycHJldGVyIFRSVUUpCiBlbmRpZigpCiBpZiAoIk51bVB5IiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUykKLSAgbGlzdCAoQVBQRU5EICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUyAiSW50ZXJwcmV0ZXIiICJEZXZlbG9wbWVudCIpCi0gIGxpc3QgKFJFTU9WRV9EVVBMSUNBVEVTICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUykKKyAgbGlzdCAoQVBQRU5EICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUyAiSW50ZXJwcmV0ZXIiICJEZXZlbG9wbWVudC5Nb2R1bGUiKQogZW5kaWYoKQotZm9yZWFjaCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBPTkVOVCBJTiBJVEVNUyBJbnRlcnByZXRlciBDb21waWxlciBEZXZlbG9wbWVudCBOdW1QeSkKK2lmICgiRGV2ZWxvcG1lbnQiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTKQorICBsaXN0IChBUFBFTkQgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTICJEZXZlbG9wbWVudC5Nb2R1bGUiICJEZXZlbG9wbWVudC5FbWJlZCIpCitlbmRpZigpCitsaXN0IChSRU1PVkVfRFVQTElDQVRFUyAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMpCitmb3JlYWNoIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUE9ORU5UIElOIElURU1TIEludGVycHJldGVyIENvbXBpbGVyIERldmVsb3BtZW50IERldmVsb3BtZW50Lk1vZHVsZSBEZXZlbG9wbWVudC5FbWJlZCBOdW1QeSkKICAgc2V0ICgke19QWVRIT05fUFJFRklYfV8ke18ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlR9X0ZPVU5EIEZBTFNFKQogZW5kZm9yZWFjaCgpCi11bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlMpCitpZiAoJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRVFVSVJFRF9EZXZlbG9wbWVudCkKKyAgc2V0ICgke19QWVRIT05fUFJFRklYfV9GSU5EX1JFUVVJUkVEX0RldmVsb3BtZW50Lk1vZHVsZSBUUlVFKQorICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVRVUlSRURfRGV2ZWxvcG1lbnQuRW1iZWQgVFJVRSkKK2VuZGlmKCkKKwordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0FSVElGQUNUUykKK3Vuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9NT0RVTEVfQVJUSUZBQ1RTKQordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0VNQkVEX0FSVElGQUNUUykKK2lmICgiRGV2ZWxvcG1lbnQuTW9kdWxlIiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUykKKyAgaWYgKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIl4oV2luZG93cy4qfENZR1dJTnxNU1lTKSQiKQorICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9NT0RVTEVfQVJUSUZBQ1RTICJMSUJSQVJZIikKKyAgZW5kaWYoKQorICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfTU9EVUxFX0FSVElGQUNUUyAiSU5DTFVERV9ESVIiKQorZW5kaWYoKQoraWYgKCJEZXZlbG9wbWVudC5FbWJlZCIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMpCisgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9FTUJFRF9BUlRJRkFDVFMgIkxJQlJBUlkiICJJTkNMVURFX0RJUiIpCitlbmRpZigpCitzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0FSVElGQUNUUyAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX01PRFVMRV9BUlRJRkFDVFN9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfRU1CRURfQVJUSUZBQ1RTfSkKK2xpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0FSVElGQUNUUykKIAogIyBTZXQgdmVyc2lvbnMgdG8gc2VhcmNoCiAjIyBkZWZhdWx0OiBzZWFyY2ggYW55IHZlcnNpb24KIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTlN9KQordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1QpCiAKLWlmICgke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fQ09VTlQgR1JFQVRFUiAxKQoraWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9DT1VOVCkKICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVCkKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1QgIkVYQUNUIikKICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TICR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX01BSk9SfS4keyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9NSU5PUn0pCiAgIGVsc2UoKQogICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUykKICAgICAjIGFkZCBhbGwgY29tcGF0aWJsZSB2ZXJzaW9ucwogICAgIGZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OIElOIExJU1RTIF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OUykKLSAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OKQorICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAiJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX01JTk9SfSIpCiAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKICAgICAgIGVuZGlmKCkKICAgICBlbmRmb3JlYWNoKCkKQEAgLTc0Miw3ICsxMDc1LDcgQEAKIAogIyBTZXQgQUJJcyB0byBzZWFyY2gKICMjIGRlZmF1bHQ6IHNlYXJjaCBhbnkgQUJJCi1pZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IgVkVSU0lPTl9MRVNTIDMpCitpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IgVkVSU0lPTl9MRVNTICIzIikKICAgIyBBQkkgbm90IHN1cHBvcnRlZAogICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQUJJKQogICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUyAiIikKQEAgLTc2MSw2ICsxMDk0LDcgQEAKICAgICBfcHl0aG9uX2dldF9hYmlmbGFncyAoXyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTKQogICBlbmRpZigpCiBlbmRpZigpCit1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fU09BQkkpCiAKICMgRGVmaW5lIGxvb2t1cCBzdHJhdGVneQogaWYgKF8ke19QWVRIT05fUFJFRklYfV9MT09LVVBfUE9MSUNZIFNUUkVRVUFMICJORVciKQpAQCAtNzg5LDE1ICsxMTIzLDc1IEBACiBlbmRpZigpCiAKICMgSXJvblB5dGhvbiBzdXBwb3J0Cit1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0lOVEVSUFJFVEVSX05BTUVTKQordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9DT01QSUxFUl9OQU1FUykKK3Vuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fQ09NUElMRVJfQVJDSF9GTEFHUykKIGlmIChDTUFLRV9TSVpFT0ZfVk9JRF9QKQotICAjIEluIHRoaXMgY2FzZSwgc2VhcmNoIG9ubHkgZm9yIDY0Yml0IG9yIDMyYml0Ci0gIG1hdGggKEVYUFIgXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0ggIiR7Q01BS0VfU0laRU9GX1ZPSURfUH0gKiA4IikKLSAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fTkFNRVMgaXB5JHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH0gaXB5KQotZWxzZSgpCi0gICMgYXJjaGl0ZWN0dXJlIHVua25vd24sIHNlYXJjaCBmb3IgbmF0dXJhbCBpbnRlcnByZXRlcgotICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9OQU1FUyBpcHkpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSCBFUVVBTCAiMzIiKQorICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0NPTVBJTEVSX0FSQ0hfRkxBR1MgIi9wbGF0Zm9ybTp4ODYiKQorICBlbHNlKCkKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9DT01QSUxFUl9BUkNIX0ZMQUdTICIvcGxhdGZvcm06eDY0IikKKyAgZW5kaWYoKQogZW5kaWYoKQotc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFUyBuZXQ0NSBuZXQ0MCkKK2lmIChOT1QgQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkxpbnV4IikKKyAgIyBEbyBub3QgdXNlIHdyYXBwZXIgc2NyaXB0IG9uIExpbnV4IGJlY2F1c2UgaXQgaXMgYnVnZ3k6IC1jIGludGVycHJldGVyIG9wdGlvbiBjYW5ub3QgYmUgdXNlZAorICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0lOVEVSUFJFVEVSX05BTUVTICJpcHkke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfSIgImlweTY0IiAiaXB5MzIiICJpcHkiKQorICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX0NPTVBJTEVSX05BTUVTICJpcHljIikKK2VuZGlmKCkKK2xpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fSU5URVJQUkVURVJfTkFNRVMgImlweS5leGUiKQorbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9DT01QSUxFUl9OQU1FUyAiaXB5Yy5leGUiKQorc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFUyBuZXQ0NSBuZXQ0MCBiaW4pCisKKyMgUHlQeSBzdXBwb3J0CitpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IgRVFVQUwgIjMiKQorICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX05BTUVTIHB5cHkzKQorICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQl9OQU1FUyBweXB5My1jKQorICBpZiAoV0lOMzIpCisgICAgIyBzcGVjaWFsIG5hbWUgZm9yIHJ1bnRpbWUgcGFydAorICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9MSUJfTkFNRVMgbGlicHlweTMtYykKKyAgZW5kaWYoKQorICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0lOQ0xVREVfUEFUSF9TVUZGSVhFUyBsaWIvcHlweTMpCitlbHNlKCkKKyAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9OQU1FUyBweXB5KQorICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQl9OQU1FUyBweXB5LWMpCisgIGlmIChXSU4zMikKKyAgICAjIHNwZWNpYWwgbmFtZSBmb3IgcnVudGltZSBwYXJ0CisgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQl9OQU1FUyBsaWJweXB5LWMpCisgIGVuZGlmKCkKKyAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fUFlQWV9JTkNMVURFX1BBVEhfU1VGRklYRVMgbGliL3B5cHkpCitlbmRpZigpCitzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0VYRUNVVEFCTEVfUEFUSF9TVUZGSVhFUyBiaW4pCitzZXQgKF8ke19QWVRIT05fUFJFRklYfV9QWVBZX0xJQlJBUllfUEFUSF9TVUZGSVhFUyBsaWIgbGlicyBiaW4pCitsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1BZUFlfSU5DTFVERV9QQVRIX1NVRkZJWEVTIGluY2x1ZGUpCisKKyMgUHl0aG9uIEltcGxlbWVudGF0aW9ucyBoYW5kbGluZwordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OUykKK2lmIChERUZJTkVEICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TKQorICBmb3JlYWNoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU1QTEVNRU5UQVRJT04gSU4gTElTVFMgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMpCisgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU1QTEVNRU5UQVRJT04gTUFUQ0hFUyAiXihDUHl0aG9ufElyb25QeXRob258UHlQeSkkIikKKyAgICAgIG1lc3NhZ2UgKEFVVEhPUl9XQVJOSU5HICJGaW5kJHtfUFlUSE9OX1BSRUZJWH06ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lNUExFTUVOVEFUSU9OfTogaW52YWxpZCB2YWx1ZSBmb3IgJyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TJy4gJ0NQeXRob24nLCAnSXJvblB5dGhvbicgb3IgJ1B5UHknIGV4cGVjdGVkLiBWYWx1ZSB3aWxsIGJlIGlnbm9yZWQuIikKKyAgICBlbHNlKCkKKyAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU1QTEVNRU5UQVRJT059KQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCitlbHNlKCkKKyAgaWYgKFdJTjMyKQorICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TIENQeXRob24gSXJvblB5dGhvbikKKyAgZWxzZSgpCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMgQ1B5dGhvbikKKyAgZW5kaWYoKQorZW5kaWYoKQorCisjIGNvbXB1dGUgbGlzdCBvZiBuYW1lcyBmb3IgaGVhZGVyIGZpbGUKK3Vuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9OQU1FUykKK2ZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9JTVBMRU1FTlRBVElPTiBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fSU1QTEVNRU5UQVRJT04gU1RSRVFVQUwgIkNQeXRob24iKQorICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9OQU1FUyAiUHl0aG9uLmgiKQorICBlbHNlaWYgKF8ke19QWVRIT05fUFJFRklYfV9JTVBMRU1FTlRBVElPTiBTVFJFUVVBTCAiUHlQeSIpCisgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX05BTUVTICJQeVB5LmgiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKwogCiAjIEFwcGxlIGZyYW1ld29ya3MgaGFuZGxpbmcKIF9weXRob25fZmluZF9mcmFtZXdvcmtzICgpCkBAIC04NTAsOCArMTI0NCw4IEBACiAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgIkZJUlNUIikKIGVuZGlmKCkKIAotIyB2aXJ0dWFsIGVudmlyb25tZW50cyBoYW5kbGluZwotaWYgKERFRklORUQgRU5We1ZJUlRVQUxfRU5WfSkKKyMgdmlydHVhbCBlbnZpcm9ubWVudHMgcmVjb2duaXRpb24KK2lmIChERUZJTkVEIEVOVntWSVJUVUFMX0VOVn0gT1IgREVGSU5FRCBFTlZ7Q09OREFfUFJFRklYfSkKICAgaWYgKERFRklORUQgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WKQogICAgIGlmIChOT1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WIE1BVENIRVMgIl4oRklSU1R8T05MWXxTVEFOREFSRCkkIikKICAgICAgIG1lc3NhZ2UgKEFVVEhPUl9XQVJOSU5HICJGaW5kJHtfUFlUSE9OX1BSRUZJWH06ICR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WfTogaW52YWxpZCB2YWx1ZSBmb3IgJyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOVicuICdGSVJTVCcsICdPTkxZJyBvciAnU1RBTkRBUkQnIGV4cGVjdGVkLiAnRklSU1QnIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCkBAIC04NjksMzEgKzEyNjMsMTA3IEBACiAKICMgQ29tcHV0ZSBzZWFyY2ggc2lnbmF0dXJlCiAjIFRoaXMgc2lnbmF0dXJlIHdpbGwgYmUgdXNlZCB0byBjaGVjayB2YWxpZGl0eSBvZiBjYWNoZWQgdmFyaWFibGVzIG9uIG5ldyBzZWFyY2gKLXNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRSAiJHske19QWVRIT05fUFJFRklYfV9ST09UX0RJUn06JHske19QWVRIT05fUFJFRklYfV9GSU5EX1NUUkFURUdZfTokeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOVn0iKQorc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFICIkeyR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSfToke18ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OU306JHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9TVFJBVEVHWX06JHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZJUlRVQUxFTlZ9IikKIGlmIChOT1QgV0lOMzIpCiAgIHN0cmluZyAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkUgIjokeyR7X1BZVEhPTl9QUkVGSVh9X1VTRV9TVEFUSUNfTElCU306IikKIGVuZGlmKCkKIGlmIChDTUFLRV9IT1NUX0FQUExFKQotICBzdHJpbmcgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFICI6JHske19QWVRIT05fUFJFRklYfV9GSU5EX0ZSQU1FV09SS30iKQorICBzdHJpbmcgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFICI6JHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUkt9IikKIGVuZGlmKCkKIGlmIChDTUFLRV9IT1NUX1dJTjMyKQotICBzdHJpbmcgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFICI6JHske19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZfSIpCisgIHN0cmluZyAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkUgIjoke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZfSIpCiBlbmRpZigpCiAKK2Z1bmN0aW9uIChfUFlUSE9OX0NIRUNLX0RFVkVMT1BNRU5UX1NJR05BVFVSRSBtb2R1bGUpCisgIGlmICgiRGV2ZWxvcG1lbnQuJHttb2R1bGV9IiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUykKKyAgICBzdHJpbmcgKFRPVVBQRVIgIiR7bW9kdWxlfSIgaWQpCisgICAgc2V0IChzaWduYXR1cmUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRX06IikKKyAgICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfJHtpZH1fQVJUSUZBQ1RTKQorICAgICAgbGlzdCAoQVBQRU5EIHNpZ25hdHVyZSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfToiKQorICAgIGVuZGlmKCkKKyAgICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UXyR7aWR9X0FSVElGQUNUUykKKyAgICAgIGxpc3QgKEFQUEVORCBzaWduYXR1cmUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfToiKQorICAgIGVuZGlmKCkKKyAgICBzdHJpbmcgKE1ENSBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIpCisgICAgaWYgKHNpZ25hdHVyZSBTVFJFUVVBTCBfJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfJHtpZH1fU0lHTkFUVVJFKQorICAgICAgaWYgKCJMSUJSQVJZIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UXyR7aWR9X0FSVElGQUNUUykKKyAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9saWJyYXJ5ICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRVhJU1RTKQorICAgICAgZW5kaWYoKQorICAgICAgaWYgKCJJTkNMVURFX0RJUiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF8ke2lkfV9BUlRJRkFDVFMpCisgICAgICAgIF9weXRob25fdmFsaWRhdGVfaW5jbHVkZV9kaXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0VYSVNUUykKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKKyAgICAgIGlmICgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF8ke2lkfV9BUlRJRkFDVFMpCisgICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIENBQ0hFKQorICAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcgQ0FDSEUpCisgICAgICBlbmRpZigpCisgICAgICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UXyR7aWR9X0FSVElGQUNUUykKKyAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiBDQUNIRSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgICAgaWYgKCgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF8ke2lkfV9BUlRJRkFDVFMKKyAgICAgICAgICBBTkQgTk9UIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCisgICAgICAgIE9SICgiSU5DTFVERV9ESVIiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfJHtpZH1fQVJUSUZBQ1RTCisgICAgICAgICAgQU5EIE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpKQorICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9DT05GSUcgQ0FDSEUpCisgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UXyR7aWR9X1NJR05BVFVSRSBDQUNIRSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24gKF9QWVRIT05fQ09NUFVURV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgbW9kdWxlKQorICBzdHJpbmcgKFRPVVBQRVIgIiR7bW9kdWxlfSIgaWQpCisgIGlmICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC4ke21vZHVsZX1fRk9VTkQpCisgICAgc2V0IChzaWduYXR1cmUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRX06IikKKyAgICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfJHtpZH1fQVJUSUZBQ1RTKQorICAgICAgbGlzdCAoQVBQRU5EIHNpZ25hdHVyZSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfToiKQorICAgIGVuZGlmKCkKKyAgICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UXyR7aWR9X0FSVElGQUNUUykKKyAgICAgIGxpc3QgKEFQUEVORCBzaWduYXR1cmUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfToiKQorICAgIGVuZGlmKCkKKyAgICBzdHJpbmcgKE1ENSBzaWduYXR1cmUgIiR7c2lnbmF0dXJlfSIpCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfJHtpZH1fU0lHTkFUVVJFICIke3NpZ25hdHVyZX0iIENBQ0hFIElOVEVSTkFMICIiKQorICBlbHNlKCkKKyAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UXyR7aWR9X1NJR05BVFVSRSBDQUNIRSkKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCiAKIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkFSUykKIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ0FDSEVEX1ZBUlMpCit1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFKQordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9Db21waWxlcl9SRUFTT05fRkFJTFVSRSkKK3Vuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUpCit1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X1JFQVNPTl9GQUlMVVJFKQorCisKKyMgcHJlYW1ibGUKKyMjIEZvciBJcm9uUHl0aG9uIG9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIFdpbmRvd3MsIHNlYXJjaCBmb3IgdGhlIC5OZXQgaW50ZXJwcmV0ZXIKK2lmICgiSXJvblB5dGhvbiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMKKyAgICBBTkQgTk9UIFdJTjMyKQorICBmaW5kX3Byb2dyYW0gKCR7X1BZVEhPTl9QUkVGSVh9X0RPVE5FVF9MQVVOQ0hFUgorICAgICAgICAgICAgICAgIE5BTUVTICJtb25vIikKK2VuZGlmKCkKIAogCiAjIGZpcnN0IHN0ZXAsIHNlYXJjaCBmb3IgdGhlIGludGVycHJldGVyCiBpZiAoIkludGVycHJldGVyIiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUykKLSAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9DQUNIRURfVkFSUyBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKKyAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9DQUNIRURfVkFSUyBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9QUk9QRVJUSUVTKQogICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRVFVSVJFRF9JbnRlcnByZXRlcikKICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZBUlMgJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKICAgZW5kaWYoKQogCiAgIGlmIChERUZJTkVEICR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKICAgICAgIEFORCBJU19BQlNPTFVURSAiJHske19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIpCisgICAgaWYgKE5PVCAke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIFNUUkVRVUFMIF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFKQorICAgICAgIyBpbnZhbGlkYXRlIGNhY2hlIHByb3BlcnRpZXMKKyAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyBDQUNIRSkKKyAgICBlbmRpZigpCiAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSAiJHske19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgQ0FDSEUgSU5URVJOQUwgIiIpCiAgIGVsc2VpZiAoREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKICAgICAjIGNvbXB1dGUgaW50ZXJwcmV0ZXIgc2lnbmF0dXJlIGFuZCBjaGVjayB2YWxpZGl0eSBvZiBkZWZpbml0aW9uCkBAIC05MDcsNyArMTM3NywxMCBAQAogICAgICAgZW5kaWYoKQogICAgIGVsc2UoKQogICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFIENBQ0hFKQorICAgIGVuZGlmKCkKKyAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFKQogICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkUgQ0FDSEUpCisgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMgQ0FDSEUpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKQEAgLTkxNSwyNSArMTM4OCwxNCBAQAogICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTICIkeyR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSfSIgRU5WICR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSKQogCiAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1NUUkFURUdZIFNUUkVRVUFMICJMT0NBVElPTiIpCi0gICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTKQotICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMpCi0gICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTKQorICAgICAgIyBidWlsZCBhbGwgZXhlY3V0YWJsZSBuYW1lcworICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9IFBPU0lYIElOVEVSUFJFVEVSKQorICAgICAgX3B5dGhvbl9nZXRfcGF0aF9zdWZmaXhlcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfSBJTlRFUlBSRVRFUikKIAotICAgICAgZm9yZWFjaCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04gSU4gTElTVFMgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlMpCi0gICAgICAgICMgYnVpbGQgYWxsIGV4ZWN1dGFibGUgbmFtZXMKLSAgICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gUE9TSVggRVhFQ1VUQUJMRSkKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9OQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX05BTUVTfSkKLQotICAgICAgICAjIEZyYW1ld29yayBQYXRocwotICAgICAgICBfcHl0aG9uX2dldF9mcmFtZXdvcmtzIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRIU30pCi0KLSAgICAgICAgIyBSZWdpc3RyeSBQYXRocwotICAgICAgICBfcHl0aG9uX2dldF9yZWdpc3RyaWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXElyb25QeXRob25cXCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059XFxJbnN0YWxsUGF0aF0pCi0gICAgICBlbmRmb3JlYWNoKCkKLSAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVMgcHl0aG9uJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUn0gcHl0aG9uKQorICAgICAgIyBGcmFtZXdvcmsgUGF0aHMKKyAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfSkKKyAgICAgICMgUmVnaXN0cnkgUGF0aHMKKyAgICAgIF9weXRob25fZ2V0X3JlZ2lzdHJpZXMgKF8ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9KQogCiAgICAgICB3aGlsZSAoVFJVRSkKICAgICAgICAgIyBWaXJ0dWFsIGVudmlyb25tZW50cyBoYW5kbGluZwpAQCAtOTQyLDE0ICsxNDA0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgRU5WIFZJUlRVQUxfRU5WCi0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiBTY3JpcHRzCisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyBFTlYgVklSVFVBTF9FTlYgRU5WIENPTkRBX1BSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQogCi0gICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbnRlcnByZXRlciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059KQorICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfaW50ZXJwcmV0ZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9KQogICAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKICAgICAgICAgICAgIGJyZWFrKCkKICAgICAgICAgICBlbmRpZigpCkBAIC05NjUsMTIgKzE0MjcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQogICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX0VOVklST05NRU5UX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKLSAgICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2ludGVycHJldGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0pCisgICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbnRlcnByZXRlciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVH0pCiAgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFKQogICAgICAgICAgICAgYnJlYWsoKQogICAgICAgICAgIGVuZGlmKCkKQEAgLTk3OSwxNCArMTQ0MSwxMyBAQAogICAgICAgICBpZiAoQ01BS0VfSE9TVF9XSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKICAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCi0gICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbnRlcnByZXRlciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059KQorICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfaW50ZXJwcmV0ZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9KQogICAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKICAgICAgICAgICAgIGJyZWFrKCkKICAgICAgICAgICBlbmRpZigpCkBAIC05OTUsMjMgKzE0NTYsMjEgQEAKICAgICAgICAgIyB0cnkgdXNpbmcgSElOVFMKICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRQogICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQotICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2ludGVycHJldGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0pCisgICAgICAgIF9weXRob25fdmFsaWRhdGVfaW50ZXJwcmV0ZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9KQogICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUpCiAgICAgICAgICAgYnJlYWsoKQogICAgICAgICBlbmRpZigpCiAgICAgICAgICMgdHJ5IHVzaW5nIHN0YW5kYXJkIHBhdGhzCiAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9OQU1FU30KICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4gJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFU30pCi0gICAgICAgIF9weXRob25fdmFsaWRhdGVfaW50ZXJwcmV0ZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSkKKyAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9KQorICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2ludGVycHJldGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUfSkKICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFKQogICAgICAgICAgIGJyZWFrKCkKICAgICAgICAgZW5kaWYoKQpAQCAtMTAyMiw5ICsxNDgxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0RFRkFVTFRfUEFUSCkKLSAgICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2ludGVycHJldGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0pCisgICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbnRlcnByZXRlciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVH0pCiAgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFKQogICAgICAgICAgICAgYnJlYWsoKQogICAgICAgICAgIGVuZGlmKCkKQEAgLTEwMzMsMTIgKzE0OTIsMTEgQEAKICAgICAgICAgaWYgKENNQUtFX0hPU1RfV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJMQVNUIikKICAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fREVGQVVMVF9QQVRIKQotICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfaW50ZXJwcmV0ZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSkKKyAgICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2ludGVycHJldGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUfSkKICAgICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUpCiAgICAgICAgICAgICBicmVhaygpCiAgICAgICAgICAgZW5kaWYoKQpAQCAtMTA0OSwxMiArMTUwNywxMSBAQAogICAgIGVsc2UoKQogICAgICAgIyBsb29rLXVwIGZvciB2YXJpb3VzIHZlcnNpb25zIGFuZCBsb2NhdGlvbnMKICAgICAgIGZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OIElOIExJU1RTIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TKQotICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gUE9TSVggRVhFQ1VUQUJMRSkKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9OQU1FUyBweXRob24ke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbikKKyAgICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IFBPU0lYIElOVEVSUFJFVEVSKQorICAgICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IElOVEVSUFJFVEVSKQogCi0gICAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCi0gICAgICAgIF9weXRob25fZ2V0X3JlZ2lzdHJpZXMgKF8ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKKyAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059KQorICAgICAgICBfcHl0aG9uX2dldF9yZWdpc3RyaWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKIAogICAgICAgICAjIFZpcnR1YWwgZW52aXJvbm1lbnRzIGhhbmRsaW5nCiAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WIE1BVENIRVMgIl4oRklSU1R8T05MWSkkIikKQEAgLTEwNjIsOCArMTUxOSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgRU5WIFZJUlRVQUxfRU5WCi0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiBTY3JpcHRzCisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyBFTlYgVklSVFVBTF9FTlYgRU5WIENPTkRBX1BSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKQEAgLTEwODQsNyArMTU0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgYmluCisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSApAQCAtMTA5NSwxMiArMTU1MiwxMCBAQAogICAgICAgICBpZiAoQ01BS0VfSE9TVF9XSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKICAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9OQU1FU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxJcm9uUHl0aG9uXFwke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfVxcSW5zdGFsbFBhdGhdCi0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQogICAgICAgICBlbmRpZigpCkBAIC0xMTEzLDEwICsxNTY4LDkgQEAKICAgICAgICAgIyB0cnkgdXNpbmcgSElOVFMKICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRQogICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQogICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2ludGVycHJldGVyICgke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBFWEFDVCkKQEAgLTExMjksMTUgKzE1ODMsOSBAQAogICAgICAgICAjIEZvciBleGFtcGxlLCB0eXBpY2FsIHN5c3RlbXMgaGF2ZSAncHl0aG9uJyBmb3IgdmVyc2lvbiAyLiogYW5kICdweXRob24zJwogICAgICAgICAjIGZvciB2ZXJzaW9uIDMuKi4gU28gbG9va2luZyBmb3IgbmFtZXMgcGVyIGRpciB3aWxsIGZpbmQsIHBvdGVudGlhbGx5LAogICAgICAgICAjIHN5c3RlbWF0aWNhbGx5ICdweXRob24nIChpLmUuIHZlcnNpb24gMikgZXZlbiBpZiB2ZXJzaW9uIDMgaXMgc2VhcmNoZWQuCi0gICAgICAgIGlmIChDTUFLRV9IT1NUX1dJTjMyKQotICAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKLSAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHl0aG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9OQU1FU30pCi0gICAgICAgIGVsc2UoKQotICAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKLSAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfSkKLSAgICAgICAgZW5kaWYoKQorICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCisgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfSkKICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbnRlcnByZXRlciAoJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gRVhBQ1QpCiAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSkKICAgICAgICAgICBicmVhaygpCkBAIC0xMTQ5LDcgKzE1OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbgorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fREVGQVVMVF9QQVRIKQogICAgICAgICBlbmRpZigpCiAKQEAgLTExNTcsMTEgKzE2MDUsOSBAQAogICAgICAgICBpZiAoQ01BS0VfSE9TVF9XSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQogICAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxJcm9uUHl0aG9uXFwke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfVxcSW5zdGFsbFBhdGhdCi0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbiAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fREVGQVVMVF9QQVRIKQogICAgICAgICBlbmRpZigpCiAKQEAgLTExNzksMjAgKzE2MjUsMjAgQEAKICAgICAgICAgIyBGb3IgZXhhbXBsZSwgdHlwaWNhbCBzeXN0ZW1zIGhhdmUgJ3B5dGhvbicgZm9yIHZlcnNpb24gMi4qIGFuZCAncHl0aG9uMycKICAgICAgICAgIyBmb3IgdmVyc2lvbiAzLiouIFNvIGxvb2tpbmcgZm9yIG5hbWVzIHBlciBkaXIgd2lsbCBmaW5kLCBwb3RlbnRpYWxseSwKICAgICAgICAgIyBzeXN0ZW1hdGljYWxseSAncHl0aG9uJyAoaS5lLiB2ZXJzaW9uIDIpIGV2ZW4gaWYgdmVyc2lvbiAzIGlzIHNlYXJjaGVkLgorICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X05BTUVTIFBPU0lYIElOVEVSUFJFVEVSKQogICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFCi0gICAgICAgICAgICAgICAgICAgICAgTkFNRVMgcHl0aG9uJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUn0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRob24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9OQU1FU30pCisgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTkFNRVN9KQogICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2ludGVycHJldGVyICgpCiAgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIpCisgIF9weXRob25fZ2V0X2xhdW5jaGVyIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVIgSU5URVJQUkVURVIpCiAKICAgIyByZXRyaWV2ZSBleGFjdCB2ZXJzaW9uIG9mIGV4ZWN1dGFibGUgZm91bmQKICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFKQotICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKCcuJy5qb2luKFtzdHIoeCkgZm9yIHggaW4gc3lzLnZlcnNpb25faW5mb1s6M11dKSkiCiAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAogICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04KQEAgLTEyMDAsMTA1ICsxNjQ2LDE1MSBAQAogICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCiAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUKQogICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRV9VU0FCTEUgVFJVRSkKLSAgICAgIHN0cmluZyAoUkVHRVggTUFUQ0hBTEwgIlswLTldKyIgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05TICIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IikKLSAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTlMgMCAke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SKQotICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OUyAxICR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1IpCi0gICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05TIDIgJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRDSCkKICAgICBlbHNlKCkKICAgICAgICMgSW50ZXJwcmV0ZXIgaXMgbm90IHVzYWJsZQogICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRV9VU0FCTEUgRkFMU0UpCiAgICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTikKKyAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFICJDYW5ub3QgcnVuIHRoZSBpbnRlcnByZXRlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9XCIiKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCi0gIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEVfVVNBQkxFCi0gICAgICBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0VRVUFMIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SKQotICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgVFJVRSkKLSAgICAjIFVzZSBpbnRlcnByZXRlciB2ZXJzaW9uIGFuZCBBQkkgZm9yIGZ1dHVyZSBzZWFyY2hlcyB0byBlbnN1cmUgY29uc2lzdGVuY3kKLSAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TICR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUn0uJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01JTk9SfSkKLSAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuYWJpZmxhZ3MpIgotICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQKLSAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MKLSAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCi0gICAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKLSAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVCkKLSAgICAgICMgYXNzdW5tZSBBQkkgaXMgbm90IHN1cHBvcnRlZAotICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MgIiIpCi0gICAgZW5kaWYoKQotICBlbmRpZigpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEVfVVNBQkxFKQorICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUykKKyAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgVFJVRSkKIAotICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQpCi0gICAgIyBjb21wdXRlIGFuZCBzYXZlIGludGVycHJldGVyIHNpZ25hdHVyZQotICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IikKLSAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkUgIiR7X18ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkV9IiBDQUNIRSBJTlRFUk5BTCAiIikKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyAwICR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEKQogCi0gICAgaWYgKE5PVCBDTUFLRV9TSVpFT0ZfVk9JRF9QKQotICAgICAgIyBkZXRlcm1pbmUgaW50ZXJwcmV0ZXIgYXJjaGl0ZWN0dXJlCi0gICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgcHJpbnQoc3lzLm1heHNpemUgPiAyKiozMikiCi0gICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCi0gICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSAke19QWVRIT05fUFJFRklYfV9JUzY0QklUCi0gICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0lTNjRCSVQpCi0gICAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQpCi0gICAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9JUzY0QklUKQotICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0ggNjQpCi0gICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDIgNjQpCi0gICAgICAgIGVsc2UoKQotICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0FSQ0ggMzIpCi0gICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDIgMzIpCisgICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMgMSAke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SKQorICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9QUk9QRVJUSUVTIDIgJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUikKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyAzICR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUQ0gpCisKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyA0IF8ke19QWVRIT05fUFJFRklYfV9BUkNIKQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDIgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSH0pCisKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyA1IF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUykKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyA2ICR7X1BZVEhPTl9QUkVGSVh9X1NPQUJJKQorCisgICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMgNyAke19QWVRIT05fUFJFRklYfV9TVERMSUIpCisgICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1BST1BFUlRJRVMgOCAke19QWVRIT05fUFJFRklYfV9TVERBUkNIKQorICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9QUk9QRVJUSUVTIDkgJHtfUFlUSE9OX1BSRUZJWH1fU0lURUxJQikKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUyAxMCAke19QWVRIT05fUFJFRklYfV9TSVRFQVJDSCkKKyAgICBlbHNlKCkKKyAgICAgIHN0cmluZyAoUkVHRVggTUFUQ0hBTEwgIlswLTldKyIgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05TICIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IikKKyAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTlMgMCAke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SKQorICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OUyAxICR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1IpCisgICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05TIDIgJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRDSCkKKworICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1IgVkVSU0lPTl9FUVVBTCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUikKKyAgICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCBUUlVFKQorCisgICAgICAgICMgVXNlIGludGVycHJldGVyIHZlcnNpb24gYW5kIEFCSSBmb3IgZnV0dXJlIHNlYXJjaGVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TICR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUn0uJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01JTk9SfSkKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVFJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy5hYmlmbGFncykiCisgICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQKKyAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTCisgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKKyAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKyAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQpCisgICAgICAgICAgIyBhc3N1bm1lIEFCSSBpcyBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MgIiIpCiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVuZGlmKCkKLSAgICBlbmRpZigpCiAKLSAgICAjIHJldHJpZXZlIGludGVycHJldGVyIGlkZW50aXR5Ci0gICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLVYKLSAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCi0gICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQKLSAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEKQotICAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVCkKLSAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCBNQVRDSEVTICJBbmFjb25kYSIpCi0gICAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgIkFuYWNvbmRhIikKLSAgICAgIGVsc2VpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgTUFUQ0hFUyAiRW50aG91Z2h0IikKLSAgICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCAiQ2Fub3B5IikKLSAgICAgIGVsc2UoKQotICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIl4oW14gXSspLioiICJcXDEiICR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEICIkeyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEfSIpCi0gICAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCBTVFJFUVVBTCAiUHl0aG9uIikKLSAgICAgICAgICAjIHRyeSB0byBnZXQgYSBtb3JlIHByZWNpc2UgSUQKLSAgICAgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHN5czsgcHJpbnQoc3lzLmNvcHlyaWdodCkiCisgICAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQpCisgICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfUkVBU09OX0ZBSUxVUkUpCisKKyAgICAgICAgIyBjb21wdXRlIGFuZCBzYXZlIGludGVycHJldGVyIHNpZ25hdHVyZQorICAgICAgICBzdHJpbmcgKE1ENSBfXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fU0lHTkFUVVJFfToke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIpCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRSAiJHtfXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRX0iIENBQ0hFIElOVEVSTkFMICIiKQorCisgICAgICAgIGlmIChOT1QgQ01BS0VfU0laRU9GX1ZPSURfUCkKKyAgICAgICAgICAjIGRldGVybWluZSBpbnRlcnByZXRlciBhcmNoaXRlY3R1cmUKKyAgICAgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy5tYXhzaXplID4gMioqMzIpKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgJHtfUFlUSE9OX1BSRUZJWH1fQ09QWVJJR0hUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVCkKLSAgICAgICAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fQ09QWVJJR0hUIE1BVENIRVMgIkFjdGl2ZVN0YXRlIikKLSAgICAgICAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgIkFjdGl2ZVB5dGhvbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgJHtfUFlUSE9OX1BSRUZJWH1fSVM2NEJJVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1JfVkFSSUFCTEUgJHtfUFlUSE9OX1BSRUZJWH1fSVM2NEJJVCkKKyAgICAgICAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQpCisgICAgICAgICAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSVM2NEJJVCkKKyAgICAgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSCA2NCkKKyAgICAgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDIgNjQpCisgICAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSCAzMikKKyAgICAgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQVJDSDIgMzIpCisgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgZW5kaWYoKQogICAgICAgICBlbmRpZigpCisKKyAgICAgICAgIyByZXRyaWV2ZSBpbnRlcnByZXRlciBpZGVudGl0eQorICAgICAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfTEFVTkNIRVJ9ICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgLVYKKyAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAorICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSAke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRAorICAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1ZBUklBQkxFICR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEKQorICAgICAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQpCisgICAgICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIE1BVENIRVMgIkFuYWNvbmRhIikKKyAgICAgICAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgIkFuYWNvbmRhIikKKyAgICAgICAgICBlbHNlaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIE1BVENIRVMgIkVudGhvdWdodCIpCisgICAgICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEICJDYW5vcHkiKQorICAgICAgICAgIGVsc2VpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgTUFUQ0hFUyAiUHlQeSAoWzAtOS5dKykiKQorICAgICAgICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCAiUHlQeSIpCisgICAgICAgICAgICBzZXQgICgke19QWVRIT05fUFJFRklYfV9QeVB5X1ZFUlNJT04gIiR7Q01BS0VfTUFUQ0hfMX0iKQorICAgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgc3RyaW5nIChSRUdFWCBSRVBMQUNFICJeKFteIF0rKS4qIiAiXFwxIiAke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCAiJHske19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRH0iKQorICAgICAgICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJQeXRob24iKQorICAgICAgICAgICAgICAjIHRyeSB0byBnZXQgYSBtb3JlIHByZWNpc2UgSUQKKyAgICAgICAgICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuY29weXJpZ2h0KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSAke19QWVRIT05fUFJFRklYfV9DT1BZUklHSFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVCkKKyAgICAgICAgICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0NPUFlSSUdIVCBNQVRDSEVTICJBY3RpdmVTdGF0ZSIpCisgICAgICAgICAgICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCAiQWN0aXZlUHl0aG9uIikKKyAgICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCBQeXRob24pCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICAjIHJldHJpZXZlIHZhcmlvdXMgcGFja2FnZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMKKyAgICAgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5c1xudHJ5OlxuICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPVRydWUpLHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPVRydWUpLHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1GYWxzZSksc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9RmFsc2UpXSkpXG5leGNlcHQgRXhjZXB0aW9uOlxuICAgaW1wb3J0IHN5c2NvbmZpZ1xuICAgc3lzLnN0ZG91dC53cml0ZSgnOycuam9pbihbc3lzY29uZmlnLmdldF9wYXRoKCdzdGRsaWInKSxzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKSxzeXNjb25maWcuZ2V0X3BhdGgoJ3B1cmVsaWInKSxzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRsaWInKV0pKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAorICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUEFUSFMKKyAgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVCkKKyAgICAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUKQorICAgICAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUEFUSFMgMCAke19QWVRIT05fUFJFRklYfV9TVERMSUIpCisgICAgICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9MSUJQQVRIUyAxICR7X1BZVEhPTl9QUkVGSVh9X1NUREFSQ0gpCisgICAgICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9MSUJQQVRIUyAyICR7X1BZVEhPTl9QUkVGSVh9X1NJVEVMSUIpCisgICAgICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9MSUJQQVRIUyAzICR7X1BZVEhPTl9QUkVGSVh9X1NJVEVBUkNIKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fU1RETElCKQorICAgICAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9TVERBUkNIKQorICAgICAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9TSVRFTElCKQorICAgICAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9TSVRFQVJDSCkKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjMiKQorICAgICAgICAgIF9weXRob25fZ2V0X2NvbmZpZ192YXIgKCR7X1BZVEhPTl9QUkVGSVh9X1NPQUJJIFNPQUJJKQorICAgICAgICBlbmRpZigpCisKKyAgICAgICAgIyBzdG9yZSBwcm9wZXJ0aWVzIGluIHRoZSBjYWNoZSB0byBzcGVlZC11cCBmdXR1cmUgc2VhcmNoZXMKKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUworICAgICAgICAgICIkeyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEfTskeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9OyR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn07JHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVENIfTske18ke19QWVRIT05fUFJFRklYfV9BUkNIfTske18ke19QWVRIT05fUFJFRklYfV9BQklGTEFHU307JHske19QWVRIT05fUFJFRklYfV9TT0FCSX07JHske19QWVRIT05fUFJFRklYfV9TVERMSUJ9OyR7JHtfUFlUSE9OX1BSRUZJWH1fU1REQVJDSH07JHske19QWVRIT05fUFJFRklYfV9TSVRFTElCfTskeyR7X1BZVEhPTl9QUkVGSVh9X1NJVEVBUkNIfSIgQ0FDSEUgSU5URVJOQUwgIiR7X1BZVEhPTl9QUkVGSVh9IFByb3BlcnRpZXMiKQorICAgICAgZWxzZSgpCisgICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFIENBQ0hFKQorICAgICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQpCiAgICAgICBlbmRpZigpCi0gICAgZWxzZSgpCi0gICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIFB5dGhvbikKICAgICBlbmRpZigpCisgIGVuZGlmKCkKIAotICAgICMgcmV0cmlldmUgdmFyaW91cyBwYWNrYWdlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllcwotICAgIGV4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jICJpbXBvcnQgc3lzOyBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnO3N5cy5zdGRvdXQud3JpdGUoJzsnLmpvaW4oW3N5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1UcnVlKSxzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1UcnVlKSxzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9RmFsc2UpLHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPUZhbHNlKV0pKSIKLQotICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQKLSAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUEFUSFMKLSAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUKQotICAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVCkKLSAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUEFUSFMgMCAke19QWVRIT05fUFJFRklYfV9TVERMSUIpCi0gICAgICBsaXN0IChHRVQgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlBBVEhTIDEgJHtfUFlUSE9OX1BSRUZJWH1fU1REQVJDSCkKLSAgICAgIGxpc3QgKEdFVCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUEFUSFMgMiAke19QWVRIT05fUFJFRklYfV9TSVRFTElCKQotICAgICAgbGlzdCAoR0VUIF8ke19QWVRIT05fUFJFRklYfV9MSUJQQVRIUyAzICR7X1BZVEhPTl9QUkVGSVh9X1NJVEVBUkNIKQotICAgIGVsc2UoKQotICAgICAgdW5zZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1NURExJQikKLSAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9TVERBUkNIKQotICAgICAgdW5zZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1NJVEVMSUIpCi0gICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fU0lURUFSQ0gpCi0gICAgZW5kaWYoKQotICBlbHNlKCkKLSAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX1NJR05BVFVSRSBDQUNIRSkKLSAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQpCisgIGlmICgke19QWVRIT05fUFJFRklYfV9BUlRJRkFDVFNfSU5URVJBQ1RJVkUpCisgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFICIke18ke19QWVRIT05fUFJFRklYfV9FWEVDVVRBQkxFfSIgQ0FDSEUgRklMRVBBVEggIiR7X1BZVEhPTl9QUkVGSVh9IEludGVycHJldGVyIikKICAgZW5kaWYoKQogCiAgIF9weXRob25fbWFya19hc19pbnRlcm5hbCAoXyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfUFJPUEVSVElFUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkUpCiBlbmRpZigpCiAKQEAgLTEzMTAsNyArMTgwMiwxMCBAQAogICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkFSUyAke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKICAgZW5kaWYoKQogCi0gIGlmIChERUZJTkVEICR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCisgIGlmIChOT1QgIklyb25QeXRob24iIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfSU1QTEVNRU5UQVRJT05TKQorICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIgQ0FDSEUpCisgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9TSUdOQVRVUkUgQ0FDSEUpCisgIGVsc2VpZiAoREVGSU5FRCAke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgogICAgICAgQU5EIElTX0FCU09MVVRFICIkeyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfSIpCiAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIgIiR7JHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IiBDQUNIRSBJTlRFUk5BTCAiIikKICAgZWxzZWlmIChERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKQEAgLTEzMjksNyArMTgyNCw4IEBACiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKLSAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIpCisgIGlmICgiSXJvblB5dGhvbiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMKKyAgICAgIEFORCBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQogICAgICMgSXJvblB5dGhvbiBzcGVjaWZpYyBhcnRpZmFjdHMKICAgICAjIElmIElyb25QeXRob24gaW50ZXJwcmV0ZXIgaXMgZm91bmQsIHVzZSBpdHMgcGF0aAogICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9ST09UKQpAQCAtMTMzOCw0NiArMTgzNCwxMDQgQEAKICAgICBlbmRpZigpCiAKICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfU1RSQVRFR1kgU1RSRVFVQUwgIkxPQ0FUSU9OIikKLSAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTKQorICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9OQU1FUworICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OUyBJcm9uUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfQorICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVSKQogCi0gICAgICBmb3JlYWNoIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUykKLSAgICAgICAgIyBSZWdpc3RyeSBQYXRocwotICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTCi0gICAgICAgICAgICAgICAgICAgICBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcSXJvblB5dGhvblxcJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn1cXEluc3RhbGxQYXRoXSkKLSAgICAgIGVuZGZvcmVhY2goKQorICAgICAgX3B5dGhvbl9nZXRfcGF0aF9zdWZmaXhlcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OUyBJcm9uUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QSUxFUikKKworICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QTEVNRU5UQVRJT05TIElyb25QeXRob24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30pCisgICAgICBfcHl0aG9uX2dldF9yZWdpc3RyaWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OUyBJcm9uUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9KQogCiAgICAgICB3aGlsZSAoVFJVRSkKLSAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJGSVJTVCIpCisgICAgICAgICMgQXBwbGUgZnJhbWV3b3JrcyBoYW5kbGluZworICAgICAgICBpZiAoQ01BS0VfSE9TVF9BUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJGSVJTVCIpCiAgICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIKLSAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTIGlweWMKKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9ST09UfSAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfUEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQotICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfY29tcGlsZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSkKKyAgICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2NvbXBpbGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUfSkKKyAgICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQorICAgICAgICAgICAgYnJlYWsoKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgICAjIFdpbmRvd3MgcmVnaXN0cnkKKyAgICAgICAgaWYgKENNQUtFX0hPU1RfV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJGSVJTVCIpCisgICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIKKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9ST09UfSAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfY29tcGlsZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9KQogICAgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIpCiAgICAgICAgICAgICBicmVhaygpCiAgICAgICAgICAgZW5kaWYoKQogICAgICAgICBlbmRpZigpCiAKKyAgICAgICAgIyB0cnkgdXNpbmcgSElOVFMKICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIKLSAgICAgICAgICAgICAgICAgICAgICBOQU1FUyBpcHljCisgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgogICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUk9PVH0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9Ci0gICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQotICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2NvbXBpbGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0pCisgICAgICAgIF9weXRob25fdmFsaWRhdGVfY29tcGlsZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9KQogICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQogICAgICAgICAgIGJyZWFrKCkKICAgICAgICAgZW5kaWYoKQogCi0gICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiTEFTVCIpCisgICAgICAgICMgdHJ5IHVzaW5nIHN0YW5kYXJkIHBhdGhzCisgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCisgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30pCisgICAgICAgIF9weXRob25fdmFsaWRhdGVfY29tcGlsZXIgKCR7JHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OfSAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05fRVhBQ1R9KQorICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQorICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgICMgQXBwbGUgZnJhbWV3b3JrcyBoYW5kbGluZworICAgICAgICBpZiAoQ01BS0VfSE9TVF9BUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKICAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgaXB5YwotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUFlUSE9OX1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9OQU1FU30KKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0RFRkFVTFRfUEFUSCkKKyAgICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2NvbXBpbGVyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OX0VYQUNUfSkKKyAgICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQorICAgICAgICAgICAgYnJlYWsoKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgICAjIFdpbmRvd3MgcmVnaXN0cnkKKyAgICAgICAgaWYgKENNQUtFX0hPU1RfV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJMQVNUIikKKyAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KKyAgICAgICAgICAgICAgICAgICAgICAgIE5PX0RFRkFVTFRfUEFUSCkKKyAgICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQorICAgICAgICAgICAgYnJlYWsoKQorICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgIGJyZWFrKCkKQEAgLTEzODUsMTIgKzE5MzksNDggQEAKICAgICBlbHNlKCkKICAgICAgICMgdHJ5IHVzaW5nIHJvb3QgZGlyIGFuZCByZWdpc3RyeQogICAgICAgZm9yZWFjaCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04gSU4gTElTVFMgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlMpCi0gICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiRklSU1QiKQorICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBMRU1FTlRBVElPTlMgSXJvblB5dGhvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRVIpCisKKyAgICAgICAgX3B5dGhvbl9nZXRfcGF0aF9zdWZmaXhlcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QTEVNRU5UQVRJT05TIElyb25QeXRob24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVSKQorCisgICAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QTEVNRU5UQVRJT05TIElyb25QeXRob24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKKyAgICAgICAgX3B5dGhvbl9nZXRfcmVnaXN0cmllcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OUyBJcm9uUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCisKKyAgICAgICAgIyBBcHBsZSBmcmFtZXdvcmtzIGhhbmRsaW5nCisgICAgICAgIGlmIChDTUFLRV9IT1NUX0FQUExFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUksgU1RSRVFVQUwgIkZJUlNUIikKICAgICAgICAgICBmaW5kX3Byb2dyYW0gKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUgotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgaXB5YworICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1JPT1R9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXElyb25QeXRob25cXCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059XFxJbnN0YWxsUGF0aF0KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFU30KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KKyAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKKyAgICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2NvbXBpbGVyICgke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBFWEFDVCkKKyAgICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQorICAgICAgICAgICAgYnJlYWsoKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgICAjIFdpbmRvd3MgcmVnaXN0cnkKKyAgICAgICAgaWYgKENNQUtFX0hPU1RfV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJGSVJTVCIpCisgICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIKKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9ST09UfSAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQogICAgICAgICAgIF9weXRob25fdmFsaWRhdGVfY29tcGlsZXIgKCR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IEVYQUNUKQpAQCAtMTM5OSwxMCArMTk4OSwxMiBAQAogICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgZW5kaWYoKQogCisgICAgICAgICMgdHJ5IHVzaW5nIEhJTlRTCiAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCi0gICAgICAgICAgICAgICAgICAgICAgTkFNRVMgaXB5YworICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1JPT1R9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFU30KKyAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9jb21waWxlciAoJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gRVhBQ1QpCkBAIC0xNDEwLDExICsyMDAyLDI2IEBACiAgICAgICAgICAgYnJlYWsoKQogICAgICAgICBlbmRpZigpCiAKLSAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJMQVNUIikKKyAgICAgICAgIyBBcHBsZSBmcmFtZXdvcmtzIGhhbmRsaW5nCisgICAgICAgIGlmIChDTUFLRV9IT1NUX0FQUExFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUksgU1RSRVFVQUwgIkxBU1QiKQogICAgICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCi0gICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyBpcHljCi0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyBbSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcSXJvblB5dGhvblxcJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn1cXEluc3RhbGxQYXRoXQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICAgICBOT19ERUZBVUxUX1BBVEgpCisgICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9jb21waWxlciAoJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gRVhBQ1QpCisgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKKyAgICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgIyBXaW5kb3dzIHJlZ2lzdHJ5CisgICAgICAgIGlmIChDTUFLRV9IT1NUX1dJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiTEFTVCIpCisgICAgICAgICAgZmluZF9wcm9ncmFtIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIKKyAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOT19ERUZBVUxUX1BBVEgpCiAgICAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9jb21waWxlciAoJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gRVhBQ1QpCiAgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUikKQEAgLTE0MjQsMTAgKzIwMzEsMTggQEAKICAgICAgIGVuZGZvcmVhY2goKQogCiAgICAgICAjIG5vIHNwZWNpZmljIHZlcnNpb24gZm91bmQsIHJlLXRyeSBpbiBzdGFuZGFyZCBwYXRocworICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9OQU1FUworICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OUyBJcm9uUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfQorICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVSKQorICAgICAgX3B5dGhvbl9nZXRfcGF0aF9zdWZmaXhlcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OUyBJcm9uUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QSUxFUikKICAgICAgIGZpbmRfcHJvZ3JhbSAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCi0gICAgICAgICAgICAgICAgICAgIE5BTUVTIGlweWMKKyAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lST05fUk9PVH0gJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9Ci0gICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSVJPTl9QWVRIT05fUEFUSF9TVUZGSVhFU30pCisgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30pCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKQEAgLTE0MzUsMTMgKzIwNTAsMTggQEAKIAogICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSKQogICAgICMgcmV0cmlldmUgcHl0aG9uIGVudmlyb25tZW50IHZlcnNpb24gZnJvbSBjb21waWxlcgorICAgIF9weXRob25fZ2V0X2xhdW5jaGVyIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfTEFVTkNIRVIgQ09NUElMRVIpCiAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9ESVIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9QeXRob25Db21waWxlclZlcnNpb24uZGlyIikKICAgICBmaWxlIChXUklURSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9ESVJ9L3ZlcnNpb24ucHkiICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKCcuJy5qb2luKFtzdHIoeCkgZm9yIHggaW4gc3lzLnZlcnNpb25faW5mb1s6M11dKSlcbiIpCi0gICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUn0iIC90YXJnZXQ6ZXhlIC9lbWJlZCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9ESVJ9L3ZlcnNpb24ucHkiCisgICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9JUk9OX1BZVEhPTl9DT01QSUxFUl9BUkNIX0ZMQUdTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvdGFyZ2V0OmV4ZSAvZW1iZWQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fRElSfS92ZXJzaW9uLnB5IgogICAgICAgICAgICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fRElSfSIKICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9RVUlFVAogICAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQpCi0gICAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX0RJUn0vdmVyc2lvbiIKKyAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50IChfJHtfUFlUSE9OX1BSRUZJWH1fSVJfRElSICIke18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUn0iIERJUkVDVE9SWSkKKyAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAiTU9OT19QQVRIPSR7XyR7X1BZVEhPTl9QUkVGSVh9X0lSX0RJUn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7JHtfUFlUSE9OX1BSRUZJWH1fRE9UTkVUX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9ESVJ9L3ZlcnNpb24uZXhlIgogICAgICAgICAgICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fRElSfSIKICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCiAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04KQEAgLTE0NjMsNiArMjA4Myw3IEBACiAgICAgZWxzZSgpCiAgICAgICAjIGNvbXBpbGVyIG5vdCB1c2FibGUKICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX1VTQUJMRSBGQUxTRSkKKyAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NvbXBpbGVyX1JFQVNPTl9GQUlMVVJFICJDYW5ub3QgcnVuIHRoZSBjb21waWxlciBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfVwiIikKICAgICBlbmRpZigpCiAgICAgZmlsZSAoUkVNT1ZFX1JFQ1VSU0UgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fRElSfSIpCiAgIGVuZGlmKCkKQEAgLTE0NzAsMTcgKzIwOTEsMTkgQEAKICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX1VTQUJMRSkKICAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQpCiAgICAgICAjIENvbXBpbGVyIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIGludGVycHJldGVyCi0gICAgICBpZiAoJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUn0uJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0gVkVSU0lPTl9FUVVBTCAkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0pCisgICAgICBpZiAoIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9IiBWRVJTSU9OX0VRVUFMICIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0iKQogICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0NvbXBpbGVyX0ZPVU5EIFRSVUUpCiAgICAgICBlbmRpZigpCiAgICAgZWxzZWlmICgke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SIFZFUlNJT05fRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1IpCiAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0NvbXBpbGVyX0ZPVU5EIFRSVUUpCi0gICAgIyBVc2UgY29tcGlsZXIgdmVyc2lvbiBmb3IgZnV0dXJlIHNlYXJjaGVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeQotICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlMgJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SfS4keyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9KQorICAgICAgIyBVc2UgY29tcGlsZXIgdmVyc2lvbiBmb3IgZnV0dXJlIHNlYXJjaGVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUyAkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0pCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0NvbXBpbGVyX0ZPVU5EKQorICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fQ29tcGlsZXJfUkVBU09OX0ZBSUxVUkUpCisKICAgICAjIGNvbXB1dGUgYW5kIHNhdmUgY29tcGlsZXIgc2lnbmF0dXJlCiAgICAgc3RyaW5nIChNRDUgX18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9TSUdOQVRVUkUgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1NJR05BVFVSRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJ9IikKICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9TSUdOQVRVUkUgIiR7X18ke19QWVRIT05fUFJFRklYfV9DT01QSUxFUl9TSUdOQVRVUkV9IiBDQUNIRSBJTlRFUk5BTCAiIikKQEAgLTE0OTEsNTAgKzIxMTQsNjEgQEAKICAgICB1bnNldCAoJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVJfSUQpCiAgIGVuZGlmKCkKIAorICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fQVJUSUZBQ1RTX0lOVEVSQUNUSVZFKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fQ09NUElMRVIgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfSIgQ0FDSEUgRklMRVBBVEggIiR7X1BZVEhPTl9QUkVGSVh9IENvbXBpbGVyIikKKyAgZW5kaWYoKQorCiAgIF9weXRob25fbWFya19hc19pbnRlcm5hbCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSX1NJR05BVFVSRSkKIGVuZGlmKCkKIAotCiAjIHRoaXJkIHN0ZXAsIHNlYXJjaCBmb3IgdGhlIGRldmVsb3BtZW50IGFydGlmYWN0cworaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVRVUlSRURfRGV2ZWxvcG1lbnQuTW9kdWxlKQorICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfTU9EVUxFX0FSVElGQUNUUykKKyAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZBUlMgJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSSUVTKQorICBlbmRpZigpCisgIGlmICgiSU5DTFVERV9ESVIiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfTU9EVUxFX0FSVElGQUNUUykKKyAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZBUlMgJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJTKQorICBlbmRpZigpCitlbmRpZigpCitpZiAoJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRVFVSVJFRF9EZXZlbG9wbWVudC5FbWJlZCkKKyAgaWYgKCJMSUJSQVJZIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0VNQkVEX0FSVElGQUNUUykKKyAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZBUlMgJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSSUVTKQorICBlbmRpZigpCisgIGlmICgiSU5DTFVERV9ESVIiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfRU1CRURfQVJUSUZBQ1RTKQorICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkFSUyAke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUlMpCisgIGVuZGlmKCkKK2VuZGlmKCkKK2xpc3QgKFJFTU9WRV9EVVBMSUNBVEVTIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WQVJTKQogIyMgRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBJcm9uUHl0aG9uIGludGVycHJldGVyCi1pZiAoIkRldmVsb3BtZW50IiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUwotICAgIEFORCBOT1QgJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIklyb25QeXRob24iKQoraWYgKCgiRGV2ZWxvcG1lbnQuTW9kdWxlIiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUworICAgICAgT1IgIkRldmVsb3BtZW50LkVtYmVkIiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUykKKyAgICBBTkQgKCgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORAorICAgICAgICBBTkQgTk9UICR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJJcm9uUHl0aG9uIikKKyAgICAgIE9SIE5PVCAke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCkpCisgIGlmICgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCkKKyAgICAjIHJlZHVjZSBwb3NzaWJsZSBpbXBsZW1lbnRhdGlvbnMgdG8gdGhlIGludGVycHJldGVyIG9uZQorICAgIGlmICgke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9JRCBTVFJFUVVBTCAiUHlQeSIpCisgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OUyAiUHlQeSIpCisgICAgZWxzZSgpCisgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0lNUExFTUVOVEFUSU9OUyAiQ1B5dGhvbiIpCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBsaXN0IChSRU1PVkVfSVRFTSBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMgIklyb25QeXRob24iKQorICBlbmRpZigpCisgIGlmICgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9BUlRJRkFDVFMpCiAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fQ0FDSEVEX1ZBUlMgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKLSAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVRVUlSRURfRGV2ZWxvcG1lbnQpCi0gICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WQVJTICR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUklFUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUlMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVRykKKyAgZW5kaWYoKQorICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0FSVElGQUNUUykKKyAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0NBQ0hFRF9WQVJTIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKICAgZW5kaWYoKQogCi0gIGlmIChERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgT1IgREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCi0gICAgIyBjb21wdXRlIGRldmVsb3BtZW50IHNpZ25hdHVyZSBhbmQgY2hlY2sgdmFsaWRpdHkgb2YgZGVmaW5pdGlvbgotICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IikKLSAgICBpZiAoV0lOMzIgQU5EIE5PVCBERUZJTkVEIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHKQotICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRyAiJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRy1OT1RGT1VORCIgQ0FDSEUgSU5URVJOQUwgIiIpCi0gICAgZW5kaWYoKQotICAgIGlmIChOT1QgREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCi0gICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiAiJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVItTk9URk9VTkQiIENBQ0hFIElOVEVSTkFMICIiKQotICAgIGVuZGlmKCkKLSAgICBpZiAoX18ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgU1RSRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UX1NJR05BVFVSRSkKLSAgICAgICMgY2hlY2sgdmVyc2lvbiB2YWxpZGl0eQotICAgICAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTl9FWEFDVCkKLSAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9saWJyYXJ5ICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gRVhBQ1QgQ0hFQ0tfRVhJU1RTKQotICAgICAgICBfcHl0aG9uX3ZhbGlkYXRlX2luY2x1ZGVfZGlyICgkeyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTn0gRVhBQ1QgQ0hFQ0tfRVhJU1RTKQotICAgICAgZWxzZSgpCi0gICAgICAgIF9weXRob25fdmFsaWRhdGVfbGlicmFyeSAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059IENIRUNLX0VYSVNUUykKLSAgICAgICAgX3B5dGhvbl92YWxpZGF0ZV9pbmNsdWRlX2RpciAoJHske19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT059IENIRUNLX0VYSVNUUykKLSAgICAgIGVuZGlmKCkKLSAgICBlbHNlKCkKLSAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIENBQ0hFKQotICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHIENBQ0hFKQotICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiBDQUNIRSkKLSAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfU0lHTkFUVVJFIENBQ0hFKQotICAgIGVuZGlmKCkKLSAgZW5kaWYoKQorICBfcHl0aG9uX2NoZWNrX2RldmVsb3BtZW50X3NpZ25hdHVyZSAoTW9kdWxlKQorICBfcHl0aG9uX2NoZWNrX2RldmVsb3BtZW50X3NpZ25hdHVyZSAoRW1iZWQpCisKICAgaWYgKERFRklORUQgJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWQogICAgICAgQU5EIElTX0FCU09MVVRFICIkeyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUll9IikKICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgIiR7JHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWX0iIENBQ0hFIElOVEVSTkFMICIiKQpAQCAtMTU2MSwyNSArMjE5NSwxOCBAQAogICAgICMgaWYgcHl0aG9uIGludGVycHJldGVyIGlzIGZvdW5kLCB1c2UgaXQgdG8gbG9vay11cCBmb3IgYXJ0aWZhY3RzCiAgICAgIyB0byBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiBpbnRlcnByZXRlciBhbmQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLgogICAgICMgSWYgbm90LCB0cnkgdG8gbG9jYXRlIGEgY29tcGF0aWJsZSBjb25maWcgdG9vbAotICAgIGlmIChOT1QgJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgT1IgQ01BS0VfQ1JPU1NDT01QSUxJTkcpCisgICAgaWYgKChOT1QgJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgT1IgQ01BS0VfQ1JPU1NDT01QSUxJTkcpCisgICAgICAgIEFORCAiQ1B5dGhvbiIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9JTVBMRU1FTlRBVElPTlMpCiAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9ISU5UUyAiJHske19QWVRIT05fUFJFRklYfV9ST09UX0RJUn0iIEVOViAke19QWVRIT05fUFJFRklYfV9ST09UX0RJUikKICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIUykKICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WSVJUVUFMRU5WIE1BVENIRVMgIl4oRklSU1R8T05MWSkkIikKLSAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIUyBFTlYgVklSVFVBTF9FTlYpCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMgRU5WIFZJUlRVQUxfRU5WIEVOViBDT05EQV9QUkVGSVgpCiAgICAgICBlbmRpZigpCi0gICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKIAogICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1NUUkFURUdZIFNUUkVRVUFMICJMT0NBVElPTiIpCi0gICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJR19OQU1FUykKLQotICAgICAgICBmb3JlYWNoIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUykKLSAgICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBQT1NJWCBDT05GSUcpCi0gICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9DT05GSUdfTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9OQU1FU30pCi0KKyAgICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9DT05GSUdfTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfSBQT1NJWCBDT05GSUcpCiAgICAgICAgICAgIyBGcmFtZXdvcmsgUGF0aHMKLSAgICAgICAgICBfcHl0aG9uX2dldF9mcmFtZXdvcmtzIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKLSAgICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVEhTfSkKLSAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfSkKIAogICAgICAgICAjIEFwcGxlIGZyYW1ld29ya3MgaGFuZGxpbmcKICAgICAgICAgaWYgKENNQUtFX0hPU1RfQVBQTEUgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0ZSQU1FV09SSyBTVFJFUVVBTCAiRklSU1QiKQpAQCAtMTY2Myw3ICsyMjkwLDcgQEAKICAgICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJR19OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IFBPU0lYIENPTkZJRykKIAogICAgICAgICAgICMgRnJhbWV3b3JrIFBhdGhzCi0gICAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKKyAgICAgICAgICBfcHl0aG9uX2dldF9mcmFtZXdvcmtzIChfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCiAKICAgICAgICAgICAjIEFwcGxlIGZyYW1ld29ya3MgaGFuZGxpbmcKICAgICAgICAgICBpZiAoQ01BS0VfSE9TVF9BUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJGSVJTVCIpCkBAIC0xNzU2LDE0MCArMjM4Myw2MSBAQAogICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCi0gIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSkKLSAgICBpZiAoKCR7X1BZVEhPTl9QUkVGSVh9X0ludGVycHJldGVyX0ZPVU5EIEFORCBOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcpIE9SIF8ke19QWVRIT05fUFJFRklYfV9DT05GSUcpCi0gICAgICAjIHJldHJpZXZlIHJvb3QgaW5zdGFsbCBkaXJlY3RvcnkKLSAgICAgIF9weXRob25fZ2V0X2NvbmZpZ192YXIgKF8ke19QWVRIT05fUFJFRklYfV9QUkVGSVggUFJFRklYKQotCi0gICAgICAjIGVuZm9yY2UgY3VycmVudCBBQkkKLSAgICAgIF9weXRob25fZ2V0X2NvbmZpZ192YXIgKF8ke19QWVRIT05fUFJFRklYfV9BQklGTEFHUyBBQklGTEFHUykKLQotICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BSRUZJWH0iKQotCi0gICAgICAjIHJldHJpZXZlIGxpYnJhcnkKLSAgICAgICMjIGNvbXB1dGUgc29tZSBwYXRocyBhbmQgYXJ0aWZhY3QgbmFtZXMKLSAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHKQotICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIl4uK3B5dGhvbihbMC05Ll0rKVthLXpdKi1jb25maWciICJcXDEiIF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OICIke18ke19QWVRIT05fUFJFRklYfV9DT05GSUd9IikKLSAgICAgIGVsc2UoKQotICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OICIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0iKQotICAgICAgZW5kaWYoKQotICAgICAgX3B5dGhvbl9nZXRfcGF0aF9zdWZmaXhlcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBMSUJSQVJZKQotICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBQT1NJWCBMSUJSQVJZKQotCi0gICAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHRElSIENPTkZJR0RJUikKLSAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJR0RJUn0iKQotCi0gICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTICIkeyR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSfSIgRU5WICR7X1BZVEhPTl9QUkVGSVh9X1JPT1RfRElSKQotCi0gICAgICBmaW5kX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UKLSAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQotICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9Ci0gICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICi0gICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQotICAgIGVuZGlmKCkKLQotICAgICMgUmVseSBvbiBISU5UUyBhbmQgc3RhbmRhcmQgcGF0aHMgaWYgaW50ZXJwcmV0ZXIgb3IgY29uZmlnIHRvb2wgZmFpbGVkIHRvIGxvY2F0ZSBhcnRpZmFjdHMKKyAgaWYgKCJMSUJSQVJZIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0FSVElGQUNUUykKICAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCi0gICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9ISU5UUyAiJHske19QWVRIT05fUFJFRklYfV9ST09UX0RJUn0iIEVOViAke19QWVRIT05fUFJFRklYfV9ST09UX0RJUikKKyAgICAgIGlmICgoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgQU5EIE5PVCBDTUFLRV9DUk9TU0NPTVBJTElORykgT1IgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRykKKyAgICAgICAgIyByZXRyaWV2ZSByb290IGluc3RhbGwgZGlyZWN0b3J5CisgICAgICAgIF9weXRob25fZ2V0X2NvbmZpZ192YXIgKF8ke19QWVRIT05fUFJFRklYfV9QUkVGSVggUFJFRklYKQogCi0gICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMpCi0gICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOViBNQVRDSEVTICJeKEZJUlNUfE9OTFkpJCIpCi0gICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMgRU5WIFZJUlRVQUxfRU5WKQotICAgICAgZW5kaWYoKQorICAgICAgICAjIGVuZm9yY2UgY3VycmVudCBBQkkKKyAgICAgICAgX3B5dGhvbl9nZXRfY29uZmlnX3ZhciAoXyR7X1BZVEhPTl9QUkVGSVh9X0FCSUZMQUdTIEFCSUZMQUdTKQogCi0gICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfU1RSQVRFR1kgU1RSRVFVQUwgIkxPQ0FUSU9OIikKLSAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVMpCi0gICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHKQotICAgICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKLSAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUykKLSAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTKQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9ISU5UUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUFJFRklYfSIpCiAKLSAgICAgICAgZm9yZWFjaCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OIElOIExJU1RTIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TKQotICAgICAgICAgICMgbGlicmFyeSBuYW1lcwotICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSBXSU4zMiBQT1NJWCBMSUJSQVJZKQotICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTkFNRVN9KQotICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSBXSU4zMiBERUJVRykKLSAgICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVRyAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX05BTUVTfSkKLQotICAgICAgICAgICMgRnJhbWV3b3JrIFBhdGhzCi0gICAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059KQotICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFN9KQotCi0gICAgICAgICAgIyBSZWdpc3RyeSBQYXRocwotICAgICAgICAgIF9weXRob25fZ2V0X3JlZ2lzdHJpZXMgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSkKLSAgICAgICAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFN9KQotCi0gICAgICAgICAgIyBQYXRocyBzdWZmaXhlcwotICAgICAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059IExJQlJBUlkpCi0gICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fUEFUSFN9KQotICAgICAgICBlbmRmb3JlYWNoKCkKLQotICAgICAgICBpZiAoQVBQTEUgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0ZSQU1FV09SSyBTVFJFUVVBTCAiRklSU1QiKQotICAgICAgICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgotICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQotICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfUEFUSAotICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAotICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKLSAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorICAgICAgICAjIHJldHJpZXZlIGxpYnJhcnkKKyAgICAgICAgIyMgY29tcHV0ZSBzb21lIHBhdGhzIGFuZCBhcnRpZmFjdCBuYW1lcworICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRykKKyAgICAgICAgICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIl4uK3B5dGhvbihbMC05Ll0rKVthLXpdKi1jb25maWciICJcXDEiIF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OICIke18ke19QWVRIT05fUFJFRklYfV9DT05GSUd9IikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiAiJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SfS4keyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9IikKICAgICAgICAgZW5kaWYoKQorICAgICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IExJQlJBUlkpCisgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gV0lOMzIgUE9TSVggTElCUkFSWSkKIAotICAgICAgICBpZiAoV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJGSVJTVCIpCi0gICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCi0gICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVN9Ci0gICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KLSAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICi0gICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKLSAgICAgICAgZW5kaWYoKQorICAgICAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyIChfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHRElSIENPTkZJR0RJUikKKyAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9ISU5UUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHRElSfSIpCiAKLSAgICAgICAgIyBzZWFyY2ggaW4gSElOVFMgbG9jYXRpb25zCisgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7JHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVJ9IiBFTlYgJHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVIpCisKICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQogICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTfQogICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAogICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorICAgICAgZW5kaWYoKQogCi0gICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKLSAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30pCi0gICAgICAgIGVsc2UoKQotICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKKyAgICAgICMgUmVseSBvbiBISU5UUyBhbmQgc3RhbmRhcmQgcGF0aHMgaWYgaW50ZXJwcmV0ZXIgb3IgY29uZmlnIHRvb2wgZmFpbGVkIHRvIGxvY2F0ZSBhcnRpZmFjdHMKKyAgICAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSkKKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7JHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVJ9IiBFTlYgJHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVIpCisKKyAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTKQorICAgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVklSVFVBTEVOViBNQVRDSEVTICJeKEZJUlNUfE9OTFkpJCIpCisgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIUyBFTlYgVklSVFVBTF9FTlYgRU5WIENPTkRBX1BSRUZJWCkKICAgICAgICAgZW5kaWYoKQogCi0gICAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQotICAgICAgICAgIHNldCAoX18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30pCi0gICAgICAgIGVsc2UoKQotICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTKQotICAgICAgICBlbmRpZigpCisgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9TVFJBVEVHWSBTVFJFUVVBTCAiTE9DQVRJT04iKQorICAgICAgICAgICMgbGlicmFyeSBuYW1lcworICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OU30gV0lOMzIgUE9TSVggTElCUkFSWSkKKyAgICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVRyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9IFdJTjMyIERFQlVHKQorICAgICAgICAgICMgUGF0aHMgc3VmZml4ZXMKKyAgICAgICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfVkVSU0lPTlN9IExJQlJBUlkpCiAKLSAgICAgICAgIyBzZWFyY2ggaW4gYWxsIGRlZmF1bHQgcGF0aHMKLSAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCi0gICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQotICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKLSAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke19fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7X18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9KQotICAgICAgZWxzZSgpCi0gICAgICAgIGZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9MSUJfVkVSU0lPTiBJTiBMSVNUUyBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9WRVJTSU9OUykKLSAgICAgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSBXSU4zMiBQT1NJWCBMSUJSQVJZKQotICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059IFdJTjMyIERFQlVHKQotCi0gICAgICAgICAgX3B5dGhvbl9nZXRfZnJhbWV3b3JrcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfVkVSU0lPTn0pCi0gICAgICAgICAgX3B5dGhvbl9nZXRfcmVnaXN0cmllcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSkKLQotICAgICAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059IExJQlJBUlkpCisgICAgICAgICAgIyBGcmFtZXdvcmsgUGF0aHMKKyAgICAgICAgICBfcHl0aG9uX2dldF9mcmFtZXdvcmtzIChfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX0ZJTkRfVkVSU0lPTlN9KQorICAgICAgICAgICMgUmVnaXN0cnkgUGF0aHMKKyAgICAgICAgICBfcHl0aG9uX2dldF9yZWdpc3RyaWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TfSApCiAKICAgICAgICAgICBpZiAoQVBQTEUgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0ZSQU1FV09SSyBTVFJFUVVBTCAiRklSU1QiKQogICAgICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCkBAIC0xOTI3LDE4MiArMjQ3NSwyODggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKIAotICAgICAgICAgaWYgKEFQUExFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9GUkFNRVdPUksgU1RSRVFVQUwgIkxBU1QiKQotICAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30pCi0gICAgICAgICBlbHNlKCkKLSAgICAgICAgICAgdW5zZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTKQotICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKKyAgICAgICAgICAgIHNldCAoX18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfSkKKyAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKKyAgICAgICAgICBlbmRpZigpCiAKLSAgICAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQotICAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9KQotICAgICAgICAgZWxzZSgpCi0gICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTKQotICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkxBU1QiKQorICAgICAgICAgICAgc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfSkKKyAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTKQorICAgICAgICAgIGVuZGlmKCkKIAotICAgICAgICAgIyBzZWFyY2ggaW4gYWxsIGRlZmF1bHQgcGF0aHMKLSAgICAgICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICMgc2VhcmNoIGluIGFsbCBkZWZhdWx0IHBhdGhzCisgICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVN9CiAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCiAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke19fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQogICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfSkKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgZm9yZWFjaCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OIElOIExJU1RTIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZFUlNJT05TKQorICAgICAgICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9MSUJfVkVSU0lPTn0gV0lOMzIgUE9TSVggTElCUkFSWSkKKyAgICAgICAgICAgIF9weXRob25fZ2V0X25hbWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059IFdJTjMyIERFQlVHKQogCi0gICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCi0gICAgICAgICAgICBicmVhaygpCisgICAgICAgICAgICBfcHl0aG9uX2dldF9mcmFtZXdvcmtzIChfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059KQorICAgICAgICAgICAgX3B5dGhvbl9nZXRfcmVnaXN0cmllcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX1ZFUlNJT059KQorCisgICAgICAgICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9WRVJTSU9OfSBMSUJSQVJZKQorCisgICAgICAgICAgICBpZiAoQVBQTEUgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0ZSQU1FV09SSyBTVFJFUVVBTCAiRklSU1QiKQorICAgICAgICAgICAgICBmaW5kX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisgICAgICAgICAgICBlbmRpZigpCisKKyAgICAgICAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKKyAgICAgICAgICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorICAgICAgICAgICAgZW5kaWYoKQorCisgICAgICAgICAgICAjIHNlYXJjaCBpbiBISU5UUyBsb2NhdGlvbnMKKyAgICAgICAgICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisKKyAgICAgICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKKyAgICAgICAgICAgICAgc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9KQorICAgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKKyAgICAgICAgICAgIGVuZGlmKCkKKworICAgICAgICAgICAgaWYgKFdJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiTEFTVCIpCisgICAgICAgICAgICAgIHNldCAoX18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30pCisgICAgICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgICAgdW5zZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMpCisgICAgICAgICAgICBlbmRpZigpCisKKyAgICAgICAgICAgICMgc2VhcmNoIGluIGFsbCBkZWZhdWx0IHBhdGhzCisgICAgICAgICAgICBmaW5kX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7X18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7X18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfSkKKworICAgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCisgICAgICAgICAgICAgIGJyZWFrKCkKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBlbmRmb3JlYWNoKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKworICAgICMgZmluYWxpemUgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uCisgICAgX3B5dGhvbl9nZXRfdmVyc2lvbiAoTElCUkFSWSBQUkVGSVggXyR7X1BZVEhPTl9QUkVGSVh9XykKKyAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT04gRVFVQUwgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZFUlNJT05fTUFKT1J9IikKKyAgICAgICMgbm90IGFibGUgdG8gZXh0cmFjdCBmdWxsIHZlcnNpb24gZnJvbSBsaWJyYXJ5IG5hbWUKKyAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCkKKyAgICAgICAgIyB1cGRhdGUgZnJvbSBpbnRlcnByZXRlcgorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OICR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1IgJHske19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SfSkKKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUiAkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9KQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVENIICR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRDSH0pCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorCisgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iKQorCisgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iKQorICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFwiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfVwiIikKKyAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBQUk9QRVJUWSBWQUxVRSAiJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFLU5PVEZPVU5EIikKKyAgICBlbmRpZigpCisKKyAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9ISU5UUyAiJHske19QWVRIT05fUFJFRklYfV9ST09UX0RJUn0iIEVOViAke19QWVRIT05fUFJFRklYfV9ST09UX0RJUikKKworICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSkKKyAgICAgICMgc2VhcmNoIGZvciBkZWJ1ZyBsaWJyYXJ5CisgICAgICAjIHVzZSByZWxlYXNlIGxpYnJhcnkgbG9jYXRpb24gYXMgYSBoaW50CisgICAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVRyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IFdJTjMyIERFQlVHKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEggIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iIERJUkVDVE9SWSkKKyAgICAgIGZpbmRfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHfQorICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCisgICAgICAgICAgICAgICAgICAgIEhJTlRTICIke18ke19QWVRIT05fUFJFRklYfV9QQVRIfSIgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CisgICAgICAgICAgICAgICAgICAgIE5PX0RFRkFVTFRfUEFUSCkKKyAgICAgICMgc2Vjb25kIHRyeSBpbmNsdWRpbmcgQ01BS0UgdmFyaWFibGVzIHRvIGNhdGNoLXVwIG5vbiBjb252ZW50aW9uYWwgbGF5b3V0cworICAgICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRworICAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVNfREVCVUd9CisgICAgICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIKKyAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisgICAgZW5kaWYoKQorCisgICAgIyByZXRyaWV2ZSBydW50aW1lIGxpYnJhcmllcworICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFKQorICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBQT1NJWCBMSUJSQVJZKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEggIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iIERJUkVDVE9SWSkKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIMiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSH0iIERJUkVDVE9SWSkKKyAgICAgIF9weXRob25fZmluZF9ydW50aW1lX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEgyfSIgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbikKKyAgICBlbmRpZigpCisgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHKQorICAgICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVNfREVCVUcgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBERUJVRykKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHfSIgRElSRUNUT1JZKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEgyICIke18ke19QWVRIT05fUFJFRklYfV9QQVRIfSIgRElSRUNUT1JZKQorICAgICAgX3B5dGhvbl9maW5kX3J1bnRpbWVfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEgyfSIgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbikKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICBpZiAoIklOQ0xVREVfRElSIiBJTl9MSVNUIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX0RFVkVMT1BNRU5UX0FSVElGQUNUUykKKyAgICB3aGlsZSAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKKyAgICAgIGlmICgiTElCUkFSWSIgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9ERVZFTE9QTUVOVF9BUlRJRkFDVFMKKyAgICAgICAgICBBTkQgTk9UIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCisgICAgICAgICMgRG9uJ3Qgc2VhcmNoIGZvciBpbmNsdWRlIGRpciBpZiBubyBsaWJyYXJ5IHdhcyBmb3VuZGVkCisgICAgICAgIGJyZWFrKCkKKyAgICAgIGVuZGlmKCkKKworICAgICAgaWYgKCgke19QWVRIT05fUFJFRklYfV9JbnRlcnByZXRlcl9GT1VORCBBTkQgTk9UIENNQUtFX0NST1NTQ09NUElMSU5HKSBPUiBfJHtfUFlUSE9OX1BSRUZJWH1fQ09ORklHKQorICAgICAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJTIElOQ0xVREVTKQorCisgICAgICAgIGZpbmRfcGF0aCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSCisgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9OQU1FU30KKyAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUlN9CisgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKKyAgICAgIGVuZGlmKCkKKworICAgICAgIyBSZWx5IG9uIEhJTlRTIGFuZCBzdGFuZGFyZCBwYXRocyBpZiBpbnRlcnByZXRlciBvciBjb25maWcgdG9vbCBmYWlsZWQgdG8gbG9jYXRlIGFydGlmYWN0cworICAgICAgaWYgKE5PVCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCisgICAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIUykKKyAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZJUlRVQUxFTlYgTUFUQ0hFUyAiXihGSVJTVHxPTkxZKSQiKQorICAgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFMgRU5WIFZJUlRVQUxfRU5WIEVOViBDT05EQV9QUkVGSVgpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTKQorCisgICAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFKQorICAgICAgICAgICMgVXNlIHRoZSBsaWJyYXJ5J3MgaW5zdGFsbCBwcmVmaXggYXMgYSBoaW50CisgICAgICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgTUFUQ0hFUyAiXiguKy9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvWzAtOS5dKykiKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTICIke0NNQUtFX01BVENIXzF9IikKKyAgICAgICAgICBlbHNlaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgTUFUQ0hFUyAiXiguKykvbGliKDY0fDMyKT8vcHl0aG9uWzAtOS5dKy9jb25maWciKQorICAgICAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTICIke0NNQUtFX01BVENIXzF9IikKKyAgICAgICAgICBlbHNlaWYgKERFRklORUQgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0gTUFUQ0hFUyAiXiguKykvbGliLyR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9IikKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ISU5UUyAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICAjIGFzc3VtZSBsaWJyYXJ5IGlzIGluIGEgZGlyZWN0b3J5IHVuZGVyIHJvb3QKKyAgICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QUkVGSVggIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iIERJUkVDVE9SWSkKKyAgICAgICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QUkVGSVggIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BSRUZJWH0iIERJUkVDVE9SWSkKKyAgICAgICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ISU5UUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUFJFRklYfSIpCiAgICAgICAgICAgZW5kaWYoKQotICAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgIGVuZGlmKCkKLSAgICBlbmRpZigpCi0gIGVuZGlmKCkKKyAgICAgICAgZW5kaWYoKQogCi0gICMgZmluYWxpemUgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uCi0gIF9weXRob25fZ2V0X3ZlcnNpb24gKExJQlJBUlkgUFJFRklYIF8ke19QWVRIT05fUFJFRklYfV8pCisgICAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSkKKyAgICAgICAgX3B5dGhvbl9nZXRfcmVnaXN0cmllcyAoXyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCisgICAgICAgIF9weXRob25fZ2V0X3BhdGhfc3VmZml4ZXMgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTIFZFUlNJT04gJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0gSU5DTFVERSkKIAotICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfSIpCisgICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJGSVJTVCIpCisgICAgICAgICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKKyAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfTkFNRVN9CisgICAgICAgICAgICAgICAgICAgICBISU5UUyAke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTfSAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KKyAgICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEhfU1VGRklYRVN9CisgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICisgICAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRICisgICAgICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAorICAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCisgICAgICAgIGVuZGlmKCkKIAotICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBBTkQgTk9UIEVYSVNUUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfSIpCi0gICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UtTk9URk9VTkQiKQotICBlbmRpZigpCisgICAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKKyAgICAgICAgICBmaW5kX3BhdGggKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUgorICAgICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9OQU1FU30KKyAgICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFN9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQorICAgICAgICAgICAgICAgICAgICAgUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVklSVFVBTEVOVl9QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XyR7X1BZVEhPTl9QUkVGSVh9X1JFR0lTVFJZX1BBVEhTfQorICAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQorICAgICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorICAgICAgICBlbmRpZigpCiAKLSAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFMgIiR7JHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVJ9IiBFTlYgJHtfUFlUSE9OX1BSRUZJWH1fUk9PVF9ESVIpCisgICAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKKyAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30pCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKKyAgICAgICAgZW5kaWYoKQogCi0gIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSkKLSAgICAjIHNlYXJjaCBmb3IgZGVidWcgbGlicmFyeQotICAgICMgdXNlIHJlbGVhc2UgbGlicmFyeSBsb2NhdGlvbiBhcyBhIGhpbnQKLSAgICBfcHl0aG9uX2dldF9uYW1lcyAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVRyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IFdJTjMyIERFQlVHKQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9IiBESVJFQ1RPUlkpCi0gICAgZmluZF9saWJyYXJ5IChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRwotICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCX05BTUVTX0RFQlVHfQotICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgotICAgICAgICAgICAgICAgICAgSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IiAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgIE5PX0RFRkFVTFRfUEFUSCkKLSAgZW5kaWYoKQorICAgICAgICBpZiAoV0lOMzIgQU5EIF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1JFR0lTVFJZIFNUUkVRVUFMICJMQVNUIikKKyAgICAgICAgICBzZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9KQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICB1bnNldCAoX18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUykKKyAgICAgICAgZW5kaWYoKQogCi0gICMgcmV0cmlldmUgcnVudGltZSBsaWJyYXJpZXMKLSAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UpCi0gICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVMgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBQT1NJWCBMSUJSQVJZKQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgKF8ke19QWVRIT05fUFJFRklYfV9QQVRIICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9IiBESVJFQ1RPUlkpCi0gICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X1BBVEgyICIke18ke19QWVRIT05fUFJFRklYfV9QQVRIfSIgRElSRUNUT1JZKQotICAgIF9weXRob25fZmluZF9ydW50aW1lX2xpYnJhcnkgKF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSDJ9IiAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbikKLSAgZW5kaWYoKQotICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfREVCVUcpCi0gICAgX3B5dGhvbl9nZXRfbmFtZXMgKF8ke19QWVRIT05fUFJFRklYfV9MSUJfTkFNRVNfREVCVUcgVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OfSBXSU4zMiBERUJVRykKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50IChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVR30iIERJUkVDVE9SWSkKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50IChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSDIgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IiBESVJFQ1RPUlkpCi0gICAgX3B5dGhvbl9maW5kX3J1bnRpbWVfbGlicmFyeSAoXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQl9OQU1FU19ERUJVR30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FU19QRVJfRElSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElOVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1BBVEh9IiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSDJ9IiAke18ke19QWVRIT05fUFJFRklYfV9ISU5UU30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX1NVRkZJWEVTIGJpbikKLSAgZW5kaWYoKQotCi0gICMgRG9uJ3Qgc2VhcmNoIGZvciBpbmNsdWRlIGRpciBpZiBubyBsaWJyYXJ5IHdhcyBmb3VuZGVkCi0gIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIEFORCBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSKQotICAgIGlmICgoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgQU5EIE5PVCBDTUFLRV9DUk9TU0NPTVBJTElORykgT1IgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRykKLSAgICAgIF9weXRob25fZ2V0X2NvbmZpZ192YXIgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUlMgSU5DTFVERVMpCi0KLSAgICAgIGZpbmRfcGF0aCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSCi0gICAgICAgICAgICAgICAgIE5BTUVTIFB5dGhvbi5oCi0gICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSU30KLSAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKLSAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCi0gICAgZW5kaWYoKQotCi0gICAgIyBSZWx5IG9uIEhJTlRTIGFuZCBzdGFuZGFyZCBwYXRocyBpZiBpbnRlcnByZXRlciBvciBjb25maWcgdG9vbCBmYWlsZWQgdG8gbG9jYXRlIGFydGlmYWN0cwotICAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSKQotICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTKQotICAgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9GSU5EX1ZJUlRVQUxFTlYgTUFUQ0hFUyAiXihGSVJTVHxPTkxZKSQiKQotICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WSVJUVUFMRU5WX1BBVEhTIEVOViBWSVJUVUFMX0VOVikKLSAgICAgIGVuZGlmKCkKLSAgICAgIHVuc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ISU5UUykKLQotICAgICAgIyBVc2UgdGhlIGxpYnJhcnkncyBpbnN0YWxsIHByZWZpeCBhcyBhIGhpbnQKLSAgICAgIGlmICgke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9IE1BVENIRVMgIl4oLisvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zL1swLTkuXSspIikKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTICIke0NNQUtFX01BVENIXzF9IikKLSAgICAgIGVsc2VpZiAoJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfSBNQVRDSEVTICJeKC4rKS9saWIoNjR8MzIpPy9weXRob25bMC05Ll0rL2NvbmZpZyIpCi0gICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ISU5UUyAiJHtDTUFLRV9NQVRDSF8xfSIpCi0gICAgICBlbHNlaWYgKERFRklORUQgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgQU5EICR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0gTUFUQ0hFUyAiXiguKykvbGliLyR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9IikKLSAgICAgICAgbGlzdCAoQVBQRU5EIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0hJTlRTICIke0NNQUtFX01BVENIXzF9IikKLSAgICAgIGVsc2UoKQotICAgICAgICAjIGFzc3VtZSBsaWJyYXJ5IGlzIGluIGEgZGlyZWN0b3J5IHVuZGVyIHJvb3QKLSAgICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCAoXyR7X1BZVEhPTl9QUkVGSVh9X1BSRUZJWCAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFfSIgRElSRUNUT1JZKQotICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50IChfJHtfUFlUSE9OX1BSRUZJWH1fUFJFRklYICIke18ke19QWVRIT05fUFJFRklYfV9QUkVGSVh9IiBESVJFQ1RPUlkpCi0gICAgICAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ISU5UUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fUFJFRklYfSIpCi0gICAgICBlbmRpZigpCi0KLSAgICAgIF9weXRob25fZ2V0X2ZyYW1ld29ya3MgKF8ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCi0gICAgICBfcHl0aG9uX2dldF9yZWdpc3RyaWVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTn0pCi0gICAgICBfcHl0aG9uX2dldF9wYXRoX3N1ZmZpeGVzIChfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFUyBWRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059IElOQ0xVREUpCi0KLSAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJGSVJTVCIpCiAgICAgICAgIGZpbmRfcGF0aCAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSCi0gICAgICAgICAgICAgICAgICAgTkFNRVMgUHl0aG9uLmgKKyAgICAgICAgICAgICAgICAgICBOQU1FUyAke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX05BTUVTfQogICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFN9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQogICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fRlJBTUVXT1JLX1BBVEhTfQotICAgICAgICAgICAgICAgICAgIFBBVEhfU1VGRklYRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUEFUSF9TVUZGSVhFU30KLSAgICAgICAgICAgICAgICAgICBOT19DTUFLRV9QQVRICi0gICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAotICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICi0gICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCi0gICAgICBlbmRpZigpCi0KLSAgICAgIGlmIChXSU4zMiBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVHSVNUUlkgU1RSRVFVQUwgIkZJUlNUIikKLSAgICAgICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKLSAgICAgICAgICAgICAgICAgICBOQU1FUyBQeXRob24uaAotICAgICAgICAgICAgICAgICAgIEhJTlRTICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfSElOVFN9ICR7XyR7X1BZVEhPTl9QUkVGSVh9X0hJTlRTfQotICAgICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJHtfJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIU30KKyAgICAgICAgICAgICAgICAgICAgICAgICAke19fJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFN9CiAgICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQogICAgICAgICAgICAgICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICiAgICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfU1lTVEVNX1BBVEgpCiAgICAgICBlbmRpZigpCiAKLSAgICAgIGlmIChBUFBMRSBBTkQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfRlJBTUVXT1JLIFNUUkVRVUFMICJMQVNUIikKLSAgICAgICAgc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9KQotICAgICAgZWxzZSgpCi0gICAgICAgIHVuc2V0IChfXyR7X1BZVEhPTl9QUkVGSVh9X0ZSQU1FV09SS19QQVRIUykKLSAgICAgIGVuZGlmKCkKLQotICAgICAgaWYgKFdJTjMyIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRUdJU1RSWSBTVFJFUVVBTCAiTEFTVCIpCi0gICAgICAgIHNldCAoX18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIUyAke18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30pCi0gICAgICBlbHNlKCkKLSAgICAgICAgdW5zZXQgKF9fJHtfUFlUSE9OX1BSRUZJWH1fUkVHSVNUUllfUEFUSFMpCi0gICAgICBlbmRpZigpCi0KKyAgICAgICMgc2VhcmNoIGhlYWRlciBmaWxlIGluIHN0YW5kYXJkIGxvY2F0aW9ucwogICAgICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKLSAgICAgICAgICAgICAgICAgTkFNRVMgUHl0aG9uLmgKLSAgICAgICAgICAgICAgICAgSElOVFMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ISU5UU30gJHtfJHtfUFlUSE9OX1BSRUZJWH1fSElOVFN9Ci0gICAgICAgICAgICAgICAgIFBBVEhTICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZJUlRVQUxFTlZfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICR7X18ke19QWVRIT05fUFJFRklYfV9GUkFNRVdPUktfUEFUSFN9Ci0gICAgICAgICAgICAgICAgICAgICAgICR7X18ke19QWVRIT05fUFJFRklYfV9SRUdJU1RSWV9QQVRIU30KLSAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9QQVRIX1NVRkZJWEVTfQotICAgICAgICAgICAgICAgICBOT19TWVNURU1fRU5WSVJPTk1FTlRfUEFUSAotICAgICAgICAgICAgICAgICBOT19DTUFLRV9TWVNURU1fUEFUSCkKKyAgICAgICAgICAgICAgICAgTkFNRVMgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9OQU1FU30pCisKKyAgICAgIGJyZWFrKCkKKyAgICBlbmR3aGlsZSgpCisKKyAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IikKKworICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfSIpCisgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IGZpbmQgdGhlIGRpcmVjdG9yeSBcIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfVwiIikKKyAgICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUi1OT1RGT1VORCIpCiAgICAgZW5kaWYoKQogCi0gICAgIyBzZWFyY2ggaGVhZGVyIGZpbGUgaW4gc3RhbmRhcmQgbG9jYXRpb25zCi0gICAgZmluZF9wYXRoIChfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIKLSAgICAgICAgICAgICAgIE5BTUVTIFB5dGhvbi5oKQotICBlbmRpZigpCisgICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKKyAgICAgICMgcmV0cmlldmUgdmVyc2lvbiBmcm9tIGhlYWRlciBmaWxlCisgICAgICBfcHl0aG9uX2dldF92ZXJzaW9uIChJTkNMVURFIFBSRUZJWCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DXykKIAotICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IikKLQotICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSIEFORCBOT1QgRVhJU1RTICIke18ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUn0iKQotICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSIFBST1BFUlRZIFZBTFVFICIke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUi1OT1RGT1VORCIpCi0gIGVuZGlmKCkKLQotICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSKQotICAgICMgcmV0cmlldmUgdmVyc2lvbiBmcm9tIGhlYWRlciBmaWxlCi0gICAgX3B5dGhvbl9nZXRfdmVyc2lvbiAoSU5DTFVERSBQUkVGSVggXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ18pCi0KLSAgICAjIHVwZGF0ZSB2ZXJzaW9uaW5nCi0gICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTiBWRVJTSU9OX0VRVUFMICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT059KQotICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRDSCAke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9QQVRDSH0pCisgICAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSkKKyAgICAgICAgaWYgKCIke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9NQUpPUn0uJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUlOT1J9IgorICAgICAgICAgICAgVkVSU0lPTl9FUVVBTCBfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTikKKyAgICAgICAgICAjIHVwZGF0ZSB2ZXJzaW9uaW5nCisgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTiAke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTn0pCisgICAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9QQVRDSCAke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9QQVRDSH0pCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OfSkKKyAgICAgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUiAke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9NQUpPUn0pCisgICAgICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1IgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUlOT1J9KQorICAgICAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX1BBVENIICR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX1BBVENIfSkKKyAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIApAQCAtMjExNSw4MiArMjc2OSwxMjUgQEAKICAgZW5kaWYoKQogCiAgICMgZGVmaW5lIHB1YmxpYyB2YXJpYWJsZXMKLSAgc2V0ICgke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHfSIpCi0gIF9weXRob25fc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMgKCR7X1BZVEhPTl9QUkVGSVh9KQorICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfQVJUSUZBQ1RTKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVR30iKQorICAgIF9weXRob25fc2VsZWN0X2xpYnJhcnlfY29uZmlndXJhdGlvbnMgKCR7X1BZVEhPTl9QUkVGSVh9KQogCi0gIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX1JFTEVBU0UgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFfSIpCi0gIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RFQlVHICIke18ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfREVCVUd9IikKKyAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFICIke18ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRX0iKQorICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RFQlVHICIke18ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfREVCVUd9IikKIAotICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFKQotICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZICIke18ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRX0iKQotICBlbHNlaWYgKF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfREVCVUcpCi0gICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUlkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVR30iKQotICBlbHNlKCkKLSAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWSAiJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZLU5PVEZPVU5EIikKLSAgZW5kaWYoKQotCi0gIF9weXRob25fc2V0X2xpYnJhcnlfZGlycyAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ESVJTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRSBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRykKLSAgaWYgKFVOSVgpCi0gICAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgTUFUQ0hFUyAiJHtDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVh9JCIpCi0gICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ESVJTICR7JHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ESVJTfSkKKyAgICBpZiAoXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUlkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFfSIpCisgICAgZWxzZWlmIChfJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RFQlVHKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUlkgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVR30iKQorICAgIGVsc2UoKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUlkgIiR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWS1OT1RGT1VORCIpCiAgICAgZW5kaWYoKQotICBlbHNlKCkKKworICAgIF9weXRob25fc2V0X2xpYnJhcnlfZGlycyAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ESVJTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ERUJVRykKKyAgICBpZiAoVU5JWCkKKyAgICAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIE1BVENIRVMgIiR7Q01BS0VfU0hBUkVEX0xJQlJBUllfU1VGRklYfSQiKQorICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ESVJTICR7JHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9ESVJTfSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKICAgICAgIF9weXRob25fc2V0X2xpYnJhcnlfZGlycyAoJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RJUlMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFIF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfREVCVUcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUllfUkVMRUFTRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fUlVOVElNRV9MSUJSQVJZX0RFQlVHKQorICAgIGVuZGlmKCkKICAgZW5kaWYoKQogCi0gIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIEFORCBfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVIpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIE9SIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUikKICAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQgT1IgJHtfUFlUSE9OX1BSRUZJWH1fQ29tcGlsZXJfRk9VTkQpCiAgICAgICAjIGRldmVsb3BtZW50IGVudmlyb25tZW50IG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIGludGVycHJldGVyL2NvbXBpbGVyCi0gICAgICBpZiAoJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUn0uJHtfJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0gVkVSU0lPTl9FUVVBTCAkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0KLSAgICAgICAgICBBTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX01JTk9SfSBWRVJTSU9OX0VRVUFMICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9KQotICAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X0ZPVU5EIFRSVUUpCisgICAgICBpZiAoIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9IiBWRVJTSU9OX0VRVUFMICIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7JHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NSU5PUn0iCisgICAgICAgICAgQU5EICIke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9NQUpPUn0uJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUlOT1J9IiBWRVJTSU9OX0VRVUFMICIke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01BSk9SfS4ke18ke19QWVRIT05fUFJFRklYfV9WRVJTSU9OX01JTk9SfSIpCisgICAgICAgIF9weXRob25fc2V0X2RldmVsb3BtZW50X21vZHVsZV9mb3VuZCAoTW9kdWxlKQorICAgICAgICBfcHl0aG9uX3NldF9kZXZlbG9wbWVudF9tb2R1bGVfZm91bmQgKEVtYmVkKQogICAgICAgZW5kaWYoKQogICAgIGVsc2VpZiAoJHtfUFlUSE9OX1BSRUZJWH1fVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0VRVUFMIF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SCi0gICAgICAgICAgICBBTkQgJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DX1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX01JTk9SfSBWRVJTSU9OX0VRVUFMICR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9KQotICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9GT1VORCBUUlVFKQorICAgICAgICBBTkQgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19WRVJTSU9OX01BSk9SfS4ke18ke19QWVRIT05fUFJFRklYfV9JTkNfVkVSU0lPTl9NSU5PUn0iIFZFUlNJT05fRVFVQUwgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9LiR7XyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUlOT1J9IikKKyAgICAgIF9weXRob25fc2V0X2RldmVsb3BtZW50X21vZHVsZV9mb3VuZCAoTW9kdWxlKQorICAgICAgX3B5dGhvbl9zZXRfZGV2ZWxvcG1lbnRfbW9kdWxlX2ZvdW5kIChFbWJlZCkKICAgICBlbmRpZigpCiAgICAgaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQUJJIEFORAogICAgICAgICAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9BQkkgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MKICAgICAgICAgICBPUiBOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X0lOQ19BQkkgSU5fTElTVCBfJHtfUFlUSE9OX1BSRUZJWH1fQUJJRkxBR1MpKQotICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudF9GT1VORCBGQUxTRSkKKyAgICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EIEZBTFNFKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCBGQUxTRSkKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKIAotICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfRk9VTkQpCi0gICAgIyBjb21wdXRlIGFuZCBzYXZlIGRldmVsb3BtZW50IHNpZ25hdHVyZQotICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fREVWRUxPUE1FTlRfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IikKLSAgICBzZXQgKF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgIiR7X18ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkV9IiBDQUNIRSBJTlRFUk5BTCAiIikKLSAgZWxzZSgpCi0gICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUgQ0FDSEUpCisgIGlmICgoICR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORAorICAgICAgICBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgICAgICBPUiAoTk9UICJEZXZlbG9wbWVudC5Nb2R1bGUiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTCisgICAgICAgIEFORCAke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkKKyAgICAgIE9SIChOT1QgIkRldmVsb3BtZW50LkVtYmVkIiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUworICAgICAgICBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EKSkKKyAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X1JFQVNPTl9GQUlMVVJFKQogICBlbmRpZigpCiAKKyAgaWYgKCJEZXZlbG9wbWVudCIgSU5fTElTVCAke19QWVRIT05fUFJFRklYfV9GSU5EX0NPTVBPTkVOVFMKKyAgICAgIEFORCAke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQKKyAgICAgIEFORCAke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkKKyAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X0ZPVU5EIFRSVUUpCisgIGVuZGlmKCkKKworICBpZiAoKCR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORAorICAgICAgT1IgJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgICAgQU5EIEVYSVNUUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9L1B5UHkuaCIpCisgICMgcmV0cmlldmUgUHlQeSB2ZXJzaW9uCisgIGZpbGUgKFNUUklOR1MgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSfS9wYXRjaGxldmVsLmgiICR7X1BZVEhPTl9QUkVGSVh9X1B5UHlfVkVSU0lPTgorICAgICAgICAgICAgICAgIFJFR0VYICJeI2RlZmluZVsgXHRdK1BZUFlfVkVSU0lPTlsgXHRdK1wiW15cIl0rXCIiKQorICBzdHJpbmcgKFJFR0VYIFJFUExBQ0UgIl4jZGVmaW5lWyBcdF0rUFlQWV9WRVJTSU9OWyBcdF0rXCIoW15cIl0rKVwiLioiICJcXDEiCisgICAgICAgICAgICAgICAgJHtfUFlUSE9OX1BSRUZJWH1fUHlQeV9WRVJTSU9OICIkeyR7X1BZVEhPTl9QUkVGSVh9X1B5UHlfVkVSU0lPTn0iKQorICBlbmRpZigpCisKKyAgaWYgKF8ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAiMyIKKyAgICAgIEFORCBOT1QgREVGSU5FRCAke19QWVRIT05fUFJFRklYfV9TT0FCSSkKKyAgICBfcHl0aG9uX2dldF9jb25maWdfdmFyICgke19QWVRIT05fUFJFRklYfV9TT0FCSSBTT0FCSSkKKyAgZW5kaWYoKQorCisgIF9weXRob25fY29tcHV0ZV9kZXZlbG9wbWVudF9zaWduYXR1cmUgKE1vZHVsZSkKKyAgX3B5dGhvbl9jb21wdXRlX2RldmVsb3BtZW50X3NpZ25hdHVyZSAoRW1iZWQpCisKICAgIyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmaW5kIGxpYnJhcnkgb3JkZXJpbmcKICAgaWYgKERFRklORUQgXyR7X1BZVEhPTl9QUkVGSVh9X0NNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUykKICAgICBzZXQgKENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAke18ke19QWVRIT05fUFJFRklYfV9DTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVN9KQogICBlbmRpZigpCiAKKyAgaWYgKCR7X1BZVEhPTl9QUkVGSVh9X0FSVElGQUNUU19JTlRFUkFDVElWRSkKKyAgICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfQVJUSUZBQ1RTKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9MSUJSQVJZICIke18ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0V9IiBDQUNIRSBGSUxFUEFUSCAiJHtfUFlUSE9OX1BSRUZJWH0gTGlicmFyeSIpCisgICAgZW5kaWYoKQorICAgIGlmICgiSU5DTFVERV9ESVIiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfQVJUSUZBQ1RTKQorICAgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5DTFVERV9ESVJ9IiBDQUNIRSBGSUxFUEFUSCAiJHtfUFlUSE9OX1BSRUZJWH0gSW5jbHVkZSBEaXJlY3RvcnkiKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCiAgIF9weXRob25fbWFya19hc19pbnRlcm5hbCAoXyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9ERUJVRwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9NT0RVTEVfU0lHTkFUVVJFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UX0VNQkVEX1NJR05BVFVSRSkKIGVuZGlmKCkKIAoraWYgKCR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfUkVRVUlSRURfTnVtUHkpCisgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVRVUlSRURfVkFSUyAke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUlMpCitlbmRpZigpCiBpZiAoIk51bVB5IiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUyBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fSW50ZXJwcmV0ZXJfRk9VTkQpCiAgIGxpc3QgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fQ0FDSEVEX1ZBUlMgXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSKQotICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fRklORF9SRVFVSVJFRF9OdW1QeSkKLSAgICBsaXN0IChBUFBFTkQgXyR7X1BZVEhPTl9QUkVGSVh9X1JFUVVJUkVEX1ZBUlMgJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVJTKQotICBlbmRpZigpCiAKICAgaWYgKERFRklORUQgJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIKICAgICAgIEFORCBJU19BQlNPTFVURSAiJHske19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUn0iKQogICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSICIkeyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSfSIgQ0FDSEUgSU5URVJOQUwgIiIpCiAgIGVsc2VpZiAoREVGSU5FRCBfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIpCiAgICAgIyBjb21wdXRlIG51bXB5IHNpZ25hdHVyZS4gRGVwZW5kcyBvbiBpbnRlcnByZXRlciBhbmQgZGV2ZWxvcG1lbnQgc2lnbmF0dXJlcwotICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fTlVNUFlfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UX1NJR05BVFVSRX06JHtfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVJ9IikKKyAgICBzdHJpbmcgKE1ENSBfXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFfToke18ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9NT0RVTEVfU0lHTkFUVVJFfToke18ke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUn0iKQogICAgIGlmIChOT1QgX18ke19QWVRIT05fUFJFRklYfV9OVU1QWV9TSUdOQVRVUkUgU1RSRVFVQUwgXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRQogICAgICAgICBPUiBOT1QgRVhJU1RTICIke18ke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUn0iKQogICAgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUiBDQUNIRSkKQEAgLTIxOTksMTMgKzI4OTYsMTIgQEAKICAgZW5kaWYoKQogCiAgIGlmIChOT1QgXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSKQotICAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICAgIENPTU1BTkQgIiR7JHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCi0gICAgICAgICAgICAgICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uXG50cnk6IGltcG9ydCBudW1weTsgcHJpbnQobnVtcHkuZ2V0X2luY2x1ZGUoKSwgZW5kPScnKVxuZXhjZXB0OnBhc3NcbiIKLSAgICAgIFJFU1VMVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fUkVTVUxUCi0gICAgICBPVVRQVVRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X1BBVEgKLSAgICAgIEVSUk9SX1FVSUVUCi0gICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAkeyR7X1BZVEhPTl9QUkVGSVh9X0lOVEVSUFJFVEVSX0xBVU5DSEVSfSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXNcbnRyeTogaW1wb3J0IG51bXB5OyBzeXMuc3Rkb3V0LndyaXRlKG51bXB5LmdldF9pbmNsdWRlKCkpXG5leGNlcHQ6cGFzc1xuIgorICAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X1JFU1VMVAorICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgXyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X1BBVEgKKyAgICAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKKyAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCiAKICAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQpCiAgICAgICBmaW5kX3BhdGggKF8ke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUgpAQCAtMjIxOCwzNSArMjkxNCw0MSBAQAogICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSUyAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVJ9IikKIAogICBpZihfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIgQU5EIE5PVCBFWElTVFMgIiR7XyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSfSIpCisgICAgc2V0IChfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfUkVBU09OX0ZBSUxVUkUgIkNhbm5vdCBmaW5kIHRoZSBkaXJlY3RvcnkgXCIke18ke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUn1cIiIpCiAgICAgc2V0X3Byb3BlcnR5IChDQUNIRSBfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIgUFJPUEVSVFkgVkFMVUUgIiR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0lOQ0xVREVfRElSLU5PVEZPVU5EIikKICAgZW5kaWYoKQogCiAgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIpCi0gICAgZXhlY3V0ZV9wcm9jZXNzICgKLSAgICAgICAgICAgIENPTU1BTkQgIiR7JHtfUFlUSE9OX1BSRUZJWH1fRVhFQ1VUQUJMRX0iIC1jCi0gICAgICAgICAgICAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvblxudHJ5OiBpbXBvcnQgbnVtcHk7IHByaW50KG51bXB5Ll9fdmVyc2lvbl9fLCBlbmQ9JycpXG5leGNlcHQ6cGFzc1xuIgotICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQKLSAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfVkVSU0lPTikKKyAgICBleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgJHske19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9MQVVOQ0hFUn0gIiR7XyR7X1BZVEhPTl9QUkVGSVh9X0VYRUNVVEFCTEV9IiAtYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5c1xudHJ5OiBpbXBvcnQgbnVtcHk7IHN5cy5zdGRvdXQud3JpdGUobnVtcHkuX192ZXJzaW9uX18pXG5leGNlcHQ6cGFzc1xuIgorICAgICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQKKyAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfVkVSU0lPTikKICAgICBpZiAoTk9UIF8ke19QWVRIT05fUFJFRklYfV9SRVNVTFQpCiAgICAgICBzZXQgKCR7X1BZVEhPTl9QUkVGSVh9X051bVB5X1ZFUlNJT04gIiR7XyR7X1BZVEhPTl9QUkVGSVh9X051bVB5X1ZFUlNJT059IikKICAgICBlbHNlKCkKICAgICAgIHVuc2V0ICgke19QWVRIT05fUFJFRklYfV9OdW1QeV9WRVJTSU9OKQogICAgIGVuZGlmKCkKIAotICAgICMgZmluYWwgc3RlcDogc2V0IE51bVB5IGZvdW5kZWQgb25seSBpZiBEZXZlbG9wbWVudCBjb21wb25lbnQgaXMgZm91bmRlZCBhcyB3ZWxsCi0gICAgc2V0KCR7X1BZVEhPTl9QUkVGSVh9X051bVB5X0ZPVU5EICR7JHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnRfRk9VTkR9KQorICAgICMgZmluYWwgc3RlcDogc2V0IE51bVB5IGZvdW5kZWQgb25seSBpZiBEZXZlbG9wbWVudC5Nb2R1bGUgY29tcG9uZW50IGlzIGZvdW5kZWQgYXMgd2VsbAorICAgIHNldCgke19QWVRIT05fUFJFRklYfV9OdW1QeV9GT1VORCAkeyR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORH0pCiAgIGVsc2UoKQogICAgIHNldCAoJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfRk9VTkQgRkFMU0UpCiAgIGVuZGlmKCkKIAogICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfRk9VTkQpCisgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9OdW1QeV9SRUFTT05fRkFJTFVSRSkKKwogICAgICMgY29tcHV0ZSBhbmQgc2F2ZSBudW1weSBzaWduYXR1cmUKLSAgICBzdHJpbmcgKE1ENSBfXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRSAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fSU5URVJQUkVURVJfU0lHTkFUVVJFfToke18ke19QWVRIT05fUFJFRklYfV9ERVZFTE9QTUVOVF9TSUdOQVRVUkV9OiR7JHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlJTkNMVURFX0RJUn0iKQorICAgIHN0cmluZyAoTUQ1IF9fJHtfUFlUSE9OX1BSRUZJWH1fTlVNUFlfU0lHTkFUVVJFICIke18ke19QWVRIT05fUFJFRklYfV9JTlRFUlBSRVRFUl9TSUdOQVRVUkV9OiR7XyR7X1BZVEhPTl9QUkVGSVh9X0RFVkVMT1BNRU5UX01PRFVMRV9TSUdOQVRVUkV9OiR7JHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlJTkNMVURFX0RJUn0iKQogICAgIHNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRSAiJHtfXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRX0iIENBQ0hFIElOVEVSTkFMICIiKQogICBlbHNlKCkKICAgICB1bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X05VTVBZX1NJR05BVFVSRSBDQUNIRSkKICAgZW5kaWYoKQogCisgIGlmICgke19QWVRIT05fUFJFRklYfV9BUlRJRkFDVFNfSU5URVJBQ1RJVkUpCisgICAgc2V0ICgke19QWVRIT05fUFJFRklYfV9OdW1QeV9JTkNMVURFX0RJUiAiJHtfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVJ9IiBDQUNIRSBGSUxFUEFUSCAiJHtfUFlUSE9OX1BSRUZJWH0gTnVtUHkgSW5jbHVkZSBEaXJlY3RvcnkiKQorICBlbmRpZigpCisKICAgX3B5dGhvbl9tYXJrX2FzX2ludGVybmFsIChfJHtfUFlUSE9OX1BSRUZJWH1fTnVtUHlfSU5DTFVERV9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfJHtfUFlUSE9OX1BSRUZJWH1fTlVNUFlfU0lHTkFUVVJFKQogZW5kaWYoKQpAQCAtMjI1NywxMSArMjk1OSwyMCBAQAogICBfcHl0aG9uX2Rpc3BsYXlfZmFpbHVyZSAoIkNvdWxkIE5PVCBmaW5kICR7X1BZVEhPTl9QUkVGSVh9OiBGb3VuZCB1bnN1aXRhYmxlIG1ham9yIHZlcnNpb24gXCIkeyR7X1BZVEhPTl9QUkVGSVh9X1ZFUlNJT05fTUFKT1J9XCIsIGJ1dCByZXF1aXJlZCBtYWpvciB2ZXJzaW9uIGlzIGV4YWN0IHZlcnNpb24gXCIke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WRVJTSU9OX01BSk9SfVwiIikKIGVuZGlmKCkKIAordW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV9SRUFTT05fRkFJTFVSRSkKK2ZvcmVhY2ggKF8ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlQgSU4gSVRFTVMgSW50ZXJwcmV0ZXIgQ29tcGlsZXIgRGV2ZWxvcG1lbnQgTnVtUHkpCisgIGlmIChfJHtfUFlUSE9OX1BSRUZJWH1fJHtfJHtfUFlUSE9OX1BSRUZJWH1fQ09NUE9ORU5UfV9SRUFTT05fRkFJTFVSRSkKKyAgICBzdHJpbmcgKEFQUEVORCBfJHtfUFlUSE9OX1BSRUZJWH1fUkVBU09OX0ZBSUxVUkUgIlxuICAgICAgICAke18ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlR9OiAke18ke19QWVRIT05fUFJFRklYfV8ke18ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlR9X1JFQVNPTl9GQUlMVVJFfSIpCisgICAgdW5zZXQgKF8ke19QWVRIT05fUFJFRklYfV8ke18ke19QWVRIT05fUFJFRklYfV9DT01QT05FTlR9X1JFQVNPTl9GQUlMVVJFKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKwogaW5jbHVkZSAoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS8uLi9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKIGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyAoJHtfUFlUSE9OX1BSRUZJWH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRURfVkFSUyAke18ke19QWVRIT05fUFJFRklYfV9SRVFVSVJFRF9WQVJTfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX1ZBUiAke19QWVRIT05fUFJFRklYfV9WRVJTSU9OCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9DT01QT05FTlRTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVfQ09NUE9ORU5UUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFTT05fRkFJTFVSRV9NRVNTQUdFICIke18ke19QWVRIT05fUFJFRklYfV9SRUFTT05fRkFJTFVSRX0iKQogCiAjIENyZWF0ZSBpbXBvcnRlZCB0YXJnZXRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zCiBpZihfJHtfUFlUSE9OX1BSRUZJWH1fQ01BS0VfUk9MRSBTVFJFUVVBTCAiUFJPSkVDVCIpCkBAIC0yMjgxLDggKzI5OTIsMTAgQEAKICAgICAgICAgICAgICAgICAgIFBST1BFUlRZIElNUE9SVEVEX0xPQ0FUSU9OICIkeyR7X1BZVEhPTl9QUkVGSVh9X0NPTVBJTEVSfSIpCiAgIGVuZGlmKCkKIAotICBpZiAoIkRldmVsb3BtZW50IiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUwotICAgICAgQU5EICR7X1BZVEhPTl9QUkVGSVh9X0RldmVsb3BtZW50X0ZPVU5EKQorICBpZiAoKCJEZXZlbG9wbWVudC5Nb2R1bGUiIElOX0xJU1QgJHtfUFlUSE9OX1BSRUZJWH1fRklORF9DT01QT05FTlRTCisgICAgICAgIEFORCAke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgICAgICBPUiAoIkRldmVsb3BtZW50LkVtYmVkIiBJTl9MSVNUICR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfQ09NUE9ORU5UUworICAgICAgICBBTkQgJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpKQogCiAgICAgbWFjcm8gKF9fUFlUSE9OX0lNUE9SVF9MSUJSQVJZIF9fbmFtZSkKICAgICAgIGlmICgke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX1JFTEVBU0UgTUFUQ0hFUyAiJHtDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVh9JCIKQEAgLTIzMTQsOCArMzAyNyw4IEBACiAgICAgICAgIGVsc2UoKQogICAgICAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcyAoJHtfX25hbWV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIElNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xBTkdVQUdFUyAiQyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JURURfSU1QTElCICIkeyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUll9IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHske19QWVRIT05fUFJFRklYfV9SVU5USU1FX0xJQlJBUll9IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JURURfSU1QTElCICIkeyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUklFU30iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIkeyR7X1BZVEhPTl9QUkVGSVh9X1JVTlRJTUVfTElCUkFSWV9SRUxFQVNFfSIpCiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVsc2UoKQogICAgICAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fTElCUkFSWV9SRUxFQVNFIEFORCAke19QWVRIT05fUFJFRklYfV9MSUJSQVJZX0RFQlVHKQpAQCAtMjMyOSw3ICszMDQyLDcgQEAKICAgICAgICAgZWxzZSgpCiAgICAgICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzICgke19fbmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTEFOR1VBR0VTICJDIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHske19QWVRIT05fUFJFRklYfV9MSUJSQVJZfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIkeyR7X1BZVEhPTl9QUkVGSVh9X0xJQlJBUllfUkVMRUFTRX0iKQogICAgICAgICBlbmRpZigpCiAgICAgICBlbmRpZigpCiAKQEAgLTIzNDMsMzEgKzMwNTYsMzUgQEAKICAgICAgIGVuZGlmKCkKICAgICBlbmRtYWNybygpCiAKLSAgICBfX3B5dGhvbl9pbXBvcnRfbGlicmFyeSAoJHtfUFlUSE9OX1BSRUZJWH06OlB5dGhvbikKKyAgICBpZiAoJHtfUFlUSE9OX1BSRUZJWH1fRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgICAgICBfX3B5dGhvbl9pbXBvcnRfbGlicmFyeSAoJHtfUFlUSE9OX1BSRUZJWH06OlB5dGhvbikKKyAgICBlbmRpZigpCiAKLSAgICBpZiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiXihXaW5kb3dzLip8Q1lHV0lOfE1TWVMpJCIpCi0gICAgICAjIE9uIFdpbmRvd3MvQ1lHV0lOL01TWVMsIFB5dGhvbjo6TW9kdWxlIGlzIHRoZSBzYW1lIGFzIFB5dGhvbjo6UHl0aG9uCi0gICAgICAjIGJ1dCBBTElBUyBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBpbXBvcnRlZCBsaWJyYXJ5IGlzIG5vdCBHTE9CQUwuCi0gICAgICBfX3B5dGhvbl9pbXBvcnRfbGlicmFyeSAoJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZSkKLSAgICBlbHNlKCkKLSAgICAgIGlmIChOT1QgVEFSR0VUICR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUgKQotICAgICAgICBhZGRfbGlicmFyeSAoJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZSBJTlRFUkZBQ0UgSU1QT1JURUQpCi0gICAgICBlbmRpZigpCi0gICAgICBzZXRfcHJvcGVydHkgKFRBUkdFVCAke19QWVRIT05fUFJFRklYfTo6TW9kdWxlCi0gICAgICAgICAgICAgICAgICAgIFBST1BFUlRZIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIkeyR7X1BZVEhPTl9QUkVGSVh9X0lOQ0xVREVfRElSU30iKQorICAgIGlmICgke19QWVRIT05fUFJFRklYfV9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgICAgICBpZiAoIkxJQlJBUlkiIElOX0xJU1QgXyR7X1BZVEhPTl9QUkVGSVh9X0ZJTkRfREVWRUxPUE1FTlRfTU9EVUxFX0FSVElGQUNUUykKKyAgICAgICAgIyBPbiBXaW5kb3dzL0NZR1dJTi9NU1lTLCBQeXRob246Ok1vZHVsZSBpcyB0aGUgc2FtZSBhcyBQeXRob246OlB5dGhvbgorICAgICAgICAjIGJ1dCBBTElBUyBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBpbXBvcnRlZCBsaWJyYXJ5IGlzIG5vdCBHTE9CQUwuCisgICAgICAgIF9fcHl0aG9uX2ltcG9ydF9saWJyYXJ5ICgke19QWVRIT05fUFJFRklYfTo6TW9kdWxlKQorICAgICAgZWxzZSgpCisgICAgICAgIGlmIChOT1QgVEFSR0VUICR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUpCisgICAgICAgICAgYWRkX2xpYnJhcnkgKCR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUgSU5URVJGQUNFIElNUE9SVEVEKQorICAgICAgICBlbmRpZigpCisgICAgICAgIHNldF9wcm9wZXJ0eSAoVEFSR0VUICR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUWSBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHske19QWVRIT05fUFJFRklYfV9JTkNMVURFX0RJUlN9IikKIAotICAgICAgIyBXaGVuIGF2YWlsYWJsZSwgZW5mb3JjZSBzaGFyZWQgbGlicmFyeSBnZW5lcmF0aW9uIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMKLSAgICAgIGlmIChBUFBMRSkKLSAgICAgICAgc2V0X3Byb3BlcnR5IChUQVJHRVQgJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZQotICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRZIElOVEVSRkFDRV9MSU5LX09QVElPTlMgIkxJTktFUjotdW5kZWZpbmVkLGR5bmFtaWNfbG9va3VwIikKLSAgICAgIGVuZGlmKCkKLSAgICAgIGlmIChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiU3VuT1MiKQotICAgICAgICBzZXRfcHJvcGVydHkgKFRBUkdFVCAke19QWVRIT05fUFJFRklYfTo6TW9kdWxlCi0gICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVFkgSU5URVJGQUNFX0xJTktfT1BUSU9OUyAiTElOS0VSOi16LG5vZGVmcyIpCi0gICAgICBlbmRpZigpCi0gICAgICBpZiAoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkFJWCIpCi0gICAgICAgIHNldF9wcm9wZXJ0eSAoVEFSR0VUICR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUKLSAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUWSBJTlRFUkZBQ0VfTElOS19PUFRJT05TICJMSU5LRVI6LWIsZXJvayIpCisgICAgICAgICMgV2hlbiBhdmFpbGFibGUsIGVuZm9yY2Ugc2hhcmVkIGxpYnJhcnkgZ2VuZXJhdGlvbiB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzCisgICAgICAgIGlmIChBUFBMRSkKKyAgICAgICAgICBzZXRfcHJvcGVydHkgKFRBUkdFVCAke19QWVRIT05fUFJFRklYfTo6TW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUWSBJTlRFUkZBQ0VfTElOS19PUFRJT05TICJMSU5LRVI6LXVuZGVmaW5lZCxkeW5hbWljX2xvb2t1cCIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgaWYgKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJTdW5PUyIpCisgICAgICAgICAgc2V0X3Byb3BlcnR5IChUQVJHRVQgJHtfUFlUSE9OX1BSRUZJWH06Ok1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVFkgSU5URVJGQUNFX0xJTktfT1BUSU9OUyAiTElOS0VSOi16LG5vZGVmcyIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgaWYgKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJBSVgiKQorICAgICAgICAgIHNldF9wcm9wZXJ0eSAoVEFSR0VUICR7X1BZVEhPTl9QUkVGSVh9OjpNb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRZIElOVEVSRkFDRV9MSU5LX09QVElPTlMgIkxJTktFUjotYixlcm9rIikKKyAgICAgICAgZW5kaWYoKQogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKIApAQCAtMjM3NiwxNiArMzA5MywzMSBAQAogICAgICMgSXQgaXMgdXNlZCB0byBidWlsZCBtb2R1bGVzIGZvciBweXRob24uCiAgICAgIwogICAgIGZ1bmN0aW9uIChfXyR7X1BZVEhPTl9QUkVGSVh9X0FERF9MSUJSQVJZIHByZWZpeCBuYW1lKQotICAgICAgY21ha2VfcGFyc2VfYXJndW1lbnRzIChQQVJTRV9BUkdWIDIgUFlUSE9OX0FERF9MSUJSQVJZCi0gICAgICAgICJTVEFUSUM7U0hBUkVEO01PRFVMRSIgIiIgIiIpCisgICAgICBjbWFrZV9wYXJzZV9hcmd1bWVudHMgKFBBUlNFX0FSR1YgMiBQWVRIT05fQUREX0xJQlJBUlkgIlNUQVRJQztTSEFSRUQ7TU9EVUxFO1dJVEhfU09BQkkiICIiICIiKQogCi0gICAgICB1bnNldCAodHlwZSkKLSAgICAgIGlmIChOT1QgKFBZVEhPTl9BRERfTElCUkFSWV9TVEFUSUMKLSAgICAgICAgICAgIE9SIFBZVEhPTl9BRERfTElCUkFSWV9TSEFSRUQKLSAgICAgICAgICAgIE9SIFBZVEhPTl9BRERfTElCUkFSWV9NT0RVTEUpKQorICAgICAgaWYgKHByZWZpeCBTVFJFUVVBTCAiUHl0aG9uMiIgQU5EIFBZVEhPTl9BRERfTElCUkFSWV9XSVRIX1NPQUJJKQorICAgICAgICBtZXNzYWdlIChBVVRIT1JfV0FSTklORyAiRmluZFB5dGhvbjI6IE9wdGlvbiBgV0lUSF9TT0FCSWAgaXMgbm90IHN1cHBvcnRlZCBmb3IgUHl0aG9uMiBhbmQgd2lsbCBiZSBpZ25vcmVkLiIpCisgICAgICAgIHVuc2V0IChQWVRIT05fQUREX0xJQlJBUllfV0lUSF9TT0FCSSkKKyAgICAgIGVuZGlmKCkKKworICAgICAgaWYgKFBZVEhPTl9BRERfTElCUkFSWV9TVEFUSUMpCisgICAgICAgIHNldCAodHlwZSBTVEFUSUMpCisgICAgICBlbHNlaWYgKFBZVEhPTl9BRERfTElCUkFSWV9TSEFSRUQpCisgICAgICAgIHNldCAodHlwZSBTSEFSRUQpCisgICAgICBlbHNlKCkKICAgICAgICAgc2V0ICh0eXBlIE1PRFVMRSkKICAgICAgIGVuZGlmKCkKLSAgICAgIGFkZF9saWJyYXJ5ICgke25hbWV9ICR7dHlwZX0gJHtBUkdOfSkKKworICAgICAgaWYgKHR5cGUgU1RSRVFVQUwgIk1PRFVMRSIgQU5EIE5PVCBUQVJHRVQgJHtwcmVmaXh9OjpNb2R1bGUpCisgICAgICAgIG1lc3NhZ2UgKFNFTkRfRVJST1IgIiR7cHJlZml4fV9BRERfTElCUkFSWTogZGVwZW5kZW50IHRhcmdldCAnJHtwcmVmaXh9OjpNb2R1bGUnIGlzIG5vdCBkZWZpbmVkLlxuICAgRGlkIHlvdSBtaXNzIHRvIHJlcXVlc3QgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5Nb2R1bGUnPyIpCisgICAgICAgIHJldHVybigpCisgICAgICBlbmRpZigpCisgICAgICBpZiAoTk9UIHR5cGUgU1RSRVFVQUwgIk1PRFVMRSIgQU5EIE5PVCBUQVJHRVQgJHtwcmVmaXh9OjpQeXRob24pCisgICAgICAgIG1lc3NhZ2UgKFNFTkRfRVJST1IgIiR7cHJlZml4fV9BRERfTElCUkFSWTogZGVwZW5kZW50IHRhcmdldCAnJHtwcmVmaXh9OjpQeXRob24nIGlzIG5vdCBkZWZpbmVkLlxuICAgRGlkIHlvdSBtaXNzIHRvIHJlcXVlc3QgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5FbWJlZCc/IikKKyAgICAgICAgcmV0dXJuKCkKKyAgICAgIGVuZGlmKCkKKworICAgICAgYWRkX2xpYnJhcnkgKCR7bmFtZX0gJHt0eXBlfSAke1BZVEhPTl9BRERfTElCUkFSWV9VTlBBUlNFRF9BUkdVTUVOVFN9KQogCiAgICAgICBnZXRfcHJvcGVydHkgKHR5cGUgVEFSR0VUICR7bmFtZX0gUFJPUEVSVFkgVFlQRSkKIApAQCAtMjM5Niw3ICszMTI4LDE4IEBACiAgICAgICAgIGlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJXaW5kb3dzIikKICAgICAgICAgICBzZXRfcHJvcGVydHkgKFRBUkdFVCAke25hbWV9IFBST1BFUlRZIFNVRkZJWCAiLnB5ZCIpCiAgICAgICAgIGVuZGlmKCkKKworICAgICAgICBpZiAoUFlUSE9OX0FERF9MSUJSQVJZX1dJVEhfU09BQkkgQU5EICR7cHJlZml4fV9TT0FCSSkKKyAgICAgICAgICBnZXRfcHJvcGVydHkgKHN1ZmZpeCBUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBTVUZGSVgpCisgICAgICAgICAgaWYgKE5PVCBzdWZmaXgpCisgICAgICAgICAgICBzZXQgKHN1ZmZpeCAiJHtDTUFLRV9TSEFSRURfTU9EVUxFX1NVRkZJWH0iKQorICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBzZXRfcHJvcGVydHkgKFRBUkdFVCAke25hbWV9IFBST1BFUlRZIFNVRkZJWCAiLiR7JHtwcmVmaXh9X1NPQUJJfSR7c3VmZml4fSIpCisgICAgICAgIGVuZGlmKCkKICAgICAgIGVsc2UoKQorICAgICAgICBpZiAoUFlUSE9OX0FERF9MSUJSQVJZX1dJVEhfU09BQkkpCisgICAgICAgICAgbWVzc2FnZSAoQVVUSE9SX1dBUk5JTkcgIkZpbmQke3ByZWZpeH06IE9wdGlvbiBgV0lUSF9TT0FCSWAgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGBNT0RVTEVgIGxpYnJhcnkgdHlwZS4iKQorICAgICAgICBlbmRpZigpCiAgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyAoJHtuYW1lfSBQUklWQVRFICR7cHJlZml4fTo6UHl0aG9uKQogICAgICAgZW5kaWYoKQogICAgIGVuZGZ1bmN0aW9uKCkKQEAgLTI0MjcsNSArMzE3MCwzIEBACiBlbHNlKCkKICAgdW5zZXQgKENNQUtFX0ZJTkRfRlJBTUVXT1JLKQogZW5kaWYoKQotCi11bnNldCAoXyR7X1BZVEhPTl9QUkVGSVh9X0NPTkZJRyBDQUNIRSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFB5dGhvbjIuY21ha2UgYi9Nb2R1bGVzL0ZpbmRQeXRob24yLmNtYWtlCmluZGV4IDNjYzdkNTYuLmY1YWQ0NTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFB5dGhvbjIuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kUHl0aG9uMi5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRQeXRob24yCiAtLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEyCisKIEZpbmQgUHl0aG9uIDIgaW50ZXJwcmV0ZXIsIGNvbXBpbGVyIGFuZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCAoaW5jbHVkZQogZGlyZWN0b3JpZXMgYW5kIGxpYnJhcmllcykuCiAKQEAgLTEzLDEzICsxNSwyNCBAQAogKiBgYEludGVycHJldGVyYGA6IHNlYXJjaCBmb3IgUHl0aG9uIDIgaW50ZXJwcmV0ZXIKICogYGBDb21waWxlcmBgOiBzZWFyY2ggZm9yIFB5dGhvbiAyIGNvbXBpbGVyLiBPbmx5IG9mZmVyZWQgYnkgSXJvblB5dGhvbi4KICogYGBEZXZlbG9wbWVudGBgOiBzZWFyY2ggZm9yIGRldmVsb3BtZW50IGFydGlmYWN0cyAoaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKLSAgbGlicmFyaWVzKQorICBsaWJyYXJpZXMpLiBUaGlzIGNvbXBvbmVudCBpbmNsdWRlcyB0d28gc3ViLWNvbXBvbmVudHMgd2hpY2ggY2FuIGJlIHNwZWNpZmllZAorICBpbmRlcGVuZGVudGx5OgorCisgICogYGBEZXZlbG9wbWVudC5Nb2R1bGVgYDogc2VhcmNoIGZvciBhcnRpZmFjdHMgZm9yIFB5dGhvbiAyIG1vZHVsZQorICAgIGRldmVsb3BtZW50cy4KKyAgKiBgYERldmVsb3BtZW50LkVtYmVkYGA6IHNlYXJjaCBmb3IgYXJ0aWZhY3RzIGZvciBQeXRob24gMiBlbWJlZGRpbmcKKyAgICBkZXZlbG9wbWVudHMuCisKICogYGBOdW1QeWBgOiBzZWFyY2ggZm9yIE51bVB5IGluY2x1ZGUgZGlyZWN0b3JpZXMuCiAKIElmIG5vIGBgQ09NUE9ORU5UU2BgIGFyZSBzcGVjaWZpZWQsIGBgSW50ZXJwcmV0ZXJgYCBpcyBhc3N1bWVkLgogCitJZiBjb21wb25lbnQgYGBEZXZlbG9wbWVudGBgIGlzIHNwZWNpZmllZCwgaXQgaW1wbGllcyBzdWItY29tcG9uZW50cworYGBEZXZlbG9wbWVudC5Nb2R1bGVgYCBhbmQgYGBEZXZlbG9wbWVudC5FbWJlZGBgLgorCiBUbyBlbnN1cmUgY29uc2lzdGVudCB2ZXJzaW9ucyBiZXR3ZWVuIGNvbXBvbmVudHMgYGBJbnRlcnByZXRlcmBgLCBgYENvbXBpbGVyYGAsCi1gYERldmVsb3BtZW50YGAgYW5kIGBgTnVtUHlgYCwgc3BlY2lmeSBhbGwgY29tcG9uZW50cyBhdCB0aGUgc2FtZSB0aW1lOjoKK2BgRGV2ZWxvcG1lbnRgYCAob3Igb25lIG9mIGl0cyBzdWItY29tcG9uZW50cykgYW5kIGBgTnVtUHlgYCwgc3BlY2lmeSBhbGwKK2NvbXBvbmVudHMgYXQgdGhlIHNhbWUgdGltZTo6CiAKICAgZmluZF9wYWNrYWdlIChQeXRob24yIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCiAKQEAgLTMxLDEwICs0NCwxMSBAQAogCiAuLiBub3RlOjoKIAotICBJZiBjb21wb25lbnRzIGBgSW50ZXJwcmV0ZXJgYCBhbmQgYGBEZXZlbG9wbWVudGBgIGFyZSBib3RoIHNwZWNpZmllZCwgdGhpcwotICBtb2R1bGUgc2VhcmNoIG9ubHkgZm9yIGludGVycHJldGVyIHdpdGggc2FtZSBwbGF0Zm9ybSBhcmNoaXRlY3R1cmUgYXMgdGhlIG9uZQotICBkZWZpbmVkIGJ5IGBgQ01ha2VgYCBjb25maWd1cmF0aW9uLiBUaGlzIGNvbnRyYWludCBkb2VzIG5vdCBhcHBseSBpZiBvbmx5Ci0gIGBgSW50ZXJwcmV0ZXJgYCBjb21wb25lbnQgaXMgc3BlY2lmaWVkLgorICBJZiBjb21wb25lbnRzIGBgSW50ZXJwcmV0ZXJgYCBhbmQgYGBEZXZlbG9wbWVudGBgIChvciBvbmUgb2YgaXRzCisgIHN1Yi1jb21wb25lbnRzKSBhcmUgYm90aCBzcGVjaWZpZWQsIHRoaXMgbW9kdWxlIHNlYXJjaCBvbmx5IGZvciBpbnRlcnByZXRlcgorICB3aXRoIHNhbWUgcGxhdGZvcm0gYXJjaGl0ZWN0dXJlIGFzIHRoZSBvbmUgZGVmaW5lZCBieSBgYENNYWtlYGAKKyAgY29uZmlndXJhdGlvbi4gVGhpcyBjb25zdHJhaW50IGRvZXMgbm90IGFwcGx5IGlmIG9ubHkgYGBJbnRlcnByZXRlcmBgCisgIGNvbXBvbmVudCBpcyBzcGVjaWZpZWQuCiAKIEltcG9ydGVkIFRhcmdldHMKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTQ2LDEyICs2MCwxMiBAQAogICBQeXRob24gMiBpbnRlcnByZXRlci4gVGFyZ2V0IGRlZmluZWQgaWYgY29tcG9uZW50IGBgSW50ZXJwcmV0ZXJgYCBpcyBmb3VuZC4KIGBgUHl0aG9uMjo6Q29tcGlsZXJgYAogICBQeXRob24gMiBjb21waWxlci4gVGFyZ2V0IGRlZmluZWQgaWYgY29tcG9uZW50IGBgQ29tcGlsZXJgYCBpcyBmb3VuZC4KLWBgUHl0aG9uMjo6UHl0aG9uYGAKLSAgUHl0aG9uIDIgbGlicmFyeSBmb3IgUHl0aG9uIGVtYmVkZGluZy4gVGFyZ2V0IGRlZmluZWQgaWYgY29tcG9uZW50Ci0gIGBgRGV2ZWxvcG1lbnRgYCBpcyBmb3VuZC4KIGBgUHl0aG9uMjo6TW9kdWxlYGAKICAgUHl0aG9uIDIgbGlicmFyeSBmb3IgUHl0aG9uIG1vZHVsZS4gVGFyZ2V0IGRlZmluZWQgaWYgY29tcG9uZW50Ci0gIGBgRGV2ZWxvcG1lbnRgYCBpcyBmb3VuZC4KKyAgYGBEZXZlbG9wbWVudC5Nb2R1bGVgYCBpcyBmb3VuZC4KK2BgUHl0aG9uMjo6UHl0aG9uYGAKKyAgUHl0aG9uIDIgbGlicmFyeSBmb3IgUHl0aG9uIGVtYmVkZGluZy4gVGFyZ2V0IGRlZmluZWQgaWYgY29tcG9uZW50CisgIGBgRGV2ZWxvcG1lbnQuRW1iZWRgYCBpcyBmb3VuZC4KIGBgUHl0aG9uMjo6TnVtUHlgYAogICBOdW1QeSBsaWJyYXJ5IGZvciBQeXRob24gMi4gVGFyZ2V0IGRlZmluZWQgaWYgY29tcG9uZW50IGBgTnVtUHlgYCBpcyBmb3VuZC4KIApAQCAtNzQsMjYgKzg4LDMxIEBACiAgICAgKiBBbmFjb25kYQogICAgICogQ2Fub3B5CiAgICAgKiBJcm9uUHl0aG9uCisgICAgKiBQeVB5CiBgYFB5dGhvbjJfU1RETElCYGAKICAgU3RhbmRhcmQgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9VHJ1ZSlgYC4KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPVRydWUpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgnc3RkbGliJylgYC4KIGBgUHl0aG9uMl9TVERBUkNIYGAKICAgU3RhbmRhcmQgcGxhdGZvcm0gZGVwZW5kZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCiAKICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKLSAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9VHJ1ZSlgYC4KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9VHJ1ZSlgYAorICBvciBlbHNlIGBgc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0c3RkbGliJylgYC4KIGBgUHl0aG9uMl9TSVRFTElCYGAKICAgVGhpcmQtcGFydHkgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9RmFsc2UpYGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1GYWxzZSlgYAorICBvciBlbHNlIGBgc3lzY29uZmlnLmdldF9wYXRoKCdwdXJlbGliJylgYC4KIGBgUHl0aG9uMl9TSVRFQVJDSGBgCiAgIFRoaXJkLXBhcnR5IHBsYXRmb3JtIGRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgogCiAgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPUZhbHNlKWBgLgorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1GYWxzZSlgYAorICBvciBlbHNlIGBgc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0bGliJylgYC4KIGBgUHl0aG9uMl9Db21waWxlcl9GT1VORGBgCiAgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiAyIGNvbXBpbGVyLgogYGBQeXRob24yX0NPTVBJTEVSYGAKQEAgLTEwMSw4ICsxMjAsMTQgQEAKIGBgUHl0aG9uMl9DT01QSUxFUl9JRGBgCiAgIEEgc2hvcnQgc3RyaW5nIHVuaXF1ZSB0byB0aGUgY29tcGlsZXIuIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOgogICAgICogSXJvblB5dGhvbgorYGBQeXRob24yX0RPVE5FVF9MQVVOQ0hFUmBgCisgIFRoZSBgYC5OZXRgYCBpbnRlcnByZXRlci4gT25seSB1c2VkIGJ5IGBgSXJvblB5dGhvbmBgIGltcGxlbWVudGF0aW9uLgogYGBQeXRob24yX0RldmVsb3BtZW50X0ZPVU5EYGAKICAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDIgZGV2ZWxvcG1lbnQgYXJ0aWZhY3RzLgorYGBQeXRob24yX0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORGBgCisgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiAyIGRldmVsb3BtZW50IGFydGlmYWN0cyBmb3IgUHl0aG9uIG1vZHVsZS4KK2BgUHl0aG9uMl9EZXZlbG9wbWVudC5FbWJlZF9GT1VORGBgCisgIFN5c3RlbSBoYXMgdGhlIFB5dGhvbiAyIGRldmVsb3BtZW50IGFydGlmYWN0cyBmb3IgUHl0aG9uIGVtYmVkZGluZy4KIGBgUHl0aG9uMl9JTkNMVURFX0RJUlNgYAogICBUaGUgUHl0aG9uIDIgaW5jbHVkZSBkaXJlY3Rvcmllcy4KIGBgUHl0aG9uMl9MSUJSQVJJRVNgYApAQCAtMTE5LDEwICsxNDQsMTIgQEAKICAgUHl0aG9uIDIgbWlub3IgdmVyc2lvbi4KIGBgUHl0aG9uMl9WRVJTSU9OX1BBVENIYGAKICAgUHl0aG9uIDIgcGF0Y2ggdmVyc2lvbi4KK2BgUHl0aG9uMl9QeVB5X1ZFUlNJT05gYAorICBQeXRob24gMiBQeVB5IHZlcnNpb24uCiBgYFB5dGhvbjJfTnVtUHlfRk9VTkRgYAogICBTeXN0ZW0gaGFzIHRoZSBOdW1QeS4KIGBgUHl0aG9uMl9OdW1QeV9JTkNMVURFX0RJUlNgYAotICBUaGUgTnVtUHkgaW5jbHVkZSBkaXJlY3RyaWVzLgorICBUaGUgTnVtUHkgaW5jbHVkZSBkaXJlY3Rvcmllcy4KIGBgUHl0aG9uMl9OdW1QeV9WRVJTSU9OYGAKICAgVGhlIE51bVB5IHZlcnNpb24uCiAKQEAgLTE0MCw4ICsxNjcsNyBAQAogCiBgYFB5dGhvbjJfRklORF9TVFJBVEVHWWBgCiAgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyBob3cgbG9va3VwIHdpbGwgYmUgZG9uZS4KLSAgVGhlIGBgUHl0aG9uMl9GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgVGhlIGBgUHl0aG9uMl9GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogICAqIGBgVkVSU0lPTmBgOiBUcnkgdG8gZmluZCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBpbiBhbGwgc3BlY2lmaWVkCiAgICAgbG9jYXRpb25zLgpAQCAtMTU0LDggKzE4MCw3IEBACiBgYFB5dGhvbjJfRklORF9SRUdJU1RSWWBgCiAgIE9uIFdpbmRvd3MgdGhlIGBgUHl0aG9uMl9GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgZGV0ZXJtaW5lIHRoZSBvcmRlcgogICBvZiBwcmVmZXJlbmNlIGJldHdlZW4gcmVnaXN0cnkgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLSAgdGhlIGBgUHl0aG9uMl9GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgdGhlIGBgUHl0aG9uMl9GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogICAqIGBgRklSU1RgYDogVHJ5IHRvIHVzZSByZWdpc3RyeSBiZWZvcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQuCkBAIC0xNjUsOCArMTkwLDggQEAKIGBgUHl0aG9uMl9GSU5EX0ZSQU1FV09SS2BgCiAgIE9uIG1hY09TIHRoZSBgYFB5dGhvbjJfRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZSBkZXRlcm1pbmUgdGhlIG9yZGVyIG9mCiAgIHByZWZlcmVuY2UgYmV0d2VlbiBBcHBsZS1zdHlsZSBhbmQgdW5peC1zdHlsZSBwYWNrYWdlIGNvbXBvbmVudHMuCi0gIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciB0YWtlIHNhbWUgdmFsdWVzIGFzCi0gIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgIHZhcmlhYmxlLgorICBUaGlzIHZhcmlhYmxlIGNhbiB0YWtlIHNhbWUgdmFsdWVzIGFzIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgCisgIHZhcmlhYmxlLgogCiAgIC4uIG5vdGU6OgogCkBAIC0xNzYsMTEgKzIwMSwxMSBAQAogICB2YXJpYWJsZSB3aWxsIGJlIHVzZWQsIGlmIGFueS4KIAogYGBQeXRob24yX0ZJTkRfVklSVFVBTEVOVmBgCi0gIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMuIEl0IGlzIG1lYW5pbmdmdWxsCi0gIG9ubHkgd2hlbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlIChpLmUuIHRoZSBgYGFjdGl2YXRlYGAgc2NyaXB0IGhhcwotICBiZWVuIGV2YWx1YXRlZCkuIEluIHRoaXMgY2FzZSwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyCi0gIGBgUHl0aG9uMl9GSU5EX1JFR0lTVFJZYGAgYW5kIGBgQ01BS0VfRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZXMuCi0gIFRoZSBgYFB5dGhvbjJfRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCisgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMgbWFuYWdlZCBieQorICBgYHZpcnR1YWxlbnZgYCBvciBgYGNvbmRhYGAuIEl0IGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGEgdmlydHVhbCBlbnZpcm9ubWVudAorICBpcyBhY3RpdmUgKGkuZS4gdGhlIGBgYWN0aXZhdGVgYCBzY3JpcHQgaGFzIGJlZW4gZXZhbHVhdGVkKS4gSW4gdGhpcyBjYXNlLCBpdAorICB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYGBQeXRob24yX0ZJTkRfUkVHSVNUUllgYCBhbmQgYGBDTUFLRV9GSU5EX0ZSQU1FV09SS2BgCisgIHZhcmlhYmxlcy4gIFRoZSBgYFB5dGhvbjJfRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlCiAgIGZvbGxvd2luZzoKIAogICAqIGBgRklSU1RgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgdXNlZCBiZWZvcmUgYW55IG90aGVyIHN0YW5kYXJkCkBAIC0xODgsOCArMjEzLDkgQEAKICAgKiBgYE9OTFlgYDogT25seSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpcyB1c2VkIHRvIGxvb2stdXAgZm9yIHRoZQogICAgIGludGVycHJldGVyLgogICAqIGBgU1RBTkRBUkRgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgbm90IHVzZWQgdG8gbG9vay11cCBmb3IgdGhlCi0gICAgaW50ZXJwcmV0ZXIuIEluIHRoaXMgY2FzZSwgdmFyaWFibGUgYGBQeXRob24yX0ZJTkRfUkVHSVNUUllgYCAoV2luZG93cykKLSAgICBvciBgYENNQUtFX0ZJTkRfRlJBTUVXT1JLYGAgKG1hY09TKSBjYW4gYmUgc2V0IHdpdGggdmFsdWUgYGBMQVNUYGAgb3IKKyAgICBpbnRlcnByZXRlciBidXQgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBQQVRIYGAgaXMgYWx3YXlzIGNvbnNpZGVyZWQuCisgICAgSW4gdGhpcyBjYXNlLCB2YXJpYWJsZSBgYFB5dGhvbjJfRklORF9SRUdJU1RSWWBgIChXaW5kb3dzKSBvcgorICAgIGBgQ01BS0VfRklORF9GUkFNRVdPUktgYCAobWFjT1MpIGNhbiBiZSBzZXQgd2l0aCB2YWx1ZSBgYExBU1RgYCBvcgogICAgIGBgTkVWRVJgYCB0byBzZWxlY3QgcHJlZmVyYWJseSB0aGUgaW50ZXJwcmV0ZXIgZnJvbSB0aGUgdmlydHVhbAogICAgIGVudmlyb25tZW50LgogCkBAIC0xOTksNiArMjI1LDM5IEBACiAgICAgcmVjb21tZW5kZWQgdG8gYWxzbyBpbmNsdWRlIHRoZSBjb21wb25lbnQgYGBJbnRlcnByZXRlcmBgIHRvIGdldCBleHBlY3RlZAogICAgIHJlc3VsdC4KIAorYGBQeXRob24yX0ZJTkRfSU1QTEVNRU5UQVRJT05TYGAKKyAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzLCBpbiBhbiBvcmRlcmVkIGxpc3QsIHRoZSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zCisgIHdoaWNoIHdpbGwgYmUgc2VhcmNoZWQuIFRoZSBgYFB5dGhvbjJfRklORF9JTVBMRU1FTlRBVElPTlNgYCB2YXJpYWJsZSBjYW4KKyAgaG9sZCB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICAqIGBgQ1B5dGhvbmBgOiB0aGlzIGlzIHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbi4gVmFyaW91cyBwcm9kdWN0cywgbGlrZQorICAgIGBgQW5hY29uZGFgYCBvciBgYEFjdGl2ZVB5dGhvbmBgLCByZWx5IG9uIHRoaXMgaW1wbGVtZW50YXRpb24uCisgICogYGBJcm9uUHl0aG9uYGA6IFRoaXMgaW1wbGVtZW50YXRpb24gdXNlIHRoZSBgYENTaGFycGBgIGxhbmd1YWdlIGZvcgorICAgIGBgLk5FVCBGcmFtZXdvcmtgYCBvbiB0b3Agb2YgdGhlIGBEeW5hbWljIExhbmd1YWdlIFJ1bnRpbWVgIChgYERMUmBgKS4KKyAgICBTZWUgYElyb25QeXRob24gPGh0dHA6Ly9pcm9ucHl0aG9uLm5ldD5gXy4KKyAgKiBgYFB5UHlgYDogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2UgYGBSUHl0aG9uYGAgbGFuZ3VhZ2UgYW5kCisgICAgYGBSUHl0aG9uIHRyYW5zbGF0aW9uIHRvb2xjaGFpbmBgIHRvIHByb2R1Y2UgdGhlIHB5dGhvbiBpbnRlcnByZXRlci4KKyAgICBTZWUgYFB5UHkgPGh0dHBzOi8vd3d3LnB5cHkub3JnPmBfLgorCisgIFRoZSBkZWZhdWx0IHZhbHVlIGlzOgorCisgICogV2luZG93cyBwbGF0Zm9ybTogYGBDUHl0aG9uYGAsIGBgSXJvblB5dGhvbmBgCisgICogT3RoZXIgcGxhdGZvcm1zOiBgYENQeXRob25gYAorCisgIC4uIG5vdGU6OgorCisgICAgVGhpcyBoaW50IGhhcyB0aGUgbG93ZXN0IHByaW9yaXR5IG9mIGFsbCBoaW50cywgc28gZXZlbiBpZiwgZm9yIGV4YW1wbGUsCisgICAgeW91IHNwZWNpZnkgYGBJcm9uUHl0aG9uYGAgZmlyc3QgYW5kIGBgQ1B5dGhvbmBgIGluIHNlY29uZCwgYSBweXRob24KKyAgICBwcm9kdWN0IGJhc2VkIG9uIGBgQ1B5dGhvbmBgIGNhbiBiZSBzZWxlY3RlZCBiZWNhdXNlLCBmb3IgZXhhbXBsZSB3aXRoCisgICAgYGBQeXRob24yX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT05gYCwgZWFjaCBsb2NhdGlvbiB3aWxsIGJlIHNlYXJjaCBmaXJzdCBmb3IKKyAgICBgYElyb25QeXRob25gYCBhbmQgc2Vjb25kIGZvciBgYENQeXRob25gYC4KKworICAuLiBub3RlOjoKKworICAgIFdoZW4gYGBJcm9uUHl0aG9uYGAgaXMgc3BlY2lmaWVkLCBvbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiBgYFdpbmRvd3NgYCwgdGhlCisgICAgYGAuTmV0YGAgaW50ZXJwcmV0ZXIgKGkuZS4gYGBtb25vYGAgY29tbWFuZCkgaXMgZXhwZWN0ZWQgdG8gYmUgYXZhaWxhYmxlCisgICAgdGhyb3VnaCB0aGUgYGBQQVRIYGAgdmFyaWFibGUuCisKIEFydGlmYWN0cyBTcGVjaWZpY2F0aW9uCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0yMTEsNiArMjcwLDkgQEAKIGBgUHl0aG9uMl9DT01QSUxFUmBgCiAgIFRoZSBwYXRoIHRvIHRoZSBjb21waWxlci4KIAorYGBQeXRob24yX0RPVE5FVF9MQVVOQ0hFUmBgCisgIFRoZSBgYC5OZXRgYCBpbnRlcnByZXRlci4gT25seSB1c2VkIGJ5IGBgSXJvblB5dGhvbmBgIGltcGxlbWVudGF0aW9uLgorCiBgYFB5dGhvbjJfTElCUkFSWWBgCiAgIFRoZSBwYXRoIHRvIHRoZSBsaWJyYXJ5LiBJdCB3aWxsIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUKICAgdmFyaWFibGVzIGBgUHl0aG9uMl9MSUJSQVJJRVNgYCwgYGBQeXRob24yX0xJQlJBWV9ESVJTYGAgYW5kCkBAIC0yMzQsMTkgKzI5NiwzNiBAQAogICBXaGVuIGFuIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgYWxsIGBgSElOVFNgYCB3aWxsIGJlIGlnbm9yZWQgYW5kIG5vIHNlYXJjaAogICB3aWxsIGJlIHBlcmZvcm1lZCBmb3IgdGhpcyBhcnRpZmFjdC4KIAotICBJZiBtb3JlIHRoYW4gb25lIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zYWJpbGl0eSB0bworICBJZiBtb3JlIHRoYW4gb25lIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0bwogICBlbnN1cmUgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSB2YXJpb3VzIGFydGlmYWN0cy4KIAorQnkgZGVmYXVsdCwgdGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FsbHMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIG9mIGEKK3Byb2plY3Qgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbi9jb21wb25lbnQgcmVxdWlyZW1lbnRzIHdoaWxlIHByb3ZpZGluZyBjb3JyZWN0CithbmQgY29uc2lzdGVudCByZXN1bHRzIGZvciBlYWNoIGNhbGwuIFRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgYGBDTWFrZWBgIGNhY2hlCitpcyBub3QgdXNlZCBpbiB0aGUgdHJhZGl0aW9uYWwgd2F5IHdoaWNoIGNhbiBiZSBwcm9ibGVtYXRpYyBmb3IgaW50ZXJhY3RpdmUKK3NwZWNpZmljYXRpb24uIFNvLCB0byBlbmFibGUgYWxzbyBpbnRlcmFjdGl2ZSBzcGVjaWZpY2F0aW9uLCBtb2R1bGUgYmVoYXZpb3IKK2NhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlIGZvbGxvd2luZyB2YXJpYWJsZToKKworYGBQeXRob24yX0FSVElGQUNUU19JTlRFUkFDVElWRWBgCisgIFNlbGVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtb2R1bGUuIFRoaXMgaXMgYSBib29sZWFuIHZhcmlhYmxlOgorCisgICogSWYgc2V0IHRvIGBgVFJVRWBgOiBDcmVhdGUgQ01ha2UgY2FjaGUgZW50cmllcyBmb3IgdGhlIGFib3ZlIGFydGlmYWN0CisgICAgc3BlY2lmaWNhdGlvbiB2YXJpYWJsZXMgc28gdGhhdCB1c2VycyBjYW4gZWRpdCB0aGVtIGludGVyYWN0aXZlbHkuCisgICAgVGhpcyBkaXNhYmxlcyBzdXBwb3J0IGZvciBtdWx0aXBsZSB2ZXJzaW9uL2NvbXBvbmVudCByZXF1aXJlbWVudHMuCisgICogSWYgc2V0IHRvIGBgRkFMU0VgYCBvciB1bmRlZmluZWQ6IEVuYWJsZSBtdWx0aXBsZSB2ZXJzaW9uL2NvbXBvbmVudAorICAgIHJlcXVpcmVtZW50cy4KKwogQ29tbWFuZHMKIF5eXl5eXl5eCiAKLVRoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGNvbW1hbmQgYGBQeXRob25fYWRkX2xpYnJhcnlgYCAod2hlbgorVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgY29tbWFuZCBgYFB5dGhvbjJfYWRkX2xpYnJhcnlgYCAod2hlbgogOnByb3BfZ2JsOmBDTUFLRV9ST0xFYCBpcyBgYFBST0pFQ1RgYCksIHdoaWNoIGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMKIDpjb21tYW5kOmBhZGRfbGlicmFyeWAgYW5kIGFkZHMgYSBkZXBlbmRlbmN5IHRvIHRhcmdldCBgYFB5dGhvbjI6OlB5dGhvbmBgIG9yLAogd2hlbiBsaWJyYXJ5IHR5cGUgaXMgYGBNT0RVTEVgYCwgdG8gdGFyZ2V0IGBgUHl0aG9uMjo6TW9kdWxlYGAgYW5kIHRha2VzIGNhcmUKIG9mIFB5dGhvbiBtb2R1bGUgbmFtaW5nIHJ1bGVzOjoKIAotICBQeXRob24yX2FkZF9saWJyYXJ5IChteV9tb2R1bGUgTU9EVUxFIHNyYzEuY3BwKQorICBQeXRob24yX2FkZF9saWJyYXJ5ICg8bmFtZT4gW1NUQVRJQyB8IFNIQVJFRCB8IE1PRFVMRV0KKyAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZTE+IFs8c291cmNlMj4gLi4uXSkKIAogSWYgbGlicmFyeSB0eXBlIGlzIG5vdCBzcGVjaWZpZWQsIGBgTU9EVUxFYGAgaXMgYXNzdW1lZC4KICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRQeXRob24zLmNtYWtlIGIvTW9kdWxlcy9GaW5kUHl0aG9uMy5jbWFrZQppbmRleCAwNjZkMGRmLi5iYWNkYzQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRQeXRob24zLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFB5dGhvbjMuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kUHl0aG9uMwogLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xMgorCiBGaW5kIFB5dGhvbiAzIGludGVycHJldGVyLCBjb21waWxlciBhbmQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgKGluY2x1ZGUKIGRpcmVjdG9yaWVzIGFuZCBsaWJyYXJpZXMpLgogCkBAIC0xMywxMyArMTUsMjQgQEAKICogYGBJbnRlcnByZXRlcmBgOiBzZWFyY2ggZm9yIFB5dGhvbiAzIGludGVycHJldGVyCiAqIGBgQ29tcGlsZXJgYDogc2VhcmNoIGZvciBQeXRob24gMyBjb21waWxlci4gT25seSBvZmZlcmVkIGJ5IElyb25QeXRob24uCiAqIGBgRGV2ZWxvcG1lbnRgYDogc2VhcmNoIGZvciBkZXZlbG9wbWVudCBhcnRpZmFjdHMgKGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCi0gIGxpYnJhcmllcykKKyAgbGlicmFyaWVzKS4gVGhpcyBjb21wb25lbnQgaW5jbHVkZXMgdHdvIHN1Yi1jb21wb25lbnRzIHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQKKyAgaW5kZXBlbmRlbnRseToKKworICAqIGBgRGV2ZWxvcG1lbnQuTW9kdWxlYGA6IHNlYXJjaCBmb3IgYXJ0aWZhY3RzIGZvciBQeXRob24gMyBtb2R1bGUKKyAgICBkZXZlbG9wbWVudHMuCisgICogYGBEZXZlbG9wbWVudC5FbWJlZGBgOiBzZWFyY2ggZm9yIGFydGlmYWN0cyBmb3IgUHl0aG9uIDMgZW1iZWRkaW5nCisgICAgZGV2ZWxvcG1lbnRzLgorCiAqIGBgTnVtUHlgYDogc2VhcmNoIGZvciBOdW1QeSBpbmNsdWRlIGRpcmVjdG9yaWVzLgogCiBJZiBubyBgYENPTVBPTkVOVFNgYCBhcmUgc3BlY2lmaWVkLCBgYEludGVycHJldGVyYGAgaXMgYXNzdW1lZC4KIAorSWYgY29tcG9uZW50IGBgRGV2ZWxvcG1lbnRgYCBpcyBzcGVjaWZpZWQsIGl0IGltcGxpZXMgc3ViLWNvbXBvbmVudHMKK2BgRGV2ZWxvcG1lbnQuTW9kdWxlYGAgYW5kIGBgRGV2ZWxvcG1lbnQuRW1iZWRgYC4KKwogVG8gZW5zdXJlIGNvbnNpc3RlbnQgdmVyc2lvbnMgYmV0d2VlbiBjb21wb25lbnRzIGBgSW50ZXJwcmV0ZXJgYCwgYGBDb21waWxlcmBgLAotYGBEZXZlbG9wbWVudGBgIGFuZCBgYE51bVB5YGAsIHNwZWNpZnkgYWxsIGNvbXBvbmVudHMgYXQgdGhlIHNhbWUgdGltZTo6CitgYERldmVsb3BtZW50YGAgKG9yIG9uZSBvZiBpdHMgc3ViLWNvbXBvbmVudHMpIGFuZCBgYE51bVB5YGAsIHNwZWNpZnkgYWxsCitjb21wb25lbnRzIGF0IHRoZSBzYW1lIHRpbWU6OgogCiAgIGZpbmRfcGFja2FnZSAoUHl0aG9uMyBDT01QT05FTlRTIEludGVycHJldGVyIERldmVsb3BtZW50KQogCkBAIC0zMSwxMCArNDQsMTEgQEAKIAogLi4gbm90ZTo6CiAKLSAgSWYgY29tcG9uZW50cyBgYEludGVycHJldGVyYGAgYW5kIGBgRGV2ZWxvcG1lbnRgYCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoaXMKLSAgbW9kdWxlIHNlYXJjaCBvbmx5IGZvciBpbnRlcnByZXRlciB3aXRoIHNhbWUgcGxhdGZvcm0gYXJjaGl0ZWN0dXJlIGFzIHRoZSBvbmUKLSAgZGVmaW5lZCBieSBgYENNYWtlYGAgY29uZmlndXJhdGlvbi4gVGhpcyBjb250cmFpbnQgZG9lcyBub3QgYXBwbHkgaWYgb25seQotICBgYEludGVycHJldGVyYGAgY29tcG9uZW50IGlzIHNwZWNpZmllZC4KKyAgSWYgY29tcG9uZW50cyBgYEludGVycHJldGVyYGAgYW5kIGBgRGV2ZWxvcG1lbnRgYCAob3Igb25lIG9mIGl0cworICBzdWItY29tcG9uZW50cykgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGlzIG1vZHVsZSBzZWFyY2ggb25seSBmb3IgaW50ZXJwcmV0ZXIKKyAgd2l0aCBzYW1lIHBsYXRmb3JtIGFyY2hpdGVjdHVyZSBhcyB0aGUgb25lIGRlZmluZWQgYnkgYGBDTWFrZWBgCisgIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29uc3RyYWludCBkb2VzIG5vdCBhcHBseSBpZiBvbmx5IGBgSW50ZXJwcmV0ZXJgYAorICBjb21wb25lbnQgaXMgc3BlY2lmaWVkLgogCiBJbXBvcnRlZCBUYXJnZXRzCiBeXl5eXl5eXl5eXl5eXl5eCkBAIC00NiwxMiArNjAsMTIgQEAKICAgUHl0aG9uIDMgaW50ZXJwcmV0ZXIuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudCBgYEludGVycHJldGVyYGAgaXMgZm91bmQuCiBgYFB5dGhvbjM6OkNvbXBpbGVyYGAKICAgUHl0aG9uIDMgY29tcGlsZXIuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudCBgYENvbXBpbGVyYGAgaXMgZm91bmQuCi1gYFB5dGhvbjM6OlB5dGhvbmBgCi0gIFB5dGhvbiAzIGxpYnJhcnkgZm9yIFB5dGhvbiBlbWJlZGRpbmcuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudAotICBgYERldmVsb3BtZW50YGAgaXMgZm91bmQuCiBgYFB5dGhvbjM6Ok1vZHVsZWBgCiAgIFB5dGhvbiAzIGxpYnJhcnkgZm9yIFB5dGhvbiBtb2R1bGUuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudAotICBgYERldmVsb3BtZW50YGAgaXMgZm91bmQuCisgIGBgRGV2ZWxvcG1lbnQuTW9kdWxlYGAgaXMgZm91bmQuCitgYFB5dGhvbjM6OlB5dGhvbmBgCisgIFB5dGhvbiAzIGxpYnJhcnkgZm9yIFB5dGhvbiBlbWJlZGRpbmcuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudAorICBgYERldmVsb3BtZW50LkVtYmVkYGAgaXMgZm91bmQuCiBgYFB5dGhvbjM6Ok51bVB5YGAKICAgTnVtUHkgbGlicmFyeSBmb3IgUHl0aG9uIDMuIFRhcmdldCBkZWZpbmVkIGlmIGNvbXBvbmVudCBgYE51bVB5YGAgaXMgZm91bmQuCiAKQEAgLTc0LDI2ICs4OCw0MCBAQAogICAgICogQW5hY29uZGEKICAgICAqIENhbm9weQogICAgICogSXJvblB5dGhvbgorICAgICogUHlQeQogYGBQeXRob24zX1NURExJQmBgCiAgIFN0YW5kYXJkIHBsYXRmb3JtIGluZGVwZW5kZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCiAKICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKLSAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPVRydWUpYGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPUZhbHNlLHN0YW5kYXJkX2xpYj1UcnVlKWBgCisgIG9yIGVsc2UgYGBzeXNjb25maWcuZ2V0X3BhdGgoJ3N0ZGxpYicpYGAuCiBgYFB5dGhvbjNfU1REQVJDSGBgCiAgIFN0YW5kYXJkIHBsYXRmb3JtIGRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgogCiAgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0gIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPVRydWUpYGAuCisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPVRydWUsc3RhbmRhcmRfbGliPVRydWUpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdHN0ZGxpYicpYGAuCiBgYFB5dGhvbjNfU0lURUxJQmBgCiAgIFRoaXJkLXBhcnR5IHBsYXRmb3JtIGluZGVwZW5kZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCiAKICAgSW5mb3JtYXRpb24gcmV0dXJuZWQgYnkKLSAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9RmFsc2Usc3RhbmRhcmRfbGliPUZhbHNlKWBgLgorICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1GYWxzZSxzdGFuZGFyZF9saWI9RmFsc2UpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgncHVyZWxpYicpYGAuCiBgYFB5dGhvbjNfU0lURUFSQ0hgYAogICBUaGlyZC1wYXJ0eSBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAogICBJbmZvcm1hdGlvbiByZXR1cm5lZCBieQotICBgYGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz1UcnVlLHN0YW5kYXJkX2xpYj1GYWxzZSlgYC4KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9VHJ1ZSxzdGFuZGFyZF9saWI9RmFsc2UpYGAKKyAgb3IgZWxzZSBgYHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGxpYicpYGAuCitgYFB5dGhvbjNfU09BQklgYAorICBFeHRlbnNpb24gc3VmZml4IGZvciBtb2R1bGVzLgorCisgIEluZm9ybWF0aW9uIHJldHVybmVkIGJ5CisgIGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU09BQkknKWBgIG9yIGNvbXB1dGVkIGZyb20KKyAgYGBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJylgYCBvcgorICBgYHB5dGhvbjMtY29uZmlnIC0tZXh0ZW5zaW9uLXN1ZmZpeGBgLiBJZiBwYWNrYWdlIGBgZGlzdHV0aWxzLnN5c2NvbmZpZ2BgIGlzCisgIG5vdCBhdmFpbGFibGUsIGBgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTT0FCSScpYGAgb3IKKyAgYGBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKWBgIGFyZSB1c2VkLgogYGBQeXRob24zX0NvbXBpbGVyX0ZPVU5EYGAKICAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDMgY29tcGlsZXIuCiBgYFB5dGhvbjNfQ09NUElMRVJgYApAQCAtMTAxLDggKzEyOSwxNCBAQAogYGBQeXRob24zX0NPTVBJTEVSX0lEYGAKICAgQSBzaG9ydCBzdHJpbmcgdW5pcXVlIHRvIHRoZSBjb21waWxlci4gUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6CiAgICAgKiBJcm9uUHl0aG9uCitgYFB5dGhvbjNfRE9UTkVUX0xBVU5DSEVSYGAKKyAgVGhlIGBgLk5ldGBgIGludGVycHJldGVyLiBPbmx5IHVzZWQgYnkgYGBJcm9uUHl0aG9uYGAgaW1wbGVtZW50YXRpb24uCiBgYFB5dGhvbjNfRGV2ZWxvcG1lbnRfRk9VTkRgYAogICBTeXN0ZW0gaGFzIHRoZSBQeXRob24gMyBkZXZlbG9wbWVudCBhcnRpZmFjdHMuCitgYFB5dGhvbjNfRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EYGAKKyAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDMgZGV2ZWxvcG1lbnQgYXJ0aWZhY3RzIGZvciBQeXRob24gbW9kdWxlLgorYGBQeXRob24zX0RldmVsb3BtZW50LkVtYmVkX0ZPVU5EYGAKKyAgU3lzdGVtIGhhcyB0aGUgUHl0aG9uIDMgZGV2ZWxvcG1lbnQgYXJ0aWZhY3RzIGZvciBQeXRob24gZW1iZWRkaW5nLgogYGBQeXRob24zX0lOQ0xVREVfRElSU2BgCiAgIFRoZSBQeXRob24gMyBpbmNsdWRlIGRpcmVjdG9yaWVzLgogYGBQeXRob24zX0xJQlJBUklFU2BgCkBAIC0xMTksMTAgKzE1MywxMiBAQAogICBQeXRob24gMyBtaW5vciB2ZXJzaW9uLgogYGBQeXRob24zX1ZFUlNJT05fUEFUQ0hgYAogICBQeXRob24gMyBwYXRjaCB2ZXJzaW9uLgorYGBQeXRob24zX1B5UHlfVkVSU0lPTmBgCisgIFB5dGhvbiAzIFB5UHkgdmVyc2lvbi4KIGBgUHl0aG9uM19OdW1QeV9GT1VORGBgCiAgIFN5c3RlbSBoYXMgdGhlIE51bVB5LgogYGBQeXRob24zX051bVB5X0lOQ0xVREVfRElSU2BgCi0gIFRoZSBOdW1QeSBpbmNsdWRlIGRpcmVjdHJpZXMuCisgIFRoZSBOdW1QeSBpbmNsdWRlIGRpcmVjdG9yaWVzLgogYGBQeXRob24zX051bVB5X1ZFUlNJT05gYAogICBUaGUgTnVtUHkgdmVyc2lvbi4KIApAQCAtMTUyLDcgKzE4OCw3IEBACiAKICAgKiBgYE9OYGA6IENvcnJlc3BvbmRpbmcgZmxhZyBpcyBzZWxlY3RlZC4KICAgKiBgYE9GRmBgOiBDb3JyZXNwb25kaW5nIGZsYWcgaXMgbm90IHNlbGVjdGVkLgotICAqIGBgQU5ZYGA6IFRoZSB0d28gcG9zaWJpbHRpZXMgKGBgT05gYCBhbmQgYGBPRkZgYCkgd2lsbCBiZSBzZWFyY2hlZC4KKyAgKiBgYEFOWWBgOiBUaGUgdHdvIHBvc3NpYmlsaXRpZXMgKGBgT05gYCBhbmQgYGBPRkZgYCkgd2lsbCBiZSBzZWFyY2hlZC4KIAogICBGcm9tIHRoaXMgMy10dXBsZSwgdmFyaW91cyBBQklzIHdpbGwgYmUgc2VhcmNoZWQgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdAogICBzcGVjaWFsaXplZCB0byB0aGUgbW9zdCBnZW5lcmFsLiBNb3Jlb3ZlciwgYGBkZWJ1Z2BgIHZlcnNpb25zIHdpbGwgYmUKQEAgLTE4MSw4ICsyMTcsNyBAQAogCiBgYFB5dGhvbjNfRklORF9TVFJBVEVHWWBgCiAgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyBob3cgbG9va3VwIHdpbGwgYmUgZG9uZS4KLSAgVGhlIGBgUHl0aG9uM19GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgVGhlIGBgUHl0aG9uM19GSU5EX1NUUkFURUdZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogICAqIGBgVkVSU0lPTmBgOiBUcnkgdG8gZmluZCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBpbiBhbGwgc3BlY2lmaWVkCiAgICAgbG9jYXRpb25zLgpAQCAtMTk1LDggKzIzMCw3IEBACiBgYFB5dGhvbjNfRklORF9SRUdJU1RSWWBgCiAgIE9uIFdpbmRvd3MgdGhlIGBgUHl0aG9uM19GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgZGV0ZXJtaW5lIHRoZSBvcmRlcgogICBvZiBwcmVmZXJlbmNlIGJldHdlZW4gcmVnaXN0cnkgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLSAgVGhlIGBgUHl0aG9uM19GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCi0gIGZvbGxvd2luZzoKKyAgVGhlIGBgUHl0aG9uM19GSU5EX1JFR0lTVFJZYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogICAqIGBgRklSU1RgYDogVHJ5IHRvIHVzZSByZWdpc3RyeSBiZWZvcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQuCkBAIC0yMDYsOCArMjQwLDggQEAKIGBgUHl0aG9uM19GSU5EX0ZSQU1FV09SS2BgCiAgIE9uIG1hY09TIHRoZSBgYFB5dGhvbjNfRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZSBkZXRlcm1pbmUgdGhlIG9yZGVyIG9mCiAgIHByZWZlcmVuY2UgYmV0d2VlbiBBcHBsZS1zdHlsZSBhbmQgdW5peC1zdHlsZSBwYWNrYWdlIGNvbXBvbmVudHMuCi0gIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciB0YWtlIHNhbWUgdmFsdWVzIGFzCi0gIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgIHZhcmlhYmxlLgorICBUaGlzIHZhcmlhYmxlIGNhbiB0YWtlIHNhbWUgdmFsdWVzIGFzIDp2YXJpYWJsZTpgQ01BS0VfRklORF9GUkFNRVdPUktgCisgIHZhcmlhYmxlLgogCiAgIC4uIG5vdGU6OgogCkBAIC0yMTcsMTEgKzI1MSwxMSBAQAogICB2YXJpYWJsZSB3aWxsIGJlIHVzZWQsIGlmIGFueS4KIAogYGBQeXRob24zX0ZJTkRfVklSVFVBTEVOVmBgCi0gIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMuIEl0IGlzIG1lYW5pbmdmdWxsCi0gIG9ubHkgd2hlbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlIChpLmUuIHRoZSBgYGFjdGl2YXRlYGAgc2NyaXB0IGhhcwotICBiZWVuIGV2YWx1YXRlZCkuIEluIHRoaXMgY2FzZSwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyCi0gIGBgUHl0aG9uM19GSU5EX1JFR0lTVFJZYGAgYW5kIGBgQ01BS0VfRklORF9GUkFNRVdPUktgYCB2YXJpYWJsZXMuCi0gIFRoZSBgYFB5dGhvbjNfRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBlbXB0eSBvciBvbmUgb2YgdGhlCisgIFRoaXMgdmFyaWFibGUgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBlbnZpcm9ubWVudHMgbWFuYWdlZCBieQorICBgYHZpcnR1YWxlbnZgYCBvciBgYGNvbmRhYGAuIEl0IGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGEgdmlydHVhbCBlbnZpcm9ubWVudAorICBpcyBhY3RpdmUgKGkuZS4gdGhlIGBgYWN0aXZhdGVgYCBzY3JpcHQgaGFzIGJlZW4gZXZhbHVhdGVkKS4gSW4gdGhpcyBjYXNlLCBpdAorICB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYGBQeXRob24zX0ZJTkRfUkVHSVNUUllgYCBhbmQgYGBDTUFLRV9GSU5EX0ZSQU1FV09SS2BgCisgIHZhcmlhYmxlcy4gIFRoZSBgYFB5dGhvbjNfRklORF9WSVJUVUFMRU5WYGAgdmFyaWFibGUgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlCiAgIGZvbGxvd2luZzoKIAogICAqIGBgRklSU1RgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgdXNlZCBiZWZvcmUgYW55IG90aGVyIHN0YW5kYXJkCkBAIC0yMjksOCArMjYzLDkgQEAKICAgKiBgYE9OTFlgYDogT25seSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpcyB1c2VkIHRvIGxvb2stdXAgZm9yIHRoZQogICAgIGludGVycHJldGVyLgogICAqIGBgU1RBTkRBUkRgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgbm90IHVzZWQgdG8gbG9vay11cCBmb3IgdGhlCi0gICAgaW50ZXJwcmV0ZXIuIEluIHRoaXMgY2FzZSwgdmFyaWFibGUgYGBQeXRob24zX0ZJTkRfUkVHSVNUUllgYCAoV2luZG93cykKLSAgICBvciBgYENNQUtFX0ZJTkRfRlJBTUVXT1JLYGAgKG1hY09TKSBjYW4gYmUgc2V0IHdpdGggdmFsdWUgYGBMQVNUYGAgb3IKKyAgICBpbnRlcnByZXRlciBidXQgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBQQVRIYGAgaXMgYWx3YXlzIGNvbnNpZGVyZWQuCisgICAgSW4gdGhpcyBjYXNlLCB2YXJpYWJsZSBgYFB5dGhvbjNfRklORF9SRUdJU1RSWWBgIChXaW5kb3dzKSBvcgorICAgIGBgQ01BS0VfRklORF9GUkFNRVdPUktgYCAobWFjT1MpIGNhbiBiZSBzZXQgd2l0aCB2YWx1ZSBgYExBU1RgYCBvcgogICAgIGBgTkVWRVJgYCB0byBzZWxlY3QgcHJlZmVyYWJseSB0aGUgaW50ZXJwcmV0ZXIgZnJvbSB0aGUgdmlydHVhbAogICAgIGVudmlyb25tZW50LgogCkBAIC0yNDAsNiArMjc1LDM5IEBACiAgICAgcmVjb21tZW5kZWQgdG8gYWxzbyBpbmNsdWRlIHRoZSBjb21wb25lbnQgYGBJbnRlcnByZXRlcmBgIHRvIGdldCBleHBlY3RlZAogICAgIHJlc3VsdC4KIAorYGBQeXRob24zX0ZJTkRfSU1QTEVNRU5UQVRJT05TYGAKKyAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzLCBpbiBhbiBvcmRlcmVkIGxpc3QsIHRoZSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zCisgIHdoaWNoIHdpbGwgYmUgc2VhcmNoZWQuIFRoZSBgYFB5dGhvbjNfRklORF9JTVBMRU1FTlRBVElPTlNgYCB2YXJpYWJsZSBjYW4KKyAgaG9sZCB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICAqIGBgQ1B5dGhvbmBgOiB0aGlzIGlzIHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbi4gVmFyaW91cyBwcm9kdWN0cywgbGlrZQorICAgIGBgQW5hY29uZGFgYCBvciBgYEFjdGl2ZVB5dGhvbmBgLCByZWx5IG9uIHRoaXMgaW1wbGVtZW50YXRpb24uCisgICogYGBJcm9uUHl0aG9uYGA6IFRoaXMgaW1wbGVtZW50YXRpb24gdXNlIHRoZSBgYENTaGFycGBgIGxhbmd1YWdlIGZvcgorICAgIGBgLk5FVCBGcmFtZXdvcmtgYCBvbiB0b3Agb2YgdGhlIGBEeW5hbWljIExhbmd1YWdlIFJ1bnRpbWVgIChgYERMUmBgKS4KKyAgICBTZWUgYElyb25QeXRob24gPGh0dHA6Ly9pcm9ucHl0aG9uLm5ldD5gXy4KKyAgKiBgYFB5UHlgYDogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2UgYGBSUHl0aG9uYGAgbGFuZ3VhZ2UgYW5kCisgICAgYGBSUHl0aG9uIHRyYW5zbGF0aW9uIHRvb2xjaGFpbmBgIHRvIHByb2R1Y2UgdGhlIHB5dGhvbiBpbnRlcnByZXRlci4KKyAgICBTZWUgYFB5UHkgPGh0dHBzOi8vd3d3LnB5cHkub3JnPmBfLgorCisgIFRoZSBkZWZhdWx0IHZhbHVlIGlzOgorCisgICogV2luZG93cyBwbGF0Zm9ybTogYGBDUHl0aG9uYGAsIGBgSXJvblB5dGhvbmBgCisgICogT3RoZXIgcGxhdGZvcm1zOiBgYENQeXRob25gYAorCisgIC4uIG5vdGU6OgorCisgICAgVGhpcyBoaW50IGhhcyB0aGUgbG93ZXN0IHByaW9yaXR5IG9mIGFsbCBoaW50cywgc28gZXZlbiBpZiwgZm9yIGV4YW1wbGUsCisgICAgeW91IHNwZWNpZnkgYGBJcm9uUHl0aG9uYGAgZmlyc3QgYW5kIGBgQ1B5dGhvbmBgIGluIHNlY29uZCwgYSBweXRob24KKyAgICBwcm9kdWN0IGJhc2VkIG9uIGBgQ1B5dGhvbmBgIGNhbiBiZSBzZWxlY3RlZCBiZWNhdXNlLCBmb3IgZXhhbXBsZSB3aXRoCisgICAgYGBQeXRob24zX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT05gYCwgZWFjaCBsb2NhdGlvbiB3aWxsIGJlIHNlYXJjaCBmaXJzdCBmb3IKKyAgICBgYElyb25QeXRob25gYCBhbmQgc2Vjb25kIGZvciBgYENQeXRob25gYC4KKworICAuLiBub3RlOjoKKworICAgIFdoZW4gYGBJcm9uUHl0aG9uYGAgaXMgc3BlY2lmaWVkLCBvbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiBgYFdpbmRvd3NgYCwgdGhlCisgICAgYGAuTmV0YGAgaW50ZXJwcmV0ZXIgKGkuZS4gYGBtb25vYGAgY29tbWFuZCkgaXMgZXhwZWN0ZWQgdG8gYmUgYXZhaWxhYmxlCisgICAgdGhyb3VnaCB0aGUgYGBQQVRIYGAgdmFyaWFibGUuCisKIEFydGlmYWN0cyBTcGVjaWZpY2F0aW9uCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0yNTIsNiArMzIwLDkgQEAKIGBgUHl0aG9uM19DT01QSUxFUmBgCiAgIFRoZSBwYXRoIHRvIHRoZSBjb21waWxlci4KIAorYGBQeXRob24zX0RPVE5FVF9MQVVOQ0hFUmBgCisgIFRoZSBgYC5OZXRgYCBpbnRlcnByZXRlci4gT25seSB1c2VkIGJ5IGBgSXJvblB5dGhvbmBgIGltcGxlbWVudGF0aW9uLgorCiBgYFB5dGhvbjNfTElCUkFSWWBgCiAgIFRoZSBwYXRoIHRvIHRoZSBsaWJyYXJ5LiBJdCB3aWxsIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUKICAgdmFyaWFibGVzIGBgUHl0aG9uM19MSUJSQVJJRVNgYCwgYGBQeXRob24zX0xJQlJBWV9ESVJTYGAgYW5kCkBAIC0yNzUsMjEgKzM0Niw0MSBAQAogICBXaGVuIGFuIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgYWxsIGBgSElOVFNgYCB3aWxsIGJlIGlnbm9yZWQgYW5kIG5vIHNlYXJjaAogICB3aWxsIGJlIHBlcmZvcm1lZCBmb3IgdGhpcyBhcnRpZmFjdC4KIAotICBJZiBtb3JlIHRoYW4gb25lIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zYWJpbGl0eSB0bworICBJZiBtb3JlIHRoYW4gb25lIGFydGlmYWN0IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0bwogICBlbnN1cmUgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSB2YXJpb3VzIGFydGlmYWN0cy4KIAorQnkgZGVmYXVsdCwgdGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FsbHMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIG9mIGEKK3Byb2plY3Qgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbi9jb21wb25lbnQgcmVxdWlyZW1lbnRzIHdoaWxlIHByb3ZpZGluZyBjb3JyZWN0CithbmQgY29uc2lzdGVudCByZXN1bHRzIGZvciBlYWNoIGNhbGwuIFRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgYGBDTWFrZWBgIGNhY2hlCitpcyBub3QgdXNlZCBpbiB0aGUgdHJhZGl0aW9uYWwgd2F5IHdoaWNoIGNhbiBiZSBwcm9ibGVtYXRpYyBmb3IgaW50ZXJhY3RpdmUKK3NwZWNpZmljYXRpb24uIFNvLCB0byBlbmFibGUgYWxzbyBpbnRlcmFjdGl2ZSBzcGVjaWZpY2F0aW9uLCBtb2R1bGUgYmVoYXZpb3IKK2NhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlIGZvbGxvd2luZyB2YXJpYWJsZToKKworYGBQeXRob24zX0FSVElGQUNUU19JTlRFUkFDVElWRWBgCisgIFNlbGVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtb2R1bGUuIFRoaXMgaXMgYSBib29sZWFuIHZhcmlhYmxlOgorCisgICogSWYgc2V0IHRvIGBgVFJVRWBgOiBDcmVhdGUgQ01ha2UgY2FjaGUgZW50cmllcyBmb3IgdGhlIGFib3ZlIGFydGlmYWN0CisgICAgc3BlY2lmaWNhdGlvbiB2YXJpYWJsZXMgc28gdGhhdCB1c2VycyBjYW4gZWRpdCB0aGVtIGludGVyYWN0aXZlbHkuCisgICAgVGhpcyBkaXNhYmxlcyBzdXBwb3J0IGZvciBtdWx0aXBsZSB2ZXJzaW9uL2NvbXBvbmVudCByZXF1aXJlbWVudHMuCisgICogSWYgc2V0IHRvIGBgRkFMU0VgYCBvciB1bmRlZmluZWQ6IEVuYWJsZSBtdWx0aXBsZSB2ZXJzaW9uL2NvbXBvbmVudAorICAgIHJlcXVpcmVtZW50cy4KKwogQ29tbWFuZHMKIF5eXl5eXl5eCiAKLVRoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGNvbW1hbmQgYGBQeXRob25fYWRkX2xpYnJhcnlgYCAod2hlbgorVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgY29tbWFuZCBgYFB5dGhvbjNfYWRkX2xpYnJhcnlgYCAod2hlbgogOnByb3BfZ2JsOmBDTUFLRV9ST0xFYCBpcyBgYFBST0pFQ1RgYCksIHdoaWNoIGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMKIDpjb21tYW5kOmBhZGRfbGlicmFyeWAgYW5kIGFkZHMgYSBkZXBlbmRlbmN5IHRvIHRhcmdldCBgYFB5dGhvbjM6OlB5dGhvbmBgIG9yLAogd2hlbiBsaWJyYXJ5IHR5cGUgaXMgYGBNT0RVTEVgYCwgdG8gdGFyZ2V0IGBgUHl0aG9uMzo6TW9kdWxlYGAgYW5kIHRha2VzIGNhcmUKIG9mIFB5dGhvbiBtb2R1bGUgbmFtaW5nIHJ1bGVzOjoKIAotICBQeXRob24zX2FkZF9saWJyYXJ5IChteV9tb2R1bGUgTU9EVUxFIHNyYzEuY3BwKQorICBQeXRob24zX2FkZF9saWJyYXJ5ICg8bmFtZT4gW1NUQVRJQyB8IFNIQVJFRCB8IE1PRFVMRSBbV0lUSF9TT0FCSV1dCisgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UxPiBbPHNvdXJjZTI+IC4uLl0pCiAKLUlmIGxpYnJhcnkgdHlwZSBpcyBub3Qgc3BlY2lmaWVkLCBgYE1PRFVMRWBgIGlzIGFzc3VtZWQuCitJZiB0aGUgbGlicmFyeSB0eXBlIGlzIG5vdCBzcGVjaWZpZWQsIGBgTU9EVUxFYGAgaXMgYXNzdW1lZC4KKworRm9yIGBgTU9EVUxFYGAgbGlicmFyeSB0eXBlLCBpZiBvcHRpb24gYGBXSVRIX1NPQUJJYGAgaXMgc3BlY2lmaWVkLCB0aGUKK21vZHVsZSBzdWZmaXggd2lsbCBpbmNsdWRlIHRoZSBgYFB5dGhvbjNfU09BQklgYCB2YWx1ZSwgaWYgYW55LgogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKaW5kZXggMzk5Mzk2OC4uMjliMWVmOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIGluOiAgZGlyZWN0b3JpZXMgc291cmNlcyB0c19maWxlcwogICAgICAgICBvcHRpb25zOiBmbGFncyB0byBwYXNzIHRvIGx1cGRhdGUsIHN1Y2ggYXMgLWV4dGVuc2lvbnMgdG8gc3BlY2lmeQogICAgICAgICBleHRlbnNpb25zIGZvciBhIGRpcmVjdG9yeSBzY2FuLgotICAgICAgICBnZW5lcmF0ZXMgY29tbWFuZHMgdG8gY3JlYXRlIC50cyAodmllIGx1cGRhdGUpIGFuZCAucW0KKyAgICAgICAgZ2VuZXJhdGVzIGNvbW1hbmRzIHRvIGNyZWF0ZSAudHMgKHZpYSBsdXBkYXRlKSBhbmQgLnFtCiAgICAgICAgICh2aWEgbHJlbGVhc2UpIC0gZmlsZXMgZnJvbSBkaXJlY3RvcmllcyBhbmQvb3Igc291cmNlcy4gVGhlIHRzIGZpbGVzIGFyZQogICAgICAgICBjcmVhdGVkIGFuZC9vciB1cGRhdGVkIGluIHRoZSBzb3VyY2UgdHJlZSAodW5sZXNzIGdpdmVuIHdpdGggZnVsbCBwYXRocykuCiAgICAgICAgIFRoZSBxbSBmaWxlcyBhcmUgZ2VuZXJhdGVkIGluIHRoZSBidWlsZCB0cmVlLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUnVieS5jbWFrZSBiL01vZHVsZXMvRmluZFJ1YnkuY21ha2UKaW5kZXggN2UwMWZiYy4uMWJkZWU2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kUnVieS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRSdWJ5LmNtYWtlCkBAIC04LDI4OCArOCw1MDUgQEAKIEZpbmQgUnVieQogCiBUaGlzIG1vZHVsZSBmaW5kcyBpZiBSdWJ5IGlzIGluc3RhbGxlZCBhbmQgZGV0ZXJtaW5lcyB3aGVyZSB0aGUKLWluY2x1ZGUgZmlsZXMgYW5kIGxpYnJhcmllcyBhcmUuICBSdWJ5IDEuOCwgMS45LCAyLjAgYW5kIDIuMSBhcmUKK2luY2x1ZGUgZmlsZXMgYW5kIGxpYnJhcmllcyBhcmUuICBSdWJ5IDEuOCB0aHJvdWdoIDIuNyBhcmUKIHN1cHBvcnRlZC4KIAogVGhlIG1pbmltdW0gcmVxdWlyZWQgdmVyc2lvbiBvZiBSdWJ5IGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCi1zdGFuZGFyZCBzeW50YXgsIGUuZy4gIGZpbmRfcGFja2FnZShSdWJ5IDEuOCkKK3N0YW5kYXJkIHN5bnRheCwgZS5nLgogCi1JdCBhbHNvIGRldGVybWluZXMgd2hhdCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBpcy4gIFRoaXMgY29kZSBzZXRzCi10aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKy4uIGNvZGUtYmxvY2s6OiBjbWFrZQogCi1gYFJVQllfRVhFQ1VUQUJMRWBgCisgIGZpbmRfcGFja2FnZShSdWJ5IDIuNS4xIEVYQUNUIFJFUVVJUkVEKQorICAjIE9SCisgIGZpbmRfcGFja2FnZShSdWJ5IDIuNCkKKworSXQgYWxzbyBkZXRlcm1pbmVzIHdoYXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgaXMuCisKK1ZpcnR1YWwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUlZNIGFyZSBoYW5kbGVkIGFzIHdlbGwsIGJ5IHBhc3NpbmcKK3RoZSBhcmd1bWVudCBgYFJ1YnlfRklORF9WSVJUVUFMRU5WYGAKKworUmVzdWx0IFZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXgorCitUaGlzIG1vZHVsZSB3aWxsIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiB5b3VyIHByb2plY3Q6CisKK2BgUnVieV9GT1VORGBgCisgIHNldCB0byB0cnVlIGlmIHJ1Ynkgd2FzIGZvdW5kIHN1Y2Nlc3NmdWxseQorYGBSdWJ5X0VYRUNVVEFCTEVgYAogICBmdWxsIHBhdGggdG8gdGhlIHJ1YnkgYmluYXJ5Ci1gYFJVQllfSU5DTFVERV9ESVJTYGAKK2BgUnVieV9JTkNMVURFX0RJUlNgYAogICBpbmNsdWRlIGRpcnMgdG8gYmUgdXNlZCB3aGVuIHVzaW5nIHRoZSBydWJ5IGxpYnJhcnkKLWBgUlVCWV9MSUJSQVJZYGAKLSAgZnVsbCBwYXRoIHRvIHRoZSBydWJ5IGxpYnJhcnkKLWBgUlVCWV9WRVJTSU9OYGAKK2BgUnVieV9MSUJSQVJJRVNgYAorICBsaWJyYXJpZXMgbmVlZGVkIHRvIHVzZSBydWJ5IGZyb20gQy4KK2BgUnVieV9WRVJTSU9OYGAKICAgdGhlIHZlcnNpb24gb2YgcnVieSB3aGljaCB3YXMgZm91bmQsIGUuZy4gIjEuOC43IgotYGBSVUJZX0ZPVU5EYGAKLSAgc2V0IHRvIHRydWUgaWYgcnVieSB3cyBmb3VuZCBzdWNjZXNzZnVsbHkKK2BgUnVieV9WRVJTSU9OX01BSk9SYGAKKyAgUnVieSBtYWpvciB2ZXJzaW9uLgorYGBSdWJ5X1ZFUlNJT05fTUlOT1JgYAorICBSdWJ5IG1pbm9yIHZlcnNpb24uCitgYFJ1YnlfVkVSU0lPTl9QQVRDSGBgCisgIFJ1YnkgcGF0Y2ggdmVyc2lvbi4KKwogCiBBbHNvOgogCi1gYFJVQllfSU5DTFVERV9QQVRIYGAKLSAgc2FtZSBhcyBSVUJZX0lOQ0xVREVfRElSUywgb25seSBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCBkb24ndCB1c2UgaXQKK2BgUnVieV9JTkNMVURFX1BBVEhgYAorICBzYW1lIGFzIFJ1YnlfSU5DTFVERV9ESVJTLCBvbmx5IHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIGRvbid0IHVzZSBpdAorCitIaW50cworXl5eXl4KKworYGBSdWJ5X1JPT1RfRElSYGAKKyAgRGVmaW5lIHRoZSByb290IGRpcmVjdG9yeSBvZiBhIFJ1YnkgaW5zdGFsbGF0aW9uLgorCitgYFJ1YnlfRklORF9WSVJUVUFMRU5WYGAKKyAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzIHRoZSBoYW5kbGluZyBvZiB2aXJ0dWFsIGVudmlyb25tZW50cyBtYW5hZ2VkIGJ5CisgIGBgcnZtYGAuIEl0IGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGEgdmlydHVhbCBlbnZpcm9ubWVudAorICBpcyBhY3RpdmUgKGkuZS4gdGhlIGBgcnZtYGAgc2NyaXB0IGhhcyBiZWVuIGV2YWx1YXRlZCBvciBhdCBsZWFzdCB0aGUKKyAgYGBNWV9SVUJZX0hPTUVgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQpLgorICBUaGUgYGBSdWJ5X0ZJTkRfVklSVFVBTEVOVmBgIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gZW1wdHkgb3IKKyAgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgKiBgYEZJUlNUYGA6IFRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIHVzZWQgYmVmb3JlIGFueSBvdGhlciBzdGFuZGFyZAorICAgIHBhdGhzIHRvIGxvb2stdXAgZm9yIHRoZSBpbnRlcnByZXRlci4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKyAgKiBgYE9OTFlgYDogT25seSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpcyB1c2VkIHRvIGxvb2stdXAgZm9yIHRoZQorICAgIGludGVycHJldGVyLgorICAqIGBgU1RBTkRBUkRgYDogVGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgbm90IHVzZWQgdG8gbG9vay11cCBmb3IgdGhlCisgICAgaW50ZXJwcmV0ZXIgKGFzc3VtaW5nIGl0IGlzbid0IHN0aWxsIGluIHRoZSBQQVRILi4uKQorCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCi0jICAgUlVCWV9BUkNIRElSPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAImFyY2hkaXIiQDo+QCknYAotIyAgIFJVQllfU0lURUFSQ0hESVI9YCRSVUJZIC1yIHJiY29uZmlnIC1lICdwcmludGYoIiVzIixDb25maWc6OkNPTkZJR0A8OkAic2l0ZWFyY2hkaXIiQDo+QCknYAotIyAgIFJVQllfU0lURURJUj1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJzaXRlbGliZGlyIkA6PkApJ2AKLSMgICBSVUJZX0xJQkRJUj1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJsaWJkaXIiQDo+QCknYAotIyAgIFJVQllfTElCUlVCWUFSRz1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJMSUJSVUJZQVJHX1NIQVJFRCJAOj5AKSdgCisjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisjIERlZmluZSBjYW1lbCBjYXNlIHZlcnNpb25zIG9mIGlucHV0IHZhcmlhYmxlcworZm9yZWFjaChVUFBFUgorICAgIFJVQllfRVhFQ1VUQUJMRQorICAgIFJVQllfTElCUkFSWQorICAgIFJVQllfSU5DTFVERV9ESVIKKyAgICBSVUJZX0NPTkZJR19JTkNMVURFX0RJUgorICAgICkKKyAgICBpZiAoREVGSU5FRCAke1VQUEVSfSkKKyAgICAgIHN0cmluZyhSRVBMQUNFICJSVUJZXyIgIlJ1YnlfIiBDYW1lbCAke1VQUEVSfSkKKyAgICAgICAgaWYgKE5PVCBERUZJTkVEICR7Q2FtZWx9KQorICAgICAgICAgICAgc2V0KCR7Q2FtZWx9ICR7JHtVUFBFUn19KQorICAgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKKyMgICBSdWJ5X0FSQ0hESVI9YCRSVUJZIC1yIHJiY29uZmlnIC1lICdwcmludGYoIiVzIixDb25maWc6OkNPTkZJR0A8OkAiYXJjaGRpciJAOj5AKSdgCisjICAgUnVieV9TSVRFQVJDSERJUj1gJFJVQlkgLXIgcmJjb25maWcgLWUgJ3ByaW50ZigiJXMiLENvbmZpZzo6Q09ORklHQDw6QCJzaXRlYXJjaGRpciJAOj5AKSdgCisjICAgUnVieV9TSVRFRElSPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAInNpdGVsaWJkaXIiQDo+QCknYAorIyAgIFJ1YnlfTElCRElSPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAImxpYmRpciJAOj5AKSdgCisjICAgUnVieV9MSUJSVUJZQVJHPWAkUlVCWSAtciByYmNvbmZpZyAtZSAncHJpbnRmKCIlcyIsQ29uZmlnOjpDT05GSUdAPDpAIkxJQlJVQllBUkdfU0hBUkVEIkA6PkApJ2AKIAogIyB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGdldCBkZWJ1ZyBvdXRwdXQgZm9yIHRoaXMgZmlsZQotIyBzZXQoX1JVQllfREVCVUdfT1VUUFVUIFRSVUUpCisjIHNldChfUnVieV9ERUJVR19PVVRQVVQgVFJVRSkKIAogIyBEZXRlcm1pbmUgdGhlIGxpc3Qgb2YgcG9zc2libGUgbmFtZXMgb2YgdGhlIHJ1YnkgZXhlY3V0YWJsZSBkZXBlbmRpbmcKICMgb24gd2hpY2ggdmVyc2lvbiBvZiBydWJ5IGlzIHJlcXVpcmVkCi1zZXQoX1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5KQorc2V0KF9SdWJ5X1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVMgcnVieSkKIAotIyBpZiAxLjkgaXMgcmVxdWlyZWQsIGRvbid0IGxvb2sgZm9yIHJ1YnkxOCBhbmQgcnVieTEuOCwgZGVmYXVsdCB0byB2ZXJzaW9uIDEuOAotaWYoREVGSU5FRCBSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUiBBTkQgREVGSU5FRCBSdWJ5X0ZJTkRfVkVSU0lPTl9NSU5PUikKLSAgc2V0KFJ1YnlfRklORF9WRVJTSU9OX1NIT1JUX05PRE9UICIke1J1YnlfRklORF9WRVJTSU9OX01BSk9SfSR7UlVCWV9GSU5EX1ZFUlNJT05fTUlOT1J9IikKLSAgIyB3ZSBjYW4ndCBjb25zdHJ1Y3QgdGhhdCBpZiBvbmx5IG1ham9yIHZlcnNpb24gaXMgZ2l2ZW4KLSAgc2V0KF9SVUJZX1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVMKLSAgICBydWJ5JHtSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUn0uJHtSdWJ5X0ZJTkRfVkVSU0lPTl9NSU5PUn0KLSAgICBydWJ5JHtSdWJ5X0ZJTkRfVkVSU0lPTl9NQUpPUn0ke1J1YnlfRklORF9WRVJTSU9OX01JTk9SfQotICAgICR7X1JVQllfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FU30pCi1lbHNlKCkKLSAgc2V0KFJ1YnlfRklORF9WRVJTSU9OX1NIT1JUX05PRE9UICIxOCIpCisjIElmIG5vdCBzcGVjaWZpZWQsIGFsbG93IGV2ZXJ5dGhpbmcgYXMgZmFyIGJhY2sgYXMgMS44LjAKK2lmKE5PVCBERUZJTkVEIFJ1YnlfRklORF9WRVJTSU9OX01BSk9SKQorICBzZXQoUnVieV9GSU5EX1ZFUlNJT04gIjEuOC4wIikKKyAgc2V0KFJ1YnlfRklORF9WRVJTSU9OX01BSk9SIDEpCisgIHNldChSdWJ5X0ZJTkRfVkVSU0lPTl9NSU5PUiA4KQorICBzZXQoUnVieV9GSU5EX1ZFUlNJT05fUEFUQ0ggMCkKIGVuZGlmKCkKIAotaWYoTk9UIFJ1YnlfRklORF9WRVJTSU9OX0VYQUNUKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjQgcnVieTI0KQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjMgcnVieTIzKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjIgcnVieTIyKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjEgcnVieTIxKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkyLjAgcnVieTIwKQotICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkxLjkgcnVieTE5KQoraWYoX1J1YnlfREVCVUdfT1VUUFVUKQorICBtZXNzYWdlKCJSdWJ5X0ZJTkRfVkVSU0lPTj0ke1J1YnlfRklORF9WRVJTSU9OfSIpCisgIG1lc3NhZ2UoIlJ1YnlfRklORF9WRVJTSU9OX01BSk9SPSR7UnVieV9GSU5EX1ZFUlNJT05fTUFKT1J9IikKKyAgbWVzc2FnZSgiUnVieV9GSU5EX1ZFUlNJT05fTUlOT1I9JHtSdWJ5X0ZJTkRfVkVSU0lPTl9NSU5PUn0iKQorICBtZXNzYWdlKCJSdWJ5X0ZJTkRfVkVSU0lPTl9QQVRDSD0ke1J1YnlfRklORF9WRVJTSU9OX1BBVENIfSIpCitlbmRpZigpCiAKLSAgIyBpZiB3ZSB3YW50IGEgdmVyc2lvbiBiZWxvdyAxLjksIGFsc28gbG9vayBmb3IgcnVieSAxLjgKLSAgaWYoIiR7UnVieV9GSU5EX1ZFUlNJT05fU0hPUlRfTk9ET1R9IiBWRVJTSU9OX0xFU1MgIjE5IikKLSAgICBsaXN0KEFQUEVORCBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTIHJ1YnkxLjggcnVieTE4KQorc2V0KFJ1YnlfRklORF9WRVJTSU9OX1NIT1JUX05PRE9UICIke1J1YnlfRklORF9WRVJTSU9OX01BSk9SfSR7UnVieV9GSU5EX1ZFUlNJT05fTUlOT1J9IikKKworIyBTZXQgbmFtZSBvZiBwb3NzaWJsZSBleGVjdXRhYmxlcywgaWdub3JpbmcgdGhlIG1pbm9yCisjIEVnOgorIyAyLjEuMSA9PiBmcm9tIHJ1YnkyNyB0byBydWJ5MjEgaW5jbHVkZWQKKyMgMi4xICAgPT4gZnJvbSBydWJ5MjcgdG8gcnVieTIxIGluY2x1ZGVkCisjIDIgICAgID0+IGZyb20gcnVieTI2IHRvIHJ1YnkyMCBpbmNsdWRlZAorIyBlbXB0eSA9PiBmcm9tIHJ1YnkyNyB0byBydWJ5MTggaW5jbHVkZWQKK2lmKE5PVCBSdWJ5X0ZJTkRfVkVSU0lPTl9FWEFDVCkKKworICBmb3JlYWNoKF9ydWJ5X3ZlcnNpb24gUkFOR0UgMjcgMTggLTEpCisgICAgc3RyaW5nKFNVQlNUUklORyAiJHtfcnVieV92ZXJzaW9ufSIgMCAxIF9ydWJ5X21ham9yX3ZlcnNpb24pCisgICAgc3RyaW5nKFNVQlNUUklORyAiJHtfcnVieV92ZXJzaW9ufSIgMSAxIF9ydWJ5X21pbm9yX3ZlcnNpb24pCisKKyAgICBpZihOT1QgIiR7X3J1YnlfbWFqb3JfdmVyc2lvbn0ke19ydWJ5X21pbm9yX3ZlcnNpb259IiBWRVJTSU9OX0xFU1MgJHtSdWJ5X0ZJTkRfVkVSU0lPTl9TSE9SVF9OT0RPVH0pCisgICAgICAjIEFwcGVuZCBib3RoIHJ1YnlYLlkgYW5kIHJ1YnlYWSAoZWc6IHJ1YnkyLjcgcnVieTI3KQorICAgICAgbGlzdChBUFBFTkQgX1J1YnlfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUyBydWJ5JHtfcnVieV9tYWpvcl92ZXJzaW9ufS4ke19ydWJ5X21pbm9yX3ZlcnNpb259IHJ1Ynkke19ydWJ5X21ham9yX3ZlcnNpb259JHtfcnVieV9taW5vcl92ZXJzaW9ufSkKKyAgICBlbHNlKCkKKyAgICAgIGJyZWFrKCkKKyAgICBlbmRpZigpCisKKyAgZW5kZm9yZWFjaCgpCisKKyAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTKQorZW5kaWYoKQorCisjIHZpcnR1YWwgZW52aXJvbm1lbnRzIGhhbmRsaW5nIChlZyBSVk0pCitpZiAoREVGSU5FRCBFTlZ7TVlfUlVCWV9IT01FfSkKKyAgaWYoX1J1YnlfREVCVUdfT1VUUFVUKQorICAgIG1lc3NhZ2UoIk15IHJ1YnkgaG9tZSBpcyBkZWZpbmVkOiAkRU5We01ZX1JVQllfSE9NRX0iKQogICBlbmRpZigpCiAKLSAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTKQorICBpZiAoREVGSU5FRCBSdWJ5X0ZJTkRfVklSVFVBTEVOVikKKyAgICBpZiAoTk9UIFJ1YnlfRklORF9WSVJUVUFMRU5WIE1BVENIRVMgIl4oRklSU1R8T05MWXxTVEFOREFSRCkkIikKKyAgICAgIG1lc3NhZ2UgKEFVVEhPUl9XQVJOSU5HICJGaW5kUnVieTogJHtSdWJ5X0ZJTkRfVklSVFVBTEVOVn06IGludmFsaWQgdmFsdWUgZm9yICdSdWJ5X0ZJTkRfVklSVFVBTEVOVicuICdGSVJTVCcsICdPTkxZJyBvciAnU1RBTkRBUkQnIGV4cGVjdGVkLiAnRklSU1QnIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICBzZXQgKF9SdWJ5X0ZJTkRfVklSVFVBTEVOViAiRklSU1QiKQorICAgIGVsc2UoKQorICAgICAgc2V0IChfUnVieV9GSU5EX1ZJUlRVQUxFTlYgJHtSdWJ5X0ZJTkRfVklSVFVBTEVOVn0pCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBzZXQgKF9SdWJ5X0ZJTkRfVklSVFVBTEVOViBGSVJTVCkKKyAgZW5kaWYoKQorZWxzZSgpCisgIGlmIChERUZJTkVEIFJ1YnlfRklORF9WSVJUVUFMRU5WKQorICAgIG1lc3NhZ2UoIkVudmlyb25tZW50IHZhcmlhYmxlIE1ZX1JVQllfSE9NRSBpc24ndCBzZXQsIGRlZmF1bHRpbmcgYmFjayB0byBSdWJ5X0ZJTkRfVklSVFVBTEVOVj1TVEFOREFSRCIpCisgIGVuZGlmKCkKKyAgc2V0IChfUnVieV9GSU5EX1ZJUlRVQUxFTlYgU1RBTkRBUkQpCiBlbmRpZigpCiAKLWZpbmRfcHJvZ3JhbShSVUJZX0VYRUNVVEFCTEUgTkFNRVMgJHtfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTfSkKK2lmKF9SdWJ5X0RFQlVHX09VVFBVVCkKKyAgbWVzc2FnZSgiX1J1YnlfUE9TU0lCTEVfRVhFQ1VUQUJMRV9OQU1FUz0ke19SdWJ5X1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVN9IikKKyAgbWVzc2FnZSgiX1J1YnlfRklORF9WSVJUVUFMRU5WPSR7X1J1YnlfRklORF9WSVJUVUFMRU5WfSIpCitlbmRpZigpCiAKLWlmKFJVQllfRVhFQ1VUQUJMRSAgQU5EIE5PVCAgUlVCWV9WRVJTSU9OX01BSk9SKQorZnVuY3Rpb24gKF9SVUJZX1ZBTElEQVRFX0lOVEVSUFJFVEVSKQorICBpZiAoTk9UIFJ1YnlfRVhFQ1VUQUJMRSkKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgY21ha2VfcGFyc2VfYXJndW1lbnRzIChQQVJTRV9BUkdWIDAgX1JWSSAiRVhBQ1Q7Q0hFQ0tfRVhJU1RTIiAiIiAiIikKKyAgaWYgKF9SVklfVU5QQVJTRURfQVJHVU1FTlRTKQorICAgIHNldCAoZXhwZWN0ZWRfdmVyc2lvbiAke19SVklfVU5QQVJTRURfQVJHVU1FTlRTfSkKKyAgZWxzZSgpCisgICAgdW5zZXQgKGV4cGVjdGVkX3ZlcnNpb24pCisgIGVuZGlmKCkKKworICBpZiAoX1JWSV9DSEVDS19FWElTVFMgQU5EIE5PVCBFWElTVFMgIiR7UnVieV9FWEVDVVRBQkxFfSIpCisgICAgIyBpbnRlcnByZXRlciBkb2VzIG5vdCBleGlzdCBhbnltb3JlCisgICAgc2V0IChfUnVieV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IGZpbmQgdGhlIGludGVycHJldGVyIFwiJHtSdWJ5X0VYRUNVVEFCTEV9XCIiKQorICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgUnVieV9FWEVDVVRBQkxFIFBST1BFUlRZIFZBTFVFICJSdWJ5X0VYRUNVVEFCTEUtTk9URk9VTkQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICAjIENoZWNrIHRoZSB2ZXJzaW9uIGl0IHJldHVybnMKKyAgIyBleGVjdXRhYmxlIGZvdW5kIG11c3QgaGF2ZSBhIHNwZWNpZmljIHZlcnNpb24KKyAgZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke1J1YnlfRVhFQ1VUQUJMRX0iIC1lICJwdXRzIFJVQllfVkVSU0lPTiIKKyAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CisgICAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAorICAgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorICBpZiAocmVzdWx0IE9SIChfUlZJX0VYQUNUIEFORCBOT1QgdmVyc2lvbiBWRVJTSU9OX0VRVUFMIGV4cGVjdGVkX3ZlcnNpb24pIE9SICh2ZXJzaW9uIFZFUlNJT05fTEVTUyBleHBlY3RlZF92ZXJzaW9uKSkKKyAgICAjIGludGVycHJldGVyIG5vdCB1c2FibGUgb3IgaGFzIHdyb25nIG1ham9yIHZlcnNpb24KKyAgICBpZiAocmVzdWx0KQorICAgICAgc2V0IChfUnVieV9JbnRlcnByZXRlcl9SRUFTT05fRkFJTFVSRSAiQ2Fubm90IHVzZSB0aGUgaW50ZXJwcmV0ZXIgXCIke1J1YnlfRVhFQ1VUQUJMRX1cIiIpCisgICAgZWxzZSgpCisgICAgICBzZXQgKF9SdWJ5X0ludGVycHJldGVyX1JFQVNPTl9GQUlMVVJFICJXcm9uZyBtYWpvciB2ZXJzaW9uIGZvciB0aGUgaW50ZXJwcmV0ZXIgXCIke1J1YnlfRVhFQ1VUQUJMRX1cIiIpCisgICAgZW5kaWYoKQorICAgIHNldF9wcm9wZXJ0eSAoQ0FDSEUgUnVieV9FWEVDVVRBQkxFIFBST1BFUlRZIFZBTFVFICJSdWJ5X0VYRUNVVEFCTEUtTk9URk9VTkQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworZW5kZnVuY3Rpb24oKQorCit3aGlsZSgxKQorICAjIFZpcnR1YWwgZW52aXJvbm1lbnRzIGhhbmRsaW5nCisgIGlmKF9SdWJ5X0ZJTkRfVklSVFVBTEVOViBNQVRDSEVTICJeKEZJUlNUfE9OTFkpJCIpCisgICAgaWYoX1J1YnlfREVCVUdfT1VUUFVUKQorICAgICAgbWVzc2FnZSgiSW5zaWRlIE1hdGNoZXMiKQorICAgIGVuZGlmKCkKKyAgICBmaW5kX3Byb2dyYW0gKFJ1YnlfRVhFQ1VUQUJMRQorICAgICAgICAgICAgICAgICAgTkFNRVMgJHtfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTfQorICAgICAgICAgICAgICAgICAgTkFNRVNfUEVSX0RJUgorICAgICAgICAgICAgICAgICAgUEFUSFMgRU5WIE1ZX1JVQllfSE9NRQorICAgICAgICAgICAgICAgICAgUEFUSF9TVUZGSVhFUyBiaW4gU2NyaXB0cworICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfUEFUSAorICAgICAgICAgICAgICAgICAgTk9fQ01BS0VfRU5WSVJPTk1FTlRfUEFUSAorICAgICAgICAgICAgICAgICAgTk9fU1lTVEVNX0VOVklST05NRU5UX1BBVEgKKyAgICAgICAgICAgICAgICAgIE5PX0NNQUtFX1NZU1RFTV9QQVRIKQorCisgICAgaWYoX1J1YnlfREVCVUdfT1VUUFVUKQorICAgICAgbWVzc2FnZSgiUnVieV9FWEVDVVRBQkxFPSR7UnVieV9FWEVDVVRBQkxFfSIpCisgICAgZW5kaWYoKQorCisgICAgX1JVQllfVkFMSURBVEVfSU5URVJQUkVURVIgKCR7UnVieV9GSU5EX1ZFUlNJT059fSkKKyAgICBpZihSdWJ5X0VYRUNVVEFCTEUpCisgICAgICBicmVhaygpCisgICAgZW5kaWYoKQorICAgIGlmKE5PVCBfUnVieV9GSU5EX1ZJUlRVQUxFTlYgU1RSRVFVQUwgIk9OTFkiKQorICAgICAgYnJlYWsoKQorICAgIGVuZGlmKCkKKyAgZWxzZWlmKF9SdWJ5X0RFQlVHX09VVFBVVCkKKyAgICBtZXNzYWdlKCJfUnVieV9GSU5EX1ZJUlRVQUxFTlYgZG9lc24ndCBtYXRjaDogJHtfUnVieV9GSU5EX1ZJUlRVQUxFTlZ9IikKKyAgZW5kaWYoKQorCisgICMgdHJ5IHVzaW5nIHN0YW5kYXJkIHBhdGhzCisgIGZpbmRfcHJvZ3JhbSAoUnVieV9FWEVDVVRBQkxFCisgICAgICAgICAgICAgICAgTkFNRVMgJHtfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTfQorICAgICAgICAgICAgICAgIE5BTUVTX1BFUl9ESVIpCisgIF9SVUJZX1ZBTElEQVRFX0lOVEVSUFJFVEVSICgke1J1YnlfRklORF9WRVJTSU9OfSkKKyAgaWYgKFJ1YnlfRVhFQ1VUQUJMRSkKKyAgICBicmVhaygpCisgIGVuZGlmKCkKKworICBicmVhaygpCitlbmR3aGlsZSgpCisKK2lmKFJ1YnlfRVhFQ1VUQUJMRSBBTkQgTk9UIFJ1YnlfVkVSU0lPTl9NQUpPUikKICAgZnVuY3Rpb24oX1JVQllfQ09ORklHX1ZBUiBSQlZBUiBPVVRWQVIpCi0gICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtSVUJZX0VYRUNVVEFCTEV9IC1yIHJiY29uZmlnIC1lICJwcmludCBSYkNvbmZpZzo6Q09ORklHWycke1JCVkFSfSddIgotICAgICAgUkVTVUxUX1ZBUklBQkxFIF9SVUJZX1NVQ0NFU1MKLSAgICAgIE9VVFBVVF9WQVJJQUJMRSBfUlVCWV9PVVRQVVQKKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1J1YnlfRVhFQ1VUQUJMRX0gLXIgcmJjb25maWcgLWUgInByaW50IFJiQ29uZmlnOjpDT05GSUdbJyR7UkJWQVJ9J10iCisgICAgICBSRVNVTFRfVkFSSUFCTEUgX1J1YnlfU1VDQ0VTUworICAgICAgT1VUUFVUX1ZBUklBQkxFIF9SdWJ5X09VVFBVVAogICAgICAgRVJST1JfUVVJRVQpCi0gICAgaWYoX1JVQllfU1VDQ0VTUyBPUiBfUlVCWV9PVVRQVVQgU1RSRVFVQUwgIiIpCi0gICAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1JVQllfRVhFQ1VUQUJMRX0gLXIgcmJjb25maWcgLWUgInByaW50IENvbmZpZzo6Q09ORklHWycke1JCVkFSfSddIgotICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX1JVQllfU1VDQ0VTUwotICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX1JVQllfT1VUUFVUCisgICAgaWYoX1J1YnlfU1VDQ0VTUyBPUiBfUnVieV9PVVRQVVQgU1RSRVFVQUwgIiIpCisgICAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1J1YnlfRVhFQ1VUQUJMRX0gLXIgcmJjb25maWcgLWUgInByaW50IENvbmZpZzo6Q09ORklHWycke1JCVkFSfSddIgorICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX1J1YnlfU1VDQ0VTUworICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX1J1YnlfT1VUUFVUCiAgICAgICAgIEVSUk9SX1FVSUVUKQogICAgIGVuZGlmKCkKLSAgICBzZXQoJHtPVVRWQVJ9ICIke19SVUJZX09VVFBVVH0iIFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoJHtPVVRWQVJ9ICIke19SdWJ5X09VVFBVVH0iIFBBUkVOVF9TQ09QRSkKICAgZW5kZnVuY3Rpb24oKQogCiAKICAgIyBxdWVyeSB0aGUgcnVieSB2ZXJzaW9uCi0gIF9SVUJZX0NPTkZJR19WQVIoIk1BSk9SIiBSVUJZX1ZFUlNJT05fTUFKT1IpCi0gIF9SVUJZX0NPTkZJR19WQVIoIk1JTk9SIiBSVUJZX1ZFUlNJT05fTUlOT1IpCi0gIF9SVUJZX0NPTkZJR19WQVIoIlRFRU5ZIiBSVUJZX1ZFUlNJT05fUEFUQ0gpCisgIF9SVUJZX0NPTkZJR19WQVIoIk1BSk9SIiBSdWJ5X1ZFUlNJT05fTUFKT1IpCisgIF9SVUJZX0NPTkZJR19WQVIoIk1JTk9SIiBSdWJ5X1ZFUlNJT05fTUlOT1IpCisgIF9SVUJZX0NPTkZJR19WQVIoIlRFRU5ZIiBSdWJ5X1ZFUlNJT05fUEFUQ0gpCiAKICAgIyBxdWVyeSB0aGUgZGlmZmVyZW50IGRpcmVjdG9yaWVzCi0gIF9SVUJZX0NPTkZJR19WQVIoImFyY2hkaXIiIFJVQllfQVJDSF9ESVIpCi0gIF9SVUJZX0NPTkZJR19WQVIoImFyY2giIFJVQllfQVJDSCkKLSAgX1JVQllfQ09ORklHX1ZBUigicnVieWhkcmRpciIgUlVCWV9IRFJfRElSKQotICBfUlVCWV9DT05GSUdfVkFSKCJydWJ5YXJjaGhkcmRpciIgUlVCWV9BUkNISERSX0RJUikKLSAgX1JVQllfQ09ORklHX1ZBUigibGliZGlyIiBSVUJZX1BPU1NJQkxFX0xJQl9ESVIpCi0gIF9SVUJZX0NPTkZJR19WQVIoInJ1YnlsaWJkaXIiIFJVQllfUlVCWV9MSUJfRElSKQorICBfUlVCWV9DT05GSUdfVkFSKCJhcmNoZGlyIiBSdWJ5X0FSQ0hfRElSKQorICBfUlVCWV9DT05GSUdfVkFSKCJhcmNoIiBSdWJ5X0FSQ0gpCisgIF9SVUJZX0NPTkZJR19WQVIoInJ1YnloZHJkaXIiIFJ1YnlfSERSX0RJUikKKyAgX1JVQllfQ09ORklHX1ZBUigicnVieWFyY2hoZHJkaXIiIFJ1YnlfQVJDSEhEUl9ESVIpCisgIF9SVUJZX0NPTkZJR19WQVIoImxpYmRpciIgUnVieV9QT1NTSUJMRV9MSUJfRElSKQorICBfUlVCWV9DT05GSUdfVkFSKCJydWJ5bGliZGlyIiBSdWJ5X1JVQllfTElCX0RJUikKIAogICAjIHNpdGVfcnVieQotICBfUlVCWV9DT05GSUdfVkFSKCJzaXRlYXJjaGRpciIgUlVCWV9TSVRFQVJDSF9ESVIpCi0gIF9SVUJZX0NPTkZJR19WQVIoInNpdGVsaWJkaXIiIFJVQllfU0lURUxJQl9ESVIpCisgIF9SVUJZX0NPTkZJR19WQVIoInNpdGVhcmNoZGlyIiBSdWJ5X1NJVEVBUkNIX0RJUikKKyAgX1JVQllfQ09ORklHX1ZBUigic2l0ZWxpYmRpciIgUnVieV9TSVRFTElCX0RJUikKIAogICAjIHZlbmRvcl9ydWJ5IGF2YWlsYWJsZSA/Ci0gIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7UlVCWV9FWEVDVVRBQkxFfSAtciB2ZW5kb3Itc3BlY2lmaWMgLWUgInByaW50ICd0cnVlJyIKLSAgICBPVVRQVVRfVkFSSUFCTEUgUlVCWV9IQVNfVkVORE9SX1JVQlkgIEVSUk9SX1FVSUVUKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke1J1YnlfRVhFQ1VUQUJMRX0gLXIgdmVuZG9yLXNwZWNpZmljIC1lICJwcmludCAndHJ1ZSciCisgICAgT1VUUFVUX1ZBUklBQkxFIFJ1YnlfSEFTX1ZFTkRPUl9SVUJZICBFUlJPUl9RVUlFVCkKIAotICBpZihSVUJZX0hBU19WRU5ET1JfUlVCWSkKLSAgICBfUlVCWV9DT05GSUdfVkFSKCJ2ZW5kb3JsaWJkaXIiIFJVQllfVkVORE9STElCX0RJUikKLSAgICBfUlVCWV9DT05GSUdfVkFSKCJ2ZW5kb3JhcmNoZGlyIiBSVUJZX1ZFTkRPUkFSQ0hfRElSKQorICBpZihSdWJ5X0hBU19WRU5ET1JfUlVCWSkKKyAgICBfUlVCWV9DT05GSUdfVkFSKCJ2ZW5kb3JsaWJkaXIiIFJ1YnlfVkVORE9STElCX0RJUikKKyAgICBfUlVCWV9DT05GSUdfVkFSKCJ2ZW5kb3JhcmNoZGlyIiBSdWJ5X1ZFTkRPUkFSQ0hfRElSKQogICBlbmRpZigpCiAKICAgIyBzYXZlIHRoZSByZXN1bHRzIGluIHRoZSBjYWNoZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHJ1biBydWJ5IHRoZSBuZXh0IHRpbWUgYWdhaW4KLSAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAgICAke1JVQllfVkVSU0lPTl9NQUpPUn0gICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgbWFqb3IgdmVyc2lvbiIgRk9SQ0UpCi0gIHNldChSVUJZX1ZFUlNJT05fTUlOT1IgICAgJHtSVUJZX1ZFUlNJT05fTUlOT1J9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IG1pbm9yIHZlcnNpb24iIEZPUkNFKQotICBzZXQoUlVCWV9WRVJTSU9OX1BBVENIICAgICR7UlVCWV9WRVJTSU9OX1BBVENIfSAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBwYXRjaCB2ZXJzaW9uIiBGT1JDRSkKLSAgc2V0KFJVQllfQVJDSF9ESVIgICAgICAgICAke1JVQllfQVJDSF9ESVJ9ICAgICAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgYXJjaCBkaXIiIEZPUkNFKQotICBzZXQoUlVCWV9IRFJfRElSICAgICAgICAgICR7UlVCWV9IRFJfRElSfSAgICAgICAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBoZWFkZXIgZGlyICgxLjkrKSIgRk9SQ0UpCi0gIHNldChSVUJZX0FSQ0hIRFJfRElSICAgICAgJHtSVUJZX0FSQ0hIRFJfRElSfSAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IGFyY2ggaGVhZGVyIGRpciAoMi4wKykiIEZPUkNFKQotICBzZXQoUlVCWV9QT1NTSUJMRV9MSUJfRElSICR7UlVCWV9QT1NTSUJMRV9MSUJfRElSfSBDQUNIRSBQQVRIICJUaGUgUnVieSBsaWIgZGlyIiBGT1JDRSkKLSAgc2V0KFJVQllfUlVCWV9MSUJfRElSICAgICAke1JVQllfUlVCWV9MSUJfRElSfSAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgcnVieS1saWIgZGlyIiBGT1JDRSkKLSAgc2V0KFJVQllfU0lURUFSQ0hfRElSICAgICAke1JVQllfU0lURUFSQ0hfRElSfSAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1Ynkgc2l0ZSBhcmNoIGRpciIgRk9SQ0UpCi0gIHNldChSVUJZX1NJVEVMSUJfRElSICAgICAgJHtSVUJZX1NJVEVMSUJfRElSfSAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHNpdGUgbGliIGRpciIgRk9SQ0UpCi0gIHNldChSVUJZX0hBU19WRU5ET1JfUlVCWSAgJHtSVUJZX0hBU19WRU5ET1JfUlVCWX0gIENBQ0hFIEJPT0wgIlZlbmRvciBSdWJ5IGlzIGF2YWlsYWJsZSIgRk9SQ0UpCi0gIHNldChSVUJZX1ZFTkRPUkFSQ0hfRElSICAgJHtSVUJZX1ZFTkRPUkFSQ0hfRElSfSAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHZlbmRvciBhcmNoIGRpciIgRk9SQ0UpCi0gIHNldChSVUJZX1ZFTkRPUkxJQl9ESVIgICAgJHtSVUJZX1ZFTkRPUkxJQl9ESVJ9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHZlbmRvciBsaWIgZGlyIiBGT1JDRSkKKyAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAgICAke1J1YnlfVkVSU0lPTl9NQUpPUn0gICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgbWFqb3IgdmVyc2lvbiIgRk9SQ0UpCisgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgICAgJHtSdWJ5X1ZFUlNJT05fTUlOT1J9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IG1pbm9yIHZlcnNpb24iIEZPUkNFKQorICBzZXQoUnVieV9WRVJTSU9OX1BBVENIICAgICR7UnVieV9WRVJTSU9OX1BBVENIfSAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBwYXRjaCB2ZXJzaW9uIiBGT1JDRSkKKyAgc2V0KFJ1YnlfQVJDSF9ESVIgICAgICAgICAke1J1YnlfQVJDSF9ESVJ9ICAgICAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgYXJjaCBkaXIiIEZPUkNFKQorICBzZXQoUnVieV9IRFJfRElSICAgICAgICAgICR7UnVieV9IRFJfRElSfSAgICAgICAgICBDQUNIRSBQQVRIICJUaGUgUnVieSBoZWFkZXIgZGlyICgxLjkrKSIgRk9SQ0UpCisgIHNldChSdWJ5X0FSQ0hIRFJfRElSICAgICAgJHtSdWJ5X0FSQ0hIRFJfRElSfSAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IGFyY2ggaGVhZGVyIGRpciAoMi4wKykiIEZPUkNFKQorICBzZXQoUnVieV9QT1NTSUJMRV9MSUJfRElSICR7UnVieV9QT1NTSUJMRV9MSUJfRElSfSBDQUNIRSBQQVRIICJUaGUgUnVieSBsaWIgZGlyIiBGT1JDRSkKKyAgc2V0KFJ1YnlfUlVCWV9MSUJfRElSICAgICAke1J1YnlfUlVCWV9MSUJfRElSfSAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1YnkgcnVieS1saWIgZGlyIiBGT1JDRSkKKyAgc2V0KFJ1YnlfU0lURUFSQ0hfRElSICAgICAke1J1YnlfU0lURUFSQ0hfRElSfSAgICAgQ0FDSEUgUEFUSCAiVGhlIFJ1Ynkgc2l0ZSBhcmNoIGRpciIgRk9SQ0UpCisgIHNldChSdWJ5X1NJVEVMSUJfRElSICAgICAgJHtSdWJ5X1NJVEVMSUJfRElSfSAgICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHNpdGUgbGliIGRpciIgRk9SQ0UpCisgIHNldChSdWJ5X0hBU19WRU5ET1JfUlVCWSAgJHtSdWJ5X0hBU19WRU5ET1JfUlVCWX0gIENBQ0hFIEJPT0wgIlZlbmRvciBSdWJ5IGlzIGF2YWlsYWJsZSIgRk9SQ0UpCisgIHNldChSdWJ5X1ZFTkRPUkFSQ0hfRElSICAgJHtSdWJ5X1ZFTkRPUkFSQ0hfRElSfSAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHZlbmRvciBhcmNoIGRpciIgRk9SQ0UpCisgIHNldChSdWJ5X1ZFTkRPUkxJQl9ESVIgICAgJHtSdWJ5X1ZFTkRPUkxJQl9ESVJ9ICAgIENBQ0hFIFBBVEggIlRoZSBSdWJ5IHZlbmRvciBsaWIgZGlyIiBGT1JDRSkKIAogICBtYXJrX2FzX2FkdmFuY2VkKAotICAgIFJVQllfQVJDSF9ESVIKLSAgICBSVUJZX0FSQ0gKLSAgICBSVUJZX0hEUl9ESVIKLSAgICBSVUJZX0FSQ0hIRFJfRElSCi0gICAgUlVCWV9QT1NTSUJMRV9MSUJfRElSCi0gICAgUlVCWV9SVUJZX0xJQl9ESVIKLSAgICBSVUJZX1NJVEVBUkNIX0RJUgotICAgIFJVQllfU0lURUxJQl9ESVIKLSAgICBSVUJZX0hBU19WRU5ET1JfUlVCWQotICAgIFJVQllfVkVORE9SQVJDSF9ESVIKLSAgICBSVUJZX1ZFTkRPUkxJQl9ESVIKLSAgICBSVUJZX1ZFUlNJT05fTUFKT1IKLSAgICBSVUJZX1ZFUlNJT05fTUlOT1IKLSAgICBSVUJZX1ZFUlNJT05fUEFUQ0gKKyAgICBSdWJ5X0FSQ0hfRElSCisgICAgUnVieV9BUkNICisgICAgUnVieV9IRFJfRElSCisgICAgUnVieV9BUkNISERSX0RJUgorICAgIFJ1YnlfUE9TU0lCTEVfTElCX0RJUgorICAgIFJ1YnlfUlVCWV9MSUJfRElSCisgICAgUnVieV9TSVRFQVJDSF9ESVIKKyAgICBSdWJ5X1NJVEVMSUJfRElSCisgICAgUnVieV9IQVNfVkVORE9SX1JVQlkKKyAgICBSdWJ5X1ZFTkRPUkFSQ0hfRElSCisgICAgUnVieV9WRU5ET1JMSUJfRElSCisgICAgUnVieV9WRVJTSU9OX01BSk9SCisgICAgUnVieV9WRVJTSU9OX01JTk9SCisgICAgUnVieV9WRVJTSU9OX1BBVENICiAgICAgKQogZW5kaWYoKQogCi0jIEluIGNhc2UgUlVCWV9FWEVDVVRBQkxFIGNvdWxkIG5vdCBiZSBleGVjdXRlZCAoZS5nLiBjcm9zcyBjb21waWxpbmcpCisjIEluIGNhc2UgUnVieV9FWEVDVVRBQkxFIGNvdWxkIG5vdCBiZSBleGVjdXRlZCAoZS5nLiBjcm9zcyBjb21waWxpbmcpCiAjIHRyeSB0byBkZXRlY3Qgd2hpY2ggdmVyc2lvbiB3ZSBmb3VuZC4gVGhpcyBpcyBub3QgdG9vIGdvb2QuCi1pZihSVUJZX0VYRUNVVEFCTEUgQU5EIE5PVCBSVUJZX1ZFUlNJT05fTUFKT1IpCitpZihSdWJ5X0VYRUNVVEFCTEUgQU5EIE5PVCBSdWJ5X1ZFUlNJT05fTUFKT1IpCiAgICMgYnkgZGVmYXVsdCBhc3N1bWUgMS44LjAKLSAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAxKQotICBzZXQoUlVCWV9WRVJTSU9OX01JTk9SIDgpCi0gIHNldChSVUJZX1ZFUlNJT05fUEFUQ0ggMCkKKyAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAxKQorICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDgpCisgIHNldChSdWJ5X1ZFUlNJT05fUEFUQ0ggMCkKICAgIyBjaGVjayB3aGV0aGVyIHdlIGZvdW5kIDEuOS54Ci0gIGlmKCR7UlVCWV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MVxcLj85IikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01BSk9SIDEpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NSU5PUiA5KQorICBpZigke1J1YnlfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTFcXC4/OSIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAxKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgOSkKICAgZW5kaWYoKQogICAjIGNoZWNrIHdoZXRoZXIgd2UgZm91bmQgMi4wLngKLSAgaWYoJHtSVUJZX0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzAiKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUFKT1IgMikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01JTk9SIDApCisgIGlmKCR7UnVieV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj8wIikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01BSk9SIDIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiAwKQogICBlbmRpZigpCiAgICMgY2hlY2sgd2hldGhlciB3ZSBmb3VuZCAyLjEueAotICBpZigke1JVQllfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/MSIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAyKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUlOT1IgMSkKKyAgaWYoJHtSdWJ5X0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzEiKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDEpCiAgIGVuZGlmKCkKICAgIyBjaGVjayB3aGV0aGVyIHdlIGZvdW5kIDIuMi54Ci0gIGlmKCR7UlVCWV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj8yIikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01BSk9SIDIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NSU5PUiAyKQorICBpZigke1J1YnlfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/MiIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAyKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgMikKICAgZW5kaWYoKQogICAjIGNoZWNrIHdoZXRoZXIgd2UgZm91bmQgMi4zLngKLSAgaWYoJHtSVUJZX0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzMiKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUFKT1IgMikKLSAgICBzZXQoUlVCWV9WRVJTSU9OX01JTk9SIDMpCisgIGlmKCR7UnVieV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj8zIikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01BSk9SIDIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiAzKQogICBlbmRpZigpCiAgICMgY2hlY2sgd2hldGhlciB3ZSBmb3VuZCAyLjQueAotICBpZigke1JVQllfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/NCIpCi0gICAgc2V0KFJVQllfVkVSU0lPTl9NQUpPUiAyKQotICAgIHNldChSVUJZX1ZFUlNJT05fTUlOT1IgNCkKKyAgaWYoJHtSdWJ5X0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzQiKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDQpCisgIGVuZGlmKCkKKyAgIyBjaGVjayB3aGV0aGVyIHdlIGZvdW5kIDIuNS54CisgIGlmKCR7UnVieV9FWEVDVVRBQkxFfSBNQVRDSEVTICJydWJ5MlxcLj81IikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01BSk9SIDIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NSU5PUiA1KQorICBlbmRpZigpCisgICMgY2hlY2sgd2hldGhlciB3ZSBmb3VuZCAyLjYueAorICBpZigke1J1YnlfRVhFQ1VUQUJMRX0gTUFUQ0hFUyAicnVieTJcXC4/NiIpCisgICAgc2V0KFJ1YnlfVkVSU0lPTl9NQUpPUiAyKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUlOT1IgNikKKyAgZW5kaWYoKQorICAjIGNoZWNrIHdoZXRoZXIgd2UgZm91bmQgMi43LngKKyAgaWYoJHtSdWJ5X0VYRUNVVEFCTEV9IE1BVENIRVMgInJ1YnkyXFwuPzciKQorICAgIHNldChSdWJ5X1ZFUlNJT05fTUFKT1IgMikKKyAgICBzZXQoUnVieV9WRVJTSU9OX01JTk9SIDcpCiAgIGVuZGlmKCkKIGVuZGlmKCkKIAotaWYoUlVCWV9WRVJTSU9OX01BSk9SKQotICBzZXQoUlVCWV9WRVJTSU9OICIke1JVQllfVkVSU0lPTl9NQUpPUn0uJHtSVUJZX1ZFUlNJT05fTUlOT1J9LiR7UlVCWV9WRVJTSU9OX1BBVENIfSIpCi0gIHNldChfUlVCWV9WRVJTSU9OX1NIT1JUICIke1JVQllfVkVSU0lPTl9NQUpPUn0uJHtSVUJZX1ZFUlNJT05fTUlOT1J9IikKLSAgc2V0KF9SVUJZX1ZFUlNJT05fU0hPUlRfTk9ET1QgIiR7UlVCWV9WRVJTSU9OX01BSk9SfSR7UlVCWV9WRVJTSU9OX01JTk9SfSIpCi0gIHNldChfUlVCWV9OT0RPVF9WRVJTSU9OICIke1JVQllfVkVSU0lPTl9NQUpPUn0ke1JVQllfVkVSU0lPTl9NSU5PUn0ke1JVQllfVkVSU0lPTl9QQVRDSH0iKQoraWYoUnVieV9WRVJTSU9OX01BSk9SKQorICBzZXQoUnVieV9WRVJTSU9OICIke1J1YnlfVkVSU0lPTl9NQUpPUn0uJHtSdWJ5X1ZFUlNJT05fTUlOT1J9LiR7UnVieV9WRVJTSU9OX1BBVENIfSIpCisgIHNldChfUnVieV9WRVJTSU9OX1NIT1JUICIke1J1YnlfVkVSU0lPTl9NQUpPUn0uJHtSdWJ5X1ZFUlNJT05fTUlOT1J9IikKKyAgc2V0KF9SdWJ5X1ZFUlNJT05fU0hPUlRfTk9ET1QgIiR7UnVieV9WRVJTSU9OX01BSk9SfSR7UnVieV9WRVJTSU9OX01JTk9SfSIpCisgIHNldChfUnVieV9OT0RPVF9WRVJTSU9OICIke1J1YnlfVkVSU0lPTl9NQUpPUn0ke1J1YnlfVkVSU0lPTl9NSU5PUn0ke1J1YnlfVkVSU0lPTl9QQVRDSH0iKQogZW5kaWYoKQogCi1maW5kX3BhdGgoUlVCWV9JTkNMVURFX0RJUgorIyBGSVhNRTogQ3VycmVudGx5IHdlIHJlcXVpcmUgYm90aCB0aGUgaW50ZXJwcmV0ZXIgYW5kIGRldmVsb3BtZW50IGNvbXBvbmVudHMgdG8gYmUgZm91bmQKKyMgaW4gb3JkZXIgdG8gdXNlIGVpdGhlci4gIFNlZSBpc3N1ZSAjMjA0NzQuCitmaW5kX3BhdGgoUnVieV9JTkNMVURFX0RJUgogICBOQU1FUyBydWJ5LmgKICAgSElOVFMKLSAgICAke1JVQllfSERSX0RJUn0KLSAgICAke1JVQllfQVJDSF9ESVJ9Ci0gICAgL3Vzci9saWIvcnVieS8ke19SVUJZX1ZFUlNJT05fU0hPUlR9L2k1ODYtbGludXgtZ251LworICAgICR7UnVieV9IRFJfRElSfQorICAgICR7UnVieV9BUkNIX0RJUn0KKyAgICAvdXNyL2xpYi9ydWJ5LyR7X1J1YnlfVkVSU0lPTl9TSE9SVH0vaTU4Ni1saW51eC1nbnUvCiApCiAKLXNldChSVUJZX0lOQ0xVREVfRElSUyAke1JVQllfSU5DTFVERV9ESVJ9ICkKK3NldChSdWJ5X0lOQ0xVREVfRElSUyAke1J1YnlfSU5DTFVERV9ESVJ9KQogCiAjIGlmIHJ1YnkgPiAxLjggaXMgcmVxdWlyZWQgb3IgaWYgcnVieSA+IDEuOCB3YXMgZm91bmQsIHNlYXJjaCBmb3IgdGhlIGNvbmZpZy5oIGRpcgotaWYoICIke1J1YnlfRklORF9WRVJTSU9OX1NIT1JUX05PRE9UfSIgR1JFQVRFUiAxOCAgT1IgICIke19SVUJZX1ZFUlNJT05fU0hPUlRfTk9ET1R9IiBHUkVBVEVSIDE4ICBPUiAgUlVCWV9IRFJfRElSKQotICBmaW5kX3BhdGgoUlVCWV9DT05GSUdfSU5DTFVERV9ESVIKK2lmKCBSdWJ5X0ZJTkRfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjEuOSIgIE9SICBSdWJ5X1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICIxLjkiICBPUiAgUnVieV9IRFJfRElSKQorICBmaW5kX3BhdGgoUnVieV9DT05GSUdfSU5DTFVERV9ESVIKICAgICBOQU1FUyBydWJ5L2NvbmZpZy5oICBjb25maWcuaAogICAgIEhJTlRTCi0gICAgICAke1JVQllfSERSX0RJUn0vJHtSVUJZX0FSQ0h9Ci0gICAgICAke1JVQllfQVJDSF9ESVJ9Ci0gICAgICAke1JVQllfQVJDSEhEUl9ESVJ9CisgICAgICAke1J1YnlfSERSX0RJUn0vJHtSdWJ5X0FSQ0h9CisgICAgICAke1J1YnlfQVJDSF9ESVJ9CisgICAgICAke1J1YnlfQVJDSEhEUl9ESVJ9CiAgICkKIAotICBzZXQoUlVCWV9JTkNMVURFX0RJUlMgJHtSVUJZX0lOQ0xVREVfRElSU30gJHtSVUJZX0NPTkZJR19JTkNMVURFX0RJUn0gKQorICBzZXQoUnVieV9JTkNMVURFX0RJUlMgJHtSdWJ5X0lOQ0xVREVfRElSU30gJHtSdWJ5X0NPTkZJR19JTkNMVURFX0RJUn0gKQogZW5kaWYoKQogCiAKICMgRGV0ZXJtaW5lIHRoZSBsaXN0IG9mIHBvc3NpYmxlIG5hbWVzIGZvciB0aGUgcnVieSBsaWJyYXJ5Ci1zZXQoX1JVQllfUE9TU0lCTEVfTElCX05BTUVTIHJ1YnkgcnVieS1zdGF0aWMgcnVieSR7X1JVQllfVkVSU0lPTl9TSE9SVH0gcnVieSR7X1JVQllfVkVSU0lPTl9TSE9SVF9OT0RPVH0gcnVieS0ke19SVUJZX1ZFUlNJT05fU0hPUlR9IHJ1YnktJHtSVUJZX1ZFUlNJT059KQorc2V0KF9SdWJ5X1BPU1NJQkxFX0xJQl9OQU1FUyBydWJ5IHJ1Ynktc3RhdGljIHJ1Ynkke19SdWJ5X1ZFUlNJT05fU0hPUlR9IHJ1Ynkke19SdWJ5X1ZFUlNJT05fU0hPUlRfTk9ET1R9IHJ1YnktJHtfUnVieV9WRVJTSU9OX1NIT1JUfSBydWJ5LSR7UnVieV9WRVJTSU9OfSkKIAogaWYoV0lOMzIpCi0gIHNldCggX1JVQllfTVNWQ19SVU5USU1FICIiICkKLSAgaWYoIE1TVkNfVkVSU0lPTiBFUVVBTCAxMjAwICkKLSAgICBzZXQoIF9SVUJZX01TVkNfUlVOVElNRSAiNjAiICkKLSAgZW5kaWYoKQotICBpZiggTVNWQ19WRVJTSU9OIEVRVUFMIDEzMDAgKQotICAgIHNldCggX1JVQllfTVNWQ19SVU5USU1FICI3MCIgKQotICBlbmRpZigpCi0gIGlmKCBNU1ZDX1ZFUlNJT04gRVFVQUwgMTMxMCApCi0gICAgc2V0KCBfUlVCWV9NU1ZDX1JVTlRJTUUgIjcxIiApCi0gIGVuZGlmKCkKLSAgaWYoIE1TVkNfVkVSU0lPTiBFUVVBTCAxNDAwICkKLSAgICBzZXQoIF9SVUJZX01TVkNfUlVOVElNRSAiODAiICkKLSAgZW5kaWYoKQotICBpZiggTVNWQ19WRVJTSU9OIEVRVUFMIDE1MDAgKQotICAgIHNldCggX1JVQllfTVNWQ19SVU5USU1FICI5MCIgKQorICBpZihNU1ZDX1RPT0xTRVRfVkVSU0lPTikKKyAgICBzZXQoX1J1YnlfTVNWQ19SVU5USU1FICIke01TVkNfVE9PTFNFVF9WRVJTSU9OfSIpCisgIGVsc2UoKQorICAgIHNldChfUnVieV9NU1ZDX1JVTlRJTUUgIiIpCiAgIGVuZGlmKCkKIAotICBzZXQoX1JVQllfQVJDSF9QUkVGSVggIiIpCisgIHNldChfUnVieV9BUkNIX1BSRUZJWCAiIikKICAgaWYoQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQotICAgIHNldChfUlVCWV9BUkNIX1BSRUZJWCAieDY0LSIpCisgICAgc2V0KF9SdWJ5X0FSQ0hfUFJFRklYICJ4NjQtIikKICAgZW5kaWYoKQogCi0gIGxpc3QoQVBQRU5EIF9SVUJZX1BPU1NJQkxFX0xJQl9OQU1FUwotICAgICAgICAgICAgICIke19SVUJZX0FSQ0hfUFJFRklYfW1zdmNyJHtfUlVCWV9NU1ZDX1JVTlRJTUV9LXJ1Ynkke19SVUJZX05PRE9UX1ZFUlNJT059IgotICAgICAgICAgICAgICIke19SVUJZX0FSQ0hfUFJFRklYfW1zdmNyJHtfUlVCWV9NU1ZDX1JVTlRJTUV9LXJ1Ynkke19SVUJZX05PRE9UX1ZFUlNJT059LXN0YXRpYyIKLSAgICAgICAgICAgICAiJHtfUlVCWV9BUkNIX1BSRUZJWH1tc3ZjcnQtcnVieSR7X1JVQllfTk9ET1RfVkVSU0lPTn0iCi0gICAgICAgICAgICAgIiR7X1JVQllfQVJDSF9QUkVGSVh9bXN2Y3J0LXJ1Ynkke19SVUJZX05PRE9UX1ZFUlNJT059LXN0YXRpYyIgKQorICBsaXN0KEFQUEVORCBfUnVieV9QT1NTSUJMRV9MSUJfTkFNRVMKKyAgICAgICAgICAgICAiJHtfUnVieV9BUkNIX1BSRUZJWH1tc3ZjciR7X1J1YnlfTVNWQ19SVU5USU1FfS1ydWJ5JHtfUnVieV9OT0RPVF9WRVJTSU9OfSIKKyAgICAgICAgICAgICAiJHtfUnVieV9BUkNIX1BSRUZJWH1tc3ZjciR7X1J1YnlfTVNWQ19SVU5USU1FfS1ydWJ5JHtfUnVieV9OT0RPVF9WRVJTSU9OfS1zdGF0aWMiCisgICAgICAgICAgICAgIiR7X1J1YnlfQVJDSF9QUkVGSVh9bXN2Y3J0LXJ1Ynkke19SdWJ5X05PRE9UX1ZFUlNJT059IgorICAgICAgICAgICAgICIke19SdWJ5X0FSQ0hfUFJFRklYfW1zdmNydC1ydWJ5JHtfUnVieV9OT0RPVF9WRVJTSU9OfS1zdGF0aWMiICkKIGVuZGlmKCkKIAotZmluZF9saWJyYXJ5KFJVQllfTElCUkFSWSBOQU1FUyAke19SVUJZX1BPU1NJQkxFX0xJQl9OQU1FU30gSElOVFMgJHtSVUJZX1BPU1NJQkxFX0xJQl9ESVJ9ICkKK2ZpbmRfbGlicmFyeShSdWJ5X0xJQlJBUlkgTkFNRVMgJHtfUnVieV9QT1NTSUJMRV9MSUJfTkFNRVN9IEhJTlRTICR7UnVieV9QT1NTSUJMRV9MSUJfRElSfSApCiAKLWluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKLXNldChfUlVCWV9SRVFVSVJFRF9WQVJTIFJVQllfRVhFQ1VUQUJMRSBSVUJZX0lOQ0xVREVfRElSIFJVQllfTElCUkFSWSkKLWlmKF9SVUJZX1ZFUlNJT05fU0hPUlRfTk9ET1QgR1JFQVRFUiAxOCkKLSAgbGlzdChBUFBFTkQgX1JVQllfUkVRVUlSRURfVkFSUyBSVUJZX0NPTkZJR19JTkNMVURFX0RJUikKK3NldChfUnVieV9SRVFVSVJFRF9WQVJTIFJ1YnlfRVhFQ1VUQUJMRSBSdWJ5X0lOQ0xVREVfRElSIFJ1YnlfTElCUkFSWSkKK2lmKF9SdWJ5X1ZFUlNJT05fU0hPUlRfTk9ET1QgR1JFQVRFUiAxOCkKKyAgbGlzdChBUFBFTkQgX1J1YnlfUkVRVUlSRURfVkFSUyBSdWJ5X0NPTkZJR19JTkNMVURFX0RJUikKIGVuZGlmKCkKIAotaWYoX1JVQllfREVCVUdfT1VUUFVUKQoraWYoX1J1YnlfREVCVUdfT1VUUFVUKQogICBtZXNzYWdlKFNUQVRVUyAiLS0tLS0tLS1GaW5kUnVieS5jbWFrZSBkZWJ1Zy0tLS0tLS0tLS0tLSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJfUlVCWV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTOiAke19SVUJZX1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVN9IikKLSAgbWVzc2FnZShTVEFUVVMgIl9SVUJZX1BPU1NJQkxFX0xJQl9OQU1FUzogJHtfUlVCWV9QT1NTSUJMRV9MSUJfTkFNRVN9IikKLSAgbWVzc2FnZShTVEFUVVMgIlJVQllfQVJDSF9ESVI6ICR7UlVCWV9BUkNIX0RJUn0iKQotICBtZXNzYWdlKFNUQVRVUyAiUlVCWV9IRFJfRElSOiAke1JVQllfSERSX0RJUn0iKQotICBtZXNzYWdlKFNUQVRVUyAiUlVCWV9QT1NTSUJMRV9MSUJfRElSOiAke1JVQllfUE9TU0lCTEVfTElCX0RJUn0iKQotICBtZXNzYWdlKFNUQVRVUyAiRm91bmQgUlVCWV9WRVJTSU9OOiBcIiR7UlVCWV9WRVJTSU9OfVwiICwgc2hvcnQ6IFwiJHtfUlVCWV9WRVJTSU9OX1NIT1JUfVwiLCBub2RvdDogXCIke19SVUJZX1ZFUlNJT05fU0hPUlRfTk9ET1R9XCIiKQotICBtZXNzYWdlKFNUQVRVUyAiX1JVQllfUkVRVUlSRURfVkFSUzogJHtfUlVCWV9SRVFVSVJFRF9WQVJTfSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJSVUJZX0VYRUNVVEFCTEU6ICR7UlVCWV9FWEVDVVRBQkxFfSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJSVUJZX0xJQlJBUlk6ICR7UlVCWV9MSUJSQVJZfSIpCi0gIG1lc3NhZ2UoU1RBVFVTICJSVUJZX0lOQ0xVREVfRElSOiAke1JVQllfSU5DTFVERV9ESVJ9IikKLSAgbWVzc2FnZShTVEFUVVMgIlJVQllfQ09ORklHX0lOQ0xVREVfRElSOiAke1JVQllfQ09ORklHX0lOQ0xVREVfRElSfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJfUnVieV9QT1NTSUJMRV9FWEVDVVRBQkxFX05BTUVTOiAke19SdWJ5X1BPU1NJQkxFX0VYRUNVVEFCTEVfTkFNRVN9IikKKyAgbWVzc2FnZShTVEFUVVMgIl9SdWJ5X1BPU1NJQkxFX0xJQl9OQU1FUzogJHtfUnVieV9QT1NTSUJMRV9MSUJfTkFNRVN9IikKKyAgbWVzc2FnZShTVEFUVVMgIlJ1YnlfQVJDSF9ESVI6ICR7UnVieV9BUkNIX0RJUn0iKQorICBtZXNzYWdlKFNUQVRVUyAiUnVieV9IRFJfRElSOiAke1J1YnlfSERSX0RJUn0iKQorICBtZXNzYWdlKFNUQVRVUyAiUnVieV9QT1NTSUJMRV9MSUJfRElSOiAke1J1YnlfUE9TU0lCTEVfTElCX0RJUn0iKQorICBtZXNzYWdlKFNUQVRVUyAiRm91bmQgUnVieV9WRVJTSU9OOiBcIiR7UnVieV9WRVJTSU9OfVwiICwgc2hvcnQ6IFwiJHtfUnVieV9WRVJTSU9OX1NIT1JUfVwiLCBub2RvdDogXCIke19SdWJ5X1ZFUlNJT05fU0hPUlRfTk9ET1R9XCIiKQorICBtZXNzYWdlKFNUQVRVUyAiX1J1YnlfUkVRVUlSRURfVkFSUzogJHtfUnVieV9SRVFVSVJFRF9WQVJTfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJSdWJ5X0VYRUNVVEFCTEU6ICR7UnVieV9FWEVDVVRBQkxFfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJSdWJ5X0xJQlJBUlk6ICR7UnVieV9MSUJSQVJZfSIpCisgIG1lc3NhZ2UoU1RBVFVTICJSdWJ5X0lOQ0xVREVfRElSOiAke1J1YnlfSU5DTFVERV9ESVJ9IikKKyAgbWVzc2FnZShTVEFUVVMgIlJ1YnlfQ09ORklHX0lOQ0xVREVfRElSOiAke1J1YnlfQ09ORklHX0lOQ0xVREVfRElSfSIpCiAgIG1lc3NhZ2UoU1RBVFVTICItLS0tLS0tLS0tLS0tLS0tLS0tLSIpCiBlbmRpZigpCiAKLUZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhSdWJ5ICBSRVFVSVJFRF9WQVJTICAke19SVUJZX1JFUVVJUkVEX1ZBUlN9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9WQVIgUlVCWV9WRVJTSU9OICkKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSkKK0ZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhSdWJ5ICBSRVFVSVJFRF9WQVJTICAke19SdWJ5X1JFUVVJUkVEX1ZBUlN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9WQVIgUnVieV9WRVJTSU9OICkKKworaWYoUnVieV9GT1VORCkKKyAgc2V0KFJ1YnlfTElCUkFSSUVTICR7UnVieV9MSUJSQVJZfSkKK2VuZGlmKCkKIAogbWFya19hc19hZHZhbmNlZCgKLSAgUlVCWV9FWEVDVVRBQkxFCi0gIFJVQllfTElCUkFSWQotICBSVUJZX0lOQ0xVREVfRElSCi0gIFJVQllfQ09ORklHX0lOQ0xVREVfRElSCisgIFJ1YnlfRVhFQ1VUQUJMRQorICBSdWJ5X0xJQlJBUlkKKyAgUnVieV9JTkNMVURFX0RJUgorICBSdWJ5X0NPTkZJR19JTkNMVURFX0RJUgogICApCiAKLSMgU2V0IHNvbWUgdmFyaWFibGVzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIGZpbGUKLXNldChSVUJZX1BPU1NJQkxFX0xJQl9QQVRIICR7UlVCWV9QT1NTSUJMRV9MSUJfRElSfSkKLXNldChSVUJZX1JVQllfTElCX1BBVEggJHtSVUJZX1JVQllfTElCX0RJUn0pCi1zZXQoUlVCWV9JTkNMVURFX1BBVEggJHtSVUJZX0lOQ0xVREVfRElSU30pCisjIFNldCBzb21lIHZhcmlhYmxlcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyBmaWxlIChubyBuZWVkIHRvIHByb3ZpZGUgYSBDYW1lbENhc2UgdmVyc2lvbiBvZiB0aGF0Li4uKQorc2V0KFJVQllfUE9TU0lCTEVfTElCX1BBVEggJHtSdWJ5X1BPU1NJQkxFX0xJQl9ESVJ9KQorc2V0KFJVQllfUlVCWV9MSUJfUEFUSCAke1J1YnlfUlVCWV9MSUJfRElSfSkKK3NldChSVUJZX0lOQ0xVREVfUEFUSCAke1J1YnlfSU5DTFVERV9ESVJTfSkKKworIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorIyBEZWZpbmUgdXBwZXIgY2FzZSB2ZXJzaW9ucyBvZiBvdXRwdXQgdmFyaWFibGVzCitmb3JlYWNoKENhbWVsCisgICAgUnVieV9FWEVDVVRBQkxFCisgICAgUnVieV9JTkNMVURFX0RJUlMKKyAgICBSdWJ5X0xJQlJBUlkKKyAgICBSdWJ5X1ZFUlNJT04KKyAgICBSdWJ5X1ZFUlNJT05fTUFKT1IKKyAgICBSdWJ5X1ZFUlNJT05fTUlOT1IKKyAgICBSdWJ5X1ZFUlNJT05fUEFUQ0gKKyAgICBSdWJ5X0lOQ0xVREVfUEFUSAorCisgICAgUnVieV9BUkNIX0RJUgorICAgIFJ1YnlfQVJDSAorICAgIFJ1YnlfSERSX0RJUgorICAgIFJ1YnlfQVJDSEhEUl9ESVIKKyAgICBSdWJ5X1BPU1NJQkxFX0xJQl9ESVIKKyAgICBSdWJ5X1JVQllfTElCX0RJUgorICAgIFJ1YnlfU0lURUFSQ0hfRElSCisgICAgUnVieV9TSVRFTElCX0RJUgorICAgIFJ1YnlfSEFTX1ZFTkRPUl9SVUJZCisgICAgUnVieV9WRU5ET1JBUkNIX0RJUgorCisgICAgKQorICAgIHN0cmluZyhUT1VQUEVSICR7Q2FtZWx9IFVQUEVSKQorICAgIHNldCgke1VQUEVSfSAkeyR7Q2FtZWx9fSkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kU0RMLmNtYWtlIGIvTW9kdWxlcy9GaW5kU0RMLmNtYWtlCmluZGV4IDhkNzkzYTkuLjU5ZWRkYmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFNETC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRTREwuY21ha2UKQEAgLTUsMjQgKzUsNTQgQEAKIEZpbmRTREwKIC0tLS0tLS0KIAotTG9jYXRlIFNETCBsaWJyYXJ5Ci0KLVRoaXMgbW9kdWxlIGRlZmluZXMKLQotOjoKLQotICBTRExfTElCUkFSWSwgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgdG8gbGluayBhZ2FpbnN0Ci0gIFNETF9GT1VORCwgaWYgZmFsc2UsIGRvIG5vdCB0cnkgdG8gbGluayB0byBTREwKLSAgU0RMX0lOQ0xVREVfRElSLCB3aGVyZSB0byBmaW5kIFNETC5oCi0gIFNETF9WRVJTSU9OX1NUUklORywgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gb2YgU0RMCitMb2NhdGUgdGhlIFNETCBsaWJyYXJ5CiAKIAorSW1wb3J0ZWQgdGFyZ2V0cworXl5eXl5eXl5eXl5eXl5eXgorCitUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgOnByb3BfdGd0OmBJTVBPUlRFRGAgdGFyZ2V0OgorCitgYFNETDo6U0RMYGAKKyAgVGhlIFNETCBsaWJyYXJ5LCBpZiBmb3VuZAorCitSZXN1bHQgdmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgbW9kdWxlIHdpbGwgc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHlvdXIgcHJvamVjdDoKKworYGBTRExfSU5DTFVERV9ESVJTYGAKKyAgd2hlcmUgdG8gZmluZCBTREwuaAorYGBTRExfTElCUkFSSUVTYGAKKyAgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgdG8gbGluayBhZ2FpbnN0CitgYFNETF9GT1VORGBgCisgIGlmIGZhbHNlLCBkbyBub3QgdHJ5IHRvIGxpbmsgdG8gU0RMCitgYFNETF9WRVJTSU9OYGAKKyAgdGhlIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uIG9mIFNETCBpZiBmb3VuZAorYGBTRExfVkVSU0lPTl9NQUpPUmBgCisgIFNETCBtYWpvciB2ZXJzaW9uCitgYFNETF9WRVJTSU9OX01JTk9SYGAKKyAgU0RMIG1pbm9yIHZlcnNpb24KK2BgU0RMX1ZFUlNJT05fUEFUQ0hgYAorICBTREwgcGF0Y2ggdmVyc2lvbgorCitDYWNoZSB2YXJpYWJsZXMKK15eXl5eXl5eXl5eXl5eXgorCitUaGVzZSB2YXJpYWJsZXMgbWF5IG9wdGlvbmFsbHkgYmUgc2V0IHRvIGhlbHAgdGhpcyBtb2R1bGUgZmluZCB0aGUgY29ycmVjdCBmaWxlczoKKworYGBTRExfSU5DTFVERV9ESVJgYAorICB3aGVyZSB0byBmaW5kIFNETC5oCitgYFNETF9MSUJSQVJZYGAKKyAgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgdG8gbGluayBhZ2FpbnN0CisKKworVmFyaWFibGVzIGZvciBsb2NhdGluZyBTREwKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIFRoaXMgbW9kdWxlIHJlc3BvbmRzIHRvIHRoZSBmbGFnOgogCi06OgotCi0gIFNETF9CVUlMRElOR19MSUJSQVJZCitgYFNETF9CVUlMRElOR19MSUJSQVJZYGAKICAgICBJZiB0aGlzIGlzIGRlZmluZWQsIHRoZW4gbm8gU0RMX21haW4gd2lsbCBiZSBsaW5rZWQgaW4gYmVjYXVzZQogICAgIG9ubHkgYXBwbGljYXRpb25zIG5lZWQgbWFpbigpLgogICAgIE90aGVyd2lzZSwgaXQgaXMgYXNzdW1lZCB5b3UgYXJlIGJ1aWxkaW5nIGFuIGFwcGxpY2F0aW9uIGFuZCB0aGlzCkBAIC0zMCw2ICs2MCwxNSBAQAogICAgIGFzIHBhcnQgb2YgdGhlIHJldHVybmVkIFNETF9MSUJSQVJZIHZhcmlhYmxlLgogCiAKK09ic29sZXRlIHZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZXNlIHZhcmlhYmxlcyBhcmUgb2Jzb2xldGUgYW5kIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKworYGBTRExfVkVSU0lPTl9TVFJJTkdgYAorICB0aGUgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gb2YgU0RMIGlmIGZvdW5kLgorICBJZGVudGljYWwgdG8gU0RMX1ZFUlNJT04KKwogCiBEb24ndCBmb3JnZXQgdG8gaW5jbHVkZSBTRExtYWluLmggYW5kIFNETG1haW4ubSB5b3VyIHByb2plY3QgZm9yIHRoZQogT1MgWCBmcmFtZXdvcmsgYmFzZWQgdmVyc2lvbi4gIChPdGhlciB2ZXJzaW9ucyBsaW5rIHRvIC1sU0RMbWFpbiB3aGljaApAQCAtNTIsMTUgKzkxLDYgQEAKICRTRExESVIgaXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCB3b3VsZCBjb3JyZXNwb25kIHRvIHRoZQogLi9jb25maWd1cmUgLS1wcmVmaXg9JFNETERJUiB1c2VkIGluIGJ1aWxkaW5nIFNETC4gIGwuZS5nYWx1cCA5LTIwLTAyCiAKLU1vZGlmaWVkIGJ5IEVyaWMgV2luZy4gIEFkZGVkIGNvZGUgdG8gYXNzaXN0IHdpdGggYXV0b21hdGVkIGJ1aWxkaW5nCi1ieSB1c2luZyBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyBhbmQgcHJvdmlkaW5nIGEgbW9yZQotY29udHJvbGxlZC9jb25zaXN0ZW50IHNlYXJjaCBiZWhhdmlvci4gIEFkZGVkIG5ldyBtb2RpZmljYXRpb25zIHRvCi1yZWNvZ25pemUgT1MgWCBmcmFtZXdvcmtzIGFuZCBhZGRpdGlvbmFsIFVuaXggcGF0aHMgKEZyZWVCU0QsIGV0YykuCi1BbHNvIGNvcnJlY3RlZCB0aGUgaGVhZGVyIHNlYXJjaCBwYXRoIHRvIGZvbGxvdyAicHJvcGVyIiBTREwKLWd1aWRlbGluZXMuICBBZGRlZCBhIHNlYXJjaCBmb3IgU0RMbWFpbiB3aGljaCBpcyBuZWVkZWQgYnkgc29tZQotcGxhdGZvcm1zLiAgQWRkZWQgYSBzZWFyY2ggZm9yIHRocmVhZHMgd2hpY2ggaXMgbmVlZGVkIGJ5IHNvbWUKLXBsYXRmb3Jtcy4gIEFkZGVkIG5lZWRlZCBjb21waWxlIHN3aXRjaGVzIGZvciBNaW5HVy4KLQogT24gT1NYLCB0aGlzIHdpbGwgcHJlZmVyIHRoZSBGcmFtZXdvcmsgdmVyc2lvbiAoaWYgZm91bmQpIG92ZXIgb3RoZXJzLgogUGVvcGxlIHdpbGwgaGF2ZSB0byBtYW51YWxseSBjaGFuZ2UgdGhlIGNhY2hlIHZhbHVlcyBvZiBTRExfTElCUkFSWSB0bwogb3ZlcnJpZGUgdGhpcyBzZWxlY3Rpb24gb3Igc2V0IHRoZSBDTWFrZSBlbnZpcm9ubWVudApAQCAtMTc0LDEzICsyMDQsMTEgQEAKICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4jZGVmaW5lWyBcdF0rU0RMX01BSk9SX1ZFUlNJT05bIFx0XSsoWzAtOV0rKSQiICJcXDEiIFNETF9WRVJTSU9OX01BSk9SICIke1NETF9WRVJTSU9OX01BSk9SX0xJTkV9IikKICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4jZGVmaW5lWyBcdF0rU0RMX01JTk9SX1ZFUlNJT05bIFx0XSsoWzAtOV0rKSQiICJcXDEiIFNETF9WRVJTSU9OX01JTk9SICIke1NETF9WRVJTSU9OX01JTk9SX0xJTkV9IikKICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4jZGVmaW5lWyBcdF0rU0RMX1BBVENITEVWRUxbIFx0XSsoWzAtOV0rKSQiICJcXDEiIFNETF9WRVJTSU9OX1BBVENIICIke1NETF9WRVJTSU9OX1BBVENIX0xJTkV9IikKLSAgc2V0KFNETF9WRVJTSU9OX1NUUklORyAke1NETF9WRVJTSU9OX01BSk9SfS4ke1NETF9WRVJTSU9OX01JTk9SfS4ke1NETF9WRVJTSU9OX1BBVENIfSkKICAgdW5zZXQoU0RMX1ZFUlNJT05fTUFKT1JfTElORSkKICAgdW5zZXQoU0RMX1ZFUlNJT05fTUlOT1JfTElORSkKICAgdW5zZXQoU0RMX1ZFUlNJT05fUEFUQ0hfTElORSkKLSAgdW5zZXQoU0RMX1ZFUlNJT05fTUFKT1IpCi0gIHVuc2V0KFNETF9WRVJTSU9OX01JTk9SKQotICB1bnNldChTRExfVkVSU0lPTl9QQVRDSCkKKyAgc2V0KFNETF9WRVJTSU9OICR7U0RMX1ZFUlNJT05fTUFKT1J9LiR7U0RMX1ZFUlNJT05fTUlOT1J9LiR7U0RMX1ZFUlNJT05fUEFUQ0h9KQorICBzZXQoU0RMX1ZFUlNJT05fU1RSSU5HICR7U0RMX1ZFUlNJT059KQogZW5kaWYoKQogCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCkBAIC0xODgsMyArMjE2LDE0IEBACiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoU0RMCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRURfVkFSUyBTRExfTElCUkFSWSBTRExfSU5DTFVERV9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX1ZBUiBTRExfVkVSU0lPTl9TVFJJTkcpCisKK2lmKFNETF9GT1VORCkKKyAgc2V0KFNETF9MSUJSQVJJRVMgJHtTRExfTElCUkFSWX0pCisgIHNldChTRExfSU5DTFVERV9ESVJTICR7U0RMX0lOQ0xVREVfRElSfSkKKyAgaWYoTk9UIFRBUkdFVCBTREw6OlNETCkKKyAgICBhZGRfbGlicmFyeShTREw6OlNETCBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFNETDo6U0RMIFBST1BFUlRJRVMKKyAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1NETF9JTkNMVURFX0RJUn0iCisgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIiR7U0RMX0xJQlJBUll9IikKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kU1FMaXRlMy5jbWFrZSBiL01vZHVsZXMvRmluZFNRTGl0ZTMuY21ha2UKaW5kZXggMzc0ZDdhZi4uODhjN2RkMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kU1FMaXRlMy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRTUUxpdGUzLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZFNRTGl0ZTMKIC0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMTQKKwogRmluZCB0aGUgU1FMaXRlIGxpYnJhcmllcywgdjMKIAogSU1QT1JURUQgdGFyZ2V0cwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kU1dJRy5jbWFrZSBiL01vZHVsZXMvRmluZFNXSUcuY21ha2UKaW5kZXggYWU2YWU1Ni4uMmZkZWQ0OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kU1dJRy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRTV0lHLmNtYWtlCkBAIC01LDI1ICs1LDQ5IEBACiBGaW5kU1dJRwogLS0tLS0tLS0KIAotRmluZCBTaW1wbGlmaWVkIFdyYXBwZXIgYW5kIEludGVyZmFjZSBHZW5lcmF0b3IgKFNXSUcpCi0KLVRoaXMgbW9kdWxlIGZpbmRzIGFuIGluc3RhbGxlZCBTV0lHLiAgSXQgc2V0cyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKLQotOjoKLQotICBTV0lHX0ZPVU5EIC0gc2V0IHRvICJUcnVlIiBpZiBTV0lHIGlzIGZvdW5kCi0gIFNXSUdfRElSIC0gdGhlIGRpcmVjdG9yeSB3aGVyZSBzd2lnIGlzIGluc3RhbGxlZAotICBTV0lHX0VYRUNVVEFCTEUgLSB0aGUgcGF0aCB0byB0aGUgc3dpZyBleGVjdXRhYmxlCi0gIFNXSUdfVkVSU0lPTiAgIC0gdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBzd2lnIGV4ZWN1dGFibGUKK0ZpbmQgdGhlIFNpbXBsaWZpZWQgV3JhcHBlciBhbmQgSW50ZXJmYWNlIEdlbmVyYXRvciAoU1dJR18pIGV4ZWN1dGFibGUuCiAKIAorVGhpcyBtb2R1bGUgZmluZHMgYW4gaW5zdGFsbGVkIFNXSUcgYW5kIGRldGVybWluZXMgaXRzIHZlcnNpb24uIElmIGEKK2BgQ09NUE9ORU5UU2BgIG9yIGBgT1BUSU9OQUxfQ09NUE9ORU5UU2BgIGFyZ3VtZW50IGlzIGdpdmVuIHRvIGBgZmluZF9wYWNrYWdlYGAsCitpdCB3aWxsIGFsc28gZGV0ZXJtaW5lIHN1cHBvcnRlZCB0YXJnZXQgbGFuZ3VhZ2VzLiAgVGhlIG1vZHVsZSBzZW50cyB0aGUKK2ZvbGxvd2luZyB2YXJpYWJsZXM6CiAKLVRoZSBtaW5pbXVtIHJlcXVpcmVkIHZlcnNpb24gb2YgU1dJRyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZQotc3RhbmRhcmQgc3ludGF4LCBlLmcuICAgOmNvbW1hbmQ6YGZpbmRfcGFja2FnZShTV0lHIDEuMSlgCitgYFNXSUdfRk9VTkRgYAorICBXaGV0aGVyIFNXSUcgYW5kIGFueSByZXF1aXJlZCBjb21wb25lbnRzIHdlcmUgZm91bmQgb24gdGhlIHN5c3RlbS4KK2BgU1dJR19FWEVDVVRBQkxFYGAKKyAgUGF0aCB0byB0aGUgU1dJRyBleGVjdXRhYmxlLgorYGBTV0lHX0RJUmBgCisgIFBhdGggdG8gdGhlIGluc3RhbGxlZCBTV0lHIGBgTGliYGAgZGlyZWN0b3J5IChyZXN1bHQgb2YgYGBzd2lnIC1zd2lnbGliYGApLgorYGBTV0lHX1ZFUlNJT05gYAorICBTV0lHIGV4ZWN1dGFibGUgdmVyc2lvbiAocmVzdWx0IG9mIGBgc3dpZyAtdmVyc2lvbmBgKS4KK2BgU1dJR188bGFuZz5fRk9VTkRgYAorICBJZiBgYENPTVBPTkVOVFNgYCBvciBgYE9QVElPTkFMX0NPTVBPTkVOVFNgYCBhcmUgcmVxdWVzdGVkLCBlYWNoIGF2YWlsYWJsZQorICB0YXJnZXQgbGFuZ3VhZ2UgYGA8bGFuZz5gYCAobG93ZXJjYXNlKSB3aWxsIGJlIHNldCB0byBUUlVFLgorCitBbnkgYGBDT01QT05FTlRTYGAgZ2l2ZW4gdG8gYGBmaW5kX3BhY2thZ2VgYCBzaG91bGQgYmUgdGhlIG5hbWVzIG9mIHN1cHBvcnRlZAordGFyZ2V0IGxhbmd1YWdlcyBhcyBwcm92aWRlZCB0byB0aGUgTEFOR1VBR0UgYXJndW1lbnQgb2YgYGBzd2lnX2FkZF9saWJyYXJ5YGAsCitzdWNoIGFzIGBgcHl0aG9uYGAgb3IgYGBwZXJsNWBgLiBMYW5ndWFnZSBuYW1lcyAqbXVzdCogYmUgbG93ZXJjYXNlLgogCiBBbGwgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkIGZyb20gdGhlIGBgU1dJR19FWEVDVVRBQkxFYGAsIHNvIHRoZSB2ZXJzaW9uCiB0byBiZSBmb3VuZCBjYW4gYmUgY2hhbmdlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYnkgbWVhbnMgb2Ygc2V0dGluZwotYGBTV0lHX0VYRUNVVEFCTEVgYAorYGBTV0lHX0VYRUNVVEFCTEVgYC4KKworRXhhbXBsZSB1c2FnZSByZXF1aXJpbmcgU1dJRyA0LjAgb3IgaGlnaGVyIGFuZCBQeXRob24gbGFuZ3VhZ2Ugc3VwcG9ydCwgd2l0aAorb3B0aW9uYWwgRm9ydHJhbiBzdXBwb3J0OgorCisuLiBjb2RlLWJsb2NrOjogY21ha2UKKworICAgZmluZF9wYWNrYWdlKFNXSUcgNC4wIENPTVBPTkVOVFMgcHl0aG9uIE9QVElPTkFMX0NPTVBPTkVOVFMgZm9ydHJhbikKKyAgIGlmKFNXSUdfRk9VTkQpCisgICAgIG1lc3NhZ2UoIlNXSUcgZm91bmQ6ICR7U1dJR19FWEVDVVRBQkxFfSIpCisgICAgIGlmKE5PVCBTV0lHX2ZvcnRyYW5fRk9VTkQpCisgICAgICAgbWVzc2FnZShXQVJOSU5HICJTV0lHIEZvcnRyYW4gYmluZGluZ3MgY2Fubm90IGJlIGdlbmVyYXRlZCIpCisgICAgIGVuZGlmKCkKKyAgIGVuZGlmKCkKKworLi4gX2BTV0lHYDogaHR0cDovL3N3aWcub3JnCisKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKIGZpbmRfcHJvZ3JhbShTV0lHX0VYRUNVVEFCTEUgTkFNRVMgc3dpZzQuMCBzd2lnMy4wIHN3aWcyLjAgc3dpZykKQEAgLTU4LDEwICs4MiwyOSBAQAogICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKICAgZW5kaWYoKQorCisgIGlmKFNXSUdfRklORF9DT01QT05FTlRTKQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7U1dJR19FWEVDVVRBQkxFfSAtaGVscAorICAgICAgT1VUUFVUX1ZBUklBQkxFIFNXSUdfc3dpZ2hlbHBfb3V0cHV0CisgICAgICBFUlJPUl9WQVJJQUJMRSBTV0lHX3N3aWdoZWxwX2Vycm9yCisgICAgICBSRVNVTFRfVkFSSUFCTEUgU1dJR19zd2lnaGVscF9yZXN1bHQpCisgICAgaWYoU1dJR19zd2lnaGVscF9yZXN1bHQpCisgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkNvbW1hbmQgXCIke1NXSUdfRVhFQ1VUQUJMRX0gLWhlbHBcIiBmYWlsZWQgd2l0aCBvdXRwdXQ6XG4ke1NXSUdfc3dpZ2xpYl9lcnJvcn0iKQorICAgIGVsc2UoKQorICAgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiOyIgU1dJR19zd2lnaGVscF9vdXRwdXQgIiR7U1dJR19zd2lnaGVscF9vdXRwdXR9IikKKyAgICAgIGZvcmVhY2goU1dJR19saW5lIElOIExJU1RTIFNXSUdfc3dpZ2hlbHBfb3V0cHV0KQorICAgICAgICBpZihTV0lHX2xpbmUgTUFUQ0hFUyAiLShbQS1aYS16MC05X10rKSArLSAqR2VuZXJhdGUuKndyYXBwZXJzIikKKyAgICAgICAgICBzZXQoU1dJR18ke0NNQUtFX01BVENIXzF9X0ZPVU5EIFRSVUUpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGZvcmVhY2goKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQogZW5kaWYoKQogCiBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UpCi1GSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoU1dJRyAgUkVRVUlSRURfVkFSUyBTV0lHX0VYRUNVVEFCTEUgU1dJR19ESVIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX1ZBUiBTV0lHX1ZFUlNJT04gKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKAorICBTV0lHIEhBTkRMRV9DT01QT05FTlRTCisgIFJFUVVJUkVEX1ZBUlMgU1dJR19FWEVDVVRBQkxFIFNXSUdfRElSCisgIFZFUlNJT05fVkFSIFNXSUdfVkVSU0lPTikKIAogbWFya19hc19hZHZhbmNlZChTV0lHX0RJUiBTV0lHX1ZFUlNJT04gU1dJR19FWEVDVVRBQkxFKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kU3F1aXNoLmNtYWtlIGIvTW9kdWxlcy9GaW5kU3F1aXNoLmNtYWtlCmluZGV4IDdkNDk1MDUuLjkxZDE0MTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFNxdWlzaC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRTcXVpc2guY21ha2UKQEAgLTksOCArOSw3IEBACiAKIAogCi1UaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB0byBmaW5kIFNxdWlzaC4gIEN1cnJlbnRseSBTcXVpc2ggdmVyc2lvbnMgMwotYW5kIDQgYXJlIHN1cHBvcnRlZC4KK1RoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGZpbmQgU3F1aXNoLgogCiA6OgogCkBAIC0zOSwxMiArMzgsMTIgQEAKIAogCiAKLUl0IHByb3ZpZGVzIHRoZSBmdW5jdGlvbiBzcXVpc2hfdjRfYWRkX3Rlc3QoKSBmb3IgYWRkaW5nIGEgc3F1aXNoIHRlc3QKLXRvIGNtYWtlIHVzaW5nIFNxdWlzaCA0Lng6CitJdCBwcm92aWRlcyB0aGUgZnVuY3Rpb24gc3F1aXNoX2FkZF90ZXN0KCkgZm9yIGFkZGluZyBhIHNxdWlzaCB0ZXN0Cit0byBjbWFrZSB1c2luZyBTcXVpc2ggPj0gNC54OgogCiA6OgogCi0gICBzcXVpc2hfdjRfYWRkX3Rlc3QoY21ha2VUZXN0TmFtZQorICAgc3F1aXNoX2FkZF90ZXN0KGNtYWtlVGVzdE5hbWUKICAgICAgQVVUIHRhcmdldE5hbWUgU1VJVEUgc3VpdGVOYW1lIFRFU1Qgc3F1aXNoVGVzdE5hbWUKICAgICAgW1NFVFRJTkdTR1JPVVAgZ3JvdXBdIFtQUkVfQ09NTUFORCBjb21tYW5kXSBbUE9TVF9DT01NQU5EIGNvbW1hbmRdICkKIApAQCAtNjYsOCArNjUsNyBAQAogICB0aGUgbmFtZSBvZiB0aGUgc3F1aXNoIHRlc3QsIGkuZS4gdGhlIG5hbWUgb2YgdGhlIHN1YmRpcmVjdG9yeQogICBvZiB0aGUgdGVzdCBpbnNpZGUgdGhlIHN1aXRlIGRpcmVjdG9yeS4KIGBgU0VUVElOR1NHUk9VUCBncm91cGBgCi0gIGlmIHNwZWNpZmllZCwgdGhlIGdpdmVuIHNldHRpbmdzIGdyb3VwIHdpbGwgYmUgdXNlZCBmb3IgZXhlY3V0aW5nIHRoZSB0ZXN0LgotICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ3JvdXBuYW1lIHdpbGwgYmUgIkNUZXN0Xzx1c2VybmFtZT4iCisgIGRlcHJlY2F0ZWQsIHRoaXMgYXJndW1lbnQgd2lsbCBiZSBpZ25vcmVkLgogYGBQUkVfQ09NTUFORCBjb21tYW5kYGAKICAgaWYgc3BlY2lmaWVkLCB0aGUgZ2l2ZW4gY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSBzdGFydGluZyB0aGUgc3F1aXNoIHRlc3QuCiBgYFBPU1RfQ09NTUFORCBjb21tYW5kYGAKQEAgLTc4LDEzICs3NiwxMiBAQAogOjoKIAogICAgZW5hYmxlX3Rlc3RpbmcoKQotICAgZmluZF9wYWNrYWdlKFNxdWlzaCA0LjApCisgICBmaW5kX3BhY2thZ2UoU3F1aXNoIDYuNSkKICAgIGlmIChTUVVJU0hfRk9VTkQpCi0gICAgICBzcXVpc2hfdjRfYWRkX3Rlc3QobXlUZXN0TmFtZQorICAgICAgc3F1aXNoX2FkZF90ZXN0KG15VGVzdE5hbWUKICAgICAgICAgQVVUIG15QXBwCiAgICAgICAgIFNVSVRFICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdHMvbXlTdWl0ZQogICAgICAgICBURVNUIHNvbWVTcXVpc2hUZXN0Ci0gICAgICAgIFNFVFRJTkdTR1JPVVAgbXlHcm91cAogICAgICAgICApCiAgICBlbmRpZiAoKQogCkBAIC0xMDUsMTkgKzEwMiwxMiBAQAogOjoKIAogICBlbmFibGVfdGVzdGluZygpCi0gIGZpbmRfcGFja2FnZShTcXVpc2gpCisgIGZpbmRfcGFja2FnZShTcXVpc2ggMy4wKQogICBpZiAoU1FVSVNIX0ZPVU5EKQogICAgIHNxdWlzaF92M19hZGRfdGVzdChteVRlc3ROYW1lIG15QXBwbGljYXRpb24gdGVzdENhc2UgZW52VmFycyB0ZXN0V3JhcHBlcikKICAgZW5kaWYgKCkKIAogCi0KLW1hY3JvIFNRVUlTSF9BRERfVEVTVCh0ZXN0TmFtZSBhcHBsaWNhdGlvblVuZGVyVGVzdCB0ZXN0Q2FzZSBlbnZWYXJzCi10ZXN0V3JhcHBlcikKLQotOjoKLQotICAgVGhpcyBpcyBkZXByZWNhdGVkLiBVc2UgU1FVSVNIX1YzX0FERF9URVNUKCkgaWYgeW91IGFyZSB1c2luZyBTcXVpc2ggMy54IGluc3RlYWQuCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiBzZXQoU1FVSVNIX0lOU1RBTExfRElSX1NUUklORyAiRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGJpbiwgZG9jLCBhbmQgbGliIGRpcmVjdG9yaWVzIGZvciBTcXVpc2g7IHRoaXMgc2hvdWxkIGJlIHRoZSByb290IG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LiIpCkBAIC0xMzcsNyArMTI3LDggQEAKICAgc3RyaW5nKFJFUExBQ0UgIi8vIiAiLyIgU1FVSVNIX0lOU1RBTExfRElSX1NFQVJDSCAiJHtTUVVJU0hfSU5TVEFMTF9ESVJfU0VBUkNIfSIpCiAKICAgIyBMb29rIGZvciBhbiBpbnN0YWxsYXRpb24KLSAgZmluZF9wYXRoKFNRVUlTSF9JTlNUQUxMX0RJUiBiaW4vc3F1aXNocnVubmVyCisgIGZpbmRfcGF0aChTUVVJU0hfSU5TVEFMTF9ESVIKKyAgICBOQU1FUyBiaW4vc3F1aXNocnVubmVyIGJpbi9zcXVpc2hydW5uZXIuZXhlCiAgICAgSElOVFMKICAgICAjIExvb2sgZm9yIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIFNRVUlTSF9JTlNUQUxMX0RJUi4KICAgICAgIEVOViBTUVVJU0hfSU5TVEFMTF9ESVIKQEAgLTE2OSw5ICsxNjAsOSBAQAogCiAKIHNldChTUVVJU0hfVkVSU0lPTikKLXNldChTUVVJU0hfVkVSU0lPTl9NQUpPUiApCi1zZXQoU1FVSVNIX1ZFUlNJT05fTUlOT1IgKQotc2V0KFNRVUlTSF9WRVJTSU9OX1BBVENIICkKK3NldChTUVVJU0hfVkVSU0lPTl9NQUpPUikKK3NldChTUVVJU0hfVkVSU0lPTl9NSU5PUikKK3NldChTUVVJU0hfVkVSU0lPTl9QQVRDSCkKIAogIyByZWNvcmQgaWYgZXhlY3V0YWJsZXMgYXJlIHNldAogaWYoU1FVSVNIX0NMSUVOVF9FWEVDVVRBQkxFKQpAQCAtMjAzLDggKzE5NCw4IEBACiAKIHNldChfU1FVSVNIX01PRFVMRV9ESVIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0iKQogCi1tYWNybyhTUVVJU0hfVjNfQUREX1RFU1QgdGVzdE5hbWUgdGVzdEFVVCB0ZXN0Q2FzZSBlbnZWYXJzIHRlc3RXcmFwZXIpCi0gIGlmKCIke1NRVUlTSF9WRVJTSU9OX01BSk9SfSIgU1RSRVFVQUwgIjQiKQorbWFjcm8oc3F1aXNoX3YzX2FkZF90ZXN0IHRlc3ROYW1lIHRlc3RBVVQgdGVzdENhc2UgZW52VmFycyB0ZXN0V3JhcGVyKQorICBpZigiJHtTUVVJU0hfVkVSU0lPTl9NQUpPUn0iIFNUUkdSRUFURVIgIjMiKQogICAgIG1lc3NhZ2UoU1RBVFVTICJVc2luZyBzcXVpc2hfdjNfYWRkX3Rlc3QoKSwgYnV0IFNRVUlTSF9WRVJTSU9OX01BSk9SIGlzICR7U1FVSVNIX1ZFUlNJT05fTUFKT1J9LlxuVGhpcyBtYXkgbm90IHdvcmsuIikKICAgZW5kaWYoKQogCkBAIC0yMjcsMTYgKzIxOCw5IEBACiBlbmRtYWNybygpCiAKIAotbWFjcm8oU1FVSVNIX0FERF9URVNUKQotICBtZXNzYWdlKFNUQVRVUyAiVXNpbmcgc3F1aXNoX2FkZF90ZXN0KCkgaXMgZGVwcmVjYXRlZCwgdXNlIHNxdWlzaF92M19hZGRfdGVzdCgpIGluc3RlYWQuIikKLSAgc3F1aXNoX3YzX2FkZF90ZXN0KCR7QVJHVn0pCi1lbmRtYWNybygpCi0KLQotZnVuY3Rpb24oU1FVSVNIX1Y0X0FERF9URVNUIHRlc3ROYW1lKQotCi0gIGlmKE5PVCAiJHtTUVVJU0hfVkVSU0lPTl9NQUpPUn0iIFNUUkVRVUFMICI0IikKLSAgICBtZXNzYWdlKFNUQVRVUyAiVXNpbmcgc3F1aXNoX3Y0X2FkZF90ZXN0KCksIGJ1dCBTUVVJU0hfVkVSU0lPTl9NQUpPUiBpcyAke1NRVUlTSF9WRVJTSU9OX01BSk9SfS5cblRoaXMgbWF5IG5vdCB3b3JrLiIpCitmdW5jdGlvbihzcXVpc2hfdjRfYWRkX3Rlc3QgdGVzdE5hbWUpCisgIGlmKE5PVCAiJHtTUVVJU0hfVkVSU0lPTl9NQUpPUn0iIFNUUkdSRUFURVIgIjMiKQorICAgIG1lc3NhZ2UoU1RBVFVTICJVc2luZyBzcXVpc2hfYWRkX3Rlc3QoKSwgYnV0IFNRVUlTSF9WRVJTSU9OX01BSk9SIGlzICR7U1FVSVNIX1ZFUlNJT05fTUFKT1J9LlxuVGhpcyBtYXkgbm90IHdvcmsuIikKICAgZW5kaWYoKQogCiAgIHNldChvbmVWYWx1ZUFyZ3MgQVVUIFNVSVRFIFRFU1QgU0VUVElOR1NHUk9VUCBQUkVfQ09NTUFORCBQT1NUX0NPTU1BTkQpCkBAIC0yNTksMTAgKzI0Myw2IEBACiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUmVxdWlyZWQgYXJndW1lbnQgVEVTVCBub3QgZ2l2ZW4gZm9yIFNRVUlTSF9BRERfVEVTVCgpIikKICAgZW5kaWYoKQogCi0gIGdldF90YXJnZXRfcHJvcGVydHkodGVzdEFVVExvY2F0aW9uICR7X1NRVUlTSF9BVVR9IExPQ0FUSU9OKQotICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHRlc3RBVVREaXIgJHt0ZXN0QVVUTG9jYXRpb259IFBBVEgpCi0gIGdldF9maWxlbmFtZV9jb21wb25lbnQodGVzdEFVVE5hbWUgJHt0ZXN0QVVUTG9jYXRpb259IE5BTUUpCi0KICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChhYnNUZXN0U3VpdGUgIiR7X1NRVUlTSF9TVUlURX0iIEFCU09MVVRFKQogICBpZihOT1QgRVhJU1RTICIke2Fic1Rlc3RTdWl0ZX0iKQogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIHNxdWlzaCB0ZXN0IHN1aXRlICR7X1NRVUlTSF9TVUlURX0gKGNoZWNrZWQgJHthYnNUZXN0U3VpdGV9KSIpCkBAIC0yNzMsMTUgKzI1MywxNSBAQAogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIHNxdWlzaCB0ZXN0Y2FzZSAke19TUVVJU0hfVEVTVH0gKGNoZWNrZWQgJHthYnNUZXN0Q2FzZX0pIikKICAgZW5kaWYoKQogCi0gIGlmKE5PVCBfU1FVSVNIX1NFVFRJTkdTR1JPVVApCi0gICAgc2V0KF9TUVVJU0hfU0VUVElOR1NHUk9VUCAiQ1Rlc3RfJEVOVntMT0dOQU1FfSIpCisgIGlmKF9TUVVJU0hfU0VUVElOR1NHUk9VUCkKKyAgICBtZXNzYWdlKCJTRVRUSU5HU0dST1VQIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4iKQogICBlbmRpZigpCiAKLSAgYWRkX3Rlc3QoJHt0ZXN0TmFtZX0KLSAgICAke0NNQUtFX0NPTU1BTkR9IC1WIC1WVgorICBhZGRfdGVzdChOQU1FICR7dGVzdE5hbWV9CisgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1WIC1WVgogICAgICItRHNxdWlzaF92ZXJzaW9uOlNUUklORz00IgotICAgICItRHNxdWlzaF9hdXQ6U1RSSU5HPSR7dGVzdEFVVE5hbWV9IgotICAgICItRHNxdWlzaF9hdXRfZGlyOlNUUklORz0ke3Rlc3RBVVREaXJ9IgorICAgICItRHNxdWlzaF9hdXQ6U1RSSU5HPSQ8VEFSR0VUX0ZJTEVfQkFTRV9OQU1FOiR7X1NRVUlTSF9BVVR9PiIKKyAgICAiLURzcXVpc2hfYXV0X2RpcjpTVFJJTkc9JDxUQVJHRVRfRklMRV9ESVI6JHtfU1FVSVNIX0FVVH0+IgogICAgICItRHNxdWlzaF9zZXJ2ZXJfZXhlY3V0YWJsZTpTVFJJTkc9JHtTUVVJU0hfU0VSVkVSX0VYRUNVVEFCTEV9IgogICAgICItRHNxdWlzaF9jbGllbnRfZXhlY3V0YWJsZTpTVFJJTkc9JHtTUVVJU0hfQ0xJRU5UX0VYRUNVVEFCTEV9IgogICAgICItRHNxdWlzaF9saWJxdGRpcjpTVFJJTkc9JHtRVF9MSUJSQVJZX0RJUn0iCkBAIC0yOTAsNyArMjcwLDYgQEAKICAgICAiLURzcXVpc2hfZW52X3ZhcnM6U1RSSU5HPSR7ZW52VmFyc30iCiAgICAgIi1Ec3F1aXNoX3dyYXBwZXI6U1RSSU5HPSR7dGVzdFdyYXBlcn0iCiAgICAgIi1Ec3F1aXNoX21vZHVsZV9kaXI6U1RSSU5HPSR7X1NRVUlTSF9NT0RVTEVfRElSfSIKLSAgICAiLURzcXVpc2hfc2V0dGluZ3Nncm91cDpTVFJJTkc9JHtfU1FVSVNIX1NFVFRJTkdTR1JPVVB9IgogICAgICItRHNxdWlzaF9wcmVfY29tbWFuZDpTVFJJTkc9JHtfU1FVSVNIX1BSRV9DT01NQU5EfSIKICAgICAiLURzcXVpc2hfcG9zdF9jb21tYW5kOlNUUklORz0ke19TUVVJU0hfUE9TVF9DT01NQU5EfSIKICAgICAtUCAiJHtfU1FVSVNIX01PRFVMRV9ESVJ9L1NxdWlzaFRlc3RTY3JpcHQuY21ha2UiCkBAIC0yOTksMyArMjc4LDExIEBACiAgICAgUFJPUEVSVElFUyBGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiAiRkFJTDtGQUlMRUQ7RVJST1I7RkFUQUwiCiAgICAgKQogZW5kZnVuY3Rpb24oKQorCittYWNybyhzcXVpc2hfYWRkX3Rlc3QpCisgIGlmKCIke1NRVUlTSF9WRVJTSU9OX01BSk9SfSIgU1RSR1JFQVRFUiAiMyIpCisgICAgc3F1aXNoX3Y0X2FkZF90ZXN0KCR7QVJHVn0pCisgIGVsc2UoKQorICAgIHNxdWlzaF92M19hZGRfdGVzdCgke0FSR1Z9KQorICBlbmRpZigpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRTdWJ2ZXJzaW9uLmNtYWtlIGIvTW9kdWxlcy9GaW5kU3VidmVyc2lvbi5jbWFrZQppbmRleCBjZTI4MGUyLi4wN2NiNzcwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRTdWJ2ZXJzaW9uLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFN1YnZlcnNpb24uY21ha2UKQEAgLTc5LDEzICs3OSwyMiBAQAogCiAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7U3VidmVyc2lvbl9TVk5fRVhFQ1VUQUJMRX0gLS12ZXJzaW9uCiAgICAgT1VUUFVUX1ZBUklBQkxFIFN1YnZlcnNpb25fVkVSU0lPTl9TVk4KKyAgICBFUlJPUl9WQVJJQUJMRSBfU3VidmVyc2lvbl9WRVJTSU9OX1NUREVSUgorICAgIFJFU1VMVF9WQVJJQUJMRSBfU3VidmVyc2lvbl9WRVJTSU9OX1JFU1VMVAogICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQogCiAgICMgcmVzdG9yZSB0aGUgcHJldmlvdXMgTENfQUxMCiAgIHNldChFTlZ7TENfQUxMfSAke19TdWJ2ZXJzaW9uX1NBVkVEX0xDX0FMTH0pCiAKLSAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4oLipcbik/c3ZuLCB2ZXJzaW9uIChbLjAtOV0rKS4qIgotICAgICJcXDIiIFN1YnZlcnNpb25fVkVSU0lPTl9TVk4gIiR7U3VidmVyc2lvbl9WRVJTSU9OX1NWTn0iKQorICBpZihfU3VidmVyc2lvbl9WRVJTSU9OX1JFU1VMVCBFUVVBTCAwKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeKC4qXG4pP3N2biwgdmVyc2lvbiAoWy4wLTldKykuKiIKKyAgICAgICJcXDIiIFN1YnZlcnNpb25fVkVSU0lPTl9TVk4gIiR7U3VidmVyc2lvbl9WRVJTSU9OX1NWTn0iKQorICBlbHNlKCkKKyAgICB1bnNldChTdWJ2ZXJzaW9uX1ZFUlNJT05fU1ZOKQorICAgIGlmKF9TdWJ2ZXJzaW9uX1ZFUlNJT05fU1RERVJSIE1BVENIRVMgInN2bjogZXJyb3I6IFRoZSBzdWJ2ZXJzaW9uIGNvbW1hbmQgbGluZSB0b29scyBhcmUgbm8gbG9uZ2VyIHByb3ZpZGVkIGJ5IFhjb2RlIikKKyAgICAgIHNldChTdWJ2ZXJzaW9uX1NWTl9FWEVDVVRBQkxFIFN1YnZlcnNpb25fU1ZOX0VYRUNVVEFCTEUtTk9URk9VTkQpCisgICAgZW5kaWYoKQorICBlbmRpZigpCiAKICAgbWFjcm8oU3VidmVyc2lvbl9XQ19JTkZPIGRpciBwcmVmaXgpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFRDTC5jbWFrZSBiL01vZHVsZXMvRmluZFRDTC5jbWFrZQppbmRleCBiZTQ3YzM5Li45NjAyNjVmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRUQ0wuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kVENMLmNtYWtlCkBAIC0yMjQsMTIgKzIyNCwxNCBAQAogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQogCiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoVENMIERFRkFVTFRfTVNHIFRDTF9MSUJSQVJZIFRDTF9JTkNMVURFX1BBVEgpCitzZXQoRlBIU0FfTkFNRV9NSVNNQVRDSEVEIDEpCiBzZXQoVENMVEtfRklORF9SRVFVSVJFRCAke1RDTF9GSU5EX1JFUVVJUkVEfSkKIHNldChUQ0xUS19GSU5EX1FVSUVUTFkgICR7VENMX0ZJTkRfUVVJRVRMWX0pCiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoVENMVEsgREVGQVVMVF9NU0cgVENMX0xJQlJBUlkgVENMX0lOQ0xVREVfUEFUSCBUS19MSUJSQVJZIFRLX0lOQ0xVREVfUEFUSCkKIHNldChUS19GSU5EX1JFUVVJUkVEICR7VENMX0ZJTkRfUkVRVUlSRUR9KQogc2V0KFRLX0ZJTkRfUVVJRVRMWSAgJHtUQ0xfRklORF9RVUlFVExZfSkKIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhUSyBERUZBVUxUX01TRyBUS19MSUJSQVJZIFRLX0lOQ0xVREVfUEFUSCkKK3Vuc2V0KEZQSFNBX05BTUVfTUlTTUFUQ0hFRCkKIAogbWFya19hc19hZHZhbmNlZCgKICAgVENMX0lOQ0xVREVfUEFUSApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kVElGRi5jbWFrZSBiL01vZHVsZXMvRmluZFRJRkYuY21ha2UKaW5kZXggMDBhM2E0MS4uM2I3NGM5NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kVElGRi5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRUSUZGLmNtYWtlCkBAIC01LDcgKzUsMTQgQEAKIEZpbmRUSUZGCiAtLS0tLS0tLQogCi1GaW5kIHRoZSBUSUZGIGxpYnJhcnkgKGBgbGlidGlmZmBgKS4KK0ZpbmQgdGhlIFRJRkYgbGlicmFyeSAoYGBsaWJ0aWZmYGAsIGh0dHBzOi8vbGlidGlmZi5naXRsYWIuaW8vbGlidGlmZi8pLgorCitPcHRpb25hbCBDT01QT05FTlRTCiteXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBvcHRpb25hbCBjb21wb25lbnQgYENYWGAsIGZvciB1c2Ugd2l0aCB0aGUgQ09NUE9ORU5UUworYXJndW1lbnQgb2YgdGhlIDpjb21tYW5kOmBmaW5kX3BhY2thZ2VgIGNvbW1hbmQuIFRoaXMgY29tcG9uZW50IGhhcyBhbiBhc3NvY2lhdGVkCitpbXBvcnRlZCB0YXJnZXQsIGFzIGRlc2NyaWJlZCBiZWxvdy4KIAogSW1wb3J0ZWQgdGFyZ2V0cwogXl5eXl5eXl5eXl5eXl5eXgpAQCAtMTUsNiArMjIsMTEgQEAKIGBgVElGRjo6VElGRmBgCiAgIFRoZSBUSUZGIGxpYnJhcnksIGlmIGZvdW5kLgogCitgYFRJRkY6OkNYWGBgCisgIFRoZSBDKysgd3JhcHBlciBsaWJ0aWZmeHgsIGlmIHJlcXVlc3RlZCBieSB0aGUgYENPTVBPTkVOVFMgQ1hYYCBvcHRpb24sCisgIGlmIHRoZSBjb21waWxlciBpcyBub3QgTVNWQyAod2hpY2ggaW5jbHVkZXMgdGhlIEMrKyB3cmFwcGVyIGluIGxpYnRpZmYpLAorICBhbmQgaWYgZm91bmQuCisKIFJlc3VsdCB2YXJpYWJsZXMKIF5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMzYsMTAgKzQ4LDE5IEBACiAKIGBgVElGRl9JTkNMVURFX0RJUmBgCiAgIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgVElGRiBoZWFkZXJzCi1gYFRJRkZfTElCUkFSWWBgCi0gIHRoZSBwYXRoIHRvIHRoZSBUSUZGIGxpYnJhcnkKK2BgVElGRl9MSUJSQVJZX1JFTEVBU0VgYAorICB0aGUgcGF0aCB0byB0aGUgVElGRiBsaWJyYXJ5IGZvciByZWxlYXNlIGNvbmZpZ3VyYXRpb25zCitgYFRJRkZfTElCUkFSWV9ERUJVR2BgCisgIHRoZSBwYXRoIHRvIHRoZSBUSUZGIGxpYnJhcnkgZm9yIGRlYnVnIGNvbmZpZ3VyYXRpb25zCitgYFRJRkZYWF9MSUJSQVJZX1JFTEVBU0VgYAorICB0aGUgcGF0aCB0byB0aGUgVElGRlhYIGxpYnJhcnkgZm9yIHJlbGVhc2UgY29uZmlndXJhdGlvbnMKK2BgVElGRlhYX0xJQlJBUllfREVCVUdgYAorICB0aGUgcGF0aCB0byB0aGUgVElGRlhYIGxpYnJhcnkgZm9yIGRlYnVnIGNvbmZpZ3VyYXRpb25zCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCitjbWFrZV9wb2xpY3koUFVTSCkKK2NtYWtlX3BvbGljeShTRVQgQ01QMDA1NyBORVcpCisKIGZpbmRfcGF0aChUSUZGX0lOQ0xVREVfRElSIHRpZmYuaCkKIAogc2V0KFRJRkZfTkFNRVMgJHtUSUZGX05BTUVTfSB0aWZmIGxpYnRpZmYgdGlmZjMgbGlidGlmZjMpCkBAIC01NCw4ICs3NSw2IEBACiAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKFRJRkYpCiAgIG1hcmtfYXNfYWR2YW5jZWQoVElGRl9MSUJSQVJZX1JFTEVBU0UgVElGRl9MSUJSQVJZX0RFQlVHKQogZW5kaWYoKQotdW5zZXQoVElGRl9OQU1FUykKLXVuc2V0KFRJRkZfTkFNRVNfREVCVUcpCiAKIGlmKFRJRkZfSU5DTFVERV9ESVIgQU5EIEVYSVNUUyAiJHtUSUZGX0lOQ0xVREVfRElSfS90aWZmdmVycy5oIikKICAgICBmaWxlKFNUUklOR1MgIiR7VElGRl9JTkNMVURFX0RJUn0vdGlmZnZlcnMuaCIgdGlmZl92ZXJzaW9uX3N0cgpAQCAtNjYsMTMgKzg1LDQ2IEBACiAgICAgdW5zZXQodGlmZl92ZXJzaW9uX3N0cikKIGVuZGlmKCkKIAorZm9yZWFjaChfY29tcCBJTiBMSVNUUyBUSUZGX0ZJTkRfQ09NUE9ORU5UUykKKyAgaWYoX2NvbXAgU1RSRVFVQUwgIkNYWCIpCisgICAgaWYoTVNWQykKKyAgICAgICMgQysrIGJpbmRpbmdzIGFyZSBidWlsdCBpbnRvIHRoZSBtYWluIHRpZmYgbGlicmFyeS4KKyAgICAgIHNldChUSUZGX0NYWF9GT1VORCAxKQorICAgIGVsc2UoKQorICAgICAgZm9yZWFjaChuYW1lICR7VElGRl9OQU1FU30pCisgICAgICAgIGxpc3QoQVBQRU5EIFRJRkZYWF9OQU1FUyAiJHtuYW1lfXh4IikKKyAgICAgICAgbGlzdChBUFBFTkQgVElGRlhYX05BTUVTX0RFQlVHICIke25hbWV9eHhkIikKKyAgICAgIGVuZGZvcmVhY2goKQorICAgICAgZmluZF9saWJyYXJ5KFRJRkZYWF9MSUJSQVJZX1JFTEVBU0UgTkFNRVMgJHtUSUZGWFhfTkFNRVN9KQorICAgICAgZmluZF9saWJyYXJ5KFRJRkZYWF9MSUJSQVJZX0RFQlVHIE5BTUVTICR7VElGRlhYX05BTUVTX0RFQlVHfSkKKyAgICAgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9TZWxlY3RMaWJyYXJ5Q29uZmlndXJhdGlvbnMuY21ha2UpCisgICAgICBzZWxlY3RfbGlicmFyeV9jb25maWd1cmF0aW9ucyhUSUZGWFgpCisgICAgICBtYXJrX2FzX2FkdmFuY2VkKFRJRkZYWF9MSUJSQVJZX1JFTEVBU0UgVElGRlhYX0xJQlJBUllfREVCVUcpCisgICAgICB1bnNldChUSUZGWFhfTkFNRVMpCisgICAgICB1bnNldChUSUZGWFhfTkFNRVNfREVCVUcpCisgICAgICBpZihUSUZGWFhfTElCUkFSWSkKKyAgICAgICAgc2V0KFRJRkZfQ1hYX0ZPVU5EIDEpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKK3Vuc2V0KF9jb21wKQorCit1bnNldChUSUZGX05BTUVTKQordW5zZXQoVElGRl9OQU1FU19ERUJVRykKKwogaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlKQogRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKFRJRkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVfQ09NUE9ORU5UUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVJUkVEX1ZBUlMgVElGRl9MSUJSQVJZIFRJRkZfSU5DTFVERV9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX1ZBUiBUSUZGX1ZFUlNJT05fU1RSSU5HKQogCiBpZihUSUZGX0ZPVU5EKQogICBzZXQoVElGRl9MSUJSQVJJRVMgJHtUSUZGX0xJQlJBUll9KQorICBpZigiQ1hYIiBJTl9MSVNUIFRJRkZfRklORF9DT01QT05FTlRTIEFORCBOT1QgTVNWQykKKyAgICBsaXN0KEFQUEVORCBUSUZGX0xJQlJBUklFUyAke1RJRkZYWF9MSUJSQVJZfSkKKyAgZW5kaWYoKQorCiAgIHNldChUSUZGX0lOQ0xVREVfRElSUyAiJHtUSUZGX0lOQ0xVREVfRElSfSIpCiAKICAgaWYoTk9UIFRBUkdFVCBUSUZGOjpUSUZGKQpAQCAtMTAxLDYgKzE1Myw0MSBAQAogICAgICAgICBJTVBPUlRFRF9MT0NBVElPTl9ERUJVRyAiJHtUSUZGX0xJQlJBUllfREVCVUd9IikKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKKworICBpZihOT1QgVEFSR0VUIFRJRkY6OkNYWCkKKyAgICBpZihNU1ZDKQorICAgICAgYWRkX2xpYnJhcnkoVElGRjo6Q1hYIElOVEVSRkFDRSBJTVBPUlRFRCkKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgVElGRjo6Q1hYIFBST1BFUlRZIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyBUSUZGOjpUSUZGKQorICAgIGVsc2UoKQorICAgICAgYWRkX2xpYnJhcnkoVElGRjo6Q1hYIFVOS05PV04gSU1QT1JURUQpCisgICAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFRJRkY6OkNYWCBQUk9QRVJUWSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgVElGRjo6VElGRikKKyAgICAgIGlmKFRJRkZfSU5DTFVERV9ESVJTKQorICAgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVElGRjo6Q1hYIFBST1BFUlRJRVMKKyAgICAgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtUSUZGX0lOQ0xVREVfRElSU30iKQorICAgICAgZW5kaWYoKQorICAgICAgaWYoRVhJU1RTICIke1RJRkZYWF9MSUJSQVJZfSIpCisgICAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhUSUZGOjpDWFggUFJPUEVSVElFUworICAgICAgICAgIElNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xBTkdVQUdFUyAiQ1hYIgorICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIke1RJRkZYWF9MSUJSQVJZfSIpCisgICAgICBlbmRpZigpCisgICAgICBpZihFWElTVFMgIiR7VElGRlhYX0xJQlJBUllfUkVMRUFTRX0iKQorICAgICAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFRJRkY6OkNYWCBBUFBFTkQgUFJPUEVSVFkKKyAgICAgICAgICBJTVBPUlRFRF9DT05GSUdVUkFUSU9OUyBSRUxFQVNFKQorICAgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVElGRjo6Q1hYIFBST1BFUlRJRVMKKyAgICAgICAgICBJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MQU5HVUFHRVNfUkVMRUFTRSAiQ1hYIgorICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OX1JFTEVBU0UgIiR7VElGRlhYX0xJQlJBUllfUkVMRUFTRX0iKQorICAgICAgZW5kaWYoKQorICAgICAgaWYoRVhJU1RTICIke1RJRkZYWF9MSUJSQVJZX0RFQlVHfSIpCisgICAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgVElGRjo6Q1hYIEFQUEVORCBQUk9QRVJUWQorICAgICAgICAgIElNUE9SVEVEX0NPTkZJR1VSQVRJT05TIERFQlVHKQorICAgICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVElGRjo6Q1hYIFBST1BFUlRJRVMKKyAgICAgICAgICBJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MQU5HVUFHRVNfREVCVUcgIkNYWCIKKyAgICAgICAgICBJTVBPUlRFRF9MT0NBVElPTl9ERUJVRyAiJHtUSUZGWFhfTElCUkFSWV9ERUJVR30iKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCiBlbmRpZigpCiAKLW1hcmtfYXNfYWR2YW5jZWQoVElGRl9JTkNMVURFX0RJUiBUSUZGX0xJQlJBUlkpCittYXJrX2FzX2FkdmFuY2VkKFRJRkZfSU5DTFVERV9ESVIpCitjbWFrZV9wb2xpY3koUE9QKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kVGNsc2guY21ha2UgYi9Nb2R1bGVzL0ZpbmRUY2xzaC5jbWFrZQppbmRleCA4MmJlNDczLi5mMzA2ZDViIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRUY2xzaC5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRUY2xzaC5jbWFrZQpAQCAtMTUsMTUgKzE1LDggQEAKIAogICBUQ0xTSF9GT1VORCA9IFRSVUUgaWYgdGNsc2ggaGFzIGJlZW4gZm91bmQKICAgVENMX1RDTFNIID0gdGhlIHBhdGggdG8gdGhlIHRjbHNoIGV4ZWN1dGFibGUKLQotSW4gY3lnd2luLCBsb29rIGZvciB0aGUgY3lnd2luIHZlcnNpb24gZmlyc3QuICBEb24ndCBsb29rIGZvciBpdCBsYXRlcgotdG8gYXZvaWQgZmluZGluZyB0aGUgY3lnd2luIHZlcnNpb24gb24gYSBXaW4zMiBidWlsZC4KICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKLWlmKENZR1dJTikKLSAgZmluZF9wcm9ncmFtKFRDTF9UQ0xTSCBOQU1FUyBjeWd0Y2xzaDgzIGN5Z3RjbHNoODApCi1lbmRpZigpCi0KIGdldF9maWxlbmFtZV9jb21wb25lbnQoVEtfV0lTSF9QQVRIICIke1RLX1dJU0h9IiBQQVRIKQogZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChUS19XSVNIX1BBVEhfUEFSRU5UICIke1RLX1dJU0hfUEFUSH0iIFBBVEgpCiBzdHJpbmcoUkVHRVggUkVQTEFDRQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kVGhyZWFkcy5jbWFrZSBiL01vZHVsZXMvRmluZFRocmVhZHMuY21ha2UKaW5kZXggYjBjOTFiMi4uZWU0OTg2NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kVGhyZWFkcy5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRUaHJlYWRzLmNtYWtlCkBAIC03LDMxICs3LDQ0IEBACiAKIFRoaXMgbW9kdWxlIGRldGVybWluZXMgdGhlIHRocmVhZCBsaWJyYXJ5IG9mIHRoZSBzeXN0ZW0uCiAKLVRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBzZXQKK0ltcG9ydGVkIFRhcmdldHMKK15eXl5eXl5eXl5eXl5eXl4KIAotOjoKK1RoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyA6cHJvcF90Z3Q6YElNUE9SVEVEYCB0YXJnZXQ6CiAKLSAgQ01BS0VfVEhSRUFEX0xJQlNfSU5JVCAgICAgLSB0aGUgdGhyZWFkIGxpYnJhcnkKLSAgQ01BS0VfVVNFX1dJTjMyX1RIUkVBRFNfSU5JVCAtIHVzaW5nIFdJTjMyIHRocmVhZHM/Ci0gIENNQUtFX1VTRV9QVEhSRUFEU19JTklUICAgIC0gYXJlIHdlIHVzaW5nIHB0aHJlYWRzCi0gIENNQUtFX0hQX1BUSFJFQURTX0lOSVQgICAgIC0gYXJlIHdlIHVzaW5nIGhwIHB0aHJlYWRzCitgYFRocmVhZHM6OlRocmVhZHNgYAorICBUaGUgdGhyZWFkIGxpYnJhcnksIGlmIGZvdW5kLgogCi1UaGUgZm9sbG93aW5nIGltcG9ydCB0YXJnZXQgaXMgY3JlYXRlZAorUmVzdWx0IFZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXgogCi06OgorVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHNldDoKIAotICBUaHJlYWRzOjpUaHJlYWRzCitgYFRocmVhZHNfRk9VTkRgYAorICBJZiBhIHN1cHBvcnRlZCB0aHJlYWQgbGlicmFyeSB3YXMgZm91bmQuCitgYENNQUtFX1RIUkVBRF9MSUJTX0lOSVRgYAorICBUaGUgdGhyZWFkIGxpYnJhcnkgdG8gdXNlLiBUaGlzIG1heSBiZSBlbXB0eSBpZiB0aGUgdGhyZWFkIGZ1bmN0aW9ucworICBhcmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSBsaWJyYXJpZXMgYW5kIG5vIHNwZWNpYWwgZmxhZ3MgYXJlIG5lZWRlZAorICB0byB1c2UgdGhlbS4KK2BgQ01BS0VfVVNFX1dJTjMyX1RIUkVBRFNfSU5JVGBgCisgIElmIHRoZSBmb3VuZCB0aHJlYWQgbGlicmFyeSBpcyB0aGUgd2luMzIgb25lLgorYGBDTUFLRV9VU0VfUFRIUkVBRFNfSU5JVGBgCisgIElmIHRoZSBmb3VuZCB0aHJlYWQgbGlicmFyeSBpcyBwdGhyZWFkIGNvbXBhdGlibGUuCitgYENNQUtFX0hQX1BUSFJFQURTX0lOSVRgYAorICBJZiB0aGUgZm91bmQgdGhyZWFkIGxpYnJhcnkgaXMgdGhlIEhQIHRocmVhZCBsaWJyYXJ5LgogCi1JZiB0aGUgdXNlIG9mIHRoZSAtcHRocmVhZCBjb21waWxlciBhbmQgbGlua2VyIGZsYWcgaXMgcHJlZmVycmVkIHRoZW4gdGhlCi1jYWxsZXIgY2FuIHNldAorVmFyaWFibGVzIEFmZmVjdGluZyBCZWhhdmlvcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi06OgorLi4gdmFyaWFibGU6OiBUSFJFQURTX1BSRUZFUl9QVEhSRUFEX0ZMQUcKIAotICBUSFJFQURTX1BSRUZFUl9QVEhSRUFEX0ZMQUcKKyAgSWYgdGhlIHVzZSBvZiB0aGUgLXB0aHJlYWQgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFnIGlzIHByZWZlcnJlZCB0aGVuCisgIHRoZSBjYWxsZXIgY2FuIHNldCB0aGlzIHZhcmlhYmxlIHRvIFRSVUUuIFRoZSBjb21waWxlciBmbGFnIGNhbiBvbmx5IGJlCisgIHVzZWQgd2l0aCB0aGUgaW1wb3J0ZWQgdGFyZ2V0LiBVc2Ugb2YgYm90aCB0aGUgaW1wb3J0ZWQgdGFyZ2V0IGFzIHdlbGwKKyAgYXMgdGhpcyBzd2l0Y2ggaXMgaGlnaGx5IHJlY29tbWVuZGVkIGZvciBuZXcgY29kZS4KIAotVGhlIGNvbXBpbGVyIGZsYWcgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBpbXBvcnRlZAotdGFyZ2V0LiBVc2Ugb2YgYm90aCB0aGUgaW1wb3J0ZWQgdGFyZ2V0IGFzIHdlbGwgYXMgdGhpcyBzd2l0Y2ggaXMgaGlnaGx5Ci1yZWNvbW1lbmRlZCBmb3IgbmV3IGNvZGUuCisgIFRoaXMgdmFyaWFibGUgaGFzIG5vIGVmZmVjdCBpZiB0aGUgc3lzdGVtIGxpYnJhcmllcyBwcm92aWRlIHRoZQorICB0aHJlYWQgZnVuY3Rpb25zLCBpLmUuIHdoZW4gYGBDTUFLRV9USFJFQURfTElCU19JTklUYGAgd2lsbCBiZSBlbXB0eS4KICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKIGluY2x1ZGUgKENoZWNrTGlicmFyeUV4aXN0cykKQEAgLTYzLDYgKzc2LDcgQEAKICAgcHRocmVhZF90IHRocmVhZDsKICAgcHRocmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwgdGVzdF9mdW5jLCBOVUxMKTsKICAgcHRocmVhZF9kZXRhY2godGhyZWFkKTsKKyAgcHRocmVhZF9jYW5jZWwodGhyZWFkKTsKICAgcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiAgIHB0aHJlYWRfYXRmb3JrKE5VTEwsIE5VTEwsIE5VTEwpOwogICBwdGhyZWFkX2V4aXQoTlVMTCk7CkBAIC05MCw3ICsxMDQsNyBAQAogICBpZihOT1QgVGhyZWFkc19GT1VORCkKICAgICAjIElmIHdlIGRpZCBub3QgZm91bmQgLWxwdGhyZWFkLCAtbHB0aHJlYWQsIG9yIC1sdGhyZWFkLCBsb29rIGZvciAtcHRocmVhZAogICAgIGlmKE5PVCBERUZJTkVEIFRIUkVBRFNfSEFWRV9QVEhSRUFEX0FSRykKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiBjb21waWxlciBhY2NlcHRzIC1wdGhyZWFkIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNrIGlmIGNvbXBpbGVyIGFjY2VwdHMgLXB0aHJlYWQiKQogICAgICAgaWYoQ01BS0VfQ19DT01QSUxFUl9MT0FERUQpCiAgICAgICAgIHNldChfdGhyZWFkc19zcmMgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DaGVja0ZvclB0aHJlYWRzLmMpCiAgICAgICBlbHNlaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0xPQURFRCkKQEAgLTEwNiw5ICsxMjAsOSBAQAogCiAgICAgICBpZihUSFJFQURTX0hBVkVfUFRIUkVBRF9BUkcpCiAgICAgICAgIHNldChUaHJlYWRzX0ZPVU5EIFRSVUUpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiBjb21waWxlciBhY2NlcHRzIC1wdGhyZWFkIC0geWVzIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJ5ZXMiKQogICAgICAgZWxzZSgpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiBjb21waWxlciBhY2NlcHRzIC1wdGhyZWFkIC0gbm8iKQorICAgICAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vIikKICAgICAgICAgZmlsZShBUFBFTkQKICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICAgIkRldGVybWluaW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgLXB0aHJlYWQgZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKQEAgLTIyNCw4ICsyMzgsOCBAQAogCiAgIGlmKFRIUkVBRFNfSEFWRV9QVEhSRUFEX0FSRykKICAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFRocmVhZHM6OlRocmVhZHMKLSAgICAgICAgICAgICAgICAgUFJPUEVSVFkgSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OUyAiJDwkPENPTVBJTEVfTEFOR1VBR0U6Q1VEQT46U0hFTEw6LVhjb21waWxlciAtcHRocmVhZD4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiQ8JDxOT1Q6JDxDT01QSUxFX0xBTkdVQUdFOkNVREE+PjotcHRocmVhZD4iKQorICAgICAgICAgICAgICAgICBQUk9QRVJUWSBJTlRFUkZBQ0VfQ09NUElMRV9PUFRJT05TICIkPCQ8Q09NUElMRV9MQU5HX0FORF9JRDpDVURBLE5WSURJQT46U0hFTEw6LVhjb21waWxlciAtcHRocmVhZD4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiQ8JDxOT1Q6JDxDT01QSUxFX0xBTkdfQU5EX0lEOkNVREEsTlZJRElBPj46LXB0aHJlYWQ+IikKICAgZW5kaWYoKQogCiAgIGlmKENNQUtFX1RIUkVBRF9MSUJTX0lOSVQpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRWdWxrYW4uY21ha2UgYi9Nb2R1bGVzL0ZpbmRWdWxrYW4uY21ha2UKaW5kZXggNTVkYTU1Zi4uMGVjNjAxMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kVnVsa2FuLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFZ1bGthbi5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRWdWxrYW4KIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy43CisKIEZpbmQgVnVsa2FuLCB3aGljaCBpcyBhIGxvdy1vdmVyaGVhZCwgY3Jvc3MtcGxhdGZvcm0gM0QgZ3JhcGhpY3MKIGFuZCBjb21wdXRpbmcgQVBJLgogCkBAIC0xNCw2ICsxNiw5IEBACiBUaGlzIG1vZHVsZSBkZWZpbmVzIDpwcm9wX3RndDpgSU1QT1JURURgIHRhcmdldCBgYFZ1bGthbjo6VnVsa2FuYGAsIGlmCiBWdWxrYW4gaGFzIGJlZW4gZm91bmQuCiAKK1RoaXMgbW9kdWxlIGRlZmluZXMgOnByb3BfdGd0OmBJTVBPUlRFRGAgdGFyZ2V0IGBgVnVsa2FuOjpnbHNsY2BgLCBpZgorVnVsa2FuIGFuZCB0aGUgR0xTTEMgU1BJUi1WIGNvbXBpbGVyIGhhcyBiZWVuIGZvdW5kLgorCiBSZXN1bHQgVmFyaWFibGVzCiBeXl5eXl5eXl5eXl5eXl5eCiAKQEAgLTIzLDQ1ICsyOCw2NSBAQAogICBWdWxrYW5fSU5DTFVERV9ESVJTICAgLSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBWdWxrYW4KICAgVnVsa2FuX0xJQlJBUklFUyAgICAgIC0gbGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeSB0byB1c2UgVnVsa2FuCiAKLVRoZSBtb2R1bGUgd2lsbCBhbHNvIGRlZmluZSB0d28gY2FjaGUgdmFyaWFibGVzOjoKK1RoZSBtb2R1bGUgd2lsbCBhbHNvIGRlZmluZSB0aHJlZSBjYWNoZSB2YXJpYWJsZXM6OgogCi0gIFZ1bGthbl9JTkNMVURFX0RJUiAgICAtIHRoZSBWdWxrYW4gaW5jbHVkZSBkaXJlY3RvcnkKLSAgVnVsa2FuX0xJQlJBUlkgICAgICAgIC0gdGhlIHBhdGggdG8gdGhlIFZ1bGthbiBsaWJyYXJ5CisgIFZ1bGthbl9JTkNMVURFX0RJUiAgICAgICAgLSB0aGUgVnVsa2FuIGluY2x1ZGUgZGlyZWN0b3J5CisgIFZ1bGthbl9MSUJSQVJZICAgICAgICAgICAgLSB0aGUgcGF0aCB0byB0aGUgVnVsa2FuIGxpYnJhcnkKKyAgVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEUgICAtIHRoZSBwYXRoIHRvIHRoZSBHTFNMIFNQSVItViBjb21waWxlcgorCitIaW50cworXl5eXl4KKworVGhlIGBgVlVMS0FOX1NES2BgIGVudmlyb25tZW50IHZhcmlhYmxlIG9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZQorbG9jYXRpb24gb2YgdGhlIFZ1bGthbiBTREsgcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBnaXZlbgorYXJjaGl0ZWN0dXJlLiBJdCBpcyB0eXBpY2FsbHkgc2V0IGJ5IHNvdXJjaW5nIHRoZSB0b3BsZXZlbAorYGBzZXR1cC1lbnYuc2hgYCBzY3JpcHQgb2YgdGhlIFZ1bGthbiBTREsgZGlyZWN0b3J5IGludG8gdGhlIHNoZWxsCitlbnZpcm9ubWVudC4KIAogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAogaWYoV0lOMzIpCiAgIGZpbmRfcGF0aChWdWxrYW5fSU5DTFVERV9ESVIKICAgICBOQU1FUyB2dWxrYW4vdnVsa2FuLmgKLSAgICBQQVRIUworICAgIEhJTlRTCiAgICAgICAiJEVOVntWVUxLQU5fU0RLfS9JbmNsdWRlIgogICAgICkKIAogICBpZihDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCiAgICAgZmluZF9saWJyYXJ5KFZ1bGthbl9MSUJSQVJZCiAgICAgICBOQU1FUyB2dWxrYW4tMQotICAgICAgUEFUSFMKKyAgICAgIEhJTlRTCiAgICAgICAgICIkRU5We1ZVTEtBTl9TREt9L0xpYiIKICAgICAgICAgIiRFTlZ7VlVMS0FOX1NES30vQmluIgotICAgICAgICApCisgICAgICApCisgICAgZmluZF9wcm9ncmFtKFZ1bGthbl9HTFNMQ19FWEVDVVRBQkxFCisgICAgICBOQU1FUyBnbHNsYworICAgICAgSElOVFMKKyAgICAgICAgIiRFTlZ7VlVMS0FOX1NES30vQmluIgorICAgICAgKQogICBlbHNlaWYoQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA0KQogICAgIGZpbmRfbGlicmFyeShWdWxrYW5fTElCUkFSWQogICAgICAgTkFNRVMgdnVsa2FuLTEKLSAgICAgIFBBVEhTCisgICAgICBISU5UUwogICAgICAgICAiJEVOVntWVUxLQU5fU0RLfS9MaWIzMiIKICAgICAgICAgIiRFTlZ7VlVMS0FOX1NES30vQmluMzIiCi0gICAgICAgIE5PX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRICi0gICAgICAgICkKKyAgICAgICkKKyAgICBmaW5kX3Byb2dyYW0oVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEUKKyAgICAgIE5BTUVTIGdsc2xjCisgICAgICBISU5UUworICAgICAgICAiJEVOVntWVUxLQU5fU0RLfS9CaW4zMiIKKyAgICAgICkKICAgZW5kaWYoKQogZWxzZSgpCi0gICAgZmluZF9wYXRoKFZ1bGthbl9JTkNMVURFX0RJUgotICAgICAgTkFNRVMgdnVsa2FuL3Z1bGthbi5oCi0gICAgICBQQVRIUwotICAgICAgICAiJEVOVntWVUxLQU5fU0RLfS9pbmNsdWRlIikKLSAgICBmaW5kX2xpYnJhcnkoVnVsa2FuX0xJQlJBUlkKLSAgICAgIE5BTUVTIHZ1bGthbgotICAgICAgUEFUSFMKLSAgICAgICAgIiRFTlZ7VlVMS0FOX1NES30vbGliIikKKyAgZmluZF9wYXRoKFZ1bGthbl9JTkNMVURFX0RJUgorICAgIE5BTUVTIHZ1bGthbi92dWxrYW4uaAorICAgIEhJTlRTICIkRU5We1ZVTEtBTl9TREt9L2luY2x1ZGUiKQorICBmaW5kX2xpYnJhcnkoVnVsa2FuX0xJQlJBUlkKKyAgICBOQU1FUyB2dWxrYW4KKyAgICBISU5UUyAiJEVOVntWVUxLQU5fU0RLfS9saWIiKQorICBmaW5kX3Byb2dyYW0oVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEUKKyAgICBOQU1FUyBnbHNsYworICAgIEhJTlRTICIkRU5We1ZVTEtBTl9TREt9L2JpbiIpCiBlbmRpZigpCiAKIHNldChWdWxrYW5fTElCUkFSSUVTICR7VnVsa2FuX0xJQlJBUll9KQpAQCAtNzIsNyArOTcsNyBAQAogICBERUZBVUxUX01TRwogICBWdWxrYW5fTElCUkFSWSBWdWxrYW5fSU5DTFVERV9ESVIpCiAKLW1hcmtfYXNfYWR2YW5jZWQoVnVsa2FuX0lOQ0xVREVfRElSIFZ1bGthbl9MSUJSQVJZKQorbWFya19hc19hZHZhbmNlZChWdWxrYW5fSU5DTFVERV9ESVIgVnVsa2FuX0xJQlJBUlkgVnVsa2FuX0dMU0xDX0VYRUNVVEFCTEUpCiAKIGlmKFZ1bGthbl9GT1VORCBBTkQgTk9UIFRBUkdFVCBWdWxrYW46OlZ1bGthbikKICAgYWRkX2xpYnJhcnkoVnVsa2FuOjpWdWxrYW4gVU5LTk9XTiBJTVBPUlRFRCkKQEAgLTgwLDMgKzEwNSw4IEBACiAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7VnVsa2FuX0xJQlJBUklFU30iCiAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7VnVsa2FuX0lOQ0xVREVfRElSU30iKQogZW5kaWYoKQorCitpZihWdWxrYW5fRk9VTkQgQU5EIFZ1bGthbl9HTFNMQ19FWEVDVVRBQkxFIEFORCBOT1QgVEFSR0VUIFZ1bGthbjo6Z2xzbGMpCisgIGFkZF9leGVjdXRhYmxlKFZ1bGthbjo6Z2xzbGMgSU1QT1JURUQpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgVnVsa2FuOjpnbHNsYyBQUk9QRVJUWSBJTVBPUlRFRF9MT0NBVElPTiAiJHtWdWxrYW5fR0xTTENfRVhFQ1VUQUJMRX0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kWDExLmNtYWtlIGIvTW9kdWxlcy9GaW5kWDExLmNtYWtlCmluZGV4IGIyOGRkMTIuLjk1OGEyMmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRmluZFgxMS5jbWFrZQorKysgYi9Nb2R1bGVzL0ZpbmRYMTEuY21ha2UKQEAgLTI1LDYgKzI1LDEwIEBACiAgIFgxMV9YYWNjZXNzcnVsZXNfSU5DTFVERV9QQVRILAogICBYMTFfWGFjY2Vzc3N0cl9JTkNMVURFX1BBVEgsICAgICAgICAgICAgICAgICAgICAgICBYMTFfWGFjY2Vzc19GT1VORAogICBYMTFfWGF1X0lOQ0xVREVfUEFUSCwgICAgICAgICAgWDExX1hhdV9MSUIsICAgICAgICBYMTFfWGF1X0ZPVU5ELCAgICAgICAgWDExOjpYYXUKKyAgWDExX3hjYl9JTkNMVURFX1BBVEgsICAgICAgICAgIFgxMV94Y2JfTElCLCAgICAgICAgWDExX3hjYl9GT1VORCwgICAgICAgIFgxMTo6eGNiCisgIFgxMV9YMTFfeGNiX0lOQ0xVREVfUEFUSCwgICAgICBYMTFfWDExX3hjYl9MSUIsICAgIFgxMV9YMTFfeGNiX0ZPVU5ELCAgICBYMTE6OlgxMV94Y2IKKyAgWDExX3hjYl9pY2NjbV9JTkNMVURFX1BBVEgsICAgIFgxMV94Y2JfaWNjY21fTElCLCAgWDExX3hjYl9pY2NjbV9GT1VORCwgIFgxMTo6eGNiX2ljY2NtCisgIFgxMV94Y2JfeGtiX0lOQ0xVREVfUEFUSCwgICAgICBYMTFfeGNiX3hrYl9MSUIsICAgIFgxMV94Y2JfeGtiX0ZPVU5ELCAgICBYMTE6OnhjYl94a2IKICAgWDExX1hjb21wb3NpdGVfSU5DTFVERV9QQVRILCAgIFgxMV9YY29tcG9zaXRlX0xJQiwgWDExX1hjb21wb3NpdGVfRk9VTkQsIFgxMTo6WGNvbXBvc2l0ZQogICBYMTFfWGN1cnNvcl9JTkNMVURFX1BBVEgsICAgICAgWDExX1hjdXJzb3JfTElCLCAgICBYMTFfWGN1cnNvcl9GT1VORCwgICAgWDExOjpYY3Vyc29yCiAgIFgxMV9YZGFtYWdlX0lOQ0xVREVfUEFUSCwgICAgICBYMTFfWGRhbWFnZV9MSUIsICAgIFgxMV9YZGFtYWdlX0ZPVU5ELCAgICBYMTE6OlhkYW1hZ2UKQEAgLTM4LDYgKzQyLDggQEAKICAgWDExX1hpbmVyYW1hX0lOQ0xVREVfUEFUSCwgICAgIFgxMV9YaW5lcmFtYV9MSUIsICAgWDExX1hpbmVyYW1hX0ZPVU5ELCAgIFgxMTo6WGluZXJhbWEKICAgWDExX1hrYl9JTkNMVURFX1BBVEgsCiAgIFgxMV9Ya2JsaWJfSU5DTFVERV9QQVRILCAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMV9Ya2JfRk9VTkQsICAgICAgICBYMTE6OlhrYgorICBYMTFfeGtiY29tbW9uX0lOQ0xVREVfUEFUSCwgICAgWDExX3hrYmNvbW1vbl9MSUIsICBYMTFfeGtiY29tbW9uX0ZPVU5ELCAgWDExOjp4a2Jjb21tb24KKyAgWDExX3hrYmNvbW1vbl9YMTFfSU5DTFVERV9QQVRILFgxMV94a2Jjb21tb25fWDExX0xJQixYMTFfeGtiY29tbW9uX1gxMV9GT1VORCxYMTE6OnhrYmNvbW1vbl9YMTEKICAgWDExX3hrYmZpbGVfSU5DTFVERV9QQVRILCAgICAgIFgxMV94a2JmaWxlX0xJQiwgICAgWDExX3hrYmZpbGVfRk9VTkQsICAgIFgxMTo6eGtiZmlsZQogICBYMTFfWG11X0lOQ0xVREVfUEFUSCwgICAgICAgICAgWDExX1htdV9MSUIsICAgICAgICBYMTFfWG11X0ZPVU5ELCAgICAgICAgWDExOjpYbXUKICAgWDExX1hwbV9JTkNMVURFX1BBVEgsICAgICAgICAgIFgxMV9YcG1fTElCLCAgICAgICAgWDExX1hwbV9GT1VORCwgICAgICAgIFgxMTo6WHBtCkBAIC01Myw2ICs1OSw3IEBACiAgIFgxMV9YU2htX0lOQ0xVREVfUEFUSCwgICAgICAgICAoaW4gWDExX1hleHRfTElCKSwgIFgxMV9YU2htX0ZPVU5ECiAgIFgxMV9Yc2hhcGVfSU5DTFVERV9QQVRILCAgICAgICAoaW4gWDExX1hleHRfTElCKSwgIFgxMV9Yc2hhcGVfRk9VTkQKICAgWDExX1hTeW5jX0lOQ0xVREVfUEFUSCwgICAgICAgIChpbiBYMTFfWGV4dF9MSUIpLCAgWDExX1hTeW5jX0ZPVU5ECisgIFgxMV9YYXdfSU5DTFVERV9QQVRILCAgICAgICAgICBYMTFfWGF3X0xJQiAgICAgICAgIFgxMV9YYXdfRk9VTkQgICAgICAgICBYMTE6OlhhdwogI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KIAogaWYgKFVOSVgpCkBAIC05NCw2ICsxMDEsMTAgQEAKICAgZmluZF9wYXRoKFgxMV9YYWNjZXNzcnVsZXNfSU5DTFVERV9QQVRIIFgxMS9leHRlbnNpb25zL1hLQnJ1bGVzLmggICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGFjY2Vzc3N0cl9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWEtCc3RyLmggICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hhdV9JTkNMVURFX1BBVEggWDExL1hhdXRoLmggICAgICAgICAgICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9wYXRoKFgxMV9YYXdfSU5DTFVERV9QQVRIIFgxMS9YYXcvSW50cmluc2ljLmggICAgICAgICAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCisgIGZpbmRfcGF0aChYMTFfeGNiX0lOQ0xVREVfUEFUSCB4Y2IveGNiLmggICAgICAgICAgICAgICAgICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQorICBmaW5kX3BhdGgoWDExX1gxMV94Y2JfSU5DTFVERV9QQVRIIFgxMS9YbGliLXhjYi5oICAgICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9wYXRoKFgxMV94Y2JfaWNjY21fSU5DTFVERV9QQVRIIHhjYi94Y2JfaWNjY20uaCAgICAgICAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGNvbXBvc2l0ZV9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hjdXJzb3JfSU5DTFVERV9QQVRIIFgxMS9YY3Vyc29yL1hjdXJzb3IuaCAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKICAgZmluZF9wYXRoKFgxMV9YZGFtYWdlX0lOQ0xVREVfUEFUSCBYMTEvZXh0ZW5zaW9ucy9YZGFtYWdlLmggICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCkBAIC0xMDcsNiArMTE4LDggQEAKICAgZmluZF9wYXRoKFgxMV9YaV9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWElucHV0LmggICAgICAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWGluZXJhbWFfSU5DTFVERV9QQVRIIFgxMS9leHRlbnNpb25zL1hpbmVyYW1hLmggICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hrYl9JTkNMVURFX1BBVEggWDExL2V4dGVuc2lvbnMvWEtCLmggICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9wYXRoKFgxMV94a2Jjb21tb25fSU5DTFVERV9QQVRIIHhrYmNvbW1vbi94a2Jjb21tb24uaCAgICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCisgIGZpbmRfcGF0aChYMTFfeGtiY29tbW9uX1gxMV9JTkNMVURFX1BBVEggeGtiY29tbW9uL3hrYmNvbW1vbi14MTEuaCAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hrYmxpYl9JTkNMVURFX1BBVEggWDExL1hLQmxpYi5oICAgICAgICAgICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKICAgZmluZF9wYXRoKFgxMV94a2JmaWxlX0lOQ0xVREVfUEFUSCBYMTEvZXh0ZW5zaW9ucy9YS0JmaWxlLmggICAgICAgICR7WDExX0lOQ19TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfcGF0aChYMTFfWG11X0lOQ0xVREVfUEFUSCBYMTEvWG11L1htdS5oICAgICAgICAgICAgICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQpAQCAtMTIzLDYgKzEzNiw4IEBACiAgIGZpbmRfcGF0aChYMTFfWHZfSU5DTFVERV9QQVRIIFgxMS9leHRlbnNpb25zL1h2bGliLmggICAgICAgICAgICAgICAke1gxMV9JTkNfU0VBUkNIX1BBVEh9KQogICBmaW5kX3BhdGgoWDExX1hTeW5jX0lOQ0xVREVfUEFUSCBYMTEvZXh0ZW5zaW9ucy9zeW5jLmggICAgICAgICAgICAgJHtYMTFfSU5DX1NFQVJDSF9QQVRIfSkKIAorCisKICAgIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgc2V0KFgxMV9YaW5wdXRfSU5DTFVERV9QQVRIICIke1gxMV9YaV9JTkNMVURFX1BBVEh9IikKICAgc2V0KFgxMV94Zjg2bWlzY19JTkNMVURFX1BBVEggIiR7WDExX1h4Zjg2bWlzY19JTkNMVURFX1BBVEh9IikKQEAgLTEzNyw2ICsxNTIsMTEgQEAKICAgZmluZF9saWJyYXJ5KFgxMV9JQ0VfTElCIElDRSAgICAgICAgICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfbGlicmFyeShYMTFfU01fTElCIFNNICAgICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX1hhdV9MSUIgWGF1ICAgICAgICAgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9saWJyYXJ5KFgxMV9YYXdfTElCIFhhdyAgICAgICAgICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCisgIGZpbmRfbGlicmFyeShYMTFfeGNiX0xJQiB4Y2IgICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQorICBmaW5kX2xpYnJhcnkoWDExX1gxMV94Y2JfTElCIFgxMS14Y2IgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKKyAgZmluZF9saWJyYXJ5KFgxMV94Y2JfaWNjY21fTElCIHhjYi1pY2NjbSAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCisgIGZpbmRfbGlicmFyeShYMTFfeGNiX3hrYl9MSUIgeGNiLXhrYiAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX1hjb21wb3NpdGVfTElCIFhjb21wb3NpdGUgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YY3Vyc29yX0xJQiBYY3Vyc29yICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfbGlicmFyeShYMTFfWGRhbWFnZV9MSUIgWGRhbWFnZSAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQpAQCAtMTQ2LDYgKzE2Niw4IEBACiAgIGZpbmRfbGlicmFyeShYMTFfWGZ0X0xJQiBYZnQgICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX1hpX0xJQiBYaSAgICAgICAgICAgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YaW5lcmFtYV9MSUIgWGluZXJhbWEgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCisgIGZpbmRfbGlicmFyeShYMTFfeGtiY29tbW9uX0xJQiB4a2Jjb21tb24gICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQorICBmaW5kX2xpYnJhcnkoWDExX3hrYmNvbW1vbl9YMTFfTElCIHhrYmNvbW1vbi14MTEgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQogICBmaW5kX2xpYnJhcnkoWDExX3hrYmZpbGVfTElCIHhrYmZpbGUgICAgICAgJHtYMTFfTElCX1NFQVJDSF9QQVRIfSkKICAgZmluZF9saWJyYXJ5KFgxMV9YbXVfTElCIFhtdSAgICAgICAgICAgICAgICR7WDExX0xJQl9TRUFSQ0hfUEFUSH0pCiAgIGZpbmRfbGlicmFyeShYMTFfWHBtX0xJQiBYcG0gICAgICAgICAgICAgICAke1gxMV9MSUJfU0VBUkNIX1BBVEh9KQpAQCAtMjIxLDYgKzI0MywyMiBAQAogICAgIHNldChYMTFfWGF1X0ZPVU5EIFRSVUUpCiAgIGVuZGlmICgpCiAKKyAgaWYgKFgxMV94Y2JfTElCIEFORCBYMTFfeGNiX0lOQ0xVREVfUEFUSCkKKyAgICBzZXQoWDExX3hjYl9GT1VORCBUUlVFKQorICBlbmRpZiAoKQorCisgIGlmIChYMTFfWDExX3hjYl9MSUIgQU5EIFgxMV9YMTFfeGNiX0lOQ0xVREVfUEFUSCkKKyAgICBzZXQoWDExX1gxMV94Y2JfRk9VTkQgVFJVRSkKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX3hjYl9pY2NjbV9MSUIgQU5EIFgxMV94Y2JfaWNjY21fSU5DTFVERV9QQVRIKQorICAgIHNldChYMTFfeGNiX2ljY2NtX0ZPVU5EIFRSVUUpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94Y2JfeGtiX0xJQikKKyAgICBzZXQoWDExX3hjYl94a2JfRk9VTkQgVFJVRSkKKyAgZW5kaWYgKCkKKwogICBpZiAoWDExX1hkbWNwX0lOQ0xVREVfUEFUSCBBTkQgWDExX1hkbWNwX0xJQikKICAgICAgIHNldChYMTFfWGRtY3BfRk9VTkQgVFJVRSkKICAgICAgIGxpc3QoQVBQRU5EIFgxMV9JTkNMVURFX0RJUiAke1gxMV9YZG1jcF9JTkNMVURFX1BBVEh9KQpAQCAtMzI2LDYgKzM2NCwxNCBAQAogICAgICBsaXN0KEFQUEVORCBYMTFfSU5DTFVERV9ESVIgJHtYMTFfWGtiX0lOQ0xVREVfUEFUSH0gKQogICBlbmRpZiAoKQogCisgIGlmIChYMTFfeGtiY29tbW9uX0lOQ0xVREVfUEFUSCBBTkQgWDExX3hrYmNvbW1vbl9MSUIpCisgICAgIHNldChYMTFfeGtiY29tbW9uX0ZPVU5EIFRSVUUpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94a2Jjb21tb25fWDExX0lOQ0xVREVfUEFUSCBBTkQgWDExX3hrYmNvbW1vbl9YMTFfTElCKQorICAgICBzZXQoWDExX3hrYmNvbW1vbl9YMTFfRk9VTkQgVFJVRSkKKyAgZW5kaWYgKCkKKwogICBpZiAoWDExX3hrYmZpbGVfSU5DTFVERV9QQVRIIEFORCBYMTFfeGtiZmlsZV9MSUIgQU5EIFgxMV9YbGliX0lOQ0xVREVfUEFUSCkKICAgICAgc2V0KFgxMV94a2JmaWxlX0ZPVU5EIFRSVUUpCiAgICAgICMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCkBAIC0zNTEsNiArMzk3LDEwIEBACiAgICAgIHNldChYMTFfU01fRk9VTkQgVFJVRSkKICAgZW5kaWYoKQogCisgIGlmKFgxMV9YYXdfTElCIEFORCBYMTFfWGF3X0lOQ0xVREVfUEFUSCkKKyAgICAgIHNldChYMTFfWGF3X0ZPVU5EIFRSVUUpCisgIGVuZGlmKCkKKwogICAjIE1vc3Qgb2YgdGhlIFgxMSBoZWFkZXJzIHdpbGwgYmUgaW4gdGhlIHNhbWUgZGlyZWN0b3JpZXMsIGF2b2lkCiAgICMgY3JlYXRpbmcgYSBodWdlIGxpc3Qgb2YgZHVwbGljYXRlcy4KICAgaWYgKFgxMV9JTkNMVURFX0RJUikKQEAgLTQ3OCw2ICs1MjgsNDMgQEAKICAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1gxMV9YYXVfSU5DTFVERV9QQVRIfSIpCiAgIGVuZGlmICgpCiAKKyAgaWYgKFgxMV9YYXdfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjpYYXcpCisgICAgYWRkX2xpYnJhcnkoWDExOjpYYXcgVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoWDExOjpYYXcgUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX1hhd19MSUJ9IgorICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7WDExX1hhd19JTkNMVURFX1BBVEh9IgorICAgICAgSU5URVJGQUNFX0xJTktfTElCUkFSSUVTICJYMTE6OlhleHQ7WDExOjpYbXU7WDExOjpYdDtYMTE6OlhwbTtYMTE6OlgxMSIpCisgIGVuZGlmICgpCisKKyAgaWYgKFgxMV94Y2JfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjp4Y2IpCisgICAgYWRkX2xpYnJhcnkoWDExOjp4Y2IgVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoWDExOjp4Y2IgUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX3hjYl9MSUJ9IgorICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7WDExX3hjYl9JTkNMVURFX1BBVEh9IikKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX1gxMV94Y2JfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjpYMTFfeGNiKQorICAgIGFkZF9saWJyYXJ5KFgxMTo6WDExX3hjYiBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OlgxMV94Y2IgUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX1gxMV94Y2JfTElCfSIKKyAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1gxMV9YMTFfeGNiX0lOQ0xVREVfUEFUSH0iCisgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlgxMTo6eGNiO1gxMTo6WDExIikKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX3hjYl9pY2NjbV9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6OnhjYl9pY2NjbSkKKyAgICBhZGRfbGlicmFyeShYMTE6OnhjYl9pY2NjbSBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OnhjYl9pY2NjbSBQUk9QRVJUSUVTCisgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHtYMTFfeGNiX2ljY2NtX0xJQn0iCisgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlgxMTo6eGNiIikKKyAgZW5kaWYgKCkKKworICBpZiAoWDExX3hjYl94a2JfRk9VTkQgQU5EIE5PVCBUQVJHRVQgWDExOjp4Y2JfeGtiKQorICAgIGFkZF9saWJyYXJ5KFgxMTo6eGNiX3hrYiBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OnhjYl94a2IgUFJPUEVSVElFUworICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7WDExX3hjYl94a2JfTElCfSIKKyAgICAgIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyAiWDExOjp4Y2IiKQorICBlbmRpZiAoKQorCiAgIGlmIChYMTFfWGNvbXBvc2l0ZV9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6Olhjb21wb3NpdGUpCiAgICAgYWRkX2xpYnJhcnkoWDExOjpYY29tcG9zaXRlIFVOS05PV04gSU1QT1JURUQpCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFgxMTo6WGNvbXBvc2l0ZSBQUk9QRVJUSUVTCkBAIC01NzIsNiArNjU5LDIxIEBACiAgICAgICBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgIlgxMTo6WDExIikKICAgZW5kaWYgKCkKIAorICBpZiAoWDExX3hrYmNvbW1vbl9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6OnhrYmNvbW1vbikKKyAgICBhZGRfbGlicmFyeShYMTE6OnhrYmNvbW1vbiBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhYMTE6OnhrYmNvbW1vbiBQUk9QRVJUSUVTCisgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHtYMTFfeGtiY29tbW9uX0xJQn0iCisgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtYMTFfeGtiY29tbW9uX0lOQ0xVREVfUEFUSH0iKQorICBlbmRpZiAoKQorCisgIGlmIChYMTFfeGtiY29tbW9uX1gxMV9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6OnhrYmNvbW1vbl9YMTEpCisgICAgYWRkX2xpYnJhcnkoWDExOjp4a2Jjb21tb25fWDExIFVOS05PV04gSU1QT1JURUQpCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFgxMTo6eGtiY29tbW9uX1gxMSBQUk9QRVJUSUVTCisgICAgICBJTVBPUlRFRF9MT0NBVElPTiAiJHtYMTFfeGtiY29tbW9uX1gxMV9MSUJ9IgorICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7WDExX3hrYmNvbW1vbl9YMTFfSU5DTFVERV9QQVRIfSIKKyAgICAgIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyAiWDExOjpYMTE7WDExOjp4a2Jjb21tb24iKQorICBlbmRpZiAoKQorCiAgIGlmIChYMTFfeGtiZmlsZV9GT1VORCBBTkQgTk9UIFRBUkdFVCBYMTE6OnhrYmZpbGUpCiAgICAgYWRkX2xpYnJhcnkoWDExOjp4a2JmaWxlIFVOS05PV04gSU1QT1JURUQpCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFgxMTo6eGtiZmlsZSBQUk9QRVJUSUVTCkBAIC02NjgsNiArNzcwLDExIEBACiAgICAgWDExX1hleHRfTElCCiAgICAgWDExX1hhdV9MSUIKICAgICBYMTFfWGF1X0lOQ0xVREVfUEFUSAorICAgIFgxMV94Y2JfTElCCisgICAgWDExX3hjYl9JTkNMVURFX1BBVEgKKyAgICBYMTFfeGNiX3hrYl9MSUIKKyAgICBYMTFfWDExX3hjYl9MSUIKKyAgICBYMTFfWDExX3hjYl9JTkNMVURFX1BBVEgKICAgICBYMTFfWGxpYl9JTkNMVURFX1BBVEgKICAgICBYMTFfWHV0aWxfSU5DTFVERV9QQVRICiAgICAgWDExX1hjb21wb3NpdGVfSU5DTFVERV9QQVRICkBAIC03MDQsNiArODExLDEwIEBACiAgICAgWDExX1hkbWNwX0lOQ0xVREVfUEFUSAogICAgIFgxMV9Ya2JfSU5DTFVERV9QQVRICiAgICAgWDExX1hrYmxpYl9JTkNMVURFX1BBVEgKKyAgICBYMTFfeGtiY29tbW9uX0lOQ0xVREVfUEFUSAorICAgIFgxMV94a2Jjb21tb25fTElCCisgICAgWDExX3hrYmNvbW1vbl9YMTFfSU5DTFVERV9QQVRICisgICAgWDExX3hrYmNvbW1vbl9YMTFfTElCCiAgICAgWDExX3hrYmZpbGVfSU5DTFVERV9QQVRICiAgICAgWDExX3hrYmZpbGVfTElCCiAgICAgWDExX1htdV9JTkNMVURFX1BBVEgKQEAgLTcyMyw2ICs4MzQsOCBAQAogICAgIFgxMV9TTV9MSUIKICAgICBYMTFfU01fSU5DTFVERV9QQVRICiAgICAgWDExX1hTeW5jX0lOQ0xVREVfUEFUSAorICAgIFgxMV9YYXdfTElCCisgICAgWDExX1hhd19JTkNMVURFX1BBVEgKICAgKQogICBzZXQoQ01BS0VfRklORF9GUkFNRVdPUksgJHtDTUFLRV9GSU5EX0ZSQU1FV09SS19TQVZFfSkKICAgc2V0KENNQUtFX1JFUVVJUkVEX1FVSUVUICR7Q01BS0VfUkVRVUlSRURfUVVJRVRfU0FWRX0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRYQ1Rlc3QuY21ha2UgYi9Nb2R1bGVzL0ZpbmRYQ1Rlc3QuY21ha2UKaW5kZXggMTU3MjFlMS4uMWY2ZTgyNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kWENUZXN0LmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFhDVGVzdC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEZpbmRYQ1Rlc3QKIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIEZ1bmN0aW9ucyB0byBoZWxwIGNyZWF0aW5nIGFuZCBleGVjdXRpbmcgWENUZXN0IGJ1bmRsZXMuCiAKIEFuIFhDVGVzdCBidW5kbGUgaXMgYSBDRkJ1bmRsZSB3aXRoIGEgc3BlY2lhbCBwcm9kdWN0LXR5cGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFhhbGFuQy5jbWFrZSBiL01vZHVsZXMvRmluZFhhbGFuQy5jbWFrZQppbmRleCAzYWRhYTQ0Li5hN2ZiNzY2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRYYWxhbkMuY21ha2UKKysrIGIvTW9kdWxlcy9GaW5kWGFsYW5DLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogRmluZFhhbGFuQwogLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIEZpbmQgdGhlIEFwYWNoZSBYYWxhbi1DKysgWFNMIHRyYW5zZm9ybSBwcm9jZXNzb3IgaGVhZGVycyBhbmQgbGlicmFyaWVzLgogCiBJbXBvcnRlZCB0YXJnZXRzCkBAIC00Nyw5ICs0OSw5IEBACiBmdW5jdGlvbihfWGFsYW5DX0dFVF9WRVJTSU9OICB2ZXJzaW9uX2hkcikKICAgICBmaWxlKFNUUklOR1MgJHt2ZXJzaW9uX2hkcn0gX2NvbnRlbnRzIFJFR0VYICJeWyBcdF0qI2RlZmluZSBYQUxBTl9WRVJTSU9OXy4qIikKICAgICBpZihfY29udGVudHMpCi0gICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXipdKiNkZWZpbmUgWEFMQU5fVkVSU0lPTl9NQUpPUlsgXHRdKyhbMC05XSspLioiICJcXDEiIFhhbGFuQ19NQUpPUiAiJHtfY29udGVudHN9IikKLSAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIlteKl0qI2RlZmluZSBYQUxBTl9WRVJTSU9OX01JTk9SWyBcdF0rKFswLTldKykuKiIgIlxcMSIgWGFsYW5DX01JTk9SICIke19jb250ZW50c30iKQotICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiW14qXSojZGVmaW5lIFhBTEFOX1ZFUlNJT05fUkVWSVNJT05bIFx0XSsoWzAtOV0rKS4qIiAiXFwxIiBYYWxhbkNfUEFUQ0ggIiR7X2NvbnRlbnRzfSIpCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXipdKiNkZWZpbmUgWEFMQU5fVkVSU0lPTl9NQUpPUlsgXHQoXSsoWzAtOV0rKS4qIiAiXFwxIiBYYWxhbkNfTUFKT1IgIiR7X2NvbnRlbnRzfSIpCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXipdKiNkZWZpbmUgWEFMQU5fVkVSU0lPTl9NSU5PUlsgXHQoXSsoWzAtOV0rKS4qIiAiXFwxIiBYYWxhbkNfTUlOT1IgIiR7X2NvbnRlbnRzfSIpCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXipdKiNkZWZpbmUgWEFMQU5fVkVSU0lPTl9SRVZJU0lPTlsgXHQoXSsoWzAtOV0rKS4qIiAiXFwxIiBYYWxhbkNfUEFUQ0ggIiR7X2NvbnRlbnRzfSIpCiAKICAgICAgICAgaWYoTk9UIFhhbGFuQ19NQUpPUiBNQVRDSEVTICJeWzAtOV0rJCIpCiAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJWZXJzaW9uIHBhcnNpbmcgZmFpbGVkIGZvciBYQUxBTl9WRVJTSU9OX01BSk9SISIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRYZXJjZXNDLmNtYWtlIGIvTW9kdWxlcy9GaW5kWGVyY2VzQy5jbWFrZQppbmRleCA0N2JmZDYyLi5hYmUxOGMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZpbmRYZXJjZXNDLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZFhlcmNlc0MuY21ha2UKQEAgLTUsNiArNSw4IEBACiBGaW5kWGVyY2VzQwogLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4xCisKIEZpbmQgdGhlIEFwYWNoZSBYZXJjZXMtQysrIHZhbGlkYXRpbmcgWE1MIHBhcnNlciBoZWFkZXJzIGFuZCBsaWJyYXJpZXMuCiAKIEltcG9ydGVkIHRhcmdldHMKQEAgLTgxLDEwICs4MywxNCBAQAogaWYoTk9UIFhlcmNlc0NfTElCUkFSWSkKICAgIyBGaW5kIGFsbCBYZXJjZXNDIGxpYnJhcmllcwogICBmaW5kX2xpYnJhcnkoWGVyY2VzQ19MSUJSQVJZX1JFTEVBU0UKLSAgICAgICAgICAgICAgIE5BTUVTICJ4ZXJjZXMtYyIgInhlcmNlcy1jXyR7WGVyY2VzQ19WRVJTSU9OX01BSk9SfSIKKyAgICAgICAgICAgICAgIE5BTUVTICJ4ZXJjZXMtYyIKKyAgICAgICAgICAgICAgICAgICAgICJ4ZXJjZXMtY18ke1hlcmNlc0NfVkVSU0lPTl9NQUpPUn0iCisgICAgICAgICAgICAgICAgICAgICAieGVyY2VzLWMtJHtYZXJjZXNDX1ZFUlNJT05fTUFKT1J9LiR7WGVyY2VzQ19WRVJTSU9OX01JTk9SfSIKICAgICAgICAgICAgICAgIERPQyAiWGVyY2VzLUMrKyBsaWJyYXJpZXMgKHJlbGVhc2UpIikKICAgZmluZF9saWJyYXJ5KFhlcmNlc0NfTElCUkFSWV9ERUJVRwotICAgICAgICAgICAgICAgTkFNRVMgInhlcmNlcy1jZCIgInhlcmNlcy1jXyR7WGVyY2VzQ19WRVJTSU9OX01BSk9SfUQiICJ4ZXJjZXMtY18ke1hlcmNlc0NfVkVSU0lPTl9NQUpPUn1fJHtYZXJjZXNDX1ZFUlNJT05fTUlOT1J9RCIKKyAgICAgICAgICAgICAgIE5BTUVTICJ4ZXJjZXMtY2QiCisgICAgICAgICAgICAgICAgICAgICAieGVyY2VzLWNfJHtYZXJjZXNDX1ZFUlNJT05fTUFKT1J9RCIKKyAgICAgICAgICAgICAgICAgICAgICJ4ZXJjZXMtY18ke1hlcmNlc0NfVkVSU0lPTl9NQUpPUn1fJHtYZXJjZXNDX1ZFUlNJT05fTUlOT1J9RCIKICAgICAgICAgICAgICAgIERPQyAiWGVyY2VzLUMrKyBsaWJyYXJpZXMgKGRlYnVnKSIpCiAgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9TZWxlY3RMaWJyYXJ5Q29uZmlndXJhdGlvbnMuY21ha2UpCiAgIHNlbGVjdF9saWJyYXJ5X2NvbmZpZ3VyYXRpb25zKFhlcmNlc0MpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmR3eFdpbmRvd3MuY21ha2UgYi9Nb2R1bGVzL0ZpbmR3eFdpbmRvd3MuY21ha2UKaW5kZXggMzU4NDBmNS4uMDdmYmMxYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9GaW5kd3hXaW5kb3dzLmNtYWtlCisrKyBiL01vZHVsZXMvRmluZHd4V2luZG93cy5jbWFrZQpAQCAtMzA3LDcgKzMwNyw3IEBACiAgIGVsc2UgKCkKICAgICAjIyBXWCBpcyBidWlsdCBhcyBtdWx0aXBsZSBzbWFsbCBwaWVjZXMgbGlicmFyaWVzIGluc3RlYWQgb2YgbW9ub2xpdGhpYwogCi0gICAgIyMgREVQRUNBVEVEIChqdykgcmVwbGFjZWQgYnkgbW9yZSBnZW5lcmFsIFdYV0lORE9XU19VU0VfTU9OT0xJVEhJQyBPTi9PRkYKKyAgICAjIyBERVBSRUNBVEVEIChqdykgcmVwbGFjZWQgYnkgbW9yZSBnZW5lcmFsIFdYV0lORE9XU19VU0VfTU9OT0xJVEhJQyBPTi9PRkYKICAgICAjIG9wdGlvbihXWFdJTkRPV1NfU0VQQVJBVEVfTElCU19CVUlMRCAiSXMgd3hXaW5kb3dzIGJ1aWxkIHdpdGggc2VwYXJhdGUgbGlicz8iIE9GRikKIAogICAgICMjIEhBQ0s6IFRoaXMgaXMgdmVyeSBkaXJ0eS4KZGlmZiAtLWdpdCBhL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UuY21ha2UgYi9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlLmNtYWtlCmluZGV4IDg5M2E5NmYuLjU0NzM0NmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UuY21ha2UKKysrIGIvTW9kdWxlcy9Gb3J0cmFuQ0ludGVyZmFjZS5jbWFrZQpAQCAtMzQxLDcgKzM0MSw3IEBACiAgICMgQnVpbGQgdGhlIHZlcmlmaWNhdGlvbiBwcm9qZWN0IGlmIG5vdCB5ZXQgYnVpbHQuCiAgIGlmKE5PVCBERUZJTkVEIEZvcnRyYW5DSW50ZXJmYWNlX1ZFUklGSUVEXyR7bGFuZ30pCiAgICAgc2V0KF9kZXNjICJWZXJpZnlpbmcgRm9ydHJhbi8ke2xhbmd9IENvbXBpbGVyIENvbXBhdGliaWxpdHkiKQotICAgIG1lc3NhZ2UoU1RBVFVTICIke19kZXNjfSIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiJHtfZGVzY30iKQogCiAgICAgIyBCdWlsZCBhIHNhbXBsZSBwcm9qZWN0IHdoaWNoIHJlcG9ydHMgc3ltYm9scy4KICAgICBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfQ09ORklHVVJBVElPTiBSZWxlYXNlKQpAQCAtMzYzLDEyICszNjMsMTIgQEAKIAogICAgICMgUmVwb3J0IHJlc3VsdHMuCiAgICAgaWYoRm9ydHJhbkNJbnRlcmZhY2VfVkVSSUZZXyR7bGFuZ31fQ09NUElMRUQpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiJHtfZGVzY30gLSBTdWNjZXNzIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiU3VjY2VzcyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiJHtfZGVzY30gcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19vdXRwdXR9XG5cbiIpCiAgICAgICBzZXQoRm9ydHJhbkNJbnRlcmZhY2VfVkVSSUZJRURfJHtsYW5nfSAxIENBQ0hFIElOVEVSTkFMICJGb3J0cmFuLyR7bGFuZ30gY29tcGF0aWJpbGl0eSIpCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiJHtfZGVzY30gLSBGYWlsZWQiKQorICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJGYWlsZWQiKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiJHtfZGVzY30gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke19vdXRwdXR9XG5cbiIpCiAgICAgICBzZXQoRm9ydHJhbkNJbnRlcmZhY2VfVkVSSUZJRURfJHtsYW5nfSAwIENBQ0hFIElOVEVSTkFMICJGb3J0cmFuLyR7bGFuZ30gY29tcGF0aWJpbGl0eSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0IGIvTW9kdWxlcy9Gb3J0cmFuQ0ludGVyZmFjZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzODEwODBiLi4xM2U0NDk4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0CisrKyBiL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UvQ01ha2VMaXN0cy50eHQKQEAgLTEwMSwzICsxMDEsNyBAQAogIyBSZXF1aXJlIHN5bWJvbHMgdGhyb3VnaCBGb3J0cmFuLgogYWRkX2V4ZWN1dGFibGUoRm9ydHJhbkNJbnRlcmZhY2UgbWFpbi5GIGNhbGxfc3ViLmYgJHtjYWxsX21vZH0pCiB0YXJnZXRfbGlua19saWJyYXJpZXMoRm9ydHJhbkNJbnRlcmZhY2UgUFVCTElDIHN5bWJvbHMpCisKK2ZpbGUoR0VORVJBVEUgT1VUUFVUIGV4ZS0kPENPTkZJRz4uY21ha2UgQ09OVEVOVCBbWworc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0VYRSAiJDxUQVJHRVRfRklMRTpGb3J0cmFuQ0ludGVyZmFjZT4iKQorXV0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ZvcnRyYW5DSW50ZXJmYWNlL0RldGVjdC5jbWFrZSBiL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UvRGV0ZWN0LmNtYWtlCmluZGV4IDc3ODk3ODUuLmM3NTA2N2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UvRGV0ZWN0LmNtYWtlCisrKyBiL01vZHVsZXMvRm9ydHJhbkNJbnRlcmZhY2UvRGV0ZWN0LmNtYWtlCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgT1IgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0KICAgICBJU19ORVdFUl9USEFOICR7Rm9ydHJhbkNJbnRlcmZhY2VfQklOQVJZX0RJUn0vT3V0cHV0LmNtYWtlCiAgICAgKQotICBtZXNzYWdlKFNUQVRVUyAiRGV0ZWN0aW5nIEZvcnRyYW4vQyBJbnRlcmZhY2UiKQorICBtZXNzYWdlKENIRUNLX1NUQVJUICJEZXRlY3RpbmcgRm9ydHJhbi9DIEludGVyZmFjZSIpCiBlbHNlKCkKICAgcmV0dXJuKCkKIGVuZGlmKCkKQEAgLTQzLDE3ICs0MywxMSBAQAogdW5zZXQoRm9ydHJhbkNJbnRlcmZhY2VfQ09NUElMRUQgQ0FDSEUpCiAKICMgTG9jYXRlIHRoZSBzYW1wbGUgcHJvamVjdCBleGVjdXRhYmxlLgorc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0VYRSkKIGlmKEZvcnRyYW5DSW50ZXJmYWNlX0NPTVBJTEVEKQotICBmaW5kX3Byb2dyYW0oRm9ydHJhbkNJbnRlcmZhY2VfRVhFCi0gICAgTkFNRVMgRm9ydHJhbkNJbnRlcmZhY2Uke0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYfQotICAgIFBBVEhTICR7Rm9ydHJhbkNJbnRlcmZhY2VfQklOQVJZX0RJUn0gJHtGb3J0cmFuQ0ludGVyZmFjZV9CSU5BUllfRElSfS9SZWxlYXNlCi0gICAgTk9fREVGQVVMVF9QQVRICi0gICAgKQotICBzZXQoRm9ydHJhbkNJbnRlcmZhY2VfRVhFICR7Rm9ydHJhbkNJbnRlcmZhY2VfRVhFfSkKLSAgdW5zZXQoRm9ydHJhbkNJbnRlcmZhY2VfRVhFIENBQ0hFKQorICBpbmNsdWRlKCR7Rm9ydHJhbkNJbnRlcmZhY2VfQklOQVJZX0RJUn0vZXhlLVJlbGVhc2UuY21ha2UgT1BUSU9OQUwpCiBlbHNlKCkKICAgc2V0KF9yZXN1bHQgIkZhaWxlZCB0byBjb21waWxlIikKLSAgc2V0KEZvcnRyYW5DSW50ZXJmYWNlX0VYRSkKICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICJGb3J0cmFuL0MgaW50ZXJmYWNlIHRlc3QgcHJvamVjdCBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAiJHtGb3J0cmFuQ0ludGVyZmFjZV9PVVRQVVR9XG4iKQpAQCAtMTcyLDcgKzE2Niw5IEBACiAgIGVsc2UoKQogICAgIHNldChfcmVzdWx0ICJGb3VuZCBHTE9CQUwgYnV0IG5vdCBNT0RVTEUgbWFuZ2xpbmciKQogICBlbmRpZigpCisgIHNldChfcmVzdWx0X3R5cGUgQ0hFQ0tfUEFTUykKIGVsc2VpZihOT1QgX3Jlc3VsdCkKICAgc2V0KF9yZXN1bHQgIkZhaWxlZCB0byByZWNvZ25pemUgc3ltYm9scyIpCisgIHNldChfcmVzdWx0X3R5cGUgQ0hFQ0tfRkFJTCkKIGVuZGlmKCkKLW1lc3NhZ2UoU1RBVFVTICJEZXRlY3RpbmcgRm9ydHJhbi9DIEludGVyZmFjZSAtICR7X3Jlc3VsdH0iKQorbWVzc2FnZSgke19yZXN1bHRfdHlwZX0gIiR7X3Jlc3VsdH0iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9HTlVJbnN0YWxsRGlycy5jbWFrZSBiL01vZHVsZXMvR05VSW5zdGFsbERpcnMuY21ha2UKaW5kZXggZjk1ZTZlMi4uOWVmMjJiOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9HTlVJbnN0YWxsRGlycy5jbWFrZQorKysgYi9Nb2R1bGVzL0dOVUluc3RhbGxEaXJzLmNtYWtlCkBAIC0yMjEsNiArMjIxLDExIEBACiAgICAgIyBkZWZhdWx0IG9uZS4gV2hlbiBDTUFLRV9JTlNUQUxMX1BSRUZJWCBjaGFuZ2VzLCB0aGUgdmFsdWUgaXMKICAgICAjIHVwZGF0ZWQgdG8gdGhlIG5ldyBkZWZhdWx0LCB1bmxlc3MgdGhlIHVzZXIgZXhwbGljaXRseSBjaGFuZ2VkIGl0LgogICBlbmRpZigpCisgIGlmIChOT1QgREVGSU5FRCBDTUFLRV9TWVNURU1fTkFNRSBPUiBOT1QgREVGSU5FRCBDTUFLRV9TSVpFT0ZfVk9JRF9QKQorICAgIG1lc3NhZ2UoQVVUSE9SX1dBUk5JTkcKKyAgICAgICJVbmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgQ01BS0VfSU5TVEFMTF9MSUJESVIgZGlyZWN0b3J5IGJlY2F1c2Ugbm8gdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBrbm93bi4gIgorICAgICAgIlBsZWFzZSBlbmFibGUgYXQgbGVhc3Qgb25lIGxhbmd1YWdlIGJlZm9yZSBpbmNsdWRpbmcgR05VSW5zdGFsbERpcnMuIikKKyAgZW5kaWYoKQogICBpZihDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJeKExpbnV4fGtGcmVlQlNEfEdOVSkkIgogICAgICAgQU5EIE5PVCBDTUFLRV9DUk9TU0NPTVBJTElORwogICAgICAgQU5EIE5PVCBFWElTVFMgIi9ldGMvYXJjaC1yZWxlYXNlIikKQEAgLTIzNSwxNiArMjQwLDEwIEBACiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVuZGlmKCkKICAgICBlbHNlKCkgIyBub3QgZGViaWFuLCByZWx5IG9uIENNQUtFX1NJWkVPRl9WT0lEX1A6Ci0gICAgICBpZihOT1QgREVGSU5FRCBDTUFLRV9TSVpFT0ZfVk9JRF9QKQotICAgICAgICBtZXNzYWdlKEFVVEhPUl9XQVJOSU5HCi0gICAgICAgICAgIlVuYWJsZSB0byBkZXRlcm1pbmUgZGVmYXVsdCBDTUFLRV9JTlNUQUxMX0xJQkRJUiBkaXJlY3RvcnkgYmVjYXVzZSBubyB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGtub3duLiAiCi0gICAgICAgICAgIlBsZWFzZSBlbmFibGUgYXQgbGVhc3Qgb25lIGxhbmd1YWdlIGJlZm9yZSBpbmNsdWRpbmcgR05VSW5zdGFsbERpcnMuIikKLSAgICAgIGVsc2UoKQotICAgICAgICBpZigiJHtDTUFLRV9TSVpFT0ZfVk9JRF9QfSIgRVFVQUwgIjgiKQotICAgICAgICAgIHNldChfTElCRElSX0RFRkFVTFQgImxpYjY0IikKLSAgICAgICAgICBpZihERUZJTkVEIF9HTlVJbnN0YWxsRGlyc19MQVNUX0NNQUtFX0lOU1RBTExfUFJFRklYKQotICAgICAgICAgICAgc2V0KF9fTEFTVF9MSUJESVJfREVGQVVMVCAibGliNjQiKQotICAgICAgICAgIGVuZGlmKCkKKyAgICAgIGlmKCIke0NNQUtFX1NJWkVPRl9WT0lEX1B9IiBFUVVBTCAiOCIpCisgICAgICAgIHNldChfTElCRElSX0RFRkFVTFQgImxpYjY0IikKKyAgICAgICAgaWYoREVGSU5FRCBfR05VSW5zdGFsbERpcnNfTEFTVF9DTUFLRV9JTlNUQUxMX1BSRUZJWCkKKyAgICAgICAgICBzZXQoX19MQVNUX0xJQkRJUl9ERUZBVUxUICJsaWI2NCIpCiAgICAgICAgIGVuZGlmKCkKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0dldFByZXJlcXVpc2l0ZXMuY21ha2UgYi9Nb2R1bGVzL0dldFByZXJlcXVpc2l0ZXMuY21ha2UKaW5kZXggNWM4YzE5Ni4uYzk5Yzc3MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9HZXRQcmVyZXF1aXNpdGVzLmNtYWtlCisrKyBiL01vZHVsZXMvR2V0UHJlcmVxdWlzaXRlcy5jbWFrZQpAQCAtNjEsNyArNjEsNyBAQAogZXhjbHVkZSAic3lzdGVtIiBwcmVyZXF1aXNpdGVzLiAgSWYgPHJlY3Vyc2U+IGlzIHNldCB0byAxIGFsbAogcHJlcmVxdWlzaXRlcyB3aWxsIGJlIGZvdW5kIHJlY3Vyc2l2ZWx5LCBpZiBzZXQgdG8gMCBvbmx5IGRpcmVjdAogcHJlcmVxdWlzaXRlcyBhcmUgbGlzdGVkLiAgPGV4ZXBhdGg+IGlzIHRoZSBwYXRoIHRvIHRoZSB0b3AgbGV2ZWwKLWV4ZWN1dGFibGUgdXNlZCBmb3IgQGV4ZWN1dGFibGVfcGF0aCByZXBsYWNtZW50IG9uIHRoZSBNYWMuICA8ZGlycz4gaXMKK2V4ZWN1dGFibGUgdXNlZCBmb3IgQGV4ZWN1dGFibGVfcGF0aCByZXBsYWNlbWVudCBvbiB0aGUgTWFjLiAgPGRpcnM+IGlzCiBhIGxpc3Qgb2YgcGF0aHMgd2hlcmUgbGlicmFyaWVzIG1pZ2h0IGJlIGZvdW5kOiB0aGVzZSBwYXRocyBhcmUKIHNlYXJjaGVkIGZpcnN0IHdoZW4gYSB0YXJnZXQgd2l0aG91dCBhbnkgcGF0aCBpbmZvIGlzIGdpdmVuLiAgVGhlbgogc3RhbmRhcmQgc3lzdGVtIGxvY2F0aW9ucyBhcmUgYWxzbyBzZWFyY2hlZDogUEFUSCwgRnJhbWV3b3JrCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0dvb2dsZVRlc3QuY21ha2UgYi9Nb2R1bGVzL0dvb2dsZVRlc3QuY21ha2UKaW5kZXggYTViYjg2My4uMDU3YjI5ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Hb29nbGVUZXN0LmNtYWtlCisrKyBiL01vZHVsZXMvR29vZ2xlVGVzdC5jbWFrZQpAQCAtNSw2ICs1LDggQEAKIEdvb2dsZVRlc3QKIC0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy45CisKIFRoaXMgbW9kdWxlIGRlZmluZXMgZnVuY3Rpb25zIHRvIGhlbHAgdXNlIHRoZSBHb29nbGUgVGVzdCBpbmZyYXN0cnVjdHVyZS4gIFR3bwogbWVjaGFuaXNtcyBmb3IgYWRkaW5nIHRlc3RzIGFyZSBwcm92aWRlZC4gOmNvbW1hbmQ6YGd0ZXN0X2FkZF90ZXN0c2AgaGFzIGJlZW4KIGFyb3VuZCBmb3Igc29tZSB0aW1lLCBvcmlnaW5hbGx5IHZpYSBgYGZpbmRfcGFja2FnZShHVGVzdClgYC4KQEAgLTE1MSw5ICsxNTMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJPUEVSVElFUyBuYW1lMSB2YWx1ZTEuLi5dCiAgICAgICAgICAgICAgICAgICAgICAgICAgW1RFU1RfTElTVCB2YXJdCiAgICAgICAgICAgICAgICAgICAgICAgICAgW0RJU0NPVkVSWV9USU1FT1VUIHNlY29uZHNdCisgICAgICAgICAgICAgICAgICAgICAgICAgW1hNTF9PVVRQVVRfRElSIGRpcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICBbRElTQ09WRVJZX01PREUgPFBPU1RfQlVJTER8UFJFX1RFU1Q+XQogICAgICkKIAotICBgYGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzYGAgc2V0cyB1cCBhIHBvc3QtYnVpbGQgY29tbWFuZCBvbiB0aGUgdGVzdCBleGVjdXRhYmxlCisgIGBgZ3Rlc3RfZGlzY292ZXJfdGVzdHMoKWBgIHNldHMgdXAgYSBwb3N0LWJ1aWxkIGNvbW1hbmQgb24gdGhlIHRlc3QgZXhlY3V0YWJsZQogICB0aGF0IGdlbmVyYXRlcyB0aGUgbGlzdCBvZiB0ZXN0cyBieSBwYXJzaW5nIHRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIHRoZSB0ZXN0CiAgIHdpdGggdGhlIGBgLS1ndGVzdF9saXN0X3Rlc3RzYGAgYXJndW1lbnQuICBDb21wYXJlZCB0byB0aGUgc291cmNlIHBhcnNpbmcKICAgYXBwcm9hY2ggb2YgOmNvbW1hbmQ6YGd0ZXN0X2FkZF90ZXN0c2AsIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBmdWxsIGxpc3Qgb2YKQEAgLTIxMCw3ICsyMTQsNyBAQAogCiAgIGBgUFJPUEVSVElFUyBuYW1lMSB2YWx1ZTEuLi5gYAogICAgIFNwZWNpZmllcyBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgc2V0IG9uIGFsbCB0ZXN0cyBkaXNjb3ZlcmVkIGJ5IHRoaXMKLSAgICBpbnZvY2F0aW9uIG9mIGBgZ3Rlc3RfZGlzY292ZXJfdGVzdHNgYC4KKyAgICBpbnZvY2F0aW9uIG9mIGBgZ3Rlc3RfZGlzY292ZXJfdGVzdHMoKWBgLgogCiAgIGBgVEVTVF9MSVNUIHZhcmBgCiAgICAgTWFrZSB0aGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlIGBgdmFyYGAsIHJhdGhlciB0aGFuIHRoZQpAQCAtMjM2LDYgKzI0MCwyOSBAQAogICAgICAgcHJvYmxlbS4gIFRoZSBhbWJpZ3VvdXMgYmVoYXZpb3Igb2YgdGhlIGBgVElNRU9VVGBgIGtleXdvcmQgaW4gMy4xMC4xCiAgICAgICBhbmQgMy4xMC4yIGhhcyBub3QgYmVlbiBwcmVzZXJ2ZWQuCiAKKyAgYGBYTUxfT1VUUFVUX0RJUiBkaXJgYAorICAgIElmIHNwZWNpZmllZCwgdGhlIHBhcmFtZXRlciBpcyBwYXNzZWQgYWxvbmcgd2l0aCBgYC0tZ3Rlc3Rfb3V0cHV0PXhtbDpgYAorICAgIHRvIHRlc3QgZXhlY3V0YWJsZS4gVGhlIGFjdHVhbCBmaWxlIG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIHRlc3QgdGFyZ2V0LAorICAgIGluY2x1ZGluZyBwcmVmaXggYW5kIHN1ZmZpeC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mCisgICAgYGBFWFRSQV9BUkdTIC0tZ3Rlc3Rfb3V0cHV0PXhtbGBgIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3cml0aW5nIHRoZQorICAgIFhNTCByZXN1bHQgb3V0cHV0IHdoZW4gdXNpbmcgcGFyYWxsZWwgdGVzdCBleGVjdXRpb24uCisKKyAgYGBESVNDT1ZFUllfTU9ERWBgCisgICAgUHJvdmlkZXMgZ3JlYXRlciBjb250cm9sIG92ZXIgd2hlbiBgYGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzKClgYCBwZXJmb3JtcyB0ZXN0CisgICAgZGlzY292ZXJ5LiBCeSBkZWZhdWx0LCBgYFBPU1RfQlVJTERgYCBzZXRzIHVwIGEgcG9zdC1idWlsZCBjb21tYW5kCisgICAgdG8gcGVyZm9ybSB0ZXN0IGRpc2NvdmVyeSBhdCBidWlsZCB0aW1lLiBJbiBjZXJ0YWluIHNjZW5hcmlvcywgbGlrZQorICAgIGNyb3NzLWNvbXBpbGluZywgdGhpcyBgYFBPU1RfQlVJTERgYCBiZWhhdmlvciBpcyBub3QgZGVzaXJhYmxlLgorICAgIEJ5IGNvbnRyYXN0LCBgYFBSRV9URVNUYGAgZGVsYXlzIHRlc3QgZGlzY292ZXJ5IHVudGlsIGp1c3QgcHJpb3IgdG8gdGVzdAorICAgIGV4ZWN1dGlvbi4gVGhpcyB3YXkgdGVzdCBkaXNjb3Zlcnkgb2NjdXJzIGluIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQKKyAgICB3aGVyZSB0aGUgdGVzdCBoYXMgYSBiZXR0ZXIgY2hhbmNlIGF0IGZpbmRpbmcgYXBwcm9wcmlhdGUgcnVudGltZQorICAgIGRlcGVuZGVuY2llcy4KKworICAgIGBgRElTQ09WRVJZX01PREVgYCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgdGhlCisgICAgYGBDTUFLRV9HVEVTVF9ESVNDT1ZFUl9URVNUU19ESVNDT1ZFUllfTU9ERWBgIHZhcmlhYmxlIGlmIGl0IGlzIG5vdAorICAgIHBhc3NlZCB3aGVuIGNhbGxpbmcgYGBndGVzdF9kaXNjb3Zlcl90ZXN0cygpYGAuIFRoaXMgcHJvdmlkZXMgYSBtZWNoYW5pc20KKyAgICBmb3IgZ2xvYmFsbHkgc2VsZWN0aW5nIGEgcHJlZmVycmVkIHRlc3QgZGlzY292ZXJ5IGJlaGF2aW9yIHdpdGhvdXQgaGF2aW5nCisgICAgdG8gbW9kaWZ5IGVhY2ggY2FsbCBzaXRlLgorCiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiAjIFNhdmUgcHJvamVjdCdzIHBvbGljaWVzCkBAIC0zNjgsMTEgKzM5NSwxMiBAQAogZW5kZnVuY3Rpb24oKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIGZ1bmN0aW9uKGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzIFRBUkdFVCkKICAgY21ha2VfcGFyc2VfYXJndW1lbnRzKAogICAgICIiCiAgICAgIk5PX1BSRVRUWV9UWVBFUztOT19QUkVUVFlfVkFMVUVTIgotICAgICJURVNUX1BSRUZJWDtURVNUX1NVRkZJWDtXT1JLSU5HX0RJUkVDVE9SWTtURVNUX0xJU1Q7RElTQ09WRVJZX1RJTUVPVVQiCisgICAgIlRFU1RfUFJFRklYO1RFU1RfU1VGRklYO1dPUktJTkdfRElSRUNUT1JZO1RFU1RfTElTVDtESVNDT1ZFUllfVElNRU9VVDtYTUxfT1VUUFVUX0RJUjtESVNDT1ZFUllfTU9ERSIKICAgICAiRVhUUkFfQVJHUztQUk9QRVJUSUVTIgogICAgICR7QVJHTn0KICAgKQpAQCAtMzg2LDYgKzQxNCwxMiBAQAogICBpZihOT1QgX0RJU0NPVkVSWV9USU1FT1VUKQogICAgIHNldChfRElTQ09WRVJZX1RJTUVPVVQgNSkKICAgZW5kaWYoKQorICBpZihOT1QgX0RJU0NPVkVSWV9NT0RFKQorICAgIGlmKE5PVCBDTUFLRV9HVEVTVF9ESVNDT1ZFUl9URVNUU19ESVNDT1ZFUllfTU9ERSkKKyAgICAgIHNldChDTUFLRV9HVEVTVF9ESVNDT1ZFUl9URVNUU19ESVNDT1ZFUllfTU9ERSAiUE9TVF9CVUlMRCIpCisgICAgZW5kaWYoKQorICAgIHNldChfRElTQ09WRVJZX01PREUgJHtDTUFLRV9HVEVTVF9ESVNDT1ZFUl9URVNUU19ESVNDT1ZFUllfTU9ERX0pCisgIGVuZGlmKCkKIAogICBnZXRfcHJvcGVydHkoCiAgICAgaGFzX2NvdW50ZXIKQEAgLTQxNywzNCArNDUxLDg2IEBACiAgICAgVEFSR0VUICR7VEFSR0VUfQogICAgIFBST1BFUlRZIENST1NTQ09NUElMSU5HX0VNVUxBVE9SCiAgICkKLSAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgIFRBUkdFVCAke1RBUkdFVH0gUE9TVF9CVUlMRAotICAgIEJZUFJPRFVDVFMgIiR7Y3Rlc3RfdGVzdHNfZmlsZX0iCi0gICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIKLSAgICAgICAgICAgIC1EICJURVNUX1RBUkdFVD0ke1RBUkdFVH0iCi0gICAgICAgICAgICAtRCAiVEVTVF9FWEVDVVRBQkxFPSQ8VEFSR0VUX0ZJTEU6JHtUQVJHRVR9PiIKLSAgICAgICAgICAgIC1EICJURVNUX0VYRUNVVE9SPSR7Y3Jvc3Njb21waWxpbmdfZW11bGF0b3J9IgotICAgICAgICAgICAgLUQgIlRFU1RfV09SS0lOR19ESVI9JHtfV09SS0lOR19ESVJFQ1RPUll9IgotICAgICAgICAgICAgLUQgIlRFU1RfRVhUUkFfQVJHUz0ke19FWFRSQV9BUkdTfSIKLSAgICAgICAgICAgIC1EICJURVNUX1BST1BFUlRJRVM9JHtfUFJPUEVSVElFU30iCi0gICAgICAgICAgICAtRCAiVEVTVF9QUkVGSVg9JHtfVEVTVF9QUkVGSVh9IgotICAgICAgICAgICAgLUQgIlRFU1RfU1VGRklYPSR7X1RFU1RfU1VGRklYfSIKLSAgICAgICAgICAgIC1EICJOT19QUkVUVFlfVFlQRVM9JHtfTk9fUFJFVFRZX1RZUEVTfSIKLSAgICAgICAgICAgIC1EICJOT19QUkVUVFlfVkFMVUVTPSR7X05PX1BSRVRUWV9WQUxVRVN9IgotICAgICAgICAgICAgLUQgIlRFU1RfTElTVD0ke19URVNUX0xJU1R9IgotICAgICAgICAgICAgLUQgIkNURVNUX0ZJTEU9JHtjdGVzdF90ZXN0c19maWxlfSIKLSAgICAgICAgICAgIC1EICJURVNUX0RJU0NPVkVSWV9USU1FT1VUPSR7X0RJU0NPVkVSWV9USU1FT1VUfSIKLSAgICAgICAgICAgIC1QICIke19HT09HTEVURVNUX0RJU0NPVkVSX1RFU1RTX1NDUklQVH0iCi0gICAgVkVSQkFUSU0KLSAgKQogCi0gIGZpbGUoV1JJVEUgIiR7Y3Rlc3RfaW5jbHVkZV9maWxlfSIKLSAgICAiaWYoRVhJU1RTIFwiJHtjdGVzdF90ZXN0c19maWxlfVwiKVxuIgotICAgICIgIGluY2x1ZGUoXCIke2N0ZXN0X3Rlc3RzX2ZpbGV9XCIpXG4iCi0gICAgImVsc2UoKVxuIgotICAgICIgIGFkZF90ZXN0KCR7VEFSR0VUfV9OT1RfQlVJTFQgJHtUQVJHRVR9X05PVF9CVUlMVClcbiIKLSAgICAiZW5kaWYoKVxuIgotICApCisgIGlmKF9ESVNDT1ZFUllfTU9ERSBTVFJFUVVBTCAiUE9TVF9CVUlMRCIpCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAgVEFSR0VUICR7VEFSR0VUfSBQT1NUX0JVSUxECisgICAgICBCWVBST0RVQ1RTICIke2N0ZXN0X3Rlc3RzX2ZpbGV9IgorICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfVEFSR0VUPSR7VEFSR0VUfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfRVhFQ1VUQUJMRT0kPFRBUkdFVF9GSUxFOiR7VEFSR0VUfT4iCisgICAgICAgICAgICAgIC1EICJURVNUX0VYRUNVVE9SPSR7Y3Jvc3Njb21waWxpbmdfZW11bGF0b3J9IgorICAgICAgICAgICAgICAtRCAiVEVTVF9XT1JLSU5HX0RJUj0ke19XT1JLSU5HX0RJUkVDVE9SWX0iCisgICAgICAgICAgICAgIC1EICJURVNUX0VYVFJBX0FSR1M9JHtfRVhUUkFfQVJHU30iCisgICAgICAgICAgICAgIC1EICJURVNUX1BST1BFUlRJRVM9JHtfUFJPUEVSVElFU30iCisgICAgICAgICAgICAgIC1EICJURVNUX1BSRUZJWD0ke19URVNUX1BSRUZJWH0iCisgICAgICAgICAgICAgIC1EICJURVNUX1NVRkZJWD0ke19URVNUX1NVRkZJWH0iCisgICAgICAgICAgICAgIC1EICJOT19QUkVUVFlfVFlQRVM9JHtfTk9fUFJFVFRZX1RZUEVTfSIKKyAgICAgICAgICAgICAgLUQgIk5PX1BSRVRUWV9WQUxVRVM9JHtfTk9fUFJFVFRZX1ZBTFVFU30iCisgICAgICAgICAgICAgIC1EICJURVNUX0xJU1Q9JHtfVEVTVF9MSVNUfSIKKyAgICAgICAgICAgICAgLUQgIkNURVNUX0ZJTEU9JHtjdGVzdF90ZXN0c19maWxlfSIKKyAgICAgICAgICAgICAgLUQgIlRFU1RfRElTQ09WRVJZX1RJTUVPVVQ9JHtfRElTQ09WRVJZX1RJTUVPVVR9IgorICAgICAgICAgICAgICAtRCAiVEVTVF9YTUxfT1VUUFVUX0RJUj0ke19YTUxfT1VUUFVUX0RJUn0iCisgICAgICAgICAgICAgIC1QICIke19HT09HTEVURVNUX0RJU0NPVkVSX1RFU1RTX1NDUklQVH0iCisgICAgICBWRVJCQVRJTQorICAgICkKKworICAgIGZpbGUoV1JJVEUgIiR7Y3Rlc3RfaW5jbHVkZV9maWxlfSIKKyAgICAgICJpZihFWElTVFMgXCIke2N0ZXN0X3Rlc3RzX2ZpbGV9XCIpXG4iCisgICAgICAiICBpbmNsdWRlKFwiJHtjdGVzdF90ZXN0c19maWxlfVwiKVxuIgorICAgICAgImVsc2UoKVxuIgorICAgICAgIiAgYWRkX3Rlc3QoJHtUQVJHRVR9X05PVF9CVUlMVCAke1RBUkdFVH1fTk9UX0JVSUxUKVxuIgorICAgICAgImVuZGlmKClcbiIKKyAgICApCisgIGVsc2VpZihfRElTQ09WRVJZX01PREUgU1RSRVFVQUwgIlBSRV9URVNUIikKKworICAgIGdldF9wcm9wZXJ0eShHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHIEdMT0JBTAorICAgICAgICBQUk9QRVJUWSBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHCisgICAgKQorCisgICAgaWYoR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgICAgIHNldChjdGVzdF90ZXN0c19maWxlICIke2N0ZXN0X2ZpbGVfYmFzZX1fdGVzdHMtJDxDT05GSUc+LmNtYWtlIikKKyAgICBlbmRpZigpCisKKyAgICBzdHJpbmcoQ09OQ0FUIGN0ZXN0X2luY2x1ZGVfY29udGVudAorICAgICAgImlmKEVYSVNUUyBcIiQ8VEFSR0VUX0ZJTEU6JHtUQVJHRVR9PlwiKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiICBpZihcIiQ8VEFSR0VUX0ZJTEU6JHtUQVJHRVR9PlwiIElTX05FV0VSX1RIQU4gXCIke2N0ZXN0X3Rlc3RzX2ZpbGV9XCIpIiAgICJcbiIKKyAgICAgICIgICAgaW5jbHVkZShcIiR7X0dPT0dMRVRFU1RfRElTQ09WRVJfVEVTVFNfU0NSSVBUfVwiKSIgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgIiAgICBndGVzdF9kaXNjb3Zlcl90ZXN0c19pbXBsKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9FWEVDVVRBQkxFIiAgICAgICAgIiBbPT1bIiAiJDxUQVJHRVRfRklMRToke1RBUkdFVH0+IiAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX0VYRUNVVE9SIiAgICAgICAgICAiIFs9PVsiICIke2Nyb3NzY29tcGlsaW5nX2VtdWxhdG9yfSIgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIFRFU1RfV09SS0lOR19ESVIiICAgICAgICIgWz09WyIgIiR7X1dPUktJTkdfRElSRUNUT1JZfSIgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9FWFRSQV9BUkdTIiAgICAgICAgIiBbPT1bIiAiJHtfRVhUUkFfQVJHU30iICAgICAgICAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBURVNUX1BST1BFUlRJRVMiICAgICAgICAiIFs9PVsiICIke19QUk9QRVJUSUVTfSIgICAgICAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIFRFU1RfUFJFRklYIiAgICAgICAgICAgICIgWz09WyIgIiR7X1RFU1RfUFJFRklYfSIgICAgICAgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9TVUZGSVgiICAgICAgICAgICAgIiBbPT1bIiAiJHtfVEVTVF9TVUZGSVh9IiAgICAgICAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBOT19QUkVUVFlfVFlQRVMiICAgICAgICAiIFs9PVsiICIke19OT19QUkVUVFlfVFlQRVN9IiAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIE5PX1BSRVRUWV9WQUxVRVMiICAgICAgICIgWz09WyIgIiR7X05PX1BSRVRUWV9WQUxVRVN9IiAgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9MSVNUIiAgICAgICAgICAgICAgIiBbPT1bIiAiJHtfVEVTVF9MSVNUfSIgICAgICAgICAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgICBDVEVTVF9GSUxFIiAgICAgICAgICAgICAiIFs9PVsiICIke2N0ZXN0X3Rlc3RzX2ZpbGV9IiAgICAgICAgIl09PV0iICAgIlxuIgorICAgICAgIiAgICAgIFRFU1RfRElTQ09WRVJZX1RJTUVPVVQiICIgWz09WyIgIiR7X0RJU0NPVkVSWV9USU1FT1VUfSIgICAgICAiXT09XSIgICAiXG4iCisgICAgICAiICAgICAgVEVTVF9YTUxfT1VUUFVUX0RJUiIgICAgIiBbPT1bIiAiJHtfWE1MX09VVFBVVF9ESVJ9IiAgICAgICAgICJdPT1dIiAgICJcbiIKKyAgICAgICIgICAgKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgIiAgZW5kaWYoKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiICBpbmNsdWRlKFwiJHtjdGVzdF90ZXN0c19maWxlfVwiKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICJlbHNlKCkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgIiAgYWRkX3Rlc3QoJHtUQVJHRVR9X05PVF9CVUlMVCAke1RBUkdFVH1fTk9UX0JVSUxUKSIgICAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAiZW5kaWYoKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICApCisKKyAgICBpZihHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgICAgZm9yZWFjaChfY29uZmlnICR7Q01BS0VfQ09ORklHVVJBVElPTl9UWVBFU30pCisgICAgICAgIGZpbGUoR0VORVJBVEUgT1VUUFVUICIke2N0ZXN0X2ZpbGVfYmFzZX1faW5jbHVkZS0ke19jb25maWd9LmNtYWtlIiBDT05URU5UICIke2N0ZXN0X2luY2x1ZGVfY29udGVudH0iIENPTkRJVElPTiAkPENPTkZJRzoke19jb25maWd9PikKKyAgICAgIGVuZGZvcmVhY2goKQorICAgICAgZmlsZShXUklURSAiJHtjdGVzdF9pbmNsdWRlX2ZpbGV9IiAiaW5jbHVkZShcIiR7Y3Rlc3RfZmlsZV9iYXNlfV9pbmNsdWRlLVwke0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRX0uY21ha2VcIikiKQorICAgIGVsc2UoKQorICAgICAgZmlsZShHRU5FUkFURSBPVVRQVVQgIiR7Y3Rlc3RfZmlsZV9iYXNlfV9pbmNsdWRlLmNtYWtlIiBDT05URU5UICIke2N0ZXN0X2luY2x1ZGVfY29udGVudH0iKQorICAgICAgZmlsZShXUklURSAiJHtjdGVzdF9pbmNsdWRlX2ZpbGV9IiAiaW5jbHVkZShcIiR7Y3Rlc3RfZmlsZV9iYXNlfV9pbmNsdWRlLmNtYWtlXCIpIikKKyAgICBlbmRpZigpCisKKyAgZWxzZSgpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVW5rbm93biBESVNDT1ZFUllfTU9ERTogJHtfRElTQ09WRVJZX01PREV9IikKKyAgZW5kaWYoKQogCiAgICMgQWRkIGRpc2NvdmVyZWQgdGVzdHMgdG8gZGlyZWN0b3J5IFRFU1RfSU5DTFVERV9GSUxFUwogICBzZXRfcHJvcGVydHkoRElSRUNUT1JZCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0dvb2dsZVRlc3RBZGRUZXN0cy5jbWFrZSBiL01vZHVsZXMvR29vZ2xlVGVzdEFkZFRlc3RzLmNtYWtlCmluZGV4IDRhYmJiZWMuLjg4M2UxZjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvR29vZ2xlVGVzdEFkZFRlc3RzLmNtYWtlCisrKyBiL01vZHVsZXMvR29vZ2xlVGVzdEFkZFRlc3RzLmNtYWtlCkBAIC0xLDEwNiArMSwxODggQEAKICMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KIAotc2V0KHByZWZpeCAiJHtURVNUX1BSRUZJWH0iKQotc2V0KHN1ZmZpeCAiJHtURVNUX1NVRkZJWH0iKQotc2V0KGV4dHJhX2FyZ3MgJHtURVNUX0VYVFJBX0FSR1N9KQotc2V0KHByb3BlcnRpZXMgJHtURVNUX1BST1BFUlRJRVN9KQotc2V0KHNjcmlwdCkKLXNldChzdWl0ZSkKLXNldCh0ZXN0cykKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAke0NNQUtFX1ZFUlNJT059KQogCi1mdW5jdGlvbihhZGRfY29tbWFuZCBOQU1FKQorIyBPdmVyd3JpdGUgcG9zc2libHkgZXhpc3RpbmcgJHtfQ1RFU1RfRklMRX0gd2l0aCBlbXB0eSBmaWxlCitzZXQoZmx1c2hfdGVzdHNfTU9ERSBXUklURSkKKworIyBGbHVzaGVzIHNjcmlwdCB0byAke19DVEVTVF9GSUxFfQorbWFjcm8oZmx1c2hfc2NyaXB0KQorICBmaWxlKCR7Zmx1c2hfdGVzdHNfTU9ERX0gIiR7X0NURVNUX0ZJTEV9IiAiJHtzY3JpcHR9IikKKyAgc2V0KGZsdXNoX3Rlc3RzX01PREUgQVBQRU5EKQorCisgIHNldChzY3JpcHQgIiIpCitlbmRtYWNybygpCisKKyMgRmx1c2hlcyB0ZXN0c19idWZmZXIgdG8gdGVzdHMKK21hY3JvKGZsdXNoX3Rlc3RzX2J1ZmZlcikKKyAgbGlzdChBUFBFTkQgdGVzdHMgIiR7dGVzdHNfYnVmZmVyfSIpCisgIHNldCh0ZXN0c19idWZmZXIgIiIpCitlbmRtYWNybygpCisKK21hY3JvKGFkZF9jb21tYW5kIE5BTUUpCiAgIHNldChfYXJncyAiIikKICAgZm9yZWFjaChfYXJnICR7QVJHTn0pCiAgICAgaWYoX2FyZyBNQVRDSEVTICJbXi0uLzphLXpBLVowLTlfXSIpCi0gICAgICBzZXQoX2FyZ3MgIiR7X2FyZ3N9IFs9PVske19hcmd9XT09XSIpCisgICAgICBzdHJpbmcoQVBQRU5EIF9hcmdzICIgWz09WyR7X2FyZ31dPT1dIikKICAgICBlbHNlKCkKLSAgICAgIHNldChfYXJncyAiJHtfYXJnc30gJHtfYXJnfSIpCisgICAgICBzdHJpbmcoQVBQRU5EIF9hcmdzICIgJHtfYXJnfSIpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKLSAgc2V0KHNjcmlwdCAiJHtzY3JpcHR9JHtOQU1FfSgke19hcmdzfSlcbiIgUEFSRU5UX1NDT1BFKQorICBzdHJpbmcoQVBQRU5EIHNjcmlwdCAiJHtOQU1FfSgke19hcmdzfSlcbiIpCisgIHN0cmluZyhMRU5HVEggIiR7c2NyaXB0fSIgX3NjcmlwdF9sZW4pCisgIGlmKCR7X3NjcmlwdF9sZW59IEdSRUFURVIgIjUwMDAwIikKKyAgICBmbHVzaF9zY3JpcHQoKQorICBlbmRpZigpCisgICMgVW5zZXRzIG1hY3JvIGxvY2FsIHZhcmlhYmxlcyB0byBwcmV2ZW50IGxlYWthZ2Ugb3V0c2lkZSBvZiB0aGlzIG1hY3JvLgorICB1bnNldChfYXJncykKKyAgdW5zZXQoX3NjcmlwdF9sZW4pCitlbmRtYWNybygpCisKK2Z1bmN0aW9uKGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzX2ltcGwpCisKKyAgY21ha2VfcGFyc2VfYXJndW1lbnRzKAorICAgICIiCisgICAgIiIKKyAgICAiTk9fUFJFVFRZX1RZUEVTO05PX1BSRVRUWV9WQUxVRVM7VEVTVF9FWEVDVVRBQkxFO1RFU1RfV09SS0lOR19ESVI7VEVTVF9QUkVGSVg7VEVTVF9TVUZGSVg7VEVTVF9MSVNUO0NURVNUX0ZJTEU7VEVTVF9ESVNDT1ZFUllfVElNRU9VVDtURVNUX1hNTF9PVVRQVVRfRElSIgorICAgICJURVNUX0VYVFJBX0FSR1M7VEVTVF9QUk9QRVJUSUVTO1RFU1RfRVhFQ1VUT1IiCisgICAgJHtBUkdOfQorICApCisKKyAgc2V0KHByZWZpeCAiJHtfVEVTVF9QUkVGSVh9IikKKyAgc2V0KHN1ZmZpeCAiJHtfVEVTVF9TVUZGSVh9IikKKyAgc2V0KGV4dHJhX2FyZ3MgJHtfVEVTVF9FWFRSQV9BUkdTfSkKKyAgc2V0KHByb3BlcnRpZXMgJHtfVEVTVF9QUk9QRVJUSUVTfSkKKyAgc2V0KHNjcmlwdCkKKyAgc2V0KHN1aXRlKQorICBzZXQodGVzdHMpCisgIHNldCh0ZXN0c19idWZmZXIpCisKKyAgIyBSdW4gdGVzdCBleGVjdXRhYmxlIHRvIGdldCBsaXN0IG9mIGF2YWlsYWJsZSB0ZXN0cworICBpZihOT1QgRVhJU1RTICIke19URVNUX0VYRUNVVEFCTEV9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAiU3BlY2lmaWVkIHRlc3QgZXhlY3V0YWJsZSBkb2VzIG5vdCBleGlzdC5cbiIKKyAgICAgICIgIFBhdGg6ICcke19URVNUX0VYRUNVVEFCTEV9JyIKKyAgICApCisgIGVuZGlmKCkKKyAgZXhlY3V0ZV9wcm9jZXNzKAorICAgIENPTU1BTkQgJHtfVEVTVF9FWEVDVVRPUn0gIiR7X1RFU1RfRVhFQ1VUQUJMRX0iIC0tZ3Rlc3RfbGlzdF90ZXN0cworICAgIFdPUktJTkdfRElSRUNUT1JZICIke19URVNUX1dPUktJTkdfRElSfSIKKyAgICBUSU1FT1VUICR7X1RFU1RfRElTQ09WRVJZX1RJTUVPVVR9CisgICAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAorICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKKyAgKQorICBpZihOT1QgJHtyZXN1bHR9IEVRVUFMIDApCisgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICAgIiBvdXRwdXQgIiR7b3V0cHV0fSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICAgIkVycm9yIHJ1bm5pbmcgdGVzdCBleGVjdXRhYmxlLlxuIgorICAgICAgIiAgUGF0aDogJyR7X1RFU1RfRVhFQ1VUQUJMRX0nXG4iCisgICAgICAiICBSZXN1bHQ6ICR7cmVzdWx0fVxuIgorICAgICAgIiAgT3V0cHV0OlxuIgorICAgICAgIiAgICAke291dHB1dH1cbiIKKyAgICApCisgIGVuZGlmKCkKKworICAjIFByZXNlcnZlIHNlbWljb2xvbiBpbiB0ZXN0LXBhcmFtZXRlcnMKKyAgc3RyaW5nKFJFUExBQ0UgW1s7XV0gW1tcO11dIG91dHB1dCAiJHtvdXRwdXR9IikKKyAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiOyIgb3V0cHV0ICIke291dHB1dH0iKQorCisgICMgUGFyc2Ugb3V0cHV0CisgIGZvcmVhY2gobGluZSAke291dHB1dH0pCisgICAgIyBTa2lwIGhlYWRlcgorICAgIGlmKE5PVCBsaW5lIE1BVENIRVMgImd0ZXN0X21haW5cXC5jYyIpCisgICAgICAjIERvIHdlIGhhdmUgYSBtb2R1bGUgbmFtZSBvciBhIHRlc3QgbmFtZT8KKyAgICAgIGlmKE5PVCBsaW5lIE1BVENIRVMgIl4gICIpCisgICAgICAgICMgTW9kdWxlOyByZW1vdmUgdHJhaWxpbmcgJy4nIHRvIGdldCBqdXN0IHRoZSBuYW1lLi4uCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJcXC4oICojLiopPyIgIiIgc3VpdGUgIiR7bGluZX0iKQorICAgICAgICBpZihsaW5lIE1BVENIRVMgIiMiIEFORCBOT1QgX05PX1BSRVRUWV9UWVBFUykKKyAgICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiL1swLTldXFwuKyArIy4qPSArIiAiLyIgcHJldHR5X3N1aXRlICIke2xpbmV9IikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KHByZXR0eV9zdWl0ZSAiJHtzdWl0ZX0iKQorICAgICAgICBlbmRpZigpCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeRElTQUJMRURfIiAiIiBwcmV0dHlfc3VpdGUgIiR7cHJldHR5X3N1aXRlfSIpCisgICAgICBlbHNlKCkKKyAgICAgICAgIyBUZXN0IG5hbWU7IHN0cmlwIHNwYWNlcyBhbmQgY29tbWVudHMgdG8gZ2V0IGp1c3QgdGhlIG5hbWUuLi4KKyAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIiArIiAiIiB0ZXN0ICIke2xpbmV9IikKKyAgICAgICAgaWYodGVzdCBNQVRDSEVTICIjIiBBTkQgTk9UIF9OT19QUkVUVFlfVkFMVUVTKQorICAgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIvWzAtOV0rI0dldFBhcmFtLi49IiAiLyIgcHJldHR5X3Rlc3QgIiR7dGVzdH0iKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiIy4qIiAiIiBwcmV0dHlfdGVzdCAiJHt0ZXN0fSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl5ESVNBQkxFRF8iICIiIHByZXR0eV90ZXN0ICIke3ByZXR0eV90ZXN0fSIpCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIjLioiICIiIHRlc3QgIiR7dGVzdH0iKQorICAgICAgICBpZihOT1QgIiR7X1RFU1RfWE1MX09VVFBVVF9ESVJ9IiBTVFJFUVVBTCAiIikKKyAgICAgICAgICBzZXQoVEVTVF9YTUxfT1VUUFVUX1BBUkFNICItLWd0ZXN0X291dHB1dD14bWw6JHtfVEVTVF9YTUxfT1VUUFVUX0RJUn0vJHtwcmVmaXh9JHtzdWl0ZX0uJHt0ZXN0fSR7c3VmZml4fS54bWwiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICB1bnNldChURVNUX1hNTF9PVVRQVVRfUEFSQU0pCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICAjIHNhbml0aXplIHRlc3QgbmFtZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGRvd25zdHJlYW0KKyAgICAgICAgc2V0KHRlc3RuYW1lICIke3ByZWZpeH0ke3ByZXR0eV9zdWl0ZX0uJHtwcmV0dHlfdGVzdH0ke3N1ZmZpeH0iKQorICAgICAgICAjIGVzY2FwZSBcCisgICAgICAgIHN0cmluZyhSRVBMQUNFIFtbXF1dIFtbXFxdXSB0ZXN0bmFtZSAiJHt0ZXN0bmFtZX0iKQorICAgICAgICAjIGVzY2FwZSA7CisgICAgICAgIHN0cmluZyhSRVBMQUNFIFtbO11dIFtbXDtdXSB0ZXN0bmFtZSAiJHt0ZXN0bmFtZX0iKQorICAgICAgICAjIGVzY2FwZSAkCisgICAgICAgIHN0cmluZyhSRVBMQUNFIFtbJF1dIFtbXCRdXSB0ZXN0bmFtZSAiJHt0ZXN0bmFtZX0iKQorCisgICAgICAgICMgLi4uYW5kIGFkZCB0byBzY3JpcHQKKyAgICAgICAgYWRkX2NvbW1hbmQoYWRkX3Rlc3QKKyAgICAgICAgICAiJHt0ZXN0bmFtZX0iCisgICAgICAgICAgJHtfVEVTVF9FWEVDVVRPUn0KKyAgICAgICAgICAiJHtfVEVTVF9FWEVDVVRBQkxFfSIKKyAgICAgICAgICAiLS1ndGVzdF9maWx0ZXI9JHtzdWl0ZX0uJHt0ZXN0fSIKKyAgICAgICAgICAiLS1ndGVzdF9hbHNvX3J1bl9kaXNhYmxlZF90ZXN0cyIKKyAgICAgICAgICAke1RFU1RfWE1MX09VVFBVVF9QQVJBTX0KKyAgICAgICAgICAke2V4dHJhX2FyZ3N9CisgICAgICAgICkKKyAgICAgICAgaWYoc3VpdGUgTUFUQ0hFUyAiXkRJU0FCTEVEIiBPUiB0ZXN0IE1BVENIRVMgIl5ESVNBQkxFRCIpCisgICAgICAgICAgYWRkX2NvbW1hbmQoc2V0X3Rlc3RzX3Byb3BlcnRpZXMKKyAgICAgICAgICAgICIke3Rlc3RuYW1lfSIKKyAgICAgICAgICAgIFBST1BFUlRJRVMgRElTQUJMRUQgVFJVRQorICAgICAgICAgICkKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBhZGRfY29tbWFuZChzZXRfdGVzdHNfcHJvcGVydGllcworICAgICAgICAgICIke3Rlc3RuYW1lfSIKKyAgICAgICAgICBQUk9QRVJUSUVTCisgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7X1RFU1RfV09SS0lOR19ESVJ9IgorICAgICAgICAgIFNLSVBfUkVHVUxBUl9FWFBSRVNTSU9OICJcXFxcWyAgU0tJUFBFRCBcXFxcXSIKKyAgICAgICAgICAke3Byb3BlcnRpZXN9CisgICAgICAgICkKKyAgICAgICAgbGlzdChBUFBFTkQgdGVzdHNfYnVmZmVyICIke3Rlc3RuYW1lfSIpCisgICAgICAgIGxpc3QoTEVOR1RIIHRlc3RzX2J1ZmZlciB0ZXN0c19idWZmZXJfbGVuZ3RoKQorICAgICAgICBpZigke3Rlc3RzX2J1ZmZlcl9sZW5ndGh9IEdSRUFURVIgIjI1MCIpCisgICAgICAgICAgZmx1c2hfdGVzdHNfYnVmZmVyKCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKworICAjIENyZWF0ZSBhIGxpc3Qgb2YgYWxsIGRpc2NvdmVyZWQgdGVzdHMsIHdoaWNoIHVzZXJzIG1heSB1c2UgdG8gZS5nLiBzZXQKKyAgIyBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXN0cworICBmbHVzaF90ZXN0c19idWZmZXIoKQorICBhZGRfY29tbWFuZChzZXQgJHtfVEVTVF9MSVNUfSAke3Rlc3RzfSkKKworICAjIFdyaXRlIENUZXN0IHNjcmlwdAorICBmbHVzaF9zY3JpcHQoKQorCiBlbmRmdW5jdGlvbigpCiAKLSMgUnVuIHRlc3QgZXhlY3V0YWJsZSB0byBnZXQgbGlzdCBvZiBhdmFpbGFibGUgdGVzdHMKLWlmKE5PVCBFWElTVFMgIiR7VEVTVF9FWEVDVVRBQkxFfSIpCi0gIG1lc3NhZ2UoRkFUQUxfRVJST1IKLSAgICAiU3BlY2lmaWVkIHRlc3QgZXhlY3V0YWJsZSBkb2VzIG5vdCBleGlzdC5cbiIKLSAgICAiICBQYXRoOiAnJHtURVNUX0VYRUNVVEFCTEV9JyIKK2lmKENNQUtFX1NDUklQVF9NT0RFX0ZJTEUpCisgIGd0ZXN0X2Rpc2NvdmVyX3Rlc3RzX2ltcGwoCisgICAgTk9fUFJFVFRZX1RZUEVTICR7Tk9fUFJFVFRZX1RZUEVTfQorICAgIE5PX1BSRVRUWV9WQUxVRVMgJHtOT19QUkVUVFlfVkFMVUVTfQorICAgIFRFU1RfRVhFQ1VUQUJMRSAke1RFU1RfRVhFQ1VUQUJMRX0KKyAgICBURVNUX0VYRUNVVE9SICR7VEVTVF9FWEVDVVRPUn0KKyAgICBURVNUX1dPUktJTkdfRElSICR7VEVTVF9XT1JLSU5HX0RJUn0KKyAgICBURVNUX1BSRUZJWCAke1RFU1RfUFJFRklYfQorICAgIFRFU1RfU1VGRklYICR7VEVTVF9TVUZGSVh9CisgICAgVEVTVF9MSVNUICR7VEVTVF9MSVNUfQorICAgIENURVNUX0ZJTEUgJHtDVEVTVF9GSUxFfQorICAgIFRFU1RfRElTQ09WRVJZX1RJTUVPVVQgJHtURVNUX0RJU0NPVkVSWV9USU1FT1VUfQorICAgIFRFU1RfWE1MX09VVFBVVF9ESVIgJHtURVNUX1hNTF9PVVRQVVRfRElSfQorICAgIFRFU1RfRVhUUkFfQVJHUyAke1RFU1RfRVhUUkFfQVJHU30KKyAgICBURVNUX1BST1BFUlRJRVMgJHtURVNUX1BST1BFUlRJRVN9CiAgICkKIGVuZGlmKCkKLWV4ZWN1dGVfcHJvY2VzcygKLSAgQ09NTUFORCAke1RFU1RfRVhFQ1VUT1J9ICIke1RFU1RfRVhFQ1VUQUJMRX0iIC0tZ3Rlc3RfbGlzdF90ZXN0cwotICBXT1JLSU5HX0RJUkVDVE9SWSAiJHtURVNUX1dPUktJTkdfRElSfSIKLSAgVElNRU9VVCAke1RFU1RfRElTQ09WRVJZX1RJTUVPVVR9Ci0gIE9VVFBVVF9WQVJJQUJMRSBvdXRwdXQKLSAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAotKQotaWYoTk9UICR7cmVzdWx0fSBFUVVBTCAwKQotICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgICAiIG91dHB1dCAiJHtvdXRwdXR9IikKLSAgbWVzc2FnZShGQVRBTF9FUlJPUgotICAgICJFcnJvciBydW5uaW5nIHRlc3QgZXhlY3V0YWJsZS5cbiIKLSAgICAiICBQYXRoOiAnJHtURVNUX0VYRUNVVEFCTEV9J1xuIgotICAgICIgIFJlc3VsdDogJHtyZXN1bHR9XG4iCi0gICAgIiAgT3V0cHV0OlxuIgotICAgICIgICAgJHtvdXRwdXR9XG4iCi0gICkKLWVuZGlmKCkKLQotc3RyaW5nKFJFUExBQ0UgIlxuIiAiOyIgb3V0cHV0ICIke291dHB1dH0iKQotCi0jIFBhcnNlIG91dHB1dAotZm9yZWFjaChsaW5lICR7b3V0cHV0fSkKLSAgIyBTa2lwIGhlYWRlcgotICBpZihOT1QgbGluZSBNQVRDSEVTICJndGVzdF9tYWluXFwuY2MiKQotICAgICMgRG8gd2UgaGF2ZSBhIG1vZHVsZSBuYW1lIG9yIGEgdGVzdCBuYW1lPwotICAgIGlmKE5PVCBsaW5lIE1BVENIRVMgIl4gICIpCi0gICAgICAjIE1vZHVsZTsgcmVtb3ZlIHRyYWlsaW5nICcuJyB0byBnZXQganVzdCB0aGUgbmFtZS4uLgotICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIlxcLiggKiMuKik/IiAiIiBzdWl0ZSAiJHtsaW5lfSIpCi0gICAgICBpZihsaW5lIE1BVENIRVMgIiMiIEFORCBOT1QgTk9fUFJFVFRZX1RZUEVTKQotICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiL1swLTldXFwuKyArIy4qPSArIiAiLyIgcHJldHR5X3N1aXRlICIke2xpbmV9IikKLSAgICAgIGVsc2UoKQotICAgICAgICBzZXQocHJldHR5X3N1aXRlICIke3N1aXRlfSIpCi0gICAgICBlbmRpZigpCi0gICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXkRJU0FCTEVEXyIgIiIgcHJldHR5X3N1aXRlICIke3ByZXR0eV9zdWl0ZX0iKQotICAgIGVsc2UoKQotICAgICAgIyBUZXN0IG5hbWU7IHN0cmlwIHNwYWNlcyBhbmQgY29tbWVudHMgdG8gZ2V0IGp1c3QgdGhlIG5hbWUuLi4KLSAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIgKyIgIiIgdGVzdCAiJHtsaW5lfSIpCi0gICAgICBpZih0ZXN0IE1BVENIRVMgIiMiIEFORCBOT1QgTk9fUFJFVFRZX1ZBTFVFUykKLSAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi9bMC05XSsjR2V0UGFyYW0uLj0iICIvIiBwcmV0dHlfdGVzdCAiJHt0ZXN0fSIpCi0gICAgICBlbHNlKCkKLSAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIiMuKiIgIiIgcHJldHR5X3Rlc3QgIiR7dGVzdH0iKQotICAgICAgZW5kaWYoKQotICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl5ESVNBQkxFRF8iICIiIHByZXR0eV90ZXN0ICIke3ByZXR0eV90ZXN0fSIpCi0gICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiIy4qIiAiIiB0ZXN0ICIke3Rlc3R9IikKLSAgICAgICMgLi4uYW5kIGFkZCB0byBzY3JpcHQKLSAgICAgIGFkZF9jb21tYW5kKGFkZF90ZXN0Ci0gICAgICAgICIke3ByZWZpeH0ke3ByZXR0eV9zdWl0ZX0uJHtwcmV0dHlfdGVzdH0ke3N1ZmZpeH0iCi0gICAgICAgICR7VEVTVF9FWEVDVVRPUn0KLSAgICAgICAgIiR7VEVTVF9FWEVDVVRBQkxFfSIKLSAgICAgICAgIi0tZ3Rlc3RfZmlsdGVyPSR7c3VpdGV9LiR7dGVzdH0iCi0gICAgICAgICItLWd0ZXN0X2Fsc29fcnVuX2Rpc2FibGVkX3Rlc3RzIgotICAgICAgICAke2V4dHJhX2FyZ3N9Ci0gICAgICApCi0gICAgICBpZihzdWl0ZSBNQVRDSEVTICJeRElTQUJMRUQiIE9SIHRlc3QgTUFUQ0hFUyAiXkRJU0FCTEVEIikKLSAgICAgICAgYWRkX2NvbW1hbmQoc2V0X3Rlc3RzX3Byb3BlcnRpZXMKLSAgICAgICAgICAiJHtwcmVmaXh9JHtwcmV0dHlfc3VpdGV9LiR7cHJldHR5X3Rlc3R9JHtzdWZmaXh9IgotICAgICAgICAgIFBST1BFUlRJRVMgRElTQUJMRUQgVFJVRQotICAgICAgICApCi0gICAgICBlbmRpZigpCi0gICAgICBhZGRfY29tbWFuZChzZXRfdGVzdHNfcHJvcGVydGllcwotICAgICAgICAiJHtwcmVmaXh9JHtwcmV0dHlfc3VpdGV9LiR7cHJldHR5X3Rlc3R9JHtzdWZmaXh9IgotICAgICAgICBQUk9QRVJUSUVTCi0gICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke1RFU1RfV09SS0lOR19ESVJ9IgotICAgICAgICAke3Byb3BlcnRpZXN9Ci0gICAgICApCi0gICAgIGxpc3QoQVBQRU5EIHRlc3RzICIke3ByZWZpeH0ke3ByZXR0eV9zdWl0ZX0uJHtwcmV0dHlfdGVzdH0ke3N1ZmZpeH0iKQotICAgIGVuZGlmKCkKLSAgZW5kaWYoKQotZW5kZm9yZWFjaCgpCi0KLSMgQ3JlYXRlIGEgbGlzdCBvZiBhbGwgZGlzY292ZXJlZCB0ZXN0cywgd2hpY2ggdXNlcnMgbWF5IHVzZSB0byBlLmcuIHNldAotIyBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXN0cwotYWRkX2NvbW1hbmQoc2V0ICR7VEVTVF9MSVNUfSAke3Rlc3RzfSkKLQotIyBXcml0ZSBDVGVzdCBzY3JpcHQKLWZpbGUoV1JJVEUgIiR7Q1RFU1RfRklMRX0iICIke3NjcmlwdH0iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9JbnN0YWxsUmVxdWlyZWRTeXN0ZW1MaWJyYXJpZXMuY21ha2UgYi9Nb2R1bGVzL0luc3RhbGxSZXF1aXJlZFN5c3RlbUxpYnJhcmllcy5jbWFrZQppbmRleCAwNDY4N2I5Li5jYWNhNjk3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL0luc3RhbGxSZXF1aXJlZFN5c3RlbUxpYnJhcmllcy5jbWFrZQorKysgYi9Nb2R1bGVzL0luc3RhbGxSZXF1aXJlZFN5c3RlbUxpYnJhcmllcy5jbWFrZQpAQCAtNjksNyArNjksNyBAQAogICAgICAgaWYoQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQogICAgICAgICBzZXQoX0ludGVsX2FyY2hkaXIgaW50ZWw2NCkKICAgICAgIGVsc2UoKQotICAgICAgICBzZXQoX0ludGVsX2FyY2hkaXIgeDg2KQorICAgICAgICBzZXQoX0ludGVsX2FyY2hkaXIgaWEzMikKICAgICAgIGVuZGlmKCkKICAgICAgIHNldChfSW50ZWxfY29tcGlsZXJfdmVyICR7Q01BS0VfJHtMQU5HfV9DT01QSUxFUl9WRVJTSU9OfSkKICAgICAgIGlmKFdJTjMyKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9DUGFja0RlYi5jbWFrZSBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tEZWIuY21ha2UKaW5kZXggOTc5MDZjYS4uNDMxYjA3NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9DUGFja0RlYi5jbWFrZQorKysgYi9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrRGViLmNtYWtlCkBAIC04Myw2ICs4MywxNiBAQAogICBzdHJpbmcoUkVQTEFDRSAiXG4iICI7IiBfbGluZXMgIiR7X3RleHR9IikKICAgbGlzdChQT1BfRlJPTlQgX2xpbmVzIF9zdW1tYXJ5KQogCisgICMgSWYgdGhlIGRlc2NyaXB0aW9uIGVuZHMgd2l0aCBhIG5ld2xpbmUgKGUuZy4gdHlwaWNhbGx5IGlmIGl0IHdhcyByZWFkCisgICMgZnJvbSBhIGZpbGUpIHRoZSBsYXN0IGxpbmUgd2lsbCBiZSBlbXB0eS4gV2UgZHJvcCBpdCBoZXJlLCBvdGhlcndpc2UKKyAgIyBpdCB3b3VsZCBiZSByZXBsYWNlZCBieSBhIGAuYCB3aGljaCB3b3VsZCBsZWFkIHRvIHRoZSBwYWNrYWdlIHZpb2xhdGluZworICAjIHRoZSBleHRlbmRlZC1kZXNjcmlwdGlvbi1jb250YWlucy1lbXB0eS1wYXJhZ3JhcGggZGViaWFuIHBvbGljeQorICBsaXN0KFBPUF9CQUNLIF9saW5lcyBfbGFzdF9saW5lKQorICBzdHJpbmcoU1RSSVAgIiR7X2xhc3RfbGluZX0iIF9sYXN0X2xpbmVfc3RyaXApCisgIGlmKF9sYXN0X2xpbmVfc3RyaXApCisgICAgbGlzdChBUFBFTkQgX2xpbmVzICIke19sYXN0X2xpbmVfc3RyaXB9IikKKyAgZW5kaWYoKQorCiAgICMgQ2hlY2sgaWYgcmVmb3JtYXR0aW5nIHJlcXVpcmVkCiAgIGNwYWNrX2RlYl9jaGVja19kZXNjcmlwdGlvbigiJHtfc3VtbWFyeX0iICIke19saW5lc30iIF9yZXN1bHQpCiAgIGlmKF9yZXN1bHQpCkBAIC01MzcsOCArNTQ3LDggQEAKICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgX2Rlc2NyaXB0aW9uX2ZhaWx1cmVfbWVzc2FnZSkKICAgICBlbmRpZigpCiAKLSAgIyBPaywgZGVzY3JpcHRpb24gaGFzIHNldC4gQWNjb3JkaW5nIHRvIHRoZSBgRGViaWFuIFBvbGljeSBNYW51YWxgXyB0aGUgZnJpc3QKLSAgIyBsaW5lIGlzIGEgcGFjYWtnZSBzdW1tYXJ5LiAgVHJ5IHRvIGdldCBpdCBhcyB3ZWxsLi4uCisgICMgT2ssIGRlc2NyaXB0aW9uIGhhcyBzZXQuIEFjY29yZGluZyB0byB0aGUgYERlYmlhbiBQb2xpY3kgTWFudWFsYF8gdGhlIGZpcnN0CisgICMgbGluZSBpcyBhIHBhY2thZ2Ugc3VtbWFyeS4gIFRyeSB0byBnZXQgaXQgYXMgd2VsbC4uLgogICAjIFNlZSBhbHNvOiBodHRwczovL3d3dy5kZWJpYW4ub3JnL2RvYy9kZWJpYW4tcG9saWN5L2NoLWNvbnRyb2xmaWVsZHMuaHRtbCNkZXNjcmlwdGlvbgogICBlbHNlaWYoQ1BBQ0tfUEFDS0FHRV9ERVNDUklQVElPTl9TVU1NQVJZIEFORAogICAgICAgICAgTk9UIENQQUNLX1BBQ0tBR0VfREVTQ1JJUFRJT05fU1VNTUFSWSBTVFJFUVVBTCBDUEFDS19ERUZBVUxUX1BBQ0tBR0VfREVTQ1JJUFRJT05fU1VNTUFSWSkKQEAgLTU1NCw4ICs1NjQsOCBAQAogICApCiAKICAgIyBIb21lcGFnZTogKG9wdGlvbmFsKQotICBpZihOT1QgQ1BBQ0tfREVCSUFOX1BBQ0tBR0VfSE9NRVBBR0UgQU5EIENNQUtFX1BST0pFQ1RfSE9NRVBBR0VfVVJMKQotICAgIHNldChDUEFDS19ERUJJQU5fUEFDS0FHRV9IT01FUEFHRSAiJHtDTUFLRV9QUk9KRUNUX0hPTUVQQUdFX1VSTH0iKQorICBpZihOT1QgQ1BBQ0tfREVCSUFOX1BBQ0tBR0VfSE9NRVBBR0UgQU5EIENQQUNLX1BBQ0tBR0VfSE9NRVBBR0VfVVJMKQorICAgIHNldChDUEFDS19ERUJJQU5fUEFDS0FHRV9IT01FUEFHRSAiJHtDUEFDS19QQUNLQUdFX0hPTUVQQUdFX1VSTH0iKQogICBlbmRpZigpCiAKICAgIyBTZWN0aW9uOiAocmVjb21tZW5kZWQpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrRnJlZUJTRC5jbWFrZSBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tGcmVlQlNELmNtYWtlCmluZGV4IDE2ZjkwNmMuLmFlNDA1MzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tGcmVlQlNELmNtYWtlCisrKyBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tGcmVlQlNELmNtYWtlCkBAIC02OCw3ICs2OCw3IEBACiAjIFRoZXJlJ3MgcmVhbGx5IG9ubHkgb25lIGhvbWVwYWdlIGZvciBhIHByb2plY3QsIHNvCiAjIHJlLXVzZSB0aGUgRGViaWFuIHNldHRpbmcgaWYgaXQncyB0aGVyZS4KIF9jcGFja19mcmVlYnNkX2ZhbGxiYWNrX3ZhcigiQ1BBQ0tfRlJFRUJTRF9QQUNLQUdFX1dXVyIKLSAgICAiQ01BS0VfUFJPSkVDVF9IT01FUEFHRV9VUkwiCisgICAgIkNQQUNLX1BBQ0tBR0VfSE9NRVBBR0VfVVJMIgogICAgICJDUEFDS19ERUJJQU5fUEFDS0FHRV9IT01FUEFHRSIKICAgICAiX2NwYWNrX2ZyZWVic2RfZmFsbGJhY2tfd3d3IgogICAgICkKZGlmZiAtLWdpdCBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tOdUdldC5jbWFrZSBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tOdUdldC5jbWFrZQppbmRleCA4MjA1M2IyLi4yMGVlZDJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrTnVHZXQuY21ha2UKKysrIGIvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9DUGFja051R2V0LmNtYWtlCkBAIC0yMzAsMzEgKzIzMCwyMiBAQAogICAgIGZvcmVhY2goX2RlcCBJTiBMSVNUUyBfZGVwcykKICAgICAgICAgX2NwYWNrX251Z2V0X2RlYnVnKCIgIGNoZWNraW5nIGRlcGVuZGVuY3kgYCR7X2RlcH1gIikKIAotICAgICAgICBzdHJpbmcoTUFLRV9DX0lERU5USUZJRVIgIiR7X2RlcH0iIF9kZXBfaWQpCi0KLSAgICAgICAgX2NwYWNrX251Z2V0X3ZhcmlhYmxlX2ZhbGxiYWNrKF92ZXIgREVQRU5ERU5DSUVTXyR7X2RlcF9pZH1fVkVSU0lPTikKKyAgICAgICAgX2NwYWNrX251Z2V0X3ZhcmlhYmxlX2ZhbGxiYWNrKF92ZXIgREVQRU5ERU5DSUVTXyR7X2RlcH1fVkVSU0lPTikKIAogICAgICAgICBpZihOT1QgX3ZlcikKLSAgICAgICAgICAgIHN0cmluZyhUT1VQUEVSICIke19kZXBfaWR9IiBfZGVwX2lkKQotICAgICAgICAgICAgX2NwYWNrX251Z2V0X3ZhcmlhYmxlX2ZhbGxiYWNrKF92ZXIgREVQRU5ERU5DSUVTXyR7X2RlcF9pZH1fVkVSU0lPTikKKyAgICAgICAgICAgIHN0cmluZyhUT1VQUEVSICIke19kZXB9IiBfZGVwX3VwcGVyKQorICAgICAgICAgICAgX2NwYWNrX251Z2V0X3ZhcmlhYmxlX2ZhbGxiYWNrKF92ZXIgREVQRU5ERU5DSUVTXyR7X2RlcF91cHBlcn1fVkVSU0lPTikKICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgIGlmKF92ZXIpCiAgICAgICAgICAgICBfY3BhY2tfbnVnZXRfZGVidWcoIiAgZ290IGAke19kZXB9YCBkZXBlbmRlbmN5IHZlcnNpb24gJHtfdmVyfSIpCi0gICAgICAgICAgICBsaXN0KEFQUEVORCBfY29sbGVjdGVkX2RlcHMgIjxkZXBlbmRlbmN5IGlkPVwiJHtfZGVwfVwiIHZlcnNpb249XCIke192ZXJ9XCIgLz4iKQorICAgICAgICAgICAgc3RyaW5nKENPTkNBVCBfY29sbGVjdGVkX2RlcHMgIiR7X2NvbGxlY3RlZF9kZXBzfSIgIiAgICAgICAgICAgIDxkZXBlbmRlbmN5IGlkPVwiJHtfZGVwfVwiIHZlcnNpb249XCIke192ZXJ9XCIgLz5cbiIpCiAgICAgICAgIGVuZGlmKCkKICAgICBlbmRmb3JlYWNoKCkKIAogICAgICMgUmVuZGVyIGRlcHMgaW50byB0aGUgdmFyaWFibGUKICAgICBpZihfY29sbGVjdGVkX2RlcHMpCi0gICAgICAgIHNldChfQ1BBQ0tfTlVHRVRfREVQRU5ERU5DSUVTX1RBRyAiPGRlcGVuZGVuY2llcz5cbiIpCi0gICAgICAgIGZvcmVhY2goX2xpbmUgSU4gTElTVFMgX2NvbGxlY3RlZF9kZXBzKQotICAgICAgICAgICAgc3RyaW5nKAotICAgICAgICAgICAgICAgIEFQUEVORCBfQ1BBQ0tfTlVHRVRfREVQRU5ERU5DSUVTX1RBRwotICAgICAgICAgICAgICAgICIgICAgICAgICAgICAke19saW5lfVxuIgotICAgICAgICAgICAgICApCi0gICAgICAgIGVuZGZvcmVhY2goKQotICAgICAgICBzdHJpbmcoQVBQRU5EIF9DUEFDS19OVUdFVF9ERVBFTkRFTkNJRVNfVEFHICIgICAgICAgIDwvZGVwZW5kZW5jaWVzPiIpCisgICAgICAgIHN0cmluZyhDT05DQVQgX0NQQUNLX05VR0VUX0RFUEVOREVOQ0lFU19UQUcgIjxkZXBlbmRlbmNpZXM+XG4iICIke19jb2xsZWN0ZWRfZGVwc30iICIgICAgICAgIDwvZGVwZW5kZW5jaWVzPiIpCiAgICAgZW5kaWYoKQogCiAgICAgIyBSZW5kZXIgdGhlIHNwZWMgZmlsZQpAQCAtMjk2LDcgKzI4NywxMSBAQAogICAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICAgICAgQ09NTUFORCAiJHtOVUdFVF9FWEVDVVRBQkxFfSIgcGFjayAke0NQQUNLX05VR0VUX1BBQ0tfQURESVRJT05BTF9PUFRJT05TfQogICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAiJHtDUEFDS19URU1QT1JBUllfRElSRUNUT1JZfSIKKyAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9udWdldF9yZXN1bHQKICAgICAgICkKKyAgICBpZihOT1QgX251Z2V0X3Jlc3VsdCBFUVVBTCAwKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJOdWdldCBwYWNrIGZhaWxlZCIpCisgICAgZW5kaWYoKQogCiBlbHNlaWYoQ1BBQ0tfTlVHRVRfQUxMX0lOX09ORSkKICAgICAjIFRoaXMgdmFyaWFibGUgYENQQUNLX05VR0VUX0FMTF9JTl9PTkVgIHNldCBieSBDKysgY29kZToKQEAgLTMwOSw3ICszMDQsMTEgQEAKICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICAgIENPTU1BTkQgIiR7TlVHRVRfRVhFQ1VUQUJMRX0iIHBhY2sgJHtDUEFDS19OVUdFVF9QQUNLX0FERElUSU9OQUxfT1BUSU9OU30KICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0iCisgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfbnVnZXRfcmVzdWx0CiAgICAgICApCisgICAgaWYoTk9UIF9udWdldF9yZXN1bHQgRVFVQUwgMCkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTnVnZXQgcGFjayBmYWlsZWQiKQorICAgIGVuZGlmKCkKIAogZWxzZSgpCiAgICAgIyBJcyB0aGVyZSBhbnkgZ3JvdXBlZCBjb21wb25lbnQ/CkBAIC0zMzEsNyArMzMwLDExIEBACiAgICAgICAgICAgICBleGVjdXRlX3Byb2Nlc3MoCiAgICAgICAgICAgICAgICAgQ09NTUFORCAiJHtOVUdFVF9FWEVDVVRBQkxFfSIgcGFjayAke0NQQUNLX05VR0VUX1BBQ0tfQURESVRJT05BTF9PUFRJT05TfQogICAgICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICIke0NQQUNLX1RFTVBPUkFSWV9ESVJFQ1RPUll9IgorICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfbnVnZXRfcmVzdWx0CiAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGlmKE5PVCBfbnVnZXRfcmVzdWx0IEVRVUFMIDApCisgICAgICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTnVnZXQgcGFjayBmYWlsZWQiKQorICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICBlbmRmb3JlYWNoKCkKICAgICBlbmRpZigpCiAgICAgIyBJcyB0aGVyZSBhbnkgc2luZ2xlIGNvbXBvbmVudCBwYWNrYWdlIG5lZWRlZD8KQEAgLTM1MCw3ICszNTMsMTEgQEAKICAgICAgICAgICAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICAgICAgICAgICAgICBDT01NQU5EICIke05VR0VUX0VYRUNVVEFCTEV9IiBwYWNrICR7Q1BBQ0tfTlVHRVRfUEFDS19BRERJVElPTkFMX09QVElPTlN9CiAgICAgICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgIiR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0iCisgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIF9udWdldF9yZXN1bHQKICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgaWYoTk9UIF9udWdldF9yZXN1bHQgRVFVQUwgMCkKKyAgICAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJOdWdldCBwYWNrIGZhaWxlZCIpCisgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgIGVuZGZvcmVhY2goKQogICAgIGVuZGlmKCkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tSUE0uY21ha2UgYi9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL0NQYWNrUlBNLmNtYWtlCmluZGV4IGZmYjI0ZTIuLjA4YmJjNjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svQ1BhY2tSUE0uY21ha2UKKysrIGIvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9DUGFja1JQTS5jbWFrZQpAQCAtODQ0LDggKzg0NCw4IEBACiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKLSAgaWYoTk9UIENQQUNLX1JQTV9QQUNLQUdFX1VSTCBBTkQgQ01BS0VfUFJPSkVDVF9IT01FUEFHRV9VUkwpCi0gICAgc2V0KENQQUNLX1JQTV9QQUNLQUdFX1VSTCAiJHtDTUFLRV9QUk9KRUNUX0hPTUVQQUdFX1VSTH0iKQorICBpZihOT1QgQ1BBQ0tfUlBNX1BBQ0tBR0VfVVJMIEFORCBDUEFDS19QQUNLQUdFX0hPTUVQQUdFX1VSTCkKKyAgICBzZXQoQ1BBQ0tfUlBNX1BBQ0tBR0VfVVJMICIke0NQQUNLX1BBQ0tBR0VfSE9NRVBBR0VfVVJMfSIpCiAgIGVuZGlmKCkKIAogICAjIENQQUNLX1JQTV9QQUNLQUdFX05BTUUgKG1hbmRhdG9yeSkKQEAgLTEwOTksMTYgKzEwOTksMTggQEAKIAogICAjIENQQUNLX1JQTV9QT1NUX0lOU1RBTExfU0NSSVBUX0ZJTEUgKG9yIENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX0lOU1RBTExfU0NSSVBUX0ZJTEUpCiAgICMgQ1BBQ0tfUlBNX1BPU1RfVU5JTlNUQUxMX1NDUklQVF9GSUxFIChvciBDUEFDS19SUE1fPENPTVBPTkVOVD5fUE9TVF9VTklOU1RBTExfU0NSSVBUX0ZJTEUpCi0gICMgTWF5IGJlIHVzZWQgdG8gZW1iZWQgYSBwb3N0ICh1bilpbnN0YWxsYXRpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCisgICMgQ1BBQ0tfUlBNX1BPU1RfVFJBTlNfU0NSSVBUX0ZJTEUgKG9yIENQQUNLX1JQTV88Q09NUE9ORU5UPl9QT1NUX1RSQU5TX1NDUklQVF9GSUxFKQorICAjIE1heSBiZSB1c2VkIHRvIGVtYmVkIGEgcG9zdCBpbnN0YWxsYXRpb24vdW5pbnN0YWxsYXRpb24vdHJhbnNhY3Rpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCiAgICMgVGhlIHJlZmVycmVkIHNjcmlwdCBmaWxlKHMpIHdpbGwgYmUgcmVhZCBhbmQgZGlyZWN0bHkKLSAgIyBwdXQgYWZ0ZXIgdGhlICVwb3N0IG9yICVwb3N0dW4gc2VjdGlvbgorICAjIHB1dCBhZnRlciB0aGUgJXBvc3Qgb3IgJXBvc3R1biBvciAlcG9zdHRyYW5zIHNlY3Rpb24KICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICMgQ1BBQ0tfUlBNX1BSRV9JTlNUQUxMX1NDUklQVF9GSUxFIChvciBDUEFDS19SUE1fPENPTVBPTkVOVD5fUFJFX0lOU1RBTExfU0NSSVBUX0ZJTEUpCiAgICMgQ1BBQ0tfUlBNX1BSRV9VTklOU1RBTExfU0NSSVBUX0ZJTEUgKG9yIENQQUNLX1JQTV88Q09NUE9ORU5UPl9QUkVfVU5JTlNUQUxMX1NDUklQVF9GSUxFKQotICAjIE1heSBiZSB1c2VkIHRvIGVtYmVkIGEgcHJlICh1bilpbnN0YWxsYXRpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCisgICMgQ1BBQ0tfUlBNX1BSRV9UUkFOU19TQ1JJUFRfRklMRSAob3IgQ1BBQ0tfUlBNXzxDT01QT05FTlQ+X1BSRV9UUkFOU19TQ1JJUFRfRklMRSkKKyAgIyBNYXkgYmUgdXNlZCB0byBlbWJlZCBhIHByZSBpbnN0YWxsYXRpb24vdW5pbnN0YWxsYXRpb24vdHJhbnNhY3Rpb24gc2NyaXB0IGluIHRoZSBzcGVjIGZpbGUuCiAgICMgVGhlIHJlZmVycmVkIHNjcmlwdCBmaWxlKHMpIHdpbGwgYmUgcmVhZCBhbmQgZGlyZWN0bHkKLSAgIyBwdXQgYWZ0ZXIgdGhlICVwcmUgb3IgJXByZXVuIHNlY3Rpb24KLSAgZm9yZWFjaChSUE1fU0NSSVBUX0ZJTEVfVFlQRV8gIklOU1RBTEwiICJVTklOU1RBTEwiKQorICAjIHB1dCBhZnRlciB0aGUgJXByZSBvciAlcHJldW4gb3IgJXByZXRyYW5zIHNlY3Rpb24KKyAgZm9yZWFjaChSUE1fU0NSSVBUX0ZJTEVfVFlQRV8gIklOU1RBTEwiICJVTklOU1RBTEwiICJUUkFOUyIpCiAgICAgZm9yZWFjaChSUE1fU0NSSVBUX0ZJTEVfVElNRV8gIlBSRSIgIlBPU1QiKQogICAgICAgc2V0KCJDUEFDS19SUE1fJHtSUE1fU0NSSVBUX0ZJTEVfVElNRV99XyR7UlBNX1NDUklQVF9GSUxFX1RZUEVffV9SRUFEX0ZJTEUiCiAgICAgICAgICIke0NQQUNLX1JQTV8ke1JQTV9TQ1JJUFRfRklMRV9USU1FX31fJHtSUE1fU0NSSVBUX0ZJTEVfVFlQRV99X1NDUklQVF9GSUxFfSIpCkBAIC0xNzI3LDEyICsxNzI5LDE4IEBACiBcQFJQTV9TWU1MSU5LX1BPU1RJTlNUQUxMXEAKIFxAQ1BBQ0tfUlBNX1NQRUNfUE9TVElOU1RBTExcQAogCislcG9zdHRyYW5zCitcQENQQUNLX1JQTV9TUEVDX1BPU1RUUkFOU1xACisKICVwb3N0dW4KIFxAQ1BBQ0tfUlBNX1NQRUNfUE9TVFVOSU5TVEFMTFxACiAKICVwcmUKIFxAQ1BBQ0tfUlBNX1NQRUNfUFJFSU5TVEFMTFxACiAKKyVwcmV0cmFucworXEBDUEFDS19SUE1fU1BFQ19QUkVUUkFOU1xACisKICVwcmV1bgogXEBDUEFDS19SUE1fU1BFQ19QUkVVTklOU1RBTExcQAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL05TSVMudGVtcGxhdGUuaW4gYi9Nb2R1bGVzL0ludGVybmFsL0NQYWNrL05TSVMudGVtcGxhdGUuaW4KaW5kZXggZjc1YWU3OC4uNjAwOWNlMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9JbnRlcm5hbC9DUGFjay9OU0lTLnRlbXBsYXRlLmluCisrKyBiL01vZHVsZXMvSW50ZXJuYWwvQ1BhY2svTlNJUy50ZW1wbGF0ZS5pbgpAQCAtNDEsNiArNDEsNyBAQAogICBSZXF1ZXN0RXhlY3V0aW9uTGV2ZWwgYWRtaW4KIAogQENQQUNLX05TSVNfREVGSU5FU0AKK0BDUEFDS19OU0lTX01BTklGRVNUX0RQSV9BV0FSRV9DT0RFQAogCiAgICFpbmNsdWRlIFNlY3Rpb25zLm5zaAogCkBAIC01MjQsMTQgKzUyNSw2IEBACiAhZW5kaWYKIAogOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi07IEluc3RhbGxhdGlvbiB0eXBlcwotQENQQUNLX05TSVNfSU5TVEFMTEFUSU9OX1RZUEVTQAotCi07LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTsgQ29tcG9uZW50IHNlY3Rpb25zCi1AQ1BBQ0tfTlNJU19DT01QT05FTlRfU0VDVElPTlNACi0KLTstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOyBEZWZpbmUgc29tZSBtYWNybyBzZXR0aW5nIGZvciB0aGUgZ3VpCiBAQ1BBQ0tfTlNJU19JTlNUQUxMRVJfTVVJX0lDT05fQ09ERUAKIEBDUEFDS19OU0lTX0lOU1RBTExFUl9JQ09OX0NPREVACkBAIC01NDIsNiArNTM1LDggQEAKIAogOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7UGFnZXMKKyAgQENQQUNLX05TSVNfSU5TVEFMTEVSX1dFTENPTUVfVElUTEVfQ09ERUAKKyAgQENQQUNLX05TSVNfSU5TVEFMTEVSX1dFTENPTUVfVElUTEVfM0xJTkVTX0NPREVACiAgICFpbnNlcnRtYWNybyBNVUlfUEFHRV9XRUxDT01FCiAKICAgIWluc2VydG1hY3JvIE1VSV9QQUdFX0xJQ0VOU0UgIkBDUEFDS19SRVNPVVJDRV9GSUxFX0xJQ0VOU0VAIgpAQCAtNTU3LDYgKzU1Miw4IEBACiAgIEBDUEFDS19OU0lTX1BBR0VfQ09NUE9ORU5UU0AKIAogICAhaW5zZXJ0bWFjcm8gTVVJX1BBR0VfSU5TVEZJTEVTCisgIEBDUEFDS19OU0lTX0lOU1RBTExFUl9GSU5JU0hfVElUTEVfQ09ERUAKKyAgQENQQUNLX05TSVNfSU5TVEFMTEVSX0ZJTklTSF9USVRMRV8zTElORVNfQ09ERUAKICAgIWluc2VydG1hY3JvIE1VSV9QQUdFX0ZJTklTSAogCiAgICFpbnNlcnRtYWNybyBNVUlfVU5QQUdFX0NPTkZJUk0KQEAgLTYxNyw3ICs2MTQsNiBAQAogICAhaW5zZXJ0bWFjcm8gTVVJX0xBTkdVQUdFICJVa3JhaW5pYW4iCiAgICFpbnNlcnRtYWNybyBNVUlfTEFOR1VBR0UgIldlbHNoIgogCi0KIDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogO1Jlc2VydmUgRmlsZXMKIApAQCAtNjI4LDYgKzYyNCwxNyBAQAogICBSZXNlcnZlRmlsZSAiTlNJUy5JbnN0YWxsT3B0aW9ucy5pbmkiCiAgICFpbnNlcnRtYWNybyBNVUlfUkVTRVJWRUZJTEVfSU5TVEFMTE9QVElPTlMKIAorICA7IGZvciBVc2VySW5mbzo6R2V0TmFtZSBhbmQgVXNlckluZm86OkdldEFjY291bnRUeXBlCisgIFJlc2VydmVGaWxlIC9wbHVnaW4gJ1VzZXJJbmZvLmRsbCcKKworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IEluc3RhbGxhdGlvbiB0eXBlcworQENQQUNLX05TSVNfSU5TVEFMTEFUSU9OX1RZUEVTQAorCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgQ29tcG9uZW50IHNlY3Rpb25zCitAQ1BBQ0tfTlNJU19DT01QT05FTlRfU0VDVElPTlNACisKIDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogO0luc3RhbGxlciBTZWN0aW9ucwogCkBAIC02NDIsNyArNjQ5LDcgQEAKICAgV3JpdGVSZWdTdHIgU0hDVFggIlNvZnR3YXJlXEBDUEFDS19QQUNLQUdFX1ZFTkRPUkBcQENQQUNLX1BBQ0tBR0VfSU5TVEFMTF9SRUdJU1RSWV9LRVlAIiAiIiAkSU5TVERJUgogCiAgIDtDcmVhdGUgdW5pbnN0YWxsZXIKLSAgV3JpdGVVbmluc3RhbGxlciAiJElOU1RESVJcVW5pbnN0YWxsLmV4ZSIKKyAgV3JpdGVVbmluc3RhbGxlciAiJElOU1RESVJcQENQQUNLX05TSVNfVU5JTlNUQUxMX05BTUVALmV4ZSIKICAgUHVzaCAiRGlzcGxheU5hbWUiCiAgIFB1c2ggIkBDUEFDS19OU0lTX0RJU1BMQVlfTkFNRUAiCiAgIENhbGwgQ29uZGl0aW9uYWxBZGRUb1JlZ2lzdHkKQEAgLTY1Myw3ICs2NjAsNyBAQAogICBQdXNoICJAQ1BBQ0tfUEFDS0FHRV9WRU5ET1JAIgogICBDYWxsIENvbmRpdGlvbmFsQWRkVG9SZWdpc3R5CiAgIFB1c2ggIlVuaW5zdGFsbFN0cmluZyIKLSAgUHVzaCAiJElOU1RESVJcVW5pbnN0YWxsLmV4ZSIKKyAgUHVzaCAiJElOU1RESVJcQENQQUNLX05TSVNfVU5JTlNUQUxMX05BTUVALmV4ZSIKICAgQ2FsbCBDb25kaXRpb25hbEFkZFRvUmVnaXN0eQogICBQdXNoICJOb1JlcGFpciIKICAgUHVzaCAiMSIKQEAgLTY5MCw3ICs2OTcsNyBAQAogICBDcmVhdGVEaXJlY3RvcnkgIiRTTVBST0dSQU1TXCRTVEFSVE1FTlVfRk9MREVSIgogQENQQUNLX05TSVNfQ1JFQVRFX0lDT05TQAogQENQQUNLX05TSVNfQ1JFQVRFX0lDT05TX0VYVFJBQAotICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJFNUQVJUTUVOVV9GT0xERVJcVW5pbnN0YWxsLmxuayIgIiRJTlNURElSXFVuaW5zdGFsbC5leGUiCisgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkU1RBUlRNRU5VX0ZPTERFUlxVbmluc3RhbGwubG5rIiAiJElOU1RESVJcQENQQUNLX05TSVNfVU5JTlNUQUxMX05BTUVALmV4ZSIKIAogICA7UmVhZCBhIHZhbHVlIGZyb20gYW4gSW5zdGFsbE9wdGlvbnMgSU5JIGZpbGUKICAgIWluc2VydG1hY3JvIE1VSV9JTlNUQUxMT1BUSU9OU19SRUFEICRET19OT1RfQUREX1RPX1BBVEggIk5TSVMuSW5zdGFsbE9wdGlvbnMuaW5pIiAiRmllbGQgMiIgIlN0YXRlIgpAQCAtODI5LDcgKzgzNiw3IEBACiAhZW5kaWYKIAogICA7UmVtb3ZlIHRoZSB1bmluc3RhbGxlciBpdHNlbGYuCi0gIERlbGV0ZSAiJElOU1RESVJcVW5pbnN0YWxsLmV4ZSIKKyAgRGVsZXRlICIkSU5TVERJUlxAQ1BBQ0tfTlNJU19VTklOU1RBTExfTkFNRUAuZXhlIgogICBEZWxldGVSZWdLZXkgU0hDVFggIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFxAQ1BBQ0tfUEFDS0FHRV9JTlNUQUxMX1JFR0lTVFJZX0tFWUAiCiAKICAgO1JlbW92ZSB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBpZiBpdCBpcyBlbXB0eS4KZGlmZiAtLWdpdCBhL01vZHVsZXMvSW50ZXJuYWwvRmVhdHVyZVRlc3RpbmcuY21ha2UgYi9Nb2R1bGVzL0ludGVybmFsL0ZlYXR1cmVUZXN0aW5nLmNtYWtlCmluZGV4IDc1YmU0NzMuLjcyZDk2YjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvSW50ZXJuYWwvRmVhdHVyZVRlc3RpbmcuY21ha2UKKysrIGIvTW9kdWxlcy9JbnRlcm5hbC9GZWF0dXJlVGVzdGluZy5jbWFrZQpAQCAtODksNiArODksMTYgQEAKICAgdW5zZXQobGFuZ19sZXZlbF9oYXNfZmVhdHVyZXMpCiBlbmRtYWNybygpCiAKK21hY3JvKF9yZWNvcmRfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSBzdGQpCisgIGxpc3QoQVBQRU5EIENNQUtFX0NVREEke3N0ZH1fQ09NUElMRV9GRUFUVVJFUyBjdWRhX3N0ZF8ke3N0ZH0pCisKKyAgZ2V0X3Byb3BlcnR5KGxhbmdfbGV2ZWxfaGFzX2ZlYXR1cmVzIEdMT0JBTCBQUk9QRVJUWSBDTUFLRV9DVURBJHtzdGR9X0tOT1dOX0ZFQVRVUkVTKQorICBpZihsYW5nX2xldmVsX2hhc19mZWF0dXJlcykKKyAgICBfcmVjb3JkX2NvbXBpbGVyX2ZlYXR1cmVzKENVREEgIiR7Q01BS0VfQ1VEQSR7c3RkfV9TVEFOREFSRF9DT01QSUxFX09QVElPTn0iIENNQUtFX0NVREEke3N0ZH1fQ09NUElMRV9GRUFUVVJFUykKKyAgZW5kaWYoKQorICB1bnNldChsYW5nX2xldmVsX2hhc19mZWF0dXJlcykKK2VuZG1hY3JvKCkKKwogbWFjcm8oX2hhc19jb21waWxlcl9mZWF0dXJlcyBsYW5nIGxldmVsIGNvbXBpbGVfZmxhZ3MgZmVhdHVyZV9saXN0KQogICAjIHByZXN1bWUgYWxsIGtub3duIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQKICAgZ2V0X3Byb3BlcnR5KGtub3duX2ZlYXR1cmVzIEdMT0JBTCBQUk9QRVJUWSBDTUFLRV8ke2xhbmd9JHtsZXZlbH1fS05PV05fRkVBVFVSRVMpCkBAIC0xMDMsMyArMTEzLDcgQEAKICAgbGlzdChBUFBFTkQgQ01BS0VfQ1hYJHtzdGR9X0NPTVBJTEVfRkVBVFVSRVMgY3h4X3N0ZF8ke3N0ZH0pCiAgIF9oYXNfY29tcGlsZXJfZmVhdHVyZXMoQ1hYICR7c3RkfSAiJHtDTUFLRV9DWFgke3N0ZH1fU1RBTkRBUkRfQ09NUElMRV9PUFRJT059IiBDTUFLRV9DWFgke3N0ZH1fQ09NUElMRV9GRUFUVVJFUykKIGVuZG1hY3JvKCkKK21hY3JvKF9oYXNfY29tcGlsZXJfZmVhdHVyZXNfY3VkYSBzdGQpCisgIGxpc3QoQVBQRU5EIENNQUtFX0NVREEke3N0ZH1fQ09NUElMRV9GRUFUVVJFUyBjdWRhX3N0ZF8ke3N0ZH0pCisgIF9oYXNfY29tcGlsZXJfZmVhdHVyZXMoQ1VEQSAke3N0ZH0gIiR7Q01BS0VfQ1VEQSR7c3RkfV9TVEFOREFSRF9DT01QSUxFX09QVElPTn0iIENNQUtFX0NVREEke3N0ZH1fQ09NUElMRV9GRUFUVVJFUykKK2VuZG1hY3JvKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQUlYLUdOVS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQUlYLUdOVS5jbWFrZQppbmRleCA2MWQyMTNhLi41YTUzMmM3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0FJWC1HTlUuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BSVgtR05VLmNtYWtlCkBAIC0yMywxMSArMjMsMTEgQEAKICAgIyBDb25zdHJ1Y3QgdGhlIGV4cG9ydCBsaXN0IG91cnNlbHZlcyB0byBwYXNzIG9ubHkgdGhlIG9iamVjdCBmaWxlcyBzbwogICAjIHRoYXQgd2UgZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgYWN0dWFsbHkgcHJvdmlkZWQgYnkgdGhlIHNvdXJjZXMuCiAgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TSEFSRURfTElCUkFSWQotICAgICJcIiR7Q01BS0VfUk9PVH0vTW9kdWxlcy9QbGF0Zm9ybS9BSVgvRXhwb3J0SW1wb3J0TGlzdFwiIC1vIDxPQkpFQ1RfRElSPi9vYmplY3RzLmV4cCA8T0JKRUNUUz4iCi0gICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfJHtsYW5nfV9GTEFHUz4gLVdsLC1iRTo8T0JKRUNUX0RJUj4vb2JqZWN0cy5leHAgPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFXyR7bGFuZ31fRkxBR1M+IDxTT05BTUVfRkxBRz48VEFSR0VUX1NPTkFNRT4gLW8gPFRBUkdFVD4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iCisgICAgIlwiJHtDTUFLRV9ST09UfS9Nb2R1bGVzL1BsYXRmb3JtL0FJWC9FeHBvcnRJbXBvcnRMaXN0XCIgLW8gPE9CSkVDVF9ESVI+L2V4cG9ydHMuZXhwIDxBSVhfRVhQT1JUUz4gPE9CSkVDVFM+IgorICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPENNQUtFX1NIQVJFRF9MSUJSQVJZXyR7bGFuZ31fRkxBR1M+IC1XbCwtYkU6PE9CSkVDVF9ESVI+L2V4cG9ydHMuZXhwIDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8TElOS19GTEFHUz4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV8ke2xhbmd9X0ZMQUdTPiA8U09OQU1FX0ZMQUc+PFRBUkdFVF9TT05BTUU+IC1vIDxUQVJHRVQ+IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+IgogICAgICkKIAogICBzZXQoQ01BS0VfJHtsYW5nfV9MSU5LX0VYRUNVVEFCTEVfV0lUSF9FWFBPUlRTCi0gICAgIlwiJHtDTUFLRV9ST09UfS9Nb2R1bGVzL1BsYXRmb3JtL0FJWC9FeHBvcnRJbXBvcnRMaXN0XCIgLW8gPFRBUkdFVF9JTVBMSUI+IC1sIC4gPE9CSkVDVFM+IgorICAgICJcIiR7Q01BS0VfUk9PVH0vTW9kdWxlcy9QbGF0Zm9ybS9BSVgvRXhwb3J0SW1wb3J0TGlzdFwiIC1vIDxUQVJHRVRfSU1QTElCPiAtbCAuIDxBSVhfRVhQT1JUUz4gPE9CSkVDVFM+IgogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiAtV2wsLWJFOjxUQVJHRVRfSU1QTElCPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9BSVgtWEwuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0FJWC1YTC5jbWFrZQppbmRleCAyYTY3YzRmLi4yYThjMTU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0FJWC1YTC5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0FJWC1YTC5jbWFrZQpAQCAtMjksMTIgKzI5LDEyIEBACiAgICMgQ29uc3RydWN0IHRoZSBleHBvcnQgbGlzdCBvdXJzZWx2ZXMgdG8gcGFzcyBvbmx5IHRoZSBvYmplY3QgZmlsZXMgc28KICAgIyB0aGF0IHdlIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGFjdHVhbGx5IHByb3ZpZGVkIGJ5IHRoZSBzb3VyY2VzLgogICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKLSAgICAiXCIke0NNQUtFX1JPT1R9L01vZHVsZXMvUGxhdGZvcm0vQUlYL0V4cG9ydEltcG9ydExpc3RcIiAtbyA8T0JKRUNUX0RJUj4vb2JqZWN0cy5leHAke19PQkpFQ1RTfSIKLSAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElCUkFSWV8ke2xhbmd9X0ZMQUdTPiAtV2wsLWJFOjxPQkpFQ1RfRElSPi9vYmplY3RzLmV4cCA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9DUkVBVEVfJHtsYW5nfV9GTEFHUz4gPFNPTkFNRV9GTEFHPjxUQVJHRVRfU09OQU1FPiAtbyA8VEFSR0VUPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIKKyAgICAiXCIke0NNQUtFX1JPT1R9L01vZHVsZXMvUGxhdGZvcm0vQUlYL0V4cG9ydEltcG9ydExpc3RcIiAtbyA8T0JKRUNUX0RJUj4vZXhwb3J0cy5leHAgPEFJWF9FWFBPUlRTPiR7X09CSkVDVFN9IgorICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPENNQUtFX1NIQVJFRF9MSUJSQVJZXyR7bGFuZ31fRkxBR1M+IC1XbCwtYkU6PE9CSkVDVF9ESVI+L2V4cG9ydHMuZXhwIDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8TElOS19GTEFHUz4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV8ke2xhbmd9X0ZMQUdTPiA8U09OQU1FX0ZMQUc+PFRBUkdFVF9TT05BTUU+IC1vIDxUQVJHRVQ+IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+IgogICAgICkKIAogICBzZXQoQ01BS0VfJHtsYW5nfV9MSU5LX0VYRUNVVEFCTEVfV0lUSF9FWFBPUlRTCi0gICAgIlwiJHtDTUFLRV9ST09UfS9Nb2R1bGVzL1BsYXRmb3JtL0FJWC9FeHBvcnRJbXBvcnRMaXN0XCIgLW8gPFRBUkdFVF9JTVBMSUI+IC1sIC4gPE9CSkVDVFM+IgorICAgICJcIiR7Q01BS0VfUk9PVH0vTW9kdWxlcy9QbGF0Zm9ybS9BSVgvRXhwb3J0SW1wb3J0TGlzdFwiIC1vIDxUQVJHRVRfSU1QTElCPiAtbCAuIDxBSVhfRVhQT1JUUz4gPE9CSkVDVFM+IgogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiAtV2wsLWJFOjxUQVJHRVRfSU1QTElCPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQogCiAgIHVuc2V0KF9PQkpFQ1RTKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9BSVgvRXhwb3J0SW1wb3J0TGlzdCBiL01vZHVsZXMvUGxhdGZvcm0vQUlYL0V4cG9ydEltcG9ydExpc3QKaW5kZXggNGY2N2VmNS4uODkxYmNlNyAxMDA3NTUKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BSVgvRXhwb3J0SW1wb3J0TGlzdAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0FJWC9FeHBvcnRJbXBvcnRMaXN0CkBAIC01LDcgKzUsNyBAQAogIyBUaGlzIHNjcmlwdCBpcyBpbnRlcm5hbCB0byBDTWFrZSBhbmQgbWVhbnQgb25seSB0byBiZQogIyBpbnZva2VkIGJ5IENNYWtlLWdlbmVyYXRlZCBidWlsZCBzeXN0ZW1zIG9uIEFJWC4KIAotdXNhZ2U9J3VzYWdlOiBFeHBvcnRJbXBvcnRMaXN0IC1vIDxvdXQtZmlsZT4gWy1sIDxsaWI+XSBbLS1dIDxvYmplY3RzPi4uLicKK3VzYWdlPSd1c2FnZTogRXhwb3J0SW1wb3J0TGlzdCAtbyA8b3V0LWZpbGU+IFstbCA8bGliPl0gWy1uXSBbLS1dIDxvYmplY3RzPi4uLicKIAogZGllKCkgewogICAgIGVjaG8gIiRAIiAxPiYyOyBleGl0IDEKQEAgLTE0LDEwICsxNCwxMiBAQAogIyBQcm9jZXNzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCiBvdXQ9JycKIGxpYj0nJworbm9fb2JqZWN0cz0nJwogd2hpbGUgdGVzdCAiJCMiICE9IDA7IGRvCiAgICAgY2FzZSAiJDEiIGluCiAgICAgLWwpIHNoaWZ0OyBsaWI9IiQxIiA7OwogICAgIC1vKSBzaGlmdDsgb3V0PSIkMSIgOzsKKyAgICAtbikgbm9fb2JqZWN0cz0nMScgOzsKICAgICAtLSkgc2hpZnQ7IGJyZWFrIDs7CiAgICAgLSopIGRpZSAiJHVzYWdlIiA7OwogICAgICopICBicmVhayA7OwpAQCAtMjYsMjMgKzI4LDI4IEBACiBkb25lCiB0ZXN0IC1uICIkb3V0IiB8fCBkaWUgIiR1c2FnZSIKIAotIyBDb2xsZWN0IHN5bWJvbHMgZXhwb3J0ZWQgZnJvbSBhbGwgb2JqZWN0IGZpbGVzLgorIyBCdWlsZCBhIHRlbXBvcmFyeSBmaWxlIHRoYXQgYXRvbWljYWxseSByZXBsYWNlcyB0aGUgb3V0cHV0IGxhdGVyLgogb3V0X3RtcD0iJG91dC50bXAkJCIKIHRyYXAgJ3JtIC1mICIkb3V0X3RtcCInIEVYSVQgSU5UIFRFUk0KLWZvciBmIGluICIkQCI7IGRvCi0gICAgZHVtcCAtdG92IC1YIDMyXzY0ICIkZiIgfAotICAgIGF3ayAnCi0gICAgICAgIEJFR0lOIHsKLSAgICAgICAgICAgIFZbIkVYUE9SVEVEIl09IiBleHBvcnQiCi0gICAgICAgICAgICBWWyJQUk9URUNURUQiXT0iIHByb3RlY3RlZCIKLSAgICAgICAgfQotICAgICAgICAvXlxbWzAtOV0rXF1cdG0gK1teIF0rICtcLih0ZXh0fGRhdGF8YnNzKSArW14gXSsgKyhleHRlcm58d2VhaykgKyhFWFBPUlRFRHxQUk9URUNURUR8ICkgLyB7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKCRORiwvXihcLnxfX3Npbml0fF9fc3Rlcm18X19bMC05XStfXykvKSkgewotICAgICAgICAgICAgICAgIHByaW50ICRORiBWWyQoTkYtMSldCis+ICIkb3V0X3RtcCIKKworIyBDb2xsZWN0IHN5bWJvbHMgZXhwb3J0ZWQgZnJvbSBhbGwgb2JqZWN0IGZpbGVzLgoraWYgdGVzdCAteiAiJG5vX29iamVjdHMiOyB0aGVuCisgICAgZm9yIGYgaW4gIiRAIjsgZG8KKyAgICAgICAgZHVtcCAtdG92IC1YIDMyXzY0ICIkZiIgfAorICAgICAgICBhd2sgJworICAgICAgICAgICAgQkVHSU4geworICAgICAgICAgICAgICAgIFZbIkVYUE9SVEVEIl09IiBleHBvcnQiCisgICAgICAgICAgICAgICAgVlsiUFJPVEVDVEVEIl09IiBwcm90ZWN0ZWQiCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAnCi1kb25lID4gIiRvdXRfdG1wIgorICAgICAgICAgICAgL15cW1swLTldK1xdXHRtICtbXiBdKyArXC4odGV4dHxkYXRhfGJzcykgK1teIF0rICsoZXh0ZXJufHdlYWspICsoRVhQT1JURUR8UFJPVEVDVEVEfCApIC8geworICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJE5GLC9eKFwufF9fc2luaXR8X19zdGVybXxfX1swLTldK19fKS8pKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICRORiBWWyQoTkYtMSldCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAnCisgICAgZG9uZSA+PiAiJG91dF90bXAiCitmaQogCiAjIEdlbmVyYXRlIHRoZSBleHBvcnQvaW1wb3J0IGZpbGUuCiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtQ2xhbmcuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtQ2xhbmcuY21ha2UKaW5kZXggODQ3MTc4Zi4uMTYwZWFkYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUNsYW5nLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1DbGFuZy5jbWFrZQpAQCAtMjQsNiArMjQsMTQgQEAKICAgcmV0dXJuKCkKIGVuZGlmKCkKIAorIyBOYXRpdmVseSBjb21waWxpbmcgb24gYW4gQW5kcm9pZCBob3N0IGRvZXNuJ3QgdXNlIHRoZSBOREsgY3Jvc3MtY29tcGlsYXRpb24KKyMgdG9vbHMuCitpZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJBbmRyb2lkIikKKyAgbWFjcm8oX19hbmRyb2lkX2NvbXBpbGVyX2NsYW5nIGxhbmcpCisgIGVuZG1hY3JvKCkKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKwogaW5jbHVkZShQbGF0Zm9ybS9BbmRyb2lkLUNvbW1vbikKIAogIyBUaGUgTkRLIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uIGZpbGVzIGF0OgpAQCAtNDUsNCArNTMsNyBAQAogICAgIGVuZGlmKCkKICAgICBsaXN0KEFQUEVORCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1BSRURFRklORVNfQ09NTUFORCAiLS10YXJnZXQ9JHtDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1RBUkdFVH0iKQogICBlbmRpZigpCisgIGlmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgICBzZXQoX0FORFJPSURfU1RMX05PU1RETElCWFggMSkKKyAgZW5kaWYoKQogZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUNvbW1vbi5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1Db21tb24uY21ha2UKaW5kZXggMWFmZmNkMC4uNTgxZmRlNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUNvbW1vbi5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtQ29tbW9uLmNtYWtlCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICBtYWNybyhfX2FuZHJvaWRfc3RsIGxhbmcpCiAgICAgICAgICMgRklYTUU6IEFkZCBhIHdheSB0byBhZGQgcHJvamVjdC13aWRlIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGUtb25seSBmbGFncy4KICAgICAgICAgc2V0KENNQUtFX0NYWF9DT01QSUxFX09CSkVDVAotICAgICAgICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiAtbm9zdGRpbmMrKyIpCisgICAgICAgICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4gLW5vc3RkaW5jKysiKQogICAgICAgICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fU1RBTkRBUkRfTElCUkFSSUVTICIgLW5vc3RkbGliKysiKQogICAgICAgZW5kbWFjcm8oKQogICAgIGVsc2UoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLURldGVybWluZS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1EZXRlcm1pbmUuY21ha2UKaW5kZXggZTdjMWI0OC4uMTFhMDUwNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLURldGVybWluZS5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQtRGV0ZXJtaW5lLmNtYWtlCkBAIC03LDggKzcsOCBAQAogCiAjIFN1cHBvcnQgZm9yIE5WSURJQSBOc2lnaHQgVGVncmEgVmlzdWFsIFN0dWRpbyBFZGl0aW9uIHdhcyBwcmV2aW91c2x5CiAjIGltcGxlbWVudGVkIGluIHRoZSBDTWFrZSBWUyBJREUgZ2VuZXJhdG9ycy4gIEF2b2lkIGludGVyZmVyaW5nIHdpdGgKLSMgdGhhdCBmdW5jdGlvbmFsaXR5IGZvciBub3cuICBMYXRlciB3ZSBtYXkgdHJ5IHRvIGludGVncmF0ZSB0aGlzLgotaWYoQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorIyB0aGF0IGZ1bmN0aW9uYWxpdHkgZm9yIG5vdy4KK2lmKENNQUtFX0dFTkVSQVRPUl9QTEFURk9STSBTVFJFUVVBTCAiVGVncmEtQW5kcm9pZCIpCiAgIHJldHVybigpCiBlbmRpZigpCiAKQEAgLTE4LDkgKzE4LDcyIEBACiAgIHJldHVybigpCiBlbmRpZigpCiAKKyMgTmF0aXZlbHkgY29tcGlsaW5nIG9uIGFuIEFuZHJvaWQgaG9zdCBkb2Vzbid0IHVzZSB0aGUgTkRLIGNyb3NzLWNvbXBpbGF0aW9uCisjIHRvb2xzLgoraWYoQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBTVFJFUVVBTCAiQW5kcm9pZCIpCisgIHJldHVybigpCitlbmRpZigpCisKIGNtYWtlX3BvbGljeShQVVNIKQogY21ha2VfcG9saWN5KFNFVCBDTVAwMDU3IE5FVykgIyBpZiBJTl9MSVNUCiAKKyMgSWYgdXNpbmcgQW5kcm9pZCB0b29scyBmb3IgVmlzdWFsIFN0dWRpbywgY29tcGlsZSBhIHNhbXBsZSBwcm9qZWN0IHRvIGdldCB0aGUKKyMgc3lzcm9vdC4KK2lmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgaWYoTk9UIENNQUtFX1NZU1JPT1QpCisgICAgc2V0KHZjeF9wbGF0Zm9ybSAke0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STX0pCisgICAgaWYoQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8gMVs0NV0iKQorICAgICAgc2V0KHZjeF9zeXNyb290X3ZhciAiU3lzcm9vdCIpCisgICAgZWxzZSgpCisgICAgICBzZXQodmN4X3N5c3Jvb3RfdmFyICJTeXNyb290TGluayIpCisgICAgZW5kaWYoKQorICAgIGlmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIDE0IikKKyAgICAgIHNldCh2Y3hfcmV2aXNpb24gIjIuMCIpCisgICAgZWxzZWlmKENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIDFbNTZdIikKKyAgICAgIHNldCh2Y3hfcmV2aXNpb24gIjMuMCIpCisgICAgZWxzZSgpCisgICAgICBzZXQodmN4X3JldmlzaW9uICIiKQorICAgIGVuZGlmKCkKKyAgICBjb25maWd1cmVfZmlsZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC9WQ1hQcm9qSW5zcGVjdC52Y3hwcm9qLmluCisgICAgICAke0NNQUtFX1BMQVRGT1JNX0lORk9fRElSfS9WQ1hQcm9qSW5zcGVjdC52Y3hwcm9qIEBPTkxZKQorICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgIENPTU1BTkQgIiR7Q01BS0VfVlNfTVNCVUlMRF9DT01NQU5EfSIgIlZDWFByb2pJbnNwZWN0LnZjeHByb2oiCisgICAgICAgICIvcDpDb25maWd1cmF0aW9uPURlYnVnIiAiL3A6UGxhdGZvcm09JHt2Y3hfcGxhdGZvcm19IgorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9QTEFURk9STV9JTkZPX0RJUn0KKyAgICAgIE9VVFBVVF9WQVJJQUJMRSBWQ1hQUk9KX0lOU1BFQ1RfT1VUUFVUCisgICAgICBFUlJPUl9WQVJJQUJMRSBWQ1hQUk9KX0lOU1BFQ1RfT1VUUFVUCisgICAgICBSRVNVTFRfVkFSSUFCTEUgVkNYUFJPSl9JTlNQRUNUX1JFU1VMVAorICAgICAgKQorICAgIGlmKE5PVCBDTUFLRV9TWVNST09UIEFORCBWQ1hQUk9KX0lOU1BFQ1RfT1VUUFVUIE1BVENIRVMgIkNNQUtFX1NZU1JPT1Q9KFteJVxyXG5dKylbXHJcbl0iKQorICAgICAgIyBTdHJpcCBWUyBkaWFnbm9zdGljIG91dHB1dCBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiIFxcKFRhc2tJZDpbMC05XSpcXCkkIiAiIiBfc3lzcm9vdCAiJHtDTUFLRV9NQVRDSF8xfSIpCisgICAgICBpZihFWElTVFMgIiR7X3N5c3Jvb3R9IikKKyAgICAgICAgZmlsZShUT19DTUFLRV9QQVRIICIke19zeXNyb290fSIgQ01BS0VfU1lTUk9PVCkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgICAgaWYoVkNYUFJPSl9JTlNQRUNUX1JFU1VMVCkKKyAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKKyAgICAgICAgIkRldGVybWluaW5nIHRoZSBzeXNyb290IGZvciB0aGUgQW5kcm9pZCBOREsgZmFpbGVkLgorVGhlIG91dHB1dCB3YXM6Ciske1ZDWFBST0pfSU5TUEVDVF9SRVNVTFR9Ciske1ZDWFBST0pfSU5TUEVDVF9PVVRQVVR9CisKKyIpCisgICAgZWxzZSgpCisgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICAgICAiRGV0ZXJtaW5pbmcgdGhlIHN5c3Jvb3QgZm9yIHRoZSBBbmRyb2lkIE5ESyBzdWNjZWVkZWQuCitUaGUgb3V0cHV0IHdhczoKKyR7VkNYUFJPSl9JTlNQRUNUX1JFU1VMVH0KKyR7VkNYUFJPSl9JTlNQRUNUX09VVFBVVH0KKworIikKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0FORFJPSURfTkRLX1RPT0xDSEFJTl9WRVJTSU9OKQorICAgIHNldChDTUFLRV9BTkRST0lEX05ES19UT09MQ0hBSU5fVkVSU0lPTiAiY2xhbmciKQorICBlbmRpZigpCitlbmRpZigpCisKICMgSWYgdGhlIHVzZXIgcHJvdmlkZWQgQ01BS0VfU1lTUk9PVCBmb3IgdXMsIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSBpdC4KIHNldChfQU5EUk9JRF9TWVNST09UX05ESyAiIikKIHNldChfQU5EUk9JRF9TWVNST09UX0FQSSAiIikKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC1Jbml0aWFsaXplLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUluaXRpYWxpemUuY21ha2UKaW5kZXggYTVkMjgyMC4uNTAxOWMyOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUluaXRpYWxpemUuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLUluaXRpYWxpemUuY21ha2UKQEAgLTYsNyArNiw3IEBACiAKICMgU3VwcG9ydCBmb3IgTlZJRElBIE5zaWdodCBUZWdyYSBWaXN1YWwgU3R1ZGlvIEVkaXRpb24gd2FzIHByZXZpb3VzbHkKICMgaW1wbGVtZW50ZWQgaW4gdGhlIENNYWtlIFZTIElERSBnZW5lcmF0b3JzLiAgQXZvaWQgaW50ZXJmZXJpbmcgd2l0aAotIyB0aGF0IGZ1bmN0aW9uYWxpdHkgZm9yIG5vdy4gIExhdGVyIHdlIG1heSB0cnkgdG8gaW50ZWdyYXRlIHRoaXMuCisjIHRoYXQgZnVuY3Rpb25hbGl0eSBmb3Igbm93LgogaWYoQ01BS0VfVlNfUExBVEZPUk1fTkFNRSBTVFJFUVVBTCAiVGVncmEtQW5kcm9pZCIpCiAgIHJldHVybigpCiBlbmRpZigpCkBAIC0yNCw2ICsyNCwxMiBAQAogICByZXR1cm4oKQogZW5kaWYoKQogCisjIE5hdGl2ZWx5IGNvbXBpbGluZyBvbiBhbiBBbmRyb2lkIGhvc3QgZG9lc24ndCB1c2UgdGhlIE5ESyBjcm9zcy1jb21waWxhdGlvbgorIyB0b29scy4KK2lmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkFuZHJvaWQiKQorICByZXR1cm4oKQorZW5kaWYoKQorCiBpZihOT1QgQ01BS0VfU1lTUk9PVCkKICAgaWYoQ01BS0VfQU5EUk9JRF9OREspCiAgICAgc2V0KENNQUtFX1NZU1JPT1QgIiR7Q01BS0VfQU5EUk9JRF9OREt9L3BsYXRmb3Jtcy9hbmRyb2lkLSR7Q01BS0VfU1lTVEVNX1ZFUlNJT059L2FyY2gtJHtDTUFLRV9BTkRST0lEX0FSQ0h9IikKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC5jbWFrZQppbmRleCBmMDhmODQxLi44ZmZhMWIyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkLmNtYWtlCkBAIC0yLDYgKzIsMTEgQEAKIAogc2V0KEFORFJPSUQgMSkKIAorIyBOYXRpdmVseSBjb21waWxpbmcgb24gYW4gQW5kcm9pZCBob3N0IGRvZXNuJ3QgbmVlZCB0aGVzZSBmbGFncyB0byBiZSByZXNldC4KK2lmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkFuZHJvaWQiKQorICByZXR1cm4oKQorZW5kaWYoKQorCiAjIENvbnZlbnRpb25hbGx5IEFuZHJvaWQgZG9lcyBub3QgdXNlIHZlcnNpb25lZCBzb25hbWUKICMgQnV0IGluIG1vZGVybiB2ZXJzaW9ucyBpdCBpcyBhY2NlcHRhYmxlCiBpZihOT1QgREVGSU5FRCBDTUFLRV9QTEFURk9STV9OT19WRVJTSU9ORURfU09OQU1FKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkL0RldGVybWluZS1Db21waWxlci1OREsuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvRGV0ZXJtaW5lLUNvbXBpbGVyLU5ESy5jbWFrZQppbmRleCBmNTZlMWQ1Li5hNGQ2N2M0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvRGV0ZXJtaW5lLUNvbXBpbGVyLU5ESy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvRGV0ZXJtaW5lLUNvbXBpbGVyLU5ESy5jbWFrZQpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgICAjIFdlIGp1c3QgbWF0Y2hlZCB0aGUgZ2NjIHRvb2xjaGFpbiBuYW1lIHdpdGhvdXQgdmVyc2lvbiBudW1iZXIuICBTYXZlIGl0IGZvciBsYXRlci4KICAgICAgIHNldChfQU5EUk9JRF9UT09MX05BTUVfT05MWSAiJHtDTUFLRV9NQVRDSF8xfSIpCiAgICAgZWxzZWlmKGxpbmUgTUFUQ0hFUyBbW15UT09MQ0hBSU5fUFJFRklYICs6PSArLiovYmluLyhcJFwoVE9PTENIQUlOX05BTUVcKS0pICokXV0pCi0gICAgICAjIFdlIGp1c3QgbWF0Y2hlZCB0aGUgdG9vbGNoYWluIHByZWZpeCB3aXRoIGEgbmFtZSBwbGFjaG9sZGVyLCBzbyBzdWJzdGl0dXRlIGl0LgorICAgICAgIyBXZSBqdXN0IG1hdGNoZWQgdGhlIHRvb2xjaGFpbiBwcmVmaXggd2l0aCBhIG5hbWUgcGxhY2Vob2xkZXIsIHNvIHN1YnN0aXR1dGUgaXQuCiAgICAgICAjIFRoZSBnY2MgdG9vbGNoYWluIG5hbWUgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBleHRyYWN0ZWQgd2l0aG91dCB2ZXJzaW9uIG51bWJlciBmcm9tIGEgVE9PTENIQUlOX05BTUUgbGluZS4KICAgICAgIHN0cmluZyhSRVBMQUNFICIkKFRPT0xDSEFJTl9OQU1FKSIgIiR7X0FORFJPSURfVE9PTF9OQU1FX09OTFl9IiBfQU5EUk9JRF9UT09MX1BSRUZJWCAiJHtDTUFLRV9NQVRDSF8xfSIpCiAgICAgZWxzZWlmKGxpbmUgTUFUQ0hFUyBbW15MTFZNX1ZFUlNJT04gKzo9ICsoWzAtOS5dKykkXV0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvRGV0ZXJtaW5lLUNvbXBpbGVyLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9BbmRyb2lkL0RldGVybWluZS1Db21waWxlci5jbWFrZQppbmRleCA1YzZiOTdiLi5mOWMyZDg5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvRGV0ZXJtaW5lLUNvbXBpbGVyLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC9EZXRlcm1pbmUtQ29tcGlsZXIuY21ha2UKQEAgLTMxLDYgKzMxLDE2IEBACiAgIHNldChfQU5EUk9JRF9IT1NUX0VYVCAiIikKIGVsc2VpZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJXaW5kb3dzIikKICAgc2V0KF9BTkRST0lEX0hPU1RfRVhUICIuZXhlIikKK2Vsc2VpZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJBbmRyb2lkIikKKyAgIyBOYXRpdmVseSBjb21waWxpbmcgb24gYW4gQW5kcm9pZCBob3N0IGRvZXNuJ3QgdXNlIHRoZSBOREsgY3Jvc3MtY29tcGlsYXRpb24KKyAgIyB0b29scy4KKyAgbWFjcm8oX19hbmRyb2lkX2RldGVybWluZV9jb21waWxlciBsYW5nKQorICAgICMgRG8gbm90aGluZworICBlbmRtYWNybygpCisgIGlmKE5PVCBDTUFLRV9DWFhfQ09NUElMRVJfTkFNRVMpCisgICAgc2V0KENNQUtFX0NYWF9DT01QSUxFUl9OQU1FUyBjKyspCisgIGVuZGlmKCkKKyAgcmV0dXJuKCkKIGVsc2UoKQogICBtZXNzYWdlKEZBVEFMX0VSUk9SICJBbmRyb2lkOiBCdWlsZHMgaG9zdGVkIG9uICcke0NNQUtFX0hPU1RfU1lTVEVNX05BTUV9JyBub3Qgc3VwcG9ydGVkLiIpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvVkNYUHJvakluc3BlY3QudmN4cHJvai5pbiBiL01vZHVsZXMvUGxhdGZvcm0vQW5kcm9pZC9WQ1hQcm9qSW5zcGVjdC52Y3hwcm9qLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTlkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0FuZHJvaWQvVkNYUHJvakluc3BlY3QudmN4cHJvai5pbgpAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfEB2Y3hfcGxhdGZvcm1AIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPkB2Y3hfcGxhdGZvcm1APC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57MTRENDQ3NzItRUNGNy00N0JELTlFMjktQkM2MkZBRjk0MEE1fTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+VkNYUHJvakluc3BlY3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+QW5kcm9pZDwvS2V5d29yZD4KKyAgICA8QXBwbGljYXRpb25UeXBlPkFuZHJvaWQ8L0FwcGxpY2F0aW9uVHlwZT4KKyAgICA8QXBwbGljYXRpb25UeXBlUmV2aXNpb24+QHZjeF9yZXZpc2lvbkA8L0FwcGxpY2F0aW9uVHlwZVJldmlzaW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8QHZjeF9wbGF0Zm9ybUAnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICAgIDxMaW5rSW5jcmVtZW50YWwgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xAdmN4X3BsYXRmb3JtQCciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xAdmN4X3BsYXRmb3JtQCciPgorICAgIDxQb3N0QnVpbGRFdmVudD4KKyAgICAgIDxDb21tYW5kPiU0MGVjaG8gQ01BS0VfU1lTUk9PVD0kKEB2Y3hfc3lzcm9vdF92YXJAKTwvQ29tbWFuZD4KKyAgICA8L1Bvc3RCdWlsZEV2ZW50PgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0FwcGxlLUdOVS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQXBwbGUtR05VLmNtYWtlCmluZGV4IDBlYjgxNjguLjk1NzI3MzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQXBwbGUtR05VLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQXBwbGUtR05VLmNtYWtlCkBAIC0xOSwxNyArMTksMTcgQEAKIG1hY3JvKGNtYWtlX2dudV9zZXRfc3lzcm9vdF9mbGFnIGxhbmcpCiAgIGlmKE5PVCBERUZJTkVEIENNQUtFXyR7bGFuZ31fU1lTUk9PVF9GTEFHKQogICAgIHNldChfZG9jICIke2xhbmd9IGNvbXBpbGVyIGhhcyAtaXN5c3Jvb3QiKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyB3aGV0aGVyICR7X2RvY30iKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNraW5nIHdoZXRoZXIgJHtfZG9jfSIpCiAgICAgZXhlY3V0ZV9wcm9jZXNzKAogICAgICAgQ09NTUFORCAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJ9ICItdiIgIi0taGVscCIKICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfZ2NjX2hlbHAKICAgICAgIEVSUk9SX1ZBUklBQkxFIF9nY2NfaGVscAogICAgICAgKQogICAgIGlmKCIke19nY2NfaGVscH0iIE1BVENIRVMgImlzeXNyb290IikKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyB3aGV0aGVyICR7X2RvY30gLSB5ZXMiKQorICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJ5ZXMiKQogICAgICAgc2V0KENNQUtFXyR7bGFuZ31fU1lTUk9PVF9GTEFHICItaXN5c3Jvb3QiKQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHdoZXRoZXIgJHtfZG9jfSAtIG5vIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm8iKQogICAgICAgc2V0KENNQUtFXyR7bGFuZ31fU1lTUk9PVF9GTEFHICIiKQogICAgIGVuZGlmKCkKICAgICBzZXQoQ01BS0VfJHtsYW5nfV9TWVNST09UX0ZMQUdfQ09ERSAic2V0KENNQUtFXyR7bGFuZ31fU1lTUk9PVF9GTEFHIFwiJHtDTUFLRV8ke2xhbmd9X1NZU1JPT1RfRkxBR31cIikiKQpAQCAtMzksMTcgKzM5LDE3IEBACiBtYWNybyhjbWFrZV9nbnVfc2V0X29zeF9kZXBsb3ltZW50X3RhcmdldF9mbGFnIGxhbmcpCiAgIGlmKE5PVCBERUZJTkVEIENNQUtFXyR7bGFuZ31fT1NYX0RFUExPWU1FTlRfVEFSR0VUX0ZMQUcpCiAgICAgc2V0KF9kb2MgIiR7bGFuZ30gY29tcGlsZXIgc3VwcG9ydHMgT1NYIGRlcGxveW1lbnQgdGFyZ2V0IGZsYWciKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyB3aGV0aGVyICR7X2RvY30iKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNraW5nIHdoZXRoZXIgJHtfZG9jfSIpCiAgICAgZXhlY3V0ZV9wcm9jZXNzKAogICAgICAgQ09NTUFORCAke0NNQUtFXyR7bGFuZ31fQ09NUElMRVJ9ICItdiIgIi0taGVscCIKICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfZ2NjX2hlbHAKICAgICAgIEVSUk9SX1ZBUklBQkxFIF9nY2NfaGVscAogICAgICAgKQogICAgIGlmKCIke19nY2NfaGVscH0iIE1BVENIRVMgIm1hY29zeC12ZXJzaW9uLW1pbiIpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgd2hldGhlciAke19kb2N9IC0geWVzIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAieWVzIikKICAgICAgIHNldChDTUFLRV8ke2xhbmd9X09TWF9ERVBMT1lNRU5UX1RBUkdFVF9GTEFHICItbW1hY29zeC12ZXJzaW9uLW1pbj0iKQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHdoZXRoZXIgJHtfZG9jfSAtIG5vIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm8iKQogICAgICAgc2V0KENNQUtFXyR7bGFuZ31fT1NYX0RFUExPWU1FTlRfVEFSR0VUX0ZMQUcgIiIpCiAgICAgZW5kaWYoKQogICAgIHNldChDTUFLRV8ke2xhbmd9X09TWF9ERVBMT1lNRU5UX1RBUkdFVF9GTEFHX0NPREUgInNldChDTUFLRV8ke2xhbmd9X09TWF9ERVBMT1lNRU5UX1RBUkdFVF9GTEFHIFwiJHtDTUFLRV8ke2xhbmd9X09TWF9ERVBMT1lNRU5UX1RBUkdFVF9GTEFHfVwiKSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0JsdWVHZW5lTC5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVMLmNtYWtlCmluZGV4IDA4MmU0NmMuLjBlZDk5NzUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVMLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVMLmNtYWtlCkBAIC0yMywxOCArMjMsMTggQEAKIAogaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MpCiAgIHNldChDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ19DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4gLVdsLC1sZ2NjLC1sYyAtbG5zc19maWxlcyAtbG5zc19kbnMgLWxyZXNvbHYiKQorICAgICI8Q01BS0VfQ19DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxnY2MsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCiBlbHNlKCkKICAgIyB3aGVuIHVzaW5nIElCTSB4bGMgd2UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBsaW5rIHRvIC1sZ2NjCiAgIHNldChDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ19DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4gLVdsLC1sYyAtbG5zc19maWxlcyAtbG5zc19kbnMgLWxyZXNvbHYiKQorICAgICI8Q01BS0VfQ19DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCiBlbmRpZigpCiAKIGlmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWCkKICAgc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxzdGRjKyssLWxnY2MsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCisgICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IC1XbCwtcmVsYXggPEZMQUdTPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtV2wsLWxzdGRjKyssLWxnY2MsLWxjIC1sbnNzX2ZpbGVzIC1sbnNzX2RucyAtbHJlc29sdiIpCiBlbHNlKCkKICAgIyB3aGVuIHVzaW5nIHRoZSBJQk0geGxDIHdlIHByb2JhYmx5IGRvbid0IHdhbnQgdG8gbGluayB0byAtbGdjYwogICBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAtV2wsLXJlbGF4IDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1XbCwtbHN0ZGMrKywtbGMgLWxuc3NfZmlsZXMgLWxuc3NfZG5zIC1scmVzb2x2IikKKyAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gLVdsLC1yZWxheCA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1XbCwtbHN0ZGMrKywtbGMgLWxuc3NfZmlsZXMgLWxuc3NfZG5zIC1scmVzb2x2IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVQLWJhc2UuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0JsdWVHZW5lUC1iYXNlLmNtYWtlCmluZGV4IGZlOTViNDIuLjcwOTVkZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVQLWJhc2UuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZVAtYmFzZS5jbWFrZQpAQCAtOTcsNyArOTcsNyBAQAogICBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfUlVOVElNRV8ke2xhbmd9X0ZMQUdfU0VQICAiOiIpICMgOiBvciBlbXB0eQogCiAgIHNldChCR1BfJHtsYW5nfV9ERUZBVUxUX0VYRV9GTEFHUwotICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLVdsLC1yZWxheCAke0JHUF8ke2xhbmd9X0RZTkFNSUNfRVhFX0ZMQUdTfSAke0JHUF8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTfSIpCiBlbmRtYWNybygpCkBAIC0xMDgsNyArMTA4LDcgQEAKICMKIG1hY3JvKF9fQmx1ZUdlbmVQX3NldF9zdGF0aWNfZmxhZ3MgY29tcGlsZXJfaWQgbGFuZykKICAgc2V0KEJHUF8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTCi0gICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxGTEFHUz4gPENNQUtFXyR7bGFuZ31fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFCiAgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtV2wsLXJlbGF4ICR7QkdQXyR7bGFuZ31fREVGQVVMVF9FWEVfRkxBR1N9IikKIGVuZG1hY3JvKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVRLWJhc2UuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0JsdWVHZW5lUS1iYXNlLmNtYWtlCmluZGV4IDVlNTZkOGUuLjk0Y2IwYTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vQmx1ZUdlbmVRLWJhc2UuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9CbHVlR2VuZVEtYmFzZS5jbWFrZQpAQCAtMTAxLDcgKzEwMSw3IEBACiAgIGZvcmVhY2goZGlyICR7Q01BS0VfU1lTVEVNX0lOQ0xVREVfUEFUSH0pCiAgICAgc3RyaW5nKEFQUEVORCBCR1FfU1lTVEVNX0lOQ0xVREVTICIgLUkke2Rpcn0iKQogICBlbmRmb3JlYWNoKCkKLSAgc2V0KENNQUtFX0NfQ09NUElMRV9PQkpFQ1QgICAiPENNQUtFX0NfQ09NUElMRVI+ICAgPERFRklORVM+ICR7QkdRX1NZU1RFTV9JTkNMVURFU30gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKKyAgc2V0KENNQUtFX0NfQ09NUElMRV9PQkpFQ1QgICAiPENNQUtFX0NfQ09NUElMRVI+IDxERUZJTkVTPiAke0JHUV9TWVNURU1fSU5DTFVERVN9IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiAgIHNldChDTUFLRV9DWFhfQ09NUElMRV9PQkpFQ1QgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxERUZJTkVTPiAke0JHUV9TWVNURU1fSU5DTFVERVN9IDxJTkNMVURFUz4gPEZMQUdTPiAtbyA8T0JKRUNUPiAtYyA8U09VUkNFPiIpCiAKICAgIwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKICAgIyBGb3IgZHluYW1pYyBleGVjdXRhYmxlcywgbmVlZCB0byBwcm92aWRlIHNwZWNpYWwgQkcvUSBhcmd1bWVudHMuCiAgIHNldChCR1FfJHtsYW5nfV9ERUZBVUxUX0VYRV9GTEFHUwotICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLVdsLC1yZWxheCAke0JHUV8ke2xhbmd9X0RZTkFNSUNfRVhFX0ZMQUdTfSAke0JHUV8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTfSIpCiBlbmRtYWNybygpCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogICAjIEZvciBzdGF0aWMgZXhlY3V0YWJsZXMsIHVzZSBkZWZhdWx0IGxpbmsgc2V0dGluZ3MuCiAgIHNldChCR1FfJHtsYW5nfV9ERUZBVUxUX0VYRV9GTEFHUwotICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLVdsLC1yZWxheCAke0JHUV8ke2xhbmd9X0RFRkFVTFRfRVhFX0ZMQUdTfSIpCiBlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0NZR1dJTi1HTlUuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0NZR1dJTi1HTlUuY21ha2UKaW5kZXggY2E5MDcxMi4uNGZhMTRjZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9DWUdXSU4tR05VLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vQ1lHV0lOLUdOVS5jbWFrZQpAQCAtMjIsNyArMjIsNyBAQAogICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKICAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfJHtsYW5nfV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9DUkVBVEVfJHtsYW5nfV9GTEFHUz4gLW8gPFRBUkdFVD4gLVdsLC0tb3V0LWltcGxpYiw8VEFSR0VUX0lNUExJQj4gJHtDTUFLRV9HTlVMRF9JTUFHRV9WRVJTSU9OfSA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIpCiAgIHNldChDTUFLRV8ke2xhbmd9X0xJTktfRVhFQ1VUQUJMRQotICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiAtV2wsLS1vdXQtaW1wbGliLDxUQVJHRVRfSU1QTElCPiAke0NNQUtFX0dOVUxEX0lNQUdFX1ZFUlNJT059IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IC1XbCwtLW91dC1pbXBsaWIsPFRBUkdFVF9JTVBMSUI+ICR7Q01BS0VfR05VTERfSU1BR0VfVkVSU0lPTn0gPExJTktfTElCUkFSSUVTPiIpCiAKICAgICMgTm8gLWZQSUMgb24gY3lnd2luCiAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19QSUMgIiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLUMuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLUMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3MWM4NAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vRE9TLU9wZW5XYXRjb20tQy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFBsYXRmb3JtL0RPUy1PcGVuV2F0Y29tKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9ET1MtT3BlbldhdGNvbS1DWFguY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLUNYWC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjcxYzg0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9ET1MtT3BlbldhdGNvbS1DWFguY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShQbGF0Zm9ybS9ET1MtT3BlbldhdGNvbSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vRE9TLU9wZW5XYXRjb20uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YzQ1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0RPUy1PcGVuV2F0Y29tLmNtYWtlCkBAIC0wLDAgKzEsMjggQEAKKworIyBUaGlzIG1vZHVsZSBpcyBzaGFyZWQgYnkgbXVsdGlwbGUgbGFuZ3VhZ2VzOyB1c2UgaW5jbHVkZSBibG9ja2VyLgoraW5jbHVkZV9ndWFyZCgpCisKK3NldChDTUFLRV9CVUlMRF9UWVBFX0lOSVQgRGVidWcpCisKK2lmKERFRklORUQgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBBTkQgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAiSTg2IikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gZG9zIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gZG9zIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gZG9zIikKK2Vsc2UoKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBkb3M0ZyIpCisgIHN0cmluZyhBUFBFTkQgQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19JTklUICIgc3lzdGVtIGRvczRnIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gZG9zNGciKQorZW5kaWYoKQorCitzZXQoQ01BS0VfQ19DT01QSUxFX09QVElPTlNfRExMICItYmQiKSAjIE5vdGU6IFRoaXMgdmFyaWFibGUgaXMgYSAnOycgc2VwYXJhdGVkIGxpc3QKK3NldChDTUFLRV9TSEFSRURfTElCUkFSWV9DX0ZMQUdTICItYmQiKSAjIC4uLiB3aGlsZSB0aGlzIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZy4KKworc3RyaW5nKEFQUEVORCBDTUFLRV9DX0ZMQUdTX0lOSVQgIiAtYnQ9ZG9zIikKK3N0cmluZyhBUFBFTkQgQ01BS0VfQ1hYX0ZMQUdTX0lOSVQgIiAtYnQ9ZG9zIC14cyIpCisKK2lmKE5PVCBDTUFLRV9DX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgIHNldChDTUFLRV9DX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMgJEVOVntXQVRDT019L2gpCitlbmRpZigpCitpZihOT1QgQ01BS0VfQ1hYX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUyAkRU5We1dBVENPTX0vaCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vRE9TLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9ET1MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5NTkzNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vRE9TLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK3NldChET1MgMSkKKworc2V0KENNQUtFX1NUQVRJQ19MSUJSQVJZX1BSRUZJWCAiIikKK3NldChDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVggIi5saWIiKQorc2V0KENNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWCAiIikKK3NldChDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVggIi5kbGwiKQorc2V0KENNQUtFX0lNUE9SVF9MSUJSQVJZX1BSRUZJWCAiIikKK3NldChDTUFLRV9JTVBPUlRfTElCUkFSWV9TVUZGSVggIi5saWIiKQorc2V0KENNQUtFX0VYRUNVVEFCTEVfU1VGRklYICIuZXhlIikKK3NldChDTUFLRV9MSU5LX0xJQlJBUllfU1VGRklYICIubGliIikKK3NldChDTUFLRV9ETF9MSUJTICIiKQorCitzZXQoQ01BS0VfRklORF9MSUJSQVJZX1BSRUZJWEVTICIiKQorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9TVUZGSVhFUyAiLmxpYiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0Rhcndpbi1Jbml0aWFsaXplLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9EYXJ3aW4tSW5pdGlhbGl6ZS5jbWFrZQppbmRleCAyZDc5N2Y2Li5kMDg3NDEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL0Rhcndpbi1Jbml0aWFsaXplLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLUluaXRpYWxpemUuY21ha2UKQEAgLTYyLDQ1ICs2MiwzNiBAQAogICAjIEZpbmQgaW5zdGFsbGVkIFNES3MgaW4gZWl0aGVyIFhjb2RlLTQuMysgb3IgcHJlLTQuMyBTREtzIGRpcmVjdG9yeS4KICAgc2V0KF9DTUFLRV9PU1hfU0RLU19ESVIgIiIpCiAgIGlmKE9TWF9ERVZFTE9QRVJfUk9PVCkKLSAgICBmb3JlYWNoKGQgUGxhdGZvcm1zL01hY09TWC5wbGF0Zm9ybS9EZXZlbG9wZXIvU0RLcyBTREtzKQotICAgICAgZmlsZShHTE9CIF9DTUFLRV9PU1hfU0RLUyAke09TWF9ERVZFTE9QRVJfUk9PVH0vJHtkfS8qKQorICAgIGZvcmVhY2goX2QgUGxhdGZvcm1zL01hY09TWC5wbGF0Zm9ybS9EZXZlbG9wZXIvU0RLcyBTREtzKQorICAgICAgZmlsZShHTE9CIF9DTUFLRV9PU1hfU0RLUyAke09TWF9ERVZFTE9QRVJfUk9PVH0vJHtfZH0vKikKICAgICAgIGlmKF9DTUFLRV9PU1hfU0RLUykKLSAgICAgICAgc2V0KF9DTUFLRV9PU1hfU0RLU19ESVIgJHtPU1hfREVWRUxPUEVSX1JPT1R9LyR7ZH0pCisgICAgICAgIHNldChfQ01BS0VfT1NYX1NES1NfRElSICR7T1NYX0RFVkVMT1BFUl9ST09UfS8ke19kfSkKICAgICAgICAgYnJlYWsoKQogICAgICAgZW5kaWYoKQogICAgIGVuZGZvcmVhY2goKQogICBlbmRpZigpCiAKICAgaWYoX0NNQUtFX09TWF9TREtTX0RJUikKLSAgICAjIFNlbGVjdCBTREsgZm9yIGN1cnJlbnQgT1NYIHZlcnNpb24gYWNjb3VudGluZyBmb3IgdGhlIGtub3duCi0gICAgIyBzcGVjaWFsbHkgbmFtZWQgU0RLcy4KLSAgICBzZXQoX0NNQUtFX09TWF9TREtTX1ZFUl9TVUZGSVhfMTAuNCAidSIpCi0gICAgc2V0KF9DTUFLRV9PU1hfU0RLU19WRVJfU1VGRklYXzEwLjMgIi45IikKLQotICAgICMgZmluZCB0aGUgbGF0ZXN0IFNESworICAgICMgRmluZCB0aGUgbGF0ZXN0IFNESyBhcyByZWNvbW1lbmRlZCBieSBBcHBsZSAoVGVjaG5pY2FsIFEmQSBRQTE4MDYpCiAgICAgc2V0KF9DTUFLRV9PU1hfTEFURVNUX1NES19WRVJTSU9OICIwLjAiKQogICAgIGZpbGUoR0xPQiBfQ01BS0VfT1NYX1NES1MgUkVMQVRJVkUgIiR7X0NNQUtFX09TWF9TREtTX0RJUn0iICIke19DTUFLRV9PU1hfU0RLU19ESVJ9L01hY09TWCouc2RrIikKICAgICBmb3JlYWNoKF9TREsgJHtfQ01BS0VfT1NYX1NES1N9KQotICAgICAgaWYoX1NESyBNQVRDSEVTICJNYWNPU1goWzAtOV0rXFwuWzAtOV0rKVteL10qXFwuc2RrIiBBTkQgQ01BS0VfTUFUQ0hfMSBWRVJTSU9OX0dSRUFURVIgJHtfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTn0pCisgICAgICBpZihJU19ESVJFQ1RPUlkgIiR7X0NNQUtFX09TWF9TREtTX0RJUn0vJHtfU0RLfSIKKyAgICAgICAgIEFORCBfU0RLIE1BVENIRVMgIk1hY09TWChbMC05XStcXC5bMC05XSspW14vXSpcXC5zZGsiCisgICAgICAgICBBTkQgQ01BS0VfTUFUQ0hfMSBWRVJTSU9OX0dSRUFURVIgJHtfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTn0pCiAgICAgICAgIHNldChfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTiAiJHtDTUFLRV9NQVRDSF8xfSIpCiAgICAgICBlbmRpZigpCiAgICAgZW5kZm9yZWFjaCgpCiAKLSAgICAjIHBpY2sgYW4gU0RLIHRoYXQgd29ya3MKLSAgICBzZXQoX0NNQUtFX09TWF9TWVNST09UX0RFRkFVTFQpCi0gICAgZm9yZWFjaCh2ZXIgJHtDTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVR9Ci0gICAgICAgICAgICAgICAgJHtfQ1VSUkVOVF9PU1hfVkVSU0lPTn0KLSAgICAgICAgICAgICAgICAke19DTUFLRV9PU1hfTEFURVNUX1NES19WRVJTSU9OfSkKLSAgICAgIHNldChfQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUICR7dmVyfSkKLSAgICAgIHNldChfQ01BS0VfT1NYX1NES1NfVkVSICR7X0NNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVH0ke19DTUFLRV9PU1hfU0RLU19WRVJfU1VGRklYXyR7X0NNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVH19KQotICAgICAgc2V0KF9DTUFLRV9PU1hfU1lTUk9PVF9DSEVDSyAiJHtfQ01BS0VfT1NYX1NES1NfRElSfS9NYWNPU1gke19DTUFLRV9PU1hfU0RLU19WRVJ9LnNkayIpCi0gICAgICBpZihJU19ESVJFQ1RPUlkgIiR7X0NNQUtFX09TWF9TWVNST09UX0NIRUNLfSIpCi0gICAgICAgIHNldChfQ01BS0VfT1NYX1NZU1JPT1RfREVGQVVMVCAiJHtfQ01BS0VfT1NYX1NZU1JPT1RfQ0hFQ0t9IikKLSAgICAgICAgYnJlYWsoKQotICAgICAgZW5kaWYoKQotICAgIGVuZGZvcmVhY2goKQorICAgIGlmKE5PVCBfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTiBTVFJFUVVBTCAiMC4wIikKKyAgICAgIHNldChfQ01BS0VfT1NYX1NZU1JPT1RfREVGQVVMVCAiJHtfQ01BS0VfT1NYX1NES1NfRElSfS9NYWNPU1gke19DTUFLRV9PU1hfTEFURVNUX1NES19WRVJTSU9OfS5zZGsiKQorICAgIGVsc2UoKQorICAgICAgbWVzc2FnZShXQVJOSU5HICJDb3VsZCBub3QgZmluZCBhbnkgdmFsaWQgU0RLcyBpbiAke19DTUFLRV9PU1hfU0RLU19ESVJ9IikKKyAgICBlbmRpZigpCiAKLSAgICBpZihOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcgQU5EIE5PVCBDTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVQgQU5EIF9DVVJSRU5UX09TWF9WRVJTSU9OIFZFUlNJT05fTEVTUyBfQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUKQorICAgIGlmKE5PVCBDTUFLRV9DUk9TU0NPTVBJTElORyBBTkQgTk9UIENNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgIEFORCAoX0NVUlJFTlRfT1NYX1ZFUlNJT04gVkVSU0lPTl9MRVNTIF9DTUFLRV9PU1hfTEFURVNUX1NES19WRVJTSU9OCisgICAgICAgICAgICBPUiBfQ01BS0VfT1NYX0xBVEVTVF9TREtfVkVSU0lPTiBTVFJFUVVBTCAiMC4wIikpCiAgICAgICBzZXQoQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUICR7X0NVUlJFTlRfT1NYX1ZFUlNJT059IENBQ0hFIFNUUklORwogICAgICAgICAiTWluaW11bSBPUyBYIHZlcnNpb24gdG8gdGFyZ2V0IGZvciBkZXBsb3ltZW50IChhdCBydW50aW1lKTsgbmV3ZXIgQVBJcyB3ZWFrIGxpbmtlZC4gU2V0IHRvIGVtcHR5IHN0cmluZyBmb3IgZGVmYXVsdCB2YWx1ZS4iIEZPUkNFKQogICAgIGVuZGlmKCkKQEAgLTExMyw4ICsxMDQsOCBAQAogIyBTZXQgY2FjaGUgdmFyaWFibGUgLSBlbmQgdXNlciBtYXkgY2hhbmdlIHRoaXMgZHVyaW5nIGNjbWFrZSBvciBjbWFrZS1ndWkgY29uZmlndXJlLgogIyBDaG9vc2UgdGhlIHR5cGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUuCiBzZXQoX0NNQUtFX09TWF9TWVNST09UX1RZUEUgU1RSSU5HKQotZm9yZWFjaCh2IENNQUtFX09TWF9TWVNST09UIF9DTUFLRV9PU1hfU1lTUk9PVF9ERUZBVUxUKQotICBpZigieCR7JHt2fX0iIE1BVENIRVMgIi8iKQorZm9yZWFjaChfdiBDTUFLRV9PU1hfU1lTUk9PVCBfQ01BS0VfT1NYX1NZU1JPT1RfREVGQVVMVCkKKyAgaWYoIngkeyR7X3Z9fSIgTUFUQ0hFUyAiLyIpCiAgICAgc2V0KF9DTUFLRV9PU1hfU1lTUk9PVF9UWVBFIFBBVEgpCiAgICAgYnJlYWsoKQogICBlbmRpZigpCkBAIC0xMjIsNyArMTEzLDE2MiBAQAogc2V0KENNQUtFX09TWF9TWVNST09UICIke19DTUFLRV9PU1hfU1lTUk9PVF9ERUZBVUxUfSIgQ0FDSEUgJHtfQ01BS0VfT1NYX1NZU1JPT1RfVFlQRX0KICAgIlRoZSBwcm9kdWN0IHdpbGwgYmUgYnVpbHQgYWdhaW5zdCB0aGUgaGVhZGVycyBhbmQgbGlicmFyaWVzIGxvY2F0ZWQgaW5zaWRlIHRoZSBpbmRpY2F0ZWQgU0RLLiIpCiAKLSMgVHJhbnNmb3JtIHRoZSBjYWNoZWQgdmFsdWUgdG8gc29tZXRoaW5nIHdlIGNhbiB1c2UuCisjIFJlc29sdmVzIHRoZSBTREsgbmFtZSBpbnRvIGEgcGF0aAorZnVuY3Rpb24oX2FwcGxlX3Jlc29sdmVfc2RrX3BhdGggc2RrX25hbWUgcmV0KQorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCB4Y3J1biAtc2RrICR7c2RrX25hbWV9IC0tc2hvdy1zZGstcGF0aAorICAgIE9VVFBVVF9WQVJJQUJMRSBfc3Rkb3V0CisgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKyAgICBFUlJPUl9WQVJJQUJMRSBfc3RkZXJyCisgICAgUkVTVUxUX1ZBUklBQkxFIF9mYWlsZWQKKyAgKQorICBzZXQoJHtyZXR9ICIke19zdGRvdXR9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKF9hcHBsZV9yZXNvbHZlX3N1cHBvcnRlZF9hcmNoc19mb3Jfc2RrX2Zyb21fc3lzdGVtX2xpYiBzZGtfcGF0aCByZXQgcmV0X2ZhaWxlZCkKKyAgIyBEZXRlY3QgdGhlIHN1cHBvcnRlZCBTREsgYXJjaGl0ZWN0dXJlcyBieSBpbnNwZWN0aW5nIHRoZSBtYWluIGxpYlN5c3RlbSBsaWJyYXJ5LgorICBzZXQoY29tbW9uX2xpYl9wcmVmaXggIiR7c2RrX3BhdGh9L3Vzci9saWIvbGliU3lzdGVtIikKKyAgc2V0KHN5c3RlbV9saWJfZHlsaWJfcGF0aCAiJHtjb21tb25fbGliX3ByZWZpeH0uZHlsaWIiKQorICBzZXQoc3lzdGVtX2xpYl90YmRfcGF0aCAiJHtjb21tb25fbGliX3ByZWZpeH0udGJkIikKKworICAjIE5ld2VyIFNES3Mgc2hpcCB0ZXh0IGJhc2VkIGR5bGliIHN0dWIgZmlsZXMgd2hpY2ggY29udGFpbiB0aGUgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlCisgICMgbGlicmFyeSBpbiB0ZXh0IGZvcm0uCisgIGlmKEVYSVNUUyAiJHtzeXN0ZW1fbGliX3RiZF9wYXRofSIpCisgICAgZmlsZShTVFJJTkdTICIke3N5c3RlbV9saWJfdGJkX3BhdGh9IiB0YmRfbGluZXMgUkVHRVggIl5hcmNoczogK1xcWy4rXFxdIikKKyAgICBpZihOT1QgdGJkX2xpbmVzKQorICAgICAgc2V0KCR7cmV0X2ZhaWxlZH0gVFJVRSBQQVJFTlRfU0NPUEUpCisgICAgICByZXR1cm4oKQorICAgIGVuZGlmKCkKKworICAgICMgVGhlIHRiZCBhcmNoaXRlY3R1cmVzIGxpbmUgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICMgYXJjaHM6ICAgICAgICAgICBbIGFybXY3LCBhcm12N3MsIGFybTY0LCBhcm02NGUgXQorICAgIGxpc3QoR0VUIHRiZF9saW5lcyAwIGZpcnN0X2FyY2hfbGluZSkKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRQorICAgICAgICAgICAiYXJjaHM6ICtcXFsgKC4rKSBcXF0iICJcXDEiIGFyY2hlc19jb21tYV9zZXBhcmF0ZWQgIiR7Zmlyc3RfYXJjaF9saW5lfSIpCisgICAgc3RyaW5nKFNUUklQICIke2FyY2hlc19jb21tYV9zZXBhcmF0ZWR9IiBhcmNoZXNfY29tbWFfc2VwYXJhdGVkKQorICAgIHN0cmluZyhSRVBMQUNFICIsIiAiOyIgYXJjaF9saXN0ICIke2FyY2hlc19jb21tYV9zZXBhcmF0ZWR9IikKKyAgICBzdHJpbmcoUkVQTEFDRSAiICIgIiIgYXJjaF9saXN0ICIke2FyY2hfbGlzdH0iKQorICAgIGlmKE5PVCBhcmNoX2xpc3QpCisgICAgICBzZXQoJHtyZXRfZmFpbGVkfSBUUlVFIFBBUkVOVF9TQ09QRSkKKyAgICAgIHJldHVybigpCisgICAgZW5kaWYoKQorICAgIHNldCgke3JldH0gIiR7YXJjaF9saXN0fSIgUEFSRU5UX1NDT1BFKQorICBlbHNlaWYoRVhJU1RTICIke3N5c3RlbV9saWJfZHlsaWJfcGF0aH0iKQorICAgICMgT2xkIFNES3MgKFhjb2RlIDwgNykgc2hpcCBkeWxpYiBmaWxlcywgdXNlIGxpcG8gdG8gaW5zcGVjdCB0aGUgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMuCisgICAgIyBDYW4ndCB1c2UgLWFyY2hzIGJlY2F1c2UgdGhlIG9wdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIG9sZGVyIFhjb2RlIHZlcnNpb25zLgorICAgIGV4ZWN1dGVfcHJvY2VzcygKKyAgICAgIENPTU1BTkQgbGlwbyAtaW5mbyAke3N5c3RlbV9saWJfZHlsaWJfcGF0aH0KKyAgICAgIE9VVFBVVF9WQVJJQUJMRSBsaXBvX291dHB1dAorICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKyAgICAgIEVSUk9SX1ZBUklBQkxFIF9zdGRlcnIKKyAgICAgIFJFU1VMVF9WQVJJQUJMRSBfZmFpbGVkCisgICAgKQorICAgIGlmKF9mYWlsZWQgT1IgTk9UIGxpcG9fb3V0cHV0IE9SIE5PVCBsaXBvX291dHB1dCBNQVRDSEVTICIoTm9uLWZhdCBmaWxlOnxBcmNoaXRlY3R1cmVzIGluIHRoZSBmYXQgZmlsZTopIikKKyAgICAgIHNldCgke3JldF9mYWlsZWR9IFRSVUUgUEFSRU5UX1NDT1BFKQorICAgICAgcmV0dXJuKCkKKyAgICBlbmRpZigpCisKKyAgICAjIFRoZSBsaXBvIG91dHB1dCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgIyBOb24tZmF0IGZpbGU6IDxwYXRoPiBpcyBhcmNoaXRlY3R1cmU6IGkzODYKKyAgICAjIEFyY2hpdGVjdHVyZXMgaW4gdGhlIGZhdCBmaWxlOiA8cGF0aD4gYXJlOiBpMzg2IHg4Nl82NAorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFCisgICAgICAgICAgICJeKC4rKWlzIGFyY2hpdGVjdHVyZTooLispIiAiXFwyIiBhcmNoZXNfc3BhY2Vfc2VwYXJhdGVkICIke2xpcG9fb3V0cHV0fSIpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UKKyAgICAgICAgICAgICJeKC4rKWFyZTooLispIiAiXFwyIiBhcmNoZXNfc3BhY2Vfc2VwYXJhdGVkICIke2FyY2hlc19zcGFjZV9zZXBhcmF0ZWR9IikKKworICAgICMgTmVlZCB0byBjbGVhbiB1cCB0aGUgYXJjaGVzLCB3aXRoIFhjb2RlIDQuNi4zIHRoZSBvdXRwdXQgb2YgbGlwbyAtaW5mbyBjb250YWlucyBzb21lCisgICAgIyBhZGRpdGlvbmFsIGluZm8sIGUuZy4KKyAgICAjIEFyY2hpdGVjdHVyZXMgaW4gdGhlIGZhdCBmaWxlOiA8cGF0aD4gYXJlOiBhcm12NyAoY3B1dHlwZSAoMTIpIGNwdXN1YnR5cGUgKDExKSkKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRQorICAgICAgICAgICAgIlxcKC4rXFwpIiAiIiBhcmNoZXNfc3BhY2Vfc2VwYXJhdGVkICIke2FyY2hlc19zcGFjZV9zZXBhcmF0ZWR9IikKKworICAgICMgVGhlIG91dHB1dCBpcyBzcGFjZSBzZXBhcmF0ZWQuCisgICAgc3RyaW5nKFNUUklQICIke2FyY2hlc19zcGFjZV9zZXBhcmF0ZWR9IiBhcmNoZXNfc3BhY2Vfc2VwYXJhdGVkKQorICAgIHN0cmluZyhSRVBMQUNFICIgIiAiOyIgYXJjaF9saXN0ICIke2FyY2hlc19zcGFjZV9zZXBhcmF0ZWR9IikKKworICAgIGlmKE5PVCBhcmNoX2xpc3QpCisgICAgICBzZXQoJHtyZXRfZmFpbGVkfSBUUlVFIFBBUkVOVF9TQ09QRSkKKyAgICAgIHJldHVybigpCisgICAgZW5kaWYoKQorICAgIHNldCgke3JldH0gIiR7YXJjaF9saXN0fSIgUEFSRU5UX1NDT1BFKQorICBlbHNlKCkKKyAgICAjIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGtlZXAgaXQgZm9yIHNhZmV0eS4KKyAgICBtZXNzYWdlKFdBUk5JTkcgIk5vIHdheSB0byBmaW5kIGFyY2hpdGVjdHVyZXMgZm9yIGdpdmVuIHNka19wYXRoICcke3Nka19wYXRofSciKQorICAgIHNldCgke3JldF9mYWlsZWR9IFRSVUUgUEFSRU5UX1NDT1BFKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKKyMgSGFuZGxlIG11bHRpLWFyY2ggc3lzcm9vdHMuIERvIHRoaXMgYmVmb3JlIENNQUtFX09TWF9TWVNST09UIGlzCisjIHRyYW5zZm9ybWVkIGludG8gYSBwYXRoLCBzbyB0aGF0IHdlIGtub3cgdGhlIHN5c3Jvb3QgbmFtZS4KK2Z1bmN0aW9uKF9hcHBsZV9yZXNvbHZlX211bHRpX2FyY2hfc3lzcm9vdHMpCisgIGlmKERFRklORUQgQ01BS0VfQVBQTEVfQVJDSF9TWVNST09UUykKKyAgICByZXR1cm4oKSAjIEFscmVhZHkgY2FjaGVkCisgIGVuZGlmKCkKKworICBsaXN0KExFTkdUSCBDTUFLRV9PU1hfQVJDSElURUNUVVJFUyBfbnVtX2FyY2hzKQorICBpZihOT1QgKF9udW1fYXJjaHMgR1JFQVRFUiAxKSkKKyAgICByZXR1cm4oKSAjIE9ubHkgYXBwbHkgdG8gbXVsdGktYXJjaAorICBlbmRpZigpCisKKyAgaWYoQ01BS0VfT1NYX1NZU1JPT1QgU1RSRVFVQUwgIm1hY29zeCIpCisgICAgIyBtYWNPUyBkb2Vzbid0IGhhdmUgYSBzaW11bGF0b3Igc2RrIC8gc3lzcm9vdCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBoYW5kbGUgcGVyLXNkayBhcmNoZXMuCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGlmKElTX0RJUkVDVE9SWSAiJHtDTUFLRV9PU1hfU1lTUk9PVH0iKQorICAgIGlmKE5PVCBDTUFLRV9PU1hfU1lTUk9PVCBTVFJFUVVBTCBfQ01BS0VfT1NYX1NZU1JPT1RfREVGQVVMVCkKKyAgICAgIG1lc3NhZ2UoV0FSTklORyAiQ2FuIG5vdCByZXNvbHZlIG11bHRpLWFyY2ggc3lzcm9vdHMgd2l0aCBDTUFLRV9PU1hfU1lTUk9PVCBzZXQgdG8gcGF0aCAoJHtDTUFLRV9PU1hfU1lTUk9PVH0pIikKKyAgICBlbmRpZigpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIHN0cmluZyhSRVBMQUNFICJvcyIgInNpbXVsYXRvciIgX3NpbXVsYXRvcl9zZGsgJHtDTUFLRV9PU1hfU1lTUk9PVH0pCisgIHNldChfc2RrcyAiJHtDTUFLRV9PU1hfU1lTUk9PVH07JHtfc2ltdWxhdG9yX3Nka30iKQorICBmb3JlYWNoKHNkayAke19zZGtzfSkKKyAgICBfYXBwbGVfcmVzb2x2ZV9zZGtfcGF0aCgke3Nka30gX3Nka19wYXRoKQorICAgIGlmKE5PVCBJU19ESVJFQ1RPUlkgIiR7X3Nka19wYXRofSIpCisgICAgICBtZXNzYWdlKFdBUk5JTkcgIkZhaWxlZCB0byByZXNvbHZlIFNESyBwYXRoIGZvciAnJHtzZGt9JyIpCisgICAgICBjb250aW51ZSgpCisgICAgZW5kaWYoKQorCisgICAgX2FwcGxlX3Jlc29sdmVfc3VwcG9ydGVkX2FyY2hzX2Zvcl9zZGtfZnJvbV9zeXN0ZW1fbGliKCR7X3Nka19wYXRofSBfc2RrX2FyY2hzIF9mYWlsZWQpCisKKyAgICBpZihfZmFpbGVkKQorICAgICAgIyBGYWlsdXJlIHRvIGV4dHJhY3Qgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgZm9yIGFuIFNESyBtZWFucyB0aGF0IHRoZSBpbnN0YWxsZWQgU0RLIGlzIG9sZAorICAgICAgIyBhbmQgZG9lcyBub3QgcHJvdmlkZSBzdWNoIGluZm9ybWF0aW9uIChTREtzIHRoYXQgY29tZSB3aXRoIFhjb2RlID49IDEwLnggc3RhcnRlZCBwcm92aWRpbmcKKyAgICAgICMgdGhlIGluZm9ybWF0aW9uKS4gSW4gc3VjaCBhIGNhc2UsIHJldHVybiBlYXJseSwgYW5kIGhhbmRsZSBtdWx0aS1hcmNoIGJ1aWxkcyB0aGUgb2xkIHdheQorICAgICAgIyAobm8gcGVyLXNkayBhcmNoZXMpLgorICAgICAgcmV0dXJuKCkKKyAgICBlbmRpZigpCisKKyAgICBzZXQoX3Nka19hcmNoc18ke3Nka30gJHtfc2RrX2FyY2hzfSkKKyAgICBzZXQoX3Nka19wYXRoXyR7c2RrfSAke19zZGtfcGF0aH0pCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goYXJjaCAke0NNQUtFX09TWF9BUkNISVRFQ1RVUkVTfSkKKyAgICBzZXQoX2FyY2hfc3lzcm9vdCAiIikKKyAgICBmb3JlYWNoKHNkayAke19zZGtzfSkKKyAgICAgIGxpc3QoRklORCBfc2RrX2FyY2hzXyR7c2RrfSAke2FyY2h9IGFyY2hfaW5kZXgpCisgICAgICBpZihOT1QgYXJjaF9pbmRleCBFUVVBTCAtMSkKKyAgICAgICAgc2V0KF9hcmNoX3N5c3Jvb3QgJHtfc2RrX3BhdGhfJHtzZGt9fSkKKyAgICAgICAgYnJlYWsoKQorICAgICAgZW5kaWYoKQorICAgIGVuZGZvcmVhY2goKQorICAgIGlmKF9hcmNoX3N5c3Jvb3QpCisgICAgICBsaXN0KEFQUEVORCBfYXJjaF9zeXNyb290cyAke19hcmNoX3N5c3Jvb3R9KQorICAgIGVsc2UoKQorICAgICAgbWVzc2FnZShXQVJOSU5HICJObyBTREsgZm91bmQgZm9yIGFyY2hpdGVjdHVyZSAnJHthcmNofSciKQorICAgICAgbGlzdChBUFBFTkQgX2FyY2hfc3lzcm9vdHMgIiR7YXJjaH0tU0RLLU5PVEZPVU5EIikKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorCisgIHNldChDTUFLRV9BUFBMRV9BUkNIX1NZU1JPT1RTICIke19hcmNoX3N5c3Jvb3RzfSIgQ0FDSEUgSU5URVJOQUwKKyAgICAiQXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBzeXNyb290cywgb25lIHBlciBDTUFLRV9PU1hfQVJDSElURUNUVVJFUyIpCitlbmRmdW5jdGlvbigpCisKK19hcHBsZV9yZXNvbHZlX211bHRpX2FyY2hfc3lzcm9vdHMoKQorCisjIFRyYW5zZm9ybSBDTUFLRV9PU1hfU1lTUk9PVCB0byBhYnNvbHV0ZSBwYXRoCiBzZXQoX0NNQUtFX09TWF9TWVNST09UX1BBVEggIiIpCiBpZihDTUFLRV9PU1hfU1lTUk9PVCkKICAgaWYoIngke0NNQUtFX09TWF9TWVNST09UfSIgTUFUQ0hFUyAiLyIpCkBAIC0xMzQsMTYgKzI4MCw5IEBACiAgICAgZW5kaWYoKQogICAgIHNldChfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSCAiJHtDTUFLRV9PU1hfU1lTUk9PVH0iKQogICBlbHNlKCkKLSAgICAjIFRyYW5zZm9ybSB0aGUgc2RrIG5hbWUgaW50byBhIHBhdGguCi0gICAgZXhlY3V0ZV9wcm9jZXNzKAotICAgICAgQ09NTUFORCB4Y29kZWJ1aWxkIC1zZGsgJHtDTUFLRV9PU1hfU1lTUk9PVH0gLXZlcnNpb24gUGF0aAotICAgICAgT1VUUFVUX1ZBUklBQkxFIF9zdGRvdXQKLSAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCi0gICAgICBFUlJPUl9WQVJJQUJMRSBfc3RkZXJyCi0gICAgICBSRVNVTFRfVkFSSUFCTEUgX2ZhaWxlZAotICAgICAgKQotICAgIGlmKE5PVCBfZmFpbGVkIEFORCBJU19ESVJFQ1RPUlkgIiR7X3N0ZG91dH0iKQotICAgICAgc2V0KF9DTUFLRV9PU1hfU1lTUk9PVF9QQVRIICIke19zdGRvdXR9IikKKyAgICBfYXBwbGVfcmVzb2x2ZV9zZGtfcGF0aCgke0NNQUtFX09TWF9TWVNST09UfSBfc2RrX3BhdGgpCisgICAgaWYoSVNfRElSRUNUT1JZICIke19zZGtfcGF0aH0iKQorICAgICAgc2V0KF9DTUFLRV9PU1hfU1lTUk9PVF9QQVRIICIke19zZGtfcGF0aH0iKQogICAgICAgIyBGb3Igbm9uLVhjb2RlIGdlbmVyYXRvcnMgdXNlIHRoZSBwYXRoLgogICAgICAgaWYoTk9UICIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIlhjb2RlIikKICAgICAgICAgc2V0KENNQUtFX09TWF9TWVNST09UICIke19DTUFLRV9PU1hfU1lTUk9PVF9QQVRIfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0Rhcndpbi5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLmNtYWtlCmluZGV4IGU1YTU3YjUuLmM2ZGUzYjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vRGFyd2luLmNtYWtlCkBAIC00Miw2ICs0Miw3IEBACiAKIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9QUkVGSVggImxpYiIpCiBzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfU1VGRklYICIuZHlsaWIiKQorc2V0KENNQUtFX0VYVFJBX1NIQVJFRF9MSUJSQVJZX1NVRkZJWEVTICIudGJkIiAiLnNvIikKIHNldChDTUFLRV9TSEFSRURfTU9EVUxFX1BSRUZJWCAibGliIikKIHNldChDTUFLRV9TSEFSRURfTU9EVUxFX1NVRkZJWCAiLnNvIikKIHNldChDTUFLRV9NT0RVTEVfRVhJU1RTIDEpCkBAIC0xNTYsNiArMTU3LDEzIEBACiAgICAgICBicmVhaygpCiAgICAgZW5kaWYoKQogICBlbmRmb3JlYWNoKCkKKworICBpZihFWElTVFMgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xpYikKKyAgICBsaXN0KElOU0VSVCBDTUFLRV9QTEFURk9STV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTIDAgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xpYikKKyAgZW5kaWYoKQorICBpZihFWElTVFMgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xvY2FsL2xpYikKKyAgICBsaXN0KElOU0VSVCBDTUFLRV9QTEFURk9STV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTIDAgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xvY2FsL2xpYikKKyAgZW5kaWYoKQogZW5kaWYoKQogaWYgKE9TWF9ERVZFTE9QRVJfUk9PVCBBTkQgRVhJU1RTICIke09TWF9ERVZFTE9QRVJfUk9PVH0vTGlicmFyeS9GcmFtZXdvcmtzIikKICAgbGlzdChBUFBFTkQgQ01BS0VfU1lTVEVNX0ZSQU1FV09SS19QQVRICkBAIC0yMDgsMTEgKzIxNiwxOSBAQAogdW5zZXQoX2FwcHNfcGF0aHMpCiAKIGluY2x1ZGUoUGxhdGZvcm0vVW5peFBhdGhzKQotaWYoX0NNQUtFX09TWF9TWVNST09UX1BBVEggQU5EIEVYSVNUUyAke19DTUFLRV9PU1hfU1lTUk9PVF9QQVRIfS91c3IvaW5jbHVkZSkKLSAgbGlzdChBUFBFTkQgQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRIICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3VzcikKLSAgZm9yZWFjaChsYW5nIEMgQ1hYIE9CSkMgT0JKQ1hYKQotICAgIGxpc3QoQVBQRU5EIF9DTUFLRV8ke2xhbmd9X0lNUExJQ0lUX0lOQ0xVREVfRElSRUNUT1JJRVNfSU5JVCAke19DTUFLRV9PU1hfU1lTUk9PVF9QQVRIfS91c3IvaW5jbHVkZSkKLSAgZW5kZm9yZWFjaCgpCitpZihfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSCkKKyAgaWYoRVhJU1RTICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3Vzci9pbmNsdWRlKQorICAgIGxpc3QoSU5TRVJUIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSCAwICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3VzcikKKyAgICBmb3JlYWNoKGxhbmcgQyBDWFggT0JKQyBPQkpDWFggU3dpZnQpCisgICAgICBsaXN0KEFQUEVORCBfQ01BS0VfJHtsYW5nfV9JTVBMSUNJVF9JTkNMVURFX0RJUkVDVE9SSUVTX0lOSVQgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2luY2x1ZGUpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGlmKCkKKyAgaWYoRVhJU1RTICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3Vzci9sb2NhbC9pbmNsdWRlKQorICAgIGxpc3QoSU5TRVJUIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSCAwICR7X0NNQUtFX09TWF9TWVNST09UX1BBVEh9L3Vzci9sb2NhbCkKKyAgICBmb3JlYWNoKGxhbmcgQyBDWFggT0JKQyBPQkpDWFggU3dpZnQpCisgICAgICBsaXN0KEFQUEVORCBfQ01BS0VfJHtsYW5nfV9JTVBMSUNJVF9JTkNMVURFX0RJUkVDVE9SSUVTX0lOSVQgJHtfQ01BS0VfT1NYX1NZU1JPT1RfUEFUSH0vdXNyL2xvY2FsL2luY2x1ZGUpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGlmKCkKIGVuZGlmKCkKIGxpc3QoQVBQRU5EIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSAogICAvc3cgICAgICAgICMgRmluawpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9HZW5lcmljLVNEQ0MtQy5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vR2VuZXJpYy1TRENDLUMuY21ha2UKaW5kZXggYWVmNGFiZi4uYzNmZDE4NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9HZW5lcmljLVNEQ0MtQy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0dlbmVyaWMtU0RDQy1DLmNtYWtlCkBAIC0xLDQgKzEsMyBAQAotCiAjIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGJhc2ljIHN1cHBvcnQgZm9yIHNkY2MgKGh0dHA6Ly9zZGNjLnNvdXJjZWZvcmdlLm5ldC8pCiAjIGEgZnJlZSBDIGNvbXBpbGVyIGZvciA4IGFuZCAxNiBiaXQgbWljcm9jb250cm9sbGVycy4KICMgVG8gdXNlIGl0IGVpdGhlciBhIHRvb2xjaGFpbiBmaWxlIGlzIHJlcXVpcmVkIG9yIGNtYWtlIGhhcyB0byBiZSBydW4gbGlrZSB0aGlzOgpAQCAtMTksMjIgKzE4LDI2IEBACiAKIHNldChDTUFLRV9DX09VVFBVVF9FWFRFTlNJT04gIi5yZWwiKQogCi0jIGZpbmQgc2RjY2xpYiBhcyBDTUFLRV9BUgotIyBzaW5jZSBjbWFrZSBtYXkgYWxyZWFkeSBoYXZlIHNlYXJjaGVkIGZvciAiYXIiLCBzZGNjbGliIGhhcyB0bwotIyBiZSBzZWFyY2hlZCB3aXRoIGEgZGlmZmVyZW50IHZhcmlhYmxlIG5hbWUgKFNEQ0NMSUJfRVhFQ1VUQUJMRSkKLSMgYW5kIG11c3QgdGhlbiBiZSBmb3JjZWQgaW50byB0aGUgY2FjaGUKKyMgZmluZCBzZGFyL3NkY2NsaWIgYXMgQ01BS0VfQVIKKyMgc2luY2UgY21ha2UgbWF5IGFscmVhZHkgaGF2ZSBzZWFyY2hlZCBmb3IgImFyIiwgc2RhciBoYXMgdG8KKyMgYmUgc2VhcmNoZWQgd2l0aCBhIGRpZmZlcmVudCB2YXJpYWJsZSBuYW1lIChTRENDQVJfRVhFQ1VUQUJMRSkKKyMgYW5kIG11c3QgdGhlbiBiZSBmb3JjZWQgaW50byB0aGUgY2FjaGUuCisjIHNkY2NsaWIgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBTRENDIDMuMi4wIGFuZCByZW1vdmVkIGluIDMuOC42CisjIHNvIHdlIGZpcnN0IGxvb2sgZm9yIHNkYXIKIGdldF9maWxlbmFtZV9jb21wb25lbnQoU0RDQ19MT0NBVElPTiAiJHtDTUFLRV9DX0NPTVBJTEVSfSIgUEFUSCkKLWZpbmRfcHJvZ3JhbShTRENDTElCX0VYRUNVVEFCTEUgc2RjY2xpYiBQQVRIUyAiJHtTRENDX0xPQ0FUSU9OfSIgTk9fREVGQVVMVF9QQVRIKQotZmluZF9wcm9ncmFtKFNEQ0NMSUJfRVhFQ1VUQUJMRSBzZGNjbGliKQotc2V0KENNQUtFX0FSICIke1NEQ0NMSUJfRVhFQ1VUQUJMRX0iIENBQ0hFIEZJTEVQQVRIICJUaGUgc2RjYyBsaWJyYXJpYW4iIEZPUkNFKQotCi0jIENNQUtFX0NfRkxBR1NfSU5JVCBhbmQgQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklUIHNob3VsZCBiZSBzZXQgaW4gYSBDTUFLRV9TWVNURU1fUFJPQ0VTU09SIGZpbGUKLWlmKE5PVCBERUZJTkVEIENNQUtFX0NfRkxBR1NfSU5JVCkKLSAgc3RyaW5nKEFQUEVORCBDTUFLRV9DX0ZMQUdTX0lOSVQgIiAtbW1jczUxIC0tbW9kZWwtc21hbGwiKQorZmluZF9wcm9ncmFtKFNEQ0NBUl9FWEVDVVRBQkxFIHNkYXIgTkFNRVMgc2RjY2xpYiBQQVRIUyAiJHtTRENDX0xPQ0FUSU9OfSIgTk9fREVGQVVMVF9QQVRIKQorZmluZF9wcm9ncmFtKFNEQ0NBUl9FWEVDVVRBQkxFIHNkYXIgTkFNRVMgc2RjY2xpYikKKyMgZm9yIGNvbXBhdGliaWxpdHksIGluIGNhc2UgU0RDQ0xJQl9FWEVDVVRBQkxFIGlzIHNldCwgd2UgdXNlIGl0CitpZihERUZJTkVEIFNEQ0NMSUJfRVhFQ1VUQUJMRSkKKyAgc2V0KENNQUtFX0FSICIke1NEQ0NMSUJfRVhFQ1VUQUJMRX0iIENBQ0hFIEZJTEVQQVRIICJUaGUgc2RjYyBsaWJyYXJpYW4iIEZPUkNFKQorZWxzZSgpCisgIHNldChDTUFLRV9BUiAiJHtTRENDQVJfRVhFQ1VUQUJMRX0iIENBQ0hFIEZJTEVQQVRIICJUaGUgc2RjYyBsaWJyYXJpYW4iIEZPUkNFKQogZW5kaWYoKQogCi1pZihOT1QgREVGSU5FRCBDTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0lOSVQpCi0gIHNldCAoQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklUIC0tbW9kZWwtc21hbGwpCitpZigiJHtTRENDQVJfRVhFQ1VUQUJMRX0iIE1BVENIRVMgInNkY2NsaWIiKQorICBzZXQoQ01BS0VfQVJfT1BUSU9OUyAiLWEiKQorZWxzZSgpCisgIHNldChDTUFLRV9BUl9PUFRJT05TICItcmMiKQogZW5kaWYoKQogCiBzZXQoQ01BS0VfQ19MSU5LRVJfV1JBUFBFUl9GTEFHICItV2wiICIsIikKQEAgLTQ1LDEwICs0OCwxMCBAQAogIyBsaW5rIG9iamVjdCBmaWxlcyB0byBhbiBleGVjdXRhYmxlCiBzZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgIjxDTUFLRV9DX0NPTVBJTEVSPiA8RkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8Q01BS0VfQ19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPExJTktfTElCUkFSSUVTPiIpCiAKLSMgbmVlZHMgc2RjYyAyLjcuMCArIHNkZGNsaWIgZnJvbSBjdnMKKyMgbmVlZHMgc2RjYyArIHNkYXIvc2RjY2xpYgogc2V0KENNQUtFX0NfQ1JFQVRFX1NUQVRJQ19MSUJSQVJZCiAgICAgICAiXCIke0NNQUtFX0NPTU1BTkR9XCIgLUUgcmVtb3ZlIDxUQVJHRVQ+IgotICAgICAgIjxDTUFLRV9BUj4gLWEgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAiKQorICAgICAgIjxDTUFLRV9BUj4gJHtDTUFLRV9BUl9PUFRJT05TfSA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICIpCiAKICMgbm90IHN1cHBvcnRlZCBieSBzZGNjCiBzZXQoQ01BS0VfQ19DUkVBVEVfU0hBUkVEX0xJQlJBUlkgIiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0hQLVVYLUhQLUMuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0hQLVVYLUhQLUMuY21ha2UKaW5kZXggNzYxMDM4My4uNTdiYTJlYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9IUC1VWC1IUC1DLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vSFAtVVgtSFAtQy5jbWFrZQpAQCAtMyw0ICszLDQgQEAKIAogc2V0KENNQUtFX0NfQ1JFQVRFX1BSRVBST0NFU1NFRF9TT1VSQ0UgIjxDTUFLRV9DX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1FIDxTT1VSQ0U+ID4gPFBSRVBST0NFU1NFRF9TT1VSQ0U+IikKIHNldChDTUFLRV9DX0NSRUFURV9BU1NFTUJMWV9TT1VSQ0UgIjxDTUFLRV9DX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1TIDxTT1VSQ0U+IC1vIDxBU1NFTUJMWV9TT1VSQ0U+IikKLXNldChDTUFLRV9DX0NPTVBJTEVfT0JKRUNUICI8Q01BS0VfQ19DT01QSUxFUj4gPERFRklORVM+IC1BYSAtQWUgPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+ICAgLWMgPFNPVVJDRT4iKQorc2V0KENNQUtFX0NfQ09NUElMRV9PQkpFQ1QgIjxDTUFLRV9DX0NPTVBJTEVSPiA8REVGSU5FUz4gLUFhIC1BZSA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9IUC1VWC5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vSFAtVVguY21ha2UKaW5kZXggOTU3MmE3ZS4uNDI1YTEzZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9IUC1VWC5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0hQLVVYLmNtYWtlCkBAIC0yMiw3ICsyMiw3IEBACiAjIHNldCBmbGFncyBmb3IgZ2NjIHN1cHBvcnQKIGluY2x1ZGUoUGxhdGZvcm0vVW5peFBhdGhzKQogCi0jIExvb2sgaW4gYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBpbXBsaWN0IGxpbmsgZGlyZWN0b3JpZXMsIGJ1dCB0ZWxsCisjIExvb2sgaW4gYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBpbXBsaWNpdCBsaW5rIGRpcmVjdG9yaWVzLCBidXQgdGVsbAogIyBDTWFrZSBub3QgdG8gcGFzcyB0aGUgcGF0aHMgdG8gdGhlIGxpbmtlci4gIFRoZSBsaW5rZXIgd2lsbCBmaW5kIHRoZQogIyBsaWJyYXJ5IGZvciB0aGUgcHJvcGVyIGFyY2hpdGVjdHVyZS4gIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGRldGVjdAogIyB3aGljaCBwYXRoIHdpbGwgYmUgdXNlZCBieSB0aGUgbGlua2VyLiAgU2luY2UgdGhlIHBvaW50ZXIgdHlwZSBzaXplCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LU9wZW5XYXRjb20tQy5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vTGludXgtT3BlbldhdGNvbS1DLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzM0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LU9wZW5XYXRjb20tQy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFBsYXRmb3JtL0xpbnV4LU9wZW5XYXRjb20pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LU9wZW5XYXRjb20tQ1hYLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9MaW51eC1PcGVuV2F0Y29tLUNYWC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODMzNDlhCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9MaW51eC1PcGVuV2F0Y29tLUNYWC5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFBsYXRmb3JtL0xpbnV4LU9wZW5XYXRjb20pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LU9wZW5XYXRjb20uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LU9wZW5XYXRjb20uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI0ZTk5NQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vTGludXgtT3BlbldhdGNvbS5jbWFrZQpAQCAtMCwwICsxLDI1IEBACisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKKyMgVGhpcyBtb2R1bGUgaXMgc2hhcmVkIGJ5IG11bHRpcGxlIGxhbmd1YWdlczsgdXNlIGluY2x1ZGUgYmxvY2tlci4KK2luY2x1ZGVfZ3VhcmQoKQorCitzZXQoQ01BS0VfQlVJTERfVFlQRV9JTklUIERlYnVnKQorCitzdHJpbmcoQVBQRU5EIENNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBsaW51eCBvcHQgbm9leHRlbnNpb24iKQorc3RyaW5nKEFQUEVORCBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gbGludXgiKQorc3RyaW5nKEFQUEVORCBDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gbGludXgiKQorCisjIHNpbmdsZS9tdWx0aS10aHJlYWRlZCAgICAgICAgICAgICAgICAgLy1ibQorIyBkZWZhdWx0IGlzIHNldHVwIGZvciBzaW5nbGUtdGhyZWFkZWQgbGlicmFyaWVzCitzdHJpbmcoQVBQRU5EIENNQUtFX0NfRkxBR1NfSU5JVCAiIC1idD1saW51eCIpCitzdHJpbmcoQVBQRU5EIENNQUtFX0NYWF9GTEFHU19JTklUICIgLWJ0PWxpbnV4IC14cyIpCisKK2lmKENNQUtFX0NST1NTQ09NUElMSU5HKQorICBpZihOT1QgQ01BS0VfQ19TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTKQorICAgIHNldChDTUFLRV9DX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMgJEVOVntXQVRDT019L2xoKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DWFhfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUykKKyAgICBzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMgJEVOVntXQVRDT019L2xoKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LWNvbW8uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL0xpbnV4LWNvbW8uY21ha2UKaW5kZXggZDE1NTBkMi4uZjZkYjM0YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9MaW51eC1jb21vLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vTGludXgtY29tby5jbWFrZQpAQCAtMTEsNyArMTEsNyBAQAogCiBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRQogICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAtLXByZWxpbmtfb2JqZWN0cyA8T0JKRUNUUz4iCi0gICAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxGTEFHUz4gPE9CSkVDVFM+ICAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IikKKyAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPEZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiAKIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9SVU5USU1FX0NfRkxBRyAiIikKIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9DX0ZMQUdTICIiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9PUzItT3BlbldhdGNvbS1DLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9PUzItT3BlbldhdGNvbS1DLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTRkOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL09TMi1PcGVuV2F0Y29tLUMuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShQbGF0Zm9ybS9PUzItT3BlbldhdGNvbSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vT1MyLU9wZW5XYXRjb20tQ1hYLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9PUzItT3BlbldhdGNvbS1DWFguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhNGQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vT1MyLU9wZW5XYXRjb20tQ1hYLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoUGxhdGZvcm0vT1MyLU9wZW5XYXRjb20pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL09TMi1PcGVuV2F0Y29tLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9PUzItT3BlbldhdGNvbS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OThmYjlmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9PUzItT3BlbldhdGNvbS5jbWFrZQpAQCAtMCwwICsxLDM1IEBACisjIFRoaXMgbW9kdWxlIGlzIHNoYXJlZCBieSBtdWx0aXBsZSBsYW5ndWFnZXM7IHVzZSBpbmNsdWRlIGJsb2NrZXIuCitpbmNsdWRlX2d1YXJkKCkKKworc2V0KENNQUtFX0JVSUxEX1RZUEVfSU5JVCBEZWJ1ZykKKworaWYoREVGSU5FRCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SIEFORCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SIFNUUkVRVUFMICJJODYiKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX0VYRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBvczIiKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBvczJfZGxsIikKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gb3MyX2RsbCIpCitlbHNlKCkKKyAgc3RyaW5nKEFQUEVORCBDTUFLRV9FWEVfTElOS0VSX0ZMQUdTX0lOSVQgIiBzeXN0ZW0gb3MydjIiKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBvczJ2Ml9kbGwiKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBvczJ2Ml9kbGwiKQorZW5kaWYoKQorCitzZXQoQ01BS0VfQ19DT01QSUxFX09QVElPTlNfRExMICItYmQiKSAjIE5vdGU6IFRoaXMgdmFyaWFibGUgaXMgYSAnOycgc2VwYXJhdGVkIGxpc3QKK3NldChDTUFLRV9TSEFSRURfTElCUkFSWV9DX0ZMQUdTICItYmQiKSAjIC4uLiB3aGlsZSB0aGlzIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZy4KKworc3RyaW5nKEFQUEVORCBDTUFLRV9DX0ZMQUdTX0lOSVQgIiAtYnQ9b3MyIikKK3N0cmluZyhBUFBFTkQgQ01BS0VfQ1hYX0ZMQUdTX0lOSVQgIiAtYnQ9b3MyIC14cyIpCisKK2lmKE5PVCBDTUFLRV9DX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgIGlmKERFRklORUQgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBBTkQgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBTVFJFUVVBTCAiSTg2IikKKyAgICBzZXQoQ01BS0VfQ19TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTICRFTlZ7V0FUQ09NfS9oICRFTlZ7V0FUQ09NfS9oL29zMjF4KQorICBlbHNlKCkKKyAgICBzZXQoQ01BS0VfQ19TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTICRFTlZ7V0FUQ09NfS9oICRFTlZ7V0FUQ09NfS9oL29zMikKKyAgZW5kaWYoKQorZW5kaWYoKQoraWYoTk9UIENNQUtFX0NYWF9TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTKQorICBpZihERUZJTkVEIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgQU5EIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgU1RSRVFVQUwgIkk4NiIpCisgICAgc2V0KENNQUtFX0NYWF9TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTICRFTlZ7V0FUQ09NfS9oICRFTlZ7V0FUQ09NfS9oL29zMjF4KQorICBlbHNlKCkKKyAgICBzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEX0lOQ0xVREVfRElSRUNUT1JJRVMgJEVOVntXQVRDT019L2ggJEVOVntXQVRDT019L2gvb3MyKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL09TMi5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vT1MyLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZGY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL09TMi5jbWFrZQpAQCAtMCwwICsxLDE0IEBACitzZXQoT1MyIDEpCisKK3NldChDTUFLRV9TVEFUSUNfTElCUkFSWV9QUkVGSVggIiIpCitzZXQoQ01BS0VfU1RBVElDX0xJQlJBUllfU1VGRklYICIubGliIikKK3NldChDTUFLRV9TSEFSRURfTElCUkFSWV9QUkVGSVggIiIpCitzZXQoQ01BS0VfU0hBUkVEX0xJQlJBUllfU1VGRklYICIuZGxsIikKK3NldChDTUFLRV9JTVBPUlRfTElCUkFSWV9QUkVGSVggIiIpCitzZXQoQ01BS0VfSU1QT1JUX0xJQlJBUllfU1VGRklYICIubGliIikKK3NldChDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWCAiLmV4ZSIpCitzZXQoQ01BS0VfTElOS19MSUJSQVJZX1NVRkZJWCAiLmxpYiIpCitzZXQoQ01BS0VfRExfTElCUyAiIikKKworc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9QUkVGSVhFUyAiIikKK3NldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgIi5saWIiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9Vbml4UGF0aHMuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1VuaXhQYXRocy5jbWFrZQppbmRleCA5N2Y3NDRkLi5iOTM4MWMzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL1VuaXhQYXRocy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1VuaXhQYXRocy5jbWFrZQpAQCAtMjEsNiArMjEsMTAgQEAKIAogIyBMaXN0IGNvbW1vbiBpbnN0YWxsYXRpb24gcHJlZml4ZXMuICBUaGVzZSB3aWxsIGJlIHVzZWQgZm9yIGFsbAogIyBzZWFyY2ggdHlwZXMuCisjCisjIFJlbWluZGVyIHdoZW4gYWRkaW5nIG5ldyBsb2NhdGlvbnMgY29tcHV0ZWQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyMgcGxlYXNlIG1ha2Ugc3VyZSB0byBrZWVwIEhlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRILnJzdAorIyBzeW5jaHJvbml6ZWQKIGxpc3QoQVBQRU5EIENNQUtFX1NZU1RFTV9QUkVGSVhfUEFUSAogICAjIFN0YW5kYXJkCiAgIC91c3IvbG9jYWwgL3VzciAvCkBAIC04Niw2ICs5MCwxNyBAQAogCiB1bnNldChfY21ha2Vfc3lzcm9vdF9jb21waWxlKQogCisjIFJlbWluZGVyIHdoZW4gYWRkaW5nIG5ldyBsb2NhdGlvbnMgY29tcHV0ZWQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyMgcGxlYXNlIG1ha2Ugc3VyZSB0byBrZWVwIEhlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRILnJzdAorIyBzeW5jaHJvbml6ZWQKK2lmKENNQUtFX0NPTVBJTEVSX1NZU1JPT1QpCisgIGxpc3QoUFJFUEVORCBDTUFLRV9TWVNURU1fUFJFRklYX1BBVEggIiR7Q01BS0VfQ09NUElMRVJfU1lTUk9PVH0iKQorCisgIGlmKERFRklORUQgRU5We0NPTkRBX1BSRUZJWH0gQU5EIEVYSVNUUyAiJEVOVntDT05EQV9QUkVGSVh9IikKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9TWVNURU1fUFJFRklYX1BBVEggIiRFTlZ7Q09OREFfUFJFRklYfSIpCisgIGVuZGlmKCkKK2VuZGlmKCkKKwogIyBFbmFibGUgdXNlIG9mIGxpYjMyIGFuZCBsaWI2NCBzZWFyY2ggcGF0aCB2YXJpYW50cyBieSBkZWZhdWx0Lgogc2V0X3Byb3BlcnR5KEdMT0JBTCBQUk9QRVJUWSBGSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTIFRSVUUpCiBzZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFMgVFJVRSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1BcHBsZS1Td2lmdC5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1BcHBsZS1Td2lmdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc3NzU1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUFwcGxlLVN3aWZ0LmNtYWtlCkBAIC0wLDAgKzEgQEAKK3NldChDTUFLRV9Td2lmdF9JTVBMSUJfTElOS0VSX0ZMQUdTICItWGxpbmtlciAtaW1wbGliOjxUQVJHRVRfSU1QTElCPiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtQ2xhbmctQVNNLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLUFTTS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDVkNzdkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLUFTTS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2luY2x1ZGUoUGxhdGZvcm0vV2luZG93cy1DbGFuZykKK19fd2luZG93c19jb21waWxlcl9jbGFuZyhBU00pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtQ2xhbmcuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtQ2xhbmcuY21ha2UKaW5kZXggMDI4NjRjNi4uZGZmODE2NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUNsYW5nLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1DbGFuZy5jbWFrZQpAQCAtMjEsMTAgKzIxLDEyIEBACiAgIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVggIi5kbGwiKQogICBzZXQoQ01BS0VfU0hBUkVEX01PRFVMRV9TVUZGSVggICIuZGxsIikKICAgc2V0KENNQUtFX1NUQVRJQ19MSUJSQVJZX1NVRkZJWCAiLmxpYiIpCi0gIHNldChDTUFLRV9ERVBGSUxFX0ZMQUdTXyR7bGFuZ30gIi1NRCAtTVQgPE9CSkVDVD4gLU1GIDxERVBGSUxFPiIpCisgIGlmKE5PVCAiJHtsYW5nfSIgU1RSRVFVQUwgIkFTTSIpCisgICAgc2V0KENNQUtFX0RFUEZJTEVfRkxBR1NfJHtsYW5nfSAiLU1EIC1NVCA8T0JKRUNUPiAtTUYgPERFUEZJTEU+IikKKyAgZW5kaWYoKQogCiAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfUFJFRklYRVMgImxpYiIgIiIpCi0gIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgIi5kbGwiICIuZGxsLmEiICIuYSIgIi5saWIiKQorICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICIuZGxsLmEiICIuYSIgIi5saWIiKQogICBzZXQoQ01BS0VfU1VQUE9SVF9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUyAxKQogICBzZXQgKENNQUtFX0xJTktfREVGX0ZJTEVfRkxBRyAiLVhsaW5rZXIgL0RFRjoiKQogCkBAIC01MywzNiArNTUsMzggQEAKIAogICAjIENyZWF0ZSBhcmNoaXZpbmcgcnVsZXMgdG8gc3VwcG9ydCBsYXJnZSBvYmplY3QgZmlsZSBsaXN0cyBmb3Igc3RhdGljIGxpYnJhcmllcy4KICAgc2V0KENNQUtFXyR7bGFuZ31fQVJDSElWRV9DUkVBVEUgIjxDTUFLRV9BUj4gcWMgPFRBUkdFVD4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiIpCi0gIHNldChDTUFLRV8ke2xhbmd9X0FSQ0hJVkVfQVBQRU5EICI8Q01BS0VfQVI+IHEgIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQorICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0ZJTklTSCAiPENNQUtFX1JBTkxJQj4gPFRBUkdFVD4iKQogICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKICAgICAiPENNQUtFXyR7bGFuZ31fQ09NUElMRVI+IC1mdXNlLWxkPWxsZC1saW5rIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIDxDTUFLRV9TSEFSRURfTElCUkFSWV8ke2xhbmd9X0ZMQUdTPiA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9DUkVBVEVfJHtsYW5nfV9GTEFHUz4gLW8gPFRBUkdFVD4gJHtDTUFLRV9HTlVMRF9JTUFHRV9WRVJTSU9OfSAtWGxpbmtlciAvaW1wbGliOjxUQVJHRVRfSU1QTElCPiAtWGxpbmtlciAvcGRiOjxUQVJHRVRfUERCPiAtWGxpbmtlciAvdmVyc2lvbjo8VEFSR0VUX1ZFUlNJT05fTUFKT1I+LjxUQVJHRVRfVkVSU0lPTl9NSU5PUj4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iKQogICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX01PRFVMRSAke0NNQUtFXyR7bGFuZ31fQ1JFQVRFX1NIQVJFRF9MSUJSQVJZfSkKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAtZnVzZS1sZD1sbGQtbGluayAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiA8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IC1YbGlua2VyIC9pbXBsaWI6PFRBUkdFVF9JTVBMSUI+IC1YbGlua2VyIC9wZGI6PFRBUkdFVF9QREI+IC1YbGlua2VyIC92ZXJzaW9uOjxUQVJHRVRfVkVSU0lPTl9NQUpPUj4uPFRBUkdFVF9WRVJTSU9OX01JTk9SPiAke0NNQUtFX0dOVUxEX0lNQUdFX1ZFUlNJT059IDxMSU5LX0xJQlJBUklFUz4iKQorICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gLWZ1c2UtbGQ9bGxkLWxpbmsgLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgPEZMQUdTPiA8Q01BS0VfJHtsYW5nfV9MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IC1YbGlua2VyIC9pbXBsaWI6PFRBUkdFVF9JTVBMSUI+IC1YbGlua2VyIC9wZGI6PFRBUkdFVF9QREI+IC1YbGlua2VyIC92ZXJzaW9uOjxUQVJHRVRfVkVSU0lPTl9NQUpPUj4uPFRBUkdFVF9WRVJTSU9OX01JTk9SPiAke0NNQUtFX0dOVUxEX0lNQUdFX1ZFUlNJT059IDxMSU5LX0xJQlJBUklFUz4iKQogCi0gIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19NU1ZDX1JVTlRJTUVfTElCUkFSWV9NdWx0aVRocmVhZGVkICAgICAgICAgLVhjbGFuZyAtZmx0by12aXNpYmlsaXR5LXB1YmxpYy1zdGQgLURfTVQgLVhjbGFuZyAtLWRlcGVuZGVudC1saWI9bGliY210KQotICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfTVNWQ19SVU5USU1FX0xJQlJBUllfTXVsdGlUaHJlYWRlZERMTCAgICAgIC1EX0RMTCAtRF9NVCAtWGNsYW5nIC0tZGVwZW5kZW50LWxpYj1tc3ZjcnQpCi0gIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19NU1ZDX1JVTlRJTUVfTElCUkFSWV9NdWx0aVRocmVhZGVkRGVidWcgICAgLURfREVCVUcgLVhjbGFuZyAtZmx0by12aXNpYmlsaXR5LXB1YmxpYy1zdGQgLURfTVQgLVhjbGFuZyAtLWRlcGVuZGVudC1saWI9bGliY210ZCkKLSAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX01TVkNfUlVOVElNRV9MSUJSQVJZX011bHRpVGhyZWFkZWREZWJ1Z0RMTCAtRF9ERUJVRyAtRF9ETEwgLURfTVQgLVhjbGFuZyAtLWRlcGVuZGVudC1saWI9bXN2Y3J0ZCkKKyAgaWYoTk9UICIke2xhbmd9IiBTVFJFUVVBTCAiQVNNIikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfTVNWQ19SVU5USU1FX0xJQlJBUllfTXVsdGlUaHJlYWRlZCAgICAgICAgIC1YY2xhbmcgLWZsdG8tdmlzaWJpbGl0eS1wdWJsaWMtc3RkIC1EX01UIC1YY2xhbmcgLS1kZXBlbmRlbnQtbGliPWxpYmNtdCkKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfTVNWQ19SVU5USU1FX0xJQlJBUllfTXVsdGlUaHJlYWRlZERMTCAgICAgIC1EX0RMTCAtRF9NVCAtWGNsYW5nIC0tZGVwZW5kZW50LWxpYj1tc3ZjcnQpCisgICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX01TVkNfUlVOVElNRV9MSUJSQVJZX011bHRpVGhyZWFkZWREZWJ1ZyAgICAtRF9ERUJVRyAtWGNsYW5nIC1mbHRvLXZpc2liaWxpdHktcHVibGljLXN0ZCAtRF9NVCAtWGNsYW5nIC0tZGVwZW5kZW50LWxpYj1saWJjbXRkKQorICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19NU1ZDX1JVTlRJTUVfTElCUkFSWV9NdWx0aVRocmVhZGVkRGVidWdETEwgLURfREVCVUcgLURfRExMIC1EX01UIC1YY2xhbmcgLS1kZXBlbmRlbnQtbGliPW1zdmNydGQpCiAKLSAgaWYoQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUllfREVGQVVMVCkKLSAgICBzZXQoX19BRERFRF9GTEFHUyAiIikKLSAgICBzZXQoX19BRERFRF9GTEFHU19ERUJVRyAiIikKLSAgZWxzZSgpCi0gICAgc2V0KF9fQURERURfRkxBR1NfREVCVUcgIi1EX0RFQlVHIC1EX0RMTCAtRF9NVCAtWGNsYW5nIC0tZGVwZW5kZW50LWxpYj1tc3ZjcnRkIikKLSAgICBzZXQoX19BRERFRF9GTEFHUyAiLURfRExMIC1EX01UIC1YY2xhbmcgLS1kZXBlbmRlbnQtbGliPW1zdmNydCIpCisgICAgaWYoQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUllfREVGQVVMVCkKKyAgICAgIHNldChfX0FEREVEX0ZMQUdTICIiKQorICAgICAgc2V0KF9fQURERURfRkxBR1NfREVCVUcgIiIpCisgICAgZWxzZSgpCisgICAgICBzZXQoX19BRERFRF9GTEFHU19ERUJVRyAiLURfREVCVUcgLURfRExMIC1EX01UIC1YY2xhbmcgLS1kZXBlbmRlbnQtbGliPW1zdmNydGQiKQorICAgICAgc2V0KF9fQURERURfRkxBR1MgIi1EX0RMTCAtRF9NVCAtWGNsYW5nIC0tZGVwZW5kZW50LWxpYj1tc3ZjcnQiKQorICAgIGVuZGlmKCkKKworICAgIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19ERUJVR19JTklUICIgLWcgLVhjbGFuZyAtZ2NvZGV2aWV3IC1PMCAke19fQURERURfRkxBR1NfREVCVUd9IikKKyAgICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfTUlOU0laRVJFTF9JTklUICIgLU9zIC1ETkRFQlVHICR7X19BRERFRF9GTEFHU30iKQorICAgIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19SRUxFQVNFX0lOSVQgIiAtTzMgLUROREVCVUcgJHtfX0FEREVEX0ZMQUdTfSIpCisgICAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX1JFTFdJVEhERUJJTkZPX0lOSVQgIiAtTzIgLWcgLUROREVCVUcgLVhjbGFuZyAtZ2NvZGV2aWV3ICR7X19BRERFRF9GTEFHU30iKQogICBlbmRpZigpCi0KLSAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX0RFQlVHX0lOSVQgIiAtZyAtWGNsYW5nIC1nY29kZXZpZXcgLU8wICR7X19BRERFRF9GTEFHU19ERUJVR30iKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfTUlOU0laRVJFTF9JTklUICIgLU9zIC1ETkRFQlVHICR7X19BRERFRF9GTEFHU30iKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfUkVMRUFTRV9JTklUICIgLU8zIC1ETkRFQlVHICR7X19BRERFRF9GTEFHU30iKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfUkVMV0lUSERFQklORk9fSU5JVCAiIC1PMiAtZyAtRE5ERUJVRyAtWGNsYW5nIC1nY29kZXZpZXcgJHtfX0FEREVEX0ZMQUdTfSIpCiAgIHNldChDTUFLRV9JTkNMVURFX1NZU1RFTV9GTEFHXyR7bGFuZ30gIi1pc3lzdGVtICIpCiAKICAgc2V0KENNQUtFX1BDSF9FWFRFTlNJT04gLnBjaCkKICAgc2V0KENNQUtFX1BDSF9QUk9MT0dVRSAiI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyIikKLSAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1VTRV9QQ0ggLVhjbGFuZyAtaW5jbHVkZS1wY2ggLVhjbGFuZyA8UENIX0ZJTEU+KQorICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfVVNFX1BDSCAtWGNsYW5nIC1pbmNsdWRlLXBjaCAtWGNsYW5nIDxQQ0hfRklMRT4gLVhjbGFuZyAtaW5jbHVkZSAtWGNsYW5nIDxQQ0hfSEVBREVSPikKICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0ggLVhjbGFuZyAtZW1pdC1wY2ggLVhjbGFuZyAtaW5jbHVkZSAtWGNsYW5nIDxQQ0hfSEVBREVSPikKIAogICB1bnNldChfX0FEREVEX0ZMQUdTKQpAQCAtMTI5LDYgKzEzMywyNCBAQAogICBpZiAoICJ4JHtDTUFLRV9DWFhfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVH0iIFNUUkVRVUFMICJ4TVNWQyIgT1IgIngke0NNQUtFX0NfQ09NUElMRVJfRlJPTlRFTkRfVkFSSUFOVH0iIFNUUkVRVUFMICJ4TVNWQyIgKQogICAgIGluY2x1ZGUoUGxhdGZvcm0vV2luZG93cy1NU1ZDKQogCisgICAgIyBGZWVkIHRoZSBwcmVwcm9jZXNzZWQgcmMgZmlsZSB0byBsbHZtLXJjCisgICAgaWYoQ01BS0VfUkNfQ09NUElMRVJfSU5JVCBNQVRDSEVTICJsbHZtLXJjIikKKyAgICAgIGlmKERFRklORUQgQ01BS0VfQ19DT01QSUxFUl9JRCkKKyAgICAgICAgc2V0KENNQUtFX1JDX1BSRVBST0NFU1NPUiBDTUFLRV9DX0NPTVBJTEVSKQorICAgICAgZWxzZWlmKERFRklORUQgQ01BS0VfQ1hYX0NPTVBJTEVSX0lEKQorICAgICAgICBzZXQoQ01BS0VfUkNfUFJFUFJPQ0VTU09SIENNQUtFX0NYWF9DT01QSUxFUikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKERFRklORUQgQ01BS0VfUkNfUFJFUFJPQ0VTU09SKQorICAgICAgICBzZXQoQ01BS0VfREVQRklMRV9GTEFHU19SQyAiLWNsYW5nOi1NRCAtY2xhbmc6LU1GIC1jbGFuZzo8REVQRklMRT4iKQorICAgICAgICBzZXQoQ01BS0VfUkNfQ09NUElMRV9PQkpFQ1QgIiR7Q01BS0VfQ09NTUFORH0gLUUgY21ha2VfbGx2bV9yYyA8U09VUkNFPiA8T0JKRUNUPi5wcCA8JHtDTUFLRV9SQ19QUkVQUk9DRVNTT1J9PiA8REVGSU5FUz4gLURSQ19JTlZPS0VEIDxJTkNMVURFUz4gPEZMQUdTPiAtRSA8U09VUkNFPiAtLSA8Q01BS0VfUkNfQ09NUElMRVI+IDxERUZJTkVTPiAtSSA8U09VUkNFX0RJUj4gPElOQ0xVREVTPiAvZm8gPE9CSkVDVD4gPE9CSkVDVD4ucHAiKQorICAgICAgICBpZihDTUFLRV9HRU5FUkFUT1IgU1RSRVFVQUwgIk5pbmphIikKKyAgICAgICAgICBzZXQoQ01BS0VfTklOSkFfQ01DTERFUFNfUkMgMCkKKyAgICAgICAgICBzZXQoQ01BS0VfTklOSkFfREVQX1RZUEVfUkMgZ2NjKQorICAgICAgICBlbmRpZigpCisgICAgICAgIHVuc2V0KENNQUtFX1JDX1BSRVBST0NFU1NPUikKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisKICAgICBtYWNybyhfX3dpbmRvd3NfY29tcGlsZXJfY2xhbmcgbGFuZykKICAgICAgIHNldChfQ09NUElMRV8ke2xhbmd9ICIke19DT01QSUxFXyR7bGFuZ31fTVNWQ30iKQogICAgICAgX193aW5kb3dzX2NvbXBpbGVyX21zdmMoJHtsYW5nfSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1FbWJhcmNhZGVyby5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1FbWJhcmNhZGVyby5jbWFrZQppbmRleCAzNzBiNTZlLi4wYzI0NzM5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtRW1iYXJjYWRlcm8uY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUVtYmFyY2FkZXJvLmNtYWtlCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgIyBQcmVjb21waWxlIEhlYWRlcnMKICAgaWYgKEVNQkFSQ0FERVJPKQogICAgIHNldChDTUFLRV9QQ0hfRVhURU5TSU9OIC5wY2gpCi0gICAgc2V0KENNQUtFXyR7bGFuZ31fQ09NUElMRV9PUFRJT05TX1VTRV9QQ0ggLVhjbGFuZyAtaW5jbHVkZS1wY2ggLVhjbGFuZyA8UENIX0ZJTEU+KQorICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIC1YY2xhbmcgLWluY2x1ZGUtcGNoIC1YY2xhbmcgPFBDSF9GSUxFPiAtWGNsYW5nIC1pbmNsdWRlIC1YY2xhbmcgPFBDSF9IRUFERVI+KQogICAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT1BUSU9OU19DUkVBVEVfUENIIC1YY2xhbmcgLWVtaXQtcGNoIC1YY2xhbmcgLWluY2x1ZGUgLVhjbGFuZyA8UENIX0hFQURFUj4pCiAgIGVuZGlmKCkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUdOVS1BU00uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtR05VLUFTTS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjAwODkyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUdOVS1BU00uY21ha2UKQEAgLTAsMCArMSwyIEBACitpbmNsdWRlKFBsYXRmb3JtL1dpbmRvd3MtR05VKQorX193aW5kb3dzX2NvbXBpbGVyX2dudShBU00pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtR05VLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUdOVS5jbWFrZQppbmRleCA2YmYyNDVjLi5hMmUzODExIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtR05VLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1HTlUuY21ha2UKQEAgLTI1LDcgKzI1LDcgQEAKIAogaWYoTUlOR1cpCiAgIHNldChDTUFLRV9GSU5EX0xJQlJBUllfUFJFRklYRVMgImxpYiIgIiIpCi0gIHNldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgIi5kbGwiICIuZGxsLmEiICIuYSIgIi5saWIiKQorICBzZXQoQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTICIuZGxsLmEiICIuYSIgIi5saWIiKQogICBzZXQoQ01BS0VfQ19TVEFOREFSRF9MSUJSQVJJRVNfSU5JVCAiLWxrZXJuZWwzMiAtbHVzZXIzMiAtbGdkaTMyIC1sd2luc3Bvb2wgLWxzaGVsbDMyIC1sb2xlMzIgLWxvbGVhdXQzMiAtbHV1aWQgLWxjb21kbGczMiAtbGFkdmFwaTMyIikKICAgc2V0KENNQUtFX0NYWF9TVEFOREFSRF9MSUJSQVJJRVNfSU5JVCAiJHtDTUFLRV9DX1NUQU5EQVJEX0xJQlJBUklFU19JTklUfSIpCiBlbmRpZigpCkBAIC00NywxNiArNDcsMTIgQEAKICAgc2V0KF9fV0lORE9XU19HTlVfTERfUkVTUE9OU0UgMCkKIGVuZGlmKCkKIAotaWYoTk9UIENNQUtFX0dFTkVSQVRPUl9SQyBBTkQgQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIlVuaXggTWFrZWZpbGVzIikKLSAgc2V0KENNQUtFX0dFTkVSQVRPUl9SQyB3aW5kcmVzKQotZW5kaWYoKQotCiBtYWNybyhfX3dpbmRvd3NfY29tcGlsZXJfZ251IGxhbmcpCiAKICAgaWYoTVNZUyBPUiBNSU5HVykKICAgICAjIENyZWF0ZSBhcmNoaXZpbmcgcnVsZXMgdG8gc3VwcG9ydCBsYXJnZSBvYmplY3QgZmlsZSBsaXN0cyBmb3Igc3RhdGljIGxpYnJhcmllcy4KICAgICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0NSRUFURSAiPENNQUtFX0FSPiBxYyA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKLSAgICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxICA8VEFSR0VUPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IikKKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9BUkNISVZFX0FQUEVORCAiPENNQUtFX0FSPiBxIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4iKQogICAgIHNldChDTUFLRV8ke2xhbmd9X0FSQ0hJVkVfRklOSVNIICI8Q01BS0VfUkFOTElCPiA8VEFSR0VUPiIpCiAKICAgICAjIEluaXRpYWxpemUgQyBsaW5rIHR5cGUgc2VsZWN0aW9uIGZsYWdzLiAgVGhlc2UgZmxhZ3MgYXJlIHVzZWQgd2hlbgpAQCAtMTA4LDcgKzEwNCw3IEBACiAgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TSEFSRURfTElCUkFSWQogICAgICI8Q01BS0VfJHtsYW5nfV9DT01QSUxFUj4gPENNQUtFX1NIQVJFRF9MSUJSQVJZXyR7bGFuZ31fRkxBR1M+IDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8TElOS19GTEFHUz4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV8ke2xhbmd9X0ZMQUdTPiAtbyA8VEFSR0VUPiAtV2wsLS1vdXQtaW1wbGliLDxUQVJHRVRfSU1QTElCPiAke0NNQUtFX0dOVUxEX0lNQUdFX1ZFUlNJT059IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+IikKICAgc2V0KENNQUtFXyR7bGFuZ31fTElOS19FWEVDVVRBQkxFCi0gICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+IC1XbCwtLW91dC1pbXBsaWIsPFRBUkdFVF9JTVBMSUI+ICR7Q01BS0VfR05VTERfSU1BR0VfVkVSU0lPTn0gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV8ke2xhbmd9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLVdsLC0tb3V0LWltcGxpYiw8VEFSR0VUX0lNUExJQj4gJHtDTUFLRV9HTlVMRF9JTUFHRV9WRVJTSU9OfSA8TElOS19MSUJSQVJJRVM+IikKIAogICBsaXN0KEFQUEVORCBDTUFLRV8ke2xhbmd9X0FCSV9GSUxFUyAiUGxhdGZvcm0vV2luZG93cy1HTlUtJHtsYW5nfS1BQkkiKQogCkBAIC0xMjQsNyArMTIwLDcgQEAKICAgICAgIHN0cmluZyhSRVBMQUNFICI8T0JKRUNUUz4iICItV2wsLS13aG9sZS1hcmNoaXZlIDxPQkpFQ1RfRElSPi9vYmplY3RzLmEgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSIKICAgICAgICAgQ01BS0VfJHtsYW5nfV8ke3J1bGV9ICIke0NNQUtFXyR7bGFuZ31fJHtydWxlfX0iKQogICAgICAgc2V0KENNQUtFXyR7bGFuZ31fJHtydWxlfQotICAgICAgICAiPENNQUtFX0NPTU1BTkQ+IC1FIHJlbW92ZSAtZiA8T0JKRUNUX0RJUj4vb2JqZWN0cy5hIgorICAgICAgICAiPENNQUtFX0NPTU1BTkQ+IC1FIHJtIC1mIDxPQkpFQ1RfRElSPi9vYmplY3RzLmEiCiAgICAgICAgICI8Q01BS0VfQVI+IGNyIDxPQkpFQ1RfRElSPi9vYmplY3RzLmEgPE9CSkVDVFM+IgogICAgICAgICAiJHtDTUFLRV8ke2xhbmd9XyR7cnVsZX19IgogICAgICAgICApCkBAIC0xMzIsNyArMTI4LDcgQEAKICAgZW5kaWYoKQogCiAgIGlmKE5PVCBDTUFLRV9SQ19DT01QSUxFUl9JTklUIEFORCBOT1QgQ01BS0VfR0VORVJBVE9SX1JDKQotICAgIHNldChDTUFLRV9SQ19DT01QSUxFUl9JTklUIHdpbmRyZXMpCisgICAgc2V0KENNQUtFX1JDX0NPTVBJTEVSX0lOSVQgJHtfQ01BS0VfVE9PTENIQUlOX1BSRUZJWH13aW5kcmVzKQogICBlbmRpZigpCiAKICAgZW5hYmxlX2xhbmd1YWdlKFJDKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUludGVsLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLUludGVsLmNtYWtlCmluZGV4IDk2YjE3NjAuLjVkOGY3ZmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1JbnRlbC5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtSW50ZWwuY21ha2UKQEAgLTExLDcgKzExLDcgQEAKIGluY2x1ZGUoUGxhdGZvcm0vV2luZG93cy1NU1ZDKQogbWFjcm8oX193aW5kb3dzX2NvbXBpbGVyX2ludGVsIGxhbmcpCiAgIF9fd2luZG93c19jb21waWxlcl9tc3ZjKCR7bGFuZ30pCi0gIHN0cmluZyhSRVBMQUNFICI8Q01BS0VfTElOS0VSPiAvbGliIiAieGlsaWIiIENNQUtFXyR7bGFuZ31fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZICIke0NNQUtFXyR7bGFuZ31fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZfSIpCisgIHN0cmluZyhSRVBMQUNFICI8Q01BS0VfQVI+IiAieGlsaWIiIENNQUtFXyR7bGFuZ31fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZICIke0NNQUtFXyR7bGFuZ31fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZfSIpCiAgIGZvcmVhY2gocnVsZSBDUkVBVEVfU0hBUkVEX0xJQlJBUlkgQ1JFQVRFX1NIQVJFRF9NT0RVTEUgTElOS19FWEVDVVRBQkxFKQogICAgIHN0cmluZyhSRVBMQUNFICI8Q01BS0VfTElOS0VSPiIgInhpbGluayIgQ01BS0VfJHtsYW5nfV8ke3J1bGV9ICIke0NNQUtFXyR7bGFuZ31fJHtydWxlfX0iKQogICBlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1NU1ZDLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLU1TVkMuY21ha2UKaW5kZXggZTBmMzNiZC4uZTI3MmRhOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLU1TVkMuY21ha2UKKysrIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLU1TVkMuY21ha2UKQEAgLTIxNyw3ICsyMTcsNyBAQAogZWxzZSgpCiAgIHNldChfUExBVEZPUk1fREVGSU5FUyAiL0RXSU4zMiIpCiAKLSAgaWYoX01TVkNfQ19BUkNISVRFQ1RVUkVfRkFNSUxZIFNUUkVRVUFMICJBUk0iIE9SIF9NU1ZDX0NYWF9BUkNISVRFQ1RVUkVfRkFNSUxZIFNUUkVRVUFMICJBUk0iIE9SIF9NU1ZDX0NfQVJDSElURUNUVVJFX0ZBTUlMWSBTVFJFUVVBTCAiQVJNNjQiIE9SIF9NU1ZDX0NYWF9BUkNISVRFQ1RVUkVfRkFNSUxZIFNUUkVRVUFMICJBUk02NCIpCisgIGlmKF9NU1ZDX0NfQVJDSElURUNUVVJFX0ZBTUlMWSBTVFJFUVVBTCAiQVJNIiBPUiBfTVNWQ19DWFhfQVJDSElURUNUVVJFX0ZBTUlMWSBTVFJFUVVBTCAiQVJNIikKICAgICBzZXQoQ01BS0VfQ19TVEFOREFSRF9MSUJSQVJJRVNfSU5JVCAia2VybmVsMzIubGliIHVzZXIzMi5saWIiKQogICBlbHNlaWYoTVNWQ19WRVJTSU9OIEdSRUFURVIgMTMxMCkKICAgICBpZihDTUFLRV9WU19QTEFURk9STV9UT09MU0VUIE1BVENIRVMgInZbMC05XStfY2xhbmdfLioiKQpAQCAtMzE2LDcgKzMxNiw3IEBACiAgICAgIiR7X0NNQUtFX1ZTX0xJTktfRExMfTxDTUFLRV9MSU5LRVI+ICR7Q01BS0VfQ0xfTk9MT0dPfSA8T0JKRUNUUz4gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9IC9vdXQ6PFRBUkdFVD4gL2ltcGxpYjo8VEFSR0VUX0lNUExJQj4gL3BkYjo8VEFSR0VUX1BEQj4gL2RsbCAvdmVyc2lvbjo8VEFSR0VUX1ZFUlNJT05fTUFKT1I+LjxUQVJHRVRfVkVSU0lPTl9NSU5PUj4ke19QTEFURk9STV9MSU5LX0ZMQUdTfSA8TElOS19GTEFHUz4gPExJTktfTElCUkFSSUVTPiAke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKIAogICBzZXQoQ01BS0VfJHtsYW5nfV9DUkVBVEVfU0hBUkVEX01PRFVMRSAke0NNQUtFXyR7bGFuZ31fQ1JFQVRFX1NIQVJFRF9MSUJSQVJZfSkKLSAgc2V0KENNQUtFXyR7bGFuZ31fQ1JFQVRFX1NUQVRJQ19MSUJSQVJZICAiPENNQUtFX0xJTktFUj4gL2xpYiAke0NNQUtFX0NMX05PTE9HT30gPExJTktfRkxBR1M+IC9vdXQ6PFRBUkdFVD4gPE9CSkVDVFM+ICIpCisgIHNldChDTUFLRV8ke2xhbmd9X0NSRUFURV9TVEFUSUNfTElCUkFSWSAgIjxDTUFLRV9BUj4gJHtDTUFLRV9DTF9OT0xPR099IDxMSU5LX0ZMQUdTPiAvb3V0OjxUQVJHRVQ+IDxPQkpFQ1RTPiAiKQogCiAgIHNldChDTUFLRV8ke2xhbmd9X0NPTVBJTEVfT0JKRUNUCiAgICAgIjxDTUFLRV8ke2xhbmd9X0NPTVBJTEVSPiAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gJHtDTUFLRV9DTF9OT0xPR099JHtfQ09NUElMRV8ke2xhbmd9fSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC9GbzxPQkpFQ1Q+IC9GZDxUQVJHRVRfQ09NUElMRV9QREI+JHtfRlNfJHtsYW5nfX0gLWMgPFNPVVJDRT4ke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKQEAgLTM1Niw2ICszNTYsMTEgQEAKICAgICBzZXQoX0NNQUtFXyR7bGFuZ31fSVBPX1NVUFBPUlRFRF9CWV9DTUFLRSBZRVMpCiAgICAgc2V0KF9DTUFLRV8ke2xhbmd9X0lQT19NQVlfQkVfU1VQUE9SVEVEX0JZX0NPTVBJTEVSIFlFUykKIAorICAgIGlmKENNQUtFXyR7bGFuZ31fQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy40LjApCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfVEFSR0VUICItdGFyZ2V0ICIpCisgICAgZWxzZSgpCisgICAgICBzZXQoQ01BS0VfJHtsYW5nfV9DT01QSUxFX09QVElPTlNfVEFSR0VUICItLXRhcmdldD0iKQorICAgIGVuZGlmKCkKICAgICAjICctZmx0bz10aGluJyBhdmFpbGFibGUgc2luY2UgQ2xhbmcgMy45IGFuZCBYY29kZSA4CiAgICAgIyAqIGh0dHA6Ly9jbGFuZy5sbHZtLm9yZy9kb2NzL1RoaW5MVE8uaHRtbCNjbGFuZy1sbHZtCiAgICAgIyAqIGh0dHBzOi8vdHJhYy5tYWNwb3J0cy5vcmcvd2lraS9YY29kZVZlcnNpb25JbmZvCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtTlZJRElBLUNVREEuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtTlZJRElBLUNVREEuY21ha2UKaW5kZXggOTRkNzdiOS4uYTg4ZjRiYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLU5WSURJQS1DVURBLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1OVklESUEtQ1VEQS5jbWFrZQpAQCAtMSwxMSArMSwxMSBAQAogaW5jbHVkZShQbGF0Zm9ybS9XaW5kb3dzLU1TVkMpCiAKIHNldChDTUFLRV9DVURBX0NPTVBJTEVfUFRYX0NPTVBJTEFUSU9OCi0gICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtDTUFLRV9DVURBX0hPU1RfRkxBR1N9IDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLXggY3UgLXB0eCA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCisgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLXB0eCA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFX1NFUEFSQUJMRV9DT01QSUxBVElPTgotICAiPENNQUtFX0NVREFfQ09NUElMRVI+ICR7Q01BS0VfQ1VEQV9IT1NUX0ZMQUdTfSA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC14IGN1IC1kYyA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCisgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLWRjIDxTT1VSQ0U+IC1vIDxPQkpFQ1Q+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTIikKIHNldChDTUFLRV9DVURBX0NPTVBJTEVfV0hPTEVfQ09NUElMQVRJT04KLSAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke0NNQUtFX0NVREFfSE9TVF9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAteCBjdSAtYyA8U09VUkNFPiAtbyA8T0JKRUNUPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyIpCisgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAke19DTUFLRV9DT01QSUxFX0FTX0NVREFfRkxBR30gLWMgPFNPVVJDRT4gLW8gPE9CSkVDVD4gLVhjb21waWxlcj0tRmQ8VEFSR0VUX0NPTVBJTEVfUERCPiwtRlMiKQogCiBzZXQoX19JTVBMSUNUX0xJTktTICkKIGZvcmVhY2goZGlyICR7Q01BS0VfQ1VEQV9IT1NUX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQpAQCAtMjMsMTggKzIzLDEzIEBACiAgICIke19DTUFLRV9WU19MSU5LX0RMTH08Q01BS0VfTElOS0VSPiAke0NNQUtFX0NMX05PTE9HT30gPE9CSkVDVFM+ICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSAvb3V0OjxUQVJHRVQ+IC9pbXBsaWI6PFRBUkdFVF9JTVBMSUI+IC9wZGI6PFRBUkdFVF9QREI+IC9kbGwgL3ZlcnNpb246PFRBUkdFVF9WRVJTSU9OX01BSk9SPi48VEFSR0VUX1ZFUlNJT05fTUlOT1I+JHtfUExBVEZPUk1fTElOS19GTEFHU30gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9MSU5LU30gJHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCiAKIHNldChDTUFLRV9DVURBX0NSRUFURV9TSEFSRURfTU9EVUxFICR7Q01BS0VfQ1VEQV9DUkVBVEVfU0hBUkVEX0xJQlJBUll9KQotc2V0KENNQUtFX0NVREFfQ1JFQVRFX1NUQVRJQ19MSUJSQVJZICAiPENNQUtFX0xJTktFUj4gL2xpYiAke0NNQUtFX0NMX05PTE9HT30gPExJTktfRkxBR1M+IC9vdXQ6PFRBUkdFVD4gPE9CSkVDVFM+ICIpCitzZXQoQ01BS0VfQ1VEQV9DUkVBVEVfU1RBVElDX0xJQlJBUlkgICI8Q01BS0VfQVI+ICR7Q01BS0VfQ0xfTk9MT0dPfSA8TElOS19GTEFHUz4gL291dDo8VEFSR0VUPiA8T0JKRUNUUz4gIikKIHNldChDTUFLRV9DVURBX0xJTktFUl9TVVBQT1JUU19QREIgT04pCiBzZXQoQ01BS0VfQ1VEQV9MSU5LX0VYRUNVVEFCTEUKICAgIiR7X0NNQUtFX1ZTX0xJTktfRVhFfTxDTUFLRV9MSU5LRVI+ICR7Q01BS0VfQ0xfTk9MT0dPfSA8T0JKRUNUUz4gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9IC9vdXQ6PFRBUkdFVD4gL2ltcGxpYjo8VEFSR0VUX0lNUExJQj4gL3BkYjo8VEFSR0VUX1BEQj4gL3ZlcnNpb246PFRBUkdFVF9WRVJTSU9OX01BSk9SPi48VEFSR0VUX1ZFUlNJT05fTUlOT1I+JHtfUExBVEZPUk1fTElOS19GTEFHU30gPExJTktfRkxBR1M+IDxMSU5LX0xJQlJBUklFUz4ke19fSU1QTElDVF9MSU5LU30gJHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCiB1bnNldChfQ01BS0VfVlNfTElOS19FWEUpCiB1bnNldChfQ01BS0VfVlNfTElOS19FWEUpCiAKLWlmKENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgIjguMC4wIikKLSAgc2V0KF9DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTICItV25vLWRlcHJlY2F0ZWQtZ3B1LXRhcmdldHMiKQotZWxzZSgpCi0gIHNldChfQ01BS0VfQ1VEQV9FWFRSQV9ERVZJQ0VfTElOS19GTEFHUyAiIikKLWVuZGlmKCkKIAogIyBBZGQgaW1wbGljaXQgaG9zdCBsaW5rIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBkZXZpY2UgbGlicmFyaWVzCiAjIHRvIHRoZSBkZXZpY2UgbGluayBsaW5lLgpAQCAtNTEsMTEgKzQ2LDkgQEAKIHVuc2V0KF9fSU1QTElDVF9ETElOS19ESVJTKQogCiBzZXQoQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19MSUJSQVJZCi0gICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+ICR7X0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1N9IC1zaGFyZWQgLWRsaW5rIDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTJHtfX0lNUExJQ1RfRExJTktfRkxBR1N9IikKKyAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiAke19DTUFLRV9DVURBX0VYVFJBX0ZMQUdTfSA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+ICR7X0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1N9IC1zaGFyZWQgLWRsaW5rIDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTJHtfX0lNUExJQ1RfRExJTktfRkxBR1N9IikKIHNldChDTUFLRV9DVURBX0RFVklDRV9MSU5LX0VYRUNVVEFCTEUKLSAgIjxDTUFLRV9DVURBX0NPTVBJTEVSPiA8RkxBR1M+ICR7X0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1N9IC1zaGFyZWQgLWRsaW5rIDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IC1YY29tcGlsZXI9LUZkPFRBUkdFVF9DT01QSUxFX1BEQj4sLUZTJHtfX0lNUExJQ1RfRExJTktfRkxBR1N9IikKLQotdW5zZXQoX0NNQUtFX0NVREFfRVhUUkFfREVWSUNFX0xJTktfRkxBR1MpCisgICI8Q01BS0VfQ1VEQV9DT01QSUxFUj4gJHtfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHU30gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxMSU5LX0ZMQUdTPiAke19DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTfSAtc2hhcmVkIC1kbGluayA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiAtWGNvbXBpbGVyPS1GZDxUQVJHRVRfQ09NUElMRV9QREI+LC1GUyR7X19JTVBMSUNUX0RMSU5LX0ZMQUdTfSIpCiB1bnNldChfX0lNUExJQ1RfRExJTktfRkxBR1MpCiAKIHN0cmluZyhSRVBMQUNFICIvRCIgIi1EIiBfUExBVEZPUk1fREVGSU5FU19DVURBICIke19QTEFURk9STV9ERUZJTkVTfSR7X1BMQVRGT1JNX0RFRklORVNfQ1hYfSIpCkBAIC03Niw2ICs2OSwxNCBAQAogZW5kaWYoKQogdW5zZXQoX2NtcDAwOTIpCiAKK3NldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9MSU5LX09QVElPTlNfU1RBVElDICAiY3VkYWRldnJ0O2N1ZGFydF9zdGF0aWMiKQorc2V0KENNQUtFX0NVREFfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU19TSEFSRUQgICJjdWRhZGV2cnQ7Y3VkYXJ0IikKK3NldChDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWV9MSU5LX09QVElPTlNfTk9ORSAgICAiIikKKworaWYoVU5JWCkKKyAgbGlzdChBUFBFTkQgQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUllfTElOS19PUFRJT05TX1NUQVRJQyAicnQiICJwdGhyZWFkIiAiZGwiKQorZW5kaWYoKQorCiBzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1NfSU5JVCAiICR7UExBVEZPUk1fREVGSU5FU19DVURBfSAtRF9XSU5ET1dTIC1YY29tcGlsZXI9XCIke19XM30ke19GTEFHU19DWFh9XCIiKQogc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTX0RFQlVHX0lOSVQgIiAtWGNvbXBpbGVyPVwiJHtfTURkfS1aaSAtT2IwIC1PZCAke19SVEMxfVwiIikKIHN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHU19SRUxFQVNFX0lOSVQgIiAtWGNvbXBpbGVyPVwiJHtfTUR9LU8yIC1PYjJcIiAtRE5ERUJVRyIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtT3BlbldhdGNvbS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1PcGVuV2F0Y29tLmNtYWtlCmluZGV4IDc2Y2QyOGIuLjcwMDU1ZGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1PcGVuV2F0Y29tLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1PcGVuV2F0Y29tLmNtYWtlCkBAIC0xLDEyOSArMSwzMiBAQAogIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgogCi0KICMgVGhpcyBtb2R1bGUgaXMgc2hhcmVkIGJ5IG11bHRpcGxlIGxhbmd1YWdlczsgdXNlIGluY2x1ZGUgYmxvY2tlci4KLWlmKF9fV0lORE9XU19PUEVOV0FUQ09NKQotICByZXR1cm4oKQotZW5kaWYoKQotc2V0KF9fV0lORE9XU19PUEVOV0FUQ09NIDEpCitpbmNsdWRlX2d1YXJkKCkKIAotc2V0KENNQUtFX0xJQlJBUllfUEFUSF9GTEFHICJsaWJwYXRoICIpCi1zZXQoQ01BS0VfTElOS19MSUJSQVJZX0ZMQUcgImxpYnJhcnkgIikKLXNldChDTUFLRV9MSU5LX0xJQlJBUllfRklMRV9GTEFHICJsaWJyYXJ5ICIpCitzZXQoQ01BS0VfQlVJTERfVFlQRV9JTklUIERlYnVnKQogCi1pZihDTUFLRV9WRVJCT1NFX01BS0VGSUxFKQotICBzZXQoQ01BS0VfV0NMX1FVSUVUKQotICBzZXQoQ01BS0VfV0xJTktfUVVJRVQpCi0gIHNldChDTUFLRV9MSUJfUVVJRVQpCi1lbHNlKCkKLSAgc2V0KENNQUtFX1dDTF9RVUlFVCAiLXpxIikKLSAgc2V0KENNQUtFX1dMSU5LX1FVSUVUICJvcHRpb24gcXVpZXQiKQotICBzZXQoQ01BS0VfTElCX1FVSUVUICItcSIpCi1lbmRpZigpCi0KLXN0cmluZyhBUFBFTkQgQ01BS0VfRVhFX0xJTktFUl9GTEFHU19JTklUICIgIikKIHNldChDTUFLRV9DUkVBVEVfV0lOMzJfRVhFICJzeXN0ZW0gbnRfd2luIiApCiBzZXQoQ01BS0VfQ1JFQVRFX0NPTlNPTEVfRVhFICJzeXN0ZW0gbnQiICkKIHN0cmluZyhBUFBFTkQgQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU19JTklUICIgc3lzdGVtIG50X2RsbCIpCiBzdHJpbmcoQVBQRU5EIENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1NfSU5JVCAiIHN5c3RlbSBudF9kbGwiKQotZm9yZWFjaCh0eXBlIFNIQVJFRCBNT0RVTEUgRVhFKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7dHlwZX1fTElOS0VSX0ZMQUdTX0RFQlVHX0lOSVQgIiBkZWJ1ZyBhbGwgb3B0IG1hcCIpCi0gIHN0cmluZyhBUFBFTkQgQ01BS0VfJHt0eXBlfV9MSU5LRVJfRkxBR1NfUkVMV0lUSERFQklORk9fSU5JVCAiIGRlYnVnIGFsbCBvcHQgbWFwIikKLWVuZGZvcmVhY2goKQogCiBzZXQoQ01BS0VfQ19DT01QSUxFX09QVElPTlNfRExMICItYmQiKSAjIE5vdGU6IFRoaXMgdmFyaWFibGUgaXMgYSAnOycgc2VwYXJhdGVkIGxpc3QKIHNldChDTUFLRV9TSEFSRURfTElCUkFSWV9DX0ZMQUdTICItYmQiKSAjIC4uLiB3aGlsZSB0aGlzIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZy4KIAogc2V0KENNQUtFX1JDX0NPTVBJTEVSICJyYyIgKQogCi1zZXQoQ01BS0VfQlVJTERfVFlQRV9JTklUIERlYnVnKQotCiAjIHNpbmdsZS9tdWx0aS10aHJlYWRlZCAgICAgICAgICAgICAgICAgLy1ibQogIyBzdGF0aWMvRExMIHJ1bi10aW1lIGxpYnJhcmllcyAgICAgICAgIC8tYnIKICMgZGVmYXVsdCBpcyBzZXR1cCBmb3IgbXVsdGktdGhyZWFkZWQgKyBETEwgcnVuLXRpbWUgbGlicmFyaWVzCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NfRkxBR1NfSU5JVCAiIC1idD1udCAtdzMgLWRXSU4zMiAtYnIgLWJtIikKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1hYX0ZMQUdTX0lOSVQgIiAtYnQ9bnQgLXhzIC13MyAtZFdJTjMyIC1iciAtYm0iKQotZm9yZWFjaChsYW5nIEMgQ1hYKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfREVCVUdfSU5JVCAiIC1kMiIpCi0gIHN0cmluZyhBUFBFTkQgQ01BS0VfJHtsYW5nfV9GTEFHU19NSU5TSVpFUkVMX0lOSVQgIiAtcyAtb3MgLWQwIC1kTkRFQlVHIikKLSAgc3RyaW5nKEFQUEVORCBDTUFLRV8ke2xhbmd9X0ZMQUdTX1JFTEVBU0VfSU5JVCAiIC1zIC1vdCAtZDAgLWROREVCVUciKQotICBzdHJpbmcoQVBQRU5EIENNQUtFXyR7bGFuZ31fRkxBR1NfUkVMV0lUSERFQklORk9fSU5JVCAiIC1zIC1vdCAtZDEgLWROREVCVUciKQotZW5kZm9yZWFjaCgpCitzdHJpbmcoQVBQRU5EIENNQUtFX0NfRkxBR1NfSU5JVCAiIC1idD1udCAtZFdJTjMyIC1iciAtYm0iKQorc3RyaW5nKEFQUEVORCBDTUFLRV9DWFhfRkxBR1NfSU5JVCAiIC1idD1udCAteHMgLWRXSU4zMiAtYnIgLWJtIikKIAotZm9yZWFjaCh0eXBlIENSRUFURV9TSEFSRURfTElCUkFSWSBDUkVBVEVfU0hBUkVEX01PRFVMRSBMSU5LX0VYRUNVVEFCTEUpCi0gIHNldChDTUFLRV9DXyR7dHlwZX1fVVNFX1dBVENPTV9RVU9URSAxKQotICBzZXQoQ01BS0VfQ1hYXyR7dHlwZX1fVVNFX1dBVENPTV9RVU9URSAxKQotZW5kZm9yZWFjaCgpCi0KLXNldChDTUFLRV9DX0NSRUFURV9JTVBPUlRfTElCUkFSWQotICAid2xpYiAtYyAtcSAtbiAtYiA8VEFSR0VUX0lNUExJQj4gKzxUQVJHRVRfUVVPVEVEPiIpCi1zZXQoQ01BS0VfQ1hYX0NSRUFURV9JTVBPUlRfTElCUkFSWSAke0NNQUtFX0NfQ1JFQVRFX0lNUE9SVF9MSUJSQVJZfSkKLQotc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFCi0gICAgIndsaW5rICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSAke0NNQUtFX1dMSU5LX1FVSUVUfSBuYW1lIDxUQVJHRVQ+IDxMSU5LX0ZMQUdTPiBmaWxlIHs8T0JKRUNUUz59IDxMSU5LX0xJQlJBUklFUz4gJHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCi0KLQotc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUgJHtDTUFLRV9DX0xJTktfRVhFQ1VUQUJMRX0pCi0KLSMgY29tcGlsZSBhIEMrKyBmaWxlIGludG8gYW4gb2JqZWN0IGZpbGUKLXNldChDTUFLRV9DWFhfQ09NUElMRV9PQkpFQ1QKLSAgICAiPENNQUtFX0NYWF9DT01QSUxFUj4gJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9ICR7Q01BS0VfV0NMX1FVSUVUfSAtZCsgPERFRklORVM+IDxJTkNMVURFUz4gPEZMQUdTPiAtZm88T0JKRUNUPiAtYyAtY2MrKyA8U09VUkNFPiR7Q01BS0VfRU5EX1RFTVBfRklMRX0iKQotCi0jIGNvbXBpbGUgYSBDIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQotc2V0KENNQUtFX0NfQ09NUElMRV9PQkpFQ1QKLSAgICAiPENNQUtFX0NfQ09NUElMRVI+ICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSAke0NNQUtFX1dDTF9RVUlFVH0gLWQrIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLWZvPE9CSkVDVD4gLWMgLWNjIDxTT1VSQ0U+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCi0KLSMgcHJlcHJvY2VzcyBhIEMgc291cmNlIGZpbGUKLXNldChDTUFLRV9DX0NSRUFURV9QUkVQUk9DRVNTRURfU09VUkNFCi0gICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gJHtDTUFLRV9XQ0xfUVVJRVR9IC1kKyA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1mbzxQUkVQUk9DRVNTRURfU09VUkNFPiAtcGwgLWNjIDxTT1VSQ0U+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCi0KLSMgcHJlcHJvY2VzcyBhIEMrKyBzb3VyY2UgZmlsZQotc2V0KENNQUtFX0NYWF9DUkVBVEVfUFJFUFJPQ0VTU0VEX1NPVVJDRQotICAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gJHtDTUFLRV9XQ0xfUVVJRVR9IC1kKyA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1mbzxQUkVQUk9DRVNTRURfU09VUkNFPiAtcGwgLWNjKysgPFNPVVJDRT4ke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKLQotc2V0KENNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKLSAid2xpbmsgJHtDTUFLRV9TVEFSVF9URU1QX0ZJTEV9ICR7Q01BS0VfV0xJTktfUVVJRVR9IG5hbWUgPFRBUkdFVD4gPExJTktfRkxBR1M+IG9wdGlvbiBpbXBsaWI9PFRBUkdFVF9JTVBMSUI+IGZpbGUgezxPQkpFQ1RTPn0gPExJTktfTElCUkFSSUVTPiAke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKLXN0cmluZyhSRVBMQUNFICIgb3B0aW9uIGltcGxpYj08VEFSR0VUX0lNUExJQj4iICIiCi0gIENNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRSAiJHtDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZfSIpCi0KLSMgY3JlYXRlIGEgQyBzaGFyZWQgbGlicmFyeQotc2V0KENNQUtFX0NfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZICR7Q01BS0VfQ1hYX0NSRUFURV9TSEFSRURfTElCUkFSWX0pCi0KLSMgY3JlYXRlIGEgQyBzaGFyZWQgbW9kdWxlCi1zZXQoQ01BS0VfQ19DUkVBVEVfU0hBUkVEX01PRFVMRSAke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRX0pCi0KLSMgY3JlYXRlIGEgQysrIHN0YXRpYyBsaWJyYXJ5Ci1zZXQoQ01BS0VfQ1hYX0NSRUFURV9TVEFUSUNfTElCUkFSWSAgIndsaWIgJHtDTUFLRV9MSUJfUVVJRVR9IC1jIC1uIC1iIDxUQVJHRVRfUVVPVEVEPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+ICIpCi0KLSMgY3JlYXRlIGEgQyBzdGF0aWMgbGlicmFyeQotc2V0KENNQUtFX0NfQ1JFQVRFX1NUQVRJQ19MSUJSQVJZICR7Q01BS0VfQ1hYX0NSRUFURV9TVEFUSUNfTElCUkFSWX0pCi0KLWlmKE5PVCBfQ01BS0VfV0FUQ09NX1ZFUlNJT04pCi0gIHNldChfQ01BS0VfV0FUQ09NX1ZFUlNJT04gMSkKLSAgaWYoQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OKQotICAgIHNldChfY29tcGlsZXJfdmVyc2lvbiAke0NNQUtFX0NfQ09NUElMRVJfVkVSU0lPTn0pCi0gICAgc2V0KF9jb21waWxlcl9pZCAke0NNQUtFX0NfQ09NUElMRVJfSUR9KQotICBlbHNlKCkKLSAgICBzZXQoX2NvbXBpbGVyX3ZlcnNpb24gJHtDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTn0pCi0gICAgc2V0KF9jb21waWxlcl9pZCAke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0pCitpZihDTUFLRV9DUk9TU0NPTVBJTElORykKKyAgaWYoTk9UIENNQUtFX0NfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUykKKyAgICBzZXQoQ01BS0VfQ19TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTICRFTlZ7V0FUQ09NfS9oICRFTlZ7V0FUQ09NfS9oL250KQogICBlbmRpZigpCi0gIHNldChXQVRDT00xNikKLSAgc2V0KFdBVENPTTE3KQotICBzZXQoV0FUQ09NMTgpCi0gIHNldChXQVRDT00xOSkKLSAgaWYoIiR7X2NvbXBpbGVyX2lkfSIgU1RSRVFVQUwgIk9wZW5XYXRjb20iKQotICAgIGlmKCIke19jb21waWxlcl92ZXJzaW9ufSIgVkVSU0lPTl9MRVNTIDEuNykKLSAgICAgIHNldChXQVRDT00xNiAxKQotICAgIGVuZGlmKCkKLSAgICBpZigiJHtfY29tcGlsZXJfdmVyc2lvbn0iIFZFUlNJT05fRVFVQUwgMS43KQotICAgICAgc2V0KFdBVENPTTE3IDEpCi0gICAgZW5kaWYoKQotICAgIGlmKCIke19jb21waWxlcl92ZXJzaW9ufSIgVkVSU0lPTl9FUVVBTCAxLjgpCi0gICAgICBzZXQoV0FUQ09NMTggMSkKLSAgICBlbmRpZigpCi0gICAgaWYoIiR7X2NvbXBpbGVyX3ZlcnNpb259IiBWRVJTSU9OX0VRVUFMIDEuOSkKLSAgICAgIHNldChXQVRDT00xOSAxKQotICAgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NYWF9TVEFOREFSRF9JTkNMVURFX0RJUkVDVE9SSUVTKQorICAgIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfSU5DTFVERV9ESVJFQ1RPUklFUyAkRU5We1dBVENPTX0vaCAkRU5We1dBVENPTX0vaC9udCkKICAgZW5kaWYoKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLVBHSS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1QR0kuY21ha2UKaW5kZXggYWQ3N2U4YS4uODE2NjI0MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLVBHSS5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtUEdJLmNtYWtlCkBAIC05LDkgKzksMTAgQEAKIHNldChfX1dJTkRPV1NfQ09NUElMRVJfUEdJIDEpCiAKICMgUEdJIG9uIFdpbmRvd3MgZG9lc24ndCBzdXBwb3J0IHBhcmFsbGVsIGNvbXBpbGUgcHJvY2Vzc2VzCi1pZihOT1QgREVGSU5FRCBDTUFLRV9KT0JfUE9PTF9MSU5LIE9SIE5PVCBERUZJTkVEIENNQUtFX0pPQl9QT09MX0NPTVBJTEUpCitpZihOT1QgREVGSU5FRCBDTUFLRV9KT0JfUE9PTF9MSU5LIE9SIE5PVCBERUZJTkVEIENNQUtFX0pPQl9QT09MX0NPTVBJTEUgT1IgTk9UIERFRklORUQgQ01BS0VfSk9CX1BPT0xfUFJFQ09NUElMRV9IRUFERVIpCiAgIHNldChDTUFLRV9KT0JfUE9PTF9MSU5LIFBHSVRhc2tQb29sKQogICBzZXQoQ01BS0VfSk9CX1BPT0xfQ09NUElMRSBQR0lUYXNrUG9vbCkKKyAgc2V0KENNQUtFX0pPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSIFBHSVRhc2tQb29sKQogICBnZXRfcHJvcGVydHkoX3BnaWpwIEdMT0JBTCBQUk9QRVJUWSBKT0JfUE9PTFMpCiAgIGlmKE5PVCBfcGdpanAgTUFUQ0hFUyAiUEdJVGFza1Bvb2w9IikKICAgICAgIHNldF9wcm9wZXJ0eShHTE9CQUwgQVBQRU5EIFBST1BFUlRZIEpPQl9QT09MUyBQR0lUYXNrUG9vbD0xKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLWRmLmNtYWtlIGIvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzLWRmLmNtYWtlCmluZGV4IGY5NDg5MTQuLjhiODI0YmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93cy1kZi5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3MtZGYuY21ha2UKQEAgLTEzLDcgKzEzLDcgQEAKIHNldChDTUFLRV9Gb3J0cmFuX01PRERJUl9GTEFHICItbW9kdWxlOiIpCiAKIHNldChDTUFLRV9Gb3J0cmFuX0NSRUFURV9TSEFSRURfTElCUkFSWQotICJsaW5rICR7Q01BS0VfQ0xfTk9MT0dPfSAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gIC9vdXQ6PFRBUkdFVD4gL2RsbCAgPExJTktfRkxBR1M+IDxPQkpFQ1RTPiA8TElOS19MSUJSQVJJRVM+ICR7Q01BS0VfRU5EX1RFTVBfRklMRX0iKQorICJsaW5rICR7Q01BS0VfQ0xfTk9MT0dPfSAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gL291dDo8VEFSR0VUPiAvZGxsIDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiAke0NNQUtFX0VORF9URU1QX0ZJTEV9IikKIAogc2V0KENNQUtFX0ZvcnRyYW5fQ1JFQVRFX1NIQVJFRF9NT0RVTEUgJHtDTUFLRV9Gb3J0cmFuX0NSRUFURV9TSEFSRURfTElCUkFSWX0pCiAKQEAgLTIyLDcgKzIyLDcgQEAKIAogIyBjb21waWxlIGEgQysrIGZpbGUgaW50byBhbiBvYmplY3QgZmlsZQogc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRV9PQkpFQ1QKLSAgICAiPENNQUtFX0ZvcnRyYW5fQ09NUElMRVI+ICAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gJHtDTUFLRV9DTF9OT0xPR099IC9vYmplY3Q6PE9CSkVDVD4gPEZMQUdTPiAvY29tcGlsZV9vbmx5IDxTT1VSQ0U+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCisgICAgIjxDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSPiAke0NNQUtFX1NUQVJUX1RFTVBfRklMRX0gJHtDTUFLRV9DTF9OT0xPR099IC9vYmplY3Q6PE9CSkVDVD4gPEZMQUdTPiAvY29tcGlsZV9vbmx5IDxTT1VSQ0U+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCiAKIHNldChDTUFLRV9Gb3J0cmFuX0xJTktfRVhFQ1VUQUJMRQogICAgICI8Q01BS0VfRm9ydHJhbl9DT01QSUxFUj4gJHtDTUFLRV9DTF9OT0xPR099ICR7Q01BS0VfU1RBUlRfVEVNUF9GSUxFfSA8RkxBR1M+IC9leGU6PFRBUkdFVD4gPE9CSkVDVFM+IC9saW5rIDxDTUFLRV9Gb3J0cmFuX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8TElOS19MSUJSQVJJRVM+JHtDTUFLRV9FTkRfVEVNUF9GSUxFfSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NQYXRocy5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1BhdGhzLmNtYWtlCmluZGV4IDcxY2M2MDkuLmI5ZTJmMTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1BhdGhzLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1BhdGhzLmNtYWtlCkBAIC0yNCw2ICsyNCwxMCBAQAogIyAgIEVOVntQcm9ncmFtRmlsZXMoeDg2KX0gPSBbQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KV0KICMgICBFTlZ7UHJvZ3JhbUZpbGVzfSA9IFtDOlxQcm9ncmFtIEZpbGVzICh4ODYpXQogIyAgIEVOVntQcm9ncmFtVzY0MzJ9ID0gW0M6XFByb2dyYW0gRmlsZXNdCisjCisjIFJlbWluZGVyIHdoZW4gYWRkaW5nIG5ldyBsb2NhdGlvbnMgY29tcHV0ZWQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyMgcGxlYXNlIG1ha2Ugc3VyZSB0byBrZWVwIEhlbHAvdmFyaWFibGUvQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRILnJzdAorIyBzeW5jaHJvbml6ZWQKIHNldChfcHJvZ3JhbWZpbGVzICIiKQogZm9yZWFjaCh2ICJQcm9ncmFtVzY0MzIiICJQcm9ncmFtRmlsZXMiICJQcm9ncmFtRmlsZXMoeDg2KSIpCiAgIGlmKERFRklORUQgIkVOVnske3Z9fSIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NQaG9uZS1DbGFuZy1BU00uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NQaG9uZS1DbGFuZy1BU00uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmNGNhNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1Bob25lLUNsYW5nLUFTTS5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFBsYXRmb3JtL1dpbmRvd3MtQ2xhbmctQVNNKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzUGhvbmUtR05VLUFTTS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1Bob25lLUdOVS1BU00uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwZWVhNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1Bob25lLUdOVS1BU00uY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShQbGF0Zm9ybS9XaW5kb3dzLUdOVS1BU00pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NTdG9yZS1DbGFuZy1BU00uY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL1dpbmRvd3NTdG9yZS1DbGFuZy1BU00uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmNGNhNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1N0b3JlLUNsYW5nLUFTTS5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFBsYXRmb3JtL1dpbmRvd3MtQ2xhbmctQVNNKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9XaW5kb3dzU3RvcmUtR05VLUFTTS5jbWFrZSBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1N0b3JlLUdOVS1BU00uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwZWVhNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vV2luZG93c1N0b3JlLUdOVS1BU00uY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShQbGF0Zm9ybS9XaW5kb3dzLUdOVS1BU00pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1BsYXRmb3JtL2VDb3MuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL2VDb3MuY21ha2UKaW5kZXggZTEyNzllZi4uMjVkYjAyOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9QbGF0Zm9ybS9lQ29zLmNtYWtlCisrKyBiL01vZHVsZXMvUGxhdGZvcm0vZUNvcy5jbWFrZQpAQCAtNTIsOCArNTIsOCBAQAogYWRkX2RlZmluaXRpb25zKC1EX19FQ09TX189MSAtRF9fRUNPUz0xKQogCiAjIHNwZWNpYWwgbGluayBjb21tYW5kcyBmb3IgZUNvcyBleGVjdXRhYmxlcwotc2V0KENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtTCR7RUNPU19MSUJUQVJHRVRfRElSRUNUT1JZfSAtVHRhcmdldC5sZCAgPExJTktfTElCUkFSSUVTPiIpCi1zZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAgIDxGTEFHUz4gPENNQUtFX0NfTElOS19GTEFHUz4gICA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIC1MJHtFQ09TX0xJQlRBUkdFVF9ESVJFQ1RPUll9IC1UdGFyZ2V0LmxkICA8TElOS19MSUJSQVJJRVM+IikKK3NldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0VfQ1hYX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLUwke0VDT1NfTElCVEFSR0VUX0RJUkVDVE9SWX0gLVR0YXJnZXQubGQgPExJTktfTElCUkFSSUVTPiIpCitzZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9DX0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLUwke0VDT1NfTElCVEFSR0VUX0RJUkVDVE9SWX0gLVR0YXJnZXQubGQgPExJTktfTElCUkFSSUVTPiIpCiAKICMgZUNvcyBkb2Vzbid0IHN1cHBvcnQgc2hhcmVkIGxpYnMKIHNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkgVEFSR0VUX1NVUFBPUlRTX1NIQVJFRF9MSUJTIEZBTFNFKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9QbGF0Zm9ybS9nYXMuY21ha2UgYi9Nb2R1bGVzL1BsYXRmb3JtL2dhcy5jbWFrZQppbmRleCA3YzY1OWYyLi44NDg0MDc2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1BsYXRmb3JtL2dhcy5jbWFrZQorKysgYi9Nb2R1bGVzL1BsYXRmb3JtL2dhcy5jbWFrZQpAQCAtMTEsNyArMTEsNyBAQAogICAgICAgIjxDTUFLRV9SQU5MSUI+IDxUQVJHRVQ+ICIpCiAKIHNldChDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9MSU5LX0VYRUNVVEFCTEUKLSAgICAiPENNQUtFX0xJTktFUj4gPEZMQUdTPiA8Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fTElOS19GTEFHUz4gPExJTktfRkxBR1M+IDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCisgICAgIjxDTUFLRV9MSU5LRVI+IDxGTEFHUz4gPENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0xJTktfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gPExJTktfTElCUkFSSUVTPiIpCiAKICMgdG8gYmUgZG9uZQogc2V0KENNQUtFX0FTTSR7QVNNX0RJQUxFQ1R9X0NSRUFURV9TSEFSRURfTElCUkFSWSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvUXQ0TWFjcm9zLmNtYWtlIGIvTW9kdWxlcy9RdDRNYWNyb3MuY21ha2UKaW5kZXggMzNjYWNmMS4uY2I2YWU0MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9RdDRNYWNyb3MuY21ha2UKKysrIGIvTW9kdWxlcy9RdDRNYWNyb3MuY21ha2UKQEAgLTQzNiw3ICs0MzYsNyBAQAogICAgIGlmKF9teV9zb3VyY2VzKQogICAgICAgIyBtYWtlIGEgLnBybyBmaWxlIHRvIGNhbGwgbHVwZGF0ZSBvbiwgc28gd2UgZG9uJ3QgbWFrZSBvdXIgY29tbWFuZHMgdG9vCiAgICAgICAjIGxvbmcgZm9yIHNvbWUgc3lzdGVtcwotICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfdHNfbmFtZSAke190c19maWxlfSBOQU1FX1dFKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfdHNfbmFtZSAke190c19maWxlfSBOQU1FKQogICAgICAgc2V0KF90c19wcm8gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9LyR7X3RzX25hbWV9X2x1cGRhdGUucHJvKQogICAgICAgc2V0KF9wcm9fc3JjcykKICAgICAgIGZvcmVhY2goX3Byb19zcmMgJHtfbXlfc291cmNlc30pCkBAIC00NjMsMTMgKzQ2MywxNSBAQAogbWFjcm8oUVQ0X0FERF9UUkFOU0xBVElPTiBfcW1fZmlsZXMpCiAgIGZvcmVhY2ggKF9jdXJyZW50X0ZJTEUgJHtBUkdOfSkKICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9hYnNfRklMRSAke19jdXJyZW50X0ZJTEV9IEFCU09MVVRFKQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQocW0gJHtfYWJzX0ZJTEV9IE5BTUVfV0UpCi0gICAgZ2V0X3Byb3BlcnR5KG91dHB1dF9sb2NhdGlvbiBTT1VSQ0UgJHtfYWJzX0ZJTEV9IFBST1BFUlRZIE9VVFBVVF9MT0NBVElPTikKKyAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHFtICR7X2Fic19GSUxFfSBOQU1FKQorICAgICMgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGxhc3QgZG90IGhhcyB0byBiZSBjb25zaWRlcmVkIHRoZSBmaWxlIG5hbWUgKGluY2x1ZGluZyBvdGhlciBkb3RzKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJcXC5bXi5dKiQiICIiIEZJTEVfTkFNRSAke3FtfSkKKyAgICBnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkob3V0cHV0X2xvY2F0aW9uICR7X2Fic19GSUxFfSBPVVRQVVRfTE9DQVRJT04pCiAgICAgaWYob3V0cHV0X2xvY2F0aW9uKQogICAgICAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtvdXRwdXRfbG9jYXRpb259IikKLSAgICAgIHNldChxbSAiJHtvdXRwdXRfbG9jYXRpb259LyR7cW19LnFtIikKKyAgICAgIHNldChxbSAiJHtvdXRwdXRfbG9jYXRpb259LyR7RklMRV9OQU1FfS5xbSIpCiAgICAgZWxzZSgpCi0gICAgICBzZXQocW0gIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke3FtfS5xbSIpCisgICAgICBzZXQocW0gIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0ZJTEVfTkFNRX0ucW0iKQogICAgIGVuZGlmKCkKIAogICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtxbX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvU3F1aXNoNFJ1blRlc3RDYXNlLmJhdCBiL01vZHVsZXMvU3F1aXNoNFJ1blRlc3RDYXNlLmJhdAppbmRleCBhZDFjYzhjLi5mZTMwM2I4IDEwMDc1NQotLS0gYS9Nb2R1bGVzL1NxdWlzaDRSdW5UZXN0Q2FzZS5iYXQKKysrIGIvTW9kdWxlcy9TcXVpc2g0UnVuVGVzdENhc2UuYmF0CkBAIC00LDcgKzQsNiBAQAogc2V0IFRFU1RDQVNFPSU0CiBzZXQgQVVUPSU1CiBzZXQgQVVURElSPSU2Ci1zZXQgU0VUVElOR1NHUk9VUD0lNwogCiAlU1FVSVNIU0VSVkVSJSAtLXN0b3AKIApAQCAtMTIsOSArMTEsOSBAQAogJVNRVUlTSFNFUlZFUiUgLS1jb25maWcgYWRkQVVUICIlQVVUJSIgIiVBVVRESVIlIgogCiBlY2hvICJTdGFydGluZyB0aGUgc3F1aXNoIHNlcnZlci4uLiAlU1FVSVNIU0VSVkVSJSIKLXN0YXJ0IC9CICVTUVVJU0hTRVJWRVIlCitzdGFydCAvQiAiU3F1aXNoIFNlcnZlciIgJVNRVUlTSFNFUlZFUiUKIAotZWNobyAiUnVubmluZyB0aGUgdGVzdCBjYXNlLi4uJVNRVUlTSFJVTk5FUiUgLS10ZXN0c3VpdGUgJVRFU1RTVUlURSUgLS10ZXN0Y2FzZSAlVEVTVENBU0UlIgorZWNobyAiUnVubmluZyB0aGUgdGVzdCBjYXNlLi4uICVTUVVJU0hSVU5ORVIlIC0tdGVzdHN1aXRlICVURVNUU1VJVEUlIC0tdGVzdGNhc2UgJVRFU1RDQVNFJSIKICVTUVVJU0hSVU5ORVIlIC0tdGVzdHN1aXRlICIlVEVTVFNVSVRFJSIgLS10ZXN0Y2FzZSAiJVRFU1RDQVNFJSIKIHNldCByZXR1cm5WYWx1ZT0lRVJST1JMRVZFTCUKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TcXVpc2g0UnVuVGVzdENhc2Uuc2ggYi9Nb2R1bGVzL1NxdWlzaDRSdW5UZXN0Q2FzZS5zaAppbmRleCAzOWEzOTA3Li40ZDFlMzgyIDEwMDc1NQotLS0gYS9Nb2R1bGVzL1NxdWlzaDRSdW5UZXN0Q2FzZS5zaAorKysgYi9Nb2R1bGVzL1NxdWlzaDRSdW5UZXN0Q2FzZS5zaApAQCAtNiwyMCArNiwxOSBAQAogVEVTVENBU0U9JDQKIEFVVD0kNQogQVVURElSPSQ2Ci1TRVRUSU5HU0dST1VQPSQ3CiAKICRTUVVJU0hTRVJWRVIgLS1zdG9wID4gL2Rldi9udWxsIDI+JjEKIAotZWNobyAiQWRkaW5nIEFVVC4uLiAkU1FVSVNIU0VSVkVSIC0tc2V0dGluZ3NHcm91cCAkU0VUVElOR1NHUk9VUCAtLWNvbmZpZyBhZGRBVVQgJEFVVCAkQVVURElSIgotJFNRVUlTSFNFUlZFUiAtLXNldHRpbmdzR3JvdXAgIiRTRVRUSU5HU0dST1VQIiAtLWNvbmZpZyBhZGRBVVQgIiRBVVQiICIkQVVURElSIiB8fCBleGl0IDI1NQorZWNobyAiQWRkaW5nIEFVVC4uLiAkU1FVSVNIU0VSVkVSIC0tY29uZmlnIGFkZEFVVCAkQVVUICRBVVRESVIiCiskU1FVSVNIU0VSVkVSIC0tY29uZmlnIGFkZEFVVCAiJEFVVCIgIiRBVVRESVIiIHx8IGV4aXQgMjU1CiAjIHNsZWVwIDEKIAogZWNobyAiU3RhcnRpbmcgdGhlIHNxdWlzaCBzZXJ2ZXIuLi4gJFNRVUlTSFNFUlZFUiAtLWRhZW1vbiIKICRTUVVJU0hTRVJWRVIgLS1kYWVtb24gfHwgZXhpdCAyNTUKICMgc2xlZXAgMgogCi1lY2hvICJSdW5uaW5nIHRoZSB0ZXN0IGNhc2UuLi4kU1FVSVNIUlVOTkVSIC0tc2V0dGluZ3NHcm91cCAkU0VUVElOR1NHUk9VUCAtLXRlc3RzdWl0ZSAkVEVTVFNVSVRFIC0tdGVzdGNhc2UgJFRFU1RDQVNFIgotJFNRVUlTSFJVTk5FUiAtLXNldHRpbmdzR3JvdXAgIiRTRVRUSU5HU0dST1VQIiAtLXRlc3RzdWl0ZSAiJFRFU1RTVUlURSIgLS10ZXN0Y2FzZSAiJFRFU1RDQVNFIgorZWNobyAiUnVubmluZyB0aGUgdGVzdCBjYXNlLi4uICRTUVVJU0hSVU5ORVIgLS10ZXN0c3VpdGUgJFRFU1RTVUlURSAtLXRlc3RjYXNlICRURVNUQ0FTRSIKKyRTUVVJU0hSVU5ORVIgLS10ZXN0c3VpdGUgIiRURVNUU1VJVEUiIC0tdGVzdGNhc2UgIiRURVNUQ0FTRSIKIHJldHVyblZhbHVlPSQ/CiAKIGVjaG8gIlN0b3BwaW5nIHRoZSBzcXVpc2ggc2VydmVyLi4uICRTUVVJU0hTRVJWRVIgLS1zdG9wIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TcXVpc2hUZXN0U2NyaXB0LmNtYWtlIGIvTW9kdWxlcy9TcXVpc2hUZXN0U2NyaXB0LmNtYWtlCmluZGV4IDJhODBiZTUuLmIwY2I0YWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvU3F1aXNoVGVzdFNjcmlwdC5jbWFrZQorKysgYi9Nb2R1bGVzL1NxdWlzaFRlc3RTY3JpcHQuY21ha2UKQEAgLTMxLDcgKzMxLDYgQEAKIG1lc3NhZ2UoU1RBVFVTICJzcXVpc2hfd3JhcHBlcj0nJHtzcXVpc2hfd3JhcHBlcn0nIikKIG1lc3NhZ2UoU1RBVFVTICJzcXVpc2hfZW52X3ZhcnM9JyR7c3F1aXNoX2Vudl92YXJzfSciKQogbWVzc2FnZShTVEFUVVMgInNxdWlzaF9tb2R1bGVfZGlyPScke3NxdWlzaF9tb2R1bGVfZGlyfSciKQotbWVzc2FnZShTVEFUVVMgInNxdWlzaF9zZXR0aW5nc2dyb3VwPScke3NxdWlzaF9zZXR0aW5nc2dyb3VwfSciKQogbWVzc2FnZShTVEFUVVMgInNxdWlzaF9wcmVfY29tbWFuZD0nJHtzcXVpc2hfcHJlX2NvbW1hbmR9JyIpCiBtZXNzYWdlKFNUQVRVUyAic3F1aXNoX3Bvc3RfY29tbWFuZD0nJHtzcXVpc2hfcG9zdF9jb21tYW5kfSciKQogCkBAIC01NywxMCArNTYsMTAgQEAKICMgcnVuIHRoZSB0ZXN0CiBpZigiJHtzcXVpc2hfdmVyc2lvbn0iIFNUUkVRVUFMICI0IikKICAgaWYgKFdJTjMyKQotICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7c3F1aXNoX21vZHVsZV9kaXJ9L1NxdWlzaDRSdW5UZXN0Q2FzZS5iYXQgJHtzcXVpc2hfc2VydmVyX2V4ZWN1dGFibGV9ICR7c3F1aXNoX2NsaWVudF9leGVjdXRhYmxlfSAke3NxdWlzaF90ZXN0X3N1aXRlfSAke3NxdWlzaF90ZXN0X2Nhc2V9ICR7c3F1aXNoX2F1dH0gJHtzcXVpc2hfYXV0X2Rpcn0gJHtzcXVpc2hfc2V0dGluZ3Nncm91cH0KKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke3NxdWlzaF9tb2R1bGVfZGlyfS9TcXVpc2g0UnVuVGVzdENhc2UuYmF0ICR7c3F1aXNoX3NlcnZlcl9leGVjdXRhYmxlfSAke3NxdWlzaF9jbGllbnRfZXhlY3V0YWJsZX0gJHtzcXVpc2hfdGVzdF9zdWl0ZX0gJHtzcXVpc2hfdGVzdF9jYXNlfSAke3NxdWlzaF9hdXR9ICR7c3F1aXNoX2F1dF9kaXJ9CiAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSB0ZXN0X3J2ICkKICAgZWxzZWlmKFVOSVgpCi0gICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtzcXVpc2hfbW9kdWxlX2Rpcn0vU3F1aXNoNFJ1blRlc3RDYXNlLnNoICR7c3F1aXNoX3NlcnZlcl9leGVjdXRhYmxlfSAke3NxdWlzaF9jbGllbnRfZXhlY3V0YWJsZX0gJHtzcXVpc2hfdGVzdF9zdWl0ZX0gJHtzcXVpc2hfdGVzdF9jYXNlfSAke3NxdWlzaF9hdXR9ICR7c3F1aXNoX2F1dF9kaXJ9ICR7c3F1aXNoX3NldHRpbmdzZ3JvdXB9CisgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtzcXVpc2hfbW9kdWxlX2Rpcn0vU3F1aXNoNFJ1blRlc3RDYXNlLnNoICR7c3F1aXNoX3NlcnZlcl9leGVjdXRhYmxlfSAke3NxdWlzaF9jbGllbnRfZXhlY3V0YWJsZX0gJHtzcXVpc2hfdGVzdF9zdWl0ZX0gJHtzcXVpc2hfdGVzdF9jYXNlfSAke3NxdWlzaF9hdXR9ICR7c3F1aXNoX2F1dF9kaXJ9CiAgICAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSB0ZXN0X3J2ICkKICAgZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9UZXN0QmlnRW5kaWFuLmNtYWtlIGIvTW9kdWxlcy9UZXN0QmlnRW5kaWFuLmNtYWtlCmluZGV4IDBjNmUxODguLjhhNzY5YjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvVGVzdEJpZ0VuZGlhbi5jbWFrZQorKysgYi9Nb2R1bGVzL1Rlc3RCaWdFbmRpYW4uY21ha2UKQEAgLTE5LDggKzE5LDggQEAKIAogbWFjcm8oVEVTVF9CSUdfRU5ESUFOIFZBUklBQkxFKQogICBpZihOT1QgREVGSU5FRCBIQVZFXyR7VkFSSUFCTEV9KQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiB0aGUgc3lzdGVtIGlzIGJpZyBlbmRpYW4iKQotICAgIG1lc3NhZ2UoU1RBVFVTICJTZWFyY2hpbmcgMTYgYml0IGludGVnZXIiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNrIGlmIHRoZSBzeXN0ZW0gaXMgYmlnIGVuZGlhbiIpCisgICAgbWVzc2FnZShDSEVDS19TVEFSVCAiU2VhcmNoaW5nIDE2IGJpdCBpbnRlZ2VyIikKIAogICAgIGlmKENNQUtFX0NfQ09NUElMRVJfTE9BREVEKQogICAgICAgc2V0KF90ZXN0X2xhbmd1YWdlICJDIikKQEAgLTMyLDE5ICszMiwxOSBAQAogCiAgICAgQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCBzaG9ydCIgQ01BS0VfU0laRU9GX1VOU0lHTkVEX1NIT1JUIExBTkdVQUdFICR7X3Rlc3RfbGFuZ3VhZ2V9KQogICAgIGlmKENNQUtFX1NJWkVPRl9VTlNJR05FRF9TSE9SVCBFUVVBTCAyKQotICAgICAgbWVzc2FnZShTVEFUVVMgIlVzaW5nIHVuc2lnbmVkIHNob3J0IikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAiVXNpbmcgdW5zaWduZWQgc2hvcnQiKQogICAgICAgc2V0KENNQUtFXzE2QklUX1RZUEUgInVuc2lnbmVkIHNob3J0IikKICAgICBlbHNlKCkKICAgICAgIENIRUNLX1RZUEVfU0laRSgidW5zaWduZWQgaW50IiAgIENNQUtFX1NJWkVPRl9VTlNJR05FRF9JTlQgTEFOR1VBR0UgJHtfdGVzdF9sYW5ndWFnZX0pCiAgICAgICBpZihDTUFLRV9TSVpFT0ZfVU5TSUdORURfSU5UKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiVXNpbmcgdW5zaWduZWQgaW50IikKKyAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJVc2luZyB1bnNpZ25lZCBpbnQiKQogICAgICAgICBzZXQoQ01BS0VfMTZCSVRfVFlQRSAidW5zaWduZWQgaW50IikKIAogICAgICAgZWxzZSgpCiAKICAgICAgICAgQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCBsb25nIiAgQ01BS0VfU0laRU9GX1VOU0lHTkVEX0xPTkcgTEFOR1VBR0UgJHtfdGVzdF9sYW5ndWFnZX0pCiAgICAgICAgIGlmKENNQUtFX1NJWkVPRl9VTlNJR05FRF9MT05HKQotICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJVc2luZyB1bnNpZ25lZCBsb25nIikKKyAgICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgIlVzaW5nIHVuc2lnbmVkIGxvbmciKQogICAgICAgICAgIHNldChDTUFLRV8xNkJJVF9UWVBFICJ1bnNpZ25lZCBsb25nIikKICAgICAgICAgZWxzZSgpCiAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAibm8gc3VpdGFibGUgdHlwZSBmb3VuZCIpCkBAIC05NSwxNSArOTUsMTYgQEAKIAogICAgICAgICBpZihDTUFLRV9URVNUX0VORElBTkVTU19TVFJJTkdTX0xFKQogICAgICAgICAgIHNldCgke1ZBUklBQkxFfSAwIENBQ0hFIElOVEVSTkFMICJSZXN1bHQgb2YgVEVTVF9CSUdfRU5ESUFOIiBGT1JDRSkKLSAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgaWYgdGhlIHN5c3RlbSBpcyBiaWcgZW5kaWFuIC0gbGl0dGxlIGVuZGlhbiIpCisgICAgICAgICAgbWVzc2FnZShDSEVDS19QQVNTICJsaXR0bGUgZW5kaWFuIikKICAgICAgICAgZW5kaWYoKQogCiAgICAgICAgIGlmKENNQUtFX1RFU1RfRU5ESUFORVNTX1NUUklOR1NfQkUpCiAgICAgICAgICAgc2V0KCR7VkFSSUFCTEV9IDEgQ0FDSEUgSU5URVJOQUwgIlJlc3VsdCBvZiBURVNUX0JJR19FTkRJQU4iIEZPUkNFKQotICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBpZiB0aGUgc3lzdGVtIGlzIGJpZyBlbmRpYW4gLSBiaWcgZW5kaWFuIikKKyAgICAgICAgICBtZXNzYWdlKENIRUNLX1BBU1MgImJpZyBlbmRpYW4iKQogICAgICAgICBlbmRpZigpCiAKICAgICAgICAgaWYoTk9UIENNQUtFX1RFU1RfRU5ESUFORVNTX1NUUklOR1NfQkUgIEFORCAgTk9UIENNQUtFX1RFU1RfRU5ESUFORVNTX1NUUklOR1NfTEUpCisgICAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJURVNUX0JJR19FTkRJQU4gZm91bmQgbm8gcmVzdWx0ISIpCiAgICAgICAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJURVNUX0JJR19FTkRJQU4gZm91bmQgbm8gcmVzdWx0ISIpCiAgICAgICAgIGVuZGlmKCkKIApAQCAtMTExLDcgKzExMiw3IEBACiAgICAgICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBzeXN0ZW0gaXMgYmlnIGVuZGlhbiBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuVGVzdEVuZGlhbmVzcy5jOlxuJHtURVNUX0VORElBTkVTU19GSUxFX0NPTlRFTlR9XG5cbiIpCiAKICAgICAgIGVsc2UoKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgaWYgdGhlIHN5c3RlbSBpcyBiaWcgZW5kaWFuIC0gZmFpbGVkIikKKyAgICAgICAgbWVzc2FnZShDSEVDS19GQUlMICJmYWlsZWQiKQogICAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBzeXN0ZW0gaXMgYmlnIGVuZGlhbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuVGVzdEVuZGlhbmVzcy5jOlxuJHtURVNUX0VORElBTkVTU19GSUxFX0NPTlRFTlR9XG5cbiIpCiAgICAgICAgIHNldCgke1ZBUklBQkxFfSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvVGVzdENYWEFjY2VwdHNGbGFnLmNtYWtlIGIvTW9kdWxlcy9UZXN0Q1hYQWNjZXB0c0ZsYWcuY21ha2UKaW5kZXggOTJhMzYyZS4uY2U1MDVmMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9UZXN0Q1hYQWNjZXB0c0ZsYWcuY21ha2UKKysrIGIvTW9kdWxlcy9UZXN0Q1hYQWNjZXB0c0ZsYWcuY21ha2UKQEAgLTIzLDE5ICsyMywxOSBAQAogCiBtYWNybyhDSEVDS19DWFhfQUNDRVBUU19GTEFHIEZMQUdTICBWQVJJQUJMRSkKICAgaWYoTk9UIERFRklORUQgJHtWQVJJQUJMRX0pCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHRvIHNlZSBpZiBDWFggY29tcGlsZXIgYWNjZXB0cyBmbGFnICR7RkxBR1N9IikKKyAgICBtZXNzYWdlKENIRUNLX1NUQVJUICJDaGVja2luZyB0byBzZWUgaWYgQ1hYIGNvbXBpbGVyIGFjY2VwdHMgZmxhZyAke0ZMQUdTfSIpCiAgICAgdHJ5X2NvbXBpbGUoJHtWQVJJQUJMRX0KICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KICAgICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9EdW1teUNYWEZpbGUuY3h4CiAgICAgICBDTUFLRV9GTEFHUyAtRENPTVBJTEVfREVGSU5JVElPTlM6U1RSSU5HPSR7RkxBR1N9CiAgICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUKQogICAgIGlmKCR7VkFSSUFCTEV9KQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHRvIHNlZSBpZiBDWFggY29tcGlsZXIgYWNjZXB0cyBmbGFnICR7RkxBR1N9IC0geWVzIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfUEFTUyAieWVzIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIGFjY2VwdHMgdGhlIGZsYWcgJHtGTEFHU30gcGFzc2VkIHdpdGggIgogICAgICAgICAidGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKICAgICBlbHNlKCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyB0byBzZWUgaWYgQ1hYIGNvbXBpbGVyIGFjY2VwdHMgZmxhZyAke0ZMQUdTfSAtIG5vIikKKyAgICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm8iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENYWCBjb21waWxlciBhY2NlcHRzIHRoZSBmbGFnICR7RkxBR1N9IGZhaWxlZCB3aXRoICIKICAgICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1Rlc3RGb3JBTlNJRm9yU2NvcGUuY21ha2UgYi9Nb2R1bGVzL1Rlc3RGb3JBTlNJRm9yU2NvcGUuY21ha2UKaW5kZXggMjcyZTRlYy4uMGYyZGMwMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9UZXN0Rm9yQU5TSUZvclNjb3BlLmNtYWtlCisrKyBiL01vZHVsZXMvVGVzdEZvckFOU0lGb3JTY29wZS5jbWFrZQpAQCAtMTYsMTkgKzE2LDE5IEBACiAjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQogCiBpZihOT1QgREVGSU5FRCBDTUFLRV9BTlNJX0ZPUl9TQ09QRSkKLSAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciBBTlNJIHNjb3BlIikKKyAgbWVzc2FnZShDSEVDS19TVEFSVCAiQ2hlY2sgZm9yIEFOU0kgc2NvcGUiKQogICB0cnlfY29tcGlsZShDTUFLRV9BTlNJX0ZPUl9TQ09QRSAgJHtDTUFLRV9CSU5BUllfRElSfQogICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9UZXN0Rm9yQW5zaUZvclNjb3BlLmN4eAogICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCiAgIGlmIChDTUFLRV9BTlNJX0ZPUl9TQ09QRSkKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgZm9yIEFOU0kgc2NvcGUgLSBmb3VuZCIpCisgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgc2V0IChDTUFLRV9OT19BTlNJX0ZPUl9TQ09QRSAwIENBQ0hFIElOVEVSTkFMCiAgICAgICAiRG9lcyB0aGUgY29tcGlsZXIgc3VwcG9ydCBhbnNpIGZvciBzY29wZS4iKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAiRGV0ZXJtaW5pbmcgaWYgdGhlIENYWCBjb21waWxlciB1bmRlcnN0YW5kcyBhbnNpIGZvciBzY29wZXMgcGFzc2VkIHdpdGggIgogICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCiAgIGVsc2UgKCkKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgZm9yIEFOU0kgc2NvcGUgLSBub3QgZm91bmQiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm90IGZvdW5kIikKICAgICBzZXQgKENNQUtFX05PX0FOU0lfRk9SX1NDT1BFIDEgQ0FDSEUgSU5URVJOQUwKICAgICAgICJEb2VzIHRoZSBjb21waWxlciBzdXBwb3J0IGFuc2kgZm9yIHNjb3BlLiIpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9UZXN0Rm9yU1NUUkVBTS5jbWFrZSBiL01vZHVsZXMvVGVzdEZvclNTVFJFQU0uY21ha2UKaW5kZXggZTcwZGYwMC4uNTQ1YjdlYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9UZXN0Rm9yU1NUUkVBTS5jbWFrZQorKysgYi9Nb2R1bGVzL1Rlc3RGb3JTU1RSRUFNLmNtYWtlCkBAIC0xNSwxOSArMTUsMTkgQEAKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKIGlmKE5PVCBERUZJTkVEIENNQUtFX0hBU19BTlNJX1NUUklOR19TVFJFQU0pCi0gIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3Igc3N0cmVhbSIpCisgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNrIGZvciBzc3RyZWFtIikKICAgdHJ5X2NvbXBpbGUoQ01BS0VfSEFTX0FOU0lfU1RSSU5HX1NUUkVBTSAgJHtDTUFLRV9CSU5BUllfRElSfQogICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9UZXN0Rm9yU1NUUkVBTS5jeHgKICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUKQogICBpZiAoQ01BS0VfSEFTX0FOU0lfU1RSSU5HX1NUUkVBTSkKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgZm9yIHNzdHJlYW0gLSBmb3VuZCIpCisgICAgbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCiAgICAgc2V0IChDTUFLRV9OT19BTlNJX1NUUklOR19TVFJFQU0gMCBDQUNIRSBJTlRFUk5BTAogICAgICAgICAgIkRvZXMgdGhlIGNvbXBpbGVyIHN1cHBvcnQgc3N0cmVhbSIpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICJEZXRlcm1pbmluZyBpZiB0aGUgQ1hYIGNvbXBpbGVyIGhhcyBzc3RyZWFtIHBhc3NlZCB3aXRoICIKICAgICAgICJ0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQogICBlbHNlICgpCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNrIGZvciBzc3RyZWFtIC0gbm90IGZvdW5kIikKKyAgICBtZXNzYWdlKENIRUNLX0ZBSUwgIm5vdCBmb3VuZCIpCiAgICAgc2V0IChDTUFLRV9OT19BTlNJX1NUUklOR19TVFJFQU0gMSBDQUNIRSBJTlRFUk5BTAogICAgICAgICJEb2VzIHRoZSBjb21waWxlciBzdXBwb3J0IHNzdHJlYW0iKQogICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKZGlmZiAtLWdpdCBhL01vZHVsZXMvVGVzdEZvclNURE5hbWVzcGFjZS5jbWFrZSBiL01vZHVsZXMvVGVzdEZvclNURE5hbWVzcGFjZS5jbWFrZQppbmRleCA3MDNlNjMxLi5kMTAxYzgzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1Rlc3RGb3JTVEROYW1lc3BhY2UuY21ha2UKKysrIGIvTW9kdWxlcy9UZXN0Rm9yU1RETmFtZXNwYWNlLmNtYWtlCkBAIC0xNSwxOSArMTUsMTkgQEAKICNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCiAKIGlmKE5PVCBERUZJTkVEIENNQUtFX1NURF9OQU1FU1BBQ0UpCi0gIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3IgU1REIG5hbWVzcGFjZSIpCisgIG1lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkNoZWNrIGZvciBTVEQgbmFtZXNwYWNlIikKICAgdHJ5X2NvbXBpbGUoQ01BS0VfU1REX05BTUVTUEFDRSAgJHtDTUFLRV9CSU5BUllfRElSfQogICAgICR7Q01BS0VfUk9PVH0vTW9kdWxlcy9UZXN0Rm9yU1RETmFtZXNwYWNlLmN4eAogICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCiAgIGlmIChDTUFLRV9TVERfTkFNRVNQQUNFKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVjayBmb3IgU1REIG5hbWVzcGFjZSAtIGZvdW5kIikKKyAgICBtZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIikKICAgICBzZXQgKENNQUtFX05PX1NURF9OQU1FU1BBQ0UgMCBDQUNIRSBJTlRFUk5BTAogICAgICAgICAgIkRvZXMgdGhlIGNvbXBpbGVyIHN1cHBvcnQgc3RkOjouIikKICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgIkRldGVybWluaW5nIGlmIHRoZSBDWFggY29tcGlsZXIgaGFzIHN0ZCBuYW1lc3BhY2UgcGFzc2VkIHdpdGggIgogICAgICAgInRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCiAgIGVsc2UgKCkKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2sgZm9yIFNURCBuYW1lc3BhY2UgLSBub3QgZm91bmQiKQorICAgIG1lc3NhZ2UoQ0hFQ0tfRkFJTCAibm90IGZvdW5kIikKICAgICBzZXQgKENNQUtFX05PX1NURF9OQU1FU1BBQ0UgMSBDQUNIRSBJTlRFUk5BTAogICAgICAgICJEb2VzIHRoZSBjb21waWxlciBzdXBwb3J0IHN0ZDo6LiIpCiAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Vc2VFY29zLmNtYWtlIGIvTW9kdWxlcy9Vc2VFY29zLmNtYWtlCmluZGV4IDYwMzI0YjEuLjgzYzliMjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvVXNlRWNvcy5jbWFrZQorKysgYi9Nb2R1bGVzL1VzZUVjb3MuY21ha2UKQEAgLTE4NSwxMSArMTg1LDExIEBACiAjIHdoZW4gdXNpbmcgbm1ha2UgbWFrZWZpbGVzLCB0aGUgY3VzdG9tIGJ1aWxkdHlwZSBzdXBwcmVzc2VzIHRoZSBkZWZhdWx0IGNsLmV4ZSBmbGFncwogIyBhbmQgdGhlIHJ1bGVzIGZvciBjcmVhdGluZyBvYmplY3RzIGFyZSBhZGp1c3RlZCBmb3IgZ2NjCiAgIHNldChDTUFLRV9CVUlMRF9UWVBFIENVU1RPTV9FQ09TX0JVSUxEKQotICBzZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVCAgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiAgIDxERUZJTkVTPiA8SU5DTFVERVM+IDxGTEFHUz4gLW8gPE9CSkVDVD4gLWMgPFNPVVJDRT4iKQorICBzZXQoQ01BS0VfQ19DT01QSUxFX09CSkVDVCAgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKICAgc2V0KENNQUtFX0NYWF9DT01QSUxFX09CSkVDVCAgICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8REVGSU5FUz4gPElOQ0xVREVTPiA8RkxBR1M+IC1vIDxPQkpFQ1Q+IC1jIDxTT1VSQ0U+IikKICMgc3BlY2lhbCBsaW5rIGNvbW1hbmRzIGZvciBlY29zLWV4ZWN1dGFibGVzCi0gIHNldChDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFICAiPENNQUtFX0NYWF9DT01QSUxFUj4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8T0JKRUNUUz4gIC1vIDxUQVJHRVQ+ICR7X2Vjb3NfRVhUUkFfTElCU30gLW5vc3RkbGliICAtbm9zdGFydGZpbGVzIC1MJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2Vjb3MvaW5zdGFsbC9saWIgLVR0YXJnZXQubGQgJHtFQ09TX0xEX01DUFV9IikKLSAgc2V0KENNQUtFX0NfTElOS19FWEVDVVRBQkxFICAgICI8Q01BS0VfQ19DT01QSUxFUj4gICA8Q01BS0VfQ19MSU5LX0ZMQUdTPiAgIDxPQkpFQ1RTPiAgLW8gPFRBUkdFVD4gJHtfZWNvc19FWFRSQV9MSUJTfSAtbm9zdGRsaWIgIC1ub3N0YXJ0ZmlsZXMgLUwke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZWNvcy9pbnN0YWxsL2xpYiAtVHRhcmdldC5sZCAke0VDT1NfTERfTUNQVX0iKQorICBzZXQoQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRSAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+ICR7X2Vjb3NfRVhUUkFfTElCU30gLW5vc3RkbGliIC1ub3N0YXJ0ZmlsZXMgLUwke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZWNvcy9pbnN0YWxsL2xpYiAtVHRhcmdldC5sZCAke0VDT1NfTERfTUNQVX0iKQorICBzZXQoQ01BS0VfQ19MSU5LX0VYRUNVVEFCTEUgICAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8Q01BS0VfQ19MSU5LX0ZMQUdTPiA8T0JKRUNUUz4gLW8gPFRBUkdFVD4gJHtfZWNvc19FWFRSQV9MSUJTfSAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtTCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9lY29zL2luc3RhbGwvbGliIC1UdGFyZ2V0LmxkICR7RUNPU19MRF9NQ1BVfSIpCiAjIHNvbWUgc3RyaWN0IGNvbXBpbGVyIGZsYWdzCiAgIHNldCAoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV3N0cmljdC1wcm90b3R5cGVzIikKICAgc2V0IChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV292ZXJsb2FkZWQtdmlydHVhbCAtZm5vLXJ0dGkgLVdjdG9yLWR0b3ItcHJpdmFjeSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWV4Y2VwdGlvbnMiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Vc2VKYXZhLmNtYWtlIGIvTW9kdWxlcy9Vc2VKYXZhLmNtYWtlCmluZGV4IDA3OTg0ODguLmRiM2ZiOTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvVXNlSmF2YS5jbWFrZQorKysgYi9Nb2R1bGVzL1VzZUphdmEuY21ha2UKQEAgLTM3Nyw3ICszNzcsOSBAQAogICAgICAgICBBUkdTICAgICR7c3JjfQogICAgICAgICAgICAgICAgICR7ZGVzdH0KICAgICAgICAgREVQRU5EUyAke3NyY30KLSAgICAgICAgQ09NTUVOVCAke2NvbW1lbnR9KQorICAgICAgICBDT01NRU5UICR7Y29tbWVudH0KKyAgICAgICAgVkVSQkFUSU0KKyAgICAgICAgKQogZW5kZnVuY3Rpb24gKCkKIAogZnVuY3Rpb24oX19qYXZhX2xjYXQgVkFSKQpAQCAtNDA1LDkgKzQwNywxNCBAQAogCiAjIGRlZmluZSBoZWxwZXIgc2NyaXB0cwogc2V0KF9KQVZBX0VYUE9SVF9UQVJHRVRTX1NDUklQVCAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2phdmFUYXJnZXRzLmNtYWtlLmluKQotc2V0KF9KQVZBX0NMQVNTX0ZJTEVMSVNUX1NDUklQVCAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1VzZUphdmFDbGFzc0ZpbGVsaXN0LmNtYWtlKQogc2V0KF9KQVZBX1NZTUxJTktfU0NSSVBUICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vVXNlSmF2YVN5bWxpbmtzLmNtYWtlKQogCitpZiAoQ01BS0VfSE9TVF9XSU4zMiBBTkQgTk9UIENZR1dJTiBBTkQgQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBNQVRDSEVTICJXaW5kb3dzIikKKyAgICBzZXQoX1VzZUphdmFfUEFUSF9TRVAgIiQ8U0VNSUNPTE9OPiIpCitlbHNlICgpCisgICAgc2V0KF9Vc2VKYXZhX1BBVEhfU0VQICI6IikKK2VuZGlmKCkKKwogZnVuY3Rpb24oYWRkX2phciBfVEFSR0VUX05BTUUpCiAKICAgICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoX2FkZF9qYXIKQEAgLTQ5NywxNCArNTA0LDggQEAKICAgICAgICAgJHtDTUFLRV9KQVZBX0xJQlJBUllfT1VUUFVUX1BBVEh9CiAgICAgKQogCi0gICAgaWYgKENNQUtFX0hPU1RfV0lOMzIgQU5EIE5PVCBDWUdXSU4gQU5EIENNQUtFX0hPU1RfU1lTVEVNX05BTUUgTUFUQ0hFUyAiV2luZG93cyIpCi0gICAgICAgIHNldChDTUFLRV9KQVZBX0lOQ0xVREVfRkxBR19TRVAgIjsiKQotICAgIGVsc2UgKCkKLSAgICAgICAgc2V0KENNQUtFX0pBVkFfSU5DTFVERV9GTEFHX1NFUCAiOiIpCi0gICAgZW5kaWYoKQotCiAgICAgZm9yZWFjaCAoSkFWQV9JTkNMVURFX0RJUiBJTiBMSVNUUyBDTUFLRV9KQVZBX0lOQ0xVREVfUEFUSCkKLSAgICAgICBzdHJpbmcoQVBQRU5EIENNQUtFX0pBVkFfSU5DTFVERV9QQVRIX0ZJTkFMICIke0NNQUtFX0pBVkFfSU5DTFVERV9GTEFHX1NFUH0ke0pBVkFfSU5DTFVERV9ESVJ9IikKKyAgICAgICBzdHJpbmcoQVBQRU5EIENNQUtFX0pBVkFfSU5DTFVERV9QQVRIX0ZJTkFMICIke19Vc2VKYXZhX1BBVEhfU0VQfSR7SkFWQV9JTkNMVURFX0RJUn0iKQogICAgIGVuZGZvcmVhY2goKQogCiAgICAgc2V0KENNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEggIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS8ke19UQVJHRVRfTkFNRX0uZGlyIikKQEAgLTU3Niw3ICs1NzcsNyBAQAogICAgICAgICBpZiAoVEFSR0VUICR7X0pBVkFfSU5DTFVERV9KQVJ9KQogICAgICAgICAgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShfSkFWQV9KQVJfUEFUSCAke19KQVZBX0lOQ0xVREVfSkFSfSBKQVJfRklMRSkKICAgICAgICAgICAgIGlmIChfSkFWQV9KQVJfUEFUSCkKLSAgICAgICAgICAgICAgICBzdHJpbmcoQVBQRU5EIENNQUtFX0pBVkFfSU5DTFVERV9QQVRIX0ZJTkFMICIke0NNQUtFX0pBVkFfSU5DTFVERV9GTEFHX1NFUH0ke19KQVZBX0pBUl9QQVRIfSIpCisgICAgICAgICAgICAgICAgc3RyaW5nKEFQUEVORCBDTUFLRV9KQVZBX0lOQ0xVREVfUEFUSF9GSU5BTCAiJHtfVXNlSmF2YV9QQVRIX1NFUH0ke19KQVZBX0pBUl9QQVRIfSIpCiAgICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgQ01BS0VfSkFWQV9JTkNMVURFX1BBVEggJHtfSkFWQV9KQVJfUEFUSH0pCiAgICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgX0pBVkFfREVQRU5EUyAke19KQVZBX0lOQ0xVREVfSkFSfSkKICAgICAgICAgICAgICAgICBsaXN0KEFQUEVORCBfSkFWQV9DT01QSUxFX0RFUEVORFMgJHtfSkFWQV9KQVJfUEFUSH0pCkBAIC01ODQsNyArNTg1LDcgQEAKICAgICAgICAgICAgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgImFkZF9qYXI6IElOQ0xVREVfSkFSUyB0YXJnZXQgJHtfSkFWQV9JTkNMVURFX0pBUn0gaXMgbm90IGEgamFyIikKICAgICAgICAgICAgIGVuZGlmICgpCiAgICAgICAgIGVsc2UgKCkKLSAgICAgICAgICAgIHN0cmluZyhBUFBFTkQgQ01BS0VfSkFWQV9JTkNMVURFX1BBVEhfRklOQUwgIiR7Q01BS0VfSkFWQV9JTkNMVURFX0ZMQUdfU0VQfSR7X0pBVkFfSU5DTFVERV9KQVJ9IikKKyAgICAgICAgICAgIHN0cmluZyhBUFBFTkQgQ01BS0VfSkFWQV9JTkNMVURFX1BBVEhfRklOQUwgIiR7X1VzZUphdmFfUEFUSF9TRVB9JHtfSkFWQV9JTkNMVURFX0pBUn0iKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgQ01BS0VfSkFWQV9JTkNMVURFX1BBVEggIiR7X0pBVkFfSU5DTFVERV9KQVJ9IikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIF9KQVZBX0RFUEVORFMgIiR7X0pBVkFfSU5DTFVERV9KQVJ9IikKICAgICAgICAgICAgIGxpc3QoQVBQRU5EIF9KQVZBX0NPTVBJTEVfREVQRU5EUyAiJHtfSkFWQV9JTkNMVURFX0pBUn0iKQpAQCAtNTk4LDcgKzU5OSwxMCBAQAogICAgICAgICAgICAgIyBDcmVhdGUgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gY29tcGlsZS4KICAgICAgICAgICAgIHNldChfSkFWQV9TT1VSQ0VTX0ZJTEUgJHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfS9qYXZhX3NvdXJjZXMpCiAgICAgICAgICAgICBzdHJpbmcoUkVQTEFDRSAiOyIgIlwiXG5cIiIgX0pBVkFfQ09NUElMRV9TVFJJTkcgIlwiJHtfSkFWQV9DT01QSUxFX0ZJTEVTfVwiIikKLSAgICAgICAgICAgIGZpbGUoV1JJVEUgJHtfSkFWQV9TT1VSQ0VTX0ZJTEV9ICR7X0pBVkFfQ09NUElMRV9TVFJJTkd9KQorICAgICAgICAgICAgc2V0KENNQUtFX0NPTkZJR1VSQUJMRV9GSUxFX0NPTlRFTlQgIiR7X0pBVkFfQ09NUElMRV9TVFJJTkd9IikKKyAgICAgICAgICAgIGNvbmZpZ3VyZV9maWxlKCIke0NNQUtFX1JPT1R9L01vZHVsZXMvQ01ha2VDb25maWd1cmFibGVGaWxlLmluIgorICAgICAgICAgICAgICAiJHtfSkFWQV9TT1VSQ0VTX0ZJTEV9IiBAT05MWSkKKyAgICAgICAgICAgIHVuc2V0KENNQUtFX0NPTkZJR1VSQUJMRV9GSUxFX0NPTlRFTlQpCiAgICAgICAgICAgICBsaXN0IChBUFBFTkQgX0pBVkFfU09VUkNFU19GSUxFTElTVFMgIkAke19KQVZBX1NPVVJDRVNfRklMRX0iKQogICAgICAgICBlbmRpZigpCiAgICAgICAgIGlmIChfSkFWQV9DT01QSUxFX0ZJTEVMSVNUUykKQEAgLTYxMSw2ICs2MTUsMTAgQEAKICAgICAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICAgICAgIyBOT1RFOiB0aGlzIGNvbW1hbmQgZ2VuZXJhdGVzIGFuIGFydGlmaWNpYWwgZGVwZW5kZW5jeSBmaWxlCiAgICAgICAgICAgICBPVVRQVVQgJHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfS9qYXZhX2NvbXBpbGVkXyR7X1RBUkdFVF9OQU1FfQorICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9CisgICAgICAgICAgICAgICAgLURDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIPSR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0KKyAgICAgICAgICAgICAgICAtRENNQUtFX0pBUl9DTEFTU0VTX1BSRUZJWD0ke0NNQUtFX0pBUl9DTEFTU0VTX1BSRUZJWH0KKyAgICAgICAgICAgICAgICAtUCAke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJ9L1VzZUphdmEvQ2xlYXJDbGFzc0ZpbGVzLmNtYWtlCiAgICAgICAgICAgICBDT01NQU5EICR7SmF2YV9KQVZBQ19FWEVDVVRBQkxFfQogICAgICAgICAgICAgICAgICR7Q01BS0VfSkFWQV9DT01QSUxFX0ZMQUdTfQogICAgICAgICAgICAgICAgIC1jbGFzc3BhdGggIiR7Q01BS0VfSkFWQV9JTkNMVURFX1BBVEhfRklOQUx9IgpAQCAtNjE4LDE4ICs2MjYsMjAgQEAKICAgICAgICAgICAgICAgICAke19HRU5FUkFURV9OQVRJVkVfSEVBREVSU30KICAgICAgICAgICAgICAgICAke19KQVZBX1NPVVJDRVNfRklMRUxJU1RTfQogICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHRvdWNoICR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0vamF2YV9jb21waWxlZF8ke19UQVJHRVRfTkFNRX0KLSAgICAgICAgICAgIERFUEVORFMgJHtfSkFWQV9DT01QSUxFX0ZJTEVTfSAke19KQVZBX0NPTVBJTEVfRklMRUxJU1RTfSAke19KQVZBX0NPTVBJTEVfREVQRU5EU30KKyAgICAgICAgICAgIERFUEVORFMgJHtfSkFWQV9DT01QSUxFX0ZJTEVTfSAke19KQVZBX0NPTVBJTEVfRklMRUxJU1RTfSAke19KQVZBX0NPTVBJTEVfREVQRU5EU30gJHtfSkFWQV9TT1VSQ0VTX0ZJTEV9CiAgICAgICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0KICAgICAgICAgICAgIENPTU1FTlQgIkJ1aWxkaW5nIEphdmEgb2JqZWN0cyBmb3IgJHtfVEFSR0VUX05BTUV9LmphciIKKyAgICAgICAgICAgIFZFUkJBVElNCiAgICAgICAgICkKICAgICAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICAgICAgT1VUUFVUICR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0vamF2YV9jbGFzc19maWxlbGlzdAogICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9CiAgICAgICAgICAgICAgICAgLURDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIPSR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0KLSAgICAgICAgICAgICAgICAtRENNQUtFX0pBUl9DTEFTU0VTX1BSRUZJWD0iJHtDTUFLRV9KQVJfQ0xBU1NFU19QUkVGSVh9IgotICAgICAgICAgICAgICAgIC1QICR7X0pBVkFfQ0xBU1NfRklMRUxJU1RfU0NSSVBUfQorICAgICAgICAgICAgICAgIC1EQ01BS0VfSkFSX0NMQVNTRVNfUFJFRklYPSR7Q01BS0VfSkFSX0NMQVNTRVNfUFJFRklYfQorICAgICAgICAgICAgICAgIC1QICR7Q01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUn0vVXNlSmF2YUNsYXNzRmlsZWxpc3QuY21ha2UKICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfS9qYXZhX2NvbXBpbGVkXyR7X1RBUkdFVF9OQU1FfQogICAgICAgICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9CisgICAgICAgICAgICBWRVJCQVRJTQogICAgICAgICApCiAgICAgZWxzZSAoKQogICAgICAgICAjIGNyZWF0ZSBhbiBlbXB0eSBqYXZhX2NsYXNzX2ZpbGVsaXN0CkBAIC02NjAsNiArNjcwLDcgQEAKICAgICAgICAgICAgIERFUEVORFMgJHtfSkFWQV9SRVNPVVJDRV9GSUxFU30gJHtfSkFWQV9ERVBFTkRTfSAke0NNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEh9L2phdmFfY2xhc3NfZmlsZWxpc3QKICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0KICAgICAgICAgICAgIENPTU1FTlQgIkNyZWF0aW5nIEphdmEgYXJjaGl2ZSAke19KQVZBX1RBUkdFVF9PVVRQVVRfTkFNRX0iCisgICAgICAgICAgICBWRVJCQVRJTQogICAgICAgICApCiAgICAgZWxzZSAoKQogICAgICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCkBAIC02NzUsNiArNjg2LDcgQEAKICAgICAgICAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0KICAgICAgICAgICAgIERFUEVORFMgJHtfSkFWQV9SRVNPVVJDRV9GSUxFU30gJHtfSkFWQV9ERVBFTkRTfSAke0NNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEh9L2phdmFfY2xhc3NfZmlsZWxpc3QKICAgICAgICAgICAgIENPTU1FTlQgIkNyZWF0aW5nIEphdmEgYXJjaGl2ZSAke19KQVZBX1RBUkdFVF9PVVRQVVRfTkFNRX0iCisgICAgICAgICAgICBWRVJCQVRJTQogICAgICAgICApCiAgICAgZW5kaWYgKCkKIApAQCAtMTE5MCw1NSArMTIwMiw0MCBAQAogICAgIHNldChfamF2YWRvY19vcHRpb25zIC1kICR7X2phdmFkb2NfYnVpbGRkaXJ9KQogCiAgICAgaWYgKF9qYXZhZG9jX3NvdXJjZXBhdGgpCi0gICAgICAgIHNldChfc3RhcnQgVFJVRSkKLSAgICAgICAgZm9yZWFjaChfcGF0aCBJTiBMSVNUUyBfamF2YWRvY19zb3VyY2VwYXRoKQotICAgICAgICAgICAgaWYgKF9zdGFydCkKLSAgICAgICAgICAgICAgICBzZXQoX3NvdXJjZXBhdGggJHtfcGF0aH0pCi0gICAgICAgICAgICAgICAgc2V0KF9zdGFydCBGQUxTRSkKLSAgICAgICAgICAgIGVsc2UgKCkKLSAgICAgICAgICAgICAgICBzZXQoX3NvdXJjZXBhdGggJHtfc291cmNlcGF0aH06JHtfcGF0aH0pCi0gICAgICAgICAgICBlbmRpZiAoKQotICAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgICAgc2V0KF9qYXZhZG9jX29wdGlvbnMgJHtfamF2YWRvY19vcHRpb25zfSAtc291cmNlcGF0aCAke19zb3VyY2VwYXRofSkKKyAgICAgICAgbGlzdChKT0lOIF9qYXZhZG9jX3NvdXJjZXBhdGggIiR7X1VzZUphdmFfUEFUSF9TRVB9IiBfamF2YWRvY19zb3VyY2VwYXRoKQorICAgICAgICBsaXN0KEFQUEVORCBfamF2YWRvY19vcHRpb25zIC1zb3VyY2VwYXRoICJcIiR7X2phdmFkb2Nfc291cmNlcGF0aH1cIiIpCiAgICAgZW5kaWYgKCkKIAogICAgIGlmIChfamF2YWRvY19jbGFzc3BhdGgpCi0gICAgICAgIHNldChfc3RhcnQgVFJVRSkKLSAgICAgICAgZm9yZWFjaChfcGF0aCBJTiBMSVNUUyBfamF2YWRvY19jbGFzc3BhdGgpCi0gICAgICAgICAgICBpZiAoX3N0YXJ0KQotICAgICAgICAgICAgICAgIHNldChfY2xhc3NwYXRoICR7X3BhdGh9KQotICAgICAgICAgICAgICAgIHNldChfc3RhcnQgRkFMU0UpCi0gICAgICAgICAgICBlbHNlICgpCi0gICAgICAgICAgICAgICAgc2V0KF9jbGFzc3BhdGggJHtfY2xhc3NwYXRofToke19wYXRofSkKLSAgICAgICAgICAgIGVuZGlmICgpCi0gICAgICAgIGVuZGZvcmVhY2goKQotICAgICAgICBzZXQoX2phdmFkb2Nfb3B0aW9ucyAke19qYXZhZG9jX29wdGlvbnN9IC1jbGFzc3BhdGggIiR7X2NsYXNzcGF0aH0iKQorICAgICAgICBsaXN0KEpPSU4gX2phdmFkb2NfY2xhc3NwYXRoICIke19Vc2VKYXZhX1BBVEhfU0VQfSIgX2phdmFkb2NfY2xhc3NwYXRoKQorICAgICAgICBsaXN0KEFQUEVORCBfamF2YWRvY19vcHRpb25zIC1jbGFzc3BhdGggIlwiJHtfamF2YWRvY19jbGFzc3BhdGh9XCIiKQogICAgIGVuZGlmICgpCiAKICAgICBpZiAoX2phdmFkb2NfZG9jdGl0bGUpCi0gICAgICAgIHNldChfamF2YWRvY19vcHRpb25zICR7X2phdmFkb2Nfb3B0aW9uc30gLWRvY3RpdGxlICcke19qYXZhZG9jX2RvY3RpdGxlfScpCisgICAgICAgIGxpc3QoQVBQRU5EIF9qYXZhZG9jX29wdGlvbnMgLWRvY3RpdGxlICcke19qYXZhZG9jX2RvY3RpdGxlfScpCiAgICAgZW5kaWYgKCkKIAogICAgIGlmIChfamF2YWRvY193aW5kb3d0aXRsZSkKLSAgICAgICAgc2V0KF9qYXZhZG9jX29wdGlvbnMgJHtfamF2YWRvY19vcHRpb25zfSAtd2luZG93dGl0bGUgJyR7X2phdmFkb2Nfd2luZG93dGl0bGV9JykKKyAgICAgICAgbGlzdChBUFBFTkQgX2phdmFkb2Nfb3B0aW9ucyAtd2luZG93dGl0bGUgJyR7X2phdmFkb2Nfd2luZG93dGl0bGV9JykKICAgICBlbmRpZiAoKQogCiAgICAgaWYgKF9qYXZhZG9jX2F1dGhvcikKLSAgICAgICAgc2V0KF9qYXZhZG9jX29wdGlvbnMgJHtfamF2YWRvY19vcHRpb25zfSAtYXV0aG9yKQorICAgICAgICBsaXN0KEFQUEVORCBfamF2YWRvY19vcHRpb25zIC1hdXRob3IpCiAgICAgZW5kaWYgKCkKIAogICAgIGlmIChfamF2YWRvY191c2UpCi0gICAgICAgIHNldChfamF2YWRvY19vcHRpb25zICR7X2phdmFkb2Nfb3B0aW9uc30gLXVzZSkKKyAgICAgICAgbGlzdChBUFBFTkQgX2phdmFkb2Nfb3B0aW9ucyAtdXNlKQogICAgIGVuZGlmICgpCiAKICAgICBpZiAoX2phdmFkb2NfdmVyc2lvbikKLSAgICAgICAgc2V0KF9qYXZhZG9jX29wdGlvbnMgJHtfamF2YWRvY19vcHRpb25zfSAtdmVyc2lvbikKKyAgICAgICAgbGlzdChBUFBFTkQgX2phdmFkb2Nfb3B0aW9ucyAtdmVyc2lvbikKICAgICBlbmRpZiAoKQogCiAgICAgYWRkX2N1c3RvbV90YXJnZXQoJHtfdGFyZ2V0fV9qYXZhZG9jIEFMTAotICAgICAgICBDT01NQU5EICR7SmF2YV9KQVZBRE9DX0VYRUNVVEFCTEV9ICR7X2phdmFkb2Nfb3B0aW9uc30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke19qYXZhZG9jX2ZpbGVzfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7X2phdmFkb2NfcGFja2FnZXN9CisgICAgICAgIENPTU1BTkQgJHtKYXZhX0pBVkFET0NfRVhFQ1VUQUJMRX0KKyAgICAgICAgICAgICAgICAke19qYXZhZG9jX29wdGlvbnN9CisgICAgICAgICAgICAgICAgJHtfamF2YWRvY19maWxlc30KKyAgICAgICAgICAgICAgICAke19qYXZhZG9jX3BhY2thZ2VzfQogICAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0KICAgICApCiAKQEAgLTEyNzQsMTEgKzEyNzEsNiBAQAogICAgIGVuZGlmKCkKIAogICAgIHNldCAoX291dHB1dF9maWxlcykKLSAgICBpZiAoV0lOMzIgQU5EIE5PVCBDWUdXSU4gQU5EIENNQUtFX0hPU1RfU1lTVEVNX05BTUUgTUFUQ0hFUyAiV2luZG93cyIpCi0gICAgICBzZXQoX2NsYXNzcGF0aF9zZXAgIiQ8U0VNSUNPTE9OPiIpCi0gICAgZWxzZSAoKQotICAgICAgc2V0KF9jbGFzc3BhdGhfc2VwICI6IikKLSAgICBlbmRpZigpCiAKICAgICAjIGhhbmRsZSBqYXZhaCBvcHRpb25zCiAgICAgc2V0IChfamF2YWhfb3B0aW9ucykKQEAgLTEzMDQsNyArMTI5Niw3IEBACiAgICAgICAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJjcmVhdGVfamF2YWg6IENMQVNTUEFUSCBlbnRyeSAke19wYXRofSBkb2VzIG5vdCBleGlzdC4iKQogICAgICAgICBlbmRpZigpCiAgICAgICBlbmRmb3JlYWNoKCkKLSAgICAgIHN0cmluZyAoUkVQTEFDRSAiOyIgIiR7X2NsYXNzcGF0aF9zZXB9IiBfY2xhc3NwYXRoICIke19jbGFzc3BhdGh9IikKKyAgICAgIHN0cmluZyAoUkVQTEFDRSAiOyIgIiR7X1VzZUphdmFfUEFUSF9TRVB9IiBfY2xhc3NwYXRoICIke19jbGFzc3BhdGh9IikKICAgICAgIGxpc3QgKEFQUEVORCBfamF2YWhfb3B0aW9ucyAtY2xhc3NwYXRoICIke19jbGFzc3BhdGh9IikKICAgICBlbmRpZigpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvVXNlSmF2YS9DbGVhckNsYXNzRmlsZXMuY21ha2UgYi9Nb2R1bGVzL1VzZUphdmEvQ2xlYXJDbGFzc0ZpbGVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTE1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1VzZUphdmEvQ2xlYXJDbGFzc0ZpbGVzLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KKworIyBUaGlzIHNjcmlwdCBkZWxldGVzIGNvbXBpbGVkIEphdmEgY2xhc3MgZmlsZXMuCisKK2lmKENNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEgpCisgIGlmKEVYSVNUUyAiJHtDTUFLRV9KQVZBX0NMQVNTX09VVFBVVF9QQVRIfS9qYXZhX2NsYXNzX2ZpbGVsaXN0IikKKyAgICBmaWxlKFNUUklOR1MgIiR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0vamF2YV9jbGFzc19maWxlbGlzdCIgY2xhc3NlcykKKyAgICBsaXN0KFRSQU5TRk9STSBjbGFzc2VzIFBSRVBFTkQgIiR7Q01BS0VfSkFWQV9DTEFTU19PVVRQVVRfUEFUSH0vIikKKyAgICBpZihjbGFzc2VzKQorICAgICAgZmlsZShSRU1PVkUgJHtjbGFzc2VzfSkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJDbGVhbiBjbGFzcyBmaWxlcyBmcm9tIHByZXZpb3VzIGJ1aWxkIikKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDYW4ndCBmaW5kIENNQUtFX0pBVkFfQ0xBU1NfT1VUUFVUX1BBVEgiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Vc2VTV0lHLmNtYWtlIGIvTW9kdWxlcy9Vc2VTV0lHLmNtYWtlCmluZGV4IDc4NTIyZGEuLmI3NWViNWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvVXNlU1dJRy5jbWFrZQorKysgYi9Nb2R1bGVzL1VzZVNXSUcuY21ha2UKQEAgLTQxLDYgKzQxLDE0IEBACiAgICAgY29uZmlndXJhdGlvbi1zcGVjaWZpYyBmaWxlcyBnZW5lcmF0ZWQgYnkgYGBTV0lHYGAuIEFsbCBidWlsZAogICAgIGNvbmZpZ3VyYXRpb25zIG11c3QgcmVzdWx0IGluIHRoZSBzYW1lIGdlbmVyYXRlZCBzb3VyY2UgZmlsZS4KIAorICAuLiBub3RlOjoKKworICAgIEZvciBNYWtlLWJhc2VkIGdlbmVyYXRvcnMsIGBgc3dpZ19hZGRfbGlicmFyeWBgIGRvZXMgbm90IHRyYWNrIGZpbGUKKyAgICBkZXBlbmRlbmNpZXMsIHNvIGRlcGVuZGluZyBvbiB0aGUgYGA8bmFtZT5fc3dpZ19jb21waWxhdGlvbmBgIGN1c3RvbSB0YXJnZXQKKyAgICBpcyByZXF1aXJlZCBmb3IgdGFyZ2V0cyB3aGljaCByZXF1aXJlIHRoZSBgYHN3aWdgYC1nZW5lcmF0ZWQgZmlsZXMgdG8KKyAgICBleGlzdC4gT3RoZXIgZ2VuZXJhdG9ycyBtYXkgZGVwZW5kIG9uIHRoZSBzb3VyY2UgZmlsZXMgdGhhdCB3b3VsZCBiZQorICAgIGdlbmVyYXRlZCBieSBTV0lHLgorCiAgIGBgVFlQRWBgCiAgICAgYGBTSEFSRURgYCwgYGBNT0RVTEVgYCBhbmQgYGBTVEFUSUNgYCBoYXZlIHRoZSBzYW1lIHNlbWFudGljIGFzIGZvciB0aGUKICAgICA6Y29tbWFuZDpgYWRkX2xpYnJhcnlgIGNvbW1hbmQuIElmIGBgVVNFX0JVSUxEX1NIQVJFRF9MSUJTYGAgaXMgc3BlY2lmaWVkLApAQCAtNzUsNyArODMsNyBAQAogICBgYFNPVVJDRVNgYAogICAgIExpc3Qgb2Ygc291cmNlcyBmb3IgdGhlIGxpYnJhcnkuIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGBgLmlgYCB3aWxsIGJlCiAgICAgaWRlbnRpZmllZCBhcyBzb3VyY2VzIGZvciB0aGUgYGBTV0lHYGAgdG9vbC4gT3RoZXIgZmlsZXMgd2lsbCBiZSBoYW5kbGVkIGluCi0gICAgdGhlIHN0YW5kYXJkIHdheS4gVGhpcyBiZWhhdmlvciBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHNwZWNpZnlpbmcgdGhlIHZhcmlhYmxlCisgICAgdGhlIHN0YW5kYXJkIHdheS4gVGhpcyBiZWhhdmlvciBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzcGVjaWZ5aW5nIHRoZSB2YXJpYWJsZQogICAgIGBgU1dJR19TT1VSQ0VfRklMRV9FWFRFTlNJT05TYGAuCiAKICAgLi4gbm90ZTo6CkBAIC0zNDEsNiArMzQ5LDIzIEBACiAgICAgbGlzdChBUFBFTkQgZmlsZXMgIiR7ZXh0cmFfZmlsZX0iKQogICBlbmRmb3JlYWNoKCkKIAorICBpZiAobGFuZ3VhZ2UgU1RSRVFVQUwgIkZPUlRSQU4iIEFORCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0xPQURFRCkKKyAgICAjIFByb2Nlc3MgcG9zc2libGUgdXNlci1zdXBwbGllZCBleHRlbnNpb24gaW4gZmxhZ3MgKG9idGFpbmVkIHZpYSBwYXJlbnQKKyAgICAjIHNjb3BlIHZhcmlhYmxlKSB0byBkZXRlcm1pbmUgdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisgICAgbGlzdChGSU5EIFNXSUdfQ09NUElMQVRJT05fRkxBR1MgIi1mZXh0IiBmZXh0X2lkeCkKKyAgICBpZiAoZmV4dF9pZHggRVFVQUwgLTEpCisgICAgICAjIERlZmF1bHQgRm9ydHJhbiBnZW5lcmF0ZWQgZXh0ZW5zaW9uCisgICAgICBzZXQoZmV4dCAiZjkwIikKKyAgICBlbHNlKCkKKyAgICAgICMgR2V0IGV4dGVuc2lvbiBmcm9tIHVzZXItcHJvdmlkZWQgZmxhZworICAgICAgbWF0aChFWFBSIGZleHRfaWR4ICIke2ZleHRfaWR4fSArIDEiKQorICAgICAgbGlzdChHRVQgU1dJR19DT01QSUxBVElPTl9GTEFHUyAiJHtmZXh0X2lkeH0iIGZleHQpCisgICAgZW5kaWYoKQorICAgIHNldChleHRyYV9maWxlICIke2dlbmVyYXRlZHBhdGh9LyR7bW9kdWxlX2Jhc2VuYW1lfS4ke2ZleHR9IikKKyAgICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoIiR7ZXh0cmFfZmlsZX0iIFBST1BFUlRJRVMgTEFOR1VBR0UgIkZvcnRyYW4iKQorICAgIGxpc3QoQVBQRU5EIGZpbGVzICIke2V4dHJhX2ZpbGV9IikKKyAgZW5kaWYoKQorCiAgIHNldCAoJHtvdXRmaWxlc30gJHtmaWxlc30gUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24oKQogCkBAIC00MTUsNiArNDQwLDcgQEAKICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChzd2lnX3NvdXJjZV9maWxlX2Z1bGxuYW1lICIke2luZmlsZX0iIEFCU09MVVRFKQogCiAgIGlmIChOT1QgU1dJR19NT0RVTEVfJHtuYW1lfV9OT1BST1hZKQorICAgIHNldChTV0lHX0NPTVBJTEFUSU9OX0ZMQUdTICR7c3dpZ19zb3VyY2VfZmlsZV9mbGFnc30pCiAgICAgU1dJR19HRVRfRVhUUkFfT1VUUFVUX0ZJTEVTKCR7U1dJR19NT0RVTEVfJHtuYW1lfV9MQU5HVUFHRX0KICAgICAgIHN3aWdfZXh0cmFfZ2VuZXJhdGVkX2ZpbGVzCiAgICAgICAiJHtvdXRkaXJ9IgpAQCAtNzg3LDYgKzgxMyw4IEBACiAgICAgaWYgKEFQUExFKQogICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzICgke3RhcmdldF9uYW1lfSBQUk9QRVJUSUVTIFNVRkZJWCAiLmR5bGliIikKICAgICBlbmRpZiAoKQorICBlbHNlaWYgKHN3aWdfbG93ZXJjYXNlX2xhbmd1YWdlIFNUUkVRVUFMICJmb3J0cmFuIikKKyAgICAjIERvICpub3QqIG92ZXJyaWRlIHRoZSB0YXJnZXQncyBsaWJyYXJ5IHByZWZpeAogICBlbHNlKCkKICAgICAjIGFzc3VtZSBlbXB0eSBwcmVmaXggYmVjYXVzZSB3ZSBleHBlY3QgdGhlIG1vZHVsZSB0byBiZSBkeW5hbWljYWxseSBsb2FkZWQKICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMgKCR7dGFyZ2V0X25hbWV9IFBST1BFUlRJRVMgUFJFRklYICIiKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9Vc2VTV0lHL01hbmFnZVN1cHBvcnRGaWxlcy5jbWFrZSBiL01vZHVsZXMvVXNlU1dJRy9NYW5hZ2VTdXBwb3J0RmlsZXMuY21ha2UKaW5kZXggNGEwMzkwMC4uNjYxOGZkNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9Vc2VTV0lHL01hbmFnZVN1cHBvcnRGaWxlcy5jbWFrZQorKysgYi9Nb2R1bGVzL1VzZVNXSUcvTWFuYWdlU3VwcG9ydEZpbGVzLmNtYWtlCkBAIC00LDcgKzQsNyBAQAogCiBpZiAoQUNUSU9OIFNUUkVRVUFMICJDTEVBTiIpCiAgICMgQ29sbGVjdCBjdXJyZW50IGxpc3Qgb2YgZ2VuZXJhdGVkIGZpbGVzCi0gIGZpbGUgKEdMT0IgZmlsZXMgTElTVF9ESVJFQ1RPUklFUyBGQUxTRSBSRUxBVElWRSAiJHtTVVBQT1JUX0ZJTEVTX1dPUktJTkdfRElSRUNUT1JZfSIgIiR7U1VQUE9SVF9GSUxFU19XT1JLSU5HX0RJUkVDVE9SWX0vKiIpCisgIGZpbGUgKEdMT0JfUkVDVVJTRSBmaWxlcyBMSVNUX0RJUkVDVE9SSUVTIFRSVUUgUkVMQVRJVkUgIiR7U1VQUE9SVF9GSUxFU19XT1JLSU5HX0RJUkVDVE9SWX0iICIke1NVUFBPUlRfRklMRVNfV09SS0lOR19ESVJFQ1RPUll9LyoiKQogCiAgIGlmIChmaWxlcykKICAgICAjIGNsZWFuLXVwIHRoZSBvdXRwdXQgZGlyZWN0b3J5CkBAIC0yMiw3ICsyMiw3IEBACiAKIGlmIChBQ1RJT04gU1RSRVFVQUwgIkNPUFkiKQogICAjIENvbGxlY3QgY3VycmVudCBsaXN0IG9mIGdlbmVyYXRlZCBmaWxlcwotICBmaWxlIChHTE9CIGZpbGVzIExJU1RfRElSRUNUT1JJRVMgRkFMU0UgIiR7U1VQUE9SVF9GSUxFU19XT1JLSU5HX0RJUkVDVE9SWX0vKiIpCisgIGZpbGUgKEdMT0IgZmlsZXMgTElTVF9ESVJFQ1RPUklFUyBUUlVFICIke1NVUFBPUlRfRklMRVNfV09SS0lOR19ESVJFQ1RPUll9LyoiKQogCiAgIGlmIChmaWxlcykKICAgICAjIGNvcHkgZmlsZXMgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL01vZHVsZXMvV3JpdGVDb21waWxlckRldGVjdGlvbkhlYWRlci5jbWFrZSBiL01vZHVsZXMvV3JpdGVDb21waWxlckRldGVjdGlvbkhlYWRlci5jbWFrZQppbmRleCAyM2Q4MWI1Li41MTAwMDM1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL1dyaXRlQ29tcGlsZXJEZXRlY3Rpb25IZWFkZXIuY21ha2UKKysrIGIvTW9kdWxlcy9Xcml0ZUNvbXBpbGVyRGV0ZWN0aW9uSGVhZGVyLmNtYWtlCkBAIC01LDYgKzUsOCBAQAogV3JpdGVDb21waWxlckRldGVjdGlvbkhlYWRlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uIGBgd3JpdGVfY29tcGlsZXJfZGV0ZWN0aW9uX2hlYWRlcigpYGAuCiAKIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBmaWxlIHN1aXRhYmxlIGZvciBwcmVwcm9jZXNzb3IKZGlmZiAtLWdpdCBhL01vZHVsZXMvcmVhZG1lLnR4dCBiL01vZHVsZXMvcmVhZG1lLnR4dAppbmRleCBhNjI5NDc4Li5kYTc4NzMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3JlYWRtZS50eHQKKysrIGIvTW9kdWxlcy9yZWFkbWUudHh0CkBAIC0xLDQgKzEsNCBAQAogU2VlIHRoZSAiRmluZCBNb2R1bGVzIiBzZWN0aW9uIG9mIHRoZSBjbWFrZS1kZXZlbG9wZXIoNykgbWFudWFsIHBhZ2UuCiAKIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBjb250cmlidXRlIG1vZHVsZXMgdG8gQ01ha2UsIHNlZSB0aGlzIHBhZ2U6Ci1odHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvd2lraXMvZG9jL2NtYWtlL2Rldi9Nb2R1bGUtTWFpbnRhaW5lcnMKK2h0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NvbW11bml0eS8tL3dpa2lzL2RvYy9jbWFrZS9kZXYvTW9kdWxlLU1haW50YWluZXJzCmRpZmYgLS1naXQgYS9SRUFETUUucnN0IGIvUkVBRE1FLnJzdAppbmRleCA1MDIwZDM5Li42NGUyMzUzIDEwMDY0NAotLS0gYS9SRUFETUUucnN0CisrKyBiL1JFQURNRS5yc3QKQEAgLTExLDcgKzExLDcgQEAKIAogLi4gX2BDTWFrZSBIb21lIFBhZ2VgOiBodHRwczovL2NtYWtlLm9yZwogLi4gX2BDTWFrZSBEb2N1bWVudGF0aW9uIFBhZ2VgOiBodHRwczovL2NtYWtlLm9yZy9kb2N1bWVudGF0aW9uCi0uLiBfYENNYWtlIENvbW11bml0eSBXaWtpYDogaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY29tbXVuaXR5L3dpa2lzL2hvbWUKKy4uIF9gQ01ha2UgQ29tbXVuaXR5IFdpa2lgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jb21tdW5pdHkvLS93aWtpcy9ob21lCiAKIENNYWtlIGlzIG1haW50YWluZWQgYW5kIHN1cHBvcnRlZCBieSBgS2l0d2FyZWBfIGFuZCBkZXZlbG9wZWQgaW4KIGNvbGxhYm9yYXRpb24gd2l0aCBhIHByb2R1Y3RpdmUgY29tbXVuaXR5IG9mIGNvbnRyaWJ1dG9ycy4KQEAgLTEyMiw3ICsxMjIsNyBAQAogMy4gRmluYWxseSwgaWYgdGhlIGlzc3VlIGlzIG5vdCByZXNvbHZlZCBieSB0aGUgYWJvdmUgc3RlcHMsIG9wZW4KICAgIGFuIGVudHJ5IGluIHRoZSBgQ01ha2UgSXNzdWUgVHJhY2tlcmBfLgogCi0uLiBfYENNYWtlIElzc3VlIFRyYWNrZXJgOiBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMKKy4uIF9gQ01ha2UgSXNzdWUgVHJhY2tlcmA6IGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzCiAKIENvbnRyaWJ1dGluZwogPT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvQ01ha2VMaXN0cy50eHQKaW5kZXggYjFmN2IyOS4uZWU4NzY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9DTWFrZUxpc3RzLnR4dApAQCAtMSw5ICsxLDE2IEBACiAjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCiAKKyMgVG8gZW5zdXJlIG1heGltdW0gcG9ydGFiaWxpdHkgYWNyb3NzIHZhcmlvdXMgY29tcGlsZXJzIGFuZCBwbGF0Zm9ybXMKKyMgZGVhY3RpdmF0ZSBhbnkgY29tcGlsZXIgZXh0ZW5zaW9ucworc2V0KENNQUtFX0NfRVhURU5TSU9OUyBGQUxTRSkKK3NldChDTUFLRV9DWFhfRVhURU5TSU9OUyBGQUxTRSkKKwogaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlKQogIyBDaGVjayBpZiB3ZSBjYW4gYnVpbGQgc3VwcG9ydCBmb3IgRUxGIHBhcnNpbmcuCi1pZihDTUFLRV9DWFhfUExBVEZPUk1fSUQgTUFUQ0hFUyAiT3BlbkJTRCIpCitpZihXSU4zMikKKyAgc2V0KEhBVkVfRUxGX0ggMCkKK2Vsc2VpZihDTUFLRV9DWFhfUExBVEZPUk1fSUQgTUFUQ0hFUyAiT3BlbkJTRCIpCiAgIENIRUNLX0lOQ0xVREVfRklMRVMoInN0ZGludC5oO2VsZl9hYmkuaCIgSEFWRV9FTEZfSCkKIGVsc2UoKQogICBDSEVDS19JTkNMVURFX0ZJTEUoImVsZi5oIiBIQVZFX0VMRl9IKQpAQCAtMTM0LDYgKzE0MSw5IEBACiAgIExleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci5jeHgKICAgTGV4ZXJQYXJzZXIvY21Gb3J0cmFuUGFyc2VyVG9rZW5zLmgKICAgTGV4ZXJQYXJzZXIvY21Gb3J0cmFuUGFyc2VyLnkKKyAgTGV4ZXJQYXJzZXIvY21HY2NEZXBmaWxlTGV4ZXIuY3h4CisgIExleGVyUGFyc2VyL2NtR2NjRGVwZmlsZUxleGVyLmgKKyAgTGV4ZXJQYXJzZXIvY21HY2NEZXBmaWxlTGV4ZXIuaW4ubAogICBMZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuYwogICBMZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuaW4ubAogCkBAIC0yNzAsNiArMjgwLDEwIEBACiAgIGNtRm9ydHJhblBhcnNlckltcGwuY3h4CiAgIGNtRlNQZXJtaXNzaW9ucy5jeHgKICAgY21GU1Blcm1pc3Npb25zLmgKKyAgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIuY3h4CisgIGNtR2NjRGVwZmlsZUxleGVySGVscGVyLmgKKyAgY21HY2NEZXBmaWxlUmVhZGVyLmN4eAorICBjbUdjY0RlcGZpbGVSZWFkZXIuaAogICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0uY3h4CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuY3h4CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaApAQCAtMjg5LDYgKzMwMyw4IEBACiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oCiAgIGNtR2VuZXJhdG9yVGFyZ2V0LmN4eAogICBjbUdlbmVyYXRvclRhcmdldC5oCisgIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3IuY3h4CisgIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3IuaAogICBjbUdldFBpcGVzLmN4eAogICBjbUdldFBpcGVzLmgKICAgY21HbG9iYWxDb21tb25HZW5lcmF0b3IuY3h4CkBAIC0zNDUsNiArMzYxLDcgQEAKICAgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5jeHgKICAgY21NYWtlZmlsZUV4ZWN1dGFibGVUYXJnZXRHZW5lcmF0b3IuY3h4CiAgIGNtTWFrZWZpbGVMaWJyYXJ5VGFyZ2V0R2VuZXJhdG9yLmN4eAorICBjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5jeHgKICAgY21NYWtlZmlsZVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuY3h4CiAgIGNtTWVzc2FnZVR5cGUuaAogICBjbU1lc3Nlbmdlci5jeHgKQEAgLTM2OCw4ICszODUsNiBAQAogICBjbVByb3BlcnR5LmgKICAgY21Qcm9wZXJ0eURlZmluaXRpb24uY3h4CiAgIGNtUHJvcGVydHlEZWZpbml0aW9uLmgKLSAgY21Qcm9wZXJ0eURlZmluaXRpb25NYXAuY3h4Ci0gIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwLmgKICAgY21Qcm9wZXJ0eU1hcC5jeHgKICAgY21Qcm9wZXJ0eU1hcC5oCiAgIGNtUXRBdXRvR2VuLmN4eApAQCAtMzk3LDYgKzQxMiw4IEBACiAgIGNtU291cmNlRmlsZUxvY2F0aW9uS2luZC5oCiAgIGNtU291cmNlR3JvdXAuY3h4CiAgIGNtU291cmNlR3JvdXAuaAorICBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5jeHgKKyAgY21TdGFuZGFyZExldmVsUmVzb2x2ZXIuaAogICBjbVN0YXRlLmN4eAogICBjbVN0YXRlLmgKICAgY21TdGF0ZURpcmVjdG9yeS5jeHgKQEAgLTQ3Nyw2ICs0OTQsOCBAQAogICBjbUJ1aWxkTmFtZUNvbW1hbmQuaAogICBjbUNNYWtlSG9zdFN5c3RlbUluZm9ybWF0aW9uQ29tbWFuZC5jeHgKICAgY21DTWFrZUhvc3RTeXN0ZW1JbmZvcm1hdGlvbkNvbW1hbmQuaAorICBjbUNNYWtlTGFuZ3VhZ2VDb21tYW5kLmN4eAorICBjbUNNYWtlTGFuZ3VhZ2VDb21tYW5kLmgKICAgY21DTWFrZU1pbmltdW1SZXF1aXJlZC5jeHgKICAgY21DTWFrZU1pbmltdW1SZXF1aXJlZC5oCiAgIGNtQ01ha2VQb2xpY3lDb21tYW5kLmN4eApAQCAtNjgxLDcgKzcwMCw2IEBACiAgIGNtV3JpdGVGaWxlQ29tbWFuZC5jeHgKICAgY21Xcml0ZUZpbGVDb21tYW5kLmgKIAotICBjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4CiAgIGNtX2dldF9kYXRlLmgKICAgY21fZ2V0X2RhdGUuYwogICBjbV91dGY4LmgKQEAgLTY5MSw2ICs3MDksOCBAQAogCiAgIGNtRHVyYXRpb24uaAogICBjbUR1cmF0aW9uLmN4eAorCisgIGJpbmRleHBsaWIuY3h4CiAgICkKIAogU0VUX1BST1BFUlRZKFNPVVJDRSBjbVByb2Nlc3NPdXRwdXQuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCkBAIC03MTMsNyArNzMzLDYgQEAKICAgc2V0KFNSQ1MgJHtTUkNTfQogICAgIGNtQ2FsbFZpc3VhbFN0dWRpb01hY3JvLmN4eAogICAgIGNtQ2FsbFZpc3VhbFN0dWRpb01hY3JvLmgKLSAgICBiaW5kZXhwbGliLmN4eAogICAgICkKIAogICBpZihOT1QgVU5JWCkKQEAgLTExOTMsNiArMTIxMiwxMSBAQAogICBlbmRmb3JlYWNoKCkKIGVuZGlmKCkKIAoraWYoQ01ha2VfSk9CX1BPT0xfTElOS19CSU4pCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtfdG9vbHN9IFBST1BFUlRZIEpPQl9QT09MX0xJTksgImxpbmstYmluIikKKyAgc2V0X3Byb3BlcnR5KEdMT0JBTCBBUFBFTkQgUFJPUEVSVFkgSk9CX1BPT0xTICJsaW5rLWJpbj0ke0NNYWtlX0pPQl9QT09MX0xJTktfQklOfSIpCitlbmRpZigpCisKICMgSW5zdGFsbCB0b29scwogCiBmb3JlYWNoKF90b29sICR7X3Rvb2xzfSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9DTWFrZVZlcnNpb24uY21ha2UgYi9Tb3VyY2UvQ01ha2VWZXJzaW9uLmNtYWtlCmluZGV4IDRlMTdkNTEuLjM2NWU2MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DTWFrZVZlcnNpb24uY21ha2UKKysrIGIvU291cmNlL0NNYWtlVmVyc2lvbi5jbWFrZQpAQCAtMSw3ICsxLDcgQEAKICMgQ01ha2UgdmVyc2lvbiBudW1iZXIgY29tcG9uZW50cy4KIHNldChDTWFrZV9WRVJTSU9OX01BSk9SIDMpCi1zZXQoQ01ha2VfVkVSU0lPTl9NSU5PUiAxNikKLXNldChDTWFrZV9WRVJTSU9OX1BBVENIIDgpCitzZXQoQ01ha2VfVkVSU0lPTl9NSU5PUiAxOCkKK3NldChDTWFrZV9WRVJTSU9OX1BBVENIIDIwMjAwODEwKQogI3NldChDTWFrZV9WRVJTSU9OX1JDIDApCiBzZXQoQ01ha2VfVkVSU0lPTl9JU19ESVJUWSAwKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldDb21tb24uY3h4IGIvU291cmNlL0NQYWNrL0lGVy9jbUNQYWNrSUZXQ29tbW9uLmN4eAppbmRleCA5ZmE3NGJlLi4yMGQzOTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldDb21tb24uY3h4CisrKyBiL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV0NvbW1vbi5jeHgKQEAgLTIsNyArMiw3IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUNQYWNrSUZXQ29tbW9uLmgiCiAKLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldHZW5lcmF0b3IuY3h4CmluZGV4IDUwOWFjNjUuLjI4MDZjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL0NQYWNrL0lGVy9jbUNQYWNrSUZXR2VuZXJhdG9yLmN4eApAQCAtNTQ0LDEwICs1NDQsNyBAQAogICBpZiAoZ3JvdXAtPlBhcmVudEdyb3VwKSB7CiAgICAgY21DUGFja0lGV1BhY2thZ2UqIHBhY2thZ2UgPSB0aGlzLT5HZXRHcm91cFBhY2thZ2UoZ3JvdXAtPlBhcmVudEdyb3VwKTsKICAgICBib29sIGRvdCA9ICF0aGlzLT5SZXNvbHZlRHVwbGljYXRlTmFtZXM7Ci0gICAgaWYgKGRvdCAmJiBuYW1lLnN1YnN0cigwLCBwYWNrYWdlLT5OYW1lLnNpemUoKSkgPT0gcGFja2FnZS0+TmFtZSkgewotICAgICAgZG90ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChkb3QpIHsKKyAgICBpZiAoZG90ICYmICFjbUhhc1ByZWZpeChuYW1lLCBwYWNrYWdlLT5OYW1lKSkgewogICAgICAgbmFtZSA9IHBhY2thZ2UtPk5hbWUgKyAiLiIgKyBuYW1lOwogICAgIH0KICAgfQpAQCAtNTc2LDEwICs1NzMsNyBAQAogICAgICAgcmV0dXJuIHBhY2thZ2UtPk5hbWU7CiAgICAgfQogICAgIGJvb2wgZG90ID0gIXRoaXMtPlJlc29sdmVEdXBsaWNhdGVOYW1lczsKLSAgICBpZiAoZG90ICYmIG5hbWUuc3Vic3RyKDAsIHBhY2thZ2UtPk5hbWUuc2l6ZSgpKSA9PSBwYWNrYWdlLT5OYW1lKSB7Ci0gICAgICBkb3QgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRvdCkgeworICAgIGlmIChkb3QgJiYgIWNtSGFzUHJlZml4KG5hbWUsIHBhY2thZ2UtPk5hbWUpKSB7CiAgICAgICBuYW1lID0gcGFja2FnZS0+TmFtZSArICIuIiArIG5hbWU7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldQYWNrYWdlLmN4eCBiL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV1BhY2thZ2UuY3h4CmluZGV4IDlhOWNkNTYuLjU2YTc0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV1BhY2thZ2UuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9JRlcvY21DUGFja0lGV1BhY2thZ2UuY3h4CkBAIC01NSw4ICs1NSw3IEBACiAgIGlmIChkYXNoUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgcG9zID0gZGFzaFBvczsKICAgfQotICB0aGlzLT5OYW1lID0KLSAgICBwb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBkZXBlbmRlbmNlIDogZGVwZW5kZW5jZS5zdWJzdHIoMCwgcG9zKTsKKyAgdGhpcy0+TmFtZSA9IGRlcGVuZGVuY2Uuc3Vic3RyKDAsIHBvcyk7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtQ1BhY2tJRldQYWNrYWdlOjpEZXBlbmRlbmNlU3RydWN0OjpOYW1lV2l0aENvbXBhcmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL0lGVy9jbUNQYWNrSUZXUmVwb3NpdG9yeS5jeHggYi9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldSZXBvc2l0b3J5LmN4eAppbmRleCBhNjk2NTQ5Li5mNWU4NzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldSZXBvc2l0b3J5LmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svSUZXL2NtQ1BhY2tJRldSZXBvc2l0b3J5LmN4eApAQCAtMjEsMTEgKzIxLDcgQEAKIAogICBzd2l0Y2ggKHRoaXMtPlVwZGF0ZSkgewogICAgIGNhc2UgY21DUGFja0lGV1JlcG9zaXRvcnk6Ok5vbmU6Ci0gICAgICB2YWxpZCA9ICF0aGlzLT5VcmwuZW1wdHkoKTsKLSAgICAgIGJyZWFrOwogICAgIGNhc2UgY21DUGFja0lGV1JlcG9zaXRvcnk6OkFkZDoKLSAgICAgIHZhbGlkID0gIXRoaXMtPlVybC5lbXB0eSgpOwotICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbUNQYWNrSUZXUmVwb3NpdG9yeTo6UmVtb3ZlOgogICAgICAgdmFsaWQgPSAhdGhpcy0+VXJsLmVtcHR5KCk7CiAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9PU1hTY3JpcHRMYXVuY2hlci5jeHggYi9Tb3VyY2UvQ1BhY2svT1NYU2NyaXB0TGF1bmNoZXIuY3h4CmluZGV4IDIxZDI3YTAuLmJkYWY3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9PU1hTY3JpcHRMYXVuY2hlci5jeHgKKysrIGIvU291cmNlL0NQYWNrL09TWFNjcmlwdExhdW5jaGVyLmN4eApAQCAtNSw2ICs1LDggQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgpAQCAtMjYsNyArMjgsNiBAQAogICBDRlN0cmluZ1JlZiBmaWxlTmFtZTsKICAgQ0ZCdW5kbGVSZWYgYXBwQnVuZGxlOwogICBDRlVSTFJlZiBzY3JpcHRGaWxlVVJMOwotICBVSW50OCogcGF0aDsKIAogICAvLyBnZXQgQ0YgVVJMIGZvciBzY3JpcHQKICAgaWYgKCEoYXBwQnVuZGxlID0gQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCkpKSB7CkBAIC00MSwxMyArNDIsMTUgQEAKICAgfQogCiAgIC8vIGNyZWF0ZSBwYXRoIHN0cmluZwotICBpZiAoIShwYXRoID0gbmV3IFVJbnQ4W1BBVEhfTUFYXSkpIHsKKyAgYXV0byBwYXRoID0gY206Om1ha2VfdW5pcXVlPFVJbnQ4W10+KFBBVEhfTUFYKTsKKyAgaWYgKCFwYXRoKSB7CiAgICAgcmV0dXJuIDE7CiAgIH0KIAogICAvLyBnZXQgdGhlIGZpbGUgc3lzdGVtIHBhdGggb2YgdGhlIHVybCBhcyBhIGNzdHJpbmcKICAgLy8gaW4gYW4gZW5jb2Rpbmcgc3VpdGFibGUgZm9yIHBvc2l4IGFwaXMKLSAgaWYgKCFDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzY3JpcHRGaWxlVVJMLCB0cnVlLCBwYXRoLCBQQVRIX01BWCkpIHsKKyAgaWYgKCFDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzY3JpcHRGaWxlVVJMLCB0cnVlLCBwYXRoLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYKSkgewogICAgIERlYnVnRXJyb3IoIkNGVVJMR2V0RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uIGZhaWxlZCIpOwogICAgIHJldHVybiAxOwogICB9CkBAIC01NSwxMCArNTgsMTAgQEAKICAgLy8gZGlzcG9zZSBvZiB0aGUgQ0YgdmFyaWFibGUKICAgQ0ZSZWxlYXNlKHNjcmlwdEZpbGVVUkwpOwogCi0gIHN0ZDo6c3RyaW5nIGZ1bGxTY3JpcHRQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGF0aCk7Ci0gIGRlbGV0ZVtdIHBhdGg7CisgIHN0ZDo6c3RyaW5nIGZ1bGxTY3JpcHRQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGF0aC5nZXQoKSk7CisgIHBhdGgucmVzZXQoKTsKIAotICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsU2NyaXB0UGF0aC5jX3N0cigpKSkgeworICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsU2NyaXB0UGF0aCkpIHsKICAgICByZXR1cm4gMTsKICAgfQogCkBAIC04MCw3ICs4Myw2IEBACiAgIGNtc3lzUHJvY2Vzc19TZXRUaW1lb3V0KGNwLCAwKTsKICAgY21zeXNQcm9jZXNzX0V4ZWN1dGUoY3ApOwogCi0gIHN0ZDo6dmVjdG9yPGNoYXI+IHRlbXBPdXRwdXQ7CiAgIGNoYXIqIGRhdGE7CiAgIGludCBsZW5ndGg7CiAgIHdoaWxlIChjbXN5c1Byb2Nlc3NfV2FpdEZvckRhdGEoY3AsICZkYXRhLCAmbGVuZ3RoLCBudWxscHRyKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL1dpWC9jbUNQYWNrV0lYR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9DUGFjay9XaVgvY21DUGFja1dJWEdlbmVyYXRvci5jeHgKaW5kZXggZTcxYTM4Zi4uNzJhZjEwYiAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL1dpWC9jbUNQYWNrV0lYR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuY3h4CkBAIC00LDE0ICs0LDE1IEBACiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKICNpbmNsdWRlICJjbXN5cy9FbmNvZGluZy5oeHgiCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvU3lzdGVtVG9vbHMuaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DUGFja0NvbXBvbmVudEdyb3VwLmgiCiAjaW5jbHVkZSAiY21DUGFja0xvZy5oIgogI2luY2x1ZGUgImNtQ3J5cHRvSGFzaC5oIgpAQCAtMzUsMjIgKzM2LDE2IEBACiAjaW5jbHVkZSAiY21DTWFrZVRvV2l4UGF0aC5oIgogCiBjbUNQYWNrV0lYR2VuZXJhdG9yOjpjbUNQYWNrV0lYR2VuZXJhdG9yKCkKLSAgOiBQYXRjaCgwKQotICAsIENvbXBvbmVudEd1aWRUeXBlKGNtV0lYU291cmNlV3JpdGVyOjpXSVhfR0VORVJBVEVEX0dVSUQpCisgIDogQ29tcG9uZW50R3VpZFR5cGUoY21XSVhTb3VyY2VXcml0ZXI6OldJWF9HRU5FUkFURURfR1VJRCkKIHsKIH0KIAotY21DUGFja1dJWEdlbmVyYXRvcjo6fmNtQ1BhY2tXSVhHZW5lcmF0b3IoKQotewotICBpZiAodGhpcy0+UGF0Y2gpIHsKLSAgICBkZWxldGUgdGhpcy0+UGF0Y2g7Ci0gIH0KLX0KK2NtQ1BhY2tXSVhHZW5lcmF0b3I6On5jbUNQYWNrV0lYR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiBpbnQgY21DUGFja1dJWEdlbmVyYXRvcjo6SW5pdGlhbGl6ZUludGVybmFsKCkKIHsKICAgY29tcG9uZW50UGFja2FnZU1ldGhvZCA9IE9ORV9QQUNLQUdFOwotICB0aGlzLT5QYXRjaCA9IG5ldyBjbVdJWFBhdGNoKHRoaXMtPkxvZ2dlcik7CisgIHRoaXMtPlBhdGNoID0gY206Om1ha2VfdW5pcXVlPGNtV0lYUGF0Y2g+KHRoaXMtPkxvZ2dlcik7CiAKICAgcmV0dXJuIHRoaXMtPlN1cGVyY2xhc3M6OkluaXRpYWxpemVJbnRlcm5hbCgpOwogfQpAQCAtMTAzLDcgKzk4LDcgQEAKICAgICBjb21tYW5kIDw8ICIgLWV4dCAiIDw8IFF1b3RlUGF0aChleHQpOwogICB9CiAKLSAgaWYgKHNvdXJjZUZpbGUucmZpbmQodGhpcy0+Q1BhY2tUb3BMZXZlbCwgMCkgIT0gMCkgeworICBpZiAoIWNtSGFzU3VmZml4KHNvdXJjZUZpbGUsIHRoaXMtPkNQYWNrVG9wTGV2ZWwpKSB7CiAgICAgY29tbWFuZCA8PCAiICIgPDwgUXVvdGVQYXRoKCItSSIgKyB0aGlzLT5DUGFja1RvcExldmVsKTsKICAgfQogCkBAIC0zNTUsOCArMzUwLDcgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdGlvbnMgPSBHZXRPcHRpb25zKCk7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IG9wdGlvbnMpIHsKLSAgICBpZiAobmFtZS5sZW5ndGgoKSA+IHByZWZpeC5sZW5ndGgoKSAmJgotICAgICAgICBuYW1lLnN1YnN0cigwLCBwcmVmaXgubGVuZ3RoKCkpID09IHByZWZpeCkgeworICAgIGlmIChjbUhhc1ByZWZpeChuYW1lLCBwcmVmaXgpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBpZCA9IG5hbWUuc3Vic3RyKHByZWZpeC5sZW5ndGgoKSk7CiAgICAgICBzdGQ6OnN0cmluZyB2YWx1ZSA9IEdldE9wdGlvbihuYW1lLmNfc3RyKCkpOwogCkBAIC05NjAsNyArOTU0LDcgQEAKICAgICAgICAgICBzaG9ydGN1dC53b3JraW5nRGlyZWN0b3J5SWQgPSBkaXJlY3RvcnlJZDsKICAgICAgICAgICBzaG9ydGN1dHMuaW5zZXJ0KGNtV0lYU2hvcnRjdXRzOjpTVEFSVF9NRU5VLCBpZCwgc2hvcnRjdXQpOwogCi0gICAgICAgICAgaWYgKGNtQ29udGFpbnMoZGVza3RvcEV4ZWN1dGFibGVzLCBleGVjdXRhYmxlTmFtZSkpIHsKKyAgICAgICAgICBpZiAoY206OmNvbnRhaW5zKGRlc2t0b3BFeGVjdXRhYmxlcywgZXhlY3V0YWJsZU5hbWUpKSB7CiAgICAgICAgICAgICBzaG9ydGN1dHMuaW5zZXJ0KGNtV0lYU2hvcnRjdXRzOjpERVNLVE9QLCBpZCwgc2hvcnRjdXQpOwogICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTEwNCwxNCArMTA5OCwxNCBAQAogICBjbUNyeXB0b0hhc2ggc2hhMShjbUNyeXB0b0hhc2g6OkFsZ29TSEExKTsKICAgc3RkOjpzdHJpbmcgY29uc3QgaGFzaCA9IHNoYTEuSGFzaFN0cmluZyhwYXRoKTsKIAotICBzdGQ6OnN0cmluZyBpZGVudGlmaWVyID0gY21TdHJDYXQoY206OnN0cmluZ192aWV3KGhhc2gpLnN1YnN0cigwLCA3KSwgJ18nKTsKLQogICBjb25zdCBzaXplX3QgbWF4RmlsZU5hbWVMZW5ndGggPSA1MjsKKyAgc3RkOjpzdHJpbmcgaWRlbnRpZmllciA9CisgICAgY21TdHJDYXQoY206OnN0cmluZ192aWV3KGhhc2gpLnN1YnN0cigwLCA3KSwgJ18nLAorICAgICAgICAgICAgIGNtOjpzdHJpbmdfdmlldyhub3JtYWxpemVkRmlsZW5hbWUpLnN1YnN0cigwLCBtYXhGaWxlTmFtZUxlbmd0aCkpOworCisgIC8vIGlmIHRoZSBuYW1lIHdhcyB0cnVuY2F0ZWQKICAgaWYgKG5vcm1hbGl6ZWRGaWxlbmFtZS5sZW5ndGgoKSA+IG1heEZpbGVOYW1lTGVuZ3RoKSB7Ci0gICAgaWRlbnRpZmllciArPSBub3JtYWxpemVkRmlsZW5hbWUuc3Vic3RyKDAsIG1heEZpbGVOYW1lTGVuZ3RoIC0gMyk7CiAgICAgaWRlbnRpZmllciArPSAiLi4uIjsKLSAgfSBlbHNlIHsKLSAgICBpZGVudGlmaWVyICs9IG5vcm1hbGl6ZWRGaWxlbmFtZTsKICAgfQogCiAgIHJldHVybiBpZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL1dpWC9jbUNQYWNrV0lYR2VuZXJhdG9yLmggYi9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuaAppbmRleCBkMTkzMzQ4Li5kNWExNmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvQ1BhY2svV2lYL2NtQ1BhY2tXSVhHZW5lcmF0b3IuaApAQCAtNCw2ICs0LDcgQEAKICNkZWZpbmUgY21DUGFja1dJWEdlbmVyYXRvcl9oCiAKICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KIAogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKQEAgLTI0LDYgKzI1LDggQEAKICAgY21DUGFja1R5cGVNYWNybyhjbUNQYWNrV0lYR2VuZXJhdG9yLCBjbUNQYWNrR2VuZXJhdG9yKTsKIAogICBjbUNQYWNrV0lYR2VuZXJhdG9yKCk7CisgIGNtQ1BhY2tXSVhHZW5lcmF0b3IoY29uc3QgY21DUGFja1dJWEdlbmVyYXRvciYpID0gZGVsZXRlOworICBjb25zdCBjbUNQYWNrV0lYR2VuZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgY21DUGFja1dJWEdlbmVyYXRvciYpID0gZGVsZXRlOwogICB+Y21DUGFja1dJWEdlbmVyYXRvcigpOwogCiBwcm90ZWN0ZWQ6CkBAIC0xNTcsNyArMTYwLDcgQEAKIAogICBzdGQ6OnN0cmluZyBDUGFja1RvcExldmVsOwogCi0gIGNtV0lYUGF0Y2gqIFBhdGNoOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21XSVhQYXRjaD4gUGF0Y2g7CiAKICAgY21XSVhTb3VyY2VXcml0ZXI6Okd1aWRUeXBlIENvbXBvbmVudEd1aWRUeXBlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhBY2Nlc3NDb250cm9sTGlzdC5jeHggYi9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYQWNjZXNzQ29udHJvbExpc3QuY3h4CmluZGV4IDM2NjhiNDYuLjk2ODVhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhBY2Nlc3NDb250cm9sTGlzdC5jeHgKKysrIGIvU291cmNlL0NQYWNrL1dpWC9jbVdJWEFjY2Vzc0NvbnRyb2xMaXN0LmN4eApAQCAtMiw2ICsyLDggQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtV0lYQWNjZXNzQ29udHJvbExpc3QuaCIKIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21DUGFja0dlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTM1LDEyICszNywxMyBAQAogICAgIHJldHVybjsKICAgfQogCi0gIHN0ZDo6c3RyaW5nIHVzZXJfYW5kX2RvbWFpbiA9IGVudHJ5LnN1YnN0cigwLCBwb3MpOwotICBzdGQ6OnN0cmluZyBwZXJtaXNzaW9uX3N0cmluZyA9IGVudHJ5LnN1YnN0cihwb3MgKyAxKTsKKyAgY206OnN0cmluZ192aWV3IGVudmlldyhlbnRyeSk7CisgIGNtOjpzdHJpbmdfdmlldyB1c2VyX2FuZF9kb21haW4gPSBlbnZpZXcuc3Vic3RyKDAsIHBvcyk7CisgIGNtOjpzdHJpbmdfdmlldyBwZXJtaXNzaW9uX3N0cmluZyA9IGVudmlldy5zdWJzdHIocG9zICsgMSk7CiAKICAgcG9zID0gdXNlcl9hbmRfZG9tYWluLmZpbmQoJ0AnKTsKLSAgc3RkOjpzdHJpbmcgdXNlcjsKLSAgc3RkOjpzdHJpbmcgZG9tYWluOworICBjbTo6c3RyaW5nX3ZpZXcgdXNlcjsKKyAgY206OnN0cmluZ192aWV3IGRvbWFpbjsKICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHVzZXIgPSB1c2VyX2FuZF9kb21haW4uc3Vic3RyKDAsIHBvcyk7CiAgICAgZG9tYWluID0gdXNlcl9hbmRfZG9tYWluLnN1YnN0cihwb3MgKyAxKTsKQEAgLTUxLDkgKzU0LDkgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBlcm1pc3Npb25zID0gY21Ub2tlbml6ZShwZXJtaXNzaW9uX3N0cmluZywgIiwiKTsKIAogICB0aGlzLT5Tb3VyY2VXcml0ZXIuQmVnaW5FbGVtZW50KCJQZXJtaXNzaW9uIik7Ci0gIHRoaXMtPlNvdXJjZVdyaXRlci5BZGRBdHRyaWJ1dGUoIlVzZXIiLCB1c2VyKTsKKyAgdGhpcy0+U291cmNlV3JpdGVyLkFkZEF0dHJpYnV0ZSgiVXNlciIsIHN0ZDo6c3RyaW5nKHVzZXIpKTsKICAgaWYgKCFkb21haW4uZW1wdHkoKSkgewotICAgIHRoaXMtPlNvdXJjZVdyaXRlci5BZGRBdHRyaWJ1dGUoIkRvbWFpbiIsIGRvbWFpbik7CisgICAgdGhpcy0+U291cmNlV3JpdGVyLkFkZEF0dHJpYnV0ZSgiRG9tYWluIiwgc3RkOjpzdHJpbmcoZG9tYWluKSk7CiAgIH0KICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcGVybWlzc2lvbiA6IHBlcm1pc3Npb25zKSB7CiAgICAgdGhpcy0+RW1pdEJvb2xlYW5BdHRyaWJ1dGUoZW50cnksIGNtVHJpbVdoaXRlc3BhY2UocGVybWlzc2lvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL1dpWC9jbVdJWEZpbGVzU291cmNlV3JpdGVyLmN4eCBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhGaWxlc1NvdXJjZVdyaXRlci5jeHgKaW5kZXggYzBkODc5YS4uYjQwODVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL1dpWC9jbVdJWEZpbGVzU291cmNlV3JpdGVyLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYRmlsZXNTb3VyY2VXcml0ZXIuY3h4CkBAIC0xLDUgKzEsMTAgQEAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisvLyBGb3IgU19JV1JJVEUgc3ltYm9sCisjICBkZWZpbmUgX0RFRkFVTFRfU09VUkNFCisjZW5kaWYKKwogI2luY2x1ZGUgImNtV0lYRmlsZXNTb3VyY2VXcml0ZXIuaCIKIAogI2luY2x1ZGUgImNtX3N5c19zdGF0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2guY3h4IGIvU291cmNlL0NQYWNrL1dpWC9jbVdJWFBhdGNoLmN4eAppbmRleCBjYTIzMmY5Li4xMjJmZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2guY3h4CisrKyBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaC5jeHgKQEAgLTQxLDcgKzQxLDcgQEAKIHZvaWQgY21XSVhQYXRjaDo6QXBwbHlFbGVtZW50Q2hpbGRyZW4oY29uc3QgY21XSVhQYXRjaEVsZW1lbnQmIGVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtV0lYU291cmNlV3JpdGVyJiB3cml0ZXIpCiB7Ci0gIGZvciAoY21XSVhQYXRjaE5vZGUqIG5vZGUgOiBlbGVtZW50LmNoaWxkcmVuKSB7CisgIGZvciAoY29uc3QgYXV0byYgbm9kZSA6IGVsZW1lbnQuY2hpbGRyZW4pIHsKICAgICBzd2l0Y2ggKG5vZGUtPnR5cGUoKSkgewogICAgICAgY2FzZSBjbVdJWFBhdGNoTm9kZTo6RUxFTUVOVDoKICAgICAgICAgQXBwbHlFbGVtZW50KGR5bmFtaWNfY2FzdDxjb25zdCBjbVdJWFBhdGNoRWxlbWVudCY+KCpub2RlKSwgd3JpdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5jeHggYi9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2hQYXJzZXIuY3h4CmluZGV4IGZkOTEwM2IuLjhiMjZjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5jeHgKKysrIGIvU291cmNlL0NQYWNrL1dpWC9jbVdJWFBhdGNoUGFyc2VyLmN4eApAQCAtMiw3ICsyLDExIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbVdJWFBhdGNoUGFyc2VyLmgiCiAKLSNpbmNsdWRlICJjbV9leHBhdC5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKKyNpbmNsdWRlIDxjbTNwL2V4cGF0Lmg+CiAKICNpbmNsdWRlICJjbUNQYWNrR2VuZXJhdG9yLmgiCiAKQEAgLTIwLDEyICsyNCw4IEBACiB7CiB9CiAKLWNtV0lYUGF0Y2hFbGVtZW50Ojp+Y21XSVhQYXRjaEVsZW1lbnQoKQotewotICBmb3IgKGNtV0lYUGF0Y2hOb2RlKiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgZGVsZXRlIGNoaWxkOwotICB9Ci19CitjbVdJWFBhdGNoRWxlbWVudDo6Y21XSVhQYXRjaEVsZW1lbnQoKSA9IGRlZmF1bHQ7CitjbVdJWFBhdGNoRWxlbWVudDo6fmNtV0lYUGF0Y2hFbGVtZW50KCkgPSBkZWZhdWx0OwogCiBjbVdJWFBhdGNoUGFyc2VyOjpjbVdJWFBhdGNoUGFyc2VyKGZyYWdtZW50X21hcF90JiBmcmFnbWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtQ1BhY2tMb2cqIGxvZ2dlcikKQEAgLTU0LDggKzU0LDcgQEAKICAgfSBlbHNlIGlmIChTdGF0ZSA9PSBJTlNJREVfRlJBR01FTlQpIHsKICAgICBjbVdJWFBhdGNoRWxlbWVudCYgcGFyZW50ID0gKkVsZW1lbnRTdGFjay5iYWNrKCk7CiAKLSAgICBjbVdJWFBhdGNoRWxlbWVudCogZWxlbWVudCA9IG5ldyBjbVdJWFBhdGNoRWxlbWVudDsKLSAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaF9iYWNrKGVsZW1lbnQpOworICAgIGF1dG8gZWxlbWVudCA9IGNtOjptYWtlX3VuaXF1ZTxjbVdJWFBhdGNoRWxlbWVudD4oKTsKIAogICAgIGVsZW1lbnQtPm5hbWUgPSBuYW1lOwogCkBAIC02Niw3ICs2NSw4IEBACiAgICAgICBlbGVtZW50LT5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTsKICAgICB9CiAKLSAgICBFbGVtZW50U3RhY2sucHVzaF9iYWNrKGVsZW1lbnQpOworICAgIEVsZW1lbnRTdGFjay5wdXNoX2JhY2soZWxlbWVudC5nZXQoKSk7CisgICAgcGFyZW50LmNoaWxkcmVuLnB1c2hfYmFjayhzdGQ6Om1vdmUoZWxlbWVudCkpOwogICB9CiB9CiAKQEAgLTEzMCwxMCArMTMwLDEwIEBACiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBsYXN0ID0gdGV4dC5maW5kX2xhc3Rfbm90X29mKHdoaXRlc3BhY2UpOwogCiAgICAgaWYgKGZpcnN0ICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGxhc3QgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgIGNtV0lYUGF0Y2hUZXh0KiB0ZXh0X25vZGUgPSBuZXcgY21XSVhQYXRjaFRleHQ7CisgICAgICBhdXRvIHRleHRfbm9kZSA9IGNtOjptYWtlX3VuaXF1ZTxjbVdJWFBhdGNoVGV4dD4oKTsKICAgICAgIHRleHRfbm9kZS0+dGV4dCA9IHRleHQuc3Vic3RyKGZpcnN0LCBsYXN0IC0gZmlyc3QgKyAxKTsKIAotICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2hfYmFjayh0ZXh0X25vZGUpOworICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2hfYmFjayhzdGQ6Om1vdmUodGV4dF9ub2RlKSk7CiAgICAgfQogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svV2lYL2NtV0lYUGF0Y2hQYXJzZXIuaCBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5oCmluZGV4IDg3ZGQ4OTIuLjhkNWQyYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5oCisrKyBiL1NvdXJjZS9DUGFjay9XaVgvY21XSVhQYXRjaFBhcnNlci5oCkBAIC00LDYgKzQsNyBAQAogI2RlZmluZSBjbUNQYWNrV0lYUGF0Y2hQYXJzZXJfaAogCiAjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbUNQYWNrTG9nLmgiCkBAIC0zMyw5ICszNCwxNCBAQAogewogICB2aXJ0dWFsIFR5cGUgdHlwZSgpOwogCisgIGNtV0lYUGF0Y2hFbGVtZW50KCk7CisKKyAgY21XSVhQYXRjaEVsZW1lbnQoY29uc3QgY21XSVhQYXRjaEVsZW1lbnQmKSA9IGRlbGV0ZTsKKyAgY29uc3QgY21XSVhQYXRjaEVsZW1lbnQmIG9wZXJhdG9yPShjb25zdCBjbVdJWFBhdGNoRWxlbWVudCYpID0gZGVsZXRlOworCiAgIH5jbVdJWFBhdGNoRWxlbWVudCgpOwogCi0gIHVzaW5nIGNoaWxkX2xpc3RfdCA9IHN0ZDo6dmVjdG9yPGNtV0lYUGF0Y2hOb2RlKj47CisgIHVzaW5nIGNoaWxkX2xpc3RfdCA9IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVdJWFBhdGNoTm9kZT4+OwogICB1c2luZyBhdHRyaWJ1dGVzX3QgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+OwogCiAgIHN0ZDo6c3RyaW5nIG5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0FyY2hpdmVHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tBcmNoaXZlR2VuZXJhdG9yLmN4eAppbmRleCA0M2YyOTQ2Li45NjdjYzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja0FyY2hpdmVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrQXJjaGl2ZUdlbmVyYXRvci5jeHgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbTNwL2FyY2hpdmUuaD4KKwogI2luY2x1ZGUgImNtQ1BhY2tDb21wb25lbnRHcm91cC5oIgogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUNQYWNrTG9nLmgiCkBAIC0xNTQsNiArMTU2LDIwIEBACiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIGNtQXJjaGl2ZVdyaXRlIGFyY2hpdmUoZ2YsIHRoaXMtPkNvbXByZXNzLCB0aGlzLT5BcmNoaXZlRm9ybWF0KTsgICAgICAgICAgICBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCF0aGlzLT5TZXRBcmNoaXZlT3B0aW9ucygmYXJjaGl2ZSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIHRvIHNldCBhcmNoaXZlIG9wdGlvbnMgPCIgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgPDwgKGZpbGVuYW1lKSA8PCAiPiwgRVJST1IgPSAiIDw8IChhcmNoaXZlKS5HZXRFcnJvcigpICBcCisgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCFhcmNoaXZlLk9wZW4oKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIHRvIG9wZW4gYXJjaGl2ZSA8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgPDwgKGZpbGVuYW1lKSA8PCAiPiwgRVJST1IgPSAiIDw8IChhcmNoaXZlKS5HZXRFcnJvcigpICBcCisgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCEoYXJjaGl2ZSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIHRvIGNyZWF0ZSBhcmNoaXZlIDwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zMjgsMyArMzQ0LDIzIEBACiAgIC8vIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb24pCiAgIHJldHVybiBJc09uKCJDUEFDS19BUkNISVZFX0NPTVBPTkVOVF9JTlNUQUxMIik7CiB9CisKK2Jvb2wgY21DUGFja0FyY2hpdmVHZW5lcmF0b3I6OlNldEFyY2hpdmVPcHRpb25zKGNtQXJjaGl2ZVdyaXRlKiBhcmNoaXZlKQoreworI2lmIEFSQ0hJVkVfVkVSU0lPTl9OVU1CRVIgPj0gMzAwNDAwMAorICAvLyBVcHN0cmVhbSBmaXhlZCBhbiBpc3N1ZSB3aXRoIHRoZWlyIGludGVnZXIgcGFyc2luZyBpbiAzLjQuMCB3aGljaCB3b3VsZAorICAvLyBjYXVzZSBzcHVyaW91cyBlcnJvcnMgdG8gYmUgcmFpc2VkIGZyb20gYHN0cnRvdWxsYC4KKyAgaWYgKHRoaXMtPkNvbXByZXNzID09IGNtQXJjaGl2ZVdyaXRlOjpDb21wcmVzc1haKSB7CisgICAgY29uc3QgY2hhciogdGhyZWFkcyA9ICIxIjsKKyAgICBpZiAodGhpcy0+SXNTZXQoIkNQQUNLX0FSQ0hJVkVfVEhSRUFEUyIpKSB7CisgICAgICB0aHJlYWRzID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19BUkNISVZFX1RIUkVBRFMiKTsKKyAgICB9CisKKyAgICBpZiAoIWFyY2hpdmUtPlNldEZpbHRlck9wdGlvbigieHoiLCAidGhyZWFkcyIsIHRocmVhZHMpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisjZW5kaWYKKworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrQXJjaGl2ZUdlbmVyYXRvci5oIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tBcmNoaXZlR2VuZXJhdG9yLmgKaW5kZXggOGQ2NzcyMC4uN2ViNTY2NSAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NtQ1BhY2tBcmNoaXZlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tBcmNoaXZlR2VuZXJhdG9yLmgKQEAgLTg2LDYgKzg2LDggQEAKICAgICByZXR1cm4gdGhpcy0+T3V0cHV0RXh0ZW5zaW9uLmNfc3RyKCk7CiAgIH0KIAorICBib29sIFNldEFyY2hpdmVPcHRpb25zKGNtQXJjaGl2ZVdyaXRlKiBhcmNoaXZlKTsKKwogcHJpdmF0ZToKICAgY21BcmNoaXZlV3JpdGU6OkNvbXByZXNzIENvbXByZXNzOwogICBzdGQ6OnN0cmluZyBBcmNoaXZlRm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tEZWJHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tEZWJHZW5lcmF0b3IuY3h4CmluZGV4IDViN2Q4ZmIuLjU2MGU1YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrRGViR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja0RlYkdlbmVyYXRvci5jeHgKQEAgLTEzNSwxNiArMTM1LDE3IEBACiB7CiAgIC8vIGRlYmlhbi1iaW5hcnkgZmlsZQogICBjb25zdCBzdGQ6OnN0cmluZyBkYmZpbGVuYW1lID0gV29ya0RpciArICIvZGViaWFuLWJpbmFyeSI7Ci0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQoZGJmaWxlbmFtZSk7Ci0gIG91dCA8PCAiMi4wIjsKLSAgb3V0IDw8IHN0ZDo6ZW5kbDsgLy8gcmVxdWlyZWQgZm9yIHZhbGlkIGRlYmlhbiBwYWNrYWdlCisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQ7CisgIG91dC5PcGVuKGRiZmlsZW5hbWUsIGZhbHNlLCB0cnVlKTsKKyAgb3V0IDw8ICIyLjBcbiI7IC8vIHJlcXVpcmVkIGZvciB2YWxpZCBkZWJpYW4gcGFja2FnZQogfQogCiB2b2lkIERlYkdlbmVyYXRvcjo6Z2VuZXJhdGVDb250cm9sRmlsZSgpIGNvbnN0CiB7CiAgIHN0ZDo6c3RyaW5nIGN0bGZpbGVuYW1lID0gV29ya0RpciArICIvY29udHJvbCI7CiAKLSAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIG91dChjdGxmaWxlbmFtZSk7CisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQ7CisgIG91dC5PcGVuKGN0bGZpbGVuYW1lLCBmYWxzZSwgdHJ1ZSk7CiAgIGZvciAoYXV0byBjb25zdCYga3YgOiBDb250cm9sVmFsdWVzKSB7CiAgICAgb3V0IDw8IGt2LmZpcnN0IDw8ICI6ICIgPDwga3Yuc2Vjb25kIDw8ICJcbiI7CiAgIH0KQEAgLTE1Niw4ICsxNTcsNyBAQAogICAgICAgdG90YWxTaXplICs9IGNtU3lzdGVtVG9vbHM6OkZpbGVMZW5ndGgoZmlsZSk7CiAgICAgfQogICB9Ci0gIG91dCA8PCAiSW5zdGFsbGVkLVNpemU6ICIgPDwgKHRvdGFsU2l6ZSArIDEwMjMpIC8gMTAyNCA8PCAiXG4iOwotICBvdXQgPDwgc3RkOjplbmRsOworICBvdXQgPDwgIkluc3RhbGxlZC1TaXplOiAiIDw8ICh0b3RhbFNpemUgKyAxMDIzKSAvIDEwMjQgPDwgIlxuXG4iOwogfQogCiBib29sIERlYkdlbmVyYXRvcjo6Z2VuZXJhdGVEYXRhVGFyKCkgY29uc3QKQEAgLTE3Myw2ICsxNzMsNyBAQAogICB9CiAgIGNtQXJjaGl2ZVdyaXRlIGRhdGFfdGFyKGZpbGVTdHJlYW1fZGF0YV90YXIsIFRhckNvbXByZXNzaW9uVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRGViaWFuQXJjaGl2ZVR5cGUpOworICBkYXRhX3Rhci5PcGVuKCk7CiAKICAgLy8gdWlkL2dpZCBzaG91bGQgYmUgdGhlIG9uZSBvZiB0aGUgcm9vdCB1c2VyLCBhbmQgdGhpcyByb290IHVzZXIgaGFzCiAgIC8vIGFsd2F5cyB1aWQvZ2lkIGVxdWFsIHRvIDAuCkBAIC0yNDcsNyArMjQ4LDggQEAKIHsKICAgc3RkOjpzdHJpbmcgbWQ1ZmlsZW5hbWUgPSBXb3JrRGlyICsgIi9tZDVzdW1zIjsKIAotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gb3V0KG1kNWZpbGVuYW1lKTsKKyAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIG91dDsKKyAgb3V0Lk9wZW4obWQ1ZmlsZW5hbWUsIGZhbHNlLCB0cnVlKTsKIAogICBzdGQ6OnN0cmluZyB0b3BMZXZlbFdpdGhUcmFpbGluZ1NsYXNoID0gY21TdHJDYXQoVGVtcG9yYXJ5RGlyLCAnLycpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlIDogUGFja2FnZUZpbGVzKSB7CkBAIC0yOTEsNiArMjkzLDcgQEAKICAgfQogICBjbUFyY2hpdmVXcml0ZSBjb250cm9sX3RhcihmaWxlU3RyZWFtX2NvbnRyb2xfdGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUFyY2hpdmVXcml0ZTo6Q29tcHJlc3NHWmlwLCBEZWJpYW5BcmNoaXZlVHlwZSk7CisgIGNvbnRyb2xfdGFyLk9wZW4oKTsKIAogICAvLyBzZXRzIHBlcm1pc3Npb25zIGFuZCB1aWQvZ2lkIGZvciB0aGUgZmlsZXMKICAgY29udHJvbF90YXIuU2V0VUlEQW5kR0lEKDB1LCAwdSk7CkBAIC00MTAsNiArNDEzLDcgQEAKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGRlYlN0cmVhbTsKICAgZGViU3RyZWFtLk9wZW4ob3V0cHV0UGF0aCwgZmFsc2UsIHRydWUpOwogICBjbUFyY2hpdmVXcml0ZSBkZWIoZGViU3RyZWFtLCBjbUFyY2hpdmVXcml0ZTo6Q29tcHJlc3NOb25lLCAiYXJic2QiKTsKKyAgZGViLk9wZW4oKTsKIAogICAvLyB1aWQvZ2lkIHNob3VsZCBiZSB0aGUgb25lIG9mIHRoZSByb290IHVzZXIsIGFuZCB0aGlzIHJvb3QgdXNlciBoYXMKICAgLy8gYWx3YXlzIHVpZC9naWQgZXF1YWwgdG8gMC4KQEAgLTQ4NCw2ICs0ODgsNyBAQAogICAgIGZpbmRFeHByICs9ICIvKiI7CiAgICAgZ2wuUmVjdXJzZU9uKCk7CiAgICAgZ2wuU2V0UmVjdXJzZUxpc3REaXJzKHRydWUpOworICAgIGdsLlNldFJlY3Vyc2VUaHJvdWdoU3ltbGlua3MoZmFsc2UpOwogICAgIGlmICghZ2wuRmluZEZpbGVzKGZpbmRFeHByKSkgewogICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICJDYW5ub3QgZmluZCBhbnkgZmlsZXMgaW4gdGhlIGluc3RhbGxlZCBkaXJlY3RvcnkiCkBAIC01MDgsNiArNTEzLDcgQEAKICAgICBmaW5kRXhwciArPSAiLyoiOwogICAgIGdsLlJlY3Vyc2VPbigpOwogICAgIGdsLlNldFJlY3Vyc2VMaXN0RGlycyh0cnVlKTsKKyAgICBnbC5TZXRSZWN1cnNlVGhyb3VnaFN5bWxpbmtzKGZhbHNlKTsKICAgICBpZiAoIWdsLkZpbmRGaWxlcyhmaW5kRXhwcikpIHsKICAgICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0VSUk9SLAogICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGZpbmQgYW55IGZpbGVzIGluIHRoZSBpbnN0YWxsZWQgZGlyZWN0b3J5IgpAQCAtNjI3LDYgKzYzMyw3IEBACiAgIGZpbmRFeHByICs9ICIvKiI7CiAgIGdsLlJlY3Vyc2VPbigpOwogICBnbC5TZXRSZWN1cnNlTGlzdERpcnModHJ1ZSk7CisgIGdsLlNldFJlY3Vyc2VUaHJvdWdoU3ltbGlua3MoZmFsc2UpOwogICBpZiAoIWdsLkZpbmRGaWxlcyhmaW5kRXhwcikpIHsKICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKICAgICAgICAgICAgICAgICAgICJDYW5ub3QgZmluZCBhbnkgZmlsZXMgaW4gdGhlIGluc3RhbGxlZCBkaXJlY3RvcnkiCkBAIC02ODksNTcgKzY5Niw1NyBAQAogCiAgIGNvbnN0IGNoYXIqIGRlYmlhbl9wa2dfc291cmNlID0KICAgICB0aGlzLT5HZXRPcHRpb24oIkdFTl9DUEFDS19ERUJJQU5fUEFDS0FHRV9TT1VSQ0UiKTsKLSAgaWYgKGRlYmlhbl9wa2dfc291cmNlICYmICpkZWJpYW5fcGtnX3NvdXJjZSkgeworICBpZiAoY21Ob25lbXB0eShkZWJpYW5fcGtnX3NvdXJjZSkpIHsKICAgICBjb250cm9sVmFsdWVzWyJTb3VyY2UiXSA9IGRlYmlhbl9wa2dfc291cmNlOwogICB9CiAgIGNvbnN0IGNoYXIqIGRlYmlhbl9wa2dfZGVwID0KICAgICB0aGlzLT5HZXRPcHRpb24oIkdFTl9DUEFDS19ERUJJQU5fUEFDS0FHRV9ERVBFTkRTIik7Ci0gIGlmIChkZWJpYW5fcGtnX2RlcCAmJiAqZGViaWFuX3BrZ19kZXApIHsKKyAgaWYgKGNtTm9uZW1wdHkoZGViaWFuX3BrZ19kZXApKSB7CiAgICAgY29udHJvbFZhbHVlc1siRGVwZW5kcyJdID0gZGViaWFuX3BrZ19kZXA7CiAgIH0KICAgY29uc3QgY2hhciogZGViaWFuX3BrZ19yZWMgPQogICAgIHRoaXMtPkdldE9wdGlvbigiR0VOX0NQQUNLX0RFQklBTl9QQUNLQUdFX1JFQ09NTUVORFMiKTsKLSAgaWYgKGRlYmlhbl9wa2dfcmVjICYmICpkZWJpYW5fcGtnX3JlYykgeworICBpZiAoY21Ob25lbXB0eShkZWJpYW5fcGtnX3JlYykpIHsKICAgICBjb250cm9sVmFsdWVzWyJSZWNvbW1lbmRzIl0gPSBkZWJpYW5fcGtnX3JlYzsKICAgfQogICBjb25zdCBjaGFyKiBkZWJpYW5fcGtnX3N1ZyA9CiAgICAgdGhpcy0+R2V0T3B0aW9uKCJHRU5fQ1BBQ0tfREVCSUFOX1BBQ0tBR0VfU1VHR0VTVFMiKTsKLSAgaWYgKGRlYmlhbl9wa2dfc3VnICYmICpkZWJpYW5fcGtnX3N1ZykgeworICBpZiAoY21Ob25lbXB0eShkZWJpYW5fcGtnX3N1ZykpIHsKICAgICBjb250cm9sVmFsdWVzWyJTdWdnZXN0cyJdID0gZGViaWFuX3BrZ19zdWc7CiAgIH0KICAgY29uc3QgY2hhciogZGViaWFuX3BrZ191cmwgPQogICAgIHRoaXMtPkdldE9wdGlvbigiR0VOX0NQQUNLX0RFQklBTl9QQUNLQUdFX0hPTUVQQUdFIik7Ci0gIGlmIChkZWJpYW5fcGtnX3VybCAmJiAqZGViaWFuX3BrZ191cmwpIHsKKyAgaWYgKGNtTm9uZW1wdHkoZGViaWFuX3BrZ191cmwpKSB7CiAgICAgY29udHJvbFZhbHVlc1siSG9tZXBhZ2UiXSA9IGRlYmlhbl9wa2dfdXJsOwogICB9CiAgIGNvbnN0IGNoYXIqIGRlYmlhbl9wa2dfcHJlZGVwID0KICAgICB0aGlzLT5HZXRPcHRpb24oIkdFTl9DUEFDS19ERUJJQU5fUEFDS0FHRV9QUkVERVBFTkRTIik7Ci0gIGlmIChkZWJpYW5fcGtnX3ByZWRlcCAmJiAqZGViaWFuX3BrZ19wcmVkZXApIHsKKyAgaWYgKGNtTm9uZW1wdHkoZGViaWFuX3BrZ19wcmVkZXApKSB7CiAgICAgY29udHJvbFZhbHVlc1siUHJlLURlcGVuZHMiXSA9IGRlYmlhbl9wa2dfcHJlZGVwOwogICB9CiAgIGNvbnN0IGNoYXIqIGRlYmlhbl9wa2dfZW5oYW5jZXMgPQogICAgIHRoaXMtPkdldE9wdGlvbigiR0VOX0NQQUNLX0RFQklBTl9QQUNLQUdFX0VOSEFOQ0VTIik7Ci0gIGlmIChkZWJpYW5fcGtnX2VuaGFuY2VzICYmICpkZWJpYW5fcGtnX2VuaGFuY2VzKSB7CisgIGlmIChjbU5vbmVtcHR5KGRlYmlhbl9wa2dfZW5oYW5jZXMpKSB7CiAgICAgY29udHJvbFZhbHVlc1siRW5oYW5jZXMiXSA9IGRlYmlhbl9wa2dfZW5oYW5jZXM7CiAgIH0KICAgY29uc3QgY2hhciogZGViaWFuX3BrZ19icmVha3MgPQogICAgIHRoaXMtPkdldE9wdGlvbigiR0VOX0NQQUNLX0RFQklBTl9QQUNLQUdFX0JSRUFLUyIpOwotICBpZiAoZGViaWFuX3BrZ19icmVha3MgJiYgKmRlYmlhbl9wa2dfYnJlYWtzKSB7CisgIGlmIChjbU5vbmVtcHR5KGRlYmlhbl9wa2dfYnJlYWtzKSkgewogICAgIGNvbnRyb2xWYWx1ZXNbIkJyZWFrcyJdID0gZGViaWFuX3BrZ19icmVha3M7CiAgIH0KICAgY29uc3QgY2hhciogZGViaWFuX3BrZ19jb25mbGljdHMgPQogICAgIHRoaXMtPkdldE9wdGlvbigiR0VOX0NQQUNLX0RFQklBTl9QQUNLQUdFX0NPTkZMSUNUUyIpOwotICBpZiAoZGViaWFuX3BrZ19jb25mbGljdHMgJiYgKmRlYmlhbl9wa2dfY29uZmxpY3RzKSB7CisgIGlmIChjbU5vbmVtcHR5KGRlYmlhbl9wa2dfY29uZmxpY3RzKSkgewogICAgIGNvbnRyb2xWYWx1ZXNbIkNvbmZsaWN0cyJdID0gZGViaWFuX3BrZ19jb25mbGljdHM7CiAgIH0KICAgY29uc3QgY2hhciogZGViaWFuX3BrZ19wcm92aWRlcyA9CiAgICAgdGhpcy0+R2V0T3B0aW9uKCJHRU5fQ1BBQ0tfREVCSUFOX1BBQ0tBR0VfUFJPVklERVMiKTsKLSAgaWYgKGRlYmlhbl9wa2dfcHJvdmlkZXMgJiYgKmRlYmlhbl9wa2dfcHJvdmlkZXMpIHsKKyAgaWYgKGNtTm9uZW1wdHkoZGViaWFuX3BrZ19wcm92aWRlcykpIHsKICAgICBjb250cm9sVmFsdWVzWyJQcm92aWRlcyJdID0gZGViaWFuX3BrZ19wcm92aWRlczsKICAgfQogICBjb25zdCBjaGFyKiBkZWJpYW5fcGtnX3JlcGxhY2VzID0KICAgICB0aGlzLT5HZXRPcHRpb24oIkdFTl9DUEFDS19ERUJJQU5fUEFDS0FHRV9SRVBMQUNFUyIpOwotICBpZiAoZGViaWFuX3BrZ19yZXBsYWNlcyAmJiAqZGViaWFuX3BrZ19yZXBsYWNlcykgeworICBpZiAoY21Ob25lbXB0eShkZWJpYW5fcGtnX3JlcGxhY2VzKSkgewogICAgIGNvbnRyb2xWYWx1ZXNbIlJlcGxhY2VzIl0gPSBkZWJpYW5fcGtnX3JlcGxhY2VzOwogICB9CiAKQEAgLTc0OSwxNyArNzU2LDE5IEBACiAgIGNvbnN0IGNoYXIqIGRlYmlhbl9wa2dfc2hsaWJzID0KICAgICB0aGlzLT5HZXRPcHRpb24oIkdFTl9DUEFDS19ERUJJQU5fUEFDS0FHRV9TSExJQlMiKTsKICAgY29uc3QgYm9vbCBnZW5fc2hpYnMgPSB0aGlzLT5Jc09uKCJDUEFDS19ERUJJQU5fUEFDS0FHRV9HRU5FUkFURV9TSExJQlMiKSAmJgotICAgIGRlYmlhbl9wa2dfc2hsaWJzICYmICpkZWJpYW5fcGtnX3NobGliczsKKyAgICBjbU5vbmVtcHR5KGRlYmlhbl9wa2dfc2hsaWJzKTsKICAgaWYgKGdlbl9zaGlicykgewotICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQoc2hsaWJzZmlsZW5hbWUpOworICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQ7CisgICAgb3V0Lk9wZW4oc2hsaWJzZmlsZW5hbWUsIGZhbHNlLCB0cnVlKTsKICAgICBvdXQgPDwgZGViaWFuX3BrZ19zaGxpYnM7Ci0gICAgb3V0IDw8IHN0ZDo6ZW5kbDsKKyAgICBvdXQgPDwgJ1xuJzsKICAgfQogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBvc3RpbnN0ID0gc3RyR2VuV0RJUiArICIvcG9zdGluc3QiOwogICBjb25zdCBzdGQ6OnN0cmluZyBwb3N0cm0gPSBzdHJHZW5XRElSICsgIi9wb3N0cm0iOwogICBpZiAodGhpcy0+SXNPbigiR0VOX0NQQUNLX0RFQklBTl9HRU5FUkFURV9QT1NUSU5TVCIpKSB7Ci0gICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIG91dChwb3N0aW5zdCk7CisgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIG91dDsKKyAgICBvdXQuT3Blbihwb3N0aW5zdCwgZmFsc2UsIHRydWUpOwogICAgIG91dCA8PCAiIyEvYmluL3NoXG5cbiIKICAgICAgICAgICAgInNldCAtZVxuXG4iCiAgICAgICAgICAgICJpZiBbIFwiJDFcIiA9IFwiY29uZmlndXJlXCIgXTsgdGhlblxuIgpAQCAtNzY3LDcgKzc3Niw4IEBACiAgICAgICAgICAgICJmaVxuIjsKICAgfQogICBpZiAodGhpcy0+SXNPbigiR0VOX0NQQUNLX0RFQklBTl9HRU5FUkFURV9QT1NUUk0iKSkgewotICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBvdXQocG9zdHJtKTsKKyAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gb3V0OworICAgIG91dC5PcGVuKHBvc3RybSwgZmFsc2UsIHRydWUpOwogICAgIG91dCA8PCAiIyEvYmluL3NoXG5cbiIKICAgICAgICAgICAgInNldCAtZVxuXG4iCiAgICAgICAgICAgICJpZiBbIFwiJDFcIiA9IFwicmVtb3ZlXCIgXTsgdGhlblxuIgpAQCAtODIyLDExICs4MzIsMTEgQEAKIAogICBjb25zdCBjaGFyKiBkZWJpYW5fcGtnX3NvdXJjZSA9CiAgICAgdGhpcy0+R2V0T3B0aW9uKCJHRU5fQ1BBQ0tfREVCSUFOX1BBQ0tBR0VfU09VUkNFIik7Ci0gIGlmIChkZWJpYW5fcGtnX3NvdXJjZSAmJiAqZGViaWFuX3BrZ19zb3VyY2UpIHsKKyAgaWYgKGNtTm9uZW1wdHkoZGViaWFuX3BrZ19zb3VyY2UpKSB7CiAgICAgY29udHJvbFZhbHVlc1siU291cmNlIl0gPSBkZWJpYW5fcGtnX3NvdXJjZTsKICAgfQogICBjb25zdCBjaGFyKiBkZWJpYW5fYnVpbGRfaWRzID0gdGhpcy0+R2V0T3B0aW9uKCJHRU5fQlVJTERfSURTIik7Ci0gIGlmIChkZWJpYW5fYnVpbGRfaWRzICYmICpkZWJpYW5fYnVpbGRfaWRzKSB7CisgIGlmIChjbU5vbmVtcHR5KGRlYmlhbl9idWlsZF9pZHMpKSB7CiAgICAgY29udHJvbFZhbHVlc1siQnVpbGQtSWRzIl0gPSBkZWJpYW5fYnVpbGRfaWRzOwogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9DUGFjay9jbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yLmN4eAppbmRleCBlYTcxMDA3Li5jZWZiOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja0RyYWdORHJvcEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3IuY3h4CkBAIC04LDcgKzgsOSBAQAogI2luY2x1ZGUgPG1hcD4KIAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8Y20zcC9rd2ltbC9hYmkuaD4KIAorI2luY2x1ZGUgImNtc3lzL0Jhc2U2NC5oIgogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIApAQCAtMTgsNiArMjAsNyBAQAogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKKyNpbmNsdWRlICJjbVhNTFdyaXRlci5oIgogCiAjaWZkZWYgSEFWRV9Db3JlU2VydmljZXMKIC8vIEZvciB0aGUgb2xkIExvY2FsZVN0cmluZ1RvTGFuZ0FuZFJlZ2lvbkNvZGVzKCkgZnVuY3Rpb24sIHRvIGNvbnZlcnQKQEAgLTI2LDM2ICsyOSwyOCBAQAogIyAgaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyKiBTTEFIZWFkZXIgPQotICAiZGF0YSAnTFBpYycgKDUwMDApIHtcbiIKLSAgIiAgICAkXCIwMDAyIDAwMTEgMDAwMyAwMDAxIDAwMDAgMDAwMCAwMDAyIDAwMDBcIlxuIgotICAiICAgICRcIjAwMDggMDAwMyAwMDAwIDAwMDEgMDAwNCAwMDAwIDAwMDQgMDAwNVwiXG4iCi0gICIgICAgJFwiMDAwMCAwMDBFIDAwMDYgMDAwMSAwMDA1IDAwMDcgMDAwMCAwMDA3XCJcbiIKLSAgIiAgICAkXCIwMDA4IDAwMDAgMDA0NyAwMDA5IDAwMDAgMDAzNCAwMDBBIDAwMDFcIlxuIgotICAiICAgICRcIjAwMzUgMDAwQiAwMDAxIDAwMjAgMDAwQyAwMDAwIDAwMTEgMDAwRFwiXG4iCi0gICIgICAgJFwiMDAwMCAwMDVCIDAwMDQgMDAwMCAwMDMzIDAwMEYgMDAwMSAwMDBDXCJcbiIKLSAgIiAgICAkXCIwMDEwIDAwMDAgMDAwQiAwMDBFIDAwMDBcIlxuIgotICAifTtcbiIKLSAgIlxuIjsKK3N0YXRpYyBjb25zdCB1aW50MTZfdCBEZWZhdWx0THBpY1tdID0geworICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgIDB4MDAwMiwgMHgwMDExLCAweDAwMDMsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMiwgMHgwMDAwLAorICAweDAwMDgsIDB4MDAwMywgMHgwMDAwLCAweDAwMDEsIDB4MDAwNCwgMHgwMDAwLCAweDAwMDQsIDB4MDAwNSwKKyAgMHgwMDAwLCAweDAwMEUsIDB4MDAwNiwgMHgwMDAxLCAweDAwMDUsIDB4MDAwNywgMHgwMDAwLCAweDAwMDcsCisgIDB4MDAwOCwgMHgwMDAwLCAweDAwNDcsIDB4MDAwOSwgMHgwMDAwLCAweDAwMzQsIDB4MDAwQSwgMHgwMDAxLAorICAweDAwMzUsIDB4MDAwQiwgMHgwMDAxLCAweDAwMjAsIDB4MDAwQywgMHgwMDAwLCAweDAwMTEsIDB4MDAwRCwKKyAgMHgwMDAwLCAweDAwNUIsIDB4MDAwNCwgMHgwMDAwLCAweDAwMzMsIDB4MDAwRiwgMHgwMDAxLCAweDAwMEMsCisgIDB4MDAxMCwgMHgwMDAwLCAweDAwMEIsIDB4MDAwRSwgMHgwMDAwCisgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworfTsKIAotc3RhdGljIGNvbnN0IGNoYXIqIFNMQVNUUkVuZ2xpc2ggPQotICAicmVzb3VyY2UgJ1NUUiMnICg1MDAyLCBcIkVuZ2xpc2hcIikge1xuIgotICAiICAgIHtcbiIKLSAgIiAgICAgICAgXCJFbmdsaXNoXCIsXG4iCi0gICIgICAgICAgIFwiQWdyZWVcIixcbiIKLSAgIiAgICAgICAgXCJEaXNhZ3JlZVwiLFxuIgotICAiICAgICAgICBcIlByaW50XCIsXG4iCi0gICIgICAgICAgIFwiU2F2ZS4uLlwiLFxuIgotICAiICAgICAgICBcIllvdSBhZ3JlZSB0byB0aGUgTGljZW5zZSBBZ3JlZW1lbnQgdGVybXMgd2hlbiB5b3UgY2xpY2sgXCJcbiIKLSAgIiAgICAgICAgXCJ0aGUgXFxcIkFncmVlXFxcIiBidXR0b24uXCIsXG4iCi0gICIgICAgICAgIFwiU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnRcIixcbiIKLSAgIiAgICAgICAgXCJUaGlzIHRleHQgY2Fubm90IGJlIHNhdmVkLiAgVGhpcyBkaXNrIG1heSBiZSBmdWxsIG9yIGxvY2tlZCwgIgotICAib3IgdGhlIFwiXG4iCi0gICIgICAgICAgIFwiZmlsZSBtYXkgYmUgbG9ja2VkLlwiLFxuIgotICAiICAgICAgICBcIlVuYWJsZSB0byBwcmludC4gIE1ha2Ugc3VyZSB5b3UgaGF2ZSBzZWxlY3RlZCBhIHByaW50ZXIuXCJcbiIKLSAgIiAgICB9XG4iCi0gICJ9O1xuIgotICAiXG4iOworc3RhdGljIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBEZWZhdWx0TWVudSA9IHsKKyAgeyAiRW5nbGlzaCIsICJBZ3JlZSIsICJEaXNhZ3JlZSIsICJQcmludCIsICJTYXZlLi4uIiwKKyAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1zdXNwaWNpb3VzLW1pc3NpbmctY29tbWEpCisgICAgIllvdSBhZ3JlZSB0byB0aGUgTGljZW5zZSBBZ3JlZW1lbnQgdGVybXMgd2hlbiAiCisgICAgInlvdSBjbGljayB0aGUgXCJBZ3JlZVwiIGJ1dHRvbi4iLAorICAgICJTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudCIsCisgICAgIlRoaXMgdGV4dCBjYW5ub3QgYmUgc2F2ZWQuICAiCisgICAgIlRoaXMgZGlzayBtYXkgYmUgZnVsbCBvciBsb2NrZWQsIG9yIHRoZSBmaWxlIG1heSBiZSBsb2NrZWQuIiwKKyAgICAiVW5hYmxlIHRvIHByaW50LiAgTWFrZSBzdXJlIHlvdSBoYXZlIHNlbGVjdGVkIGEgcHJpbnRlci4iIH0KK307CiAKIGNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3I6OmNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3IoKQogICA6IHNpbmdsZUxpY2Vuc2UoZmFsc2UpCkBAIC0xMzgsMTEgKzEzMywxNiBAQAogICAgIH0KICAgICBmb3IgKGF1dG8gY29uc3QmIGxhbmd1YWdlIDogbGFuZ3VhZ2VzKSB7CiAgICAgICBzdGQ6OnN0cmluZyBsaWNlbnNlID0gc2xhRGlyZWN0b3J5ICsgIi8iICsgbGFuZ3VhZ2UgKyAiLmxpY2Vuc2UudHh0IjsKLSAgICAgIGlmICghc2luZ2xlTGljZW5zZSAmJiAhY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhsaWNlbnNlKSkgewotICAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBsaWNlbnNlIGZpbGUgIiA8PCBsYW5ndWFnZSA8PCAiLmxpY2Vuc2UudHh0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgc3RkOjpzdHJpbmcgbGljZW5zZV9ydGYgPSBzbGFEaXJlY3RvcnkgKyAiLyIgKyBsYW5ndWFnZSArICIubGljZW5zZS5ydGYiOworICAgICAgaWYgKCFzaW5nbGVMaWNlbnNlKSB7CisgICAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhsaWNlbnNlKSAmJgorICAgICAgICAgICAgIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMobGljZW5zZV9ydGYpKSB7CisgICAgICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBsaWNlbnNlIGZpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBsYW5ndWFnZSA8PCAiLmxpY2Vuc2UudHh0IgorICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIC8gIiA8PCBsYW5ndWFnZSA8PCAiLmxpY2Vuc2UucnRmIiA8PCBzdGQ6OmVuZGwpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICB9CiAgICAgICBzdGQ6OnN0cmluZyBtZW51ID0gc2xhRGlyZWN0b3J5ICsgIi8iICsgbGFuZ3VhZ2UgKyAiLm1lbnUudHh0IjsKICAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhtZW51KSkgewpAQCAtNTE4LDIyICs1MTgsNDMgQEAKICAgICB9CiAgIH0KIAorICAvLyBDcmVhdGUgdGhlIGZpbmFsIGNvbXByZXNzZWQgcmVhZC1vbmx5IGRpc2sgaW1hZ2UgLi4uCisgIHN0ZDo6b3N0cmluZ3N0cmVhbSBmaW5hbF9pbWFnZV9jb21tYW5kOworICBmaW5hbF9pbWFnZV9jb21tYW5kIDw8IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfQ09NTUFORF9IRElVVElMIik7CisgIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgIiBjb252ZXJ0IFwiIiA8PCB0ZW1wX2ltYWdlIDw8ICJcIiI7CisgIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgIiAtZm9ybWF0ICI7CisgIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgY3BhY2tfZG1nX2Zvcm1hdDsKKyAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCAiIC1pbWFnZWtleSI7CisgIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgIiB6bGliLWxldmVsPTkiOworICBmaW5hbF9pbWFnZV9jb21tYW5kIDw8ICIgLW8gXCIiIDw8IG91dHB1dF9maWxlIDw8ICJcIiI7CisKKyAgc3RkOjpzdHJpbmcgY29udmVydF9lcnJvcjsKKworICBpZiAoIXRoaXMtPlJ1bkNvbW1hbmQoZmluYWxfaW1hZ2VfY29tbWFuZCwgJmNvbnZlcnRfZXJyb3IpKSB7CisgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAiRXJyb3IgY29tcHJlc3NpbmcgZGlzayBpbWFnZS4iIDw8IHN0ZDo6ZW5kbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjb252ZXJ0X2Vycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCiAgIGlmICghY3BhY2tfbGljZW5zZV9maWxlLmVtcHR5KCkgfHwgIXNsYURpcmVjdG9yeS5lbXB0eSgpKSB7CiAgICAgLy8gVXNlIG9sZCBoYXJkY29kZWQgc3R5bGUgaWYgc2xhX2RpciBpcyBub3Qgc2V0CiAgICAgYm9vbCBvbGRTdHlsZSA9IHNsYURpcmVjdG9yeS5lbXB0eSgpOwotICAgIHN0ZDo6c3RyaW5nIHNsYV9yID0KLSAgICAgIGNtU3RyQ2F0KHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfVE9QTEVWRUxfRElSRUNUT1JZIiksICIvc2xhLnIiKTsKKyAgICBzdGQ6OnN0cmluZyBzbGFfeG1sID0KKyAgICAgIGNtU3RyQ2F0KHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfVE9QTEVWRUxfRElSRUNUT1JZIiksICIvc2xhLnhtbCIpOwogCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxhbmd1YWdlczsKICAgICBpZiAoIW9sZFN0eWxlKSB7CiAgICAgICBjbUV4cGFuZExpc3QoY3BhY2tfZG1nX2xhbmd1YWdlcywgbGFuZ3VhZ2VzKTsKICAgICB9CiAKLSAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gb2ZzKHNsYV9yKTsKLSAgICBvZnMgPDwgIiNpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLnI+XG5cbiI7CisgICAgc3RkOjp2ZWN0b3I8dWludDE2X3Q+IGhlYWRlcl9kYXRhOwogICAgIGlmIChvbGRTdHlsZSkgewotICAgICAgb2ZzIDw8IFNMQUhlYWRlcjsKLSAgICAgIG9mcyA8PCAiXG4iOworICAgICAgaGVhZGVyX2RhdGEgPSBzdGQ6OnZlY3Rvcjx1aW50MTZfdD4oCisgICAgICAgIERlZmF1bHRMcGljLAorICAgICAgICBEZWZhdWx0THBpYyArIChzaXplb2YoRGVmYXVsdExwaWMpIC8gc2l6ZW9mKCpEZWZhdWx0THBpYykpKTsKICAgICB9IGVsc2UgewogICAgICAgLyoKICAgICAgICAqIExQaWMgTGF5b3V0CkBAIC01NTMsOCArNTc0LDYgQEAKICAgICAgICAqIH0KICAgICAgICAqLwogCi0gICAgICAvLyBDcmVhdGUgdmVjdG9yIGZpcnN0IGZvciByZWFkYWJpbGl0eSwgdGhlbiBpdGVyYXRlIHRvIHdyaXRlIHRvIG9mcwotICAgICAgc3RkOjp2ZWN0b3I8dWludDE2X3Q+IGhlYWRlcl9kYXRhOwogICAgICAgaGVhZGVyX2RhdGEucHVzaF9iYWNrKDApOwogICAgICAgaGVhZGVyX2RhdGEucHVzaF9iYWNrKGxhbmd1YWdlcy5zaXplKCkpOwogICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYW5ndWFnZXMuc2l6ZSgpOyArK2kpIHsKQEAgLTU5MSw1MiArNjEwLDUwIEBACiAgICAgICAgIGhlYWRlcl9kYXRhLnB1c2hfYmFjaygwKTsKICNlbmRpZgogICAgICAgfQotICAgICAgb2ZzIDw8ICJkYXRhICdMUGljJyAoNTAwMCkge1xuIjsKLSAgICAgIG9mcyA8PCBzdGQ6OmhleCA8PCBzdGQ6OnVwcGVyY2FzZSA8PCBzdGQ6OnNldGZpbGwoJzAnKTsKKyAgICB9CiAKLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGVhZGVyX2RhdGEuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGkgJSA4ID09IDApIHsKLSAgICAgICAgICBvZnMgPDwgIiAgICAkXCIiOwotICAgICAgICB9CisgICAgUmV6RG9jIHJlejsKIAotICAgICAgICBvZnMgPDwgc3RkOjpzZXR3KDQpIDw8IGhlYWRlcl9kYXRhW2ldOwotCi0gICAgICAgIGlmIChpICUgOCA9PSA3IHx8IGkgPT0gaGVhZGVyX2RhdGEuc2l6ZSgpIC0gMSkgewotICAgICAgICAgIG9mcyA8PCAiXCJcbiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgb2ZzIDw8ICIgIjsKLSAgICAgICAgfQorICAgIHsKKyAgICAgIFJlekRpY3QgbHBpYyA9IHsge30sIDUwMDAsIHt9IH07CisgICAgICBscGljLkRhdGEucmVzZXJ2ZShoZWFkZXJfZGF0YS5zaXplKCkgKiBzaXplb2YoaGVhZGVyX2RhdGFbMF0pKTsKKyAgICAgIGZvciAodWludDE2X3QgeCA6IGhlYWRlcl9kYXRhKSB7CisgICAgICAgIC8vIExQaWMgaGVhZGVyIGlzIGJpZy1lbmRpYW4uCisgICAgICAgIGNoYXIqIGQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPigmeCk7CisjaWYgS1dJTUxfQUJJX0VORElBTl9JRCA9PSBLV0lNTF9BQklfRU5ESUFOX0lEX0xJVFRMRQorICAgICAgICBscGljLkRhdGEucHVzaF9iYWNrKGRbMV0pOworICAgICAgICBscGljLkRhdGEucHVzaF9iYWNrKGRbMF0pOworI2Vsc2UKKyAgICAgICAgbHBpYy5EYXRhLnB1c2hfYmFjayhkWzBdKTsKKyAgICAgICAgbHBpYy5EYXRhLnB1c2hfYmFjayhkWzFdKTsKKyNlbmRpZgogICAgICAgfQotICAgICAgb2ZzIDw8ICJ9O1xuXG4iOwotICAgICAgLy8gUmVzZXQgb2ZzIG9wdGlvbnMKLSAgICAgIG9mcyA8PCBzdGQ6OmRlYyA8PCBzdGQ6Om5vdXBwZXJjYXNlIDw8IHN0ZDo6c2V0ZmlsbCgnICcpOworICAgICAgcmV6LkxQaWMuRW50cmllcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGxwaWMpKTsKICAgICB9CiAKICAgICBib29sIGhhdmVfd3JpdGVfbGljZW5zZV9lcnJvciA9IGZhbHNlOwogICAgIHN0ZDo6c3RyaW5nIGVycm9yOwogCiAgICAgaWYgKG9sZFN0eWxlKSB7Ci0gICAgICBpZiAoIXRoaXMtPldyaXRlTGljZW5zZShvZnMsIDAsICIiLCBjcGFja19saWNlbnNlX2ZpbGUsICZlcnJvcikpIHsKKyAgICAgIGlmICghdGhpcy0+V3JpdGVMaWNlbnNlKHJleiwgMCwgIiIsIGNwYWNrX2xpY2Vuc2VfZmlsZSwgJmVycm9yKSkgewogICAgICAgICBoYXZlX3dyaXRlX2xpY2Vuc2VfZXJyb3IgPSB0cnVlOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhbmd1YWdlcy5zaXplKCkgJiYgIWhhdmVfd3JpdGVfbGljZW5zZV9lcnJvcjsKICAgICAgICAgICAgKytpKSB7CiAgICAgICAgIGlmIChzaW5nbGVMaWNlbnNlKSB7Ci0gICAgICAgICAgaWYgKCF0aGlzLT5Xcml0ZUxpY2Vuc2Uob2ZzLCBpICsgNTAwMCwgbGFuZ3VhZ2VzW2ldLAorICAgICAgICAgIGlmICghdGhpcy0+V3JpdGVMaWNlbnNlKHJleiwgaSArIDUwMDAsIGxhbmd1YWdlc1tpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcGFja19saWNlbnNlX2ZpbGUsICZlcnJvcikpIHsKICAgICAgICAgICAgIGhhdmVfd3JpdGVfbGljZW5zZV9lcnJvciA9IHRydWU7CiAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmICghdGhpcy0+V3JpdGVMaWNlbnNlKG9mcywgaSArIDUwMDAsIGxhbmd1YWdlc1tpXSwgIiIsICZlcnJvcikpIHsKKyAgICAgICAgICBpZiAoIXRoaXMtPldyaXRlTGljZW5zZShyZXosIGkgKyA1MDAwLCBsYW5ndWFnZXNbaV0sICIiLCAmZXJyb3IpKSB7CiAgICAgICAgICAgICBoYXZlX3dyaXRlX2xpY2Vuc2VfZXJyb3IgPSB0cnVlOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0KIAotICAgIG9mcy5DbG9zZSgpOwotCiAgICAgaWYgKGhhdmVfd3JpdGVfbGljZW5zZV9lcnJvcikgewogICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICJFcnJvciB3cml0aW5nIGxpY2Vuc2UgZmlsZSB0byBTTEEuIiA8PCBzdGQ6OmVuZGwKQEAgLTY0NSw5NCArNjYyLDI1IEBACiAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAodGVtcF9pbWFnZV9mb3JtYXQgIT0gIlVEWk8iKSB7Ci0gICAgICB0ZW1wX2ltYWdlX2Zvcm1hdCA9ICJVRFpPIjsKLSAgICAgIC8vIGNvbnZlcnQgdG8gVURaTyB0byBlbmFibGUgdW5mbGF0dGVuL2ZsYXR0ZW4KLSAgICAgIHN0ZDo6c3RyaW5nIHRlbXBfdWR6byA9IGNtU3RyQ2F0KAotICAgICAgICB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX1RPUExFVkVMX0RJUkVDVE9SWSIpLCAiL3RlbXAtdWR6by5kbWciKTsKKyAgICB0aGlzLT5Xcml0ZVJlelhNTChzbGFfeG1sLCByZXopOwogCi0gICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gdWRjb19pbWFnZV9jb21tYW5kOwotICAgICAgdWRjb19pbWFnZV9jb21tYW5kIDw8IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfQ09NTUFORF9IRElVVElMIik7Ci0gICAgICB1ZGNvX2ltYWdlX2NvbW1hbmQgPDwgIiBjb252ZXJ0IFwiIiA8PCB0ZW1wX2ltYWdlIDw8ICJcIiI7Ci0gICAgICB1ZGNvX2ltYWdlX2NvbW1hbmQgPDwgIiAtZm9ybWF0IFVEWk8iOwotICAgICAgdWRjb19pbWFnZV9jb21tYW5kIDw8ICIgLW92IC1vIFwiIiA8PCB0ZW1wX3Vkem8gPDwgIlwiIjsKLQotICAgICAgaWYgKCF0aGlzLT5SdW5Db21tYW5kKHVkY29faW1hZ2VfY29tbWFuZCwgJmVycm9yKSkgewotICAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29udmVydGluZyB0byBVRENPIGRtZyBmb3IgYWRkaW5nIFNMQS4iCi0gICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwKLSAgICAgICAgICAgICAgICAgICAgICAgIDw8IGVycm9yIDw8IHN0ZDo6ZW5kbCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgICAgdGVtcF9pbWFnZSA9IHRlbXBfdWR6bzsKLSAgICB9Ci0KLSAgICAvLyB1bmZsYXR0ZW4gZG1nCi0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHVuZmxhdHRlbl9jb21tYW5kOwotICAgIHVuZmxhdHRlbl9jb21tYW5kIDw8IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfQ09NTUFORF9IRElVVElMIik7Ci0gICAgdW5mbGF0dGVuX2NvbW1hbmQgPDwgIiB1bmZsYXR0ZW4gIjsKLSAgICB1bmZsYXR0ZW5fY29tbWFuZCA8PCAiXCIiIDw8IHRlbXBfaW1hZ2UgPDwgIlwiIjsKLQotICAgIGlmICghdGhpcy0+UnVuQ29tbWFuZCh1bmZsYXR0ZW5fY29tbWFuZCwgJmVycm9yKSkgewotICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICJFcnJvciB1bmZsYXR0ZW5pbmcgZG1nIGZvciBhZGRpbmcgU0xBLiIgPDwgc3RkOjplbmRsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gUmV6IHRoZSBTTEEKKyAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIGNvbXByZXNzZWQgcmVhZC1vbmx5IGRpc2sgaW1hZ2UgLi4uCiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGVtYmVkX3NsYV9jb21tYW5kOwotICAgIGVtYmVkX3NsYV9jb21tYW5kIDw8IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfQ09NTUFORF9SRVoiKTsKLSAgICBjb25zdCBjaGFyKiBzeXNyb290ID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19PU1hfU1lTUk9PVCIpOwotICAgIGlmIChzeXNyb290ICYmIHN5c3Jvb3RbMF0gIT0gJ1wwJykgewotICAgICAgZW1iZWRfc2xhX2NvbW1hbmQgPDwgIiAtaXN5c3Jvb3QgXCIiIDw8IHN5c3Jvb3QgPDwgIlwiIjsKLSAgICB9Ci0gICAgZW1iZWRfc2xhX2NvbW1hbmQgPDwgIiBcIiIgPDwgc2xhX3IgPDwgIlwiIjsKLSAgICBlbWJlZF9zbGFfY29tbWFuZCA8PCAiIC1hIC1vICI7Ci0gICAgZW1iZWRfc2xhX2NvbW1hbmQgPDwgIlwiIiA8PCB0ZW1wX2ltYWdlIDw8ICJcIiI7Ci0KLSAgICBpZiAoIXRoaXMtPlJ1bkNvbW1hbmQoZW1iZWRfc2xhX2NvbW1hbmQsICZlcnJvcikpIHsKKyAgICBlbWJlZF9zbGFfY29tbWFuZCA8PCB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX0NPTU1BTkRfSERJVVRJTCIpOworICAgIGVtYmVkX3NsYV9jb21tYW5kIDw8ICIgdWRpZnJleiI7CisgICAgZW1iZWRfc2xhX2NvbW1hbmQgPDwgIiAteG1sIjsKKyAgICBlbWJlZF9zbGFfY29tbWFuZCA8PCAiIFwiIiA8PCBzbGFfeG1sIDw8ICJcIiI7CisgICAgZW1iZWRfc2xhX2NvbW1hbmQgPDwgIiBGSVhNRV9XSFlfSVNfVEhJU19BUkdVTUVOVF9ORUVERUQiOworICAgIGVtYmVkX3NsYV9jb21tYW5kIDw8ICIgXCIiIDw8IG91dHB1dF9maWxlIDw8ICJcIiI7CisgICAgc3RkOjpzdHJpbmcgZW1iZWRfZXJyb3I7CisgICAgaWYgKCF0aGlzLT5SdW5Db21tYW5kKGVtYmVkX3NsYV9jb21tYW5kLCAmZW1iZWRfZXJyb3IpKSB7CiAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgIkVycm9yIGFkZGluZyBTTEEuIiA8PCBzdGQ6OmVuZGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBlcnJvciA8PCBzdGQ6OmVuZGwpOworICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29tcHJlc3NpbmcgZGlzayBpbWFnZS4iIDw8IHN0ZDo6ZW5kbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGVtYmVkX2Vycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKKwogICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgLy8gZmxhdHRlbiBkbWcKLSAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZmxhdHRlbl9jb21tYW5kOwotICAgIGZsYXR0ZW5fY29tbWFuZCA8PCB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX0NPTU1BTkRfSERJVVRJTCIpOwotICAgIGZsYXR0ZW5fY29tbWFuZCA8PCAiIGZsYXR0ZW4gIjsKLSAgICBmbGF0dGVuX2NvbW1hbmQgPDwgIlwiIiA8PCB0ZW1wX2ltYWdlIDw8ICJcIiI7Ci0KLSAgICBpZiAoIXRoaXMtPlJ1bkNvbW1hbmQoZmxhdHRlbl9jb21tYW5kLCAmZXJyb3IpKSB7Ci0gICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgIkVycm9yIGZsYXR0ZW5pbmcgZG1nIGZvciBhZGRpbmcgU0xBLiIgPDwgc3RkOjplbmRsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGVycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICAvLyBDcmVhdGUgdGhlIGZpbmFsIGNvbXByZXNzZWQgcmVhZC1vbmx5IGRpc2sgaW1hZ2UgLi4uCi0gIHN0ZDo6b3N0cmluZ3N0cmVhbSBmaW5hbF9pbWFnZV9jb21tYW5kOwotICBmaW5hbF9pbWFnZV9jb21tYW5kIDw8IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfQ09NTUFORF9IRElVVElMIik7Ci0gIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgIiBjb252ZXJ0IFwiIiA8PCB0ZW1wX2ltYWdlIDw8ICJcIiI7Ci0gIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgIiAtZm9ybWF0ICI7Ci0gIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgY3BhY2tfZG1nX2Zvcm1hdDsKLSAgZmluYWxfaW1hZ2VfY29tbWFuZCA8PCAiIC1pbWFnZWtleSI7Ci0gIGZpbmFsX2ltYWdlX2NvbW1hbmQgPDwgIiB6bGliLWxldmVsPTkiOwotICBmaW5hbF9pbWFnZV9jb21tYW5kIDw8ICIgLW8gXCIiIDw8IG91dHB1dF9maWxlIDw8ICJcIiI7Ci0KLSAgc3RkOjpzdHJpbmcgY29udmVydF9lcnJvcjsKLQotICBpZiAoIXRoaXMtPlJ1bkNvbW1hbmQoZmluYWxfaW1hZ2VfY29tbWFuZCwgJmNvbnZlcnRfZXJyb3IpKSB7Ci0gICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCi0gICAgICAgICAgICAgICAgICAiRXJyb3IgY29tcHJlc3NpbmcgZGlzayBpbWFnZS4iIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjb252ZXJ0X2Vycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7Ci0KLSAgICByZXR1cm4gMDsKICAgfQogCiAgIHJldHVybiAxOwpAQCAtNzc1LDk2ICs3MjMsMTc1IEBACiAgICAgfQogICB9CiAKKyAgc3RkOjpzdHJpbmcgY29tcG9uZW50RmlsZU5hbWUgPQorICAgICJDUEFDS19ETUdfIiArIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb21wb25lbnROYW1lKSArICJfRklMRV9OQU1FIjsKKyAgaWYgKHRoaXMtPklzU2V0KGNvbXBvbmVudEZpbGVOYW1lKSkgeworICAgIHJldHVybiB0aGlzLT5HZXRPcHRpb24oY29tcG9uZW50RmlsZU5hbWUpOworICB9CiAgIHJldHVybiBHZXRDb21wb25lbnRQYWNrYWdlRmlsZU5hbWUocGFja2FnZV9maWxlX25hbWUsIGNvbXBvbmVudE5hbWUsIGZhbHNlKTsKIH0KIAotYm9vbCBjbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yOjpXcml0ZUxpY2Vuc2UoCi0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgb3V0cHV0U3RyZWFtLCBpbnQgbGljZW5zZU51bWJlciwKLSAgc3RkOjpzdHJpbmcgbGljZW5zZUxhbmd1YWdlLCBjb25zdCBzdGQ6OnN0cmluZyYgbGljZW5zZUZpbGUsCi0gIHN0ZDo6c3RyaW5nKiBlcnJvcikKK3ZvaWQgY21DUGFja0RyYWdORHJvcEdlbmVyYXRvcjo6V3JpdGVSZXpYTUwoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlekRvYyBjb25zdCYgcmV6KQoreworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZnhtbChmaWxlKTsKKyAgY21YTUxXcml0ZXIgeG1sKGZ4bWwpOworICB4bWwuU3RhcnREb2N1bWVudCgpOworICB4bWwuU3RhcnRFbGVtZW50KCJwbGlzdCIpOworICB4bWwuQXR0cmlidXRlKCJ2ZXJzaW9uIiwgIjEuMCIpOworICB4bWwuU3RhcnRFbGVtZW50KCJkaWN0Iik7CisgIHRoaXMtPldyaXRlUmV6QXJyYXkoeG1sLCByZXouTFBpYyk7CisgIHRoaXMtPldyaXRlUmV6QXJyYXkoeG1sLCByZXouTWVudSk7CisgIHRoaXMtPldyaXRlUmV6QXJyYXkoeG1sLCByZXouVGV4dCk7CisgIHRoaXMtPldyaXRlUmV6QXJyYXkoeG1sLCByZXouUlRGKTsKKyAgeG1sLkVuZEVsZW1lbnQoKTsgLy8gZGljdAorICB4bWwuRW5kRWxlbWVudCgpOyAvLyBwbGlzdAorICB4bWwuRW5kRG9jdW1lbnQoKTsKKyAgZnhtbC5DbG9zZSgpOworfQorCit2b2lkIGNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3I6OldyaXRlUmV6QXJyYXkoY21YTUxXcml0ZXImIHhtbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXpBcnJheSBjb25zdCYgYXJyYXkpCit7CisgIGlmIChhcnJheS5FbnRyaWVzLmVtcHR5KCkpIHsKKyAgICByZXR1cm47CisgIH0KKyAgeG1sLlN0YXJ0RWxlbWVudCgia2V5Iik7CisgIHhtbC5Db250ZW50KGFycmF5LktleSk7CisgIHhtbC5FbmRFbGVtZW50KCk7IC8vIGtleQorICB4bWwuU3RhcnRFbGVtZW50KCJhcnJheSIpOworICBmb3IgKFJlekRpY3QgY29uc3QmIGRpY3QgOiBhcnJheS5FbnRyaWVzKSB7CisgICAgdGhpcy0+V3JpdGVSZXpEaWN0KHhtbCwgZGljdCk7CisgIH0KKyAgeG1sLkVuZEVsZW1lbnQoKTsgLy8gYXJyYXkKK30KKwordm9pZCBjbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yOjpXcml0ZVJlekRpY3QoY21YTUxXcml0ZXImIHhtbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlekRpY3QgY29uc3QmIGRpY3QpCit7CisgIHN0ZDo6dmVjdG9yPGNoYXI+IGJhc2U2NGJ1ZihkaWN0LkRhdGEuc2l6ZSgpICogMyAvIDIgKyA1KTsKKyAgc2l6ZV90IGJhc2U2NGxlbiA9CisgICAgY21zeXNCYXNlNjRfRW5jb2RlKGRpY3QuRGF0YS5kYXRhKCksIGRpY3QuRGF0YS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJhc2U2NGJ1Zi5kYXRhKCkpLCAwKTsKKyAgc3RkOjpzdHJpbmcgYmFzZTY0ZGF0YShiYXNlNjRidWYuZGF0YSgpLCBiYXNlNjRsZW4pOworICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgIHhtbC5TdGFydEVsZW1lbnQoImRpY3QiKTsKKyAgeG1sLlN0YXJ0RWxlbWVudCgia2V5Iik7ICAgIHhtbC5Db250ZW50KCJBdHRyaWJ1dGVzIik7IHhtbC5FbmRFbGVtZW50KCk7CisgIHhtbC5TdGFydEVsZW1lbnQoInN0cmluZyIpOyB4bWwuQ29udGVudCgiMHgwMDAwIik7ICAgICB4bWwuRW5kRWxlbWVudCgpOworICB4bWwuU3RhcnRFbGVtZW50KCJrZXkiKTsgICAgeG1sLkNvbnRlbnQoIkRhdGEiKTsgICAgICAgeG1sLkVuZEVsZW1lbnQoKTsKKyAgeG1sLlN0YXJ0RWxlbWVudCgiZGF0YSIpOyAgIHhtbC5Db250ZW50KGJhc2U2NGRhdGEpOyAgIHhtbC5FbmRFbGVtZW50KCk7CisgIHhtbC5TdGFydEVsZW1lbnQoImtleSIpOyAgICB4bWwuQ29udGVudCgiSUQiKTsgICAgICAgICB4bWwuRW5kRWxlbWVudCgpOworICB4bWwuU3RhcnRFbGVtZW50KCJzdHJpbmciKTsgeG1sLkNvbnRlbnQoZGljdC5JRCk7ICAgICAgeG1sLkVuZEVsZW1lbnQoKTsKKyAgeG1sLlN0YXJ0RWxlbWVudCgia2V5Iik7ICAgIHhtbC5Db250ZW50KCJOYW1lIik7ICAgICAgIHhtbC5FbmRFbGVtZW50KCk7CisgIHhtbC5TdGFydEVsZW1lbnQoInN0cmluZyIpOyB4bWwuQ29udGVudChkaWN0Lk5hbWUpOyAgICB4bWwuRW5kRWxlbWVudCgpOworICB4bWwuRW5kRWxlbWVudCgpOyAvLyBkaWN0CisgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworfQorCitib29sIGNtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3I6OldyaXRlTGljZW5zZShSZXpEb2MmIHJleiwgc2l6ZV90IGxpY2Vuc2VOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBsaWNlbnNlTGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGljZW5zZUZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpCiB7CiAgIGlmICghbGljZW5zZUZpbGUuZW1wdHkoKSAmJiAhc2luZ2xlTGljZW5zZSkgewogICAgIGxpY2Vuc2VOdW1iZXIgPSA1MDAyOwogICAgIGxpY2Vuc2VMYW5ndWFnZSA9ICJFbmdsaXNoIjsKICAgfQogCi0gIC8vIExpY2Vuc2UgaGVhZGVyCi0gIG91dHB1dFN0cmVhbSA8PCAiZGF0YSAnVEVYVCcgKCIgPDwgbGljZW5zZU51bWJlciA8PCAiLCBcIiIgPDwgbGljZW5zZUxhbmd1YWdlCi0gICAgICAgICAgICAgICA8PCAiXCIpIHtcbiI7Ci0gIC8vIExpY2Vuc2UgYm9keQotICBzdGQ6OnN0cmluZyBhY3R1YWxfbGljZW5zZSA9ICFsaWNlbnNlRmlsZS5lbXB0eSgpCi0gICAgPyBsaWNlbnNlRmlsZQotICAgIDogKHNsYURpcmVjdG9yeSArICIvIiArIGxpY2Vuc2VMYW5ndWFnZSArICIubGljZW5zZS50eHQiKTsKLSAgY21zeXM6Omlmc3RyZWFtIGxpY2Vuc2VfaWZzOwotICBsaWNlbnNlX2lmcy5vcGVuKGFjdHVhbF9saWNlbnNlLmNfc3RyKCkpOwotICBpZiAobGljZW5zZV9pZnMuaXNfb3BlbigpKSB7Ci0gICAgd2hpbGUgKGxpY2Vuc2VfaWZzLmdvb2QoKSkgewotICAgICAgc3RkOjpzdHJpbmcgbGluZTsKLSAgICAgIHN0ZDo6Z2V0bGluZShsaWNlbnNlX2lmcywgbGluZSk7Ci0gICAgICBpZiAoIWxpbmUuZW1wdHkoKSkgewotICAgICAgICBFc2NhcGVRdW90ZXNBbmRCYWNrc2xhc2hlcyhsaW5lKTsKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmVzOwotICAgICAgICBpZiAoIXRoaXMtPkJyZWFrTG9uZ0xpbmUobGluZSwgbGluZXMsIGVycm9yKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGwgOiBsaW5lcykgewotICAgICAgICAgIG91dHB1dFN0cmVhbSA8PCAiICAgICAgICBcIiIgPDwgbCA8PCAiXCJcbiI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIG91dHB1dFN0cmVhbSA8PCAiICAgICAgICBcIlxcblwiXG4iOworICAvLyBMaWNlbnNlIGZpbGUKKyAgUmV6QXJyYXkqIGxpY2Vuc2VBcnJheSA9ICZyZXouVGV4dDsKKyAgc3RkOjpzdHJpbmcgYWN0dWFsX2xpY2Vuc2U7CisgIGlmICghbGljZW5zZUZpbGUuZW1wdHkoKSkgeworICAgIGlmIChjbUhhc0xpdGVyYWxTdWZmaXgobGljZW5zZUZpbGUsICIucnRmIikpIHsKKyAgICAgIGxpY2Vuc2VBcnJheSA9ICZyZXouUlRGOwogICAgIH0KLSAgICBsaWNlbnNlX2lmcy5jbG9zZSgpOwotICB9Ci0KLSAgLy8gRW5kIG9mIExpY2Vuc2UKLSAgb3V0cHV0U3RyZWFtIDw8ICJ9O1xuXG4iOwotICBpZiAoIWxpY2Vuc2VGaWxlLmVtcHR5KCkgJiYgIXNpbmdsZUxpY2Vuc2UpIHsKLSAgICBvdXRwdXRTdHJlYW0gPDwgU0xBU1RSRW5nbGlzaDsKKyAgICBhY3R1YWxfbGljZW5zZSA9IGxpY2Vuc2VGaWxlOwogICB9IGVsc2UgewotICAgIC8vIE1lbnUgaGVhZGVyCi0gICAgb3V0cHV0U3RyZWFtIDw8ICJyZXNvdXJjZSAnU1RSIycgKCIgPDwgbGljZW5zZU51bWJlciA8PCAiLCBcIiIKLSAgICAgICAgICAgICAgICAgPDwgbGljZW5zZUxhbmd1YWdlIDw8ICJcIikge1xuIjsKLSAgICBvdXRwdXRTdHJlYW0gPDwgIiAgICB7XG4iOwotCi0gICAgLy8gTWVudSBib2R5Ci0gICAgY21zeXM6Omlmc3RyZWFtIG1lbnVfaWZzOwotICAgIG1lbnVfaWZzLm9wZW4oCi0gICAgICAoc2xhRGlyZWN0b3J5ICsgIi8iICsgbGljZW5zZUxhbmd1YWdlICsgIi5tZW51LnR4dCIpLmNfc3RyKCkpOwotICAgIGlmIChtZW51X2lmcy5pc19vcGVuKCkpIHsKLSAgICAgIHNpemVfdCBsaW5lc193cml0dGVuID0gMDsKLSAgICAgIHdoaWxlIChtZW51X2lmcy5nb29kKCkpIHsKLSAgICAgICAgLy8gTGluZXMgd3JpdHRlbiBmcm9tIG9yaWdpbmFsIGZpbGUsIG5vdCBmcm9tIGJyb2tlbiB1cCBsaW5lcwotICAgICAgICBzdGQ6OnN0cmluZyBsaW5lOwotICAgICAgICBzdGQ6OmdldGxpbmUobWVudV9pZnMsIGxpbmUpOwotICAgICAgICBpZiAoIWxpbmUuZW1wdHkoKSkgewotICAgICAgICAgIEVzY2FwZVF1b3Rlc0FuZEJhY2tzbGFzaGVzKGxpbmUpOwotICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5lczsKLSAgICAgICAgICBpZiAoIXRoaXMtPkJyZWFrTG9uZ0xpbmUobGluZSwgbGluZXMsIGVycm9yKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBjb21tYTsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgYSBjb21tYSBhZnRlciBldmVyeSBjb21wbGV0ZSBzdHJpbmcsCi0gICAgICAgICAgICAvLyBidXQgbm90IG9uIHRoZSB2ZXJ5IGxhc3QgbGluZQotICAgICAgICAgICAgaWYgKGxpbmVzX3dyaXR0ZW4gIT0gOCAmJiBpID09IGxpbmVzLnNpemUoKSAtIDEpIHsKLSAgICAgICAgICAgICAgY29tbWEgPSAiLCI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBjb21tYSA9ICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0cHV0U3RyZWFtIDw8ICIgICAgICAgIFwiIiA8PCBsaW5lc1tpXSA8PCAiXCIiIDw8IGNvbW1hIDw8ICJcbiI7Ci0gICAgICAgICAgfQotICAgICAgICAgICsrbGluZXNfd3JpdHRlbjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgbWVudV9pZnMuY2xvc2UoKTsKKyAgICBzdGQ6OnN0cmluZyBsaWNlbnNlX3dvX2V4dCA9CisgICAgICBzbGFEaXJlY3RvcnkgKyAiLyIgKyBsaWNlbnNlTGFuZ3VhZ2UgKyAiLmxpY2Vuc2UiOworICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGxpY2Vuc2Vfd29fZXh0ICsgIi50eHQiKSkgeworICAgICAgYWN0dWFsX2xpY2Vuc2UgPSBsaWNlbnNlX3dvX2V4dCArICIudHh0IjsKKyAgICB9IGVsc2UgeworICAgICAgbGljZW5zZUFycmF5ID0gJnJlei5SVEY7CisgICAgICBhY3R1YWxfbGljZW5zZSA9IGxpY2Vuc2Vfd29fZXh0ICsgIi5ydGYiOwogICAgIH0KLQotICAgIC8vIEVuZCBvZiBtZW51Ci0gICAgb3V0cHV0U3RyZWFtIDw8ICIgICAgfVxuIjsKLSAgICBvdXRwdXRTdHJlYW0gPDwgIn07XG4iOwotICAgIG91dHB1dFN0cmVhbSA8PCAiXG4iOwogICB9CiAKKyAgLy8gTGljZW5zZSBib2R5CisgIHsKKyAgICBSZXpEaWN0IGxpY2Vuc2UgPSB7IGxpY2Vuc2VMYW5ndWFnZSwgbGljZW5zZU51bWJlciwge30gfTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGluZXM7CisgICAgaWYgKCF0aGlzLT5SZWFkRmlsZShhY3R1YWxfbGljZW5zZSwgbGluZXMsIGVycm9yKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB0aGlzLT5FbmNvZGVMaWNlbnNlKGxpY2Vuc2UsIGxpbmVzKTsKKyAgICBsaWNlbnNlQXJyYXktPkVudHJpZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShsaWNlbnNlKSk7CisgIH0KKworICAvLyBNZW51IGJvZHkKKyAgeworICAgIFJlekRpY3QgbWVudSA9IHsgbGljZW5zZUxhbmd1YWdlLCBsaWNlbnNlTnVtYmVyLCB7fSB9OworICAgIGlmICghbGljZW5zZUZpbGUuZW1wdHkoKSAmJiAhc2luZ2xlTGljZW5zZSkgeworICAgICAgdGhpcy0+RW5jb2RlTWVudShtZW51LCBEZWZhdWx0TWVudSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5lczsKKyAgICAgIHN0ZDo6c3RyaW5nIGFjdHVhbF9tZW51ID0KKyAgICAgICAgc2xhRGlyZWN0b3J5ICsgIi8iICsgbGljZW5zZUxhbmd1YWdlICsgIi5tZW51LnR4dCI7CisgICAgICBpZiAoIXRoaXMtPlJlYWRGaWxlKGFjdHVhbF9tZW51LCBsaW5lcywgZXJyb3IpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHRoaXMtPkVuY29kZU1lbnUobWVudSwgbGluZXMpOworICAgIH0KKyAgICByZXouTWVudS5FbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUobWVudSkpOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgY21DUGFja0RyYWdORHJvcEdlbmVyYXRvcjo6RW5jb2RlTGljZW5zZSgKKyAgUmV6RGljdCYgZGljdCwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBsaW5lcykKK3sKKyAgLy8gTGljZW5zZSB0ZXh0IHVzZXMgQ1IgbmV3bGluZXMuCisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGwgOiBsaW5lcykgeworICAgIGRpY3QuRGF0YS5pbnNlcnQoZGljdC5EYXRhLmVuZCgpLCBsLmJlZ2luKCksIGwuZW5kKCkpOworICAgIGRpY3QuRGF0YS5wdXNoX2JhY2soJ1xyJyk7CisgIH0KKyAgZGljdC5EYXRhLnB1c2hfYmFjaygnXHInKTsKK30KKwordm9pZCBjbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yOjpFbmNvZGVNZW51KAorICBSZXpEaWN0JiBkaWN0LCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGxpbmVzKQoreworICAvLyBNZW51IHJlc291cmNlcyBzdGFydCB3aXRoIGEgYmlnLWVuZGlhbiB1aW50MTZfdCBmb3IgbnVtYmVyIG9mIGxpbmVzOgorICB7CisgICAgdWludDE2X3QgbnVtTGluZXMgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4obGluZXMuc2l6ZSgpKTsKKyAgICBjaGFyKiBkID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm51bUxpbmVzKTsKKyNpZiBLV0lNTF9BQklfRU5ESUFOX0lEID09IEtXSU1MX0FCSV9FTkRJQU5fSURfTElUVExFCisgICAgZGljdC5EYXRhLnB1c2hfYmFjayhkWzFdKTsKKyAgICBkaWN0LkRhdGEucHVzaF9iYWNrKGRbMF0pOworI2Vsc2UKKyAgICBkaWN0LkRhdGEucHVzaF9iYWNrKGRbMF0pOworICAgIGRpY3QuRGF0YS5wdXNoX2JhY2soZFsxXSk7CisjZW5kaWYKKyAgfQorICAvLyBFYWNoIGxpbmUgc3RhcnRzIHdpdGggYSB1aW50OF90IGxlbmd0aCwgcGx1cyB0aGUgYnl0ZXMgdGhlbXNlbHZlczoKKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbCA6IGxpbmVzKSB7CisgICAgZGljdC5EYXRhLnB1c2hfYmFjayhzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsLmxlbmd0aCgpKSk7CisgICAgZGljdC5EYXRhLmluc2VydChkaWN0LkRhdGEuZW5kKCksIGwuYmVnaW4oKSwgbC5lbmQoKSk7CisgIH0KK30KKworYm9vbCBjbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yOjpSZWFkRmlsZShzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBsaW5lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yKQoreworICBjbXN5czo6aWZzdHJlYW0gaWZzKGZpbGUpOworICBzdGQ6OnN0cmluZyBsaW5lOworICB3aGlsZSAoc3RkOjpnZXRsaW5lKGlmcywgbGluZSkpIHsKKyAgICBpZiAoIXRoaXMtPkJyZWFrTG9uZ0xpbmUobGluZSwgbGluZXMsIGVycm9yKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQogICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODcyLDkgKzg5OSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbGluZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yKQogewotICBjb25zdCBzaXplX3QgbWF4X2xpbmVfbGVuZ3RoID0gNTEyOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmUuc2l6ZSgpOyBpICs9IG1heF9saW5lX2xlbmd0aCkgewotICAgIHNpemVfdCBsaW5lX2xlbmd0aCA9IG1heF9saW5lX2xlbmd0aDsKKyAgY29uc3Qgc2l6ZV90IG1heF9saW5lX2xlbmd0aCA9IDI1NTsKKyAgc2l6ZV90IGxpbmVfbGVuZ3RoID0gbWF4X2xpbmVfbGVuZ3RoOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmUuc2l6ZSgpOyBpICs9IGxpbmVfbGVuZ3RoKSB7CisgICAgbGluZV9sZW5ndGggPSBtYXhfbGluZV9sZW5ndGg7CiAgICAgaWYgKGkgKyBsaW5lX2xlbmd0aCA+IGxpbmUuc2l6ZSgpKSB7CiAgICAgICBsaW5lX2xlbmd0aCA9IGxpbmUuc2l6ZSgpIC0gaTsKICAgICB9IGVsc2UgewpAQCAtODg2LDI1ICs5MTQsMTAgQEAKICAgICBpZiAobGluZV9sZW5ndGggPT0gMCkgewogICAgICAgKmVycm9yID0gIlBsZWFzZSBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHdvcmRzICIKICAgICAgICAgICAgICAgICIob3IgY2hhcmFjdGVyIHNlcXVlbmNlcyBub3QgYnJva2VuIHVwIGJ5IHNwYWNlcyBvciBuZXdsaW5lcykgIgotICAgICAgICAgICAgICAgImluIHlvdXIgbGljZW5zZSBmaWxlIHdoaWNoIGFyZSBtb3JlIHRoYW4gNTEyIGNoYXJhY3RlcnMgbG9uZy4iOworICAgICAgICAgICAgICAgImluIHlvdXIgbGljZW5zZSBmaWxlIHdoaWNoIGFyZSBtb3JlIHRoYW4gMjU1IGNoYXJhY3RlcnMgbG9uZy4iOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBsaW5lcy5wdXNoX2JhY2sobGluZS5zdWJzdHIoaSwgbGluZV9sZW5ndGgpKTsKICAgfQogICByZXR1cm4gdHJ1ZTsKIH0KLQotdm9pZCBjbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yOjpFc2NhcGVRdW90ZXNBbmRCYWNrc2xhc2hlcyhzdGQ6OnN0cmluZyYgbGluZSkKLXsKLSAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBiYWNrc2xhc2hfcG9zID0gbGluZS5maW5kKCdcXCcpOwotICB3aGlsZSAoYmFja3NsYXNoX3BvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIGxpbmUucmVwbGFjZShiYWNrc2xhc2hfcG9zLCAxLCAiXFxcXCIpOwotICAgIGJhY2tzbGFzaF9wb3MgPSBsaW5lLmZpbmQoJ1xcJywgYmFja3NsYXNoX3BvcyArIDIpOwotICB9Ci0KLSAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBxdW90ZV9wb3MgPSBsaW5lLmZpbmQoJ1wiJyk7Ci0gIHdoaWxlIChxdW90ZV9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICBsaW5lLnJlcGxhY2UocXVvdGVfcG9zLCAxLCAiXFxcIiIpOwotICAgIHF1b3RlX3BvcyA9IGxpbmUuZmluZCgnXCInLCBxdW90ZV9wb3MgKyAyKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3IuaCBiL1NvdXJjZS9DUGFjay9jbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yLmgKaW5kZXggZjhjODZjMC4uZGJkMTkwYyAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NtQ1BhY2tEcmFnTkRyb3BHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja0RyYWdORHJvcEdlbmVyYXRvci5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSAiY21DUGFja0dlbmVyYXRvci5oIgogCiBjbGFzcyBjbUdlbmVyYXRlZEZpbGVTdHJlYW07CitjbGFzcyBjbVhNTFdyaXRlcjsKIAogLyoqIFxjbGFzcyBjbUNQYWNrRHJhZ05Ecm9wR2VuZXJhdG9yCiAgKiBcYnJpZWYgQSBnZW5lcmF0b3IgZm9yIE9TWCBkcmFnLW4tZHJvcCBpbnN0YWxscwpAQCAtNDUsMTIgKzQ2LDQwIEBACiAgIHN0ZDo6c3RyaW5nIHNsYURpcmVjdG9yeTsKICAgYm9vbCBzaW5nbGVMaWNlbnNlOwogCi0gIGJvb2wgV3JpdGVMaWNlbnNlKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgb3V0cHV0U3RyZWFtLCBpbnQgbGljZW5zZU51bWJlciwKKyAgc3RydWN0IFJlekRpY3QKKyAgeworICAgIHN0ZDo6c3RyaW5nIE5hbWU7CisgICAgc2l6ZV90IElEOworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IERhdGE7CisgIH07CisKKyAgc3RydWN0IFJlekFycmF5CisgIHsKKyAgICBzdGQ6OnN0cmluZyBLZXk7CisgICAgc3RkOjp2ZWN0b3I8UmV6RGljdD4gRW50cmllczsKKyAgfTsKKworICBzdHJ1Y3QgUmV6RG9jCisgIHsKKyAgICBSZXpBcnJheSBMUGljID0geyAiTFBpYyIsIHt9IH07CisgICAgUmV6QXJyYXkgTWVudSA9IHsgIlNUUiMiLCB7fSB9OworICAgIFJlekFycmF5IFRleHQgPSB7ICJURVhUIiwge30gfTsKKyAgICBSZXpBcnJheSBSVEYgPSB7ICJSVEYgIiwge30gfTsKKyAgfTsKKworICB2b2lkIFdyaXRlUmV6WE1MKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlLCBSZXpEb2MgY29uc3QmIHJleik7CisgIHZvaWQgV3JpdGVSZXpBcnJheShjbVhNTFdyaXRlciYgeG1sLCBSZXpBcnJheSBjb25zdCYgYXJyYXkpOworICB2b2lkIFdyaXRlUmV6RGljdChjbVhNTFdyaXRlciYgeG1sLCBSZXpEaWN0IGNvbnN0JiBkaWN0KTsKKworICBib29sIFdyaXRlTGljZW5zZShSZXpEb2MmIHJleiwgc2l6ZV90IGxpY2Vuc2VOdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGxpY2Vuc2VMYW5ndWFnZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpY2Vuc2VGaWxlLCBzdGQ6OnN0cmluZyogZXJyb3IpOworICB2b2lkIEVuY29kZUxpY2Vuc2UoUmV6RGljdCYgZGljdCwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBsaW5lcyk7CisgIHZvaWQgRW5jb2RlTWVudShSZXpEaWN0JiBkaWN0LCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGxpbmVzKTsKKyAgYm9vbCBSZWFkRmlsZShzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBsaW5lcywKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpOwogICBib29sIEJyZWFrTG9uZ0xpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmUsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbGluZXMsCiAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpOwotICB2b2lkIEVzY2FwZVF1b3Rlc0FuZEJhY2tzbGFzaGVzKHN0ZDo6c3RyaW5nJiBsaW5lKTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tFeHRlcm5hbEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svY21DUGFja0V4dGVybmFsR2VuZXJhdG9yLmN4eAppbmRleCAxNDJlYjZmLi4wYmM4NDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja0V4dGVybmFsR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja0V4dGVybmFsR2VuZXJhdG9yLmN4eApAQCAtOCwxMCArOCwxMCBAQAogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogCi0jaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CisjaW5jbHVkZSA8Y20zcC9qc29uL3dyaXRlci5oPgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgotI2luY2x1ZGUgImNtX2pzb25jcHBfd3JpdGVyLmgiCisjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAKICNpbmNsdWRlICJjbUNQYWNrQ29tcG9uZW50R3JvdXAuaCIKICNpbmNsdWRlICJjbUNQYWNrTG9nLmgiCkBAIC02MSw3ICs2MSw3IEBACiAgIH0KIAogICBjb25zdCBjaGFyKiBwYWNrYWdlU2NyaXB0ID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19FWFRFUk5BTF9QQUNLQUdFX1NDUklQVCIpOwotICBpZiAocGFja2FnZVNjcmlwdCAmJiAqcGFja2FnZVNjcmlwdCkgeworICBpZiAoY21Ob25lbXB0eShwYWNrYWdlU2NyaXB0KSkgewogICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGFja2FnZVNjcmlwdCkpIHsKICAgICAgIGNtQ1BhY2tMb2dnZXIoCiAgICAgICAgIGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKQEAgLTc1LDYgKzc1LDEyIEBACiAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEVycm9yT2NjdXJlZEZsYWcoKSB8fCAhcmVzKSB7CiAgICAgICByZXR1cm4gMDsKICAgICB9CisKKyAgICBjb25zdCBjaGFyKiBidWlsdFBhY2thZ2VzU3RyID0KKyAgICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfRVhURVJOQUxfQlVJTFRfUEFDS0FHRVMiKTsKKyAgICBpZiAoYnVpbHRQYWNrYWdlc1N0cikgeworICAgICAgY21FeHBhbmRMaXN0KGJ1aWx0UGFja2FnZXNTdHIsIHRoaXMtPnBhY2thZ2VGaWxlTmFtZXMsIGZhbHNlKTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4gMTsKQEAgLTIwNSw3ICsyMTEsNyBAQAogCiAgIGNvbnN0IGNoYXIqIGRlZmF1bHREaXJlY3RvcnlQZXJtaXNzaW9ucyA9CiAgICAgdGhpcy0+UGFyZW50LT5HZXRPcHRpb24oIkNQQUNLX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlMiKTsKLSAgaWYgKGRlZmF1bHREaXJlY3RvcnlQZXJtaXNzaW9ucyAmJiAqZGVmYXVsdERpcmVjdG9yeVBlcm1pc3Npb25zKSB7CisgIGlmIChjbU5vbmVtcHR5KGRlZmF1bHREaXJlY3RvcnlQZXJtaXNzaW9ucykpIHsKICAgICByb290WyJkZWZhdWx0RGlyZWN0b3J5UGVybWlzc2lvbnMiXSA9IGRlZmF1bHREaXJlY3RvcnlQZXJtaXNzaW9uczsKICAgfQogICBpZiAoY21Jc0ludGVybmFsbHlPbih0aGlzLT5QYXJlbnQtPkdldE9wdGlvbigiQ1BBQ0tfU0VUX0RFU1RESVIiKSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrRnJlZUJTREdlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svY21DUGFja0ZyZWVCU0RHZW5lcmF0b3IuY3h4CmluZGV4IGUzY2MzNTIuLmI2NzMwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrRnJlZUJTREdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tGcmVlQlNER2VuZXJhdG9yLmN4eApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCisjaW5jbHVkZSAiY21Xb3JraW5nRGlyZWN0b3J5LmgiCiAKIC8vIE5lZWRlZCBmb3IgOjpvcGVuKCkgYW5kIDo6c3RhdCgpCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjg1LDggKzI4Niw3IEBACiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGZpbGVJdDsKLSAgc3RkOjpzdHJpbmcgZGlyID0gY21TeXN0ZW1Ub29sczo6R2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKLSAgY21TeXN0ZW1Ub29sczo6Q2hhbmdlRGlyZWN0b3J5KHRvcGxldmVsKTsKKyAgY21Xb3JraW5nRGlyZWN0b3J5IHdkKHRvcGxldmVsKTsKIAogICBmaWxlcy5lcmFzZShzdGQ6OnJlbW92ZV9pZihmaWxlcy5iZWdpbigpLCBmaWxlcy5lbmQoKSwgaWdub3JlX2ZpbGUpLAogICAgICAgICAgICAgICBmaWxlcy5lbmQoKSk7CkBAIC0zMzIsNiArMzMyLDUgQEAKICAgICB9CiAgIH0KIAotICBjbVN5c3RlbVRvb2xzOjpDaGFuZ2VEaXJlY3RvcnkoZGlyKTsKICAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svY21DUGFja0dlbmVyYXRvci5jeHgKaW5kZXggNjY5OGYzYy4uMzg4MGY2NSAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NtQ1BhY2tHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrR2VuZXJhdG9yLmN4eApAQCAtMjE2LDcgKzIxNiw3IEBACiAgIG1vZGVfdCogZGVmYXVsdF9kaXJfbW9kZSA9IG51bGxwdHI7CiAgIGNvbnN0IGNoYXIqIGRlZmF1bHRfZGlyX2luc3RhbGxfcGVybWlzc2lvbnMgPQogICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUyIpOwotICBpZiAoZGVmYXVsdF9kaXJfaW5zdGFsbF9wZXJtaXNzaW9ucyAmJiAqZGVmYXVsdF9kaXJfaW5zdGFsbF9wZXJtaXNzaW9ucykgeworICBpZiAoY21Ob25lbXB0eShkZWZhdWx0X2Rpcl9pbnN0YWxsX3Blcm1pc3Npb25zKSkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpdGVtcyA9CiAgICAgICBjbUV4cGFuZGVkTGlzdChkZWZhdWx0X2Rpcl9pbnN0YWxsX3Blcm1pc3Npb25zKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGFyZyA6IGl0ZW1zKSB7CkBAIC0yNjQsNiArMjY0LDIzIEBACiAgICAgcmV0dXJuIDA7CiAgIH0KIAorICAvLyBSdW4gcHJlLWJ1aWxkIGFjdGlvbnMKKyAgY29uc3QgY2hhciogcHJlQnVpbGRTY3JpcHRzID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19QUkVfQlVJTERfU0NSSVBUUyIpOworICBpZiAocHJlQnVpbGRTY3JpcHRzKSB7CisgICAgY29uc3QgYXV0byBzY3JpcHRzID0gY21FeHBhbmRlZExpc3QocHJlQnVpbGRTY3JpcHRzLCBmYWxzZSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzY3JpcHQgOiBzY3JpcHRzKSB7CisgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICJFeGVjdXRpbmcgcHJlLWJ1aWxkIHNjcmlwdDogIiA8PCBzY3JpcHQgPDwgc3RkOjplbmRsKTsKKworICAgICAgaWYgKCF0aGlzLT5NYWtlZmlsZU1hcC0+UmVhZExpc3RGaWxlKHNjcmlwdCkpIHsKKyAgICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgIlRoZSBwcmUtYnVpbGQgc2NyaXB0IG5vdCBmb3VuZDogIiA8PCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQorCiAgIGlmIChzZXREZXN0RGlyKSB7CiAgICAgY21TeXN0ZW1Ub29sczo6UHV0RW52KCJERVNURElSPSIpOwogICB9CkBAIC0yNzYsNyArMjkzLDcgQEAKIHsKICAgKHZvaWQpc2V0RGVzdERpcjsKICAgY29uc3QgY2hhciogaW5zdGFsbENvbW1hbmRzID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19JTlNUQUxMX0NPTU1BTkRTIik7Ci0gIGlmIChpbnN0YWxsQ29tbWFuZHMgJiYgKmluc3RhbGxDb21tYW5kcykgeworICBpZiAoY21Ob25lbXB0eShpbnN0YWxsQ29tbWFuZHMpKSB7CiAgICAgc3RkOjpzdHJpbmcgdGVtcEluc3RhbGxEaXJlY3RvcnlFbnYgPQogICAgICAgY21TdHJDYXQoIkNNQUtFX0lOU1RBTExfUFJFRklYPSIsIHRlbXBJbnN0YWxsRGlyZWN0b3J5KTsKICAgICBjbVN5c3RlbVRvb2xzOjpQdXRFbnYodGVtcEluc3RhbGxEaXJlY3RvcnlFbnYpOwpAQCAtMzI3LDEzICszNDQsMTQgQEAKICAgfQogICBjb25zdCBjaGFyKiBpbnN0YWxsRGlyZWN0b3JpZXMgPQogICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfSU5TVEFMTEVEX0RJUkVDVE9SSUVTIik7Ci0gIGlmIChpbnN0YWxsRGlyZWN0b3JpZXMgJiYgKmluc3RhbGxEaXJlY3RvcmllcykgeworICBpZiAoY21Ob25lbXB0eShpbnN0YWxsRGlyZWN0b3JpZXMpKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluc3RhbGxEaXJlY3Rvcmllc1ZlY3RvciA9CiAgICAgICBjbUV4cGFuZGVkTGlzdChpbnN0YWxsRGlyZWN0b3JpZXMpOwogICAgIGlmIChpbnN0YWxsRGlyZWN0b3JpZXNWZWN0b3Iuc2l6ZSgpICUgMiAhPSAwKSB7CiAgICAgICBjbUNQYWNrTG9nZ2VyKAogICAgICAgICBjbUNQYWNrTG9nOjpMT0dfRVJST1IsCi0gICAgICAgICJDUEFDS19JTlNUQUxMRURfRElSRUNUT1JJRVMgc2hvdWxkIGNvbnRhaW4gcGFpcnMgb2YgPGRpcmVjdG9yeT4gYW5kICIKKyAgICAgICAgIkNQQUNLX0lOU1RBTExFRF9ESVJFQ1RPUklFUyBzaG91bGQgY29udGFpbiBwYWlycyBvZiA8ZGlyZWN0b3J5PiAiCisgICAgICAgICJhbmQgIgogICAgICAgICAiPHN1YmRpcmVjdG9yeT4uIFRoZSA8c3ViZGlyZWN0b3J5PiBjYW4gYmUgJy4nIHRvIGJlIGluc3RhbGxlZCBpbiAiCiAgICAgICAgICJ0aGUgdG9wbGV2ZWwgZGlyZWN0b3J5IG9mIGluc3RhbGxhdGlvbi4iCiAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKQEAgLTM1NCw2ICszNzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAiLSBJbnN0YWxsIGRpcmVjdG9yeTogIiA8PCB0b3AgPDwgc3RkOjplbmRsKTsKICAgICAgIGdsLlJlY3Vyc2VPbigpOwogICAgICAgZ2wuU2V0UmVjdXJzZUxpc3REaXJzKHRydWUpOworICAgICAgZ2wuU2V0UmVjdXJzZVRocm91Z2hTeW1saW5rcyhmYWxzZSk7CiAgICAgICBpZiAoIWdsLkZpbmRGaWxlcyhmaW5kRXhwcikpIHsKICAgICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBmaW5kIGFueSBmaWxlcyBpbiB0aGUgaW5zdGFsbGVkIGRpcmVjdG9yeSIKQEAgLTQwMiw3ICs0MjEsNiBAQAogICAgICAgfQogICAgICAgLyogcmVidWlsZCBzeW1saW5rcyBpbiB0aGUgaW5zdGFsbGVkIHRyZWUgKi8KICAgICAgIGlmICghc3ltbGlua2VkRmlsZXMuZW1wdHkoKSkgewotICAgICAgICBzdGQ6OnN0cmluZyBjdXJEaXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOwogICAgICAgICBzdGQ6OnN0cmluZyBnb1RvRGlyID0gY21TdHJDYXQodGVtcERpciwgJy8nLCBzdWJkaXIpOwogICAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19ERUJVRywKICAgICAgICAgICAgICAgICAgICAgICAiQ2hhbmdlIGRpciB0bzogIiA8PCBnb1RvRGlyIDw8IHN0ZDo6ZW5kbCk7CkBAIC00NDEsNyArNDU5LDggQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfREVCVUcsCi0gICAgICAgICAgICAgICAgICAgICAgIkdvaW5nIGJhY2sgdG86ICIgPDwgY3VyRGlyIDw8IHN0ZDo6ZW5kbCk7CisgICAgICAgICAgICAgICAgICAgICAgIkdvaW5nIGJhY2sgdG86ICIgPDwgd29ya2Rpci5HZXRPbGREaXJlY3RvcnkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC00NzQsMTAgKzQ5MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAiLSBJbnN0YWxsIHNjcmlwdDogIiA8PCBpbnN0YWxsU2NyaXB0IDw8IHN0ZDo6ZW5kbCk7CiAKICAgICAgIGlmIChzZXREZXN0RGlyKSB7Ci0gICAgICAgIC8vIEZvciBERVNURElSIGJhc2VkIHBhY2thZ2luZywgdXNlIHRoZSAqcHJvamVjdCogQ01BS0VfSU5TVEFMTF9QUkVGSVgKLSAgICAgICAgLy8gdW5kZXJuZWF0aCB0aGUgdGVtcEluc3RhbGxEaXJlY3RvcnkuIFRoZSB2YWx1ZSBvZiB0aGUgcHJvamVjdCdzCi0gICAgICAgIC8vIENNQUtFX0lOU1RBTExfUFJFRklYIGlzIHNlbnQgaW4gaGVyZSBhcyB0aGUgdmFsdWUgb2YgdGhlCi0gICAgICAgIC8vIENQQUNLX0lOU1RBTExfUFJFRklYIHZhcmlhYmxlLgorICAgICAgICAvLyBGb3IgREVTVERJUiBiYXNlZCBwYWNrYWdpbmcsIHVzZSB0aGUgKnByb2plY3QqCisgICAgICAgIC8vIENNQUtFX0lOU1RBTExfUFJFRklYIHVuZGVybmVhdGggdGhlIHRlbXBJbnN0YWxsRGlyZWN0b3J5LiBUaGUKKyAgICAgICAgLy8gdmFsdWUgb2YgdGhlIHByb2plY3QncyBDTUFLRV9JTlNUQUxMX1BSRUZJWCBpcyBzZW50IGluIGhlcmUgYXMgdGhlCisgICAgICAgIC8vIHZhbHVlIG9mIHRoZSBDUEFDS19JTlNUQUxMX1BSRUZJWCB2YXJpYWJsZS4KIAogICAgICAgICBzdGQ6OnN0cmluZyBkaXI7CiAgICAgICAgIGlmICh0aGlzLT5HZXRPcHRpb24oIkNQQUNLX0lOU1RBTExfUFJFRklYIikpIHsKQEAgLTUyMiw3ICs1NDEsNyBAQAogICBjb25zdCBjaGFyKiBjbWFrZVByb2plY3RzID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19JTlNUQUxMX0NNQUtFX1BST0pFQ1RTIik7CiAgIGNvbnN0IGNoYXIqIGNtYWtlR2VuZXJhdG9yID0gdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19DTUFLRV9HRU5FUkFUT1IiKTsKICAgc3RkOjpzdHJpbmcgYWJzb2x1dGVEZXN0RmlsZXM7Ci0gIGlmIChjbWFrZVByb2plY3RzICYmICpjbWFrZVByb2plY3RzKSB7CisgIGlmIChjbU5vbmVtcHR5KGNtYWtlUHJvamVjdHMpKSB7CiAgICAgaWYgKCFjbWFrZUdlbmVyYXRvcikgewogICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICJDUEFDS19JTlNUQUxMX0NNQUtFX1BST0pFQ1RTIGlzIHNwZWNpZmllZCwgYnV0ICIKQEAgLTU3NSw3ICs1OTQsNyBAQAogICAgICAgICBzdGQ6OnN0cmluZyBpbnN0YWxsVHlwZXNWYXIgPSAiQ1BBQ0tfIiArCiAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKHByb2plY3QuQ29tcG9uZW50KSArICJfSU5TVEFMTF9UWVBFUyI7CiAgICAgICAgIGNvbnN0IGNoYXIqIGluc3RhbGxUeXBlcyA9IHRoaXMtPkdldE9wdGlvbihpbnN0YWxsVHlwZXNWYXIpOwotICAgICAgICBpZiAoaW5zdGFsbFR5cGVzICYmICppbnN0YWxsVHlwZXMpIHsKKyAgICAgICAgaWYgKGNtTm9uZW1wdHkoaW5zdGFsbFR5cGVzKSkgewogICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbnN0YWxsVHlwZXNWZWN0b3IgPQogICAgICAgICAgICAgY21FeHBhbmRlZExpc3QoaW5zdGFsbFR5cGVzKTsKICAgICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbnN0YWxsVHlwZSA6IGluc3RhbGxUeXBlc1ZlY3RvcikgewpAQCAtNTg4LDcgKzYwNyw3IEBACiAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbXBvbmVudHNWYXIgPQogICAgICAgICAgICJDUEFDS19DT01QT05FTlRTXyIgKyBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UocHJvamVjdC5Db21wb25lbnQpOwogICAgICAgICBjb25zdCBjaGFyKiBjb21wb25lbnRzID0gdGhpcy0+R2V0T3B0aW9uKGNvbXBvbmVudHNWYXIpOwotICAgICAgICBpZiAoY29tcG9uZW50cyAmJiAqY29tcG9uZW50cykgeworICAgICAgICBpZiAoY21Ob25lbXB0eShjb21wb25lbnRzKSkgewogICAgICAgICAgIGNtRXhwYW5kTGlzdChjb21wb25lbnRzLCBjb21wb25lbnRzVmVjdG9yKTsKICAgICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21wIDogY29tcG9uZW50c1ZlY3RvcikgewogICAgICAgICAgICAgcHJvamVjdC5Db21wb25lbnRzLnB1c2hfYmFjaygKQEAgLTYyMSw5ICs2NDAsOSBAQAogICAgICAgICBidWlsZENvbmZpZ3MuZW1wbGFjZV9iYWNrKCk7CiAgICAgICB9CiAKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gZ2xvYmFsR2VuZXJhdG9yKAorICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBnbG9iYWxHZW5lcmF0b3IgPQogICAgICAgICB0aGlzLT5NYWtlZmlsZU1hcC0+R2V0Q01ha2VJbnN0YW5jZSgpLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoCi0gICAgICAgICAgY21ha2VHZW5lcmF0b3IpKTsKKyAgICAgICAgICBjbWFrZUdlbmVyYXRvcik7CiAgICAgICBpZiAoIWdsb2JhbEdlbmVyYXRvcikgewogICAgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAiU3BlY2lmaWVkIHBhY2thZ2UgZ2VuZXJhdG9yIG5vdCBmb3VuZC4gIgpAQCAtNzUyLDcgKzc3MSw3IEBACiAKICAgY29uc3QgY2hhciogZGVmYXVsdF9kaXJfaW5zdF9wZXJtaXNzaW9ucyA9CiAgICAgdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TIik7Ci0gIGlmIChkZWZhdWx0X2Rpcl9pbnN0X3Blcm1pc3Npb25zICYmICpkZWZhdWx0X2Rpcl9pbnN0X3Blcm1pc3Npb25zKSB7CisgIGlmIChjbU5vbmVtcHR5KGRlZmF1bHRfZGlyX2luc3RfcGVybWlzc2lvbnMpKSB7CiAgICAgbWYuQWRkRGVmaW5pdGlvbigiQ01BS0VfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OUyIsCiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2Rpcl9pbnN0X3Blcm1pc3Npb25zKTsKICAgfQpAQCAtODEwLDcgKzgyOSw3IEBACiAgICAgICogICAgIC0gQmVjYXVzZSBpdCB3YXMgYWxyZWFkeSB1c2VkIGZvciBjb21wb25lbnQgaW5zdGFsbAogICAgICAqICAgICAgIGluIG9yZGVyIHRvIHB1dCB0aGluZ3MgaW4gc3ViZGlycy4uLgogICAgICAqLwotICAgIGNtU3lzdGVtVG9vbHM6OlB1dEVudihzdGQ6OnN0cmluZygiREVTVERJUj0iKSArIHRlbXBJbnN0YWxsRGlyZWN0b3J5KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpQdXRFbnYoIkRFU1RESVI9IiArIHRlbXBJbnN0YWxsRGlyZWN0b3J5KTsKICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19ERUJVRywKICAgICAgICAgICAgICAgICAgICItIENyZWF0aW5nIGRpcmVjdG9yeTogJyIgPDwgZGlyIDw8ICInIiA8PCBzdGQ6OmVuZGwpOwogCkBAIC04NjIsNiArODgxLDcgQEAKICAgICBmaW5kRXhwciArPSAiLyoiOwogICAgIGdsQi5SZWN1cnNlT24oKTsKICAgICBnbEIuU2V0UmVjdXJzZUxpc3REaXJzKHRydWUpOworICAgIGdsQi5TZXRSZWN1cnNlVGhyb3VnaFN5bWxpbmtzKGZhbHNlKTsKICAgICBnbEIuRmluZEZpbGVzKGZpbmRFeHByKTsKICAgICBmaWxlc0JlZm9yZSA9IGdsQi5HZXRGaWxlcygpOwogICAgIHN0ZDo6c29ydChmaWxlc0JlZm9yZS5iZWdpbigpLCBmaWxlc0JlZm9yZS5lbmQoKSk7CkBAIC05MTksMTEgKzkzOSwxMSBAQAogICAgIH0KICAgfQogCi0gIGlmIChudWxscHRyICE9IG1mLkdldERlZmluaXRpb24oIkNQQUNLX0FCU09MVVRFX0RFU1RJTkFUSU9OX0ZJTEVTIikpIHsKKyAgaWYgKGF1dG8gZCA9IG1mLkdldERlZmluaXRpb24oIkNQQUNLX0FCU09MVVRFX0RFU1RJTkFUSU9OX0ZJTEVTIikpIHsKICAgICBpZiAoIWFic29sdXRlRGVzdEZpbGVzLmVtcHR5KCkpIHsKICAgICAgIGFic29sdXRlRGVzdEZpbGVzICs9ICI7IjsKICAgICB9Ci0gICAgYWJzb2x1dGVEZXN0RmlsZXMgKz0gbWYuR2V0RGVmaW5pdGlvbigiQ1BBQ0tfQUJTT0xVVEVfREVTVElOQVRJT05fRklMRVMiKTsKKyAgICBhYnNvbHV0ZURlc3RGaWxlcyArPSBkOwogICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0RFQlVHLAogICAgICAgICAgICAgICAgICAgIkdvdCBzb21lIEFCU09MVVRFIERFU1RJTkFUSU9OIEZJTEVTOiAiIDw8IGFic29sdXRlRGVzdEZpbGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKQEAgLTkzNCw4ICs5NTQsNyBAQAogICAgICAgICBHZXRDb21wb25lbnRJbnN0YWxsRGlyTmFtZVN1ZmZpeChjb21wb25lbnQpOwogICAgICAgaWYgKG51bGxwdHIgIT0gdGhpcy0+R2V0T3B0aW9uKGFic29sdXRlRGVzdEZpbGVDb21wb25lbnQpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGFic29sdXRlRGVzdEZpbGVzTGlzdENvbXBvbmVudCA9Ci0gICAgICAgICAgY21TdHJDYXQodGhpcy0+R2V0T3B0aW9uKGFic29sdXRlRGVzdEZpbGVDb21wb25lbnQpLCAnOycsCi0gICAgICAgICAgICAgICAgICAgbWYuR2V0RGVmaW5pdGlvbigiQ1BBQ0tfQUJTT0xVVEVfREVTVElOQVRJT05fRklMRVMiKSk7CisgICAgICAgICAgY21TdHJDYXQodGhpcy0+R2V0T3B0aW9uKGFic29sdXRlRGVzdEZpbGVDb21wb25lbnQpLCAnOycsIGQpOwogICAgICAgICB0aGlzLT5TZXRPcHRpb24oYWJzb2x1dGVEZXN0RmlsZUNvbXBvbmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRGVzdEZpbGVzTGlzdENvbXBvbmVudC5jX3N0cigpKTsKICAgICAgIH0gZWxzZSB7CkBAIC05NjQsNyArOTgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWUpCiB7CiAgIGNvbnN0IGNoYXIqIGRlZiA9IHRoaXMtPk1ha2VmaWxlTWFwLT5HZXREZWZpbml0aW9uKG9wKTsKLSAgaWYgKGRlZiAmJiAqZGVmKSB7CisgIGlmIChjbU5vbmVtcHR5KGRlZikpIHsKICAgICByZXR1cm47CiAgIH0KICAgdGhpcy0+U2V0T3B0aW9uKG9wLCB2YWx1ZSk7CkBAIC0xMDc1LDYgKzEwOTQsMjUgQEAKICAgICAgIHJldHVybiAwOwogICAgIH0KICAgfQorICAvLyBSdW4gcG9zdC1idWlsZCBhY3Rpb25zCisgIGNvbnN0IGNoYXIqIHBvc3RCdWlsZFNjcmlwdHMgPSB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX1BPU1RfQlVJTERfU0NSSVBUUyIpOworICBpZiAocG9zdEJ1aWxkU2NyaXB0cykgeworICAgIHRoaXMtPk1ha2VmaWxlTWFwLT5BZGREZWZpbml0aW9uKCJDUEFDS19QQUNLQUdFX0ZJTEVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUpvaW4odGhpcy0+cGFja2FnZUZpbGVOYW1lcywgIjsiKSk7CisKKyAgICBjb25zdCBhdXRvIHNjcmlwdHMgPSBjbUV4cGFuZGVkTGlzdChwb3N0QnVpbGRTY3JpcHRzLCBmYWxzZSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzY3JpcHQgOiBzY3JpcHRzKSB7CisgICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICJFeGVjdXRpbmcgcG9zdC1idWlsZCBzY3JpcHQ6ICIgPDwgc2NyaXB0IDw8IHN0ZDo6ZW5kbCk7CisKKyAgICAgIGlmICghdGhpcy0+TWFrZWZpbGVNYXAtPlJlYWRMaXN0RmlsZShzY3JpcHQpKSB7CisgICAgICAgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICJUaGUgcG9zdC1idWlsZCBzY3JpcHQgbm90IGZvdW5kOiAiIDw8IHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQogCiAgIC8qIFByZXBhcmUgY2hlY2tzdW0gYWxnb3JpdGhtKi8KICAgY29uc3QgY2hhciogYWxnbyA9IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfUEFDS0FHRV9DSEVDS1NVTSIpOwpAQCAtMTE3Nyw3ICsxMjE1LDcgQEAKIGJvb2wgY21DUGFja0dlbmVyYXRvcjo6SXNTZXRUb09mZihjb25zdCBzdGQ6OnN0cmluZyYgb3ApIGNvbnN0CiB7CiAgIGNvbnN0IGNoYXIqIHJldCA9IHRoaXMtPk1ha2VmaWxlTWFwLT5HZXREZWZpbml0aW9uKG9wKTsKLSAgaWYgKHJldCAmJiAqcmV0KSB7CisgIGlmIChjbU5vbmVtcHR5KHJldCkpIHsKICAgICByZXR1cm4gY21Jc09mZihyZXQpOwogICB9CiAgIHJldHVybiBmYWxzZTsKQEAgLTEyODgsNyArMTMyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb3B5T25seSAvKiA9IGZhbHNlICovKQogewogICByZXR1cm4gdGhpcy0+TWFrZWZpbGVNYXAtPkNvbmZpZ3VyZUZpbGUoaW5OYW1lLCBvdXROYW1lLCBjb3B5T25seSwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSA9PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRydWUpID09IDE7CiB9CiAKIGludCBjbUNQYWNrR2VuZXJhdG9yOjpDbGVhblRlbXBvcmFyeURpcmVjdG9yeSgpCkBAIC0xMzc3LDcgKzE0MTUsOCBAQAogICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CiAgIH0KIAotICAvLyBpZiB1c2VyIHNwZWNpZmllZCBwYWNrYWdpbmcgbWV0aG9kLCBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWNrYWdpbmcgbWV0aG9kCisgIC8vIGlmIHVzZXIgc3BlY2lmaWVkIHBhY2thZ2luZyBtZXRob2QsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBhY2thZ2luZworICAvLyBtZXRob2QKICAgaWYgKG1ldGhvZCAhPSBVTktOT1dOX0NPTVBPTkVOVF9QQUNLQUdFX01FVEhPRCkgewogICAgIGNvbXBvbmVudFBhY2thZ2VNZXRob2QgPSBtZXRob2Q7CiAgIH0KQEAgLTE0NzAsNyArMTUwOSw3IEBACiAgICAgaW5zdGFsbFR5cGUtPk5hbWUgPSBuYW1lOwogCiAgICAgY29uc3QgY2hhciogZGlzcGxheU5hbWUgPSB0aGlzLT5HZXRPcHRpb24obWFjcm9QcmVmaXggKyAiX0RJU1BMQVlfTkFNRSIpOwotICAgIGlmIChkaXNwbGF5TmFtZSAmJiAqZGlzcGxheU5hbWUpIHsKKyAgICBpZiAoY21Ob25lbXB0eShkaXNwbGF5TmFtZSkpIHsKICAgICAgIGluc3RhbGxUeXBlLT5EaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lOwogICAgIH0gZWxzZSB7CiAgICAgICBpbnN0YWxsVHlwZS0+RGlzcGxheU5hbWUgPSBpbnN0YWxsVHlwZS0+TmFtZTsKQEAgLTE0OTIsNyArMTUzMSw3IEBACiAgICAgICAiQ1BBQ0tfQ09NUE9ORU5UXyIgKyBjbXN5czo6U3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShuYW1lKTsKICAgICBjb21wb25lbnQtPk5hbWUgPSBuYW1lOwogICAgIGNvbnN0IGNoYXIqIGRpc3BsYXlOYW1lID0gdGhpcy0+R2V0T3B0aW9uKG1hY3JvUHJlZml4ICsgIl9ESVNQTEFZX05BTUUiKTsKLSAgICBpZiAoZGlzcGxheU5hbWUgJiYgKmRpc3BsYXlOYW1lKSB7CisgICAgaWYgKGNtTm9uZW1wdHkoZGlzcGxheU5hbWUpKSB7CiAgICAgICBjb21wb25lbnQtPkRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7CiAgICAgfSBlbHNlIHsKICAgICAgIGNvbXBvbmVudC0+RGlzcGxheU5hbWUgPSBjb21wb25lbnQtPk5hbWU7CkBAIC0xNTA0LDE3ICsxNTQzLDE3IEBACiAgICAgICBjbUlzT24odGhpcy0+R2V0T3B0aW9uKCJDUEFDS19ET1dOTE9BRF9BTEwiKSk7CiAKICAgICBjb25zdCBjaGFyKiBhcmNoaXZlRmlsZSA9IHRoaXMtPkdldE9wdGlvbihtYWNyb1ByZWZpeCArICJfQVJDSElWRV9GSUxFIik7Ci0gICAgaWYgKGFyY2hpdmVGaWxlICYmICphcmNoaXZlRmlsZSkgeworICAgIGlmIChjbU5vbmVtcHR5KGFyY2hpdmVGaWxlKSkgewogICAgICAgY29tcG9uZW50LT5BcmNoaXZlRmlsZSA9IGFyY2hpdmVGaWxlOwogICAgIH0KIAogICAgIGNvbnN0IGNoYXIqIHBsaXN0ID0gdGhpcy0+R2V0T3B0aW9uKG1hY3JvUHJlZml4ICsgIl9QTElTVCIpOwotICAgIGlmIChwbGlzdCAmJiAqcGxpc3QpIHsKKyAgICBpZiAoY21Ob25lbXB0eShwbGlzdCkpIHsKICAgICAgIGNvbXBvbmVudC0+UGxpc3QgPSBwbGlzdDsKICAgICB9CiAKICAgICBjb25zdCBjaGFyKiBncm91cE5hbWUgPSB0aGlzLT5HZXRPcHRpb24obWFjcm9QcmVmaXggKyAiX0dST1VQIik7Ci0gICAgaWYgKGdyb3VwTmFtZSAmJiAqZ3JvdXBOYW1lKSB7CisgICAgaWYgKGNtTm9uZW1wdHkoZ3JvdXBOYW1lKSkgewogICAgICAgY29tcG9uZW50LT5Hcm91cCA9IEdldENvbXBvbmVudEdyb3VwKHByb2plY3ROYW1lLCBncm91cE5hbWUpOwogICAgICAgY29tcG9uZW50LT5Hcm91cC0+Q29tcG9uZW50cy5wdXNoX2JhY2soY29tcG9uZW50KTsKICAgICB9IGVsc2UgewpAQCAtMTUyMiwxMyArMTU2MSwxMyBAQAogICAgIH0KIAogICAgIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uID0gdGhpcy0+R2V0T3B0aW9uKG1hY3JvUHJlZml4ICsgIl9ERVNDUklQVElPTiIpOwotICAgIGlmIChkZXNjcmlwdGlvbiAmJiAqZGVzY3JpcHRpb24pIHsKKyAgICBpZiAoY21Ob25lbXB0eShkZXNjcmlwdGlvbikpIHsKICAgICAgIGNvbXBvbmVudC0+RGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKICAgICB9CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIGluc3RhbGxhdGlvbiB0eXBlcy4KICAgICBjb25zdCBjaGFyKiBpbnN0YWxsVHlwZXMgPSB0aGlzLT5HZXRPcHRpb24obWFjcm9QcmVmaXggKyAiX0lOU1RBTExfVFlQRVMiKTsKLSAgICBpZiAoaW5zdGFsbFR5cGVzICYmICppbnN0YWxsVHlwZXMpIHsKKyAgICBpZiAoY21Ob25lbXB0eShpbnN0YWxsVHlwZXMpKSB7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5zdGFsbFR5cGVzVmVjdG9yID0KICAgICAgICAgY21FeHBhbmRlZExpc3QoaW5zdGFsbFR5cGVzKTsKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGluc3RhbGxUeXBlIDogaW5zdGFsbFR5cGVzVmVjdG9yKSB7CkBAIC0xNTM5LDcgKzE1NzgsNyBAQAogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjb21wb25lbnQgZGVwZW5kZW5jaWVzLgogICAgIGNvbnN0IGNoYXIqIGRlcGVuZHMgPSB0aGlzLT5HZXRPcHRpb24obWFjcm9QcmVmaXggKyAiX0RFUEVORFMiKTsKLSAgICBpZiAoZGVwZW5kcyAmJiAqZGVwZW5kcykgeworICAgIGlmIChjbU5vbmVtcHR5KGRlcGVuZHMpKSB7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwZW5kc1ZlY3RvciA9IGNtRXhwYW5kZWRMaXN0KGRlcGVuZHMpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZGVwZW5kIDogZGVwZW5kc1ZlY3RvcikgewogICAgICAgICBjbUNQYWNrQ29tcG9uZW50KiBjaGlsZCA9IEdldENvbXBvbmVudChwcm9qZWN0TmFtZSwgZGVwZW5kKTsKQEAgLTE1NjMsMjEgKzE2MDIsMjEgQEAKICAgICAvLyBEZWZpbmUgdGhlIGdyb3VwCiAgICAgZ3JvdXAtPk5hbWUgPSBuYW1lOwogICAgIGNvbnN0IGNoYXIqIGRpc3BsYXlOYW1lID0gdGhpcy0+R2V0T3B0aW9uKG1hY3JvUHJlZml4ICsgIl9ESVNQTEFZX05BTUUiKTsKLSAgICBpZiAoZGlzcGxheU5hbWUgJiYgKmRpc3BsYXlOYW1lKSB7CisgICAgaWYgKGNtTm9uZW1wdHkoZGlzcGxheU5hbWUpKSB7CiAgICAgICBncm91cC0+RGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTsKICAgICB9IGVsc2UgewogICAgICAgZ3JvdXAtPkRpc3BsYXlOYW1lID0gZ3JvdXAtPk5hbWU7CiAgICAgfQogCiAgICAgY29uc3QgY2hhciogZGVzY3JpcHRpb24gPSB0aGlzLT5HZXRPcHRpb24obWFjcm9QcmVmaXggKyAiX0RFU0NSSVBUSU9OIik7Ci0gICAgaWYgKGRlc2NyaXB0aW9uICYmICpkZXNjcmlwdGlvbikgeworICAgIGlmIChjbU5vbmVtcHR5KGRlc2NyaXB0aW9uKSkgewogICAgICAgZ3JvdXAtPkRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CiAgICAgfQogICAgIGdyb3VwLT5Jc0JvbGQgPSB0aGlzLT5Jc09uKG1hY3JvUHJlZml4ICsgIl9CT0xEX1RJVExFIik7CiAgICAgZ3JvdXAtPklzRXhwYW5kZWRCeURlZmF1bHQgPSB0aGlzLT5Jc09uKG1hY3JvUHJlZml4ICsgIl9FWFBBTkRFRCIpOwogICAgIGNvbnN0IGNoYXIqIHBhcmVudEdyb3VwTmFtZSA9CiAgICAgICB0aGlzLT5HZXRPcHRpb24obWFjcm9QcmVmaXggKyAiX1BBUkVOVF9HUk9VUCIpOwotICAgIGlmIChwYXJlbnRHcm91cE5hbWUgJiYgKnBhcmVudEdyb3VwTmFtZSkgeworICAgIGlmIChjbU5vbmVtcHR5KHBhcmVudEdyb3VwTmFtZSkpIHsKICAgICAgIGdyb3VwLT5QYXJlbnRHcm91cCA9IEdldENvbXBvbmVudEdyb3VwKHByb2plY3ROYW1lLCBwYXJlbnRHcm91cE5hbWUpOwogICAgICAgZ3JvdXAtPlBhcmVudEdyb3VwLT5TdWJncm91cHMucHVzaF9iYWNrKGdyb3VwKTsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tMb2cuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tMb2cuY3h4CmluZGV4IGNhNjc1ZmQuLjQ5ZTQxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrTG9nLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja0xvZy5jeHgKQEAgLTQsNTQgKzQsMzggQEAKIAogI2luY2x1ZGUgPGlvc3RyZWFtPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCiBjbUNQYWNrTG9nOjpjbUNQYWNrTG9nKCkKIHsKLSAgdGhpcy0+VmVyYm9zZSA9IGZhbHNlOwotICB0aGlzLT5EZWJ1ZyA9IGZhbHNlOwotICB0aGlzLT5RdWlldCA9IGZhbHNlOwotICB0aGlzLT5OZXdMaW5lID0gdHJ1ZTsKLQotICB0aGlzLT5MYXN0VGFnID0gY21DUGFja0xvZzo6Tk9UQUc7CiAgIHRoaXMtPkRlZmF1bHRPdXRwdXQgPSAmc3RkOjpjb3V0OwogICB0aGlzLT5EZWZhdWx0RXJyb3IgPSAmc3RkOjpjZXJyOwotCi0gIHRoaXMtPkxvZ091dHB1dCA9IG51bGxwdHI7Ci0gIHRoaXMtPkxvZ091dHB1dENsZWFudXAgPSBmYWxzZTsKIH0KIAotY21DUGFja0xvZzo6fmNtQ1BhY2tMb2coKQotewotICB0aGlzLT5TZXRMb2dPdXRwdXRTdHJlYW0obnVsbHB0cik7Ci19CitjbUNQYWNrTG9nOjp+Y21DUGFja0xvZygpID0gZGVmYXVsdDsKIAogdm9pZCBjbUNQYWNrTG9nOjpTZXRMb2dPdXRwdXRTdHJlYW0oc3RkOjpvc3RyZWFtKiBvcykKIHsKLSAgaWYgKHRoaXMtPkxvZ091dHB1dENsZWFudXAgJiYgdGhpcy0+TG9nT3V0cHV0KSB7Ci0gICAgZGVsZXRlIHRoaXMtPkxvZ091dHB1dDsKLSAgfQotICB0aGlzLT5Mb2dPdXRwdXRDbGVhbnVwID0gZmFsc2U7CisgIHRoaXMtPkxvZ091dHB1dFN0cmVhbS5yZXNldCgpOwogICB0aGlzLT5Mb2dPdXRwdXQgPSBvczsKIH0KIAogYm9vbCBjbUNQYWNrTG9nOjpTZXRMb2dPdXRwdXRGaWxlKGNvbnN0IGNoYXIqIGZuYW1lKQogewotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIGNnID0gbnVsbHB0cjsKKyAgdGhpcy0+TG9nT3V0cHV0U3RyZWFtLnJlc2V0KCk7CiAgIGlmIChmbmFtZSkgewotICAgIGNnID0gbmV3IGNtR2VuZXJhdGVkRmlsZVN0cmVhbShmbmFtZSk7CisgICAgdGhpcy0+TG9nT3V0cHV0U3RyZWFtID0gY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4oZm5hbWUpOwogICB9Ci0gIGlmIChjZyAmJiAhKmNnKSB7Ci0gICAgZGVsZXRlIGNnOwotICAgIGNnID0gbnVsbHB0cjsKKyAgaWYgKHRoaXMtPkxvZ091dHB1dFN0cmVhbSAmJiAhKnRoaXMtPkxvZ091dHB1dFN0cmVhbSkgeworICAgIHRoaXMtPkxvZ091dHB1dFN0cmVhbS5yZXNldCgpOwogICB9Ci0gIHRoaXMtPlNldExvZ091dHB1dFN0cmVhbShjZyk7Ci0gIGlmICghY2cpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgdGhpcy0+TG9nT3V0cHV0Q2xlYW51cCA9IHRydWU7Ci0gIHJldHVybiB0cnVlOworCisgIHRoaXMtPkxvZ091dHB1dCA9IHRoaXMtPkxvZ091dHB1dFN0cmVhbS5nZXQoKTsKKworICByZXR1cm4gdGhpcy0+TG9nT3V0cHV0ICE9IG51bGxwdHI7CiB9CiAKIHZvaWQgY21DUGFja0xvZzo6TG9nKGludCB0YWcsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBtc2csCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja0xvZy5oIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tMb2cuaAppbmRleCAxY2IxNjQzLi42OGZmY2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja0xvZy5oCisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTG9nLmgKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPG9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgogCkBAIC05NywxMyArOTgsMTMgQEAKICAgdm9pZCBTZXRFcnJvclByZWZpeChzdGQ6OnN0cmluZyBjb25zdCYgcGZ4KSB7IHRoaXMtPkVycm9yUHJlZml4ID0gcGZ4OyB9CiAKIHByaXZhdGU6Ci0gIGJvb2wgVmVyYm9zZTsKLSAgYm9vbCBEZWJ1ZzsKLSAgYm9vbCBRdWlldDsKKyAgYm9vbCBWZXJib3NlID0gZmFsc2U7CisgIGJvb2wgRGVidWcgPSBmYWxzZTsKKyAgYm9vbCBRdWlldCA9IGZhbHNlOwogCi0gIGJvb2wgTmV3TGluZTsKKyAgYm9vbCBOZXdMaW5lID0gdHJ1ZTsKIAotICBpbnQgTGFzdFRhZzsKKyAgaW50IExhc3RUYWcgPSBjbUNQYWNrTG9nOjpOT1RBRzsKIAogICBzdGQ6OnN0cmluZyBQcmVmaXg7CiAgIHN0ZDo6c3RyaW5nIE91dHB1dFByZWZpeDsKQEAgLTExMiwxMyArMTEzLDExIEBACiAgIHN0ZDo6c3RyaW5nIFdhcm5pbmdQcmVmaXg7CiAgIHN0ZDo6c3RyaW5nIEVycm9yUHJlZml4OwogCi0gIHN0ZDo6b3N0cmVhbSogRGVmYXVsdE91dHB1dDsKLSAgc3RkOjpvc3RyZWFtKiBEZWZhdWx0RXJyb3I7CisgIHN0ZDo6b3N0cmVhbSogRGVmYXVsdE91dHB1dCA9IG51bGxwdHI7CisgIHN0ZDo6b3N0cmVhbSogRGVmYXVsdEVycm9yID0gbnVsbHB0cjsKIAotICBzdGQ6OnN0cmluZyBMb2dPdXRwdXRGaWxlTmFtZTsKLSAgc3RkOjpvc3RyZWFtKiBMb2dPdXRwdXQ7Ci0gIC8vIERvIHdlIG5lZWQgdG8gY2xlYW51cCBsb2cgb3V0cHV0IHN0cmVhbQotICBib29sIExvZ091dHB1dENsZWFudXA7CisgIHN0ZDo6b3N0cmVhbSogTG9nT3V0cHV0ID0gbnVsbHB0cjsKKyAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6b3N0cmVhbT4gTG9nT3V0cHV0U3RyZWFtOwogfTsKIAogY2xhc3MgY21DUGFja0xvZ1dyaXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tOU0lTR2VuZXJhdG9yLmN4eAppbmRleCA5YmY3MmRmLi4yMTA5YjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrTlNJU0dlbmVyYXRvci5jeHgKQEAgLTksMTAgKzksMTEgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9EaXJlY3RvcnkuaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1BhY2tDb21wb25lbnRHcm91cC5oIgogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUNQYWNrTG9nLmgiCkBAIC02OCw3ICs2OSw3IEBACiAKICAgICAgIC8vIFVzZSB0aGUgY3VzdG9tIGNvbXBvbmVudCBpbnN0YWxsIGRpcmVjdG9yeSBpZiB3ZSBoYXZlIG9uZQogICAgICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjb21wb25lbnROYW1lID0gZmlsZU4uc3Vic3RyKDAsIHBvcyk7CisgICAgICAgIGF1dG8gY29tcG9uZW50TmFtZSA9IGNtOjpzdHJpbmdfdmlldyhmaWxlTikuc3Vic3RyKDAsIHBvcyk7CiAgICAgICAgIG91dHB1dERpciA9IEN1c3RvbUNvbXBvbmVudEluc3RhbGxEaXJlY3RvcnkoY29tcG9uZW50TmFtZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBvdXRwdXREaXIgPSBDdXN0b21Db21wb25lbnRJbnN0YWxsRGlyZWN0b3J5KGZpbGVOKTsKQEAgLTEwMyw3ICsxMDQsNyBAQAogICAgICAgICBjb21wb25lbnROYW1lID0gZmlsZU4uc3Vic3RyKDAsIHNsYXNoKTsKIAogICAgICAgICAvLyBTdHJpcCBvZmYgdGhlIGNvbXBvbmVudCBwYXJ0IG9mIHRoZSBwYXRoLgotICAgICAgICBmaWxlTiA9IGZpbGVOLnN1YnN0cihzbGFzaCArIDEpOworICAgICAgICBmaWxlTi5lcmFzZSgwLCBzbGFzaCArIDEpOwogICAgICAgfQogICAgIH0KICAgICBzdGQ6OnJlcGxhY2UoZmlsZU4uYmVnaW4oKSwgZmlsZU4uZW5kKCksICcvJywgJ1xcJyk7CkBAIC0xMjgsMjIgKzEyOSwyNiBAQAogICAgICAgdGhpcy0+SXNTZXQoIkNQQUNLX05TSVNfTVVJX1VOSUlDT04iKSkgewogICAgIHN0ZDo6c3RyaW5nIGluc3RhbGxlckljb25Db2RlOwogICAgIGlmICh0aGlzLT5Jc1NldCgiQ1BBQ0tfTlNJU19NVUlfSUNPTiIpKSB7Ci0gICAgICBpbnN0YWxsZXJJY29uQ29kZSArPSAiIWRlZmluZSBNVUlfSUNPTiBcIiI7Ci0gICAgICBpbnN0YWxsZXJJY29uQ29kZSArPSB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX05TSVNfTVVJX0lDT04iKTsKLSAgICAgIGluc3RhbGxlckljb25Db2RlICs9ICJcIlxuIjsKKyAgICAgIGluc3RhbGxlckljb25Db2RlICs9IGNtU3RyQ2F0KAorICAgICAgICAiIWRlZmluZSBNVUlfSUNPTiBcIiIsIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfTlNJU19NVUlfSUNPTiIpLCAiXCJcbiIpOwogICAgIH0KICAgICBpZiAodGhpcy0+SXNTZXQoIkNQQUNLX05TSVNfTVVJX1VOSUlDT04iKSkgewotICAgICAgaW5zdGFsbGVySWNvbkNvZGUgKz0gIiFkZWZpbmUgTVVJX1VOSUNPTiBcIiI7Ci0gICAgICBpbnN0YWxsZXJJY29uQ29kZSArPSB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX05TSVNfTVVJX1VOSUlDT04iKTsKLSAgICAgIGluc3RhbGxlckljb25Db2RlICs9ICJcIlxuIjsKKyAgICAgIGluc3RhbGxlckljb25Db2RlICs9CisgICAgICAgIGNtU3RyQ2F0KCIhZGVmaW5lIE1VSV9VTklDT04gXCIiLAorICAgICAgICAgICAgICAgICB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX05TSVNfTVVJX1VOSUlDT04iKSwgIlwiXG4iKTsKICAgICB9CiAgICAgdGhpcy0+U2V0T3B0aW9uSWZOb3RTZXQoIkNQQUNLX05TSVNfSU5TVEFMTEVSX01VSV9JQ09OX0NPREUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlckljb25Db2RlLmNfc3RyKCkpOwogICB9Ci0gIGlmICh0aGlzLT5Jc1NldCgiQ1BBQ0tfUEFDS0FHRV9JQ09OIikpIHsKLSAgICBzdGQ6OnN0cmluZyBpbnN0YWxsZXJJY29uQ29kZSA9Ci0gICAgICBjbVN0ckNhdCgiIWRlZmluZSBNVUlfSEVBREVSSU1BR0VfQklUTUFQIFwiIiwKLSAgICAgICAgICAgICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfUEFDS0FHRV9JQ09OIiksICJcIlxuIik7CisgIHN0ZDo6c3RyaW5nIGluc3RhbGxlckhlYWRlckltYWdlOworICBpZiAodGhpcy0+SXNTZXQoIkNQQUNLX05TSVNfTVVJX0hFQURFUklNQUdFIikpIHsKKyAgICBpbnN0YWxsZXJIZWFkZXJJbWFnZSA9IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfTlNJU19NVUlfSEVBREVSSU1BR0UiKTsKKyAgfSBlbHNlIGlmICh0aGlzLT5Jc1NldCgiQ1BBQ0tfUEFDS0FHRV9JQ09OIikpIHsKKyAgICBpbnN0YWxsZXJIZWFkZXJJbWFnZSA9IHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfUEFDS0FHRV9JQ09OIik7CisgIH0KKyAgaWYgKCFpbnN0YWxsZXJIZWFkZXJJbWFnZS5lbXB0eSgpKSB7CisgICAgc3RkOjpzdHJpbmcgaW5zdGFsbGVySWNvbkNvZGUgPSBjbVN0ckNhdCgKKyAgICAgICIhZGVmaW5lIE1VSV9IRUFERVJJTUFHRV9CSVRNQVAgXCIiLCBpbnN0YWxsZXJIZWFkZXJJbWFnZSwgIlwiXG4iKTsKICAgICB0aGlzLT5TZXRPcHRpb25JZk5vdFNldCgiQ1BBQ0tfTlNJU19JTlNUQUxMRVJfSUNPTl9DT0RFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZXJJY29uQ29kZS5jX3N0cigpKTsKICAgfQpAQCAtMTczLDYgKzE3OCwzNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlclJ1bkNvZGUuY19zdHIoKSk7CiAgIH0KIAorICBpZiAodGhpcy0+SXNTZXQoIkNQQUNLX05TSVNfV0VMQ09NRV9USVRMRSIpKSB7CisgICAgc3RkOjpzdHJpbmcgd2VsY29tZVRpdGxlQ29kZSA9CisgICAgICBjbVN0ckNhdCgiIWRlZmluZSBNVUlfV0VMQ09NRVBBR0VfVElUTEUgXCIiLAorICAgICAgICAgICAgICAgdGhpcy0+R2V0T3B0aW9uKCJDUEFDS19OU0lTX1dFTENPTUVfVElUTEUiKSwgIlwiIik7CisgICAgdGhpcy0+U2V0T3B0aW9uSWZOb3RTZXQoIkNQQUNLX05TSVNfSU5TVEFMTEVSX1dFTENPTUVfVElUTEVfQ09ERSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VsY29tZVRpdGxlQ29kZS5jX3N0cigpKTsKKyAgfQorCisgIGlmICh0aGlzLT5Jc1NldCgiQ1BBQ0tfTlNJU19XRUxDT01FX1RJVExFXzNMSU5FUyIpKSB7CisgICAgdGhpcy0+U2V0T3B0aW9uSWZOb3RTZXQoIkNQQUNLX05TSVNfSU5TVEFMTEVSX1dFTENPTUVfVElUTEVfM0xJTkVTX0NPREUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhZGVmaW5lIE1VSV9XRUxDT01FUEFHRV9USVRMRV8zTElORVMiKTsKKyAgfQorCisgIGlmICh0aGlzLT5Jc1NldCgiQ1BBQ0tfTlNJU19GSU5JU0hfVElUTEUiKSkgeworICAgIHN0ZDo6c3RyaW5nIGZpbmlzaFRpdGxlQ29kZSA9CisgICAgICBjbVN0ckNhdCgiIWRlZmluZSBNVUlfRklOSVNIUEFHRV9USVRMRSBcIiIsCisgICAgICAgICAgICAgICB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX05TSVNfRklOSVNIX1RJVExFIiksICJcIiIpOworICAgIHRoaXMtPlNldE9wdGlvbklmTm90U2V0KCJDUEFDS19OU0lTX0lOU1RBTExFUl9GSU5JU0hfVElUTEVfQ09ERSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoVGl0bGVDb2RlLmNfc3RyKCkpOworICB9CisKKyAgaWYgKHRoaXMtPklzU2V0KCJDUEFDS19OU0lTX0ZJTklTSF9USVRMRV8zTElORVMiKSkgeworICAgIHRoaXMtPlNldE9wdGlvbklmTm90U2V0KCJDUEFDS19OU0lTX0lOU1RBTExFUl9GSU5JU0hfVElUTEVfM0xJTkVTX0NPREUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIhZGVmaW5lIE1VSV9GSU5JU0hQQUdFX1RJVExFXzNMSU5FUyIpOworICB9CisKKyAgaWYgKHRoaXMtPklzU2V0KCJDUEFDS19OU0lTX01BTklGRVNUX0RQSV9BV0FSRSIpKSB7CisgICAgdGhpcy0+U2V0T3B0aW9uSWZOb3RTZXQoIkNQQUNLX05TSVNfTUFOSUZFU1RfRFBJX0FXQVJFX0NPREUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYW5pZmVzdERQSUF3YXJlIHRydWUiKTsKKyAgfQorCiAgIC8vIFNldHVwIGFsbCBvZiB0aGUgY29tcG9uZW50IHNlY3Rpb25zCiAgIGlmICh0aGlzLT5Db21wb25lbnRzLmVtcHR5KCkpIHsKICAgICB0aGlzLT5TZXRPcHRpb25JZk5vdFNldCgiQ1BBQ0tfTlNJU19JTlNUQUxMQVRJT05fVFlQRVMiLCAiIik7CkBAIC00MjMsMTIgKzQ1OSwxMiBAQAogICB9CiAgIGlmICh2ZXJzaW9uUmV4LmZpbmQob3V0cHV0KSkgewogICAgIGRvdWJsZSBuc2lzVmVyc2lvbiA9IGF0b2YodmVyc2lvblJleC5tYXRjaCgxKS5jX3N0cigpKTsKLSAgICBkb3VibGUgbWluTlNJU1ZlcnNpb24gPSAyLjA5OworICAgIGRvdWJsZSBtaW5OU0lTVmVyc2lvbiA9IDMuMDsKICAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19ERUJVRywKICAgICAgICAgICAgICAgICAgICJOU0lTIFZlcnNpb246ICIgPDwgbnNpc1ZlcnNpb24gPDwgc3RkOjplbmRsKTsKICAgICBpZiAobnNpc1ZlcnNpb24gPCBtaW5OU0lTVmVyc2lvbikgewogICAgICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICJDUGFjayByZXF1aXJlcyBOU0lTIFZlcnNpb24gMi4wOSBvciBncmVhdGVyLiAgIgorICAgICAgICAgICAgICAgICAgICAiQ1BhY2sgcmVxdWlyZXMgTlNJUyBWZXJzaW9uIDMuMCBvciBncmVhdGVyLiAgIgogICAgICAgICAgICAgICAgICAgICAiTlNJUyBmb3VuZCBvbiB0aGUgc3lzdGVtIHdhczogIgogICAgICAgICAgICAgICAgICAgICAgIDw8IG5zaXNWZXJzaW9uIDw8IHN0ZDo6ZW5kbCk7CiAgICAgICByZXR1cm4gMDsKQEAgLTQ5NCw3ICs1MzAsNyBAQAogICAgICAgICAgICAgICAgIDw8ICIubG5rXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICAgIC8vIHNlZSBpZiBDUEFDS19DUkVBVEVfREVTS1RPUF9MSU5LX0V4ZU5hbWUgaXMgb24KICAgICAgIC8vIGlmIHNvIGFkZCBhIGRlc2t0b3AgbGluawotICAgICAgaWYgKGNtQ29udGFpbnMoY3BhY2tQYWNrYWdlRGVza3RvcExpbmtzVmVjdG9yLCBleGVjTmFtZSkpIHsKKyAgICAgIGlmIChjbTo6Y29udGFpbnMoY3BhY2tQYWNrYWdlRGVza3RvcExpbmtzVmVjdG9yLCBleGVjTmFtZSkpIHsKICAgICAgICAgc3RyIDw8ICIgIFN0ckNtcCBcIiRJTlNUQUxMX0RFU0tUT1BcIiBcIjFcIiAwICsyXG4iOwogICAgICAgICBzdHIgPDwgIiAgICBDcmVhdGVTaG9ydEN1dCBcIiRERVNLVE9QXFwiIDw8IGxpbmtOYW1lCiAgICAgICAgICAgICA8PCBSIigubG5rIiAiJElOU1RESVJcKSIgPDwgY3BhY2tOc2lzRXhlY3V0YWJsZXNEaXJlY3RvcnkgPDwgIlxcIgpAQCAtNjQyLDcgKzY3OCw3IEBACiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgY29tcG9uZW50T3V0cHV0RGlyID0KICAgICBDdXN0b21Db21wb25lbnRJbnN0YWxsRGlyZWN0b3J5KGNvbXBvbmVudC0+TmFtZSk7Ci0gIGNvbXBvbmVudENvZGUgKz0gIiAgU2V0T3V0UGF0aCBcIiIgKyBjb21wb25lbnRPdXRwdXREaXIgKyAiXCJcbiI7CisgIGNvbXBvbmVudENvZGUgKz0gY21TdHJDYXQoIiAgU2V0T3V0UGF0aCBcIiIsIGNvbXBvbmVudE91dHB1dERpciwgIlwiXG4iKTsKIAogICAvLyBDcmVhdGUgdGhlIGFjdHVhbCBpbnN0YWxsYXRpb24gY29tbWFuZHMKICAgaWYgKGNvbXBvbmVudC0+SXNEb3dubG9hZGVkKSB7CkBAIC02NjAsNyArNjk2LDcgQEAKICAgICBjb25zdCBjaGFyKiB1c2VyVXBsb2FkRGlyZWN0b3J5ID0KICAgICAgIHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfVVBMT0FEX0RJUkVDVE9SWSIpOwogICAgIHN0ZDo6c3RyaW5nIHVwbG9hZERpcmVjdG9yeTsKLSAgICBpZiAodXNlclVwbG9hZERpcmVjdG9yeSAmJiAqdXNlclVwbG9hZERpcmVjdG9yeSkgeworICAgIGlmIChjbU5vbmVtcHR5KHVzZXJVcGxvYWREaXJlY3RvcnkpKSB7CiAgICAgICB1cGxvYWREaXJlY3RvcnkgPSB1c2VyVXBsb2FkRGlyZWN0b3J5OwogICAgIH0gZWxzZSB7CiAgICAgICB1cGxvYWREaXJlY3RvcnkgPQpAQCAtODkxLDEyICs5MjcsMTEgQEAKIH0KIAogc3RkOjpzdHJpbmcgY21DUGFja05TSVNHZW5lcmF0b3I6OkN1c3RvbUNvbXBvbmVudEluc3RhbGxEaXJlY3RvcnkoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21wb25lbnROYW1lKQorICBjbTo6c3RyaW5nX3ZpZXcgY29tcG9uZW50TmFtZSkKIHsKLSAgY29uc3QgY2hhciogb3V0cHV0RGlyID0KLSAgICB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX05TSVNfIiArIGNvbXBvbmVudE5hbWUgKyAiX0lOU1RBTExfRElSRUNUT1JZIik7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGNvbXBvbmVudE91dHB1dERpciA9IChvdXRwdXREaXIgPyBvdXRwdXREaXIgOiAiJElOU1RESVIiKTsKLSAgcmV0dXJuIGNvbXBvbmVudE91dHB1dERpcjsKKyAgY29uc3QgY2hhciogb3V0cHV0RGlyID0gdGhpcy0+R2V0T3B0aW9uKAorICAgIGNtU3RyQ2F0KCJDUEFDS19OU0lTXyIsIGNvbXBvbmVudE5hbWUsICJfSU5TVEFMTF9ESVJFQ1RPUlkiKSk7CisgIHJldHVybiBvdXRwdXREaXIgPyBvdXRwdXREaXIgOiAiJElOU1RESVIiOwogfQogCiBzdGQ6OnN0cmluZyBjbUNQYWNrTlNJU0dlbmVyYXRvcjo6VHJhbnNsYXRlTmV3bGluZXMoc3RkOjpzdHJpbmcgc3RyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tOU0lTR2VuZXJhdG9yLmggYi9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuaAppbmRleCAwYWYzN2FmLi44OGNiYTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja05TSVNHZW5lcmF0b3IuaApAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKwogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKIAogY2xhc3MgY21DUGFja0NvbXBvbmVudDsKQEAgLTc1LDggKzc3LDcgQEAKIAogICAvLy8gUmV0dXJucyB0aGUgY3VzdG9tIGluc3RhbGwgZGlyZWN0b3J5IGlmIGF2YWlsYWJsZSBmb3IgdGhlIHNwZWNpZmllZAogICAvLy8gY29tcG9uZW50LCBvdGhlcndpc2UgJElOU1RESVIgaXMgcmV0dXJuZWQuCi0gIHN0ZDo6c3RyaW5nIEN1c3RvbUNvbXBvbmVudEluc3RhbGxEaXJlY3RvcnkoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbXBvbmVudE5hbWUpOworICBzdGQ6OnN0cmluZyBDdXN0b21Db21wb25lbnRJbnN0YWxsRGlyZWN0b3J5KGNtOjpzdHJpbmdfdmlldyBjb21wb25lbnROYW1lKTsKIAogICAvLy8gVHJhbnNsYXRpb25zIGFueSBuZXdsaW5lcyBmb3VuZCBpbiB0aGUgc3RyaW5nIGludG8gXFxyXFxuLCBzbyB0aGF0IHRoZQogICAvLy8gcmVzdWx0aW5nIHN0cmluZyBjYW4gYmUgdXNlZCB3aXRoaW4gTlNJUy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9DUGFjay9jbUNQYWNrT1NYWDExR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9DUGFjay9jbUNQYWNrT1NYWDExR2VuZXJhdG9yLmN4eAppbmRleCA5NTFjNjVmLi41ZGU0YTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja09TWFgxMUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tPU1hYMTFHZW5lcmF0b3IuY3h4CkBAIC0xNzgsNiArMTc4LDkgQEAKIAogaW50IGNtQ1BhY2tPU1hYMTFHZW5lcmF0b3I6OkluaXRpYWxpemVJbnRlcm5hbCgpCiB7CisgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgIlRoZSBPU1hYMTEgZ2VuZXJhdG9yIGlzIGRlcHJlY2F0ZWQgIgorICAgICAgICAgICAgICAgICJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uXG4iKTsKICAgY21DUGFja0xvZ2dlcihjbUNQYWNrTG9nOjpMT0dfREVCVUcsCiAgICAgICAgICAgICAgICAgImNtQ1BhY2tPU1hYMTFHZW5lcmF0b3I6OkluaXRpYWxpemUoKSIgPDwgc3RkOjplbmRsKTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja1BLR0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svY21DUGFja1BLR0dlbmVyYXRvci5jeHgKaW5kZXggZGFlNWVjOS4uYWMzZDY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NtQ1BhY2tQS0dHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrUEtHR2VuZXJhdG9yLmN4eApAQCAtNDYsNyArNDYsNjYgQEAKICAgcmV0dXJuIGNvbXBvbmVudC5BcmNoaXZlRmlsZSArICIucGtnIjsKIH0KIAotdm9pZCBjbUNQYWNrUEtHR2VuZXJhdG9yOjpXcml0ZURpc3RyaWJ1dGlvbkZpbGUoY29uc3QgY2hhciogbWV0YXBhY2thZ2VGaWxlKQordm9pZCBjbUNQYWNrUEtHR2VuZXJhdG9yOjpDcmVhdGVCYWNrZ3JvdW5kKGNvbnN0IGNoYXIqIHRoZW1lTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXRhcGFja2FnZUZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY206OnN0cmluZ192aWV3IGdlbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21YTUxXcml0ZXImIHhvdXQpCit7CisgIHN0ZDo6c3RyaW5nIHBhcmFtU3VmZml4ID0KKyAgICAodGhlbWVOYW1lID09IG51bGxwdHIpID8gIiIgOiBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UodGhlbWVOYW1lKTsKKyAgc3RkOjpzdHJpbmcgb3B0ID0gKHRoZW1lTmFtZSA9PSBudWxscHRyKQorICAgID8gY21TdHJDYXQoIkNQQUNLXyIsIGdlbk5hbWUsICJfQkFDS0dST1VORCIpCisgICAgOiBjbVN0ckNhdCgiQ1BBQ0tfIiwgZ2VuTmFtZSwgIl9CQUNLR1JPVU5EXyIsIHBhcmFtU3VmZml4KTsKKyAgY29uc3QgY2hhciogYmdGaWxlTmFtZSA9IHRoaXMtPkdldE9wdGlvbihvcHQpOworICBpZiAoYmdGaWxlTmFtZSA9PSBudWxscHRyKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgc3RkOjpzdHJpbmcgYmdGaWxlUGF0aCA9IGNtU3RyQ2F0KG1ldGFwYWNrYWdlRmlsZSwgIi9Db250ZW50cy8iLCBiZ0ZpbGVOYW1lKTsKKworICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoYmdGaWxlUGF0aCkpIHsKKyAgICBjbUNQYWNrTG9nZ2VyKGNtQ1BhY2tMb2c6OkxPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICJCYWNrZ3JvdW5kIGltYWdlIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHJlc291cmNlIGRpcmVjdG9yeTogIgorICAgICAgICAgICAgICAgICAgICA8PCBiZ0ZpbGVOYW1lIDw8IHN0ZDo6ZW5kbCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKHRoZW1lTmFtZSA9PSBudWxscHRyKSB7CisgICAgeG91dC5TdGFydEVsZW1lbnQoImJhY2tncm91bmQiKTsKKyAgfSBlbHNlIHsKKyAgICB4b3V0LlN0YXJ0RWxlbWVudChjbVN0ckNhdCgiYmFja2dyb3VuZC0iLCB0aGVtZU5hbWUpKTsKKyAgfQorCisgIHhvdXQuQXR0cmlidXRlKCJmaWxlIiwgYmdGaWxlTmFtZSk7CisKKyAgY29uc3QgY2hhciogcGFyYW0gPSB0aGlzLT5HZXRPcHRpb24oY21TdHJDYXQob3B0LCAiX0FMSUdOTUVOVCIpKTsKKyAgaWYgKHBhcmFtICE9IG51bGxwdHIpIHsKKyAgICB4b3V0LkF0dHJpYnV0ZSgiYWxpZ25tZW50IiwgcGFyYW0pOworICB9CisKKyAgcGFyYW0gPSB0aGlzLT5HZXRPcHRpb24oY21TdHJDYXQob3B0LCAiX1NDQUxJTkciKSk7CisgIGlmIChwYXJhbSAhPSBudWxscHRyKSB7CisgICAgeG91dC5BdHRyaWJ1dGUoInNjYWxpbmciLCBwYXJhbSk7CisgIH0KKworICAvLyBBcHBsZSBkb2NzIHNheSB0aGF0IHlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIG1pbWUtdHlwZSBvciB1dGkKKyAgLy8gYXR0cmlidXRlIGZvciB0aGUgYmFja2dyb3VuZCwgYnV0IEkndmUgc2VlbiBleGFtcGxlcyB0aGF0CisgIC8vIGRvZXNuJ3QgaGF2ZSB0aGVtLCBzbyBkb24ndCBtYWtlIHRoZW0gbWFuZGF0b3J5LgorICBwYXJhbSA9IHRoaXMtPkdldE9wdGlvbihjbVN0ckNhdChvcHQsICJfTUlNRV9UWVBFIikpOworICBpZiAocGFyYW0gIT0gbnVsbHB0cikgeworICAgIHhvdXQuQXR0cmlidXRlKCJtaW1lLXR5cGUiLCBwYXJhbSk7CisgIH0KKworICBwYXJhbSA9IHRoaXMtPkdldE9wdGlvbihjbVN0ckNhdChvcHQsICJfVVRJIikpOworICBpZiAocGFyYW0gIT0gbnVsbHB0cikgeworICAgIHhvdXQuQXR0cmlidXRlKCJ1dGkiLCBwYXJhbSk7CisgIH0KKworICB4b3V0LkVuZEVsZW1lbnQoKTsKK30KKwordm9pZCBjbUNQYWNrUEtHR2VuZXJhdG9yOjpXcml0ZURpc3RyaWJ1dGlvbkZpbGUoY29uc3QgY2hhciogbWV0YXBhY2thZ2VGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZ2VuTmFtZSkKIHsKICAgc3RkOjpzdHJpbmcgZGlzdHJpYnV0aW9uVGVtcGxhdGUgPQogICAgIHRoaXMtPkZpbmRUZW1wbGF0ZSgiQ1BhY2suZGlzdHJpYnV0aW9uLmRpc3QuaW4iKTsKQEAgLTEwMiw2ICsxNjEsMTEgQEAKICAgICBDcmVhdGVDaG9pY2UoUG9zdEZsaWdodENvbXBvbmVudCwgeG91dCk7CiAgIH0KIAorICAvLyBkZWZhdWx0IGJhY2tncm91bmQKKyAgdGhpcy0+Q3JlYXRlQmFja2dyb3VuZChudWxscHRyLCBtZXRhcGFja2FnZUZpbGUsIGdlbk5hbWUsIHhvdXQpOworICAvLyBEYXJrIEFxdWEKKyAgdGhpcy0+Q3JlYXRlQmFja2dyb3VuZCgiZGFya0FxdWEiLCBtZXRhcGFja2FnZUZpbGUsIGdlbk5hbWUsIHhvdXQpOworCiAgIHRoaXMtPlNldE9wdGlvbigiQ1BBQ0tfUEFDS0FHRU1BS0VSX0NIT0lDRVMiLCBjaG9pY2VPdXQuc3RyKCkuY19zdHIoKSk7CiAKICAgLy8gQ3JlYXRlIHRoZSBkaXN0cmlidXRpb24uZGlzdCBmaWxlIGluIHRoZSBtZXRhcGFja2FnZSB0byB0dXJuIGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja1BLR0dlbmVyYXRvci5oIGIvU291cmNlL0NQYWNrL2NtQ1BhY2tQS0dHZW5lcmF0b3IuaAppbmRleCA2OTI4NmZmLi5iZTczMGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1BhY2svY21DUGFja1BLR0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrUEtHR2VuZXJhdG9yLmgKQEAgLTksNiArOSw4IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CiAKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKwogI2luY2x1ZGUgImNtQ1BhY2tDb21wb25lbnRHcm91cC5oIgogI2luY2x1ZGUgImNtQ1BhY2tHZW5lcmF0b3IuaCIKIApAQCAtNTcsNyArNTksNyBAQAogICAvLyBpbnRlci1jb21wb25lbnQgZGVwZW5kZW5jaWVzLiBtZXRhcGFja2FnZUZpbGUgaXMgdGhlIG5hbWUgb2YgdGhlCiAgIC8vIG1ldGFwYWNrYWdlIGZvciB0aGUgZGlzdHJpYnV0aW9uLiBPbmx5IHZhbGlkIGZvciBhCiAgIC8vIGNvbXBvbmVudC1iYXNlZCBpbnN0YWxsLgotICB2b2lkIFdyaXRlRGlzdHJpYnV0aW9uRmlsZShjb25zdCBjaGFyKiBtZXRhcGFja2FnZUZpbGUpOworICB2b2lkIFdyaXRlRGlzdHJpYnV0aW9uRmlsZShjb25zdCBjaGFyKiBtZXRhcGFja2FnZUZpbGUsIGNvbnN0IGNoYXIqIGdlbk5hbWUpOwogCiAgIC8vIFN1YnJvdXRpbmUgb2YgV3JpdGVEaXN0cmlidXRpb25GaWxlIHRoYXQgd3JpdGVzIG91dCB0aGUKICAgLy8gZGVwZW5kZW5jeSBhdHRyaWJ1dGVzIGZvciBpbnRlci1jb21wb25lbnQgZGVwZW5kZW5jaWVzLgpAQCAtODUsNiArODcsMTAgQEAKICAgLy8vIGluc3RhbGxlciBHVUkuCiAgIHZvaWQgQ3JlYXRlQ2hvaWNlKGNvbnN0IGNtQ1BhY2tDb21wb25lbnQmIGNvbXBvbmVudCwgY21YTUxXcml0ZXImIHhvdXQpOwogCisgIC8vLyBDcmVhdGVzIGEgYmFja2dyb3VuZCBpbiB0aGUgZGlzdHJpYnV0aW9uIFhNTC4KKyAgdm9pZCBDcmVhdGVCYWNrZ3JvdW5kKGNvbnN0IGNoYXIqIHRoZW1lTmFtZSwgY29uc3QgY2hhciogbWV0YXBhY2thZ2VGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgY206OnN0cmluZ192aWV3IGdlbk5hbWUsIGNtWE1MV3JpdGVyJiB4b3V0KTsKKwogICAvLyBUaGUgUG9zdEZsaWdodCBjb21wb25lbnQgd2hlbiBjcmVhdGluZyBhIG1ldGFwYWNrYWdlCiAgIGNtQ1BhY2tDb21wb25lbnQgUG9zdEZsaWdodENvbXBvbmVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1BhY2svY21DUGFja1BhY2thZ2VNYWtlckdlbmVyYXRvci5jeHggYi9Tb3VyY2UvQ1BhY2svY21DUGFja1BhY2thZ2VNYWtlckdlbmVyYXRvci5jeHgKaW5kZXggYzViYTcyNi4uZjUxZWE0MiAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NtQ1BhY2tQYWNrYWdlTWFrZXJHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9DUGFjay9jbUNQYWNrUGFja2FnZU1ha2VyR2VuZXJhdG9yLmN4eApAQCAtMjc5LDcgKzI3OSw3IEBACiAgIH0gZWxzZSB7CiAgICAgLy8gV2UgaGF2ZSBidWlsdCB0aGUgcGFja2FnZSBpbiBwbGFjZS4gR2VuZXJhdGUgdGhlCiAgICAgLy8gZGlzdHJpYnV0aW9uLmRpc3QgZmlsZSB0byBkZXNjcmliZSBpdCBmb3IgdGhlIGluc3RhbGxlci4KLSAgICBXcml0ZURpc3RyaWJ1dGlvbkZpbGUocGFja2FnZURpckZpbGVOYW1lLmNfc3RyKCkpOworICAgIFdyaXRlRGlzdHJpYnV0aW9uRmlsZShwYWNrYWdlRGlyRmlsZU5hbWUuY19zdHIoKSwgIlBBQ0tBR0VNQUtFUiIpOwogICB9CiAKICAgc3RkOjpzdHJpbmcgdG1wRmlsZSA9IGNtU3RyQ2F0KHRoaXMtPkdldE9wdGlvbigiQ1BBQ0tfVE9QTEVWRUxfRElSRUNUT1JZIiksCkBAIC0zMjEsNiArMzIxLDkgQEAKIAogaW50IGNtQ1BhY2tQYWNrYWdlTWFrZXJHZW5lcmF0b3I6OkluaXRpYWxpemVJbnRlcm5hbCgpCiB7CisgIGNtQ1BhY2tMb2dnZXIoY21DUGFja0xvZzo6TE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgIlRoZSBQYWNrYWdlTWFrZXIgZ2VuZXJhdG9yIGlzIGRlcHJlY2F0ZWQgIgorICAgICAgICAgICAgICAgICJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uXG4iKTsKICAgdGhpcy0+U2V0T3B0aW9uSWZOb3RTZXQoIkNQQUNLX1BBQ0tBR0lOR19JTlNUQUxMX1BSRUZJWCIsICIvdXNyIik7CiAKICAgLy8gU3RhcnRpbmcgd2l0aCBYY29kZSA0LjMsIFBhY2thZ2VNYWtlciBpcyBhIHNlcGFyYXRlIGFwcCwgYW5kIHlvdQpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NtQ1BhY2tQcm9kdWN0QnVpbGRHZW5lcmF0b3IuY3h4IGIvU291cmNlL0NQYWNrL2NtQ1BhY2tQcm9kdWN0QnVpbGRHZW5lcmF0b3IuY3h4CmluZGV4IGRhZTI2OGMuLmEzZTU1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DUGFjay9jbUNQYWNrUHJvZHVjdEJ1aWxkR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY21DUGFja1Byb2R1Y3RCdWlsZEdlbmVyYXRvci5jeHgKQEAgLTgxLDcgKzgxLDcgQEAKICAgfQogCiAgIC8vIGNvbWJpbmUgcGFja2FnZShzKSBpbnRvIGEgZGlzdHJpYnV0aW9uCi0gIFdyaXRlRGlzdHJpYnV0aW9uRmlsZShwYWNrYWdlRGlyRmlsZU5hbWUuY19zdHIoKSk7CisgIFdyaXRlRGlzdHJpYnV0aW9uRmlsZShwYWNrYWdlRGlyRmlsZU5hbWUuY19zdHIoKSwgIlBST0RVQ1RCVUlMRCIpOwogICBzdGQ6Om9zdHJpbmdzdHJlYW0gcGtnQ21kOwogCiAgIHN0ZDo6c3RyaW5nIHZlcnNpb24gPSB0aGlzLT5HZXRPcHRpb24oIkNQQUNLX1BBQ0tBR0VfVkVSU0lPTiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NQYWNrL2NwYWNrLmN4eCBiL1NvdXJjZS9DUGFjay9jcGFjay5jeHgKaW5kZXggNTg5NTY1Mi4uM2E0MDBiNyAxMDA2NDQKLS0tIGEvU291cmNlL0NQYWNrL2NwYWNrLmN4eAorKysgYi9Tb3VyY2UvQ1BhY2svY3BhY2suY3h4CkBAIC04NSw3ICs4NSw3IEBACiAgICAgcmV0dXJuIDA7CiAgIH0KICAgc3RkOjpzdHJpbmcga2V5ID0gdmFsdWUuc3Vic3RyKDAsIHBvcyk7Ci0gIHZhbHVlID0gdmFsdWUuc3Vic3RyKHBvcyArIDEpOworICB2YWx1ZS5lcmFzZSgwLCBwb3MgKyAxKTsKICAgZGVmLT5NYXBba2V5XSA9IHZhbHVlOwogICBjbUNQYWNrX0xvZyhkZWYtPkxvZywgY21DUGFja0xvZzo6TE9HX0RFQlVHLAogICAgICAgICAgICAgICAiU2V0IENQYWNrIHZhcmlhYmxlOiAiIDw8IGtleSA8PCAiIHRvIFwiIiA8PCB2YWx1ZSA8PCAiXCIiCkBAIC0xMTUsNyArMTE1LDYgQEAKICAgYXJnYyA9IGFyZ3MuYXJnYygpOwogICBhcmd2ID0gYXJncy5hcmd2KCk7CiAKLSAgY21TeXN0ZW1Ub29sczo6RW5hYmxlTVNWQ0RlYnVnSG9vaygpOwogICBjbVN5c3RlbVRvb2xzOjpJbml0aWFsaXplTGliVVYoKTsKICAgY21TeXN0ZW1Ub29sczo6RmluZENNYWtlUmVzb3VyY2VzKGFyZ3ZbMF0pOwogICBjbUNQYWNrTG9nIGxvZzsKQEAgLTMxMyw4ICszMTIsOCBAQAogICAgIC8vIFRoZSB2YWx1ZSBoYXMgbm90IGJlZW4gc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUKICAgICBlbHNlIHsKICAgICAgIC8vIGdldCBhIGRlZmF1bHQgdmFsdWUgKGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpCi0gICAgICBjcGFja1Byb2plY3REaXJlY3RvcnkgPSBjbXN5czo6U3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7Ci0gICAgICAvLyB1c2UgZGVmYXVsdCB2YWx1ZSBpZmYgbm8gdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQgYnkgdGhlIGNvbmZpZyBmaWxlCisgICAgICBjcGFja1Byb2plY3REaXJlY3RvcnkgPSBjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOworICAgICAgLy8gdXNlIGRlZmF1bHQgdmFsdWUgaWYgbm8gdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQgYnkgdGhlIGNvbmZpZyBmaWxlCiAgICAgICBpZiAoIWdsb2JhbE1GLklzU2V0KCJDUEFDS19QQUNLQUdFX0RJUkVDVE9SWSIpKSB7CiAgICAgICAgIGdsb2JhbE1GLkFkZERlZmluaXRpb24oIkNQQUNLX1BBQ0tBR0VfRElSRUNUT1JZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcGFja1Byb2plY3REaXJlY3RvcnkpOwpAQCAtMzI0LDYgKzMyMywxMiBAQAogICAgICAgZ2xvYmFsTUYuQWRkRGVmaW5pdGlvbihjZC5maXJzdCwgY2Quc2Vjb25kKTsKICAgICB9CiAKKyAgICAvLyBGb3JjZSBDUEFDS19QQUNLQUdFX0RJUkVDVE9SWSBhcyBhYnNvbHV0ZSBwYXRoCisgICAgY3BhY2tQcm9qZWN0RGlyZWN0b3J5ID0gZ2xvYmFsTUYuR2V0RGVmaW5pdGlvbigiQ1BBQ0tfUEFDS0FHRV9ESVJFQ1RPUlkiKTsKKyAgICBjcGFja1Byb2plY3REaXJlY3RvcnkgPQorICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjcGFja1Byb2plY3REaXJlY3RvcnkpOworICAgIGdsb2JhbE1GLkFkZERlZmluaXRpb24oIkNQQUNLX1BBQ0tBR0VfRElSRUNUT1JZIiwgY3BhY2tQcm9qZWN0RGlyZWN0b3J5KTsKKwogICAgIGNvbnN0IGNoYXIqIGNwYWNrTW9kdWxlc1BhdGggPSBnbG9iYWxNRi5HZXREZWZpbml0aW9uKCJDUEFDS19NT0RVTEVfUEFUSCIpOwogICAgIGlmIChjcGFja01vZHVsZXNQYXRoKSB7CiAgICAgICBnbG9iYWxNRi5BZGREZWZpbml0aW9uKCJDTUFLRV9NT0RVTEVfUEFUSCIsIGNwYWNrTW9kdWxlc1BhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RCWlIuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCWlIuY3h4CmluZGV4IDg2NDBjNDYuLmM1MzNjZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QlpSLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJaUi5jeHgKQEAgLTgsMTEgKzgsMTIgQEAKICNpbmNsdWRlIDxvc3RyZWFtPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKworI2luY2x1ZGUgPGNtM3AvZXhwYXQuaD4KKwogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtX2V4cGF0LmgiCi0KLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdFZDLmgiCiAjaW5jbHVkZSAiY21Qcm9jZXNzVG9vbHMuaCIKQEAgLTI0NSw3ICsyNDYsNyBAQAogCiAgIHZvaWQgQ2hhcmFjdGVyRGF0YUhhbmRsZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGUKICAgewotICAgIGNtQXBwZW5kKHRoaXMtPkNEYXRhLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPkNEYXRhLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKICAgfQogCiAgIHZvaWQgRW5kRWxlbWVudChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRBbmRUZXN0SGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkQW5kVGVzdEhhbmRsZXIuY3h4CmluZGV4IDJhZDY2MWMuLmExOGNiYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRBbmRUZXN0SGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZEFuZFRlc3RIYW5kbGVyLmN4eApAQCAtMTgyLDEwICsxODIsOSBAQAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHRyYVBhdGhzOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmYWlsZWQ7CiAgICAgZnVsbFBhdGggPSBjbUNUZXN0VGVzdEhhbmRsZXI6OkZpbmRFeGVjdXRhYmxlKAotICAgICAgdGhpcy0+Q1Rlc3QsIHRoaXMtPkNvbmZpZ1NhbXBsZS5jX3N0cigpLCByZXN1bHRpbmdDb25maWcsIGV4dHJhUGF0aHMsCi0gICAgICBmYWlsZWQpOworICAgICAgdGhpcy0+Q1Rlc3QsIHRoaXMtPkNvbmZpZ1NhbXBsZSwgcmVzdWx0aW5nQ29uZmlnLCBleHRyYVBhdGhzLCBmYWlsZWQpOwogICAgIGlmICghZnVsbFBhdGguZW1wdHkoKSAmJiAhcmVzdWx0aW5nQ29uZmlnLmVtcHR5KCkpIHsKLSAgICAgIHRoaXMtPkNUZXN0LT5TZXRDb25maWdUeXBlKHJlc3VsdGluZ0NvbmZpZy5jX3N0cigpKTsKKyAgICAgIHRoaXMtPkNUZXN0LT5TZXRDb25maWdUeXBlKHJlc3VsdGluZ0NvbmZpZyk7CiAgICAgfQogICAgIG91dCA8PCAiVXNpbmcgY29uZmlnIHNhbXBsZSB3aXRoIHJlc3VsdHM6ICIgPDwgZnVsbFBhdGggPDwgIiBhbmQgIgogICAgICAgICA8PCByZXN1bHRpbmdDb25maWcgPDwgc3RkOjplbmRsOwpAQCAtMjE1LDExICsyMTQsMTEgQEAKIAogICBpZiAodGhpcy0+QnVpbGROb0NNYWtlKSB7CiAgICAgLy8gTWFrZSB0aGUgZ2VuZXJhdG9yIGF2YWlsYWJsZSBmb3IgdGhlIEJ1aWxkIGNhbGwgYmVsb3cuCi0gICAgY21HbG9iYWxHZW5lcmF0b3IqIGdlbiA9IGNtLkNyZWF0ZUdsb2JhbEdlbmVyYXRvcih0aGlzLT5CdWlsZEdlbmVyYXRvcik7Ci0gICAgY20uU2V0R2xvYmFsR2VuZXJhdG9yKGdlbik7CisgICAgY20uU2V0R2xvYmFsR2VuZXJhdG9yKGNtLkNyZWF0ZUdsb2JhbEdlbmVyYXRvcih0aGlzLT5CdWlsZEdlbmVyYXRvcikpOwogICAgIGlmICghdGhpcy0+QnVpbGRHZW5lcmF0b3JQbGF0Zm9ybS5lbXB0eSgpKSB7Ci0gICAgICBjbU1ha2VmaWxlIG1mKGdlbiwgY20uR2V0Q3VycmVudFNuYXBzaG90KCkpOwotICAgICAgaWYgKCFnZW4tPlNldEdlbmVyYXRvclBsYXRmb3JtKHRoaXMtPkJ1aWxkR2VuZXJhdG9yUGxhdGZvcm0sICZtZikpIHsKKyAgICAgIGNtTWFrZWZpbGUgbWYoY20uR2V0R2xvYmFsR2VuZXJhdG9yKCksIGNtLkdldEN1cnJlbnRTbmFwc2hvdCgpKTsKKyAgICAgIGlmICghY20uR2V0R2xvYmFsR2VuZXJhdG9yKCktPlNldEdlbmVyYXRvclBsYXRmb3JtKAorICAgICAgICAgICAgdGhpcy0+QnVpbGRHZW5lcmF0b3JQbGF0Zm9ybSwgJm1mKSkgewogICAgICAgICByZXR1cm4gMTsKICAgICAgIH0KICAgICB9CkBAIC0yOTYsOSArMjk1LDggQEAKICAgICBleHRyYVBhdGhzLnB1c2hfYmFjayh0ZW1wUGF0aCk7CiAgIH0KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZhaWxlZDsKLSAgZnVsbFBhdGggPQotICAgIGNtQ1Rlc3RUZXN0SGFuZGxlcjo6RmluZEV4ZWN1dGFibGUodGhpcy0+Q1Rlc3QsIHRoaXMtPlRlc3RDb21tYW5kLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmdDb25maWcsIGV4dHJhUGF0aHMsIGZhaWxlZCk7CisgIGZ1bGxQYXRoID0gY21DVGVzdFRlc3RIYW5kbGVyOjpGaW5kRXhlY3V0YWJsZSgKKyAgICB0aGlzLT5DVGVzdCwgdGhpcy0+VGVzdENvbW1hbmQsIHJlc3VsdGluZ0NvbmZpZywgZXh0cmFQYXRocywgZmFpbGVkKTsKIAogICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZnVsbFBhdGgpKSB7CiAgICAgb3V0IDw8ICJDb3VsZCBub3QgZmluZCBwYXRoIHRvIGV4ZWN1dGFibGUsIHBlcmhhcHMgaXQgd2FzIG5vdCBidWlsdDogIgpAQCAtMzc5LDcgKzM3Nyw3IEBACiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYWxsQXJncykKIHsKICAgLy8gLS1idWlsZC1hbmQtdGVzdCBvcHRpb25zCi0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtYW5kLXRlc3QiLCAwKSA9PSAwICYmCisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtYW5kLXRlc3QiKSAmJgogICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWYgKGlkeCArIDIgPCBhbGxBcmdzLnNpemUoKSkgewogICAgICAgaWR4Kys7CkBAIC0zOTcsMjUgKzM5NSwyOSBAQAogICAgICAgcmV0dXJuIDA7CiAgICAgfQogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtdGFyZ2V0IiwgMCkgPT0gMCAmJiBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS1idWlsZC10YXJnZXQiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+QnVpbGRUYXJnZXRzLnB1c2hfYmFjayhhbGxBcmdzW2lkeF0pOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtbm9jbWFrZSIsIDApID09IDApIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS1idWlsZC1ub2NtYWtlIikpIHsKICAgICB0aGlzLT5CdWlsZE5vQ01ha2UgPSB0cnVlOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtcnVuLWRpciIsIDApID09IDAgJiYgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtcnVuLWRpciIpICYmCisgICAgICBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKICAgICBpZHgrKzsKICAgICB0aGlzLT5CdWlsZFJ1bkRpciA9IGFsbEFyZ3NbaWR4XTsKICAgfQotICBpZiAoY3VycmVudEFyZy5maW5kKCItLWJ1aWxkLXR3by1jb25maWciLCAwKSA9PSAwKSB7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtdHdvLWNvbmZpZyIpKSB7CiAgICAgdGhpcy0+QnVpbGRUd29Db25maWcgPSB0cnVlOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtZXhlLWRpciIsIDApID09IDAgJiYgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtZXhlLWRpciIpICYmCisgICAgICBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKICAgICBpZHgrKzsKICAgICB0aGlzLT5FeGVjdXRhYmxlRGlyZWN0b3J5ID0gYWxsQXJnc1tpZHhdOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tdGVzdC10aW1lb3V0IiwgMCkgPT0gMCAmJiBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS10ZXN0LXRpbWVvdXQiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+VGltZW91dCA9IGNtRHVyYXRpb24oYXRvZihhbGxBcmdzW2lkeF0uY19zdHIoKSkpOwogICB9CkBAIC00MzEsMzEgKzQzMywzMyBAQAogICAgIGlkeCsrOwogICAgIHRoaXMtPkJ1aWxkR2VuZXJhdG9yVG9vbHNldCA9IGFsbEFyZ3NbaWR4XTsKICAgfQotICBpZiAoY3VycmVudEFyZy5maW5kKCItLWJ1aWxkLXByb2plY3QiLCAwKSA9PSAwICYmIGlkeCA8IGFsbEFyZ3Muc2l6ZSgpIC0gMSkgeworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGN1cnJlbnRBcmcsICItLWJ1aWxkLXByb2plY3QiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+QnVpbGRQcm9qZWN0ID0gYWxsQXJnc1tpZHhdOwogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tYnVpbGQtbWFrZXByb2dyYW0iLCAwKSA9PSAwICYmCisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtbWFrZXByb2dyYW0iKSAmJgogICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgaWR4Kys7CiAgICAgdGhpcy0+QnVpbGRNYWtlUHJvZ3JhbSA9IGFsbEFyZ3NbaWR4XTsKICAgfQotICBpZiAoY3VycmVudEFyZy5maW5kKCItLWJ1aWxkLWNvbmZpZy1zYW1wbGUiLCAwKSA9PSAwICYmCisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoY3VycmVudEFyZywgIi0tYnVpbGQtY29uZmlnLXNhbXBsZSIpICYmCiAgICAgICBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKICAgICBpZHgrKzsKICAgICB0aGlzLT5Db25maWdTYW1wbGUgPSBhbGxBcmdzW2lkeF07CiAgIH0KLSAgaWYgKGN1cnJlbnRBcmcuZmluZCgiLS1idWlsZC1ub2NsZWFuIiwgMCkgPT0gMCkgeworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGN1cnJlbnRBcmcsICItLWJ1aWxkLW5vY2xlYW4iKSkgewogICAgIHRoaXMtPkJ1aWxkTm9DbGVhbiA9IHRydWU7CiAgIH0KLSAgaWYgKGN1cnJlbnRBcmcuZmluZCgiLS1idWlsZC1vcHRpb25zIiwgMCkgPT0gMCkgeworICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGN1cnJlbnRBcmcsICItLWJ1aWxkLW9wdGlvbnMiKSkgewogICAgIHdoaWxlIChpZHggKyAxIDwgYWxsQXJncy5zaXplKCkgJiYgYWxsQXJnc1tpZHggKyAxXSAhPSAiLS1idWlsZC10YXJnZXQiICYmCiAgICAgICAgICAgIGFsbEFyZ3NbaWR4ICsgMV0gIT0gIi0tdGVzdC1jb21tYW5kIikgewogICAgICAgKytpZHg7CiAgICAgICB0aGlzLT5CdWlsZE9wdGlvbnMucHVzaF9iYWNrKGFsbEFyZ3NbaWR4XSk7CiAgICAgfQogICB9Ci0gIGlmIChjdXJyZW50QXJnLmZpbmQoIi0tdGVzdC1jb21tYW5kIiwgMCkgPT0gMCAmJiBpZHggPCBhbGxBcmdzLnNpemUoKSAtIDEpIHsKKyAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChjdXJyZW50QXJnLCAiLS10ZXN0LWNvbW1hbmQiKSAmJgorICAgICAgaWR4IDwgYWxsQXJncy5zaXplKCkgLSAxKSB7CiAgICAgKytpZHg7CiAgICAgdGhpcy0+VGVzdENvbW1hbmQgPSBhbGxBcmdzW2lkeF07CiAgICAgd2hpbGUgKGlkeCArIDEgPCBhbGxBcmdzLnNpemUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZENvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZENvbW1hbmQuY3h4CmluZGV4IDE4ZGYyMTQuLjhhYWIxNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkQ29tbWFuZC5jeHgKQEAgLTUsMTMgKzUsMTQgQEAKICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RCdWlsZEhhbmRsZXIuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbWFrZS5oIgpAQCAtMjksMTMgKzMwLDcgQEAKICAgdGhpcy0+QmluZCgiUFJPSkVDVF9OQU1FIl9zLCB0aGlzLT5Qcm9qZWN0TmFtZSk7CiB9CiAKLWNtQ1Rlc3RCdWlsZENvbW1hbmQ6On5jbUNUZXN0QnVpbGRDb21tYW5kKCkKLXsKLSAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvcikgewotICAgIGRlbGV0ZSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7Ci0gICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yID0gbnVsbHB0cjsKLSAgfQotfQorY21DVGVzdEJ1aWxkQ29tbWFuZDo6fmNtQ1Rlc3RCdWlsZENvbW1hbmQoKSA9IGRlZmF1bHQ7CiAKIGNtQ1Rlc3RHZW5lcmljSGFuZGxlciogY21DVGVzdEJ1aWxkQ29tbWFuZDo6SW5pdGlhbGl6ZUhhbmRsZXIoKQogewpAQCAtNDQsMTAgKzM5LDkgQEAKIAogICB0aGlzLT5IYW5kbGVyID0gaGFuZGxlcjsKIAotICBjb25zdCBjaGFyKiBjdGVzdEJ1aWxkQ29tbWFuZCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNURVNUX0JVSUxEX0NPTU1BTkQiKTsKLSAgaWYgKGN0ZXN0QnVpbGRDb21tYW5kICYmICpjdGVzdEJ1aWxkQ29tbWFuZCkgewotICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oIk1ha2VDb21tYW5kIiwgY3Rlc3RCdWlsZENvbW1hbmQsCisgIGNtUHJvcCBjdGVzdEJ1aWxkQ29tbWFuZCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWYoIkNURVNUX0JVSUxEX0NPTU1BTkQiKTsKKyAgaWYgKGNtTm9uZW1wdHkoY3Rlc3RCdWlsZENvbW1hbmQpKSB7CisgICAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigiTWFrZUNvbW1hbmQiLCAqY3Rlc3RCdWlsZENvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5RdWlldCk7CiAgIH0gZWxzZSB7CiAgICAgY29uc3QgY2hhciogY21ha2VHZW5lcmF0b3JOYW1lID0KQEAgLTYyLDcgKzU2LDcgQEAKICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDVEVTVF9CVUlMRF9DT05GSUdVUkFUSU9OIik7CiAgICAgY29uc3QgY2hhciogY21ha2VCdWlsZENvbmZpZ3VyYXRpb24gPSAhdGhpcy0+Q29uZmlndXJhdGlvbi5lbXB0eSgpCiAgICAgICA/IHRoaXMtPkNvbmZpZ3VyYXRpb24uY19zdHIoKQotICAgICAgOiAoKGN0ZXN0QnVpbGRDb25maWd1cmF0aW9uICYmICpjdGVzdEJ1aWxkQ29uZmlndXJhdGlvbikKKyAgICAgIDogKGNtTm9uZW1wdHkoY3Rlc3RCdWlsZENvbmZpZ3VyYXRpb24pCiAgICAgICAgICAgID8gY3Rlc3RCdWlsZENvbmZpZ3VyYXRpb24KICAgICAgICAgICAgOiB0aGlzLT5DVGVzdC0+R2V0Q29uZmlnVHlwZSgpLmNfc3RyKCkpOwogCkBAIC03MywxNCArNjcsMTMgQEAKICAgICAgID8gdGhpcy0+VGFyZ2V0LmNfc3RyKCkKICAgICAgIDogdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNURVNUX0JVSUxEX1RBUkdFVCIpOwogCi0gICAgaWYgKGNtYWtlR2VuZXJhdG9yTmFtZSAmJiAqY21ha2VHZW5lcmF0b3JOYW1lKSB7CisgICAgaWYgKGNtTm9uZW1wdHkoY21ha2VHZW5lcmF0b3JOYW1lKSkgewogICAgICAgaWYgKCFjbWFrZUJ1aWxkQ29uZmlndXJhdGlvbikgewogICAgICAgICBjbWFrZUJ1aWxkQ29uZmlndXJhdGlvbiA9ICJSZWxlYXNlIjsKICAgICAgIH0KICAgICAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3IpIHsKICAgICAgICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TmFtZSgpICE9IGNtYWtlR2VuZXJhdG9yTmFtZSkgewotICAgICAgICAgIGRlbGV0ZSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7Ci0gICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IucmVzZXQoKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3IpIHsKQEAgLTExNSw3ICsxMDgsNyBAQAogICAgICAgY21DVGVzdE9wdGlvbmFsTG9nKHRoaXMtPkNUZXN0LCBIQU5ETEVSX1ZFUkJPU0VfT1VUUFVULAogICAgICAgICAgICAgICAgICAgICAgICAgICJTZXRNYWtlQ29tbWFuZDoiIDw8IGJ1aWxkQ29tbWFuZCA8PCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKLSAgICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oIk1ha2VDb21tYW5kIiwgYnVpbGRDb21tYW5kLmNfc3RyKCksCisgICAgICB0aGlzLT5DVGVzdC0+U2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJNYWtlQ29tbWFuZCIsIGJ1aWxkQ29tbWFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOwogICAgIH0gZWxzZSB7CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3N0cjsKQEAgLTEzMCwxNiArMTIzLDE1IEBACiAgICAgfQogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHVzZUxhdW5jaGVycyA9Ci0gICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDVEVTVF9VU0VfTEFVTkNIRVJTIikpIHsKLSAgICB0aGlzLT5DVGVzdC0+U2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJVc2VMYXVuY2hlcnMiLCB1c2VMYXVuY2hlcnMsCisgIGlmIChjbVByb3AgdXNlTGF1bmNoZXJzID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZigiQ1RFU1RfVVNFX0xBVU5DSEVSUyIpKSB7CisgICAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigiVXNlTGF1bmNoZXJzIiwgKnVzZUxhdW5jaGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBsYWJlbHNGb3JTdWJwcm9qZWN0cyA9Ci0gICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDVEVTVF9MQUJFTFNfRk9SX1NVQlBST0pFQ1RTIikpIHsKKyAgaWYgKGNtUHJvcCBsYWJlbHNGb3JTdWJwcm9qZWN0cyA9CisgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWYoIkNURVNUX0xBQkVMU19GT1JfU1VCUFJPSkVDVFMiKSkgewogICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oIkxhYmVsc0ZvclN1YnByb2plY3RzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsc0ZvclN1YnByb2plY3RzLCB0aGlzLT5RdWlldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbGFiZWxzRm9yU3VicHJvamVjdHMsIHRoaXMtPlF1aWV0KTsKICAgfQogCiAgIGhhbmRsZXItPlNldFF1aWV0KHRoaXMtPlF1aWV0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRDb21tYW5kLmggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkQ29tbWFuZC5oCmluZGV4IGRhMDBhNDMuLjBmODI4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRDb21tYW5kLmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZENvbW1hbmQuaApAQCAtNDgsNyArNDgsNyBAQAogICBib29sIEluaXRpYWxQYXNzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKSBvdmVycmlkZTsKIAotICBjbUdsb2JhbEdlbmVyYXRvciogR2xvYmFsR2VuZXJhdG9yID0gbnVsbHB0cjsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBHbG9iYWxHZW5lcmF0b3I7CiAKIHByb3RlY3RlZDoKICAgY21DVGVzdEJ1aWxkSGFuZGxlciogSGFuZGxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRIYW5kbGVyLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0QnVpbGRIYW5kbGVyLmN4eAppbmRleCA5Y2I1NDQ5Li4zNWMyYjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEJ1aWxkSGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RCdWlsZEhhbmRsZXIuY3h4CkBAIC03LDExICs3LDEyIEBACiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9EaXJlY3RvcnkuaHh4IgogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1Byb2Nlc3MuaCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUR1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY21GaWxlVGltZUNhY2hlLmgiCkBAIC0zODUsMjQgKzM4NiwyMCBAQAogICBpZiAodGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiU291cmNlRGlyZWN0b3J5Iikuc2l6ZSgpID4gMjApIHsKICAgICBzdGQ6OnN0cmluZyBzcmNkaXIgPQogICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiU291cmNlRGlyZWN0b3J5IikgKyAiLyI7Ci0gICAgZm9yIChjYyA9IHNyY2Rpci5zaXplKCkgLSAyOyBjYyA+IDA7IGNjLS0pIHsKLSAgICAgIGlmIChzcmNkaXJbY2NdID09ICcvJykgewotICAgICAgICBzcmNkaXIgPSBzcmNkaXIuc3Vic3RyKDAsIGNjICsgMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQorICAgIGNjID0gc3JjZGlyLnJmaW5kKCcvJywgc3JjZGlyLnNpemUoKSAtIDIpOworICAgIGlmIChjYyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgc3JjZGlyLnJlc2l6ZShjYyArIDEpOworICAgICAgdGhpcy0+U2ltcGxpZnlTb3VyY2VEaXIgPSBzdGQ6Om1vdmUoc3JjZGlyKTsKICAgICB9Ci0gICAgdGhpcy0+U2ltcGxpZnlTb3VyY2VEaXIgPSBzcmNkaXI7CiAgIH0KICAgaWYgKHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkJ1aWxkRGlyZWN0b3J5Iikuc2l6ZSgpID4gMjApIHsKICAgICBzdGQ6OnN0cmluZyBiaW5kaXIgPQogICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQnVpbGREaXJlY3RvcnkiKSArICIvIjsKLSAgICBmb3IgKGNjID0gYmluZGlyLnNpemUoKSAtIDI7IGNjID4gMDsgY2MtLSkgewotICAgICAgaWYgKGJpbmRpcltjY10gPT0gJy8nKSB7Ci0gICAgICAgIGJpbmRpciA9IGJpbmRpci5zdWJzdHIoMCwgY2MgKyAxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9CisgICAgY2MgPSBiaW5kaXIucmZpbmQoJy8nLCBiaW5kaXIuc2l6ZSgpIC0gMik7CisgICAgaWYgKGNjICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICBiaW5kaXIucmVzaXplKGNjICsgMSk7CisgICAgICB0aGlzLT5TaW1wbGlmeUJ1aWxkRGlyID0gc3RkOjptb3ZlKGJpbmRpcik7CiAgICAgfQotICAgIHRoaXMtPlNpbXBsaWZ5QnVpbGREaXIgPSBiaW5kaXI7CiAgIH0KIAogICAvLyBPaywgbGV0J3MgZG8gdGhlIGJ1aWxkCkBAIC01NDQsMTEgKzU0MSwxMSBAQAogICAgIGNvbnN0IGNoYXIqIGZuYW1lID0gbGF1bmNoRGlyLkdldEZpbGUoaSk7CiAgICAgaWYgKHRoaXMtPklzTGF1bmNoZWRFcnJvckZpbGUoZm5hbWUpICYmIG51bUVycm9yc0FsbG93ZWQpIHsKICAgICAgIG51bUVycm9yc0FsbG93ZWQtLTsKLSAgICAgIGZyYWdtZW50cy5pbnNlcnQodGhpcy0+Q1Rlc3RMYXVuY2hEaXIgKyAiLyIgKyBmbmFtZSk7CisgICAgICBmcmFnbWVudHMuaW5zZXJ0KHRoaXMtPkNUZXN0TGF1bmNoRGlyICsgJy8nICsgZm5hbWUpOwogICAgICAgKyt0aGlzLT5Ub3RhbEVycm9yczsKICAgICB9IGVsc2UgaWYgKHRoaXMtPklzTGF1bmNoZWRXYXJuaW5nRmlsZShmbmFtZSkgJiYgbnVtV2FybmluZ3NBbGxvd2VkKSB7CiAgICAgICBudW1XYXJuaW5nc0FsbG93ZWQtLTsKLSAgICAgIGZyYWdtZW50cy5pbnNlcnQodGhpcy0+Q1Rlc3RMYXVuY2hEaXIgKyAiLyIgKyBmbmFtZSk7CisgICAgICBmcmFnbWVudHMuaW5zZXJ0KHRoaXMtPkNUZXN0TGF1bmNoRGlyICsgJy8nICsgZm5hbWUpOwogICAgICAgKyt0aGlzLT5Ub3RhbFdhcm5pbmdzOwogICAgIH0KICAgfQpAQCAtOTY5LDcgKzk2Niw3IEBACiAgICAgaWYgKGl0ICE9IHF1ZXVlLT5lbmQoKSkgewogICAgICAgLy8gQ3JlYXRlIGEgY29udGlndW91cyBhcnJheSBmb3IgdGhlIGxpbmUKICAgICAgIHRoaXMtPkN1cnJlbnRQcm9jZXNzaW5nTGluZS5jbGVhcigpOwotICAgICAgY21BcHBlbmQodGhpcy0+Q3VycmVudFByb2Nlc3NpbmdMaW5lLCBxdWV1ZS0+YmVnaW4oKSwgaXQpOworICAgICAgY206OmFwcGVuZCh0aGlzLT5DdXJyZW50UHJvY2Vzc2luZ0xpbmUsIHF1ZXVlLT5iZWdpbigpLCBpdCk7CiAgICAgICB0aGlzLT5DdXJyZW50UHJvY2Vzc2luZ0xpbmUucHVzaF9iYWNrKDApOwogICAgICAgY29uc3QgY2hhciogbGluZSA9IHRoaXMtPkN1cnJlbnRQcm9jZXNzaW5nTGluZS5kYXRhKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q1ZTLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q1ZTLmN4eAppbmRleCA0NWVjMzkwLi4xMjA5ZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENWUy5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RDVlMuY3h4CkBAIC0xNTIsMTAgKzE1MiwxMiBAQAogICAgICAgICB0aGlzLT5GaW5pc2hSZXZpc2lvbigpOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAodGhpcy0+U2VjdGlvbiA9PSBTZWN0aW9uUmV2aXNpb25zKSB7CisgICAgICAvLyBYWFgoY2xhbmctdGlkeSk6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxNjUKKyAgICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKICAgICAgIGlmICghdGhpcy0+UmV2LkxvZy5lbXB0eSgpKSB7CiAgICAgICAgIC8vIENvbnRpbnVlIHRoZSBleGlzdGluZyBsb2cuCiAgICAgICAgIHRoaXMtPlJldi5Mb2cgKz0gdGhpcy0+TGluZTsKLSAgICAgICAgdGhpcy0+UmV2LkxvZyArPSAiXG4iOworICAgICAgICB0aGlzLT5SZXYuTG9nICs9ICdcbic7CiAgICAgICB9IGVsc2UgaWYgKHRoaXMtPlJldi5SZXYuZW1wdHkoKSAmJgogICAgICAgICAgICAgICAgICB0aGlzLT5SZWdleFJldmlzaW9uLmZpbmQodGhpcy0+TGluZSkpIHsKICAgICAgICAgdGhpcy0+UmV2LlJldiA9IHRoaXMtPlJlZ2V4UmV2aXNpb24ubWF0Y2goMSk7CkBAIC0xNjYsNyArMTY4LDcgQEAKICAgICAgIH0gZWxzZSBpZiAoIXRoaXMtPlJlZ2V4QnJhbmNoZXMuZmluZCh0aGlzLT5MaW5lKSkgewogICAgICAgICAvLyBTdGFydCB0aGUgbG9nLgogICAgICAgICB0aGlzLT5SZXYuTG9nICs9IHRoaXMtPkxpbmU7Ci0gICAgICAgIHRoaXMtPlJldi5Mb2cgKz0gIlxuIjsKKyAgICAgICAgdGhpcy0+UmV2LkxvZyArPSAnXG4nOwogICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdGhpcy0+U2VjdGlvbiAhPSBTZWN0aW9uRW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb25maWd1cmVDb21tYW5kLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q29uZmlndXJlQ29tbWFuZC5jeHgKaW5kZXggZjJmNDJiNC4uYWM1NzEzMCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb25maWd1cmVDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvbmZpZ3VyZUNvbW1hbmQuY3h4CkBAIC02LDEyICs2LDEzIEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RDb25maWd1cmVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbWFrZS5oIgpAQCAtMzgsMTYgKzM5LDE2IEBACiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KIAotICBjb25zdCBjaGFyKiBjdGVzdENvbmZpZ3VyZUNvbW1hbmQgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDVEVTVF9DT05GSUdVUkVfQ09NTUFORCIpOworICBjbVByb3AgY3Rlc3RDb25maWd1cmVDb21tYW5kID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKCJDVEVTVF9DT05GSUdVUkVfQ09NTUFORCIpOwogCi0gIGlmIChjdGVzdENvbmZpZ3VyZUNvbW1hbmQgJiYgKmN0ZXN0Q29uZmlndXJlQ29tbWFuZCkgeworICBpZiAoY21Ob25lbXB0eShjdGVzdENvbmZpZ3VyZUNvbW1hbmQpKSB7CiAgICAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigiQ29uZmlndXJlQ29tbWFuZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGVzdENvbmZpZ3VyZUNvbW1hbmQsIHRoaXMtPlF1aWV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjdGVzdENvbmZpZ3VyZUNvbW1hbmQsIHRoaXMtPlF1aWV0KTsKICAgfSBlbHNlIHsKICAgICBjb25zdCBjaGFyKiBjbWFrZUdlbmVyYXRvck5hbWUgPQogICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNURVNUX0NNQUtFX0dFTkVSQVRPUiIpOwotICAgIGlmIChjbWFrZUdlbmVyYXRvck5hbWUgJiYgKmNtYWtlR2VuZXJhdG9yTmFtZSkgeworICAgIGlmIChjbU5vbmVtcHR5KGNtYWtlR2VuZXJhdG9yTmFtZSkpIHsKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfZGlyID0KICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiU291cmNlRGlyZWN0b3J5Iik7CiAgICAgICBpZiAoc291cmNlX2Rpci5lbXB0eSgpKSB7CkBAIC02OSwxMiArNzAsMTEgQEAKICAgICAgIGJvb2wgbXVsdGlDb25maWcgPSBmYWxzZTsKICAgICAgIGJvb2wgY21ha2VCdWlsZFR5cGVJbk9wdGlvbnMgPSBmYWxzZTsKIAotICAgICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0KLSAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKAotICAgICAgICAgIGNtYWtlR2VuZXJhdG9yTmFtZSk7CisgICAgICBhdXRvIGdnID0gdGhpcy0+TWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgICAgICBjbWFrZUdlbmVyYXRvck5hbWUpOwogICAgICAgaWYgKGdnKSB7CiAgICAgICAgIG11bHRpQ29uZmlnID0gZ2ctPklzTXVsdGlDb25maWcoKTsKLSAgICAgICAgZGVsZXRlIGdnOworICAgICAgICBnZy5yZXNldCgpOwogICAgICAgfQogCiAgICAgICBzdGQ6OnN0cmluZyBjbWFrZUNvbmZpZ3VyZUNvbW1hbmQgPQpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICAgIGNvbnN0IGNoYXIqIGNtYWtlR2VuZXJhdG9yUGxhdGZvcm0gPQogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ1RFU1RfQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIik7Ci0gICAgICBpZiAoY21ha2VHZW5lcmF0b3JQbGF0Zm9ybSAmJiAqY21ha2VHZW5lcmF0b3JQbGF0Zm9ybSkgeworICAgICAgaWYgKGNtTm9uZW1wdHkoY21ha2VHZW5lcmF0b3JQbGF0Zm9ybSkpIHsKICAgICAgICAgY21ha2VDb25maWd1cmVDb21tYW5kICs9ICIgXCItQSI7CiAgICAgICAgIGNtYWtlQ29uZmlndXJlQ29tbWFuZCArPSBjbWFrZUdlbmVyYXRvclBsYXRmb3JtOwogICAgICAgICBjbWFrZUNvbmZpZ3VyZUNvbW1hbmQgKz0gIlwiIjsKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAgICAgICBjb25zdCBjaGFyKiBjbWFrZUdlbmVyYXRvclRvb2xzZXQgPQogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ1RFU1RfQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQiKTsKLSAgICAgIGlmIChjbWFrZUdlbmVyYXRvclRvb2xzZXQgJiYgKmNtYWtlR2VuZXJhdG9yVG9vbHNldCkgeworICAgICAgaWYgKGNtTm9uZW1wdHkoY21ha2VHZW5lcmF0b3JUb29sc2V0KSkgewogICAgICAgICBjbWFrZUNvbmZpZ3VyZUNvbW1hbmQgKz0gIiBcIi1UIjsKICAgICAgICAgY21ha2VDb25maWd1cmVDb21tYW5kICs9IGNtYWtlR2VuZXJhdG9yVG9vbHNldDsKICAgICAgICAgY21ha2VDb25maWd1cmVDb21tYW5kICs9ICJcIiI7CkBAIC0xMjYsOCArMTI2LDggQEAKICAgICAgIGNtYWtlQ29uZmlndXJlQ29tbWFuZCArPSBzb3VyY2VfZGlyOwogICAgICAgY21ha2VDb25maWd1cmVDb21tYW5kICs9ICJcIiI7CiAKLSAgICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oCi0gICAgICAgICJDb25maWd1cmVDb21tYW5kIiwgY21ha2VDb25maWd1cmVDb21tYW5kLmNfc3RyKCksIHRoaXMtPlF1aWV0KTsKKyAgICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oIkNvbmZpZ3VyZUNvbW1hbmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZUNvbmZpZ3VyZUNvbW1hbmQsIHRoaXMtPlF1aWV0KTsKICAgICB9IGVsc2UgewogICAgICAgdGhpcy0+U2V0RXJyb3IoCiAgICAgICAgICJDb25maWd1cmUgY29tbWFuZCBpcyBub3Qgc3BlY2lmaWVkLiBJZiB0aGlzIGlzIGEgIgpAQCAtMTM3LDEwICsxMzcsMTAgQEAKICAgICB9CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogbGFiZWxzRm9yU3VicHJvamVjdHMgPQotICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ1RFU1RfTEFCRUxTX0ZPUl9TVUJQUk9KRUNUUyIpKSB7CisgIGlmIChjbVByb3AgbGFiZWxzRm9yU3VicHJvamVjdHMgPQorICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKCJDVEVTVF9MQUJFTFNfRk9SX1NVQlBST0pFQ1RTIikpIHsKICAgICB0aGlzLT5DVGVzdC0+U2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJMYWJlbHNGb3JTdWJwcm9qZWN0cyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHNGb3JTdWJwcm9qZWN0cywgdGhpcy0+UXVpZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxhYmVsc0ZvclN1YnByb2plY3RzLCB0aGlzLT5RdWlldCk7CiAgIH0KIAogICBjbUNUZXN0Q29uZmlndXJlSGFuZGxlciogaGFuZGxlciA9IHRoaXMtPkNUZXN0LT5HZXRDb25maWd1cmVIYW5kbGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvdmVyYWdlQ29tbWFuZC5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvdmVyYWdlQ29tbWFuZC5jeHgKaW5kZXggZDZlNmJlMy4uNzQzMmQwOCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb3ZlcmFnZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q292ZXJhZ2VDb21tYW5kLmN4eApAQCAtNCw5ICs0LDkgQEAKIAogI2luY2x1ZGUgPHNldD4KIAotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RDb3ZlcmFnZUhhbmRsZXIuaCIKIApAQCAtMjIsNyArMjIsNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGtleXdvcmRzKQogewogICB0aGlzLT5MYWJlbHNNZW50aW9uZWQgPQotICAgICF0aGlzLT5MYWJlbHMuZW1wdHkoKSB8fCBjbUNvbnRhaW5zKGtleXdvcmRzLCAiTEFCRUxTIik7CisgICAgIXRoaXMtPkxhYmVscy5lbXB0eSgpIHx8IGNtOjpjb250YWlucyhrZXl3b3JkcywgIkxBQkVMUyIpOwogfQogCiBjbUNUZXN0R2VuZXJpY0hhbmRsZXIqIGNtQ1Rlc3RDb3ZlcmFnZUNvbW1hbmQ6OkluaXRpYWxpemVIYW5kbGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q292ZXJhZ2VIYW5kbGVyLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q292ZXJhZ2VIYW5kbGVyLmN4eAppbmRleCA0Y2Q3ODNmLi4wOTNiMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdENvdmVyYWdlSGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RDb3ZlcmFnZUhhbmRsZXIuY3h4CkBAIC0xMiwxMiArMTIsMTMgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKICNpbmNsdWRlICJjbXN5cy9HbG9iLmh4eCIKICNpbmNsdWRlICJjbXN5cy9Qcm9jZXNzLmgiCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKQEAgLTQ2OCw4ICs0NjksOCBAQAogICAgIH0KIAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVOYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZ1bGxGaWxlTmFtZSk7Ci0gICAgc3RkOjpzdHJpbmcgc2hvcnRGaWxlTmFtZSA9Ci0gICAgICB0aGlzLT5DVGVzdC0+R2V0U2hvcnRQYXRoVG9GaWxlKGZ1bGxGaWxlTmFtZS5jX3N0cigpKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBzaG9ydEZpbGVOYW1lID0KKyAgICAgIHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUoZnVsbEZpbGVOYW1lKTsKICAgICBjb25zdCBjbUNUZXN0Q292ZXJhZ2VIYW5kbGVyQ29udGFpbmVyOjpTaW5nbGVGaWxlQ292ZXJhZ2VWZWN0b3ImIGZjb3YgPQogICAgICAgZmlsZS5zZWNvbmQ7CiAgICAgY292TG9nWE1MLlN0YXJ0RWxlbWVudCgiRmlsZSIpOwpAQCAtNTM3LDcgKzUzOCw3IEBACiAgICAgY292U3VtWE1MLlN0YXJ0RWxlbWVudCgiRmlsZSIpOwogICAgIGNvdlN1bVhNTC5BdHRyaWJ1dGUoIk5hbWUiLCBmaWxlTmFtZSk7CiAgICAgY292U3VtWE1MLkF0dHJpYnV0ZSgiRnVsbFBhdGgiLAotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldFNob3J0UGF0aFRvRmlsZShmdWxsRmlsZU5hbWUuY19zdHIoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldFNob3J0UGF0aFRvRmlsZShmdWxsRmlsZU5hbWUpKTsKICAgICBjb3ZTdW1YTUwuQXR0cmlidXRlKCJDb3ZlcmVkIiwgdGVzdGVkICsgdW50ZXN0ZWQgPiAwID8gInRydWUiIDogImZhbHNlIik7CiAgICAgY292U3VtWE1MLkVsZW1lbnQoIkxPQ1Rlc3RlZCIsIHRlc3RlZCk7CiAgICAgY292U3VtWE1MLkVsZW1lbnQoIkxPQ1VuVGVzdGVkIiwgdW50ZXN0ZWQpOwpAQCAtNjc5LDggKzY4MCw5IEBACiAvLwogI2lmZGVmIF9XSU4zMgogIyAgZGVmaW5lIGZuYyhzKSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UocykKKyMgIGRlZmluZSBmbmNfcHJlZml4KHMsIHQpIGZuYyhzLnN1YnN0cigwLCB0LnNpemUoKSkpID09IGZuYyh0KQogI2Vsc2UKLSMgIGRlZmluZSBmbmMocykgcworIyAgZGVmaW5lIGZuY19wcmVmaXgocywgdCkgY21IYXNQcmVmaXgocywgdCkKICNlbmRpZgogCiBib29sIElzRmlsZUluRGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbmZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbmRpcikKQEAgLTY4OCw4ICs2OTAsOCBAQAogICBzdGQ6OnN0cmluZyBmaWxlID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChpbmZpbGUpOwogICBzdGQ6OnN0cmluZyBkaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGluZGlyKTsKIAotICByZXR1cm4gZmlsZS5zaXplKCkgPiBkaXIuc2l6ZSgpICYmCi0gICAgZm5jKGZpbGUuc3Vic3RyKDAsIGRpci5zaXplKCkpKSA9PSBmbmMoZGlyKSAmJiBmaWxlW2Rpci5zaXplKCldID09ICcvJzsKKyAgcmV0dXJuIGZpbGUuc2l6ZSgpID4gZGlyLnNpemUoKSAmJiBmbmNfcHJlZml4KGZpbGUsIGRpcikgJiYKKyAgICBmaWxlW2Rpci5zaXplKCldID09ICcvJzsKIH0KIAogaW50IGNtQ1Rlc3RDb3ZlcmFnZUhhbmRsZXI6OkhhbmRsZVBIUENvdmVyYWdlKApAQCAtODE5LDcgKzgyMSw3IEBACiAgIHN0ZDo6c3RyaW5nIGJpbmFyeURpciA9IHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkJ1aWxkRGlyZWN0b3J5Iik7CiAgIHN0ZDo6c3RyaW5nIGJpbkNvdmVyYWdlRmlsZSA9IGJpbmFyeURpciArICIvKmphY29jby54bWwiOwogICBnMi5GaW5kRmlsZXMoYmluQ292ZXJhZ2VGaWxlKTsKLSAgY21BcHBlbmQoZmlsZXMsIGcyLkdldEZpbGVzKCkpOworICBjbTo6YXBwZW5kKGZpbGVzLCBnMi5HZXRGaWxlcygpKTsKIAogICBpZiAoIWZpbGVzLmVtcHR5KCkpIHsKICAgICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIEhBTkRMRVJfVkVSQk9TRV9PVVRQVVQsCkBAIC0xMjEzLDggKzEyMTUsNiBAQAogICAgICAgICAgIHdoaWxlIChjbVN5c3RlbVRvb2xzOjpHZXRMaW5lRnJvbVN0cmVhbShpZmlsZSwgbmwpKSB7CiAgICAgICAgICAgICBjbnQrKzsKIAotICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIGdjb3YgMy4wIG5vbi1jb3ZlcmFnZSBsaW5lcwotCiAgICAgICAgICAgICAvLyBTa2lwIGVtcHR5IGxpbmVzCiAgICAgICAgICAgICBpZiAobmwuZW1wdHkoKSkgewogICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyMjUsNiArMTIyNSwxNCBAQAogICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gSGFuZGxlIGdjb3YgMy4wIG5vbi1jb3ZlcmFnZSBsaW5lcworICAgICAgICAgICAgLy8gbm9uLWNvdmVyYWdlIGxpbmVzIHNlZW0gdG8gYWx3YXlzIHN0YXJ0IHdpdGggc29tZXRoaW5nIG5vdAorICAgICAgICAgICAgLy8gYSBzcGFjZSBhbmQgZG9uJ3QgaGF2ZSBhICc6JyBpbiB0aGUgOXRoIHBvc2l0aW9uCisgICAgICAgICAgICAvLyBUT0RPOiBWZXJpZnkgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGEgcm9idXN0IG1ldHJpYworICAgICAgICAgICAgaWYgKG5sWzBdICE9ICcgJyAmJiBubFs5XSAhPSAnOicpIHsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFJlYWQgdGhlIGNvdmVyYWdlIGNvdW50IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZ2NvdiBvdXRwdXQKICAgICAgICAgICAgIC8vIGxpbmUKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHByZWZpeCA9IG5sLnN1YnN0cigwLCAxMik7CkBAIC0xNDYyLDcgKzE0NzAsNyBAQAogICAgICAgICAiICAgbG9va2luZyBmb3IgTENPViBmaWxlcyBpbjogIiA8PCBkYUdsb2IgPDwgc3RkOjplbmRsLCB0aGlzLT5RdWlldCk7CiAgICAgICBnbC5GaW5kRmlsZXMoZGFHbG9iKTsKICAgICAgIC8vIEtlZXAgYSBsaXN0IG9mIGFsbCBMQ09WIGZpbGVzCi0gICAgICBjbUFwcGVuZChsY292RmlsZXMsIGdsLkdldEZpbGVzKCkpOworICAgICAgY206OmFwcGVuZChsY292RmlsZXMsIGdsLkdldEZpbGVzKCkpOwogCiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlIDogbGNvdkZpbGVzKSB7CiAgICAgICAgIGxjb3ZGaWxlID0gZmlsZTsKQEAgLTE1OTksMTAgKzE2MDcsMTAgQEAKICAgICAgICIgICBnbG9iYmluZyBmb3IgY292ZXJhZ2UgaW46ICIgPDwgbG0uZmlyc3QgPDwgc3RkOjplbmRsLCB0aGlzLT5RdWlldCk7CiAgICAgc3RkOjpzdHJpbmcgZGFHbG9iID0gY21TdHJDYXQobG0uZmlyc3QsICIvKi5kYSIpOwogICAgIGdsLkZpbmRGaWxlcyhkYUdsb2IpOwotICAgIGNtQXBwZW5kKGZpbGVzLCBnbC5HZXRGaWxlcygpKTsKKyAgICBjbTo6YXBwZW5kKGZpbGVzLCBnbC5HZXRGaWxlcygpKTsKICAgICBkYUdsb2IgPSBjbVN0ckNhdChsbS5maXJzdCwgIi8qLmdjZGEiKTsKICAgICBnbC5GaW5kRmlsZXMoZGFHbG9iKTsKLSAgICBjbUFwcGVuZChmaWxlcywgZ2wuR2V0RmlsZXMoKSk7CisgICAgY206OmFwcGVuZChmaWxlcywgZ2wuR2V0RmlsZXMoKSk7CiAgIH0KIH0KIApAQCAtMTYzOCw3ICsxNjQ2LDcgQEAKICAgICAgICAgICAgICAgICJFcnJvciB3aGlsZSBmaW5kaW5nIGZpbGVzIG1hdGNoaW5nICIgPDwgZGFHbG9iIDw8IHN0ZDo6ZW5kbCk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIGNtQXBwZW5kKGZpbGVzLCBnbC5HZXRGaWxlcygpKTsKKyAgY206OmFwcGVuZChmaWxlcywgZ2wuR2V0RmlsZXMoKSk7CiAgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgSEFORExFUl9WRVJCT1NFX09VVFBVVCwKICAgICAgICAgICAgICAgICAgICAgICJOb3cgc2VhcmNoaW5nIGluOiAiIDw8IGRhR2xvYiA8PCBzdGQ6OmVuZGwsIHRoaXMtPlF1aWV0KTsKICAgcmV0dXJuIHRydWU7CkBAIC0xNzA4LDI5ICsxNzE2LDI2IEBACiAKICAgICAgICAgLy8gUmVhZCB0aGUgY292ZXJhZ2UgY291bnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBUcmFjZS5weSBvdXRwdXQKICAgICAgICAgLy8gbGluZQotICAgICAgICBzdGQ6OnN0cmluZyBwcmVmaXggPSBubC5zdWJzdHIoMCwgNik7Ci0gICAgICAgIGlmIChwcmVmaXhbNV0gIT0gJyAnICYmIHByZWZpeFs1XSAhPSAnOicpIHsKLSAgICAgICAgICAvLyBUaGlzIGlzIGEgaGFjay4gV2Ugc2hvdWxkIHJlYWxseSBkbyBzb21ldGhpbmcgbW9yZSBlbGFib3JhdGUKLSAgICAgICAgICBwcmVmaXggPSBubC5zdWJzdHIoMCwgNyk7Ci0gICAgICAgICAgaWYgKHByZWZpeFs2XSAhPSAnICcgJiYgcHJlZml4WzZdICE9ICc6JykgewotICAgICAgICAgICAgcHJlZml4ID0gbmwuc3Vic3RyKDAsIDgpOwotICAgICAgICAgICAgaWYgKHByZWZpeFs3XSAhPSAnICcgJiYgcHJlZml4WzddICE9ICc6JykgewotICAgICAgICAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAotICAgICAgICAgICAgICAgICAgICAgICAgICJDdXJyZW50bHkgdGhlIGxpbWl0IGlzIG1heGltdW0gY292ZXJhZ2Ugb2YgOTk5OTk5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3M7CisgICAgICAgIGludCBjb3YgPSAwOworICAgICAgICAvLyBUaGlzIGlzIGEgaGFjay4gV2Ugc2hvdWxkIHJlYWxseSBkbyBzb21ldGhpbmcgbW9yZSBlbGFib3JhdGUKKyAgICAgICAgZm9yIChwb3MgPSA1OyBwb3MgPCA4OyBwb3MrKykgeworICAgICAgICAgIGlmIChubFtwb3NdID09ICcgJykgeworICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGRvZXMgbm90IGhhdmUgJzonIHNvIG5vIGNvdmVyYWdlIGhlcmUuIFRoYXQgc2FpZCwKKyAgICAgICAgICAgIC8vIFRyYWNlLnB5IGRvZXMgbm90IGhhbmRsZSBub3QgY292ZXJlZCBsaW5lcyB2ZXJzdXMgY29tbWVudHMgZXRjLgorICAgICAgICAgICAgLy8gU28sIHRoaXMgd2lsbCBiZSBzZXQgdG8gMC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobmxbcG9zXSA9PSAnOicpIHsKKyAgICAgICAgICAgIGNvdiA9IGF0b2kobmwuc3Vic3RyKDAsIHBvcyAtIDEpLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGludCBjb3YgPSBhdG9pKHByZWZpeC5jX3N0cigpKTsKLSAgICAgICAgaWYgKHByZWZpeFtwcmVmaXguc2l6ZSgpIC0gMV0gIT0gJzonKSB7Ci0gICAgICAgICAgLy8gVGhpcyBsaW5lIGRvZXMgbm90IGhhdmUgJzonIHNvIG5vIGNvdmVyYWdlIGhlcmUuIFRoYXQgc2FpZCwKLSAgICAgICAgICAvLyBUcmFjZS5weSBkb2VzIG5vdCBoYW5kbGUgbm90IGNvdmVyZWQgbGluZXMgdmVyc3VzIGNvbW1lbnRzIGV0Yy4KLSAgICAgICAgICAvLyBTbywgdGhpcyB3aWxsIGJlIHNldCB0byAwLgotICAgICAgICAgIGNvdiA9IDA7CisgICAgICAgIGlmIChwb3MgPT0gOCkgeworICAgICAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsCisgICAgICAgICAgICAgICAgICAgICAiQ3VycmVudGx5IHRoZSBsaW1pdCBpcyBtYXhpbXVtIGNvdmVyYWdlIG9mIDk5OTk5OSIKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKICAgICAgICAgfQotICAgICAgICBjbUNUZXN0T3B0aW9uYWxMb2coCi0gICAgICAgICAgdGhpcy0+Q1Rlc3QsIERFQlVHLAotICAgICAgICAgICJQcmVmaXg6ICIgPDwgcHJlZml4IDw8ICIgY292OiAiIDw8IGNvdiA8PCBzdGQ6OmVuZGwsIHRoaXMtPlF1aWV0KTsKICAgICAgICAgLy8gUmVhZCB0aGUgbGluZSBudW1iZXIgc3RhcnRpbmcgYXQgdGhlIDEwdGggY2hhcmFjdGVyIG9mIHRoZSBnY292CiAgICAgICAgIC8vIG91dHB1dCBsaW5lCiAgICAgICAgIGxvbmcgbGluZUlkeCA9IGNudDsKQEAgLTE4ODIsOCArMTg4Nyw4IEBACiAgICAgICAgIC8vIHN0YXJ0IHRoZSBmaWxlIG91dHB1dAogICAgICAgICBjb3ZMb2dYTUwuU3RhcnRFbGVtZW50KCJGaWxlIik7CiAgICAgICAgIGNvdkxvZ1hNTC5BdHRyaWJ1dGUoIk5hbWUiLCBpLT5maXJzdCk7Ci0gICAgICAgIGNvdkxvZ1hNTC5BdHRyaWJ1dGUoCi0gICAgICAgICAgIkZ1bGxQYXRoIiwgdGhpcy0+Q1Rlc3QtPkdldFNob3J0UGF0aFRvRmlsZShpLT5zZWNvbmQuY19zdHIoKSkpOworICAgICAgICBjb3ZMb2dYTUwuQXR0cmlidXRlKCJGdWxsUGF0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldFNob3J0UGF0aFRvRmlsZShpLT5zZWNvbmQpKTsKICAgICAgICAgY292TG9nWE1MLlN0YXJ0RWxlbWVudCgiUmVwb3J0Iik7CiAgICAgICAgIC8vIHdyaXRlIHRoZSBidWxsc2V5ZSBoZWFkZXIKICAgICAgICAgbGluZSA9IDA7CkBAIC0yMDU5LDggKzIwNjQsNyBAQAogICAgICAgdG90YWxfdW50ZXN0ZWQgKz0gKHRvdGFsRnVuY3Rpb25zIC0gZnVuY3Rpb25zQ2FsbGVkKTsKIAogICAgICAgc3RkOjpzdHJpbmcgZmlsZU5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZmlsZSk7Ci0gICAgICBzdGQ6OnN0cmluZyBzaG9ydEZpbGVOYW1lID0KLSAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldFNob3J0UGF0aFRvRmlsZShmaWxlLmNfc3RyKCkpOworICAgICAgc3RkOjpzdHJpbmcgc2hvcnRGaWxlTmFtZSA9IHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUoZmlsZSk7CiAKICAgICAgIGZsb2F0IGNwZXIgPSBzdGF0aWNfY2FzdDxmbG9hdD4ocGVyY2VudEJyYW5jaCArIHBlcmNlbnRGdW5jdGlvbik7CiAgICAgICBpZiAodG90YWxCcmFuY2hlcyA+IDApIHsKQEAgLTIyNjEsNyArMjI2NSw3IEBACiAgICAgICAvLyBpcyB0aGUgZW5kIG9mIHRoZSB0YXJnZXQtd2lkZSBsYWJlbHMuCiAgICAgICBpblRhcmdldCA9IGZhbHNlOwogCi0gICAgICBzb3VyY2UgPSB0aGlzLT5DVGVzdC0+R2V0U2hvcnRQYXRoVG9GaWxlKGxpbmUuY19zdHIoKSk7CisgICAgICBzb3VyY2UgPSB0aGlzLT5DVGVzdC0+R2V0U2hvcnRQYXRoVG9GaWxlKGxpbmUpOwogCiAgICAgICAvLyBMYWJlbCB0aGUgc291cmNlIHdpdGggdGhlIHRhcmdldCBsYWJlbHMuCiAgICAgICBMYWJlbFNldCYgbGFiZWxTZXQgPSB0aGlzLT5Tb3VyY2VMYWJlbHNbc291cmNlXTsKQEAgLTIzMTUsNyArMjMxOSw3IEBACiAKICAgLy8gVGhlIHNvdXJjZSBpcyBmaWx0ZXJlZCBvdXQgaWYgaXQgZG9lcyBub3QgaGF2ZSBhbnkgbGFiZWxzIGluCiAgIC8vIGNvbW1vbiB3aXRoIHRoZSBmaWx0ZXIgc2V0LgotICBzdGQ6OnN0cmluZyBzaG9ydFNyYyA9IHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUoc291cmNlLmNfc3RyKCkpOworICBzdGQ6OnN0cmluZyBzaG9ydFNyYyA9IHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUoc291cmNlKTsKICAgYXV0byBsaSA9IHRoaXMtPlNvdXJjZUxhYmVscy5maW5kKHNob3J0U3JjKTsKICAgaWYgKGxpICE9IHRoaXMtPlNvdXJjZUxhYmVscy5lbmQoKSkgewogICAgIHJldHVybiAhdGhpcy0+SW50ZXJzZWN0c0ZpbHRlcihsaS0+c2Vjb25kKTsKQEAgLTIzMzcsMTQgKzIzNDEsMTQgQEAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZXMgPSBnbC5HZXRGaWxlcygpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGYgOiBmaWxlcykgewogICAgICAgaWYgKHRoaXMtPlNob3VsZElEb0NvdmVyYWdlKGYsIGNvbnQtPlNvdXJjZURpciwgY29udC0+QmluYXJ5RGlyKSkgewotICAgICAgICBleHRyYU1hdGNoZXMuaW5zZXJ0KHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUoZi5jX3N0cigpKSk7CisgICAgICAgIGV4dHJhTWF0Y2hlcy5pbnNlcnQodGhpcy0+Q1Rlc3QtPkdldFNob3J0UGF0aFRvRmlsZShmKSk7CiAgICAgICB9CiAgICAgfQogICB9CiAKICAgaWYgKCFleHRyYU1hdGNoZXMuZW1wdHkoKSkgewogICAgIGZvciAoYXV0byBjb25zdCYgaSA6IGNvbnQtPlRvdGFsQ292ZXJhZ2UpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIHNob3J0UGF0aCA9IHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUoaS5maXJzdC5jX3N0cigpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIHNob3J0UGF0aCA9IHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUoaS5maXJzdCk7CiAgICAgICBleHRyYU1hdGNoZXMuZXJhc2Uoc2hvcnRQYXRoKTsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEN1cmwuY3h4CmluZGV4IGNjYWM4MzIuLjY5YzU3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RDdXJsLmN4eApAQCAtNSw3ICs1LDggQEAKICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVkZSA8b3N0cmVhbT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUN1cmwuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTQ2LDE1ICs0NywxNSBAQAogewogICBpbnQgcmVhbHNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemUgKiBubWVtYik7CiAgIGNvbnN0IGNoYXIqIGNoUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHB0cik7Ci0gIGNtQXBwZW5kKCpzdGF0aWNfY2FzdDxzdGQ6OnZlY3RvcjxjaGFyPio+KGRhdGEpLCBjaFB0ciwgY2hQdHIgKyByZWFsc2l6ZSk7CisgIGNtOjphcHBlbmQoKnN0YXRpY19jYXN0PHN0ZDo6dmVjdG9yPGNoYXI+Kj4oZGF0YSksIGNoUHRyLCBjaFB0ciArIHJlYWxzaXplKTsKICAgcmV0dXJuIHJlYWxzaXplOwogfQogCiBzaXplX3QgY3VybERlYnVnQ2FsbGJhY2soQ1VSTCogLyp1bnVzZWQqLywgY3VybF9pbmZvdHlwZSAvKnVudXNlZCovLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGNoUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCogZGF0YSkKIHsKLSAgY21BcHBlbmQoKnN0YXRpY19jYXN0PHN0ZDo6dmVjdG9yPGNoYXI+Kj4oZGF0YSksIGNoUHRyLCBjaFB0ciArIHNpemUpOwotICByZXR1cm4gc2l6ZTsKKyAgY206OmFwcGVuZCgqc3RhdGljX2Nhc3Q8c3RkOjp2ZWN0b3I8Y2hhcj4qPihkYXRhKSwgY2hQdHIsIGNoUHRyICsgc2l6ZSk7CisgIHJldHVybiAwOwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEN1cmwuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5oCmluZGV4IDljNWJhNjYuLmIwZDdmMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0Q3VybC5oCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV9jdXJsLmgiCisjaW5jbHVkZSA8Y20zcC9jdXJsL2N1cmwuaD4KIAogY2xhc3MgY21DVGVzdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RHSVQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RHSVQuY3h4CmluZGV4IDNmM2MxMDcuLjU2OGIwOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0R0lULmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEdJVC5jeHgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3RpbWU+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKQEAgLTE5Myw3ICsxOTQsOCBAQAogICAgICAgaWYgKGxpbmUuZmluZCgiXHRub3QtZm9yLW1lcmdlXHQiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IGxpbmUuZmluZCgnXHQnKTsKICAgICAgICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICAgIHNoYTEgPSBsaW5lLnN1YnN0cigwLCBwb3MpOworICAgICAgICAgIHNoYTEgPSBzdGQ6Om1vdmUobGluZSk7CisgICAgICAgICAgc2hhMS5yZXNpemUocG9zKTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0R2VuZXJpY0hhbmRsZXIuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RHZW5lcmljSGFuZGxlci5jeHgKaW5kZXggY2MwYjRlZC4uYTcxZjU1MCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RHZW5lcmljSGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RHZW5lcmljSGFuZGxlci5jeHgKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIHRoaXMtPkNUZXN0LT5BZGRTdWJtaXRGaWxlKHBhcnQsIG9zdHIuc3RyKCkuY19zdHIoKSk7CisgIHRoaXMtPkNUZXN0LT5BZGRTdWJtaXRGaWxlKHBhcnQsIG9zdHIuc3RyKCkpOwogICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RIRy5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEhHLmN4eAppbmRleCAzMjY1NDk4Li41ZjQ1ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEhHLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdEhHLmN4eApAQCAtNSw5ICs1LDEwIEBACiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdFZDLmgiCiAjaW5jbHVkZSAiY21Qcm9jZXNzVG9vbHMuaCIKQEAgLTIwNCw3ICsyMDUsNyBAQAogCiAgIHZvaWQgQ2hhcmFjdGVyRGF0YUhhbmRsZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGUKICAgewotICAgIGNtQXBwZW5kKHRoaXMtPkNEYXRhLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPkNEYXRhLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKICAgfQogCiAgIHZvaWQgRW5kRWxlbWVudChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0SGFuZGxlckNvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RIYW5kbGVyQ29tbWFuZC5jeHgKaW5kZXggYjEwMzRjOS4uMDNiNzE3MyAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RIYW5kbGVyQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RIYW5kbGVyQ29tbWFuZC5jeHgKQEAgLTcsMTMgKzcsMTQgQEAKICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RHZW5lcmljSGFuZGxlci5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogI2luY2x1ZGUgImNtV29ya2luZ0RpcmVjdG9yeS5oIgpAQCAtMTI1LDIzICsxMjYsMjEgQEAKICAgLy8gQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFIHNjcmlwdCB2YXJpYWJsZSBpZiBpdCBpcyBkZWZpbmVkLgogICAvLyBUaGUgY3VycmVudCBzY3JpcHQgdmFsdWUgdHJ1bXBzIHRoZSAtQyBhcmd1bWVudCBvbiB0aGUgY29tbWFuZAogICAvLyBsaW5lLgotICBjb25zdCBjaGFyKiBjdGVzdENvbmZpZ1R5cGUgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEUiKTsKKyAgY21Qcm9wIGN0ZXN0Q29uZmlnVHlwZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWYoIkNURVNUX0NPTkZJR1VSQVRJT05fVFlQRSIpOwogICBpZiAoY3Rlc3RDb25maWdUeXBlKSB7Ci0gICAgdGhpcy0+Q1Rlc3QtPlNldENvbmZpZ1R5cGUoY3Rlc3RDb25maWdUeXBlKTsKKyAgICB0aGlzLT5DVGVzdC0+U2V0Q29uZmlnVHlwZSgqY3Rlc3RDb25maWdUeXBlKTsKICAgfQogCiAgIGlmICghdGhpcy0+QnVpbGQuZW1wdHkoKSkgewogICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oCi0gICAgICAiQnVpbGREaXJlY3RvcnkiLCBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRoaXMtPkJ1aWxkKS5jX3N0cigpLAorICAgICAgIkJ1aWxkRGlyZWN0b3J5IiwgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh0aGlzLT5CdWlsZCksCiAgICAgICB0aGlzLT5RdWlldCk7CiAgIH0gZWxzZSB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGJkaXIgPQogICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDVEVTVF9CSU5BUllfRElSRUNUT1JZIik7CiAgICAgaWYgKCFiZGlyLmVtcHR5KCkpIHsKICAgICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oCi0gICAgICAgICJCdWlsZERpcmVjdG9yeSIsIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoYmRpcikuY19zdHIoKSwKLSAgICAgICAgdGhpcy0+UXVpZXQpOworICAgICAgICAiQnVpbGREaXJlY3RvcnkiLCBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGJkaXIpLCB0aGlzLT5RdWlldCk7CiAgICAgfSBlbHNlIHsKICAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsCiAgICAgICAgICAgICAgICAgICJDVEVTVF9CSU5BUllfRElSRUNUT1JZIG5vdCBzZXQiIDw8IHN0ZDo6ZW5kbDspOwpAQCAtMTUxLDIwICsxNTAsMTggQEAKICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBERUJVRywKICAgICAgICAgICAgICAgICJTZXQgc291cmNlIGRpcmVjdG9yeSB0bzogIiA8PCB0aGlzLT5Tb3VyY2UgPDwgc3RkOjplbmRsKTsKICAgICB0aGlzLT5DVGVzdC0+U2V0Q1Rlc3RDb25maWd1cmF0aW9uKAotICAgICAgIlNvdXJjZURpcmVjdG9yeSIsIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgodGhpcy0+U291cmNlKS5jX3N0cigpLAorICAgICAgIlNvdXJjZURpcmVjdG9yeSIsIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgodGhpcy0+U291cmNlKSwKICAgICAgIHRoaXMtPlF1aWV0KTsKICAgfSBlbHNlIHsKICAgICB0aGlzLT5DVGVzdC0+U2V0Q1Rlc3RDb25maWd1cmF0aW9uKAogICAgICAgIlNvdXJjZURpcmVjdG9yeSIsCiAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAotICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNURVNUX1NPVVJDRV9ESVJFQ1RPUlkiKSkKLSAgICAgICAgLmNfc3RyKCksCisgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ1RFU1RfU09VUkNFX0RJUkVDVE9SWSIpKSwKICAgICAgIHRoaXMtPlF1aWV0KTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBjaGFuZ2VJZCA9Ci0gICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDVEVTVF9DSEFOR0VfSUQiKSkgewotICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oIkNoYW5nZUlkIiwgY2hhbmdlSWQsIHRoaXMtPlF1aWV0KTsKKyAgaWYgKGNtUHJvcCBjaGFuZ2VJZCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWYoIkNURVNUX0NIQU5HRV9JRCIpKSB7CisgICAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigiQ2hhbmdlSWQiLCAqY2hhbmdlSWQsIHRoaXMtPlF1aWV0KTsKICAgfQogCiAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIERFQlVHLCAiSW5pdGlhbGl6ZSBoYW5kbGVyIiA8PCBzdGQ6OmVuZGw7KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tDb21tYW5kLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tDb21tYW5kLmN4eAppbmRleCAzOWRlYzZkLi5kMGUyOTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RNZW1DaGVja0NvbW1hbmQuY3h4CkBAIC0yLDcgKzIsNyBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21DVGVzdE1lbUNoZWNrQ29tbWFuZC5oIgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrSGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrSGFuZGxlci5jeHgKaW5kZXggYTVlYzFhZS4uOGIzMWU0YiAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RNZW1DaGVja0hhbmRsZXIuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmN4eApAQCAtMiwxMiArMiwxNiBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21DVGVzdE1lbUNoZWNrSGFuZGxlci5oIgogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL0dsb2IuaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKQEAgLTE2MiwxMiArMTY2LDEzIEBACiB2b2lkIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkdlbmVyYXRlVGVzdENvbW1hbmQoCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncywgaW50IHRlc3QpCiB7Ci0gIHN0ZDo6c3RyaW5nIGluZGV4OwotICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOworICBzdGQ6OnN0cmluZyBpbmRleCA9IHN0ZDo6dG9fc3RyaW5nKHRlc3QpOwogICBzdGQ6OnN0cmluZyBtZW1jaGVja2NvbW1hbmQgPQogICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgodGhpcy0+TWVtb3J5VGVzdGVyKTsKLSAgc3RyZWFtIDw8IHRlc3Q7Ci0gIGluZGV4ID0gc3RyZWFtLnN0cigpOworCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkaXJzOworICBib29sIG5leHRBcmdJc0RpciA9IGZhbHNlOworCiAgIGZvciAoc3RkOjpzdHJpbmcgYXJnIDogdGhpcy0+TWVtb3J5VGVzdGVyRHluYW1pY09wdGlvbnMpIHsKICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IGFyZy5maW5kKCI/PyIpOwogICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKQEAgLTE3Nyw2ICsxODIsMTYgQEAKICAgICBtZW1jaGVja2NvbW1hbmQgKz0gIiBcIiI7CiAgICAgbWVtY2hlY2tjb21tYW5kICs9IGFyZzsKICAgICBtZW1jaGVja2NvbW1hbmQgKz0gIlwiIjsKKworICAgIGlmIChuZXh0QXJnSXNEaXIpIHsKKyAgICAgIG5leHRBcmdJc0RpciA9IGZhbHNlOworICAgICAgZGlycy5wdXNoX2JhY2soYXJnKTsKKyAgICB9CisKKyAgICBpZiAodGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPT0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlkgJiYKKyAgICAgICAgKGFyZyA9PSAiLWxvZ2RpciIgfHwgYXJnID09ICItc3ltY2FjaGVfZGlyIikpIHsKKyAgICAgIG5leHRBcmdJc0RpciA9IHRydWU7CisgICAgfQogICB9CiAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIG1lbW9yeSB0ZXN0ZXIgZW52aXJvbm1lbnQgdmFyaWFibGUuCiAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgbWVtb3J5IHRlc3RpbmcgcHJvZ3JhbXMgdGhhdCBwYXNzIG9wdGlvbnMKQEAgLTIwOCw2ICsyMjMsMTEgQEAKICAgICBtZW1jaGVja2NvbW1hbmQgKz0gIiAiICsgbWVtVGVzdGVyRW52aXJvbm1lbnRWYXJpYWJsZTsKICAgICBhcmdzLnB1c2hfYmFjayhtZW1UZXN0ZXJFbnZpcm9ubWVudFZhcmlhYmxlKTsKICAgfQorCisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGRpciA6IGRpcnMpIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KGRpcik7CisgIH0KKwogICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIEhBTkRMRVJfVkVSQk9TRV9PVVRQVVQsCiAgICAgICAgICAgICAgICAgICAgICAiTWVtb3J5IGNoZWNrIGNvbW1hbmQ6ICIgPDwgbWVtY2hlY2tjb21tYW5kIDw8IHN0ZDo6ZW5kbCwKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKQEAgLTI3OCw5ICsyOTgsNiBAQAogCiAgIHRoaXMtPkNUZXN0LT5Qb3B1bGF0ZUN1c3RvbVZlY3RvcihtZiwgIkNURVNUX0NVU1RPTV9NRU1DSEVDS19JR05PUkUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3VzdG9tVGVzdHNJZ25vcmUpOwotICBzdGQ6OnN0cmluZyBjbWFrZSA9IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpOwotICB0aGlzLT5DVGVzdC0+U2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJDTWFrZUNvbW1hbmQiLCBjbWFrZS5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKIH0KIAogaW50IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkdldERlZmVjdENvdW50KCkKQEAgLTMwMCwxMiArMzE3LDE4IEBACiAgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpWQUxHUklORDoKICAgICAgIHhtbC5BdHRyaWJ1dGUoIkNoZWNrZXIiLCAiVmFsZ3JpbmQiKTsKICAgICAgIGJyZWFrOworICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlk6CisgICAgICB4bWwuQXR0cmlidXRlKCJDaGVja2VyIiwgIkRyTWVtb3J5Iik7CisgICAgICBicmVhazsKICAgICBjYXNlIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlBVUklGWToKICAgICAgIHhtbC5BdHRyaWJ1dGUoIkNoZWNrZXIiLCAiUHVyaWZ5Iik7CiAgICAgICBicmVhazsKICAgICBjYXNlIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkJPVU5EU19DSEVDS0VSOgogICAgICAgeG1sLkF0dHJpYnV0ZSgiQ2hlY2tlciIsICJCb3VuZHNDaGVja2VyIik7CiAgICAgICBicmVhazsKKyAgICBjYXNlIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkNVREFfTUVNQ0hFQ0s6CisgICAgICB4bWwuQXR0cmlidXRlKCJDaGVja2VyIiwgIkN1ZGFNZW1jaGVjayIpOworICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpBRERSRVNTX1NBTklUSVpFUjoKICAgICAgIHhtbC5BdHRyaWJ1dGUoIkNoZWNrZXIiLCAiQWRkcmVzc1Nhbml0aXplciIpOwogICAgICAgYnJlYWs7CkBAIC0zMzEsNyArMzU0LDcgQEAKICAgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VGVzdFJlc3VsdHNWZWN0b3I6OnNpemVfdHlwZSBjYzsKICAgZm9yIChjbUNUZXN0VGVzdFJlc3VsdCBjb25zdCYgcmVzdWx0IDogdGhpcy0+VGVzdFJlc3VsdHMpIHsKICAgICBzdGQ6OnN0cmluZyB0ZXN0UGF0aCA9IHJlc3VsdC5QYXRoICsgIi8iICsgcmVzdWx0Lk5hbWU7Ci0gICAgeG1sLkVsZW1lbnQoIlRlc3QiLCB0aGlzLT5DVGVzdC0+R2V0U2hvcnRQYXRoVG9GaWxlKHRlc3RQYXRoLmNfc3RyKCkpKTsKKyAgICB4bWwuRWxlbWVudCgiVGVzdCIsIHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUodGVzdFBhdGgpKTsKICAgfQogICB4bWwuRW5kRWxlbWVudCgpOyAvLyBUZXN0TGlzdAogICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIEhBTkRMRVJfT1VUUFVULApAQCAtMzg3LDExICs0MTAsMTEgQEAKICAgfQogICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIEhBTkRMRVJfT1VUUFVULAogICAgICAgICAgICAgICAgICAgICAgIk1lbUNoZWNrIGxvZyBmaWxlcyBjYW4gYmUgZm91bmQgaGVyZTogIgotICAgICAgICAgICAgICAgICAgICAgIiggKiBjb3JyZXNwb25kcyB0byB0ZXN0IG51bWJlcikiCisgICAgICAgICAgICAgICAgICAgICAiKDwjPiBjb3JyZXNwb25kcyB0byB0ZXN0IG51bWJlcikiCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCwKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKICAgc3RkOjpzdHJpbmcgb3V0cHV0ID0gdGhpcy0+TWVtb3J5VGVzdGVyT3V0cHV0RmlsZTsKLSAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhvdXRwdXQsICI/PyIsICIqIik7CisgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcob3V0cHV0LCAiPz8iLCAiPCM+Iik7CiAgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgSEFORExFUl9PVVRQVVQsIG91dHB1dCA8PCBzdGQ6OmVuZGwsCiAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5RdWlldCk7CiAgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgSEFORExFUl9PVVRQVVQsCkBAIC00MzcsMTAgKzQ2MCwxNiBAQAogICAgIGlmICh0ZXN0ZXJOYW1lLmZpbmQoInZhbGdyaW5kIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwKICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiTWVtb3J5Q2hlY2tUeXBlIikgPT0gIlZhbGdyaW5kIikgewogICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpWQUxHUklORDsKKyAgICB9IGVsc2UgaWYgKHRlc3Rlck5hbWUuZmluZCgiZHJtZW1vcnkiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyB8fAorICAgICAgICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiTWVtb3J5Q2hlY2tUeXBlIikgPT0KKyAgICAgICAgICAgICAgICAgIkRyTWVtb3J5IikgeworICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpEUk1FTU9SWTsKICAgICB9IGVsc2UgaWYgKHRlc3Rlck5hbWUuZmluZCgicHVyaWZ5IikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6UFVSSUZZOwogICAgIH0gZWxzZSBpZiAodGVzdGVyTmFtZS5maW5kKCJCQyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkJPVU5EU19DSEVDS0VSOworICAgIH0gZWxzZSBpZiAodGVzdGVyTmFtZS5maW5kKCJjdWRhLW1lbWNoZWNrIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6Q1VEQV9NRU1DSEVDSzsKICAgICB9IGVsc2UgewogICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpVTktOT1dOOwogICAgIH0KQEAgLTQ1MywzOCArNDgyLDQ3IEBACiAgICAgdGhpcy0+TWVtb3J5VGVzdGVyID0gdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiVmFsZ3JpbmRDb21tYW5kIik7CiAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpWQUxHUklORDsKICAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKAorICAgICAgICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiRHJNZW1vcnlDb21tYW5kIikpKSB7CisgICAgdGhpcy0+TWVtb3J5VGVzdGVyID0gdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiRHJNZW1vcnlDb21tYW5kIik7CisgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpEUk1FTU9SWTsKKyAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKAogICAgICAgICAgICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQm91bmRzQ2hlY2tlckNvbW1hbmQiKSkpIHsKICAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPQogICAgICAgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQm91bmRzQ2hlY2tlckNvbW1hbmQiKTsKICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkJPVU5EU19DSEVDS0VSOworICB9IGVsc2UgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoCisgICAgICAgICAgICAgICB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJDdWRhTWVtY2hlY2tDb21tYW5kIikpKSB7CisgICAgdGhpcy0+TWVtb3J5VGVzdGVyID0KKyAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkN1ZGFNZW1jaGVja0NvbW1hbmQiKTsKKyAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkNVREFfTUVNQ0hFQ0s7CiAgIH0KICAgaWYgKHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIk1lbW9yeUNoZWNrVHlwZSIpID09CiAgICAgICAiQWRkcmVzc1Nhbml0aXplciIpIHsKLSAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJDTWFrZUNvbW1hbmQiKTsKKyAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKTsKICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkFERFJFU1NfU0FOSVRJWkVSOwogICAgIHRoaXMtPkxvZ1dpdGhQSUQgPSB0cnVlOyAvLyBldmVuIGlmIHdlIGdpdmUgdGhlIGxvZyBmaWxlIHRoZSBwaWQgaXMgYWRkZWQKICAgfQogICBpZiAodGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiTWVtb3J5Q2hlY2tUeXBlIikgPT0KICAgICAgICJMZWFrU2FuaXRpemVyIikgewotICAgIHRoaXMtPk1lbW9yeVRlc3RlciA9IHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkNNYWtlQ29tbWFuZCIpOworICAgIHRoaXMtPk1lbW9yeVRlc3RlciA9IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpOwogICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6TEVBS19TQU5JVElaRVI7CiAgICAgdGhpcy0+TG9nV2l0aFBJRCA9IHRydWU7IC8vIGV2ZW4gaWYgd2UgZ2l2ZSB0aGUgbG9nIGZpbGUgdGhlIHBpZCBpcyBhZGRlZAogICB9CiAgIGlmICh0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJNZW1vcnlDaGVja1R5cGUiKSA9PQogICAgICAgIlRocmVhZFNhbml0aXplciIpIHsKLSAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJDTWFrZUNvbW1hbmQiKTsKKyAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKTsKICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlRIUkVBRF9TQU5JVElaRVI7CiAgICAgdGhpcy0+TG9nV2l0aFBJRCA9IHRydWU7IC8vIGV2ZW4gaWYgd2UgZ2l2ZSB0aGUgbG9nIGZpbGUgdGhlIHBpZCBpcyBhZGRlZAogICB9CiAgIGlmICh0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJNZW1vcnlDaGVja1R5cGUiKSA9PQogICAgICAgIk1lbW9yeVNhbml0aXplciIpIHsKLSAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJDTWFrZUNvbW1hbmQiKTsKKyAgICB0aGlzLT5NZW1vcnlUZXN0ZXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKTsKICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6Ok1FTU9SWV9TQU5JVElaRVI7CiAgICAgdGhpcy0+TG9nV2l0aFBJRCA9IHRydWU7IC8vIGV2ZW4gaWYgd2UgZ2l2ZSB0aGUgbG9nIGZpbGUgdGhlIHBpZCBpcyBhZGRlZAogICB9CiAgIGlmICh0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJNZW1vcnlDaGVja1R5cGUiKSA9PQogICAgICAgIlVuZGVmaW5lZEJlaGF2aW9yU2FuaXRpemVyIikgewotICAgIHRoaXMtPk1lbW9yeVRlc3RlciA9IHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkNNYWtlQ29tbWFuZCIpOworICAgIHRoaXMtPk1lbW9yeVRlc3RlciA9IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpOwogICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VUJfU0FOSVRJWkVSOwogICAgIHRoaXMtPkxvZ1dpdGhQSUQgPSB0cnVlOyAvLyBldmVuIGlmIHdlIGdpdmUgdGhlIGxvZyBmaWxlIHRoZSBwaWQgaXMgYWRkZWQKICAgfQpAQCAtNDk4LDYgKzUzNiwxMCBAQAogICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpCT1VORFNfQ0hFQ0tFUjsKICAgICB9IGVsc2UgaWYgKGNoZWNrVHlwZSA9PSAiVmFsZ3JpbmQiKSB7CiAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlZBTEdSSU5EOworICAgIH0gZWxzZSBpZiAoY2hlY2tUeXBlID09ICJEck1lbW9yeSIpIHsKKyAgICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlk7CisgICAgfSBlbHNlIGlmIChjaGVja1R5cGUgPT0gIkN1ZGFNZW1jaGVjayIpIHsKKyAgICAgIHRoaXMtPk1lbW9yeVRlc3RlclN0eWxlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6Q1VEQV9NRU1DSEVDSzsKICAgICB9CiAgIH0KICAgaWYgKHRoaXMtPk1lbW9yeVRlc3Rlci5lbXB0eSgpKSB7CkBAIC01MTksNiArNTYxLDE0IEBACiAgICAgICAgICAgICAgICAgLmVtcHR5KCkpIHsKICAgICBtZW1vcnlUZXN0ZXJPcHRpb25zID0KICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIlZhbGdyaW5kQ29tbWFuZE9wdGlvbnMiKTsKKyAgfSBlbHNlIGlmICghdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiRHJNZW1vcnlDb21tYW5kT3B0aW9ucyIpCisgICAgICAgICAgICAgICAgLmVtcHR5KCkpIHsKKyAgICBtZW1vcnlUZXN0ZXJPcHRpb25zID0KKyAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIkRyTWVtb3J5Q29tbWFuZE9wdGlvbnMiKTsKKyAgfSBlbHNlIGlmICghdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiQ3VkYU1lbWNoZWNrQ29tbWFuZE9wdGlvbnMiKQorICAgICAgICAgICAgICAgIC5lbXB0eSgpKSB7CisgICAgbWVtb3J5VGVzdGVyT3B0aW9ucyA9CisgICAgICB0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJDdWRhTWVtY2hlY2tDb21tYW5kT3B0aW9ucyIpOwogICB9CiAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMgPQogICAgIGNtU3lzdGVtVG9vbHM6OlBhcnNlQXJndW1lbnRzKG1lbW9yeVRlc3Rlck9wdGlvbnMpOwpAQCAtNTU0LDYgKzYwNCw2NCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck91dHB1dEZpbGUpOwogICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlk6IHsKKyAgICAgIHN0ZDo6c3RyaW5nIHRlbXBEck1lbW9yeURpciA9CisgICAgICAgIHRoaXMtPkNUZXN0LT5HZXRCaW5hcnlEaXIoKSArICIvVGVzdGluZy9UZW1wb3JhcnkvRHJNZW1vcnkiOworCisgICAgICBpZiAoIWNtOjpjb250YWlucyh0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLCAiLXF1aWV0IikpIHsKKyAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbXBsYWNlX2JhY2soIi1xdWlldCIpOworICAgICAgfQorCisgICAgICBpZiAoIWNtOjpjb250YWlucyh0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLCAiLWJhdGNoIikpIHsKKyAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbXBsYWNlX2JhY2soIi1iYXRjaCIpOworICAgICAgfQorCisgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJEeW5hbWljT3B0aW9ucy5lbXBsYWNlX2JhY2soIi1sb2dkaXIiKTsKKyAgICAgIGF1dG8gbG9nZGlyT3B0aW9uID0KKyAgICAgICAgc3RkOjpmaW5kKHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuZW5kKCksICItbG9nZGlyIik7CisgICAgICBpZiAobG9nZGlyT3B0aW9uID09IHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgLy8gTm8gbG9nZGlyIGZvdW5kIGluIG1lbW9yeSB0ZXN0ZXIgb3B0aW9ucworICAgICAgICBzdGQ6OnN0cmluZyBkck1lbW9yeUxvZ0RpciA9IHRlbXBEck1lbW9yeURpciArICIvPz8iOworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJEeW5hbWljT3B0aW9ucy5wdXNoX2JhY2soZHJNZW1vcnlMb2dEaXIpOworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJPdXRwdXRGaWxlID0gZHJNZW1vcnlMb2dEaXI7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBVc2UgbG9nZGlyIGZvdW5kIGluIG1lbW9yeSB0ZXN0ZXIgb3B0aW9ucworICAgICAgICBhdXRvIGxvZ2RpckxvY2F0aW9uID0gc3RkOjpuZXh0KGxvZ2Rpck9wdGlvbik7CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck91dHB1dEZpbGUgPSAqbG9nZGlyTG9jYXRpb247CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3RlckR5bmFtaWNPcHRpb25zLnB1c2hfYmFjaygqbG9nZGlyTG9jYXRpb24pOworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVyYXNlKGxvZ2Rpck9wdGlvbiwgbG9nZGlyTG9jYXRpb24gKyAxKTsKKyAgICAgIH0KKyAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck91dHB1dEZpbGUgKz0gIi8qL3Jlc3VsdHMudHh0IjsKKworICAgICAgaWYgKHN0ZDo6ZmluZCh0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICItc3ltY2FjaGVfZGlyIikgPT0gdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbmQoKSkgeworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJEeW5hbWljT3B0aW9ucy5lbXBsYWNlX2JhY2soIi1zeW1jYWNoZV9kaXIiKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgZHJNZW1vcnlDYWNoZURpciA9IHRlbXBEck1lbW9yeURpciArICIvY2FjaGUiOworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJEeW5hbWljT3B0aW9ucy5wdXNoX2JhY2soZHJNZW1vcnlDYWNoZURpcik7CisgICAgICB9CisKKyAgICAgIGlmICghdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiTWVtb3J5Q2hlY2tTdXBwcmVzc2lvbkZpbGUiKQorICAgICAgICAgICAgIC5lbXB0eSgpKSB7CisgICAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyh0aGlzLT5DVGVzdC0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAiTWVtb3J5Q2hlY2tTdXBwcmVzc2lvbkZpbGUiKSkpIHsKKyAgICAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAorICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBmaW5kIG1lbW9yeSBjaGVja2VyIHN1cHByZXNzaW9uIGZpbGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVtb3J5Q2hlY2tTdXBwcmVzc2lvbkZpbGUiKQorICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVtcGxhY2VfYmFjaygiLXN1cHByZXNzIik7CisgICAgICAgIHRoaXMtPk1lbW9yeVRlc3Rlck9wdGlvbnMucHVzaF9iYWNrKAorICAgICAgICAgIHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIk1lbW9yeUNoZWNrU3VwcHJlc3Npb25GaWxlIikpOworICAgICAgfQorCisgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVtcGxhY2VfYmFjaygiLS0iKTsKKworICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6UFVSSUZZOiB7CiAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXRGaWxlOwogI2lmZGVmIF9XSU4zMgpAQCAtNTk0LDYgKzcwMiwxOCBAQAogICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbXBsYWNlX2JhY2soIi9NIik7CiAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpDVURBX01FTUNIRUNLOiB7CisgICAgICAvLyBjdWRhLW1lbWNoZWNrIHNlcGFyYXRlcyBmbGFncyBmcm9tIGFyZ3VtZW50cyBieSBzcGFjZXMKKyAgICAgIGlmICh0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVtcHR5KCkpIHsKKyAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbXBsYWNlX2JhY2soIi0tdG9vbCIpOworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVtcGxhY2VfYmFjaygibWVtY2hlY2siKTsKKyAgICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyT3B0aW9ucy5lbXBsYWNlX2JhY2soIi0tbGVhay1jaGVjayIpOworICAgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJPcHRpb25zLmVtcGxhY2VfYmFjaygiZnVsbCIpOworICAgICAgfQorICAgICAgdGhpcy0+TWVtb3J5VGVzdGVyRHluYW1pY09wdGlvbnMuZW1wbGFjZV9iYWNrKCItLWxvZy1maWxlIik7CisgICAgICB0aGlzLT5NZW1vcnlUZXN0ZXJEeW5hbWljT3B0aW9ucy5wdXNoX2JhY2sodGhpcy0+TWVtb3J5VGVzdGVyT3V0cHV0RmlsZSk7CisgICAgICBicmVhazsKKyAgICB9CiAgICAgLy8gdGhlc2UgYXJlIGFsbW9zdCB0aGUgc2FtZSBidXQgdGhlIGVudiB2YXIgdXNlZCBpcyBkaWZmZXJlbnQKICAgICBjYXNlIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkFERFJFU1NfU0FOSVRJWkVSOgogICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6TEVBS19TQU5JVElaRVI6CkBAIC02NjcsNiArNzg3LDggQEAKICAgc3dpdGNoICh0aGlzLT5NZW1vcnlUZXN0ZXJTdHlsZSkgewogICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VkFMR1JJTkQ6CiAgICAgICByZXR1cm4gdGhpcy0+UHJvY2Vzc01lbUNoZWNrVmFsZ3JpbmRPdXRwdXQoc3RyLCBsb2csIHJlc3VsdHMpOworICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlk6CisgICAgICByZXR1cm4gdGhpcy0+UHJvY2Vzc01lbUNoZWNrRHJNZW1vcnlPdXRwdXQoc3RyLCBsb2csIHJlc3VsdHMpOwogICAgIGNhc2UgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6UFVSSUZZOgogICAgICAgcmV0dXJuIHRoaXMtPlByb2Nlc3NNZW1DaGVja1B1cmlmeU91dHB1dChzdHIsIGxvZywgcmVzdWx0cyk7CiAgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpBRERSRVNTX1NBTklUSVpFUjoKQEAgLTY3Nyw2ICs3OTksOCBAQAogICAgICAgcmV0dXJuIHRoaXMtPlByb2Nlc3NNZW1DaGVja1Nhbml0aXplck91dHB1dChzdHIsIGxvZywgcmVzdWx0cyk7CiAgICAgY2FzZSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpCT1VORFNfQ0hFQ0tFUjoKICAgICAgIHJldHVybiB0aGlzLT5Qcm9jZXNzTWVtQ2hlY2tCb3VuZHNDaGVja2VyT3V0cHV0KHN0ciwgbG9nLCByZXN1bHRzKTsKKyAgICBjYXNlIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OkNVREFfTUVNQ0hFQ0s6CisgICAgICByZXR1cm4gdGhpcy0+UHJvY2Vzc01lbUNoZWNrQ3VkYU91dHB1dChzdHIsIGxvZywgcmVzdWx0cyk7CiAgICAgZGVmYXVsdDoKICAgICAgIGxvZy5hcHBlbmQoIlxuTWVtb3J5IGNoZWNraW5nIHN0eWxlIHVzZWQgd2FzOiAiKTsKICAgICAgIGxvZy5hcHBlbmQoIk5vbmUgdGhhdCBJIGtub3ciKTsKQEAgLTg2MSwzNSArOTg1LDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbGdyaW5kICBsaW5lICIgPDwgbGluZXNbY2NdIDw8IHN0ZDo6ZW5kbCwKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5RdWlldCk7CiAgICAgICBpbnQgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6Ok5PX01FTU9SWV9GQVVMVDsKLSAgICAgIGlmICh2Z0ZJTS5maW5kKGxpbmVzW2NjXSkpIHsKKyAgICAgIGF1dG8mIGxpbmUgPSBsaW5lc1tjY107CisgICAgICBpZiAodmdGSU0uZmluZChsaW5lKSkgewogICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RklNOwotICAgICAgfSBlbHNlIGlmICh2Z0ZNTS5maW5kKGxpbmVzW2NjXSkpIHsKKyAgICAgIH0gZWxzZSBpZiAodmdGTU0uZmluZChsaW5lKSkgewogICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6Rk1NOwotICAgICAgfSBlbHNlIGlmICh2Z01MSzEuZmluZChsaW5lc1tjY10pKSB7CisgICAgICB9IGVsc2UgaWYgKHZnTUxLMS5maW5kKGxpbmUpIHx8IHZnTUxLMi5maW5kKGxpbmUpKSB7CiAgICAgICAgIGZhaWx1cmUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpNTEs7Ci0gICAgICB9IGVsc2UgaWYgKHZnTUxLMi5maW5kKGxpbmVzW2NjXSkpIHsKLSAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6Ok1MSzsKLSAgICAgIH0gZWxzZSBpZiAodmdQQVIuZmluZChsaW5lc1tjY10pKSB7CisgICAgICB9IGVsc2UgaWYgKHZnUEFSLmZpbmQobGluZSkpIHsKICAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlBBUjsKLSAgICAgIH0gZWxzZSBpZiAodmdNUEsxLmZpbmQobGluZXNbY2NdKSkgeworICAgICAgfSBlbHNlIGlmICh2Z01QSzEuZmluZChsaW5lKSB8fCB2Z01QSzIuZmluZChsaW5lKSkgewogICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6TVBLOwotICAgICAgfSBlbHNlIGlmICh2Z01QSzIuZmluZChsaW5lc1tjY10pKSB7Ci0gICAgICAgIGZhaWx1cmUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpNUEs7Ci0gICAgICB9IGVsc2UgaWYgKHZnVU1DLmZpbmQobGluZXNbY2NdKSkgeworICAgICAgfSBlbHNlIGlmICh2Z1VNQy5maW5kKGxpbmUpKSB7CiAgICAgICAgIGZhaWx1cmUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpVTUM7Ci0gICAgICB9IGVsc2UgaWYgKHZnVU1SMS5maW5kKGxpbmVzW2NjXSkpIHsKKyAgICAgIH0gZWxzZSBpZiAodmdVTVIxLmZpbmQobGluZSkgfHwgdmdVTVIyLmZpbmQobGluZSkgfHwgdmdVTVIzLmZpbmQobGluZSkgfHwKKyAgICAgICAgICAgICAgICAgdmdVTVI0LmZpbmQobGluZSkgfHwgdmdVTVI1LmZpbmQobGluZSkpIHsKICAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlVNUjsKLSAgICAgIH0gZWxzZSBpZiAodmdVTVIyLmZpbmQobGluZXNbY2NdKSkgewotICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VU1SOwotICAgICAgfSBlbHNlIGlmICh2Z1VNUjMuZmluZChsaW5lc1tjY10pKSB7Ci0gICAgICAgIGZhaWx1cmUgPSBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpVTVI7Ci0gICAgICB9IGVsc2UgaWYgKHZnVU1SNC5maW5kKGxpbmVzW2NjXSkpIHsKLSAgICAgICAgZmFpbHVyZSA9IGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlVNUjsKLSAgICAgIH0gZWxzZSBpZiAodmdVTVI1LmZpbmQobGluZXNbY2NdKSkgewotICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VU1SOwotICAgICAgfSBlbHNlIGlmICh2Z0lQVy5maW5kKGxpbmVzW2NjXSkpIHsKKyAgICAgIH0gZWxzZSBpZiAodmdJUFcuZmluZChsaW5lKSkgewogICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6SVBXOwotICAgICAgfSBlbHNlIGlmICh2Z0FCUi5maW5kKGxpbmVzW2NjXSkpIHsKKyAgICAgIH0gZWxzZSBpZiAodmdBQlIuZmluZChsaW5lKSkgewogICAgICAgICBmYWlsdXJlID0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6QUJSOwogICAgICAgfQogCkBAIC05MzIsNiArMTA0Niw0MyBAQAogICByZXR1cm4gZGVmZWN0cyA9PSAwOwogfQogCitib29sIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlByb2Nlc3NNZW1DaGVja0RyTWVtb3J5T3V0cHV0KAorICBjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZyYgbG9nLCBzdGQ6OnZlY3RvcjxpbnQ+JiByZXN1bHRzKQoreworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGluZXM7CisgIGNtc3lzOjpTeXN0ZW1Ub29sczo6U3BsaXQoc3RyLCBsaW5lcyk7CisKKyAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIGRyTWVtb3J5RXJyb3IoIl5FcnJvciAjWzAtOV0rIik7CisKKyAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIHVuYWRkcmVzc2FibGVBY2Nlc3MoIlVOQUREUkVTU0FCTEUgQUNDRVNTIik7CisgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiB1bmluaXRpYWxpemVkUmVhZCgiVU5JTklUSUFMSVpFRCBSRUFEIik7CisgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBpbnZhbGlkSGVhcEFyZ3VtZW50KCJJTlZBTElEIEhFQVAgQVJHVU1FTlQiKTsKKyAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIGxlYWsoIkxFQUsiKTsKKyAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIGhhbmRsZUxlYWsoIkhBTkRMRSBMRUFLIik7CisKKyAgaW50IGRlZmVjdHMgPSAwOworCisgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3RyOworICBmb3IgKGNvbnN0IGF1dG8mIGwgOiBsaW5lcykgeworICAgIG9zdHIgPDwgbCA8PCBzdGQ6OmVuZGw7CisgICAgaWYgKGRyTWVtb3J5RXJyb3IuZmluZChsKSkgeworICAgICAgZGVmZWN0cysrOworICAgICAgaWYgKHVuYWRkcmVzc2FibGVBY2Nlc3MuZmluZChsKSB8fCB1bmluaXRpYWxpemVkUmVhZC5maW5kKGwpKSB7CisgICAgICAgIHJlc3VsdHNbY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6VU1SXSsrOworICAgICAgfSBlbHNlIGlmIChsZWFrLmZpbmQobCkgfHwgaGFuZGxlTGVhay5maW5kKGwpKSB7CisgICAgICAgIHJlc3VsdHNbY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6TUxLXSsrOworICAgICAgfSBlbHNlIGlmIChpbnZhbGlkSGVhcEFyZ3VtZW50LmZpbmQobCkpIHsKKyAgICAgICAgcmVzdWx0c1tjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpGTU1dKys7CisgICAgICB9CisgICAgfQorICB9CisKKyAgbG9nID0gb3N0ci5zdHIoKTsKKworICB0aGlzLT5EZWZlY3RDb3VudCArPSBkZWZlY3RzOworICByZXR1cm4gZGVmZWN0cyA9PSAwOworfQorCiBib29sIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlByb2Nlc3NNZW1DaGVja0JvdW5kc0NoZWNrZXJPdXRwdXQoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nJiBsb2csIHN0ZDo6dmVjdG9yPGludD4mIHJlc3VsdHMpCiB7CkBAIC05ODIsNiArMTEzMywxMTkgQEAKICAgcmV0dXJuIGRlZmVjdHMgPT0gMDsKIH0KIAorYm9vbCBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpQcm9jZXNzTWVtQ2hlY2tDdWRhT3V0cHV0KAorICBjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZyYgbG9nLCBzdGQ6OnZlY3RvcjxpbnQ+JiByZXN1bHRzKQoreworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGluZXM7CisgIGNtc3lzOjpTeXN0ZW1Ub29sczo6U3BsaXQoc3RyLCBsaW5lcyk7CisgIGJvb2wgdW5saW1pdGVkT3V0cHV0ID0gZmFsc2U7CisgIGlmIChzdHIuZmluZCgiQ1RFU1RfRlVMTF9PVVRQVVQiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyB8fAorICAgICAgdGhpcy0+Q3VzdG9tTWF4aW11bUZhaWxlZFRlc3RPdXRwdXRTaXplID09IDApIHsKKyAgICB1bmxpbWl0ZWRPdXRwdXQgPSB0cnVlOworICB9CisKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBjYzsKKworICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3N0cjsKKyAgbG9nLmNsZWFyKCk7CisKKyAgaW50IGRlZmVjdHMgPSAwOworCisgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBtZW1jaGVja0xpbmUoIl49PT09PT09PSIpOworCisgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBsZWFrRXhwcigiPT0gTGVha2VkIFswLTksXSsgYnl0ZXMgYXQiKTsKKworICAvLyBsaXN0IG9mIG1hdGNoZXJzIGZvciBvdXRwdXQgbWVzc2FnZXMgdGhhdCBjb250YWluIHZhcmlhYmxlIGNvbnRlbnQKKyAgLy8gKGFkZHJlc3Nlcywgc2l6ZXMsIC4uLikgb3IgY2FuIGJlIHNob3J0ZW5lZCBpbiBnZW5lcmFsLiB0aGUgZmlyc3QgbWF0Y2ggaXMKKyAgLy8gdXNlZCBhcyBhIGVycm9yIG5hbWUuCisgIHN0ZDo6dmVjdG9yPGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbj4gbWF0Y2hlcnN7CisgICAgLy8gQVBJIGVycm9ycworICAgICI9PSBNYWxsb2MvRnJlZSBlcnJvciBlbmNvdW50ZXJlZDogKC4qKSIsCisgICAgIj09IFByb2dyYW0gaGl0IGVycm9yIChbXiBdKikuKiBvbiBDVURBIEFQSSBjYWxsIHRvIiwKKyAgICAiPT0gUHJvZ3JhbSBoaXQgKFteIF0qKS4qIG9uIENVREEgQVBJIGNhbGwgdG8iLAorICAgIC8vIG1lbWNoZWNrCisgICAgIj09IChJbnZhbGlkIC4qKSBvZiBzaXplIFswLTksXSsiLCAiPT0gKEZhdGFsIFVWTSBbQ0ddUFUgZmF1bHQpIiwKKyAgICAvLyByYWNlY2hlY2sKKyAgICAiPT0gLiogKFBvdGVudGlhbCAuKiBoYXphcmQgZGV0ZWN0ZWQpIiwgIj09IC4qIChSYWNlIHJlcG9ydGVkKSIsCisgICAgLy8gc3luY2NoZWNrCisgICAgIj09IChCYXJyaWVyIGVycm9yKSIsCisgICAgLy8gaW5pdGNoZWNrCisgICAgIj09IChVbmluaXRpYWxpemVkIC4qIG1lbW9yeSByZWFkKSIsICI9PSAoVW51c2VkIG1lbW9yeSkiLAorICAgICI9PSAoSG9zdCBBUEkgbWVtb3J5IGFjY2VzcyBlcnJvcikiLAorICAgIC8vIGdlbmVyaWMgZXJyb3I6IGlnbm9yZSBFUlJPUiBTVU1NQVJZLCBDVURBLU1FTUNIRUNLIGFuZCBvdGhlcnMKKyAgICAiPT0gKFtBLVpdW2Etel0uKikiCisgIH07CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc6OnNpemVfdHlwZT4gbm9uTWVtY2hlY2tPdXRwdXQ7CisgIGF1dG8gc3R0aW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CisgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgREVCVUcsCisgICAgICAgICAgICAgICAgICAgICAiU3RhcnQgdGVzdDogIiA8PCBsaW5lcy5zaXplKCkgPDwgc3RkOjplbmRsLCB0aGlzLT5RdWlldCk7CisgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgdG90YWxPdXRwdXRTaXplID0gMDsKKyAgZm9yIChjYyA9IDA7IGNjIDwgbGluZXMuc2l6ZSgpOyBjYysrKSB7CisgICAgY21DVGVzdE9wdGlvbmFsTG9nKHRoaXMtPkNUZXN0LCBERUJVRywKKyAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgbGluZSAiIDw8IGxpbmVzW2NjXSA8PCBzdGQ6OmVuZGwsIHRoaXMtPlF1aWV0KTsKKworICAgIGlmIChtZW1jaGVja0xpbmUuZmluZChsaW5lc1tjY10pKSB7CisgICAgICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIERFQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjdWRhLW1lbWNoZWNrIGxpbmUgIiA8PCBsaW5lc1tjY10gPDwgc3RkOjplbmRsLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKKyAgICAgIGludCBmYWlsdXJlID0gLTE7CisgICAgICBhdXRvJiBsaW5lID0gbGluZXNbY2NdOworICAgICAgaWYgKGxlYWtFeHByLmZpbmQobGluZSkpIHsKKyAgICAgICAgZmFpbHVyZSA9IHN0YXRpY19jYXN0PGludD4odGhpcy0+RmluZE9yQWRkV2FybmluZygiTWVtb3J5IGxlYWsiKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGF1dG8mIG1hdGNoZXIgOiBtYXRjaGVycykgeworICAgICAgICAgIGlmIChtYXRjaGVyLmZpbmQobGluZSkpIHsKKyAgICAgICAgICAgIGZhaWx1cmUgPQorICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRoaXMtPkZpbmRPckFkZFdhcm5pbmcobWF0Y2hlci5tYXRjaCgxKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChmYWlsdXJlID49IDApIHsKKyAgICAgICAgb3N0ciA8PCAiPGI+IiA8PCB0aGlzLT5SZXN1bHRTdHJpbmdzW2ZhaWx1cmVdIDw8ICI8L2I+ICI7CisgICAgICAgIGlmIChyZXN1bHRzLmVtcHR5KCkgfHwgdW5zaWduZWQoZmFpbHVyZSkgPiByZXN1bHRzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgICByZXN1bHRzLnB1c2hfYmFjaygxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXN1bHRzW2ZhaWx1cmVdKys7CisgICAgICAgIH0KKyAgICAgICAgZGVmZWN0cysrOworICAgICAgfQorICAgICAgdG90YWxPdXRwdXRTaXplICs9IGxpbmVzW2NjXS5zaXplKCk7CisgICAgICBvc3RyIDw8IGxpbmVzW2NjXSA8PCBzdGQ6OmVuZGw7CisgICAgfSBlbHNlIHsKKyAgICAgIG5vbk1lbWNoZWNrT3V0cHV0LnB1c2hfYmFjayhjYyk7CisgICAgfQorICB9CisgIC8vIE5vdyBwdXQgYWxsIGFsbCB0aGUgbm9uIGN1ZGEtbWVtY2hlY2sgb3V0cHV0IGludG8gdGhlIHRlc3Qgb3V0cHV0CisgIC8vIFRoaXMgc2hvdWxkIGJlIGxhc3QgaW4gY2FzZSBpdCBnZXRzIHRydW5jYXRlZCBieSB0aGUgb3V0cHV0CisgIC8vIGxpbWl0aW5nIGNvZGUKKyAgZm9yIChzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGkgOiBub25NZW1jaGVja091dHB1dCkgeworICAgIHRvdGFsT3V0cHV0U2l6ZSArPSBsaW5lc1tpXS5zaXplKCk7CisgICAgb3N0ciA8PCBsaW5lc1tpXSA8PCBzdGQ6OmVuZGw7CisgICAgaWYgKCF1bmxpbWl0ZWRPdXRwdXQgJiYKKyAgICAgICAgdG90YWxPdXRwdXRTaXplID4KKyAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHRoaXMtPkN1c3RvbU1heGltdW1GYWlsZWRUZXN0T3V0cHV0U2l6ZSkpIHsKKyAgICAgIG9zdHIgPDwgIi4uLi5cbiI7CisgICAgICBvc3RyIDw8ICJUZXN0IE91dHB1dCBmb3IgdGhpcyB0ZXN0IGhhcyBiZWVuIHRydW5jYXRlZCBzZWUgdGVzdGluZyIKKyAgICAgICAgICAgICAgIiBtYWNoaW5lIGxvZ3MgZm9yIGZ1bGwgb3V0cHV0LFxuIjsKKyAgICAgIG9zdHIgPDwgIm9yIHB1dCBDVEVTVF9GVUxMX09VVFBVVCBpbiB0aGUgb3V0cHV0IG9mICIKKyAgICAgICAgICAgICAgInRoaXMgdGVzdCBwcm9ncmFtLlxuIjsKKyAgICAgIGJyZWFrOyAvLyBzdG9wIHRoZSBjb3B5IG9mIG91dHB1dCBpZiB3ZSBhcmUgZnVsbAorICAgIH0KKyAgfQorICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIERFQlVHLAorICAgICAgICAgICAgICAgICAgICAgIkVuZCB0ZXN0IChlbGFwc2VkOiAiCisgICAgICAgICAgICAgICAgICAgICAgIDw8IGNtRHVyYXRpb25Ubzx1bnNpZ25lZCBpbnQ+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIC0gc3R0aW1lKQorICAgICAgICAgICAgICAgICAgICAgICA8PCAicykiIDw8IHN0ZDo6ZW5kbCwKKyAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKKyAgbG9nID0gb3N0ci5zdHIoKTsKKyAgdGhpcy0+RGVmZWN0Q291bnQgKz0gZGVmZWN0czsKKyAgcmV0dXJuIGRlZmVjdHMgPT0gMDsKK30KKwogLy8gUG9zdFByb2Nlc3NUZXN0IG1lbWNoZWNrIHJlc3VsdHMKIHZvaWQgY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6UG9zdFByb2Nlc3NUZXN0KGNtQ1Rlc3RUZXN0UmVzdWx0JiByZXMsIGludCB0ZXN0KQogewpAQCAtOTkxLDYgKzEyNTUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOwogICBpZiAodGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPT0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6Qk9VTkRTX0NIRUNLRVIpIHsKICAgICB0aGlzLT5Qb3N0UHJvY2Vzc0JvdW5kc0NoZWNrZXJUZXN0KHJlcywgdGVzdCk7CisgIH0gZWxzZSBpZiAodGhpcy0+TWVtb3J5VGVzdGVyU3R5bGUgPT0gY21DVGVzdE1lbUNoZWNrSGFuZGxlcjo6RFJNRU1PUlkpIHsKKyAgICB0aGlzLT5Qb3N0UHJvY2Vzc0RyTWVtb3J5VGVzdChyZXMsIHRlc3QpOwogICB9IGVsc2UgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlczsKICAgICB0aGlzLT5UZXN0T3V0cHV0RmlsZU5hbWVzKHRlc3QsIGZpbGVzKTsKQEAgLTEwNDUsNiArMTMxMSwzNyBAQAogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UXVpZXQpOwogfQogCit2b2lkIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXI6OlBvc3RQcm9jZXNzRHJNZW1vcnlUZXN0KAorICBjbUNUZXN0VGVzdEhhbmRsZXI6OmNtQ1Rlc3RUZXN0UmVzdWx0JiByZXMsIGludCB0ZXN0KQoreworICBzdGQ6OnN0cmluZyBkck1lbW9yeUxvZ0RpciA9IHRoaXMtPk1lbW9yeVRlc3Rlck91dHB1dEZpbGUuc3Vic3RyKAorICAgIDAsIHRoaXMtPk1lbW9yeVRlc3Rlck91dHB1dEZpbGUuZmluZCgiLyovcmVzdWx0cy50eHQiKSk7CisKKyAgLy8gcmVwbGFjZSBwbGFjZWhvbGRlciBvZiB0ZXN0CisgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gZHJNZW1vcnlMb2dEaXIuZmluZCgiPz8iKTsKKyAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgIGRyTWVtb3J5TG9nRGlyLnJlcGxhY2UocG9zLCAyLCBzdGQ6OnRvX3N0cmluZyh0ZXN0KSk7CisgIH0KKworICBjbXN5czo6R2xvYiBnOworICBnLkZpbmRGaWxlcyhkck1lbW9yeUxvZ0RpciArICIvcmVzZmlsZS4qIik7CisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZmlsZXMgPSBnLkdldEZpbGVzKCk7CisKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgZiA6IGZpbGVzKSB7CisgICAgY21zeXM6Omlmc3RyZWFtIGlmcyhmLmNfc3RyKCkpOworICAgIGlmICghaWZzKSB7CisgICAgICBzdGQ6OnN0cmluZyBsb2cgPSAiQ2Fubm90IHJlYWQgbWVtb3J5IHRlc3RlciBvdXRwdXQgZmlsZTogIiArIGY7CisgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLCBsb2cgPDwgc3RkOjplbmRsKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0RmlsZUxvY2F0aW9uOworICAgIGNtU3lzdGVtVG9vbHM6OkdldExpbmVGcm9tU3RyZWFtKGlmcywgcmVzdWx0RmlsZUxvY2F0aW9uKTsKKyAgICB0aGlzLT5BcHBlbmRNZW1UZXN0ZXJPdXRwdXQocmVzLCByZXN1bHRGaWxlTG9jYXRpb24pOworICAgIGlmcy5jbG9zZSgpOworICAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoZik7CisgIH0KK30KKwogdm9pZCBjbUNUZXN0TWVtQ2hlY2tIYW5kbGVyOjpBcHBlbmRNZW1UZXN0ZXJPdXRwdXQoY21DVGVzdFRlc3RSZXN1bHQmIHJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvZmlsZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE1lbUNoZWNrSGFuZGxlci5oCmluZGV4IGVkYTY1ZjcuLjYzYWI1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0TWVtQ2hlY2tIYW5kbGVyLmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RNZW1DaGVja0hhbmRsZXIuaApAQCAtNDMsOCArNDMsMTAgQEAKICAgICBVTktOT1dOID0gMCwKICAgICBWQUxHUklORCwKICAgICBQVVJJRlksCisgICAgRFJNRU1PUlksCiAgICAgQk9VTkRTX0NIRUNLRVIsCiAgICAgLy8gY2hlY2tlcnMgYWZ0ZXIgaGVyZSBkbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBlcnJvciBsaXN0CisgICAgQ1VEQV9NRU1DSEVDSywKICAgICBBRERSRVNTX1NBTklUSVpFUiwKICAgICBMRUFLX1NBTklUSVpFUiwKICAgICBUSFJFQURfU0FOSVRJWkVSLApAQCAtMTMyLDggKzEzNCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+JiByZXN1bHRzKTsKICAgYm9vbCBQcm9jZXNzTWVtQ2hlY2tWYWxncmluZE91dHB1dChjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZyYgbG9nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4mIHJlc3VsdHMpOworICBib29sIFByb2Nlc3NNZW1DaGVja0RyTWVtb3J5T3V0cHV0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nJiBsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiYgcmVzdWx0cyk7CiAgIGJvb2wgUHJvY2Vzc01lbUNoZWNrUHVyaWZ5T3V0cHV0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6c3RyaW5nJiBsb2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4mIHJlc3VsdHMpOworICBib29sIFByb2Nlc3NNZW1DaGVja0N1ZGFPdXRwdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwgc3RkOjpzdHJpbmcmIGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGludD4mIHJlc3VsdHMpOwogICBib29sIFByb2Nlc3NNZW1DaGVja1Nhbml0aXplck91dHB1dChjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZyYgbG9nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+JiByZXN1bHRzKTsKICAgYm9vbCBQcm9jZXNzTWVtQ2hlY2tCb3VuZHNDaGVja2VyT3V0cHV0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsCkBAIC0xNDIsNiArMTQ4LDcgQEAKIAogICB2b2lkIFBvc3RQcm9jZXNzVGVzdChjbUNUZXN0VGVzdFJlc3VsdCYgcmVzLCBpbnQgdGVzdCk7CiAgIHZvaWQgUG9zdFByb2Nlc3NCb3VuZHNDaGVja2VyVGVzdChjbUNUZXN0VGVzdFJlc3VsdCYgcmVzLCBpbnQgdGVzdCk7CisgIHZvaWQgUG9zdFByb2Nlc3NEck1lbW9yeVRlc3QoY21DVGVzdFRlc3RSZXN1bHQmIHJlcywgaW50IHRlc3QpOwogCiAgIC8vISBhcHBlbmQgTWVtb3J5VGVzdGVyT3V0cHV0RmlsZSB0byB0aGUgdGVzdCBsb2cKICAgdm9pZCBBcHBlbmRNZW1UZXN0ZXJPdXRwdXQoY21DVGVzdFRlc3RIYW5kbGVyOjpjbUNUZXN0VGVzdFJlc3VsdCYgcmVzLApkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlci5jeHgKaW5kZXggMDJkMzk2ZS4uYTA4Y2IzNCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXIuY3h4CkBAIC02LDI4ICs2LDI5IEBACiAjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxpb21hbmlwPgogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RhY2s+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKyNpbmNsdWRlIDxjbTNwL2pzb24vd3JpdGVyLmg+CisjaW5jbHVkZSA8Y20zcC91di5oPgorCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvU3lzdGVtSW5mb3JtYXRpb24uaHh4IgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgotI2luY2x1ZGUgImNtX2pzb25jcHBfd3JpdGVyLmgiCi0jaW5jbHVkZSAiY21fdXYuaCIKLQogI2luY2x1ZGUgImNtQWZmaW5pdHkuaCIKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdEJpblBhY2tlci5oIgogI2luY2x1ZGUgImNtQ1Rlc3RSdW5UZXN0LmgiCkBAIC0xMzYsNyArMTM3LDcgQEAKICAgdXZfcnVuKCZ0aGlzLT5Mb29wLCBVVl9SVU5fREVGQVVMVCk7CiAgIHV2X2xvb3BfY2xvc2UoJnRoaXMtPkxvb3ApOwogCi0gIGlmICghdGhpcy0+U3RvcFRpbWVQYXNzZWQpIHsKKyAgaWYgKCF0aGlzLT5TdG9wVGltZVBhc3NlZCAmJiAhdGhpcy0+Q2hlY2tTdG9wT25GYWlsdXJlKCkpIHsKICAgICBhc3NlcnQodGhpcy0+Q29tcGxldGVkID09IHRoaXMtPlRvdGFsKTsKICAgICBhc3NlcnQodGhpcy0+VGVzdHMuZW1wdHkoKSk7CiAgIH0KQEAgLTE3MCwxMCArMTcxLDExIEBACiAgIHRoaXMtPkVyYXNlVGVzdCh0ZXN0KTsKICAgdGhpcy0+UnVubmluZ0NvdW50ICs9IEdldFByb2Nlc3NvcnNVc2VkKHRlc3QpOwogCi0gIGNtQ1Rlc3RSdW5UZXN0KiB0ZXN0UnVuID0gbmV3IGNtQ1Rlc3RSdW5UZXN0KCp0aGlzKTsKLSAgaWYgKHRoaXMtPkNUZXN0LT5HZXRSZXBlYXRVbnRpbEZhaWwoKSkgewotICAgIHRlc3RSdW4tPlNldFJ1blVudGlsRmFpbE9uKCk7Ci0gICAgdGVzdFJ1bi0+U2V0TnVtYmVyT2ZSdW5zKHRoaXMtPkNUZXN0LT5HZXRUZXN0UmVwZWF0KCkpOworICBhdXRvIHRlc3RSdW4gPSBjbTo6bWFrZV91bmlxdWU8Y21DVGVzdFJ1blRlc3Q+KCp0aGlzKTsKKworICBpZiAodGhpcy0+UmVwZWF0TW9kZSAhPSBjbUNUZXN0OjpSZXBlYXQ6Ok5ldmVyKSB7CisgICAgdGVzdFJ1bi0+U2V0UmVwZWF0TW9kZSh0aGlzLT5SZXBlYXRNb2RlKTsKKyAgICB0ZXN0UnVuLT5TZXROdW1iZXJPZlJ1bnModGhpcy0+UmVwZWF0Q291bnQpOwogICB9CiAgIHRlc3RSdW4tPlNldEluZGV4KHRlc3QpOwogICB0ZXN0UnVuLT5TZXRUZXN0UHJvcGVydGllcyh0aGlzLT5Qcm9wZXJ0aWVzW3Rlc3RdKTsKQEAgLTE4NSw3ICsxODcsNyBAQAogICAvLyBGaW5kIGFueSBmYWlsZWQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHRlc3QuIFdlIGFzc3VtZSB0aGUgbW9yZSBjb21tb24KICAgLy8gc2NlbmFyaW8gaGFzIG5vIGZhaWxlZCB0ZXN0cywgc28gbWFrZSBpdCB0aGUgb3V0ZXIgbG9vcC4KICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZiA6ICp0aGlzLT5GYWlsZWQpIHsKLSAgICBpZiAoY21Db250YWlucyh0aGlzLT5Qcm9wZXJ0aWVzW3Rlc3RdLT5SZXF1aXJlU3VjY2Vzc0RlcGVuZHMsIGYpKSB7CisgICAgaWYgKGNtOjpjb250YWlucyh0aGlzLT5Qcm9wZXJ0aWVzW3Rlc3RdLT5SZXF1aXJlU3VjY2Vzc0RlcGVuZHMsIGYpKSB7CiAgICAgICB0ZXN0UnVuLT5BZGRGYWlsZWREZXBlbmRlbmN5KGYpOwogICAgIH0KICAgfQpAQCAtMTk0LDI4ICsxOTYsNTggQEAKICAgLy8gd29ya2luZyBkaXJlY3RvcnkgYmVjYXVzZSBGaW5pc2hUZXN0UHJvY2VzcygpIHdpbGwgdHJ5IHRvIHVubG9jayB0aGVtCiAgIHRoaXMtPkxvY2tSZXNvdXJjZXModGVzdCk7CiAKLSAgaWYgKCF0aGlzLT5UZXN0c0hhdmVTdWZmaWNpZW50UmVzb3VyY2VzW3Rlc3RdKSB7Ci0gICAgdGVzdFJ1bi0+U3RhcnRGYWlsdXJlKCJJbnN1ZmZpY2llbnQgcmVzb3VyY2VzIik7Ci0gICAgdGhpcy0+RmluaXNoVGVzdFByb2Nlc3ModGVzdFJ1biwgZmFsc2UpOworICBpZiAoIXRoaXMtPlJlc291cmNlQWxsb2NhdGlvbkVycm9yc1t0ZXN0XS5lbXB0eSgpKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgZSA8PCAiSW5zdWZmaWNpZW50IHJlc291cmNlcyBmb3IgdGVzdCAiIDw8IHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPk5hbWUKKyAgICAgIDw8ICI6XG5cbiI7CisgICAgZm9yIChhdXRvIGNvbnN0JiBpdCA6IHRoaXMtPlJlc291cmNlQWxsb2NhdGlvbkVycm9yc1t0ZXN0XSkgeworICAgICAgc3dpdGNoIChpdC5zZWNvbmQpIHsKKyAgICAgICAgY2FzZSBSZXNvdXJjZUFsbG9jYXRpb25FcnJvcjo6Tm9SZXNvdXJjZVR5cGU6CisgICAgICAgICAgZSA8PCAiICBUZXN0IHJlcXVlc3RlZCByZXNvdXJjZXMgb2YgdHlwZSAnIiA8PCBpdC5maXJzdAorICAgICAgICAgICAgPDwgIicgd2hpY2ggZG9lcyBub3QgZXhpc3RcbiI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBSZXNvdXJjZUFsbG9jYXRpb25FcnJvcjo6SW5zdWZmaWNpZW50UmVzb3VyY2VzOgorICAgICAgICAgIGUgPDwgIiAgVGVzdCByZXF1ZXN0ZWQgcmVzb3VyY2VzIG9mIHR5cGUgJyIgPDwgaXQuZmlyc3QKKyAgICAgICAgICAgIDw8ICInIGluIHRoZSBmb2xsb3dpbmcgYW1vdW50czpcbiI7CisgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBncm91cCA6IHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPlJlc291cmNlR3JvdXBzKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIHJlcXVpcmVtZW50IDogZ3JvdXApIHsKKyAgICAgICAgICAgICAgaWYgKHJlcXVpcmVtZW50LlJlc291cmNlVHlwZSA9PSBpdC5maXJzdCkgeworICAgICAgICAgICAgICAgIGUgPDwgIiAgICAiIDw8IHJlcXVpcmVtZW50LlNsb3RzTmVlZGVkCisgICAgICAgICAgICAgICAgICA8PCAocmVxdWlyZW1lbnQuU2xvdHNOZWVkZWQgPT0gMSA/ICIgc2xvdFxuIiA6ICIgc2xvdHNcbiIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGUgPDwgIiAgYnV0IG9ubHkgdGhlIGZvbGxvd2luZyB1bml0cyB3ZXJlIGF2YWlsYWJsZTpcbiI7CisgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiByZXMgOgorICAgICAgICAgICAgICAgdGhpcy0+UmVzb3VyY2VBbGxvY2F0b3IuR2V0UmVzb3VyY2VzKCkuYXQoaXQuZmlyc3QpKSB7CisgICAgICAgICAgICBlIDw8ICIgICAgJyIgPDwgcmVzLmZpcnN0IDw8ICInOiAiIDw8IHJlcy5zZWNvbmQuVG90YWwKKyAgICAgICAgICAgICAgPDwgKHJlcy5zZWNvbmQuVG90YWwgPT0gMSA/ICIgc2xvdFxuIiA6ICIgc2xvdHNcbiIpOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGUgPDwgIlxuIjsKKyAgICB9CisgICAgZSA8PCAiUmVzb3VyY2Ugc3BlYyBmaWxlOlxuXG4gICIgPDwgdGhpcy0+VGVzdEhhbmRsZXItPlJlc291cmNlU3BlY0ZpbGU7CisgICAgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0RmFpbHVyZShzdGQ6Om1vdmUodGVzdFJ1biksIGUuc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5zdWZmaWNpZW50IHJlc291cmNlcyIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCiAgIGNtV29ya2luZ0RpcmVjdG9yeSB3b3JrZGlyKHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPkRpcmVjdG9yeSk7CiAgIGlmICh3b3JrZGlyLkZhaWxlZCgpKSB7Ci0gICAgdGVzdFJ1bi0+U3RhcnRGYWlsdXJlKCJGYWlsZWQgdG8gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5IHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Qcm9wZXJ0aWVzW3Rlc3RdLT5EaXJlY3RvcnkgKyAiIDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyZXJyb3Iod29ya2Rpci5HZXRMYXN0UmVzdWx0KCkpKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAodGVzdFJ1bi0+U3RhcnRUZXN0KHRoaXMtPkNvbXBsZXRlZCwgdGhpcy0+VG90YWwpKSB7Ci0gICAgICAvLyBPd25lcnNoaXAgb2YgJ3Rlc3RSdW4nIGhhcyBtb3ZlZCB0byBhbm90aGVyIHN0cnVjdHVyZS4KLSAgICAgIC8vIFdoZW4gdGhlIHRlc3QgZmluaXNoZXMsIEZpbmlzaFRlc3RQcm9jZXNzIHdpbGwgYmUgY2FsbGVkLgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydEZhaWx1cmUoc3RkOjptb3ZlKHRlc3RSdW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkgdG8gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlByb3BlcnRpZXNbdGVzdF0tPkRpcmVjdG9yeSArICIgOiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJlcnJvcih3b3JrZGlyLkdldExhc3RSZXN1bHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSIpOworICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIC8vIFBhc3Mgb3duZXJzaGlwIG9mICd0ZXN0UnVuJy4KLSAgdGhpcy0+RmluaXNoVGVzdFByb2Nlc3ModGVzdFJ1biwgZmFsc2UpOwotICByZXR1cm4gZmFsc2U7CisgIC8vIE93bmVyc2hpcCBvZiAndGVzdFJ1bicgaGFzIG1vdmVkIHRvIGFub3RoZXIgc3RydWN0dXJlLgorICAvLyBXaGVuIHRoZSB0ZXN0IGZpbmlzaGVzLCBGaW5pc2hUZXN0UHJvY2VzcyB3aWxsIGJlIGNhbGxlZC4KKyAgcmV0dXJuIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydFRlc3Qoc3RkOjptb3ZlKHRlc3RSdW4pLCB0aGlzLT5Db21wbGV0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlRvdGFsKTsKIH0KIAogYm9vbCBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjo6QWxsb2NhdGVSZXNvdXJjZXMoaW50IGluZGV4KQpAQCAtMjQ3LDcgKzI3OSw4IEBACiAKIGJvb2wgY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXI6OlRyeUFsbG9jYXRlUmVzb3VyY2VzKAogICBpbnQgaW5kZXgsCi0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxjbUNUZXN0QmluUGFja2VyQWxsb2NhdGlvbj4+JiBhbGxvY2F0aW9ucykKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGNtQ1Rlc3RCaW5QYWNrZXJBbGxvY2F0aW9uPj4mIGFsbG9jYXRpb25zLAorICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgUmVzb3VyY2VBbGxvY2F0aW9uRXJyb3I+KiBlcnJvcnMpCiB7CiAgIGFsbG9jYXRpb25zLmNsZWFyKCk7CiAKQEAgLTI2MiwxOCArMjk1LDI4IEBACiAgICAgKytwcm9jZXNzSW5kZXg7CiAgIH0KIAorICBib29sIHJlc3VsdCA9IHRydWU7CiAgIGF1dG8gY29uc3QmIGF2YWlsYWJsZVJlc291cmNlcyA9IHRoaXMtPlJlc291cmNlQWxsb2NhdG9yLkdldFJlc291cmNlcygpOwogICBmb3IgKGF1dG8mIGl0IDogYWxsb2NhdGlvbnMpIHsKICAgICBpZiAoIWF2YWlsYWJsZVJlc291cmNlcy5jb3VudChpdC5maXJzdCkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFjbUFsbG9jYXRlQ1Rlc3RSZXNvdXJjZXNSb3VuZFJvYmluKGF2YWlsYWJsZVJlc291cmNlcy5hdChpdC5maXJzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LnNlY29uZCkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGlmIChlcnJvcnMpIHsKKyAgICAgICAgKCplcnJvcnMpW2l0LmZpcnN0XSA9IFJlc291cmNlQWxsb2NhdGlvbkVycm9yOjpOb1Jlc291cmNlVHlwZTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfSBlbHNlIGlmICghY21BbGxvY2F0ZUNUZXN0UmVzb3VyY2VzUm91bmRSb2JpbigKKyAgICAgICAgICAgICAgICAgYXZhaWxhYmxlUmVzb3VyY2VzLmF0KGl0LmZpcnN0KSwgaXQuc2Vjb25kKSkgeworICAgICAgaWYgKGVycm9ycykgeworICAgICAgICAoKmVycm9ycylbaXQuZmlyc3RdID0gUmVzb3VyY2VBbGxvY2F0aW9uRXJyb3I6Okluc3VmZmljaWVudFJlc291cmNlczsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CiAgICAgfQogICB9CiAKLSAgcmV0dXJuIHRydWU7CisgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXI6OkRlYWxsb2NhdGVSZXNvdXJjZXMoaW50IGluZGV4KQpAQCAtMzE0LDE0ICszNTcsMjEgQEAKIAogdm9pZCBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjo6Q2hlY2tSZXNvdXJjZXNBdmFpbGFibGUoKQogewotICBmb3IgKGF1dG8gdGVzdCA6IHRoaXMtPlNvcnRlZFRlc3RzKSB7Ci0gICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGNtQ1Rlc3RCaW5QYWNrZXJBbGxvY2F0aW9uPj4gYWxsb2NhdGlvbnM7Ci0gICAgdGhpcy0+VGVzdHNIYXZlU3VmZmljaWVudFJlc291cmNlc1t0ZXN0XSA9Ci0gICAgICAhdGhpcy0+VGVzdEhhbmRsZXItPlVzZVJlc291cmNlU3BlYyB8fAotICAgICAgdGhpcy0+VHJ5QWxsb2NhdGVSZXNvdXJjZXModGVzdCwgYWxsb2NhdGlvbnMpOworICBpZiAodGhpcy0+VGVzdEhhbmRsZXItPlVzZVJlc291cmNlU3BlYykgeworICAgIGZvciAoYXV0byB0ZXN0IDogdGhpcy0+U29ydGVkVGVzdHMpIHsKKyAgICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxjbUNUZXN0QmluUGFja2VyQWxsb2NhdGlvbj4+CisgICAgICAgIGFsbG9jYXRpb25zOworICAgICAgdGhpcy0+VHJ5QWxsb2NhdGVSZXNvdXJjZXModGVzdCwgYWxsb2NhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhpcy0+UmVzb3VyY2VBbGxvY2F0aW9uRXJyb3JzW3Rlc3RdKTsKKyAgICB9CiAgIH0KIH0KIAorYm9vbCBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjo6Q2hlY2tTdG9wT25GYWlsdXJlKCkKK3sKKyAgcmV0dXJuIHRoaXMtPkNUZXN0LT5HZXRTdG9wT25GYWlsdXJlKCk7Cit9CisKIGJvb2wgY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXI6OkNoZWNrU3RvcFRpbWVQYXNzZWQoKQogewogICBpZiAoIXRoaXMtPlN0b3BUaW1lUGFzc2VkKSB7CkBAIC0zOTksMTMgKzQ0OSwxMyBAQAogewogICAvLyBDaGVjayBmb3IgbG9ja2VkIHJlc291cmNlcwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogdGhpcy0+UHJvcGVydGllc1t0ZXN0XS0+TG9ja2VkUmVzb3VyY2VzKSB7Ci0gICAgaWYgKGNtQ29udGFpbnModGhpcy0+TG9ja2VkUmVzb3VyY2VzLCBpKSkgeworICAgIGlmIChjbTo6Y29udGFpbnModGhpcy0+TG9ja2VkUmVzb3VyY2VzLCBpKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgfQogCiAgIC8vIEFsbG9jYXRlIHJlc291cmNlcwotICBpZiAodGhpcy0+VGVzdHNIYXZlU3VmZmljaWVudFJlc291cmNlc1t0ZXN0XSAmJgorICBpZiAodGhpcy0+UmVzb3VyY2VBbGxvY2F0aW9uRXJyb3JzW3Rlc3RdLmVtcHR5KCkgJiYKICAgICAgICF0aGlzLT5BbGxvY2F0ZVJlc291cmNlcyh0ZXN0KSkgewogICAgIHRoaXMtPkRlYWxsb2NhdGVSZXNvdXJjZXModGVzdCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDM4LDYgKzQ4OCwxMCBAQAogICAgIHJldHVybjsKICAgfQogCisgIGlmICh0aGlzLT5DaGVja1N0b3BPbkZhaWx1cmUoKSAmJiAhdGhpcy0+RmFpbGVkLT5lbXB0eSgpKSB7CisgICAgcmV0dXJuOworICB9CisKICAgc2l6ZV90IG51bVRvU3RhcnQgPSAwOwogCiAgIGlmICh0aGlzLT5SdW5uaW5nQ291bnQgPCB0aGlzLT5QYXJhbGxlbExldmVsKSB7CkBAIC00OTIsNyArNTQ2LDggQEAKICAgICBpZiAodGhpcy0+U2VyaWFsVGVzdFJ1bm5pbmcpIHsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAvLyBXZSBjYW4gb25seSBzdGFydCBhIFJVTl9TRVJJQUwgdGVzdCBpZiBubyBvdGhlciB0ZXN0cyBhcmUgYWxzbyBydW5uaW5nLgorICAgIC8vIFdlIGNhbiBvbmx5IHN0YXJ0IGEgUlVOX1NFUklBTCB0ZXN0IGlmIG5vIG90aGVyIHRlc3RzIGFyZSBhbHNvCisgICAgLy8gcnVubmluZy4KICAgICBpZiAodGhpcy0+UHJvcGVydGllc1t0ZXN0XS0+UnVuU2VyaWFsICYmIHRoaXMtPlJ1bm5pbmdDb3VudCA+IDApIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KQEAgLTU3MCw4ICs2MjUsOCBAQAogICBzZWxmLT5TdGFydE5leHRUZXN0cygpOwogfQogCi12b2lkIGNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyOjpGaW5pc2hUZXN0UHJvY2VzcyhjbUNUZXN0UnVuVGVzdCogcnVubmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkKQordm9pZCBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjo6RmluaXNoVGVzdFByb2Nlc3MoCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gcnVubmVyLCBib29sIHN0YXJ0ZWQpCiB7CiAgIHRoaXMtPkNvbXBsZXRlZCsrOwogCkBAIC01ODMsNyArNjM4LDggQEAKICAgICB0aGlzLT5TZXRTdG9wVGltZVBhc3NlZCgpOwogICB9CiAgIGlmIChzdGFydGVkKSB7Ci0gICAgaWYgKCF0aGlzLT5TdG9wVGltZVBhc3NlZCAmJiBydW5uZXItPlN0YXJ0QWdhaW4odGhpcy0+Q29tcGxldGVkKSkgeworICAgIGlmICghdGhpcy0+U3RvcFRpbWVQYXNzZWQgJiYKKyAgICAgICAgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0QWdhaW4oc3RkOjptb3ZlKHJ1bm5lciksIHRoaXMtPkNvbXBsZXRlZCkpIHsKICAgICAgIHRoaXMtPkNvbXBsZXRlZC0tOyAvLyByZW1vdmUgdGhlIGNvbXBsZXRlZCB0ZXN0IGJlY2F1c2UgcnVuIGFnYWluCiAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjExLDcgKzY2Nyw3IEBACiAgIH0KICAgcHJvcGVydGllcy0+QWZmaW5pdHkuY2xlYXIoKTsKIAotICBkZWxldGUgcnVubmVyOworICBydW5uZXIucmVzZXQoKTsKICAgaWYgKHN0YXJ0ZWQpIHsKICAgICB0aGlzLT5TdGFydE5leHRUZXN0cygpOwogICB9CkBAIC03NTQsNyArODEwLDcgQEAKICAgLy8gSW4gcGFyYWxsZWwgdGVzdCBydW5zIGFkZCBwcmV2aW91c2x5IGZhaWxlZCB0ZXN0cyB0byB0aGUgZnJvbnQKICAgLy8gb2YgdGhlIGNvc3QgbGlzdCBhbmQgcXVldWUgb3RoZXIgdGVzdHMgZm9yIGZ1cnRoZXIgc29ydGluZwogICBmb3IgKGF1dG8gY29uc3QmIHQgOiB0aGlzLT5UZXN0cykgewotICAgIGlmIChjbUNvbnRhaW5zKHRoaXMtPkxhc3RUZXN0c0ZhaWxlZCwgdGhpcy0+UHJvcGVydGllc1t0LmZpcnN0XS0+TmFtZSkpIHsKKyAgICBpZiAoY206OmNvbnRhaW5zKHRoaXMtPkxhc3RUZXN0c0ZhaWxlZCwgdGhpcy0+UHJvcGVydGllc1t0LmZpcnN0XS0+TmFtZSkpIHsKICAgICAgIC8vIElmIHRoZSB0ZXN0IGZhaWxlZCBsYXN0IHRpbWUsIGl0IHNob3VsZCBiZSBydW4gZmlyc3QuCiAgICAgICB0aGlzLT5Tb3J0ZWRUZXN0cy5wdXNoX2JhY2sodC5maXJzdCk7CiAgICAgICBhbHJlYWR5U29ydGVkVGVzdHMuaW5zZXJ0KHQuZmlyc3QpOwpAQCAtNzg4LDEyICs4NDQsMTIgQEAKICAgLy8gU29ydCB0ZXN0cyB3aXRoaW4gZWFjaCBsZXZlbCBieSBDT1NUIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgY29zdCBsaXN0LgogICBmb3IgKFRlc3RTZXQgY29uc3QmIGN1cnJlbnRTZXQgOiBjbVJldmVyc2VSYW5nZShwcmlvcml0eVN0YWNrKSkgewogICAgIFRlc3RMaXN0IHNvcnRlZENvcHk7Ci0gICAgY21BcHBlbmQoc29ydGVkQ29weSwgY3VycmVudFNldCk7CisgICAgY206OmFwcGVuZChzb3J0ZWRDb3B5LCBjdXJyZW50U2V0KTsKICAgICBzdGQ6OnN0YWJsZV9zb3J0KHNvcnRlZENvcHkuYmVnaW4oKSwgc29ydGVkQ29weS5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wYXJhdG9yKHRoaXMpKTsKIAogICAgIGZvciAoYXV0byBjb25zdCYgaiA6IHNvcnRlZENvcHkpIHsKLSAgICAgIGlmICghY21Db250YWlucyhhbHJlYWR5U29ydGVkVGVzdHMsIGopKSB7CisgICAgICBpZiAoIWNtOjpjb250YWlucyhhbHJlYWR5U29ydGVkVGVzdHMsIGopKSB7CiAgICAgICAgIHRoaXMtPlNvcnRlZFRlc3RzLnB1c2hfYmFjayhqKTsKICAgICAgICAgYWxyZWFkeVNvcnRlZFRlc3RzLmluc2VydChqKTsKICAgICAgIH0KQEAgLTgyNSw3ICs4ODEsNyBAQAogICBUZXN0U2V0IGFscmVhZHlTb3J0ZWRUZXN0czsKIAogICBmb3IgKGludCB0ZXN0IDogcHJlc29ydGVkTGlzdCkgewotICAgIGlmIChjbUNvbnRhaW5zKGFscmVhZHlTb3J0ZWRUZXN0cywgdGVzdCkpIHsKKyAgICBpZiAoY206OmNvbnRhaW5zKGFscmVhZHlTb3J0ZWRUZXN0cywgdGVzdCkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIApAQCAtODMzLDcgKzg4OSw3IEBACiAgICAgR2V0QWxsVGVzdERlcGVuZGVuY2llcyh0ZXN0LCBkZXBlbmRlbmNpZXMpOwogCiAgICAgZm9yIChpbnQgdGVzdERlcGVuZGVuY3kgOiBkZXBlbmRlbmNpZXMpIHsKLSAgICAgIGlmICghY21Db250YWlucyhhbHJlYWR5U29ydGVkVGVzdHMsIHRlc3REZXBlbmRlbmN5KSkgeworICAgICAgaWYgKCFjbTo6Y29udGFpbnMoYWxyZWFkeVNvcnRlZFRlc3RzLCB0ZXN0RGVwZW5kZW5jeSkpIHsKICAgICAgICAgYWxyZWFkeVNvcnRlZFRlc3RzLmluc2VydCh0ZXN0RGVwZW5kZW5jeSk7CiAgICAgICAgIHRoaXMtPlNvcnRlZFRlc3RzLnB1c2hfYmFjayh0ZXN0RGVwZW5kZW5jeSk7CiAgICAgICB9CkBAIC0xMTU0LDcgKzEyMTAsNyBAQAogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncyA9IHRlc3RSdW4uR2V0QXJndW1lbnRzKCk7CiAgICAgaWYgKCFhcmdzLmVtcHR5KCkpIHsKICAgICAgIGNvbW1hbmRBbmRBcmdzLnJlc2VydmUoYXJncy5zaXplKCkgKyAxKTsKLSAgICAgIGNtQXBwZW5kKGNvbW1hbmRBbmRBcmdzLCBhcmdzKTsKKyAgICAgIGNtOjphcHBlbmQoY29tbWFuZEFuZEFyZ3MsIGFyZ3MpOwogICAgIH0KICAgICB0ZXN0SW5mb1siY29tbWFuZCJdID0gRHVtcFRvSnNvbkFycmF5KGNvbW1hbmRBbmRBcmdzKTsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyLmggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXIuaAppbmRleCAxZGI0YmZkLi5lMjFiOTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXIuaAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdE11bHRpUHJvY2Vzc0hhbmRsZXIuaApAQCAtNiwxOSArNiwxOSBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20zcC91di5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCi0jaW5jbHVkZSAiY21fdXYuaCIKLQorI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0UmVzb3VyY2VBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJjbUNUZXN0VGVzdEhhbmRsZXIuaCIKICNpbmNsdWRlICJjbVVWSGFuZGxlUHRyLmgiCiAKLWNsYXNzIGNtQ1Rlc3Q7CiBzdHJ1Y3QgY21DVGVzdEJpblBhY2tlckFsbG9jYXRpb247CiBjbGFzcyBjbUNUZXN0UmVzb3VyY2VTcGVjOwogY2xhc3MgY21DVGVzdFJ1blRlc3Q7CkBAIC04NSw2ICs4NSwxMiBAQAogCiAgIGNtQ1Rlc3RUZXN0SGFuZGxlciogR2V0VGVzdEhhbmRsZXIoKSB7IHJldHVybiB0aGlzLT5UZXN0SGFuZGxlcjsgfQogCisgIHZvaWQgU2V0UmVwZWF0TW9kZShjbUNUZXN0OjpSZXBlYXQgbW9kZSwgaW50IGNvdW50KQorICB7CisgICAgdGhpcy0+UmVwZWF0TW9kZSA9IG1vZGU7CisgICAgdGhpcy0+UmVwZWF0Q291bnQgPSBjb3VudDsKKyAgfQorCiAgIHZvaWQgU2V0UXVpZXQoYm9vbCBiKSB7IHRoaXMtPlF1aWV0ID0gYjsgfQogCiAgIHZvaWQgSW5pdFJlc291cmNlQWxsb2NhdG9yKGNvbnN0IGNtQ1Rlc3RSZXNvdXJjZVNwZWMmIHNwZWMpCkBAIC0xMTgsNyArMTI0LDcgQEAKICAgLy8gUmVtb3ZlcyB0aGUgY2hlY2twb2ludCBmaWxlCiAgIHZvaWQgTWFya0ZpbmlzaGVkKCk7CiAgIHZvaWQgRXJhc2VUZXN0KGludCBpbmRleCk7Ci0gIHZvaWQgRmluaXNoVGVzdFByb2Nlc3MoY21DVGVzdFJ1blRlc3QqIHJ1bm5lciwgYm9vbCBzdGFydGVkKTsKKyAgdm9pZCBGaW5pc2hUZXN0UHJvY2VzcyhzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwgYm9vbCBzdGFydGVkKTsKIAogICBzdGF0aWMgdm9pZCBPblRlc3RMb2FkUmV0cnlDQih1dl90aW1lcl90KiB0aW1lcik7CiAKQEAgLTEzMSwxNyArMTM3LDI2IEBACiAgIGlubGluZSBzaXplX3QgR2V0UHJvY2Vzc29yc1VzZWQoaW50IGluZGV4KTsKICAgc3RkOjpzdHJpbmcgR2V0TmFtZShpbnQgaW5kZXgpOwogCisgIGJvb2wgQ2hlY2tTdG9wT25GYWlsdXJlKCk7CisKICAgYm9vbCBDaGVja1N0b3BUaW1lUGFzc2VkKCk7CiAgIHZvaWQgU2V0U3RvcFRpbWVQYXNzZWQoKTsKIAogICB2b2lkIExvY2tSZXNvdXJjZXMoaW50IGluZGV4KTsKICAgdm9pZCBVbmxvY2tSZXNvdXJjZXMoaW50IGluZGV4KTsKIAorICBlbnVtIGNsYXNzIFJlc291cmNlQWxsb2NhdGlvbkVycm9yCisgIHsKKyAgICBOb1Jlc291cmNlVHlwZSwKKyAgICBJbnN1ZmZpY2llbnRSZXNvdXJjZXMsCisgIH07CisKICAgYm9vbCBBbGxvY2F0ZVJlc291cmNlcyhpbnQgaW5kZXgpOwogICBib29sIFRyeUFsbG9jYXRlUmVzb3VyY2VzKAogICAgIGludCBpbmRleCwKICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21DVGVzdEJpblBhY2tlckFsbG9jYXRpb24+PiYKLSAgICAgIGFsbG9jYXRpb25zKTsKKyAgICAgIGFsbG9jYXRpb25zLAorICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBSZXNvdXJjZUFsbG9jYXRpb25FcnJvcj4qIGVycm9ycyA9IG51bGxwdHIpOwogICB2b2lkIERlYWxsb2NhdGVSZXNvdXJjZXMoaW50IGluZGV4KTsKICAgYm9vbCBBbGxSZXNvdXJjZXNBdmFpbGFibGUoKTsKIApAQCAtMTY4LDcgKzE4Myw4IEBACiAgIHN0ZDo6bWFwPGludCwKICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPFJlc291cmNlQWxsb2NhdGlvbj4+Pj4KICAgICBBbGxvY2F0ZWRSZXNvdXJjZXM7Ci0gIHN0ZDo6bWFwPGludCwgYm9vbD4gVGVzdHNIYXZlU3VmZmljaWVudFJlc291cmNlczsKKyAgc3RkOjptYXA8aW50LCBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgUmVzb3VyY2VBbGxvY2F0aW9uRXJyb3I+PgorICAgIFJlc291cmNlQWxsb2NhdGlvbkVycm9yczsKICAgY21DVGVzdFJlc291cmNlQWxsb2NhdG9yIFJlc291cmNlQWxsb2NhdG9yOwogICBzdGQ6OnZlY3RvcjxjbUNUZXN0VGVzdEhhbmRsZXI6OmNtQ1Rlc3RUZXN0UmVzdWx0PiogVGVzdFJlc3VsdHM7CiAgIHNpemVfdCBQYXJhbGxlbExldmVsOyAvLyBtYXggbnVtYmVyIG9mIHByb2Nlc3MgdGhhdCBjYW4gYmUgcnVuIGF0IG9uY2UKQEAgLTE3OSw2ICsxOTUsOCBAQAogICBjbUNUZXN0VGVzdEhhbmRsZXIqIFRlc3RIYW5kbGVyOwogICBjbUNUZXN0KiBDVGVzdDsKICAgYm9vbCBIYXNDeWNsZXM7CisgIGNtQ1Rlc3Q6OlJlcGVhdCBSZXBlYXRNb2RlID0gY21DVGVzdDo6UmVwZWF0OjpOZXZlcjsKKyAgaW50IFJlcGVhdENvdW50ID0gMTsKICAgYm9vbCBRdWlldDsKICAgYm9vbCBTZXJpYWxUZXN0UnVubmluZzsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFA0LmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0UDQuY3h4CmluZGV4IGUyMDYzZTEuLjEzNzViZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0UDQuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0UDQuY3h4CkBAIC03LDkgKzcsMTAgQEAKICNpbmNsdWRlIDxvc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdFZDLmgiCiAjaW5jbHVkZSAiY21Qcm9jZXNzVG9vbHMuaCIKQEAgLTMyNiw3ICszMjcsNyBAQAogICAgIC8vIFRoZSBDVEVTVF9QNF9PUFRJT05TIHZhcmlhYmxlIGFkZHMgYWRkaXRpb25hbCBQZXJmb3JjZSBjb21tYW5kIGxpbmUKICAgICAvLyBvcHRpb25zIGJlZm9yZSB0aGUgbWFpbiBjb21tYW5kCiAgICAgc3RkOjpzdHJpbmcgb3B0cyA9IHRoaXMtPkNUZXN0LT5HZXRDVGVzdENvbmZpZ3VyYXRpb24oIlA0T3B0aW9ucyIpOwotICAgIGNtQXBwZW5kKFA0T3B0aW9ucywgY21TeXN0ZW1Ub29sczo6UGFyc2VBcmd1bWVudHMob3B0cykpOworICAgIGNtOjphcHBlbmQoUDRPcHRpb25zLCBjbVN5c3RlbVRvb2xzOjpQYXJzZUFyZ3VtZW50cyhvcHRzKSk7CiAgIH0KIAogICBDb21tYW5kT3B0aW9ucy5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RSZWFkQ3VzdG9tRmlsZXNDb21tYW5kLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0UmVhZEN1c3RvbUZpbGVzQ29tbWFuZC5jeHgKaW5kZXggZWQxNGQwNi4uYTI1Y2NhNCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RSZWFkQ3VzdG9tRmlsZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFJlYWRDdXN0b21GaWxlc0NvbW1hbmQuY3h4CkBAIC0xNSw3ICsxNSw3IEBACiAgIH0KIAogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgOiBhcmdzKSB7Ci0gICAgdGhpcy0+Q1Rlc3QtPlJlYWRDdXN0b21Db25maWd1cmF0aW9uRmlsZVRyZWUoYXJnLmNfc3RyKCksIHRoaXMtPk1ha2VmaWxlKTsKKyAgICB0aGlzLT5DVGVzdC0+UmVhZEN1c3RvbUNvbmZpZ3VyYXRpb25GaWxlVHJlZShhcmcsIHRoaXMtPk1ha2VmaWxlKTsKICAgfQogCiAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RSZXNvdXJjZVNwZWMuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RSZXNvdXJjZVNwZWMuY3h4CmluZGV4IDhmOTFlZmIuLjIxYzk3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0UmVzb3VyY2VTcGVjLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFJlc291cmNlU3BlYy5jeHgKQEAgLTcsMTIgKzcsMTIgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtM3AvanNvbi9yZWFkZXIuaD4KKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKwogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtX2pzb25jcHBfcmVhZGVyLmgiCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgotCiBzdGF0aWMgY29uc3QgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIElkZW50aWZpZXJSZWdleHsgIl5bYS16X11bYS16MC05X10qJCIgfTsKIHN0YXRpYyBjb25zdCBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gSWRSZWdleHsgIl5bYS16MC05X10rJCIgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0UnVuVGVzdC5jeHgKaW5kZXggMzA5MTA1MC4uNGQ2NWM5YiAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RSdW5UZXN0LmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFJ1blRlc3QuY3h4CkBAIC0zLDcgKzMsNyBAQAogI2luY2x1ZGUgImNtQ1Rlc3RSdW5UZXN0LmgiCiAKICNpbmNsdWRlIDxjaHJvbm8+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPGNzdGRpbnQ+CiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPGNzdHJpbmc+CkBAIC0zNCw5ICszNCw2IEBACiAgIHRoaXMtPlRlc3RSZXN1bHQuU3RhdHVzID0gY21DVGVzdFRlc3RIYW5kbGVyOjpOT1RfUlVOOwogICB0aGlzLT5UZXN0UmVzdWx0LlRlc3RDb3VudCA9IDA7CiAgIHRoaXMtPlRlc3RSZXN1bHQuUHJvcGVydGllcyA9IG51bGxwdHI7Ci0gIHRoaXMtPk51bWJlck9mUnVuc0xlZnQgPSAxOyAvLyBkZWZhdWx0IHRvIDEgcnVuIG9mIHRoZSB0ZXN0Ci0gIHRoaXMtPlJ1blVudGlsRmFpbCA9IGZhbHNlOyAvLyBkZWZhdWx0IHRvIHJ1biB0aGUgdGVzdCBvbmNlCi0gIHRoaXMtPlJ1bkFnYWluID0gZmFsc2U7ICAgICAvLyBkZWZhdWx0IHRvIG5vdCBoYXZpbmcgdG8gcnVuIGFnYWluCiB9CiAKIHZvaWQgY21DVGVzdFJ1blRlc3Q6OkNoZWNrT3V0cHV0KHN0ZDo6c3RyaW5nIGNvbnN0JiBsaW5lKQpAQCAtMzEwLDQzICszMDcsNTcgQEAKICAgfQogICAvLyBJZiB0aGUgdGVzdCBkb2VzIG5vdCBuZWVkIHRvIHJlcnVuIHB1c2ggdGhlIGN1cnJlbnQgVGVzdFJlc3VsdCBvbnRvIHRoZQogICAvLyBUZXN0SGFuZGxlciB2ZWN0b3IKLSAgaWYgKCF0aGlzLT5OZWVkc1RvUmVydW4oKSkgeworICBpZiAoIXRoaXMtPk5lZWRzVG9SZXBlYXQoKSkgewogICAgIHRoaXMtPlRlc3RIYW5kbGVyLT5UZXN0UmVzdWx0cy5wdXNoX2JhY2sodGhpcy0+VGVzdFJlc3VsdCk7CiAgIH0KICAgdGhpcy0+VGVzdFByb2Nlc3MucmVzZXQoKTsKICAgcmV0dXJuIHBhc3NlZCB8fCBza2lwcGVkOwogfQogCi1ib29sIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydEFnYWluKHNpemVfdCBjb21wbGV0ZWQpCitib29sIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydEFnYWluKHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gcnVubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tcGxldGVkKQogewotICBpZiAoIXRoaXMtPlJ1bkFnYWluKSB7CisgIGF1dG8qIHRlc3RSdW4gPSBydW5uZXIuZ2V0KCk7CisKKyAgaWYgKCF0ZXN0UnVuLT5SdW5BZ2FpbikgewogICAgIHJldHVybiBmYWxzZTsKICAgfQotICB0aGlzLT5SdW5BZ2FpbiA9IGZhbHNlOyAvLyByZXNldAorICB0ZXN0UnVuLT5SdW5BZ2FpbiA9IGZhbHNlOyAvLyByZXNldAorICB0ZXN0UnVuLT5UZXN0UHJvY2VzcyA9IGNtOjptYWtlX3VuaXF1ZTxjbVByb2Nlc3M+KHN0ZDo6bW92ZShydW5uZXIpKTsKICAgLy8gY2hhbmdlIHRvIHRlc3RzIGRpcmVjdG9yeQotICBjbVdvcmtpbmdEaXJlY3Rvcnkgd29ya2Rpcih0aGlzLT5UZXN0UHJvcGVydGllcy0+RGlyZWN0b3J5KTsKKyAgY21Xb3JraW5nRGlyZWN0b3J5IHdvcmtkaXIodGVzdFJ1bi0+VGVzdFByb3BlcnRpZXMtPkRpcmVjdG9yeSk7CiAgIGlmICh3b3JrZGlyLkZhaWxlZCgpKSB7Ci0gICAgdGhpcy0+U3RhcnRGYWlsdXJlKCJGYWlsZWQgdG8gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5IHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5UZXN0UHJvcGVydGllcy0+RGlyZWN0b3J5ICsgIiA6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmVycm9yKHdvcmtkaXIuR2V0TGFzdFJlc3VsdCgpKSk7CisgICAgdGVzdFJ1bi0+U3RhcnRGYWlsdXJlKCJGYWlsZWQgdG8gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5IHRvICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW4tPlRlc3RQcm9wZXJ0aWVzLT5EaXJlY3RvcnkgKyAiIDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJlcnJvcih3b3JrZGlyLkdldExhc3RSZXN1bHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5Iik7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAotICB0aGlzLT5TdGFydFRlc3QoY29tcGxldGVkLCB0aGlzLT5Ub3RhbE51bWJlck9mVGVzdHMpOworICB0ZXN0UnVuLT5TdGFydFRlc3QoY29tcGxldGVkLCB0ZXN0UnVuLT5Ub3RhbE51bWJlck9mVGVzdHMpOwogICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBjbUNUZXN0UnVuVGVzdDo6TmVlZHNUb1JlcnVuKCkKK2Jvb2wgY21DVGVzdFJ1blRlc3Q6Ok5lZWRzVG9SZXBlYXQoKQogewogICB0aGlzLT5OdW1iZXJPZlJ1bnNMZWZ0LS07CiAgIGlmICh0aGlzLT5OdW1iZXJPZlJ1bnNMZWZ0ID09IDApIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KKyAgLy8gSWYgYSB0ZXN0IGlzIG1hcmtlZCBhcyBOT1RfUlVOIGl0IHdpbGwgbm90IGJlIHJlcGVhdGVkCisgIC8vIG5vIG1hdHRlciB0aGUgcmVwZWF0IHNldHRpbmdzLCBzbyBqdXN0IHJlY29yZCBpdCBhcy1pcy4KKyAgaWYgKHRoaXMtPlRlc3RSZXN1bHQuU3RhdHVzID09IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Tk9UX1JVTikgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQogICAvLyBpZiBudW1iZXIgb2YgcnVucyBsZWZ0IGlzIG5vdCAwLCBhbmQgd2UgYXJlIHJ1bm5pbmcgdW50aWwKLSAgLy8gd2UgZmluZCBhIGZhaWxlZCB0ZXN0LCB0aGVuIHJldHVybiB0cnVlIHNvIHRoZSB0ZXN0IGNhbiBiZQorICAvLyB3ZSBmaW5kIGEgZmFpbGVkIChvciBwYXNzZWQpIHRlc3QsIHRoZW4gcmV0dXJuIHRydWUgc28gdGhlIHRlc3QgY2FuIGJlCiAgIC8vIHJlc3RhcnRlZAotICBpZiAodGhpcy0+UnVuVW50aWxGYWlsICYmCi0gICAgICB0aGlzLT5UZXN0UmVzdWx0LlN0YXR1cyA9PSBjbUNUZXN0VGVzdEhhbmRsZXI6OkNPTVBMRVRFRCkgeworICBpZiAoKHRoaXMtPlJlcGVhdE1vZGUgPT0gY21DVGVzdDo6UmVwZWF0OjpVbnRpbEZhaWwgJiYKKyAgICAgICB0aGlzLT5UZXN0UmVzdWx0LlN0YXR1cyA9PSBjbUNUZXN0VGVzdEhhbmRsZXI6OkNPTVBMRVRFRCkgfHwKKyAgICAgICh0aGlzLT5SZXBlYXRNb2RlID09IGNtQ1Rlc3Q6OlJlcGVhdDo6VW50aWxQYXNzICYmCisgICAgICAgdGhpcy0+VGVzdFJlc3VsdC5TdGF0dXMgIT0gY21DVGVzdFRlc3RIYW5kbGVyOjpDT01QTEVURUQpIHx8CisgICAgICAodGhpcy0+UmVwZWF0TW9kZSA9PSBjbUNUZXN0OjpSZXBlYXQ6OkFmdGVyVGltZW91dCAmJgorICAgICAgIHRoaXMtPlRlc3RSZXN1bHQuU3RhdHVzID09IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6VElNRU9VVCkpIHsKICAgICB0aGlzLT5SdW5BZ2FpbiA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KQEAgLTM4MCw3ICszOTEsMjAgQEAKICAgaGFuZGxlci0+UG9zdFByb2Nlc3NUZXN0KHRoaXMtPlRlc3RSZXN1bHQsIHRoaXMtPkluZGV4KTsKIH0KIAotdm9pZCBjbUNUZXN0UnVuVGVzdDo6U3RhcnRGYWlsdXJlKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQpCit2b2lkIGNtQ1Rlc3RSdW5UZXN0OjpTdGFydEZhaWx1cmUoc3RkOjp1bmlxdWVfcHRyPGNtQ1Rlc3RSdW5UZXN0PiBydW5uZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGV0YWlsKQoreworICBhdXRvKiB0ZXN0UnVuID0gcnVubmVyLmdldCgpOworCisgIHRlc3RSdW4tPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oc3RkOjptb3ZlKHJ1bm5lcikpOworICB0ZXN0UnVuLT5TdGFydEZhaWx1cmUob3V0cHV0LCBkZXRhaWwpOworCisgIHRlc3RSdW4tPkZpbmFsaXplVGVzdChmYWxzZSk7Cit9CisKK3ZvaWQgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0RmFpbHVyZShzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXRhaWwpCiB7CiAgIC8vIFN0aWxsIG5lZWQgdG8gbG9nIHRoZSBTdGFydCBtZXNzYWdlIHNvIHRoZSB0ZXN0IHN1bW1hcnkgcmVjb3JkcyBvdXIKICAgLy8gYXR0ZW1wdCB0byBzdGFydCB0aGlzIHRlc3QKQEAgLTQwMywxNCArNDI3LDE0IEBACiAgIHRoaXMtPlRlc3RSZXN1bHQuRXhlY3V0aW9uVGltZSA9IGNtRHVyYXRpb246Onplcm8oKTsKICAgdGhpcy0+VGVzdFJlc3VsdC5Db21wcmVzc091dHB1dCA9IGZhbHNlOwogICB0aGlzLT5UZXN0UmVzdWx0LlJldHVyblZhbHVlID0gLTE7Ci0gIHRoaXMtPlRlc3RSZXN1bHQuQ29tcGxldGlvblN0YXR1cyA9ICJGYWlsZWQgdG8gc3RhcnQiOworICB0aGlzLT5UZXN0UmVzdWx0LkNvbXBsZXRpb25TdGF0dXMgPSBkZXRhaWw7CiAgIHRoaXMtPlRlc3RSZXN1bHQuU3RhdHVzID0gY21DVGVzdFRlc3RIYW5kbGVyOjpOT1RfUlVOOwogICB0aGlzLT5UZXN0UmVzdWx0LlRlc3RDb3VudCA9IHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5JbmRleDsKICAgdGhpcy0+VGVzdFJlc3VsdC5OYW1lID0gdGhpcy0+VGVzdFByb3BlcnRpZXMtPk5hbWU7CiAgIHRoaXMtPlRlc3RSZXN1bHQuUGF0aCA9IHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5EaXJlY3Rvcnk7CiAgIHRoaXMtPlRlc3RSZXN1bHQuT3V0cHV0ID0gb3V0cHV0OwogICB0aGlzLT5UZXN0UmVzdWx0LkZ1bGxDb21tYW5kTGluZS5jbGVhcigpOwotICB0aGlzLT5UZXN0UHJvY2VzcyA9IGNtOjptYWtlX3VuaXF1ZTxjbVByb2Nlc3M+KCp0aGlzKTsKKyAgdGhpcy0+VGVzdFJlc3VsdC5FbnZpcm9ubWVudC5jbGVhcigpOwogfQogCiBzdGQ6OnN0cmluZyBjbUNUZXN0UnVuVGVzdDo6R2V0VGVzdFByZWZpeChzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpIGNvbnN0CkBAIC00MzQsNiArNDU4LDIxIEBACiAgIHJldHVybiBvdXRwdXRTdHJlYW0uc3RyKCk7CiB9CiAKK2Jvb2wgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0VGVzdChzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpCit7CisgIGF1dG8qIHRlc3RSdW4gPSBydW5uZXIuZ2V0KCk7CisKKyAgdGVzdFJ1bi0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPihzdGQ6Om1vdmUocnVubmVyKSk7CisKKyAgaWYgKCF0ZXN0UnVuLT5TdGFydFRlc3QoY29tcGxldGVkLCB0b3RhbCkpIHsKKyAgICB0ZXN0UnVuLT5GaW5hbGl6ZVRlc3QoZmFsc2UpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCiAvLyBTdGFydHMgdGhlIGV4ZWN1dGlvbiBvZiBhIHRlc3QuICBSZXR1cm5zIG9uY2UgaXQgaGFzIHN0YXJ0ZWQKIGJvb2wgY21DVGVzdFJ1blRlc3Q6OlN0YXJ0VGVzdChzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpCiB7CkBAIC00NjUsOSArNTA0LDkgQEAKICAgaWYgKHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5EaXNhYmxlZCkgewogICAgIHRoaXMtPlRlc3RSZXN1bHQuQ29tcGxldGlvblN0YXR1cyA9ICJEaXNhYmxlZCI7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5TdGF0dXMgPSBjbUNUZXN0VGVzdEhhbmRsZXI6Ok5PVF9SVU47Ci0gICAgdGhpcy0+VGVzdFByb2Nlc3MgPSBjbTo6bWFrZV91bmlxdWU8Y21Qcm9jZXNzPigqdGhpcyk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5PdXRwdXQgPSAiRGlzYWJsZWQiOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuRnVsbENvbW1hbmRMaW5lLmNsZWFyKCk7CisgICAgdGhpcy0+VGVzdFJlc3VsdC5FbnZpcm9ubWVudC5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC00NzksNyArNTE4LDYgQEAKICAgLy8gaXRzIGFyZ3VtZW50cyBhcmUgaXJyZWxldmFudC4gVGhpcyBtYXR0ZXJzIGZvciB0aGUgY2FzZSB3aGVyZSBhIGZpeHR1cmUKICAgLy8gZGVwZW5kZW5jeSBtaWdodCBiZSBjcmVhdGluZyB0aGUgZXhlY3V0YWJsZSB3ZSB3YW50IHRvIHJ1bi4KICAgaWYgKCF0aGlzLT5GYWlsZWREZXBlbmRlbmNpZXMuZW1wdHkoKSkgewotICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgIHN0ZDo6c3RyaW5nIG1zZyA9ICJGYWlsZWQgdGVzdCBkZXBlbmRlbmNpZXM6IjsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmYWlsZWREZXAgOiB0aGlzLT5GYWlsZWREZXBlbmRlbmNpZXMpIHsKICAgICAgIG1zZyArPSAiICIgKyBmYWlsZWREZXA7CkBAIC00ODgsNiArNTI2LDcgQEAKICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBIQU5ETEVSX09VVFBVVCwgbXNnIDw8IHN0ZDo6ZW5kbCk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5PdXRwdXQgPSBtc2c7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5GdWxsQ29tbWFuZExpbmUuY2xlYXIoKTsKKyAgICB0aGlzLT5UZXN0UmVzdWx0LkVudmlyb25tZW50LmNsZWFyKCk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5Db21wbGV0aW9uU3RhdHVzID0gIkZpeHR1cmUgZGVwZW5kZW5jeSBmYWlsZWQiOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuU3RhdHVzID0gY21DVGVzdFRlc3RIYW5kbGVyOjpOT1RfUlVOOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTQ5Niw3ICs1MzUsNiBAQAogICB0aGlzLT5Db21wdXRlQXJndW1lbnRzKCk7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncyA9IHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5BcmdzOwogICBpZiAoYXJncy5zaXplKCkgPj0gMiAmJiBhcmdzWzFdID09ICJOT1RfQVZBSUxBQkxFIikgewotICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgIHN0ZDo6c3RyaW5nIG1zZzsKICAgICBpZiAodGhpcy0+Q1Rlc3QtPkdldENvbmZpZ1R5cGUoKS5lbXB0eSgpKSB7CiAgICAgICBtc2cgPSAiVGVzdCBub3QgYXZhaWxhYmxlIHdpdGhvdXQgY29uZmlndXJhdGlvbi4gIChNaXNzaW5nIFwiLUMgIgpAQCAtNTA5LDYgKzU0Nyw3IEBACiAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwgbXNnIDw8IHN0ZDo6ZW5kbCk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5PdXRwdXQgPSBtc2c7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5GdWxsQ29tbWFuZExpbmUuY2xlYXIoKTsKKyAgICB0aGlzLT5UZXN0UmVzdWx0LkVudmlyb25tZW50LmNsZWFyKCk7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5Db21wbGV0aW9uU3RhdHVzID0gIk1pc3NpbmcgQ29uZmlndXJhdGlvbiI7CiAgICAgdGhpcy0+VGVzdFJlc3VsdC5TdGF0dXMgPSBjbUNUZXN0VGVzdEhhbmRsZXI6Ok5PVF9SVU47CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTE4LDEzICs1NTcsMTMgQEAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSA6IHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5SZXF1aXJlZEZpbGVzKSB7CiAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGZpbGUpKSB7CiAgICAgICAvLyBSZXF1aXJlZCBmaWxlIHdhcyBub3QgZm91bmQKLSAgICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgICAgKnRoaXMtPlRlc3RIYW5kbGVyLT5Mb2dGaWxlIDw8ICJVbmFibGUgdG8gZmluZCByZXF1aXJlZCBmaWxlOiAiIDw8IGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGZpbmQgcmVxdWlyZWQgZmlsZTogIiA8PCBmaWxlIDw8IHN0ZDo6ZW5kbCk7CiAgICAgICB0aGlzLT5UZXN0UmVzdWx0Lk91dHB1dCA9ICJVbmFibGUgdG8gZmluZCByZXF1aXJlZCBmaWxlOiAiICsgZmlsZTsKICAgICAgIHRoaXMtPlRlc3RSZXN1bHQuRnVsbENvbW1hbmRMaW5lLmNsZWFyKCk7CisgICAgICB0aGlzLT5UZXN0UmVzdWx0LkVudmlyb25tZW50LmNsZWFyKCk7CiAgICAgICB0aGlzLT5UZXN0UmVzdWx0LkNvbXBsZXRpb25TdGF0dXMgPSAiUmVxdWlyZWQgRmlsZXMgTWlzc2luZyI7CiAgICAgICB0aGlzLT5UZXN0UmVzdWx0LlN0YXR1cyA9IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Tk9UX1JVTjsKICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUzNCwxMyArNTczLDEzIEBACiAgIGlmICh0aGlzLT5BY3R1YWxDb21tYW5kLmVtcHR5KCkpIHsKICAgICAvLyBpZiB0aGUgY29tbWFuZCB3YXMgbm90IGZvdW5kIGNyZWF0ZSBhIFRlc3RSZXN1bHQgb2JqZWN0CiAgICAgLy8gdGhhdCBoYXMgdGhhdCBpbmZvcm1hdGlvbgotICAgIHRoaXMtPlRlc3RQcm9jZXNzID0gY206Om1ha2VfdW5pcXVlPGNtUHJvY2Vzcz4oKnRoaXMpOwogICAgICp0aGlzLT5UZXN0SGFuZGxlci0+TG9nRmlsZSA8PCAiVW5hYmxlIHRvIGZpbmQgZXhlY3V0YWJsZTogIiA8PCBhcmdzWzFdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgIlVuYWJsZSB0byBmaW5kIGV4ZWN1dGFibGU6ICIgPDwgYXJnc1sxXSA8PCBzdGQ6OmVuZGwpOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuT3V0cHV0ID0gIlVuYWJsZSB0byBmaW5kIGV4ZWN1dGFibGU6ICIgKyBhcmdzWzFdOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuRnVsbENvbW1hbmRMaW5lLmNsZWFyKCk7CisgICAgdGhpcy0+VGVzdFJlc3VsdC5FbnZpcm9ubWVudC5jbGVhcigpOwogICAgIHRoaXMtPlRlc3RSZXN1bHQuQ29tcGxldGlvblN0YXR1cyA9ICJVbmFibGUgdG8gZmluZCBleGVjdXRhYmxlIjsKICAgICB0aGlzLT5UZXN0UmVzdWx0LlN0YXR1cyA9IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Tk9UX1JVTjsKICAgICByZXR1cm4gZmFsc2U7CkBAIC01ODAsMTEgKzYxOSwxMSBAQAogICAgIGNtQ1Rlc3RNZW1DaGVja0hhbmRsZXIqIGhhbmRsZXIgPQogICAgICAgc3RhdGljX2Nhc3Q8Y21DVGVzdE1lbUNoZWNrSGFuZGxlcio+KHRoaXMtPlRlc3RIYW5kbGVyKTsKICAgICB0aGlzLT5BY3R1YWxDb21tYW5kID0gaGFuZGxlci0+TWVtb3J5VGVzdGVyOwotICAgIHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5BcmdzWzFdID0gdGhpcy0+VGVzdEhhbmRsZXItPkZpbmRUaGVFeGVjdXRhYmxlKAotICAgICAgdGhpcy0+VGVzdFByb3BlcnRpZXMtPkFyZ3NbMV0uY19zdHIoKSk7CisgICAgdGhpcy0+VGVzdFByb3BlcnRpZXMtPkFyZ3NbMV0gPQorICAgICAgdGhpcy0+VGVzdEhhbmRsZXItPkZpbmRUaGVFeGVjdXRhYmxlKHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5BcmdzWzFdKTsKICAgfSBlbHNlIHsKLSAgICB0aGlzLT5BY3R1YWxDb21tYW5kID0gdGhpcy0+VGVzdEhhbmRsZXItPkZpbmRUaGVFeGVjdXRhYmxlKAotICAgICAgdGhpcy0+VGVzdFByb3BlcnRpZXMtPkFyZ3NbMV0uY19zdHIoKSk7CisgICAgdGhpcy0+QWN0dWFsQ29tbWFuZCA9CisgICAgICB0aGlzLT5UZXN0SGFuZGxlci0+RmluZFRoZUV4ZWN1dGFibGUodGhpcy0+VGVzdFByb3BlcnRpZXMtPkFyZ3NbMV0pOwogICAgICsrajsgLy8gc2tpcCB0aGUgZXhlY3V0YWJsZSAoaXQgd2lsbCBiZSBhY3R1YWxDb21tYW5kKQogICB9CiAgIHN0ZDo6c3RyaW5nIHRlc3RDb21tYW5kID0KQEAgLTY0Niw3ICs2ODUsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBlbnZpcm9ubWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4qIGFmZmluaXR5KQogewotICB0aGlzLT5UZXN0UHJvY2VzcyA9IGNtOjptYWtlX3VuaXF1ZTxjbVByb2Nlc3M+KCp0aGlzKTsKICAgdGhpcy0+VGVzdFByb2Nlc3MtPlNldElkKHRoaXMtPkluZGV4KTsKICAgdGhpcy0+VGVzdFByb2Nlc3MtPlNldFdvcmtpbmdEaXJlY3RvcnkodGhpcy0+VGVzdFByb3BlcnRpZXMtPkRpcmVjdG9yeSk7CiAgIHRoaXMtPlRlc3RQcm9jZXNzLT5TZXRDb21tYW5kKHRoaXMtPkFjdHVhbENvbW1hbmQpOwpAQCAtNjg2LDI1ICs3MjQsNDMgQEAKICAgY21TeXN0ZW1Ub29sczo6U2F2ZVJlc3RvcmVFbnZpcm9ubWVudCBzcmU7CiAjZW5kaWYKIAorICBzdGQ6Om9zdHJpbmdzdHJlYW0gZW52TWVhc3VyZW1lbnQ7CiAgIGlmIChlbnZpcm9ubWVudCAmJiAhZW52aXJvbm1lbnQtPmVtcHR5KCkpIHsKICAgICBjbVN5c3RlbVRvb2xzOjpBcHBlbmRFbnYoKmVudmlyb25tZW50KTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIHZhciA6ICplbnZpcm9ubWVudCkgeworICAgICAgZW52TWVhc3VyZW1lbnQgPDwgdmFyIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CiAgIH0KIAogICBpZiAodGhpcy0+VXNlQWxsb2NhdGVkUmVzb3VyY2VzKSB7Ci0gICAgdGhpcy0+U2V0dXBSZXNvdXJjZXNFbnZpcm9ubWVudCgpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBlbnZMb2c7CisgICAgdGhpcy0+U2V0dXBSZXNvdXJjZXNFbnZpcm9ubWVudCgmZW52TG9nKTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIHZhciA6IGVudkxvZykgeworICAgICAgZW52TWVhc3VyZW1lbnQgPDwgdmFyIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CiAgIH0gZWxzZSB7CiAgICAgY21TeXN0ZW1Ub29sczo6VW5zZXRFbnYoIkNURVNUX1JFU09VUkNFX0dST1VQX0NPVU5UIik7CisgICAgLy8gU2lnbmlmeSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgYWN0aXZlbHkgdW5zZXQKKyAgICBlbnZNZWFzdXJlbWVudCA8PCAiI0NURVNUX1JFU09VUkNFX0dST1VQX0NPVU5UPSIgPDwgc3RkOjplbmRsOwogICB9CiAKKyAgdGhpcy0+VGVzdFJlc3VsdC5FbnZpcm9ubWVudCA9IGVudk1lYXN1cmVtZW50LnN0cigpOworICAvLyBSZW1vdmUgbGFzdCBuZXdsaW5lCisgIHRoaXMtPlRlc3RSZXN1bHQuRW52aXJvbm1lbnQuZXJhc2UodGhpcy0+VGVzdFJlc3VsdC5FbnZpcm9ubWVudC5sZW5ndGgoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisKICAgcmV0dXJuIHRoaXMtPlRlc3RQcm9jZXNzLT5TdGFydFByb2Nlc3ModGhpcy0+TXVsdGlUZXN0SGFuZGxlci5Mb29wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpbml0eSk7CiB9CiAKLXZvaWQgY21DVGVzdFJ1blRlc3Q6OlNldHVwUmVzb3VyY2VzRW52aXJvbm1lbnQoKQordm9pZCBjbUNUZXN0UnVuVGVzdDo6U2V0dXBSZXNvdXJjZXNFbnZpcm9ubWVudChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIGxvZykKIHsKICAgc3RkOjpzdHJpbmcgcHJvY2Vzc0NvdW50ID0gIkNURVNUX1JFU09VUkNFX0dST1VQX0NPVU5UPSI7CiAgIHByb2Nlc3NDb3VudCArPSBzdGQ6OnRvX3N0cmluZyh0aGlzLT5BbGxvY2F0ZWRSZXNvdXJjZXMuc2l6ZSgpKTsKICAgY21TeXN0ZW1Ub29sczo6UHV0RW52KHByb2Nlc3NDb3VudCk7CisgIGlmIChsb2cpIHsKKyAgICBsb2ctPnB1c2hfYmFjayhwcm9jZXNzQ291bnQpOworICB9CiAKICAgc3RkOjpzaXplX3QgaSA9IDA7CiAgIGZvciAoYXV0byBjb25zdCYgcHJvY2VzcyA6IHRoaXMtPkFsbG9jYXRlZFJlc291cmNlcykgewpAQCAtNzMwLDggKzc4NiwxNCBAQAogICAgICAgICB2YXIgKz0gImlkOiIgKyBpdDIuSWQgKyAiLHNsb3RzOiIgKyBzdGQ6OnRvX3N0cmluZyhpdDIuU2xvdHMpOwogICAgICAgfQogICAgICAgY21TeXN0ZW1Ub29sczo6UHV0RW52KHZhcik7CisgICAgICBpZiAobG9nKSB7CisgICAgICAgIGxvZy0+cHVzaF9iYWNrKHZhcik7CisgICAgICB9CiAgICAgfQogICAgIGNtU3lzdGVtVG9vbHM6OlB1dEVudihyZXNvdXJjZUxpc3QpOworICAgIGlmIChsb2cpIHsKKyAgICAgIGxvZy0+cHVzaF9iYWNrKHJlc291cmNlTGlzdCk7CisgICAgfQogICAgICsraTsKICAgfQogfQpAQCAtNzQ2LDcgKzgwOCwxMiBAQAogICAvLyB0aGVuIGl0IHdpbGwgbmV2ZXIgcHJpbnQgb3V0IHRoZSBjb21wbGV0ZWQgLyB0b3RhbCwgc2FtZSB3b3VsZAogICAvLyBnb3QgZm9yIHJ1biB1bnRpbCBwYXNzLiAgVHJpY2sgaXMgd2hlbiB0aGlzIGlzIGNhbGxlZCB3ZSBkb24ndAogICAvLyB5ZXQga25vdyBpZiB3ZSBhcmUgcGFzc2luZyBvciBmYWlsaW5nLgotICBpZiAodGhpcy0+TnVtYmVyT2ZSdW5zTGVmdCA9PSAxIHx8IHRoaXMtPkNUZXN0LT5HZXRUZXN0UHJvZ3Jlc3NPdXRwdXQoKSkgeworICBib29sIGNvbnN0IHByb2dyZXNzT25MYXN0ID0KKyAgICAodGhpcy0+UmVwZWF0TW9kZSAhPSBjbUNUZXN0OjpSZXBlYXQ6OlVudGlsUGFzcyAmJgorICAgICB0aGlzLT5SZXBlYXRNb2RlICE9IGNtQ1Rlc3Q6OlJlcGVhdDo6QWZ0ZXJUaW1lb3V0KTsKKyAgaWYgKChwcm9ncmVzc09uTGFzdCAmJiB0aGlzLT5OdW1iZXJPZlJ1bnNMZWZ0ID09IDEpIHx8CisgICAgICAoIXByb2dyZXNzT25MYXN0ICYmIHRoaXMtPk51bWJlck9mUnVuc0xlZnQgPT0gdGhpcy0+TnVtYmVyT2ZSdW5zVG90YWwpIHx8CisgICAgICB0aGlzLT5DVGVzdC0+R2V0VGVzdFByb2dyZXNzT3V0cHV0KCkpIHsKICAgICBvdXRwdXRTdHJlYW0gPDwgc3RkOjpzZXR3KGdldE51bVdpZHRoKHRvdGFsKSkgPDwgY29tcGxldGVkIDw8ICIvIjsKICAgICBvdXRwdXRTdHJlYW0gPDwgc3RkOjpzZXR3KGdldE51bVdpZHRoKHRvdGFsKSkgPDwgdG90YWwgPDwgIiAiOwogICB9CkBAIC04MDgsNyArODc1LDggQEAKICAgICAgICAgICAgICAiVGVzdGluZyAiIDw8IHRoaXMtPlRlc3RQcm9wZXJ0aWVzLT5OYW1lIDw8ICIgLi4uICIpOwogfQogCi12b2lkIGNtQ1Rlc3RSdW5UZXN0OjpGaW5hbGl6ZVRlc3QoKQordm9pZCBjbUNUZXN0UnVuVGVzdDo6RmluYWxpemVUZXN0KGJvb2wgc3RhcnRlZCkKIHsKLSAgdGhpcy0+TXVsdGlUZXN0SGFuZGxlci5GaW5pc2hUZXN0UHJvY2Vzcyh0aGlzLCB0cnVlKTsKKyAgdGhpcy0+TXVsdGlUZXN0SGFuZGxlci5GaW5pc2hUZXN0UHJvY2Vzcyh0aGlzLT5UZXN0UHJvY2Vzcy0+R2V0UnVubmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFJ1blRlc3QuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0UnVuVGVzdC5oCmluZGV4IGY3ODFjN2EuLmQ4MzEyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0UnVuVGVzdC5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0UnVuVGVzdC5oCkBAIC0xMywxMyArMTMsMTIgQEAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCisjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY21DVGVzdFRlc3RIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtUHJvY2Vzcy5oIgogCi1jbGFzcyBjbUNUZXN0OwotCiAvKiogXGNsYXNzIGNtUnVuVGVzdAogICogXGJyaWVmIHJlcHJlc2VudHMgYSBzaW5nbGUgdGVzdCB0byBiZSBydW4KICAqCkBAIC0zMCw4ICsyOSwxMyBAQAogcHVibGljOgogICBleHBsaWNpdCBjbUNUZXN0UnVuVGVzdChjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlciYgbXVsdGlIYW5kbGVyKTsKIAotICB2b2lkIFNldE51bWJlck9mUnVucyhpbnQgbikgeyB0aGlzLT5OdW1iZXJPZlJ1bnNMZWZ0ID0gbjsgfQotICB2b2lkIFNldFJ1blVudGlsRmFpbE9uKCkgeyB0aGlzLT5SdW5VbnRpbEZhaWwgPSB0cnVlOyB9CisgIHZvaWQgU2V0TnVtYmVyT2ZSdW5zKGludCBuKQorICB7CisgICAgdGhpcy0+TnVtYmVyT2ZSdW5zTGVmdCA9IG47CisgICAgdGhpcy0+TnVtYmVyT2ZSdW5zVG90YWwgPSBuOworICB9CisKKyAgdm9pZCBTZXRSZXBlYXRNb2RlKGNtQ1Rlc3Q6OlJlcGVhdCByKSB7IHRoaXMtPlJlcGVhdE1vZGUgPSByOyB9CiAgIHZvaWQgU2V0VGVzdFByb3BlcnRpZXMoY21DVGVzdFRlc3RIYW5kbGVyOjpjbUNUZXN0VGVzdFByb3BlcnRpZXMqIHByb3ApCiAgIHsKICAgICB0aGlzLT5UZXN0UHJvcGVydGllcyA9IHByb3A7CkBAIC02MSw2ICs2NSwxNSBAQAogICAvLyBSZWFkIGFuZCBzdG9yZSBvdXRwdXQuICBSZXR1cm5zIHRydWUgaWYgaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4uCiAgIHZvaWQgQ2hlY2tPdXRwdXQoc3RkOjpzdHJpbmcgY29uc3QmIGxpbmUpOwogCisgIHN0YXRpYyBib29sIFN0YXJ0VGVzdChzdGQ6OnVuaXF1ZV9wdHI8Y21DVGVzdFJ1blRlc3Q+IHJ1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb21wbGV0ZWQsIHNpemVfdCB0b3RhbCk7CisgIHN0YXRpYyBib29sIFN0YXJ0QWdhaW4oc3RkOjp1bmlxdWVfcHRyPGNtQ1Rlc3RSdW5UZXN0PiBydW5uZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbXBsZXRlZCk7CisKKyAgc3RhdGljIHZvaWQgU3RhcnRGYWlsdXJlKHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gcnVubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXRhaWwpOworCiAgIC8vIGxhdW5jaCB0aGUgdGVzdCBwcm9jZXNzLCByZXR1cm4gd2hldGhlciBpdCBzdGFydGVkIGNvcnJlY3RseQogICBib29sIFN0YXJ0VGVzdChzaXplX3QgY29tcGxldGVkLCBzaXplX3QgdG90YWwpOwogICAvLyBjYXB0dXJlIGFuZCByZXBvcnQgdGhlIHRlc3QgcmVzdWx0cwpAQCAtNzAsOSArODMsNyBAQAogCiAgIHZvaWQgQ29tcHV0ZVdlaWdodGVkQ29zdCgpOwogCi0gIGJvb2wgU3RhcnRBZ2FpbihzaXplX3QgY29tcGxldGVkKTsKLQotICB2b2lkIFN0YXJ0RmFpbHVyZShzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0KTsKKyAgdm9pZCBTdGFydEZhaWx1cmUoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCwgc3RkOjpzdHJpbmcgY29uc3QmIGRldGFpbCk7CiAKICAgY21DVGVzdCogR2V0Q1Rlc3QoKSBjb25zdCB7IHJldHVybiB0aGlzLT5DVGVzdDsgfQogCkBAIC04MCw3ICs5MSw3IEBACiAKICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBHZXRBcmd1bWVudHMoKSB7IHJldHVybiB0aGlzLT5Bcmd1bWVudHM7IH0KIAotICB2b2lkIEZpbmFsaXplVGVzdCgpOworICB2b2lkIEZpbmFsaXplVGVzdChib29sIHN0YXJ0ZWQgPSB0cnVlKTsKIAogICBib29sIFRpbWVkT3V0Rm9yU3RvcFRpbWUoKSBjb25zdCB7IHJldHVybiB0aGlzLT5UaW1lb3V0SXNGb3JTdG9wVGltZTsgfQogCkBAIC05OCw3ICsxMDksNyBAQAogICB9CiAKIHByaXZhdGU6Ci0gIGJvb2wgTmVlZHNUb1JlcnVuKCk7CisgIGJvb2wgTmVlZHNUb1JlcGVhdCgpOwogICB2b2lkIERhcnRQcm9jZXNzaW5nKCk7CiAgIHZvaWQgRXhlTm90Rm91bmQoc3RkOjpzdHJpbmcgZXhlKTsKICAgYm9vbCBGb3JrUHJvY2VzcyhjbUR1cmF0aW9uIHRlc3RUaW1lT3V0LCBib29sIGV4cGxpY2l0VGltZW91dCwKQEAgLTEwOCw3ICsxMTksNyBAQAogICAvLyBSdW4gcG9zdCBwcm9jZXNzaW5nIG9mIHRoZSBwcm9jZXNzIG91dHB1dCBmb3IgTWVtQ2hlY2sKICAgdm9pZCBNZW1DaGVja1Bvc3RQcm9jZXNzKCk7CiAKLSAgdm9pZCBTZXR1cFJlc291cmNlc0Vudmlyb25tZW50KCk7CisgIHZvaWQgU2V0dXBSZXNvdXJjZXNFbnZpcm9ubWVudChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIGxvZyA9IG51bGxwdHIpOwogCiAgIC8vIFJldHVybnMgImNvbXBsZXRlZC90b3RhbCBUZXN0ICNJbmRleDogIgogICBzdGQ6OnN0cmluZyBHZXRUZXN0UHJlZml4KHNpemVfdCBjb21wbGV0ZWQsIHNpemVfdCB0b3RhbCkgY29uc3Q7CkBAIC0xMzIsOSArMTQzLDEwIEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6bWFwPAogICAgIHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjo6UmVzb3VyY2VBbGxvY2F0aW9uPj4+CiAgICAgQWxsb2NhdGVkUmVzb3VyY2VzOwotICBib29sIFJ1blVudGlsRmFpbDsKLSAgaW50IE51bWJlck9mUnVuc0xlZnQ7Ci0gIGJvb2wgUnVuQWdhaW47CisgIGNtQ1Rlc3Q6OlJlcGVhdCBSZXBlYXRNb2RlID0gY21DVGVzdDo6UmVwZWF0OjpOZXZlcjsKKyAgaW50IE51bWJlck9mUnVuc0xlZnQgPSAxOyAgLy8gZGVmYXVsdCB0byAxIHJ1biBvZiB0aGUgdGVzdAorICBpbnQgTnVtYmVyT2ZSdW5zVG90YWwgPSAxOyAvLyBkZWZhdWx0IHRvIDEgcnVuIG9mIHRoZSB0ZXN0CisgIGJvb2wgUnVuQWdhaW4gPSBmYWxzZTsgICAgIC8vIGRlZmF1bHQgdG8gbm90IGhhdmluZyB0byBydW4gYWdhaW4KICAgc2l6ZV90IFRvdGFsTnVtYmVyT2ZUZXN0czsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U1ZOLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U1ZOLmN4eAppbmRleCAzNDM5NWM5Li40NGRmYWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFNWTi5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RTVk4uY3h4CkBAIC03LDkgKzcsMTAgQEAKICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8b3N0cmVhbT4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0VkMuaCIKICNpbmNsdWRlICJjbVByb2Nlc3NUb29scy5oIgpAQCAtMjcxLDcgKzI3Miw3IEBACiAKICAgc3RkOjp2ZWN0b3I8Y2hhciBjb25zdCo+IGFyZ3M7CiAgIGFyZ3MucHVzaF9iYWNrKHRoaXMtPkNvbW1hbmRMaW5lVG9vbC5jX3N0cigpKTsKLSAgY21BcHBlbmQoYXJncywgcGFyYW1ldGVycyk7CisgIGNtOjphcHBlbmQoYXJncywgcGFyYW1ldGVycyk7CiAgIGFyZ3MucHVzaF9iYWNrKCItLW5vbi1pbnRlcmFjdGl2ZSIpOwogCiAgIHN0ZDo6c3RyaW5nIHVzZXJPcHRpb25zID0gdGhpcy0+Q1Rlc3QtPkdldENUZXN0Q29uZmlndXJhdGlvbigiU1ZOT3B0aW9ucyIpOwpAQCAtMzQ0LDcgKzM0NSw3IEBACiAKICAgdm9pZCBDaGFyYWN0ZXJEYXRhSGFuZGxlcihjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVycmlkZQogICB7Ci0gICAgY21BcHBlbmQodGhpcy0+Q0RhdGEsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICAgIGNtOjphcHBlbmQodGhpcy0+Q0RhdGEsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOwogICB9CiAKICAgdm9pZCBFbmRFbGVtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBvdmVycmlkZQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RTY3JpcHRIYW5kbGVyLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5jeHgKaW5kZXggNjBmYWNiZC4uNGZhNGRjMCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RTY3JpcHRIYW5kbGVyLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFNjcmlwdEhhbmRsZXIuY3h4CkBAIC02LDcgKzYsNiBAQAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHJhdGlvPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KQEAgLTUxLDIyICs1MCw3IEBACiAKICNkZWZpbmUgQ1RFU1RfSU5JVElBTF9DTUFLRV9PVVRQVVRfRklMRV9OQU1FICJDVGVzdEluaXRpYWxDTWFrZU91dHB1dC5sb2ciCiAKLWNtQ1Rlc3RTY3JpcHRIYW5kbGVyOjpjbUNUZXN0U2NyaXB0SGFuZGxlcigpCi17Ci0gIHRoaXMtPkJhY2t1cCA9IGZhbHNlOwotICB0aGlzLT5FbXB0eUJpbkRpciA9IGZhbHNlOwotICB0aGlzLT5FbXB0eUJpbkRpck9uY2UgPSBmYWxzZTsKLSAgdGhpcy0+TWFrZWZpbGUgPSBudWxscHRyOwotICB0aGlzLT5QYXJlbnRNYWtlZmlsZSA9IG51bGxwdHI7Ci0gIHRoaXMtPkNNYWtlID0gbnVsbHB0cjsKLSAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yID0gbnVsbHB0cjsKLQotICB0aGlzLT5TY3JpcHRTdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50KCk7Ci0KLSAgLy8gdGhlICo2MCBpcyBiZWNhdXNlIHRoZSBzZXR0aW5ncyBhcmUgaW4gbWludXRlcyBidXQgR2V0VGltZSBpcyBzZWNvbmRzCi0gIHRoaXMtPk1pbmltdW1JbnRlcnZhbCA9IDMwICogNjA7Ci0gIHRoaXMtPkNvbnRpbnVvdXNEdXJhdGlvbiA9IC0xOwotfQorY21DVGVzdFNjcmlwdEhhbmRsZXI6OmNtQ1Rlc3RTY3JpcHRIYW5kbGVyKCkgPSBkZWZhdWx0OwogCiB2b2lkIGNtQ1Rlc3RTY3JpcHRIYW5kbGVyOjpJbml0aWFsaXplKCkKIHsKQEAgLTk1LDIyICs3OSwxNSBAQAogICAvLyB3aGF0IHRpbWUgaW4gc2Vjb25kcyBkaWQgdGhpcyBzY3JpcHQgc3RhcnQgcnVubmluZwogICB0aGlzLT5TY3JpcHRTdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50KCk7CiAKLSAgZGVsZXRlIHRoaXMtPk1ha2VmaWxlOwotICB0aGlzLT5NYWtlZmlsZSA9IG51bGxwdHI7CisgIHRoaXMtPk1ha2VmaWxlLnJlc2V0KCk7CiAgIHRoaXMtPlBhcmVudE1ha2VmaWxlID0gbnVsbHB0cjsKIAotICBkZWxldGUgdGhpcy0+R2xvYmFsR2VuZXJhdG9yOwotICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IgPSBudWxscHRyOworICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IucmVzZXQoKTsKIAotICBkZWxldGUgdGhpcy0+Q01ha2U7CisgIHRoaXMtPkNNYWtlLnJlc2V0KCk7CiB9CiAKLWNtQ1Rlc3RTY3JpcHRIYW5kbGVyOjp+Y21DVGVzdFNjcmlwdEhhbmRsZXIoKQotewotICBkZWxldGUgdGhpcy0+TWFrZWZpbGU7Ci0gIGRlbGV0ZSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7Ci0gIGRlbGV0ZSB0aGlzLT5DTWFrZTsKLX0KK2NtQ1Rlc3RTY3JpcHRIYW5kbGVyOjp+Y21DVGVzdFNjcmlwdEhhbmRsZXIoKSA9IGRlZmF1bHQ7CiAKIC8vIGp1c3QgYWRkcyBhbiBhcmd1bWVudCB0byB0aGUgdmVjdG9yCiB2b2lkIGNtQ1Rlc3RTY3JpcHRIYW5kbGVyOjpBZGRDb25maWd1cmF0aW9uU2NyaXB0KGNvbnN0IGNoYXIqIHNjcmlwdCwKQEAgLTI0NywyMyArMjI0LDIwIEBACiB2b2lkIGNtQ1Rlc3RTY3JpcHRIYW5kbGVyOjpDcmVhdGVDTWFrZSgpCiB7CiAgIC8vIGNyZWF0ZSBhIGNtYWtlIGluc3RhbmNlIHRvIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0Ci0gIGlmICh0aGlzLT5DTWFrZSkgewotICAgIGRlbGV0ZSB0aGlzLT5DTWFrZTsKLSAgICBkZWxldGUgdGhpcy0+R2xvYmFsR2VuZXJhdG9yOwotICAgIGRlbGV0ZSB0aGlzLT5NYWtlZmlsZTsKLSAgfQotICB0aGlzLT5DTWFrZSA9IG5ldyBjbWFrZShjbWFrZTo6Um9sZVNjcmlwdCwgY21TdGF0ZTo6Q1Rlc3QpOworICB0aGlzLT5DTWFrZSA9IGNtOjptYWtlX3VuaXF1ZTxjbWFrZT4oY21ha2U6OlJvbGVTY3JpcHQsIGNtU3RhdGU6OkNUZXN0KTsKICAgdGhpcy0+Q01ha2UtPlNldEhvbWVEaXJlY3RvcnkoIiIpOwogICB0aGlzLT5DTWFrZS0+U2V0SG9tZU91dHB1dERpcmVjdG9yeSgiIik7CiAgIHRoaXMtPkNNYWtlLT5HZXRDdXJyZW50U25hcHNob3QoKS5TZXREZWZhdWx0RGVmaW5pdGlvbnMoKTsKICAgdGhpcy0+Q01ha2UtPkFkZENNYWtlUGF0aHMoKTsKLSAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yID0gbmV3IGNtR2xvYmFsR2VuZXJhdG9yKHRoaXMtPkNNYWtlKTsKKyAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yID0KKyAgICBjbTo6bWFrZV91bmlxdWU8Y21HbG9iYWxHZW5lcmF0b3I+KHRoaXMtPkNNYWtlLmdldCgpKTsKIAogICBjbVN0YXRlU25hcHNob3Qgc25hcHNob3QgPSB0aGlzLT5DTWFrZS0+R2V0Q3VycmVudFNuYXBzaG90KCk7CiAgIHN0ZDo6c3RyaW5nIGN3ZCA9IGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CiAgIHNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldEN1cnJlbnRTb3VyY2UoY3dkKTsKICAgc25hcHNob3QuR2V0RGlyZWN0b3J5KCkuU2V0Q3VycmVudEJpbmFyeShjd2QpOwotICB0aGlzLT5NYWtlZmlsZSA9IG5ldyBjbU1ha2VmaWxlKHRoaXMtPkdsb2JhbEdlbmVyYXRvciwgc25hcHNob3QpOworICB0aGlzLT5NYWtlZmlsZSA9CisgICAgY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGU+KHRoaXMtPkdsb2JhbEdlbmVyYXRvci5nZXQoKSwgc25hcHNob3QpOwogICBpZiAodGhpcy0+UGFyZW50TWFrZWZpbGUpIHsKICAgICB0aGlzLT5NYWtlZmlsZS0+U2V0UmVjdXJzaW9uRGVwdGgoCiAgICAgICB0aGlzLT5QYXJlbnRNYWtlZmlsZS0+R2V0UmVjdXJzaW9uRGVwdGgoKSk7CkBAIC0zMTAsMTIgKzI4NCwxNCBAQAogICAvLyBpZiB0aGUgYXJndW1lbnQgaGFzIGEgLCBpbiBpdCB0aGVuIGl0IG5lZWRzIHRvIGJlIGJyb2tlbiBpbnRvIHRoZSBmaXN0CiAgIC8vIGFyZ3VtZW50ICh3aGljaCBpcyB0aGUgc2NyaXB0KSBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCB3aGljaCB3aWxsIGJlCiAgIC8vIHBhc3NlZCBpbnRvIHRoZSBzY3JpcHRzIGFzIFNfQVJHCi0gIHN0ZDo6c3RyaW5nIHNjcmlwdCA9IHRvdGFsX3NjcmlwdF9hcmc7CisgIHN0ZDo6c3RyaW5nIHNjcmlwdDsKICAgc3RkOjpzdHJpbmcgc2NyaXB0X2FyZzsKICAgY29uc3Qgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBjb21tYV9wb3MgPSB0b3RhbF9zY3JpcHRfYXJnLmZpbmQoJywnKTsKICAgaWYgKGNvbW1hX3BvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHNjcmlwdCA9IHRvdGFsX3NjcmlwdF9hcmcuc3Vic3RyKDAsIGNvbW1hX3Bvcyk7CiAgICAgc2NyaXB0X2FyZyA9IHRvdGFsX3NjcmlwdF9hcmcuc3Vic3RyKGNvbW1hX3BvcyArIDEpOworICB9IGVsc2UgeworICAgIHNjcmlwdCA9IHRvdGFsX3NjcmlwdF9hcmc7CiAgIH0KICAgLy8gbWFrZSBzdXJlIHRoZSBmaWxlIGV4aXN0cwogICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoc2NyaXB0KSkgewpAQCAtMzQwLDYgKzMxNiwxMyBAQAogICB0aGlzLT5TZXRSdW5DdXJyZW50U2NyaXB0KHRydWUpOwogICB0aGlzLT5VcGRhdGVFbGFwc2VkVGltZSgpOwogCisgIC8vIHNldCB0aGUgQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFIHZhcmlhYmxlIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQorICAvLyB0aGUgLUMgYXJndW1lbnQgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgaWYgKCF0aGlzLT5DVGVzdC0+R2V0Q29uZmlnVHlwZSgpLmVtcHR5KCkpIHsKKyAgICB0aGlzLT5NYWtlZmlsZS0+QWRkRGVmaW5pdGlvbigiQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DVGVzdC0+R2V0Q29uZmlnVHlwZSgpKTsKKyAgfQorCiAgIC8vIGFkZCB0aGUgc2NyaXB0IGFyZyBpZiBkZWZpbmVkCiAgIGlmICghc2NyaXB0X2FyZy5lbXB0eSgpKSB7CiAgICAgdGhpcy0+TWFrZWZpbGUtPkFkZERlZmluaXRpb24oIkNURVNUX1NDUklQVF9BUkciLCBzY3JpcHRfYXJnKTsKQEAgLTg3MSw3ICs4NTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNuYW1lLCBib29sIEluUHJvY2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHJldHVyblZhbHVlKQogewotICBjbUNUZXN0U2NyaXB0SGFuZGxlciogc2ggPSBuZXcgY21DVGVzdFNjcmlwdEhhbmRsZXIoKTsKKyAgYXV0byBzaCA9IGNtOjptYWtlX3VuaXF1ZTxjbUNUZXN0U2NyaXB0SGFuZGxlcj4oKTsKICAgc2gtPlNldENUZXN0SW5zdGFuY2UoY3Rlc3QpOwogICBzaC0+UGFyZW50TWFrZWZpbGUgPSBtZjsKICAgc2gtPkFkZENvbmZpZ3VyYXRpb25TY3JpcHQoc25hbWUsIEluUHJvY2Vzcyk7CkBAIC04NzksNyArODYyLDYgQEAKICAgaWYgKHJldHVyblZhbHVlKSB7CiAgICAgKnJldHVyblZhbHVlID0gcmVzOwogICB9Ci0gIGRlbGV0ZSBzaDsKICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U2NyaXB0SGFuZGxlci5oIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RTY3JpcHRIYW5kbGVyLmgKaW5kZXggZDAwMzE5OS4uZWJiNzkwNSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RTY3JpcHRIYW5kbGVyLmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RTY3JpcHRIYW5kbGVyLmgKQEAgLTEwMSwxMiArMTAxLDE0IEBACiAgIGNtRHVyYXRpb24gR2V0UmVtYWluaW5nVGltZUFsbG93ZWQoKTsKIAogICBjbUNUZXN0U2NyaXB0SGFuZGxlcigpOworICBjbUNUZXN0U2NyaXB0SGFuZGxlcihjb25zdCBjbUNUZXN0U2NyaXB0SGFuZGxlciYpID0gZGVsZXRlOworICBjb25zdCBjbUNUZXN0U2NyaXB0SGFuZGxlciYgb3BlcmF0b3I9KGNvbnN0IGNtQ1Rlc3RTY3JpcHRIYW5kbGVyJikgPSBkZWxldGU7CiAgIH5jbUNUZXN0U2NyaXB0SGFuZGxlcigpIG92ZXJyaWRlOwogCiAgIHZvaWQgSW5pdGlhbGl6ZSgpIG92ZXJyaWRlOwogCiAgIHZvaWQgQ3JlYXRlQ01ha2UoKTsKLSAgY21ha2UqIEdldENNYWtlKCkgeyByZXR1cm4gdGhpcy0+Q01ha2U7IH0KKyAgY21ha2UqIEdldENNYWtlKCkgeyByZXR1cm4gdGhpcy0+Q01ha2UuZ2V0KCk7IH0KIAogICB2b2lkIFNldFJ1bkN1cnJlbnRTY3JpcHQoYm9vbCB2YWx1ZSk7CiAKQEAgLTE0Myw5ICsxNDUsOSBAQAogCiAgIGJvb2wgU2hvdWxkUnVuQ3VycmVudFNjcmlwdDsKIAotICBib29sIEJhY2t1cDsKLSAgYm9vbCBFbXB0eUJpbkRpcjsKLSAgYm9vbCBFbXB0eUJpbkRpck9uY2U7CisgIGJvb2wgQmFja3VwID0gZmFsc2U7CisgIGJvb2wgRW1wdHlCaW5EaXIgPSBmYWxzZTsKKyAgYm9vbCBFbXB0eUJpbkRpck9uY2UgPSBmYWxzZTsKIAogICBzdGQ6OnN0cmluZyBTb3VyY2VEaXI7CiAgIHN0ZDo6c3RyaW5nIEJpbmFyeURpcjsKQEAgLTE2MSwxNiArMTYzLDE4IEBACiAgIHN0ZDo6c3RyaW5nIENNT3V0RmlsZTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEV4dHJhVXBkYXRlczsKIAotICBkb3VibGUgTWluaW11bUludGVydmFsOwotICBkb3VibGUgQ29udGludW91c0R1cmF0aW9uOworICAvLyB0aGUgKjYwIGlzIGJlY2F1c2UgdGhlIHNldHRpbmdzIGFyZSBpbiBtaW51dGVzIGJ1dCBHZXRUaW1lIGlzIHNlY29uZHMKKyAgZG91YmxlIE1pbmltdW1JbnRlcnZhbCA9IDMwICogNjA7CisgIGRvdWJsZSBDb250aW51b3VzRHVyYXRpb24gPSAtMTsKIAogICAvLyB3aGF0IHRpbWUgaW4gc2Vjb25kcyBkaWQgdGhpcyBzY3JpcHQgc3RhcnQgcnVubmluZwotICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IFNjcmlwdFN0YXJ0VGltZTsKKyAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBTY3JpcHRTdGFydFRpbWUgPQorICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQoKTsKIAotICBjbU1ha2VmaWxlKiBNYWtlZmlsZTsKLSAgY21NYWtlZmlsZSogUGFyZW50TWFrZWZpbGU7Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBHbG9iYWxHZW5lcmF0b3I7Ci0gIGNtYWtlKiBDTWFrZTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTWFrZWZpbGU+IE1ha2VmaWxlOworICBjbU1ha2VmaWxlKiBQYXJlbnRNYWtlZmlsZSA9IG51bGxwdHI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gR2xvYmFsR2VuZXJhdG9yOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21ha2U+IENNYWtlOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFN0YXJ0Q29tbWFuZC5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFN0YXJ0Q29tbWFuZC5jeHgKaW5kZXggZmU2ODQwNi4uNjM5OGQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RTdGFydENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3RhcnRDb21tYW5kLmN4eApAQCAtOTQsMTAgKzk0LDkgQEAKIAogICBzdGQ6OnN0cmluZyBzb3VyY2VEaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHNyY19kaXIpOwogICBzdGQ6OnN0cmluZyBiaW5hcnlEaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGJsZF9kaXIpOwotICB0aGlzLT5DVGVzdC0+U2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJTb3VyY2VEaXJlY3RvcnkiLCBzb3VyY2VEaXIuY19zdHIoKSwKKyAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigiU291cmNlRGlyZWN0b3J5Iiwgc291cmNlRGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKLSAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigiQnVpbGREaXJlY3RvcnkiLCBiaW5hcnlEaXIuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5RdWlldCk7CisgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oIkJ1aWxkRGlyZWN0b3J5IiwgYmluYXJ5RGlyLCB0aGlzLT5RdWlldCk7CiAKICAgaWYgKHNtb2RlbCkgewogICAgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgSEFORExFUl9PVVRQVVQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFN1Ym1pdENvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RTdWJtaXRDb21tYW5kLmN4eAppbmRleCA0NmIwMGIxLi4wMjZlOThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFN1Ym1pdENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3VibWl0Q29tbWFuZC5jeHgKQEAgLTcsMTAgKzcsMTAgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3ZlY3Rvcj4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgotCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RTdWJtaXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY21Db21tYW5kLmgiCkBAIC0zNSwxMiArMzUsMTIgQEAKIAogY21DVGVzdEdlbmVyaWNIYW5kbGVyKiBjbUNUZXN0U3VibWl0Q29tbWFuZDo6SW5pdGlhbGl6ZUhhbmRsZXIoKQogewotICBjb25zdCBjaGFyKiBzdWJtaXRVUkwgPSAhdGhpcy0+U3VibWl0VVJMLmVtcHR5KCkKLSAgICA/IHRoaXMtPlN1Ym1pdFVSTC5jX3N0cigpCi0gICAgOiB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ1RFU1RfU1VCTUlUX1VSTCIpOworICBjb25zdCBzdGQ6OnN0cmluZyogc3VibWl0VVJMID0gIXRoaXMtPlN1Ym1pdFVSTC5lbXB0eSgpCisgICAgPyAmdGhpcy0+U3VibWl0VVJMCisgICAgOiB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKCJDVEVTVF9TVUJNSVRfVVJMIik7CiAKICAgaWYgKHN1Ym1pdFVSTCkgewotICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oIlN1Ym1pdFVSTCIsIHN1Ym1pdFVSTCwgdGhpcy0+UXVpZXQpOworICAgIHRoaXMtPkNUZXN0LT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oIlN1Ym1pdFVSTCIsICpzdWJtaXRVUkwsIHRoaXMtPlF1aWV0KTsKICAgfSBlbHNlIHsKICAgICB0aGlzLT5DVGVzdC0+U2V0Q1Rlc3RDb25maWd1cmF0aW9uRnJvbUNNYWtlVmFyaWFibGUoCiAgICAgICB0aGlzLT5NYWtlZmlsZSwgIkRyb3BNZXRob2QiLCAiQ1RFU1RfRFJPUF9NRVRIT0QiLCB0aGlzLT5RdWlldCk7CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgaWYgKHRoaXMtPlBhcnRzTWVudGlvbmVkKSB7CiAgICAgYXV0byBwYXJ0cyA9CiAgICAgICBjbU1ha2VSYW5nZSh0aGlzLT5QYXJ0cykudHJhbnNmb3JtKFt0aGlzXShzdGQ6OnN0cmluZyBjb25zdCYgYXJnKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLT5DVGVzdC0+R2V0UGFydEZyb21OYW1lKGFyZy5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIHRoaXMtPkNUZXN0LT5HZXRQYXJ0RnJvbU5hbWUoYXJnKTsKICAgICAgIH0pOwogICAgIGhhbmRsZXItPlNlbGVjdFBhcnRzKHN0ZDo6c2V0PGNtQ1Rlc3Q6OlBhcnQ+KHBhcnRzLmJlZ2luKCksIHBhcnRzLmVuZCgpKSk7CiAgIH0KQEAgLTE3MSwxMSArMTcxLDEzIEBACiB2b2lkIGNtQ1Rlc3RTdWJtaXRDb21tYW5kOjpDaGVja0FyZ3VtZW50cygKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBrZXl3b3JkcykKIHsKLSAgdGhpcy0+UGFydHNNZW50aW9uZWQgPSAhdGhpcy0+UGFydHMuZW1wdHkoKSB8fCBjbUNvbnRhaW5zKGtleXdvcmRzLCAiUEFSVFMiKTsKLSAgdGhpcy0+RmlsZXNNZW50aW9uZWQgPSAhdGhpcy0+RmlsZXMuZW1wdHkoKSB8fCBjbUNvbnRhaW5zKGtleXdvcmRzLCAiRklMRVMiKTsKKyAgdGhpcy0+UGFydHNNZW50aW9uZWQgPQorICAgICF0aGlzLT5QYXJ0cy5lbXB0eSgpIHx8IGNtOjpjb250YWlucyhrZXl3b3JkcywgIlBBUlRTIik7CisgIHRoaXMtPkZpbGVzTWVudGlvbmVkID0KKyAgICAhdGhpcy0+RmlsZXMuZW1wdHkoKSB8fCBjbTo6Y29udGFpbnMoa2V5d29yZHMsICJGSUxFUyIpOwogCi0gIGNtRXJhc2VJZih0aGlzLT5QYXJ0cywgW3RoaXNdKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcpIC0+IGJvb2wgewotICAgIGNtQ1Rlc3Q6OlBhcnQgcCA9IHRoaXMtPkNUZXN0LT5HZXRQYXJ0RnJvbU5hbWUoYXJnLmNfc3RyKCkpOworICBjbTo6ZXJhc2VfaWYodGhpcy0+UGFydHMsIFt0aGlzXShzdGQ6OnN0cmluZyBjb25zdCYgYXJnKSAtPiBib29sIHsKKyAgICBjbUNUZXN0OjpQYXJ0IHAgPSB0aGlzLT5DVGVzdC0+R2V0UGFydEZyb21OYW1lKGFyZyk7CiAgICAgaWYgKHAgPT0gY21DVGVzdDo6UGFydENvdW50KSB7CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKICAgICAgIGUgPDwgIlBhcnQgbmFtZSBcIiIgPDwgYXJnIDw8ICJcIiBpcyBpbnZhbGlkLiI7CkBAIC0xODUsNyArMTg3LDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0pOwogCi0gIGNtRXJhc2VJZih0aGlzLT5GaWxlcywgW3RoaXNdKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcpIC0+IGJvb2wgeworICBjbTo6ZXJhc2VfaWYodGhpcy0+RmlsZXMsIFt0aGlzXShzdGQ6OnN0cmluZyBjb25zdCYgYXJnKSAtPiBib29sIHsKICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoYXJnKSkgewogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICBlIDw8ICJGaWxlIFwiIiA8PCBhcmcgPDwgIlwiIGRvZXMgbm90IGV4aXN0LiBDYW5ub3Qgc3VibWl0ICIKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3VibWl0SGFuZGxlci5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFN1Ym1pdEhhbmRsZXIuY3h4CmluZGV4IDJhYzVhZjYuLjViNTQ1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0U3VibWl0SGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RTdWJtaXRIYW5kbGVyLmN4eApAQCAtNyw5ICs3LDExIEBACiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxzc3RyZWFtPgogCi0jaW5jbHVkZSAiY21fY3VybC5oIgotI2luY2x1ZGUgImNtX2pzb25jcHBfcmVhZGVyLmgiCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKworI2luY2x1ZGUgPGNtM3AvY3VybC9jdXJsLmg+CisjaW5jbHVkZSA8Y20zcC9qc29uL3JlYWRlci5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgogCiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgpAQCAtMTksNiArMjEsNyBAQAogI2luY2x1ZGUgImNtQ3VybC5oIgogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTY1LDcgKzY4LDcgQEAKIAogICB2b2lkIENoYXJhY3RlckRhdGFIYW5kbGVyKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRlCiAgIHsKLSAgICBjbUFwcGVuZCh0aGlzLT5DdXJyZW50VmFsdWUsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICAgIGNtOjphcHBlbmQodGhpcy0+Q3VycmVudFZhbHVlLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKICAgfQogCiAgIHZvaWQgRW5kRWxlbWVudChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgb3ZlcnJpZGUKQEAgLTk2LDggKzk5LDggQEAKIHsKICAgaW50IHJlYWxzaXplID0gc3RhdGljX2Nhc3Q8aW50PihzaXplICogbm1lbWIpOwogICBjb25zdCBjaGFyKiBjaFB0ciA9IHN0YXRpY19jYXN0PGNoYXIqPihwdHIpOwotICBjbUFwcGVuZCgqc3RhdGljX2Nhc3Q8Y21DVGVzdFN1Ym1pdEhhbmRsZXJWZWN0b3JPZkNoYXIqPihkYXRhKSwgY2hQdHIsCi0gICAgICAgICAgIGNoUHRyICsgcmVhbHNpemUpOworICBjbTo6YXBwZW5kKCpzdGF0aWNfY2FzdDxjbUNUZXN0U3VibWl0SGFuZGxlclZlY3Rvck9mQ2hhcio+KGRhdGEpLCBjaFB0ciwKKyAgICAgICAgICAgICBjaFB0ciArIHJlYWxzaXplKTsKICAgcmV0dXJuIHJlYWxzaXplOwogfQogCkBAIC0xMDYsOSArMTA5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBjaFB0ciwgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogZGF0YSkKIHsKLSAgY21BcHBlbmQoKnN0YXRpY19jYXN0PGNtQ1Rlc3RTdWJtaXRIYW5kbGVyVmVjdG9yT2ZDaGFyKj4oZGF0YSksIGNoUHRyLAotICAgICAgICAgICBjaFB0ciArIHNpemUpOwotICByZXR1cm4gc2l6ZTsKKyAgY206OmFwcGVuZCgqc3RhdGljX2Nhc3Q8Y21DVGVzdFN1Ym1pdEhhbmRsZXJWZWN0b3JPZkNoYXIqPihkYXRhKSwgY2hQdHIsCisgICAgICAgICAgICAgY2hQdHIgKyBzaXplKTsKKyAgcmV0dXJuIDA7CiB9CiAKIGNtQ1Rlc3RTdWJtaXRIYW5kbGVyOjpjbUNUZXN0U3VibWl0SGFuZGxlcigpCkBAIC0yNTgsMTEgKzI2MSwxMCBAQAogICAgICAgICBjbUNUZXN0U2NyaXB0SGFuZGxlciogY2ggPSB0aGlzLT5DVGVzdC0+R2V0U2NyaXB0SGFuZGxlcigpOwogICAgICAgICBjbWFrZSogY20gPSBjaC0+R2V0Q01ha2UoKTsKICAgICAgICAgaWYgKGNtKSB7Ci0gICAgICAgICAgY29uc3QgY2hhciogc3VicHJvamVjdCA9Ci0gICAgICAgICAgICBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlN1YlByb2plY3QiKTsKKyAgICAgICAgICBjbVByb3Agc3VicHJvamVjdCA9IGNtLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiU3ViUHJvamVjdCIpOwogICAgICAgICAgIGlmIChzdWJwcm9qZWN0KSB7CiAgICAgICAgICAgICB1cGxvYWRfYXMgKz0gIiZzdWJwcm9qZWN0PSI7Ci0gICAgICAgICAgICB1cGxvYWRfYXMgKz0gY3Rlc3RfY3VybC5Fc2NhcGUoc3VicHJvamVjdCk7CisgICAgICAgICAgICB1cGxvYWRfYXMgKz0gY3Rlc3RfY3VybC5Fc2NhcGUoKnN1YnByb2plY3QpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtNTA0LDE4ICs1MDYsMTkgQEAKICAgY3VybC5TZXRUaW1lT3V0U2Vjb25kcyhTVUJNSVRfVElNRU9VVF9JTl9TRUNPTkRTX0RFRkFVTFQpOwogICBjdXJsLlNldEh0dHBIZWFkZXJzKHRoaXMtPkh0dHBIZWFkZXJzKTsKICAgc3RkOjpzdHJpbmcgdXJsID0gdGhpcy0+Q1Rlc3QtPkdldFN1Ym1pdFVSTCgpOwotICBzdGQ6OnN0cmluZyBmaWVsZHM7Ci0gIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gdXJsLmZpbmQoJz8nKTsKLSAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIGZpZWxkcyA9IHVybC5zdWJzdHIocG9zICsgMSk7Ci0gICAgdXJsID0gdXJsLnN1YnN0cigwLCBwb3MpOwotICB9CiAgIGlmICghY21IYXNMaXRlcmFsUHJlZml4KHVybCwgImh0dHA6Ly8iKSAmJgogICAgICAgIWNtSGFzTGl0ZXJhbFByZWZpeCh1cmwsICJodHRwczovLyIpKSB7CiAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICJPbmx5IGh0dHAgYW5kIGh0dHBzIGFyZSBzdXBwb3J0ZWQgZm9yIENEQVNIX1VQTE9BRFxuIik7CiAgICAgcmV0dXJuIC0xOwogICB9CisKKyAgc3RkOjpzdHJpbmcgZmllbGRzOworICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IHVybC5maW5kKCc/Jyk7CisgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBmaWVsZHMgPSB1cmwuc3Vic3RyKHBvcyArIDEpOworICAgIHVybC5lcmFzZShwb3MpOworICB9CiAgIGJvb2wgaW50ZXJuYWxUZXN0ID0gY21Jc09uKHRoaXMtPkdldE9wdGlvbigiSW50ZXJuYWxUZXN0IikpOwogCiAgIC8vIEdldCBSRVRSWV9DT1VOVCBhbmQgUkVUUllfREVMQVkgdmFsdWVzIGlmIHRoZXkgd2VyZSBzZXQuCkBAIC01NTMsMTEgKzU1NiwxMSBAQAogICAvLyBhICImc3VicHJvamVjdD1zdWJwcm9qZWN0bmFtZSIgdG8gdGhlIGZpcnN0IFBPU1QuCiAgIGNtQ1Rlc3RTY3JpcHRIYW5kbGVyKiBjaCA9IHRoaXMtPkNUZXN0LT5HZXRTY3JpcHRIYW5kbGVyKCk7CiAgIGNtYWtlKiBjbSA9IGNoLT5HZXRDTWFrZSgpOwotICBjb25zdCBjaGFyKiBzdWJwcm9qZWN0ID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJTdWJQcm9qZWN0Iik7CisgIGNtUHJvcCBzdWJwcm9qZWN0ID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJTdWJQcm9qZWN0Iik7CiAgIC8vIFRPRE86IEVuY29kZSB2YWx1ZXMgZm9yIGEgVVJMIGluc3RlYWQgb2YgdHJ1c3RpbmcgY2FsbGVyLgogICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyOwogICBpZiAoc3VicHJvamVjdCkgewotICAgIHN0ciA8PCAic3VicHJvamVjdD0iIDw8IGN1cmwuRXNjYXBlKHN1YnByb2plY3QpIDw8ICImIjsKKyAgICBzdHIgPDwgInN1YnByb2plY3Q9IiA8PCBjdXJsLkVzY2FwZSgqc3VicHJvamVjdCkgPDwgIiYiOwogICB9CiAgIGF1dG8gdGltZU5vdyA9CiAgICAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dG9fdGltZV90KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpKTsKQEAgLTc2OCw3ICs3NzEsNyBAQAogCiAgIGlmICghdGhpcy0+RmlsZXMuZW1wdHkoKSkgewogICAgIC8vIFN1Ym1pdCB0aGUgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlczoKLSAgICBjbUFwcGVuZChmaWxlcywgdGhpcy0+RmlsZXMpOworICAgIGNtOjphcHBlbmQoZmlsZXMsIHRoaXMtPkZpbGVzKTsKICAgfQogCiAgIC8vIEFkZCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byBzdWJtaXQgZnJvbSBhbnkgc2VsZWN0ZWQsIGV4aXN0aW5nIHBhcnRzOgpAQCAtNzk0LDcgKzc5Nyw3IEBACiAgICAgICAgIGdmaWxlID0gZ2ZpbGUuc3Vic3RyKGdsZW4pOwogICAgICAgICBjbUNUZXN0T3B0aW9uYWxMb2codGhpcy0+Q1Rlc3QsIERFQlVHLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdsb2IgZmlsZTogIiA8PCBnZmlsZSA8PCBzdGQ6OmVuZGwsIHRoaXMtPlF1aWV0KTsKLSAgICAgICAgdGhpcy0+Q1Rlc3QtPkFkZFN1Ym1pdEZpbGUoY21DVGVzdDo6UGFydENvdmVyYWdlLCBnZmlsZS5jX3N0cigpKTsKKyAgICAgICAgdGhpcy0+Q1Rlc3QtPkFkZFN1Ym1pdEZpbGUoY21DVGVzdDo6UGFydENvdmVyYWdlLCBnZmlsZSk7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsICJQcm9ibGVtIGdsb2JiaW5nIiA8PCBzdGQ6OmVuZGwpOwpAQCAtODE0LDcgKzgxNyw3IEBACiAgICAgfQogCiAgICAgLy8gU3VibWl0IGZpbGVzIGZyb20gdGhpcyBwYXJ0LgotICAgIGNtQXBwZW5kKGZpbGVzLCB0aGlzLT5DVGVzdC0+R2V0U3VibWl0RmlsZXMocCkpOworICAgIGNtOjphcHBlbmQoZmlsZXMsIHRoaXMtPkNUZXN0LT5HZXRTdWJtaXRGaWxlcyhwKSk7CiAgIH0KIAogICAvLyBNYWtlIHN1cmUgZmlsZXMgYXJlIHVuaXF1ZSwgYnV0IHByZXNlcnZlIG9yZGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RDb21tYW5kLmN4eAppbmRleCA5Nzg0MjE0Li5jYmMzYzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RDb21tYW5kLmN4eApAQCAtNiwxMyArNiwxNCBAQAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8c3N0cmVhbT4KIAotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbUNUZXN0LmgiCiAjaW5jbHVkZSAiY21DVGVzdEdlbmVyaWNIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY21DVGVzdFRlc3RIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAKIHZvaWQgY21DVGVzdFRlc3RDb21tYW5kOjpCaW5kQXJndW1lbnRzKCkKQEAgLTI5LDEwICszMCwxMiBAQAogICB0aGlzLT5CaW5kKCJFWENMVURFX0ZJWFRVUkVfU0VUVVAiX3MsIHRoaXMtPkV4Y2x1ZGVGaXh0dXJlU2V0dXApOwogICB0aGlzLT5CaW5kKCJFWENMVURFX0ZJWFRVUkVfQ0xFQU5VUCJfcywgdGhpcy0+RXhjbHVkZUZpeHR1cmVDbGVhbnVwKTsKICAgdGhpcy0+QmluZCgiUEFSQUxMRUxfTEVWRUwiX3MsIHRoaXMtPlBhcmFsbGVsTGV2ZWwpOworICB0aGlzLT5CaW5kKCJSRVBFQVQiX3MsIHRoaXMtPlJlcGVhdCk7CiAgIHRoaXMtPkJpbmQoIlNDSEVEVUxFX1JBTkRPTSJfcywgdGhpcy0+U2NoZWR1bGVSYW5kb20pOwogICB0aGlzLT5CaW5kKCJTVE9QX1RJTUUiX3MsIHRoaXMtPlN0b3BUaW1lKTsKICAgdGhpcy0+QmluZCgiVEVTVF9MT0FEIl9zLCB0aGlzLT5UZXN0TG9hZCk7CiAgIHRoaXMtPkJpbmQoIlJFU09VUkNFX1NQRUNfRklMRSJfcywgdGhpcy0+UmVzb3VyY2VTcGVjRmlsZSk7CisgIHRoaXMtPkJpbmQoIlNUT1BfT05fRkFJTFVSRSJfcywgdGhpcy0+U3RvcE9uRmFpbHVyZSk7CiB9CiAKIGNtQ1Rlc3RHZW5lcmljSGFuZGxlciogY21DVGVzdFRlc3RDb21tYW5kOjpJbml0aWFsaXplSGFuZGxlcigpCkBAIC01MSw2ICs1NCwxMyBAQAogICAgIH0KICAgfQogICB0aGlzLT5DVGVzdC0+U2V0VGltZU91dCh0aW1lb3V0KTsKKworICBjb25zdCBjaGFyKiByZXNvdXJjZVNwZWNGaWxlID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFIik7CisgIGlmICh0aGlzLT5SZXNvdXJjZVNwZWNGaWxlLmVtcHR5KCkgJiYgcmVzb3VyY2VTcGVjRmlsZSkgeworICAgIHRoaXMtPlJlc291cmNlU3BlY0ZpbGUgPSByZXNvdXJjZVNwZWNGaWxlOworICB9CisKICAgY21DVGVzdEdlbmVyaWNIYW5kbGVyKiBoYW5kbGVyID0gdGhpcy0+SW5pdGlhbGl6ZUFjdHVhbEhhbmRsZXIoKTsKICAgaWYgKCF0aGlzLT5TdGFydC5lbXB0eSgpIHx8ICF0aGlzLT5FbmQuZW1wdHkoKSB8fCAhdGhpcy0+U3RyaWRlLmVtcHR5KCkpIHsKICAgICBoYW5kbGVyLT5TZXRPcHRpb24oCkBAIC04Miw5ICs5MiwxNSBAQAogICAgIGhhbmRsZXItPlNldE9wdGlvbigiRXhjbHVkZUZpeHR1cmVDbGVhbnVwUmVndWxhckV4cHJlc3Npb24iLAogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5FeGNsdWRlRml4dHVyZUNsZWFudXAuY19zdHIoKSk7CiAgIH0KKyAgaWYgKHRoaXMtPlN0b3BPbkZhaWx1cmUpIHsKKyAgICBoYW5kbGVyLT5TZXRPcHRpb24oIlN0b3BPbkZhaWx1cmUiLCAiT04iKTsKKyAgfQogICBpZiAoIXRoaXMtPlBhcmFsbGVsTGV2ZWwuZW1wdHkoKSkgewogICAgIGhhbmRsZXItPlNldE9wdGlvbigiUGFyYWxsZWxMZXZlbCIsIHRoaXMtPlBhcmFsbGVsTGV2ZWwuY19zdHIoKSk7CiAgIH0KKyAgaWYgKCF0aGlzLT5SZXBlYXQuZW1wdHkoKSkgeworICAgIGhhbmRsZXItPlNldE9wdGlvbigiUmVwZWF0IiwgdGhpcy0+UmVwZWF0LmNfc3RyKCkpOworICB9CiAgIGlmICghdGhpcy0+U2NoZWR1bGVSYW5kb20uZW1wdHkoKSkgewogICAgIGhhbmRsZXItPlNldE9wdGlvbigiU2NoZWR1bGVSYW5kb20iLCB0aGlzLT5TY2hlZHVsZVJhbmRvbS5jX3N0cigpKTsKICAgfQpAQCAtMTAxLDEzICsxMTcsMTMgQEAKICAgdW5zaWduZWQgbG9uZyB0ZXN0TG9hZDsKICAgY29uc3QgY2hhciogY3Rlc3RUZXN0TG9hZCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDVEVTVF9URVNUX0xPQUQiKTsKICAgaWYgKCF0aGlzLT5UZXN0TG9hZC5lbXB0eSgpKSB7Ci0gICAgaWYgKCFjbVN0clRvVUxvbmcodGhpcy0+VGVzdExvYWQuY19zdHIoKSwgJnRlc3RMb2FkKSkgeworICAgIGlmICghY21TdHJUb1VMb25nKHRoaXMtPlRlc3RMb2FkLCAmdGVzdExvYWQpKSB7CiAgICAgICB0ZXN0TG9hZCA9IDA7CiAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBXQVJOSU5HLAogICAgICAgICAgICAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgJ1RFU1RfTE9BRCcgOiAiIDw8IHRoaXMtPlRlc3RMb2FkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKICAgICB9Ci0gIH0gZWxzZSBpZiAoY3Rlc3RUZXN0TG9hZCAmJiAqY3Rlc3RUZXN0TG9hZCkgeworICB9IGVsc2UgaWYgKGNtTm9uZW1wdHkoY3Rlc3RUZXN0TG9hZCkpIHsKICAgICBpZiAoIWNtU3RyVG9VTG9uZyhjdGVzdFRlc3RMb2FkLCAmdGVzdExvYWQpKSB7CiAgICAgICB0ZXN0TG9hZCA9IDA7CiAgICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBXQVJOSU5HLApAQCAtMTE5LDEwICsxMzUsMTAgQEAKICAgfQogICBoYW5kbGVyLT5TZXRUZXN0TG9hZCh0ZXN0TG9hZCk7CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGxhYmVsc0ZvclN1YnByb2plY3RzID0KLSAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNURVNUX0xBQkVMU19GT1JfU1VCUFJPSkVDVFMiKSkgeworICBpZiAoY21Qcm9wIGxhYmVsc0ZvclN1YnByb2plY3RzID0KKyAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZigiQ1RFU1RfTEFCRUxTX0ZPUl9TVUJQUk9KRUNUUyIpKSB7CiAgICAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigiTGFiZWxzRm9yU3VicHJvamVjdHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzRm9yU3VicHJvamVjdHMsIHRoaXMtPlF1aWV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpsYWJlbHNGb3JTdWJwcm9qZWN0cywgdGhpcy0+UXVpZXQpOwogICB9CiAKICAgaGFuZGxlci0+U2V0UXVpZXQodGhpcy0+UXVpZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5oIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0Q29tbWFuZC5oCmluZGV4IDQwMTk2OTQuLjc5MjU1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdENvbW1hbmQuaAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RDb21tYW5kLmgKQEAgLTU1LDEwICs1NSwxMiBAQAogICBzdGQ6OnN0cmluZyBFeGNsdWRlRml4dHVyZVNldHVwOwogICBzdGQ6OnN0cmluZyBFeGNsdWRlRml4dHVyZUNsZWFudXA7CiAgIHN0ZDo6c3RyaW5nIFBhcmFsbGVsTGV2ZWw7CisgIHN0ZDo6c3RyaW5nIFJlcGVhdDsKICAgc3RkOjpzdHJpbmcgU2NoZWR1bGVSYW5kb207CiAgIHN0ZDo6c3RyaW5nIFN0b3BUaW1lOwogICBzdGQ6OnN0cmluZyBUZXN0TG9hZDsKICAgc3RkOjpzdHJpbmcgUmVzb3VyY2VTcGVjRmlsZTsKKyAgYm9vbCBTdG9wT25GYWlsdXJlID0gZmFsc2U7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5jeHgKaW5kZXggYzhiYmIwYi4uNzBlODRlZSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5jeHgKQEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3N0cmluZz4KQEAgLTE4LDYgKzE4LDkgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgPGNtc3lzL0Jhc2U2NC5oPgpAQCAtMjYsNyArMjksNiBAQAogCiAjaW5jbHVkZSAiY21fdXRmOC5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21DVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY21DVGVzdFJlc291cmNlR3JvdXBzTGV4ZXJIZWxwZXIuaCIKQEAgLTQwNiwxNCArNDA4LDIxIEBACiAgIC8vIHN0YXJ0IHRoZSByZWFsIHRpbWUgY2xvY2sKICAgYXV0byBjbG9ja19zdGFydCA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogCi0gIHRoaXMtPlByb2Nlc3NEaXJlY3RvcnkocGFzc2VkLCBmYWlsZWQpOworICBpZiAoIXRoaXMtPlByb2Nlc3NEaXJlY3RvcnkocGFzc2VkLCBmYWlsZWQpKSB7CisgICAgcmV0dXJuIC0xOworICB9CiAKICAgYXV0byBjbG9ja19maW5pc2ggPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKIAorICBib29sIG5vVGVzdHNGb3VuZEVycm9yID0gZmFsc2U7CiAgIGlmIChwYXNzZWQuc2l6ZSgpICsgZmFpbGVkLnNpemUoKSA9PSAwKSB7Ci0gICAgaWYgKCF0aGlzLT5DVGVzdC0+R2V0U2hvd09ubHkoKSAmJiAhdGhpcy0+Q1Rlc3QtPlNob3VsZFByaW50TGFiZWxzKCkpIHsKKyAgICBpZiAoIXRoaXMtPkNUZXN0LT5HZXRTaG93T25seSgpICYmICF0aGlzLT5DVGVzdC0+U2hvdWxkUHJpbnRMYWJlbHMoKSAmJgorICAgICAgICB0aGlzLT5DVGVzdC0+R2V0Tm9UZXN0c01vZGUoKSAhPSBjbUNUZXN0OjpOb1Rlc3RzOjpJZ25vcmUpIHsKICAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsCiAgICAgICAgICAgICAgICAgICJObyB0ZXN0cyB3ZXJlIGZvdW5kISEhIiA8PCBzdGQ6OmVuZGwpOworICAgICAgaWYgKHRoaXMtPkNUZXN0LT5HZXROb1Rlc3RzTW9kZSgpID09IGNtQ1Rlc3Q6Ok5vVGVzdHM6OkVycm9yKSB7CisgICAgICAgIG5vVGVzdHNGb3VuZEVycm9yID0gdHJ1ZTsKKyAgICAgIH0KICAgICB9CiAgIH0gZWxzZSB7CiAgICAgaWYgKHRoaXMtPkhhbmRsZXJWZXJib3NlICYmICFwYXNzZWQuZW1wdHkoKSAmJgpAQCAtNDU5LDYgKzQ2OCwxMiBAQAogICAgIHRoaXMtPkxvZ0ZpbGUgPSBudWxscHRyOwogICAgIHJldHVybiAtMTsKICAgfQorCisgIGlmIChub1Rlc3RzRm91bmRFcnJvcikgeworICAgIHRoaXMtPkxvZ0ZpbGUgPSBudWxscHRyOworICAgIHJldHVybiAtMTsKKyAgfQorCiAgIHRoaXMtPkxvZ0ZpbGUgPSBudWxscHRyOwogICByZXR1cm4gMDsKIH0KQEAgLTQ3MSwxMCArNDg2LDM4IEBACiAgIGlmIChjbUlzT24odGhpcy0+R2V0T3B0aW9uKCJTY2hlZHVsZVJhbmRvbSIpKSkgewogICAgIHRoaXMtPkNUZXN0LT5TZXRTY2hlZHVsZVR5cGUoIlJhbmRvbSIpOwogICB9CisgIGlmIChjb25zdCBjaGFyKiByZXBlYXQgPSB0aGlzLT5HZXRPcHRpb24oIlJlcGVhdCIpKSB7CisgICAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIHJlcGVhdFJlZ2V4KAorICAgICAgIl4oVU5USUxfRkFJTHxVTlRJTF9QQVNTfEFGVEVSX1RJTUVPVVQpOihbMC05XSspJCIpOworICAgIGlmIChyZXBlYXRSZWdleC5maW5kKHJlcGVhdCkpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb3VudCA9IHJlcGVhdFJlZ2V4Lm1hdGNoKDIpOworICAgICAgdW5zaWduZWQgbG9uZyBuID0gMTsKKyAgICAgIGNtU3RyVG9VTG9uZyhjb3VudCwgJm4pOyAvLyByZWdleCBndWFyYW50ZWVzIHN1Y2Nlc3MKKyAgICAgIHRoaXMtPlJlcGVhdENvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihuKTsKKyAgICAgIGlmICh0aGlzLT5SZXBlYXRDb3VudCA+IDEpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG1vZGUgPSByZXBlYXRSZWdleC5tYXRjaCgxKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gIlVOVElMX0ZBSUwiKSB7CisgICAgICAgICAgdGhpcy0+UmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6VW50aWxGYWlsOworICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gIlVOVElMX1BBU1MiKSB7CisgICAgICAgICAgdGhpcy0+UmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6VW50aWxQYXNzOworICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gIkFGVEVSX1RJTUVPVVQiKSB7CisgICAgICAgICAgdGhpcy0+UmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6QWZ0ZXJUaW1lb3V0OworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsCisgICAgICAgICAgICAgICAgICJSZXBlYXQgb3B0aW9uIGludmFsaWQgdmFsdWU6ICIgPDwgcmVwZWF0IDw8IHN0ZDo6ZW5kbCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CiAgIGlmICh0aGlzLT5HZXRPcHRpb24oIlBhcmFsbGVsTGV2ZWwiKSkgewogICAgIHRoaXMtPkNUZXN0LT5TZXRQYXJhbGxlbExldmVsKGF0b2kodGhpcy0+R2V0T3B0aW9uKCJQYXJhbGxlbExldmVsIikpKTsKICAgfQogCisgIGlmICh0aGlzLT5HZXRPcHRpb24oIlN0b3BPbkZhaWx1cmUiKSkgeworICAgIHRoaXMtPkNUZXN0LT5TZXRTdG9wT25GYWlsdXJlKHRydWUpOworICB9CisKICAgY29uc3QgY2hhciogdmFsOwogICB2YWwgPSB0aGlzLT5HZXRPcHRpb24oIkxhYmVsUmVndWxhckV4cHJlc3Npb24iKTsKICAgaWYgKHZhbCkgewpAQCAtNTA4LDIxICs1NTEsMTEgQEAKICAgaWYgKHZhbCkgewogICAgIHRoaXMtPkV4Y2x1ZGVGaXh0dXJlQ2xlYW51cFJlZ0V4cCA9IHZhbDsKICAgfQotICB0aGlzLT5TZXRSZXJ1bkZhaWxlZChjbUlzT24odGhpcy0+R2V0T3B0aW9uKCJSZXJ1bkZhaWxlZCIpKSk7Ci0KICAgdmFsID0gdGhpcy0+R2V0T3B0aW9uKCJSZXNvdXJjZVNwZWNGaWxlIik7CiAgIGlmICh2YWwpIHsKLSAgICB0aGlzLT5Vc2VSZXNvdXJjZVNwZWMgPSB0cnVlOwotICAgIGF1dG8gcmVzdWx0ID0gdGhpcy0+UmVzb3VyY2VTcGVjLlJlYWRGcm9tSlNPTkZpbGUodmFsKTsKLSAgICBpZiAocmVzdWx0ICE9IGNtQ1Rlc3RSZXNvdXJjZVNwZWM6OlJlYWRGaWxlUmVzdWx0OjpSRUFEX09LKSB7Ci0gICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAotICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlYWQvcGFyc2UgcmVzb3VyY2Ugc3BlYyBmaWxlICIKLSAgICAgICAgICAgICAgICAgICA8PCB2YWwgPDwgIjogIgotICAgICAgICAgICAgICAgICAgIDw8IGNtQ1Rlc3RSZXNvdXJjZVNwZWM6OlJlc3VsdFRvU3RyaW5nKHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICB0aGlzLT5SZXNvdXJjZVNwZWNGaWxlID0gdmFsOwogICB9CisgIHRoaXMtPlNldFJlcnVuRmFpbGVkKGNtSXNPbih0aGlzLT5HZXRPcHRpb24oIlJlcnVuRmFpbGVkIikpKTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY4Miw3ICs3MTUsNyBAQAogICAgIGNtQ1Rlc3RUZXN0UHJvcGVydGllcyYgcCA9ICpyZXN1bHQuUHJvcGVydGllczsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsIDogcC5MYWJlbHMpIHsKICAgICAgIC8vIG9ubHkgdXNlIGxhYmVscyBmb3VuZCBpbiBsYWJlbHMKLSAgICAgIGlmIChjbUNvbnRhaW5zKGxhYmVscywgbCkpIHsKKyAgICAgIGlmIChjbTo6Y29udGFpbnMobGFiZWxzLCBsKSkgewogICAgICAgICBsYWJlbFRpbWVzW2xdICs9CiAgICAgICAgICAgcmVzdWx0LkV4ZWN1dGlvblRpbWUuY291bnQoKSAqIHJlc3VsdC5Qcm9wZXJ0aWVzLT5Qcm9jZXNzb3JzOwogICAgICAgICArK2xhYmVsQ291bnRzW2xdOwpAQCAtODI0LDE0ICs4NTcsMTUgQEAKIAogICAgIGlmICh0aGlzLT5Vc2VVbmlvbikgewogICAgICAgLy8gaWYgaXQgaXMgbm90IGluIHRoZSBsaXN0IGFuZCBub3QgaW4gdGhlIHJlZ2V4cCB0aGVuIHNraXAKLSAgICAgIGlmICgoIXRoaXMtPlRlc3RzVG9SdW4uZW1wdHkoKSAmJiAhY21Db250YWlucyh0aGlzLT5UZXN0c1RvUnVuLCBjbnQpKSAmJgorICAgICAgaWYgKCghdGhpcy0+VGVzdHNUb1J1bi5lbXB0eSgpICYmCisgICAgICAgICAgICFjbTo6Y29udGFpbnModGhpcy0+VGVzdHNUb1J1biwgY250KSkgJiYKICAgICAgICAgICAhdHAuSXNJbkJhc2VkT25SRU9wdGlvbnMpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIGlzIHRoaXMgdGVzdCBpbiB0aGUgbGlzdCBvZiB0ZXN0cyB0byBydW4/IElmIG5vdCB0aGVuIHNraXAgaXQKICAgICAgIGlmICgoIXRoaXMtPlRlc3RzVG9SdW4uZW1wdHkoKSAmJgotICAgICAgICAgICAhY21Db250YWlucyh0aGlzLT5UZXN0c1RvUnVuLCBpblJFY250KSkgfHwKKyAgICAgICAgICAgIWNtOjpjb250YWlucyh0aGlzLT5UZXN0c1RvUnVuLCBpblJFY250KSkgfHwKICAgICAgICAgICAhdHAuSXNJbkJhc2VkT25SRU9wdGlvbnMpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CkBAIC04NjAsNyArODk0LDcgQEAKICAgICBjbnQrKzsKIAogICAgIC8vIGlmIHRoaXMgdGVzdCBpcyBub3QgaW4gb3VyIGxpc3Qgb2YgdGVzdHMgdG8gcnVuLCB0aGVuIHNraXAgaXQuCi0gICAgaWYgKCF0aGlzLT5UZXN0c1RvUnVuLmVtcHR5KCkgJiYgIWNtQ29udGFpbnModGhpcy0+VGVzdHNUb1J1biwgY250KSkgeworICAgIGlmICghdGhpcy0+VGVzdHNUb1J1bi5lbXB0eSgpICYmICFjbTo6Y29udGFpbnModGhpcy0+VGVzdHNUb1J1biwgY250KSkgewogICAgICAgY29udGludWU7CiAgICAgfQogCkBAIC05NzksNyArMTAxMyw3IEBACiAgICAgICBmb3IgKGF1dG8gc0l0ID0gc2V0dXBSYW5nZS5maXJzdDsgc0l0ICE9IHNldHVwUmFuZ2Uuc2Vjb25kOyArK3NJdCkgewogICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc2V0dXBUZXN0TmFtZSA9IHNJdC0+c2Vjb25kLT5OYW1lOwogICAgICAgICB0ZXN0c1tpXS5SZXF1aXJlU3VjY2Vzc0RlcGVuZHMuaW5zZXJ0KHNldHVwVGVzdE5hbWUpOwotICAgICAgICBpZiAoIWNtQ29udGFpbnModGVzdHNbaV0uRGVwZW5kcywgc2V0dXBUZXN0TmFtZSkpIHsKKyAgICAgICAgaWYgKCFjbTo6Y29udGFpbnModGVzdHNbaV0uRGVwZW5kcywgc2V0dXBUZXN0TmFtZSkpIHsKICAgICAgICAgICB0ZXN0c1tpXS5EZXBlbmRzLnB1c2hfYmFjayhzZXR1cFRlc3ROYW1lKTsKICAgICAgICAgfQogICAgICAgfQpAQCAtMTA4Myw3ICsxMTE3LDcgQEAKICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c2l6ZV90PiYgaW5kaWNlcyA9IGNJdC0+c2Vjb25kOwogICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMpIHsKICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVxVGVzdE5hbWUgPSB0ZXN0c1tpbmRleF0uTmFtZTsKLSAgICAgICAgICBpZiAoIWNtQ29udGFpbnMocC5EZXBlbmRzLCByZXFUZXN0TmFtZSkpIHsKKyAgICAgICAgICBpZiAoIWNtOjpjb250YWlucyhwLkRlcGVuZHMsIHJlcVRlc3ROYW1lKSkgewogICAgICAgICAgICAgcC5EZXBlbmRzLnB1c2hfYmFjayhyZXFUZXN0TmFtZSk7CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDk2LDcgKzExMzAsNyBAQAogICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiBpbmRpY2VzID0gY0l0LT5zZWNvbmQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcykgewogICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXR1cFRlc3ROYW1lID0gdGVzdHNbaW5kZXhdLk5hbWU7Ci0gICAgICAgICAgaWYgKCFjbUNvbnRhaW5zKHAuRGVwZW5kcywgc2V0dXBUZXN0TmFtZSkpIHsKKyAgICAgICAgICBpZiAoIWNtOjpjb250YWlucyhwLkRlcGVuZHMsIHNldHVwVGVzdE5hbWUpKSB7CiAgICAgICAgICAgICBwLkRlcGVuZHMucHVzaF9iYWNrKHNldHVwVGVzdE5hbWUpOwogICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTIyMyw3ICsxMjU3LDcgQEAKICAgcmV0dXJuIHJldDsKIH0KIAotdm9pZCBjbUNUZXN0VGVzdEhhbmRsZXI6OlByb2Nlc3NEaXJlY3Rvcnkoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXNzZWQsCitib29sIGNtQ1Rlc3RUZXN0SGFuZGxlcjo6UHJvY2Vzc0RpcmVjdG9yeShzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHBhc3NlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZmFpbGVkKQogewogICB0aGlzLT5Db21wdXRlVGVzdExpc3QoKTsKQEAgLTEyMzEsMTcgKzEyNjUsMzMgQEAKICAgdGhpcy0+U3RhcnRUZXN0VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogICBhdXRvIGVsYXBzZWRfdGltZV9zdGFydCA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogCi0gIGNtQ1Rlc3RNdWx0aVByb2Nlc3NIYW5kbGVyKiBwYXJhbGxlbCA9IG5ldyBjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcjsKKyAgYXV0byBwYXJhbGxlbCA9IGNtOjptYWtlX3VuaXF1ZTxjbUNUZXN0TXVsdGlQcm9jZXNzSGFuZGxlcj4oKTsKICAgcGFyYWxsZWwtPlNldENUZXN0KHRoaXMtPkNUZXN0KTsKICAgcGFyYWxsZWwtPlNldFBhcmFsbGVsTGV2ZWwodGhpcy0+Q1Rlc3QtPkdldFBhcmFsbGVsTGV2ZWwoKSk7CiAgIHBhcmFsbGVsLT5TZXRUZXN0SGFuZGxlcih0aGlzKTsKKyAgaWYgKHRoaXMtPlJlcGVhdE1vZGUgIT0gY21DVGVzdDo6UmVwZWF0OjpOZXZlcikgeworICAgIHBhcmFsbGVsLT5TZXRSZXBlYXRNb2RlKHRoaXMtPlJlcGVhdE1vZGUsIHRoaXMtPlJlcGVhdENvdW50KTsKKyAgfSBlbHNlIHsKKyAgICBwYXJhbGxlbC0+U2V0UmVwZWF0TW9kZSh0aGlzLT5DVGVzdC0+R2V0UmVwZWF0TW9kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNUZXN0LT5HZXRSZXBlYXRDb3VudCgpKTsKKyAgfQogICBwYXJhbGxlbC0+U2V0UXVpZXQodGhpcy0+UXVpZXQpOwogICBpZiAodGhpcy0+VGVzdExvYWQgPiAwKSB7CiAgICAgcGFyYWxsZWwtPlNldFRlc3RMb2FkKHRoaXMtPlRlc3RMb2FkKTsKICAgfSBlbHNlIHsKICAgICBwYXJhbGxlbC0+U2V0VGVzdExvYWQodGhpcy0+Q1Rlc3QtPkdldFRlc3RMb2FkKCkpOwogICB9Ci0gIGlmICh0aGlzLT5Vc2VSZXNvdXJjZVNwZWMpIHsKKyAgaWYgKCF0aGlzLT5SZXNvdXJjZVNwZWNGaWxlLmVtcHR5KCkpIHsKKyAgICB0aGlzLT5Vc2VSZXNvdXJjZVNwZWMgPSB0cnVlOworICAgIGF1dG8gcmVzdWx0ID0gdGhpcy0+UmVzb3VyY2VTcGVjLlJlYWRGcm9tSlNPTkZpbGUodGhpcy0+UmVzb3VyY2VTcGVjRmlsZSk7CisgICAgaWYgKHJlc3VsdCAhPSBjbUNUZXN0UmVzb3VyY2VTcGVjOjpSZWFkRmlsZVJlc3VsdDo6UkVBRF9PSykgeworICAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwKKyAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCByZWFkL3BhcnNlIHJlc291cmNlIHNwZWMgZmlsZSAiCisgICAgICAgICAgICAgICAgICAgPDwgdGhpcy0+UmVzb3VyY2VTcGVjRmlsZSA8PCAiOiAiCisgICAgICAgICAgICAgICAgICAgPDwgY21DVGVzdFJlc291cmNlU3BlYzo6UmVzdWx0VG9TdHJpbmcocmVzdWx0KQorICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHBhcmFsbGVsLT5Jbml0UmVzb3VyY2VBbGxvY2F0b3IodGhpcy0+UmVzb3VyY2VTcGVjKTsKICAgfQogCkBAIC0xMjk2LDEyICsxMzQ2LDEzIEBACiAgIH0gZWxzZSB7CiAgICAgcGFyYWxsZWwtPlJ1blRlc3RzKCk7CiAgIH0KLSAgZGVsZXRlIHBhcmFsbGVsOwogICB0aGlzLT5FbmRUZXN0ID0gdGhpcy0+Q1Rlc3QtPkN1cnJlbnRUaW1lKCk7CiAgIHRoaXMtPkVuZFRlc3RUaW1lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAgIHRoaXMtPkVsYXBzZWRUZXN0aW5nVGltZSA9CiAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBlbGFwc2VkX3RpbWVfc3RhcnQ7CiAgICp0aGlzLT5Mb2dGaWxlIDw8ICJFbmQgdGVzdGluZzogIiA8PCB0aGlzLT5DVGVzdC0+Q3VycmVudFRpbWUoKSA8PCBzdGQ6OmVuZGw7CisKKyAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgY21DVGVzdFRlc3RIYW5kbGVyOjpHZW5lcmF0ZVRlc3RDb21tYW5kKApAQCAtMTMyMyw3ICsxMzc0LDcgQEAKICAgeG1sLlN0YXJ0RWxlbWVudCgiVGVzdExpc3QiKTsKICAgZm9yIChjbUNUZXN0VGVzdFJlc3VsdCBjb25zdCYgcmVzdWx0IDogdGhpcy0+VGVzdFJlc3VsdHMpIHsKICAgICBzdGQ6OnN0cmluZyB0ZXN0UGF0aCA9IHJlc3VsdC5QYXRoICsgIi8iICsgcmVzdWx0Lk5hbWU7Ci0gICAgeG1sLkVsZW1lbnQoIlRlc3QiLCB0aGlzLT5DVGVzdC0+R2V0U2hvcnRQYXRoVG9GaWxlKHRlc3RQYXRoLmNfc3RyKCkpKTsKKyAgICB4bWwuRWxlbWVudCgiVGVzdCIsIHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUodGVzdFBhdGgpKTsKICAgfQogICB4bWwuRW5kRWxlbWVudCgpOyAvLyBUZXN0TGlzdAogICBmb3IgKGNtQ1Rlc3RUZXN0UmVzdWx0JiByZXN1bHQgOiB0aGlzLT5UZXN0UmVzdWx0cykgewpAQCAtMTM4MSw2ICsxNDMyLDEyIEBACiAgICAgeG1sLkF0dHJpYnV0ZSgibmFtZSIsICJDb21tYW5kIExpbmUiKTsKICAgICB4bWwuRWxlbWVudCgiVmFsdWUiLCByZXN1bHQuRnVsbENvbW1hbmRMaW5lKTsKICAgICB4bWwuRW5kRWxlbWVudCgpOyAvLyBOYW1lZE1lYXN1cmVtZW50CisKKyAgICB4bWwuU3RhcnRFbGVtZW50KCJOYW1lZE1lYXN1cmVtZW50Iik7CisgICAgeG1sLkF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L3N0cmluZyIpOworICAgIHhtbC5BdHRyaWJ1dGUoIm5hbWUiLCAiRW52aXJvbm1lbnQiKTsKKyAgICB4bWwuRWxlbWVudCgiVmFsdWUiLCByZXN1bHQuRW52aXJvbm1lbnQpOworICAgIHhtbC5FbmRFbGVtZW50KCk7IC8vIE5hbWVkTWVhc3VyZW1lbnQKICAgICBmb3IgKGF1dG8gY29uc3QmIG1lYXN1cmUgOiByZXN1bHQuUHJvcGVydGllcy0+TWVhc3VyZW1lbnRzKSB7CiAgICAgICB4bWwuU3RhcnRFbGVtZW50KCJOYW1lZE1lYXN1cmVtZW50Iik7CiAgICAgICB4bWwuQXR0cmlidXRlKCJ0eXBlIiwgInRleHQvc3RyaW5nIik7CkBAIC0xNDI2LDggKzE0ODMsOCBAQAogICB9CiAgIHN0ZDo6c3RyaW5nIHRlc3RQYXRoID0gcmVzdWx0LlBhdGggKyAiLyIgKyByZXN1bHQuTmFtZTsKICAgeG1sLkVsZW1lbnQoIk5hbWUiLCByZXN1bHQuTmFtZSk7Ci0gIHhtbC5FbGVtZW50KCJQYXRoIiwgdGhpcy0+Q1Rlc3QtPkdldFNob3J0UGF0aFRvRmlsZShyZXN1bHQuUGF0aC5jX3N0cigpKSk7Ci0gIHhtbC5FbGVtZW50KCJGdWxsTmFtZSIsIHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUodGVzdFBhdGguY19zdHIoKSkpOworICB4bWwuRWxlbWVudCgiUGF0aCIsIHRoaXMtPkNUZXN0LT5HZXRTaG9ydFBhdGhUb0ZpbGUocmVzdWx0LlBhdGgpKTsKKyAgeG1sLkVsZW1lbnQoIkZ1bGxOYW1lIiwgdGhpcy0+Q1Rlc3QtPkdldFNob3J0UGF0aFRvRmlsZSh0ZXN0UGF0aCkpOwogICB4bWwuRWxlbWVudCgiRnVsbENvbW1hbmRMaW5lIiwgcmVzdWx0LkZ1bGxDb21tYW5kTGluZSk7CiB9CiAKQEAgLTE0ODksMTIgKzE1NDYsMTIgQEAKIH0KIAogLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgZXhlY3V0YWJsZSB0byBydW4gZm9yIGEgdGVzdAotc3RkOjpzdHJpbmcgY21DVGVzdFRlc3RIYW5kbGVyOjpGaW5kVGhlRXhlY3V0YWJsZShjb25zdCBjaGFyKiBleGUpCitzdGQ6OnN0cmluZyBjbUNUZXN0VGVzdEhhbmRsZXI6OkZpbmRUaGVFeGVjdXRhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBleGUpCiB7CiAgIHN0ZDo6c3RyaW5nIHJlc0NvbmZpZzsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4dHJhUGF0aHM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmYWlsZWRQYXRoczsKLSAgaWYgKHN0cmNtcChleGUsICJOT1RfQVZBSUxBQkxFIikgPT0gMCkgeworICBpZiAoZXhlID09ICJOT1RfQVZBSUxBQkxFIikgewogICAgIHJldHVybiBleGU7CiAgIH0KICAgcmV0dXJuIGNtQ1Rlc3RUZXN0SGFuZGxlcjo6RmluZEV4ZWN1dGFibGUodGhpcy0+Q1Rlc3QsIGV4ZSwgcmVzQ29uZmlnLApAQCAtMTU1MCw3ICsxNjA3LDcgQEAKIAogLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgZXhlY3V0YWJsZSB0byBydW4gZm9yIGEgdGVzdAogc3RkOjpzdHJpbmcgY21DVGVzdFRlc3RIYW5kbGVyOjpGaW5kRXhlY3V0YWJsZSgKLSAgY21DVGVzdCogY3Rlc3QsIGNvbnN0IGNoYXIqIHRlc3RDb21tYW5kLCBzdGQ6OnN0cmluZyYgcmVzdWx0aW5nQ29uZmlnLAorICBjbUNUZXN0KiBjdGVzdCwgY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RDb21tYW5kLCBzdGQ6OnN0cmluZyYgcmVzdWx0aW5nQ29uZmlnLAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGV4dHJhUGF0aHMsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZmFpbGVkKQogewogICAvLyBub3cgcnVuIHRoZSBjb21waWxlZCB0ZXN0IGlmIHdlIGNhbiBmaW5kIGl0CkBAIC0xNzAwLDYgKzE3NTcsMTAgQEAKICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEVycm9yT2NjdXJlZEZsYWcoKSkgewogICAgIHJldHVybjsKICAgfQorICBjb25zdCBjaGFyKiBzcGVjRmlsZSA9IG1mLkdldERlZmluaXRpb24oIkNURVNUX1JFU09VUkNFX1NQRUNfRklMRSIpOworICBpZiAodGhpcy0+UmVzb3VyY2VTcGVjRmlsZS5lbXB0eSgpICYmIHNwZWNGaWxlKSB7CisgICAgdGhpcy0+UmVzb3VyY2VTcGVjRmlsZSA9IHNwZWNGaWxlOworICB9CiAgIGNtQ1Rlc3RPcHRpb25hbExvZyh0aGlzLT5DVGVzdCwgSEFORExFUl9WRVJCT1NFX09VVFBVVCwKICAgICAgICAgICAgICAgICAgICAgICJEb25lIGNvbnN0cnVjdGluZyBhIGxpc3Qgb2YgdGVzdHMiIDw8IHN0ZDo6ZW5kbCwKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlF1aWV0KTsKQEAgLTE4NTIsNyArMTkxMyw4IEBACiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCi0gICAgICBpbnQgdmFsID0gYXRvaShsaW5lLnN1YnN0cigwLCBwb3MpLmNfc3RyKCkpOworICAgICAgbGluZS5lcmFzZShwb3MpOworICAgICAgaW50IHZhbCA9IGF0b2kobGluZS5jX3N0cigpKTsKICAgICAgIHRoaXMtPlRlc3RzVG9SdW4ucHVzaF9iYWNrKHZhbCk7CiAgICAgfQogICAgIGlmcy5jbG9zZSgpOwpAQCAtMTk3NCwxMyArMjAzNiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0ZDo6aW9zOjpiaW5hcnkKICNlbmRpZgogICAgICAgICAgICk7Ci0gICAgICAgICAgdW5zaWduZWQgY2hhciogZmlsZV9idWZmZXIgPSBuZXcgdW5zaWduZWQgY2hhcltsZW4gKyAxXTsKLSAgICAgICAgICBpZnMucmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPihmaWxlX2J1ZmZlciksIGxlbik7Ci0gICAgICAgICAgdW5zaWduZWQgY2hhciogZW5jb2RlZF9idWZmZXIgPSBuZXcgdW5zaWduZWQgY2hhcltzdGF0aWNfY2FzdDxpbnQ+KAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW4pICogMS41ICsgNS4wKV07CisgICAgICAgICAgYXV0byBmaWxlX2J1ZmZlciA9IGNtOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KGxlbiArIDEpOworICAgICAgICAgIGlmcy5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZpbGVfYnVmZmVyLmdldCgpKSwgbGVuKTsKKyAgICAgICAgICBhdXRvIGVuY29kZWRfYnVmZmVyID0gY206Om1ha2VfdW5pcXVlPHVuc2lnbmVkIGNoYXJbXT4oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0PGRvdWJsZT4obGVuKSAqIDEuNSArIDUuMCkpOwogCi0gICAgICAgICAgc2l6ZV90IHJsZW4gPQotICAgICAgICAgICAgY21zeXNCYXNlNjRfRW5jb2RlKGZpbGVfYnVmZmVyLCBsZW4sIGVuY29kZWRfYnVmZmVyLCAxKTsKKyAgICAgICAgICBzaXplX3QgcmxlbiA9IGNtc3lzQmFzZTY0X0VuY29kZShmaWxlX2J1ZmZlci5nZXQoKSwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRfYnVmZmVyLmdldCgpLCAxKTsKIAogICAgICAgICAgIHhtbC5TdGFydEVsZW1lbnQoIk5hbWVkTWVhc3VyZW1lbnQiKTsKICAgICAgICAgICB4bWwuQXR0cmlidXRlKG1lYXN1cmVtZW50ZmlsZS5tYXRjaCgxKS5jX3N0cigpLApAQCAtMTk5Nyw4ICsyMDU5LDYgQEAKICAgICAgICAgICB9CiAgICAgICAgICAgeG1sLkVsZW1lbnQoIlZhbHVlIiwgb3N0ci5zdHIoKSk7CiAgICAgICAgICAgeG1sLkVuZEVsZW1lbnQoKTsgLy8gTmFtZWRNZWFzdXJlbWVudAotICAgICAgICAgIGRlbGV0ZVtdIGZpbGVfYnVmZmVyOwotICAgICAgICAgIGRlbGV0ZVtdIGVuY29kZWRfYnVmZmVyOwogICAgICAgICB9CiAgICAgICB9IGVsc2UgewogICAgICAgICBpbnQgaWR4ID0gNDsKQEAgLTIwNDMsMTkgKzIxMDMsMTggQEAKICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoaW4pKSB7CiAgICAgY21zeXM6Omlmc3RyZWFtIGZpbihpbik7CiAgICAgdW5zaWduZWQgbG9uZyBmaWxlbGVuID0gY21TeXN0ZW1Ub29sczo6RmlsZUxlbmd0aChpbik7Ci0gICAgY2hhciogYnVmZiA9IG5ldyBjaGFyW2ZpbGVsZW4gKyAxXTsKLSAgICBmaW4uZ2V0bGluZShidWZmLCBmaWxlbGVuKTsKKyAgICBhdXRvIGJ1ZmYgPSBjbTo6bWFrZV91bmlxdWU8Y2hhcltdPihmaWxlbGVuICsgMSk7CisgICAgZmluLmdldGxpbmUoYnVmZi5nZXQoKSwgZmlsZWxlbik7CiAgICAgYnVmZltmaW4uZ2NvdW50KCldID0gMDsKLSAgICB0aGlzLT5UZXN0c1RvUnVuU3RyaW5nID0gYnVmZjsKLSAgICBkZWxldGVbXSBidWZmOworICAgIHRoaXMtPlRlc3RzVG9SdW5TdHJpbmcgPSBidWZmLmdldCgpOwogICB9CiB9CiAKLWJvb2wgY21DVGVzdFRlc3RIYW5kbGVyOjpDbGVhblRlc3RPdXRwdXQoc3RkOjpzdHJpbmcmIG91dHB1dCwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgY21DVGVzdFRlc3RIYW5kbGVyOjpDbGVhblRlc3RPdXRwdXQoc3RkOjpzdHJpbmcmIG91dHB1dCwgc2l6ZV90IGxlbmd0aCkKIHsKICAgaWYgKCFsZW5ndGggfHwgbGVuZ3RoID49IG91dHB1dC5zaXplKCkgfHwKICAgICAgIG91dHB1dC5maW5kKCJDVEVTVF9GVUxMX09VVFBVVCIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuOwogICB9CiAKICAgLy8gVHJ1bmNhdGUgYXQgZ2l2ZW4gbGVuZ3RoIGJ1dCBkbyBub3QgYnJlYWsgaW4gdGhlIG1pZGRsZSBvZiBhIG11bHRpLWJ5dGUKQEAgLTIwNzYsNyArMjEzNSw3IEBACiAgICAgICArK2N1cnJlbnQ7CiAgICAgfQogICB9Ci0gIG91dHB1dCA9IG91dHB1dC5zdWJzdHIoMCwgY3VycmVudCAtIGJlZ2luKTsKKyAgb3V0cHV0LmVyYXNlKGN1cnJlbnQgLSBiZWdpbik7CiAKICAgLy8gQXBwZW5kIHRydW5jYXRpb24gbWVzc2FnZS4KICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKQEAgLTIwODYsNyArMjE0NSw2IEBACiAgICAgICAgICAib2YgIgogICAgICAgPDwgbGVuZ3RoIDw8ICIgYnl0ZXMuXG4iOwogICBvdXRwdXQgKz0gbXNnLnN0cigpOwotICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBjbUNUZXN0VGVzdEhhbmRsZXI6OlNldFRlc3RzUHJvcGVydGllcygKQEAgLTIxMDcsMTYgKzIxNjUsMTYgQEAKICAgfQogICArK2l0OyAvLyBza2lwIFBST1BFUlRJRVMKICAgZm9yICg7IGl0ICE9IGFyZ3MuZW5kKCk7ICsraXQpIHsKLSAgICBzdGQ6OnN0cmluZyBrZXkgPSAqaXQ7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGtleSA9ICppdDsKICAgICArK2l0OwogICAgIGlmIChpdCA9PSBhcmdzLmVuZCgpKSB7CiAgICAgICBicmVhazsKICAgICB9Ci0gICAgc3RkOjpzdHJpbmcgdmFsID0gKml0OworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWwgPSAqaXQ7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgdCA6IHRlc3RzKSB7CiAgICAgICBmb3IgKGNtQ1Rlc3RUZXN0UHJvcGVydGllcyYgcnQgOiB0aGlzLT5UZXN0TGlzdCkgewogICAgICAgICBpZiAodCA9PSBydC5OYW1lKSB7Ci0gICAgICAgICAgaWYgKGtleSA9PSAiX0JBQ0tUUkFDRV9UUklQTEVTIikgeworICAgICAgICAgIGlmIChrZXkgPT0gIl9CQUNLVFJBQ0VfVFJJUExFUyJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRyaXBsZXM7CiAgICAgICAgICAgICAvLyBhbGxvdyBlbXB0eSBhcmdzIGluIHRoZSB0cmlwbGVzCiAgICAgICAgICAgICBjbUV4cGFuZExpc3QodmFsLCB0cmlwbGVzLCB0cnVlKTsKQEAgLTIxNDAsOTEgKzIxOTgsNzAgQEAKICAgICAgICAgICAgICAgICBydC5CYWNrdHJhY2UgPSBydC5CYWNrdHJhY2UuUHVzaChmYyk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiV0lMTF9GQUlMIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJXSUxMX0ZBSUwiX3MpIHsKICAgICAgICAgICAgIHJ0LldpbGxGYWlsID0gY21Jc09uKHZhbCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkRJU0FCTEVEIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJESVNBQkxFRCJfcykgewogICAgICAgICAgICAgcnQuRGlzYWJsZWQgPSBjbUlzT24odmFsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiQVRUQUNIRURfRklMRVMiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkFUVEFDSEVEX0ZJTEVTIl9zKSB7CiAgICAgICAgICAgICBjbUV4cGFuZExpc3QodmFsLCBydC5BdHRhY2hlZEZpbGVzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiQVRUQUNIRURfRklMRVNfT05fRkFJTCIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiQVRUQUNIRURfRklMRVNfT05fRkFJTCJfcykgewogICAgICAgICAgICAgY21FeHBhbmRMaXN0KHZhbCwgcnQuQXR0YWNoT25GYWlsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiUkVTT1VSQ0VfTE9DSyIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUkVTT1VSQ0VfTE9DSyJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGx2YWwgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogCiAgICAgICAgICAgICBydC5Mb2NrZWRSZXNvdXJjZXMuaW5zZXJ0KGx2YWwuYmVnaW4oKSwgbHZhbC5lbmQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkZJWFRVUkVTX1NFVFVQIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJGSVhUVVJFU19TRVRVUCJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGx2YWwgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogCiAgICAgICAgICAgICBydC5GaXh0dXJlc1NldHVwLmluc2VydChsdmFsLmJlZ2luKCksIGx2YWwuZW5kKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJGSVhUVVJFU19DTEVBTlVQIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJGSVhUVVJFU19DTEVBTlVQIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbHZhbCA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAKICAgICAgICAgICAgIHJ0LkZpeHR1cmVzQ2xlYW51cC5pbnNlcnQobHZhbC5iZWdpbigpLCBsdmFsLmVuZCgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiRklYVFVSRVNfUkVRVUlSRUQiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkZJWFRVUkVTX1JFUVVJUkVEIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbHZhbCA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAKICAgICAgICAgICAgIHJ0LkZpeHR1cmVzUmVxdWlyZWQuaW5zZXJ0KGx2YWwuYmVnaW4oKSwgbHZhbC5lbmQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlRJTUVPVVQiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlRJTUVPVVQiX3MpIHsKICAgICAgICAgICAgIHJ0LlRpbWVvdXQgPSBjbUR1cmF0aW9uKGF0b2YodmFsLmNfc3RyKCkpKTsKICAgICAgICAgICAgIHJ0LkV4cGxpY2l0VGltZW91dCA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkNPU1QiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkNPU1QiX3MpIHsKICAgICAgICAgICAgIHJ0LkNvc3QgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih2YWwuY19zdHIoKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJSRVFVSVJFRF9GSUxFUyIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUkVRVUlSRURfRklMRVMiX3MpIHsKICAgICAgICAgICAgIGNtRXhwYW5kTGlzdCh2YWwsIHJ0LlJlcXVpcmVkRmlsZXMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJSVU5fU0VSSUFMIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJSVU5fU0VSSUFMIl9zKSB7CiAgICAgICAgICAgICBydC5SdW5TZXJpYWwgPSBjbUlzT24odmFsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04iKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkZBSUxfUkVHVUxBUl9FWFBSRVNTSU9OIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbHZhbCA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAgICAgICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjciA6IGx2YWwpIHsKICAgICAgICAgICAgICAgcnQuRXJyb3JSZWd1bGFyRXhwcmVzc2lvbnMuZW1wbGFjZV9iYWNrKGNyLCBjcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlNLSVBfUkVHVUxBUl9FWFBSRVNTSU9OIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJTS0lQX1JFR1VMQVJfRVhQUkVTU0lPTiJfcykgewogICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGx2YWwgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogICAgICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY3IgOiBsdmFsKSB7CiAgICAgICAgICAgICAgIHJ0LlNraXBSZWd1bGFyRXhwcmVzc2lvbnMuZW1wbGFjZV9iYWNrKGNyLCBjcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIlBST0NFU1NPUlMiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlBST0NFU1NPUlMiX3MpIHsKICAgICAgICAgICAgIHJ0LlByb2Nlc3NvcnMgPSBhdG9pKHZhbC5jX3N0cigpKTsKICAgICAgICAgICAgIGlmIChydC5Qcm9jZXNzb3JzIDwgMSkgewogICAgICAgICAgICAgICBydC5Qcm9jZXNzb3JzID0gMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiUFJPQ0VTU09SX0FGRklOSVRZIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJQUk9DRVNTT1JfQUZGSU5JVFkiX3MpIHsKICAgICAgICAgICAgIHJ0LldhbnRBZmZpbml0eSA9IGNtSXNPbih2YWwpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJSRVNPVVJDRV9HUk9VUFMiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlJFU09VUkNFX0dST1VQUyJfcykgewogICAgICAgICAgICAgaWYgKCFQYXJzZVJlc291cmNlR3JvdXBzUHJvcGVydHkodmFsLCBydC5SZXNvdXJjZUdyb3VwcykpIHsKICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJTS0lQX1JFVFVSTl9DT0RFIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJTS0lQX1JFVFVSTl9DT0RFIl9zKSB7CiAgICAgICAgICAgICBydC5Ta2lwUmV0dXJuQ29kZSA9IGF0b2kodmFsLmNfc3RyKCkpOwogICAgICAgICAgICAgaWYgKHJ0LlNraXBSZXR1cm5Db2RlIDwgMCB8fCBydC5Ta2lwUmV0dXJuQ29kZSA+IDI1NSkgewogICAgICAgICAgICAgICBydC5Ta2lwUmV0dXJuQ29kZSA9IC0xOwogICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJERVBFTkRTIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJERVBFTkRTIl9zKSB7CiAgICAgICAgICAgICBjbUV4cGFuZExpc3QodmFsLCBydC5EZXBlbmRzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiRU5WSVJPTk1FTlQiKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIkVOVklST05NRU5UIl9zKSB7CiAgICAgICAgICAgICBjbUV4cGFuZExpc3QodmFsLCBydC5FbnZpcm9ubWVudCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIkxBQkVMUyIpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiTEFCRUxTIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGFiZWxzID0gY21FeHBhbmRlZExpc3QodmFsKTsKICAgICAgICAgICAgIHJ0LkxhYmVscy5pbnNlcnQocnQuTGFiZWxzLmVuZCgpLCBMYWJlbHMuYmVnaW4oKSwgTGFiZWxzLmVuZCgpKTsKICAgICAgICAgICAgIC8vIHNvcnQgdGhlIGFycmF5CkBAIC0yMjMyLDggKzIyNjksNyBAQAogICAgICAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZXMKICAgICAgICAgICAgIGF1dG8gbmV3X2VuZCA9IHN0ZDo6dW5pcXVlKHJ0LkxhYmVscy5iZWdpbigpLCBydC5MYWJlbHMuZW5kKCkpOwogICAgICAgICAgICAgcnQuTGFiZWxzLmVyYXNlKG5ld19lbmQsIHJ0LkxhYmVscy5lbmQoKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIk1FQVNVUkVNRU5UIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJNRUFTVVJFTUVOVCJfcykgewogICAgICAgICAgICAgc2l6ZV90IHBvcyA9IHZhbC5maW5kX2ZpcnN0X29mKCc9Jyk7CiAgICAgICAgICAgICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG1LZXkgPSB2YWwuc3Vic3RyKDAsIHBvcyk7CkBAIC0yMjQyLDE3ICsyMjc4LDE0IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBydC5NZWFzdXJlbWVudHNbdmFsXSA9ICIxIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGtleSA9PSAiUEFTU19SRUdVTEFSX0VYUFJFU1NJT04iKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbHZhbCA9IGNtRXhwYW5kZWRMaXN0KHZhbCk7CiAgICAgICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjciA6IGx2YWwpIHsKICAgICAgICAgICAgICAgcnQuUmVxdWlyZWRSZWd1bGFyRXhwcmVzc2lvbnMuZW1wbGFjZV9iYWNrKGNyLCBjcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrZXkgPT0gIldPUktJTkdfRElSRUNUT1JZIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJXT1JLSU5HX0RJUkVDVE9SWSJfcykgewogICAgICAgICAgICAgcnQuRGlyZWN0b3J5ID0gdmFsOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoa2V5ID09ICJUSU1FT1VUX0FGVEVSX01BVENIIikgeworICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJUSU1FT1VUX0FGVEVSX01BVENIIl9zKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcEFyZ3MgPSBjbUV4cGFuZGVkTGlzdCh2YWwpOwogICAgICAgICAgICAgaWYgKHByb3BBcmdzLnNpemUoKSAhPSAyKSB7CiAgICAgICAgICAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIFdBUk5JTkcsCkBAIC0yMjkyLDE2ICsyMzI1LDE2IEBACiAgIH0KICAgKytpdDsgLy8gc2tpcCBQUk9QRVJUSUVTCiAgIGZvciAoOyBpdCAhPSBhcmdzLmVuZCgpOyArK2l0KSB7Ci0gICAgc3RkOjpzdHJpbmcga2V5ID0gKml0OworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkgPSAqaXQ7CiAgICAgKytpdDsKICAgICBpZiAoaXQgPT0gYXJncy5lbmQoKSkgewogICAgICAgYnJlYWs7CiAgICAgfQotICAgIHN0ZDo6c3RyaW5nIHZhbCA9ICppdDsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsID0gKml0OwogICAgIGZvciAoY21DVGVzdFRlc3RQcm9wZXJ0aWVzJiBydCA6IHRoaXMtPlRlc3RMaXN0KSB7CiAgICAgICBzdGQ6OnN0cmluZyBjd2QgPSBjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOwogICAgICAgaWYgKGN3ZCA9PSBydC5EaXJlY3RvcnkpIHsKLSAgICAgICAgaWYgKGtleSA9PSAiTEFCRUxTIikgeworICAgICAgICBpZiAoa2V5ID09ICJMQUJFTFMiX3MpIHsKICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gRGlyZWN0b3J5TGFiZWxzID0gY21FeHBhbmRlZExpc3QodmFsKTsKICAgICAgICAgICBydC5MYWJlbHMuaW5zZXJ0KHJ0LkxhYmVscy5lbmQoKSwgRGlyZWN0b3J5TGFiZWxzLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnlMYWJlbHMuZW5kKCkpOwpAQCAtMjM4MCwxMCArMjQxMyw5IEBACiAgIHRlc3QuU2tpcFJldHVybkNvZGUgPSAtMTsKICAgdGVzdC5QcmV2aW91c1J1bnMgPSAwOwogICBpZiAodGhpcy0+VXNlSW5jbHVkZVJlZ0V4cEZsYWcgJiYKLSAgICAgICF0aGlzLT5JbmNsdWRlVGVzdHNSZWd1bGFyRXhwcmVzc2lvbi5maW5kKHRlc3RuYW1lKSkgewotICAgIHRlc3QuSXNJbkJhc2VkT25SRU9wdGlvbnMgPSBmYWxzZTsKLSAgfSBlbHNlIGlmICh0aGlzLT5Vc2VFeGNsdWRlUmVnRXhwRmxhZyAmJiAhdGhpcy0+VXNlRXhjbHVkZVJlZ0V4cEZpcnN0ICYmCi0gICAgICAgICAgICAgdGhpcy0+RXhjbHVkZVRlc3RzUmVndWxhckV4cHJlc3Npb24uZmluZCh0ZXN0bmFtZSkpIHsKKyAgICAgICghdGhpcy0+SW5jbHVkZVRlc3RzUmVndWxhckV4cHJlc3Npb24uZmluZCh0ZXN0bmFtZSkgfHwKKyAgICAgICAoIXRoaXMtPlVzZUV4Y2x1ZGVSZWdFeHBGaXJzdCAmJgorICAgICAgICB0aGlzLT5FeGNsdWRlVGVzdHNSZWd1bGFyRXhwcmVzc2lvbi5maW5kKHRlc3RuYW1lKSkpKSB7CiAgICAgdGVzdC5Jc0luQmFzZWRPblJFT3B0aW9ucyA9IGZhbHNlOwogICB9CiAgIHRoaXMtPlRlc3RMaXN0LnB1c2hfYmFjayh0ZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuaCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VGVzdEhhbmRsZXIuaAppbmRleCBlYWI3NWQwLi5iMjZmOGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFRlc3RIYW5kbGVyLmgKKysrIGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RUZXN0SGFuZGxlci5oCkBAIC0xOCwxMiArMTgsMTIgQEAKIAogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAorI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0R2VuZXJpY0hhbmRsZXIuaCIKICNpbmNsdWRlICJjbUNUZXN0UmVzb3VyY2VTcGVjLmgiCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogCi1jbGFzcyBjbUNUZXN0OwogY2xhc3MgY21NYWtlZmlsZTsKIGNsYXNzIGNtWE1MV3JpdGVyOwogCkBAIC0xNjksNiArMTY5LDcgQEAKICAgICBzdGQ6OnN0cmluZyBQYXRoOwogICAgIHN0ZDo6c3RyaW5nIFJlYXNvbjsKICAgICBzdGQ6OnN0cmluZyBGdWxsQ29tbWFuZExpbmU7CisgICAgc3RkOjpzdHJpbmcgRW52aXJvbm1lbnQ7CiAgICAgY21EdXJhdGlvbiBFeGVjdXRpb25UaW1lOwogICAgIHN0ZDo6aW50NjRfdCBSZXR1cm5WYWx1ZTsKICAgICBpbnQgU3RhdHVzOwpAQCAtMTk3LDcgKzE5OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVwYXRoLCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpOwogCiAgIC8vIGZ1bGwgc2lnbmF0dXJlIHN0YXRpYyBtZXRob2QgdG8gZmluZCBhbiBleGVjdXRhYmxlCi0gIHN0YXRpYyBzdGQ6OnN0cmluZyBGaW5kRXhlY3V0YWJsZShjbUNUZXN0KiBjdGVzdCwgY29uc3QgY2hhciogdGVzdENvbW1hbmQsCisgIHN0YXRpYyBzdGQ6OnN0cmluZyBGaW5kRXhlY3V0YWJsZShjbUNUZXN0KiBjdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0Q29tbWFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiByZXN1bHRpbmdDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGV4dHJhUGF0aHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGZhaWxlZCk7CkBAIC0yMzUsNyArMjM3LDcgQEAKICAgdm9pZCBBdHRhY2hGaWxlcyhjbVhNTFdyaXRlciYgeG1sLCBjbUNUZXN0VGVzdFJlc3VsdCYgcmVzdWx0KTsKIAogICAvLyEgQ2xlYW4gdGVzdCBvdXRwdXQgdG8gc3BlY2lmaWVkIGxlbmd0aAotICBib29sIENsZWFuVGVzdE91dHB1dChzdGQ6OnN0cmluZyYgb3V0cHV0LCBzaXplX3QgbGVuZ3RoKTsKKyAgdm9pZCBDbGVhblRlc3RPdXRwdXQoc3RkOjpzdHJpbmcmIG91dHB1dCwgc2l6ZV90IGxlbmd0aCk7CiAKICAgY21EdXJhdGlvbiBFbGFwc2VkVGVzdGluZ1RpbWU7CiAKQEAgLTI3OCw3ICsyODAsNyBAQAogICAvKioKICAgICogUnVuIHRoZSB0ZXN0cyBmb3IgYSBkaXJlY3RvcnkgYW5kIGFueSBzdWJkaXJlY3RvcmllcwogICAgKi8KLSAgdm9pZCBQcm9jZXNzRGlyZWN0b3J5KHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcGFzc2VkLAorICBib29sIFByb2Nlc3NEaXJlY3Rvcnkoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXNzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGZhaWxlZCk7CiAKICAgLyoqCkBAIC0zMDgsNyArMzEwLDcgQEAKICAgLyoqCiAgICAqIEZpbmQgdGhlIGV4ZWN1dGFibGUgZm9yIGEgdGVzdAogICAgKi8KLSAgc3RkOjpzdHJpbmcgRmluZFRoZUV4ZWN1dGFibGUoY29uc3QgY2hhciogZXhlKTsKKyAgc3RkOjpzdHJpbmcgRmluZFRoZUV4ZWN1dGFibGUoY29uc3Qgc3RkOjpzdHJpbmcmIGV4ZSk7CiAKICAgc3RkOjpzdHJpbmcgR2V0VGVzdFN0YXR1cyhjbUNUZXN0VGVzdFJlc3VsdCBjb25zdCYpOwogICB2b2lkIEV4cGFuZFRlc3RzVG9SdW5JbmZvcm1hdGlvbihzaXplX3QgbnVtUG9zc2libGVUZXN0cyk7CkBAIC0zMzgsNiArMzQwLDcgQEAKIAogICBib29sIFVzZVJlc291cmNlU3BlYzsKICAgY21DVGVzdFJlc291cmNlU3BlYyBSZXNvdXJjZVNwZWM7CisgIHN0ZDo6c3RyaW5nIFJlc291cmNlU3BlY0ZpbGU7CiAKICAgdm9pZCBHZW5lcmF0ZVJlZ3Jlc3Npb25JbWFnZXMoY21YTUxXcml0ZXImIHhtbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRhcnQpOwogICBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gRGFydFN0dWZmMTsKQEAgLTM1Myw2ICszNTYsOCBAQAogCiAgIHN0ZDo6b3N0cmVhbSogTG9nRmlsZTsKIAorICBjbUNUZXN0OjpSZXBlYXQgUmVwZWF0TW9kZSA9IGNtQ1Rlc3Q6OlJlcGVhdDo6TmV2ZXI7CisgIGludCBSZXBlYXRDb3VudCA9IDE7CiAgIGJvb2wgUmVydW5GYWlsZWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFVwZGF0ZUNvbW1hbmQuY3h4IGIvU291cmNlL0NUZXN0L2NtQ1Rlc3RVcGRhdGVDb21tYW5kLmN4eAppbmRleCA2NzNlYjlhLi45NWNhZTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFVwZGF0ZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VXBkYXRlQ29tbWFuZC5jeHgKQEAgLTExLDE0ICsxMSwxMyBAQAogewogICBpZiAoIXRoaXMtPlNvdXJjZS5lbXB0eSgpKSB7CiAgICAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigKLSAgICAgICJTb3VyY2VEaXJlY3RvcnkiLCBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRoaXMtPlNvdXJjZSkuY19zdHIoKSwKKyAgICAgICJTb3VyY2VEaXJlY3RvcnkiLCBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRoaXMtPlNvdXJjZSksCiAgICAgICB0aGlzLT5RdWlldCk7CiAgIH0gZWxzZSB7CiAgICAgdGhpcy0+Q1Rlc3QtPlNldENUZXN0Q29uZmlndXJhdGlvbigKICAgICAgICJTb3VyY2VEaXJlY3RvcnkiLAogICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKLSAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNURVNUX1NPVVJDRV9ESVJFQ1RPUlkiKSkKLSAgICAgICAgLmNfc3RyKCksCisgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDVEVTVF9TT1VSQ0VfRElSRUNUT1JZIikpLAogICAgICAgdGhpcy0+UXVpZXQpOwogICB9CiAgIHN0ZDo6c3RyaW5nIHNvdXJjZV9kaXIgPQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RVcGxvYWRDb21tYW5kLmN4eCBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VXBsb2FkQ29tbWFuZC5jeHgKaW5kZXggZDBlMzg0OC4uZjg2ZWUwZCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RVcGxvYWRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFVwbG9hZENvbW1hbmQuY3h4CkBAIC00LDExICs0LDEwIEBACiAKICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtL3ZlY3Rvcj4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0VXBsb2FkSGFuZGxlci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKQEAgLTI0LDcgKzIzLDcgQEAKIAogdm9pZCBjbUNUZXN0VXBsb2FkQ29tbWFuZDo6Q2hlY2tBcmd1bWVudHMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JikKIHsKLSAgY21FcmFzZUlmKHRoaXMtPkZpbGVzLCBbdGhpc10oc3RkOjpzdHJpbmcgY29uc3QmIGFyZykgLT4gYm9vbCB7CisgIGNtOjplcmFzZV9pZih0aGlzLT5GaWxlcywgW3RoaXNdKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcpIC0+IGJvb2wgewogICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhhcmcpKSB7CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKICAgICAgIGUgPDwgIkZpbGUgXCIiIDw8IGFyZyA8PCAiXCIgZG9lcyBub3QgZXhpc3QuIENhbm5vdCBzdWJtaXQgIgpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RWQy5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmN4eAppbmRleCA2MDI2YzY5Li40NTJkNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmN4eApAQCAtMzgsNyArMzgsNyBAQAogICB0aGlzLT5Tb3VyY2VEaXJlY3RvcnkgPSBkaXI7CiB9CiAKLWJvb2wgY21DVGVzdFZDOjpJbml0aWFsQ2hlY2tvdXQoY29uc3QgY2hhciogY29tbWFuZCkKK2Jvb2wgY21DVGVzdFZDOjpJbml0aWFsQ2hlY2tvdXQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbW1hbmQpCiB7CiAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEhBTkRMRVJfT1VUUFVULAogICAgICAgICAgICAgICIgICBGaXJzdCBwZXJmb3JtIHRoZSBpbml0aWFsIGNoZWNrb3V0OiAiIDw8IGNvbW1hbmQgPDwgIlxuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmggYi9Tb3VyY2UvQ1Rlc3QvY21DVGVzdFZDLmgKaW5kZXggMmE0NzY1ZC4uMzAzN2UwMSAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtQ1Rlc3RWQy5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbUNUZXN0VkMuaApAQCAtMzYsNyArMzYsNyBAQAogICBzdGQ6OnN0cmluZyBHZXROaWdodGx5VGltZSgpOwogCiAgIC8qKiBQcmVwYXJlIHRoZSB3b3JrIHRyZWUuICAqLwotICBib29sIEluaXRpYWxDaGVja291dChjb25zdCBjaGFyKiBjb21tYW5kKTsKKyAgYm9vbCBJbml0aWFsQ2hlY2tvdXQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbW1hbmQpOwogCiAgIC8qKiBQZXJmb3JtIGNsZWFudXAgb3BlcmF0aW9ucyBvbiB0aGUgd29yayB0cmVlLiAgKi8KICAgdm9pZCBDbGVhbnVwKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNhY2hlQ292ZXJhZ2UuY3h4IGIvU291cmNlL0NUZXN0L2NtUGFyc2VDYWNoZUNvdmVyYWdlLmN4eAppbmRleCA4YzRkYTc1Li44NGQ3ZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNhY2hlQ292ZXJhZ2UuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ2FjaGVDb3ZlcmFnZS5jeHgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbXN5cy9EaXJlY3RvcnkuaHh4IgogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgpAQCAtMTksNyArMjAsNyBAQAogewogfQogCi1ib29sIGNtUGFyc2VDYWNoZUNvdmVyYWdlOjpMb2FkQ292ZXJhZ2VEYXRhKGNvbnN0IGNoYXIqIGQpCitib29sIGNtUGFyc2VDYWNoZUNvdmVyYWdlOjpMb2FkQ292ZXJhZ2VEYXRhKHN0ZDo6c3RyaW5nIGNvbnN0JiBkKQogewogICAvLyBsb2FkIGFsbCB0aGUgLm1jb3YgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkKICAgY21zeXM6OkRpcmVjdG9yeSBkaXI7CkBAIC02OSwyNiArNzAsNiBAQAogICB9CiB9CiAKLWJvb2wgY21QYXJzZUNhY2hlQ292ZXJhZ2U6OlNwbGl0U3RyaW5nKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsaW5lKQotewotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvczEgPSAwOwotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvczIgPSBsaW5lLmZpbmQoJywnLCAwKTsKLSAgaWYgKHBvczIgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgc3RkOjpzdHJpbmcgYXJnOwotICB3aGlsZSAocG9zMiAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIGFyZyA9IGxpbmUuc3Vic3RyKHBvczEsIHBvczIgLSBwb3MxKTsKLSAgICBhcmdzLnB1c2hfYmFjayhhcmcpOwotICAgIHBvczEgPSBwb3MyICsgMTsKLSAgICBwb3MyID0gbGluZS5maW5kKCcsJywgcG9zMSk7Ci0gIH0KLSAgYXJnID0gbGluZS5zdWJzdHIocG9zMSk7Ci0gIGFyZ3MucHVzaF9iYWNrKGFyZyk7Ci0gIHJldHVybiB0cnVlOwotfQotCiBib29sIGNtUGFyc2VDYWNoZUNvdmVyYWdlOjpSZWFkQ01Db3ZGaWxlKGNvbnN0IGNoYXIqIGZpbGUpCiB7CiAgIGNtc3lzOjppZnN0cmVhbSBpbihmaWxlKTsKQEAgLTk3LDcgKzc4LDYgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KICAgc3RkOjpzdHJpbmcgbGluZTsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNlcGFyYXRlTGluZTsKICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpHZXRMaW5lRnJvbVN0cmVhbShpbiwgbGluZSkpIHsKICAgICBjbUNUZXN0TG9nKHRoaXMtPkNUZXN0LCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgIkVtcHR5IGZpbGUgOiAiIDw8IGZpbGUKQEAgLTEwNiw4ICs4Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgbGluZSA8PCAiXVxuIik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIHNlcGFyYXRlTGluZS5jbGVhcigpOwotICB0aGlzLT5TcGxpdFN0cmluZyhzZXBhcmF0ZUxpbmUsIGxpbmUpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2VwYXJhdGVMaW5lID0KKyAgICBjbVN5c3RlbVRvb2xzOjpTcGxpdFN0cmluZyhsaW5lLCAnLCcpOwogICBpZiAoc2VwYXJhdGVMaW5lLnNpemUoKSAhPSA0IHx8IHNlcGFyYXRlTGluZVswXSAhPSAiUm91dGluZSIgfHwKICAgICAgIHNlcGFyYXRlTGluZVsxXSAhPSAiTGluZSIgfHwgc2VwYXJhdGVMaW5lWzJdICE9ICJSdG5MaW5lIiB8fAogICAgICAgc2VwYXJhdGVMaW5lWzNdICE9ICJDb2RlIikgewpAQCAtMTIwLDEwICsxMDAsOCBAQAogICBzdGQ6OnN0cmluZyByb3V0aW5lOwogICBzdGQ6OnN0cmluZyBmaWxlcGF0aDsKICAgd2hpbGUgKGNtU3lzdGVtVG9vbHM6OkdldExpbmVGcm9tU3RyZWFtKGluLCBsaW5lKSkgewotICAgIC8vIGNsZWFyIG91dCBsaW5lIGFyZ3VtZW50IHZlY3RvcgotICAgIHNlcGFyYXRlTGluZS5jbGVhcigpOwogICAgIC8vIHBhcnNlIHRoZSBjb21tYSBzZXBhcmF0ZWQgbGluZQotICAgIHRoaXMtPlNwbGl0U3RyaW5nKHNlcGFyYXRlTGluZSwgbGluZSk7CisgICAgc2VwYXJhdGVMaW5lID0gY21TeXN0ZW1Ub29sczo6U3BsaXRTdHJpbmcobGluZSwgJywnKTsKICAgICAvLyBtaWdodCBoYXZlIG1vcmUgYmVjYXVzZSBjb2RlIGNvdWxkIGhhdmUgYSBxdW90ZWQgLCBpbiBpdAogICAgIC8vIGJ1dCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGZpcnN0IDMgYXJncyBhbnl3YXkKICAgICBpZiAoc2VwYXJhdGVMaW5lLnNpemUoKSA8IDQpIHsKQEAgLTE1NSw3ICsxMzMsNyBAQAogICAgIC8vIGlmIHdlIGhhdmUgYSByb3V0aW5lIG5hbWUsIGNoZWNrIGZvciBlbmQgb2Ygcm91dGluZQogICAgIGVsc2UgewogICAgICAgLy8gVG90YWxzIGluIGFyZyAwIG1hcmtzIHRoZSBlbmQgb2YgYSByb3V0aW5lCi0gICAgICBpZiAoc2VwYXJhdGVMaW5lWzBdLnN1YnN0cigwLCA2KSA9PSAiVG90YWxzIikgeworICAgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChzZXBhcmF0ZUxpbmVbMF0sICJUb3RhbHMiKSkgewogICAgICAgICByb3V0aW5lLmNsZWFyKCk7IC8vIGF0IHRoZSBlbmQgb2YgdGhpcyByb3V0aW5lCiAgICAgICAgIGZpbGVwYXRoLmNsZWFyKCk7CiAgICAgICAgIGNvbnRpbnVlOyAvLyBtb3ZlIHRvIG5leHQgbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUGFyc2VDYWNoZUNvdmVyYWdlLmggYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNhY2hlQ292ZXJhZ2UuaAppbmRleCBlODliOWU0Li5hODIwMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNhY2hlQ292ZXJhZ2UuaAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUNhY2hlQ292ZXJhZ2UuaApAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNtUGFyc2VNdW1wc0NvdmVyYWdlLmgiCiAKQEAgLTI2LDEzICsyNSwxMSBAQAogCiBwcm90ZWN0ZWQ6CiAgIC8vIGltcGxlbWVudCB2aXJ0dWFsIGZyb20gcGFyZW50Ci0gIGJvb2wgTG9hZENvdmVyYWdlRGF0YShjb25zdCBjaGFyKiBkaXIpIG92ZXJyaWRlOworICBib29sIExvYWRDb3ZlcmFnZURhdGEoc3RkOjpzdHJpbmcgY29uc3QmIGRpcikgb3ZlcnJpZGU7CiAgIC8vIHJlbW92ZSBmaWxlcyB3aXRoIG5vIGNvdmVyYWdlCiAgIHZvaWQgUmVtb3ZlVW5Db3ZlcmVkRmlsZXMoKTsKICAgLy8gUmVhZCBhIHNpbmdsZSBtY292IGZpbGUKICAgYm9vbCBSZWFkQ01Db3ZGaWxlKGNvbnN0IGNoYXIqIGYpOwotICAvLyBzcGxpdCBhIHN0cmluZyBiYXNlZCBvbiAsCi0gIGJvb2wgU3BsaXRTdHJpbmcoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhcmdzLCBzdGQ6OnN0cmluZyBjb25zdCYgbGluZSk7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlQ29iZXJ0dXJhQ292ZXJhZ2UuY3h4IGIvU291cmNlL0NUZXN0L2NtUGFyc2VDb2JlcnR1cmFDb3ZlcmFnZS5jeHgKaW5kZXggMDVkYTg0ZS4uNzExYTg1NiAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUGFyc2VDb2JlcnR1cmFDb3ZlcmFnZS5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtUGFyc2VDb2JlcnR1cmFDb3ZlcmFnZS5jeHgKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGFic29sdXRlIHBhdGggdGhhdCBmYWxscyB3aXRoaW4gb3VyCiAgICAgICAgICAgLy8gc291cmNlIG9yIGJpbmFyeSBkaXJlY3Rvcmllcy4KICAgICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlUGF0aCA6IEZpbGVQYXRocykgewotICAgICAgICAgICAgaWYgKGZpbGVuYW1lLmZpbmQoZmlsZVBhdGgpID09IDApIHsKKyAgICAgICAgICAgIGlmIChjbUhhc1ByZWZpeChmaWxlbmFtZSwgZmlsZVBhdGgpKSB7CiAgICAgICAgICAgICAgIHRoaXMtPkN1ckZpbGVOYW1lID0gZmlsZW5hbWU7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUGFyc2VHVE1Db3ZlcmFnZS5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUdUTUNvdmVyYWdlLmN4eAppbmRleCAxZGM1YjcwLi4xNDQxN2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUdUTUNvdmVyYWdlLmN4eAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUdUTUNvdmVyYWdlLmN4eApAQCAtMTksNyArMTksNyBAQAogewogfQogCi1ib29sIGNtUGFyc2VHVE1Db3ZlcmFnZTo6TG9hZENvdmVyYWdlRGF0YShjb25zdCBjaGFyKiBkKQorYm9vbCBjbVBhcnNlR1RNQ292ZXJhZ2U6OkxvYWRDb3ZlcmFnZURhdGEoc3RkOjpzdHJpbmcgY29uc3QmIGQpCiB7CiAgIC8vIGxvYWQgYWxsIHRoZSAubWNvdiBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeQogICBjbXN5czo6RGlyZWN0b3J5IGRpcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlR1RNQ292ZXJhZ2UuaCBiL1NvdXJjZS9DVGVzdC9jbVBhcnNlR1RNQ292ZXJhZ2UuaAppbmRleCBmZTBhZTBiLi40MWNjN2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZUdUTUNvdmVyYWdlLmgKKysrIGIvU291cmNlL0NUZXN0L2NtUGFyc2VHVE1Db3ZlcmFnZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAKIHByb3RlY3RlZDoKICAgLy8gaW1wbGVtZW50IHZpcnR1YWwgZnJvbSBwYXJlbnQKLSAgYm9vbCBMb2FkQ292ZXJhZ2VEYXRhKGNvbnN0IGNoYXIqIGRpcikgb3ZlcnJpZGU7CisgIGJvb2wgTG9hZENvdmVyYWdlRGF0YShzdGQ6OnN0cmluZyBjb25zdCYgZGlyKSBvdmVycmlkZTsKICAgLy8gUmVhZCBhIHNpbmdsZSBtY292IGZpbGUKICAgYm9vbCBSZWFkTUNvdkZpbGUoY29uc3QgY2hhciogZik7CiAgIC8vIGZpbmQgb3V0IHdoYXQgbGluZSBpbiBhIG11bXBzIGZpbGUgKGZpbGVwYXRoKSB0aGUgZ2l2ZW4gZW50cnkgcG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlTXVtcHNDb3ZlcmFnZS5jeHggYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZU11bXBzQ292ZXJhZ2UuY3h4CmluZGV4IGIxNmYxMDEuLmRjMzA2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlTXVtcHNDb3ZlcmFnZS5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtUGFyc2VNdW1wc0NvdmVyYWdlLmN4eApAQCAtMzksOSArMzksOSBAQAogICAgICAgc3RkOjpzdHJpbmcgdHlwZSA9IGxpbmUuc3Vic3RyKDAsIHBvcyk7CiAgICAgICBzdGQ6OnN0cmluZyBwYXRoID0gbGluZS5zdWJzdHIocG9zICsgMSk7CiAgICAgICBpZiAodHlwZSA9PSAicGFja2FnZXMiKSB7Ci0gICAgICAgIHRoaXMtPkxvYWRQYWNrYWdlcyhwYXRoLmNfc3RyKCkpOworICAgICAgICB0aGlzLT5Mb2FkUGFja2FnZXMocGF0aCk7CiAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImNvdmVyYWdlX2RpciIpIHsKLSAgICAgICAgdGhpcy0+TG9hZENvdmVyYWdlRGF0YShwYXRoLmNfc3RyKCkpOworICAgICAgICB0aGlzLT5Mb2FkQ292ZXJhZ2VEYXRhKHBhdGgpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgY21DVGVzdExvZyh0aGlzLT5DVGVzdCwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICAgICAiUGFyc2UgRXJyb3IgaW4gTXVtcHMgY292ZXJhZ2UgZmlsZSA6XG4iCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgfQogfQogCi1ib29sIGNtUGFyc2VNdW1wc0NvdmVyYWdlOjpMb2FkUGFja2FnZXMoY29uc3QgY2hhciogZCkKK2Jvb2wgY21QYXJzZU11bXBzQ292ZXJhZ2U6OkxvYWRQYWNrYWdlcyhzdGQ6OnN0cmluZyBjb25zdCYgZCkKIHsKICAgY21zeXM6Okdsb2IgZ2xvYjsKICAgZ2xvYi5SZWN1cnNlT24oKTsKQEAgLTExMyw3ICsxMTMsOCBAQAogICBnbG9iLkZpbmRGaWxlcyhwYXQpOwogICBmb3IgKHN0ZDo6c3RyaW5nJiBmaWxlIDogZ2xvYi5HZXRGaWxlcygpKSB7CiAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmaWxlKTsKLSAgICB0aGlzLT5Sb3V0aW5lVG9EaXJlY3RvcnlbbmFtZS5zdWJzdHIoMCwgbmFtZS5zaXplKCkgLSAyKV0gPSBmaWxlOworICAgIG5hbWUuZXJhc2UobmFtZS5zaXplKCkgLSAyKTsKKyAgICB0aGlzLT5Sb3V0aW5lVG9EaXJlY3RvcnlbbmFtZV0gPSBmaWxlOwogICAgIC8vIGluaXRpYWxpemUgZWFjaCBmaWxlLCB0aGlzIGlzIGxlZnQgb3V0IHVudGlsIENEYXNoIGlzIGZpeGVkCiAgICAgLy8gdG8gaGFuZGxlIGxhcmdlIG51bWJlcnMgb2YgZmlsZXMKICAgICB0aGlzLT5Jbml0aWFsaXplTXVtcHNGaWxlKGZpbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0NUZXN0L2NtUGFyc2VNdW1wc0NvdmVyYWdlLmggYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZU11bXBzQ292ZXJhZ2UuaAppbmRleCAyYzU0NDk1Li44YzA4NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ1Rlc3QvY21QYXJzZU11bXBzQ292ZXJhZ2UuaAorKysgYi9Tb3VyY2UvQ1Rlc3QvY21QYXJzZU11bXBzQ292ZXJhZ2UuaApAQCAtMjksMTAgKzI5LDEwIEBACiBwcm90ZWN0ZWQ6CiAgIC8vIHN1YiBjbGFzc2VzIHdpbGwgdXNlIHRoaXMgdG8KICAgLy8gbG9hZCBhbGwgY292ZXJhZ2UgZmlsZXMgZm91bmQgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeQotICB2aXJ0dWFsIGJvb2wgTG9hZENvdmVyYWdlRGF0YShjb25zdCBjaGFyKiBkKSA9IDA7CisgIHZpcnR1YWwgYm9vbCBMb2FkQ292ZXJhZ2VEYXRhKHN0ZDo6c3RyaW5nIGNvbnN0JiBkKSA9IDA7CiAgIC8vIHNlYXJjaCB0aGUgcGFja2FnZSBkaXJlY3RvcnkgZm9yIG11bXBzIGZpbGVzIGFuZCBmaWxsCiAgIC8vIGluIHRoZSBSb3V0aW5lVG9EaXJlY3RvcnkgbWFwCi0gIGJvb2wgTG9hZFBhY2thZ2VzKGNvbnN0IGNoYXIqIGRpcik7CisgIGJvb2wgTG9hZFBhY2thZ2VzKHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXIpOwogICAvLyBpbml0aWFsaXplIHRoZSBjb3ZlcmFnZSBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgbXVtcHMgZmlsZQogICB2b2lkIEluaXRpYWxpemVNdW1wc0ZpbGUoc3RkOjpzdHJpbmcmIGZpbGUpOwogICAvLyBGaW5kIG11bXBzIGZpbGUgZm9yIHJvdXRpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9DVGVzdC9jbVBhcnNlUEhQQ292ZXJhZ2UuY3h4IGIvU291cmNlL0NUZXN0L2NtUGFyc2VQSFBDb3ZlcmFnZS5jeHgKaW5kZXggYTQ5NGI5Mi4uMDQ0ZjUxOCAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUGFyc2VQSFBDb3ZlcmFnZS5jeHgKKysrIGIvU291cmNlL0NUZXN0L2NtUGFyc2VQSFBDb3ZlcmFnZS5jeHgKQEAgLTMsNiArMyw4IEBACiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxjc3RyaW5nPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIApAQCAtMTQyLDE3ICsxNDQsMTUgQEAKICAgaW50IHNpemUgPSAwOwogICBpZiAodGhpcy0+UmVhZEludChpbiwgc2l6ZSkpIHsKICAgICBzaXplKys7IC8vIGFkZCBvbmUgZm9yIG51bGwgdGVybWluYXRpb24KLSAgICBjaGFyKiBzID0gbmV3IGNoYXJbc2l6ZSArIDFdOworICAgIGF1dG8gcyA9IGNtOjptYWtlX3VuaXF1ZTxjaGFyW10+KHNpemUgKyAxKTsKICAgICAvLyByZWFkIG9wZW4gcXVvdGUKICAgICBpZiAoaW4uZ2V0KGMpICYmIGMgIT0gJyInKSB7Ci0gICAgICBkZWxldGVbXSBzOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyByZWFkIHRoZSBzdHJpbmcgZGF0YQotICAgIGluLnJlYWQocywgc2l6ZSAtIDEpOworICAgIGluLnJlYWQocy5nZXQoKSwgc2l6ZSAtIDEpOwogICAgIHNbc2l6ZSAtIDFdID0gMDsKLSAgICBzdGQ6OnN0cmluZyBmaWxlTmFtZSA9IHM7Ci0gICAgZGVsZXRlW10gczsKKyAgICBzdGQ6OnN0cmluZyBmaWxlTmFtZSA9IHMuZ2V0KCk7CiAgICAgLy8gcmVhZCBjbG9zZSBxdW90ZQogICAgIGlmIChpbi5nZXQoYykgJiYgYyAhPSAnIicpIHsKICAgICAgIGNtQ1Rlc3RMb2codGhpcy0+Q1Rlc3QsIEVSUk9SX01FU1NBR0UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21Qcm9jZXNzLmN4eCBiL1NvdXJjZS9DVGVzdC9jbVByb2Nlc3MuY3h4CmluZGV4IDg3ZjcxNDcuLjllZTFjMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DVGVzdC9jbVByb2Nlc3MuY3h4CisrKyBiL1NvdXJjZS9DVGVzdC9jbVByb2Nlc3MuY3h4CkBAIC01LDI0ICs1LDI1IEBACiAjaW5jbHVkZSA8Y3NpZ25hbD4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAogI2luY2x1ZGUgImNtc3lzL1Byb2Nlc3MuaCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ1Rlc3QuaCIKICNpbmNsdWRlICJjbUNUZXN0UnVuVGVzdC5oIgogI2luY2x1ZGUgImNtQ1Rlc3RUZXN0SGFuZGxlci5oIgogI2luY2x1ZGUgImNtR2V0UGlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpZiBkZWZpbmVkKF9XSU4zMikKLSMgIGluY2x1ZGUgImNtX2t3aW1sLmgiCisjICBpbmNsdWRlIDxjbTNwL2t3aW1sL2ludC5oPgogI2VuZGlmCi0jaW5jbHVkZSA8dXRpbGl0eT4KIAogI2RlZmluZSBDTV9QUk9DRVNTX0JVRl9TSVpFIDY1NTM2CiAKLWNtUHJvY2Vzczo6Y21Qcm9jZXNzKGNtQ1Rlc3RSdW5UZXN0JiBydW5uZXIpCi0gIDogUnVubmVyKHJ1bm5lcikKK2NtUHJvY2Vzczo6Y21Qcm9jZXNzKHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gcnVubmVyKQorICA6IFJ1bm5lcihzdGQ6Om1vdmUocnVubmVyKSkKICAgLCBDb252KGNtUHJvY2Vzc091dHB1dDo6VVRGOCwgQ01fUFJPQ0VTU19CVUZfU0laRSkKIHsKICAgdGhpcy0+VGltZW91dCA9IGNtRHVyYXRpb246Onplcm8oKTsKQEAgLTY4LDcgKzY5LDcgQEAKICAgY206OnV2X3RpbWVyX3B0ciB0aW1lcjsKICAgaW50IHN0YXR1cyA9IHRpbWVyLmluaXQobG9vcCwgdGhpcyk7CiAgIGlmIChzdGF0dXMgIT0gMCkgewotICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCisgICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXItPkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCiAgICAgICAgICAgICAgICAiRXJyb3IgaW5pdGlhbGl6aW5nIHRpbWVyOiAiIDw8IHV2X3N0cmVycm9yKHN0YXR1cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC04Myw3ICs4NCw3IEBACiAgIGludCBmZHNbMl0gPSB7IC0xLCAtMSB9OwogICBzdGF0dXMgPSBjbUdldFBpcGVzKGZkcyk7CiAgIGlmIChzdGF0dXMgIT0gMCkgewotICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCisgICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXItPkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCiAgICAgICAgICAgICAgICAiRXJyb3IgaW5pdGlhbGl6aW5nIHBpcGU6ICIgPDwgdXZfc3RyZXJyb3Ioc3RhdHVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI2LDcgKzEyNyw3IEBACiAgICAgdXZfcmVhZF9zdGFydChwaXBlX3JlYWRlciwgJmNtUHJvY2Vzczo6T25BbGxvY2F0ZUNCLCAmY21Qcm9jZXNzOjpPblJlYWRDQik7CiAKICAgaWYgKHN0YXR1cyAhPSAwKSB7Ci0gICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXIuR2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKKyAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci0+R2V0Q1Rlc3QoKSwgRVJST1JfTUVTU0FHRSwKICAgICAgICAgICAgICAgICJFcnJvciBzdGFydGluZyByZWFkIGV2ZW50czogIiA8PCB1dl9zdHJlcnJvcihzdGF0dXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzQsNyArMTM1LDcgQEAKIAogICBzdGF0dXMgPSB0aGlzLT5Qcm9jZXNzLnNwYXduKGxvb3AsIG9wdGlvbnMsIHRoaXMpOwogICBpZiAoc3RhdHVzICE9IDApIHsKLSAgICBjbUNUZXN0TG9nKHRoaXMtPlJ1bm5lci5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAorICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLT5HZXRDVGVzdCgpLCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgIlByb2Nlc3Mgbm90IHN0YXJ0ZWRcbiAiIDw8IHRoaXMtPkNvbW1hbmQgPDwgIlxuWyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB1dl9zdHJlcnJvcihzdGF0dXMpIDw8ICJdXG4iKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTEsNyArMTUyLDcgQEAKIAogdm9pZCBjbVByb2Nlc3M6OlN0YXJ0VGltZXIoKQogewotICBhdXRvIHByb3BlcnRpZXMgPSB0aGlzLT5SdW5uZXIuR2V0VGVzdFByb3BlcnRpZXMoKTsKKyAgYXV0byBwcm9wZXJ0aWVzID0gdGhpcy0+UnVubmVyLT5HZXRUZXN0UHJvcGVydGllcygpOwogICBhdXRvIG1zZWMgPQogICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHRoaXMtPlRpbWVvdXQpOwogCkBAIC0yMTgsMTAgKzIxOSwxMCBAQAogICBpZiAobnJlYWQgPiAwKSB7CiAgICAgc3RkOjpzdHJpbmcgc3RyZGF0YTsKICAgICB0aGlzLT5Db252LkRlY29kZVRleHQoYnVmLT5iYXNlLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG5yZWFkKSwgc3RyZGF0YSk7Ci0gICAgY21BcHBlbmQodGhpcy0+T3V0cHV0LCBzdHJkYXRhKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPk91dHB1dCwgc3RyZGF0YSk7CiAKICAgICB3aGlsZSAodGhpcy0+T3V0cHV0LkdldExpbmUobGluZSkpIHsKLSAgICAgIHRoaXMtPlJ1bm5lci5DaGVja091dHB1dChsaW5lKTsKKyAgICAgIHRoaXMtPlJ1bm5lci0+Q2hlY2tPdXRwdXQobGluZSk7CiAgICAgICBsaW5lLmNsZWFyKCk7CiAgICAgfQogCkBAIC0yMzUsMjAgKzIzNiwyMCBAQAogICAvLyBUaGUgcHJvY2VzcyB3aWxsIHByb3ZpZGUgbm8gbW9yZSBkYXRhLgogICBpZiAobnJlYWQgIT0gVVZfRU9GKSB7CiAgICAgYXV0byBlcnJvciA9IHN0YXRpY19jYXN0PGludD4obnJlYWQpOwotICAgIGNtQ1Rlc3RMb2codGhpcy0+UnVubmVyLkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCisgICAgY21DVGVzdExvZyh0aGlzLT5SdW5uZXItPkdldENUZXN0KCksIEVSUk9SX01FU1NBR0UsCiAgICAgICAgICAgICAgICAiRXJyb3IgcmVhZGluZyBzdHJlYW06ICIgPDwgdXZfc3RyZXJyb3IoZXJyb3IpIDw8IHN0ZDo6ZW5kbCk7CiAgIH0KIAogICAvLyBMb29rIGZvciBwYXJ0aWFsIGxhc3QgbGluZXMuCiAgIGlmICh0aGlzLT5PdXRwdXQuR2V0TGFzdChsaW5lKSkgewotICAgIHRoaXMtPlJ1bm5lci5DaGVja091dHB1dChsaW5lKTsKKyAgICB0aGlzLT5SdW5uZXItPkNoZWNrT3V0cHV0KGxpbmUpOwogICB9CiAKICAgdGhpcy0+UmVhZEhhbmRsZUNsb3NlZCA9IHRydWU7CiAgIHRoaXMtPlBpcGVSZWFkZXIucmVzZXQoKTsKICAgaWYgKHRoaXMtPlByb2Nlc3NIYW5kbGVDbG9zZWQpIHsKICAgICB1dl90aW1lcl9zdG9wKHRoaXMtPlRpbWVyKTsKLSAgICB0aGlzLT5SdW5uZXIuRmluYWxpemVUZXN0KCk7CisgICAgdGhpcy0+RmluaXNoKCk7CiAgIH0KIH0KIApAQCAtMjc3LDkgKzI3OCw2IEBACiAKIHZvaWQgY21Qcm9jZXNzOjpPblRpbWVvdXQoKQogewotICBpZiAodGhpcy0+UHJvY2Vzc1N0YXRlICE9IGNtUHJvY2Vzczo6U3RhdGU6OkV4ZWN1dGluZykgewotICAgIHJldHVybjsKLSAgfQogICB0aGlzLT5Qcm9jZXNzU3RhdGUgPSBjbVByb2Nlc3M6OlN0YXRlOjpFeHBpcmVkOwogICBib29sIGNvbnN0IHdhc19zdGlsbF9yZWFkaW5nID0gIXRoaXMtPlJlYWRIYW5kbGVDbG9zZWQ7CiAgIGlmICghdGhpcy0+UmVhZEhhbmRsZUNsb3NlZCkgewpAQCAtMjkzLDcgKzI5MSw3IEBACiAgICAgLy8gT3VyIG9uLWV4aXQgaGFuZGxlciBhbHJlYWR5IHJhbiBidXQgZGlkIG5vdCBmaW5pc2ggdGhlIHRlc3QKICAgICAvLyBiZWNhdXNlIHdlIHdlcmUgc3RpbGwgcmVhZGluZyBvdXRwdXQuICBXZSd2ZSBqdXN0IGRyb3BwZWQKICAgICAvLyBvdXIgcmVhZCBoYW5kbGVyLCBzbyB3ZSBuZWVkIHRvIGZpbmlzaCB0aGUgdGVzdCBub3cuCi0gICAgdGhpcy0+UnVubmVyLkZpbmFsaXplVGVzdCgpOworICAgIHRoaXMtPkZpbmlzaCgpOwogICB9CiB9CiAKQEAgLTMyMyw2ICszMjEsMTYgQEAKICAgLy8gUmVjb3JkIGV4aXQgaW5mb3JtYXRpb24uCiAgIHRoaXMtPkV4aXRWYWx1ZSA9IGV4aXRfc3RhdHVzOwogICB0aGlzLT5TaWduYWwgPSB0ZXJtX3NpZ25hbDsKKworICB0aGlzLT5Qcm9jZXNzSGFuZGxlQ2xvc2VkID0gdHJ1ZTsKKyAgaWYgKHRoaXMtPlJlYWRIYW5kbGVDbG9zZWQpIHsKKyAgICB1dl90aW1lcl9zdG9wKHRoaXMtPlRpbWVyKTsKKyAgICB0aGlzLT5GaW5pc2goKTsKKyAgfQorfQorCit2b2lkIGNtUHJvY2Vzczo6RmluaXNoKCkKK3sKICAgdGhpcy0+VG90YWxUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSB0aGlzLT5TdGFydFRpbWU7CiAgIC8vIEJlY2F1c2Ugb2YgYSBwcm9jZXNzb3IgY2xvY2sgc2NldyB0aGUgcnVudGltZSBtYXkgYmVjb21lIHNsaWdodGx5CiAgIC8vIG5lZ2F0aXZlLiBJZiBzb21lb25lIGNoYW5nZWQgdGhlIHN5c3RlbSBjbG9jayB3aGlsZSB0aGUgcHJvY2VzcyB3YXMKQEAgLTMzMSwxMiArMzM5LDcgQEAKICAgaWYgKHRoaXMtPlRvdGFsVGltZSA8PSBjbUR1cmF0aW9uOjp6ZXJvKCkpIHsKICAgICB0aGlzLT5Ub3RhbFRpbWUgPSBjbUR1cmF0aW9uOjp6ZXJvKCk7CiAgIH0KLQotICB0aGlzLT5Qcm9jZXNzSGFuZGxlQ2xvc2VkID0gdHJ1ZTsKLSAgaWYgKHRoaXMtPlJlYWRIYW5kbGVDbG9zZWQpIHsKLSAgICB1dl90aW1lcl9zdG9wKHRoaXMtPlRpbWVyKTsKLSAgICB0aGlzLT5SdW5uZXIuRmluYWxpemVUZXN0KCk7Ci0gIH0KKyAgdGhpcy0+UnVubmVyLT5GaW5hbGl6ZVRlc3QoKTsKIH0KIAogY21Qcm9jZXNzOjpTdGF0ZSBjbVByb2Nlc3M6OkdldFByb2Nlc3NTdGF0dXMoKQpAQCAtNTQyLDE3ICs1NDUsMTcgQEAKICMgIGVuZGlmCiAjICBpZmRlZiBTSUdBQlJUCiAgICAgY2FzZSBTSUdBQlJUOgotICAgICAgZXhjZXB0aW9uX3N0ciA9ICJDaGlsZCBhYm9ydGVkIjsKKyAgICAgIGV4Y2VwdGlvbl9zdHIgPSAiU3VicHJvY2VzcyBhYm9ydGVkIjsKICAgICAgIGJyZWFrOwogIyAgZW5kaWYKICMgIGlmZGVmIFNJR0tJTEwKICAgICBjYXNlIFNJR0tJTEw6Ci0gICAgICBleGNlcHRpb25fc3RyID0gIkNoaWxkIGtpbGxlZCI7CisgICAgICBleGNlcHRpb25fc3RyID0gIlN1YnByb2Nlc3Mga2lsbGVkIjsKICAgICAgIGJyZWFrOwogIyAgZW5kaWYKICMgIGlmZGVmIFNJR1RFUk0KICAgICBjYXNlIFNJR1RFUk06Ci0gICAgICBleGNlcHRpb25fc3RyID0gIkNoaWxkIHRlcm1pbmF0ZWQiOworICAgICAgZXhjZXB0aW9uX3N0ciA9ICJTdWJwcm9jZXNzIHRlcm1pbmF0ZWQiOwogICAgICAgYnJlYWs7CiAjICBlbmRpZgogIyAgaWZkZWYgU0lHSFVQCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ1Rlc3QvY21Qcm9jZXNzLmggYi9Tb3VyY2UvQ1Rlc3QvY21Qcm9jZXNzLmgKaW5kZXggMmMyNGYyZC4uMWU2NTc4YyAxMDA2NDQKLS0tIGEvU291cmNlL0NUZXN0L2NtUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9DVGVzdC9jbVByb2Nlc3MuaApAQCAtNiwxNCArNiwxNSBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtM3AvdXYuaD4KICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KIAotI2luY2x1ZGUgImNtX3V2LmgiCi0KICNpbmNsdWRlICJjbUR1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY21Qcm9jZXNzT3V0cHV0LmgiCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgpAQCAtMjgsNyArMjksNyBAQAogY2xhc3MgY21Qcm9jZXNzCiB7CiBwdWJsaWM6Ci0gIGV4cGxpY2l0IGNtUHJvY2VzcyhjbUNUZXN0UnVuVGVzdCYgcnVubmVyKTsKKyAgZXhwbGljaXQgY21Qcm9jZXNzKHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gcnVubmVyKTsKICAgfmNtUHJvY2VzcygpOwogICB2b2lkIFNldENvbW1hbmQoc3RkOjpzdHJpbmcgY29uc3QmIGNvbW1hbmQpOwogICB2b2lkIFNldENvbW1hbmRBcmd1bWVudHMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmcpOwpAQCAtNzAsNiArNzEsMTEgQEAKICAgRXhjZXB0aW9uIEdldEV4aXRFeGNlcHRpb24oKTsKICAgc3RkOjpzdHJpbmcgR2V0RXhpdEV4Y2VwdGlvblN0cmluZygpOwogCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUNUZXN0UnVuVGVzdD4gR2V0UnVubmVyKCkKKyAgeworICAgIHJldHVybiBzdGQ6Om1vdmUodGhpcy0+UnVubmVyKTsKKyAgfQorCiBwcml2YXRlOgogICBjbUR1cmF0aW9uIFRpbWVvdXQ7CiAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgU3RhcnRUaW1lOwpAQCAtODIsNyArODgsNyBAQAogICBjbTo6dXZfdGltZXJfcHRyIFRpbWVyOwogICBzdGQ6OnZlY3RvcjxjaGFyPiBCdWY7CiAKLSAgY21DVGVzdFJ1blRlc3QmIFJ1bm5lcjsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtQ1Rlc3RSdW5UZXN0PiBSdW5uZXI7CiAgIGNtUHJvY2Vzc091dHB1dCBDb252OwogICBpbnQgU2lnbmFsID0gMDsKICAgY21Qcm9jZXNzOjpTdGF0ZSBQcm9jZXNzU3RhdGUgPSBjbVByb2Nlc3M6OlN0YXRlOjpTdGFydGluZzsKQEAgLTEwMSw2ICsxMDcsNyBAQAogICB2b2lkIE9uQWxsb2NhdGUoc2l6ZV90IHN1Z2dlc3RlZF9zaXplLCB1dl9idWZfdCogYnVmKTsKIAogICB2b2lkIFN0YXJ0VGltZXIoKTsKKyAgdm9pZCBGaW5pc2goKTsKIAogICBjbGFzcyBCdWZmZXIgOiBwdWJsaWMgc3RkOjp2ZWN0b3I8Y2hhcj4KICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0NoZWNrcy9DdXJzZXMuY21ha2UgYi9Tb3VyY2UvQ2hlY2tzL0N1cnNlcy5jbWFrZQppbmRleCAyOTQyYjY2Li5kMzVkZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ2hlY2tzL0N1cnNlcy5jbWFrZQorKysgYi9Tb3VyY2UvQ2hlY2tzL0N1cnNlcy5jbWFrZQpAQCAtMSw0ICsxLDcgQEAKLW1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBmb3IgY3Vyc2VzIHN1cHBvcnQiKQoraW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NtX21lc3NhZ2VfY2hlY2tzX2NvbXBhdC5jbWFrZSkKK2NtX21lc3NhZ2VfY2hlY2tzX2NvbXBhdCgKKyAgIkNoZWNraW5nIGZvciBjdXJzZXMgc3VwcG9ydCIgX19jaGVja1N0YXJ0IF9fY2hlY2tQYXNzIF9fY2hlY2tGYWlsKQorbWVzc2FnZSgke19fY2hlY2tTdGFydH0pCiAKICMgVHJ5IGNvbXBpbGluZyBhIHNpbXBsZSBwcm9qZWN0IHVzaW5nIGN1cnNlcy4KICMgUGFzcyBpbiBhbnkgY2FjaGUgZW50cmllcyB0aGF0IHRoZSB1c2VyIG1heSBoYXZlIHNldC4KQEAgLTMxLDExICszNCwxMSBAQAogdW5zZXQoQ01ha2VDaGVja0N1cnNlc19DT01QSUxFRCBDQUNIRSkKIAogaWYoQ01ha2VDaGVja0N1cnNlc19DT01QSUxFRCkKLSAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGZvciBjdXJzZXMgc3VwcG9ydCAtIFN1Y2Nlc3MiKQorICBtZXNzYWdlKCR7X19jaGVja1Bhc3N9ICJTdWNjZXNzIikKICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAiQ2hlY2tpbmcgZm9yIGN1cnNlcyBzdXBwb3J0IHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtDTWFrZUNoZWNrQ3Vyc2VzX09VVFBVVH1cblxuIikKIGVsc2UoKQotICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgZm9yIGN1cnNlcyBzdXBwb3J0IC0gRmFpbGVkIikKKyAgbWVzc2FnZSgke19fY2hlY2tGYWlsfSAiRmFpbGVkIikKICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICJDaGVja2luZyBmb3IgY3Vyc2VzIHN1cHBvcnQgZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke0NNYWtlQ2hlY2tDdXJzZXNfT1VUUFVUfVxuXG4iKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0NoZWNrcy9jbV9jMTFfdGhyZWFkX2xvY2FsLmNtYWtlIGIvU291cmNlL0NoZWNrcy9jbV9jMTFfdGhyZWFkX2xvY2FsLmNtYWtlCmluZGV4IDZiOGQxMGIuLjIyNjNiZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DaGVja3MvY21fYzExX3RocmVhZF9sb2NhbC5jbWFrZQorKysgYi9Tb3VyY2UvQ2hlY2tzL2NtX2MxMV90aHJlYWRfbG9jYWwuY21ha2UKQEAgLTEsNyArMSwxMSBAQAogc2V0KENNYWtlX0MxMV9USFJFQURfTE9DQUxfQlJPS0VOIDApCiBpZihDTUFLRV9DWFhfQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VIiBBTkQgQ01BS0VfQzExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OKQogICBpZihOT1QgREVGSU5FRCBDTWFrZV9DMTFfVEhSRUFEX0xPQ0FMX1dPUktTKQotICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBDMTEgX1RocmVhZF9sb2NhbCIpCisgICAgaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NtX21lc3NhZ2VfY2hlY2tzX2NvbXBhdC5jbWFrZSkKKyAgICBjbV9tZXNzYWdlX2NoZWNrc19jb21wYXQoCisgICAgICAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQzExIF9UaHJlYWRfbG9jYWwiCisgICAgICBfX2NoZWNrU3RhcnQgX19jaGVja1Bhc3MgX19jaGVja0ZhaWwpCisgICAgbWVzc2FnZSgke19fY2hlY2tTdGFydH0pCiAgICAgdHJ5X2NvbXBpbGUoQ01ha2VfQzExX1RIUkVBRF9MT0NBTF9XT1JLUwogICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CiAgICAgICAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NtX2MxMV90aHJlYWRfbG9jYWwuYwpAQCAtMTIsMTQgKzE2LDE0IEBACiAgICAgICBzZXRfcHJvcGVydHkoQ0FDSEUgQ01ha2VfQzExX1RIUkVBRF9MT0NBTF9XT1JLUyBQUk9QRVJUWSBWQUxVRSAwKQogICAgIGVuZGlmKCkKICAgICBpZihDTWFrZV9DMTFfVEhSRUFEX0xPQ0FMX1dPUktTKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIEMxMSBfVGhyZWFkX2xvY2FsIC0geWVzIikKKyAgICAgIG1lc3NhZ2UoJHtfX2NoZWNrUGFzc30gInllcyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQzExIF9UaHJlYWRfbG9jYWwgcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgICAgICIke09VVFBVVH1cbiIKICAgICAgICAgIlxuIgogICAgICAgICApCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQzExIF9UaHJlYWRfbG9jYWwgLSBubyIpCisgICAgICBtZXNzYWdlKCR7X19jaGVja0ZhaWx9ICJubyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiBjb21waWxlciBzdXBwb3J0cyBDMTEgX1RocmVhZF9sb2NhbCBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuIgpkaWZmIC0tZ2l0IGEvU291cmNlL0NoZWNrcy9jbV9jeHgxNF9jaGVjay5jbWFrZSBiL1NvdXJjZS9DaGVja3MvY21fY3h4MTRfY2hlY2suY21ha2UKaW5kZXggMzg2MDZiOS4uZTU2NTZiZiAxMDA2NDQKLS0tIGEvU291cmNlL0NoZWNrcy9jbV9jeHgxNF9jaGVjay5jbWFrZQorKysgYi9Tb3VyY2UvQ2hlY2tzL2NtX2N4eDE0X2NoZWNrLmNtYWtlCkBAIC0xLDEwICsxLDE0IEBACiBzZXQoQ01ha2VfQ1hYMTRfQlJPS0VOIDApCi1pZihDTUFLRV9DWFhfQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VfENsYW5nfFBHSSIpCitpZihDTUFLRV9DWFhfQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VfENsYW5nfFBHSXxJbnRlbCIpCiAgIGlmKE5PVCBDTUFLRV9DWFgxNF9TVEFOREFSRF9DT01QSUxFX09QVElPTikKICAgICBzZXQoQ01ha2VfQ1hYMTRfV09SS1MgMCkKICAgZW5kaWYoKQogICBpZihOT1QgREVGSU5FRCBDTWFrZV9DWFgxNF9XT1JLUykKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgbmVlZGVkIEMrKzE0IGNvbnN0cnVjdHMiKQorICAgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jbV9tZXNzYWdlX2NoZWNrc19jb21wYXQuY21ha2UpCisgICAgY21fbWVzc2FnZV9jaGVja3NfY29tcGF0KAorICAgICAgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG5lZWRlZCBDKysxNCBjb25zdHJ1Y3RzIgorICAgICAgX19jaGVja1N0YXJ0IF9fY2hlY2tQYXNzIF9fY2hlY2tGYWlsKQorICAgIG1lc3NhZ2UoJHtfX2NoZWNrU3RhcnR9KQogICAgIHRyeV9jb21waWxlKENNYWtlX0NYWDE0X1dPUktTCiAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KICAgICAgICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY21fY3h4MTRfY2hlY2suY3BwCkBAIC0xNSwxNCArMTksMTQgQEAKICAgICAgIHNldF9wcm9wZXJ0eShDQUNIRSBDTWFrZV9DWFgxNF9XT1JLUyBQUk9QRVJUWSBWQUxVRSAwKQogICAgIGVuZGlmKCkKICAgICBpZihDTWFrZV9DWFgxNF9XT1JLUykKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBuZWVkZWQgQysrMTQgY29uc3RydWN0cyAtIHllcyIpCisgICAgICBtZXNzYWdlKCR7X19jaGVja1Bhc3N9ICJ5ZXMiKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG5lZWRlZCBDKysxNCBjb25zdHJ1Y3RzIHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgogICAgICAgICAiJHtPVVRQVVR9XG4iCiAgICAgICAgICJcbiIKICAgICAgICAgKQogICAgIGVsc2UoKQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG5lZWRlZCBDKysxNCBjb25zdHJ1Y3RzIC0gbm8iKQorICAgICAgbWVzc2FnZSgke19fY2hlY2tGYWlsfSAibm8iKQogICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgbmVlZGVkIEMrKzE0IGNvbnN0cnVjdHMgZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgICAgICIke09VVFBVVH1cbiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9DaGVja3MvY21fY3h4MTdfY2hlY2suY21ha2UgYi9Tb3VyY2UvQ2hlY2tzL2NtX2N4eDE3X2NoZWNrLmNtYWtlCmluZGV4IDRkYTJmZDcuLmRiYTNlYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DaGVja3MvY21fY3h4MTdfY2hlY2suY21ha2UKKysrIGIvU291cmNlL0NoZWNrcy9jbV9jeHgxN19jaGVjay5jbWFrZQpAQCAtMSwxMCArMSwxNCBAQAogc2V0KENNYWtlX0NYWDE3X0JST0tFTiAwKQotaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVXxDbGFuZ3xQR0kiKQoraWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVXxDbGFuZ3xQR0l8SW50ZWwiKQogICBpZihOT1QgQ01BS0VfQ1hYMTdfU1RBTkRBUkRfQ09NUElMRV9PUFRJT04pCiAgICAgc2V0KENNYWtlX0NYWDE3X1dPUktTIDApCiAgIGVuZGlmKCkKICAgaWYoTk9UIERFRklORUQgQ01ha2VfQ1hYMTdfV09SS1MpCi0gICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG5lZWRlZCBDKysxNyBjb25zdHJ1Y3RzIikKKyAgICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vY21fbWVzc2FnZV9jaGVja3NfY29tcGF0LmNtYWtlKQorICAgIGNtX21lc3NhZ2VfY2hlY2tzX2NvbXBhdCgKKyAgICAgICJDaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBuZWVkZWQgQysrMTcgY29uc3RydWN0cyIKKyAgICAgIF9fY2hlY2tTdGFydCBfX2NoZWNrUGFzcyBfX2NoZWNrRmFpbCkKKyAgICBtZXNzYWdlKCR7X19jaGVja1N0YXJ0fSkKICAgICB0cnlfY29tcGlsZShDTWFrZV9DWFgxN19XT1JLUwogICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CiAgICAgICAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NtX2N4eDE3X2NoZWNrLmNwcApAQCAtMTUsMTQgKzE5LDE0IEBACiAgICAgICBzZXRfcHJvcGVydHkoQ0FDSEUgQ01ha2VfQ1hYMTdfV09SS1MgUFJPUEVSVFkgVkFMVUUgMCkKICAgICBlbmRpZigpCiAgICAgaWYoQ01ha2VfQ1hYMTdfV09SS1MpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgbmVlZGVkIEMrKzE3IGNvbnN0cnVjdHMgLSB5ZXMiKQorICAgICAgbWVzc2FnZSgke19fY2hlY2tQYXNzfSAieWVzIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiBjb21waWxlciBzdXBwb3J0cyBuZWVkZWQgQysrMTcgY29uc3RydWN0cyBwYXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuIgogICAgICAgICAiXG4iCiAgICAgICAgICkKICAgICBlbHNlKCkKLSAgICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBuZWVkZWQgQysrMTcgY29uc3RydWN0cyAtIG5vIikKKyAgICAgIG1lc3NhZ2UoJHtfX2NoZWNrRmFpbH0gIm5vIikKICAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIkRldGVybWluaW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG5lZWRlZCBDKysxNyBjb25zdHJ1Y3RzIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgogICAgICAgICAiJHtPVVRQVVR9XG4iCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ2hlY2tzL2NtX2N4eDE3X2NoZWNrLmNwcCBiL1NvdXJjZS9DaGVja3MvY21fY3h4MTdfY2hlY2suY3BwCmluZGV4IDI5ODYzYjEuLmFiYmUyMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DaGVja3MvY21fY3h4MTdfY2hlY2suY3BwCisrKyBiL1NvdXJjZS9DaGVja3MvY21fY3h4MTdfY2hlY2suY3BwCkBAIC04LDYgKzgsMTMgQEAKICMgIGluY2x1ZGUgPGNvbWRlZi5oPgogI2VuZGlmCiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBULAorICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aW52b2tlX3Jlc3VsdDxkZWNsdHlwZSgmVDo6Z2V0KSwgVD46OnR5cGUgPSBudWxscHRyPgordHlwZW5hbWUgVDo6cG9pbnRlciBnZXRfcHRyKFQmIGl0ZW0pCit7CisgIHJldHVybiBpdGVtLmdldCgpOworfQorCiBpbnQgbWFpbigpCiB7CiAgIGludCBhW10gPSB7IDAsIDEsIDIgfTsKQEAgLTIwLDYgKzI3LDkgQEAKIAogICBzdGQ6OnVuaXF1ZV9wdHI8aW50PiB1KG5ldyBpbnQoMCkpOwogCisgIC8vIEludGVsIGNvbXBpbGVyIGRvIG5vdCBoYW5kbGUgY29ycmVjdGx5ICdkZWNsdHlwZScgaW5zaWRlICdpbnZva2VfcmVzdWx0JworICBnZXRfcHRyKHUpOworCiAjaWZkZWYgX01TQ19WRVIKICAgLy8gY2xhbmctY2wgaGFzIHByb2JsZW1zIGluc3RhbnRpYXRpbmcgdGhpcyBjb25zdHJ1Y3RvciBpbiBDKysxNyBtb2RlCiAgIC8vICBlcnJvcjogaW5kaXJlY3Rpb24gcmVxdWlyZXMgcG9pbnRlciBvcGVyYW5kICgnY29uc3QgX0dVSUQnIGludmFsaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ2hlY2tzL2NtX2N4eF9mZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9DaGVja3MvY21fY3h4X2ZlYXR1cmVzLmNtYWtlCmluZGV4IGZiNjhlZDcuLmU3MjZmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DaGVja3MvY21fY3h4X2ZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJjZS9DaGVja3MvY21fY3h4X2ZlYXR1cmVzLmNtYWtlCkBAIC0xLDggKzEsMTIgQEAKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jbV9tZXNzYWdlX2NoZWNrc19jb21wYXQuY21ha2UpCiAKIGZ1bmN0aW9uKGNtX2NoZWNrX2N4eF9mZWF0dXJlIG5hbWUpCiAgIHN0cmluZyhUT1VQUEVSICR7bmFtZX0gRkVBVFVSRSkKICAgaWYoTk9UIERFRklORUQgQ01ha2VfSEFWRV9DWFhfJHtGRUFUVVJFfSkKLSAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQysrICR7bmFtZX0iKQorICAgIGNtX21lc3NhZ2VfY2hlY2tzX2NvbXBhdCgKKyAgICAgICJDaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBDKysgJHtuYW1lfSIKKyAgICAgIF9fY2hlY2tTdGFydCBfX2NoZWNrUGFzcyBfX2NoZWNrRmFpbCkKKyAgICBtZXNzYWdlKCR7X19jaGVja1N0YXJ0fSkKICAgICBpZihDTUFLRV9DWFhfU1RBTkRBUkQpCiAgICAgICBzZXQobWF5YmVfY3h4X3N0YW5kYXJkIC1EQ01BS0VfQ1hYX1NUQU5EQVJEPSR7Q01BS0VfQ1hYX1NUQU5EQVJEfSkKICAgICBlbHNlKCkKQEAgLTI0LDIxICsyOCwyNyBAQAogICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXlxuXSp3YXJuaW5nOlteXG5dKm9iamVjdCBmaWxlIGNvbXBpbGVkIHdpdGggLW1sb25nLWJyYW5jaCB3aGljaCBpcyBubyBsb25nZXIgbmVlZGVkW15cbl0qIiAiIiBjaGVja19vdXRwdXQgIiR7Y2hlY2tfb3V0cHV0fSIpCiAgICAgIyBGaWx0ZXIgb3V0IG90aGVyIHdhcm5pbmdzIHVucmVsYXRlZCB0byBmZWF0dXJlIGNoZWNrcy4KICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiW15cbl0qd2FybmluZzpbXlxuXSpzcHJpbnRmXFwoXFwpIGlzIG9mdGVuIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc25wcmludGZbXlxuXSoiICIiIGNoZWNrX291dHB1dCAiJHtjaGVja19vdXRwdXR9IikKKyAgICAjIEZpbHRlciBvdXQgbGliaHVnZXRsYmZzIHdhcm5pbmdzLgorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXlxuXSpsaWJodWdldGxiZnMgW15cbl0qOiBXQVJOSU5HW15cbl0qIiAiIiBjaGVja19vdXRwdXQgIiR7Y2hlY2tfb3V0cHV0fSIpCiAgICAgIyBGaWx0ZXIgb3V0IHhjb2RlYnVpbGQgd2FybmluZ3MuCiAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIlteXG5dKiB4Y29kZWJ1aWxkXFxbWzAtOV0qOlswLTldKlxcXSB3YXJuaW5nOiBbXlxuXSoiICIiIGNoZWNrX291dHB1dCAiJHtjaGVja19vdXRwdXR9IikKKyAgICAjIEZpbHRlciBvdXQgaWNwYyB3YXJuaW5ncworICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXlxuXSppY3BjOiBjb21tYW5kIGxpbmUgd2FybmluZyAjMTAxMjE6IG92ZXJyaWRpbmcgW15cbl0qIiAiIiBjaGVja19vdXRwdXQgIiR7Y2hlY2tfb3V0cHV0fSIpCisgICAgIyBGaWx0ZXIgb3V0IGxkIHdhcm5pbmdzLgorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJbXlxuXSpsZDogd2FybmluZzogW15cbl0qIiAiIiBjaGVja19vdXRwdXQgIiR7Y2hlY2tfb3V0cHV0fSIpCiAgICAgIyBJZiB1c2luZyB0aGUgZmVhdHVyZSBjYXVzZXMgd2FybmluZ3MsIHRyZWF0IGl0IGFzIGJyb2tlbi91bmF2YWlsYWJsZS4KICAgICBpZihjaGVja19vdXRwdXQgTUFUQ0hFUyAiKF58WyA6XSlbV3ddW0FhXVtScl1bTm5dW0lpXVtObl1bR2ddIikKICAgICAgIHNldChDTWFrZV9IQVZFX0NYWF8ke0ZFQVRVUkV9IE9GRiBDQUNIRSBJTlRFUk5BTCAiVFJZX0NPTVBJTEUiIEZPUkNFKQogICAgIGVuZGlmKCkKICAgICBpZihDTWFrZV9IQVZFX0NYWF8ke0ZFQVRVUkV9KQotICAgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIGlmIGNvbXBpbGVyIHN1cHBvcnRzIEMrKyAke25hbWV9IC0geWVzIikKKyAgICAgIG1lc3NhZ2UoJHtfX2NoZWNrUGFzc30gInllcyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZwogICAgICAgICAiRGV0ZXJtaW5pbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQysrICR7bmFtZX0gcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgICAgICIke09VVFBVVH1cbiIKICAgICAgICAgIlxuIgogICAgICAgICApCiAgICAgZWxzZSgpCi0gICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgQysrICR7bmFtZX0gLSBubyIpCisgICAgICBtZXNzYWdlKCR7X19jaGVja0ZhaWx9ICJubyIpCiAgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICJEZXRlcm1pbmluZyBpZiBjb21waWxlciBzdXBwb3J0cyBDKysgJHtuYW1lfSBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiIKICAgICAgICAgIiR7T1VUUFVUfVxuIgpAQCAtNTMsMyArNjMsOCBAQAogICBzZXQoQ01ha2VfSEFWRV9DWFhfVU5JUVVFX1BUUiAxKQogZW5kaWYoKQogY21fY2hlY2tfY3h4X2ZlYXR1cmUodW5pcXVlX3B0cikKK2lmIChOT1QgQ01BS0VfQ1hYX1NUQU5EQVJEIExFU1MgIjE3IikKKyAgY21fY2hlY2tfY3h4X2ZlYXR1cmUoZmlsZXN5c3RlbSkKK2Vsc2UoKQorICBzZXQoQ01ha2VfSEFWRV9DWFhfRklMRVNZU1RFTSBGQUxTRSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9DaGVja3MvY21fY3h4X2ZpbGVzeXN0ZW0uY3h4IGIvU291cmNlL0NoZWNrcy9jbV9jeHhfZmlsZXN5c3RlbS5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwOGQxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9DaGVja3MvY21fY3h4X2ZpbGVzeXN0ZW0uY3h4CkBAIC0wLDAgKzEsMTAgQEAKKworI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CisKK2ludCBtYWluKCkKK3sKKyAgc3RkOjpmaWxlc3lzdGVtOjpwYXRoIHAxKCIvYS9iL2MiKTsKKyAgc3RkOjpmaWxlc3lzdGVtOjpwYXRoIHAyKCIvYS9iL2MiKTsKKworICByZXR1cm4gcDEgPT0gcDIgPyAwIDogMTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9DaGVja3MvY21fbWVzc2FnZV9jaGVja3NfY29tcGF0LmNtYWtlIGIvU291cmNlL0NoZWNrcy9jbV9tZXNzYWdlX2NoZWNrc19jb21wYXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0YzM5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9DaGVja3MvY21fbWVzc2FnZV9jaGVja3NfY29tcGF0LmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKKyMgU3VwcG9ydGluZyB1c2luZyB0aGUgQ0hFQ0tfLi4uIG1lc3NhZ2UgbW9kZXMgaWYgYXZhaWxhYmxlCisjIGFuZCBmYWxsIGJhY2sgdG8gdGhlIG9sZGVyIGJlaGF2aW9yIGlmIG5vdAorbWFjcm8oY21fbWVzc2FnZV9jaGVja3NfY29tcGF0IGRlc2NyaXB0aW9uIHN0YXJ0VmFyIHBhc3NWYXIgZmFpbFZhcikKKyAgaWYoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVIgMy4xNi4yMDE5KQorICAgIHNldCgke3N0YXJ0VmFyfSBDSEVDS19TVEFSVCAiJHtkZXNjcmlwdGlvbn0iKQorICAgIHNldCgke3Bhc3NWYXJ9ICBDSEVDS19QQVNTKQorICAgIHNldCgke2ZhaWxWYXJ9ICBDSEVDS19GQUlMKQorICBlbHNlKCkKKyAgICBzZXQoJHtzdGFydFZhcn0gU1RBVFVTICIke2Rlc2NyaXB0aW9ufSIpCisgICAgc2V0KCR7cGFzc1Zhcn0gIFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSAiKQorICAgIHNldCgke2ZhaWxWYXJ9ICBTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gIikKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvQ01ha2VMaXN0cy50eHQKaW5kZXggNzAwOTcxNy4uYzI0ZWU3NiAxMDA2NDQKLS0tIGEvU291cmNlL0N1cnNlc0RpYWxvZy9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL0NNYWtlTGlzdHMudHh0CkBAIC01LDYgKzUsNyBAQAogICBjY21ha2UuY3h4CiAgIGNtQ3Vyc2VzQm9vbFdpZGdldC5jeHgKICAgY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlLmN4eAorICBjbUN1cnNlc0NvbG9yLmN4eAogICBjbUN1cnNlc0R1bW15V2lkZ2V0LmN4eAogICBjbUN1cnNlc0ZpbGVQYXRoV2lkZ2V0LmN4eAogICBjbUN1cnNlc0Zvcm0uY3h4CkBAIC0xNywyMSArMTgsNDUgQEAKICAgY21DdXJzZXNXaWRnZXQuY3h4CiAgICkKIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGNjbWFrZSBQUklWQVRFICR7Q1VSU0VTX0lOQ0xVREVfUEFUSH0pCitzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtDVVJTRVNfSU5DTFVERV9QQVRIfSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhjY21ha2UgQ01ha2VMaWIpCiBpZihDTUFLRV9VU0VfU1lTVEVNX0ZPUk0pCiAgIGZpbmRfcGF0aChDVVJTRVNfRk9STV9JTkNMVURFX0RJUiBOQU1FUyBmb3JtLmggSElOVFMgJHtDVVJTRVNfSU5DTFVERV9QQVRIfSAke0NVUlNFU19JTkNMVURFX1BBVEh9L25jdXJzZXMpCiAgIGlmKENVUlNFU19GT1JNX0lOQ0xVREVfRElSKQogICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGNjbWFrZSBQUklWQVRFICR7Q1VSU0VTX0ZPUk1fSU5DTFVERV9ESVJ9KQorICAgIGxpc3QoQVBQRU5EIENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7Q1VSU0VTX0ZPUk1fSU5DTFVERV9ESVJ9KQogICBlbmRpZigpCiAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhjY21ha2UKICAgICAke0NVUlNFU19GT1JNX0xJQlJBUll9CiAgICAgJHtDVVJTRVNfTElCUkFSWX0KICAgKQorICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTCisgICAgJHtDVVJTRVNfRk9STV9MSUJSQVJZfQorICAgICR7Q1VSU0VTX0xJQlJBUll9CisgICkKICAgaWYoQ1VSU0VTX0VYVFJBX0xJQlJBUlkpCiAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNjbWFrZSAke0NVUlNFU19FWFRSQV9MSUJSQVJZfSkKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtDVVJTRVNfRVhUUkFfTElCUkFSWX0pCiAgIGVuZGlmKCkKIGVsc2UoKQogICB0YXJnZXRfbGlua19saWJyYXJpZXMoY2NtYWtlIGNtRm9ybSkKKyAgZ2V0X3RhcmdldF9wcm9wZXJ0eShjbUZvcm1JbmNsdWRlRGlycyBjbUZvcm0gSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMpCisgIGxpc3QoQVBQRU5EIENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7Y21Gb3JtSW5jbHVkZURpcnN9KQorICBnZXRfdGFyZ2V0X3Byb3BlcnR5KGNtRm9ybUxpYnJhcmllcyBjbUZvcm0gSU5URVJGQUNFX0xJTktfTElCUkFSSUVTKQorICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICR7Y21Gb3JtTGlicmFyaWVzfSkKK2VuZGlmKCkKKworaW5jbHVkZShDaGVja1N5bWJvbEV4aXN0cykKK2NoZWNrX3N5bWJvbF9leGlzdHModXNlX2RlZmF1bHRfY29sb3JzCisgICJmb3JtLmgiCisgIEhBVkVfQ1VSU0VTX1VTRV9ERUZBVUxUX0NPTE9SUykKK2lmKEhBVkVfQ1VSU0VTX1VTRV9ERUZBVUxUX0NPTE9SUykKKyAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKGNtQ3Vyc2VzQ29sb3IuY3h4CisgICAgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TIEhBVkVfQ1VSU0VTX1VTRV9ERUZBVUxUX0NPTE9SUykKK2VuZGlmKCkKKworaWYoQ01ha2VfSk9CX1BPT0xfTElOS19CSU4pCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgY2NtYWtlIFBST1BFUlRZIEpPQl9QT09MX0xJTksgImxpbmstYmluIikKIGVuZGlmKCkKIAogQ01ha2VfT1BUSU9OQUxfQ09NUE9ORU5UKGNjbWFrZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY2NtYWtlLmN4eCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY2NtYWtlLmN4eAppbmRleCA5ZTlkZmJkLi44NWUyNTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NjbWFrZS5jeHgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jY21ha2UuY3h4CkBAIC0yLDE5ICsyLDI1IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KIAogI2luY2x1ZGUgPGNzaWduYWw+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKICNpbmNsdWRlICJjbXN5cy9FbmNvZGluZy5oeHgiCiAKKyNpbmNsdWRlICJjbUN1cnNlc0NvbG9yLmgiCiAjaW5jbHVkZSAiY21DdXJzZXNGb3JtLmgiCiAjaW5jbHVkZSAiY21DdXJzZXNNYWluRm9ybS5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzU3RhbmRhcmRJbmNsdWRlcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCkBAIC01Miw3ICs1OCwxMiBAQAogewogICBpZiAoY21DdXJzZXNGb3JtOjpDdXJyZW50Rm9ybSkgewogICAgIGVuZHdpbigpOwotICAgIGluaXRzY3IoKTsgICAgICAgICAgICAvKiBJbml0aWFsaXphdGlvbiAqLworICAgIGlmIChpbml0c2NyKCkgPT0gbnVsbHB0cikgeworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZXJybXNnW10gPSAiRXJyb3I6IG5jdXJzZXMgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iOworICAgICAgYXV0byByID0gd3JpdGUoU1RERVJSX0ZJTEVOTywgZXJybXNnLCBzaXplb2YoZXJybXNnKSAtIDEpOworICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4ocik7CisgICAgICBleGl0KDEpOworICAgIH0KICAgICBub2VjaG8oKTsgICAgICAgICAgICAgLyogRWNobyBvZmYgKi8KICAgICBjYnJlYWsoKTsgICAgICAgICAgICAgLyogbmwtIG9yIGNyIG5vdCBuZWVkZWQgKi8KICAgICBrZXlwYWQoc3Rkc2NyLCB0cnVlKTsgLyogVXNlIGtleSBzeW1ib2xzIGFzIEtFWV9ET1dOICovCkBAIC0xMTAsOCArMTIxLDggQEAKIAogICBzdGQ6OnN0cmluZyBjYWNoZURpciA9IGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CiAgIGZvciAoaSA9IDE7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7Ci0gICAgc3RkOjpzdHJpbmcgYXJnID0gYXJnc1tpXTsKLSAgICBpZiAoYXJnLmZpbmQoIi1CIiwgMCkgPT0gMCkgeworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgPSBhcmdzW2ldOworICAgIGlmIChjbUhhc1ByZWZpeChhcmcsICItQiIpKSB7CiAgICAgICBjYWNoZURpciA9IGFyZy5zdWJzdHIoMik7CiAgICAgfQogICB9CkBAIC0xMjIsMTAgKzEzMywxNCBAQAogICAgIGNtQ3Vyc2VzRm9ybTo6RGVidWdTdGFydCgpOwogICB9CiAKLSAgaW5pdHNjcigpOyAgICAgICAgICAgIC8qIEluaXRpYWxpemF0aW9uICovCisgIGlmIChpbml0c2NyKCkgPT0gbnVsbHB0cikgeworICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IG5jdXJzZXMgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKyAgICBleGl0KDEpOworICB9CiAgIG5vZWNobygpOyAgICAgICAgICAgICAvKiBFY2hvIG9mZiAqLwogICBjYnJlYWsoKTsgICAgICAgICAgICAgLyogbmwtIG9yIGNyIG5vdCBuZWVkZWQgKi8KICAga2V5cGFkKHN0ZHNjciwgdHJ1ZSk7IC8qIFVzZSBrZXkgc3ltYm9scyBhcyBLRVlfRE9XTiAqLworICBjbUN1cnNlc0NvbG9yOjpJbml0Q29sb3JzKCk7CiAKICAgc2lnbmFsKFNJR1dJTkNILCBvbnNpZyk7CiAKQEAgLTE1MywxMCArMTY4LDI4IEBACiAgICAgcmV0dXJuIDE7CiAgIH0KIAorICAvKgorICAgKiBUaGUgbWVzc2FnZSBpcyBzdG9yZWQgaW4gYSBsaXN0IGJ5IHRoZSBmb3JtIHdoaWNoIHdpbGwgYmUKKyAgICogam9pbmVkIGJ5ICdcbicgYmVmb3JlIGRpc3BsYXkuCisgICAqIFJlbW92aW5nIGFueSB0cmFpbGluZyAnXG4nIGF2b2lkIGV4dHJhIGVtcHR5IGxpbmVzIGluIHRoZSBmaW5hbCByZXN1bHRzCisgICAqLworICBhdXRvIGNsZWFuTWVzc2FnZSA9IFtdKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKSAtPiBzdGQ6OnN0cmluZyB7CisgICAgYXV0byBtc2cgPSBtZXNzYWdlOworICAgIGlmICghbXNnLmVtcHR5KCkgJiYgbXNnLmJhY2soKSA9PSAnXG4nKSB7CisgICAgICBtc2cucG9wX2JhY2soKTsKKyAgICB9CisgICAgcmV0dXJuIG1zZzsKKyAgfTsKICAgY21TeXN0ZW1Ub29sczo6U2V0TWVzc2FnZUNhbGxiYWNrKAotICAgIFtteWZvcm1dKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlLCBjb25zdCBjaGFyKiB0aXRsZSkgewotICAgICAgbXlmb3JtLT5BZGRFcnJvcihtZXNzYWdlLCB0aXRsZSk7CisgICAgWyZdKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlLCBjb25zdCBjaGFyKiB0aXRsZSkgeworICAgICAgbXlmb3JtLT5BZGRFcnJvcihjbGVhbk1lc3NhZ2UobWVzc2FnZSksIHRpdGxlKTsKICAgICB9KTsKKyAgY21TeXN0ZW1Ub29sczo6U2V0U3RkZXJyQ2FsbGJhY2soWyZdKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKSB7CisgICAgbXlmb3JtLT5BZGRFcnJvcihjbGVhbk1lc3NhZ2UobWVzc2FnZSksICIiKTsKKyAgfSk7CisgIGNtU3lzdGVtVG9vbHM6OlNldFN0ZG91dENhbGxiYWNrKFsmXShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgeworICAgIG15Zm9ybS0+VXBkYXRlUHJvZ3Jlc3MoY2xlYW5NZXNzYWdlKG1lc3NhZ2UpLCAtMSk7CisgIH0pOwogCiAgIGNtQ3Vyc2VzRm9ybTo6Q3VycmVudEZvcm0gPSBteWZvcm07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNCb29sV2lkZ2V0LmN4eCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNCb29sV2lkZ2V0LmN4eAppbmRleCA5N2IwODExLi5jNGRiZWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQm9vbFdpZGdldC5jeHgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0Jvb2xXaWRnZXQuY3h4CkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8c3RyaW5nPgogCisjaW5jbHVkZSAiY21DdXJzZXNDb2xvci5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzV2lkZ2V0LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAKQEAgLTEyLDggKzEzLDEwIEBACiAgIDogY21DdXJzZXNXaWRnZXQod2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wKQogewogICB0aGlzLT5UeXBlID0gY21TdGF0ZUVudW1zOjpCT09MOwotICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQV9OT1JNQUwpOwotICBzZXRfZmllbGRfYmFjayh0aGlzLT5GaWVsZCwgQV9TVEFORE9VVCk7CisgIGlmICghY21DdXJzZXNDb2xvcjo6SGFzQ29sb3JzKCkpIHsKKyAgICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQV9OT1JNQUwpOworICAgIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBBX1NUQU5ET1VUKTsKKyAgfQogICBmaWVsZF9vcHRzX29mZih0aGlzLT5GaWVsZCwgT19TVEFUSUMpOwogICB0aGlzLT5TZXRWYWx1ZUFzQm9vbChmYWxzZSk7CiB9CkBAIC00Miw4ICs0NSwxNiBAQAogewogICBpZiAodmFsdWUpIHsKICAgICB0aGlzLT5TZXRWYWx1ZSgiT04iKTsKKyAgICBpZiAoY21DdXJzZXNDb2xvcjo6SGFzQ29sb3JzKCkpIHsKKyAgICAgIHNldF9maWVsZF9mb3JlKHRoaXMtPkZpZWxkLCBDT0xPUl9QQUlSKGNtQ3Vyc2VzQ29sb3I6OkJvb2xPbikpOworICAgICAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIENPTE9SX1BBSVIoY21DdXJzZXNDb2xvcjo6Qm9vbE9uKSk7CisgICAgfQogICB9IGVsc2UgewogICAgIHRoaXMtPlNldFZhbHVlKCJPRkYiKTsKKyAgICBpZiAoY21DdXJzZXNDb2xvcjo6SGFzQ29sb3JzKCkpIHsKKyAgICAgIHNldF9maWVsZF9mb3JlKHRoaXMtPkZpZWxkLCBDT0xPUl9QQUlSKGNtQ3Vyc2VzQ29sb3I6OkJvb2xPZmYpKTsKKyAgICAgIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBDT0xPUl9QQUlSKGNtQ3Vyc2VzQ29sb3I6OkJvb2xPZmYpKTsKKyAgICB9CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NhY2hlRW50cnlDb21wb3NpdGUuY3h4IGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NhY2hlRW50cnlDb21wb3NpdGUuY3h4CmluZGV4IDRkMzEzMWIuLjM1ZjA5ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlLmN4eAorKysgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQ2FjaGVFbnRyeUNvbXBvc2l0ZS5jeHgKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlICJjbUN1cnNlc1BhdGhXaWRnZXQuaCIKICNpbmNsdWRlICJjbUN1cnNlc1N0cmluZ1dpZGdldC5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzV2lkZ2V0LmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTQ4LDQyICs0OSw0MiBAQAogICAgIHRoaXMtPklzTmV3TGFiZWwgPSBjbTo6bWFrZV91bmlxdWU8Y21DdXJzZXNMYWJlbFdpZGdldD4oMSwgMSwgMSwgMSwgIiAiKTsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOworICBjbVByb3AgdmFsdWUgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGtleSk7CiAgIGFzc2VydCh2YWx1ZSk7CiAgIHN3aXRjaCAoc3RhdGUtPkdldENhY2hlRW50cnlUeXBlKGtleSkpIHsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6Qk9PTDogewogICAgICAgYXV0byBidyA9IGNtOjptYWtlX3VuaXF1ZTxjbUN1cnNlc0Jvb2xXaWRnZXQ+KHRoaXMtPkVudHJ5V2lkdGgsIDEsIDEsIDEpOwotICAgICAgYnctPlNldFZhbHVlQXNCb29sKGNtSXNPbih2YWx1ZSkpOworICAgICAgYnctPlNldFZhbHVlQXNCb29sKGNtSXNPbigqdmFsdWUpKTsKICAgICAgIHRoaXMtPkVudHJ5ID0gc3RkOjptb3ZlKGJ3KTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGNtU3RhdGVFbnVtczo6UEFUSDogewogICAgICAgYXV0byBwdyA9IGNtOjptYWtlX3VuaXF1ZTxjbUN1cnNlc1BhdGhXaWRnZXQ+KHRoaXMtPkVudHJ5V2lkdGgsIDEsIDEsIDEpOwotICAgICAgcHctPlNldFN0cmluZyh2YWx1ZSk7CisgICAgICBwdy0+U2V0U3RyaW5nKCp2YWx1ZSk7CiAgICAgICB0aGlzLT5FbnRyeSA9IHN0ZDo6bW92ZShwdyk7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkZJTEVQQVRIOiB7CiAgICAgICBhdXRvIGZwdyA9CiAgICAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbUN1cnNlc0ZpbGVQYXRoV2lkZ2V0Pih0aGlzLT5FbnRyeVdpZHRoLCAxLCAxLCAxKTsKLSAgICAgIGZwdy0+U2V0U3RyaW5nKHZhbHVlKTsKKyAgICAgIGZwdy0+U2V0U3RyaW5nKCp2YWx1ZSk7CiAgICAgICB0aGlzLT5FbnRyeSA9IHN0ZDo6bW92ZShmcHcpOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVFJJTkc6IHsKLSAgICAgIGNvbnN0IGNoYXIqIHN0cmluZ3NQcm9wID0gc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShrZXksICJTVFJJTkdTIik7CisgICAgICBjbVByb3Agc3RyaW5nc1Byb3AgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgIlNUUklOR1MiKTsKICAgICAgIGlmIChzdHJpbmdzUHJvcCkgewogICAgICAgICBhdXRvIG93ID0KICAgICAgICAgICBjbTo6bWFrZV91bmlxdWU8Y21DdXJzZXNPcHRpb25zV2lkZ2V0Pih0aGlzLT5FbnRyeVdpZHRoLCAxLCAxLCAxKTsKLSAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb3B0IDogY21FeHBhbmRlZExpc3Qoc3RyaW5nc1Byb3ApKSB7CisgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG9wdCA6IGNtRXhwYW5kZWRMaXN0KCpzdHJpbmdzUHJvcCkpIHsKICAgICAgICAgICBvdy0+QWRkT3B0aW9uKG9wdCk7CiAgICAgICAgIH0KLSAgICAgICAgb3ctPlNldE9wdGlvbih2YWx1ZSk7CisgICAgICAgIG93LT5TZXRPcHRpb24oKnZhbHVlKTsKICAgICAgICAgdGhpcy0+RW50cnkgPSBzdGQ6Om1vdmUob3cpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBzdyA9CiAgICAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtQ3Vyc2VzU3RyaW5nV2lkZ2V0Pih0aGlzLT5FbnRyeVdpZHRoLCAxLCAxLCAxKTsKLSAgICAgICAgc3ctPlNldFN0cmluZyh2YWx1ZSk7CisgICAgICAgIHN3LT5TZXRTdHJpbmcoKnZhbHVlKTsKICAgICAgICAgdGhpcy0+RW50cnkgPSBzdGQ6Om1vdmUoc3cpOwogICAgICAgfQogICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzQ29sb3IuY3h4IGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI0NjhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmN4eApAQCAtMCwwICsxLDc4IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaW5jbHVkZSAiY21DdXJzZXNDb2xvci5oIgorCisjaW5jbHVkZSA8Y2N0eXBlPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlICJjbUN1cnNlc1N0YW5kYXJkSW5jbHVkZXMuaCIKKworYm9vbCBjbUN1cnNlc0NvbG9yOjpIYXNDb2xvcnMoKQoreworI2lmZGVmIEhBVkVfQ1VSU0VTX1VTRV9ERUZBVUxUX0NPTE9SUworICByZXR1cm4gaGFzX2NvbG9ycygpOworI2Vsc2UKKyAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgY21DdXJzZXNDb2xvcjo6SW5pdENvbG9ycygpCit7CisjaWZkZWYgSEFWRV9DVVJTRVNfVVNFX0RFRkFVTFRfQ09MT1JTCisgIGlmIChIYXNDb2xvcnMoKSkgeworICAgIHN0YXJ0X2NvbG9yKCk7CisgICAgdXNlX2RlZmF1bHRfY29sb3JzKCk7CisgICAgaW5pdF9wYWlyKEJvb2xPZmYsIEdldENvbG9yKCdOJywgQ09MT1JfUkVEKSwgLTEpOworICAgIGluaXRfcGFpcihCb29sT24sIEdldENvbG9yKCdZJywgQ09MT1JfR1JFRU4pLCAtMSk7CisgICAgaW5pdF9wYWlyKFN0cmluZywgR2V0Q29sb3IoJ1MnLCBDT0xPUl9DWUFOKSwgLTEpOworICAgIGluaXRfcGFpcihQYXRoLCBHZXRDb2xvcignUCcsIENPTE9SX1lFTExPVyksIC0xKTsKKyAgICBpbml0X3BhaXIoQ2hvaWNlLCBHZXRDb2xvcignQycsIENPTE9SX01BR0VOVEEpLCAtMSk7CisgIH0KKyNlbmRpZgorfQorCitzaG9ydCBjbUN1cnNlc0NvbG9yOjpHZXRDb2xvcihjaGFyIGlkLCBzaG9ydCBmYWxsYmFjaykKK3sKKyAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxjaGFyLCBzaG9ydD4gZW52OworCisgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICBpZiAoYXV0byogdiA9IGdldGVudigiQ0NNQUtFX0NPTE9SUyIpKSB7CisgICAgICB3aGlsZSAodlswXSAmJiB2WzFdICYmIHZbMV0gPT0gJz0nKSB7CisgICAgICAgIGF1dG8gY29uc3QgbiA9IHN0ZDo6dG91cHBlcigqdik7CisKKyAgICAgICAgY2hhciBidWZmZXJbMTJdOworICAgICAgICBtZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgICAgICAgaWYgKGF1dG8qIGNvbnN0IGUgPSBzdHJjaHIodiwgJzonKSkgeworICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGUgLSB2KSA+IHNpemVvZihidWZmZXIpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzdHJuY3B5KGJ1ZmZlciwgdiArIDIsIHN0YXRpY19jYXN0PHNpemVfdD4oZSAtIHYgLSAyKSk7CisgICAgICAgICAgdiA9IGUgKyAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGF1dG8gY29uc3QgbCA9IHN0cmxlbih2KTsKKyAgICAgICAgICBpZiAobCA+IHNpemVvZihidWZmZXIpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzdHJuY3B5KGJ1ZmZlciwgdiArIDIsIGwgLSAyKTsKKyAgICAgICAgICB2ICs9IGw7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNvbnN0IGMgPSBhdG9pKGJ1ZmZlcik7CisgICAgICAgIGlmIChjICYmIGMgPCBDT0xPUlMpIHsKKyAgICAgICAgICBlbnYuZW1wbGFjZShuLCBzdGF0aWNfY2FzdDxzaG9ydD4oYykpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgfQorCisgIGF1dG8gY29uc3QgaXRlciA9IGVudi5maW5kKGlkKTsKKyAgcmV0dXJuIChpdGVyID09IGVudi5lbmQoKSA/IGZhbGxiYWNrIDogaXRlci0+c2Vjb25kKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDb2xvci5oIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0NvbG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzMjY1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNDb2xvci5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21DdXJzZXNDb2xvcl9oCisjZGVmaW5lIGNtQ3Vyc2VzQ29sb3JfaAorCitjbGFzcyBjbUN1cnNlc0NvbG9yCit7CitwdWJsaWM6CisgIGVudW0gQ29sb3IKKyAgeworICAgIC8vIERlZmF1bHQgY29sb3IgaXMgcGFpciAwCisgICAgQm9vbE9mZiA9IDEsCisgICAgQm9vbE9uLAorICAgIFN0cmluZywKKyAgICBQYXRoLAorICAgIENob2ljZQorICB9OworCisgIHN0YXRpYyBib29sIEhhc0NvbG9ycygpOworCisgIHN0YXRpYyB2b2lkIEluaXRDb2xvcnMoKTsKKworcHJvdGVjdGVkOgorICBzdGF0aWMgc2hvcnQgR2V0Q29sb3IoY2hhciBpZCwgc2hvcnQgZmFsbGJhY2spOworfTsKKworI2VuZGlmIC8vIGNtQ3Vyc2VzQ29sb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0xvbmdNZXNzYWdlRm9ybS5jeHggYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtLmN4eAppbmRleCBlMmQ4ZDA2Li41OTFjNTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtLmN4eAorKysgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtLmN4eApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlICJjbUN1cnNlc0Zvcm0uaCIKICNpbmNsdWRlICJjbUN1cnNlc01haW5Gb3JtLmgiCiAjaW5jbHVkZSAiY21DdXJzZXNTdGFuZGFyZEluY2x1ZGVzLmgiCisjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21WZXJzaW9uLmgiCiAKIGlubGluZSBpbnQgY3RybChpbnQgeikKQEAgLTE2LDE0ICsxNywxMiBAQAogfQogCiBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybTo6Y21DdXJzZXNMb25nTWVzc2FnZUZvcm0oCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbWVzc2FnZXMsIGNvbnN0IGNoYXIqIHRpdGxlKQorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIG1lc3NhZ2VzLCBjb25zdCBjaGFyKiB0aXRsZSwKKyAgU2Nyb2xsQmVoYXZpb3Igc2Nyb2xsQmVoYXZpb3IpCisgIDogU2Nyb2xsaW5nKHNjcm9sbEJlaGF2aW9yKQogewogICAvLyBBcHBlbmQgYWxsIG1lc3NhZ2VzIGludG8gb24gYmlnIHN0cmluZwotICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBtZXNzYWdlIDogbWVzc2FnZXMpIHsKLSAgICB0aGlzLT5NZXNzYWdlcyArPSBtZXNzYWdlOwotICAgIC8vIEFkZCBvbmUgYmxhbmsgbGluZSBhZnRlciBlYWNoIG1lc3NhZ2UKLSAgICB0aGlzLT5NZXNzYWdlcyArPSAiXG5cbiI7Ci0gIH0KKyAgdGhpcy0+TWVzc2FnZXMgPSBjbUpvaW4obWVzc2FnZXMsICJcbiIpOwogICB0aGlzLT5UaXRsZSA9IHRpdGxlOwogICB0aGlzLT5GaWVsZHNbMF0gPSBudWxscHRyOwogICB0aGlzLT5GaWVsZHNbMV0gPSBudWxscHRyOwpAQCAtMzYsNiArMzUsMjMgQEAKICAgfQogfQogCit2b2lkIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtOjpVcGRhdGVDb250ZW50KHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB0aXRsZSkKK3sKKyAgdGhpcy0+VGl0bGUgPSB0aXRsZTsKKworICBpZiAoIW91dHB1dC5lbXB0eSgpICYmIHRoaXMtPk1lc3NhZ2VzLnNpemUoKSA8IE1BWF9DT05URU5UX1NJWkUpIHsKKyAgICB0aGlzLT5NZXNzYWdlcy5wdXNoX2JhY2soJ1xuJyk7CisgICAgdGhpcy0+TWVzc2FnZXMuYXBwZW5kKG91dHB1dCk7CisgICAgZm9ybV9kcml2ZXIodGhpcy0+Rm9ybSwgUkVRX05FV19MSU5FKTsKKyAgICB0aGlzLT5EcmF3TWVzc2FnZShvdXRwdXQuY19zdHIoKSk7CisgIH0KKworICB0aGlzLT5VcGRhdGVTdGF0dXNCYXIoKTsKKyAgdG91Y2h3aW4oc3Rkc2NyKTsKKyAgcmVmcmVzaCgpOworfQorCiB2b2lkIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtOjpVcGRhdGVTdGF0dXNCYXIoKQogewogICBpbnQgeDsKQEAgLTQ4LDExICs2NCwxMSBAQAogICAgIHNpemUgPSBjbUN1cnNlc01haW5Gb3JtOjpNQVhfV0lEVEggLSAxOwogICB9CiAgIHN0cm5jcHkoYmFyLCB0aGlzLT5UaXRsZS5jX3N0cigpLCBzaXplKTsKLSAgZm9yIChzaXplX3QgaSA9IHNpemUgLSAxOyBpIDwgY21DdXJzZXNNYWluRm9ybTo6TUFYX1dJRFRIOyBpKyspIHsKKyAgZm9yIChzaXplX3QgaSA9IHNpemU7IGkgPCBjbUN1cnNlc01haW5Gb3JtOjpNQVhfV0lEVEg7IGkrKykgewogICAgIGJhcltpXSA9ICcgJzsKICAgfQogICBpbnQgd2lkdGg7Ci0gIGlmICh4IDwgY21DdXJzZXNNYWluRm9ybTo6TUFYX1dJRFRIKSB7CisgIGlmICh4ID49IDAgJiYgeCA8IGNtQ3Vyc2VzTWFpbkZvcm06Ok1BWF9XSURUSCkgewogICAgIHdpZHRoID0geDsKICAgfSBlbHNlIHsKICAgICB3aWR0aCA9IGNtQ3Vyc2VzTWFpbkZvcm06Ok1BWF9XSURUSCAtIDE7CkBAIC04OSw3ICsxMDUsNyBAQAogICAgIHJldHVybjsKICAgfQogICBjaGFyIGZpcnN0TGluZVs1MTJdOwotICBzcHJpbnRmKGZpcnN0TGluZSwgIlByZXNzIFtlXSB0byBleGl0IGhlbHAiKTsKKyAgc3ByaW50ZihmaXJzdExpbmUsICJQcmVzcyBbZV0gdG8gZXhpdCBzY3JlZW4iKTsKIAogICBjaGFyIGZtdF9zW10gPSAiJXMiOwogICBjdXJzZXNfbW92ZSh5IC0gMiwgMCk7CkBAIC0xMTAsMTAgKzEyNiw2IEBACiAgICAgdGhpcy0+Rm9ybSA9IG51bGxwdHI7CiAgIH0KIAotICBjb25zdCBjaGFyKiBtc2cgPSB0aGlzLT5NZXNzYWdlcy5jX3N0cigpOwotCi0gIGN1cnNlc19jbGVhcigpOwotCiAgIGlmICh0aGlzLT5GaWVsZHNbMF0pIHsKICAgICBmcmVlX2ZpZWxkKHRoaXMtPkZpZWxkc1swXSk7CiAgICAgdGhpcy0+RmllbGRzWzBdID0gbnVsbHB0cjsKQEAgLTEyNiw5ICsxMzgsMTggQEAKICAgdGhpcy0+Rm9ybSA9IG5ld19mb3JtKHRoaXMtPkZpZWxkcyk7CiAgIHBvc3RfZm9ybSh0aGlzLT5Gb3JtKTsKIAotICBpbnQgaSA9IDA7CiAgIGZvcm1fZHJpdmVyKHRoaXMtPkZvcm0sIFJFUV9CRUdfRklFTEQpOwotICB3aGlsZSAobXNnW2ldICE9ICdcMCcgJiYgaSA8IDYwMDAwKSB7CisgIHRoaXMtPkRyYXdNZXNzYWdlKHRoaXMtPk1lc3NhZ2VzLmNfc3RyKCkpOworCisgIHRoaXMtPlVwZGF0ZVN0YXR1c0JhcigpOworICB0b3VjaHdpbihzdGRzY3IpOworICByZWZyZXNoKCk7Cit9CisKK3ZvaWQgY21DdXJzZXNMb25nTWVzc2FnZUZvcm06OkRyYXdNZXNzYWdlKGNvbnN0IGNoYXIqIG1zZykgY29uc3QKK3sKKyAgaW50IGkgPSAwOworICB3aGlsZSAobXNnW2ldICE9ICdcMCcgJiYgaSA8IE1BWF9DT05URU5UX1NJWkUpIHsKICAgICBpZiAobXNnW2ldID09ICdcbicgJiYgbXNnW2kgKyAxXSAhPSAnXDAnKSB7CiAgICAgICBmb3JtX2RyaXZlcih0aGlzLT5Gb3JtLCBSRVFfTkVXX0xJTkUpOwogICAgIH0gZWxzZSB7CkBAIC0xMzYsMTIgKzE1NywxMSBAQAogICAgIH0KICAgICBpKys7CiAgIH0KLSAgZm9ybV9kcml2ZXIodGhpcy0+Rm9ybSwgUkVRX0JFR19GSUVMRCk7Ci0KLSAgdGhpcy0+VXBkYXRlU3RhdHVzQmFyKCk7Ci0gIHRoaXMtPlByaW50S2V5cygpOwotICB0b3VjaHdpbihzdGRzY3IpOwotICByZWZyZXNoKCk7CisgIGlmICh0aGlzLT5TY3JvbGxpbmcgPT0gU2Nyb2xsQmVoYXZpb3I6OlNjcm9sbERvd24pIHsKKyAgICBmb3JtX2RyaXZlcih0aGlzLT5Gb3JtLCBSRVFfRU5EX0ZJRUxEKTsKKyAgfSBlbHNlIHsKKyAgICBmb3JtX2RyaXZlcih0aGlzLT5Gb3JtLCBSRVFfQkVHX0ZJRUxEKTsKKyAgfQogfQogCiB2b2lkIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtOjpIYW5kbGVJbnB1dCgpCkBAIC0xNTMsNiArMTczLDcgQEAKICAgY2hhciBkZWJ1Z01lc3NhZ2VbMTI4XTsKIAogICBmb3IgKDs7KSB7CisgICAgdGhpcy0+UHJpbnRLZXlzKCk7CiAgICAgaW50IGtleSA9IGdldGNoKCk7CiAKICAgICBzcHJpbnRmKGRlYnVnTWVzc2FnZSwgIk1lc3NhZ2Ugd2lkZ2V0IGhhbmRsaW5nIGlucHV0LCBrZXk6ICVkIiwga2V5KTsKQEAgLTE3Myw3ICsxOTQsNiBAQAogICAgIH0KIAogICAgIHRoaXMtPlVwZGF0ZVN0YXR1c0JhcigpOwotICAgIHRoaXMtPlByaW50S2V5cygpOwogICAgIHRvdWNod2luKHN0ZHNjcik7CiAgICAgd3JlZnJlc2goc3Rkc2NyKTsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0xvbmdNZXNzYWdlRm9ybS5oIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc0xvbmdNZXNzYWdlRm9ybS5oCmluZGV4IDQyZjljNzEuLmRhOWZlYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNMb25nTWVzc2FnZUZvcm0uaAorKysgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtLmgKQEAgLTE0LDEzICsxNCwyMSBAQAogY2xhc3MgY21DdXJzZXNMb25nTWVzc2FnZUZvcm0gOiBwdWJsaWMgY21DdXJzZXNGb3JtCiB7CiBwdWJsaWM6CisgIGVudW0gY2xhc3MgU2Nyb2xsQmVoYXZpb3IKKyAgeworICAgIE5vU2Nyb2xsLAorICAgIFNjcm9sbERvd24KKyAgfTsKKwogICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybShzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIG1lc3NhZ2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0aXRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRpdGxlLCBTY3JvbGxCZWhhdmlvciBzY3JvbGxCZWhhdmlvcik7CiAgIH5jbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSgpIG92ZXJyaWRlOwogCiAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtIGNvbnN0JikgPSBkZWxldGU7CiAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtJiBvcGVyYXRvcj0oY21DdXJzZXNMb25nTWVzc2FnZUZvcm0gY29uc3QmKSA9IGRlbGV0ZTsKIAorICB2b2lkIFVwZGF0ZUNvbnRlbnQoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCwgc3RkOjpzdHJpbmcgY29uc3QmIHRpdGxlKTsKKwogICAvLyBEZXNjcmlwdGlvbjoKICAgLy8gSGFuZGxlIHVzZXIgaW5wdXQuCiAgIHZvaWQgSGFuZGxlSW5wdXQoKSBvdmVycmlkZTsKQEAgLTQxLDggKzQ5LDEzIEBACiAgIHZvaWQgVXBkYXRlU3RhdHVzQmFyKCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgTUFYX0NPTlRFTlRfU0laRSA9IDYwMDAwOworCisgIHZvaWQgRHJhd01lc3NhZ2UoY29uc3QgY2hhciogbXNnKSBjb25zdDsKKwogICBzdGQ6OnN0cmluZyBNZXNzYWdlczsKICAgc3RkOjpzdHJpbmcgVGl0bGU7CisgIFNjcm9sbEJlaGF2aW9yIFNjcm9sbGluZzsKIAogICBGSUVMRCogRmllbGRzWzJdOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5jeHggYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTWFpbkZvcm0uY3h4CmluZGV4IDZiNzFlOGEuLjZmYzU1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5jeHgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc01haW5Gb3JtLmN4eApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImNtQ3Vyc2VzU3RhbmRhcmRJbmNsdWRlcy5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzU3RyaW5nV2lkZ2V0LmgiCiAjaW5jbHVkZSAiY21DdXJzZXNXaWRnZXQuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtMzQsNiArMzUsNyBAQAogICA6IEFyZ3Moc3RkOjptb3ZlKGFyZ3MpKQogICAsIEluaXRpYWxXaWR0aChpbml0V2lkdGgpCiB7CisgIHRoaXMtPkhhc05vblN0YXR1c091dHB1dHMgPSBmYWxzZTsKICAgdGhpcy0+TnVtYmVyT2ZQYWdlcyA9IDA7CiAgIHRoaXMtPkFkdmFuY2VkTW9kZSA9IGZhbHNlOwogICB0aGlzLT5OdW1iZXJPZlZpc2libGVFbnRyaWVzID0gMDsKQEAgLTE2MCw3ICsxNjIsNyBAQAogICAgIC8vIElmIG5vcm1hbCBtb2RlLCBjb3VudCBvbmx5IG5vbi1hZHZhbmNlZCBlbnRyaWVzCiAgICAgdGhpcy0+TnVtYmVyT2ZWaXNpYmxlRW50cmllcyA9IDA7CiAgICAgZm9yIChjbUN1cnNlc0NhY2hlRW50cnlDb21wb3NpdGUmIGVudHJ5IDogdGhpcy0+RW50cmllcykgewotICAgICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9CisgICAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9CiAgICAgICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlWYWx1ZShlbnRyeS5HZXRWYWx1ZSgpKTsKICAgICAgIGJvb2wgYWR2YW5jZWQgPQogICAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5UHJvcGVydHlBc0Jvb2woCkBAIC0xODEsNyArMTgzLDcgQEAKIAogICAvLyBBc3NpZ24gZmllbGRzCiAgIGZvciAoY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlJiBlbnRyeSA6IHRoaXMtPkVudHJpZXMpIHsKLSAgICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0KKyAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9CiAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoZW50cnkuR2V0VmFsdWUoKSk7CiAgICAgYm9vbCBhZHZhbmNlZCA9CiAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5UHJvcGVydHlBc0Jvb2woCkBAIC0yNDAsNyArMjQyLDcgQEAKICAgICAvLyBJZiBub3JtYWwsIGRpc3BsYXkgb25seSBub24tYWR2YW5jZWQgZW50cmllcwogICAgIHRoaXMtPk51bWJlck9mVmlzaWJsZUVudHJpZXMgPSAwOwogICAgIGZvciAoY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlJiBlbnRyeSA6IHRoaXMtPkVudHJpZXMpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPQorICAgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPQogICAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoZW50cnkuR2V0VmFsdWUoKSk7CiAgICAgICBib29sIGFkdmFuY2VkID0KICAgICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5QXNCb29sKApAQCAtMjU4LDcgKzI2MCw3IEBACiAgICAgYm9vbCBpc05ld1BhZ2U7CiAgICAgaW50IGkgPSAwOwogICAgIGZvciAoY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlJiBlbnRyeSA6IHRoaXMtPkVudHJpZXMpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPQorICAgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPQogICAgICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoZW50cnkuR2V0VmFsdWUoKSk7CiAgICAgICBib29sIGFkdmFuY2VkID0KICAgICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5QXNCb29sKApAQCAtMzIxLDI1ICszMjMsMjUgQEAKICAgICB9IGVsc2UgewogICAgICAgaWYgKHRoaXMtPk9rVG9HZW5lcmF0ZSkgewogICAgICAgICBzcHJpbnRmKGZpcnN0TGluZSwKLSAgICAgICAgICAgICAgICAiUHJlc3MgW2NdIHRvIGNvbmZpZ3VyZSAgICAgICBQcmVzcyBbZ10gdG8gZ2VuZXJhdGUgYW5kIGV4aXQiKTsKKyAgICAgICAgICAgICAgICAiICAgICAgW2xdIFNob3cgbG9nIG91dHB1dCAgIFtjXSBDb25maWd1cmUiCisgICAgICAgICAgICAgICAgIiAgICAgICBbZ10gR2VuZXJhdGUgICAgICAgICIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3ByaW50ZihmaXJzdExpbmUsCi0gICAgICAgICAgICAgICAgIlByZXNzIFtjXSB0byBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisgICAgICAgICAgICAgICAgIiAgICAgIFtsXSBTaG93IGxvZyBvdXRwdXQgICBbY10gQ29uZmlndXJlIgorICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKICAgICAgIH0KICAgICAgIHsKICAgICAgICAgY29uc3QgY2hhciogdG9nZ2xlS2V5SW5zdHJ1Y3Rpb24gPQotICAgICAgICAgICJQcmVzcyBbdF0gdG8gdG9nZ2xlIGFkdmFuY2VkIG1vZGUgKEN1cnJlbnRseSAlcykiOworICAgICAgICAgICIgICAgICBbdF0gVG9nZ2xlIGFkdmFuY2VkIG1vZGUgKGN1cnJlbnRseSAlcykiOwogICAgICAgICBzcHJpbnRmKHRoaXJkTGluZSwgdG9nZ2xlS2V5SW5zdHJ1Y3Rpb24sCi0gICAgICAgICAgICAgICAgdGhpcy0+QWR2YW5jZWRNb2RlID8gIk9uIiA6ICJPZmYiKTsKKyAgICAgICAgICAgICAgICB0aGlzLT5BZHZhbmNlZE1vZGUgPyAib24iIDogIm9mZiIpOwogICAgICAgfQogICAgICAgc3ByaW50ZihzZWNvbmRMaW5lLAotICAgICAgICAgICAgICAiUHJlc3MgW2hdIGZvciBoZWxwICAgICAgICAgICAiCi0gICAgICAgICAgICAgICJQcmVzcyBbcV0gdG8gcXVpdCB3aXRob3V0IGdlbmVyYXRpbmciKTsKKyAgICAgICAgICAgICAgIiAgICAgIFtoXSBIZWxwICAgICAgICAgICAgICBbcV0gUXVpdCB3aXRob3V0IGdlbmVyYXRpbmciKTsKICAgICB9CiAKICAgICBjdXJzZXNfbW92ZSh5IC0gNCwgMCk7Ci0gICAgY2hhciBmbXRbNTEyXSA9Ci0gICAgICAiUHJlc3MgW2VudGVyXSB0byBlZGl0IG9wdGlvbiBQcmVzcyBbZF0gdG8gZGVsZXRlIGFuIGVudHJ5IjsKKyAgICBjaGFyIGZtdFs1MTJdID0gIktleXM6IFtlbnRlcl0gRWRpdCBhbiBlbnRyeSBbZF0gRGVsZXRlIGFuIGVudHJ5IjsKICAgICBpZiAocHJvY2VzcykgewogICAgICAgbWVtc2V0KGZtdCwgJyAnLCA1Nyk7CiAgICAgfQpAQCAtMzY0LDcgKzM2Niw3IEBACiAKIC8vIFByaW50IHRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgZW50cnkgYW5kIHRoZSBDTWFrZSB2ZXJzaW9uCiAvLyBvbiB0aGUgc3RhdHVzIGJhci4gRGVzaWduZWQgZm9yIGEgd2lkdGggb2YgODAgY2hhcnMuCi12b2lkIGNtQ3Vyc2VzTWFpbkZvcm06OlVwZGF0ZVN0YXR1c0Jhcihjb25zdCBjaGFyKiBtZXNzYWdlKQordm9pZCBjbUN1cnNlc01haW5Gb3JtOjpVcGRhdGVTdGF0dXNCYXIoY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBtZXNzYWdlKQogewogICBpbnQgeDsKICAgaW50IHk7CkBAIC0zODUsMTE5ICszODcsOTIgQEAKICAgICByZXR1cm47CiAgIH0KIAotICAvLyBHZXQgdGhlIGtleSBvZiB0aGUgY3VycmVudCBlbnRyeQotICBGSUVMRCogY3VyID0gY3VycmVudF9maWVsZCh0aGlzLT5Gb3JtKTsKLSAgaW50IGZpbmRleCA9IGZpZWxkX2luZGV4KGN1cik7Ci0gIGNtQ3Vyc2VzV2lkZ2V0KiBsYmwgPSBudWxscHRyOwotICBpZiAoZmluZGV4ID49IDApIHsKLSAgICBsYmwgPSByZWludGVycHJldF9jYXN0PGNtQ3Vyc2VzV2lkZ2V0Kj4oCi0gICAgICBmaWVsZF91c2VycHRyKHRoaXMtPkZpZWxkc1tmaW5kZXggLSAyXSkpOwotICB9Ci0gIGNoYXIgaGVscFsxMjhdID0gIiI7Ci0gIGNvbnN0IGNoYXIqIGN1ckZpZWxkID0gIiI7Ci0gIGlmIChsYmwpIHsKLSAgICBjdXJGaWVsZCA9IGxibC0+R2V0VmFsdWUoKTsKKyAgLy8gRmluZCB0aGUgY3VycmVudCBsYWJlbCBpbmRleAorICAvLyBGaWVsZCBhcmUgZ3JvdXBlZCBieSAzLCB0aGUgbGFiZWwgc2hvdWxkIGJlIDIgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGluZGV4CisgIHVzaW5nIHNpemVfdHlwZSA9IGRlY2x0eXBlKHRoaXMtPkZpZWxkcyk6OnNpemVfdHlwZTsKKyAgc2l6ZV90eXBlIGN1cnJlbnRMYWJlbEluZGV4ID0gZmllbGRfaW5kZXgoY3VycmVudF9maWVsZCh0aGlzLT5Gb3JtKSkgLSAyOworCisgIC8vIFVzZSB0aGUgc3RhdHVzIG1lc3NhZ2UgaWYgYW55LCBvdGhlcndpc2Ugam9pbiB0aGUga2V5IGFuZCBoZWxwIHN0cmluZworICBzdGQ6OnN0cmluZyBiYXI7CisgIGlmIChtZXNzYWdlKSB7CisgICAgYmFyID0gKm1lc3NhZ2U7CisgIH0gZWxzZSB7CisgICAgLy8gR2V0IHRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgZW50cnkKKyAgICBjbUN1cnNlc1dpZGdldCogbGFiZWxXaWRnZXQgPSByZWludGVycHJldF9jYXN0PGNtQ3Vyc2VzV2lkZ2V0Kj4oCisgICAgICBmaWVsZF91c2VycHRyKHRoaXMtPkZpZWxkc1tjdXJyZW50TGFiZWxJbmRleF0pKTsKKyAgICBzdGQ6OnN0cmluZyBsYWJlbFZhbHVlID0gbGFiZWxXaWRnZXQtPkdldFZhbHVlKCk7CisgICAgYmFyID0gbGFiZWxWYWx1ZSArICI6ICI7CiAKICAgICAvLyBHZXQgdGhlIGhlbHAgc3RyaW5nIG9mIHRoZSBjdXJyZW50IGVudHJ5CiAgICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgaGVscCBzdHJpbmcKLSAgICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0KLSAgICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlWYWx1ZShjdXJGaWVsZCk7CisgICAgYXV0byBjbWFrZVN0YXRlID0gdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKTsKKyAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9IGNtYWtlU3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShsYWJlbFZhbHVlKTsKICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkgewotICAgICAgY29uc3QgY2hhciogaHMgPSB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoCi0gICAgICAgIGN1ckZpZWxkLCAiSEVMUFNUUklORyIpOwotICAgICAgaWYgKGhzKSB7Ci0gICAgICAgIHN0cm5jcHkoaGVscCwgaHMsIDEyNyk7Ci0gICAgICAgIGhlbHBbMTI3XSA9ICdcMCc7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBoZWxwWzBdID0gMDsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgc3ByaW50ZihoZWxwLCAiICIpOwotICAgIH0KLSAgfQotCi0gIC8vIEpvaW4gdGhlIGtleSwgaGVscCBzdHJpbmcgYW5kIHBhZCB3aXRoIHNwYWNlcwotICAvLyAob3IgdHJ1bmNhdGUpIGFzIG5lY2Vzc2FyeQotICBjaGFyIGJhcltjbUN1cnNlc01haW5Gb3JtOjpNQVhfV0lEVEhdOwotICBzaXplX3QgY3VyRmllbGRMZW4gPSBzdHJsZW4oY3VyRmllbGQpOwotICBzaXplX3QgaGVscExlbiA9IHN0cmxlbihoZWxwKTsKLQotICBzaXplX3Qgd2lkdGggPSBzdGQ6Om1pbjxzaXplX3Q+KHgsIGNtQ3Vyc2VzTWFpbkZvcm06Ok1BWF9XSURUSCk7Ci0KLSAgaWYgKG1lc3NhZ2UpIHsKLSAgICBjdXJGaWVsZCA9IG1lc3NhZ2U7Ci0gICAgY3VyRmllbGRMZW4gPSBzdHJsZW4obWVzc2FnZSk7Ci0gICAgc3RybmNweShiYXIsIGN1ckZpZWxkLCB3aWR0aCk7Ci0gICAgaWYgKGN1ckZpZWxkTGVuIDwgd2lkdGgpIHsKLSAgICAgIG1lbXNldChiYXIgKyBjdXJGaWVsZExlbiwgJyAnLCB3aWR0aCAtIGN1ckZpZWxkTGVuKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgc3RybmNweShiYXIsIGN1ckZpZWxkLCB3aWR0aCk7Ci0gICAgaWYgKGN1ckZpZWxkTGVuIDwgd2lkdGgpIHsKLSAgICAgIGJhcltjdXJGaWVsZExlbl0gPSAnOic7Ci0gICAgICBiYXJbY3VyRmllbGRMZW4gKyAxXSA9ICcgJzsKLSAgICAgIHN0cm5jcHkoYmFyICsgY3VyRmllbGRMZW4gKyAyLCBoZWxwLCB3aWR0aCAtIGN1ckZpZWxkTGVuIC0gMik7Ci0gICAgICBpZiAoY3VyRmllbGRMZW4gKyBoZWxwTGVuICsgMiA8IHdpZHRoKSB7Ci0gICAgICAgIG1lbXNldChiYXIgKyBjdXJGaWVsZExlbiArIGhlbHBMZW4gKyAyLCAnICcsCi0gICAgICAgICAgICAgICB3aWR0aCAtIChjdXJGaWVsZExlbiArIGhlbHBMZW4gKyAyKSk7CisgICAgICBjbVByb3AgaGVscCA9CisgICAgICAgIGNtYWtlU3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShsYWJlbFZhbHVlLCAiSEVMUFNUUklORyIpOworICAgICAgaWYgKGhlbHApIHsKKyAgICAgICAgYmFyICs9ICpoZWxwOwogICAgICAgfQogICAgIH0KICAgfQotCi0gIGJhclt3aWR0aF0gPSAnXDAnOwotCi0gIC8vIERpc3BsYXkgQ01ha2UgdmVyc2lvbiBpbmZvIG9uIHRoZSBuZXh0IGxpbmUKLSAgLy8gV2Ugd2FudCB0byBkaXNwbGF5IHRoaXMgb24gdGhlIHJpZ2h0Ci0gIGNoYXIgdmVyc2lvbltjbUN1cnNlc01haW5Gb3JtOjpNQVhfV0lEVEhdOwotICBjaGFyIHZlcnRtcFsxMjhdOwotICBzcHJpbnRmKHZlcnRtcCwgIkNNYWtlIFZlcnNpb24gJXMiLCBjbVZlcnNpb246OkdldENNYWtlVmVyc2lvbigpKTsKLSAgc2l6ZV90IHNpZGVTcGFjZSA9ICh3aWR0aCAtIHN0cmxlbih2ZXJ0bXApKTsKLSAgbWVtc2V0KHZlcnNpb24sICcgJywgc2lkZVNwYWNlKTsKLSAgc3ByaW50Zih2ZXJzaW9uICsgc2lkZVNwYWNlLCAiJXMiLCB2ZXJ0bXApOwotICB2ZXJzaW9uW3dpZHRoXSA9ICdcMCc7Ci0KLSAgLy8gTm93IHByaW50IGJvdGggbGluZXMKLSAgY2hhciBmbXRfc1tdID0gIiVzIjsKKyAgLy8gUGFkIHdpdGggc3BhY2VzIHRvIGVyYXNlIGFueSBwcmV2aW91cyB0ZXh0LAorICAvLyBvciB0cnVuY2F0ZSBhcyBuZWNlc3NhcnkgdG8gZml0IHRoZSBzY3JlZW4KKyAgYmFyLnJlc2l6ZSh4LCAnICcpOwogICBjdXJzZXNfbW92ZSh5IC0gNSwgMCk7CiAgIGF0dHJvbihBX1NUQU5ET1VUKTsKLSAgcHJpbnR3KGZtdF9zLCBiYXIpOworICBjaGFyIGZtdF9zW10gPSAiJXMiOworICBwcmludHcoZm10X3MsIGJhci5jX3N0cigpKTsKICAgYXR0cm9mZihBX1NUQU5ET1VUKTsKLSAgY3Vyc2VzX21vdmUoeSAtIDQsIDApOwotICBwcmludHcoZm10X3MsIHZlcnNpb24pOworCisgIC8vIEhpZ2hsaWdodCB0aGUgY3VycmVudCBsYWJlbCwgcmVzZXQgb3RoZXJzCisgIC8vIEZpZWxkcyBhcmUgZ3JvdXBlZCBieSAzLCB0aGUgZmlyc3Qgb25lIGJlaW5nIHRoZSBsYWJlbAorICAvLyBzbyBzdGFydCBhdCAwIGFuZCBtb3ZlIHVwIGJ5IDMgYXZvaWRpbmcgdGhlIGxhc3QgbnVsbCBlbnRyeQorICBmb3IgKHNpemVfdHlwZSBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy0+RmllbGRzLnNpemUoKSAtIDE7IGluZGV4ICs9IDMpIHsKKyAgICBib29sIGN1cnJlbnRMYWJlbCA9IGluZGV4ID09IGN1cnJlbnRMYWJlbEluZGV4OworICAgIHNldF9maWVsZF9mb3JlKHRoaXMtPkZpZWxkc1tpbmRleF0sIGN1cnJlbnRMYWJlbCA/IEFfU1RBTkRPVVQgOiBBX05PUk1BTCk7CisgIH0KKworICAvLyBEaXNwbGF5IENNYWtlIHZlcnNpb24gdW5kZXIgdGhlIHN0YXR1cyBiYXIKKyAgLy8gV2Ugd2FudCB0byBkaXNwbGF5IHRoaXMgb24gdGhlIHJpZ2h0CisgIHN0ZDo6c3RyaW5nIHZlcnNpb24gPSAiQ01ha2UgVmVyc2lvbiAiOworICB2ZXJzaW9uICs9IGNtVmVyc2lvbjo6R2V0Q01ha2VWZXJzaW9uKCk7CisgIHZlcnNpb24ucmVzaXplKHN0ZDo6bWluPHN0ZDo6c3RyaW5nOjpzaXplX3R5cGU+KHgsIHZlcnNpb24uc2l6ZSgpKSk7CisgIGN1cnNlc19tb3ZlKHkgLSA0LCB4IC0gc3RhdGljX2Nhc3Q8aW50Pih2ZXJzaW9uLnNpemUoKSkpOworICBwcmludHcoZm10X3MsIHZlcnNpb24uY19zdHIoKSk7CisKICAgcG9zX2Zvcm1fY3Vyc29yKHRoaXMtPkZvcm0pOwogfQogCiB2b2lkIGNtQ3Vyc2VzTWFpbkZvcm06OlVwZGF0ZVByb2dyZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2csIGZsb2F0IHByb2cpCiB7Ci0gIGNoYXIgdG1wWzEwMjRdOwotICBjb25zdCBjaGFyKiBjbXNnID0gdG1wOwogICBpZiAocHJvZyA+PSAwKSB7Ci0gICAgc3ByaW50Zih0bXAsICIlcyAlaSUlIiwgbXNnLmNfc3RyKCksIHN0YXRpY19jYXN0PGludD4oMTAwICogcHJvZykpOworICAgIGNvbnN0ZXhwciBpbnQgcHJvZ3Jlc3NCYXJXaWR0aCA9IDQwOworICAgIGludCBwcm9ncmVzc0JhckNvbXBsZXRlZCA9IHN0YXRpY19jYXN0PGludD4ocHJvZ3Jlc3NCYXJXaWR0aCAqIHByb2cpOworICAgIGludCBwZXJjZW50Q29tcGxldGVkID0gc3RhdGljX2Nhc3Q8aW50PigxMDAgKiBwcm9nKTsKKyAgICB0aGlzLT5MYXN0UHJvZ3Jlc3MgPSAocGVyY2VudENvbXBsZXRlZCA8IDEwMCA/ICIgIiA6ICIiKTsKKyAgICB0aGlzLT5MYXN0UHJvZ3Jlc3MgKz0gKHBlcmNlbnRDb21wbGV0ZWQgPCAxMCA/ICIgIiA6ICIiKTsKKyAgICB0aGlzLT5MYXN0UHJvZ3Jlc3MgKz0gc3RkOjp0b19zdHJpbmcocGVyY2VudENvbXBsZXRlZCkgKyAiJSBbIjsKKyAgICB0aGlzLT5MYXN0UHJvZ3Jlc3MuYXBwZW5kKHByb2dyZXNzQmFyQ29tcGxldGVkLCAnIycpOworICAgIHRoaXMtPkxhc3RQcm9ncmVzcy5hcHBlbmQocHJvZ3Jlc3NCYXJXaWR0aCAtIHByb2dyZXNzQmFyQ29tcGxldGVkLCAnICcpOworICAgIHRoaXMtPkxhc3RQcm9ncmVzcyArPSAiXSAiICsgbXNnICsgIi4uLiI7CisgICAgdGhpcy0+RGlzcGxheU91dHB1dHMoc3RkOjpzdHJpbmcoKSk7CiAgIH0gZWxzZSB7Ci0gICAgY21zZyA9IG1zZy5jX3N0cigpOworICAgIHRoaXMtPk91dHB1dHMuZW1wbGFjZV9iYWNrKG1zZyk7CisgICAgdGhpcy0+RGlzcGxheU91dHB1dHMobXNnKTsKICAgfQotICB0aGlzLT5VcGRhdGVTdGF0dXNCYXIoY21zZyk7Ci0gIHRoaXMtPlByaW50S2V5cygxKTsKLSAgY3Vyc2VzX21vdmUoMSwgMSk7Ci0gIHRvdWNod2luKHN0ZHNjcik7Ci0gIHJlZnJlc2goKTsKIH0KIAogaW50IGNtQ3Vyc2VzTWFpbkZvcm06OkNvbmZpZ3VyZShpbnQgbm9jb25maWd1cmUpCiB7Ci0gIGludCB4aTsKLSAgaW50IHlpOwotICBnZXRtYXh5eChzdGRzY3IsIHlpLCB4aSk7CisgIHRoaXMtPlJlc2V0T3V0cHV0cygpOwogCi0gIGN1cnNlc19tb3ZlKDEsIDEpOwotICB0aGlzLT5VcGRhdGVTdGF0dXNCYXIoIkNvbmZpZ3VyaW5nLCBwbGVhc2Ugd2FpdC4uLiIpOwotICB0aGlzLT5QcmludEtleXMoMSk7Ci0gIHRvdWNod2luKHN0ZHNjcik7Ci0gIHJlZnJlc2goKTsKLSAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+U2V0UHJvZ3Jlc3NDYWxsYmFjaygKLSAgICBbdGhpc10oY29uc3Qgc3RkOjpzdHJpbmcmIG1zZywgZmxvYXQgcHJvZykgewotICAgICAgdGhpcy0+VXBkYXRlUHJvZ3Jlc3MobXNnLCBwcm9nKTsKLSAgICB9KTsKKyAgaWYgKG5vY29uZmlndXJlID09IDApIHsKKyAgICB0aGlzLT5VcGRhdGVQcm9ncmVzcygiQ29uZmlndXJpbmciLCAwKTsKKyAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5TZXRQcm9ncmVzc0NhbGxiYWNrKAorICAgICAgW3RoaXNdKGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2csIGZsb2F0IHByb2cpIHsKKyAgICAgICAgdGhpcy0+VXBkYXRlUHJvZ3Jlc3MobXNnLCBwcm9nKTsKKyAgICAgIH0pOworICB9CiAKICAgLy8gYWx3YXlzIHNhdmUgdGhlIGN1cnJlbnQgZ3VpIHZhbHVlcyB0byBkaXNrCiAgIHRoaXMtPkZpbGxDYWNoZU1hbmFnZXJGcm9tVUkoKTsKQEAgLTUwNSw5ICs0ODAsNiBAQAogICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSk7CiAgIHRoaXMtPkxvYWRDYWNoZShudWxscHRyKTsKIAotICAvLyBHZXQgcmlkIG9mIHByZXZpb3VzIGVycm9ycwotICB0aGlzLT5FcnJvcnMgPSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKTsKLQogICAvLyBydW4gdGhlIGdlbmVyYXRlIHByb2Nlc3MKICAgdGhpcy0+T2tUb0dlbmVyYXRlID0gdHJ1ZTsKICAgaW50IHJldFZhbDsKQEAgLTUyNCw3ICs0OTYsNyBAQAogCiAgIGtleXBhZChzdGRzY3IsIHRydWUpOyAvKiBVc2Uga2V5IHN5bWJvbHMgYXMgS0VZX0RPV04gKi8KIAotICBpZiAocmV0VmFsICE9IDAgfHwgIXRoaXMtPkVycm9ycy5lbXB0eSgpKSB7CisgIGlmIChyZXRWYWwgIT0gMCB8fCB0aGlzLT5IYXNOb25TdGF0dXNPdXRwdXRzKSB7CiAgICAgLy8gc2VlIGlmIHRoZXJlIHdhcyBhbiBlcnJvcgogICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRFcnJvck9jY3VyZWRGbGFnKCkpIHsKICAgICAgIHRoaXMtPk9rVG9HZW5lcmF0ZSA9IGZhbHNlOwpAQCAtNTMyLDExICs1MDQsMTMgQEAKICAgICBpbnQgeHg7CiAgICAgaW50IHl5OwogICAgIGdldG1heHl4KHN0ZHNjciwgeXksIHh4KTsKLSAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSogbXNncyA9Ci0gICAgICBuZXcgY21DdXJzZXNMb25nTWVzc2FnZUZvcm0odGhpcy0+RXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEVycm9yT2NjdXJlZEZsYWcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiRXJyb3JzIG9jY3VycmVkIGR1cmluZyB0aGUgbGFzdCBwYXNzLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIkNNYWtlIHByb2R1Y2VkIHRoZSBmb2xsb3dpbmcgb3V0cHV0LiIpOworICAgIGNvbnN0IGNoYXIqIHRpdGxlID0gIkNvbmZpZ3VyZSBwcm9kdWNlZCB0aGUgZm9sbG93aW5nIG91dHB1dCI7CisgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEVycm9yT2NjdXJlZEZsYWcoKSkgeworICAgICAgdGl0bGUgPSAiQ29uZmlndXJlIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0IjsKKyAgICB9CisgICAgY21DdXJzZXNMb25nTWVzc2FnZUZvcm0qIG1zZ3MgPSBuZXcgY21DdXJzZXNMb25nTWVzc2FnZUZvcm0oCisgICAgICB0aGlzLT5PdXRwdXRzLCB0aXRsZSwKKyAgICAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtOjpTY3JvbGxCZWhhdmlvcjo6U2Nyb2xsRG93bik7CiAgICAgLy8gcmVzZXQgZXJyb3IgY29uZGl0aW9uCiAgICAgY21TeXN0ZW1Ub29sczo6UmVzZXRFcnJvck9jY3VyZWRGbGFnKCk7CiAgICAgQ3VycmVudEZvcm0gPSBtc2dzOwpAQCAtNTQ3LDExICs1MjEsMTMgQEAKICAgICBpZiAocmV0VmFsID09IC0yKSB7CiAgICAgICByZXR1cm4gcmV0VmFsOwogICAgIH0KLSAgICBDdXJyZW50Rm9ybSA9IHRoaXM7Ci0gICAgdGhpcy0+UmVuZGVyKDEsIDEsIHh4LCB5eSk7CiAgIH0KIAogICB0aGlzLT5Jbml0aWFsaXplVUkoKTsKKyAgQ3VycmVudEZvcm0gPSB0aGlzOworICBpbnQgeGk7CisgIGludCB5aTsKKyAgZ2V0bWF4eXgoc3Rkc2NyLCB5aSwgeGkpOwogICB0aGlzLT5SZW5kZXIoMSwgMSwgeGksIHlpKTsKIAogICByZXR1cm4gMDsKQEAgLTU1OSwzMCArNTM1LDIxIEBACiAKIGludCBjbUN1cnNlc01haW5Gb3JtOjpHZW5lcmF0ZSgpCiB7Ci0gIGludCB4aTsKLSAgaW50IHlpOwotICBnZXRtYXh5eChzdGRzY3IsIHlpLCB4aSk7CisgIHRoaXMtPlJlc2V0T3V0cHV0cygpOwogCi0gIGN1cnNlc19tb3ZlKDEsIDEpOwotICB0aGlzLT5VcGRhdGVTdGF0dXNCYXIoIkdlbmVyYXRpbmcsIHBsZWFzZSB3YWl0Li4uIik7Ci0gIHRoaXMtPlByaW50S2V5cygxKTsKLSAgdG91Y2h3aW4oc3Rkc2NyKTsKLSAgcmVmcmVzaCgpOworICB0aGlzLT5VcGRhdGVQcm9ncmVzcygiR2VuZXJhdGluZyIsIDApOwogICB0aGlzLT5DTWFrZUluc3RhbmNlLT5TZXRQcm9ncmVzc0NhbGxiYWNrKAogICAgIFt0aGlzXShjb25zdCBzdGQ6OnN0cmluZyYgbXNnLCBmbG9hdCBwcm9nKSB7CiAgICAgICB0aGlzLT5VcGRhdGVQcm9ncmVzcyhtc2csIHByb2cpOwogICAgIH0pOwogCi0gIC8vIEdldCByaWQgb2YgcHJldmlvdXMgZXJyb3JzCi0gIHRoaXMtPkVycm9ycyA9IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpOwotCiAgIC8vIHJ1biB0aGUgZ2VuZXJhdGUgcHJvY2VzcwogICBpbnQgcmV0VmFsID0gdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2VuZXJhdGUoKTsKIAogICB0aGlzLT5DTWFrZUluc3RhbmNlLT5TZXRQcm9ncmVzc0NhbGxiYWNrKG51bGxwdHIpOwogICBrZXlwYWQoc3Rkc2NyLCB0cnVlKTsgLyogVXNlIGtleSBzeW1ib2xzIGFzIEtFWV9ET1dOICovCiAKLSAgaWYgKHJldFZhbCAhPSAwIHx8ICF0aGlzLT5FcnJvcnMuZW1wdHkoKSkgeworICBpZiAocmV0VmFsICE9IDAgfHwgdGhpcy0+SGFzTm9uU3RhdHVzT3V0cHV0cykgewogICAgIC8vIHNlZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RXJyb3JPY2N1cmVkRmxhZygpKSB7CiAgICAgICB0aGlzLT5Pa1RvR2VuZXJhdGUgPSBmYWxzZTsKQEAgLTU5MiwxMiArNTU5LDEzIEBACiAgICAgaW50IHh4OwogICAgIGludCB5eTsKICAgICBnZXRtYXh5eChzdGRzY3IsIHl5LCB4eCk7Ci0gICAgY29uc3QgY2hhciogdGl0bGUgPSAiTWVzc2FnZXMgZHVyaW5nIGxhc3QgcGFzcy4iOworICAgIGNvbnN0IGNoYXIqIHRpdGxlID0gIkdlbmVyYXRlIHByb2R1Y2VkIHRoZSBmb2xsb3dpbmcgb3V0cHV0IjsKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RXJyb3JPY2N1cmVkRmxhZygpKSB7Ci0gICAgICB0aXRsZSA9ICJFcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHRoZSBsYXN0IHBhc3MuIjsKKyAgICAgIHRpdGxlID0gIkdlbmVyYXRlIGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0IjsKICAgICB9Ci0gICAgY21DdXJzZXNMb25nTWVzc2FnZUZvcm0qIG1zZ3MgPQotICAgICAgbmV3IGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKHRoaXMtPkVycm9ycywgdGl0bGUpOworICAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKiBtc2dzID0gbmV3IGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKAorICAgICAgdGhpcy0+T3V0cHV0cywgdGl0bGUsCisgICAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybTo6U2Nyb2xsQmVoYXZpb3I6OlNjcm9sbERvd24pOwogICAgIEN1cnJlbnRGb3JtID0gbXNnczsKICAgICBtc2dzLT5SZW5kZXIoMSwgMSwgeHgsIHl5KTsKICAgICBtc2dzLT5IYW5kbGVJbnB1dCgpOwpAQCAtNjA2LDExICs1NzQsMTMgQEAKICAgICBpZiAocmV0VmFsID09IC0yKSB7CiAgICAgICByZXR1cm4gcmV0VmFsOwogICAgIH0KLSAgICBDdXJyZW50Rm9ybSA9IHRoaXM7Ci0gICAgdGhpcy0+UmVuZGVyKDEsIDEsIHh4LCB5eSk7CiAgIH0KIAogICB0aGlzLT5Jbml0aWFsaXplVUkoKTsKKyAgQ3VycmVudEZvcm0gPSB0aGlzOworICBpbnQgeGk7CisgIGludCB5aTsKKyAgZ2V0bWF4eXgoc3Rkc2NyLCB5aSwgeGkpOwogICB0aGlzLT5SZW5kZXIoMSwgMSwgeGksIHlpKTsKIAogICByZXR1cm4gMDsKQEAgLTYxOSw3ICs1ODksOSBAQAogdm9pZCBjbUN1cnNlc01haW5Gb3JtOjpBZGRFcnJvcihjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogLyp1bnVzZWQqLykKIHsKLSAgdGhpcy0+RXJyb3JzLmVtcGxhY2VfYmFjayhtZXNzYWdlKTsKKyAgdGhpcy0+T3V0cHV0cy5lbXBsYWNlX2JhY2sobWVzc2FnZSk7CisgIHRoaXMtPkhhc05vblN0YXR1c091dHB1dHMgPSB0cnVlOworICB0aGlzLT5EaXNwbGF5T3V0cHV0cyhtZXNzYWdlKTsKIH0KIAogdm9pZCBjbUN1cnNlc01haW5Gb3JtOjpSZW1vdmVFbnRyeShjb25zdCBjaGFyKiB2YWx1ZSkKQEAgLTY0NiwxMCArNjE4LDEwIEBACiB7CiAgIGZvciAoY21DdXJzZXNDYWNoZUVudHJ5Q29tcG9zaXRlJiBlbnRyeSA6IHRoaXMtPkVudHJpZXMpIHsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY2FjaGVLZXkgPSBlbnRyeS5LZXk7Ci0gICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9CisgICAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPQogICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGNhY2hlS2V5KTsKICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkgewotICAgICAgc3RkOjpzdHJpbmcgb2xkVmFsdWUgPSBleGlzdGluZ1ZhbHVlOworICAgICAgc3RkOjpzdHJpbmcgb2xkVmFsdWUgPSAqZXhpc3RpbmdWYWx1ZTsKICAgICAgIHN0ZDo6c3RyaW5nIG5ld1ZhbHVlID0gZW50cnkuRW50cnktPkdldFZhbHVlKCk7CiAgICAgICBzdGQ6OnN0cmluZyBmaXhlZE9sZFZhbHVlOwogICAgICAgc3RkOjpzdHJpbmcgZml4ZWROZXdWYWx1ZTsKQEAgLTcwNCw3ICs2NzYsNyBAQAogICAgIHRoaXMtPlByaW50S2V5cygpOwogICAgIGlmICh0aGlzLT5TZWFyY2hNb2RlKSB7CiAgICAgICBzdGQ6OnN0cmluZyBzZWFyY2hzdHIgPSAiU2VhcmNoOiAiICsgdGhpcy0+U2VhcmNoU3RyaW5nOwotICAgICAgdGhpcy0+VXBkYXRlU3RhdHVzQmFyKHNlYXJjaHN0ci5jX3N0cigpKTsKKyAgICAgIHRoaXMtPlVwZGF0ZVN0YXR1c0JhcihzZWFyY2hzdHIpOwogICAgICAgdGhpcy0+UHJpbnRLZXlzKDEpOwogICAgICAgY3Vyc2VzX21vdmUoeSAtIDUsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc2VhcmNoc3RyLnNpemUoKSkpOwogICAgICAgLy8gY3Vyc2VzX21vdmUoMSwxKTsKQEAgLTgzMiw5ICs4MDQsOSBAQAogICAgICAgICBjbUN1cnNlc1dpZGdldCogbGJsID0gcmVpbnRlcnByZXRfY2FzdDxjbUN1cnNlc1dpZGdldCo+KAogICAgICAgICAgIGZpZWxkX3VzZXJwdHIodGhpcy0+RmllbGRzW2ZpbmRleCAtIDJdKSk7CiAgICAgICAgIGNvbnN0IGNoYXIqIGN1ckZpZWxkID0gbGJsLT5HZXRWYWx1ZSgpOwotICAgICAgICBjb25zdCBjaGFyKiBoZWxwU3RyaW5nID0gbnVsbHB0cjsKKyAgICAgICAgY21Qcm9wIGhlbHBTdHJpbmcgPSBudWxscHRyOwogCi0gICAgICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPQorICAgICAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9CiAgICAgICAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGN1ckZpZWxkKTsKICAgICAgICAgaWYgKGV4aXN0aW5nVmFsdWUpIHsKICAgICAgICAgICBoZWxwU3RyaW5nID0gdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KApAQCAtODQzLDEzICs4MTUsMTQgQEAKICAgICAgICAgaWYgKGhlbHBTdHJpbmcpIHsKICAgICAgICAgICB0aGlzLT5IZWxwTWVzc2FnZVsxXSA9CiAgICAgICAgICAgICBjbVN0ckNhdCgiQ3VycmVudCBvcHRpb24gaXM6ICIsIGN1ckZpZWxkLCAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgIkhlbHAgc3RyaW5nIGZvciB0aGlzIG9wdGlvbiBpczogIiwgaGVscFN0cmluZywgJ1xuJyk7CisgICAgICAgICAgICAgICAgICAgICAiSGVscCBzdHJpbmcgZm9yIHRoaXMgb3B0aW9uIGlzOiAiLCAqaGVscFN0cmluZywgJ1xuJyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgdGhpcy0+SGVscE1lc3NhZ2VbMV0gPSAiIjsKICAgICAgICAgfQogCi0gICAgICAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKiBtc2dzID0KLSAgICAgICAgICBuZXcgY21DdXJzZXNMb25nTWVzc2FnZUZvcm0odGhpcy0+SGVscE1lc3NhZ2UsICJIZWxwLiIpOworICAgICAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSogbXNncyA9IG5ldyBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSgKKyAgICAgICAgICB0aGlzLT5IZWxwTWVzc2FnZSwgIkhlbHAiLAorICAgICAgICAgIGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtOjpTY3JvbGxCZWhhdmlvcjo6Tm9TY3JvbGwpOwogICAgICAgICBDdXJyZW50Rm9ybSA9IG1zZ3M7CiAgICAgICAgIG1zZ3MtPlJlbmRlcigxLCAxLCB4LCB5KTsKICAgICAgICAgbXNncy0+SGFuZGxlSW5wdXQoKTsKQEAgLTg2MSw3ICs4MzQsOCBAQAogICAgICAgZWxzZSBpZiAoa2V5ID09ICdsJykgewogICAgICAgICBnZXRtYXh5eChzdGRzY3IsIHksIHgpOwogICAgICAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSogbXNncyA9IG5ldyBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybSgKLSAgICAgICAgICB0aGlzLT5FcnJvcnMsICJFcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHRoZSBsYXN0IHBhc3MuIik7CisgICAgICAgICAgdGhpcy0+T3V0cHV0cywgIkNNYWtlIHByb2R1Y2VkIHRoZSBmb2xsb3dpbmcgb3V0cHV0IiwKKyAgICAgICAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybTo6U2Nyb2xsQmVoYXZpb3I6Ok5vU2Nyb2xsKTsKICAgICAgICAgQ3VycmVudEZvcm0gPSBtc2dzOwogICAgICAgICBtc2dzLT5SZW5kZXIoMSwgMSwgeCwgeSk7CiAgICAgICAgIG1zZ3MtPkhhbmRsZUlucHV0KCk7CkBAIC04ODAsMTEgKzg1NCw3IEBACiAgICAgICB9CiAgICAgICAvLyBzd2l0Y2ggYWR2YW5jZWQgb24vb2ZmCiAgICAgICBlbHNlIGlmIChrZXkgPT0gJ3QnKSB7Ci0gICAgICAgIGlmICh0aGlzLT5BZHZhbmNlZE1vZGUpIHsKLSAgICAgICAgICB0aGlzLT5BZHZhbmNlZE1vZGUgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0aGlzLT5BZHZhbmNlZE1vZGUgPSB0cnVlOwotICAgICAgICB9CisgICAgICAgIHRoaXMtPkFkdmFuY2VkTW9kZSA9ICF0aGlzLT5BZHZhbmNlZE1vZGU7CiAgICAgICAgIGdldG1heHl4KHN0ZHNjciwgeSwgeCk7CiAgICAgICAgIHRoaXMtPlJlUG9zdCgpOwogICAgICAgICB0aGlzLT5SZW5kZXIoMSwgMSwgeCwgeSk7CkBAIC0xMDA3LDE1ICs5NzcsNiBAQAogICAgIH0gZWxzZSB7CiAgICAgICBmb3JtX2RyaXZlcih0aGlzLT5Gb3JtLCBSRVFfTkVYVF9GSUVMRCk7CiAgICAgfQotICAgIC8qCi0gICAgY2hhciBidWZmZXJbMTAyNF07Ci0gICAgc3ByaW50ZihidWZmZXIsICJMaW5lOiAlZCAhPSAlZCAvICVkXG4iLCBmaW5kZXgsIGlkeCwKLSAgICB0aGlzLT5OdW1iZXJPZlZpc2libGVFbnRyaWVzKTsKLSAgICB0b3VjaHdpbihzdGRzY3IpOwotICAgIHJlZnJlc2goKTsKLSAgICB0aGlzLT5VcGRhdGVTdGF0dXNCYXIoIGJ1ZmZlciApOwotICAgIHVzbGVlcCgxMDAwMDApOwotICAgICovCiAgICAgY3VyID0gY3VycmVudF9maWVsZCh0aGlzLT5Gb3JtKTsKICAgICBmaW5kZXggPSBmaWVsZF9pbmRleChjdXIpOwogICAgIGlmIChmaW5kZXggPT0gc3RhcnRfaW5kZXgpIHsKQEAgLTEwMjQsNiArOTg1LDMyIEBACiAgIH0KIH0KIAordm9pZCBjbUN1cnNlc01haW5Gb3JtOjpSZXNldE91dHB1dHMoKQoreworICB0aGlzLT5Mb2dGb3JtLnJlc2V0KCk7CisgIHRoaXMtPk91dHB1dHMuY2xlYXIoKTsKKyAgdGhpcy0+SGFzTm9uU3RhdHVzT3V0cHV0cyA9IGZhbHNlOworICB0aGlzLT5MYXN0UHJvZ3Jlc3MuY2xlYXIoKTsKK30KKwordm9pZCBjbUN1cnNlc01haW5Gb3JtOjpEaXNwbGF5T3V0cHV0cyhzdGQ6OnN0cmluZyBjb25zdCYgbmV3T3V0cHV0KQoreworICBpbnQgeGk7CisgIGludCB5aTsKKyAgZ2V0bWF4eXgoc3Rkc2NyLCB5aSwgeGkpOworCisgIGlmIChDdXJyZW50Rm9ybSAhPSB0aGlzLT5Mb2dGb3JtLmdldCgpKSB7CisgICAgYXV0byBuZXdMb2dGb3JtID0gbmV3IGNtQ3Vyc2VzTG9uZ01lc3NhZ2VGb3JtKAorICAgICAgdGhpcy0+T3V0cHV0cywgdGhpcy0+TGFzdFByb2dyZXNzLmNfc3RyKCksCisgICAgICBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybTo6U2Nyb2xsQmVoYXZpb3I6OlNjcm9sbERvd24pOworICAgIEN1cnJlbnRGb3JtID0gbmV3TG9nRm9ybTsKKyAgICB0aGlzLT5Mb2dGb3JtLnJlc2V0KG5ld0xvZ0Zvcm0pOworICAgIHRoaXMtPkxvZ0Zvcm0tPlJlbmRlcigxLCAxLCB4aSwgeWkpOworICB9IGVsc2UgeworICAgIHRoaXMtPkxvZ0Zvcm0tPlVwZGF0ZUNvbnRlbnQobmV3T3V0cHV0LCB0aGlzLT5MYXN0UHJvZ3Jlc3MpOworICB9Cit9CisKIGNvbnN0IGNoYXIqIGNtQ3Vyc2VzTWFpbkZvcm06OnNfQ29uc3RIZWxwTWVzc2FnZSA9CiAgICJDTWFrZSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBhbmQgZ2VuZXJhdGUgYnVpbGQgZmlsZXMgZm9yIHNvZnR3YXJlIHByb2plY3RzLiAiCiAgICJUaGUgYmFzaWMgc3RlcHMgZm9yIGNvbmZpZ3VyaW5nIGEgcHJvamVjdCB3aXRoIGNjbWFrZSBhcmUgYXMgZm9sbG93czpcblxuIgpAQCAtMTA4MCw3ICsxMDY3LDcgQEAKICAgIiBjIDogcHJvY2VzcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB3aXRoIHRoZSBjdXJyZW50IG9wdGlvbnNcbiIKICAgIiBnIDogZ2VuZXJhdGUgYnVpbGQgZmlsZXMgYW5kIGV4aXQsIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlcmUgYXJlIG5vICIKICAgIm5ldyBvcHRpb25zIGFuZCBubyBlcnJvcnMgaGF2ZSBiZWVuIGRldGVjdGVkIGR1cmluZyBsYXN0IGNvbmZpZ3VyYXRpb24uXG4iCi0gICIgbCA6IHNob3dzIGxhc3QgZXJyb3JzXG4iCisgICIgbCA6IHNob3dzIGNtYWtlIG91dHB1dFxuIgogICAiIGQgOiBkZWxldGUgYW4gb3B0aW9uXG4iCiAgICIgdCA6IHRvZ2dsZXMgYWR2YW5jZWQgbW9kZS4gSW4gbm9ybWFsIG1vZGUsIG9ubHkgdGhlIG1vc3QgaW1wb3J0YW50ICIKICAgIm9wdGlvbnMgYXJlIHNob3duLiBJbiBhZHZhbmNlZCBtb2RlLCBhbGwgb3B0aW9ucyBhcmUgc2hvd24uIFdlIHJlY29tbWVuZCAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzTWFpbkZvcm0uaCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5oCmluZGV4IGI4NzY5YjcuLjJlMDZiOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5oCisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNNYWluRm9ybS5oCkBAIC0xMCwxMiArMTAsMTUgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20vb3B0aW9uYWw+CisKICNpbmNsdWRlICJjbUN1cnNlc0NhY2hlRW50cnlDb21wb3NpdGUuaCIKICNpbmNsdWRlICJjbUN1cnNlc0Zvcm0uaCIKICNpbmNsdWRlICJjbUN1cnNlc1N0YW5kYXJkSW5jbHVkZXMuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKIAogY2xhc3MgY21ha2U7CitjbGFzcyBjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybTsKIAogLyoqIFxjbGFzcyBjbUN1cnNlc01haW5Gb3JtCiAgKiBcYnJpZWYgVGhlIG1haW4gcGFnZSBvZiBjY21ha2UKQEAgLTY2LDggKzY5LDggQEAKICAgICogZXhjZXB0aW9uIGlzIGR1cmluZyBhIHJlc2l6ZS4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUKICAgICogc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgc3RhdHVzIGJhci4KICAgICovCi0gIHZvaWQgVXBkYXRlU3RhdHVzQmFyKCkgb3ZlcnJpZGUgeyB0aGlzLT5VcGRhdGVTdGF0dXNCYXIobnVsbHB0cik7IH0KLSAgdmlydHVhbCB2b2lkIFVwZGF0ZVN0YXR1c0Jhcihjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgdm9pZCBVcGRhdGVTdGF0dXNCYXIoKSBvdmVycmlkZSB7IHRoaXMtPlVwZGF0ZVN0YXR1c0JhcihjbTo6bnVsbG9wdCk7IH0KKyAgdm9pZCBVcGRhdGVTdGF0dXNCYXIoY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBtZXNzYWdlKTsKIAogICAvKioKICAgICogRGlzcGxheSBjdXJyZW50IGNvbW1hbmRzIGFuZCB0aGVpciBrZXlzIG9uIHRoZSB0b29sYmFyLiAgVGhpcwpAQCAtMTIyLDEwICsxMjUsMjQgQEAKICAgLy8gSnVtcCB0byB0aGUgY2FjaGUgZW50cnkgd2hvc2UgbmFtZSBtYXRjaGVzIHRoZSBzdHJpbmcuCiAgIHZvaWQgSnVtcFRvQ2FjaGVFbnRyeShjb25zdCBjaGFyKiBzdHIpOwogCisgIC8vIENsZWFyIGFuZCByZXNldCB0aGUgb3V0cHV0IGxvZyBhbmQgc3RhdGUKKyAgdm9pZCBSZXNldE91dHB1dHMoKTsKKworICAvLyBEaXNwbGF5IHRoZSBjdXJyZW50IHByb2dyZXNzIGFuZCBvdXRwdXQKKyAgdm9pZCBEaXNwbGF5T3V0cHV0cyhzdGQ6OnN0cmluZyBjb25zdCYgbmV3T3V0cHV0KTsKKwogICAvLyBDb3BpZXMgb2YgY2FjaGUgZW50cmllcyBzdG9yZWQgaW4gdGhlIHVzZXIgaW50ZXJmYWNlCiAgIHN0ZDo6dmVjdG9yPGNtQ3Vyc2VzQ2FjaGVFbnRyeUNvbXBvc2l0ZT4gRW50cmllczsKLSAgLy8gRXJyb3JzIHByb2R1Y2VkIGR1cmluZyBsYXN0IHJ1biBvZiBjbWFrZQotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gRXJyb3JzOworCisgIC8vIFRoZSBmb3JtIHVzZWQgdG8gZGlzcGxheSBsb2dzIGR1cmluZyBwcm9jZXNzaW5nCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUN1cnNlc0xvbmdNZXNzYWdlRm9ybT4gTG9nRm9ybTsKKyAgLy8gT3V0cHV0IHByb2R1Y2VkIGJ5IHRoZSBsYXN0IHBhc3MKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IE91dHB1dHM7CisgIC8vIERpZCB0aGUgbGFzdCBwYXNzIHByb2R1Y2VkIG91dHB1dHMgb2YgaW50ZXJlc3QgKGVycm9ycywgd2FybmluZ3MsIC4uLikKKyAgYm9vbCBIYXNOb25TdGF0dXNPdXRwdXRzOworICAvLyBMYXN0IHByb2dyZXNzIGJhcgorICBzdGQ6OnN0cmluZyBMYXN0UHJvZ3Jlc3M7CisKICAgLy8gQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gY21ha2UgZWFjaCB0aW1lCiAgIC8vIGl0IGlzIHJ1bgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQXJnczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNPcHRpb25zV2lkZ2V0LmN4eCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNPcHRpb25zV2lkZ2V0LmN4eAppbmRleCBlYjc3M2FkLi44ZGYzMmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzT3B0aW9uc1dpZGdldC5jeHgKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc09wdGlvbnNXaWRnZXQuY3h4CkBAIC0yLDYgKzIsNyBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21DdXJzZXNPcHRpb25zV2lkZ2V0LmgiCiAKKyNpbmNsdWRlICJjbUN1cnNlc0NvbG9yLmgiCiAjaW5jbHVkZSAiY21DdXJzZXNXaWRnZXQuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKIApAQCAtMTUsOCArMTYsMTMgQEAKICAgLy8gdGhlcmUgaXMgbm8gb3B0aW9uIHR5cGUsIGFuZCBzdHJpbmcgdHlwZSBjYXVzZXMgY2NtYWtlIHRvIGNhc3QKICAgLy8gdGhlIHdpZGdldCBpbnRvIGEgc3RyaW5nIHdpZGdldCBhdCBzb21lIHBvaW50LiAgQk9PTCBpcyBzYWZlIGZvcgogICAvLyBub3cuCi0gIHNldF9maWVsZF9mb3JlKHRoaXMtPkZpZWxkLCBBX05PUk1BTCk7Ci0gIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBBX1NUQU5ET1VUKTsKKyAgaWYgKGNtQ3Vyc2VzQ29sb3I6Okhhc0NvbG9ycygpKSB7CisgICAgc2V0X2ZpZWxkX2ZvcmUodGhpcy0+RmllbGQsIENPTE9SX1BBSVIoY21DdXJzZXNDb2xvcjo6Q2hvaWNlKSk7CisgICAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIENPTE9SX1BBSVIoY21DdXJzZXNDb2xvcjo6Q2hvaWNlKSk7CisgIH0gZWxzZSB7CisgICAgc2V0X2ZpZWxkX2ZvcmUodGhpcy0+RmllbGQsIEFfTk9STUFMKTsKKyAgICBzZXRfZmllbGRfYmFjayh0aGlzLT5GaWVsZCwgQV9TVEFORE9VVCk7CisgIH0KICAgZmllbGRfb3B0c19vZmYodGhpcy0+RmllbGQsIE9fU1RBVElDKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc1BhdGhXaWRnZXQuY3h4IGIvU291cmNlL0N1cnNlc0RpYWxvZy9jbUN1cnNlc1BhdGhXaWRnZXQuY3h4CmluZGV4IGJiMzgwOGUuLjhlZDQyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNQYXRoV2lkZ2V0LmN4eAorKysgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzUGF0aFdpZGdldC5jeHgKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlICJjbUN1cnNlc0NvbG9yLmgiCiAjaW5jbHVkZSAiY21DdXJzZXNNYWluRm9ybS5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzU3RyaW5nV2lkZ2V0LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC0xNiw2ICsxNywxMyBAQAogICB0aGlzLT5UeXBlID0gY21TdGF0ZUVudW1zOjpQQVRIOwogICB0aGlzLT5DeWNsZSA9IGZhbHNlOwogICB0aGlzLT5DdXJyZW50SW5kZXggPSAwOworICBpZiAoY21DdXJzZXNDb2xvcjo6SGFzQ29sb3JzKCkpIHsKKyAgICBzZXRfZmllbGRfZm9yZSh0aGlzLT5GaWVsZCwgQ09MT1JfUEFJUihjbUN1cnNlc0NvbG9yOjpQYXRoKSk7CisgICAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIENPTE9SX1BBSVIoY21DdXJzZXNDb2xvcjo6UGF0aCkpOworICB9IGVsc2UgeworICAgIHNldF9maWVsZF9mb3JlKHRoaXMtPkZpZWxkLCBBX05PUk1BTCk7CisgICAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIEFfU1RBTkRPVVQpOworICB9CiB9CiAKIHZvaWQgY21DdXJzZXNQYXRoV2lkZ2V0OjpPblR5cGUoaW50JiBrZXksIGNtQ3Vyc2VzTWFpbkZvcm0qIGZtLCBXSU5ET1cqIHcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2NtQ3Vyc2VzU3RyaW5nV2lkZ2V0LmN4eCBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNTdHJpbmdXaWRnZXQuY3h4CmluZGV4IDYyOTZhZjIuLjQ4MzBkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNTdHJpbmdXaWRnZXQuY3h4CisrKyBiL1NvdXJjZS9DdXJzZXNEaWFsb2cvY21DdXJzZXNTdHJpbmdXaWRnZXQuY3h4CkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8Y3N0ZGlvPgogCisjaW5jbHVkZSAiY21DdXJzZXNDb2xvci5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzRm9ybS5oIgogI2luY2x1ZGUgImNtQ3Vyc2VzTWFpbkZvcm0uaCIKICNpbmNsdWRlICJjbUN1cnNlc1N0YW5kYXJkSW5jbHVkZXMuaCIKQEAgLTIxLDggKzIyLDEzIEBACiB7CiAgIHRoaXMtPkluRWRpdCA9IGZhbHNlOwogICB0aGlzLT5UeXBlID0gY21TdGF0ZUVudW1zOjpTVFJJTkc7Ci0gIHNldF9maWVsZF9mb3JlKHRoaXMtPkZpZWxkLCBBX05PUk1BTCk7Ci0gIHNldF9maWVsZF9iYWNrKHRoaXMtPkZpZWxkLCBBX1NUQU5ET1VUKTsKKyAgaWYgKGNtQ3Vyc2VzQ29sb3I6Okhhc0NvbG9ycygpKSB7CisgICAgc2V0X2ZpZWxkX2ZvcmUodGhpcy0+RmllbGQsIENPTE9SX1BBSVIoY21DdXJzZXNDb2xvcjo6U3RyaW5nKSk7CisgICAgc2V0X2ZpZWxkX2JhY2sodGhpcy0+RmllbGQsIENPTE9SX1BBSVIoY21DdXJzZXNDb2xvcjo6U3RyaW5nKSk7CisgIH0gZWxzZSB7CisgICAgc2V0X2ZpZWxkX2ZvcmUodGhpcy0+RmllbGQsIEFfTk9STUFMKTsKKyAgICBzZXRfZmllbGRfYmFjayh0aGlzLT5GaWVsZCwgQV9TVEFORE9VVCk7CisgIH0KICAgZmllbGRfb3B0c19vZmYodGhpcy0+RmllbGQsIE9fU1RBVElDKTsKIH0KIApAQCAtOTksMTIgKzEwNSwxMCBAQAogICAgIGlmICghdGhpcy0+SW5FZGl0ICYmIChrZXkgIT0gMTAgJiYga2V5ICE9IEtFWV9FTlRFUiAmJiBrZXkgIT0gJ2knKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAvLyBlbnRlciBlZGl0IHdpdGggcmV0dXJuIGFuZCBpICh2aW0gYmluZGluZykKLSAgICBpZiAoIXRoaXMtPkluRWRpdCAmJiAoa2V5ID09IDEwIHx8IGtleSA9PSBLRVlfRU5URVIgfHwga2V5ID09ICdpJykpIHsKLSAgICAgIHRoaXMtPk9uUmV0dXJuKGZtLCB3KTsKLSAgICB9Ci0gICAgLy8gbGVhdmUgZWRpdCB3aXRoIHJldHVybiAoYnV0IG5vdCBpIC0tIG5vdCBhIHRvZ2dsZSkKLSAgICBlbHNlIGlmICh0aGlzLT5JbkVkaXQgJiYgKGtleSA9PSAxMCB8fCBrZXkgPT0gS0VZX0VOVEVSKSkgeworICAgIC8vIHRvZ2dsZSBlZGl0IHdpdGggcmV0dXJuCisgICAgaWYgKChrZXkgPT0gMTAgfHwga2V5ID09IEtFWV9FTlRFUikKKyAgICAgICAgLy8gZW50ZXIgZWRpdCB3aXRoIGkgKGFuZCBub3QtZWRpdCBtb2RlKQorICAgICAgICB8fCAoIXRoaXMtPkluRWRpdCAmJiBrZXkgPT0gJ2knKSkgewogICAgICAgdGhpcy0+T25SZXR1cm4oZm0sIHcpOwogICAgIH0gZWxzZSBpZiAoa2V5ID09IEtFWV9ET1dOIHx8IGtleSA9PSBjdHJsKCduJykgfHwga2V5ID09IEtFWV9VUCB8fAogICAgICAgICAgICAgICAga2V5ID09IGN0cmwoJ3AnKSB8fCBrZXkgPT0gS0VZX05QQUdFIHx8IGtleSA9PSBjdHJsKCdkJykgfHwKZGlmZiAtLWdpdCBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvZm9ybS9mcm1fZHJpdmVyLmMgYi9Tb3VyY2UvQ3Vyc2VzRGlhbG9nL2Zvcm0vZnJtX2RyaXZlci5jCmluZGV4IGU0ZTcyYWEuLjExMmFiMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DdXJzZXNEaWFsb2cvZm9ybS9mcm1fZHJpdmVyLmMKKysrIGIvU291cmNlL0N1cnNlc0RpYWxvZy9mb3JtL2ZybV9kcml2ZXIuYwpAQCAtMjk4Myw3ICsyOTgzLDcgQEAKIHwgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBGSUVMRCAqVXBwZXJfTmVpZ2hib3VyX0ZpZWxkKEZJRUxEICogZmllbGQpCiB8ICAgCiB8ICAgRGVzY3JpcHRpb24gICA6ICBCZWNhdXNlIG9mIHRoZSByb3ctbWFqb3IgbmF0dXJlIG9mIHNvcnRpbmcgdGhlIGZpZWxkcywKLXwgICAgICAgICAgICAgICAgICAgIGl0cyBtb3JlIGRpZmZpY3VsdCB0byBkZWZpbmUgd2hhdHMgdGhlIHVwcGVyIG5laWdoYm91cgorfCAgICAgICAgICAgICAgICAgICAgaXRzIG1vcmUgZGlmZmljdWx0IHRvIGRlZmluZSB3aGF0J3MgdGhlIHVwcGVyIG5laWdoYm91cgogfCAgICAgICAgICAgICAgICAgICAgZmllbGQgcmVhbGx5IG1lYW5zLiBXZSBkZWZpbmUgdGhhdCBpdCBtdXN0IGJlIG9uIGEKIHwgICAgICAgICAgICAgICAgICAgICdwcmV2aW91cycgbGluZSAoY3ljbGljIG9yZGVyISkgYW5kIGlzIHRoZSByaWdodG1vc3QKIHwgICAgICAgICAgICAgICAgICAgIGZpZWxkIGxheWluZyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBnaXZlbiBmaWVsZC4gSWYKQEAgLTMwMzAsNyArMzAzMCw3IEBACiB8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgRklFTEQgKkRvd25fTmVpZ2hib3VyX0ZpZWxkKEZJRUxEICogZmllbGQpCiB8ICAgCiB8ICAgRGVzY3JpcHRpb24gICA6ICBCZWNhdXNlIG9mIHRoZSByb3ctbWFqb3IgbmF0dXJlIG9mIHNvcnRpbmcgdGhlIGZpZWxkcywKLXwgICAgICAgICAgICAgICAgICAgIGl0cyBtb3JlIGRpZmZpY3VsdCB0byBkZWZpbmUgd2hhdHMgdGhlIGRvd24gbmVpZ2hib3VyCit8ICAgICAgICAgICAgICAgICAgICBpdHMgbW9yZSBkaWZmaWN1bHQgdG8gZGVmaW5lIHdoYXQncyB0aGUgZG93biBuZWlnaGJvdXIKIHwgICAgICAgICAgICAgICAgICAgIGZpZWxkIHJlYWxseSBtZWFucy4gV2UgZGVmaW5lIHRoYXQgaXQgbXVzdCBiZSBvbiBhCiB8ICAgICAgICAgICAgICAgICAgICAnbmV4dCcgbGluZSAoY3ljbGljIG9yZGVyISkgYW5kIGlzIHRoZSBsZWZ0bW9zdAogfCAgICAgICAgICAgICAgICAgICAgZmllbGQgbGF5aW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBnaXZlbiBmaWVsZC4gSWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9MZXhlclBhcnNlci8uZ2l0YXR0cmlidXRlcyBiL1NvdXJjZS9MZXhlclBhcnNlci8uZ2l0YXR0cmlidXRlcwppbmRleCBiZjcwMjQ5Li42M2Q5YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvLmdpdGF0dHJpYnV0ZXMKKysrIGIvU291cmNlL0xleGVyUGFyc2VyLy5naXRhdHRyaWJ1dGVzCkBAIC0xNiw0ICsxNiw2IEBACiAvY21Gb3J0cmFuTGV4ZXIuaCAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZAogL2NtRm9ydHJhblBhcnNlci5jeHggICAgICAgICAgICAgICBnZW5lcmF0ZWQKIC9jbUZvcnRyYW5QYXJzZXJUb2tlbnMuaCAgICAgICAgICAgZ2VuZXJhdGVkCisvY21HY2NEZXBmaWxlTGV4ZXIuY3h4ICAgICAgICAgICAgIGdlbmVyYXRlZAorL2NtR2NjRGVwZmlsZUxleGVyLmggICAgICAgICAgICAgICBnZW5lcmF0ZWQKIC9jbUxpc3RGaWxlTGV4ZXIuYyAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IGIvU291cmNlL0xleGVyUGFyc2VyL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eAppbmRleCBhZTdmYjQyLi4zNGRjOGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4CisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgKQEAgLTEsNCArMSw0IEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4zLjIuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuNC4yLiAgKi8KIAogLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKIApAQCAtNDgsNyArNDgsNyBAQAogI2RlZmluZSBZWUJJU09OIDEKIAogLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy4zLjIiCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTcyLDcgKzcyLDcgQEAKIAogCiAvKiBGaXJzdCBwYXJ0IG9mIHVzZXIgcHJvbG9ndWUuICAqLwotI2xpbmUgMSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjMzNyAgKi8KKyNsaW5lIDEgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiCiAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KQEAgLTEzNCw3ICsxMzQsOCBAQAogIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgogI2VuZGlmCiAKLSNsaW5lIDEzOCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MzM3ICAqLworI2xpbmUgMTM4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiCisKICMgaWZuZGVmIFlZX05VTExQVFIKICMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKICMgICBpZiAyMDExMDNMIDw9IF9fY3BsdXNwbHVzCkBAIC0xNTUsOCArMTU2LDggQEAKICMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCiAjZW5kaWYKIAotLyogSW4gYSBmdXR1cmUgcmVsZWFzZSBvZiBCaXNvbiwgdGhpcyBzZWN0aW9uIHdpbGwgYmUgcmVwbGFjZWQKLSAgIGJ5ICNpbmNsdWRlICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlclRva2Vucy5oIi4gICovCisvKiBVc2UgYXBpLmhlYWRlci5pbmNsdWRlIHRvICNpbmNsdWRlIHRoaXMgaGVhZGVyCisgICBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUuICAqLwogI2lmbmRlZiBZWV9DTUNPTU1BTkRBUkdVTUVOVF9ZWV9DTUNPTU1BTkRBUkdVTUVOVFBBUlNFUlRPS0VOU19IX0lOQ0xVREVECiAjIGRlZmluZSBZWV9DTUNPTU1BTkRBUkdVTUVOVF9ZWV9DTUNPTU1BTkRBUkdVTUVOVFBBUlNFUlRPS0VOU19IX0lOQ0xVREVECiAvKiBEZWJ1ZyB0cmFjZXMuICAqLwpAQCAtMzEwLDYgKzMxMSw4IEBACiAjZW5kaWYKIAogCisjZGVmaW5lIFlZX0FTU0VSVChFKSAoKHZvaWQpICgwICYmIChFKSkpCisKICNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKIAogLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwpAQCAtNzAwLDcgKzcwMyw5IEBACiAgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCiAgICAgWVlQUklOVCAoeXlvLCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwogIyBlbmRpZgorICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgogICBZWVVTRSAoeXl0eXBlKTsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECiB9CiAKIApAQCAtMTEzOCw2ICsxMTQzLDggQEAKIHwgeXluZXdzdGF0ZSAtLSBzZXQgY3VycmVudCBzdGF0ZSAodGhlIHRvcCBvZiB0aGUgc3RhY2spIHRvIHl5c3RhdGUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogeXlzZXRzdGF0ZToKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKyAgWVlfQVNTRVJUICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8IFlZTlNUQVRFUyk7CiAgICp5eXNzcCA9ICh5eXR5cGVfaW50MTYpIHl5c3RhdGU7CiAKICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCkBAIC0xMjAwLDggKzEyMDcsNiBAQAogICAgIH0KICNlbmRpZiAvKiAhZGVmaW5lZCB5eW92ZXJmbG93ICYmICFkZWZpbmVkIFlZU1RBQ0tfUkVMT0NBVEUgKi8KIAotICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwotCiAgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCiAgICAgWVlBQ0NFUFQ7CiAKQEAgLTEyNjksNyArMTI3NCw2IEBACiAgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCiAgICorK3l5dnNwID0geXlsdmFsOwogICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLQogICBnb3RvIHl5bmV3c3RhdGU7CiAKIApAQCAtMTMwNCwxOTMgKzEzMDgsMTk0IEBACiAgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKICAgc3dpdGNoICh5eW4pCiAgICAgewotICAgICAgICBjYXNlIDI6Ci0jbGluZSA5OSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisgIGNhc2UgMjoKKyNsaW5lIDk5ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IDA7CiAgICAgeXlHZXRQYXJzZXItPlNldFJlc3VsdCgoeXl2c3BbMF0uc3RyKSk7CiAgIH0KLSNsaW5lIDEzMTQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzE4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOgotI2xpbmUgMTA1ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEwNSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTMyMiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzMjYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ6Ci0jbGluZSAxMDggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTA4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5Db21iaW5lVW5pb25zKCh5eXZzcFstMV0uc3RyKSwgKHl5dnNwWzBdLnN0cikpOwogICB9Ci0jbGluZSAxMzMwICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTMzNCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNToKLSNsaW5lIDExMyAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTMgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5zdHIpID0gMDsKICAgfQotI2xpbmUgMTMzOCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNDIgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDY6Ci0jbGluZSAxMTYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTE2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5Db21iaW5lVW5pb25zKCh5eXZzcFstMV0uc3RyKSwgKHl5dnNwWzBdLnN0cikpOwogICB9Ci0jbGluZSAxMzQ2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM1MCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNzoKLSNsaW5lIDEyMSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjEgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5zdHIpID0gKHl5dnNwWzBdLnN0cik7CiAgIH0KLSNsaW5lIDEzNTQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzU4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OgotI2xpbmUgMTI0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEyNCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTM2MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNjYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDk6Ci0jbGluZSAxMjkgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTI5ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxMzcwICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM3NCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6Ci0jbGluZSAxMzIgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTMyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxMzc4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM4MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE6Ci0jbGluZSAxMzUgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM1ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxMzg2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM5MCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI6Ci0jbGluZSAxMzggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxMzk0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM5OCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM6Ci0jbGluZSAxNDEgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQxICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxNDAyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQwNiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6Ci0jbGluZSAxNDQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogICB9Ci0jbGluZSAxNDEwICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQxNCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU6Ci0jbGluZSAxNDkgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ5ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5FeHBhbmRTcGVjaWFsVmFyaWFibGUoKHl5dnNwWy0yXS5zdHIpLCAoeXl2c3BbLTFdLnN0cikpOwogICB9Ci0jbGluZSAxNDE4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQyMiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY6Ci0jbGluZSAxNTIgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTUyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5FeHBhbmRTcGVjaWFsVmFyaWFibGUoKHl5dnNwWy0yXS5zdHIpLCAoeXl2c3BbLTFdLnN0cikpOwogICB9Ci0jbGluZSAxNDI2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQzMCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6Ci0jbGluZSAxNTUgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU1ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5FeHBhbmRWYXJpYWJsZSgoeXl2c3BbLTFdLnN0cikpOwogICB9Ci0jbGluZSAxNDM0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQzOCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg6Ci0jbGluZSAxNTggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU4ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuc3RyKSA9IHl5R2V0UGFyc2VyLT5FeHBhbmRWYXJpYWJsZUZvckF0KCh5eXZzcFswXS5zdHIpKTsKICAgfQotI2xpbmUgMTQ0MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NDYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE5OgotI2xpbmUgMTYzICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MyAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTQ1MCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NTQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMTY2ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2NiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbLTFdLnN0cik7CiAgIH0KLSNsaW5lIDE0NTggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDYyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMToKLSNsaW5lIDE3MSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNzEgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5zdHIpID0gMDsKICAgfQotI2xpbmUgMTQ2NiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NzAgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIyOgotI2xpbmUgMTc0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSB5eUdldFBhcnNlci0+Q29tYmluZVVuaW9ucygoeXl2c3BbLTFdLnN0ciksICh5eXZzcFswXS5zdHIpKTsKICAgfQotI2xpbmUgMTQ3NCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NzggImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIzOgotI2xpbmUgMTc5ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3OSAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTQ4MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0ODYgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0OgotI2xpbmUgMTgyICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE4MiAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKICAgfQotI2xpbmUgMTQ5MCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0OTQgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogCi0jbGluZSAxNDk0ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ5OCAiY21Db21tYW5kQXJndW1lbnRQYXJzZXIuY3h4IgorCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAgIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBhbmQgdGhhdCByZXF1aXJlcwpAQCAtMTcyMyw3ICsxNzI4LDcgQEAKICNlbmRpZgogICByZXR1cm4geXlyZXN1bHQ7CiB9Ci0jbGluZSAxODcgImNtQ29tbWFuZEFyZ3VtZW50UGFyc2VyLnkiIC8qIHlhY2MuYzoxOTE4ICAqLworI2xpbmUgMTg3ICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlci55IgogCiAvKiBFbmQgb2YgZ3JhbW1hciAqLwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Db21tYW5kQXJndW1lbnRQYXJzZXJUb2tlbnMuaCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUNvbW1hbmRBcmd1bWVudFBhcnNlclRva2Vucy5oCmluZGV4IDU2Yzk3OTQuLjAzM2I4OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUNvbW1hbmRBcmd1bWVudFBhcnNlclRva2Vucy5oCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUNvbW1hbmRBcmd1bWVudFBhcnNlclRva2Vucy5oCkBAIC0xLDQgKzEsNCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjQuMi4gICovCiAKIC8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21EZXBlbmRzSmF2YVBhcnNlci5jeHggYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21EZXBlbmRzSmF2YVBhcnNlci5jeHgKaW5kZXggNmMxZmIyYy4uYjE1MDgyZCAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtRGVwZW5kc0phdmFQYXJzZXIuY3h4CisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbURlcGVuZHNKYXZhUGFyc2VyLmN4eApAQCAtMSw0ICsxLDQgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjMuMi4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy40LjIuICAqLwogCiAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogCkBAIC00OCw3ICs0OCw3IEBACiAjZGVmaW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIzLjMuMiIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIzLjQuMiIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNzIsNyArNzIsNyBAQAogCiAKIC8qIEZpcnN0IHBhcnQgb2YgdXNlciBwcm9sb2d1ZS4gICovCi0jbGluZSAxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzozMzcgICovCisjbGluZSAxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KQEAgLTEyMyw3ICsxMjMsOCBAQAogIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgogI2VuZGlmCiAKLSNsaW5lIDEyNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzozMzcgICovCisjbGluZSAxMjcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgorCiAjIGlmbmRlZiBZWV9OVUxMUFRSCiAjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCiAjICAgaWYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cwpAQCAtMTQ0LDggKzE0NSw4IEBACiAjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQogI2VuZGlmCiAKLS8qIEluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgQmlzb24sIHRoaXMgc2VjdGlvbiB3aWxsIGJlIHJlcGxhY2VkCi0gICBieSAjaW5jbHVkZSAiY21EZXBlbmRzSmF2YVBhcnNlclRva2Vucy5oIi4gICovCisvKiBVc2UgYXBpLmhlYWRlci5pbmNsdWRlIHRvICNpbmNsdWRlIHRoaXMgaGVhZGVyCisgICBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUuICAqLwogI2lmbmRlZiBZWV9DTURFUEVORFNKQVZBX1lZX0NNREVQRU5EU0pBVkFQQVJTRVJUT0tFTlNfSF9JTkNMVURFRAogIyBkZWZpbmUgWVlfQ01ERVBFTkRTSkFWQV9ZWV9DTURFUEVORFNKQVZBUEFSU0VSVE9LRU5TX0hfSU5DTFVERUQKIC8qIERlYnVnIHRyYWNlcy4gICovCkBAIC00ODEsNiArNDgyLDggQEAKICNlbmRpZgogCiAKKyNkZWZpbmUgWVlfQVNTRVJUKEUpICgodm9pZCkgKDAgJiYgKEUpKSkKKwogI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQogCiAvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCkBAIC0xNjg1LDcgKzE2ODgsOSBAQAogICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQogICAgIFlZUFJJTlQgKHl5bywgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKICMgZW5kaWYKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KICAgWVlVU0UgKHl5dHlwZSk7CisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAogfQogCiAKQEAgLTIxMjMsNiArMjEyOCw4IEBACiB8IHl5bmV3c3RhdGUgLS0gc2V0IGN1cnJlbnQgc3RhdGUgKHRoZSB0b3Agb2YgdGhlIHN0YWNrKSB0byB5eXN0YXRlLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5c2V0c3RhdGU6CisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisgIFlZX0FTU0VSVCAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPCBZWU5TVEFURVMpOwogICAqeXlzc3AgPSAoeXl0eXBlX2ludDE2KSB5eXN0YXRlOwogCiAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQpAQCAtMjE4NSw4ICsyMTkyLDYgQEAKICAgICB9CiAjZW5kaWYgLyogIWRlZmluZWQgeXlvdmVyZmxvdyAmJiAhZGVmaW5lZCBZWVNUQUNLX1JFTE9DQVRFICovCiAKLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQogICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQogICAgIFlZQUNDRVBUOwogCkBAIC0yMjU0LDcgKzIyNTksNiBAQAogICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgogICAqKyt5eXZzcCA9IHl5bHZhbDsKICAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECi0KICAgZ290byB5eW5ld3N0YXRlOwogCiAKQEAgLTIyODksMjE1ICsyMjkzLDIxNSBAQAogICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CiAgIHN3aXRjaCAoeXluKQogICAgIHsKLSAgICAgICAgY2FzZSAyOgotI2xpbmUgMTgzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworICBjYXNlIDI6CisjbGluZSAxODMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDIzMDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIzMDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKLSNsaW5lIDE5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjMxMiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjMxNiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0OgotI2xpbmUgMjAwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjAwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyMzIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDU6Ci0jbGluZSAyMDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDIzMzQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIzMzggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKLSNsaW5lIDIxNiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxNiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjM0NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjM0OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3OgotI2xpbmUgMjI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyMzU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzYwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDg6Ci0jbGluZSAyMzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDIzNjcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIzNzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOToKLSNsaW5lIDI0MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjM3OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjM4MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDoKLSNsaW5lIDI0OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjM4OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjM5MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKLSNsaW5lIDI1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjQwMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQwNCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjoKLSNsaW5lIDI2NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjQxMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQxNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKLSNsaW5lIDI3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiB9Ci0jbGluZSAyNDE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0OgotI2xpbmUgMjgwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjgwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKIH0KLSNsaW5lIDI0MjcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0MzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU6Ci0jbGluZSAyODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogfQotI2xpbmUgMjQzNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQzOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjoKLSNsaW5lIDI5MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI5MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiB9Ci0jbGluZSAyNDQzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDQ3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3OgotI2xpbmUgMjk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKIH0KLSNsaW5lIDI0NTEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0NTUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg6Ci0jbGluZSAzMDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogfQotI2xpbmUgMjQ1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQ2MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKLSNsaW5lIDMwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiB9Ci0jbGluZSAyNDY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDcxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMzEwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKIH0KLSNsaW5lIDI0NzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0NzkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE6Ci0jbGluZSAzMTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI0ODYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0OTAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI6Ci0jbGluZSAzMjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI0OTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1MDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjM6Ci0jbGluZSAzMzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcFN0b3JlQ2xhc3MoKHl5dnNwWzBdLnN0cikpOwpAQCAtMjUwNSw0NCArMjUwOSw0NCBAQAogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNTA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTEzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0OgotI2xpbmUgMzQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNTIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1OgotI2xpbmUgMzUyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzUyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNTMxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2OgotI2xpbmUgMzYxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzYxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNTQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI3OgotI2xpbmUgMzY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBTdG9yZUNsYXNzKCh5eXZzcFstMV0uc3RyKSk7CkBAIC0yNTUwLDU2ICsyNTU0LDU2IEBACiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI1NTQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NTggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg6Ci0jbGluZSAzNzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogfQotI2xpbmUgMjU2MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjU2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyOToKLSNsaW5lIDM4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDM4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgICh5eXZhbC5zdHIpID0gKHl5dnNwWzBdLnN0cik7CiB9Ci0jbGluZSAyNTcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwOgotI2xpbmUgMzkyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzkyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAgKHl5dmFsLnN0cikgPSAoeXl2c3BbMF0uc3RyKTsKIH0KLSNsaW5lIDI1ODEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1ODUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMzE6Ci0jbGluZSAzOTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICAoeXl2YWwuc3RyKSA9ICh5eXZzcFswXS5zdHIpOwogfQotI2xpbmUgMjU5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjU5NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMjoKLSNsaW5lIDQwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgICh5eXZhbC5zdHIpID0gKHl5dnNwWzBdLnN0cik7CiB9Ci0jbGluZSAyNTk5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNjAzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzOgotI2xpbmUgNDEyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDEyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAgeXlHZXRQYXJzZXItPkFkZENsYXNzRm91bmQoKHl5dnNwWy0yXS5zdHIpKTsKQEAgLTI2MDcsMTEgKzI2MTEsMTEgQEAKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0yXS5zdHIpKSk7CiAgICh5eXZhbC5zdHIpID0gY29uc3RfY2FzdDxjaGFyKj4oeXlHZXRQYXJzZXItPkdldEN1cnJlbnRDb21iaW5lKCkpOwogfQotI2xpbmUgMjYxMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjYxNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDoKLSNsaW5lIDQyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwU3RvcmVDbGFzcygoeXl2c3BbLTJdLnN0cikpOwpAQCAtMjYyMCwxMSArMjYyNCwxMSBAQAogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNjI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNjI4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDM1OgotI2xpbmUgNDMxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDMxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBTdG9yZUNsYXNzKCh5eXZzcFstMl0uc3RyKSk7CkBAIC0yNjMzLDExOCArMjYzNywxMTggQEAKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjYzNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY0MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNjoKLSNsaW5lIDQ0MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ0MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjY0OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY1MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNzoKLSNsaW5lIDQ1MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjY1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY2MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzODoKLSNsaW5lIDQ1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjY3MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY3NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOToKLSNsaW5lIDQ2NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjY4MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjY4NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MDoKLSNsaW5lIDQ3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI2OTEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2OTUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNDE6Ci0jbGluZSA0ODIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0ODIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI3MDIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI3MDYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNDI6Ci0jbGluZSA0OTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzEyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQzOgotI2xpbmUgNDk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ0OgotI2xpbmUgNTA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjczMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjczNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NToKLSNsaW5lIDUxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjc0NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjc0OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NjoKLSNsaW5lIDUyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50UGFja2FnZSgoeXl2c3BbLTFdLnN0cikpOwpAQCAtMjc1NCwzMyArMjc1OCwzMyBAQAogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ3OgotI2xpbmUgNTMzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTMzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzczICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ4OgotI2xpbmUgNTQxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTQxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAyNzgwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ5OgotI2xpbmUgNTUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAgeXlHZXRQYXJzZXItPkFkZFBhY2thZ2VzSW1wb3J0KCh5eXZzcFstMV0uc3RyKSk7CkBAIC0yNzkwLDExICsyNzk0LDExIEBACiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI3OTQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI3OTggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTA6Ci0jbGluZSA1NjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogICBzdGQ6OnN0cmluZyBzdHIgPSAoeXl2c3BbLTNdLnN0cik7CkBAIC0yODA1LDc3ICsyODA5LDc3IEBACiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4MTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTE6Ci0jbGluZSA1NzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4MjAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4MjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTI6Ci0jbGluZSA1ODMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4MzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4MzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTM6Ci0jbGluZSA1OTEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4NDIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4NDYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTQ6Ci0jbGluZSA2MDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4NTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4NTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTU6Ci0jbGluZSA2MDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDI4NjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4NjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjc6Ci0jbGluZSA2MjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIHl5R2V0UGFyc2VyLT5TdGFydENsYXNzKCh5eXZzcFswXS5zdHIpKTsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFswXS5zdHIpKSk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKIH0KLSNsaW5lIDI4NzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI4NzkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjg6Ci0jbGluZSA2MzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC0yODgzLDExICsyODg3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAgIHl5R2V0UGFyc2VyLT5FbmRDbGFzcygpOwogfQotI2xpbmUgMjg4NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjg5MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OToKLSNsaW5lIDY0MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDY0MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTI4OTUsMTEgKzI4OTksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKICAgeXlHZXRQYXJzZXItPkVuZENsYXNzKCk7CiB9Ci0jbGluZSAyODk5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTAzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDcwOgotI2xpbmUgNjUxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjUxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMjkwNywxMSArMjkxMSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogICB5eUdldFBhcnNlci0+RW5kQ2xhc3MoKTsKIH0KLSNsaW5lIDI5MTEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI5MTUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNzE6Ci0jbGluZSA2NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogICBqcENoZWNrRW1wdHkoNCk7CkBAIC0yOTE5LDIyNiArMjkyMywyMjYgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKICAgeXlHZXRQYXJzZXItPkVuZENsYXNzKCk7CiB9Ci0jbGluZSAyOTIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDcyOgotI2xpbmUgNjY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjY5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjkzMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjkzNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3MzoKLSNsaW5lIDY3NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDY3NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk0NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk0OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NDoKLSNsaW5lIDY4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDY4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NToKLSNsaW5lIDY5NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDY5NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk2NiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk3MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NjoKLSNsaW5lIDcwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDcwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk3NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk4MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NzoKLSNsaW5lIDcxMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDcxMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk4OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjk5MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3ODoKLSNsaW5lIDcyMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDcyMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMjk5OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzAwMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3OToKLSNsaW5lIDcyOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDcyOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwMDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwMTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODA6Ci0jbGluZSA3MzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3MzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwMjAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwMjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODE6Ci0jbGluZSA3NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwMzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwMzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODI6Ci0jbGluZSA3NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwNDIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNDYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODM6Ci0jbGluZSA3NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwNTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODQ6Ci0jbGluZSA3NjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwNjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODU6Ci0jbGluZSA3NzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3NzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwNzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwNzkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODY6Ci0jbGluZSA3ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMwODYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMwOTAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgODc6Ci0jbGluZSA3OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA3OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogfQotI2xpbmUgMzA5NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA5OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4ODoKLSNsaW5lIDgwMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgwMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMzEwNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEwOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OToKLSNsaW5lIDgwOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgwOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMzExNiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEyMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MDoKLSNsaW5lIDgxNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgxNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMzEyNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEzMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKLSNsaW5lIDgyNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgyNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogfQotI2xpbmUgMzEzOCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE0MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MjoKLSNsaW5lIDgzNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDgzNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFswXS5zdHIpKSk7CkBAIC0zMTQ2LDc3ICszMTUwLDc3IEBACiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxNTAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxNTQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTM6Ci0jbGluZSA4NDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxNjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxNjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTQ6Ci0jbGluZSA4NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxNzIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxNzYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTU6Ci0jbGluZSA4NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxODMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxODcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTY6Ci0jbGluZSA4NjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMxOTQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMxOTggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6Ci0jbGluZSA4NzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4NzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMyMDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyMDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTg6Ci0jbGluZSA4ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIH0KLSNsaW5lIDMyMTYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyMjAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTk6Ci0jbGluZSA4OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogICBqcENoZWNrRW1wdHkoNCk7CkBAIC0zMjI0LDExICszMjI4LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMyMjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyMzIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAwOgotI2xpbmUgOTAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtMzIzNiwyMiArMzI0MCwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzMjQwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMjQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEwMToKLSNsaW5lIDkxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDkxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzI1MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzI1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDI6Ci0jbGluZSA5MjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5MjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC0zMjU5LDExICszMjYzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMyNjMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyNjcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAzOgotI2xpbmUgOTMwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTMwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0zXS5zdHIpKSk7CkBAIC0zMjcyLDQwICszMjc2LDQwIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMyNzYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMyODAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA0OgotI2xpbmUgOTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKIAogfQotI2xpbmUgMzI4NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzI4OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDU6Ci0jbGluZSA5NDYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5NDYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMyOTYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMzMDAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA3OgotI2xpbmUgOTU3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTU3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKIAogfQotI2xpbmUgMzMwNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzMwOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDg6Ci0jbGluZSA5NjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5NjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC0zMzEzLDExICszMzE3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDMzMTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDMzMjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA5OgotI2xpbmUgOTczICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTczICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzMyNSwxMSArMzMyOSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzMzI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMzMzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExMDoKLSNsaW5lIDk4MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDk4MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTMzMzcsMjAgKzMzNDEsMjAgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM0MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzM0NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTE6Ci0jbGluZSA5OTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5OTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogCiB9Ci0jbGluZSAzMzUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMzU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExMjoKLSNsaW5lIDk5OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDk5OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTMzNTgsMTEgKzMzNjIsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM2MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzM2NiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTM6Ci0jbGluZSAxMDA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTAwOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTMzNzAsMTEgKzMzNzQsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM3NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzM3OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTQ6Ci0jbGluZSAxMDE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTAxOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTMzODIsMTEgKzMzODYsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM4NiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzM5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTU6Ci0jbGluZSAxMDI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTAyOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNCk7CiAgIGpwQ2hlY2tFbXB0eSg0KTsKQEAgLTMzOTQsMTEgKzMzOTgsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzM5OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzQwMiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTY6Ci0jbGluZSAxMDM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTAzOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNSk7CiAgIGpwQ2hlY2tFbXB0eSg1KTsKQEAgLTM0MDYsMTEgKzM0MTAsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgMzQxMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzQxNCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTc6Ci0jbGluZSAxMDQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTA0OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNCk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFstM10uc3RyKSkpOwpAQCAtMzQxOSwxMSArMzQyMywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDIzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExODoKLSNsaW5lIDEwNTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDU5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtMzQzMSwyMiArMzQzNSwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDM5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExOToKLSNsaW5lIDEwNjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyMDoKLSNsaW5lIDEwNzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzQ1NCwxMSArMzQ1OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyMToKLSNsaW5lIDEwODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg1KTsKICAganBDaGVja0VtcHR5KDUpOwpAQCAtMzQ2NiwxMSArMzQ3MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDcwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyMjoKLSNsaW5lIDEwOTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg1KTsKICAganBDaGVja0VtcHR5KDUpOwpAQCAtMzQ3OCwyMiArMzQ4MiwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNDgyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyMzoKLSNsaW5lIDExMDUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICB5eUdldFBhcnNlci0+U3RhcnRDbGFzcygoeXl2c3BbMF0uc3RyKSk7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbMF0uc3RyKSkpOwogICBqcENoZWNrRW1wdHkoMyk7CiB9Ci0jbGluZSAzNDkzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNDk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyNDoKLSNsaW5lIDExMTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzUwMSwyMSArMzUwNSwyMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogICB5eUdldFBhcnNlci0+RW5kQ2xhc3MoKTsKIH0KLSNsaW5lIDM1MDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDM1MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI1OgotI2xpbmUgMTEyMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDExMjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiB9Ci0jbGluZSAzNTE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyNjoKLSNsaW5lIDExMzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTMwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzUyMywxMSArMzUyNywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTMxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyNzoKLSNsaW5lIDExNDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzUzNSwxMSArMzUzOSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTM5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTQzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyODoKLSNsaW5lIDExNDkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTQ5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzU0NywxMSArMzU1MSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTUxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTU1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEyOToKLSNsaW5lIDExNTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTU5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzU1OSwzMyArMzU2MywzMyBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTYzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzMDoKLSNsaW5lIDExNjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzMToKLSNsaW5lIDExNzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTg1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNTg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzMjoKLSNsaW5lIDExODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTg1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzU5MywxMSArMzU5NywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNTk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjAxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzMzoKLSNsaW5lIDExOTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzYwNSwxMSArMzYwOSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjEzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzNDoKLSNsaW5lIDEyMDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzYxNywyMiArMzYyMSwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjIxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjI1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzNToKLSNsaW5lIDEyMTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjEyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjM2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzNjoKLSNsaW5lIDEyMjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjIwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzY0MCwyMiArMzY0NCwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzNzoKLSNsaW5lIDEyMjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjU1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjU5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzODoKLSNsaW5lIDEyMzggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzY2MywxMSArMzY2NywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjcxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzOToKLSNsaW5lIDEyNDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzY3NSwxMSArMzY3OSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjc5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjgzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0MDoKLSNsaW5lIDEyNTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzY4NywxMSArMzY5MSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNjkxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNjk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0MToKLSNsaW5lIDEyNjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzY5OSwxMSArMzcwMywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzAzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzA3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0MjoKLSNsaW5lIDEyNzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjc3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzcxMSwyMiArMzcxNSwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0MzoKLSNsaW5lIDEyODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzMwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0NDoKLSNsaW5lIDEyOTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzczNCwxMSArMzczOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0NToKLSNsaW5lIDEzMDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzc0NiwxMSArMzc1MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0NjoKLSNsaW5lIDEzMTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzEzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzc1OCwxMSArMzc2MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzY2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0NzoKLSNsaW5lIDEzMjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzIyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzc3MCwzMyArMzc3NCwzMyBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0ODoKLSNsaW5lIDEzMzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzMyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzg1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzNzg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE0OToKLSNsaW5lIDEzNDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzNzk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODAwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1MDoKLSNsaW5lIDEzNDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzgwNCwxMSArMzgwOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODEyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1MToKLSNsaW5lIDEzNTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzgxNiwxMSArMzgyMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1MjoKLSNsaW5lIDEzNjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzgyOCwxMSArMzgzMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODM2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1MzoKLSNsaW5lIDEzNzcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzc3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzg0MCwxMSArMzg0NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1NDoKLSNsaW5lIDEzODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzg1MiwxMSArMzg1NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODYwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1NToKLSNsaW5lIDEzOTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzg2NCwxMSArMzg2OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1NjoKLSNsaW5lIDE0MDUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzg3NiwxMSArMzg4MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODgwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1NzoKLSNsaW5lIDE0MTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtMzg4OCwxMSArMzg5MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzODkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzODk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1ODoKLSNsaW5lIDE0MjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtMzkwMCwxMSArMzkwNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTA0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1OToKLSNsaW5lIDE0MzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzkxMiwxMSArMzkxNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2MDoKLSNsaW5lIDE0NDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzkyNCwxMSArMzkyOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTI4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2MToKLSNsaW5lIDE0NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDUyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzkzNiwxMSArMzk0MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2MjoKLSNsaW5lIDE0NjEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDYxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk0OCwxMSArMzk1MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTUyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2MzoKLSNsaW5lIDE0NzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDcwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk2MCwxMSArMzk2NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTY0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2NDoKLSNsaW5lIDE0NzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDc5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk3MiwxMSArMzk3NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTgwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2NToKLSNsaW5lIDE0ODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk4NCwxMSArMzk4OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSAzOTg4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzOTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2NjoKLSNsaW5lIDE0OTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtMzk5NiwxMSArNDAwMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDAwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDA0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2NzoKLSNsaW5lIDE1MDcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTA3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDAwOCwxMSArNDAxMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDEyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2ODoKLSNsaW5lIDE1MTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDAyMCwxMSArNDAyNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDI4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2OToKLSNsaW5lIDE1MjUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTI1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDAzMiwxMSArNDAzNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDM2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDQwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3MDoKLSNsaW5lIDE1MzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA0NCwxMSArNDA0OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDUyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3MToKLSNsaW5lIDE1NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA1NiwxMSArNDA2MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDYwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDY0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3MjoKLSNsaW5lIDE1NTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA2OCwxMSArNDA3MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3MzoKLSNsaW5lIDE1NjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTYyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA4MCwxMSArNDA4NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MDg4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3NDoKLSNsaW5lIDE1NzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTcxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDA5MiwxMSArNDA5NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MDk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTAwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3NToKLSNsaW5lIDE1ODAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTgwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDEwNCwxMSArNDEwOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTEyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3NjoKLSNsaW5lIDE1ODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDExNiwxMSArNDEyMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3NzoKLSNsaW5lIDE1OTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDEyOCwxMSArNDEzMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTM2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3ODoKLSNsaW5lIDE2MDcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjA3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE0MCwxMSArNDE0NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE3OToKLSNsaW5lIDE2MTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE1MiwxMSArNDE1NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTYwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE4MDoKLSNsaW5lIDE2MjUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjI1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE2NCwxMSArNDE2OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE4MToKLSNsaW5lIDE2MzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE3NiwxMSArNDE4MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTgwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE4MjoKLSNsaW5lIDE2NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDE4OCwxMSArNDE5MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0MTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MTk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE4MzoKLSNsaW5lIDE2NTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0yXS5zdHIpKSk7CkBAIC00MjAxLDExICs0MjA1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyMDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyMDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg0OgotI2xpbmUgMTY2NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2NjUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC00MjEzLDExICs0MjE3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyMTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyMjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg1OgotI2xpbmUgMTY3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2NzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC00MjI1LDExICs0MjI5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyMjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyMzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg2OgotI2xpbmUgMTY4NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2ODUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MjM3LDExICs0MjQxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyNDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyNDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg3OgotI2xpbmUgMTY5NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MjQ5LDExICs0MjUzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyNTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyNTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg4OgotI2xpbmUgMTcwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MjYxLDExICs0MjY1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyNjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyNjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg5OgotI2xpbmUgMTcxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MjczLDExICs0Mjc3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyNzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyODEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkwOgotI2xpbmUgMTcyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MjEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00Mjg1LDExICs0Mjg5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQyODkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQyOTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkxOgotI2xpbmUgMTczMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00Mjk3LDExICs0MzAxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzMDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzMDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkyOgotI2xpbmUgMTczOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3MzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00MzA5LDExICs0MzEzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzMTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzMTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTkzOgotI2xpbmUgMTc0OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NDkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogICBqcENoZWNrRW1wdHkoNSk7CkBAIC00MzIxLDExICs0MzI1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzMjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzMjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk0OgotI2xpbmUgMTc1OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDcpOwogICBqcENoZWNrRW1wdHkoNyk7CkBAIC00MzMzLDExICs0MzM3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzMzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzNDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk1OgotI2xpbmUgMTc2OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDcpOwogICBqcENoZWNrRW1wdHkoNyk7CkBAIC00MzQ1LDQwICs0MzQ5LDQwIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQzNDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQzNTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk2OgotI2xpbmUgMTc3OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogCiB9Ci0jbGluZSA0MzU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0MzYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE5NzoKLSNsaW5lIDE3ODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNzg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKIAogfQotI2xpbmUgNDM2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDM3MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTg6Ci0jbGluZSAxNzkyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTc5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDM3OCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDM4MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTk6Ci0jbGluZSAxODAwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgwMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTQzODYsMjIgKzQzOTAsMjIgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDM5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDM5NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDA6Ci0jbGluZSAxODA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgwOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQwMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQwNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDE6Ci0jbGluZSAxODE3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgxNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ0MDksMTEgKzQ0MTMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQxMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQxNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDI6Ci0jbGluZSAxODI3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgyNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ0MjEsMTEgKzQ0MjUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQyNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQyOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDM6Ci0jbGluZSAxODM3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTgzNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTQ0MzMsMTEgKzQ0MzcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQzNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQ0MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDQ6Ci0jbGluZSAxODQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg0NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ0NDUsMTEgKzQ0NDksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQ0OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQ1MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDU6Ci0jbGluZSAxODU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg1NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTQ0NTcsMTEgKzQ0NjEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQ2MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQ2NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDY6Ci0jbGluZSAxODY1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg2NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ0NjksNTggKzQ0NzMsNTggQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDQ3MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDQ3NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDc6Ci0jbGluZSAxODc1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg3NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNSk7CiAKIH0KLSNsaW5lIDQ0ODIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ0ODYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjA4OgotI2xpbmUgMTg4MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE4ODIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogCiB9Ci0jbGluZSA0NDkxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0NDk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOToKLSNsaW5lIDE4ODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxODg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg3KTsKIAogfQotI2xpbmUgNDUwMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDUwNCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMTA6Ci0jbGluZSAxODk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg5NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoOSk7CiAKIH0KLSNsaW5lIDQ1MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1MTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjExOgotI2xpbmUgMTkwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1MjAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1MjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjEyOgotI2xpbmUgMTkxMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MTEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NTI4LDIyICs0NTMyLDIyIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1MzIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1MzYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjEzOgotI2xpbmUgMTkyMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1NDMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1NDcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE0OgotI2xpbmUgMTkyOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NTUxLDMzICs0NTU1LDMzIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1NTUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1NTkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE1OgotI2xpbmUgMTkzOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5MzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDkpOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1NjYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1NzAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE2OgotI2xpbmUgMTk0NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5NDcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDApOwogICAoeXl2YWwuc3RyKSA9IDA7CiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1NzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1ODEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE3OgotI2xpbmUgMTk1NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5NTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NTg1LDExICs0NTg5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ1ODkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ1OTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE4OgotI2xpbmUgMTk2NSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5NjUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NTk3LDExICs0NjAxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2MDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2MDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE5OgotI2xpbmUgMTk3NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5NzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NjA5LDExICs0NjEzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2MTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2MTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjIwOgotI2xpbmUgMTk4NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5ODQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NjIxLDExICs0NjI1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2MjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2MjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjIxOgotI2xpbmUgMTk5NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE5OTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00NjMzLDExICs0NjM3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2MzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjIyOgotI2xpbmUgMjAwMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC00NjQ1LDExICs0NjQ5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2NDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjIzOgotI2xpbmUgMjAxMyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC00NjU3LDExICs0NjYxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2NjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI0OgotI2xpbmUgMjAyMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogICBqcENoZWNrRW1wdHkoNSk7CkBAIC00NjY5LDExICs0NjczLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ2NzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ2NzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI1OgotI2xpbmUgMjAzMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbLTFdLnN0cikpKTsKQEAgLTQ2ODIsMzEgKzQ2ODYsMzEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDY4NiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDY5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMjY6Ci0jbGluZSAyMDQyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA0MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMCk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDY5NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDcwMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMjc6Ci0jbGluZSAyMDUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA1MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAKIH0KLSNsaW5lIDQ3MDYgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ3MTAgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI4OgotI2xpbmUgMjA1NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwNTcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbLTFdLnN0cikpKTsKQEAgLTQ3MTUsMTEgKzQ3MTksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDcxOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDcyMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMjk6Ci0jbGluZSAyMDY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA2OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTQ3MjcsMTEgKzQ3MzEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDczMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDczNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzA6Ci0jbGluZSAyMDc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA3OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTQ3MzksMTEgKzQ3NDMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc0MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc0NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzE6Ci0jbGluZSAyMDg4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA4OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNSk7CiAgIGpwQ2hlY2tFbXB0eSg1KTsKQEAgLTQ3NTEsMTEgKzQ3NTUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzI6Ci0jbGluZSAyMDk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA5OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwQ2hlY2tFbXB0eSgzKTsKQEAgLTQ3NjMsMTEgKzQ3NjcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc3MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzM6Ci0jbGluZSAyMTA3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjEwNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNCk7CiAgIGpwQ2hlY2tFbXB0eSg0KTsKQEAgLTQ3NzUsMjIgKzQ3NzksMjIgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc3OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc4MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzQ6Ci0jbGluZSAyMTE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjExNiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgICh5eXZhbC5zdHIpID0gMDsKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDc5MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDc5NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzU6Ci0jbGluZSAyMTI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjEyNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTQ3OTgsMTEgKzQ4MDIsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDgwMiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDgwNiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzY6Ci0jbGluZSAyMTM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjEzNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTQ4MTAsMTEgKzQ4MTQsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDgxNCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDgxOCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzc6Ci0jbGluZSAyMTQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjE0MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMik7CiAgIGpwQ2hlY2tFbXB0eSgyKTsKQEAgLTQ4MjIsMjAgKzQ4MjYsMjAgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNDgyNiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNDgzMCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzg6Ci0jbGluZSAyMTUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjE1MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNSk7CiAKIH0KLSNsaW5lIDQ4MzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4MzkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjM5OgotI2xpbmUgMjE2MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxNjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC00ODQzLDExICs0ODQ3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ4NDcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4NTEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQwOgotI2xpbmUgMjE3MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxNzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00ODU1LDExICs0ODU5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ4NTkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4NjMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQxOgotI2xpbmUgMjE3OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxNzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00ODY3LDExICs0ODcxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ4NzEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4NzUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQyOgotI2xpbmUgMjE4OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC00ODc5LDIwICs0ODgzLDIwIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDQ4ODMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDQ4ODcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjQzOgotI2xpbmUgMjE5OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIxOTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogCiB9Ci0jbGluZSA0ODkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0ODk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0NDoKLSNsaW5lIDIyMDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjA0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNDkwMCwxMSArNDkwNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTA0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0NToKLSNsaW5lIDIyMTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjEzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDkxMiwxMSArNDkxNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTE2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTIwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0NjoKLSNsaW5lIDIyMjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjIyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDkyNCwxMSArNDkyOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTI4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTMyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0NzoKLSNsaW5lIDIyMzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjMxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDkzNiwxMSArNDk0MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTQwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0ODoKLSNsaW5lIDIyNDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDk0OCwxMSArNDk1MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTUyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTU2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI0OToKLSNsaW5lIDIyNTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg2KTsKICAganBDaGVja0VtcHR5KDYpOwpAQCAtNDk2MCwyMiArNDk2NCwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTY0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTY4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1MDoKLSNsaW5lIDIyNTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjU5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTc1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTc5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1MToKLSNsaW5lIDIyNjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNDk4MywyMiArNDk4NywyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTg3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA0OTkxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1MjoKLSNsaW5lIDIyNzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA0OTk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDAyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1MzoKLSNsaW5lIDIyODQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjg0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTAwNiwxMSArNTAxMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDEwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1NDoKLSNsaW5lIDIyOTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMjk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTAxOCwxMSArNTAyMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDIyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1NToKLSNsaW5lIDIzMDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzAzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTAzMCwxMSArNTAzNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1NjoKLSNsaW5lIDIzMTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzEzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtNTA0MiwxMSArNTA0NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1NzoKLSNsaW5lIDIzMjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzIyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtNTA1NCwxMSArNTA1OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1ODoKLSNsaW5lIDIzMzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzMxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtNTA2NiwxMSArNTA3MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDcwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI1OToKLSNsaW5lIDIzNDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzQwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAganBDaGVja0VtcHR5KDQpOwpAQCAtNTA3OCwyMiArNTA4MiwyMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDgyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2MDoKLSNsaW5lIDIzNDkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzQ5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgwKTsKICAgKHl5dmFsLnN0cikgPSAwOwogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MDkzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MDk3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2MToKLSNsaW5lIDIzNTcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzU3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTEwMSwxMSArNTEwNSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTA5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2MjoKLSNsaW5lIDIzNjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTExMywxMSArNTExNywxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTE3ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTIxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2MzoKLSNsaW5lIDIzNzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKICAganBDaGVja0VtcHR5KDIpOwpAQCAtNTEyNSwxMSArNTEyOSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTMzICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2NDoKLSNsaW5lIDIzODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTEzNywyOSArNTE0MSwyOSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTQxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTQ1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2NToKLSNsaW5lIDIzOTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgyKTsKIAogfQotI2xpbmUgNTE1MCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTE1NCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNjY6Ci0jbGluZSAyNDAyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQwMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAKIH0KLSNsaW5lIDUxNTkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUxNjMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjY3OgotI2xpbmUgMjQwOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0MDkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbMF0uc3RyKSkpOwpAQCAtNTE2OCwxMSArNTE3MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MTcyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI2ODoKLSNsaW5lIDI0MTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWzBdLnN0cikpKTsKQEAgLTUxODEsMTEgKzUxODUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTE4NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTE4OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNjk6Ci0jbGluZSAyNDI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQyOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFswXS5zdHIpKSk7CkBAIC01MTk0LDExICs1MTk4LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUxOTggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUyMDIgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjcwOgotI2xpbmUgMjQzOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0MzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbMF0uc3RyKSkpOwpAQCAtNTIwNywxMSArNTIxMSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MjExICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MjE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI3MToKLSNsaW5lIDI0NTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDUwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg0KTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0zXS5zdHIpKSk7CkBAIC01MjIwLDExICs1MjI0LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUyMjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUyMjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjcyOgotI2xpbmUgMjQ2MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0NjAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDYpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbLTVdLnN0cikpKTsKQEAgLTUyMzQsMTEgKzUyMzgsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTIzOCAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTI0MiAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzM6Ci0jbGluZSAyNDcxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjQ3MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNik7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFstM10uc3RyKSkpOwpAQCAtNTI0NywxMSArNTI1MSwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1MjUxICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1MjU1ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI3NDoKLSNsaW5lIDI0ODEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNDgxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg2KTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWy0zXS5zdHIpKSk7CkBAIC01MjYwLDExICs1MjY0LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUyNjQgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUyNjggImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc1OgotI2xpbmUgMjQ5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI0OTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogICB5eUdldFBhcnNlci0+RGVhbGxvY2F0ZVBhcnNlclR5cGUoJigoeXl2c3BbLTNdLnN0cikpKTsKQEAgLTUyNzMsMTEgKzUyNzcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTI3NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTI4MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzY6Ci0jbGluZSAyNTAyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjUwMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoNCk7CiAgIGpwQ2hlY2tFbXB0eSg0KTsKQEAgLTUyODUsMTEgKzUyODksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTI4OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTI5MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzc6Ci0jbGluZSAyNTEyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjUxMiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTUyOTcsMTEgKzUzMDEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTMwMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTMwNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNzg6Ci0jbGluZSAyNTIxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjUyMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIHl5R2V0UGFyc2VyLT5EZWFsbG9jYXRlUGFyc2VyVHlwZSgmKCh5eXZzcFswXS5zdHIpKSk7CkBAIC01MzA5LDExICs1MzEzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzMTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzMTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc5OgotI2xpbmUgMjUzMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1MzAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDMpOwogICBqcENoZWNrRW1wdHkoMyk7CkBAIC01MzIxLDExICs1MzI1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzMjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzMjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjgwOgotI2xpbmUgMjUzOSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1MzkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01MzMzLDExICs1MzM3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzMzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzNDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjgxOgotI2xpbmUgMjU0OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01MzQ1LDExICs1MzQ5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzNDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzNTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjgyOgotI2xpbmUgMjU1OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01MzU3LDExICs1MzYxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzNjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzNjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjgzOgotI2xpbmUgMjU2OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NjggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01MzY5LDExICs1MzczLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzNzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzNzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg0OgotI2xpbmUgMjU3OCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1NzggImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01MzgxLDExICs1Mzg1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzODUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDUzODkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg1OgotI2xpbmUgMjU4NyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1ODcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01MzkzLDExICs1Mzk3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDUzOTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0MDEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg2OgotI2xpbmUgMjU5NiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI1OTYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDA1LDExICs1NDA5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0MTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg3OgotI2xpbmUgMjYwNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2MDUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDE3LDExICs1NDIxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0MjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0MjUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg4OgotI2xpbmUgMjYxNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2MTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01NDI5LDExICs1NDMzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0MzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0MzcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjg5OgotI2xpbmUgMjYyNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2MjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDQxLDExICs1NDQ1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0NDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0NDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjkwOgotI2xpbmUgMjYzNCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2MzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDUzLDExICs1NDU3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0NTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0NjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjkxOgotI2xpbmUgMjY0NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01NDY1LDExICs1NDY5LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0NjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0NzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjkyOgotI2xpbmUgMjY1MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDc3LDExICs1NDgxLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0ODEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0ODUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjkzOgotI2xpbmUgMjY2MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NjIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDIpOwogICBqcENoZWNrRW1wdHkoMik7CkBAIC01NDg5LDExICs1NDkzLDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU0OTMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU0OTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk0OgotI2xpbmUgMjY3MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2NzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDEpOwogICBqcENoZWNrRW1wdHkoMSk7CkBAIC01NTAxLDExICs1NTA1LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU1MDUgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU1MDkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk1OgotI2xpbmUgMjY4MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2ODEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogICBqcENoZWNrRW1wdHkoNSk7CkBAIC01NTEzLDExICs1NTE3LDExIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU1MTcgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU1MjEgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk2OgotI2xpbmUgMjY5MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2OTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDQpOwogICBqcENoZWNrRW1wdHkoNCk7CkBAIC01NTI1LDIwICs1NTI5LDIwIEBACiAgIHl5R2V0UGFyc2VyLT5TZXRDdXJyZW50Q29tYmluZSgiIik7CiAKIH0KLSNsaW5lIDU1MjkgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDU1MzMgImNtRGVwZW5kc0phdmFQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjk3OgotI2xpbmUgMjY5OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDI2OTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKICAgICB7CiAgIGpwRWxlbWVudFN0YXJ0KDUpOwogCiB9Ci0jbGluZSA1NTM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI5ODoKLSNsaW5lIDI3MDYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzA2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTU0NiwxMSArNTU1MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDI5OToKLSNsaW5lIDI3MTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzE1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTU1OCwxMSArNTU2MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTY2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwMDoKLSNsaW5lIDI3MjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTU3MCwxMSArNTU3NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwMToKLSNsaW5lIDI3MzMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzMzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTU4MiwxMSArNTU4NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NTkwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwMjoKLSNsaW5lIDI3NDMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzQzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTU5NCwxMSArNTU5OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NTk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjAyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwMzoKLSNsaW5lIDI3NTIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzUyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTYwNiwxMSArNTYxMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjEwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwNDoKLSNsaW5lIDI3NjEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzYxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTYxOCwxMSArNTYyMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjIyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwNToKLSNsaW5lIDI3NzEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzcxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTYzMCwxMSArNTYzNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwNjoKLSNsaW5lIDI3ODAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzgwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTY0MiwxMSArNTY0NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwNzoKLSNsaW5lIDI3ODkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzg5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTY1NCwxMSArNTY1OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NjYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwODoKLSNsaW5lIDI3OTggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyNzk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTY2NiwxMSArNTY3MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjcwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1Njc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMwOToKLSNsaW5lIDI4MDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTY3OCwxMSArNTY4MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NjgyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1Njg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxMDoKLSNsaW5lIDI4MTcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODE3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTY5MCwxMSArNTY5NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1Njk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1Njk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxMToKLSNsaW5lIDI4MjYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTcwMiwxMSArNTcwNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzA2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzEwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxMjoKLSNsaW5lIDI4MzUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTcxNCwxMSArNTcxOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzE4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzIyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxMzoKLSNsaW5lIDI4NDQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTcyNiwxMSArNTczMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzMwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxNDoKLSNsaW5lIDI4NTMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTczOCwxMSArNTc0MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxNToKLSNsaW5lIDI4NjMgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODYzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTc1MCwxMSArNTc1NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxNjoKLSNsaW5lIDI4NzIgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODcyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTc2MiwxMSArNTc2NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzY2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzcwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxNzoKLSNsaW5lIDI4ODEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODgxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTc3NCwxMSArNTc3OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1Nzc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1NzgyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxODoKLSNsaW5lIDI4OTEgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyODkxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTc4NiwxMSArNTc5MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1NzkwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1Nzk0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMxOToKLSNsaW5lIDI5MDAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTAwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTc5OCwxMSArNTgwMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODAyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODA2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyMDoKLSNsaW5lIDI5MTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTEwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTgxMCwxMSArNTgxNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODE4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyMToKLSNsaW5lIDI5MTkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTE5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTgyMiwxMSArNTgyNiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODMwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyMjoKLSNsaW5lIDI5MjkgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTI5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTgzNCwxMSArNTgzOCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODQyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyMzoKLSNsaW5lIDI5MzggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTg0NiwxMSArNTg1MCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODU0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyNDoKLSNsaW5lIDI5NDggImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTQ4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTg1OCwxMSArNTg2MiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODY2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyNToKLSNsaW5lIDI5NTcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTU3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTg3MCwxMSArNTg3NCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODc0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODc4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyNjoKLSNsaW5lIDI5NjcgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTY3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTg4MiwxMSArNTg4NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1ODkwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyNzoKLSNsaW5lIDI5NzYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTc2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTg5NCwxMSArNTg5OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1ODk4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTAyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyODoKLSNsaW5lIDI5ODYgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTg2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTkwNiwxMSArNTkxMCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTEwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMyOToKLSNsaW5lIDI5OTUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyOTk1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCg1KTsKICAganBDaGVja0VtcHR5KDUpOwpAQCAtNTkxOCwxMSArNTkyMiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTIyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzMDoKLSNsaW5lIDMwMDUgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDA1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTkzMCwxMSArNTkzNCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTM4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzMToKLSNsaW5lIDMwMTQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDE0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAganBDaGVja0VtcHR5KDEpOwpAQCAtNTk0MiwxMSArNTk0NiwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTQ2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTUwICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzMjoKLSNsaW5lIDMwMjQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDI0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgzKTsKICAganBDaGVja0VtcHR5KDMpOwpAQCAtNTk1NCwxMSArNTk1OCwxMSBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA1OTU4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA1OTYyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDMzMzoKLSNsaW5lIDMwMzQgImNtRGVwZW5kc0phdmFQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAzMDM0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiCiAgICAgewogICBqcEVsZW1lbnRTdGFydCgxKTsKICAgeXlHZXRQYXJzZXItPkRlYWxsb2NhdGVQYXJzZXJUeXBlKCYoKHl5dnNwWzBdLnN0cikpKTsKQEAgLTU5NjcsMTEgKzU5NzEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTk3MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTk3NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzQ6Ci0jbGluZSAzMDQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA0NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTU5NzksMTEgKzU5ODMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTk4MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTk4NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzU6Ci0jbGluZSAzMDUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA1MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTU5OTEsMTEgKzU5OTUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNTk5NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNTk5OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzY6Ci0jbGluZSAzMDYzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA2MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwMDMsMTEgKzYwMDcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjAwNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjAxMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzc6Ci0jbGluZSAzMDcyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA3MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwMTUsMTEgKzYwMTksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjAxOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjAyMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzg6Ci0jbGluZSAzMDgxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA4MSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwMjcsMTEgKzYwMzEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjAzMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjAzNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzk6Ci0jbGluZSAzMDkwICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA5MCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwMzksMTEgKzYwNDMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA0MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA0NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDA6Ci0jbGluZSAzMDk5ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzA5OSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwNTEsMTEgKzYwNTUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA1OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDE6Ci0jbGluZSAzMTA4ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEwOCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwNjMsMTEgKzYwNjcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA3MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDI6Ci0jbGluZSAzMTE3ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzExNyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwNzUsMTEgKzYwNzksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA3OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA4MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDM6Ci0jbGluZSAzMTI2ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEyNiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwODcsMTEgKzYwOTEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjA5MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjA5NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDQ6Ci0jbGluZSAzMTM1ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzEzNSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYwOTksMTEgKzYxMDMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjEwMyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjEwNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDU6Ci0jbGluZSAzMTQ0ICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE0NCAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxMTEsMTEgKzYxMTUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjExNSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjExOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDY6Ci0jbGluZSAzMTUzICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE1MyAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxMjMsMTEgKzYxMjcsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjEyNyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjEzMSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDc6Ci0jbGluZSAzMTYyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE2MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxMzUsMTEgKzYxMzksMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjEzOSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjE0MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDg6Ci0jbGluZSAzMTcyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE3MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxNDcsMTEgKzYxNTEsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjE1MSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjE1NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNDk6Ci0jbGluZSAzMTgyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE4MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxNTksMTEgKzYxNjMsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjE2MyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjE2NyAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNTA6Ci0jbGluZSAzMTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzE5MiAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMSk7CiAgIGpwQ2hlY2tFbXB0eSgxKTsKQEAgLTYxNzEsMTEgKzYxNzUsMTEgQEAKICAgeXlHZXRQYXJzZXItPlNldEN1cnJlbnRDb21iaW5lKCIiKTsKIAogfQotI2xpbmUgNjE3NSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgNjE3OSAiY21EZXBlbmRzSmF2YVBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNTE6Ci0jbGluZSAzMjAxICJjbURlcGVuZHNKYXZhUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMzIwMSAiY21EZXBlbmRzSmF2YVBhcnNlci55IgogICAgIHsKICAganBFbGVtZW50U3RhcnQoMyk7CiAgIGpwU3RvcmVDbGFzcygoeXl2c3BbLTJdLnN0cikpOwpAQCAtNjE4NCwxMSArNjE4OCwxMiBAQAogICB5eUdldFBhcnNlci0+U2V0Q3VycmVudENvbWJpbmUoIiIpOwogCiB9Ci0jbGluZSA2MTg4ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogCi0jbGluZSA2MTkyICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA2MTk2ICJjbURlcGVuZHNKYXZhUGFyc2VyLmN4eCIKKwogICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogICAvKiBVc2VyIHNlbWFudGljIGFjdGlvbnMgc29tZXRpbWVzIGFsdGVyIHl5Y2hhciwgYW5kIHRoYXQgcmVxdWlyZXMKQEAgLTY0MjEsNyArNjQyNiw3IEBACiAjZW5kaWYKICAgcmV0dXJuIHl5cmVzdWx0OwogfQotI2xpbmUgMzIxMCAiY21EZXBlbmRzSmF2YVBhcnNlci55IiAvKiB5YWNjLmM6MTkxOCAgKi8KKyNsaW5lIDMyMTAgImNtRGVwZW5kc0phdmFQYXJzZXIueSIKIAogLyogRW5kIG9mIGdyYW1tYXIgKi8KIApkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtRGVwZW5kc0phdmFQYXJzZXJUb2tlbnMuaCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbURlcGVuZHNKYXZhUGFyc2VyVG9rZW5zLmgKaW5kZXggNmJiYzA4NC4uZTBkZmEwMSAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtRGVwZW5kc0phdmFQYXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21EZXBlbmRzSmF2YVBhcnNlclRva2Vucy5oCkBAIC0xLDQgKzEsNCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjQuMi4gICovCiAKIC8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21FeHByUGFyc2VyLmN4eCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUV4cHJQYXJzZXIuY3h4CmluZGV4IDg0MTZlNzIuLjU2MmIzNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUV4cHJQYXJzZXIuY3h4CisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUV4cHJQYXJzZXIuY3h4CkBAIC0xLDQgKzEsNCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjQuMi4gICovCiAKIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCiAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjMuMy4yIgorI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjMuNC4yIgogCiAvKiBTa2VsZXRvbiBuYW1lLiAgKi8KICNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCkBAIC03Miw3ICs3Miw3IEBACiAKIAogLyogRmlyc3QgcGFydCBvZiB1c2VyIHByb2xvZ3VlLiAgKi8KLSNsaW5lIDEgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MzM3ICAqLworI2xpbmUgMSAiY21FeHByUGFyc2VyLnkiCiAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KQEAgLTExNiw3ICsxMTYsOCBAQAogIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgogI2VuZGlmCiAKLSNsaW5lIDEyMCAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjMzNyAgKi8KKyNsaW5lIDEyMCAiY21FeHByUGFyc2VyLmN4eCIKKwogIyBpZm5kZWYgWVlfTlVMTFBUUgogIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cwogIyAgIGlmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKQEAgLTEzNyw4ICsxMzgsOCBAQAogIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKICNlbmRpZgogCi0vKiBJbiBhIGZ1dHVyZSByZWxlYXNlIG9mIEJpc29uLCB0aGlzIHNlY3Rpb24gd2lsbCBiZSByZXBsYWNlZAotICAgYnkgI2luY2x1ZGUgImNtRXhwclBhcnNlclRva2Vucy5oIi4gICovCisvKiBVc2UgYXBpLmhlYWRlci5pbmNsdWRlIHRvICNpbmNsdWRlIHRoaXMgaGVhZGVyCisgICBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGhlcmUuICAqLwogI2lmbmRlZiBZWV9DTUVYUFJfWVlfQ01FWFBSUEFSU0VSVE9LRU5TX0hfSU5DTFVERUQKICMgZGVmaW5lIFlZX0NNRVhQUl9ZWV9DTUVYUFJQQVJTRVJUT0tFTlNfSF9JTkNMVURFRAogLyogRGVidWcgdHJhY2VzLiAgKi8KQEAgLTI5Niw2ICsyOTcsOCBAQAogI2VuZGlmCiAKIAorI2RlZmluZSBZWV9BU1NFUlQoRSkgKCh2b2lkKSAoMCAmJiAoRSkpKQorCiAjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCiAKIC8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KQEAgLTY4OCw3ICs2OTEsOSBAQAogICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQogICAgIFlZUFJJTlQgKHl5bywgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKICMgZW5kaWYKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KICAgWVlVU0UgKHl5dHlwZSk7CisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAogfQogCiAKQEAgLTExMjYsNiArMTEzMSw4IEBACiB8IHl5bmV3c3RhdGUgLS0gc2V0IGN1cnJlbnQgc3RhdGUgKHRoZSB0b3Agb2YgdGhlIHN0YWNrKSB0byB5eXN0YXRlLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5c2V0c3RhdGU6CisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisgIFlZX0FTU0VSVCAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPCBZWU5TVEFURVMpOwogICAqeXlzc3AgPSAoeXl0eXBlX2ludDE2KSB5eXN0YXRlOwogCiAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQpAQCAtMTE4OCw4ICsxMTk1LDYgQEAKICAgICB9CiAjZW5kaWYgLyogIWRlZmluZWQgeXlvdmVyZmxvdyAmJiAhZGVmaW5lZCBZWVNUQUNLX1JFTE9DQVRFICovCiAKLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQogICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQogICAgIFlZQUNDRVBUOwogCkBAIC0xMjU3LDcgKzEyNjIsNiBAQAogICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgogICAqKyt5eXZzcCA9IHl5bHZhbDsKICAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECi0KICAgZ290byB5eW5ld3N0YXRlOwogCiAKQEAgLTEyOTIsMTk1ICsxMjk2LDE5NiBAQAogICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CiAgIHN3aXRjaCAoeXluKQogICAgIHsKLSAgICAgICAgY2FzZSAyOgotI2xpbmUgNzcgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyAgY2FzZSAyOgorI2xpbmUgNzcgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICBjbUV4cHJfeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+U2V0UmVzdWx0KCh5eXZzcFswXS5OdW1iZXIpKTsKICAgfQotI2xpbmUgMTMwMSAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzA1ICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKLSNsaW5lIDgyICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA4MiAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDEzMDkgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTMxMyAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ6Ci0jbGluZSA4NSAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgODUgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSB8ICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzE3ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzMjEgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA1OgotI2xpbmUgOTAgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDkwICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbMF0uTnVtYmVyKTsKICAgfQotI2xpbmUgMTMyNSAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzI5ICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKLSNsaW5lIDkzICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSA5MyAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWy0yXS5OdW1iZXIpIF4gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDEzMzMgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTMzNyAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDc6Ci0jbGluZSA5OCAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgOTggImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzQxICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNDUgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OgotI2xpbmUgMTAxICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDEgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSAmICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzQ5ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNTMgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OgotI2xpbmUgMTA2ICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMDYgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzU3ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzNjEgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDoKLSNsaW5lIDEwOSAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTA5ICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbLTJdLk51bWJlcikgPDwgKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDEzNjUgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM2OSAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDExOgotI2xpbmUgMTEyICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMTIgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSA+PiAoeXl2c3BbMF0uTnVtYmVyKTsKICAgfQotI2xpbmUgMTM3MyAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzc3ICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI6Ci0jbGluZSAxMTcgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDExNyAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDEzODEgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM4NSAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDEzOgotI2xpbmUgMTIwICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjAgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSArICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxMzg5ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEzOTMgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDoKLSNsaW5lIDEyMyAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTIzICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbLTJdLk51bWJlcikgLSAoeXl2c3BbMF0uTnVtYmVyKTsKICAgfQotI2xpbmUgMTM5NyAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDAxICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU6Ci0jbGluZSAxMjggImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEyOCAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0MDUgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQwOSAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE2OgotI2xpbmUgMTMxICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzEgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSAqICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxNDEzICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0MTcgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzoKLSNsaW5lIDEzNCAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTM0ICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgaWYgKHl5dnNwWzBdLk51bWJlciA9PSAwKSB7CiAgICAgICB0aHJvdyBzdGQ6Om92ZXJmbG93X2Vycm9yKCJkaXZpZGUgYnkgemVybyIpOwogICAgIH0KICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFstMl0uTnVtYmVyKSAvICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxNDI0ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0MjggImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKLSNsaW5lIDE0MCAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQwICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbLTJdLk51bWJlcikgJSAoeXl2c3BbMF0uTnVtYmVyKTsKICAgfQotI2xpbmUgMTQzMiAiY21FeHByUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDM2ICJjbUV4cHJQYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk6Ci0jbGluZSAxNDUgImNtRXhwclBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NSAiY21FeHByUGFyc2VyLnkiCiAgICAgewogICAgICh5eXZhbC5OdW1iZXIpID0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0NDAgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ0NCAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMTQ4ICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNDggImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICsgKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0NDggImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ1MiAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIxOgotI2xpbmUgMTUxICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTEgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9IC0gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0NTYgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ2MCAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIyOgotI2xpbmUgMTU0ICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTQgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9IH4gKHl5dnNwWzBdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0NjQgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ2OCAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIzOgotI2xpbmUgMTU5ICJjbUV4cHJQYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTkgImNtRXhwclBhcnNlci55IgogICAgIHsKICAgICAoeXl2YWwuTnVtYmVyKSA9ICh5eXZzcFswXS5OdW1iZXIpOwogICB9Ci0jbGluZSAxNDcyICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0NzYgImNtRXhwclBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNDoKLSNsaW5lIDE2MiAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTYyICJjbUV4cHJQYXJzZXIueSIKICAgICB7CiAgICAgKHl5dmFsLk51bWJlcikgPSAoeXl2c3BbLTFdLk51bWJlcik7CiAgIH0KLSNsaW5lIDE0ODAgImNtRXhwclBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ4NCAiY21FeHByUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogCi0jbGluZSAxNDg0ICJjbUV4cHJQYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0ODggImNtRXhwclBhcnNlci5jeHgiCisKICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KICAgLyogVXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFuZCB0aGF0IHJlcXVpcmVzCkBAIC0xNzEzLDcgKzE3MTgsNyBAQAogI2VuZGlmCiAgIHJldHVybiB5eXJlc3VsdDsKIH0KLSNsaW5lIDE2NyAiY21FeHByUGFyc2VyLnkiIC8qIHlhY2MuYzoxOTE4ICAqLworI2xpbmUgMTY3ICJjbUV4cHJQYXJzZXIueSIKIAogLyogRW5kIG9mIGdyYW1tYXIgKi8KIApkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtRXhwclBhcnNlclRva2Vucy5oIGIvU291cmNlL0xleGVyUGFyc2VyL2NtRXhwclBhcnNlclRva2Vucy5oCmluZGV4IDVmZmQ3YzUuLmUzMGE4MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUV4cHJQYXJzZXJUb2tlbnMuaAorKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21FeHByUGFyc2VyVG9rZW5zLmgKQEAgLTEsNCArMSw0IEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4zLjIuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuNC4yLiAgKi8KIAogLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUZvcnRyYW5QYXJzZXIuY3h4IGIvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci5jeHgKaW5kZXggMmNhNzkyNy4uMjQ5NGFhZCAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci5jeHgKKysrIGIvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci5jeHgKQEAgLTEsNCArMSw0IEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4zLjIuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuNC4yLiAgKi8KIAogLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKIApAQCAtNDgsNyArNDgsNyBAQAogI2RlZmluZSBZWUJJU09OIDEKIAogLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy4zLjIiCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy40LjIiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTcyLDcgKzcyLDcgQEAKIAogCiAvKiBGaXJzdCBwYXJ0IG9mIHVzZXIgcHJvbG9ndWUuICAqLwotI2xpbmUgMSAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzozMzcgICovCisjbGluZSAxICJjbUZvcnRyYW5QYXJzZXIueSIKIAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwpAQCAtMTM1LDcgKzEzNSw4IEBACiAjIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCiAjZW5kaWYKIAotI2xpbmUgMTM5ICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MzM3ICAqLworI2xpbmUgMTM5ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgorCiAjIGlmbmRlZiBZWV9OVUxMUFRSCiAjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCiAjICAgaWYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cwpAQCAtMTU2LDggKzE1Nyw4IEBACiAjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQogI2VuZGlmCiAKLS8qIEluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgQmlzb24sIHRoaXMgc2VjdGlvbiB3aWxsIGJlIHJlcGxhY2VkCi0gICBieSAjaW5jbHVkZSAiY21Gb3J0cmFuUGFyc2VyVG9rZW5zLmgiLiAgKi8KKy8qIFVzZSBhcGkuaGVhZGVyLmluY2x1ZGUgdG8gI2luY2x1ZGUgdGhpcyBoZWFkZXIKKyAgIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgaGVyZS4gICovCiAjaWZuZGVmIFlZX0NNRk9SVFJBTl9ZWV9DTUZPUlRSQU5QQVJTRVJUT0tFTlNfSF9JTkNMVURFRAogIyBkZWZpbmUgWVlfQ01GT1JUUkFOX1lZX0NNRk9SVFJBTlBBUlNFUlRPS0VOU19IX0lOQ0xVREVECiAvKiBEZWJ1ZyB0cmFjZXMuICAqLwpAQCAtMjU1LDE2ICsyNTYsMTUgQEAKIAogLyogVmFsdWUgdHlwZS4gICovCiAjaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKLQogdW5pb24gWVlTVFlQRQogewotI2xpbmUgNzMgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MzUyICAqLworI2xpbmUgNzMgImNtRm9ydHJhblBhcnNlci55IgogCiAgIGNoYXIqIHN0cmluZzsKIAotI2xpbmUgMjY2ICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MzUyICAqLwotfTsKKyNsaW5lIDI2NiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKIAorfTsKIHR5cGVkZWYgdW5pb24gWVlTVFlQRSBZWVNUWVBFOwogIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQpAQCAtMzc4LDYgKzM3OCw4IEBACiAjZW5kaWYKIAogCisjZGVmaW5lIFlZX0FTU0VSVChFKSAoKHZvaWQpICgwICYmIChFKSkpCisKICNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKIAogLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLwpAQCAtNTA5LDE2ICs1MTEsMTYgQEAKIC8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCiAjZGVmaW5lIFlZRklOQUwgIDIKIC8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICA1OTMKKyNkZWZpbmUgWVlMQVNUICAgNTk0CiAKIC8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KICNkZWZpbmUgWVlOVE9LRU5TICA0MQogLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwogI2RlZmluZSBZWU5OVFMgIDE0CiAvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgNjMKKyNkZWZpbmUgWVlOUlVMRVMgIDY0CiAvKiBZWU5TVEFURVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgMTI2CisjZGVmaW5lIFlZTlNUQVRFUyAgMTI3CiAKICNkZWZpbmUgWVlVTkRFRlRPSyAgMgogI2RlZmluZSBZWU1BWFVUT0sgICAyOTUKQEAgLTU3NCw3ICs1NzYsNyBAQAogICAgICAyMjAsICAgMjIwLCAgIDIyMSwgICAyMjEsICAgMjIyLCAgIDIyMiwgICAyMjMsICAgMjIzLCAgIDIyNCwgICAyMjQsCiAgICAgIDIyNSwgICAyMjUsICAgMjI2LCAgIDIyNiwgICAyMjcsICAgMjI3LCAgIDIyOCwgICAyMjgsICAgMjMxLCAgIDIzMiwKICAgICAgMjMzLCAgIDIzNCwgICAyMzUsICAgMjM2LCAgIDIzNywgICAyMzgsICAgMjM5LCAgIDI0MCwgICAyNDEsICAgMjQyLAotICAgICAyNDMsICAgMjQ0LCAgIDI0NSwgICAyNDYKKyAgICAgMjQzLCAgIDI0NCwgICAyNDUsICAgMjQ2LCAgIDI0NwogfTsKICNlbmRpZgogCkBAIC02MjYsMTYgKzYyOCwxNiBAQAogICAgICAtMzksICAgIDIxLCAgIC0zOSwgICAgIDEsICAgLTM5LCAgIC0yMCwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksCiAgICAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwKICAgICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTI0LCAgIC0xOCwgICAgMjAsICAgIC04LAotICAgICAgLTMsICAgIDM5LCAgIC0zOSwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTksICAgIDMzLCAgIC0zOSwgICAtMzksCisgICAgICAtMywgICAgNDAsICAgLTM5LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOSwgICAgMzQsICAgLTM5LCAgIC0zOSwKICAgICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgICA1OSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgNzYsCi0gICAgIDExNCwgICAxMjksICAgMTY3LCAgIDE4MiwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwKKyAgICAgIDM2LCAgICAzNywgICAgMzgsICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgIDc3LAorICAgICAxMTUsICAgMTMwLCAgIDE2OCwgICAxODMsICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksCiAgICAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwKLSAgICAgLTM5LCAgIC0zOSwgICAyMjAsICAgMjM1LCAgIDI3MywgICAyODgsICAgLTIxLCAgICAyNiwgICAtMzksICAgMzI2LAotICAgICAzNDEsICAgMzc5LCAgIDM5NCwgICA0MzIsICAgNDQ3LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksCi0gICAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgMzgsICAgIDQwLCAgICA0MSwgICA0ODUsICAgLTM5LCAgIC0zOSwKLSAgICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgICA0NSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgNDMsICAgNTAwLAotICAgICA1MzgsICAgLTM5LCAgIC0zOSwgICAtMzksICAgNTUzLCAgIC0zOQorICAgICAtMzksICAgLTM5LCAgIC0zOSwgICAyMjEsICAgMjM2LCAgIDI3NCwgICAyODksICAgLTIxLCAgICAyNiwgICAtMzksCisgICAgIDMyNywgICAzNDIsICAgMzgwLCAgIDM5NSwgICA0MzMsICAgNDQ4LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwKKyAgICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgMzksICAgIDQxLCAgICA0MiwgICA0ODYsICAgLTM5LAorICAgICAtMzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgLTM5LCAgICAxOCwgICAtMzksICAgLTM5LCAgIC0zOSwgICAgNDMsCisgICAgIDUwMSwgICA1MzksICAgLTM5LCAgIC0zOSwgICAtMzksICAgNTU0LCAgIC0zOQogfTsKIAogICAvKiBZWURFRkFDVFtTVEFURS1OVU1dIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCkBAIC02NDksMTMgKzY1MSwxMyBAQAogICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0NiwgICAgNDYsCiAgICAgICA0NiwgICAgNDYsICAgIDI2LCAgICA0NiwgICAgIDAsICAgIDQ2LCAgICA0NiwgICAgIDQsICAgIDQ2LCAgICA0NiwKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgIDQ2LCAgICA0NiwgICAgNDYsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE1LCAgICA1NywgICAgNTYsICAgIDYyLCAgICA1OCwgICAgNTksCi0gICAgICA2MCwgICAgNjEsICAgIDYzLCAgICA1NSwgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKLSAgICAgIDU0LCAgICA0NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDYsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMTQsCi0gICAgICAxMCwgICAgMTMsICAgICA5LCAgICAgNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAgMCwgICAgNDYsICAgIDQ2LCAgICAxMSwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDQ2LCAgICAgNywgICAgMTIsICAgICAwLCAgICAgOAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE1LCAgICA1NywgICAgNTYsICAgIDY0LCAgICA2MiwgICAgNTgsCisgICAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MywgICAgNTUsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAgICAgIDUzLCAgICA1NCwgICAgNDcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQ2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAxNCwgICAgMTAsICAgIDEzLCAgICAgOSwgICAgIDYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgIDAsICAgIDQ2LCAgICA0NiwgICAgMTEsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0NiwgICAgIDcsICAgIDEyLCAgICAgMCwgICAgIDgKIH07CiAKICAgLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8KQEAgLTY2OSw3ICs2NzEsNyBAQAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KIHsKICAgICAgIC0xLCAgICAgMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDQxLCAgICA0NCwgICAgODEKKyAgICAgIDQwLCAgICA0MSwgICAgNDQsICAgIDgyCiB9OwogCiAgIC8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dIC0tIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKQEAgLTY3Nyw2NiArNjc5LDY2IEBACiAgICAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dGFibGVbXSA9CiB7Ci0gICAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNDIsICAgIDYzLCAgIDEwNCwgICAgODIsICAgIDgzLCAgIDEwNSwKLSAgICAgIDg0LCAgICA4NSwgICAgNDMsICAgIDQ1LCAgICA0NiwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkzLAotICAgICAgOTQsICAgICAyLCAgICAgMywgICAgNDcsICAgICA0LCAgICA0OSwgICAgNTAsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNDIsICAgIDYzLCAgIDEwNSwgICAgODMsICAgIDg0LCAgIDEwNiwKKyAgICAgIDg1LCAgICA4NiwgICAgNDMsICAgIDQ1LCAgICA0NiwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0LAorICAgICAgOTUsICAgICAyLCAgICAgMywgICAgNDcsICAgICA0LCAgICA0OSwgICAgNTAsICAgICA1LCAgICAgNiwgICAgIDcsCiAgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICA1NCwgICAgIDAsICAgIDU1LAotICAgICAxMDcsICAgIDU2LCAgICA1NywgICAgNDgsICAgMTA2LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDUxLCAgICA1OCwgICAgNTIsICAgIDg2LCAgICA4NywKLSAgICAgIDg4LCAgIDExNCwgICAgNTMsICAgMTE1LCAgIDExNiwgICAxMTgsICAgMTIxLCAgIDExOSwgICAxMjAsICAgIDk1LAotICAgICAgNjUsICAgIDY2LCAgICAgMCwgICAxMjQsICAgICAwLCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsCi0gICAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwKLSAgICAgICAwLCAgICAgMCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAotICAgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDk2LCAgICA2NSwgICAgNjYsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgNTQsICAgMTE5LCAgICA1NSwKKyAgICAgIDU2LCAgIDEwOCwgICAgNTcsICAgIDQ4LCAgIDEwNywgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNTEsICAgIDU4LCAgICA1MiwgICAgODcsCisgICAgICA4OCwgICAgODksICAgMTE1LCAgICA1MywgICAxMTYsICAgMTE3LCAgIDEyMiwgICAgIDAsICAgMTIwLCAgIDEyMSwKKyAgICAgIDk2LCAgICA2NSwgICAgNjYsICAgIDY3LCAgIDEyNSwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLAorICAgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgOTcsICAgIDY1LAorICAgICAgNjYsICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5OCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLAorICAgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwKKyAgICAgIDgxLCAgICA5OSwgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDAsICAgIDY1LCAgICA2NiwgICAgNjcsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywKKyAgICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDY4LAorICAgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLCAgICA3NiwgICAgNzcsCisgICAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAxMDEsICAgIDY1LCAgICA2NiwgICAgNjcsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTAyLAorICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDY4LCAgICA2OSwgICAgNzAsCisgICAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwKKyAgICAgIDgwLCAgICA4MSwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LAorICAgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgMTAzLCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxMDQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAgMCwgICAgNzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwKKyAgICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLAorICAgICAxMDksICAgIDY1LCAgICA2NiwgICAgNjcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTEwLCAgICA2NSwgICAgNjYsICAgIDY3LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAorICAgICAgNzUsICAgICAwLCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwKKyAgICAgIDc5LCAgICA4MCwgICAgODEsICAgMTExLCAgICA2NSwgICAgNjYsICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExMiwgICAgNjUsCisgICAgICA2NiwgICAgNjcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLAorICAgICAgODEsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsCisgICAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgIDExMywgICAgNjUsICAgIDY2LCAgICA2NywKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICA5NywgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwKLSAgICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLAotICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsCi0gICAgICA5OCwgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTksICAgIDY1LCAgICA2NiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsCi0gICAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDY3LCAgICA2OCwKLSAgICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwgICAgNzYsICAgIDc3LAotICAgICAgNzgsICAgIDc5LCAgICA4MCwgICAxMDAsICAgIDY1LCAgICA2NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTAxLCAgICA2NSwKLSAgICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLAotICAgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCi0gICAgICA4MCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwKLSAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgMTAyLCAgICA2NSwgICAgNjYsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAxMDMsICAgIDY1LCAgICA2NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA2NywKLSAgICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LAotICAgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsCi0gICAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgIDEwOCwKLSAgICAgIDY1LCAgICA2NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTA5LCAgICA2NSwgICAgNjYsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwKLSAgICAgICAwLCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA2NywgICAgNjgsICAgIDY5LAotICAgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsCi0gICAgICA3OSwgICAgODAsICAgMTEwLCAgICA2NSwgICAgNjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExMSwgICAgNjUsICAgIDY2LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsCi0gICAgICA3MiwgICAgNzMsICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwKLSAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LAotICAgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgIDExMiwgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgMTEzLCAgICA2NSwgICAgNjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjcsICAgIDY4LAotICAgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsCi0gICAgICA3OCwgICAgNzksICAgIDgwLCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywKLSAgICAgIDc0LCAgICAgMCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAxMTcsICAgIDY1LAotICAgICAgNjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLAotICAgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsCi0gICAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwKLSAgICAgIDgwLCAgIDEyMywgICAgNjUsICAgIDY2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjUsICAgIDY1LCAgICA2NiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwKLSAgICAgIDczLCAgICA3NCwgICAgIDAsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDY3LAotICAgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgICAwLCAgICA3NSwgICAgNzYsCi0gICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MAorICAgICAgIDAsICAgMTE0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjgsCisgICAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIDc1LCAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAxMTgsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMywgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsCisgICAgICAgMCwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgNjgsICAgIDY5LCAgICA3MCwKKyAgICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LAorICAgICAgODAsICAgIDgxLCAgIDEyNCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjYsICAgIDY1LCAgICA2NiwKKyAgICAgIDY3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLAorICAgICAgNzMsICAgIDc0LCAgICA3NSwgICAgIDAsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgICAwLCAgICA3NiwKKyAgICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MQogfTsKIAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5Y2hlY2tbXSA9CkBAIC03NDUsNjIgKzc0Nyw2MiBAQAogICAgICAgNDgsICAgIDQ5LCAgICAzMiwgICAgMzcsICAgIDMyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICA1NiwgICAgNTcsCiAgICAgICA1OCwgICAgIDAsICAgICAxLCAgICAgMywgICAgIDMsICAgIDMzLCAgICAyOSwgICAgIDYsICAgICA3LCAgICAgOCwKICAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDMyLCAgICAtMSwgICAgMzMsCi0gICAgICA4OCwgICAgMzMsICAgIDMzLCAgICAzMywgICAgMjgsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAgIDM5LCAgICA0MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgMjYsICAgIDMzLCAgICAyOCwgICAgMzMsICAgIDMzLAotICAgICAgMzMsICAgIDMzLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAzMCwgICAgMzMsICAgMTE1LCAgIDExNiwgICAgIDMsCi0gICAgICAgNCwgICAgIDUsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAzMiwgICAgMzAsICAgIDMzLAorICAgICAgMzMsICAgIDg5LCAgICAzMywgICAgMzMsICAgIDI4LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAyNiwgICAgMzMsICAgIDI4LCAgICAzMywKKyAgICAgIDMzLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAtMSwgICAxMTYsICAgMTE3LAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgMTIyLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCiAgICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAotICAgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsCi0gICAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAyNiwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsCi0gICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgIDMsCi0gICAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCi0gICAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAotICAgICAgMzksICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwKLSAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCiAgICAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsCiAgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKICAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAtMSwKKyAgICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKICAgICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDI2LAogICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywKKyAgICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgNDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAtMSwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLAorICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgICAzLAorICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAorICAgICAgLTEsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwKKyAgICAgIDM5LCAgICA0MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIC0xLCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAtMSwgICAgMzUsCisgICAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAKIH07CiAKICAgLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKQEAgLTgxMywxMyArODE1LDEzIEBACiAgICAgICAzOSwgICAgNDAsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwKICAgICAgIDUxLCAgICA1MiwgICAgIDMsICAgIDMyLCAgICA1MywgICAgMzcsICAgIDMyLCAgICAgMywgICAgMzMsICAgIDMzLAogICAgICAgMjksICAgIDI2LCAgICAyOCwgICAgMzMsICAgIDMyLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAzMywgICAgNTMsCi0gICAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgIDMsICAgICA0LCAgICAgNSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDU0LCAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgMzMsICAgIDMzLCAgICAzMywgICAgNTMsCi0gICAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKLSAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAyNywgICAgMzAsICAgIDI4LCAgICA1MywgICAgIDMsICAgICAzLAotICAgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgIDMzLCAgICAzMywgICAgMzMsICAgICAzLCAgICAzMCwgICAgNTMsCi0gICAgICA1MywgICAgMzMsICAgICAzLCAgICAgMywgICAgNTMsICAgICAzCisgICAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzksICAgIDQwLCAgICA1NCwgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTMsICAgIDMzLCAgICAzMywgICAgMzMsCisgICAgICA1MywgICAgNTMsICAgIDUzLCAgICA1MywgICAgNTMsICAgIDUzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgMjcsICAgIDMwLCAgICAyOCwgICAgNTMsICAgICAzLAorICAgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAzMywgICAgMzMsICAgIDMzLCAgICAgMywgICAgMzAsCisgICAgICA1MywgICAgNTMsICAgIDMzLCAgICAgMywgICAgIDMsICAgIDUzLCAgICAgMwogfTsKIAogICAvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KQEAgLTgzMSw3ICs4MzMsNyBAQAogICAgICAgNDUsICAgIDQ1LCAgICA0NiwgICAgNDYsICAgIDQ3LCAgICA0NywgICAgNDgsICAgIDQ4LCAgICA0OSwgICAgNDksCiAgICAgICA1MCwgICAgNTAsICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUyLCAgICA1MywgICAgNTMsICAgIDU0LCAgICA1NCwKICAgICAgIDU0LCAgICA1NCwgICAgNTQsICAgIDU0LCAgICA1NCwgICAgNTQsICAgIDU0LCAgICA1NCwgICAgNTQsICAgIDU0LAotICAgICAgNTQsICAgIDU0LCAgICA1NCwgICAgNTQKKyAgICAgIDU0LCAgICA1NCwgICAgNTQsICAgIDU0LCAgICA1NAogfTsKIAogICAvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCkBAIC04NDMsNyArODQ1LDcgQEAKICAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAogICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsCiAgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEKIH07CiAKIApAQCAtOTMwLDcgKzkzMiw5IEBACiAgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCiAgICAgWVlQUklOVCAoeXlvLCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwogIyBlbmRpZgorICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgogICBZWVVTRSAoeXl0eXBlKTsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECiB9CiAKIApAQCAtMTM2OCw2ICsxMzcyLDggQEAKIHwgeXluZXdzdGF0ZSAtLSBzZXQgY3VycmVudCBzdGF0ZSAodGhlIHRvcCBvZiB0aGUgc3RhY2spIHRvIHl5c3RhdGUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogeXlzZXRzdGF0ZToKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKyAgWVlfQVNTRVJUICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8IFlZTlNUQVRFUyk7CiAgICp5eXNzcCA9ICh5eXR5cGVfaW50MTYpIHl5c3RhdGU7CiAKICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCkBAIC0xNDMwLDggKzE0MzYsNiBAQAogICAgIH0KICNlbmRpZiAvKiAhZGVmaW5lZCB5eW92ZXJmbG93ICYmICFkZWZpbmVkIFlZU1RBQ0tfUkVMT0NBVEUgKi8KIAotICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwotCiAgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCiAgICAgWVlBQ0NFUFQ7CiAKQEAgLTE0OTksNyArMTUwMyw2IEBACiAgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCiAgICorK3l5dnNwID0geXlsdmFsOwogICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKLQogICBnb3RvIHl5bmV3c3RhdGU7CiAKIApAQCAtMTUzNCwyNyArMTUzNywyNyBAQAogICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7CiAgIHN3aXRjaCAoeXluKQogICAgIHsKLSAgICAgICAgY2FzZSA0OgotI2xpbmUgMTA0ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisgIGNhc2UgNDoKKyNsaW5lIDEwNCAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1NldEluSW50ZXJmYWNlKHBhcnNlciwgdHJ1ZSk7CiAgIH0KLSNsaW5lIDE1NDQgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU0NyAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDU6Ci0jbGluZSAxMDggImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEwOCAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVVc2UocGFyc2VyLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTU1NCAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNTU3ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKLSNsaW5lIDExMyAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTEzICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBpZiAoY21zeXNTdHJpbmdfc3RyY2FzZWNtcCgoeXl2c3BbLTJdLnN0cmluZyksICJmdW5jdGlvbiIpICE9IDAgJiYKQEAgLTE1NjQsMjIgKzE1NjcsMjIgQEAKICAgICB9CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNTY4ICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE1NzEgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3OgotI2xpbmUgMTIyICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMjIgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlU3VibW9kdWxlKHBhcnNlciwgKHl5dnNwWy00XS5zdHJpbmcpLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy00XS5zdHJpbmcpKTsKICAgICBmcmVlKCh5eXZzcFstMl0uc3RyaW5nKSk7CiAgIH0KLSNsaW5lIDE1NzkgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU4MiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDg6Ci0jbGluZSAxMjggImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDEyOCAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVTdWJtb2R1bGVOZXN0ZWQocGFyc2VyLCAoeXl2c3BbLTZdLnN0cmluZyksICh5eXZzcFstNF0uc3RyaW5nKSwgKHl5dnNwWy0yXS5zdHJpbmcpKTsKQEAgLTE1ODcsNDAgKzE1OTAsNDAgQEAKICAgICBmcmVlKCh5eXZzcFstNF0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNTkxICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE1OTQgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OgotI2xpbmUgMTM1ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxMzUgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9TZXRJbkludGVyZmFjZShwYXJzZXIsIHRydWUpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTYwMSAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjA0ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6Ci0jbGluZSAxNDAgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE0MCAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1NldEluSW50ZXJmYWNlKHBhcnNlciwgZmFsc2UpOwogICB9Ci0jbGluZSAxNjEwICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MTMgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKLSNsaW5lIDE0NCAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ0ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZVVzZShwYXJzZXIsICh5eXZzcFstMl0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNjIwICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MjMgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjoKLSNsaW5lIDE0OSAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTQ5ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgaWYgKGNtc3lzU3RyaW5nX3N0cmNhc2VjbXAoKHl5dnNwWy00XS5zdHJpbmcpLCAibm9uX2ludHJpbnNpYyIpID09IDApIHsKICAgICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CkBAIC0xNjI5LDEzOSArMTYzMiwxNDAgQEAKICAgICBmcmVlKCh5eXZzcFstNF0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNjMzICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MzYgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKLSNsaW5lIDE1NyAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTU3ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZUluY2x1ZGUocGFyc2VyLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTY0MyAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjQ2ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6Ci0jbGluZSAxNjIgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2MiAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVMaW5lRGlyZWN0aXZlKHBhcnNlciwgKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgICBmcmVlKCh5eXZzcFstMl0uc3RyaW5nKSk7CiAgIH0KLSNsaW5lIDE2NTMgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTY1NiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDE1OgotI2xpbmUgMTY3ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjcgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlSW5jbHVkZShwYXJzZXIsICh5eXZzcFstMl0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNjYzICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2NjYgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjoKLSNsaW5lIDE3MiAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTcyICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZUluY2x1ZGUocGFyc2VyLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTY3MyAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjc2ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6Ci0jbGluZSAxNzcgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NyAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVEZWZpbmUocGFyc2VyLCAoeXl2c3BbLTJdLnN0cmluZykpOwogICAgIGZyZWUoKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgfQotI2xpbmUgMTY4MyAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNjg2ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg6Ci0jbGluZSAxODIgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE4MiAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVVbmRlZihwYXJzZXIsICh5eXZzcFstMl0uc3RyaW5nKSk7CiAgICAgZnJlZSgoeXl2c3BbLTJdLnN0cmluZykpOwogICB9Ci0jbGluZSAxNjkzICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE2OTYgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOToKLSNsaW5lIDE4NyAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTg3ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZUlmZGVmKHBhcnNlciwgKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgICBmcmVlKCh5eXZzcFstMl0uc3RyaW5nKSk7CiAgIH0KLSNsaW5lIDE3MDMgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTcwNiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMTkyICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxOTIgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlSWZuZGVmKHBhcnNlciwgKHl5dnNwWy0yXS5zdHJpbmcpKTsKICAgICBmcmVlKCh5eXZzcFstMl0uc3RyaW5nKSk7CiAgIH0KLSNsaW5lIDE3MTMgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTcxNiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIxOgotI2xpbmUgMTk3ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxOTcgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlSWYocGFyc2VyKTsKICAgfQotI2xpbmUgMTcyMiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNzI1ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjI6Ci0jbGluZSAyMDEgImNtRm9ydHJhblBhcnNlci55IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDIwMSAiY21Gb3J0cmFuUGFyc2VyLnkiCiAgICAgewogICAgIGNtRm9ydHJhblBhcnNlciogcGFyc2VyID0gY21Gb3J0cmFuX3l5Z2V0X2V4dHJhKHl5c2Nhbm5lcik7CiAgICAgY21Gb3J0cmFuUGFyc2VyX1J1bGVFbGlmKHBhcnNlcik7CiAgIH0KLSNsaW5lIDE3MzEgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTczNCAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDIzOgotI2xpbmUgMjA1ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMDUgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsKICAgICBjbUZvcnRyYW5QYXJzZXIqIHBhcnNlciA9IGNtRm9ydHJhbl95eWdldF9leHRyYSh5eXNjYW5uZXIpOwogICAgIGNtRm9ydHJhblBhcnNlcl9SdWxlRWxzZShwYXJzZXIpOwogICB9Ci0jbGluZSAxNzQwICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NDMgImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNDoKLSNsaW5lIDIwOSAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjA5ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7CiAgICAgY21Gb3J0cmFuUGFyc2VyKiBwYXJzZXIgPSBjbUZvcnRyYW5feXlnZXRfZXh0cmEoeXlzY2FubmVyKTsKICAgICBjbUZvcnRyYW5QYXJzZXJfUnVsZUVuZGlmKHBhcnNlcik7CiAgIH0KLSNsaW5lIDE3NDkgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTc1MiAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKICAgICBicmVhazsKIAogICBjYXNlIDQ4OgotI2xpbmUgMjMxICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAyMzEgImNtRm9ydHJhblBhcnNlci55IgogICAgIHsgZnJlZSAoKHl5dnNwWzBdLnN0cmluZykpOyB9Ci0jbGluZSAxNzU1ICJjbUZvcnRyYW5QYXJzZXIuY3h4IiAvKiB5YWNjLmM6MTY1MiAgKi8KKyNsaW5lIDE3NTggImNtRm9ydHJhblBhcnNlci5jeHgiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA1NToKLSNsaW5lIDIzOCAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMjM4ICJjbUZvcnRyYW5QYXJzZXIueSIKICAgICB7IGZyZWUgKCh5eXZzcFswXS5zdHJpbmcpKTsgfQotI2xpbmUgMTc2MSAiY21Gb3J0cmFuUGFyc2VyLmN4eCIgLyogeWFjYy5jOjE2NTIgICovCisjbGluZSAxNzY0ICJjbUZvcnRyYW5QYXJzZXIuY3h4IgogICAgIGJyZWFrOwogCiAKLSNsaW5lIDE3NjUgImNtRm9ydHJhblBhcnNlci5jeHgiIC8qIHlhY2MuYzoxNjUyICAqLworI2xpbmUgMTc2OCAiY21Gb3J0cmFuUGFyc2VyLmN4eCIKKwogICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogICAvKiBVc2VyIHNlbWFudGljIGFjdGlvbnMgc29tZXRpbWVzIGFsdGVyIHl5Y2hhciwgYW5kIHRoYXQgcmVxdWlyZXMKQEAgLTE5OTQsNiArMTk5OCw2IEBACiAjZW5kaWYKICAgcmV0dXJuIHl5cmVzdWx0OwogfQotI2xpbmUgMjQ5ICJjbUZvcnRyYW5QYXJzZXIueSIgLyogeWFjYy5jOjE5MTggICovCisjbGluZSAyNTAgImNtRm9ydHJhblBhcnNlci55IgogCiAvKiBFbmQgb2YgZ3JhbW1hciAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci55IGIvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlci55CmluZGV4IDg3ZjNlMGEuLjFiNTRkZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUZvcnRyYW5QYXJzZXIueQorKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Gb3J0cmFuUGFyc2VyLnkKQEAgLTI0NCw2ICsyNDQsNyBAQAogfCBSUEFSRU4KIHwgQ09NTUEKIHwgVU5URVJNSU5BVEVEX1NUUklORworfCBDUFBfTElORV9ESVJFQ1RJVkUKIDsKIAogJSUKZGlmZiAtLWdpdCBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUZvcnRyYW5QYXJzZXJUb2tlbnMuaCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUZvcnRyYW5QYXJzZXJUb2tlbnMuaAppbmRleCAwZGE0YzFjLi5mNjZhMTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21Gb3J0cmFuUGFyc2VyVG9rZW5zLmgKKysrIGIvU291cmNlL0xleGVyUGFyc2VyL2NtRm9ydHJhblBhcnNlclRva2Vucy5oCkBAIC0xLDQgKzEsNCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjQuMi4gICovCiAKIC8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogCkBAIC0xMzEsMTYgKzEzMSwxNSBAQAogCiAvKiBWYWx1ZSB0eXBlLiAgKi8KICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAotCiB1bmlvbiBZWVNUWVBFCiB7Ci0jbGluZSA3MyAiY21Gb3J0cmFuUGFyc2VyLnkiIC8qIHlhY2MuYzoxOTIxICAqLworI2xpbmUgNzMgImNtRm9ydHJhblBhcnNlci55IgogCiAgIGNoYXIqIHN0cmluZzsKIAotI2xpbmUgMTQyICJjbUZvcnRyYW5QYXJzZXJUb2tlbnMuaCIgLyogeWFjYy5jOjE5MjEgICovCi19OworI2xpbmUgMTQxICJjbUZvcnRyYW5QYXJzZXJUb2tlbnMuaCIKIAorfTsKIHR5cGVkZWYgdW5pb24gWVlTVFlQRSBZWVNUWVBFOwogIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQpkaWZmIC0tZ2l0IGEvU291cmNlL0xleGVyUGFyc2VyL2NtR2NjRGVwZmlsZUxleGVyLmN4eCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4OTY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5jeHgKQEAgLTAsMCArMSwyMjEwIEBACisjaW5jbHVkZSAiY21TdGFuZGFyZExleGVyLmgiCisKKyNkZWZpbmUgRkxFWElOVF9IIDEKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNgorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gNAorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworI2lmZGVmIHl5X2NyZWF0ZV9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2NyZWF0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9jcmVhdGVfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9jcmVhdGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X2RlbGV0ZV9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2RlbGV0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9kZWxldGVfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9kZWxldGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X3NjYW5fYnVmZmVyCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eV9zY2FuX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3NjYW5fYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9zY2FuX2J1ZmZlcgorI2VuZGlmCisKKyNpZmRlZiB5eV9zY2FuX3N0cmluZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9zdHJpbmdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zY2FuX3N0cmluZyBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9zdHJpbmcKKyNlbmRpZgorCisjaWZkZWYgeXlfc2Nhbl9ieXRlcworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9ieXRlc19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3NjYW5fYnl0ZXMgY21HY2NEZXBmaWxlX3l5X3NjYW5fYnl0ZXMKKyNlbmRpZgorCisjaWZkZWYgeXlfaW5pdF9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2luaXRfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfaW5pdF9idWZmZXIgY21HY2NEZXBmaWxlX3l5X2luaXRfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X2ZsdXNoX2J1ZmZlcgorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfZmx1c2hfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfZmx1c2hfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9mbHVzaF9idWZmZXIKKyNlbmRpZgorCisjaWZkZWYgeXlfbG9hZF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfbG9hZF9idWZmZXJfc3RhdGUgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5X3N3aXRjaF90b19idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X3N3aXRjaF90b19idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zd2l0Y2hfdG9fYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9zd2l0Y2hfdG9fYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5cHVzaF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5cHVzaF9idWZmZXJfc3RhdGVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXB1c2hfYnVmZmVyX3N0YXRlIGNtR2NjRGVwZmlsZV95eXB1c2hfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5cG9wX2J1ZmZlcl9zdGF0ZQorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlwb3BfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlwb3BfYnVmZmVyX3N0YXRlIGNtR2NjRGVwZmlsZV95eXBvcF9idWZmZXJfc3RhdGUKKyNlbmRpZgorCisjaWZkZWYgeXllbnN1cmVfYnVmZmVyX3N0YWNrCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWVuc3VyZV9idWZmZXJfc3RhY2tfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWVuc3VyZV9idWZmZXJfc3RhY2sgY21HY2NEZXBmaWxlX3l5ZW5zdXJlX2J1ZmZlcl9zdGFjaworI2VuZGlmCisKKyNpZmRlZiB5eWxleAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlsZXhfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWxleCBjbUdjY0RlcGZpbGVfeXlsZXgKKyNlbmRpZgorCisjaWZkZWYgeXlyZXN0YXJ0CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXJlc3RhcnRfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXJlc3RhcnQgY21HY2NEZXBmaWxlX3l5cmVzdGFydAorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9pbml0CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9pbml0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdCBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdAorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9pbml0X2V4dHJhCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9pbml0X2V4dHJhX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdF9leHRyYSBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9kZXN0cm95CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9kZXN0cm95X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfZGVzdHJveSBjbUdjY0RlcGZpbGVfeXlsZXhfZGVzdHJveQorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9kZWJ1ZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9kZWJ1ZyBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWcKKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfZGVidWcKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5c2V0X2RlYnVnX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfZGVidWcgY21HY2NEZXBmaWxlX3l5c2V0X2RlYnVnCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2V4dHJhCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWdldF9leHRyYV9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2V4dHJhIGNtR2NjRGVwZmlsZV95eWdldF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eXNldF9leHRyYQorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9leHRyYSBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmEKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfaW4KKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5Z2V0X2luX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfaW4gY21HY2NEZXBmaWxlX3l5Z2V0X2luCisjZW5kaWYKKworI2lmZGVmIHl5c2V0X2luCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXNldF9pbl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2luIGNtR2NjRGVwZmlsZV95eXNldF9pbgorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9vdXQKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5Z2V0X291dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X291dCBjbUdjY0RlcGZpbGVfeXlnZXRfb3V0CisjZW5kaWYKKworI2lmZGVmIHl5c2V0X291dAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlzZXRfb3V0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfb3V0IGNtR2NjRGVwZmlsZV95eXNldF9vdXQKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfbGVuZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfbGVuZ19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2xlbmcgY21HY2NEZXBmaWxlX3l5Z2V0X2xlbmcKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfdGV4dAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfdGV4dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X3RleHQgY21HY2NEZXBmaWxlX3l5Z2V0X3RleHQKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfbGluZW5vCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWdldF9saW5lbm9fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9saW5lbm8gY21HY2NEZXBmaWxlX3l5Z2V0X2xpbmVubworI2VuZGlmCisKKyNpZmRlZiB5eXNldF9saW5lbm8KKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5c2V0X2xpbmVub19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2xpbmVubyBjbUdjY0RlcGZpbGVfeXlzZXRfbGluZW5vCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2NvbHVtbgorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfY29sdW1uX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfY29sdW1uIGNtR2NjRGVwZmlsZV95eWdldF9jb2x1bW4KKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfY29sdW1uCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXNldF9jb2x1bW5fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9jb2x1bW4gY21HY2NEZXBmaWxlX3l5c2V0X2NvbHVtbgorI2VuZGlmCisKKyNpZmRlZiB5eXdyYXAKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5d3JhcF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5d3JhcCBjbUdjY0RlcGZpbGVfeXl3cmFwCisjZW5kaWYKKworI2lmZGVmIHl5YWxsb2MKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5YWxsb2NfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWFsbG9jIGNtR2NjRGVwZmlsZV95eWFsbG9jCisjZW5kaWYKKworI2lmZGVmIHl5cmVhbGxvYworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlyZWFsbG9jX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlyZWFsbG9jIGNtR2NjRGVwZmlsZV95eXJlYWxsb2MKKyNlbmRpZgorCisjaWZkZWYgeXlmcmVlCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWZyZWVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWZyZWUgY21HY2NEZXBmaWxlX3l5ZnJlZQorI2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNpZm5kZWYgU0laRV9NQVgKKyNkZWZpbmUgU0laRV9NQVggICAgICAgICAgICAgICAofihzaXplX3QpMCkKKyNlbmRpZgorCisjZW5kaWYgLyogISBDOTkgKi8KKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMrKyBoZWFkZXJzLiAqLworCisvKiBUT0RPOiB0aGlzIGlzIGFsd2F5cyBkZWZpbmVkLCBzbyBpbmxpbmUgaXQgKi8KKyNkZWZpbmUgeXljb25zdCBjb25zdAorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMworI2RlZmluZSB5eW5vcmV0dXJuIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxzZQorI2RlZmluZSB5eW5vcmV0dXJuCisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuCisgKiAgIGludGVnZXIgaW4gcmFuZ2UgWzAuLjI1NV0gZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4KKyAqLworI2RlZmluZSBZWV9TQ19UT19VSShjKSAoKFlZX0NIQVIpIChjKSkKKworLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworI2VuZGlmCisKKy8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCisgICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KKyNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKKyNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgorI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgorCisvKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJhbWV0ZXIsCisgKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKKyAqIGRlZmluaXRpb24gb2YgQkVHSU4uCisgKi8KKyNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisvKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLworI2RlZmluZSBZWV9ORVdfRklMRSB5eXJlc3RhcnQoIHl5aW4gLCB5eXNjYW5uZXIgKQorI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAorCisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQorI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCisjZW5kaWYKKworLyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5PKG4pCisgICAgI2RlZmluZSBZWV9MSU5FTk9fUkVXSU5EX1RPKHB0cikKKworLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIgLCB5eXNjYW5uZXIgKQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworCisJLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJfc3RhdHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElORyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoIHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQorLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdAorICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgKi8KKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFIHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0KKwordm9pZCB5eXJlc3RhcnQgKCBGSUxFICppbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgKCBZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgKCBGSUxFICpmaWxlLCBpbnQgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eV9kZWxldGVfYnVmZmVyICggWVlfQlVGRkVSX1NUQVRFIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfZmx1c2hfYnVmZmVyICggWVlfQlVGRkVSX1NUQVRFIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoIFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICggeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoIFlZX0JVRkZFUl9TVEFURSBiLCBGSUxFICpmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5eV9mbHVzaF9idWZmZXIoIFlZX0NVUlJFTlRfQlVGRkVSICwgeXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgKCBjaGFyICpiYXNlLCB5eV9zaXplX3Qgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICggY29uc3QgY2hhciAqeXlfc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoIGNvbnN0IGNoYXIgKmJ5dGVzLCBpbnQgbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnl5YWxsb2MgKCB5eV9zaXplX3QgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnl5cmVhbGxvYyAoIHZvaWQgKiwgeXlfc2l6ZV90ICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5ZnJlZSAoIHZvaWQgKiAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisjZGVmaW5lIHl5X25ld19idWZmZXIgeXlfY3JlYXRlX2J1ZmZlcgorI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlciggeXlpbiwgWVlfQlVGX1NJWkUgLCB5eXNjYW5uZXIpOyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQorI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoIHl5aW4sIFlZX0JVRl9TSVpFICwgeXlzY2FubmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCisKKy8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KKworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXl3cmFwKHl5c2Nhbm5lcikgKC8qQ09OU1RDT05EKi8xKQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAordHlwZWRlZiBmbGV4X3VpbnQ4X3QgWVlfQ0hBUjsKKwordHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsKKworI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dF9yCisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoIHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLCB5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5bm9yZXR1cm4geXlfZmF0YWxfZXJyb3IgKCBjb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1cCB5eXRleHQuCisgKi8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoaW50KSAoeXlfY3AgLSB5eV9icCk7IFwKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDExCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTIKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgY29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFsyNl0gPQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgIDEyLCAgIDEwLCAgICA4LCAgICA2LCAgIDEwLCAgICA5LCAgIDEwLCAgIDEwLAorICAgICAgIDEwLCAgICA4LCAgICAwLCAgICA2LCAgICA5LCAgICAxLCAgICA3LCAgICA1LCAgICAwLCAgICAzLAorICAgICAgICAyLCAgICAwLCAgICA0LCAgICAwLCAgICAwCisgICAgfSA7CisKK3N0YXRpYyBjb25zdCBZWV9DSEFSIHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAgICA2LCAgICAxLCAgICAxLCAgICA2LAorICAgICAgICA2LCAgICAxLCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA5LCAgICAxLCAgICAxLAorICAgICAgICA2LCAgICAxLCAgICAxLCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorICAgICAgICA2LCAgIDEwLCAgICA2LCAgICAxLCAgICA2LCAgICAxLCAgICA2LCAgICA2LCAgICA2LCAgICA2LAorCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDEsICAgIDYsICAgIDYsICAgIDEsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisgICAgICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsICAgIDYsCisKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKKyAgICAgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNgorICAgIH0gOworCitzdGF0aWMgY29uc3QgWVlfQ0hBUiB5eV9tZXRhWzExXSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMKKyAgICB9IDsKKworc3RhdGljIGNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzI4XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgMjksICAgMzUsICAgMTgsICAgMzUsICAgMjIsICAgMTgsICAgMTUsICAgIDAsCisgICAgICAgIDgsICAgMTIsICAgMTYsICAgMzUsICAgMTEsICAgMzUsICAgIDAsICAgMzUsICAgMTMsICAgMzUsCisgICAgICAgMzUsICAgMTYsICAgMzUsICAgMjIsICAgMzUsICAgMzEsICAgMTIKKyAgICB9IDsKKworc3RhdGljIGNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbMjhdID0KKyAgICB7ICAgMCwKKyAgICAgICAyNSwgICAgMSwgICAyNSwgICAyNSwgICAyNiwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNywKKyAgICAgICAyNSwgICAyNiwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNywgICAyNSwgICAyNSwgICAyNSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAgMCwgICAyNSwgICAyNQorICAgIH0gOworCitzdGF0aWMgY29uc3QgZmxleF9pbnQxNl90IHl5X254dFs0Nl0gPQorICAgIHsgICAwLAorICAgICAgICA0LCAgICA1LCAgICA2LCAgICA3LCAgICA1LCAgICA4LCAgICA0LCAgICA5LCAgIDEwLCAgIDExLAorICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDE3LCAgIDIxLCAgIDE4LCAgIDE1LCAgIDIyLCAgIDE4LCAgIDE5LAorICAgICAgIDIzLCAgIDEzLCAgIDE2LCAgIDE1LCAgIDE0LCAgIDI0LCAgIDIwLCAgIDEzLCAgIDI1LCAgIDI1LAorICAgICAgIDI1LCAgIDIyLCAgIDEyLCAgIDEyLCAgICAzLCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LAorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1CisgICAgfSA7CisKK3N0YXRpYyBjb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzQ2XSA9CisgICAgeyAgIDAsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgMTEsICAgMTEsICAgMTEsICAgMjcsICAgMTEsICAgMTksICAgMTUsICAgMTEsICAgMTMsICAgMTMsCisgICAgICAgMjIsICAgMTIsICAgIDksICAgIDgsICAgIDcsICAgMjIsICAgMjQsICAgIDUsICAgIDMsICAgIDAsCisgICAgICAgIDAsICAgMjQsICAgMjYsICAgMjYsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUsCisgICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjUKKyAgICB9IDsKKworLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisvKiBJV1lVIHByYWdtYTogbm9fZm9yd2FyZF9kZWNsYXJlIHl5Z3V0c190ICovCisKKyNpZm5kZWYgX19jbGFuZ19hbmFseXplcl9fIC8qIFN1cHByZXNzIGNsYW5nIHNjYW4tYnVpbGQgd2FybmluZ3MgKi8KKworI2luY2x1ZGUgPGNtR2NjRGVwZmlsZUxleGVySGVscGVyLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjZGVmaW5lIElOSVRJQUwgMAorCisjaWZuZGVmIFlZX0VYVFJBX1RZUEUKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSB2b2lkICoKKyNlbmRpZgorCisvKiBIb2xkcyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KK3N0cnVjdCB5eWd1dHNfdAorICAgIHsKKworICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KKyAgICBZWV9FWFRSQV9UWVBFIHl5ZXh0cmFfcjsKKworICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLworICAgIEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7CisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLworICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICBjaGFyIHl5X2hvbGRfY2hhcjsKKyAgICBpbnQgeXlfbl9jaGFyczsKKyAgICBpbnQgeXlsZW5nX3I7CisgICAgY2hhciAqeXlfY19idWZfcDsKKyAgICBpbnQgeXlfaW5pdDsKKyAgICBpbnQgeXlfc3RhcnQ7CisgICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKyAgICBpbnQgeXlfc3RhcnRfc3RhY2tfcHRyOworICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKKyAgICBpbnQgKnl5X3N0YXJ0X3N0YWNrOworICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisgICAgY2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKworICAgIGludCB5eWxpbmVub19yOworICAgIGludCB5eV9mbGV4X2RlYnVnX3I7CisKKyAgICBjaGFyICp5eXRleHRfcjsKKyAgICBpbnQgeXlfbW9yZV9mbGFnOworICAgIGludCB5eV9tb3JlX2xlbjsKKworICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHl5bGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKKworaW50IHl5bGV4X2luaXRfZXh0cmEgKCBZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCwgeXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRfZGVidWcgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9kZWJ1ZyAoIGludCBkZWJ1Z19mbGFnICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9leHRyYSAoIFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5Z2V0X2luICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfaW4gICggRklMRSAqIF9pbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqeXlnZXRfb3V0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoIEZJTEUgKiBfb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisJCQlpbnQgeXlnZXRfbGVuZyAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitjaGFyICp5eWdldF90ZXh0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdldF9saW5lbm8gKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9saW5lbm8gKCBpbnQgX2xpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdldF9jb2x1bW4gICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfY29sdW1uICggaW50IF9jb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHl5d3JhcCAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgeXl3cmFwICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX1VOUFVUCisKKyAgICBzdGF0aWMgdm9pZCB5eXVucHV0ICggaW50IGMsIGNoYXIgKmJ1Zl9wdHIgICwgeXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2VuZGlmCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5ICggY2hhciAqLCBjb25zdCBjaGFyICosIGludCAsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICggY29uc3QgY2hhciAqICwgeXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKK3N0YXRpYyBpbnQgeXlpbnB1dCAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbmRpZgorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KKyNlbmRpZgorCisvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworI2lmbmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisgKi8KKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgKHNpemVfdCkgeXlsZW5nLCAxLCB5eW91dCApKSB7fSB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQlpbnQgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IChpbnQpIGZyZWFkKGJ1ZiwgMSwgKHl5X3NpemVfdCkgbWF4X3NpemUsIHl5aW4pKSA9PSAwICYmIGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAorXAorCisjZW5kaWYKKworLyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFib3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYgeXl0ZXJtaW5hdGUKKyNkZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlmCisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1CisjZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZuZGVmIFlZX0ZBVEFMX0VSUk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5c2Nhbm5lcikKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNpbHkgYWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQorCitleHRlcm4gaW50IHl5bGV4ICh5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYgLyogIVlZX0RFQ0wgKi8KKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcKKyAqIGhhdmUgYmVlbiBzZXQgdXAuCisgKi8KKyNpZm5kZWYgWVlfVVNFUl9BQ1RJT04KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04KKyNlbmRpZgorCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBydWxlLiAqLworI2lmbmRlZiBZWV9CUkVBSworI2RlZmluZSBZWV9CUkVBSyAvKkxJTlRFRCovYnJlYWs7CisjZW5kaWYKKworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZWV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVDTAoreworCXl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwljaGFyICp5eV9jcCwgKnl5X2JwOworCWludCB5eV9hY3Q7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJCVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKCB5eWluLCBZWV9CVUZfU0laRSAsIHl5c2Nhbm5lcik7CisJCX0KKworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggeXlzY2FubmVyICk7CisJCX0KKworCXsKKworCXdoaWxlICggLypDT05TVENPTkQqLzEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKK3l5X21hdGNoOgorCQlkbworCQkJeworCQkJWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDI2ICkKKwkJCQkJeXlfYyA9IHl5X21ldGFbeXlfY107CisJCQkJfQorCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY107CisJCQkrK3l5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gIT0gMzUgKTsKKworeXlfZmluZF9hY3Rpb246CisJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9hY3QgPT0gMCApCisJCQl7IC8qIGhhdmUgdG8gYmFjayB1cCAqLworCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCX0KKworCQlZWV9ET19CRUZPUkVfQUNUSU9OOworCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCisJCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KKwkJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCWdvdG8geXlfZmluZF9hY3Rpb247CisKK2Nhc2UgMToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmVzY2FwZSB0aGUgZG9sbGFyIHNpZ24uCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCgiJCIpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmVzY2FwZSB0aGUgaGFzaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5hZGRUb0N1cnJlbnRQYXRoKCIjIik7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAoreworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDJOKzEgYmFja3NsYXNoZXMgcGx1cyBzcGFjZSAtPiBOIGJhY2tzbGFzaGVzIHBsdXMgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGMgPSAoc3RybGVuKHl5dGV4dCkgLSAxKSAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcyhjLCAnXFwnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzLnB1c2hfYmFjaygnICcpOworICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXh0cmEtPmFkZFRvQ3VycmVudFBhdGgocy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorCVlZX0JSRUFLCitjYXNlIDQ6CitZWV9SVUxFX1NFVFVQCit7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMk4gYmFja3NsYXNoZXMgcGx1cyBzcGFjZSAtPiAyTiBiYWNrc2xhc2hlcywgZW5kIG9mIGZpbGVuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgIHl5dGV4dFtzdHJsZW4oeXl0ZXh0KSAtIDFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5hZGRUb0N1cnJlbnRQYXRoKHl5dGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+bmV3RGVwZW5kZW5jeSgpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgNToKKy8qIHJ1bGUgNSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCit7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBsaW5lIGNvbnRpbnVhdGlvbiBlbmRzIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdEZXBlbmRlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKwlZWV9CUkVBSworY2FzZSA2OgorLyogcnVsZSA2IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIG5ld2xpbmUgZW5kcyB0aGUgY3VycmVudCBmaWxlIG5hbWUgYW5kIHRoZSBjdXJyZW50IHJ1bGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+bmV3RW50cnkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorCVlZX0JSRUFLCitjYXNlIDc6CitZWV9SVUxFX1NFVFVQCit7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBjb2xvbiBmb2xsb3dlZCBieSBzcGFjZSBlbmRzIHRoZSBydWxlcyBhbmQgc3RhcnRzIGEgbmV3IGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+bmV3RGVwZW5kZW5jeSgpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSdWxlcyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBzZXBhcmF0ZWQgYnkgYmxvY2tzIG9mIHdoaXRlc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+bmV3UnVsZU9yRGVwZW5kZW5jeSgpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3QgYSBzcGFuIG9mIHBsYWluIHRleHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCh5eXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICB9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCit7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR290IGFuIG90aGVyd2lzZSB1bm1hdGNoZWQgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXh0cmEtPmFkZFRvQ3VycmVudFBhdGgoeXl0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorCVlZX0JSRUFLCitjYXNlIDExOgorWVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CisJeXl0ZXJtaW5hdGUoKTsKKworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKKwkJeworCQkvKiBBbW91bnQgb2YgdGV4dCBtYXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLworCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJCS8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKKworCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNlLiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJCQkgKiB5eWxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7CisJCQl9CisKKwkJLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlvbgorCQkgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRoZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAorCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCisJCSAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQorCQkgKiBlbmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAorCQkgKiBpbiBpbnB1dCgpLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisKKwkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBjb3VsZG4ndCBoYXZlCisJCQkgKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQKKwkJCSAqIGZvciB1cyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAorCQkJICogd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4KKwkJCSAqLworCisJCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbm5lcik7CisKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQorCisJCQllbHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJeworCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKKworCQkJCWlmICggeXl3cmFwKCB5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KKwl9IC8qIGVuZCBvZiB1c2VyJ3MgZGVjbGFyYXRpb25zICovCit9IC8qIGVuZCBvZiB5eWxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCWNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwljaGFyICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7CisJaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIDEpOworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0gMDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQorCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQkJCXsKKwkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJeXlyZWFsbG9jKCAodm9pZCAqKSBiLT55eV9jaF9idWYsCisJCQkJCQkJICh5eV9zaXplX3QpIChiLT55eV9idWZfc2l6ZSArIDIpICwgeXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSBOVUxMOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJeXlyZXN0YXJ0KCB5eWluICAsIHl5c2Nhbm5lcik7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAoKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJaW50IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygKKwkJCSh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLCAoeXlfc2l6ZV90KSBuZXdfc2l6ZSAsIHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJCS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplID0gKGludCkgKG5ld19zaXplIC0gMik7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwljaGFyICp5eV9jcDsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5X2NwICkKKwkJeworCQlZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAyNiApCisJCQkJeXlfYyA9IHl5X21ldGFbeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCWNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCisJWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAyNiApCisJCQl5eV9jID0geXlfbWV0YVt5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDI1KTsKKworCSh2b2lkKXl5ZzsKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKyNpZm5kZWYgWVlfTk9fVU5QVVQKKworICAgIHN0YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLCBjaGFyICogeXlfYnAgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJY2hhciAqeXlfY3A7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisKKwkvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KKwkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggeXlfY3AgPCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQorCQl7IC8qIG5lZWQgdG8gc2hpZnQgdGhpbmdzIHVwIHRvIG1ha2Ugcm9vbSAqLworCQkvKiArMiBmb3IgRU9CIGNoYXJzLiAqLworCQlpbnQgbnVtYmVyX3RvX21vdmUgPSB5eWctPnl5X25fY2hhcnMgKyAyOworCQljaGFyICpkZXN0ID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWworCQkJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplICsgMl07CisJCWNoYXIgKnNvdXJjZSA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXTsKKworCQl3aGlsZSAoIHNvdXJjZSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCSotLWRlc3QgPSAqLS1zb3VyY2U7CisKKwkJeXlfY3AgKz0gKGludCkgKGRlc3QgLSBzb3VyY2UpOworCQl5eV9icCArPSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9CisJCQl5eWctPnl5X25fY2hhcnMgPSAoaW50KSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplOworCisJCWlmICggeXlfY3AgPCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQorCQkJWVlfRkFUQUxfRVJST1IoICJmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93IiApOworCQl9CisKKwkqLS15eV9jcCA9IChjaGFyKSBjOworCisJeXlnLT55eXRleHRfcHRyID0geXlfYnA7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7CisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7Cit9CisKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCWludCBvZmZzZXQgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKTsKKwkJCSsreXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bworCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8KKwkJCQkJeXlyZXN0YXJ0KCB5eWluICwgeXlzY2FubmVyKTsKKworCQkJCQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJeworCQkJCQlpZiAoIHl5d3JhcCggeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIDA7CisKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CisKKwlyZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9pZCB5eXJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKyAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlciggeXlpbiwgWVlfQlVGX1NJWkUgLCB5eXNjYW5uZXIpOworCX0KKworCXl5X2luaXRfYnVmZmVyKCBZWV9DVVJSRU5UX0JVRkZFUiwgaW5wdXRfZmlsZSAsIHl5c2Nhbm5lcik7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoIHl5c2Nhbm5lciApOworfQorCisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCitzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2MoIHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICwgeXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemU7CisKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlhbGxvYyggKHl5X3NpemVfdCkgKGItPnl5X2J1Zl9zaXplICsgMikgLCB5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwl5eV9pbml0X2J1ZmZlciggYiwgZmlsZSAsIHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCB5eV9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQl5eWZyZWUoICh2b2lkICopIGItPnl5X2NoX2J1ZiAsIHl5c2Nhbm5lciApOworCisJeXlmcmVlKCAodm9pZCAqKSBiICwgeXlzY2FubmVyICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSB5eXJlc3RhcnQoKSBvciBhdCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJeXlfZmx1c2hfYnVmZmVyKCBiICwgeXlzY2FubmVyKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSBmaWxlID8gKGlzYXR0eSggZmlsZW5vKGZpbGUpICkgPiAwKSA6IDA7CisKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCB5eXNjYW5uZXIgKTsKK30KKworLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaworICogIGlmIG5lY2Vzc2FyeS4KKyAqICBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IHN0YXRlLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoIHl5c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICwgeXlzY2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggeXlzY2FubmVyICk7CisJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwl9Cit9CisKKy8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAqLworICAgICAgbnVtX3RvX2FsbG9jID0gMTsgLyogQWZ0ZXIgYWxsIHRoYXQgdGFsaywgdGhpcyB3YXMgc2V0IHRvIDEgYW55d2F5cy4uLiAqLworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJeXlfc2l6ZV90IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gTlVMTDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKCBzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAsIHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gKGludCkgKHNpemUgLSAyKTsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IE5VTEw7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXl5X3N3aXRjaF90b19idWZmZXIoIGIgLCB5eXNjYW5uZXIgKTsKKworCXJldHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgeXlfc2Nhbl9ieXRlcygpIGluc3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoY29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCisJcmV0dXJuIHl5X3NjYW5fYnl0ZXMoIHl5c3RyLCAoaW50KSBzdHJsZW4oeXlzdHIpICwgeXlzY2FubmVyKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKGNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJaW50IGk7CisKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gKHl5X3NpemVfdCkgKF95eWJ5dGVzX2xlbiArIDIpOworCWJ1ZiA9IChjaGFyICopIHl5YWxsb2MoIG4gLCB5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0geXlfc2Nhbl9idWZmZXIoIGJ1ZiwgbiAsIHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGljIHZvaWQgeXlub3JldHVybiB5eV9mYXRhbF9lcnJvciAoY29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwkodm9pZCl5eWc7CisJZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCB5eWdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4geXlsaW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitpbnQgeXlnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHl5Y29sdW1uOworfQorCisvKiogR2V0IHRoZSBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworRklMRSAqeXlnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnl5Z2V0X291dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5b3V0OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworaW50IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWxlbmc7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworCitjaGFyICp5eWdldF90ZXh0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXl0ZXh0OworfQorCisvKiogU2V0IHRoZSB1c2VyLWRlZmluZWQgZGF0YS4gVGhpcyBkYXRhIGlzIG5ldmVyIHRvdWNoZWQgYnkgdGhlIHNjYW5uZXIuCisgKiBAcGFyYW0gdXNlcl9kZWZpbmVkIFRoZSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjYW5uZXIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSAgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWV4dHJhID0gdXNlcl9kZWZpbmVkIDsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSBfbGluZV9udW1iZXIgbGluZSBudW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5c2V0X2xpbmVubyAoaW50ICBfbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJ5eXNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiApOworCisgICAgeXlsaW5lbm8gPSBfbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgY29sdW1uLgorICogQHBhcmFtIF9jb2x1bW5fbm8gY29sdW1uIG51bWJlcgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgeXlzZXRfY29sdW1uIChpbnQgIF9jb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJ5eXNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiApOworCisgICAgeXljb2x1bW4gPSBfY29sdW1uX25vOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIF9pbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBzZWUgeXlfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHl5c2V0X2luIChGSUxFICogIF9pbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5aW4gPSBfaW5fc3RyIDsKK30KKwordm9pZCB5eXNldF9vdXQgKEZJTEUgKiAgX291dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5b3V0ID0gX291dF9zdHIgOworfQorCitpbnQgeXlnZXRfZGVidWcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHJldHVybiB5eV9mbGV4X2RlYnVnOworfQorCit2b2lkIHl5c2V0X2RlYnVnIChpbnQgIF9iZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5X2ZsZXhfZGVidWcgPSBfYmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBmb3IgeXlsdmFsIGFuZCB5eWxsb2MgKi8KKworLyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiB5eWxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2VsZiwgc28gaXQgaXMKKyAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2UgZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBtYWNyb3MuCisgKi8KK2ludCB5eWxleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscykKK3sKKyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7Cit9CisKKy8qIHl5bGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgeXlsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rpb24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRlZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHl5YWxsb2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCitpbnQgeXlsZXhfaW5pdF9leHRyYSggWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQsIHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCit7CisgICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHl5c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhBQSwgd2UgZXhwb3NlIGJ1Z3MgaW4KKyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CisKKyAgICB5eXNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOworCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xvYmFscyApOworfQorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHl5bGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KKyAgICAgKi8KKworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7CisgICAgeXlnLT55eV9jX2J1Zl9wID0gTlVMTDsKKyAgICB5eWctPnl5X2luaXQgPSAwOworICAgIHl5Zy0+eXlfc3RhcnQgPSAwOworCisgICAgeXlnLT55eV9zdGFydF9zdGFja19wdHIgPSAwOworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggPSAwOworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAgTlVMTDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KKyNpZmRlZiBZWV9TVERJTklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0OworI2Vsc2UKKyAgICB5eWluID0gTlVMTDsKKyAgICB5eW91dCA9IE5VTEw7CisjZW5kaWYKKworICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBjYWxsZWQgYnkKKyAgICAgKiB5eWxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyogeXlsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgeXlsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxldGVfYnVmZmVyKCBZWV9DVVJSRU5UX0JVRkZFUiAsIHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQl5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICwgeXlzY2FubmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisKKyAgICAvKiBEZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCisgICAgICAgIHl5ZnJlZSggeXlnLT55eV9zdGFydF9zdGFjayAsIHl5c2Nhbm5lciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0gTlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxzKCB5eXNjYW5uZXIpOworCisgICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50cmFudCBvbmx5KS4gKi8KKyAgICB5eWZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAgICB5eXNjYW5uZXIgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdXRpbGl0eSByb3V0aW5lcy4KKyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIGNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCSh2b2lkKXl5ZzsKKworCWludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKGNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CisKKwlyZXR1cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCSh2b2lkKXl5ZzsKKwlyZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCSh2b2lkKXl5ZzsKKworCS8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCisJICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCisJICovCisJcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsKK30KKwordm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCSh2b2lkKXl5ZzsKKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHl5cmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCit9CisKKyNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZW5kaWYgLyogX19jbGFuZ19hbmFseXplcl9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21HY2NEZXBmaWxlTGV4ZXIuaCBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzQwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21HY2NEZXBmaWxlTGV4ZXIuaApAQCAtMCwwICsxLDY4NyBAQAorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlIRUFERVJfSAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlIRUFERVJfSCAxCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eUlOX0hFQURFUiAxCisKKyNkZWZpbmUgRkxFWElOVF9IIDEKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNgorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gNAorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworI2lmZGVmIHl5X2NyZWF0ZV9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2NyZWF0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9jcmVhdGVfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9jcmVhdGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X2RlbGV0ZV9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2RlbGV0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9kZWxldGVfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9kZWxldGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X3NjYW5fYnVmZmVyCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eV9zY2FuX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3NjYW5fYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9zY2FuX2J1ZmZlcgorI2VuZGlmCisKKyNpZmRlZiB5eV9zY2FuX3N0cmluZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9zdHJpbmdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zY2FuX3N0cmluZyBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9zdHJpbmcKKyNlbmRpZgorCisjaWZkZWYgeXlfc2Nhbl9ieXRlcworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfc2Nhbl9ieXRlc19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3NjYW5fYnl0ZXMgY21HY2NEZXBmaWxlX3l5X3NjYW5fYnl0ZXMKKyNlbmRpZgorCisjaWZkZWYgeXlfaW5pdF9idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2luaXRfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfaW5pdF9idWZmZXIgY21HY2NEZXBmaWxlX3l5X2luaXRfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X2ZsdXNoX2J1ZmZlcgorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlfZmx1c2hfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfZmx1c2hfYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9mbHVzaF9idWZmZXIKKyNlbmRpZgorCisjaWZkZWYgeXlfbG9hZF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfbG9hZF9idWZmZXJfc3RhdGUgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5X3N3aXRjaF90b19idWZmZXIKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5X3N3aXRjaF90b19idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zd2l0Y2hfdG9fYnVmZmVyIGNtR2NjRGVwZmlsZV95eV9zd2l0Y2hfdG9fYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5cHVzaF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5cHVzaF9idWZmZXJfc3RhdGVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXB1c2hfYnVmZmVyX3N0YXRlIGNtR2NjRGVwZmlsZV95eXB1c2hfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5cG9wX2J1ZmZlcl9zdGF0ZQorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlwb3BfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlwb3BfYnVmZmVyX3N0YXRlIGNtR2NjRGVwZmlsZV95eXBvcF9idWZmZXJfc3RhdGUKKyNlbmRpZgorCisjaWZkZWYgeXllbnN1cmVfYnVmZmVyX3N0YWNrCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWVuc3VyZV9idWZmZXJfc3RhY2tfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWVuc3VyZV9idWZmZXJfc3RhY2sgY21HY2NEZXBmaWxlX3l5ZW5zdXJlX2J1ZmZlcl9zdGFjaworI2VuZGlmCisKKyNpZmRlZiB5eWxleAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlsZXhfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWxleCBjbUdjY0RlcGZpbGVfeXlsZXgKKyNlbmRpZgorCisjaWZkZWYgeXlyZXN0YXJ0CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXJlc3RhcnRfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXJlc3RhcnQgY21HY2NEZXBmaWxlX3l5cmVzdGFydAorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9pbml0CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9pbml0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdCBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdAorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9pbml0X2V4dHJhCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9pbml0X2V4dHJhX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdF9leHRyYSBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9kZXN0cm95CisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWxleF9kZXN0cm95X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfZGVzdHJveSBjbUdjY0RlcGZpbGVfeXlsZXhfZGVzdHJveQorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9kZWJ1ZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9kZWJ1ZyBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWcKKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfZGVidWcKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5c2V0X2RlYnVnX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfZGVidWcgY21HY2NEZXBmaWxlX3l5c2V0X2RlYnVnCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2V4dHJhCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWdldF9leHRyYV9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2V4dHJhIGNtR2NjRGVwZmlsZV95eWdldF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eXNldF9leHRyYQorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9leHRyYSBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmEKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfaW4KKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5Z2V0X2luX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfaW4gY21HY2NEZXBmaWxlX3l5Z2V0X2luCisjZW5kaWYKKworI2lmZGVmIHl5c2V0X2luCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXNldF9pbl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2luIGNtR2NjRGVwZmlsZV95eXNldF9pbgorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9vdXQKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5Z2V0X291dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X291dCBjbUdjY0RlcGZpbGVfeXlnZXRfb3V0CisjZW5kaWYKKworI2lmZGVmIHl5c2V0X291dAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlzZXRfb3V0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfb3V0IGNtR2NjRGVwZmlsZV95eXNldF9vdXQKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfbGVuZworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfbGVuZ19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2xlbmcgY21HY2NEZXBmaWxlX3l5Z2V0X2xlbmcKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfdGV4dAorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfdGV4dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X3RleHQgY21HY2NEZXBmaWxlX3l5Z2V0X3RleHQKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfbGluZW5vCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWdldF9saW5lbm9fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9saW5lbm8gY21HY2NEZXBmaWxlX3l5Z2V0X2xpbmVubworI2VuZGlmCisKKyNpZmRlZiB5eXNldF9saW5lbm8KKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5c2V0X2xpbmVub19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2xpbmVubyBjbUdjY0RlcGZpbGVfeXlzZXRfbGluZW5vCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2NvbHVtbgorI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlnZXRfY29sdW1uX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfY29sdW1uIGNtR2NjRGVwZmlsZV95eWdldF9jb2x1bW4KKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfY29sdW1uCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXNldF9jb2x1bW5fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9jb2x1bW4gY21HY2NEZXBmaWxlX3l5c2V0X2NvbHVtbgorI2VuZGlmCisKKyNpZmRlZiB5eXdyYXAKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5d3JhcF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5d3JhcCBjbUdjY0RlcGZpbGVfeXl3cmFwCisjZW5kaWYKKworI2lmZGVmIHl5YWxsb2MKKyNkZWZpbmUgY21HY2NEZXBmaWxlX3l5YWxsb2NfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWFsbG9jIGNtR2NjRGVwZmlsZV95eWFsbG9jCisjZW5kaWYKKworI2lmZGVmIHl5cmVhbGxvYworI2RlZmluZSBjbUdjY0RlcGZpbGVfeXlyZWFsbG9jX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlyZWFsbG9jIGNtR2NjRGVwZmlsZV95eXJlYWxsb2MKKyNlbmRpZgorCisjaWZkZWYgeXlmcmVlCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eWZyZWVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWZyZWUgY21HY2NEZXBmaWxlX3l5ZnJlZQorI2VuZGlmCisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKworLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5UX0gKKyNkZWZpbmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuCisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNpZm5kZWYgU0laRV9NQVgKKyNkZWZpbmUgU0laRV9NQVggICAgICAgICAgICAgICAofihzaXplX3QpMCkKKyNlbmRpZgorCisjZW5kaWYgLyogISBDOTkgKi8KKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMrKyBoZWFkZXJzLiAqLworCisvKiBUT0RPOiB0aGlzIGlzIGFsd2F5cyBkZWZpbmVkLCBzbyBpbmxpbmUgaXQgKi8KKyNkZWZpbmUgeXljb25zdCBjb25zdAorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMworI2RlZmluZSB5eW5vcmV0dXJuIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxzZQorI2RlZmluZSB5eW5vcmV0dXJuCisjZW5kaWYKKworLyogQW4gb3BhcXVlIHBvaW50ZXIuICovCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0NBTk5FUl9UCit0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworI2VuZGlmCisKKy8qIEZvciBjb252ZW5pZW5jZSwgdGhlc2UgdmFycyAocGx1cyB0aGUgYmlzb24gdmFycyBmYXIgYmVsb3cpCisgICBhcmUgbWFjcm9zIGluIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KKyNkZWZpbmUgeXlpbiB5eWctPnl5aW5fcgorI2RlZmluZSB5eW91dCB5eWctPnl5b3V0X3IKKyNkZWZpbmUgeXlleHRyYSB5eWctPnl5ZXh0cmFfcgorI2RlZmluZSB5eWxlbmcgeXlnLT55eWxlbmdfcgorI2RlZmluZSB5eXRleHQgeXlnLT55eXRleHRfcgorI2RlZmluZSB5eWxpbmVubyAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19saW5lbm8pCisjZGVmaW5lIHl5Y29sdW1uIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2NvbHVtbikKKyNkZWZpbmUgeXlfZmxleF9kZWJ1ZyB5eWctPnl5X2ZsZXhfZGVidWdfcgorCisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0laRQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQorI2RlZmluZSBZWV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KKworCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJaW50IHl5X2J1Zl9zaXplOworCisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9uX2NoYXJzOworCisJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCisJICogZGVsZXRlIGl0LgorCSAqLworCWludCB5eV9pc19vdXJfYnVmZmVyOworCisJLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICovCisJaW50IHl5X2lzX2ludGVyYWN0aXZlOworCisJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOworCisgICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCisKKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKK3ZvaWQgeXlyZXN0YXJ0ICggRklMRSAqaW5wdXRfZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyICggWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyICggRklMRSAqZmlsZSwgaW50IHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoIFlZX0JVRkZFUl9TVEFURSBiICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoIFlZX0JVRkZFUl9TVEFURSBiICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKCBZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICggY2hhciAqYmFzZSwgeXlfc2l6ZV90IHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoIGNvbnN0IGNoYXIgKnl5X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKCBjb25zdCBjaGFyICpieXRlcywgaW50IGxlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkICp5eWFsbG9jICggeXlfc2l6ZV90ICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICp5eXJlYWxsb2MgKCB2b2lkICosIHl5X3NpemVfdCAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eWZyZWUgKCB2b2lkICogLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIGNtR2NjRGVwZmlsZV95eXdyYXAoeXlzY2FubmVyKSAoLypDT05TVENPTkQqLzEpCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHRfcgorCisjaWZkZWYgWVlfSEVBREVSX0VYUE9SVF9TVEFSVF9DT05ESVRJT05TCisjZGVmaW5lIElOSVRJQUwgMAorCisjZW5kaWYKKworI2lmbmRlZiBZWV9FWFRSQV9UWVBFCisjZGVmaW5lIFlZX0VYVFJBX1RZUEUgdm9pZCAqCisjZW5kaWYKKworaW50IHl5bGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKKworaW50IHl5bGV4X2luaXRfZXh0cmEgKCBZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCwgeXlzY2FuX3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRfZGVidWcgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9kZWJ1ZyAoIGludCBkZWJ1Z19mbGFnICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9leHRyYSAoIFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5Z2V0X2luICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfaW4gICggRklMRSAqIF9pbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqeXlnZXRfb3V0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoIEZJTEUgKiBfb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisJCQlpbnQgeXlnZXRfbGVuZyAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitjaGFyICp5eWdldF90ZXh0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdldF9saW5lbm8gKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9saW5lbm8gKCBpbnQgX2xpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdldF9jb2x1bW4gICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfY29sdW1uICggaW50IF9jb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHl5d3JhcCAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vsc2UKK2V4dGVybiBpbnQgeXl3cmFwICggeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgLCB5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoIGNvbnN0IGNoYXIgKiAsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBpbnQgeXlsZXggKHl5c2Nhbl90IHl5c2Nhbm5lcik7CisKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXggKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLworCisjdW5kZWYgWVlfTkVXX0ZJTEUKKyN1bmRlZiBZWV9GTFVTSF9CVUZGRVIKKyN1bmRlZiB5eV9zZXRfYm9sCisjdW5kZWYgeXlfbmV3X2J1ZmZlcgorI3VuZGVmIHl5X3NldF9pbnRlcmFjdGl2ZQorI3VuZGVmIFlZX0RPX0JFRk9SRV9BQ1RJT04KKworI2lmZGVmIFlZX0RFQ0xfSVNfT1VSUworI3VuZGVmIFlZX0RFQ0xfSVNfT1VSUworI3VuZGVmIFlZX0RFQ0wKKyNlbmRpZgorCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eV9jcmVhdGVfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X2NyZWF0ZV9idWZmZXIKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlfZGVsZXRlX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eV9kZWxldGVfYnVmZmVyCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X3NjYW5fYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X3NjYW5fYnVmZmVyCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X3NjYW5fc3RyaW5nX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X3NjYW5fc3RyaW5nCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X3NjYW5fYnl0ZXNfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfc2Nhbl9ieXRlcworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eV9pbml0X2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eV9pbml0X2J1ZmZlcgorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eV9mbHVzaF9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfZmx1c2hfYnVmZmVyCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X2xvYWRfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X2xvYWRfYnVmZmVyX3N0YXRlCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5X3N3aXRjaF90b19idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfc3dpdGNoX3RvX2J1ZmZlcgorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXB1c2hfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5cHVzaF9idWZmZXJfc3RhdGUKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlwb3BfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5cG9wX2J1ZmZlcl9zdGF0ZQorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWVuc3VyZV9idWZmZXJfc3RhY2tfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXllbnN1cmVfYnVmZmVyX3N0YWNrCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5bGV4X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5bGV4CisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5cmVzdGFydF9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eXJlc3RhcnQKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdF9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWxleF9pbml0CisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5bGV4X2luaXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlsZXhfaW5pdF9leHRyYQorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWxleF9kZXN0cm95X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5bGV4X2Rlc3Ryb3kKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfZGVidWcKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlzZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfZGVidWcKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfZXh0cmEKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlzZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfZXh0cmEKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfaW5fQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfaW4KKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlzZXRfaW5fQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfaW4KKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfb3V0X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X291dAorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXNldF9vdXRfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfb3V0CisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5Z2V0X2xlbmdfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfbGVuZworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWdldF90ZXh0X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X3RleHQKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfbGluZW5vX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X2xpbmVubworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXNldF9saW5lbm9fQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfbGluZW5vCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5Z2V0X2NvbHVtbl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWdldF9jb2x1bW4KKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlzZXRfY29sdW1uX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5c2V0X2NvbHVtbgorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXdyYXBfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXl3cmFwCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5Z2V0X2x2YWxfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfbHZhbAorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eXNldF9sdmFsX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5c2V0X2x2YWwKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlnZXRfbGxvY19BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWdldF9sbG9jCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5c2V0X2xsb2NfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfbGxvYworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWFsbG9jX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5YWxsb2MKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlyZWFsbG9jX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5cmVhbGxvYworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWZyZWVfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlmcmVlCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5dGV4dF9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eXRleHQKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlsZW5nX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5bGVuZworI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eWluX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5aW4KKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlvdXRfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlvdXQKKyNlbmRpZgorI2lmbmRlZiBjbUdjY0RlcGZpbGVfeXlfZmxleF9kZWJ1Z19BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eV9mbGV4X2RlYnVnCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5bGluZW5vX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5bGluZW5vCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5dGFibGVzX2Zsb2FkX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5dGFibGVzX2Zsb2FkCisjZW5kaWYKKyNpZm5kZWYgY21HY2NEZXBmaWxlX3l5dGFibGVzX2Rlc3Ryb3lfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXl0YWJsZXNfZGVzdHJveQorI2VuZGlmCisjaWZuZGVmIGNtR2NjRGVwZmlsZV95eVRBQkxFU19OQU1FX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5VEFCTEVTX05BTUUKKyNlbmRpZgorCisjdW5kZWYgY21HY2NEZXBmaWxlX3l5SU5fSEVBREVSCisjZW5kaWYgLyogY21HY2NEZXBmaWxlX3l5SEVBREVSX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5pbi5sIGIvU291cmNlL0xleGVyUGFyc2VyL2NtR2NjRGVwZmlsZUxleGVyLmluLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmODU3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUdjY0RlcGZpbGVMZXhlci5pbi5sCkBAIC0wLDAgKzEsNzIgQEAKKyV7CisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisKKy8qIElXWVUgcHJhZ21hOiBub19mb3J3YXJkX2RlY2xhcmUgeXlndXRzX3QgKi8KKworI2lmbmRlZiBfX2NsYW5nX2FuYWx5emVyX18gLyogU3VwcHJlc3MgY2xhbmcgc2Nhbi1idWlsZCB3YXJuaW5ncyAqLworCisjaW5jbHVkZSA8Y21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CislfQorCislb3B0aW9uIHByZWZpeD0iY21HY2NEZXBmaWxlX3l5IgorJW9wdGlvbiBub3l5d3JhcAorJW9wdGlvbiByZWVudHJhbnQKKyVwb2ludGVyCisKK1dTUEFDRSBbIFx0XQorTkVXTElORSBccj9cbgorCislJQorXCR7Mn0gICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5lc2NhcGUgdGhlIGRvbGxhciBzaWduLgorICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXh0cmEtPmFkZFRvQ3VycmVudFBhdGgoIiQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorXFwjICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5lc2NhcGUgdGhlIGhhc2guCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCgiIyIpOworICAgICAgICAgICAgICAgICAgICAgICB9CisoXFxcXCkqXFxbIF0gICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyTisxIGJhY2tzbGFzaGVzIHBsdXMgc3BhY2UgLT4gTiBiYWNrc2xhc2hlcyBwbHVzIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjID0gKHN0cmxlbih5eXRleHQpIC0gMSkgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHMoYywgJ1xcJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgcy5wdXNoX2JhY2soJyAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5hZGRUb0N1cnJlbnRQYXRoKHMuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKyhcXFxcKStbIF0gICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDJOIGJhY2tzbGFzaGVzIHBsdXMgc3BhY2UgLT4gMk4gYmFja3NsYXNoZXMsIGVuZCBvZiBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eXRleHRbc3RybGVuKHl5dGV4dCkgLSAxXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCh5eXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXh0cmEtPm5ld0RlcGVuZGVuY3koKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQore1dTUEFDRX0qXFx7TkVXTElORX0gICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBsaW5lIGNvbnRpbnVhdGlvbiBlbmRzIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdEZXBlbmRlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KK3tORVdMSU5FfSAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgbmV3bGluZSBlbmRzIHRoZSBjdXJyZW50IGZpbGUgbmFtZSBhbmQgdGhlIGN1cnJlbnQgcnVsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdFbnRyeSgpOworICAgICAgICAgICAgICAgICAgICAgICB9Cis6e1dTUEFDRX0rICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGNvbG9uIGZvbGxvd2VkIGJ5IHNwYWNlIGVuZHMgdGhlIHJ1bGVzIGFuZCBzdGFydHMgYSBuZXcgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdEZXBlbmRlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KK3tXU1BBQ0V9KyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIHNlcGFyYXRlZCBieSBibG9ja3Mgb2Ygd2hpdGVzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICB5eWV4dHJhLT5uZXdSdWxlT3JEZXBlbmRlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAgIH0KK1thLXpBLVowLTkrLC9fLn4oKX17JT1AXHg1Qlx4NUQhXHg4MC1ceEZGLV0rIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3QgYSBzcGFuIG9mIHBsYWluIHRleHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCh5eXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICB9CisuICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3QgYW4gb3RoZXJ3aXNlIHVubWF0Y2hlZCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgeXlleHRyYS0+YWRkVG9DdXJyZW50UGF0aCh5eXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICB9CisKKyUlCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZW5kaWYgLyogX19jbGFuZ19hbmFseXplcl9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmMgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmMKaW5kZXggMTVkY2RhMC4uZWM3NDI0YyAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtTGlzdEZpbGVMZXhlci5jCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuYwpAQCAtMjc4Nyw3ICsyNzg3LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogY21MaXN0RmlsZUxleGVyX1Rva2VuKiBjbUxpc3RGaWxlTGV4ZXJfU2NhbihjbUxpc3RGaWxlTGV4ZXIqIGxleGVyKQogewotICBpZiAoIWxleGVyLT5maWxlKSB7CisgIGlmICghbGV4ZXItPmZpbGUgJiYgIWxleGVyLT5zdHJpbmdfYnVmZmVyKSB7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgaWYgKGNtTGlzdEZpbGVMZXhlcl95eWxleChsZXhlci0+c2Nhbm5lciwgbGV4ZXIpKSB7CkBAIC0yODAxLDIxICsyODAxLDEzIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGxvbmcgY21MaXN0RmlsZUxleGVyX0dldEN1cnJlbnRMaW5lKGNtTGlzdEZpbGVMZXhlciogbGV4ZXIpCiB7Ci0gIGlmIChsZXhlci0+ZmlsZSkgewotICAgIHJldHVybiBsZXhlci0+bGluZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gMDsKLSAgfQorICByZXR1cm4gbGV4ZXItPmxpbmU7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogbG9uZyBjbUxpc3RGaWxlTGV4ZXJfR2V0Q3VycmVudENvbHVtbihjbUxpc3RGaWxlTGV4ZXIqIGxleGVyKQogewotICBpZiAobGV4ZXItPmZpbGUpIHsKLSAgICByZXR1cm4gbGV4ZXItPmNvbHVtbjsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gMDsKLSAgfQorICByZXR1cm4gbGV4ZXItPmNvbHVtbjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmluLmwgYi9Tb3VyY2UvTGV4ZXJQYXJzZXIvY21MaXN0RmlsZUxleGVyLmluLmwKaW5kZXggZmRmMTRkMi4uOTRjZjhhNSAxMDA2NDQKLS0tIGEvU291cmNlL0xleGVyUGFyc2VyL2NtTGlzdEZpbGVMZXhlci5pbi5sCisrKyBiL1NvdXJjZS9MZXhlclBhcnNlci9jbUxpc3RGaWxlTGV4ZXIuaW4ubApAQCAtNTAwLDcgKzUwMCw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGNtTGlzdEZpbGVMZXhlcl9Ub2tlbiogY21MaXN0RmlsZUxleGVyX1NjYW4oY21MaXN0RmlsZUxleGVyKiBsZXhlcikKIHsKLSAgaWYgKCFsZXhlci0+ZmlsZSkgeworICBpZiAoIWxleGVyLT5maWxlICYmICFsZXhlci0+c3RyaW5nX2J1ZmZlcikgewogICAgIHJldHVybiAwOwogICB9CiAgIGlmIChjbUxpc3RGaWxlTGV4ZXJfeXlsZXgobGV4ZXItPnNjYW5uZXIsIGxleGVyKSkgewpAQCAtNTE0LDIxICs1MTQsMTMgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogbG9uZyBjbUxpc3RGaWxlTGV4ZXJfR2V0Q3VycmVudExpbmUoY21MaXN0RmlsZUxleGVyKiBsZXhlcikKIHsKLSAgaWYgKGxleGVyLT5maWxlKSB7Ci0gICAgcmV0dXJuIGxleGVyLT5saW5lOwotICB9IGVsc2UgewotICAgIHJldHVybiAwOwotICB9CisgIHJldHVybiBsZXhlci0+bGluZTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBsb25nIGNtTGlzdEZpbGVMZXhlcl9HZXRDdXJyZW50Q29sdW1uKGNtTGlzdEZpbGVMZXhlciogbGV4ZXIpCiB7Ci0gIGlmIChsZXhlci0+ZmlsZSkgewotICAgIHJldHVybiBsZXhlci0+Y29sdW1uOwotICB9IGVsc2UgewotICAgIHJldHVybiAwOwotICB9CisgIHJldHVybiBsZXhlci0+Y29sdW1uOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9RdERpYWxvZy9DTWFrZUxpc3RzLnR4dAppbmRleCBjYjg5ZDE5Li5lNmQ2YjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1F0RGlhbG9nL0NNYWtlTGlzdHMudHh0CkBAIC0zLDExMSArMyw3OSBAQAogCiBwcm9qZWN0KFF0RGlhbG9nKQogQ01ha2VfT1BUSU9OQUxfQ09NUE9ORU5UKGNtYWtlLWd1aSkKLWZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUKQotaWYgKFF0NVdpZGdldHNfRk9VTkQpCi0gIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtRdDVXaWRnZXRzX0lOQ0xVREVfRElSU30pCi0gIGFkZF9kZWZpbml0aW9ucygke1F0NVdpZGdldHNfREVGSU5JVE9OU30pCi0gIG1hY3JvKHF0NF93cmFwX3VpKQotICAgIHF0NV93cmFwX3VpKCR7QVJHTn0pCi0gIGVuZG1hY3JvKCkKLSAgbWFjcm8ocXQ0X3dyYXBfY3BwKQotICAgIHF0NV93cmFwX2NwcCgke0FSR059KQotICBlbmRtYWNybygpCi0gIG1hY3JvKHF0NF9hZGRfcmVzb3VyY2VzKQotICAgIHF0NV9hZGRfcmVzb3VyY2VzKCR7QVJHTn0pCi0gIGVuZG1hY3JvKCkKK2ZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFJFUVVJUkVEKQogCi0gIHNldChDTWFrZV9RVF9MSUJSQVJJRVMgJHtRdDVXaWRnZXRzX0xJQlJBUklFU30pCi0gIHNldChRVF9RVE1BSU5fTElCUkFSWSAke1F0NUNvcmVfUVRNQUlOX0xJQlJBUklFU30pCitzZXQoQ01ha2VfUVRfRVhUUkFfTElCUkFSSUVTKQogCi0gICMgVHJ5IHRvIGZpbmQgdGhlIHBhY2thZ2UgV2luRXh0cmFzIGZvciB0aGUgdGFzayBiYXIgcHJvZ3Jlc3MKLSAgaWYoV0lOMzIpCi0gICAgZmluZF9wYWNrYWdlKFF0NVdpbkV4dHJhcyBRVUlFVCkKLSAgICBpZiAoUXQ1V2luRXh0cmFzX0ZPVU5EKQotICAgICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke1F0NVdpbkV4dHJhc19JTkNMVURFX0RJUlN9KQotICAgICAgYWRkX2RlZmluaXRpb25zKC1EUVRfV0lORVhUUkFTKQotICAgICAgbGlzdChBUFBFTkQgQ01ha2VfUVRfTElCUkFSSUVTICR7UXQ1V2luRXh0cmFzX0xJQlJBUklFU30pCi0gICAgZW5kaWYoKQorIyBUcnkgdG8gZmluZCB0aGUgcGFja2FnZSBXaW5FeHRyYXMgZm9yIHRoZSB0YXNrIGJhciBwcm9ncmVzcworaWYoV0lOMzIpCisgIGZpbmRfcGFja2FnZShRdDVXaW5FeHRyYXMgUVVJRVQpCisgIGlmIChRdDVXaW5FeHRyYXNfRk9VTkQpCisgICAgYWRkX2RlZmluaXRpb25zKC1EUVRfV0lORVhUUkFTKQorICAgIGxpc3QoQVBQRU5EIENNYWtlX1FUX0VYVFJBX0xJQlJBUklFUyBRdDU6OldpbkV4dHJhcykKICAgZW5kaWYoKQorZW5kaWYoKQogCi0gICMgUmVtb3ZlIHRoaXMgd2hlbiB0aGUgbWluaW11bSB2ZXJzaW9uIG9mIFF0IGlzIDQuNi4KLSAgYWRkX2RlZmluaXRpb25zKC1EUVRfRElTQUJMRV9ERVBSRUNBVEVEX0JFRk9SRT0wKQorc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9ICR7UXQ1V2lkZ2V0c19FWEVDVVRBQkxFX0NPTVBJTEVfRkxBR1N9IikKIAotICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gJHtRdDVXaWRnZXRzX0VYRUNVVEFCTEVfQ09NUElMRV9GTEFHU30iKQoraWYoQ01ha2VfUVRfU1RBVElDX1FYY2JJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVMpCisgIGxpc3QoQVBQRU5EIENNYWtlX1FUX0VYVFJBX0xJQlJBUklFUyAke0NNYWtlX1FUX1NUQVRJQ19RWGNiSW50ZWdyYXRpb25QbHVnaW5fTElCUkFSSUVTfSkKKyAgc2V0X3Byb3BlcnR5KFNPVVJDRSBDTWFrZVNldHVwLmN4eAorICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgVVNFX1FYY2JJbnRlZ3JhdGlvblBsdWdpbikKK2VuZGlmKCkKIAotICBpZihDTWFrZV9RVF9TVEFUSUNfUVhjYkludGVncmF0aW9uUGx1Z2luX0xJQlJBUklFUykKLSAgICBsaXN0KEFQUEVORCBDTWFrZV9RVF9MSUJSQVJJRVMgJHtDTWFrZV9RVF9TVEFUSUNfUVhjYkludGVncmF0aW9uUGx1Z2luX0xJQlJBUklFU30pCi0gICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBDTWFrZVNldHVwLmN4eAotICAgICAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyBVU0VfUVhjYkludGVncmF0aW9uUGx1Z2luKQotICBlbmRpZigpCitpZihDTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVMpCisgIGxpc3QoQVBQRU5EIENNYWtlX1FUX0VYVFJBX0xJQlJBUklFUyAke0NNYWtlX1FUX1NUQVRJQ19RV2luZG93c0ludGVncmF0aW9uUGx1Z2luX0xJQlJBUklFU30pCisgIHNldF9wcm9wZXJ0eShTT1VSQ0UgQ01ha2VTZXR1cC5jeHgKKyAgICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIFVTRV9RV2luZG93c0ludGVncmF0aW9uUGx1Z2luKQorZW5kaWYoKQogCi0gIGlmKENNYWtlX1FUX1NUQVRJQ19RV2luZG93c0ludGVncmF0aW9uUGx1Z2luX0xJQlJBUklFUykKLSAgICBsaXN0KEFQUEVORCBDTWFrZV9RVF9MSUJSQVJJRVMgJHtDTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVN9KQotICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgQ01ha2VTZXR1cC5jeHgKLSAgICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgVVNFX1FXaW5kb3dzSW50ZWdyYXRpb25QbHVnaW4pCi0gIGVuZGlmKCkKLQotICAjIFdlIG5lZWQgdG8gaW5zdGFsbCBwbGF0Zm9ybSBwbHVnaW4gYW5kIGFkZCBxdC5jb25mIGZvciBRdDUgb24gTWFjIGFuZCBXaW5kb3dzLgotICAjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIFF0NSBDTWFrZSBzY3JpcHRzLCBidXQgdW5mb3J0dW5hdGVseQotICAjIFF0NSBzdXBwb3J0IGlzIG1pc3NpbmcgdGhlcmUuCi0gIGlmKENNYWtlX0lOU1RBTExfREVQRU5ERU5DSUVTIEFORCAoQVBQTEUgT1IgV0lOMzIpKQotICAgIG1hY3JvKGluc3RhbGxfcXQ1X3BsdWdpbiBfcXRfcGx1Z2luX25hbWUgX3F0X3BsdWdpbnNfdmFyKQotICAgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShfcXRfcGx1Z2luX3BhdGggIiR7X3F0X3BsdWdpbl9uYW1lfSIgTE9DQVRJT04pCi0gICAgICBpZihFWElTVFMgIiR7X3F0X3BsdWdpbl9wYXRofSIpCi0gICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX3F0X3BsdWdpbl9maWxlICIke19xdF9wbHVnaW5fcGF0aH0iIE5BTUUpCi0gICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX3F0X3BsdWdpbl90eXBlICIke19xdF9wbHVnaW5fcGF0aH0iIFBBVEgpCi0gICAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX3F0X3BsdWdpbl90eXBlICIke19xdF9wbHVnaW5fdHlwZX0iIE5BTUUpCi0gICAgICAgIGlmKEFQUExFKQotICAgICAgICAgIHNldChfcXRfcGx1Z2luX2RpciAiUGx1Z0lucyIpCi0gICAgICAgIGVsc2VpZihXSU4zMikKLSAgICAgICAgICBzZXQoX3F0X3BsdWdpbl9kaXIgInBsdWdpbnMiKQotICAgICAgICBlbmRpZigpCi0gICAgICAgIHNldChfcXRfcGx1Z2luX2Rlc3QgIiR7X3F0X3BsdWdpbl9kaXJ9LyR7X3F0X3BsdWdpbl90eXBlfSIpCi0gICAgICAgIGluc3RhbGwoRklMRVMgIiR7X3F0X3BsdWdpbl9wYXRofSIKLSAgICAgICAgICBERVNUSU5BVElPTiAiJHtfcXRfcGx1Z2luX2Rlc3R9IgotICAgICAgICAgICR7Q09NUE9ORU5UfSkKLSAgICAgICAgc2V0KCR7X3F0X3BsdWdpbnNfdmFyfQotICAgICAgICAgICIkeyR7X3F0X3BsdWdpbnNfdmFyfX07XCRFTlZ7REVTVERJUn1cJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtfcXRfcGx1Z2luX2Rlc3R9LyR7X3F0X3BsdWdpbl9maWxlfSIpCi0gICAgICBlbHNlKCkKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUVQgcGx1Z2luICR7X3F0X3BsdWdpbl9uYW1lfSBub3QgZm91bmQiKQorIyBXZSBuZWVkIHRvIGluc3RhbGwgcGxhdGZvcm0gcGx1Z2luIGFuZCBhZGQgcXQuY29uZiBmb3IgUXQ1IG9uIE1hYyBhbmQgV2luZG93cy4KKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgUXQ1IENNYWtlIHNjcmlwdHMsIGJ1dCB1bmZvcnR1bmF0ZWx5CisjIFF0NSBzdXBwb3J0IGlzIG1pc3NpbmcgdGhlcmUuCitpZihDTWFrZV9JTlNUQUxMX0RFUEVOREVOQ0lFUyBBTkQgKEFQUExFIE9SIFdJTjMyKSkKKyAgbWFjcm8oaW5zdGFsbF9xdDVfcGx1Z2luIF9xdF9wbHVnaW5fbmFtZSBfcXRfcGx1Z2luc192YXIpCisgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShfcXRfcGx1Z2luX3BhdGggIiR7X3F0X3BsdWdpbl9uYW1lfSIgTE9DQVRJT04pCisgICAgaWYoRVhJU1RTICIke19xdF9wbHVnaW5fcGF0aH0iKQorICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfcXRfcGx1Z2luX2ZpbGUgIiR7X3F0X3BsdWdpbl9wYXRofSIgTkFNRSkKKyAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX3F0X3BsdWdpbl90eXBlICIke19xdF9wbHVnaW5fcGF0aH0iIFBBVEgpCisgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9xdF9wbHVnaW5fdHlwZSAiJHtfcXRfcGx1Z2luX3R5cGV9IiBOQU1FKQorICAgICAgaWYoQVBQTEUpCisgICAgICAgIHNldChfcXRfcGx1Z2luX2RpciAiUGx1Z0lucyIpCisgICAgICBlbHNlaWYoV0lOMzIpCisgICAgICAgIHNldChfcXRfcGx1Z2luX2RpciAicGx1Z2lucyIpCiAgICAgICBlbmRpZigpCi0gICAgZW5kbWFjcm8oKQotICAgIGlmKEFQUExFKQotICAgICAgaW5zdGFsbF9xdDVfcGx1Z2luKCJRdDU6OlFDb2NvYUludGVncmF0aW9uUGx1Z2luIiBRVF9QTFVHSU5TKQotICAgICAgZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3F0LmNvbmYiCi0gICAgICAgICJbUGF0aHNdXG5QbHVnaW5zID0gJHtfcXRfcGx1Z2luX2Rpcn1cbiIpCi0gICAgICBpbnN0YWxsKEZJTEVTICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcXQuY29uZiIKLSAgICAgICAgREVTVElOQVRJT04gIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L1Jlc291cmNlcyIKKyAgICAgIHNldChfcXRfcGx1Z2luX2Rlc3QgIiR7X3F0X3BsdWdpbl9kaXJ9LyR7X3F0X3BsdWdpbl90eXBlfSIpCisgICAgICBpbnN0YWxsKEZJTEVTICIke19xdF9wbHVnaW5fcGF0aH0iCisgICAgICAgIERFU1RJTkFUSU9OICIke19xdF9wbHVnaW5fZGVzdH0iCiAgICAgICAgICR7Q09NUE9ORU5UfSkKLSAgICBlbHNlaWYoV0lOMzIgQU5EIE5PVCBDTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVMpCi0gICAgICBpbnN0YWxsX3F0NV9wbHVnaW4oIlF0NTo6UVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbiIgUVRfUExVR0lOUykKLSAgICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9xdC5jb25mIgotICAgICAgICAiW1BhdGhzXVxuUGx1Z2lucyA9IC4uLyR7X3F0X3BsdWdpbl9kaXJ9XG4iKQotICAgICAgaW5zdGFsbChGSUxFUyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3F0LmNvbmYiCi0gICAgICAgIERFU1RJTkFUSU9OIGJpbgotICAgICAgICAke0NPTVBPTkVOVH0pCisgICAgICBzZXQoJHtfcXRfcGx1Z2luc192YXJ9CisgICAgICAgICIkeyR7X3F0X3BsdWdpbnNfdmFyfX07XCRFTlZ7REVTVERJUn1cJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtfcXRfcGx1Z2luX2Rlc3R9LyR7X3F0X3BsdWdpbl9maWxlfSIpCisgICAgZWxzZSgpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJRVCBwbHVnaW4gJHtfcXRfcGx1Z2luX25hbWV9IG5vdCBmb3VuZCIpCiAgICAgZW5kaWYoKQorICBlbmRtYWNybygpCisgIGlmKEFQUExFKQorICAgIGluc3RhbGxfcXQ1X3BsdWdpbigiUXQ1OjpRQ29jb2FJbnRlZ3JhdGlvblBsdWdpbiIgUVRfUExVR0lOUykKKyAgICBmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcXQuY29uZiIKKyAgICAgICJbUGF0aHNdXG5QbHVnaW5zID0gJHtfcXRfcGx1Z2luX2Rpcn1cbiIpCisgICAgaW5zdGFsbChGSUxFUyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3F0LmNvbmYiCisgICAgICBERVNUSU5BVElPTiAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vUmVzb3VyY2VzIgorICAgICAgJHtDT01QT05FTlR9KQorICBlbHNlaWYoV0lOMzIgQU5EIE5PVCBDTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVMpCisgICAgaW5zdGFsbF9xdDVfcGx1Z2luKCJRdDU6OlFXaW5kb3dzSW50ZWdyYXRpb25QbHVnaW4iIFFUX1BMVUdJTlMpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3F0LmNvbmYiCisgICAgICAiW1BhdGhzXVxuUGx1Z2lucyA9IC4uLyR7X3F0X3BsdWdpbl9kaXJ9XG4iKQorICAgIGluc3RhbGwoRklMRVMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9xdC5jb25mIgorICAgICAgREVTVElOQVRJT04gYmluCisgICAgICAke0NPTVBPTkVOVH0pCiAgIGVuZGlmKCkKK2VuZGlmKCkKIAotICBpZihUQVJHRVQgUXQ1OjpDb3JlKQotICAgIGdldF9wcm9wZXJ0eShfUXQ1X0NvcmVfTE9DQVRJT04gVEFSR0VUIFF0NTo6Q29yZSBQUk9QRVJUWSBMT0NBVElPTikKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KFF0X0JJTl9ESVIgIiR7X1F0NV9Db3JlX0xPQ0FUSU9OfSIgUEFUSCkKLSAgICBpZihBUFBMRSkKLSAgICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoUXRfQklOX0RJUiAiJHtRdF9CSU5fRElSfSIgUEFUSCkKLSAgICBlbmRpZigpCi0gIGVuZGlmKCkKLWVsc2UoKQotICBzZXQoUVRfTUlOX1ZFUlNJT04gIjQuNC4wIikKLSAgZmluZF9wYWNrYWdlKFF0NCBSRVFVSVJFRCkKLSAgaWYoTk9UIFFUNF9GT1VORCkKLSAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkZhaWxlZCB0byBmaW5kIFF0IDQuNCBvciBncmVhdGVyLiIpCi0gICAgcmV0dXJuKCkKLSAgZW5kaWYoKQotCi0gIGluY2x1ZGUoJHtRVF9VU0VfRklMRX0pCi0KLSAgc2V0KENNYWtlX1FUX0xJQlJBUklFUyAke1FUX0xJQlJBUklFU30pCi0KK2dldF9wcm9wZXJ0eShfUXQ1X0NvcmVfTE9DQVRJT04gVEFSR0VUIFF0NTo6Q29yZSBQUk9QRVJUWSBMT0NBVElPTikKK2dldF9maWxlbmFtZV9jb21wb25lbnQoUXRfQklOX0RJUiAiJHtfUXQ1X0NvcmVfTE9DQVRJT059IiBQQVRIKQoraWYoQVBQTEUpCisgIGdldF9maWxlbmFtZV9jb21wb25lbnQoUXRfQklOX0RJUiAiJHtRdF9CSU5fRElSfSIgUEFUSCkKIGVuZGlmKCkKIAogc2V0KFNSQ1MKQEAgLTExNiw2ICs4NCw3IEBACiAgIENNYWtlU2V0dXAuY3h4CiAgIENNYWtlU2V0dXBEaWFsb2cuY3h4CiAgIENNYWtlU2V0dXBEaWFsb2cuaAorICBDb21waWxlcnMuaAogICBGaXJzdENvbmZpZ3VyZS5jeHgKICAgRmlyc3RDb25maWd1cmUuaAogICBRQ01ha2UuY3h4CkBAIC0xMjksNyArOTgsNyBAQAogICBXYXJuaW5nTWVzc2FnZXNEaWFsb2cuY3h4CiAgIFdhcm5pbmdNZXNzYWdlc0RpYWxvZy5oCiAgICkKLVFUNF9XUkFQX1VJKFVJX1NSQ1MKK3F0NV93cmFwX3VpKFVJX1NSQ1MKICAgQ01ha2VTZXR1cERpYWxvZy51aQogICBDb21waWxlcnMudWkKICAgQ3Jvc3NDb21waWxlci51aQpAQCAtMTM3LDcgKzEwNiw3IEBACiAgIFJlZ2V4RXhwbG9yZXIudWkKICAgV2FybmluZ01lc3NhZ2VzRGlhbG9nLnVpCiAgICkKLVFUNF9XUkFQX0NQUChNT0NfU1JDUworcXQ1X3dyYXBfY3BwKE1PQ19TUkNTCiAgIEFkZENhY2hlRW50cnkuaAogICBDb21waWxlcnMuaAogICBDTWFrZVNldHVwRGlhbG9nLmgKQEAgLTE0OCwxNCArMTE3LDI0IEBACiAgIFJlZ2V4RXhwbG9yZXIuaAogICBXYXJuaW5nTWVzc2FnZXNEaWFsb2cuaAogICApCi1RVDRfQUREX1JFU09VUkNFUyhSQ19TUkNTIENNYWtlU2V0dXAucXJjKQorcXQ1X2FkZF9yZXNvdXJjZXMoUkNfU1JDUyBDTWFrZVNldHVwLnFyYykKIAotc2V0KFNSQ1MgJHtTUkNTfSAke1VJX1NSQ1N9ICR7TU9DX1NSQ1N9ICR7UkNfU1JDU30pCitpZiAoRkFMU0UpICMgQ01ha2UncyBib290c3RyYXAgYmluYXJ5IGRvZXMgbm90IHN1cHBvcnQgYXV0b21vYworICBzZXQoQ01BS0VfQVVUT01PQyAxKQorICBzZXQoQ01BS0VfQVVUT1JDQyAxKQorICBzZXQoQ01BS0VfQVVUT1VJQyAxKQorZWxzZSAoKQorICBsaXN0KEFQUEVORCBTUkNTCisgICAgJHtVSV9TUkNTfQorICAgICR7TU9DX1NSQ1N9CisgICAgJHtSQ19TUkNTfSkKK2VuZGlmICgpCisKIGlmKFdJTjMyKQotICBzZXQoU1JDUyAke1NSQ1N9IENNYWtlU2V0dXAucmMpCisgIGxpc3QoQVBQRU5EIFNSQ1MgQ01ha2VTZXR1cC5yYykKIGVuZGlmKCkKIGlmKEFQUExFKQotICBzZXQoU1JDUyAke1NSQ1N9IENNYWtlU2V0dXAuaWNucykKKyAgbGlzdChBUFBFTkQgU1JDUyBDTWFrZVNldHVwLmljbnMpCiAgIHNldChNQUNPU1hfQlVORExFX0lDT05fRklMRSBDTWFrZVNldHVwLmljbnMpCiAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhDTWFrZVNldHVwLmljbnMgUFJPUEVSVElFUwogICAgIE1BQ09TWF9QQUNLQUdFX0xPQ0FUSU9OIFJlc291cmNlcykKQEAgLTE3MiwxMiArMTUxLDE2IEBACiBzZXQoQ01BS0VfSU5DTFVERV9DVVJSRU5UX0RJUiBPTikKIAogYWRkX2V4ZWN1dGFibGUoY21ha2UtZ3VpIFdJTjMyIE1BQ09TWF9CVU5ETEUgJHtTUkNTfSAke01BTklGRVNUX0ZJTEV9KQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNtYWtlLWd1aSBDTWFrZUxpYiAke1FUX1FUTUFJTl9MSUJSQVJZfSAke0NNYWtlX1FUX0xJQlJBUklFU30pCit0YXJnZXRfbGlua19saWJyYXJpZXMoY21ha2UtZ3VpIENNYWtlTGliIFF0NTo6Q29yZSBRdDU6OldpZGdldHMgJHtDTWFrZV9RVF9FWFRSQV9MSUJSQVJJRVN9KQogCiBpZihXSU4zMikKICAgdGFyZ2V0X3NvdXJjZXMoY21ha2UtZ3VpIFBSSVZBVEUgJDxUQVJHRVRfT0JKRUNUUzpDTWFrZVZlcnNpb24+KQogZW5kaWYoKQogCitpZihDTWFrZV9KT0JfUE9PTF9MSU5LX0JJTikKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBjbWFrZS1ndWkgUFJPUEVSVFkgSk9CX1BPT0xfTElOSyAibGluay1iaW4iKQorZW5kaWYoKQorCiAjIGNtYWtlLWd1aSBoYXMgbm90IGJlZW4gdXBkYXRlZCBmb3IgYGluY2x1ZGUtd2hhdC15b3UtdXNlYC4KICMgQmxvY2sgdGhlIHRvb2wgdW50aWwgdGhpcyBpcyBkb25lLgogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGNtYWtlLWd1aSBQUk9QRVJUSUVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cC5jeHggYi9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cC5jeHgKaW5kZXggZWU4MWE3ZC4uN2VmNWE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXAuY3h4CisrKyBiL1NvdXJjZS9RdERpYWxvZy9DTWFrZVNldHVwLmN4eApAQCAtMTE1LDE0ICsxMTUsNiBAQAogICBRVGV4dENvZGVjKiB1dGY4X2NvZGVjID0gUVRleHRDb2RlYzo6Y29kZWNGb3JOYW1lKCJVVEYtOCIpOwogICBRVGV4dENvZGVjOjpzZXRDb2RlY0ZvckxvY2FsZSh1dGY4X2NvZGVjKTsKIAotI2lmIFFUX1ZFUlNJT04gPCAweDA1MDAwMAotICAvLyBjbGVhbiBvdXQgc3RhbmRhcmQgUXQgcGF0aHMgZm9yIHBsdWdpbnMsIHdoaWNoIHdlIGRvbid0IHVzZSBhbnl3YXkKLSAgLy8gd2hlbiBjcmVhdGluZyBNYWMgYnVuZGxlcywgaXQgcG90ZW50aWFsbHkgY2F1c2VzIHByb2JsZW1zCi0gIGZvcmVhY2ggKFFTdHJpbmcgcCwgUUFwcGxpY2F0aW9uOjpsaWJyYXJ5UGF0aHMoKSkgewotICAgIFFBcHBsaWNhdGlvbjo6cmVtb3ZlTGlicmFyeVBhdGgocCk7Ci0gIH0KLSNlbmRpZgotCiAgIC8vIHRlbGwgdGhlIGNtYWtlIGxpYnJhcnkgd2hlcmUgY21ha2UgaXMKICAgUURpciBjbUV4ZWNEaXIoUUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvbkRpclBhdGgoKSk7CiAjaWYgZGVmaW5lZChRX09TX01BQykKQEAgLTIwMSw4ICsxOTMsNyBAQAogICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGFyZ3NbMV0udG9Mb2NhbDhCaXQoKS5kYXRhKCkpOwogCiAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIENNYWtlQ2FjaGUudHh0Ci0gICAgICBzdGQ6OnN0cmluZyBidWlsZEZpbGVQYXRoID0KLSAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgiQ01ha2VDYWNoZS50eHQiLCBmaWxlUGF0aC5jX3N0cigpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGJ1aWxkRmlsZVBhdGggPSBjbVN0ckNhdChmaWxlUGF0aCwgIi9DTWFrZUNhY2hlLnR4dCIpOwogCiAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCBpcyBhIENNYWtlQ2FjaGUudHh0IGZpbGUKICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZmlsZVBhdGgpID09ICJDTWFrZUNhY2hlLnR4dCIgJiYKQEAgLTIxMSw4ICsyMDIsNyBAQAogICAgICAgfQogCiAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIENNYWtlTGlzdHMudHh0Ci0gICAgICBzdGQ6OnN0cmluZyBzcmNGaWxlUGF0aCA9Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoIkNNYWtlTGlzdHMudHh0IiwgZmlsZVBhdGguY19zdHIoKSk7CisgICAgICBzdGQ6OnN0cmluZyBzcmNGaWxlUGF0aCA9IGNtU3RyQ2F0KGZpbGVQYXRoLCAiL0NNYWtlTGlzdHMudHh0Iik7CiAKICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGJ1aWxkRmlsZVBhdGguY19zdHIoKSkpIHsKICAgICAgICAgZGlhbG9nLnNldEJpbmFyeURpcmVjdG9yeShRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KApkaWZmIC0tZ2l0IGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuY3h4IGIvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuY3h4CmluZGV4IDQzNmE5MDQuLmZjYzg0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdERpYWxvZy9DTWFrZVNldHVwRGlhbG9nLmN4eAorKysgYi9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cERpYWxvZy5jeHgKQEAgLTIsNiArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJDTWFrZVNldHVwRGlhbG9nLmgiCiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlIDxRQ2xvc2VFdmVudD4KICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFEZXNrdG9wU2VydmljZXM+CkBAIC0zOSwyMyArNDEsMjEgQEAKIAogUUNNYWtlVGhyZWFkOjpRQ01ha2VUaHJlYWQoUU9iamVjdCogcCkKICAgOiBRVGhyZWFkKHApCi0gICwgQ01ha2VJbnN0YW5jZShudWxscHRyKQogewogfQogCiBRQ01ha2UqIFFDTWFrZVRocmVhZDo6Y21ha2VJbnN0YW5jZSgpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5DTWFrZUluc3RhbmNlOworICByZXR1cm4gdGhpcy0+Q01ha2VJbnN0YW5jZS5nZXQoKTsKIH0KIAogdm9pZCBRQ01ha2VUaHJlYWQ6OnJ1bigpCiB7Ci0gIHRoaXMtPkNNYWtlSW5zdGFuY2UgPSBuZXcgUUNNYWtlOworICB0aGlzLT5DTWFrZUluc3RhbmNlID0gY206Om1ha2VfdW5pcXVlPFFDTWFrZT4oKTsKICAgLy8gZW1pdCB0aGF0IHRoaXMgY21ha2UgdGhyZWFkIGlzIHJlYWR5IGZvciB1c2UKICAgZW1pdCB0aGlzLT5jbWFrZUluaXRpYWxpemVkKCk7CiAgIHRoaXMtPmV4ZWMoKTsKLSAgZGVsZXRlIHRoaXMtPkNNYWtlSW5zdGFuY2U7Ci0gIHRoaXMtPkNNYWtlSW5zdGFuY2UgPSBudWxscHRyOworICB0aGlzLT5DTWFrZUluc3RhbmNlLnJlc2V0KCk7CiB9CiAKIENNYWtlU2V0dXBEaWFsb2c6OkNNYWtlU2V0dXBEaWFsb2coKQpAQCAtMTUyLDkgKzE1Miw2IEBACiAgIHRoaXMtPldhcm5VbmluaXRpYWxpemVkQWN0aW9uID0KICAgICBPcHRpb25zTWVudS0+YWRkQWN0aW9uKHRyKCImV2FybiBVbmluaXRpYWxpemVkICgtLXdhcm4tdW5pbml0aWFsaXplZCkiKSk7CiAgIHRoaXMtPldhcm5VbmluaXRpYWxpemVkQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gIHRoaXMtPldhcm5VbnVzZWRBY3Rpb24gPQotICAgIE9wdGlvbnNNZW51LT5hZGRBY3Rpb24odHIoIiZXYXJuIFVudXNlZCAoLS13YXJuLXVudXNlZC12YXJzKSIpKTsKLSAgdGhpcy0+V2FyblVudXNlZEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOwogCiAgIFFBY3Rpb24qIGRlYnVnQWN0aW9uID0gT3B0aW9uc01lbnUtPmFkZEFjdGlvbih0cigiJkRlYnVnIE91dHB1dCIpKTsKICAgZGVidWdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKQEAgLTI5MCw5ICsyODcsNiBAQAogICBRT2JqZWN0Ojpjb25uZWN0KHRoaXMtPldhcm5VbmluaXRpYWxpemVkQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwKICAgICAgICAgICAgICAgICAgICB0aGlzLT5DTWFrZVRocmVhZC0+Y21ha2VJbnN0YW5jZSgpLAogICAgICAgICAgICAgICAgICAgIFNMT1Qoc2V0V2FyblVuaW5pdGlhbGl6ZWRNb2RlKGJvb2wpKSk7Ci0gIFFPYmplY3Q6OmNvbm5lY3QodGhpcy0+V2FyblVudXNlZEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksCi0gICAgICAgICAgICAgICAgICAgdGhpcy0+Q01ha2VUaHJlYWQtPmNtYWtlSW5zdGFuY2UoKSwKLSAgICAgICAgICAgICAgICAgICBTTE9UKHNldFdhcm5VbnVzZWRNb2RlKGJvb2wpKSk7CiAKICAgaWYgKCF0aGlzLT5Tb3VyY2VEaXJlY3RvcnktPnRleHQoKS5pc0VtcHR5KCkgfHwKICAgICAgICF0aGlzLT5CaW5hcnlEaXJlY3RvcnktPmxpbmVFZGl0KCktPnRleHQoKS5pc0VtcHR5KCkpIHsKQEAgLTU5NSw3ICs1ODksMTEgQEAKIAogICBRRGlhbG9nIGRpYWxvZzsKICAgUUZvbnRNZXRyaWNzIG1ldCh0aGlzLT5mb250KCkpOworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAxMSwgMCkKKyAgaW50IG1zZ1dpZHRoID0gbWV0Lmhvcml6b250YWxBZHZhbmNlKG1zZyk7CisjZWxzZQogICBpbnQgbXNnV2lkdGggPSBtZXQud2lkdGgobXNnKTsKKyNlbmRpZgogICBkaWFsb2cuc2V0TWluaW11bVNpemUobXNnV2lkdGggLyAxNSwgMjApOwogICBkaWFsb2cuc2V0V2luZG93VGl0bGUodHIoIkhlbHAiKSk7CiAgIFFWQm94TGF5b3V0KiBsID0gbmV3IFFWQm94TGF5b3V0KCZkaWFsb2cpOwpAQCAtODA0LDEyICs4MDIsMTkgQEAKICAgICAgIFFTdHJpbmcgc3lzdGVtVmVyc2lvbiA9IGRpYWxvZy5nZXRTeXN0ZW1WZXJzaW9uKCk7CiAgICAgICBtLT5pbnNlcnRQcm9wZXJ0eShRQ01ha2VQcm9wZXJ0eTo6U1RSSU5HLCAiQ01BS0VfU1lTVEVNX1ZFUlNJT04iLAogICAgICAgICAgICAgICAgICAgICAgICAgdHIoIkNNYWtlIFN5c3RlbSBWZXJzaW9uIiksIHN5c3RlbVZlcnNpb24sIGZhbHNlKTsKKyAgICAgIFFTdHJpbmcgc3lzdGVtUHJvY2Vzc29yID0gZGlhbG9nLmdldFN5c3RlbVByb2Nlc3NvcigpOworICAgICAgbS0+aW5zZXJ0UHJvcGVydHkoUUNNYWtlUHJvcGVydHk6OlNUUklORywgIkNNQUtFX1NZU1RFTV9QUk9DRVNTT1IiLAorICAgICAgICAgICAgICAgICAgICAgICAgdHIoIkNNYWtlIFN5c3RlbSBQcm9jZXNzb3IiKSwgc3lzdGVtUHJvY2Vzc29yLCBmYWxzZSk7CiAgICAgICBRU3RyaW5nIGN4eENvbXBpbGVyID0gZGlhbG9nLmdldENYWENvbXBpbGVyKCk7Ci0gICAgICBtLT5pbnNlcnRQcm9wZXJ0eShRQ01ha2VQcm9wZXJ0eTo6RklMRVBBVEgsICJDTUFLRV9DWFhfQ09NUElMRVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgdHIoIkNYWCBjb21waWxlci4iKSwgY3h4Q29tcGlsZXIsIGZhbHNlKTsKKyAgICAgIGlmICghY3h4Q29tcGlsZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIG0tPmluc2VydFByb3BlcnR5KFFDTWFrZVByb3BlcnR5OjpGSUxFUEFUSCwgIkNNQUtFX0NYWF9DT01QSUxFUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRyKCJDWFggY29tcGlsZXIuIiksIGN4eENvbXBpbGVyLCBmYWxzZSk7CisgICAgICB9CiAgICAgICBRU3RyaW5nIGNDb21waWxlciA9IGRpYWxvZy5nZXRDQ29tcGlsZXIoKTsKLSAgICAgIG0tPmluc2VydFByb3BlcnR5KFFDTWFrZVByb3BlcnR5OjpGSUxFUEFUSCwgIkNNQUtFX0NfQ09NUElMRVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgdHIoIkMgY29tcGlsZXIuIiksIGNDb21waWxlciwgZmFsc2UpOworICAgICAgaWYgKCFjQ29tcGlsZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIG0tPmluc2VydFByb3BlcnR5KFFDTWFrZVByb3BlcnR5OjpGSUxFUEFUSCwgIkNNQUtFX0NfQ09NUElMRVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0cigiQyBjb21waWxlci4iKSwgY0NvbXBpbGVyLCBmYWxzZSk7CisgICAgICB9CiAgICAgfSBlbHNlIGlmIChkaWFsb2cuY3Jvc3NDb21waWxlclRvb2xDaGFpbkZpbGUoKSkgewogICAgICAgUVN0cmluZyB0b29sY2hhaW5GaWxlID0gZGlhbG9nLmdldENyb3NzQ29tcGlsZXJUb29sQ2hhaW5GaWxlKCk7CiAgICAgICBtLT5pbnNlcnRQcm9wZXJ0eShRQ01ha2VQcm9wZXJ0eTo6RklMRVBBVEgsICJDTUFLRV9UT09MQ0hBSU5fRklMRSIsCkBAIC0xMDQ5LDE0ICsxMDU0LDcgQEAKICAgICB0aGlzLT5HZW5lcmF0ZUFjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7CiAgICAgdGhpcy0+T3BlblByb2plY3RCdXR0b24tPnNldEVuYWJsZWQoZmFsc2UpOwogICAgIHRoaXMtPkdlbmVyYXRlQnV0dG9uLT5zZXRUZXh0KHRyKCImU3RvcCIpKTsKLSAgfSBlbHNlIGlmIChzID09IFJlYWR5Q29uZmlndXJlKSB7Ci0gICAgdGhpcy0+c2V0RW5hYmxlZFN0YXRlKHRydWUpOwotICAgIHRoaXMtPkdlbmVyYXRlQnV0dG9uLT5zZXRFbmFibGVkKHRydWUpOwotICAgIHRoaXMtPkdlbmVyYXRlQWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOwotICAgIHRoaXMtPkNvbmZpZ3VyZUJ1dHRvbi0+c2V0RW5hYmxlZCh0cnVlKTsKLSAgICB0aGlzLT5Db25maWd1cmVCdXR0b24tPnNldFRleHQodHIoIiZDb25maWd1cmUiKSk7Ci0gICAgdGhpcy0+R2VuZXJhdGVCdXR0b24tPnNldFRleHQodHIoIiZHZW5lcmF0ZSIpKTsKLSAgfSBlbHNlIGlmIChzID09IFJlYWR5R2VuZXJhdGUpIHsKKyAgfSBlbHNlIGlmIChzID09IFJlYWR5Q29uZmlndXJlIHx8IHMgPT0gUmVhZHlHZW5lcmF0ZSkgewogICAgIHRoaXMtPnNldEVuYWJsZWRTdGF0ZSh0cnVlKTsKICAgICB0aGlzLT5HZW5lcmF0ZUJ1dHRvbi0+c2V0RW5hYmxlZCh0cnVlKTsKICAgICB0aGlzLT5HZW5lcmF0ZUFjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKQEAgLTEyMDYsNyArMTIwNCw3IEBACiAKIHZvaWQgQ01ha2VTZXR1cERpYWxvZzo6ZG9PdXRwdXRDb250ZXh0TWVudShRUG9pbnQgcHQpCiB7Ci0gIFFNZW51KiBtZW51ID0gdGhpcy0+T3V0cHV0LT5jcmVhdGVTdGFuZGFyZENvbnRleHRNZW51KCk7CisgIHN0ZDo6dW5pcXVlX3B0cjxRTWVudT4gbWVudSh0aGlzLT5PdXRwdXQtPmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoKSk7CiAKICAgbWVudS0+YWRkU2VwYXJhdG9yKCk7CiAgIG1lbnUtPmFkZEFjdGlvbih0cigiRmluZC4uLiIpLCB0aGlzLCBTTE9UKGRvT3V0cHV0RmluZERpYWxvZygpKSwKQEAgLTEyMjAsNyArMTIxOCw2IEBACiAgICAgICAgICAgICAgICAgICBRS2V5U2VxdWVuY2UoUXQ6OktleV9GOCkpOwogCiAgIG1lbnUtPmV4ZWModGhpcy0+T3V0cHV0LT5tYXBUb0dsb2JhbChwdCkpOwotICBkZWxldGUgbWVudTsKIH0KIAogdm9pZCBDTWFrZVNldHVwRGlhbG9nOjpkb091dHB1dEZpbmREaWFsb2coKQpkaWZmIC0tZ2l0IGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuaCBiL1NvdXJjZS9RdERpYWxvZy9DTWFrZVNldHVwRGlhbG9nLmgKaW5kZXggZjIzYWVlNi4uOTE0YmUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL0NNYWtlU2V0dXBEaWFsb2cuaAorKysgYi9Tb3VyY2UvUXREaWFsb2cvQ01ha2VTZXR1cERpYWxvZy5oCkBAIC0zLDYgKzMsOCBAQAogI2lmbmRlZiBDTWFrZVNldHVwRGlhbG9nX2gKICNkZWZpbmUgQ01ha2VTZXR1cERpYWxvZ19oCiAKKyNpbmNsdWRlIDxtZW1vcnk+CisKICNpbmNsdWRlICJRQ01ha2UuaCIKICNpbmNsdWRlIDxRRXZlbnRMb29wPgogI2luY2x1ZGUgPFFNYWluV2luZG93PgpAQCAtMTA5LDcgKzExMSw2IEBACiAgIFFBY3Rpb24qIENvbmZpZ3VyZUFjdGlvbjsKICAgUUFjdGlvbiogR2VuZXJhdGVBY3Rpb247CiAgIFFBY3Rpb24qIFdhcm5VbmluaXRpYWxpemVkQWN0aW9uOwotICBRQWN0aW9uKiBXYXJuVW51c2VkQWN0aW9uOwogICBRQWN0aW9uKiBJbnN0YWxsRm9yQ29tbWFuZExpbmVBY3Rpb247CiAgIFN0YXRlIEN1cnJlbnRTdGF0ZTsKIApAQCAtMTQzLDcgKzE0NCw3IEBACiAKIHByb3RlY3RlZDoKICAgdmlydHVhbCB2b2lkIHJ1bigpOwotICBRQ01ha2UqIENNYWtlSW5zdGFuY2U7CisgIHN0ZDo6dW5pcXVlX3B0cjxRQ01ha2U+IENNYWtlSW5zdGFuY2U7CiB9OwogCiAjZW5kaWYgLy8gQ01ha2VTZXR1cERpYWxvZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvRmlyc3RDb25maWd1cmUuY3h4IGIvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmN4eAppbmRleCBjYTI4YjE5Li4zYzI0YjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvRmlyc3RDb25maWd1cmUuY3h4CisrKyBiL1NvdXJjZS9RdERpYWxvZy9GaXJzdENvbmZpZ3VyZS5jeHgKQEAgLTEwLDggKzEwLDEyIEBACiAKICNpbmNsdWRlICJDb21waWxlcnMuaCIKIAotU3RhcnRDb21waWxlclNldHVwOjpTdGFydENvbXBpbGVyU2V0dXAoUVdpZGdldCogcCkKK1N0YXJ0Q29tcGlsZXJTZXR1cDo6U3RhcnRDb21waWxlclNldHVwKFFTdHJpbmcgZGVmYXVsdEdlbmVyYXRvclBsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBkZWZhdWx0R2VuZXJhdG9yVG9vbHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFXaWRnZXQqIHApCiAgIDogUVdpemFyZFBhZ2UocCkKKyAgLCBEZWZhdWx0R2VuZXJhdG9yUGxhdGZvcm0oc3RkOjptb3ZlKGRlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybSkpCisgICwgRGVmYXVsdEdlbmVyYXRvclRvb2xzZXQoc3RkOjptb3ZlKGRlZmF1bHRHZW5lcmF0b3JUb29sc2V0KSkKIHsKICAgUVZCb3hMYXlvdXQqIGwgPSBuZXcgUVZCb3hMYXlvdXQodGhpcyk7CiAgIGwtPmFkZFdpZGdldChuZXcgUUxhYmVsKHRyKCJTcGVjaWZ5IHRoZSBnZW5lcmF0b3IgZm9yIHRoaXMgcHJvamVjdCIpKSk7CkBAIC02OCw2ICs3MiwxMCBAQAogICBUb29sc2V0ID0gbmV3IFFMaW5lRWRpdChmcmFtZSk7CiAgIGwtPmFkZFdpZGdldChUb29sc2V0KTsKIAorICAvLyBEZWZhdWx0IHRvIENNQUtFX0dFTkVSQVRPUl9UT09MU0VUIGVudiB2YXIgaWYgc2V0CisgIGlmICghRGVmYXVsdEdlbmVyYXRvclRvb2xzZXQuaXNFbXB0eSgpKSB7CisgICAgdGhpcy0+VG9vbHNldC0+c2V0VGV4dChEZWZhdWx0R2VuZXJhdG9yVG9vbHNldCk7CisgIH0KICAgcmV0dXJuIGZyYW1lOwogfQogCkBAIC0xOTksNiArMjA3LDE0IEBACiAKICAgICB0aGlzLT5QbGF0Zm9ybU9wdGlvbnMtPmFkZEl0ZW1zKHBsYXRmb3JtX2xpc3QpOwogICAgIFBsYXRmb3JtRnJhbWUtPnNob3coKTsKKworICAgIC8vIERlZmF1bHQgdG8gZ2VuZXJhdG9yIHBsYXRmb3JtIGZyb20gZW52aXJvbm1lbnQKKyAgICBpZiAoIURlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybS5pc0VtcHR5KCkpIHsKKyAgICAgIGludCBwbGF0Zm9ybV9pbmRleCA9IHBsYXRmb3Jtcy5pbmRleE9mKERlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybSk7CisgICAgICBpZiAocGxhdGZvcm1faW5kZXggIT0gLTEpIHsKKyAgICAgICAgdGhpcy0+UGxhdGZvcm1PcHRpb25zLT5zZXRDdXJyZW50SW5kZXgocGxhdGZvcm1faW5kZXgpOworICAgICAgfQorICAgIH0KICAgfSBlbHNlIHsKICAgICBQbGF0Zm9ybUZyYW1lLT5oaWRlKCk7CiAgIH0KQEAgLTQyMSw4ICs0MzcsMjYgQEAKIAogRmlyc3RDb25maWd1cmU6OkZpcnN0Q29uZmlndXJlKCkKIHsKKyAgY29uc3QgY2hhciogZW52X2dlbmVyYXRvciA9IHN0ZDo6Z2V0ZW52KCJDTUFLRV9HRU5FUkFUT1IiKTsKKyAgY29uc3QgY2hhciogZW52X2dlbmVyYXRvcl9wbGF0Zm9ybSA9IG51bGxwdHI7CisgIGNvbnN0IGNoYXIqIGVudl9nZW5lcmF0b3JfdG9vbHNldCA9IG51bGxwdHI7CisgIGlmIChlbnZfZ2VuZXJhdG9yICYmIHN0ZDo6c3RybGVuKGVudl9nZW5lcmF0b3IpKSB7CisgICAgbURlZmF1bHRHZW5lcmF0b3IgPSBlbnZfZ2VuZXJhdG9yOworICAgIGVudl9nZW5lcmF0b3JfcGxhdGZvcm0gPSBzdGQ6OmdldGVudigiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIik7CisgICAgZW52X2dlbmVyYXRvcl90b29sc2V0ID0gc3RkOjpnZXRlbnYoIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIik7CisgIH0KKworICBpZiAoIWVudl9nZW5lcmF0b3JfcGxhdGZvcm0pIHsKKyAgICBlbnZfZ2VuZXJhdG9yX3BsYXRmb3JtID0gIiI7CisgIH0KKworICBpZiAoIWVudl9nZW5lcmF0b3JfdG9vbHNldCkgeworICAgIGVudl9nZW5lcmF0b3JfdG9vbHNldCA9ICIiOworICB9CisKICAgLy8gdGhpcy0+c2V0T3B0aW9uKFFXaXphcmQ6OkhhdmVGaW5pc2hCdXR0b25PbkVhcmx5UGFnZXMsIHRydWUpOwotICB0aGlzLT5tU3RhcnRDb21waWxlclNldHVwUGFnZSA9IG5ldyBTdGFydENvbXBpbGVyU2V0dXAodGhpcyk7CisgIHRoaXMtPm1TdGFydENvbXBpbGVyU2V0dXBQYWdlID0gbmV3IFN0YXJ0Q29tcGlsZXJTZXR1cCgKKyAgICBlbnZfZ2VuZXJhdG9yX3BsYXRmb3JtLCBlbnZfZ2VuZXJhdG9yX3Rvb2xzZXQsIHRoaXMpOwogICB0aGlzLT5zZXRQYWdlKFN0YXJ0LCB0aGlzLT5tU3RhcnRDb21waWxlclNldHVwUGFnZSk7CiAgIFFPYmplY3Q6OmNvbm5lY3QodGhpcy0+bVN0YXJ0Q29tcGlsZXJTZXR1cFBhZ2UsIFNJR05BTChzZWxlY3Rpb25DaGFuZ2VkKCkpLAogICAgICAgICAgICAgICAgICAgIHRoaXMsIFNMT1QocmVzdGFydCgpKSk7CkBAIC01MDQsNiArNTM4LDE3IEBACiAgIHRoaXMtPm1Dcm9zc0NvbXBpbGVyU2V0dXBQYWdlLT5zZXRJbmNsdWRlTW9kZSgKICAgICBzZXR0aW5ncy52YWx1ZSgiSW5jbHVkZU1vZGUiLCAwKS50b0ludCgpKTsKICAgc2V0dGluZ3MuZW5kR3JvdXAoKTsKKworICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgYXBwbGljYXRpb24gc2V0dGluZ3MgYmVjYXVzZS4uLgorICAvLyAtIHRoZXkncmUgaGFyZGVyIHRvIHNldAorICAvLyAtIHNldHRpbmdzIGFsd2F5cyBleGlzdCBhZnRlciB0aGUgcHJvZ3JhbSBpcyBydW4gb25jZSwgc28gdGhlIGVudmlyb25tZW50CisgIC8vICAgICB2YXJpYWJsZXMgd291bGQgbmV2ZXIgYmUgdXNlZCBvdGhlcndpc2UKKyAgLy8gLSBwbGF0Zm9ybSBhbmQgdG9vbHNldCBhcmUgcG9wdWxhdGVkIG9ubHkgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHNvCisgIC8vICAgICB0aGlzIHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyB0YWtlbiBmcm9tIGVudmlyb25tZW50LCB3aGlsZSB0aGUKKyAgLy8gICAgIGdlbmVyYXRvciBpcyB0YWtlbiBmcm9tIGFwcGxpY2F0aW9uIHNldHRpbmdzCisgIGlmICghbURlZmF1bHRHZW5lcmF0b3IuaXNFbXB0eSgpKSB7CisgICAgdGhpcy0+bVN0YXJ0Q29tcGlsZXJTZXR1cFBhZ2UtPnNldEN1cnJlbnRHZW5lcmF0b3IobURlZmF1bHRHZW5lcmF0b3IpOworICB9CiB9CiAKIHZvaWQgRmlyc3RDb25maWd1cmU6OnNhdmVUb1NldHRpbmdzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9GaXJzdENvbmZpZ3VyZS5oIGIvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmgKaW5kZXggZDFkYjViZi4uYzI2ZjQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmgKKysrIGIvU291cmNlL1F0RGlhbG9nL0ZpcnN0Q29uZmlndXJlLmgKQEAgLTI5LDcgKzI5LDggQEAKIHsKICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgU3RhcnRDb21waWxlclNldHVwKFFXaWRnZXQqIHApOworICBTdGFydENvbXBpbGVyU2V0dXAoUVN0cmluZyBkZWZhdWx0R2VuZXJhdG9yUGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGRlZmF1bHRHZW5lcmF0b3JUb29sc2V0LCBRV2lkZ2V0KiBwKTsKICAgflN0YXJ0Q29tcGlsZXJTZXR1cCgpOwogICB2b2lkIHNldEdlbmVyYXRvcnMoc3RkOjp2ZWN0b3I8Y21ha2U6OkdlbmVyYXRvckluZm8+IGNvbnN0JiBnZW5zKTsKICAgdm9pZCBzZXRDdXJyZW50R2VuZXJhdG9yKGNvbnN0IFFTdHJpbmcmIGdlbik7CkBAIC02NCw2ICs2NSw3IEBACiAgIFFTdHJpbmdMaXN0IEdlbmVyYXRvcnNTdXBwb3J0aW5nUGxhdGZvcm07CiAgIFFNdWx0aU1hcDxRU3RyaW5nLCBRU3RyaW5nPiBHZW5lcmF0b3JTdXBwb3J0ZWRQbGF0Zm9ybXM7CiAgIFFNYXA8UVN0cmluZywgUVN0cmluZz4gR2VuZXJhdG9yRGVmYXVsdFBsYXRmb3JtOworICBRU3RyaW5nIERlZmF1bHRHZW5lcmF0b3JQbGF0Zm9ybSwgRGVmYXVsdEdlbmVyYXRvclRvb2xzZXQ7CiAKIHByaXZhdGU6CiAgIFFGcmFtZSogQ3JlYXRlVG9vbHNldFdpZGdldHMoKTsKQEAgLTE5Nyw2ICsxOTksNyBAQAogICBOYXRpdmVDb21waWxlclNldHVwKiBtTmF0aXZlQ29tcGlsZXJTZXR1cFBhZ2U7CiAgIENyb3NzQ29tcGlsZXJTZXR1cCogbUNyb3NzQ29tcGlsZXJTZXR1cFBhZ2U7CiAgIFRvb2xjaGFpbkNvbXBpbGVyU2V0dXAqIG1Ub29sY2hhaW5Db21waWxlclNldHVwUGFnZTsKKyAgUVN0cmluZyBtRGVmYXVsdEdlbmVyYXRvcjsKIH07CiAKICNlbmRpZiAvLyBGaXJzdENvbmZpZ3VyZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlLmN4eCBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuY3h4CmluZGV4IGI2MDhmY2IuLjYwOTAyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuY3h4CisrKyBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuY3h4CkBAIC0yLDEwICsyLDEzIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJRQ01ha2UuaCIKIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKwogI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UURpcj4KIAogI2luY2x1ZGUgImNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0xOCw3ICsyMSw2IEBACiAgIDogUU9iamVjdChwKQogewogICB0aGlzLT5XYXJuVW5pbml0aWFsaXplZE1vZGUgPSBmYWxzZTsKLSAgdGhpcy0+V2FyblVudXNlZE1vZGUgPSBmYWxzZTsKICAgcVJlZ2lzdGVyTWV0YVR5cGU8UUNNYWtlUHJvcGVydHk+KCk7CiAgIHFSZWdpc3Rlck1ldGFUeXBlPFFDTWFrZVByb3BlcnR5TGlzdD4oKTsKIApAQCAtMzQsNyArMzYsOCBAQAogICBjbVN5c3RlbVRvb2xzOjpTZXRTdGRlcnJDYWxsYmFjaygKICAgICBbdGhpc10oc3RkOjpzdHJpbmcgY29uc3QmIG1zZykgeyB0aGlzLT5zdGRlcnJDYWxsYmFjayhtc2cpOyB9KTsKIAotICB0aGlzLT5DTWFrZUluc3RhbmNlID0gbmV3IGNtYWtlKGNtYWtlOjpSb2xlUHJvamVjdCwgY21TdGF0ZTo6UHJvamVjdCk7CisgIHRoaXMtPkNNYWtlSW5zdGFuY2UgPQorICAgIGNtOjptYWtlX3VuaXF1ZTxjbWFrZT4oY21ha2U6OlJvbGVQcm9qZWN0LCBjbVN0YXRlOjpQcm9qZWN0KTsKICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+U2V0Q01ha2VFZGl0Q29tbWFuZCgKICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUdVSUNvbW1hbmQoKSk7CiAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPlNldFByb2dyZXNzQ2FsbGJhY2soCkBAIC01NCwxMSArNTcsNyBAQAogICB9CiB9CiAKLVFDTWFrZTo6flFDTWFrZSgpCi17Ci0gIGRlbGV0ZSB0aGlzLT5DTWFrZUluc3RhbmNlOwotICAvLyBjbUR5bmFtaWNMb2FkZXI6OkZsdXNoQ2FjaGUoKTsKLX0KK1FDTWFrZTo6flFDTWFrZSgpID0gZGVmYXVsdDsKIAogdm9pZCBRQ01ha2U6OmxvYWRDYWNoZShjb25zdCBRU3RyaW5nJiBkaXIpCiB7CkBAIC0xMDAsMjkgKzk5LDI4IEBACiAKICAgICBRQ01ha2VQcm9wZXJ0eUxpc3QgcHJvcHMgPSB0aGlzLT5wcm9wZXJ0aWVzKCk7CiAgICAgZW1pdCB0aGlzLT5wcm9wZXJ0aWVzQ2hhbmdlZChwcm9wcyk7Ci0gICAgY29uc3QgY2hhciogaG9tZURpciA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0hPTUVfRElSRUNUT1JZIik7CisgICAgY21Qcm9wIGhvbWVEaXIgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9IT01FX0RJUkVDVE9SWSIpOwogICAgIGlmIChob21lRGlyKSB7Ci0gICAgICBzZXRTb3VyY2VEaXJlY3RvcnkoUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChob21lRGlyKSk7CisgICAgICBzZXRTb3VyY2VEaXJlY3RvcnkoUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChob21lRGlyLT5jX3N0cigpKSk7CiAgICAgfQotICAgIGNvbnN0IGNoYXIqIGdlbiA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOworICAgIGNtUHJvcCBnZW4gPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9HRU5FUkFUT1IiKTsKICAgICBpZiAoZ2VuKSB7CiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyogZXh0cmFHZW4gPQogICAgICAgICBzdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9FWFRSQV9HRU5FUkFUT1IiKTsKICAgICAgIHN0ZDo6c3RyaW5nIGN1ckdlbiA9CiAgICAgICAgIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3I6OkNyZWF0ZUZ1bGxHZW5lcmF0b3JOYW1lKAotICAgICAgICAgIGdlbiwgZXh0cmFHZW4gPyAqZXh0cmFHZW4gOiAiIik7CisgICAgICAgICAgKmdlbiwgZXh0cmFHZW4gPyAqZXh0cmFHZW4gOiAiIik7CiAgICAgICB0aGlzLT5zZXRHZW5lcmF0b3IoUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChjdXJHZW4uY19zdHIoKSkpOwogICAgIH0KIAotICAgIGNvbnN0IGNoYXIqIHBsYXRmb3JtID0KLSAgICAgIHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9QTEFURk9STSIpOworICAgIGNtUHJvcCBwbGF0Zm9ybSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9QTEFURk9STSIpOwogICAgIGlmIChwbGF0Zm9ybSkgewotICAgICAgdGhpcy0+c2V0UGxhdGZvcm0oUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChwbGF0Zm9ybSkpOworICAgICAgdGhpcy0+c2V0UGxhdGZvcm0oUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChwbGF0Zm9ybS0+Y19zdHIoKSkpOwogICAgIH0KIAotICAgIGNvbnN0IGNoYXIqIHRvb2xzZXQgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCIpOworICAgIGNtUHJvcCB0b29sc2V0ID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQiKTsKICAgICBpZiAodG9vbHNldCkgewotICAgICAgdGhpcy0+c2V0VG9vbHNldChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHRvb2xzZXQpKTsKKyAgICAgIHRoaXMtPnNldFRvb2xzZXQoUVN0cmluZzo6ZnJvbUxvY2FsOEJpdCh0b29sc2V0LT5jX3N0cigpKSk7CiAgICAgfQogCiAgICAgY2hlY2tPcGVuUG9zc2libGUoKTsKQEAgLTE3MSw3ICsxNjksNiBAQAogICB0aGlzLT5DTWFrZUluc3RhbmNlLT5TZXRHZW5lcmF0b3JUb29sc2V0KHRoaXMtPlRvb2xzZXQudG9Mb2NhbDhCaXQoKS5kYXRhKCkpOwogICB0aGlzLT5DTWFrZUluc3RhbmNlLT5Mb2FkQ2FjaGUoKTsKICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+U2V0V2FyblVuaW5pdGlhbGl6ZWQodGhpcy0+V2FyblVuaW5pdGlhbGl6ZWRNb2RlKTsKLSAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+U2V0V2FyblVudXNlZCh0aGlzLT5XYXJuVW51c2VkTW9kZSk7CiAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPlByZUxvYWRDTWFrZUZpbGVzKCk7CiAKICAgSW50ZXJydXB0RmxhZyA9IDA7CkBAIC0zMDMsMjcgKzMwMCwyOCBAQAogICAgICAgY29udGludWU7CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogY2FjaGVkVmFsdWUgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGtleSk7CisgICAgY21Qcm9wIGNhY2hlZFZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOwogCiAgICAgUUNNYWtlUHJvcGVydHkgcHJvcDsKICAgICBwcm9wLktleSA9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoa2V5LmNfc3RyKCkpOwotICAgIHByb3AuSGVscCA9Ci0gICAgICBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoa2V5LCAiSEVMUFNUUklORyIpKTsKLSAgICBwcm9wLlZhbHVlID0gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChjYWNoZWRWYWx1ZSk7CisgICAgaWYgKGNtUHJvcCBocyA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoa2V5LCAiSEVMUFNUUklORyIpKSB7CisgICAgICBwcm9wLkhlbHAgPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGhzLT5jX3N0cigpKTsKKyAgICB9CisgICAgcHJvcC5WYWx1ZSA9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoY2FjaGVkVmFsdWUtPmNfc3RyKCkpOwogICAgIHByb3AuQWR2YW5jZWQgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5QXNCb29sKGtleSwgIkFEVkFOQ0VEIik7CiAgICAgaWYgKHQgPT0gY21TdGF0ZUVudW1zOjpCT09MKSB7CiAgICAgICBwcm9wLlR5cGUgPSBRQ01ha2VQcm9wZXJ0eTo6Qk9PTDsKLSAgICAgIHByb3AuVmFsdWUgPSBjbUlzT24oY2FjaGVkVmFsdWUpOworICAgICAgcHJvcC5WYWx1ZSA9IGNtSXNPbigqY2FjaGVkVmFsdWUpOwogICAgIH0gZWxzZSBpZiAodCA9PSBjbVN0YXRlRW51bXM6OlBBVEgpIHsKICAgICAgIHByb3AuVHlwZSA9IFFDTWFrZVByb3BlcnR5OjpQQVRIOwogICAgIH0gZWxzZSBpZiAodCA9PSBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKSB7CiAgICAgICBwcm9wLlR5cGUgPSBRQ01ha2VQcm9wZXJ0eTo6RklMRVBBVEg7CiAgICAgfSBlbHNlIGlmICh0ID09IGNtU3RhdGVFbnVtczo6U1RSSU5HKSB7CiAgICAgICBwcm9wLlR5cGUgPSBRQ01ha2VQcm9wZXJ0eTo6U1RSSU5HOwotICAgICAgY29uc3QgY2hhciogc3RyaW5nc1Byb3BlcnR5ID0KLSAgICAgICAgc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShrZXksICJTVFJJTkdTIik7CisgICAgICBjbVByb3Agc3RyaW5nc1Byb3BlcnR5ID0gc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShrZXksICJTVFJJTkdTIik7CiAgICAgICBpZiAoc3RyaW5nc1Byb3BlcnR5KSB7Ci0gICAgICAgIHByb3AuU3RyaW5ncyA9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3RyaW5nc1Byb3BlcnR5KS5zcGxpdCgiOyIpOworICAgICAgICBwcm9wLlN0cmluZ3MgPQorICAgICAgICAgIFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3RyaW5nc1Byb3BlcnR5LT5jX3N0cigpKS5zcGxpdCgiOyIpOwogICAgICAgfQogICAgIH0KIApAQCAtMzQwLDEwICszMzgsMTAgQEAKIAogYm9vbCBRQ01ha2U6OmludGVycnVwdENhbGxiYWNrKCkKIHsKLSNpZiBRVF9WRVJTSU9OIDwgUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQotICByZXR1cm4gdGhpcy0+SW50ZXJydXB0RmxhZzsKLSNlbHNlCisjaWYgUVRfVkVSU0lPTiA8IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMTQsIDApCiAgIHJldHVybiB0aGlzLT5JbnRlcnJ1cHRGbGFnLmxvYWQoKTsKKyNlbHNlCisgIHJldHVybiB0aGlzLT5JbnRlcnJ1cHRGbGFnLmxvYWRSZWxheGVkKCk7CiAjZW5kaWYKIH0KIApAQCAtNDc4LDE0ICs0NzYsOSBAQAogICB0aGlzLT5XYXJuVW5pbml0aWFsaXplZE1vZGUgPSB2YWx1ZTsKIH0KIAotdm9pZCBRQ01ha2U6OnNldFdhcm5VbnVzZWRNb2RlKGJvb2wgdmFsdWUpCi17Ci0gIHRoaXMtPldhcm5VbnVzZWRNb2RlID0gdmFsdWU7Ci19Ci0KIHZvaWQgUUNNYWtlOjpjaGVja09wZW5Qb3NzaWJsZSgpCiB7Ci0gIGF1dG8gZGF0YSA9IHRoaXMtPkJpbmFyeURpcmVjdG9yeS50b0xvY2FsOEJpdCgpLmRhdGEoKTsKKyAgc3RkOjpzdHJpbmcgZGF0YSA9IHRoaXMtPkJpbmFyeURpcmVjdG9yeS50b0xvY2FsOEJpdCgpLmRhdGEoKTsKICAgYXV0byBwb3NzaWJsZSA9IHRoaXMtPkNNYWtlSW5zdGFuY2UtPk9wZW4oZGF0YSwgdHJ1ZSk7CiAgIGVtaXQgb3BlblBvc3NpYmxlKHBvc3NpYmxlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuaCBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2UuaAppbmRleCBmYTQ0NTFiLi4zOTU1NWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlLmgKKysrIGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDUxMikKICNlbmRpZgogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgPFFBdG9taWNJbnQ+CkBAIC0xMTMsOCArMTE0LDYgQEAKICAgdm9pZCBzZXREZXByZWNhdGVkV2FybmluZ3NBc0Vycm9ycyhib29sIHZhbHVlKTsKICAgLy8vIHNldCB3aGV0aGVyIHRvIHJ1biBjbWFrZSB3aXRoIHdhcm5pbmdzIGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIHZvaWQgc2V0V2FyblVuaW5pdGlhbGl6ZWRNb2RlKGJvb2wgdmFsdWUpOwotICAvLy8gc2V0IHdoZXRoZXIgdG8gcnVuIGNtYWtlIHdpdGggd2FybmluZ3MgYWJvdXQgdW51c2VkIHZhcmlhYmxlcwotICB2b2lkIHNldFdhcm5VbnVzZWRNb2RlKGJvb2wgdmFsdWUpOwogICAvLy8gY2hlY2sgaWYgcHJvamVjdCBJREUgb3BlbiBpcyBwb3NzaWJsZSBhbmQgZW1pdCBvcGVuUG9zc2libGUgc2lnbmFsCiAgIHZvaWQgY2hlY2tPcGVuUG9zc2libGUoKTsKIApAQCAtMTY1LDcgKzE2NCw3IEBACiAgIHZvaWQgb3BlblBvc3NpYmxlKGJvb2wgcG9zc2libGUpOwogCiBwcm90ZWN0ZWQ6Ci0gIGNtYWtlKiBDTWFrZUluc3RhbmNlOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21ha2U+IENNYWtlSW5zdGFuY2U7CiAKICAgYm9vbCBpbnRlcnJ1cHRDYWxsYmFjaygpOwogICB2b2lkIHByb2dyZXNzQ2FsbGJhY2soc3RkOjpzdHJpbmcgY29uc3QmIG1zZywgZmxvYXQgcGVyY2VudCk7CkBAIC0xNzQsOCArMTczLDYgQEAKICAgdm9pZCBzdGRlcnJDYWxsYmFjayhzdGQ6OnN0cmluZyBjb25zdCYgbXNnKTsKIAogICBib29sIFdhcm5VbmluaXRpYWxpemVkTW9kZTsKLSAgYm9vbCBXYXJuVW51c2VkTW9kZTsKLSAgYm9vbCBXYXJuVW51c2VkQWxsTW9kZTsKICAgUVN0cmluZyBTb3VyY2VEaXJlY3Rvcnk7CiAgIFFTdHJpbmcgQmluYXJ5RGlyZWN0b3J5OwogICBRU3RyaW5nIEdlbmVyYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2VDYWNoZVZpZXcuY3h4IGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZUNhY2hlVmlldy5jeHgKaW5kZXggM2U2YTQ5ZS4uM2JmNDQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1F0RGlhbG9nL1FDTWFrZUNhY2hlVmlldy5jeHgKKysrIGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZUNhY2hlVmlldy5jeHgKQEAgLTE1NSwxMSArMTU1LDcgQEAKIAogdm9pZCBRQ01ha2VDYWNoZVZpZXc6OnNldFNob3dBZHZhbmNlZChib29sIHMpCiB7Ci0jaWYgUVRfVkVSU0lPTiA+PSAwNDAzMDAKLSAgLy8gbmV3IDQuMyBBUEkgdGhhdCBuZWVkcyB0byBiZSBjYWxsZWQuICB3aGF0IGFib3V0IGFuIG9sZGVyIFF0PwogICB0aGlzLT5TZWFyY2hGaWx0ZXItPmludmFsaWRhdGUoKTsKLSNlbmRpZgotCiAgIHRoaXMtPkFkdmFuY2VkRmlsdGVyLT5zZXRTaG93QWR2YW5jZWQocyk7CiB9CiAKQEAgLTIwOSwxOCArMjA1LDM0IEBACiAKIHZvaWQgUUNNYWtlQ2FjaGVNb2RlbDo6c2V0UHJvcGVydGllcyhjb25zdCBRQ01ha2VQcm9wZXJ0eUxpc3QmIHByb3BzKQogeworICB0aGlzLT5iZWdpblJlc2V0TW9kZWwoKTsKKwogICBRU2V0PFFDTWFrZVByb3BlcnR5PiBuZXdQcm9wczsKICAgUVNldDxRQ01ha2VQcm9wZXJ0eT4gbmV3UHJvcHMyOwogCiAgIGlmICh0aGlzLT5TaG93TmV3UHJvcGVydGllcykgeworI2lmIFFUX1ZFUlNJT04gPCBRVF9WRVJTSU9OX0NIRUNLKDUsIDE0LCAwKQogICAgIG5ld1Byb3BzID0gcHJvcHMudG9TZXQoKTsKKyNlbHNlCisgICAgbmV3UHJvcHMgPSBRU2V0PFFDTWFrZVByb3BlcnR5Pihwcm9wcy5iZWdpbigpLCBwcm9wcy5lbmQoKSk7CisjZW5kaWYKICAgICBuZXdQcm9wczIgPSBuZXdQcm9wczsKKyNpZiBRVF9WRVJTSU9OIDwgUVRfVkVSU0lPTl9DSEVDSyg1LCAxNCwgMCkKICAgICBRU2V0PFFDTWFrZVByb3BlcnR5PiBvbGRQcm9wcyA9IHRoaXMtPnByb3BlcnRpZXMoKS50b1NldCgpOworI2Vsc2UKKyAgICBRQ01ha2VQcm9wZXJ0eUxpc3QgY29uc3QmIG9sZFByb3BzTGlzdCA9IHRoaXMtPnByb3BlcnRpZXMoKTsKKyAgICBRU2V0PFFDTWFrZVByb3BlcnR5PiBvbGRQcm9wcyA9CisgICAgICBRU2V0PFFDTWFrZVByb3BlcnR5PihvbGRQcm9wc0xpc3QuYmVnaW4oKSwgb2xkUHJvcHNMaXN0LmVuZCgpKTsKKyNlbmRpZgogICAgIG9sZFByb3BzLmludGVyc2VjdChuZXdQcm9wcyk7CiAgICAgbmV3UHJvcHMuc3VidHJhY3Qob2xkUHJvcHMpOwogICAgIG5ld1Byb3BzMi5zdWJ0cmFjdChuZXdQcm9wcyk7CiAgIH0gZWxzZSB7CisjaWYgUVRfVkVSU0lPTiA8IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMTQsIDApCiAgICAgbmV3UHJvcHMyID0gcHJvcHMudG9TZXQoKTsKKyNlbHNlCisgICAgbmV3UHJvcHMyID0gUVNldDxRQ01ha2VQcm9wZXJ0eT4ocHJvcHMuYmVnaW4oKSwgcHJvcHMuZW5kKCkpOworI2VuZGlmCiAgIH0KIAogICBib29sIGIgPSB0aGlzLT5ibG9ja1NpZ25hbHModHJ1ZSk7CkBAIC0yMjksMTAgKzI0MSwxNSBAQAogICB0aGlzLT5OZXdQcm9wZXJ0eUNvdW50ID0gbmV3UHJvcHMuc2l6ZSgpOwogCiAgIGlmIChWaWV3ID09IEZsYXRWaWV3KSB7Ci0gICAgUUNNYWtlUHJvcGVydHlMaXN0IG5ld1AgPSBuZXdQcm9wcy50b0xpc3QoKTsKLSAgICBRQ01ha2VQcm9wZXJ0eUxpc3QgbmV3UDIgPSBuZXdQcm9wczIudG9MaXN0KCk7CisgICAgUUNNYWtlUHJvcGVydHlMaXN0IG5ld1AgPSBuZXdQcm9wcy52YWx1ZXMoKTsKKyAgICBRQ01ha2VQcm9wZXJ0eUxpc3QgbmV3UDIgPSBuZXdQcm9wczIudmFsdWVzKCk7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDksIDApCisgICAgc3RkOjpzb3J0KG5ld1AuYmVnaW4oKSwgbmV3UC5lbmQoKSk7CisgICAgc3RkOjpzb3J0KG5ld1AyLmJlZ2luKCksIG5ld1AyLmVuZCgpKTsKKyNlbHNlCiAgICAgcVNvcnQobmV3UCk7CiAgICAgcVNvcnQobmV3UDIpOworI2VuZGlmCiAgICAgaW50IHJvd19jb3VudCA9IDA7CiAgICAgZm9yZWFjaCAoUUNNYWtlUHJvcGVydHkgY29uc3QmIHAsIG5ld1ApIHsKICAgICAgIHRoaXMtPmluc2VydFJvdyhyb3dfY291bnQpOwpAQCAtMjYyLDEwICsyNzksMTcgQEAKICAgICAgIHBhcmVudEl0ZW1zLmFwcGVuZCgKICAgICAgICAgbmV3IFFTdGFuZGFyZEl0ZW0oa2V5LmlzRW1wdHkoKSA/IHRyKCJVbmdyb3VwZWQgRW50cmllcyIpIDoga2V5KSk7CiAgICAgICBwYXJlbnRJdGVtcy5hcHBlbmQobmV3IFFTdGFuZGFyZEl0ZW0oKSk7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDksIDApCisgICAgICBwYXJlbnRJdGVtc1swXS0+c2V0RGF0YShRQnJ1c2goUUNvbG9yKDI1NSwgMTAwLCAxMDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF0OjpCYWNrZ3JvdW5kUm9sZSk7CisgICAgICBwYXJlbnRJdGVtc1sxXS0+c2V0RGF0YShRQnJ1c2goUUNvbG9yKDI1NSwgMTAwLCAxMDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF0OjpCYWNrZ3JvdW5kUm9sZSk7CisjZWxzZQogICAgICAgcGFyZW50SXRlbXNbMF0tPnNldERhdGEoUUJydXNoKFFDb2xvcigyNTUsIDEwMCwgMTAwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdDo6QmFja2dyb3VuZENvbG9yUm9sZSk7CiAgICAgICBwYXJlbnRJdGVtc1sxXS0+c2V0RGF0YShRQnJ1c2goUUNvbG9yKDI1NSwgMTAwLCAxMDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF0OjpCYWNrZ3JvdW5kQ29sb3JSb2xlKTsKKyNlbmRpZgogICAgICAgcGFyZW50SXRlbXNbMF0tPnNldERhdGEoMSwgR3JvdXBSb2xlKTsKICAgICAgIHBhcmVudEl0ZW1zWzFdLT5zZXREYXRhKDEsIEdyb3VwUm9sZSk7CiAgICAgICByb290LT5hcHBlbmRSb3cocGFyZW50SXRlbXMpOwpAQCAtMzA1LDcgKzMyOSw3IEBACiAgIH0KIAogICB0aGlzLT5ibG9ja1NpZ25hbHMoYik7Ci0gIHRoaXMtPnJlc2V0KCk7CisgIHRoaXMtPmVuZFJlc2V0TW9kZWwoKTsKIH0KIAogUUNNYWtlQ2FjaGVNb2RlbDo6Vmlld1R5cGUgUUNNYWtlQ2FjaGVNb2RlbDo6dmlld1R5cGUoKSBjb25zdApAQCAtMzE1LDYgKzMzOSw4IEBACiAKIHZvaWQgUUNNYWtlQ2FjaGVNb2RlbDo6c2V0Vmlld1R5cGUoUUNNYWtlQ2FjaGVNb2RlbDo6Vmlld1R5cGUgdCkKIHsKKyAgdGhpcy0+YmVnaW5SZXNldE1vZGVsKCk7CisKICAgdGhpcy0+VmlldyA9IHQ7CiAKICAgUUNNYWtlUHJvcGVydHlMaXN0IHByb3BzID0gdGhpcy0+cHJvcGVydGllcygpOwpAQCAtMzMwLDcgKzM1Niw3IEBACiAgIHRoaXMtPnNldFByb3BlcnRpZXMob2xkUHJvcHMpOwogICB0aGlzLT5zZXRQcm9wZXJ0aWVzKHByb3BzKTsKICAgdGhpcy0+YmxvY2tTaWduYWxzKGIpOwotICB0aGlzLT5yZXNldCgpOworICB0aGlzLT5lbmRSZXNldE1vZGVsKCk7CiB9CiAKIHZvaWQgUUNNYWtlQ2FjaGVNb2RlbDo6c2V0UHJvcGVydHlEYXRhKGNvbnN0IFFNb2RlbEluZGV4JiBpZHgxLApAQCAtMzU2LDEwICszODIsMTUgQEAKICAgfQogCiAgIGlmIChpc05ldykgeworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCA5LCAwKQorICAgIHRoaXMtPnNldERhdGEoaWR4MSwgUUJydXNoKFFDb2xvcigyNTUsIDEwMCwgMTAwKSksIFF0OjpCYWNrZ3JvdW5kUm9sZSk7CisgICAgdGhpcy0+c2V0RGF0YShpZHgyLCBRQnJ1c2goUUNvbG9yKDI1NSwgMTAwLCAxMDApKSwgUXQ6OkJhY2tncm91bmRSb2xlKTsKKyNlbHNlCiAgICAgdGhpcy0+c2V0RGF0YShpZHgxLCBRQnJ1c2goUUNvbG9yKDI1NSwgMTAwLCAxMDApKSwKICAgICAgICAgICAgICAgICAgIFF0OjpCYWNrZ3JvdW5kQ29sb3JSb2xlKTsKICAgICB0aGlzLT5zZXREYXRhKGlkeDIsIFFCcnVzaChRQ29sb3IoMjU1LCAxMDAsIDEwMCkpLAogICAgICAgICAgICAgICAgICAgUXQ6OkJhY2tncm91bmRDb2xvclJvbGUpOworI2VuZGlmCiAgIH0KIH0KIApAQCAtNDA5LDcgKzQ0MCwxMSBAQAogICAgICAgcmVvcmdQcm9wcy5hcHBlbmQoKCppdGVyKVswXSk7CiAgICAgICBpdGVyID0gdG1wLmVyYXNlKGl0ZXIpOwogICAgIH0gZWxzZSB7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDksIDApCisgICAgICBzdGQ6OnNvcnQoaXRlci0+YmVnaW4oKSwgaXRlci0+ZW5kKCkpOworI2Vsc2UKICAgICAgIHFTb3J0KCppdGVyKTsKKyNlbmRpZgogICAgICAgKytpdGVyOwogICAgIH0KICAgfQpAQCAtNDQ3LDggKzQ4Miw3IEBACiAgICAgICAvLyBnbyB0byB0aGUgbmV4dCBpbiB0aGUgdHJlZQogICAgICAgd2hpbGUgKCFpZHhzLmlzRW1wdHkoKSAmJgogICAgICAgICAgICAgICgKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgUVRfVkVSU0lPTiA8IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMSwgMCkKKyNpZiBRVF9WRVJTSU9OIDwgUVRfVkVSU0lPTl9DSEVDSyg1LCAxLCAwKQogICAgICAgICAgICAgICAgKGlkeHMubGFzdCgpLnJvdygpICsgMSkgPj0gcm93Q291bnQoaWR4cy5sYXN0KCkucGFyZW50KCkpIHx8CiAjZW5kaWYKICAgICAgICAgICAgICAgICFpZHhzLmxhc3QoKS5zaWJsaW5nKGlkeHMubGFzdCgpLnJvdygpICsgMSwgMCkuaXNWYWxpZCgpKSkgewpAQCAtNjA4LDIwICs2NDIsNiBAQAogICByZXR1cm4gc3VjY2VzczsKIH0KIAotLy8gSXNzdWUgMjA1OTAzIGZpeGVkIGluIFF0IDQuNS4wLgotLy8gQ2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFuZCBGaWxlRGlhbG9nRmxhZyB3aGVuIG1pbmltdW0gUXQgdmVyc2lvbiBpcyA0LjUKLWJvb2wgUUNNYWtlQ2FjaGVNb2RlbERlbGVnYXRlOjpldmVudEZpbHRlcihRT2JqZWN0KiBvYmplY3QsIFFFdmVudCogZXZ0KQotewotICAvLyB3b3JrYXJvdW5kIGZvciB3aGF0IGxvb2tzIGxpa2UgYSBidWcgaW4gUXQgb24gbWFjT1MKLSAgLy8gd2hlcmUgaXQgZG9lc24ndCBjcmVhdGUgYSBRV2lkZ2V0IHdyYXBwZXIgZm9yIHRoZSBuYXRpdmUgZmlsZSBkaWFsb2cKLSAgLy8gc28gdGhlIFF0IGxpYnJhcnkgZW5kcyB1cCBhc3N1bWluZyB0aGUgZm9jdXMgd2FzIGxvc3QgdG8gc29tZXRoaW5nIGVsc2UKLQotICBpZiAoZXZ0LT50eXBlKCkgPT0gUUV2ZW50OjpGb2N1c091dCAmJiB0aGlzLT5GaWxlRGlhbG9nRmxhZykgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gUUl0ZW1EZWxlZ2F0ZTo6ZXZlbnRGaWx0ZXIob2JqZWN0LCBldnQpOwotfQotCiB2b2lkIFFDTWFrZUNhY2hlTW9kZWxEZWxlZ2F0ZTo6c2V0TW9kZWxEYXRhKFFXaWRnZXQqIGVkaXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUFic3RyYWN0SXRlbU1vZGVsKiBtb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU1vZGVsSW5kZXgmIGluZGV4KSBjb25zdApAQCAtNjM5LDkgKzY1OSwxNSBAQAogICAvLyBpbmNyZWFzZSB0byBjaGVja2JveCBzaXplCiAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHQ7CiAgIG9wdC5RU3R5bGVPcHRpb246Om9wZXJhdG9yPShvcHRpb24pOworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAxMywgMCkKKyAgc3ogPSBzei5leHBhbmRlZFRvKAorICAgIHN0eWxlLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX0l0ZW1WaWV3SXRlbUNoZWNrSW5kaWNhdG9yLCAmb3B0LCBudWxscHRyKQorICAgICAgLnNpemUoKSk7CisjZWxzZQogICBzeiA9IHN6LmV4cGFuZGVkVG8oCiAgICAgc3R5bGUtPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfVmlld0l0ZW1DaGVja0luZGljYXRvciwgJm9wdCwgbnVsbHB0cikKICAgICAgIC5zaXplKCkpOworI2VuZGlmCiAKICAgcmV0dXJuIHN6OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1F0RGlhbG9nL1FDTWFrZUNhY2hlVmlldy5oIGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZUNhY2hlVmlldy5oCmluZGV4IGJlYTE5NjUuLmEyNTI3MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2VDYWNoZVZpZXcuaAorKysgYi9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlQ2FjaGVWaWV3LmgKQEAgLTE0NCw3ICsxNDQsNiBAQAogICBib29sIGVkaXRvckV2ZW50KFFFdmVudCogZXZlbnQsIFFBYnN0cmFjdEl0ZW1Nb2RlbCogbW9kZWwsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0eWxlT3B0aW9uVmlld0l0ZW0mIG9wdGlvbiwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRTW9kZWxJbmRleCYgaW5kZXgpOwotICBib29sIGV2ZW50RmlsdGVyKFFPYmplY3QqIG9iamVjdCwgUUV2ZW50KiBldmVudCk7CiAgIHZvaWQgc2V0TW9kZWxEYXRhKFFXaWRnZXQqIGVkaXRvciwgUUFic3RyYWN0SXRlbU1vZGVsKiBtb2RlbCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU1vZGVsSW5kZXgmIGluZGV4KSBjb25zdDsKICAgUVNpemUgc2l6ZUhpbnQoY29uc3QgUVN0eWxlT3B0aW9uVmlld0l0ZW0mIG9wdGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9RQ01ha2VXaWRnZXRzLmN4eCBiL1NvdXJjZS9RdERpYWxvZy9RQ01ha2VXaWRnZXRzLmN4eAppbmRleCAzMzJhNzcwLi5kMTZlYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvUUNNYWtlV2lkZ2V0cy5jeHgKKysrIGIvU291cmNlL1F0RGlhbG9nL1FDTWFrZVdpZGdldHMuY3h4CkBAIC00LDkgKzQsOSBAQAogCiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgPFFEaXJNb2RlbD4KICNpbmNsdWRlIDxRRmlsZURpYWxvZz4KICNpbmNsdWRlIDxRRmlsZUluZm8+CisjaW5jbHVkZSA8UUZpbGVTeXN0ZW1Nb2RlbD4KICNpbmNsdWRlIDxRUmVzaXplRXZlbnQ+CiAjaW5jbHVkZSA8UVRvb2xCdXR0b24+CiAKQEAgLTg4LDIwICs4OCwyMCBAQAogICB9CiB9CiAKLS8vIHVzZSBzYW1lIFFEaXJNb2RlbCBmb3IgYWxsIGNvbXBsZXRlcnMKLXN0YXRpYyBRRGlyTW9kZWwqIGZpbGVEaXJNb2RlbCgpCisvLyB1c2Ugc2FtZSBRRmlsZVN5c3RlbU1vZGVsIGZvciBhbGwgY29tcGxldGVycworc3RhdGljIFFGaWxlU3lzdGVtTW9kZWwqIGZpbGVEaXJNb2RlbCgpCiB7Ci0gIHN0YXRpYyBRRGlyTW9kZWwqIG0gPSBudWxscHRyOworICBzdGF0aWMgUUZpbGVTeXN0ZW1Nb2RlbCogbSA9IG51bGxwdHI7CiAgIGlmICghbSkgewotICAgIG0gPSBuZXcgUURpck1vZGVsKCk7CisgICAgbSA9IG5ldyBRRmlsZVN5c3RlbU1vZGVsKCk7CiAgIH0KICAgcmV0dXJuIG07CiB9Ci1zdGF0aWMgUURpck1vZGVsKiBwYXRoRGlyTW9kZWwoKQorc3RhdGljIFFGaWxlU3lzdGVtTW9kZWwqIHBhdGhEaXJNb2RlbCgpCiB7Ci0gIHN0YXRpYyBRRGlyTW9kZWwqIG0gPSBudWxscHRyOworICBzdGF0aWMgUUZpbGVTeXN0ZW1Nb2RlbCogbSA9IG51bGxwdHI7CiAgIGlmICghbSkgewotICAgIG0gPSBuZXcgUURpck1vZGVsKCk7CisgICAgbSA9IG5ldyBRRmlsZVN5c3RlbU1vZGVsKCk7CiAgICAgbS0+c2V0RmlsdGVyKFFEaXI6OkFsbERpcnMgfCBRRGlyOjpEcml2ZXMgfCBRRGlyOjpOb0RvdEFuZERvdERvdCk7CiAgIH0KICAgcmV0dXJuIG07CkBAIC0xMTAsNyArMTEwLDcgQEAKIFFDTWFrZUZpbGVDb21wbGV0ZXI6OlFDTWFrZUZpbGVDb21wbGV0ZXIoUU9iamVjdCogbywgYm9vbCBkaXJzKQogICA6IFFDb21wbGV0ZXIobykKIHsKLSAgUURpck1vZGVsKiBtID0gZGlycyA/IHBhdGhEaXJNb2RlbCgpIDogZmlsZURpck1vZGVsKCk7CisgIFFGaWxlU3lzdGVtTW9kZWwqIG0gPSBkaXJzID8gcGF0aERpck1vZGVsKCkgOiBmaWxlRGlyTW9kZWwoKTsKICAgdGhpcy0+c2V0TW9kZWwobSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdERpYWxvZy9SZWdleEV4cGxvcmVyLmN4eCBiL1NvdXJjZS9RdERpYWxvZy9SZWdleEV4cGxvcmVyLmN4eAppbmRleCA3NDZmZDhhLi42MTk0OTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvUXREaWFsb2cvUmVnZXhFeHBsb3Jlci5jeHgKKysrIGIvU291cmNlL1F0RGlhbG9nL1JlZ2V4RXhwbG9yZXIuY3h4CkBAIC0xNDcsOSArMTQ3LDYgQEAKICAgICAgIH0gZWxzZSBpZiAobmV4dGMgPT0gJ24nKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgJ1xuJyk7CiAgICAgICAgIGluKys7Ci0gICAgICB9IGVsc2UgaWYgKG5leHRjID09ICd0JykgewotICAgICAgICByZXN1bHQuYXBwZW5kKDEsICdcdCcpOwotICAgICAgICBpbisrOwogICAgICAgfSBlbHNlIGlmIChpc2FsbnVtKG5leHRjKSB8fCBuZXh0YyA9PSAnXDAnKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYmluZGV4cGxpYi5jeHggYi9Tb3VyY2UvYmluZGV4cGxpYi5jeHgKaW5kZXggYjg1Y2MzMy4uODQzNTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL2JpbmRleHBsaWIuY3h4CisrKyBiL1NvdXJjZS9iaW5kZXhwbGliLmN4eApAQCAtNjQsMzIgKzY0LDM2IEBACiAgKi8KICNpbmNsdWRlICJiaW5kZXhwbGliLmgiCiAKLSNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIF9XSU4zMgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgogCi0jaW5jbHVkZSAiY21zeXMvRW5jb2RpbmcuaHh4IgorIyAgaW5jbHVkZSAiY21zeXMvRW5jb2RpbmcuaHh4IgorI2VuZGlmCisKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIAogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAotI2lmbmRlZiBJTUFHRV9GSUxFX01BQ0hJTkVfQVJNCi0jICBkZWZpbmUgSU1BR0VfRklMRV9NQUNISU5FX0FSTSAweDAxYzAgLy8gQVJNIExpdHRsZS1FbmRpYW4KLSNlbmRpZgorI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIElNQUdFX0ZJTEVfTUFDSElORV9BUk0KKyMgICAgZGVmaW5lIElNQUdFX0ZJTEVfTUFDSElORV9BUk0gMHgwMWMwIC8vIEFSTSBMaXR0bGUtRW5kaWFuCisjICBlbmRpZgogCi0jaWZuZGVmIElNQUdFX0ZJTEVfTUFDSElORV9USFVNQgotIyAgZGVmaW5lIElNQUdFX0ZJTEVfTUFDSElORV9USFVNQiAweDAxYzIgLy8gQVJNIFRodW1iL1RodW1iLTIgTGl0dGxlLUVuZGlhbgotI2VuZGlmCisjICBpZm5kZWYgSU1BR0VfRklMRV9NQUNISU5FX1RIVU1CCisjICAgIGRlZmluZSBJTUFHRV9GSUxFX01BQ0hJTkVfVEhVTUIgMHgwMWMyIC8vIEFSTSBUaHVtYi9UaHVtYi0yIExpdHRsZS1FbmRpYW4KKyMgIGVuZGlmCiAKLSNpZm5kZWYgSU1BR0VfRklMRV9NQUNISU5FX0FSTU5UCi0jICBkZWZpbmUgSU1BR0VfRklMRV9NQUNISU5FX0FSTU5UIDB4MDFjNCAvLyBBUk0gVGh1bWItMiBMaXR0bGUtRW5kaWFuCi0jZW5kaWYKKyMgIGlmbmRlZiBJTUFHRV9GSUxFX01BQ0hJTkVfQVJNTlQKKyMgICAgZGVmaW5lIElNQUdFX0ZJTEVfTUFDSElORV9BUk1OVCAweDAxYzQgLy8gQVJNIFRodW1iLTIgTGl0dGxlLUVuZGlhbgorIyAgZW5kaWYKIAotI2lmbmRlZiBJTUFHRV9GSUxFX01BQ0hJTkVfQVJNNjQKLSMgIGRlZmluZSBJTUFHRV9GSUxFX01BQ0hJTkVfQVJNNjQgMHhhYTY0IC8vIEFSTTY0IExpdHRsZS1FbmRpYW4KLSNlbmRpZgorIyAgaWZuZGVmIElNQUdFX0ZJTEVfTUFDSElORV9BUk02NAorIyAgICBkZWZpbmUgSU1BR0VfRklMRV9NQUNISU5FX0FSTTY0IDB4YWE2NCAvLyBBUk02NCBMaXR0bGUtRW5kaWFuCisjICBlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBjbUFOT05fT0JKRUNUX0hFQURFUl9CSUdPQkoKIHsKQEAgLTI3Miw4ICsyNzYsOSBAQAogICAgICAgICAgICAgICBzeW1ib2wuY29tcGFyZSgwLCA0LCB2ZWN0b3JQcmVmaXgpKSB7CiAgICAgICAgICAgICBTZWN0Q2hhciA9IHRoaXMtPlNlY3Rpb25IZWFkZXJzW3BTeW1ib2xUYWJsZS0+U2VjdGlvbk51bWJlciAtIDFdCiAgICAgICAgICAgICAgICAgICAgICAgICAgLkNoYXJhY3RlcmlzdGljczsKLSAgICAgICAgICAgIC8vIHNraXAgc3ltYm9scyBjb250YWluaW5nIGEgZG90Ci0gICAgICAgICAgICBpZiAoc3ltYm9sLmZpbmQoJy4nKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgLy8gc2tpcCBzeW1ib2xzIGNvbnRhaW5pbmcgYSBkb3Qgb3IgYXJlIGZyb20gbWFuYWdlZCBjb2RlCisgICAgICAgICAgICBpZiAoc3ltYm9sLmZpbmQoJy4nKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICAgICAgICAgICFTeW1ib2xJc0Zyb21NYW5hZ2VkQ29kZShzeW1ib2wpKSB7CiAgICAgICAgICAgICAgIGlmICghcFN5bWJvbFRhYmxlLT5UeXBlICYmIChTZWN0Q2hhciAmIElNQUdFX1NDTl9NRU1fV1JJVEUpKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVhZCBvbmx5IChpLmUuIGNvbnN0YW50cykgbXVzdCBiZSBleGNsdWRlZAogICAgICAgICAgICAgICAgIHRoaXMtPkRhdGFTeW1ib2xzLmluc2VydChzeW1ib2wpOwpAQCAtMjk4LDYgKzMwMywxMyBAQAogICB9CiAKIHByaXZhdGU6CisgIGJvb2wgU3ltYm9sSXNGcm9tTWFuYWdlZENvZGUoc3RkOjpzdHJpbmcgY29uc3QmIHN5bWJvbCkKKyAgeworICAgIHJldHVybiBzeW1ib2wgPT0gIl9fdDJtIiB8fCBzeW1ib2wgPT0gIl9fbTJtZXAiIHx8IHN5bWJvbCA9PSAiX19tZXAiIHx8CisgICAgICBzeW1ib2wuZmluZCgiJCRGIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwKKyAgICAgIHN5bWJvbC5maW5kKCIkJEoiKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgfQorCiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgU3ltYm9sczsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBEYXRhU3ltYm9sczsKICAgRFdPUkRfUFRSIFN5bWJvbENvdW50OwpAQCAtMzA2LDYgKzMxOCw3IEBACiAgIFN5bWJvbFRhYmxlVHlwZSogU3ltYm9sVGFibGU7CiAgIGJvb2wgSXNJMzg2OwogfTsKKyNlbmRpZgogCiBib29sIER1bXBGaWxlV2l0aExsdm1ObShzdGQ6OnN0cmluZyBjb25zdCYgbm1QYXRoLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgc3ltYm9scywKQEAgLTMxNSwxNSArMzI4LDE1IEBACiAgIC8vIGJyZWFrIHVwIGNvbW1hbmQgbGluZSBpbnRvIGEgdmVjdG9yCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb21tYW5kOwogICBjb21tYW5kLnB1c2hfYmFjayhubVBhdGgpOwotICBjb21tYW5kLnB1c2hfYmFjaygiLS1uby13ZWFrIik7Ci0gIGNvbW1hbmQucHVzaF9iYWNrKCItLWRlZmluZWQtb25seSIpOwotICBjb21tYW5kLnB1c2hfYmFjaygiLS1mb3JtYXQ9cG9zaXgiKTsKLSAgY29tbWFuZC5wdXNoX2JhY2soZmlsZW5hbWUpOworICBjb21tYW5kLmVtcGxhY2VfYmFjaygiLS1uby13ZWFrIik7CisgIGNvbW1hbmQuZW1wbGFjZV9iYWNrKCItLWRlZmluZWQtb25seSIpOworICBjb21tYW5kLmVtcGxhY2VfYmFjaygiLS1mb3JtYXQ9cG9zaXgiKTsKKyAgY29tbWFuZC5lbXBsYWNlX2JhY2soZmlsZW5hbWUpOwogCiAgIC8vIHJ1biB0aGUgY29tbWFuZAogICBpbnQgZXhpdF9jb2RlID0gMDsKLSAgY21TeXN0ZW1Ub29sczo6UnVuU2luZ2xlQ29tbWFuZChjb21tYW5kLCAmb3V0cHV0LCAmb3V0cHV0LCAmZXhpdF9jb2RlLCAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpPVVRQVVRfTk9ORSk7CisgIGNtU3lzdGVtVG9vbHM6OlJ1blNpbmdsZUNvbW1hbmQoY29tbWFuZCwgJm91dHB1dCwgJm91dHB1dCwgJmV4aXRfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBjbVN5c3RlbVRvb2xzOjpPVVRQVVRfTk9ORSk7CiAKICAgaWYgKGV4aXRfY29kZSAhPSAwKSB7CiAgICAgZnByaW50ZihzdGRlcnIsICJsbHZtLW5tIHJldHVybmVkIGFuIGVycm9yOiAlc1xuIiwgb3V0cHV0LmNfc3RyKCkpOwpAQCAtMzM2LDcgKzM0OSw3IEBACiAgICAgaWYgKGxpbmUuZW1wdHkoKSkgeyAvLyBsYXN0IGxpbmUKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICBzaXplX3Qgc3ltX2VuZCA9IGxpbmUuZmluZCgiICIpOworICAgIHNpemVfdCBzeW1fZW5kID0gbGluZS5maW5kKCcgJyk7CiAgICAgaWYgKHN5bV9lbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcGFyc2UgbGx2bS1ubSBvdXRwdXQgbGluZTogJXNcbiIsCiAgICAgICAgICAgICAgIGxpbmUuY19zdHIoKSk7CkBAIC0zNDcsMTQgKzM2MCwxNCBAQAogICAgICAgICAgICAgICBsaW5lLmNfc3RyKCkpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyBzeW0gPSBsaW5lLnN1YnN0cigwLCBzeW1fZW5kKTsKICAgICBjb25zdCBjaGFyIHN5bV90eXBlID0gbGluZVtzeW1fZW5kICsgMV07CisgICAgbGluZS5yZXNpemUoc3ltX2VuZCk7CiAgICAgc3dpdGNoIChzeW1fdHlwZSkgewogICAgICAgY2FzZSAnRCc6Ci0gICAgICAgIGRhdGFTeW1ib2xzLmluc2VydChzeW0pOworICAgICAgICBkYXRhU3ltYm9scy5pbnNlcnQobGluZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAnVCc6Ci0gICAgICAgIHN5bWJvbHMuaW5zZXJ0KHN5bSk7CisgICAgICAgIHN5bWJvbHMuaW5zZXJ0KGxpbmUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgIH0KQEAgLTM2Niw2ICszNzksOSBAQAogICAgICAgICAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIHN5bWJvbHMsCiAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgZGF0YVN5bWJvbHMpCiB7CisjaWZuZGVmIF9XSU4zMgorICByZXR1cm4gRHVtcEZpbGVXaXRoTGx2bU5tKG5tUGF0aCwgZmlsZW5hbWUsIHN5bWJvbHMsIGRhdGFTeW1ib2xzKTsKKyNlbHNlCiAgIEhBTkRMRSBoRmlsZTsKICAgSEFORExFIGhGaWxlTWFwcGluZzsKICAgTFBWT0lEIGxwRmlsZUJhc2U7CkBAIC00NDYsNiArNDYyLDcgQEAKICAgQ2xvc2VIYW5kbGUoaEZpbGVNYXBwaW5nKTsKICAgQ2xvc2VIYW5kbGUoaEZpbGUpOwogICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogfQogCiBib29sIGJpbmRleHBsaWI6OkFkZE9iamVjdEZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21BZGRDdXN0b21Db21tYW5kQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21BZGRDdXN0b21Db21tYW5kQ29tbWFuZC5jeHgKaW5kZXggNmUwNGNlNS4uMjMxYTJkNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtQWRkQ3VzdG9tQ29tbWFuZENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUFkZEN1c3RvbUNvbW1hbmRDb21tYW5kLmN4eApAQCAtMTc0LDcgKzE3NCw3IEBACiAgICAgICAgIGRvaW5nID0gZG9pbmdfY29tbWVudDsKICAgICAgIH0gZWxzZSBpZiAoY29weSA9PSBrZXlERVBGSUxFKSB7CiAgICAgICAgIGRvaW5nID0gZG9pbmdfZGVwZmlsZTsKLSAgICAgICAgaWYgKG1mLkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXROYW1lKCkgIT0gIk5pbmphIikgeworICAgICAgICBpZiAoIW1mLkdldEdsb2JhbEdlbmVyYXRvcigpLT5TdXBwb3J0c0N1c3RvbUNvbW1hbmREZXBmaWxlKCkpIHsKICAgICAgICAgICBzdGF0dXMuU2V0RXJyb3IoIk9wdGlvbiBERVBGSUxFIG5vdCBzdXBwb3J0ZWQgYnkgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mLkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXROYW1lKCkpOwogICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxNSw3ICsyMTUsOCBAQAogICAgICAgfQogCiAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgoZmlsZW5hbWUpKSB7Ci0gICAgICAgIGZpbGVuYW1lID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChmaWxlbmFtZSk7CisgICAgICAgIGZpbGVuYW1lID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICAgICAgICBmaWxlbmFtZSwgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0SG9tZU91dHB1dERpcmVjdG9yeSgpKTsKICAgICAgIH0KICAgICAgIHN3aXRjaCAoZG9pbmcpIHsKICAgICAgICAgY2FzZSBkb2luZ19kZXBmaWxlOgpAQCAtMjYxLDkgKzI2Miw5IEBACiAgICAgICAgIGNhc2UgZG9pbmdfdGFyZ2V0OgogICAgICAgICAgIHRhcmdldCA9IGNvcHk7CiAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZG9pbmdfZGVwZW5kczogeworICAgICAgICBjYXNlIGRvaW5nX2RlcGVuZHM6CiAgICAgICAgICAgZGVwZW5kcy5wdXNoX2JhY2soY29weSk7Ci0gICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZG9pbmdfb3V0cHV0czoKICAgICAgICAgICBvdXRwdXRzLnB1c2hfYmFjayhmaWxlbmFtZSk7CiAgICAgICAgICAgYnJlYWs7CkBAIC0zNDMsNyArMzQ0LDcgQEAKICAgICAvLyBUYXJnZXQgaXMgZW1wdHksIHVzZSB0aGUgb3V0cHV0LgogICAgIG1mLkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKICAgICAgIG91dHB1dCwgYnlwcm9kdWN0cywgZGVwZW5kcywgbWFpbl9kZXBlbmRlbmN5LCBpbXBsaWNpdF9kZXBlbmRzLAotICAgICAgY29tbWFuZExpbmVzLCBjb21tZW50LCB3b3JraW5nLmNfc3RyKCksIGZhbHNlLCBlc2NhcGVPbGRTdHlsZSwKKyAgICAgIGNvbW1hbmRMaW5lcywgY29tbWVudCwgd29ya2luZy5jX3N0cigpLCBudWxscHRyLCBmYWxzZSwgZXNjYXBlT2xkU3R5bGUsCiAgICAgICB1c2VzX3Rlcm1pbmFsLCBjb21tYW5kX2V4cGFuZF9saXN0cywgZGVwZmlsZSwgam9iX3Bvb2wpOwogICB9IGVsc2UgaWYgKCFieXByb2R1Y3RzLmVtcHR5KCkpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoIkJZUFJPRFVDVFMgbWF5IG5vdCBiZSBzcGVjaWZpZWQgd2l0aCBTT1VSQ0Ugc2lnbmF0dXJlcyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWRkQ3VzdG9tVGFyZ2V0Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21BZGRDdXN0b21UYXJnZXRDb21tYW5kLmN4eAppbmRleCBlMjdiMTI2Li5hYTk4ZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21BZGRDdXN0b21UYXJnZXRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21BZGRDdXN0b21UYXJnZXRDb21tYW5kLmN4eApAQCAtNiw3ICs2LDYgQEAKIAogI2luY2x1ZGUgImNtQ2hlY2tDdXN0b21PdXRwdXRzLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kTGluZXMuaCIKLSNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRUeXBlcy5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKQEAgLTIxNSw5ICsyMTQsOSBAQAogICAvLyBBZGQgdGhlIHV0aWxpdHkgdGFyZ2V0IHRvIHRoZSBtYWtlZmlsZS4KICAgYm9vbCBlc2NhcGVPbGRTdHlsZSA9ICF2ZXJiYXRpbTsKICAgY21UYXJnZXQqIHRhcmdldCA9IG1mLkFkZFV0aWxpdHlDb21tYW5kKAotICAgIHRhcmdldE5hbWUsIGNtQ29tbWFuZE9yaWdpbjo6UHJvamVjdCwgZXhjbHVkZUZyb21BbGwsCi0gICAgd29ya2luZ19kaXJlY3RvcnkuY19zdHIoKSwgYnlwcm9kdWN0cywgZGVwZW5kcywgY29tbWFuZExpbmVzLAotICAgIGVzY2FwZU9sZFN0eWxlLCBjb21tZW50LCB1c2VzX3Rlcm1pbmFsLCBjb21tYW5kX2V4cGFuZF9saXN0cywgam9iX3Bvb2wpOworICAgIHRhcmdldE5hbWUsIGV4Y2x1ZGVGcm9tQWxsLCB3b3JraW5nX2RpcmVjdG9yeS5jX3N0cigpLCBieXByb2R1Y3RzLCBkZXBlbmRzLAorICAgIGNvbW1hbmRMaW5lcywgZXNjYXBlT2xkU3R5bGUsIGNvbW1lbnQsIHVzZXNfdGVybWluYWwsIGNvbW1hbmRfZXhwYW5kX2xpc3RzLAorICAgIGpvYl9wb29sKTsKIAogICAvLyBBZGQgYWRkaXRpb25hbCB1c2VyLXNwZWNpZmllZCBzb3VyY2UgZmlsZXMgdG8gdGhlIHRhcmdldC4KICAgdGFyZ2V0LT5BZGRTb3VyY2VzKHNvdXJjZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWRkRGVwZW5kZW5jaWVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21BZGREZXBlbmRlbmNpZXNDb21tYW5kLmN4eAppbmRleCBiMWZjODkzLi4yZDU1YTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21BZGREZXBlbmRlbmNpZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21BZGREZXBlbmRlbmNpZXNDb21tYW5kLmN4eApAQCAtMjksNyArMjksNyBAQAogCiAgICAgLy8gc2tpcCBvdmVyIHRhcmdldF9uYW1lCiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYXJnIDogY21NYWtlUmFuZ2UoYXJncykuYWR2YW5jZSgxKSkgewotICAgICAgdGFyZ2V0LT5BZGRVdGlsaXR5KGFyZywgJm1mKTsKKyAgICAgIHRhcmdldC0+QWRkVXRpbGl0eShhcmcsIGZhbHNlLCAmbWYpOwogICAgIH0KICAgfSBlbHNlIHsKICAgICBtZi5Jc3N1ZU1lc3NhZ2UoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21BZGRFeGVjdXRhYmxlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21BZGRFeGVjdXRhYmxlQ29tbWFuZC5jeHgKaW5kZXggZTczOGJjNC4uOWRkOGExOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQWRkRXhlY3V0YWJsZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUFkZEV4ZWN1dGFibGVDb21tYW5kLmN4eApAQCAtMTE3LDE0ICsxMTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiBpcyBub3QgYW4gZXhlY3V0YWJsZS4iKSk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmIChhbGlhc2VkVGFyZ2V0LT5Jc0ltcG9ydGVkKCkgJiYKLSAgICAgICAgIWFsaWFzZWRUYXJnZXQtPklzSW1wb3J0ZWRHbG9iYWxseVZpc2libGUoKSkgewotICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJjYW5ub3QgY3JlYXRlIEFMSUFTIHRhcmdldCBcIiIsIGV4ZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGJlY2F1c2UgdGFyZ2V0IFwiIiwgYWxpYXNlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGlzIGltcG9ydGVkIGJ1dCBub3QgZ2xvYmFsbHkgdmlzaWJsZS4iKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1mLkFkZEFsaWFzKGV4ZW5hbWUsIGFsaWFzZWROYW1lKTsKKyAgICBtZi5BZGRBbGlhcyhleGVuYW1lLCBhbGlhc2VkTmFtZSwKKyAgICAgICAgICAgICAgICAhYWxpYXNlZFRhcmdldC0+SXNJbXBvcnRlZCgpIHx8CisgICAgICAgICAgICAgICAgICBhbGlhc2VkVGFyZ2V0LT5Jc0ltcG9ydGVkR2xvYmFsbHlWaXNpYmxlKCkpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFkZExpYnJhcnlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUFkZExpYnJhcnlDb21tYW5kLmN4eAppbmRleCAwNDM5YzUxLi4zZTVkNzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21BZGRMaWJyYXJ5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQWRkTGlicmFyeUNvbW1hbmQuY3h4CkBAIC0yLDEyICsyLDE0IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUFkZExpYnJhcnlDb21tYW5kLmgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVBvbGljaWVzLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtMTgwLDYgKzE4MiwxNiBAQAogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGlmIChtZi5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwNykgPT0gY21Qb2xpY2llczo6TkVXKSB7CisgICAgICAvLyBNYWtlIHN1cmUgdGhlIHRhcmdldCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorICAgICAgaWYgKG1mLkZpbmRUYXJnZXRUb1VzZShsaWJOYW1lKSkgeworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoCisgICAgICAgICAgImNhbm5vdCBjcmVhdGUgQUxJQVMgdGFyZ2V0IFwiIiwgbGliTmFtZSwKKyAgICAgICAgICAiXCIgYmVjYXVzZSBhbm90aGVyIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMuIikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorCiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGFsaWFzZWROYW1lID0gKnM7CiAgICAgaWYgKG1mLklzQWxpYXMoYWxpYXNlZE5hbWUpKSB7CiAgICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImNhbm5vdCBjcmVhdGUgQUxJQVMgdGFyZ2V0IFwiIiwgbGliTmFtZSwKQEAgLTIwNywxNCArMjE5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgbm90IGEgbGlicmFyeS4iKSk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmIChhbGlhc2VkVGFyZ2V0LT5Jc0ltcG9ydGVkKCkgJiYKLSAgICAgICAgIWFsaWFzZWRUYXJnZXQtPklzSW1wb3J0ZWRHbG9iYWxseVZpc2libGUoKSkgewotICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJjYW5ub3QgY3JlYXRlIEFMSUFTIHRhcmdldCBcIiIsIGxpYk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGJlY2F1c2UgdGFyZ2V0IFwiIiwgYWxpYXNlZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGlzIGltcG9ydGVkIGJ1dCBub3QgZ2xvYmFsbHkgdmlzaWJsZS4iKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1mLkFkZEFsaWFzKGxpYk5hbWUsIGFsaWFzZWROYW1lKTsKKyAgICBtZi5BZGRBbGlhcyhsaWJOYW1lLCBhbGlhc2VkTmFtZSwKKyAgICAgICAgICAgICAgICAhYWxpYXNlZFRhcmdldC0+SXNJbXBvcnRlZCgpIHx8CisgICAgICAgICAgICAgICAgICBhbGlhc2VkVGFyZ2V0LT5Jc0ltcG9ydGVkR2xvYmFsbHlWaXNpYmxlKCkpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKQEAgLTMwOSw3ICszMTYsNyBAQAogICAgIHJldHVybiB0cnVlOwogICB9CiAKLSAgY21BcHBlbmQoc3JjbGlzdHMsIHMsIGFyZ3MuZW5kKCkpOworICBjbTo6YXBwZW5kKHNyY2xpc3RzLCBzLCBhcmdzLmVuZCgpKTsKIAogICBtZi5BZGRMaWJyYXJ5KGxpYk5hbWUsIHR5cGUsIHNyY2xpc3RzLCBleGNsdWRlRnJvbUFsbCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFkZFN1YkRpcmVjdG9yeUNvbW1hbmQuY3h4IGIvU291cmNlL2NtQWRkU3ViRGlyZWN0b3J5Q29tbWFuZC5jeHgKaW5kZXggNmExYTUxNC4uODNkNjMwNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtQWRkU3ViRGlyZWN0b3J5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtQWRkU3ViRGlyZWN0b3J5Q29tbWFuZC5jeHgKQEAgLTQsNiArNCw4IEBACiAKICNpbmNsdWRlIDxjc3RyaW5nPgogCisjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCkBAIC01Myw3ICs1NSw4IEBACiAgICAgc3RhdHVzLlNldEVycm9yKGVycm9yKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgc3JjUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc3JjUGF0aCk7CisgIHNyY1BhdGggPQorICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc3JjUGF0aCwgbWYuR2V0SG9tZU91dHB1dERpcmVjdG9yeSgpKTsKIAogICAvLyBDb21wdXRlIHRoZSBmdWxsIHBhdGggdG8gdGhlIGJpbmFyeSBkaXJlY3RvcnkuCiAgIHN0ZDo6c3RyaW5nIGJpblBhdGg7CkBAIC04NSw3ICs4OCw4IEBACiAgICAgaWYgKGJpbkxlbiA+IDAgJiYgYmluLmJhY2soKSA9PSAnLycpIHsKICAgICAgIC0tYmluTGVuOwogICAgIH0KLSAgICBiaW5QYXRoID0gYmluLnN1YnN0cigwLCBiaW5MZW4pICsgc3JjUGF0aC5zdWJzdHIoc3JjTGVuKTsKKyAgICBiaW5QYXRoID0gY21TdHJDYXQoY206OnN0cmluZ192aWV3KGJpbikuc3Vic3RyKDAsIGJpbkxlbiksCisgICAgICAgICAgICAgICAgICAgICAgIGNtOjpzdHJpbmdfdmlldyhzcmNQYXRoKS5zdWJzdHIoc3JjTGVuKSk7CiAgIH0gZWxzZSB7CiAgICAgLy8gVXNlIHRoZSBiaW5hcnkgZGlyZWN0b3J5IHNwZWNpZmllZC4KICAgICAvLyBJbnRlcnByZXQgYSByZWxhdGl2ZSBwYXRoIHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudCBiaW5hcnkgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWRkVGVzdENvbW1hbmQuY3h4IGIvU291cmNlL2NtQWRkVGVzdENvbW1hbmQuY3h4CmluZGV4IDg5NDIxMTMuLjIwNWMxYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFkZFRlc3RDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21BZGRUZXN0Q29tbWFuZC5jeHgKQEAgLTIsNiArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUFkZFRlc3RDb21tYW5kLmgiCiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTQ0LDcgKzQ2LDcgQEAKICAgfSBlbHNlIHsKICAgICB0ZXN0ID0gbWYuQ3JlYXRlVGVzdChhcmdzWzBdKTsKICAgICB0ZXN0LT5TZXRPbGRTdHlsZSh0cnVlKTsKLSAgICBtZi5BZGRUZXN0R2VuZXJhdG9yKG5ldyBjbVRlc3RHZW5lcmF0b3IodGVzdCkpOworICAgIG1mLkFkZFRlc3RHZW5lcmF0b3IoY206Om1ha2VfdW5pcXVlPGNtVGVzdEdlbmVyYXRvcj4odGVzdCkpOwogICB9CiAgIHRlc3QtPlNldENvbW1hbmQoY29tbWFuZCk7CiAKQEAgLTE0MSw3ICsxNDMsNyBAQAogICAgIHRlc3QtPlNldFByb3BlcnR5KCJXT1JLSU5HX0RJUkVDVE9SWSIsIHdvcmtpbmdfZGlyZWN0b3J5LmNfc3RyKCkpOwogICB9CiAgIHRlc3QtPlNldENvbW1hbmRFeHBhbmRMaXN0cyhjb21tYW5kX2V4cGFuZF9saXN0cyk7Ci0gIG1mLkFkZFRlc3RHZW5lcmF0b3IobmV3IGNtVGVzdEdlbmVyYXRvcih0ZXN0LCBjb25maWd1cmF0aW9ucykpOworICBtZi5BZGRUZXN0R2VuZXJhdG9yKGNtOjptYWtlX3VuaXF1ZTxjbVRlc3RHZW5lcmF0b3I+KHRlc3QsIGNvbmZpZ3VyYXRpb25zKSk7CiAKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21BZmZpbml0eS5jeHggYi9Tb3VyY2UvY21BZmZpbml0eS5jeHgKaW5kZXggOGY5ZmUyYS4uMzU0NDNlNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtQWZmaW5pdHkuY3h4CisrKyBiL1NvdXJjZS9jbUFmZmluaXR5LmN4eApAQCAtMiw3ICsyLDcgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtQWZmaW5pdHkuaCIKIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaWZuZGVmIENNQUtFX1VTRV9TWVNURU1fTElCVVYKICMgIGlmZGVmIF9XSU4zMgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQWxnb3JpdGhtcy5oIGIvU291cmNlL2NtQWxnb3JpdGhtcy5oCmluZGV4IGUwZDI3ZWUuLmM4ZThkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFsZ29yaXRobXMuaAorKysgYi9Tb3VyY2UvY21BbGdvcml0aG1zLmgKQEAgLTgsMjQgKzgsMTUgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX2t3aW1sLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KLXN0cnVjdCBjbU92ZXJsb2FkUHJpb3JpdHkgOiBjbU92ZXJsb2FkUHJpb3JpdHk8TiAtIDE+Ci17Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGNtT3ZlcmxvYWRQcmlvcml0eTwwPgotewotfTsKLQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ3ZEl0PgogRndkSXQgY21Sb3RhdGUoRndkSXQgZmlyc3QsIEZ3ZEl0IG1pZGRsZSwgRndkSXQgbGFzdCkKIHsKQEAgLTM2LDc2ICsyNyw4IEBACiAgIHJldHVybiBmaXJzdDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRhaW5lciwgdHlwZW5hbWUgUHJlZGljYXRlPgotdm9pZCBjbUVyYXNlSWYoQ29udGFpbmVyJiBjb250LCBQcmVkaWNhdGUgcHJlZCkKLXsKLSAgY29udC5lcmFzZShzdGQ6OnJlbW92ZV9pZihjb250LmJlZ2luKCksIGNvbnQuZW5kKCksIHByZWQpLCBjb250LmVuZCgpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlLCB0eXBlbmFtZSBLZXk+Ci1hdXRvIGNtQ29udGFpbnNJbXBsKFJhbmdlIGNvbnN0JiByYW5nZSwgS2V5IGNvbnN0JiBrZXksIGNtT3ZlcmxvYWRQcmlvcml0eTwyPikKLSAgLT4gZGVjbHR5cGUocmFuZ2UuZXhpc3RzKGtleSkpCi17Ci0gIHJldHVybiByYW5nZS5leGlzdHMoa2V5KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlLCB0eXBlbmFtZSBLZXk+Ci1hdXRvIGNtQ29udGFpbnNJbXBsKFJhbmdlIGNvbnN0JiByYW5nZSwgS2V5IGNvbnN0JiBrZXksIGNtT3ZlcmxvYWRQcmlvcml0eTwxPikKLSAgLT4gZGVjbHR5cGUocmFuZ2UuZmluZChrZXkpICE9IHJhbmdlLmVuZCgpKQotewotICByZXR1cm4gcmFuZ2UuZmluZChrZXkpICE9IHJhbmdlLmVuZCgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2UsIHR5cGVuYW1lIEtleT4KLWJvb2wgY21Db250YWluc0ltcGwoUmFuZ2UgY29uc3QmIHJhbmdlLCBLZXkgY29uc3QmIGtleSwgY21PdmVybG9hZFByaW9yaXR5PDA+KQotewotICB1c2luZyBzdGQ6OmJlZ2luOwotICB1c2luZyBzdGQ6OmVuZDsKLSAgcmV0dXJuIHN0ZDo6ZmluZChiZWdpbihyYW5nZSksIGVuZChyYW5nZSksIGtleSkgIT0gZW5kKHJhbmdlKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlLCB0eXBlbmFtZSBLZXk+Ci1ib29sIGNtQ29udGFpbnMoUmFuZ2UgY29uc3QmIHJhbmdlLCBLZXkgY29uc3QmIGtleSkKLXsKLSAgcmV0dXJuIGNtQ29udGFpbnNJbXBsKHJhbmdlLCBrZXksIGNtT3ZlcmxvYWRQcmlvcml0eTwyPnt9KTsKLX0KLQogbmFtZXNwYWNlIENvbnRhaW5lckFsZ29yaXRobXMgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBjbUlzUGFpcgotewotICBlbnVtCi0gIHsKLSAgICB2YWx1ZSA9IGZhbHNlCi0gIH07Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLXN0cnVjdCBjbUlzUGFpcjxzdGQ6OnBhaXI8SywgVj4+Ci17Ci0gIGVudW0KLSAgewotICAgIHZhbHVlID0gdHJ1ZQotICB9OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlLAotICAgICAgICAgIGJvb2wgdmFsdWVUeXBlSXNQYWlyID0gY21Jc1BhaXI8dHlwZW5hbWUgUmFuZ2U6OnZhbHVlX3R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBEZWZhdWx0RGVsZXRlcgotewotICB2b2lkIG9wZXJhdG9yKCkodHlwZW5hbWUgUmFuZ2U6OnZhbHVlX3R5cGUgdmFsdWUpIGNvbnN0IHsgZGVsZXRlIHZhbHVlOyB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2U+Ci1zdHJ1Y3QgRGVmYXVsdERlbGV0ZXI8UmFuZ2UsIC8qIHZhbHVlVHlwZUlzUGFpciA9ICovIHRydWU+Ci17Ci0gIHZvaWQgb3BlcmF0b3IoKSh0eXBlbmFtZSBSYW5nZTo6dmFsdWVfdHlwZSB2YWx1ZSkgY29uc3QKLSAgewotICAgIGRlbGV0ZSB2YWx1ZS5zZWNvbmQ7Ci0gIH0KLX07Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBGd2RJdD4KIEZ3ZEl0IFJlbW92ZU4oRndkSXQgaTEsIEZ3ZEl0IGkyLCBzaXplX3QgbikKIHsKQEAgLTEzOCwyNSArNjEsNiBAQAogICBjbVJhbmdlPHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVCYWNrdHJhY2U+Ojpjb25zdF9pdGVyYXRvcj47CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KLXZvaWQgY21EZWxldGVBbGwoUmFuZ2UgY29uc3QmIHIpCi17Ci0gIHN0ZDo6Zm9yX2VhY2goci5iZWdpbigpLCByLmVuZCgpLAotICAgICAgICAgICAgICAgIENvbnRhaW5lckFsZ29yaXRobXM6OkRlZmF1bHREZWxldGVyPFJhbmdlPigpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhbmdlPgotdm9pZCBjbUFwcGVuZChzdGQ6OnZlY3RvcjxUPiYgdiwgUmFuZ2UgY29uc3QmIHIpCi17Ci0gIHYuaW5zZXJ0KHYuZW5kKCksIHIuYmVnaW4oKSwgci5lbmQoKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJbnB1dEl0Pgotdm9pZCBjbUFwcGVuZChzdGQ6OnZlY3RvcjxUPiYgdiwgSW5wdXRJdCBmaXJzdCwgSW5wdXRJdCBsYXN0KQotewotICB2Lmluc2VydCh2LmVuZCgpLCBmaXJzdCwgbGFzdCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KIHR5cGVuYW1lIFJhbmdlOjpjb25zdF9pdGVyYXRvciBjbVJlbW92ZU4oUmFuZ2UmIHIsIHNpemVfdCBuKQogewogICByZXR1cm4gQ29udGFpbmVyQWxnb3JpdGhtczo6UmVtb3ZlTihyLmJlZ2luKCksIHIuZW5kKCksIG4pOwpAQCAtMTk3LDcgKzEwMSw3IEBACiBGb3J3YXJkSXRlcmF0b3IgY21SZW1vdmVEdXBsaWNhdGVzKEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2FyZEl0ZXJhdG9yIGxhc3QpCiB7CiAgIHVzaW5nIFZhbHVlID0gdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8Rm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZTsKLSAgdXNpbmcgSGFzaCA9IHN0cnVjdAorICBzdHJ1Y3QgSGFzaAogICB7CiAgICAgc3RkOjpzaXplX3Qgb3BlcmF0b3IoKShGb3J3YXJkSXRlcmF0b3IgaXQpIGNvbnN0CiAgICAgewpAQCAtMjA1LDcgKzEwOSw3IEBACiAgICAgfQogICB9OwogCi0gIHVzaW5nIEVxdWFsID0gc3RydWN0CisgIHN0cnVjdCBFcXVhbAogICB7CiAgICAgYm9vbCBvcGVyYXRvcigpKEZvcndhcmRJdGVyYXRvciBpdDEsIEZvcndhcmRJdGVyYXRvciBpdDIpIGNvbnN0CiAgICAgewpAQCAtMjE2LDcgKzEyMCw3IEBACiAKICAgRm9yd2FyZEl0ZXJhdG9yIHJlc3VsdCA9IGZpcnN0OwogICB3aGlsZSAoZmlyc3QgIT0gbGFzdCkgewotICAgIGlmICghY21Db250YWlucyh1bmlxLCBmaXJzdCkpIHsKKyAgICBpZiAoIWNtOjpjb250YWlucyh1bmlxLCBmaXJzdCkpIHsKICAgICAgIGlmIChyZXN1bHQgIT0gZmlyc3QpIHsKICAgICAgICAgKnJlc3VsdCA9IHN0ZDo6bW92ZSgqZmlyc3QpOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQXJjaGl2ZVdyaXRlLmN4eCBiL1NvdXJjZS9jbUFyY2hpdmVXcml0ZS5jeHgKaW5kZXggZTVlZWE3OS4uYWRkZmJmZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtQXJjaGl2ZVdyaXRlLmN4eAorKysgYi9Tb3VyY2UvY21BcmNoaXZlV3JpdGUuY3h4CkBAIC03LDEyICs3LDE0IEBACiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3N0cmVhbT4KIAorI2luY2x1ZGUgPGNtM3AvYXJjaGl2ZS5oPgorI2luY2x1ZGUgPGNtM3AvYXJjaGl2ZV9lbnRyeS5oPgorCiAjaW5jbHVkZSAiY21zeXMvRGlyZWN0b3J5Lmh4eCIKICNpbmNsdWRlICJjbXN5cy9FbmNvZGluZy5oeHgiCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAKICNpbmNsdWRlICJjbV9nZXRfZGF0ZS5oIgotI2luY2x1ZGUgImNtX2xpYmFyY2hpdmUuaCIKIAogI2luY2x1ZGUgImNtTG9jYWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC0xNzAsMTUgKzE3MiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21fYXJjaGl2ZV9lcnJvcl9zdHJpbmcodGhpcy0+QXJjaGl2ZSkpOwogICAgIHJldHVybjsKICAgfQorfQogCitib29sIGNtQXJjaGl2ZVdyaXRlOjpPcGVuKCkKK3sKICAgaWYgKGFyY2hpdmVfd3JpdGVfb3BlbigKICAgICAgICAgdGhpcy0+QXJjaGl2ZSwgdGhpcywgbnVsbHB0ciwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxhcmNoaXZlX3dyaXRlX2NhbGxiYWNrKj4oJkNhbGxiYWNrOjpXcml0ZSksCiAgICAgICAgIG51bGxwdHIpICE9IEFSQ0hJVkVfT0spIHsKICAgICB0aGlzLT5FcnJvciA9CiAgICAgICBjbVN0ckNhdCgiYXJjaGl2ZV93cml0ZV9vcGVuOiAiLCBjbV9hcmNoaXZlX2Vycm9yX3N0cmluZyh0aGlzLT5BcmNoaXZlKSk7Ci0gICAgcmV0dXJuOworICAgIHJldHVybiBmYWxzZTsKICAgfQorICByZXR1cm4gdHJ1ZTsKIH0KIAogY21BcmNoaXZlV3JpdGU6On5jbUFyY2hpdmVXcml0ZSgpCkBAIC0yMDAsOCArMjA2LDExIEBACiBib29sIGNtQXJjaGl2ZVdyaXRlOjpBZGRQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIHNpemVfdCBza2lwLCBjb25zdCBjaGFyKiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlKQogewotICBpZiAoIXRoaXMtPkFkZEZpbGUocGF0aCwgc2tpcCwgcHJlZml4KSkgewotICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKHN0cmNtcChwYXRoLCAiLiIpICE9IDAgfHwKKyAgICAgICh0aGlzLT5Gb3JtYXQgIT0gInppcCIgJiYgdGhpcy0+Rm9ybWF0ICE9ICI3emlwIikpIHsKKyAgICBpZiAoIXRoaXMtPkFkZEZpbGUocGF0aCwgc2tpcCwgcHJlZml4KSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgfQogICBpZiAoKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkocGF0aCkgfHwgIXJlY3Vyc2l2ZSkgfHwKICAgICAgIGNtU3lzdGVtVG9vbHM6OkZpbGVJc1N5bWxpbmsocGF0aCkpIHsKQEAgLTIxMCw2ICsyMTksOSBAQAogICBjbXN5czo6RGlyZWN0b3J5IGQ7CiAgIGlmIChkLkxvYWQocGF0aCkpIHsKICAgICBzdGQ6OnN0cmluZyBuZXh0ID0gY21TdHJDYXQocGF0aCwgJy8nKTsKKyAgICBpZiAobmV4dCA9PSAiLi8iICYmICh0aGlzLT5Gb3JtYXQgPT0gInppcCIgfHwgdGhpcy0+Rm9ybWF0ID09ICI3emlwIikpIHsKKyAgICAgIG5leHQuY2xlYXIoKTsKKyAgICB9CiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBuZXh0LnNpemUoKTsKICAgICB1bnNpZ25lZCBsb25nIG4gPSBkLkdldE51bWJlck9mRmlsZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBuOyArK2kpIHsKQEAgLTI3MCw3ICsyODIsMTIgQEAKICAgICAgIHRpbWVfdCBlcG9jaFRpbWU7CiAgICAgICBpc3MgPj4gZXBvY2hUaW1lOwogICAgICAgaWYgKGlzcy5lb2YoKSAmJiAhaXNzLmZhaWwoKSkgeworICAgICAgICAvLyBTZXQgYWxsIG9mIHRoZSBmaWxlIHRpbWVzIHRvIHRoZSBlcG9jaCB0aW1lIHRvIGhhbmRsZSBhcmNoaXZlCisgICAgICAgIC8vIGZvcm1hdHMgdGhhdCBpbmNsdWRlIGNyZWF0aW9uL2FjY2VzcyB0aW1lLgogICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9tdGltZShlLCBlcG9jaFRpbWUsIDApOworICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9hdGltZShlLCBlcG9jaFRpbWUsIDApOworICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9jdGltZShlLCBlcG9jaFRpbWUsIDApOworICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9iaXJ0aHRpbWUoZSwgZXBvY2hUaW1lLCAwKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTM1OSwzICszNzYsMTYgQEAKICAgfQogICByZXR1cm4gdHJ1ZTsKIH0KKworYm9vbCBjbUFyY2hpdmVXcml0ZTo6U2V0RmlsdGVyT3B0aW9uKGNvbnN0IGNoYXIqIG1vZHVsZSwgY29uc3QgY2hhcioga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlKQoreworICBpZiAoYXJjaGl2ZV93cml0ZV9zZXRfZmlsdGVyX29wdGlvbih0aGlzLT5BcmNoaXZlLCBtb2R1bGUsIGtleSwgdmFsdWUpICE9CisgICAgICBBUkNISVZFX09LKSB7CisgICAgdGhpcy0+RXJyb3IgPSAiYXJjaGl2ZV93cml0ZV9zZXRfZmlsdGVyX29wdGlvbjogIjsKKyAgICB0aGlzLT5FcnJvciArPSBjbV9hcmNoaXZlX2Vycm9yX3N0cmluZyh0aGlzLT5BcmNoaXZlKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFyY2hpdmVXcml0ZS5oIGIvU291cmNlL2NtQXJjaGl2ZVdyaXRlLmgKaW5kZXggZTc5MTc2MS4uYjY0M2JjZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQXJjaGl2ZVdyaXRlLmgKKysrIGIvU291cmNlL2NtQXJjaGl2ZVdyaXRlLmgKQEAgLTYyLDYgKzYyLDggQEAKICAgY21BcmNoaXZlV3JpdGUoY29uc3QgY21BcmNoaXZlV3JpdGUmKSA9IGRlbGV0ZTsKICAgY21BcmNoaXZlV3JpdGUmIG9wZXJhdG9yPShjb25zdCBjbUFyY2hpdmVXcml0ZSYpID0gZGVsZXRlOwogCisgIGJvb2wgT3BlbigpOworCiAgIC8qKgogICAgKiBBZGQgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSkgdG8gdGhlIGFyY2hpdmUuICBEaXJlY3RvcmllcyBhcmUKICAgICogYWRkZWQgcmVjdXJzaXZlbHkuICBUaGUgInBhdGgiIG11c3QgYmUgcmVhZGFibGUgb24gZGlzaywgZWl0aGVyCkBAIC0xMzksNiArMTQxLDkgQEAKICAgICB0aGlzLT5HbmFtZSA9ICIiOwogICB9CiAKKyAgLy8hIFNldCBhbiBvcHRpb24gb24gYSBmaWx0ZXI7CisgIGJvb2wgU2V0RmlsdGVyT3B0aW9uKGNvbnN0IGNoYXIqIG1vZHVsZSwgY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSk7CisKIHByaXZhdGU6CiAgIGJvb2wgT2theSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkVycm9yLmVtcHR5KCk7IH0KICAgYm9vbCBBZGRQYXRoKGNvbnN0IGNoYXIqIHBhdGgsIHNpemVfdCBza2lwLCBjb25zdCBjaGFyKiBwcmVmaXgsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Bcmd1bWVudFBhcnNlci5jeHggYi9Tb3VyY2UvY21Bcmd1bWVudFBhcnNlci5jeHgKaW5kZXggNGM4NzE3Ny4uNDYyNGYxYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtQXJndW1lbnRQYXJzZXIuY3h4CisrKyBiL1NvdXJjZS9jbUFyZ3VtZW50UGFyc2VyLmN4eApAQCAtMyw3ICszLDYgQEAKICNpbmNsdWRlICJjbUFyZ3VtZW50UGFyc2VyLmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAKIG5hbWVzcGFjZSBBcmd1bWVudFBhcnNlciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUFyZ3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvY21Bcmd1bWVudFBhcnNlci5oCmluZGV4IDk0MjY1MzcuLjVkMmRmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUFyZ3VtZW50UGFyc2VyLmgKKysrIGIvU291cmNlL2NtQXJndW1lbnRQYXJzZXIuaApAQCAtMTIsOCArMTIsNyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgotCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogbmFtZXNwYWNlIEFyZ3VtZW50UGFyc2VyIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQXV4U291cmNlRGlyZWN0b3J5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21BdXhTb3VyY2VEaXJlY3RvcnlDb21tYW5kLmN4eAppbmRleCAyODliYjcyLi41M2Q0Y2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21BdXhTb3VyY2VEaXJlY3RvcnlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21BdXhTb3VyY2VEaXJlY3RvcnlDb21tYW5kLmN4eApAQCAtNiw2ICs2LDggQEAKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKwogI2luY2x1ZGUgImNtc3lzL0RpcmVjdG9yeS5oeHgiCiAKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgpAQCAtNTAsMTEgKzUyLDEwIEBACiAgICAgICAvLyBTcGxpdCB0aGUgZmlsZW5hbWUgaW50byBiYXNlIGFuZCBleHRlbnNpb24KICAgICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZG90cG9zID0gZmlsZS5yZmluZCgnLicpOwogICAgICAgaWYgKGRvdHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBzdGQ6OnN0cmluZyBleHQgPSBmaWxlLnN1YnN0cihkb3Rwb3MgKyAxKTsKLSAgICAgICAgc3RkOjpzdHJpbmcgYmFzZSA9IGZpbGUuc3Vic3RyKDAsIGRvdHBvcyk7CisgICAgICAgIGF1dG8gZXh0ID0gY206OnN0cmluZ192aWV3KGZpbGUpLnN1YnN0cihkb3Rwb3MgKyAxKTsKICAgICAgICAgLy8gUHJvY2VzcyBvbmx5IHNvdXJjZSBmaWxlcwogICAgICAgICBhdXRvIGNtID0gbWYuR2V0Q01ha2VJbnN0YW5jZSgpOwotICAgICAgICBpZiAoIWJhc2UuZW1wdHkoKSAmJiBjbS0+SXNTb3VyY2VFeHRlbnNpb24oZXh0KSkgeworICAgICAgICBpZiAoZG90cG9zID4gMCAmJiBjbS0+SXNBQ0xpa2VTb3VyY2VFeHRlbnNpb24oZXh0KSkgewogICAgICAgICAgIHN0ZDo6c3RyaW5nIGZ1bGxuYW1lID0gY21TdHJDYXQodGVtcGxhdGVEaXJlY3RvcnksICcvJywgZmlsZSk7CiAgICAgICAgICAgLy8gYWRkIHRoZSBmaWxlIGFzIGEgY2xhc3MgZmlsZSBzbwogICAgICAgICAgIC8vIGRlcGVuZHMgY2FuIGJlIGRvbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUJpblV0aWxzTGludXhFTEZMaW5rZXIuY3h4IGIvU291cmNlL2NtQmluVXRpbHNMaW51eEVMRkxpbmtlci5jeHgKaW5kZXggMGRlYTgyNS4uOWNlNDAzZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtQmluVXRpbHNMaW51eEVMRkxpbmtlci5jeHgKKysrIGIvU291cmNlL2NtQmluVXRpbHNMaW51eEVMRkxpbmtlci5jeHgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgPGNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eD4KIApAQCAtMjYsMTQgKzI3LDE2IEBACiAKICAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uTWF0Y2ggbWF0Y2g7CiAgIGlmIChvcmlnaW5SZWdleC5maW5kKHJwYXRoLmNfc3RyKCksIG1hdGNoKSkgewotICAgIHN0ZDo6c3RyaW5nIGJlZ2luID0gcnBhdGguc3Vic3RyKDAsIG1hdGNoLnN0YXJ0KDEpKTsKLSAgICBzdGQ6OnN0cmluZyBlbmQgPSBycGF0aC5zdWJzdHIobWF0Y2guZW5kKDEpKTsKLSAgICByZXR1cm4gYmVnaW4gKyBvcmlnaW4gKyBlbmQ7CisgICAgY206OnN0cmluZ192aWV3IHBhdGh2KHJwYXRoKTsKKyAgICBhdXRvIGJlZ2luID0gcGF0aHYuc3Vic3RyKDAsIG1hdGNoLnN0YXJ0KDEpKTsKKyAgICBhdXRvIGVuZCA9IHBhdGh2LnN1YnN0cihtYXRjaC5lbmQoMSkpOworICAgIHJldHVybiBjbVN0ckNhdChiZWdpbiwgb3JpZ2luLCBlbmQpOwogICB9CiAgIGlmIChvcmlnaW5DdXJseVJlZ2V4LmZpbmQocnBhdGguY19zdHIoKSwgbWF0Y2gpKSB7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW4gPSBycGF0aC5zdWJzdHIoMCwgbWF0Y2guc3RhcnQoKSk7Ci0gICAgc3RkOjpzdHJpbmcgZW5kID0gcnBhdGguc3Vic3RyKG1hdGNoLmVuZCgpKTsKLSAgICByZXR1cm4gYmVnaW4gKyBvcmlnaW4gKyBlbmQ7CisgICAgY206OnN0cmluZ192aWV3IHBhdGh2KHJwYXRoKTsKKyAgICBhdXRvIGJlZ2luID0gcGF0aHYuc3Vic3RyKDAsIG1hdGNoLnN0YXJ0KCkpOworICAgIGF1dG8gZW5kID0gcGF0aHYuc3Vic3RyKG1hdGNoLmVuZCgpKTsKKyAgICByZXR1cm4gY21TdHJDYXQoYmVnaW4sIG9yaWdpbiwgZW5kKTsKICAgfQogICByZXR1cm4gcnBhdGg7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21CaW5VdGlsc01hY09TTWFjaE9MaW5rZXIuY3h4IGIvU291cmNlL2NtQmluVXRpbHNNYWNPU01hY2hPTGlua2VyLmN4eAppbmRleCA5ODI1MGIxLi4wZjQ3MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21CaW5VdGlsc01hY09TTWFjaE9MaW5rZXIuY3h4CisrKyBiL1NvdXJjZS9jbUJpblV0aWxzTWFjT1NNYWNoT0xpbmtlci5jeHgKQEAgLTE0LDYgKzE0LDE4IEBACiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCituYW1lc3BhY2UgeworYm9vbCBJc01pc3NpbmdTeXN0ZW1EeWxpYihzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkKK3sKKyAgLy8gU3RhcnRpbmcgb24gbWFjT1MgMTEsIHRoZSBkeW5hbWljIGxvYWRlciBoYXMgYSBidWlsdGluIGNhY2hlIG9mCisgIC8vIHN5c3RlbS1wcm92aWRlZCBkeWxpYiBmaWxlcyB0aGF0IGRvIG5vdCBleGlzdCBvbiB0aGUgZmlsZXN5c3RlbS4KKyAgLy8gVGVsbCBvdXIgY2FsbGVyIHRoYXQgdGhlc2UgYXJlIGV4cGVjdGVkIHRvIGJlIG1pc3NpbmcuCisgIHJldHVybiAoKGNtSGFzTGl0ZXJhbFByZWZpeChwYXRoLCAiL1N5c3RlbS9MaWJyYXJ5LyIpIHx8CisgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChwYXRoLCAiL3Vzci9saWIvIikpICYmCisgICAgICAgICAgIWNtU3lzdGVtVG9vbHM6OlBhdGhFeGlzdHMocGF0aCkpOworfQorfQorCiBjbUJpblV0aWxzTWFjT1NNYWNoT0xpbmtlcjo6Y21CaW5VdGlsc01hY09TTWFjaE9MaW5rZXIoCiAgIGNtUnVudGltZURlcGVuZGVuY3lBcmNoaXZlKiBhcmNoaXZlKQogICA6IGNtQmluVXRpbHNMaW5rZXIoYXJjaGl2ZSkKQEAgLTgyLDcgKzk0LDggQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQogICAgICAgaWYgKHJlc29sdmVkKSB7Ci0gICAgICAgIGlmICghdGhpcy0+QXJjaGl2ZS0+SXNQb3N0RXhjbHVkZWQocGF0aCkpIHsKKyAgICAgICAgaWYgKCF0aGlzLT5BcmNoaXZlLT5Jc1Bvc3RFeGNsdWRlZChwYXRoKSAmJgorICAgICAgICAgICAgIUlzTWlzc2luZ1N5c3RlbUR5bGliKHBhdGgpKSB7CiAgICAgICAgICAgYXV0byBmaWxlbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShwYXRoKTsKICAgICAgICAgICBib29sIHVuaXF1ZTsKICAgICAgICAgICB0aGlzLT5BcmNoaXZlLT5BZGRSZXNvbHZlZFBhdGgoZmlsZW5hbWUsIHBhdGgsIHVuaXF1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21CdWlsZENvbW1hbmQuY3h4IGIvU291cmNlL2NtQnVpbGRDb21tYW5kLmN4eAppbmRleCA0OWM5NDM5Li5iODJmYjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21CdWlsZENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUJ1aWxkQ29tbWFuZC5jeHgKQEAgLTEwOCw3ICsxMDgsNyBAQAogICBpZiAoY2FjaGVWYWx1ZSkgewogICAgIHJldHVybiB0cnVlOwogICB9Ci0gIG1mLkFkZENhY2hlRGVmaW5pdGlvbihkZWZpbmUsIG1ha2Vjb21tYW5kLmNfc3RyKCksCisgIG1mLkFkZENhY2hlRGVmaW5pdGlvbihkZWZpbmUsIG1ha2Vjb21tYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgdXNlZCB0byBidWlsZCBlbnRpcmUgcHJvamVjdCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSB0aGUgY29tbWFuZCBsaW5lLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlNUUklORyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21CdWlsZE5hbWVDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUJ1aWxkTmFtZUNvbW1hbmQuY3h4CmluZGV4IDNlNTE3ZGMuLmFkNGQ2NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUJ1aWxkTmFtZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUJ1aWxkTmFtZUNvbW1hbmQuY3h4CkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICBzdGQ6OnJlcGxhY2UoY3YuYmVnaW4oKSwgY3YuZW5kKCksICcvJywgJ18nKTsKICAgICAgIHN0ZDo6cmVwbGFjZShjdi5iZWdpbigpLCBjdi5lbmQoKSwgJygnLCAnXycpOwogICAgICAgc3RkOjpyZXBsYWNlKGN2LmJlZ2luKCksIGN2LmVuZCgpLCAnKScsICdfJyk7Ci0gICAgICBtZi5BZGRDYWNoZURlZmluaXRpb24oYXJnc1swXSwgY3YuY19zdHIoKSwgIk5hbWUgb2YgYnVpbGQuIiwKKyAgICAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbihhcmdzWzBdLCBjdiwgIk5hbWUgb2YgYnVpbGQuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlNUUklORyk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtNTQsNyArNTQsNyBAQAogICBzdGQ6OnJlcGxhY2UoYnVpbGRuYW1lLmJlZ2luKCksIGJ1aWxkbmFtZS5lbmQoKSwgJygnLCAnXycpOwogICBzdGQ6OnJlcGxhY2UoYnVpbGRuYW1lLmJlZ2luKCksIGJ1aWxkbmFtZS5lbmQoKSwgJyknLCAnXycpOwogCi0gIG1mLkFkZENhY2hlRGVmaW5pdGlvbihhcmdzWzBdLCBidWlsZG5hbWUuY19zdHIoKSwgIk5hbWUgb2YgYnVpbGQuIiwKKyAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKGFyZ3NbMF0sIGJ1aWxkbmFtZSwgIk5hbWUgb2YgYnVpbGQuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DTWFrZUxhbmd1YWdlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21DTWFrZUxhbmd1YWdlQ29tbWFuZC5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5MjY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbUNNYWtlTGFuZ3VhZ2VDb21tYW5kLmN4eApAQCAtMCwwICsxLDEzNyBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2luY2x1ZGUgImNtQ01ha2VMYW5ndWFnZUNvbW1hbmQuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KKworI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCisjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCisjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUmFuZ2UuaCIKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCisKK25hbWVzcGFjZSB7CitzdGQ6OmFycmF5PGNtOjpzdGF0aWNfc3RyaW5nX3ZpZXcsIDEyPiBJbnZhbGlkQ29tbWFuZHN7CisgIHsgLy8gY2xhbmctZm9ybWF0IG9mZgorICAiZnVuY3Rpb24iX3MsICJlbmRmdW5jdGlvbiJfcywKKyAgIm1hY3JvIl9zLCAiZW5kbWFjcm8iX3MsCisgICJpZiJfcywgImVsc2VpZiJfcywgImVsc2UiX3MsICJlbmRpZiJfcywKKyAgIndoaWxlIl9zLCAiZW5kd2hpbGUiX3MsCisgICJmb3JlYWNoIl9zLCAiZW5kZm9yZWFjaCJfcworICB9IC8vIGNsYW5nLWZvcm1hdCBvbgorfTsKK30KKworYm9vbCBjbUNNYWtlTGFuZ3VhZ2VDb21tYW5kKHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVBcmd1bWVudD4gY29uc3QmIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKK3sKKyAgaWYgKGFyZ3MuZW1wdHkoKSkgeworICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjbU1ha2VmaWxlJiBtYWtlZmlsZSA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpOworICBjbUxpc3RGaWxlQ29udGV4dCBjb250ZXh0ID0gbWFrZWZpbGUuR2V0RXhlY3V0aW9uQ29udGV4dCgpOworCisgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRpc3BhdGNoRXhwYW5kZWRBcmdzOworICBzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlQXJndW1lbnQ+IGRpc3BhdGNoQXJnczsKKyAgZGlzcGF0Y2hBcmdzLmVtcGxhY2VfYmFjayhhcmdzWzBdKTsKKyAgbWFrZWZpbGUuRXhwYW5kQXJndW1lbnRzKGRpc3BhdGNoQXJncywgZGlzcGF0Y2hFeHBhbmRlZEFyZ3MpOworCisgIGlmIChkaXNwYXRjaEV4cGFuZGVkQXJncy5lbXB0eSgpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGlmIChkaXNwYXRjaEV4cGFuZGVkQXJnc1swXSA9PSAiQ0FMTCIpIHsKKyAgICBpZiAoKGFyZ3Muc2l6ZSgpID09IDEgJiYgZGlzcGF0Y2hFeHBhbmRlZEFyZ3Muc2l6ZSgpICE9IDIpIHx8CisgICAgICAgIGRpc3BhdGNoRXhwYW5kZWRBcmdzLnNpemUoKSA+IDIpIHsKKyAgICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBGaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbAorICAgIHN0ZDo6c3RyaW5nIGNhbGxDb21tYW5kOworICAgIHNpemVfdCBzdGFydEFyZzsKKyAgICBpZiAoZGlzcGF0Y2hFeHBhbmRlZEFyZ3Muc2l6ZSgpID09IDEpIHsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmdW5jdGlvbkV4cGFuZGVkQXJnOworICAgICAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUFyZ3VtZW50PiBmdW5jdGlvbkFyZzsKKyAgICAgIGZ1bmN0aW9uQXJnLmVtcGxhY2VfYmFjayhhcmdzWzFdKTsKKyAgICAgIG1ha2VmaWxlLkV4cGFuZEFyZ3VtZW50cyhmdW5jdGlvbkFyZywgZnVuY3Rpb25FeHBhbmRlZEFyZyk7CisKKyAgICAgIGlmIChmdW5jdGlvbkV4cGFuZGVkQXJnLnNpemUoKSAhPSAxKSB7CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBjYWxsQ29tbWFuZCA9IGZ1bmN0aW9uRXhwYW5kZWRBcmdbMF07CisgICAgICBzdGFydEFyZyA9IDI7CisgICAgfSBlbHNlIHsKKyAgICAgIGNhbGxDb21tYW5kID0gZGlzcGF0Y2hFeHBhbmRlZEFyZ3NbMV07CisgICAgICBzdGFydEFyZyA9IDE7CisgICAgfQorCisgICAgLy8gZW5zdXJlIHNwZWNpZmllZCBjb21tYW5kIGlzIHZhbGlkCisgICAgLy8gc3RhcnQvZW5kIGZsb3cgY29udHJvbCBjb21tYW5kcyBhcmUgbm90IGFsbG93ZWQKKyAgICBhdXRvIGNtZCA9IGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShjYWxsQ29tbWFuZCk7CisgICAgaWYgKHN0ZDo6ZmluZChJbnZhbGlkQ29tbWFuZHMuY2JlZ2luKCksIEludmFsaWRDb21tYW5kcy5jZW5kKCksIGNtZCkgIT0KKyAgICAgICAgSW52YWxpZENvbW1hbmRzLmNlbmQoKSkgeworICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJpbnZhbGlkIGNvbW1hbmQgc3BlY2lmaWVkOiAiX3MsIGNhbGxDb21tYW5kKSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY21MaXN0RmlsZUZ1bmN0aW9uIGZ1bmM7CisgICAgZnVuYy5OYW1lID0gY2FsbENvbW1hbmQ7CisgICAgZnVuYy5MaW5lID0gY29udGV4dC5MaW5lOworCisgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBjYWxsIGFib3ZlCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0QXJnOyBpIDwgYXJncy5zaXplKCk7ICsraSkgeworICAgICAgY21MaXN0RmlsZUFyZ3VtZW50IGxmYXJnOworICAgICAgbGZhcmcuRGVsaW0gPSBhcmdzW2ldLkRlbGltOworICAgICAgbGZhcmcuTGluZSA9IGNvbnRleHQuTGluZTsKKyAgICAgIGxmYXJnLlZhbHVlID0gYXJnc1tpXS5WYWx1ZTsKKyAgICAgIGZ1bmMuQXJndW1lbnRzLmVtcGxhY2VfYmFjayhsZmFyZyk7CisgICAgfQorCisgICAgcmVzdWx0ID0gbWFrZWZpbGUuRXhlY3V0ZUNvbW1hbmQoZnVuYywgc3RhdHVzKTsKKyAgfSBlbHNlIGlmIChkaXNwYXRjaEV4cGFuZGVkQXJnc1swXSA9PSAiRVZBTCIpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZXhwYW5kZWRBcmdzOworICAgIG1ha2VmaWxlLkV4cGFuZEFyZ3VtZW50cyhhcmdzLCBleHBhbmRlZEFyZ3MpOworCisgICAgaWYgKGV4cGFuZGVkQXJncy5zaXplKCkgPCAyKSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGV4cGFuZGVkQXJnc1sxXSAhPSAiQ09ERSIpIHsKKyAgICAgIGF1dG8gY29kZV9pdGVyID0KKyAgICAgICAgc3RkOjpmaW5kKGV4cGFuZGVkQXJncy5iZWdpbigpICsgMiwgZXhwYW5kZWRBcmdzLmVuZCgpLCAiQ09ERSIpOworICAgICAgaWYgKGNvZGVfaXRlciA9PSBleHBhbmRlZEFyZ3MuZW5kKCkpIHsKKyAgICAgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aG91dCBDT0RFIGFyZ3VtZW50Iik7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoCisgICAgICAgICAgImNhbGxlZCB3aXRoIHVuc3VwcG9ydGVkIGFyZ3VtZW50cyBiZXR3ZWVuIEVWQUwgYW5kIENPREUgYXJndW1lbnRzIik7CisgICAgICB9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgY29kZSA9CisgICAgICBjbUpvaW4oY21NYWtlUmFuZ2UoZXhwYW5kZWRBcmdzLmJlZ2luKCkgKyAyLCBleHBhbmRlZEFyZ3MuZW5kKCkpLCAiICIpOworICAgIHJlc3VsdCA9IG1ha2VmaWxlLlJlYWRMaXN0RmlsZUFzU3RyaW5nKAorICAgICAgY29kZSwgY21TdHJDYXQoY29udGV4dC5GaWxlUGF0aCwgIjoiLCBjb250ZXh0LkxpbmUsICI6RVZBTCIpKTsKKyAgfSBlbHNlIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIHVua25vd24gbWV0YS1vcGVyYXRpb24iKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DTWFrZUxhbmd1YWdlQ29tbWFuZC5oIGIvU291cmNlL2NtQ01ha2VMYW5ndWFnZUNvbW1hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWI4ZjYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtQ01ha2VMYW5ndWFnZUNvbW1hbmQuaApAQCAtMCwwICsxLDIwIEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtQ01ha2VMYW5ndWFnZUNvbW1hbmRfaAorI2RlZmluZSBjbUNNYWtlTGFuZ3VhZ2VDb21tYW5kX2gKKworI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK2NsYXNzIGNtRXhlY3V0aW9uU3RhdHVzOworc3RydWN0IGNtTGlzdEZpbGVBcmd1bWVudDsKKworLyoqCisgKiBcYnJpZWYgQ2FsbHMgYSBzY3JpcHRlZCBvciBidWlsdC1pbiBjb21tYW5kCisgKgorICovCitib29sIGNtQ01ha2VMYW5ndWFnZUNvbW1hbmQoc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUFyZ3VtZW50PiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DUGx1Z2luQVBJLmN4eCBiL1NvdXJjZS9jbUNQbHVnaW5BUEkuY3h4CmluZGV4IDE3N2JjYTguLjY5N2Q0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNQbHVnaW5BUEkuY3h4CisrKyBiL1NvdXJjZS9jbUNQbHVnaW5BUEkuY3h4CkBAIC0yMjEsMTAgKzIyMSwxMCBAQAogCiAgIC8vIFBhc3MgdGhlIGNhbGwgdG8gdGhlIG1ha2VmaWxlIGluc3RhbmNlLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fYnlwcm9kdWN0czsKLSAgbWYtPkFkZFV0aWxpdHlDb21tYW5kKHV0aWxpdHlOYW1lLCBjbUNvbW1hbmRPcmlnaW46OlByb2plY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAoYWxsID8gZmFsc2UgOiB0cnVlKSwgbnVsbHB0ciwgbm9fYnlwcm9kdWN0cywgZGVwZW5kczIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZXMpOworICBtZi0+QWRkVXRpbGl0eUNvbW1hbmQodXRpbGl0eU5hbWUsIChhbGwgPyBmYWxzZSA6IHRydWUpLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9fYnlwcm9kdWN0cywgZGVwZW5kczIsIGNvbW1hbmRMaW5lcyk7CiB9CisKIHZvaWQgQ0NPTlYgY21BZGRDdXN0b21Db21tYW5kKHZvaWQqIGFyZywgY29uc3QgY2hhciogc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tbWFuZCwgaW50IG51bUFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogYXJncywgaW50IG51bURlcGVuZHMsCkBAIC00ODgsMjQgKzQ4OCw4IEBACiAKIC8vIEtlZXAgYSBtYXAgZnJvbSByZWFsIGNtU291cmNlRmlsZSBpbnN0YW5jZXMgc3RvcmVkIGluIGEgbWFrZWZpbGUgdG8KIC8vIHRoZSBDUGx1Z2luQVBJIHByb3h5IHNvdXJjZSBmaWxlLgotY2xhc3MgY21DUGx1Z2luQVBJU291cmNlRmlsZU1hcAotICA6IHB1YmxpYyBzdGQ6Om1hcDxjbVNvdXJjZUZpbGUqLCBjbUNQbHVnaW5BUElTb3VyY2VGaWxlKj4KLXsKLXB1YmxpYzoKLSAgdXNpbmcgZGVyaXZlZCA9IHN0ZDo6bWFwPGNtU291cmNlRmlsZSosIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGUqPjsKLSAgdXNpbmcgaXRlcmF0b3IgPSBkZXJpdmVkOjppdGVyYXRvcjsKLSAgdXNpbmcgdmFsdWVfdHlwZSA9IGRlcml2ZWQ6OnZhbHVlX3R5cGU7Ci0gIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXAoKSA9IGRlZmF1bHQ7Ci0gIH5jbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwKCkKLSAgewotICAgIGZvciAoYXV0byBjb25zdCYgaSA6ICp0aGlzKSB7Ci0gICAgICBkZWxldGUgaS5zZWNvbmQ7Ci0gICAgfQotICB9Ci0gIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVNYXAoY29uc3QgY21DUGx1Z2luQVBJU291cmNlRmlsZU1hcCYpID0gZGVsZXRlOwotICBjbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwJiBvcGVyYXRvcj0oY29uc3QgY21DUGx1Z2luQVBJU291cmNlRmlsZU1hcCYpID0KLSAgICBkZWxldGU7Ci19OwordXNpbmcgY21DUGx1Z2luQVBJU291cmNlRmlsZU1hcCA9CisgIHN0ZDo6bWFwPGNtU291cmNlRmlsZSosIHN0ZDo6dW5pcXVlX3B0cjxjbUNQbHVnaW5BUElTb3VyY2VGaWxlPj47CiBjbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVzOwogCiB2b2lkKiBDQ09OViBjbUNyZWF0ZVNvdXJjZUZpbGUodm9pZCkKQEAgLTUzNiw3ICs1MjAsNyBAQAogICAgIGF1dG8gaSA9IGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVzLmZpbmQocnNmKTsKICAgICBpZiAoaSA9PSBjbUNQbHVnaW5BUElTb3VyY2VGaWxlcy5lbmQoKSkgewogICAgICAgLy8gQ3JlYXRlIGEgcHJveHkgc291cmNlIGZpbGUgb2JqZWN0IGZvciB0aGlzIHNvdXJjZS4KLSAgICAgIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGUqIHNmID0gbmV3IGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGU7CisgICAgICBhdXRvIHNmID0gY206Om1ha2VfdW5pcXVlPGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGU+KCk7CiAgICAgICBzZi0+UmVhbFNvdXJjZUZpbGUgPSByc2Y7CiAgICAgICBzZi0+RnVsbFBhdGggPSByc2YtPlJlc29sdmVGdWxsUGF0aCgpOwogICAgICAgc2YtPlNvdXJjZU5hbWUgPQpAQCAtNTQ1LDEwICs1MjksOSBAQAogICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZUxhc3RFeHRlbnNpb24oc2YtPkZ1bGxQYXRoKTsKIAogICAgICAgLy8gU3RvcmUgdGhlIHByb3h5IGluIHRoZSBtYXAgc28gaXQgY2FuIGJlIHJlLXVzZWQgYW5kIGRlbGV0ZWQgbGF0ZXIuCi0gICAgICBjbUNQbHVnaW5BUElTb3VyY2VGaWxlTWFwOjp2YWx1ZV90eXBlIGVudHJ5KHJzZiwgc2YpOwotICAgICAgaSA9IGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGVzLmluc2VydChlbnRyeSkuZmlyc3Q7CisgICAgICBpID0gY21DUGx1Z2luQVBJU291cmNlRmlsZXMuZW1wbGFjZShyc2YsIHN0ZDo6bW92ZShzZikpLmZpcnN0OwogICAgIH0KLSAgICByZXR1cm4gaS0+c2Vjb25kOworICAgIHJldHVybiBpLT5zZWNvbmQuZ2V0KCk7CiAgIH0KICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC01NjksMTUgKzU1MiwxNiBAQAogICB9CiAKICAgLy8gQ3JlYXRlIHRoZSBwcm94eSBmb3IgdGhlIHJlYWwgc291cmNlIGZpbGUuCi0gIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGUqIHNmID0gbmV3IGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGU7CisgIGF1dG8gc2YgPSBjbTo6bWFrZV91bmlxdWU8Y21DUGx1Z2luQVBJU291cmNlRmlsZT4oKTsKICAgc2YtPlJlYWxTb3VyY2VGaWxlID0gcnNmOwogICBzZi0+RnVsbFBhdGggPSBvc2YtPkZ1bGxQYXRoOwogICBzZi0+U291cmNlTmFtZSA9IG9zZi0+U291cmNlTmFtZTsKICAgc2YtPlNvdXJjZUV4dGVuc2lvbiA9IG9zZi0+U291cmNlRXh0ZW5zaW9uOwogCiAgIC8vIFN0b3JlIHRoZSBwcm94eSBpbiB0aGUgbWFwIHNvIGl0IGNhbiBiZSByZS11c2VkIGFuZCBkZWxldGVkIGxhdGVyLgotICBjbUNQbHVnaW5BUElTb3VyY2VGaWxlc1tyc2ZdID0gc2Y7Ci0gIHJldHVybiBzZjsKKyAgYXV0byB2YWx1ZSA9IHNmLmdldCgpOworICBjbUNQbHVnaW5BUElTb3VyY2VGaWxlc1tyc2ZdID0gc3RkOjptb3ZlKHNmKTsKKyAgcmV0dXJuIHZhbHVlOwogfQogCiBjb25zdCBjaGFyKiBDQ09OViBjbVNvdXJjZUZpbGVHZXRTb3VyY2VOYW1lKHZvaWQqIGFyZykKQEAgLTU5NiwxMiArNTgwLDE0IEBACiB7CiAgIGNtQ1BsdWdpbkFQSVNvdXJjZUZpbGUqIHNmID0gc3RhdGljX2Nhc3Q8Y21DUGx1Z2luQVBJU291cmNlRmlsZSo+KGFyZyk7CiAgIGlmIChjbVNvdXJjZUZpbGUqIHJzZiA9IHNmLT5SZWFsU291cmNlRmlsZSkgewotICAgIHJldHVybiByc2YtPkdldFByb3BlcnR5KHByb3ApOworICAgIGNtUHJvcCBwID0gcnNmLT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgICByZXR1cm4gcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyOwogICB9CiAgIGlmICghc3RyY21wKHByb3AsICJMT0NBVElPTiIpKSB7CiAgICAgcmV0dXJuIHNmLT5GdWxsUGF0aC5jX3N0cigpOwogICB9Ci0gIHJldHVybiBzZi0+UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOworICBjbVByb3AgcmV0VmFsID0gc2YtPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZShwcm9wKTsKKyAgcmV0dXJuIHJldFZhbCA/IHJldFZhbC0+Y19zdHIoKSA6IG51bGxwdHI7CiB9CiAKIGludCBDQ09OViBjbVNvdXJjZUZpbGVHZXRQcm9wZXJ0eUFzQm9vbCh2b2lkKiBhcmcsIGNvbnN0IGNoYXIqIHByb3ApCkBAIC03OTEsOCArNzc3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxvbmdEb2NzLCBpbnQgY2hhaW5lZCkKIHsKICAgY21NYWtlZmlsZSogbWYgPSBzdGF0aWNfY2FzdDxjbU1ha2VmaWxlKj4oYXJnKTsKLSAgbWYtPkdldFN0YXRlKCktPkRlZmluZVByb3BlcnR5KG5hbWUsIGNtUHJvcGVydHk6OlNPVVJDRV9GSUxFLCBicmllZkRvY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nRG9jcywgY2hhaW5lZCAhPSAwKTsKKyAgbWYtPkdldFN0YXRlKCktPkRlZmluZVByb3BlcnR5KG5hbWUsIGNtUHJvcGVydHk6OlNPVVJDRV9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZWZEb2NzID8gYnJpZWZEb2NzIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nRG9jcyA/IGxvbmdEb2NzIDogIiIsIGNoYWluZWQgIT0gMCk7CiB9CiAKIH0gLy8gY2xvc2UgdGhlIGV4dGVybiAiQyIgc2NvcGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNQbHVnaW5BUEkuaCBiL1NvdXJjZS9jbUNQbHVnaW5BUEkuaAppbmRleCA2YTk1MTQ4Li4xOTYyNmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21DUGx1Z2luQVBJLmgKKysrIGIvU291cmNlL2NtQ1BsdWdpbkFQSS5oCkBAIC0zNiw3ICszNiw3IEBACiAgIG9mIGZ1bmN0aW9ucyBhcmUgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIHBsdWdpbiBBUEkKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAgIC8qIHNldC9HZXQgdGhlIENsaWVudERhdGEgaW4gdGhlIGNtTG9hZGVkQ29tbWFuZEluZm8gc3RydWN0dXJlLCB0aGlzIGlzIGhvdwotICAgICBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgZnJvbSB0aGUgSW5pdGlhbFBhc3MgdG8gRkluYWxQYXNzIGZvciBjb21tYW5kcworICAgICBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgZnJvbSB0aGUgSW5pdGlhbFBhc3MgdG8gRmluYWxQYXNzIGZvciBjb21tYW5kcwogICAgICB0aGF0IG5lZWQgYSBGaW5hbFBhc3MgYW5kIG5lZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgSW5pdGlhbFBhc3MgKi8KICAgdm9pZCooQ0NPTlYqIEdldENsaWVudERhdGEpKHZvaWQqIGluZm8pOwogICAvKiByZXR1cm4gdGhlIHN1bW1lZCBzaXplIGluIGNoYXJhY3RlcnMgb2YgYWxsIHRoZSBhcmd1bWVudHMgKi8KQEAgLTQ0LDcgKzQ0LDcgQEAKICAgLyogZnJlZSBhbGwgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYW4gYXJnYywgYXJndiBwYWlyICovCiAgIHZvaWQoQ0NPTlYqIEZyZWVBcmd1bWVudHMpKGludCBhcmdjLCBjaGFyKiogYXJndik7CiAgIC8qIHNldC9HZXQgdGhlIENsaWVudERhdGEgaW4gdGhlIGNtTG9hZGVkQ29tbWFuZEluZm8gc3RydWN0dXJlLCB0aGlzIGlzIGhvdwotICAgICBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgZnJvbSB0aGUgSW5pdGlhbFBhc3MgdG8gRkluYWxQYXNzIGZvciBjb21tYW5kcworICAgICBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgZnJvbSB0aGUgSW5pdGlhbFBhc3MgdG8gRmluYWxQYXNzIGZvciBjb21tYW5kcwogICAgICB0aGF0IG5lZWQgYSBGaW5hbFBhc3MgYW5kIG5lZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgSW5pdGlhbFBhc3MgKi8KICAgdm9pZChDQ09OViogU2V0Q2xpZW50RGF0YSkodm9pZCogaW5mbywgdm9pZCogY2QpOwogICAvKiB3aGVuIGFuIGVycm9yIG9jY3VycywgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgZXJyb3Igc3RyaW5nICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DVGVzdC5jeHggYi9Tb3VyY2UvY21DVGVzdC5jeHgKaW5kZXggNmVhZTI2ZS4uYTVmZGU4OSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ1Rlc3QuY3h4CisrKyBiL1NvdXJjZS9jbUNUZXN0LmN4eApAQCAtMTYsMjQgKzE2LDI3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgorCisjaW5jbHVkZSA8Y20zcC9jdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KKwogI2luY2x1ZGUgImNtc3lzL0Jhc2U2NC5oIgogI2luY2x1ZGUgImNtc3lzL0RpcmVjdG9yeS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvR2xvYi5oeHgiCiAjaW5jbHVkZSAiY21zeXMvUHJvY2Vzcy5oIgorI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKICNpbmNsdWRlICJjbXN5cy9TeXN0ZW1JbmZvcm1hdGlvbi5oeHgiCi0KLSNpbmNsdWRlICJjbV9jdXJsLmgiCi0jaW5jbHVkZSAiY21femxpYi5oIgogI2lmIGRlZmluZWQoX1dJTjMyKQogIyAgaW5jbHVkZSA8d2luZG93cy5oPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2Vsc2UKICMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2VuZGlmCiAKLSNpbmNsdWRlIDxjbS9tZW1vcnk+Ci0KLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNUZXN0QnVpbGRBbmRUZXN0SGFuZGxlci5oIgogI2luY2x1ZGUgImNtQ1Rlc3RCdWlsZEhhbmRsZXIuaCIKICNpbmNsdWRlICJjbUNUZXN0Q29uZmlndXJlSGFuZGxlci5oIgpAQCAtNTEsNiArNTQsNyBAQAogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc091dHB1dC5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC04MywxMSArODcsMTIgQEAKICAgICBzdGQ6OnN0cmluZyBOYW1lOwogICB9OwogCi0gIGludCBSZXBlYXRUZXN0cyA9IDE7IC8vIGRlZmF1bHQgdG8gcnVuIGVhY2ggdGVzdCBvbmNlCi0gIGJvb2wgUmVwZWF0VW50aWxGYWlsID0gZmFsc2U7CisgIGludCBSZXBlYXRDb3VudCA9IDE7IC8vIGRlZmF1bHQgdG8gcnVuIGVhY2ggdGVzdCBvbmNlCisgIGNtQ1Rlc3Q6OlJlcGVhdCBSZXBlYXRNb2RlID0gY21DVGVzdDo6UmVwZWF0OjpOZXZlcjsKICAgc3RkOjpzdHJpbmcgQ29uZmlnVHlwZTsKICAgc3RkOjpzdHJpbmcgU2NoZWR1bGVUeXBlOwogICBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IFN0b3BUaW1lOworICBib29sIFN0b3BPbkZhaWx1cmUgPSBmYWxzZTsKICAgYm9vbCBUZXN0UHJvZ3Jlc3NPdXRwdXQgPSBmYWxzZTsKICAgYm9vbCBWZXJib3NlID0gZmFsc2U7CiAgIGJvb2wgRXh0cmFWZXJib3NlID0gZmFsc2U7CkBAIC0yMDAsMTMgKzIwNSwxNSBAQAogCiAgIGludCBTdWJtaXRJbmRleCA9IDA7CiAKLSAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBPdXRwdXRMb2dGaWxlID0gbnVsbHB0cjsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4gT3V0cHV0TG9nRmlsZTsKICAgaW50IE91dHB1dExvZ0ZpbGVMYXN0VGFnID0gLTE7CiAKICAgYm9vbCBPdXRwdXRUZXN0T3V0cHV0T25UZXN0RmFpbHVyZSA9IGZhbHNlOwogICBib29sIE91dHB1dENvbG9yQ29kZSA9IGNtQ1Rlc3Q6OkNvbG9yZWRPdXRwdXRTdXBwb3J0ZWRCeUNvbnNvbGUoKTsKIAogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IERlZmluaXRpb25zOworCisgIGNtQ1Rlc3Q6Ok5vVGVzdHMgTm9UZXN0c01vZGUgPSBjbUNUZXN0OjpOb1Rlc3RzOjpMZWdhY3k7CiB9OwogCiBzdHJ1Y3QgdG0qIGNtQ1Rlc3Q6OkdldE5pZ2h0bHlUaW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIsIGJvb2wgdG9tb3Jyb3d0YWcpCkBAIC0yNjgsOSArMjc1LDEwIEBACiAgIHJldHVybiB0aGlzLT5JbXBsLT5Ub21vcnJvd1RhZzsKIH0KIAotc3RkOjpzdHJpbmcgY21DVGVzdDo6Q2xlYW5TdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikKK3N0ZDo6c3RyaW5nIGNtQ1Rlc3Q6OkNsZWFuU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNwb3MpCiB7Ci0gIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgc3BvcyA9IHN0ci5maW5kX2ZpcnN0X25vdF9vZigiIFxuXHRcclxmXHYiKTsKKyAgc3BvcyA9IHN0ci5maW5kX2ZpcnN0X25vdF9vZigiIFxuXHRcclxmXHYiLCBzcG9zKTsKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlcG9zID0gc3RyLmZpbmRfbGFzdF9ub3Rfb2YoIiBcblx0XHJcZlx2Iik7CiAgIGlmIChzcG9zID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CkBAIC0zNTksMTAgKzM2Nyw3IEBACiAgIGNtU3lzdGVtVG9vbHM6OkVuYWJsZVZTQ29uc29sZU91dHB1dCgpOwogfQogCi1jbUNUZXN0Ojp+Y21DVGVzdCgpCi17Ci0gIGRlbGV0ZSB0aGlzLT5JbXBsLT5PdXRwdXRMb2dGaWxlOwotfQorY21DVGVzdDo6fmNtQ1Rlc3QoKSA9IGRlZmF1bHQ7CiAKIGludCBjbUNUZXN0OjpHZXRQYXJhbGxlbExldmVsKCkgY29uc3QKIHsKQEAgLTM4OSw3ICszOTQsNyBAQAogICByZXR1cm4gdGhpcy0+SW1wbC0+Q29tcHJlc3NUZXN0T3V0cHV0OwogfQogCi1jbUNUZXN0OjpQYXJ0IGNtQ1Rlc3Q6OkdldFBhcnRGcm9tTmFtZShjb25zdCBjaGFyKiBuYW1lKQorY21DVGVzdDo6UGFydCBjbUNUZXN0OjpHZXRQYXJ0RnJvbU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCiB7CiAgIC8vIExvb2sgdXAgYnkgbG93ZXItY2FzZSB0byBtYWtlIG5hbWVzIGNhc2UtaW5zZW5zaXRpdmUuCiAgIHN0ZDo6c3RyaW5nIGxvd2VyX25hbWUgPSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UobmFtZSk7CkBAIC00NTMsOCArNDU4LDcgQEAKICAgY20uR2V0Q3VycmVudFNuYXBzaG90KCkuU2V0RGVmYXVsdERlZmluaXRpb25zKCk7CiAgIGNtR2xvYmFsR2VuZXJhdG9yIGdnKCZjbSk7CiAgIGNtTWFrZWZpbGUgbWYoJmdnLCBjbS5HZXRDdXJyZW50U25hcHNob3QoKSk7Ci0gIGlmICghdGhpcy0+UmVhZEN1c3RvbUNvbmZpZ3VyYXRpb25GaWxlVHJlZSh0aGlzLT5JbXBsLT5CaW5hcnlEaXIuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZikpIHsKKyAgaWYgKCF0aGlzLT5SZWFkQ3VzdG9tQ29uZmlndXJhdGlvbkZpbGVUcmVlKHRoaXMtPkltcGwtPkJpbmFyeURpciwgJm1mKSkgewogICAgIGNtQ1Rlc3RPcHRpb25hbExvZygKICAgICAgIHRoaXMsIERFQlVHLCAiQ2Fubm90IGZpbmQgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZmlsZSB0cmVlIiA8PCBzdGQ6OmVuZGwsCiAgICAgICBxdWlldCk7CkBAIC01MTgsNyArNTIyLDcgQEAKICAgICAgICAgc3RkOjpzdHJpbmcgbW9kZWw7CiAgICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRMaW5lRnJvbVN0cmVhbSh0ZmluLCBtb2RlbCkgJiYKICAgICAgICAgICAgICF0aGlzLT5JbXBsLT5QYXJ0c1tQYXJ0U3RhcnRdICYmICFjb21tYW5kKSB7Ci0gICAgICAgICAgdGhpcy0+SW1wbC0+VGVzdE1vZGVsID0gR2V0VGVzdE1vZGVsRnJvbVN0cmluZyhtb2RlbC5jX3N0cigpKTsKKyAgICAgICAgICB0aGlzLT5JbXBsLT5UZXN0TW9kZWwgPSBHZXRUZXN0TW9kZWxGcm9tU3RyaW5nKG1vZGVsKTsKICAgICAgICAgfQogICAgICAgICB0ZmluLmNsb3NlKCk7CiAgICAgICB9CkBAIC01NzQsNyArNTc4LDcgQEAKICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0TGluZUZyb21TdHJlYW0odGZpbiwgdGFnKTsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0TGluZUZyb21TdHJlYW0odGZpbiwgZ3JvdXApOwogICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0TGluZUZyb21TdHJlYW0odGZpbiwgbW9kZWxTdHIpKSB7Ci0gICAgICAgICAgbW9kZWwgPSBHZXRUZXN0TW9kZWxGcm9tU3RyaW5nKG1vZGVsU3RyLmNfc3RyKCkpOworICAgICAgICAgIG1vZGVsID0gR2V0VGVzdE1vZGVsRnJvbVN0cmluZyhtb2RlbFN0cik7CiAgICAgICAgIH0KICAgICAgICAgdGZpbi5jbG9zZSgpOwogICAgICAgfQpAQCAtNzI0LDcgKzcyOCw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogICAgICAgd2hpbGUgKGZpbiAmJiAobGluZS5iYWNrKCkgPT0gJ1xcJykpIHsKLSAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyKDAsIGxpbmUuc2l6ZSgpIC0gMSk7CisgICAgICAgIGxpbmUucmVzaXplKGxpbmUuc2l6ZSgpIC0gMSk7CiAgICAgICAgIGJ1ZmZlclswXSA9IDA7CiAgICAgICAgIGZpbi5nZXRsaW5lKGJ1ZmZlciwgMTAyMyk7CiAgICAgICAgIGJ1ZmZlclsxMDIzXSA9IDA7CkBAIC03MzgsNyArNzQyLDcgQEAKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBsaW5lLnN1YnN0cigwLCBjcG9zKTsKLSAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gY21DVGVzdDo6Q2xlYW5TdHJpbmcobGluZS5zdWJzdHIoY3BvcyArIDEpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gY21DVGVzdDo6Q2xlYW5TdHJpbmcobGluZSwgY3BvcyArIDEpOwogICAgICAgdGhpcy0+SW1wbC0+Q1Rlc3RDb25maWd1cmF0aW9uW2tleV0gPSB2YWx1ZTsKICAgICB9CiAgICAgZmluLmNsb3NlKCk7CkBAIC03ODgsNyArNzkyLDcgQEAKICAgcmV0dXJuIHRoaXMtPkltcGwtPlRlc3RNb2RlbDsKIH0KIAotYm9vbCBjbUNUZXN0OjpTZXRUZXN0KGNvbnN0IGNoYXIqIHR0eXBlLCBib29sIHJlcG9ydCkKK2Jvb2wgY21DVGVzdDo6U2V0VGVzdChjb25zdCBzdGQ6OnN0cmluZyYgdHR5cGUsIGJvb2wgcmVwb3J0KQogewogICBpZiAoY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHR0eXBlKSA9PSAiYWxsIikgewogICAgIGZvciAoUGFydCBwID0gUGFydFN0YXJ0OyBwICE9IFBhcnRDb3VudDsgcCA9IFBhcnQocCArIDEpKSB7CkBAIC04MzYsNiArODQwLDcgQEAKICAgICB9CiAgIH0KICAgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSB0ZXN0aW5nRGlyICsgIi8iICsgbmFtZTsKKyAgc3RyZWFtLlNldFRlbXBFeHQoInRtcCIpOwogICBzdHJlYW0uT3BlbihmaWxlbmFtZSk7CiAgIGlmICghc3RyZWFtKSB7CiAgICAgY21DVGVzdExvZyh0aGlzLCBFUlJPUl9NRVNTQUdFLApAQCAtODUwLDcgKzg1NSw3IEBACiAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGNtQ1Rlc3Q6OkFkZElmRXhpc3RzKFBhcnQgcGFydCwgY29uc3QgY2hhciogZmlsZSkKK2Jvb2wgY21DVGVzdDo6QWRkSWZFeGlzdHMoUGFydCBwYXJ0LCBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZSkKIHsKICAgaWYgKHRoaXMtPkNUZXN0RmlsZUV4aXN0cyhmaWxlKSkgewogICAgIHRoaXMtPkFkZFN1Ym1pdEZpbGUocGFydCwgZmlsZSk7CkBAIC0xMDAyLDcgKzEwMDcsNyBAQAogICBpZiAodGhpcy0+SW1wbC0+UGFydHNbUGFydE5vdGVzXSkgewogICAgIHRoaXMtPlVwZGF0ZUNUZXN0Q29uZmlndXJhdGlvbigpOwogICAgIGlmICghdGhpcy0+SW1wbC0+Tm90ZXNGaWxlcy5lbXB0eSgpKSB7Ci0gICAgICB0aGlzLT5HZW5lcmF0ZU5vdGVzRmlsZSh0aGlzLT5JbXBsLT5Ob3Rlc0ZpbGVzLmNfc3RyKCkpOworICAgICAgdGhpcy0+R2VuZXJhdGVOb3Rlc0ZpbGUodGhpcy0+SW1wbC0+Tm90ZXNGaWxlcyk7CiAgICAgfQogICB9CiAgIGlmICh0aGlzLT5JbXBsLT5QYXJ0c1tQYXJ0U3VibWl0XSkgewpAQCAtMTAzMSw5ICsxMDM2LDkgQEAKICAgcmV0dXJuICJFeHBlcmltZW50YWwiOwogfQogCi1pbnQgY21DVGVzdDo6R2V0VGVzdE1vZGVsRnJvbVN0cmluZyhjb25zdCBjaGFyKiBzdHIpCitpbnQgY21DVGVzdDo6R2V0VGVzdE1vZGVsRnJvbVN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQogewotICBpZiAoIXN0cikgeworICBpZiAoc3RyLmVtcHR5KCkpIHsKICAgICByZXR1cm4gY21DVGVzdDo6RVhQRVJJTUVOVEFMOwogICB9CiAgIHN0ZDo6c3RyaW5nIHJzdHIgPSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc3RyKTsKQEAgLTEyNzksNyArMTI4NCw3IEBACiAgIHdoaWxlIChjbXN5c1Byb2Nlc3NfV2FpdEZvckRhdGEoY3AsICZkYXRhLCAmbGVuZ3RoLCBudWxscHRyKSkgewogICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChkYXRhLCBsZW5ndGgsIHN0cmRhdGEpOwogICAgIGlmIChvdXRwdXQpIHsKLSAgICAgIGNtQXBwZW5kKHRlbXBPdXRwdXQsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICAgICAgY206OmFwcGVuZCh0ZW1wT3V0cHV0LCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKICAgICB9CiAgICAgY21DVGVzdExvZyh0aGlzLCBIQU5ETEVSX1ZFUkJPU0VfT1VUUFVULAogICAgICAgICAgICAgICAgY21DVGVzdExvZ1dyaXRlKHN0cmRhdGEuY19zdHIoKSwgc3RyZGF0YS5zaXplKCkpKTsKQEAgLTE0MzksMTYgKzE0NDQsMTUgQEAKICAgICByZXR1cm47CiAgIH0KICAgLy8gVGhpcyBjb2RlIHNob3VsZCBnbyB3aGVuIGNkYXNoIGlzIGNoYW5nZWQgdG8gdXNlIGxhYmVscyBvbmx5Ci0gIGNvbnN0IGNoYXIqIHN1YnByb2plY3QgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlN1YlByb2plY3QiKTsKKyAgY21Qcm9wIHN1YnByb2plY3QgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlN1YlByb2plY3QiKTsKICAgaWYgKHN1YnByb2plY3QpIHsKICAgICB4bWwuU3RhcnRFbGVtZW50KCJTdWJwcm9qZWN0Iik7Ci0gICAgeG1sLkF0dHJpYnV0ZSgibmFtZSIsIHN1YnByb2plY3QpOwotICAgIGNvbnN0IGNoYXIqIGxhYmVscyA9CisgICAgeG1sLkF0dHJpYnV0ZSgibmFtZSIsICpzdWJwcm9qZWN0KTsKKyAgICBjbVByb3AgbGFiZWxzID0KICAgICAgIGNoLT5HZXRDTWFrZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiU3ViUHJvamVjdExhYmVscyIpOwogICAgIGlmIChsYWJlbHMpIHsKICAgICAgIHhtbC5TdGFydEVsZW1lbnQoIkxhYmVscyIpOwotICAgICAgc3RkOjpzdHJpbmcgbCA9IGxhYmVsczsKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzID0gY21FeHBhbmRlZExpc3QobCk7CisgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJncyA9IGNtRXhwYW5kZWRMaXN0KCpsYWJlbHMpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGFyZ3MpIHsKICAgICAgICAgeG1sLkVsZW1lbnQoIkxhYmVsIiwgaSk7CiAgICAgICB9CkBAIC0xNDU4LDEwICsxNDYyLDEwIEBACiAgIH0KIAogICAvLyBUaGlzIGNvZGUgc2hvdWxkIHN0YXkgd2hlbiBjZGFzaCBvbmx5IGRvZXMgbGFiZWwgYmFzZWQgc3ViLXByb2plY3RzCi0gIGNvbnN0IGNoYXIqIGxhYmVsID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJMYWJlbCIpOworICBjbVByb3AgbGFiZWwgPSBjbS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIkxhYmVsIik7CiAgIGlmIChsYWJlbCkgewogICAgIHhtbC5TdGFydEVsZW1lbnQoIkxhYmVscyIpOwotICAgIHhtbC5FbGVtZW50KCJMYWJlbCIsIGxhYmVsKTsKKyAgICB4bWwuRWxlbWVudCgiTGFiZWwiLCAqbGFiZWwpOwogICAgIHhtbC5FbmRFbGVtZW50KCk7CiAgIH0KIH0KQEAgLTE1NjAsOSArMTU2NCw5IEBACiAgIHJldHVybiAwOwogfQogCi1pbnQgY21DVGVzdDo6R2VuZXJhdGVOb3Rlc0ZpbGUoY29uc3QgY2hhciogY2ZpbGVzKQoraW50IGNtQ1Rlc3Q6OkdlbmVyYXRlTm90ZXNGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjZmlsZXMpCiB7Ci0gIGlmICghY2ZpbGVzKSB7CisgIGlmIChjZmlsZXMuZW1wdHkoKSkgewogICAgIHJldHVybiAxOwogICB9CiAKQEAgLTE2NDUsMTQgKzE2NDksMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOyk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHRoaXMtPkFkZFN1Ym1pdEZpbGUoUGFydEV4dHJhRmlsZXMsIGZpbGUuY19zdHIoKSk7CisgICAgdGhpcy0+QWRkU3VibWl0RmlsZShQYXJ0RXh0cmFGaWxlcywgZmlsZSk7CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgY21DVGVzdDo6U3VibWl0RXh0cmFGaWxlcyhjb25zdCBjaGFyKiBjZmlsZXMpCitib29sIGNtQ1Rlc3Q6OlN1Ym1pdEV4dHJhRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGNmaWxlcykKIHsKLSAgaWYgKCFjZmlsZXMpIHsKKyAgaWYgKGNmaWxlcy5lbXB0eSgpKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApAQCAtMTgxMywxMCArMTgxNywxMCBAQAogICAgICAgPDwgIiAgY3Rlc3QgLUQgTmlnaHRseU1lbW9yeUNoZWNrIiA8PCBzdGQ6OmVuZGwpOwogfQogCi1ib29sIGNtQ1Rlc3Q6OkNoZWNrQXJndW1lbnQoY29uc3Qgc3RkOjpzdHJpbmcmIGFyZywgY29uc3QgY2hhciogdmFyZzEsCitib29sIGNtQ1Rlc3Q6OkNoZWNrQXJndW1lbnQoY29uc3Qgc3RkOjpzdHJpbmcmIGFyZywgY206OnN0cmluZ192aWV3IHZhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhcmcyKQogewotICByZXR1cm4gKHZhcmcxICYmIGFyZyA9PSB2YXJnMSkgfHwgKHZhcmcyICYmIGFyZyA9PSB2YXJnMik7CisgIHJldHVybiAoYXJnID09IHZhcmcxKSB8fCAodmFyZzIgJiYgYXJnID09IHZhcmcyKTsKIH0KIAogLy8gUHJvY2Vzc2VzIG9uZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgKGFuZCBpdHMgYXJndW1lbnRzIGlmIGFueSkKQEAgLTE4MjYsMzggKzE4MzAsNzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGVycm9ybXNnKQogewogICBzdGQ6OnN0cmluZyBhcmcgPSBhcmdzW2ldOwotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRiIpKSB7CisgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1GIl9zKSkgewogICAgIHRoaXMtPkltcGwtPkZhaWxvdmVyID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItaiIsICItLXBhcmFsbGVsIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLWoiX3MsICItLXBhcmFsbGVsIikgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIGludCBwbGV2ZWwgPSBhdG9pKGFyZ3NbaV0uY19zdHIoKSk7CiAgICAgdGhpcy0+U2V0UGFyYWxsZWxMZXZlbChwbGV2ZWwpOwogICAgIHRoaXMtPkltcGwtPlBhcmFsbGVsTGV2ZWxTZXRJbkNsaSA9IHRydWU7Ci0gIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1qIikgPT0gMCkgeworICB9IGVsc2UgaWYgKGNtSGFzUHJlZml4KGFyZywgIi1qIikpIHsKICAgICBpbnQgcGxldmVsID0gYXRvaShhcmcuc3Vic3RyKDIpLmNfc3RyKCkpOwogICAgIHRoaXMtPlNldFBhcmFsbGVsTGV2ZWwocGxldmVsKTsKICAgICB0aGlzLT5JbXBsLT5QYXJhbGxlbExldmVsU2V0SW5DbGkgPSB0cnVlOwogICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcmVwZWF0LXVudGlsLWZhaWwiKSkgeworCisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1yZXBlYXQtdW50aWwtZmFpbCJfcykpIHsKICAgICBpZiAoaSA+PSBhcmdzLnNpemUoKSAtIDEpIHsKICAgICAgIGVycm9ybXNnID0gIictLXJlcGVhdC11bnRpbC1mYWlsJyByZXF1aXJlcyBhbiBhcmd1bWVudCI7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIGlmICh0aGlzLT5JbXBsLT5SZXBlYXRNb2RlICE9IGNtQ1Rlc3Q6OlJlcGVhdDo6TmV2ZXIpIHsKKyAgICAgIGVycm9ybXNnID0gIkF0IG1vc3Qgb25lICctLXJlcGVhdCcgb3B0aW9uIG1heSBiZSB1c2VkLiI7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIGkrKzsKICAgICBsb25nIHJlcGVhdCA9IDE7CiAgICAgaWYgKCFjbVN0clRvTG9uZyhhcmdzW2ldLCAmcmVwZWF0KSkgewotICAgICAgZXJyb3Jtc2cgPQotICAgICAgICAiJy0tcmVwZWF0LXVudGlsLWZhaWwnIGdpdmVuIG5vbi1pbnRlZ2VyIHZhbHVlICciICsgYXJnc1tpXSArICInIjsKKyAgICAgIGVycm9ybXNnID0gY21TdHJDYXQoIictLXJlcGVhdC11bnRpbC1mYWlsJyBnaXZlbiBub24taW50ZWdlciB2YWx1ZSAnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSwgIiciKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgdGhpcy0+SW1wbC0+UmVwZWF0VGVzdHMgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlcGVhdCk7CisgICAgdGhpcy0+SW1wbC0+UmVwZWF0Q291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlcGVhdCk7CiAgICAgaWYgKHJlcGVhdCA+IDEpIHsKLSAgICAgIHRoaXMtPkltcGwtPlJlcGVhdFVudGlsRmFpbCA9IHRydWU7CisgICAgICB0aGlzLT5JbXBsLT5SZXBlYXRNb2RlID0gY21DVGVzdDo6UmVwZWF0OjpVbnRpbEZhaWw7CiAgICAgfQogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10ZXN0LWxvYWQiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1yZXBlYXQiX3MpKSB7CisgICAgaWYgKGkgPj0gYXJncy5zaXplKCkgLSAxKSB7CisgICAgICBlcnJvcm1zZyA9ICInLS1yZXBlYXQnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IjsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHRoaXMtPkltcGwtPlJlcGVhdE1vZGUgIT0gY21DVGVzdDo6UmVwZWF0OjpOZXZlcikgeworICAgICAgZXJyb3Jtc2cgPSAiQXQgbW9zdCBvbmUgJy0tcmVwZWF0JyBvcHRpb24gbWF5IGJlIHVzZWQuIjsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaSsrOworICAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiByZXBlYXRSZWdleCgKKyAgICAgICJeKHVudGlsLWZhaWx8dW50aWwtcGFzc3xhZnRlci10aW1lb3V0KTooWzAtOV0rKSQiKTsKKyAgICBpZiAocmVwZWF0UmVnZXguZmluZChhcmdzW2ldKSkgeworICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvdW50ID0gcmVwZWF0UmVnZXgubWF0Y2goMik7CisgICAgICB1bnNpZ25lZCBsb25nIG4gPSAxOworICAgICAgY21TdHJUb1VMb25nKGNvdW50LCAmbik7IC8vIHJlZ2V4IGd1YXJhbnRlZXMgc3VjY2VzcworICAgICAgdGhpcy0+SW1wbC0+UmVwZWF0Q291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KG4pOworICAgICAgaWYgKHRoaXMtPkltcGwtPlJlcGVhdENvdW50ID4gMSkgeworICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbW9kZSA9IHJlcGVhdFJlZ2V4Lm1hdGNoKDEpOworICAgICAgICBpZiAobW9kZSA9PSAidW50aWwtZmFpbCIpIHsKKyAgICAgICAgICB0aGlzLT5JbXBsLT5SZXBlYXRNb2RlID0gY21DVGVzdDo6UmVwZWF0OjpVbnRpbEZhaWw7CisgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAidW50aWwtcGFzcyIpIHsKKyAgICAgICAgICB0aGlzLT5JbXBsLT5SZXBlYXRNb2RlID0gY21DVGVzdDo6UmVwZWF0OjpVbnRpbFBhc3M7CisgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAiYWZ0ZXItdGltZW91dCIpIHsKKyAgICAgICAgICB0aGlzLT5JbXBsLT5SZXBlYXRNb2RlID0gY21DVGVzdDo6UmVwZWF0OjpBZnRlclRpbWVvdXQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgZXJyb3Jtc2cgPSBjbVN0ckNhdCgiJy0tcmVwZWF0JyBnaXZlbiBpbnZhbGlkIHZhbHVlICciLCBhcmdzW2ldLCAiJyIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10ZXN0LWxvYWQiX3MpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdW5zaWduZWQgbG9uZyBsb2FkOwogICAgIGlmIChjbVN0clRvVUxvbmcoYXJnc1tpXSwgJmxvYWQpKSB7CkBAIC0xODY4LDc2ICsxOTEwLDY4IEBACiAgICAgfQogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1uby1jb21wcmVzcy1vdXRwdXQiKSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tbm8tY29tcHJlc3Mtb3V0cHV0Il9zKSkgewogICAgIHRoaXMtPkltcGwtPkNvbXByZXNzVGVzdE91dHB1dCA9IGZhbHNlOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1wcmludC1sYWJlbHMiKSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcHJpbnQtbGFiZWxzIl9zKSkgewogICAgIHRoaXMtPkltcGwtPlByaW50TGFiZWxzID0gdHJ1ZTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0taHR0cDEuMCIpKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1odHRwMS4wIl9zKSkgewogICAgIHRoaXMtPkltcGwtPlVzZUhUVFAxMCA9IHRydWU7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXRpbWVvdXQiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10aW1lb3V0Il9zKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIGF1dG8gdGltZW91dCA9IGNtRHVyYXRpb24oYXRvZihhcmdzW2ldLmNfc3RyKCkpKTsKICAgICB0aGlzLT5JbXBsLT5HbG9iYWxUaW1lb3V0ID0gdGltZW91dDsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tc3RvcC10aW1lIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tc3RvcC10aW1lIl9zKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPlNldFN0b3BUaW1lKGFyZ3NbaV0pOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUMiLCAiLS1idWlsZC1jb25maWciKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewotICAgIGkrKzsKLSAgICB0aGlzLT5TZXRDb25maWdUeXBlKGFyZ3NbaV0uY19zdHIoKSk7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1zdG9wLW9uLWZhaWx1cmUiX3MpKSB7CisgICAgdGhpcy0+SW1wbC0+U3RvcE9uRmFpbHVyZSA9IHRydWU7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWRlYnVnIikpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItQyJfcywgIi0tYnVpbGQtY29uZmlnIikgJiYKKyAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICAgIGkrKzsKKyAgICB0aGlzLT5TZXRDb25maWdUeXBlKGFyZ3NbaV0pOworICB9CisKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWRlYnVnIl9zKSkgewogICAgIHRoaXMtPkltcGwtPkRlYnVnID0gdHJ1ZTsKICAgICB0aGlzLT5JbXBsLT5TaG93TGluZU51bWJlcnMgPSB0cnVlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tZ3JvdXAiKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAoKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1ncm91cCJfcykgfHwKKyAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiB1bmRvY3VtZW50ZWQgLyBkZXByZWNhdGVkIG9wdGlvbi4KKyAgICAgICAgICAgICAgLy8gIlRyYWNrIiBoYXMgYmVlbiByZW5hbWVkIHRvICJHcm91cCIuCisgICAgICAgICAgICAgIHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10cmFjayJfcykpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5JbXBsLT5TcGVjaWZpY0dyb3VwID0gYXJnc1tpXTsKLSAgfQotICAvLyBUaGlzIGlzIGFuIHVuZG9jdW1lbnRlZCAvIGRlcHJlY2F0ZWQgb3B0aW9uLgotICAvLyAiVHJhY2siIGhhcyBiZWVuIHJlbmFtZWQgdG8gIkdyb3VwIi4KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10cmFjayIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKLSAgICBpKys7Ci0gICAgdGhpcy0+SW1wbC0+U3BlY2lmaWNHcm91cCA9IGFyZ3NbaV07Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1zaG93LWxpbmUtbnVtYmVycyIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXNob3ctbGluZS1udW1iZXJzIl9zKSkgewogICAgIHRoaXMtPkltcGwtPlNob3dMaW5lTnVtYmVycyA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1uby1sYWJlbC1zdW1tYXJ5IikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tbm8tbGFiZWwtc3VtbWFyeSJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5MYWJlbFN1bW1hcnkgPSBmYWxzZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW5vLXN1YnByb2plY3Qtc3VtbWFyeSIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW5vLXN1YnByb2plY3Qtc3VtbWFyeSJfcykpIHsKICAgICB0aGlzLT5JbXBsLT5TdWJwcm9qZWN0U3VtbWFyeSA9IGZhbHNlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1RIiwgIi0tcXVpZXQiKSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVEiX3MsICItLXF1aWV0IikpIHsKICAgICB0aGlzLT5JbXBsLT5RdWlldCA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1wcm9ncmVzcyIpKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXByb2dyZXNzIl9zKSkgewogICAgIHRoaXMtPkltcGwtPlRlc3RQcm9ncmVzc091dHB1dCA9IHRydWU7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVYiLCAiLS12ZXJib3NlIikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1WIl9zLCAiLS12ZXJib3NlIikpIHsKICAgICB0aGlzLT5JbXBsLT5WZXJib3NlID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItVlYiLCAiLS1leHRyYS12ZXJib3NlIikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1WViJfcywgIi0tZXh0cmEtdmVyYm9zZSIpKSB7CiAgICAgdGhpcy0+SW1wbC0+RXh0cmFWZXJib3NlID0gdHJ1ZTsKICAgICB0aGlzLT5JbXBsLT5WZXJib3NlID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLW91dHB1dC1vbi1mYWlsdXJlIikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tb3V0cHV0LW9uLWZhaWx1cmUiX3MpKSB7CiAgICAgdGhpcy0+SW1wbC0+T3V0cHV0VGVzdE91dHB1dE9uVGVzdEZhaWx1cmUgPSB0cnVlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdGVzdC1vdXRwdXQtc2l6ZS1wYXNzZWQiKSAmJgotICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10ZXN0LW91dHB1dC1zaXplLXBhc3NlZCJfcykgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIGxvbmcgb3V0cHV0U2l6ZTsKICAgICBpZiAoY21TdHJUb0xvbmcoYXJnc1tpXSwgJm91dHB1dFNpemUpKSB7CkBAIC0xOTQ3LDkgKzE5ODEsOCBAQAogICAgICAgICAgICAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgJy0tdGVzdC1vdXRwdXQtc2l6ZS1wYXNzZWQnOiAiIDw8IGFyZ3NbaV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iKTsKICAgICB9Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10ZXN0LW91dHB1dC1zaXplLWZhaWxlZCIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXRlc3Qtb3V0cHV0LXNpemUtZmFpbGVkIl9zKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgbG9uZyBvdXRwdXRTaXplOwogICAgIGlmIChjbVN0clRvTG9uZyhhcmdzW2ldLCAmb3V0cHV0U2l6ZSkpIHsKQEAgLTE5NTksMTEgKzE5OTIsOSBAQAogICAgICAgICAgICAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgJy0tdGVzdC1vdXRwdXQtc2l6ZS1mYWlsZWQnOiAiIDw8IGFyZ3NbaV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iKTsKICAgICB9Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLU4iLCAiLS1zaG93LW9ubHkiKSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLU4iX3MsICItLXNob3ctb25seSIpKSB7CiAgICAgdGhpcy0+SW1wbC0+U2hvd09ubHkgPSB0cnVlOwotICB9Ci0gIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1zaG93LW9ubHk9IikpIHsKKyAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1zaG93LW9ubHk9IikpIHsKICAgICB0aGlzLT5JbXBsLT5TaG93T25seSA9IHRydWU7CiAKICAgICAvLyBDaGVjayBpZiBhIHNwZWNpZmljIGZvcm1hdCBpcyByZXF1ZXN0ZWQuIERlZmF1bHRzIHRvIGh1bWFuIHJlYWRhYmxlCkBAIC0xOTgxLDI3ICsyMDEyLDI2IEBACiAgICAgfQogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLU8iLCAiLS1vdXRwdXQtbG9nIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1PIl9zLCAiLS1vdXRwdXQtbG9nIikgJiYKKyAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKLSAgICB0aGlzLT5TZXRPdXRwdXRMb2dGaWxlTmFtZShhcmdzW2ldLmNfc3RyKCkpOworICAgIHRoaXMtPlNldE91dHB1dExvZ0ZpbGVOYW1lKGFyZ3NbaV0pOwogICB9CiAKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS10b21vcnJvdy10YWciKSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tdG9tb3Jyb3ctdGFnIl9zKSkgewogICAgIHRoaXMtPkltcGwtPlRvbW9ycm93VGFnID0gdHJ1ZTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWZvcmNlLW5ldy1jdGVzdC1wcm9jZXNzIikpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tZm9yY2UtbmV3LWN0ZXN0LXByb2Nlc3MiX3MpKSB7CiAgICAgdGhpcy0+SW1wbC0+Rm9yY2VOZXdDVGVzdFByb2Nlc3MgPSB0cnVlOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1XIiwgIi0tbWF4LXdpZHRoIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVciX3MsICItLW1heC13aWR0aCIpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5JbXBsLT5NYXhUZXN0TmFtZVdpZHRoID0gYXRvaShhcmdzW2ldLmNfc3RyKCkpOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0taW50ZXJhY3RpdmUtZGVidWctbW9kZSIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWludGVyYWN0aXZlLWRlYnVnLW1vZGUiX3MpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5JbXBsLT5JbnRlcmFjdGl2ZURlYnVnTW9kZSA9IGNtSXNPbihhcmdzW2ldKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXN1Ym1pdC1pbmRleCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tc3VibWl0LWluZGV4Il9zKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+SW1wbC0+U3VibWl0SW5kZXggPSBhdG9pKGFyZ3NbaV0uY19zdHIoKSk7CiAgICAgaWYgKHRoaXMtPkltcGwtPlN1Ym1pdEluZGV4IDwgMCkgewpAQCAtMjAwOSw0NiArMjAzOSw2MCBAQAogICAgIH0KICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tb3ZlcndyaXRlIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tb3ZlcndyaXRlIl9zKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkFkZENUZXN0Q29uZmlndXJhdGlvbk92ZXJ3cml0ZShhcmdzW2ldKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItQSIsICItLWFkZC1ub3RlcyIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1BIl9zLCAiLS1hZGQtbm90ZXMiKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICB0aGlzLT5JbXBsLT5Qcm9kdWNlWE1MID0gdHJ1ZTsKICAgICB0aGlzLT5TZXRUZXN0KCJOb3RlcyIpOwogICAgIGkrKzsKLSAgICB0aGlzLT5TZXROb3Rlc0ZpbGVzKGFyZ3NbaV0uY19zdHIoKSk7CisgICAgdGhpcy0+U2V0Tm90ZXNGaWxlcyhhcmdzW2ldKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGNtOjpzdHJpbmdfdmlldyBub1Rlc3RzUHJlZml4ID0gIi0tbm8tdGVzdHM9IjsKKyAgaWYgKGNtSGFzUHJlZml4KGFyZywgbm9UZXN0c1ByZWZpeCkpIHsKKyAgICBjbTo6c3RyaW5nX3ZpZXcgbm9UZXN0c01vZGUgPQorICAgICAgY206OnN0cmluZ192aWV3KGFyZykuc3Vic3RyKG5vVGVzdHNQcmVmaXgubGVuZ3RoKCkpOworICAgIGlmIChub1Rlc3RzTW9kZSA9PSAiZXJyb3IiKSB7CisgICAgICB0aGlzLT5JbXBsLT5Ob1Rlc3RzTW9kZSA9IGNtQ1Rlc3Q6Ok5vVGVzdHM6OkVycm9yOworICAgIH0gZWxzZSBpZiAobm9UZXN0c01vZGUgIT0gImlnbm9yZSIpIHsKKyAgICAgIGVycm9ybXNnID0KKyAgICAgICAgY21TdHJDYXQoIictLW5vLXRlc3RzPScgZ2l2ZW4gdW5rbm93biB2YWx1ZSAnIiwgbm9UZXN0c01vZGUsICdcJycpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5JbXBsLT5Ob1Rlc3RzTW9kZSA9IGNtQ1Rlc3Q6Ok5vVGVzdHM6Oklnbm9yZTsKKyAgICB9CiAgIH0KIAogICAvLyBvcHRpb25zIHRoYXQgY29udHJvbCB3aGF0IHRlc3RzIGFyZSBydW4KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUkiLCAiLS10ZXN0cy1pbmZvcm1hdGlvbiIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUkiX3MsICItLXRlc3RzLWluZm9ybWF0aW9uIikgJiYKKyAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJUZXN0c1RvUnVuSW5mb3JtYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXS5jX3N0cigpKTsKICAgICB0aGlzLT5HZXRNZW1DaGVja0hhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiVGVzdHNUb1J1bkluZm9ybWF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1VIiwgIi0tdW5pb24iKSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVUiX3MsICItLXVuaW9uIikpIHsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJVc2VVbmlvbiIsICJ0cnVlIik7CiAgICAgdGhpcy0+R2V0TWVtQ2hlY2tIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIlVzZVVuaW9uIiwgInRydWUiKTsKLSAgfQotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItUiIsICItLXRlc3RzLXJlZ2V4IikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVIiX3MsICItLXRlc3RzLXJlZ2V4IikgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIkluY2x1ZGVSZWd1bGFyRXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwogICAgIHRoaXMtPkdldE1lbUNoZWNrSGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJJbmNsdWRlUmVndWxhckV4cHJlc3Npb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUwiLCAiLS1sYWJlbC1yZWdleCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1MIl9zLCAiLS1sYWJlbC1yZWdleCIpICYmCisgICAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJMYWJlbFJlZ3VsYXJFeHByZXNzaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7CiAgICAgdGhpcy0+R2V0TWVtQ2hlY2tIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIkxhYmVsUmVndWxhckV4cHJlc3Npb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUxFIiwgIi0tbGFiZWwtZXhjbHVkZSIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIH0gZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItTEUiX3MsICItLWxhYmVsLWV4Y2x1ZGUiKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigKICAgICAgICJFeGNsdWRlTGFiZWxSZWd1bGFyRXhwcmVzc2lvbiIsIGFyZ3NbaV0uY19zdHIoKSk7CkBAIC0yMDU2LDggKzIxMDAsOCBAQAogICAgICAgIkV4Y2x1ZGVMYWJlbFJlZ3VsYXJFeHByZXNzaW9uIiwgYXJnc1tpXS5jX3N0cigpKTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1FIiwgIi0tZXhjbHVkZS1yZWdleCIpICYmCi0gICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUUiX3MsICItLWV4Y2x1ZGUtcmVnZXgiKSAmJgorICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oIkV4Y2x1ZGVSZWd1bGFyRXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldLmNfc3RyKCkpOwpAQCAtMjA2NSwyNCArMjEwOSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRkEiLCAiLS1maXh0dXJlLWV4Y2x1ZGUtYW55IikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRkEiX3MsICItLWZpeHR1cmUtZXhjbHVkZS1hbnkiKSAmJgorICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oCiAgICAgICAiRXhjbHVkZUZpeHR1cmVSZWd1bGFyRXhwcmVzc2lvbiIsIGFyZ3NbaV0uY19zdHIoKSk7CiAgICAgdGhpcy0+R2V0TWVtQ2hlY2tIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oCiAgICAgICAiRXhjbHVkZUZpeHR1cmVSZWd1bGFyRXhwcmVzc2lvbiIsIGFyZ3NbaV0uY19zdHIoKSk7Ci0gIH0KLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLUZTIiwgIi0tZml4dHVyZS1leGNsdWRlLXNldHVwIikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1GUyJfcywgIi0tZml4dHVyZS1leGNsdWRlLXNldHVwIikgJiYKKyAgICAgICAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgaSsrOwogICAgIHRoaXMtPkdldFRlc3RIYW5kbGVyKCktPlNldFBlcnNpc3RlbnRPcHRpb24oCiAgICAgICAiRXhjbHVkZUZpeHR1cmVTZXR1cFJlZ3VsYXJFeHByZXNzaW9uIiwgYXJnc1tpXS5jX3N0cigpKTsKICAgICB0aGlzLT5HZXRNZW1DaGVja0hhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigKICAgICAgICJFeGNsdWRlRml4dHVyZVNldHVwUmVndWxhckV4cHJlc3Npb24iLCBhcmdzW2ldLmNfc3RyKCkpOwotICB9Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1GQyIsICItLWZpeHR1cmUtZXhjbHVkZS1jbGVhbnVwIikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgfSBlbHNlIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1GQyJfcywgIi0tZml4dHVyZS1leGNsdWRlLWNsZWFudXAiKSAmJgorICAgICAgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICBpKys7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigKICAgICAgICJFeGNsdWRlRml4dHVyZUNsZWFudXBSZWd1bGFyRXhwcmVzc2lvbiIsIGFyZ3NbaV0uY19zdHIoKSk7CkBAIC0yMDkwLDggKzIxMzIsOCBAQAogICAgICAgIkV4Y2x1ZGVGaXh0dXJlQ2xlYW51cFJlZ3VsYXJFeHByZXNzaW9uIiwgYXJnc1tpXS5jX3N0cigpKTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tcmVzb3VyY2Utc3BlYy1maWxlIikgJiYKLSAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgZWxzZSBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXJlc291cmNlLXNwZWMtZmlsZSJfcykgJiYKKyAgICAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIGkrKzsKICAgICB0aGlzLT5HZXRUZXN0SGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJSZXNvdXJjZVNwZWNGaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7CkBAIC0yMDk5LDcgKzIxNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uY19zdHIoKSk7CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXJlcnVuLWZhaWxlZCIpKSB7CisgIGVsc2UgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1yZXJ1bi1mYWlsZWQiX3MpKSB7CiAgICAgdGhpcy0+R2V0VGVzdEhhbmRsZXIoKS0+U2V0UGVyc2lzdGVudE9wdGlvbigiUmVydW5GYWlsZWQiLCAidHJ1ZSIpOwogICAgIHRoaXMtPkdldE1lbUNoZWNrSGFuZGxlcigpLT5TZXRQZXJzaXN0ZW50T3B0aW9uKCJSZXJ1bkZhaWxlZCIsICJ0cnVlIik7CiAgIH0KQEAgLTIxNTEsNyArMjE5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBTUkFyZ3VtZW50U3BlY2lmaWVkKQogewogICBzdGQ6OnN0cmluZyBhcmcgPSBhcmdzW2ldOwotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItU1AiLCAiLS1zY3JpcHQtbmV3LXByb2Nlc3MiKSAmJgorICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItU1AiX3MsICItLXNjcmlwdC1uZXctcHJvY2VzcyIpICYmCiAgICAgICBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgdGhpcy0+SW1wbC0+UnVuQ29uZmlndXJhdGlvblNjcmlwdCA9IHRydWU7CiAgICAgaSsrOwpAQCAtMjE2Miw3ICsyMjA0LDggQEAKICAgICB9CiAgIH0KIAotICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItU1IiLCAiLS1zY3JpcHQtcnVuIikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItU1IiX3MsICItLXNjcmlwdC1ydW4iKSAmJgorICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIFNSQXJndW1lbnRTcGVjaWZpZWQgPSB0cnVlOwogICAgIHRoaXMtPkltcGwtPlJ1bkNvbmZpZ3VyYXRpb25TY3JpcHQgPSB0cnVlOwogICAgIGkrKzsKQEAgLTIxNzAsNyArMjIxMyw3IEBACiAgICAgY2gtPkFkZENvbmZpZ3VyYXRpb25TY3JpcHQoYXJnc1tpXS5jX3N0cigpLCB0cnVlKTsKICAgfQogCi0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1TIiwgIi0tc2NyaXB0IikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItUyJfcywgIi0tc2NyaXB0IikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgIHRoaXMtPkltcGwtPlJ1bkNvbmZpZ3VyYXRpb25TY3JpcHQgPSB0cnVlOwogICAgIGkrKzsKICAgICBjbUNUZXN0U2NyaXB0SGFuZGxlciogY2ggPSB0aGlzLT5HZXRTY3JpcHRIYW5kbGVyKCk7CkBAIC0yMjA0LDcgKzIyNDcsNyBAQAogICBib29sIFNSQXJndW1lbnRTcGVjaWZpZWQgPSBmYWxzZTsKIAogICAvLyBjb3B5IHRoZSBjb21tYW5kIGxpbmUKLSAgY21BcHBlbmQodGhpcy0+SW1wbC0+SW5pdGlhbENvbW1hbmRMaW5lQXJndW1lbnRzLCBhcmdzKTsKKyAgY206OmFwcGVuZCh0aGlzLT5JbXBsLT5Jbml0aWFsQ29tbWFuZExpbmVBcmd1bWVudHMsIGFyZ3MpOwogCiAgIC8vIHByb2Nlc3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7CkBAIC0yMjIwLDcgKzIyNjMsOCBAQAogCiAgICAgLy8gLS1kYXNoYm9hcmQ6IGhhbmRsZSBhIHJlcXVlc3QgZm9yIGEgZGFzaGJvYXJkCiAgICAgc3RkOjpzdHJpbmcgYXJnID0gYXJnc1tpXTsKLSAgICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRCIsICItLWRhc2hib2FyZCIpICYmIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKKyAgICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItRCJfcywgIi0tZGFzaGJvYXJkIikgJiYKKyAgICAgICAgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgewogICAgICAgdGhpcy0+SW1wbC0+UHJvZHVjZVhNTCA9IHRydWU7CiAgICAgICBpKys7CiAgICAgICBzdGQ6OnN0cmluZyB0YXJnID0gYXJnc1tpXTsKQEAgLTIyNTYsMjIgKzIzMDAsMjMgQEAKICAgICB9CiAKICAgICAvLyAtLWV4dHJhLXN1Ym1pdAotICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tZXh0cmEtc3VibWl0IikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tZXh0cmEtc3VibWl0Il9zKSAmJiBpIDwgYXJncy5zaXplKCkgLSAxKSB7CiAgICAgICB0aGlzLT5JbXBsLT5Qcm9kdWNlWE1MID0gdHJ1ZTsKICAgICAgIHRoaXMtPlNldFRlc3QoIlN1Ym1pdCIpOwogICAgICAgaSsrOwotICAgICAgaWYgKCF0aGlzLT5TdWJtaXRFeHRyYUZpbGVzKGFyZ3NbaV0uY19zdHIoKSkpIHsKKyAgICAgIGlmICghdGhpcy0+U3VibWl0RXh0cmFGaWxlcyhhcmdzW2ldKSkgewogICAgICAgICByZXR1cm4gMDsKICAgICAgIH0KICAgICB9CiAKICAgICAvLyAtLWJ1aWxkLWFuZC10ZXN0IG9wdGlvbnMKLSAgICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLWJ1aWxkLWFuZC10ZXN0IikgJiYgaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgeworICAgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi0tYnVpbGQtYW5kLXRlc3QiX3MpICYmCisgICAgICAgIGkgPCBhcmdzLnNpemUoKSAtIDEpIHsKICAgICAgIGNtYWtlQW5kVGVzdCA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gLS1zY2hlZHVsZS1yYW5kb20KLSAgICBpZiAodGhpcy0+Q2hlY2tBcmd1bWVudChhcmcsICItLXNjaGVkdWxlLXJhbmRvbSIpKSB7CisgICAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLS1zY2hlZHVsZS1yYW5kb20iX3MpKSB7CiAgICAgICB0aGlzLT5JbXBsLT5TY2hlZHVsZVR5cGUgPSAiUmFuZG9tIjsKICAgICB9CiAKQEAgLTIzMjYsMTEgKzIzNzEsMTEgQEAKIHsKICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKICAgc3RkOjpzdHJpbmcgYXJnID0gYXJnc1tpXTsKLSAgaWYgKHRoaXMtPkNoZWNrQXJndW1lbnQoYXJnLCAiLVQiLCAiLS10ZXN0LWFjdGlvbiIpICYmCisgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1UIl9zLCAiLS10ZXN0LWFjdGlvbiIpICYmCiAgICAgICAoaSA8IGFyZ3Muc2l6ZSgpIC0gMSkpIHsKICAgICB0aGlzLT5JbXBsLT5Qcm9kdWNlWE1MID0gdHJ1ZTsKICAgICBpKys7Ci0gICAgaWYgKCF0aGlzLT5TZXRUZXN0KGFyZ3NbaV0uY19zdHIoKSwgZmFsc2UpKSB7CisgICAgaWYgKCF0aGlzLT5TZXRUZXN0KGFyZ3NbaV0sIGZhbHNlKSkgewogICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgY21DVGVzdExvZyh0aGlzLCBFUlJPUl9NRVNTQUdFLAogICAgICAgICAgICAgICAgICAiQ1Rlc3QgLVQgY2FsbGVkIHdpdGggaW5jb3JyZWN0IG9wdGlvbjogIiA8PCBhcmdzW2ldCkBAIC0yMzU4LDE1ICsyNDAzLDE1IEBACiB7CiAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CiAgIHN0ZDo6c3RyaW5nIGFyZyA9IGFyZ3NbaV07Ci0gIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1NIiwgIi0tdGVzdC1tb2RlbCIpICYmCisgIGlmICh0aGlzLT5DaGVja0FyZ3VtZW50KGFyZywgIi1NIl9zLCAiLS10ZXN0LW1vZGVsIikgJiYKICAgICAgIChpIDwgYXJncy5zaXplKCkgLSAxKSkgewogICAgIGkrKzsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgc3RyID0gYXJnc1tpXTsKLSAgICBpZiAoY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHN0cikgPT0gIm5pZ2h0bHkiKSB7CisgICAgaWYgKGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzdHIpID09ICJuaWdodGx5Il9zKSB7CiAgICAgICB0aGlzLT5TZXRUZXN0TW9kZWwoY21DVGVzdDo6TklHSFRMWSk7Ci0gICAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc3RyKSA9PSAiY29udGludW91cyIpIHsKKyAgICB9IGVsc2UgaWYgKGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzdHIpID09ICJjb250aW51b3VzIl9zKSB7CiAgICAgICB0aGlzLT5TZXRUZXN0TW9kZWwoY21DVGVzdDo6Q09OVElOVU9VUyk7Ci0gICAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc3RyKSA9PSAiZXhwZXJpbWVudGFsIikgeworICAgIH0gZWxzZSBpZiAoY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHN0cikgPT0gImV4cGVyaW1lbnRhbCJfcykgewogICAgICAgdGhpcy0+U2V0VGVzdE1vZGVsKGNtQ1Rlc3Q6OkVYUEVSSU1FTlRBTCk7CiAgICAgfSBlbHNlIHsKICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKQEAgLTI0NDUsMTQgKzI0OTAsMjEgQEAKICAgcmV0dXJuIHJldHY7CiB9CiAKLXZvaWQgY21DVGVzdDo6U2V0Tm90ZXNGaWxlcyhjb25zdCBjaGFyKiBub3RlcykKK3ZvaWQgY21DVGVzdDo6U2V0Tm90ZXNGaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgbm90ZXMpCiB7Ci0gIGlmICghbm90ZXMpIHsKLSAgICByZXR1cm47Ci0gIH0KICAgdGhpcy0+SW1wbC0+Tm90ZXNGaWxlcyA9IG5vdGVzOwogfQogCitib29sIGNtQ1Rlc3Q6OkdldFN0b3BPbkZhaWx1cmUoKSBjb25zdAoreworICByZXR1cm4gdGhpcy0+SW1wbC0+U3RvcE9uRmFpbHVyZTsKK30KKwordm9pZCBjbUNUZXN0OjpTZXRTdG9wT25GYWlsdXJlKGJvb2wgc3RvcCkKK3sKKyAgdGhpcy0+SW1wbC0+U3RvcE9uRmFpbHVyZSA9IHN0b3A7Cit9CisKIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgY21DVGVzdDo6R2V0U3RvcFRpbWUoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+SW1wbC0+U3RvcFRpbWU7CkBAIC0yNTA1LDcgKzI1NTcsOCBAQAogICB0aGlzLT5JbXBsLT5TY2hlZHVsZVR5cGUgPSB0eXBlOwogfQogCi1pbnQgY21DVGVzdDo6UmVhZEN1c3RvbUNvbmZpZ3VyYXRpb25GaWxlVHJlZShjb25zdCBjaGFyKiBkaXIsIGNtTWFrZWZpbGUqIG1mKQoraW50IGNtQ1Rlc3Q6OlJlYWRDdXN0b21Db25maWd1cmF0aW9uRmlsZVRyZWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mKQogewogICBib29sIGZvdW5kID0gZmFsc2U7CiAgIGNtQ1Rlc3RMb2codGhpcywgREVCVUcsCkBAIC0yNTkyLDcgKzI2NDUsNyBAQAogICB2YWwgPSBhdG9pKGR2YWwpOwogfQogCi1zdGQ6OnN0cmluZyBjbUNUZXN0OjpHZXRTaG9ydFBhdGhUb0ZpbGUoY29uc3QgY2hhciogY2ZuYW1lKQorc3RkOjpzdHJpbmcgY21DVGVzdDo6R2V0U2hvcnRQYXRoVG9GaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjZm5hbWUpCiB7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VEaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAogICAgIHRoaXMtPkdldENUZXN0Q29uZmlndXJhdGlvbigiU291cmNlRGlyZWN0b3J5IikpOwpAQCAtMjYzMyw3ICsyNjg2LDcgQEAKIAogICAgIHBhdGggPSAiLi8iICsgKnJlczsKICAgICBpZiAocGF0aC5iYWNrKCkgPT0gJy8nKSB7Ci0gICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMCwgcGF0aC5zaXplKCkgLSAxKTsKKyAgICAgIHBhdGgucmVzaXplKHBhdGguc2l6ZSgpIC0gMSk7CiAgICAgfQogICB9CiAKQEAgLTI2NTYsMTggKzI3MDksMTcgQEAKICAgdGhpcy0+SW1wbC0+Q1Rlc3RDb25maWd1cmF0aW9uLmNsZWFyKCk7CiB9CiAKLXZvaWQgY21DVGVzdDo6U2V0Q1Rlc3RDb25maWd1cmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlLAordm9pZCBjbUNUZXN0OjpTZXRDVGVzdENvbmZpZ3VyYXRpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdXBwcmVzcykKIHsKICAgY21DVGVzdE9wdGlvbmFsTG9nKHRoaXMsIEhBTkRMRVJfVkVSQk9TRV9PVVRQVVQsCi0gICAgICAgICAgICAgICAgICAgICAiU2V0Q1Rlc3RDb25maWd1cmF0aW9uOiIKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgbmFtZSA8PCAiOiIgPDwgKHZhbHVlID8gdmFsdWUgOiAiKG51bGwpIikgPDwgIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICJTZXRDVGVzdENvbmZpZ3VyYXRpb246IiA8PCBuYW1lIDw8ICI6IiA8PCB2YWx1ZSA8PCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3MpOwogCiAgIGlmICghbmFtZSkgewogICAgIHJldHVybjsKICAgfQotICBpZiAoIXZhbHVlKSB7CisgIGlmICh2YWx1ZS5lbXB0eSgpKSB7CiAgICAgdGhpcy0+SW1wbC0+Q1Rlc3RDb25maWd1cmF0aW9uLmVyYXNlKG5hbWUpOwogICAgIHJldHVybjsKICAgfQpAQCAtMjY4NCw3ICsyNzM2LDcgQEAKICAgICBzdGQ6OnN0cmluZyBzaXRlID0gdGhpcy0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJEcm9wU2l0ZSIpOwogICAgIHN0ZDo6c3RyaW5nIGxvY2F0aW9uID0gdGhpcy0+R2V0Q1Rlc3RDb25maWd1cmF0aW9uKCJEcm9wTG9jYXRpb24iKTsKIAotICAgIHVybCA9IGNtU3RyQ2F0KG1ldGhvZC5lbXB0eSgpID8gImh0dHAiIDogbWV0aG9kLCAiOi8vIik7CisgICAgdXJsID0gY21TdHJDYXQobWV0aG9kLmVtcHR5KCkgPyAiaHR0cCIgOiBtZXRob2QsICI6Ly8iX3MpOwogICAgIGlmICghdXNlci5lbXB0eSgpKSB7CiAgICAgICB1cmwgKz0gdXNlcjsKICAgICAgIGlmICghcGFzc3dvcmQuZW1wdHkoKSkgewpAQCAtMjg0NywxNCArMjg5OSwxOSBAQAogICByZXR1cm4gdGhpcy0+SW1wbC0+RGVmaW5pdGlvbnM7CiB9CiAKLWludCBjbUNUZXN0OjpHZXRUZXN0UmVwZWF0KCkgY29uc3QKK2ludCBjbUNUZXN0OjpHZXRSZXBlYXRDb3VudCgpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5JbXBsLT5SZXBlYXRUZXN0czsKKyAgcmV0dXJuIHRoaXMtPkltcGwtPlJlcGVhdENvdW50OwogfQogCi1ib29sIGNtQ1Rlc3Q6OkdldFJlcGVhdFVudGlsRmFpbCgpIGNvbnN0CitjbUNUZXN0OjpSZXBlYXQgY21DVGVzdDo6R2V0UmVwZWF0TW9kZSgpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5JbXBsLT5SZXBlYXRVbnRpbEZhaWw7CisgIHJldHVybiB0aGlzLT5JbXBsLT5SZXBlYXRNb2RlOworfQorCitjbUNUZXN0OjpOb1Rlc3RzIGNtQ1Rlc3Q6OkdldE5vVGVzdHNNb2RlKCkgY29uc3QKK3sKKyAgcmV0dXJuIHRoaXMtPkltcGwtPk5vVGVzdHNNb2RlOwogfQogCiB2b2lkIGNtQ1Rlc3Q6OlNldEJ1aWxkSUQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKQpAQCAtMjg2Nyw3ICsyOTI0LDcgQEAKICAgcmV0dXJuIHRoaXMtPkltcGwtPkJ1aWxkSUQ7CiB9CiAKLXZvaWQgY21DVGVzdDo6QWRkU3VibWl0RmlsZShQYXJ0IHBhcnQsIGNvbnN0IGNoYXIqIG5hbWUpCit2b2lkIGNtQ1Rlc3Q6OkFkZFN1Ym1pdEZpbGUoUGFydCBwYXJ0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKIHsKICAgdGhpcy0+SW1wbC0+UGFydHNbcGFydF0uU3VibWl0RmlsZXMuZW1wbGFjZV9iYWNrKG5hbWUpOwogfQpAQCAtMjkwMyw5ICsyOTYwLDkgQEAKICAgdGhpcy0+SW1wbC0+Q1Rlc3RDb25maWd1cmF0aW9uT3ZlcndyaXRlc1trZXldID0gdmFsdWU7CiB9CiAKLXZvaWQgY21DVGVzdDo6U2V0Q29uZmlnVHlwZShjb25zdCBjaGFyKiBjdCkKK3ZvaWQgY21DVGVzdDo6U2V0Q29uZmlnVHlwZShjb25zdCBzdGQ6OnN0cmluZyYgY3QpCiB7Ci0gIHRoaXMtPkltcGwtPkNvbmZpZ1R5cGUgPSBjdCA/IGN0IDogIiI7CisgIHRoaXMtPkltcGwtPkNvbmZpZ1R5cGUgPSBjdDsKICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyh0aGlzLT5JbXBsLT5Db25maWdUeXBlLCAiLlxcIiwgIiIpOwogICBzdGQ6OnN0cmluZyBjb25mVHlwZUVudiA9ICJDTUFLRV9DT05GSUdfVFlQRT0iICsgdGhpcy0+SW1wbC0+Q29uZmlnVHlwZTsKICAgY21TeXN0ZW1Ub29sczo6UHV0RW52KGNvbmZUeXBlRW52KTsKQEAgLTI5MTUsOCArMjk3Miw3IEBACiAgIGNtTWFrZWZpbGUqIG1mLCBjb25zdCBjaGFyKiBkY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgY21ha2VfdmFyLAogICBib29sIHN1cHByZXNzKQogewotICBjb25zdCBjaGFyKiBjdHZhcjsKLSAgY3R2YXIgPSBtZi0+R2V0RGVmaW5pdGlvbihjbWFrZV92YXIpOworICBjbVByb3AgY3R2YXIgPSBtZi0+R2V0RGVmKGNtYWtlX3Zhcik7CiAgIGlmICghY3R2YXIpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KQEAgLTI5MjQsNyArMjk4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAiU2V0Q1Rlc3RDb25maWd1cmF0aW9uRnJvbUNNYWtlVmFyaWFibGU6IgogICAgICAgICAgICAgICAgICAgICAgICA8PCBkY29uZmlnIDw8ICI6IiA8PCBjbWFrZV92YXIgPDwgc3RkOjplbmRsLAogICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3MpOwotICB0aGlzLT5TZXRDVGVzdENvbmZpZ3VyYXRpb24oZGNvbmZpZywgY3R2YXIsIHN1cHByZXNzKTsKKyAgdGhpcy0+U2V0Q1Rlc3RDb25maWd1cmF0aW9uKGRjb25maWcsICpjdHZhciwgc3VwcHJlc3MpOwogICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjk2NCwxMCArMzAyMCwxMCBAQAogICAgIHJlcyA9IGNtc3lzUHJvY2Vzc19XYWl0Rm9yRGF0YShjcCwgJmRhdGEsICZsZW5ndGgsIG51bGxwdHIpOwogICAgIHN3aXRjaCAocmVzKSB7CiAgICAgICBjYXNlIGNtc3lzUHJvY2Vzc19QaXBlX1NURE9VVDoKLSAgICAgICAgY21BcHBlbmQodGVtcE91dHB1dCwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CisgICAgICAgIGNtOjphcHBlbmQodGVtcE91dHB1dCwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBjbXN5c1Byb2Nlc3NfUGlwZV9TVERFUlI6Ci0gICAgICAgIGNtQXBwZW5kKHRlbXBFcnJvciwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CisgICAgICAgIGNtOjphcHBlbmQodGVtcEVycm9yLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICBkb25lID0gdHJ1ZTsKQEAgLTMwMjUsMTQgKzMwODEsMTIgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBjbUNUZXN0OjpTZXRPdXRwdXRMb2dGaWxlTmFtZShjb25zdCBjaGFyKiBuYW1lKQordm9pZCBjbUNUZXN0OjpTZXRPdXRwdXRMb2dGaWxlTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKIHsKLSAgaWYgKHRoaXMtPkltcGwtPk91dHB1dExvZ0ZpbGUpIHsKLSAgICBkZWxldGUgdGhpcy0+SW1wbC0+T3V0cHV0TG9nRmlsZTsKLSAgICB0aGlzLT5JbXBsLT5PdXRwdXRMb2dGaWxlID0gbnVsbHB0cjsKLSAgfQotICBpZiAobmFtZSkgewotICAgIHRoaXMtPkltcGwtPk91dHB1dExvZ0ZpbGUgPSBuZXcgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKG5hbWUpOworICBpZiAoIW5hbWUuZW1wdHkoKSkgeworICAgIHRoaXMtPkltcGwtPk91dHB1dExvZ0ZpbGUgPSBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPihuYW1lKTsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLT5JbXBsLT5PdXRwdXRMb2dGaWxlLnJlc2V0KCk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ1Rlc3QuaCBiL1NvdXJjZS9jbUNUZXN0LmgKaW5kZXggODJhNmY0Yy4uMWUwZmI4YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ1Rlc3QuaAorKysgYi9Tb3VyY2UvY21DVGVzdC5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc091dHB1dC5oIgogCkBAIC02Miw3ICs2NCw3IEBACiAKICAgLyoqIEdldCBhIHRlc3RpbmcgcGFydCBpZCBmcm9tIGl0cyBzdHJpbmcgbmFtZS4gIFJldHVybnMgUGFydENvdW50CiAgICAgICBpZiB0aGUgc3RyaW5nIGRvZXMgbm90IG5hbWUgYSB2YWxpZCBwYXJ0LiAgKi8KLSAgUGFydCBHZXRQYXJ0RnJvbU5hbWUoY29uc3QgY2hhciogbmFtZSk7CisgIFBhcnQgR2V0UGFydEZyb21OYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKIAogICAvKiogUHJvY2VzcyBDb21tYW5kIGxpbmUgYXJndW1lbnRzICovCiAgIGludCBSdW4oc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Jiwgc3RkOjpzdHJpbmcqIG91dHB1dCA9IG51bGxwdHIpOwpAQCAtMTI1LDEyICsxMjcsMTIgQEAKICAgICogQ2hlY2sgaWYgQ1Rlc3QgZmlsZSBleGlzdHMKICAgICovCiAgIGJvb2wgQ1Rlc3RGaWxlRXhpc3RzKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7Ci0gIGJvb2wgQWRkSWZFeGlzdHMoUGFydCBwYXJ0LCBjb25zdCBjaGFyKiBmaWxlKTsKKyAgYm9vbCBBZGRJZkV4aXN0cyhQYXJ0IHBhcnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlKTsKIAogICAvKioKICAgICogU2V0IHRoZSBjbWFrZSB0ZXN0CiAgICAqLwotICBib29sIFNldFRlc3QoY29uc3QgY2hhciosIGJvb2wgcmVwb3J0ID0gdHJ1ZSk7CisgIGJvb2wgU2V0VGVzdChjb25zdCBzdGQ6OnN0cmluZyYsIGJvb2wgcmVwb3J0ID0gdHJ1ZSk7CiAKICAgLyoqCiAgICAqIFNldCB0aGUgY21ha2UgdGVzdCBtb2RlIChleHBlcmltZW50YWwsIG5pZ2h0bHksIGNvbnRpbnVvdXMpLgpAQCAtMTM5LDEwICsxNDEsMTEgQEAKICAgaW50IEdldFRlc3RNb2RlbCgpIGNvbnN0OwogCiAgIHN0ZDo6c3RyaW5nIEdldFRlc3RNb2RlbFN0cmluZygpOwotICBzdGF0aWMgaW50IEdldFRlc3RNb2RlbEZyb21TdHJpbmcoY29uc3QgY2hhciogc3RyKTsKLSAgc3RhdGljIHN0ZDo6c3RyaW5nIENsZWFuU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpOworICBzdGF0aWMgaW50IEdldFRlc3RNb2RlbEZyb21TdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cik7CisgIHN0YXRpYyBzdGQ6OnN0cmluZyBDbGVhblN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzcG9zID0gMCk7CiAgIHN0ZDo6c3RyaW5nIEdldENUZXN0Q29uZmlndXJhdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7Ci0gIHZvaWQgU2V0Q1Rlc3RDb25maWd1cmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlLAorICB2b2lkIFNldENUZXN0Q29uZmlndXJhdGlvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcHJlc3MgPSBmYWxzZSk7CiAgIHZvaWQgRW1wdHlDVGVzdENvbmZpZ3VyYXRpb24oKTsKIApAQCAtMTU4LDcgKzE2MSw3IEBACiAgIGNtQ1Rlc3QmIG9wZXJhdG9yPShjb25zdCBjbUNUZXN0JikgPSBkZWxldGU7CiAKICAgLyoqIFNldCB0aGUgbm90ZXMgZmlsZXMgdG8gYmUgY3JlYXRlZC4gKi8KLSAgdm9pZCBTZXROb3Rlc0ZpbGVzKGNvbnN0IGNoYXIqIG5vdGVzKTsKKyAgdm9pZCBTZXROb3Rlc0ZpbGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBub3Rlcyk7CiAKICAgdm9pZCBQb3B1bGF0ZUN1c3RvbVZlY3RvcihjbU1ha2VmaWxlKiBtZiwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlZmluaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB2ZWMpOwpAQCAtMjAxLDYgKzIwNCw5IEBACiAgIGJvb2wgU2hvdWxkQ29tcHJlc3NUZXN0T3V0cHV0KCk7CiAgIGJvb2wgQ29tcHJlc3NTdHJpbmcoc3RkOjpzdHJpbmcmIHN0cik7CiAKKyAgYm9vbCBHZXRTdG9wT25GYWlsdXJlKCkgY29uc3Q7CisgIHZvaWQgU2V0U3RvcE9uRmFpbHVyZShib29sIHN0b3ApOworCiAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgR2V0U3RvcFRpbWUoKSBjb25zdDsKICAgdm9pZCBTZXRTdG9wVGltZShzdGQ6OnN0cmluZyBjb25zdCYgdGltZSk7CiAKQEAgLTI2Niw3ICsyNzIsNyBAQAogICAgKiBUaGlzIG1lYW5zIGlmIHRoZSBmaWxlIGlzIGluIGJpbmFyeSBvcgogICAgKiBzb3VyY2UgZGlyZWN0b3J5LCBpdCB3aWxsIGJlY29tZSAvLi4uL3JlbGF0aXZlL3BhdGgvdG8vZmlsZQogICAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0U2hvcnRQYXRoVG9GaWxlKGNvbnN0IGNoYXIqIGZuYW1lKTsKKyAgc3RkOjpzdHJpbmcgR2V0U2hvcnRQYXRoVG9GaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSk7CiAKICAgZW51bQogICB7CkBAIC0zNDgsMTQgKzM1NCwxNCBAQAogICBpbnQgR2VuZXJhdGVEb25lRmlsZSgpOwogCiAgIC8qKiBTdWJtaXQgZXh0cmEgZmlsZXMgdG8gdGhlIHNlcnZlciAqLwotICBib29sIFN1Ym1pdEV4dHJhRmlsZXMoY29uc3QgY2hhciogZmlsZXMpOworICBib29sIFN1Ym1pdEV4dHJhRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVzKTsKICAgYm9vbCBTdWJtaXRFeHRyYUZpbGVzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZmlsZXMpOwogCiAgIC8qKiBTZXQgdGhlIG91dHB1dCBsb2cgZmlsZSBuYW1lICovCi0gIHZvaWQgU2V0T3V0cHV0TG9nRmlsZU5hbWUoY29uc3QgY2hhciogbmFtZSk7CisgIHZvaWQgU2V0T3V0cHV0TG9nRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogCiAgIC8qKiBTZXQgdGhlIHZpc3VhbCBzdHVkaW8gb3IgWGNvZGUgY29uZmlnIHR5cGUgKi8KLSAgdm9pZCBTZXRDb25maWdUeXBlKGNvbnN0IGNoYXIqIGN0KTsKKyAgdm9pZCBTZXRDb25maWdUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjdCk7CiAKICAgLyoqIFZhcmlvdXMgbG9nIHR5cGVzICovCiAgIGVudW0KQEAgLTM5MywxNCArMzk5LDE0IEBACiAgIHN0ZDo6c3RyaW5nIEdldEJ1aWxkSUQoKSBjb25zdDsKIAogICAvKiogQWRkIGZpbGUgdG8gYmUgc3VibWl0dGVkICovCi0gIHZvaWQgQWRkU3VibWl0RmlsZShQYXJ0IHBhcnQsIGNvbnN0IGNoYXIqIG5hbWUpOworICB2b2lkIEFkZFN1Ym1pdEZpbGUoUGFydCBwYXJ0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgR2V0U3VibWl0RmlsZXMoUGFydCBwYXJ0KSBjb25zdDsKICAgdm9pZCBDbGVhclN1Ym1pdEZpbGVzKFBhcnQgcGFydCk7CiAKICAgLyoqCiAgICAqIFJlYWQgdGhlIGN1c3RvbSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBhcHBseSB0aGVtIHRvIHRoZSBjdXJyZW50IGN0ZXN0CiAgICAqLwotICBpbnQgUmVhZEN1c3RvbUNvbmZpZ3VyYXRpb25GaWxlVHJlZShjb25zdCBjaGFyKiBkaXIsIGNtTWFrZWZpbGUqIG1mKTsKKyAgaW50IFJlYWRDdXN0b21Db25maWd1cmF0aW9uRmlsZVRyZWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwgY21NYWtlZmlsZSogbWYpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgR2V0SW5pdGlhbENvbW1hbmRMaW5lQXJndW1lbnRzKCk7CiAKQEAgLTQzMSwxMCArNDM3LDI0IEBACiAgIGNvbnN0IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4mIEdldERlZmluaXRpb25zKCkgY29uc3Q7CiAKICAgLyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgdGVzdCBzaG91bGQgYmUgcnVuICovCi0gIGludCBHZXRUZXN0UmVwZWF0KCkgY29uc3Q7CisgIGludCBHZXRSZXBlYXRDb3VudCgpIGNvbnN0OwogCi0gIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0ZXN0IHNob3VsZCBydW4gdW50aWwgZmFpbCAqLwotICBib29sIEdldFJlcGVhdFVudGlsRmFpbCgpIGNvbnN0OworICBlbnVtIGNsYXNzIFJlcGVhdAorICB7CisgICAgTmV2ZXIsCisgICAgVW50aWxGYWlsLAorICAgIFVudGlsUGFzcywKKyAgICBBZnRlclRpbWVvdXQsCisgIH07CisgIFJlcGVhdCBHZXRSZXBlYXRNb2RlKCkgY29uc3Q7CisKKyAgZW51bSBjbGFzcyBOb1Rlc3RzCisgIHsKKyAgICBMZWdhY3ksCisgICAgRXJyb3IsCisgICAgSWdub3JlCisgIH07CisgIE5vVGVzdHMgR2V0Tm9UZXN0c01vZGUoKSBjb25zdDsKIAogICB2b2lkIEdlbmVyYXRlU3VicHJvamVjdHNPdXRwdXQoY21YTUxXcml0ZXImIHhtbCk7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRMYWJlbHNGb3JTdWJwcm9qZWN0cygpOwpAQCAtNDQyLDcgKzQ2Miw3IEBACiAgIHZvaWQgU2V0UnVuQ3VycmVudFNjcmlwdChib29sIHZhbHVlKTsKIAogcHJpdmF0ZToKLSAgaW50IEdlbmVyYXRlTm90ZXNGaWxlKGNvbnN0IGNoYXIqIGZpbGVzKTsKKyAgaW50IEdlbmVyYXRlTm90ZXNGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlcyk7CiAKICAgdm9pZCBCbG9ja1Rlc3RFcnJvckRpYWdub3N0aWNzKCk7CiAKQEAgLTQ5Miw4ICs1MTIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZmlsZXMpOwogCiAgIC8qKiBDaGVjayBpZiB0aGUgYXJndW1lbnQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgKi8KLSAgYm9vbCBDaGVja0FyZ3VtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmcsIGNvbnN0IGNoYXIqIHZhcmcxLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyZzIgPSBudWxscHRyKTsKKyAgc3RhdGljIGJvb2wgQ2hlY2tBcmd1bWVudChjb25zdCBzdGQ6OnN0cmluZyYgYXJnLCBjbTo6c3RyaW5nX3ZpZXcgdmFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFyZzIgPSBudWxscHRyKTsKIAogICAvKiogT3V0cHV0IGVycm9ycyBmcm9tIGEgdGVzdCAqLwogICB2b2lkIE91dHB1dFRlc3RFcnJvcnMoc3RkOjp2ZWN0b3I8Y2hhcj4gY29uc3QmIHByb2Nlc3Nfb3V0cHV0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNhY2hlTWFuYWdlci5jeHggYi9Tb3VyY2UvY21DYWNoZU1hbmFnZXIuY3h4CmluZGV4IGQ2Mjc0NjUuLjk1Njg2ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNhY2hlTWFuYWdlci5jeHgKKysrIGIvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmN4eApAQCAtMTksMTIgKzE5LDYgQEAKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21WZXJzaW9uLmgiCiAKLWNtQ2FjaGVNYW5hZ2VyOjpjbUNhY2hlTWFuYWdlcigpCi17Ci0gIHRoaXMtPkNhY2hlTWFqb3JWZXJzaW9uID0gMDsKLSAgdGhpcy0+Q2FjaGVNaW5vclZlcnNpb24gPSAwOwotfQotCiB2b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDbGVhbkNNYWtlRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpCiB7CiAgIHN0ZDo6c3RyaW5nIGdsb2IgPSBjbVN0ckNhdChwYXRoLCAiL0NNYWtlRmlsZXMvKi5jbWFrZSIpOwpAQCAtNzcsNyArNzEsNyBAQAogICAgIH0KICAgICB3aGlsZSAocmVhbGJ1ZmZlclswXSA9PSAnLycgJiYgcmVhbGJ1ZmZlclsxXSA9PSAnLycpIHsKICAgICAgIGlmICgocmVhbGJ1ZmZlclsyXSA9PSAnXFwnKSAmJiAocmVhbGJ1ZmZlclszXSA9PSAnbicpKSB7Ci0gICAgICAgIGhlbHBTdHJpbmcgKz0gIlxuIjsKKyAgICAgICAgaGVscFN0cmluZyArPSAnXG4nOwogICAgICAgICBoZWxwU3RyaW5nICs9ICZyZWFsYnVmZmVyWzRdOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgaGVscFN0cmluZyArPSAmcmVhbGJ1ZmZlclsyXTsKQEAgLTExNywyMCArMTExLDIwIEBACiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlcnJvcjsKLSAgICAgIGVycm9yIDw8ICJQYXJzZSBlcnJvciBpbiBjYWNoZSBmaWxlICIgPDwgY2FjaGVGaWxlOwotICAgICAgZXJyb3IgPDwgIiBvbiBsaW5lICIgPDwgbGluZW5vIDw8ICIuIE9mZmVuZGluZyBlbnRyeTogIiA8PCByZWFsYnVmZmVyOworICAgICAgZXJyb3IgPDwgIlBhcnNlIGVycm9yIGluIGNhY2hlIGZpbGUgIiA8PCBjYWNoZUZpbGUgPDwgIiBvbiBsaW5lICIKKyAgICAgICAgICAgIDw8IGxpbmVubyA8PCAiLiBPZmZlbmRpbmcgZW50cnk6ICIgPDwgcmVhbGJ1ZmZlcjsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGVycm9yLnN0cigpKTsKICAgICB9CiAgIH0KICAgdGhpcy0+Q2FjaGVNYWpvclZlcnNpb24gPSAwOwogICB0aGlzLT5DYWNoZU1pbm9yVmVyc2lvbiA9IDA7Ci0gIGlmIChjb25zdCBzdGQ6OnN0cmluZyogY21ham9yID0KKyAgaWYgKGNtUHJvcCBjbWFqb3IgPQogICAgICAgICB0aGlzLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0NBQ0hFX01BSk9SX1ZFUlNJT04iKSkgewogICAgIHVuc2lnbmVkIGludCB2ID0gMDsKICAgICBpZiAoc3NjYW5mKGNtYWpvci0+Y19zdHIoKSwgIiV1IiwgJnYpID09IDEpIHsKICAgICAgIHRoaXMtPkNhY2hlTWFqb3JWZXJzaW9uID0gdjsKICAgICB9Ci0gICAgaWYgKGNvbnN0IHN0ZDo6c3RyaW5nKiBjbWlub3IgPQorICAgIGlmIChjbVByb3AgY21pbm9yID0KICAgICAgICAgICB0aGlzLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0NBQ0hFX01JTk9SX1ZFUlNJT04iKSkgewogICAgICAgaWYgKHNzY2FuZihjbWlub3ItPmNfc3RyKCksICIldSIsICZ2KSA9PSAxKSB7CiAgICAgICAgIHRoaXMtPkNhY2hlTWlub3JWZXJzaW9uID0gdjsKQEAgLTE1MCw4ICsxNDQsNyBAQAogICB9CiAgIC8vIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgY2FjaGUgZGlyZWN0b3J5IGhhcyBub3QKICAgLy8gYmVlbiBtb3ZlZAotICBjb25zdCBzdGQ6OnN0cmluZyogb2xkRGlyID0KLSAgICB0aGlzLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0NBQ0hFRklMRV9ESVIiKTsKKyAgY21Qcm9wIG9sZERpciA9IHRoaXMtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfQ0FDSEVGSUxFX0RJUiIpOwogICBpZiAoaW50ZXJuYWwgJiYgb2xkRGlyKSB7CiAgICAgc3RkOjpzdHJpbmcgY3VycmVudGN3ZCA9IHBhdGg7CiAgICAgc3RkOjpzdHJpbmcgb2xkY3dkID0gKm9sZERpcjsKQEAgLTE1OSw4ICsxNTIsNyBAQAogICAgIGN1cnJlbnRjd2QgKz0gIi9DTWFrZUNhY2hlLnR4dCI7CiAgICAgb2xkY3dkICs9ICIvQ01ha2VDYWNoZS50eHQiOwogICAgIGlmICghY21TeXN0ZW1Ub29sczo6U2FtZUZpbGUob2xkY3dkLCBjdXJyZW50Y3dkKSkgewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcqIGRpciA9Ci0gICAgICAgIHRoaXMtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfQ0FDSEVGSUxFX0RJUiIpOworICAgICAgY21Qcm9wIGRpciA9IHRoaXMtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfQ0FDSEVGSUxFX0RJUiIpOwogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1lc3NhZ2U7CiAgICAgICBtZXNzYWdlIDw8ICJUaGUgY3VycmVudCBDTWFrZUNhY2hlLnR4dCBkaXJlY3RvcnkgIiA8PCBjdXJyZW50Y3dkCiAgICAgICAgICAgICAgIDw8ICIgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGRpcmVjdG9yeSAiIDw8IChkaXIgPyAqZGlyIDogIiIpCkBAIC0xNzQsMTAgKzE2NiwxMCBAQAogfQogCiBjb25zdCBjaGFyKiBjbUNhY2hlTWFuYWdlcjo6UGVyc2lzdGVudFByb3BlcnRpZXNbXSA9IHsgIkFEVkFOQ0VEIiwgIk1PRElGSUVEIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1RSSU5HUyIsIG51bGxwdHIgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1RSSU5HUyIgfTsKIAotYm9vbCBjbUNhY2hlTWFuYWdlcjo6UmVhZFByb3BlcnR5RW50cnkoc3RkOjpzdHJpbmcgY29uc3QmIGVudHJ5S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGVFbnRyeSYgZSkKK2Jvb2wgY21DYWNoZU1hbmFnZXI6OlJlYWRQcm9wZXJ0eUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBlbnRyeUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENhY2hlRW50cnkmIGUpCiB7CiAgIC8vIEFsbCBwcm9wZXJ0eSBlbnRyaWVzIGFyZSBpbnRlcm5hbC4KICAgaWYgKGUuVHlwZSAhPSBjbVN0YXRlRW51bXM6OklOVEVSTkFMKSB7CkBAIC0xODUsMjAgKzE3NywxOCBAQAogICB9CiAKICAgY29uc3QgY2hhciogZW5kID0gZW50cnlLZXkuY19zdHIoKSArIGVudHJ5S2V5LnNpemUoKTsKLSAgZm9yIChjb25zdCBjaGFyKiogcCA9IGNtQ2FjaGVNYW5hZ2VyOjpQZXJzaXN0ZW50UHJvcGVydGllczsgKnA7ICsrcCkgewotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcGxlbiA9IHN0cmxlbigqcCkgKyAxOworICBmb3IgKGNvbnN0IGNoYXIqIHAgOiBjbUNhY2hlTWFuYWdlcjo6UGVyc2lzdGVudFByb3BlcnRpZXMpIHsKKyAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBsZW4gPSBzdHJsZW4ocCkgKyAxOwogICAgIGlmIChlbnRyeUtleS5zaXplKCkgPiBwbGVuICYmICooZW5kIC0gcGxlbikgPT0gJy0nICYmCi0gICAgICAgIHN0cmNtcChlbmQgLSBwbGVuICsgMSwgKnApID09IDApIHsKKyAgICAgICAgc3RyY21wKGVuZCAtIHBsZW4gKyAxLCBwKSA9PSAwKSB7CiAgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBlbnRyeUtleS5zdWJzdHIoMCwgZW50cnlLZXkuc2l6ZSgpIC0gcGxlbik7Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpdCA9IHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpOwotICAgICAgaWYgKGl0LklzQXRFbmQoKSkgeworICAgICAgaWYgKGF1dG8gZW50cnkgPSB0aGlzLT5HZXRDYWNoZUVudHJ5KGtleSkpIHsKKyAgICAgICAgLy8gU3RvcmUgdGhpcyBwcm9wZXJ0eSBvbiBpdHMgZW50cnkuCisgICAgICAgIGVudHJ5LT5TZXRQcm9wZXJ0eShwLCBlLlZhbHVlLmNfc3RyKCkpOworICAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ3JlYXRlIGFuIGVudHJ5IGFuZCBzdG9yZSB0aGUgcHJvcGVydHkuCiAgICAgICAgIENhY2hlRW50cnkmIG5lID0gdGhpcy0+Q2FjaGVba2V5XTsKLSAgICAgICAgbmUuVHlwZSA9IGNtU3RhdGVFbnVtczo6VU5JTklUSUFMSVpFRDsKLSAgICAgICAgbmUuU2V0UHJvcGVydHkoKnAsIGUuVmFsdWUuY19zdHIoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBTdG9yZSB0aGlzIHByb3BlcnR5IG9uIGl0cyBlbnRyeS4KLSAgICAgICAgaXQuU2V0UHJvcGVydHkoKnAsIGUuVmFsdWUuY19zdHIoKSk7CisgICAgICAgIG5lLlNldFByb3BlcnR5KHAsIGUuVmFsdWUuY19zdHIoKSk7CiAgICAgICB9CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMDYsMjEgKzE5NiwyMyBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgY21DYWNoZU1hbmFnZXI6OldyaXRlUHJvcGVydHlFbnRyaWVzKHN0ZDo6b3N0cmVhbSYgb3MsIENhY2hlSXRlcmF0b3IgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIpCit2b2lkIGNtQ2FjaGVNYW5hZ2VyOjpXcml0ZVByb3BlcnR5RW50cmllcyhzdGQ6Om9zdHJlYW0mIG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGVudHJ5S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSYgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIpIGNvbnN0CiB7Ci0gIGZvciAoY29uc3QgY2hhcioqIHAgPSBjbUNhY2hlTWFuYWdlcjo6UGVyc2lzdGVudFByb3BlcnRpZXM7ICpwOyArK3ApIHsKLSAgICBpZiAoY29uc3QgY2hhciogdmFsdWUgPSBpLkdldFByb3BlcnR5KCpwKSkgeworICBmb3IgKGNvbnN0IGNoYXIqIHAgOiBjbUNhY2hlTWFuYWdlcjo6UGVyc2lzdGVudFByb3BlcnRpZXMpIHsKKyAgICBpZiAoY21Qcm9wIHZhbHVlID0gZS5HZXRQcm9wZXJ0eShwKSkgewogICAgICAgc3RkOjpzdHJpbmcgaGVscHN0cmluZyA9Ci0gICAgICAgIGNtU3RyQ2F0KCpwLCAiIHByb3BlcnR5IGZvciB2YXJpYWJsZTogIiwgaS5HZXROYW1lKCkpOworICAgICAgICBjbVN0ckNhdChwLCAiIHByb3BlcnR5IGZvciB2YXJpYWJsZTogIiwgZW50cnlLZXkpOwogICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcob3MsIGhlbHBzdHJpbmcpOwogCi0gICAgICBzdGQ6OnN0cmluZyBrZXkgPSBjbVN0ckNhdChpLkdldE5hbWUoKSwgJy0nLCAqcCk7CisgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBjbVN0ckNhdChlbnRyeUtleSwgJy0nLCBwKTsKICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRLZXkob3MsIGtleSk7CiAgICAgICBvcyA8PCAiOklOVEVSTkFMPSI7Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0VmFsdWUob3MsIHZhbHVlKTsKLSAgICAgIG9zIDw8ICJcbiI7Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0TmV3bGluZVRydW5jYXRpb25XYXJuaW5nKG9zLCBrZXksIHZhbHVlLAorICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dFZhbHVlKG9zLCAqdmFsdWUpOworICAgICAgb3MgPDwgJ1xuJzsKKyAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXROZXdsaW5lVHJ1bmNhdGlvbldhcm5pbmcob3MsIGtleSwgKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIpOwogICAgIH0KICAgfQpAQCAtMjcwLDMxICsyNjIsMjkgQEAKIAogICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgIGZvdXQgPDwgIiMgVGhpcyBpcyB0aGUgQ01ha2VDYWNoZSBmaWxlLlxuIgotICAgICAgIDw8ICIjIEZvciBidWlsZCBpbiBkaXJlY3Rvcnk6ICIgPDwgY3VycmVudGN3ZCA8PCAiXG4iCi0gICAgICAgPDwgIiMgSXQgd2FzIGdlbmVyYXRlZCBieSBDTWFrZTogIgotICAgICAgIDw8IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAiIyBGb3IgYnVpbGQgaW4gZGlyZWN0b3J5OiAiIDw8IGN1cnJlbnRjd2QgPDwgIlxuIgorICAgICAgICAgICIjIEl0IHdhcyBnZW5lcmF0ZWQgYnkgQ01ha2U6ICIKKyAgICAgICA8PCBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKQorICAgICAgIDw8ICJcbiIKKyAgICAgICAgICAiIyBZb3UgY2FuIGVkaXQgdGhpcyBmaWxlIHRvIGNoYW5nZSB2YWx1ZXMgZm91bmQgYW5kIHVzZWQgYnkgY21ha2UuIgorICAgICAgICAgICJcbiIKKyAgICAgICAgICAiIyBJZiB5b3UgZG8gbm90IHdhbnQgdG8gY2hhbmdlIGFueSBvZiB0aGUgdmFsdWVzLCBzaW1wbHkgZXhpdCB0aGUgIgorICAgICAgICAgICJlZGl0b3IuXG4iCisgICAgICAgICAgIiMgSWYgeW91IGRvIHdhbnQgdG8gY2hhbmdlIGEgdmFsdWUsIHNpbXBseSBlZGl0LCBzYXZlLCBhbmQgZXhpdCAiCisgICAgICAgICAgInRoZSBlZGl0b3IuXG4iCisgICAgICAgICAgIiMgVGhlIHN5bnRheCBmb3IgdGhlIGZpbGUgaXMgYXMgZm9sbG93czpcbiIKKyAgICAgICAgICAiIyBLRVk6VFlQRT1WQUxVRVxuIgorICAgICAgICAgICIjIEtFWSBpcyB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlIGluIHRoZSBjYWNoZS5cbiIKKyAgICAgICAgICAiIyBUWVBFIGlzIGEgaGludCB0byBHVUlzIGZvciB0aGUgdHlwZSBvZiBWQUxVRSwgRE8gTk9UIEVESVQgVFlQRSEuIgorICAgICAgICAgICJcbiIKKyAgICAgICAgICAiIyBWQUxVRSBpcyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIEtFWS5cbiIKKyAgICAgICAgICAiXG4iCisgICAgICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgICAgICIjIEVYVEVSTkFMIGNhY2hlIGVudHJpZXNcbiIKKyAgICAgICAgICAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgICAgICAgIlxuIjsKICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAKLSAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwotICBmb3V0IDw8ICIjIFlvdSBjYW4gZWRpdCB0aGlzIGZpbGUgdG8gY2hhbmdlIHZhbHVlcyBmb3VuZCBhbmQgdXNlZCBieSBjbWFrZS4iCi0gICAgICAgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgSWYgeW91IGRvIG5vdCB3YW50IHRvIGNoYW5nZSBhbnkgb2YgdGhlIHZhbHVlcywgc2ltcGx5IGV4aXQgdGhlICIKLSAgICAgICAiZWRpdG9yLiIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgSWYgeW91IGRvIHdhbnQgdG8gY2hhbmdlIGEgdmFsdWUsIHNpbXBseSBlZGl0LCBzYXZlLCBhbmQgZXhpdCAiCi0gICAgICAgInRoZSBlZGl0b3IuIiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyBUaGUgc3ludGF4IGZvciB0aGUgZmlsZSBpcyBhcyBmb2xsb3dzOlxuIgotICAgICAgIDw8ICIjIEtFWTpUWVBFPVZBTFVFXG4iCi0gICAgICAgPDwgIiMgS0VZIGlzIHRoZSBuYW1lIG9mIGEgdmFyaWFibGUgaW4gdGhlIGNhY2hlLlxuIgotICAgICAgIDw8ICIjIFRZUEUgaXMgYSBoaW50IHRvIEdVSXMgZm9yIHRoZSB0eXBlIG9mIFZBTFVFLCBETyBOT1QgRURJVCAiCi0gICAgICAgIlRZUEUhLiIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgVkFMVUUgaXMgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBLRVkuXG5cbiI7Ci0gIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotCi0gIGZvdXQgPDwgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIjsKLSAgZm91dCA8PCAiIyBFWFRFUk5BTCBjYWNoZSBlbnRyaWVzXG4iOwotICBmb3V0IDw8ICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7Ci0gIGZvdXQgPDwgIlxuIjsKLQogICBmb3IgKGF1dG8gY29uc3QmIGkgOiB0aGlzLT5DYWNoZSkgewogICAgIENhY2hlRW50cnkgY29uc3QmIGNlID0gaS5zZWNvbmQ7CiAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0ID0gY2UuVHlwZTsKQEAgLTMwNSw0OSArMjk1LDQ4IEBACiAgICAgICAqLwogICAgIH0gZWxzZSBpZiAodCAhPSBjbVN0YXRlRW51bXM6OklOVEVSTkFMKSB7CiAgICAgICAvLyBGb3JtYXQgaXMga2V5OnR5cGU9dmFsdWUKLSAgICAgIGlmIChjb25zdCBjaGFyKiBoZWxwID0gY2UuR2V0UHJvcGVydHkoIkhFTFBTVFJJTkciKSkgewotICAgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0SGVscFN0cmluZyhmb3V0LCBoZWxwKTsKKyAgICAgIGlmIChjbVByb3AgaGVscCA9IGNlLkdldFByb3BlcnR5KCJIRUxQU1RSSU5HIikpIHsKKyAgICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcoZm91dCwgKmhlbHApOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dEhlbHBTdHJpbmcoZm91dCwgIk1pc3NpbmcgZGVzY3JpcHRpb24iKTsKICAgICAgIH0KICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRLZXkoZm91dCwgaS5maXJzdCk7Ci0gICAgICBmb3V0IDw8ICI6IiA8PCBjbVN0YXRlOjpDYWNoZUVudHJ5VHlwZVRvU3RyaW5nKHQpIDw8ICI9IjsKKyAgICAgIGZvdXQgPDwgJzonIDw8IGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodCkgPDwgJz0nOwogICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dFZhbHVlKGZvdXQsIGNlLlZhbHVlKTsKLSAgICAgIGZvdXQgPDwgIlxuIjsKKyAgICAgIGZvdXQgPDwgJ1xuJzsKICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXROZXdsaW5lVHJ1bmNhdGlvbldhcm5pbmcoZm91dCwgaS5maXJzdCwgY2UuVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlcik7Ci0gICAgICBmb3V0IDw8ICJcbiI7CisgICAgICBmb3V0IDw8ICdcbic7CiAgICAgfQogICB9CiAKLSAgZm91dCA8PCAiXG4iOwotICBmb3V0IDw8ICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7Ci0gIGZvdXQgPDwgIiMgSU5URVJOQUwgY2FjaGUgZW50cmllc1xuIjsKLSAgZm91dCA8PCAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iOwotICBmb3V0IDw8ICJcbiI7CisgIGZvdXQgPDwgIlxuIgorICAgICAgICAgICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICAgICAgICAiIyBJTlRFUk5BTCBjYWNoZSBlbnRyaWVzXG4iCisgICAgICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgICAgICJcbiI7CiAKLSAgZm9yIChjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpID0gdGhpcy0+TmV3SXRlcmF0b3IoKTsgIWkuSXNBdEVuZCgpOwotICAgICAgIGkuTmV4dCgpKSB7Ci0gICAgaWYgKCFpLkluaXRpYWxpemVkKCkpIHsKKyAgZm9yIChhdXRvIGNvbnN0JiBpIDogdGhpcy0+Q2FjaGUpIHsKKyAgICBpZiAoIWkuc2Vjb25kLkluaXRpYWxpemVkKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIHQgPSBpLkdldFR5cGUoKTsKLSAgICB0aGlzLT5Xcml0ZVByb3BlcnR5RW50cmllcyhmb3V0LCBpLCBtZXNzZW5nZXIpOworICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgdCA9IGkuc2Vjb25kLkdldFR5cGUoKTsKKyAgICB0aGlzLT5Xcml0ZVByb3BlcnR5RW50cmllcyhmb3V0LCBpLmZpcnN0LCBpLnNlY29uZCwgbWVzc2VuZ2VyKTsKICAgICBpZiAodCA9PSBjbVN0YXRlRW51bXM6OklOVEVSTkFMKSB7CiAgICAgICAvLyBGb3JtYXQgaXMga2V5OnR5cGU9dmFsdWUKLSAgICAgIGlmIChjb25zdCBjaGFyKiBoZWxwID0gaS5HZXRQcm9wZXJ0eSgiSEVMUFNUUklORyIpKSB7Ci0gICAgICAgIGNtQ2FjaGVNYW5hZ2VyOjpPdXRwdXRIZWxwU3RyaW5nKGZvdXQsIGhlbHApOworICAgICAgaWYgKGNtUHJvcCBoZWxwID0gaS5zZWNvbmQuR2V0UHJvcGVydHkoIkhFTFBTVFJJTkciKSkgeworICAgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0SGVscFN0cmluZyhmb3V0LCAqaGVscCk7CiAgICAgICB9Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0S2V5KGZvdXQsIGkuR2V0TmFtZSgpKTsKLSAgICAgIGZvdXQgPDwgIjoiIDw8IGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodCkgPDwgIj0iOwotICAgICAgY21DYWNoZU1hbmFnZXI6Ok91dHB1dFZhbHVlKGZvdXQsIGkuR2V0VmFsdWUoKSk7Ci0gICAgICBmb3V0IDw8ICJcbiI7Ci0gICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0TmV3bGluZVRydW5jYXRpb25XYXJuaW5nKGZvdXQsIGkuR2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLkdldFZhbHVlKCksIG1lc3Nlbmdlcik7CisgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0S2V5KGZvdXQsIGkuZmlyc3QpOworICAgICAgZm91dCA8PCAnOicgPDwgY21TdGF0ZTo6Q2FjaGVFbnRyeVR5cGVUb1N0cmluZyh0KSA8PCAnPSc7CisgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0VmFsdWUoZm91dCwgaS5zZWNvbmQuR2V0VmFsdWUoKSk7CisgICAgICBmb3V0IDw8ICdcbic7CisgICAgICBjbUNhY2hlTWFuYWdlcjo6T3V0cHV0TmV3bGluZVRydW5jYXRpb25XYXJuaW5nKAorICAgICAgICBmb3V0LCBpLmZpcnN0LCBpLnNlY29uZC5HZXRWYWx1ZSgpLCBtZXNzZW5nZXIpOwogICAgIH0KICAgfQotICBmb3V0IDw8ICJcbiI7CisgIGZvdXQgPDwgJ1xuJzsKICAgZm91dC5DbG9zZSgpOwogICBzdGQ6OnN0cmluZyBjaGVja0NhY2hlRmlsZSA9IGNtU3RyQ2F0KHBhdGgsICIvQ01ha2VGaWxlcyIpOwogICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KGNoZWNrQ2FjaGVGaWxlKTsKQEAgLTM4NSw3ICszNzQsOSBAQAogewogICAvLyBzdXBwb3J0IDogaW4ga2V5IG5hbWUgYnkgZG91YmxlIHF1b3RpbmcKICAgY29uc3QgY2hhciogcSA9Ci0gICAgKGtleS5maW5kKCc6JykgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwga2V5LmZpbmQoIi8vIikgPT0gMCkgPyAiXCIiIDogIiI7CisgICAgKGtleS5maW5kKCc6JykgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgY21IYXNMaXRlcmFsUHJlZml4KGtleSwgIi8vIikpCisgICAgPyAiXCIiCisgICAgOiAiIjsKICAgZm91dCA8PCBxIDw8IGtleSA8PCBxOwogfQogCkBAIC00MzAsNyArNDIxLDcgQEAKICAgICAgICAgZm91dCA8PCAiXFxuIjsKICAgICAgIH0KICAgICAgIG9uZUxpbmUgPSBoZWxwU3RyaW5nLnN1YnN0cihwb3MsIGkgLSBwb3MpOwotICAgICAgZm91dCA8PCBvbmVMaW5lIDw8ICJcbiI7CisgICAgICBmb3V0IDw8IG9uZUxpbmUgPDwgJ1xuJzsKICAgICAgIHBvcyA9IGk7CiAgICAgfQogICB9CkBAIC00NTIsNyArNDQzLDcgQEAKICAgICAgICAgZm91dCA8PCAiXFxuIjsKICAgICAgIH0KICAgICAgIG9uZUxpbmUgPSBtZXNzYWdlLnN1YnN0cihwb3MsIGkgLSBwb3MpOwotICAgICAgZm91dCA8PCBvbmVMaW5lIDw8ICJcbiI7CisgICAgICBmb3V0IDw8IG9uZUxpbmUgPDwgJ1xuJzsKICAgICAgIHBvcyA9IGk7CiAgICAgfQogICB9CkBAIC00ODEsMTAgKzQ3Miw3IEBACiAKIHZvaWQgY21DYWNoZU1hbmFnZXI6OlJlbW92ZUNhY2hlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSkKIHsKLSAgYXV0byBpID0gdGhpcy0+Q2FjaGUuZmluZChrZXkpOwotICBpZiAoaSAhPSB0aGlzLT5DYWNoZS5lbmQoKSkgewotICAgIHRoaXMtPkNhY2hlLmVyYXNlKGkpOwotICB9CisgIHRoaXMtPkNhY2hlLmVyYXNlKGtleSk7CiB9CiAKIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUVudHJ5KiBjbUNhY2hlTWFuYWdlcjo6R2V0Q2FjaGVFbnRyeSgKQEAgLTQ5NywzNCArNDg1LDM5IEBACiAgIHJldHVybiBudWxscHRyOwogfQogCi1jbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBjbUNhY2hlTWFuYWdlcjo6R2V0Q2FjaGVJdGVyYXRvcihjb25zdCBjaGFyKiBrZXkpCi17Ci0gIHJldHVybiB7ICp0aGlzLCBrZXkgfTsKLX0KLQotY29uc3Qgc3RkOjpzdHJpbmcqIGNtQ2FjaGVNYW5hZ2VyOjpHZXRJbml0aWFsaXplZENhY2hlVmFsdWUoCitjb25zdCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeSogY21DYWNoZU1hbmFnZXI6OkdldENhY2hlRW50cnkoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0CiB7CiAgIGF1dG8gaSA9IHRoaXMtPkNhY2hlLmZpbmQoa2V5KTsKLSAgaWYgKGkgIT0gdGhpcy0+Q2FjaGUuZW5kKCkgJiYgaS0+c2Vjb25kLkluaXRpYWxpemVkKSB7Ci0gICAgcmV0dXJuICZpLT5zZWNvbmQuVmFsdWU7CisgIGlmIChpICE9IHRoaXMtPkNhY2hlLmVuZCgpKSB7CisgICAgcmV0dXJuICZpLT5zZWNvbmQ7CisgIH0KKyAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2NtUHJvcCBjbUNhY2hlTWFuYWdlcjo6R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0Cit7CisgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgaWYgKGVudHJ5LT5Jbml0aWFsaXplZCkgeworICAgICAgcmV0dXJuICZlbnRyeS0+R2V0VmFsdWUoKTsKKyAgICB9CiAgIH0KICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgY21DYWNoZU1hbmFnZXI6OlByaW50Q2FjaGUoc3RkOjpvc3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gIG91dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgPDwgc3RkOjplbmRsOwotICBvdXQgPDwgIkNNYWtlQ2FjaGUgQ29udGVudHM6IiA8PCBzdGQ6OmVuZGw7CisgIG91dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgorICAgICAgICAgIkNNYWtlQ2FjaGUgQ29udGVudHM6XG4iOwogICBmb3IgKGF1dG8gY29uc3QmIGkgOiB0aGlzLT5DYWNoZSkgewogICAgIGlmIChpLnNlY29uZC5UeXBlICE9IGNtU3RhdGVFbnVtczo6SU5URVJOQUwpIHsKLSAgICAgIG91dCA8PCBpLmZpcnN0IDw8ICIgPSAiIDw8IGkuc2Vjb25kLlZhbHVlIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIG91dCA8PCBpLmZpcnN0IDw8ICIgPSAiIDw8IGkuc2Vjb25kLlZhbHVlIDw8ICdcbic7CiAgICAgfQogICB9Ci0gIG91dCA8PCAiXG5cbiI7Ci0gIG91dCA8PCAiVG8gY2hhbmdlIHZhbHVlcyBpbiB0aGUgQ01ha2VDYWNoZSwgIiA8PCBzdGQ6OmVuZGwKLSAgICAgIDw8ICJlZGl0IENNYWtlQ2FjaGUudHh0IGluIHlvdXIgb3V0cHV0IGRpcmVjdG9yeS5cbiI7Ci0gIG91dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgPDwgc3RkOjplbmRsOworICBvdXQgPDwgIlxuXG4iCisgICAgICAgICAiVG8gY2hhbmdlIHZhbHVlcyBpbiB0aGUgQ01ha2VDYWNoZSwgXG4iCisgICAgICAgICAiZWRpdCBDTWFrZUNhY2hlLnR4dCBpbiB5b3VyIG91dHB1dCBkaXJlY3RvcnkuXG4iCisgICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsKIH0KIAogdm9pZCBjbUNhY2hlTWFuYWdlcjo6QWRkQ2FjaGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSwKQEAgLTUzMiwxMiArNTI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlKQogewogICBDYWNoZUVudHJ5JiBlID0gdGhpcy0+Q2FjaGVba2V5XTsKLSAgaWYgKHZhbHVlKSB7Ci0gICAgZS5WYWx1ZSA9IHZhbHVlOwotICAgIGUuSW5pdGlhbGl6ZWQgPSB0cnVlOwotICB9IGVsc2UgewotICAgIGUuVmFsdWUuY2xlYXIoKTsKLSAgfQorICBlLlNldFZhbHVlKHZhbHVlKTsKICAgZS5UeXBlID0gdHlwZTsKICAgLy8gbWFrZSBzdXJlIHdlIG9ubHkgdXNlIHVuaXggc3R5bGUgcGF0aHMKICAgaWYgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpGSUxFUEFUSCB8fCB0eXBlID09IGNtU3RhdGVFbnVtczo6UEFUSCkgewpAQCAtNTYxLDcwICs1NDksMzggQEAKICAgICAgICAgICAgICAgICAgIDogIihUaGlzIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQpIik7CiB9CiAKLWJvb2wgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OklzQXRFbmQoKSBjb25zdAordm9pZCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeTo6U2V0VmFsdWUoY29uc3QgY2hhciogdmFsdWUpCiB7Ci0gIHJldHVybiB0aGlzLT5Qb3NpdGlvbiA9PSB0aGlzLT5Db250YWluZXIuQ2FjaGUuZW5kKCk7Ci19Ci0KLXZvaWQgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OkJlZ2luKCkKLXsKLSAgdGhpcy0+UG9zaXRpb24gPSB0aGlzLT5Db250YWluZXIuQ2FjaGUuYmVnaW4oKTsKLX0KLQotYm9vbCBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvcjo6RmluZChjb25zdCBzdGQ6OnN0cmluZyYga2V5KQotewotICB0aGlzLT5Qb3NpdGlvbiA9IHRoaXMtPkNvbnRhaW5lci5DYWNoZS5maW5kKGtleSk7Ci0gIHJldHVybiAhdGhpcy0+SXNBdEVuZCgpOwotfQotCi12b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpOZXh0KCkKLXsKLSAgaWYgKCF0aGlzLT5Jc0F0RW5kKCkpIHsKLSAgICArK3RoaXMtPlBvc2l0aW9uOwotICB9Ci19Ci0KLXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvcjo6R2V0UHJvcGVydHlMaXN0KCkgY29uc3QKLXsKLSAgcmV0dXJuIHRoaXMtPkdldEVudHJ5KCkuR2V0UHJvcGVydHlMaXN0KCk7Ci19Ci0KLXZvaWQgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OlNldFZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKQotewotICBpZiAodGhpcy0+SXNBdEVuZCgpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIENhY2hlRW50cnkqIGVudHJ5ID0gJnRoaXMtPkdldEVudHJ5KCk7CiAgIGlmICh2YWx1ZSkgewotICAgIGVudHJ5LT5WYWx1ZSA9IHZhbHVlOwotICAgIGVudHJ5LT5Jbml0aWFsaXplZCA9IHRydWU7CisgICAgdGhpcy0+VmFsdWUgPSB2YWx1ZTsKKyAgICB0aGlzLT5Jbml0aWFsaXplZCA9IHRydWU7CiAgIH0gZWxzZSB7Ci0gICAgZW50cnktPlZhbHVlLmNsZWFyKCk7CisgICAgdGhpcy0+VmFsdWUuY2xlYXIoKTsKICAgfQogfQogCi1ib29sIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpHZXRWYWx1ZUFzQm9vbCgpIGNvbnN0Ci17Ci0gIHJldHVybiBjbUlzT24odGhpcy0+R2V0RW50cnkoKS5WYWx1ZSk7Ci19Ci0KIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeTo6R2V0UHJvcGVydHlMaXN0KCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPlByb3BlcnRpZXMuR2V0S2V5cygpOwogfQogCi1jb25zdCBjaGFyKiBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVFbnRyeTo6R2V0UHJvcGVydHkoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAorY21Qcm9wIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUVudHJ5OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKICAgaWYgKHByb3AgPT0gIlRZUEUiKSB7Ci0gICAgcmV0dXJuIGNtU3RhdGU6OkNhY2hlRW50cnlUeXBlVG9TdHJpbmcodGhpcy0+VHlwZSk7CisgICAgcmV0dXJuICZjbVN0YXRlOjpDYWNoZUVudHJ5VHlwZVRvU3RyaW5nKHRoaXMtPlR5cGUpOwogICB9CiAgIGlmIChwcm9wID09ICJWQUxVRSIpIHsKLSAgICByZXR1cm4gdGhpcy0+VmFsdWUuY19zdHIoKTsKKyAgICByZXR1cm4gJnRoaXMtPlZhbHVlOwogICB9CiAgIHJldHVybiB0aGlzLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CiB9CiAKK2Jvb2wgY21DYWNoZU1hbmFnZXI6OkNhY2hlRW50cnk6OkdldFByb3BlcnR5QXNCb29sKAorICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKK3sKKyAgcmV0dXJuIGNtSXNPbih0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKSk7Cit9CisKIHZvaWQgY21DYWNoZU1hbmFnZXI6OkNhY2hlRW50cnk6OlNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWUpCiB7CkBAIC02MzcsMTUgKzU5MywyMSBAQAogICB9CiB9CiAKK3ZvaWQgY21DYWNoZU1hbmFnZXI6OkNhY2hlRW50cnk6OlNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwLCBib29sIHYpCit7CisgIHRoaXMtPlNldFByb3BlcnR5KHAsIHYgPyAiT04iIDogIk9GRiIpOworfQorCiB2b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUVudHJ5OjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZykKIHsKICAgaWYgKHByb3AgPT0gIlRZUEUiKSB7Ci0gICAgdGhpcy0+VHlwZSA9IGNtU3RhdGU6OlN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUodmFsdWUgPyB2YWx1ZSA6ICJTVFJJTkciKTsKKyAgICB0aGlzLT5UeXBlID0KKyAgICAgIGNtU3RhdGU6OlN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUoIXZhbHVlLmVtcHR5KCkgPyB2YWx1ZSA6ICJTVFJJTkciKTsKICAgfSBlbHNlIGlmIChwcm9wID09ICJWQUxVRSIpIHsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgIGlmICghdGhpcy0+VmFsdWUuZW1wdHkoKSAmJiAqdmFsdWUgJiYgIWFzU3RyaW5nKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CisgICAgICBpZiAoIXRoaXMtPlZhbHVlLmVtcHR5KCkgJiYgIWFzU3RyaW5nKSB7CiAgICAgICAgIHRoaXMtPlZhbHVlICs9ICI7IjsKICAgICAgIH0KICAgICAgIHRoaXMtPlZhbHVlICs9IHZhbHVlOwpAQCAtNjU0LDQ5ICs2MTYsMyBAQAogICAgIHRoaXMtPlByb3BlcnRpZXMuQXBwZW5kUHJvcGVydHkocHJvcCwgdmFsdWUsIGFzU3RyaW5nKTsKICAgfQogfQotCi1jb25zdCBjaGFyKiBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvcjo6R2V0UHJvcGVydHkoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAotewotICBpZiAoIXRoaXMtPklzQXRFbmQoKSkgewotICAgIHJldHVybiB0aGlzLT5HZXRFbnRyeSgpLkdldFByb3BlcnR5KHByb3ApOwotICB9Ci0gIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHYpCi17Ci0gIGlmICghdGhpcy0+SXNBdEVuZCgpKSB7Ci0gICAgdGhpcy0+R2V0RW50cnkoKS5TZXRQcm9wZXJ0eShwLCB2KTsKLSAgfQotfQotCi12b2lkIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nKQotewotICBpZiAoIXRoaXMtPklzQXRFbmQoKSkgewotICAgIHRoaXMtPkdldEVudHJ5KCkuQXBwZW5kUHJvcGVydHkocCwgdiwgYXNTdHJpbmcpOwotICB9Ci19Ci0KLWJvb2wgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OkdldFByb3BlcnR5QXNCb29sKAotICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKLXsKLSAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCkpIHsKLSAgICByZXR1cm4gY21Jc09uKHZhbHVlKTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3I6OlNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwLCBib29sIHYpCi17Ci0gIHRoaXMtPlNldFByb3BlcnR5KHAsIHYgPyAiT04iIDogIk9GRiIpOwotfQotCi1ib29sIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yOjpQcm9wZXJ0eUV4aXN0cygKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0Ci17Ci0gIHJldHVybiB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKSAhPSBudWxscHRyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ2FjaGVNYW5hZ2VyLmggYi9Tb3VyY2UvY21DYWNoZU1hbmFnZXIuaAppbmRleCBmYWE2MGM1Li5mMDM2MjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21DYWNoZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvY21DYWNoZU1hbmFnZXIuaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUHJvcGVydHlNYXAuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKIApAQCAtMjUsNzcgKzI2LDMzIEBACiAgKi8KIGNsYXNzIGNtQ2FjaGVNYW5hZ2VyCiB7Ci1wdWJsaWM6Ci0gIGNtQ2FjaGVNYW5hZ2VyKCk7Ci0gIGNsYXNzIENhY2hlSXRlcmF0b3I7Ci0gIGZyaWVuZCBjbGFzcyBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvcjsKLQotcHJpdmF0ZToKLSAgc3RydWN0IENhY2hlRW50cnkKKyAgY2xhc3MgQ2FjaGVFbnRyeQogICB7CisgICAgZnJpZW5kIGNsYXNzIGNtQ2FjaGVNYW5hZ2VyOworCisgIHB1YmxpYzoKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgR2V0VmFsdWUoKSBjb25zdCB7IHJldHVybiB0aGlzLT5WYWx1ZTsgfQorICAgIHZvaWQgU2V0VmFsdWUoY29uc3QgY2hhciopOworCisgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSBHZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VHlwZTsgfQorICAgIHZvaWQgU2V0VHlwZShjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIHR5KSB7IHRoaXMtPlR5cGUgPSB0eTsgfQorCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldFByb3BlcnR5TGlzdCgpIGNvbnN0OworICAgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHkpIGNvbnN0OworICAgIGJvb2wgR2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5KSBjb25zdDsKKyAgICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwgY29uc3QgY2hhciogdmFsdWUpOworICAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBib29sIHZhbHVlKTsKKyAgICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKKworICBwcml2YXRlOgogICAgIHN0ZDo6c3RyaW5nIFZhbHVlOwogICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgVHlwZSA9IGNtU3RhdGVFbnVtczo6VU5JTklUSUFMSVpFRDsKICAgICBjbVByb3BlcnR5TWFwIFByb3BlcnRpZXM7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldFByb3BlcnR5TGlzdCgpIGNvbnN0OwotICAgIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3Q7Ci0gICAgdm9pZCBTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwgY29uc3QgY2hhciogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nID0gZmFsc2UpOwogICAgIGJvb2wgSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgfTsKIAogcHVibGljOgotICBjbGFzcyBDYWNoZUl0ZXJhdG9yCi0gIHsKLSAgcHVibGljOgotICAgIHZvaWQgQmVnaW4oKTsKLSAgICBib29sIEZpbmQoY29uc3Qgc3RkOjpzdHJpbmcmKTsKLSAgICBib29sIElzQXRFbmQoKSBjb25zdDsKLSAgICB2b2lkIE5leHQoKTsKLSAgICBzdGQ6OnN0cmluZyBHZXROYW1lKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+UG9zaXRpb24tPmZpcnN0OyB9Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldFByb3BlcnR5TGlzdCgpIGNvbnN0OwotICAgIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3Q7Ci0gICAgYm9vbCBHZXRQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgUHJvcGVydHlFeGlzdHMoY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdDsKLSAgICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwgY29uc3QgY2hhciogdmFsdWUpOwotICAgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBjaGFyKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7Ci0gICAgdm9pZCBTZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGJvb2wgdmFsdWUpOwotICAgIGNvbnN0IGNoYXIqIEdldFZhbHVlKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+R2V0RW50cnkoKS5WYWx1ZS5jX3N0cigpOyB9Ci0gICAgYm9vbCBHZXRWYWx1ZUFzQm9vbCgpIGNvbnN0OwotICAgIHZvaWQgU2V0VmFsdWUoY29uc3QgY2hhciopOwotICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgR2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgcmV0dXJuIHRoaXMtPkdldEVudHJ5KCkuVHlwZTsKLSAgICB9Ci0gICAgdm9pZCBTZXRUeXBlKGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgdHkpCi0gICAgewotICAgICAgdGhpcy0+R2V0RW50cnkoKS5UeXBlID0gdHk7Ci0gICAgfQotICAgIGJvb2wgSW5pdGlhbGl6ZWQoKSB7IHJldHVybiB0aGlzLT5HZXRFbnRyeSgpLkluaXRpYWxpemVkOyB9Ci0gICAgY21DYWNoZU1hbmFnZXImIENvbnRhaW5lcjsKLSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgQ2FjaGVFbnRyeT46Oml0ZXJhdG9yIFBvc2l0aW9uOwotICAgIENhY2hlSXRlcmF0b3IoY21DYWNoZU1hbmFnZXImIGNtKQotICAgICAgOiBDb250YWluZXIoY20pCi0gICAgewotICAgICAgdGhpcy0+QmVnaW4oKTsKLSAgICB9Ci0gICAgQ2FjaGVJdGVyYXRvcihjbUNhY2hlTWFuYWdlciYgY20sIGNvbnN0IGNoYXIqIGtleSkKLSAgICAgIDogQ29udGFpbmVyKGNtKQotICAgIHsKLSAgICAgIGlmIChrZXkpIHsKLSAgICAgICAgdGhpcy0+RmluZChrZXkpOwotICAgICAgfQotICAgIH0KLQotICBwcml2YXRlOgotICAgIENhY2hlRW50cnkgY29uc3QmIEdldEVudHJ5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+UG9zaXRpb24tPnNlY29uZDsgfQotICAgIENhY2hlRW50cnkmIEdldEVudHJ5KCkgeyByZXR1cm4gdGhpcy0+UG9zaXRpb24tPnNlY29uZDsgfQotICB9OwotCi0gIC8vISByZXR1cm4gYW4gaXRlcmF0b3IgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjYWNoZSBtYXAKLSAgY21DYWNoZU1hbmFnZXI6OkNhY2hlSXRlcmF0b3IgTmV3SXRlcmF0b3IoKSB7IHJldHVybiB7ICp0aGlzIH07IH0KLQogICAvLyEgTG9hZCBhIGNhY2hlIGZvciBnaXZlbiBtYWtlZmlsZS4gIExvYWRzIGZyb20gcGF0aC9DTWFrZUNhY2hlLnR4dC4KICAgYm9vbCBMb2FkQ2FjaGUoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgsIGJvb2wgaW50ZXJuYWwsCiAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgZXhjbHVkZXMsCkBAIC0xMTAsNjYgKzY3LDgyIEBACiAgIC8vISBQcmludCB0aGUgY2FjaGUgdG8gYSBzdHJlYW0KICAgdm9pZCBQcmludENhY2hlKHN0ZDo6b3N0cmVhbSYpIGNvbnN0OwogCi0gIC8vISBHZXQgdGhlIGl0ZXJhdG9yIGZvciBhbiBlbnRyeSB3aXRoIGEgZ2l2ZW4ga2V5LgotICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBHZXRDYWNoZUl0ZXJhdG9yKGNvbnN0IGNoYXIqIGtleSA9IG51bGxwdHIpOwotCi0gIC8vISBSZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgY2FjaGUKLSAgdm9pZCBSZW1vdmVDYWNoZUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpOwotCi0gIC8vISBHZXQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjYWNoZQotICBpbnQgR2V0U2l6ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odGhpcy0+Q2FjaGUuc2l6ZSgpKTsgfQotCiAgIC8vISBHZXQgYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZSBnaXZlbiBhIGtleQotICBjb25zdCBzdGQ6OnN0cmluZyogR2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0OworICBjbVByb3AgR2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0OwogCi0gIGNvbnN0IGNoYXIqIEdldENhY2hlRW50cnlWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYga2V5KQorICBjbVByb3AgR2V0Q2FjaGVFbnRyeVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIGNvbnN0CiAgIHsKLSAgICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpdCA9IHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpOwotICAgIGlmIChpdC5Jc0F0RW5kKCkpIHsKLSAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICByZXR1cm4gJmVudHJ5LT5HZXRWYWx1ZSgpOwogICAgIH0KLSAgICByZXR1cm4gaXQuR2V0VmFsdWUoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogCi0gIGNvbnN0IGNoYXIqIEdldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BOYW1lKQorICB2b2lkIFNldENhY2hlRW50cnlWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5LCBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpCiAgIHsKLSAgICByZXR1cm4gdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSkuR2V0UHJvcGVydHkocHJvcE5hbWUpOworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICBlbnRyeS0+U2V0VmFsdWUodmFsdWUuY19zdHIoKSk7CisgICAgfQogICB9CiAKLSAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSBHZXRDYWNoZUVudHJ5VHlwZShzdGQ6OnN0cmluZyBjb25zdCYga2V5KQorICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIEdldENhY2hlRW50cnlUeXBlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0CiAgIHsKLSAgICByZXR1cm4gdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSkuR2V0VHlwZSgpOworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICByZXR1cm4gZW50cnktPkdldFR5cGUoKTsKKyAgICB9CisgICAgcmV0dXJuIGNtU3RhdGVFbnVtczo6VU5JTklUSUFMSVpFRDsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRDYWNoZUVudHJ5UHJvcGVydHlMaXN0KAorICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0CisgIHsKKyAgICBpZiAoYXV0byBlbnRyeSA9IHRoaXMtPkdldENhY2hlRW50cnkoa2V5KSkgeworICAgICAgcmV0dXJuIGVudHJ5LT5HZXRQcm9wZXJ0eUxpc3QoKTsKKyAgICB9CisgICAgcmV0dXJuIHt9OworICB9CisKKyAgY21Qcm9wIEdldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wTmFtZSkgY29uc3QKKyAgeworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICByZXR1cm4gZW50cnktPkdldFByb3BlcnR5KHByb3BOYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KIAogICBib29sIEdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbChzdGQ6OnN0cmluZyBjb25zdCYga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wTmFtZSkgY29uc3QKICAgewotICAgIHJldHVybiB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleS5jX3N0cigpKS5HZXRQcm9wZXJ0eUFzQm9vbChwcm9wTmFtZSk7CisgICAgaWYgKGF1dG8gZW50cnkgPSB0aGlzLT5HZXRDYWNoZUVudHJ5KGtleSkpIHsKKyAgICAgIHJldHVybiBlbnRyeS0+R2V0UHJvcGVydHlBc0Jvb2wocHJvcE5hbWUpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICB2b2lkIFNldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSkKICAgewotICAgIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpLlNldFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZS5jX3N0cigpKTsKKyAgICBpZiAoYXV0byBlbnRyeSA9IHRoaXMtPkdldENhY2hlRW50cnkoa2V5KSkgeworICAgICAgZW50cnktPlNldFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZS5jX3N0cigpKTsKKyAgICB9CiAgIH0KIAogICB2b2lkIFNldENhY2hlRW50cnlCb29sUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wTmFtZSwgYm9vbCB2YWx1ZSkKICAgewotICAgIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpLlNldFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZSk7Ci0gIH0KLQotICB2b2lkIFNldENhY2hlRW50cnlWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5LCBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpCi0gIHsKLSAgICB0aGlzLT5HZXRDYWNoZUl0ZXJhdG9yKGtleS5jX3N0cigpKS5TZXRWYWx1ZSh2YWx1ZS5jX3N0cigpKTsKKyAgICBpZiAoYXV0byBlbnRyeSA9IHRoaXMtPkdldENhY2hlRW50cnkoa2V5KSkgeworICAgICAgZW50cnktPlNldFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZSk7CisgICAgfQogICB9CiAKICAgdm9pZCBSZW1vdmVDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BOYW1lKQogICB7Ci0gICAgdGhpcy0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSkuU2V0UHJvcGVydHkocHJvcE5hbWUsIG51bGxwdHIpOworICAgIGlmIChhdXRvIGVudHJ5ID0gdGhpcy0+R2V0Q2FjaGVFbnRyeShrZXkpKSB7CisgICAgICBlbnRyeS0+U2V0UHJvcGVydHkocHJvcE5hbWUsIG51bGxwdHIpOworICAgIH0KICAgfQogCiAgIHZvaWQgQXBwZW5kQ2FjaGVFbnRyeVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCkBAIC0xNzcsMTcgKzE1MCwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSkKICAgewotICAgIHRoaXMtPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpCi0gICAgICAuQXBwZW5kUHJvcGVydHkocHJvcE5hbWUsIHZhbHVlLmNfc3RyKCksIGFzU3RyaW5nKTsKKyAgICBpZiAoYXV0byBlbnRyeSA9IHRoaXMtPkdldENhY2hlRW50cnkoa2V5KSkgeworICAgICAgZW50cnktPkFwcGVuZFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZSwgYXNTdHJpbmcpOworICAgIH0KICAgfQogCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRDYWNoZUVudHJ5S2V5cygpCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRDYWNoZUVudHJ5S2V5cygpIGNvbnN0CiAgIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVmaW5pdGlvbnM7Ci0gICAgZGVmaW5pdGlvbnMucmVzZXJ2ZSh0aGlzLT5HZXRTaXplKCkpOwotICAgIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGNpdCA9IHRoaXMtPkdldENhY2hlSXRlcmF0b3IoKTsKLSAgICBmb3IgKGNpdC5CZWdpbigpOyAhY2l0LklzQXRFbmQoKTsgY2l0Lk5leHQoKSkgewotICAgICAgZGVmaW5pdGlvbnMucHVzaF9iYWNrKGNpdC5HZXROYW1lKCkpOworICAgIGRlZmluaXRpb25zLnJlc2VydmUodGhpcy0+Q2FjaGUuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGkgOiB0aGlzLT5DYWNoZSkgeworICAgICAgZGVmaW5pdGlvbnMucHVzaF9iYWNrKGkuZmlyc3QpOwogICAgIH0KICAgICByZXR1cm4gZGVmaW5pdGlvbnM7CiAgIH0KQEAgLTE5NiwyMyArMTY5LDIyIEBACiAgIHVuc2lnbmVkIGludCBHZXRDYWNoZU1ham9yVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkNhY2hlTWFqb3JWZXJzaW9uOyB9CiAgIHVuc2lnbmVkIGludCBHZXRDYWNoZU1pbm9yVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkNhY2hlTWlub3JWZXJzaW9uOyB9CiAKLXByb3RlY3RlZDoKICAgLy8hIEFkZCBhbiBlbnRyeSBpbnRvIHRoZSBjYWNoZQogICB2b2lkIEFkZENhY2hlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgY29uc3QgY2hhciogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBoZWxwU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlKTsKIAorICAvLyEgUmVtb3ZlIGFuIGVudHJ5IGZyb20gdGhlIGNhY2hlCisgIHZvaWQgUmVtb3ZlQ2FjaGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5KTsKKworcHJpdmF0ZToKICAgLy8hIEdldCBhIGNhY2hlIGVudHJ5IG9iamVjdCBmb3IgYSBrZXkKICAgQ2FjaGVFbnRyeSogR2V0Q2FjaGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5KTsKKyAgY29uc3QgQ2FjaGVFbnRyeSogR2V0Q2FjaGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5KSBjb25zdDsKKwogICAvLyEgQ2xlYW4gb3V0IHRoZSBDTWFrZUZpbGVzIGRpcmVjdG9yeSBpZiBubyBDTWFrZUNhY2hlLnR4dAogICB2b2lkIENsZWFuQ01ha2VGaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCk7CiAKLSAgLy8gQ2FjaGUgdmVyc2lvbiBpbmZvCi0gIHVuc2lnbmVkIGludCBDYWNoZU1ham9yVmVyc2lvbjsKLSAgdW5zaWduZWQgaW50IENhY2hlTWlub3JWZXJzaW9uOwotCi1wcml2YXRlOgotICB1c2luZyBDYWNoZUVudHJ5TWFwID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIENhY2hlRW50cnk+OwogICBzdGF0aWMgdm9pZCBPdXRwdXRIZWxwU3RyaW5nKHN0ZDo6b3N0cmVhbSYgZm91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgaGVscFN0cmluZyk7CiAgIHN0YXRpYyB2b2lkIE91dHB1dFdhcm5pbmdDb21tZW50KHN0ZDo6b3N0cmVhbSYgZm91dCwKQEAgLTIyOCwxNSArMjAwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpOwogCiAgIHN0YXRpYyBjb25zdCBjaGFyKiBQZXJzaXN0ZW50UHJvcGVydGllc1tdOwotICBib29sIFJlYWRQcm9wZXJ0eUVudHJ5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksIENhY2hlRW50cnkmIGUpOwotICB2b2lkIFdyaXRlUHJvcGVydHlFbnRyaWVzKHN0ZDo6b3N0cmVhbSYgb3MsIENhY2hlSXRlcmF0b3IgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyKTsKKyAgYm9vbCBSZWFkUHJvcGVydHlFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBjb25zdCBDYWNoZUVudHJ5JiBlKTsKKyAgdm9pZCBXcml0ZVByb3BlcnR5RW50cmllcyhzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBzdGQ6OnN0cmluZyYgZW50cnlLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2FjaGVFbnRyeSYgZSwgY21NZXNzZW5nZXIqIG1lc3NlbmdlcikgY29uc3Q7CiAKLSAgQ2FjaGVFbnRyeU1hcCBDYWNoZTsKLSAgLy8gT25seSBjbWFrZSBhbmQgY21TdGF0ZSBzaG91bGQgYmUgYWJsZSB0byBhZGQgY2FjaGUgdmFsdWVzCi0gIC8vIHRoZSBjb21tYW5kcyBzaG91bGQgbmV2ZXIgdXNlIHRoZSBjbUNhY2hlTWFuYWdlciBkaXJlY3RseQotICBmcmllbmQgY2xhc3MgY21TdGF0ZTsgLy8gYWxsb3cgYWNjZXNzIHRvIGFkZCBjYWNoZSB2YWx1ZXMKLSAgZnJpZW5kIGNsYXNzIGNtYWtlOyAgIC8vIGFsbG93IGFjY2VzcyB0byBhZGQgY2FjaGUgdmFsdWVzCisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBDYWNoZUVudHJ5PiBDYWNoZTsKKworICAvLyBDYWNoZSB2ZXJzaW9uIGluZm8KKyAgdW5zaWduZWQgaW50IENhY2hlTWFqb3JWZXJzaW9uID0gMDsKKyAgdW5zaWduZWQgaW50IENhY2hlTWlub3JWZXJzaW9uID0gMDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ2FsbFZpc3VhbFN0dWRpb01hY3JvLmN4eCBiL1NvdXJjZS9jbUNhbGxWaXN1YWxTdHVkaW9NYWNyby5jeHgKaW5kZXggOWUxNTJmZi4uOTRiNmUxOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ2FsbFZpc3VhbFN0dWRpb01hY3JvLmN4eAorKysgYi9Tb3VyY2UvY21DYWxsVmlzdWFsU3R1ZGlvTWFjcm8uY3h4CkBAIC00Myw4ICs0Myw3IEBACiAgICAgICBpZiAoTG9nRXJyb3JzQXNNZXNzYWdlcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBfaHJlc3VsdF9vc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIF9ocmVzdWx0X29zcy5mbGFncyhzdGQ6Omlvczo6aGV4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9ocmVzdWx0X29zcyA8PCBjb250ZXh0IDw8ICIgZmFpbGVkIEhSRVNVTFQsIGhyID0gMHgiIDw8IGhyICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9ocmVzdWx0X29zcyA8PCBjb250ZXh0IDw8ICIgZmFpbGVkIEhSRVNVTFQsIGhyID0gMHgiIDw8IGhyIDw8ICdcbic7ICBcCiAgICAgICAgIF9ocmVzdWx0X29zcy5mbGFncyhzdGQ6Omlvczo6ZGVjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIF9ocmVzdWx0X29zcyA8PCBfX0ZJTEVfXyA8PCAiKCIgPDwgX19MSU5FX18gPDwgIikiOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNtU3lzdGVtVG9vbHM6Ok1lc3NhZ2UoX2hyZXN1bHRfb3NzLnN0cigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC05OCwzMiArOTcsMzcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBESVNQQVRDSF9NRVRIT0QsICZwYXJhbXMsICZyZXN1bHQsICZleGNlcCwgJmFyZyk7CiAKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7Ci0gICAgICBvc3MgPDwgc3RkOjplbmRsOwotICAgICAgb3NzIDw8ICJJbnZva2UoRXhlY3V0ZUNvbW1hbmQpIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICBvc3MgPDwgIiAgTWFjcm86ICIgPDwgbWFjcm8gPDwgc3RkOjplbmRsOwotICAgICAgb3NzIDw8ICIgIEFyZ3M6ICIgPDwgYXJncyA8PCBzdGQ6OmVuZGw7CisgICAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgICBvc3MgPDwgIlxuSW52b2tlKEV4ZWN1dGVDb21tYW5kKVxuIgorICAgICAgICAgICAgICIgIE1hY3JvOiAiIDw8IG1hY3JvIDw8ICJcbiIKKyAgICAgICAgICAgICAiICBBcmdzOiAiIDw8IGFyZ3MgPDwgJ1xuJzsKKyAgICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCiAgICAgICBpZiAoRElTUF9FX0VYQ0VQVElPTiA9PSBocikgewotICAgICAgICBvc3MgPDwgIkRJU1BfRV9FWENFUFRJT04gRVhDRVBJTkZPOiIgPDwgZXhjZXAud0NvZGUgPDwgc3RkOjplbmRsOwotICAgICAgICBvc3MgPDwgIiAgd0NvZGU6ICIgPDwgZXhjZXAud0NvZGUgPDwgc3RkOjplbmRsOwotICAgICAgICBvc3MgPDwgIiAgd1Jlc2VydmVkOiAiIDw8IGV4Y2VwLndSZXNlcnZlZCA8PCBzdGQ6OmVuZGw7CisgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgICAgICAgb3NzIDw8ICJESVNQX0VfRVhDRVBUSU9OIEVYQ0VQSU5GTzoiIDw8IGV4Y2VwLndDb2RlIDw8ICJcbiIKKyAgICAgICAgICAgICAgICIgIHdDb2RlOiAiIDw8IGV4Y2VwLndDb2RlIDw8ICJcbiIKKyAgICAgICAgICAgICAgICIgIHdSZXNlcnZlZDogIiA8PCBleGNlcC53UmVzZXJ2ZWQgPDwgJ1xuJzsKKyAgICAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgICAgICAgIGlmIChleGNlcC5ic3RyU291cmNlKSB7CiAgICAgICAgICAgb3NzIDw8ICIgIGJzdHJTb3VyY2U6ICIgPDwgKGNvbnN0IGNoYXIqKShfYnN0cl90KWV4Y2VwLmJzdHJTb3VyY2UKLSAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICA8PCAnXG4nOwogICAgICAgICB9CiAgICAgICAgIGlmIChleGNlcC5ic3RyRGVzY3JpcHRpb24pIHsKICAgICAgICAgICBvc3MgPDwgIiAgYnN0ckRlc2NyaXB0aW9uOiAiCi0gICAgICAgICAgICAgIDw8IChjb25zdCBjaGFyKikoX2JzdHJfdClleGNlcC5ic3RyRGVzY3JpcHRpb24gPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICA8PCAoY29uc3QgY2hhciopKF9ic3RyX3QpZXhjZXAuYnN0ckRlc2NyaXB0aW9uIDw8ICdcbic7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGV4Y2VwLmJzdHJIZWxwRmlsZSkgewogICAgICAgICAgIG9zcyA8PCAiICBic3RySGVscEZpbGU6ICIgPDwgKGNvbnN0IGNoYXIqKShfYnN0cl90KWV4Y2VwLmJzdHJIZWxwRmlsZQotICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgIDw8ICdcbic7CiAgICAgICAgIH0KLSAgICAgICAgb3NzIDw8ICIgIGR3SGVscENvbnRleHQ6ICIgPDwgZXhjZXAuZHdIZWxwQ29udGV4dCA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIG9zcyA8PCAiICBwdlJlc2VydmVkOiAiIDw8IGV4Y2VwLnB2UmVzZXJ2ZWQgPDwgc3RkOjplbmRsOwotICAgICAgICBvc3MgPDwgIiAgcGZuRGVmZXJyZWRGaWxsSW46ICIKLSAgICAgICAgICAgIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGV4Y2VwLnBmbkRlZmVycmVkRmlsbEluKSA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIG9zcyA8PCAiICBzY29kZTogIiA8PCBleGNlcC5zY29kZSA8PCBzdGQ6OmVuZGw7CisgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgICAgICAgb3NzIDw8ICIgIGR3SGVscENvbnRleHQ6ICIgPDwgZXhjZXAuZHdIZWxwQ29udGV4dCA8PCAiXG4iCisgICAgICAgICAgICAgICAiICBwdlJlc2VydmVkOiAiIDw8IGV4Y2VwLnB2UmVzZXJ2ZWQgPDwgIlxuIgorICAgICAgICAgICAgICAgIiAgcGZuRGVmZXJyZWRGaWxsSW46ICIKKyAgICAgICAgICAgIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGV4Y2VwLnBmbkRlZmVycmVkRmlsbEluKSA8PCAiXG4iCisgICAgICAgICAgICAgICAiICBzY29kZTogIiA8PCBleGNlcC5zY29kZSA8PCAnXG4nOworICAgICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICAgICAgIH0KIAogICAgICAgc3RkOjpzdHJpbmcgZXhzdHIob3NzLnN0cigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5jeHggYi9Tb3VyY2UvY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXIuY3h4CmluZGV4IDYxM2FlMDYuLjg3ZWI5MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5jeHgKKysrIGIvU291cmNlL2NtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyLmN4eApAQCAtNSw5ICs1LDEzIEBACiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CiAKICNpbmNsdWRlICJjbUNvbW1hbmRBcmd1bWVudExleGVyLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtNDAsMTAgKzQ0LDEwIEBACiAgIGlmIChzdHIuZW1wdHkoKSkgewogICAgIHJldHVybiAiIjsKICAgfQotICBjaGFyKiBzdFZhbCA9IG5ldyBjaGFyW3N0ci5zaXplKCkgKyAxXTsKLSAgc3RyY3B5KHN0VmFsLCBzdHIuY19zdHIoKSk7Ci0gIHRoaXMtPlZhcmlhYmxlcy5wdXNoX2JhY2soc3RWYWwpOwotICByZXR1cm4gc3RWYWw7CisgIGF1dG8gc3RWYWwgPSBjbTo6bWFrZV91bmlxdWU8Y2hhcltdPihzdHIuc2l6ZSgpICsgMSk7CisgIHN0cmNweShzdFZhbC5nZXQoKSwgc3RyLmNfc3RyKCkpOworICB0aGlzLT5WYXJpYWJsZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShzdFZhbCkpOworICByZXR1cm4gdGhpcy0+VmFyaWFibGVzLmJhY2soKS5nZXQoKTsKIH0KIAogY29uc3QgY2hhciogY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXI6OkV4cGFuZFNwZWNpYWxWYXJpYWJsZSgKQEAgLTY2LDggKzcwLDcgQEAKICAgICByZXR1cm4gIiI7CiAgIH0KICAgaWYgKHN0cmNtcChrZXksICJDQUNIRSIpID09IDApIHsKLSAgICBpZiAoY29uc3Qgc3RkOjpzdHJpbmcqIGMgPQotICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUodmFyKSkgeworICAgIGlmIChjbVByb3AgYyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUodmFyKSkgewogICAgICAgaWYgKHRoaXMtPkVzY2FwZVF1b3RlcykgewogICAgICAgICByZXR1cm4gdGhpcy0+QWRkU3RyaW5nKGNtRXNjYXBlUXVvdGVzKCpjKSk7CiAgICAgICB9CkBAIC0xMzYsMTEgKzEzOSwxMSBAQAogICAgIHJldHVybiBpbjE7CiAgIH0KICAgc2l6ZV90IGxlbiA9IHN0cmxlbihpbjEpICsgc3RybGVuKGluMikgKyAxOwotICBjaGFyKiBvdXQgPSBuZXcgY2hhcltsZW5dOwotICBzdHJjcHkob3V0LCBpbjEpOwotICBzdHJjYXQob3V0LCBpbjIpOwotICB0aGlzLT5WYXJpYWJsZXMucHVzaF9iYWNrKG91dCk7Ci0gIHJldHVybiBvdXQ7CisgIGF1dG8gb3V0ID0gY206Om1ha2VfdW5pcXVlPGNoYXJbXT4obGVuKTsKKyAgc3RyY3B5KG91dC5nZXQoKSwgaW4xKTsKKyAgc3RyY2F0KG91dC5nZXQoKSwgaW4yKTsKKyAgdGhpcy0+VmFyaWFibGVzLnB1c2hfYmFjayhzdGQ6Om1vdmUob3V0KSk7CisgIHJldHVybiB0aGlzLT5WYXJpYWJsZXMuYmFjaygpLmdldCgpOwogfQogCiB2b2lkIGNtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyOjpBbGxvY2F0ZVBhcnNlclR5cGUoCkBAIC0xNTMsMTEgKzE1NiwxMSBAQAogICBpZiAobGVuID09IDApIHsKICAgICByZXR1cm47CiAgIH0KLSAgY2hhciogb3V0ID0gbmV3IGNoYXJbbGVuICsgMV07Ci0gIG1lbWNweShvdXQsIHN0ciwgbGVuKTsKLSAgb3V0W2xlbl0gPSAwOwotICBwdC0+c3RyID0gb3V0OwotICB0aGlzLT5WYXJpYWJsZXMucHVzaF9iYWNrKG91dCk7CisgIGF1dG8gb3V0ID0gY206Om1ha2VfdW5pcXVlPGNoYXJbXT4obGVuICsgMSk7CisgIG1lbWNweShvdXQuZ2V0KCksIHN0ciwgbGVuKTsKKyAgb3V0LmdldCgpW2xlbl0gPSAwOworICBwdC0+c3RyID0gb3V0LmdldCgpOworICB0aGlzLT5WYXJpYWJsZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShvdXQpKTsKIH0KIAogYm9vbCBjbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlcjo6SGFuZGxlRXNjYXBlU3ltYm9sKApAQCAtMjM1LDEwICsyMzgsNyBAQAogCiB2b2lkIGNtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyOjpDbGVhbnVwUGFyc2VyKCkKIHsKLSAgZm9yIChjaGFyKiB2YXIgOiB0aGlzLT5WYXJpYWJsZXMpIHsKLSAgICBkZWxldGVbXSB2YXI7Ci0gIH0KLSAgdGhpcy0+VmFyaWFibGVzLmVyYXNlKHRoaXMtPlZhcmlhYmxlcy5iZWdpbigpLCB0aGlzLT5WYXJpYWJsZXMuZW5kKCkpOworICB0aGlzLT5WYXJpYWJsZXMuY2xlYXIoKTsKIH0KIAogaW50IGNtQ29tbWFuZEFyZ3VtZW50UGFyc2VySGVscGVyOjpMZXhJbnB1dChjaGFyKiBidWYsIGludCBtYXhsZW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21tYW5kQXJndW1lbnRQYXJzZXJIZWxwZXIuaCBiL1NvdXJjZS9jbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5oCmluZGV4IDI1ZTY4OTIuLmI0NmVkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5oCisrKyBiL1NvdXJjZS9jbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCkBAIC02OSw3ICs3MCw3IEBACiAgIHZvaWQgQ2xlYW51cFBhcnNlcigpOwogICB2b2lkIFNldEVycm9yKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpOwogCi0gIHN0ZDo6dmVjdG9yPGNoYXIqPiBWYXJpYWJsZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+PiBWYXJpYWJsZXM7CiAgIGNvbnN0IGNtTWFrZWZpbGUqIE1ha2VmaWxlOwogICBzdGQ6OnN0cmluZyBSZXN1bHQ7CiAgIHN0ZDo6c3RyaW5nIEVycm9yU3RyaW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tbWFuZHMuY3h4IGIvU291cmNlL2NtQ29tbWFuZHMuY3h4CmluZGV4IDZmMTk2OTcuLmM5NGYxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbW1hbmRzLmN4eAorKysgYi9Tb3VyY2UvY21Db21tYW5kcy5jeHgKQEAgLTkyLDYgKzkyLDcgQEAKICMgIGluY2x1ZGUgImNtQXV4U291cmNlRGlyZWN0b3J5Q29tbWFuZC5oIgogIyAgaW5jbHVkZSAiY21CdWlsZE5hbWVDb21tYW5kLmgiCiAjICBpbmNsdWRlICJjbUNNYWtlSG9zdFN5c3RlbUluZm9ybWF0aW9uQ29tbWFuZC5oIgorIyAgaW5jbHVkZSAiY21DTWFrZUxhbmd1YWdlQ29tbWFuZC5oIgogIyAgaW5jbHVkZSAiY21FeHBvcnRDb21tYW5kLmgiCiAjICBpbmNsdWRlICJjbUV4cG9ydExpYnJhcnlEZXBlbmRlbmNpZXNDb21tYW5kLmgiCiAjICBpbmNsdWRlICJjbUZMVEtXcmFwVUlDb21tYW5kLmgiCkBAIC0xOTgsNiArMTk5LDggQEAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCiAgIHN0YXRlLT5BZGRCdWlsdGluQ29tbWFuZCgiY21ha2VfaG9zdF9zeXN0ZW1faW5mb3JtYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21DTWFrZUhvc3RTeXN0ZW1JbmZvcm1hdGlvbkNvbW1hbmQpOworICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoImNtYWtlX2xhbmd1YWdlIiwgY21DTWFrZUxhbmd1YWdlQ29tbWFuZCk7CisgIHN0YXRlLT5BZGRCdWlsdGluQ29tbWFuZCgibG9hZF9jYWNoZSIsIGNtTG9hZENhY2hlQ29tbWFuZCk7CiAgIHN0YXRlLT5BZGRCdWlsdGluQ29tbWFuZCgicmVtb3ZlIiwgY21SZW1vdmVDb21tYW5kKTsKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJ2YXJpYWJsZV93YXRjaCIsIGNtVmFyaWFibGVXYXRjaENvbW1hbmQpOwogICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoIndyaXRlX2ZpbGUiLCBjbVdyaXRlRmlsZUNvbW1hbmQpOwpAQCAtMjc5LDcgKzI4Miw2IEBACiAgIHN0YXRlLT5BZGRCdWlsdGluQ29tbWFuZCgibGlua19saWJyYXJpZXMiLCBjbUxpbmtMaWJyYXJpZXNDb21tYW5kKTsKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJ0YXJnZXRfbGlua19kaXJlY3RvcmllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVRhcmdldExpbmtEaXJlY3Rvcmllc0NvbW1hbmQpOwotICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoImxvYWRfY2FjaGUiLCBjbUxvYWRDYWNoZUNvbW1hbmQpOwogICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoInF0X3dyYXBfY3BwIiwgY21RVFdyYXBDUFBDb21tYW5kKTsKICAgc3RhdGUtPkFkZEJ1aWx0aW5Db21tYW5kKCJxdF93cmFwX3VpIiwgY21RVFdyYXBVSUNvbW1hbmQpOwogICBzdGF0ZS0+QWRkQnVpbHRpbkNvbW1hbmQoInJlbW92ZV9kZWZpbml0aW9ucyIsIGNtUmVtb3ZlRGVmaW5pdGlvbnNDb21tYW5kKTsKQEAgLTMzOSw3ICszNDEsNiBAQAogICBDTV9VTkVYUEVDVEVEX1BST0pFQ1RfQ09NTUFORCgiaW5zdGFsbCIpOwogICBDTV9VTkVYUEVDVEVEX1BST0pFQ1RfQ09NTUFORCgibGlua19kaXJlY3RvcmllcyIpOwogICBDTV9VTkVYUEVDVEVEX1BST0pFQ1RfQ09NTUFORCgibGlua19saWJyYXJpZXMiKTsKLSAgQ01fVU5FWFBFQ1RFRF9QUk9KRUNUX0NPTU1BTkQoImxvYWRfY2FjaGUiKTsKICAgQ01fVU5FWFBFQ1RFRF9QUk9KRUNUX0NPTU1BTkQoInByb2plY3QiKTsKICAgQ01fVU5FWFBFQ1RFRF9QUk9KRUNUX0NPTU1BTkQoInF0X3dyYXBfY3BwIik7CiAgIENNX1VORVhQRUNURURfUFJPSkVDVF9DT01NQU5EKCJxdF93cmFwX3VpIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yLmN4eAppbmRleCAxOWEwOTZiLi44YWVlMjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUNvbW1vblRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTE0LDkgKzE0LDExIEBACiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJjbVRhcmdldC5oIgogCiBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6Y21Db21tb25UYXJnZXRHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIGd0KQogICA6IEdlbmVyYXRvclRhcmdldChndCkKQEAgLTI1LDI3ICsyNywyOSBAQAogICAgICAgc3RhdGljX2Nhc3Q8Y21Mb2NhbENvbW1vbkdlbmVyYXRvcio+KGd0LT5Mb2NhbEdlbmVyYXRvcikpCiAgICwgR2xvYmFsQ29tbW9uR2VuZXJhdG9yKHN0YXRpY19jYXN0PGNtR2xvYmFsQ29tbW9uR2VuZXJhdG9yKj4oCiAgICAgICBndC0+TG9jYWxHZW5lcmF0b3ItPkdldEdsb2JhbEdlbmVyYXRvcigpKSkKLSAgLCBDb25maWdOYW1lKExvY2FsQ29tbW9uR2VuZXJhdG9yLT5HZXRDb25maWdOYW1lKCkpCisgICwgQ29uZmlnTmFtZXMoTG9jYWxDb21tb25HZW5lcmF0b3ItPkdldENvbmZpZ05hbWVzKCkpCiB7CiB9CiAKIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjp+Y21Db21tb25UYXJnZXRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKLXN0ZDo6c3RyaW5nIGNvbnN0JiBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0Q29uZmlnTmFtZSgpIGNvbnN0CitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpHZXRDb25maWdOYW1lcygpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5Db25maWdOYW1lOworICByZXR1cm4gdGhpcy0+Q29uZmlnTmFtZXM7CiB9CiAKLWNvbnN0IGNoYXIqIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpHZXRGZWF0dXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlKQorY29uc3QgY2hhciogY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICByZXR1cm4gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlKGZlYXR1cmUsIHRoaXMtPkNvbmZpZ05hbWUpOworICByZXR1cm4gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlKGZlYXR1cmUsIGNvbmZpZyktPmNfc3RyKCk7CiB9CiAKIHZvaWQgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkFkZE1vZHVsZURlZmluaXRpb25GbGFnKAotICBjbUxpbmtMaW5lQ29tcHV0ZXIqIGxpbmtMaW5lQ29tcHV0ZXIsIHN0ZDo6c3RyaW5nJiBmbGFncykKKyAgY21MaW5rTGluZUNvbXB1dGVyKiBsaW5rTGluZUNvbXB1dGVyLCBzdGQ6OnN0cmluZyYgZmxhZ3MsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpNb2R1bGVEZWZpbml0aW9uSW5mbyBjb25zdCogbWRpID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE1vZHVsZURlZmluaXRpb25JbmZvKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNb2R1bGVEZWZpbml0aW9uSW5mbyhjb25maWcpOwogICBpZiAoIW1kaSB8fCBtZGktPkRlZkZpbGUuZW1wdHkoKSkgewogICAgIHJldHVybjsKICAgfQpAQCAtNzAsMTEgKzc0LDEyIEBACiB2b2lkIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpBcHBlbmRGb3J0cmFuRm9ybWF0RmxhZ3MoCiAgIHN0ZDo6c3RyaW5nJiBmbGFncywgY21Tb3VyY2VGaWxlIGNvbnN0JiBzb3VyY2UpCiB7Ci0gIGNvbnN0IGNoYXIqIHNyY2ZtdCA9IHNvdXJjZS5HZXRQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKTsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgc3JjZm10ID0gc291cmNlLkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKTsKICAgY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5Gb3JtYXQgZm9ybWF0ID0KICAgICBjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhbkZvcm1hdChzcmNmbXQpOwogICBpZiAoZm9ybWF0ID09IGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuRm9ybWF0Tm9uZSkgewotICAgIGNvbnN0IGNoYXIqIHRndGZtdCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkZvcnRyYW5fRk9STUFUIik7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIHRndGZtdCA9CisgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKTsKICAgICBmb3JtYXQgPSBjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhbkZvcm1hdCh0Z3RmbXQpOwogICB9CiAgIGNvbnN0IGNoYXIqIHZhciA9IG51bGxwdHI7CkBAIC05NCw1NyArOTksOTEgQEAKICAgfQogfQogCi1zdGQ6OnN0cmluZyBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0RmxhZ3MoY29uc3Qgc3RkOjpzdHJpbmcmIGwpCit2b2lkIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpBcHBlbmRGb3J0cmFuUHJlcHJvY2Vzc0ZsYWdzKAorICBzdGQ6OnN0cmluZyYgZmxhZ3MsIGNtU291cmNlRmlsZSBjb25zdCYgc291cmNlKQogewotICBhdXRvIGkgPSB0aGlzLT5GbGFnc0J5TGFuZ3VhZ2UuZmluZChsKTsKLSAgaWYgKGkgPT0gdGhpcy0+RmxhZ3NCeUxhbmd1YWdlLmVuZCgpKSB7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIHNyY3BwID0gc291cmNlLkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9QUkVQUk9DRVNTIik7CisgIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2VzcyBwcmVwcm9jZXNzID0KKyAgICBjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhblByZXByb2Nlc3Moc3JjcHApOworICBpZiAocHJlcHJvY2VzcyA9PSBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhblByZXByb2Nlc3M6OlVuc2V0KSB7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIHRndHBwID0KKyAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJGb3J0cmFuX1BSRVBST0NFU1MiKTsKKyAgICBwcmVwcm9jZXNzID0gY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5QcmVwcm9jZXNzKHRndHBwKTsKKyAgfQorICBjb25zdCBjaGFyKiB2YXIgPSBudWxscHRyOworICBzd2l0Y2ggKHByZXByb2Nlc3MpIHsKKyAgICBjYXNlIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2Vzczo6TmVlZGVkOgorICAgICAgdmFyID0gIkNNQUtFX0ZvcnRyYW5fQ09NUElMRV9PUFRJT05TX1BSRVBST0NFU1NfT04iOworICAgICAgYnJlYWs7CisgICAgY2FzZSBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhblByZXByb2Nlc3M6Ok5vdE5lZWRlZDoKKyAgICAgIHZhciA9ICJDTUFLRV9Gb3J0cmFuX0NPTVBJTEVfT1BUSU9OU19QUkVQUk9DRVNTX09GRiI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKyAgaWYgKHZhcikgeworICAgIHRoaXMtPkxvY2FsQ29tbW9uR2VuZXJhdG9yLT5BcHBlbmRDb21waWxlT3B0aW9ucygKKyAgICAgIGZsYWdzLCB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24odmFyKSk7CisgIH0KK30KKworc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldEZsYWdzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2gpCit7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIGtleSA9IGNvbmZpZyArIGFyY2g7CisKKyAgYXV0byBpID0gdGhpcy0+Q29uZmlnc1trZXldLkZsYWdzQnlMYW5ndWFnZS5maW5kKGwpOworICBpZiAoaSA9PSB0aGlzLT5Db25maWdzW2tleV0uRmxhZ3NCeUxhbmd1YWdlLmVuZCgpKSB7CiAgICAgc3RkOjpzdHJpbmcgZmxhZ3M7CiAKLSAgICB0aGlzLT5Mb2NhbENvbW1vbkdlbmVyYXRvci0+R2V0VGFyZ2V0Q29tcGlsZUZsYWdzKAotICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCB0aGlzLT5Db25maWdOYW1lLCBsLCBmbGFncyk7CisgICAgdGhpcy0+TG9jYWxDb21tb25HZW5lcmF0b3ItPkdldFRhcmdldENvbXBpbGVGbGFncyh0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcsIGwsIGZsYWdzLCBhcmNoKTsKIAogICAgIEJ5TGFuZ3VhZ2VNYXA6OnZhbHVlX3R5cGUgZW50cnkobCwgZmxhZ3MpOwotICAgIGkgPSB0aGlzLT5GbGFnc0J5TGFuZ3VhZ2UuaW5zZXJ0KGVudHJ5KS5maXJzdDsKKyAgICBpID0gdGhpcy0+Q29uZmlnc1trZXldLkZsYWdzQnlMYW5ndWFnZS5pbnNlcnQoZW50cnkpLmZpcnN0OwogICB9CiAgIHJldHVybiBpLT5zZWNvbmQ7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpHZXREZWZpbmVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsKQorc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldERlZmluZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICBhdXRvIGkgPSB0aGlzLT5EZWZpbmVzQnlMYW5ndWFnZS5maW5kKGwpOwotICBpZiAoaSA9PSB0aGlzLT5EZWZpbmVzQnlMYW5ndWFnZS5lbmQoKSkgeworICBhdXRvIGkgPSB0aGlzLT5Db25maWdzW2NvbmZpZ10uRGVmaW5lc0J5TGFuZ3VhZ2UuZmluZChsKTsKKyAgaWYgKGkgPT0gdGhpcy0+Q29uZmlnc1tjb25maWddLkRlZmluZXNCeUxhbmd1YWdlLmVuZCgpKSB7CiAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGRlZmluZXM7Ci0gICAgdGhpcy0+TG9jYWxDb21tb25HZW5lcmF0b3ItPkdldFRhcmdldERlZmluZXModGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbmZpZ05hbWUsIGwsIGRlZmluZXMpOworICAgIHRoaXMtPkxvY2FsQ29tbW9uR2VuZXJhdG9yLT5HZXRUYXJnZXREZWZpbmVzKHRoaXMtPkdlbmVyYXRvclRhcmdldCwgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwsIGRlZmluZXMpOwogCiAgICAgc3RkOjpzdHJpbmcgZGVmaW5lc1N0cmluZzsKICAgICB0aGlzLT5Mb2NhbENvbW1vbkdlbmVyYXRvci0+Sm9pbkRlZmluZXMoZGVmaW5lcywgZGVmaW5lc1N0cmluZywgbCk7CiAKICAgICBCeUxhbmd1YWdlTWFwOjp2YWx1ZV90eXBlIGVudHJ5KGwsIGRlZmluZXNTdHJpbmcpOwotICAgIGkgPSB0aGlzLT5EZWZpbmVzQnlMYW5ndWFnZS5pbnNlcnQoZW50cnkpLmZpcnN0OworICAgIGkgPSB0aGlzLT5Db25maWdzW2NvbmZpZ10uRGVmaW5lc0J5TGFuZ3VhZ2UuaW5zZXJ0KGVudHJ5KS5maXJzdDsKICAgfQogICByZXR1cm4gaS0+c2Vjb25kOwogfQogCi1zdGQ6OnN0cmluZyBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0SW5jbHVkZXMoc3RkOjpzdHJpbmcgY29uc3QmIGwpCitzdGQ6OnN0cmluZyBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0SW5jbHVkZXMoc3RkOjpzdHJpbmcgY29uc3QmIGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKLSAgYXV0byBpID0gdGhpcy0+SW5jbHVkZXNCeUxhbmd1YWdlLmZpbmQobCk7Ci0gIGlmIChpID09IHRoaXMtPkluY2x1ZGVzQnlMYW5ndWFnZS5lbmQoKSkgeworICBhdXRvIGkgPSB0aGlzLT5Db25maWdzW2NvbmZpZ10uSW5jbHVkZXNCeUxhbmd1YWdlLmZpbmQobCk7CisgIGlmIChpID09IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5JbmNsdWRlc0J5TGFuZ3VhZ2UuZW5kKCkpIHsKICAgICBzdGQ6OnN0cmluZyBpbmNsdWRlczsKLSAgICB0aGlzLT5BZGRJbmNsdWRlRmxhZ3MoaW5jbHVkZXMsIGwpOworICAgIHRoaXMtPkFkZEluY2x1ZGVGbGFncyhpbmNsdWRlcywgbCwgY29uZmlnKTsKICAgICBCeUxhbmd1YWdlTWFwOjp2YWx1ZV90eXBlIGVudHJ5KGwsIGluY2x1ZGVzKTsKLSAgICBpID0gdGhpcy0+SW5jbHVkZXNCeUxhbmd1YWdlLmluc2VydChlbnRyeSkuZmlyc3Q7CisgICAgaSA9IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5JbmNsdWRlc0J5TGFuZ3VhZ2UuaW5zZXJ0KGVudHJ5KS5maXJzdDsKICAgfQogICByZXR1cm4gaS0+c2Vjb25kOwogfQogCi1zdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldExpbmtlZFRhcmdldERpcmVjdG9yaWVzKCkKLSAgY29uc3QKK3N0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0TGlua2VkVGFyZ2V0RGlyZWN0b3JpZXMoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkaXJzOwogICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+IGVtaXR0ZWQ7CiAgIGlmIChjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIGNsaSA9Ci0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKHRoaXMtPkNvbmZpZ05hbWUpKSB7CisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKGNvbmZpZykpIHsKICAgICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246Okl0ZW1WZWN0b3IgY29uc3QmIGl0ZW1zID0gY2xpLT5HZXRJdGVtcygpOwogICAgIGZvciAoYXV0byBjb25zdCYgaXRlbSA6IGl0ZW1zKSB7CiAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogbGlua2VlID0gaXRlbS5UYXJnZXQ7CkBAIC0xNjUsMTkgKzIwNCwyNCBAQAogICByZXR1cm4gZGlyczsKIH0KIAotc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkNvbXB1dGVUYXJnZXRDb21waWxlUERCKCkgY29uc3QKK3N0ZDo6c3RyaW5nIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpDb21wdXRlVGFyZ2V0Q29tcGlsZVBEQigKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgY29tcGlsZVBkYlBhdGg7CiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA+IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKICAgICByZXR1cm4gY29tcGlsZVBkYlBhdGg7CiAgIH0KIAotICBjb21waWxlUGRiUGF0aCA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRDb21waWxlUERCUGF0aCh0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICBjb21waWxlUGRiUGF0aCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q29tcGlsZVBEQlBhdGgoY29uZmlnKTsKICAgaWYgKGNvbXBpbGVQZGJQYXRoLmVtcHR5KCkpIHsKICAgICAvLyBNYXRjaCBWUyBkZWZhdWx0OiBgJChJbnREaXIpdmMkKFBsYXRmb3JtVG9vbHNldFZlcnNpb24pLnBkYmAuCiAgICAgLy8gQSB0cmFpbGluZyBzbGFzaCB0ZWxscyB0aGUgdG9vbGNoYWluIHRvIGFkZCBpdHMgZGVmYXVsdCBmaWxlIG5hbWUuCi0gICAgY29tcGlsZVBkYlBhdGggPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKSArICIvIjsKKyAgICBjb21waWxlUGRiUGF0aCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpOworICAgIGlmICh0aGlzLT5HbG9iYWxDb21tb25HZW5lcmF0b3ItPklzTXVsdGlDb25maWcoKSkgeworICAgICAgY29tcGlsZVBkYlBhdGggKz0gIi8iOworICAgICAgY29tcGlsZVBkYlBhdGggKz0gY29uZmlnOworICAgIH0KKyAgICBjb21waWxlUGRiUGF0aCArPSAiLyI7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpIHsKICAgICAgIC8vIE1hdGNoIFZTIGRlZmF1bHQgZm9yIHN0YXRpYyBsaWJzOiBgJChJbnREaXIpJChQcm9qZWN0TmFtZSkucGRiYC4KICAgICAgIGNvbXBpbGVQZGJQYXRoICs9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpOwpAQCAtMTg4LDEwICsyMzIsMTAgQEAKICAgcmV0dXJuIGNvbXBpbGVQZGJQYXRoOwogfQogCi1zdGQ6OnN0cmluZyBjbUNvbW1vblRhcmdldEdlbmVyYXRvcjo6R2V0TWFuaWZlc3RzKCkKK3N0ZDo6c3RyaW5nIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOjpHZXRNYW5pZmVzdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gbWFuaWZlc3Rfc3JjczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNYW5pZmVzdHMobWFuaWZlc3Rfc3JjcywgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TWFuaWZlc3RzKG1hbmlmZXN0X3NyY3MsIGNvbmZpZyk7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1hbmlmZXN0czsKICAgbWFuaWZlc3RzLnJlc2VydmUobWFuaWZlc3Rfc3Jjcy5zaXplKCkpOwpAQCAtMjA2LDYgKzI1MCwyMCBAQAogICByZXR1cm4gY21Kb2luKG1hbmlmZXN0cywgIiAiKTsKIH0KIAorc3RkOjpzdHJpbmcgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkdldEFJWEV4cG9ydHMoc3RkOjpzdHJpbmcgY29uc3QmKQoreworICBzdGQ6OnN0cmluZyBhaXhFeHBvcnRzOworICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPklzQUlYKCkpIHsKKyAgICBpZiAoY21Qcm9wIGV4cG9ydEFsbCA9CisgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQUlYX0VYUE9SVF9BTExfU1lNQk9MUyIpKSB7CisgICAgICBpZiAoY21Jc09mZigqZXhwb3J0QWxsKSkgeworICAgICAgICBhaXhFeHBvcnRzID0gIi1uIjsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGFpeEV4cG9ydHM7Cit9CisKIHZvaWQgY21Db21tb25UYXJnZXRHZW5lcmF0b3I6OkFwcGVuZE9TWFZlckZsYWcoc3RkOjpzdHJpbmcmIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSwgYm9vbCBzbykKQEAgLTIyMyw3ICsyODEsMTAgQEAKICAgaW50IG1ham9yOwogICBpbnQgbWlub3I7CiAgIGludCBwYXRjaDsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUYXJnZXRWZXJzaW9uKHNvLCBtYWpvciwgbWlub3IsIHBhdGNoKTsKKyAgc3RkOjpzdHJpbmcgcHJvcCA9IGNtU3RyQ2F0KCJNQUNIT18iLCBuYW1lLCAiX1ZFUlNJT04iKTsKKyAgc3RkOjpzdHJpbmcgZmFsbGJhY2tfcHJvcCA9IHNvID8gIlNPVkVSU0lPTiIgOiAiVkVSU0lPTiI7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VGFyZ2V0VmVyc2lvbkZhbGxiYWNrKHByb3AsIGZhbGxiYWNrX3Byb3AsIG1ham9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5vciwgcGF0Y2gpOwogICBpZiAobWFqb3IgPiAwIHx8IG1pbm9yID4gMCB8fCBwYXRjaCA+IDApIHsKICAgICAvLyBBcHBlbmQgdGhlIGZsYWcgc2luY2UgYSBub24temVybyB2ZXJzaW9uIGlzIHNwZWNpZmllZC4KICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gdmZsYWc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21tb25UYXJnZXRHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUNvbW1vblRhcmdldEdlbmVyYXRvci5oCmluZGV4IDE3NzkyZDYuLmMzYzNhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbW1vblRhcmdldEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUNvbW1vblRhcmdldEdlbmVyYXRvci5oCkBAIC0yNSw0MiArMjUsNTUgQEAKICAgY21Db21tb25UYXJnZXRHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIGd0KTsKICAgdmlydHVhbCB+Y21Db21tb25UYXJnZXRHZW5lcmF0b3IoKTsKIAotICBzdGQ6OnN0cmluZyBjb25zdCYgR2V0Q29uZmlnTmFtZSgpIGNvbnN0OworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIEdldENvbmZpZ05hbWVzKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgLy8gRmVhdHVyZSBxdWVyeSBtZXRob2RzLgotICBjb25zdCBjaGFyKiBHZXRGZWF0dXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlKTsKKyAgY29uc3QgY2hhciogR2V0RmVhdHVyZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAogICAvLyBIZWxwZXIgdG8gYWRkIGZsYWcgZm9yIHdpbmRvd3MgLmRlZiBmaWxlLgogICB2b2lkIEFkZE1vZHVsZURlZmluaXRpb25GbGFnKGNtTGlua0xpbmVDb21wdXRlciogbGlua0xpbmVDb21wdXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBmbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgY21HZW5lcmF0b3JUYXJnZXQqIEdlbmVyYXRvclRhcmdldDsKICAgY21NYWtlZmlsZSogTWFrZWZpbGU7CiAgIGNtTG9jYWxDb21tb25HZW5lcmF0b3IqIExvY2FsQ29tbW9uR2VuZXJhdG9yOwogICBjbUdsb2JhbENvbW1vbkdlbmVyYXRvciogR2xvYmFsQ29tbW9uR2VuZXJhdG9yOwotICBzdGQ6OnN0cmluZyBDb25maWdOYW1lOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ29uZmlnTmFtZXM7CiAKICAgdm9pZCBBcHBlbmRGb3J0cmFuRm9ybWF0RmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSk7CiAKLSAgdmlydHVhbCB2b2lkIEFkZEluY2x1ZGVGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpID0gMDsKKyAgdm9pZCBBcHBlbmRGb3J0cmFuUHJlcHJvY2Vzc0ZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU291cmNlRmlsZSBjb25zdCYgc291cmNlKTsKKworICB2aXJ0dWFsIHZvaWQgQWRkSW5jbHVkZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgPSAwOwogCiAgIHZvaWQgQXBwZW5kT1NYVmVyRmxhZyhzdGQ6OnN0cmluZyYgZmxhZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSwgYm9vbCBzbyk7CiAKLSAgdXNpbmcgQnlMYW5ndWFnZU1hcCA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz47Ci0gIHN0ZDo6c3RyaW5nIEdldEZsYWdzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsKTsKLSAgQnlMYW5ndWFnZU1hcCBGbGFnc0J5TGFuZ3VhZ2U7Ci0gIHN0ZDo6c3RyaW5nIEdldERlZmluZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGwpOwotICBCeUxhbmd1YWdlTWFwIERlZmluZXNCeUxhbmd1YWdlOwotICBzdGQ6OnN0cmluZyBHZXRJbmNsdWRlcyhzdGQ6OnN0cmluZyBjb25zdCYgbCk7Ci0gIEJ5TGFuZ3VhZ2VNYXAgSW5jbHVkZXNCeUxhbmd1YWdlOwotICBzdGQ6OnN0cmluZyBHZXRNYW5pZmVzdHMoKTsKKyAgc3RkOjpzdHJpbmcgR2V0RmxhZ3MoY29uc3Qgc3RkOjpzdHJpbmcmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoID0gc3RkOjpzdHJpbmcoKSk7CisgIHN0ZDo6c3RyaW5nIEdldERlZmluZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICBzdGQ6OnN0cmluZyBHZXRJbmNsdWRlcyhzdGQ6OnN0cmluZyBjb25zdCYgbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CisgIHN0ZDo6c3RyaW5nIEdldE1hbmlmZXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKyAgc3RkOjpzdHJpbmcgR2V0QUlYRXhwb3J0cyhzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKTsKIAotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0TGlua2VkVGFyZ2V0RGlyZWN0b3JpZXMoKSBjb25zdDsKLSAgc3RkOjpzdHJpbmcgQ29tcHV0ZVRhcmdldENvbXBpbGVQREIoKSBjb25zdDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldExpbmtlZFRhcmdldERpcmVjdG9yaWVzKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworICBzdGQ6OnN0cmluZyBDb21wdXRlVGFyZ2V0Q29tcGlsZVBEQihjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKKworcHJpdmF0ZToKKyAgdXNpbmcgQnlMYW5ndWFnZU1hcCA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz47CisgIHN0cnVjdCBCeUNvbmZpZworICB7CisgICAgQnlMYW5ndWFnZU1hcCBGbGFnc0J5TGFuZ3VhZ2U7CisgICAgQnlMYW5ndWFnZU1hcCBEZWZpbmVzQnlMYW5ndWFnZTsKKyAgICBCeUxhbmd1YWdlTWFwIEluY2x1ZGVzQnlMYW5ndWFnZTsKKyAgfTsKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIEJ5Q29uZmlnPiBDb25maWdzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db21wdXRlQ29tcG9uZW50R3JhcGguY3h4IGIvU291cmNlL2NtQ29tcHV0ZUNvbXBvbmVudEdyYXBoLmN4eAppbmRleCBhZjI1N2VlLi42NTkxZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21wdXRlQ29tcG9uZW50R3JhcGguY3h4CisrKyBiL1NvdXJjZS9jbUNvbXB1dGVDb21wb25lbnRHcmFwaC5jeHgKQEAgLTgsNiArOCwxMiBAQAogY21Db21wdXRlQ29tcG9uZW50R3JhcGg6OmNtQ29tcHV0ZUNvbXBvbmVudEdyYXBoKEdyYXBoIGNvbnN0JiBpbnB1dCkKICAgOiBJbnB1dEdyYXBoKGlucHV0KQogeworfQorCitjbUNvbXB1dGVDb21wb25lbnRHcmFwaDo6fmNtQ29tcHV0ZUNvbXBvbmVudEdyYXBoKCkgPSBkZWZhdWx0OworCit2b2lkIGNtQ29tcHV0ZUNvbXBvbmVudEdyYXBoOjpDb21wdXRlKCkKK3sKICAgLy8gSWRlbnRpZnkgY29tcG9uZW50cy4KICAgdGhpcy0+VGFyamFuKCk7CiAKQEAgLTE3LDggKzIzLDYgQEAKICAgdGhpcy0+VHJhbnNmZXJFZGdlcygpOwogfQogCi1jbUNvbXB1dGVDb21wb25lbnRHcmFwaDo6fmNtQ29tcHV0ZUNvbXBvbmVudEdyYXBoKCkgPSBkZWZhdWx0OwotCiB2b2lkIGNtQ29tcHV0ZUNvbXBvbmVudEdyYXBoOjpUYXJqYW4oKQogewogICBpbnQgbiA9IHN0YXRpY19jYXN0PGludD4odGhpcy0+SW5wdXRHcmFwaC5zaXplKCkpOwpAQCAtMTIzLDcgKzEyNyw3IEBACiAgICAgICAgIC8vIFdlIGRvIG5vdCBhdHRlbXB0IHRvIGNvbWJpbmUgZHVwbGljYXRlIGVkZ2VzLCBidXQgaW5zdGVhZAogICAgICAgICAvLyBzdG9yZSB0aGUgaW50ZXItY29tcG9uZW50IGVkZ2VzIHdpdGggc3VpdGFibGUgbXVsdGlwbGljaXR5LgogICAgICAgICB0aGlzLT5Db21wb25lbnRHcmFwaFtpX2NvbXBvbmVudF0uZW1wbGFjZV9iYWNrKAotICAgICAgICAgIGpfY29tcG9uZW50LCBuaS5Jc1N0cm9uZygpLCBuaS5HZXRCYWNrdHJhY2UoKSk7CisgICAgICAgICAgal9jb21wb25lbnQsIG5pLklzU3Ryb25nKCksIG5pLklzQ3Jvc3MoKSwgbmkuR2V0QmFja3RyYWNlKCkpOwogICAgICAgfQogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tcHV0ZUNvbXBvbmVudEdyYXBoLmggYi9Tb3VyY2UvY21Db21wdXRlQ29tcG9uZW50R3JhcGguaAppbmRleCAyMDI4ODhjLi5iODczMTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21wdXRlQ29tcG9uZW50R3JhcGguaAorKysgYi9Tb3VyY2UvY21Db21wdXRlQ29tcG9uZW50R3JhcGguaApAQCAtMzEsNiArMzEsOSBAQAogICBjbUNvbXB1dGVDb21wb25lbnRHcmFwaChHcmFwaCBjb25zdCYgaW5wdXQpOwogICB+Y21Db21wdXRlQ29tcG9uZW50R3JhcGgoKTsKIAorICAvKiogUnVuIHRoZSBjb21wdXRhdGlvbi4gICovCisgIHZvaWQgQ29tcHV0ZSgpOworCiAgIC8qKiBHZXQgdGhlIGFkamFjZW5jeSBsaXN0IG9mIHRoZSBjb21wb25lbnQgZ3JhcGguICAqLwogICBHcmFwaCBjb25zdCYgR2V0Q29tcG9uZW50R3JhcGgoKSBjb25zdCB7IHJldHVybiB0aGlzLT5Db21wb25lbnRHcmFwaDsgfQogICBFZGdlTGlzdCBjb25zdCYgR2V0Q29tcG9uZW50R3JhcGhFZGdlcyhpbnQgYykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rRGVwZW5kcy5jeHggYi9Tb3VyY2UvY21Db21wdXRlTGlua0RlcGVuZHMuY3h4CmluZGV4IGNjZWY5YzguLjhjYTIxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rRGVwZW5kcy5jeHgKKysrIGIvU291cmNlL2NtQ29tcHV0ZUxpbmtEZXBlbmRzLmN4eApAQCAtMjUzLDEzICsyNTMsMTMgQEAKICAgLy8gQ29tcHV0ZSB0aGUgZmluYWwgc2V0IG9mIGxpbmsgZW50cmllcy4KICAgLy8gSXRlcmF0ZSBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIGNhbiBrZWVwIG9ubHkgdGhlIGxhc3Qgb2NjdXJyZW5jZQogICAvLyBvZiBhIHNoYXJlZCBsaWJyYXJ5LgotICBzdGQ6OnNldDxpbnQ+IGVtbWl0dGVkOworICBzdGQ6OnNldDxpbnQ+IGVtaXR0ZWQ7CiAgIGZvciAoaW50IGkgOiBjbVJldmVyc2VSYW5nZSh0aGlzLT5GaW5hbExpbmtPcmRlcikpIHsKICAgICBMaW5rRW50cnkgY29uc3QmIGUgPSB0aGlzLT5FbnRyeUxpc3RbaV07CiAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHQgPSBlLlRhcmdldDsKICAgICAvLyBFbnRyaWVzIHRoYXQgd2Uga25vdyB0aGUgbGlua2VyIHdpbGwgcmUtdXNlIGRvIG5vdCBuZWVkIHRvIGJlIHJlcGVhdGVkLgogICAgIGJvb2wgdW5pcXVpZnkgPSB0ICYmIHQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOwotICAgIGlmICghdW5pcXVpZnkgfHwgZW1taXR0ZWQuaW5zZXJ0KGkpLnNlY29uZCkgeworICAgIGlmICghdW5pcXVpZnkgfHwgZW1pdHRlZC5pbnNlcnQoaSkuc2Vjb25kKSB7CiAgICAgICB0aGlzLT5GaW5hbExpbmtFbnRyaWVzLnB1c2hfYmFjayhlKTsKICAgICB9CiAgIH0KQEAgLTQxMiw3ICs0MTIsNyBAQAogICAvLyBUaGlzIHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY3kgbXVzdCBmb2xsb3cgdGhlIGl0ZW0gdGhhdCBsaXN0ZWQKICAgLy8gaXQuCiAgIHRoaXMtPkVudHJ5Q29uc3RyYWludEdyYXBoW2RlcC5EZXBlbmRlckluZGV4XS5lbXBsYWNlX2JhY2soCi0gICAgaW5kZXgsIHRydWUsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSk7CisgICAgaW5kZXgsIHRydWUsIGZhbHNlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOwogCiAgIC8vIFRhcmdldCBpdGVtcyBtYXkgaGF2ZSB0aGVpciBvd24gZGVwZW5kZW5jaWVzLgogICBpZiAoZW50cnkuVGFyZ2V0KSB7CkBAIC01MTQsNyArNTE0LDcgQEAKICAgICAvLyBUaGUgZGVwZW5kZWUgbXVzdCBjb21lIGFmdGVyIHRoZSBkZXBlbmRlci4KICAgICBpZiAoZGVwZW5kZXJfaW5kZXggPj0gMCkgewogICAgICAgdGhpcy0+RW50cnlDb25zdHJhaW50R3JhcGhbZGVwZW5kZXJfaW5kZXhdLmVtcGxhY2VfYmFjaygKLSAgICAgICAgZGVwZW5kZWVfaW5kZXgsIGZhbHNlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOworICAgICAgICBkZXBlbmRlZV9pbmRleCwgZmFsc2UsIGZhbHNlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAvLyBUaGlzIGlzIGEgZGlyZWN0IGRlcGVuZGVuY3kgb2YgdGhlIHRhcmdldCBiZWluZyBsaW5rZWQuCiAgICAgICB0aGlzLT5PcmlnaW5hbEVudHJpZXMucHVzaF9iYWNrKGRlcGVuZGVlX2luZGV4KTsKQEAgLTU4Nyw3ICs1ODcsNyBAQAogICAgIGNtR3JhcGhFZGdlTGlzdCYgZWRnZXMgPSB0aGlzLT5FbnRyeUNvbnN0cmFpbnRHcmFwaFtkZXBlbmRlcl9pbmRleF07CiAgICAgZWRnZXMucmVzZXJ2ZShlZGdlcy5zaXplKCkgKyBjb21tb24uc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8gY29uc3QmIGMgOiBjb21tb24pIHsKLSAgICAgIGVkZ2VzLmVtcGxhY2VfYmFjayhjLCB0cnVlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOworICAgICAgZWRnZXMuZW1wbGFjZV9iYWNrKGMsIHRydWUsIGZhbHNlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOwogICAgIH0KICAgfQogfQpAQCAtNjI2LDYgKzYyNiw3IEBACiAgIC8vIGNvbnN0cmFpbnRzIGRpc2FsbG93IGl0LgogICB0aGlzLT5DQ0cgPQogICAgIGNtOjptYWtlX3VuaXF1ZTxjbUNvbXB1dGVDb21wb25lbnRHcmFwaD4odGhpcy0+RW50cnlDb25zdHJhaW50R3JhcGgpOworICB0aGlzLT5DQ0ctPkNvbXB1dGUoKTsKIAogICAvLyBUaGUgY29tcG9uZW50IGdyYXBoIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWN5Y2xpYy4gIFN0YXJ0IGEgREZTCiAgIC8vIGZyb20gZXZlcnkgZW50cnkgdG8gY29tcHV0ZSBhIHRvcG9sb2dpY2FsIG9yZGVyIGZvciB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rRGVwZW5kcy5oIGIvU291cmNlL2NtQ29tcHV0ZUxpbmtEZXBlbmRzLmgKaW5kZXggNDNiZmQxZC4uZTgwNmRmZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ29tcHV0ZUxpbmtEZXBlbmRzLmgKKysrIGIvU291cmNlL2NtQ29tcHV0ZUxpbmtEZXBlbmRzLmgKQEAgLTcsMTIgKzcsMTEgQEAKIAogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cXVldWU+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlIDxxdWV1ZT4KLQogI2luY2x1ZGUgImNtR3JhcGhBZGphY2VuY3lMaXN0LmgiCiAjaW5jbHVkZSAiY21MaW5rSXRlbS5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5jeHggYi9Tb3VyY2UvY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmN4eAppbmRleCBmM2RkODQwLi40M2NjZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmN4eAorKysgYi9Tb3VyY2UvY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmN4eApAQCAtOCw3ICs4LDkgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0RlcGVuZHMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCkBAIC0xOSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY21PcmRlckRpcmVjdG9yaWVzLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTI1NiwxMSArMjU5LDEwIEBACiAgICAgIkZJTkRfTElCUkFSWV9VU0VfT1BFTkJTRF9WRVJTSU9OSU5HIik7CiAKICAgLy8gQWxsb2NhdGUgaW50ZXJuYWxzLgotICB0aGlzLT5PcmRlckxpbmtlclNlYXJjaFBhdGggPSBuZXcgY21PcmRlckRpcmVjdG9yaWVzKAorICB0aGlzLT5PcmRlckxpbmtlclNlYXJjaFBhdGggPSBjbTo6bWFrZV91bmlxdWU8Y21PcmRlckRpcmVjdG9yaWVzPigKICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IsIHRhcmdldCwgImxpbmtlciBzZWFyY2ggcGF0aCIpOwotICB0aGlzLT5PcmRlclJ1bnRpbWVTZWFyY2hQYXRoID0gbmV3IGNtT3JkZXJEaXJlY3RvcmllcygKKyAgdGhpcy0+T3JkZXJSdW50aW1lU2VhcmNoUGF0aCA9IGNtOjptYWtlX3VuaXF1ZTxjbU9yZGVyRGlyZWN0b3JpZXM+KAogICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvciwgdGFyZ2V0LCAicnVudGltZSBzZWFyY2ggcGF0aCIpOwotICB0aGlzLT5PcmRlckRlcGVuZGVudFJQYXRoID0gbnVsbHB0cjsKIAogICAvLyBHZXQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yIGxpbmtpbmcgdGhpcyB0YXJnZXQuCiAgIHRoaXMtPkxpbmtMYW5ndWFnZSA9IHRoaXMtPlRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UoY29uZmlnKTsKQEAgLTM1OCw3ICszNjAsNyBAQAogICAgIHRoaXMtPlNoYXJlZERlcGVuZGVuY3lNb2RlID0gU2hhcmVkRGVwTW9kZUxpYkRpcjsKICAgfSBlbHNlIGlmICghdGhpcy0+UlBhdGhMaW5rRmxhZy5lbXB0eSgpKSB7CiAgICAgdGhpcy0+U2hhcmVkRGVwZW5kZW5jeU1vZGUgPSBTaGFyZWREZXBNb2RlRGlyOwotICAgIHRoaXMtPk9yZGVyRGVwZW5kZW50UlBhdGggPSBuZXcgY21PcmRlckRpcmVjdG9yaWVzKAorICAgIHRoaXMtPk9yZGVyRGVwZW5kZW50UlBhdGggPSBjbTo6bWFrZV91bmlxdWU8Y21PcmRlckRpcmVjdG9yaWVzPigKICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvciwgdGFyZ2V0LCAiZGVwZW5kZW50IGxpYnJhcnkgcGF0aCIpOwogICB9CiAKQEAgLTQwMCwxMiArNDAyLDcgQEAKICAgICAiQ01BS0VfUE9MSUNZX1dBUk5JTkdfQ01QMDA2MCIpOwogfQogCi1jbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246On5jbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24oKQotewotICBkZWxldGUgdGhpcy0+T3JkZXJMaW5rZXJTZWFyY2hQYXRoOwotICBkZWxldGUgdGhpcy0+T3JkZXJSdW50aW1lU2VhcmNoUGF0aDsKLSAgZGVsZXRlIHRoaXMtPk9yZGVyRGVwZW5kZW50UlBhdGg7Ci19CitjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246On5jbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24oKSA9IGRlZmF1bHQ7CiAKIHZvaWQgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpBcHBlbmRWYWx1ZXMoCiAgIHN0ZDo6c3RyaW5nJiByZXN1bHQsIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4mIHZhbHVlcykKQEAgLTUxNyw3ICs1MTQsNyBAQAogCiAgIC8vIFJlc3RvcmUgdGhlIHRhcmdldCBsaW5rIHR5cGUgc28gdGhlIGNvcnJlY3Qgc3lzdGVtIHJ1bnRpbWUKICAgLy8gbGlicmFyaWVzIGFyZSBmb3VuZC4KLSAgY29uc3QgY2hhciogbHNzID0gdGhpcy0+VGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTElOS19TRUFSQ0hfRU5EX1NUQVRJQyIpOworICBjbVByb3AgbHNzID0gdGhpcy0+VGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTElOS19TRUFSQ0hfRU5EX1NUQVRJQyIpOwogICBpZiAoY21Jc09uKGxzcykpIHsKICAgICB0aGlzLT5TZXRDdXJyZW50TGlua1R5cGUoTGlua1N0YXRpYyk7CiAgIH0gZWxzZSB7CkBAIC01NzMsNiArNTcwLDE1IEBACiAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpMaW5rQ2xvc3VyZSBjb25zdCogbGMgPQogICAgIHRoaXMtPlRhcmdldC0+R2V0TGlua0Nsb3N1cmUodGhpcy0+Q29uZmlnKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGkgOiBsYy0+TGFuZ3VhZ2VzKSB7CisKKyAgICBpZiAobGkgPT0gIkNVREEiKSB7CisgICAgICAvLyBUaGVzZSBuZWVkIHRvIGdvIGJlZm9yZSB0aGUgb3RoZXIgaW1wbGljaXQgbGluayBpbmZvcm1hdGlvbgorICAgICAgLy8gYXMgdGhleSBjb3VsZCByZXF1aXJlIHN5bWJvbHMgZnJvbSB0aG9zZSBvdGhlciBsaWJyYXJ5CisgICAgICAvLyBDdXJyZW50bHkgcmVzdHJpY3RlZCB0byBDVURBIGFzIGl0IGlzIHRoZSBvbmx5IGxhbmd1YWdlCisgICAgICAvLyB3ZSBoYXZlIGRvY3VtZW50ZWQgcnVudGltZSBiZWhhdmlvciBjb250cm9scyBmb3IKKyAgICAgIHRoaXMtPkFkZFJ1bnRpbWVMaW5rTGlicmFyeShsaSk7CisgICAgfQorCiAgICAgLy8gU2tpcCB0aG9zZSBvZiB0aGUgbGlua2VyIGxhbmd1YWdlLiAgVGhleSBhcmUgaW1wbGljaXQuCiAgICAgaWYgKGxpICE9IHRoaXMtPkxpbmtMYW5ndWFnZSkgewogICAgICAgdGhpcy0+QWRkSW1wbGljaXRMaW5rSW5mbyhsaSk7CkBAIC01ODAsNiArNTg2LDI0IEBACiAgIH0KIH0KIAordm9pZCBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246OkFkZFJ1bnRpbWVMaW5rTGlicmFyeShzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykKK3sKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHJ1bnRpbWVMaWJyYXJ5ID0KKyAgICB0aGlzLT5UYXJnZXQtPkdldFJ1bnRpbWVMaW5rTGlicmFyeShsYW5nLCB0aGlzLT5Db25maWcpOworICBpZiAocnVudGltZUxpYnJhcnkuZW1wdHkoKSkgeworICAgIHJldHVybjsKKyAgfQorICBpZiAoY29uc3QgY2hhciogcnVudGltZUxpbmtPcHRpb25zID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oCisgICAgICAgICJDTUFLRV8iICsgbGFuZyArICJfUlVOVElNRV9MSUJSQVJZX0xJTktfT1BUSU9OU18iICsgcnVudGltZUxpYnJhcnkpKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpYnNWZWMgPSBjbUV4cGFuZGVkTGlzdChydW50aW1lTGlua09wdGlvbnMpOworICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBsaWJzVmVjKSB7CisgICAgICBpZiAoIWNtOjpjb250YWlucyh0aGlzLT5JbXBsaWNpdExpbmtMaWJzLCBpKSkgeworICAgICAgICB0aGlzLT5BZGRJdGVtKGksIG51bGxwdHIpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCiB2b2lkIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6QWRkSW1wbGljaXRMaW5rSW5mbyhzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykKIHsKICAgLy8gQWRkIGxpYnJhcmllcyBmb3IgdGhpcyBsYW5ndWFnZSB0aGF0IGFyZSBub3QgaW1wbGllZCBieSB0aGUKQEAgLTU4OCw3ICs2MTIsNyBAQAogICBpZiAoY29uc3QgY2hhciogbGlicyA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGxpYlZhcikpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlic1ZlYyA9IGNtRXhwYW5kZWRMaXN0KGxpYnMpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBsaWJzVmVjKSB7Ci0gICAgICBpZiAoIWNtQ29udGFpbnModGhpcy0+SW1wbGljaXRMaW5rTGlicywgaSkpIHsKKyAgICAgIGlmICghY206OmNvbnRhaW5zKHRoaXMtPkltcGxpY2l0TGlua0xpYnMsIGkpKSB7CiAgICAgICAgIHRoaXMtPkFkZEl0ZW0oaSwgbnVsbHB0cik7CiAgICAgICB9CiAgICAgfQpAQCAtNzQ5LDEwICs3NzMsMTAgQEAKICAgaWYgKHRoaXMtPlNoYXJlZERlcGVuZGVuY3lNb2RlID09IFNoYXJlZERlcE1vZGVMaWJEaXIgJiYKICAgICAgICF0aGlzLT5MaW5rV2l0aFJ1bnRpbWVQYXRoIC8qIEFkZExpYnJhcnlSdW50aW1lSW5mbyBhZGRzIGl0ICovKSB7CiAgICAgLy8gQWRkIHRoZSBpdGVtIHRvIHRoZSBsaW5rZXIgc2VhcmNoIHBhdGguCi0gICAgb3JkZXIgPSB0aGlzLT5PcmRlckxpbmtlclNlYXJjaFBhdGg7CisgICAgb3JkZXIgPSB0aGlzLT5PcmRlckxpbmtlclNlYXJjaFBhdGguZ2V0KCk7CiAgIH0gZWxzZSBpZiAodGhpcy0+U2hhcmVkRGVwZW5kZW5jeU1vZGUgPT0gU2hhcmVkRGVwTW9kZURpcikgewogICAgIC8vIEFkZCB0aGUgaXRlbSB0byB0aGUgc2VwYXJhdGUgZGVwZW5kZW50IGxpYnJhcnkgc2VhcmNoIHBhdGguCi0gICAgb3JkZXIgPSB0aGlzLT5PcmRlckRlcGVuZGVudFJQYXRoOworICAgIG9yZGVyID0gdGhpcy0+T3JkZXJEZXBlbmRlbnRSUGF0aC5nZXQoKTsKICAgfQogICBpZiAob3JkZXIpIHsKICAgICBpZiAodGd0KSB7CkBAIC04MDgsMTUgKzgzMiwxNCBAQAogCiAgIC8vIFdlIGNhbiBzdXBwb3J0IGxpbmsgdHlwZSBzd2l0Y2hpbmcgb25seSBpZiBhbGwgbmVlZGVkIGZsYWdzIGFyZQogICAvLyBrbm93bi4KLSAgaWYgKHN0YXRpY19saW5rX3R5cGVfZmxhZyAmJiAqc3RhdGljX2xpbmtfdHlwZV9mbGFnICYmCi0gICAgICBzaGFyZWRfbGlua190eXBlX2ZsYWcgJiYgKnNoYXJlZF9saW5rX3R5cGVfZmxhZykgeworICBpZiAoY21Ob25lbXB0eShzdGF0aWNfbGlua190eXBlX2ZsYWcpICYmIGNtTm9uZW1wdHkoc2hhcmVkX2xpbmtfdHlwZV9mbGFnKSkgewogICAgIHRoaXMtPkxpbmtUeXBlRW5hYmxlZCA9IHRydWU7CiAgICAgdGhpcy0+U3RhdGljTGlua1R5cGVGbGFnID0gc3RhdGljX2xpbmtfdHlwZV9mbGFnOwogICAgIHRoaXMtPlNoYXJlZExpbmtUeXBlRmxhZyA9IHNoYXJlZF9saW5rX3R5cGVfZmxhZzsKICAgfQogCiAgIC8vIExvb2t1cCB0aGUgc3RhcnRpbmcgbGluayB0eXBlIGZyb20gdGhlIHRhcmdldCAobGlua2VkIHN0YXRpY2FsbHk/KS4KLSAgY29uc3QgY2hhciogbHNzID0gdGhpcy0+VGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTElOS19TRUFSQ0hfU1RBUlRfU1RBVElDIik7CisgIGNtUHJvcCBsc3MgPSB0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX1NFQVJDSF9TVEFSVF9TVEFUSUMiKTsKICAgdGhpcy0+U3RhcnRMaW5rVHlwZSA9IGNtSXNPbihsc3MpID8gTGlua1N0YXRpYyA6IExpbmtTaGFyZWQ7CiAgIHRoaXMtPkN1cnJlbnRMaW5rVHlwZSA9IHRoaXMtPlN0YXJ0TGlua1R5cGU7CiB9CkBAIC04MjUsMzEgKzg0OCwzMSBAQAogewogICAvLyBHZXQgcG9zc2libGUgbGlicmFyeSBuYW1lIHByZWZpeGVzLgogICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPk1ha2VmaWxlOwotICB0aGlzLT5BZGRMaW5rUHJlZml4KG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9TVEFUSUNfTElCUkFSWV9QUkVGSVgiKSk7Ci0gIHRoaXMtPkFkZExpbmtQcmVmaXgobWYtPkdldERlZmluaXRpb24oIkNNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWCIpKTsKKyAgdGhpcy0+QWRkTGlua1ByZWZpeChtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX1NUQVRJQ19MSUJSQVJZX1BSRUZJWCIpKTsKKyAgdGhpcy0+QWRkTGlua1ByZWZpeChtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWCIpKTsKIAogICAvLyBJbXBvcnQgbGlicmFyeSBuYW1lcyBzaG91bGQgYmUgbWF0Y2hlZCBhbmQgdHJlYXRlZCBhcyBzaGFyZWQKICAgLy8gbGlicmFyaWVzIGZvciB0aGUgcHVycG9zZXMgb2YgbGlua2luZy4KLSAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfSU1QT1JUX0xJQlJBUllfU1VGRklYIiksCisgIHRoaXMtPkFkZExpbmtFeHRlbnNpb24obWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9JTVBPUlRfTElCUkFSWV9TVUZGSVgiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rU2hhcmVkKTsKLSAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfU1RBVElDX0xJQlJBUllfU1VGRklYIiksCisgIHRoaXMtPkFkZExpbmtFeHRlbnNpb24obWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVgiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rU3RhdGljKTsKLSAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfU0hBUkVEX0xJQlJBUllfU1VGRklYIiksCisgIHRoaXMtPkFkZExpbmtFeHRlbnNpb24obWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9TSEFSRURfTElCUkFSWV9TVUZGSVgiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rU2hhcmVkKTsKLSAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfTElOS19MSUJSQVJZX1NVRkZJWCIpLAorICB0aGlzLT5BZGRMaW5rRXh0ZW5zaW9uKG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfTElOS19MSUJSQVJZX1NVRkZJWCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtVbmtub3duKTsKICAgaWYgKGNvbnN0IGNoYXIqIGxpbmtTdWZmaXhlcyA9CiAgICAgICAgIG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9FWFRSQV9MSU5LX0VYVEVOU0lPTlMiKSkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rU3VmZml4VmVjID0gY21FeHBhbmRlZExpc3QobGlua1N1ZmZpeGVzKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogbGlua1N1ZmZpeFZlYykgewotICAgICAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihpLmNfc3RyKCksIExpbmtVbmtub3duKTsKKyAgICAgIHRoaXMtPkFkZExpbmtFeHRlbnNpb24oaSwgTGlua1Vua25vd24pOwogICAgIH0KICAgfQogICBpZiAoY29uc3QgY2hhciogc2hhcmVkU3VmZml4ZXMgPQogICAgICAgICBtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfRVhUUkFfU0hBUkVEX0xJQlJBUllfU1VGRklYRVMiKSkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzaGFyZWRTdWZmaXhWZWMgPSBjbUV4cGFuZGVkTGlzdChzaGFyZWRTdWZmaXhlcyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IHNoYXJlZFN1ZmZpeFZlYykgewotICAgICAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihpLmNfc3RyKCksIExpbmtTaGFyZWQpOworICAgICAgdGhpcy0+QWRkTGlua0V4dGVuc2lvbihpLCBMaW5rU2hhcmVkKTsKICAgICB9CiAgIH0KIApAQCAtODc5LDcgKzkwMiw3IEBACiAjaWZkZWYgQ01fQ09NUFVURV9MSU5LX0lORk9fREVCVUcKICAgZnByaW50ZihzdGRlcnIsICJhbnkgcmVnZXggWyVzXVxuIiwgcmVnX2FueS5jX3N0cigpKTsKICNlbmRpZgotICB0aGlzLT5FeHRyYWN0QW55TGlicmFyeU5hbWUuY29tcGlsZShyZWdfYW55LmNfc3RyKCkpOworICB0aGlzLT5FeHRyYWN0QW55TGlicmFyeU5hbWUuY29tcGlsZShyZWdfYW55KTsKIAogICAvLyBDcmVhdGUgYSByZWdleCB0byBtYXRjaCBzdGF0aWMgbGlicmFyeSBuYW1lcy4KICAgaWYgKCF0aGlzLT5TdGF0aWNMaW5rRXh0ZW5zaW9ucy5lbXB0eSgpKSB7CkBAIC04ODgsNyArOTExLDcgQEAKICNpZmRlZiBDTV9DT01QVVRFX0xJTktfSU5GT19ERUJVRwogICAgIGZwcmludGYoc3RkZXJyLCAic3RhdGljIHJlZ2V4IFslc11cbiIsIHJlZ19zdGF0aWMuY19zdHIoKSk7CiAjZW5kaWYKLSAgICB0aGlzLT5FeHRyYWN0U3RhdGljTGlicmFyeU5hbWUuY29tcGlsZShyZWdfc3RhdGljLmNfc3RyKCkpOworICAgIHRoaXMtPkV4dHJhY3RTdGF0aWNMaWJyYXJ5TmFtZS5jb21waWxlKHJlZ19zdGF0aWMpOwogICB9CiAKICAgLy8gQ3JlYXRlIGEgcmVnZXggdG8gbWF0Y2ggc2hhcmVkIGxpYnJhcnkgbmFtZXMuCkBAIC05MDAsMjAgKzkyMywyMSBAQAogI2lmZGVmIENNX0NPTVBVVEVfTElOS19JTkZPX0RFQlVHCiAgICAgZnByaW50ZihzdGRlcnIsICJzaGFyZWQgcmVnZXggWyVzXVxuIiwgcmVnX3NoYXJlZC5jX3N0cigpKTsKICNlbmRpZgotICAgIHRoaXMtPkV4dHJhY3RTaGFyZWRMaWJyYXJ5TmFtZS5jb21waWxlKHJlZ19zaGFyZWQuY19zdHIoKSk7CisgICAgdGhpcy0+RXh0cmFjdFNoYXJlZExpYnJhcnlOYW1lLmNvbXBpbGUocmVnX3NoYXJlZCk7CiAgIH0KIH0KIAotdm9pZCBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246OkFkZExpbmtQcmVmaXgoY29uc3QgY2hhciogcCkKK3ZvaWQgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpBZGRMaW5rUHJlZml4KHN0ZDo6c3RyaW5nIGNvbnN0JiBwKQogewotICBpZiAocCAmJiAqcCkgeworICBpZiAoIXAuZW1wdHkoKSkgewogICAgIHRoaXMtPkxpbmtQcmVmaXhlcy5pbnNlcnQocCk7CiAgIH0KIH0KIAotdm9pZCBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246OkFkZExpbmtFeHRlbnNpb24oY29uc3QgY2hhciogZSwgTGlua1R5cGUgdHlwZSkKK3ZvaWQgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpBZGRMaW5rRXh0ZW5zaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1R5cGUgdHlwZSkKIHsKLSAgaWYgKGUgJiYgKmUpIHsKKyAgaWYgKCFlLmVtcHR5KCkpIHsKICAgICBpZiAodHlwZSA9PSBMaW5rU3RhdGljKSB7CiAgICAgICB0aGlzLT5TdGF0aWNMaW5rRXh0ZW5zaW9ucy5lbXBsYWNlX2JhY2soZSk7CiAgICAgfQpAQCAtOTM4LDcgKzk2Miw3IEBACiAgICAgLy8gU3RvcmUgdGhpcyBleHRlbnNpb24gY2hvaWNlIHdpdGggdGhlICIuIiBlc2NhcGVkLgogICAgIGxpYmV4dCArPSAiXFwiOwogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQotICAgIGxpYmV4dCArPSB0aGlzLT5Ob0Nhc2VFeHByZXNzaW9uKGkuY19zdHIoKSk7CisgICAgbGliZXh0ICs9IHRoaXMtPk5vQ2FzZUV4cHJlc3Npb24oaSk7CiAjZWxzZQogICAgIGxpYmV4dCArPSBpOwogI2VuZGlmCkBAIC05NTYsMjAgKzk4MCwxOSBAQAogICByZXR1cm4gbGliZXh0OwogfQogCi1zdGQ6OnN0cmluZyBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246Ok5vQ2FzZUV4cHJlc3Npb24oY29uc3QgY2hhciogc3RyKQorc3RkOjpzdHJpbmcgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpOb0Nhc2VFeHByZXNzaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIpCiB7CiAgIHN0ZDo6c3RyaW5nIHJldDsKLSAgY29uc3QgY2hhciogcyA9IHN0cjsKLSAgd2hpbGUgKCpzKSB7Ci0gICAgaWYgKCpzID09ICcuJykgewotICAgICAgcmV0ICs9ICpzOworICByZXQucmVzZXJ2ZShzdHIuc2l6ZSgpICogNCk7CisgIGZvciAoY2hhciBjIDogc3RyKSB7CisgICAgaWYgKGMgPT0gJy4nKSB7CisgICAgICByZXQgKz0gYzsKICAgICB9IGVsc2UgewotICAgICAgcmV0ICs9ICJbIjsKLSAgICAgIHJldCArPSBzdGF0aWNfY2FzdDxjaGFyPih0b2xvd2VyKCpzKSk7Ci0gICAgICByZXQgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4odG91cHBlcigqcykpOwotICAgICAgcmV0ICs9ICJdIjsKKyAgICAgIHJldCArPSAnWyc7CisgICAgICByZXQgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4odG9sb3dlcihjKSk7CisgICAgICByZXQgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4odG91cHBlcihjKSk7CisgICAgICByZXQgKz0gJ10nOwogICAgIH0KLSAgICBzKys7CiAgIH0KICAgcmV0dXJuIHJldDsKIH0KQEAgLTEwMjQsOCArMTA0Nyw4IEBACiAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgMi40IGluY2x1ZGUgdGhlIGl0ZW0ncyBkaXJlY3RvcnkgaW4KICAgLy8gdGhlIGxpbmtlciBzZWFyY2ggcGF0aC4KICAgaWYgKHRoaXMtPk9sZExpbmtEaXJNb2RlICYmICF0YXJnZXQtPklzRnJhbWV3b3JrT25BcHBsZSgpICYmCi0gICAgICAhY21Db250YWlucyh0aGlzLT5PbGRMaW5rRGlyTWFzaywKLSAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChpdGVtLlZhbHVlKSkpIHsKKyAgICAgICFjbTo6Y29udGFpbnModGhpcy0+T2xkTGlua0Rpck1hc2ssCisgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChpdGVtLlZhbHVlKSkpIHsKICAgICB0aGlzLT5PbGRMaW5rRGlySXRlbXMucHVzaF9iYWNrKGl0ZW0uVmFsdWUpOwogICB9CiAKQEAgLTEwNzgsOCArMTEwMSw4IEBACiAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgMi40IGluY2x1ZGUgdGhlIGl0ZW0ncyBkaXJlY3RvcnkgaW4KICAgLy8gdGhlIGxpbmtlciBzZWFyY2ggcGF0aC4KICAgaWYgKHRoaXMtPk9sZExpbmtEaXJNb2RlICYmCi0gICAgICAhY21Db250YWlucyh0aGlzLT5PbGRMaW5rRGlyTWFzaywKLSAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChpdGVtLlZhbHVlKSkpIHsKKyAgICAgICFjbTo6Y29udGFpbnModGhpcy0+T2xkTGlua0Rpck1hc2ssCisgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChpdGVtLlZhbHVlKSkpIHsKICAgICB0aGlzLT5PbGRMaW5rRGlySXRlbXMucHVzaF9iYWNrKGl0ZW0uVmFsdWUpOwogICB9CiAKQEAgLTEwOTgsNyArMTEyMSw3IEBACiAKICAgLy8gQ2hlY2sgaWYgdGhpcyBpdGVtIGlzIGluIGFuIGltcGxpY2l0IGxpbmsgZGlyZWN0b3J5LgogICBzdGQ6OnN0cmluZyBkaXIgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoaXRlbSk7Ci0gIGlmICghY21Db250YWlucyh0aGlzLT5JbXBsaWNpdExpbmtEaXJzLCBkaXIpKSB7CisgIGlmICghY206OmNvbnRhaW5zKHRoaXMtPkltcGxpY2l0TGlua0RpcnMsIGRpcikpIHsKICAgICAvLyBPbmx5IGxpYnJhcmllcyBpbiBpbXBsaWNpdCBsaW5rIGRpcmVjdG9yaWVzIGFyZSBjb252ZXJ0ZWQgdG8KICAgICAvLyBwYXRobGVzcyBpdGVtcy4KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTYxLDcgKzExODQsOCBAQAogICAgIC8vIENNUDAwMDMgc28gcHV0IGl0IGluIE9sZFVzZXJGbGFnSXRlbXMsIGlmIGl0IGlzIG5vdCBhIC1sCiAgICAgLy8gb3IgLVdsLC1sICgtZnJhbWV3b3JrIC1wdGhyZWFkKSwgdGhlbiBhbGxvdyBpdCB3aXRob3V0IGEKICAgICAvLyBDTVAwMDAzIGFzIC1MIHdpbGwgbm90IGFmZmVjdCB0aG9zZSBvdGhlciBsaW5rZXIgZmxhZ3MKLSAgICBpZiAoaXRlbS5WYWx1ZS5maW5kKCItbCIpID09IDAgfHwgaXRlbS5WYWx1ZS5maW5kKCItV2wsLWwiKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChpdGVtLlZhbHVlLCAiLWwiKSB8fAorICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgoaXRlbS5WYWx1ZSwgIi1XbCwtbCIpKSB7CiAgICAgICAvLyBUaGlzIGlzIGEgbGlua2VyIG9wdGlvbiBwcm92aWRlZCBieSB0aGUgdXNlci4KICAgICAgIHRoaXMtPk9sZFVzZXJGbGFnSXRlbXMucHVzaF9iYWNrKGl0ZW0uVmFsdWUpOwogICAgIH0KQEAgLTEzMDUsMTggKzEzMjksMTMgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGltcGxpY2l0RGlyVmVjOwogCiAgIC8vIEdldCBwbGF0Zm9ybS13aWRlIGltcGxpY2l0IGRpcmVjdG9yaWVzLgotICBpZiAoY29uc3QgY2hhciogaW1wbGljaXRMaW5rcyA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKAotICAgICAgICAiQ01BS0VfUExBVEZPUk1fSU1QTElDSVRfTElOS19GUkFNRVdPUktfRElSRUNUT1JJRVMiKSkgewotICAgIGNtRXhwYW5kTGlzdChpbXBsaWNpdExpbmtzLCBpbXBsaWNpdERpclZlYyk7Ci0gIH0KKyAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoCisgICAgIkNNQUtFX1BMQVRGT1JNX0lNUExJQ0lUX0xJTktfRlJBTUVXT1JLX0RJUkVDVE9SSUVTIiwgaW1wbGljaXREaXJWZWMpOwogCiAgIC8vIEdldCBsYW5ndWFnZS1zcGVjaWZpYyBpbXBsaWNpdCBkaXJlY3Rvcmllcy4KICAgc3RkOjpzdHJpbmcgaW1wbGljaXREaXJWYXIgPSBjbVN0ckNhdCgKICAgICAiQ01BS0VfIiwgdGhpcy0+TGlua0xhbmd1YWdlLCAiX0lNUExJQ0lUX0xJTktfRlJBTUVXT1JLX0RJUkVDVE9SSUVTIik7Ci0gIGlmIChjb25zdCBjaGFyKiBpbXBsaWNpdERpcnMgPQotICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihpbXBsaWNpdERpclZhcikpIHsKLSAgICBjbUV4cGFuZExpc3QoaW1wbGljaXREaXJzLCBpbXBsaWNpdERpclZlYyk7Ci0gIH0KKyAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoaW1wbGljaXREaXJWYXIsIGltcGxpY2l0RGlyVmVjKTsKIAogICB0aGlzLT5GcmFtZXdvcmtQYXRoc0VtbWl0dGVkLmluc2VydChpbXBsaWNpdERpclZlYy5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdERpclZlYy5lbmQoKSk7CkBAIC0xNDAwLDcgKzE0MTksNiBAQAogICAgIH0KICAgICBjYXNlIGNtUG9saWNpZXM6Ok9MRDoKICAgICAgIC8vIE9MRCBiZWhhdmlvciBkb2VzIG5vdCB3YXJuLgotICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbVBvbGljaWVzOjpORVc6CiAgICAgICAvLyBORVcgYmVoYXZpb3Igd2lsbCBub3QgZ2V0IGhlcmUuCiAgICAgICBicmVhazsKQEAgLTE1MzAsMTAgKzE1NDgsOCBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW1wbGljaXREaXJWZWM7CiAKICAgLy8gR2V0IHBsYXRmb3JtLXdpZGUgaW1wbGljaXQgZGlyZWN0b3JpZXMuCi0gIGlmIChjb25zdCBjaGFyKiBpbXBsaWNpdExpbmtzID0gKHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKAotICAgICAgICAiQ01BS0VfUExBVEZPUk1fSU1QTElDSVRfTElOS19ESVJFQ1RPUklFUyIpKSkgewotICAgIGNtRXhwYW5kTGlzdChpbXBsaWNpdExpbmtzLCBpbXBsaWNpdERpclZlYyk7Ci0gIH0KKyAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX1BMQVRGT1JNX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdERpclZlYyk7CiAKICAgLy8gQXBwZW5kIGxpYnJhcnkgYXJjaGl0ZWN0dXJlIHRvIGFsbCBpbXBsaWNpdCBwbGF0Zm9ybSBkaXJlY3RvcmllcwogICAvLyBhbmQgYWRkIHRoZW0gdG8gdGhlIHNldApAQCAtMTU0NywxMCArMTU2Myw3IEBACiAgIC8vIEdldCBsYW5ndWFnZS1zcGVjaWZpYyBpbXBsaWNpdCBkaXJlY3Rvcmllcy4KICAgc3RkOjpzdHJpbmcgaW1wbGljaXREaXJWYXIgPQogICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5MaW5rTGFuZ3VhZ2UsICJfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFUyIpOwotICBpZiAoY29uc3QgY2hhciogaW1wbGljaXREaXJzID0KLSAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oaW1wbGljaXREaXJWYXIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KGltcGxpY2l0RGlycywgaW1wbGljaXREaXJWZWMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KGltcGxpY2l0RGlyVmFyLCBpbXBsaWNpdERpclZlYyk7CiAKICAgLy8gU3RvcmUgaW1wbGljaXQgbGluayBkaXJlY3Rvcmllcy4KICAgdGhpcy0+SW1wbGljaXRMaW5rRGlycy5pbnNlcnQoaW1wbGljaXREaXJWZWMuYmVnaW4oKSwgaW1wbGljaXREaXJWZWMuZW5kKCkpOwpAQCAtMTU1OSwxMCArMTU3Miw3IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbXBsaWNpdExpYlZlYzsKICAgc3RkOjpzdHJpbmcgaW1wbGljaXRMaWJWYXIgPQogICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5MaW5rTGFuZ3VhZ2UsICJfSU1QTElDSVRfTElOS19MSUJSQVJJRVMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGltcGxpY2l0TGlicyA9Ci0gICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGltcGxpY2l0TGliVmFyKSkgewotICAgIGNtRXhwYW5kTGlzdChpbXBsaWNpdExpYnMsIGltcGxpY2l0TGliVmVjKTsKLSAgfQorICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdChpbXBsaWNpdExpYlZhciwgaW1wbGljaXRMaWJWZWMpOwogCiAgIC8vIFN0b3JlIGltcGxpY2l0IGxpbmsgbGlicmFyaWVzLgogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtIDogaW1wbGljaXRMaWJWZWMpIHsKQEAgLTE1NzQsMTAgKzE1ODQsOCBAQAogICB9CiAKICAgLy8gR2V0IHBsYXRmb3JtIHNwZWNpZmljIHJwYXRoIGxpbmsgZGlyZWN0b3JpZXMKLSAgaWYgKGNvbnN0IGNoYXIqIHJwYXRoRGlycyA9Ci0gICAgICAgICh0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfUExBVEZPUk1fUlVOVElNRV9QQVRIIikpKSB7Ci0gICAgY21FeHBhbmRMaXN0KHJwYXRoRGlycywgdGhpcy0+UnVudGltZUxpbmtEaXJzKTsKLSAgfQorICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfUExBVEZPUk1fUlVOVElNRV9QQVRIIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UnVudGltZUxpbmtEaXJzKTsKIH0KIAogc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JgpAQCAtMTY3OCw3ICsxNjg2LDcgQEAKICAgfQogfQogCi1zdGF0aWMgdm9pZCBjbUNMSV9FeHBhbmRMaXN0VW5pcXVlKGNvbnN0IGNoYXIqIHN0ciwKK3N0YXRpYyB2b2lkIGNtQ0xJX0V4cGFuZExpc3RVbmlxdWUoc3RkOjpzdHJpbmcgY29uc3QmIHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgZW1pdHRlZCkKIHsKQEAgLTE3MjUsNyArMTczMyw3IEBACiAgIGlmICh1c2VfaW5zdGFsbF9ycGF0aCkgewogICAgIHN0ZDo6c3RyaW5nIGluc3RhbGxfcnBhdGg7CiAgICAgdGhpcy0+VGFyZ2V0LT5HZXRJbnN0YWxsUlBBVEgodGhpcy0+Q29uZmlnLCBpbnN0YWxsX3JwYXRoKTsKLSAgICBjbUNMSV9FeHBhbmRMaXN0VW5pcXVlKGluc3RhbGxfcnBhdGguY19zdHIoKSwgcnVudGltZURpcnMsIGVtaXR0ZWQpOworICAgIGNtQ0xJX0V4cGFuZExpc3RVbmlxdWUoaW5zdGFsbF9ycGF0aCwgcnVudGltZURpcnMsIGVtaXR0ZWQpOwogICB9CiAgIGlmICh1c2VfYnVpbGRfcnBhdGgpIHsKICAgICAvLyBBZGQgZGlyZWN0b3JpZXMgZXhwbGljaXRseSBzcGVjaWZpZWQgYnkgdXNlcgpAQCAtMTczMyw3ICsxNzQxLDcgQEAKICAgICBpZiAodGhpcy0+VGFyZ2V0LT5HZXRCdWlsZFJQQVRIKHRoaXMtPkNvbmZpZywgYnVpbGRfcnBhdGgpKSB7CiAgICAgICAvLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgZW50cmllcyB0byB1c2UgJE9SSUdJTiwgdGhlIHVzZXIgaXMgZXhwZWN0ZWQgdG8KICAgICAgIC8vIGRvIHRoYXQgaWYgbmVjZXNzYXJ5LgotICAgICAgY21DTElfRXhwYW5kTGlzdFVuaXF1ZShidWlsZF9ycGF0aC5jX3N0cigpLCBydW50aW1lRGlycywgZW1pdHRlZCk7CisgICAgICBjbUNMSV9FeHBhbmRMaXN0VW5pcXVlKGJ1aWxkX3JwYXRoLCBydW50aW1lRGlycywgZW1pdHRlZCk7CiAgICAgfQogICB9CiAgIGlmICh1c2VfYnVpbGRfcnBhdGggfHwgdXNlX2xpbmtfcnBhdGgpIHsKQEAgLTE3NTcsMTEgKzE3NjUsMTEgQEAKICAgICAgIC8vIHN1cHBvcnQgb3IgaWYgdXNpbmcgdGhlIGxpbmsgcGF0aCBhcyBhbiBycGF0aC4KICAgICAgIGlmICh1c2VfYnVpbGRfcnBhdGgpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgZCA9IHJpOwotICAgICAgICBpZiAoIXJvb3RQYXRoLmVtcHR5KCkgJiYgZC5maW5kKHJvb3RQYXRoKSA9PSAwKSB7Ci0gICAgICAgICAgZCA9IGQuc3Vic3RyKHJvb3RQYXRoLnNpemUoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RhZ2VQYXRoICYmICpzdGFnZVBhdGggJiYgZC5maW5kKHN0YWdlUGF0aCkgPT0gMCkgewotICAgICAgICAgIHN0ZDo6c3RyaW5nIHN1ZmZpeCA9IGQuc3Vic3RyKHN0cmxlbihzdGFnZVBhdGgpKTsKLSAgICAgICAgICBkID0gY21TdHJDYXQoaW5zdGFsbFByZWZpeCwgJy8nLCBzdWZmaXgpOworICAgICAgICBpZiAoIXJvb3RQYXRoLmVtcHR5KCkgJiYgY21IYXNQcmVmaXgoZCwgcm9vdFBhdGgpKSB7CisgICAgICAgICAgZC5lcmFzZSgwLCByb290UGF0aC5zaXplKCkpOworICAgICAgICB9IGVsc2UgaWYgKGNtTm9uZW1wdHkoc3RhZ2VQYXRoKSAmJiBjbUhhc1ByZWZpeChkLCBzdGFnZVBhdGgpKSB7CisgICAgICAgICAgZC5lcmFzZSgwLCBzdHJsZW4oc3RhZ2VQYXRoKSk7CisgICAgICAgICAgZCA9IGNtU3RyQ2F0KGluc3RhbGxQcmVmaXgsICcvJywgZCk7CiAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoZCk7CiAgICAgICAgIH0gZWxzZSBpZiAodXNlX3JlbGF0aXZlX2J1aWxkX3JwYXRoKSB7CiAgICAgICAgICAgLy8gSWYgZXhwYW5zaW9uIG9mIHRoZSAkT1JJR0lOIHRva2VuIGlzIHN1cHBvcnRlZCBhbmQgcGVybWl0dGVkIHBlcgpAQCAtMTc4OCwxMSArMTc5NiwxMSBAQAogICAgICAgICAgICAgIWNtU3lzdGVtVG9vbHM6OklzU3ViRGlyZWN0b3J5KHJpLCB0b3BTb3VyY2VEaXIpICYmCiAgICAgICAgICAgICAhY21TeXN0ZW1Ub29sczo6SXNTdWJEaXJlY3RvcnkocmksIHRvcEJpbmFyeURpcikpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBkID0gcmk7Ci0gICAgICAgICAgaWYgKCFyb290UGF0aC5lbXB0eSgpICYmIGQuZmluZChyb290UGF0aCkgPT0gMCkgewotICAgICAgICAgICAgZCA9IGQuc3Vic3RyKHJvb3RQYXRoLnNpemUoKSk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChzdGFnZVBhdGggJiYgKnN0YWdlUGF0aCAmJiBkLmZpbmQoc3RhZ2VQYXRoKSA9PSAwKSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBzdWZmaXggPSBkLnN1YnN0cihzdHJsZW4oc3RhZ2VQYXRoKSk7Ci0gICAgICAgICAgICBkID0gY21TdHJDYXQoaW5zdGFsbFByZWZpeCwgJy8nLCBzdWZmaXgpOworICAgICAgICAgIGlmICghcm9vdFBhdGguZW1wdHkoKSAmJiBjbUhhc1ByZWZpeChkLCByb290UGF0aCkpIHsKKyAgICAgICAgICAgIGQuZXJhc2UoMCwgcm9vdFBhdGguc2l6ZSgpKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGNtTm9uZW1wdHkoc3RhZ2VQYXRoKSAmJiBjbUhhc1ByZWZpeChkLCBzdGFnZVBhdGgpKSB7CisgICAgICAgICAgICBkLmVyYXNlKDAsIHN0cmxlbihzdGFnZVBhdGgpKTsKKyAgICAgICAgICAgIGQgPSBjbVN0ckNhdChpbnN0YWxsUHJlZml4LCAnLycsIGQpOwogICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoZCk7CiAgICAgICAgICAgfQogICAgICAgICAgIGlmIChlbWl0dGVkLmluc2VydChkKS5zZWNvbmQpIHsKQEAgLTE4MTMsOCArMTgyMSw4IEBACiAgICAgICAgICJDTUFLRV8iICsgbGkgKyAiX1VTRV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTX0lOX1JVTlRJTUVfUEFUSCI7CiAgICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24odXNlVmFyKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBkaXJWYXIgPSAiQ01BS0VfIiArIGxpICsgIl9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTIjsKLSAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGRpcnMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihkaXJWYXIpKSB7Ci0gICAgICAgICAgY21DTElfRXhwYW5kTGlzdFVuaXF1ZShkaXJzLCBydW50aW1lRGlycywgZW1pdHRlZCk7CisgICAgICAgIGlmIChjbVByb3AgZGlycyA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWYoZGlyVmFyKSkgeworICAgICAgICAgIGNtQ0xJX0V4cGFuZExpc3RVbmlxdWUoKmRpcnMsIHJ1bnRpbWVEaXJzLCBlbWl0dGVkKTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTE4MjIsNyArMTgzMCw3IEBACiAKICAgLy8gQWRkIHJ1bnRpbWUgcGF0aHMgcmVxdWlyZWQgYnkgdGhlIHBsYXRmb3JtIHRvIGFsd2F5cyBiZQogICAvLyBwcmVzZW50LiAgVGhpcyBpcyBkb25lIGV2ZW4gd2hlbiBza2lwcGluZyBycGF0aCBzdXBwb3J0LgotICBjbUNMSV9FeHBhbmRMaXN0VW5pcXVlKHRoaXMtPlJ1bnRpbWVBbHdheXMuY19zdHIoKSwgcnVudGltZURpcnMsIGVtaXR0ZWQpOworICBjbUNMSV9FeHBhbmRMaXN0VW5pcXVlKHRoaXMtPlJ1bnRpbWVBbHdheXMsIHJ1bnRpbWVEaXJzLCBlbWl0dGVkKTsKIH0KIAogc3RkOjpzdHJpbmcgY21Db21wdXRlTGlua0luZm9ybWF0aW9uOjpHZXRSUGF0aFN0cmluZyhib29sIGZvcl9pbnN0YWxsKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oIGIvU291cmNlL2NtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oCmluZGV4IGVlNzRjY2QuLjU0NGZmMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtMjksNiArMzAsOSBAQAogcHVibGljOgogICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24oY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24oY29uc3QgY21Db21wdXRlTGlua0luZm9ybWF0aW9uJikgPSBkZWxldGU7CisgIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiYgb3BlcmF0b3I9KGNvbnN0IGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiYpID0KKyAgICBkZWxldGU7CiAgIH5jbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24oKTsKICAgYm9vbCBDb21wdXRlKCk7CiAKQEAgLTE0MCwxMSArMTQ0LDExIEBACiAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBFeHRyYWN0U2hhcmVkTGlicmFyeU5hbWU7CiAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBFeHRyYWN0QW55TGlicmFyeU5hbWU7CiAgIHN0ZDo6c3RyaW5nIFNoYXJlZFJlZ2V4U3RyaW5nOwotICB2b2lkIEFkZExpbmtQcmVmaXgoY29uc3QgY2hhciogcCk7Ci0gIHZvaWQgQWRkTGlua0V4dGVuc2lvbihjb25zdCBjaGFyKiBlLCBMaW5rVHlwZSB0eXBlKTsKKyAgdm9pZCBBZGRMaW5rUHJlZml4KHN0ZDo6c3RyaW5nIGNvbnN0JiBwKTsKKyAgdm9pZCBBZGRMaW5rRXh0ZW5zaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBlLCBMaW5rVHlwZSB0eXBlKTsKICAgc3RkOjpzdHJpbmcgQ3JlYXRlRXh0ZW5zaW9uUmVnZXgoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBleHRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rVHlwZSB0eXBlKTsKLSAgc3RkOjpzdHJpbmcgTm9DYXNlRXhwcmVzc2lvbihjb25zdCBjaGFyKiBzdHIpOworICBzdGQ6OnN0cmluZyBOb0Nhc2VFeHByZXNzaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIpOwogCiAgIC8vIEhhbmRsaW5nIG9mIGxpbmsgaXRlbXMuCiAgIHZvaWQgQWRkVGFyZ2V0SXRlbShCVDxzdGQ6OnN0cmluZz4gY29uc3QmIGl0ZW0sCkBAIC0xNjYsNyArMTcwLDcgQEAKICAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIFNwbGl0RnJhbWV3b3JrOwogCiAgIC8vIExpbmtlciBzZWFyY2ggcGF0aCBjb21wdXRhdGlvbi4KLSAgY21PcmRlckRpcmVjdG9yaWVzKiBPcmRlckxpbmtlclNlYXJjaFBhdGg7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbU9yZGVyRGlyZWN0b3JpZXM+IE9yZGVyTGlua2VyU2VhcmNoUGF0aDsKICAgYm9vbCBGaW5pc2hMaW5rZXJTZWFyY2hEaXJlY3RvcmllcygpOwogICB2b2lkIFByaW50TGlua1BvbGljeURpYWdub3NpcyhzdGQ6Om9zdHJlYW0mKTsKIApAQCAtMTc0LDYgKzE3OCw3IEBACiAgIHZvaWQgTG9hZEltcGxpY2l0TGlua0luZm8oKTsKICAgdm9pZCBBZGRJbXBsaWNpdExpbmtJbmZvKCk7CiAgIHZvaWQgQWRkSW1wbGljaXRMaW5rSW5mbyhzdGQ6OnN0cmluZyBjb25zdCYgbGFuZyk7CisgIHZvaWQgQWRkUnVudGltZUxpbmtMaWJyYXJ5KHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKTsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IEltcGxpY2l0TGlua0RpcnM7CiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBJbXBsaWNpdExpbmtMaWJzOwogCkBAIC0xODYsOSArMTkxLDkgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IE9sZFVzZXJGbGFnSXRlbXM7CiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBDTVAwMDYwV2Fybkl0ZW1zOwogICAvLyBEZXBlbmRlbnQgbGlicmFyeSBwYXRoIGNvbXB1dGF0aW9uLgotICBjbU9yZGVyRGlyZWN0b3JpZXMqIE9yZGVyRGVwZW5kZW50UlBhdGg7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbU9yZGVyRGlyZWN0b3JpZXM+IE9yZGVyRGVwZW5kZW50UlBhdGg7CiAgIC8vIFJ1bnRpbWUgcGF0aCBjb21wdXRhdGlvbi4KLSAgY21PcmRlckRpcmVjdG9yaWVzKiBPcmRlclJ1bnRpbWVTZWFyY2hQYXRoOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21PcmRlckRpcmVjdG9yaWVzPiBPcmRlclJ1bnRpbWVTZWFyY2hQYXRoOwogCiAgIGJvb2wgT2xkTGlua0Rpck1vZGU7CiAgIGJvb2wgT3BlbkJTRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbXB1dGVUYXJnZXREZXBlbmRzLmN4eCBiL1NvdXJjZS9jbUNvbXB1dGVUYXJnZXREZXBlbmRzLmN4eAppbmRleCAxNjJiYWIyLi5lNzE3ZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db21wdXRlVGFyZ2V0RGVwZW5kcy5jeHgKKysrIGIvU291cmNlL2NtQ29tcHV0ZVRhcmdldERlcGVuZHMuY3h4CkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIApAQCAtMTE3LDYgKzExOCw3IEBACiAKICAgLy8gSWRlbnRpZnkgY29tcG9uZW50cy4KICAgY21Db21wdXRlQ29tcG9uZW50R3JhcGggY2NnKHRoaXMtPkluaXRpYWxHcmFwaCk7CisgIGNjZy5Db21wdXRlKCk7CiAgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKICAgICB0aGlzLT5EaXNwbGF5Q29tcG9uZW50cyhjY2cpOwogICB9CkBAIC0xNTAsNiArMTUyLDcgQEAKICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogZGVwID0gdGhpcy0+VGFyZ2V0c1tuaV07CiAgICAgYXV0byBkaSA9IGRlcHMuaW5zZXJ0KGRlcCkuZmlyc3Q7CiAgICAgZGktPlNldFR5cGUobmkuSXNTdHJvbmcoKSk7CisgICAgZGktPlNldENyb3NzKG5pLklzQ3Jvc3MoKSk7CiAgICAgZGktPlNldEJhY2t0cmFjZShuaS5HZXRCYWNrdHJhY2UoKSk7CiAgIH0KIH0KQEAgLTE1NywxNSArMTYwLDEyIEBACiB2b2lkIGNtQ29tcHV0ZVRhcmdldERlcGVuZHM6OkNvbGxlY3RUYXJnZXRzKCkKIHsKICAgLy8gQ29sbGVjdCBhbGwgdGFyZ2V0cyBmcm9tIGFsbCBnZW5lcmF0b3JzLgotICBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4gY29uc3QmIGxnZW5zID0KLSAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnZW4gOiBsZ2VucykgewotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRhcmdldHMgPQotICAgICAgbGdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRpIDogdGFyZ2V0cykgeworICBhdXRvIGNvbnN0JiBsZ2VucyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCk7CisgIGZvciAoY29uc3QgYXV0byYgbGdlbiA6IGxnZW5zKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0aSA6IGxnZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pih0aGlzLT5UYXJnZXRzLnNpemUoKSk7Ci0gICAgICB0aGlzLT5UYXJnZXRJbmRleFt0aV0gPSBpbmRleDsKLSAgICAgIHRoaXMtPlRhcmdldHMucHVzaF9iYWNrKHRpKTsKKyAgICAgIHRoaXMtPlRhcmdldEluZGV4W3RpLmdldCgpXSA9IGluZGV4OworICAgICAgdGhpcy0+VGFyZ2V0cy5wdXNoX2JhY2sodGkuZ2V0KCkpOwogICAgIH0KICAgfQogfQpAQCAtMTg1LDcgKzE4NSw3IEBACiB7CiAgIC8vIEdldCB0aGUgZGVwZW5kZXIuCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBkZXBlbmRlciA9IHRoaXMtPlRhcmdldHNbZGVwZW5kZXJfaW5kZXhdOwotICBpZiAoZGVwZW5kZXItPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgIGlmICghZGVwZW5kZXItPklzSW5CdWlsZFN5c3RlbSgpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTE5Nyw4ICsxOTcsMjQgQEAKICAgICBzdGQ6OnNldDxjbUxpbmtJdGVtPiBlbWl0dGVkOwogCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KLSAgICAgIGRlcGVuZGVyLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncygpOworICAgICAgZGVwZW5kZXItPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaXQgOiBjb25maWdzKSB7CisgICAgICAvLyBBIHRhcmdldCBzaG91bGQgbm90IGRlcGVuZCBvbiBpdHNlbGYuCisgICAgICBlbWl0dGVkLmluc2VydChjbUxpbmtJdGVtKGRlcGVuZGVyLCBmYWxzZSwgY21MaXN0RmlsZUJhY2t0cmFjZSgpKSk7CisgICAgICBlbWl0dGVkLmluc2VydChjbUxpbmtJdGVtKGRlcGVuZGVyLCB0cnVlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKKworICAgICAgaWYgKGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBpbXBsID0KKyAgICAgICAgICAgIGRlcGVuZGVyLT5HZXRMaW5rSW1wbGVtZW50YXRpb24oaXQpKSB7CisgICAgICAgIGZvciAoY21MaW5rSW1wbEl0ZW0gY29uc3QmIGxpYiA6IGltcGwtPkxpYnJhcmllcykgeworICAgICAgICAgIC8vIERvbid0IGVtaXQgdGhlIHNhbWUgbGlicmFyeSB0d2ljZSBmb3IgdGhpcyB0YXJnZXQuCisgICAgICAgICAgaWYgKGVtaXR0ZWQuaW5zZXJ0KGxpYikuc2Vjb25kKSB7CisgICAgICAgICAgICB0aGlzLT5BZGRUYXJnZXREZXBlbmQoZGVwZW5kZXJfaW5kZXgsIGxpYiwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy0+QWRkSW50ZXJmYWNlRGVwZW5kcyhkZXBlbmRlcl9pbmRleCwgbGliLCBpdCwgZW1pdHRlZCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIEFkZCBkZXBlbmRlbmNpZXMgb24gb2JqZWN0IGxpYnJhcmllcyBub3Qgb3RoZXJ3aXNlIGhhbmRsZWQgYWJvdmUuCiAgICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBvYmplY3RGaWxlczsKICAgICAgIGRlcGVuZGVyLT5HZXRFeHRlcm5hbE9iamVjdHMob2JqZWN0RmlsZXMsIGl0KTsKICAgICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBvIDogb2JqZWN0RmlsZXMpIHsKQEAgLTIxOSwyMiArMjM1LDEwIEBACiAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y21HZW5lcmF0b3JUYXJnZXQqPihkZXBlbmRlciktPlRhcmdldC0+QWRkVXRpbGl0eSgKLSAgICAgICAgICAgICAgb2JqTGliKTsKKyAgICAgICAgICAgICAgb2JqTGliLCBmYWxzZSk7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9Ci0KLSAgICAgIGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBpbXBsID0gZGVwZW5kZXItPkdldExpbmtJbXBsZW1lbnRhdGlvbihpdCk7Ci0KLSAgICAgIC8vIEEgdGFyZ2V0IHNob3VsZCBub3QgZGVwZW5kIG9uIGl0c2VsZi4KLSAgICAgIGVtaXR0ZWQuaW5zZXJ0KGNtTGlua0l0ZW0oZGVwZW5kZXIsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSkpOwotICAgICAgZm9yIChjbUxpbmtJbXBsSXRlbSBjb25zdCYgbGliIDogaW1wbC0+TGlicmFyaWVzKSB7Ci0gICAgICAgIC8vIERvbid0IGVtaXQgdGhlIHNhbWUgbGlicmFyeSB0d2ljZSBmb3IgdGhpcyB0YXJnZXQuCi0gICAgICAgIGlmIChlbWl0dGVkLmluc2VydChsaWIpLnNlY29uZCkgewotICAgICAgICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZChkZXBlbmRlcl9pbmRleCwgbGliLCB0cnVlKTsKLSAgICAgICAgICB0aGlzLT5BZGRJbnRlcmZhY2VEZXBlbmRzKGRlcGVuZGVyX2luZGV4LCBsaWIsIGl0LCBlbWl0dGVkKTsKLSAgICAgICAgfQotICAgICAgfQogICAgIH0KICAgfQogCkBAIC0yNDMsMTEgKzI0NywxMiBAQAogICAgIHN0ZDo6c2V0PGNtTGlua0l0ZW0+IGNvbnN0JiB0dXRpbHMgPSBkZXBlbmRlci0+R2V0VXRpbGl0eUl0ZW1zKCk7CiAgICAgc3RkOjpzZXQ8Y21MaW5rSXRlbT4gZW1pdHRlZDsKICAgICAvLyBBIHRhcmdldCBzaG91bGQgbm90IGRlcGVuZCBvbiBpdHNlbGYuCi0gICAgZW1pdHRlZC5pbnNlcnQoY21MaW5rSXRlbShkZXBlbmRlciwgY21MaXN0RmlsZUJhY2t0cmFjZSgpKSk7CisgICAgZW1pdHRlZC5pbnNlcnQoY21MaW5rSXRlbShkZXBlbmRlciwgZmFsc2UsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSkpOworICAgIGVtaXR0ZWQuaW5zZXJ0KGNtTGlua0l0ZW0oZGVwZW5kZXIsIHRydWUsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSkpOwogICAgIGZvciAoY21MaW5rSXRlbSBjb25zdCYgbGl0ZW0gOiB0dXRpbHMpIHsKICAgICAgIC8vIERvbid0IGVtaXQgdGhlIHNhbWUgdXRpbGl0eSB0d2ljZSBmb3IgdGhpcyB0YXJnZXQuCiAgICAgICBpZiAoZW1pdHRlZC5pbnNlcnQobGl0ZW0pLnNlY29uZCkgewotICAgICAgICB0aGlzLT5BZGRUYXJnZXREZXBlbmQoZGVwZW5kZXJfaW5kZXgsIGxpdGVtLCBmYWxzZSk7CisgICAgICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZChkZXBlbmRlcl9pbmRleCwgbGl0ZW0sIGZhbHNlLCBsaXRlbS5Dcm9zcyk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0yNjksNyArMjc0LDcgQEAKICAgICAgICAgLy8gY29kZSBpbiB0aGUgcHJvamVjdCB0aGF0IGNhdXNlZCB0aGlzIGRlcGVuZGVuY3kgdG8gYmUgYWRkZWQuCiAgICAgICAgIGNtTGlua0l0ZW0gbGliQlQgPSBsaWI7CiAgICAgICAgIGxpYkJULkJhY2t0cmFjZSA9IGRlcGVuZGVlX2JhY2t0cmFjZTsKLSAgICAgICAgdGhpcy0+QWRkVGFyZ2V0RGVwZW5kKGRlcGVuZGVyX2luZGV4LCBsaWJCVCwgdHJ1ZSk7CisgICAgICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZChkZXBlbmRlcl9pbmRleCwgbGliQlQsIHRydWUsIGZhbHNlKTsKICAgICAgICAgdGhpcy0+QWRkSW50ZXJmYWNlRGVwZW5kcyhkZXBlbmRlcl9pbmRleCwgbGliQlQsIGNvbmZpZywgZW1pdHRlZCk7CiAgICAgICB9CiAgICAgfQpAQCAtMjkyLDcgKzI5Nyw4IEBACiAKICAgaWYgKGRlcGVuZGVlKSB7CiAgICAgLy8gQSB0YXJnZXQgc2hvdWxkIG5vdCBkZXBlbmQgb24gaXRzZWxmLgotICAgIGVtaXR0ZWQuaW5zZXJ0KGNtTGlua0l0ZW0oZGVwZW5kZXIsIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSkpOworICAgIGVtaXR0ZWQuaW5zZXJ0KGNtTGlua0l0ZW0oZGVwZW5kZXIsIGZhbHNlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKKyAgICBlbWl0dGVkLmluc2VydChjbUxpbmtJdGVtKGRlcGVuZGVyLCB0cnVlLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKICAgICB0aGlzLT5BZGRJbnRlcmZhY2VEZXBlbmRzKGRlcGVuZGVyX2luZGV4LCBkZXBlbmRlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVlX25hbWUuQmFja3RyYWNlLCBjb25maWcsIGVtaXR0ZWQpOwogICB9CkBAIC0zMDAsNyArMzA2LDcgQEAKIAogdm9pZCBjbUNvbXB1dGVUYXJnZXREZXBlbmRzOjpBZGRUYXJnZXREZXBlbmQoaW50IGRlcGVuZGVyX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZWVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua2luZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua2luZywgYm9vbCBjcm9zcykKIHsKICAgLy8gR2V0IHRoZSBkZXBlbmRlci4KICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGRlcGVuZGVyID0gdGhpcy0+VGFyZ2V0c1tkZXBlbmRlcl9pbmRleF07CkBAIC0zNDUsMjMgKzM1MSwyMiBAQAogCiAgIGlmIChkZXBlbmRlZSkgewogICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZChkZXBlbmRlcl9pbmRleCwgZGVwZW5kZWUsIGRlcGVuZGVlX25hbWUuQmFja3RyYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5raW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2luZywgY3Jvc3MpOwogICB9CiB9CiAKIHZvaWQgY21Db21wdXRlVGFyZ2V0RGVwZW5kczo6QWRkVGFyZ2V0RGVwZW5kKAogICBpbnQgZGVwZW5kZXJfaW5kZXgsIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBkZXBlbmRlZSwKLSAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgZGVwZW5kZWVfYmFja3RyYWNlLCBib29sIGxpbmtpbmcpCisgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGRlcGVuZGVlX2JhY2t0cmFjZSwgYm9vbCBsaW5raW5nLCBib29sIGNyb3NzKQogewotICBpZiAoZGVwZW5kZWUtPklzSW1wb3J0ZWQoKSB8fAotICAgICAgZGVwZW5kZWUtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7Ci0gICAgLy8gU2tpcCBJTVBPUlRFRCBhbmQgSU5URVJGQUNFIHRhcmdldHMgYnV0IGZvbGxvdyB0aGVpciB1dGlsaXR5Ci0gICAgLy8gZGVwZW5kZW5jaWVzLgorICBpZiAoIWRlcGVuZGVlLT5Jc0luQnVpbGRTeXN0ZW0oKSkgeworICAgIC8vIFNraXAgdGFyZ2V0cyB0aGF0IGFyZSBub3QgaW4gdGhlIGJ1aWxkc3lzdGVtIGJ1dCBmb2xsb3cgdGhlaXIKKyAgICAvLyB1dGlsaXR5IGRlcGVuZGVuY2llcy4KICAgICBzdGQ6OnNldDxjbUxpbmtJdGVtPiBjb25zdCYgdXRpbHMgPSBkZXBlbmRlZS0+R2V0VXRpbGl0eUl0ZW1zKCk7CiAgICAgZm9yIChjbUxpbmtJdGVtIGNvbnN0JiBpIDogdXRpbHMpIHsKICAgICAgIGlmIChjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdHJhbnNpdGl2ZV9kZXBlbmRlZSA9IGkuVGFyZ2V0KSB7CiAgICAgICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZChkZXBlbmRlcl9pbmRleCwgdHJhbnNpdGl2ZV9kZXBlbmRlZSwgaS5CYWNrdHJhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgaS5Dcm9zcyk7CiAgICAgICB9CiAgICAgfQogICB9IGVsc2UgewpAQCAtMzczLDcgKzM3OCw3IEBACiAKICAgICAvLyBBZGQgdGhpcyBlbnRyeSB0byB0aGUgZGVwZW5kZW5jeSBncmFwaC4KICAgICB0aGlzLT5Jbml0aWFsR3JhcGhbZGVwZW5kZXJfaW5kZXhdLmVtcGxhY2VfYmFjayhkZXBlbmRlZV9pbmRleCwgIWxpbmtpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZWVfYmFja3RyYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcywgZGVwZW5kZWVfYmFja3RyYWNlKTsKICAgfQogfQogCkBAIC01MDcsNyArNTEyLDggQEAKICAgICBmb3IgKGNtR3JhcGhFZGdlIGNvbnN0JiBlZGdlIDogZWwpIHsKICAgICAgIGludCBqID0gZWRnZTsKICAgICAgIGlmIChjbWFwW2pdID09IGMgJiYgZWRnZS5Jc1N0cm9uZygpKSB7Ci0gICAgICAgIHRoaXMtPkZpbmFsR3JhcGhbaV0uZW1wbGFjZV9iYWNrKGosIHRydWUsIGVkZ2UuR2V0QmFja3RyYWNlKCkpOworICAgICAgICB0aGlzLT5GaW5hbEdyYXBoW2ldLmVtcGxhY2VfYmFjayhqLCB0cnVlLCBlZGdlLklzQ3Jvc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5HZXRCYWNrdHJhY2UoKSk7CiAgICAgICAgIGlmICghdGhpcy0+SW50cmFDb21wb25lbnQoY21hcCwgYywgaiwgaGVhZCwgZW1pdHRlZCwgdmlzaXRlZCkpIHsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUxNiw3ICs1MjIsOCBAQAogCiAgICAgLy8gUHJlcGVuZCB0byBhIGxpbmVhciBsaW5rZWQtbGlzdCBvZiBpbnRyYS1jb21wb25lbnQgZWRnZXMuCiAgICAgaWYgKCpoZWFkID49IDApIHsKLSAgICAgIHRoaXMtPkZpbmFsR3JhcGhbaV0uZW1wbGFjZV9iYWNrKCpoZWFkLCBmYWxzZSwgY21MaXN0RmlsZUJhY2t0cmFjZSgpKTsKKyAgICAgIHRoaXMtPkZpbmFsR3JhcGhbaV0uZW1wbGFjZV9iYWNrKCpoZWFkLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICB0aGlzLT5Db21wb25lbnRUYWlsW2NdID0gaTsKICAgICB9CkBAIC01NjYsNyArNTczLDggQEAKICAgICAgIGludCBkZXBlbmRlZV9jb21wb25lbnQgPSBuaTsKICAgICAgIGludCBkZXBlbmRlZV9jb21wb25lbnRfaGVhZCA9IHRoaXMtPkNvbXBvbmVudEhlYWRbZGVwZW5kZWVfY29tcG9uZW50XTsKICAgICAgIHRoaXMtPkZpbmFsR3JhcGhbZGVwZW5kZXJfY29tcG9uZW50X3RhaWxdLmVtcGxhY2VfYmFjaygKLSAgICAgICAgZGVwZW5kZWVfY29tcG9uZW50X2hlYWQsIG5pLklzU3Ryb25nKCksIG5pLkdldEJhY2t0cmFjZSgpKTsKKyAgICAgICAgZGVwZW5kZWVfY29tcG9uZW50X2hlYWQsIG5pLklzU3Ryb25nKCksIG5pLklzQ3Jvc3MoKSwKKyAgICAgICAgbmkuR2V0QmFja3RyYWNlKCkpOwogICAgIH0KICAgfQogICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvbXB1dGVUYXJnZXREZXBlbmRzLmggYi9Tb3VyY2UvY21Db21wdXRlVGFyZ2V0RGVwZW5kcy5oCmluZGV4IGQ4MDYwYWUuLmUwZDYyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbXB1dGVUYXJnZXREZXBlbmRzLmgKKysrIGIvU291cmNlL2NtQ29tcHV0ZVRhcmdldERlcGVuZHMuaApAQCAtNDYsMTAgKzQ2LDEwIEBACiAgIHZvaWQgQ29sbGVjdERlcGVuZHMoKTsKICAgdm9pZCBDb2xsZWN0VGFyZ2V0RGVwZW5kcyhpbnQgZGVwZW5kZXJfaW5kZXgpOwogICB2b2lkIEFkZFRhcmdldERlcGVuZChpbnQgZGVwZW5kZXJfaW5kZXgsIGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua2luZyk7CisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua2luZywgYm9vbCBjcm9zcyk7CiAgIHZvaWQgQWRkVGFyZ2V0RGVwZW5kKGludCBkZXBlbmRlcl9pbmRleCwgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGRlcGVuZGVlLAogICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBkZXBlbmRlZV9iYWNrdHJhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua2luZyk7CisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua2luZywgYm9vbCBjcm9zcyk7CiAgIGJvb2wgQ29tcHV0ZUZpbmFsRGVwZW5kcyhjbUNvbXB1dGVDb21wb25lbnRHcmFwaCBjb25zdCYgY2NnKTsKICAgdm9pZCBBZGRJbnRlcmZhY2VEZXBlbmRzKGludCBkZXBlbmRlcl9pbmRleCwgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZWVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db25kaXRpb25FdmFsdWF0b3IuY3h4IGIvU291cmNlL2NtQ29uZGl0aW9uRXZhbHVhdG9yLmN4eAppbmRleCAwMDNlNjBkLi43YTNhM2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db25kaXRpb25FdmFsdWF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUNvbmRpdGlvbkV2YWx1YXRvci5jeHgKQEAgLTksOSArOSwxMCBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgpAQCAtMzk2LDcgKzM5Nyw3IEBACiAgICAgICAgIC8vIGNvcHkgdG8gdGhlIGxpc3Qgc3RydWN0dXJlCiAgICAgICAgIGF1dG8gYXJnUDEgPSBhcmc7CiAgICAgICAgIGFyZ1AxKys7Ci0gICAgICAgIGNtQXBwZW5kKG5ld0FyZ3MyLCBhcmdQMSwgYXJnQ2xvc2UpOworICAgICAgICBjbTo6YXBwZW5kKG5ld0FyZ3MyLCBhcmdQMSwgYXJnQ2xvc2UpOwogICAgICAgICBuZXdBcmdzMi5wb3BfYmFjaygpOwogICAgICAgICAvLyBub3cgcmVjdXJzaXZlbHkgaW52b2tlIElzVHJ1ZSB0byBoYW5kbGUgdGhlIHZhbHVlcyBpbnNpZGUgdGhlCiAgICAgICAgIC8vIHBhcmVudGhldGljYWwgZXhwcmVzc2lvbgpAQCAtNDkyLDEyICs0OTMsMTIgQEAKICAgICAgIGlmICh0aGlzLT5Jc0tleXdvcmQoa2V5REVGSU5FRCwgKmFyZykgJiYgYXJnUDEgIT0gbmV3QXJncy5lbmQoKSkgewogICAgICAgICBzaXplX3QgYXJnUDFsZW4gPSBhcmdQMS0+R2V0VmFsdWUoKS5zaXplKCk7CiAgICAgICAgIGJvb2wgYmRlZiA9IGZhbHNlOwotICAgICAgICBpZiAoYXJnUDFsZW4gPiA0ICYmIGFyZ1AxLT5HZXRWYWx1ZSgpLnN1YnN0cigwLCA0KSA9PSAiRU5WeyIgJiYKKyAgICAgICAgaWYgKGFyZ1AxbGVuID4gNCAmJiBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnUDEtPkdldFZhbHVlKCksICJFTlZ7IikgJiYKICAgICAgICAgICAgIGFyZ1AxLT5HZXRWYWx1ZSgpLm9wZXJhdG9yW10oYXJnUDFsZW4gLSAxKSA9PSAnfScpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBlbnYgPSBhcmdQMS0+R2V0VmFsdWUoKS5zdWJzdHIoNCwgYXJnUDFsZW4gLSA1KTsKICAgICAgICAgICBiZGVmID0gY21TeXN0ZW1Ub29sczo6SGFzRW52KGVudik7CiAgICAgICAgIH0gZWxzZSBpZiAoYXJnUDFsZW4gPiA2ICYmCi0gICAgICAgICAgICAgICAgICAgYXJnUDEtPkdldFZhbHVlKCkuc3Vic3RyKDAsIDYpID09ICJDQUNIRXsiICYmCisgICAgICAgICAgICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KGFyZ1AxLT5HZXRWYWx1ZSgpLCAiQ0FDSEV7IikgJiYKICAgICAgICAgICAgICAgICAgICBhcmdQMS0+R2V0VmFsdWUoKS5vcGVyYXRvcltdKGFyZ1AxbGVuIC0gMSkgPT0gJ30nKSB7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgY2FjaGUgPSBhcmdQMS0+R2V0VmFsdWUoKS5zdWJzdHIoNiwgYXJnUDFsZW4gLSA3KTsKICAgICAgICAgICBiZGVmID0KQEAgLTY3MSw3ICs2NzIsNyBAQAogICAgICAgICAgIGlmIChkZWYyKSB7CiAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlzdCA9IGNtRXhwYW5kZWRMaXN0KGRlZjIsIHRydWUpOwogCi0gICAgICAgICAgICByZXN1bHQgPSBjbUNvbnRhaW5zKGxpc3QsIGRlZik7CisgICAgICAgICAgICByZXN1bHQgPSBjbTo6Y29udGFpbnMobGlzdCwgZGVmKTsKICAgICAgICAgICB9CiAKICAgICAgICAgICB0aGlzLT5IYW5kbGVCaW5hcnlPcChyZXN1bHQsIHJlZHVjaWJsZSwgYXJnLCBuZXdBcmdzLCBhcmdQMSwgYXJnUDIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29uZmlndXJlLmNtYWtlLmguaW4gYi9Tb3VyY2UvY21Db25maWd1cmUuY21ha2UuaC5pbgppbmRleCA0ZGUxYzVkLi45N2U3ODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db25maWd1cmUuY21ha2UuaC5pbgorKysgYi9Tb3VyY2UvY21Db25maWd1cmUuY21ha2UuaC5pbgpAQCAtMTksNyArMTksNiBAQAogI2NtYWtlZGVmaW5lIEhBVkVfVU5TRVRFTlYKICNjbWFrZWRlZmluZSBDTUFLRV9VU0VfRUxGX1BBUlNFUgogI2NtYWtlZGVmaW5lIENNQUtFX1VTRV9NQUNIX1BBUlNFUgotI2NtYWtlZGVmaW5lIENNYWtlX0hBVkVfQ1hYX01BS0VfVU5JUVVFCiAjZGVmaW5lIENNYWtlX0RFRkFVTFRfUkVDVVJTSU9OX0xJTUlUIEBDTWFrZV9ERUZBVUxUX1JFQ1VSU0lPTl9MSU1JVEAKICNkZWZpbmUgQ01BS0VfQklOX0RJUiAiL0BDTUFLRV9CSU5fRElSQCIKICNkZWZpbmUgQ01BS0VfREFUQV9ESVIgIi9AQ01BS0VfREFUQV9ESVJAIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29uZmlndXJlRmlsZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtQ29uZmlndXJlRmlsZUNvbW1hbmQuY3h4CmluZGV4IDg3NjczODYuLjY4MzIyY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbmZpZ3VyZUZpbGVDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21Db25maWd1cmVGaWxlQ29tbWFuZC5jeHgKQEAgLTIsNiArMiwxMSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21Db25maWd1cmVGaWxlQ29tbWFuZC5oIgogCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CisKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCkBAIC01NSw2ICs2MCwxOSBAQAogICB9CiAgIGJvb2wgY29weU9ubHkgPSBmYWxzZTsKICAgYm9vbCBlc2NhcGVRdW90ZXMgPSBmYWxzZTsKKyAgYm9vbCB1c2Vfc291cmNlX3Blcm1pc3Npb25zID0gdHJ1ZTsKKworICBzdGF0aWMgc3RkOjpzZXQ8Y206OnN0cmluZ192aWV3PiBub29wT3B0aW9ucyA9IHsKKyAgICAvKiBMZWdhY3kuICAqLworICAgICJJTU1FRElBVEUiX3MsCisgICAgLyogSGFuZGxlZCBieSBOZXdMaW5lU3R5bGUgbWVtYmVyLiAgKi8KKyAgICAiTkVXTElORV9TVFlMRSJfcywKKyAgICAiTEYiX3MsCisgICAgIlVOSVgiX3MsCisgICAgIkNSTEYiX3MsCisgICAgIldJTjMyIl9zLAorICAgICJET1MiX3MsCisgIH07CiAKICAgc3RkOjpzdHJpbmcgdW5rbm93bl9hcmdzOwogICBib29sIGF0T25seSA9IGZhbHNlOwpAQCAtNzAsMTIgKzg4LDEwIEBACiAgICAgICBlc2NhcGVRdW90ZXMgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiQE9OTFkiKSB7CiAgICAgICBhdE9ubHkgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiSU1NRURJQVRFIikgewotICAgICAgLyogSWdub3JlIGxlZ2FjeSBvcHRpb24uICAqLwotICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiTkVXTElORV9TVFlMRSIgfHwgYXJnc1tpXSA9PSAiTEYiIHx8Ci0gICAgICAgICAgICAgICBhcmdzW2ldID09ICJVTklYIiB8fCBhcmdzW2ldID09ICJDUkxGIiB8fCBhcmdzW2ldID09ICJXSU4zMiIgfHwKLSAgICAgICAgICAgICAgIGFyZ3NbaV0gPT0gIkRPUyIpIHsKLSAgICAgIC8qIE9wdGlvbnMgaGFuZGxlZCBieSBOZXdMaW5lU3R5bGUgbWVtYmVyIGFib3ZlLiAgKi8KKyAgICB9IGVsc2UgaWYgKGFyZ3NbaV0gPT0gIk5PX1NPVVJDRV9QRVJNSVNTSU9OUyIpIHsKKyAgICAgIHVzZV9zb3VyY2VfcGVybWlzc2lvbnMgPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKG5vb3BPcHRpb25zLmZpbmQoYXJnc1tpXSkgIT0gbm9vcE9wdGlvbnMuZW5kKCkpIHsKKyAgICAgIC8qIElnbm9yZSBuby1vcCBvcHRpb25zLiAgKi8KICAgICB9IGVsc2UgewogICAgICAgdW5rbm93bl9hcmdzICs9ICIgIjsKICAgICAgIHVua25vd25fYXJncyArPSBhcmdzW2ldOwpAQCAtODksNyArMTA1LDggQEAKICAgfQogCiAgIGlmICghc3RhdHVzLkdldE1ha2VmaWxlKCkuQ29uZmlndXJlRmlsZSgKLSAgICAgICAgaW5wdXRGaWxlLCBvdXRwdXRGaWxlLCBjb3B5T25seSwgYXRPbmx5LCBlc2NhcGVRdW90ZXMsIG5ld0xpbmVTdHlsZSkpIHsKKyAgICAgICAgaW5wdXRGaWxlLCBvdXRwdXRGaWxlLCBjb3B5T25seSwgYXRPbmx5LCBlc2NhcGVRdW90ZXMsCisgICAgICAgIHVzZV9zb3VyY2VfcGVybWlzc2lvbnMsIG5ld0xpbmVTdHlsZSkpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoIlByb2JsZW0gY29uZmlndXJpbmcgZmlsZSIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29ubmVjdGlvbi5jeHggYi9Tb3VyY2UvY21Db25uZWN0aW9uLmN4eAppbmRleCA4ODRlMzE0Li5lNGQwY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db25uZWN0aW9uLmN4eAorKysgYi9Tb3VyY2UvY21Db25uZWN0aW9uLmN4eApAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGNzdHJpbmc+CiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAogI2luY2x1ZGUgImNtU2VydmVyLmgiCiAKQEAgLTIwLDggKzIwLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9idWZfdCogYnVmKQogewogICAodm9pZCkoaGFuZGxlKTsKKyNpZm5kZWYgX19jbGFuZ19hbmFseXplcl9fCiAgIGNoYXIqIHJhd0J1ZmZlciA9IG5ldyBjaGFyW3N1Z2dlc3RlZF9zaXplXTsKICAgKmJ1ZiA9IHV2X2J1Zl9pbml0KHJhd0J1ZmZlciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihzdWdnZXN0ZWRfc2l6ZSkpOworI2Vsc2UKKyAgKHZvaWQpKHN1Z2dlc3RlZF9zaXplKTsKKyAgKHZvaWQpKGJ1Zik7CisjZW5kaWYgLyogX19jbGFuZ19hbmFseXplcl9fICovCiB9CiAKIHZvaWQgY21FdmVudEJhc2VkQ29ubmVjdGlvbjo6b25fcmVhZCh1dl9zdHJlYW1fdCogc3RyZWFtLCBzc2l6ZV90IG5yZWFkLApAQCAtNzYsNiArODEsNyBAQAogICBhc3NlcnQodXZfdGhyZWFkX2VxdWFsKCZjdXJyX3RocmVhZF9pZCwgJnRoaXMtPlNlcnZlci0+U2VydmVUaHJlYWRJZCkpOwogI2VuZGlmCiAKKyNpZm5kZWYgX19jbGFuZ19hbmFseXplcl9fCiAgIGF1dG8gZGF0YSA9IF9kYXRhOwogICBhc3NlcnQodGhpcy0+V3JpdGVTdHJlYW0uZ2V0KCkpOwogICBpZiAoQnVmZmVyU3RyYXRlZ3kpIHsKQEAgLTkwLDYgKzk2LDkgQEAKICAgbWVtY3B5KHJlcS0+YnVmLmJhc2UsIGRhdGEuY19zdHIoKSwgZHMpOwogICB1dl93cml0ZShyZWludGVycHJldF9jYXN0PHV2X3dyaXRlX3QqPihyZXEpLCB0aGlzLT5Xcml0ZVN0cmVhbSwgJnJlcS0+YnVmLCAxLAogICAgICAgICAgICBvbl93cml0ZSk7CisjZWxzZQorICAodm9pZCkoX2RhdGEpOworI2VuZGlmIC8qIF9fY2xhbmdfYW5hbHl6ZXJfXyAqLwogfQogCiB2b2lkIGNtRXZlbnRCYXNlZENvbm5lY3Rpb246OlJlYWREYXRhKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ29ubmVjdGlvbi5oIGIvU291cmNlL2NtQ29ubmVjdGlvbi5oCmluZGV4IDdiYjI0OTQuLjUzMzVhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvY21Db25uZWN0aW9uLmgKQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db252ZXJ0TVNCdWlsZFhNTFRvSlNPTi5weSBiL1NvdXJjZS9jbUNvbnZlcnRNU0J1aWxkWE1MVG9KU09OLnB5CmluZGV4IDAyMDc0YmEuLjJiZTM3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNvbnZlcnRNU0J1aWxkWE1MVG9KU09OLnB5CisrKyBiL1NvdXJjZS9jbUNvbnZlcnRNU0J1aWxkWE1MVG9KU09OLnB5CkBAIC0zNSwxMiArMzUsMTQgQEAKICAgICByZXR1cm4gdmFsdWVzCiAKIAotZGVmIHJlYWRfbXNidWlsZF94bWwocGF0aCwgdmFsdWVzPXt9KToKK2RlZiByZWFkX21zYnVpbGRfeG1sKHBhdGgsIHZhbHVlcz1Ob25lKToKICAgICAiIiJSZWFkcyB0aGUgTVMgQnVpbGQgWE1MIGZpbGUgYXQgdGhlIHBhdGggYW5kIHJldHVybnMgaXRzIGNvbnRlbnRzLgogCiAgICAgS2V5d29yZCBhcmd1bWVudHM6CiAgICAgdmFsdWVzIC0tIFRoZSBtYXAgdG8gYXBwZW5kIHRoZSBjb250ZW50cyB0byAoZGVmYXVsdCB7fSkKICAgICAiIiIKKyAgICBpZiB2YWx1ZXMgaXMgTm9uZToKKyAgICAgICAgdmFsdWVzID0ge30KIAogICAgICMgQXR0ZW1wdCB0byByZWFkIHRoZSBmaWxlIGNvbnRlbnRzCiAgICAgdHJ5OgpAQCAtNzYsMTIgKzc4LDE1IEBACiAgICAgcmV0dXJuIHZhbHVlcwogCiAKLWRlZiByZWFkX21zYnVpbGRfanNvbihwYXRoLCB2YWx1ZXM9W10pOgorZGVmIHJlYWRfbXNidWlsZF9qc29uKHBhdGgsIHZhbHVlcz1Ob25lKToKICAgICAiIiJSZWFkcyB0aGUgTVMgQnVpbGQgSlNPTiBmaWxlIGF0IHRoZSBwYXRoIGFuZCByZXR1cm5zIGl0cyBjb250ZW50cy4KIAogICAgIEtleXdvcmQgYXJndW1lbnRzOgogICAgIHZhbHVlcyAtLSBUaGUgbGlzdCB0byBhcHBlbmQgdGhlIGNvbnRlbnRzIHRvIChkZWZhdWx0IFtdKQogICAgICIiIgorICAgIGlmIHZhbHVlcyBpcyBOb25lOgorICAgICAgICB2YWx1ZXMgPSBbXQorCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgogICAgICAgICBsb2dnaW5nLmluZm8oJ0NvdWxkIG5vdCBmaW5kIE1TIEJ1aWxkIEpTT04gZmlsZSBhdCAlcycsIHBhdGgpCiAgICAgICAgIHJldHVybiB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUNvcmVUcnlDb21waWxlLmN4eCBiL1NvdXJjZS9jbUNvcmVUcnlDb21waWxlLmN4eAppbmRleCA1NzExY2FlLi42M2MxNDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db3JlVHJ5Q29tcGlsZS5jeHgKKysrIGIvU291cmNlL2NtQ29yZVRyeUNvbXBpbGUuY3h4CkBAIC04LDkgKzgsOSBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtc3lzL0RpcmVjdG9yeS5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgImNtc3lzL0RpcmVjdG9yeS5oeHgiCiAKICNpbmNsdWRlICJjbUV4cG9ydFRyeUNvbXBpbGVGaWxlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0yNSw2OSArMjYsMjA1IEBACiAjaW5jbHVkZSAiY21WZXJzaW9uLmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKIAotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9DX0NPTVBJTEVSX0VYVEVSTkFMX1RPT0xDSEFJTiA9Ci0gICJDTUFLRV9DX0NPTVBJTEVSX0VYVEVSTkFMX1RPT0xDSEFJTiI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0NfQ09NUElMRVJfVEFSR0VUID0gIkNNQUtFX0NfQ09NUElMRVJfVEFSR0VUIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQ19MSU5LX05PX1BJRV9TVVBQT1JURUQgPQotICAiQ01BS0VfQ19MSU5LX05PX1BJRV9TVVBQT1JURUQiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9DX0xJTktfUElFX1NVUFBPUlRFRCA9Ci0gICJDTUFLRV9DX0xJTktfUElFX1NVUFBPUlRFRCI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0NYWF9DT01QSUxFUl9FWFRFUk5BTF9UT09MQ0hBSU4gPQotICAiQ01BS0VfQ1hYX0NPTVBJTEVSX0VYVEVSTkFMX1RPT0xDSEFJTiI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0NYWF9DT01QSUxFUl9UQVJHRVQgPQotICAiQ01BS0VfQ1hYX0NPTVBJTEVSX1RBUkdFVCI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0NYWF9MSU5LX05PX1BJRV9TVVBQT1JURUQgPQotICAiQ01BS0VfQ1hYX0xJTktfTk9fUElFX1NVUFBPUlRFRCI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0NYWF9MSU5LX1BJRV9TVVBQT1JURUQgPQotICAiQ01BS0VfQ1hYX0xJTktfUElFX1NVUFBPUlRFRCI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0VOQUJMRV9FWFBPUlRTID0gIkNNQUtFX0VOQUJMRV9FWFBPUlRTIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfTElOS19TRUFSQ0hfRU5EX1NUQVRJQyA9CituYW1lc3BhY2UgeworY2xhc3MgTGFuZ3VhZ2VTdGFuZGFyZFN0YXRlCit7CitwdWJsaWM6CisgIExhbmd1YWdlU3RhbmRhcmRTdGF0ZShzdGQ6OnN0cmluZyYmIGxhbmcpCisgICAgOiBJc0VuYWJsZWQoZmFsc2UpCisgICAgLCBEaWRTdGFuZGFyZChmYWxzZSkKKyAgICAsIERpZFN0YW5kYXJkUmVxdWlyZWQoZmFsc2UpCisgICAgLCBEaWRFeHRlbnNpb25zKGZhbHNlKQorICAgICwgU3RhbmRhcmRGbGFnKGxhbmcgKyAiX1NUQU5EQVJEIikKKyAgICAsIFJlcXVpcmVkRmxhZyhsYW5nICsgIl9TVEFOREFSRF9SRVFVSVJFRCIpCisgICAgLCBFeHRlbnNpb25GbGFnKGxhbmcgKyAiX0VYVEVOU0lPTlMiKQorICB7CisgIH0KKworICB2b2lkIEVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgdGhpcy0+SXNFbmFibGVkID0gaXNFbmFibGVkOyB9CisKKyAgYm9vbCBVcGRhdGVJZk1hdGNoZXMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmd2LCBzaXplX3QmIGluZGV4KQorICB7CisgICAgYm9vbCB1cGRhdGVkID0gZmFsc2U7CisgICAgaWYgKGFyZ3ZbaW5kZXhdID09IHRoaXMtPlN0YW5kYXJkRmxhZykgeworICAgICAgdGhpcy0+RGlkU3RhbmRhcmQgPSB0cnVlOworICAgICAgdGhpcy0+U3RhbmRhcmRWYWx1ZSA9IGFyZ3ZbKytpbmRleF07CisgICAgICB1cGRhdGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGFyZ3ZbaW5kZXhdID09IHRoaXMtPlJlcXVpcmVkRmxhZykgeworICAgICAgdGhpcy0+RGlkU3RhbmRhcmRSZXF1aXJlZCA9IHRydWU7CisgICAgICB0aGlzLT5SZXF1aXJlZFZhbHVlID0gYXJndlsrK2luZGV4XTsKKyAgICAgIHVwZGF0ZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYXJndltpbmRleF0gPT0gdGhpcy0+RXh0ZW5zaW9uRmxhZykgeworICAgICAgdGhpcy0+RGlkRXh0ZW5zaW9ucyA9IHRydWU7CisgICAgICB0aGlzLT5FeHRlbnNpb25WYWx1ZSA9IGFyZ3ZbKytpbmRleF07CisgICAgICB1cGRhdGVkID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHVwZGF0ZWQ7CisgIH0KKworICBib29sIFZhbGlkYXRlKGNtTWFrZWZpbGUqIGNvbnN0IG1ha2VmaWxlKSBjb25zdAorICB7CisgICAgaWYgKHRoaXMtPkRpZFN0YW5kYXJkKSB7CisgICAgICBtYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgIGNtU3RyQ2F0KHRoaXMtPlN0YW5kYXJkRmxhZywKKyAgICAgICAgICAgICAgICAgIiBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHRoaXMtPkRpZFN0YW5kYXJkUmVxdWlyZWQpIHsKKyAgICAgIG1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgY21TdHJDYXQodGhpcy0+UmVxdWlyZWRGbGFnLAorICAgICAgICAgICAgICAgICAiIGFsbG93ZWQgb25seSBpbiBzb3VyY2UgZmlsZSBzaWduYXR1cmUuIikpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodGhpcy0+RGlkRXh0ZW5zaW9ucykgeworICAgICAgbWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKKyAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICBjbVN0ckNhdCh0aGlzLT5FeHRlbnNpb25GbGFnLAorICAgICAgICAgICAgICAgICAiIGFsbG93ZWQgb25seSBpbiBzb3VyY2UgZmlsZSBzaWduYXR1cmUuIikpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgYm9vbCBEaWROb25lKCkgY29uc3QKKyAgeworICAgIHJldHVybiAhdGhpcy0+RGlkU3RhbmRhcmQgJiYgIXRoaXMtPkRpZFN0YW5kYXJkUmVxdWlyZWQgJiYKKyAgICAgICF0aGlzLT5EaWRFeHRlbnNpb25zOworICB9CisKKyAgdm9pZCBMb2FkVW5zZXRQcm9wZXJ0eVZhbHVlcyhjbU1ha2VmaWxlKiBjb25zdCBtYWtlZmlsZSwgYm9vbCBob25vclN0YW5kYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd2FybkNNUDAwNjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB3YXJuQ01QMDA2N1ZhcmlhYmxlcykKKyAgeworICAgIGlmICghdGhpcy0+SXNFbmFibGVkKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBsb29rdXBTdGRWYXIgPSBbJl0oc3RkOjpzdHJpbmcgY29uc3QmIHZhcikgLT4gc3RkOjpzdHJpbmcgeworICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBtYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24odmFyKTsKKyAgICAgIGlmICh3YXJuQ01QMDA2NyAmJiAhdmFsdWUuZW1wdHkoKSkgeworICAgICAgICB2YWx1ZS5jbGVhcigpOworICAgICAgICB3YXJuQ01QMDA2N1ZhcmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9OworCisgICAgaWYgKGhvbm9yU3RhbmRhcmQgfHwgd2FybkNNUDAwNjcpIHsKKyAgICAgIGlmICghdGhpcy0+RGlkU3RhbmRhcmQpIHsKKyAgICAgICAgdGhpcy0+U3RhbmRhcmRWYWx1ZSA9CisgICAgICAgICAgbG9va3VwU3RkVmFyKGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5TdGFuZGFyZEZsYWcpKTsKKyAgICAgIH0KKyAgICAgIGlmICghdGhpcy0+RGlkU3RhbmRhcmRSZXF1aXJlZCkgeworICAgICAgICB0aGlzLT5SZXF1aXJlZFZhbHVlID0KKyAgICAgICAgICBsb29rdXBTdGRWYXIoY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPlJlcXVpcmVkRmxhZykpOworICAgICAgfQorICAgICAgaWYgKCF0aGlzLT5EaWRFeHRlbnNpb25zKSB7CisgICAgICAgIHRoaXMtPkV4dGVuc2lvblZhbHVlID0KKyAgICAgICAgICBsb29rdXBTdGRWYXIoY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkV4dGVuc2lvbkZsYWcpKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICB2b2lkIFdyaXRlUHJvcGVydGllcyhGSUxFKiBmb3V0LCBzdGQ6OnN0cmluZyBjb25zdCYgdGFyZ2V0TmFtZSkgY29uc3QKKyAgeworICAgIGlmICghdGhpcy0+SXNFbmFibGVkKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byB3cml0ZVByb3AgPSBbJl0oc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSkgeworICAgICAgZnByaW50Zihmb3V0LCAic2V0X3Byb3BlcnR5KFRBUkdFVCAlcyBQUk9QRVJUWSAlcyAlcylcbiIsCisgICAgICAgICAgICAgIHRhcmdldE5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKHByb3ApLmNfc3RyKCksCisgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpFc2NhcGVGb3JDTWFrZSh2YWx1ZSkuY19zdHIoKSk7CisgICAgfTsKKworICAgIGlmICghdGhpcy0+U3RhbmRhcmRWYWx1ZS5lbXB0eSgpKSB7CisgICAgICB3cml0ZVByb3AodGhpcy0+U3RhbmRhcmRGbGFnLCB0aGlzLT5TdGFuZGFyZFZhbHVlKTsKKyAgICB9CisgICAgaWYgKCF0aGlzLT5SZXF1aXJlZFZhbHVlLmVtcHR5KCkpIHsKKyAgICAgIHdyaXRlUHJvcCh0aGlzLT5SZXF1aXJlZEZsYWcsIHRoaXMtPlJlcXVpcmVkVmFsdWUpOworICAgIH0KKyAgICBpZiAoIXRoaXMtPkV4dGVuc2lvblZhbHVlLmVtcHR5KCkpIHsKKyAgICAgIHdyaXRlUHJvcCh0aGlzLT5FeHRlbnNpb25GbGFnLCB0aGlzLT5FeHRlbnNpb25WYWx1ZSk7CisgICAgfQorICB9CisKK3ByaXZhdGU6CisgIGJvb2wgSXNFbmFibGVkOworICBib29sIERpZFN0YW5kYXJkOworICBib29sIERpZFN0YW5kYXJkUmVxdWlyZWQ7CisgIGJvb2wgRGlkRXh0ZW5zaW9uczsKKworICBzdGQ6OnN0cmluZyBTdGFuZGFyZEZsYWc7CisgIHN0ZDo6c3RyaW5nIFJlcXVpcmVkRmxhZzsKKyAgc3RkOjpzdHJpbmcgRXh0ZW5zaW9uRmxhZzsKKworICBzdGQ6OnN0cmluZyBTdGFuZGFyZFZhbHVlOworICBzdGQ6OnN0cmluZyBSZXF1aXJlZFZhbHVlOworICBzdGQ6OnN0cmluZyBFeHRlbnNpb25WYWx1ZTsKK307CisKK2NvbnN0ZXhwciBzaXplX3QgbGFuZ19wcm9wZXJ0eV9zdGFydCA9IDA7Citjb25zdGV4cHIgc2l6ZV90IGxhbmdfcHJvcGVydHlfc2l6ZSA9IDQ7Citjb25zdGV4cHIgc2l6ZV90IHBpZV9wcm9wZXJ0eV9zdGFydCA9IDQ7Citjb25zdGV4cHIgc2l6ZV90IHBpZV9wcm9wZXJ0eV9zaXplID0gMjsKKyNkZWZpbmUgU0VUVVBfTEFOR1VBR0UobmFtZSwgbGFuZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWVbbGFuZ19wcm9wZXJ0eV9zaXplICsgcGllX3Byb3BlcnR5X3NpemUgKyAxXSA9IFwKKyAgICB7ICJDTUFLRV8iICNsYW5nICJfQ09NUElMRVJfRVhURVJOQUxfVE9PTENIQUlOIiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICJDTUFLRV8iICNsYW5nICJfQ09NUElMRVJfVEFSR0VUIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICJDTUFLRV8iICNsYW5nICJfTElOS19OT19QSUVfU1VQUE9SVEVEIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICJDTUFLRV8iICNsYW5nICJfUElFX1NVUFBPUlRFRCIsICIiIH0KKworLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtc3VzcGljaW91cy1taXNzaW5nLWNvbW1hKQorU0VUVVBfTEFOR1VBR0UoY19wcm9wZXJ0aWVzLCBDKTsKKy8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLXN1c3BpY2lvdXMtbWlzc2luZy1jb21tYSkKK1NFVFVQX0xBTkdVQUdFKGN4eF9wcm9wZXJ0aWVzLCBDWFgpOworCisvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1zdXNwaWNpb3VzLW1pc3NpbmctY29tbWEpCitTRVRVUF9MQU5HVUFHRShjdWRhX3Byb3BlcnRpZXMsIENVREEpOworLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtc3VzcGljaW91cy1taXNzaW5nLWNvbW1hKQorU0VUVVBfTEFOR1VBR0UoZm9ydHJhbl9wcm9wZXJ0aWVzLCBGb3J0cmFuKTsKKy8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLXN1c3BpY2lvdXMtbWlzc2luZy1jb21tYSkKK1NFVFVQX0xBTkdVQUdFKG9iamNfcHJvcGVydGllcywgT0JKQyk7CisvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1zdXNwaWNpb3VzLW1pc3NpbmctY29tbWEpCitTRVRVUF9MQU5HVUFHRShvYmpjeHhfcHJvcGVydGllcywgT0JKQ1hYKTsKKy8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLXN1c3BpY2lvdXMtbWlzc2luZy1jb21tYSkKK1NFVFVQX0xBTkdVQUdFKHN3aWZ0X3Byb3BlcnRpZXMsIFN3aWZ0KTsKKyN1bmRlZiBTRVRVUF9MQU5HVUFHRQorCitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTID0gIkNNQUtFX0NVREFfQVJDSElURUNUVVJFUyI7CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkgPSAiQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkiOworc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0VOQUJMRV9FWFBPUlRTID0gIkNNQUtFX0VOQUJMRV9FWFBPUlRTIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9MSU5LX1NFQVJDSF9FTkRfU1RBVElDID0KICAgIkNNQUtFX0xJTktfU0VBUkNIX0VORF9TVEFUSUMiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9MSU5LX1NFQVJDSF9TVEFSVF9TVEFUSUMgPQorc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX0xJTktfU0VBUkNIX1NUQVJUX1NUQVRJQyA9CiAgICJDTUFLRV9MSU5LX1NFQVJDSF9TVEFSVF9TVEFUSUMiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUID0KK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUID0KICAgIkNNQUtFX01TVkNfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFQiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9PU1hfQVJDSElURUNUVVJFUyA9ICJDTUFLRV9PU1hfQVJDSElURUNUVVJFUyI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9Ci0gICJDTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVQiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9PU1hfU1lTUk9PVCA9ICJDTUFLRV9PU1hfU1lTUk9PVCI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgPQorc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX09TWF9BUkNISVRFQ1RVUkVTID0gIkNNQUtFX09TWF9BUkNISVRFQ1RVUkVTIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAiQ01BS0VfT1NYX0RFUExPWU1FTlRfVEFSR0VUIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9PU1hfU1lTUk9PVCA9ICJDTUFLRV9PU1hfU1lTUk9PVCI7CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfQVBQTEVfQVJDSF9TWVNST09UUyA9ICJDTUFLRV9BUFBMRV9BUkNIX1NZU1JPT1RTIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFID0KICAgIkNNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9TWVNST09UID0gIkNNQUtFX1NZU1JPT1QiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9TWVNST09UX0NPTVBJTEUgPSAiQ01BS0VfU1lTUk9PVF9DT01QSUxFIjsKLXN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfU1lTUk9PVF9MSU5LID0gIkNNQUtFX1NZU1JPT1RfTElOSyI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX1N3aWZ0X0NPTVBJTEVSX1RBUkdFVCA9Ci0gICJDTUFLRV9Td2lmdF9DT01QSUxFUl9UQVJHRVQiOwotc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9UUllfQ09NUElMRV9PU1hfQVJDSElURUNUVVJFUyA9CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfU1lTUk9PVCA9ICJDTUFLRV9TWVNST09UIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9TWVNST09UX0NPTVBJTEUgPSAiQ01BS0VfU1lTUk9PVF9DT01QSUxFIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9TWVNST09UX0xJTksgPSAiQ01BS0VfU1lTUk9PVF9MSU5LIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IGtDTUFLRV9UUllfQ09NUElMRV9PU1hfQVJDSElURUNUVVJFUyA9CiAgICJDTUFLRV9UUllfQ09NUElMRV9PU1hfQVJDSElURUNUVVJFUyI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX1RSWV9DT01QSUxFX1BMQVRGT1JNX1ZBUklBQkxFUyA9CitzdGQ6OnN0cmluZyBjb25zdCBrQ01BS0VfVFJZX0NPTVBJTEVfUExBVEZPUk1fVkFSSUFCTEVTID0KICAgIkNNQUtFX1RSWV9DT01QSUxFX1BMQVRGT1JNX1ZBUklBQkxFUyI7Ci1zdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX1dBUk5fREVQUkVDQVRFRCA9ICJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiOworc3RkOjpzdHJpbmcgY29uc3Qga0NNQUtFX1dBUk5fREVQUkVDQVRFRCA9ICJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiOwogCiAvKiBHSFMgTXVsdGkgcGxhdGZvcm0gdmFyaWFibGVzICovCi1zdGF0aWMgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGdoc19wbGF0Zm9ybV92YXJzeworc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGNvbnN0IGdoc19wbGF0Zm9ybV92YXJzewogICAiR0hTX1RBUkdFVF9QTEFURk9STSIsICJHSFNfUFJJTUFSWV9UQVJHRVQiLCAiR0hTX1RPT0xTRVRfUk9PVCIsCiAgICJHSFNfT1NfUk9PVCIsICAgICAgICAgIkdIU19PU19ESVIiLCAgICAgICAgICJHSFNfQlNQX05BTUUiLAogICAiR0hTX09TX0RJUl9PUFRJT04iCiB9OwotCi1zdGF0aWMgdm9pZCB3cml0ZVByb3BlcnR5KEZJTEUqIGZvdXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YXJnZXROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlKQotewotICBmcHJpbnRmKGZvdXQsICJzZXRfcHJvcGVydHkoVEFSR0VUICVzIFBST1BFUlRZICVzICVzKVxuIiwgdGFyZ2V0TmFtZS5jX3N0cigpLAotICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpFc2NhcGVGb3JDTWFrZShwcm9wKS5jX3N0cigpLAotICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpFc2NhcGVGb3JDTWFrZSh2YWx1ZSkuY19zdHIoKSk7Ci19Ci0KLXN0ZDo6c3RyaW5nIGNtQ29yZVRyeUNvbXBpbGU6Okxvb2t1cFN0ZFZhcihzdGQ6OnN0cmluZyBjb25zdCYgdmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd2FybkNNUDAwNjcpCi17Ci0gIHN0ZDo6c3RyaW5nIHZhbHVlID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKHZhcik7Ci0gIGlmICh3YXJuQ01QMDA2NyAmJiAhdmFsdWUuZW1wdHkoKSkgewotICAgIHZhbHVlLmNsZWFyKCk7Ci0gICAgdGhpcy0+V2FybkNNUDAwNjcucHVzaF9iYWNrKHZhcik7Ci0gIH0KLSAgcmV0dXJuIHZhbHVlOwogfQogCiBpbnQgY21Db3JlVHJ5Q29tcGlsZTo6VHJ5Q29tcGlsZUNvZGUoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmd2LApAQCAtOTksMjkgKzIzNiwyMiBAQAogICB0aGlzLT5TcmNGaWxlU2lnbmF0dXJlID0gdHJ1ZTsKIAogICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSA9IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRTsKLSAgY29uc3QgY2hhciogdHQgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRSIpOwotICBpZiAoIWlzVHJ5UnVuICYmIHR0ICYmICp0dCkgewotICAgIGlmIChzdHJjbXAodHQsIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkpID09Ci0gICAgICAgIDApIHsKKyAgY21Qcm9wIHR0ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZigiQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUiKTsKKyAgaWYgKCFpc1RyeVJ1biAmJiBjbU5vbmVtcHR5KHR0KSkgeworICAgIGlmICgqdHQgPT0gY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSkgewogICAgICAgdGFyZ2V0VHlwZSA9IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcCh0dCwKLSAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmICgqdHQgPT0KKyAgICAgICAgICAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpKSB7CiAgICAgICB0YXJnZXRUeXBlID0gY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWTsKICAgICB9IGVsc2UgewogICAgICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgICBzdGQ6OnN0cmluZygiSW52YWxpZCB2YWx1ZSAnIikgKyB0dCArCi0gICAgICAgICAgIicgZm9yICIKLSAgICAgICAgICAiQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUuICBPbmx5ICIKLSAgICAgICAgICAiJyIgKwotICAgICAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgKwotICAgICAgICAgICInIGFuZCAiCi0gICAgICAgICAgIiciICsKLSAgICAgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZShjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSArCi0gICAgICAgICAgIicgIgotICAgICAgICAgICJhcmUgYWxsb3dlZC4iKTsKKyAgICAgICAgY21TdHJDYXQoIkludmFsaWQgdmFsdWUgJyIsICp0dCwKKyAgICAgICAgICAgICAgICAgIicgZm9yIENNQUtFX1RSWV9DT01QSUxFX1RBUkdFVF9UWVBFLiAgT25seSAnIiwKKyAgICAgICAgICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSwKKyAgICAgICAgICAgICAgICAgIicgYW5kICciLAorICAgICAgICAgICAgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZShjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSwKKyAgICAgICAgICAgICAgICAgIicgYXJlIGFsbG93ZWQuIikpOwogICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgfQpAQCAtMTM1LDIxICsyNjUsMTEgQEAKICAgc3RkOjpzdHJpbmcgb3V0cHV0VmFyaWFibGU7CiAgIHN0ZDo6c3RyaW5nIGNvcHlGaWxlOwogICBzdGQ6OnN0cmluZyBjb3B5RmlsZUVycm9yOwotICBzdGQ6OnN0cmluZyBjU3RhbmRhcmQ7Ci0gIHN0ZDo6c3RyaW5nIG9iamNTdGFuZGFyZDsKLSAgc3RkOjpzdHJpbmcgY3h4U3RhbmRhcmQ7Ci0gIHN0ZDo6c3RyaW5nIG9iamN4eFN0YW5kYXJkOwotICBzdGQ6OnN0cmluZyBjdWRhU3RhbmRhcmQ7Ci0gIHN0ZDo6c3RyaW5nIGNTdGFuZGFyZFJlcXVpcmVkOwotICBzdGQ6OnN0cmluZyBjeHhTdGFuZGFyZFJlcXVpcmVkOwotICBzdGQ6OnN0cmluZyBvYmpjU3RhbmRhcmRSZXF1aXJlZDsKLSAgc3RkOjpzdHJpbmcgb2JqY3h4U3RhbmRhcmRSZXF1aXJlZDsKLSAgc3RkOjpzdHJpbmcgY3VkYVN0YW5kYXJkUmVxdWlyZWQ7Ci0gIHN0ZDo6c3RyaW5nIGNFeHRlbnNpb25zOwotICBzdGQ6OnN0cmluZyBjeHhFeHRlbnNpb25zOwotICBzdGQ6OnN0cmluZyBvYmpjRXh0ZW5zaW9uczsKLSAgc3RkOjpzdHJpbmcgb2JqY3h4RXh0ZW5zaW9uczsKLSAgc3RkOjpzdHJpbmcgY3VkYUV4dGVuc2lvbnM7CisgIExhbmd1YWdlU3RhbmRhcmRTdGF0ZSBjU3RhdGUoIkMiKTsKKyAgTGFuZ3VhZ2VTdGFuZGFyZFN0YXRlIGN1ZGFTdGF0ZSgiQ1VEQSIpOworICBMYW5ndWFnZVN0YW5kYXJkU3RhdGUgY3h4U3RhdGUoIkNYWCIpOworICBMYW5ndWFnZVN0YW5kYXJkU3RhdGUgb2JqY1N0YXRlKCJPQkpDIik7CisgIExhbmd1YWdlU3RhbmRhcmRTdGF0ZSBvYmpjeHhTdGF0ZSgiT0JKQ1hYIik7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0YXJnZXRzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua09wdGlvbnM7CiAgIHN0ZDo6c3RyaW5nIGxpYnNUb0xpbmsgPSAiICI7CkBAIC0xNTgsMjEgKzI3OCw2IEBACiAgIGJvb2wgZGlkT3V0cHV0VmFyaWFibGUgPSBmYWxzZTsKICAgYm9vbCBkaWRDb3B5RmlsZSA9IGZhbHNlOwogICBib29sIGRpZENvcHlGaWxlRXJyb3IgPSBmYWxzZTsKLSAgYm9vbCBkaWRDU3RhbmRhcmQgPSBmYWxzZTsKLSAgYm9vbCBkaWRDeHhTdGFuZGFyZCA9IGZhbHNlOwotICBib29sIGRpZE9iakNTdGFuZGFyZCA9IGZhbHNlOwotICBib29sIGRpZE9iakN4eFN0YW5kYXJkID0gZmFsc2U7Ci0gIGJvb2wgZGlkQ3VkYVN0YW5kYXJkID0gZmFsc2U7Ci0gIGJvb2wgZGlkQ1N0YW5kYXJkUmVxdWlyZWQgPSBmYWxzZTsKLSAgYm9vbCBkaWRDeHhTdGFuZGFyZFJlcXVpcmVkID0gZmFsc2U7Ci0gIGJvb2wgZGlkT2JqQ1N0YW5kYXJkUmVxdWlyZWQgPSBmYWxzZTsKLSAgYm9vbCBkaWRPYmpDeHhTdGFuZGFyZFJlcXVpcmVkID0gZmFsc2U7Ci0gIGJvb2wgZGlkQ3VkYVN0YW5kYXJkUmVxdWlyZWQgPSBmYWxzZTsKLSAgYm9vbCBkaWRDRXh0ZW5zaW9ucyA9IGZhbHNlOwotICBib29sIGRpZEN4eEV4dGVuc2lvbnMgPSBmYWxzZTsKLSAgYm9vbCBkaWRPYmpDRXh0ZW5zaW9ucyA9IGZhbHNlOwotICBib29sIGRpZE9iakN4eEV4dGVuc2lvbnMgPSBmYWxzZTsKLSAgYm9vbCBkaWRDdWRhRXh0ZW5zaW9ucyA9IGZhbHNlOwogICBib29sIHVzZVNvdXJjZXMgPSBhcmd2WzJdID09ICJTT1VSQ0VTIjsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNvdXJjZXM7CiAKQEAgLTE4NiwyMSArMjkxLDYgQEAKICAgICBEb2luZ091dHB1dFZhcmlhYmxlLAogICAgIERvaW5nQ29weUZpbGUsCiAgICAgRG9pbmdDb3B5RmlsZUVycm9yLAotICAgIERvaW5nQ1N0YW5kYXJkLAotICAgIERvaW5nQ3h4U3RhbmRhcmQsCi0gICAgRG9pbmdPYmpDU3RhbmRhcmQsCi0gICAgRG9pbmdPYmpDeHhTdGFuZGFyZCwKLSAgICBEb2luZ0N1ZGFTdGFuZGFyZCwKLSAgICBEb2luZ0NTdGFuZGFyZFJlcXVpcmVkLAotICAgIERvaW5nQ3h4U3RhbmRhcmRSZXF1aXJlZCwKLSAgICBEb2luZ09iakNTdGFuZGFyZFJlcXVpcmVkLAotICAgIERvaW5nT2JqQ3h4U3RhbmRhcmRSZXF1aXJlZCwKLSAgICBEb2luZ0N1ZGFTdGFuZGFyZFJlcXVpcmVkLAotICAgIERvaW5nQ0V4dGVuc2lvbnMsCi0gICAgRG9pbmdDeHhFeHRlbnNpb25zLAotICAgIERvaW5nT2JqQ0V4dGVuc2lvbnMsCi0gICAgRG9pbmdPYmpDeHhFeHRlbnNpb25zLAotICAgIERvaW5nQ3VkYUV4dGVuc2lvbnMsCiAgICAgRG9pbmdTb3VyY2VzLAogICAgIERvaW5nQ01ha2VJbnRlcm5hbAogICB9OwpAQCAtMjI0LDUxICszMTQsMTIgQEAKICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIkNPUFlfRklMRV9FUlJPUiIpIHsKICAgICAgIGRvaW5nID0gRG9pbmdDb3B5RmlsZUVycm9yOwogICAgICAgZGlkQ29weUZpbGVFcnJvciA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd2W2ldID09ICJDX1NUQU5EQVJEIikgewotICAgICAgZG9pbmcgPSBEb2luZ0NTdGFuZGFyZDsKLSAgICAgIGRpZENTdGFuZGFyZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd2W2ldID09ICJDWFhfU1RBTkRBUkQiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nQ3h4U3RhbmRhcmQ7Ci0gICAgICBkaWRDeHhTdGFuZGFyZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd2W2ldID09ICJPQkpDX1NUQU5EQVJEIikgewotICAgICAgZG9pbmcgPSBEb2luZ09iakNTdGFuZGFyZDsKLSAgICAgIGRpZE9iakNTdGFuZGFyZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd2W2ldID09ICJPQkpDWFhfU1RBTkRBUkQiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nT2JqQ3h4U3RhbmRhcmQ7Ci0gICAgICBkaWRPYmpDeHhTdGFuZGFyZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd2W2ldID09ICJDVURBX1NUQU5EQVJEIikgewotICAgICAgZG9pbmcgPSBEb2luZ0N1ZGFTdGFuZGFyZDsKLSAgICAgIGRpZEN1ZGFTdGFuZGFyZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd2W2ldID09ICJDX1NUQU5EQVJEX1JFUVVJUkVEIikgewotICAgICAgZG9pbmcgPSBEb2luZ0NTdGFuZGFyZFJlcXVpcmVkOwotICAgICAgZGlkQ1N0YW5kYXJkUmVxdWlyZWQgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiQ1hYX1NUQU5EQVJEX1JFUVVJUkVEIikgewotICAgICAgZG9pbmcgPSBEb2luZ0N4eFN0YW5kYXJkUmVxdWlyZWQ7Ci0gICAgICBkaWRDeHhTdGFuZGFyZFJlcXVpcmVkID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIk9CSkNfU1RBTkRBUkRfUkVRVUlSRUQiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nT2JqQ1N0YW5kYXJkUmVxdWlyZWQ7Ci0gICAgICBkaWRPYmpDU3RhbmRhcmRSZXF1aXJlZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChhcmd2W2ldID09ICJPQkpDWFhfU1RBTkRBUkRfUkVRVUlSRUQiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nT2JqQ3h4U3RhbmRhcmRSZXF1aXJlZDsKLSAgICAgIGRpZE9iakN4eFN0YW5kYXJkUmVxdWlyZWQgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJndltpXSA9PSAiQ1VEQV9TVEFOREFSRF9SRVFVSVJFRCIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdDdWRhU3RhbmRhcmRSZXF1aXJlZDsKLSAgICAgIGRpZEN1ZGFTdGFuZGFyZFJlcXVpcmVkID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIkNfRVhURU5TSU9OUyIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdDRXh0ZW5zaW9uczsKLSAgICAgIGRpZENFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIkNYWF9FWFRFTlNJT05TIikgewotICAgICAgZG9pbmcgPSBEb2luZ0N4eEV4dGVuc2lvbnM7Ci0gICAgICBkaWRDeHhFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIk9CSkNfRVhURU5TSU9OUyIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdPYmpDRXh0ZW5zaW9uczsKLSAgICAgIGRpZE9iakNFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIk9CSkNYWF9FWFRFTlNJT05TIikgewotICAgICAgZG9pbmcgPSBEb2luZ09iakN4eEV4dGVuc2lvbnM7Ci0gICAgICBkaWRPYmpDeHhFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIkNVREFfRVhURU5TSU9OUyIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdDdWRhRXh0ZW5zaW9uczsKLSAgICAgIGRpZEN1ZGFFeHRlbnNpb25zID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGNTdGF0ZS5VcGRhdGVJZk1hdGNoZXMoYXJndiwgaSkgfHwKKyAgICAgICAgICAgICAgIGN4eFN0YXRlLlVwZGF0ZUlmTWF0Y2hlcyhhcmd2LCBpKSB8fAorICAgICAgICAgICAgICAgY3VkYVN0YXRlLlVwZGF0ZUlmTWF0Y2hlcyhhcmd2LCBpKSB8fAorICAgICAgICAgICAgICAgb2JqY1N0YXRlLlVwZGF0ZUlmTWF0Y2hlcyhhcmd2LCBpKSB8fAorICAgICAgICAgICAgICAgb2JqY3h4U3RhdGUuVXBkYXRlSWZNYXRjaGVzKGFyZ3YsIGkpKSB7CisgICAgICBjb250aW51ZTsKICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0gPT0gIl9fQ01BS0VfSU5URVJOQUwiKSB7CiAgICAgICBkb2luZyA9IERvaW5nQ01ha2VJbnRlcm5hbDsKICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nQ01ha2VGbGFncykgewpAQCAtMjk0LDEyICszNDUsMTAgQEAKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKICAgICAgICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgICAgICAgICAiT25seSBsaWJyYXJpZXMgbWF5IGJlIHVzZWQgYXMgdHJ5X2NvbXBpbGUgb3IgdHJ5X3J1biBJTVBPUlRFRCAiCi0gICAgICAgICAgICAgICJMSU5LX0xJQlJBUklFUy4gIEdvdCAiICsKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyh0Z3QtPkdldE5hbWUoKSkgKwotICAgICAgICAgICAgICAgICIgb2YgIgotICAgICAgICAgICAgICAgICJ0eXBlICIgKwotICAgICAgICAgICAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRndC0+R2V0VHlwZSgpKSArICIuIik7CisgICAgICAgICAgICAgIGNtU3RyQ2F0KCJPbmx5IGxpYnJhcmllcyBtYXkgYmUgdXNlZCBhcyB0cnlfY29tcGlsZSBvciB0cnlfcnVuICIKKyAgICAgICAgICAgICAgICAgICAgICAgIklNUE9SVEVEIExJTktfTElCUkFSSUVTLiAgR290ICIsCisgICAgICAgICAgICAgICAgICAgICAgIHRndC0+R2V0TmFtZSgpLCAiIG9mIHR5cGUgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGd0LT5HZXRUeXBlKCkpLCAiLiIpKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBpZiAodGd0LT5Jc0ltcG9ydGVkKCkpIHsKQEAgLTMxNSw1MSArMzY0LDYgQEAKICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nQ29weUZpbGVFcnJvcikgewogICAgICAgY29weUZpbGVFcnJvciA9IGFyZ3ZbaV07CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nQ1N0YW5kYXJkKSB7Ci0gICAgICBjU3RhbmRhcmQgPSBhcmd2W2ldOwotICAgICAgZG9pbmcgPSBEb2luZ05vbmU7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ0N4eFN0YW5kYXJkKSB7Ci0gICAgICBjeHhTdGFuZGFyZCA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nT2JqQ1N0YW5kYXJkKSB7Ci0gICAgICBvYmpjU3RhbmRhcmQgPSBhcmd2W2ldOwotICAgICAgZG9pbmcgPSBEb2luZ05vbmU7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ09iakN4eFN0YW5kYXJkKSB7Ci0gICAgICBvYmpjeHhTdGFuZGFyZCA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nQ3VkYVN0YW5kYXJkKSB7Ci0gICAgICBjdWRhU3RhbmRhcmQgPSBhcmd2W2ldOwotICAgICAgZG9pbmcgPSBEb2luZ05vbmU7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ0NTdGFuZGFyZFJlcXVpcmVkKSB7Ci0gICAgICBjU3RhbmRhcmRSZXF1aXJlZCA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nQ3h4U3RhbmRhcmRSZXF1aXJlZCkgewotICAgICAgY3h4U3RhbmRhcmRSZXF1aXJlZCA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nT2JqQ1N0YW5kYXJkUmVxdWlyZWQpIHsKLSAgICAgIG9iamNTdGFuZGFyZFJlcXVpcmVkID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdPYmpDeHhTdGFuZGFyZFJlcXVpcmVkKSB7Ci0gICAgICBvYmpjeHhTdGFuZGFyZFJlcXVpcmVkID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDdWRhU3RhbmRhcmRSZXF1aXJlZCkgewotICAgICAgY3VkYVN0YW5kYXJkUmVxdWlyZWQgPSBhcmd2W2ldOwotICAgICAgZG9pbmcgPSBEb2luZ05vbmU7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ0NFeHRlbnNpb25zKSB7Ci0gICAgICBjRXh0ZW5zaW9ucyA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nQ3h4RXh0ZW5zaW9ucykgewotICAgICAgY3h4RXh0ZW5zaW9ucyA9IGFyZ3ZbaV07Ci0gICAgICBkb2luZyA9IERvaW5nTm9uZTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nT2JqQ0V4dGVuc2lvbnMpIHsKLSAgICAgIG9iamNFeHRlbnNpb25zID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdPYmpDeHhFeHRlbnNpb25zKSB7Ci0gICAgICBvYmpjeHhFeHRlbnNpb25zID0gYXJndltpXTsKLSAgICAgIGRvaW5nID0gRG9pbmdOb25lOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDdWRhRXh0ZW5zaW9ucykgewotICAgICAgY3VkYUV4dGVuc2lvbnMgPSBhcmd2W2ldOwotICAgICAgZG9pbmcgPSBEb2luZ05vbmU7CiAgICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ1NvdXJjZXMpIHsKICAgICAgIHNvdXJjZXMucHVzaF9iYWNrKGFyZ3ZbaV0pOwogICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDTWFrZUludGVybmFsKSB7CkBAIC00MTEsNTkgKzQxNSwyMiBAQAogICAgIHJldHVybiAtMTsKICAgfQogCi0gIGlmIChkaWRDU3RhbmRhcmQgJiYgIXRoaXMtPlNyY0ZpbGVTaWduYXR1cmUpIHsKLSAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAotICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgIkNfU1RBTkRBUkQgYWxsb3dlZCBvbmx5IGluIHNvdXJjZSBmaWxlIHNpZ25hdHVyZS4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaWYgKGRpZEN4eFN0YW5kYXJkICYmICF0aGlzLT5TcmNGaWxlU2lnbmF0dXJlKSB7Ci0gICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKLSAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICJDWFhfU1RBTkRBUkQgYWxsb3dlZCBvbmx5IGluIHNvdXJjZSBmaWxlIHNpZ25hdHVyZS4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaWYgKGRpZEN1ZGFTdGFuZGFyZCAmJiAhdGhpcy0+U3JjRmlsZVNpZ25hdHVyZSkgewotICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCi0gICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAiQ1VEQV9TVEFOREFSRCBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoZGlkQ1N0YW5kYXJkUmVxdWlyZWQgJiYgIXRoaXMtPlNyY0ZpbGVTaWduYXR1cmUpIHsKLSAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAotICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgIkNfU1RBTkRBUkRfUkVRVUlSRUQgYWxsb3dlZCBvbmx5IGluIHNvdXJjZSBmaWxlIHNpZ25hdHVyZS4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaWYgKGRpZEN4eFN0YW5kYXJkUmVxdWlyZWQgJiYgIXRoaXMtPlNyY0ZpbGVTaWduYXR1cmUpIHsKLSAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAotICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgIkNYWF9TVEFOREFSRF9SRVFVSVJFRCBhbGxvd2VkIG9ubHkgaW4gc291cmNlIGZpbGUgc2lnbmF0dXJlLiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoZGlkQ3VkYVN0YW5kYXJkUmVxdWlyZWQgJiYgIXRoaXMtPlNyY0ZpbGVTaWduYXR1cmUpIHsKLSAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAotICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgIkNVREFfU1RBTkRBUkRfUkVRVUlSRUQgYWxsb3dlZCBvbmx5IGluIHNvdXJjZSBmaWxlIHNpZ25hdHVyZS4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaWYgKGRpZENFeHRlbnNpb25zICYmICF0aGlzLT5TcmNGaWxlU2lnbmF0dXJlKSB7Ci0gICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKLSAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICJDX0VYVEVOU0lPTlMgYWxsb3dlZCBvbmx5IGluIHNvdXJjZSBmaWxlIHNpZ25hdHVyZS4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaWYgKGRpZEN4eEV4dGVuc2lvbnMgJiYgIXRoaXMtPlNyY0ZpbGVTaWduYXR1cmUpIHsKLSAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAotICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgIkNYWF9FWFRFTlNJT05TIGFsbG93ZWQgb25seSBpbiBzb3VyY2UgZmlsZSBzaWduYXR1cmUuIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIGlmIChkaWRDdWRhRXh0ZW5zaW9ucyAmJiAhdGhpcy0+U3JjRmlsZVNpZ25hdHVyZSkgewotICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCi0gICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAiQ1VEQV9FWFRFTlNJT05TIGFsbG93ZWQgb25seSBpbiBzb3VyY2UgZmlsZSBzaWduYXR1cmUuIik7Ci0gICAgcmV0dXJuIC0xOworICBpZiAoIXRoaXMtPlNyY0ZpbGVTaWduYXR1cmUpIHsKKyAgICBpZiAoIWNTdGF0ZS5WYWxpZGF0ZSh0aGlzLT5NYWtlZmlsZSkpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCFjdWRhU3RhdGUuVmFsaWRhdGUodGhpcy0+TWFrZWZpbGUpKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICghY3h4U3RhdGUuVmFsaWRhdGUodGhpcy0+TWFrZWZpbGUpKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICghb2JqY1N0YXRlLlZhbGlkYXRlKHRoaXMtPk1ha2VmaWxlKSkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoIW9iamN4eFN0YXRlLlZhbGlkYXRlKHRoaXMtPk1ha2VmaWxlKSkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgfQogCiAgIC8vIGNvbXB1dGUgdGhlIGJpbmFyeSBkaXIgd2hlbiBUUllfQ09NUElMRSBpcyBjYWxsZWQgd2l0aCBhIHNyYyBmaWxlCkBAIC01NjcsNiArNTM0LDE0IEBACiAgICAgICAgICAgICAgICptc3ZjUnVudGltZUxpYnJhcnlEZWZhdWx0ID8gIk5FVyIgOiAiT0xEIik7CiAgICAgfQogCisgICAgLyogU2V0IENVREEgYXJjaGl0ZWN0dXJlcyBwb2xpY3kgdG8gbWF0Y2ggb3V0ZXIgcHJvamVjdC4gICovCisgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwNCkgIT0KKyAgICAgICAgICBjbVBvbGljaWVzOjpORVcgJiYKKyAgICAgICAgdGVzdExhbmdzLmZpbmQoIkNVREEiKSAhPSB0ZXN0TGFuZ3MuZW5kKCkgJiYKKyAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKGtDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMpLmVtcHR5KCkpIHsKKyAgICAgIGZwcmludGYoZm91dCwgImNtYWtlX3BvbGljeShTRVQgQ01QMDEwNCBPTEQpXG4iKTsKKyAgICB9CisKICAgICBzdGQ6OnN0cmluZyBwcm9qZWN0TGFuZ3M7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGkgOiB0ZXN0TGFuZ3MpIHsKICAgICAgIHByb2plY3RMYW5ncyArPSAiICIgKyBsaTsKQEAgLTcxMywyMSArNjg4LDM1IEBACiAgICAgLy8gRm9yd2FyZCBhIHNldCBvZiB2YXJpYWJsZXMgdG8gdGhlIGlubmVyIHByb2plY3QgY2FjaGUuCiAgICAgewogICAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IHZhcnM7Ci0gICAgICB2YXJzLmluc2VydChrQ01BS0VfQ19DT01QSUxFUl9FWFRFUk5BTF9UT09MQ0hBSU4pOwotICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX0NfQ09NUElMRVJfVEFSR0VUKTsKLSAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9DWFhfQ09NUElMRVJfRVhURVJOQUxfVE9PTENIQUlOKTsKLSAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9DWFhfQ09NUElMRVJfVEFSR0VUKTsKKyAgICAgIHZhcnMuaW5zZXJ0KCZjX3Byb3BlcnRpZXNbbGFuZ19wcm9wZXJ0eV9zdGFydF0sCisgICAgICAgICAgICAgICAgICAmY19wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnQgKyBsYW5nX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgIHZhcnMuaW5zZXJ0KCZjeHhfcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0XSwKKyAgICAgICAgICAgICAgICAgICZjeHhfcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0ICsgbGFuZ19wcm9wZXJ0eV9zaXplXSk7CisgICAgICB2YXJzLmluc2VydCgmY3VkYV9wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICAgICAgICAgJmN1ZGFfcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0ICsgbGFuZ19wcm9wZXJ0eV9zaXplXSk7CisgICAgICB2YXJzLmluc2VydCgKKyAgICAgICAgJmZvcnRyYW5fcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0XSwKKyAgICAgICAgJmZvcnRyYW5fcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0ICsgbGFuZ19wcm9wZXJ0eV9zaXplXSk7CisgICAgICB2YXJzLmluc2VydCgmb2JqY19wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICAgICAgICAgJm9iamNfcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0ICsgbGFuZ19wcm9wZXJ0eV9zaXplXSk7CisgICAgICB2YXJzLmluc2VydCgKKyAgICAgICAgJm9iamN4eF9wcm9wZXJ0aWVzW2xhbmdfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAmb2JqY3h4X3Byb3BlcnRpZXNbbGFuZ19wcm9wZXJ0eV9zdGFydCArIGxhbmdfcHJvcGVydHlfc2l6ZV0pOworICAgICAgdmFycy5pbnNlcnQoJnN3aWZ0X3Byb3BlcnRpZXNbbGFuZ19wcm9wZXJ0eV9zdGFydF0sCisgICAgICAgICAgICAgICAgICAmc3dpZnRfcHJvcGVydGllc1tsYW5nX3Byb3BlcnR5X3N0YXJ0ICsgbGFuZ19wcm9wZXJ0eV9zaXplXSk7CisgICAgICB2YXJzLmluc2VydChrQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTKTsKKyAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9DVURBX1JVTlRJTUVfTElCUkFSWSk7CiAgICAgICB2YXJzLmluc2VydChrQ01BS0VfRU5BQkxFX0VYUE9SVFMpOwogICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX0xJTktfU0VBUkNIX0VORF9TVEFUSUMpOwogICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX0xJTktfU0VBUkNIX1NUQVJUX1NUQVRJQyk7CiAgICAgICB2YXJzLmluc2VydChrQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMpOwogICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX09TWF9ERVBMT1lNRU5UX1RBUkdFVCk7CiAgICAgICB2YXJzLmluc2VydChrQ01BS0VfT1NYX1NZU1JPT1QpOworICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX0FQUExFX0FSQ0hfU1lTUk9PVFMpOwogICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUpOwogICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX1NZU1JPT1QpOwogICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX1NZU1JPT1RfQ09NUElMRSk7CiAgICAgICB2YXJzLmluc2VydChrQ01BS0VfU1lTUk9PVF9MSU5LKTsKLSAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9Td2lmdF9DT01QSUxFUl9UQVJHRVQpOwogICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX1dBUk5fREVQUkVDQVRFRCk7CiAgICAgICB2YXJzLmVtcGxhY2UoIkNNQUtFX01TVkNfUlVOVElNRV9MSUJSQVJZIl9zKTsKIApAQCAtNzQxLDEwICs3MzAsMjIgQEAKICAgICAgICAgICBjbVBvbGljaWVzOjpORVcpIHsKICAgICAgICAgLy8gVG8gZW5zdXJlIGZ1bGwgc3VwcG9ydCBvZiBQSUUsIHByb3BhZ2F0ZSBjYWNoZSB2YXJpYWJsZXMKICAgICAgICAgLy8gZHJpdmluZyB0aGUgbGluayBvcHRpb25zCi0gICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9DX0xJTktfUElFX1NVUFBPUlRFRCk7Ci0gICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9DX0xJTktfTk9fUElFX1NVUFBPUlRFRCk7Ci0gICAgICAgIHZhcnMuaW5zZXJ0KGtDTUFLRV9DWFhfTElOS19QSUVfU1VQUE9SVEVEKTsKLSAgICAgICAgdmFycy5pbnNlcnQoa0NNQUtFX0NYWF9MSU5LX05PX1BJRV9TVVBQT1JURUQpOworICAgICAgICB2YXJzLmluc2VydCgmY19wcm9wZXJ0aWVzW3BpZV9wcm9wZXJ0eV9zdGFydF0sCisgICAgICAgICAgICAgICAgICAgICZjX3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0ICsgcGllX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgICAgdmFycy5pbnNlcnQoJmN4eF9wcm9wZXJ0aWVzW3BpZV9wcm9wZXJ0eV9zdGFydF0sCisgICAgICAgICAgICAgICAgICAgICZjeHhfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnQgKyBwaWVfcHJvcGVydHlfc2l6ZV0pOworICAgICAgICB2YXJzLmluc2VydCgmY3VkYV9wcm9wZXJ0aWVzW3BpZV9wcm9wZXJ0eV9zdGFydF0sCisgICAgICAgICAgICAgICAgICAgICZjdWRhX3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0ICsgcGllX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgICAgdmFycy5pbnNlcnQoCisgICAgICAgICAgJmZvcnRyYW5fcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICZmb3J0cmFuX3Byb3BlcnRpZXNbcGllX3Byb3BlcnR5X3N0YXJ0ICsgcGllX3Byb3BlcnR5X3NpemVdKTsKKyAgICAgICAgdmFycy5pbnNlcnQoJm9iamNfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICAgICAgICAgICAmb2JqY19wcm9wZXJ0aWVzW3BpZV9wcm9wZXJ0eV9zdGFydCArIHBpZV9wcm9wZXJ0eV9zaXplXSk7CisgICAgICAgIHZhcnMuaW5zZXJ0KAorICAgICAgICAgICZvYmpjeHhfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICZvYmpjeHhfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnQgKyBwaWVfcHJvcGVydHlfc2l6ZV0pOworICAgICAgICB2YXJzLmluc2VydCgmc3dpZnRfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnRdLAorICAgICAgICAgICAgICAgICAgICAmc3dpZnRfcHJvcGVydGllc1twaWVfcHJvcGVydHlfc3RhcnQgKyBwaWVfcHJvcGVydHlfc2l6ZV0pOwogICAgICAgfQogCiAgICAgICAvKiBmb3IgdGhlIFRSWV9DT01QSUxFcyB3ZSB3YW50IHRvIGJlIGFibGUgdG8gc3BlY2lmeSB0aGUgYXJjaGl0ZWN0dXJlLgpAQCAtODA3LDIxICs4MDgsMTcgQEAKICAgICB9CiAgICAgZnByaW50Zihmb3V0LCAiKVxuIik7CiAKLSAgICBib29sIGNvbnN0IHRlc3RDID0gdGVzdExhbmdzLmZpbmQoIkMiKSAhPSB0ZXN0TGFuZ3MuZW5kKCk7Ci0gICAgYm9vbCBjb25zdCB0ZXN0T2JqQyA9IHRlc3RMYW5ncy5maW5kKCJPQkpDIikgIT0gdGVzdExhbmdzLmVuZCgpOwotICAgIGJvb2wgY29uc3QgdGVzdEN4eCA9IHRlc3RMYW5ncy5maW5kKCJDWFgiKSAhPSB0ZXN0TGFuZ3MuZW5kKCk7Ci0gICAgYm9vbCBjb25zdCB0ZXN0T2JqQ3h4ID0gdGVzdExhbmdzLmZpbmQoIk9CSkNYWCIpICE9IHRlc3RMYW5ncy5lbmQoKTsKLSAgICBib29sIGNvbnN0IHRlc3RDdWRhID0gdGVzdExhbmdzLmZpbmQoIkNVREEiKSAhPSB0ZXN0TGFuZ3MuZW5kKCk7CisgICAgY1N0YXRlLkVuYWJsZWQodGVzdExhbmdzLmZpbmQoIkMiKSAhPSB0ZXN0TGFuZ3MuZW5kKCkpOworICAgIGN4eFN0YXRlLkVuYWJsZWQodGVzdExhbmdzLmZpbmQoIkNYWCIpICE9IHRlc3RMYW5ncy5lbmQoKSk7CisgICAgY3VkYVN0YXRlLkVuYWJsZWQodGVzdExhbmdzLmZpbmQoIkNVREEiKSAhPSB0ZXN0TGFuZ3MuZW5kKCkpOworICAgIG9iamNTdGF0ZS5FbmFibGVkKHRlc3RMYW5ncy5maW5kKCJPQkpDIikgIT0gdGVzdExhbmdzLmVuZCgpKTsKKyAgICBvYmpjeHhTdGF0ZS5FbmFibGVkKHRlc3RMYW5ncy5maW5kKCJPQkpDWFgiKSAhPSB0ZXN0TGFuZ3MuZW5kKCkpOwogCiAgICAgYm9vbCB3YXJuQ01QMDA2NyA9IGZhbHNlOwogICAgIGJvb2wgaG9ub3JTdGFuZGFyZCA9IHRydWU7CiAKLSAgICBpZiAoIWRpZENTdGFuZGFyZCAmJiAhZGlkQ3h4U3RhbmRhcmQgJiYgIWRpZE9iakNTdGFuZGFyZCAmJgotICAgICAgICAhZGlkT2JqQ3h4U3RhbmRhcmQgJiYgIWRpZEN1ZGFTdGFuZGFyZCAmJiAhZGlkQ1N0YW5kYXJkUmVxdWlyZWQgJiYKLSAgICAgICAgIWRpZEN4eFN0YW5kYXJkUmVxdWlyZWQgJiYgIWRpZE9iakNTdGFuZGFyZFJlcXVpcmVkICYmCi0gICAgICAgICFkaWRPYmpDeHhTdGFuZGFyZFJlcXVpcmVkICYmICFkaWRDdWRhU3RhbmRhcmRSZXF1aXJlZCAmJgotICAgICAgICAhZGlkQ0V4dGVuc2lvbnMgJiYgIWRpZEN4eEV4dGVuc2lvbnMgJiYgIWRpZE9iakNFeHRlbnNpb25zICYmCi0gICAgICAgICFkaWRPYmpDeHhFeHRlbnNpb25zICYmICFkaWRDdWRhRXh0ZW5zaW9ucykgeworICAgIGlmIChjU3RhdGUuRGlkTm9uZSgpICYmIGN4eFN0YXRlLkRpZE5vbmUoKSAmJiBvYmpjU3RhdGUuRGlkTm9uZSgpICYmCisgICAgICAgIG9iamN4eFN0YXRlLkRpZE5vbmUoKSAmJiBjdWRhU3RhdGUuRGlkTm9uZSgpKSB7CiAgICAgICBzd2l0Y2ggKHRoaXMtPk1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA2NykpIHsKICAgICAgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOgogICAgICAgICAgIHdhcm5DTVAwMDY3ID0gdGhpcy0+TWFrZWZpbGUtPlBvbGljeU9wdGlvbmFsV2FybmluZ0VuYWJsZWQoCkBAIC04NDMsNDYgKzg0MCwyMCBAQAogICAgICAgfQogICAgIH0KIAotICAgIGlmIChob25vclN0YW5kYXJkIHx8IHdhcm5DTVAwMDY3KSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHdhcm5DTVAwMDY3VmFyaWFibGVzOwogCi0gICAgICBhdXRvIHRlc3RMYW5ndWFnZSA9Ci0gICAgICAgIFsmXShib29sIHRlc3RMYW5nLCBib29sIGRpZExhbmdTdGFuZGFyZCwgYm9vbCBkaWRMYW5nU3RhbmRhcmRSZXF1aXJlZCwKLSAgICAgICAgICAgIGJvb2wgZGlkTGFuZ0V4dGVuc2lvbnMsIHN0ZDo6c3RyaW5nJiBsYW5nU3RhbmRhcmQsCi0gICAgICAgICAgICBzdGQ6OnN0cmluZyYgbGFuZ1N0YW5kYXJkUmVxdWlyZWQsIHN0ZDo6c3RyaW5nJiBsYW5nRXh0ZW5zaW9ucywKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKSB7Ci0gICAgICAgICAgaWYgKHRlc3RMYW5nKSB7Ci0gICAgICAgICAgICBpZiAoIWRpZExhbmdTdGFuZGFyZCkgewotICAgICAgICAgICAgICBsYW5nU3RhbmRhcmQgPSB0aGlzLT5Mb29rdXBTdGRWYXIoCi0gICAgICAgICAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfU1RBTkRBUkQiKSwgd2FybkNNUDAwNjcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFkaWRMYW5nU3RhbmRhcmRSZXF1aXJlZCkgewotICAgICAgICAgICAgICBsYW5nU3RhbmRhcmRSZXF1aXJlZCA9IHRoaXMtPkxvb2t1cFN0ZFZhcigKLSAgICAgICAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9TVEFOREFSRF9SRVFVSVJFRCIpLCB3YXJuQ01QMDA2Nyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWRpZExhbmdFeHRlbnNpb25zKSB7Ci0gICAgICAgICAgICAgIGxhbmdFeHRlbnNpb25zID0gdGhpcy0+TG9va3VwU3RkVmFyKAotICAgICAgICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX0VYVEVOU0lPTlMiKSwgd2FybkNNUDAwNjcpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfTsKKyAgICBjU3RhdGUuTG9hZFVuc2V0UHJvcGVydHlWYWx1ZXModGhpcy0+TWFrZWZpbGUsIGhvbm9yU3RhbmRhcmQsIHdhcm5DTVAwMDY3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuQ01QMDA2N1ZhcmlhYmxlcyk7CisgICAgY3h4U3RhdGUuTG9hZFVuc2V0UHJvcGVydHlWYWx1ZXModGhpcy0+TWFrZWZpbGUsIGhvbm9yU3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybkNNUDAwNjcsIHdhcm5DTVAwMDY3VmFyaWFibGVzKTsKKyAgICBjdWRhU3RhdGUuTG9hZFVuc2V0UHJvcGVydHlWYWx1ZXModGhpcy0+TWFrZWZpbGUsIGhvbm9yU3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5DTVAwMDY3LCB3YXJuQ01QMDA2N1ZhcmlhYmxlcyk7CisgICAgb2JqY1N0YXRlLkxvYWRVbnNldFByb3BlcnR5VmFsdWVzKHRoaXMtPk1ha2VmaWxlLCBob25vclN0YW5kYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuQ01QMDA2Nywgd2FybkNNUDAwNjdWYXJpYWJsZXMpOworICAgIG9iamN4eFN0YXRlLkxvYWRVbnNldFByb3BlcnR5VmFsdWVzKHRoaXMtPk1ha2VmaWxlLCBob25vclN0YW5kYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5DTVAwMDY3LCB3YXJuQ01QMDA2N1ZhcmlhYmxlcyk7CiAKLSAgICAgIHRlc3RMYW5ndWFnZSh0ZXN0QywgZGlkQ1N0YW5kYXJkLCBkaWRDU3RhbmRhcmRSZXF1aXJlZCwgZGlkQ0V4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgY1N0YW5kYXJkLCBjU3RhbmRhcmRSZXF1aXJlZCwgY0V4dGVuc2lvbnMsICJDIik7Ci0gICAgICB0ZXN0TGFuZ3VhZ2UodGVzdE9iakMsIGRpZE9iakNTdGFuZGFyZCwgZGlkT2JqQ1N0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgZGlkT2JqQ0V4dGVuc2lvbnMsIG9iamNTdGFuZGFyZCwgb2JqY1N0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgb2JqY0V4dGVuc2lvbnMsICJPQkpDIik7Ci0gICAgICB0ZXN0TGFuZ3VhZ2UodGVzdEN4eCwgZGlkQ3h4U3RhbmRhcmQsIGRpZEN4eFN0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgZGlkQ3h4RXh0ZW5zaW9ucywgY3h4U3RhbmRhcmQsIGN4eFN0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgY3h4RXh0ZW5zaW9ucywgIkNYWCIpOwotICAgICAgdGVzdExhbmd1YWdlKHRlc3RPYmpDeHgsIGRpZE9iakN4eFN0YW5kYXJkLCBkaWRPYmpDeHhTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgIGRpZE9iakN4eEV4dGVuc2lvbnMsIG9iamN4eFN0YW5kYXJkLCBvYmpjeHhTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgIG9iamN4eEV4dGVuc2lvbnMsICJPQkpDWFgiKTsKLSAgICAgIHRlc3RMYW5ndWFnZSh0ZXN0Q3VkYSwgZGlkQ3VkYVN0YW5kYXJkLCBkaWRDdWRhU3RhbmRhcmRSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICBkaWRDdWRhRXh0ZW5zaW9ucywgY3VkYVN0YW5kYXJkLCBjdWRhU3RhbmRhcmRSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICBjdWRhRXh0ZW5zaW9ucywgIkNVREEiKTsKLSAgICB9Ci0KLSAgICBpZiAoIXRoaXMtPldhcm5DTVAwMDY3LmVtcHR5KCkpIHsKKyAgICBpZiAoIXdhcm5DTVAwMDY3VmFyaWFibGVzLmVtcHR5KCkpIHsKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSB3OwogICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICAgICAgdyA8PCBjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAwNjcpIDw8ICJcbiIKQEAgLTg5MCw0MyArODYxLDE3IEBACiAgICAgICAgICJpcyBub3QgaG9ub3JpbmcgbGFuZ3VhZ2Ugc3RhbmRhcmQgdmFyaWFibGVzIGluIHRoZSB0ZXN0IHByb2plY3Q6XG4iCiAgICAgICAgIDsKICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgdmkgOiB0aGlzLT5XYXJuQ01QMDA2NykgeworICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgdmkgOiB3YXJuQ01QMDA2N1ZhcmlhYmxlcykgewogICAgICAgICB3IDw8ICIgICIgPDwgdmkgPDwgIlxuIjsKICAgICAgIH0KICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLCB3LnN0cigpKTsKICAgICB9CiAKLSAgICBhdXRvIHdyaXRlTGFuZ3VhZ2VQcm9wZXJ0aWVzID0gWyZdKGJvb2wgdGVzdExhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ1N0YW5kYXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmdTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmdFeHRlbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpIHsKLSAgICAgIGlmICh0ZXN0TGFuZykgewotICAgICAgICBpZiAoIWxhbmdTdGFuZGFyZC5lbXB0eSgpKSB7Ci0gICAgICAgICAgd3JpdGVQcm9wZXJ0eShmb3V0LCB0YXJnZXROYW1lLCBjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBsYW5nU3RhbmRhcmQpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbGFuZ1N0YW5kYXJkUmVxdWlyZWQuZW1wdHkoKSkgewotICAgICAgICAgIHdyaXRlUHJvcGVydHkoZm91dCwgdGFyZ2V0TmFtZSwgY21TdHJDYXQobGFuZywgIl9TVEFOREFSRF9SRVFVSVJFRCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ1N0YW5kYXJkUmVxdWlyZWQpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbGFuZ0V4dGVuc2lvbnMuZW1wdHkoKSkgewotICAgICAgICAgIHdyaXRlUHJvcGVydHkoZm91dCwgdGFyZ2V0TmFtZSwgY21TdHJDYXQobGFuZywgIl9FWFRFTlNJT05TIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBsYW5nRXh0ZW5zaW9ucyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotCi0gICAgd3JpdGVMYW5ndWFnZVByb3BlcnRpZXModGVzdEMsIGNTdGFuZGFyZCwgY1N0YW5kYXJkUmVxdWlyZWQsIGNFeHRlbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDIik7Ci0gICAgd3JpdGVMYW5ndWFnZVByb3BlcnRpZXModGVzdE9iakMsIG9iamNTdGFuZGFyZCwgb2JqY1N0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqY0V4dGVuc2lvbnMsICJPQkpDIik7Ci0gICAgd3JpdGVMYW5ndWFnZVByb3BlcnRpZXModGVzdEN4eCwgY3h4U3RhbmRhcmQsIGN4eFN0YW5kYXJkUmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3h4RXh0ZW5zaW9ucywgIkNYWCIpOwotICAgIHdyaXRlTGFuZ3VhZ2VQcm9wZXJ0aWVzKHRlc3RPYmpDeHgsIG9iamN4eFN0YW5kYXJkLCBvYmpjeHhTdGFuZGFyZFJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamN4eEV4dGVuc2lvbnMsICJPQkpDWFgiKTsKLSAgICB3cml0ZUxhbmd1YWdlUHJvcGVydGllcyh0ZXN0Q3VkYSwgY3VkYVN0YW5kYXJkLCBjdWRhU3RhbmRhcmRSZXF1aXJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWRhRXh0ZW5zaW9ucywgIkNVREEiKTsKKyAgICBjU3RhdGUuV3JpdGVQcm9wZXJ0aWVzKGZvdXQsIHRhcmdldE5hbWUpOworICAgIGN4eFN0YXRlLldyaXRlUHJvcGVydGllcyhmb3V0LCB0YXJnZXROYW1lKTsKKyAgICBjdWRhU3RhdGUuV3JpdGVQcm9wZXJ0aWVzKGZvdXQsIHRhcmdldE5hbWUpOworICAgIG9iamNTdGF0ZS5Xcml0ZVByb3BlcnRpZXMoZm91dCwgdGFyZ2V0TmFtZSk7CisgICAgb2JqY3h4U3RhdGUuV3JpdGVQcm9wZXJ0aWVzKGZvdXQsIHRhcmdldE5hbWUpOwogCiAgICAgaWYgKCFsaW5rT3B0aW9ucy5lbXB0eSgpKSB7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0aW9uczsKQEAgLTEwMzgsMTEgKzk4MywxNSBAQAogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZGVsZXRlZEZpbGVzOwogICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBkaXIuR2V0TnVtYmVyT2ZGaWxlcygpOyArK2kpIHsKICAgICBjb25zdCBjaGFyKiBmaWxlTmFtZSA9IGRpci5HZXRGaWxlKGkpOwotICAgIGlmIChzdHJjbXAoZmlsZU5hbWUsICIuIikgIT0gMCAmJiBzdHJjbXAoZmlsZU5hbWUsICIuLiIpICE9IDApIHsKKyAgICBpZiAoc3RyY21wKGZpbGVOYW1lLCAiLiIpICE9IDAgJiYgc3RyY21wKGZpbGVOYW1lLCAiLi4iKSAhPSAwICYmCisgICAgICAgIC8vIERvIG5vdCBkZWxldGUgTkZTIHRlbXBvcmFyeSBmaWxlcy4KKyAgICAgICAgIWNtSGFzUHJlZml4KGZpbGVOYW1lLCAiLm5mcyIpKSB7CiAgICAgICBpZiAoZGVsZXRlZEZpbGVzLmluc2VydChmaWxlTmFtZSkuc2Vjb25kKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGZ1bGxQYXRoID0KICAgICAgICAgICBzdGQ6OnN0cmluZyhiaW5EaXIpLmFwcGVuZCgiLyIpLmFwcGVuZChmaWxlTmFtZSk7Ci0gICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkoZnVsbFBhdGgpKSB7CisgICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNTeW1saW5rKGZ1bGxQYXRoKSkgeworICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoZnVsbFBhdGgpOworICAgICAgICB9IGVsc2UgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShmdWxsUGF0aCkpIHsKICAgICAgICAgICB0aGlzLT5DbGVhbnVwRmlsZXMoZnVsbFBhdGgpOwogICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUFEaXJlY3RvcnkoZnVsbFBhdGgpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTA5NiwxNCArMTA0NSwxNCBAQAogICBjb25zdCBjaGFyKiBjb25maWcgPQogICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9UUllfQ09NUElMRV9DT05GSUdVUkFUSU9OIik7CiAgIC8vIGlmIGEgY29uZmlnIHdhcyBzcGVjaWZpZWQgdHJ5IHRoYXQgZmlyc3QKLSAgaWYgKGNvbmZpZyAmJiBjb25maWdbMF0pIHsKKyAgaWYgKGNtTm9uZW1wdHkoY29uZmlnKSkgewogICAgIHN0ZDo6c3RyaW5nIHRtcCA9IGNtU3RyQ2F0KCcvJywgY29uZmlnKTsKICAgICBzZWFyY2hEaXJzLnB1c2hfYmFjayhzdGQ6Om1vdmUodG1wKSk7CiAgIH0KICAgc2VhcmNoRGlycy5lbXBsYWNlX2JhY2soIi9EZWJ1ZyIpOwogI2lmIGRlZmluZWQoX19BUFBMRV9fKQogICBzdGQ6OnN0cmluZyBhcHAgPSAiLyIgKyB0YXJnZXROYW1lICsgIi5hcHAiOwotICBpZiAoY29uZmlnICYmIGNvbmZpZ1swXSkgeworICBpZiAoY21Ob25lbXB0eShjb25maWcpKSB7CiAgICAgc3RkOjpzdHJpbmcgdG1wID0gY21TdHJDYXQoJy8nLCBjb25maWcsIGFwcCk7CiAgICAgc2VhcmNoRGlycy5wdXNoX2JhY2soc3RkOjptb3ZlKHRtcCkpOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Db3JlVHJ5Q29tcGlsZS5oIGIvU291cmNlL2NtQ29yZVRyeUNvbXBpbGUuaAppbmRleCBhZTcxNGE2Li45MTY1NzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Db3JlVHJ5Q29tcGlsZS5oCisrKyBiL1NvdXJjZS9jbUNvcmVUcnlDb21waWxlLmgKQEAgLTQ3LDEwICs0Nyw2IEBACiAgIHN0ZDo6c3RyaW5nIE91dHB1dEZpbGU7CiAgIHN0ZDo6c3RyaW5nIEZpbmRFcnJvck1lc3NhZ2U7CiAgIGJvb2wgU3JjRmlsZVNpZ25hdHVyZSA9IGZhbHNlOwotCi1wcml2YXRlOgotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gV2FybkNNUDAwNjc7Ci0gIHN0ZDo6c3RyaW5nIExvb2t1cFN0ZFZhcihzdGQ6OnN0cmluZyBjb25zdCYgdmFyLCBib29sIHdhcm5DTVAwMDY3KTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ3JlYXRlVGVzdFNvdXJjZUxpc3QuY3h4IGIvU291cmNlL2NtQ3JlYXRlVGVzdFNvdXJjZUxpc3QuY3h4CmluZGV4IDlkNDkyYmEuLjljNGRlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNyZWF0ZVRlc3RTb3VyY2VMaXN0LmN4eAorKysgYi9Tb3VyY2UvY21DcmVhdGVUZXN0U291cmNlTGlzdC5jeHgKQEAgLTEyNyw3ICsxMjcsNyBAQAogICBtZi5BZGREZWZpbml0aW9uKCJDTUFLRV9GT1JXQVJEX0RFQ0xBUkVfVEVTVFMiLCBmb3J3YXJkRGVjbGFyZUNvZGUpOwogICBtZi5BZGREZWZpbml0aW9uKCJDTUFLRV9GVU5DVElPTl9UQUJMRV9FTlRJUkVTIiwgZnVuY3Rpb25NYXBDb2RlKTsKICAgYm9vbCByZXMgPSB0cnVlOwotICBpZiAoIW1mLkNvbmZpZ3VyZUZpbGUoY29uZmlnRmlsZSwgZHJpdmVyLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpKSB7CisgIGlmICghbWYuQ29uZmlndXJlRmlsZShjb25maWdGaWxlLCBkcml2ZXIsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkpIHsKICAgICByZXMgPSBmYWxzZTsKICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DcnlwdG9IYXNoLmN4eCBiL1NvdXJjZS9jbUNyeXB0b0hhc2guY3h4CmluZGV4IGRjN2Q5MzkuLmIxZTYzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUNyeXB0b0hhc2guY3h4CisrKyBiL1NvdXJjZS9jbUNyeXB0b0hhc2guY3h4CkBAIC00LDEwICs0LDEwIEBACiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAKLSNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKKyNpbmNsdWRlIDxjbTNwL2t3aW1sL2ludC5oPgorI2luY2x1ZGUgPGNtM3Avcmhhc2guaD4KIAotI2luY2x1ZGUgImNtX2t3aW1sLmgiCi0jaW5jbHVkZSAiY21fcmhhc2guaCIKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKIAogc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBjbUNyeXB0b0hhc2hBbGdvVG9JZFtdID0gewogICAvKiBjbGFuZy1mb3JtYXQgbmVlZHMgdGhpcyBjb21tZW50IHRvIGJyZWFrIGFmdGVyIHRoZSBvcGVuaW5nIGJyYWNlICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DdXJsLmggYi9Tb3VyY2UvY21DdXJsLmgKaW5kZXggY2I3M2NlNi4uN2JkMDM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ3VybC5oCisrKyBiL1NvdXJjZS9jbUN1cmwuaApAQCAtNyw3ICs3LDcgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2luY2x1ZGUgImNtX2N1cmwuaCIKKyNpbmNsdWRlIDxjbTNwL2N1cmwvY3VybC5oPgogCiBzdGQ6OnN0cmluZyBjbUN1cmxTZXRDQUluZm8oOjpDVVJMKiBjdXJsLCBjb25zdCBjaGFyKiBjYWZpbGUgPSBudWxscHRyKTsKIHN0ZDo6c3RyaW5nIGNtQ3VybFNldE5FVFJDT3B0aW9uKDo6Q1VSTCogY3VybCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5ldHJjX2xldmVsLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtQ3VzdG9tQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmN4eAppbmRleCAwOWQyNjliLi4xNDlmNWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmN4eApAQCAtNCwyNyArNCwyNSBAQAogCiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgotI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKLWNtQ3VzdG9tQ29tbWFuZDo6Y21DdXN0b21Db21tYW5kKGNtTWFrZWZpbGUgY29uc3QqIG1mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dHB1dHMsCitjbUN1c3RvbUNvbW1hbmQ6OmNtQ3VzdG9tQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3V0cHV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBieXByb2R1Y3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogd29ya2luZ0RpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgbGZidCwgY29uc3QgY2hhciogY29tbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0ZFBpcGVzVVRGOCkKICAgOiBPdXRwdXRzKHN0ZDo6bW92ZShvdXRwdXRzKSkKICAgLCBCeXByb2R1Y3RzKHN0ZDo6bW92ZShieXByb2R1Y3RzKSkKICAgLCBEZXBlbmRzKHN0ZDo6bW92ZShkZXBlbmRzKSkKICAgLCBDb21tYW5kTGluZXMoc3RkOjptb3ZlKGNvbW1hbmRMaW5lcykpCisgICwgQmFja3RyYWNlKHN0ZDo6bW92ZShsZmJ0KSkKICAgLCBDb21tZW50KGNvbW1lbnQgPyBjb21tZW50IDogIiIpCiAgICwgV29ya2luZ0RpcmVjdG9yeSh3b3JraW5nRGlyZWN0b3J5ID8gd29ya2luZ0RpcmVjdG9yeSA6ICIiKQogICAsIEhhdmVDb21tZW50KGNvbW1lbnQgIT0gbnVsbHB0cikKKyAgLCBTdGRQaXBlc1VURjgoc3RkUGlwZXNVVEY4KQogewotICBpZiAobWYpIHsKLSAgICB0aGlzLT5CYWNrdHJhY2UgPSBtZi0+R2V0QmFja3RyYWNlKCk7Ci0gIH0KIH0KIAogY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjbUN1c3RvbUNvbW1hbmQ6OkdldE91dHB1dHMoKSBjb25zdApAQCAtNTUsMTIgKzUzLDEyIEBACiAKIHZvaWQgY21DdXN0b21Db21tYW5kOjpBcHBlbmRDb21tYW5kcyhjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzKQogewotICBjbUFwcGVuZCh0aGlzLT5Db21tYW5kTGluZXMsIGNvbW1hbmRMaW5lcyk7CisgIGNtOjphcHBlbmQodGhpcy0+Q29tbWFuZExpbmVzLCBjb21tYW5kTGluZXMpOwogfQogCiB2b2lkIGNtQ3VzdG9tQ29tbWFuZDo6QXBwZW5kRGVwZW5kcyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMpCiB7Ci0gIGNtQXBwZW5kKHRoaXMtPkRlcGVuZHMsIGRlcGVuZHMpOworICBjbTo6YXBwZW5kKHRoaXMtPkRlcGVuZHMsIGRlcGVuZHMpOwogfQogCiBib29sIGNtQ3VzdG9tQ29tbWFuZDo6R2V0RXNjYXBlT2xkU3R5bGUoKSBjb25zdApAQCAtMTAwLDcgKzk4LDcgQEAKIAogdm9pZCBjbUN1c3RvbUNvbW1hbmQ6OkFwcGVuZEltcGxpY2l0RGVwZW5kcyhjbUltcGxpY2l0RGVwZW5kc0xpc3QgY29uc3QmIGwpCiB7Ci0gIGNtQXBwZW5kKHRoaXMtPkltcGxpY2l0RGVwZW5kcywgbCk7CisgIGNtOjphcHBlbmQodGhpcy0+SW1wbGljaXREZXBlbmRzLCBsKTsKIH0KIAogYm9vbCBjbUN1c3RvbUNvbW1hbmQ6OkdldFVzZXNUZXJtaW5hbCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmggYi9Tb3VyY2UvY21DdXN0b21Db21tYW5kLmgKaW5kZXggNDY4OWFjZS4uYWE1NzJhZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtQ3VzdG9tQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmQuaApAQCAtMTIsOCArMTIsNiBAQAogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAKLWNsYXNzIGNtTWFrZWZpbGU7Ci0KIGNsYXNzIGNtSW1wbGljaXREZXBlbmRzTGlzdAogICA6IHB1YmxpYyBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPj4KIHsKQEAgLTI4LDExICsyNiwxMiBAQAogewogcHVibGljOgogICAvKiogTWFpbiBjb25zdHJ1Y3RvciBzcGVjaWZpZXMgYWxsIGluZm9ybWF0aW9uIGZvciB0aGUgY29tbWFuZC4gICovCi0gIGNtQ3VzdG9tQ29tbWFuZChjbU1ha2VmaWxlIGNvbnN0KiBtZiwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG91dHB1dHMsCisgIGNtQ3VzdG9tQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3V0cHV0cywKICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBieXByb2R1Y3RzLAogICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHMsCi0gICAgICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCi0gICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyZWN0b3J5KTsKKyAgICAgICAgICAgICAgICAgIGNtQ3VzdG9tQ29tbWFuZExpbmVzIGNvbW1hbmRMaW5lcywgY21MaXN0RmlsZUJhY2t0cmFjZSBsZmJ0LAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tbWVudCwgY29uc3QgY2hhciogd29ya2luZ0RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgIGJvb2wgc3RkUGlwZXNVVEY4KTsKIAogICAvKiogR2V0IHRoZSBvdXRwdXQgZmlsZSBwcm9kdWNlZCBieSB0aGUgY29tbWFuZC4gICovCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgR2V0T3V0cHV0cygpIGNvbnN0OwpAQCAtNTUsNiArNTQsOSBAQAogICAvKiogR2V0IHRoZSBjb21tZW50IHN0cmluZyBmb3IgdGhlIGNvbW1hbmQuICAqLwogICBjb25zdCBjaGFyKiBHZXRDb21tZW50KCkgY29uc3Q7CiAKKyAgLyoqIEdldCBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIGNvbW1hbmQgdXNlcyBVVEYtOCBvdXRwdXQgcGlwZXMuICovCisgIGJvb2wgR2V0U3RkUGlwZXNVVEY4KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+U3RkUGlwZXNVVEY4OyB9CisKICAgLyoqIEFwcGVuZCB0byB0aGUgbGlzdCBvZiBjb21tYW5kIGxpbmVzLiAgKi8KICAgdm9pZCBBcHBlbmRDb21tYW5kcyhjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzKTsKIApAQCAtMTEwLDYgKzExMiw3IEBACiAgIGJvb2wgRXNjYXBlT2xkU3R5bGUgPSB0cnVlOwogICBib29sIFVzZXNUZXJtaW5hbCA9IGZhbHNlOwogICBib29sIENvbW1hbmRFeHBhbmRMaXN0cyA9IGZhbHNlOworICBib29sIFN0ZFBpcGVzVVRGOCA9IGZhbHNlOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY3h4CmluZGV4IGMxZjQxMmQuLjYwNTA0YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuY3h4CkBAIC02LDEzICs2LDE1IEBACiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmQuaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRMaW5lcy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtMjksMTAgKzMxLDExIEBACiAgICAgZm9yIChzdGQ6OnN0cmluZyYgaXQgOiByZXN1bHQpIHsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKGl0KTsKICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChpdCkpIHsKLSAgICAgICAgaXQgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGl0KTsKKyAgICAgICAgaXQgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgICAgIGl0LCBsZy0+R2V0TWFrZWZpbGUoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpKTsKICAgICAgIH0KICAgICB9Ci0gICAgY21BcHBlbmQob3V0cHV0LCByZXN1bHQpOworICAgIGNtOjphcHBlbmQob3V0cHV0LCByZXN1bHQpOwogICB9CiB9CiB9CkBAIC01Niw3ICs1OSw3IEBACiAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9IGdlLlBhcnNlKGNsYXJnKTsKICAgICAgIHN0ZDo6c3RyaW5nIHBhcnNlZF9hcmcgPSBjZ2UtPkV2YWx1YXRlKHRoaXMtPkxHLCB0aGlzLT5Db25maWcpOwogICAgICAgaWYgKHRoaXMtPkNDLkdldENvbW1hbmRFeHBhbmRMaXN0cygpKSB7Ci0gICAgICAgIGNtQXBwZW5kKGFyZ3YsIGNtRXhwYW5kZWRMaXN0KHBhcnNlZF9hcmcpKTsKKyAgICAgICAgY206OmFwcGVuZChhcmd2LCBjbUV4cGFuZGVkTGlzdChwYXJzZWRfYXJnKSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBhcmd2LnB1c2hfYmFjayhzdGQ6Om1vdmUocGFyc2VkX2FyZykpOwogICAgICAgfQpAQCAtMTA5LDEzICsxMTIsMTMgQEAKICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSAmJgogICAgICAgICAhdGFyZ2V0LT5Jc0ltcG9ydGVkKCkpIHsKIAotICAgICAgY29uc3QgY2hhciogZW11bGF0b3JfcHJvcGVydHkgPQorICAgICAgY21Qcm9wIGVtdWxhdG9yX3Byb3BlcnR5ID0KICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IiKTsKICAgICAgIGlmICghZW11bGF0b3JfcHJvcGVydHkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKLSAgICAgIGNtRXhwYW5kTGlzdChlbXVsYXRvcl9wcm9wZXJ0eSwgdGhpcy0+RW11bGF0b3JzV2l0aEFyZ3VtZW50c1tjXSk7CisgICAgICBjbUV4cGFuZExpc3QoKmVtdWxhdG9yX3Byb3BlcnR5LCB0aGlzLT5FbXVsYXRvcnNXaXRoQXJndW1lbnRzW2NdKTsKICAgICB9CiAgIH0KIH0KQEAgLTEzNyw3ICsxNDAsNyBAQAogICAgICAgKHRhcmdldC0+SXNJbXBvcnRlZCgpIHx8CiAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IiKSB8fAogICAgICAgICF0aGlzLT5MRy0+R2V0TWFrZWZpbGUoKS0+SXNPbigiQ01BS0VfQ1JPU1NDT01QSUxJTkciKSkpIHsKLSAgICByZXR1cm4gdGFyZ2V0LT5HZXRMb2NhdGlvbih0aGlzLT5Db25maWcpOworICAgIHJldHVybiB0YXJnZXQtPkdldExvY2F0aW9uKHRoaXMtPkNvbmZpZykuY19zdHIoKTsKICAgfQogICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTIwMSw3ICsyMDQsOSBAQAogICAgICAgaWYgKHRoaXMtPk9sZFN0eWxlKSB7CiAgICAgICAgIGNtZCArPSBlc2NhcGVGb3JTaGVsbE9sZFN0eWxlKGVtdWxhdG9yW2pdKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNtZCArPSB0aGlzLT5MRy0+RXNjYXBlRm9yU2hlbGwoZW11bGF0b3Jbal0sIHRoaXMtPk1ha2VWYXJzKTsKKyAgICAgICAgY21kICs9CisgICAgICAgICAgdGhpcy0+TEctPkVzY2FwZUZvclNoZWxsKGVtdWxhdG9yW2pdLCB0aGlzLT5NYWtlVmFycywgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlVmFycyAmJiB0aGlzLT5MRy0+SXNOaW5qYU11bHRpKCkpOwogICAgICAgfQogICAgIH0KIApAQCAtMjIyLDcgKzIyNyw5IEBACiAgICAgaWYgKHRoaXMtPk9sZFN0eWxlKSB7CiAgICAgICBjbWQgKz0gZXNjYXBlRm9yU2hlbGxPbGRTdHlsZShhcmcpOwogICAgIH0gZWxzZSB7Ci0gICAgICBjbWQgKz0gdGhpcy0+TEctPkVzY2FwZUZvclNoZWxsKGFyZywgdGhpcy0+TWFrZVZhcnMpOworICAgICAgY21kICs9CisgICAgICAgIHRoaXMtPkxHLT5Fc2NhcGVGb3JTaGVsbChhcmcsIHRoaXMtPk1ha2VWYXJzLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlVmFycyAmJiB0aGlzLT5MRy0+SXNOaW5qYU11bHRpKCkpOwogICAgIH0KICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVmaW5lUHJvcGVydHlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbURlZmluZVByb3BlcnR5Q29tbWFuZC5jeHgKaW5kZXggZjRlNGZkYS4uNGUyZDliMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVmaW5lUHJvcGVydHlDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21EZWZpbmVQcm9wZXJ0eUNvbW1hbmQuY3h4CkBAIC05NSw3ICs5NSw3IEBACiAKICAgLy8gQWN0dWFsbHkgZGVmaW5lIHRoZSBwcm9wZXJ0eS4KICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKS0+RGVmaW5lUHJvcGVydHkoCi0gICAgUHJvcGVydHlOYW1lLCBzY29wZSwgQnJpZWZEb2NzLmNfc3RyKCksIEZ1bGxEb2NzLmNfc3RyKCksIGluaGVyaXRlZCk7CisgICAgUHJvcGVydHlOYW1lLCBzY29wZSwgQnJpZWZEb2NzLCBGdWxsRG9jcywgaW5oZXJpdGVkKTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbURlZmluaXRpb25zLmN4eCBiL1NvdXJjZS9jbURlZmluaXRpb25zLmN4eAppbmRleCA2OWE2NDI3Li40YTRmODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EZWZpbml0aW9ucy5jeHgKKysrIGIvU291cmNlL2NtRGVmaW5pdGlvbnMuY3h4CkBAIC0xOSw3ICsxOSw2IEBACiAgIHsKICAgICBhdXRvIGl0ID0gYmVnaW4tPk1hcC5maW5kKGNtOjpTdHJpbmc6OmJvcnJvdyhrZXkpKTsKICAgICBpZiAoaXQgIT0gYmVnaW4tPk1hcC5lbmQoKSkgewotICAgICAgaXQtPnNlY29uZC5Vc2VkID0gdHJ1ZTsKICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwogICAgIH0KICAgfQpAQCAtMTA4LDE2ICsxMDcsMyBAQAogewogICB0aGlzLT5NYXBba2V5XSA9IERlZigpOwogfQotCi1zdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21EZWZpbml0aW9uczo6VW51c2VkS2V5cygpIGNvbnN0Ci17Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBrZXlzOwotICBrZXlzLnJlc2VydmUodGhpcy0+TWFwLnNpemUoKSk7Ci0gIC8vIENvbnNpZGVyIGxvY2FsIGRlZmluaXRpb25zLgotICBmb3IgKGF1dG8gY29uc3QmIG1pIDogdGhpcy0+TWFwKSB7Ci0gICAgaWYgKCFtaS5zZWNvbmQuVXNlZCkgewotICAgICAga2V5cy5wdXNoX2JhY2soKm1pLmZpcnN0LnN0cl9pZl9zdGFibGUoKSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBrZXlzOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVmaW5pdGlvbnMuaCBiL1NvdXJjZS9jbURlZmluaXRpb25zLmgKaW5kZXggMGUzOGZiMS4uZDU3NzUwYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVmaW5pdGlvbnMuaAorKysgYi9Tb3VyY2UvY21EZWZpbml0aW9ucy5oCkBAIC00OCw5ICs0OCw2IEBACiAgIC8qKiBVbnNldCBhIGRlZmluaXRpb24uICAqLwogICB2b2lkIFVuc2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpOwogCi0gIC8qKiBMaXN0IG9mIHVudXNlZCBrZXlzLiAgKi8KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFVudXNlZEtleXMoKSBjb25zdDsKLQogcHJpdmF0ZToKICAgLyoqIFN0cmluZyB3aXRoIGV4aXN0ZW5jZSBib29sZWFuLiAgKi8KICAgc3RydWN0IERlZgpAQCAtNjIsNyArNTksNiBAQAogICAgIHsKICAgICB9CiAgICAgY206OlN0cmluZyBWYWx1ZTsKLSAgICBib29sIFVzZWQgPSBmYWxzZTsKICAgfTsKICAgc3RhdGljIERlZiBOb0RlZjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kcy5jeHggYi9Tb3VyY2UvY21EZXBlbmRzLmN4eAppbmRleCAxMjlhNWY3Li5kOGFhNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EZXBlbmRzLmN4eAorKysgYi9Tb3VyY2UvY21EZXBlbmRzLmN4eApAQCAtMiw3ICsyLDYgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtRGVwZW5kcy5oIgogCi0jaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCkBAIC0xMCwxMiArOSwxMiBAQAogI2luY2x1ZGUgImNtRmlsZVRpbWUuaCIKICNpbmNsdWRlICJjbUZpbGVUaW1lQ2FjaGUuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKLSNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCi1jbURlcGVuZHM6OmNtRGVwZW5kcyhjbUxvY2FsR2VuZXJhdG9yKiBsZywgc3RkOjpzdHJpbmcgdGFyZ2V0RGlyKQorY21EZXBlbmRzOjpjbURlcGVuZHMoY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnLCBzdGQ6OnN0cmluZyB0YXJnZXREaXIpCiAgIDogTG9jYWxHZW5lcmF0b3IobGcpCiAgICwgVGFyZ2V0RGlyZWN0b3J5KHN0ZDo6bW92ZSh0YXJnZXREaXIpKQogewpAQCAtODEsMTYgKzgwLDE0IEBACiB7CiAgIC8vIFByaW50IHZlcmJvc2Ugb3V0cHV0LgogICBpZiAodGhpcy0+VmVyYm9zZSkgewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgbXNnIDw8ICJDbGVhcmluZyBkZXBlbmRlbmNpZXMgaW4gXCIiIDw8IGZpbGUgPDwgIlwiLiIgPDwgc3RkOjplbmRsOwotICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChtc2cuc3RyKCkpOworICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dCgKKyAgICAgIGNtU3RyQ2F0KCJDbGVhcmluZyBkZXBlbmRlbmNpZXMgaW4gXCIiLCBmaWxlLCAiXCIuXG4iKSk7CiAgIH0KIAogICAvLyBXcml0ZSBhbiBlbXB0eSBkZXBlbmRlbmN5IGZpbGUuCiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBkZXBGaWxlU3RyZWFtKGZpbGUpOwogICBkZXBGaWxlU3RyZWFtIDw8ICIjIEVtcHR5IGRlcGVuZGVuY2llcyBmaWxlXG4iCi0gICAgICAgICAgICAgICAgPDwgIiMgVGhpcyBtYXkgYmUgcmVwbGFjZWQgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0LiIKLSAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAgICAgICAgIiMgVGhpcyBtYXkgYmUgcmVwbGFjZWQgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0LlxuIjsKIH0KIAogYm9vbCBjbURlcGVuZHM6OldyaXRlRGVwZW5kZW5jaWVzKGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgLyp1bnVzZWQqLywKQEAgLTE3MiwxMCArMTY5LDkgQEAKIAogICAgICAgLy8gUHJpbnQgdmVyYm9zZSBvdXRwdXQuCiAgICAgICBpZiAodGhpcy0+VmVyYm9zZSkgewotICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICAgICAgICBtc2cgPDwgIkRlcGVuZGVlIFwiIiA8PCBkZXBlbmRlZSA8PCAiXCIgZG9lcyBub3QgZXhpc3QgZm9yIGRlcGVuZGVyIFwiIgotICAgICAgICAgICAgPDwgZGVwZW5kZXIgPDwgIlwiLiIgPDwgc3RkOjplbmRsOwotICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQobXNnLnN0cigpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGRvZXMgbm90IGV4aXN0IGZvciBkZXBlbmRlciBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlciwgIlwiLlxuIikpOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAoZGVwZW5kZXJFeGlzdHMpIHsKICAgICAgIC8vIFRoZSBkZXBlbmRlZSBhbmQgZGVwZW5kZXIgYm90aCBleGlzdC4gIENvbXBhcmUgZmlsZSB0aW1lcy4KQEAgLTE4NSwxMCArMTgxLDkgQEAKIAogICAgICAgICAvLyBQcmludCB2ZXJib3NlIG91dHB1dC4KICAgICAgICAgaWYgKHRoaXMtPlZlcmJvc2UpIHsKLSAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICAgICAgICAgIG1zZyA8PCAiRGVwZW5kZWUgXCIiIDw8IGRlcGVuZGVlIDw8ICJcIiBpcyBuZXdlciB0aGFuIGRlcGVuZGVyIFwiIgotICAgICAgICAgICAgICA8PCBkZXBlbmRlciA8PCAiXCIuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KG1zZy5zdHIoKSk7CisgICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRlciBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVyLCAiXCIuXG4iKSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjAwLDExICsxOTUsOSBAQAogCiAgICAgICAgIC8vIFByaW50IHZlcmJvc2Ugb3V0cHV0LgogICAgICAgICBpZiAodGhpcy0+VmVyYm9zZSkgewotICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgICAgICAgbXNnIDw8ICJEZXBlbmRlZSBcIiIgPDwgZGVwZW5kZWUKLSAgICAgICAgICAgICAgPDwgIlwiIGlzIG5ld2VyIHRoYW4gZGVwZW5kcyBmaWxlIFwiIiA8PCBpbnRlcm5hbERlcGVuZHNGaWxlTmFtZQotICAgICAgICAgICAgICA8PCAiXCIuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KG1zZy5zdHIoKSk7CisgICAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIGRlcGVuZGVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRzIGZpbGUgXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbERlcGVuZHNGaWxlTmFtZSwgIlwiLlxuIikpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kcy5oIGIvU291cmNlL2NtRGVwZW5kcy5oCmluZGV4IGQ5Mzg3NzUuLjhjZjUyOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbURlcGVuZHMuaAorKysgYi9Tb3VyY2UvY21EZXBlbmRzLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKIGNsYXNzIGNtRmlsZVRpbWVDYWNoZTsKLWNsYXNzIGNtTG9jYWxHZW5lcmF0b3I7CitjbGFzcyBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzsKIAogLyoqIFxjbGFzcyBjbURlcGVuZHMKICAqIFxicmllZiBEZXBlbmRlbmN5IHNjYW5uZXIgc3VwZXJjbGFzcy4KQEAgLTI5LDcgKzI5LDggQEAKIHB1YmxpYzoKICAgLyoqIEluc3RhbmNlcyBuZWVkIHRvIGtub3cgdGhlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGFuZCB0aGUgcmVsYXRpdmUKICAgICAgIHBhdGggZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5IHRvIHRoZSB0YXJnZXQgZmlsZS4gICovCi0gIGNtRGVwZW5kcyhjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IG51bGxwdHIsIHN0ZDo6c3RyaW5nIHRhcmdldERpciA9ICIiKTsKKyAgY21EZXBlbmRzKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZyA9IG51bGxwdHIsCisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0YXJnZXREaXIgPSAiIik7CiAKICAgY21EZXBlbmRzKGNtRGVwZW5kcyBjb25zdCYpID0gZGVsZXRlOwogICBjbURlcGVuZHMmIG9wZXJhdG9yPShjbURlcGVuZHMgY29uc3QmKSA9IGRlbGV0ZTsKQEAgLTM4LDcgKzM5LDEwIEBACiAgICAgICBzY2FubmluZyBkZXBlbmRlbmNpZXMuICBUaGlzIGlzIG5vdCBhIGZ1bGwgbG9jYWwgZ2VuZXJhdG9yOyBpdAogICAgICAgaGFzIGJlZW4gc2V0dXAgdG8gZG8gcmVsYXRpdmUgcGF0aCBjb252ZXJzaW9ucyBmb3IgdGhlIGN1cnJlbnQKICAgICAgIGRpcmVjdG9yeS4gICovCi0gIHZvaWQgU2V0TG9jYWxHZW5lcmF0b3IoY21Mb2NhbEdlbmVyYXRvciogbGcpIHsgdGhpcy0+TG9jYWxHZW5lcmF0b3IgPSBsZzsgfQorICB2b2lkIFNldExvY2FsR2VuZXJhdG9yKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZykKKyAgeworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yID0gbGc7CisgIH0KIAogICAvKiogU2V0IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSB0byBiZSBzY2FubmVkLiAgKi8KICAgdm9pZCBTZXRMYW5ndWFnZShjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykgeyB0aGlzLT5MYW5ndWFnZSA9IGxhbmc7IH0KQEAgLTkyLDcgKzk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSYgaW50ZXJuYWxEZXBlbmRzKTsKIAogICAvLyBUaGUgbG9jYWwgZ2VuZXJhdG9yLgotICBjbUxvY2FsR2VuZXJhdG9yKiBMb2NhbEdlbmVyYXRvcjsKKyAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIExvY2FsR2VuZXJhdG9yOwogCiAgIC8vIEZsYWcgZm9yIHZlcmJvc2Ugb3V0cHV0LgogICBib29sIFZlcmJvc2UgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbURlcGVuZHNDLmN4eCBiL1NvdXJjZS9jbURlcGVuZHNDLmN4eAppbmRleCBlMzBkOTU5Li5lMDVjOTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EZXBlbmRzQy5jeHgKKysrIGIvU291cmNlL2NtRGVwZW5kc0MuY3h4CkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogCiAjaW5jbHVkZSAiY21GaWxlVGltZS5oIgotI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0yMiw4ICsyMiw5IEBACiAKIGNtRGVwZW5kc0M6OmNtRGVwZW5kc0MoKSA9IGRlZmF1bHQ7CiAKLWNtRGVwZW5kc0M6OmNtRGVwZW5kc0MoY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXREaXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLCBjb25zdCBEZXBlbmRlbmN5TWFwKiB2YWxpZERlcHMpCitjbURlcGVuZHNDOjpjbURlcGVuZHNDKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldERpciwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlcGVuZGVuY3lNYXAqIHZhbGlkRGVwcykKICAgOiBjbURlcGVuZHMobGcsIHRhcmdldERpcikKICAgLCBWYWxpZERlcHModmFsaWREZXBzKQogewpAQCAtMjExLDE4ICsyMTIsMTggQEAKICAgLy8gd3JpdHRlbiBieSB0aGUgb3JpZ2luYWwgbG9jYWwgZ2VuZXJhdG9yIGZvciB0aGlzIGRpcmVjdG9yeQogICAvLyBjb252ZXJ0IHRoZSBkZXBlbmRlbmNpZXMgdG8gcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGhvbWUgb3V0cHV0CiAgIC8vIGRpcmVjdG9yeS4gIFdlIG11c3QgZG8gdGhlIHNhbWUgaGVyZS4KLSAgc3RkOjpzdHJpbmcgb2JqX20gPSBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9PdXRwdXRQYXRoKG9ial9pKTsKLSAgaW50ZXJuYWxEZXBlbmRzIDw8IG9ial9pIDw8IHN0ZDo6ZW5kbDsKKyAgc3RkOjpzdHJpbmcgb2JqX20gPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q29udmVydFRvTWFrZWZpbGVQYXRoKG9ial9pKTsKKyAgaW50ZXJuYWxEZXBlbmRzIDw8IG9ial9pIDw8ICdcbic7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZGVwIDogZGVwZW5kZW5jaWVzKSB7CiAgICAgbWFrZURlcGVuZHMgPDwgb2JqX20gPDwgIjogIgotICAgICAgICAgICAgICAgIDw8IGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgoCisgICAgICAgICAgICAgICAgPDwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb01ha2VmaWxlUGF0aCgKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwKSkKLSAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgaW50ZXJuYWxEZXBlbmRzIDw8ICIgIiA8PCBkZXAgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICAgIDw8ICdcbic7CisgICAgaW50ZXJuYWxEZXBlbmRzIDw8ICcgJyA8PCBkZXAgPDwgJ1xuJzsKICAgfQotICBtYWtlRGVwZW5kcyA8PCBzdGQ6OmVuZGw7CisgIG1ha2VEZXBlbmRzIDw8ICdcbic7CiAKICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNjQsMTkgKzI2NSwxOSBAQAogICAgICAgLy8gZmlsZSBkb2Vzbid0IGV4aXN0LCBjaGVjayB0aGF0IHRoZSByZWd1bGFyIGV4cHJlc3Npb25zCiAgICAgICAvLyBoYXZlbid0IGNoYW5nZWQKICAgICAgIGVsc2UgaWYgKCFyZXMpIHsKLSAgICAgICAgaWYgKGxpbmUuZmluZChJTkNMVURFX1JFR0VYX0xJTkVfTUFSS0VSKSA9PSAwKSB7CisgICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobGluZSwgSU5DTFVERV9SRUdFWF9MSU5FX01BUktFUikpIHsKICAgICAgICAgICBpZiAobGluZSAhPSB0aGlzLT5JbmNsdWRlUmVnZXhMaW5lU3RyaW5nKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGxpbmUuZmluZChJTkNMVURFX1JFR0VYX1NDQU5fTUFSS0VSKSA9PSAwKSB7CisgICAgICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGxpbmUsIElOQ0xVREVfUkVHRVhfU0NBTl9NQVJLRVIpKSB7CiAgICAgICAgICAgaWYgKGxpbmUgIT0gdGhpcy0+SW5jbHVkZVJlZ2V4U2NhblN0cmluZykgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChsaW5lLmZpbmQoSU5DTFVERV9SRUdFWF9DT01QTEFJTl9NQVJLRVIpID09IDApIHsKKyAgICAgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobGluZSwgSU5DTFVERV9SRUdFWF9DT01QTEFJTl9NQVJLRVIpKSB7CiAgICAgICAgICAgaWYgKGxpbmUgIT0gdGhpcy0+SW5jbHVkZVJlZ2V4Q29tcGxhaW5TdHJpbmcpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobGluZS5maW5kKElOQ0xVREVfUkVHRVhfVFJBTlNGT1JNX01BUktFUikgPT0gMCkgeworICAgICAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChsaW5lLCBJTkNMVURFX1JFR0VYX1RSQU5TRk9STV9NQVJLRVIpKSB7CiAgICAgICAgICAgaWYgKGxpbmUgIT0gdGhpcy0+SW5jbHVkZVJlZ2V4VHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQpAQCAtMzEyLDE3ICszMTMsMTcgQEAKIAogICBmb3IgKGF1dG8gY29uc3QmIGZpbGVJdCA6IHRoaXMtPkZpbGVDYWNoZSkgewogICAgIGlmIChmaWxlSXQuc2Vjb25kLlVzZWQpIHsKLSAgICAgIGNhY2hlT3V0IDw8IGZpbGVJdC5maXJzdCA8PCBzdGQ6OmVuZGw7CisgICAgICBjYWNoZU91dCA8PCBmaWxlSXQuZmlyc3QgPDwgJ1xuJzsKIAogICAgICAgZm9yIChVbnNjYW5uZWRFbnRyeSBjb25zdCYgaW5jIDogZmlsZUl0LnNlY29uZC5VbnNjYW5uZWRFbnRyaWVzKSB7Ci0gICAgICAgIGNhY2hlT3V0IDw8IGluYy5GaWxlTmFtZSA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGNhY2hlT3V0IDw8IGluYy5GaWxlTmFtZSA8PCAnXG4nOwogICAgICAgICBpZiAoaW5jLlF1b3RlZExvY2F0aW9uLmVtcHR5KCkpIHsKLSAgICAgICAgICBjYWNoZU91dCA8PCAiLSIgPDwgc3RkOjplbmRsOworICAgICAgICAgIGNhY2hlT3V0IDw8ICctJyA8PCAnXG4nOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNhY2hlT3V0IDw8IGluYy5RdW90ZWRMb2NhdGlvbiA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgY2FjaGVPdXQgPDwgaW5jLlF1b3RlZExvY2F0aW9uIDw8ICdcbic7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGNhY2hlT3V0IDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGNhY2hlT3V0IDw8ICdcbic7CiAgICAgfQogICB9CiB9CkBAIC0zODMsOSArMzg0LDcgQEAKICAgLy8gR2V0IHRoZSB0cmFuc2Zvcm1hdGlvbiBydWxlcy4KICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRyYW5zZm9ybVJ1bGVzOwogICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZSgpOwotICBpZiAoY29uc3QgY2hhciogeGZvcm0gPSBtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfSU5DTFVERV9UUkFOU0ZPUk1TIikpIHsKLSAgICBjbUV4cGFuZExpc3QoeGZvcm0sIHRyYW5zZm9ybVJ1bGVzLCB0cnVlKTsKLSAgfQorICBtZi0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfSU5DTFVERV9UUkFOU0ZPUk1TIiwgdHJhbnNmb3JtUnVsZXMsIHRydWUpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiB0ciA6IHRyYW5zZm9ybVJ1bGVzKSB7CiAgICAgdGhpcy0+UGFyc2VUcmFuc2Zvcm0odHIpOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21EZXBlbmRzQy5oIGIvU291cmNlL2NtRGVwZW5kc0MuaAppbmRleCAzYmI2ZTM2Li5lMDFmYWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21EZXBlbmRzQy5oCisrKyBiL1NvdXJjZS9jbURlcGVuZHNDLmgKQEAgLTcsMTcgKzcsMTYgQEAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8cXVldWU+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlIDxxdWV1ZT4KLQogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAogI2luY2x1ZGUgImNtRGVwZW5kcy5oIgogCi1jbGFzcyBjbUxvY2FsR2VuZXJhdG9yOworY2xhc3MgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM7CiAKIC8qKiBcY2xhc3MgY21EZXBlbmRzQwogICogXGJyaWVmIERlcGVuZGVuY3kgc2Nhbm5lciBmb3IgQyBhbmQgQysrIG9iamVjdCBmaWxlcy4KQEAgLTI4LDcgKzI3LDcgQEAKICAgLyoqIENoZWNraW5nIGluc3RhbmNlcyBuZWVkIHRvIGtub3cgdGhlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGFuZCB0aGUKICAgICAgIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5IHRvIHRoZSB0YXJnZXQgZmlsZS4gICovCiAgIGNtRGVwZW5kc0MoKTsKLSAgY21EZXBlbmRzQyhjbUxvY2FsR2VuZXJhdG9yKiBsZywgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldERpciwKKyAgY21EZXBlbmRzQyhjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXREaXIsCiAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsIGNvbnN0IERlcGVuZGVuY3lNYXAqIHZhbGlkRGVwcyk7CiAKICAgLyoqIFZpcnR1YWwgZGVzdHJ1Y3RvciB0byBjbGVhbnVwIHN1YmNsYXNzZXMgcHJvcGVybHkuICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uY3h4IGIvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uY3h4CmluZGV4IDM2OTIyMDIuLjU0NDE4ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbURlcGVuZHNGb3J0cmFuLmN4eAorKysgYi9Tb3VyY2UvY21EZXBlbmRzRm9ydHJhbi5jeHgKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2luY2x1ZGUgImNtRm9ydHJhblBhcnNlci5oIiAvKiBJbnRlcmZhY2UgdG8gcGFyc2VyIG9iamVjdC4gICovCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCi0jaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiY21TdGF0ZURpcmVjdG9yeS5oIgpAQCAtMjksMTIgKzI5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBtb2RfbG93ZXIpCiB7CiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZXh0X2xlbiA9IDA7Ci0gIGlmIChjbUhhc0xpdGVyYWxTdWZmaXgobW9kLCAiLm1vZCIpKSB7CisgIGlmIChjbUhhc0xpdGVyYWxTdWZmaXgobW9kLCAiLm1vZCIpIHx8IGNtSGFzTGl0ZXJhbFN1ZmZpeChtb2QsICIuc3ViIikpIHsKICAgICBleHRfbGVuID0gNDsKICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxTdWZmaXgobW9kLCAiLnNtb2QiKSkgewogICAgIGV4dF9sZW4gPSA1OwotICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFN1ZmZpeChtb2QsICIuc3ViIikpIHsKLSAgICBleHRfbGVuID0gNDsKICAgfQogICBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA9IG1vZC5zdWJzdHIoMCwgbW9kLnNpemUoKSAtIGV4dF9sZW4pOwogICBzdGQ6OnN0cmluZyBjb25zdCYgZXh0ID0gbW9kLnN1YnN0cihtb2Quc2l6ZSgpIC0gZXh0X2xlbik7CkBAIC03Miw3ICs3MCw3IEBACiAKIGNtRGVwZW5kc0ZvcnRyYW46OmNtRGVwZW5kc0ZvcnRyYW4oKSA9IGRlZmF1bHQ7CiAKLWNtRGVwZW5kc0ZvcnRyYW46OmNtRGVwZW5kc0ZvcnRyYW4oY21Mb2NhbEdlbmVyYXRvciogbGcpCitjbURlcGVuZHNGb3J0cmFuOjpjbURlcGVuZHNGb3J0cmFuKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZykKICAgOiBjbURlcGVuZHMobGcpCiAgICwgSW50ZXJuYWwobmV3IGNtRGVwZW5kc0ZvcnRyYW5JbnRlcm5hbHMpCiB7CkBAIC04MiwxMCArODAsNyBAQAogICAvLyBHZXQgdGhlIGxpc3Qgb2YgZGVmaW5pdGlvbnMuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWZpbml0aW9uczsKICAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGUoKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNfZGVmaW5lcyA9Ci0gICAgICAgIG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9UQVJHRVRfREVGSU5JVElPTlNfRm9ydHJhbiIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KGNfZGVmaW5lcywgZGVmaW5pdGlvbnMpOwotICB9CisgIG1mLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9UQVJHRVRfREVGSU5JVElPTlNfRm9ydHJhbiIsIGRlZmluaXRpb25zKTsKIAogICAvLyB0cmFuc2xhdGUgaS5lLiBGT089QkFSIHRvIEZPTyBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIGRlZmluZWQKICAgLy8gcHJlcHJvY2Vzc29yIHN5bWJvbHMKQEAgLTEwMiwxMCArOTcsNyBAQAogICB0aGlzLT5TTW9kRXh0ID0gbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9Gb3J0cmFuX1NVQk1PRFVMRV9FWFQiKTsKIH0KIAotY21EZXBlbmRzRm9ydHJhbjo6fmNtRGVwZW5kc0ZvcnRyYW4oKQotewotICBkZWxldGUgdGhpcy0+SW50ZXJuYWw7Ci19CitjbURlcGVuZHNGb3J0cmFuOjp+Y21EZXBlbmRzRm9ydHJhbigpID0gZGVmYXVsdDsKIAogYm9vbCBjbURlcGVuZHNGb3J0cmFuOjpXcml0ZURlcGVuZGVuY2llcyhjb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIHNvdXJjZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvYmosCkBAIC0xODgsNyArMTgwLDcgQEAKICAgZmlTdHJlYW0gPDwgInByb3ZpZGVzXG4iOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gY29uc3QmIHByb3ZpZGVzID0gdGhpcy0+SW50ZXJuYWwtPlRhcmdldFByb3ZpZGVzOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogcHJvdmlkZXMpIHsKLSAgICBmaVN0cmVhbSA8PCAiICIgPDwgaSA8PCAiXG4iOworICAgIGZpU3RyZWFtIDw8ICcgJyA8PCBpIDw8ICdcbic7CiAgIH0KIAogICAvLyBDcmVhdGUgYSBzY3JpcHQgdG8gY2xlYW4gdGhlIG1vZHVsZXMuCkBAIC0yMDUsMTQgKzE5NywxNCBAQAogICAgICAgc3RkOjpzdHJpbmcgbW9kX2xvd2VyID0gY21TdHJDYXQobW9kX2RpciwgJy8nKTsKICAgICAgIGNtRm9ydHJhbk1vZHVsZUFwcGVuZFVwcGVyTG93ZXIoaSwgbW9kX3VwcGVyLCBtb2RfbG93ZXIpOwogICAgICAgc3RkOjpzdHJpbmcgc3RhbXAgPSBjbVN0ckNhdChzdGFtcF9kaXIsICcvJywgaSwgIi5zdGFtcCIpOwotICAgICAgZmNTdHJlYW0gPDwgIlxuIjsKLSAgICAgIGZjU3RyZWFtIDw8ICIgIFwiIgorICAgICAgZmNTdHJlYW0gPDwgIlxuIgorICAgICAgICAgICAgICAgICAgIiAgXCIiCiAgICAgICAgICAgICAgICA8PCB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBtb2RfbG93ZXIpCi0gICAgICAgICAgICAgICA8PCAiXCJcbiI7Ci0gICAgICBmY1N0cmVhbSA8PCAiICBcIiIKKyAgICAgICAgICAgICAgIDw8ICJcIlxuIgorICAgICAgICAgICAgICAgICAgIiAgXCIiCiAgICAgICAgICAgICAgICA8PCB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBtb2RfdXBwZXIpCi0gICAgICAgICAgICAgICA8PCAiXCJcbiI7Ci0gICAgICBmY1N0cmVhbSA8PCAiICBcIiIKKyAgICAgICAgICAgICAgIDw8ICJcIlxuIgorICAgICAgICAgICAgICAgICAgIiAgXCIiCiAgICAgICAgICAgICAgICA8PCB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBzdGFtcCkKICAgICAgICAgICAgICAgIDw8ICJcIlxuIjsKICAgICB9CkBAIC0yNDgsMTAgKzI0MCw3IEBACiAgIC8vIExvYWQgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgdGFyZ2V0cy4KICAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGUoKTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluZm9GaWxlczsKLSAgaWYgKGNvbnN0IGNoYXIqIGluZm9GaWxlc1ZhbHVlID0KLSAgICAgICAgbWYtPkdldERlZmluaXRpb24oIkNNQUtFX1RBUkdFVF9MSU5LRURfSU5GT19GSUxFUyIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KGluZm9GaWxlc1ZhbHVlLCBpbmZvRmlsZXMpOwotICB9CisgIG1mLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9UQVJHRVRfTElOS0VEX0lORk9fRklMRVMiLCBpbmZvRmlsZXMpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW5mb0ZpbGVzKSB7CiAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0RGlyID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGkpOwogICAgIHN0ZDo6c3RyaW5nIGZuYW1lID0gdGFyZ2V0RGlyICsgIi9mb3J0cmFuLmludGVybmFsIjsKQEAgLTMyOSwxNiArMzE4LDE1IEBACiAgIHN0ZDo6c3RyaW5nIGJpbkRpciA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRCaW5hcnlEaXJlY3RvcnkoKTsKICAgc3RkOjpzdHJpbmcgb2JqX2kgPSB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIG9iaik7CiAgIHN0ZDo6c3RyaW5nIG9ial9tID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aChvYmpfaSk7Ci0gIGludGVybmFsRGVwZW5kcyA8PCBvYmpfaSA8PCBzdGQ6OmVuZGw7Ci0gIGludGVybmFsRGVwZW5kcyA8PCAiICIgPDwgc3JjIDw8IHN0ZDo6ZW5kbDsKKyAgaW50ZXJuYWxEZXBlbmRzIDw8IG9ial9pIDw8ICJcbiAiIDw8IHNyYyA8PCAnXG4nOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW5mby5JbmNsdWRlcykgewogICAgIG1ha2VEZXBlbmRzIDw8IG9ial9tIDw8ICI6ICIKICAgICAgICAgICAgICAgICA8PCBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9PdXRwdXRQYXRoKAogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoYmluRGlyLCBpKSkKLSAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgaW50ZXJuYWxEZXBlbmRzIDw8ICIgIiA8PCBpIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgICAgICA8PCAnXG4nOworICAgIGludGVybmFsRGVwZW5kcyA8PCAnICcgPDwgaSA8PCAnXG4nOwogICB9Ci0gIG1ha2VEZXBlbmRzIDw8IHN0ZDo6ZW5kbDsKKyAgbWFrZURlcGVuZHMgPDwgJ1xuJzsKIAogICAvLyBXcml0ZSBtb2R1bGUgcmVxdWlyZW1lbnRzIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW5mby5SZXF1aXJlcykgewpAQCAtMzU3LDcgKzM0NSw3IEBACiAgICAgICAvLyBUaGlzIG1vZHVsZSBpcyBrbm93bi4gIERlcGVuZCBvbiBpdHMgdGltZXN0YW1wIGZpbGUuCiAgICAgICBzdGQ6OnN0cmluZyBzdGFtcEZpbGUgPSBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9PdXRwdXRQYXRoKAogICAgICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIHJlcXVpcmVkLT5zZWNvbmQpKTsKLSAgICAgIG1ha2VEZXBlbmRzIDw8IG9ial9tIDw8ICI6ICIgPDwgc3RhbXBGaWxlIDw8ICJcbiI7CisgICAgICBtYWtlRGVwZW5kcyA8PCBvYmpfbSA8PCAiOiAiIDw8IHN0YW1wRmlsZSA8PCAnXG4nOwogICAgIH0gZWxzZSB7CiAgICAgICAvLyBUaGlzIG1vZHVsZSBpcyBub3Qga25vd24gdG8gQ01ha2UuICBUcnkgdG8gbG9jYXRlIGl0IHdoZXJlCiAgICAgICAvLyB0aGUgY29tcGlsZXIgd2lsbCBhbmQgZGVwZW5kIG9uIHRoYXQuCkBAIC0zNjUsNyArMzUzLDcgQEAKICAgICAgIGlmICh0aGlzLT5GaW5kTW9kdWxlKGksIG1vZHVsZSkpIHsKICAgICAgICAgbW9kdWxlID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aCgKICAgICAgICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIG1vZHVsZSkpOwotICAgICAgICBtYWtlRGVwZW5kcyA8PCBvYmpfbSA8PCAiOiAiIDw8IG1vZHVsZSA8PCAiXG4iOworICAgICAgICBtYWtlRGVwZW5kcyA8PCBvYmpfbSA8PCAiOiAiIDw8IG1vZHVsZSA8PCAnXG4nOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMzk0LDcgKzM4Miw3IEBACiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgoc3RhbXBGaWxlKTsKIAogICAgICAgbWFrZURlcGVuZHMgPDwgb2JqX20gPDwgIi5wcm92aWRlcy5idWlsZCIKLSAgICAgICAgICAgICAgICAgIDw8ICI6ICIgPDwgc3RhbXBGaWxlRm9yTWFrZSA8PCAiXG4iOworICAgICAgICAgICAgICAgICAgPDwgIjogIiA8PCBzdGFtcEZpbGVGb3JNYWtlIDw8ICdcbic7CiAgICAgICAvLyBOb3RlIHRoYXQgd2hlbiBjbWFrZV9jb3B5X2Y5MF9tb2QgZmluZHMgdGhhdCBhIG1vZHVsZSBmaWxlCiAgICAgICAvLyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhbXAgZmlsZSBoYXZlIG5vIGRpZmZlcmVuY2VzLCB0aGUgc3RhbXAKICAgICAgIC8vIGZpbGUgaXMgbm90IHVwZGF0ZWQuIEluIHN1Y2ggY2FzZSB0aGUgc3RhbXAgZmlsZSB3aWxsIGJlIGFsd2F5cwpAQCAtNDAyLDE1ICszOTAsMTUgQEAKICAgICAgIC8vIG9uIGVhY2ggbmV3IGJ1aWxkLiBUaGlzIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGZvciBpbmNyZW1lbnRhbAogICAgICAgLy8gYnVpbGRzIGFuZCBjYW4gbm90IGJlIGNoYW5nZWQgd2l0aG91dCBwcmVmb3JtaW5nIHJlY3Vyc2l2ZSBtYWtlCiAgICAgICAvLyBjYWxscyB0aGF0IHdvdWxkIGNvbnNpZGVyYWJseSBzbG93IGRvd24gdGhlIGJ1aWxkaW5nIHByb2Nlc3MuCi0gICAgICBtYWtlRGVwZW5kcyA8PCBzdGFtcEZpbGVGb3JNYWtlIDw8ICI6ICIgPDwgb2JqX20gPDwgIlxuIjsKKyAgICAgIG1ha2VEZXBlbmRzIDw8IHN0YW1wRmlsZUZvck1ha2UgPDwgIjogIiA8PCBvYmpfbSA8PCAnXG4nOwogICAgICAgbWFrZURlcGVuZHMgPDwgIlx0JChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9jb3B5X2Y5MF9tb2QgIiA8PCBtb2RGaWxlCi0gICAgICAgICAgICAgICAgICA8PCAiICIgPDwgc3RhbXBGaWxlRm9yU2hlbGw7CisgICAgICAgICAgICAgICAgICA8PCAnICcgPDwgc3RhbXBGaWxlRm9yU2hlbGw7CiAgICAgICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZSgpOwogICAgICAgY29uc3QgY2hhciogY2lkID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQiKTsKLSAgICAgIGlmIChjaWQgJiYgKmNpZCkgewotICAgICAgICBtYWtlRGVwZW5kcyA8PCAiICIgPDwgY2lkOworICAgICAgaWYgKGNtTm9uZW1wdHkoY2lkKSkgeworICAgICAgICBtYWtlRGVwZW5kcyA8PCAnICcgPDwgY2lkOwogICAgICAgfQotICAgICAgbWFrZURlcGVuZHMgPDwgIlxuIjsKKyAgICAgIG1ha2VEZXBlbmRzIDw8ICdcbic7CiAgICAgfQogICAgIG1ha2VEZXBlbmRzIDw8IG9ial9tIDw8ICIucHJvdmlkZXMuYnVpbGQ6XG4iOwogICAgIC8vIEFmdGVyIGNvcHlpbmcgdGhlIG1vZHVsZXMgdXBkYXRlIHRoZSB0aW1lc3RhbXAgZmlsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbURlcGVuZHNGb3J0cmFuLmggYi9Tb3VyY2UvY21EZXBlbmRzRm9ydHJhbi5oCmluZGV4IDA0ODUxMTUuLjNlMzA2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbURlcGVuZHNGb3J0cmFuLmgKKysrIGIvU291cmNlL2NtRGVwZW5kc0ZvcnRyYW4uaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTE0LDcgKzE1LDcgQEAKIAogY2xhc3MgY21EZXBlbmRzRm9ydHJhbkludGVybmFsczsKIGNsYXNzIGNtRm9ydHJhblNvdXJjZUluZm87Ci1jbGFzcyBjbUxvY2FsR2VuZXJhdG9yOworY2xhc3MgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM7CiAKIC8qKiBcY2xhc3MgY21EZXBlbmRzRm9ydHJhbgogICogXGJyaWVmIERlcGVuZGVuY3kgc2Nhbm5lciBmb3IgRm9ydHJhbiBvYmplY3QgZmlsZXMuCkBAIC0zMCw3ICszMSw3IEBACiAgICAgICBwYXRoIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeSB0byB0aGUgdGFyZ2V0IGZpbGUsIHRoZSBzb3VyY2UKICAgICAgIGZpbGUgZnJvbSB3aGljaCB0byBzdGFydCBzY2FubmluZywgdGhlIGluY2x1ZGUgZmlsZSBzZWFyY2gKICAgICAgIHBhdGgsIGFuZCB0aGUgdGFyZ2V0IGRpcmVjdG9yeS4gICovCi0gIGNtRGVwZW5kc0ZvcnRyYW4oY21Mb2NhbEdlbmVyYXRvciogbGcpOworICBjbURlcGVuZHNGb3J0cmFuKGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZyk7CiAKICAgLyoqIFZpcnR1YWwgZGVzdHJ1Y3RvciB0byBjbGVhbnVwIHN1YmNsYXNzZXMgcHJvcGVybHkuICAqLwogICB+Y21EZXBlbmRzRm9ydHJhbigpIG92ZXJyaWRlOwpAQCAtODQsNyArODUsNyBAQAogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gUFBEZWZpbml0aW9uczsKIAogICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotICBjbURlcGVuZHNGb3J0cmFuSW50ZXJuYWxzKiBJbnRlcm5hbCA9IG51bGxwdHI7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbURlcGVuZHNGb3J0cmFuSW50ZXJuYWxzPiBJbnRlcm5hbDsKIAogcHJpdmF0ZToKICAgc3RkOjpzdHJpbmcgTWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGJhc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlci5jeHggYi9Tb3VyY2UvY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlci5jeHgKaW5kZXggNTE2YmJiZi4uZmMxYmJkZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVwZW5kc0phdmFQYXJzZXJIZWxwZXIuY3h4CisrKyBiL1NvdXJjZS9jbURlcGVuZHNKYXZhUGFyc2VySGVscGVyLmN4eApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCkBAIC0xNjksMTAgKzE3MCwxMSBAQAogICAgIHJldHVybjsKICAgfQogICB0aGlzLT5VbmlvbnNBdmFpbGFibGUrKzsKLSAgcHQtPnN0ciA9IG5ldyBjaGFyW2xlbiArIDFdOworICBhdXRvIHVwID0gY206Om1ha2VfdW5pcXVlPGNoYXJbXT4obGVuICsgMSk7CisgIHB0LT5zdHIgPSB1cC5nZXQoKTsKICAgc3RybmNweShwdC0+c3RyLCBzdHIsIGxlbik7CiAgIHB0LT5zdHJbbGVuXSA9IDA7Ci0gIHRoaXMtPkFsbG9jYXRlcy5wdXNoX2JhY2socHQtPnN0cik7CisgIHRoaXMtPkFsbG9jYXRlcy5wdXNoX2JhY2soc3RkOjptb3ZlKHVwKSk7CiB9CiAKIHZvaWQgY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlcjo6U3RhcnRDbGFzcyhjb25zdCBjaGFyKiBjbHMpCkBAIC0yNzUsMTAgKzI3Nyw3IEBACiAKIHZvaWQgY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlcjo6Q2xlYW51cFBhcnNlcigpCiB7Ci0gIGZvciAoY2hhciogYWxsb2NhdGUgOiB0aGlzLT5BbGxvY2F0ZXMpIHsKLSAgICBkZWxldGVbXSBhbGxvY2F0ZTsKLSAgfQotICB0aGlzLT5BbGxvY2F0ZXMuZXJhc2UodGhpcy0+QWxsb2NhdGVzLmJlZ2luKCksIHRoaXMtPkFsbG9jYXRlcy5lbmQoKSk7CisgIHRoaXMtPkFsbG9jYXRlcy5jbGVhcigpOwogfQogCiBpbnQgY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlcjo6TGV4SW5wdXQoY2hhciogYnVmLCBpbnQgbWF4bGVuKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRGVwZW5kc0phdmFQYXJzZXJIZWxwZXIuaCBiL1NvdXJjZS9jbURlcGVuZHNKYXZhUGFyc2VySGVscGVyLmgKaW5kZXggYTY3M2I1Yi4uYzU0NWVlMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRGVwZW5kc0phdmFQYXJzZXJIZWxwZXIuaAorKysgYi9Tb3VyY2UvY21EZXBlbmRzSmF2YVBhcnNlckhlbHBlci5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCkBAIC04MSw3ICs4Miw3IEBACiAgIGludCBDdXJyZW50RGVwdGg7CiAgIGludCBWZXJib3NlOwogCi0gIHN0ZDo6dmVjdG9yPGNoYXIqPiBBbGxvY2F0ZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+PiBBbGxvY2F0ZXM7CiAKICAgdm9pZCBQcmludENsYXNzZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRG9jdW1lbnRhdGlvblNlY3Rpb24uaCBiL1NvdXJjZS9jbURvY3VtZW50YXRpb25TZWN0aW9uLmgKaW5kZXggMTVjYWRhNi4uNjQxMjYzZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRG9jdW1lbnRhdGlvblNlY3Rpb24uaAorKysgYi9Tb3VyY2UvY21Eb2N1bWVudGF0aW9uU2VjdGlvbi5oCkBAIC04LDcgKzgsOCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbURvY3VtZW50YXRpb25FbnRyeS5oIgogCiAvLyBMb3ctbGV2ZWwgaW50ZXJmYWNlIGZvciBjdXN0b20gZG9jdW1lbnRzOgpAQCAtNDcsNyArNDgsNyBAQAogICB9CiAgIHZvaWQgQXBwZW5kKGNvbnN0IHN0ZDo6dmVjdG9yPGNtRG9jdW1lbnRhdGlvbkVudHJ5PiYgZW50cmllcykKICAgewotICAgIGNtQXBwZW5kKHRoaXMtPkVudHJpZXMsIGVudHJpZXMpOworICAgIGNtOjphcHBlbmQodGhpcy0+RW50cmllcywgZW50cmllcyk7CiAgIH0KIAogICAvKiogQXBwZW5kIGFuIGVudHJ5IHRvIHRoaXMgc2VjdGlvbiB1c2luZyBOVUxMIHRlcm1pbmF0ZWQgY2hhcnMgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUR5bmFtaWNMb2FkZXIuY3h4IGIvU291cmNlL2NtRHluYW1pY0xvYWRlci5jeHgKaW5kZXggMGI3MmE5NC4uYTM3MzFjMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRHluYW1pY0xvYWRlci5jeHgKKysrIGIvU291cmNlL2NtRHluYW1pY0xvYWRlci5jeHgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKK25hbWVzcGFjZSB7CiBjbGFzcyBjbUR5bmFtaWNMb2FkZXJDYWNoZQogewogcHVibGljOgpAQCAtMTUsMTQgKzE2LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGNtc3lzOjpEeW5hbWljTG9hZGVyOjpMaWJyYXJ5SGFuZGxlJiAvKnAqLyk7CiAgIGJvb2wgRmx1c2hDYWNoZShjb25zdCBjaGFyKiBwYXRoKTsKICAgdm9pZCBGbHVzaENhY2hlKCk7Ci0gIHN0YXRpYyBjbUR5bmFtaWNMb2FkZXJDYWNoZSogR2V0SW5zdGFuY2UoKTsKKyAgc3RhdGljIGNtRHluYW1pY0xvYWRlckNhY2hlJiBHZXRJbnN0YW5jZSgpOwogCiBwcml2YXRlOgogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21zeXM6OkR5bmFtaWNMb2FkZXI6OkxpYnJhcnlIYW5kbGU+IENhY2hlTWFwOwotICBzdGF0aWMgY21EeW5hbWljTG9hZGVyQ2FjaGUqIEluc3RhbmNlOworICBzdGF0aWMgY21EeW5hbWljTG9hZGVyQ2FjaGUgSW5zdGFuY2U7CiB9OwogCi1jbUR5bmFtaWNMb2FkZXJDYWNoZSogY21EeW5hbWljTG9hZGVyQ2FjaGU6Okluc3RhbmNlID0gbnVsbHB0cjsKK2NtRHluYW1pY0xvYWRlckNhY2hlIGNtRHluYW1pY0xvYWRlckNhY2hlOjpJbnN0YW5jZTsKK30KIAogY21EeW5hbWljTG9hZGVyQ2FjaGU6On5jbUR5bmFtaWNMb2FkZXJDYWNoZSgpID0gZGVmYXVsdDsKIApAQCAtNjQsMTUgKzY2LDExIEBACiAgIGZvciAoYXV0byBjb25zdCYgaXQgOiB0aGlzLT5DYWNoZU1hcCkgewogICAgIGNtc3lzOjpEeW5hbWljTG9hZGVyOjpDbG9zZUxpYnJhcnkoaXQuc2Vjb25kKTsKICAgfQotICBkZWxldGUgY21EeW5hbWljTG9hZGVyQ2FjaGU6Okluc3RhbmNlOwotICBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6SW5zdGFuY2UgPSBudWxscHRyOworICB0aGlzLT5DYWNoZU1hcC5jbGVhcigpOwogfQogCi1jbUR5bmFtaWNMb2FkZXJDYWNoZSogY21EeW5hbWljTG9hZGVyQ2FjaGU6OkdldEluc3RhbmNlKCkKK2NtRHluYW1pY0xvYWRlckNhY2hlJiBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKQogewotICBpZiAoIWNtRHluYW1pY0xvYWRlckNhY2hlOjpJbnN0YW5jZSkgewotICAgIGNtRHluYW1pY0xvYWRlckNhY2hlOjpJbnN0YW5jZSA9IG5ldyBjbUR5bmFtaWNMb2FkZXJDYWNoZTsKLSAgfQogICByZXR1cm4gY21EeW5hbWljTG9hZGVyQ2FjaGU6Okluc3RhbmNlOwogfQogCkBAIC04MCwxNSArNzgsMTUgQEAKICAgY29uc3QgY2hhciogbGlibmFtZSkKIHsKICAgY21zeXM6OkR5bmFtaWNMb2FkZXI6OkxpYnJhcnlIYW5kbGUgbGg7Ci0gIGlmIChjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKS0+R2V0Q2FjaGVGaWxlKGxpYm5hbWUsIGxoKSkgeworICBpZiAoY21EeW5hbWljTG9hZGVyQ2FjaGU6OkdldEluc3RhbmNlKCkuR2V0Q2FjaGVGaWxlKGxpYm5hbWUsIGxoKSkgewogICAgIHJldHVybiBsaDsKICAgfQogICBsaCA9IGNtc3lzOjpEeW5hbWljTG9hZGVyOjpPcGVuTGlicmFyeShsaWJuYW1lKTsKLSAgY21EeW5hbWljTG9hZGVyQ2FjaGU6OkdldEluc3RhbmNlKCktPkNhY2hlRmlsZShsaWJuYW1lLCBsaCk7CisgIGNtRHluYW1pY0xvYWRlckNhY2hlOjpHZXRJbnN0YW5jZSgpLkNhY2hlRmlsZShsaWJuYW1lLCBsaCk7CiAgIHJldHVybiBsaDsKIH0KIAogdm9pZCBjbUR5bmFtaWNMb2FkZXI6OkZsdXNoQ2FjaGUoKQogewotICBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKS0+Rmx1c2hDYWNoZSgpOworICBjbUR5bmFtaWNMb2FkZXJDYWNoZTo6R2V0SW5zdGFuY2UoKS5GbHVzaENhY2hlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FTEYuY3h4IGIvU291cmNlL2NtRUxGLmN4eAppbmRleCA1OTc2YjJmLi5hOGQ4MWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FTEYuY3h4CisrKyBiL1NvdXJjZS9jbUVMRi5jeHgKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVkZSAiY21FTEYuaCIKIAogI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNzdHJlYW0+CkBAIC0xMCwxNyArMTEsMTUgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCisjaW5jbHVkZSA8Y20zcC9rd2ltbC9hYmkuaD4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogCi0jaW5jbHVkZSAiY21fa3dpbWwuaCIKLQotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgotCiAvLyBJbmNsdWRlIHRoZSBFTEYgZm9ybWF0IGluZm9ybWF0aW9uIHN5c3RlbSBoZWFkZXIuCiAjaWYgZGVmaW5lZChfX09wZW5CU0RfXykKICMgIGluY2x1ZGUgPGVsZl9hYmkuaD4KLSMgIGluY2x1ZGUgPHN0ZGludC5oPgogI2VsaWYgZGVmaW5lZChfX0hBSUtVX18pCiAjICBpbmNsdWRlIDxlbGYzMi5oPgogIyAgaW5jbHVkZSA8ZWxmNjQuaD4KQEAgLTU3OCw3ICs1NzcsNyBAQAogICAgIH0KIAogICAgIGNoYXIqIHBkeW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPigmZHluKTsKLSAgICBjbUFwcGVuZChyZXN1bHQsIHBkeW4sIHBkeW4gKyBzaXplb2YoRUxGX0R5bikpOworICAgIGNtOjphcHBlbmQocmVzdWx0LCBwZHluLCBwZHluICsgc2l6ZW9mKEVMRl9EeW4pKTsKICAgfQogCiAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeGVjdXRlUHJvY2Vzc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtRXhlY3V0ZVByb2Nlc3NDb21tYW5kLmN4eAppbmRleCA4MGU0YmNkLi45YzUzYmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeGVjdXRlUHJvY2Vzc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUV4ZWN1dGVQcm9jZXNzQ29tbWFuZC5jeHgKQEAgLTksMTEgKzksMTEgQEAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21zeXMvUHJvY2Vzcy5oIgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKLQotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQXJndW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKQEAgLTYwLDYgKzYwLDggQEAKICAgICBib29sIEVycm9yUXVpZXQgPSBmYWxzZTsKICAgICBib29sIE91dHB1dFN0cmlwVHJhaWxpbmdXaGl0ZXNwYWNlID0gZmFsc2U7CiAgICAgYm9vbCBFcnJvclN0cmlwVHJhaWxpbmdXaGl0ZXNwYWNlID0gZmFsc2U7CisgICAgYm9vbCBFY2hvT3V0cHV0VmFyaWFibGUgPSBmYWxzZTsKKyAgICBib29sIEVjaG9FcnJvclZhcmlhYmxlID0gZmFsc2U7CiAgICAgc3RkOjpzdHJpbmcgRW5jb2Rpbmc7CiAgIH07CiAKQEAgLTgyLDcgKzg0LDkgQEAKICAgICAgICAgICAgICZBcmd1bWVudHM6Ok91dHB1dFN0cmlwVHJhaWxpbmdXaGl0ZXNwYWNlKQogICAgICAgLkJpbmQoIkVSUk9SX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UiX3MsCiAgICAgICAgICAgICAmQXJndW1lbnRzOjpFcnJvclN0cmlwVHJhaWxpbmdXaGl0ZXNwYWNlKQotICAgICAgLkJpbmQoIkVOQ09ESU5HIl9zLCAmQXJndW1lbnRzOjpFbmNvZGluZyk7CisgICAgICAuQmluZCgiRU5DT0RJTkciX3MsICZBcmd1bWVudHM6OkVuY29kaW5nKQorICAgICAgLkJpbmQoIkVDSE9fT1VUUFVUX1ZBUklBQkxFIl9zLCAmQXJndW1lbnRzOjpFY2hvT3V0cHV0VmFyaWFibGUpCisgICAgICAuQmluZCgiRUNIT19FUlJPUl9WQVJJQUJMRSJfcywgJkFyZ3VtZW50czo6RWNob0Vycm9yVmFyaWFibGUpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bnBhcnNlZEFyZ3VtZW50czsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGtleXdvcmRzTWlzc2luZ1ZhbHVlOwpAQCAtMjQwLDI4ICsyNDQsMzIgQEAKICAgd2hpbGUgKChwID0gY21zeXNQcm9jZXNzX1dhaXRGb3JEYXRhKGNwLCAmZGF0YSwgJmxlbmd0aCwgbnVsbHB0cikpKSB7CiAgICAgLy8gUHV0IHRoZSBvdXRwdXQgaW4gdGhlIHJpZ2h0IHBsYWNlLgogICAgIGlmIChwID09IGNtc3lzUHJvY2Vzc19QaXBlX1NURE9VVCAmJiAhYXJndW1lbnRzLk91dHB1dFF1aWV0KSB7Ci0gICAgICBpZiAoYXJndW1lbnRzLk91dHB1dFZhcmlhYmxlLmVtcHR5KCkpIHsKKyAgICAgIGlmIChhcmd1bWVudHMuT3V0cHV0VmFyaWFibGUuZW1wdHkoKSB8fCBhcmd1bWVudHMuRWNob091dHB1dFZhcmlhYmxlKSB7CiAgICAgICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChkYXRhLCBsZW5ndGgsIHN0cmRhdGEsIDEpOwogICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQoc3RyZGF0YSk7Ci0gICAgICB9IGVsc2UgeworICAgICAgfQorICAgICAgaWYgKCFhcmd1bWVudHMuT3V0cHV0VmFyaWFibGUuZW1wdHkoKSkgewogICAgICAgICBjbUV4ZWN1dGVQcm9jZXNzQ29tbWFuZEFwcGVuZCh0ZW1wT3V0cHV0LCBkYXRhLCBsZW5ndGgpOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAocCA9PSBjbXN5c1Byb2Nlc3NfUGlwZV9TVERFUlIgJiYgIWFyZ3VtZW50cy5FcnJvclF1aWV0KSB7Ci0gICAgICBpZiAoYXJndW1lbnRzLkVycm9yVmFyaWFibGUuZW1wdHkoKSkgeworICAgICAgaWYgKGFyZ3VtZW50cy5FcnJvclZhcmlhYmxlLmVtcHR5KCkgfHwgYXJndW1lbnRzLkVjaG9FcnJvclZhcmlhYmxlKSB7CiAgICAgICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChkYXRhLCBsZW5ndGgsIHN0cmRhdGEsIDIpOwogICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRlcnIoc3RyZGF0YSk7Ci0gICAgICB9IGVsc2UgeworICAgICAgfQorICAgICAgaWYgKCFhcmd1bWVudHMuRXJyb3JWYXJpYWJsZS5lbXB0eSgpKSB7CiAgICAgICAgIGNtRXhlY3V0ZVByb2Nlc3NDb21tYW5kQXBwZW5kKHRlbXBFcnJvciwgZGF0YSwgbGVuZ3RoKTsKICAgICAgIH0KICAgICB9CiAgIH0KLSAgaWYgKCFhcmd1bWVudHMuT3V0cHV0UXVpZXQgJiYgYXJndW1lbnRzLk91dHB1dFZhcmlhYmxlLmVtcHR5KCkpIHsKKyAgaWYgKCFhcmd1bWVudHMuT3V0cHV0UXVpZXQgJiYKKyAgICAgIChhcmd1bWVudHMuT3V0cHV0VmFyaWFibGUuZW1wdHkoKSB8fCBhcmd1bWVudHMuRWNob091dHB1dFZhcmlhYmxlKSkgewogICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChzdGQ6OnN0cmluZygpLCBzdHJkYXRhLCAxKTsKICAgICBpZiAoIXN0cmRhdGEuZW1wdHkoKSkgewogICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KHN0cmRhdGEpOwogICAgIH0KICAgfQotICBpZiAoIWFyZ3VtZW50cy5FcnJvclF1aWV0ICYmIGFyZ3VtZW50cy5FcnJvclZhcmlhYmxlLmVtcHR5KCkpIHsKKyAgaWYgKCFhcmd1bWVudHMuRXJyb3JRdWlldCAmJgorICAgICAgKGFyZ3VtZW50cy5FcnJvclZhcmlhYmxlLmVtcHR5KCkgfHwgYXJndW1lbnRzLkVjaG9FcnJvclZhcmlhYmxlKSkgewogICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChzdGQ6OnN0cmluZygpLCBzdHJkYXRhLCAyKTsKICAgICBpZiAoIXN0cmRhdGEuZW1wdHkoKSkgewogICAgICAgY21TeXN0ZW1Ub29sczo6U3RkZXJyKHN0cmRhdGEpOwpAQCAtNDAyLDYgKzQxMCw2IEBACiAgICAgLS1sZW5ndGg7CiAgIH0KICNlbmRpZgotICBjbUFwcGVuZChvdXRwdXQsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICBjbTo6YXBwZW5kKG91dHB1dCwgZGF0YSwgZGF0YSArIGxlbmd0aCk7CiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHBvcnRCdWlsZEFuZHJvaWRNS0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHBvcnRCdWlsZEFuZHJvaWRNS0dlbmVyYXRvci5jeHgKaW5kZXggNTYxZTgzMC4uMzY0MWNiMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0QnVpbGRBbmRyb2lkTUtHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUV4cG9ydEJ1aWxkQW5kcm9pZE1LR2VuZXJhdG9yLmN4eApAQCAtNSw3ICs1LDggQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtTGlua0l0ZW0uaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC00Niw3ICs0Nyw5IEBACiAgIG9zIDw8ICJMT0NBTF9NT0RVTEUgOj0gIjsKICAgb3MgPDwgdGFyZ2V0TmFtZSA8PCAiXG4iOwogICBvcyA8PCAiTE9DQUxfU1JDX0ZJTEVTIDo9ICI7Ci0gIHN0ZDo6c3RyaW5nIHBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9PdXRwdXRQYXRoKHRhcmdldC0+R2V0RnVsbFBhdGgoKSk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IG5vQ29uZmlnOyAvLyBGSVhNRTogV2hhdCBjb25maWcgdG8gdXNlIGhlcmU/CisgIHN0ZDo6c3RyaW5nIHBhdGggPQorICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb091dHB1dFBhdGgodGFyZ2V0LT5HZXRGdWxsUGF0aChub0NvbmZpZykpOwogICBvcyA8PCBwYXRoIDw8ICJcbiI7CiB9CiAKQEAgLTExOCwxMyArMTIxLDEzIEBACiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJvb2wgcmVscGF0aCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gY21FeHBvcnRCdWlsZEFuZHJvaWRNS0dlbmVyYXRvcjo6SU5TVEFMTCkgewotICAgICAgICAgICAgICByZWxwYXRoID0gbGliLnN1YnN0cigwLCAzKSA9PSAiLi4vIjsKKyAgICAgICAgICAgICAgcmVscGF0aCA9IGNtSGFzTGl0ZXJhbFByZWZpeChsaWIsICIuLi8iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBmdWxsIHBhdGggb3IgaWYgaXQgYWxyZWFkeSBoYXMgYSAtbCwgb3IKICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIGFuIGluc3RhbGwgY2hlY2sgZm9yIHJlbGF0aXZlIHBhdGhzCiAgICAgICAgICAgICAvLyBpZiBpdCBpcyBmdWxsIG9yIGEgbGluayBsaWJyYXJ5IHRoZW4gdXNlIHN0cmluZyBkaXJlY3RseQogICAgICAgICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGxpYikgfHwKLSAgICAgICAgICAgICAgICBsaWIuc3Vic3RyKDAsIDIpID09ICItbCIgfHwgcmVscGF0aCkgeworICAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChsaWIsICItbCIpIHx8IHJlbHBhdGgpIHsKICAgICAgICAgICAgICAgbGRsaWJzICs9ICIgIiArIGxpYjsKICAgICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IGEgcGF0aCBhbmQgZG9lcyBub3QgaGF2ZSBhIC1sIHRoZW4gYWRkIC1sCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFsaWIuZW1wdHkoKSkgewpAQCAtMTY1LDcgKzE2OCw3IEBACiAgIC8vIFRlbGwgdGhlIE5ESyBidWlsZCBzeXN0ZW0gaWYgcHJlYnVpbHQgc3RhdGljIGxpYnJhcmllcyB1c2UgQysrLgogICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSkgewogICAgIGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBsaSA9IHRhcmdldC0+R2V0TGlua0ltcGxlbWVudGF0aW9uKGNvbmZpZyk7Ci0gICAgaWYgKGNtQ29udGFpbnMobGktPkxhbmd1YWdlcywgIkNYWCIpKSB7CisgICAgaWYgKGNtOjpjb250YWlucyhsaS0+TGFuZ3VhZ2VzLCAiQ1hYIikpIHsKICAgICAgIG9zIDw8ICJMT0NBTF9IQVNfQ1BQIDo9IHRydWVcbiI7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yLmN4eAppbmRleCA3ZTlhOTg3Li5kZDcwMGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvci5jeHgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21FeHBvcnRTZXQuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgpAQCAtMzAwLDE0ICszMDIsMTMgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4cG9ydEZpbGVzOwogICBzdGQ6OnN0cmluZyBuczsKIAotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqPiYgZXhwb3J0U2V0cyA9Ci0gICAgZ2ctPkdldEJ1aWxkRXhwb3J0U2V0cygpOworICBhdXRvJiBleHBvcnRTZXRzID0gZ2ctPkdldEJ1aWxkRXhwb3J0U2V0cygpOwogCiAgIGZvciAoYXV0byBjb25zdCYgZXhwIDogZXhwb3J0U2V0cykgewotICAgIGNvbnN0IGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBleHBvcnRTZXQgPSBleHAuc2Vjb25kOworICAgIGNvbnN0IGF1dG8mIGV4cG9ydFNldCA9IGV4cC5zZWNvbmQ7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRhcmdldHM7CiAgICAgZXhwb3J0U2V0LT5HZXRUYXJnZXRzKHRhcmdldHMpOwotICAgIGlmIChjbUNvbnRhaW5zKHRhcmdldHMsIG5hbWUpKSB7CisgICAgaWYgKGNtOjpjb250YWlucyh0YXJnZXRzLCBuYW1lKSkgewogICAgICAgZXhwb3J0RmlsZXMucHVzaF9iYWNrKGV4cC5maXJzdCk7CiAgICAgICBucyA9IGV4cG9ydFNldC0+R2V0TmFtZXNwYWNlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuaAppbmRleCAxMWZiZDAyLi42NmU4Y2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuaApAQCAtMTAsNyArMTAsOCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21FeHBvcnRGaWxlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAKQEAgLTQxLDcgKzQyLDcgQEAKICAgdm9pZCBHZXRUYXJnZXRzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdGFyZ2V0cykgY29uc3Q7CiAgIHZvaWQgQXBwZW5kVGFyZ2V0cyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIHRhcmdldHMpCiAgIHsKLSAgICBjbUFwcGVuZCh0aGlzLT5UYXJnZXRzLCB0YXJnZXRzKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPlRhcmdldHMsIHRhcmdldHMpOwogICB9CiAgIHZvaWQgU2V0RXhwb3J0U2V0KGNtRXhwb3J0U2V0Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydENvbW1hbmQuY3h4IGIvU291cmNlL2NtRXhwb3J0Q29tbWFuZC5jeHgKaW5kZXggMmE2YmY1ZC4uMzUyZWFmMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0Q29tbWFuZC5jeHgKQEAgLTYsMTEgKzYsMTIgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKLQotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQXJndW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtRXhwb3J0QnVpbGRBbmRyb2lkTUtHZW5lcmF0b3IuaCIKQEAgLTIyLDYgKzIzLDcgQEAKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbVRhcmdldC5oIgogCkBAIC0xNDQsNyArMTQ2LDcgQEAKICAgICB9CiAgICAgZXhwb3J0U2V0ID0gJml0LT5zZWNvbmQ7CiAgIH0gZWxzZSBpZiAoIWFyZ3VtZW50cy5UYXJnZXRzLmVtcHR5KCkgfHwKLSAgICAgICAgICAgICBjbUNvbnRhaW5zKGtleXdvcmRzTWlzc2luZ1ZhbHVlLCAiVEFSR0VUUyIpKSB7CisgICAgICAgICAgICAgY206OmNvbnRhaW5zKGtleXdvcmRzTWlzc2luZ1ZhbHVlLCAiVEFSR0VUUyIpKSB7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY3VycmVudFRhcmdldCA6IGFyZ3VtZW50cy5UYXJnZXRzKSB7CiAgICAgICBpZiAobWYuSXNBbGlhcyhjdXJyZW50VGFyZ2V0KSkgewogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKQEAgLTE4MSwxMiArMTgzLDM0IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKKyAgLy8gaWYgY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGUgZmlsZQorICAvLyBhbmQgQVBQRU5EIGlzIG5vdCBzcGVjaWZpZWQsIGlmIENNUDAxMDMgaXMgT0xEIGlnbm9yZSBwcmV2aW91cyBkZWZpbml0aW9uCisgIC8vIGVsc2UgcmFpc2UgYW4gZXJyb3IKKyAgaWYgKGdnLT5HZXRFeHBvcnRlZFRhcmdldHNGaWxlKGZuYW1lKSAhPSBudWxscHRyKSB7CisgICAgc3dpdGNoIChtZi5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwMykpIHsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6V0FSTjoKKyAgICAgICAgbWYuSXNzdWVNZXNzYWdlKAorICAgICAgICAgIE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywKKyAgICAgICAgICBjbVN0ckNhdChjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAxMDMpLCAnXG4nLAorICAgICAgICAgICAgICAgICAgICJleHBvcnQoKSBjb21tYW5kIGFscmVhZHkgc3BlY2lmaWVkIGZvciB0aGUgZmlsZVxuICAiLAorICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5GaWxlbmFtZSwgIlxuRGlkIHlvdSBtaXNzICdBUFBFTkQnIGtleXdvcmQ/IikpOworICAgICAgICBDTV9GQUxMVEhST1VHSDsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiY29tbWFuZCBhbHJlYWR5IHNwZWNpZmllZCBmb3IgdGhlIGZpbGVcbiAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5GaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbkRpZCB5b3UgbWlzcyAnQVBQRU5EJyBrZXl3b3JkPyIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCiAgIC8vIFNldHVwIGV4cG9ydCBmaWxlIGdlbmVyYXRpb24uCi0gIGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBlYmZnID0gbnVsbHB0cjsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yPiBlYmZnID0gbnVsbHB0cjsKICAgaWYgKGFuZHJvaWQpIHsKLSAgICBlYmZnID0gbmV3IGNtRXhwb3J0QnVpbGRBbmRyb2lkTUtHZW5lcmF0b3I7CisgICAgZWJmZyA9IGNtOjptYWtlX3VuaXF1ZTxjbUV4cG9ydEJ1aWxkQW5kcm9pZE1LR2VuZXJhdG9yPigpOwogICB9IGVsc2UgewotICAgIGViZmcgPSBuZXcgY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3I7CisgICAgZWJmZyA9IGNtOjptYWtlX3VuaXF1ZTxjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcj4oKTsKICAgfQogICBlYmZnLT5TZXRFeHBvcnRGaWxlKGZuYW1lLmNfc3RyKCkpOwogICBlYmZnLT5TZXROYW1lc3BhY2UoYXJndW1lbnRzLk5hbWVzcGFjZSk7CkBAIC0xOTYsMjMgKzIyMCwyMSBAQAogICB9IGVsc2UgewogICAgIGViZmctPlNldFRhcmdldHModGFyZ2V0cyk7CiAgIH0KLSAgbWYuQWRkRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKGViZmcpOwogICBlYmZnLT5TZXRFeHBvcnRPbGQoYXJndW1lbnRzLkV4cG9ydE9sZCk7CiAKICAgLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIGV4cG9ydGVkLgotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlndXJhdGlvblR5cGVzOwotICBtZi5HZXRDb25maWd1cmF0aW9ucyhjb25maWd1cmF0aW9uVHlwZXMpOwotICBpZiAoY29uZmlndXJhdGlvblR5cGVzLmVtcHR5KCkpIHsKLSAgICBjb25maWd1cmF0aW9uVHlwZXMuZW1wbGFjZV9iYWNrKCk7Ci0gIH0KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3VyYXRpb25UeXBlcyA9CisgICAgbWYuR2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOworCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGN0IDogY29uZmlndXJhdGlvblR5cGVzKSB7CiAgICAgZWJmZy0+QWRkQ29uZmlndXJhdGlvbihjdCk7CiAgIH0KICAgaWYgKGV4cG9ydFNldCAhPSBudWxscHRyKSB7Ci0gICAgZ2ctPkFkZEJ1aWxkRXhwb3J0RXhwb3J0U2V0KGViZmcpOworICAgIGdnLT5BZGRCdWlsZEV4cG9ydEV4cG9ydFNldChlYmZnLmdldCgpKTsKICAgfSBlbHNlIHsKLSAgICBnZy0+QWRkQnVpbGRFeHBvcnRTZXQoZWJmZyk7CisgICAgZ2ctPkFkZEJ1aWxkRXhwb3J0U2V0KGViZmcuZ2V0KCkpOwogICB9CisgIG1mLkFkZEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcihzdGQ6Om1vdmUoZWJmZykpOwogCiAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXhwb3J0RmlsZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmN4eAppbmRleCBhZWVmNjAyLi41OGFhMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmN4eApAQCAtMTQsMTIgKzE0LDE0IEBACiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTGlua0l0ZW0uaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eU1hcC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtNjAsOSArNjIsOSBAQAogICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTGFzdEV4dGVuc2lvbih0aGlzLT5NYWluSW1wb3J0RmlsZSk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtRXhwb3J0RmlsZUdlbmVyYXRvcjo6R2V0TWFpbkV4cG9ydEZpbGVOYW1lKCkgY29uc3QKK2NvbnN0IHN0ZDo6c3RyaW5nJiBjbUV4cG9ydEZpbGVHZW5lcmF0b3I6OkdldE1haW5FeHBvcnRGaWxlTmFtZSgpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5NYWluSW1wb3J0RmlsZS5jX3N0cigpOworICByZXR1cm4gdGhpcy0+TWFpbkltcG9ydEZpbGU7CiB9CiAKIGJvb2wgY21FeHBvcnRGaWxlR2VuZXJhdG9yOjpHZW5lcmF0ZUltcG9ydEZpbGUoKQpAQCAtMTI0LDkgKzEyNiw5IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wTmFtZSwgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKICAgSW1wb3J0UHJvcGVydHlNYXAmIHByb3BlcnRpZXMpCiB7Ci0gIGNvbnN0IGNoYXIqIGlucHV0ID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CisgIGNtUHJvcCBpbnB1dCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogICBpZiAoaW5wdXQpIHsKLSAgICBwcm9wZXJ0aWVzW3Byb3BOYW1lXSA9IGlucHV0OworICAgIHByb3BlcnRpZXNbcHJvcE5hbWVdID0gKmlucHV0OwogICB9CiB9CiAKQEAgLTEzNiwxNiArMTM4LDE2IEBACiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2Vzc0NvbnRleHQgcHJlcHJvY2Vzc1J1bGUsCiAgIEltcG9ydFByb3BlcnR5TWFwJiBwcm9wZXJ0aWVzLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG1pc3NpbmdUYXJnZXRzKQogewotICBjb25zdCBjaGFyKiBpbnB1dCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOworICBjbVByb3AgaW5wdXQgPSB0YXJnZXQtPkdldFByb3BlcnR5KHByb3BOYW1lKTsKICAgaWYgKGlucHV0KSB7Ci0gICAgaWYgKCEqaW5wdXQpIHsKKyAgICBpZiAoaW5wdXQtPmVtcHR5KCkpIHsKICAgICAgIC8vIFNldCB0byBlbXB0eQogICAgICAgcHJvcGVydGllc1tvdXRwdXROYW1lXS5jbGVhcigpOwogICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5nIHByZXBybyA9Ci0gICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlByZXByb2Nlc3MoaW5wdXQsIHByZXByb2Nlc3NSdWxlKTsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcygqaW5wdXQsIHByZXByb2Nlc3NSdWxlKTsKICAgICBpZiAoIXByZXByby5lbXB0eSgpKSB7CiAgICAgICB0aGlzLT5SZXNvbHZlVGFyZ2V0c0luR2VuZXJhdG9yRXhwcmVzc2lvbnMocHJlcHJvLCB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ1RhcmdldHMpOwpAQCAtMTczLDEwICsxNzUsMTAgQEAKICAgaWYgKCF0YXJnZXQtPklzTGlua2FibGUoKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBjb25zdCBjaGFyKiBpbnB1dCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyIpOworICBjbVByb3AgaW5wdXQgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiKTsKICAgaWYgKGlucHV0KSB7CiAgICAgc3RkOjpzdHJpbmcgcHJlcHJvID0KLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcyhpbnB1dCwgcHJlcHJvY2Vzc1J1bGUpOworICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKCppbnB1dCwgcHJlcHJvY2Vzc1J1bGUpOwogICAgIGlmICghcHJlcHJvLmVtcHR5KCkpIHsKICAgICAgIHRoaXMtPlJlc29sdmVUYXJnZXRzSW5HZW5lcmF0b3JFeHByZXNzaW9ucygKICAgICAgICAgcHJlcHJvLCB0YXJnZXQsIG1pc3NpbmdUYXJnZXRzLCBSZXBsYWNlRnJlZVRhcmdldHMpOwpAQCAtMjc1LDggKzI3Nyw3IEBACiAgICAgICAgICAgICAgICAgPDwgIlwiXG5ob3dldmVyIGl0IGlzIGFsc28gIgogICAgICAgICAgICAgICAgICAgICJhIHN1YmRpcmVjdG9yeSBvZiB0aGUgIgogICAgICAgICAgICAgICAgIDw8IChpbkJpbmFyeSA/ICJidWlsZCIgOiAic291cmNlIikgPDwgIiB0cmVlOlxuICAgIFwiIgotICAgICAgICAgICAgICAgIDw8IChpbkJpbmFyeSA/IHRvcEJpbmFyeURpciA6IHRvcFNvdXJjZURpcikgPDwgIlwiIgotICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgICAgICA8PCAoaW5CaW5hcnkgPyB0b3BCaW5hcnlEaXIgOiB0b3BTb3VyY2VEaXIpIDw8ICJcIlxuIjsKICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Jc3N1ZU1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLCBzLnN0cigpKTsKICAgICAgICAgICAgICAgQ01fRkFMTFRIUk9VR0g7CkBAIC0zNDEsMTkgKzM0MiwxOSBAQAogICBhc3NlcnQocHJlcHJvY2Vzc1J1bGUgPT0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJbnN0YWxsSW50ZXJmYWNlKTsKIAogICBjb25zdCBjaGFyKiBwcm9wTmFtZSA9ICJJTlRFUkZBQ0VfU09VUkNFUyI7Ci0gIGNvbnN0IGNoYXIqIGlucHV0ID0gZ3QtPkdldFByb3BlcnR5KHByb3BOYW1lKTsKKyAgY21Qcm9wIGlucHV0ID0gZ3QtPkdldFByb3BlcnR5KHByb3BOYW1lKTsKIAogICBpZiAoIWlucHV0KSB7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgaWYgKCEqaW5wdXQpIHsKKyAgaWYgKGlucHV0LT5lbXB0eSgpKSB7CiAgICAgcHJvcGVydGllc1twcm9wTmFtZV0uY2xlYXIoKTsKICAgICByZXR1cm47CiAgIH0KIAogICBzdGQ6OnN0cmluZyBwcmVwcm8gPQotICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcyhpbnB1dCwgcHJlcHJvY2Vzc1J1bGUsIHRydWUpOworICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UHJlcHJvY2VzcygqaW5wdXQsIHByZXByb2Nlc3NSdWxlLCB0cnVlKTsKICAgaWYgKCFwcmVwcm8uZW1wdHkoKSkgewogICAgIHRoaXMtPlJlc29sdmVUYXJnZXRzSW5HZW5lcmF0b3JFeHByZXNzaW9ucyhwcmVwcm8sIGd0LCBtaXNzaW5nVGFyZ2V0cyk7CiAKQEAgLTM3Miw3ICszNzMsNyBAQAogICBhc3NlcnQocHJlcHJvY2Vzc1J1bGUgPT0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJbnN0YWxsSW50ZXJmYWNlKTsKIAogICBjb25zdCBjaGFyKiBwcm9wTmFtZSA9ICJJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyI7Ci0gIGNvbnN0IGNoYXIqIGlucHV0ID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CisgIGNtUHJvcCBpbnB1dCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZTsKIApAQCAtMzk5LDcgKzQwMCw3IEBACiAgIGlmICghaW5wdXQgJiYgZXhwb3J0RGlycy5lbXB0eSgpKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIGlmICgoaW5wdXQgJiYgISppbnB1dCkgJiYgZXhwb3J0RGlycy5lbXB0eSgpKSB7CisgIGlmICgoaW5wdXQgJiYgaW5wdXQtPmVtcHR5KCkpICYmIGV4cG9ydERpcnMuZW1wdHkoKSkgewogICAgIC8vIFNldCB0byBlbXB0eQogICAgIHByb3BlcnRpZXNbcHJvcE5hbWVdLmNsZWFyKCk7CiAgICAgcmV0dXJuOwpAQCAtNDA3LDcgKzQwOCw3IEBACiAKICAgcHJlZml4SXRlbXMoZXhwb3J0RGlycyk7CiAKLSAgc3RkOjpzdHJpbmcgaW5jbHVkZXMgPSAoaW5wdXQgPyBpbnB1dCA6ICIiKTsKKyAgc3RkOjpzdHJpbmcgaW5jbHVkZXMgPSAoaW5wdXQgPyAqaW5wdXQgOiAiIik7CiAgIGNvbnN0IGNoYXIqIHNlcCA9IGlucHV0ID8gIjsiIDogIiI7CiAgIGluY2x1ZGVzICs9IHNlcCArIGV4cG9ydERpcnM7CiAgIHN0ZDo6c3RyaW5nIHByZXBybyA9CkBAIC00MzAsMTkgKzQzMSwxOSBAQAogICBhc3NlcnQocHJlcHJvY2Vzc1J1bGUgPT0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJbnN0YWxsSW50ZXJmYWNlKTsKIAogICBjb25zdCBjaGFyKiBwcm9wTmFtZSA9ICJJTlRFUkZBQ0VfTElOS19ERVBFTkRTIjsKLSAgY29uc3QgY2hhciogaW5wdXQgPSBndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOworICBjbVByb3AgaW5wdXQgPSBndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogCiAgIGlmICghaW5wdXQpIHsKICAgICByZXR1cm47CiAgIH0KIAotICBpZiAoISppbnB1dCkgeworICBpZiAoaW5wdXQtPmVtcHR5KCkpIHsKICAgICBwcm9wZXJ0aWVzW3Byb3BOYW1lXS5jbGVhcigpOwogICAgIHJldHVybjsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIHByZXBybyA9Ci0gICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKGlucHV0LCBwcmVwcm9jZXNzUnVsZSwgdHJ1ZSk7CisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKCppbnB1dCwgcHJlcHJvY2Vzc1J1bGUsIHRydWUpOwogICBpZiAoIXByZXByby5lbXB0eSgpKSB7CiAgICAgdGhpcy0+UmVzb2x2ZVRhcmdldHNJbkdlbmVyYXRvckV4cHJlc3Npb25zKHByZXBybywgZ3QsIG1pc3NpbmdUYXJnZXRzKTsKIApAQCAtNDYxLDE5ICs0NjIsMTkgQEAKICAgYXNzZXJ0KHByZXByb2Nlc3NSdWxlID09IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6SW5zdGFsbEludGVyZmFjZSk7CiAKICAgY29uc3QgY2hhciogcHJvcE5hbWUgPSAiSU5URVJGQUNFX0xJTktfRElSRUNUT1JJRVMiOwotICBjb25zdCBjaGFyKiBpbnB1dCA9IGd0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CisgIGNtUHJvcCBpbnB1dCA9IGd0LT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CiAKICAgaWYgKCFpbnB1dCkgewogICAgIHJldHVybjsKICAgfQogCi0gIGlmICghKmlucHV0KSB7CisgIGlmIChpbnB1dC0+ZW1wdHkoKSkgewogICAgIHByb3BlcnRpZXNbcHJvcE5hbWVdLmNsZWFyKCk7CiAgICAgcmV0dXJuOwogICB9CiAKICAgc3RkOjpzdHJpbmcgcHJlcHJvID0KLSAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlByZXByb2Nlc3MoaW5wdXQsIHByZXByb2Nlc3NSdWxlLCB0cnVlKTsKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlByZXByb2Nlc3MoKmlucHV0LCBwcmVwcm9jZXNzUnVsZSwgdHJ1ZSk7CiAgIGlmICghcHJlcHJvLmVtcHR5KCkpIHsKICAgICB0aGlzLT5SZXNvbHZlVGFyZ2V0c0luR2VuZXJhdG9yRXhwcmVzc2lvbnMocHJlcHJvLCBndCwgbWlzc2luZ1RhcmdldHMpOwogCkBAIC00OTYsMTEgKzQ5NywxMSBAQAogdm9pZCBnZXRQcm9wZXJ0eUNvbnRlbnRzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaWZhY2VQcm9wZXJ0aWVzKQogewotICBjb25zdCBjaGFyKiBwID0gdGd0LT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgY21Qcm9wIHAgPSB0Z3QtPkdldFByb3BlcnR5KHByb3ApOwogICBpZiAoIXApIHsKICAgICByZXR1cm47CiAgIH0KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnRlbnQgPSBjbUV4cGFuZGVkTGlzdChwKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnRlbnQgPSBjbUV4cGFuZGVkTGlzdCgqcCk7CiAgIGlmYWNlUHJvcGVydGllcy5pbnNlcnQoY29udGVudC5iZWdpbigpLCBjb250ZW50LmVuZCgpKTsKIH0KIApAQCAtNTY2LDggKzU2Nyw5IEBACiAgIGlmIChndGFyZ2V0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgIGdldENvbXBhdGlibGVJbnRlcmZhY2VQcm9wZXJ0aWVzKGd0YXJnZXQsIGlmYWNlUHJvcGVydGllcywgIiIpOwogCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzOwotICAgIGd0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlnTmFtZXMpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdOYW1lcyA9CisgICAgICBndGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgICAgIGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjbiA6IGNvbmZpZ05hbWVzKSB7CiAgICAgICBnZXRDb21wYXRpYmxlSW50ZXJmYWNlUHJvcGVydGllcyhndGFyZ2V0LCBpZmFjZVByb3BlcnRpZXMsIGNuKTsKQEAgLTY0MCw2ICs2NDIsOSBAQAogICBzdGQ6OnN0cmluZyBzZXA7CiAgIGlucHV0LmNsZWFyKCk7CiAgIGZvciAoc3RkOjpzdHJpbmcmIGxpIDogcGFydHMpIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGxpLCBDTUFLRV9ESVJFQ1RPUllfSURfU0VQKSkgeworICAgICAgY29udGludWU7CisgICAgfQogICAgIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQobGkpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICB0aGlzLT5BZGRUYXJnZXROYW1lc3BhY2UobGksIHRhcmdldCwgbWlzc2luZ1RhcmdldHMpOwogICAgIH0gZWxzZSB7CkBAIC03NTgsMTMgKzc2MywxMiBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHByb3BDb250ZW50OworICBjbVByb3AgcHJvcENvbnRlbnQ7CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHByb3Bfc3VmZml4ZWQgPQorICBpZiAoY21Qcm9wIHByb3Bfc3VmZml4ZWQgPQogICAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiICsgc3VmZml4KSkgewogICAgIHByb3BDb250ZW50ID0gcHJvcF9zdWZmaXhlZDsKLSAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBwcm9wID0KLSAgICAgICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfSU5URVJGQUNFX0xJQlJBUklFUyIpKSB7CisgIH0gZWxzZSBpZiAoY21Qcm9wIHByb3AgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiKSkgewogICAgIHByb3BDb250ZW50ID0gcHJvcDsKICAgfSBlbHNlIHsKICAgICByZXR1cm47CkBAIC03ODYsMTMgKzc5MCwxMyBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGlmICghKnByb3BDb250ZW50KSB7CisgIGlmIChwcm9wQ29udGVudC0+ZW1wdHkoKSkgewogICAgIHByb3BlcnRpZXNbIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xJQlJBUklFUyIgKyBzdWZmaXhdLmNsZWFyKCk7CiAgICAgcmV0dXJuOwogICB9CiAKICAgc3RkOjpzdHJpbmcgcHJlcHJvID0KLSAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlByZXByb2Nlc3MocHJvcENvbnRlbnQsIHByZXByb2Nlc3NSdWxlKTsKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlByZXByb2Nlc3MoKnByb3BDb250ZW50LCBwcmVwcm9jZXNzUnVsZSk7CiAgIGlmICghcHJlcHJvLmVtcHR5KCkpIHsKICAgICB0aGlzLT5SZXNvbHZlVGFyZ2V0c0luR2VuZXJhdG9yRXhwcmVzc2lvbnMocHJlcHJvLCB0YXJnZXQsIG1pc3NpbmdUYXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlRnJlZVRhcmdldHMpOwpAQCAtODUyLDggKzg1Niw4IEBACiAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6TWFuYWdlZFR5cGU6Ok5hdGl2ZSkgewogICAgIHN0ZDo6c3RyaW5nIHByb3AgPSBjbVN0ckNhdCgiSU1QT1JURURfQ09NTU9OX0xBTkdVQUdFX1JVTlRJTUUiLCBzdWZmaXgpOwogICAgIHN0ZDo6c3RyaW5nIHByb3B2YWw7Ci0gICAgaWYgKGF1dG8qIHAgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJDT01NT05fTEFOR1VBR0VfUlVOVElNRSIpKSB7Ci0gICAgICBwcm9wdmFsID0gcDsKKyAgICBpZiAoY21Qcm9wIHAgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJDT01NT05fTEFOR1VBR0VfUlVOVElNRSIpKSB7CisgICAgICBwcm9wdmFsID0gKnA7CiAgICAgfSBlbHNlIGlmICh0YXJnZXQtPklzQ1NoYXJwT25seSgpKSB7CiAgICAgICAvLyBDIyBwcm9qZWN0cyBkbyBub3QgaGF2ZSB0aGUgL2NsciBmbGFnLCBzbyB3ZSBzZXQgdGhlIHByb3BlcnR5CiAgICAgICAvLyBoZXJlIHRvIG1hcmsgdGhlIHRhcmdldCBhcyAob25seSkgbWFuYWdlZCAoaS5lLiBubyAubGliIGZpbGUKQEAgLTkyMSwxMiArOTI1LDE0IEBACiAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogCiAgIC8vIElzb2xhdGUgdGhlIGZpbGUgcG9saWN5IGxldmVsLgotICAvLyBXZSB1c2UgMi42IGhlcmUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB2ZXJzaW9uIGJlY2F1c2UgbmV3ZXIKLSAgLy8gdmVyc2lvbnMgb2YgQ01ha2Ugc2hvdWxkIGJlIGFibGUgdG8gZXhwb3J0IGZpbGVzIGltcG9ydGVkIGJ5IDIuNgotICAvLyB1bnRpbCB0aGUgaW1wb3J0IGZvcm1hdCBjaGFuZ2VzLgorICAvLyBTdXBwb3J0IENNYWtlIHZlcnNpb25zIGFzIGZhciBiYWNrIGFzIDIuNiBidXQgYWxzbyBzdXBwb3J0IHVzaW5nIE5FVworICAvLyBwb2xpY3kgc2V0dGluZ3MgZm9yIHVwIHRvIENNYWtlIDMuMTcgKHRoaXMgdXBwZXIgbGltaXQgbWF5IGJlIHJldmlld2VkCisgIC8vIGFuZCBpbmNyZWFzZWQgZnJvbSB0aW1lIHRvIHRpbWUpLiBUaGlzIHJlZHVjZXMgdGhlIG9wcG9ydHVuaXR5IGZvciBDTWFrZQorICAvLyB3YXJuaW5ncyB3aGVuIGFuIG9sZGVyIGV4cG9ydCBmaWxlIGlzIGxhdGVyIHVzZWQgd2l0aCBuZXdlciBDTWFrZQorICAvLyB2ZXJzaW9ucy4KICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICBvcyA8PCAiY21ha2VfcG9saWN5KFBVU0gpXG4iCi0gICAgIDw8ICJjbWFrZV9wb2xpY3koVkVSU0lPTiAyLjYpXG4iOworICAgICA8PCAiY21ha2VfcG9saWN5KFZFUlNJT04gMi42Li4uMy4xNylcbiI7CiAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogfQogCkBAIC0xMDYyLDYgKzEwNjgsMTIgQEAKICAgaWYgKHRhcmdldC0+SXNDRkJ1bmRsZU9uQXBwbGUoKSkgewogICAgIG9zIDw8ICJzZXRfcHJvcGVydHkoVEFSR0VUICIgPDwgdGFyZ2V0TmFtZSA8PCAiIFBST1BFUlRZIEJVTkRMRSAxKVxuIjsKICAgfQorCisgIC8vIGdlbmVyYXRlIERFUFJFQ0FUSU9OCisgIGlmICh0YXJnZXQtPklzRGVwcmVjYXRlZCgpKSB7CisgICAgb3MgPDwgInNldF9wcm9wZXJ0eShUQVJHRVQgIiA8PCB0YXJnZXROYW1lIDw8ICIgUFJPUEVSVFkgREVQUkVDQVRJT04gIgorICAgICAgIDw8IGNtRXhwb3J0RmlsZUdlbmVyYXRvckVzY2FwZSh0YXJnZXQtPkdldERlcHJlY2F0aW9uKCkpIDw8ICIpXG4iOworICB9CiAgIG9zIDw8ICJcbiI7CiB9CiAKQEAgLTExMDYsNyArMTExOCw3IEBACiAgICAgcmV0dXJuOwogICB9CiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KLSAgb3MgPDwgIiMgTWFrZSBzdXJlIHRoZSB0YXJnZXRzIHdoaWNoIGhhdmUgYmVlbiBleHBvcnRlZCBpbiBzb21lIG90aGVyIFxuIgorICBvcyA8PCAiIyBNYWtlIHN1cmUgdGhlIHRhcmdldHMgd2hpY2ggaGF2ZSBiZWVuIGV4cG9ydGVkIGluIHNvbWUgb3RoZXJcbiIKICAgICAgICAgIiMgZXhwb3J0IHNldCBleGlzdC5cbiIKICAgICAgICAgInVuc2V0KCR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X05PVF9GT1VORF9NRVNTQUdFX3RhcmdldHMpXG4iCiAgICAgICAgICJmb3JlYWNoKF90YXJnZXQgIjsKQEAgLTEyMDUsOSArMTIxNyw5IEBACiAgIHN0ZDo6c3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CiAgIGF1dG8mIHRhcmdldFByb3BlcnRpZXMgPSBndGUtPlRhcmdldC0+R2V0UHJvcGVydGllcygpOwotICBpZiAoY29uc3QgY2hhciogZXhwb3J0UHJvcGVydGllcyA9CisgIGlmIChjbVByb3AgZXhwb3J0UHJvcGVydGllcyA9CiAgICAgICAgIHRhcmdldFByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZSgiRVhQT1JUX1BST1BFUlRJRVMiKSkgewotICAgIGZvciAoYXV0byYgcHJvcCA6IGNtRXhwYW5kZWRMaXN0KGV4cG9ydFByb3BlcnRpZXMpKSB7CisgICAgZm9yIChhdXRvJiBwcm9wIDogY21FeHBhbmRlZExpc3QoKmV4cG9ydFByb3BlcnRpZXMpKSB7CiAgICAgICAvKiBCbGFjayBsaXN0IHJlc2VydmVkIHByb3BlcnRpZXMgKi8KICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgocHJvcCwgIklNUE9SVEVEXyIpIHx8CiAgICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJJTlRFUkZBQ0VfIikpIHsKQEAgLTEyMTgsMTUgKzEyMzAsMTUgQEAKICAgICAgICAgZXJyb3JNZXNzYWdlID0gZS5zdHIoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgICAgYXV0byBwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0UHJvcGVydGllcy5HZXRQcm9wZXJ0eVZhbHVlKHByb3ApOworICAgICAgY21Qcm9wIHByb3BlcnR5VmFsdWUgPSB0YXJnZXRQcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA9PSBudWxscHRyKSB7CiAgICAgICAgIC8vIEFza2VkIHRvIGV4cG9ydCBhIHByb3BlcnR5IHRoYXQgaXNuJ3QgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0LiBEbyBub3QKICAgICAgICAgLy8gY29uc2lkZXIgdGhpcyBhbiBlcnJvciwgdGhlcmUncyBqdXN0IG5vdGhpbmcgdG8gZXhwb3J0LgogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIHN0ZDo6c3RyaW5nIGV2YWx1YXRlZFZhbHVlID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKAotICAgICAgICBwcm9wZXJ0eVZhbHVlLCBjbUdlbmVyYXRvckV4cHJlc3Npb246OlN0cmlwQWxsR2VuZXJhdG9yRXhwcmVzc2lvbnMpOwotICAgICAgaWYgKGV2YWx1YXRlZFZhbHVlICE9IHByb3BlcnR5VmFsdWUpIHsKKyAgICAgICAgKnByb3BlcnR5VmFsdWUsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6U3RyaXBBbGxHZW5lcmF0b3JFeHByZXNzaW9ucyk7CisgICAgICBpZiAoZXZhbHVhdGVkVmFsdWUgIT0gKnByb3BlcnR5VmFsdWUpIHsKICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICAgIGUgPDwgIlRhcmdldCBcIiIgPDwgZ3RlLT5UYXJnZXQtPkdldE5hbWUoKSA8PCAiXCIgY29udGFpbnMgcHJvcGVydHkgXCIiCiAgICAgICAgICAgPDwgcHJvcCA8PCAiXCIgaW4gRVhQT1JUX1BST1BFUlRJRVMgYnV0IHRoaXMgcHJvcGVydHkgY29udGFpbnMgYSAiCkBAIC0xMjM0LDcgKzEyNDYsNyBAQAogICAgICAgICBlcnJvck1lc3NhZ2UgPSBlLnN0cigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAgICBwcm9wZXJ0aWVzW3Byb3BdID0gcHJvcGVydHlWYWx1ZTsKKyAgICAgIHByb3BlcnRpZXNbcHJvcF0gPSAqcHJvcGVydHlWYWx1ZTsKICAgICB9CiAgIH0KICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21FeHBvcnRGaWxlR2VuZXJhdG9yLmgKaW5kZXggMGQ2OTc3OS4uZTlkMGRhNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0RmlsZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUV4cG9ydEZpbGVHZW5lcmF0b3IuaApAQCAtNDYsNyArNDYsNyBAQAogCiAgIC8qKiBTZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZXhwb3J0IGZpbGUgdG8gZ2VuZXJhdGUuICAqLwogICB2b2lkIFNldEV4cG9ydEZpbGUoY29uc3QgY2hhciogbWFpbkZpbGUpOwotICBjb25zdCBjaGFyKiBHZXRNYWluRXhwb3J0RmlsZU5hbWUoKSBjb25zdDsKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIEdldE1haW5FeHBvcnRGaWxlTmFtZSgpIGNvbnN0OwogCiAgIC8qKiBTZXQgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBwbGFjZSBleHBvcnRlZCB0YXJnZXQgbmFtZXMuICAqLwogICB2b2lkIFNldE5hbWVzcGFjZShjb25zdCBzdGQ6OnN0cmluZyYgbnMpIHsgdGhpcy0+TmFtZXNwYWNlID0gbnM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydEluc3RhbGxBbmRyb2lkTUtHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtRXhwb3J0SW5zdGFsbEFuZHJvaWRNS0dlbmVyYXRvci5jeHgKaW5kZXggMmQ3MzJjMS4uODBmNzc2ZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwb3J0SW5zdGFsbEFuZHJvaWRNS0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0SW5zdGFsbEFuZHJvaWRNS0dlbmVyYXRvci5jeHgKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBpZiAodGUtPkFyY2hpdmVHZW5lcmF0b3IpIHsKICAgICAgIGRlc3QgPSB0ZS0+QXJjaGl2ZUdlbmVyYXRvci0+R2V0RGVzdGluYXRpb24oIiIpOwogICAgIH0KLSAgICB0ZS0+VGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJfX2Rlc3QiLCBkZXN0LmNfc3RyKCkpOworICAgIHRlLT5UYXJnZXQtPlRhcmdldC0+U2V0UHJvcGVydHkoIl9fZGVzdCIsIGRlc3QpOwogICB9CiB9CiAKQEAgLTY2LDcgKzY2LDcgQEAKICAgb3MgPDwgIkxPQ0FMX01PRFVMRSA6PSAiOwogICBvcyA8PCB0YXJnZXROYW1lIDw8ICJcbiI7CiAgIG9zIDw8ICJMT0NBTF9TUkNfRklMRVMgOj0gJChfSU1QT1JUX1BSRUZJWCkvIjsKLSAgb3MgPDwgdGFyZ2V0LT5UYXJnZXQtPkdldFByb3BlcnR5KCJfX2Rlc3QiKSA8PCAiLyI7CisgIG9zIDw8IHRhcmdldC0+VGFyZ2V0LT5HZXRTYWZlUHJvcGVydHkoIl9fZGVzdCIpIDw8ICIvIjsKICAgc3RkOjpzdHJpbmcgY29uZmlnOwogICBpZiAoIXRoaXMtPkNvbmZpZ3VyYXRpb25zLmVtcHR5KCkpIHsKICAgICBjb25maWcgPSB0aGlzLT5Db25maWd1cmF0aW9uc1swXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydEluc3RhbGxGaWxlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4cG9ydEluc3RhbGxGaWxlR2VuZXJhdG9yLmN4eAppbmRleCA2ZDI5Yzk5Li45ODdlYzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRJbnN0YWxsRmlsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0SW5zdGFsbEZpbGVHZW5lcmF0b3IuY3h4CkBAIC0yNTgsMTUgKzI1OCw3IEBACiAKIHZvaWQgY21FeHBvcnRJbnN0YWxsRmlsZUdlbmVyYXRvcjo6UmVwbGFjZUluc3RhbGxQcmVmaXgoc3RkOjpzdHJpbmcmIGlucHV0KQogewotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IDA7Ci0gIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgbGFzdFBvcyA9IHBvczsKLQotICB3aGlsZSAoKHBvcyA9IGlucHV0LmZpbmQoIiQ8SU5TVEFMTF9QUkVGSVg+IiwgbGFzdFBvcykpICE9Ci0gICAgICAgICBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kUG9zID0gcG9zICsgc2l6ZW9mKCIkPElOU1RBTExfUFJFRklYPiIpIC0gMTsKLSAgICBpbnB1dC5yZXBsYWNlKHBvcywgZW5kUG9zIC0gcG9zLCAiJHtfSU1QT1JUX1BSRUZJWH0iKTsKLSAgICBsYXN0UG9zID0gZW5kUG9zOwotICB9CisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UmVwbGFjZUluc3RhbGxQcmVmaXgoaW5wdXQsICIke19JTVBPUlRfUFJFRklYfSIpOwogfQogCiBib29sIGNtRXhwb3J0SW5zdGFsbEZpbGVHZW5lcmF0b3I6OkdlbmVyYXRlSW1wb3J0RmlsZUNvbmZpZygKQEAgLTUyNSwxMyArNTE3LDE0IEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtRXhwb3J0SW5zdGFsbEZpbGVHZW5lcmF0b3I6Okluc3RhbGxOYW1lRGlyKAotICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgLypjb25maWcqLykKKyAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgc3RkOjpzdHJpbmcgaW5zdGFsbF9uYW1lX2RpcjsKIAogICBjbU1ha2VmaWxlKiBtZiA9IHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpOwogICBpZiAobWYtPklzT24oIkNNQUtFX1BMQVRGT1JNX0hBU19JTlNUQUxMTkFNRSIpKSB7Ci0gICAgaW5zdGFsbF9uYW1lX2RpciA9IHRhcmdldC0+R2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgpOworICAgIGluc3RhbGxfbmFtZV9kaXIgPQorICAgICAgdGFyZ2V0LT5HZXRJbnN0YWxsTmFtZURpckZvckluc3RhbGxUcmVlKGNvbmZpZywgIiR7X0lNUE9SVF9QUkVGSVh9Iik7CiAgIH0KIAogICByZXR1cm4gaW5zdGFsbF9uYW1lX2RpcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydExpYnJhcnlEZXBlbmRlbmNpZXNDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUV4cG9ydExpYnJhcnlEZXBlbmRlbmNpZXNDb21tYW5kLmN4eAppbmRleCA4OTA5M2U5Li43ZjMxZGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRMaWJyYXJ5RGVwZW5kZW5jaWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0TGlicmFyeURlcGVuZGVuY2llc0NvbW1hbmQuY3h4CkBAIC0xMiw3ICsxMiw5IEBACiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTIwLDYgKzIyLDggQEAKICNpbmNsdWRlICJjbVRhcmdldExpbmtMaWJyYXJ5VHlwZS5oIgogI2luY2x1ZGUgImNtYWtlLmgiCiAKK2NsYXNzIGNtTGlzdEZpbGVCYWNrdHJhY2U7CisKIHN0YXRpYyB2b2lkIEZpbmFsQWN0aW9uKGNtTWFrZWZpbGUmIG1ha2VmaWxlLCBzdGQ6OnN0cmluZyBjb25zdCYgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZCkKIHsKQEAgLTQ2LDExICs1MCwxMSBAQAogICAvLyB0aGUgcHJvamVjdC4KICAgY21ha2UqIGNtID0gbWFrZWZpbGUuR2V0Q01ha2VJbnN0YW5jZSgpOwogICBjbUdsb2JhbEdlbmVyYXRvciogZ2xvYmFsID0gY20tPkdldEdsb2JhbEdlbmVyYXRvcigpOwotICBjb25zdCBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4mIGxvY2FscyA9IGdsb2JhbC0+R2V0TWFrZWZpbGVzKCk7CisgIGNvbnN0IGF1dG8mIGxvY2FscyA9IGdsb2JhbC0+R2V0TWFrZWZpbGVzKCk7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gbGliRGVwc09sZDsKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBsaWJEZXBzTmV3OwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IGxpYlR5cGVzOwotICBmb3IgKGNtTWFrZWZpbGUqIGxvY2FsIDogbG9jYWxzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbG9jYWwgOiBsb2NhbHMpIHsKICAgICBmb3IgKGF1dG8gY29uc3QmIHRndCA6IGxvY2FsLT5HZXRUYXJnZXRzKCkpIHsKICAgICAgIC8vIEdldCB0aGUgY3VycmVudCB0YXJnZXQuCiAgICAgICBjbVRhcmdldCBjb25zdCYgdGFyZ2V0ID0gdGd0LnNlY29uZDsKQEAgLTkyLDggKzk2LDggQEAKICAgICAgICAgICAvLyBIYW5kbGUgc2ltcGxlIG91dHB1dCBuYW1lIGNoYW5nZXMuICBUaGlzIGNvbW1hbmQgaXMKICAgICAgICAgICAvLyBkZXByZWNhdGVkIHNvIHdlIGRvIG5vdCBzdXBwb3J0IGZ1bGwgdGFyZ2V0IG5hbWUKICAgICAgICAgICAvLyB0cmFuc2xhdGlvbiAod2hpY2ggcmVxdWlyZXMgcGVyLWNvbmZpZ3VyYXRpb24gaW5mbykuCi0gICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIG91dG5hbWUgPSBsaWJ0Z3QtPkdldFByb3BlcnR5KCJPVVRQVVRfTkFNRSIpKSB7Ci0gICAgICAgICAgICBsaWIgPSBvdXRuYW1lOworICAgICAgICAgIGlmIChjbVByb3Agb3V0bmFtZSA9IGxpYnRndC0+R2V0UHJvcGVydHkoIk9VVFBVVF9OQU1FIikpIHsKKyAgICAgICAgICAgIGxpYiA9ICpvdXRuYW1lOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICB2YWx1ZU9sZCArPSBsaWI7CkBAIC0xNTAsOSArMTU0LDkgQEAKIAogICBzdGQ6OnN0cmluZyBjb25zdCYgZmlsZW5hbWUgPSBhcmdzWzBdOwogICBib29sIGNvbnN0IGFwcGVuZCA9IGFyZ3Muc2l6ZSgpID4gMSAmJiBhcmdzWzFdID09ICJBUFBFTkQiOwotICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRGaW5hbEFjdGlvbigKLSAgICBbZmlsZW5hbWUsIGFwcGVuZF0oY21NYWtlZmlsZSYgbWFrZWZpbGUpIHsKLSAgICAgIEZpbmFsQWN0aW9uKG1ha2VmaWxlLCBmaWxlbmFtZSwgYXBwZW5kKTsKKyAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkR2VuZXJhdG9yQWN0aW9uKAorICAgIFtmaWxlbmFtZSwgYXBwZW5kXShjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYpIHsKKyAgICAgIEZpbmFsQWN0aW9uKCpsZy5HZXRNYWtlZmlsZSgpLCBmaWxlbmFtZSwgYXBwZW5kKTsKICAgICB9KTsKIAogICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4cG9ydFRyeUNvbXBpbGVGaWxlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4cG9ydFRyeUNvbXBpbGVGaWxlR2VuZXJhdG9yLmN4eAppbmRleCBmYWZhNTFiLi5jNmI2MTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHBvcnRUcnlDb21waWxlRmlsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXhwb3J0VHJ5Q29tcGlsZUZpbGVHZW5lcmF0b3IuY3h4CkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVRhcmdldC5oIgpAQCAtNTgsNyArNTksNyBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcE5hbWUsIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSwgc3RkOjpzZXQ8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqPiYgZW1pdHRlZCkKIHsKLSAgY29uc3QgY2hhciogcHJvcCA9IHRndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOworICBjbVByb3AgcHJvcCA9IHRndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogICBpZiAoIXByb3ApIHsKICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKICAgfQpAQCAtNjcsMTAgKzY4LDExIEBACiAKICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciBkYWdDaGVja2VyKHRndCwgcHJvcE5hbWUsIG51bGxwdHIsIG51bGxwdHIpOwogCi0gIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0gZ2UuUGFyc2UocHJvcCk7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0gZ2UuUGFyc2UoKnByb3ApOwogCiAgIGNtVGFyZ2V0IGR1bW15SGVhZCgidHJ5X2NvbXBpbGVfZHVtbXlfZXhlIiwgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFLAotICAgICAgICAgICAgICAgICAgICAgY21UYXJnZXQ6OlZpc2liaWxpdHlOb3JtYWwsIHRndC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgIGNtVGFyZ2V0OjpWaXNpYmlsaXR5Tm9ybWFsLCB0Z3QtPlRhcmdldC0+R2V0TWFrZWZpbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgIGNtVGFyZ2V0OjpQZXJDb25maWc6Olllcyk7CiAKICAgY21HZW5lcmF0b3JUYXJnZXQgZ0R1bW15SGVhZCgmZHVtbXlIZWFkLCB0Z3QtPkdldExvY2FsR2VuZXJhdG9yKCkpOwogCkBAIC05NCwxMSArOTYsMTEgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eUtleXMoKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcCA6IHByb3BzKSB7CiAKLSAgICBwcm9wZXJ0aWVzW3BdID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwKTsKKyAgICBwcm9wZXJ0aWVzW3BdID0gKnRhcmdldC0+R2V0UHJvcGVydHkocCk7CiAKLSAgICBpZiAocC5maW5kKCJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiKSA9PSAwIHx8Ci0gICAgICAgIHAuZmluZCgiSU1QT1JURURfTElOS19ERVBFTkRFTlRfTElCUkFSSUVTIikgPT0gMCB8fAotICAgICAgICBwLmZpbmQoIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyIpID09IDApIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KHAsICJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiKSB8fAorICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgocCwgIklNUE9SVEVEX0xJTktfREVQRU5ERU5UX0xJQlJBUklFUyIpIHx8CisgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChwLCAiSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGV2YWxSZXN1bHQgPQogICAgICAgICB0aGlzLT5GaW5kVGFyZ2V0cyhwLCB0YXJnZXQsIHN0ZDo6c3RyaW5nKCksIGVtaXR0ZWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHByUGFyc2VySGVscGVyLmggYi9Tb3VyY2UvY21FeHByUGFyc2VySGVscGVyLmgKaW5kZXggZWFmNWRjNy4uNzE3YWNkYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtRXhwclBhcnNlckhlbHBlci5oCisrKyBiL1NvdXJjZS9jbUV4cHJQYXJzZXJIZWxwZXIuaApAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21fa3dpbWwuaCIKKyNpbmNsdWRlIDxjbTNwL2t3aW1sL2ludC5oPgogCiBjbGFzcyBjbUV4cHJQYXJzZXJIZWxwZXIKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvci5oCmluZGV4IGE0NzJhMDYuLjJiOGQ1MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IuaApAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIApAQCAtNzgsNyArNzksNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0U3VwcG9ydGVkR2xvYmFsR2VuZXJhdG9ycygpIGNvbnN0OwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQWxpYXNlczsKIAotICB2aXJ0dWFsIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IqCisgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3I+CiAgIENyZWF0ZUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yKCkgY29uc3QgPSAwOwogCiAgIHZvaWQgQWRkU3VwcG9ydGVkR2xvYmFsR2VuZXJhdG9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlKTsKQEAgLTEwMCwxMCArMTAxLDEwIEBACiAgIHsKICAgfQogCi0gIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IqIENyZWF0ZUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yKCkKLSAgICBjb25zdCBvdmVycmlkZQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcj4KKyAgQ3JlYXRlRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IoKSBjb25zdCBvdmVycmlkZQogICB7Ci0gICAgVCogcCA9IG5ldyBUOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yPiBwKG5ldyBUKTsKICAgICBwLT5TZXROYW1lKEdldE5hbWUoKSk7CiAgICAgcmV0dXJuIHA7CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dHJhQ29kZUJsb2Nrc0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHRyYUNvZGVCbG9ja3NHZW5lcmF0b3IuY3h4CmluZGV4IDVhNWQ5NTkuLjUxMTE2OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhQ29kZUJsb2Nrc0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXh0cmFDb2RlQmxvY2tzR2VuZXJhdG9yLmN4eApAQCAtMywxMCArMywxMyBAQAogI2luY2x1ZGUgImNtRXh0cmFDb2RlQmxvY2tzR2VuZXJhdG9yLmgiCiAKICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPG9zdHJlYW0+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgpAQCAtOTIsNyArOTUsNyBAQAogICBzdGQ6OnN0cmluZyBwYXRoOyAvLyBvbmx5IG9uZSBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgc3RkOjp2ZWN0b3I8VHJlZT4gZm9sZGVyczsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGZpbGVzOwotICB2b2lkIEluc2VydFBhdGgoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzcGxpdHRlZCwKKyAgdm9pZCBJbnNlcnRQYXRoKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc3BsaXQsCiAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OnNpemVfdHlwZSBzdGFydCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSk7CiAgIHZvaWQgQnVpbGRWaXJ0dWFsRm9sZGVyKGNtWE1MV3JpdGVyJiB4bWwpIGNvbnN0OwpAQCAtMTAzLDM0ICsxMDYsMzQgQEAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmc1BhdGgpIGNvbnN0OwogfTsKIAotdm9pZCBUcmVlOjpJbnNlcnRQYXRoKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc3BsaXR0ZWQsCit2b2lkIFRyZWU6Okluc2VydFBhdGgoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzcGxpdCwKICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OnNpemVfdHlwZSBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCiB7Ci0gIGlmIChzdGFydCA9PSBzcGxpdHRlZC5zaXplKCkpIHsKKyAgaWYgKHN0YXJ0ID09IHNwbGl0LnNpemUoKSkgewogICAgIGZpbGVzLmluc2VydChmaWxlTmFtZSk7CiAgICAgcmV0dXJuOwogICB9CiAgIGZvciAoVHJlZSYgZm9sZGVyIDogZm9sZGVycykgewotICAgIGlmIChmb2xkZXIucGF0aCA9PSBzcGxpdHRlZFtzdGFydF0pIHsKLSAgICAgIGlmIChzdGFydCArIDEgPCBzcGxpdHRlZC5zaXplKCkpIHsKLSAgICAgICAgZm9sZGVyLkluc2VydFBhdGgoc3BsaXR0ZWQsIHN0YXJ0ICsgMSwgZmlsZU5hbWUpOworICAgIGlmIChmb2xkZXIucGF0aCA9PSBzcGxpdFtzdGFydF0pIHsKKyAgICAgIGlmIChzdGFydCArIDEgPCBzcGxpdC5zaXplKCkpIHsKKyAgICAgICAgZm9sZGVyLkluc2VydFBhdGgoc3BsaXQsIHN0YXJ0ICsgMSwgZmlsZU5hbWUpOwogICAgICAgICByZXR1cm47CiAgICAgICB9Ci0gICAgICAvLyBsYXN0IHBhcnQgb2Ygc3BsaXR0ZWQKKyAgICAgIC8vIGxhc3QgcGFydCBvZiBzcGxpdAogICAgICAgZm9sZGVyLmZpbGVzLmluc2VydChmaWxlTmFtZSk7CiAgICAgICByZXR1cm47CiAgICAgfQogICB9CiAgIC8vIE5vdCBmb3VuZCBpbiBmb2xkZXJzLCB0aHVzIGluc2VydAogICBUcmVlIG5ld0ZvbGRlcjsKLSAgbmV3Rm9sZGVyLnBhdGggPSBzcGxpdHRlZFtzdGFydF07Ci0gIGlmIChzdGFydCArIDEgPCBzcGxpdHRlZC5zaXplKCkpIHsKLSAgICBuZXdGb2xkZXIuSW5zZXJ0UGF0aChzcGxpdHRlZCwgc3RhcnQgKyAxLCBmaWxlTmFtZSk7CisgIG5ld0ZvbGRlci5wYXRoID0gc3BsaXRbc3RhcnRdOworICBpZiAoc3RhcnQgKyAxIDwgc3BsaXQuc2l6ZSgpKSB7CisgICAgbmV3Rm9sZGVyLkluc2VydFBhdGgoc3BsaXQsIHN0YXJ0ICsgMSwgZmlsZU5hbWUpOwogICAgIGZvbGRlcnMucHVzaF9iYWNrKG5ld0ZvbGRlcik7CiAgICAgcmV0dXJuOwogICB9Ci0gIC8vIGxhc3QgcGFydCBvZiBzcGxpdHRlZAorICAvLyBsYXN0IHBhcnQgb2Ygc3BsaXQKICAgbmV3Rm9sZGVyLmZpbGVzLmluc2VydChmaWxlTmFtZSk7CiAgIGZvbGRlcnMucHVzaF9iYWNrKG5ld0ZvbGRlcik7CiB9CkBAIC0yMDksMjMgKzIxMiwyMyBAQAogICAgIC8vIENvbGxlY3QgYWxsIGZpbGVzCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpc3RGaWxlczsKICAgICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogaXQuc2Vjb25kKSB7Ci0gICAgICBjbUFwcGVuZChsaXN0RmlsZXMsIGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRMaXN0RmlsZXMoKSk7CisgICAgICBjbTo6YXBwZW5kKGxpc3RGaWxlcywgbGctPkdldE1ha2VmaWxlKCktPkdldExpc3RGaWxlcygpKTsKICAgICB9CiAKICAgICAvLyBDb252ZXJ0CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGlzdEZpbGUgOiBsaXN0RmlsZXMpIHsKICAgICAgIC8vIGRvbid0IHB1dCBjbWFrZSdzIG93biBmaWxlcyBpbnRvIHRoZSBwcm9qZWN0ICgjMTIxMTApOgotICAgICAgaWYgKGxpc3RGaWxlLmZpbmQoY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VSb290KCkpID09IDApIHsKKyAgICAgIGlmIChjbUhhc1ByZWZpeChsaXN0RmlsZSwgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VSb290KCkpKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVsYXRpdmUgPSBjbVN5c3RlbVRvb2xzOjpSZWxhdGl2ZVBhdGgoCiAgICAgICAgIGl0LnNlY29uZFswXS0+R2V0U291cmNlRGlyZWN0b3J5KCksIGxpc3RGaWxlKTsKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzcGxpdHRlZDsKLSAgICAgIGNtU3lzdGVtVG9vbHM6OlNwbGl0UGF0aChyZWxhdGl2ZSwgc3BsaXR0ZWQsIGZhbHNlKTsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzcGxpdDsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OlNwbGl0UGF0aChyZWxhdGl2ZSwgc3BsaXQsIGZhbHNlKTsKICAgICAgIC8vIFNwbGl0IGZpbGVuYW1lIGZyb20gcGF0aAotICAgICAgc3RkOjpzdHJpbmcgZmlsZU5hbWUgPSAqKHNwbGl0dGVkLmVuZCgpIC0gMSk7Ci0gICAgICBzcGxpdHRlZC5lcmFzZShzcGxpdHRlZC5lbmQoKSAtIDEsIHNwbGl0dGVkLmVuZCgpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGZpbGVOYW1lID0gKihzcGxpdC5lbmQoKSAtIDEpOworICAgICAgc3BsaXQuZXJhc2Uoc3BsaXQuZW5kKCkgLSAxLCBzcGxpdC5lbmQoKSk7CiAKICAgICAgIC8vIFdlIGRvbid0IHdhbnQgcGF0aHMgd2l0aCBDTWFrZUZpbGVzIGluIHRoZW0KICAgICAgIC8vIG9yIGRvIHdlPwpAQCAtMjMzLDEzICsyMzYsMTIgQEAKICAgICAgIC8vCiAgICAgICAvLyBBbHNvIHdlIGNhbiBkaXNhYmxlIGV4dGVybmFsIChvdXRzaWRlIHRoZSBwcm9qZWN0KSBmaWxlcyBieSBzZXR0aW5nIE9OCiAgICAgICAvLyBDTUFLRV9DT0RFQkxPQ0tTX0VYQ0xVREVfRVhURVJOQUxfRklMRVMgdmFyaWFibGUuCi0gICAgICBjb25zdCBib29sIGV4Y2x1ZGVFeHRlcm5hbCA9Ci0gICAgICAgIGNtSXNPbihpdC5zZWNvbmRbMF0tPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKAotICAgICAgICAgICJDTUFLRV9DT0RFQkxPQ0tTX0VYQ0xVREVfRVhURVJOQUxfRklMRVMiKSk7Ci0gICAgICBpZiAoIXNwbGl0dGVkLmVtcHR5KCkgJiYKKyAgICAgIGNvbnN0IGJvb2wgZXhjbHVkZUV4dGVybmFsID0gaXQuc2Vjb25kWzBdLT5HZXRNYWtlZmlsZSgpLT5Jc09uKAorICAgICAgICAiQ01BS0VfQ09ERUJMT0NLU19FWENMVURFX0VYVEVSTkFMX0ZJTEVTIik7CisgICAgICBpZiAoIXNwbGl0LmVtcHR5KCkgJiYKICAgICAgICAgICAoIWV4Y2x1ZGVFeHRlcm5hbCB8fCAocmVsYXRpdmUuZmluZCgiLi4iKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykpICYmCiAgICAgICAgICAgcmVsYXRpdmUuZmluZCgiQ01ha2VGaWxlcyIpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHRyZWUuSW5zZXJ0UGF0aChzcGxpdHRlZCwgMSwgZmlsZU5hbWUpOworICAgICAgICB0cmVlLkluc2VydFBhdGgoc3BsaXQsIDEsIGZpbGVOYW1lKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTI4Myw4ICsyODUsOCBAQAogICAvLyBhZGQgYWxsIGV4ZWN1dGFibGUgYW5kIGxpYnJhcnkgdGFyZ2V0cyBhbmQgc29tZSBvZiB0aGUgR0xPQkFMCiAgIC8vIGFuZCBVVElMSVRZIHRhcmdldHMKICAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IGxncykgewotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRhcmdldHMgPSBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICBjb25zdCBhdXRvJiB0YXJnZXRzID0gbGctPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHRhcmdldE5hbWUgPSB0YXJnZXQtPkdldE5hbWUoKTsKICAgICAgIHN3aXRjaCAodGFyZ2V0LT5HZXRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQ6IHsKQEAgLTI5OCwxMSArMzAwLDExIEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgogICAgICAgICAgIC8vIEFkZCBhbGwgdXRpbGl0eSB0YXJnZXRzLCBleGNlcHQgdGhlIE5pZ2h0bHkvQ29udGludW91cy8KICAgICAgICAgICAvLyBFeHBlcmltZW50YWwtInN1YiJ0YXJnZXRzIGFzIGUuZy4gTmlnaHRseVN0YXJ0Ci0gICAgICAgICAgaWYgKCgodGFyZ2V0TmFtZS5maW5kKCJOaWdodGx5IikgPT0gMCkgJiYKKyAgICAgICAgICBpZiAoKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiTmlnaHRseSIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiTmlnaHRseSIpKSB8fAotICAgICAgICAgICAgICAoKHRhcmdldE5hbWUuZmluZCgiQ29udGludW91cyIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkNvbnRpbnVvdXMiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIkNvbnRpbnVvdXMiKSkgfHwKLSAgICAgICAgICAgICAgKCh0YXJnZXROYW1lLmZpbmQoIkV4cGVyaW1lbnRhbCIpID09IDApICYmCisgICAgICAgICAgICAgIChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIkV4cGVyaW1lbnRhbCIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiRXhwZXJpbWVudGFsIikpKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CkBAIC0zMTUsNyArMzE3LDcgQEAKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlk6CiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWTogewotICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IHRhcmdldDsKKyAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogZ3QgPSB0YXJnZXQuZ2V0KCk7CiAgICAgICAgICAgdGhpcy0+QXBwZW5kVGFyZ2V0KHhtbCwgdGFyZ2V0TmFtZSwgZ3QsIG1ha2UsIGxnLCBjb21waWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZUFyZ3MpOwogICAgICAgICAgIHN0ZDo6c3RyaW5nIGZhc3RUYXJnZXQgPSBjbVN0ckNhdCh0YXJnZXROYW1lLCAiL2Zhc3QiKTsKQEAgLTM0MSw4ICszNDMsOCBAQAogCiAgIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGcgOiBsZ3MpIHsKICAgICBjbU1ha2VmaWxlKiBtYWtlZmlsZSA9IGxnLT5HZXRNYWtlZmlsZSgpOwotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRhcmdldHMgPSBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICBjb25zdCBhdXRvJiB0YXJnZXRzID0gbGctPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKICAgICAgIHN3aXRjaCAodGFyZ2V0LT5HZXRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEU6CiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKQEAgLTM1MiwxMyArMzU0LDEyIEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOiAvLyBjYW4gaGF2ZSBzb3VyY2VzIHNpbmNlIDIuNi4zCiAgICAgICAgIHsKICAgICAgICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBzb3VyY2VzOwotICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IHRhcmdldDsKLSAgICAgICAgICBndC0+R2V0U291cmNlRmlsZXMoc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIikpOworICAgICAgICAgIHRhcmdldC0+R2V0U291cmNlRmlsZXMoCisgICAgICAgICAgICBzb3VyY2VzLCBtYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSk7CiAgICAgICAgICAgZm9yIChjbVNvdXJjZUZpbGUqIHMgOiBzb3VyY2VzKSB7CiAgICAgICAgICAgICAvLyBkb24ndCBhZGQgc291cmNlIGZpbGVzIGZyb20gVVRJTElUWSB0YXJnZXQgd2hpY2ggaGF2ZSB0aGUKICAgICAgICAgICAgIC8vIEdFTkVSQVRFRCBwcm9wZXJ0eSBzZXQ6Ci0gICAgICAgICAgICBpZiAoZ3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkgJiYKKyAgICAgICAgICAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkgJiYKICAgICAgICAgICAgICAgICBzLT5HZXRJc0dlbmVyYXRlZCgpKSB7CiAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMzY4LDcgKzM2OSw3IEBACiAgICAgICAgICAgICBzdGQ6OnN0cmluZyBsYW5nID0gcy0+R2V0T3JEZXRlcm1pbmVMYW5ndWFnZSgpOwogICAgICAgICAgICAgaWYgKGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIkNYWCIgfHwgbGFuZyA9PSAiQ1VEQSIpIHsKICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHNyY2V4dCA9IHMtPkdldEV4dGVuc2lvbigpOwotICAgICAgICAgICAgICBpc0NGaWxlID0gY20tPklzU291cmNlRXh0ZW5zaW9uKHNyY2V4dCk7CisgICAgICAgICAgICAgIGlzQ0ZpbGUgPSBjbS0+SXNBQ0xpa2VTb3VyY2VFeHRlbnNpb24oc3JjZXh0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGZ1bGxQYXRoID0gcy0+UmVzb2x2ZUZ1bGxQYXRoKCk7CkBAIC0zNzgsOSArMzc5LDggQEAKICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6UmVsYXRpdmVQYXRoKGxnLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSwgZnVsbFBhdGgpOwogICAgICAgICAgICAgLy8gRG8gbm90IGFkZCB0aGlzIGZpbGUgaWYgaXQgaGFzICIuLiIgaW4gcmVsYXRpdmUgcGF0aCBhbmQKICAgICAgICAgICAgIC8vIGlmIENNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUyB2YXJpYWJsZSBpcyBvbi4KLSAgICAgICAgICAgIGNvbnN0IGJvb2wgZXhjbHVkZUV4dGVybmFsID0KLSAgICAgICAgICAgICAgY21Jc09uKGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgICAiQ01BS0VfQ09ERUJMT0NLU19FWENMVURFX0VYVEVSTkFMX0ZJTEVTIikpOworICAgICAgICAgICAgY29uc3QgYm9vbCBleGNsdWRlRXh0ZXJuYWwgPSBsZy0+R2V0TWFrZWZpbGUoKS0+SXNPbigKKyAgICAgICAgICAgICAgIkNNQUtFX0NPREVCTE9DS1NfRVhDTFVERV9FWFRFUk5BTF9GSUxFUyIpOwogICAgICAgICAgICAgaWYgKGV4Y2x1ZGVFeHRlcm5hbCAmJgogICAgICAgICAgICAgICAgIChyZWxhdGl2ZS5maW5kKCIuLiIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSkgewogICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM5MSw3ICszOTEsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBDYnBVbml0JiBjYnBVbml0ID0gYWxsRmlsZXNbZnVsbFBhdGhdOwotICAgICAgICAgICAgY2JwVW5pdC5UYXJnZXRzLnB1c2hfYmFjayh0YXJnZXQpOworICAgICAgICAgICAgY2JwVW5pdC5UYXJnZXRzLnB1c2hfYmFjayh0YXJnZXQuZ2V0KCkpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OiAvLyBpbnRlbmRlZCBmYWxsdGhyb3VnaApAQCAtNTU4LDE5ICs1NTgsMTkgQEAKICAgICB7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jbHVkZXM7CiAgICAgICBsZy0+R2V0SW5jbHVkZURpcmVjdG9yaWVzKGluY2x1ZGVzLCB0YXJnZXQsICJDIiwgYnVpbGRUeXBlKTsKLSAgICAgIGNtQXBwZW5kKGFsbEluY2x1ZGVEaXJzLCBpbmNsdWRlcyk7CisgICAgICBjbTo6YXBwZW5kKGFsbEluY2x1ZGVEaXJzLCBpbmNsdWRlcyk7CiAgICAgfQogCiAgICAgc3RkOjpzdHJpbmcgc3lzdGVtSW5jbHVkZURpcnMgPSBtYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oCiAgICAgICAiQ01BS0VfRVhUUkFfR0VORVJBVE9SX0NYWF9TWVNURU1fSU5DTFVERV9ESVJTIik7CiAgICAgaWYgKCFzeXN0ZW1JbmNsdWRlRGlycy5lbXB0eSgpKSB7Ci0gICAgICBjbUFwcGVuZChhbGxJbmNsdWRlRGlycywgY21FeHBhbmRlZExpc3Qoc3lzdGVtSW5jbHVkZURpcnMpKTsKKyAgICAgIGNtOjphcHBlbmQoYWxsSW5jbHVkZURpcnMsIGNtRXhwYW5kZWRMaXN0KHN5c3RlbUluY2x1ZGVEaXJzKSk7CiAgICAgfQogCiAgICAgc3lzdGVtSW5jbHVkZURpcnMgPSBtYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oCiAgICAgICAiQ01BS0VfRVhUUkFfR0VORVJBVE9SX0NfU1lTVEVNX0lOQ0xVREVfRElSUyIpOwogICAgIGlmICghc3lzdGVtSW5jbHVkZURpcnMuZW1wdHkoKSkgewotICAgICAgY21BcHBlbmQoYWxsSW5jbHVkZURpcnMsIGNtRXhwYW5kZWRMaXN0KHN5c3RlbUluY2x1ZGVEaXJzKSk7CisgICAgICBjbTo6YXBwZW5kKGFsbEluY2x1ZGVEaXJzLCBjbUV4cGFuZGVkTGlzdChzeXN0ZW1JbmNsdWRlRGlycykpOwogICAgIH0KIAogICAgIGF1dG8gZW5kID0gY21SZW1vdmVEdXBsaWNhdGVzKGFsbEluY2x1ZGVEaXJzKTsKQEAgLTcyMSw3ICs3MjEsNyBAQAogICBpZiAoZ2VuZXJhdG9yID09ICJOTWFrZSBNYWtlZmlsZXMiIHx8IGdlbmVyYXRvciA9PSAiTk1ha2UgTWFrZWZpbGVzIEpPTSIpIHsKICAgICAvLyBGb3IgV2luZG93cyBDb252ZXJ0VG9PdXRwdXRQYXRoIGFscmVhZHkgYWRkcyBxdW90ZXMgd2hlbiByZXF1aXJlZC4KICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGVzY2FwZWQsIHNlZQotICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xMzk1MgorICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzEzOTUyCiAgICAgc3RkOjpzdHJpbmcgbWFrZWZpbGVOYW1lID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aChtYWtlZmlsZSk7CiAgICAgY29tbWFuZCArPSAiIC9OT0xPR08gL2YgIjsKICAgICBjb21tYW5kICs9IG1ha2VmaWxlTmFtZTsKQEAgLTcyOSw3ICs3MjksNyBAQAogICAgIGNvbW1hbmQgKz0gdGFyZ2V0OwogICB9IGVsc2UgaWYgKGdlbmVyYXRvciA9PSAiTWluR1cgTWFrZWZpbGVzIikgewogICAgIC8vIG5vIGVzY2FwaW5nIG9mIHNwYWNlcyBpbiB0aGlzIGNhc2UsIHNlZQotICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xMDAxNAorICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzEwMDE0CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG1ha2VmaWxlTmFtZSA9IG1ha2VmaWxlOwogICAgIGNvbW1hbmQgKz0gIiAtZiBcIiI7CiAgICAgY29tbWFuZCArPSBtYWtlZmlsZU5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHRyYUNvZGVMaXRlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuY3h4CmluZGV4IGM3Yjc0NTcuLjk1Y2ZiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuY3h4CkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CkBAIC0xMTYsMTAgKzExNyw5IEBACiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXR2YWw7CiAgIC8vIGZvciBlYWNoIHRhcmdldCBpbiB0aGUgd29ya3NwYWNlIGNyZWF0ZSBhIGNvZGVsaXRlIHByb2plY3QKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBsZ3MgPQotICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCk7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGcgOiBsZ3MpIHsKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiBsdCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgY29uc3QgYXV0byYgbGdzID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKTsKKyAgZm9yIChjb25zdCBhdXRvJiBsZyA6IGxncykgeworICAgIGZvciAoY29uc3QgYXV0byYgbHQgOiBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdHlwZSA9IGx0LT5HZXRUeXBlKCk7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0RGlyID0gbGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKICAgICAgIHN0ZDo6c3RyaW5nIHRhcmdldE5hbWUgPSBsdC0+R2V0TmFtZSgpOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgICAgeG1sLT5BdHRyaWJ1dGUoIkFjdGl2ZSIsICJObyIpOwogICAgICAgICAgIHhtbC0+RW5kRWxlbWVudCgpOwogCi0gICAgICAgICAgQ3JlYXRlTmV3UHJvamVjdEZpbGUobHQsIGZpbGVuYW1lKTsKKyAgICAgICAgICBDcmVhdGVOZXdQcm9qZWN0RmlsZShsdC5nZXQoKSwgZmlsZW5hbWUpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIGJyZWFrOwpAQCAtMjA0LDkgKzIwNCw3IEBACiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZOiB7CiAgICAgICBwcm9qZWN0VHlwZSA9ICJTdGF0aWMgTGlicmFyeSI7CiAgICAgfSBicmVhazsKLSAgICBjYXNlIGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlk6IHsKLSAgICAgIHByb2plY3RUeXBlID0gIkR5bmFtaWMgTGlicmFyeSI7Ci0gICAgfSBicmVhazsKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlk6CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOiB7CiAgICAgICBwcm9qZWN0VHlwZSA9ICJEeW5hbWljIExpYnJhcnkiOwogICAgIH0gYnJlYWs7CkBAIC0yMjksOCArMjI3LDcgQEAKICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uocy0+R2V0RXh0ZW5zaW9uKCkpOwogICAgICAgICAvLyBjaGVjayB3aGV0aGVyIGl0IGlzIGEgc291cmNlIG9yIGEgaW5jbHVkZSBmaWxlCiAgICAgICAgIC8vIHRoZW4gcHV0IGl0IGFjY29yZGluZ2x5IGludG8gb25lIG9mIHRoZSB0d28gY29udGFpbmVycwotICAgICAgICBpZiAoY20tPklzU291cmNlRXh0ZW5zaW9uKGV4dExvd2VyKSB8fCBjbS0+SXNDdWRhRXh0ZW5zaW9uKGV4dExvd2VyKSB8fAotICAgICAgICAgICAgY20tPklzRm9ydHJhbkV4dGVuc2lvbihleHRMb3dlcikpIHsKKyAgICAgICAgaWYgKGNtLT5Jc0FLbm93blNvdXJjZUV4dGVuc2lvbihleHRMb3dlcikpIHsKICAgICAgICAgICBjRmlsZXNbZnVsbFBhdGhdID0gczsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBvdGhlckZpbGVzLmluc2VydChmdWxsUGF0aCk7CkBAIC0yNjksOSArMjY2LDkgQEAKIAogICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogbGdzKSB7CiAgICAgY21NYWtlZmlsZSogbWFrZWZpbGUgPSBsZy0+R2V0TWFrZWZpbGUoKTsKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0YXJnZXRzID0gbGctPkdldEdlbmVyYXRvclRhcmdldHMoKTsKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiB0YXJnZXRzKSB7Ci0gICAgICBwcm9qZWN0VHlwZSA9IENvbGxlY3RTb3VyY2VGaWxlcyhtYWtlZmlsZSwgdGFyZ2V0LCBjRmlsZXMsIG90aGVyRmlsZXMpOworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgICAgcHJvamVjdFR5cGUgPQorICAgICAgICBDb2xsZWN0U291cmNlRmlsZXMobWFrZWZpbGUsIHRhcmdldC5nZXQoKSwgY0ZpbGVzLCBvdGhlckZpbGVzKTsKICAgICB9CiAgIH0KIApAQCAtNjM0LDcgKzYzMSwxMCBAQAogICBpZiAoZ2VuZXJhdG9yID09ICJOTWFrZSBNYWtlZmlsZXMiIHx8IGdlbmVyYXRvciA9PSAiTmluamEiKSB7CiAgICAgc3MgPDwgbWFrZTsKICAgfSBlbHNlIGlmIChnZW5lcmF0b3IgPT0gIk1pbkdXIE1ha2VmaWxlcyIgfHwgZ2VuZXJhdG9yID09ICJVbml4IE1ha2VmaWxlcyIpIHsKLSAgICBzcyA8PCBtYWtlIDw8ICIgLWYkKFByb2plY3RQYXRoKS9NYWtlZmlsZSAtaiAiIDw8IHRoaXMtPkNwdUNvdW50OworICAgIHNzIDw8IG1ha2UgPDwgIiAtZiQoUHJvamVjdFBhdGgpL01ha2VmaWxlIjsKKyAgICBpZiAodGhpcy0+Q3B1Q291bnQgPiAwKSB7CisgICAgICBzcyA8PCAiIC1qICIgPDwgdGhpcy0+Q3B1Q291bnQ7CisgICAgfQogICB9CiAgIGlmICghdGFyZ2V0TmFtZS5lbXB0eSgpKSB7CiAgICAgc3MgPDwgIiAiIDw8IHRhcmdldE5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3IuY3h4CmluZGV4IGIyODZhY2YuLmI2YzBhN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3IuY3h4CkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCkBAIC0xOCw2ICsxOSw3IEBACiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU291cmNlR3JvdXAuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCkBAIC05OCw3ICsxMDAsNyBAQAogCiB2b2lkIGNtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvcjo6R2VuZXJhdGUoKQogewotICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CisgIGNvbnN0IGF1dG8mIGxnID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKVswXTsKICAgY29uc3QgY21NYWtlZmlsZSogbWYgPSBsZy0+R2V0TWFrZWZpbGUoKTsKIAogICBzdGQ6OnN0cmluZyBlY2xpcHNlVmVyc2lvbiA9IG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfRUNMSVBTRV9WRVJTSU9OIik7CkBAIC0xNzUsNyArMTc3LDcgQEAKIAogdm9pZCBjbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3I6OkNyZWF0ZVNldHRpbmdzUmVzb3VyY2VQcmVmc0ZpbGUoKQogewotICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CisgIGNvbnN0IGF1dG8mIGxnID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKVswXTsKICAgY21NYWtlZmlsZSogbWYgPSBsZy0+R2V0TWFrZWZpbGUoKTsKIAogICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9CkBAIC0xODYsMTAgKzE4OCwxMCBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGZvdXQgPDwgImVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xIiA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgImVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xXG4iOwogICBjb25zdCBjaGFyKiBlbmNvZGluZyA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9FQ0xJUFNFX1JFU09VUkNFX0VOQ09ESU5HIik7CiAgIGlmIChlbmNvZGluZykgewotICAgIGZvdXQgPDwgImVuY29kaW5nLzxwcm9qZWN0Pj0iIDw8IGVuY29kaW5nIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICJlbmNvZGluZy88cHJvamVjdD49IiA8PCBlbmNvZGluZyA8PCAnXG4nOwogICB9CiB9CiAKQEAgLTE5OCw3ICsyMDAsNyBAQAogICBhc3NlcnQodGhpcy0+SG9tZURpcmVjdG9yeSAhPSB0aGlzLT5Ib21lT3V0cHV0RGlyZWN0b3J5KTsKIAogICAvLyBzZXQgdXAgdGhlIHByb2plY3QgbmFtZTogPHByb2plY3Q+LVNvdXJjZUA8YmFzZVNvdXJjZVBhdGhOYW1lPgotICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CisgIGNvbnN0IGF1dG8mIGxnID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKVswXTsKICAgc3RkOjpzdHJpbmcgbmFtZSA9IGNtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvcjo6R2VuZXJhdGVQcm9qZWN0TmFtZSgKICAgICBsZy0+R2V0UHJvamVjdE5hbWUoKSwgIlNvdXJjZSIsCiAgICAgY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yOjpHZXRQYXRoQmFzZW5hbWUodGhpcy0+SG9tZURpcmVjdG9yeSkpOwpAQCAtMjMxLDkgKzIzMyw5IEBACiAKIHZvaWQgY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yOjpBZGRFbnZWYXIoc3RkOjpvc3RyZWFtJiBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudlZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbEdlbmVyYXRvciogbGcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3ImIGxnKQogewotICBjbU1ha2VmaWxlKiBtZiA9IGxnLT5HZXRNYWtlZmlsZSgpOworICBjbU1ha2VmaWxlKiBtZiA9IGxnLkdldE1ha2VmaWxlKCk7CiAKICAgLy8gZ2V0IHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIGZyb20gdGhlIGNhY2hlIGFuZCB0aGVuCiAgIC8vIGZpZ3VyZSBvdXQgd2hpY2ggb25lIHRvIHVzZToKQEAgLTI0Miw4ICsyNDQsNyBAQAogICBjb25zdCBib29sIGVudlZhclNldCA9IGNtU3lzdGVtVG9vbHM6OkdldEVudihlbnZWYXIsIGVudlZhclZhbHVlKTsKIAogICBzdGQ6OnN0cmluZyBjYWNoZUVudHJ5TmFtZSA9IGNtU3RyQ2F0KCJDTUFLRV9FQ0xJUFNFX0VOVlZBUl8iLCBlbnZWYXIpOwotICBjb25zdCBzdGQ6OnN0cmluZyogY2FjaGVWYWx1ZSA9Ci0gICAgbGctPkdldFN0YXRlKCktPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShjYWNoZUVudHJ5TmFtZSk7CisgIGNtUHJvcCBjYWNoZVZhbHVlID0gbGcuR2V0U3RhdGUoKS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKGNhY2hlRW50cnlOYW1lKTsKIAogICAvLyBub3cgd2UgaGF2ZSBib3RoLCBkZWNpZGUgd2hpY2ggb25lIHRvIHVzZQogICBzdGQ6OnN0cmluZyB2YWx1ZVRvVXNlOwpAQCAtMjU0LDkgKzI1NSw5IEBACiAgICAgLy8gVGhlIHZhcmlhYmxlIGlzIGluIHRoZSBlbnYsIGJ1dCBub3QgaW4gdGhlIGNhY2hlLiBVc2UgaXQgYW5kIHB1dCBpdAogICAgIC8vIGluIHRoZSBjYWNoZQogICAgIHZhbHVlVG9Vc2UgPSBlbnZWYXJWYWx1ZTsKLSAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKGNhY2hlRW50cnlOYW1lLCB2YWx1ZVRvVXNlLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5TmFtZS5jX3N0cigpLCBjbVN0YXRlRW51bXM6OlNUUklORywgdHJ1ZSk7Ci0gICAgbWYtPkdldENNYWtlSW5zdGFuY2UoKS0+U2F2ZUNhY2hlKGxnLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7CisgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbihjYWNoZUVudHJ5TmFtZSwgdmFsdWVUb1VzZSwgY2FjaGVFbnRyeU5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HLCB0cnVlKTsKKyAgICBtZi0+R2V0Q01ha2VJbnN0YW5jZSgpLT5TYXZlQ2FjaGUobGcuR2V0QmluYXJ5RGlyZWN0b3J5KCkpOwogICB9IGVsc2UgaWYgKCFlbnZWYXJTZXQgJiYgY2FjaGVWYWx1ZSAhPSBudWxscHRyKSB7CiAgICAgLy8gSXQgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIGJ1dCBub3QgaW4gdGhlIGVudiwgc28gdXNlIGl0IGZyb20gdGhlIGNhY2hlCiAgICAgdmFsdWVUb1VzZSA9ICpjYWNoZVZhbHVlOwpAQCAtMjY5LDEwICsyNzAsMTAgQEAKICAgICB2YWx1ZVRvVXNlID0gKmNhY2hlVmFsdWU7CiAgICAgaWYgKHZhbHVlVG9Vc2UuZmluZChlbnZWYXJWYWx1ZSkgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgIHZhbHVlVG9Vc2UgPSBlbnZWYXJWYWx1ZTsKLSAgICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oY2FjaGVFbnRyeU5hbWUsIHZhbHVlVG9Vc2UuY19zdHIoKSwKKyAgICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oY2FjaGVFbnRyeU5hbWUsIHZhbHVlVG9Vc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnlOYW1lLmNfc3RyKCksIGNtU3RhdGVFbnVtczo6U1RSSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgIG1mLT5HZXRDTWFrZUluc3RhbmNlKCktPlNhdmVDYWNoZShsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOworICAgICAgbWYtPkdldENNYWtlSW5zdGFuY2UoKS0+U2F2ZUNhY2hlKGxnLkdldEJpbmFyeURpcmVjdG9yeSgpKTsKICAgICB9CiAgIH0KIApAQCAtMjgzLDcgKzI4NCw3IEBACiAKIHZvaWQgY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yOjpDcmVhdGVQcm9qZWN0RmlsZSgpCiB7Ci0gIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKVswXTsKKyAgY29uc3QgYXV0byYgbGcgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpWzBdOwogICBjbU1ha2VmaWxlKiBtZiA9IGxnLT5HZXRNYWtlZmlsZSgpOwogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gdGhpcy0+SG9tZU91dHB1dERpcmVjdG9yeSArICIvLnByb2plY3QiOwpAQCAtMzUwLDE1ICszNTEsMTUgQEAKICAgLy8gc2V0IHZzdmFyczMyLmJhdCBlbnZpcm9ubWVudCBhdmFpbGFibGUgYXQgQ01ha2UgdGltZSwKICAgLy8gICBidXQgbm90IG5lY2Vzc2FyaWx5IHdoZW4gZWNsaXBzZSBpcyBvcGVuCiAgIGlmIChjb21waWxlcklkID09ICJNU1ZDIikgewotICAgIEFkZEVudlZhcihlbnZpcm9ubWVudCwgIlBBVEgiLCBsZyk7Ci0gICAgQWRkRW52VmFyKGVudmlyb25tZW50LCAiSU5DTFVERSIsIGxnKTsKLSAgICBBZGRFbnZWYXIoZW52aXJvbm1lbnQsICJMSUIiLCBsZyk7Ci0gICAgQWRkRW52VmFyKGVudmlyb25tZW50LCAiTElCUEFUSCIsIGxnKTsKKyAgICBBZGRFbnZWYXIoZW52aXJvbm1lbnQsICJQQVRIIiwgKmxnKTsKKyAgICBBZGRFbnZWYXIoZW52aXJvbm1lbnQsICJJTkNMVURFIiwgKmxnKTsKKyAgICBBZGRFbnZWYXIoZW52aXJvbm1lbnQsICJMSUIiLCAqbGcpOworICAgIEFkZEVudlZhcihlbnZpcm9ubWVudCwgIkxJQlBBVEgiLCAqbGcpOwogICB9IGVsc2UgaWYgKGNvbXBpbGVySWQgPT0gIkludGVsIikgewogICAgIC8vIGlmIHRoZSBlbnYudmFyIGlzIHNldCwgdXNlIHRoaXMgb25lIGFuZCBwdXQgaXQgaW4gdGhlIGNhY2hlCiAgICAgLy8gaWYgdGhlIGVudi52YXIgaXMgbm90IHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbiB0aGUgY2FjaGUsCiAgICAgLy8gdXNlIGl0IGZyb20gdGhlIGNhY2hlOgotICAgIEFkZEVudlZhcihlbnZpcm9ubWVudCwgIklOVEVMX0xJQ0VOU0VfRklMRSIsIGxnKTsKKyAgICBBZGRFbnZWYXIoZW52aXJvbm1lbnQsICJJTlRFTF9MSUNFTlNFX0ZJTEUiLCAqbGcpOwogICB9CiAgIEFwcGVuZERpY3Rpb25hcnkoeG1sLCAib3JnLmVjbGlwc2UuY2R0Lm1ha2UuY29yZS5lbnZpcm9ubWVudCIsCiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQuc3RyKCkpOwpAQCAtNDE0LDkgKzQxNSw5IEBACiAgICAgeG1sLkVsZW1lbnQoIm5hdHVyZSIsIG4pOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGV4dHJhTmF0dXJlc1Byb3AgPQorICBpZiAoY21Qcm9wIGV4dHJhTmF0dXJlc1Byb3AgPQogICAgICAgICBtZi0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIkVDTElQU0VfRVhUUkFfTkFUVVJFUyIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4dHJhTmF0dXJlcyA9IGNtRXhwYW5kZWRMaXN0KGV4dHJhTmF0dXJlc1Byb3ApOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHRyYU5hdHVyZXMgPSBjbUV4cGFuZGVkTGlzdCgqZXh0cmFOYXR1cmVzUHJvcCk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbiA6IGV4dHJhTmF0dXJlcykgewogICAgICAgeG1sLkVsZW1lbnQoIm5hdHVyZSIsIG4pOwogICAgIH0KQEAgLTQyOSw3ICs0MzAsNyBAQAogICBpZiAodGhpcy0+SXNPdXRPZlNvdXJjZUJ1aWxkKSB7CiAgICAgLy8gY3JlYXRlIGEgbGlua2VkIHJlc291cmNlIHRvIENNQUtFX1NPVVJDRV9ESVIKICAgICAvLyAodGhpcyBpcyBub3QgZG9uZSBhbnltb3JlIGZvciBlYWNoIHByb2plY3QgYmVjYXVzZSBvZgotICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy85OTc4IGFuZCBiZWNhdXNlIEkgZm91bmQKKyAgICAvLyBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy85OTc4IGFuZCBiZWNhdXNlIEkgZm91bmQKICAgICAvLyBpdCBhY3R1YWxseSBxdWl0ZSBjb25mdXNpbmcgaW4gYmlnZ2VyIHByb2plY3RzIHdpdGggbWFueSBkaXJlY3RvcmllcyBhbmQKICAgICAvLyBwcm9qZWN0cywgQWxleAogCkBAIC00OTQsMTEgKzQ5NSwxMSBAQAogICBjbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3I6OkFwcGVuZExpbmtlZFJlc291cmNlKAogICAgIHhtbCwgbGlua05hbWUsICJ2aXJ0dWFsOi92aXJ0dWFsIiwgVmlydHVhbEZvbGRlcik7CiAKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsZyA6IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKICAgICBjbU1ha2VmaWxlKiBtYWtlZmlsZSA9IGxnLT5HZXRNYWtlZmlsZSgpOwotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRhcmdldHMgPSBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICAgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwogCi0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgc3RkOjpzdHJpbmcgbGlua05hbWUyID0gY21TdHJDYXQobGlua05hbWUsICcvJyk7CiAgICAgICBzd2l0Y2ggKHRhcmdldC0+R2V0VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOgpAQCAtNTE5LDEwICs1MjAsOSBAQAogICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlR3JvdXA+IHNvdXJjZUdyb3VwcyA9CiAgICAgICAgICAgICBtYWtlZmlsZS0+R2V0U291cmNlR3JvdXBzKCk7CiAgICAgICAgICAgLy8gZ2V0IHRoZSBmaWxlcyBmcm9tIHRoZSBzb3VyY2UgbGlzdHMgdGhlbiBhZGQgdGhlbSB0byB0aGUgZ3JvdXBzCi0gICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0gY29uc3RfY2FzdDxjbUdlbmVyYXRvclRhcmdldCo+KHRhcmdldCk7CiAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gZmlsZXM7Ci0gICAgICAgICAgZ3QtPkdldFNvdXJjZUZpbGVzKGZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSk7CisgICAgICAgICAgdGFyZ2V0LT5HZXRTb3VyY2VGaWxlcygKKyAgICAgICAgICAgIGZpbGVzLCBtYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSk7CiAgICAgICAgICAgZm9yIChjbVNvdXJjZUZpbGUqIHNmIDogZmlsZXMpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGUgZmlsZSB0byB0aGUgbGlzdCBvZiBzb3VyY2VzLgogICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHNvdXJjZSA9IHNmLT5SZXNvbHZlRnVsbFBhdGgoKTsKQEAgLTYwNCw5ICs2MDQsOSBAQAogCiB2b2lkIGNtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvcjo6Q3JlYXRlQ1Byb2plY3RGaWxlKCkgY29uc3QKIHsKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGVtbWl0ZWQ7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBlbWl0dGVkOwogCi0gIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKVswXTsKKyAgY29uc3QgYXV0byYgbGcgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpWzBdOwogICBjb25zdCBjbU1ha2VmaWxlKiBtZiA9IGxnLT5HZXRNYWtlZmlsZSgpOwogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gdGhpcy0+SG9tZU91dHB1dERpcmVjdG9yeSArICIvLmNwcm9qZWN0IjsKQEAgLTc1MSwxNCArNzUxLDE0IEBACiAgIHhtbC5FbmRFbGVtZW50KCk7CiAKICAgLy8gYWRkIHByZS1wcm9jZXNzb3IgZGVmaW5pdGlvbnMgdG8gYWxsb3cgZWNsaXBzZSB0byBncmF5IG91dCBzZWN0aW9ucwotICBlbW1pdGVkLmNsZWFyKCk7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGdlbiA6IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKKyAgZW1pdHRlZC5jbGVhcigpOworICBmb3IgKGNvbnN0IGF1dG8mIGxnZW4gOiB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpKSB7CiAKLSAgICBpZiAoY29uc3QgY2hhciogY2RlZnMgPQorICAgIGlmIChjbVByb3AgY2RlZnMgPQogICAgICAgICAgIGxnZW4tPkdldE1ha2VmaWxlKCktPkdldFByb3BlcnR5KCJDT01QSUxFX0RFRklOSVRJT05TIikpIHsKICAgICAgIC8vIEV4cGFuZCB0aGUgbGlzdC4KICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWZzOwotICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpTcGxpdChjZGVmcywgZGVmcyk7CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlNwbGl0KCpjZGVmcywgZGVmcyk7CiAKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGQgOiBkZWZzKSB7CiAgICAgICAgIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoZCkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKQEAgLTc4MCw4ICs3ODAsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gaW5zZXJ0IHRoZSBkZWZpbml0aW9uIGlmIG5vdCBhbHJlYWR5IGFkZGVkLgotICAgICAgICBpZiAoZW1taXRlZC5maW5kKGRlZikgPT0gZW1taXRlZC5lbmQoKSkgewotICAgICAgICAgIGVtbWl0ZWQuaW5zZXJ0KGRlZik7CisgICAgICAgIGlmIChlbWl0dGVkLmZpbmQoZGVmKSA9PSBlbWl0dGVkLmVuZCgpKSB7CisgICAgICAgICAgZW1pdHRlZC5pbnNlcnQoZGVmKTsKICAgICAgICAgICB4bWwuU3RhcnRFbGVtZW50KCJwYXRoZW50cnkiKTsKICAgICAgICAgICB4bWwuQXR0cmlidXRlKCJraW5kIiwgIm1hYyIpOwogICAgICAgICAgIHhtbC5BdHRyaWJ1dGUoIm5hbWUiLCBkZWYpOwpAQCAtODEyLDggKzgxMiw4IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBpbnNlcnQgdGhlIGRlZmluaXRpb24gaWYgbm90IGFscmVhZHkgYWRkZWQuCi0gICAgICAgIGlmIChlbW1pdGVkLmZpbmQoZGVmKSA9PSBlbW1pdGVkLmVuZCgpKSB7Ci0gICAgICAgICAgZW1taXRlZC5pbnNlcnQoZGVmKTsKKyAgICAgICAgaWYgKGVtaXR0ZWQuZmluZChkZWYpID09IGVtaXR0ZWQuZW5kKCkpIHsKKyAgICAgICAgICBlbWl0dGVkLmluc2VydChkZWYpOwogICAgICAgICAgIHhtbC5TdGFydEVsZW1lbnQoInBhdGhlbnRyeSIpOwogICAgICAgICAgIHhtbC5BdHRyaWJ1dGUoImtpbmQiLCAibWFjIik7CiAgICAgICAgICAgeG1sLkF0dHJpYnV0ZSgibmFtZSIsIGRlZik7CkBAIC04NDQsOCArODQ0LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIGluc2VydCB0aGUgZGVmaW5pdGlvbiBpZiBub3QgYWxyZWFkeSBhZGRlZC4KLSAgICAgICAgaWYgKGVtbWl0ZWQuZmluZChkZWYpID09IGVtbWl0ZWQuZW5kKCkpIHsKLSAgICAgICAgICBlbW1pdGVkLmluc2VydChkZWYpOworICAgICAgICBpZiAoZW1pdHRlZC5maW5kKGRlZikgPT0gZW1pdHRlZC5lbmQoKSkgeworICAgICAgICAgIGVtaXR0ZWQuaW5zZXJ0KGRlZik7CiAgICAgICAgICAgeG1sLlN0YXJ0RWxlbWVudCgicGF0aGVudHJ5Iik7CiAgICAgICAgICAgeG1sLkF0dHJpYnV0ZSgia2luZCIsICJtYWMiKTsKICAgICAgICAgICB4bWwuQXR0cmlidXRlKCJuYW1lIiwgZGVmKTsKQEAgLTg1OCwxOCArODU4LDE3IEBACiAgIH0KIAogICAvLyBpbmNsdWRlIGRpcnMKLSAgZW1taXRlZC5jbGVhcigpOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnZW4gOiB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpKSB7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9Ci0gICAgICBsZ2VuLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICBlbWl0dGVkLmNsZWFyKCk7CisgIGZvciAoY29uc3QgYXV0byYgbGdlbiA6IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKKyAgICBjb25zdCBhdXRvJiB0YXJnZXRzID0gbGdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jbHVkZURpcnM7CiAgICAgICBzdGQ6OnN0cmluZyBjb25maWcgPSBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKTsKLSAgICAgIGxnZW4tPkdldEluY2x1ZGVEaXJlY3RvcmllcyhpbmNsdWRlRGlycywgdGFyZ2V0LCAiQyIsIGNvbmZpZyk7Ci0gICAgICB0aGlzLT5BcHBlbmRJbmNsdWRlRGlyZWN0b3JpZXMoeG1sLCBpbmNsdWRlRGlycywgZW1taXRlZCk7CisgICAgICBsZ2VuLT5HZXRJbmNsdWRlRGlyZWN0b3JpZXMoaW5jbHVkZURpcnMsIHRhcmdldC5nZXQoKSwgIkMiLCBjb25maWcpOworICAgICAgdGhpcy0+QXBwZW5kSW5jbHVkZURpcmVjdG9yaWVzKHhtbCwgaW5jbHVkZURpcnMsIGVtaXR0ZWQpOwogICAgIH0KICAgfQogICAvLyBub3cgYWxzbyB0aGUgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMsIGluIGNhc2Ugd2UgZm91bmQgdGhlbSBpbgpAQCAtODgwLDE0ICs4NzksMTQgQEAKICAgICBzdGQ6OnN0cmluZyBzeXN0ZW1JbmNsdWRlRGlycyA9CiAgICAgICBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0VYVFJBX0dFTkVSQVRPUl9DX1NZU1RFTV9JTkNMVURFX0RJUlMiKTsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGlycyA9IGNtRXhwYW5kZWRMaXN0KHN5c3RlbUluY2x1ZGVEaXJzKTsKLSAgICB0aGlzLT5BcHBlbmRJbmNsdWRlRGlyZWN0b3JpZXMoeG1sLCBkaXJzLCBlbW1pdGVkKTsKKyAgICB0aGlzLT5BcHBlbmRJbmNsdWRlRGlyZWN0b3JpZXMoeG1sLCBkaXJzLCBlbWl0dGVkKTsKICAgfQogICBjb21waWxlciA9IG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQ1hYX0NPTVBJTEVSIik7CiAgIGlmICh0aGlzLT5DWFhFbmFibGVkICYmICFjb21waWxlci5lbXB0eSgpKSB7CiAgICAgc3RkOjpzdHJpbmcgc3lzdGVtSW5jbHVkZURpcnMgPQogICAgICAgbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9FWFRSQV9HRU5FUkFUT1JfQ1hYX1NZU1RFTV9JTkNMVURFX0RJUlMiKTsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGlycyA9IGNtRXhwYW5kZWRMaXN0KHN5c3RlbUluY2x1ZGVEaXJzKTsKLSAgICB0aGlzLT5BcHBlbmRJbmNsdWRlRGlyZWN0b3JpZXMoeG1sLCBkaXJzLCBlbW1pdGVkKTsKKyAgICB0aGlzLT5BcHBlbmRJbmNsdWRlRGlyZWN0b3JpZXMoeG1sLCBkaXJzLCBlbWl0dGVkKTsKICAgfQogCiAgIHhtbC5FbmRFbGVtZW50KCk7IC8vIHN0b3JhZ2VNb2R1bGUKQEAgLTg5Niw3ICs4OTUsNyBAQAogICB4bWwuU3RhcnRFbGVtZW50KCJzdG9yYWdlTW9kdWxlIik7CiAgIHhtbC5BdHRyaWJ1dGUoIm1vZHVsZUlkIiwgIm9yZy5lY2xpcHNlLmNkdC5tYWtlLmNvcmUuYnVpbGR0YXJnZXRzIik7CiAgIHhtbC5TdGFydEVsZW1lbnQoImJ1aWxkVGFyZ2V0cyIpOwotICBlbW1pdGVkLmNsZWFyKCk7CisgIGVtaXR0ZWQuY2xlYXIoKTsKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2UgPSBtZi0+R2V0UmVxdWlyZWREZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iKTsKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2VBcmdzID0KICAgICBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0VDTElQU0VfTUFLRV9BUkdVTUVOVFMiKTsKQEAgLTkxNSwxNiArOTE0LDE1IEBACiAKICAgLy8gYWRkIGFsbCBleGVjdXRhYmxlIGFuZCBsaWJyYXJ5IHRhcmdldHMgYW5kIHNvbWUgb2YgdGhlIEdMT0JBTAogICAvLyBhbmQgVVRJTElUWSB0YXJnZXRzCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGdlbiA6IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0YXJnZXRzID0KLSAgICAgIGxnZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgZm9yIChjb25zdCBhdXRvJiBsZ2VuIDogdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkgeworICAgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBsZ2VuLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CiAgICAgc3RkOjpzdHJpbmcgc3ViZGlyID0gbGdlbi0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoCiAgICAgICB0aGlzLT5Ib21lT3V0cHV0RGlyZWN0b3J5LCBsZ2VuLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpOwogICAgIGlmIChzdWJkaXIgPT0gIi4iKSB7CiAgICAgICBzdWJkaXIuY2xlYXIoKTsKICAgICB9CiAKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRzKSB7CiAgICAgICBzdGQ6OnN0cmluZyB0YXJnZXROYW1lID0gdGFyZ2V0LT5HZXROYW1lKCk7CiAgICAgICBzd2l0Y2ggKHRhcmdldC0+R2V0VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUOiB7CkBAIC05MzgsMTEgKzkzNiwxMSBAQAogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VVRJTElUWToKICAgICAgICAgICAvLyBBZGQgYWxsIHV0aWxpdHkgdGFyZ2V0cywgZXhjZXB0IHRoZSBOaWdodGx5L0NvbnRpbnVvdXMvCiAgICAgICAgICAgLy8gRXhwZXJpbWVudGFsLSJzdWIidGFyZ2V0cyBhcyBlLmcuIE5pZ2h0bHlTdGFydAotICAgICAgICAgIGlmICgoKHRhcmdldE5hbWUuZmluZCgiTmlnaHRseSIpID09IDApICYmCisgICAgICAgICAgaWYgKChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIk5pZ2h0bHkiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIk5pZ2h0bHkiKSkgfHwKLSAgICAgICAgICAgICAgKCh0YXJnZXROYW1lLmZpbmQoIkNvbnRpbnVvdXMiKSA9PSAwKSAmJgorICAgICAgICAgICAgICAoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJDb250aW51b3VzIikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJDb250aW51b3VzIikpIHx8Ci0gICAgICAgICAgICAgICgodGFyZ2V0TmFtZS5maW5kKCJFeHBlcmltZW50YWwiKSA9PSAwKSAmJgorICAgICAgICAgICAgICAoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJFeHBlcmltZW50YWwiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIkV4cGVyaW1lbnRhbCIpKSkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQpAQCAtOTc1LDggKzk3Myw3IEBACiAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjbGVhbkFyZ3MgPQogICAgICAgICAgICAgICBjbVN0ckNhdCgiLUUgY2hkaXIgXCIiLCBsZ2VuLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICJcIiBcIiIsIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCAiXCIgLVAgXCIiKTsKLSAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IHRhcmdldDsKLSAgICAgICAgICAgIGNsZWFuQXJncyArPSBsZ2VuLT5HZXRUYXJnZXREaXJlY3RvcnkoZ3QpOworICAgICAgICAgICAgY2xlYW5BcmdzICs9IGxnZW4tPkdldFRhcmdldERpcmVjdG9yeSh0YXJnZXQuZ2V0KCkpOwogICAgICAgICAgICAgY2xlYW5BcmdzICs9ICIvY21ha2VfY2xlYW4uY21ha2VcIiI7CiAgICAgICAgICAgICBjbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3I6OkFwcGVuZFRhcmdldCgKICAgICAgICAgICAgICAgeG1sLCAiQ2xlYW4iLCBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgY2xlYW5BcmdzLApAQCAtOTg0LDcgKzk4MSw2IEBACiAgICAgICAgICAgfQogICAgICAgICB9IGJyZWFrOwogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlk6Ci0gICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgYnJlYWs7CiAgICAgICB9CkBAIC0xMDM2LDkgKzEwMzIsOSBAQAogICB4bWwuRW5kRWxlbWVudCgpOyAvLyBzdG9yYWdlTW9kdWxlCiAKICAgLy8gQXBwZW5kIGFkZGl0aW9uYWwgY3Byb2plY3QgY29udGVudHMgd2l0aG91dCBhcHBseWluZyBhbnkgWE1MIGZvcm1hdHRpbmcKLSAgaWYgKGNvbnN0IGNoYXIqIGV4dHJhQ1Byb2plY3RDb250ZW50cyA9CisgIGlmIChjbVByb3AgZXh0cmFDUHJvamVjdENvbnRlbnRzID0KICAgICAgICAgbWYtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJFQ0xJUFNFX0VYVFJBX0NQUk9KRUNUX0NPTlRFTlRTIikpIHsKLSAgICBmb3V0IDw8IGV4dHJhQ1Byb2plY3RDb250ZW50czsKKyAgICBmb3V0IDw8ICpleHRyYUNQcm9qZWN0Q29udGVudHM7CiAgIH0KIAogICB4bWwuRW5kRWxlbWVudCgpOyAvLyBjcHJvamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvci5oIGIvU291cmNlL2NtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvci5oCmluZGV4IGZmNGM1OWUuLmE3YWE1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhRWNsaXBzZUNEVDRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21FeHRyYUVjbGlwc2VDRFQ0R2VuZXJhdG9yLmgKQEAgLTg2LDcgKzg2LDcgQEAKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGVtaXR0ZWREaXJzKTsKIAogICBzdGF0aWMgdm9pZCBBZGRFbnZWYXIoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIGVudlZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3IqIGxnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3ImIGxnKTsKIAogICB2b2lkIFdyaXRlR3JvdXBzKHN0ZDo6dmVjdG9yPGNtU291cmNlR3JvdXA+IGNvbnN0JiBzb3VyY2VHcm91cHMsCiAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGxpbmtOYW1lLCBjbVhNTFdyaXRlciYgeG1sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUV4dHJhS2F0ZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHRyYUthdGVHZW5lcmF0b3IuY3h4CmluZGV4IGU4YzlkZDAuLjAxZmFjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhS2F0ZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtRXh0cmFLYXRlR2VuZXJhdG9yLmN4eApAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlICJjbUV4dHJhS2F0ZUdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtNDAsMjEgKzQxLDIxIEBACiAKIHZvaWQgY21FeHRyYUthdGVHZW5lcmF0b3I6OkdlbmVyYXRlKCkKIHsKLSAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpWzBdOworICBjb25zdCBhdXRvJiBsZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKClbMF07CiAgIGNvbnN0IGNtTWFrZWZpbGUqIG1mID0gbGctPkdldE1ha2VmaWxlKCk7CiAgIHRoaXMtPlByb2plY3ROYW1lID0gdGhpcy0+R2VuZXJhdGVQcm9qZWN0TmFtZSgKICAgICBsZy0+R2V0UHJvamVjdE5hbWUoKSwgbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIiksCiAgICAgdGhpcy0+R2V0UGF0aEJhc2VuYW1lKGxnLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSkpOwogICB0aGlzLT5Vc2VOaW5qYSA9ICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldE5hbWUoKSA9PSAiTmluamEiKTsKIAotICB0aGlzLT5DcmVhdGVLYXRlUHJvamVjdEZpbGUobGcpOwotICB0aGlzLT5DcmVhdGVEdW1teUthdGVQcm9qZWN0RmlsZShsZyk7CisgIHRoaXMtPkNyZWF0ZUthdGVQcm9qZWN0RmlsZSgqbGcpOworICB0aGlzLT5DcmVhdGVEdW1teUthdGVQcm9qZWN0RmlsZSgqbGcpOwogfQogCiB2b2lkIGNtRXh0cmFLYXRlR2VuZXJhdG9yOjpDcmVhdGVLYXRlUHJvamVjdEZpbGUoCi0gIGNvbnN0IGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBjb25zdAorICBjb25zdCBjbUxvY2FsR2VuZXJhdG9yJiBsZykgY29uc3QKIHsKLSAgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSBjbVN0ckNhdChsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCksICIvLmthdGVwcm9qZWN0Iik7CisgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gY21TdHJDYXQobGcuR2V0QmluYXJ5RGlyZWN0b3J5KCksICIvLmthdGVwcm9qZWN0Iik7CiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmb3V0KGZpbGVuYW1lKTsKICAgaWYgKCFmb3V0KSB7CiAgICAgcmV0dXJuOwpAQCAtNjQsMjEgKzY1LDIxIEBACiAgIGZvdXQgPDwKICAgICAie1xuIgogICAgICJcdFwibmFtZVwiOiBcIiIgPDwgdGhpcy0+UHJvamVjdE5hbWUgPDwgIlwiLFxuIgotICAgICJcdFwiZGlyZWN0b3J5XCI6IFwiIiA8PCBsZy0+R2V0U291cmNlRGlyZWN0b3J5KCkgPDwgIlwiLFxuIgorICAgICJcdFwiZGlyZWN0b3J5XCI6IFwiIiA8PCBsZy5HZXRTb3VyY2VEaXJlY3RvcnkoKSA8PCAiXCIsXG4iCiAgICAgIlx0XCJmaWxlc1wiOiBbIHsgIiA8PCB0aGlzLT5HZW5lcmF0ZUZpbGVzU3RyaW5nKGxnKSA8PCAifSBdLFxuIjsKICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgIHRoaXMtPldyaXRlVGFyZ2V0cyhsZywgZm91dCk7CiAgIGZvdXQgPDwgIn1cbiI7CiB9CiAKLXZvaWQgY21FeHRyYUthdGVHZW5lcmF0b3I6OldyaXRlVGFyZ2V0cyhjb25zdCBjbUxvY2FsR2VuZXJhdG9yKiBsZywKK3ZvaWQgY21FeHRyYUthdGVHZW5lcmF0b3I6OldyaXRlVGFyZ2V0cyhjb25zdCBjbUxvY2FsR2VuZXJhdG9yJiBsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZvdXQpIGNvbnN0CiB7Ci0gIGNtTWFrZWZpbGUgY29uc3QqIG1mID0gbGctPkdldE1ha2VmaWxlKCk7CisgIGNtTWFrZWZpbGUgY29uc3QqIG1mID0gbGcuR2V0TWFrZWZpbGUoKTsKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2UgPSBtZi0+R2V0UmVxdWlyZWREZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iKTsKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2VBcmdzID0KICAgICBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0tBVEVfTUFLRV9BUkdVTUVOVFMiKTsKLSAgc3RkOjpzdHJpbmcgY29uc3QmIGhvbWVPdXRwdXREaXIgPSBsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBob21lT3V0cHV0RGlyID0gbGcuR2V0QmluYXJ5RGlyZWN0b3J5KCk7CiAKICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICBmb3V0IDw8CkBAIC0xMDksMTQgKzExMCwxMiBAQAogCiAgIC8vIGFkZCBhbGwgZXhlY3V0YWJsZSBhbmQgbGlicmFyeSB0YXJnZXRzIGFuZCBzb21lIG9mIHRoZSBHTE9CQUwKICAgLy8gYW5kIFVUSUxJVFkgdGFyZ2V0cwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDoKLSAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpKSB7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9Ci0gICAgICBsb2NhbEdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkgeworICAgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBsb2NhbEdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwogICAgIHN0ZDo6c3RyaW5nIGN1cnJlbnREaXIgPSBsb2NhbEdlbi0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwogICAgIGJvb2wgdG9wTGV2ZWwgPSAoY3VycmVudERpciA9PSBsb2NhbEdlbi0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwogCi0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHRhcmdldE5hbWUgPSB0YXJnZXQtPkdldE5hbWUoKTsKICAgICAgIHN3aXRjaCAodGFyZ2V0LT5HZXRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQ6IHsKQEAgLTEzMCw5ICsxMjksOCBAQAogICAgICAgICAgICAgaWYgKHRhcmdldE5hbWUgPT0gImVkaXRfY2FjaGUiKSB7CiAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVkaXRDb21tYW5kID0KICAgICAgICAgICAgICAgICBsb2NhbEdlbi0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfRURJVF9DT01NQU5EIik7Ci0gICAgICAgICAgICAgIGlmIChlZGl0Q29tbWFuZCA9PSBudWxscHRyKSB7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Ryc3RyKGVkaXRDb21tYW5kLCAiY2NtYWtlIikgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgICBpZiAoZWRpdENvbW1hbmQgPT0gbnVsbHB0ciB8fAorICAgICAgICAgICAgICAgICAgc3Ryc3RyKGVkaXRDb21tYW5kLCAiY2NtYWtlIikgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgIGluc2VydFRhcmdldCA9IGZhbHNlOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNDUsMTEgKzE0MywxMSBAQAogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VVRJTElUWToKICAgICAgICAgICAvLyBBZGQgYWxsIHV0aWxpdHkgdGFyZ2V0cywgZXhjZXB0IHRoZSBOaWdodGx5L0NvbnRpbnVvdXMvCiAgICAgICAgICAgLy8gRXhwZXJpbWVudGFsLSJzdWIidGFyZ2V0cyBhcyBlLmcuIE5pZ2h0bHlTdGFydAotICAgICAgICAgIGlmICgoKHRhcmdldE5hbWUuZmluZCgiTmlnaHRseSIpID09IDApICYmCisgICAgICAgICAgaWYgKChjbUhhc0xpdGVyYWxQcmVmaXgodGFyZ2V0TmFtZSwgIk5pZ2h0bHkiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIk5pZ2h0bHkiKSkgfHwKLSAgICAgICAgICAgICAgKCh0YXJnZXROYW1lLmZpbmQoIkNvbnRpbnVvdXMiKSA9PSAwKSAmJgorICAgICAgICAgICAgICAoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJDb250aW51b3VzIikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJDb250aW51b3VzIikpIHx8Ci0gICAgICAgICAgICAgICgodGFyZ2V0TmFtZS5maW5kKCJFeHBlcmltZW50YWwiKSA9PSAwKSAmJgorICAgICAgICAgICAgICAoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJFeHBlcmltZW50YWwiKSAmJgogICAgICAgICAgICAgICAgKHRhcmdldE5hbWUgIT0gIkV4cGVyaW1lbnRhbCIpKSkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQpAQCAtMjA1LDEwICsyMDMsMTAgQEAKIH0KIAogdm9pZCBjbUV4dHJhS2F0ZUdlbmVyYXRvcjo6Q3JlYXRlRHVtbXlLYXRlUHJvamVjdEZpbGUoCi0gIGNvbnN0IGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBjb25zdAorICBjb25zdCBjbUxvY2FsR2VuZXJhdG9yJiBsZykgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPQotICAgIGNtU3RyQ2F0KGxnLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLCB0aGlzLT5Qcm9qZWN0TmFtZSwgIi5rYXRlcHJvamVjdCIpOworICAgIGNtU3RyQ2F0KGxnLkdldEJpbmFyeURpcmVjdG9yeSgpLCAnLycsIHRoaXMtPlByb2plY3ROYW1lLCAiLmthdGVwcm9qZWN0Iik7CiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmb3V0KGZpbGVuYW1lKTsKICAgaWYgKCFmb3V0KSB7CiAgICAgcmV0dXJuOwpAQCAtMjE5LDI2ICsyMTcsMjUgQEAKIH0KIAogc3RkOjpzdHJpbmcgY21FeHRyYUthdGVHZW5lcmF0b3I6OkdlbmVyYXRlRmlsZXNTdHJpbmcoCi0gIGNvbnN0IGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBjb25zdAorICBjb25zdCBjbUxvY2FsR2VuZXJhdG9yJiBsZykgY29uc3QKIHsKLSAgc3RkOjpzdHJpbmcgcyA9IGNtU3RyQ2F0KGxnLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSwgIi8uZ2l0Iik7CisgIHN0ZDo6c3RyaW5nIHMgPSBjbVN0ckNhdChsZy5HZXRTb3VyY2VEaXJlY3RvcnkoKSwgIi8uZ2l0Iik7CiAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHMpKSB7CiAgICAgcmV0dXJuICJcImdpdFwiOiAxICI7CiAgIH0KIAotICBzID0gY21TdHJDYXQobGctPkdldFNvdXJjZURpcmVjdG9yeSgpLCAiLy5zdm4iKTsKKyAgcyA9IGNtU3RyQ2F0KGxnLkdldFNvdXJjZURpcmVjdG9yeSgpLCAiLy5zdm4iKTsKICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMocykpIHsKICAgICByZXR1cm4gIlwic3ZuXCI6IDEgIjsKICAgfQogCi0gIHMgPSBjbVN0ckNhdChsZy0+R2V0U291cmNlRGlyZWN0b3J5KCksICcvJyk7CisgIHMgPSBjbVN0ckNhdChsZy5HZXRTb3VyY2VEaXJlY3RvcnkoKSwgJy8nKTsKIAogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZmlsZXM7CiAgIHN0ZDo6c3RyaW5nIHRtcDsKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBsZ3MgPQotICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCk7CisgIGNvbnN0IGF1dG8mIGxncyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TG9jYWxHZW5lcmF0b3JzKCk7CiAKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZ2VuIDogbGdzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGdlbiA6IGxncykgewogICAgIGNtTWFrZWZpbGUqIG1ha2VmaWxlID0gbGdlbi0+R2V0TWFrZWZpbGUoKTsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGxpc3RGaWxlcyA9IG1ha2VmaWxlLT5HZXRMaXN0RmlsZXMoKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsaXN0RmlsZSA6IGxpc3RGaWxlcykgewpAQCAtMjQ4LDggKzI0NSw3IEBACiAgICAgICB9CiAgICAgfQogCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4mIHNvdXJjZXMgPSBtYWtlZmlsZS0+R2V0U291cmNlRmlsZXMoKTsKLSAgICBmb3IgKGNtU291cmNlRmlsZSogc2YgOiBzb3VyY2VzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBzZiA6IG1ha2VmaWxlLT5HZXRTb3VyY2VGaWxlcygpKSB7CiAgICAgICBpZiAoc2YtPkdldElzR2VuZXJhdGVkKCkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CkBAIC0yNzcsNyArMjczLDcgQEAKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0eXBlLAogICBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgcmV0dXJuIG5hbWUgKyAodHlwZS5lbXB0eSgpID8gIiIgOiAiLSIpICsgdHlwZSArICJAIiArIHBhdGg7CisgIHJldHVybiBuYW1lICsgKHR5cGUuZW1wdHkoKSA/ICIiIDogIi0iKSArIHR5cGUgKyAnQCcgKyBwYXRoOwogfQogCiBzdGQ6OnN0cmluZyBjbUV4dHJhS2F0ZUdlbmVyYXRvcjo6R2V0UGF0aEJhc2VuYW1lKApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXh0cmFLYXRlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21FeHRyYUthdGVHZW5lcmF0b3IuaAppbmRleCBiZTEzNzZhLi4xZmI4MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHRyYUthdGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21FeHRyYUthdGVHZW5lcmF0b3IuaApAQCAtMjUsMTYgKzI1LDE2IEBACiAgIHZvaWQgR2VuZXJhdGUoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgdm9pZCBDcmVhdGVLYXRlUHJvamVjdEZpbGUoY29uc3QgY21Mb2NhbEdlbmVyYXRvciogbGcpIGNvbnN0OwotICB2b2lkIENyZWF0ZUR1bW15S2F0ZVByb2plY3RGaWxlKGNvbnN0IGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBjb25zdDsKLSAgdm9pZCBXcml0ZVRhcmdldHMoY29uc3QgY21Mb2NhbEdlbmVyYXRvciogbGcsCisgIHZvaWQgQ3JlYXRlS2F0ZVByb2plY3RGaWxlKGNvbnN0IGNtTG9jYWxHZW5lcmF0b3ImIGxnKSBjb25zdDsKKyAgdm9pZCBDcmVhdGVEdW1teUthdGVQcm9qZWN0RmlsZShjb25zdCBjbUxvY2FsR2VuZXJhdG9yJiBsZykgY29uc3Q7CisgIHZvaWQgV3JpdGVUYXJnZXRzKGNvbnN0IGNtTG9jYWxHZW5lcmF0b3ImIGxnLAogICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZvdXQpIGNvbnN0OwogICB2b2lkIEFwcGVuZFRhcmdldChjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlLCBjb25zdCBzdGQ6OnN0cmluZyYgbWFrZUFyZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgaG9tZU91dHB1dERpcikgY29uc3Q7CiAKLSAgc3RkOjpzdHJpbmcgR2VuZXJhdGVGaWxlc1N0cmluZyhjb25zdCBjbUxvY2FsR2VuZXJhdG9yKiBsZykgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdlbmVyYXRlRmlsZXNTdHJpbmcoY29uc3QgY21Mb2NhbEdlbmVyYXRvciYgbGcpIGNvbnN0OwogICBzdGQ6OnN0cmluZyBHZXRQYXRoQmFzZW5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpIGNvbnN0OwogICBzdGQ6OnN0cmluZyBHZW5lcmF0ZVByb2plY3ROYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0eXBlLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmN4eAppbmRleCA0OTUzMjRjLi4zZTI2NWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmN4eApAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlICJjbUV4dHJhU3VibGltZVRleHRHZW5lcmF0b3IuaCIKIAogI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CkBAIC0xNiw2ICsxNyw3IEBACiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtMTgyLDggKzE4NCw4IEBACiAgIC8vIGFuZCBVVElMSVRZIHRhcmdldHMKICAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IGxncykgewogICAgIGNtTWFrZWZpbGUqIG1ha2VmaWxlID0gbGctPkdldE1ha2VmaWxlKCk7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0TmFtZSA9IHRhcmdldC0+R2V0TmFtZSgpOwogICAgICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVDogewpAQCAtMTk4LDExICsyMDAsMTEgQEAKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6CiAgICAgICAgICAgLy8gQWRkIGFsbCB1dGlsaXR5IHRhcmdldHMsIGV4Y2VwdCB0aGUgTmlnaHRseS9Db250aW51b3VzLwogICAgICAgICAgIC8vIEV4cGVyaW1lbnRhbC0ic3ViInRhcmdldHMgYXMgZS5nLiBOaWdodGx5U3RhcnQKLSAgICAgICAgICBpZiAoKCh0YXJnZXROYW1lLmZpbmQoIk5pZ2h0bHkiKSA9PSAwKSAmJgorICAgICAgICAgIGlmICgoY21IYXNMaXRlcmFsUHJlZml4KHRhcmdldE5hbWUsICJOaWdodGx5IikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJOaWdodGx5IikpIHx8Ci0gICAgICAgICAgICAgICgodGFyZ2V0TmFtZS5maW5kKCJDb250aW51b3VzIikgPT0gMCkgJiYKKyAgICAgICAgICAgICAgKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiQ29udGludW91cyIpICYmCiAgICAgICAgICAgICAgICAodGFyZ2V0TmFtZSAhPSAiQ29udGludW91cyIpKSB8fAotICAgICAgICAgICAgICAoKHRhcmdldE5hbWUuZmluZCgiRXhwZXJpbWVudGFsIikgPT0gMCkgJiYKKyAgICAgICAgICAgICAgKGNtSGFzTGl0ZXJhbFByZWZpeCh0YXJnZXROYW1lLCAiRXhwZXJpbWVudGFsIikgJiYKICAgICAgICAgICAgICAgICh0YXJnZXROYW1lICE9ICJFeHBlcmltZW50YWwiKSkpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTIxNiwxMSArMjE4LDExIEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOgogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlk6IHsKLSAgICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXQoZm91dCwgdGFyZ2V0TmFtZSwgbGcsIHRhcmdldCwgbWFrZS5jX3N0cigpLAorICAgICAgICAgIHRoaXMtPkFwcGVuZFRhcmdldChmb3V0LCB0YXJnZXROYW1lLCBsZywgdGFyZ2V0LmdldCgpLCBtYWtlLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VmaWxlLCBjb21waWxlci5jX3N0cigpLCBzb3VyY2VGaWxlRmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgICBzdGQ6OnN0cmluZyBmYXN0VGFyZ2V0ID0gY21TdHJDYXQodGFyZ2V0TmFtZSwgIi9mYXN0Iik7Ci0gICAgICAgICAgdGhpcy0+QXBwZW5kVGFyZ2V0KGZvdXQsIGZhc3RUYXJnZXQsIGxnLCB0YXJnZXQsIG1ha2UuY19zdHIoKSwKKyAgICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXQoZm91dCwgZmFzdFRhcmdldCwgbGcsIHRhcmdldC5nZXQoKSwgbWFrZS5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlZmlsZSwgY29tcGlsZXIuY19zdHIoKSwgc291cmNlRmlsZUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgIH0gYnJlYWs7CkBAIC0yOTYsOCArMjk4LDcgQEAKICAgZm91dCA8PCAiXHR7XG5cdFx0XHRcIm5hbWVcIjogXCIiIDw8IGxnLT5HZXRQcm9qZWN0TmFtZSgpIDw8ICIgLSAiCiAgICAgICAgPDwgdGFyZ2V0TmFtZSA8PCAiXCIsXG4iOwogICBmb3V0IDw8ICJcdFx0XHRcImNtZFwiOiBbIgotICAgICAgIDw8IHRoaXMtPkJ1aWxkTWFrZUNvbW1hbmQobWFrZSwgbWFrZWZpbGVOYW1lLmNfc3RyKCksIHRhcmdldE5hbWUpCi0gICAgICAgPDwgIl0sXG4iOworICAgICAgIDw8IHRoaXMtPkJ1aWxkTWFrZUNvbW1hbmQobWFrZSwgbWFrZWZpbGVOYW1lLCB0YXJnZXROYW1lKSA8PCAiXSxcbiI7CiAgIGZvdXQgPDwgIlx0XHRcdFwid29ya2luZ19kaXJcIjogXCIke3Byb2plY3RfcGF0aH1cIixcbiI7CiAgIGZvdXQgPDwgIlx0XHRcdFwiZmlsZV9yZWdleFwiOiBcIiIKICAgICAgICAgICAiXiguLlteOl0qKSg/Ojp8XFxcXCgpKFswLTldKykoPzo6fFxcXFwpKSg/OihbMC05XSspOik/XFxcXHMqKC4qKSIKQEAgLTMwOCw3ICszMDksOCBAQAogLy8gQ3JlYXRlIHRoZSBjb21tYW5kIGxpbmUgZm9yIGJ1aWxkaW5nIHRoZSBnaXZlbiB0YXJnZXQgdXNpbmcgdGhlIHNlbGVjdGVkCiAvLyBtYWtlCiBzdGQ6OnN0cmluZyBjbUV4dHJhU3VibGltZVRleHRHZW5lcmF0b3I6OkJ1aWxkTWFrZUNvbW1hbmQoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlLCBjb25zdCBjaGFyKiBtYWtlZmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCkKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlZmlsZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCkKIHsKICAgc3RkOjpzdHJpbmcgY29tbWFuZCA9IGNtU3RyQ2F0KCciJywgbWFrZSwgJyInKTsKICAgc3RkOjpzdHJpbmcgZ2VuZXJhdG9yID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXROYW1lKCk7CkBAIC0zMjYsNyArMzI4LDcgQEAKICAgICBzdGQ6OnN0cmluZyBtYWtlZmlsZU5hbWU7CiAgICAgaWYgKGdlbmVyYXRvciA9PSAiTWluR1cgTWFrZWZpbGVzIikgewogICAgICAgLy8gbm8gZXNjYXBpbmcgb2Ygc3BhY2VzIGluIHRoaXMgY2FzZSwgc2VlCi0gICAgICAvLyBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvMTAwMTQKKyAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzEwMDE0CiAgICAgICBtYWtlZmlsZU5hbWUgPSBtYWtlZmlsZTsKICAgICB9IGVsc2UgewogICAgICAgbWFrZWZpbGVOYW1lID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aChtYWtlZmlsZSk7CkBAIC0zNDcsNiArMzQ5LDEzIEBACiAgIGlmIChsYW5ndWFnZS5lbXB0eSgpKSB7CiAgICAgbGFuZ3VhZ2UgPSAiQyI7CiAgIH0KKworICAvLyBleHBsaWNpdGx5IGFkZCB0aGUgZXhwbGljaXQgbGFuZ3VhZ2UgZmxhZyBiZWZvcmUgYW55IG90aGVyIGZsYWcKKyAgLy8gdGhpcyB3YXkgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB1c2VyIGZsYWdzIGlzIG1haW50YWluZWQKKyAgaWYgKHNvdXJjZS0+R2V0UHJvcGVydHkoIkxBTkdVQUdFIikpIHsKKyAgICBsZy0+QXBwZW5kRmVhdHVyZU9wdGlvbnMoZmxhZ3MsIGxhbmd1YWdlLCAiRVhQTElDSVRfTEFOR1VBR0UiKTsKKyAgfQorCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcgPQogICAgIGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQlVJTERfVFlQRSIpOwogCkBAIC0zNTcsMTQgKzM2NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlKTsKIAogICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX0ZMQUdTKCJDT01QSUxFX0ZMQUdTIik7Ci0gIGlmIChjb25zdCBjaGFyKiBjZmxhZ3MgPSBzb3VyY2UtPkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7Ci0gICAgbGctPkFwcGVuZEZsYWdzKGZsYWdzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNmbGFncywgQ09NUElMRV9GTEFHUykpOworICBpZiAoY21Qcm9wIGNmbGFncyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9GTEFHUykpIHsKKyAgICBsZy0+QXBwZW5kRmxhZ3MoZmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNmbGFncywgQ09NUElMRV9GTEFHUykpOwogICB9CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9PUFRJT05TKCJDT01QSUxFX09QVElPTlMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvcHRpb25zID0gc291cmNlLT5HZXRQcm9wZXJ0eShDT01QSUxFX09QVElPTlMpKSB7CisgIGlmIChjbVByb3AgY29wdGlvbnMgPSBzb3VyY2UtPkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKICAgICBsZy0+QXBwZW5kQ29tcGlsZU9wdGlvbnMoCi0gICAgICBmbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjb3B0aW9ucywgQ09NUElMRV9PUFRJT05TKSk7CisgICAgICBmbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUykpOwogICB9CiAKICAgcmV0dXJuIGZsYWdzOwpAQCAtMzg2LDE3ICszOTUsMTcgQEAKICAgLy8gQWRkIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyBmb3IgdGhpcyB0YXJnZXQgYW5kIGNvbmZpZ3VyYXRpb24uCiAgIGxnLT5HZXRUYXJnZXREZWZpbmVzKHRhcmdldCwgY29uZmlnLCBsYW5ndWFnZSwgZGVmaW5lcyk7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfREVGSU5JVElPTlMoIkNPTVBJTEVfREVGSU5JVElPTlMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKKyAgaWYgKGNtUHJvcCBjb21waWxlX2RlZnMgPSBzb3VyY2UtPkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CiAgICAgbGctPkFwcGVuZERlZmluZXMoCi0gICAgICBkZWZpbmVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykpOworICAgICAgZGVmaW5lcywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBkZWZQcm9wTmFtZSA9CiAgICAgY21TdHJDYXQoIkNPTVBJTEVfREVGSU5JVElPTlNfIiwgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZykpOwotICBpZiAoY29uc3QgY2hhciogY29uZmlnX2NvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CisgIGlmIChjbVByb3AgY29uZmlnX2NvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CiAgICAgbGctPkFwcGVuZERlZmluZXMoCiAgICAgICBkZWZpbmVzLAotICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjb25maWdfY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CisgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb25maWdfY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBkZWZpbmVzU3RyaW5nOwpAQCAtNDE4LDkgKzQyNyw5IEBACiAKICAgLy8gQWRkIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRoaXMgc291cmNlIGZpbGUKICAgY29uc3Qgc3RkOjpzdHJpbmcgSU5DTFVERV9ESVJFQ1RPUklFUygiSU5DTFVERV9ESVJFQ1RPUklFUyIpOwotICBpZiAoY29uc3QgY2hhciogY2luY2x1ZGVzID0gc291cmNlLT5HZXRQcm9wZXJ0eShJTkNMVURFX0RJUkVDVE9SSUVTKSkgeworICBpZiAoY21Qcm9wIGNpbmNsdWRlcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoSU5DTFVERV9ESVJFQ1RPUklFUykpIHsKICAgICBsZy0+QXBwZW5kSW5jbHVkZURpcmVjdG9yaWVzKAotICAgICAgaW5jbHVkZXMsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY2luY2x1ZGVzLCBJTkNMVURFX0RJUkVDVE9SSUVTKSwKKyAgICAgIGluY2x1ZGVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjaW5jbHVkZXMsIElOQ0xVREVfRElSRUNUT1JJRVMpLAogICAgICAgKnNvdXJjZSk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5oIGIvU291cmNlL2NtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5oCmluZGV4IDdlOGYyZDQuLjA3OGNmZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUV4dHJhU3VibGltZVRleHRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yLmgKQEAgLTQ0LDcgKzQ0LDggQEAKICAgLyoqIFJldHVybnMgdGhlIGJ1aWxkIGNvbW1hbmQgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZCB0byBidWlsZCB0aGUKICAgICogIHNwZWNpZmllZCB0YXJnZXQuCiAgICAqLwotICBzdGQ6OnN0cmluZyBCdWlsZE1ha2VDb21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlLCBjb25zdCBjaGFyKiBtYWtlZmlsZSwKKyAgc3RkOjpzdHJpbmcgQnVpbGRNYWtlQ29tbWFuZChjb25zdCBzdGQ6OnN0cmluZyYgbWFrZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFrZWZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCk7CiAgIC8qKiBBcHBlbmRzIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IHRvIHRoZSBnZW5lcmF0ZWQgcHJvamVjdCBmaWxlIGFzIGEgU3VibGltZQogICAgKiAgVGV4dCBidWlsZCBzeXN0ZW0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GTFRLV3JhcFVJQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21GTFRLV3JhcFVJQ29tbWFuZC5jeHgKaW5kZXggMTE4NDRlNC4uZDg4NjE3YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRkxUS1dyYXBVSUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUZMVEtXcmFwVUlDb21tYW5kLmN4eApAQCAtNiwxNSArNiwyMCBAQAogCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kTGluZXMuaCIKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgorI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgorI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCisjaW5jbHVkZSAiY21ha2UuaCIKIAogY2xhc3MgY21UYXJnZXQ7CiAKLXN0YXRpYyB2b2lkIEZpbmFsQWN0aW9uKGNtTWFrZWZpbGUmIG1ha2VmaWxlLCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkKK3N0YXRpYyB2b2lkIEZpbmFsQWN0aW9uKGNtTWFrZWZpbGUmIG1ha2VmaWxlLCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQpCiB7CiAgIC8vIHBlb3BsZSBzaG91bGQgYWRkIHRoZSBzcmNzIHRvIHRoZSB0YXJnZXQgdGhlbXNlbHZlcywgYnV0IHRoZSBvbGQgY29tbWFuZAogICAvLyBkaWRuJ3Qgc3VwcG9ydCB0aGF0LCBzbyBjaGVjayBhbmQgc2VlIGlmIHRoZXkgYWRkZWQgdGhlIGZpbGVzIGluIGFuZCBpZgpAQCAtMjYsNyArMzEsOCBAQAogICAgICAgIi4gIFRoZSBwcm9ibGVtIHdhcyBmb3VuZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSBzb3VyY2UgZGlyZWN0b3J5OiAiLAogICAgICAgbWFrZWZpbGUuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLAogICAgICAgIi4gIFRoaXMgRkxUS19XUkFQX1VJIGNhbGwgd2lsbCBiZSBpZ25vcmVkLiIpOwotICAgIGNtU3lzdGVtVG9vbHM6Ok1lc3NhZ2UobXNnLCAiV2FybmluZyIpOworICAgIG1ha2VmaWxlLkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpBVVRIT1JfRVJST1IsIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZmJ0KTsKICAgfQogfQogCkBAIC0xMTYsNyArMTIyLDkgQEAKICAgc3RkOjpzdHJpbmcgY29uc3QgdmFyTmFtZSA9IHRhcmdldCArICJfRkxUS19VSV9TUkNTIjsKICAgbWYuQWRkRGVmaW5pdGlvbih2YXJOYW1lLCBzb3VyY2VMaXN0VmFsdWUpOwogCi0gIG1mLkFkZEZpbmFsQWN0aW9uKAotICAgIFt0YXJnZXRdKGNtTWFrZWZpbGUmIG1ha2VmaWxlKSB7IEZpbmFsQWN0aW9uKG1ha2VmaWxlLCB0YXJnZXQpOyB9KTsKKyAgbWYuQWRkR2VuZXJhdG9yQWN0aW9uKAorICAgIFt0YXJnZXRdKGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KSB7CisgICAgICBGaW5hbEFjdGlvbigqbGcuR2V0TWFrZWZpbGUoKSwgdGFyZ2V0LCBsZmJ0KTsKKyAgICB9KTsKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaWxlQVBJLmN4eCBiL1NvdXJjZS9jbUZpbGVBUEkuY3h4CmluZGV4IGE1NmFkMjIuLmMyYWIyZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbGVBUEkuY3h4CisrKyBiL1NvdXJjZS9jbUZpbGVBUEkuY3h4CkBAIC02NjUsNyArNjY1LDcgQEAKIAogLy8gVGhlICJjb2RlbW9kZWwiIG9iamVjdCBraW5kLgogCi1zdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IENvZGVNb2RlbFYyTWlub3IgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBDb2RlTW9kZWxWMk1pbm9yID0gMjsKIAogdm9pZCBjbUZpbGVBUEk6OkJ1aWxkQ2xpZW50UmVxdWVzdENvZGVNb2RlbCgKICAgQ2xpZW50UmVxdWVzdCYgciwgc3RkOjp2ZWN0b3I8UmVxdWVzdFZlcnNpb24+IGNvbnN0JiB2ZXJzaW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVBUEkuaCBiL1NvdXJjZS9jbUZpbGVBUEkuaAppbmRleCBlMTgzZTBkLi5hZTA3NjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlQVBJLmgKKysrIGIvU291cmNlL2NtRmlsZUFQSS5oCkBAIC0xMSw5ICsxMSw5IEBACiAjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3JlYWRlci5oIgotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3dyaXRlci5oIgorI2luY2x1ZGUgPGNtM3AvanNvbi9yZWFkZXIuaD4KKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKyNpbmNsdWRlIDxjbTNwL2pzb24vd3JpdGVyLmg+CiAKIGNsYXNzIGNtYWtlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaWxlQVBJQ01ha2VGaWxlcy5jeHggYi9Tb3VyY2UvY21GaWxlQVBJQ01ha2VGaWxlcy5jeHgKaW5kZXggZjQxOTk5Ny4uMWU0ZjNiNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUFQSUNNYWtlRmlsZXMuY3h4CisrKyBiL1NvdXJjZS9jbUZpbGVBUElDTWFrZUZpbGVzLmN4eApAQCAtMiwxMCArMiwxMSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21GaWxlQVBJQ01ha2VGaWxlcy5oIgogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CiAKICNpbmNsdWRlICJjbUZpbGVBUEkuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgpAQCAtNjcsNyArNjgsNyBAQAogCiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9CiAgICAgdGhpcy0+RmlsZUFQSS5HZXRDTWFrZUluc3RhbmNlKCktPkdldEdsb2JhbEdlbmVyYXRvcigpOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqIGxnIDogZ2ctPkdldExvY2FsR2VuZXJhdG9ycygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiBnZy0+R2V0TG9jYWxHZW5lcmF0b3JzKCkpIHsKICAgICBjbU1ha2VmaWxlIGNvbnN0KiBtZiA9IGxnLT5HZXRNYWtlZmlsZSgpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUgOiBtZi0+R2V0TGlzdEZpbGVzKCkpIHsKICAgICAgIGlucHV0cy5hcHBlbmQodGhpcy0+RHVtcElucHV0KGZpbGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVBUElDTWFrZUZpbGVzLmggYi9Tb3VyY2UvY21GaWxlQVBJQ01ha2VGaWxlcy5oCmluZGV4IGE4NTFjMzIuLjFhZTFlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbGVBUElDTWFrZUZpbGVzLmgKKysrIGIvU291cmNlL2NtRmlsZUFQSUNNYWtlRmlsZXMuaApAQCAtNSw3ICs1LDcgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CiAKIGNsYXNzIGNtRmlsZUFQSTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUFQSUNhY2hlLmN4eCBiL1NvdXJjZS9jbUZpbGVBUElDYWNoZS5jeHgKaW5kZXggZWY3Nzc5NS4uM2JhOTQzYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUFQSUNhY2hlLmN4eAorKysgYi9Tb3VyY2UvY21GaWxlQVBJQ2FjaGUuY3h4CkBAIC03LDkgKzcsMTAgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KIAogI2luY2x1ZGUgImNtRmlsZUFQSS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKIApAQCAtNjcsNyArNjgsNyBAQAogICBlbnRyeVsibmFtZSJdID0gbmFtZTsKICAgZW50cnlbInR5cGUiXSA9CiAgICAgY21TdGF0ZTo6Q2FjaGVFbnRyeVR5cGVUb1N0cmluZyh0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVR5cGUobmFtZSkpOwotICBlbnRyeVsidmFsdWUiXSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUobmFtZSk7CisgIGVudHJ5WyJ2YWx1ZSJdID0gdGhpcy0+U3RhdGUtPkdldFNhZmVDYWNoZUVudHJ5VmFsdWUobmFtZSk7CiAKICAgSnNvbjo6VmFsdWUgcHJvcGVydGllcyA9IHRoaXMtPkR1bXBFbnRyeVByb3BlcnRpZXMobmFtZSk7CiAgIGlmICghcHJvcGVydGllcy5lbXB0eSgpKSB7CkBAIC05NCw3ICs5NSw4IEBACiB7CiAgIEpzb246OlZhbHVlIHByb3BlcnR5ID0gSnNvbjo6b2JqZWN0VmFsdWU7CiAgIHByb3BlcnR5WyJuYW1lIl0gPSBwcm9wOwotICBwcm9wZXJ0eVsidmFsdWUiXSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkobmFtZSwgcHJvcCk7CisgIGNtUHJvcCBwID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShuYW1lLCBwcm9wKTsKKyAgcHJvcGVydHlbInZhbHVlIl0gPSBwID8gKnAgOiAiIjsKICAgcmV0dXJuIHByb3BlcnR5OwogfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUFQSUNhY2hlLmggYi9Tb3VyY2UvY21GaWxlQVBJQ2FjaGUuaAppbmRleCAwOWQ5ZTFjLi4yZjMwYzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlQVBJQ2FjaGUuaAorKysgYi9Tb3VyY2UvY21GaWxlQVBJQ2FjaGUuaApAQCAtNSw3ICs1LDcgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CiAKIGNsYXNzIGNtRmlsZUFQSTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5jeHggYi9Tb3VyY2UvY21GaWxlQVBJQ29kZW1vZGVsLmN4eAppbmRleCBkNzk5M2M3Li5lOWFmMjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlQVBJQ29kZW1vZGVsLmN4eAorKysgYi9Tb3VyY2UvY21GaWxlQVBJQ29kZW1vZGVsLmN4eApAQCAtMTUsOSArMTUsMTAgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKwogI2luY2x1ZGUgImNtQ3J5cHRvSGFzaC5oIgogI2luY2x1ZGUgImNtRmlsZUFQSS5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgpAQCAtMzAsNiArMzEsNyBAQAogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU291cmNlR3JvdXAuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCkBAIC0xNzMsNiArMTc1LDM4IEBACiAgIH0KIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgSkJUcworeworcHVibGljOgorICBKQlRzKFQgdiA9IFQoKSwgc3RkOjp2ZWN0b3I8SkJUSW5kZXg+IGlkcyA9IHN0ZDo6dmVjdG9yPEpCVEluZGV4PigpKQorICAgIDogVmFsdWUoc3RkOjptb3ZlKHYpKQorICAgICwgQmFja3RyYWNlcyhzdGQ6Om1vdmUoaWRzKSkKKyAgeworICB9CisgIFQgVmFsdWU7CisgIHN0ZDo6dmVjdG9yPEpCVEluZGV4PiBCYWNrdHJhY2VzOworICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KEpCVHM8VD4gY29uc3QmIGwsIEpCVHM8VD4gY29uc3QmIHIpCisgIHsKKyAgICBpZiAoKGwuVmFsdWUgPT0gci5WYWx1ZSkgJiYgKGwuQmFja3RyYWNlcy5zaXplKCkgPT0gci5CYWNrdHJhY2VzLnNpemUoKSkpIHsKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbC5CYWNrdHJhY2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChsLkJhY2t0cmFjZXNbaV0uSW5kZXggIT0gci5CYWNrdHJhY2VzW2ldLkluZGV4KSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisgIHN0YXRpYyBib29sIFZhbHVlRXEoSkJUczxUPiBjb25zdCYgbCwgSkJUczxUPiBjb25zdCYgcikKKyAgeworICAgIHJldHVybiBsLlZhbHVlID09IHIuVmFsdWU7CisgIH0KKyAgc3RhdGljIGJvb2wgVmFsdWVMZXNzKEpCVHM8VD4gY29uc3QmIGwsIEpCVHM8VD4gY29uc3QmIHIpCisgIHsKKyAgICByZXR1cm4gbC5WYWx1ZSA8IHIuVmFsdWU7CisgIH0KK307CisKIGNsYXNzIEJhY2t0cmFjZURhdGEKIHsKICAgc3RkOjpzdHJpbmcgVG9wU291cmNlOwpAQCAtMjc1LDE0ICszMDksMTggQEAKIAogICBzdGQ6OnN0cmluZyBMYW5ndWFnZTsKICAgc3RkOjpzdHJpbmcgU3lzcm9vdDsKKyAgSkJUczxzdGQ6OnN0cmluZz4gTGFuZ3VhZ2VTdGFuZGFyZDsKICAgc3RkOjp2ZWN0b3I8SkJUPHN0ZDo6c3RyaW5nPj4gRmxhZ3M7CiAgIHN0ZDo6dmVjdG9yPEpCVDxzdGQ6OnN0cmluZz4+IERlZmluZXM7CisgIHN0ZDo6dmVjdG9yPEpCVDxzdGQ6OnN0cmluZz4+IFByZWNvbXBpbGVIZWFkZXJzOwogICBzdGQ6OnZlY3RvcjxJbmNsdWRlRW50cnk+IEluY2x1ZGVzOwogCiAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oQ29tcGlsZURhdGEgY29uc3QmIGwsIENvbXBpbGVEYXRhIGNvbnN0JiByKQogICB7CiAgICAgcmV0dXJuIChsLkxhbmd1YWdlID09IHIuTGFuZ3VhZ2UgJiYgbC5TeXNyb290ID09IHIuU3lzcm9vdCAmJgogICAgICAgICAgICAgbC5GbGFncyA9PSByLkZsYWdzICYmIGwuRGVmaW5lcyA9PSByLkRlZmluZXMgJiYKKyAgICAgICAgICAgIGwuUHJlY29tcGlsZUhlYWRlcnMgPT0gci5QcmVjb21waWxlSGVhZGVycyAmJgorICAgICAgICAgICAgbC5MYW5ndWFnZVN0YW5kYXJkID09IHIuTGFuZ3VhZ2VTdGFuZGFyZCAmJgogICAgICAgICAgICAgbC5JbmNsdWRlcyA9PSByLkluY2x1ZGVzKTsKICAgfQogfTsKQEAgLTMxMiw2ICszNTAsMTYgQEAKICAgICAgIHJlc3VsdCA9IHJlc3VsdCBeIGhhc2g8c3RkOjpzdHJpbmc+KCkoaS5WYWx1ZSkgXgogICAgICAgICBoYXNoPEpzb246OkFycmF5SW5kZXg+KCkoaS5CYWNrdHJhY2UuSW5kZXgpOwogICAgIH0KKyAgICBmb3IgKGF1dG8gY29uc3QmIGkgOiBpbi5QcmVjb21waWxlSGVhZGVycykgeworICAgICAgcmVzdWx0ID0gcmVzdWx0IF4gaGFzaDxzdGQ6OnN0cmluZz4oKShpLlZhbHVlKSBeCisgICAgICAgIGhhc2g8SnNvbjo6QXJyYXlJbmRleD4oKShpLkJhY2t0cmFjZS5JbmRleCk7CisgICAgfQorICAgIGlmICghaW4uTGFuZ3VhZ2VTdGFuZGFyZC5WYWx1ZS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSByZXN1bHQgXiBoYXNoPHN0ZDo6c3RyaW5nPigpKGluLkxhbmd1YWdlU3RhbmRhcmQuVmFsdWUpOworICAgICAgZm9yIChKQlRJbmRleCBiYWNrdHJhY2UgOiBpbi5MYW5ndWFnZVN0YW5kYXJkLkJhY2t0cmFjZXMpIHsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0IF4gaGFzaDxKc29uOjpBcnJheUluZGV4PigpKGJhY2t0cmFjZS5JbmRleCk7CisgICAgICB9CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIH07CkBAIC0zNTUsNiArNDAzLDE2IEBACiAgICAgcmV0dXJuIEpCVDxUPihidC5WYWx1ZSwgdGhpcy0+QmFja3RyYWNlcy5BZGQoYnQuQmFja3RyYWNlKSk7CiAgIH0KIAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgSkJUczxUPiBUb0pCVHMoQlRzPFQ+IGNvbnN0JiBidHMpCisgIHsKKyAgICBzdGQ6OnZlY3RvcjxKQlRJbmRleD4gaWRzOworICAgIGZvciAoY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgYmFja3RyYWNlIDogYnRzLkJhY2t0cmFjZXMpIHsKKyAgICAgIGlkcy5lbXBsYWNlX2JhY2sodGhpcy0+QmFja3RyYWNlcy5BZGQoYmFja3RyYWNlKSk7CisgICAgfQorICAgIHJldHVybiBKQlRzPFQ+KGJ0cy5WYWx1ZSwgaWRzKTsKKyAgfQorCiAgIHZvaWQgUHJvY2Vzc0xhbmd1YWdlcygpOwogICB2b2lkIFByb2Nlc3NMYW5ndWFnZShzdGQ6OnN0cmluZyBjb25zdCYgbGFuZyk7CiAKQEAgLTM2OCw2ICs0MjYsOCBAQAogICBKc29uOjpWYWx1ZSBEdW1wUGF0aHMoKTsKICAgSnNvbjo6VmFsdWUgRHVtcENvbXBpbGVEYXRhKENvbXBpbGVEYXRhIGNvbnN0JiBjZCk7CiAgIEpzb246OlZhbHVlIER1bXBJbmNsdWRlKENvbXBpbGVEYXRhOjpJbmNsdWRlRW50cnkgY29uc3QmIGluYyk7CisgIEpzb246OlZhbHVlIER1bXBQcmVjb21waWxlSGVhZGVyKEpCVDxzdGQ6OnN0cmluZz4gY29uc3QmIGhlYWRlcik7CisgIEpzb246OlZhbHVlIER1bXBMYW5ndWFnZVN0YW5kYXJkKEpCVHM8c3RkOjpzdHJpbmc+IGNvbnN0JiBzdGFuZGFyZCk7CiAgIEpzb246OlZhbHVlIER1bXBEZWZpbmUoSkJUPHN0ZDo6c3RyaW5nPiBjb25zdCYgZGVmKTsKICAgSnNvbjo6VmFsdWUgRHVtcFNvdXJjZXMoKTsKICAgSnNvbjo6VmFsdWUgRHVtcFNvdXJjZShjbUdlbmVyYXRvclRhcmdldDo6U291cmNlQW5kS2luZCBjb25zdCYgc2ssCkBAIC00MjYsMTAgKzQ4NiwxMCBAQAogICBKc29uOjpWYWx1ZSBjb25maWd1cmF0aW9ucyA9IEpzb246OmFycmF5VmFsdWU7CiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9CiAgICAgdGhpcy0+RmlsZUFQSS5HZXRDTWFrZUluc3RhbmNlKCktPkdldEdsb2JhbEdlbmVyYXRvcigpOwotICBhdXRvIG1ha2VmaWxlcyA9IGdnLT5HZXRNYWtlZmlsZXMoKTsKKyAgY29uc3QgYXV0byYgbWFrZWZpbGVzID0gZ2ctPkdldE1ha2VmaWxlcygpOwogICBpZiAoIW1ha2VmaWxlcy5lbXB0eSgpKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KLSAgICAgIG1ha2VmaWxlc1swXS0+R2V0R2VuZXJhdG9yQ29uZmlncygpOworICAgICAgbWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnIDogY29uZmlncykgewogICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKHRoaXMtPkR1bXBDb25maWd1cmF0aW9uKGNvbmZpZykpOwogICAgIH0KQEAgLTQ2OSwxNyArNTI5LDE3IEBACiB7CiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9CiAgICAgdGhpcy0+RmlsZUFQSS5HZXRDTWFrZUluc3RhbmNlKCktPkdldEdsb2JhbEdlbmVyYXRvcigpOwotICBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4gY29uc3QmIGxvY2FsR2VucyA9IGdnLT5HZXRMb2NhbEdlbmVyYXRvcnMoKTsKKyAgYXV0byBjb25zdCYgbG9jYWxHZW5zID0gZ2ctPkdldExvY2FsR2VuZXJhdG9ycygpOwogCiAgIC8vIEFkZCBkaXJlY3RvcmllcyBpbiBmb3J3YXJkIG9yZGVyIHRvIHByb2Nlc3MgcGFyZW50cyBiZWZvcmUgY2hpbGRyZW4uCiAgIHRoaXMtPkRpcmVjdG9yaWVzLnJlc2VydmUobG9jYWxHZW5zLnNpemUoKSk7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGcgOiBsb2NhbEdlbnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsZyA6IGxvY2FsR2VucykgewogICAgIGF1dG8gZGlyZWN0b3J5SW5kZXggPQogICAgICAgc3RhdGljX2Nhc3Q8SnNvbjo6QXJyYXlJbmRleD4odGhpcy0+RGlyZWN0b3JpZXMuc2l6ZSgpKTsKICAgICB0aGlzLT5EaXJlY3Rvcmllcy5lbXBsYWNlX2JhY2soKTsKICAgICBEaXJlY3RvcnkmIGQgPSB0aGlzLT5EaXJlY3Rvcmllc1tkaXJlY3RvcnlJbmRleF07CiAgICAgZC5TbmFwc2hvdCA9IGxnLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0QnVpbGRzeXN0ZW1EaXJlY3RvcnkoKTsKLSAgICBkLkxvY2FsR2VuZXJhdG9yID0gbGc7CisgICAgZC5Mb2NhbEdlbmVyYXRvciA9IGxnLmdldCgpOwogICAgIHRoaXMtPkRpcmVjdG9yeU1hcFtkLlNuYXBzaG90XSA9IGRpcmVjdG9yeUluZGV4OwogCiAgICAgZC5Qcm9qZWN0SW5kZXggPSB0aGlzLT5BZGRQcm9qZWN0KGQuU25hcHNob3QpOwpAQCAtNDkyLDggKzU1Miw5IEBACiAgICAgRGlyZWN0b3J5JiBkID0gKmRpOwogCiAgICAgLy8gQWNjdW11bGF0ZSB0aGUgcHJlc2VuY2Ugb2YgaW5zdGFsbCBydWxlcyBvbiB0aGUgd2F5IHVwLgotICAgIGZvciAoYXV0byBnZW4gOiBkLkxvY2FsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZSgpLT5HZXRJbnN0YWxsR2VuZXJhdG9ycygpKSB7Ci0gICAgICBpZiAoIWR5bmFtaWNfY2FzdDxjbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IqPihnZW4pKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBnZW4gOgorICAgICAgICAgZC5Mb2NhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGUoKS0+R2V0SW5zdGFsbEdlbmVyYXRvcnMoKSkgeworICAgICAgaWYgKCFkeW5hbWljX2Nhc3Q8Y21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yKj4oZ2VuLmdldCgpKSkgewogICAgICAgICBkLkhhc0luc3RhbGxSdWxlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CkBAIC01NTQsOCArNjE1LDggQEAKICAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiB0YXJnZXRMaXN0OwogICBjbUdsb2JhbEdlbmVyYXRvciogZ2cgPQogICAgIHRoaXMtPkZpbGVBUEkuR2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiBsZyA6IGdnLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkgewotICAgIGNtQXBwZW5kKHRhcmdldExpc3QsIGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpOworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogZ2ctPkdldExvY2FsR2VuZXJhdG9ycygpKSB7CisgICAgY206OmFwcGVuZCh0YXJnZXRMaXN0LCBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKTsKICAgfQogICBzdGQ6OnNvcnQodGFyZ2V0TGlzdC5iZWdpbigpLCB0YXJnZXRMaXN0LmVuZCgpLAogICAgICAgICAgICAgW10oY21HZW5lcmF0b3JUYXJnZXQqIGwsIGNtR2VuZXJhdG9yVGFyZ2V0KiByKSB7CkBAIC04MjMsNiArODg0LDE2IEBACiAgICAgICB0aGlzLT5Ub0pCVChpKSwKICAgICAgIHRoaXMtPkdULT5Jc1N5c3RlbUluY2x1ZGVEaXJlY3RvcnkoaS5WYWx1ZSwgdGhpcy0+Q29uZmlnLCBsYW5nKSk7CiAgIH0KKyAgc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiBwcmVjb21waWxlSGVhZGVycyA9CisgICAgdGhpcy0+R1QtPkdldFByZWNvbXBpbGVIZWFkZXJzKHRoaXMtPkNvbmZpZywgbGFuZyk7CisgIGZvciAoQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBwY2ggOiBwcmVjb21waWxlSGVhZGVycykgeworICAgIGNkLlByZWNvbXBpbGVIZWFkZXJzLmVtcGxhY2VfYmFjayh0aGlzLT5Ub0pCVChwY2gpKTsKKyAgfQorICBCVHM8c3RkOjpzdHJpbmc+IGNvbnN0KiBsYW5ndWFnZVN0YW5kYXJkID0KKyAgICB0aGlzLT5HVC0+R2V0TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5KGxhbmcsIHRoaXMtPkNvbmZpZyk7CisgIGlmIChsYW5ndWFnZVN0YW5kYXJkKSB7CisgICAgY2QuTGFuZ3VhZ2VTdGFuZGFyZCA9IHRoaXMtPlRvSkJUcygqbGFuZ3VhZ2VTdGFuZGFyZCk7CisgIH0KIH0KIAogSnNvbjo6QXJyYXlJbmRleCBUYXJnZXQ6OkFkZFNvdXJjZUdyb3VwKGNtU291cmNlR3JvdXAqIHNnLCBKc29uOjpBcnJheUluZGV4IHNpKQpAQCAtODUzLDggKzkyNCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQuTGFuZ3VhZ2UpOwogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfRkxBR1MoIkNPTVBJTEVfRkxBR1MiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNmbGFncyA9IHNmLT5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgewotICAgIHN0ZDo6c3RyaW5nIGZsYWdzID0gZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjZmxhZ3MsIENPTVBJTEVfRkxBR1MpOworICBpZiAoY21Qcm9wIGNmbGFncyA9IHNmLT5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgeworICAgIHN0ZDo6c3RyaW5nIGZsYWdzID0gZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2ZsYWdzLCBDT01QSUxFX0ZMQUdTKTsKICAgICBmZC5GbGFncy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGZsYWdzKSwgSkJUSW5kZXgoKSk7CiAgIH0KICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9PUFRJT05TKCJDT01QSUxFX09QVElPTlMiKTsKQEAgLTg3MCwxNCArOTQxLDI3IEBACiAgIH0KIAogICAvLyBBZGQgcHJlY29tcGlsZSBoZWFkZXJzIGNvbXBpbGUgb3B0aW9ucy4KLSAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoU291cmNlID0KLSAgICB0aGlzLT5HVC0+R2V0UGNoU291cmNlKHRoaXMtPkNvbmZpZywgZmQuTGFuZ3VhZ2UpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJjaGl0ZWN0dXJlczsKKyAgdGhpcy0+R1QtPkdldEFwcGxlQXJjaHModGhpcy0+Q29uZmlnLCBhcmNoaXRlY3R1cmVzKTsKKyAgaWYgKGFyY2hpdGVjdHVyZXMuZW1wdHkoKSkgeworICAgIGFyY2hpdGVjdHVyZXMuZW1wbGFjZV9iYWNrKCk7CisgIH0KIAotICBpZiAoIXBjaFNvdXJjZS5lbXB0eSgpICYmICFzZi0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKKyAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gcGNoU291cmNlczsKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPQorICAgICAgdGhpcy0+R1QtPkdldFBjaFNvdXJjZSh0aGlzLT5Db25maWcsIGZkLkxhbmd1YWdlLCBhcmNoKTsKKyAgICBpZiAoIXBjaFNvdXJjZS5lbXB0eSgpKSB7CisgICAgICBwY2hTb3VyY2VzLmluc2VydChzdGQ6Om1ha2VfcGFpcihwY2hTb3VyY2UsIGFyY2gpKTsKKyAgICB9CisgIH0KKworICBpZiAoIXBjaFNvdXJjZXMuZW1wdHkoKSAmJiAhc2YtPkdldFByb3BlcnR5KCJTS0lQX1BSRUNPTVBJTEVfSEVBREVSUyIpKSB7CiAgICAgc3RkOjpzdHJpbmcgcGNoT3B0aW9uczsKLSAgICBpZiAoc2YtPlJlc29sdmVGdWxsUGF0aCgpID09IHBjaFNvdXJjZSkgewotICAgICAgcGNoT3B0aW9ucyA9Ci0gICAgICAgIHRoaXMtPkdULT5HZXRQY2hDcmVhdGVDb21waWxlT3B0aW9ucyh0aGlzLT5Db25maWcsIGZkLkxhbmd1YWdlKTsKKyAgICBhdXRvIHBjaEl0ID0gcGNoU291cmNlcy5maW5kKHNmLT5SZXNvbHZlRnVsbFBhdGgoKSk7CisgICAgaWYgKHBjaEl0ICE9IHBjaFNvdXJjZXMuZW5kKCkpIHsKKyAgICAgIHBjaE9wdGlvbnMgPSB0aGlzLT5HVC0+R2V0UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMoCisgICAgICAgIHRoaXMtPkNvbmZpZywgZmQuTGFuZ3VhZ2UsIHBjaEl0LT5zZWNvbmQpOwogICAgIH0gZWxzZSB7CiAgICAgICBwY2hPcHRpb25zID0KICAgICAgICAgdGhpcy0+R1QtPkdldFBjaFVzZUNvbXBpbGVPcHRpb25zKHRoaXMtPkNvbmZpZywgZmQuTGFuZ3VhZ2UpOwpAQCAtOTM0LDEwICsxMDE4LDEwIEBACiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBjb25maWdGaWxlRGVmaW5lczsKICAgY29uc3Qgc3RkOjpzdHJpbmcgZGVmUHJvcE5hbWUgPQogICAgICJDT01QSUxFX0RFRklOSVRJT05TXyIgKyBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UodGhpcy0+Q29uZmlnKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19kZWZzID0gc2YtPkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgeworICBpZiAoY21Qcm9wIGNvbmZpZ19kZWZzID0gc2YtPkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgewogICAgIGxnLT5BcHBlbmREZWZpbmVzKAogICAgICAgY29uZmlnRmlsZURlZmluZXMsCi0gICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbmZpZ19kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CisgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb25maWdfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykpOwogICB9CiAKICAgZmQuRGVmaW5lcy5yZXNlcnZlKGZpbGVEZWZpbmVzLnNpemUoKSArIGNvbmZpZ0ZpbGVEZWZpbmVzLnNpemUoKSk7CkBAIC05NjUsNiArMTA0OSwxMiBAQAogICAvLyBBbGwgY29tcGlsZSBncm91cHMgc2hhcmUgdGhlIHN5c3Jvb3Qgb2YgdGhlIHRhcmdldC4KICAgY2QuU3lzcm9vdCA9IHRkLlN5c3Jvb3Q7CiAKKyAgLy8gQWxsIGNvbXBpbGUgZ3JvdXBzIHNoYXJlIHRoZSBwcmVjb21waWxlIGhlYWRlcnMgb2YgdGhlIHRhcmdldC4KKyAgY2QuUHJlY29tcGlsZUhlYWRlcnMgPSB0ZC5QcmVjb21waWxlSGVhZGVyczsKKworICAvLyBBbGwgY29tcGlsZSBncm91cHMgc2hhcmUgdGhlIGxhbmd1YWdlIHN0YW5kYXJkIG9mIHRoZSB0YXJnZXQuCisgIGNkLkxhbmd1YWdlU3RhbmRhcmQgPSB0ZC5MYW5ndWFnZVN0YW5kYXJkOworCiAgIC8vIFVzZSB0YXJnZXQtd2lkZSBmbGFncyBmb2xsb3dlZCBieSBzb3VyY2Utc3BlY2lmaWMgZmxhZ3MuCiAgIGNkLkZsYWdzLnJlc2VydmUodGQuRmxhZ3Muc2l6ZSgpICsgZmQuRmxhZ3Muc2l6ZSgpKTsKICAgY2QuRmxhZ3MuaW5zZXJ0KGNkLkZsYWdzLmVuZCgpLCB0ZC5GbGFncy5iZWdpbigpLCB0ZC5GbGFncy5lbmQoKSk7CkBAIC0xMTE1LDYgKzEyMDUsMTcgQEAKICAgICB9CiAgICAgcmVzdWx0WyJkZWZpbmVzIl0gPSBzdGQ6Om1vdmUoZGVmaW5lcyk7CiAgIH0KKyAgaWYgKCFjZC5QcmVjb21waWxlSGVhZGVycy5lbXB0eSgpKSB7CisgICAgSnNvbjo6VmFsdWUgcHJlY29tcGlsZUhlYWRlcnMgPSBKc29uOjphcnJheVZhbHVlOworICAgIGZvciAoSkJUPHN0ZDo6c3RyaW5nPiBjb25zdCYgcGNoIDogY2QuUHJlY29tcGlsZUhlYWRlcnMpIHsKKyAgICAgIHByZWNvbXBpbGVIZWFkZXJzLmFwcGVuZCh0aGlzLT5EdW1wUHJlY29tcGlsZUhlYWRlcihwY2gpKTsKKyAgICB9CisgICAgcmVzdWx0WyJwcmVjb21waWxlSGVhZGVycyJdID0gc3RkOjptb3ZlKHByZWNvbXBpbGVIZWFkZXJzKTsKKyAgfQorICBpZiAoIWNkLkxhbmd1YWdlU3RhbmRhcmQuVmFsdWUuZW1wdHkoKSkgeworICAgIHJlc3VsdFsibGFuZ3VhZ2VTdGFuZGFyZCJdID0KKyAgICAgIHRoaXMtPkR1bXBMYW5ndWFnZVN0YW5kYXJkKGNkLkxhbmd1YWdlU3RhbmRhcmQpOworICB9CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExMzAsNiArMTIzMSwyOCBAQAogICByZXR1cm4gaW5jbHVkZTsKIH0KIAorSnNvbjo6VmFsdWUgVGFyZ2V0OjpEdW1wUHJlY29tcGlsZUhlYWRlcihKQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBoZWFkZXIpCit7CisgIEpzb246OlZhbHVlIHByZWNvbXBpbGVIZWFkZXIgPSBKc29uOjpvYmplY3RWYWx1ZTsKKyAgcHJlY29tcGlsZUhlYWRlclsiaGVhZGVyIl0gPSBoZWFkZXIuVmFsdWU7CisgIHRoaXMtPkFkZEJhY2t0cmFjZShwcmVjb21waWxlSGVhZGVyLCBoZWFkZXIuQmFja3RyYWNlKTsKKyAgcmV0dXJuIHByZWNvbXBpbGVIZWFkZXI7Cit9CisKK0pzb246OlZhbHVlIFRhcmdldDo6RHVtcExhbmd1YWdlU3RhbmRhcmQoSkJUczxzdGQ6OnN0cmluZz4gY29uc3QmIHN0YW5kYXJkKQoreworICBKc29uOjpWYWx1ZSBsYW5ndWFnZVN0YW5kYXJkID0gSnNvbjo6b2JqZWN0VmFsdWU7CisgIGxhbmd1YWdlU3RhbmRhcmRbInN0YW5kYXJkIl0gPSBzdGFuZGFyZC5WYWx1ZTsKKyAgaWYgKCFzdGFuZGFyZC5CYWNrdHJhY2VzLmVtcHR5KCkpIHsKKyAgICBKc29uOjpWYWx1ZSBiYWNrdHJhY2VzID0gSnNvbjo6YXJyYXlWYWx1ZTsKKyAgICBmb3IgKEpCVEluZGV4IGJhY2t0cmFjZSA6IHN0YW5kYXJkLkJhY2t0cmFjZXMpIHsKKyAgICAgIGJhY2t0cmFjZXMuYXBwZW5kKGJhY2t0cmFjZS5JbmRleCk7CisgICAgfQorICAgIGxhbmd1YWdlU3RhbmRhcmRbImJhY2t0cmFjZXMiXSA9IGJhY2t0cmFjZXM7CisgIH0KKyAgcmV0dXJuIGxhbmd1YWdlU3RhbmRhcmQ7Cit9CisKIEpzb246OlZhbHVlIFRhcmdldDo6RHVtcERlZmluZShKQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBkZWYpCiB7CiAgIEpzb246OlZhbHVlIGRlZmluZSA9IEpzb246Om9iamVjdFZhbHVlOwpAQCAtMTQwOSw5ICsxNTMyLDkgQEAKIEpzb246OlZhbHVlIFRhcmdldDo6RHVtcEZvbGRlcigpCiB7CiAgIEpzb246OlZhbHVlIGZvbGRlcjsKLSAgaWYgKGNvbnN0IGNoYXIqIGYgPSB0aGlzLT5HVC0+R2V0UHJvcGVydHkoIkZPTERFUiIpKSB7CisgIGlmIChjbVByb3AgZiA9IHRoaXMtPkdULT5HZXRQcm9wZXJ0eSgiRk9MREVSIikpIHsKICAgICBmb2xkZXIgPSBKc29uOjpvYmplY3RWYWx1ZTsKLSAgICBmb2xkZXJbIm5hbWUiXSA9IGY7CisgICAgZm9sZGVyWyJuYW1lIl0gPSAqZjsKICAgfQogICByZXR1cm4gZm9sZGVyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5oIGIvU291cmNlL2NtRmlsZUFQSUNvZGVtb2RlbC5oCmluZGV4IGZmYmQ5MjguLmE2YzZiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbGVBUElDb2RlbW9kZWwuaAorKysgYi9Tb3VyY2UvY21GaWxlQVBJQ29kZW1vZGVsLmgKQEAgLTUsNyArNSw3IEBACiAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgorI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgogCiBjbGFzcyBjbUZpbGVBUEk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUZpbGVDb21tYW5kLmN4eAppbmRleCBkNDU0MTRmLi44ZDIwZDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRmlsZUNvbW1hbmQuY3h4CkBAIC0xNSwxMyArMTUsMTUgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgorCisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL0dsb2IuaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtX2t3aW1sLmgiCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKICNpbmNsdWRlICJjbV9zeXNfc3RhdC5oIgogCiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCkBAIC0zMiwxMiArMzQsMTQgQEAKICNpbmNsdWRlICJjbUZpbGVJbnN0YWxsZXIuaCIKICNpbmNsdWRlICJjbUZpbGVMb2NrUG9vbC5oIgogI2luY2x1ZGUgImNtRmlsZVRpbWVzLmgiCisjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUhleEZpbGVDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgImNtTmV3TGluZVN0eWxlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVJ1bnRpbWVEZXBlbmRlbmN5QXJjaGl2ZS5oIgpAQCAtNDYsMTAgKzUwLDExIEBACiAjaW5jbHVkZSAiY21TdWJjb21tYW5kVGFibGUuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21UaW1lc3RhbXAuaCIKKyNpbmNsdWRlICJjbVdvcmtpbmdEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQotIyAgaW5jbHVkZSAiY21fY3VybC5oIgorIyAgaW5jbHVkZSA8Y20zcC9jdXJsL2N1cmwuaD4KIAogIyAgaW5jbHVkZSAiY21DdXJsLmgiCiAjICBpbmNsdWRlICJjbUZpbGVMb2NrUmVzdWx0LmgiCkBAIC02NzEsMTIgKzY3NiwxMiBAQAogICAgIH0KICAgfQogCisgIGNtYWtlKiBjbSA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldENNYWtlSW5zdGFuY2UoKTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzOwogICBib29sIGNvbmZpZ3VyZURlcGVuZHMgPSBmYWxzZTsKICAgYm9vbCB3YXJuQ29uZmlndXJlTGF0ZSA9IGZhbHNlOwogICBib29sIHdhcm5Gb2xsb3dlZFN5bWxpbmtzID0gZmFsc2U7Ci0gIGNvbnN0IGNtYWtlOjpXb3JraW5nTW9kZSB3b3JraW5nTW9kZSA9Ci0gICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRXb3JraW5nTW9kZSgpOworICBjb25zdCBjbWFrZTo6V29ya2luZ01vZGUgd29ya2luZ01vZGUgPSBjbS0+R2V0V29ya2luZ01vZGUoKTsKICAgd2hpbGUgKGkgIT0gYXJncy5lbmQoKSkgewogICAgIGlmICgqaSA9PSAiTElTVF9ESVJFQ1RPUklFUyIpIHsKICAgICAgICsraTsgLy8gc2tpcCBMSVNUX0RJUkVDVE9SSUVTCkBAIC03NjQsMTIgKzc2OSwxNyBAQAogICAgICAgICAgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsCiAgICAgICAgICAgICAgICJDeWNsaWMgcmVjdXJzaW9uIGRldGVjdGVkIHdoaWxlIGdsb2JiaW5nIGZvciAnIiArICppICsgIic6XG4iICsKICAgICAgICAgICAgICAgICBnbG9iTWVzc2FnZS5jb250ZW50KTsKLSAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgIH0gZWxzZSBpZiAoZ2xvYk1lc3NhZ2UudHlwZSA9PSBjbXN5czo6R2xvYjo6ZXJyb3IpIHsKICAgICAgICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzc3VlTWVzc2FnZSgKICAgICAgICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAogICAgICAgICAgICAgICAiRXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIGdsb2JiaW5nIGZvciAnIiArICppICsgIicgLSAiICsKICAgICAgICAgICAgICAgICBnbG9iTWVzc2FnZS5jb250ZW50KTsKICAgICAgICAgICAgIHNob3VsZEV4aXQgPSB0cnVlOworICAgICAgICAgIH0gZWxzZSBpZiAoY20tPkdldERlYnVnT3V0cHV0KCkgfHwgY20tPkdldFRyYWNlKCkpIHsKKyAgICAgICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzc3VlTWVzc2FnZSgKKyAgICAgICAgICAgICAgTWVzc2FnZVR5cGU6OkxPRywKKyAgICAgICAgICAgICAgY21TdHJDYXQoIkdsb2JiaW5nIGZvclxuICAiLCAqaSwgIlxuRW5jb3VudGVyZWQgYW4gZXJyb3I6XG4gIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZ2xvYk1lc3NhZ2UuY29udGVudCkpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoc2hvdWxkRXhpdCkgewpAQCAtNzgzLDEzICs3OTMsMTMgQEAKICAgICAgIH0KIAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBmb3VuZEZpbGVzID0gZy5HZXRGaWxlcygpOwotICAgICAgY21BcHBlbmQoZmlsZXMsIGZvdW5kRmlsZXMpOworICAgICAgY206OmFwcGVuZChmaWxlcywgZm91bmRGaWxlcyk7CiAKICAgICAgIGlmIChjb25maWd1cmVEZXBlbmRzKSB7CiAgICAgICAgIHN0ZDo6c29ydChmb3VuZEZpbGVzLmJlZ2luKCksIGZvdW5kRmlsZXMuZW5kKCkpOwogICAgICAgICBmb3VuZEZpbGVzLmVyYXNlKHN0ZDo6dW5pcXVlKGZvdW5kRmlsZXMuYmVnaW4oKSwgZm91bmRGaWxlcy5lbmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRGaWxlcy5lbmQoKSk7Ci0gICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldENNYWtlSW5zdGFuY2UoKS0+QWRkR2xvYkNhY2hlRW50cnkoCisgICAgICAgIGNtLT5BZGRHbG9iQ2FjaGVFbnRyeSgKICAgICAgICAgICByZWN1cnNlLCAocmVjdXJzZSA/IGcuR2V0UmVjdXJzZUxpc3REaXJzKCkgOiBnLkdldExpc3REaXJzKCkpLAogICAgICAgICAgIChyZWN1cnNlID8gZy5HZXRSZWN1cnNlVGhyb3VnaFN5bWxpbmtzKCkgOiBmYWxzZSksCiAgICAgICAgICAgKGcuR2V0UmVsYXRpdmUoKSA/IGcuR2V0UmVsYXRpdmUoKSA6ICIiKSwgZXhwciwgZm91bmRGaWxlcywgdmFyaWFibGUsCkBAIC0xMzg0LDggKzEzOTQsMTAgQEAKIHsKICAgaW50IHJlYWxzaXplID0gc3RhdGljX2Nhc3Q8aW50PihzaXplICogbm1lbWIpOwogICBjbXN5czo6b2ZzdHJlYW0qIGZvdXQgPSBzdGF0aWNfY2FzdDxjbXN5czo6b2ZzdHJlYW0qPihkYXRhKTsKLSAgY29uc3QgY2hhciogY2hQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKTsKLSAgZm91dC0+d3JpdGUoY2hQdHIsIHJlYWxzaXplKTsKKyAgaWYgKGZvdXQpIHsKKyAgICBjb25zdCBjaGFyKiBjaFB0ciA9IHN0YXRpY19jYXN0PGNoYXIqPihwdHIpOworICAgIGZvdXQtPndyaXRlKGNoUHRyLCByZWFsc2l6ZSk7CisgIH0KICAgcmV0dXJuIHJlYWxzaXplOwogfQogCkBAIC0xMzk0LDggKzE0MDYsOCBAQAogewogICBpbnQgcmVhbHNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemUgKiBubWVtYik7CiAgIGNvbnN0IGNoYXIqIGNoUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHB0cik7Ci0gIGNtQXBwZW5kKCpzdGF0aWNfY2FzdDxjbUZpbGVDb21tYW5kVmVjdG9yT2ZDaGFyKj4oZGF0YSksIGNoUHRyLAotICAgICAgICAgICBjaFB0ciArIHJlYWxzaXplKTsKKyAgY206OmFwcGVuZCgqc3RhdGljX2Nhc3Q8Y21GaWxlQ29tbWFuZFZlY3Rvck9mQ2hhcio+KGRhdGEpLCBjaFB0ciwKKyAgICAgICAgICAgICBjaFB0ciArIHJlYWxzaXplKTsKICAgcmV0dXJuIHJlYWxzaXplOwogfQogCkBAIC0xNDA4LDcgKzE0MjAsNyBAQAogICAgIGNhc2UgQ1VSTElORk9fVEVYVDoKICAgICBjYXNlIENVUkxJTkZPX0hFQURFUl9JTjoKICAgICBjYXNlIENVUkxJTkZPX0hFQURFUl9PVVQ6Ci0gICAgICBjbUFwcGVuZCh2ZWMsIGNoUHRyLCBjaFB0ciArIHNpemUpOworICAgICAgY206OmFwcGVuZCh2ZWMsIGNoUHRyLCBjaFB0ciArIHNpemUpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBDVVJMSU5GT19EQVRBX0lOOgogICAgIGNhc2UgQ1VSTElORk9fREFUQV9PVVQ6CkBAIC0xNDE4LDcgKzE0MzAsNyBAQAogICAgICAgaW50IG4gPSBzcHJpbnRmKGJ1ZiwgIlslIiBLV0lNTF9JTlRfUFJJdTY0ICIgYnl0ZXMgZGF0YV1cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S1dJTUxfSU5UX3VpbnQ2NF90PihzaXplKSk7CiAgICAgICBpZiAobiA+IDApIHsKLSAgICAgICAgY21BcHBlbmQodmVjLCBidWYsIGJ1ZiArIG4pOworICAgICAgICBjbTo6YXBwZW5kKHZlYywgYnVmLCBidWYgKyBuKTsKICAgICAgIH0KICAgICB9IGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0xNTQxLDE1ICsxNTUzLDE0IEBACiB7CiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogICBhdXRvIGkgPSBhcmdzLmJlZ2luKCk7Ci0gIGlmIChhcmdzLnNpemUoKSA8IDMpIHsKLSAgICBzdGF0dXMuU2V0RXJyb3IoIkRPV05MT0FEIG11c3QgYmUgY2FsbGVkIHdpdGggYXQgbGVhc3QgdGhyZWUgYXJndW1lbnRzLiIpOworICBpZiAoYXJncy5zaXplKCkgPCAyKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJET1dOTE9BRCBtdXN0IGJlIGNhbGxlZCB3aXRoIGF0IGxlYXN0IHR3byBhcmd1bWVudHMuIik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAgICsraTsgLy8gR2V0IHJpZCBvZiBzdWJjb21tYW5kCiAgIHN0ZDo6c3RyaW5nIHVybCA9ICppOwogICArK2k7Ci0gIHN0ZDo6c3RyaW5nIGZpbGUgPSAqaTsKLSAgKytpOworICBzdGQ6OnN0cmluZyBmaWxlOwogCiAgIGxvbmcgdGltZW91dCA9IDA7CiAgIGxvbmcgaW5hY3Rpdml0eV90aW1lb3V0ID0gMDsKQEAgLTE2MDUsNyArMTYxNiw3IEBACiAgICAgICBpZiAoaSAhPSBhcmdzLmVuZCgpKSB7CiAgICAgICAgIHRsc192ZXJpZnkgPSBjbUlzT24oKmkpOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzLlNldEVycm9yKCJUTFNfVkVSSUZZIG1pc3NpbmcgYm9vbCB2YWx1ZS4iKTsKKyAgICAgICAgc3RhdHVzLlNldEVycm9yKCJET1dOTE9BRCBtaXNzaW5nIGJvb2wgdmFsdWUgZm9yIFRMU19WRVJJRlkuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKCppID09ICJUTFNfQ0FJTkZPIikgewpAQCAtMTYxMyw3ICsxNjI0LDcgQEAKICAgICAgIGlmIChpICE9IGFyZ3MuZW5kKCkpIHsKICAgICAgICAgY2FpbmZvID0gaS0+Y19zdHIoKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cy5TZXRFcnJvcigiVExTX0NBRklMRSBtaXNzaW5nIGZpbGUgdmFsdWUuIik7CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcigiRE9XTkxPQUQgbWlzc2luZyBmaWxlIHZhbHVlIGZvciBUTFNfQ0FJTkZPLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9CiAgICAgfSBlbHNlIGlmICgqaSA9PSAiTkVUUkNfRklMRSIpIHsKQEAgLTE2ODAsNiArMTY5MSw4IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICAgIGN1cmxfaGVhZGVycy5wdXNoX2JhY2soKmkpOworICAgIH0gZWxzZSBpZiAoZmlsZS5lbXB0eSgpKSB7CisgICAgICBmaWxlID0gKmk7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIERvIG5vdCByZXR1cm4gZXJyb3IgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29uLgogICAgICAgc3RkOjpzdHJpbmcgZXJyID0gY21TdHJDYXQoIlVuZXhwZWN0ZWQgYXJndW1lbnQ6ICIsICppKTsKQEAgLTE2ODcsMTEgKzE3MDAsMTggQEAKICAgICB9CiAgICAgKytpOwogICB9CisgIC8vIENhbid0IGNhbGN1bGF0ZSBoYXNoIGlmIHdlIGRvbid0IHNhdmUgdGhlIGZpbGUuCisgIC8vIFRPRE8gSW5jcmVtZW50YWxseSBjYWxjdWxhdGUgaGFzaCBpbiB0aGUgd3JpdGUgY2FsbGJhY2sgYXMgdGhlIGZpbGUgaXMKKyAgLy8gYmVpbmcgZG93bmxvYWRlZCBzbyB0aGlzIGNoZWNrIGNhbiBiZSByZWxheGVkLgorICBpZiAoZmlsZS5lbXB0eSgpICYmIGhhc2gpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoIkRPV05MT0FEIGNhbm5vdCBjYWxjdWxhdGUgaGFzaCBpZiBmaWxlIGlzIG5vdCBzYXZlZC4iKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KICAgLy8gSWYgZmlsZSBleGlzdHMgYWxyZWFkeSwgYW5kIGNhbGxlciBzcGVjaWZpZWQgYW4gZXhwZWN0ZWQgbWQ1IG9yIHNoYSwKICAgLy8gYW5kIHRoZSBleGlzdGluZyBmaWxlIGFscmVhZHkgaGFzIHRoZSBleHBlY3RlZCBoYXNoLCB0aGVuIHNpbXBseQogICAvLyByZXR1cm4uCiAgIC8vCi0gIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGZpbGUpICYmIGhhc2guZ2V0KCkpIHsKKyAgaWYgKCFmaWxlLmVtcHR5KCkgJiYgY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmaWxlKSAmJiBoYXNoLmdldCgpKSB7CiAgICAgc3RkOjpzdHJpbmcgbXNnOwogICAgIHN0ZDo6c3RyaW5nIGFjdHVhbEhhc2ggPSBoYXNoLT5IYXNoRmlsZShmaWxlKTsKICAgICBpZiAoYWN0dWFsSGFzaCA9PSBleHBlY3RlZEhhc2gpIHsKQEAgLTE3MDYsMTkgKzE3MjYsMjYgQEAKICAgLy8gTWFrZSBzdXJlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzIHNvIHdlIGNhbiB3cml0ZSB0byB0aGUgZmlsZQogICAvLyBhcyB3ZSByZWNlaXZlIGRvd25sb2FkZWQgYml0cyBmcm9tIGN1cmwuLi4KICAgLy8KLSAgc3RkOjpzdHJpbmcgZGlyID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGZpbGUpOwotICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZGlyKSAmJiAhY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShkaXIpKSB7Ci0gICAgc3RkOjpzdHJpbmcgZXJyc3RyaW5nID0gIkRPV05MT0FEIGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAnIiArIGRpciArCi0gICAgICAiJyAtIFNwZWNpZnkgZmlsZSBieSBmdWxsIHBhdGggbmFtZSBhbmQgdmVyaWZ5IHRoYXQgeW91ICIKLSAgICAgICJoYXZlIGRpcmVjdG9yeSBjcmVhdGlvbiBhbmQgZmlsZSB3cml0ZSBwcml2aWxlZ2VzLiI7Ci0gICAgc3RhdHVzLlNldEVycm9yKGVycnN0cmluZyk7Ci0gICAgcmV0dXJuIGZhbHNlOworICBpZiAoIWZpbGUuZW1wdHkoKSkgeworICAgIHN0ZDo6c3RyaW5nIGRpciA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aChmaWxlKTsKKyAgICBpZiAoIWRpci5lbXB0eSgpICYmICFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGRpcikgJiYKKyAgICAgICAgIWNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3RvcnkoZGlyKSkgeworICAgICAgc3RkOjpzdHJpbmcgZXJyc3RyaW5nID0gIkRPV05MT0FEIGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAnIiArCisgICAgICAgIGRpciArCisgICAgICAgICInIC0gU3BlY2lmeSBmaWxlIGJ5IGZ1bGwgcGF0aCBuYW1lIGFuZCB2ZXJpZnkgdGhhdCB5b3UgIgorICAgICAgICAiaGF2ZSBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGZpbGUgd3JpdGUgcHJpdmlsZWdlcy4iOworICAgICAgc3RhdHVzLlNldEVycm9yKGVycnN0cmluZyk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICB9CiAKLSAgY21zeXM6Om9mc3RyZWFtIGZvdXQoZmlsZS5jX3N0cigpLCBzdGQ6Omlvczo6YmluYXJ5KTsKLSAgaWYgKCFmb3V0KSB7Ci0gICAgc3RhdHVzLlNldEVycm9yKCJET1dOTE9BRCBjYW5ub3Qgb3BlbiBmaWxlIGZvciB3cml0ZS4iKTsKLSAgICByZXR1cm4gZmFsc2U7CisgIGNtc3lzOjpvZnN0cmVhbSBmb3V0OworICBpZiAoIWZpbGUuZW1wdHkoKSkgeworICAgIGZvdXQub3BlbihmaWxlLmNfc3RyKCksIHN0ZDo6aW9zOjpiaW5hcnkpOworICAgIGlmICghZm91dCkgeworICAgICAgc3RhdHVzLlNldEVycm9yKCJET1dOTE9BRCBjYW5ub3Qgb3BlbiBmaWxlIGZvciB3cml0ZS4iKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgIH0KIAogIyAgaWYgZGVmaW5lZChfV0lOMzIpCkBAIC0xNzU0LDExICsxNzgxLDEyIEBACiAgIC8vIGNoZWNrIHRvIHNlZSBpZiBUTFMgdmVyaWZpY2F0aW9uIGlzIHJlcXVlc3RlZAogICBpZiAodGxzX3ZlcmlmeSkgewogICAgIHJlcyA9IDo6Y3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAxKTsKLSAgICBjaGVja19jdXJsX3Jlc3VsdChyZXMsICJVbmFibGUgdG8gc2V0IFRMUy9TU0wgVmVyaWZ5IG9uOiAiKTsKKyAgICBjaGVja19jdXJsX3Jlc3VsdChyZXMsICJET1dOTE9BRCBjYW5ub3Qgc2V0IFRMUy9TU0wgVmVyaWZ5IG9uOiAiKTsKICAgfSBlbHNlIHsKICAgICByZXMgPSA6OmN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7Ci0gICAgY2hlY2tfY3VybF9yZXN1bHQocmVzLCAiVW5hYmxlIHRvIHNldCBUTFMvU1NMIFZlcmlmeSBvZmY6ICIpOworICAgIGNoZWNrX2N1cmxfcmVzdWx0KHJlcywgIkRPV05MT0FEIGNhbm5vdCBzZXQgVExTL1NTTCBWZXJpZnkgb2ZmOiAiKTsKICAgfQorCiAgIC8vIGNoZWNrIHRvIHNlZSBpZiBhIENBSU5GTyBmaWxlIGhhcyBiZWVuIHNwZWNpZmllZAogICAvLyBjb21tYW5kIGFyZyBjb21lcyBmaXJzdAogICBzdGQ6OnN0cmluZyBjb25zdCYgY2FpbmZvX2VyciA9IGNtQ3VybFNldENBSW5mbyhjdXJsLCBjYWluZm8pOwpAQCAtMTc3OSw3ICsxODA3LDggQEAKIAogICBjbUZpbGVDb21tYW5kVmVjdG9yT2ZDaGFyIGNodW5rRGVidWc7CiAKLSAgcmVzID0gOjpjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVEQVRBLCAmZm91dCk7CisgIHJlcyA9IDo6Y3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuZW1wdHkoKSA/IG51bGxwdHIgOiAmZm91dCk7CiAgIGNoZWNrX2N1cmxfcmVzdWx0KHJlcywgIkRPV05MT0FEIGNhbm5vdCBzZXQgd3JpdGUgZGF0YTogIik7CiAKICAgcmVzID0gOjpjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfREVCVUdEQVRBLCAmY2h1bmtEZWJ1Zyk7CkBAIC0xODUzLDggKzE4ODIsMTAgQEAKIAogICAvLyBFeHBsaWNpdGx5IGZsdXNoL2Nsb3NlIHNvIHdlIGNhbiBtZWFzdXJlIHRoZSBtZDUgYWNjdXJhdGVseS4KICAgLy8KLSAgZm91dC5mbHVzaCgpOwotICBmb3V0LmNsb3NlKCk7CisgIGlmICghZmlsZS5lbXB0eSgpKSB7CisgICAgZm91dC5mbHVzaCgpOworICAgIGZvdXQuY2xvc2UoKTsKKyAgfQogCiAgIC8vIFZlcmlmeSBNRDUgc3VtIGlmIHJlcXVlc3RlZDoKICAgLy8KQEAgLTE5MjMsNiArMTk1NCw4IEBACiAgIHN0ZDo6c3RyaW5nIGxvZ1ZhcjsKICAgc3RkOjpzdHJpbmcgc3RhdHVzVmFyOwogICBib29sIHNob3dQcm9ncmVzcyA9IGZhbHNlOworICBib29sIHRsc192ZXJpZnkgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc09uKCJDTUFLRV9UTFNfVkVSSUZZIik7CisgIGNvbnN0IGNoYXIqIGNhaW5mbyA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldERlZmluaXRpb24oIkNNQUtFX1RMU19DQUlORk8iKTsKICAgc3RkOjpzdHJpbmcgdXNlcnB3ZDsKICAgc3RkOjpzdHJpbmcgbmV0cmNfbGV2ZWwgPQogICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9ORVRSQyIpOwpAQCAtMTk2NCw2ICsxOTk3LDIyIEBACiAgICAgICBzdGF0dXNWYXIgPSAqaTsKICAgICB9IGVsc2UgaWYgKCppID09ICJTSE9XX1BST0dSRVNTIikgewogICAgICAgc2hvd1Byb2dyZXNzID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKCppID09ICJUTFNfVkVSSUZZIikgeworICAgICAgKytpOworICAgICAgaWYgKGkgIT0gYXJncy5lbmQoKSkgeworICAgICAgICB0bHNfdmVyaWZ5ID0gY21Jc09uKCppKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcigiVVBMT0FEIG1pc3NpbmcgYm9vbCB2YWx1ZSBmb3IgVExTX1ZFUklGWS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoKmkgPT0gIlRMU19DQUlORk8iKSB7CisgICAgICArK2k7CisgICAgICBpZiAoaSAhPSBhcmdzLmVuZCgpKSB7CisgICAgICAgIGNhaW5mbyA9IGktPmNfc3RyKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoIlVQTE9BRCBtaXNzaW5nIGZpbGUgdmFsdWUgZm9yIFRMU19DQUlORk8uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KICAgICB9IGVsc2UgaWYgKCppID09ICJORVRSQ19GSUxFIikgewogICAgICAgKytpOwogICAgICAgaWYgKGkgIT0gYXJncy5lbmQoKSkgewpAQCAtMjA0OSw2ICsyMDk4LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUZpbGVDb21tYW5kQ3VybERlYnVnQ2FsbGJhY2spOwogICBjaGVja19jdXJsX3Jlc3VsdChyZXMsICJVUExPQUQgY2Fubm90IHNldCBkZWJ1ZyBmdW5jdGlvbjogIik7CiAKKyAgLy8gY2hlY2sgdG8gc2VlIGlmIFRMUyB2ZXJpZmljYXRpb24gaXMgcmVxdWVzdGVkCisgIGlmICh0bHNfdmVyaWZ5KSB7CisgICAgcmVzID0gOjpjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDEpOworICAgIGNoZWNrX2N1cmxfcmVzdWx0KHJlcywgIlVQTE9BRCBjYW5ub3Qgc2V0IFRMUy9TU0wgVmVyaWZ5IG9uOiAiKTsKKyAgfSBlbHNlIHsKKyAgICByZXMgPSA6OmN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7CisgICAgY2hlY2tfY3VybF9yZXN1bHQocmVzLCAiVVBMT0FEIGNhbm5vdCBzZXQgVExTL1NTTCBWZXJpZnkgb2ZmOiAiKTsKKyAgfQorCisgIC8vIGNoZWNrIHRvIHNlZSBpZiBhIENBSU5GTyBmaWxlIGhhcyBiZWVuIHNwZWNpZmllZAorICAvLyBjb21tYW5kIGFyZyBjb21lcyBmaXJzdAorICBzdGQ6OnN0cmluZyBjb25zdCYgY2FpbmZvX2VyciA9IGNtQ3VybFNldENBSW5mbyhjdXJsLCBjYWluZm8pOworICBpZiAoIWNhaW5mb19lcnIuZW1wdHkoKSkgeworICAgIHN0YXR1cy5TZXRFcnJvcihjYWluZm9fZXJyKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKwogICBjbUZpbGVDb21tYW5kVmVjdG9yT2ZDaGFyIGNodW5rUmVzcG9uc2U7CiAgIGNtRmlsZUNvbW1hbmRWZWN0b3JPZkNoYXIgY2h1bmtEZWJ1ZzsKIApAQCAtMjMyMSwxMiArMjM4Nyw5IEBACiAgICAgcGF0aCArPSAiL2NtYWtlLmxvY2siOwogICB9CiAKLSAgaWYgKCFjbXN5czo6U3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHBhdGgpKSB7Ci0gICAgcGF0aCA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSArICIvIiArIHBhdGg7Ci0gIH0KLQogICAvLyBVbmlmeSBwYXRoIChyZW1vdmUgJy8vJywgJy8uLi8nLCAuLi4pCi0gIHBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHBhdGgpOworICBwYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICBwYXRoLCBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOwogCiAgIC8vIENyZWF0ZSBmaWxlIGFuZCBkaXJlY3RvcmllcyBpZiBuZWVkZWQKICAgc3RkOjpzdHJpbmcgcGFyZW50RGlyID0gY21TeXN0ZW1Ub29sczo6R2V0UGFyZW50RGlyZWN0b3J5KHBhdGgpOwpAQCAtMjc3NCw2ICsyODM3LDMxNCBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBIYW5kbGVDb25maWd1cmVDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQoreworICBpZiAoYXJncy5zaXplKCkgPCA1KSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJJbmNvcnJlY3QgYXJndW1lbnRzIHRvIENPTkZJR1VSRSBzdWJjb21tYW5kLiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAoYXJnc1sxXSAhPSAiT1VUUFVUIikgeworICAgIHN0YXR1cy5TZXRFcnJvcigiSW5jb3JyZWN0IGFyZ3VtZW50cyB0byBDT05GSUdVUkUgc3ViY29tbWFuZC4iKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKGFyZ3NbM10gIT0gIkNPTlRFTlQiKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJJbmNvcnJlY3QgYXJndW1lbnRzIHRvIENPTkZJR1VSRSBzdWJjb21tYW5kLiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgY21OZXdMaW5lU3R5bGUgbmV3TGluZVN0eWxlOworICBpZiAoIW5ld0xpbmVTdHlsZS5SZWFkRnJvbUFyZ3VtZW50cyhhcmdzLCBlcnJvck1lc3NhZ2UpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJDT05GSUdVUkUgIiwgZXJyb3JNZXNzYWdlKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYm9vbCBlc2NhcGVRdW90ZXMgPSBmYWxzZTsKKyAgYm9vbCBhdE9ubHkgPSBmYWxzZTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDU7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7CisgICAgaWYgKGFyZ3NbaV0gPT0gIkBPTkxZIikgeworICAgICAgYXRPbmx5ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGFyZ3NbaV0gPT0gIkVTQ0FQRV9RVU9URVMiKSB7CisgICAgICBlc2NhcGVRdW90ZXMgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiTkVXTElORV9TVFlMRSIgfHwgYXJnc1tpXSA9PSAiTEYiIHx8CisgICAgICAgICAgICAgICBhcmdzW2ldID09ICJVTklYIiB8fCBhcmdzW2ldID09ICJDUkxGIiB8fCBhcmdzW2ldID09ICJXSU4zMiIgfHwKKyAgICAgICAgICAgICAgIGFyZ3NbaV0gPT0gIkRPUyIpIHsKKyAgICAgIC8qIE9wdGlvbnMgaGFuZGxlZCBieSBOZXdMaW5lU3R5bGUgbWVtYmVyIGFib3ZlLiAgKi8KKyAgICB9IGVsc2UgeworICAgICAgc3RhdHVzLlNldEVycm9yKAorICAgICAgICBjbVN0ckNhdCgiQ09ORklHVVJFIFVucmVjb2duaXplZCBhcmd1bWVudCBcIiIsIGFyZ3NbaV0sICJcIiIpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICAvLyBDaGVjayBmb3IgZ2VuZXJhdG9yIGV4cHJlc3Npb25zCisgIGNvbnN0IHN0ZDo6c3RyaW5nIGlucHV0ID0gYXJnc1s0XTsKKyAgc3RkOjpzdHJpbmcgb3V0cHV0RmlsZSA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgYXJnc1syXSwgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKTsKKworICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IGlucHV0LmZpbmRfZmlyc3Rfb2YoIjw+Iik7CisgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoIkNPTkZJR1VSRSBjYWxsZWQgd2l0aCBDT05URU5UIGNvbnRhaW5pbmcgYSBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIi4gIFRoaXMgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkLiIpKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBwb3MgPSBvdXRwdXRGaWxlLmZpbmRfZmlyc3Rfb2YoIjw+Iik7CisgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoIkNPTkZJR1VSRSBjYWxsZWQgd2l0aCBPVVRQVVQgY29udGFpbmluZyBhIFwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RmlsZVtwb3NdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIuICBUaGlzIGNoYXJhY3RlciBpcyBub3QgYWxsb3dlZC4iKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY21NYWtlZmlsZSYgbWFrZUZpbGUgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKTsKKyAgaWYgKCFtYWtlRmlsZS5DYW5JV3JpdGVUaGlzRmlsZShvdXRwdXRGaWxlKSkgeworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIGZpbGU6ICIgKyBvdXRwdXRGaWxlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGludG8gYSBzb3VyY2UgZGlyZWN0b3J5LiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKG91dHB1dEZpbGUpOworCisgIC8vIFJlLWdlbmVyYXRlIGlmIG5vbi10ZW1wb3Jhcnkgb3V0cHV0cyBhcmUgbWlzc2luZy4KKyAgLy8gd2hlbiB3ZSBmaW5hbGl6ZSB0aGUgY29uZmlndXJhdGlvbiB3ZSB3aWxsIHJlbW92ZSBhbGwKKyAgLy8gb3V0cHV0IGZpbGVzIHRoYXQgbm93IGRvbid0IGV4aXN0LgorICBtYWtlRmlsZS5BZGRDTWFrZU91dHB1dEZpbGUob3V0cHV0RmlsZSk7CisKKyAgLy8gQ3JlYXRlIG91dHB1dCBkaXJlY3RvcnkKKyAgY29uc3Qgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzbGFzaFBvcyA9IG91dHB1dEZpbGUucmZpbmQoJy8nKTsKKyAgaWYgKHNsYXNoUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGF0aCA9IG91dHB1dEZpbGUuc3Vic3RyKDAsIHNsYXNoUG9zKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KHBhdGgpOworICB9CisKKyAgc3RkOjpzdHJpbmcgbmV3TGluZUNoYXJhY3RlcnM7CisgIGJvb2wgb3Blbl93aXRoX2JpbmFyeV9mbGFnID0gZmFsc2U7CisgIGlmIChuZXdMaW5lU3R5bGUuSXNWYWxpZCgpKSB7CisgICAgb3Blbl93aXRoX2JpbmFyeV9mbGFnID0gdHJ1ZTsKKyAgICBuZXdMaW5lQ2hhcmFjdGVycyA9IG5ld0xpbmVTdHlsZS5HZXRDaGFyYWN0ZXJzKCk7CisgIH0KKworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZm91dDsKKyAgZm91dC5PcGVuKG91dHB1dEZpbGUsIGZhbHNlLCBvcGVuX3dpdGhfYmluYXJ5X2ZsYWcpOworICBpZiAoIWZvdXQpIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiQ291bGQgbm90IG9wZW4gZmlsZSBmb3Igd3JpdGUgaW4gY29weSBvcGVyYXRpb24gIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RmlsZSk7CisgICAgY21TeXN0ZW1Ub29sczo6UmVwb3J0TGFzdFN5c3RlbUVycm9yKCIiKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgZm91dC5TZXRDb3B5SWZEaWZmZXJlbnQodHJ1ZSk7CisKKyAgLy8gY29weSBpbnB1dCB0byBvdXRwdXQgYW5kIGV4cGFuZCB2YXJpYWJsZXMgZnJvbSBpbnB1dCBhdCB0aGUgc2FtZSB0aW1lCisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNpbihpbnB1dCwgc3RkOjppb3M6OmluKTsKKyAgc3RkOjpzdHJpbmcgaW5MaW5lOworICBzdGQ6OnN0cmluZyBvdXRMaW5lOworICB3aGlsZSAoY21TeXN0ZW1Ub29sczo6R2V0TGluZUZyb21TdHJlYW0oc2luLCBpbkxpbmUpKSB7CisgICAgb3V0TGluZS5jbGVhcigpOworICAgIG1ha2VGaWxlLkNvbmZpZ3VyZVN0cmluZyhpbkxpbmUsIG91dExpbmUsIGF0T25seSwgZXNjYXBlUXVvdGVzKTsKKyAgICBmb3V0IDw8IG91dExpbmUgPDwgbmV3TGluZUNoYXJhY3RlcnM7CisgIH0KKworICAvLyBjbG9zZSBmaWxlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGNvcHkKKyAgZm91dC5jbG9zZSgpOworCisgIHJldHVybiB0cnVlOworfQorCitib29sIEhhbmRsZUFyY2hpdmVDcmVhdGVDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKK3sKKyAgc3RydWN0IEFyZ3VtZW50cworICB7CisgICAgc3RkOjpzdHJpbmcgT3V0cHV0OworICAgIHN0ZDo6c3RyaW5nIEZvcm1hdDsKKyAgICBzdGQ6OnN0cmluZyBDb21wcmVzc2lvbjsKKyAgICBzdGQ6OnN0cmluZyBNVGltZTsKKyAgICBib29sIFZlcmJvc2UgPSBmYWxzZTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gUGF0aHM7CisgIH07CisKKyAgc3RhdGljIGF1dG8gY29uc3QgcGFyc2VyID0gY21Bcmd1bWVudFBhcnNlcjxBcmd1bWVudHM+e30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiT1VUUFVUIl9zLCAmQXJndW1lbnRzOjpPdXRwdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIkZPUk1BVCJfcywgJkFyZ3VtZW50czo6Rm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJDT01QUkVTU0lPTiJfcywgJkFyZ3VtZW50czo6Q29tcHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIk1USU1FIl9zLCAmQXJndW1lbnRzOjpNVGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiVkVSQk9TRSJfcywgJkFyZ3VtZW50czo6VmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiUEFUSFMiX3MsICZBcmd1bWVudHM6OlBhdGhzKTsKKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdW5yZWNvZ25pemVkQXJndW1lbnRzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5d29yZHNNaXNzaW5nVmFsdWVzOworICBhdXRvIHBhcnNlZEFyZ3MgPQorICAgIHBhcnNlci5QYXJzZShjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDEpLCAmdW5yZWNvZ25pemVkQXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAma2V5d29yZHNNaXNzaW5nVmFsdWVzKTsKKyAgYXV0byBhcmdJdCA9IHVucmVjb2duaXplZEFyZ3VtZW50cy5iZWdpbigpOworICBpZiAoYXJnSXQgIT0gdW5yZWNvZ25pemVkQXJndW1lbnRzLmVuZCgpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJVbnJlY29nbml6ZWQgYXJndW1lbnQ6IFwiIiwgKmFyZ0l0LCAiXCIiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTElTVF9BUkdTID0geyAiT1VUUFVUIiwgIkZPUk1BVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT01QUkVTU0lPTiIsICJNVElNRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVRIUyIgfTsKKyAgYXV0byBrd2JlZ2luID0ga2V5d29yZHNNaXNzaW5nVmFsdWVzLmNiZWdpbigpOworICBhdXRvIGt3ZW5kID0gY21SZW1vdmVNYXRjaGluZyhrZXl3b3Jkc01pc3NpbmdWYWx1ZXMsIExJU1RfQVJHUyk7CisgIGlmIChrd2VuZCAhPSBrd2JlZ2luKSB7CisgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJLZXl3b3JkcyBtaXNzaW5nIHZhbHVlczpcbiAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Kb2luKGNtTWFrZVJhbmdlKGt3YmVnaW4sIGt3ZW5kKSwgIlxuICAiKSkpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29uc3QgY2hhcioga25vd25Gb3JtYXRzW10gPSB7CisgICAgIjd6aXAiLCAiZ251dGFyIiwgInBheCIsICJwYXhyIiwgInJhdyIsICJ6aXAiCisgIH07CisKKyAgaWYgKCFwYXJzZWRBcmdzLkZvcm1hdC5lbXB0eSgpICYmCisgICAgICAhY206OmNvbnRhaW5zKGtub3duRm9ybWF0cywgcGFyc2VkQXJncy5Gb3JtYXQpKSB7CisgICAgc3RhdHVzLlNldEVycm9yKAorICAgICAgY21TdHJDYXQoImFyY2hpdmUgZm9ybWF0ICIsIHBhcnNlZEFyZ3MuRm9ybWF0LCAiIG5vdCBzdXBwb3J0ZWQiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjb25zdCBjaGFyKiB6aXBGaWxlRm9ybWF0c1tdID0geyAiN3ppcCIsICJ6aXAiIH07CisgIGlmICghcGFyc2VkQXJncy5Db21wcmVzc2lvbi5lbXB0eSgpICYmCisgICAgICBjbTo6Y29udGFpbnMoemlwRmlsZUZvcm1hdHMsIHBhcnNlZEFyZ3MuRm9ybWF0KSkgeworICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiYXJjaGl2ZSBmb3JtYXQgIiwgcGFyc2VkQXJncy5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZG9lcyBub3Qgc3VwcG9ydCBDT01QUkVTU0lPTiBhcmd1bWVudHMiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGF0aWMgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtU3lzdGVtVG9vbHM6OmNtVGFyQ29tcHJlc3Npb24+CisgICAgY29tcHJlc3Npb25UeXBlTWFwID0geyB7ICJOb25lIiwgY21TeXN0ZW1Ub29sczo6VGFyQ29tcHJlc3NOb25lIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJCWmlwMiIsIGNtU3lzdGVtVG9vbHM6OlRhckNvbXByZXNzQlppcDIgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIkdaaXAiLCBjbVN5c3RlbVRvb2xzOjpUYXJDb21wcmVzc0daaXAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIlhaIiwgY21TeXN0ZW1Ub29sczo6VGFyQ29tcHJlc3NYWiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAiWnN0ZCIsIGNtU3lzdGVtVG9vbHM6OlRhckNvbXByZXNzWnN0ZCB9IH07CisKKyAgY21TeXN0ZW1Ub29sczo6Y21UYXJDb21wcmVzc2lvbiBjb21wcmVzcyA9IGNtU3lzdGVtVG9vbHM6OlRhckNvbXByZXNzTm9uZTsKKyAgYXV0byB0eXBlSXQgPSBjb21wcmVzc2lvblR5cGVNYXAuZmluZChwYXJzZWRBcmdzLkNvbXByZXNzaW9uKTsKKyAgaWYgKHR5cGVJdCAhPSBjb21wcmVzc2lvblR5cGVNYXAuZW5kKCkpIHsKKyAgICBjb21wcmVzcyA9IHR5cGVJdC0+c2Vjb25kOworICB9IGVsc2UgaWYgKCFwYXJzZWRBcmdzLkNvbXByZXNzaW9uLmVtcHR5KCkpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoImNvbXByZXNzaW9uIHR5cGUgIiwgcGFyc2VkQXJncy5Db21wcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyBub3Qgc3VwcG9ydGVkIikpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKHBhcnNlZEFyZ3MuUGF0aHMuZW1wdHkoKSkgeworICAgIHN0YXR1cy5TZXRFcnJvcigiQVJDSElWRV9DUkVBVEUgcmVxdWlyZXMgYSBub24tZW1wdHkgbGlzdCBvZiBQQVRIUyIpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKCFjbVN5c3RlbVRvb2xzOjpDcmVhdGVUYXIocGFyc2VkQXJncy5PdXRwdXQsIHBhcnNlZEFyZ3MuUGF0aHMsIGNvbXByZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRBcmdzLlZlcmJvc2UsIHBhcnNlZEFyZ3MuTVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZEFyZ3MuRm9ybWF0KSkgeworICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiZmFpbGVkIHRvIGNvbXByZXNzOiAiLCBwYXJzZWRBcmdzLk91dHB1dCkpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSGFuZGxlQXJjaGl2ZUV4dHJhY3RDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCit7CisgIHN0cnVjdCBBcmd1bWVudHMKKyAgeworICAgIHN0ZDo6c3RyaW5nIElucHV0OworICAgIGJvb2wgVmVyYm9zZSA9IGZhbHNlOworICAgIGJvb2wgTGlzdE9ubHkgPSBmYWxzZTsKKyAgICBzdGQ6OnN0cmluZyBEZXN0aW5hdGlvbjsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gUGF0dGVybnM7CisgIH07CisKKyAgc3RhdGljIGF1dG8gY29uc3QgcGFyc2VyID0gY21Bcmd1bWVudFBhcnNlcjxBcmd1bWVudHM+e30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuQmluZCgiSU5QVVQiX3MsICZBcmd1bWVudHM6OklucHV0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJWRVJCT1NFIl9zLCAmQXJndW1lbnRzOjpWZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJMSVNUX09OTFkiX3MsICZBcmd1bWVudHM6Okxpc3RPbmx5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5CaW5kKCJERVNUSU5BVElPTiJfcywgJkFyZ3VtZW50czo6RGVzdGluYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLkJpbmQoIlBBVFRFUk5TIl9zLCAmQXJndW1lbnRzOjpQYXR0ZXJucyk7CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHVucmVjb2duaXplZEFyZ3VtZW50czsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGtleXdvcmRzTWlzc2luZ1ZhbHVlczsKKyAgYXV0byBwYXJzZWRBcmdzID0KKyAgICBwYXJzZXIuUGFyc2UoY21NYWtlUmFuZ2UoYXJncykuYWR2YW5jZSgxKSwgJnVucmVjb2duaXplZEFyZ3VtZW50cywKKyAgICAgICAgICAgICAgICAgJmtleXdvcmRzTWlzc2luZ1ZhbHVlcyk7CisgIGF1dG8gYXJnSXQgPSB1bnJlY29nbml6ZWRBcmd1bWVudHMuYmVnaW4oKTsKKyAgaWYgKGFyZ0l0ICE9IHVucmVjb2duaXplZEFyZ3VtZW50cy5lbmQoKSkgeworICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiVW5yZWNvZ25pemVkIGFyZ3VtZW50OiBcIiIsICphcmdJdCwgIlwiIikpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IExJU1RfQVJHUyA9IHsgIklOUFVUIiwgIkRFU1RJTkFUSU9OIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBVFRFUk5TIiB9OworICBhdXRvIGt3YmVnaW4gPSBrZXl3b3Jkc01pc3NpbmdWYWx1ZXMuY2JlZ2luKCk7CisgIGF1dG8ga3dlbmQgPSBjbVJlbW92ZU1hdGNoaW5nKGtleXdvcmRzTWlzc2luZ1ZhbHVlcywgTElTVF9BUkdTKTsKKyAgaWYgKGt3ZW5kICE9IGt3YmVnaW4pIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoIktleXdvcmRzIG1pc3NpbmcgdmFsdWVzOlxuICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUpvaW4oY21NYWtlUmFuZ2Uoa3diZWdpbiwga3dlbmQpLCAiXG4gICIpKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGQ6OnN0cmluZyBpbkZpbGUgPSBwYXJzZWRBcmdzLklucHV0OworCisgIGlmIChwYXJzZWRBcmdzLkxpc3RPbmx5KSB7CisgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpMaXN0VGFyKGluRmlsZSwgcGFyc2VkQXJncy5QYXR0ZXJucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQXJncy5WZXJib3NlKSkgeworICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJmYWlsZWQgdG8gbGlzdDogIiwgaW5GaWxlKSk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzdGQ6OnN0cmluZyBkZXN0RGlyID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOworICAgIGlmICghcGFyc2VkQXJncy5EZXN0aW5hdGlvbi5lbXB0eSgpKSB7CisgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGFyc2VkQXJncy5EZXN0aW5hdGlvbikpIHsKKyAgICAgICAgZGVzdERpciA9IHBhcnNlZEFyZ3MuRGVzdGluYXRpb247CisgICAgICB9IGVsc2UgeworICAgICAgICBkZXN0RGlyID0gY21TdHJDYXQoZGVzdERpciwgIi8iLCBwYXJzZWRBcmdzLkRlc3RpbmF0aW9uKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KGRlc3REaXIpKSB7CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3Rvcnk6ICIsIGRlc3REaXIpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGluRmlsZSkpIHsKKyAgICAgICAgaW5GaWxlID0KKyAgICAgICAgICBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpLCAiLyIsIGluRmlsZSk7CisgICAgICB9CisgICAgfQorCisgICAgY21Xb3JraW5nRGlyZWN0b3J5IHdvcmtkaXIoZGVzdERpcik7CisgICAgaWYgKHdvcmtkaXIuRmFpbGVkKCkpIHsKKyAgICAgIHN0YXR1cy5TZXRFcnJvcigKKyAgICAgICAgY21TdHJDYXQoImZhaWxlZCB0byBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkgdG86ICIsIGRlc3REaXIpKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpFeHRyYWN0VGFyKGluRmlsZSwgcGFyc2VkQXJncy5QYXR0ZXJucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQXJncy5WZXJib3NlKSkgeworICAgICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJmYWlsZWQgdG8gZXh0cmFjdDogIiwgaW5GaWxlKSk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZQogCiBib29sIGNtRmlsZUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLApAQCAtMjgyNyw2ICszMTk4LDkgQEAKICAgICB7ICJSRUFEX1NZTUxJTksiX3MsIEhhbmRsZVJlYWRTeW1saW5rQ29tbWFuZCB9LAogICAgIHsgIkNSRUFURV9MSU5LIl9zLCBIYW5kbGVDcmVhdGVMaW5rQ29tbWFuZCB9LAogICAgIHsgIkdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUyJfcywgSGFuZGxlR2V0UnVudGltZURlcGVuZGVuY2llc0NvbW1hbmQgfSwKKyAgICB7ICJDT05GSUdVUkUiX3MsIEhhbmRsZUNvbmZpZ3VyZUNvbW1hbmQgfSwKKyAgICB7ICJBUkNISVZFX0NSRUFURSJfcywgSGFuZGxlQXJjaGl2ZUNyZWF0ZUNvbW1hbmQgfSwKKyAgICB7ICJBUkNISVZFX0VYVFJBQ1QiX3MsIEhhbmRsZUFyY2hpdmVFeHRyYWN0Q29tbWFuZCB9LAogICB9OwogCiAgIHJldHVybiBzdWJjb21tYW5kKGFyZ3NbMF0sIGFyZ3MsIHN0YXR1cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaWxlQ29waWVyLmN4eCBiL1NvdXJjZS9jbUZpbGVDb3BpZXIuY3h4CmluZGV4IDYyN2UwNWIuLjVkNDRhMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbGVDb3BpZXIuY3h4CisrKyBiL1NvdXJjZS9jbUZpbGVDb3BpZXIuY3h4CkBAIC0xNzMsNyArMTczLDcgQEAKICAgLy8gY2hlY2sgaWYgZGVmYXVsdCBkaXIgY3JlYXRpb24gcGVybWlzc2lvbnMgd2VyZSBzZXQKICAgY29uc3QgY2hhciogZGVmYXVsdF9kaXJfaW5zdGFsbF9wZXJtaXNzaW9ucyA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKAogICAgICJDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TIik7Ci0gIGlmIChkZWZhdWx0X2Rpcl9pbnN0YWxsX3Blcm1pc3Npb25zICYmICpkZWZhdWx0X2Rpcl9pbnN0YWxsX3Blcm1pc3Npb25zKSB7CisgIGlmIChjbU5vbmVtcHR5KGRlZmF1bHRfZGlyX2luc3RhbGxfcGVybWlzc2lvbnMpKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGl0ZW1zID0KICAgICAgIGNtRXhwYW5kZWRMaXN0KGRlZmF1bHRfZGlyX2luc3RhbGxfcGVybWlzc2lvbnMpOwogICAgIGZvciAoY29uc3QgYXV0byYgYXJnIDogaXRlbXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVMb2NrLmN4eCBiL1NvdXJjZS9jbUZpbGVMb2NrLmN4eAppbmRleCBlOTBmNTcxLi42MDEwMjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlTG9jay5jeHgKKysrIGIvU291cmNlL2NtRmlsZUxvY2suY3h4CkBAIC0zLDExICszLDIzIEBACiAjaW5jbHVkZSAiY21GaWxlTG9jay5oIgogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21GaWxlTG9ja1Jlc3VsdC5oIgogCiAvLyBDb21tb24gaW1wbGVtZW50YXRpb24KIAorY21GaWxlTG9jazo6Y21GaWxlTG9jayhjbUZpbGVMb2NrJiYgb3RoZXIpIG5vZXhjZXB0Cit7CisgIHRoaXMtPkZpbGUgPSBvdGhlci5GaWxlOworI2lmIGRlZmluZWQoX1dJTjMyKQorICBvdGhlci5GaWxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisjZWxzZQorICBvdGhlci5GaWxlID0gLTE7CisjZW5kaWYKKyAgdGhpcy0+RmlsZW5hbWUgPSBzdGQ6Om1vdmUob3RoZXIuRmlsZW5hbWUpOworfQorCiBjbUZpbGVMb2NrOjp+Y21GaWxlTG9jaygpCiB7CiAgIGlmICghdGhpcy0+RmlsZW5hbWUuZW1wdHkoKSkgewpAQCAtMTcsNiArMjksMTkgQEAKICAgfQogfQogCitjbUZpbGVMb2NrJiBjbUZpbGVMb2NrOjpvcGVyYXRvcj0oY21GaWxlTG9jayYmIG90aGVyKSBub2V4Y2VwdAoreworICB0aGlzLT5GaWxlID0gb3RoZXIuRmlsZTsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgb3RoZXIuRmlsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOworI2Vsc2UKKyAgb3RoZXIuRmlsZSA9IC0xOworI2VuZGlmCisgIHRoaXMtPkZpbGVuYW1lID0gc3RkOjptb3ZlKG90aGVyLkZpbGVuYW1lKTsKKworICByZXR1cm4gKnRoaXM7Cit9CisKIGNtRmlsZUxvY2tSZXN1bHQgY21GaWxlTG9jazo6TG9jayhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUxvY2suaCBiL1NvdXJjZS9jbUZpbGVMb2NrLmgKaW5kZXggMjEzMGQ2NS4uNWZlMDY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUxvY2suaAorKysgYi9Tb3VyY2UvY21GaWxlTG9jay5oCkBAIC0yNiw3ICsyNiw5IEBACiAgIH5jbUZpbGVMb2NrKCk7CiAKICAgY21GaWxlTG9jayhjbUZpbGVMb2NrIGNvbnN0JikgPSBkZWxldGU7CisgIGNtRmlsZUxvY2soY21GaWxlTG9jayYmKSBub2V4Y2VwdDsKICAgY21GaWxlTG9jayYgb3BlcmF0b3I9KGNtRmlsZUxvY2sgY29uc3QmKSA9IGRlbGV0ZTsKKyAgY21GaWxlTG9jayYgb3BlcmF0b3I9KGNtRmlsZUxvY2smJikgbm9leGNlcHQ7CiAKICAgLyoqCiAgICAqIEBicmllZiBMb2NrIHRoZSBmaWxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtRmlsZUxvY2tQb29sLmN4eCBiL1NvdXJjZS9jbUZpbGVMb2NrUG9vbC5jeHgKaW5kZXggOGRiMmRiMi4uZTFmNmU5NCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUxvY2tQb29sLmN4eAorKysgYi9Tb3VyY2UvY21GaWxlTG9ja1Bvb2wuY3h4CkBAIC0zLDQwICszLDM0IEBACiAjaW5jbHVkZSAiY21GaWxlTG9ja1Bvb2wuaCIKIAogI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRmlsZUxvY2suaCIKICNpbmNsdWRlICJjbUZpbGVMb2NrUmVzdWx0LmgiCiAKIGNtRmlsZUxvY2tQb29sOjpjbUZpbGVMb2NrUG9vbCgpID0gZGVmYXVsdDsKIAotY21GaWxlTG9ja1Bvb2w6On5jbUZpbGVMb2NrUG9vbCgpCi17Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkZ1bmN0aW9uU2NvcGVzKTsKLSAgY21EZWxldGVBbGwodGhpcy0+RmlsZVNjb3Blcyk7Ci19CitjbUZpbGVMb2NrUG9vbDo6fmNtRmlsZUxvY2tQb29sKCkgPSBkZWZhdWx0OwogCiB2b2lkIGNtRmlsZUxvY2tQb29sOjpQdXNoRnVuY3Rpb25TY29wZSgpCiB7Ci0gIHRoaXMtPkZ1bmN0aW9uU2NvcGVzLnB1c2hfYmFjayhuZXcgU2NvcGVQb29sKCkpOworICB0aGlzLT5GdW5jdGlvblNjb3Blcy5wdXNoX2JhY2soU2NvcGVQb29sKCkpOwogfQogCiB2b2lkIGNtRmlsZUxvY2tQb29sOjpQb3BGdW5jdGlvblNjb3BlKCkKIHsKICAgYXNzZXJ0KCF0aGlzLT5GdW5jdGlvblNjb3Blcy5lbXB0eSgpKTsKLSAgZGVsZXRlIHRoaXMtPkZ1bmN0aW9uU2NvcGVzLmJhY2soKTsKICAgdGhpcy0+RnVuY3Rpb25TY29wZXMucG9wX2JhY2soKTsKIH0KIAogdm9pZCBjbUZpbGVMb2NrUG9vbDo6UHVzaEZpbGVTY29wZSgpCiB7Ci0gIHRoaXMtPkZpbGVTY29wZXMucHVzaF9iYWNrKG5ldyBTY29wZVBvb2woKSk7CisgIHRoaXMtPkZpbGVTY29wZXMucHVzaF9iYWNrKFNjb3BlUG9vbCgpKTsKIH0KIAogdm9pZCBjbUZpbGVMb2NrUG9vbDo6UG9wRmlsZVNjb3BlKCkKIHsKICAgYXNzZXJ0KCF0aGlzLT5GaWxlU2NvcGVzLmVtcHR5KCkpOwotICBkZWxldGUgdGhpcy0+RmlsZVNjb3Blcy5iYWNrKCk7CiAgIHRoaXMtPkZpbGVTY29wZXMucG9wX2JhY2soKTsKIH0KIApAQCAtNDksNyArNDMsNyBAQAogICBpZiAodGhpcy0+RnVuY3Rpb25TY29wZXMuZW1wdHkoKSkgewogICAgIHJldHVybiBjbUZpbGVMb2NrUmVzdWx0OjpNYWtlTm9GdW5jdGlvbigpOwogICB9Ci0gIHJldHVybiB0aGlzLT5GdW5jdGlvblNjb3Blcy5iYWNrKCktPkxvY2soZmlsZW5hbWUsIHRpbWVvdXRTZWMpOworICByZXR1cm4gdGhpcy0+RnVuY3Rpb25TY29wZXMuYmFjaygpLkxvY2soZmlsZW5hbWUsIHRpbWVvdXRTZWMpOwogfQogCiBjbUZpbGVMb2NrUmVzdWx0IGNtRmlsZUxvY2tQb29sOjpMb2NrRmlsZVNjb3BlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSwKQEAgLTU5LDcgKzUzLDcgQEAKICAgICByZXR1cm4gY21GaWxlTG9ja1Jlc3VsdDo6TWFrZUFscmVhZHlMb2NrZWQoKTsKICAgfQogICBhc3NlcnQoIXRoaXMtPkZpbGVTY29wZXMuZW1wdHkoKSk7Ci0gIHJldHVybiB0aGlzLT5GaWxlU2NvcGVzLmJhY2soKS0+TG9jayhmaWxlbmFtZSwgdGltZW91dFNlYyk7CisgIHJldHVybiB0aGlzLT5GaWxlU2NvcGVzLmJhY2soKS5Mb2NrKGZpbGVuYW1lLCB0aW1lb3V0U2VjKTsKIH0KIAogY21GaWxlTG9ja1Jlc3VsdCBjbUZpbGVMb2NrUG9vbDo6TG9ja1Byb2Nlc3NTY29wZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCkBAIC03NCwxNCArNjgsMTQgQEAKIGNtRmlsZUxvY2tSZXN1bHQgY21GaWxlTG9ja1Bvb2w6OlJlbGVhc2UoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQogewogICBmb3IgKGF1dG8mIGZ1bmNTY29wZSA6IHRoaXMtPkZ1bmN0aW9uU2NvcGVzKSB7Ci0gICAgY29uc3QgY21GaWxlTG9ja1Jlc3VsdCByZXN1bHQgPSBmdW5jU2NvcGUtPlJlbGVhc2UoZmlsZW5hbWUpOworICAgIGNvbnN0IGNtRmlsZUxvY2tSZXN1bHQgcmVzdWx0ID0gZnVuY1Njb3BlLlJlbGVhc2UoZmlsZW5hbWUpOwogICAgIGlmICghcmVzdWx0LklzT2soKSkgewogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgIH0KIAogICBmb3IgKGF1dG8mIGZpbGVTY29wZSA6IHRoaXMtPkZpbGVTY29wZXMpIHsKLSAgICBjb25zdCBjbUZpbGVMb2NrUmVzdWx0IHJlc3VsdCA9IGZpbGVTY29wZS0+UmVsZWFzZShmaWxlbmFtZSk7CisgICAgY29uc3QgY21GaWxlTG9ja1Jlc3VsdCByZXN1bHQgPSBmaWxlU2NvcGUuUmVsZWFzZShmaWxlbmFtZSk7CiAgICAgaWYgKCFyZXN1bHQuSXNPaygpKSB7CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTkzLDE0ICs4NywxNCBAQAogYm9vbCBjbUZpbGVMb2NrUG9vbDo6SXNBbHJlYWR5TG9ja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkgY29uc3QKIHsKICAgZm9yIChhdXRvIGNvbnN0JiBmdW5jU2NvcGUgOiB0aGlzLT5GdW5jdGlvblNjb3BlcykgewotICAgIGNvbnN0IGJvb2wgcmVzdWx0ID0gZnVuY1Njb3BlLT5Jc0FscmVhZHlMb2NrZWQoZmlsZW5hbWUpOworICAgIGNvbnN0IGJvb2wgcmVzdWx0ID0gZnVuY1Njb3BlLklzQWxyZWFkeUxvY2tlZChmaWxlbmFtZSk7CiAgICAgaWYgKHJlc3VsdCkgewogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CiAKICAgZm9yIChhdXRvIGNvbnN0JiBmaWxlU2NvcGUgOiB0aGlzLT5GaWxlU2NvcGVzKSB7Ci0gICAgY29uc3QgYm9vbCByZXN1bHQgPSBmaWxlU2NvcGUtPklzQWxyZWFkeUxvY2tlZChmaWxlbmFtZSk7CisgICAgY29uc3QgYm9vbCByZXN1bHQgPSBmaWxlU2NvcGUuSXNBbHJlYWR5TG9ja2VkKGZpbGVuYW1lKTsKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xMTEsMjEgKzEwNSwyOSBAQAogCiBjbUZpbGVMb2NrUG9vbDo6U2NvcGVQb29sOjpTY29wZVBvb2woKSA9IGRlZmF1bHQ7CiAKLWNtRmlsZUxvY2tQb29sOjpTY29wZVBvb2w6On5TY29wZVBvb2woKQorY21GaWxlTG9ja1Bvb2w6OlNjb3BlUG9vbDo6flNjb3BlUG9vbCgpID0gZGVmYXVsdDsKKworY21GaWxlTG9ja1Bvb2w6OlNjb3BlUG9vbDo6U2NvcGVQb29sKFNjb3BlUG9vbCYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKK2NtRmlsZUxvY2tQb29sOjpTY29wZVBvb2wmIGNtRmlsZUxvY2tQb29sOjpTY29wZVBvb2w6Om9wZXJhdG9yPSgKKyAgU2NvcGVQb29sJiYgb3RoZXIpIG5vZXhjZXB0CiB7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkxvY2tzKTsKKyAgaWYgKHRoaXMgIT0gJm90aGVyKSB7CisgICAgdGhpcy0+TG9ja3MgPSBzdGQ6Om1vdmUob3RoZXIuTG9ja3MpOworICB9CisKKyAgcmV0dXJuICp0aGlzOwogfQogCiBjbUZpbGVMb2NrUmVzdWx0IGNtRmlsZUxvY2tQb29sOjpTY29wZVBvb2w6OkxvY2soY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dFNlYykKIHsKLSAgY21GaWxlTG9jayogbG9jayA9IG5ldyBjbUZpbGVMb2NrKCk7Ci0gIGNvbnN0IGNtRmlsZUxvY2tSZXN1bHQgcmVzdWx0ID0gbG9jay0+TG9jayhmaWxlbmFtZSwgdGltZW91dFNlYyk7CisgIGNtRmlsZUxvY2sgbG9jazsKKyAgY29uc3QgY21GaWxlTG9ja1Jlc3VsdCByZXN1bHQgPSBsb2NrLkxvY2soZmlsZW5hbWUsIHRpbWVvdXRTZWMpOwogICBpZiAocmVzdWx0LklzT2soKSkgewotICAgIHRoaXMtPkxvY2tzLnB1c2hfYmFjayhsb2NrKTsKKyAgICB0aGlzLT5Mb2Nrcy5wdXNoX2JhY2soc3RkOjptb3ZlKGxvY2spKTsKICAgICByZXR1cm4gY21GaWxlTG9ja1Jlc3VsdDo6TWFrZU9rKCk7CiAgIH0KLSAgZGVsZXRlIGxvY2s7CiAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzMyw4ICsxMzUsOCBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpCiB7CiAgIGZvciAoYXV0byYgbG9jayA6IHRoaXMtPkxvY2tzKSB7Ci0gICAgaWYgKGxvY2stPklzTG9ja2VkKGZpbGVuYW1lKSkgewotICAgICAgcmV0dXJuIGxvY2stPlJlbGVhc2UoKTsKKyAgICBpZiAobG9jay5Jc0xvY2tlZChmaWxlbmFtZSkpIHsKKyAgICAgIHJldHVybiBsb2NrLlJlbGVhc2UoKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIGNtRmlsZUxvY2tSZXN1bHQ6Ok1ha2VPaygpOwpAQCAtMTQ0LDcgKzE0Niw3IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkgY29uc3QKIHsKICAgZm9yIChhdXRvIGNvbnN0JiBsb2NrIDogdGhpcy0+TG9ja3MpIHsKLSAgICBpZiAobG9jay0+SXNMb2NrZWQoZmlsZW5hbWUpKSB7CisgICAgaWYgKGxvY2suSXNMb2NrZWQoZmlsZW5hbWUpKSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVMb2NrUG9vbC5oIGIvU291cmNlL2NtRmlsZUxvY2tQb29sLmgKaW5kZXggZGFlNjhkZC4uZDQ1YzgyYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmlsZUxvY2tQb29sLmgKKysrIGIvU291cmNlL2NtRmlsZUxvY2tQb29sLmgKQEAgLTgsNyArOCw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotY2xhc3MgY21GaWxlTG9jazsKKyNpbmNsdWRlICJjbUZpbGVMb2NrLmgiCisKIGNsYXNzIGNtRmlsZUxvY2tSZXN1bHQ7CiAKIGNsYXNzIGNtRmlsZUxvY2tQb29sCkBAIC02NCw3ICs2NSw5IEBACiAgICAgflNjb3BlUG9vbCgpOwogCiAgICAgU2NvcGVQb29sKFNjb3BlUG9vbCBjb25zdCYpID0gZGVsZXRlOworICAgIFNjb3BlUG9vbChTY29wZVBvb2wmJikgbm9leGNlcHQ7CiAgICAgU2NvcGVQb29sJiBvcGVyYXRvcj0oU2NvcGVQb29sIGNvbnN0JikgPSBkZWxldGU7CisgICAgU2NvcGVQb29sJiBvcGVyYXRvcj0oU2NvcGVQb29sJiYpIG5vZXhjZXB0OwogCiAgICAgY21GaWxlTG9ja1Jlc3VsdCBMb2NrKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0U2VjKTsKQEAgLTcyLDE3ICs3NSwxMiBAQAogICAgIGJvb2wgSXNBbHJlYWR5TG9ja2VkKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkgY29uc3Q7CiAKICAgcHJpdmF0ZToKLSAgICB1c2luZyBMaXN0ID0gc3RkOjp2ZWN0b3I8Y21GaWxlTG9jayo+OwotICAgIHVzaW5nIEl0ID0gTGlzdDo6aXRlcmF0b3I7Ci0gICAgdXNpbmcgQ0l0ID0gTGlzdDo6Y29uc3RfaXRlcmF0b3I7CisgICAgdXNpbmcgTGlzdCA9IHN0ZDo6dmVjdG9yPGNtRmlsZUxvY2s+OwogCiAgICAgTGlzdCBMb2NrczsKICAgfTsKIAotICB1c2luZyBMaXN0ID0gc3RkOjp2ZWN0b3I8U2NvcGVQb29sKj47Ci0KLSAgdXNpbmcgSXQgPSBMaXN0OjppdGVyYXRvcjsKLSAgdXNpbmcgQ0l0ID0gTGlzdDo6Y29uc3RfaXRlcmF0b3I7CisgIHVzaW5nIExpc3QgPSBzdGQ6OnZlY3RvcjxTY29wZVBvb2w+OwogCiAgIExpc3QgRnVuY3Rpb25TY29wZXM7CiAgIExpc3QgRmlsZVNjb3BlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVNb25pdG9yLmN4eCBiL1NvdXJjZS9jbUZpbGVNb25pdG9yLmN4eAppbmRleCBhYzhhMzdlLi44Y2ZkYjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaWxlTW9uaXRvci5jeHgKKysrIGIvU291cmNlL2NtRmlsZU1vbml0b3IuY3h4CkBAIC03LDkgKzcsOSBAQAogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtc3lzL1N5c3RlbVRvb2xzLmh4eCIKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJjbXN5cy9TeXN0ZW1Ub29scy5oeHgiCiAKIG5hbWVzcGFjZSB7CiB2b2lkIG9uX2RpcmVjdG9yeV9jaGFuZ2UodXZfZnNfZXZlbnRfdCogaGFuZGxlLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwKQEAgLTM3LDEyICszNywxMiBAQAogY2xhc3MgY21WaXJ0dWFsRGlyZWN0b3J5V2F0Y2hlciA6IHB1YmxpYyBjbUlCYXNlV2F0Y2hlcgogewogcHVibGljOgotICB+Y21WaXJ0dWFsRGlyZWN0b3J5V2F0Y2hlcigpIG92ZXJyaWRlIHsgY21EZWxldGVBbGwodGhpcy0+Q2hpbGRyZW4pOyB9CisgIH5jbVZpcnR1YWxEaXJlY3RvcnlXYXRjaGVyKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OwogCiAgIGNtSUJhc2VXYXRjaGVyKiBGaW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcykKICAgewogICAgIGNvbnN0IGF1dG8gaSA9IHRoaXMtPkNoaWxkcmVuLmZpbmQocHMpOwotICAgIHJldHVybiAoaSA9PSB0aGlzLT5DaGlsZHJlbi5lbmQoKSkgPyBudWxscHRyIDogaS0+c2Vjb25kOworICAgIHJldHVybiAoaSA9PSB0aGlzLT5DaGlsZHJlbi5lbmQoKSkgPyBudWxscHRyIDogaS0+c2Vjb25kLmdldCgpOwogICB9CiAKICAgdm9pZCBUcmlnZ2VyKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoU2VnbWVudCwgaW50IGV2ZW50cywKQEAgLTk2LDExICs5Niw3IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCi0gIHZvaWQgUmVzZXQoKQotICB7Ci0gICAgY21EZWxldGVBbGwodGhpcy0+Q2hpbGRyZW4pOwotICAgIHRoaXMtPkNoaWxkcmVuLmNsZWFyKCk7Ci0gIH0KKyAgdm9pZCBSZXNldCgpIHsgdGhpcy0+Q2hpbGRyZW4uY2xlYXIoKTsgfQogCiAgIHZvaWQgQWRkQ2hpbGRXYXRjaGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcywgY21JQmFzZVdhdGNoZXIqIHdhdGNoZXIpCiAgIHsKQEAgLTEwOCwxMSArMTA0LDEyIEBACiAgICAgYXNzZXJ0KHRoaXMtPkNoaWxkcmVuLmZpbmQocHMpID09IHRoaXMtPkNoaWxkcmVuLmVuZCgpKTsKICAgICBhc3NlcnQod2F0Y2hlcik7CiAKLSAgICB0aGlzLT5DaGlsZHJlbi5lbXBsYWNlKHN0ZDo6bWFrZV9wYWlyKHBzLCB3YXRjaGVyKSk7CisgICAgdGhpcy0+Q2hpbGRyZW4uZW1wbGFjZShwcywgc3RkOjp1bmlxdWVfcHRyPGNtSUJhc2VXYXRjaGVyPih3YXRjaGVyKSk7CiAgIH0KIAogcHJpdmF0ZToKLSAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBjbUlCYXNlV2F0Y2hlcio+IENoaWxkcmVuOyAvLyBvd25lZCEKKyAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Y21JQmFzZVdhdGNoZXI+PgorICAgIENoaWxkcmVuOyAvLyBvd25lZCEKIH07CiAKIC8vIFJvb3Qgb2YgYWxsIHRoZSBkaWZmZXJlbnQgKG9uIHdpbmRvd3MhKSByb290IGRpcmVjdG9yaWVzOgpAQCAtMjk1LDE0ICsyOTIsMTEgQEAKIH0gLy8gbmFtZXNwYWNlCiAKIGNtRmlsZU1vbml0b3I6OmNtRmlsZU1vbml0b3IodXZfbG9vcF90KiBsKQotICA6IFJvb3QobmV3IGNtUm9vdFdhdGNoZXIobCkpCisgIDogUm9vdChjbTo6bWFrZV91bmlxdWU8Y21Sb290V2F0Y2hlcj4obCkpCiB7CiB9CiAKLWNtRmlsZU1vbml0b3I6On5jbUZpbGVNb25pdG9yKCkKLXsKLSAgZGVsZXRlIHRoaXMtPlJvb3Q7Ci19CitjbUZpbGVNb25pdG9yOjp+Y21GaWxlTW9uaXRvcigpID0gZGVmYXVsdDsKIAogdm9pZCBjbUZpbGVNb25pdG9yOjpNb25pdG9yUGF0aHMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXRocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxiYWNrIGNvbnN0JiBjYikKQEAgLTMxNiw3ICszMTAsNyBAQAogICAgIGlmIChzZWdtZW50Q291bnQgPCAyKSB7IC8vIEV4cGVjdCBhdCBsZWFzdCByb290ZGlyIGFuZCBmaWxlbmFtZQogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGNtVmlydHVhbERpcmVjdG9yeVdhdGNoZXIqIGN1cnJlbnRXYXRjaGVyID0gdGhpcy0+Um9vdDsKKyAgICBjbVZpcnR1YWxEaXJlY3RvcnlXYXRjaGVyKiBjdXJyZW50V2F0Y2hlciA9IHRoaXMtPlJvb3QuZ2V0KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWdtZW50Q291bnQ7ICsraSkgewogICAgICAgYXNzZXJ0KGN1cnJlbnRXYXRjaGVyKTsKIApAQCAtMzM0LDExICszMjgsMTIgQEAKICAgICAgIGNtSUJhc2VXYXRjaGVyKiBuZXh0V2F0Y2hlciA9IGN1cnJlbnRXYXRjaGVyLT5GaW5kKGN1cnJlbnRTZWdtZW50KTsKICAgICAgIGlmICghbmV4dFdhdGNoZXIpIHsKICAgICAgICAgaWYgKHJvb3RTZWdtZW50KSB7IC8vIFJvb3QgcGFydAotICAgICAgICAgIGFzc2VydChjdXJyZW50V2F0Y2hlciA9PSB0aGlzLT5Sb290KTsKLSAgICAgICAgICBuZXh0V2F0Y2hlciA9IG5ldyBjbVJvb3REaXJlY3RvcnlXYXRjaGVyKHRoaXMtPlJvb3QsIGN1cnJlbnRTZWdtZW50KTsKKyAgICAgICAgICBhc3NlcnQoY3VycmVudFdhdGNoZXIgPT0gdGhpcy0+Um9vdC5nZXQoKSk7CisgICAgICAgICAgbmV4dFdhdGNoZXIgPQorICAgICAgICAgICAgbmV3IGNtUm9vdERpcmVjdG9yeVdhdGNoZXIodGhpcy0+Um9vdC5nZXQoKSwgY3VycmVudFNlZ21lbnQpOwogICAgICAgICAgIGFzc2VydChjdXJyZW50V2F0Y2hlci0+RmluZChjdXJyZW50U2VnbWVudCkgPT0gbmV4dFdhdGNoZXIpOwogICAgICAgICB9IGVsc2UgaWYgKGZpbGVTZWdtZW50KSB7IC8vIEZpbGUgcGFydAotICAgICAgICAgIGFzc2VydChjdXJyZW50V2F0Y2hlciAhPSB0aGlzLT5Sb290KTsKKyAgICAgICAgICBhc3NlcnQoY3VycmVudFdhdGNoZXIgIT0gdGhpcy0+Um9vdC5nZXQoKSk7CiAgICAgICAgICAgbmV4dFdhdGNoZXIgPSBuZXcgY21GaWxlV2F0Y2hlcigKICAgICAgICAgICAgIGR5bmFtaWNfY2FzdDxjbVJlYWxEaXJlY3RvcnlXYXRjaGVyKj4oY3VycmVudFdhdGNoZXIpLAogICAgICAgICAgICAgY3VycmVudFNlZ21lbnQsIGNiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbGVNb25pdG9yLmggYi9Tb3VyY2UvY21GaWxlTW9uaXRvci5oCmluZGV4IDdmZmM5MjkuLmZjNzViMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbGVNb25pdG9yLmgKKysrIGIvU291cmNlL2NtRmlsZU1vbml0b3IuaApAQCAtNSwxMCArNSwxMSBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21fdXYuaCIKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAKIGNsYXNzIGNtUm9vdFdhdGNoZXI7CiAKQEAgLTMwLDUgKzMxLDUgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFdhdGNoZWREaXJlY3RvcmllcygpIGNvbnN0OwogCiBwcml2YXRlOgotICBjbVJvb3RXYXRjaGVyKiBSb290OworICBzdGQ6OnVuaXF1ZV9wdHI8Y21Sb290V2F0Y2hlcj4gUm9vdDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kQmFzZS5jeHggYi9Tb3VyY2UvY21GaW5kQmFzZS5jeHgKaW5kZXggN2Q3NDExOC4uNzQzYWM3NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmluZEJhc2UuY3h4CisrKyBiL1NvdXJjZS9jbUZpbmRCYXNlLmN4eApAQCAtNCwxMSArNCwxMyBAQAogCiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtU2VhcmNoUGF0aC5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKQEAgLTIxLDEwICsyMyw2IEBACiBjbUZpbmRCYXNlOjpjbUZpbmRCYXNlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiAgIDogY21GaW5kQ29tbW9uKHN0YXR1cykKIHsKLSAgdGhpcy0+QWxyZWFkeUluQ2FjaGUgPSBmYWxzZTsKLSAgdGhpcy0+QWxyZWFkeUluQ2FjaGVXaXRob3V0TWV0YUluZm8gPSBmYWxzZTsKLSAgdGhpcy0+TmFtZXNQZXJEaXIgPSBmYWxzZTsKLSAgdGhpcy0+TmFtZXNQZXJEaXJBbGxvd2VkID0gZmFsc2U7CiB9CiAKIGJvb2wgY21GaW5kQmFzZTo6UGFyc2VBcmd1bWVudHMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzSW4pCkBAIC0xMTQsMTkgKzExMiwyNSBAQAogICAgIH0gZWxzZSBpZiAoYXJnc1tqXSA9PSAiTk9fU1lTVEVNX1BBVEgiKSB7CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKICAgICAgIHRoaXMtPk5vRGVmYXVsdFBhdGggPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYXJnc1tqXSA9PSAiUkVRVUlSRUQiKSB7CisgICAgICBkb2luZyA9IERvaW5nTm9uZTsKKyAgICAgIHRoaXMtPlJlcXVpcmVkID0gdHJ1ZTsKKyAgICAgIG5ld1N0eWxlID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHRoaXMtPkNoZWNrQ29tbW9uQXJndW1lbnQoYXJnc1tqXSkpIHsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgIH0gZWxzZSB7CiAgICAgICAvLyBTb21lIGNvbW1vbiBhcmd1bWVudHMgd2VyZSBhY2NpZGVudGFsbHkgc3VwcG9ydGVkIGJ5IENNYWtlCiAgICAgICAvLyAyLjQgYW5kIDIuNi4wIGluIHRoZSBzaG9ydC1oYW5kIGZvcm0gb2YgdGhlIGNvbW1hbmQsIHNvIHdlCiAgICAgICAvLyBtdXN0IHN1cHBvcnQgaXQgZXZlbiB0aG91Z2ggaXQgaXMgbm90IGRvY3VtZW50ZWQuCi0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ05hbWVzKSB7Ci0gICAgICB0aGlzLT5OYW1lcy5wdXNoX2JhY2soYXJnc1tqXSk7Ci0gICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ1BhdGhzKSB7Ci0gICAgICB0aGlzLT5Vc2VyR3Vlc3NBcmdzLnB1c2hfYmFjayhhcmdzW2pdKTsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nSGludHMpIHsKLSAgICAgIHRoaXMtPlVzZXJIaW50c0FyZ3MucHVzaF9iYWNrKGFyZ3Nbal0pOwotICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdQYXRoU3VmZml4ZXMpIHsKLSAgICAgIHRoaXMtPkFkZFBhdGhTdWZmaXgoYXJnc1tqXSk7CisgICAgICBpZiAoZG9pbmcgPT0gRG9pbmdOYW1lcykgeworICAgICAgICB0aGlzLT5OYW1lcy5wdXNoX2JhY2soYXJnc1tqXSk7CisgICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nUGF0aHMpIHsKKyAgICAgICAgdGhpcy0+VXNlckd1ZXNzQXJncy5wdXNoX2JhY2soYXJnc1tqXSk7CisgICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nSGludHMpIHsKKyAgICAgICAgdGhpcy0+VXNlckhpbnRzQXJncy5wdXNoX2JhY2soYXJnc1tqXSk7CisgICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nUGF0aFN1ZmZpeGVzKSB7CisgICAgICAgIHRoaXMtPkFkZFBhdGhTdWZmaXgoYXJnc1tqXSk7CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTE1Myw3ICsxNTcsNyBAQAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzaG9ydEFyZ3MgPSB0aGlzLT5OYW1lczsKICAgICB0aGlzLT5OYW1lcy5jbGVhcigpOyAvLyBjbGVhciBvdXQgYW55IHZhbHVlcyBpbiBOYW1lcwogICAgIHRoaXMtPk5hbWVzLnB1c2hfYmFjayhzaG9ydEFyZ3NbMF0pOwotICAgIGNtQXBwZW5kKHRoaXMtPlVzZXJHdWVzc0FyZ3MsIHNob3J0QXJncy5iZWdpbigpICsgMSwgc2hvcnRBcmdzLmVuZCgpKTsKKyAgICBjbTo6YXBwZW5kKHRoaXMtPlVzZXJHdWVzc0FyZ3MsIHNob3J0QXJncy5iZWdpbigpICsgMSwgc2hvcnRBcmdzLmVuZCgpKTsKICAgfQogICB0aGlzLT5FeHBhbmRQYXRocygpOwogCkBAIC0yODgsMzkgKzI5MiwxMiBAQAogICBwYXRocy5BZGRTdWZmaXhlcyh0aGlzLT5TZWFyY2hQYXRoU3VmZml4ZXMpOwogfQogCi12b2lkIGNtRmluZEJhc2U6OlByaW50RmluZFN0dWZmKCkKLXsKLSAgc3RkOjpjZXJyIDw8ICJTZWFyY2hGcmFtZXdvcmtMYXN0OiAiIDw8IHRoaXMtPlNlYXJjaEZyYW1ld29ya0xhc3QgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJTZWFyY2hGcmFtZXdvcmtPbmx5OiAiIDw8IHRoaXMtPlNlYXJjaEZyYW1ld29ya09ubHkgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJTZWFyY2hGcmFtZXdvcmtGaXJzdDogIiA8PCB0aGlzLT5TZWFyY2hGcmFtZXdvcmtGaXJzdCA8PCAiXG4iOwotICBzdGQ6OmNlcnIgPDwgIlNlYXJjaEFwcEJ1bmRsZUxhc3Q6ICIgPDwgdGhpcy0+U2VhcmNoQXBwQnVuZGxlTGFzdCA8PCAiXG4iOwotICBzdGQ6OmNlcnIgPDwgIlNlYXJjaEFwcEJ1bmRsZU9ubHk6ICIgPDwgdGhpcy0+U2VhcmNoQXBwQnVuZGxlT25seSA8PCAiXG4iOwotICBzdGQ6OmNlcnIgPDwgIlNlYXJjaEFwcEJ1bmRsZUZpcnN0OiAiIDw8IHRoaXMtPlNlYXJjaEFwcEJ1bmRsZUZpcnN0IDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiVmFyaWFibGVOYW1lICIgPDwgdGhpcy0+VmFyaWFibGVOYW1lIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiVmFyaWFibGVEb2N1bWVudGF0aW9uICIgPDwgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiTm9EZWZhdWx0UGF0aCAiIDw8IHRoaXMtPk5vRGVmYXVsdFBhdGggPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJOb0NNYWtlRW52aXJvbm1lbnRQYXRoICIgPDwgdGhpcy0+Tm9DTWFrZUVudmlyb25tZW50UGF0aAotICAgICAgICAgICAgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJOb0NNYWtlUGF0aCAiIDw8IHRoaXMtPk5vQ01ha2VQYXRoIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiTm9TeXN0ZW1FbnZpcm9ubWVudFBhdGggIiA8PCB0aGlzLT5Ob1N5c3RlbUVudmlyb25tZW50UGF0aAotICAgICAgICAgICAgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJOb0NNYWtlU3lzdGVtUGF0aCAiIDw8IHRoaXMtPk5vQ01ha2VTeXN0ZW1QYXRoIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiRW52aXJvbm1lbnRQYXRoICIgPDwgdGhpcy0+RW52aXJvbm1lbnRQYXRoIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiQ01ha2VQYXRoTmFtZSAiIDw8IHRoaXMtPkNNYWtlUGF0aE5hbWUgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJOYW1lcyAgIiA8PCBjbUpvaW4odGhpcy0+TmFtZXMsICIgIikgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJcbiI7Ci0gIHN0ZDo6Y2VyciA8PCAiU2VhcmNoUGF0aFN1ZmZpeGVzICAiOwotICBzdGQ6OmNlcnIgPDwgY21Kb2luKHRoaXMtPlNlYXJjaFBhdGhTdWZmaXhlcywgIlxuIikgPDwgIlxuIjsKLSAgc3RkOjpjZXJyIDw8ICJTZWFyY2hQYXRoc1xuIjsKLSAgc3RkOjpjZXJyIDw8IGNtV3JhcCgiWyIsIHRoaXMtPlNlYXJjaFBhdGhzLCAiXSIsICJcbiIpIDw8ICJcbiI7Ci19Ci0KIGJvb2wgY21GaW5kQmFzZTo6Q2hlY2tGb3JWYXJpYWJsZUluQ2FjaGUoKQogewogICBpZiAoY29uc3QgY2hhciogY2FjaGVWYWx1ZSA9CiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSkpIHsKICAgICBjbVN0YXRlKiBzdGF0ZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpOwotICAgIGNvbnN0IGNoYXIqIGNhY2hlRW50cnkgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHRoaXMtPlZhcmlhYmxlTmFtZSk7CisgICAgY21Qcm9wIGNhY2hlRW50cnkgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHRoaXMtPlZhcmlhYmxlTmFtZSk7CiAgICAgYm9vbCBmb3VuZCA9ICFjbUlzTk9URk9VTkQoY2FjaGVWYWx1ZSk7CiAgICAgYm9vbCBjYWNoZWQgPSBjYWNoZUVudHJ5ICE9IG51bGxwdHI7CiAgICAgaWYgKGZvdW5kKSB7CkBAIC0zMzYsMTAgKzMxMyw5NCBAQAogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChjYWNoZWQpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGhzID0KKyAgICAgIGNtUHJvcCBocyA9CiAgICAgICAgIHN0YXRlLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkodGhpcy0+VmFyaWFibGVOYW1lLCAiSEVMUFNUUklORyIpOwotICAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uID0gaHMgPyBocyA6ICIobm9uZSkiOworICAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uID0gaHMgPyAqaHMgOiAiKG5vbmUpIjsKICAgICB9CiAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQorCitjbUZpbmRCYXNlRGVidWdTdGF0ZTo6Y21GaW5kQmFzZURlYnVnU3RhdGUoc3RkOjpzdHJpbmcgY29tbWFuZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21GaW5kQmFzZSBjb25zdCogZmluZEJhc2UpCisgIDogRmluZENvbW1hbmQoZmluZEJhc2UpCisgICwgQ29tbWFuZE5hbWUoc3RkOjptb3ZlKGNvbW1hbmROYW1lKSkKK3sKK30KKworY21GaW5kQmFzZURlYnVnU3RhdGU6On5jbUZpbmRCYXNlRGVidWdTdGF0ZSgpCit7CisgIGlmICh0aGlzLT5GaW5kQ29tbWFuZC0+RGVidWdNb2RlKSB7CisgICAgc3RkOjpzdHJpbmcgYnVmZmVyID0KKyAgICAgIGNtU3RyQ2F0KHRoaXMtPkNvbW1hbmROYW1lLCAiIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6XG4iKTsKKyAgICBidWZmZXIgKz0gY21TdHJDYXQoIiAgVkFSOiAiLCB0aGlzLT5GaW5kQ29tbWFuZC0+VmFyaWFibGVOYW1lLCAiXG4iKTsKKyAgICBidWZmZXIgKz0gY21TdHJDYXQoCisgICAgICAiICBOQU1FUzogIiwgY21XcmFwKCJcIiIsIHRoaXMtPkZpbmRDb21tYW5kLT5OYW1lcywgIlwiIiwgIlxuICAgICAgICAgIiksCisgICAgICAiXG4iKTsKKyAgICBidWZmZXIgKz0gY21TdHJDYXQoCisgICAgICAiICBEb2N1bWVudGF0aW9uOiAiLCB0aGlzLT5GaW5kQ29tbWFuZC0+VmFyaWFibGVEb2N1bWVudGF0aW9uLCAiXG4iKTsKKyAgICBidWZmZXIgKz0gIiAgRnJhbWV3b3JrXG4iOworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIE9ubHkgU2VhcmNoIEZyYW1ld29ya3M6ICIsCisgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkZpbmRDb21tYW5kLT5TZWFyY2hGcmFtZXdvcmtPbmx5LCAiXG4iKTsKKworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIFNlYXJjaCBGcmFtZXdvcmtzIExhc3Q6ICIsCisgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkZpbmRDb21tYW5kLT5TZWFyY2hGcmFtZXdvcmtMYXN0LCAiXG4iKTsKKyAgICBidWZmZXIgKz0gY21TdHJDYXQoIiAgICBTZWFyY2ggRnJhbWV3b3JrcyBGaXJzdDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RmluZENvbW1hbmQtPlNlYXJjaEZyYW1ld29ya0ZpcnN0LCAiXG4iKTsKKyAgICBidWZmZXIgKz0gIiAgQXBwQnVuZGxlXG4iOworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIE9ubHkgU2VhcmNoIEFwcEJ1bmRsZTogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RmluZENvbW1hbmQtPlNlYXJjaEFwcEJ1bmRsZU9ubHksICJcbiIpOworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIFNlYXJjaCBBcHBCdW5kbGUgTGFzdDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+RmluZENvbW1hbmQtPlNlYXJjaEFwcEJ1bmRsZUxhc3QsICJcbiIpOworICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiICAgIFNlYXJjaCBBcHBCdW5kbGUgRmlyc3Q6ICIsCisgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkZpbmRDb21tYW5kLT5TZWFyY2hBcHBCdW5kbGVGaXJzdCwgIlxuIik7CisKKyAgICBpZiAodGhpcy0+RmluZENvbW1hbmQtPk5vRGVmYXVsdFBhdGgpIHsKKyAgICAgIGJ1ZmZlciArPSAiICBOT19ERUZBVUxUX1BBVEggRW5hYmxlZFxuIjsKKyAgICB9IGVsc2UgeworICAgICAgYnVmZmVyICs9IGNtU3RyQ2F0KAorICAgICAgICAiICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAiLCAhdGhpcy0+RmluZENvbW1hbmQtPk5vQ01ha2VQYXRoLCAiXG4iLAorICAgICAgICAiICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRIOiAiLAorICAgICAgICAhdGhpcy0+RmluZENvbW1hbmQtPk5vQ01ha2VFbnZpcm9ubWVudFBhdGgsICJcbiIsCisgICAgICAgICIgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAiLAorICAgICAgICAhdGhpcy0+RmluZENvbW1hbmQtPk5vU3lzdGVtRW52aXJvbm1lbnRQYXRoLCAiXG4iLAorICAgICAgICAiICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9TWVNURU1fUEFUSDogIiwKKyAgICAgICAgIXRoaXMtPkZpbmRDb21tYW5kLT5Ob0NNYWtlU3lzdGVtUGF0aCwgIlxuIik7CisgICAgfQorCisgICAgYnVmZmVyICs9CisgICAgICBjbVN0ckNhdCh0aGlzLT5Db21tYW5kTmFtZSwgIiBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuIik7CisgICAgZm9yIChhdXRvIGNvbnN0JiBzdGF0ZSA6IHRoaXMtPkZhaWxlZFNlYXJjaExvY2F0aW9ucykgeworICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IGNtU3RyQ2F0KCIgICIsIHN0YXRlLnBhdGgpOworICAgICAgaWYgKCFzdGF0ZS5yZWdleE5hbWUuZW1wdHkoKSkgeworICAgICAgICBwYXRoID0gY21TdHJDYXQocGF0aCwgIi8iLCBzdGF0ZS5yZWdleE5hbWUpOworICAgICAgfQorICAgICAgYnVmZmVyICs9IGNtU3RyQ2F0KHBhdGgsICJcbiIpOworICAgIH0KKworICAgIGlmICghdGhpcy0+Rm91bmRTZWFyY2hMb2NhdGlvbi5wYXRoLmVtcHR5KCkpIHsKKyAgICAgIGJ1ZmZlciArPSBjbVN0ckNhdCgiVGhlIGl0ZW0gd2FzIGZvdW5kIGF0XG4gICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Rm91bmRTZWFyY2hMb2NhdGlvbi5wYXRoLCAiXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgYnVmZmVyICs9ICJUaGUgaXRlbSB3YXMgbm90IGZvdW5kLlxuIjsKKyAgICB9CisKKyAgICB0aGlzLT5GaW5kQ29tbWFuZC0+RGVidWdNZXNzYWdlKGJ1ZmZlcik7CisgIH0KK30KKwordm9pZCBjbUZpbmRCYXNlRGVidWdTdGF0ZTo6Rm91bmRBdChzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXhOYW1lKQoreworICBpZiAodGhpcy0+RmluZENvbW1hbmQtPkRlYnVnTW9kZSkgeworICAgIHRoaXMtPkZvdW5kU2VhcmNoTG9jYXRpb24gPSBEZWJ1Z0xpYlN0YXRleyBzdGQ6Om1vdmUocmVnZXhOYW1lKSwgcGF0aCB9OworICB9Cit9CisKK3ZvaWQgY21GaW5kQmFzZURlYnVnU3RhdGU6OkZhaWxlZEF0KHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXhOYW1lKQoreworICBpZiAodGhpcy0+RmluZENvbW1hbmQtPkRlYnVnTW9kZSkgeworICAgIHRoaXMtPkZhaWxlZFNlYXJjaExvY2F0aW9ucy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKHJlZ2V4TmFtZSksIHBhdGgpOworICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kQmFzZS5oIGIvU291cmNlL2NtRmluZEJhc2UuaAppbmRleCBmNzVkYjVmLi40Y2JmMDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kQmFzZS5oCisrKyBiL1NvdXJjZS9jbUZpbmRCYXNlLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNtRmluZENvbW1vbi5oIgpAQCAtMzEsNyArMzIsNyBAQAogICB2aXJ0dWFsIGJvb2wgUGFyc2VBcmd1bWVudHMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzKTsKIAogcHJvdGVjdGVkOgotICB2b2lkIFByaW50RmluZFN0dWZmKCk7CisgIGZyaWVuZCBjbGFzcyBjbUZpbmRCYXNlRGVidWdTdGF0ZTsKICAgdm9pZCBFeHBhbmRQYXRocygpOwogCiAgIC8vIHNlZSBpZiB0aGUgVmFyaWFibGVOYW1lIGlzIGFscmVhZHkgc2V0IGluIHRoZSBjYWNoZSwKQEAgLTQzLDE0ICs0NCwxNiBAQAogICBzdGQ6OnN0cmluZyBWYXJpYWJsZURvY3VtZW50YXRpb247CiAgIHN0ZDo6c3RyaW5nIFZhcmlhYmxlTmFtZTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IE5hbWVzOwotICBib29sIE5hbWVzUGVyRGlyOwotICBib29sIE5hbWVzUGVyRGlyQWxsb3dlZDsKKyAgYm9vbCBOYW1lc1BlckRpciA9IGZhbHNlOworICBib29sIE5hbWVzUGVyRGlyQWxsb3dlZCA9IGZhbHNlOwogCiAgIC8vIENNQUtFXypfUEFUSCBDTUFLRV9TWVNURU1fKl9QQVRIIEZSQU1FV09SS3xMSUJSQVJZfElOQ0xVREV8UFJPR1JBTQogICBzdGQ6OnN0cmluZyBFbnZpcm9ubWVudFBhdGg7IC8vIExJQixJTkNMVURFCiAKLSAgYm9vbCBBbHJlYWR5SW5DYWNoZTsKLSAgYm9vbCBBbHJlYWR5SW5DYWNoZVdpdGhvdXRNZXRhSW5mbzsKKyAgYm9vbCBBbHJlYWR5SW5DYWNoZSA9IGZhbHNlOworICBib29sIEFscmVhZHlJbkNhY2hlV2l0aG91dE1ldGFJbmZvID0gZmFsc2U7CisKKyAgYm9vbCBSZXF1aXJlZCA9IGZhbHNlOwogCiBwcml2YXRlOgogICAvLyBBZGQgcGllY2VzIG9mIHRoZSBzZWFyY2guCkBAIC02Myw0ICs2NiwzMyBAQAogICB2b2lkIEZpbGxVc2VyR3Vlc3NQYXRoKCk7CiB9OwogCitjbGFzcyBjbUZpbmRCYXNlRGVidWdTdGF0ZQoreworcHVibGljOgorICBleHBsaWNpdCBjbUZpbmRCYXNlRGVidWdTdGF0ZShzdGQ6OnN0cmluZyBuYW1lLCBjbUZpbmRCYXNlIGNvbnN0KiBmaW5kQmFzZSk7CisgIH5jbUZpbmRCYXNlRGVidWdTdGF0ZSgpOworCisgIHZvaWQgRm91bmRBdChzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCwgc3RkOjpzdHJpbmcgcmVnZXhOYW1lID0gc3RkOjpzdHJpbmcoKSk7CisgIHZvaWQgRmFpbGVkQXQoc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgsCisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXhOYW1lID0gc3RkOjpzdHJpbmcoKSk7CisKK3ByaXZhdGU6CisgIHN0cnVjdCBEZWJ1Z0xpYlN0YXRlCisgIHsKKyAgICBEZWJ1Z0xpYlN0YXRlKCkgPSBkZWZhdWx0OworICAgIERlYnVnTGliU3RhdGUoc3RkOjpzdHJpbmcmJiBuLCBzdGQ6OnN0cmluZyBwKQorICAgICAgOiByZWdleE5hbWUobikKKyAgICAgICwgcGF0aChzdGQ6Om1vdmUocCkpCisgICAgeworICAgIH0KKyAgICBzdGQ6OnN0cmluZyByZWdleE5hbWU7CisgICAgc3RkOjpzdHJpbmcgcGF0aDsKKyAgfTsKKworICBjbUZpbmRCYXNlIGNvbnN0KiBGaW5kQ29tbWFuZDsKKyAgc3RkOjpzdHJpbmcgQ29tbWFuZE5hbWU7CisgIHN0ZDo6dmVjdG9yPERlYnVnTGliU3RhdGU+IEZhaWxlZFNlYXJjaExvY2F0aW9uczsKKyAgRGVidWdMaWJTdGF0ZSBGb3VuZFNlYXJjaExvY2F0aW9uOworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kQ29tbW9uLmN4eCBiL1NvdXJjZS9jbUZpbmRDb21tb24uY3h4CmluZGV4IGJhZGVjNTUuLjM0MDFlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbmRDb21tb24uY3h4CisrKyBiL1NvdXJjZS9jbUZpbmRDb21tb24uY3h4CkBAIC00LDE0ICs0LDE2IEBACiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8YXJyYXk+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKKyNpbmNsdWRlICJjbWFrZS5oIgogCiBjbUZpbmRDb21tb246OlBhdGhHcm91cCBjbUZpbmRDb21tb246OlBhdGhHcm91cDo6QWxsKCJBTEwiKTsKIGNtRmluZENvbW1vbjo6UGF0aExhYmVsIGNtRmluZENvbW1vbjo6UGF0aExhYmVsOjpQYWNrYWdlUm9vdCgKQEAgLTUyLDYgKzU0LDggQEAKICAgdGhpcy0+U2VhcmNoQXBwQnVuZGxlTGFzdCA9IGZhbHNlOwogCiAgIHRoaXMtPkluaXRpYWxpemVTZWFyY2hQYXRoR3JvdXBzKCk7CisKKyAgdGhpcy0+RGVidWdNb2RlID0gZmFsc2U7CiB9CiAKIHZvaWQgY21GaW5kQ29tbW9uOjpTZXRFcnJvcihzdGQ6OnN0cmluZyBjb25zdCYgZSkKQEAgLTU5LDYgKzYzLDE5IEBACiAgIHRoaXMtPlN0YXR1cy5TZXRFcnJvcihlKTsKIH0KIAordm9pZCBjbUZpbmRDb21tb246OkRlYnVnTWVzc2FnZShzdGQ6OnN0cmluZyBjb25zdCYgbXNnKSBjb25zdAoreworICBpZiAodGhpcy0+TWFrZWZpbGUpIHsKKyAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpMT0csIG1zZyk7CisgIH0KK30KKworYm9vbCBjbUZpbmRDb21tb246OkNvbXB1dGVJZkRlYnVnTW9kZVdhbnRlZCgpCit7CisgIHJldHVybiB0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfRklORF9ERUJVR19NT0RFIikgfHwKKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXREZWJ1Z0ZpbmRPdXRwdXQoKTsKK30KKwogdm9pZCBjbUZpbmRDb21tb246OkluaXRpYWxpemVTZWFyY2hQYXRoR3JvdXBzKCkKIHsKICAgc3RkOjp2ZWN0b3I8UGF0aExhYmVsPiogbGFiZWxzOwpAQCAtMTkxLDEwICsyMDgsMTAgQEAKICAgY29uc3QgY2hhciogc3lzcm9vdExpbmsgPQogICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9TWVNST09UX0xJTksiKTsKICAgY29uc3QgY2hhciogcm9vdFBhdGggPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfRklORF9ST09UX1BBVEgiKTsKLSAgY29uc3QgYm9vbCBub1N5c3Jvb3QgPSAhc3lzcm9vdCB8fCAhKnN5c3Jvb3Q7Ci0gIGNvbnN0IGJvb2wgbm9Db21waWxlU3lzcm9vdCA9ICFzeXNyb290Q29tcGlsZSB8fCAhKnN5c3Jvb3RDb21waWxlOwotICBjb25zdCBib29sIG5vTGlua1N5c3Jvb3QgPSAhc3lzcm9vdExpbmsgfHwgISpzeXNyb290TGluazsKLSAgY29uc3QgYm9vbCBub1Jvb3RQYXRoID0gIXJvb3RQYXRoIHx8ICEqcm9vdFBhdGg7CisgIGNvbnN0IGJvb2wgbm9TeXNyb290ID0gIWNtTm9uZW1wdHkoc3lzcm9vdCk7CisgIGNvbnN0IGJvb2wgbm9Db21waWxlU3lzcm9vdCA9ICFjbU5vbmVtcHR5KHN5c3Jvb3RDb21waWxlKTsKKyAgY29uc3QgYm9vbCBub0xpbmtTeXNyb290ID0gIWNtTm9uZW1wdHkoc3lzcm9vdExpbmspOworICBjb25zdCBib29sIG5vUm9vdFBhdGggPSAhY21Ob25lbXB0eShyb290UGF0aCk7CiAgIGlmIChub1N5c3Jvb3QgJiYgbm9Db21waWxlU3lzcm9vdCAmJiBub0xpbmtTeXNyb290ICYmIG5vUm9vdFBhdGgpIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTI0OSw3ICsyNjYsNyBAQAogICAvLyBJZiBzZWFyY2hpbmcgYm90aCByb290ZWQgYW5kIHVucm9vdGVkIHBhdGhzIGFkZCB0aGUgb3JpZ2luYWwKICAgLy8gcGF0aHMgYWdhaW4uCiAgIGlmICh0aGlzLT5GaW5kUm9vdFBhdGhNb2RlID09IFJvb3RQYXRoTW9kZUJvdGgpIHsKLSAgICBjbUFwcGVuZChwYXRocywgdW5yb290ZWRQYXRocyk7CisgICAgY206OmFwcGVuZChwYXRocywgdW5yb290ZWRQYXRocyk7CiAgIH0KIH0KIApAQCAtMjYyLDEyICsyNzksNyBAQAogICAvLyBDb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgcGF0aCByb290cyB3aXRoIG5vIHRyYWlsaW5nIHNsYXNoZXMuCiAgIGZvciAoY29uc3QgY2hhcioqIHBhdGhOYW1lID0gcGF0aHM7ICpwYXRoTmFtZTsgKytwYXRoTmFtZSkgewogICAgIC8vIEdldCB0aGUgbGlzdCBvZiBwYXRocyB0byBpZ25vcmUgZnJvbSB0aGUgdmFyaWFibGUuCi0gICAgY29uc3QgY2hhciogaWdub3JlUGF0aCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCpwYXRoTmFtZSk7Ci0gICAgaWYgKChpZ25vcmVQYXRoID09IG51bGxwdHIpIHx8IChzdHJsZW4oaWdub3JlUGF0aCkgPT0gMCkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGNtRXhwYW5kTGlzdChpZ25vcmVQYXRoLCBpZ25vcmUpOworICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCpwYXRoTmFtZSwgaWdub3JlKTsKICAgfQogCiAgIGZvciAoc3RkOjpzdHJpbmcmIGkgOiBpZ25vcmUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRDb21tb24uaCBiL1NvdXJjZS9jbUZpbmRDb21tb24uaAppbmRleCA4MTc3ZWFjLi45MTZmM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kQ29tbW9uLmgKKysrIGIvU291cmNlL2NtRmluZENvbW1vbi5oCkBAIC0zMCw4ICszMCwxMSBAQAogCiAgIHZvaWQgU2V0RXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIGUpOwogCisgIGJvb2wgRGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkRlYnVnTW9kZTsgfQorCiBwcm90ZWN0ZWQ6CiAgIGZyaWVuZCBjbGFzcyBjbVNlYXJjaFBhdGg7CisgIGZyaWVuZCBjbGFzcyBjbUZpbmRCYXNlRGVidWdTdGF0ZTsKIAogICAvKiogVXNlZCB0byBkZWZpbmUgZ3JvdXBzIG9mIHBhdGggbGFiZWxzICovCiAgIGNsYXNzIFBhdGhHcm91cCA6IHB1YmxpYyBjbVBhdGhMYWJlbApAQCAtOTYsNiArOTksMTAgQEAKICAgLyoqIENvbXB1dGUgdGhlIGN1cnJlbnQgZGVmYXVsdCBzZWFyY2ggbW9kZXMgYmFzZWQgb24gZ2xvYmFsIHZhcmlhYmxlcy4gICovCiAgIHZvaWQgU2VsZWN0RGVmYXVsdFNlYXJjaE1vZGVzKCk7CiAKKyAgLyoqIFRoZSBgSW5pdGlhbFBhc3NgIGZ1bmN0aW9ucyBvZiB0aGUgY2hpbGQgY2xhc3NlcyBzaG91bGQgc2V0CisgICAgICB0aGlzLT5EZWJ1Z01vZGUgdG8gdGhlIHJlc3VsdCBvZiB0aGlzLiAgKi8KKyAgYm9vbCBDb21wdXRlSWZEZWJ1Z01vZGVXYW50ZWQoKTsKKwogICAvLyBQYXRoIGFyZ3VtZW50cyBwcmlvciB0byBwYXRoIG1hbmlwdWxhdGlvbiByb3V0aW5lcwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gVXNlckhpbnRzQXJnczsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFVzZXJHdWVzc0FyZ3M7CkBAIC0xMDYsNiArMTEzLDggQEAKICAgYm9vbCBDaGVja0NvbW1vbkFyZ3VtZW50KHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcpOwogICB2b2lkIEFkZFBhdGhTdWZmaXgoc3RkOjpzdHJpbmcgY29uc3QmIGFyZyk7CiAKKyAgdm9pZCBEZWJ1Z01lc3NhZ2Uoc3RkOjpzdHJpbmcgY29uc3QmIG1zZykgY29uc3Q7CisgIGJvb2wgRGVidWdNb2RlOwogICBib29sIE5vRGVmYXVsdFBhdGg7CiAgIGJvb2wgTm9QYWNrYWdlUm9vdFBhdGg7CiAgIGJvb2wgTm9DTWFrZVBhdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kTGlicmFyeUNvbW1hbmQuY3h4IGIvU291cmNlL2NtRmluZExpYnJhcnlDb21tYW5kLmN4eAppbmRleCAyMDIyMWIxLi4zMjQyYjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kTGlicmFyeUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUZpbmRMaWJyYXJ5Q29tbWFuZC5jeHgKQEAgLTEyLDYgKzEyLDcgQEAKIAogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC0yOSw2ICszMCw3IEBACiAvLyBjbUZpbmRMaWJyYXJ5Q29tbWFuZAogYm9vbCBjbUZpbmRMaWJyYXJ5Q29tbWFuZDo6SW5pdGlhbFBhc3Moc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzSW4pCiB7CisgIHRoaXMtPkRlYnVnTW9kZSA9IENvbXB1dGVJZkRlYnVnTW9kZVdhbnRlZCgpOwogICB0aGlzLT5WYXJpYWJsZURvY3VtZW50YXRpb24gPSAiUGF0aCB0byBhIGxpYnJhcnkuIjsKICAgdGhpcy0+Q01ha2VQYXRoTmFtZSA9ICJMSUJSQVJZIjsKICAgaWYgKCF0aGlzLT5QYXJzZUFyZ3VtZW50cyhhcmdzSW4pKSB7CkBAIC03NCwxNSArNzYsMjIgQEAKICAgc3RkOjpzdHJpbmcgY29uc3QgbGlicmFyeSA9IHRoaXMtPkZpbmRMaWJyYXJ5KCk7CiAgIGlmICghbGlicmFyeS5lbXB0eSgpKSB7CiAgICAgLy8gU2F2ZSB0aGUgdmFsdWUgaW4gdGhlIGNhY2hlCi0gICAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbih0aGlzLT5WYXJpYWJsZU5hbWUsIGxpYnJhcnkuY19zdHIoKSwKKyAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSwgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlZhcmlhYmxlRG9jdW1lbnRhdGlvbi5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpGSUxFUEFUSCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgc3RkOjpzdHJpbmcgbm90Zm91bmQgPSB0aGlzLT5WYXJpYWJsZU5hbWUgKyAiLU5PVEZPVU5EIjsKLSAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbih0aGlzLT5WYXJpYWJsZU5hbWUsIG5vdGZvdW5kLmNfc3RyKCksCisgIHRoaXMtPk1ha2VmaWxlLT5BZGRDYWNoZURlZmluaXRpb24odGhpcy0+VmFyaWFibGVOYW1lLCBub3Rmb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5WYXJpYWJsZURvY3VtZW50YXRpb24uY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKKyAgaWYgKHRoaXMtPlJlcXVpcmVkKSB7CisgICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKKyAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICJDb3VsZCBub3QgZmluZCAiICsgdGhpcy0+VmFyaWFibGVOYW1lICsKKyAgICAgICAgIiB1c2luZyB0aGUgZm9sbG93aW5nIG5hbWVzOiAiICsgY21Kb2luKHRoaXMtPk5hbWVzLCAiLCAiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgfQogICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTIsNiArMTAxLDEzIEBACiAgIG9yaWdpbmFsLnN3YXAodGhpcy0+U2VhcmNoUGF0aHMpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvIDogb3JpZ2luYWwpIHsKICAgICB0aGlzLT5BZGRBcmNoaXRlY3R1cmVQYXRoKG8sIDAsIHN1ZmZpeCk7CisgICAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgICAgc3RkOjpzdHJpbmcgbXNnID0gY21TdHJDYXQoCisgICAgICAgICJmaW5kX2xpYnJhcnkoIiwgdGhpcy0+VmFyaWFibGVOYW1lLCAiKSByZW1vdmVkIG9yaWdpbmFsIHN1ZmZpeCAiLCBvLAorICAgICAgICAiIGZyb20gUEFUSF9TVUZGSVhFUyB3aGlsZSBhZGRpbmcgYXJjaGl0ZWN0dXJlIHBhdGhzIGZvciBzdWZmaXggJyIsCisgICAgICAgIHN1ZmZpeCwgIiciKTsKKyAgICAgIHRoaXMtPkRlYnVnTWVzc2FnZShtc2cpOworICAgIH0KICAgfQogfQogCkBAIC0xNTMsMTEgKzE2OSwyMyBAQAogCiAgICAgaWYgKHVzZV9kaXJYKSB7CiAgICAgICBkaXJYICs9ICIvIjsKKyAgICAgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgbXNnID0gY21TdHJDYXQoCisgICAgICAgICAgImZpbmRfbGlicmFyeSgiLCB0aGlzLT5WYXJpYWJsZU5hbWUsICIpIGFkZGVkIHJlcGxhY2VtZW50IHBhdGggIiwKKyAgICAgICAgICBkaXJYLCAiIHRvIFBBVEhfU1VGRklYRVMgZm9yIGFyY2hpdGVjdHVyZSBzdWZmaXggJyIsIHN1ZmZpeCwgIiciKTsKKyAgICAgICAgdGhpcy0+RGVidWdNZXNzYWdlKG1zZyk7CisgICAgICB9CiAgICAgICB0aGlzLT5TZWFyY2hQYXRocy5wdXNoX2JhY2soc3RkOjptb3ZlKGRpclgpKTsKICAgICB9CiAKICAgICBpZiAodXNlX2RpcikgewogICAgICAgdGhpcy0+U2VhcmNoUGF0aHMucHVzaF9iYWNrKGRpcik7CisgICAgICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIG1zZyA9IGNtU3RyQ2F0KAorICAgICAgICAgICJmaW5kX2xpYnJhcnkoIiwgdGhpcy0+VmFyaWFibGVOYW1lLCAiKSBhZGRlZCByZXBsYWNlbWVudCBwYXRoICIsCisgICAgICAgICAgZGlyLCAiIHRvIFBBVEhfU1VGRklYRVMgZm9yIGFyY2hpdGVjdHVyZSBzdWZmaXggJyIsIHN1ZmZpeCwgIiciKTsKKyAgICAgICAgdGhpcy0+RGVidWdNZXNzYWdlKG1zZyk7CisgICAgICB9CiAgICAgfQogICB9CiB9CkBAIC0xNzksNyArMjA3LDcgQEAKIAogc3RydWN0IGNtRmluZExpYnJhcnlIZWxwZXIKIHsKLSAgY21GaW5kTGlicmFyeUhlbHBlcihjbU1ha2VmaWxlKiBtZik7CisgIGNtRmluZExpYnJhcnlIZWxwZXIoY21NYWtlZmlsZSogbWYsIGNtRmluZEJhc2UgY29uc3QqIGZpbmRCYXNlKTsKIAogICAvLyBDb250ZXh0IGluZm9ybWF0aW9uLgogICBjbU1ha2VmaWxlKiBNYWtlZmlsZTsKQEAgLTE5OCw2ICsyMjYsOCBAQAogICAvLyBTdXBwb3J0IGZvciBPcGVuQlNEIHNoYXJlZCBsaWJyYXJ5IG5hbWluZzogbGliPG5hbWU+LnNvLjxtYWpvcj4uPG1pbm9yPgogICBib29sIE9wZW5CU0Q7CiAKKyAgYm9vbCBEZWJ1Z01vZGU7CisKICAgLy8gQ3VycmVudCBuYW1lcyB1bmRlciBjb25zaWRlcmF0aW9uLgogICBzdHJ1Y3QgTmFtZQogICB7CkBAIC0yMjcsMTAgKzI1NywzMyBAQAogICB2b2lkIFNldE5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpOwogICBib29sIENoZWNrRGlyZWN0b3J5KHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXRoKTsKICAgYm9vbCBDaGVja0RpcmVjdG9yeUZvck5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgsIE5hbWUmIG5hbWUpOworCisgIGNtRmluZEJhc2VEZWJ1Z1N0YXRlIERlYnVnU2VhcmNoZXM7CisKKyAgdm9pZCBEZWJ1Z0xpYnJhcnlGYWlsZWQoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXRoKQorICB7CisgICAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgICAgYXV0byByZWdleE5hbWUgPQorICAgICAgICBjbVN0ckNhdCh0aGlzLT5QcmVmaXhSZWdleFN0ciwgbmFtZSwgdGhpcy0+U3VmZml4UmVnZXhTdHIpOworICAgICAgdGhpcy0+RGVidWdTZWFyY2hlcy5GYWlsZWRBdChwYXRoLCByZWdleE5hbWUpOworICAgIH0KKyAgfTsKKworICB2b2lkIERlYnVnTGlicmFyeUZvdW5kKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkKKyAgeworICAgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICAgIGF1dG8gcmVnZXhOYW1lID0KKyAgICAgICAgY21TdHJDYXQodGhpcy0+UHJlZml4UmVnZXhTdHIsIG5hbWUsIHRoaXMtPlN1ZmZpeFJlZ2V4U3RyKTsKKyAgICAgIHRoaXMtPkRlYnVnU2VhcmNoZXMuRm91bmRBdChwYXRoLCByZWdleE5hbWUpOworICAgIH0KKyAgfTsKIH07CiAKLWNtRmluZExpYnJhcnlIZWxwZXI6OmNtRmluZExpYnJhcnlIZWxwZXIoY21NYWtlZmlsZSogbWYpCitjbUZpbmRMaWJyYXJ5SGVscGVyOjpjbUZpbmRMaWJyYXJ5SGVscGVyKGNtTWFrZWZpbGUqIG1mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUZpbmRCYXNlIGNvbnN0KiBiYXNlKQogICA6IE1ha2VmaWxlKG1mKQorICAsIERlYnVnTW9kZShiYXNlLT5EZWJ1Z01vZGVFbmFibGVkKCkpCisgICwgRGVidWdTZWFyY2hlcygiZmluZF9saWJyYXJ5IiwgYmFzZSkKIHsKICAgdGhpcy0+R0cgPSB0aGlzLT5NYWtlZmlsZS0+R2V0R2xvYmFsR2VuZXJhdG9yKCk7CiAKQEAgLTM1MCw3ICs0MDMsMTIgQEAKICAgLy8gbGlicmFyeSBvciBhbiBpbXBvcnQgbGlicmFyeSkuCiAgIGlmIChuYW1lLlRyeVJhdykgewogICAgIHRoaXMtPlRlc3RQYXRoID0gY21TdHJDYXQocGF0aCwgbmFtZS5SYXcpOwotICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRoaXMtPlRlc3RQYXRoLCB0cnVlKSkgeworCisgICAgY29uc3QgYm9vbCBleGlzdHMgPSBjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRoaXMtPlRlc3RQYXRoLCB0cnVlKTsKKyAgICBpZiAoIWV4aXN0cykgeworICAgICAgdGhpcy0+RGVidWdMaWJyYXJ5RmFpbGVkKG5hbWUuUmF3LCBwYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy0+RGVidWdMaWJyYXJ5Rm91bmQobmFtZS5SYXcsIHBhdGgpOwogICAgICAgdGhpcy0+QmVzdFBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRoaXMtPlRlc3RQYXRoKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHRoaXMtPkJlc3RQYXRoKTsKICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzc1LDcgKzQzMywxMCBAQAogI2VuZGlmCiAgICAgaWYgKG5hbWUuUmVnZXguZmluZCh0ZXN0TmFtZSkpIHsKICAgICAgIHRoaXMtPlRlc3RQYXRoID0gY21TdHJDYXQocGF0aCwgb3JpZ05hbWUpOwotICAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkodGhpcy0+VGVzdFBhdGgpKSB7CisgICAgICAvLyBNYWtlIHN1cmUgdGhlIHBhdGggaXMgcmVhZGFibGUgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeS4KKyAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRoaXMtPlRlc3RQYXRoLCB0cnVlKSkgeworICAgICAgICB0aGlzLT5EZWJ1Z0xpYnJhcnlGb3VuZChuYW1lLlJhdywgZGlyKTsKKwogICAgICAgICAvLyBUaGlzIGlzIGEgbWF0Y2hpbmcgZmlsZS4gIENoZWNrIGlmIGl0IGlzIGJldHRlciB0aGFuIHRoZQogICAgICAgICAvLyBiZXN0IG5hbWUgZm91bmQgc28gZmFyLiAgRWFybGllciBwcmVmaXhlcyBhcmUgcHJlZmVycmVkLAogICAgICAgICAvLyBmb2xsb3dlZCBieSBlYXJsaWVyIHN1ZmZpeGVzLiAgRm9yIE9wZW5CU0QsIHNoYXJlZCBsaWJyYXJ5CkBAIC00MDIsNiArNDYzLDEyIEBACiAgICAgfQogICB9CiAKKyAgaWYgKHRoaXMtPkJlc3RQYXRoLmVtcHR5KCkpIHsKKyAgICB0aGlzLT5EZWJ1Z0xpYnJhcnlGYWlsZWQobmFtZS5SYXcsIGRpcik7CisgIH0gZWxzZSB7CisgICAgdGhpcy0+RGVidWdMaWJyYXJ5Rm91bmQobmFtZS5SYXcsIHRoaXMtPkJlc3RQYXRoKTsKKyAgfQorCiAgIC8vIFVzZSB0aGUgYmVzdCBjYW5kaWRhdGUgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnksIGlmIGFueS4KICAgcmV0dXJuICF0aGlzLT5CZXN0UGF0aC5lbXB0eSgpOwogfQpAQCAtNDE3LDcgKzQ4NCw3IEBACiBzdGQ6OnN0cmluZyBjbUZpbmRMaWJyYXJ5Q29tbWFuZDo6RmluZE5vcm1hbExpYnJhcnlOYW1lc1BlckRpcigpCiB7CiAgIC8vIFNlYXJjaCBmb3IgYWxsIG5hbWVzIGluIGVhY2ggZGlyZWN0b3J5LgotICBjbUZpbmRMaWJyYXJ5SGVscGVyIGhlbHBlcih0aGlzLT5NYWtlZmlsZSk7CisgIGNtRmluZExpYnJhcnlIZWxwZXIgaGVscGVyKHRoaXMtPk1ha2VmaWxlLCB0aGlzKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbiA6IHRoaXMtPk5hbWVzKSB7CiAgICAgaGVscGVyLkFkZE5hbWUobik7CiAgIH0KQEAgLTQzNCw3ICs1MDEsNyBAQAogc3RkOjpzdHJpbmcgY21GaW5kTGlicmFyeUNvbW1hbmQ6OkZpbmROb3JtYWxMaWJyYXJ5RGlyc1Blck5hbWUoKQogewogICAvLyBTZWFyY2ggdGhlIGVudGlyZSBwYXRoIGZvciBlYWNoIG5hbWUuCi0gIGNtRmluZExpYnJhcnlIZWxwZXIgaGVscGVyKHRoaXMtPk1ha2VmaWxlKTsKKyAgY21GaW5kTGlicmFyeUhlbHBlciBoZWxwZXIodGhpcy0+TWFrZWZpbGUsIHRoaXMpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBuIDogdGhpcy0+TmFtZXMpIHsKICAgICAvLyBTd2l0Y2ggdG8gc2VhcmNoaW5nIGZvciB0aGlzIG5hbWUuCiAgICAgaGVscGVyLlNldE5hbWUobik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kUGFja2FnZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtRmluZFBhY2thZ2VDb21tYW5kLmN4eAppbmRleCAyYjExYjYyLi5hZTA2MDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kUGFja2FnZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUZpbmRQYWNrYWdlQ29tbWFuZC5jeHgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtU2VhcmNoUGF0aC5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKQEAgLTE2MCw4ICsxNjEsOCBAQAogICAgIHRoaXMtPlJlcXVpcmVkQ01ha2VWZXJzaW9uID0gQ01ha2VfVkVSU0lPTl9FTkNPREUodlswXSwgdlsxXSwgdlsyXSk7CiAgIH0KIAotICAvLyBDaGVjayBmb3IgZGVidWcgbW9kZS4KLSAgdGhpcy0+RGVidWdNb2RlID0gdGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX0ZJTkRfREVCVUdfTU9ERSIpOworICB0aGlzLT5EZWJ1Z01vZGUgPSBDb21wdXRlSWZEZWJ1Z01vZGVXYW50ZWQoKTsKKyAgdGhpcy0+RGVidWdCdWZmZXIuY2xlYXIoKTsKIAogICAvLyBMb29rdXAgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgaWYgYW55LgogICBpZiAoY29uc3QgY2hhciogYXJjaCA9CkBAIC0yNzksOSArMjgwLDEzIEBACiAgICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJNT0RVTEUiKSB7CiAgICAgICBtb2R1bGVBcmdzLmluc2VydChpKTsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgICAgLy8gWFhYKGNsYW5nLXRpZHkpOiBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTY1CisgICAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1icmFuY2gtY2xvbmUpCiAgICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJDT05GSUciKSB7CiAgICAgICBjb25maWdBcmdzLmluc2VydChpKTsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgICAgLy8gWFhYKGNsYW5nLXRpZHkpOiBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTY1CisgICAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1icmFuY2gtY2xvbmUpCiAgICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJOT19NT0RVTEUiKSB7CiAgICAgICBjb25maWdBcmdzLmluc2VydChpKTsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOwpAQCAtMzE4LDYgKzMyMyw4IEBACiAgICAgICB0aGlzLT5Ob1N5c3RlbVJlZ2lzdHJ5ID0gdHJ1ZTsKICAgICAgIGNvbmZpZ0FyZ3MuaW5zZXJ0KGkpOwogICAgICAgZG9pbmcgPSBEb2luZ05vbmU7CisgICAgICAvLyBYWFgoY2xhbmctdGlkeSk6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxNjUKKyAgICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKICAgICB9IGVsc2UgaWYgKGFyZ3NbaV0gPT0gIk5PX0NNQUtFX0JVSUxEU19QQVRIIikgewogICAgICAgLy8gSWdub3JlIGxlZ2FjeSBvcHRpb24uCiAgICAgICBjb25maWdBcmdzLmluc2VydChpKTsKQEAgLTQ5OCw5ICs1MDUsNyBAQAogICAgICAgY2FzZSBjbVBvbGljaWVzOjpORVc6IHsKICAgICAgICAgLy8gTkVXIGJlaGF2aW9yIGlzIHRvIGhvbm9yIHRoZSA8cGtnPl9ST09UIHZhcmlhYmxlcy4KICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3Qgcm9vdFZhciA9IHRoaXMtPk5hbWUgKyAiX1JPT1QiOwotICAgICAgICBpZiAoY29uc3QgY2hhciogcGtnUm9vdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHJvb3RWYXIpKSB7Ci0gICAgICAgICAgY21FeHBhbmRMaXN0KHBrZ1Jvb3QsIHJvb3RQYXRocywgZmFsc2UpOwotICAgICAgICB9CisgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KHJvb3RWYXIsIHJvb3RQYXRocywgZmFsc2UpOwogICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRQYXRoKHJvb3RQYXRocywgcm9vdFZhci5jX3N0cigpKTsKICAgICAgIH0gYnJlYWs7CiAgICAgfQpAQCAtNTc2LDYgKzU4MSw3IEBACiAgIH0KIAogICB0aGlzLT5BcHBlbmRTdWNjZXNzSW5mb3JtYXRpb24oKTsKKwogICByZXR1cm4gbG9hZGVkUGFja2FnZTsKIH0KIApAQCAtNjk1LDggKzcwMSwyMyBAQAogYm9vbCBjbUZpbmRQYWNrYWdlQ29tbWFuZDo6RmluZE1vZHVsZShib29sJiBmb3VuZCkKIHsKICAgc3RkOjpzdHJpbmcgbW9kdWxlID0gY21TdHJDYXQoIkZpbmQiLCB0aGlzLT5OYW1lLCAiLmNtYWtlIik7CisKICAgYm9vbCBzeXN0ZW0gPSBmYWxzZTsKLSAgc3RkOjpzdHJpbmcgbWZpbGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0TW9kdWxlc0ZpbGUobW9kdWxlLCBzeXN0ZW0pOworICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlciA9CisgICAgY21TdHJDYXQoImZpbmRfcGFja2FnZSBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgcGF0aHMgZm9yICIsIHRoaXMtPk5hbWUsCisgICAgICAgICAgICAgIi5jbWFrZVxuIik7CisgIHN0ZDo6c3RyaW5nIG1maWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldE1vZHVsZXNGaWxlKAorICAgIG1vZHVsZSwgc3lzdGVtLCB0aGlzLT5EZWJ1Z01vZGUsIGRlYnVnQnVmZmVyKTsKKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIGlmIChtZmlsZS5lbXB0eSgpKSB7CisgICAgICBkZWJ1Z0J1ZmZlciA9IGNtU3RyQ2F0KGRlYnVnQnVmZmVyLCAiVGhlIGZpbGUgd2FzIG5vdCBmb3VuZC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgZGVidWdCdWZmZXIgPQorICAgICAgICBjbVN0ckNhdChkZWJ1Z0J1ZmZlciwgIlRoZSBmaWxlIHdhcyBmb3VuZCBhdFxuICAiLCBtZmlsZSwgIlxuIik7CisgICAgfQorICAgIHRoaXMtPkRlYnVnQnVmZmVyID0gY21TdHJDYXQodGhpcy0+RGVidWdCdWZmZXIsIGRlYnVnQnVmZmVyLCAiXG4iKTsKKyAgfQorCiAgIGlmICghbWZpbGUuZW1wdHkoKSkgewogICAgIGlmIChzeXN0ZW0pIHsKICAgICAgIGF1dG8gaXQgPSB0aGlzLT5EZXByZWNhdGVkRmluZE1vZHVsZXMuZmluZCh0aGlzLT5OYW1lKTsKQEAgLTgyNyw2ICs4NDgsMTEgQEAKICAgICByZXN1bHQgPSBmYWxzZTsKICAgfQogCisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICB0aGlzLT5EZWJ1Z01lc3NhZ2UodGhpcy0+RGVidWdCdWZmZXIpOworICAgIHRoaXMtPkRlYnVnQnVmZmVyLmNsZWFyKCk7CisgIH0KKwogICAvLyBwYWNrYWdlIG5vdCBmb3VuZAogICBpZiAocmVzdWx0ICYmICFmb3VuZCkgewogICAgIC8vIHdhcm4gaWYgcGFja2FnZSByZXF1aXJlZCBvciBuZWl0aGVyIHF1aWV0IG5vciBpbiBjb25maWcgbW9kZQpAQCAtOTg3LDYgKzEwMTMsMTEgQEAKIAogICAvLyBMb29rIGZvciB0aGUgcHJvamVjdCdzIGNvbmZpZ3VyYXRpb24gZmlsZS4KICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaW5kX3BhY2thZ2UgY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbnMgZm9yIHRoZSBDb25maWcgbW9kdWxlOlxuIik7CisgIH0KIAogICAvLyBTZWFyY2ggZm9yIGZyYW1ld29ya3MuCiAgIGlmICghZm91bmQgJiYgKHRoaXMtPlNlYXJjaEZyYW1ld29ya0ZpcnN0IHx8IHRoaXMtPlNlYXJjaEZyYW1ld29ya09ubHkpKSB7CkBAIC0xMDEzLDYgKzEwNDQsMTYgQEAKICAgICBmb3VuZCA9IHRoaXMtPkZpbmRBcHBCdW5kbGVDb25maWcoKTsKICAgfQogCisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICBpZiAoZm91bmQpIHsKKyAgICAgIHRoaXMtPkRlYnVnQnVmZmVyID0gY21TdHJDYXQoCisgICAgICAgIHRoaXMtPkRlYnVnQnVmZmVyLCAiVGhlIGZpbGUgd2FzIGZvdW5kIGF0XG4gICIsIHRoaXMtPkZpbGVGb3VuZCwgIlxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPkRlYnVnQnVmZmVyID0KKyAgICAgICAgY21TdHJDYXQodGhpcy0+RGVidWdCdWZmZXIsICJUaGUgZmlsZSB3YXMgbm90IGZvdW5kLlxuIik7CisgICAgfQorICB9CisKICAgLy8gU3RvcmUgdGhlIGVudHJ5IGluIHRoZSBjYWNoZSBzbyBpdCBjYW4gYmUgc2V0IGJ5IHRoZSB1c2VyLgogICBzdGQ6OnN0cmluZyBpbml0OwogICBpZiAoZm91bmQpIHsKQEAgLTEwMjQsOCArMTA2NSw5IEBACiAgICAgY21TdHJDYXQoIlRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBhIENNYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgIiwKICAgICAgICAgICAgICB0aGlzLT5OYW1lLCAnLicpOwogICAvLyBXZSBmb3JjZSB0aGUgdmFsdWUgc2luY2Ugd2UgZG8gbm90IGdldCBoZXJlIGlmIGl0IHdhcyBhbHJlYWR5IHNldC4KLSAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbih0aGlzLT5WYXJpYWJsZSwgaW5pdC5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHAuY19zdHIoKSwgY21TdGF0ZUVudW1zOjpQQVRILCB0cnVlKTsKKyAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbih0aGlzLT5WYXJpYWJsZSwgaW5pdCwgaGVscC5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6UEFUSCwgdHJ1ZSk7CisKICAgcmV0dXJuIGZvdW5kOwogfQogCkBAIC0xMDc3LDEyICsxMTE5LDEwIEBACiB2b2lkIGNtRmluZFBhY2thZ2VDb21tYW5kOjpBcHBlbmRUb0ZvdW5kUHJvcGVydHkoYm9vbCBmb3VuZCkKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZvdW5kQ29udGVudHM7Ci0gIGNvbnN0IGNoYXIqIGZvdW5kUHJvcCA9CisgIGNtUHJvcCBmb3VuZFByb3AgPQogICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiUEFDS0FHRVNfRk9VTkQiKTsKLSAgaWYgKGZvdW5kUHJvcCAmJiAqZm91bmRQcm9wKSB7Ci0gICAgc3RkOjpzdHJpbmcgdG1wID0gZm91bmRQcm9wOwotCi0gICAgY21FeHBhbmRMaXN0KHRtcCwgZm91bmRDb250ZW50cywgZmFsc2UpOworICBpZiAoY21Ob25lbXB0eShmb3VuZFByb3ApKSB7CisgICAgY21FeHBhbmRMaXN0KCpmb3VuZFByb3AsIGZvdW5kQ29udGVudHMsIGZhbHNlKTsKICAgICBhdXRvIG5hbWVJdCA9CiAgICAgICBzdGQ6OmZpbmQoZm91bmRDb250ZW50cy5iZWdpbigpLCBmb3VuZENvbnRlbnRzLmVuZCgpLCB0aGlzLT5OYW1lKTsKICAgICBpZiAobmFtZUl0ICE9IGZvdW5kQ29udGVudHMuZW5kKCkpIHsKQEAgLTEwOTEsMTIgKzExMzEsMTAgQEAKICAgfQogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub3RGb3VuZENvbnRlbnRzOwotICBjb25zdCBjaGFyKiBub3RGb3VuZFByb3AgPQorICBjbVByb3Agbm90Rm91bmRQcm9wID0KICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIlBBQ0tBR0VTX05PVF9GT1VORCIpOwotICBpZiAobm90Rm91bmRQcm9wICYmICpub3RGb3VuZFByb3ApIHsKLSAgICBzdGQ6OnN0cmluZyB0bXAgPSBub3RGb3VuZFByb3A7Ci0KLSAgICBjbUV4cGFuZExpc3QodG1wLCBub3RGb3VuZENvbnRlbnRzLCBmYWxzZSk7CisgIGlmIChjbU5vbmVtcHR5KG5vdEZvdW5kUHJvcCkpIHsKKyAgICBjbUV4cGFuZExpc3QoKm5vdEZvdW5kUHJvcCwgbm90Rm91bmRDb250ZW50cywgZmFsc2UpOwogICAgIGF1dG8gbmFtZUl0ID0KICAgICAgIHN0ZDo6ZmluZChub3RGb3VuZENvbnRlbnRzLmJlZ2luKCksIG5vdEZvdW5kQ29udGVudHMuZW5kKCksIHRoaXMtPk5hbWUpOwogICAgIGlmIChuYW1lSXQgIT0gbm90Rm91bmRDb250ZW50cy5lbmQoKSkgewpAQCAtMTEyOCw5ICsxMTY2LDkgQEAKICAgc3RkOjpzdHJpbmcgZm91bmQgPSBjbVN0ckNhdCh0aGlzLT5OYW1lLCAiX0ZPVU5EIik7CiAgIHN0ZDo6c3RyaW5nIHVwcGVyRm91bmQgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoZm91bmQpOwogCi0gIGNvbnN0IGNoYXIqIHVwcGVyUmVzdWx0ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24odXBwZXJGb3VuZCk7Ci0gIGNvbnN0IGNoYXIqIHJlc3VsdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGZvdW5kKTsKLSAgYm9vbCBwYWNrYWdlRm91bmQgPSAoKGNtSXNPbihyZXN1bHQpKSB8fCAoY21Jc09uKHVwcGVyUmVzdWx0KSkpOworICBib29sIHVwcGVyUmVzdWx0ID0gdGhpcy0+TWFrZWZpbGUtPklzT24odXBwZXJGb3VuZCk7CisgIGJvb2wgcmVzdWx0ID0gdGhpcy0+TWFrZWZpbGUtPklzT24oZm91bmQpOworICBib29sIHBhY2thZ2VGb3VuZCA9IChyZXN1bHQgfHwgdXBwZXJSZXN1bHQpOwogCiAgIHRoaXMtPkFwcGVuZFRvRm91bmRQcm9wZXJ0eShwYWNrYWdlRm91bmQpOwogCkBAIC0xMTY0LDYgKzEyMDIsMjEgQEAKICAgdGhpcy0+TWFrZWZpbGUtPkZpbmRQYWNrYWdlUm9vdFBhdGhTdGFjay5wb3BfYmFjaygpOwogfQogCitpbmxpbmUgc3RkOjpzaXplX3QgY29sbGVjdFBhdGhzRm9yRGVidWcoc3RkOjpzdHJpbmcmIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVNlYXJjaFBhdGggY29uc3QmIHNlYXJjaFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaXplX3Qgc3RhcnRJbmRleCA9IDApCit7CisgIGNvbnN0IGF1dG8mIHBhdGhzID0gc2VhcmNoUGF0aC5HZXRQYXRocygpOworICBpZiAocGF0aHMuZW1wdHkoKSkgeworICAgIGJ1ZmZlciArPSAiICBub25lIjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgcGF0aHMuc2l6ZSgpOyBpKyspIHsKKyAgICBidWZmZXIgKz0gIiAgIiArIHBhdGhzW2ldICsgIlxuIjsKKyAgfQorICByZXR1cm4gcGF0aHMuc2l6ZSgpOworfQorCiB2b2lkIGNtRmluZFBhY2thZ2VDb21tYW5kOjpDb21wdXRlUHJlZml4ZXMoKQogewogICBpZiAoIXRoaXMtPk5vRGVmYXVsdFBhdGgpIHsKQEAgLTExNzcsNyArMTIzMCw5IEBACiAgICAgICB0aGlzLT5GaWxsUHJlZml4ZXNDTWFrZUVudmlyb25tZW50KCk7CiAgICAgfQogICB9CisKICAgdGhpcy0+RmlsbFByZWZpeGVzVXNlckhpbnRzKCk7CisKICAgaWYgKCF0aGlzLT5Ob0RlZmF1bHRQYXRoKSB7CiAgICAgaWYgKCF0aGlzLT5Ob1N5c3RlbUVudmlyb25tZW50UGF0aCkgewogICAgICAgdGhpcy0+RmlsbFByZWZpeGVzU3lzdGVtRW52aXJvbm1lbnQoKTsKQEAgLTEyMDksMjkgKzEyNjQsNzIgQEAKICAgICAgIHBhdGhzLkFkZFBhdGgocGF0aCk7CiAgICAgfQogICB9CisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlciA9ICI8UGFja2FnZU5hbWU+X1JPT1QgQ01ha2UgdmFyaWFibGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltDTUFLRV9GSU5EX1VTRV9QQUNLQUdFX1JPT1RfUEFUSF0uXG4iOworICAgIGNvbGxlY3RQYXRoc0ZvckRlYnVnKGRlYnVnQnVmZmVyLCBwYXRocyk7CisgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwgZGVidWdCdWZmZXIsICJcbiIpOworICB9CiB9CiAKIHZvaWQgY21GaW5kUGFja2FnZUNvbW1hbmQ6OkZpbGxQcmVmaXhlc0NNYWtlRW52aXJvbm1lbnQoKQogewogICBjbVNlYXJjaFBhdGgmIHBhdGhzID0gdGhpcy0+TGFiZWxlZFBhdGhzW1BhdGhMYWJlbDo6Q01ha2VFbnZpcm9ubWVudF07CisgIHN0ZDo6c3RyaW5nIGRlYnVnQnVmZmVyOworICBzdGQ6OnNpemVfdCBkZWJ1Z09mZnNldCA9IDA7CiAKICAgLy8gQ2hlY2sgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgY2FjaGUKICAgLy8gZW50cnkuCiAgIHBhdGhzLkFkZEVudlBhdGgodGhpcy0+VmFyaWFibGUpOworICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgZGVidWdCdWZmZXIgPSBjbVN0ckNhdCgiRW52IHZhcmlhYmxlICIsIHRoaXMtPlZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBbQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSF0uXG4iKTsKKyAgICBkZWJ1Z09mZnNldCA9IGNvbGxlY3RQYXRoc0ZvckRlYnVnKGRlYnVnQnVmZmVyLCBwYXRocyk7CisgIH0KIAogICAvLyBBbmQgbm93IHRoZSBnZW5lcmFsIENNYWtlIGVudmlyb25tZW50IHZhcmlhYmxlcwogICBwYXRocy5BZGRFbnZQYXRoKCJDTUFLRV9QUkVGSVhfUEFUSCIpOworICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgZGVidWdCdWZmZXIgPSBjbVN0ckNhdChkZWJ1Z0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbkNNQUtFX1BSRUZJWF9QQVRIIGVudiB2YXJpYWJsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiW0NNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEhdLlxuIik7CisgICAgZGVidWdPZmZzZXQgPSBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwgcGF0aHMsIGRlYnVnT2Zmc2V0KTsKKyAgfQorCiAgIHBhdGhzLkFkZEVudlBhdGgoIkNNQUtFX0ZSQU1FV09SS19QQVRIIik7CiAgIHBhdGhzLkFkZEVudlBhdGgoIkNNQUtFX0FQUEJVTkRMRV9QQVRIIik7CisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICBkZWJ1Z0J1ZmZlciA9CisgICAgICBjbVN0ckNhdChkZWJ1Z0J1ZmZlciwKKyAgICAgICAgICAgICAgICJcbkNNQUtFX0ZSQU1FV09SS19QQVRIIGFuZCBDTUFLRV9BUFBCVU5ETEVfUEFUSCBlbnYgIgorICAgICAgICAgICAgICAgInZhcmlhYmxlcyBbQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSF0uXG4iKTsKKyAgICBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwgcGF0aHMsIGRlYnVnT2Zmc2V0KTsKKyAgICB0aGlzLT5EZWJ1Z0J1ZmZlciA9IGNtU3RyQ2F0KHRoaXMtPkRlYnVnQnVmZmVyLCBkZWJ1Z0J1ZmZlciwgIlxuIik7CisgIH0KIH0KIAogdm9pZCBjbUZpbmRQYWNrYWdlQ29tbWFuZDo6RmlsbFByZWZpeGVzQ01ha2VWYXJpYWJsZSgpCiB7CiAgIGNtU2VhcmNoUGF0aCYgcGF0aHMgPSB0aGlzLT5MYWJlbGVkUGF0aHNbUGF0aExhYmVsOjpDTWFrZV07CisgIHN0ZDo6c3RyaW5nIGRlYnVnQnVmZmVyOworICBzdGQ6OnNpemVfdCBkZWJ1Z09mZnNldCA9IDA7CiAKICAgcGF0aHMuQWRkQ01ha2VQYXRoKCJDTUFLRV9QUkVGSVhfUEFUSCIpOworICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgZGVidWdCdWZmZXIgPSAiQ01BS0VfUFJFRklYX1BBVEggdmFyaWFibGUgW0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEhdLlxuIjsKKyAgICBkZWJ1Z09mZnNldCA9IGNvbGxlY3RQYXRoc0ZvckRlYnVnKGRlYnVnQnVmZmVyLCBwYXRocyk7CisgIH0KKwogICBwYXRocy5BZGRDTWFrZVBhdGgoIkNNQUtFX0ZSQU1FV09SS19QQVRIIik7CiAgIHBhdGhzLkFkZENNYWtlUGF0aCgiQ01BS0VfQVBQQlVORExFX1BBVEgiKTsKKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIGRlYnVnQnVmZmVyID0KKyAgICAgIGNtU3RyQ2F0KGRlYnVnQnVmZmVyLAorICAgICAgICAgICAgICAgIlxuQ01BS0VfRlJBTUVXT1JLX1BBVEggYW5kIENNQUtFX0FQUEJVTkRMRV9QQVRIIHZhcmlhYmxlcyAiCisgICAgICAgICAgICAgICAiW0NNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEhdLlxuIik7CisgICAgY29sbGVjdFBhdGhzRm9yRGVidWcoZGVidWdCdWZmZXIsIHBhdGhzLCBkZWJ1Z09mZnNldCk7CisgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwgZGVidWdCdWZmZXIsICJcbiIpOworICB9CiB9CiAKIHZvaWQgY21GaW5kUGFja2FnZUNvbW1hbmQ6OkZpbGxQcmVmaXhlc1N5c3RlbUVudmlyb25tZW50KCkKQEAgLTEyNTEsNiArMTM0OSwxMiBAQAogICAgICAgcGF0aHMuQWRkUGF0aChpKTsKICAgICB9CiAgIH0KKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIHN0ZDo6c3RyaW5nIGRlYnVnQnVmZmVyID0gIlN0YW5kYXJkIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSF0uXG4iOworICAgIGNvbGxlY3RQYXRoc0ZvckRlYnVnKGRlYnVnQnVmZmVyLCBwYXRocyk7CisgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwgZGVidWdCdWZmZXIsICJcbiIpOworICB9CiB9CiAKIHZvaWQgY21GaW5kUGFja2FnZUNvbW1hbmQ6OkZpbGxQcmVmaXhlc1VzZXJSZWdpc3RyeSgpCkBAIC0xMjc0LDYgKzEzNzgsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxhYmVsZWRQYXRoc1tQYXRoTGFiZWw6OlVzZXJSZWdpc3RyeV0pOwogICB9CiAjZW5kaWYKKyAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgeworICAgIHN0ZDo6c3RyaW5nIGRlYnVnQnVmZmVyID0KKyAgICAgICJDTWFrZSBVc2VyIFBhY2thZ2UgUmVnaXN0cnkgW0NNQUtFX0ZJTkRfVVNFX1BBQ0tBR0VfUkVHSVNUUlldLlxuIjsKKyAgICBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5MYWJlbGVkUGF0aHNbUGF0aExhYmVsOjpVc2VyUmVnaXN0cnldKTsKKyAgICB0aGlzLT5EZWJ1Z0J1ZmZlciA9IGNtU3RyQ2F0KHRoaXMtPkRlYnVnQnVmZmVyLCBkZWJ1Z0J1ZmZlciwgIlxuIik7CisgIH0KIH0KIAogdm9pZCBjbUZpbmRQYWNrYWdlQ29tbWFuZDo6RmlsbFByZWZpeGVzU3lzdGVtUmVnaXN0cnkoKQpAQCAtMTI4NSw2ICsxMzk2LDE1IEBACiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAgIHRoaXMtPkxvYWRQYWNrYWdlUmVnaXN0cnlXaW5TeXN0ZW0oKTsKICNlbmRpZgorCisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlciA9CisgICAgICAiQ01ha2UgU3lzdGVtIFBhY2thZ2UgUmVnaXN0cnkgIgorICAgICAgIltDTUFLRV9GSU5EX1BBQ0tBR0VfTk9fU1lTVEVNX1BBQ0tBR0VfUkVHSVNUUlldLlxuIjsKKyAgICBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5MYWJlbGVkUGF0aHNbUGF0aExhYmVsOjpTeXN0ZW1SZWdpc3RyeV0pOworICAgIHRoaXMtPkRlYnVnQnVmZmVyID0gY21TdHJDYXQodGhpcy0+RGVidWdCdWZmZXIsIGRlYnVnQnVmZmVyLCAiXG4iKTsKKyAgfQogfQogCiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCkBAIC0xNDU3LDYgKzE1NzcsMTMgQEAKICAgcGF0aHMuQWRkQ01ha2VQYXRoKCJDTUFLRV9TWVNURU1fUFJFRklYX1BBVEgiKTsKICAgcGF0aHMuQWRkQ01ha2VQYXRoKCJDTUFLRV9TWVNURU1fRlJBTUVXT1JLX1BBVEgiKTsKICAgcGF0aHMuQWRkQ01ha2VQYXRoKCJDTUFLRV9TWVNURU1fQVBQQlVORExFX1BBVEgiKTsKKworICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgc3RkOjpzdHJpbmcgZGVidWdCdWZmZXIgPSAiQ01ha2UgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIFBsYXRmb3JtIGZpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltDTUFLRV9GSU5EX1VTRV9DTUFLRV9TWVNURU1fUEFUSF0uXG4iOworICAgIGNvbGxlY3RQYXRoc0ZvckRlYnVnKGRlYnVnQnVmZmVyLCBwYXRocyk7CisgICAgdGhpcy0+RGVidWdCdWZmZXIgPSBjbVN0ckNhdCh0aGlzLT5EZWJ1Z0J1ZmZlciwgZGVidWdCdWZmZXIsICJcbiIpOworICB9CiB9CiAKIHZvaWQgY21GaW5kUGFja2FnZUNvbW1hbmQ6OkZpbGxQcmVmaXhlc1VzZXJHdWVzcygpCkBAIC0xNDY2LDYgKzE1OTMsMTIgQEAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcCA6IHRoaXMtPlVzZXJHdWVzc0FyZ3MpIHsKICAgICBwYXRocy5BZGRVc2VyUGF0aChwKTsKICAgfQorICBpZiAodGhpcy0+RGVidWdNb2RlKSB7CisgICAgc3RkOjpzdHJpbmcgZGVidWdCdWZmZXIgPQorICAgICAgIlBhdGhzIHNwZWNpZmllZCBieSB0aGUgZmluZF9wYWNrYWdlIFBBVEhTIG9wdGlvbi5cbiI7CisgICAgY29sbGVjdFBhdGhzRm9yRGVidWcoZGVidWdCdWZmZXIsIHBhdGhzKTsKKyAgICB0aGlzLT5EZWJ1Z0J1ZmZlciA9IGNtU3RyQ2F0KHRoaXMtPkRlYnVnQnVmZmVyLCBkZWJ1Z0J1ZmZlciwgIlxuIik7CisgIH0KIH0KIAogdm9pZCBjbUZpbmRQYWNrYWdlQ29tbWFuZDo6RmlsbFByZWZpeGVzVXNlckhpbnRzKCkKQEAgLTE0NzUsNiArMTYwOCwxMiBAQAogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBwIDogdGhpcy0+VXNlckhpbnRzQXJncykgewogICAgIHBhdGhzLkFkZFVzZXJQYXRoKHApOwogICB9CisgIGlmICh0aGlzLT5EZWJ1Z01vZGUpIHsKKyAgICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlciA9CisgICAgICAiUGF0aHMgc3BlY2lmaWVkIGJ5IHRoZSBmaW5kX3BhY2thZ2UgSElOVFMgb3B0aW9uLlxuIjsKKyAgICBjb2xsZWN0UGF0aHNGb3JEZWJ1ZyhkZWJ1Z0J1ZmZlciwgcGF0aHMpOworICAgIHRoaXMtPkRlYnVnQnVmZmVyID0gY21TdHJDYXQodGhpcy0+RGVidWdCdWZmZXIsIGRlYnVnQnVmZmVyLCAiXG4iKTsKKyAgfQogfQogCiBib29sIGNtRmluZFBhY2thZ2VDb21tYW5kOjpTZWFyY2hEaXJlY3Rvcnkoc3RkOjpzdHJpbmcgY29uc3QmIGRpcikKQEAgLTE1MTksNyArMTY1OCw3IEBACiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGMgOiB0aGlzLT5Db25maWdzKSB7CiAgICAgZmlsZSA9IGNtU3RyQ2F0KGRpciwgJy8nLCBjKTsKICAgICBpZiAodGhpcy0+RGVidWdNb2RlKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nIGZpbGUgWyVzXVxuIiwgZmlsZS5jX3N0cigpKTsKKyAgICAgIHRoaXMtPkRlYnVnQnVmZmVyID0gY21TdHJDYXQodGhpcy0+RGVidWdCdWZmZXIsICIgICIsIGZpbGUsICJcbiIpOwogICAgIH0KICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmaWxlLCB0cnVlKSAmJiB0aGlzLT5DaGVja1ZlcnNpb24oZmlsZSkpIHsKICAgICAgIC8vIEFsbG93IHJlc29sdmluZyBzeW1saW5rcyB3aGVuIHRoZSBjb25maWcgZmlsZSBpcyBmb3VuZCB0aHJvdWdoIGEgbGluawpAQCAtMjAzMiw5ICsyMTcxLDYgQEAKIGJvb2wgY21GaW5kUGFja2FnZUNvbW1hbmQ6OlNlYXJjaFByZWZpeChzdGQ6OnN0cmluZyBjb25zdCYgcHJlZml4X2luKQogewogICBhc3NlcnQoIXByZWZpeF9pbi5lbXB0eSgpICYmIHByZWZpeF9pbi5iYWNrKCkgPT0gJy8nKTsKLSAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgewotICAgIGZwcmludGYoc3RkZXJyLCAiQ2hlY2tpbmcgcHJlZml4IFslc11cbiIsIHByZWZpeF9pbi5jX3N0cigpKTsKLSAgfQogCiAgIC8vIFNraXAgdGhpcyBpZiB0aGUgcHJlZml4IGRvZXMgbm90IGV4aXN0LgogICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShwcmVmaXhfaW4pKSB7CkBAIC0yMTg4LDkgKzIzMjQsNiBAQAogYm9vbCBjbUZpbmRQYWNrYWdlQ29tbWFuZDo6U2VhcmNoRnJhbWV3b3JrUHJlZml4KHN0ZDo6c3RyaW5nIGNvbnN0JiBwcmVmaXhfaW4pCiB7CiAgIGFzc2VydCghcHJlZml4X2luLmVtcHR5KCkgJiYgcHJlZml4X2luLmJhY2soKSA9PSAnLycpOwotICBpZiAodGhpcy0+RGVidWdNb2RlKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJDaGVja2luZyBmcmFtZXdvcmsgcHJlZml4IFslc11cbiIsIHByZWZpeF9pbi5jX3N0cigpKTsKLSAgfQogCiAgIC8vIFN0cmlwIHRoZSB0cmFpbGluZyBzbGFzaCBiZWNhdXNlIHRoZSBwYXRoIGdlbmVyYXRvciBpcyBhYm91dCB0bwogICAvLyBhZGQgb25lLgpAQCAtMjI0OSw5ICsyMzgyLDYgQEAKIGJvb2wgY21GaW5kUGFja2FnZUNvbW1hbmQ6OlNlYXJjaEFwcEJ1bmRsZVByZWZpeChzdGQ6OnN0cmluZyBjb25zdCYgcHJlZml4X2luKQogewogICBhc3NlcnQoIXByZWZpeF9pbi5lbXB0eSgpICYmIHByZWZpeF9pbi5iYWNrKCkgPT0gJy8nKTsKLSAgaWYgKHRoaXMtPkRlYnVnTW9kZSkgewotICAgIGZwcmludGYoc3RkZXJyLCAiQ2hlY2tpbmcgYnVuZGxlIHByZWZpeCBbJXNdXG4iLCBwcmVmaXhfaW4uY19zdHIoKSk7Ci0gIH0KIAogICAvLyBTdHJpcCB0aGUgdHJhaWxpbmcgc2xhc2ggYmVjYXVzZSB0aGUgcGF0aCBnZW5lcmF0b3IgaXMgYWJvdXQgdG8KICAgLy8gYWRkIG9uZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRQYWNrYWdlQ29tbWFuZC5oIGIvU291cmNlL2NtRmluZFBhY2thZ2VDb21tYW5kLmgKaW5kZXggODVmZTdiNi4uNzA1OGE1NCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmluZFBhY2thZ2VDb21tYW5kLmgKKysrIGIvU291cmNlL2NtRmluZFBhY2thZ2VDb21tYW5kLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21fa3dpbWwuaCIKKyNpbmNsdWRlIDxjbTNwL2t3aW1sL2ludC5oPgogCiAjaW5jbHVkZSAiY21GaW5kQ29tbW9uLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgpAQCAtMTc0LDcgKzE3NCw2IEBACiAgIGJvb2wgVXNlRmluZE1vZHVsZXM7CiAgIGJvb2wgTm9Vc2VyUmVnaXN0cnk7CiAgIGJvb2wgTm9TeXN0ZW1SZWdpc3RyeTsKLSAgYm9vbCBEZWJ1Z01vZGU7CiAgIGJvb2wgVXNlTGliMzJQYXRoczsKICAgYm9vbCBVc2VMaWI2NFBhdGhzOwogICBib29sIFVzZUxpYngzMlBhdGhzOwpAQCAtMTg0LDYgKzE4Myw3IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBOYW1lczsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IENvbmZpZ3M7CiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBJZ25vcmVkUGF0aHM7CisgIHN0ZDo6c3RyaW5nIERlYnVnQnVmZmVyOwogCiAgIC8qISB0aGUgc2VsZWN0ZWQgc29ydE9yZGVyIChOb25lIGJ5IGRlZmF1bHQpKi8KICAgU29ydE9yZGVyVHlwZSBTb3J0T3JkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GaW5kUGF0aENvbW1hbmQuY3h4IGIvU291cmNlL2NtRmluZFBhdGhDb21tYW5kLmN4eAppbmRleCBmNWUyNjMxLi40YmFiNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GaW5kUGF0aENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUZpbmRQYXRoQ29tbWFuZC5jeHgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAiY21zeXMvR2xvYi5oeHgiCiAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTIxLDYgKzIyLDcgQEAKIC8vIGNtRmluZFBhdGhDb21tYW5kCiBib29sIGNtRmluZFBhdGhDb21tYW5kOjpJbml0aWFsUGFzcyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3NJbikKIHsKKyAgdGhpcy0+RGVidWdNb2RlID0gQ29tcHV0ZUlmRGVidWdNb2RlV2FudGVkKCk7CiAgIHRoaXMtPlZhcmlhYmxlRG9jdW1lbnRhdGlvbiA9ICJQYXRoIHRvIGEgZmlsZS4iOwogICB0aGlzLT5DTWFrZVBhdGhOYW1lID0gIklOQ0xVREUiOwogICBpZiAoIXRoaXMtPlBhcnNlQXJndW1lbnRzKGFyZ3NJbikpIHsKQEAgLTQyLDI5ICs0NCwzOSBAQAogICBzdGQ6OnN0cmluZyByZXN1bHQgPSB0aGlzLT5GaW5kSGVhZGVyKCk7CiAgIGlmICghcmVzdWx0LmVtcHR5KCkpIHsKICAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKAotICAgICAgdGhpcy0+VmFyaWFibGVOYW1lLCByZXN1bHQuY19zdHIoKSwgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksCisgICAgICB0aGlzLT5WYXJpYWJsZU5hbWUsIHJlc3VsdCwgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksCiAgICAgICAodGhpcy0+SW5jbHVkZUZpbGVJblBhdGgpID8gY21TdGF0ZUVudW1zOjpGSUxFUEFUSCA6IGNtU3RhdGVFbnVtczo6UEFUSCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgdGhpcy0+TWFrZWZpbGUtPkFkZENhY2hlRGVmaW5pdGlvbigKLSAgICB0aGlzLT5WYXJpYWJsZU5hbWUsICh0aGlzLT5WYXJpYWJsZU5hbWUgKyAiLU5PVEZPVU5EIikuY19zdHIoKSwKKyAgICB0aGlzLT5WYXJpYWJsZU5hbWUsIHRoaXMtPlZhcmlhYmxlTmFtZSArICItTk9URk9VTkQiLAogICAgIHRoaXMtPlZhcmlhYmxlRG9jdW1lbnRhdGlvbi5jX3N0cigpLAogICAgICh0aGlzLT5JbmNsdWRlRmlsZUluUGF0aCkgPyBjbVN0YXRlRW51bXM6OkZJTEVQQVRIIDogY21TdGF0ZUVudW1zOjpQQVRIKTsKKyAgaWYgKHRoaXMtPlJlcXVpcmVkKSB7CisgICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKKyAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICJDb3VsZCBub3QgZmluZCAiICsgdGhpcy0+VmFyaWFibGVOYW1lICsKKyAgICAgICAgIiB1c2luZyB0aGUgZm9sbG93aW5nIGZpbGVzOiAiICsgY21Kb2luKHRoaXMtPk5hbWVzLCAiLCAiKSk7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgfQogICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RkOjpzdHJpbmcgY21GaW5kUGF0aENvbW1hbmQ6OkZpbmRIZWFkZXIoKQogeworICBzdGQ6OnN0cmluZyBkZWJ1Z19uYW1lID0gdGhpcy0+SW5jbHVkZUZpbGVJblBhdGggPyAiZmluZF9maWxlIiA6ICJmaW5kX3BhdGgiOworICBjbUZpbmRCYXNlRGVidWdTdGF0ZSBkZWJ1ZyhkZWJ1Z19uYW1lLCB0aGlzKTsKICAgc3RkOjpzdHJpbmcgaGVhZGVyOwogICBpZiAodGhpcy0+U2VhcmNoRnJhbWV3b3JrRmlyc3QgfHwgdGhpcy0+U2VhcmNoRnJhbWV3b3JrT25seSkgewotICAgIGhlYWRlciA9IHRoaXMtPkZpbmRGcmFtZXdvcmtIZWFkZXIoKTsKKyAgICBoZWFkZXIgPSB0aGlzLT5GaW5kRnJhbWV3b3JrSGVhZGVyKGRlYnVnKTsKICAgfQogICBpZiAoaGVhZGVyLmVtcHR5KCkgJiYgIXRoaXMtPlNlYXJjaEZyYW1ld29ya09ubHkpIHsKLSAgICBoZWFkZXIgPSB0aGlzLT5GaW5kTm9ybWFsSGVhZGVyKCk7CisgICAgaGVhZGVyID0gdGhpcy0+RmluZE5vcm1hbEhlYWRlcihkZWJ1Zyk7CiAgIH0KICAgaWYgKGhlYWRlci5lbXB0eSgpICYmIHRoaXMtPlNlYXJjaEZyYW1ld29ya0xhc3QpIHsKLSAgICBoZWFkZXIgPSB0aGlzLT5GaW5kRnJhbWV3b3JrSGVhZGVyKCk7CisgICAgaGVhZGVyID0gdGhpcy0+RmluZEZyYW1ld29ya0hlYWRlcihkZWJ1Zyk7CiAgIH0KKwogICByZXR1cm4gaGVhZGVyOwogfQogCkBAIC0xMTYsMjggKzEyOCwzMSBAQAogICByZXR1cm4gIiI7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtRmluZFBhdGhDb21tYW5kOjpGaW5kTm9ybWFsSGVhZGVyKCkKK3N0ZDo6c3RyaW5nIGNtRmluZFBhdGhDb21tYW5kOjpGaW5kTm9ybWFsSGVhZGVyKGNtRmluZEJhc2VEZWJ1Z1N0YXRlJiBkZWJ1ZykKIHsKICAgc3RkOjpzdHJpbmcgdHJ5UGF0aDsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbiA6IHRoaXMtPk5hbWVzKSB7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgc3AgOiB0aGlzLT5TZWFyY2hQYXRocykgewogICAgICAgdHJ5UGF0aCA9IGNtU3RyQ2F0KHNwLCBuKTsKICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRyeVBhdGgpKSB7CisgICAgICAgIGRlYnVnLkZvdW5kQXQodHJ5UGF0aCk7CiAgICAgICAgIGlmICh0aGlzLT5JbmNsdWRlRmlsZUluUGF0aCkgewogICAgICAgICAgIHJldHVybiB0cnlQYXRoOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzcDsKICAgICAgIH0KKyAgICAgIGRlYnVnLkZhaWxlZEF0KHRyeVBhdGgpOwogICAgIH0KICAgfQogICByZXR1cm4gIiI7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtRmluZFBhdGhDb21tYW5kOjpGaW5kRnJhbWV3b3JrSGVhZGVyKCkKK3N0ZDo6c3RyaW5nIGNtRmluZFBhdGhDb21tYW5kOjpGaW5kRnJhbWV3b3JrSGVhZGVyKGNtRmluZEJhc2VEZWJ1Z1N0YXRlJiBkZWJ1ZykKIHsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbiA6IHRoaXMtPk5hbWVzKSB7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgc3AgOiB0aGlzLT5TZWFyY2hQYXRocykgewogICAgICAgc3RkOjpzdHJpbmcgZndQYXRoID0gdGhpcy0+RmluZEhlYWRlckluRnJhbWV3b3JrKG4sIHNwKTsKKyAgICAgIGZ3UGF0aC5lbXB0eSgpID8gZGVidWcuRmFpbGVkQXQoZndQYXRoKSA6IGRlYnVnLkZvdW5kQXQoZndQYXRoKTsKICAgICAgIGlmICghZndQYXRoLmVtcHR5KCkpIHsKICAgICAgICAgcmV0dXJuIGZ3UGF0aDsKICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRQYXRoQ29tbWFuZC5oIGIvU291cmNlL2NtRmluZFBhdGhDb21tYW5kLmgKaW5kZXggOGQxZWE4Yi4uMThiZmI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtRmluZFBhdGhDb21tYW5kLmgKKysrIGIvU291cmNlL2NtRmluZFBhdGhDb21tYW5kLmgKQEAgLTMyLDggKzMyLDggQEAKICAgc3RkOjpzdHJpbmcgRmluZEhlYWRlckluRnJhbWV3b3JrKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRpcik7CiAgIHN0ZDo6c3RyaW5nIEZpbmRIZWFkZXIoKTsKLSAgc3RkOjpzdHJpbmcgRmluZE5vcm1hbEhlYWRlcigpOwotICBzdGQ6OnN0cmluZyBGaW5kRnJhbWV3b3JrSGVhZGVyKCk7CisgIHN0ZDo6c3RyaW5nIEZpbmROb3JtYWxIZWFkZXIoY21GaW5kQmFzZURlYnVnU3RhdGUmIGRlYnVnKTsKKyAgc3RkOjpzdHJpbmcgRmluZEZyYW1ld29ya0hlYWRlcihjbUZpbmRCYXNlRGVidWdTdGF0ZSYgZGVidWcpOwogfTsKIAogYm9vbCBjbUZpbmRQYXRoKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZpbmRQcm9ncmFtQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21GaW5kUHJvZ3JhbUNvbW1hbmQuY3h4CmluZGV4IGUwYTNmYmYuLjc3NzI4ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZpbmRQcm9ncmFtQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtRmluZFByb2dyYW1Db21tYW5kLmN4eApAQCAtMyw2ICszLDggQEAKICNpbmNsdWRlICJjbUZpbmRQcm9ncmFtQ29tbWFuZC5oIgogCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVBvbGljaWVzLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtMTUsNyArMTcsMTAgQEAKIAogc3RydWN0IGNtRmluZFByb2dyYW1IZWxwZXIKIHsKLSAgY21GaW5kUHJvZ3JhbUhlbHBlcigpCisgIGNtRmluZFByb2dyYW1IZWxwZXIoY21NYWtlZmlsZSogbWFrZWZpbGUsIGNtRmluZEJhc2UgY29uc3QqIGJhc2UpCisgICAgOiBEZWJ1Z1NlYXJjaGVzKCJmaW5kX3Byb2dyYW0iLCBiYXNlKQorICAgICwgTWFrZWZpbGUobWFrZWZpbGUpCisgICAgLCBQb2xpY3lDTVAwMTA5KG1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwOSkpCiAgIHsKICNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKQogICAgIC8vIENvbnNpZGVyIHBsYXRmb3JtLXNwZWNpZmljIGV4dGVuc2lvbnMuCkBAIC00MSw2ICs0NiwxMiBAQAogICAvLyBDdXJyZW50IGZ1bGwgcGF0aCB1bmRlciBjb25zaWRlcmF0aW9uLgogICBzdGQ6OnN0cmluZyBUZXN0UGF0aDsKIAorICAvLyBEZWJ1ZyBzdGF0ZQorICBjbUZpbmRCYXNlRGVidWdTdGF0ZSBEZWJ1Z1NlYXJjaGVzOworICBjbU1ha2VmaWxlKiBNYWtlZmlsZTsKKworICBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgUG9saWN5Q01QMDEwOTsKKwogICB2b2lkIEFkZE5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpIHsgdGhpcy0+TmFtZXMucHVzaF9iYWNrKG5hbWUpOyB9CiAgIHZvaWQgU2V0TmFtZShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkKICAgewpAQCAtNzgsMTQgKzg5LDU4IEBACiAgICAgICB0aGlzLT5UZXN0TmFtZUV4dCA9IGNtU3RyQ2F0KG5hbWUsIGV4dCk7CiAgICAgICB0aGlzLT5UZXN0UGF0aCA9CiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgodGhpcy0+VGVzdE5hbWVFeHQsIHBhdGgpOwotCi0gICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyh0aGlzLT5UZXN0UGF0aCwgdHJ1ZSkpIHsKKyAgICAgIGJvb2wgZXhpc3RzID0gdGhpcy0+RmlsZUlzRXhlY3V0YWJsZSh0aGlzLT5UZXN0UGF0aCk7CisgICAgICBleGlzdHMgPyB0aGlzLT5EZWJ1Z1NlYXJjaGVzLkZvdW5kQXQodGhpcy0+VGVzdFBhdGgpCisgICAgICAgICAgICAgOiB0aGlzLT5EZWJ1Z1NlYXJjaGVzLkZhaWxlZEF0KHRoaXMtPlRlc3RQYXRoKTsKKyAgICAgIGlmIChleGlzdHMpIHsKICAgICAgICAgdGhpcy0+QmVzdFBhdGggPSB0aGlzLT5UZXN0UGF0aDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKICAgfQorICBib29sIEZpbGVJc0V4ZWN1dGFibGUoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUpIGNvbnN0CisgIHsKKyAgICBzd2l0Y2ggKHRoaXMtPlBvbGljeUNNUDAxMDkpIHsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgorICAgICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmaWxlLCB0cnVlKTsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgorICAgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9BTFdBWVM6CisgICAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0lGX1VTRUQ6CisgICAgICAgIHJldHVybiBjbVN5c3RlbVRvb2xzOjpGaWxlSXNFeGVjdXRhYmxlKGZpbGUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGJvb2wgY29uc3QgaXNFeGVPbGQgPSBjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGZpbGUsIHRydWUpOworICAgIGJvb2wgY29uc3QgaXNFeGVOZXcgPSBjbVN5c3RlbVRvb2xzOjpGaWxlSXNFeGVjdXRhYmxlKGZpbGUpOworICAgIGlmIChpc0V4ZU5ldyA9PSBpc0V4ZU9sZCkgeworICAgICAgcmV0dXJuIGlzRXhlTmV3OworICAgIH0KKyAgICBpZiAoaXNFeGVOZXcpIHsKKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgIE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywKKyAgICAgICAgY21TdHJDYXQoY21Qb2xpY2llczo6R2V0UG9saWN5V2FybmluZyhjbVBvbGljaWVzOjpDTVAwMTA5KSwKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiVGhlIGZpbGVcbiIKKyAgICAgICAgICAgICAgICAgIiAgIiwKKyAgICAgICAgICAgICAgICAgZmlsZSwKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiaXMgZXhlY3V0YWJsZSBidXQgbm90IHJlYWRhYmxlLiAgIgorICAgICAgICAgICAgICAgICAiQ01ha2UgaXMgaWdub3JpbmcgaXQgZm9yIGNvbXBhdGliaWxpdHkuIikpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsCisgICAgICAgIGNtU3RyQ2F0KGNtUG9saWNpZXM6OkdldFBvbGljeVdhcm5pbmcoY21Qb2xpY2llczo6Q01QMDEwOSksCisgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgIlRoZSBmaWxlXG4iCisgICAgICAgICAgICAgICAgICIgICIsCisgICAgICAgICAgICAgICAgIGZpbGUsCisgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgImlzIHJlYWRhYmxlIGJ1dCBub3QgZXhlY3V0YWJsZS4gICIKKyAgICAgICAgICAgICAgICAgIkNNYWtlIGlzIHVzaW5nIGl0IGZvciBjb21wYXRpYmlsaXR5LiIpKTsKKyAgICB9CisgICAgcmV0dXJuIGlzRXhlT2xkOworICB9CiB9OwogCiBjbUZpbmRQcm9ncmFtQ29tbWFuZDo6Y21GaW5kUHJvZ3JhbUNvbW1hbmQoY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKQEAgLTk3LDYgKzE1Miw3IEBACiAvLyBjbUZpbmRQcm9ncmFtQ29tbWFuZAogYm9vbCBjbUZpbmRQcm9ncmFtQ29tbWFuZDo6SW5pdGlhbFBhc3Moc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzSW4pCiB7CisgIHRoaXMtPkRlYnVnTW9kZSA9IENvbXB1dGVJZkRlYnVnTW9kZVdhbnRlZCgpOwogICB0aGlzLT5WYXJpYWJsZURvY3VtZW50YXRpb24gPSAiUGF0aCB0byBhIHByb2dyYW0uIjsKICAgdGhpcy0+Q01ha2VQYXRoTmFtZSA9ICJQUk9HUkFNIjsKICAgLy8gY2FsbCBjbUZpbmRCYXNlOjpQYXJzZUFyZ3VtZW50cwpAQCAtMTE4LDE1ICsxNzQsMjIgQEAKICAgc3RkOjpzdHJpbmcgY29uc3QgcmVzdWx0ID0gRmluZFByb2dyYW0oKTsKICAgaWYgKCFyZXN1bHQuZW1wdHkoKSkgewogICAgIC8vIFNhdmUgdGhlIHZhbHVlIGluIHRoZSBjYWNoZQotICAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDYWNoZURlZmluaXRpb24odGhpcy0+VmFyaWFibGVOYW1lLCByZXN1bHQuY19zdHIoKSwKKyAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ2FjaGVEZWZpbml0aW9uKHRoaXMtPlZhcmlhYmxlTmFtZSwgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VmFyaWFibGVEb2N1bWVudGF0aW9uLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKIAogICAgIHJldHVybiB0cnVlOwogICB9CiAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDYWNoZURlZmluaXRpb24oCi0gICAgdGhpcy0+VmFyaWFibGVOYW1lLCAodGhpcy0+VmFyaWFibGVOYW1lICsgIi1OT1RGT1VORCIpLmNfc3RyKCksCisgICAgdGhpcy0+VmFyaWFibGVOYW1lLCB0aGlzLT5WYXJpYWJsZU5hbWUgKyAiLU5PVEZPVU5EIiwKICAgICB0aGlzLT5WYXJpYWJsZURvY3VtZW50YXRpb24uY19zdHIoKSwgY21TdGF0ZUVudW1zOjpGSUxFUEFUSCk7CisgIGlmICh0aGlzLT5SZXF1aXJlZCkgeworICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAiQ291bGQgbm90IGZpbmQgIiArIHRoaXMtPlZhcmlhYmxlTmFtZSArCisgICAgICAgICIgdXNpbmcgdGhlIGZvbGxvd2luZyBuYW1lczogIiArIGNtSm9pbih0aGlzLT5OYW1lcywgIiwgIikpOworICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgIH0KICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1OCw3ICsyMjEsNyBAQAogc3RkOjpzdHJpbmcgY21GaW5kUHJvZ3JhbUNvbW1hbmQ6OkZpbmROb3JtYWxQcm9ncmFtTmFtZXNQZXJEaXIoKQogewogICAvLyBTZWFyY2ggZm9yIGFsbCBuYW1lcyBpbiBlYWNoIGRpcmVjdG9yeS4KLSAgY21GaW5kUHJvZ3JhbUhlbHBlciBoZWxwZXI7CisgIGNtRmluZFByb2dyYW1IZWxwZXIgaGVscGVyKHRoaXMtPk1ha2VmaWxlLCB0aGlzKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbiA6IHRoaXMtPk5hbWVzKSB7CiAgICAgaGVscGVyLkFkZE5hbWUobik7CiAgIH0KQEAgLTE4MSw3ICsyNDQsNyBAQAogc3RkOjpzdHJpbmcgY21GaW5kUHJvZ3JhbUNvbW1hbmQ6OkZpbmROb3JtYWxQcm9ncmFtRGlyc1Blck5hbWUoKQogewogICAvLyBTZWFyY2ggdGhlIGVudGlyZSBwYXRoIGZvciBlYWNoIG5hbWUuCi0gIGNtRmluZFByb2dyYW1IZWxwZXIgaGVscGVyOworICBjbUZpbmRQcm9ncmFtSGVscGVyIGhlbHBlcih0aGlzLT5NYWtlZmlsZSwgdGhpcyk7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG4gOiB0aGlzLT5OYW1lcykgewogICAgIC8vIFN3aXRjaCB0byBzZWFyY2hpbmcgZm9yIHRoaXMgbmFtZS4KICAgICBoZWxwZXIuU2V0TmFtZShuKTsKQEAgLTI0OSwxNCArMzEyLDEzIEBACiAKICAgaWYgKGV4ZWN1dGFibGVVUkwgIT0gbnVsbHB0cikgewogICAgIGNvbnN0IGludCBNQVhfT1NYX1BBVEhfU0laRSA9IDEwMjQ7Ci0gICAgY2hhciBidWZmZXJbTUFYX09TWF9QQVRIX1NJWkVdOworICAgIFVJbnQ4IGJ1ZmZlcltNQVhfT1NYX1BBVEhfU0laRV07CiAKLSAgICAvLyBDb252ZXJ0IHRoZSBDRlN0cmluZyB0byBhIEMgc3RyaW5nCi0gICAgQ0ZTdHJpbmdHZXRDU3RyaW5nKENGVVJMR2V0U3RyaW5nKGV4ZWN1dGFibGVVUkwpLCBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIE1BWF9PU1hfUEFUSF9TSVpFLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOwotCi0gICAgLy8gQW5kIGZpbmFsbHkgdG8gYSBjKysgc3RyaW5nCi0gICAgZXhlY3V0YWJsZSA9IGJ1bmRsZVBhdGggKyAiL0NvbnRlbnRzL01hY09TLyIgKyBzdGQ6OnN0cmluZyhidWZmZXIpOworICAgIGlmIChDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihleGVjdXRhYmxlVVJMLCBmYWxzZSwgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfT1NYX1BBVEhfU0laRSkpIHsKKyAgICAgIGV4ZWN1dGFibGUgPSBidW5kbGVQYXRoICsgIi9Db250ZW50cy9NYWNPUy8iICsKKyAgICAgICAgc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyKSk7CisgICAgfQogICAgIC8vIE9ubHkgcmVsZWFzZSBDRlVSTFJlZiBpZiBpdCdzIG5vdCBudWxsCiAgICAgQ0ZSZWxlYXNlKGV4ZWN1dGFibGVVUkwpOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Gb3JFYWNoQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21Gb3JFYWNoQ29tbWFuZC5jeHgKaW5kZXggNDQzOTJiYS4uM2I4MmUwYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtRm9yRWFjaENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUZvckVhY2hDb21tYW5kLmN4eApAQCAtMiwxNCArMiwyMyBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21Gb3JFYWNoQ29tbWFuZC5oIgogCi0jaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCisvLyBOT1RFIFRoZSBkZWNsYXJhdGlvbiBvZiBgc3RkOjphYnNgIGhhcyBtb3ZlZCB0byBgY21hdGhgIHNpbmNlIEMrKzE3CisvLyBTZWUgaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL251bWVyaWMvbWF0aC9hYnMKKy8vIEFMRVJUIEJ1dCBJV1lVIHVzZWQgdG8gbGludCBgI2luY2x1ZGVgcyBkbyBub3QgInVuZGVyc3RhbmQiCisvLyBjb25kaXRpb25hbCBjb21waWxhdGlvbiAoaS5lLiBgI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0xgKQogI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+Ci0KLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUZ1bmN0aW9uQmxvY2tlci5oIgpAQCAtMjEsMTIgKzMwLDEwIEBACiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCiBuYW1lc3BhY2UgewotYm9vbCBIYW5kbGVJbk1vZGUoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLCBjbU1ha2VmaWxlJiBtYWtlZmlsZSk7Ci0KIGNsYXNzIGNtRm9yRWFjaEZ1bmN0aW9uQmxvY2tlciA6IHB1YmxpYyBjbUZ1bmN0aW9uQmxvY2tlcgogewogcHVibGljOgotICBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXIoY21NYWtlZmlsZSogbWYpOworICBleHBsaWNpdCBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXIoY21NYWtlZmlsZSogbWYpOwogICB+Y21Gb3JFYWNoRnVuY3Rpb25CbG9ja2VyKCkgb3ZlcnJpZGU7CiAKICAgY206OnN0cmluZ192aWV3IFN0YXJ0Q29tbWFuZE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiZm9yZWFjaCJfczsgfQpAQCAtMzgsMTAgKzQ1LDMzIEBACiAgIGJvb2wgUmVwbGF5KHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVGdW5jdGlvbj4gZnVuY3Rpb25zLAogICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgaW5TdGF0dXMpIG92ZXJyaWRlOwogCisgIHZvaWQgU2V0SXRlcmF0aW9uVmFyc0NvdW50KGNvbnN0IHN0ZDo6c2l6ZV90IHZhcnNDb3VudCkKKyAgeworICAgIHRoaXMtPkl0ZXJhdGlvblZhcnNDb3VudCA9IHZhcnNDb3VudDsKKyAgfQorICB2b2lkIFNldFppcExpc3RzKCkgeyB0aGlzLT5aaXBMaXN0cyA9IHRydWU7IH0KKwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQXJnczsKIAogcHJpdmF0ZToKKyAgc3RydWN0IEludm9rZVJlc3VsdAorICB7CisgICAgYm9vbCBSZXN0b3JlOworICAgIGJvb2wgQnJlYWs7CisgIH07CisKKyAgYm9vbCBSZXBsYXlJdGVtcyhzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlRnVuY3Rpb24+IGNvbnN0JiBmdW5jdGlvbnMsCisgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIGluU3RhdHVzKTsKKworICBib29sIFJlcGxheVppcExpc3RzKHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVGdW5jdGlvbj4gY29uc3QmIGZ1bmN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgaW5TdGF0dXMpOworCisgIEludm9rZVJlc3VsdCBpbnZva2Uoc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUZ1bmN0aW9uPiBjb25zdCYgZnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBpblN0YXR1cywgY21NYWtlZmlsZSYgbWYpOworCiAgIGNtTWFrZWZpbGUqIE1ha2VmaWxlOworICBzdGQ6OnNpemVfdCBJdGVyYXRpb25WYXJzQ291bnQgPSAwdTsKKyAgYm9vbCBaaXBMaXN0cyA9IGZhbHNlOwogfTsKIAogY21Gb3JFYWNoRnVuY3Rpb25CbG9ja2VyOjpjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXIoY21NYWtlZmlsZSogbWYpCkBAIC02MCw1MyArOTAsMjg4IEBACiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHBhbmRlZEFyZ3VtZW50czsKICAgbWYuRXhwYW5kQXJndW1lbnRzKGxmZi5Bcmd1bWVudHMsIGV4cGFuZGVkQXJndW1lbnRzKTsKLSAgcmV0dXJuIGV4cGFuZGVkQXJndW1lbnRzLmVtcHR5KCkgfHwgZXhwYW5kZWRBcmd1bWVudHNbMF0gPT0gdGhpcy0+QXJnc1swXTsKKyAgcmV0dXJuIGV4cGFuZGVkQXJndW1lbnRzLmVtcHR5KCkgfHwKKyAgICBleHBhbmRlZEFyZ3VtZW50cy5mcm9udCgpID09IHRoaXMtPkFyZ3MuZnJvbnQoKTsKIH0KIAogYm9vbCBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXI6OlJlcGxheSgKICAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUZ1bmN0aW9uPiBmdW5jdGlvbnMsIGNtRXhlY3V0aW9uU3RhdHVzJiBpblN0YXR1cykKIHsKLSAgY21NYWtlZmlsZSYgbWYgPSBpblN0YXR1cy5HZXRNYWtlZmlsZSgpOwotICAvLyBhdCBlbmQgb2YgZm9yIGVhY2ggZXhlY3V0ZSByZWNvcmRlZCBjb21tYW5kcworICByZXR1cm4gdGhpcy0+WmlwTGlzdHMgPyB0aGlzLT5SZXBsYXlaaXBMaXN0cyhmdW5jdGlvbnMsIGluU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLT5SZXBsYXlJdGVtcyhmdW5jdGlvbnMsIGluU3RhdHVzKTsKK30KKworYm9vbCBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXI6OlJlcGxheUl0ZW1zKAorICBzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlRnVuY3Rpb24+IGNvbnN0JiBmdW5jdGlvbnMsCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBpblN0YXR1cykKK3sKKyAgYXNzZXJ0KCJVbmV4cGVjdGVkIG51bWJlciBvZiBpdGVyYXRpb24gdmFyaWFibGVzIiAmJgorICAgICAgICAgdGhpcy0+SXRlcmF0aW9uVmFyc0NvdW50ID09IDEpOworCisgIGF1dG8mIG1mID0gaW5TdGF0dXMuR2V0TWFrZWZpbGUoKTsKKworICAvLyBBdCBlbmQgb2YgZm9yIGVhY2ggZXhlY3V0ZSByZWNvcmRlZCBjb21tYW5kcwogICAvLyBzdG9yZSB0aGUgb2xkIHZhbHVlCiAgIHN0ZDo6c3RyaW5nIG9sZERlZjsKLSAgaWYgKG1mLkdldERlZmluaXRpb24odGhpcy0+QXJnc1swXSkpIHsKLSAgICBvbGREZWYgPSBtZi5HZXREZWZpbml0aW9uKHRoaXMtPkFyZ3NbMF0pOworICBpZiAoYXV0byBkID0gbWYuR2V0RGVmaW5pdGlvbih0aGlzLT5BcmdzLmZyb250KCkpKSB7CisgICAgb2xkRGVmID0gZDsKICAgfQogCisgIGF1dG8gcmVzdG9yZSA9IGZhbHNlOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgOiBjbU1ha2VSYW5nZSh0aGlzLT5BcmdzKS5hZHZhbmNlKDEpKSB7Ci0gICAgLy8gc2V0IHRoZSB2YXJpYWJsZSB0byB0aGUgbG9vcCB2YWx1ZQotICAgIG1mLkFkZERlZmluaXRpb24odGhpcy0+QXJnc1swXSwgYXJnKTsKKyAgICAvLyBTZXQgdGhlIHZhcmlhYmxlIHRvIHRoZSBsb29wIHZhbHVlCisgICAgbWYuQWRkRGVmaW5pdGlvbih0aGlzLT5BcmdzLmZyb250KCksIGFyZyk7CiAgICAgLy8gSW52b2tlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBjb2xsZWN0ZWQgaW4gdGhlIGJsb2NrLgotICAgIGZvciAoY21MaXN0RmlsZUZ1bmN0aW9uIGNvbnN0JiBmdW5jIDogZnVuY3Rpb25zKSB7Ci0gICAgICBjbUV4ZWN1dGlvblN0YXR1cyBzdGF0dXMobWYpOwotICAgICAgbWYuRXhlY3V0ZUNvbW1hbmQoZnVuYywgc3RhdHVzKTsKLSAgICAgIGlmIChzdGF0dXMuR2V0UmV0dXJuSW52b2tlZCgpKSB7Ci0gICAgICAgIGluU3RhdHVzLlNldFJldHVybkludm9rZWQoKTsKLSAgICAgICAgLy8gcmVzdG9yZSB0aGUgdmFyaWFibGUgdG8gaXRzIHByaW9yIHZhbHVlCi0gICAgICAgIG1mLkFkZERlZmluaXRpb24odGhpcy0+QXJnc1swXSwgb2xkRGVmKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RhdHVzLkdldEJyZWFrSW52b2tlZCgpKSB7Ci0gICAgICAgIC8vIHJlc3RvcmUgdGhlIHZhcmlhYmxlIHRvIGl0cyBwcmlvciB2YWx1ZQotICAgICAgICBtZi5BZGREZWZpbml0aW9uKHRoaXMtPkFyZ3NbMF0sIG9sZERlZik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKHN0YXR1cy5HZXRDb250aW51ZUludm9rZWQoKSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGYXRhbEVycm9yT2NjdXJlZCgpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQorICAgIGF1dG8gciA9IHRoaXMtPmludm9rZShmdW5jdGlvbnMsIGluU3RhdHVzLCBtZik7CisgICAgcmVzdG9yZSA9IHIuUmVzdG9yZTsKKyAgICBpZiAoci5CcmVhaykgeworICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAKLSAgLy8gcmVzdG9yZSB0aGUgdmFyaWFibGUgdG8gaXRzIHByaW9yIHZhbHVlCi0gIG1mLkFkZERlZmluaXRpb24odGhpcy0+QXJnc1swXSwgb2xkRGVmKTsKKyAgaWYgKHJlc3RvcmUpIHsKKyAgICAvLyByZXN0b3JlIHRoZSB2YXJpYWJsZSB0byBpdHMgcHJpb3IgdmFsdWUKKyAgICBtZi5BZGREZWZpbml0aW9uKHRoaXMtPkFyZ3MuZnJvbnQoKSwgb2xkRGVmKTsKKyAgfQogICByZXR1cm4gdHJ1ZTsKIH0KKworYm9vbCBjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXI6OlJlcGxheVppcExpc3RzKAorICBzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlRnVuY3Rpb24+IGNvbnN0JiBmdW5jdGlvbnMsCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBpblN0YXR1cykKK3sKKyAgYXNzZXJ0KCJVbmV4cGVjdGVkIG51bWJlciBvZiBpdGVyYXRpb24gdmFyaWFibGVzIiAmJgorICAgICAgICAgdGhpcy0+SXRlcmF0aW9uVmFyc0NvdW50ID49IDEpOworCisgIGF1dG8mIG1mID0gaW5TdGF0dXMuR2V0TWFrZWZpbGUoKTsKKworICAvLyBFeHBhbmQgdGhlIGxpc3Qgb2YgbGlzdC12YXJpYWJsZXMgaW50byBhIGxpc3Qgb2YgbGlzdHMgb2Ygc3RyaW5ncworICBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IHZhbHVlczsKKyAgdmFsdWVzLnJlc2VydmUodGhpcy0+QXJncy5zaXplKCkgLSB0aGlzLT5JdGVyYXRpb25WYXJzQ291bnQpOworICAvLyBBbHNvIHRyYWNrIHRoZSBsb25nZXN0IGxpc3Qgc2l6ZQorICBzdGQ6OnNpemVfdCBtYXhJdGVtcyA9IDB1OworICBmb3IgKGF1dG8gY29uc3QmIHZhciA6CisgICAgICAgY21NYWtlUmFuZ2UodGhpcy0+QXJncykuYWR2YW5jZSh0aGlzLT5JdGVyYXRpb25WYXJzQ291bnQpKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGl0ZW1zOworICAgIGF1dG8gY29uc3QmIHZhbHVlID0gbWYuR2V0U2FmZURlZmluaXRpb24odmFyKTsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKKyAgICAgIGNtRXhwYW5kTGlzdCh2YWx1ZSwgaXRlbXMsIHRydWUpOworICAgIH0KKyAgICBtYXhJdGVtcyA9IHN0ZDo6bWF4KG1heEl0ZW1zLCBpdGVtcy5zaXplKCkpOworICAgIHZhbHVlcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGl0ZW1zKSk7CisgIH0KKworICAvLyBGb3JtIHRoZSBsaXN0IG9mIGl0ZXJhdGlvbiB2YXJpYWJsZXMKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGl0ZXJhdGlvblZhcnM7CisgIGlmICh0aGlzLT5JdGVyYXRpb25WYXJzQ291bnQgPiAxKSB7CisgICAgLy8gSWYgbXVsdGlwbGUgaXRlcmF0aW9uIHZhcmlhYmxlcyBoYXMgZ2l2ZW4sCisgICAgLy8ganVzdCBjb3B5IHRoZW0gdG8gdGhlIGBpdGVyYXRpb25WYXJzYCBsaXN0LgorICAgIGl0ZXJhdGlvblZhcnMucmVzZXJ2ZSh2YWx1ZXMuc2l6ZSgpKTsKKyAgICBzdGQ6OmNvcHkodGhpcy0+QXJncy5iZWdpbigpLAorICAgICAgICAgICAgICB0aGlzLT5BcmdzLmJlZ2luKCkgKyB0aGlzLT5JdGVyYXRpb25WYXJzQ291bnQsCisgICAgICAgICAgICAgIHN0ZDo6YmFja19pbnNlcnRlcihpdGVyYXRpb25WYXJzKSk7CisgIH0gZWxzZSB7CisgICAgLy8gSW4gY2FzZSBvZiB0aGUgb25seSBpdGVyYXRpb24gdmFyaWFibGUsCisgICAgLy8gZ2VuZXJhdGUgbmFtZXMgYXMgYHZhcl9uYW1lX05gLAorICAgIC8vIHdoZXJlIGBOYCBpcyB0aGUgY291bnQgb2YgbGlzdHMgdG8gemlwCisgICAgaXRlcmF0aW9uVmFycy5yZXNpemUodmFsdWVzLnNpemUoKSk7CisgICAgY29uc3QgYXV0byBpdGVyX3Zhcl9wcmVmaXggPSB0aGlzLT5BcmdzLmZyb250KCkgKyAiXyI7CisgICAgYXV0byBpID0gMHU7CisgICAgc3RkOjpnZW5lcmF0ZSgKKyAgICAgIGl0ZXJhdGlvblZhcnMuYmVnaW4oKSwgaXRlcmF0aW9uVmFycy5lbmQoKSwKKyAgICAgIFsmXSgpIC0+IHN0ZDo6c3RyaW5nIHsgcmV0dXJuIGl0ZXJfdmFyX3ByZWZpeCArIHN0ZDo6dG9fc3RyaW5nKGkrKyk7IH0pOworICB9CisgIGFzc2VydCgiU2FuaXR5IGNoZWNrIiAmJiBpdGVyYXRpb25WYXJzLnNpemUoKSA9PSB2YWx1ZXMuc2l6ZSgpKTsKKworICAvLyBTdG9yZSBvbGQgdmFsdWVzIGZvciBpdGVyYXRpb24gdmFyaWFibGVzCisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gb2xkRGVmczsKKyAgZm9yIChhdXRvIGkgPSAwdTsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgIGlmIChhdXRvIGQgPSBtZi5HZXREZWZpbml0aW9uKGl0ZXJhdGlvblZhcnNbaV0pKSB7CisgICAgICBvbGREZWZzLmVtcGxhY2UoaXRlcmF0aW9uVmFyc1tpXSwgZCk7CisgICAgfQorICB9CisKKyAgLy8gRm9ybSBhIHZlY3RvciBvZiBjdXJyZW50IHBvc2l0aW9ucyBpbiBhbGwgbGlzdHMgKE9rLCB2ZWN0b3JzKSBvZiB2YWx1ZXMKKyAgc3RkOjp2ZWN0b3I8ZGVjbHR5cGUodmFsdWVzKTo6dmFsdWVfdHlwZTo6aXRlcmF0b3I+IHBvc2l0aW9uczsKKyAgcG9zaXRpb25zLnJlc2VydmUodmFsdWVzLnNpemUoKSk7CisgIHN0ZDo6dHJhbnNmb3JtKAorICAgIHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcihwb3NpdGlvbnMpLAorICAgIC8vIFNldCB0aGUgaW5pdGlhbCBwb3NpdGlvbiB0byB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGxpc3QKKyAgICBbXShkZWNsdHlwZSh2YWx1ZXMpOjp2YWx1ZV90eXBlJiBsaXN0KSB7IHJldHVybiBsaXN0LmJlZ2luKCk7IH0pOworICBhc3NlcnQoIlNhbml0eSBjaGVjayIgJiYgcG9zaXRpb25zLnNpemUoKSA9PSB2YWx1ZXMuc2l6ZSgpKTsKKworICBhdXRvIHJlc3RvcmUgPSBmYWxzZTsKKyAgLy8gSXRlcmF0ZSBvdmVyIGFsbCB0aGUgbGlzdHMgc2ltdWxhdGVuZW91c2x5CisgIGZvciAoYXV0byBpID0gMHU7IGkgPCBtYXhJdGVtczsgKytpKSB7CisgICAgLy8gRGVjbGFyZSBpdGVyYXRpb24gdmFyaWFibGVzCisgICAgZm9yIChhdXRvIGogPSAwdTsgaiA8IHZhbHVlcy5zaXplKCk7ICsraikgeworICAgICAgLy8gRGVmaW5lIChvciBub3QpIHRoZSBpdGVyYXRpb24gdmFyaWFibGUgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24KKyAgICAgIC8vIHN0aWxsIG5vdCBhdCB0aGUgZW5kLi4uCisgICAgICBpZiAocG9zaXRpb25zW2pdICE9IHZhbHVlc1tqXS5lbmQoKSkgeworICAgICAgICBtZi5BZGREZWZpbml0aW9uKGl0ZXJhdGlvblZhcnNbal0sICpwb3NpdGlvbnNbal0pOworICAgICAgICArK3Bvc2l0aW9uc1tqXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG1mLlJlbW92ZURlZmluaXRpb24oaXRlcmF0aW9uVmFyc1tqXSk7CisgICAgICB9CisgICAgfQorICAgIC8vIEludm9rZSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY29sbGVjdGVkIGluIHRoZSBibG9jay4KKyAgICBhdXRvIHIgPSB0aGlzLT5pbnZva2UoZnVuY3Rpb25zLCBpblN0YXR1cywgbWYpOworICAgIHJlc3RvcmUgPSByLlJlc3RvcmU7CisgICAgaWYgKHIuQnJlYWspIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIC8vIFJlc3RvcmUgdGhlIHZhcmlhYmxlcyB0byBpdHMgcHJpb3IgdmFsdWUKKyAgaWYgKHJlc3RvcmUpIHsKKyAgICBmb3IgKGF1dG8gY29uc3QmIHAgOiBvbGREZWZzKSB7CisgICAgICBtZi5BZGREZWZpbml0aW9uKHAuZmlyc3QsIHAuc2Vjb25kKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7CiB9CiAKK2F1dG8gY21Gb3JFYWNoRnVuY3Rpb25CbG9ja2VyOjppbnZva2UoCisgIHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVGdW5jdGlvbj4gY29uc3QmIGZ1bmN0aW9ucywKKyAgY21FeGVjdXRpb25TdGF0dXMmIGluU3RhdHVzLCBjbU1ha2VmaWxlJiBtZikgLT4gSW52b2tlUmVzdWx0Cit7CisgIEludm9rZVJlc3VsdCByZXN1bHQgPSB7IHRydWUsIGZhbHNlIH07CisgIC8vIEludm9rZSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY29sbGVjdGVkIGluIHRoZSBibG9jay4KKyAgZm9yIChjbUxpc3RGaWxlRnVuY3Rpb24gY29uc3QmIGZ1bmMgOiBmdW5jdGlvbnMpIHsKKyAgICBjbUV4ZWN1dGlvblN0YXR1cyBzdGF0dXMobWYpOworICAgIG1mLkV4ZWN1dGVDb21tYW5kKGZ1bmMsIHN0YXR1cyk7CisgICAgaWYgKHN0YXR1cy5HZXRSZXR1cm5JbnZva2VkKCkpIHsKKyAgICAgIGluU3RhdHVzLlNldFJldHVybkludm9rZWQoKTsKKyAgICAgIHJlc3VsdC5CcmVhayA9IHRydWU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHN0YXR1cy5HZXRCcmVha0ludm9rZWQoKSkgeworICAgICAgcmVzdWx0LkJyZWFrID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoc3RhdHVzLkdldENvbnRpbnVlSW52b2tlZCgpKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEZhdGFsRXJyb3JPY2N1cmVkKCkpIHsKKyAgICAgIHJlc3VsdC5SZXN0b3JlID0gZmFsc2U7CisgICAgICByZXN1bHQuQnJlYWsgPSB0cnVlOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgSGFuZGxlSW5Nb2RlKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKKyAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Iga3dJbkl0ZXIsCisgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlJiBtYWtlZmlsZSkKK3sKKyAgYXNzZXJ0KCJBIHZhbGlkIGl0ZXJhdG9yIGV4cGVjdGVkIiAmJiBrd0luSXRlciAhPSBhcmdzLmVuZCgpKTsKKworICBhdXRvIGZiID0gY206Om1ha2VfdW5pcXVlPGNtRm9yRWFjaEZ1bmN0aW9uQmxvY2tlcj4oJm1ha2VmaWxlKTsKKworICAvLyBDb3B5IGl0ZXJhdGlvbiB2YXJpYWJsZSBuYW1lcyBmaXJzdAorICBzdGQ6OmNvcHkoYXJncy5iZWdpbigpLCBrd0luSXRlciwgc3RkOjpiYWNrX2luc2VydGVyKGZiLT5BcmdzKSk7CisgIC8vIFJlbWVtYmVyIHRoZSBjb3VudCBvZiBnaXZlbiBpdGVyYXRpb24gdmFyaWFibGUgbmFtZXMKKyAgY29uc3QgYXV0byB2YXJzQ291bnQgPSBmYi0+QXJncy5zaXplKCk7CisgIGZiLT5TZXRJdGVyYXRpb25WYXJzQ291bnQodmFyc0NvdW50KTsKKworICBlbnVtIERvaW5nCisgIHsKKyAgICBEb2luZ05vbmUsCisgICAgRG9pbmdMaXN0cywKKyAgICBEb2luZ0l0ZW1zLAorICAgIERvaW5nWmlwTGlzdHMKKyAgfTsKKyAgRG9pbmcgZG9pbmcgPSBEb2luZ05vbmU7CisgIC8vIEl0ZXJhdGUgb3ZlciBhcmd1bWVudHMgcGFzdCB0aGUgIklOIiBrZXl3b3JkCisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGFyZyA6IGNtTWFrZVJhbmdlKCsra3dJbkl0ZXIsIGFyZ3MuZW5kKCkpKSB7CisgICAgaWYgKGFyZyA9PSAiTElTVFMiKSB7CisgICAgICBpZiAoZG9pbmcgPT0gRG9pbmdaaXBMaXN0cykgeworICAgICAgICBtYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlpJUF9MSVNUUyBjYW4gbm90IGJlIHVzZWQgd2l0aCBMSVNUUyBvciBJVEVNUyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmICh2YXJzQ291bnQgIT0gMXUpIHsKKyAgICAgICAgbWFrZWZpbGUuSXNzdWVNZXNzYWdlKAorICAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICAiSVRFTVMgb3IgTElTVFMgcmVxdWlyZSBleGFjdGx5IG9uZSBpdGVyYXRpb24gdmFyaWFibGUiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgICBkb2luZyA9IERvaW5nTGlzdHM7CisKKyAgICB9IGVsc2UgaWYgKGFyZyA9PSAiSVRFTVMiKSB7CisgICAgICBpZiAoZG9pbmcgPT0gRG9pbmdaaXBMaXN0cykgeworICAgICAgICBtYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlpJUF9MSVNUUyBjYW4gbm90IGJlIHVzZWQgd2l0aCBMSVNUUyBvciBJVEVNUyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmICh2YXJzQ291bnQgIT0gMXUpIHsKKyAgICAgICAgbWFrZWZpbGUuSXNzdWVNZXNzYWdlKAorICAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICAiSVRFTVMgb3IgTElTVFMgcmVxdWlyZSBleGFjdGx5IG9uZSBpdGVyYXRpb24gdmFyaWFibGUiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgICBkb2luZyA9IERvaW5nSXRlbXM7CisKKyAgICB9IGVsc2UgaWYgKGFyZyA9PSAiWklQX0xJU1RTIikgeworICAgICAgaWYgKGRvaW5nICE9IERvaW5nTm9uZSkgeworICAgICAgICBtYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlpJUF9MSVNUUyBjYW4gbm90IGJlIHVzZWQgd2l0aCBMSVNUUyBvciBJVEVNUyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGRvaW5nID0gRG9pbmdaaXBMaXN0czsKKyAgICAgIGZiLT5TZXRaaXBMaXN0cygpOworCisgICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ0xpc3RzKSB7CisgICAgICBhdXRvIGNvbnN0JiB2YWx1ZSA9IG1ha2VmaWxlLkdldFNhZmVEZWZpbml0aW9uKGFyZyk7CisgICAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKKyAgICAgICAgY21FeHBhbmRMaXN0KHZhbHVlLCBmYi0+QXJncywgdHJ1ZSk7CisgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nSXRlbXMgfHwgZG9pbmcgPT0gRG9pbmdaaXBMaXN0cykgeworICAgICAgZmItPkFyZ3MucHVzaF9iYWNrKGFyZyk7CisKKyAgICB9IGVsc2UgeworICAgICAgbWFrZWZpbGUuSXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0ckNhdCgiVW5rbm93biBhcmd1bWVudDpcbiIsICIgICIsIGFyZywgIlxuIikpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisKKyAgLy8gSWYgYFpJUF9MSVNUU2AgZ2l2ZW4gYW5kIHZhcmlhYmxlcyBjb3VudCBtb3JlIHRoYW4gMSwKKyAgLy8gbWFrZSBzdXJlIHRoZSBnaXZlbiBsaXN0cyBjb3VudCBtYXRjaGVzIHZhcmlhYmxlcy4uLgorICBpZiAoZG9pbmcgPT0gRG9pbmdaaXBMaXN0cyAmJiB2YXJzQ291bnQgPiAxdSAmJgorICAgICAgKDJ1ICogdmFyc0NvdW50KSAhPSBmYi0+QXJncy5zaXplKCkpIHsKKyAgICBtYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UoCisgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICBjbVN0ckNhdCgiRXhwZWN0ZWQgIiwgc3RkOjp0b19zdHJpbmcodmFyc0NvdW50KSwKKyAgICAgICAgICAgICAgICIgbGlzdCB2YXJpYWJsZXMsIGJ1dCBnaXZlbiAiLAorICAgICAgICAgICAgICAgc3RkOjp0b19zdHJpbmcoZmItPkFyZ3Muc2l6ZSgpIC0gdmFyc0NvdW50KSkpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgbWFrZWZpbGUuQWRkRnVuY3Rpb25CbG9ja2VyKHN0ZDo6bW92ZShmYikpOworCisgIHJldHVybiB0cnVlOworfQorCitib29sIFRyeVBhcnNlSW50ZWdlcihjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBpbnQmIGkpCit7CisgIHRyeSB7CisgICAgaSA9IHN0ZDo6c3RvaShzdHIpOworICB9IGNhdGNoIChzdGQ6OmludmFsaWRfYXJndW1lbnQmKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgZSA8PCAiSW52YWxpZCBpbnRlZ2VyOiAnIiA8PCBzdHIgPDwgIiciOworICAgIHN0YXR1cy5TZXRFcnJvcihlLnN0cigpKTsKKyAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogYm9vbCBjbUZvckVhY2hDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQogewpAQCAtMTE0LDggKzM3OSw5IEBACiAgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBpZiAoYXJncy5zaXplKCkgPiAxICYmIGFyZ3NbMV0gPT0gIklOIikgewotICAgIHJldHVybiBIYW5kbGVJbk1vZGUoYXJncywgc3RhdHVzLkdldE1ha2VmaWxlKCkpOworICBhdXRvIGt3SW5JdGVyID0gc3RkOjpmaW5kKGFyZ3MuYmVnaW4oKSwgYXJncy5lbmQoKSwgIklOIik7CisgIGlmIChrd0luSXRlciAhPSBhcmdzLmVuZCgpKSB7CisgICAgcmV0dXJuIEhhbmRsZUluTW9kZShhcmdzLCBrd0luSXRlciwgc3RhdHVzLkdldE1ha2VmaWxlKCkpOwogICB9CiAKICAgLy8gY3JlYXRlIGEgZnVuY3Rpb24gYmxvY2tlcgpAQCAtMTI2LDE2ICszOTIsMjggQEAKICAgICAgIGludCBzdG9wID0gMDsKICAgICAgIGludCBzdGVwID0gMDsKICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAzKSB7Ci0gICAgICAgIHN0b3AgPSBhdG9pKGFyZ3NbMl0uY19zdHIoKSk7CisgICAgICAgIGlmICghVHJ5UGFyc2VJbnRlZ2VyKHN0YXR1cywgYXJnc1syXSwgc3RvcCkpIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSA0KSB7Ci0gICAgICAgIHN0YXJ0ID0gYXRvaShhcmdzWzJdLmNfc3RyKCkpOwotICAgICAgICBzdG9wID0gYXRvaShhcmdzWzNdLmNfc3RyKCkpOworICAgICAgICBpZiAoIVRyeVBhcnNlSW50ZWdlcihzdGF0dXMsIGFyZ3NbMl0sIHN0YXJ0KSkgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVRyeVBhcnNlSW50ZWdlcihzdGF0dXMsIGFyZ3NbM10sIHN0b3ApKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICB9CiAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gNSkgewotICAgICAgICBzdGFydCA9IGF0b2koYXJnc1syXS5jX3N0cigpKTsKLSAgICAgICAgc3RvcCA9IGF0b2koYXJnc1szXS5jX3N0cigpKTsKLSAgICAgICAgc3RlcCA9IGF0b2koYXJnc1s0XS5jX3N0cigpKTsKKyAgICAgICAgaWYgKCFUcnlQYXJzZUludGVnZXIoc3RhdHVzLCBhcmdzWzJdLCBzdGFydCkpIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFUcnlQYXJzZUludGVnZXIoc3RhdHVzLCBhcmdzWzNdLCBzdG9wKSkgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVRyeVBhcnNlSW50ZWdlcihzdGF0dXMsIGFyZ3NbNF0sIHN0ZXApKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICB9CiAgICAgICBpZiAoc3RlcCA9PSAwKSB7CiAgICAgICAgIGlmIChzdGFydCA+IHN0b3ApIHsKQEAgLTE0OSw2OSArNDI3LDM2IEBACiAgICAgICAgIHN0YXR1cy5TZXRFcnJvcigKICAgICAgICAgICBjbVN0ckNhdCgiY2FsbGVkIHdpdGggaW5jb3JyZWN0IHJhbmdlIHNwZWNpZmljYXRpb246IHN0YXJ0ICIsIHN0YXJ0LAogICAgICAgICAgICAgICAgICAgICIsIHN0b3AgIiwgc3RvcCwgIiwgc3RlcCAiLCBzdGVwKSk7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByYW5nZTsKLSAgICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0gICAgICByYW5nZS5wdXNoX2JhY2soYXJnc1swXSk7Ci0gICAgICBpbnQgY2M7Ci0gICAgICBmb3IgKGNjID0gc3RhcnQ7OyBjYyArPSBzdGVwKSB7Ci0gICAgICAgIGlmICgoc3RlcCA+IDAgJiYgY2MgPiBzdG9wKSB8fCAoc3RlcCA8IDAgJiYgY2MgPCBzdG9wKSkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBjYyk7Ci0gICAgICAgIHJhbmdlLmVtcGxhY2VfYmFjayhidWZmZXIpOwotICAgICAgICBpZiAoY2MgPT0gc3RvcCkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmYi0+QXJncyA9IHJhbmdlOworCisgICAgICAvLyBDYWxjdWxhdGUgZXhwZWN0ZWQgaXRlcmF0aW9ucyBjb3VudCBhbmQgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UKKyAgICAgIC8vIGluIHRoZSBgZmItPkFyZ3NgIHZlY3Rvci4gVGhlIGZpcnN0IGl0ZW0gaXMgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZQorICAgICAgLy8gbmFtZS4uLgorICAgICAgY29uc3Qgc3RkOjpzaXplX3QgaXRlcl9jbnQgPSAydSArCisgICAgICAgIGludChzdGFydCA8IHN0b3ApICogKHN0b3AgLSBzdGFydCkgLyBzdGQ6OmFicyhzdGVwKSArCisgICAgICAgIGludChzdGFydCA+IHN0b3ApICogKHN0YXJ0IC0gc3RvcCkgLyBzdGQ6OmFicyhzdGVwKTsKKyAgICAgIGZiLT5BcmdzLnJlc2l6ZShpdGVyX2NudCk7CisgICAgICBmYi0+QXJncy5mcm9udCgpID0gYXJncy5mcm9udCgpOworICAgICAgYXV0byBjYyA9IHN0YXJ0OworICAgICAgYXV0byBnZW5lcmF0b3IgPSBbJmNjLCBzdGVwXSgpIC0+IHN0ZDo6c3RyaW5nIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzdGQ6OnRvX3N0cmluZyhjYyk7CisgICAgICAgIGNjICs9IHN0ZXA7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9OworICAgICAgLy8gRmlsbCB0aGUgYHJhbmdlYCB2ZWN0b3Igdy8gZ2VuZXJhdGVkIHN0cmluZyB2YWx1ZXMKKyAgICAgIC8vIChzdGFydGluZyBmcm9tIDJuZCBwb3NpdGlvbikKKyAgICAgIHN0ZDo6Z2VuZXJhdGUoKytmYi0+QXJncy5iZWdpbigpLCBmYi0+QXJncy5lbmQoKSwgZ2VuZXJhdG9yKTsKICAgICB9IGVsc2UgewogICAgICAgZmItPkFyZ3MgPSBhcmdzOwogICAgIH0KICAgfSBlbHNlIHsKICAgICBmYi0+QXJncyA9IGFyZ3M7CiAgIH0KKworICBmYi0+U2V0SXRlcmF0aW9uVmFyc0NvdW50KDF1KTsKICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkRnVuY3Rpb25CbG9ja2VyKHN0ZDo6bW92ZShmYikpOwogCiAgIHJldHVybiB0cnVlOwogfQotCi1uYW1lc3BhY2UgewotYm9vbCBIYW5kbGVJbk1vZGUoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLCBjbU1ha2VmaWxlJiBtYWtlZmlsZSkKLXsKLSAgYXV0byBmYiA9IGNtOjptYWtlX3VuaXF1ZTxjbUZvckVhY2hGdW5jdGlvbkJsb2NrZXI+KCZtYWtlZmlsZSk7Ci0gIGZiLT5BcmdzLnB1c2hfYmFjayhhcmdzWzBdKTsKLQotICBlbnVtIERvaW5nCi0gIHsKLSAgICBEb2luZ05vbmUsCi0gICAgRG9pbmdMaXN0cywKLSAgICBEb2luZ0l0ZW1zCi0gIH07Ci0gIERvaW5nIGRvaW5nID0gRG9pbmdOb25lOwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMjsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICBpZiAoZG9pbmcgPT0gRG9pbmdJdGVtcykgewotICAgICAgZmItPkFyZ3MucHVzaF9iYWNrKGFyZ3NbaV0pOwotICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PSAiTElTVFMiKSB7Ci0gICAgICBkb2luZyA9IERvaW5nTGlzdHM7Ci0gICAgfSBlbHNlIGlmIChhcmdzW2ldID09ICJJVEVNUyIpIHsKLSAgICAgIGRvaW5nID0gRG9pbmdJdGVtczsKLSAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nTGlzdHMpIHsKLSAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gbWFrZWZpbGUuR2V0RGVmaW5pdGlvbihhcmdzW2ldKTsKLSAgICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKLSAgICAgICAgY21FeHBhbmRMaXN0KHZhbHVlLCBmYi0+QXJncywgdHJ1ZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1ha2VmaWxlLklzc3VlTWVzc2FnZSgKLSAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAotICAgICAgICBjbVN0ckNhdCgiVW5rbm93biBhcmd1bWVudDpcbiIsICIgICIsIGFyZ3NbaV0sICJcbiIpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIG1ha2VmaWxlLkFkZEZ1bmN0aW9uQmxvY2tlcihzdGQ6Om1vdmUoZmIpKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUZ1bmN0aW9uQmxvY2tlci5jeHggYi9Tb3VyY2UvY21GdW5jdGlvbkJsb2NrZXIuY3h4CmluZGV4IDU3NzhhNzEuLjY0M2NkODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUZ1bmN0aW9uQmxvY2tlci5jeHgKKysrIGIvU291cmNlL2NtRnVuY3Rpb25CbG9ja2VyLmN4eApAQCAtMyw3ICszLDkgQEAKICNpbmNsdWRlICJjbUZ1bmN0aW9uQmxvY2tlci5oIgogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxtZW1vcnk+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21GdW5jdGlvbkNvbW1hbmQuY3h4IGIvU291cmNlL2NtRnVuY3Rpb25Db21tYW5kLmN4eAppbmRleCBiM2RkZmUwLi5iNmY1OGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21GdW5jdGlvbkNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUZ1bmN0aW9uQ29tbWFuZC5jeHgKQEAgLTIsMTUgKzIsMTMgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtRnVuY3Rpb25Db21tYW5kLmgiCiAKLSNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKLQotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21GdW5jdGlvbkJsb2NrZXIuaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKQEAgLTE5LDggKzE3LDIwIEBACiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKIG5hbWVzcGFjZSB7CitzdGQ6OnN0cmluZyBjb25zdCBBUkdDID0gIkFSR0MiOworc3RkOjpzdHJpbmcgY29uc3QgQVJHTiA9ICJBUkdOIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IEFSR1YgPSAiQVJHViI7CitzdGQ6OnN0cmluZyBjb25zdCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OID0gIkNNQUtFX0NVUlJFTlRfRlVOQ1RJT04iOworc3RkOjpzdHJpbmcgY29uc3QgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUgPQorICAiQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUiOworc3RkOjpzdHJpbmcgY29uc3QgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUiA9CisgICJDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSIjsKK3N0ZDo6c3RyaW5nIGNvbnN0IENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FID0KKyAgIkNNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FIjsKKwogLy8gZGVmaW5lIHRoZSBjbGFzcyBmb3IgZnVuY3Rpb24gY29tbWFuZHMKIGNsYXNzIGNtRnVuY3Rpb25IZWxwZXJDb21tYW5kCiB7CkBAIC0zNiw4ICs0Niw4IEBACiAgIHN0ZDo6dmVjdG9yPGNtTGlzdEZpbGVGdW5jdGlvbj4gRnVuY3Rpb25zOwogICBjbVBvbGljaWVzOjpQb2xpY3lNYXAgUG9saWNpZXM7CiAgIHN0ZDo6c3RyaW5nIEZpbGVQYXRoOworICBsb25nIExpbmU7CiB9OwotfQogCiBib29sIGNtRnVuY3Rpb25IZWxwZXJDb21tYW5kOjpvcGVyYXRvcigpKAogICBzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlQXJndW1lbnQ+IGNvbnN0JiBhcmdzLApAQCAtNTIsOSArNjIsOSBAQAogICAvLyBtYWtlIHN1cmUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIGlzIGF0IGxlYXN0IHRoZSBudW1iZXIKICAgLy8gcmVxdWlyZWQgYnkgdGhlIHNpZ25hdHVyZQogICBpZiAoZXhwYW5kZWRBcmdzLnNpemUoKSA8IHRoaXMtPkFyZ3Muc2l6ZSgpIC0gMSkgewotICAgIHN0ZDo6c3RyaW5nIGVycm9yTXNnID0gY21TdHJDYXQoCisgICAgYXV0byBjb25zdCBlcnJvck1zZyA9IGNtU3RyQ2F0KAogICAgICAgIkZ1bmN0aW9uIGludm9rZWQgd2l0aCBpbmNvcnJlY3QgYXJndW1lbnRzIGZvciBmdW5jdGlvbiBuYW1lZDogIiwKLSAgICAgIHRoaXMtPkFyZ3NbMF0pOworICAgICAgdGhpcy0+QXJncy5mcm9udCgpKTsKICAgICBpblN0YXR1cy5TZXRFcnJvcihlcnJvck1zZyk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC02MywzMCArNzMsNDAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UG9saWNpZXMpOwogCiAgIC8vIHNldCB0aGUgdmFsdWUgb2YgYXJnYwotICBtYWtlZmlsZS5BZGREZWZpbml0aW9uKCJBUkdDIiwgc3RkOjp0b19zdHJpbmcoZXhwYW5kZWRBcmdzLnNpemUoKSkpOwotICBtYWtlZmlsZS5NYXJrVmFyaWFibGVBc1VzZWQoIkFSR0MiKTsKKyAgbWFrZWZpbGUuQWRkRGVmaW5pdGlvbihBUkdDLCBzdGQ6OnRvX3N0cmluZyhleHBhbmRlZEFyZ3Muc2l6ZSgpKSk7CisgIG1ha2VmaWxlLk1hcmtWYXJpYWJsZUFzVXNlZChBUkdDKTsKIAogICAvLyBzZXQgdGhlIHZhbHVlcyBmb3IgQVJHVjAgQVJHVjEgLi4uCi0gIGZvciAodW5zaWduZWQgaW50IHQgPSAwOyB0IDwgZXhwYW5kZWRBcmdzLnNpemUoKTsgKyt0KSB7Ci0gICAgc3RkOjpvc3RyaW5nc3RyZWFtIHRtcFN0cmVhbTsKLSAgICB0bXBTdHJlYW0gPDwgIkFSR1YiIDw8IHQ7Ci0gICAgbWFrZWZpbGUuQWRkRGVmaW5pdGlvbih0bXBTdHJlYW0uc3RyKCksIGV4cGFuZGVkQXJnc1t0XSk7Ci0gICAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKHRtcFN0cmVhbS5zdHIoKSk7CisgIGZvciAoYXV0byB0ID0gMHU7IHQgPCBleHBhbmRlZEFyZ3Muc2l6ZSgpOyArK3QpIHsKKyAgICBhdXRvIGNvbnN0IHZhbHVlID0gY21TdHJDYXQoQVJHViwgc3RkOjp0b19zdHJpbmcodCkpOworICAgIG1ha2VmaWxlLkFkZERlZmluaXRpb24odmFsdWUsIGV4cGFuZGVkQXJnc1t0XSk7CisgICAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKHZhbHVlKTsKICAgfQogCiAgIC8vIGRlZmluZSB0aGUgZm9ybWFsIGFyZ3VtZW50cwotICBmb3IgKHVuc2lnbmVkIGludCBqID0gMTsgaiA8IHRoaXMtPkFyZ3Muc2l6ZSgpOyArK2opIHsKKyAgZm9yIChhdXRvIGogPSAxdTsgaiA8IHRoaXMtPkFyZ3Muc2l6ZSgpOyArK2opIHsKICAgICBtYWtlZmlsZS5BZGREZWZpbml0aW9uKHRoaXMtPkFyZ3Nbal0sIGV4cGFuZGVkQXJnc1tqIC0gMV0pOwogICB9CiAKICAgLy8gZGVmaW5lIEFSR1YgYW5kIEFSR04KLSAgc3RkOjpzdHJpbmcgYXJndkRlZiA9IGNtSm9pbihleHBhbmRlZEFyZ3MsICI7Iik7Ci0gIGF1dG8gZWl0ID0gZXhwYW5kZWRBcmdzLmJlZ2luKCkgKyAodGhpcy0+QXJncy5zaXplKCkgLSAxKTsKLSAgc3RkOjpzdHJpbmcgYXJnbkRlZiA9IGNtSm9pbihjbU1ha2VSYW5nZShlaXQsIGV4cGFuZGVkQXJncy5lbmQoKSksICI7Iik7Ci0gIG1ha2VmaWxlLkFkZERlZmluaXRpb24oIkFSR1YiLCBhcmd2RGVmKTsKLSAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKCJBUkdWIik7Ci0gIG1ha2VmaWxlLkFkZERlZmluaXRpb24oIkFSR04iLCBhcmduRGVmKTsKLSAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKCJBUkdOIik7CisgIGF1dG8gY29uc3QgYXJndkRlZiA9IGNtSm9pbihleHBhbmRlZEFyZ3MsICI7Iik7CisgIGF1dG8gY29uc3QgZWl0ID0gZXhwYW5kZWRBcmdzLmJlZ2luKCkgKyAodGhpcy0+QXJncy5zaXplKCkgLSAxKTsKKyAgYXV0byBjb25zdCBhcmduRGVmID0gY21Kb2luKGNtTWFrZVJhbmdlKGVpdCwgZXhwYW5kZWRBcmdzLmVuZCgpKSwgIjsiKTsKKyAgbWFrZWZpbGUuQWRkRGVmaW5pdGlvbihBUkdWLCBhcmd2RGVmKTsKKyAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKEFSR1YpOworICBtYWtlZmlsZS5BZGREZWZpbml0aW9uKEFSR04sIGFyZ25EZWYpOworICBtYWtlZmlsZS5NYXJrVmFyaWFibGVBc1VzZWQoQVJHTik7CisKKyAgbWFrZWZpbGUuQWRkRGVmaW5pdGlvbihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLCB0aGlzLT5BcmdzLmZyb250KCkpOworICBtYWtlZmlsZS5NYXJrVmFyaWFibGVBc1VzZWQoQ01BS0VfQ1VSUkVOVF9GVU5DVElPTik7CisgIG1ha2VmaWxlLkFkZERlZmluaXRpb24oQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEUsIHRoaXMtPkZpbGVQYXRoKTsKKyAgbWFrZWZpbGUuTWFya1ZhcmlhYmxlQXNVc2VkKENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFKTsKKyAgbWFrZWZpbGUuQWRkRGVmaW5pdGlvbihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aCh0aGlzLT5GaWxlUGF0aCkpOworICBtYWtlZmlsZS5NYXJrVmFyaWFibGVBc1VzZWQoQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUik7CisgIG1ha2VmaWxlLkFkZERlZmluaXRpb24oQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp0b19zdHJpbmcodGhpcy0+TGluZSkpOworICBtYWtlZmlsZS5NYXJrVmFyaWFibGVBc1VzZWQoQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUpOwogCiAgIC8vIEludm9rZSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY29sbGVjdGVkIGluIHRoZSBibG9jay4KICAgLy8gZm9yIGVhY2ggZnVuY3Rpb24KQEAgLTEwMCw3ICsxMjAsNyBAQAogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoc3RhdHVzLkdldFJldHVybkludm9rZWQoKSkgewotICAgICAgcmV0dXJuIHRydWU7CisgICAgICBicmVhazsKICAgICB9CiAgIH0KIApAQCAtMTI5LDcgKzE0OSw4IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHBhbmRlZEFyZ3VtZW50czsKICAgbWYuRXhwYW5kQXJndW1lbnRzKGxmZi5Bcmd1bWVudHMsIGV4cGFuZGVkQXJndW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0U3RhcnRpbmdDb250ZXh0KCkuRmlsZVBhdGguY19zdHIoKSk7Ci0gIHJldHVybiBleHBhbmRlZEFyZ3VtZW50cy5lbXB0eSgpIHx8IGV4cGFuZGVkQXJndW1lbnRzWzBdID09IHRoaXMtPkFyZ3NbMF07CisgIHJldHVybiBleHBhbmRlZEFyZ3VtZW50cy5lbXB0eSgpIHx8CisgICAgZXhwYW5kZWRBcmd1bWVudHMuZnJvbnQoKSA9PSB0aGlzLT5BcmdzLmZyb250KCk7CiB9CiAKIGJvb2wgY21GdW5jdGlvbkZ1bmN0aW9uQmxvY2tlcjo6UmVwbGF5KApAQCAtMTQxLDExICsxNjIsMTQgQEAKICAgZi5BcmdzID0gdGhpcy0+QXJnczsKICAgZi5GdW5jdGlvbnMgPSBzdGQ6Om1vdmUoZnVuY3Rpb25zKTsKICAgZi5GaWxlUGF0aCA9IHRoaXMtPkdldFN0YXJ0aW5nQ29udGV4dCgpLkZpbGVQYXRoOworICBmLkxpbmUgPSB0aGlzLT5HZXRTdGFydGluZ0NvbnRleHQoKS5MaW5lOwogICBtZi5SZWNvcmRQb2xpY2llcyhmLlBvbGljaWVzKTsKLSAgbWYuR2V0U3RhdGUoKS0+QWRkU2NyaXB0ZWRDb21tYW5kKHRoaXMtPkFyZ3NbMF0sIHN0ZDo6bW92ZShmKSk7CisgIG1mLkdldFN0YXRlKCktPkFkZFNjcmlwdGVkQ29tbWFuZCh0aGlzLT5BcmdzLmZyb250KCksIHN0ZDo6bW92ZShmKSk7CiAgIHJldHVybiB0cnVlOwogfQogCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogYm9vbCBjbUZ1bmN0aW9uQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7CkBAIC0xNTUsMTAgKzE3OSw5IEBACiAgIH0KIAogICAvLyBjcmVhdGUgYSBmdW5jdGlvbiBibG9ja2VyCi0gIHsKLSAgICBhdXRvIGZiID0gY206Om1ha2VfdW5pcXVlPGNtRnVuY3Rpb25GdW5jdGlvbkJsb2NrZXI+KCk7Ci0gICAgY21BcHBlbmQoZmItPkFyZ3MsIGFyZ3MpOwotICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZEZ1bmN0aW9uQmxvY2tlcihzdGQ6Om1vdmUoZmIpKTsKLSAgfQorICBhdXRvIGZiID0gY206Om1ha2VfdW5pcXVlPGNtRnVuY3Rpb25GdW5jdGlvbkJsb2NrZXI+KCk7CisgIGNtOjphcHBlbmQoZmItPkFyZ3MsIGFyZ3MpOworICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRGdW5jdGlvbkJsb2NrZXIoc3RkOjptb3ZlKGZiKSk7CisKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIuY3h4IGIvU291cmNlL2NtR2NjRGVwZmlsZUxleGVySGVscGVyLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTc4OTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtR2NjRGVwZmlsZUxleGVySGVscGVyLmN4eApAQCAtMCwwICsxLDEyNiBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2luY2x1ZGUgImNtR2NjRGVwZmlsZUxleGVySGVscGVyLmgiCisKKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjbUdjY0RlcGZpbGVSZWFkZXJUeXBlcy5oIgorCisjaW5jbHVkZSAiTGV4ZXJQYXJzZXIvY21HY2NEZXBmaWxlTGV4ZXIuaCIKKworI2lmZGVmIF9XSU4zMgorIyAgaW5jbHVkZSAiY21zeXMvRW5jb2RpbmcuaCIKKyNlbmRpZgorCitib29sIGNtR2NjRGVwZmlsZUxleGVySGVscGVyOjpyZWFkRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCkKK3sKKyNpZmRlZiBfV0lOMzIKKyAgd2NoYXJfdCogd3BhdGggPSBjbXN5c0VuY29kaW5nX0R1cFRvV2lkZShmaWxlUGF0aCk7CisgIEZJTEUqIGZpbGUgPSBfd2ZvcGVuKHdwYXRoLCBMInJiIik7CisgIGZyZWUod3BhdGgpOworI2Vsc2UKKyAgRklMRSogZmlsZSA9IGZvcGVuKGZpbGVQYXRoLCAiciIpOworI2VuZGlmCisgIGlmICghZmlsZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBuZXdFbnRyeSgpOworICB5eXNjYW5fdCBzY2FubmVyOworICBjbUdjY0RlcGZpbGVfeXlsZXhfaW5pdCgmc2Nhbm5lcik7CisgIGNtR2NjRGVwZmlsZV95eXNldF9leHRyYSh0aGlzLCBzY2FubmVyKTsKKyAgY21HY2NEZXBmaWxlX3l5cmVzdGFydChmaWxlLCBzY2FubmVyKTsKKyAgY21HY2NEZXBmaWxlX3l5bGV4KHNjYW5uZXIpOworICBjbUdjY0RlcGZpbGVfeXlsZXhfZGVzdHJveShzY2FubmVyKTsKKyAgc2FuaXRpemVDb250ZW50KCk7CisgIGZjbG9zZShmaWxlKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXI6Om5ld0VudHJ5KCkKK3sKKyAgdGhpcy0+SGVscGVyU3RhdGUgPSBTdGF0ZTo6UnVsZTsKKyAgdGhpcy0+Q29udGVudC5lbXBsYWNlX2JhY2soKTsKKyAgbmV3UnVsZSgpOworfQorCit2b2lkIGNtR2NjRGVwZmlsZUxleGVySGVscGVyOjpuZXdSdWxlKCkKK3sKKyAgYXV0byYgZW50cnkgPSB0aGlzLT5Db250ZW50LmJhY2soKTsKKyAgaWYgKGVudHJ5LnJ1bGVzLmVtcHR5KCkgfHwgIWVudHJ5LnJ1bGVzLmJhY2soKS5lbXB0eSgpKSB7CisgICAgZW50cnkucnVsZXMuZW1wbGFjZV9iYWNrKCk7CisgIH0KK30KKwordm9pZCBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcjo6bmV3RGVwZW5kZW5jeSgpCit7CisgIC8vIHByaW50ZigiTkVXIERFUFxuIik7CisgIHRoaXMtPkhlbHBlclN0YXRlID0gU3RhdGU6OkRlcGVuZGVuY3k7CisgIGlmICh0aGlzLT5Db250ZW50LmJhY2soKS5wYXRocy5lbXB0eSgpIHx8CisgICAgICAhdGhpcy0+Q29udGVudC5iYWNrKCkucGF0aHMuYmFjaygpLmVtcHR5KCkpIHsKKyAgICB0aGlzLT5Db250ZW50LmJhY2soKS5wYXRocy5lbXBsYWNlX2JhY2soKTsKKyAgfQorfQorCit2b2lkIGNtR2NjRGVwZmlsZUxleGVySGVscGVyOjpuZXdSdWxlT3JEZXBlbmRlbmN5KCkKK3sKKyAgaWYgKHRoaXMtPkhlbHBlclN0YXRlID09IFN0YXRlOjpSdWxlKSB7CisgICAgbmV3UnVsZSgpOworICB9IGVsc2UgeworICAgIG5ld0RlcGVuZGVuY3koKTsKKyAgfQorfQorCit2b2lkIGNtR2NjRGVwZmlsZUxleGVySGVscGVyOjphZGRUb0N1cnJlbnRQYXRoKGNvbnN0IGNoYXIqIHMpCit7CisgIGlmICh0aGlzLT5Db250ZW50LmVtcHR5KCkpIHsKKyAgICByZXR1cm47CisgIH0KKyAgY21HY2NTdHlsZURlcGVuZGVuY3kqIGRlcCA9ICZ0aGlzLT5Db250ZW50LmJhY2soKTsKKyAgc3RkOjpzdHJpbmcqIGRzdCA9IG51bGxwdHI7CisgIHN3aXRjaCAodGhpcy0+SGVscGVyU3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpSdWxlOiB7CisgICAgICBpZiAoZGVwLT5ydWxlcy5lbXB0eSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGRzdCA9ICZkZXAtPnJ1bGVzLmJhY2soKTsKKyAgICB9IGJyZWFrOworICAgIGNhc2UgU3RhdGU6OkRlcGVuZGVuY3k6IHsKKyAgICAgIGlmIChkZXAtPnBhdGhzLmVtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgZHN0ID0gJmRlcC0+cGF0aHMuYmFjaygpOworICAgIH0gYnJlYWs7CisgIH0KKyAgZHN0LT5hcHBlbmQocyk7Cit9CisKK3ZvaWQgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXI6OnNhbml0aXplQ29udGVudCgpCit7CisgIGZvciAoYXV0byBpdCA9IHRoaXMtPkNvbnRlbnQuYmVnaW4oKTsgaXQgIT0gdGhpcy0+Q29udGVudC5lbmQoKTspIHsKKyAgICAvLyBSZW1vdmUgZW1wdHkgcnVsZXMKKyAgICBmb3IgKGF1dG8gcml0ID0gaXQtPnJ1bGVzLmJlZ2luKCk7IHJpdCAhPSBpdC0+cnVsZXMuZW5kKCk7KSB7CisgICAgICBpZiAocml0LT5lbXB0eSgpKSB7CisgICAgICAgIHJpdCA9IGl0LT5ydWxlcy5lcmFzZShyaXQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgKytyaXQ7CisgICAgICB9CisgICAgfQorICAgIC8vIFJlbW92ZSB0aGUgZW50cnkgaWYgcnVsZXMgYXJlIGVtcHR5CisgICAgaWYgKGl0LT5ydWxlcy5lbXB0eSgpKSB7CisgICAgICBpdCA9IHRoaXMtPkNvbnRlbnQuZXJhc2UoaXQpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBSZW1vdmUgZW1wdHkgcGF0aHMKKyAgICAgIGZvciAoYXV0byBwaXQgPSBpdC0+cGF0aHMuYmVnaW4oKTsgcGl0ICE9IGl0LT5wYXRocy5lbmQoKTspIHsKKyAgICAgICAgaWYgKHBpdC0+ZW1wdHkoKSkgeworICAgICAgICAgIHBpdCA9IGl0LT5wYXRocy5lcmFzZShwaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICsrcGl0OworICAgICAgICB9CisgICAgICB9CisgICAgICArK2l0OworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2NjRGVwZmlsZUxleGVySGVscGVyLmggYi9Tb3VyY2UvY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmIyZmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtR2NjRGVwZmlsZUxleGVySGVscGVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcl9oCisjZGVmaW5lIGNtR2NjRGVwZmlsZUxleGVySGVscGVyX2gKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlIDxjbUdjY0RlcGZpbGVSZWFkZXJUeXBlcy5oPgorCitjbGFzcyBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcgoreworcHVibGljOgorICBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcigpID0gZGVmYXVsdDsKKworICBib29sIHJlYWRGaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoKTsKKyAgY21HY2NEZXBmaWxlQ29udGVudCBleHRyYWN0Q29udGVudCgpICYmIHsgcmV0dXJuIHN0ZDo6bW92ZSh0aGlzLT5Db250ZW50KTsgfQorCisgIC8vIEZ1bmN0aW9ucyBjYWxsZWQgYnkgdGhlIGxleGVyCisgIHZvaWQgbmV3RW50cnkoKTsKKyAgdm9pZCBuZXdSdWxlKCk7CisgIHZvaWQgbmV3RGVwZW5kZW5jeSgpOworICB2b2lkIG5ld1J1bGVPckRlcGVuZGVuY3koKTsKKyAgdm9pZCBhZGRUb0N1cnJlbnRQYXRoKGNvbnN0IGNoYXIqIHMpOworCitwcml2YXRlOgorICB2b2lkIHNhbml0aXplQ29udGVudCgpOworCisgIGNtR2NjRGVwZmlsZUNvbnRlbnQgQ29udGVudDsKKworICBlbnVtIGNsYXNzIFN0YXRlCisgIHsKKyAgICBSdWxlLAorICAgIERlcGVuZGVuY3kKKyAgfTsKKyAgU3RhdGUgSGVscGVyU3RhdGUgPSBTdGF0ZTo6UnVsZTsKK307CisKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSBjbUdjY0RlcGZpbGVMZXhlckhlbHBlcioKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HY2NEZXBmaWxlUmVhZGVyLmN4eCBiL1NvdXJjZS9jbUdjY0RlcGZpbGVSZWFkZXIuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzBlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21HY2NEZXBmaWxlUmVhZGVyLmN4eApAQCAtMCwwICsxLDE4IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaW5jbHVkZSAiY21HY2NEZXBmaWxlUmVhZGVyLmgiCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCisjaW5jbHVkZSAiY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIuaCIKKworY21HY2NEZXBmaWxlQ29udGVudCBjbVJlYWRHY2NEZXBmaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoKQoreworICBjbUdjY0RlcGZpbGVDb250ZW50IHJlc3VsdDsKKyAgY21HY2NEZXBmaWxlTGV4ZXJIZWxwZXIgaGVscGVyOworICBpZiAoaGVscGVyLnJlYWRGaWxlKGZpbGVQYXRoKSkgeworICAgIHJlc3VsdCA9IHN0ZDo6bW92ZShoZWxwZXIpLmV4dHJhY3RDb250ZW50KCk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdjY0RlcGZpbGVSZWFkZXIuaCBiL1NvdXJjZS9jbUdjY0RlcGZpbGVSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzEzMDEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtR2NjRGVwZmlsZVJlYWRlci5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21HY2NEZXBmaWxlUmVhZGVyX2gKKyNkZWZpbmUgY21HY2NEZXBmaWxlUmVhZGVyX2gKKworI2luY2x1ZGUgImNtR2NjRGVwZmlsZVJlYWRlclR5cGVzLmgiCisKK2NtR2NjRGVwZmlsZUNvbnRlbnQgY21SZWFkR2NjRGVwZmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2NjRGVwZmlsZVJlYWRlclR5cGVzLmggYi9Tb3VyY2UvY21HY2NEZXBmaWxlUmVhZGVyVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjE1YzczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtR2NjRGVwZmlsZVJlYWRlclR5cGVzLmgKQEAgLTAsMCArMSwxNyBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbUdjY0RlcGZpbGVSZWFkZXJUeXBlc19oCisjZGVmaW5lIGNtR2NjRGVwZmlsZVJlYWRlclR5cGVzX2gKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK3N0cnVjdCBjbUdjY1N0eWxlRGVwZW5kZW5jeQoreworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcnVsZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXRoczsKK307CisKK3VzaW5nIGNtR2NjRGVwZmlsZUNvbnRlbnQgPSBzdGQ6OnZlY3RvcjxjbUdjY1N0eWxlRGVwZW5kZW5jeT47CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdGVkRmlsZVN0cmVhbS5jeHggYi9Tb3VyY2UvY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmN4eAppbmRleCAyYWYwNGI2Li4zNDVmMGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmN4eAorKysgYi9Tb3VyY2UvY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmN4eApAQCAtOCw4ICs4LDkgQEAKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisjICBpbmNsdWRlIDxjbTNwL3psaWIuaD4KKwogIyAgaW5jbHVkZSAiY21fY29kZWN2dC5oeHgiCi0jICBpbmNsdWRlICJjbV96bGliLmgiCiAjZW5kaWYKIAogY21HZW5lcmF0ZWRGaWxlU3RyZWFtOjpjbUdlbmVyYXRlZEZpbGVTdHJlYW0oRW5jb2RpbmcgZW5jb2RpbmcpCkBAIC0xMjEsMTAgKzEyMiwxNyBAQAogICAvLyBDcmVhdGUgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlLgogICB0aGlzLT5UZW1wTmFtZSA9IG5hbWU7CiAjaWYgZGVmaW5lZChfX1ZNUykKLSAgdGhpcy0+VGVtcE5hbWUgKz0gIl90bXAiOworICB0aGlzLT5UZW1wTmFtZSArPSAiXyI7CiAjZWxzZQotICB0aGlzLT5UZW1wTmFtZSArPSAiLnRtcCI7CisgIHRoaXMtPlRlbXBOYW1lICs9ICIuIjsKICNlbmRpZgorICBpZiAoIXRoaXMtPlRlbXBFeHQuZW1wdHkoKSkgeworICAgIHRoaXMtPlRlbXBOYW1lICs9IHRoaXMtPlRlbXBFeHQ7CisgIH0gZWxzZSB7CisgICAgY2hhciBidWZbNjRdOworICAgIHNwcmludGYoYnVmLCAidG1wJTA1eCIsIGNtU3lzdGVtVG9vbHM6OlJhbmRvbVNlZWQoKSAmIDB4RkZGRkYpOworICAgIHRoaXMtPlRlbXBOYW1lICs9IGJ1ZjsKKyAgfQogCiAgIC8vIE1ha2Ugc3VyZSB0aGUgdGVtcG9yYXJ5IGZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgaXMgbm90IHByZXNlbnQuCiAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUodGhpcy0+VGVtcE5hbWUpOwpAQCAtMTgwLDYgKzE4OCw3IEBACiAgIH0KICAgRklMRSogaWZzID0gY21zeXM6OlN5c3RlbVRvb2xzOjpGb3BlbihvbGRuYW1lLCAiciIpOwogICBpZiAoIWlmcykgeworICAgIGd6Y2xvc2UoZ2YpOwogICAgIHJldHVybiAwOwogICB9CiAgIHNpemVfdCByZXM7CkBAIC0yMTQsMyArMjIzLDggQEAKIHsKICAgdGhpcy0+TmFtZSA9IGZuYW1lOwogfQorCit2b2lkIGNtR2VuZXJhdGVkRmlsZVN0cmVhbTo6U2V0VGVtcEV4dChzdGQ6OnN0cmluZyBjb25zdCYgZXh0KQoreworICB0aGlzLT5UZW1wRXh0ID0gZXh0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIGIvU291cmNlL2NtR2VuZXJhdGVkRmlsZVN0cmVhbS5oCmluZGV4IGE5MDg4YWMuLjNkZWUxNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRlZEZpbGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgKQEAgLTQzLDYgKzQzLDkgQEAKICAgLy8gVGhlIG5hbWUgb2YgdGhlIGZpbmFsIGRlc3RpbmF0aW9uIGZpbGUgZm9yIHRoZSBvdXRwdXQuCiAgIHN0ZDo6c3RyaW5nIE5hbWU7CiAKKyAgLy8gVGhlIGV4dGVuc2lvbiBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUuCisgIHN0ZDo6c3RyaW5nIFRlbXBFeHQ7CisKICAgLy8gVGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlLgogICBzdGQ6OnN0cmluZyBUZW1wTmFtZTsKIApAQCAtMTM4LDYgKzE0MSwxMiBAQAogICAgKiB0aGUgb3V0cHV0IGZpbGUgdG8gYmUgY2hhbmdlZCBkdXJpbmcgdGhlIHVzZSBvZiBjbUdlbmVyYXRlZEZpbGVTdHJlYW0uCiAgICAqLwogICB2b2lkIFNldE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKTsKKworICAvKioKKyAgICogU2V0IHNldCBhIGN1c3RvbSB0ZW1wb3JhcnkgZmlsZSBleHRlbnNpb24gdXNlZCB3aXRoICdPcGVuJy4KKyAgICogVGhpcyBkb2VzIG5vdCB3b3JrIGlmIHRoZSBmaWxlIHdhcyBvcGVuZWQgYnkgdGhlIGNvbnN0cnVjdG9yLgorICAgKi8KKyAgdm9pZCBTZXRUZW1wRXh0KHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uLmN4eCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uY3h4CmluZGV4IGI3ZjdkMWQuLjg0MGY1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uY3h4CisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uY3h4CkBAIC04LDcgKzgsNiBAQAogCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IuaCIKQEAgLTIyLDYgKzIxLDggQEAKIHsKIH0KIAorY21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb246On5jbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbigpID0gZGVmYXVsdDsKKwogY21HZW5lcmF0b3JFeHByZXNzaW9uOjp+Y21HZW5lcmF0b3JFeHByZXNzaW9uKCkgPSBkZWZhdWx0OwogCiBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6UGFyc2UoCkBAIC0zMSwxMiArMzIsNiBAQAogICAgIG5ldyBjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbih0aGlzLT5CYWNrdHJhY2UsIHN0ZDo6bW92ZShpbnB1dCkpKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjbUdlbmVyYXRvckV4cHJlc3Npb246OlBhcnNlKAotICBjb25zdCBjaGFyKiBpbnB1dCkgY29uc3QKLXsKLSAgcmV0dXJuIHRoaXMtPlBhcnNlKHN0ZDo6c3RyaW5nKGlucHV0ID8gaW5wdXQgOiAiIikpOwotfQotCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAogICBzdGQ6OnN0cmluZyBpbnB1dCwgY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0LApAQCAtNTEsMTcgKzQ2LDYgQEAKICAgcmV0dXJuIGlucHV0OwogfQogCi1zdGQ6OnN0cmluZyBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAotICBjb25zdCBjaGFyKiBpbnB1dCwgY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0LAotICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBkYWdDaGVja2VyLAotICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogY3VycmVudFRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmd1YWdlKQotewotICByZXR1cm4gaW5wdXQgPyBFdmFsdWF0ZShzdGQ6OnN0cmluZyhpbnB1dCksIGxnLCBjb25maWcsIGhlYWRUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhZ0NoZWNrZXIsIGN1cnJlbnRUYXJnZXQsIGxhbmd1YWdlKQotICAgICAgICAgICAgICAgOiAiIjsKLX0KLQogY29uc3Qgc3RkOjpzdHJpbmcmIGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKICAgY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBoZWFkVGFyZ2V0LApAQCAtODYsNyArNzAsNyBAQAogCiAgIHRoaXMtPk91dHB1dC5jbGVhcigpOwogCi0gIGZvciAoY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKiBpdCA6IHRoaXMtPkV2YWx1YXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBpdCA6IHRoaXMtPkV2YWx1YXRvcnMpIHsKICAgICB0aGlzLT5PdXRwdXQgKz0gaXQtPkV2YWx1YXRlKCZjb250ZXh0LCBkYWdDaGVja2VyKTsKIAogICAgIHRoaXMtPlNlZW5UYXJnZXRQcm9wZXJ0aWVzLmluc2VydChjb250ZXh0LlNlZW5UYXJnZXRQcm9wZXJ0aWVzLmNiZWdpbigpLApAQCAtMTAyLDYgKzg2LDggQEAKICAgaWYgKCFjb250ZXh0LkhhZEVycm9yKSB7CiAgICAgdGhpcy0+SGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IGNvbnRleHQuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbjsKICAgICB0aGlzLT5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uID0gY29udGV4dC5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uOworICAgIHRoaXMtPkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9CisgICAgICBjb250ZXh0LkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbjsKICAgICB0aGlzLT5Tb3VyY2VTZW5zaXRpdmVUYXJnZXRzID0gY29udGV4dC5Tb3VyY2VTZW5zaXRpdmVUYXJnZXRzOwogICB9CiAKQEAgLTExOCw2ICsxMDQsNyBAQAogICAsIFF1aWV0KGZhbHNlKQogICAsIEhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24oZmFsc2UpCiAgICwgSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbihmYWxzZSkKKyAgLCBIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oZmFsc2UpCiB7CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkxleGVyIGw7CiAgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuPiB0b2tlbnMgPSBsLlRva2VuaXplKHRoaXMtPklucHV0KTsKQEAgLTEyOSwxMSArMTE2LDYgQEAKICAgfQogfQogCi1jbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbjo6fmNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uKCkKLXsKLSAgY21EZWxldGVBbGwodGhpcy0+RXZhbHVhdG9ycyk7Ci19Ci0KIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6U3RyaXBFbXB0eUxpc3RFbGVtZW50cygKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KQogewpAQCAtMzg1LDYgKzM2NywyMCBAQAogICByZXR1cm4gdGFyZ2V0TmFtZVZhbGlkYXRvci5maW5kKGlucHV0KTsKIH0KIAordm9pZCBjbUdlbmVyYXRvckV4cHJlc3Npb246OlJlcGxhY2VJbnN0YWxsUHJlZml4KAorICBzdGQ6OnN0cmluZyYgaW5wdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXBsYWNlbWVudCkKK3sKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSAwOworICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGxhc3RQb3MgPSBwb3M7CisKKyAgd2hpbGUgKChwb3MgPSBpbnB1dC5maW5kKCIkPElOU1RBTExfUFJFRklYPiIsIGxhc3RQb3MpKSAhPQorICAgICAgICAgc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZFBvcyA9IHBvcyArIHNpemVvZigiJDxJTlNUQUxMX1BSRUZJWD4iKSAtIDE7CisgICAgaW5wdXQucmVwbGFjZShwb3MsIGVuZFBvcyAtIHBvcywgcmVwbGFjZW1lbnQpOworICAgIGxhc3RQb3MgPSBlbmRQb3M7CisgIH0KK30KKwogdm9pZCBjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbjo6R2V0TWF4TGFuZ3VhZ2VTdGFuZGFyZCgKICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIHRndCwgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiYgbWFwcGluZykKIHsKQEAgLTQxMCw5ICs0MDYsMyBAQAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCB0aGlzLT5Db25maWcsIHRoaXMtPkhlYWRUYXJnZXQsICZkYWdDaGVja2VyLCBudWxscHRyLAogICAgIHRoaXMtPkxhbmd1YWdlKTsKIH0KLQotY29uc3Qgc3RkOjpzdHJpbmcmIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyOjpFdmFsdWF0ZSgKLSAgY29uc3QgY2hhciogZXhwcmVzc2lvbiwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5KQotewotICByZXR1cm4gdGhpcy0+RXZhbHVhdGUoc3RkOjpzdHJpbmcoZXhwcmVzc2lvbiA/IGV4cHJlc3Npb24gOiAiIiksIHByb3BlcnR5KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uaCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb24uaAppbmRleCA0YmQxYzlmLi4wOWQ4Yjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbi5oCkBAIC00Miw4ICs0Miw2IEBACiAKICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBQYXJzZSgKICAgICBzdGQ6OnN0cmluZyBpbnB1dCkgY29uc3Q7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gUGFyc2UoCi0gICAgY29uc3QgY2hhciogaW5wdXQpIGNvbnN0OwogCiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBFdmFsdWF0ZSgKICAgICBzdGQ6OnN0cmluZyBpbnB1dCwgY21Mb2NhbEdlbmVyYXRvciogbGcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCkBAIC01MSwxMiArNDksNiBAQAogICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIgPSBudWxscHRyLAogICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBjdXJyZW50VGFyZ2V0ID0gbnVsbHB0ciwKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZ3VhZ2UgPSBzdGQ6OnN0cmluZygpKTsKLSAgc3RhdGljIHN0ZDo6c3RyaW5nIEV2YWx1YXRlKAotICAgIGNvbnN0IGNoYXIqIGlucHV0LCBjbUxvY2FsR2VuZXJhdG9yKiBsZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKLSAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCA9IG51bGxwdHIsCi0gICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlciA9IG51bGxwdHIsCi0gICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGN1cnJlbnRUYXJnZXQgPSBudWxscHRyLAotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSA9IHN0ZDo6c3RyaW5nKCkpOwogCiAgIGVudW0gUHJlcHJvY2Vzc0NvbnRleHQKICAgewpAQCAtODcsNiArNzksOSBAQAogICAgIHJldHVybiBpbnB1dCAhPSBudWxscHRyICYmIGlucHV0WzBdID09ICckJyAmJiBpbnB1dFsxXSA9PSAnPCc7CiAgIH0KIAorICBzdGF0aWMgdm9pZCBSZXBsYWNlSW5zdGFsbFByZWZpeChzdGQ6OnN0cmluZyYgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXBsYWNlbWVudCk7CisKIHByaXZhdGU6CiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgQmFja3RyYWNlOwogfTsKQEAgLTEzNCw2ICsxMjksMTAgQEAKICAgewogICAgIHJldHVybiB0aGlzLT5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uOwogICB9CisgIGJvb2wgR2V0SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKCkgY29uc3QKKyAgeworICAgIHJldHVybiB0aGlzLT5IYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb247CisgIH0KICAgc3RkOjpzZXQ8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqPiBHZXRTb3VyY2VTZW5zaXRpdmVUYXJnZXRzKCkgY29uc3QKICAgewogICAgIHJldHVybiB0aGlzLT5Tb3VyY2VTZW5zaXRpdmVUYXJnZXRzOwpAQCAtMTYwLDcgKzE1OSw3IEBACiAgIGZyaWVuZCBjbGFzcyBjbUdlbmVyYXRvckV4cHJlc3Npb247CiAKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBCYWNrdHJhY2U7Ci0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+IEV2YWx1YXRvcnM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3I+PiBFdmFsdWF0b3JzOwogICBjb25zdCBzdGQ6OnN0cmluZyBJbnB1dDsKICAgYm9vbCBOZWVkc0V2YWx1YXRpb247CiAgIGJvb2wgRXZhbHVhdGVGb3JCdWlsZHN5c3RlbTsKQEAgLTE3NSw2ICsxNzQsNyBAQAogICBtdXRhYmxlIHN0ZDo6c3RyaW5nIE91dHB1dDsKICAgbXV0YWJsZSBib29sIEhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb247CiAgIG11dGFibGUgYm9vbCBIYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uOworICBtdXRhYmxlIGJvb2wgSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uOwogICBtdXRhYmxlIHN0ZDo6c2V0PGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0Kj4gU291cmNlU2Vuc2l0aXZlVGFyZ2V0czsKIH07CiAKQEAgLTE5OSw4ICsxOTksNiBAQAogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBFdmFsdWF0ZShzdGQ6OnN0cmluZyBleHByZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5KTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIEV2YWx1YXRlKGNvbnN0IGNoYXIqIGV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHkpOwogCiBwcm90ZWN0ZWQ6CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBHZW5lcmF0b3JFeHByZXNzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuY3h4IGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuY3h4CmluZGV4IDZkOTczMzEuLjQyY2JlMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0LmN4eAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5jeHgKQEAgLTE5LDYgKzE5LDcgQEAKICAgLCBIYWRFcnJvcihmYWxzZSkKICAgLCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uKGZhbHNlKQogICAsIEhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24oZmFsc2UpCisgICwgSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKGZhbHNlKQogICAsIEV2YWx1YXRlRm9yQnVpbGRzeXN0ZW0oZXZhbHVhdGVGb3JCdWlsZHN5c3RlbSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0LmggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oCmluZGV4IDQ3MDlmYTAuLmJjZWZmMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0LmgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaApAQCAtNDAsNiArNDAsNyBAQAogICBib29sIEhhZEVycm9yOwogICBib29sIEhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb247CiAgIGJvb2wgSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbjsKKyAgYm9vbCBIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb247CiAgIGJvb2wgRXZhbHVhdGVGb3JCdWlsZHN5c3RlbTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyLmN4eCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyLmN4eAppbmRleCA2NDNiYTM0Li5lMjIzZjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlci5jeHgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIuY3h4CkBAIC02LDYgKzYsOSBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvci5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCkBAIC00NCwxMiArNDcsNyBAQAogCiB2b2lkIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkluaXRpYWxpemUoKQogewotICBjb25zdCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiB0b3AgPSB0aGlzOwotICBjb25zdCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBwID0gdGhpcy0+UGFyZW50OwotICB3aGlsZSAocCkgewotICAgIHRvcCA9IHA7Ci0gICAgcCA9IHAtPlBhcmVudDsKLSAgfQorICBjb25zdCBhdXRvKiB0b3AgPSB0aGlzLT5Ub3AoKTsKICAgdGhpcy0+Q2hlY2tSZXN1bHQgPSB0aGlzLT5DaGVja0dyYXBoKCk7CiAKICNkZWZpbmUgVEVTVF9UUkFOU0lUSVZFX1BST1BFUlRZX01FVEhPRChNRVRIT0QpIHRvcC0+TUVUSE9EKCkgfHwKQEAgLTE0MCwzOCArMTM4LDY1IEBACiAgIHJldHVybiBEQUc7CiB9CiAKLWJvb2wgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6R2V0VHJhbnNpdGl2ZVByb3BlcnRpZXNPbmx5KCkKK2Jvb2wgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6R2V0VHJhbnNpdGl2ZVByb3BlcnRpZXNPbmx5KCkgY29uc3QKIHsKLSAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogdG9wID0gdGhpczsKLSAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogcGFyZW50ID0gdGhpcy0+UGFyZW50OwotICB3aGlsZSAocGFyZW50KSB7Ci0gICAgdG9wID0gcGFyZW50OwotICAgIHBhcmVudCA9IHBhcmVudC0+UGFyZW50OwotICB9Ci0KLSAgcmV0dXJuIHRvcC0+VHJhbnNpdGl2ZVByb3BlcnRpZXNPbmx5OworICByZXR1cm4gdGhpcy0+VG9wKCktPlRyYW5zaXRpdmVQcm9wZXJ0aWVzT25seTsKIH0KIAotYm9vbCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpFdmFsdWF0aW5nR2VuZXhFeHByZXNzaW9uKCkKK2Jvb2wgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6RXZhbHVhdGluZ0dlbmV4RXhwcmVzc2lvbigpIGNvbnN0CiB7Ci0gIHJldHVybiB0aGlzLT5Qcm9wZXJ0eS5maW5kKCJUQVJHRVRfR0VORVhfRVZBTDoiKSA9PSAwIHx8Ci0gICAgdGhpcy0+UHJvcGVydHkuZmluZCgiR0VORVhfRVZBTDoiLCAwKSA9PSAwOworICByZXR1cm4gY21IYXNMaXRlcmFsUHJlZml4KHRoaXMtPlByb3BlcnR5LCAiVEFSR0VUX0dFTkVYX0VWQUw6IikgfHwKKyAgICBjbUhhc0xpdGVyYWxQcmVmaXgodGhpcy0+UHJvcGVydHksICJHRU5FWF9FVkFMOiIpOwogfQogCi1ib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkV2YWx1YXRpbmdQSUNFeHByZXNzaW9uKCkKK2Jvb2wgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6RXZhbHVhdGluZ1BJQ0V4cHJlc3Npb24oKSBjb25zdAogewotICBjb25zdCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiB0b3AgPSB0aGlzOwotICBjb25zdCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBwYXJlbnQgPSB0aGlzLT5QYXJlbnQ7Ci0gIHdoaWxlIChwYXJlbnQpIHsKLSAgICB0b3AgPSBwYXJlbnQ7Ci0gICAgcGFyZW50ID0gcGFyZW50LT5QYXJlbnQ7Ci0gIH0KKyAgcmV0dXJuIHRoaXMtPlRvcCgpLT5Qcm9wZXJ0eSA9PSAiSU5URVJGQUNFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUiOworfQogCi0gIHJldHVybiB0b3AtPlByb3BlcnR5ID09ICJJTlRFUkZBQ0VfUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSI7Citib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkV2YWx1YXRpbmdDb21waWxlRXhwcmVzc2lvbigpIGNvbnN0Cit7CisgIGNtOjpzdHJpbmdfdmlldyBwcm9wZXJ0eSh0aGlzLT5Ub3AoKS0+UHJvcGVydHkpOworCisgIHJldHVybiBwcm9wZXJ0eSA9PSAiSU5DTFVERV9ESVJFQ1RPUklFUyJfcyB8fAorICAgIHByb3BlcnR5ID09ICJDT01QSUxFX0RFRklOSVRJT05TIl9zIHx8IHByb3BlcnR5ID09ICJDT01QSUxFX09QVElPTlMiX3M7Cit9CisKK2Jvb2wgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6RXZhbHVhdGluZ0xpbmtFeHByZXNzaW9uKCkgY29uc3QKK3sKKyAgY206OnN0cmluZ192aWV3IHByb3BlcnR5KHRoaXMtPlRvcCgpLT5Qcm9wZXJ0eSk7CisKKyAgcmV0dXJuIHByb3BlcnR5ID09ICJMSU5LX0RJUkVDVE9SSUVTIl9zIHx8IHByb3BlcnR5ID09ICJMSU5LX09QVElPTlMiX3MgfHwKKyAgICBwcm9wZXJ0eSA9PSAiTElOS19ERVBFTkRTIl9zOworfQorCitib29sIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkV2YWx1YXRpbmdMaW5rT3B0aW9uc0V4cHJlc3Npb24oKSBjb25zdAoreworICBjbTo6c3RyaW5nX3ZpZXcgcHJvcGVydHkodGhpcy0+VG9wKCktPlByb3BlcnR5KTsKKworICByZXR1cm4gcHJvcGVydHkgPT0gIkxJTktfT1BUSU9OUyJfczsKIH0KIAogYm9vbCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpFdmFsdWF0aW5nTGlua0xpYnJhcmllcygKLSAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCkKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCkgY29uc3QKK3sKKyAgY29uc3QgYXV0byogdG9wID0gdGhpcy0+VG9wKCk7CisKKyAgY206OnN0cmluZ192aWV3IHByb3AodG9wLT5Qcm9wZXJ0eSk7CisKKyAgaWYgKHRndCkgeworICAgIHJldHVybiB0b3AtPlRhcmdldCA9PSB0Z3QgJiYgcHJvcCA9PSAiTElOS19MSUJSQVJJRVMiX3M7CisgIH0KKworICByZXR1cm4gcHJvcCA9PSAiTElOS19MSUJSQVJJRVMiX3MgfHwgcHJvcCA9PSAiTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIl9zIHx8CisgICAgcHJvcCA9PSAiSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIl9zIHx8CisgICAgY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVNfIikgfHwKKyAgICBjbUhhc0xpdGVyYWxQcmVmaXgocHJvcCwgIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xJQlJBUklFU18iKSB8fAorICAgIHByb3AgPT0gIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyJfczsKK30KKworY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciBjb25zdCogY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6VG9wKCkKKyAgY29uc3QKIHsKICAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogdG9wID0gdGhpczsKICAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogcGFyZW50ID0gdGhpcy0+UGFyZW50OwpAQCAtMTc5LDMwICsyMDQsMTIgQEAKICAgICB0b3AgPSBwYXJlbnQ7CiAgICAgcGFyZW50ID0gcGFyZW50LT5QYXJlbnQ7CiAgIH0KLQotICBjb25zdCBjaGFyKiBwcm9wID0gdG9wLT5Qcm9wZXJ0eS5jX3N0cigpOwotCi0gIGlmICh0Z3QpIHsKLSAgICByZXR1cm4gdG9wLT5UYXJnZXQgPT0gdGd0ICYmIHN0cmNtcChwcm9wLCAiTElOS19MSUJSQVJJRVMiKSA9PSAwOwotICB9Ci0KLSAgcmV0dXJuIChzdHJjbXAocHJvcCwgIkxJTktfTElCUkFSSUVTIikgPT0gMCB8fAotICAgICAgICAgIHN0cmNtcChwcm9wLCAiTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIikgPT0gMCB8fAotICAgICAgICAgIHN0cmNtcChwcm9wLCAiSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIikgPT0gMCB8fAotICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChwcm9wLCAiTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTXyIpIHx8Ci0gICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVNfIikpIHx8Ci0gICAgc3RyY21wKHByb3AsICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiKSA9PSAwOworICByZXR1cm4gdG9wOwogfQogCiBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6VG9wVGFyZ2V0KCkgY29uc3QKIHsKLSAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogdG9wID0gdGhpczsKLSAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogcGFyZW50ID0gdGhpcy0+UGFyZW50OwotICB3aGlsZSAocGFyZW50KSB7Ci0gICAgdG9wID0gcGFyZW50OwotICAgIHBhcmVudCA9IHBhcmVudC0+UGFyZW50OwotICB9Ci0gIHJldHVybiB0b3AtPlRhcmdldDsKKyAgcmV0dXJuIHRoaXMtPlRvcCgpLT5UYXJnZXQ7CiB9CiAKIGVudW0gVHJhbnNpdGl2ZVByb3BlcnR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlci5oIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIuaAppbmRleCBmMmM0OWJiLi5hYzIzMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyLmgKQEAgLTY2LDkgKzY2LDEzIEBACiAgIHZvaWQgUmVwb3J0RXJyb3IoY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXhwcik7CiAKLSAgYm9vbCBFdmFsdWF0aW5nR2VuZXhFeHByZXNzaW9uKCk7Ci0gIGJvb2wgRXZhbHVhdGluZ1BJQ0V4cHJlc3Npb24oKTsKLSAgYm9vbCBFdmFsdWF0aW5nTGlua0xpYnJhcmllcyhjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGd0ID0gbnVsbHB0cik7CisgIGJvb2wgRXZhbHVhdGluZ0dlbmV4RXhwcmVzc2lvbigpIGNvbnN0OworICBib29sIEV2YWx1YXRpbmdQSUNFeHByZXNzaW9uKCkgY29uc3Q7CisgIGJvb2wgRXZhbHVhdGluZ0NvbXBpbGVFeHByZXNzaW9uKCkgY29uc3Q7CisgIGJvb2wgRXZhbHVhdGluZ0xpbmtFeHByZXNzaW9uKCkgY29uc3Q7CisgIGJvb2wgRXZhbHVhdGluZ0xpbmtPcHRpb25zRXhwcmVzc2lvbigpIGNvbnN0OworCisgIGJvb2wgRXZhbHVhdGluZ0xpbmtMaWJyYXJpZXMoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCA9IG51bGxwdHIpIGNvbnN0OwogCiAjZGVmaW5lIERFQ0xBUkVfVFJBTlNJVElWRV9QUk9QRVJUWV9NRVRIT0QoTUVUSE9EKSBib29sIE1FVEhPRCgpIGNvbnN0OwogCkBAIC03Niw5ICs4MCwxMCBAQAogCiAjdW5kZWYgREVDTEFSRV9UUkFOU0lUSVZFX1BST1BFUlRZX01FVEhPRAogCi0gIGJvb2wgR2V0VHJhbnNpdGl2ZVByb3BlcnRpZXNPbmx5KCk7CisgIGJvb2wgR2V0VHJhbnNpdGl2ZVByb3BlcnRpZXNPbmx5KCkgY29uc3Q7CiAgIHZvaWQgU2V0VHJhbnNpdGl2ZVByb3BlcnRpZXNPbmx5KCkgeyB0aGlzLT5UcmFuc2l0aXZlUHJvcGVydGllc09ubHkgPSB0cnVlOyB9CiAKKyAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciBjb25zdCogVG9wKCkgY29uc3Q7CiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBUb3BUYXJnZXQoKSBjb25zdDsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0aW9uRmlsZS5jeHggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUuY3h4CmluZGV4IDllODcwN2QuLjExMDdhZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0aW9uRmlsZS5jeHgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlLmN4eApAQCAtMTU3LDEyICsxNTcsOCBAQAogCiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gb3V0cHV0RmlsZXM7CiAKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFsbENvbmZpZ3M7Ci0gIGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRDb25maWd1cmF0aW9ucyhhbGxDb25maWdzKTsKLQotICBpZiAoYWxsQ29uZmlncy5lbXB0eSgpKSB7Ci0gICAgYWxsQ29uZmlncy5lbXBsYWNlX2JhY2soKTsKLSAgfQorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYWxsQ29uZmlncyA9CisgICAgbGctPkdldE1ha2VmaWxlKCktPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZW5hYmxlZExhbmd1YWdlczsKICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gbGctPkdldEdsb2JhbEdlbmVyYXRvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvci5jeHggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmN4eAppbmRleCBlMGFlMTcwLi40MTI5YTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmN4eApAQCAtMiwxMCArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IuaCIKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxzc3RyZWFtPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbk5vZGUuaCIKIApAQCAtMTYsNiArMTQsOCBAQAogewogfQogCitHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudDo6fkdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KCkgPSBkZWZhdWx0OworCiBzdGQ6OnN0cmluZyBHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudDo6R2V0T3JpZ2luYWxFeHByZXNzaW9uKCkgY29uc3QKIHsKICAgcmV0dXJuIHN0ZDo6c3RyaW5nKHRoaXMtPlN0YXJ0Q29udGVudCwgdGhpcy0+Q29udGVudExlbmd0aCk7CkBAIC0yNSwxNCArMjUsMTMgQEAKICAgY29uc3QgY21HZW5lcmF0b3JFeHByZXNzaW9uTm9kZSogbm9kZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGlkZW50aWZpZXIsCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+Pjo6Y29uc3RfaXRlcmF0b3IKLSAgICBwaXQpIGNvbnN0CisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3Rvcj46OmNvbnN0X2l0ZXJhdG9yIHBpdCkgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgcmVzdWx0OwogCiAgIGNvbnN0IGF1dG8gcGVuZCA9IHRoaXMtPlBhcmFtQ2hpbGRyZW4uZW5kKCk7CiAgIGZvciAoOyBwaXQgIT0gcGVuZDsgKytwaXQpIHsKLSAgICBmb3IgKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvciogcEV4cHJFdmFsIDogKnBpdCkgeworICAgIGZvciAoYXV0byYgcEV4cHJFdmFsIDogKnBpdCkgewogICAgICAgaWYgKG5vZGUtPlJlcXVpcmVzTGl0ZXJhbElucHV0KCkpIHsKICAgICAgICAgaWYgKHBFeHByRXZhbC0+R2V0VHlwZSgpICE9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcjo6VGV4dCkgewogICAgICAgICAgIHJlcG9ydEVycm9yKGNvbnRleHQsIHRoaXMtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLApAQCAtNjQsOCArNjMsNyBAQAogewogICBzdGQ6OnN0cmluZyBpZGVudGlmaWVyOwogICB7Ci0gICAgZm9yIChjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IqIHBFeHByRXZhbCA6Ci0gICAgICAgICB0aGlzLT5JZGVudGlmaWVyQ2hpbGRyZW4pIHsKKyAgICBmb3IgKGF1dG8mIHBFeHByRXZhbCA6IHRoaXMtPklkZW50aWZpZXJDaGlsZHJlbikgewogICAgICAgaWRlbnRpZmllciArPSBwRXhwckV2YWwtPkV2YWx1YXRlKGNvbnRleHQsIGRhZ0NoZWNrZXIpOwogICAgICAgaWYgKGNvbnRleHQtPkhhZEVycm9yKSB7CiAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpAQCAtMTI2LDcgKzEyNCw3IEBACiAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwogICAgICAgfQogICAgICAgc3RkOjpzdHJpbmcgcGFyYW1ldGVyOwotICAgICAgZm9yIChjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IqIHBFeHByRXZhbCA6ICpwaXQpIHsKKyAgICAgIGZvciAoYXV0byYgcEV4cHJFdmFsIDogKnBpdCkgewogICAgICAgICBwYXJhbWV0ZXIgKz0gcEV4cHJFdmFsLT5FdmFsdWF0ZShjb250ZXh0LCBkYWdDaGVja2VyKTsKICAgICAgICAgaWYgKGNvbnRleHQtPkhhZEVycm9yKSB7CiAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CkBAIC0xNzQsMTAgKzE3MiwzIEBACiAgIH0KICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiB9Ci0KLUdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50Ojp+R2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQoKQotewotICBjbURlbGV0ZUFsbCh0aGlzLT5JZGVudGlmaWVyQ2hpbGRyZW4pOwotICBzdGQ6OmZvcl9lYWNoKHRoaXMtPlBhcmFtQ2hpbGRyZW4uYmVnaW4oKSwgdGhpcy0+UGFyYW1DaGlsZHJlbi5lbmQoKSwKLSAgICAgICAgICAgICAgICBjbURlbGV0ZUFsbDxzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IqPj4pOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvci5oIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvci5oCmluZGV4IGIxMGJiNWIuLjEwNDk2ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IuaAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTM2LDYgKzM3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKikgY29uc3QgPSAwOwogfTsKIAordXNpbmcgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yVmVjdG9yID0KKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcj4+OworCiBzdHJ1Y3QgVGV4dENvbnRlbnQgOiBwdWJsaWMgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yCiB7CiAgIFRleHRDb250ZW50KGNvbnN0IGNoYXIqIHN0YXJ0LCBzaXplX3QgbGVuZ3RoKQpAQCAtNjgsMTMgKzcyLDEzIEBACiB7CiAgIEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KGNvbnN0IGNoYXIqIHN0YXJ0Q29udGVudCwgc2l6ZV90IGxlbmd0aCk7CiAKLSAgdm9pZCBTZXRJZGVudGlmaWVyKHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+IGlkZW50aWZpZXIpCisgIHZvaWQgU2V0SWRlbnRpZmllcihjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3JWZWN0b3ImJiBpZGVudGlmaWVyKQogICB7CiAgICAgdGhpcy0+SWRlbnRpZmllckNoaWxkcmVuID0gc3RkOjptb3ZlKGlkZW50aWZpZXIpOwogICB9CiAKICAgdm9pZCBTZXRQYXJhbWV0ZXJzKAotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+PiBwYXJhbWV0ZXJzKQorICAgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3Rvcj4mJiBwYXJhbWV0ZXJzKQogICB7CiAgICAgdGhpcy0+UGFyYW1DaGlsZHJlbiA9IHN0ZDo6bW92ZShwYXJhbWV0ZXJzKTsKICAgfQpAQCAtMTAyLDEyICsxMDYsMTIgQEAKICAgICBjb25zdCBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlKiBub2RlLCBjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllciwKICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0KiBjb250ZXh0LAogICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4+Ojpjb25zdF9pdGVyYXRvcgotICAgICAgcGl0KSBjb25zdDsKKyAgICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3JWZWN0b3I+Ojpjb25zdF9pdGVyYXRvciBwaXQpCisgICAgY29uc3Q7CiAKIHByaXZhdGU6Ci0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+IElkZW50aWZpZXJDaGlsZHJlbjsKLSAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4+IFBhcmFtQ2hpbGRyZW47CisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciBJZGVudGlmaWVyQ2hpbGRyZW47CisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3Rvcj4gUGFyYW1DaGlsZHJlbjsKICAgY29uc3QgY2hhciogU3RhcnRDb250ZW50OwogICBzaXplX3QgQ29udGVudExlbmd0aDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uTm9kZS5jeHggYi9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uTm9kZS5jeHgKaW5kZXggNjZmMWM3MS4uZmRjOGYyOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvbk5vZGUuY3h4CisrKyBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlLmN4eApAQCAtMTQsMTIgKzE0LDE0IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL2l0ZXJhdG9yPgorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtL3ZlY3Rvcj4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAjaW5jbHVkZSAiY21zeXMvU3RyaW5nLmgiCiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgotCiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dC5oIgpAQCAtMzMsMTEgKzM1LDEyIEBACiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCisjaW5jbHVkZSAiY21TdGFuZGFyZExldmVsUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCi0jaW5jbHVkZSAiY21TdHJpbmcuaHh4IgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbVRhcmdldC5oIgpAQCAtNjIsNiArNjUsOSBAQAogICBpZiAoY2dlLT5HZXRIYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKCkpIHsKICAgICBjb250ZXh0LT5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKICAgfQorICBpZiAoY2dlLT5HZXRIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oKSkgeworICAgIGNvbnRleHQtPkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CisgIH0KICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzEwLDcgKzMxNiw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBjbUNvbnRhaW5zKHZhbHVlcywgcGFyYW1ldGVycy5mcm9udCgpKSA/ICIxIiA6ICIwIjsKKyAgICByZXR1cm4gY206OmNvbnRhaW5zKHZhbHVlcywgcGFyYW1ldGVycy5mcm9udCgpKSA/ICIxIiA6ICIwIjsKICAgfQogfSBpbkxpc3ROb2RlOwogCkBAIC04NzYsNyArODgyLDcgQEAKIHsKICAgQ29uZmlndXJhdGlvblRlc3ROb2RlKCkge30gLy8gTk9MSU5UKG1vZGVybml6ZS11c2UtZXF1YWxzLWRlZmF1bHQpCiAKLSAgaW50IE51bUV4cGVjdGVkUGFyYW1ldGVycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIE9uZU9yWmVyb1BhcmFtZXRlcnM7IH0KKyAgaW50IE51bUV4cGVjdGVkUGFyYW1ldGVycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFplcm9Pck1vcmVQYXJhbWV0ZXJzOyB9CiAKICAgc3RkOjpzdHJpbmcgRXZhbHVhdGUoCiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXJhbWV0ZXJzLApAQCAtODk0LDM0ICs5MDAsMzcgQEAKICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwogICAgIH0KICAgICBjb250ZXh0LT5IYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKLSAgICBpZiAoY29udGV4dC0+Q29uZmlnLmVtcHR5KCkpIHsKLSAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmZyb250KCkuZW1wdHkoKSA/ICIxIiA6ICIwIjsKLSAgICB9Ci0KLSAgICBpZiAoY21zeXNTdHJpbmdfc3RyY2FzZWNtcChwYXJhbWV0ZXJzLmZyb250KCkuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5Db25maWcuY19zdHIoKSkgPT0gMCkgewotICAgICAgcmV0dXJuICIxIjsKKyAgICBmb3IgKGF1dG8mIHBhcmFtIDogcGFyYW1ldGVycykgeworICAgICAgaWYgKGNvbnRleHQtPkNvbmZpZy5lbXB0eSgpKSB7CisgICAgICAgIGlmIChwYXJhbS5lbXB0eSgpKSB7CisgICAgICAgICAgcmV0dXJuICIxIjsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChjbXN5c1N0cmluZ19zdHJjYXNlY21wKHBhcmFtLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Q29uZmlnLmNfc3RyKCkpID09IDApIHsKKyAgICAgICAgcmV0dXJuICIxIjsKKyAgICAgIH0KICAgICB9CiAKICAgICBpZiAoY29udGV4dC0+Q3VycmVudFRhcmdldCAmJiBjb250ZXh0LT5DdXJyZW50VGFyZ2V0LT5Jc0ltcG9ydGVkKCkpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGxvYyA9IG51bGxwdHI7Ci0gICAgICBjb25zdCBjaGFyKiBpbXAgPSBudWxscHRyOworICAgICAgY21Qcm9wIGxvYyA9IG51bGxwdHI7CisgICAgICBjbVByb3AgaW1wID0gbnVsbHB0cjsKICAgICAgIHN0ZDo6c3RyaW5nIHN1ZmZpeDsKLSAgICAgIGlmIChjb250ZXh0LT5DdXJyZW50VGFyZ2V0LT5UYXJnZXQtPkdldE1hcHBlZENvbmZpZygKLSAgICAgICAgICAgIGNvbnRleHQtPkNvbmZpZywgJmxvYywgJmltcCwgc3VmZml4KSkgeworICAgICAgaWYgKGNvbnRleHQtPkN1cnJlbnRUYXJnZXQtPlRhcmdldC0+R2V0TWFwcGVkQ29uZmlnKGNvbnRleHQtPkNvbmZpZywgbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcCwgc3VmZml4KSkgewogICAgICAgICAvLyBUaGlzIGltcG9ydGVkIHRhcmdldCBoYXMgYW4gYXBwcm9wcmlhdGUgbG9jYXRpb24KICAgICAgICAgLy8gZm9yIHRoaXMgKHBvc3NpYmx5IG1hcHBlZCkgY29uZmlnLgogICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHByb3BlciBjb25maWcgbWFwcGluZyBmb3IgdGhlIHRlc3RlZCBjb25maWcuCiAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtYXBwZWRDb25maWdzOwogICAgICAgICBzdGQ6OnN0cmluZyBtYXBQcm9wID0gY21TdHJDYXQoCiAgICAgICAgICAgIk1BUF9JTVBPUlRFRF9DT05GSUdfIiwgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbnRleHQtPkNvbmZpZykpOwotICAgICAgICBpZiAoY29uc3QgY2hhciogbWFwVmFsdWUgPQotICAgICAgICAgICAgICBjb250ZXh0LT5DdXJyZW50VGFyZ2V0LT5HZXRQcm9wZXJ0eShtYXBQcm9wKSkgewotICAgICAgICAgIGNtRXhwYW5kTGlzdChjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UobWFwVmFsdWUpLCBtYXBwZWRDb25maWdzKTsKLSAgICAgICAgICByZXR1cm4gY21Db250YWlucyhtYXBwZWRDb25maWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShwYXJhbWV0ZXJzLmZyb250KCkpKQotICAgICAgICAgICAgPyAiMSIKLSAgICAgICAgICAgIDogIjAiOworICAgICAgICBpZiAoY21Qcm9wIG1hcFZhbHVlID0gY29udGV4dC0+Q3VycmVudFRhcmdldC0+R2V0UHJvcGVydHkobWFwUHJvcCkpIHsKKyAgICAgICAgICBjbUV4cGFuZExpc3QoY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKCptYXBWYWx1ZSksIG1hcHBlZENvbmZpZ3MpOworCisgICAgICAgICAgZm9yIChhdXRvJiBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgIGlmIChjbTo6Y29udGFpbnMobWFwcGVkQ29uZmlncywgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKHBhcmFtKSkpIHsKKyAgICAgICAgICAgICAgcmV0dXJuICIxIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC05NTgsOSArOTY3LDEwIEBACiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXJhbWV0ZXJzLAogICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgY29uc3QgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQqIGNvbnRlbnQsCi0gICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogLypkYWdDaGVja2VyKi8pIGNvbnN0IG92ZXJyaWRlCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlcikgY29uc3Qgb3ZlcnJpZGUKICAgewotICAgIGlmIChjb250ZXh0LT5MYW5ndWFnZS5lbXB0eSgpKSB7CisgICAgaWYgKGNvbnRleHQtPkxhbmd1YWdlLmVtcHR5KCkgJiYKKyAgICAgICAgKCFkYWdDaGVja2VyIHx8ICFkYWdDaGVja2VyLT5FdmFsdWF0aW5nQ29tcGlsZUV4cHJlc3Npb24oKSkpIHsKICAgICAgIHJlcG9ydEVycm9yKAogICAgICAgICBjb250ZXh0LCBjb250ZW50LT5HZXRPcmlnaW5hbEV4cHJlc3Npb24oKSwKICAgICAgICAgIiQ8Q09NUElMRV9MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSBpbmNsdWRlICIKQEAgLTEwMDUsNyArMTAxNSw5IEBACiAgICAgY29uc3QgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQqIGNvbnRlbnQsCiAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlcikgY29uc3Qgb3ZlcnJpZGUKICAgewotICAgIGlmICghY29udGV4dC0+SGVhZFRhcmdldCB8fCBjb250ZXh0LT5MYW5ndWFnZS5lbXB0eSgpKSB7CisgICAgaWYgKCFjb250ZXh0LT5IZWFkVGFyZ2V0IHx8CisgICAgICAgIChjb250ZXh0LT5MYW5ndWFnZS5lbXB0eSgpICYmCisgICAgICAgICAoIWRhZ0NoZWNrZXIgfHwgIWRhZ0NoZWNrZXItPkV2YWx1YXRpbmdDb21waWxlRXhwcmVzc2lvbigpKSkpIHsKICAgICAgIC8vIHJlcG9ydEVycm9yKGNvbnRleHQsIGNvbnRlbnQtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLCAiIik7CiAgICAgICByZXBvcnRFcnJvcigKICAgICAgICAgY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCkBAIC0xMDM5LDYgKzEwNTEsMjE0IEBACiAgIH0KIH0gbGFuZ3VhZ2VBbmRJZE5vZGU7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgTGlua0xhbmd1YWdlTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIExpbmtMYW5ndWFnZU5vZGUoKSB7fSAvLyBOT0xJTlQobW9kZXJuaXplLXVzZS1lcXVhbHMtZGVmYXVsdCkKKworICBpbnQgTnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gWmVyb09yTW9yZVBhcmFtZXRlcnM7IH0KKworICBzdGQ6OnN0cmluZyBFdmFsdWF0ZSgKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHBhcmFtZXRlcnMsCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudCogY29udGVudCwKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBkYWdDaGVja2VyKSBjb25zdCBvdmVycmlkZQorICB7CisgICAgaWYgKCFjb250ZXh0LT5IZWFkVGFyZ2V0IHx8ICFkYWdDaGVja2VyIHx8CisgICAgICAgICEoZGFnQ2hlY2tlci0+RXZhbHVhdGluZ0xpbmtFeHByZXNzaW9uKCkgfHwKKyAgICAgICAgICBkYWdDaGVja2VyLT5FdmFsdWF0aW5nTGlua0xpYnJhcmllcygpKSkgeworICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAiJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzICIKKyAgICAgICAgICAgICAgICAgICJ0byBzcGVjaWZ5IGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgIgorICAgICAgICAgICAgICAgICAgImFuZCBsaW5rIGRlcGVuZHMuIik7CisgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKCkgJiYgcGFyYW1ldGVycy5lbXB0eSgpKSB7CisgICAgICByZXBvcnRFcnJvcigKKyAgICAgICAgY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICIkPExJTktfTEFOR1VBR0U+IGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGluayBsaWJyYXJpZXMgZXhwcmVzc2lvbi4iKTsKKyAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgIH0KKworICAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9IGNvbnRleHQtPkxHLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKKyAgICBzdGQ6OnN0cmluZyBnZW5OYW1lID0gZ2ctPkdldE5hbWUoKTsKKyAgICBpZiAoZ2VuTmFtZS5maW5kKCJNYWtlZmlsZXMiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICBnZW5OYW1lLmZpbmQoIk5pbmphIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKKyAgICAgICAgZ2VuTmFtZS5maW5kKCJWaXN1YWwgU3R1ZGlvIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKKyAgICAgICAgZ2VuTmFtZS5maW5kKCJYY29kZSIpID09IHN0ZDo6c3RyaW5nOjpucG9zICYmCisgICAgICAgIGdlbk5hbWUuZmluZCgiV2F0Y29tIFdNYWtlIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIHJlcG9ydEVycm9yKGNvbnRleHQsIGNvbnRlbnQtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgIiQ8TElOS19MQU5HVUFHRTouLi4+IG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZ2VuZXJhdG9yLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKCkpIHsKKyAgICAgIGNvbnRleHQtPkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOworICAgICAgY29udGV4dC0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocGFyYW1ldGVycy5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gY29udGV4dC0+TGFuZ3VhZ2U7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKKyAgICAgIGlmIChjb250ZXh0LT5MYW5ndWFnZSA9PSBwYXJhbSkgeworICAgICAgICByZXR1cm4gIjEiOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gIjAiOworICB9Cit9IGxpbmtMYW5ndWFnZU5vZGU7CisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgTGlua2VySWQKK3sKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIEV2YWx1YXRlKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudCogY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKQorICB7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxpbmtlcklkID0KKyAgICAgIGNvbnRleHQtPkxHLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfQ09NUElMRVJfSUQiKTsKKyAgICBpZiAocGFyYW1ldGVycy5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gbGlua2VySWQ7CisgICAgfQorICAgIGlmIChsaW5rZXJJZC5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gcGFyYW1ldGVycy5mcm9udCgpLmVtcHR5KCkgPyAiMSIgOiAiMCI7CisgICAgfQorICAgIHN0YXRpYyBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gbGlua2VySWRWYWxpZGF0b3IoIl5bQS1aYS16MC05X10qJCIpOworCisgICAgZm9yIChhdXRvJiBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKKyAgICAgIGlmICghbGlua2VySWRWYWxpZGF0b3IuZmluZChwYXJhbSkpIHsKKyAgICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICJFeHByZXNzaW9uIHN5bnRheCBub3QgcmVjb2duaXplZC4iKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgICB9CisKKyAgICAgIGlmIChwYXJhbSA9PSBsaW5rZXJJZCkgeworICAgICAgICByZXR1cm4gIjEiOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gIjAiOworICB9Cit9OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IExpbmtMYW5ndWFnZUFuZElkTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIExpbmtMYW5ndWFnZUFuZElkTm9kZSgpIHt9IC8vIE5PTElOVChtb2Rlcm5pemUtdXNlLWVxdWFscy1kZWZhdWx0KQorCisgIGludCBOdW1FeHBlY3RlZFBhcmFtZXRlcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBUd29Pck1vcmVQYXJhbWV0ZXJzOyB9CisKKyAgc3RkOjpzdHJpbmcgRXZhbHVhdGUoCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXJhbWV0ZXJzLAorICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCisgICAgY29uc3QgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQqIGNvbnRlbnQsCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlcikgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIGlmICghY29udGV4dC0+SGVhZFRhcmdldCB8fCAhZGFnQ2hlY2tlciB8fAorICAgICAgICAhKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rRXhwcmVzc2lvbigpIHx8CisgICAgICAgICAgZGFnQ2hlY2tlci0+RXZhbHVhdGluZ0xpbmtMaWJyYXJpZXMoKSkpIHsKKyAgICAgIHJlcG9ydEVycm9yKAorICAgICAgICBjb250ZXh0LCBjb250ZW50LT5HZXRPcmlnaW5hbEV4cHJlc3Npb24oKSwKKyAgICAgICAgIiQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgIgorICAgICAgICAidG8gc3BlY2lmeSBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayAiCisgICAgICAgICJkZXBlbmRzLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gY29udGV4dC0+TEctPkdldEdsb2JhbEdlbmVyYXRvcigpOworICAgIHN0ZDo6c3RyaW5nIGdlbk5hbWUgPSBnZy0+R2V0TmFtZSgpOworICAgIGlmIChnZW5OYW1lLmZpbmQoIk1ha2VmaWxlcyIpID09IHN0ZDo6c3RyaW5nOjpucG9zICYmCisgICAgICAgIGdlbk5hbWUuZmluZCgiTmluamEiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICBnZW5OYW1lLmZpbmQoIlZpc3VhbCBTdHVkaW8iKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgICBnZW5OYW1lLmZpbmQoIlhjb2RlIikgPT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKKyAgICAgICAgZ2VuTmFtZS5maW5kKCJXYXRjb20gV01ha2UiKSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgcmVwb3J0RXJyb3IoCisgICAgICAgIGNvbnRleHQsIGNvbnRlbnQtPkdldE9yaWdpbmFsRXhwcmVzc2lvbigpLAorICAgICAgICAiJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZ2VuZXJhdG9yLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKGRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rTGlicmFyaWVzKCkpIHsKKyAgICAgIGNvbnRleHQtPkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOworICAgICAgY29udGV4dC0+SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZyA9IGNvbnRleHQtPkxhbmd1YWdlOworICAgIGlmIChsYW5nID09IHBhcmFtZXRlcnMuZnJvbnQoKSkgeworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGlkUGFyYW1ldGVyKChwYXJhbWV0ZXJzLmNiZWdpbigpICsgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5jZW5kKCkpOworICAgICAgcmV0dXJuIExpbmtlcklkOjpFdmFsdWF0ZShpZFBhcmFtZXRlciwgY29udGV4dCwgY29udGVudCwgbGFuZyk7CisgICAgfQorICAgIHJldHVybiAiMCI7CisgIH0KK30gbGlua0xhbmd1YWdlQW5kSWROb2RlOworCitzdGF0aWMgY29uc3Qgc3RydWN0IEhvc3RMaW5rTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIEhvc3RMaW5rTm9kZSgpIHt9IC8vIE5PTElOVChtb2Rlcm5pemUtdXNlLWVxdWFscy1kZWZhdWx0KQorCisgIGludCBOdW1FeHBlY3RlZFBhcmFtZXRlcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBaZXJvT3JNb3JlUGFyYW1ldGVyczsgfQorCisgIHN0ZDo6c3RyaW5nIEV2YWx1YXRlKAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcGFyYW1ldGVycywKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0IEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KiBjb250ZW50LAorICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIpIGNvbnN0IG92ZXJyaWRlCisgIHsKKyAgICBpZiAoIWNvbnRleHQtPkhlYWRUYXJnZXQgfHwgIWRhZ0NoZWNrZXIgfHwKKyAgICAgICAgIWRhZ0NoZWNrZXItPkV2YWx1YXRpbmdMaW5rT3B0aW9uc0V4cHJlc3Npb24oKSkgeworICAgICAgcmVwb3J0RXJyb3IoY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAiJDxIT1NUX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgIgorICAgICAgICAgICAgICAgICAgInRvIHNwZWNpZnkgbGluayBvcHRpb25zLiIpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbnRleHQtPkhlYWRUYXJnZXQtPklzRGV2aWNlTGluaygpID8gc3RkOjpzdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNtSm9pbihwYXJhbWV0ZXJzLCAiOyIpOworICB9Cit9IGhvc3RMaW5rTm9kZTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBEZXZpY2VMaW5rTm9kZSA6IHB1YmxpYyBjbUdlbmVyYXRvckV4cHJlc3Npb25Ob2RlCit7CisgIERldmljZUxpbmtOb2RlKCkge30gLy8gTk9MSU5UKG1vZGVybml6ZS11c2UtZXF1YWxzLWRlZmF1bHQpCisKKyAgaW50IE51bUV4cGVjdGVkUGFyYW1ldGVycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFplcm9Pck1vcmVQYXJhbWV0ZXJzOyB9CisKKyAgc3RkOjpzdHJpbmcgRXZhbHVhdGUoCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwYXJhbWV0ZXJzLAorICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCisgICAgY29uc3QgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQqIGNvbnRlbnQsCisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlcikgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIGlmICghY29udGV4dC0+SGVhZFRhcmdldCB8fCAhZGFnQ2hlY2tlciB8fAorICAgICAgICAhZGFnQ2hlY2tlci0+RXZhbHVhdGluZ0xpbmtPcHRpb25zRXhwcmVzc2lvbigpKSB7CisgICAgICByZXBvcnRFcnJvcihjb250ZXh0LCBjb250ZW50LT5HZXRPcmlnaW5hbEV4cHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICIkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzICIKKyAgICAgICAgICAgICAgICAgICJ0byBzcGVjaWZ5IGxpbmsgb3B0aW9ucy4iKTsKKyAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgIH0KKworICAgIGlmIChjb250ZXh0LT5IZWFkVGFyZ2V0LT5Jc0RldmljZUxpbmsoKSkgeworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpc3Q7CisgICAgICBjbUV4cGFuZExpc3RzKHBhcmFtZXRlcnMuYmVnaW4oKSwgcGFyYW1ldGVycy5lbmQoKSwgbGlzdCk7CisgICAgICBjb25zdCBhdXRvIERMX0JFR0lOID0gIjxERVZJQ0VfTElOSz4iX3M7CisgICAgICBjb25zdCBhdXRvIERMX0VORCA9ICI8L0RFVklDRV9MSU5LPiJfczsKKyAgICAgIGNtOjplcmFzZV9pZihsaXN0LCBbJl0oY29uc3Qgc3RkOjpzdHJpbmcmIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0ZW0gPT0gRExfQkVHSU4gfHwgaXRlbSA9PSBETF9FTkQ7CisgICAgICB9KTsKKworICAgICAgbGlzdC5pbnNlcnQobGlzdC5iZWdpbigpLCBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZz4oRExfQkVHSU4pKTsKKyAgICAgIGxpc3QucHVzaF9iYWNrKHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihETF9FTkQpKTsKKworICAgICAgcmV0dXJuIGNtSm9pbihsaXN0LCAiOyIpOworICAgIH0KKworICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICB9Cit9IGRldmljZUxpbmtOb2RlOworCiBzdGQ6OnN0cmluZyBnZXRMaW5rZWRUYXJnZXRzQ29udGVudCgKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsCiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCkBAIC0xMTMwLDYgKzEzNTAsMTQgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKICAgICAgIH0KKyAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gIkFMSUFTX0dMT0JBTCJfcykgeworICAgICAgICBpZiAoY29udGV4dC0+TEctPkdldE1ha2VmaWxlKCktPklzQWxpYXModGFyZ2V0TmFtZSkpIHsKKyAgICAgICAgICByZXR1cm4gY29udGV4dC0+TEctPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc0FsaWFzKHRhcmdldE5hbWUpCisgICAgICAgICAgICA/ICJUUlVFIgorICAgICAgICAgICAgOiAiRkFMU0UiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgICAgfQogICAgICAgdGFyZ2V0ID0gY29udGV4dC0+TEctPkZpbmRHZW5lcmF0b3JUYXJnZXRUb1VzZSh0YXJnZXROYW1lKTsKIAogICAgICAgaWYgKCF0YXJnZXQpIHsKQEAgLTExNTYsNiArMTM4NCw3IEBACiAgICAgICAgICAgY29udGV4dCwgY29udGVudC0+R2V0T3JpZ2luYWxFeHByZXNzaW9uKCksCiAgICAgICAgICAgIiQ8VEFSR0VUX1BST1BFUlRZOnByb3A+ICBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMuICAiCiAgICAgICAgICAgIkl0IG1heSBub3QgYmUgdXNlZCB3aXRoIGFkZF9jdXN0b21fY29tbWFuZCBvciBhZGRfY3VzdG9tX3RhcmdldC4gICIKKyAgICAgICAgICAiICIKICAgICAgICAgICAiU3BlY2lmeSB0aGUgdGFyZ2V0IHRvIHJlYWQgYSBwcm9wZXJ0eSBmcm9tIHVzaW5nIHRoZSAiCiAgICAgICAgICAgIiQ8VEFSR0VUX1BST1BFUlRZOnRndCxwcm9wPiBzaWduYXR1cmUgaW5zdGVhZC4iKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CkBAIC0xMjQ3LDggKzE0NzYsOSBAQAogICAgIH0KIAogICAgIGlmIChpc0ludGVyZmFjZVByb3BlcnR5KSB7Ci0gICAgICByZXR1cm4gdGFyZ2V0LT5FdmFsdWF0ZUludGVyZmFjZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFnQ2hlY2tlclBhcmVudCk7CisgICAgICByZXR1cm4gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpTdHJpcEVtcHR5TGlzdEVsZW1lbnRzKAorICAgICAgICB0YXJnZXQtPkV2YWx1YXRlSW50ZXJmYWNlUHJvcGVydHkocHJvcGVydHlOYW1lLCBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFnQ2hlY2tlclBhcmVudCkpOwogICAgIH0KIAogICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIgZGFnQ2hlY2tlcigKQEAgLTEyNzAsOCArMTUwMCw4IEBACiAKICAgICBzdGQ6OnN0cmluZyByZXN1bHQ7CiAgICAgYm9vbCBoYXZlUHJvcCA9IGZhbHNlOwotICAgIGlmIChjb25zdCBjaGFyKiBwID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICByZXN1bHQgPSBwOworICAgIGlmIChjbVByb3AgcCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSkgeworICAgICAgcmVzdWx0ID0gKnA7CiAgICAgICBoYXZlUHJvcCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChldmFsdWF0aW5nTGlua0xpYnJhcmllcykgewogICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CkBAIC0xMzM0LDggKzE1NjQsOSBAQAogICAgIH0KIAogICAgIGlmICghaW50ZXJmYWNlUHJvcGVydHlOYW1lLmVtcHR5KCkpIHsKLSAgICAgIHJlc3VsdCA9IHRoaXMtPkV2YWx1YXRlRGVwZW5kZW50RXhwcmVzc2lvbihyZXN1bHQsIGNvbnRleHQtPkxHLCBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgJmRhZ0NoZWNrZXIsIHRhcmdldCk7CisgICAgICByZXN1bHQgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OlN0cmlwRW1wdHlMaXN0RWxlbWVudHMoCisgICAgICAgIHRoaXMtPkV2YWx1YXRlRGVwZW5kZW50RXhwcmVzc2lvbihyZXN1bHQsIGNvbnRleHQtPkxHLCBjb250ZXh0LCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgdGFyZ2V0KSk7CiAgICAgICBzdGQ6OnN0cmluZyBsaW5rZWRUYXJnZXRzQ29udGVudCA9IGdldExpbmtlZFRhcmdldHNDb250ZW50KAogICAgICAgICB0YXJnZXQsIGludGVyZmFjZVByb3BlcnR5TmFtZSwgY29udGV4dCwgJmRhZ0NoZWNrZXIpOwogICAgICAgaWYgKCFsaW5rZWRUYXJnZXRzQ29udGVudC5lbXB0eSgpKSB7CkBAIC0xNDE4LDExICsxNjQ5LDExIEBACiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9iamVjdHM7CiAKICAgICBpZiAoZ3QtPklzSW1wb3J0ZWQoKSkgewotICAgICAgY29uc3QgY2hhciogbG9jID0gbnVsbHB0cjsKLSAgICAgIGNvbnN0IGNoYXIqIGltcCA9IG51bGxwdHI7CisgICAgICBjbVByb3AgbG9jID0gbnVsbHB0cjsKKyAgICAgIGNtUHJvcCBpbXAgPSBudWxscHRyOwogICAgICAgc3RkOjpzdHJpbmcgc3VmZml4OwotICAgICAgaWYgKGd0LT5UYXJnZXQtPkdldE1hcHBlZENvbmZpZyhjb250ZXh0LT5Db25maWcsICZsb2MsICZpbXAsIHN1ZmZpeCkpIHsKLSAgICAgICAgY21FeHBhbmRMaXN0KGxvYywgb2JqZWN0cyk7CisgICAgICBpZiAoZ3QtPlRhcmdldC0+R2V0TWFwcGVkQ29uZmlnKGNvbnRleHQtPkNvbmZpZywgbG9jLCBpbXAsIHN1ZmZpeCkpIHsKKyAgICAgICAgY21FeHBhbmRMaXN0KCpsb2MsIG9iamVjdHMpOwogICAgICAgfQogICAgICAgY29udGV4dC0+SGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CiAgICAgfSBlbHNlIHsKQEAgLTE0ODIsMTIgKzE3MTMsMTIgQEAKICAgICBzdGF0aWMgTGFuZ01hcCBhdmFpbGFibGVGZWF0dXJlczsKIAogICAgIExhbmdNYXAgdGVzdGVkRmVhdHVyZXM7Ci0KKyAgICBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlciBzdGFuZGFyZFJlc29sdmVyKGNvbnRleHQtPkxHLT5HZXRNYWtlZmlsZSgpKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBwIDogcGFyYW1ldGVycykgewogICAgICAgc3RkOjpzdHJpbmcgZXJyb3I7CiAgICAgICBzdGQ6OnN0cmluZyBsYW5nOwotICAgICAgaWYgKCFjb250ZXh0LT5MRy0+R2V0TWFrZWZpbGUoKS0+Q29tcGlsZUZlYXR1cmVLbm93bigKLSAgICAgICAgICAgIGNvbnRleHQtPkhlYWRUYXJnZXQtPlRhcmdldCwgcCwgbGFuZywgJmVycm9yKSkgeworICAgICAgaWYgKCFzdGFuZGFyZFJlc29sdmVyLkNvbXBpbGVGZWF0dXJlS25vd24oCisgICAgICAgICAgICBjb250ZXh0LT5IZWFkVGFyZ2V0LT5UYXJnZXQtPkdldE5hbWUoKSwgcCwgbGFuZywgJmVycm9yKSkgewogICAgICAgICByZXBvcnRFcnJvcihjb250ZXh0LCBjb250ZW50LT5HZXRPcmlnaW5hbEV4cHJlc3Npb24oKSwgZXJyb3IpOwogICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKICAgICAgIH0KQEAgLTE0OTUsNyArMTcyNiw3IEBACiAKICAgICAgIGlmIChhdmFpbGFibGVGZWF0dXJlcy5maW5kKGxhbmcpID09IGF2YWlsYWJsZUZlYXR1cmVzLmVuZCgpKSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIGZlYXR1cmVzS25vd24gPQotICAgICAgICAgIGNvbnRleHQtPkxHLT5HZXRNYWtlZmlsZSgpLT5Db21waWxlRmVhdHVyZXNBdmFpbGFibGUobGFuZywgJmVycm9yKTsKKyAgICAgICAgICBzdGFuZGFyZFJlc29sdmVyLkNvbXBpbGVGZWF0dXJlc0F2YWlsYWJsZShsYW5nLCAmZXJyb3IpOwogICAgICAgICBpZiAoIWZlYXR1cmVzS25vd24pIHsKICAgICAgICAgICByZXBvcnRFcnJvcihjb250ZXh0LCBjb250ZW50LT5HZXRPcmlnaW5hbEV4cHJlc3Npb24oKSwgZXJyb3IpOwogICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwpAQCAtMTUwOSwyNiArMTc0MCwyNiBAQAogICAgIGZvciAoYXV0byBjb25zdCYgbGl0IDogdGVzdGVkRmVhdHVyZXMpIHsKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbGFuZ0F2YWlsYWJsZSA9CiAgICAgICAgIGF2YWlsYWJsZUZlYXR1cmVzW2xpdC5maXJzdF07Ci0gICAgICBjb25zdCBjaGFyKiBzdGFuZGFyZERlZmF1bHQgPSBjb250ZXh0LT5MRy0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbigKKyAgICAgIGNtUHJvcCBzdGFuZGFyZERlZmF1bHQgPSBjb250ZXh0LT5MRy0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmKAogICAgICAgICAiQ01BS0VfIiArIGxpdC5maXJzdCArICJfU1RBTkRBUkRfREVGQVVMVCIpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaXQgOiBsaXQuc2Vjb25kKSB7Ci0gICAgICAgIGlmICghY21Db250YWlucyhsYW5nQXZhaWxhYmxlLCBpdCkpIHsKKyAgICAgICAgaWYgKCFjbTo6Y29udGFpbnMobGFuZ0F2YWlsYWJsZSwgaXQpKSB7CiAgICAgICAgICAgcmV0dXJuICIwIjsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhbmRhcmREZWZhdWx0ICYmICEqc3RhbmRhcmREZWZhdWx0KSB7CisgICAgICAgIGlmIChzdGFuZGFyZERlZmF1bHQgJiYgc3RhbmRhcmREZWZhdWx0LT5lbXB0eSgpKSB7CiAgICAgICAgICAgLy8gVGhpcyBjb21waWxlciBoYXMgbm8gbm90aW9uIG9mIGxhbmd1YWdlIHN0YW5kYXJkIGxldmVscy4KICAgICAgICAgICAvLyBBbGwgZmVhdHVyZXMga25vd24gZm9yIHRoZSBsYW5ndWFnZSBhcmUgYWx3YXlzIGF2YWlsYWJsZS4KICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNvbnRleHQtPkxHLT5HZXRNYWtlZmlsZSgpLT5IYXZlU3RhbmRhcmRBdmFpbGFibGUoCi0gICAgICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LCBsaXQuZmlyc3QsIGl0KSkgeworICAgICAgICBpZiAoIXN0YW5kYXJkUmVzb2x2ZXIuSGF2ZVN0YW5kYXJkQXZhaWxhYmxlKHRhcmdldCwgbGl0LmZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPkNvbmZpZywgaXQpKSB7CiAgICAgICAgICAgaWYgKGV2YWxMTCkgewotICAgICAgICAgICAgY29uc3QgY2hhciogbCA9IHRhcmdldC0+R2V0UHJvcGVydHkobGl0LmZpcnN0ICsgIl9TVEFOREFSRCIpOworICAgICAgICAgICAgY21Qcm9wIGwgPSB0YXJnZXQtPkdldExhbmd1YWdlU3RhbmRhcmQobGl0LmZpcnN0LCBjb250ZXh0LT5Db25maWcpOwogICAgICAgICAgICAgaWYgKCFsKSB7CiAgICAgICAgICAgICAgIGwgPSBzdGFuZGFyZERlZmF1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhc3NlcnQobCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5NYXhMYW5ndWFnZVN0YW5kYXJkW3RhcmdldF1bbGl0LmZpcnN0XSA9IGw7CisgICAgICAgICAgICBjb250ZXh0LT5NYXhMYW5ndWFnZVN0YW5kYXJkW3RhcmdldF1bbGl0LmZpcnN0XSA9ICpsOwogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gIjAiOwogICAgICAgICAgIH0KQEAgLTIzMTQsNiArMjU0NSwxMCBAQAogICAgIHsgIkxJTktfT05MWSIsICZsaW5rT25seU5vZGUgfSwKICAgICB7ICJDT01QSUxFX0xBTkdfQU5EX0lEIiwgJmxhbmd1YWdlQW5kSWROb2RlIH0sCiAgICAgeyAiQ09NUElMRV9MQU5HVUFHRSIsICZsYW5ndWFnZU5vZGUgfSwKKyAgICB7ICJMSU5LX0xBTkdfQU5EX0lEIiwgJmxpbmtMYW5ndWFnZUFuZElkTm9kZSB9LAorICAgIHsgIkxJTktfTEFOR1VBR0UiLCAmbGlua0xhbmd1YWdlTm9kZSB9LAorICAgIHsgIkhPU1RfTElOSyIsICZob3N0TGlua05vZGUgfSwKKyAgICB7ICJERVZJQ0VfTElOSyIsICZkZXZpY2VMaW5rTm9kZSB9LAogICAgIHsgIlNIRUxMX1BBVEgiLCAmc2hlbGxQYXRoTm9kZSB9CiAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXIuY3h4IGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlci5jeHgKaW5kZXggZDZjYzZhYi4uYzJjOWVmNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlci5jeHgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlci5jeHgKQEAgLTYsNyArNiwxMCBAQAogI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvbWVtb3J5PgorCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yLmgiCiAKIGNtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlcjo6Y21HZW5lcmF0b3JFeHByZXNzaW9uUGFyc2VyKApAQCAtMTcsNyArMjAsNyBAQAogfQogCiB2b2lkIGNtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlcjo6UGFyc2UoCi0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+JiByZXN1bHQpCisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYgcmVzdWx0KQogewogICBpdCA9IHRoaXMtPlRva2Vucy5iZWdpbigpOwogCkBAIC0yNyw0MCArMzAsMzggQEAKIH0KIAogc3RhdGljIHZvaWQgZXh0ZW5kVGV4dCgKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mIHJlc3VsdCwKKyAgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yVmVjdG9yJiByZXN1bHQsCiAgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuPjo6Y29uc3RfaXRlcmF0b3IgaXQpCiB7CiAgIGlmICghcmVzdWx0LmVtcHR5KCkgJiYKICAgICAgICgqKHJlc3VsdC5lbmQoKSAtIDEpKS0+R2V0VHlwZSgpID09CiAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcjo6VGV4dCkgewotICAgIFRleHRDb250ZW50KiB0ZXh0Q29udGVudCA9IHN0YXRpY19jYXN0PFRleHRDb250ZW50Kj4oKihyZXN1bHQuZW5kKCkgLSAxKSk7Ci0gICAgdGV4dENvbnRlbnQtPkV4dGVuZChpdC0+TGVuZ3RoKTsKKyAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PFRleHRDb250ZW50PigqKHJlc3VsdC5lbmQoKSAtIDEpKQorICAgICAgLkV4dGVuZChpdC0+TGVuZ3RoKTsKICAgfSBlbHNlIHsKLSAgICBUZXh0Q29udGVudCogdGV4dENvbnRlbnQgPSBuZXcgVGV4dENvbnRlbnQoaXQtPkNvbnRlbnQsIGl0LT5MZW5ndGgpOwotICAgIHJlc3VsdC5wdXNoX2JhY2sodGV4dENvbnRlbnQpOworICAgIGF1dG8gdGV4dENvbnRlbnQgPSBjbTo6bWFrZV91bmlxdWU8VGV4dENvbnRlbnQ+KGl0LT5Db250ZW50LCBpdC0+TGVuZ3RoKTsKKyAgICByZXN1bHQucHVzaF9iYWNrKHN0ZDo6bW92ZSh0ZXh0Q29udGVudCkpOwogICB9CiB9CiAKIHN0YXRpYyB2b2lkIGV4dGVuZFJlc3VsdCgKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mIHJlc3VsdCwKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mIGNvbnRlbnRzKQorICBjbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXI6OmNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYgcmVzdWx0LAorICBjbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXI6OmNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYmIGNvbnRlbnRzKQogewogICBpZiAoIXJlc3VsdC5lbXB0eSgpICYmCiAgICAgICAoKihyZXN1bHQuZW5kKCkgLSAxKSktPkdldFR5cGUoKSA9PQogICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3I6OlRleHQgJiYKICAgICAgIGNvbnRlbnRzLmZyb250KCktPkdldFR5cGUoKSA9PSBjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3I6OlRleHQpIHsKLSAgICBUZXh0Q29udGVudCogdGV4dENvbnRlbnQgPSBzdGF0aWNfY2FzdDxUZXh0Q29udGVudCo+KCoocmVzdWx0LmVuZCgpIC0gMSkpOwotICAgIHRleHRDb250ZW50LT5FeHRlbmQoCi0gICAgICBzdGF0aWNfY2FzdDxUZXh0Q29udGVudCo+KGNvbnRlbnRzLmZyb250KCkpLT5HZXRMZW5ndGgoKSk7Ci0gICAgZGVsZXRlIGNvbnRlbnRzLmZyb250KCk7Ci0gICAgY21BcHBlbmQocmVzdWx0LCBjb250ZW50cy5iZWdpbigpICsgMSwgY29udGVudHMuZW5kKCkpOwotICB9IGVsc2UgewotICAgIGNtQXBwZW5kKHJlc3VsdCwgY29udGVudHMpOworICAgIGNtOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8VGV4dENvbnRlbnQ+KCoocmVzdWx0LmVuZCgpIC0gMSkpCisgICAgICAuRXh0ZW5kKAorICAgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PFRleHRDb250ZW50Pihjb250ZW50cy5mcm9udCgpKS5HZXRMZW5ndGgoKSk7CisgICAgY29udGVudHMuZXJhc2UoY29udGVudHMuYmVnaW4oKSk7CiAgIH0KKyAgY206OmFwcGVuZChyZXN1bHQsIHN0ZDo6bW92ZShjb250ZW50cykpOwogfQogCiB2b2lkIGNtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlcjo6UGFyc2VHZW5lcmF0b3JFeHByZXNzaW9uKAotICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3IqPiYgcmVzdWx0KQorICBjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3JWZWN0b3ImIHJlc3VsdCkKIHsKICAgYXNzZXJ0KHRoaXMtPml0ICE9IHRoaXMtPlRva2Vucy5lbmQoKSk7CiAgIHVuc2lnbmVkIGludCBuZXN0ZWRMZXZlbCA9IHRoaXMtPk5lc3RpbmdMZXZlbDsKQEAgLTY4LDcgKzY5LDcgQEAKIAogICBhdXRvIHN0YXJ0VG9rZW4gPSB0aGlzLT5pdCAtIDE7CiAKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4gaWRlbnRpZmllcjsKKyAgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yVmVjdG9yIGlkZW50aWZpZXI7CiAgIHdoaWxlICh0aGlzLT5pdC0+VG9rZW5UeXBlICE9IGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuOjpFbmRFeHByZXNzaW9uICYmCiAgICAgICAgICB0aGlzLT5pdC0+VG9rZW5UeXBlICE9IGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuOjpDb2xvblNlcGFyYXRvcikgewogICAgIGlmICh0aGlzLT5pdC0+VG9rZW5UeXBlID09IGNtR2VuZXJhdG9yRXhwcmVzc2lvblRva2VuOjpDb21tYVNlcGFyYXRvcikgewpAQCAtODcsMTggKzg4LDE4IEBACiAKICAgaWYgKHRoaXMtPml0ICE9IHRoaXMtPlRva2Vucy5lbmQoKSAmJgogICAgICAgdGhpcy0+aXQtPlRva2VuVHlwZSA9PSBjbUdlbmVyYXRvckV4cHJlc3Npb25Ub2tlbjo6RW5kRXhwcmVzc2lvbikgewotICAgIEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KiBjb250ZW50ID0gbmV3IEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KAorICAgIGF1dG8gY29udGVudCA9IGNtOjptYWtlX3VuaXF1ZTxHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudD4oCiAgICAgICBzdGFydFRva2VuLT5Db250ZW50LAogICAgICAgdGhpcy0+aXQtPkNvbnRlbnQgLSBzdGFydFRva2VuLT5Db250ZW50ICsgdGhpcy0+aXQtPkxlbmd0aCk7CiAgICAgYXNzZXJ0KHRoaXMtPml0ICE9IHRoaXMtPlRva2Vucy5lbmQoKSk7CiAgICAgKyt0aGlzLT5pdDsKICAgICAtLXRoaXMtPk5lc3RpbmdMZXZlbDsKICAgICBjb250ZW50LT5TZXRJZGVudGlmaWVyKHN0ZDo6bW92ZShpZGVudGlmaWVyKSk7Ci0gICAgcmVzdWx0LnB1c2hfYmFjayhjb250ZW50KTsKKyAgICByZXN1bHQucHVzaF9iYWNrKHN0ZDo6bW92ZShjb250ZW50KSk7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4+IHBhcmFtZXRlcnM7CisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3Rvcj4gcGFyYW1ldGVyczsKICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uVG9rZW4+Ojpjb25zdF9pdGVyYXRvcj4KICAgICBjb21tYVRva2VuczsKICAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uVG9rZW4+Ojpjb25zdF9pdGVyYXRvciBjb2xvblRva2VuOwpAQCAtMTY5LDcgKzE3MCw3IEBACiAgICAgLy8gdHJlYXQgdGhlICckPCcgYXMgaGF2aW5nIGJlZW4gcGxhaW4gdGV4dCwgYWxvbmcgd2l0aCB0aGUKICAgICAvLyBjb3JyZXNwb25kaW5nIDogYW5kICwgdG9rZW5zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGZvdW5kLgogICAgIGV4dGVuZFRleHQocmVzdWx0LCBzdGFydFRva2VuKTsKLSAgICBleHRlbmRSZXN1bHQocmVzdWx0LCBpZGVudGlmaWVyKTsKKyAgICBleHRlbmRSZXN1bHQocmVzdWx0LCBzdGQ6Om1vdmUoaWRlbnRpZmllcikpOwogICAgIGlmICghcGFyYW1ldGVycy5lbXB0eSgpKSB7CiAgICAgICBleHRlbmRUZXh0KHJlc3VsdCwgY29sb25Ub2tlbik7CiAKQEAgLTE3OSw3ICsxODAsNyBAQAogICAgICAgYXNzZXJ0KHBhcmFtZXRlcnMuc2l6ZSgpID4gY29tbWFUb2tlbnMuc2l6ZSgpKTsKICAgICAgIGZvciAoOyBwaXQgIT0gcGVuZDsgKytwaXQsICsrY29tbWFJdCkgewogICAgICAgICBpZiAoIXBpdC0+ZW1wdHkoKSAmJiAhZW1wdHlQYXJhbVRlcm1pbmF0aW9uKSB7Ci0gICAgICAgICAgZXh0ZW5kUmVzdWx0KHJlc3VsdCwgKnBpdCk7CisgICAgICAgICAgZXh0ZW5kUmVzdWx0KHJlc3VsdCwgc3RkOjptb3ZlKCpwaXQpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY29tbWFJdCAhPSBjb21tYVRva2Vucy5lbmQoKSkgewogICAgICAgICAgIGV4dGVuZFRleHQocmVzdWx0LCAqY29tbWFJdCk7CkBAIC0xOTMsMTUgKzE5NCwxNSBAQAogCiAgIHNpemVfdCBjb250ZW50TGVuZ3RoID0KICAgICAoKHRoaXMtPml0IC0gMSktPkNvbnRlbnQgLSBzdGFydFRva2VuLT5Db250ZW50KSArICh0aGlzLT5pdCAtIDEpLT5MZW5ndGg7Ci0gIEdlbmVyYXRvckV4cHJlc3Npb25Db250ZW50KiBjb250ZW50ID0KLSAgICBuZXcgR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQoc3RhcnRUb2tlbi0+Q29udGVudCwgY29udGVudExlbmd0aCk7CisgIGF1dG8gY29udGVudCA9IGNtOjptYWtlX3VuaXF1ZTxHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudD4oCisgICAgc3RhcnRUb2tlbi0+Q29udGVudCwgY29udGVudExlbmd0aCk7CiAgIGNvbnRlbnQtPlNldElkZW50aWZpZXIoc3RkOjptb3ZlKGlkZW50aWZpZXIpKTsKICAgY29udGVudC0+U2V0UGFyYW1ldGVycyhzdGQ6Om1vdmUocGFyYW1ldGVycykpOwotICByZXN1bHQucHVzaF9iYWNrKGNvbnRlbnQpOworICByZXN1bHQucHVzaF9iYWNrKHN0ZDo6bW92ZShjb250ZW50KSk7CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JFeHByZXNzaW9uUGFyc2VyOjpQYXJzZUNvbnRlbnQoCi0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+JiByZXN1bHQpCisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYgcmVzdWx0KQogewogICBhc3NlcnQodGhpcy0+aXQgIT0gdGhpcy0+VG9rZW5zLmVuZCgpKTsKICAgc3dpdGNoICh0aGlzLT5pdC0+VG9rZW5UeXBlKSB7CkBAIC0yMTMsMTcgKzIxNCwxNiBAQAogICAgICAgICAgIC8vIEEgY29tbWEgaW4gJ3BsYWluIHRleHQnIGNvdWxkIGhhdmUgc3BsaXQgdGV4dCB0aGF0IHNob3VsZAogICAgICAgICAgIC8vIG90aGVyd2lzZSBiZSBjb250aW51b3VzLiBFeHRlbmQgdGhlIGxhc3QgdGV4dCBjb250ZW50IGluc3RlYWQgb2YKICAgICAgICAgICAvLyBjcmVhdGluZyBhIG5ldyBvbmUuCi0gICAgICAgICAgVGV4dENvbnRlbnQqIHRleHRDb250ZW50ID0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFRleHRDb250ZW50Kj4oKihyZXN1bHQuZW5kKCkgLSAxKSk7Ci0gICAgICAgICAgdGV4dENvbnRlbnQtPkV4dGVuZCh0aGlzLT5pdC0+TGVuZ3RoKTsKKyAgICAgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PFRleHRDb250ZW50PigqKHJlc3VsdC5lbmQoKSAtIDEpKQorICAgICAgICAgICAgLkV4dGVuZCh0aGlzLT5pdC0+TGVuZ3RoKTsKICAgICAgICAgICBhc3NlcnQodGhpcy0+aXQgIT0gdGhpcy0+VG9rZW5zLmVuZCgpKTsKICAgICAgICAgICArK3RoaXMtPml0OwogICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgfQotICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKiBuID0KLSAgICAgICAgbmV3IFRleHRDb250ZW50KHRoaXMtPml0LT5Db250ZW50LCB0aGlzLT5pdC0+TGVuZ3RoKTsKLSAgICAgIHJlc3VsdC5wdXNoX2JhY2sobik7CisgICAgICBhdXRvIG4gPQorICAgICAgICBjbTo6bWFrZV91bmlxdWU8VGV4dENvbnRlbnQ+KHRoaXMtPml0LT5Db250ZW50LCB0aGlzLT5pdC0+TGVuZ3RoKTsKKyAgICAgIHJlc3VsdC5wdXNoX2JhY2soc3RkOjptb3ZlKG4pKTsKICAgICAgIGFzc2VydCh0aGlzLT5pdCAhPSB0aGlzLT5Ub2tlbnMuZW5kKCkpOwogICAgICAgKyt0aGlzLT5pdDsKICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXIuaCBiL1NvdXJjZS9jbUdlbmVyYXRvckV4cHJlc3Npb25QYXJzZXIuaAppbmRleCBlNjYzNDk2Li4xYmExNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZW5lcmF0b3JFeHByZXNzaW9uUGFyc2VyLmgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlci5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb25MZXhlci5oIgpAQCAtMTUsMTEgKzE2LDE0IEBACiB7CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvblBhcnNlcihzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25Ub2tlbj4gdG9rZW5zKTsKIAotICB2b2lkIFBhcnNlKHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvcio+JiByZXN1bHQpOworICB1c2luZyBjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3JWZWN0b3IgPQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0b3I+PjsKKworICB2b2lkIFBhcnNlKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYgcmVzdWx0KTsKIAogcHJpdmF0ZToKLSAgdm9pZCBQYXJzZUNvbnRlbnQoc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mKTsKLSAgdm9pZCBQYXJzZUdlbmVyYXRvckV4cHJlc3Npb24oc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yKj4mKTsKKyAgdm9pZCBQYXJzZUNvbnRlbnQoY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdG9yVmVjdG9yJik7CisgIHZvaWQgUGFyc2VHZW5lcmF0b3JFeHByZXNzaW9uKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRvclZlY3RvciYpOwogCiBwcml2YXRlOgogICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25Ub2tlbj46OmNvbnN0X2l0ZXJhdG9yIGl0OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmN4eCBiL1NvdXJjZS9jbUdlbmVyYXRvclRhcmdldC5jeHgKaW5kZXggNGNmMDc2ZS4uNDFjZmYwMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmN4eAorKysgYi9Tb3VyY2UvY21HZW5lcmF0b3JUYXJnZXQuY3h4CkBAIC0xMCwxNCArMTAsMTUgQEAKICNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgotCi0jaW5jbHVkZSA8cXVldWU+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCkBAIC0yNiw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kTGluZXMuaCIKKyNpbmNsdWRlICJjbUZpbGVUaW1lcy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQuaCIKQEAgLTM1LDExICszNywxMyBAQAogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eU1hcC5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZUxvY2F0aW9uS2luZC5oIgorI2luY2x1ZGUgImNtU3RhbmRhcmRMZXZlbFJlc29sdmVyLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKQEAgLTUxLDE1ICs1NSwxNSBAQAogY2xhc3MgY21NZXNzZW5nZXI7CiAKIHRlbXBsYXRlIDw+Ci1jb25zdCBjaGFyKiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFNvdXJjZXM8Y21HZW5lcmF0b3JUYXJnZXQ+KAorY21Qcm9wIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6R2V0U291cmNlczxjbUdlbmVyYXRvclRhcmdldD4oCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsIGNtTWVzc2VuZ2VyKiAvKiBtZXNzZW5nZXIgKi8sCiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIC8qIGNvbnRleHQgKi8pCiB7Ci0gIHJldHVybiB0Z3QtPkdldFNvdXJjZXNQcm9wZXJ0eSgpOworICByZXR1cm4gJnRndC0+R2V0U291cmNlc1Byb3BlcnR5KCk7CiB9CiAKIHRlbXBsYXRlIDw+Ci1jb25zdCBjaGFyKgorY29uc3Qgc3RkOjpzdHJpbmcmCiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkNvbXB1dGVMb2NhdGlvbkZvckJ1aWxkPGNtR2VuZXJhdG9yVGFyZ2V0PigKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCkKIHsKQEAgLTY3LDcgKzcxLDggQEAKIH0KIAogdGVtcGxhdGUgPD4KLWNvbnN0IGNoYXIqIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6Q29tcHV0ZUxvY2F0aW9uPGNtR2VuZXJhdG9yVGFyZ2V0PigKK2NvbnN0IHN0ZDo6c3RyaW5nJgorY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpDb21wdXRlTG9jYXRpb248Y21HZW5lcmF0b3JUYXJnZXQ+KAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGd0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICByZXR1cm4gdGd0LT5HZXRMb2NhdGlvbihjb25maWcpOwpAQCAtMTYyLDcgKzE2Nyw4IEBACiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgQmFja3RyYWNlOwogfTsKIAotY21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnkqIENyZWF0ZVRhcmdldFByb3BlcnR5RW50cnkoCitzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnk+CitDcmVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KAogICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBiYWNrdHJhY2UgPSBjbUxpc3RGaWxlQmFja3RyYWNlKCksCiAgIGJvb2wgZXZhbHVhdGVGb3JCdWlsZHN5c3RlbSA9IGZhbHNlKQpAQCAtMTcyLDE1ICsxNzgsMTggQEAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9CiAgICAgICBnZS5QYXJzZShwcm9wZXJ0eVZhbHVlKTsKICAgICBjZ2UtPlNldEV2YWx1YXRlRm9yQnVpbGRzeXN0ZW0oZXZhbHVhdGVGb3JCdWlsZHN5c3RlbSk7Ci0gICAgcmV0dXJuIG5ldyBUYXJnZXRQcm9wZXJ0eUVudHJ5R2VuZXgoc3RkOjptb3ZlKGNnZSkpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnk+KAorICAgICAgY206Om1ha2VfdW5pcXVlPFRhcmdldFByb3BlcnR5RW50cnlHZW5leD4oc3RkOjptb3ZlKGNnZSkpKTsKICAgfQogCi0gIHJldHVybiBuZXcgVGFyZ2V0UHJvcGVydHlFbnRyeVN0cmluZyhwcm9wZXJ0eVZhbHVlLCBzdGQ6Om1vdmUoYmFja3RyYWNlKSk7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnk+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxUYXJnZXRQcm9wZXJ0eUVudHJ5U3RyaW5nPihwcm9wZXJ0eVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoYmFja3RyYWNlKSkpOwogfQogCiB2b2lkIENyZWF0ZVByb3BlcnR5R2VuZXJhdG9yRXhwcmVzc2lvbnMoCiAgIGNtU3RyaW5nUmFuZ2UgZW50cmllcywgY21CYWNrdHJhY2VSYW5nZSBiYWNrdHJhY2VzLAotICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldDo6VGFyZ2V0UHJvcGVydHlFbnRyeSo+JiBpdGVtcywKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yVGFyZ2V0OjpUYXJnZXRQcm9wZXJ0eUVudHJ5Pj4mIGl0ZW1zLAogICBib29sIGV2YWx1YXRlRm9yQnVpbGRzeXN0ZW0gPSBmYWxzZSkKIHsKICAgYXV0byBidEl0ID0gYmFja3RyYWNlcy5iZWdpbigpOwpAQCAtMjE5LDI4ICsyMjgsMzUgQEAKIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnkgRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGhpc1RhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gIGNtR2VuZXJhdG9yVGFyZ2V0OjpUYXJnZXRQcm9wZXJ0eUVudHJ5KiBlbnRyeSkKKyAgY21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnkmIGVudHJ5KQogewotICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGVlKGVudHJ5LT5MaW5rSW1wbEl0ZW0sIGVudHJ5LT5HZXRCYWNrdHJhY2UoKSk7Ci0gIGNtRXhwYW5kTGlzdChlbnRyeS0+RXZhbHVhdGUodGhpc1RhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSwgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNUYXJnZXQsIGRhZ0NoZWNrZXIsIGxhbmcpLAorICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGVlKGVudHJ5LkxpbmtJbXBsSXRlbSwgZW50cnkuR2V0QmFja3RyYWNlKCkpOworICBjbUV4cGFuZExpc3QoZW50cnkuRXZhbHVhdGUodGhpc1RhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSwgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1RhcmdldCwgZGFnQ2hlY2tlciwgbGFuZyksCiAgICAgICAgICAgICAgICBlZS5WYWx1ZXMpOwotICBpZiAoZW50cnktPkdldEhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24oKSkgeworICBpZiAoZW50cnkuR2V0SGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbigpKSB7CiAgICAgZWUuQ29udGV4dERlcGVuZGVudCA9IHRydWU7CiAgIH0KICAgcmV0dXJuIGVlOwogfQogCi1zdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcygKK3N0cnVjdCBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMKK3sKKyAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4gRW50cmllczsKKyAgYm9vbCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uID0gZmFsc2U7Cit9OworCitFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXMoCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0aGlzVGFyZ2V0LCBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLAogICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlciwKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnkqPiBjb25zdCYgaW4pCisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRvclRhcmdldDo6VGFyZ2V0UHJvcGVydHlFbnRyeT4+IGNvbnN0JgorICAgIGluKQogewotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBvdXQ7Ci0gIG91dC5yZXNlcnZlKGluLnNpemUoKSk7Ci0gIGZvciAoY21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldFByb3BlcnR5RW50cnkqIGVudHJ5IDogaW4pIHsKLSAgICBvdXQuZW1wbGFjZV9iYWNrKEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyeSh0aGlzVGFyZ2V0LCBjb25maWcsIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFnQ2hlY2tlciwgZW50cnkpKTsKKyAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzIG91dDsKKyAgb3V0LkVudHJpZXMucmVzZXJ2ZShpbi5zaXplKCkpOworICBmb3IgKGF1dG8mIGVudHJ5IDogaW4pIHsKKyAgICBvdXQuRW50cmllcy5lbXBsYWNlX2JhY2soRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KAorICAgICAgdGhpc1RhcmdldCwgY29uZmlnLCBsYW5nLCBkYWdDaGVja2VyLCAqZW50cnkpKTsKICAgfQogICByZXR1cm4gb3V0OwogfQpAQCAtMzAyLDMxICszMTgsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Tb3VyY2VFbnRyaWVzLCB0cnVlKTsKIAogICB0aGlzLT5Qb2xpY3lNYXAgPSB0LT5HZXRQb2xpY3lNYXAoKTsKKworICAvLyBHZXQgaGFyZC1jb2RlZCBsaW5rZXIgbGFuZ3VhZ2UKKyAgaWYgKHRoaXMtPlRhcmdldC0+R2V0UHJvcGVydHkoIkhBU19DWFgiKSkgeworICAgIHRoaXMtPkxpbmtlckxhbmd1YWdlID0gIkNYWCI7CisgIH0gZWxzZSB7CisgICAgdGhpcy0+TGlua2VyTGFuZ3VhZ2UgPSB0aGlzLT5UYXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiTElOS0VSX0xBTkdVQUdFIik7CisgIH0KIH0KIAotY21HZW5lcmF0b3JUYXJnZXQ6On5jbUdlbmVyYXRvclRhcmdldCgpCi17Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5Db21waWxlT3B0aW9uc0VudHJpZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5Db21waWxlRmVhdHVyZXNFbnRyaWVzKTsKLSAgY21EZWxldGVBbGwodGhpcy0+Q29tcGlsZURlZmluaXRpb25zRW50cmllcyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkxpbmtPcHRpb25zRW50cmllcyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkxpbmtEaXJlY3Rvcmllc0VudHJpZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5QcmVjb21waWxlSGVhZGVyc0VudHJpZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5Tb3VyY2VFbnRyaWVzKTsKLSAgY21EZWxldGVBbGwodGhpcy0+TGlua0luZm9ybWF0aW9uKTsKLX0KK2NtR2VuZXJhdG9yVGFyZ2V0Ojp+Y21HZW5lcmF0b3JUYXJnZXQoKSA9IGRlZmF1bHQ7CiAKLWNvbnN0IGNoYXIqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRTb3VyY2VzUHJvcGVydHkoKSBjb25zdAorY29uc3Qgc3RkOjpzdHJpbmcmIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRTb3VyY2VzUHJvcGVydHkoKSBjb25zdAogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdmFsdWVzOwotICBmb3IgKFRhcmdldFByb3BlcnR5RW50cnkqIHNlIDogdGhpcy0+U291cmNlRW50cmllcykgeworICBmb3IgKGF1dG8mIHNlIDogdGhpcy0+U291cmNlRW50cmllcykgewogICAgIHZhbHVlcy5wdXNoX2JhY2soc2UtPkdldElucHV0KCkpOwogICB9CiAgIHN0YXRpYyBzdGQ6OnN0cmluZyB2YWx1ZTsKICAgdmFsdWUuY2xlYXIoKTsKICAgdmFsdWUgPSBjbUpvaW4odmFsdWVzLCAiOyIpOwotICByZXR1cm4gdmFsdWUuY19zdHIoKTsKKyAgcmV0dXJuIHZhbHVlOwogfQogCiBjbUdsb2JhbEdlbmVyYXRvciogY21HZW5lcmF0b3JUYXJnZXQ6OkdldEdsb2JhbEdlbmVyYXRvcigpIGNvbnN0CkBAIC0zNTEsMjkgKzM2MywyOSBAQAogCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0RXhwb3J0TmFtZSgpIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIGV4cG9ydE5hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiRVhQT1JUX05BTUUiKTsKKyAgY21Qcm9wIGV4cG9ydE5hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiRVhQT1JUX05BTUUiKTsKIAotICBpZiAoZXhwb3J0TmFtZSAmJiAqZXhwb3J0TmFtZSkgewotICAgIGlmICghY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJc1ZhbGlkVGFyZ2V0TmFtZShleHBvcnROYW1lKSkgeworICBpZiAoY21Ob25lbXB0eShleHBvcnROYW1lKSkgeworICAgIGlmICghY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJc1ZhbGlkVGFyZ2V0TmFtZSgqZXhwb3J0TmFtZSkpIHsKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwotICAgICAgZSA8PCAiRVhQT1JUX05BTUUgcHJvcGVydHkgXCIiIDw8IGV4cG9ydE5hbWUgPDwgIlwiIGZvciBcIiIKKyAgICAgIGUgPDwgIkVYUE9SVF9OQU1FIHByb3BlcnR5IFwiIiA8PCAqZXhwb3J0TmFtZSA8PCAiXCIgZm9yIFwiIgogICAgICAgICA8PCB0aGlzLT5HZXROYW1lKCkgPDwgIlwiOiBpcyBub3QgdmFsaWQuIjsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGUuc3RyKCkpOwogICAgICAgcmV0dXJuICIiOwogICAgIH0KLSAgICByZXR1cm4gZXhwb3J0TmFtZTsKKyAgICByZXR1cm4gKmV4cG9ydE5hbWU7CiAgIH0KICAgcmV0dXJuIHRoaXMtPkdldE5hbWUoKTsKIH0KIAotY29uc3QgY2hhciogY21HZW5lcmF0b3JUYXJnZXQ6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAorY21Qcm9wIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKICAgaWYgKCFjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OlBhc3Nlc1doaXRlbGlzdCgKICAgICAgICAgdGhpcy0+R2V0VHlwZSgpLCBwcm9wLCB0aGlzLT5NYWtlZmlsZS0+R2V0TWVzc2VuZ2VyKCksCiAgICAgICAgIHRoaXMtPkdldEJhY2t0cmFjZSgpKSkgewogICAgIHJldHVybiBudWxscHRyOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiByZXN1bHQgPSBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFByb3BlcnR5KAorICBpZiAoY21Qcm9wIHJlc3VsdCA9IGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6R2V0UHJvcGVydHkoCiAgICAgICAgIHRoaXMsIHByb3AsIHRoaXMtPk1ha2VmaWxlLT5HZXRNZXNzZW5nZXIoKSwgdGhpcy0+R2V0QmFja3RyYWNlKCkpKSB7CiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQpAQCAtMzgzLDEzICszOTUsMTYgQEAKICAgcmV0dXJuIHRoaXMtPlRhcmdldC0+R2V0UHJvcGVydHkocHJvcCk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRTYWZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CitzdGQ6OnN0cmluZyBjb25zdCYgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFNhZmVQcm9wZXJ0eSgKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3ApIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIHJldCA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApOwotICBpZiAoIXJldCkgewotICAgIHJldHVybiAiIjsKKyAgY21Qcm9wIHJldCA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApOworICBpZiAocmV0KSB7CisgICAgcmV0dXJuICpyZXQ7CiAgIH0KLSAgcmV0dXJuIHJldDsKKworICBzdGF0aWMgc3RkOjpzdHJpbmcgY29uc3Qgc19lbXB0eTsKKyAgcmV0dXJuIHNfZW1wdHk7CiB9CiAKIGNvbnN0IGNoYXIqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRPdXRwdXRUYXJnZXRUeXBlKApAQCAtNDc4LDggKzQ5Myw4IEBACiAKICAgICBzdGQ6OnN0cmluZyBvdXROYW1lOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHAgOiBwcm9wcykgewotICAgICAgaWYgKGNvbnN0IGNoYXIqIG91dE5hbWVQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkocCkpIHsKLSAgICAgICAgb3V0TmFtZSA9IG91dE5hbWVQcm9wOworICAgICAgaWYgKGNtUHJvcCBvdXROYW1lUHJvcCA9IHRoaXMtPkdldFByb3BlcnR5KHApKSB7CisgICAgICAgIG91dE5hbWUgPSAqb3V0TmFtZVByb3A7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KQEAgLTUzNSwxOCArNTUwLDQ2IEBACiAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRGaWxlUG9zdGZpeChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewotICBjb25zdCBjaGFyKiBwb3N0Zml4ID0gbnVsbHB0cjsKKyAgY21Qcm9wIHBvc3RmaXggPSBudWxscHRyOworICBzdGQ6OnN0cmluZyBmcmFtZXdvcmtQb3N0Zml4OwogICBpZiAoIWNvbmZpZy5lbXB0eSgpKSB7CiAgICAgc3RkOjpzdHJpbmcgY29uZmlnUHJvcCA9CiAgICAgICBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSwgIl9QT1NURklYIik7CiAgICAgcG9zdGZpeCA9IHRoaXMtPkdldFByb3BlcnR5KGNvbmZpZ1Byb3ApOwotICAgIC8vIE1hYyBhcHBsaWNhdGlvbiBidW5kbGVzIGFuZCBmcmFtZXdvcmtzIGhhdmUgbm8gcG9zdGZpeC4KKworICAgIC8vIE1hYyBhcHBsaWNhdGlvbiBidW5kbGVzIGFuZCBmcmFtZXdvcmtzIGhhdmUgbm8gcmVndWxhciBwb3N0Zml4IGxpa2UKKyAgICAvLyBsaWJyYXJpZXMgZG8uCiAgICAgaWYgKCF0aGlzLT5Jc0ltcG9ydGVkKCkgJiYgcG9zdGZpeCAmJgogICAgICAgICAodGhpcy0+SXNBcHBCdW5kbGVPbkFwcGxlKCkgfHwgdGhpcy0+SXNGcmFtZXdvcmtPbkFwcGxlKCkpKSB7CiAgICAgICBwb3N0Zml4ID0gbnVsbHB0cjsKICAgICB9CisKKyAgICAvLyBGcmFtZXdvcmtzIGNyZWF0ZWQgYnkgbXVsdGkgY29uZmlnIGdlbmVyYXRvcnMgY2FuIGhhdmUgYSBzcGVjaWFsCisgICAgLy8gZnJhbWV3b3JrIHBvc3RmaXguCisgICAgZnJhbWV3b3JrUG9zdGZpeCA9IEdldEZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeChjb25maWcpOworICAgIGlmICghZnJhbWV3b3JrUG9zdGZpeC5lbXB0eSgpKSB7CisgICAgICBwb3N0Zml4ID0gJmZyYW1ld29ya1Bvc3RmaXg7CisgICAgfQogICB9Ci0gIHJldHVybiBwb3N0Zml4ID8gcG9zdGZpeCA6IHN0ZDo6c3RyaW5nKCk7CisgIHJldHVybiBwb3N0Zml4ID8gKnBvc3RmaXggOiBzdGQ6OnN0cmluZygpOworfQorCitzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0RnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4KAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAoreworICBjbVByb3AgcG9zdGZpeCA9IG51bGxwdHI7CisgIGlmICghY29uZmlnLmVtcHR5KCkpIHsKKyAgICBzdGQ6OnN0cmluZyBjb25maWdQcm9wID0gY21TdHJDYXQoIkZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSk7CisgICAgcG9zdGZpeCA9IHRoaXMtPkdldFByb3BlcnR5KGNvbmZpZ1Byb3ApOworCisgICAgaWYgKCF0aGlzLT5Jc0ltcG9ydGVkKCkgJiYgcG9zdGZpeCAmJgorICAgICAgICAodGhpcy0+SXNGcmFtZXdvcmtPbkFwcGxlKCkgJiYKKyAgICAgICAgICFHZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSkgeworICAgICAgcG9zdGZpeCA9IG51bGxwdHI7CisgICAgfQorICB9CisgIHJldHVybiBwb3N0Zml4ID8gKnBvc3RmaXggOiBzdGQ6OnN0cmluZygpOwogfQogCiBjb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0RmlsZVByZWZpeEludGVybmFsKApAQCAtNTc5LDcgKzYyMiw3IEBACiAgIH0KIAogICAvLyBDb21wdXRlIHByZWZpeCB2YWx1ZS4KLSAgY29uc3QgY2hhciogdGFyZ2V0UHJlZml4ID0KKyAgY21Qcm9wIHRhcmdldFByZWZpeCA9CiAgICAgKGlzSW1wb3J0ZWRMaWJyYXJ5QXJ0aWZhY3QgPyB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JUX1BSRUZJWCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLT5HZXRQcm9wZXJ0eSgiUFJFRklYIikpOwogCkBAIC01ODcsMTcgKzYzMCwxNyBAQAogICAgIGNvbnN0IGNoYXIqIHByZWZpeFZhciA9IHRoaXMtPlRhcmdldC0+R2V0UHJlZml4VmFyaWFibGVJbnRlcm5hbChhcnRpZmFjdCk7CiAgICAgaWYgKCFsYW5ndWFnZS5lbXB0eSgpICYmIHByZWZpeFZhciAmJiAqcHJlZml4VmFyKSB7CiAgICAgICBzdGQ6OnN0cmluZyBsYW5nUHJlZml4ID0gcHJlZml4VmFyICsgc3RkOjpzdHJpbmcoIl8iKSArIGxhbmd1YWdlOwotICAgICAgdGFyZ2V0UHJlZml4ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24obGFuZ1ByZWZpeCk7CisgICAgICB0YXJnZXRQcmVmaXggPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKGxhbmdQcmVmaXgpOwogICAgIH0KIAogICAgIC8vIGlmIHRoZXJlIGlzIG5vIHByZWZpeCBvbiB0aGUgdGFyZ2V0IG5vciBzcGVjaWZpYyBsYW5ndWFnZQogICAgIC8vIHVzZSB0aGUgY21ha2UgZGVmaW5pdGlvbi4KICAgICBpZiAoIXRhcmdldFByZWZpeCAmJiBwcmVmaXhWYXIpIHsKLSAgICAgIHRhcmdldFByZWZpeCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHByZWZpeFZhcik7CisgICAgICB0YXJnZXRQcmVmaXggPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKHByZWZpeFZhcik7CiAgICAgfQogICB9CiAKLSAgcmV0dXJuIHRhcmdldFByZWZpeDsKKyAgcmV0dXJuIHRhcmdldFByZWZpeCA/IHRhcmdldFByZWZpeC0+Y19zdHIoKSA6IG51bGxwdHI7CiB9CiBjb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0RmlsZVN1ZmZpeEludGVybmFsKAogICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLCBjbVN0YXRlRW51bXM6OkFydGlmYWN0VHlwZSBhcnRpZmFjdCwKQEAgLTYyOSw3ICs2NzIsNyBAQAogICB9CiAKICAgLy8gQ29tcHV0ZSBzdWZmaXggdmFsdWUuCi0gIGNvbnN0IGNoYXIqIHRhcmdldFN1ZmZpeCA9CisgIGNtUHJvcCB0YXJnZXRTdWZmaXggPQogICAgIChpc0ltcG9ydGVkTGlicmFyeUFydGlmYWN0ID8gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVF9TVUZGSVgiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy0+R2V0UHJvcGVydHkoIlNVRkZJWCIpKTsKIApAQCAtNjM3LDE3ICs2ODAsMTcgQEAKICAgICBjb25zdCBjaGFyKiBzdWZmaXhWYXIgPSB0aGlzLT5UYXJnZXQtPkdldFN1ZmZpeFZhcmlhYmxlSW50ZXJuYWwoYXJ0aWZhY3QpOwogICAgIGlmICghbGFuZ3VhZ2UuZW1wdHkoKSAmJiBzdWZmaXhWYXIgJiYgKnN1ZmZpeFZhcikgewogICAgICAgc3RkOjpzdHJpbmcgbGFuZ1N1ZmZpeCA9IHN1ZmZpeFZhciArIHN0ZDo6c3RyaW5nKCJfIikgKyBsYW5ndWFnZTsKLSAgICAgIHRhcmdldFN1ZmZpeCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGxhbmdTdWZmaXgpOworICAgICAgdGFyZ2V0U3VmZml4ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZihsYW5nU3VmZml4KTsKICAgICB9CiAKICAgICAvLyBpZiB0aGVyZSBpcyBubyBzdWZmaXggb24gdGhlIHRhcmdldCBub3Igc3BlY2lmaWMgbGFuZ3VhZ2UKICAgICAvLyB1c2UgdGhlIGNtYWtlIGRlZmluaXRpb24uCiAgICAgaWYgKCF0YXJnZXRTdWZmaXggJiYgc3VmZml4VmFyKSB7Ci0gICAgICB0YXJnZXRTdWZmaXggPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihzdWZmaXhWYXIpOworICAgICAgdGFyZ2V0U3VmZml4ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZihzdWZmaXhWYXIpOwogICAgIH0KICAgfQogCi0gIHJldHVybiB0YXJnZXRTdWZmaXg7CisgIHJldHVybiB0YXJnZXRTdWZmaXggPyB0YXJnZXRTdWZmaXgtPmNfc3RyKCkgOiBudWxscHRyOwogfQogCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpDbGVhclNvdXJjZXNDYWNoZSgpCkBAIC02NTYsNiArNjk5LDcgQEAKICAgdGhpcy0+S2luZGVkU291cmNlc01hcC5jbGVhcigpOwogICB0aGlzLT5MaW5rSW1wbGVtZW50YXRpb25MYW5ndWFnZUlzQ29udGV4dERlcGVuZGVudCA9IHRydWU7CiAgIHRoaXMtPk9iamVjdHMuY2xlYXIoKTsKKyAgdGhpcy0+VmlzaXRlZENvbmZpZ3NGb3JPYmplY3RzLmNsZWFyKCk7CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkFkZFNvdXJjZUNvbW1vbihjb25zdCBzdGQ6OnN0cmluZyYgc3JjLCBib29sIGJlZm9yZSkKQEAgLTcwOSw5ICs3NTMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlSW1wb3J0ZWQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSkKIHsKLSAgaWYgKGNvbnN0IGNoYXIqIGRpcnMgPQorICBpZiAoY21Qcm9wIGRpcnMgPQogICAgICAgICBkZXBUZ3QtPkdldFByb3BlcnR5KCJJTlRFUkZBQ0VfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMiKSkgewotICAgIGNtRXhwYW5kTGlzdChjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKGRpcnMsIGxnLCBjb25maWcsIGhlYWRUYXJnZXQsCisgICAgY21FeHBhbmRMaXN0KGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKmRpcnMsIGxnLCBjb25maWcsIGhlYWRUYXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFnQ2hlY2tlciwgZGVwVGd0LCBsYW5ndWFnZSksCiAgICAgICAgICAgICAgICAgIHJlc3VsdCk7CiAgIH0KQEAgLTcxOSw5ICs3NjMsOCBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBkaXJzID0KLSAgICAgICAgZGVwVGd0LT5HZXRQcm9wZXJ0eSgiSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMiKSkgewotICAgIGNtRXhwYW5kTGlzdChjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKGRpcnMsIGxnLCBjb25maWcsIGhlYWRUYXJnZXQsCisgIGlmIChjbVByb3AgZGlycyA9IGRlcFRndC0+R2V0UHJvcGVydHkoIklOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTIikpIHsKKyAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgqZGlycywgbGcsIGNvbmZpZywgaGVhZFRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYWdDaGVja2VyLCBkZXBUZ3QsIGxhbmd1YWdlKSwKICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKICAgfQpAQCAtNzQ1LDcgKzc4OCw3IEBACiB7CiAgIElNUExFTUVOVF9WSVNJVChTb3VyY2VLaW5kT2JqZWN0U291cmNlKTsKIAotICBpZiAoIXRoaXMtPk9iamVjdHMuZW1wdHkoKSkgeworICBpZiAodGhpcy0+VmlzaXRlZENvbmZpZ3NGb3JPYmplY3RzLmNvdW50KGNvbmZpZykpIHsKICAgICByZXR1cm47CiAgIH0KIApAQCAtNzU0LDMzICs3OTcsMzUgQEAKICAgfQogCiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Db21wdXRlT2JqZWN0RmlsZW5hbWVzKHRoaXMtPk9iamVjdHMsIHRoaXMpOworICB0aGlzLT5WaXNpdGVkQ29uZmlnc0Zvck9iamVjdHMuaW5zZXJ0KGNvbmZpZyk7CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVPYmplY3RNYXBwaW5nKCkKIHsKLSAgaWYgKCF0aGlzLT5PYmplY3RzLmVtcHR5KCkpIHsKKyAgYXV0byBjb25zdCYgY29uZmlncyA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGNvbmZpZ1NldChjb25maWdzLmJlZ2luKCksIGNvbmZpZ3MuZW5kKCkpOworICBpZiAoY29uZmlnU2V0ID09IHRoaXMtPlZpc2l0ZWRDb25maWdzRm9yT2JqZWN0cykgewogICAgIHJldHVybjsKICAgfQogCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlncyA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYyA6IGNvbmZpZ3MpIHsKICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBzb3VyY2VGaWxlczsKICAgICB0aGlzLT5HZXRPYmplY3RTb3VyY2VzKHNvdXJjZUZpbGVzLCBjKTsKICAgfQogfQogCi1jb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0RmVhdHVyZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CitjbVByb3AgY21HZW5lcmF0b3JUYXJnZXQ6OkdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgaWYgKCFjb25maWcuZW1wdHkoKSkgewogICAgIHN0ZDo6c3RyaW5nIGZlYXR1cmVDb25maWcgPQogICAgICAgY21TdHJDYXQoZmVhdHVyZSwgJ18nLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSk7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkoZmVhdHVyZUNvbmZpZykpIHsKKyAgICBpZiAoY21Qcm9wIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkoZmVhdHVyZUNvbmZpZykpIHsKICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAgIH0KLSAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkoZmVhdHVyZSkpIHsKKyAgaWYgKGNtUHJvcCB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KGZlYXR1cmUpKSB7CiAgICAgcmV0dXJuIHZhbHVlOwogICB9CiAgIHJldHVybiB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0RmVhdHVyZShmZWF0dXJlLCBjb25maWcpOwpAQCAtODA4LDEwICs4NTMsOSBAQAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNJUE9FbmFibGVkKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIGZlYXR1cmUgPSAiSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTiI7Ci0gIGNvbnN0IGJvb2wgcmVzdWx0ID0gY21Jc09uKHRoaXMtPkdldEZlYXR1cmUoZmVhdHVyZSwgY29uZmlnKSk7CisgIGNtUHJvcCBmZWF0dXJlID0gdGhpcy0+R2V0RmVhdHVyZSgiSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTiIsIGNvbmZpZyk7CiAKLSAgaWYgKCFyZXN1bHQpIHsKKyAgaWYgKCFjbUlzT24oZmVhdHVyZSkpIHsKICAgICAvLyAnSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTicgaXMgb2ZmLCBubyBuZWVkIHRvIGNoZWNrIHBvbGljaWVzCiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC05MDQsNiArOTQ4LDYxIEBACiAgIHJldHVybiBpdCAhPSB0aGlzLT5FeHBsaWNpdE9iamVjdE5hbWUuZW5kKCk7CiB9CiAKK0JUczxzdGQ6OnN0cmluZz4gY29uc3QqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkoCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKSBjb25zdAoreworICBzdGQ6OnN0cmluZyBrZXkgPSBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSwgJy0nLCBsYW5nKTsKKyAgYXV0byBsYW5nU3RhbmRhcmRJdGVyID0gdGhpcy0+TGFuZ3VhZ2VTdGFuZGFyZE1hcC5maW5kKGtleSk7CisgIGlmIChsYW5nU3RhbmRhcmRJdGVyICE9IHRoaXMtPkxhbmd1YWdlU3RhbmRhcmRNYXAuZW5kKCkpIHsKKyAgICByZXR1cm4gJmxhbmdTdGFuZGFyZEl0ZXItPnNlY29uZDsKKyAgfQorCisgIHJldHVybiB0aGlzLT5UYXJnZXQtPkdldExhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0eSgKKyAgICBjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIikpOworfQorCitjbVByb3AgY21HZW5lcmF0b3JUYXJnZXQ6OkdldExhbmd1YWdlU3RhbmRhcmQoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZykgY29uc3QKK3sKKyAgQlRzPHN0ZDo6c3RyaW5nPiBjb25zdCogbGFuZ3VhZ2VTdGFuZGFyZCA9CisgICAgdGhpcy0+R2V0TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5KGxhbmcsIGNvbmZpZyk7CisKKyAgaWYgKGxhbmd1YWdlU3RhbmRhcmQpIHsKKyAgICByZXR1cm4gJihsYW5ndWFnZVN0YW5kYXJkLT5WYWx1ZSk7CisgIH0KKworICByZXR1cm4gbnVsbHB0cjsKK30KKworY21Qcm9wIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQcm9wZXJ0eVdpdGhQYWlyZWRMYW5ndWFnZVN1cHBvcnQoCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBjb25zdCBjaGFyKiBzdWZmaXgpIGNvbnN0Cit7CisgIGNtUHJvcCBwcm9wZXJ0eVZhbHVlID0gdGhpcy0+VGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCBzdWZmaXgpKTsKKyAgaWYgKHByb3BlcnR5VmFsdWUgPT0gbnVsbHB0cikgeworICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCB1c2UgdGhlIHZhbHVlIHNldCBieSBhbm90aGVyIGxhbmd1YWdlLgorICAgIGlmIChsYW5nID09ICJPQkpDIikgeworICAgICAgcHJvcGVydHlWYWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5V2l0aFBhaXJlZExhbmd1YWdlU3VwcG9ydCgiQyIsIHN1ZmZpeCk7CisgICAgfSBlbHNlIGlmIChsYW5nID09ICJPQkpDWFgiIHx8IGxhbmcgPT0gIkNVREEiKSB7CisgICAgICBwcm9wZXJ0eVZhbHVlID0KKyAgICAgICAgdGhpcy0+R2V0UHJvcGVydHlXaXRoUGFpcmVkTGFuZ3VhZ2VTdXBwb3J0KCJDWFgiLCBzdWZmaXgpOworICAgIH0KKyAgfQorICByZXR1cm4gcHJvcGVydHlWYWx1ZTsKK30KKworY21Qcm9wIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMYW5ndWFnZUV4dGVuc2lvbnMoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0Cit7CisgIHJldHVybiB0aGlzLT5HZXRQcm9wZXJ0eVdpdGhQYWlyZWRMYW5ndWFnZVN1cHBvcnQobGFuZywgIl9FWFRFTlNJT05TIik7Cit9CisKK2Jvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OkdldExhbmd1YWdlU3RhbmRhcmRSZXF1aXJlZCgKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0Cit7CisgIGNtUHJvcCBwID0KKyAgICB0aGlzLT5HZXRQcm9wZXJ0eVdpdGhQYWlyZWRMYW5ndWFnZVN1cHBvcnQobGFuZywgIl9TVEFOREFSRF9SRVFVSVJFRCIpOworICByZXR1cm4gY21Jc09uKHApOworfQorCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRNb2R1bGVEZWZpbml0aW9uU291cmNlcygKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mIGRhdGEsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CkBAIC05MzQsNzUgKzEwMzMsMzMgQEAKICAgSU1QTEVNRU5UX1ZJU0lUKFNvdXJjZUtpbmRFeHRlcm5hbE9iamVjdCk7CiB9CiAKLXZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldEV4cGVjdGVkUmVzeEhlYWRlcnMoc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBoZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAotewotICBLaW5kZWRTb3VyY2VzIGNvbnN0JiBraW5kZWQgPSB0aGlzLT5HZXRLaW5kZWRTb3VyY2VzKGNvbmZpZyk7Ci0gIGhlYWRlcnMgPSBraW5kZWQuRXhwZWN0ZWRSZXN4SGVhZGVyczsKLX0KLQotdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6R2V0UmVzeFNvdXJjZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAotewotICBJTVBMRU1FTlRfVklTSVQoU291cmNlS2luZFJlc3gpOwotfQotCi12b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRBcHBNYW5pZmVzdChzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0Ci17Ci0gIElNUExFTUVOVF9WSVNJVChTb3VyY2VLaW5kQXBwTWFuaWZlc3QpOwotfQotCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRNYW5pZmVzdHMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgSU1QTEVNRU5UX1ZJU0lUKFNvdXJjZUtpbmRNYW5pZmVzdCk7CiB9CiAKLXZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldENlcnRpZmljYXRlcyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAotewotICBJTVBMRU1FTlRfVklTSVQoU291cmNlS2luZENlcnRpZmljYXRlKTsKLX0KLQotdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6R2V0RXhwZWN0ZWRYYW1sSGVhZGVycyhzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGhlYWRlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0Ci17Ci0gIEtpbmRlZFNvdXJjZXMgY29uc3QmIGtpbmRlZCA9IHRoaXMtPkdldEtpbmRlZFNvdXJjZXMoY29uZmlnKTsKLSAgaGVhZGVycyA9IGtpbmRlZC5FeHBlY3RlZFhhbWxIZWFkZXJzOwotfQotCi12b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRFeHBlY3RlZFhhbWxTb3VyY2VzKHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgc3JjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKLXsKLSAgS2luZGVkU291cmNlcyBjb25zdCYga2luZGVkID0gdGhpcy0+R2V0S2luZGVkU291cmNlcyhjb25maWcpOwotICBzcmNzID0ga2luZGVkLkV4cGVjdGVkWGFtbFNvdXJjZXM7Ci19Ci0KIHN0ZDo6c2V0PGNtTGlua0l0ZW0+IGNvbnN0JiBjbUdlbmVyYXRvclRhcmdldDo6R2V0VXRpbGl0eUl0ZW1zKCkgY29uc3QKIHsKICAgaWYgKCF0aGlzLT5VdGlsaXR5SXRlbXNEb25lKSB7CiAgICAgdGhpcy0+VXRpbGl0eUl0ZW1zRG9uZSA9IHRydWU7Ci0gICAgc3RkOjpzZXQ8QlQ8c3RkOjpzdHJpbmc+PiBjb25zdCYgdXRpbGl0aWVzID0gdGhpcy0+R2V0VXRpbGl0aWVzKCk7Ci0gICAgZm9yIChCVDxzdGQ6OnN0cmluZz4gY29uc3QmIGkgOiB1dGlsaXRpZXMpIHsKKyAgICBzdGQ6OnNldDxCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+Pj4gY29uc3QmIHV0aWxpdGllcyA9CisgICAgICB0aGlzLT5HZXRVdGlsaXRpZXMoKTsKKyAgICBmb3IgKEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+IGNvbnN0JiBpIDogdXRpbGl0aWVzKSB7CiAgICAgICBpZiAoY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0KLSAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5GaW5kR2VuZXJhdG9yVGFyZ2V0VG9Vc2UoaS5WYWx1ZSkpIHsKLSAgICAgICAgdGhpcy0+VXRpbGl0eUl0ZW1zLmluc2VydChjbUxpbmtJdGVtKGd0LCBpLkJhY2t0cmFjZSkpOworICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkZpbmRHZW5lcmF0b3JUYXJnZXRUb1VzZShpLlZhbHVlLmZpcnN0KSkgeworICAgICAgICB0aGlzLT5VdGlsaXR5SXRlbXMuaW5zZXJ0KGNtTGlua0l0ZW0oZ3QsIGkuVmFsdWUuc2Vjb25kLCBpLkJhY2t0cmFjZSkpOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy0+VXRpbGl0eUl0ZW1zLmluc2VydChjbUxpbmtJdGVtKGkuVmFsdWUsIGkuQmFja3RyYWNlKSk7CisgICAgICAgIHRoaXMtPlV0aWxpdHlJdGVtcy5pbnNlcnQoCisgICAgICAgICAgY21MaW5rSXRlbShpLlZhbHVlLmZpcnN0LCBpLlZhbHVlLnNlY29uZCwgaS5CYWNrdHJhY2UpKTsKICAgICAgIH0KICAgICB9CiAgIH0KICAgcmV0dXJuIHRoaXMtPlV0aWxpdHlJdGVtczsKIH0KIAotdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6R2V0WGFtbFNvdXJjZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAotewotICBJTVBMRU1FTlRfVklTSVQoU291cmNlS2luZFhhbWwpOwotfQotCi1jb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKK2NvbnN0IHN0ZDo6c3RyaW5nJiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TG9jYXRpb24oCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBsb2NhdGlvbjsKICAgaWYgKHRoaXMtPklzSW1wb3J0ZWQoKSkgewpAQCAtMTAxMSw3ICsxMDY4LDcgQEAKICAgfSBlbHNlIHsKICAgICBsb2NhdGlvbiA9IHRoaXMtPkdldEZ1bGxQYXRoKGNvbmZpZywgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QpOwogICB9Ci0gIHJldHVybiBsb2NhdGlvbi5jX3N0cigpOworICByZXR1cm4gbG9jYXRpb247CiB9CiAKIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gY29uc3QmIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQcmVCdWlsZENvbW1hbmRzKCkKQEAgLTEwMzIsNiArMTA4OSwyNyBAQAogICByZXR1cm4gdGhpcy0+VGFyZ2V0LT5HZXRQb3N0QnVpbGRDb21tYW5kcygpOwogfQogCitib29sIGNtR2VuZXJhdG9yVGFyZ2V0OjpJc0luQnVpbGRTeXN0ZW0oKSBjb25zdAoreworICBpZiAodGhpcy0+SXNJbXBvcnRlZCgpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHN3aXRjaCAodGhpcy0+VGFyZ2V0LT5HZXRUeXBlKCkpIHsKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk6CisgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgorICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlk6CisgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6CisgICAgY2FzZSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQ6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlk6CisgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVOS05PV05fTElCUkFSWToKKyAgICAgIGJyZWFrOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNJbXBvcnRlZCgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5UYXJnZXQtPklzSW1wb3J0ZWQoKTsKQEAgLTEwNDIsMTcgKzExMjAsMjMgQEAKICAgcmV0dXJuIHRoaXMtPlRhcmdldC0+SXNJbXBvcnRlZEdsb2JhbGx5VmlzaWJsZSgpOwogfQogCi1jb25zdCBjaGFyKiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TG9jYXRpb25Gb3JCdWlsZCgpIGNvbnN0Citib29sIGNtR2VuZXJhdG9yVGFyZ2V0OjpDYW5Db21waWxlU291cmNlcygpIGNvbnN0Cit7CisgIHJldHVybiB0aGlzLT5UYXJnZXQtPkNhbkNvbXBpbGVTb3VyY2VzKCk7Cit9CisKK2NvbnN0IHN0ZDo6c3RyaW5nJiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TG9jYXRpb25Gb3JCdWlsZCgpIGNvbnN0CiB7CiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBsb2NhdGlvbjsKICAgaWYgKHRoaXMtPklzSW1wb3J0ZWQoKSkgewogICAgIGxvY2F0aW9uID0gdGhpcy0+VGFyZ2V0LT5JbXBvcnRlZEdldEZ1bGxQYXRoKAogICAgICAgIiIsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0KTsKLSAgICByZXR1cm4gbG9jYXRpb24uY19zdHIoKTsKKyAgICByZXR1cm4gbG9jYXRpb247CiAgIH0KIAogICAvLyBOb3cgaGFuZGxlIHRoZSBkZXByZWNhdGVkIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBsb2NhdGlvbi4KLSAgbG9jYXRpb24gPSB0aGlzLT5HZXREaXJlY3RvcnkoKTsKKyAgc3RkOjpzdHJpbmcgY29uc3Qgbm9Db25maWc7CisgIGxvY2F0aW9uID0gdGhpcy0+R2V0RGlyZWN0b3J5KG5vQ29uZmlnKTsKICAgY29uc3QgY2hhciogY2ZnaWQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfQ0ZHX0lOVERJUiIpOwogICBpZiAoY2ZnaWQgJiYgc3RyY21wKGNmZ2lkLCAiLiIpICE9IDApIHsKICAgICBsb2NhdGlvbiArPSAiLyI7CkBAIC0xMDY4LDcgKzExNTIsNyBAQAogICB9CiAgIGxvY2F0aW9uICs9ICIvIjsKICAgbG9jYXRpb24gKz0gdGhpcy0+R2V0RnVsbE5hbWUoIiIsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0KTsKLSAgcmV0dXJuIGxvY2F0aW9uLmNfc3RyKCk7CisgIHJldHVybiBsb2NhdGlvbjsKIH0KIAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNTeXN0ZW1JbmNsdWRlRGlyZWN0b3J5KApAQCAtMTEyMyw3ICsxMjA3LDggQEAKIH0KIAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6TWF5YmVIYXZlSW50ZXJmYWNlUHJvcGVydHkoCi0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wLCBjbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0KiBjb250ZXh0KSBjb25zdAorICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwgY21HZW5lcmF0b3JFeHByZXNzaW9uQ29udGV4dCogY29udGV4dCwKKyAgYm9vbCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSkgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgY29uc3Qga2V5ID0gcHJvcCArICdAJyArIGNvbnRleHQtPkNvbmZpZzsKICAgYXV0byBpID0gdGhpcy0+TWF5YmVJbnRlcmZhY2VQcm9wZXJ0eUV4aXN0cy5maW5kKGtleSk7CkBAIC0xMTMzLDggKzEyMTgsOCBAQAogICAgIGJvb2wmIG1heWJlSW50ZXJmYWNlUHJvcCA9IGktPnNlY29uZDsKIAogICAgIC8vIElmIHRoaXMgdGFyZ2V0IGl0c2VsZiBoYXMgYSBub24tZW1wdHkgcHJvcGVydHkgdmFsdWUsIHdlIGFyZSBkb25lLgotICAgIGNvbnN0IGNoYXIqIHAgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKTsKLSAgICBtYXliZUludGVyZmFjZVByb3AgPSBwICYmICpwOworICAgIGNtUHJvcCBwID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7CisgICAgbWF5YmVJbnRlcmZhY2VQcm9wID0gY21Ob25lbXB0eShwKTsKIAogICAgIC8vIE90aGVyd2lzZSwgcmVjdXJzZSB0byBpbnRlcmZhY2UgZGVwZW5kZW5jaWVzLgogICAgIGlmICghbWF5YmVJbnRlcmZhY2VQcm9wKSB7CkBAIC0xMTQyLDcgKzEyMjcsNyBAQAogICAgICAgICBjb250ZXh0LT5IZWFkVGFyZ2V0ID8gY29udGV4dC0+SGVhZFRhcmdldCA6IHRoaXM7CiAgICAgICBpZiAoY21MaW5rSW50ZXJmYWNlTGlicmFyaWVzIGNvbnN0KiBpZmFjZSA9CiAgICAgICAgICAgICB0aGlzLT5HZXRMaW5rSW50ZXJmYWNlTGlicmFyaWVzKGNvbnRleHQtPkNvbmZpZywgaGVhZFRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpKSB7CiAgICAgICAgIGlmIChpZmFjZS0+SGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbikgewogICAgICAgICAgIC8vIFdpdGggYSBkaWZmZXJlbnQgaGVhZCB0YXJnZXQgd2UgbWF5IGdldCB0byBhIGxpYnJhcnkgd2l0aAogICAgICAgICAgIC8vIHRoaXMgaW50ZXJmYWNlIHByb3BlcnR5LgpAQCAtMTE1Miw3ICsxMjM3LDggQEAKICAgICAgICAgICAvLyBoZWFkIHRhcmdldCwgc28gd2UgY2FuIGZvbGxvdyB0aGVtLgogICAgICAgICAgIGZvciAoY21MaW5rSXRlbSBjb25zdCYgbGliIDogaWZhY2UtPkxpYnJhcmllcykgewogICAgICAgICAgICAgaWYgKGxpYi5UYXJnZXQgJiYKLSAgICAgICAgICAgICAgICBsaWIuVGFyZ2V0LT5NYXliZUhhdmVJbnRlcmZhY2VQcm9wZXJ0eShwcm9wLCBjb250ZXh0KSkgeworICAgICAgICAgICAgICAgIGxpYi5UYXJnZXQtPk1heWJlSGF2ZUludGVyZmFjZVByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgcHJvcCwgY29udGV4dCwgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpKSB7CiAgICAgICAgICAgICAgIG1heWJlSW50ZXJmYWNlUHJvcCA9IHRydWU7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTE2NiwxMiArMTI1MiwxNCBAQAogCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6RXZhbHVhdGVJbnRlcmZhY2VQcm9wZXJ0eSgKICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCi0gIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXJQYXJlbnQpIGNvbnN0CisgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXJQYXJlbnQsCisgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpIGNvbnN0CiB7CiAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKIAogICAvLyBJZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgYXBwZWFyIHRyYW5zaXRpdmVseSBhdCBhbGwsIHdlIGFyZSBkb25lLgotICBpZiAoIXRoaXMtPk1heWJlSGF2ZUludGVyZmFjZVByb3BlcnR5KHByb3AsIGNvbnRleHQpKSB7CisgIGlmICghdGhpcy0+TWF5YmVIYXZlSW50ZXJmYWNlUHJvcGVydHkocHJvcCwgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZV9yZXF1aXJlbWVudHNfb25seSkpIHsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKQEAgLTExODcsNyArMTI3NSw2IEBACiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIGNhc2UgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6Q1lDTElDX1JFRkVSRU5DRToKICAgICAgIC8vIE5vIGVycm9yLiBXZSBqdXN0IHNraXAgY3ljbGljIHJlZmVyZW5jZXMuCi0gICAgICByZXR1cm4gcmVzdWx0OwogICAgIGNhc2UgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlcjo6QUxSRUFEWV9TRUVOOgogICAgICAgLy8gTm8gZXJyb3IuIFdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoaXMgdHJhbnNpdGl2ZSBwcm9wZXJ0eS4KICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMTk4LDEzICsxMjg1LDE2IEBACiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0ID0KICAgICBjb250ZXh0LT5IZWFkVGFyZ2V0ID8gY29udGV4dC0+SGVhZFRhcmdldCA6IHRoaXM7CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHAgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKSkgeworICBpZiAoY21Qcm9wIHAgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKSkgewogICAgIHJlc3VsdCA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbk5vZGU6OkV2YWx1YXRlRGVwZW5kZW50RXhwcmVzc2lvbigKLSAgICAgIHAsIGNvbnRleHQtPkxHLCBjb250ZXh0LCBoZWFkVGFyZ2V0LCAmZGFnQ2hlY2tlciwgdGhpcyk7CisgICAgICAqcCwgY29udGV4dC0+TEcsIGNvbnRleHQsIGhlYWRUYXJnZXQsICZkYWdDaGVja2VyLCB0aGlzKTsKICAgfQogCi0gIGlmIChjbUxpbmtJbnRlcmZhY2VMaWJyYXJpZXMgY29uc3QqIGlmYWNlID0KLSAgICAgICAgdGhpcy0+R2V0TGlua0ludGVyZmFjZUxpYnJhcmllcyhjb250ZXh0LT5Db25maWcsIGhlYWRUYXJnZXQsIHRydWUpKSB7CisgIGlmIChjbUxpbmtJbnRlcmZhY2VMaWJyYXJpZXMgY29uc3QqIGlmYWNlID0gdGhpcy0+R2V0TGlua0ludGVyZmFjZUxpYnJhcmllcygKKyAgICAgICAgY29udGV4dC0+Q29uZmlnLCBoZWFkVGFyZ2V0LCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSkpIHsKKyAgICBjb250ZXh0LT5IYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uID0KKyAgICAgIGNvbnRleHQtPkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24gfHwKKyAgICAgIGlmYWNlLT5IYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uOwogICAgIGZvciAoY21MaW5rSXRlbSBjb25zdCYgbGliIDogaWZhY2UtPkxpYnJhcmllcykgewogICAgICAgLy8gQnJva2VuIGNvZGUgY2FuIGhhdmUgYSB0YXJnZXQgaW4gaXRzIG93biBsaW5rIGludGVyZmFjZS4KICAgICAgIC8vIERvbid0IGZvbGxvdyBzdWNoIGxpbmsgaW50ZXJmYWNlIGVudHJpZXMgc28gYXMgbm90IHRvIGNyZWF0ZSBhCkBAIC0xMjE4LDggKzEzMDgsOCBAQAogICAgICAgICAgIGNvbnRleHQtPkV2YWx1YXRlRm9yQnVpbGRzeXN0ZW0sIGNvbnRleHQtPkJhY2t0cmFjZSwKICAgICAgICAgICBjb250ZXh0LT5MYW5ndWFnZSk7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGxpYlJlc3VsdCA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6U3RyaXBFbXB0eUxpc3RFbGVtZW50cygKLSAgICAgICAgICBsaWIuVGFyZ2V0LT5FdmFsdWF0ZUludGVyZmFjZVByb3BlcnR5KHByb3AsICZsaWJDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIpKTsKKyAgICAgICAgICBsaWIuVGFyZ2V0LT5FdmFsdWF0ZUludGVyZmFjZVByb3BlcnR5KHByb3AsICZsaWJDb250ZXh0LCAmZGFnQ2hlY2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSk7CiAgICAgICAgIGlmICghbGliUmVzdWx0LmVtcHR5KCkpIHsKICAgICAgICAgICBpZiAocmVzdWx0LmVtcHR5KCkpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bW92ZShsaWJSZXN1bHQpOwpAQCAtMTI0MywxNCArMTMzMyw5OSBAQAogfQogCiBuYW1lc3BhY2Ugeworc3RkOjpzdHJpbmcgQWRkU3dpZnRJbnRlcmZhY2VJbmNsdWRlRGlyZWN0b3JpZXMoCisgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiByb290LCBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyKiBjb250ZXh0KQoreworICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyIGRhZ3sgdGFyZ2V0LT5HZXRCYWNrdHJhY2UoKSwgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN3aWZ0X01PRFVMRV9ESVJFQ1RPUlkiLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCB9OworICBzd2l0Y2ggKGRhZy5DaGVjaygpKSB7CisgICAgY2FzZSBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpTRUxGX1JFRkVSRU5DRToKKyAgICAgIGRhZy5SZXBvcnRFcnJvcihudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICIkPFRBUkdFVF9QUk9QRVJUWToiICsgdGFyZ2V0LT5HZXROYW1lKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgIixTd2lmdF9NT0RVTEVfRElSRUNUT1JZPiIpOworICAgICAgQ01fRkFMTFRIUk9VR0g7CisgICAgY2FzZSBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpDWUNMSUNfUkVGRVJFTkNFOgorICAgICAgLy8gTm8gZXJyb3IuIFdlIGp1c3Qgc2tpcCBjeWNsaWMgcmVmZXJlbmNlcy4KKyAgICBjYXNlIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXI6OkFMUkVBRFlfU0VFTjoKKyAgICAgIC8vIE5vIGVycm9yLiBXZSBoYXZlIGFscmVhZHkgc2VlbiB0aGlzIHRyYW5zaXRpdmUgcHJvcGVydHkuCisgICAgICByZXR1cm4gIiI7CisgICAgY2FzZSBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyOjpEQUc6CisgICAgICBicmVhazsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIGRpcmVjdG9yaWVzOworICBpZiAoY29uc3QgYXV0byogaW50ZXJmYWNlID0KKyAgICAgICAgdGFyZ2V0LT5HZXRMaW5rSW50ZXJmYWNlTGlicmFyaWVzKGNvbmZpZywgcm9vdCwgdHJ1ZSkpIHsKKyAgICBmb3IgKGNvbnN0IGNtTGlua0l0ZW0mIGxpYnJhcnkgOiBpbnRlcmZhY2UtPkxpYnJhcmllcykgeworICAgICAgaWYgKGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBkZXBlbmRlbmN5ID0gbGlicmFyeS5UYXJnZXQpIHsKKyAgICAgICAgaWYgKGNtOjpjb250YWlucyhkZXBlbmRlbmN5LT5HZXRBbGxDb25maWdDb21waWxlTGFuZ3VhZ2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlN3aWZ0IikpIHsKKyAgICAgICAgICBzdGQ6OnN0cmluZyB2YWx1ZSA9CisgICAgICAgICAgICBkZXBlbmRlbmN5LT5HZXRTYWZlUHJvcGVydHkoIlN3aWZ0X01PRFVMRV9ESVJFQ1RPUlkiKTsKKyAgICAgICAgICBpZiAodmFsdWUuZW1wdHkoKSkgeworICAgICAgICAgICAgdmFsdWUgPQorICAgICAgICAgICAgICBkZXBlbmRlbmN5LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCFkaXJlY3Rvcmllcy5lbXB0eSgpKSB7CisgICAgICAgICAgICBkaXJlY3RvcmllcyArPSAiOyI7CisgICAgICAgICAgfQorICAgICAgICAgIGRpcmVjdG9yaWVzICs9IHZhbHVlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBkaXJlY3RvcmllczsKK30KKwordm9pZCBBZGRTd2lmdEltcGxpY2l0SW5jbHVkZURpcmVjdG9yaWVzKAorICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMmIGVudHJpZXMpCit7CisgIGlmIChjb25zdCBhdXRvKiBsaWJyYXJpZXMgPSB0YXJnZXQtPkdldExpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllcyhjb25maWcpKSB7CisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciBkYWd7IHRhcmdldC0+R2V0QmFja3RyYWNlKCksIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN3aWZ0X01PRFVMRV9ESVJFQ1RPUlkiLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyIH07CisKKyAgICBmb3IgKGNvbnN0IGNtTGlua0ltcGxJdGVtJiBsaWJyYXJ5IDogbGlicmFyaWVzLT5MaWJyYXJpZXMpIHsKKyAgICAgIGlmIChjb25zdCBjbUdlbmVyYXRvclRhcmdldCogZGVwZW5kZW5jeSA9IGxpYnJhcnkuVGFyZ2V0KSB7CisgICAgICAgIGlmICghZGVwZW5kZW5jeS0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY206OmNvbnRhaW5zKGRlcGVuZGVuY3ktPkdldEFsbENvbmZpZ0NvbXBpbGVMYW5ndWFnZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU3dpZnQiKSkgeworICAgICAgICAgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnkgZW50cnl7IGxpYnJhcnksIGxpYnJhcnkuQmFja3RyYWNlIH07CisKKyAgICAgICAgICBpZiAoY21Qcm9wIHZhbCA9IGRlcGVuZGVuY3ktPkdldFByb3BlcnR5KCJTd2lmdF9NT0RVTEVfRElSRUNUT1JZIikpIHsKKyAgICAgICAgICAgIGVudHJ5LlZhbHVlcy5lbXBsYWNlX2JhY2soKnZhbCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LlZhbHVlcy5lbXBsYWNlX2JhY2soCisgICAgICAgICAgICAgIGRlcGVuZGVuY3ktPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgY21FeHBhbmRMaXN0KEFkZFN3aWZ0SW50ZXJmYWNlSW5jbHVkZURpcmVjdG9yaWVzKHRhcmdldCwgZGVwZW5kZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLCAmZGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuVmFsdWVzKTsKKworICAgICAgICAgIGVudHJpZXMuRW50cmllcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGVudHJ5KSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKwogdm9pZCBBZGRJbnRlcmZhY2VFbnRyaWVzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4mIGVudHJpZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzJiBlbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkgPSB0cnVlKQogewogICBpZiAoY21MaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMgY29uc3QqIGltcGwgPQogICAgICAgICBoZWFkVGFyZ2V0LT5HZXRMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoY29uZmlnKSkgeworICAgIGVudHJpZXMuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IGltcGwtPkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb247CiAgICAgZm9yIChjbUxpbmtJbXBsSXRlbSBjb25zdCYgbGliIDogaW1wbC0+TGlicmFyaWVzKSB7CiAgICAgICBpZiAobGliLlRhcmdldCkgewogICAgICAgICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGVlKGxpYiwgbGliLkJhY2t0cmFjZSk7CkBAIC0xMjYwLDExICsxNDM1LDExIEBACiAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQgY29udGV4dCgKICAgICAgICAgICBoZWFkVGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLCBjb25maWcsIGZhbHNlLCBoZWFkVGFyZ2V0LAogICAgICAgICAgIGhlYWRUYXJnZXQsIHRydWUsIGxpYi5CYWNrdHJhY2UsIGxhbmcpOwotICAgICAgICBjbUV4cGFuZExpc3QoCi0gICAgICAgICAgbGliLlRhcmdldC0+RXZhbHVhdGVJbnRlcmZhY2VQcm9wZXJ0eShwcm9wLCAmY29udGV4dCwgZGFnQ2hlY2tlciksCi0gICAgICAgICAgZWUuVmFsdWVzKTsKKyAgICAgICAgY21FeHBhbmRMaXN0KGxpYi5UYXJnZXQtPkV2YWx1YXRlSW50ZXJmYWNlUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgIHByb3AsICZjb250ZXh0LCBkYWdDaGVja2VyLCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSksCisgICAgICAgICAgICAgICAgICAgICBlZS5WYWx1ZXMpOwogICAgICAgICBlZS5Db250ZXh0RGVwZW5kZW50ID0gY29udGV4dC5IYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uOwotICAgICAgICBlbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoZWUpKTsKKyAgICAgICAgZW50cmllcy5FbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoZWUpKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTEyNzMsMTAgKzE0NDgsMTEgQEAKIHZvaWQgQWRkT2JqZWN0RW50cmllcyhjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIqIGRhZ0NoZWNrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4mIGVudHJpZXMpCisgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzJiBlbnRyaWVzKQogewogICBpZiAoY21MaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMgY29uc3QqIGltcGwgPQogICAgICAgICBoZWFkVGFyZ2V0LT5HZXRMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoY29uZmlnKSkgeworICAgIGVudHJpZXMuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IGltcGwtPkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb247CiAgICAgZm9yIChjbUxpbmtJbXBsSXRlbSBjb25zdCYgbGliIDogaW1wbC0+TGlicmFyaWVzKSB7CiAgICAgICBpZiAobGliLlRhcmdldCAmJgogICAgICAgICAgIGxpYi5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6Ok9CSkVDVF9MSUJSQVJZKSB7CkBAIC0xMjk1LDIzICsxNDcxLDIzIEBACiAgICAgICAgIGlmIChjZ2UtPkdldEhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24oKSkgewogICAgICAgICAgIGVlLkNvbnRleHREZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGVudHJpZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShlZSkpOworICAgICAgICBlbnRyaWVzLkVudHJpZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShlZSkpOwogICAgICAgfQogICAgIH0KICAgfQogfQogCiBib29sIHByb2Nlc3NTb3VyY2VzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+JiBlbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMmIGVudHJpZXMsCiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4mIHNyY3MsCiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4mIHVuaXF1ZVNyY3MsCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVidWdTb3VyY2VzKQogewogICBjbU1ha2VmaWxlKiBtZiA9IHRndC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpOwogCi0gIGJvb2wgY29udGV4dERlcGVuZGVudCA9IGZhbHNlOworICBib29sIGNvbnRleHREZXBlbmRlbnQgPSBlbnRyaWVzLkhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb247CiAKLSAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5JiBlbnRyeSA6IGVudHJpZXMpIHsKKyAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5JiBlbnRyeSA6IGVudHJpZXMuRW50cmllcykgewogICAgIGlmIChlbnRyeS5Db250ZXh0RGVwZW5kZW50KSB7CiAgICAgICBjb250ZXh0RGVwZW5kZW50ID0gdHJ1ZTsKICAgICB9CkBAIC0xMzk2LDE0ICsxNTcyLDExIEBACiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVidWdQcm9wZXJ0aWVzOwotICBjb25zdCBjaGFyKiBkZWJ1Z1Byb3AgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIpOwotICBpZiAoZGVidWdQcm9wKSB7Ci0gICAgY21FeHBhbmRMaXN0KGRlYnVnUHJvcCwgZGVidWdQcm9wZXJ0aWVzKTsKLSAgfQorICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z1Byb3BlcnRpZXMpOwogCiAgIGJvb2wgZGVidWdTb3VyY2VzID0KLSAgICAhdGhpcy0+RGVidWdTb3VyY2VzRG9uZSAmJiBjbUNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIlNPVVJDRVMiKTsKKyAgICAhdGhpcy0+RGVidWdTb3VyY2VzRG9uZSAmJiBjbTo6Y29udGFpbnMoZGVidWdQcm9wZXJ0aWVzLCAiU09VUkNFUyIpOwogCiAgIGlmICh0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldENvbmZpZ3VyZURvbmVDTVAwMDI2KCkpIHsKICAgICB0aGlzLT5EZWJ1Z1NvdXJjZXNEb25lID0gdHJ1ZTsKQEAgLTE0MTIsMTYgKzE1ODUsMTUgQEAKICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciBkYWdDaGVja2VyKHRoaXMsICJTT1VSQ0VTIiwgbnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOwogCi0gIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJpZXMgPQotICAgIEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKHRoaXMsIGNvbmZpZywgc3RkOjpzdHJpbmcoKSwgJmRhZ0NoZWNrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+U291cmNlRW50cmllcyk7CisgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cmllcyBlbnRyaWVzID0gRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXMoCisgICAgdGhpcywgY29uZmlnLCBzdGQ6OnN0cmluZygpLCAmZGFnQ2hlY2tlciwgdGhpcy0+U291cmNlRW50cmllcyk7CiAKICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiB1bmlxdWVTcmNzOwogICBib29sIGNvbnRleHREZXBlbmRlbnREaXJlY3RTb3VyY2VzID0KICAgICBwcm9jZXNzU291cmNlcyh0aGlzLCBlbnRyaWVzLCBmaWxlcywgdW5pcXVlU3JjcywgZGVidWdTb3VyY2VzKTsKIAogICAvLyBDb2xsZWN0IElOVEVSRkFDRV9TT1VSQ0VTIG9mIGFsbCBkaXJlY3QgbGluay1kZXBlbmRlbmNpZXMuCi0gIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGxpbmtJbnRlcmZhY2VTb3VyY2VzRW50cmllczsKKyAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzIGxpbmtJbnRlcmZhY2VTb3VyY2VzRW50cmllczsKICAgQWRkSW50ZXJmYWNlRW50cmllcyh0aGlzLCBjb25maWcsICJJTlRFUkZBQ0VfU09VUkNFUyIsIHN0ZDo6c3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIGxpbmtJbnRlcmZhY2VTb3VyY2VzRW50cmllcyk7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6c2l6ZV90eXBlIG51bUZpbGVzQmVmb3JlID0gZmlsZXMuc2l6ZSgpOwpAQCAtMTQzMiw3ICsxNjA0LDcgQEAKICAgYm9vbCBjb250ZXh0RGVwZW5kZW50T2JqZWN0cyA9IGZhbHNlOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OnNpemVfdHlwZSBudW1GaWxlc0JlZm9yZTIgPSBmaWxlcy5zaXplKCk7CiAgIGlmICh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgewotICAgIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGxpbmtPYmplY3RzRW50cmllczsKKyAgICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgbGlua09iamVjdHNFbnRyaWVzOwogICAgIEFkZE9iamVjdEVudHJpZXModGhpcywgY29uZmlnLCAmZGFnQ2hlY2tlciwgbGlua09iamVjdHNFbnRyaWVzKTsKICAgICBjb250ZXh0RGVwZW5kZW50T2JqZWN0cyA9IHByb2Nlc3NTb3VyY2VzKHRoaXMsIGxpbmtPYmplY3RzRW50cmllcywgZmlsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVTcmNzLCBkZWJ1Z1NvdXJjZXMpOwpAQCAtMTU2OCwxMCArMTc0MCwxNCBAQAogICAgIHN0ZDo6c3RyaW5nIGV4dCA9IGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzZi0+R2V0RXh0ZW5zaW9uKCkpOwogICAgIGlmIChzZi0+R2V0Q3VzdG9tQ29tbWFuZCgpKSB7CiAgICAgICBraW5kID0gU291cmNlS2luZEN1c3RvbUNvbW1hbmQ7CisgICAgICAvLyBYWFgoY2xhbmctdGlkeSk6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxNjUKKyAgICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKICAgICB9IGVsc2UgaWYgKHRoaXMtPlRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VVRJTElUWSkgewogICAgICAga2luZCA9IFNvdXJjZUtpbmRFeHRyYTsKICAgICB9IGVsc2UgaWYgKHRoaXMtPklzU291cmNlRmlsZVBhcnRPZlVuaXR5QmF0Y2goc2YtPlJlc29sdmVGdWxsUGF0aCgpKSkgewogICAgICAga2luZCA9IFNvdXJjZUtpbmRVbml0eUJhdGNoZWQ7CisgICAgICAvLyBYWFgoY2xhbmctdGlkeSk6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxNjUKKyAgICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKICAgICB9IGVsc2UgaWYgKHNmLT5HZXRQcm9wZXJ0eUFzQm9vbCgiSEVBREVSX0ZJTEVfT05MWSIpKSB7CiAgICAgICBraW5kID0gU291cmNlS2luZEhlYWRlcjsKICAgICB9IGVsc2UgaWYgKHNmLT5HZXRQcm9wZXJ0eUFzQm9vbCgiRVhURVJOQUxfT0JKRUNUIikpIHsKQEAgLTE1OTAsMTQgKzE3NjYsNiBAQAogICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXh0ID09ICJyZXN4IikgewogICAgICAga2luZCA9IFNvdXJjZUtpbmRSZXN4OwotICAgICAgLy8gQnVpbGQgYW5kIHNhdmUgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgLmggZmlsZQotICAgICAgLy8gVGhpcyByZWxhdGlvbnNoaXAgd2lsbCBiZSB1c2VkIGxhdGVyIHdoZW4gYnVpbGRpbmcgdGhlIHByb2plY3QgZmlsZXMuCi0gICAgICAvLyBCb3RoIG5hbWVzIHdvdWxkIGhhdmUgYmVlbiBhdXRvIGdlbmVyYXRlZCBmcm9tIFZpc3VhbCBTdHVkaW8KLSAgICAgIC8vIHdoZXJlIHRoZSB1c2VyIHN1cHBsaWVkIHRoZSBmaWxlIG5hbWUgYW5kIFZpc3VhbCBTdHVkaW8KLSAgICAgIC8vIGFwcGVuZGVkIHRoZSBzdWZmaXguCi0gICAgICBzdGQ6OnN0cmluZyByZXN4ID0gc2YtPlJlc29sdmVGdWxsUGF0aCgpOwotICAgICAgc3RkOjpzdHJpbmcgaEZpbGVOYW1lID0gcmVzeC5zdWJzdHIoMCwgcmVzeC5maW5kX2xhc3Rfb2YoJy4nKSkgKyAiLmgiOwotICAgICAgZmlsZXMuRXhwZWN0ZWRSZXN4SGVhZGVycy5pbnNlcnQoaEZpbGVOYW1lKTsKICAgICB9IGVsc2UgaWYgKGV4dCA9PSAiYXBweG1hbmlmZXN0IikgewogICAgICAga2luZCA9IFNvdXJjZUtpbmRBcHBNYW5pZmVzdDsKICAgICB9IGVsc2UgaWYgKGV4dCA9PSAibWFuaWZlc3QiKSB7CkBAIC0xNjA2LDE2ICsxNzc0LDYgQEAKICAgICAgIGtpbmQgPSBTb3VyY2VLaW5kQ2VydGlmaWNhdGU7CiAgICAgfSBlbHNlIGlmIChleHQgPT0gInhhbWwiKSB7CiAgICAgICBraW5kID0gU291cmNlS2luZFhhbWw7Ci0gICAgICAvLyBCdWlsZCBhbmQgc2F2ZSB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyAuaCBhbmQgLmNwcCBmaWxlCi0gICAgICAvLyBUaGlzIHJlbGF0aW9uc2hpcCB3aWxsIGJlIHVzZWQgbGF0ZXIgd2hlbiBidWlsZGluZyB0aGUgcHJvamVjdCBmaWxlcy4KLSAgICAgIC8vIEJvdGggbmFtZXMgd291bGQgaGF2ZSBiZWVuIGF1dG8gZ2VuZXJhdGVkIGZyb20gVmlzdWFsIFN0dWRpbwotICAgICAgLy8gd2hlcmUgdGhlIHVzZXIgc3VwcGxpZWQgdGhlIGZpbGUgbmFtZSBhbmQgVmlzdWFsIFN0dWRpbwotICAgICAgLy8gYXBwZW5kZWQgdGhlIHN1ZmZpeC4KLSAgICAgIHN0ZDo6c3RyaW5nIHhhbWwgPSBzZi0+UmVzb2x2ZUZ1bGxQYXRoKCk7Ci0gICAgICBzdGQ6OnN0cmluZyBoRmlsZU5hbWUgPSB4YW1sICsgIi5oIjsKLSAgICAgIHN0ZDo6c3RyaW5nIGNwcEZpbGVOYW1lID0geGFtbCArICIuY3BwIjsKLSAgICAgIGZpbGVzLkV4cGVjdGVkWGFtbEhlYWRlcnMuaW5zZXJ0KGhGaWxlTmFtZSk7Ci0gICAgICBmaWxlcy5FeHBlY3RlZFhhbWxTb3VyY2VzLmluc2VydChjcHBGaWxlTmFtZSk7CiAgICAgfSBlbHNlIGlmIChoZWFkZXJfcmVnZXguZmluZChzZi0+UmVzb2x2ZUZ1bGxQYXRoKCkpKSB7CiAgICAgICBraW5kID0gU291cmNlS2luZEhlYWRlcjsKICAgICB9IGVsc2UgewpAQCAtMTY1MCw4ICsxODA4LDggQEAKIAogdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6Q29tcHV0ZUFsbENvbmZpZ1NvdXJjZXMoKSBjb25zdAogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKLSAgdGhpcy0+TWFrZWZpbGUtPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlncyA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIAogICBzdGQ6Om1hcDxjbVNvdXJjZUZpbGUgY29uc3QqLCBzaXplX3Q+IGluZGV4OwogCkBAIC0xNjczLDYgKzE4MzEsMzEgQEAKICAgfQogfQogCitzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldDo6QWxsQ29uZmlnU291cmNlPgorY21HZW5lcmF0b3JUYXJnZXQ6OkdldEFsbENvbmZpZ1NvdXJjZXMoU291cmNlS2luZCBraW5kKSBjb25zdAoreworICBzdGQ6OnZlY3RvcjxBbGxDb25maWdTb3VyY2U+IHJlc3VsdDsKKyAgZm9yIChBbGxDb25maWdTb3VyY2UgY29uc3QmIHNvdXJjZSA6IHRoaXMtPkdldEFsbENvbmZpZ1NvdXJjZXMoKSkgeworICAgIGlmIChzb3VyY2UuS2luZCA9PSBraW5kKSB7CisgICAgICByZXN1bHQucHVzaF9iYWNrKHNvdXJjZSk7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBjbUdlbmVyYXRvclRhcmdldDo6R2V0QWxsQ29uZmlnQ29tcGlsZUxhbmd1YWdlcygpIGNvbnN0Cit7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBsYW5ndWFnZXM7CisgIHN0ZDo6dmVjdG9yPEFsbENvbmZpZ1NvdXJjZT4gY29uc3QmIHNvdXJjZXMgPSB0aGlzLT5HZXRBbGxDb25maWdTb3VyY2VzKCk7CisgIGZvciAoQWxsQ29uZmlnU291cmNlIGNvbnN0JiBzaSA6IHNvdXJjZXMpIHsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZyA9IHNpLlNvdXJjZS0+R2V0T3JEZXRlcm1pbmVMYW5ndWFnZSgpOworICAgIGlmICghbGFuZy5lbXB0eSgpKSB7CisgICAgICBsYW5ndWFnZXMuZW1wbGFjZShsYW5nKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGxhbmd1YWdlczsKK30KKwogc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldENvbXBpbGVQREJOYW1lKAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewpAQCAtMTY4NSwxNCArMTg2OCwxNCBAQAogICAvLyBDaGVjayBmb3IgYSBwZXItY29uZmlndXJhdGlvbiBvdXRwdXQgZGlyZWN0b3J5IHRhcmdldCBwcm9wZXJ0eS4KICAgc3RkOjpzdHJpbmcgY29uZmlnVXBwZXIgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKICAgc3RkOjpzdHJpbmcgY29uZmlnUHJvcCA9IGNtU3RyQ2F0KCJDT01QSUxFX1BEQl9OQU1FXyIsIGNvbmZpZ1VwcGVyKTsKLSAgY29uc3QgY2hhciogY29uZmlnX25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShjb25maWdQcm9wKTsKLSAgaWYgKGNvbmZpZ19uYW1lICYmICpjb25maWdfbmFtZSkgewotICAgIHJldHVybiBwcmVmaXggKyBjb25maWdfbmFtZSArICIucGRiIjsKKyAgY21Qcm9wIGNvbmZpZ19uYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcCk7CisgIGlmIChjbU5vbmVtcHR5KGNvbmZpZ19uYW1lKSkgeworICAgIHJldHVybiBwcmVmaXggKyAqY29uZmlnX25hbWUgKyAiLnBkYiI7CiAgIH0KIAotICBjb25zdCBjaGFyKiBuYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoIkNPTVBJTEVfUERCX05BTUUiKTsKLSAgaWYgKG5hbWUgJiYgKm5hbWUpIHsKLSAgICByZXR1cm4gcHJlZml4ICsgbmFtZSArICIucGRiIjsKKyAgY21Qcm9wIG5hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIpOworICBpZiAoY21Ob25lbXB0eShuYW1lKSkgeworICAgIHJldHVybiBwcmVmaXggKyAqbmFtZSArICIucGRiIjsKICAgfQogCiAgIHJldHVybiAiIjsKQEAgLTE4MzgsNyArMjAyMSw3IEBACiAgICAgc3RkOjpzdHJpbmcgc2VwVmFyID0KICAgICAgIGNtU3RyQ2F0KCJDTUFLRV9TSEFSRURfTElCUkFSWV9SVU5USU1FXyIsIGxsLCAiX0ZMQUdfU0VQIik7CiAgICAgY29uc3QgY2hhciogc2VwID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oc2VwVmFyKTsKLSAgICBpZiAoc2VwICYmICpzZXApIHsKKyAgICBpZiAoY21Ob25lbXB0eShzZXApKSB7CiAgICAgICAvLyBUT0RPOiBBZGQgRUxGIGNoZWNrIHRvIEFCSSBkZXRlY3Rpb24gYW5kIGdldCByaWQgb2YKICAgICAgIC8vIENNQUtFX0VYRUNVVEFCTEVfRk9STUFULgogICAgICAgaWYgKGNvbnN0IGNoYXIqIGZtdCA9CkBAIC0xODc0LDEwICsyMDU3LDkgQEAKICAgICBpZiAodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgY29uc3QgY2hhciogaW5zdGFsbF9uYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoIklOU1RBTExfTkFNRV9ESVIiKTsKKyAgICBjbVByb3AgaW5zdGFsbF9uYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoIklOU1RBTExfTkFNRV9ESVIiKTsKICAgICBib29sIHVzZV9pbnN0YWxsX25hbWUgPSB0aGlzLT5NYWNPU1hVc2VJbnN0YWxsTmFtZURpcigpOwotICAgIGlmIChpbnN0YWxsX25hbWUgJiYgdXNlX2luc3RhbGxfbmFtZSAmJgotICAgICAgICBzdGQ6OnN0cmluZyhpbnN0YWxsX25hbWUpID09ICJAcnBhdGgiKSB7CisgICAgaWYgKGluc3RhbGxfbmFtZSAmJiB1c2VfaW5zdGFsbF9uYW1lICYmICppbnN0YWxsX25hbWUgPT0gIkBycGF0aCIpIHsKICAgICAgIGluc3RhbGxfbmFtZV9pc19ycGF0aCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChpbnN0YWxsX25hbWUgJiYgdXNlX2luc3RhbGxfbmFtZSkgewogICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTg5MCw3ICsyMDcyLDcgQEAKICAgICBpZiAoY21HZW5lcmF0b3JUYXJnZXQ6OkltcG9ydEluZm8gY29uc3QqIGluZm8gPQogICAgICAgICAgIHRoaXMtPkdldEltcG9ydEluZm8oY29uZmlnKSkgewogICAgICAgaWYgKCFpbmZvLT5Ob1NPTmFtZSAmJiAhaW5mby0+U09OYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgaWYgKGluZm8tPlNPTmFtZS5maW5kKCJAcnBhdGgvIikgPT0gMCkgeworICAgICAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGluZm8tPlNPTmFtZSwgIkBycGF0aC8iKSkgewogICAgICAgICAgIGluc3RhbGxfbmFtZV9pc19ycGF0aCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7CkBAIC0xOTMzLDcgKzIxMTUsNyBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGNvbnN0IGNoYXIqIG1hY29zeF9ycGF0aF9zdHIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiTUFDT1NYX1JQQVRIIik7CisgIGNtUHJvcCBtYWNvc3hfcnBhdGhfc3RyID0gdGhpcy0+R2V0UHJvcGVydHkoIk1BQ09TWF9SUEFUSCIpOwogICBpZiAobWFjb3N4X3JwYXRoX3N0cikgewogICAgIHJldHVybiB0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiTUFDT1NYX1JQQVRIIik7CiAgIH0KQEAgLTE5NTAsMTAgKzIxMzIsMTAgQEAKIAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6TWFjT1NYVXNlSW5zdGFsbE5hbWVEaXIoKSBjb25zdAogewotICBjb25zdCBjaGFyKiBidWlsZF93aXRoX2luc3RhbGxfbmFtZSA9CisgIGNtUHJvcCBidWlsZF93aXRoX2luc3RhbGxfbmFtZSA9CiAgICAgdGhpcy0+R2V0UHJvcGVydHkoIkJVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUiIpOwogICBpZiAoYnVpbGRfd2l0aF9pbnN0YWxsX25hbWUpIHsKLSAgICByZXR1cm4gY21Jc09uKGJ1aWxkX3dpdGhfaW5zdGFsbF9uYW1lKTsKKyAgICByZXR1cm4gY21Jc09uKCpidWlsZF93aXRoX2luc3RhbGxfbmFtZSk7CiAgIH0KIAogICBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgY21wMDA2OCA9IHRoaXMtPkdldFBvbGljeVN0YXR1c0NNUDAwNjgoKTsKQEAgLTIwMDcsNyArMjE4OSw3IEBACiAgICAgICAgIHJldHVybiBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoaW5mby0+TG9jYXRpb24pOwogICAgICAgfQogICAgICAgLy8gVXNlIHRoZSBzb25hbWUgZ2l2ZW4gaWYgYW55LgotICAgICAgaWYgKGluZm8tPlNPTmFtZS5maW5kKCJAcnBhdGgvIikgPT0gMCkgeworICAgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChpbmZvLT5TT05hbWUsICJAcnBhdGgvIikpIHsKICAgICAgICAgcmV0dXJuIGluZm8tPlNPTmFtZS5zdWJzdHIoNik7CiAgICAgICB9CiAgICAgICByZXR1cm4gaW5mby0+U09OYW1lOwpAQCAtMjAzNSwxMSArMjIxNyw4IEBACiB7CiAgIHN0ZDo6c3RyaW5nIGZwYXRoID0gY21TdHJDYXQoCiAgICAgdGhpcy0+R2V0RnVsbE5hbWUoY29uZmlnLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCksICcuJyk7Ci0gIGNvbnN0IGNoYXIqIGV4dCA9IHRoaXMtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7Ci0gIGlmICghZXh0KSB7Ci0gICAgZXh0ID0gImFwcCI7Ci0gIH0KLSAgZnBhdGggKz0gZXh0OworICBjbVByb3AgZXh0ID0gdGhpcy0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKKyAgZnBhdGggKz0gKGV4dCA/ICpleHQgOiAiYXBwIik7CiAgIGlmIChzaG91bGRBZGRDb250ZW50TGV2ZWwobGV2ZWwpICYmCiAgICAgICAhdGhpcy0+TWFrZWZpbGUtPlBsYXRmb3JtSXNBcHBsZUVtYmVkZGVkKCkpIHsKICAgICBmcGF0aCArPSAiL0NvbnRlbnRzIjsKQEAgLTIwNjEsOCArMjI0MCwxMCBAQAogewogICBzdGQ6OnN0cmluZyBmcGF0aCA9IGNtU3RyQ2F0KAogICAgIHRoaXMtPkdldE91dHB1dE5hbWUoY29uZmlnLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCksICcuJyk7Ci0gIGNvbnN0IGNoYXIqIGV4dCA9IHRoaXMtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7Ci0gIGlmICghZXh0KSB7CisgIHN0ZDo6c3RyaW5nIGV4dDsKKyAgaWYgKGNtUHJvcCBwID0gdGhpcy0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKSkgeworICAgIGV4dCA9ICpwOworICB9IGVsc2UgewogICAgIGlmICh0aGlzLT5Jc1hDVGVzdE9uQXBwbGUoKSkgewogICAgICAgZXh0ID0gInhjdGVzdCI7CiAgICAgfSBlbHNlIHsKQEAgLTIwODUsMTEgKzIyNjYsOCBAQAogewogICBzdGQ6OnN0cmluZyBmcGF0aCA9IGNtU3RyQ2F0KAogICAgIHRoaXMtPkdldE91dHB1dE5hbWUoY29uZmlnLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCksICcuJyk7Ci0gIGNvbnN0IGNoYXIqIGV4dCA9IHRoaXMtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7Ci0gIGlmICghZXh0KSB7Ci0gICAgZXh0ID0gImZyYW1ld29yayI7Ci0gIH0KLSAgZnBhdGggKz0gZXh0OworICBjbVByb3AgZXh0ID0gdGhpcy0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKKyAgZnBhdGggKz0gKGV4dCA/ICpleHQgOiAiZnJhbWV3b3JrIik7CiAgIGlmIChzaG91bGRBZGRGdWxsTGV2ZWwobGV2ZWwpICYmCiAgICAgICAhdGhpcy0+TWFrZWZpbGUtPlBsYXRmb3JtSXNBcHBsZUVtYmVkZGVkKCkpIHsKICAgICBmcGF0aCArPSAiL1ZlcnNpb25zLyI7CkBAIC0yMTE1LDcgKzIyOTMsOSBAQAogICAgIC8vIElmIGJ1aWxkaW5nIGRpcmVjdGx5IGZvciBpbnN0YWxsYXRpb24gdGhlbiB0aGUgYnVpbGQgdHJlZSBpbnN0YWxsX25hbWUKICAgICAvLyBpcyB0aGUgc2FtZSBhcyB0aGUgaW5zdGFsbCB0cmVlLgogICAgIGlmICh0aGlzLT5NYWNPU1hVc2VJbnN0YWxsTmFtZURpcigpKSB7Ci0gICAgICByZXR1cm4gdGhpcy0+R2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgpOworICAgICAgc3RkOjpzdHJpbmcgaW5zdGFsbFByZWZpeCA9CisgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfSU5TVEFMTF9QUkVGSVgiKTsKKyAgICAgIHJldHVybiB0aGlzLT5HZXRJbnN0YWxsTmFtZURpckZvckluc3RhbGxUcmVlKGNvbmZpZywgaW5zdGFsbFByZWZpeCk7CiAgICAgfQogCiAgICAgLy8gVXNlIHRoZSBidWlsZCB0cmVlIGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldC4KQEAgLTIxMzMsMTUgKzIzMTMsMjIgQEAKICAgcmV0dXJuICIiOwogfQogCi1zdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgpIGNvbnN0CitzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGluc3RhbGxQcmVmaXgpIGNvbnN0CiB7CiAgIGlmICh0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfUExBVEZPUk1fSEFTX0lOU1RBTExOQU1FIikpIHsKICAgICBzdGQ6OnN0cmluZyBkaXI7Ci0gICAgY29uc3QgY2hhciogaW5zdGFsbF9uYW1lX2RpciA9IHRoaXMtPkdldFByb3BlcnR5KCJJTlNUQUxMX05BTUVfRElSIik7CisgICAgY21Qcm9wIGluc3RhbGxfbmFtZV9kaXIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU5TVEFMTF9OQU1FX0RJUiIpOwogCiAgICAgaWYgKHRoaXMtPkNhbkdlbmVyYXRlSW5zdGFsbE5hbWVEaXIoSU5TVEFMTF9OQU1FX0ZPUl9JTlNUQUxMKSkgewotICAgICAgaWYgKGluc3RhbGxfbmFtZV9kaXIgJiYgKmluc3RhbGxfbmFtZV9kaXIpIHsKLSAgICAgICAgZGlyID0gY21TdHJDYXQoaW5zdGFsbF9uYW1lX2RpciwgJy8nKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGluc3RhbGxfbmFtZV9kaXIpKSB7CisgICAgICAgIGRpciA9ICppbnN0YWxsX25hbWVfZGlyOworICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OlJlcGxhY2VJbnN0YWxsUHJlZml4KGRpciwgaW5zdGFsbFByZWZpeCk7CisgICAgICAgIGRpciA9CisgICAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZShkaXIsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcpOworICAgICAgICBpZiAoIWRpci5lbXB0eSgpKSB7CisgICAgICAgICAgZGlyID0gY21TdHJDYXQoZGlyLCAnLycpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICAgIGlmICghaW5zdGFsbF9uYW1lX2RpcikgewpAQCAtMjE1OSw3ICsyMzQ2LDggQEAKICAgcmV0dXJuIHRoaXMtPlRhcmdldC0+R2V0QmFja3RyYWNlKCk7CiB9CiAKLWNvbnN0IHN0ZDo6c2V0PEJUPHN0ZDo6c3RyaW5nPj4mIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRVdGlsaXRpZXMoKSBjb25zdAorY29uc3Qgc3RkOjpzZXQ8QlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4+JgorY21HZW5lcmF0b3JUYXJnZXQ6OkdldFV0aWxpdGllcygpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5UYXJnZXQtPkdldFV0aWxpdGllcygpOwogfQpAQCAtMjE3OSw4ICsyMzY3LDggQEAKICAgaWYgKHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CiAgICAgICB0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWSB8fAogICAgICAgdGhpcy0+SXNFeGVjdXRhYmxlV2l0aEV4cG9ydHMoKSkgewotICAgIGlmIChjb25zdCBjaGFyKiBjdXN0b21fZXhwb3J0X25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiREVGSU5FX1NZTUJPTCIpKSB7Ci0gICAgICB0aGlzLT5FeHBvcnRNYWNybyA9IGN1c3RvbV9leHBvcnRfbmFtZTsKKyAgICBpZiAoY21Qcm9wIGN1c3RvbV9leHBvcnRfbmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KCJERUZJTkVfU1lNQk9MIikpIHsKKyAgICAgIHRoaXMtPkV4cG9ydE1hY3JvID0gKmN1c3RvbV9leHBvcnRfbmFtZTsKICAgICB9IGVsc2UgewogICAgICAgc3RkOjpzdHJpbmcgaW4gPSBjbVN0ckNhdCh0aGlzLT5HZXROYW1lKCksICJfRVhQT1JUUyIpOwogICAgICAgdGhpcy0+RXhwb3J0TWFjcm8gPSBjbVN5c3RlbVRvb2xzOjpNYWtlQ2lkZW50aWZpZXIoaW4pOwpAQCAtMjE5NiwxMSArMjM4NCwxMiBAQAogICBjbVRhcmdldENvbGxlY3RMaW5rTGFuZ3VhZ2VzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4mIGxhbmd1YWdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZCwgYm9vbCBzZWNvbmRQYXNzKQogICAgIDogQ29uZmlnKHN0ZDo6bW92ZShjb25maWcpKQogICAgICwgTGFuZ3VhZ2VzKGxhbmd1YWdlcykKICAgICAsIEhlYWRUYXJnZXQoaGVhZCkKICAgICAsIFRhcmdldCh0YXJnZXQpCisgICAgLCBTZWNvbmRQYXNzKHNlY29uZFBhc3MpCiAgIHsKICAgICB0aGlzLT5WaXNpdGVkLmluc2VydCh0YXJnZXQpOwogICB9CkBAIC0yMjQyLDExICsyNDMxLDE0IEBACiAgICAgaWYgKCF0aGlzLT5WaXNpdGVkLmluc2VydChpdGVtLlRhcmdldCkuc2Vjb25kKSB7CiAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNtTGlua0ludGVyZmFjZSBjb25zdCogaWZhY2UgPQotICAgICAgaXRlbS5UYXJnZXQtPkdldExpbmtJbnRlcmZhY2UodGhpcy0+Q29uZmlnLCB0aGlzLT5IZWFkVGFyZ2V0KTsKKyAgICBjbUxpbmtJbnRlcmZhY2UgY29uc3QqIGlmYWNlID0gaXRlbS5UYXJnZXQtPkdldExpbmtJbnRlcmZhY2UoCisgICAgICB0aGlzLT5Db25maWcsIHRoaXMtPkhlYWRUYXJnZXQsIHRoaXMtPlNlY29uZFBhc3MpOwogICAgIGlmICghaWZhY2UpIHsKICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGlmYWNlLT5IYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24pIHsKKyAgICAgIHRoaXMtPkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CisgICAgfQogCiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZ3VhZ2UgOiBpZmFjZS0+TGFuZ3VhZ2VzKSB7CiAgICAgICB0aGlzLT5MYW5ndWFnZXMuaW5zZXJ0KGxhbmd1YWdlKTsKQEAgLTIyNTcsMTcgKzI0NDksMzAgQEAKICAgICB9CiAgIH0KIAorICBib29sIEdldEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbigpCisgIHsKKyAgICByZXR1cm4gSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uOworICB9CisKIHByaXZhdGU6CiAgIHN0ZDo6c3RyaW5nIENvbmZpZzsKICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiYgTGFuZ3VhZ2VzOwogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogSGVhZFRhcmdldDsKICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIFRhcmdldDsKICAgc3RkOjpzZXQ8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqPiBWaXNpdGVkOworICBib29sIFNlY29uZFBhc3M7CisgIGJvb2wgSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gZmFsc2U7CiB9OwogCiBjbUdlbmVyYXRvclRhcmdldDo6TGlua0Nsb3N1cmUgY29uc3QqIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMaW5rQ2xvc3VyZSgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKKyAgLy8gVGhlcmUgaXMgbm8gbGluayBpbXBsZW1lbnRhdGlvbiBmb3IgdGFyZ2V0cyB0aGF0IGNhbm5vdCBjb21waWxlIHNvdXJjZXMuCisgIGlmICghdGhpcy0+Q2FuQ29tcGlsZVNvdXJjZXMoKSkgeworICAgIHN0YXRpYyBMaW5rQ2xvc3VyZSBjb25zdCBlbXB0eSA9IHsge30sIHt9IH07CisgICAgcmV0dXJuICZlbXB0eTsKKyAgfQorCiAgIHN0ZDo6c3RyaW5nIGtleShjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSk7CiAgIGF1dG8gaSA9IHRoaXMtPkxpbmtDbG9zdXJlTWFwLmZpbmQoa2V5KTsKICAgaWYgKGkgPT0gdGhpcy0+TGlua0Nsb3N1cmVNYXAuZW5kKCkpIHsKQEAgLTIyOTMsNyArMjQ5OCw3IEBACiAgIHsKICAgICB0aGlzLT5HRyA9IHRoaXMtPlRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0R2xvYmFsR2VuZXJhdG9yKCk7CiAgIH0KLSAgdm9pZCBDb25zaWRlcihjb25zdCBjaGFyKiBsYW5nKQorICB2b2lkIENvbnNpZGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKQogICB7CiAgICAgaW50IHByZWZlcmVuY2UgPSB0aGlzLT5HRy0+R2V0TGlua2VyUHJlZmVyZW5jZShsYW5nKTsKICAgICBpZiAocHJlZmVyZW5jZSA+IHRoaXMtPlByZWZlcmVuY2UpIHsKQEAgLTIzMjYsNDAgKzI1MzEsMzYgQEAKICAgfQogfTsKIAotdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6Q29tcHV0ZUxpbmtDbG9zdXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0Nsb3N1cmUmIGxjKSBjb25zdAorYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6Q29tcHV0ZUxpbmtDbG9zdXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0Nsb3N1cmUmIGxjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vjb25kUGFzcykgY29uc3QKIHsKICAgLy8gR2V0IGxhbmd1YWdlcyBidWlsdCBpbiB0aGlzIHRhcmdldC4KICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiBsYW5ndWFnZXM7Ci0gIGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBpbXBsID0gdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uKGNvbmZpZyk7CisgIGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBpbXBsID0KKyAgICB0aGlzLT5HZXRMaW5rSW1wbGVtZW50YXRpb24oY29uZmlnLCBzZWNvbmRQYXNzKTsKICAgYXNzZXJ0KGltcGwpOwotICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsaSA6IGltcGwtPkxhbmd1YWdlcykgewotICAgIGxhbmd1YWdlcy5pbnNlcnQobGkpOwotICB9CisgIGxhbmd1YWdlcy5pbnNlcnQoaW1wbC0+TGFuZ3VhZ2VzLmNiZWdpbigpLCBpbXBsLT5MYW5ndWFnZXMuY2VuZCgpKTsKIAogICAvLyBBZGQgaW50ZXJmYWNlIGxhbmd1YWdlcyBmcm9tIGxpbmtlZCB0YXJnZXRzLgotICBjbVRhcmdldENvbGxlY3RMaW5rTGFuZ3VhZ2VzIGNsbCh0aGlzLCBjb25maWcsIGxhbmd1YWdlcywgdGhpcyk7CisgIC8vIGNtVGFyZ2V0Q29sbGVjdExpbmtMYW5ndWFnZXMgY2xsKHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2VzLCB0aGlzLAorICAvLyBzZWNvbmRQYXNzKTsKKyAgY21UYXJnZXRDb2xsZWN0TGlua0xhbmd1YWdlcyBjbGwodGhpcywgY29uZmlnLCBsYW5ndWFnZXMsIHRoaXMsIHNlY29uZFBhc3MpOwogICBmb3IgKGNtTGlua0ltcGxJdGVtIGNvbnN0JiBsaWIgOiBpbXBsLT5MaWJyYXJpZXMpIHsKICAgICBjbGwuVmlzaXQobGliKTsKICAgfQogCiAgIC8vIFN0b3JlIHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUgb2YgbGFuZ3VhZ2VzLgotICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nIDogbGFuZ3VhZ2VzKSB7Ci0gICAgbGMuTGFuZ3VhZ2VzLnB1c2hfYmFjayhsYW5nKTsKLSAgfQorICBjbTo6YXBwZW5kKGxjLkxhbmd1YWdlcywgbGFuZ3VhZ2VzKTsKIAogICAvLyBDaG9vc2UgdGhlIGxhbmd1YWdlIHdob3NlIGxpbmtlciBzaG91bGQgYmUgdXNlZC4KLSAgaWYgKHRoaXMtPkdldFByb3BlcnR5KCJIQVNfQ1hYIikpIHsKLSAgICBsYy5MaW5rZXJMYW5ndWFnZSA9ICJDWFgiOwotICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIGxpbmtlckxhbmcgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiTElOS0VSX0xBTkdVQUdFIikpIHsKLSAgICBsYy5MaW5rZXJMYW5ndWFnZSA9IGxpbmtlckxhbmc7Ci0gIH0gZWxzZSB7CisgIGlmIChzZWNvbmRQYXNzIHx8IGxjLkxpbmtlckxhbmd1YWdlLmVtcHR5KCkpIHsKICAgICAvLyBGaW5kIHRoZSBsYW5ndWFnZSB3aXRoIHRoZSBoaWdoZXN0IHByZWZlcmVuY2UgdmFsdWUuCiAgICAgY21UYXJnZXRTZWxlY3RMaW5rZXIgdHNsKHRoaXMpOwogCiAgICAgLy8gRmlyc3Qgc2VsZWN0IGZyb20gdGhlIGxhbmd1YWdlcyBjb21waWxlZCBkaXJlY3RseSBpbiB0aGlzIHRhcmdldC4KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsIDogaW1wbC0+TGFuZ3VhZ2VzKSB7Ci0gICAgICB0c2wuQ29uc2lkZXIobC5jX3N0cigpKTsKKyAgICAgIHRzbC5Db25zaWRlcihsKTsKICAgICB9CiAKICAgICAvLyBOb3cgY29uc2lkZXIgbGFuZ3VhZ2VzIHRoYXQgcHJvcGFnYXRlIGZyb20gbGlua2VkIHRhcmdldHMuCkBAIC0yMzY3LDEyICsyNTY4LDUwIEBACiAgICAgICBzdGQ6OnN0cmluZyBwcm9wYWdhdGVzID0KICAgICAgICAgIkNNQUtFXyIgKyBsYW5nICsgIl9MSU5LRVJfUFJFRkVSRU5DRV9QUk9QQUdBVEVTIjsKICAgICAgIGlmICh0aGlzLT5NYWtlZmlsZS0+SXNPbihwcm9wYWdhdGVzKSkgewotICAgICAgICB0c2wuQ29uc2lkZXIobGFuZy5jX3N0cigpKTsKKyAgICAgICAgdHNsLkNvbnNpZGVyKGxhbmcpOwogICAgICAgfQogICAgIH0KIAogICAgIGxjLkxpbmtlckxhbmd1YWdlID0gdHNsLkNob29zZSgpOwogICB9CisKKyAgcmV0dXJuIGltcGwtPkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiB8fAorICAgIGNsbC5HZXRIYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24oKTsKK30KKwordm9pZCBjbUdlbmVyYXRvclRhcmdldDo6Q29tcHV0ZUxpbmtDbG9zdXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua0Nsb3N1cmUmIGxjKSBjb25zdAoreworICBib29sIHNlY29uZFBhc3MgPSBmYWxzZTsKKworICB7CisgICAgTGlua0Nsb3N1cmUgbGlua0Nsb3N1cmU7CisgICAgbGlua0Nsb3N1cmUuTGlua2VyTGFuZ3VhZ2UgPSB0aGlzLT5MaW5rZXJMYW5ndWFnZTsKKworICAgIC8vIEdldCBsYW5ndWFnZXMgYnVpbHQgaW4gdGhpcyB0YXJnZXQuCisgICAgc2Vjb25kUGFzcyA9IHRoaXMtPkNvbXB1dGVMaW5rQ2xvc3VyZShjb25maWcsIGxpbmtDbG9zdXJlLCBmYWxzZSk7CisgICAgdGhpcy0+TGlua2VyTGFuZ3VhZ2UgPSBsaW5rQ2xvc3VyZS5MaW5rZXJMYW5ndWFnZTsKKyAgICBpZiAoIXNlY29uZFBhc3MpIHsKKyAgICAgIGxjID0gc3RkOjptb3ZlKGxpbmtDbG9zdXJlKTsKKyAgICB9CisgIH0KKworICBpZiAoc2Vjb25kUGFzcykgeworICAgIExpbmtDbG9zdXJlIGxpbmtDbG9zdXJlOworCisgICAgdGhpcy0+Q29tcHV0ZUxpbmtDbG9zdXJlKGNvbmZpZywgbGlua0Nsb3N1cmUsIHNlY29uZFBhc3MpOworICAgIGxjID0gc3RkOjptb3ZlKGxpbmtDbG9zdXJlKTsKKworICAgIC8vIGxpbmtlciBsYW5ndWFnZSBtdXN0IG5vdCBiZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBwYXNzZXMKKyAgICBpZiAodGhpcy0+TGlua2VyTGFuZ3VhZ2UgIT0gbGMuTGlua2VyTGFuZ3VhZ2UpIHsKKyAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOworICAgICAgZSA8PCAiRXZhbHVhdGlvbiBvZiAkPExJTktfTEFOR1VBR0U6Li4uPiBvciAkPExJTktfTEFORF9BTkRfSUQ6Li4uPiAiCisgICAgICAgICAgICJjaGFuZ2VzXG50aGUgbGlua2VyIGxhbmd1YWdlIGZvciB0YXJnZXQgXCIiCisgICAgICAgIDw8IHRoaXMtPkdldE5hbWUoKSA8PCAiXCIgKGZyb20gJyIgPDwgdGhpcy0+TGlua2VyTGFuZ3VhZ2UgPDwgIicgdG8gJyIKKyAgICAgICAgPDwgbGMuTGlua2VyTGFuZ3VhZ2UgPDwgIicpIHdoaWNoIGlzIGludmFsaWQuIjsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGUuc3RyKCkpOworICAgIH0KKyAgfQogfQogCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRGdWxsTmFtZUNvbXBvbmVudHMoCkBAIC0yNDIyLDkgKzI2NjEsOSBAQAogICAgIHJldHVybiBlZmZlY3RpdmVGb2xkZXI7CiAgIH0KIAotICBjb25zdCBjaGFyKiB0YXJnZXRGb2xkZXIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiRk9MREVSIik7CisgIGNtUHJvcCB0YXJnZXRGb2xkZXIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiRk9MREVSIik7CiAgIGlmICh0YXJnZXRGb2xkZXIpIHsKLSAgICBlZmZlY3RpdmVGb2xkZXIgKz0gdGFyZ2V0Rm9sZGVyOworICAgIGVmZmVjdGl2ZUZvbGRlciArPSAqdGFyZ2V0Rm9sZGVyOwogICB9CiAKICAgcmV0dXJuIGVmZmVjdGl2ZUZvbGRlcjsKQEAgLTI0OTMsMTUgKzI3MzIsMTYgQEAKICAgaW5mby5XaW5kb3dzRXhwb3J0QWxsU3ltYm9scyA9CiAgICAgdGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX1NVUFBPUlRfV0lORE9XU19FWFBPUlRfQUxMX1NZTUJPTFMiKSAmJgogICAgIHRoaXMtPkdldFByb3BlcnR5QXNCb29sKCJXSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUyIpOwotI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogICBpbmZvLkRlZkZpbGVHZW5lcmF0ZWQgPQogICAgIGluZm8uV2luZG93c0V4cG9ydEFsbFN5bWJvbHMgfHwgaW5mby5Tb3VyY2VzLnNpemUoKSA+IDE7CiAjZWxzZQotICAvLyBPdXIgX19jcmVhdGVfZGVmIGhlbHBlciBpcyBvbmx5IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgorICAvLyBPdXIgX19jcmVhdGVfZGVmIGhlbHBlciBpcyBub3QgYXZhaWxhYmxlIGR1cmluZyBDTWFrZSBib290c3RyYXAuCiAgIGluZm8uRGVmRmlsZUdlbmVyYXRlZCA9IGZhbHNlOwogI2VuZGlmCiAgIGlmIChpbmZvLkRlZkZpbGVHZW5lcmF0ZWQpIHsKLSAgICBpbmZvLkRlZkZpbGUgPSB0aGlzLT5PYmplY3REaXJlY3RvcnkgLyogaGFzIHNsYXNoICovICsgImV4cG9ydHMuZGVmIjsKKyAgICBpbmZvLkRlZkZpbGUgPQorICAgICAgdGhpcy0+R2V0T2JqZWN0RGlyZWN0b3J5KGNvbmZpZykgLyogaGFzIHNsYXNoICovICsgImV4cG9ydHMuZGVmIjsKICAgfSBlbHNlIGlmICghaW5mby5Tb3VyY2VzLmVtcHR5KCkpIHsKICAgICBpbmZvLkRlZkZpbGUgPSBpbmZvLlNvdXJjZXMuZnJvbnQoKS0+R2V0RnVsbFBhdGgoKTsKICAgfQpAQCAtMjU0OSw2ICsyNzg5LDEyIEBACiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TGlua0ltcGxlbWVudGF0aW9uQ2xvc3VyZSgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKKyAgLy8gVGhlcmUgaXMgbm8gbGluayBpbXBsZW1lbnRhdGlvbiBmb3IgdGFyZ2V0cyB0aGF0IGNhbm5vdCBjb21waWxlIHNvdXJjZXMuCisgIGlmICghdGhpcy0+Q2FuQ29tcGlsZVNvdXJjZXMoKSkgeworICAgIHN0YXRpYyBzdGQ6OnZlY3Rvcjxjb25zdCBjbUdlbmVyYXRvclRhcmdldCo+IGNvbnN0IGVtcHR5OworICAgIHJldHVybiBlbXB0eTsKKyAgfQorCiAgIExpbmtJbXBsQ2xvc3VyZSYgdGd0cyA9IHRoaXMtPkxpbmtJbXBsQ2xvc3VyZU1hcFtjb25maWddOwogICBpZiAoIXRndHMuRG9uZSkgewogICAgIHRndHMuRG9uZSA9IHRydWU7CkBAIC0yNTU2LDYgKzI4MDIsNyBAQAogCiAgICAgY21MaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMgY29uc3QqIGltcGwgPQogICAgICAgdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uTGlicmFyaWVzKGNvbmZpZyk7CisgICAgYXNzZXJ0KGltcGwpOwogCiAgICAgZm9yIChjbUxpbmtJbXBsSXRlbSBjb25zdCYgbGliIDogaW1wbC0+TGlicmFyaWVzKSB7CiAgICAgICBwcm9jZXNzSUxpYnMoY29uZmlnLCB0aGlzLCBsaWIsCkBAIC0yNjA1LDI5ICsyODUyLDI2IEBACiAgIHRoaXMtPkN1cnJlbnRFbnRyeSA9IG51bGxwdHI7CiAKICAgLy8gUXVldWUgYWxsIHRoZSBzb3VyY2UgZmlsZXMgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIHRoZSB0YXJnZXQuCi0gIGlmICh0YXJnZXQtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7Ci0gICAgc3RkOjpzZXQ8Y21Tb3VyY2VGaWxlKj4gZW1pdHRlZDsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MgPQotICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoKTsKLSAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogY29uZmlncykgewotICAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKLSAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U291cmNlRmlsZXMoc291cmNlcywgYyk7Ci0gICAgICBmb3IgKGNtU291cmNlRmlsZSogc2YgOiBzb3VyY2VzKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c2V0PGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0Kj4gdGd0cyA9Ci0gICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRGaWxlbmFtZVRhcmdldERlcGVuZHMoc2YpOwotICAgICAgICBpZiAoY21Db250YWlucyh0Z3RzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQpKSB7Ci0gICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7Ci0gICAgICAgICAgZSA8PCAiRXZhbHVhdGlvbiBvdXRwdXQgZmlsZVxuICBcIiIgPDwgc2YtPlJlc29sdmVGdWxsUGF0aCgpCi0gICAgICAgICAgICA8PCAiXCJcbmRlcGVuZHMgb24gdGhlIHNvdXJjZXMgb2YgYSB0YXJnZXQgaXQgaXMgdXNlZCBpbi4gIFRoaXMgIgotICAgICAgICAgICAgICAgImlzIGEgZGVwZW5kZW5jeSBsb29wIGFuZCBpcyBub3QgYWxsb3dlZC4iOwotICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+TG9jYWxHZW5lcmF0b3ItPklzc3VlTWVzc2FnZSgKLSAgICAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbWl0dGVkLmluc2VydChzZikuc2Vjb25kICYmCi0gICAgICAgICAgICB0aGlzLT5Tb3VyY2VzUXVldWVkLmluc2VydChzZikuc2Vjb25kKSB7Ci0gICAgICAgICAgdGhpcy0+U291cmNlUXVldWUucHVzaChzZik7Ci0gICAgICAgIH0KKyAgc3RkOjpzZXQ8Y21Tb3VyY2VGaWxlKj4gZW1pdHRlZDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOworICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogY29uZmlncykgeworICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IHNvdXJjZXM7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRTb3VyY2VGaWxlcyhzb3VyY2VzLCBjKTsKKyAgICBmb3IgKGNtU291cmNlRmlsZSogc2YgOiBzb3VyY2VzKSB7CisgICAgICBjb25zdCBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+IHRndHMgPQorICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldEZpbGVuYW1lVGFyZ2V0RGVwZW5kcyhzZik7CisgICAgICBpZiAoY206OmNvbnRhaW5zKHRndHMsIHRoaXMtPkdlbmVyYXRvclRhcmdldCkpIHsKKyAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgICAgIGUgPDwgIkV2YWx1YXRpb24gb3V0cHV0IGZpbGVcbiAgXCIiIDw8IHNmLT5SZXNvbHZlRnVsbFBhdGgoKQorICAgICAgICAgIDw8ICJcIlxuZGVwZW5kcyBvbiB0aGUgc291cmNlcyBvZiBhIHRhcmdldCBpdCBpcyB1c2VkIGluLiAgVGhpcyAiCisgICAgICAgICAgICAgImlzIGEgZGVwZW5kZW5jeSBsb29wIGFuZCBpcyBub3QgYWxsb3dlZC4iOworICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkxvY2FsR2VuZXJhdG9yLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKGVtaXR0ZWQuaW5zZXJ0KHNmKS5zZWNvbmQgJiYgdGhpcy0+U291cmNlc1F1ZXVlZC5pbnNlcnQoc2YpLnNlY29uZCkgeworICAgICAgICB0aGlzLT5Tb3VyY2VRdWV1ZS5wdXNoKHNmKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTI2NDgsOCArMjg5Miw4IEBACiAgICAgdGhpcy0+Q3VycmVudEVudHJ5ID0gJnRoaXMtPkdlbmVyYXRvclRhcmdldC0+U291cmNlRGVwZW5kc1tzZl07CiAKICAgICAvLyBRdWV1ZSBkZXBlbmRlbmNpZXMgYWRkZWQgZXhwbGljaXRseSBieSB0aGUgdXNlci4KLSAgICBpZiAoY29uc3QgY2hhciogYWRkaXRpb25hbERlcHMgPSBzZi0+R2V0UHJvcGVydHkoIk9CSkVDVF9ERVBFTkRTIikpIHsKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvYmpEZXBzID0gY21FeHBhbmRlZExpc3QoYWRkaXRpb25hbERlcHMpOworICAgIGlmIChjbVByb3AgYWRkaXRpb25hbERlcHMgPSBzZi0+R2V0UHJvcGVydHkoIk9CSkVDVF9ERVBFTkRTIikpIHsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvYmpEZXBzID0gY21FeHBhbmRlZExpc3QoKmFkZGl0aW9uYWxEZXBzKTsKICAgICAgIGZvciAoc3RkOjpzdHJpbmcmIG9iakRlcCA6IG9iakRlcHMpIHsKICAgICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKG9iakRlcCkpIHsKICAgICAgICAgICBvYmpEZXAgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKG9iakRlcCk7CkBAIC0yNjkyLDEyICsyOTM2LDIzIEBACiAgIGlmIChpID09IHRoaXMtPk5hbWVNYXAuZW5kKCkgfHwgaS0+Zmlyc3QgIT0gbmFtZSkgewogICAgIC8vIENoZWNrIGlmIHdlIGtub3cgaG93IHRvIGdlbmVyYXRlIHRoaXMgZmlsZS4KICAgICBjbVNvdXJjZXNXaXRoT3V0cHV0IHNvdXJjZXMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U291cmNlc1dpdGhPdXRwdXQobmFtZSk7CisgICAgLy8gSWYgd2UgZmFpbGVkIHRvIGZpbmQgYSB0YXJnZXQgb3Igc291cmNlIGFuZCB3ZSBoYXZlIGEgcmVsYXRpdmUgcGF0aCwgaXQKKyAgICAvLyBtaWdodCBiZSBhIHZhbGlkIHNvdXJjZSBpZiBtYWRlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGJpbmFyeQorICAgIC8vIGRpcmVjdG9yeS4KKyAgICBpZiAoIXNvdXJjZXMuVGFyZ2V0ICYmICFzb3VyY2VzLlNvdXJjZSAmJgorICAgICAgICAhY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgobmFtZSkpIHsKKyAgICAgIGF1dG8gZnVsbG5hbWUgPQorICAgICAgICBjbVN0ckNhdCh0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAnLycsIG5hbWUpOworICAgICAgZnVsbG5hbWUgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgICBmdWxsbmFtZSwgdGhpcy0+TWFrZWZpbGUtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSk7CisgICAgICBzb3VyY2VzID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZXNXaXRoT3V0cHV0KGZ1bGxuYW1lKTsKKyAgICB9CiAgICAgaSA9IHRoaXMtPk5hbWVNYXAuZW1wbGFjZV9oaW50KGksIG5hbWUsIHNvdXJjZXMpOwogICB9CiAgIGlmIChjbVRhcmdldCogdCA9IGktPnNlY29uZC5UYXJnZXQpIHsKICAgICAvLyBUaGUgbmFtZSBpcyBhIGJ5cHJvZHVjdCBvZiBhIHV0aWxpdHkgdGFyZ2V0IG9yIGEgUFJFX0JVSUxELCBQUkVfTElOSywgb3IKICAgICAvLyBQT1NUX0JVSUxEIGNvbW1hbmQuCi0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodC0+R2V0TmFtZSgpKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh0LT5HZXROYW1lKCksIGZhbHNlKTsKICAgfQogICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IGktPnNlY29uZC5Tb3VyY2UpIHsKICAgICAvLyBGb3Igbm93IG9ubHkgZm9sbG93IHRoZSBkZXBlbmRlbmN5IGlmIHRoZSBzb3VyY2UgZmlsZSBpcyBub3QgYQpAQCAtMjc1MiwxNCArMzAwNywxNCBAQAogICAgICAgICBkZXBMb2NhdGlvbiA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoZGVwTG9jYXRpb24pOwogICAgICAgICB0TG9jYXRpb24gPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRMb2NhdGlvbik7CiAgICAgICAgIGlmIChkZXBMb2NhdGlvbiA9PSB0TG9jYXRpb24pIHsKLSAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh1dGlsKTsKKyAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh1dGlsLCBmYWxzZSk7CiAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgLy8gVGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIGRlcGVuZGVuY3kgd2FzIG5vdCBhIGZ1bGwgcGF0aC4gIEl0CiAgICAgICAvLyBtdXN0IG5hbWUgYSB0YXJnZXQsIHNvIGFkZCB0aGUgdGFyZ2V0LWxldmVsIGRlcGVuZGVuY3kuCi0gICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh1dGlsKTsKKyAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+VGFyZ2V0LT5BZGRVdGlsaXR5KHV0aWwsIGZhbHNlKTsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgfQpAQCAtMjc4Nyw3ICszMDQyLDcgQEAKICAgICAgICAgLy8gdGhpcyBwcm9qZWN0LiAgQWRkIHRoZSB0YXJnZXQtbGV2ZWwgZGVwZW5kZW5jeSB0byBtYWtlCiAgICAgICAgIC8vIHN1cmUgdGhlIGV4ZWN1dGFibGUgaXMgdXAgdG8gZGF0ZSBiZWZvcmUgdGhpcyBjdXN0b20KICAgICAgICAgLy8gY29tbWFuZCBwb3NzaWJseSBydW5zLgotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eShjb21tYW5kKTsKKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkoY29tbWFuZCwgdHJ1ZSk7CiAgICAgICB9CiAgICAgfQogCkBAIC0yODAyLDEzICszMDU3LDEzIEBACiAgIH0KIAogICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiB0YXJnZXRzKSB7Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodGFyZ2V0LT5HZXROYW1lKCkpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+VGFyZ2V0LT5BZGRVdGlsaXR5KHRhcmdldC0+R2V0TmFtZSgpLCB0cnVlKTsKICAgfQogCiAgIC8vIFF1ZXVlIHRoZSBjdXN0b20gY29tbWFuZCBkZXBlbmRlbmNpZXMuCiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBlbWl0dGVkOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKCk7CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZiA6IGNvbmZpZ3MpIHsKICAgICB0aGlzLT5Gb2xsb3dDb21tYW5kRGVwZW5kcyhjYywgY29uZiwgZW1pdHRlZCk7CiAgIH0KQEAgLTI4NjksNyArMzEyNCw3IEBACiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRBcHBsZUFyY2hzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJjaFZlYykgY29uc3QKIHsKLSAgY29uc3QgY2hhciogYXJjaHMgPSBudWxscHRyOworICBjbVByb3AgYXJjaHMgPSBudWxscHRyOwogICBpZiAoIWNvbmZpZy5lbXB0eSgpKSB7CiAgICAgc3RkOjpzdHJpbmcgZGVmVmFyTmFtZSA9CiAgICAgICBjbVN0ckNhdCgiT1NYX0FSQ0hJVEVDVFVSRVNfIiwgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZykpOwpAQCAtMjg3OSw3ICszMTM0LDEzOSBAQAogICAgIGFyY2hzID0gdGhpcy0+R2V0UHJvcGVydHkoIk9TWF9BUkNISVRFQ1RVUkVTIik7CiAgIH0KICAgaWYgKGFyY2hzKSB7Ci0gICAgY21FeHBhbmRMaXN0KHN0ZDo6c3RyaW5nKGFyY2hzKSwgYXJjaFZlYyk7CisgICAgY21FeHBhbmRMaXN0KCphcmNocywgYXJjaFZlYyk7CisgIH0KK30KKwordm9pZCBjbUdlbmVyYXRvclRhcmdldDo6QWRkQ1VEQUFyY2hpdGVjdHVyZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncykgY29uc3QKK3sKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5ID0gdGhpcy0+R2V0U2FmZVByb3BlcnR5KCJDVURBX0FSQ0hJVEVDVFVSRVMiKTsKKworICBpZiAocHJvcGVydHkuZW1wdHkoKSkgeworICAgIHN3aXRjaCAodGhpcy0+R2V0UG9saWN5U3RhdHVzQ01QMDEwNCgpKSB7CisgICAgICBjYXNlIGNtUG9saWNpZXM6OldBUk46CisgICAgICAgIGlmICghdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SXNJblRyeUNvbXBpbGUoKSkgeworICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsCisgICAgICAgICAgICBjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAxMDQpICsKKyAgICAgICAgICAgICAgIlxuQ1VEQV9BUkNISVRFQ1RVUkVTIGlzIGVtcHR5IGZvciB0YXJnZXQgXCIiICsgdGhpcy0+R2V0TmFtZSgpICsKKyAgICAgICAgICAgICAgIlwiLiIpOworICAgICAgICB9CisgICAgICAgIENNX0ZBTExUSFJPVUdIOworICAgICAgY2FzZSBjbVBvbGljaWVzOjpPTEQ6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgdGhpcy0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKKyAgICAgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgIkNVREFfQVJDSElURUNUVVJFUyBpcyBlbXB0eSBmb3IgdGFyZ2V0IFwiIiArIHRoaXMtPkdldE5hbWUoKSArCisgICAgICAgICAgICAiXCIuIik7CisgICAgfQorICB9CisKKyAgLy8gSWYgQ1VEQV9BUkNISVRFQ1RVUkVTIGlzIGZhbHNlIHdlIGRvbid0IGFkZCBhbnkgYXJjaGl0ZWN0dXJlcy4KKyAgaWYgKGNtSXNPZmYocHJvcGVydHkpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgc3RydWN0IEN1ZGFBcmNoaXRlY3R1cmUKKyAgeworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgYm9vbCByZWFseyB0cnVlIH07CisgICAgYm9vbCB2aXJ0dWFsX3sgdHJ1ZSB9OworICB9OworICBzdGQ6OnZlY3RvcjxDdWRhQXJjaGl0ZWN0dXJlPiBhcmNoaXRlY3R1cmVzOworCisgIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0aW9uczsKKyAgICBjbUV4cGFuZExpc3QocHJvcGVydHksIG9wdGlvbnMpOworCisgICAgZm9yIChzdGQ6OnN0cmluZyYgb3B0aW9uIDogb3B0aW9ucykgeworICAgICAgQ3VkYUFyY2hpdGVjdHVyZSBhcmNoaXRlY3R1cmU7CisKKyAgICAgIC8vIEFyY2hpdGVjdHVyZSBuYW1lIGlzIHVwIHRvIHRoZSBmaXJzdCBzcGVjaWZpZXIuCisgICAgICBzdGQ6OnNpemVfdCBwb3MgPSBvcHRpb24uZmluZF9maXJzdF9vZignLScpOworICAgICAgYXJjaGl0ZWN0dXJlLm5hbWUgPSBvcHRpb24uc3Vic3RyKDAsIHBvcyk7CisKKyAgICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgY206OnN0cmluZ192aWV3IHNwZWNpZmllcnsgb3B0aW9uLmNfc3RyKCkgKyBwb3MgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24ubGVuZ3RoKCkgLSBwb3MgLSAxIH07CisKKyAgICAgICAgaWYgKHNwZWNpZmllciA9PSAicmVhbCIpIHsKKyAgICAgICAgICBhcmNoaXRlY3R1cmUucmVhbCA9IHRydWU7CisgICAgICAgICAgYXJjaGl0ZWN0dXJlLnZpcnR1YWxfID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoc3BlY2lmaWVyID09ICJ2aXJ0dWFsIikgeworICAgICAgICAgIGFyY2hpdGVjdHVyZS5yZWFsID0gZmFsc2U7CisgICAgICAgICAgYXJjaGl0ZWN0dXJlLnZpcnR1YWxfID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgIlVua25vd24gQ1VEQSBhcmNoaXRlY3R1cmUgc3BlY2lmaWVyIFwiIiArIHN0ZDo6c3RyaW5nKHNwZWNpZmllcikgKworICAgICAgICAgICAgICAiXCIuIik7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYXJjaGl0ZWN0dXJlcy5lbXBsYWNlX2JhY2soYXJjaGl0ZWN0dXJlKTsKKyAgICB9CisgIH0KKworICBzdGQ6OnN0cmluZyBjb25zdCYgY29tcGlsZXIgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCIpOworCisgIGlmIChjb21waWxlciA9PSAiTlZJRElBIikgeworICAgIGZvciAoQ3VkYUFyY2hpdGVjdHVyZSYgYXJjaGl0ZWN0dXJlIDogYXJjaGl0ZWN0dXJlcykgeworICAgICAgZmxhZ3MgKz0KKyAgICAgICAgIiAtLWdlbmVyYXRlLWNvZGU9YXJjaD1jb21wdXRlXyIgKyBhcmNoaXRlY3R1cmUubmFtZSArICIsY29kZT1bIjsKKworICAgICAgaWYgKGFyY2hpdGVjdHVyZS52aXJ0dWFsXykgeworICAgICAgICBmbGFncyArPSAiY29tcHV0ZV8iICsgYXJjaGl0ZWN0dXJlLm5hbWU7CisKKyAgICAgICAgaWYgKGFyY2hpdGVjdHVyZS5yZWFsKSB7CisgICAgICAgICAgZmxhZ3MgKz0gIiwiOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChhcmNoaXRlY3R1cmUucmVhbCkgeworICAgICAgICBmbGFncyArPSAic21fIiArIGFyY2hpdGVjdHVyZS5uYW1lOworICAgICAgfQorCisgICAgICBmbGFncyArPSAiXSI7CisgICAgfQorICB9IGVsc2UgaWYgKGNvbXBpbGVyID09ICJDbGFuZyIpIHsKKyAgICBmb3IgKEN1ZGFBcmNoaXRlY3R1cmUmIGFyY2hpdGVjdHVyZSA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICAgIGZsYWdzICs9ICIgLS1jdWRhLWdwdS1hcmNoPXNtXyIgKyBhcmNoaXRlY3R1cmUubmFtZTsKKworICAgICAgaWYgKCFhcmNoaXRlY3R1cmUucmVhbCkgeworICAgICAgICBNYWtlZmlsZS0+SXNzdWVNZXNzYWdlKAorICAgICAgICAgIE1lc3NhZ2VUeXBlOjpXQVJOSU5HLAorICAgICAgICAgICJDbGFuZyBkb2Vzbid0IHN1cHBvcnQgZGlzYWJsaW5nIENVREEgcmVhbCBjb2RlIGdlbmVyYXRpb24uIik7CisgICAgICB9CisKKyAgICAgIGlmICghYXJjaGl0ZWN0dXJlLnZpcnR1YWxfKSB7CisgICAgICAgIGZsYWdzICs9ICIgLS1uby1jdWRhLWluY2x1ZGUtcHR4PXNtXyIgKyBhcmNoaXRlY3R1cmUubmFtZTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKwordm9pZCBjbUdlbmVyYXRvclRhcmdldDo6QWRkQ1VEQVRvb2xraXRGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MpIGNvbnN0Cit7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21waWxlciA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9DVURBX0NPTVBJTEVSX0lEIik7CisKKyAgaWYgKGNvbXBpbGVyID09ICJDbGFuZyIpIHsKKyAgICAvLyBQYXNzIENVREEgdG9vbGtpdCBleHBsaWNpdGx5IHRvIENsYW5nLgorICAgIC8vIENsYW5nJ3Mgc2VhcmNoaW5nIGZvciB0aGUgc3lzdGVtIENVREEgdG9vbGtpdCBpc24ndCB2ZXJ5IGdvb2QgYW5kIGl0J3MKKyAgICAvLyBleHBlY3RlZCB0aGUgdXNlciB3aWxsIGV4cGxpY2l0bHkgcGFzcyB0aGUgdG9vbGtpdCBwYXRoLgorICAgIC8vIFRoaXMgYWxzbyBhdm9pZHMgQ2xhbmcgaGF2aW5nIHRvIHNlYXJjaCBmb3IgdGhlIHRvb2xraXQgb24gZXZlcnkKKyAgICAvLyBpbnZvY2F0aW9uLgorICAgIHN0ZDo6c3RyaW5nIHRvb2xraXRSb290ID0KKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQ1VEQV9DT01QSUxFUl9MSUJSQVJZX1JPT1QiKTsKKworICAgIGlmICghdG9vbGtpdFJvb3QuZW1wdHkoKSkgeworICAgICAgZmxhZ3MgKz0gIiAtLWN1ZGEtcGF0aD0iICsKKyAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCh0b29sa2l0Um9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgIH0KICAgfQogfQogCkBAIC0yOTI3LDEzICszMzE0LDEzIEBACiB9CiAKIG5hbWVzcGFjZSB7Ci12b2lkIHByb2Nlc3NJbmNsdWRlRGlyZWN0b3JpZXMoCi0gIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsCi0gIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+JiBlbnRyaWVzLAotICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+JiBpbmNsdWRlcywKLSAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiYgdW5pcXVlSW5jbHVkZXMsIGJvb2wgZGVidWdJbmNsdWRlcykKK3ZvaWQgcHJvY2Vzc0luY2x1ZGVEaXJlY3RvcmllcyhjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGd0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cmllcyYgZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+JiBpbmNsdWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+JiB1bmlxdWVJbmNsdWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYnVnSW5jbHVkZXMpCiB7Ci0gIGZvciAoRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeSYgZW50cnkgOiBlbnRyaWVzKSB7CisgIGZvciAoRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeSYgZW50cnkgOiBlbnRyaWVzLkVudHJpZXMpIHsKICAgICBjbUxpbmtJbXBsSXRlbSBjb25zdCYgaXRlbSA9IGVudHJ5LkxpbmtJbXBsSXRlbTsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdGFyZ2V0TmFtZSA9IGl0ZW0uQXNTdHIoKTsKICAgICBib29sIGNvbnN0IGZyb21JbXBvcnRlZCA9IGl0ZW0uVGFyZ2V0ICYmIGl0ZW0uVGFyZ2V0LT5Jc0ltcG9ydGVkKCk7CkBAIC0zMDQxLDQzICszNDI4LDQ1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVidWdQcm9wZXJ0aWVzOwotICBjb25zdCBjaGFyKiBkZWJ1Z1Byb3AgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIpOwotICBpZiAoZGVidWdQcm9wKSB7Ci0gICAgY21FeHBhbmRMaXN0KGRlYnVnUHJvcCwgZGVidWdQcm9wZXJ0aWVzKTsKLSAgfQorICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdCgiQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z1Byb3BlcnRpZXMpOwogCiAgIGJvb2wgZGVidWdJbmNsdWRlcyA9ICF0aGlzLT5EZWJ1Z0luY2x1ZGVzRG9uZSAmJgotICAgIGNtQ29udGFpbnMoZGVidWdQcm9wZXJ0aWVzLCAiSU5DTFVERV9ESVJFQ1RPUklFUyIpOworICAgIGNtOjpjb250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJJTkNMVURFX0RJUkVDVE9SSUVTIik7CiAKICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0Q29uZmlndXJlRG9uZUNNUDAwMjYoKSkgewogICAgIHRoaXMtPkRlYnVnSW5jbHVkZXNEb25lID0gdHJ1ZTsKICAgfQogCi0gIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJpZXMgPQotICAgIEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKHRoaXMsIGNvbmZpZywgbGFuZywgJmRhZ0NoZWNrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcyk7CisgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cmllcyBlbnRyaWVzID0gRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXMoCisgICAgdGhpcywgY29uZmlnLCBsYW5nLCAmZGFnQ2hlY2tlciwgdGhpcy0+SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcyk7CisKKyAgaWYgKGxhbmcgPT0gIlN3aWZ0IikgeworICAgIEFkZFN3aWZ0SW1wbGljaXRJbmNsdWRlRGlyZWN0b3JpZXModGhpcywgY29uZmlnLCBlbnRyaWVzKTsKKyAgfQogCiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMiLCBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICZkYWdDaGVja2VyLCBlbnRyaWVzKTsKIAogICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24oIkFQUExFIikpIHsKLSAgICBjbUxpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllcyBjb25zdCogaW1wbCA9Ci0gICAgICB0aGlzLT5HZXRMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoY29uZmlnKTsKLSAgICBmb3IgKGNtTGlua0ltcGxJdGVtIGNvbnN0JiBsaWIgOiBpbXBsLT5MaWJyYXJpZXMpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGxpYkRpciA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgobGliLkFzU3RyKCkpOworICAgIGlmIChjbUxpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllcyBjb25zdCogaW1wbCA9CisgICAgICAgICAgdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uTGlicmFyaWVzKGNvbmZpZykpIHsKKyAgICAgIGZvciAoY21MaW5rSW1wbEl0ZW0gY29uc3QmIGxpYiA6IGltcGwtPkxpYnJhcmllcykgeworICAgICAgICBzdGQ6OnN0cmluZyBsaWJEaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgICAgIGxpYi5Bc1N0cigpLCB0aGlzLT5NYWtlZmlsZS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpKTsKIAotICAgICAgc3RhdGljIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBmcmFtZXdvcmtDaGVjaygKLSAgICAgICAgIiguKlxcLmZyYW1ld29yaykoL1ZlcnNpb25zL1teL10rKT8vW14vXSskIik7Ci0gICAgICBpZiAoIWZyYW1ld29ya0NoZWNrLmZpbmQobGliRGlyKSkgewotICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc3RhdGljIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBmcmFtZXdvcmtDaGVjaygKKyAgICAgICAgICAiKC4qXFwuZnJhbWV3b3JrKSgvVmVyc2lvbnMvW14vXSspPy9bXi9dKyQiKTsKKyAgICAgICAgaWYgKCFmcmFtZXdvcmtDaGVjay5maW5kKGxpYkRpcikpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxpYkRpciA9IGZyYW1ld29ya0NoZWNrLm1hdGNoKDEpOworCisgICAgICAgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnkgZWUobGliLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOworICAgICAgICBlZS5WYWx1ZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShsaWJEaXIpKTsKKyAgICAgICAgZW50cmllcy5FbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoZWUpKTsKICAgICAgIH0KLQotICAgICAgbGliRGlyID0gZnJhbWV3b3JrQ2hlY2subWF0Y2goMSk7Ci0KLSAgICAgIEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnkgZWUobGliLCBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOwotICAgICAgZWUuVmFsdWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUobGliRGlyKSk7Ci0gICAgICBlbnRyaWVzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoZWUpKTsKICAgICB9CiAgIH0KIApAQCAtMzA5NCwyMiArMzQ4MywzOCBAQAogfTsKIAogbmFtZXNwYWNlIHsKK2NvbnN0IGF1dG8gRExfQkVHSU4gPSAiPERFVklDRV9MSU5LPiJfczsKK2NvbnN0IGF1dG8gRExfRU5EID0gIjwvREVWSUNFX0xJTks+Il9zOworCiB2b2lkIHByb2Nlc3NPcHRpb25zKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGNvbnN0JiBlbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgY29uc3QmIGVudHJpZXMsCiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4mIG9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4mIHVuaXF1ZU9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZGVidWdPcHRpb25zLCBjb25zdCBjaGFyKiBsb2dOYW1lLCBPcHRpb25zUGFyc2UgcGFyc2UpCisgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVidWdPcHRpb25zLCBjb25zdCBjaGFyKiBsb2dOYW1lLCBPcHRpb25zUGFyc2UgcGFyc2UsCisgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJvY2Vzc0RldmljZU9wdGlvbnMgPSBmYWxzZSkKIHsKLSAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGNvbnN0JiBlbnRyeSA6IGVudHJpZXMpIHsKKyAgYm9vbCBzcGxpdE9wdGlvbiA9ICFwcm9jZXNzRGV2aWNlT3B0aW9uczsKKyAgZm9yIChFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5IGNvbnN0JiBlbnRyeSA6IGVudHJpZXMuRW50cmllcykgewogICAgIHN0ZDo6c3RyaW5nIHVzZWRPcHRpb25zOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG9wdCA6IGVudHJ5LlZhbHVlcykgeworICAgICAgaWYgKHByb2Nlc3NEZXZpY2VPcHRpb25zICYmIChvcHQgPT0gRExfQkVHSU4gfHwgb3B0ID09IERMX0VORCkpIHsKKyAgICAgICAgb3B0aW9ucy5lbXBsYWNlX2JhY2sob3B0LCBlbnRyeS5CYWNrdHJhY2UpOworICAgICAgICBzcGxpdE9wdGlvbiA9IG9wdCA9PSBETF9CRUdJTjsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKICAgICAgIGlmICh1bmlxdWVPcHRpb25zLmluc2VydChvcHQpLnNlY29uZCkgewogICAgICAgICBpZiAocGFyc2UgPT0gT3B0aW9uc1BhcnNlOjpTaGVsbCAmJgogICAgICAgICAgICAgY21IYXNMaXRlcmFsUHJlZml4KG9wdCwgIlNIRUxMOiIpKSB7Ci0gICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRtcDsKLSAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZVVuaXhDb21tYW5kTGluZShvcHQuY19zdHIoKSArIDYsIHRtcCk7Ci0gICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyYgbyA6IHRtcCkgewotICAgICAgICAgICAgb3B0aW9ucy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKG8pLCBlbnRyeS5CYWNrdHJhY2UpOworICAgICAgICAgIGlmIChzcGxpdE9wdGlvbikgeworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRtcDsKKyAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlBhcnNlVW5peENvbW1hbmRMaW5lKG9wdC5jX3N0cigpICsgNiwgdG1wKTsKKyAgICAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcmIG8gOiB0bXApIHsKKyAgICAgICAgICAgICAgb3B0aW9ucy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKG8pLCBlbnRyeS5CYWNrdHJhY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvcHRpb25zLmVtcGxhY2VfYmFjayhzdGQ6OnN0cmluZyhvcHQuY19zdHIoKSArIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuQmFja3RyYWNlKTsKICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgb3B0aW9ucy5lbXBsYWNlX2JhY2sob3B0LCBlbnRyeS5CYWNrdHJhY2UpOwpAQCAtMzEyOCw2ICszNTMzLDYzIEBACiAgICAgfQogICB9CiB9CisKK3N0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gd3JhcE9wdGlvbnMoCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3B0aW9ucywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgYnQsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgd3JhcHBlckZsYWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiB3cmFwcGVyU2VwLAorICBib29sIGNvbmNhdEZsYWdBbmRBcmdzKQoreworICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IHJlc3VsdDsKKworICBpZiAob3B0aW9ucy5lbXB0eSgpKSB7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGlmICh3cmFwcGVyRmxhZy5lbXB0eSgpIHx8IGNtSGFzTGl0ZXJhbFByZWZpeChvcHRpb25zLmZyb250KCksICJMSU5LRVI6IikpIHsKKyAgICAvLyBub3RoaW5nIHNwZWNpZmllZCBvciBMSU5LRVIgd3JhcHBlciwgaW5zZXJ0IGVsZW1lbnRzIGFzIGlzCisgICAgcmVzdWx0LnJlc2VydmUob3B0aW9ucy5zaXplKCkpOworICAgIGZvciAoc3RkOjpzdHJpbmcmIG8gOiBvcHRpb25zKSB7CisgICAgICByZXN1bHQuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShvKSwgYnQpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoIXdyYXBwZXJTZXAuZW1wdHkoKSkgeworICAgICAgaWYgKGNvbmNhdEZsYWdBbmRBcmdzKSB7CisgICAgICAgIC8vIGluc2VydCBmbGFnIGVsZW1lbnRzIGV4Y2VwdCBsYXN0IG9uZQorICAgICAgICBmb3IgKGF1dG8gaSA9IHdyYXBwZXJGbGFnLmJlZ2luKCk7IGkgIT0gd3JhcHBlckZsYWcuZW5kKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICByZXN1bHQuZW1wbGFjZV9iYWNrKCppLCBidCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gY29uY2F0ZW5hdGUgbGFzdCBmbGFnIGVsZW1lbnQgYW5kIGFsbCBsaXN0IHZhbHVlcworICAgICAgICAvLyBpbiBvbmUgb3B0aW9uCisgICAgICAgIHJlc3VsdC5lbXBsYWNlX2JhY2sod3JhcHBlckZsYWcuYmFjaygpICsgY21Kb2luKG9wdGlvbnMsIHdyYXBwZXJTZXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiB3cmFwcGVyRmxhZykgeworICAgICAgICAgIHJlc3VsdC5lbXBsYWNlX2JhY2soaSwgYnQpOworICAgICAgICB9CisgICAgICAgIC8vIGNvbmNhdGVuYXRlIGFsbCBsaXN0IHZhbHVlcyBpbiBvbmUgb3B0aW9uCisgICAgICAgIHJlc3VsdC5lbXBsYWNlX2JhY2soY21Kb2luKG9wdGlvbnMsIHdyYXBwZXJTZXApLCBidCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIHByZWZpeCBlYWNoIGVsZW1lbnQgb2YgbGlzdCB3aXRoIHdyYXBwZXIKKyAgICAgIGlmIChjb25jYXRGbGFnQW5kQXJncykgeworICAgICAgICBzdGQ6OnRyYW5zZm9ybShvcHRpb25zLmJlZ2luKCksIG9wdGlvbnMuZW5kKCksIG9wdGlvbnMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgWyZ3cmFwcGVyRmxhZ10oc3RkOjpzdHJpbmcgY29uc3QmIG8pIC0+IHN0ZDo6c3RyaW5nIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlckZsYWcuYmFjaygpICsgbzsKKyAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICB9CisgICAgICBmb3IgKHN0ZDo6c3RyaW5nJiBvIDogb3B0aW9ucykgeworICAgICAgICBmb3IgKGF1dG8gaSA9IHdyYXBwZXJGbGFnLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICBlID0gY29uY2F0RmxhZ0FuZEFyZ3MgPyB3cmFwcGVyRmxhZy5lbmQoKSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHdyYXBwZXJGbGFnLmVuZCgpOworICAgICAgICAgICAgIGkgIT0gZTsgKytpKSB7CisgICAgICAgICAgcmVzdWx0LmVtcGxhY2VfYmFjaygqaSwgYnQpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKG8pLCBidCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldENvbXBpbGVPcHRpb25zKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcmVzdWx0LApAQCAtMzE1MSwyMiArMzYxMywxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlYnVnUHJvcGVydGllczsKLSAgY29uc3QgY2hhciogZGVidWdQcm9wID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMiKTsKLSAgaWYgKGRlYnVnUHJvcCkgewotICAgIGNtRXhwYW5kTGlzdChkZWJ1Z1Byb3AsIGRlYnVnUHJvcGVydGllcyk7Ci0gIH0KKyAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdQcm9wZXJ0aWVzKTsKIAogICBib29sIGRlYnVnT3B0aW9ucyA9ICF0aGlzLT5EZWJ1Z0NvbXBpbGVPcHRpb25zRG9uZSAmJgotICAgIGNtQ29udGFpbnMoZGVidWdQcm9wZXJ0aWVzLCAiQ09NUElMRV9PUFRJT05TIik7CisgICAgY206OmNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIkNPTVBJTEVfT1BUSU9OUyIpOwogCiAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENvbmZpZ3VyZURvbmVDTVAwMDI2KCkpIHsKICAgICB0aGlzLT5EZWJ1Z0NvbXBpbGVPcHRpb25zRG9uZSA9IHRydWU7CiAgIH0KIAotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyaWVzID0KLSAgICBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcyh0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db21waWxlT3B0aW9uc0VudHJpZXMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllcyA9IEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAorICAgIHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLCB0aGlzLT5Db21waWxlT3B0aW9uc0VudHJpZXMpOwogCiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX0NPTVBJTEVfT1BUSU9OUyIsIGxhbmd1YWdlLAogICAgICAgICAgICAgICAgICAgICAgICZkYWdDaGVja2VyLCBlbnRyaWVzKTsKQEAgLTMxOTcsMjIgKzM2NTUsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWJ1Z1Byb3BlcnRpZXM7Ci0gIGNvbnN0IGNoYXIqIGRlYnVnUHJvcCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIik7Ci0gIGlmIChkZWJ1Z1Byb3ApIHsKLSAgICBjbUV4cGFuZExpc3QoZGVidWdQcm9wLCBkZWJ1Z1Byb3BlcnRpZXMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUHJvcGVydGllcyk7CiAKICAgYm9vbCBkZWJ1Z0ZlYXR1cmVzID0gIXRoaXMtPkRlYnVnQ29tcGlsZUZlYXR1cmVzRG9uZSAmJgotICAgIGNtQ29udGFpbnMoZGVidWdQcm9wZXJ0aWVzLCAiQ09NUElMRV9GRUFUVVJFUyIpOworICAgIGNtOjpjb250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJDT01QSUxFX0ZFQVRVUkVTIik7CiAKICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0Q29uZmlndXJlRG9uZUNNUDAwMjYoKSkgewogICAgIHRoaXMtPkRlYnVnQ29tcGlsZUZlYXR1cmVzRG9uZSA9IHRydWU7CiAgIH0KIAotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyaWVzID0KLSAgICBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcyh0aGlzLCBjb25maWcsIHN0ZDo6c3RyaW5nKCksICZkYWdDaGVja2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbXBpbGVGZWF0dXJlc0VudHJpZXMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllcyA9IEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAorICAgIHRoaXMsIGNvbmZpZywgc3RkOjpzdHJpbmcoKSwgJmRhZ0NoZWNrZXIsIHRoaXMtPkNvbXBpbGVGZWF0dXJlc0VudHJpZXMpOwogCiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX0NPTVBJTEVfRkVBVFVSRVMiLAogICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKCksICZkYWdDaGVja2VyLCBlbnRyaWVzKTsKQEAgLTMyNDUsMjIgKzM2OTksMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWJ1Z1Byb3BlcnRpZXM7Ci0gIGNvbnN0IGNoYXIqIGRlYnVnUHJvcCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIik7Ci0gIGlmIChkZWJ1Z1Byb3ApIHsKLSAgICBjbUV4cGFuZExpc3QoZGVidWdQcm9wLCBkZWJ1Z1Byb3BlcnRpZXMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUHJvcGVydGllcyk7CiAKICAgYm9vbCBkZWJ1Z0RlZmluZXMgPSAhdGhpcy0+RGVidWdDb21waWxlRGVmaW5pdGlvbnNEb25lICYmCi0gICAgY21Db250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJDT01QSUxFX0RFRklOSVRJT05TIik7CisgICAgY206OmNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIkNPTVBJTEVfREVGSU5JVElPTlMiKTsKIAogICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDb25maWd1cmVEb25lQ01QMDAyNigpKSB7CiAgICAgdGhpcy0+RGVidWdDb21waWxlRGVmaW5pdGlvbnNEb25lID0gdHJ1ZTsKICAgfQogCi0gIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJpZXMgPQotICAgIEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbXBpbGVEZWZpbml0aW9uc0VudHJpZXMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllcyA9IEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAorICAgIHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLCB0aGlzLT5Db21waWxlRGVmaW5pdGlvbnNFbnRyaWVzKTsKIAogICBBZGRJbnRlcmZhY2VFbnRyaWVzKHRoaXMsIGNvbmZpZywgIklOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TIiwgbGFuZ3VhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIGVudHJpZXMpOwpAQCAtMzI2OCw3ICszNzE4LDcgQEAKICAgaWYgKCFjb25maWcuZW1wdHkoKSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbmZpZ1Byb3BOYW1lID0KICAgICAgICJDT01QSUxFX0RFRklOSVRJT05TXyIgKyBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKLSAgICBjb25zdCBjaGFyKiBjb25maWdQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcE5hbWUpOworICAgIGNtUHJvcCBjb25maWdQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoY29uZmlnUHJvcE5hbWUpOwogICAgIGlmIChjb25maWdQcm9wKSB7CiAgICAgICBzd2l0Y2ggKHRoaXMtPk1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA0MykpIHsKICAgICAgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOiB7CkBAIC0zMjc4LDEwICszNzI4LDEwIEBACiAgICAgICAgICAgQ01fRkFMTFRIUk9VR0g7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBjbVBvbGljaWVzOjpPTEQ6IHsKLSAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cnkoCi0gICAgICAgICAgICBDcmVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KGNvbmZpZ1Byb3ApKTsKLSAgICAgICAgICBlbnRyaWVzLmVtcGxhY2VfYmFjayhFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cnkoCi0gICAgICAgICAgICB0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwgZW50cnkuZ2V0KCkpKTsKKyAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cnkgPQorICAgICAgICAgICAgQ3JlYXRlVGFyZ2V0UHJvcGVydHlFbnRyeSgqY29uZmlnUHJvcCk7CisgICAgICAgICAgZW50cmllcy5FbnRyaWVzLmVtcGxhY2VfYmFjayhFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cnkoCisgICAgICAgICAgICB0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwgKmVudHJ5KSk7CiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgogICAgICAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0FMV0FZUzoKQEAgLTMzMDYsMTEgKzM3NTYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0cik7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlYnVnUHJvcGVydGllczsKLSAgY29uc3QgY2hhciogZGVidWdQcm9wID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMiKTsKLSAgaWYgKGRlYnVnUHJvcCkgewotICAgIGNtRXhwYW5kTGlzdChkZWJ1Z1Byb3AsIGRlYnVnUHJvcGVydGllcyk7Ci0gIH0KKyAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdQcm9wZXJ0aWVzKTsKIAogICBib29sIGRlYnVnRGVmaW5lcyA9ICF0aGlzLT5EZWJ1Z1ByZWNvbXBpbGVIZWFkZXJzRG9uZSAmJgogICAgIHN0ZDo6ZmluZChkZWJ1Z1Byb3BlcnRpZXMuYmVnaW4oKSwgZGVidWdQcm9wZXJ0aWVzLmVuZCgpLApAQCAtMzMyMCw5ICszNzY3LDggQEAKICAgICB0aGlzLT5EZWJ1Z1ByZWNvbXBpbGVIZWFkZXJzRG9uZSA9IHRydWU7CiAgIH0KIAotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyaWVzID0KLSAgICBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcyh0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5QcmVjb21waWxlSGVhZGVyc0VudHJpZXMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllcyA9IEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyaWVzKAorICAgIHRoaXMsIGNvbmZpZywgbGFuZ3VhZ2UsICZkYWdDaGVja2VyLCB0aGlzLT5QcmVjb21waWxlSGVhZGVyc0VudHJpZXMpOwogCiAgIEFkZEludGVyZmFjZUVudHJpZXModGhpcywgY29uZmlnLCAiSU5URVJGQUNFX1BSRUNPTVBJTEVfSEVBREVSUyIsIGxhbmd1YWdlLAogICAgICAgICAgICAgICAgICAgICAgICZkYWdDaGVja2VyLCBlbnRyaWVzKTsKQEAgLTMzMzUsNyArMzc4MSw4IEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQY2hIZWFkZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoKSBjb25zdAogewogICBpZiAobGFuZ3VhZ2UgIT0gIkMiICYmIGxhbmd1YWdlICE9ICJDWFgiICYmIGxhbmd1YWdlICE9ICJPQkpDIiAmJgogICAgICAgbGFuZ3VhZ2UgIT0gIk9CSkNYWCIpIHsKQEAgLTMzNDYsMTEgKzM3OTMsMTEgQEAKICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKICAgfQogICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogZ2VuZXJhdG9yVGFyZ2V0ID0gdGhpczsKLSAgY29uc3QgY2hhciogcGNoUmV1c2VGcm9tID0KKyAgY21Qcm9wIHBjaFJldXNlRnJvbSA9CiAgICAgZ2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00iKTsKIAogICBjb25zdCBhdXRvIGluc2VydGVkID0KLSAgICB0aGlzLT5QY2hIZWFkZXJzLmluc2VydChzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZywgIiIpKTsKKyAgICB0aGlzLT5QY2hIZWFkZXJzLmluc2VydChzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZyArIGFyY2gsICIiKSk7CiAgIGlmIChpbnNlcnRlZC5zZWNvbmQpIHsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IGhlYWRlcnMgPQogICAgICAgdGhpcy0+R2V0UHJlY29tcGlsZUhlYWRlcnMoY29uZmlnLCBsYW5ndWFnZSk7CkBAIC0zMzYxLDcgKzM4MDgsNyBAQAogCiAgICAgaWYgKHBjaFJldXNlRnJvbSkgewogICAgICAgZ2VuZXJhdG9yVGFyZ2V0ID0KLSAgICAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkZpbmRHZW5lcmF0b3JUYXJnZXQocGNoUmV1c2VGcm9tKTsKKyAgICAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkZpbmRHZW5lcmF0b3JUYXJnZXQoKnBjaFJldXNlRnJvbSk7CiAgICAgfQogCiAgICAgZmlsZW5hbWUgPSBjbVN0ckNhdCgKQEAgLTMzNzQsMTQgKzM4MjEsMjMgQEAKICAgICAgIHsgIk9CSkNYWCIsICIub2JqY3h4Lmh4eCIgfQogICAgIH07CiAKLSAgICBmaWxlbmFtZSA9IGNtU3RyQ2F0KGZpbGVuYW1lLCAiQ01ha2VGaWxlcy8iLCBnZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICIuZGlyL2NtYWtlX3BjaCIsIGxhbmd1YWdlVG9FeHRlbnNpb24uYXQobGFuZ3VhZ2UpKTsKKyAgICBmaWxlbmFtZSA9CisgICAgICBjbVN0ckNhdChmaWxlbmFtZSwgIkNNYWtlRmlsZXMvIiwgZ2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCksICIuZGlyIik7CisKKyAgICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKSkgeworICAgICAgZmlsZW5hbWUgPSBjbVN0ckNhdChmaWxlbmFtZSwgIi8iLCBjb25maWcpOworICAgIH0KKworICAgIGZpbGVuYW1lID0KKyAgICAgIGNtU3RyQ2F0KGZpbGVuYW1lLCAiL2NtYWtlX3BjaCIsIGFyY2guZW1wdHkoKSA/ICIiIDogY21TdHJDYXQoIl8iLCBhcmNoKSwKKyAgICAgICAgICAgICAgIGxhbmd1YWdlVG9FeHRlbnNpb24uYXQobGFuZ3VhZ2UpKTsKIAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVuYW1lX3RtcCA9IGNtU3RyQ2F0KGZpbGVuYW1lLCAiLnRtcCIpOwogICAgIGlmICghcGNoUmV1c2VGcm9tKSB7CiAgICAgICBhdXRvIHBjaFByb2xvZ3VlID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX1BDSF9QUk9MT0dVRSIpOwogICAgICAgYXV0byBwY2hFcGlsb2d1ZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9QQ0hfRVBJTE9HVUUiKTsKIAorICAgICAgc3RkOjpzdHJpbmcgZmlyc3RIZWFkZXJPbkRpc2s7CiAgICAgICB7CiAgICAgICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmaWxlKAogICAgICAgICAgIGZpbGVuYW1lX3RtcCwgZmFsc2UsCkBAIC0zNDA1LDYgKzM4NjEsMTEgQEAKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZmlsZSA8PCAiI2luY2x1ZGUgXCIiIDw8IGhlYWRlcl9idC5WYWx1ZSA8PCAiXCJcbiI7CiAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoaGVhZGVyX2J0LlZhbHVlKSAmJgorICAgICAgICAgICAgICBmaXJzdEhlYWRlck9uRGlzay5lbXB0eSgpKSB7CisgICAgICAgICAgICBmaXJzdEhlYWRlck9uRGlzayA9IGhlYWRlcl9idC5WYWx1ZTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxhbmd1YWdlID09ICJDWFgiKSB7CiAgICAgICAgICAgZmlsZSA8PCAiI2VuZGlmIC8vIF9fY3BsdXNwbHVzXG4iOwpAQCAtMzQxNiw2ICszODc3LDExIEBACiAgICAgICAgICAgZmlsZSA8PCBwY2hFcGlsb2d1ZSA8PCAiXG4iOwogICAgICAgICB9CiAgICAgICB9CisKKyAgICAgIGlmICghZmlyc3RIZWFkZXJPbkRpc2suZW1wdHkoKSkgeworICAgICAgICBjbUZpbGVUaW1lczo6Q29weShmaXJzdEhlYWRlck9uRGlzaywgZmlsZW5hbWVfdG1wKTsKKyAgICAgIH0KKwogICAgICAgY21TeXN0ZW1Ub29sczo6TW92ZUZpbGVJZkRpZmZlcmVudChmaWxlbmFtZV90bXAsIGZpbGVuYW1lKTsKICAgICB9CiAgIH0KQEAgLTM0MjMsMzQgKzM4ODksMzUgQEAKIH0KIAogc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFBjaFNvdXJjZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2gpIGNvbnN0CiB7CiAgIGlmIChsYW5ndWFnZSAhPSAiQyIgJiYgbGFuZ3VhZ2UgIT0gIkNYWCIgJiYgbGFuZ3VhZ2UgIT0gIk9CSkMiICYmCiAgICAgICBsYW5ndWFnZSAhPSAiT0JKQ1hYIikgewogICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwogICB9CiAgIGNvbnN0IGF1dG8gaW5zZXJ0ZWQgPQotICAgIHRoaXMtPlBjaFNvdXJjZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnLCAiIikpOworICAgIHRoaXMtPlBjaFNvdXJjZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnICsgYXJjaCwgIiIpKTsKICAgaWYgKGluc2VydGVkLnNlY29uZCkgewotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEhlYWRlciA9IHRoaXMtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmd1YWdlKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0aGlzLT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCk7CiAgICAgaWYgKHBjaEhlYWRlci5lbXB0eSgpKSB7CiAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKICAgICB9CiAgICAgc3RkOjpzdHJpbmcmIGZpbGVuYW1lID0gaW5zZXJ0ZWQuZmlyc3QtPnNlY29uZDsKIAogICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBnZW5lcmF0b3JUYXJnZXQgPSB0aGlzOwotICAgIGNvbnN0IGNoYXIqIHBjaFJldXNlRnJvbSA9CisgICAgY21Qcm9wIHBjaFJldXNlRnJvbSA9CiAgICAgICBnZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJQUkVDT01QSUxFX0hFQURFUlNfUkVVU0VfRlJPTSIpOwogICAgIGlmIChwY2hSZXVzZUZyb20pIHsKICAgICAgIGdlbmVyYXRvclRhcmdldCA9Ci0gICAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KHBjaFJldXNlRnJvbSk7CisgICAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KCpwY2hSZXVzZUZyb20pOwogICAgIH0KIAogICAgIGZpbGVuYW1lID0KICAgICAgIGNtU3RyQ2F0KGdlbmVyYXRvclRhcmdldC0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgICIvQ01ha2VGaWxlcy8iLCBnZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSwgIi5kaXIvY21ha2VfcGNoIik7CiAKLSAgICAvLyBGb3IgR0NDIHRoZSBzb3VyY2UgZXh0ZW5zaW9uIHdpbGwgYmUgdHJhbmZvcm1lZCBpbnRvIC5oW3h4XS5nY2gKKyAgICAvLyBGb3IgR0NDIHRoZSBzb3VyY2UgZXh0ZW5zaW9uIHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50byAuaFt4eF0uZ2NoCiAgICAgaWYgKCF0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfTElOS19QQ0giKSkgewogICAgICAgY29uc3Qgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBsYW5ndWFnZVRvRXh0ZW5zaW9uID0gewogICAgICAgICB7ICJDIiwgIi5oLmMiIH0sCkBAIC0zNDU5LDEzICszOTI2LDE1IEBACiAgICAgICAgIHsgIk9CSkNYWCIsICIub2JqY3h4Lmh4eC5tbSIgfQogICAgICAgfTsKIAotICAgICAgZmlsZW5hbWUgKz0gbGFuZ3VhZ2VUb0V4dGVuc2lvbi5hdChsYW5ndWFnZSk7CisgICAgICBmaWxlbmFtZSA9IGNtU3RyQ2F0KGZpbGVuYW1lLCBhcmNoLmVtcHR5KCkgPyAiIiA6IGNtU3RyQ2F0KCJfIiwgYXJjaCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlVG9FeHRlbnNpb24uYXQobGFuZ3VhZ2UpKTsKICAgICB9IGVsc2UgewogICAgICAgY29uc3Qgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBsYW5ndWFnZVRvRXh0ZW5zaW9uID0gewogICAgICAgICB7ICJDIiwgIi5jIiB9LCB7ICJDWFgiLCAiLmN4eCIgfSwgeyAiT0JKQyIsICIubSIgfSwgeyAiT0JKQ1hYIiwgIi5tbSIgfQogICAgICAgfTsKIAotICAgICAgZmlsZW5hbWUgKz0gbGFuZ3VhZ2VUb0V4dGVuc2lvbi5hdChsYW5ndWFnZSk7CisgICAgICBmaWxlbmFtZSA9IGNtU3RyQ2F0KGZpbGVuYW1lLCBhcmNoLmVtcHR5KCkgPyAiIiA6IGNtU3RyQ2F0KCJfIiwgYXJjaCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlVG9FeHRlbnNpb24uYXQobGFuZ3VhZ2UpKTsKICAgICB9CiAKICAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlbmFtZV90bXAgPSBjbVN0ckNhdChmaWxlbmFtZSwgIi50bXAiKTsKQEAgLTM0NzQsNiArMzk0Myw3IEBACiAgICAgICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmaWxlKGZpbGVuYW1lX3RtcCk7CiAgICAgICAgIGZpbGUgPDwgIi8qIGdlbmVyYXRlZCBieSBDTWFrZSAqL1xuIjsKICAgICAgIH0KKyAgICAgIGNtRmlsZVRpbWVzOjpDb3B5KHBjaEhlYWRlciwgZmlsZW5hbWVfdG1wKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6Ok1vdmVGaWxlSWZEaWZmZXJlbnQoZmlsZW5hbWVfdG1wLCBmaWxlbmFtZSk7CiAgICAgfQogICB9CkBAIC0zNDgxLDE2ICszOTUxLDE3IEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQY2hGaWxlT2JqZWN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCkKIHsKICAgaWYgKGxhbmd1YWdlICE9ICJDIiAmJiBsYW5ndWFnZSAhPSAiQ1hYIiAmJiBsYW5ndWFnZSAhPSAiT0JKQyIgJiYKICAgICAgIGxhbmd1YWdlICE9ICJPQkpDWFgiKSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiAgIH0KICAgY29uc3QgYXV0byBpbnNlcnRlZCA9Ci0gICAgdGhpcy0+UGNoT2JqZWN0RmlsZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnLCAiIikpOworICAgIHRoaXMtPlBjaE9iamVjdEZpbGVzLmluc2VydChzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZyArIGFyY2gsICIiKSk7CiAgIGlmIChpbnNlcnRlZC5zZWNvbmQpIHsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPSB0aGlzLT5HZXRQY2hTb3VyY2UoY29uZmlnLCBsYW5ndWFnZSk7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoU291cmNlID0gdGhpcy0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpOwogICAgIGlmIChwY2hTb3VyY2UuZW1wdHkoKSkgewogICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiAgICAgfQpAQCAtMzUwMCwxNSArMzk3MSwyMCBAQAogICAgICAgcGNoU291cmNlLCBmYWxzZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7CiAKICAgICBmaWxlbmFtZSA9IGNtU3RyQ2F0KHRoaXMtPk9iamVjdERpcmVjdG9yeSwgdGhpcy0+R2V0T2JqZWN0TmFtZShwY2hTZikpOworICAgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKAorICAgICAgICBmaWxlbmFtZSwgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldENNYWtlQ0ZHSW50RGlyKCksIGNvbmZpZyk7CisgICAgfQogICB9CiAgIHJldHVybiBpbnNlcnRlZC5maXJzdC0+c2Vjb25kOwogfQogCiBzdGQ6OnN0cmluZyBjbUdlbmVyYXRvclRhcmdldDo6R2V0UGNoRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2gpCiB7CiAgIGNvbnN0IGF1dG8gaW5zZXJ0ZWQgPQotICAgIHRoaXMtPlBjaEZpbGVzLmluc2VydChzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZywgIiIpKTsKKyAgICB0aGlzLT5QY2hGaWxlcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIobGFuZ3VhZ2UgKyBjb25maWcgKyBhcmNoLCAiIikpOwogICBpZiAoaW5zZXJ0ZWQuc2Vjb25kKSB7CiAgICAgc3RkOjpzdHJpbmcmIHBjaEZpbGUgPSBpbnNlcnRlZC5maXJzdC0+c2Vjb25kOwogCkBAIC0zNTI4LDIwICs0MDA0LDIwIEBACiAgICAgICB9OwogCiAgICAgICBjbUdlbmVyYXRvclRhcmdldCogZ2VuZXJhdG9yVGFyZ2V0ID0gdGhpczsKLSAgICAgIGNvbnN0IGNoYXIqIHBjaFJldXNlRnJvbSA9CisgICAgICBjbVByb3AgcGNoUmV1c2VGcm9tID0KICAgICAgICAgZ2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00iKTsKICAgICAgIGlmIChwY2hSZXVzZUZyb20pIHsKICAgICAgICAgZ2VuZXJhdG9yVGFyZ2V0ID0KLSAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZEdlbmVyYXRvclRhcmdldChwY2hSZXVzZUZyb20pOworICAgICAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KCpwY2hSZXVzZUZyb20pOwogICAgICAgfQogCiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hGaWxlT2JqZWN0ID0KLSAgICAgICAgZ2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hGaWxlT2JqZWN0KGNvbmZpZywgbGFuZ3VhZ2UpOworICAgICAgICBnZW5lcmF0b3JUYXJnZXQtPkdldFBjaEZpbGVPYmplY3QoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCk7CiAgICAgICBpZiAoIXBjaEV4dGVuc2lvbi5lbXB0eSgpKSB7CiAgICAgICAgIHBjaEZpbGUgPSByZXBsYWNlRXh0ZW5zaW9uKHBjaEZpbGVPYmplY3QsIHBjaEV4dGVuc2lvbik7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgIHBjaEZpbGUgPSB0aGlzLT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSk7CisgICAgICBwY2hGaWxlID0gdGhpcy0+R2V0UGNoSGVhZGVyKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpOwogICAgICAgcGNoRmlsZSArPSBwY2hFeHRlbnNpb247CiAgICAgfQogICB9CkBAIC0zNTQ5LDE5ICs0MDI1LDI3IEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQY2hDcmVhdGVDb21waWxlT3B0aW9ucygKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoKQogewogICBjb25zdCBhdXRvIGluc2VydGVkID0gdGhpcy0+UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMuaW5zZXJ0KAotICAgIHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnLCAiIikpOworICAgIHN0ZDo6bWFrZV9wYWlyKGxhbmd1YWdlICsgY29uZmlnICsgYXJjaCwgIiIpKTsKICAgaWYgKGluc2VydGVkLnNlY29uZCkgewogICAgIHN0ZDo6c3RyaW5nJiBjcmVhdGVPcHRpb25MaXN0ID0gaW5zZXJ0ZWQuZmlyc3QtPnNlY29uZDsKIAorICAgIGlmICh0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiUENIX1dBUk5fSU5WQUxJRCIpKSB7CisgICAgICBjcmVhdGVPcHRpb25MaXN0ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAorICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX0lOVkFMSURfUENIIikpOworICAgIH0KKwogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNyZWF0ZU9wdFZhciA9CiAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX0NSRUFURV9QQ0giKTsKLSAgICBjcmVhdGVPcHRpb25MaXN0ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKGNyZWF0ZU9wdFZhcik7CiAKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0aGlzLT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSk7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRmlsZSA9IHRoaXMtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5ndWFnZSk7CisgICAgY3JlYXRlT3B0aW9uTGlzdCA9IGNtU3RyQ2F0KAorICAgICAgY3JlYXRlT3B0aW9uTGlzdCwgIjsiLCB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oY3JlYXRlT3B0VmFyKSk7CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0aGlzLT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCk7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRmlsZSA9IHRoaXMtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCk7CiAKICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGNyZWF0ZU9wdGlvbkxpc3QsICI8UENIX0hFQURFUj4iLCBwY2hIZWFkZXIpOwogICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoY3JlYXRlT3B0aW9uTGlzdCwgIjxQQ0hfRklMRT4iLCBwY2hGaWxlKTsKQEAgLTM1NzAsMTkgKzQwNTQsMzMgQEAKIH0KIAogc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFBjaFVzZUNvbXBpbGVPcHRpb25zKAotICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2gpCiB7Ci0gIGNvbnN0IGF1dG8gaW5zZXJ0ZWQgPQotICAgIHRoaXMtPlBjaFVzZUNvbXBpbGVPcHRpb25zLmluc2VydChzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZywgIiIpKTsKKyAgY29uc3QgYXV0byBpbnNlcnRlZCA9IHRoaXMtPlBjaFVzZUNvbXBpbGVPcHRpb25zLmluc2VydCgKKyAgICBzdGQ6Om1ha2VfcGFpcihsYW5ndWFnZSArIGNvbmZpZyArIGFyY2gsICIiKSk7CiAgIGlmIChpbnNlcnRlZC5zZWNvbmQpIHsKICAgICBzdGQ6OnN0cmluZyYgdXNlT3B0aW9uTGlzdCA9IGluc2VydGVkLmZpcnN0LT5zZWNvbmQ7CiAKLSAgICBjb25zdCBzdGQ6OnN0cmluZyB1c2VPcHRWYXIgPQotICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmd1YWdlLCAiX0NPTVBJTEVfT1BUSU9OU19VU0VfUENIIik7Ci0gICAgdXNlT3B0aW9uTGlzdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbih1c2VPcHRWYXIpOworICAgIGlmICh0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiUENIX1dBUk5fSU5WQUxJRCIpKSB7CisgICAgICB1c2VPcHRpb25MaXN0ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAorICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX0lOVkFMSURfUENIIikpOworICAgIH0KIAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEhlYWRlciA9IHRoaXMtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmd1YWdlKTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hGaWxlID0gdGhpcy0+R2V0UGNoRmlsZShjb25maWcsIGxhbmd1YWdlKTsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyB1c2VPcHRWYXIgPQorICAgICAgY21TdHJDYXQobGFuZ3VhZ2UsICJfQ09NUElMRV9PUFRJT05TX1VTRV9QQ0giKTsKKworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB1c2VPcHRpb25MaXN0UHJvcGVydHkgPQorICAgICAgdGhpcy0+R2V0U2FmZVByb3BlcnR5KHVzZU9wdFZhcik7CisKKyAgICB1c2VPcHRpb25MaXN0ID0gY21TdHJDYXQoCisgICAgICB1c2VPcHRpb25MaXN0LCAiOyIsCisgICAgICB1c2VPcHRpb25MaXN0UHJvcGVydHkuZW1wdHkoKQorICAgICAgICA/IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgdXNlT3B0VmFyKSkKKyAgICAgICAgOiB1c2VPcHRpb25MaXN0UHJvcGVydHkpOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoSGVhZGVyID0gdGhpcy0+R2V0UGNoSGVhZGVyKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEZpbGUgPSB0aGlzLT5HZXRQY2hGaWxlKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpOwogCiAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyh1c2VPcHRpb25MaXN0LCAiPFBDSF9IRUFERVI+IiwgcGNoSGVhZGVyKTsKICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKHVzZU9wdGlvbkxpc3QsICI8UENIX0ZJTEU+IiwgcGNoRmlsZSk7CkBAIC0zNjExLDYgKzQxMDksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpIGNvbnN0CiB7CisgIGlmICh0aGlzLT5Jc0RldmljZUxpbmsoKSAmJgorICAgICAgdGhpcy0+R2V0UG9saWN5U3RhdHVzQ01QMDEwNSgpICE9IGNtUG9saWNpZXM6Ok5FVykgeworICAgIC8vIGxpbmsgb3B0aW9ucyBhcmUgbm90IHByb3BhZ2F0ZWQgdG8gdGhlIGRldmljZSBsaW5rIHN0ZXAKKyAgICByZXR1cm47CisgIH0KKwogICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IHRtcCA9IHRoaXMtPkdldExpbmtPcHRpb25zKGNvbmZpZywgbGFuZ3VhZ2UpOwogICByZXN1bHQucmVzZXJ2ZSh0bXAuc2l6ZSgpKTsKICAgZm9yIChCVDxzdGQ6OnN0cmluZz4mIHYgOiB0bXApIHsKQEAgLTM2MjgsMzYgKzQxMzIsODMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWJ1Z1Byb3BlcnRpZXM7Ci0gIGNvbnN0IGNoYXIqIGRlYnVnUHJvcCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIik7Ci0gIGlmIChkZWJ1Z1Byb3ApIHsKLSAgICBjbUV4cGFuZExpc3QoZGVidWdQcm9wLCBkZWJ1Z1Byb3BlcnRpZXMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUHJvcGVydGllcyk7CiAKLSAgYm9vbCBkZWJ1Z09wdGlvbnMgPQotICAgICF0aGlzLT5EZWJ1Z0xpbmtPcHRpb25zRG9uZSAmJiBjbUNvbnRhaW5zKGRlYnVnUHJvcGVydGllcywgIkxJTktfT1BUSU9OUyIpOworICBib29sIGRlYnVnT3B0aW9ucyA9ICF0aGlzLT5EZWJ1Z0xpbmtPcHRpb25zRG9uZSAmJgorICAgIGNtOjpjb250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJMSU5LX09QVElPTlMiKTsKIAogICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDb25maWd1cmVEb25lQ01QMDAyNigpKSB7CiAgICAgdGhpcy0+RGVidWdMaW5rT3B0aW9uc0RvbmUgPSB0cnVlOwogICB9CiAKLSAgc3RkOjp2ZWN0b3I8RXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cmllcyA9Ci0gICAgRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJpZXModGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TGlua09wdGlvbnNFbnRyaWVzKTsKKyAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzIGVudHJpZXMgPSBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcygKKyAgICB0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwgdGhpcy0+TGlua09wdGlvbnNFbnRyaWVzKTsKIAogICBBZGRJbnRlcmZhY2VFbnRyaWVzKHRoaXMsIGNvbmZpZywgIklOVEVSRkFDRV9MSU5LX09QVElPTlMiLCBsYW5ndWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgZW50cmllcyk7CisgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIGVudHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0UG9saWN5U3RhdHVzQ01QMDA5OSgpICE9IGNtUG9saWNpZXM6Ok5FVyk7CiAKICAgcHJvY2Vzc09wdGlvbnModGhpcywgZW50cmllcywgcmVzdWx0LCB1bmlxdWVPcHRpb25zLCBkZWJ1Z09wdGlvbnMsCi0gICAgICAgICAgICAgICAgICJsaW5rIG9wdGlvbnMiLCBPcHRpb25zUGFyc2U6OlNoZWxsKTsKKyAgICAgICAgICAgICAgICAgImxpbmsgb3B0aW9ucyIsIE9wdGlvbnNQYXJzZTo6U2hlbGwsIHRoaXMtPklzRGV2aWNlTGluaygpKTsKKworICBpZiAodGhpcy0+SXNEZXZpY2VMaW5rKCkpIHsKKyAgICAvLyB3cmFwIGhvc3QgbGluayBvcHRpb25zCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgd3JhcHBlcih0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oCisgICAgICAiQ01BS0VfIiArIGxhbmd1YWdlICsgIl9ERVZJQ0VfQ09NUElMRVJfV1JBUFBFUl9GTEFHIikpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB3cmFwcGVyRmxhZyA9IGNtRXhwYW5kZWRMaXN0KHdyYXBwZXIpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHdyYXBwZXJTZXAodGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAorICAgICAgIkNNQUtFXyIgKyBsYW5ndWFnZSArICJfREVWSUNFX0NPTVBJTEVSX1dSQVBQRVJfRkxBR19TRVAiKSk7CisgICAgYm9vbCBjb25jYXRGbGFnQW5kQXJncyA9IHRydWU7CisgICAgaWYgKCF3cmFwcGVyRmxhZy5lbXB0eSgpICYmIHdyYXBwZXJGbGFnLmJhY2soKSA9PSAiICIpIHsKKyAgICAgIGNvbmNhdEZsYWdBbmRBcmdzID0gZmFsc2U7CisgICAgICB3cmFwcGVyRmxhZy5wb3BfYmFjaygpOworICAgIH0KKworICAgIGF1dG8gaXQgPSByZXN1bHQuYmVnaW4oKTsKKyAgICB3aGlsZSAoaXQgIT0gcmVzdWx0LmVuZCgpKSB7CisgICAgICBpZiAoaXQtPlZhbHVlID09IERMX0JFR0lOKSB7CisgICAgICAgIC8vIGRldmljZSBsaW5rIG9wdGlvbnMsIG5vIHRyZWF0bWVudAorICAgICAgICBpdCA9IHJlc3VsdC5lcmFzZShpdCk7CisgICAgICAgIGl0ID0gc3RkOjpmaW5kX2lmKGl0LCByZXN1bHQuZW5kKCksIFtdKGNvbnN0IEJUPHN0ZDo6c3RyaW5nPiYgaXRlbSkgeworICAgICAgICAgIHJldHVybiBpdGVtLlZhbHVlID09IERMX0VORDsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChpdCAhPSByZXN1bHQuZW5kKCkpIHsKKyAgICAgICAgICBpdCA9IHJlc3VsdC5lcmFzZShpdCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGhvc3QgbGluayBvcHRpb25zIG11c3QgYmUgd3JhcHBlZAorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0aW9uczsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6UGFyc2VVbml4Q29tbWFuZExpbmUoaXQtPlZhbHVlLmNfc3RyKCksIG9wdGlvbnMpOworICAgICAgICBhdXRvIGhvc3RPcHRpb25zID0gd3JhcE9wdGlvbnMob3B0aW9ucywgaXQtPkJhY2t0cmFjZSwgd3JhcHBlckZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyU2VwLCBjb25jYXRGbGFnQW5kQXJncyk7CisgICAgICAgIGl0ID0gcmVzdWx0LmVyYXNlKGl0KTsKKyAgICAgICAgLy8gc29tZSBjb21waWxlcnMgKGxpa2UgZ2NjIDQuOCBvciBJbnRlbCAxOS4wIG9yIFhMQyAxNikgZG8gbm90IHJlc3BlY3QKKyAgICAgICAgLy8gQysrMTEgc3RhbmRhcmQ6ICdzdGQ6OnZlY3Rvcjo6aW5zZXJ0KCknIGRvIG5vdCByZXR1cm5zIGFuIGl0ZXJhdG9yLAorICAgICAgICAvLyBzbyBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgaXRlcmF0b3IgYWZ0ZXIgaW5zZXJ0aW9uLgorICAgICAgICBpZiAoaXQgPT0gcmVzdWx0LmVuZCgpKSB7CisgICAgICAgICAgY206OmFwcGVuZChyZXN1bHQsIGhvc3RPcHRpb25zKTsKKyAgICAgICAgICBpdCA9IHJlc3VsdC5lbmQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBhdXRvIGluZGV4ID0gaXQgLSByZXN1bHQuYmVnaW4oKTsKKyAgICAgICAgICByZXN1bHQuaW5zZXJ0KGl0LCBob3N0T3B0aW9ucy5iZWdpbigpLCBob3N0T3B0aW9ucy5lbmQoKSk7CisgICAgICAgICAgaXQgPSByZXN1bHQuYmVnaW4oKSArIGluZGV4ICsgaG9zdE9wdGlvbnMuc2l6ZSgpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CiAKICAgLy8gTGFzdCBzdGVwOiByZXBsYWNlICJMSU5LRVI6IiBwcmVmaXhlZCBlbGVtZW50cyBieQogICAvLyBhY3R1YWwgbGlua2VyIHdyYXBwZXIKICAgY29uc3Qgc3RkOjpzdHJpbmcgd3JhcHBlcih0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oCi0gICAgIkNNQUtFXyIgKyBsYW5ndWFnZSArICJfTElOS0VSX1dSQVBQRVJfRkxBRyIpKTsKKyAgICAiQ01BS0VfIiArIGxhbmd1YWdlICsKKyAgICAodGhpcy0+SXNEZXZpY2VMaW5rKCkgPyAiX0RFVklDRV9MSU5LRVJfV1JBUFBFUl9GTEFHIgorICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJfTElOS0VSX1dSQVBQRVJfRkxBRyIpKSk7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB3cmFwcGVyRmxhZyA9IGNtRXhwYW5kZWRMaXN0KHdyYXBwZXIpOwogICBjb25zdCBzdGQ6OnN0cmluZyB3cmFwcGVyU2VwKHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKLSAgICAiQ01BS0VfIiArIGxhbmd1YWdlICsgIl9MSU5LRVJfV1JBUFBFUl9GTEFHX1NFUCIpKTsKKyAgICAiQ01BS0VfIiArIGxhbmd1YWdlICsKKyAgICAodGhpcy0+SXNEZXZpY2VMaW5rKCkgPyAiX0RFVklDRV9MSU5LRVJfV1JBUFBFUl9GTEFHX1NFUCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiX0xJTktFUl9XUkFQUEVSX0ZMQUdfU0VQIikpKTsKICAgYm9vbCBjb25jYXRGbGFnQW5kQXJncyA9IHRydWU7CiAgIGlmICghd3JhcHBlckZsYWcuZW1wdHkoKSAmJiB3cmFwcGVyRmxhZy5iYWNrKCkgPT0gIiAiKSB7CiAgICAgY29uY2F0RmxhZ0FuZEFyZ3MgPSBmYWxzZTsKQEAgLTM3MDMsNTEgKzQyNTQsOCBAQAogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IG9wdGlvbnM7Ci0gICAgaWYgKHdyYXBwZXJGbGFnLmVtcHR5KCkpIHsKLSAgICAgIC8vIG5vdGhpbmcgc3BlY2lmaWVkLCBpbnNlcnQgZWxlbWVudHMgYXMgaXMKLSAgICAgIG9wdGlvbnMucmVzZXJ2ZShsaW5rZXJPcHRpb25zLnNpemUoKSk7Ci0gICAgICBmb3IgKHN0ZDo6c3RyaW5nJiBvIDogbGlua2VyT3B0aW9ucykgewotICAgICAgICBvcHRpb25zLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUobyksIGJ0KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKCF3cmFwcGVyU2VwLmVtcHR5KCkpIHsKLSAgICAgICAgaWYgKGNvbmNhdEZsYWdBbmRBcmdzKSB7Ci0gICAgICAgICAgLy8gaW5zZXJ0IGZsYWcgZWxlbWVudHMgZXhjZXB0IGxhc3Qgb25lCi0gICAgICAgICAgZm9yIChhdXRvIGkgPSB3cmFwcGVyRmxhZy5iZWdpbigpOyBpICE9IHdyYXBwZXJGbGFnLmVuZCgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBvcHRpb25zLmVtcGxhY2VfYmFjaygqaSwgYnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBjb25jYXRlbmF0ZSBsYXN0IGZsYWcgZWxlbWVudCBhbmQgYWxsIExJTktFUiBsaXN0IHZhbHVlcwotICAgICAgICAgIC8vIGluIG9uZSBvcHRpb24KLSAgICAgICAgICBvcHRpb25zLmVtcGxhY2VfYmFjaygKLSAgICAgICAgICAgIHdyYXBwZXJGbGFnLmJhY2soKSArIGNtSm9pbihsaW5rZXJPcHRpb25zLCB3cmFwcGVyU2VwKSwgYnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiB3cmFwcGVyRmxhZykgewotICAgICAgICAgICAgb3B0aW9ucy5lbXBsYWNlX2JhY2soaSwgYnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBjb25jYXRlbmF0ZSBhbGwgTElOS0VSIGxpc3QgdmFsdWVzIGluIG9uZSBvcHRpb24KLSAgICAgICAgICBvcHRpb25zLmVtcGxhY2VfYmFjayhjbUpvaW4obGlua2VyT3B0aW9ucywgd3JhcHBlclNlcCksIGJ0KTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gcHJlZml4IGVhY2ggZWxlbWVudCBvZiBMSU5LRVIgbGlzdCB3aXRoIHdyYXBwZXIKLSAgICAgICAgaWYgKGNvbmNhdEZsYWdBbmRBcmdzKSB7Ci0gICAgICAgICAgc3RkOjp0cmFuc2Zvcm0obGlua2VyT3B0aW9ucy5iZWdpbigpLCBsaW5rZXJPcHRpb25zLmVuZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlck9wdGlvbnMuYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbJndyYXBwZXJGbGFnXShzdGQ6OnN0cmluZyBjb25zdCYgbykgLT4gc3RkOjpzdHJpbmcgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXJGbGFnLmJhY2soKSArIG87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzdGQ6OnN0cmluZyYgbyA6IGxpbmtlck9wdGlvbnMpIHsKLSAgICAgICAgICBmb3IgKGF1dG8gaSA9IHdyYXBwZXJGbGFnLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgIGUgPSBjb25jYXRGbGFnQW5kQXJncyA/IHdyYXBwZXJGbGFnLmVuZCgpIC0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3cmFwcGVyRmxhZy5lbmQoKTsKLSAgICAgICAgICAgICAgIGkgIT0gZTsgKytpKSB7Ci0gICAgICAgICAgICBvcHRpb25zLmVtcGxhY2VfYmFjaygqaSwgYnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBvcHRpb25zLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUobyksIGJ0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IG9wdGlvbnMgPSB3cmFwT3B0aW9ucygKKyAgICAgIGxpbmtlck9wdGlvbnMsIGJ0LCB3cmFwcGVyRmxhZywgd3JhcHBlclNlcCwgY29uY2F0RmxhZ0FuZEFyZ3MpOwogICAgIHJlc3VsdC5pbnNlcnQoZW50cnksIG9wdGlvbnMuYmVnaW4oKSwgb3B0aW9ucy5lbmQoKSk7CiAgIH0KICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM3NzQsMTQgKzQyODIsMTQgQEAKICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciBkYWdDaGVja2VyKHRoaXMsICJTVEFUSUNfTElCUkFSWV9PUFRJT05TIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIpOwogCi0gIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJpZXM7Ci0gIGlmIChjb25zdCBjaGFyKiBsaW5rT3B0aW9ucyA9IHRoaXMtPkdldFByb3BlcnR5KCJTVEFUSUNfTElCUkFSWV9PUFRJT05TIikpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0aW9ucyA9IGNtRXhwYW5kZWRMaXN0KGxpbmtPcHRpb25zKTsKKyAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzIGVudHJpZXM7CisgIGlmIChjbVByb3AgbGlua09wdGlvbnMgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiU1RBVElDX0xJQlJBUllfT1BUSU9OUyIpKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdGlvbnMgPSBjbUV4cGFuZGVkTGlzdCgqbGlua09wdGlvbnMpOwogICAgIGZvciAoY29uc3QgYXV0byYgb3B0aW9uIDogb3B0aW9ucykgewotICAgICAgc3RkOjp1bmlxdWVfcHRyPFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJ5KAotICAgICAgICBDcmVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KG9wdGlvbikpOwotICAgICAgZW50cmllcy5lbXBsYWNlX2JhY2soRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KAotICAgICAgICB0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwgZW50cnkuZ2V0KCkpKTsKKyAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyeSA9CisgICAgICAgIENyZWF0ZVRhcmdldFByb3BlcnR5RW50cnkob3B0aW9uKTsKKyAgICAgIGVudHJpZXMuRW50cmllcy5lbXBsYWNlX2JhY2soRXZhbHVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KAorICAgICAgICB0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwgKmVudHJ5KSk7CiAgICAgfQogICB9CiAgIHByb2Nlc3NPcHRpb25zKHRoaXMsIGVudHJpZXMsIHJlc3VsdCwgdW5pcXVlT3B0aW9ucywgZmFsc2UsCkBAIC0zNzkyLDEyICs0MzAwLDEyIEBACiAKIG5hbWVzcGFjZSB7CiB2b2lkIHByb2Nlc3NMaW5rRGlyZWN0b3JpZXMoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRndCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiYgZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMmIGVudHJpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiYgZGlyZWN0b3JpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiYgdW5pcXVlRGlyZWN0b3JpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWJ1Z0RpcmVjdG9yaWVzKQogewotICBmb3IgKEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnkmIGVudHJ5IDogZW50cmllcykgeworICBmb3IgKEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnkmIGVudHJ5IDogZW50cmllcy5FbnRyaWVzKSB7CiAgICAgY21MaW5rSW1wbEl0ZW0gY29uc3QmIGl0ZW0gPSBlbnRyeS5MaW5rSW1wbEl0ZW07CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHRhcmdldE5hbWUgPSBpdGVtLkFzU3RyKCk7CiAKQEAgLTM4ODMsMjUgKzQzOTEsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWJ1Z1Byb3BlcnRpZXM7Ci0gIGNvbnN0IGNoYXIqIGRlYnVnUHJvcCA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1RBUkdFVF9QUk9QRVJUSUVTIik7Ci0gIGlmIChkZWJ1Z1Byb3ApIHsKLSAgICBjbUV4cGFuZExpc3QoZGVidWdQcm9wLCBkZWJ1Z1Byb3BlcnRpZXMpOwotICB9CisgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUHJvcGVydGllcyk7CiAKICAgYm9vbCBkZWJ1Z0RpcmVjdG9yaWVzID0gIXRoaXMtPkRlYnVnTGlua0RpcmVjdG9yaWVzRG9uZSAmJgotICAgIGNtQ29udGFpbnMoZGVidWdQcm9wZXJ0aWVzLCAiTElOS19ESVJFQ1RPUklFUyIpOworICAgIGNtOjpjb250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsICJMSU5LX0RJUkVDVE9SSUVTIik7CiAKICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0Q29uZmlndXJlRG9uZUNNUDAwMjYoKSkgewogICAgIHRoaXMtPkRlYnVnTGlua0RpcmVjdG9yaWVzRG9uZSA9IHRydWU7CiAgIH0KIAotICBzdGQ6OnZlY3RvcjxFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyaWVzID0KLSAgICBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcyh0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5MaW5rRGlyZWN0b3JpZXNFbnRyaWVzKTsKKyAgRXZhbHVhdGVkVGFyZ2V0UHJvcGVydHlFbnRyaWVzIGVudHJpZXMgPSBFdmFsdWF0ZVRhcmdldFByb3BlcnR5RW50cmllcygKKyAgICB0aGlzLCBjb25maWcsIGxhbmd1YWdlLCAmZGFnQ2hlY2tlciwgdGhpcy0+TGlua0RpcmVjdG9yaWVzRW50cmllcyk7CiAKICAgQWRkSW50ZXJmYWNlRW50cmllcyh0aGlzLCBjb25maWcsICJJTlRFUkZBQ0VfTElOS19ESVJFQ1RPUklFUyIsIGxhbmd1YWdlLAotICAgICAgICAgICAgICAgICAgICAgICZkYWdDaGVja2VyLCBlbnRyaWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRQb2xpY3lTdGF0dXNDTVAwMDk5KCkgIT0gY21Qb2xpY2llczo6TkVXKTsKIAogICBwcm9jZXNzTGlua0RpcmVjdG9yaWVzKHRoaXMsIGVudHJpZXMsIHJlc3VsdCwgdW5pcXVlRGlyZWN0b3JpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdEaXJlY3Rvcmllcyk7CkBAIC0zOTI4LDE4ICs0NDMzLDE5IEBACiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIgZGFnQ2hlY2tlcih0aGlzLCAiTElOS19ERVBFTkRTIiwgbnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOwogCi0gIHN0ZDo6dmVjdG9yPEV2YWx1YXRlZFRhcmdldFByb3BlcnR5RW50cnk+IGVudHJpZXM7Ci0gIGlmIChjb25zdCBjaGFyKiBsaW5rRGVwZW5kcyA9IHRoaXMtPkdldFByb3BlcnR5KCJMSU5LX0RFUEVORFMiKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzID0gY21FeHBhbmRlZExpc3QobGlua0RlcGVuZHMpOworICBFdmFsdWF0ZWRUYXJnZXRQcm9wZXJ0eUVudHJpZXMgZW50cmllczsKKyAgaWYgKGNtUHJvcCBsaW5rRGVwZW5kcyA9IHRoaXMtPkdldFByb3BlcnR5KCJMSU5LX0RFUEVORFMiKSkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzID0gY21FeHBhbmRlZExpc3QoKmxpbmtEZXBlbmRzKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGRlcGVuZCA6IGRlcGVuZHMpIHsKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUYXJnZXRQcm9wZXJ0eUVudHJ5PiBlbnRyeSgKLSAgICAgICAgQ3JlYXRlVGFyZ2V0UHJvcGVydHlFbnRyeShkZXBlbmQpKTsKLSAgICAgIGVudHJpZXMuZW1wbGFjZV9iYWNrKEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyeSgKLSAgICAgICAgdGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsIGVudHJ5LmdldCgpKSk7CisgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGFyZ2V0UHJvcGVydHlFbnRyeT4gZW50cnkgPQorICAgICAgICBDcmVhdGVUYXJnZXRQcm9wZXJ0eUVudHJ5KGRlcGVuZCk7CisgICAgICBlbnRyaWVzLkVudHJpZXMuZW1wbGFjZV9iYWNrKEV2YWx1YXRlVGFyZ2V0UHJvcGVydHlFbnRyeSgKKyAgICAgICAgdGhpcywgY29uZmlnLCBsYW5ndWFnZSwgJmRhZ0NoZWNrZXIsICplbnRyeSkpOwogICAgIH0KICAgfQogICBBZGRJbnRlcmZhY2VFbnRyaWVzKHRoaXMsIGNvbmZpZywgIklOVEVSRkFDRV9MSU5LX0RFUEVORFMiLCBsYW5ndWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgZW50cmllcyk7CisgICAgICAgICAgICAgICAgICAgICAgJmRhZ0NoZWNrZXIsIGVudHJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0UG9saWN5U3RhdHVzQ01QMDA5OSgpICE9IGNtUG9saWNpZXM6Ok5FVyk7CiAKICAgcHJvY2Vzc09wdGlvbnModGhpcywgZW50cmllcywgcmVzdWx0LCB1bmlxdWVPcHRpb25zLCBmYWxzZSwgImxpbmsgZGVwZW5kcyIsCiAgICAgICAgICAgICAgICAgIE9wdGlvbnNQYXJzZTo6Tm9uZSk7CkBAIC0zOTk4LDEyICs0NTA0LDc1IEBACiAKIGJvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVDb21waWxlRmVhdHVyZXMoc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZykgY29uc3QKIHsKKyAgLy8gQ29tcHV0ZSB0aGUgbGFuZ3VhZ2Ugc3RhbmRhcmQgYmFzZWQgb24gdGhlIGNvbXBpbGUgZmVhdHVyZXMuCisgIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyIHN0YW5kYXJkUmVzb2x2ZXIodGhpcy0+TWFrZWZpbGUpOwogICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IGZlYXR1cmVzID0gdGhpcy0+R2V0Q29tcGlsZUZlYXR1cmVzKGNvbmZpZyk7CiAgIGZvciAoQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBmIDogZmVhdHVyZXMpIHsKLSAgICBpZiAoIXRoaXMtPk1ha2VmaWxlLT5BZGRSZXF1aXJlZFRhcmdldEZlYXR1cmUodGhpcy0+VGFyZ2V0LCBmLlZhbHVlKSkgeworICAgIHN0ZDo6c3RyaW5nIGxhbmc7CisgICAgaWYgKCFzdGFuZGFyZFJlc29sdmVyLkNvbXBpbGVGZWF0dXJlS25vd24odGhpcy0+VGFyZ2V0LT5HZXROYW1lKCksIGYuVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZywgbnVsbHB0cikpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBrZXkgPSBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSwgJy0nLCBsYW5nKTsKKyAgICBjbVByb3AgY3VycmVudExhbmd1YWdlU3RhbmRhcmQgPSB0aGlzLT5HZXRMYW5ndWFnZVN0YW5kYXJkKGxhbmcsIGNvbmZpZyk7CisKKyAgICBzdGQ6OnN0cmluZyBuZXdSZXF1aXJlZFN0YW5kYXJkOworICAgIGlmICghc3RhbmRhcmRSZXNvbHZlci5HZXROZXdSZXF1aXJlZFN0YW5kYXJkKAorICAgICAgICAgIHRoaXMtPlRhcmdldC0+R2V0TmFtZSgpLCBmLlZhbHVlLCBjdXJyZW50TGFuZ3VhZ2VTdGFuZGFyZCwKKyAgICAgICAgICBuZXdSZXF1aXJlZFN0YW5kYXJkKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbmV3UmVxdWlyZWRTdGFuZGFyZC5lbXB0eSgpKSB7CisgICAgICBCVHM8c3RkOjpzdHJpbmc+JiBsYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkgPQorICAgICAgICB0aGlzLT5MYW5ndWFnZVN0YW5kYXJkTWFwW2tleV07CisgICAgICBpZiAobGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LlZhbHVlICE9IG5ld1JlcXVpcmVkU3RhbmRhcmQpIHsKKyAgICAgICAgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LlZhbHVlID0gbmV3UmVxdWlyZWRTdGFuZGFyZDsKKyAgICAgICAgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LkJhY2t0cmFjZXMuY2xlYXIoKTsKKyAgICAgIH0KKyAgICAgIGxhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0eS5CYWNrdHJhY2VzLmVtcGxhY2VfYmFjayhmLkJhY2t0cmFjZSk7CisgICAgfQogICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVDb21waWxlRmVhdHVyZXMoCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsIHN0ZDo6c2V0PExhbmd1YWdlUGFpcj4gY29uc3QmIGxhbmd1YWdlUGFpcnMpIGNvbnN0Cit7CisgIGZvciAoY29uc3QgYXV0byYgbGFuZ3VhZ2UgOiBsYW5ndWFnZVBhaXJzKSB7CisgICAgQlRzPHN0ZDo6c3RyaW5nPiBjb25zdCogZ2VuZXJhdG9yVGFyZ2V0TGFuZ3VhZ2VTdGFuZGFyZCA9CisgICAgICB0aGlzLT5HZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkobGFuZ3VhZ2UuZmlyc3QsIGNvbmZpZyk7CisgICAgaWYgKCFnZW5lcmF0b3JUYXJnZXRMYW5ndWFnZVN0YW5kYXJkKSB7CisgICAgICAvLyBJZiB0aGUgc3RhbmRhcmQgaXNuJ3QgZXhwbGljaXRseSBzZXQgd2UgY29weSBpdCBvdmVyIGZyb20gdGhlCisgICAgICAvLyBzcGVjaWZpZWQgcGFpcmVkIGxhbmd1YWdlLgorICAgICAgc3RkOjpzdHJpbmcga2V5ID0KKyAgICAgICAgY21TdHJDYXQoY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyksICctJywgbGFuZ3VhZ2UuZmlyc3QpOworICAgICAgQlRzPHN0ZDo6c3RyaW5nPiBjb25zdCogc3RhbmRhcmRUb0NvcHkgPQorICAgICAgICB0aGlzLT5HZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkobGFuZ3VhZ2Uuc2Vjb25kLCBjb25maWcpOworICAgICAgaWYgKHN0YW5kYXJkVG9Db3B5ICE9IG51bGxwdHIpIHsKKyAgICAgICAgdGhpcy0+TGFuZ3VhZ2VTdGFuZGFyZE1hcFtrZXldID0gKnN0YW5kYXJkVG9Db3B5OworICAgICAgICBnZW5lcmF0b3JUYXJnZXRMYW5ndWFnZVN0YW5kYXJkID0gJnRoaXMtPkxhbmd1YWdlU3RhbmRhcmRNYXBba2V5XTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNtUHJvcCBkZWZhdWx0U3RhbmRhcmQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmKAorICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5ndWFnZS5zZWNvbmQsICJfU1RBTkRBUkRfREVGQVVMVCIpKTsKKyAgICAgICAgaWYgKGRlZmF1bHRTdGFuZGFyZCAhPSBudWxscHRyKSB7CisgICAgICAgICAgdGhpcy0+TGFuZ3VhZ2VTdGFuZGFyZE1hcFtrZXldID0gQlRzPHN0ZDo6c3RyaW5nPigqZGVmYXVsdFN0YW5kYXJkKTsKKyAgICAgICAgICBnZW5lcmF0b3JUYXJnZXRMYW5ndWFnZVN0YW5kYXJkID0gJnRoaXMtPkxhbmd1YWdlU3RhbmRhcmRNYXBba2V5XTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBDdXN0b20gdXBkYXRlcyBmb3IgdGhlIENVREEgc3RhbmRhcmQuCisgICAgICBpZiAoZ2VuZXJhdG9yVGFyZ2V0TGFuZ3VhZ2VTdGFuZGFyZCAhPSBudWxscHRyICYmCisgICAgICAgICAgbGFuZ3VhZ2UuZmlyc3QgPT0gIkNVREEiKSB7CisgICAgICAgIGlmIChnZW5lcmF0b3JUYXJnZXRMYW5ndWFnZVN0YW5kYXJkLT5WYWx1ZSA9PSAiOTgiKSB7CisgICAgICAgICAgdGhpcy0+TGFuZ3VhZ2VTdGFuZGFyZE1hcFtrZXldLlZhbHVlID0gIjAzIjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCiAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MDg5LDggKzQ2NTgsOCBAQAogICB9CiAKICAgLy8gQ2hlY2sgZm9yIGxpYnJhcnkgdmVyc2lvbiBwcm9wZXJ0aWVzLgotICBjb25zdCBjaGFyKiB2ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlZFUlNJT04iKTsKLSAgY29uc3QgY2hhciogc292ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlNPVkVSU0lPTiIpOworICBjbVByb3AgdmVyc2lvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJWRVJTSU9OIik7CisgIGNtUHJvcCBzb3ZlcnNpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eSgiU09WRVJTSU9OIik7CiAgIGlmICghdGhpcy0+SGFzU09OYW1lKGNvbmZpZykgfHwKICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9QTEFURk9STV9OT19WRVJTSU9ORURfU09OQU1FIikgfHwKICAgICAgIHRoaXMtPklzRnJhbWV3b3JrT25BcHBsZSgpKSB7CkBAIC00MTI1LDE3ICs0Njk0LDE4IEBACiAgICAgICB0YXJnZXROYW1lcy5SZWFsICs9IHRoaXMtPkdldEZyYW1ld29ya1ZlcnNpb24oKTsKICAgICAgIHRhcmdldE5hbWVzLlJlYWwgKz0gIi8iOwogICAgIH0KLSAgICB0YXJnZXROYW1lcy5SZWFsICs9IHRhcmdldE5hbWVzLkJhc2U7Ci0gICAgdGFyZ2V0TmFtZXMuU2hhcmVkT2JqZWN0ID0gdGFyZ2V0TmFtZXMuUmVhbDsKKyAgICB0YXJnZXROYW1lcy5SZWFsICs9IHRhcmdldE5hbWVzLkJhc2UgKyBzdWZmaXg7CisgICAgdGFyZ2V0TmFtZXMuU2hhcmVkT2JqZWN0ID0gdGFyZ2V0TmFtZXMuUmVhbCArIHN1ZmZpeDsKICAgfSBlbHNlIHsKICAgICAvLyBUaGUgbGlicmFyeSdzIHNvbmFtZS4KICAgICB0aGlzLT5Db21wdXRlVmVyc2lvbmVkTmFtZSh0YXJnZXROYW1lcy5TaGFyZWRPYmplY3QsIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lcy5CYXNlLCBzdWZmaXgsIHRhcmdldE5hbWVzLk91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3ZlcnNpb24gPyBzb3ZlcnNpb24tPmNfc3RyKCkgOiBudWxscHRyKSk7CiAKICAgICAvLyBUaGUgbGlicmFyeSdzIHJlYWwgbmFtZSBvbiBkaXNrLgogICAgIHRoaXMtPkNvbXB1dGVWZXJzaW9uZWROYW1lKHRhcmdldE5hbWVzLlJlYWwsIHByZWZpeCwgdGFyZ2V0TmFtZXMuQmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXgsIHRhcmdldE5hbWVzLk91dHB1dCwgdmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4LCB0YXJnZXROYW1lcy5PdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24gPyB2ZXJzaW9uLT5jX3N0cigpIDogbnVsbHB0cikpOwogICB9CiAKICAgLy8gVGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUuCkBAIC00MTY4LDEwICs0NzM4LDEzIEBACiAvLyBUaGlzIHZlcnNpb25pbmcgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIGV4ZWN1dGFibGVzIGFuZCB0aGVuIG9ubHkKIC8vIHdoZW4gdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHN5bWJvbGljIGxpbmtzLgogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQotICBjb25zdCBjaGFyKiB2ZXJzaW9uID0gMDsKKyAgY29uc3QgY2hhciogdmVyc2lvbiA9IG51bGxwdHI7CiAjZWxzZQogICAvLyBDaGVjayBmb3IgZXhlY3V0YWJsZSB2ZXJzaW9uIHByb3BlcnRpZXMuCi0gIGNvbnN0IGNoYXIqIHZlcnNpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eSgiVkVSU0lPTiIpOworICBjb25zdCBjaGFyKiB2ZXJzaW9uID0gbnVsbHB0cjsKKyAgaWYgKGNtUHJvcCBwID0gdGhpcy0+R2V0UHJvcGVydHkoIlZFUlNJT04iKSkgeworICAgIHZlcnNpb24gPSBwLT5jX3N0cigpOworICB9CiAgIGlmICh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFIHx8CiAgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNPbigiWENPREUiKSkgewogICAgIHZlcnNpb24gPSBudWxscHRyOwpAQCAtNDMwMSwxNSArNDg3NCwyMyBAQAogICBvdXRCYXNlICs9IHRoaXMtPkdldE91dHB1dE5hbWUoY29uZmlnLCBhcnRpZmFjdCk7CiAKICAgLy8gQXBwZW5kIHRoZSBwZXItY29uZmlndXJhdGlvbiBwb3N0Zml4LgotICBvdXRCYXNlICs9IGNvbmZpZ1Bvc3RmaXg7CisgIC8vIFdoZW4gdXNpbmcgWGNvZGUsIHRoZSBwb3N0Zml4IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdWZmaXggcmF0aGVyIHRoYW4KKyAgLy8gdGhlIGJhc2UsIGJlY2F1c2UgdGhlIHN1ZmZpeCBlbmRzIHVwIGJlaW5nIHVzZWQgaW4gWGNvZGUncworICAvLyBFWEVDVVRBQkxFX1NVRkZJWCBhdHRyaWJ1dGUuCisgIGlmICh0aGlzLT5Jc0ZyYW1ld29ya09uQXBwbGUoKSAmJgorICAgICAgR2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE5hbWUoKSA9PSAiWGNvZGUiKSB7CisgICAgdGFyZ2V0U3VmZml4ID0gY29uZmlnUG9zdGZpeC5jX3N0cigpOworICB9IGVsc2UgeworICAgIG91dEJhc2UgKz0gY29uZmlnUG9zdGZpeDsKKyAgfQogCiAgIC8vIE5hbWUgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZWlyIHZlcnNpb24gbnVtYmVyIG9uIHNvbWUgcGxhdGZvcm1zLgotICBpZiAoY29uc3QgY2hhciogc292ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlNPVkVSU0lPTiIpKSB7CisgIGlmIChjbVByb3Agc292ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIlNPVkVSU0lPTiIpKSB7CiAgICAgaWYgKHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZICYmCiAgICAgICAgICFpc0ltcG9ydGVkTGlicmFyeUFydGlmYWN0ICYmCiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9TSEFSRURfTElCUkFSWV9OQU1FX1dJVEhfVkVSU0lPTiIpKSB7CiAgICAgICBvdXRCYXNlICs9ICItIjsKLSAgICAgIG91dEJhc2UgKz0gc292ZXJzaW9uOworICAgICAgb3V0QmFzZSArPSAqc292ZXJzaW9uOwogICAgIH0KICAgfQogCkBAIC00MzQwLDggKzQ5MjEsOCBAQAogICBwcm9wcy5lbXBsYWNlX2JhY2soIlBEQl9OQU1FIik7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcCA6IHByb3BzKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIG91dE5hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShwKSkgewotICAgICAgYmFzZSA9IG91dE5hbWU7CisgICAgaWYgKGNtUHJvcCBvdXROYW1lID0gdGhpcy0+R2V0UHJvcGVydHkocCkpIHsKKyAgICAgIGJhc2UgPSAqb3V0TmFtZTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgfQpAQCAtNDM2Nyw4ICs0OTQ4LDggQEAKICAgcHJvcHMuZW1wbGFjZV9iYWNrKCJQREJfTkFNRSIpOwogCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHAgOiBwcm9wcykgewotICAgIGlmIChjb25zdCBjaGFyKiBvdXROYW1lID0gdGhpcy0+R2V0UHJvcGVydHkocCkpIHsKLSAgICAgIGJhc2UgPSBvdXROYW1lOworICAgIGlmIChjbVByb3Agb3V0TmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KHApKSB7CisgICAgICBiYXNlID0gKm91dE5hbWU7CiAgICAgICBicmVhazsKICAgICB9CiAgIH0KQEAgLTQ0NDAsMTYgKzUwMjEsMTYgQEAKICAgfSBlbHNlIHsKICAgICAvLyBIYW5kbGUgdGhlIE1BQ09TWF9QQUNLQUdFX0xPQ0FUSU9OIHByb3BlcnR5IG9uIHNvdXJjZSBmaWxlcyB0aGF0CiAgICAgLy8gd2VyZSBub3QgbGlzdGVkIGluIG9uZSBvZiB0aGUgb3RoZXIgbGlzdHMuCi0gICAgaWYgKGNvbnN0IGNoYXIqIGxvY2F0aW9uID0gc2YtPkdldFByb3BlcnR5KCJNQUNPU1hfUEFDS0FHRV9MT0NBVElPTiIpKSB7Ci0gICAgICBmbGFncy5NYWNGb2xkZXIgPSBsb2NhdGlvbjsKKyAgICBpZiAoY21Qcm9wIGxvY2F0aW9uID0gc2YtPkdldFByb3BlcnR5KCJNQUNPU1hfUEFDS0FHRV9MT0NBVElPTiIpKSB7CisgICAgICBmbGFncy5NYWNGb2xkZXIgPSBsb2NhdGlvbi0+Y19zdHIoKTsKICAgICAgIGNvbnN0IGJvb2wgc3RyaXBSZXNvdXJjZXMgPQogICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlNob3VsZFN0cmlwUmVzb3VyY2VQYXRoKHRoaXMtPk1ha2VmaWxlKTsKLSAgICAgIGlmIChzdHJjbXAobG9jYXRpb24sICJSZXNvdXJjZXMiKSA9PSAwKSB7CisgICAgICBpZiAoKmxvY2F0aW9uID09ICJSZXNvdXJjZXMiKSB7CiAgICAgICAgIGZsYWdzLlR5cGUgPSBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlRmlsZVR5cGVSZXNvdXJjZTsKICAgICAgICAgaWYgKHN0cmlwUmVzb3VyY2VzKSB7CiAgICAgICAgICAgZmxhZ3MuTWFjRm9sZGVyID0gIiI7CiAgICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGxvY2F0aW9uLCAiUmVzb3VyY2VzLyIpKSB7CisgICAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeCgqbG9jYXRpb24sICJSZXNvdXJjZXMvIikpIHsKICAgICAgICAgZmxhZ3MuVHlwZSA9IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VGaWxlVHlwZURlZXBSZXNvdXJjZTsKICAgICAgICAgaWYgKHN0cmlwUmVzb3VyY2VzKSB7CiAgICAgICAgICAgZmxhZ3MuTWFjRm9sZGVyICs9IHN0cmxlbigiUmVzb3VyY2VzLyIpOwpAQCAtNDQ3MCw4ICs1MDUxLDggQEAKICAgdGhpcy0+U291cmNlRmlsZUZsYWdzQ29uc3RydWN0ZWQgPSB0cnVlOwogCiAgIC8vIFByb2Nlc3MgcHVibGljIGhlYWRlcnMgdG8gbWFyayB0aGUgc291cmNlIGZpbGVzLgotICBpZiAoY29uc3QgY2hhciogZmlsZXMgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiUFVCTElDX0hFQURFUiIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlbEZpbGVzID0gY21FeHBhbmRlZExpc3QoZmlsZXMpOworICBpZiAoY21Qcm9wIGZpbGVzID0gdGhpcy0+R2V0UHJvcGVydHkoIlBVQkxJQ19IRUFERVIiKSkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWxGaWxlcyA9IGNtRXhwYW5kZWRMaXN0KCpmaWxlcyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcmVsRmlsZSA6IHJlbEZpbGVzKSB7CiAgICAgICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTb3VyY2UocmVsRmlsZSkpIHsKICAgICAgICAgU291cmNlRmlsZUZsYWdzJiBmbGFncyA9IHRoaXMtPlNvdXJjZUZsYWdzTWFwW3NmXTsKQEAgLTQ0ODMsOCArNTA2NCw4IEBACiAKICAgLy8gUHJvY2VzcyBwcml2YXRlIGhlYWRlcnMgYWZ0ZXIgcHVibGljIGhlYWRlcnMgc28gdGhhdCB0aGV5IHRha2UKICAgLy8gcHJlY2VkZW5jZSBpZiBhIGZpbGUgaXMgbGlzdGVkIGluIGJvdGguCi0gIGlmIChjb25zdCBjaGFyKiBmaWxlcyA9IHRoaXMtPkdldFByb3BlcnR5KCJQUklWQVRFX0hFQURFUiIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlbEZpbGVzID0gY21FeHBhbmRlZExpc3QoZmlsZXMpOworICBpZiAoY21Qcm9wIGZpbGVzID0gdGhpcy0+R2V0UHJvcGVydHkoIlBSSVZBVEVfSEVBREVSIikpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHJlbEZpbGUgOiByZWxGaWxlcykgewogICAgICAgaWYgKGNtU291cmNlRmlsZSogc2YgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U291cmNlKHJlbEZpbGUpKSB7CiAgICAgICAgIFNvdXJjZUZpbGVGbGFncyYgZmxhZ3MgPSB0aGlzLT5Tb3VyY2VGbGFnc01hcFtzZl07CkBAIC00NDk1LDggKzUwNzYsOCBAQAogICB9CiAKICAgLy8gTWFyayBzb3VyY2VzIGxpc3RlZCBhcyByZXNvdXJjZXMuCi0gIGlmIChjb25zdCBjaGFyKiBmaWxlcyA9IHRoaXMtPkdldFByb3BlcnR5KCJSRVNPVVJDRSIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlbEZpbGVzID0gY21FeHBhbmRlZExpc3QoZmlsZXMpOworICBpZiAoY21Qcm9wIGZpbGVzID0gdGhpcy0+R2V0UHJvcGVydHkoIlJFU09VUkNFIikpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHJlbEZpbGUgOiByZWxGaWxlcykgewogICAgICAgaWYgKGNtU291cmNlRmlsZSogc2YgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U291cmNlKHJlbEZpbGUpKSB7CiAgICAgICAgIFNvdXJjZUZpbGVGbGFncyYgZmxhZ3MgPSB0aGlzLT5Tb3VyY2VGbGFnc01hcFtzZl07CkBAIC00NTIzLDkgKzUxMDQsOSBAQAogICAgICAgdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uQ2xvc3VyZShjb25maWcpOwogICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGxpIDogZGVwcykgewogI2RlZmluZSBDTV9SRUFEX0NPTVBBVElCTEVfSU5URVJGQUNFKFgsIHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoY29uc3QgY2hhciogcHJvcCA9IGxpLT5HZXRQcm9wZXJ0eSgiQ09NUEFUSUJMRV9JTlRFUkZBQ0VfIiAjWCkpIHsgICAgICAgXAorICBpZiAoY21Qcm9wIHByb3AgPSBsaS0+R2V0UHJvcGVydHkoIkNPTVBBVElCTEVfSU5URVJGQUNFXyIgI1gpKSB7ICAgICAgICAgICAgXAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNtRXhwYW5kTGlzdChwcm9wLCBwcm9wcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNtRXhwYW5kTGlzdCgqcHJvcCwgcHJvcHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNvbXBhdC5Qcm9wcyMjeC5pbnNlcnQocHJvcHMuYmVnaW4oKSwgcHJvcHMuZW5kKCkpOyAgICAgICAgICAgICAgICAgICAgICAgXAogICB9CiAgICAgICBDTV9SRUFEX0NPTVBBVElCTEVfSU5URVJGQUNFKEJPT0wsIEJvb2wpCkBAIC00NjMzLDEyICs1MjE0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBDb21wYXRpYmxlVHlwZSB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlUeXBlKiAvKnVudXNlZCovKQogewotICBjb25zdCBjaGFyKiBwcm9wID0gZGVwZW5kZWUtPkdldFByb3BlcnR5KHByb3BOYW1lKTsKKyAgY21Qcm9wIHByb3AgPSBkZXBlbmRlZS0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwogICBpZiAoIXByb3ApIHsKICAgICByZXR1cm47CiAgIH0KIAotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QoKnByb3ApOwogICBzdGQ6OnN0cmluZyBwZGlyID0KICAgICBjbVN0ckNhdChjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZVJvb3QoKSwgIi9IZWxwL3Byb3BfdGd0LyIpOwogCkBAIC00NzE5LDkgKzUzMDAsOSBAQAogfQogCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpDaGVja1Byb3BlcnR5Q29tcGF0aWJpbGl0eSgKLSAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBpbmZvLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAorICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIGNvbnN0IGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6SXRlbVZlY3RvciYgZGVwcyA9IGluZm8tPkdldEl0ZW1zKCk7CisgIGNvbnN0IGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6SXRlbVZlY3RvciYgZGVwcyA9IGluZm8uR2V0SXRlbXMoKTsKIAogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZW1pdHRlZEJvb2xzOwogICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc3RyQm9vbCA9ICJDT01QQVRJQkxFX0lOVEVSRkFDRV9CT09MIjsKQEAgLTQ3OTIsNyArNTM3Myw4IEBACiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgZSA8PCAiUHJvcGVydHkgXCIiIDw8IHByb3AgPDwgIlwiIGFwcGVhcnMgaW4gYm90aCB0aGUgIiA8PCBwcm9wc1N0cmluZwogICAgICAgPDwgIiBwcm9wZXJ0eSBpbiB0aGUgZGVwZW5kZW5jaWVzIG9mIHRhcmdldCBcIiIgPDwgdGhpcy0+R2V0TmFtZSgpCi0gICAgICA8PCAiXCIuICBUaGlzIGlzIG5vdCBhbGxvd2VkLiBBIHByb3BlcnR5IG1heSBvbmx5IHJlcXVpcmUgY29tcGF0aWJpbGl0eSAiCisgICAgICA8PCAiXCIuICBUaGlzIGlzIG5vdCBhbGxvd2VkLiBBIHByb3BlcnR5IG1heSBvbmx5IHJlcXVpcmUgIgorICAgICAgICAgImNvbXBhdGliaWxpdHkgIgogICAgICAgICAgImluIGEgYm9vbGVhbiBpbnRlcnByZXRhdGlvbiwgYSBudW1lcmljIG1pbmltdW0sIGEgbnVtZXJpYyBtYXhpbXVtICIKICAgICAgICAgICJvciBhICIKICAgICAgICAgICJzdHJpbmcgaW50ZXJwcmV0YXRpb24sIGJ1dCBub3QgYSBtaXh0dXJlLiI7CkBAIC00ODY3LDggKzU0NDksOCBAQAogICAgIHJldHVybiB0Z3QtPkdldFByb3BlcnR5QXNCb29sKHByb3ApOwogICB9CiAKLSAgY29uc3QgY2hhciogdmFsdWUgPSB0Z3QtPkdldFByb3BlcnR5KHByb3ApOwotICByZXR1cm4gY21Jc09uKGdlbmV4SW50ZXJwcmV0ZXItPkV2YWx1YXRlKHZhbHVlLCBwcm9wKSk7CisgIGNtUHJvcCB2YWx1ZSA9IHRndC0+R2V0UHJvcGVydHkocHJvcCk7CisgIHJldHVybiBjbUlzT24oZ2VuZXhJbnRlcnByZXRlci0+RXZhbHVhdGUodmFsdWUgPyAqdmFsdWUgOiAiIiwgcHJvcCkpOwogfQogCiB0ZW1wbGF0ZSA8PgpAQCAtNDg3NiwxMyArNTQ1OCwxMyBAQAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGd0LCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKICAgY21HZW5lcmF0b3JFeHByZXNzaW9uSW50ZXJwcmV0ZXIqIGdlbmV4SW50ZXJwcmV0ZXIpCiB7Ci0gIGNvbnN0IGNoYXIqIHZhbHVlID0gdGd0LT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgY21Qcm9wIHZhbHVlID0gdGd0LT5HZXRQcm9wZXJ0eShwcm9wKTsKIAogICBpZiAoZ2VuZXhJbnRlcnByZXRlciA9PSBudWxscHRyKSB7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5jX3N0cigpIDogbnVsbHB0cjsKICAgfQogCi0gIHJldHVybiBnZW5leEludGVycHJldGVyLT5FdmFsdWF0ZSh2YWx1ZSwgcHJvcCkuY19zdHIoKTsKKyAgcmV0dXJuIGdlbmV4SW50ZXJwcmV0ZXItPkV2YWx1YXRlKHZhbHVlID8gKnZhbHVlIDogIiIsIHByb3ApLmNfc3RyKCk7CiB9CiAKIHRlbXBsYXRlIDw+CkBAIC00ODkwLDEzICs1NDcyLDEzIEBACiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0Z3QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAogICBjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlciogZ2VuZXhJbnRlcnByZXRlcikKIHsKLSAgY29uc3QgY2hhciogdmFsdWUgPSB0Z3QtPkdldFByb3BlcnR5KHByb3ApOworICBjbVByb3AgdmFsdWUgPSB0Z3QtPkdldFByb3BlcnR5KHByb3ApOwogCiAgIGlmIChnZW5leEludGVycHJldGVyID09IG51bGxwdHIpIHsKLSAgICByZXR1cm4gdmFsdWVBc1N0cmluZyh2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlQXNTdHJpbmcodmFsdWUgPyB2YWx1ZS0+Y19zdHIoKSA6IG51bGxwdHIpOwogICB9CiAKLSAgcmV0dXJuIGdlbmV4SW50ZXJwcmV0ZXItPkV2YWx1YXRlKHZhbHVlLCBwcm9wKTsKKyAgcmV0dXJuIGdlbmV4SW50ZXJwcmV0ZXItPkV2YWx1YXRlKHZhbHVlID8gKnZhbHVlIDogIiIsIHByb3ApOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgUHJvcGVydHlUeXBlPgpAQCAtNTA0MSw3ICs1NjIzLDcgQEAKICAgUHJvcGVydHlUeXBlIHByb3BDb250ZW50ID0gZ2V0VHlwZWRQcm9wZXJ0eTxQcm9wZXJ0eVR5cGU+KHRndCwgcCk7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGhlYWRQcm9wS2V5cyA9IHRndC0+R2V0UHJvcGVydHlLZXlzKCk7Ci0gIGNvbnN0IGJvb2wgZXhwbGljaXRseVNldCA9IGNtQ29udGFpbnMoaGVhZFByb3BLZXlzLCBwKTsKKyAgY29uc3QgYm9vbCBleHBsaWNpdGx5U2V0ID0gY206OmNvbnRhaW5zKGhlYWRQcm9wS2V5cywgcCk7CiAKICAgY29uc3QgYm9vbCBpbXBsaWVkQnlVc2UgPSB0Z3QtPklzTnVsbEltcGxpZWRCeUxpbmtMaWJyYXJpZXMocCk7CiAgIGFzc2VydCgoaW1wbGllZEJ5VXNlIF4gZXhwbGljaXRseVNldCkgfHwgKCFpbXBsaWVkQnlVc2UgJiYgIWV4cGxpY2l0bHlTZXQpKTsKQEAgLTUwNjYsMTAgKzU2NDgsMTEgQEAKICAgfQogCiAgIHN0ZDo6c3RyaW5nIGludGVyZmFjZVByb3BlcnR5ID0gIklOVEVSRkFDRV8iICsgcDsKLSAgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyPiBnZW5leEludGVycHJldGVyKAotICAgIHAgPT0gIlBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUiID8gbmV3IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Z3QtPkdldExvY2FsR2VuZXJhdG9yKCksIGNvbmZpZywgdGd0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbHB0cik7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlcj4gZ2VuZXhJbnRlcnByZXRlcjsKKyAgaWYgKHAgPT0gIlBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUiKSB7CisgICAgZ2VuZXhJbnRlcnByZXRlciA9IGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlcj4oCisgICAgICB0Z3QtPkdldExvY2FsR2VuZXJhdG9yKCksIGNvbmZpZywgdGd0KTsKKyAgfQogCiAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRoZVRhcmdldCA6IGRlcHMpIHsKICAgICAvLyBBbiBlcnJvciBzaG91bGQgYmUgcmVwb3J0ZWQgaWYgb25lIGRlcGVuZGVuY3kKQEAgLTUwODAsNyArNTY2Myw3IEBACiAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcEtleXMgPSB0aGVUYXJnZXQtPkdldFByb3BlcnR5S2V5cygpOwogCi0gICAgY29uc3QgYm9vbCBpZmFjZUlzU2V0ID0gY21Db250YWlucyhwcm9wS2V5cywgaW50ZXJmYWNlUHJvcGVydHkpOworICAgIGNvbnN0IGJvb2wgaWZhY2VJc1NldCA9IGNtOjpjb250YWlucyhwcm9wS2V5cywgaW50ZXJmYWNlUHJvcGVydHkpOwogICAgIFByb3BlcnR5VHlwZSBpZmFjZVByb3BDb250ZW50ID0gZ2V0VHlwZWRQcm9wZXJ0eTxQcm9wZXJ0eVR5cGU+KAogICAgICAgdGhlVGFyZ2V0LCBpbnRlcmZhY2VQcm9wZXJ0eSwgZ2VuZXhJbnRlcnByZXRlci5nZXQoKSk7CiAKQEAgLTUxNzMsNiArNTc1NiwxMyBAQAogICByZXR1cm4gcHJvcENvbnRlbnQ7CiB9CiAKK2Jvb2wgY21HZW5lcmF0b3JUYXJnZXQ6OlNldERldmljZUxpbmsoYm9vbCBkZXZpY2VMaW5rKQoreworICBib29sIHByZXZpb3VzID0gdGhpcy0+RGV2aWNlTGluazsKKyAgdGhpcy0+RGV2aWNlTGluayA9IGRldmljZUxpbms7CisgIHJldHVybiBwcmV2aW91czsKK30KKwogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6R2V0TGlua0ludGVyZmFjZURlcGVuZGVudEJvb2xQcm9wZXJ0eSgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIHAsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CkBAIC01MjE2LDMyICs1ODA2LDQxIEBACiAgIGF1dG8gaSA9IHRoaXMtPkxpbmtJbmZvcm1hdGlvbi5maW5kKGtleSk7CiAgIGlmIChpID09IHRoaXMtPkxpbmtJbmZvcm1hdGlvbi5lbmQoKSkgewogICAgIC8vIENvbXB1dGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KLSAgICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIGluZm8gPQotICAgICAgbmV3IGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbih0aGlzLCBjb25maWcpOwotICAgIGlmICghaW5mbyB8fCAhaW5mby0+Q29tcHV0ZSgpKSB7Ci0gICAgICBkZWxldGUgaW5mbzsKLSAgICAgIGluZm8gPSBudWxscHRyOworICAgIGF1dG8gaW5mbyA9IGNtOjptYWtlX3VuaXF1ZTxjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24+KHRoaXMsIGNvbmZpZyk7CisgICAgaWYgKGluZm8gJiYgIWluZm8tPkNvbXB1dGUoKSkgeworICAgICAgaW5mby5yZXNldCgpOwogICAgIH0KIAogICAgIC8vIFN0b3JlIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25maWd1cmF0aW9uLgotICAgIGNtVGFyZ2V0TGlua0luZm9ybWF0aW9uTWFwOjp2YWx1ZV90eXBlIGVudHJ5KGtleSwgaW5mbyk7Ci0gICAgaSA9IHRoaXMtPkxpbmtJbmZvcm1hdGlvbi5pbnNlcnQoZW50cnkpLmZpcnN0OworICAgIGkgPSB0aGlzLT5MaW5rSW5mb3JtYXRpb24uZW1wbGFjZShrZXksIHN0ZDo6bW92ZShpbmZvKSkuZmlyc3Q7CiAKLSAgICBpZiAoaW5mbykgewotICAgICAgdGhpcy0+Q2hlY2tQcm9wZXJ0eUNvbXBhdGliaWxpdHkoaW5mbywgY29uZmlnKTsKKyAgICBpZiAoaS0+c2Vjb25kKSB7CisgICAgICB0aGlzLT5DaGVja1Byb3BlcnR5Q29tcGF0aWJpbGl0eSgqaS0+c2Vjb25kLCBjb25maWcpOwogICAgIH0KICAgfQotICByZXR1cm4gaS0+c2Vjb25kOworICByZXR1cm4gaS0+c2Vjb25kLmdldCgpOwogfQogCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRUYXJnZXRWZXJzaW9uKGludCYgbWFqb3IsIGludCYgbWlub3IpIGNvbnN0CiB7CiAgIGludCBwYXRjaDsKLSAgdGhpcy0+R2V0VGFyZ2V0VmVyc2lvbihmYWxzZSwgbWFqb3IsIG1pbm9yLCBwYXRjaCk7CisgIHRoaXMtPkdldFRhcmdldFZlcnNpb24oIlZFUlNJT04iLCBtYWpvciwgbWlub3IsIHBhdGNoKTsKIH0KIAotdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6R2V0VGFyZ2V0VmVyc2lvbihib29sIHNvdmVyc2lvbiwgaW50JiBtYWpvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtaW5vciwgaW50JiBwYXRjaCkgY29uc3QKK3ZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFRhcmdldFZlcnNpb25GYWxsYmFjaygKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LCBjb25zdCBzdGQ6OnN0cmluZyYgZmFsbGJhY2tfcHJvcGVydHksCisgIGludCYgbWFqb3IsIGludCYgbWlub3IsIGludCYgcGF0Y2gpIGNvbnN0Cit7CisgIGlmICh0aGlzLT5HZXRQcm9wZXJ0eShwcm9wZXJ0eSkpIHsKKyAgICB0aGlzLT5HZXRUYXJnZXRWZXJzaW9uKHByb3BlcnR5LCBtYWpvciwgbWlub3IsIHBhdGNoKTsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLT5HZXRUYXJnZXRWZXJzaW9uKGZhbGxiYWNrX3Byb3BlcnR5LCBtYWpvciwgbWlub3IsIHBhdGNoKTsKKyAgfQorfQorCit2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRUYXJnZXRWZXJzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYWpvciwgaW50JiBtaW5vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBwYXRjaCkgY29uc3QKIHsKICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcy4KICAgbWFqb3IgPSAwOwpAQCAtNTI1MCwxNSArNTg0OSwxMyBAQAogCiAgIGFzc2VydCh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSk7CiAKLSAgLy8gTG9vayBmb3IgYSBWRVJTSU9OIG9yIFNPVkVSU0lPTiBwcm9wZXJ0eS4KLSAgY29uc3QgY2hhciogcHJvcCA9IHNvdmVyc2lvbiA/ICJTT1ZFUlNJT04iIDogIlZFUlNJT04iOwotICBpZiAoY29uc3QgY2hhciogdmVyc2lvbiA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7CisgIGlmIChjbVByb3AgdmVyc2lvbiA9IHRoaXMtPkdldFByb3BlcnR5KHByb3BlcnR5KSkgewogICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kIHN0b3JlIHRoZSByZXN1bHRzIHRoYXQgd2VyZQogICAgIC8vIHN1Y2Nlc3NmdWxseSBwYXJzZWQuCiAgICAgaW50IHBhcnNlZF9tYWpvcjsKICAgICBpbnQgcGFyc2VkX21pbm9yOwogICAgIGludCBwYXJzZWRfcGF0Y2g7Ci0gICAgc3dpdGNoIChzc2NhbmYodmVyc2lvbiwgIiVkLiVkLiVkIiwgJnBhcnNlZF9tYWpvciwgJnBhcnNlZF9taW5vciwKKyAgICBzd2l0Y2ggKHNzY2FuZih2ZXJzaW9uLT5jX3N0cigpLCAiJWQuJWQuJWQiLCAmcGFyc2VkX21ham9yLCAmcGFyc2VkX21pbm9yLAogICAgICAgICAgICAgICAgICAgICZwYXJzZWRfcGF0Y2gpKSB7CiAgICAgICBjYXNlIDM6CiAgICAgICAgIHBhdGNoID0gcGFyc2VkX3BhdGNoOwpAQCAtNTI3NSw2ICs1ODcyLDI1IEBACiAgIH0KIH0KIAorc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldFJ1bnRpbWVMaW5rTGlicmFyeSgKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0Cit7CisgIC8vIFRoaXMgaXMgYWN0aXZhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBhIGRlZmF1bHQgc2VsZWN0aW9uIHdoZXRoZXIgb3IKKyAgLy8gbm90IGl0IGlzIG92ZXJyaWRkZW4gYnkgYSBwcm9wZXJ0eS4KKyAgY21Qcm9wIHJ1bnRpbWVMaWJyYXJ5RGVmYXVsdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWYoCisgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfUlVOVElNRV9MSUJSQVJZX0RFRkFVTFQiKSk7CisgIGlmICghY21Ob25lbXB0eShydW50aW1lTGlicmFyeURlZmF1bHQpKSB7CisgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgIH0KKyAgY21Qcm9wIHJ1bnRpbWVMaWJyYXJ5VmFsdWUgPQorICAgIHRoaXMtPlRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZywgIl9SVU5USU1FX0xJQlJBUlkiKSk7CisgIGlmICghcnVudGltZUxpYnJhcnlWYWx1ZSkgeworICAgIHJ1bnRpbWVMaWJyYXJ5VmFsdWUgPSBydW50aW1lTGlicmFyeURlZmF1bHQ7CisgIH0KKyAgcmV0dXJuIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAorICAgICpydW50aW1lTGlicmFyeVZhbHVlLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnLCB0aGlzKSk7Cit9CisKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRGb3J0cmFuTW9kdWxlRGlyZWN0b3J5KAogICBzdGQ6OnN0cmluZyBjb25zdCYgd29ya2luZ19kaXIpIGNvbnN0CiB7CkBAIC01MjkyLDggKzU5MDgsOCBAQAogewogICBzdGQ6OnN0cmluZyBtb2RfZGlyOwogICBzdGQ6OnN0cmluZyB0YXJnZXRfbW9kX2RpcjsKLSAgaWYgKGNvbnN0IGNoYXIqIHByb3AgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiRm9ydHJhbl9NT0RVTEVfRElSRUNUT1JZIikpIHsKLSAgICB0YXJnZXRfbW9kX2RpciA9IHByb3A7CisgIGlmIChjbVByb3AgcHJvcCA9IHRoaXMtPkdldFByb3BlcnR5KCJGb3J0cmFuX01PRFVMRV9ESVJFQ1RPUlkiKSkgeworICAgIHRhcmdldF9tb2RfZGlyID0gKnByb3A7CiAgIH0gZWxzZSB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRlZmF1bHRfbW9kX2RpciA9CiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwpAQCAtNTMyNCwxMSArNTk0MCwxMSBAQAogewogICBhc3NlcnQodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpOwogCi0gIGlmIChjb25zdCBjaGFyKiBmdmVyc2lvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJGUkFNRVdPUktfVkVSU0lPTiIpKSB7Ci0gICAgcmV0dXJuIGZ2ZXJzaW9uOworICBpZiAoY21Qcm9wIGZ2ZXJzaW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIkZSQU1FV09SS19WRVJTSU9OIikpIHsKKyAgICByZXR1cm4gKmZ2ZXJzaW9uOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiB0dmVyc2lvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJWRVJTSU9OIikpIHsKLSAgICByZXR1cm4gdHZlcnNpb247CisgIGlmIChjbVByb3AgdHZlcnNpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eSgiVkVSU0lPTiIpKSB7CisgICAgcmV0dXJuICp0dmVyc2lvbjsKICAgfQogICByZXR1cm4gIkEiOwogfQpAQCAtNTM1OCwxNCArNTk3NCwxMSBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcGF0aWJpbGl0eVR5cGUpIGNvbnN0CiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWJ1Z1Byb3BlcnRpZXM7Ci0gIGNvbnN0IGNoYXIqIGRlYnVnUHJvcCA9IHRoaXMtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbigKLSAgICAiQ01BS0VfREVCVUdfVEFSR0VUX1BST1BFUlRJRVMiKTsKLSAgaWYgKGRlYnVnUHJvcCkgewotICAgIGNtRXhwYW5kTGlzdChkZWJ1Z1Byb3AsIGRlYnVnUHJvcGVydGllcyk7Ci0gIH0KKyAgdGhpcy0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXREZWZFeHBhbmRMaXN0KAorICAgICJDTUFLRV9ERUJVR19UQVJHRVRfUFJPUEVSVElFUyIsIGRlYnVnUHJvcGVydGllcyk7CiAKLSAgYm9vbCBkZWJ1Z09yaWdpbiA9Ci0gICAgIXRoaXMtPkRlYnVnQ29tcGF0aWJsZVByb3BlcnRpZXNEb25lW3BdICYmIGNtQ29udGFpbnMoZGVidWdQcm9wZXJ0aWVzLCBwKTsKKyAgYm9vbCBkZWJ1Z09yaWdpbiA9ICF0aGlzLT5EZWJ1Z0NvbXBhdGlibGVQcm9wZXJ0aWVzRG9uZVtwXSAmJgorICAgIGNtOjpjb250YWlucyhkZWJ1Z1Byb3BlcnRpZXMsIHApOwogCiAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENvbmZpZ3VyZURvbmVDTVAwMDI2KCkpIHsKICAgICB0aGlzLT5EZWJ1Z0NvbXBhdGlibGVQcm9wZXJ0aWVzRG9uZVtwXSA9IHRydWU7CkBAIC01MzgyLDQ2ICs1OTk1LDgzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVwb3J0KTsKIH0KIAorYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNMaW5rTG9va3VwU2NvcGUoc3RkOjpzdHJpbmcgY29uc3QmIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiYgbGcpIGNvbnN0Cit7CisgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobiwgQ01BS0VfRElSRUNUT1JZX0lEX1NFUCkpIHsKKyAgICBjbURpcmVjdG9yeUlkIGNvbnN0IGRpcklkID0gbi5zdWJzdHIoc2l6ZW9mKENNQUtFX0RJUkVDVE9SWV9JRF9TRVApIC0gMSk7CisgICAgaWYgKGRpcklkLlN0cmluZy5lbXB0eSgpKSB7CisgICAgICBsZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiBvdGhlckxHID0KKyAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkZpbmRMb2NhbEdlbmVyYXRvcihkaXJJZCkpIHsKKyAgICAgIGxnID0gb3RoZXJMRzsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6Okxvb2t1cExpbmtJdGVtcyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIG5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtTGlua0l0ZW0+JiBpdGVtcykgY29uc3QKIHsKKyAgY21Mb2NhbEdlbmVyYXRvciBjb25zdCogbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcjsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbiA6IG5hbWVzKSB7CisgICAgaWYgKHRoaXMtPklzTGlua0xvb2t1cFNjb3BlKG4sIGxnKSkgeworICAgICAgY29udGludWU7CisgICAgfQorCiAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IHRoaXMtPkNoZWNrQ01QMDAwNChuKTsKICAgICBpZiAobmFtZSA9PSB0aGlzLT5HZXROYW1lKCkgfHwgbmFtZS5lbXB0eSgpKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgaXRlbXMucHVzaF9iYWNrKHRoaXMtPlJlc29sdmVMaW5rSXRlbShuYW1lLCBidCkpOworICAgIGl0ZW1zLnB1c2hfYmFjayh0aGlzLT5SZXNvbHZlTGlua0l0ZW0obmFtZSwgYnQsIGxnKSk7CiAgIH0KIH0KIAogdm9pZCBjbUdlbmVyYXRvclRhcmdldDo6RXhwYW5kTGlua0l0ZW1zKAogICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlLCBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZFRhcmdldCwgYm9vbCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSwKLSAgc3RkOjp2ZWN0b3I8Y21MaW5rSXRlbT4mIGl0ZW1zLCBib29sJiBoYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKSBjb25zdAorICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiYgaXRlbXMsIGJvb2wmIGhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24sCisgIGJvb2wmIGhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24sCisgIGJvb2wmIGhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbikgY29uc3QKIHsKKyAgLy8gS2VlcCB0aGlzIGxvZ2ljIGluIHN5bmMgd2l0aCBDb21wdXRlTGlua0ltcGxlbWVudGF0aW9uTGlicmFyaWVzLgogICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2U7CiAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkRBR0NoZWNrZXIgZGFnQ2hlY2tlcih0aGlzLCBwcm9wLCBudWxscHRyLCBudWxscHRyKTsKLSAgLy8gVGhlICQ8TElOS19PTkxZPiBleHByZXNzaW9uIG1heSBiZSBpbiBhIGxpbmsgaW50ZXJmYWNlIHRvIHNwZWNpZnkgcHJpdmF0ZQotICAvLyBsaW5rIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBvdGhlcndpc2UgZXhjbHVkZWQgZnJvbSB1c2FnZSByZXF1aXJlbWVudHMuCisgIC8vIFRoZSAkPExJTktfT05MWT4gZXhwcmVzc2lvbiBtYXkgYmUgaW4gYSBsaW5rIGludGVyZmFjZSB0byBzcGVjaWZ5CisgIC8vIHByaXZhdGUgbGluayBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgb3RoZXJ3aXNlIGV4Y2x1ZGVkIGZyb20gdXNhZ2UKKyAgLy8gcmVxdWlyZW1lbnRzLgogICBpZiAodXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpIHsKICAgICBkYWdDaGVja2VyLlNldFRyYW5zaXRpdmVQcm9wZXJ0aWVzT25seSgpOwogICB9CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaWJzOwogICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9IGdlLlBhcnNlKHZhbHVlKTsKLSAgY21FeHBhbmRMaXN0KAotICAgIGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZywgaGVhZFRhcmdldCwgJmRhZ0NoZWNrZXIsIHRoaXMpLAotICAgIGxpYnMpOworICBjbUV4cGFuZExpc3QoY2dlLT5FdmFsdWF0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnLCBoZWFkVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGFnQ2hlY2tlciwgdGhpcywgaGVhZFRhcmdldC0+TGlua2VyTGFuZ3VhZ2UpLAorICAgICAgICAgICAgICAgbGlicyk7CiAgIHRoaXMtPkxvb2t1cExpbmtJdGVtcyhsaWJzLCBjZ2UtPkdldEJhY2t0cmFjZSgpLCBpdGVtcyk7CiAgIGhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSBjZ2UtPkdldEhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24oKTsKKyAgaGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IGNnZS0+R2V0SGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbigpOworICBoYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb24gPQorICAgIGNnZS0+R2V0SGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKCk7CiB9CiAKIGNtTGlua0ludGVyZmFjZSBjb25zdCogY21HZW5lcmF0b3JUYXJnZXQ6OkdldExpbmtJbnRlcmZhY2UoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkKSBjb25zdAogeworICByZXR1cm4gdGhpcy0+R2V0TGlua0ludGVyZmFjZShjb25maWcsIGhlYWQsIGZhbHNlKTsKK30KKworY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBjbUdlbmVyYXRvclRhcmdldDo6R2V0TGlua0ludGVyZmFjZSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWQsCisgIGJvb2wgc2Vjb25kUGFzcykgY29uc3QKK3sKICAgLy8gSW1wb3J0ZWQgdGFyZ2V0cyBoYXZlIHRoZWlyIG93biBsaW5rIGludGVyZmFjZS4KICAgaWYgKHRoaXMtPklzSW1wb3J0ZWQoKSkgewotICAgIHJldHVybiB0aGlzLT5HZXRJbXBvcnRMaW5rSW50ZXJmYWNlKGNvbmZpZywgaGVhZCwgZmFsc2UpOworICAgIHJldHVybiB0aGlzLT5HZXRJbXBvcnRMaW5rSW50ZXJmYWNlKGNvbmZpZywgaGVhZCwgZmFsc2UsIHNlY29uZFBhc3MpOwogICB9CiAKICAgLy8gTGluayBpbnRlcmZhY2VzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBleGVjdXRhYmxlcyB0aGF0IGRvIG5vdApAQCAtNTQzNCw2ICs2MDg0LDEwIEBACiAgIC8vIExvb2t1cCBhbnkgZXhpc3RpbmcgbGluayBpbnRlcmZhY2UgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KICAgY21IZWFkVG9MaW5rSW50ZXJmYWNlTWFwJiBobSA9IHRoaXMtPkdldEhlYWRUb0xpbmtJbnRlcmZhY2VNYXAoY29uZmlnKTsKIAorICBpZiAoc2Vjb25kUGFzcykgeworICAgIGhtLmVyYXNlKGhlYWQpOworICB9CisKICAgLy8gSWYgdGhlIGxpbmsgaW50ZXJmYWNlIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgaGVhZCB0YXJnZXQKICAgLy8gdGhlbiByZXR1cm4gdGhlIG9uZSB3ZSBjb21wdXRlZCBmaXJzdC4KICAgaWYgKCFobS5lbXB0eSgpICYmICFobS5iZWdpbigpLT5zZWNvbmQuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbikgewpAQCAtNTQ0OCw3ICs2MTAyLDcgQEAKICAgaWYgKCFpZmFjZS5BbGxEb25lKSB7CiAgICAgaWZhY2UuQWxsRG9uZSA9IHRydWU7CiAgICAgaWYgKGlmYWNlLkV4aXN0cykgewotICAgICAgdGhpcy0+Q29tcHV0ZUxpbmtJbnRlcmZhY2UoY29uZmlnLCBpZmFjZSwgaGVhZCk7CisgICAgICB0aGlzLT5Db21wdXRlTGlua0ludGVyZmFjZShjb25maWcsIGlmYWNlLCBoZWFkLCBzZWNvbmRQYXNzKTsKICAgICB9CiAgIH0KIApAQCAtNTQ1OSw2ICs2MTEzLDEzIEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNtT3B0aW9uYWxMaW5rSW50ZXJmYWNlJiBpZmFjZSwKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWRUYXJnZXQpIGNvbnN0CiB7CisgIHRoaXMtPkNvbXB1dGVMaW5rSW50ZXJmYWNlKGNvbmZpZywgaWZhY2UsIGhlYWRUYXJnZXQsIGZhbHNlKTsKK30KKwordm9pZCBjbUdlbmVyYXRvclRhcmdldDo6Q29tcHV0ZUxpbmtJbnRlcmZhY2UoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNtT3B0aW9uYWxMaW5rSW50ZXJmYWNlJiBpZmFjZSwKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGhlYWRUYXJnZXQsIGJvb2wgc2Vjb25kUGFzcykgY29uc3QKK3sKICAgaWYgKGlmYWNlLkV4cGxpY2l0KSB7CiAgICAgaWYgKHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CiAgICAgICAgIHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZIHx8CkBAIC01NDcwLDcgKzYxMzEsOCBAQAogICAgICAgICBlbWl0dGVkLmluc2VydChsaWIpOwogICAgICAgfQogICAgICAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7Ci0gICAgICAgIGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBpbXBsID0gdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uKGNvbmZpZyk7CisgICAgICAgIGNtTGlua0ltcGxlbWVudGF0aW9uIGNvbnN0KiBpbXBsID0KKyAgICAgICAgICB0aGlzLT5HZXRMaW5rSW1wbGVtZW50YXRpb24oY29uZmlnLCBzZWNvbmRQYXNzKTsKICAgICAgICAgZm9yIChjbUxpbmtJbXBsSXRlbSBjb25zdCYgbGliIDogaW1wbC0+TGlicmFyaWVzKSB7CiAgICAgICAgICAgaWYgKGVtaXR0ZWQuaW5zZXJ0KGxpYikuc2Vjb25kKSB7CiAgICAgICAgICAgICBpZiAobGliLlRhcmdldCkgewpAQCAtNTQ4MCw5ICs2MTQyLDkgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgLy8gVE9ETzogUmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5IGZpbGUgbmFtZXMuICBQZXJoYXBzIHRoaXMKLSAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIG1vdmVkIHRvIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiwgYnV0IHRoYXQgY3JlYXRlcwotICAgICAgICAgICAgICAvLyBhIGNoaWNrZW4tYW5kLWVnZyBwcm9ibGVtIHNpbmNlIHRoaXMgbGlzdCBpcyBuZWVkZWQgZm9yIGl0cwotICAgICAgICAgICAgICAvLyBjb25zdHJ1Y3Rpb24uCisgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBtb3ZlZCB0byBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24sIGJ1dCB0aGF0CisgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBjaGlja2VuLWFuZC1lZ2cgcHJvYmxlbSBzaW5jZSB0aGlzIGxpc3QgaXMgbmVlZGVkCisgICAgICAgICAgICAgIC8vIGZvciBpdHMgY29uc3RydWN0aW9uLgogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTUwMCw3ICs2MTYyLDcgQEAKICAgaWYgKHRoaXMtPkxpbmtMYW5ndWFnZVByb3BhZ2F0ZXNUb0RlcGVuZGVudHMoKSkgewogICAgIC8vIFRhcmdldHMgdXNpbmcgdGhpcyBhcmNoaXZlIG5lZWQgaXRzIGxhbmd1YWdlIHJ1bnRpbWUgbGlicmFyaWVzLgogICAgIGlmIChjbUxpbmtJbXBsZW1lbnRhdGlvbiBjb25zdCogaW1wbCA9Ci0gICAgICAgICAgdGhpcy0+R2V0TGlua0ltcGxlbWVudGF0aW9uKGNvbmZpZykpIHsKKyAgICAgICAgICB0aGlzLT5HZXRMaW5rSW1wbGVtZW50YXRpb24oY29uZmlnLCBzZWNvbmRQYXNzKSkgewogICAgICAgaWZhY2UuTGFuZ3VhZ2VzID0gaW1wbC0+TGFuZ3VhZ2VzOwogICAgIH0KICAgfQpAQCAtNTUxNywxMSArNjE3OSwxMSBAQAogICAgIC8vIEhvdyBtYW55IHJlcGV0aXRpb25zIGFyZSBuZWVkZWQgaWYgdGhpcyBsaWJyYXJ5IGhhcyBjeWNsaWMKICAgICAvLyBkZXBlbmRlbmNpZXM/CiAgICAgc3RkOjpzdHJpbmcgcHJvcE5hbWUgPSBjbVN0ckNhdCgiTElOS19JTlRFUkZBQ0VfTVVMVElQTElDSVRZIiwgc3VmZml4KTsKLSAgICBpZiAoY29uc3QgY2hhciogY29uZmlnX3JlcHMgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wTmFtZSkpIHsKLSAgICAgIHNzY2FuZihjb25maWdfcmVwcywgIiV1IiwgJmlmYWNlLk11bHRpcGxpY2l0eSk7Ci0gICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiByZXBzID0KKyAgICBpZiAoY21Qcm9wIGNvbmZpZ19yZXBzID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcE5hbWUpKSB7CisgICAgICBzc2NhbmYoY29uZmlnX3JlcHMtPmNfc3RyKCksICIldSIsICZpZmFjZS5NdWx0aXBsaWNpdHkpOworICAgIH0gZWxzZSBpZiAoY21Qcm9wIHJlcHMgPQogICAgICAgICAgICAgICAgICB0aGlzLT5HZXRQcm9wZXJ0eSgiTElOS19JTlRFUkZBQ0VfTVVMVElQTElDSVRZIikpIHsKLSAgICAgIHNzY2FuZihyZXBzLCAiJXUiLCAmaWZhY2UuTXVsdGlwbGljaXR5KTsKKyAgICAgIHNzY2FuZihyZXBzLT5jX3N0cigpLCAiJXUiLCAmaWZhY2UuTXVsdGlwbGljaXR5KTsKICAgICB9CiAgIH0KIH0KQEAgLTU1NDMsNyArNjIwNSw2IEBACiAgIH0KIAogICAvLyBMb29rdXAgYW55IGV4aXN0aW5nIGxpbmsgaW50ZXJmYWNlIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uCi0gIHN0ZDo6c3RyaW5nIENPTkZJRyA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwogICBjbUhlYWRUb0xpbmtJbnRlcmZhY2VNYXAmIGhtID0KICAgICAodXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkKICAgICAgICA/IHRoaXMtPkdldEhlYWRUb0xpbmtJbnRlcmZhY2VVc2FnZVJlcXVpcmVtZW50c01hcChjb25maWcpCkBAIC01NjcyLDIxICs2MzMzLDIxIEBACiAgIH0KIAogICAvLyBTZWxlY3QgYW4gb3V0cHV0IGRpcmVjdG9yeS4KLSAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19vdXRkaXIgPSB0aGlzLT5HZXRQcm9wZXJ0eShjb25maWdQcm9wKSkgeworICBpZiAoY21Qcm9wIGNvbmZpZ19vdXRkaXIgPSB0aGlzLT5HZXRQcm9wZXJ0eShjb25maWdQcm9wKSkgewogICAgIC8vIFVzZSB0aGUgdXNlci1zcGVjaWZpZWQgcGVyLWNvbmZpZ3VyYXRpb24gb3V0cHV0IGRpcmVjdG9yeS4KLSAgICBvdXQgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKGNvbmZpZ19vdXRkaXIsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLAorICAgIG91dCA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKmNvbmZpZ19vdXRkaXIsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKIAogICAgIC8vIFNraXAgcGVyLWNvbmZpZ3VyYXRpb24gc3ViZGlyZWN0b3J5LgogICAgIGNvbmYuY2xlYXIoKTsKLSAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBvdXRkaXIgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7CisgIH0gZWxzZSBpZiAoY21Qcm9wIG91dGRpciA9IHRoaXMtPkdldFByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHsKICAgICAvLyBVc2UgdGhlIHVzZXItc3BlY2lmaWVkIG91dHB1dCBkaXJlY3RvcnkuCiAgICAgb3V0ID0KLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUob3V0ZGlyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKm91dGRpciwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CiAKICAgICAvLyBTa2lwIHBlci1jb25maWd1cmF0aW9uIHN1YmRpcmVjdG9yeSBpZiB0aGUgdmFsdWUgY29udGFpbmVkIGEKICAgICAvLyBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KLSAgICBpZiAob3V0ICE9IG91dGRpcikgeworICAgIGlmIChvdXQgIT0gKm91dGRpcikgewogICAgICAgY29uZi5jbGVhcigpOwogICAgIH0KICAgfSBlbHNlIGlmICh0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSB7CkBAIC01NzQ4LDIxICs2NDA5LDIxIEBACiAgIH0KIAogICAvLyBTZWxlY3QgYW4gb3V0cHV0IGRpcmVjdG9yeS4KLSAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19vdXRkaXIgPSB0aGlzLT5HZXRQcm9wZXJ0eShjb25maWdQcm9wKSkgeworICBpZiAoY21Qcm9wIGNvbmZpZ19vdXRkaXIgPSB0aGlzLT5HZXRQcm9wZXJ0eShjb25maWdQcm9wKSkgewogICAgIC8vIFVzZSB0aGUgdXNlci1zcGVjaWZpZWQgcGVyLWNvbmZpZ3VyYXRpb24gb3V0cHV0IGRpcmVjdG9yeS4KLSAgICBvdXQgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKGNvbmZpZ19vdXRkaXIsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLAorICAgIG91dCA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKmNvbmZpZ19vdXRkaXIsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKIAogICAgIC8vIFNraXAgcGVyLWNvbmZpZ3VyYXRpb24gc3ViZGlyZWN0b3J5LgogICAgIGNvbmYuY2xlYXIoKTsKLSAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBvdXRkaXIgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7CisgIH0gZWxzZSBpZiAoY21Qcm9wIG91dGRpciA9IHRoaXMtPkdldFByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHsKICAgICAvLyBVc2UgdGhlIHVzZXItc3BlY2lmaWVkIG91dHB1dCBkaXJlY3RvcnkuCiAgICAgb3V0ID0KLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUob3V0ZGlyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKm91dGRpciwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CiAKICAgICAvLyBTa2lwIHBlci1jb25maWd1cmF0aW9uIHN1YmRpcmVjdG9yeSBpZiB0aGUgdmFsdWUgY29udGFpbmVkIGEKICAgICAvLyBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KLSAgICBpZiAob3V0ICE9IG91dGRpcikgeworICAgIGlmIChvdXQgIT0gKm91dGRpcikgewogICAgICAgY29uZi5jbGVhcigpOwogICAgIH0KICAgfQpAQCAtNTgwOCwxMiArNjQ2OSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcnBhdGgpIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7CisgIGNtUHJvcCB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApOwogICBpZiAoIXZhbHVlKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgcnBhdGggPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKHZhbHVlLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKyAgcnBhdGggPQorICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoKnZhbHVlLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTU4MzIsNyArNjQ5NCw3IEBACiAKICAgLy8gQW4gZXhwbGljaXQgbGlzdCBvZiBpbnRlcmZhY2UgbGlicmFyaWVzIG1heSBiZSBzZXQgZm9yIHNoYXJlZAogICAvLyBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIHRoYXQgZXhwb3J0IHN5bWJvbHMuCi0gIGNvbnN0IGNoYXIqIGV4cGxpY2l0TGlicmFyaWVzID0gbnVsbHB0cjsKKyAgY21Qcm9wIGV4cGxpY2l0TGlicmFyaWVzID0gbnVsbHB0cjsKICAgc3RkOjpzdHJpbmcgbGlua0lmYWNlUHJvcDsKICAgYm9vbCBjb25zdCBjbXAwMDIyTkVXID0gKHRoaXMtPkdldFBvbGljeVN0YXR1c0NNUDAwMjIoKSAhPSBjbVBvbGljaWVzOjpPTEQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFBvbGljeVN0YXR1c0NNUDAwMjIoKSAhPSBjbVBvbGljaWVzOjpXQVJOKTsKQEAgLTU4NjEsMTAgKzY1MjMsMTAgQEAKICAgICAgICF0aGlzLT5Qb2xpY3lXYXJuZWRDTVAwMDIyKSB7CiAgICAgLy8gQ29tcGFyZSB0aGUgZXhwbGljaXRseSBzZXQgb2xkIGxpbmsgaW50ZXJmYWNlIHByb3BlcnRpZXMgdG8gdGhlCiAgICAgLy8gcHJlZmVycmVkIG5ldyBsaW5rIGludGVyZmFjZSBwcm9wZXJ0eSBvbmUgYW5kIHdhcm4gaWYgZGlmZmVyZW50LgotICAgIGNvbnN0IGNoYXIqIG5ld0V4cGxpY2l0TGlicmFyaWVzID0KKyAgICBjbVByb3AgbmV3RXhwbGljaXRMaWJyYXJpZXMgPQogICAgICAgdGhpcy0+R2V0UHJvcGVydHkoIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyIpOwogICAgIGlmIChuZXdFeHBsaWNpdExpYnJhcmllcyAmJgotICAgICAgICBzdHJjbXAobmV3RXhwbGljaXRMaWJyYXJpZXMsIGV4cGxpY2l0TGlicmFyaWVzKSAhPSAwKSB7CisgICAgICAgICgqbmV3RXhwbGljaXRMaWJyYXJpZXMgIT0gKmV4cGxpY2l0TGlicmFyaWVzKSkgewogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHc7CiAgICAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgICAgICB3IDw8IGNtUG9saWNpZXM6OkdldFBvbGljeVdhcm5pbmcoY21Qb2xpY2llczo6Q01QMDAyMikgPDwgIlxuIgpAQCAtNTg3Myw5ICs2NTM1LDkgQEAKICAgICAgICAgbGlua0lmYWNlUHJvcCA8PCAiIHByb3BlcnRpZXMuIgogICAgICAgICAiXG4iCiAgICAgICAgICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVM6XG4iCi0gICAgICAgICIgICIgPDwgbmV3RXhwbGljaXRMaWJyYXJpZXMgPDwgIlxuIiA8PAorICAgICAgICAiICAiIDw8ICpuZXdFeHBsaWNpdExpYnJhcmllcyA8PCAiXG4iIDw8CiAgICAgICAgIGxpbmtJZmFjZVByb3AgPDwgIjpcbiIKLSAgICAgICAgIiAgIiA8PCBleHBsaWNpdExpYnJhcmllcyA8PCAiXG4iOworICAgICAgICAiICAiIDw8ICpleHBsaWNpdExpYnJhcmllcyA8PCAiXG4iOwogICAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywgdy5zdHIoKSk7CiAgICAgICB0aGlzLT5Qb2xpY3lXYXJuZWRDTVAwMDIyID0gdHJ1ZTsKQEAgLTU4OTQsMTggKzY1NTYsMjUgQEAKIAogICBpZiAoZXhwbGljaXRMaWJyYXJpZXMpIHsKICAgICAvLyBUaGUgaW50ZXJmYWNlIGxpYnJhcmllcyBoYXZlIGJlZW4gZXhwbGljaXRseSBzZXQuCi0gICAgdGhpcy0+RXhwYW5kTGlua0l0ZW1zKGxpbmtJZmFjZVByb3AsIGV4cGxpY2l0TGlicmFyaWVzLCBjb25maWcsIGhlYWRUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5LCBpZmFjZS5MaWJyYXJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24pOwotICB9IGVsc2UgaWYgKCFjbXAwMDIyTkVXKQorICAgIHRoaXMtPkV4cGFuZExpbmtJdGVtcyhsaW5rSWZhY2VQcm9wLCAqZXhwbGljaXRMaWJyYXJpZXMsIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFRhcmdldCwgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksIGlmYWNlLkxpYnJhcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKTsKKyAgICByZXR1cm47CisgIH0KKwogICAvLyBJZiBDTVAwMDIyIGlzIE5FVyB0aGVuIHRoZSBwbGFpbiB0bGwgc2lnbmF0dXJlIHNldHMgdGhlCiAgIC8vIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUywgc28gaWYgd2UgZ2V0IGhlcmUgdGhlbiB0aGUgcHJvamVjdAogICAvLyBjbGVhcmVkIHRoZSBwcm9wZXJ0eSBleHBsaWNpdGx5IGFuZCB3ZSBzaG91bGQgbm90IGZhbGwgYmFjawogICAvLyB0byB0aGUgbGluayBpbXBsZW1lbnRhdGlvbi4KLSAgewotICAgIC8vIFRoZSBsaW5rIGltcGxlbWVudGF0aW9uIGlzIHRoZSBkZWZhdWx0IGxpbmsgaW50ZXJmYWNlLgotICAgIGNtTGlua0ltcGxlbWVudGF0aW9uTGlicmFyaWVzIGNvbnN0KiBpbXBsID0KLSAgICAgIHRoaXMtPkdldExpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllc0ludGVybmFsKGNvbmZpZywgaGVhZFRhcmdldCk7CisgIGlmIChjbXAwMDIyTkVXKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gVGhlIGxpbmsgaW1wbGVtZW50YXRpb24gaXMgdGhlIGRlZmF1bHQgbGluayBpbnRlcmZhY2UuCisgIGlmIChjbUxpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllcyBjb25zdCogaW1wbCA9CisgICAgICAgIHRoaXMtPkdldExpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllc0ludGVybmFsKGNvbmZpZywgaGVhZFRhcmdldCkpIHsKICAgICBpZmFjZS5MaWJyYXJpZXMuaW5zZXJ0KGlmYWNlLkxpYnJhcmllcy5lbmQoKSwgaW1wbC0+TGlicmFyaWVzLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsLT5MaWJyYXJpZXMuZW5kKCkpOwogICAgIGlmICh0aGlzLT5HZXRQb2xpY3lTdGF0dXNDTVAwMDIyKCkgPT0gY21Qb2xpY2llczo6V0FSTiAmJgpAQCAtNTkxNCwxMSArNjU4MywxNSBAQAogICAgICAgLy8gcHJlZmVycmVkIG5ldyBsaW5rIGludGVyZmFjZSBwcm9wZXJ0eSBhbmQgd2FybiBpZiBkaWZmZXJlbnQuCiAgICAgICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiBpZmFjZUxpYnM7CiAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgbmV3UHJvcCA9ICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIG5ld0V4cGxpY2l0TGlicmFyaWVzID0gdGhpcy0+R2V0UHJvcGVydHkobmV3UHJvcCkpIHsKKyAgICAgIGlmIChjbVByb3AgbmV3RXhwbGljaXRMaWJyYXJpZXMgPSB0aGlzLT5HZXRQcm9wZXJ0eShuZXdQcm9wKSkgewogICAgICAgICBib29sIGhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb25EdW1teSA9IGZhbHNlOwotICAgICAgICB0aGlzLT5FeHBhbmRMaW5rSXRlbXMobmV3UHJvcCwgbmV3RXhwbGljaXRMaWJyYXJpZXMsIGNvbmZpZywKKyAgICAgICAgYm9vbCBoYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uRHVtbXkgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBoYWRMaW5rTGFuZ3VhZ2VTZW5zaXRpdmVDb25kaXRpb25EdW1teSA9IGZhbHNlOworICAgICAgICB0aGlzLT5FeHBhbmRMaW5rSXRlbXMobmV3UHJvcCwgKm5ld0V4cGxpY2l0TGlicmFyaWVzLCBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkVGFyZ2V0LCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSwgaWZhY2VMaWJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbkR1bW15KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb25EdW1teSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb25EdW1teSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbkR1bW15KTsKICAgICAgIH0KICAgICAgIGlmIChpZmFjZUxpYnMgIT0gaWZhY2UuTGlicmFyaWVzKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIG9sZExpYnJhcmllcyA9IGNtSm9pbihpbXBsLT5MaWJyYXJpZXMsICI7Iik7CkBAIC01OTU1LDE5ICs2NjI4LDIyIEBACiAKIGNvbnN0IGNtTGlua0ludGVyZmFjZSogY21HZW5lcmF0b3JUYXJnZXQ6OkdldEltcG9ydExpbmtJbnRlcmZhY2UoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkVGFyZ2V0LAotICBib29sIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5KSBjb25zdAorICBib29sIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5LCBib29sIHNlY29uZFBhc3MpIGNvbnN0CiB7CiAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpJbXBvcnRJbmZvIGNvbnN0KiBpbmZvID0gdGhpcy0+R2V0SW1wb3J0SW5mbyhjb25maWcpOwogICBpZiAoIWluZm8pIHsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogCi0gIHN0ZDo6c3RyaW5nIENPTkZJRyA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwogICBjbUhlYWRUb0xpbmtJbnRlcmZhY2VNYXAmIGhtID0KICAgICAodXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkKICAgICAgICA/IHRoaXMtPkdldEhlYWRUb0xpbmtJbnRlcmZhY2VVc2FnZVJlcXVpcmVtZW50c01hcChjb25maWcpCiAgICAgICAgOiB0aGlzLT5HZXRIZWFkVG9MaW5rSW50ZXJmYWNlTWFwKGNvbmZpZykpOwogCisgIGlmIChzZWNvbmRQYXNzKSB7CisgICAgaG0uZXJhc2UoaGVhZFRhcmdldCk7CisgIH0KKwogICAvLyBJZiB0aGUgbGluayBpbnRlcmZhY2UgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBoZWFkIHRhcmdldAogICAvLyB0aGVuIHJldHVybiB0aGUgb25lIHdlIGNvbXB1dGVkIGZpcnN0LgogICBpZiAoIWhtLmVtcHR5KCkgJiYgIWhtLmJlZ2luKCktPnNlY29uZC5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKSB7CkBAIC01OTgxLDcgKzY2NTcsOSBAQAogICAgIGNtRXhwYW5kTGlzdChpbmZvLT5MYW5ndWFnZXMsIGlmYWNlLkxhbmd1YWdlcyk7CiAgICAgdGhpcy0+RXhwYW5kTGlua0l0ZW1zKGluZm8tPkxpYnJhcmllc1Byb3AsIGluZm8tPkxpYnJhcmllcywgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkVGFyZ2V0LCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSwgaWZhY2UuTGlicmFyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS5IYWRIZWFkU2Vuc2l0aXZlQ29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uKTsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwcyA9IGNtRXhwYW5kZWRMaXN0KGluZm8tPlNoYXJlZERlcHMpOwogICAgIHRoaXMtPkxvb2t1cExpbmtJdGVtcyhkZXBzLCBjbUxpc3RGaWxlQmFja3RyYWNlKCksIGlmYWNlLlNoYXJlZERlcHMpOwogICB9CkBAIC02MDM3LDE3ICs2NzE1LDE3IEBACiAgIC8vIEluaXRpYWxpemUgbWVtYmVycy4KICAgaW5mby5Ob1NPTmFtZSA9IGZhbHNlOwogCi0gIGNvbnN0IGNoYXIqIGxvYyA9IG51bGxwdHI7Ci0gIGNvbnN0IGNoYXIqIGltcCA9IG51bGxwdHI7CisgIGNtUHJvcCBsb2MgPSBudWxscHRyOworICBjbVByb3AgaW1wID0gbnVsbHB0cjsKICAgc3RkOjpzdHJpbmcgc3VmZml4OwotICBpZiAoIXRoaXMtPlRhcmdldC0+R2V0TWFwcGVkQ29uZmlnKGRlc2lyZWRfY29uZmlnLCAmbG9jLCAmaW1wLCBzdWZmaXgpKSB7CisgIGlmICghdGhpcy0+VGFyZ2V0LT5HZXRNYXBwZWRDb25maWcoZGVzaXJlZF9jb25maWcsIGxvYywgaW1wLCBzdWZmaXgpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKICAgLy8gR2V0IHRoZSBsaW5rIGludGVyZmFjZS4KICAgewogICAgIHN0ZDo6c3RyaW5nIGxpbmtQcm9wID0gIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyI7Ci0gICAgY29uc3QgY2hhciogcHJvcGVydHlMaWJzID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3ApOworICAgIGNtUHJvcCBwcm9wZXJ0eUxpYnMgPSB0aGlzLT5HZXRQcm9wZXJ0eShsaW5rUHJvcCk7CiAKICAgICBpZiAodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKICAgICAgIGlmICghcHJvcGVydHlMaWJzKSB7CkBAIC02MDYyLDEyICs2NzQwLDEyIEBACiAgICAgfQogICAgIGlmIChwcm9wZXJ0eUxpYnMpIHsKICAgICAgIGluZm8uTGlicmFyaWVzUHJvcCA9IGxpbmtQcm9wOwotICAgICAgaW5mby5MaWJyYXJpZXMgPSBwcm9wZXJ0eUxpYnM7CisgICAgICBpbmZvLkxpYnJhcmllcyA9ICpwcm9wZXJ0eUxpYnM7CiAgICAgfQogICB9CiAgIGlmICh0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgIGlmIChsb2MpIHsKLSAgICAgIGluZm8uTGliTmFtZSA9IGxvYzsKKyAgICAgIGluZm8uTGliTmFtZSA9ICpsb2M7CiAgICAgfQogICAgIHJldHVybjsKICAgfQpAQCAtNjA3Nyw0NyArNjc1NSw0NiBAQAogCiAgIC8vIEdldCB0aGUgbG9jYXRpb24uCiAgIGlmIChsb2MpIHsKLSAgICBpbmZvLkxvY2F0aW9uID0gbG9jOworICAgIGluZm8uTG9jYXRpb24gPSAqbG9jOwogICB9IGVsc2UgewogICAgIHN0ZDo6c3RyaW5nIGltcFByb3AgPSBjbVN0ckNhdCgiSU1QT1JURURfTE9DQVRJT04iLCBzdWZmaXgpOwotICAgIGlmIChjb25zdCBjaGFyKiBjb25maWdfbG9jYXRpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKSkgewotICAgICAgaW5mby5Mb2NhdGlvbiA9IGNvbmZpZ19sb2NhdGlvbjsKLSAgICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIGxvY2F0aW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX0xPQ0FUSU9OIikpIHsKLSAgICAgIGluZm8uTG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICBpZiAoY21Qcm9wIGNvbmZpZ19sb2NhdGlvbiA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApKSB7CisgICAgICBpbmZvLkxvY2F0aW9uID0gKmNvbmZpZ19sb2NhdGlvbjsKKyAgICB9IGVsc2UgaWYgKGNtUHJvcCBsb2NhdGlvbiA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9MT0NBVElPTiIpKSB7CisgICAgICBpbmZvLkxvY2F0aW9uID0gKmxvY2F0aW9uOwogICAgIH0KICAgfQogCiAgIC8vIEdldCB0aGUgc29uYW1lLgogICBpZiAodGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkpIHsKICAgICBzdGQ6OnN0cmluZyBzb1Byb3AgPSBjbVN0ckNhdCgiSU1QT1JURURfU09OQU1FIiwgc3VmZml4KTsKLSAgICBpZiAoY29uc3QgY2hhciogY29uZmlnX3NvbmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KHNvUHJvcCkpIHsKLSAgICAgIGluZm8uU09OYW1lID0gY29uZmlnX3NvbmFtZTsKLSAgICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIHNvbmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9TT05BTUUiKSkgewotICAgICAgaW5mby5TT05hbWUgPSBzb25hbWU7CisgICAgaWYgKGNtUHJvcCBjb25maWdfc29uYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoc29Qcm9wKSkgeworICAgICAgaW5mby5TT05hbWUgPSAqY29uZmlnX3NvbmFtZTsKKyAgICB9IGVsc2UgaWYgKGNtUHJvcCBzb25hbWUgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfU09OQU1FIikpIHsKKyAgICAgIGluZm8uU09OYW1lID0gKnNvbmFtZTsKICAgICB9CiAgIH0KIAogICAvLyBHZXQgdGhlICJuby1zb25hbWUiIG1hcmsuCiAgIGlmICh0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSkgewogICAgIHN0ZDo6c3RyaW5nIHNvUHJvcCA9IGNtU3RyQ2F0KCJJTVBPUlRFRF9OT19TT05BTUUiLCBzdWZmaXgpOwotICAgIGlmIChjb25zdCBjaGFyKiBjb25maWdfbm9fc29uYW1lID0gdGhpcy0+R2V0UHJvcGVydHkoc29Qcm9wKSkgewotICAgICAgaW5mby5Ob1NPTmFtZSA9IGNtSXNPbihjb25maWdfbm9fc29uYW1lKTsKLSAgICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIG5vX3NvbmFtZSA9Ci0gICAgICAgICAgICAgICAgIHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9OT19TT05BTUUiKSkgewotICAgICAgaW5mby5Ob1NPTmFtZSA9IGNtSXNPbihub19zb25hbWUpOworICAgIGlmIChjbVByb3AgY29uZmlnX25vX3NvbmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KHNvUHJvcCkpIHsKKyAgICAgIGluZm8uTm9TT05hbWUgPSBjbUlzT24oKmNvbmZpZ19ub19zb25hbWUpOworICAgIH0gZWxzZSBpZiAoY21Qcm9wIG5vX3NvbmFtZSA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9OT19TT05BTUUiKSkgeworICAgICAgaW5mby5Ob1NPTmFtZSA9IGNtSXNPbigqbm9fc29uYW1lKTsKICAgICB9CiAgIH0KIAogICAvLyBHZXQgdGhlIGltcG9ydCBsaWJyYXJ5LgogICBpZiAoaW1wKSB7Ci0gICAgaW5mby5JbXBvcnRMaWJyYXJ5ID0gaW1wOworICAgIGluZm8uSW1wb3J0TGlicmFyeSA9ICppbXA7CiAgIH0gZWxzZSBpZiAodGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKICAgICAgICAgICAgICB0aGlzLT5Jc0V4ZWN1dGFibGVXaXRoRXhwb3J0cygpKSB7CiAgICAgc3RkOjpzdHJpbmcgaW1wUHJvcCA9IGNtU3RyQ2F0KCJJTVBPUlRFRF9JTVBMSUIiLCBzdWZmaXgpOwotICAgIGlmIChjb25zdCBjaGFyKiBjb25maWdfaW1wbGliID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCkpIHsKLSAgICAgIGluZm8uSW1wb3J0TGlicmFyeSA9IGNvbmZpZ19pbXBsaWI7Ci0gICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBpbXBsaWIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfSU1QTElCIikpIHsKLSAgICAgIGluZm8uSW1wb3J0TGlicmFyeSA9IGltcGxpYjsKKyAgICBpZiAoY21Qcm9wIGNvbmZpZ19pbXBsaWIgPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKSkgeworICAgICAgaW5mby5JbXBvcnRMaWJyYXJ5ID0gKmNvbmZpZ19pbXBsaWI7CisgICAgfSBlbHNlIGlmIChjbVByb3AgaW1wbGliID0gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX0lNUExJQiIpKSB7CisgICAgICBpbmZvLkltcG9ydExpYnJhcnkgPSAqaW1wbGliOwogICAgIH0KICAgfQogCkBAIC02MTI1LDExICs2ODAyLDExIEBACiAgIHsKICAgICBzdGQ6OnN0cmluZyBsaW5rUHJvcCA9CiAgICAgICBjbVN0ckNhdCgiSU1QT1JURURfTElOS19ERVBFTkRFTlRfTElCUkFSSUVTIiwgc3VmZml4KTsKLSAgICBpZiAoY29uc3QgY2hhciogY29uZmlnX2xpYnMgPSB0aGlzLT5HZXRQcm9wZXJ0eShsaW5rUHJvcCkpIHsKLSAgICAgIGluZm8uU2hhcmVkRGVwcyA9IGNvbmZpZ19saWJzOwotICAgIH0gZWxzZSBpZiAoY29uc3QgY2hhciogbGlicyA9CisgICAgaWYgKGNtUHJvcCBjb25maWdfbGlicyA9IHRoaXMtPkdldFByb3BlcnR5KGxpbmtQcm9wKSkgeworICAgICAgaW5mby5TaGFyZWREZXBzID0gKmNvbmZpZ19saWJzOworICAgIH0gZWxzZSBpZiAoY21Qcm9wIGxpYnMgPQogICAgICAgICAgICAgICAgICB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfTElOS19ERVBFTkRFTlRfTElCUkFSSUVTIikpIHsKLSAgICAgIGluZm8uU2hhcmVkRGVwcyA9IGxpYnM7CisgICAgICBpbmZvLlNoYXJlZERlcHMgPSAqbGliczsKICAgICB9CiAgIH0KIApAQCAtNjEzNywyMSArNjgxNCwyMSBAQAogICBpZiAodGhpcy0+TGlua0xhbmd1YWdlUHJvcGFnYXRlc1RvRGVwZW5kZW50cygpKSB7CiAgICAgc3RkOjpzdHJpbmcgbGlua1Byb3AgPQogICAgICAgY21TdHJDYXQoIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xBTkdVQUdFUyIsIHN1ZmZpeCk7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19saWJzID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3ApKSB7Ci0gICAgICBpbmZvLkxhbmd1YWdlcyA9IGNvbmZpZ19saWJzOwotICAgIH0gZWxzZSBpZiAoY29uc3QgY2hhciogbGlicyA9CisgICAgaWYgKGNtUHJvcCBjb25maWdfbGlicyA9IHRoaXMtPkdldFByb3BlcnR5KGxpbmtQcm9wKSkgeworICAgICAgaW5mby5MYW5ndWFnZXMgPSAqY29uZmlnX2xpYnM7CisgICAgfSBlbHNlIGlmIChjbVByb3AgbGlicyA9CiAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MQU5HVUFHRVMiKSkgewotICAgICAgaW5mby5MYW5ndWFnZXMgPSBsaWJzOworICAgICAgaW5mby5MYW5ndWFnZXMgPSAqbGliczsKICAgICB9CiAgIH0KIAogICAvLyBHZXQgaW5mb3JtYXRpb24gaWYgdGFyZ2V0IGlzIG1hbmFnZWQgYXNzZW1ibHkuCiAgIHsKICAgICBzdGQ6OnN0cmluZyBsaW5rUHJvcCA9ICJJTVBPUlRFRF9DT01NT05fTEFOR1VBR0VfUlVOVElNRSI7Ci0gICAgaWYgKGF1dG8gcGMgPSB0aGlzLT5HZXRQcm9wZXJ0eShsaW5rUHJvcCArIHN1ZmZpeCkpIHsKLSAgICAgIGluZm8uTWFuYWdlZCA9IHRoaXMtPkNoZWNrTWFuYWdlZFR5cGUocGMpOwotICAgIH0gZWxzZSBpZiAoYXV0byBwID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3ApKSB7Ci0gICAgICBpbmZvLk1hbmFnZWQgPSB0aGlzLT5DaGVja01hbmFnZWRUeXBlKHApOworICAgIGlmIChjbVByb3AgcGMgPSB0aGlzLT5HZXRQcm9wZXJ0eShsaW5rUHJvcCArIHN1ZmZpeCkpIHsKKyAgICAgIGluZm8uTWFuYWdlZCA9IHRoaXMtPkNoZWNrTWFuYWdlZFR5cGUoKnBjKTsKKyAgICB9IGVsc2UgaWYgKGNtUHJvcCBwID0gdGhpcy0+R2V0UHJvcGVydHkobGlua1Byb3ApKSB7CisgICAgICBpbmZvLk1hbmFnZWQgPSB0aGlzLT5DaGVja01hbmFnZWRUeXBlKCpwKTsKICAgICB9CiAgIH0KIApAQCAtNjE1OSwxMSArNjgzNiwxMSBAQAogICBpZiAodGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpIHsKICAgICBzdGQ6OnN0cmluZyBsaW5rUHJvcCA9CiAgICAgICBjbVN0ckNhdCgiSU1QT1JURURfTElOS19JTlRFUkZBQ0VfTVVMVElQTElDSVRZIiwgc3VmZml4KTsKLSAgICBpZiAoY29uc3QgY2hhciogY29uZmlnX3JlcHMgPSB0aGlzLT5HZXRQcm9wZXJ0eShsaW5rUHJvcCkpIHsKLSAgICAgIHNzY2FuZihjb25maWdfcmVwcywgIiV1IiwgJmluZm8uTXVsdGlwbGljaXR5KTsKLSAgICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIHJlcHMgPQorICAgIGlmIChjbVByb3AgY29uZmlnX3JlcHMgPSB0aGlzLT5HZXRQcm9wZXJ0eShsaW5rUHJvcCkpIHsKKyAgICAgIHNzY2FuZihjb25maWdfcmVwcy0+Y19zdHIoKSwgIiV1IiwgJmluZm8uTXVsdGlwbGljaXR5KTsKKyAgICB9IGVsc2UgaWYgKGNtUHJvcCByZXBzID0KICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX0xJTktfSU5URVJGQUNFX01VTFRJUExJQ0lUWSIpKSB7Ci0gICAgICBzc2NhbmYocmVwcywgIiV1IiwgJmluZm8uTXVsdGlwbGljaXR5KTsKKyAgICAgIHNzY2FuZihyZXBzLT5jX3N0cigpLCAiJXUiLCAmaW5mby5NdWx0aXBsaWNpdHkpOwogICAgIH0KICAgfQogfQpAQCAtNjE3MSwyOCArNjg0OCwzNiBAQAogY21IZWFkVG9MaW5rSW50ZXJmYWNlTWFwJiBjbUdlbmVyYXRvclRhcmdldDo6R2V0SGVhZFRvTGlua0ludGVyZmFjZU1hcCgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgc3RkOjpzdHJpbmcgQ09ORklHID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyk7Ci0gIHJldHVybiB0aGlzLT5MaW5rSW50ZXJmYWNlTWFwW0NPTkZJR107CisgIHJldHVybiB0aGlzLT5MaW5rSW50ZXJmYWNlTWFwW2NtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpXTsKIH0KIAogY21IZWFkVG9MaW5rSW50ZXJmYWNlTWFwJgogY21HZW5lcmF0b3JUYXJnZXQ6OkdldEhlYWRUb0xpbmtJbnRlcmZhY2VVc2FnZVJlcXVpcmVtZW50c01hcCgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgc3RkOjpzdHJpbmcgQ09ORklHID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyk7Ci0gIHJldHVybiB0aGlzLT5MaW5rSW50ZXJmYWNlVXNhZ2VSZXF1aXJlbWVudHNPbmx5TWFwW0NPTkZJR107CisgIHJldHVybiB0aGlzCisgICAgLT5MaW5rSW50ZXJmYWNlVXNhZ2VSZXF1aXJlbWVudHNPbmx5TWFwW2NtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpXTsKIH0KIAogY29uc3QgY21MaW5rSW1wbGVtZW50YXRpb24qIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMaW5rSW1wbGVtZW50YXRpb24oCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIC8vIFRoZXJlIGlzIG5vIGxpbmsgaW1wbGVtZW50YXRpb24gZm9yIGltcG9ydGVkIHRhcmdldHMuCi0gIGlmICh0aGlzLT5Jc0ltcG9ydGVkKCkpIHsKKyAgcmV0dXJuIHRoaXMtPkdldExpbmtJbXBsZW1lbnRhdGlvbihjb25maWcsIGZhbHNlKTsKK30KKworY29uc3QgY21MaW5rSW1wbGVtZW50YXRpb24qIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMaW5rSW1wbGVtZW50YXRpb24oCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGJvb2wgc2Vjb25kUGFzcykgY29uc3QKK3sKKyAgLy8gVGhlcmUgaXMgbm8gbGluayBpbXBsZW1lbnRhdGlvbiBmb3IgdGFyZ2V0cyB0aGF0IGNhbm5vdCBjb21waWxlIHNvdXJjZXMuCisgIGlmICghdGhpcy0+Q2FuQ29tcGlsZVNvdXJjZXMoKSkgewogICAgIHJldHVybiBudWxscHRyOwogICB9CiAKLSAgc3RkOjpzdHJpbmcgQ09ORklHID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyk7Ci0gIGNtT3B0aW9uYWxMaW5rSW1wbGVtZW50YXRpb24mIGltcGwgPSB0aGlzLT5MaW5rSW1wbE1hcFtDT05GSUddW3RoaXNdOworICBjbU9wdGlvbmFsTGlua0ltcGxlbWVudGF0aW9uJiBpbXBsID0KKyAgICB0aGlzLT5MaW5rSW1wbE1hcFtjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKV1bdGhpc107CisgIGlmIChzZWNvbmRQYXNzKSB7CisgICAgaW1wbCA9IGNtT3B0aW9uYWxMaW5rSW1wbGVtZW50YXRpb24oKTsKKyAgfQogICBpZiAoIWltcGwuTGlicmFyaWVzRG9uZSkgewogICAgIGltcGwuTGlicmFyaWVzRG9uZSA9IHRydWU7CiAgICAgdGhpcy0+Q29tcHV0ZUxpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllcyhjb25maWcsIGltcGwsIHRoaXMpOwpAQCAtNjIwOCw3ICs2ODkzLDcgQEAKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4mIGZpbGVzKSBjb25zdAogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKCk7CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIAogICBhdXRvIGl0ID0gY29uZmlncy5iZWdpbigpOwogICBjb25zdCBzdGQ6OnN0cmluZyYgZmlyc3RDb25maWcgPSAqaXQ7CkBAIC02MzI5LDkgKzcwMTQsMjkgQEAKICAgcmV0dXJuIGxpYjsKIH0KIAorYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNEZXByZWNhdGVkKCkgY29uc3QKK3sKKyAgY21Qcm9wIGRlcHJlY2F0aW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIkRFUFJFQ0FUSU9OIik7CisgIHJldHVybiBjbU5vbmVtcHR5KGRlcHJlY2F0aW9uKTsKK30KKworc3RkOjpzdHJpbmcgY21HZW5lcmF0b3JUYXJnZXQ6OkdldERlcHJlY2F0aW9uKCkgY29uc3QKK3sKKyAgLy8gZmluZCBERVBSRUNBVElPTiBwcm9wZXJ0eQorICBpZiAoY21Qcm9wIGRlcHJlY2F0aW9uID0gdGhpcy0+R2V0UHJvcGVydHkoIkRFUFJFQ0FUSU9OIikpIHsKKyAgICByZXR1cm4gKmRlcHJlY2F0aW9uOworICB9CisgIHJldHVybiBzdGQ6OnN0cmluZygpOworfQorCiB2b2lkIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRMYW5ndWFnZXMoc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBsYW5ndWFnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKKyAgLy8gVGFyZ2V0cyB0aGF0IGRvIG5vdCBjb21waWxlIGFueXRoaW5nIGhhdmUgbm8gbGFuZ3VhZ2VzLgorICBpZiAoIXRoaXMtPkNhbkNvbXBpbGVTb3VyY2VzKCkpIHsKKyAgICByZXR1cm47CisgIH0KKwogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBzb3VyY2VGaWxlczsKICAgdGhpcy0+R2V0U291cmNlRmlsZXMoc291cmNlRmlsZXMsIGNvbmZpZyk7CiAgIGZvciAoY21Tb3VyY2VGaWxlKiBzcmMgOiBzb3VyY2VGaWxlcykgewpAQCAtNjM3OCwxMyArNzA4MywxMiBAQAogICAgICAgdGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbGFuZ3VhZ2VzOwotICB0aGlzLT5HZXRMYW5ndWFnZXMobGFuZ3VhZ2VzLCAiIik7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBsYW5ndWFnZXMgPSB0aGlzLT5HZXRBbGxDb25maWdDb21waWxlTGFuZ3VhZ2VzKCk7CiAgIC8vIENvbnNpZGVyIGFuIGV4cGxpY2l0IGxpbmtlciBsYW5ndWFnZSBwcm9wZXJ0eSwgYnV0ICpub3QqIHRoZQogICAvLyBjb21wdXRlZCBsaW5rZXIgbGFuZ3VhZ2UgdGhhdCBtYXkgZGVwZW5kIG9uIGxpbmtlZCB0YXJnZXRzLgotICBjb25zdCBjaGFyKiBsaW5rTGFuZyA9IHRoaXMtPkdldFByb3BlcnR5KCJMSU5LRVJfTEFOR1VBR0UiKTsKLSAgaWYgKGxpbmtMYW5nICYmICpsaW5rTGFuZykgewotICAgIGxhbmd1YWdlcy5pbnNlcnQobGlua0xhbmcpOworICBjbVByb3AgbGlua0xhbmcgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiTElOS0VSX0xBTkdVQUdFIik7CisgIGlmIChjbU5vbmVtcHR5KGxpbmtMYW5nKSkgeworICAgIGxhbmd1YWdlcy5pbnNlcnQoKmxpbmtMYW5nKTsKICAgfQogICByZXR1cm4gbGFuZ3VhZ2VzLnNpemUoKSA9PSAxICYmIGxhbmd1YWdlcy5jb3VudCgiQ1NoYXJwIikgPiAwOwogfQpAQCAtNjQyOCwxNCArNzEzMiwxNCBAQAogY21HZW5lcmF0b3JUYXJnZXQ6OkdldExpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllc0ludGVybmFsKAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogaGVhZCkgY29uc3QKIHsKLSAgLy8gVGhlcmUgaXMgbm8gbGluayBpbXBsZW1lbnRhdGlvbiBmb3IgaW1wb3J0ZWQgdGFyZ2V0cy4KLSAgaWYgKHRoaXMtPklzSW1wb3J0ZWQoKSkgeworICAvLyBUaGVyZSBpcyBubyBsaW5rIGltcGxlbWVudGF0aW9uIGZvciB0YXJnZXRzIHRoYXQgY2Fubm90IGNvbXBpbGUgc291cmNlcy4KKyAgaWYgKCF0aGlzLT5DYW5Db21waWxlU291cmNlcygpKSB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KIAogICAvLyBQb3B1bGF0ZSB0aGUgbGluayBpbXBsZW1lbnRhdGlvbiBsaWJyYXJpZXMgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KLSAgc3RkOjpzdHJpbmcgQ09ORklHID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyk7Ci0gIEhlYWRUb0xpbmtJbXBsZW1lbnRhdGlvbk1hcCYgaG0gPSB0aGlzLT5MaW5rSW1wbE1hcFtDT05GSUddOworICBIZWFkVG9MaW5rSW1wbGVtZW50YXRpb25NYXAmIGhtID0KKyAgICB0aGlzLT5MaW5rSW1wbE1hcFtjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKV07CiAKICAgLy8gSWYgdGhlIGxpbmsgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBoZWFkIHRhcmdldAogICAvLyB0aGVuIHJldHVybiB0aGUgb25lIHdlIGNvbXB1dGVkIGZpcnN0LgpAQCAtNjQ1NCwxMyArNzE1OCwxNCBAQAogYm9vbCBjbUdlbmVyYXRvclRhcmdldDo6SXNOdWxsSW1wbGllZEJ5TGlua0xpYnJhcmllcygKICAgY29uc3Qgc3RkOjpzdHJpbmcmIHApIGNvbnN0CiB7Ci0gIHJldHVybiBjbUNvbnRhaW5zKHRoaXMtPkxpbmtJbXBsaWNpdE51bGxQcm9wZXJ0aWVzLCBwKTsKKyAgcmV0dXJuIGNtOjpjb250YWlucyh0aGlzLT5MaW5rSW1wbGljaXROdWxsUHJvcGVydGllcywgcCk7CiB9CiAKIHZvaWQgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbXB1dGVMaW5rSW1wbGVtZW50YXRpb25MaWJyYXJpZXMoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNtT3B0aW9uYWxMaW5rSW1wbGVtZW50YXRpb24mIGltcGwsCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBoZWFkKSBjb25zdAogeworICBjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiBsZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yOwogICBjbVN0cmluZ1JhbmdlIGVudHJ5UmFuZ2UgPSB0aGlzLT5UYXJnZXQtPkdldExpbmtJbXBsZW1lbnRhdGlvbkVudHJpZXMoKTsKICAgY21CYWNrdHJhY2VSYW5nZSBidFJhbmdlID0gdGhpcy0+VGFyZ2V0LT5HZXRMaW5rSW1wbGVtZW50YXRpb25CYWNrdHJhY2VzKCk7CiAgIGNtQmFja3RyYWNlUmFuZ2U6OmNvbnN0X2l0ZXJhdG9yIGJ0SXQgPSBidFJhbmdlLmJlZ2luKCk7CkBAIC02NDY5LDIwICs3MTc0LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gZW50cnlSYW5nZS5lbmQoKTsKICAgICAgICBsZSAhPSBlbmQ7ICsrbGUsICsrYnRJdCkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsbGliczsKKyAgICAvLyBLZWVwIHRoaXMgbG9naWMgaW4gc3luYyB3aXRoIEV4cGFuZExpbmtJdGVtcy4KICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25EQUdDaGVja2VyIGRhZ0NoZWNrZXIodGhpcywgIkxJTktfTElCUkFSSUVTIiwgbnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CiAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlKCpidEl0KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNvbnN0IGNnZSA9IGdlLlBhcnNlKCpsZSk7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGV2YWx1YXRlZCA9Ci0gICAgICBjZ2UtPkV2YWx1YXRlKHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcsIGhlYWQsICZkYWdDaGVja2VyKTsKKyAgICAgIGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZywgaGVhZCwgJmRhZ0NoZWNrZXIsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxpbmtlckxhbmd1YWdlKTsKICAgICBjbUV4cGFuZExpc3QoZXZhbHVhdGVkLCBsbGlicyk7CiAgICAgaWYgKGNnZS0+R2V0SGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbigpKSB7CiAgICAgICBpbXBsLkhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSB0cnVlOwogICAgIH0KKyAgICBpZiAoY2dlLT5HZXRIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uKCkpIHsKKyAgICAgIGltcGwuSGFkQ29udGV4dFNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CisgICAgfQorICAgIGlmIChjZ2UtPkdldEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbigpKSB7CisgICAgICBpbXBsLkhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IHRydWU7CisgICAgfQogCiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbGliIDogbGxpYnMpIHsKKyAgICAgIGlmICh0aGlzLT5Jc0xpbmtMb29rdXBTY29wZShsaWIsIGxnKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKwogICAgICAgLy8gU2tpcCBlbnRyaWVzIHRoYXQgcmVzb2x2ZSB0byB0aGUgdGFyZ2V0IGl0c2VsZiBvciBhcmUgZW1wdHkuCiAgICAgICBzdGQ6OnN0cmluZyBuYW1lID0gdGhpcy0+Q2hlY2tDTVAwMDA0KGxpYik7CisgICAgICBpZiAodGhpcy0+R2V0UG9saWN5U3RhdHVzQ01QMDEwOCgpID09IGNtUG9saWNpZXM6Ok5FVykgeworICAgICAgICAvLyByZXNvbHZlIGFsaWFzIG5hbWUKKyAgICAgICAgYXV0byB0YXJnZXQgPSB0aGlzLT5NYWtlZmlsZS0+RmluZFRhcmdldFRvVXNlKG5hbWUpOworICAgICAgICBpZiAodGFyZ2V0KSB7CisgICAgICAgICAgbmFtZSA9IHRhcmdldC0+R2V0TmFtZSgpOworICAgICAgICB9CisgICAgICB9CiAgICAgICBpZiAobmFtZSA9PSB0aGlzLT5HZXROYW1lKCkgfHwgbmFtZS5lbXB0eSgpKSB7CiAgICAgICAgIGlmIChuYW1lID09IHRoaXMtPkdldE5hbWUoKSkgewogICAgICAgICAgIGJvb2wgbm9NZXNzYWdlID0gZmFsc2U7CkBAIC02NTE1LDcgKzcyMzksNyBAQAogICAgICAgfQogCiAgICAgICAvLyBUaGUgZW50cnkgaXMgbWVhbnQgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KLSAgICAgIGltcGwuTGlicmFyaWVzLmVtcGxhY2VfYmFjayh0aGlzLT5SZXNvbHZlTGlua0l0ZW0obmFtZSwgKmJ0SXQpLAorICAgICAgaW1wbC5MaWJyYXJpZXMuZW1wbGFjZV9iYWNrKHRoaXMtPlJlc29sdmVMaW5rSXRlbShuYW1lLCAqYnRJdCwgbGcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCAhPSAqbGUpOwogICAgIH0KIApAQCAtNjU1MiwzOCArNzI3NiwxNiBAQAogY21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldE9yU3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpSZXNvbHZlVGFyZ2V0UmVmZXJlbmNlKAogICBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgY29uc3QKIHsKLSAgY21Mb2NhbEdlbmVyYXRvciBjb25zdCogbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcjsKLSAgc3RkOjpzdHJpbmcgY29uc3QqIGxvb2t1cE5hbWUgPSAmbmFtZTsKKyAgcmV0dXJuIHRoaXMtPlJlc29sdmVUYXJnZXRSZWZlcmVuY2UobmFtZSwgdGhpcy0+TG9jYWxHZW5lcmF0b3IpOworfQogCi0gIC8vIFdoZW4gdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCkgaXMgY2FsbGVkIHdpdGggYSBMSFMgdGFyZ2V0IHRoYXQgaXMKLSAgLy8gbm90IGNyZWF0ZWQgaW4gdGhlIGNhbGxpbmcgZGlyZWN0b3J5IGl0IGFkZHMgYSBkaXJlY3RvcnkgaWQgc3VmZml4Ci0gIC8vIHRoYXQgd2UgY2FuIHVzZSB0byBsb29rIHVwIHRoZSBjYWxsaW5nIGRpcmVjdG9yeS4gIEl0IGlzIHRoYXQgc2NvcGUKLSAgLy8gaW4gd2hpY2ggdGhlIGl0ZW0gbmFtZSBpcyBtZWFuaW5nZnVsLiAgVGhpcyBjYXNlIGlzIHJlbGF0aXZlbHkgcmFyZQotICAvLyBzbyB3ZSBhbGxvY2F0ZSBhIHNlcGFyYXRlIHN0cmluZyBvbmx5IHdoZW4gdGhlIGRpcmVjdG9yeSBpZCBpcyBwcmVzZW50LgotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IG5hbWUuZmluZChDTUFLRV9ESVJFQ1RPUllfSURfU0VQKTsKLSAgc3RkOjpzdHJpbmcgcGxhaW5OYW1lOwotICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgLy8gV2Ugd2lsbCBsb29rIHVwIHRoZSBwbGFpbiBuYW1lIHdpdGhvdXQgdGhlIGRpcmVjdG9yeSBpZCBzdWZmaXguCi0gICAgcGxhaW5OYW1lID0gbmFtZS5zdWJzdHIoMCwgcG9zKTsKLQotICAgIC8vIFdlIHdpbGwgbG9vayB1cCBpbiB0aGUgc2NvcGUgb2YgdGhlIGRpcmVjdG9yeSBpZC4KLSAgICAvLyBJZiB3ZSBkbyBub3QgcmVjb2duaXplIHRoZSBpZCB0aGVuIGxlYXZlIHRoZSBvcmlnaW5hbAotICAgIC8vIHN5bnRheCBpbiBwbGFjZSB0byBwcm9kdWNlIGFuIGluZGljYXRpdmUgZXJyb3IgbGF0ZXIuCi0gICAgY21EaXJlY3RvcnlJZCBjb25zdCBkaXJJZCA9Ci0gICAgICBuYW1lLnN1YnN0cihwb3MgKyBzaXplb2YoQ01BS0VfRElSRUNUT1JZX0lEX1NFUCkgLSAxKTsKLSAgICBpZiAoY21Mb2NhbEdlbmVyYXRvciBjb25zdCogb3RoZXJMRyA9Ci0gICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5GaW5kTG9jYWxHZW5lcmF0b3IoZGlySWQpKSB7Ci0gICAgICBsZyA9IG90aGVyTEc7Ci0gICAgICBsb29rdXBOYW1lID0gJnBsYWluTmFtZTsKLSAgICB9Ci0gIH0KLQorY21HZW5lcmF0b3JUYXJnZXQ6OlRhcmdldE9yU3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpSZXNvbHZlVGFyZ2V0UmVmZXJlbmNlKAorICBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY21Mb2NhbEdlbmVyYXRvciBjb25zdCogbGcpIGNvbnN0Cit7CiAgIFRhcmdldE9yU3RyaW5nIHJlc29sdmVkOwogCi0gIGlmIChjbUdlbmVyYXRvclRhcmdldCogdGd0ID0gbGctPkZpbmRHZW5lcmF0b3JUYXJnZXRUb1VzZSgqbG9va3VwTmFtZSkpIHsKKyAgaWYgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0Z3QgPSBsZy0+RmluZEdlbmVyYXRvclRhcmdldFRvVXNlKG5hbWUpKSB7CiAgICAgcmVzb2x2ZWQuVGFyZ2V0ID0gdGd0OwotICB9IGVsc2UgaWYgKGxvb2t1cE5hbWUgPT0gJnBsYWluTmFtZSkgewotICAgIHJlc29sdmVkLlN0cmluZyA9IHN0ZDo6bW92ZShwbGFpbk5hbWUpOwogICB9IGVsc2UgewogICAgIHJlc29sdmVkLlN0cmluZyA9IG5hbWU7CiAgIH0KQEAgLTY1OTQsMTAgKzcyOTYsMzAgQEAKIGNtTGlua0l0ZW0gY21HZW5lcmF0b3JUYXJnZXQ6OlJlc29sdmVMaW5rSXRlbSgKICAgc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0KSBjb25zdAogewotICBUYXJnZXRPclN0cmluZyByZXNvbHZlZCA9IHRoaXMtPlJlc29sdmVUYXJnZXRSZWZlcmVuY2UobmFtZSk7CisgIHJldHVybiB0aGlzLT5SZXNvbHZlTGlua0l0ZW0obmFtZSwgYnQsIHRoaXMtPkxvY2FsR2VuZXJhdG9yKTsKK30KKworY21MaW5rSXRlbSBjbUdlbmVyYXRvclRhcmdldDo6UmVzb2x2ZUxpbmtJdGVtKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqIGxnKSBjb25zdAoreworICBUYXJnZXRPclN0cmluZyByZXNvbHZlZCA9IHRoaXMtPlJlc29sdmVUYXJnZXRSZWZlcmVuY2UobmFtZSwgbGcpOwogCiAgIGlmICghcmVzb2x2ZWQuVGFyZ2V0KSB7Ci0gICAgcmV0dXJuIGNtTGlua0l0ZW0ocmVzb2x2ZWQuU3RyaW5nLCBidCk7CisgICAgcmV0dXJuIGNtTGlua0l0ZW0ocmVzb2x2ZWQuU3RyaW5nLCBmYWxzZSwgYnQpOworICB9CisKKyAgLy8gQ2hlY2sgZGVwcmVjYXRpb24sIGlzc3VlIG1lc3NhZ2Ugd2l0aCBgYnRgIGJhY2t0cmFjZS4KKyAgaWYgKHJlc29sdmVkLlRhcmdldC0+SXNEZXByZWNhdGVkKCkpIHsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gdzsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgdyA8PAorICAgICAgIlRoZSBsaWJyYXJ5IHRoYXQgaXMgYmVpbmcgbGlua2VkIHRvLCAiICA8PCByZXNvbHZlZC5UYXJnZXQtPkdldE5hbWUoKSA8PAorICAgICAgIiwgaXMgbWFya2VkIGFzIGJlaW5nIGRlcHJlY2F0ZWQgYnkgdGhlIG93bmVyLiAgVGhlIG1lc3NhZ2UgcHJvdmlkZWQgYnkgIgorICAgICAgInRoZSBkZXZlbG9wZXIgaXM6IFxuIiA8PCByZXNvbHZlZC5UYXJnZXQtPkdldERlcHJlY2F0aW9uKCkgPDwgIlxuIjsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsIHcuc3RyKCksIGJ0KTsKICAgfQogCiAgIC8vIFNraXAgdGFyZ2V0cyB0aGF0IHdpbGwgbm90IHJlYWxseSBiZSBsaW5rZWQuICBUaGlzIGlzIHByb2JhYmx5IGEKQEAgLTY2MDUsMTAgKzczMjcsMTAgQEAKICAgLy8gd2l0aGluIHRoZSBwcm9qZWN0LgogICBpZiAocmVzb2x2ZWQuVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFICYmCiAgICAgICAhcmVzb2x2ZWQuVGFyZ2V0LT5Jc0V4ZWN1dGFibGVXaXRoRXhwb3J0cygpKSB7Ci0gICAgcmV0dXJuIGNtTGlua0l0ZW0ocmVzb2x2ZWQuVGFyZ2V0LT5HZXROYW1lKCksIGJ0KTsKKyAgICByZXR1cm4gY21MaW5rSXRlbShyZXNvbHZlZC5UYXJnZXQtPkdldE5hbWUoKSwgZmFsc2UsIGJ0KTsKICAgfQogCi0gIHJldHVybiBjbUxpbmtJdGVtKHJlc29sdmVkLlRhcmdldCwgYnQpOworICByZXR1cm4gY21MaW5rSXRlbShyZXNvbHZlZC5UYXJnZXQsIGZhbHNlLCBidCk7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtR2VuZXJhdG9yVGFyZ2V0OjpHZXRQREJEaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKQEAgLTY3NTQsOCArNzQ3Niw4IEBACiAgIH0KIAogICAvLyBDaGVjayBmb3IgZXhwbGljaXRseSBzZXQgY2xyIHRhcmdldCBwcm9wZXJ0eS4KLSAgaWYgKGF1dG8qIGNsciA9IHRoaXMtPkdldFByb3BlcnR5KCJDT01NT05fTEFOR1VBR0VfUlVOVElNRSIpKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkNoZWNrTWFuYWdlZFR5cGUoY2xyKTsKKyAgaWYgKGNtUHJvcCBjbHIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQ09NTU9OX0xBTkdVQUdFX1JVTlRJTUUiKSkgeworICAgIHJldHVybiB0aGlzLT5DaGVja01hbmFnZWRUeXBlKCpjbHIpOwogICB9CiAKICAgLy8gQyMgdGFyZ2V0cyBhcmUgYWx3YXlzIG1hbmFnZWQuIFRoaXMgbGFuZ3VhZ2Ugc3BlY2lmaWMgY2hlY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdlbmVyYXRvclRhcmdldC5oIGIvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmgKaW5kZXggNDkzZWFmYy4uNGEwM2Y2NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmgKKysrIGIvU291cmNlL2NtR2VuZXJhdG9yVGFyZ2V0LmgKQEAgLTcsNiArNyw3IEBACiAKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgpAQCAtMTcsNiArMTgsNyBAQAogI2luY2x1ZGUgImNtTGlua0l0ZW0uaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogCiBjbGFzcyBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb247CkBAIC00Myw5ICs0NSwxMSBAQAogCiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBHZXRHbG9iYWxHZW5lcmF0b3IoKSBjb25zdDsKIAorICBib29sIElzSW5CdWlsZFN5c3RlbSgpIGNvbnN0OwogICBib29sIElzSW1wb3J0ZWQoKSBjb25zdDsKICAgYm9vbCBJc0ltcG9ydGVkR2xvYmFsbHlWaXNpYmxlKCkgY29uc3Q7Ci0gIGNvbnN0IGNoYXIqIEdldExvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworICBib29sIENhbkNvbXBpbGVTb3VyY2VzKCkgY29uc3Q7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRMb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICBzdGQ6OnZlY3RvcjxjbUN1c3RvbUNvbW1hbmQ+IGNvbnN0JiBHZXRQcmVCdWlsZENvbW1hbmRzKCkgY29uc3Q7CiAgIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gY29uc3QmIEdldFByZUxpbmtDb21tYW5kcygpIGNvbnN0OwpAQCAtNjQsNyArNjgsNyBAQAogICAvKiogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFyZ2V0IGluIHRoZSBidWlsZCB0cmVlIHdpdGggYSBwbGFjZWhvbGRlcgogICAgICAgcmVmZXJlbmNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIG5hdGl2ZSBidWlsZCBzeXN0ZW0uICBUaGlzCiAgICAgICBsb2NhdGlvbiBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBMT0NBVElPTiB0YXJnZXQgcHJvcGVydHkuICAqLwotICBjb25zdCBjaGFyKiBHZXRMb2NhdGlvbkZvckJ1aWxkKCkgY29uc3Q7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRMb2NhdGlvbkZvckJ1aWxkKCkgY29uc3Q7CiAKICAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBHZXRMaW5rSW5mb3JtYXRpb24oCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CkBAIC03NSw5ICs3OSw5IEBACiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldFByb3BlcnR5S2V5cygpIGNvbnN0OwogICAvLyEgTWlnaHQgcmV0dXJuIGEgbnVsbHB0ciBpZiB0aGUgcHJvcGVydHkgaXMgbm90IHNldCBvciBpbnZhbGlkCi0gIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKKyAgY21Qcm9wIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKICAgLy8hIEFsd2F5cyByZXR1cm5zIGEgdmFsaWQgcG9pbnRlcgotICBjb25zdCBjaGFyKiBHZXRTYWZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OworICBzdGQ6OnN0cmluZyBjb25zdCYgR2V0U2FmZVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wKSBjb25zdDsKICAgYm9vbCBHZXRQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CiAgIHZvaWQgR2V0U291cmNlRmlsZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4mIGZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwpAQCAtMTE0LDkgKzExOCw2IEBACiAgIHN0cnVjdCBLaW5kZWRTb3VyY2VzCiAgIHsKICAgICBzdGQ6OnZlY3RvcjxTb3VyY2VBbmRLaW5kPiBTb3VyY2VzOwotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBFeHBlY3RlZFJlc3hIZWFkZXJzOwotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBFeHBlY3RlZFhhbWxIZWFkZXJzOwotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBFeHBlY3RlZFhhbWxTb3VyY2VzOwogICAgIGJvb2wgSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgfTsKIApAQCAtMTI1LDcgKzEyNiw3IEBACiAKICAgc3RydWN0IEFsbENvbmZpZ1NvdXJjZQogICB7Ci0gICAgY21Tb3VyY2VGaWxlIGNvbnN0KiBTb3VyY2U7CisgICAgY21Tb3VyY2VGaWxlKiBTb3VyY2U7CiAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OlNvdXJjZUtpbmQgS2luZDsKICAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IENvbmZpZ3M7CiAgIH07CkBAIC0xMzQsNiArMTM1LDEzIEBACiAgICAgICBwZXItc291cmNlIGNvbmZpZ3VyYXRpb25zIGFzc2lnbmVkLiAgKi8KICAgc3RkOjp2ZWN0b3I8QWxsQ29uZmlnU291cmNlPiBjb25zdCYgR2V0QWxsQ29uZmlnU291cmNlcygpIGNvbnN0OwogCisgIC8qKiBHZXQgYWxsIHNvdXJjZXMgbmVlZGVkIGZvciBhbGwgY29uZmlndXJhdGlvbnMgd2l0aCBnaXZlbiBraW5kLiAgKi8KKyAgc3RkOjp2ZWN0b3I8QWxsQ29uZmlnU291cmNlPiBHZXRBbGxDb25maWdTb3VyY2VzKFNvdXJjZUtpbmQga2luZCkgY29uc3Q7CisKKyAgLyoqIEdldCBhbGwgbGFuZ3VhZ2VzIHVzZWQgdG8gY29tcGlsZSBzb3VyY2VzIGluIGFueSBjb25maWd1cmF0aW9uLgorICAgICAgVGhpcyBleGNsdWRlcyB0aGUgbGFuZ3VhZ2VzIG9mIG9iamVjdHMgZnJvbSBvYmplY3QgbGlicmFyaWVzLiAgKi8KKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IEdldEFsbENvbmZpZ0NvbXBpbGVMYW5ndWFnZXMoKSBjb25zdDsKKwogICB2b2lkIEdldE9iamVjdFNvdXJjZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRPYmplY3ROYW1lKGNtU291cmNlRmlsZSBjb25zdCogZmlsZSk7CkBAIC0xNDIsMTAgKzE1MCwxOCBAQAogICBib29sIEhhc0V4cGxpY2l0T2JqZWN0TmFtZShjbVNvdXJjZUZpbGUgY29uc3QqIGZpbGUpIGNvbnN0OwogICB2b2lkIEFkZEV4cGxpY2l0T2JqZWN0TmFtZShjbVNvdXJjZUZpbGUgY29uc3QqIHNmKTsKIAorICBCVHM8c3RkOjpzdHJpbmc+IGNvbnN0KiBHZXRMYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkoCisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0OworCisgIGNtUHJvcCBHZXRMYW5ndWFnZVN0YW5kYXJkKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKSBjb25zdDsKKworICBjbVByb3AgR2V0TGFuZ3VhZ2VFeHRlbnNpb25zKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKKworICBib29sIEdldExhbmd1YWdlU3RhbmRhcmRSZXF1aXJlZChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3Q7CisKICAgdm9pZCBHZXRNb2R1bGVEZWZpbml0aW9uU291cmNlcyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7Ci0gIHZvaWQgR2V0UmVzeFNvdXJjZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogICB2b2lkIEdldEV4dGVybmFsT2JqZWN0cyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogICB2b2lkIEdldEhlYWRlclNvdXJjZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mLApAQCAtMTU0LDI3ICsxNzAsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAgIHZvaWQgR2V0Q3VzdG9tQ29tbWFuZHMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwotICB2b2lkIEdldEV4cGVjdGVkUmVzeEhlYWRlcnMoc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwotICB2b2lkIEdldEFwcE1hbmlmZXN0KHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+JiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKICAgdm9pZCBHZXRNYW5pZmVzdHMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKLSAgdm9pZCBHZXRDZXJ0aWZpY2F0ZXMoc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4mLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKLSAgdm9pZCBHZXRYYW1sU291cmNlcyhzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiYsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7Ci0gIHZvaWQgR2V0RXhwZWN0ZWRYYW1sSGVhZGVycyhzdGQ6OnNldDxzdGQ6OnN0cmluZz4mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7Ci0gIHZvaWQgR2V0RXhwZWN0ZWRYYW1sU291cmNlcyhzdGQ6OnNldDxzdGQ6OnN0cmluZz4mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKICAgc3RkOjpzZXQ8Y21MaW5rSXRlbT4gY29uc3QmIEdldFV0aWxpdHlJdGVtcygpIGNvbnN0OwogCiAgIHZvaWQgQ29tcHV0ZU9iamVjdE1hcHBpbmcoKTsKIAotICBjb25zdCBjaGFyKiBHZXRGZWF0dXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworICBjbVByb3AgR2V0RmVhdHVyZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKICAgY29uc3QgY2hhciogR2V0TGlua1BJRVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCkBAIC0xOTksNiArMjAzLDI0IEBACiAgIGNvbnN0IGNoYXIqIEdldExpbmtJbnRlcmZhY2VEZXBlbmRlbnROdW1iZXJNYXhQcm9wZXJ0eSgKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKKyAgY2xhc3MgRGV2aWNlTGlua1NldHRlcgorICB7CisgIHB1YmxpYzoKKyAgICBEZXZpY2VMaW5rU2V0dGVyKGNtR2VuZXJhdG9yVGFyZ2V0JiB0YXJnZXQpCisgICAgICA6IFRhcmdldCh0YXJnZXQpCisgICAgeworICAgICAgdGhpcy0+UHJldmlvdXNTdGF0ZSA9IHRhcmdldC5TZXREZXZpY2VMaW5rKHRydWUpOworICAgIH0KKyAgICB+RGV2aWNlTGlua1NldHRlcigpIHsgdGhpcy0+VGFyZ2V0LlNldERldmljZUxpbmsodGhpcy0+UHJldmlvdXNTdGF0ZSk7IH07CisKKyAgcHJpdmF0ZToKKyAgICBjbUdlbmVyYXRvclRhcmdldCYgVGFyZ2V0OworICAgIGJvb2wgUHJldmlvdXNTdGF0ZTsKKyAgfTsKKworICBib29sIFNldERldmljZUxpbmsoYm9vbCBkZXZpY2VMaW5rKTsKKyAgYm9vbCBJc0RldmljZUxpbmsoKSBjb25zdCB7IHJldHVybiB0aGlzLT5EZXZpY2VMaW5rOyB9CisKICAgY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBHZXRMaW5rSW50ZXJmYWNlKAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBoZWFkVGFyZ2V0KSBjb25zdDsKICAgdm9pZCBDb21wdXRlTGlua0ludGVyZmFjZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLApAQCAtMjIwLDcgKzI0Miw3IEBACiAgIC8qKiBHZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaW4gaXRzCiAgICAgICBtYWtlZmlsZSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gdHlwZS4gICovCiAgIHN0ZDo6c3RyaW5nIEdldEZ1bGxQYXRoKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgPSAiIiwKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgIGNtU3RhdGVFbnVtczo6QXJ0aWZhY3RUeXBlIGFydGlmYWN0ID0gY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QsCiAgICAgYm9vbCByZWFsbmFtZSA9IGZhbHNlKSBjb25zdDsKICAgc3RkOjpzdHJpbmcgTm9ybWFsR2V0RnVsbFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKQEAgLTI0NSwxMyArMjY3LDIwIEBACiAgIHN0ZDo6c3RyaW5nIEdldEFwcEJ1bmRsZURpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVuZGxlRGlyZWN0b3J5TGV2ZWwgbGV2ZWwpIGNvbnN0OwogCisgIC8qKiBSZXR1cm4gd2hldGhlciB0aGlzIHRhcmdldCBpcyBtYXJrZWQgYXMgZGVwcmVjYXRlZCBieSB0aGUKKyAgICAgIG1haW50YWluZXIgICovCisgIGJvb2wgSXNEZXByZWNhdGVkKCkgY29uc3Q7CisKKyAgLyoqIFJldHVybnMgdGhlIGRlcHJlY2F0aW9uIG1lc3NhZ2UgcHJvdmlkZWQgYnkgdGhlIG1haW50YWluZXIgKi8KKyAgc3RkOjpzdHJpbmcgR2V0RGVwcmVjYXRpb24oKSBjb25zdDsKKwogICAvKiogUmV0dXJuIHdoZXRoZXIgdGhpcyB0YXJnZXQgaXMgYW4gZXhlY3V0YWJsZSBCdW5kbGUsIGEgZnJhbWV3b3JrCiAgICAgICBvciBDRkJ1bmRsZSBvbiBBcHBsZS4gICovCiAgIGJvb2wgSXNCdW5kbGVPbkFwcGxlKCkgY29uc3Q7CiAKICAgLyoqIEdldCB0aGUgZnVsbCBuYW1lIG9mIHRoZSB0YXJnZXQgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBpbiBpdHMKICAgICAgIG1ha2VmaWxlLiAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0RnVsbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA9ICIiLAorICBzdGQ6OnN0cmluZyBHZXRGdWxsTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkFydGlmYWN0VHlwZSBhcnRpZmFjdCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QpIGNvbnN0OwogCkBAIC0yNzQsMTEgKzMwMywxMiBAQAogCiAgIC8qKiBSZXR1cm4gdGhlIGluc3RhbGwgbmFtZSBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQgaW4gdGhlCiAgICAqIGluc3RhbGwgdHJlZS4gIEZvciBleGFtcGxlOiAiXEBycGF0aC8iIG9yICJcQGxvYWRlcl9wYXRoLyIuICovCi0gIHN0ZDo6c3RyaW5nIEdldEluc3RhbGxOYW1lRGlyRm9ySW5zdGFsbFRyZWUoKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgR2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgaW5zdGFsbFByZWZpeCkgY29uc3Q7CiAKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBHZXRCYWNrdHJhY2UoKSBjb25zdDsKIAotICBzdGQ6OnNldDxCVDxzdGQ6OnN0cmluZz4+IGNvbnN0JiBHZXRVdGlsaXRpZXMoKSBjb25zdDsKKyAgc3RkOjpzZXQ8QlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4+IGNvbnN0JiBHZXRVdGlsaXRpZXMoKSBjb25zdDsKIAogICBib29sIExpbmtMYW5ndWFnZVByb3BhZ2F0ZXNUb0RlcGVuZGVudHMoKSBjb25zdAogICB7CkBAIC0yOTMsOCArMzIzLDcgQEAKICAgc3RkOjpzdHJpbmcgR2V0U09OYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIHZvaWQgR2V0RnVsbE5hbWVDb21wb25lbnRzKHN0ZDo6c3RyaW5nJiBwcmVmaXgsIHN0ZDo6c3RyaW5nJiBiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgc3VmZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBzdWZmaXgsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6QXJ0aWZhY3RUeXBlIGFydGlmYWN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCkgY29uc3Q7CiAKQEAgLTM0NCw3ICszNzMsNiBAQAogICB9OwogCiAgIExpbmtDbG9zdXJlIGNvbnN0KiBHZXRMaW5rQ2xvc3VyZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKLSAgdm9pZCBDb21wdXRlTGlua0Nsb3N1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgTGlua0Nsb3N1cmUmIGxjKSBjb25zdDsKIAogICBjbUxpbmtJbXBsZW1lbnRhdGlvbiBjb25zdCogR2V0TGlua0ltcGxlbWVudGF0aW9uKAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwpAQCAtMzY1LDkgKzM5MywxNCBAQAogICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBUYXJnZXQgPSBudWxscHRyOwogICB9OwogICBUYXJnZXRPclN0cmluZyBSZXNvbHZlVGFyZ2V0UmVmZXJlbmNlKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKSBjb25zdDsKKyAgVGFyZ2V0T3JTdHJpbmcgUmVzb2x2ZVRhcmdldFJlZmVyZW5jZShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiBsZykgY29uc3Q7CiAKICAgY21MaW5rSXRlbSBSZXNvbHZlTGlua0l0ZW0oc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0KSBjb25zdDsKKyAgY21MaW5rSXRlbSBSZXNvbHZlTGlua0l0ZW0oc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiBsZykgY29uc3Q7CiAKICAgLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIGxhbmd1YWdlcyBjb21waWxlZCBieSB0aGUgdGFyZ2V0LiAgVGhpcyBpcwogICAvLyBjb21wdXRlZCBldmVyeSB0aW1lIGl0IGlzIGNhbGxlZCBiZWNhdXNlIHRoZSBsYW5ndWFnZXMgY2FuIGNoYW5nZQpAQCAtNDA0LDYgKzQzNyw5IEBACiAgIHZvaWQgR2V0QXBwbGVBcmNocyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhcmNoVmVjKSBjb25zdDsKIAorICB2b2lkIEFkZENVREFBcmNoaXRlY3R1cmVGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MpIGNvbnN0OworICB2b2lkIEFkZENVREFUb29sa2l0RmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzKSBjb25zdDsKKwogICBzdGQ6OnN0cmluZyBHZXRGZWF0dXJlU3BlY2lmaWNMaW5rUnVsZVZhcmlhYmxlKAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YXIsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0OwpAQCAtNDYxLDE3ICs0OTcsMjMgQEAKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpIGNvbnN0OwogCiAgIHN0ZDo6c3RyaW5nIEdldFBjaEhlYWRlcihjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoID0gc3RkOjpzdHJpbmcoKSkgY29uc3Q7CiAgIHN0ZDo6c3RyaW5nIEdldFBjaFNvdXJjZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoID0gc3RkOjpzdHJpbmcoKSkgY29uc3Q7CiAgIHN0ZDo6c3RyaW5nIEdldFBjaEZpbGVPYmplY3QoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA9IHN0ZDo6c3RyaW5nKCkpOwogICBzdGQ6OnN0cmluZyBHZXRQY2hGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKTsKLSAgc3RkOjpzdHJpbmcgR2V0UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggPSBzdGQ6OnN0cmluZygpKTsKKyAgc3RkOjpzdHJpbmcgR2V0UGNoQ3JlYXRlQ29tcGlsZU9wdGlvbnMoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoID0gc3RkOjpzdHJpbmcoKSk7CiAgIHN0ZDo6c3RyaW5nIEdldFBjaFVzZUNvbXBpbGVPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggPSBzdGQ6OnN0cmluZygpKTsKIAogICB2b2lkIEFkZFNvdXJjZUZpbGVUb1VuaXR5QmF0Y2goY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZUZpbGVuYW1lKTsKICAgYm9vbCBJc1NvdXJjZUZpbGVQYXJ0T2ZVbml0eUJhdGNoKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VGaWxlbmFtZSkgY29uc3Q7CkBAIC00ODUsNiArNTI3LDExIEBACiAKICAgYm9vbCBDb21wdXRlQ29tcGlsZUZlYXR1cmVzKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0OwogCisgIHVzaW5nIExhbmd1YWdlUGFpciA9IHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+OworICBib29sIENvbXB1dGVDb21waWxlRmVhdHVyZXMoCisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKKyAgICBzdGQ6OnNldDxMYW5ndWFnZVBhaXI+IGNvbnN0JiBsYW5ndWFnZVBhaXJzKSBjb25zdDsKKwogICAvKioKICAgICogVHJhY2UgdGhyb3VnaCB0aGUgc291cmNlIGZpbGVzIGluIHRoaXMgdGFyZ2V0IGFuZCBhZGQgYWwgc291cmNlIGZpbGVzCiAgICAqIHRoYXQgdGhleSBkZXBlbmQgb24sIHVzZWQgYnkgYWxsIGdlbmVyYXRvcnMKQEAgLTQ5NSw3ICs1NDIsNyBAQAogICAgICAgY29uZmlndXJhdGlvbiBuYW1lIGlzIGdpdmVuIHRoZW4gdGhlIGdlbmVyYXRvciB3aWxsIGFkZCBpdHMKICAgICAgIHN1YmRpcmVjdG9yeSBmb3IgdGhhdCBjb25maWd1cmF0aW9uLiAgT3RoZXJ3aXNlIGp1c3QgdGhlIGNhbm9uaWNhbAogICAgICAgb3V0cHV0IGRpcmVjdG9yeSBpcyBnaXZlbi4gICovCi0gIHN0ZDo6c3RyaW5nIEdldERpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIsCisgIHN0ZDo6c3RyaW5nIEdldERpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpBcnRpZmFjdFR5cGUgYXJ0aWZhY3QgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCkgY29uc3Q7CiAKQEAgLTUwMyw3ICs1NTAsNyBAQAogICAgICAgSWYgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBpcyBnaXZlbiB0aGVuIHRoZSBnZW5lcmF0b3Igd2lsbCBhZGQgaXRzCiAgICAgICBzdWJkaXJlY3RvcnkgZm9yIHRoYXQgY29uZmlndXJhdGlvbi4gIE90aGVyd2lzZSBqdXN0IHRoZSBjYW5vbmljYWwKICAgICAgIGNvbXBpbGVyIHBkYiBvdXRwdXQgZGlyZWN0b3J5IGlzIGdpdmVuLiAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0Q29tcGlsZVBEQkRpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRDb21waWxlUERCRGlyZWN0b3J5KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8qKiBHZXQgc291cmNlcyB0aGF0IG11c3QgYmUgYnVpbHQgYmVmb3JlIHRoZSBnaXZlbiBzb3VyY2UuICAqLwogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBjb25zdCogR2V0U291cmNlRGVwZW5kcygKQEAgLTUzMiw3ICs1NzksNyBAQAogICBzdGQ6OnN0cmluZyBHZXRQREJPdXRwdXROYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8qKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHBkYiBmaWxlIGZvciB0aGUgdGFyZ2V0LiAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0UERCTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRQREJOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8qKiBXaGV0aGVyIHRoaXMgbGlicmFyeSBoYXMgc29uYW1lIGVuYWJsZWQgYW5kIHBsYXRmb3JtIHN1cHBvcnRzIGl0LiAgKi8KICAgYm9vbCBIYXNTT05hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CkBAIC01NTAsMTAgKzU5NywxMCBAQAogICBib29sIElzTnVsbEltcGxpZWRCeUxpbmtMaWJyYXJpZXMoY29uc3Qgc3RkOjpzdHJpbmcmIHApIGNvbnN0OwogCiAgIC8qKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGNvbXBpbGVyIHBkYiBmaWxlIGZvciB0aGUgdGFyZ2V0LiAgKi8KLSAgc3RkOjpzdHJpbmcgR2V0Q29tcGlsZVBEQk5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA9ICIiKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgR2V0Q29tcGlsZVBEQk5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKICAgLyoqIEdldCB0aGUgcGF0aCBmb3IgdGhlIE1TVkMgL0ZkIG9wdGlvbiBmb3IgdGhpcyB0YXJnZXQuICAqLwotICBzdGQ6OnN0cmluZyBHZXRDb21waWxlUERCUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnID0gIiIpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRDb21waWxlUERCUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICAvLyBHZXQgdGhlIHRhcmdldCBiYXNlIG5hbWUuCiAgIHN0ZDo6c3RyaW5nIEdldE91dHB1dE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKQEAgLTU3MSw2ICs2MTgsOSBAQAogICAvKiogR2V0IHRhcmdldCBmaWxlIHBvc3RmaXggKi8KICAgc3RkOjpzdHJpbmcgR2V0RmlsZVBvc3RmaXgoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKKyAgLyoqIEdldCBmcmFtZXdvcmsgbXVsdGktY29uZmlnLXNwZWNpZmljIHBvc3RmaXggKi8KKyAgc3RkOjpzdHJpbmcgR2V0RnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworCiAgIC8qKiBDbGVhcnMgY2FjaGVkIG1ldGEgZGF0YSBmb3IgbG9jYWwgYW5kIGV4dGVybmFsIHNvdXJjZSBmaWxlcy4KICAgICogVGhlIG1ldGEgZGF0YSB3aWxsIGJlIHJlY29tcHV0ZWQgb24gZGVtYW5kLgogICAgKi8KQEAgLTcwMSw3ICs3NTEsOCBAQAogCiAgIHN0ZDo6c3RyaW5nIEV2YWx1YXRlSW50ZXJmYWNlUHJvcGVydHkoCiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlclBhcmVudCkgY29uc3Q7CisgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uREFHQ2hlY2tlciogZGFnQ2hlY2tlclBhcmVudCwKKyAgICBib29sIHVzYWdlX3JlcXVpcmVtZW50c19vbmx5ID0gdHJ1ZSkgY29uc3Q7CiAKICAgYm9vbCBIYXZlSW5zdGFsbFRyZWVSUEFUSChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIApAQCAtNzM2LDE0ICs3ODcsMjUgQEAKICAgdm9pZCBHZXRUYXJnZXRWZXJzaW9uKGludCYgbWFqb3IsIGludCYgbWlub3IpIGNvbnN0OwogCiAgIC8qKiBHZXQgdGhlIHRhcmdldCBtYWpvciwgbWlub3IsIGFuZCBwYXRjaCB2ZXJzaW9uIG51bWJlcnMKLSAgICAgIGludGVycHJldGVkIGZyb20gdGhlIFZFUlNJT04gb3IgU09WRVJTSU9OIHByb3BlcnR5LiAgVmVyc2lvbiAwCisgICAgICBpbnRlcnByZXRlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS4gIFZlcnNpb24gMAogICAgICAgaXMgcmV0dXJuZWQgaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXQgb3IgY2Fubm90IGJlIHBhcnNlZC4gICovCi0gIHZvaWQgR2V0VGFyZ2V0VmVyc2lvbihib29sIHNvdmVyc2lvbiwgaW50JiBtYWpvciwgaW50JiBtaW5vciwKKyAgdm9pZCBHZXRUYXJnZXRWZXJzaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eSwgaW50JiBtYWpvciwgaW50JiBtaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgcGF0Y2gpIGNvbnN0OwogCisgIC8qKiBHZXQgdGhlIHRhcmdldCBtYWpvciwgbWlub3IsIGFuZCBwYXRjaCB2ZXJzaW9uIG51bWJlcnMKKyAgICAgIGludGVycHJldGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5IGFuZCBpZiBlbXB0eSB1c2UgdGhlCisgICAgICBmYWxsYmFjayBwcm9wZXJ0eS4gIFZlcnNpb24gMCBpcyByZXR1cm5lZCBpZiB0aGUgcHJvcGVydHkgaXMKKyAgICAgIG5vdCBzZXQgb3IgY2Fubm90IGJlIHBhcnNlZC4gICovCisgIHZvaWQgR2V0VGFyZ2V0VmVyc2lvbkZhbGxiYWNrKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZhbGxiYWNrX3Byb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1ham9yLCBpbnQmIG1pbm9yLCBpbnQmIHBhdGNoKSBjb25zdDsKKworICBzdGQ6OnN0cmluZyBHZXRSdW50aW1lTGlua0xpYnJhcnkoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKSBjb25zdDsKKwogICBzdGQ6OnN0cmluZyBHZXRGb3J0cmFuTW9kdWxlRGlyZWN0b3J5KHN0ZDo6c3RyaW5nIGNvbnN0JiB3b3JraW5nX2RpcikgY29uc3Q7CiAKLSAgY29uc3QgY2hhciogR2V0U291cmNlc1Byb3BlcnR5KCkgY29uc3Q7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRTb3VyY2VzUHJvcGVydHkoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgdm9pZCBBZGRTb3VyY2VDb21tb24oY29uc3Qgc3RkOjpzdHJpbmcmIHNyYywgYm9vbCBiZWZvcmUgPSBmYWxzZSk7CkBAIC03NjAsNiArODIyLDcgQEAKICAgfTsKICAgdXNpbmcgU291cmNlRW50cmllc1R5cGUgPSBzdGQ6Om1hcDxjbVNvdXJjZUZpbGUgY29uc3QqLCBTb3VyY2VFbnRyeT47CiAgIFNvdXJjZUVudHJpZXNUeXBlIFNvdXJjZURlcGVuZHM7CisgIG11dGFibGUgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IFZpc2l0ZWRDb25maWdzRm9yT2JqZWN0czsKICAgbXV0YWJsZSBzdGQ6Om1hcDxjbVNvdXJjZUZpbGUgY29uc3QqLCBzdGQ6OnN0cmluZz4gT2JqZWN0czsKICAgc3RkOjpzZXQ8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gRXhwbGljaXRPYmplY3ROYW1lOwogICBtdXRhYmxlIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IFN5c3RlbUluY2x1ZGVzQ2FjaGU7CkBAIC03ODgsOCArODUxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgb3V0UHJlZml4LCBzdGQ6OnN0cmluZyYgb3V0QmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBvdXRTdWZmaXgpIGNvbnN0OwogCisgIG11dGFibGUgc3RkOjpzdHJpbmcgTGlua2VyTGFuZ3VhZ2U7CiAgIHVzaW5nIExpbmtDbG9zdXJlTWFwVHlwZSA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBMaW5rQ2xvc3VyZT47CiAgIG11dGFibGUgTGlua0Nsb3N1cmVNYXBUeXBlIExpbmtDbG9zdXJlTWFwOworICBib29sIERldmljZUxpbmsgPSBmYWxzZTsKIAogICAvLyBSZXR1cm5zIEFSQ0hJVkUsIExJQlJBUlksIG9yIFJVTlRJTUUgYmFzZWQgb24gcGxhdGZvcm0gYW5kIHR5cGUuCiAgIGNvbnN0IGNoYXIqIEdldE91dHB1dFRhcmdldFR5cGUoY21TdGF0ZUVudW1zOjpBcnRpZmFjdFR5cGUgYXJ0aWZhY3QpIGNvbnN0OwpAQCAtODE2LDEyICs4ODEsMTYgQEAKICAgbXV0YWJsZSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgQ29tcGF0aWJsZUludGVyZmFjZXM+IENvbXBhdGlibGVJbnRlcmZhY2VzTWFwOwogCiAgIHVzaW5nIGNtVGFyZ2V0TGlua0luZm9ybWF0aW9uTWFwID0KLSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKj47CisgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24+PjsKICAgbXV0YWJsZSBjbVRhcmdldExpbmtJbmZvcm1hdGlvbk1hcCBMaW5rSW5mb3JtYXRpb247CiAKLSAgdm9pZCBDaGVja1Byb3BlcnR5Q29tcGF0aWJpbGl0eShjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIGluZm8sCisgIHZvaWQgQ2hlY2tQcm9wZXJ0eUNvbXBhdGliaWxpdHkoY21Db21wdXRlTGlua0luZm9ybWF0aW9uJiBpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCisgIHZvaWQgQ29tcHV0ZUxpbmtDbG9zdXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIExpbmtDbG9zdXJlJiBsYykgY29uc3Q7CisgIGJvb2wgQ29tcHV0ZUxpbmtDbG9zdXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIExpbmtDbG9zdXJlJiBsYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWNvbmRQYXNzKSBjb25zdDsKKwogICBzdHJ1Y3QgTGlua0ltcGxDbG9zdXJlIDogcHVibGljIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0Kj4KICAgewogICAgIGJvb2wgRG9uZSA9IGZhbHNlOwpAQCAtODQwLDYgKzkwOSwxNyBAQAogICBzdGQ6OnN0cmluZyBHZXRMaW5rSW50ZXJmYWNlRGVwZW5kZW50U3RyaW5nQXNCb29sUHJvcGVydHkoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHAsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCisgIGZyaWVuZCBjbGFzcyBjbVRhcmdldENvbGxlY3RMaW5rTGFuZ3VhZ2VzOworICBjbUxpbmtJbnRlcmZhY2UgY29uc3QqIEdldExpbmtJbnRlcmZhY2UoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBoZWFkVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWNvbmRQYXNzKSBjb25zdDsKKyAgdm9pZCBDb21wdXRlTGlua0ludGVyZmFjZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3B0aW9uYWxMaW5rSW50ZXJmYWNlJiBpZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUdlbmVyYXRvclRhcmdldCogaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlY29uZFBhc3MpIGNvbnN0OworICBjbUxpbmtJbXBsZW1lbnRhdGlvbiBjb25zdCogR2V0TGlua0ltcGxlbWVudGF0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWNvbmRQYXNzKSBjb25zdDsKKwogICAvLyBDYWNoZSBpbXBvcnQgaW5mb3JtYXRpb24gZnJvbSBwcm9wZXJ0aWVzIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24uCiAgIHN0cnVjdCBJbXBvcnRJbmZvCiAgIHsKQEAgLTg2Niw5ICs5NDYsMTAgQEAKICAgICAgIHRoZSBsaW5rIGRlcGVuZGVuY2llcyBvZiB0aGlzIHRhcmdldC4gICovCiAgIHN0ZDo6c3RyaW5nIENoZWNrQ01QMDAwNChzdGQ6OnN0cmluZyBjb25zdCYgaXRlbSkgY29uc3Q7CiAKLSAgY21MaW5rSW50ZXJmYWNlIGNvbnN0KiBHZXRJbXBvcnRMaW5rSW50ZXJmYWNlKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBoZWFkLAotICAgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpIGNvbnN0OworICBjbUxpbmtJbnRlcmZhY2UgY29uc3QqIEdldEltcG9ydExpbmtJbnRlcmZhY2UoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiBoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2FnZV9yZXF1aXJlbWVudHNfb25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Vjb25kUGFzcyA9IGZhbHNlKSBjb25zdDsKIAogICB1c2luZyBLaW5kZWRTb3VyY2VzTWFwVHlwZSA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBLaW5kZWRTb3VyY2VzPjsKICAgbXV0YWJsZSBLaW5kZWRTb3VyY2VzTWFwVHlwZSBLaW5kZWRTb3VyY2VzTWFwOwpAQCAtODgwLDE2ICs5NjEsMjAgQEAKIAogICBtdXRhYmxlIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gTWF5YmVJbnRlcmZhY2VQcm9wZXJ0eUV4aXN0czsKICAgYm9vbCBNYXliZUhhdmVJbnRlcmZhY2VQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0KiBjb250ZXh0KSBjb25zdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHkpIGNvbnN0OwogCi0gIHN0ZDo6dmVjdG9yPFRhcmdldFByb3BlcnR5RW50cnkqPiBJbmNsdWRlRGlyZWN0b3JpZXNFbnRyaWVzOwotICBzdGQ6OnZlY3RvcjxUYXJnZXRQcm9wZXJ0eUVudHJ5Kj4gQ29tcGlsZU9wdGlvbnNFbnRyaWVzOwotICBzdGQ6OnZlY3RvcjxUYXJnZXRQcm9wZXJ0eUVudHJ5Kj4gQ29tcGlsZUZlYXR1cmVzRW50cmllczsKLSAgc3RkOjp2ZWN0b3I8VGFyZ2V0UHJvcGVydHlFbnRyeSo+IENvbXBpbGVEZWZpbml0aW9uc0VudHJpZXM7Ci0gIHN0ZDo6dmVjdG9yPFRhcmdldFByb3BlcnR5RW50cnkqPiBMaW5rT3B0aW9uc0VudHJpZXM7Ci0gIHN0ZDo6dmVjdG9yPFRhcmdldFByb3BlcnR5RW50cnkqPiBMaW5rRGlyZWN0b3JpZXNFbnRyaWVzOwotICBzdGQ6OnZlY3RvcjxUYXJnZXRQcm9wZXJ0eUVudHJ5Kj4gUHJlY29tcGlsZUhlYWRlcnNFbnRyaWVzOwotICBzdGQ6OnZlY3RvcjxUYXJnZXRQcm9wZXJ0eUVudHJ5Kj4gU291cmNlRW50cmllczsKKyAgdXNpbmcgVGFyZ2V0UHJvcGVydHlFbnRyeVZlY3RvciA9CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRhcmdldFByb3BlcnR5RW50cnk+PjsKKworICBUYXJnZXRQcm9wZXJ0eUVudHJ5VmVjdG9yIEluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXM7CisgIFRhcmdldFByb3BlcnR5RW50cnlWZWN0b3IgQ29tcGlsZU9wdGlvbnNFbnRyaWVzOworICBUYXJnZXRQcm9wZXJ0eUVudHJ5VmVjdG9yIENvbXBpbGVGZWF0dXJlc0VudHJpZXM7CisgIFRhcmdldFByb3BlcnR5RW50cnlWZWN0b3IgQ29tcGlsZURlZmluaXRpb25zRW50cmllczsKKyAgVGFyZ2V0UHJvcGVydHlFbnRyeVZlY3RvciBMaW5rT3B0aW9uc0VudHJpZXM7CisgIFRhcmdldFByb3BlcnR5RW50cnlWZWN0b3IgTGlua0RpcmVjdG9yaWVzRW50cmllczsKKyAgVGFyZ2V0UHJvcGVydHlFbnRyeVZlY3RvciBQcmVjb21waWxlSGVhZGVyc0VudHJpZXM7CisgIFRhcmdldFByb3BlcnR5RW50cnlWZWN0b3IgU291cmNlRW50cmllczsKICAgbXV0YWJsZSBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gTGlua0ltcGxpY2l0TnVsbFByb3BlcnRpZXM7CiAgIG11dGFibGUgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBQY2hIZWFkZXJzOwogICBtdXRhYmxlIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gUGNoU291cmNlczsKQEAgLTkwMCwxMiArOTg1LDE3IEBACiAKICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiBVbml0eUJhdGNoZWRTb3VyY2VGaWxlczsKIAorICBib29sIElzTGlua0xvb2t1cFNjb3BlKHN0ZDo6c3RyaW5nIGNvbnN0JiBuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqJiBsZykgY29uc3Q7CisKICAgdm9pZCBFeHBhbmRMaW5rSXRlbXMoc3RkOjpzdHJpbmcgY29uc3QmIHByb3AsIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIGhlYWRUYXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNhZ2VfcmVxdWlyZW1lbnRzX29ubHksCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtTGlua0l0ZW0+JiBpdGVtcywKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaGFkSGVhZFNlbnNpdGl2ZUNvbmRpdGlvbikgY29uc3Q7CisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGhhZENvbnRleHRTZW5zaXRpdmVDb25kaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbikgY29uc3Q7CiAgIHZvaWQgTG9va3VwTGlua0l0ZW1zKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0LAogICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiYgaXRlbXMpIGNvbnN0OwpAQCAtOTY1LDYgKzEwNTUsMTEgQEAKICAgYm9vbCBHZXRSUEFUSChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcnBhdGgpIGNvbnN0OwogCisgIG11dGFibGUgc3RkOjptYXA8c3RkOjpzdHJpbmcsIEJUczxzdGQ6OnN0cmluZz4+IExhbmd1YWdlU3RhbmRhcmRNYXA7CisKKyAgY21Qcm9wIEdldFByb3BlcnR5V2l0aFBhaXJlZExhbmd1YWdlU3VwcG9ydChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdWZmaXgpIGNvbnN0OworCiBwdWJsaWM6CiAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIEdldExpbmtJbXBsZW1lbnRhdGlvbkNsb3N1cmUoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZXRDTWFrZVByb3BlcnR5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21HZXRDTWFrZVByb3BlcnR5Q29tbWFuZC5jeHgKaW5kZXggZmY0ZTMxMi4uNzljYmU0NCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0Q01ha2VQcm9wZXJ0eUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUdldENNYWtlUHJvcGVydHlDb21tYW5kLmN4eApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAKQEAgLTIzLDI1ICsyNCwyNSBAQAogICBzdGQ6OnN0cmluZyBvdXRwdXQgPSAiTk9URk9VTkQiOwogCiAgIGlmIChhcmdzWzFdID09ICJWQVJJQUJMRVMiKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIHZhcnNQcm9wID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0UHJvcGVydHkoIlZBUklBQkxFUyIpKSB7Ci0gICAgICBvdXRwdXQgPSB2YXJzUHJvcDsKKyAgICBpZiAoY21Qcm9wIHZhcnNQcm9wID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0UHJvcGVydHkoIlZBUklBQkxFUyIpKSB7CisgICAgICBvdXRwdXQgPSAqdmFyc1Byb3A7CiAgICAgfQogICB9IGVsc2UgaWYgKGFyZ3NbMV0gPT0gIk1BQ1JPUyIpIHsKICAgICBvdXRwdXQuY2xlYXIoKTsKLSAgICBpZiAoY29uc3QgY2hhciogbWFjcm9zUHJvcCA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFByb3BlcnR5KCJNQUNST1MiKSkgewotICAgICAgb3V0cHV0ID0gbWFjcm9zUHJvcDsKKyAgICBpZiAoY21Qcm9wIG1hY3Jvc1Byb3AgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRQcm9wZXJ0eSgiTUFDUk9TIikpIHsKKyAgICAgIG91dHB1dCA9ICptYWNyb3NQcm9wOwogICAgIH0KICAgfSBlbHNlIGlmIChhcmdzWzFdID09ICJDT01QT05FTlRTIikgewogICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiogY29tcG9uZW50cyA9CiAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0SW5zdGFsbENvbXBvbmVudHMoKTsKICAgICBvdXRwdXQgPSBjbUpvaW4oKmNvbXBvbmVudHMsICI7Iik7CiAgIH0gZWxzZSB7Ci0gICAgY29uc3QgY2hhciogcHJvcCA9IG51bGxwdHI7CisgICAgY21Qcm9wIHByb3AgPSBudWxscHRyOwogICAgIGlmICghYXJnc1sxXS5lbXB0eSgpKSB7CiAgICAgICBwcm9wID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoYXJnc1sxXSk7CiAgICAgfQogICAgIGlmIChwcm9wKSB7Ci0gICAgICBvdXRwdXQgPSBwcm9wOworICAgICAgb3V0cHV0ID0gKnByb3A7CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdldERpcmVjdG9yeVByb3BlcnR5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21HZXREaXJlY3RvcnlQcm9wZXJ0eUNvbW1hbmQuY3h4CmluZGV4IDY0NDM4ZDUuLmZhNGE0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdldERpcmVjdG9yeVByb3BlcnR5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtR2V0RGlyZWN0b3J5UHJvcGVydHlDb21tYW5kLmN4eApAQCAtNyw3ICs3LDcgQEAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKLSNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCiBuYW1lc3BhY2UgewpAQCAtMzcsMTQgKzM3LDggQEAKICAgICAgICAgIkRJUkVDVE9SWSBhcmd1bWVudCBwcm92aWRlZCB3aXRob3V0IHN1YnNlcXVlbnQgYXJndW1lbnRzIik7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHN0ZDo6c3RyaW5nIHNkID0gKmk7Ci0gICAgLy8gbWFrZSBzdXJlIHRoZSBzdGFydCBkaXIgaXMgYSBmdWxsIHBhdGgKLSAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHNkKSkgewotICAgICAgc2QgPSBjbVN0ckNhdChzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksICcvJywgKmkpOwotICAgIH0KLQotICAgIC8vIFRoZSBsb2NhbCBnZW5lcmF0b3JzIGFyZSBhc3NvY2lhdGVkIHdpdGggY29sbGFwc2VkIHBhdGhzLgotICAgIHNkID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChzZCk7CisgICAgc3RkOjpzdHJpbmcgc2QgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgKmksIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSk7CiAKICAgICAvLyBsb29rdXAgdGhlIG1ha2VmaWxlIGZyb20gdGhlIGRpcmVjdG9yeSBuYW1lCiAgICAgZGlyID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0R2xvYmFsR2VuZXJhdG9yKCktPkZpbmRNYWtlZmlsZShzZCk7CkBAIC05Miw3ICs4Niw5IEBACiAgICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQotICAgIHByb3AgPSBkaXItPkdldFByb3BlcnR5KCppKTsKKyAgICBpZiAoY21Qcm9wIHAgPSBkaXItPkdldFByb3BlcnR5KCppKSkgeworICAgICAgcHJvcCA9IHAtPmNfc3RyKCk7CisgICAgfQogICB9CiAgIFN0b3JlUmVzdWx0KHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwgcHJvcCk7CiAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2V0RmlsZW5hbWVDb21wb25lbnRDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUdldEZpbGVuYW1lQ29tcG9uZW50Q29tbWFuZC5jeHgKaW5kZXggN2Q5MWE3NS4uMzhiZmZiZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0RmlsZW5hbWVDb21wb25lbnRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21HZXRGaWxlbmFtZUNvbXBvbmVudENvbW1hbmQuY3h4CkBAIC0xNCw2ICsxNCw3IEBACiB7CiAgIGlmIChhcmdzLnNpemUoKSA8IDMpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIApAQCAtMTE0LDE3ICsxMTUsMTggQEAKICAgfSBlbHNlIHsKICAgICBzdGQ6OnN0cmluZyBlcnIgPSAidW5rbm93biBjb21wb25lbnQgIiArIGFyZ3NbMl07CiAgICAgc3RhdHVzLlNldEVycm9yKGVycik7CisgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBpZiAoYXJncy5zaXplKCkgPj0gNCAmJiBhcmdzLmJhY2soKSA9PSAiQ0FDSEUiKSB7CiAgICAgaWYgKCFwcm9ncmFtQXJncy5lbXB0eSgpICYmICFzdG9yZUFyZ3MuZW1wdHkoKSkgewogICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKAotICAgICAgICBzdG9yZUFyZ3MsIHByb2dyYW1BcmdzLmNfc3RyKCksICIiLAorICAgICAgICBzdG9yZUFyZ3MsIHByb2dyYW1BcmdzLCAiIiwKICAgICAgICAgYXJnc1syXSA9PSAiUEFUSCIgPyBjbVN0YXRlRW51bXM6OkZJTEVQQVRIIDogY21TdGF0ZUVudW1zOjpTVFJJTkcpOwogICAgIH0KICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRDYWNoZURlZmluaXRpb24oCi0gICAgICBhcmdzLmZyb250KCksIHJlc3VsdC5jX3N0cigpLCAiIiwKKyAgICAgIGFyZ3MuZnJvbnQoKSwgcmVzdWx0LCAiIiwKICAgICAgIGFyZ3NbMl0gPT0gIlBBVEgiID8gY21TdGF0ZUVudW1zOjpGSUxFUEFUSCA6IGNtU3RhdGVFbnVtczo6U1RSSU5HKTsKICAgfSBlbHNlIHsKICAgICBpZiAoIXByb2dyYW1BcmdzLmVtcHR5KCkgJiYgIXN0b3JlQXJncy5lbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZXRQaXBlcy5jeHggYi9Tb3VyY2UvY21HZXRQaXBlcy5jeHgKaW5kZXggNGVkYTFjNS4uYTViNjQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0UGlwZXMuY3h4CisrKyBiL1NvdXJjZS9jbUdldFBpcGVzLmN4eApAQCAtMiwxMCArMiw5IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdldFBpcGVzLmgiCiAKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KIAotI2luY2x1ZGUgImNtX3V2LmgiCi0KICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICMgIGluY2x1ZGUgPGlvLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdldFByb3BlcnR5Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21HZXRQcm9wZXJ0eUNvbW1hbmQuY3h4CmluZGV4IDk0N2Q4OTMuLmNiYTc3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdldFByb3BlcnR5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtR2V0UHJvcGVydHlDb21tYW5kLmN4eApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKICNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJjbVNldFByb3BlcnR5Q29tbWFuZC5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTQ4LDcgKzQ5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lKTsKIGJvb2wgSGFuZGxlU291cmNlTW9kZShjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBPdXRUeXBlIGluZm9UeXBlLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlJiBkaXJlY3RvcnlfbWFrZWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUpOwogYm9vbCBIYW5kbGVUZXN0TW9kZShjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgT3V0VHlwZSBpbmZvVHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lKTsKQEAgLTc4LDYgKzgxLDExIEBACiAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgIHN0ZDo6c3RyaW5nIHByb3BlcnR5TmFtZTsKIAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc291cmNlX2ZpbGVfZGlyZWN0b3JpZXM7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXM7CisgIGJvb2wgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkID0gZmFsc2U7CisgIGJvb2wgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkID0gZmFsc2U7CisKICAgLy8gR2V0IHRoZSBzY29wZSBmcm9tIHdoaWNoIHRvIGdldCB0aGUgcHJvcGVydHkuCiAgIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZTsKICAgaWYgKGFyZ3NbMV0gPT0gIkdMT0JBTCIpIHsKQEAgLTExMSw3ICsxMTksOSBAQAogICAgIERvaW5nTm9uZSwKICAgICBEb2luZ05hbWUsCiAgICAgRG9pbmdQcm9wZXJ0eSwKLSAgICBEb2luZ1R5cGUKKyAgICBEb2luZ1R5cGUsCisgICAgRG9pbmdTb3VyY2VEaXJlY3RvcnksCisgICAgRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkKICAgfTsKICAgRG9pbmcgZG9pbmcgPSBEb2luZ05hbWU7CiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAyOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewpAQCAtMTMyLDYgKzE0MiwyMCBAQAogICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdOYW1lKSB7CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKICAgICAgIG5hbWUgPSBhcmdzW2ldOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdOb25lICYmIHNjb3BlID09IGNtUHJvcGVydHk6OlNPVVJDRV9GSUxFICYmCisgICAgICAgICAgICAgICBhcmdzW2ldID09ICJESVJFQ1RPUlkiKSB7CisgICAgICBkb2luZyA9IERvaW5nU291cmNlRGlyZWN0b3J5OworICAgICAgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nTm9uZSAmJiBzY29wZSA9PSBjbVByb3BlcnR5OjpTT1VSQ0VfRklMRSAmJgorICAgICAgICAgICAgICAgYXJnc1tpXSA9PSAiVEFSR0VUX0RJUkVDVE9SWSIpIHsKKyAgICAgIGRvaW5nID0gRG9pbmdTb3VyY2VUYXJnZXREaXJlY3Rvcnk7CisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdTb3VyY2VEaXJlY3RvcnkpIHsKKyAgICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLnB1c2hfYmFjayhhcmdzW2ldKTsKKyAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkpIHsKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3Rvcmllcy5wdXNoX2JhY2soYXJnc1tpXSk7CisgICAgICBkb2luZyA9IERvaW5nTm9uZTsKICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nUHJvcGVydHkpIHsKICAgICAgIGRvaW5nID0gRG9pbmdOb25lOwogICAgICAgcHJvcGVydHlOYW1lID0gYXJnc1tpXTsKQEAgLTE0Nyw2ICsxNzEsMTYgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAorICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4gc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlczsKKyAgYm9vbCBmaWxlX3Njb3Blc19oYW5kbGVkID0KKyAgICBTZXRQcm9wZXJ0eUNvbW1hbmQ6OkhhbmRsZUFuZFZhbGlkYXRlU291cmNlRmlsZURpcmVjdG9ydG9yeVNjb3BlcygKKyAgICAgIHN0YXR1cywgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkLAorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkLCBzb3VyY2VfZmlsZV9kaXJlY3RvcmllcywKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3Rvcmllcywgc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlcyk7CisgIGlmICghZmlsZV9zY29wZXNfaGFuZGxlZCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIC8vIENvbXB1dGUgcmVxdWVzdGVkIG91dHB1dC4KICAgaWYgKGluZm9UeXBlID09IE91dEJyaWVmRG9jKSB7CiAgICAgLy8gTG9va3VwIGJyaWVmIGRvY3VtZW50YXRpb24uCkBAIC0xODAsNiArMjE0LDExIEBACiAgICAgfQogICB9IGVsc2UgewogICAgIC8vIERpc3BhdGNoIHByb3BlcnR5IGdldHRpbmcuCisgICAgY21NYWtlZmlsZSYgZGlyZWN0b3J5X3Njb3BlX21mID0gKihzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzWzBdKTsKKyAgICBib29sIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSA9CisgICAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQgfHwKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZDsKKwogICAgIHN3aXRjaCAoc2NvcGUpIHsKICAgICAgIGNhc2UgY21Qcm9wZXJ0eTo6R0xPQkFMOgogICAgICAgICByZXR1cm4gSGFuZGxlR2xvYmFsTW9kZShzdGF0dXMsIG5hbWUsIGluZm9UeXBlLCB2YXJpYWJsZSwKQEAgLTE5MSw4ICsyMzAsOSBAQAogICAgICAgICByZXR1cm4gSGFuZGxlVGFyZ2V0TW9kZShzdGF0dXMsIG5hbWUsIGluZm9UeXBlLCB2YXJpYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lKTsKICAgICAgIGNhc2UgY21Qcm9wZXJ0eTo6U09VUkNFX0ZJTEU6Ci0gICAgICAgIHJldHVybiBIYW5kbGVTb3VyY2VNb2RlKHN0YXR1cywgbmFtZSwgaW5mb1R5cGUsIHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gSGFuZGxlU291cmNlTW9kZShzdGF0dXMsIG5hbWUsIGluZm9UeXBlLCB2YXJpYWJsZSwgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfc2NvcGVfbWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSk7CiAgICAgICBjYXNlIGNtUHJvcGVydHk6OlRFU1Q6CiAgICAgICAgIHJldHVybiBIYW5kbGVUZXN0TW9kZShzdGF0dXMsIG5hbWUsIGluZm9UeXBlLCB2YXJpYWJsZSwgcHJvcGVydHlOYW1lKTsKICAgICAgIGNhc2UgY21Qcm9wZXJ0eTo6VkFSSUFCTEU6CkBAIC0yNDEsOCArMjgxLDkgQEAKIAogICAvLyBHZXQgdGhlIHByb3BlcnR5LgogICBjbWFrZSogY20gPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCk7CisgIGNtUHJvcCBwID0gY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgIHJldHVybiBTdG9yZVJlc3VsdChpbmZvVHlwZSwgc3RhdHVzLkdldE1ha2VmaWxlKCksIHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KHByb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgICAgICAgICAgcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyKTsKIH0KIAogYm9vbCBIYW5kbGVEaXJlY3RvcnlNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLApAQCAtMjU2LDE0ICsyOTcsOCBAQAogICBpZiAoIW5hbWUuZW1wdHkoKSkgewogICAgIC8vIENvbnN0cnVjdCB0aGUgZGlyZWN0b3J5IG5hbWUuICBJbnRlcnByZXQgcmVsYXRpdmUgcGF0aHMgd2l0aAogICAgIC8vIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotICAgIHN0ZDo6c3RyaW5nIGRpciA9IG5hbWU7Ci0gICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChkaXIpKSB7Ci0gICAgICBkaXIgPQotICAgICAgICBjbVN0ckNhdChzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksICcvJywgbmFtZSk7Ci0gICAgfQotCi0gICAgLy8gVGhlIGxvY2FsIGdlbmVyYXRvcnMgYXJlIGFzc29jaWF0ZWQgd2l0aCBjb2xsYXBzZWQgcGF0aHMuCi0gICAgZGlyID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChkaXIpOworICAgIHN0ZDo6c3RyaW5nIGRpciA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgICBuYW1lLCBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOwogCiAgICAgLy8gTG9va3VwIHRoZSBnZW5lcmF0b3IuCiAgICAgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZE1ha2VmaWxlKGRpcik7CkBAIC0yOTQsOCArMzI5LDkgQEAKICAgfQogCiAgIC8vIEdldCB0aGUgcHJvcGVydHkuCisgIGNtUHJvcCBwID0gbWYtPkdldFByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiAgIHJldHVybiBTdG9yZVJlc3VsdChpbmZvVHlwZSwgc3RhdHVzLkdldE1ha2VmaWxlKCksIHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgbWYtPkdldFByb3BlcnR5KHByb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgICAgICAgICAgcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyKTsKIH0KIAogYm9vbCBIYW5kbGVUYXJnZXRNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLApAQCAtMzA4LDE0ICszNDQsMjQgQEAKICAgfQogCiAgIGlmIChjbVRhcmdldCogdGFyZ2V0ID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuRmluZFRhcmdldFRvVXNlKG5hbWUpKSB7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQUxJQVNFRF9UQVJHRVQiKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQUxJQVNFRF9UQVJHRVQiIHx8IHByb3BlcnR5TmFtZSA9PSAiQUxJQVNfR0xPQkFMIikgewogICAgICAgaWYgKHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzQWxpYXMobmFtZSkpIHsKLSAgICAgICAgcmV0dXJuIFN0b3JlUmVzdWx0KGluZm9UeXBlLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQUxJQVNFRF9UQVJHRVQiKSB7CisKKyAgICAgICAgICByZXR1cm4gU3RvcmVSZXN1bHQoaW5mb1R5cGUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQUxJQVNfR0xPQkFMIikgeworICAgICAgICAgIHJldHVybiBTdG9yZVJlc3VsdCgKKyAgICAgICAgICAgIGluZm9UeXBlLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUsCisgICAgICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNBbGlhcyhuYW1lKQorICAgICAgICAgICAgICA/ICJUUlVFIgorICAgICAgICAgICAgICA6ICJGQUxTRSIpOworICAgICAgICB9CiAgICAgICB9CiAgICAgICByZXR1cm4gU3RvcmVSZXN1bHQoaW5mb1R5cGUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwgbnVsbHB0cik7CiAgICAgfQotICAgIGNvbnN0IGNoYXIqIHByb3BfY3N0ciA9IG51bGxwdHI7CisgICAgY21Qcm9wIHByb3BfY3N0ciA9IG51bGxwdHI7CiAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBidCA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEJhY2t0cmFjZSgpOwogICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRNZXNzZW5nZXIoKTsKICAgICBpZiAoY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpQYXNzZXNXaGl0ZWxpc3QoCkBAIC0zMjUsNyArMzcxLDggQEAKICAgICAgICAgcHJvcF9jc3RyID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gU3RvcmVSZXN1bHQoaW5mb1R5cGUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwgcHJvcF9jc3RyKTsKKyAgICByZXR1cm4gU3RvcmVSZXN1bHQoaW5mb1R5cGUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9jc3RyID8gcHJvcF9jc3RyLT5jX3N0cigpIDogbnVsbHB0cik7CiAgIH0KICAgc3RhdHVzLlNldEVycm9yKGNtU3RyQ2F0KCJjb3VsZCBub3QgZmluZCBUQVJHRVQgIiwgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuICBQZXJoYXBzIGl0IGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZC4iKSk7CkBAIC0zMzQsNyArMzgxLDkgQEAKIAogYm9vbCBIYW5kbGVTb3VyY2VNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIE91dFR5cGUgaW5mb1R5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSYgZGlyZWN0b3J5X21ha2VmaWxlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgc291cmNlX2ZpbGVfcGF0aHNfc2hvdWxkX2JlX2Fic29sdXRlKQogewogICBpZiAobmFtZS5lbXB0eSgpKSB7CiAgICAgc3RhdHVzLlNldEVycm9yKCJub3QgZ2l2ZW4gbmFtZSBmb3IgU09VUkNFIHNjb3BlLiIpOwpAQCAtMzQyLDEyICszOTEsMTcgQEAKICAgfQogCiAgIC8vIEdldCB0aGUgc291cmNlIGZpbGUuCi0gIGlmIChjbVNvdXJjZUZpbGUqIHNmID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0T3JDcmVhdGVTb3VyY2UobmFtZSkpIHsKKyAgY29uc3Qgc3RkOjpzdHJpbmcgc291cmNlX2ZpbGVfYWJzb2x1dGVfcGF0aCA9CisgICAgU2V0UHJvcGVydHlDb21tYW5kOjpNYWtlU291cmNlRmlsZVBhdGhBYnNvbHV0ZUlmTmVlZGVkKAorICAgICAgc3RhdHVzLCBuYW1lLCBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUpOworICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9CisgICAgICAgIGRpcmVjdG9yeV9tYWtlZmlsZS5HZXRPckNyZWF0ZVNvdXJjZShzb3VyY2VfZmlsZV9hYnNvbHV0ZV9wYXRoKSkgewogICAgIHJldHVybiBTdG9yZVJlc3VsdChpbmZvVHlwZSwgc3RhdHVzLkdldE1ha2VmaWxlKCksIHZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICBzZi0+R2V0UHJvcGVydHlGb3JVc2VyKHByb3BlcnR5TmFtZSkpOwogICB9CiAgIHN0YXR1cy5TZXRFcnJvcigKLSAgICBjbVN0ckNhdCgiZ2l2ZW4gU09VUkNFIG5hbWUgdGhhdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgY3JlYXRlZDogIiwgbmFtZSkpOworICAgIGNtU3RyQ2F0KCJnaXZlbiBTT1VSQ0UgbmFtZSB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBjcmVhdGVkOiAiLAorICAgICAgICAgICAgIHNvdXJjZV9maWxlX2Fic29sdXRlX3BhdGgpKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zOTMsMTIgKzQ0NywxMyBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gbnVsbHB0cjsKKyAgY21Qcm9wIHZhbHVlID0gbnVsbHB0cjsKICAgaWYgKHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFN0YXRlKCktPkdldENhY2hlRW50cnlWYWx1ZShuYW1lKSkgewogICAgIHZhbHVlID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KAogICAgICAgbmFtZSwgcHJvcGVydHlOYW1lKTsKICAgfQotICBTdG9yZVJlc3VsdChpbmZvVHlwZSwgc3RhdHVzLkdldE1ha2VmaWxlKCksIHZhcmlhYmxlLCB2YWx1ZSk7CisgIFN0b3JlUmVzdWx0KGluZm9UeXBlLCBzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUsCisgICAgICAgICAgICAgIHZhbHVlID8gdmFsdWUtPmNfc3RyKCkgOiBudWxscHRyKTsKICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdldFNvdXJjZUZpbGVQcm9wZXJ0eUNvbW1hbmQuY3h4IGIvU291cmNlL2NtR2V0U291cmNlRmlsZVByb3BlcnR5Q29tbWFuZC5jeHgKaW5kZXggZWVmZGM2Yy4uNTM5NWJjOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2V0U291cmNlRmlsZVByb3BlcnR5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtR2V0U291cmNlRmlsZVByb3BlcnR5Q29tbWFuZC5jeHgKQEAgLTQsMzUgKzQsNzEgQEAKIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtU2V0UHJvcGVydHlDb21tYW5kLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAKIGJvb2wgY21HZXRTb3VyY2VGaWxlUHJvcGVydHlDb21tYW5kKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7Ci0gIGlmIChhcmdzLnNpemUoKSAhPSAzKSB7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6c2l6ZV90eXBlIGFyZ3Nfc2l6ZSA9IGFyZ3Muc2l6ZSgpOworICBpZiAoYXJnc19zaXplICE9IDMgJiYgYXJnc19zaXplICE9IDUpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzOworICBib29sIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCA9IGZhbHNlOworICBib29sIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCA9IGZhbHNlOworCisgIGludCBwcm9wZXJ0eV9hcmdfaW5kZXggPSAyOworICBpZiAoYXJnc1syXSA9PSAiRElSRUNUT1JZIiAmJiBhcmdzX3NpemUgPT0gNSkgeworICAgIHByb3BlcnR5X2FyZ19pbmRleCA9IDQ7CisgICAgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkID0gdHJ1ZTsKKyAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcmllcy5wdXNoX2JhY2soYXJnc1szXSk7CisgIH0gZWxzZSBpZiAoYXJnc1syXSA9PSAiVEFSR0VUX0RJUkVDVE9SWSIgJiYgYXJnc19zaXplID09IDUpIHsKKyAgICBwcm9wZXJ0eV9hcmdfaW5kZXggPSA0OworICAgIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCA9IHRydWU7CisgICAgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLnB1c2hfYmFjayhhcmdzWzNdKTsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzOworICBib29sIGZpbGVfc2NvcGVzX2hhbmRsZWQgPQorICAgIFNldFByb3BlcnR5Q29tbWFuZDo6SGFuZGxlQW5kVmFsaWRhdGVTb3VyY2VGaWxlRGlyZWN0b3J0b3J5U2NvcGVzKAorICAgICAgc3RhdHVzLCBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQsCisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQsIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLAorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLCBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzKTsKKyAgaWYgKCFmaWxlX3Njb3Blc19oYW5kbGVkKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgc3RkOjpzdHJpbmcgY29uc3QmIHZhciA9IGFyZ3NbMF07Ci0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlID0gYXJnc1sxXTsKLSAgY21NYWtlZmlsZSYgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKTsKKyAgYm9vbCBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUgPQorICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCB8fCBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQ7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IGZpbGUgPQorICAgIFNldFByb3BlcnR5Q29tbWFuZDo6TWFrZVNvdXJjZUZpbGVQYXRoQWJzb2x1dGVJZk5lZWRlZCgKKyAgICAgIHN0YXR1cywgYXJnc1sxXSwgc291cmNlX2ZpbGVfcGF0aHNfc2hvdWxkX2JlX2Fic29sdXRlKTsKKyAgY21NYWtlZmlsZSYgbWYgPSAqc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlc1swXTsKICAgY21Tb3VyY2VGaWxlKiBzZiA9IG1mLkdldFNvdXJjZShmaWxlKTsKIAogICAvLyBmb3IgdGhlIGxvY2F0aW9uIHdlIG11c3QgY3JlYXRlIGEgc291cmNlIGZpbGUgZmlyc3QKLSAgaWYgKCFzZiAmJiBhcmdzWzJdID09ICJMT0NBVElPTiIpIHsKKyAgaWYgKCFzZiAmJiBhcmdzW3Byb3BlcnR5X2FyZ19pbmRleF0gPT0gIkxPQ0FUSU9OIikgewogICAgIHNmID0gbWYuQ3JlYXRlU291cmNlKGZpbGUpOwogICB9CisKICAgaWYgKHNmKSB7CiAgICAgY29uc3QgY2hhciogcHJvcCA9IG51bGxwdHI7Ci0gICAgaWYgKCFhcmdzWzJdLmVtcHR5KCkpIHsKLSAgICAgIHByb3AgPSBzZi0+R2V0UHJvcGVydHlGb3JVc2VyKGFyZ3NbMl0pOworICAgIGlmICghYXJnc1twcm9wZXJ0eV9hcmdfaW5kZXhdLmVtcHR5KCkpIHsKKyAgICAgIHByb3AgPSBzZi0+R2V0UHJvcGVydHlGb3JVc2VyKGFyZ3NbcHJvcGVydHlfYXJnX2luZGV4XSk7CiAgICAgfQogICAgIGlmIChwcm9wKSB7Ci0gICAgICBtZi5BZGREZWZpbml0aW9uKHZhciwgcHJvcCk7CisgICAgICAvLyBTZXQgdGhlIHZhbHVlIG9uIHRoZSBvcmlnaW5hbCBNYWtlZmlsZSBzY29wZSwgbm90IHRoZSBzY29wZSBvZiB0aGUKKyAgICAgIC8vIHJlcXVlc3RlZCBkaXJlY3RvcnkuCisgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGREZWZpbml0aW9uKHZhciwgcHJvcCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KIAotICBtZi5BZGREZWZpbml0aW9uKHZhciwgIk5PVEZPVU5EIik7CisgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkFkZERlZmluaXRpb24odmFyLCAiTk9URk9VTkQiKTsKICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HZXRUYXJnZXRQcm9wZXJ0eUNvbW1hbmQuY3h4IGIvU291cmNlL2NtR2V0VGFyZ2V0UHJvcGVydHlDb21tYW5kLmN4eAppbmRleCA3ZjVkZjljLi44YTMwNGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HZXRUYXJnZXRQcm9wZXJ0eUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUdldFRhcmdldFByb3BlcnR5Q29tbWFuZC5jeHgKQEAgLTUsMTAgKzUsMTIgQEAKICNpbmNsdWRlIDxzc3RyZWFtPgogCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKKyNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVRhcmdldC5oIgogI2luY2x1ZGUgImNtVGFyZ2V0UHJvcGVydHlDb21wdXRlci5oIgogCkBAIC0yOCwxMyArMzAsMjAgQEAKICAgY21NYWtlZmlsZSYgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKTsKIAogICBpZiAoY21UYXJnZXQqIHRndCA9IG1mLkZpbmRUYXJnZXRUb1VzZSh0YXJnZXROYW1lKSkgewotICAgIGlmIChhcmdzWzJdID09ICJBTElBU0VEX1RBUkdFVCIpIHsKKyAgICBpZiAoYXJnc1syXSA9PSAiQUxJQVNFRF9UQVJHRVQiIHx8IGFyZ3NbMl0gPT0gIkFMSUFTX0dMT0JBTCIpIHsKICAgICAgIGlmIChtZi5Jc0FsaWFzKHRhcmdldE5hbWUpKSB7Ci0gICAgICAgIHByb3AgPSB0Z3QtPkdldE5hbWUoKTsKICAgICAgICAgcHJvcF9leGlzdHMgPSB0cnVlOworICAgICAgICBpZiAoYXJnc1syXSA9PSAiQUxJQVNFRF9UQVJHRVQiKSB7CisKKyAgICAgICAgICBwcm9wID0gdGd0LT5HZXROYW1lKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZ3NbMl0gPT0gIkFMSUFTX0dMT0JBTCIpIHsKKyAgICAgICAgICBwcm9wID0KKyAgICAgICAgICAgIG1mLkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc0FsaWFzKHRhcmdldE5hbWUpID8gIlRSVUUiIDogIkZBTFNFIjsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0gZWxzZSBpZiAoIWFyZ3NbMl0uZW1wdHkoKSkgewotICAgICAgY29uc3QgY2hhciogcHJvcF9jc3RyID0gbnVsbHB0cjsKKyAgICAgIGNtUHJvcCBwcm9wX2NzdHIgPSBudWxscHRyOwogICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBidCA9IG1mLkdldEJhY2t0cmFjZSgpOwogICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciA9IG1mLkdldE1lc3NlbmdlcigpOwogICAgICAgaWYgKGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6UGFzc2VzV2hpdGVsaXN0KHRndC0+R2V0VHlwZSgpLCBhcmdzWzJdLApAQCAtNDUsNyArNTQsNyBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICBpZiAocHJvcF9jc3RyKSB7Ci0gICAgICAgIHByb3AgPSBwcm9wX2NzdHI7CisgICAgICAgIHByb3AgPSAqcHJvcF9jc3RyOwogICAgICAgICBwcm9wX2V4aXN0cyA9IHRydWU7CiAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IDhlNDM1MmUuLjE1ODljNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdoc011bHRpVGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HaHNNdWx0aVRhcmdldEdlbmVyYXRvci5jeHgKQEAgLTE0LDExICsxNCwxMiBAQAogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvci5oIgotI2luY2x1ZGUgImNtTGlua0xpbmVDb21wdXRlci5oIgorI2luY2x1ZGUgImNtTGlua0xpbmVDb21wdXRlci5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxvY2FsR2hzTXVsdGlHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlTG9jYXRpb24uaCIKICNpbmNsdWRlICJjbVNvdXJjZUdyb3VwLmgiCkBAIC0xMTMsNyArMTE0LDcgQEAKIAogICAvLyBUZWxsIHRoZSBnbG9iYWwgZ2VuZXJhdG9yIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IGZpbGUKICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5OYW1lKTsKICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KAogICAgICJHRU5FUkFUT1JfRklMRV9OQU1FX0VYVCIsIEdoc011bHRpR3BqOjpHZXRHcGpUYWcodGhpcy0+VGFnVHlwZSkpOwogCkBAIC0xNjUsMTMgKzE2NiwxNSBAQAogICAgIG91dHBhdGggPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldERpcmVjdG9yeShjb25maWcpOwogICAgIG91dHBhdGggPQogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKHJvb3RwYXRoLCBvdXRwYXRoKTsKLSAgICBmb3V0IDw8ICIgICAgOmJpbkRpclJlbGF0aXZlPVwiIiA8PCBvdXRwYXRoIDw8ICJcIiIgPDwgc3RkOjplbmRsOwotICAgIGZvdXQgPDwgIiAgICAtbyBcIiIgPDwgdGhpcy0+VGFyZ2V0TmFtZVJlYWwgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIGZvdXQgPDwgIiAgICA6YmluRGlyUmVsYXRpdmU9XCIiIDw8IG91dHBhdGggPDwgIlwiXG4iCisgICAgICAgICAgICAiICAgIC1vIFwiIiA8PCB0aGlzLT5UYXJnZXROYW1lUmVhbCA8PCAiXCJcbiI7CisgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgIH0KIAogICAvLyBzZXQgdGFyZ2V0IG9iamVjdCBmaWxlIGRlc3RpbmF0aW9uCiAgIG91dHBhdGggPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGlyZWN0b3J5KHRoaXMtPkdlbmVyYXRvclRhcmdldCk7Ci0gIGZvdXQgPDwgIiAgICA6b3V0cHV0RGlyUmVsYXRpdmU9XCIiIDw8IG91dHBhdGggPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgIiAgICA6b3V0cHV0RGlyUmVsYXRpdmU9XCIiIDw8IG91dHBhdGggPDwgIlwiXG4iOwogfQogCiB2b2lkIGNtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3I6OlNldENvbXBpbGVyRmxhZ3Moc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKQEAgLTE4MCwxNSArMTgzLDEyIEBACiAgIGF1dG8gaSA9IHRoaXMtPkZsYWdzQnlMYW5ndWFnZS5maW5kKGxhbmd1YWdlKTsKICAgaWYgKGkgPT0gdGhpcy0+RmxhZ3NCeUxhbmd1YWdlLmVuZCgpKSB7CiAgICAgc3RkOjpzdHJpbmcgZmxhZ3M7Ci0gICAgY29uc3QgY2hhciogbGFuZyA9IGxhbmd1YWdlLmNfc3RyKCk7Ci0KLSAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkTGFuZ3VhZ2VGbGFncyhmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7Ci0KLSAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkQ01QMDAxOEZsYWdzKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRMYW5ndWFnZUZsYWdzKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UsIGNvbmZpZyk7CisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZENNUDAwMThGbGFncyhmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UsIGNvbmZpZyk7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZFZpc2liaWxpdHlQcmVzZXRGbGFncygKLSAgICAgIGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmcpOworICAgICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZ3VhZ2UpOwogCiAgICAgLy8gQXBwZW5kIG9sZC1zdHlsZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiBmbGFncy4KICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPkdldERlZmluZUZsYWdzKCkgIT0gIiAiKSB7CkBAIC0xOTcsOCArMTk3LDggQEAKICAgICB9CiAKICAgICAvLyBBZGQgdGFyZ2V0LXNwZWNpZmljIGZsYWdzLgotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRDb21waWxlT3B0aW9ucyhmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRDb21waWxlT3B0aW9ucyhmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSwgY29uZmlnKTsKIAogICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OnZhbHVlX3R5cGUgZW50cnkobGFuZ3VhZ2UsIGZsYWdzKTsKICAgICBpID0gdGhpcy0+RmxhZ3NCeUxhbmd1YWdlLmluc2VydChlbnRyeSkuZmlyc3Q7CkBAIC0yMTEsMTMgKzIxMSwxMiBAQAogICBhdXRvIGkgPSB0aGlzLT5EZWZpbmVzQnlMYW5ndWFnZS5maW5kKGxhbmd1YWdlKTsKICAgaWYgKGkgPT0gdGhpcy0+RGVmaW5lc0J5TGFuZ3VhZ2UuZW5kKCkpIHsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZGVmaW5lczsKLSAgICBjb25zdCBjaGFyKiBsYW5nID0gbGFuZ3VhZ2UuY19zdHIoKTsKICAgICAvLyBBZGQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIGZvciB0aGlzIHRhcmdldCBhbmQgY29uZmlndXJhdGlvbi4KICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGVmaW5lcyh0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSwgZGVmaW5lcyk7CiAKICAgICBzdGQ6OnN0cmluZyBkZWZpbmVzU3RyaW5nOwotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Kb2luRGVmaW5lcyhkZWZpbmVzLCBkZWZpbmVzU3RyaW5nLCBsYW5nKTsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Sm9pbkRlZmluZXMoZGVmaW5lcywgZGVmaW5lc1N0cmluZywgbGFuZ3VhZ2UpOwogCiAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjo6dmFsdWVfdHlwZSBlbnRyeShsYW5ndWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXNTdHJpbmcpOwpAQCAtMjM1LDggKzIzNCw4IEBACiAgICAgaWYgKCFmbGFnc0J5TGFuZ0ktPnNlY29uZC5lbXB0eSgpKSB7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZ2hzQ29tcEZsYWdzID0KICAgICAgICAgY21TeXN0ZW1Ub29sczo6UGFyc2VBcmd1bWVudHMoZmxhZ3NCeUxhbmdJLT5zZWNvbmQpOwotICAgICAgZm9yIChhdXRvJiBmIDogZ2hzQ29tcEZsYWdzKSB7Ci0gICAgICAgIGZvdXQgPDwgIiAgICAiIDw8IGYgPDwgc3RkOjplbmRsOworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgZiA6IGdoc0NvbXBGbGFncykgeworICAgICAgICBmb3V0IDw8ICIgICAgIiA8PCBmIDw8ICdcbic7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0yNDksNyArMjQ4LDcgQEAKICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRDb21waWxlRGVmaW5pdGlvbnMoY29tcGlsZURlZmluaXRpb25zLCBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29tcGlsZURlZmluaXRpb24gOiBjb21waWxlRGVmaW5pdGlvbnMpIHsKLSAgICBmb3V0IDw8ICIgICAgLUQiIDw8IGNvbXBpbGVEZWZpbml0aW9uIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICIgICAgLUQiIDw8IGNvbXBpbGVEZWZpbml0aW9uIDw8ICdcbic7CiAgIH0KIH0KIApAQCAtMjYyLDcgKzI2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UsIGNvbmZpZyk7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaW5jbHVkZSA6IGluY2x1ZGVzKSB7Ci0gICAgZm91dCA8PCAiICAgIC1JXCIiIDw8IGluY2x1ZGUgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCAiICAgIC1JXCIiIDw8IGluY2x1ZGUgPDwgIlwiXG4iOwogICB9CiB9CiAKQEAgLTI3OSwxMCArMjc4LDEwIEBACiAgIHN0ZDo6c3RyaW5nIGZyYW1ld29ya1BhdGg7CiAgIHN0ZDo6c3RyaW5nIGxpbmtQYXRoOwogCi0gIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIoCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIgPQogICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5DcmVhdGVMaW5rTGluZUNvbXB1dGVyKAogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IsCi0gICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpKSk7CisgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpKTsKIAogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RmxhZ3MoCiAgICAgbGlua0xpbmVDb21wdXRlci5nZXQoKSwgY29uZmlnLCBsaW5rTGlicmFyaWVzLCBmbGFncywgbGlua0ZsYWdzLApAQCAtMjkwLDE1ICsyODksMTUgQEAKIAogICAvLyB3cml0ZSBvdXQgbGluayBvcHRpb25zCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsb3B0cyA9IGNtU3lzdGVtVG9vbHM6OlBhcnNlQXJndW1lbnRzKGxpbmtGbGFncyk7Ci0gIGZvciAoYXV0byYgbCA6IGxvcHRzKSB7Ci0gICAgZm91dCA8PCAiICAgICIgPDwgbCA8PCBzdGQ6OmVuZGw7CisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGwgOiBsb3B0cykgeworICAgIGZvdXQgPDwgIiAgICAiIDw8IGwgPDwgJ1xuJzsKICAgfQogCiAgIC8vIHdyaXRlIG91dCBsaW5rIHNlYXJjaCBwYXRocwogICAvLyBtdXN0IGJlIHF1b3RlZCBmb3IgcGF0aHMgdGhhdCBjb250YWluIHNwYWNlcwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbHBhdGggPSBjbVN5c3RlbVRvb2xzOjpQYXJzZUFyZ3VtZW50cyhsaW5rUGF0aCk7Ci0gIGZvciAoYXV0byYgbCA6IGxwYXRoKSB7Ci0gICAgZm91dCA8PCAiICAgIC1MXCIiIDw8IGwgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGwgOiBscGF0aCkgeworICAgIGZvdXQgPDwgIiAgICAtTFwiIiA8PCBsIDw8ICJcIlxuIjsKICAgfQogCiAgIC8vIHdyaXRlIG91dCBsaW5rIGxpYnMKQEAgLTMwNywxMiArMzA2LDEyIEBACiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxsaWJzID0KICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZUFyZ3VtZW50cyhsaW5rTGlicmFyaWVzKTsKLSAgZm9yIChhdXRvJiBsIDogbGxpYnMpIHsKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgbCA6IGxsaWJzKSB7CiAgICAgaWYgKGwuY29tcGFyZSgwLCAyLCAiLWwiKSA9PSAwKSB7Ci0gICAgICBmb3V0IDw8ICIgICAgXCIiIDw8IGwgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3V0IDw8ICIgICAgXCIiIDw8IGwgPDwgIlwiXG4iOwogICAgIH0gZWxzZSB7CiAgICAgICBzdGQ6OnN0cmluZyBybCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgobCwgY2JkKTsKLSAgICAgIGZvdXQgPDwgIiAgICAtbFwiIiA8PCBybCA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvdXQgPDwgIiAgICAtbFwiIiA8PCBybCA8PCAiXCJcbiI7CiAgICAgfQogICB9CiB9CkBAIC0zNTMsMTMgKzM1MiwxMiBAQAogICAgIHRoaXMtPldyaXRlQ3VzdG9tQ29tbWFuZHNIZWxwZXIoZiwgY2NnKTsKICAgICBmLkNsb3NlKCk7CiAgICAgaWYgKHRoaXMtPlRhZ1R5cGUgIT0gR2hzTXVsdGlHcGo6OkNVU1RPTV9UQVJHRVQpIHsKLSAgICAgIGZvdXQgPDwgIiAgICA6IiA8PCBjbWQgPDwgIj1cIiIgPDwgZm5hbWUgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3V0IDw8ICIgICAgOiIgPDwgY21kIDw8ICI9XCIiIDw8IGZuYW1lIDw8ICJcIlxuIjsKICAgICB9IGVsc2UgewotICAgICAgZm91dCA8PCBmbmFtZSA8PCBzdGQ6OmVuZGw7Ci0gICAgICBmb3V0IDw8ICIgICAgOm91dHB1dE5hbWU9XCIiIDw8IGZuYW1lIDw8ICIucnVsZVwiIiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3V0IDw8IGZuYW1lIDw8ICJcbiAgICA6b3V0cHV0TmFtZT1cIiIgPDwgZm5hbWUgPDwgIi5ydWxlXCJcbiI7CiAgICAgfQogICAgIGZvciAoYXV0byYgYnlwIDogY2NnLkdldEJ5cHJvZHVjdHMoKSkgewotICAgICAgZm91dCA8PCAiICAgIDpleHRyYU91dHB1dEZpbGU9XCIiIDw8IGJ5cCA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvdXQgPDwgIiAgICA6ZXh0cmFPdXRwdXRGaWxlPVwiIiA8PCBieXAgPDwgIlwiXG4iOwogICAgIH0KICAgfQogfQpAQCAtNDUxLDggKzQ0OSw3IEBACiAKICAgLy8gcHVzaCBiYWNrIHRoZSBjdXN0b20gY29tbWFuZHMKICAgZm9yIChhdXRvIGNvbnN0JiBjIDogY21kTGluZXMpIHsKLSAgICBmb3V0IDw8IGMgPDwgc3RkOjplbmRsOwotICAgIGZvdXQgPDwgY2hlY2tfZXJyb3IgPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgYyA8PCAnXG4nIDw8IGNoZWNrX2Vycm9yIDw8ICdcbic7CiAgIH0KIH0KIApAQCAtNDYwLDExICs0NTcsMTEgQEAKICAgc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBjbVNvdXJjZUZpbGUqIHNmLCBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcE5hbWUsCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wRmxhZykKIHsKLSAgY29uc3QgY2hhciogcHJvcCA9IHNmLT5HZXRQcm9wZXJ0eShwcm9wTmFtZSk7CisgIGNtUHJvcCBwcm9wID0gc2YtPkdldFByb3BlcnR5KHByb3BOYW1lKTsKICAgaWYgKHByb3ApIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlzdCA9IGNtRXhwYW5kZWRMaXN0KHByb3ApOwotICAgIGZvciAoYXV0byYgcCA6IGxpc3QpIHsKLSAgICAgIGZvdXQgPDwgIiAgICAiIDw8IHByb3BGbGFnIDw8IHAgPDwgc3RkOjplbmRsOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaXN0ID0gY21FeHBhbmRlZExpc3QoKnByb3ApOworICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIHAgOiBsaXN0KSB7CisgICAgICBmb3V0IDw8ICIgICAgIiA8PCBwcm9wRmxhZyA8PCBwIDw8ICdcbic7CiAgICAgfQogICB9CiB9CkBAIC00ODMsNyArNDgwLDcgQEAKICAgLyogZm9yIGVhY2ggc291cmNlIGZpbGUgYXNzaWduIGl0IHRvIGl0cyBncm91cCAqLwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4+IGdyb3VwRmlsZXM7CiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBncm91cE5hbWVzOwotICBmb3IgKGF1dG8mIHNmIDogc291cmNlcykgeworICBmb3IgKGNtU291cmNlRmlsZSogc2YgOiBzb3VyY2VzKSB7CiAgICAgY21Tb3VyY2VHcm91cCogc291cmNlR3JvdXAgPQogICAgICAgdGhpcy0+TWFrZWZpbGUtPkZpbmRTb3VyY2VHcm91cChzZi0+UmVzb2x2ZUZ1bGxQYXRoKCksIHNvdXJjZUdyb3Vwcyk7CiAgICAgc3RkOjpzdHJpbmcgZ24gPSBzb3VyY2VHcm91cC0+R2V0RnVsbE5hbWUoKTsKQEAgLTU1NSw3ICs1NTIsNyBAQAogICAgIHN0ZDo6b3N0cmVhbSogZm91dDsKICAgICBib29sIHVzZVByb2plY3RGaWxlID0KICAgICAgIGNtSXNPbih0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJHSFNfTk9fU09VUkNFX0dST1VQX0ZJTEUiKSkgfHwKLSAgICAgIGNtSXNPbih0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfR0hTX05PX1NPVVJDRV9HUk9VUF9GSUxFIikpOworICAgICAgdGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX0dIU19OT19TT1VSQ0VfR1JPVVBfRklMRSIpOwogICAgIGlmICh1c2VQcm9qZWN0RmlsZSB8fCBzZy5lbXB0eSgpKSB7CiAgICAgICBmb3V0ID0gJmZvdXRfcHJvajsKICAgICB9IGVsc2UgewpAQCAtNTc5LDEyICs1NzYsMTIgQEAKIAogICAgIGlmICh1c2VQcm9qZWN0RmlsZSkgewogICAgICAgaWYgKHNnLmVtcHR5KCkpIHsKLSAgICAgICAgKmZvdXQgPDwgIntjb21tZW50fSBPdGhlcnMiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgKmZvdXQgPDwgIntjb21tZW50fSBPdGhlcnMiIDw8ICdcbic7CiAgICAgICB9IGVsc2UgewotICAgICAgICAqZm91dCA8PCAie2NvbW1lbnR9ICIgPDwgc2cgPDwgc3RkOjplbmRsOworICAgICAgICAqZm91dCA8PCAie2NvbW1lbnR9ICIgPDwgc2cgPDwgJ1xuJzsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHNnLmVtcHR5KCkpIHsKLSAgICAgICpmb3V0IDw8ICJ7Y29tbWVudH0gT3RoZXJzIiA8PCBzdGQ6OmVuZGw7CisgICAgICAqZm91dCA8PCAie2NvbW1lbnR9IE90aGVyc1xuIjsKICAgICB9CiAKICAgICBpZiAoc2cgIT0gIkNNYWtlIFJ1bGVzIikgewpAQCAtNjEyLDcgKzYwOSw3IEBACiAgICAgICAgICAgY29tcGlsZSA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgKmZvdXQgPDwgY29tbWVudCA8PCBmbmFtZSA8PCBzdGQ6OmVuZGw7CisgICAgICAgICpmb3V0IDw8IGNvbW1lbnQgPDwgZm5hbWUgPDwgJ1xuJzsKICAgICAgICAgaWYgKGNvbXBpbGUpIHsKICAgICAgICAgICBpZiAoImxkIiAhPSBzaS0+R2V0RXh0ZW5zaW9uKCkgJiYgImludCIgIT0gc2ktPkdldEV4dGVuc2lvbigpICYmCiAgICAgICAgICAgICAgICJic3AiICE9IHNpLT5HZXRFeHRlbnNpb24oKSkgewpAQCAtNjI4LDcgKzYyNSw3IEBACiAgICAgICAgICAgc3RkOjpzdHJpbmcgb2JqZWN0TmFtZSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0T2JqZWN0TmFtZShzaSk7CiAgICAgICAgICAgaWYgKCFvYmplY3ROYW1lLmVtcHR5KCkgJiYKICAgICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5IYXNFeHBsaWNpdE9iamVjdE5hbWUoc2kpKSB7Ci0gICAgICAgICAgICAqZm91dCA8PCAiICAgIC1vICIgPDwgb2JqZWN0TmFtZSA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICAqZm91dCA8PCAiICAgIC1vICIgPDwgb2JqZWN0TmFtZSA8PCAnXG4nOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtNjk1LDE0ICs2OTIsMTQgQEAKICAgICovCiAgIGJvb2wgc3BlY2lmeUV4dHJhID0gdHJ1ZTsKICAgZm9yIChhdXRvJiBvdXQgOiBjY2cuR2V0T3V0cHV0cygpKSB7Ci0gICAgZm91dCA8PCBmbmFtZSA8PCBzdGQ6OmVuZGw7Ci0gICAgZm91dCA8PCAiICAgIDpvdXRwdXROYW1lPVwiIiA8PCBvdXQgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCBmbmFtZSA8PCAnXG4nOworICAgIGZvdXQgPDwgIiAgICA6b3V0cHV0TmFtZT1cIiIgPDwgb3V0IDw8ICJcIlxuIjsKICAgICBpZiAoc3BlY2lmeUV4dHJhKSB7CiAgICAgICBmb3IgKGF1dG8mIGJ5cCA6IGNjZy5HZXRCeXByb2R1Y3RzKCkpIHsKLSAgICAgICAgZm91dCA8PCAiICAgIDpleHRyYU91dHB1dEZpbGU9XCIiIDw8IGJ5cCA8PCAiXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgZm91dCA8PCAiICAgIDpleHRyYU91dHB1dEZpbGU9XCIiIDw8IGJ5cCA8PCAiXCJcbiI7CiAgICAgICB9CiAgICAgICBmb3IgKGF1dG8mIGRlcCA6IGNjZy5HZXREZXBlbmRzKCkpIHsKLSAgICAgICAgZm91dCA8PCAiICAgIDpkZXBlbmRzPVwiIiA8PCBkZXAgPDwgIlwiIiA8PCBzdGQ6OmVuZGw7CisgICAgICAgIGZvdXQgPDwgIiAgICA6ZGVwZW5kcz1cIiIgPDwgZGVwIDw8ICJcIlxuIjsKICAgICAgIH0KICAgICAgIHNwZWNpZnlFeHRyYSA9IGZhbHNlOwogICAgIH0KQEAgLTcxMiwyNSArNzA5LDI1IEBACiB2b2lkIGNtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3I6OldyaXRlT2JqZWN0TGFuZ092ZXJyaWRlKAogICBzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IGNtU291cmNlRmlsZSogc291cmNlRmlsZSkKIHsKLSAgY29uc3QgY2hhciogcmF3TGFuZ1Byb3AgPSBzb3VyY2VGaWxlLT5HZXRQcm9wZXJ0eSgiTEFOR1VBR0UiKTsKKyAgY21Qcm9wIHJhd0xhbmdQcm9wID0gc291cmNlRmlsZS0+R2V0UHJvcGVydHkoIkxBTkdVQUdFIik7CiAgIGlmIChudWxscHRyICE9IHJhd0xhbmdQcm9wKSB7Ci0gICAgc3RkOjpzdHJpbmcgc291cmNlTGFuZ1Byb3AocmF3TGFuZ1Byb3ApOworICAgIHN0ZDo6c3RyaW5nIHNvdXJjZUxhbmdQcm9wKCpyYXdMYW5nUHJvcCk7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGV4dGVuc2lvbiA9IHNvdXJjZUZpbGUtPkdldEV4dGVuc2lvbigpOwogICAgIGlmICgiQ1hYIiA9PSBzb3VyY2VMYW5nUHJvcCAmJiAoImMiID09IGV4dGVuc2lvbiB8fCAiQyIgPT0gZXh0ZW5zaW9uKSkgewotICAgICAgZm91dCA8PCAiICAgIC1kb3RjaXNjeHgiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvdXQgPDwgIiAgICAtZG90Y2lzY3h4XG4iOwogICAgIH0KICAgfQogfQogCiBib29sIGNtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3I6OkRldGVybWluZUlmSW50ZWdyaXR5QXBwKCkKIHsKLSAgY29uc3QgY2hhciogcCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoImdoc19pbnRlZ3JpdHlfYXBwIik7CisgIGNtUHJvcCBwID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiZ2hzX2ludGVncml0eV9hcHAiKTsKICAgaWYgKHApIHsKLSAgICByZXR1cm4gY21Jc09uKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoImdoc19pbnRlZ3JpdHlfYXBwIikpOworICAgIHJldHVybiBjbUlzT24oKnApOwogICB9CiAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IHNvdXJjZXM7CiAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U291cmNlRmlsZXMoc291cmNlcywgdGhpcy0+Q29uZmlnTmFtZSk7Ci0gIGZvciAoYXV0byYgc2YgOiBzb3VyY2VzKSB7CisgIGZvciAoY29uc3QgY21Tb3VyY2VGaWxlKiBzZiA6IHNvdXJjZXMpIHsKICAgICBpZiAoImludCIgPT0gc2YtPkdldEV4dGVuc2lvbigpKSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HaHNNdWx0aVRhcmdldEdlbmVyYXRvci5oIGIvU291cmNlL2NtR2hzTXVsdGlUYXJnZXRHZW5lcmF0b3IuaAppbmRleCBmMDNjYTQ0Li41ZjI2Mzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HaHNNdWx0aVRhcmdldEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdoc011bHRpVGFyZ2V0R2VuZXJhdG9yLmgKQEAgLTQzLDcgKzQzLDcgQEAKICAgdm9pZCBTZXRDb21waWxlckZsYWdzKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpOwogCi0gIHN0ZDo6c3RyaW5nIEdldERlZmluZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1Z2FlLAorICBzdGQ6OnN0cmluZyBHZXREZWZpbmVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKTsKIAogICB2b2lkIFdyaXRlSW5jbHVkZXMoc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYlZlcmlmaWNhdGlvbk1hbmFnZXIuY3h4IGIvU291cmNlL2NtR2xvYlZlcmlmaWNhdGlvbk1hbmFnZXIuY3h4CmluZGV4IDQ4MTc3NzMuLjlhYzVjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JWZXJpZmljYXRpb25NYW5hZ2VyLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iVmVyaWZpY2F0aW9uTWFuYWdlci5jeHgKQEAgLTM4LDYgKzM4LDggQEAKICAgICAgICAgICAgICAgICAgICA8PCBjbVZlcnNpb246OkdldE1ham9yVmVyc2lvbigpIDw8ICIuIgogICAgICAgICAgICAgICAgICAgIDw8IGNtVmVyc2lvbjo6R2V0TWlub3JWZXJzaW9uKCkgPDwgIlxuIjsKIAorICB2ZXJpZnlTY3JpcHRGaWxlIDw8ICJjbWFrZV9wb2xpY3koU0VUIENNUDAwMDkgTkVXKVxuIjsKKwogICBmb3IgKGF1dG8gY29uc3QmIGkgOiB0aGlzLT5DYWNoZSkgewogICAgIENhY2hlRW50cnlLZXkgayA9IHN0ZDo6Z2V0PDA+KGkpOwogICAgIENhY2hlRW50cnlWYWx1ZSB2ID0gc3RkOjpnZXQ8MT4oaSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yLmN4eAppbmRleCA1MWQ2ODFkLi4wNjk0M2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvci5jeHgKQEAgLTIsNiArMiwxMCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3IuaCIKIAorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlICJjbURvY3VtZW50YXRpb25FbnRyeS5oIgogI2luY2x1ZGUgImNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgpAQCAtMzUsMTUgKzM5LDE0IEBACiB9CiAKIC8vISBDcmVhdGUgYSBsb2NhbCBnZW5lcmF0b3IgYXBwcm9wcmlhdGUgdG8gdGhpcyBHbG9iYWwgR2VuZXJhdG9yCi1jbUxvY2FsR2VuZXJhdG9yKiBjbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvcjo6Q3JlYXRlTG9jYWxHZW5lcmF0b3IoCi0gIGNtTWFrZWZpbGUqIG1mKQorc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+CitjbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvcjo6Q3JlYXRlTG9jYWxHZW5lcmF0b3IoY21NYWtlZmlsZSogbWYpCiB7Ci0gIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZyA9Ci0gICAgbmV3IGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKHRoaXMsIG1mKTsKKyAgYXV0byBsZyA9IGNtOjptYWtlX3VuaXF1ZTxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4odGhpcywgbWYpOwogICBsZy0+U2V0TWFrZWZpbGVWYXJpYWJsZVNpemUoMzIpOwogICBsZy0+U2V0TWFrZUNvbW1hbmRFc2NhcGVUYXJnZXRUd2ljZSh0cnVlKTsKICAgbGctPlNldEJvcmxhbmRNYWtlQ3VybHlIYWNrKHRydWUpOwotICByZXR1cm4gbGc7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4oc3RkOjptb3ZlKGxnKSk7CiB9CiAKIHZvaWQgY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3I6OkdldERvY3VtZW50YXRpb24oCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvci5oCmluZGV4IGRhMDQ3NDMuLjNjOTc5NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvci5oCkBAIC00LDYgKzQsNyBAQAogI2RlZmluZSBjbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvcl9oCiAKICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogCiAjaW5jbHVkZSAiY21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yLmgiCiAKQEAgLTE2LDEwICsxNywxMCBAQAogewogcHVibGljOgogICBjbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvcihjbWFrZSogY20pOwotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCkKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKQogICB7Ci0gICAgcmV0dXJuIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Ci0gICAgICBjbUdsb2JhbEJvcmxhbmRNYWtlZmlsZUdlbmVyYXRvcj4oKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4oCisgICAgICBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PGNtR2xvYmFsQm9ybGFuZE1ha2VmaWxlR2VuZXJhdG9yPigpKTsKICAgfQogCiAgIC8vISBHZXQgdGhlIG5hbWUgZm9yIHRoZSBnZW5lcmF0b3IuCkBAIC0zMyw3ICszNCw4IEBACiAgIHN0YXRpYyB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KTsKIAogICAvLyEgQ3JlYXRlIGEgbG9jYWwgZ2VuZXJhdG9yIGFwcHJvcHJpYXRlIHRvIHRoaXMgR2xvYmFsIEdlbmVyYXRvcgotICBjbUxvY2FsR2VuZXJhdG9yKiBDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBDcmVhdGVMb2NhbEdlbmVyYXRvcigKKyAgICBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CiAKICAgLyoqCiAgICAqIFRyeSB0byBkZXRlcm1pbmUgc3lzdGVtIGluZm9ybWF0aW9uIHN1Y2ggYXMgc2hhcmVkIGxpYnJhcnkKQEAgLTQ0LDYgKzQ2LDcgQEAKIAogICBib29sIEFsbG93Tm90UGFyYWxsZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICBib29sIEFsbG93RGVsZXRlT25FcnJvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgIGJvb2wgQ2FuRXNjYXBlT2N0b3Rob3JwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogcHJvdGVjdGVkOgogICBzdGQ6OnZlY3RvcjxHZW5lcmF0ZWRNYWtlQ29tbWFuZD4gR2VuZXJhdGVCdWlsZENvbW1hbmQoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxDb21tb25HZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsQ29tbW9uR2VuZXJhdG9yLmN4eAppbmRleCA5ZmE0NDY3Li45ZTViYmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxDb21tb25HZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbENvbW1vbkdlbmVyYXRvci5jeHgKQEAgLTIsMTAgKzIsMTYgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtR2xvYmFsQ29tbW9uR2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKworI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZURpcmVjdG9yeS5oIgogI2luY2x1ZGUgImNtU3RhdGVTbmFwc2hvdC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgpAQCAtMjQsMzEgKzMwLDM1IEBACiBjbUdsb2JhbENvbW1vbkdlbmVyYXRvcjo6Q29tcHV0ZURpcmVjdG9yeVRhcmdldHMoKSBjb25zdAogewogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgRGlyZWN0b3J5VGFyZ2V0PiBkaXJUYXJnZXRzOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY3VycmVudEJpbmFyeURpcigKICAgICAgIGxnLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudEJpbmFyeSgpKTsKICAgICBEaXJlY3RvcnlUYXJnZXQmIGRpclRhcmdldCA9IGRpclRhcmdldHNbY3VycmVudEJpbmFyeURpcl07Ci0gICAgZGlyVGFyZ2V0LkxHID0gbGc7CisgICAgZGlyVGFyZ2V0LkxHID0gbGcuZ2V0KCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb25maWdzID0KKyAgICAgIGxnLT5HZXRNYWtlZmlsZSgpLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgICAvLyBUaGUgZGlyZWN0b3J5LWxldmVsIHJ1bGUgc2hvdWxkIGRlcGVuZCBvbiB0aGUgdGFyZ2V0LWxldmVsIHJ1bGVzCiAgICAgLy8gZm9yIGFsbCB0YXJnZXRzIGluIHRoZSBkaXJlY3RvcnkuCi0gICAgZm9yIChhdXRvIGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgZ3QgOiBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgY29uc3QgdHlwZSA9IGd0LT5HZXRUeXBlKCk7Ci0gICAgICBpZiAodHlwZSAhPSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUgJiYKLSAgICAgICAgICB0eXBlICE9IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkgJiYKLSAgICAgICAgICB0eXBlICE9IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgJiYKLSAgICAgICAgICB0eXBlICE9IGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlkgJiYKLSAgICAgICAgICB0eXBlICE9IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkgJiYKLSAgICAgICAgICB0eXBlICE9IGNtU3RhdGVFbnVtczo6VVRJTElUWSkgeworICAgICAgaWYgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUIHx8ICFndC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgICBEaXJlY3RvcnlUYXJnZXQ6OlRhcmdldCB0OwotICAgICAgdC5HVCA9IGd0OwotICAgICAgaWYgKGNvbnN0IGNoYXIqIGV4Y2x1ZGUgPSBndC0+R2V0UHJvcGVydHkoIkVYQ0xVREVfRlJPTV9BTEwiKSkgewotICAgICAgICBpZiAoY21Jc09uKGV4Y2x1ZGUpKSB7Ci0gICAgICAgICAgLy8gVGhpcyB0YXJnZXQgaGFzIGJlZW4gZXhwbGljaXRseSBleGNsdWRlZC4KLSAgICAgICAgICB0LkV4Y2x1ZGVGcm9tQWxsID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgIHQuR1QgPSBndC5nZXQoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIEVYQ0xVREVfRlJPTV9BTEwoIkVYQ0xVREVfRlJPTV9BTEwiKTsKKyAgICAgIGlmIChjbVByb3AgZXhjbHVkZSA9IGd0LT5HZXRQcm9wZXJ0eShFWENMVURFX0ZST01fQUxMKSkgeworICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiBjb25maWdzKSB7CisgICAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uSW50ZXJwcmV0ZXIgZ2VuZXhJbnRlcnByZXRlcihsZy5nZXQoKSwgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3QuZ2V0KCkpOworICAgICAgICAgIGlmIChjbUlzT24oZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqZXhjbHVkZSwgRVhDTFVERV9GUk9NX0FMTCkpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHRhcmdldCBoYXMgYmVlbiBleHBsaWNpdGx5IGV4Y2x1ZGVkLgorICAgICAgICAgICAgdC5FeGNsdWRlZEZyb21BbGxJbkNvbmZpZ3MucHVzaF9iYWNrKGNvbmZpZyk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHQuRXhjbHVkZWRGcm9tQWxsSW5Db25maWdzLmVtcHR5KCkpIHsKICAgICAgICAgICAvLyBUaGlzIHRhcmdldCBoYXMgYmVlbiBleHBsaWNpdGx5IHVuLWV4Y2x1ZGVkLiAgVGhlIGRpcmVjdG9yeS1sZXZlbAogICAgICAgICAgIC8vIHJ1bGUgZm9yIGV2ZXJ5IGRpcmVjdG9yeSBiZXR3ZWVuIHRoaXMgYW5kIHRoZSByb290IHNob3VsZCBkZXBlbmQKICAgICAgICAgICAvLyBvbiB0aGUgdGFyZ2V0LWxldmVsIHJ1bGUgZm9yIHRoaXMgdGFyZ2V0LgpAQCAtNzYsMyArODYsMTIgQEAKIAogICByZXR1cm4gZGlyVGFyZ2V0czsKIH0KKworYm9vbCBjbUdsb2JhbENvbW1vbkdlbmVyYXRvcjo6SXNFeGNsdWRlZEZyb21BbGxJbkNvbmZpZygKKyAgY29uc3QgRGlyZWN0b3J5VGFyZ2V0OjpUYXJnZXQmIHQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCit7CisgIGlmICh0aGlzLT5Jc011bHRpQ29uZmlnKCkpIHsKKyAgICByZXR1cm4gY206OmNvbnRhaW5zKHQuRXhjbHVkZWRGcm9tQWxsSW5Db25maWdzLCBjb25maWcpOworICB9CisgIHJldHVybiAhdC5FeGNsdWRlZEZyb21BbGxJbkNvbmZpZ3MuZW1wdHkoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbENvbW1vbkdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsQ29tbW9uR2VuZXJhdG9yLmgKaW5kZXggN2QxNmRhYy4uZjk3YjVmNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsQ29tbW9uR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsQ29tbW9uR2VuZXJhdG9yLmgKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBzdHJ1Y3QgVGFyZ2V0CiAgICAgewogICAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIEdUID0gbnVsbHB0cjsKLSAgICAgIGJvb2wgRXhjbHVkZUZyb21BbGwgPSBmYWxzZTsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBFeGNsdWRlZEZyb21BbGxJbkNvbmZpZ3M7CiAgICAgfTsKICAgICBzdGQ6OnZlY3RvcjxUYXJnZXQ+IFRhcmdldHM7CiAgICAgc3RydWN0IERpcgpAQCAtNDEsNiArNDEsOCBAQAogICAgIHN0ZDo6dmVjdG9yPERpcj4gQ2hpbGRyZW47CiAgIH07CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBEaXJlY3RvcnlUYXJnZXQ+IENvbXB1dGVEaXJlY3RvcnlUYXJnZXRzKCkgY29uc3Q7CisgIGJvb2wgSXNFeGNsdWRlZEZyb21BbGxJbkNvbmZpZyhjb25zdCBEaXJlY3RvcnlUYXJnZXQ6OlRhcmdldCYgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsR2VuZXJhdG9yLmN4eAppbmRleCA3NGJjZjdiLi5jYWQ1ZDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5jeHgKQEAgLTcsOSArNywxNCBAQAogI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDxjc3RkbGliPgogI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgogI2luY2x1ZGUgPGl0ZXJhdG9yPgogI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKICNpbmNsdWRlICJjbXN5cy9EaXJlY3RvcnkuaHh4IgogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgpAQCAtMzEsMTEgKzM2LDEzIEBACiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUluc3RhbGxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxpbmtMaW5lQ29tcHV0ZXIuaCIKKyNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NU1ZDNjBMaW5rTGluZUNvbXB1dGVyLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCkBAIC00Niw4ICs1Myw4IEBACiAjaW5jbHVkZSAiY21ha2UuaCIKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKLSMgIGluY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKLSMgIGluY2x1ZGUgImNtX2pzb25jcHBfd3JpdGVyLmgiCisjICBpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKyMgIGluY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KIAogIyAgaW5jbHVkZSAiY21DcnlwdG9IYXNoLmgiCiAjICBpbmNsdWRlICJjbVF0QXV0b0dlbkdsb2JhbEluaXRpYWxpemVyLmgiCkBAIC0xMjEsNiArMTI4LDcgQEAKIHsKICAgSnNvbjo6VmFsdWUgZ2VuZXJhdG9yID0gSnNvbjo6b2JqZWN0VmFsdWU7CiAgIGdlbmVyYXRvclsibmFtZSJdID0gdGhpcy0+R2V0TmFtZSgpOworICBnZW5lcmF0b3JbIm11bHRpQ29uZmlnIl0gPSB0aGlzLT5Jc011bHRpQ29uZmlnKCk7CiAgIHJldHVybiBnZW5lcmF0b3I7CiB9CiAjZW5kaWYKQEAgLTE2NSw3ICsxNzMsNyBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgY21HbG9iYWxHZW5lcmF0b3I6OlNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLAorYm9vbCBjbUdsb2JhbEdlbmVyYXRvcjo6U2V0R2VuZXJhdG9yVG9vbHNldChzdGQ6OnN0cmluZyBjb25zdCYgdHMsIGJvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mKQogewogICBpZiAodHMuZW1wdHkoKSkgewpAQCAtMjI1LDggKzIzMywxNiBAQAogICBpZiAoIW9wdGlvbmFsICYmIChwYXRoLmVtcHR5KCkgfHwgIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMocGF0aCkpKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBjbmFtZSA9CisgIGNtUHJvcCBjbmFtZSA9CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUobGFuZ0NvbXApOworCisgIC8vIFNwbGl0IGNvbXBpbGVyIGZyb20gYXJndW1lbnRzCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbmFtZUFyZ1ZlYzsKKyAgaWYgKGNuYW1lICYmICFjbmFtZS0+ZW1wdHkoKSkgeworICAgIGNtRXhwYW5kTGlzdCgqY25hbWUsIGNuYW1lQXJnVmVjKTsKKyAgICBjbmFtZSA9ICZjbmFtZUFyZ1ZlYy5mcm9udCgpOworICB9CisKICAgc3RkOjpzdHJpbmcgY2hhbmdlVmFyczsKICAgaWYgKGNuYW1lICYmICFvcHRpb25hbCkgewogICAgIHN0ZDo6c3RyaW5nIGNuYW1lU3RyaW5nOwpAQCAtMjQwLDExICsyNTYsMTAgQEAKICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhjbmFtZVN0cmluZyk7CiAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMocGF0aFN0cmluZyk7CiAgICAgaWYgKGNuYW1lU3RyaW5nICE9IHBhdGhTdHJpbmcpIHsKLSAgICAgIGNvbnN0IGNoYXIqIGN2YXJzID0KLSAgICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgKLSAgICAgICAgICAiX19DTUFLRV9ERUxFVEVfQ0FDSEVfQ0hBTkdFX1ZBUlNfIik7CisgICAgICBjbVByb3AgY3ZhcnMgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAorICAgICAgICAiX19DTUFLRV9ERUxFVEVfQ0FDSEVfQ0hBTkdFX1ZBUlNfIik7CiAgICAgICBpZiAoY3ZhcnMpIHsKLSAgICAgICAgY2hhbmdlVmFycyArPSBjdmFyczsKKyAgICAgICAgY2hhbmdlVmFycyArPSAqY3ZhcnM7CiAgICAgICAgIGNoYW5nZVZhcnMgKz0gIjsiOwogICAgICAgfQogICAgICAgY2hhbmdlVmFycyArPSBsYW5nQ29tcDsKQEAgLTI2NCw4ICsyNzksOCBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6QWRkQnVpbGRFeHBvcnRFeHBvcnRTZXQoCiAgIGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBnZW4pCiB7Ci0gIHRoaXMtPkJ1aWxkRXhwb3J0U2V0c1tnZW4tPkdldE1haW5FeHBvcnRGaWxlTmFtZSgpXSA9IGdlbjsKICAgdGhpcy0+QnVpbGRFeHBvcnRFeHBvcnRTZXRzW2dlbi0+R2V0TWFpbkV4cG9ydEZpbGVOYW1lKCldID0gZ2VuOworICB0aGlzLT5BZGRCdWlsZEV4cG9ydFNldChnZW4pOwogfQogCiBib29sIGNtR2xvYmFsR2VuZXJhdG9yOjpHZW5lcmF0ZUltcG9ydEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGUpCkBAIC0yNzUsMTMgKzI5MCwxMSBAQAogICAgIGJvb2wgcmVzdWx0ID0gaXQtPnNlY29uZC0+R2VuZXJhdGVJbXBvcnRGaWxlKCk7CiAKICAgICBpZiAoIXRoaXMtPkNvbmZpZ3VyZURvbmVDTVAwMDI2QW5kQ01QMDAyNCkgewotICAgICAgZm9yIChjbU1ha2VmaWxlKiBtIDogdGhpcy0+TWFrZWZpbGVzKSB7CisgICAgICBmb3IgKGNvbnN0IGF1dG8mIG0gOiB0aGlzLT5NYWtlZmlsZXMpIHsKICAgICAgICAgbS0+UmVtb3ZlRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yQ01QMDAyNChpdC0+c2Vjb25kKTsKICAgICAgIH0KICAgICB9CiAKLSAgICBkZWxldGUgaXQtPnNlY29uZDsKLSAgICBpdC0+c2Vjb25kID0gbnVsbHB0cjsKICAgICB0aGlzLT5CdWlsZEV4cG9ydFNldHMuZXJhc2UoaXQpOwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KQEAgLTI5NSwyOSArMzA4LDE0IEBACiBib29sIGNtR2xvYmFsR2VuZXJhdG9yOjpDaGVja1RhcmdldHNGb3JNaXNzaW5nU291cmNlcygpIGNvbnN0CiB7CiAgIGJvb2wgZmFpbGVkID0gZmFsc2U7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiBsb2NhbEdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7Ci0gICAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlOjpHTE9CQUxfVEFSR0VUIHx8Ci0gICAgICAgICAgdGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlOjpJTlRFUkZBQ0VfTElCUkFSWSB8fAotICAgICAgICAgIHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZTo6VVRJTElUWSB8fAorICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiBsb2NhbEdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgICBpZiAoIXRhcmdldC0+Q2FuQ29tcGlsZVNvdXJjZXMoKSB8fAogICAgICAgICAgIGNtSXNPbih0YXJnZXQtPkdldFByb3BlcnR5KCJnaHNfaW50ZWdyaXR5X2FwcCIpKSkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIAotICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7Ci0gICAgICB0YXJnZXQtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdzKTsKLSAgICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IHNyY3M7Ci0gICAgICBpZiAoY29uZmlncy5lbXB0eSgpKSB7Ci0gICAgICAgIHRhcmdldC0+R2V0U291cmNlRmlsZXMoc3JjcywgIiIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnIDogY29uZmlncykgewotICAgICAgICAgIHRhcmdldC0+R2V0U291cmNlRmlsZXMoc3JjcywgY29uZmlnKTsKLSAgICAgICAgICBpZiAoc3Jjcy5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChzcmNzLmVtcHR5KCkpIHsKKyAgICAgIGlmICh0YXJnZXQtPkdldEFsbENvbmZpZ1NvdXJjZXMoKS5lbXB0eSgpKSB7CiAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwogICAgICAgICBlIDw8ICJObyBTT1VSQ0VTIGdpdmVuIHRvIHRhcmdldDogIiA8PCB0YXJnZXQtPkdldE5hbWUoKTsKICAgICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoCkBAIC0zMzUsMTIgKzMzMywxMyBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogICBib29sIGZhaWxlZCA9IGZhbHNlOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGdlbmVyYXRvciA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IGdlbmVyYXRvci0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgZ2VuZXJhdG9yIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiBnZW5lcmF0b3ItPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSAmJgogICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woIldJTjMyX0VYRUNVVEFCTEUiKSkgewogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MgPQotICAgICAgICAgIHRhcmdldC0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoKTsKKyAgICAgICAgICB0YXJnZXQtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgICAgICAgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnIDogY29uZmlncykgewogICAgICAgICAgIGlmICh0YXJnZXQtPkdldExpbmtlckxhbmd1YWdlKGNvbmZpZykgPT0gIlN3aWZ0IikgewogICAgICAgICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoCkBAIC0zNjMsMTggKzM2MiwxNiBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogICBib29sIGZhaWxlZCA9IGZhbHNlOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGdlbmVyYXRvciA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IGdlbmVyYXRvci0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7Ci0gICAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlOjpHTE9CQUxfVEFSR0VUIHx8Ci0gICAgICAgICAgdGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlOjpJTlRFUkZBQ0VfTElCUkFSWSB8fAotICAgICAgICAgIHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZTo6VVRJTElUWSB8fAorICBmb3IgKGNvbnN0IGF1dG8mIGdlbmVyYXRvciA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogZ2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICAgIGlmICghdGFyZ2V0LT5DYW5Db21waWxlU291cmNlcygpIHx8CiAgICAgICAgICAgY21Jc09uKHRhcmdldC0+R2V0UHJvcGVydHkoImdoc19pbnRlZ3JpdHlfYXBwIikpKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyByZXVzZUZyb20gPQorICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHJldXNlRnJvbSA9CiAgICAgICAgIHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJQUkVDT01QSUxFX0hFQURFUlNfUkVVU0VfRlJPTSIpOwotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgY29tcGlsZVBkYiA9CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29tcGlsZVBkYiA9CiAgICAgICAgIHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJDT01QSUxFX1BEQl9OQU1FIik7CiAKICAgICAgIGlmICghcmV1c2VGcm9tLmVtcHR5KCkgJiYgcmV1c2VGcm9tICE9IGNvbXBpbGVQZGIpIHsKQEAgLTQwMCw3ICszOTcsNyBAQAogICBpZiAoaXQgPT0gdGhpcy0+QnVpbGRFeHBvcnRTZXRzLmVuZCgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIHJldHVybiAhY21Db250YWlucyh0aGlzLT5CdWlsZEV4cG9ydEV4cG9ydFNldHMsIGZpbGVuYW1lKTsKKyAgcmV0dXJuICFjbTo6Y29udGFpbnModGhpcy0+QnVpbGRFeHBvcnRFeHBvcnRTZXRzLCBmaWxlbmFtZSk7CiB9CiAKIC8vIEZpbmQgdGhlIG1ha2UgcHJvZ3JhbSBmb3IgdGhlIGdlbmVyYXRvciwgcmVxdWlyZWQgZm9yIHRyeSBjb21waWxlcwpAQCAtNDEyLDE1ICs0MDksMTMgQEAKICAgICAgICJhbGwgZ2VuZXJhdG9ycyBtdXN0IHNwZWNpZnkgdGhpcy0+RmluZE1ha2VQcm9ncmFtRmlsZSIpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBpZiAoIW1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iKSB8fAotICAgICAgY21Jc09mZihtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfTUFLRV9QUk9HUkFNIikpKSB7CisgIGlmIChjbUlzT2ZmKG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iKSkpIHsKICAgICBzdGQ6OnN0cmluZyBzZXRNYWtlUHJvZ3JhbSA9IG1mLT5HZXRNb2R1bGVzRmlsZSh0aGlzLT5GaW5kTWFrZVByb2dyYW1GaWxlKTsKICAgICBpZiAoIXNldE1ha2VQcm9ncmFtLmVtcHR5KCkpIHsKICAgICAgIG1mLT5SZWFkTGlzdEZpbGUoc2V0TWFrZVByb2dyYW0pOwogICAgIH0KICAgfQotICBpZiAoIW1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iKSB8fAotICAgICAgY21Jc09mZihtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfTUFLRV9QUk9HUkFNIikpKSB7CisgIGlmIChjbUlzT2ZmKG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iKSkpIHsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZXJyOwogICAgIGVyciA8PCAiQ01ha2Ugd2FzIHVuYWJsZSB0byBmaW5kIGEgYnVpbGQgcHJvZ3JhbSBjb3JyZXNwb25kaW5nIHRvIFwiIgogICAgICAgICA8PCB0aGlzLT5HZXROYW1lKCkgPDwgIlwiLiAgQ01BS0VfTUFLRV9QUk9HUkFNIGlzIG5vdCBzZXQuICBZb3UgIgpAQCAtNDQxLDggKzQzNiw4IEBACiAgICAgY21TeXN0ZW1Ub29sczo6R2V0U2hvcnRQYXRoKG1ha2VQcm9ncmFtLCBtYWtlUHJvZ3JhbSk7CiAgICAgY21TeXN0ZW1Ub29sczo6U3BsaXRQcm9ncmFtUGF0aChtYWtlUHJvZ3JhbSwgZGlyLCBmaWxlKTsKICAgICBtYWtlUHJvZ3JhbSA9IGNtU3RyQ2F0KGRpciwgJy8nLCBzYXZlRmlsZSk7Ci0gICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfTUFLRV9QUk9HUkFNIiwgbWFrZVByb2dyYW0uY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWtlIHByb2dyYW0iLCBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKKyAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9NQUtFX1BST0dSQU0iLCBtYWtlUHJvZ3JhbSwgIm1ha2UgcHJvZ3JhbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKICAgfQogICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUyNiw3ICs1MjEsNyBAQAogICAgICAgaWYgKGxhbmcgPT0gIk5PTkUiKSB7CiAgICAgICAgIHRoaXMtPlNldExhbmd1YWdlRW5hYmxlZCgiTk9ORSIsIG1mKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY21Db250YWlucyh0aGlzLT5MYW5ndWFnZXNSZWFkeSwgbGFuZykpIHsKKyAgICAgICAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+TGFuZ3VhZ2VzUmVhZHksIGxhbmcpKSB7CiAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICAgICAgZSA8PCAiVGhlIHRlc3QgcHJvamVjdCBuZWVkcyBsYW5ndWFnZSAiIDw8IGxhbmcKICAgICAgICAgICAgIDw8ICIgd2hpY2ggaXMgbm90IGVuYWJsZWQuIjsKQEAgLTU4Myw2ICs1NzgsMTYgQEAKICAgICAgIG1mLT5SZWFkTGlzdEZpbGUoZnBhdGgpOwogICAgIH0KICAgfQorCisgIGlmIChyZWFkQ01ha2VTeXN0ZW0pIHsKKyAgICAvLyBGaW5kIHRoZSBuYXRpdmUgYnVpbGQgdG9vbCBmb3IgdGhpcyBnZW5lcmF0b3IuCisgICAgLy8gVGhpcyBoYXMgdG8gYmUgZG9uZSBlYXJseSBzbyB0aGF0IE1TQnVpbGQgY2FuIGJlIHVzZWQgdG8gZXhhbWluZSB0aGUKKyAgICAvLyBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudC4KKyAgICBpZiAoIXRoaXMtPkZpbmRNYWtlUHJvZ3JhbShtZikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKwogICAvLyAgTG9hZCB0aGUgQ01ha2VEZXRlcm1pbmVTeXN0ZW0uY21ha2UgZmlsZSBhbmQgZmluZCBvdXQKICAgLy8gd2hhdCBwbGF0Zm9ybSB3ZSBhcmUgcnVubmluZyBvbgogICBpZiAoIW1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9TWVNURU0iKSkgewpAQCAtNjUwLDE1ICs2NTUsMTAgQEAKIAogICAgIC8vIFRlbGwgdGhlIGdlbmVyYXRvciBhYm91dCB0aGUgdG9vbHNldCwgaWYgYW55LgogICAgIHN0ZDo6c3RyaW5nIHRvb2xzZXQgPSBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIik7Ci0gICAgaWYgKCF0aGlzLT5TZXRHZW5lcmF0b3JUb29sc2V0KHRvb2xzZXQsIG1mKSkgeworICAgIGlmICghdGhpcy0+U2V0R2VuZXJhdG9yVG9vbHNldCh0b29sc2V0LCBmYWxzZSwgbWYpKSB7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOwogICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIC8vIEZpbmQgdGhlIG5hdGl2ZSBidWlsZCB0b29sIGZvciB0aGlzIGdlbmVyYXRvci4KLSAgICBpZiAoIXRoaXMtPkZpbmRNYWtlUHJvZ3JhbShtZikpIHsKLSAgICAgIHJldHVybjsKLSAgICB9CiAgIH0KIAogICAvLyBDaGVjayB0aGF0IHRoZSBsYW5ndWFnZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgZ2VuZXJhdG9yIGFuZCBpdHMKQEAgLTc4MSw3ICs3ODEsNyBAQAogICAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVyRW52ID0gY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfQ09NUElMRVJfRU5WX1ZBUiIpOwogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBub0NvbXBpbGVyOwogICAgIGNvbnN0IGNoYXIqIGNvbXBpbGVyRmlsZSA9IG1mLT5HZXREZWZpbml0aW9uKGNvbXBpbGVyTmFtZSk7Ci0gICAgaWYgKCFjb21waWxlckZpbGUgfHwgISpjb21waWxlckZpbGUgfHwgY21Jc05PVEZPVU5EKGNvbXBpbGVyRmlsZSkpIHsKKyAgICBpZiAoIWNtTm9uZW1wdHkoY29tcGlsZXJGaWxlKSB8fCBjbUlzTk9URk9VTkQoY29tcGlsZXJGaWxlKSkgewogICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICAgICAgbm9Db21waWxlciA8PAogICAgICAgICAiTm8gIiA8PCBjb21waWxlck5hbWUgPDwgIiBjb3VsZCBiZSBmb3VuZC5cbiIKQEAgLTEwOTEsNyArMTA5MSw3IEBACiB7CiAgIC8vIHVzZSBMYW5ndWFnZVRvTGlua2VyUHJlZmVyZW5jZSB0byBkZXRlY3Qgd2hldGhlciB0aGlzIGZ1bmN0aW9ucyBoYXMKICAgLy8gcnVuIGJlZm9yZQotICBpZiAoY21Db250YWlucyh0aGlzLT5MYW5ndWFnZVRvTGlua2VyUHJlZmVyZW5jZSwgbCkpIHsKKyAgaWYgKGNtOjpjb250YWlucyh0aGlzLT5MYW5ndWFnZVRvTGlua2VyUHJlZmVyZW5jZSwgbCkpIHsKICAgICByZXR1cm47CiAgIH0KIApAQCAtMTE5OSwxMyArMTE5OSwxMiBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6Q3JlYXRlTG9jYWxHZW5lcmF0b3JzKCkKIHsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JTZWFyY2hJbmRleC5jbGVhcigpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuY2xlYXIoKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLnJlc2VydmUodGhpcy0+TWFrZWZpbGVzLnNpemUoKSk7Ci0gIGZvciAoY21NYWtlZmlsZSogbSA6IHRoaXMtPk1ha2VmaWxlcykgewotICAgIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0gdGhpcy0+Q3JlYXRlTG9jYWxHZW5lcmF0b3IobSk7Ci0gICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLnB1c2hfYmFjayhsZyk7Ci0gICAgdGhpcy0+SW5kZXhMb2NhbEdlbmVyYXRvcihsZyk7CisgIGZvciAoY29uc3QgYXV0byYgbSA6IHRoaXMtPk1ha2VmaWxlcykgeworICAgIGF1dG8gbGcgPSB0aGlzLT5DcmVhdGVMb2NhbEdlbmVyYXRvcihtLmdldCgpKTsKKyAgICB0aGlzLT5JbmRleExvY2FsR2VuZXJhdG9yKGxnLmdldCgpKTsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMucHVzaF9iYWNrKHN0ZDo6bW92ZShsZykpOwogICB9CiB9CiAKQEAgLTEyMjEsOSArMTIyMCwxMCBAQAogICBzbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5TZXRDdXJyZW50QmluYXJ5KAogICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSk7CiAKLSAgY21NYWtlZmlsZSogZGlyTWYgPSBuZXcgY21NYWtlZmlsZSh0aGlzLCBzbmFwc2hvdCk7CisgIGF1dG8gZGlyTWZ1ID0gY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGU+KHRoaXMsIHNuYXBzaG90KTsKKyAgYXV0byBkaXJNZiA9IGRpck1mdS5nZXQoKTsKKyAgdGhpcy0+TWFrZWZpbGVzLnB1c2hfYmFjayhzdGQ6Om1vdmUoZGlyTWZ1KSk7CiAgIGRpck1mLT5TZXRSZWN1cnNpb25EZXB0aCh0aGlzLT5SZWN1cnNpb25EZXB0aCk7Ci0gIHRoaXMtPk1ha2VmaWxlcy5wdXNoX2JhY2soZGlyTWYpOwogICB0aGlzLT5JbmRleE1ha2VmaWxlKGRpck1mKTsKIAogICB0aGlzLT5CaW5hcnlEaXJlY3Rvcmllcy5pbnNlcnQoCkBAIC0xMjQxLDExICsxMjQxLDExIEBACiAgICAgc3RkOjp2ZWN0b3I8R2xvYmFsVGFyZ2V0SW5mbz4gZ2xvYmFsVGFyZ2V0czsKICAgICB0aGlzLT5DcmVhdGVEZWZhdWx0R2xvYmFsVGFyZ2V0cyhnbG9iYWxUYXJnZXRzKTsKIAotICAgIGZvciAoY21NYWtlZmlsZSogbWYgOiB0aGlzLT5NYWtlZmlsZXMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG1mIDogdGhpcy0+TWFrZWZpbGVzKSB7CiAgICAgICBhdXRvJiB0YXJnZXRzID0gbWYtPkdldFRhcmdldHMoKTsKICAgICAgIGZvciAoR2xvYmFsVGFyZ2V0SW5mbyBjb25zdCYgZ2xvYmFsVGFyZ2V0IDogZ2xvYmFsVGFyZ2V0cykgewogICAgICAgICB0YXJnZXRzLmVtcGxhY2UoZ2xvYmFsVGFyZ2V0Lk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVHbG9iYWxUYXJnZXQoZ2xvYmFsVGFyZ2V0LCBtZikpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlR2xvYmFsVGFyZ2V0KGdsb2JhbFRhcmdldCwgbWYuZ2V0KCkpKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTEyNTgsMTAgKzEyNTgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm51bWJlciBvZiBsb2NhbCBnZW5lcmF0b3JzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOwogCi0gIC8vIGNoZWNrIGZvciBsaW5rIGxpYnJhcmllcyBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcyBjb250YWluaW5nICJOT1RGT1VORCIKLSAgLy8gYW5kIGZvciBpbmZpbml0ZSBsb29wcwotICB0aGlzLT5DaGVja1RhcmdldFByb3BlcnRpZXMoKTsKLQogICBpZiAodGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0V29ya2luZ01vZGUoKSA9PSBjbWFrZTo6Tk9STUFMX01PREUpIHsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwogICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRFcnJvck9jY3VyZWRGbGFnKCkpIHsKQEAgLTEyODQsNiArMTI4MCwxMCBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6Q3JlYXRlR2VuZXJhdGlvbk9iamVjdHMoVGFyZ2V0VHlwZXMgdGFyZ2V0VHlwZXMpCiB7CiAgIHRoaXMtPkNyZWF0ZUxvY2FsR2VuZXJhdG9ycygpOworICAvLyBDb21taXQgc2lkZSBlZmZlY3RzIG9ubHkgaWYgd2UgYXJlIGFjdHVhbGx5IGdlbmVyYXRpbmcKKyAgaWYgKHRoaXMtPkdldENvbmZpZ3VyZURvbmVDTVAwMDI2KCkpIHsKKyAgICB0aGlzLT5DaGVja1RhcmdldFByb3BlcnRpZXMoKTsKKyAgfQogICB0aGlzLT5DcmVhdGVHZW5lcmF0b3JUYXJnZXRzKHRhcmdldFR5cGVzKTsKICAgdGhpcy0+Q29tcHV0ZUJ1aWxkRmlsZUdlbmVyYXRvcnMoKTsKIH0KQEAgLTEyOTQsOCArMTI5NCwxMSBAQAogewogICB0aGlzLT5DcmVhdGVHZW5lcmF0aW9uT2JqZWN0cyhJbXBvcnRlZE9ubHkpOwogICBhdXRvIGNvbnN0IG1maXQgPQotICAgIHN0ZDo6ZmluZCh0aGlzLT5NYWtlZmlsZXMuYmVnaW4oKSwgdGhpcy0+TWFrZWZpbGVzLmVuZCgpLCBtZik7Ci0gIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0KKyAgICBzdGQ6OmZpbmRfaWYodGhpcy0+TWFrZWZpbGVzLmJlZ2luKCksIHRoaXMtPk1ha2VmaWxlcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgW21mXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZT4mIGl0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXQoKSA9PSBtZjsKKyAgICAgICAgICAgICAgICAgfSk7CisgIGF1dG8mIGxnID0KICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbc3RkOjpkaXN0YW5jZSh0aGlzLT5NYWtlZmlsZXMuYmVnaW4oKSwgbWZpdCldOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiB0IDogdGFyZ2V0cykgewogICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IGxnLT5GaW5kR2VuZXJhdG9yVGFyZ2V0VG9Vc2UodCk7CkBAIC0xMzQ1LDE2ICsxMzQ4LDUxIEBACiB2b2lkIGNtR2xvYmFsR2VuZXJhdG9yOjpDb21wdXRlQnVpbGRGaWxlR2VuZXJhdG9ycygpCiB7CiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLnNpemUoKTsgKytpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqPiBnZW5zID0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3I+PiBjb25zdCYgZ2VucyA9CiAgICAgICB0aGlzLT5NYWtlZmlsZXNbaV0tPkdldEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMoKTsKLSAgICBmb3IgKGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBnIDogZ2VucykgewotICAgICAgZy0+Q29tcHV0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV0pOworICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yPiBjb25zdCYgZyA6IGdlbnMpIHsKKyAgICAgIGctPkNvbXB1dGUodGhpcy0+TG9jYWxHZW5lcmF0b3JzW2ldLmdldCgpKTsKICAgICB9CiAgIH0KIH0KIAorYm9vbCBjbUdsb2JhbEdlbmVyYXRvcjo6VW5zdXBwb3J0ZWRWYXJpYWJsZUlzRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdXBwb3J0ZWQpIGNvbnN0Cit7CisgIGlmICghc3VwcG9ydGVkICYmIHRoaXMtPk1ha2VmaWxlcy5mcm9udCgpLT5HZXREZWZpbml0aW9uKG5hbWUpKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIGUgPDwKKyAgICAgICJHZW5lcmF0b3JcbiIKKyAgICAgICIgICIgPDwgdGhpcy0+R2V0TmFtZSgpIDw8ICJcbiIKKyAgICAgICJkb2VzIG5vdCBzdXBwb3J0IHZhcmlhYmxlXG4iCisgICAgICAiICAiIDw8IG5hbWUgPDwgIlxuIgorICAgICAgImJ1dCBpdCBoYXMgYmVlbiBzcGVjaWZpZWQuIgorICAgICAgOworICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgY21HbG9iYWxHZW5lcmF0b3I6OkNvbXB1dGUoKQogeworICAvLyBNYWtlIHN1cmUgdW5zdXBwb3J0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4KKyAgaWYgKHRoaXMtPlVuc3VwcG9ydGVkVmFyaWFibGVJc0RlZmluZWQoIkNNQUtFX0RFRkFVTFRfQlVJTERfVFlQRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlN1cHBvcnRzRGVmYXVsdEJ1aWxkVHlwZSgpKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAodGhpcy0+VW5zdXBwb3J0ZWRWYXJpYWJsZUlzRGVmaW5lZCgiQ01BS0VfQ1JPU1NfQ09ORklHUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlN1cHBvcnRzQ3Jvc3NDb25maWdzKCkpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmICh0aGlzLT5VbnN1cHBvcnRlZFZhcmlhYmxlSXNEZWZpbmVkKCJDTUFLRV9ERUZBVUxUX0NPTkZJR1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5TdXBwb3J0c0RlZmF1bHRDb25maWdzKCkpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgLy8gU29tZSBnZW5lcmF0b3JzIHRyYWNrIGZpbGVzIHJlcGxhY2VkIGR1cmluZyB0aGUgR2VuZXJhdGUuCiAgIC8vIFN0YXJ0IHdpdGggYW4gZW1wdHkgdmVjdG9yOgogICB0aGlzLT5GaWxlc1JlcGxhY2VkRHVyaW5nR2VuZXJhdGUuY2xlYXIoKTsKQEAgLTEzNzYsMzcgKzE0MTQsMzUgQEAKICAgLy8gc28gY3JlYXRlIHRoZSBtYXAgZnJvbSBwcm9qZWN0IG5hbWUgdG8gdmVjdG9yIG9mIGxvY2FsIGdlbmVyYXRvcnMKICAgdGhpcy0+RmlsbFByb2plY3RNYXAoKTsKIAotICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHRhcmdldHMgYW5kIHNldCB1cCBBVVRPTU9DLCBBVVRPVUlDIGFuZCBBVVRPUkNDCi0gIGlmICghdGhpcy0+UXRBdXRvR2VuKCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQogICAvLyBBZGQgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgc291cmNlcyAoZS5nLiB1bml0eSBidWlsZCkuCiAgIGlmICghdGhpcy0+QWRkQXV0b21hdGljU291cmNlcygpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKKyAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCB0YXJnZXRzIGFuZCBzZXQgdXAgQVVUT01PQywgQVVUT1VJQyBhbmQgQVVUT1JDQworICBpZiAoIXRoaXMtPlF0QXV0b0dlbigpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgLy8gQWRkIGdlbmVyYXRvciBzcGVjaWZpYyBoZWxwZXIgY29tbWFuZHMKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgbG9jYWxHZW4tPkFkZEhlbHBlckNvbW1hbmRzKCk7CiAgIH0KIAotICAvLyBGaW5hbGl6ZSB0aGUgc2V0IG9mIGNvbXBpbGUgZmVhdHVyZXMgZm9yIGVhY2ggdGFyZ2V0LgotICAvLyBGSVhNRTogVGhpcyB0dXJucyBpbnRvIGNhbGxzIHRvIGNtTWFrZWZpbGU6OkFkZFJlcXVpcmVkVGFyZ2V0RmVhdHVyZQotICAvLyB3aGljaCBhY3R1YWxseSBtb2RpZmllcyB0aGUgPGxhbmc+X1NUQU5EQVJEIHRhcmdldCBwcm9wZXJ0eQotICAvLyBvbiB0aGUgb3JpZ2luYWwgY21UYXJnZXQgaW5zdGFuY2UuICBJdCBhY2N1bXVsYXRlcyBmZWF0dXJlcwotICAvLyBhY3Jvc3MgYWxsIGNvbmZpZ3VyYXRpb25zLiAgU29tZSByZWZhY3RvcmluZyBpcyBuZWVkZWQgdG8KLSAgLy8gY29tcHV0ZSBhIHBlci1jb25maWcgcmVzdWx0YSBwdXJlbHkgZHVyaW5nIGdlbmVyYXRpb24uCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgLy8gUGVyZm9ybSB1cC1mcm9udCBjb21wdXRhdGlvbiBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIChzdWNoIGFzIHVua25vd24KKyAgLy8gZmVhdHVyZXMpIGF0IHRoaXMgcG9pbnQuIFdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvbXBpbGUgZmVhdHVyZXMgd2UgYWxzbworICAvLyBjYWxjdWxhdGUgYW5kIGNhY2hlIHRoZSBsYW5ndWFnZSBzdGFuZGFyZCByZXF1aXJlZCBieSB0aGUgY29tcGlsZQorICAvLyBmZWF0dXJlcy4KKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIGlmICghbG9jYWxHZW4tPkNvbXB1dGVUYXJnZXRDb21waWxlRmVhdHVyZXMoKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgfQogCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIGNtTWFrZWZpbGUqIG1mID0gbG9jYWxHZW4tPkdldE1ha2VmaWxlKCk7Ci0gICAgZm9yIChjbUluc3RhbGxHZW5lcmF0b3IqIGcgOiBtZi0+R2V0SW5zdGFsbEdlbmVyYXRvcnMoKSkgewotICAgICAgaWYgKCFnLT5Db21wdXRlKGxvY2FsR2VuKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgZyA6IG1mLT5HZXRJbnN0YWxsR2VuZXJhdG9ycygpKSB7CisgICAgICBpZiAoIWctPkNvbXB1dGUobG9jYWxHZW4uZ2V0KCkpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICB9CkBAIC0xNDE2LDcgKzE0NTIsNyBAQAogCiAgIC8vIFRyYWNlIHRoZSBkZXBlbmRlbmNpZXMsIGFmdGVyIHRoYXQgbm8gY3VzdG9tIGNvbW1hbmRzIHNob3VsZCBiZSBhZGRlZAogICAvLyBiZWNhdXNlIHRoZWlyIGRlcGVuZGVuY2llcyBtaWdodCBub3QgYmUgaGFuZGxlZCBjb3JyZWN0bHkKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgbG9jYWxHZW4tPlRyYWNlRGVwZW5kZW5jaWVzKCk7CiAgIH0KIApAQCAtMTQyOCw3ICsxNDY0LDcgQEAKICAgdGhpcy0+Rm9yY2VMaW5rZXJMYW5ndWFnZXMoKTsKIAogICAvLyBDb21wdXRlIHRoZSBtYW5pZmVzdCBvZiBtYWluIHRhcmdldHMgZ2VuZXJhdGVkLgotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICBsb2NhbEdlbi0+Q29tcHV0ZVRhcmdldE1hbmlmZXN0KCk7CiAgIH0KIApAQCAtMTQ0NSw3ICsxNDgxLDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICBsb2NhbEdlbi0+Q29tcHV0ZUhvbWVSZWxhdGl2ZU91dHB1dFBhdGgoKTsKICAgfQogCkBAIC0xNDYwLDYgKzE0OTYsOCBAQAogCiAgIHRoaXMtPlByb2Nlc3NFdmFsdWF0aW9uRmlsZXMoKTsKIAorICB0aGlzLT5DTWFrZUluc3RhbmNlLT5VcGRhdGVQcm9ncmVzcygiR2VuZXJhdGluZyIsIDAuMWYpOworCiAgIC8vIEdlbmVyYXRlIHByb2plY3QgZmlsZXMKICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuc2l6ZSgpOyArK2kpIHsKICAgICB0aGlzLT5TZXRDdXJyZW50TWFrZWZpbGUodGhpcy0+TG9jYWxHZW5lcmF0b3JzW2ldLT5HZXRNYWtlZmlsZSgpKTsKQEAgLTE0NzEsOCArMTUwOSw5IEBACiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzW2ldLT5HZW5lcmF0ZVRlc3RGaWxlcygpOwogICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPlVwZGF0ZVByb2dyZXNzKAogICAgICAgIkdlbmVyYXRpbmciLAotICAgICAgKHN0YXRpY19jYXN0PGZsb2F0PihpKSArIDEuMGYpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRoaXMtPkxvY2FsR2VuZXJhdG9ycy5zaXplKCkpKTsKKyAgICAgIDAuMWYgKworICAgICAgICAwLjlmICogKHN0YXRpY19jYXN0PGZsb2F0PihpKSArIDEuMGYpIC8KKyAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4odGhpcy0+TG9jYWxHZW5lcmF0b3JzLnNpemUoKSkpOwogICB9CiAgIHRoaXMtPlNldEN1cnJlbnRNYWtlZmlsZShudWxscHRyKTsKIApAQCAtMTU1NSwzMSArMTU5NCwyNyBAQAogCiBib29sIGNtR2xvYmFsR2VuZXJhdG9yOjpBZGRBdXRvbWF0aWNTb3VyY2VzKCkKIHsKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgbGctPkNyZWF0ZUV2YWx1YXRpb25GaWxlT3V0cHV0cygpOwotICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewotICAgICAgaWYgKGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSB8fAotICAgICAgICAgIGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpVVElMSVRZIHx8Ci0gICAgICAgICAgZ3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgICAgaWYgKCFndC0+Q2FuQ29tcGlsZVNvdXJjZXMoKSkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KLSAgICAgIGxnLT5BZGRVbml0eUJ1aWxkKGd0KTsKKyAgICAgIGxnLT5BZGRVbml0eUJ1aWxkKGd0LmdldCgpKTsKICAgICAgIC8vIFRhcmdldHMgdGhhdCByZS11c2UgYSBQQ0ggYXJlIGhhbmRsZWQgYmVsb3cuCiAgICAgICBpZiAoIWd0LT5HZXRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00iKSkgewotICAgICAgICBsZy0+QWRkUGNoRGVwZW5kZW5jaWVzKGd0KTsKKyAgICAgICAgbGctPkFkZFBjaERlcGVuZGVuY2llcyhndC5nZXQoKSk7CiAgICAgICB9CiAgICAgfQogICB9Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKLSAgICAgIGlmIChndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgfHwKLSAgICAgICAgICBndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VVRJTElUWSB8fAotICAgICAgICAgIGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgICAgaWYgKCFndC0+Q2FuQ29tcGlsZVNvdXJjZXMoKSkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIC8vIEhhbmRsZSB0YXJnZXRzIHRoYXQgcmUtdXNlIGEgUENIIGZyb20gYW4gYWJvdmUtaGFuZGxlZCB0YXJnZXQuCiAgICAgICBpZiAoZ3QtPkdldFByb3BlcnR5KCJQUkVDT01QSUxFX0hFQURFUlNfUkVVU0VfRlJPTSIpKSB7Ci0gICAgICAgIGxnLT5BZGRQY2hEZXBlbmRlbmNpZXMoZ3QpOworICAgICAgICBsZy0+QWRkUGNoRGVwZW5kZW5jaWVzKGd0LmdldCgpKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTE1ODcsMjQgKzE2MjIsMjYgQEAKICAgLy8gQ2xlYXIgdGhlIHNvdXJjZSBsaXN0IGFuZCBjbGFzc2lmaWNhdGlvbiBjYWNoZSAoS2luZGVkU291cmNlcykgb2YgYWxsCiAgIC8vIHRhcmdldHMgc28gdGhhdCBpdCB3aWxsIGJlIHJlY29tcHV0ZWQgY29ycmVjdGx5IGJ5IHRoZSBnZW5lcmF0b3JzIGxhdGVyCiAgIC8vIG5vdyB0aGF0IHRoZSBhYm92ZSB0cmFuc2Zvcm1hdGlvbnMgYXJlIGRvbmUgZm9yIGFsbCB0YXJnZXRzLgotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogZ3QgOiBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgZ3QtPkNsZWFyU291cmNlc0NhY2hlKCk7CiAgICAgfQogICB9CiAgIHJldHVybiB0cnVlOwogfQogCi1jbUxpbmtMaW5lQ29tcHV0ZXIqIGNtR2xvYmFsR2VuZXJhdG9yOjpDcmVhdGVMaW5rTGluZUNvbXB1dGVyKAorc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gY21HbG9iYWxHZW5lcmF0b3I6OkNyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCiAgIGNtT3V0cHV0Q29udmVydGVyKiBvdXRwdXRDb252ZXJ0ZXIsIGNtU3RhdGVEaXJlY3RvcnkgY29uc3QmIHN0YXRlRGlyKSBjb25zdAogewotICByZXR1cm4gbmV3IGNtTGlua0xpbmVDb21wdXRlcihvdXRwdXRDb252ZXJ0ZXIsIHN0YXRlRGlyKTsKKyAgcmV0dXJuIGNtOjptYWtlX3VuaXF1ZTxjbUxpbmtMaW5lQ29tcHV0ZXI+KG91dHB1dENvbnZlcnRlciwgc3RhdGVEaXIpOwogfQogCi1jbUxpbmtMaW5lQ29tcHV0ZXIqIGNtR2xvYmFsR2VuZXJhdG9yOjpDcmVhdGVNU1ZDNjBMaW5rTGluZUNvbXB1dGVyKAorc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4KK2NtR2xvYmFsR2VuZXJhdG9yOjpDcmVhdGVNU1ZDNjBMaW5rTGluZUNvbXB1dGVyKAogICBjbU91dHB1dENvbnZlcnRlciogb3V0cHV0Q29udmVydGVyLCBjbVN0YXRlRGlyZWN0b3J5IGNvbnN0JiBzdGF0ZURpcikgY29uc3QKIHsKLSAgcmV0dXJuIG5ldyBjbU1TVkM2MExpbmtMaW5lQ29tcHV0ZXIob3V0cHV0Q29udmVydGVyLCBzdGF0ZURpcik7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21NU1ZDNjBMaW5rTGluZUNvbXB1dGVyPihvdXRwdXRDb252ZXJ0ZXIsIHN0YXRlRGlyKSk7CiB9CiAKIHZvaWQgY21HbG9iYWxHZW5lcmF0b3I6OkZpbmFsaXplVGFyZ2V0Q29tcGlsZUluZm8oKQpAQCAtMTYxMyw3ICsxNjUwLDcgQEAKICAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRFbmFibGVkTGFuZ3VhZ2VzKCk7CiAKICAgLy8gQ29uc3RydWN0IHBlci10YXJnZXQgZ2VuZXJhdG9yIGluZm9ybWF0aW9uLgotICBmb3IgKGNtTWFrZWZpbGUqIG1mIDogdGhpcy0+TWFrZWZpbGVzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbWYgOiB0aGlzLT5NYWtlZmlsZXMpIHsKICAgICBjb25zdCBjbVN0cmluZ1JhbmdlIG5vY29uZmlnX2NvbXBpbGVfZGVmaW5pdGlvbnMgPQogICAgICAgbWYtPkdldENvbXBpbGVEZWZpbml0aW9uc0VudHJpZXMoKTsKICAgICBjb25zdCBjbUJhY2t0cmFjZVJhbmdlIG5vY29uZmlnX2NvbXBpbGVfZGVmaW5pdGlvbnNfYnRzID0KQEAgLTE2NDIsMTMgKzE2NzksMTUgQEAKICAgICAgIGNtUG9saWNpZXM6OlBvbGljeVN0YXR1cyBwb2xTdCA9CiAgICAgICAgIG1mLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA0Myk7CiAgICAgICBpZiAocG9sU3QgPT0gY21Qb2xpY2llczo6V0FSTiB8fCBwb2xTdCA9PSBjbVBvbGljaWVzOjpPTEQpIHsKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7Ci0gICAgICAgIG1mLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdzKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3MgPQorICAgICAgICAgIG1mLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYyA6IGNvbmZpZ3MpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBkZWZQcm9wTmFtZSA9CiAgICAgICAgICAgICBjbVN0ckNhdCgiQ09NUElMRV9ERUZJTklUSU9OU18iLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoYykpOwotICAgICAgICAgIHQtPkFwcGVuZFByb3BlcnR5KGRlZlByb3BOYW1lLCBtZi0+R2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKTsKKyAgICAgICAgICBpZiAoY21Qcm9wIHZhbCA9IG1mLT5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSkpIHsKKyAgICAgICAgICAgIHQtPkFwcGVuZFByb3BlcnR5KGRlZlByb3BOYW1lLCAqdmFsKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0xNjc3LDggKzE3MTYsNyBAQAogICBpZiAodGFyZ2V0VHlwZXMgPT0gQWxsVGFyZ2V0cykgewogICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbWYtPkdldFRhcmdldHMoKSkgewogICAgICAgY21UYXJnZXQqIHQgPSAmdGFyZ2V0LnNlY29uZDsKLSAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IG5ldyBjbUdlbmVyYXRvclRhcmdldCh0LCBsZyk7Ci0gICAgICBsZy0+QWRkR2VuZXJhdG9yVGFyZ2V0KGd0KTsKKyAgICAgIGxnLT5BZGRHZW5lcmF0b3JUYXJnZXQoY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yVGFyZ2V0Pih0LCBsZykpOwogICAgIH0KICAgfQogCkBAIC0xNjkxLDMxICsxNzI5LDI4IEBACiB7CiAgIHN0ZDo6bWFwPGNtVGFyZ2V0KiwgY21HZW5lcmF0b3JUYXJnZXQqPiBpbXBvcnRlZE1hcDsKICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0aGlzLT5NYWtlZmlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPk1ha2VmaWxlc1tpXTsKLSAgICBmb3IgKGNtVGFyZ2V0KiBvd25lZEltcFRndCA6IG1mLT5HZXRPd25lZEltcG9ydGVkVGFyZ2V0cygpKSB7Ci0gICAgICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yc1tpXTsKLSAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IG5ldyBjbUdlbmVyYXRvclRhcmdldChvd25lZEltcFRndCwgbGcpOwotICAgICAgbGctPkFkZE93bmVkSW1wb3J0ZWRHZW5lcmF0b3JUYXJnZXQoZ3QpOwotICAgICAgaW1wb3J0ZWRNYXBbb3duZWRJbXBUZ3RdID0gZ3Q7CisgICAgYXV0byYgbWYgPSB0aGlzLT5NYWtlZmlsZXNbaV07CisgICAgZm9yIChjb25zdCBhdXRvJiBvd25lZEltcFRndCA6IG1mLT5HZXRPd25lZEltcG9ydGVkVGFyZ2V0cygpKSB7CisgICAgICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yc1tpXS5nZXQoKTsKKyAgICAgIGF1dG8gZ3QgPSBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0b3JUYXJnZXQ+KG93bmVkSW1wVGd0LmdldCgpLCBsZyk7CisgICAgICBpbXBvcnRlZE1hcFtvd25lZEltcFRndC5nZXQoKV0gPSBndC5nZXQoKTsKKyAgICAgIGxnLT5BZGRPd25lZEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0KHN0ZDo6bW92ZShndCkpOwogICAgIH0KICAgfQogCiAgIC8vIENvbnN0cnVjdCBwZXItdGFyZ2V0IGdlbmVyYXRvciBpbmZvcm1hdGlvbi4KICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuc2l6ZSgpOyArK2kpIHsKLSAgICB0aGlzLT5DcmVhdGVHZW5lcmF0b3JUYXJnZXRzKHRhcmdldFR5cGVzLCB0aGlzLT5NYWtlZmlsZXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV0sIGltcG9ydGVkTWFwKTsKKyAgICB0aGlzLT5DcmVhdGVHZW5lcmF0b3JUYXJnZXRzKHRhcmdldFR5cGVzLCB0aGlzLT5NYWtlZmlsZXNbaV0uZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbaV0uZ2V0KCksIGltcG9ydGVkTWFwKTsKICAgfQogfQogCiB2b2lkIGNtR2xvYmFsR2VuZXJhdG9yOjpDbGVhckdlbmVyYXRvck1lbWJlcnMoKQogewotICBjbURlbGV0ZUFsbCh0aGlzLT5CdWlsZEV4cG9ydFNldHMpOwogICB0aGlzLT5CdWlsZEV4cG9ydFNldHMuY2xlYXIoKTsKIAotICBjbURlbGV0ZUFsbCh0aGlzLT5NYWtlZmlsZXMpOwogICB0aGlzLT5NYWtlZmlsZXMuY2xlYXIoKTsKIAotICBjbURlbGV0ZUFsbCh0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuY2xlYXIoKTsKIAogICB0aGlzLT5BbGlhc1RhcmdldHMuY2xlYXIoKTsKQEAgLTE3MzgsMTIgKzE3NzMsMTIgQEAKIAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6Q2hlY2tUYXJnZXRQcm9wZXJ0aWVzKCkKIHsKKyAgLy8gY2hlY2sgZm9yIGxpbmsgbGlicmFyaWVzIGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgIk5PVEZPVU5EIgorICAvLyBhbmQgZm9yIGluZmluaXRlIGxvb3BzCiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gbm90Rm91bmRNYXA7Ci0gIC8vICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbm90Rm91bmRNYXA7Ci0gIC8vIGFmdGVyIGl0IGlzIGFsbCBkb25lIGRvIGEgQ29uZmlndXJlRmluYWxQYXNzCiAgIGNtU3RhdGUqIHN0YXRlID0gdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpOwogICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRoaXMtPk1ha2VmaWxlcy5zaXplKCk7ICsraSkgewotICAgIHRoaXMtPk1ha2VmaWxlc1tpXS0+Q29uZmlndXJlRmluYWxQYXNzKCk7CisgICAgdGhpcy0+TWFrZWZpbGVzW2ldLT5HZW5lcmF0ZSgqdGhpcy0+TG9jYWxHZW5lcmF0b3JzW2ldKTsKICAgICBmb3IgKGF1dG8gY29uc3QmIHRhcmdldCA6IHRoaXMtPk1ha2VmaWxlc1tpXS0+R2V0VGFyZ2V0cygpKSB7CiAgICAgICBpZiAodGFyZ2V0LnNlY29uZC5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgICAgICBjb250aW51ZTsKQEAgLTE3NjIsMTQgKzE3OTcsMTMgQEAKICAgICAgICAgfQogICAgICAgfQogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY3M7Ci0gICAgICBjb25zdCBjaGFyKiBpbmNEaXJQcm9wID0KLSAgICAgICAgdGFyZ2V0LnNlY29uZC5HZXRQcm9wZXJ0eSgiSU5DTFVERV9ESVJFQ1RPUklFUyIpOworICAgICAgY21Qcm9wIGluY0RpclByb3AgPSB0YXJnZXQuc2Vjb25kLkdldFByb3BlcnR5KCJJTkNMVURFX0RJUkVDVE9SSUVTIik7CiAgICAgICBpZiAoIWluY0RpclByb3ApIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKICAgICAgIHN0ZDo6c3RyaW5nIGluY0RpcnMgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OlByZXByb2Nlc3MoCi0gICAgICAgIGluY0RpclByb3AsIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6U3RyaXBBbGxHZW5lcmF0b3JFeHByZXNzaW9ucyk7CisgICAgICAgICppbmNEaXJQcm9wLCBjbUdlbmVyYXRvckV4cHJlc3Npb246OlN0cmlwQWxsR2VuZXJhdG9yRXhwcmVzc2lvbnMpOwogCiAgICAgICBjbUV4cGFuZExpc3QoaW5jRGlycywgaW5jcyk7CiAKQEAgLTE3ODcsMTEgKzE4MjEsNiBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPlVwZGF0ZVByb2dyZXNzKAotICAgICAgIkNvbmZpZ3VyaW5nIiwKLSAgICAgIDAuOWYgKwotICAgICAgICAwLjFmICogKHN0YXRpY19jYXN0PGZsb2F0PihpKSArIDEuMGYpIC8KLSAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4odGhpcy0+TWFrZWZpbGVzLnNpemUoKSkpOwogICB9CiAKICAgaWYgKCFub3RGb3VuZE1hcC5lbXB0eSgpKSB7CkBAIC0xODg4LDYgKzE5MTcsMTAgQEAKICAgICBvdXRwdXQgKz0gIlxuIjsKICAgICByZXR1cm4gMTsKICAgfQorICBzdGQ6OnN0cmluZyByZWFsQ29uZmlnID0gY29uZmlnOworICBpZiAocmVhbENvbmZpZy5lbXB0eSgpKSB7CisgICAgcmVhbENvbmZpZyA9IHRoaXMtPkdldERlZmF1bHRCdWlsZENvbmZpZygpOworICB9CiAKICAgaW50IHJldFZhbCA9IDA7CiAgIGNtU3lzdGVtVG9vbHM6OlNldFJ1bkNvbW1hbmRIaWRlQ29uc29sZSh0cnVlKTsKQEAgLTE4OTYsNyArMTkyOSw3IEBACiAKICAgc3RkOjp2ZWN0b3I8R2VuZXJhdGVkTWFrZUNvbW1hbmQ+IG1ha2VDb21tYW5kID0KICAgICB0aGlzLT5HZW5lcmF0ZUJ1aWxkQ29tbWFuZChtYWtlQ29tbWFuZENTVFIsIHByb2plY3ROYW1lLCBiaW5kaXIsIHRhcmdldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLCBmYXN0LCBqb2JzLCB2ZXJib3NlLCBuYXRpdmVPcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsQ29uZmlnLCBmYXN0LCBqb2JzLCB2ZXJib3NlLCBuYXRpdmVPcHRpb25zKTsKIAogICAvLyBXb3JrYXJvdW5kIHRvIGNvbnZpbmNlIHNvbWUgY29tbWFuZHMgdG8gcHJvZHVjZSBvdXRwdXQuCiAgIGlmIChvdXRwdXRmbGFnID09IGNtU3lzdGVtVG9vbHM6Ok9VVFBVVF9QQVNTVEhST1VHSCAmJgpAQCAtMTkwOCw3ICsxOTQxLDcgQEAKICAgaWYgKGNsZWFuKSB7CiAgICAgc3RkOjp2ZWN0b3I8R2VuZXJhdGVkTWFrZUNvbW1hbmQ+IGNsZWFuQ29tbWFuZCA9CiAgICAgICB0aGlzLT5HZW5lcmF0ZUJ1aWxkQ29tbWFuZChtYWtlQ29tbWFuZENTVFIsIHByb2plY3ROYW1lLCBiaW5kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJjbGVhbiIgfSwgY29uZmlnLCBmYXN0LCBqb2JzLCB2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgImNsZWFuIiB9LCByZWFsQ29uZmlnLCBmYXN0LCBqb2JzLCB2ZXJib3NlKTsKICAgICBvdXRwdXQgKz0gIlxuUnVuIENsZWFuIENvbW1hbmQ6IjsKICAgICBvdXRwdXQgKz0gY2xlYW5Db21tYW5kLmZyb250KCkuUHJpbnRhYmxlKCk7CiAgICAgb3V0cHV0ICs9ICJcbiI7CkBAIC0xOTM2LDggKzE5NjksOSBAQAogICBzdGQ6OnN0cmluZyBtYWtlQ29tbWFuZFN0cjsKICAgb3V0cHV0ICs9ICJcblJ1biBCdWlsZCBDb21tYW5kKHMpOiI7CiAKLSAgZm9yIChhdXRvIGNvbW1hbmQgPSBtYWtlQ29tbWFuZC5iZWdpbigpOyBjb21tYW5kICE9IG1ha2VDb21tYW5kLmVuZCgpOwotICAgICAgICsrY29tbWFuZCkgeworICByZXRWYWwgPSAwOworICBmb3IgKGF1dG8gY29tbWFuZCA9IG1ha2VDb21tYW5kLmJlZ2luKCk7CisgICAgICAgY29tbWFuZCAhPSBtYWtlQ29tbWFuZC5lbmQoKSAmJiByZXRWYWwgPT0gMDsgKytjb21tYW5kKSB7CiAgICAgbWFrZUNvbW1hbmRTdHIgPSBjb21tYW5kLT5QcmludGFibGUoKTsKICAgICBpZiAoY29tbWFuZCAhPSBtYWtlQ29tbWFuZC5lbmQoKSkgewogICAgICAgbWFrZUNvbW1hbmRTdHIgKz0gIiAmJiAiOwpAQCAtMjAxNSwxNiArMjA0OSwxNSBAQAogICByZXR1cm4gbWFrZUNvbW1hbmQ7CiB9CiAKLXZvaWQgY21HbG9iYWxHZW5lcmF0b3I6OkFkZE1ha2VmaWxlKGNtTWFrZWZpbGUqIG1mKQordm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6QWRkTWFrZWZpbGUoc3RkOjp1bmlxdWVfcHRyPGNtTWFrZWZpbGU+IG1mKQogewotICB0aGlzLT5NYWtlZmlsZXMucHVzaF9iYWNrKG1mKTsKLSAgdGhpcy0+SW5kZXhNYWtlZmlsZShtZik7CisgIHRoaXMtPkluZGV4TWFrZWZpbGUobWYuZ2V0KCkpOworICB0aGlzLT5NYWtlZmlsZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShtZikpOwogCiAgIC8vIHVwZGF0ZSBwcm9ncmVzcwogICAvLyBlc3RpbWF0ZSBob3cgbWFueSBsZyB0aGVyZSB3aWxsIGJlCi0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBudW1HZW5DID0KLSAgICB0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoCi0gICAgICAiQ01BS0VfTlVNQkVSX09GX01BS0VGSUxFUyIpOworICBjbVByb3AgbnVtR2VuQyA9IHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldFN0YXRlKCktPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgKKyAgICAiQ01BS0VfTlVNQkVSX09GX01BS0VGSUxFUyIpOwogCiAgIGlmICghbnVtR2VuQykgewogICAgIC8vIElmIENNQUtFX05VTUJFUl9PRl9NQUtFRklMRVMgaXMgbm90IHNldApAQCAtMjA0MSwxMCArMjA3NCwxMCBAQAogICB9CiAKICAgaW50IG51bUdlbiA9IGF0b2kobnVtR2VuQy0+Y19zdHIoKSk7Ci0gIGZsb2F0IHByb2cgPSAwLjlmICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRoaXMtPk1ha2VmaWxlcy5zaXplKCkpIC8KLSAgICBzdGF0aWNfY2FzdDxmbG9hdD4obnVtR2VuKTsKLSAgaWYgKHByb2cgPiAwLjlmKSB7Ci0gICAgcHJvZyA9IDAuOWY7CisgIGZsb2F0IHByb2cgPQorICAgIHN0YXRpY19jYXN0PGZsb2F0Pih0aGlzLT5NYWtlZmlsZXMuc2l6ZSgpKSAvIHN0YXRpY19jYXN0PGZsb2F0PihudW1HZW4pOworICBpZiAocHJvZyA+IDEuMGYpIHsKKyAgICBwcm9nID0gMS4wZjsKICAgfQogICB0aGlzLT5DTWFrZUluc3RhbmNlLT5VcGRhdGVQcm9ncmVzcygiQ29uZmlndXJpbmciLCBwcm9nKTsKIH0KQEAgLTIwNjEsOSArMjA5NCwxMCBAQAogICB0aGlzLT5JbnN0YWxsVGFyZ2V0RW5hYmxlZCA9IHRydWU7CiB9CiAKLWNtTG9jYWxHZW5lcmF0b3IqIGNtR2xvYmFsR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikKK3N0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBjbUdsb2JhbEdlbmVyYXRvcjo6Q3JlYXRlTG9jYWxHZW5lcmF0b3IoCisgIGNtTWFrZWZpbGUqIG1mKQogewotICByZXR1cm4gbmV3IGNtTG9jYWxHZW5lcmF0b3IodGhpcywgbWYpOworICByZXR1cm4gY206Om1ha2VfdW5pcXVlPGNtTG9jYWxHZW5lcmF0b3I+KHRoaXMsIG1mKTsKIH0KIAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6RW5hYmxlTGFuZ3VhZ2VzRnJvbUdlbmVyYXRvcihjbUdsb2JhbEdlbmVyYXRvciogZ2VuLApAQCAtMjEyNywxMyArMjE2MSwzOCBAQAogfQogCiBib29sIGNtR2xvYmFsR2VuZXJhdG9yOjpJc0V4Y2x1ZGVkKGNtTG9jYWxHZW5lcmF0b3IqIHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpIGNvbnN0CiB7Ci0gIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgIGlmICghdGFyZ2V0LT5Jc0luQnVpbGRTeXN0ZW0oKSkgewogICAgIHJldHVybiB0cnVlOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiBleGNsdWRlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiRVhDTFVERV9GUk9NX0FMTCIpKSB7Ci0gICAgcmV0dXJuIGNtSXNPbihleGNsdWRlKTsKKyAgY21NYWtlZmlsZSogbWYgPSByb290LT5HZXRNYWtlZmlsZSgpOworICBjb25zdCBzdGQ6OnN0cmluZyBFWENMVURFX0ZST01fQUxMID0gIkVYQ0xVREVfRlJPTV9BTEwiOworICBpZiAoY21Qcm9wIGV4Y2x1ZGUgPSB0YXJnZXQtPkdldFByb3BlcnR5KEVYQ0xVREVfRlJPTV9BTEwpKSB7CisgICAgLy8gRXhwYW5kIHRoZSBwcm9wZXJ0eSB2YWx1ZSBwZXIgY29uZmlndXJhdGlvbi4KKyAgICB1bnNpZ25lZCBpbnQgdHJ1ZUNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgZmFsc2VDb3VudCA9IDA7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb25maWdzID0KKyAgICAgIG1mLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CisgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogY29uZmlncykgeworICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uSW50ZXJwcmV0ZXIgZ2VuZXhJbnRlcnByZXRlcihyb290LCBjb25maWcsIHRhcmdldCk7CisgICAgICBpZiAoY21Jc09uKGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmV4Y2x1ZGUsIEVYQ0xVREVfRlJPTV9BTEwpKSkgeworICAgICAgICArK3RydWVDb3VudDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICsrZmFsc2VDb3VudDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBnZW5leCBleHBhbnNpb24gb2YgdGhlIHByb3BlcnR5IGFncmVlcyBpbiBhbGwKKyAgICAvLyBjb25maWd1cmF0aW9ucy4KKyAgICBpZiAodHJ1ZUNvdW50ICYmIGZhbHNlQ291bnQpIHsKKyAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOworICAgICAgZSA8PCAiVGhlIEVYQ0xVREVfRlJPTV9BTEwgcHJvcGVydHkgb2YgdGFyZ2V0IFwiIiA8PCB0YXJnZXQtPkdldE5hbWUoKQorICAgICAgICA8PCAiXCIgdmFyaWVzIGJ5IGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgXCIiCisgICAgICAgIDw8IHJvb3QtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXROYW1lKCkgPDwgIlwiIGdlbmVyYXRvci4iOworICAgICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZUNvdW50OwogICB9CiAgIC8vIFRoaXMgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIGl0cyBkaXJlY3RvcnkuICBDaGVjayB3aGV0aGVyIHRoZQogICAvLyBkaXJlY3RvcnkgaXMgZXhjbHVkZWQuCkBAIC0yMTU4LDcgKzIyMTcsNyBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6RmlsbFByb2plY3RNYXAoKQogewogICB0aGlzLT5Qcm9qZWN0TWFwLmNsZWFyKCk7IC8vIG1ha2Ugc3VyZSB3ZSBzdGFydCB3aXRoIGEgY2xlYW4gbWFwCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIC8vIGZvciBlYWNoIGxvY2FsIGdlbmVyYXRvciBhZGQgYWxsIHByb2plY3RzCiAgICAgY21TdGF0ZVNuYXBzaG90IHNucCA9IGxvY2FsR2VuLT5HZXRTdGF0ZVNuYXBzaG90KCk7CiAgICAgc3RkOjpzdHJpbmcgbmFtZTsKQEAgLTIxNjYsNyArMjIyNSw3IEBACiAgICAgICBzdGQ6OnN0cmluZyBzbnBQcm9qTmFtZSA9IHNucC5HZXRQcm9qZWN0TmFtZSgpOwogICAgICAgaWYgKG5hbWUgIT0gc25wUHJvak5hbWUpIHsKICAgICAgICAgbmFtZSA9IHNucFByb2pOYW1lOwotICAgICAgICB0aGlzLT5Qcm9qZWN0TWFwW25hbWVdLnB1c2hfYmFjayhsb2NhbEdlbik7CisgICAgICAgIHRoaXMtPlByb2plY3RNYXBbbmFtZV0ucHVzaF9iYWNrKGxvY2FsR2VuLmdldCgpKTsKICAgICAgIH0KICAgICAgIHNucCA9IHNucC5HZXRCdWlsZHN5c3RlbURpcmVjdG9yeVBhcmVudCgpOwogICAgIH0gd2hpbGUgKHNucC5Jc1ZhbGlkKCkpOwpAQCAtMjIwMCw3ICsyMjU5LDcgQEAKIAogYm9vbCBjbUdsb2JhbEdlbmVyYXRvcjo6SXNBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgcmV0dXJuIGNtQ29udGFpbnModGhpcy0+QWxpYXNUYXJnZXRzLCBuYW1lKTsKKyAgcmV0dXJuIGNtOjpjb250YWlucyh0aGlzLT5BbGlhc1RhcmdldHMsIG5hbWUpOwogfQogCiB2b2lkIGNtR2xvYmFsR2VuZXJhdG9yOjpJbmRleFRhcmdldChjbVRhcmdldCogdCkKQEAgLTIyMjYsMTAgKzIyODUsMTIgQEAKICAgLy8gVXNlIGEgIjoiIHByZWZpeCB0byBhdm9pZCBjb25mbGljdCB3aXRoIHByb2plY3QtZGVmaW5lZCB0YXJnZXRzLgogICAvLyBXZSBtdXN0IHNhdGlzZnkgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJc1ZhbGlkVGFyZ2V0TmFtZSBzbyB1c2Ugbm8KICAgLy8gb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLgotICBjaGFyIGJ1ZlsxICsgc2l6ZW9mKGd0KSAqIDJdOworICBjb25zdGV4cHIgc2l6ZV90IHNpemVvZl9wdHIgPQorICAgIHNpemVvZihndCk7IC8vIE5PTElOVChidWdwcm9uZS1zaXplb2YtZXhwcmVzc2lvbikKKyAgY2hhciBidWZbMSArIHNpemVvZl9wdHIgKiAyXTsKICAgY2hhciogYiA9IGJ1ZjsKICAgKmIrKyA9ICc6JzsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ3QpOyArK2kpIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2ZfcHRyOyArK2kpIHsKICAgICB1bnNpZ25lZCBjaGFyIGNvbnN0IGMgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgY29uc3QqPigmZ3QpW2ldOwogICAgICpiKysgPSBoZXhEaWdpdHNbKGMgJiAweGYwKSA+PiA0XTsKICAgICAqYisrID0gaGV4RGlnaXRzWyhjICYgMHgwZildOwpAQCAtMjM2OSw3ICsyNDMwLDcgQEAKIHZvaWQgY21HbG9iYWxHZW5lcmF0b3I6OkFkZEdsb2JhbFRhcmdldF9QYWNrYWdlKAogICBzdGQ6OnZlY3RvcjxHbG9iYWxUYXJnZXRJbmZvPiYgdGFyZ2V0cykKIHsKLSAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5NYWtlZmlsZXNbMF07CisgIGF1dG8mIG1mID0gdGhpcy0+TWFrZWZpbGVzWzBdOwogICBzdGQ6OnN0cmluZyBjb25maWdGaWxlID0KICAgICBjbVN0ckNhdChtZi0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiL0NQYWNrQ29uZmlnLmNtYWtlIik7CiAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhjb25maWdGaWxlKSkgewpAQCAtMjM5MSw3ICsyNDUyLDcgQEAKICAgZ3RpLldvcmtpbmdEaXIgPSBtZi0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwogICBjbUN1c3RvbUNvbW1hbmRMaW5lIHNpbmdsZUxpbmU7CiAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKGNtU3lzdGVtVG9vbHM6OkdldENQYWNrQ29tbWFuZCgpKTsKLSAgaWYgKGNtYWtlQ2ZnSW50RGlyICYmICpjbWFrZUNmZ0ludERpciAmJiBjbWFrZUNmZ0ludERpclswXSAhPSAnLicpIHsKKyAgaWYgKGNtTm9uZW1wdHkoY21ha2VDZmdJbnREaXIpICYmIGNtYWtlQ2ZnSW50RGlyWzBdICE9ICcuJykgewogICAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKCItQyIpOwogICAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKGNtYWtlQ2ZnSW50RGlyKTsKICAgfQpAQCAtMjQxOCw3ICsyNDc5LDcgQEAKICAgICByZXR1cm47CiAgIH0KIAotICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPk1ha2VmaWxlc1swXTsKKyAgYXV0byYgbWYgPSB0aGlzLT5NYWtlZmlsZXNbMF07CiAgIHN0ZDo6c3RyaW5nIGNvbmZpZ0ZpbGUgPQogICAgIGNtU3RyQ2F0KG1mLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICIvQ1BhY2tTb3VyY2VDb25maWcuY21ha2UiKTsKICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGNvbmZpZ0ZpbGUpKSB7CkBAIC0yNDUwLDcgKzI1MTEsNyBAQAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6QWRkR2xvYmFsVGFyZ2V0X1Rlc3QoCiAgIHN0ZDo6dmVjdG9yPEdsb2JhbFRhcmdldEluZm8+JiB0YXJnZXRzKQogewotICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPk1ha2VmaWxlc1swXTsKKyAgYXV0byYgbWYgPSB0aGlzLT5NYWtlZmlsZXNbMF07CiAgIGlmICghbWYtPklzT24oIkNNQUtFX1RFU1RJTkdfRU5BQkxFRCIpKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC0yNDcwLDcgKzI1MzEsMTMgQEAKICAgY21DdXN0b21Db21tYW5kTGluZSBzaW5nbGVMaW5lOwogICBzaW5nbGVMaW5lLnB1c2hfYmFjayhjbVN5c3RlbVRvb2xzOjpHZXRDVGVzdENvbW1hbmQoKSk7CiAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKCItLWZvcmNlLW5ldy1jdGVzdC1wcm9jZXNzIik7Ci0gIGlmIChjbWFrZUNmZ0ludERpciAmJiAqY21ha2VDZmdJbnREaXIgJiYgY21ha2VDZmdJbnREaXJbMF0gIT0gJy4nKSB7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzOworICBpZiAobWYtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX0NURVNUX0FSR1VNRU5UUyIsIGFyZ3MpKSB7CisgICAgZm9yIChhdXRvIGNvbnN0JiBhcmcgOiBhcmdzKSB7CisgICAgICBzaW5nbGVMaW5lLnB1c2hfYmFjayhhcmcpOworICAgIH0KKyAgfQorICBpZiAoY21Ob25lbXB0eShjbWFrZUNmZ0ludERpcikgJiYgY21ha2VDZmdJbnREaXJbMF0gIT0gJy4nKSB7CiAgICAgc2luZ2xlTGluZS5wdXNoX2JhY2soIi1DIik7CiAgICAgc2luZ2xlTGluZS5wdXNoX2JhY2soY21ha2VDZmdJbnREaXIpOwogICB9IGVsc2UgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2suIFNob3VsZCBiZSBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUKQEAgLTI0OTEsNiArMjU1OCw3IEBACiAgIH0KICAgR2xvYmFsVGFyZ2V0SW5mbyBndGk7CiAgIGd0aS5OYW1lID0gZWRpdENhY2hlVGFyZ2V0TmFtZTsKKyAgZ3RpLlBlckNvbmZpZyA9IGNtVGFyZ2V0OjpQZXJDb25maWc6Ok5vOwogICBjbUN1c3RvbUNvbW1hbmRMaW5lIHNpbmdsZUxpbmU7CiAKICAgLy8gVXNlIGdlbmVyYXRvciBwcmVmZXJlbmNlIGZvciB0aGUgZWRpdF9jYWNoZSBydWxlIGlmIGl0IGlzIGRlZmluZWQuCkBAIC0yNTA4LDYgKzI1NzYsNyBAQAogICAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKCJObyBpbnRlcmFjdGl2ZSBDTWFrZSBkaWFsb2cgYXZhaWxhYmxlLiIpOwogICAgIGd0aS5NZXNzYWdlID0gIk5vIGludGVyYWN0aXZlIENNYWtlIGRpYWxvZyBhdmFpbGFibGUuLi4iOwogICAgIGd0aS5Vc2VzVGVybWluYWwgPSBmYWxzZTsKKyAgICBndGkuU3RkUGlwZXNVVEY4ID0gdHJ1ZTsKICAgfQogICBndGkuQ29tbWFuZExpbmVzLnB1c2hfYmFjayhzdGQ6Om1vdmUoc2luZ2xlTGluZSkpOwogCkBAIC0yNTI1LDE4ICsyNTk0LDIxIEBACiAgIGd0aS5OYW1lID0gcmVidWlsZENhY2hlVGFyZ2V0TmFtZTsKICAgZ3RpLk1lc3NhZ2UgPSAiUnVubmluZyBDTWFrZSB0byByZWdlbmVyYXRlIGJ1aWxkIHN5c3RlbS4uLiI7CiAgIGd0aS5Vc2VzVGVybWluYWwgPSB0cnVlOworICBndGkuUGVyQ29uZmlnID0gY21UYXJnZXQ6OlBlckNvbmZpZzo6Tm87CiAgIGNtQ3VzdG9tQ29tbWFuZExpbmUgc2luZ2xlTGluZTsKICAgc2luZ2xlTGluZS5wdXNoX2JhY2soY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCkpOworICBzaW5nbGVMaW5lLnB1c2hfYmFjaygiLS1yZWdlbmVyYXRlLWR1cmluZy1idWlsZCIpOwogICBzaW5nbGVMaW5lLnB1c2hfYmFjaygiLVMkKENNQUtFX1NPVVJDRV9ESVIpIik7CiAgIHNpbmdsZUxpbmUucHVzaF9iYWNrKCItQiQoQ01BS0VfQklOQVJZX0RJUikiKTsKICAgZ3RpLkNvbW1hbmRMaW5lcy5wdXNoX2JhY2soc3RkOjptb3ZlKHNpbmdsZUxpbmUpKTsKKyAgZ3RpLlN0ZFBpcGVzVVRGOCA9IHRydWU7CiAgIHRhcmdldHMucHVzaF9iYWNrKHN0ZDo6bW92ZShndGkpKTsKIH0KIAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6QWRkR2xvYmFsVGFyZ2V0X0luc3RhbGwoCiAgIHN0ZDo6dmVjdG9yPEdsb2JhbFRhcmdldEluZm8+JiB0YXJnZXRzKQogewotICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPk1ha2VmaWxlc1swXTsKKyAgYXV0byYgbWYgPSB0aGlzLT5NYWtlZmlsZXNbMF07CiAgIGNvbnN0IGNoYXIqIGNtYWtlQ2ZnSW50RGlyID0gdGhpcy0+R2V0Q01ha2VDRkdJbnREaXIoKTsKICAgYm9vbCBza2lwSW5zdGFsbFJ1bGVzID0gbWYtPklzT24oIkNNQUtFX1NLSVBfSU5TVEFMTF9SVUxFUyIpOwogICBpZiAodGhpcy0+SW5zdGFsbFRhcmdldEVuYWJsZWQgJiYgc2tpcEluc3RhbGxSdWxlcykgewpAQCAtMjU0Niw3ICsyNjE4LDcgQEAKICAgICAgICJpbnN0YWxsYXRpb24gcnVsZXMgaGF2ZSBiZWVuIHNwZWNpZmllZCIsCiAgICAgICBtZi0+R2V0QmFja3RyYWNlKCkpOwogICB9IGVsc2UgaWYgKHRoaXMtPkluc3RhbGxUYXJnZXRFbmFibGVkICYmICFza2lwSW5zdGFsbFJ1bGVzKSB7Ci0gICAgaWYgKCFjbWFrZUNmZ0ludERpciB8fCAhKmNtYWtlQ2ZnSW50RGlyIHx8IGNtYWtlQ2ZnSW50RGlyWzBdID09ICcuJykgeworICAgIGlmICghKGNtTm9uZW1wdHkoY21ha2VDZmdJbnREaXIpICYmIGNtYWtlQ2ZnSW50RGlyWzBdICE9ICcuJykpIHsKICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiogY29tcG9uZW50c1NldCA9ICZ0aGlzLT5JbnN0YWxsQ29tcG9uZW50czsKICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3RyOwogICAgICAgaWYgKCFjb21wb25lbnRzU2V0LT5lbXB0eSgpKSB7CkBAIC0yNTY2LDYgKzI2MzgsNyBAQAogICAgIGd0aS5OYW1lID0gdGhpcy0+R2V0SW5zdGFsbFRhcmdldE5hbWUoKTsKICAgICBndGkuTWVzc2FnZSA9ICJJbnN0YWxsIHRoZSBwcm9qZWN0Li4uIjsKICAgICBndGkuVXNlc1Rlcm1pbmFsID0gdHJ1ZTsKKyAgICBndGkuU3RkUGlwZXNVVEY4ID0gdHJ1ZTsKICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lIHNpbmdsZUxpbmU7CiAgICAgaWYgKHRoaXMtPkdldFByZWluc3RhbGxUYXJnZXROYW1lKCkpIHsKICAgICAgIGd0aS5EZXBlbmRzLmVtcGxhY2VfYmFjayh0aGlzLT5HZXRQcmVpbnN0YWxsVGFyZ2V0TmFtZSgpKTsKQEAgLTI1ODQsOSArMjY1Nyw5IEBACiAgICAgICBjbWQgPSAiY21ha2UiOwogICAgIH0KICAgICBzaW5nbGVMaW5lLnB1c2hfYmFjayhjbWQpOwotICAgIGlmIChjbWFrZUNmZ0ludERpciAmJiAqY21ha2VDZmdJbnREaXIgJiYgY21ha2VDZmdJbnREaXJbMF0gIT0gJy4nKSB7CisgICAgaWYgKGNtTm9uZW1wdHkoY21ha2VDZmdJbnREaXIpICYmIGNtYWtlQ2ZnSW50RGlyWzBdICE9ICcuJykgewogICAgICAgc3RkOjpzdHJpbmcgY2ZnQXJnID0gIi1EQlVJTERfVFlQRT0iOwotICAgICAgYm9vbCB1c2VFUE4gPSB0aGlzLT5Vc2VFZmZlY3RpdmVQbGF0Zm9ybU5hbWUobWYpOworICAgICAgYm9vbCB1c2VFUE4gPSB0aGlzLT5Vc2VFZmZlY3RpdmVQbGF0Zm9ybU5hbWUobWYuZ2V0KCkpOwogICAgICAgaWYgKHVzZUVQTikgewogICAgICAgICBjZmdBcmcgKz0gIiQoQ09ORklHVVJBVElPTikiOwogICAgICAgICBzaW5nbGVMaW5lLnB1c2hfYmFjayhjZmdBcmcpOwpAQCAtMjYzNSwxMyArMjcwOCwxMyBAQAogICB9CiB9CiAKLWNvbnN0IGNoYXIqIGNtR2xvYmFsR2VuZXJhdG9yOjpHZXRQcmVkZWZpbmVkVGFyZ2V0c0ZvbGRlcigpCitzdGQ6OnN0cmluZyBjbUdsb2JhbEdlbmVyYXRvcjo6R2V0UHJlZGVmaW5lZFRhcmdldHNGb2xkZXIoKQogewotICBjb25zdCBjaGFyKiBwcm9wID0gdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgKKyAgY21Qcm9wIHByb3AgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAogICAgICJQUkVERUZJTkVEX1RBUkdFVFNfRk9MREVSIik7CiAKICAgaWYgKHByb3ApIHsKLSAgICByZXR1cm4gcHJvcDsKKyAgICByZXR1cm4gKnByb3A7CiAgIH0KIAogICByZXR1cm4gIkNNYWtlUHJlZGVmaW5lZFRhcmdldHMiOwpAQCAtMjY0OSwxMyArMjcyMiwxMyBAQAogCiBib29sIGNtR2xvYmFsR2VuZXJhdG9yOjpVc2VGb2xkZXJQcm9wZXJ0eSgpIGNvbnN0CiB7Ci0gIGNvbnN0IGNoYXIqIHByb3AgPQorICBjbVByb3AgcHJvcCA9CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiVVNFX0ZPTERFUlMiKTsKIAogICAvLyBJZiB0aGlzIHByb3BlcnR5IGlzIGRlZmluZWQsIGxldCB0aGUgc2V0dGVyIHR1cm4gdGhpcyBvbiBvciBvZmYuLi4KICAgLy8KICAgaWYgKHByb3ApIHsKLSAgICByZXR1cm4gY21Jc09uKHByb3ApOworICAgIHJldHVybiBjbUlzT24oKnByb3ApOwogICB9CiAKICAgLy8gQnkgZGVmYXVsdCwgdGhpcyBmZWF0dXJlIGlzIE9GRiwgc2luY2UgaXQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUKQEAgLTI2NjksMjIgKzI3NDIsMjMgQEAKIHsKICAgLy8gUGFja2FnZQogICBjbVRhcmdldCB0YXJnZXQoZ3RpLk5hbWUsIGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCwKLSAgICAgICAgICAgICAgICAgIGNtVGFyZ2V0OjpWaXNpYmlsaXR5Tm9ybWFsLCBtZik7CisgICAgICAgICAgICAgICAgICBjbVRhcmdldDo6VmlzaWJpbGl0eU5vcm1hbCwgbWYsIGd0aS5QZXJDb25maWcpOwogICB0YXJnZXQuU2V0UHJvcGVydHkoIkVYQ0xVREVfRlJPTV9BTEwiLCAiVFJVRSIpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19vdXRwdXRzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fYnlwcm9kdWN0czsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2RlcGVuZHM7CiAgIC8vIFN0b3JlIHRoZSBjdXN0b20gY29tbWFuZCBpbiB0aGUgdGFyZ2V0LgotICBjbUN1c3RvbUNvbW1hbmQgY2MobnVsbHB0ciwgbm9fb3V0cHV0cywgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywKLSAgICAgICAgICAgICAgICAgICAgIGd0aS5Db21tYW5kTGluZXMsIG51bGxwdHIsIGd0aS5Xb3JraW5nRGlyLmNfc3RyKCkpOworICBjbUN1c3RvbUNvbW1hbmQgY2Mobm9fb3V0cHV0cywgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywgZ3RpLkNvbW1hbmRMaW5lcywKKyAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSwgbnVsbHB0ciwgZ3RpLldvcmtpbmdEaXIuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgIGd0aS5TdGRQaXBlc1VURjgpOwogICBjYy5TZXRVc2VzVGVybWluYWwoZ3RpLlVzZXNUZXJtaW5hbCk7CiAgIHRhcmdldC5BZGRQb3N0QnVpbGRDb21tYW5kKHN0ZDo6bW92ZShjYykpOwogICBpZiAoIWd0aS5NZXNzYWdlLmVtcHR5KCkpIHsKLSAgICB0YXJnZXQuU2V0UHJvcGVydHkoIkVjaG9TdHJpbmciLCBndGkuTWVzc2FnZS5jX3N0cigpKTsKKyAgICB0YXJnZXQuU2V0UHJvcGVydHkoIkVjaG9TdHJpbmciLCBndGkuTWVzc2FnZSk7CiAgIH0KICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZCA6IGd0aS5EZXBlbmRzKSB7Ci0gICAgdGFyZ2V0LkFkZFV0aWxpdHkoZCk7CisgICAgdGFyZ2V0LkFkZFV0aWxpdHkoZCwgZmFsc2UpOwogICB9CiAKICAgLy8gT3JnYW5pemUgaW4gdGhlICJwcmVkZWZpbmVkIHRhcmdldHMiIGZvbGRlcjoKQEAgLTI3NDksMTMgKzI4MjMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGVhbiIsICAgICAiZWRpdF9jYWNoZSIsICJyZWJ1aWxkX2NhY2hlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJaRVJPX0NIRUNLIiB9OwogCi0gIHJldHVybiBjbUNvbnRhaW5zKHJlc2VydmVkVGFyZ2V0cywgbmFtZSk7CisgIHJldHVybiBjbTo6Y29udGFpbnMocmVzZXJ2ZWRUYXJnZXRzLCBuYW1lKTsKIH0KIAogdm9pZCBjbUdsb2JhbEdlbmVyYXRvcjo6U2V0RXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IoCi0gIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IqIGV4dHJhR2VuZXJhdG9yKQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcj4gZXh0cmFHZW5lcmF0b3IpCiB7Ci0gIHRoaXMtPkV4dHJhR2VuZXJhdG9yLnJlc2V0KGV4dHJhR2VuZXJhdG9yKTsKKyAgdGhpcy0+RXh0cmFHZW5lcmF0b3IgPSBzdGQ6Om1vdmUoZXh0cmFHZW5lcmF0b3IpOwogICBpZiAodGhpcy0+RXh0cmFHZW5lcmF0b3IpIHsKICAgICB0aGlzLT5FeHRyYUdlbmVyYXRvci0+U2V0R2xvYmFsR2VuZXJhdG9yKHRoaXMpOwogICB9CkBAIC0yNzgxLDI3ICsyODU1LDI2IEBACiAgICAgICAgICAgICBzdGQ6OmJhY2tfaW5zZXJ0ZXIoZmlsZW5hbWVzKSk7CiB9CiAKLXZvaWQgY21HbG9iYWxHZW5lcmF0b3I6OkdldFRhcmdldFNldHMoVGFyZ2V0RGVwZW5kU2V0JiBwcm9qZWN0VGFyZ2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0RGVwZW5kU2V0JiBvcmlnaW5hbFRhcmdldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxHZW5lcmF0b3IqIHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvclZlY3RvciBjb25zdCYgZ2VuZXJhdG9ycykKK3ZvaWQgY21HbG9iYWxHZW5lcmF0b3I6OkdldFRhcmdldFNldHMoCisgIFRhcmdldERlcGVuZFNldCYgcHJvamVjdFRhcmdldHMsIFRhcmdldERlcGVuZFNldCYgb3JpZ2luYWxUYXJnZXRzLAorICBjbUxvY2FsR2VuZXJhdG9yKiByb290LCBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIGdlbmVyYXRvcnMpCiB7CiAgIC8vIGxvb3Agb3ZlciBhbGwgbG9jYWwgZ2VuZXJhdG9ycwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGdlbmVyYXRvciA6IGdlbmVyYXRvcnMpIHsKKyAgZm9yIChhdXRvIGdlbmVyYXRvciA6IGdlbmVyYXRvcnMpIHsKICAgICAvLyBjaGVjayB0byBtYWtlIHN1cmUgZ2VuZXJhdG9yIGlzIG5vdCBleGNsdWRlZAogICAgIGlmICh0aGlzLT5Jc0V4Y2x1ZGVkKHJvb3QsIGdlbmVyYXRvcikpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICAvLyBsb29wIG92ZXIgYWxsIHRoZSBnZW5lcmF0b3IgdGFyZ2V0cyBpbiB0aGUgbWFrZWZpbGUKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiBnZW5lcmF0b3ItPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewotICAgICAgaWYgKHRoaXMtPklzUm9vdE9ubHlUYXJnZXQodGFyZ2V0KSAmJgorICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogZ2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICAgIGlmICh0aGlzLT5Jc1Jvb3RPbmx5VGFyZ2V0KHRhcmdldC5nZXQoKSkgJiYKICAgICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCkgIT0gcm9vdCkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIC8vIHB1dCB0aGUgdGFyZ2V0IGluIHRoZSBzZXQgb2Ygb3JpZ2luYWwgdGFyZ2V0cwotICAgICAgb3JpZ2luYWxUYXJnZXRzLmluc2VydCh0YXJnZXQpOworICAgICAgb3JpZ2luYWxUYXJnZXRzLmluc2VydCh0YXJnZXQuZ2V0KCkpOwogICAgICAgLy8gR2V0IHRoZSBzZXQgb2YgdGFyZ2V0cyB0aGF0IGRlcGVuZCBvbiB0YXJnZXQKLSAgICAgIHRoaXMtPkFkZFRhcmdldERlcGVuZHModGFyZ2V0LCBwcm9qZWN0VGFyZ2V0cyk7CisgICAgICB0aGlzLT5BZGRUYXJnZXREZXBlbmRzKHRhcmdldC5nZXQoKSwgcHJvamVjdFRhcmdldHMpOwogICAgIH0KICAgfQogfQpAQCAtMjk3NywxMiArMzA1MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvQ01ha2VGaWxlcy9UYXJnZXREaXJlY3Rvcmllcy50eHQiKTsKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZvdXQoZm5hbWUpOwogCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKLSAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0Z3QgOiBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7Ci0gICAgICBpZiAodGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgeworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0Z3QgOiBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgICBpZiAoIXRndC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9Ci0gICAgICB0aGlzLT5Xcml0ZVN1bW1hcnkodGd0KTsKKyAgICAgIHRoaXMtPldyaXRlU3VtbWFyeSh0Z3QuZ2V0KCkpOwogICAgICAgZm91dCA8PCB0Z3QtPkdldFN1cHBvcnREaXJlY3RvcnkoKSA8PCAiXG4iOwogICAgIH0KICAgfQpAQCAtMjk5Nyw4ICszMDcwLDggQEAKIAogI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKICAgLy8gQ2hlY2sgd2hldGhlciBsYWJlbHMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdGFyZ2V0LgotICBjb25zdCBjaGFyKiB0YXJnZXRMYWJlbHMgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJMQUJFTFMiKTsKLSAgY29uc3QgY2hhciogZGlyZWN0b3J5TGFiZWxzID0KKyAgY21Qcm9wIHRhcmdldExhYmVscyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkxBQkVMUyIpOworICBjbVByb3AgZGlyZWN0b3J5TGFiZWxzID0KICAgICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0UHJvcGVydHkoIkxBQkVMUyIpOwogICBjb25zdCBjaGFyKiBjbWFrZURpcmVjdG9yeUxhYmVscyA9CiAgICAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24oIkNNQUtFX0RJUkVDVE9SWV9MQUJFTFMiKTsKQEAgLTMwMTcsNyArMzA5MCw3IEBACiAgICAgLy8gTGlzdCB0aGUgdGFyZ2V0LXdpZGUgbGFiZWxzLiAgQWxsIHNvdXJjZXMgaW4gdGhlIHRhcmdldCBnZXQKICAgICAvLyB0aGVzZSBsYWJlbHMuCiAgICAgaWYgKHRhcmdldExhYmVscykgewotICAgICAgY21FeHBhbmRMaXN0KHRhcmdldExhYmVscywgbGFiZWxzKTsKKyAgICAgIGNtRXhwYW5kTGlzdCgqdGFyZ2V0TGFiZWxzLCBsYWJlbHMpOwogICAgICAgaWYgKCFsYWJlbHMuZW1wdHkoKSkgewogICAgICAgICBmb3V0IDw8ICIjIFRhcmdldCBsYWJlbHNcbiI7CiAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGwgOiBsYWJlbHMpIHsKQEAgLTMwMzIsNyArMzEwNSw3IEBACiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtYWtlRGlyZWN0b3J5TGFiZWxzTGlzdDsKIAogICAgIGlmIChkaXJlY3RvcnlMYWJlbHMpIHsKLSAgICAgIGNtRXhwYW5kTGlzdChkaXJlY3RvcnlMYWJlbHMsIGRpcmVjdG9yeUxhYmVsc0xpc3QpOworICAgICAgY21FeHBhbmRMaXN0KCpkaXJlY3RvcnlMYWJlbHMsIGRpcmVjdG9yeUxhYmVsc0xpc3QpOwogICAgIH0KIAogICAgIGlmIChjbWFrZURpcmVjdG9yeUxhYmVscykgewpAQCAtMzA1Nyw3ICszMTMwLDggQEAKICAgICBmb3V0IDw8ICIjIFNvdXJjZSBmaWxlcyBhbmQgdGhlaXIgbGFiZWxzXG4iOwogICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IHNvdXJjZXM7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KLSAgICAgIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXRHZW5lcmF0b3JDb25maWdzKCk7CisgICAgICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogY29uZmlncykgewogICAgICAgdGFyZ2V0LT5HZXRTb3VyY2VGaWxlcyhzb3VyY2VzLCBjKTsKICAgICB9CkBAIC0zMDY3LDEwICszMTQxLDEwIEBACiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgc2ZwID0gc2YtPlJlc29sdmVGdWxsUGF0aCgpOwogICAgICAgZm91dCA8PCBzZnAgPDwgIlxuIjsKICAgICAgIGxqX3NvdXJjZVsiZmlsZSJdID0gc2ZwOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIHN2YWx1ZSA9IHNmLT5HZXRQcm9wZXJ0eSgiTEFCRUxTIikpIHsKKyAgICAgIGlmIChjbVByb3Agc3ZhbHVlID0gc2YtPkdldFByb3BlcnR5KCJMQUJFTFMiKSkgewogICAgICAgICBsYWJlbHMuY2xlYXIoKTsKICAgICAgICAgSnNvbjo6VmFsdWUmIGxqX3NvdXJjZV9sYWJlbHMgPSBsal9zb3VyY2VbImxhYmVscyJdID0gSnNvbjo6YXJyYXlWYWx1ZTsKLSAgICAgICAgY21FeHBhbmRMaXN0KHN2YWx1ZSwgbGFiZWxzKTsKKyAgICAgICAgY21FeHBhbmRMaXN0KCpzdmFsdWUsIGxhYmVscyk7CiAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxhYmVsIDogbGFiZWxzKSB7CiAgICAgICAgICAgZm91dCA8PCAiICIgPDwgbGFiZWwgPDwgIlxuIjsKICAgICAgICAgICBsal9zb3VyY2VfbGFiZWxzLmFwcGVuZChsYWJlbCk7CkBAIC0zMTI0LDEwICszMTk4LDIwIEBACiAgIHJldHVybiB0aGlzLT5GaWxlbmFtZVRhcmdldERlcGVuZHNbc2ZdOwogfQogCitjb25zdCBzdGQ6OnN0cmluZyYgY21HbG9iYWxHZW5lcmF0b3I6OkdldFJlYWxQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIpCit7CisgIGF1dG8gaSA9IHRoaXMtPlJlYWxQYXRocy5sb3dlcl9ib3VuZChkaXIpOworICBpZiAoaSA9PSB0aGlzLT5SZWFsUGF0aHMuZW5kKCkgfHwKKyAgICAgIHRoaXMtPlJlYWxQYXRocy5rZXlfY29tcCgpKGRpciwgaS0+Zmlyc3QpKSB7CisgICAgaSA9IHRoaXMtPlJlYWxQYXRocy5lbXBsYWNlX2hpbnQoaSwgZGlyLCBjbVN5c3RlbVRvb2xzOjpHZXRSZWFsUGF0aChkaXIpKTsKKyAgfQorICByZXR1cm4gaS0+c2Vjb25kOworfQorCiB2b2lkIGNtR2xvYmFsR2VuZXJhdG9yOjpQcm9jZXNzRXZhbHVhdGlvbkZpbGVzKCkKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGdlbmVyYXRlZEZpbGVzOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoYXV0byYgbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICBsb2NhbEdlbi0+UHJvY2Vzc0V2YWx1YXRpb25GaWxlcyhnZW5lcmF0ZWRGaWxlcyk7CiAgIH0KIH0KQEAgLTMxNDMsMTEgKzMyMjcsMTIgQEAKICAgY21ha2U6Okluc3RhbGxlZEZpbGVzTWFwIGNvbnN0JiBpbnN0YWxsZWRGaWxlcyA9CiAgICAgdGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0SW5zdGFsbGVkRmlsZXMoKTsKIAotICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXTsKKyAgY29uc3QgYXV0byYgbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbMF07CiAgIGNtTWFrZWZpbGUqIG1mID0gbGctPkdldE1ha2VmaWxlKCk7CiAKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7Ci0gIHN0ZDo6c3RyaW5nIGNvbmZpZyA9IG1mLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdzLCBmYWxzZSk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzID0KKyAgICBtZi0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpPbmx5TXVsdGlDb25maWcpOworICBzdGQ6OnN0cmluZyBjb25maWcgPSBtZi0+R2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTsKIAogICBzdGQ6OnN0cmluZyBwYXRoID0gY21TdHJDYXQodGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9DUGFja1Byb3BlcnRpZXMuY21ha2UiKTsKQEAgLTMxNjIsOCArMzI0Nyw4IEBACiAgIGZvciAoYXV0byBjb25zdCYgaSA6IGluc3RhbGxlZEZpbGVzKSB7CiAgICAgY21JbnN0YWxsZWRGaWxlIGNvbnN0JiBpbnN0YWxsZWRGaWxlID0gaS5zZWNvbmQ7CiAKLSAgICBjbUNQYWNrUHJvcGVydGllc0dlbmVyYXRvciBjcGFja1Byb3BlcnRpZXNHZW5lcmF0b3IobGcsIGluc3RhbGxlZEZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3MpOworICAgIGNtQ1BhY2tQcm9wZXJ0aWVzR2VuZXJhdG9yIGNwYWNrUHJvcGVydGllc0dlbmVyYXRvcigKKyAgICAgIGxnLmdldCgpLCBpbnN0YWxsZWRGaWxlLCBjb25maWdzKTsKIAogICAgIGNwYWNrUHJvcGVydGllc0dlbmVyYXRvci5HZW5lcmF0ZShmaWxlLCBjb25maWcsIGNvbmZpZ3MpOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5oCmluZGV4IGYyNWZmN2IuLmMyYzgwYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvci5oCkBAIC0xNCw5ICsxNCwxMCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21fY29kZWN2dC5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRMaW5lcy5oIgogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbUV4cG9ydFNldC5oIgpAQCAtMjcsNyArMjgsNyBAQAogI2luY2x1ZGUgImNtVGFyZ2V0RGVwZW5kLmgiCiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCi0jICBpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCisjICBpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KIAogIyAgaW5jbHVkZSAiY21GaWxlTG9ja1Bvb2wuaCIKICNlbmRpZgpAQCAtNDMsNiArNDQsNyBAQAogY2xhc3MgY21NYWtlZmlsZTsKIGNsYXNzIGNtT3V0cHV0Q29udmVydGVyOwogY2xhc3MgY21Tb3VyY2VGaWxlOworY2xhc3MgY21TdGF0ZTsKIGNsYXNzIGNtU3RhdGVEaXJlY3Rvcnk7CiBjbGFzcyBjbWFrZTsKIApAQCAtNzEsNyArNzMsNyBAQAogICB2b2lkIEFkZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHN0YXJ0LAogICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCkKICAgewotICAgIGNtQXBwZW5kKFByaW1hcnlDb21tYW5kLCBzdGFydCwgZW5kKTsKKyAgICBjbTo6YXBwZW5kKFByaW1hcnlDb21tYW5kLCBzdGFydCwgZW5kKTsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIFByaW50YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNtSm9pbihQcmltYXJ5Q29tbWFuZCwgIiAiKTsgfQpAQCAtOTAsMTEgKzkyLDE0IEBACiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvcgogewogcHVibGljOgorICB1c2luZyBMb2NhbEdlbmVyYXRvclZlY3RvciA9IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPj47CisKICAgLy8hIEZyZWUgYW55IG1lbW9yeSBhbGxvY2F0ZWQgd2l0aCB0aGUgR2xvYmFsR2VuZXJhdG9yCiAgIGNtR2xvYmFsR2VuZXJhdG9yKGNtYWtlKiBjbSk7CiAgIHZpcnR1YWwgfmNtR2xvYmFsR2VuZXJhdG9yKCk7CiAKLSAgdmlydHVhbCBjbUxvY2FsR2VuZXJhdG9yKiBDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZik7CisgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IENyZWF0ZUxvY2FsR2VuZXJhdG9yKAorICAgIGNtTWFrZWZpbGUqIG1mKTsKIAogICAvLyEgR2V0IHRoZSBuYW1lIGZvciB0aGlzIGdlbmVyYXRvcgogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldE5hbWUoKSBjb25zdCB7IHJldHVybiAiR2VuZXJpYyI7IH0KQEAgLTEyOCw3ICsxMzMsMTQgQEAKIAogICAvKiogU2V0IHRoZSBnZW5lcmF0b3Itc3BlY2lmaWMgdG9vbHNldCBuYW1lLiAgUmV0dXJucyB0cnVlIGlmIHRvb2xzZXQKICAgICAgIGlzIHN1cHBvcnRlZCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgKi8KLSAgdmlydHVhbCBib29sIFNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBjbU1ha2VmaWxlKiBtZik7CisgIHZpcnR1YWwgYm9vbCBTZXRHZW5lcmF0b3JUb29sc2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywgYm9vbCBidWlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpOworCisgIC8qKiBSZWFkIGFueSBvdGhlciBjYWNoZSBlbnRyaWVzIG5lZWRlZCBmb3IgY21ha2UgLS1idWlsZC4gKi8KKyAgdmlydHVhbCBib29sIFJlYWRDYWNoZUVudHJpZXNGb3JCdWlsZChjb25zdCBjbVN0YXRlJiAvKnN0YXRlKi8pCisgIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQogCiAgIC8qKgogICAgKiBDcmVhdGUgTG9jYWxHZW5lcmF0b3JzIGFuZCBwcm9jZXNzIHRoZSBDTWFrZUxpc3RzIGZpbGVzLiBUaGlzIGRvZXMgbm90CkBAIC0xNTcsMTEgKzE2OSwxMSBAQAogICAgKi8KICAgdmlydHVhbCB2b2lkIEdlbmVyYXRlKCk7CiAKLSAgdmlydHVhbCBjbUxpbmtMaW5lQ29tcHV0ZXIqIENyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCisgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gQ3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgICBjbU91dHB1dENvbnZlcnRlciogb3V0cHV0Q29udmVydGVyLAogICAgIGNtU3RhdGVEaXJlY3RvcnkgY29uc3QmIHN0YXRlRGlyKSBjb25zdDsKIAotICBjbUxpbmtMaW5lQ29tcHV0ZXIqIENyZWF0ZU1TVkM2MExpbmtMaW5lQ29tcHV0ZXIoCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IENyZWF0ZU1TVkM2MExpbmtMaW5lQ29tcHV0ZXIoCiAgICAgY21PdXRwdXRDb252ZXJ0ZXIqIG91dHB1dENvbnZlcnRlciwKICAgICBjbVN0YXRlRGlyZWN0b3J5IGNvbnN0JiBzdGF0ZURpcikgY29uc3Q7CiAKQEAgLTI0NCwxMSArMjU2LDExIEBACiAgIGNtYWtlKiBHZXRDTWFrZUluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q01ha2VJbnN0YW5jZTsgfQogCiAgIHZvaWQgU2V0Q29uZmlndXJlZEZpbGVzUGF0aChjbUdsb2JhbEdlbmVyYXRvciogZ2VuKTsKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21NYWtlZmlsZSo+JiBHZXRNYWtlZmlsZXMoKSBjb25zdAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZT4+JiBHZXRNYWtlZmlsZXMoKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPk1ha2VmaWxlczsKICAgfQotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIEdldExvY2FsR2VuZXJhdG9ycygpIGNvbnN0CisgIGNvbnN0IExvY2FsR2VuZXJhdG9yVmVjdG9yJiBHZXRMb2NhbEdlbmVyYXRvcnMoKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPkxvY2FsR2VuZXJhdG9yczsKICAgfQpAQCAtMjYzLDExICsyNzUsMTEgQEAKICAgICB0aGlzLT5DdXJyZW50Q29uZmlndXJlTWFrZWZpbGUgPSBtZjsKICAgfQogCi0gIHZvaWQgQWRkTWFrZWZpbGUoY21NYWtlZmlsZSogbWYpOworICB2b2lkIEFkZE1ha2VmaWxlKHN0ZDo6dW5pcXVlX3B0cjxjbU1ha2VmaWxlPiBtZik7CiAKICAgLy8hIFNldCBhbiBnZW5lcmF0b3IgZm9yIGFuICJleHRlcm5hbCBtYWtlZmlsZSBiYXNlZCBwcm9qZWN0IgogICB2b2lkIFNldEV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yKAotICAgIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IqIGV4dHJhR2VuZXJhdG9yKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvcj4gZXh0cmFHZW5lcmF0b3IpOwogCiAgIHN0ZDo6c3RyaW5nIEdldEV4dHJhR2VuZXJhdG9yTmFtZSgpIGNvbnN0OwogCkBAIC0zNzcsNiArMzg5LDkgQEAKICAgLy8gTG9va3VwIGVkaXRfY2FjaGUgdGFyZ2V0IGNvbW1hbmQgcHJlZmVycmVkIGJ5IHRoaXMgZ2VuZXJhdG9yLgogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldEVkaXRDYWNoZUNvbW1hbmQoKSBjb25zdCB7IHJldHVybiAiIjsgfQogCisgIC8vIERlZmF1bHQgY29uZmlnIHRvIHVzZSBmb3IgY21ha2UgLS1idWlsZAorICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldERlZmF1bHRCdWlsZENvbmZpZygpIGNvbnN0IHsgcmV0dXJuICJEZWJ1ZyI7IH0KKwogICAvLyBDbGFzcyB0byB0cmFjayBhIHNldCBvZiBkZXBlbmRlbmNpZXMuCiAgIHVzaW5nIFRhcmdldERlcGVuZFNldCA9IGNtVGFyZ2V0RGVwZW5kU2V0OwogCkBAIC00MTAsNiArNDI1LDggQEAKIAogICB2aXJ0dWFsIGJvb2wgSXNYY29kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgdmlydHVhbCBib29sIElzVmlzdWFsU3R1ZGlvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAvKiogUmV0dXJuIHRydWUgaWYgd2Uga25vdyB0aGUgZXhhY3QgbG9jYXRpb24gb2Ygb2JqZWN0IGZpbGVzLgogICAgICAgSWYgZmFsc2UsIHN0b3JlIHRoZSByZWFzb24gaW4gdGhlIGdpdmVuIHN0cmluZy4KICAgICAgIFRoaXMgaXMgbWVhbmluZ2Z1bCBvbmx5IGFmdGVyIEVuYWJsZUxhbmd1YWdlIGhhcyBiZWVuIGNhbGxlZC4gICovCkBAIC00MzEsMTEgKzQ0OCwxNyBAQAogICAgICAgTWFjRm9sZGVyLiAqLwogICB2aXJ0dWFsIGJvb2wgU2hvdWxkU3RyaXBSZXNvdXJjZVBhdGgoY21NYWtlZmlsZSopIGNvbnN0OwogCisgIHZpcnR1YWwgYm9vbCBTdXBwb3J0c0N1c3RvbUNvbW1hbmREZXBmaWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICBzdGQ6OnN0cmluZyBHZXRTaGFyZWRMaWJGbGFnc0Zvckxhbmd1YWdlKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKIAogICAvKiogR2VuZXJhdGUgYW4gPG91dHB1dD4ucnVsZSBmaWxlIHBhdGggZm9yIGEgZ2l2ZW4gY29tbWFuZCBvdXRwdXQuICAqLwogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdlbmVyYXRlUnVsZUZpbGUoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCkgY29uc3Q7CiAKKyAgdmlydHVhbCBib29sIFN1cHBvcnRzRGVmYXVsdEJ1aWxkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgIHZpcnR1YWwgYm9vbCBTdXBwb3J0c0Nyb3NzQ29uZmlncygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgIHZpcnR1YWwgYm9vbCBTdXBwb3J0c0RlZmF1bHRDb25maWdzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICBzdGF0aWMgc3RkOjpzdHJpbmcgRXNjYXBlSlNPTihjb25zdCBzdGQ6OnN0cmluZyYgcyk7CiAKICAgdm9pZCBQcm9jZXNzRXZhbHVhdGlvbkZpbGVzKCk7CkBAIC00NDQsOCArNDY3LDggQEAKICAgewogICAgIHJldHVybiB0aGlzLT5CdWlsZEV4cG9ydFNldHM7CiAgIH0KLSAgdm9pZCBBZGRCdWlsZEV4cG9ydFNldChjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvciopOwotICB2b2lkIEFkZEJ1aWxkRXhwb3J0RXhwb3J0U2V0KGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKik7CisgIHZvaWQgQWRkQnVpbGRFeHBvcnRTZXQoY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqIGdlbik7CisgIHZvaWQgQWRkQnVpbGRFeHBvcnRFeHBvcnRTZXQoY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqIGdlbik7CiAgIGJvb2wgSXNFeHBvcnRlZFRhcmdldHNGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSkgY29uc3Q7CiAgIGJvb2wgR2VuZXJhdGVJbXBvcnRGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlKTsKICAgY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqIEdldEV4cG9ydGVkVGFyZ2V0c0ZpbGUoCkBAIC00NzUsMTMgKzQ5OCwxOSBAQAogCiAgIGludCBSZWN1cnNpb25EZXB0aDsKIAorICB2aXJ0dWFsIHZvaWQgR2V0UXRBdXRvR2VuQ29uZmlncyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvbmZpZ3MpIGNvbnN0CisgIHsKKyAgICBjb25maWdzLmVtcGxhY2VfYmFjaygiJDxDT05GSUc+Iik7CisgIH0KKworICBzdGQ6OnN0cmluZyBjb25zdCYgR2V0UmVhbFBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGRpcik7CisKIHByb3RlY3RlZDoKLSAgdXNpbmcgR2VuZXJhdG9yVmVjdG9yID0gc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+OwogICAvLyBmb3IgYSBwcm9qZWN0IGNvbGxlY3QgYWxsIGl0cyB0YXJnZXRzIGJ5IGZvbGxvd2luZyBkZXBlbmQKICAgLy8gaW5mb3JtYXRpb24sIGFuZCBhbHNvIGNvbGxlY3QgYWxsIHRoZSB0YXJnZXRzCiAgIHZvaWQgR2V0VGFyZ2V0U2V0cyhUYXJnZXREZXBlbmRTZXQmIHByb2plY3RUYXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0RGVwZW5kU2V0JiBvcmlnaW5hbFRhcmdldHMsIGNtTG9jYWxHZW5lcmF0b3IqIHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JWZWN0b3IgY29uc3QmKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiYgZ2VuZXJhdG9ycyk7CiAgIGJvb2wgSXNSb290T25seVRhcmdldChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KSBjb25zdDsKICAgdm9pZCBBZGRUYXJnZXREZXBlbmRzKGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXREZXBlbmRTZXQmIHByb2plY3RUYXJnZXRzKTsKQEAgLTUxMyw3ICs1NDIsOCBAQAogICBib29sIElzRXhjbHVkZWQoY21TdGF0ZVNuYXBzaG90IGNvbnN0JiByb290LAogICAgICAgICAgICAgICAgICAgY21TdGF0ZVNuYXBzaG90IGNvbnN0JiBzbnApIGNvbnN0OwogICBib29sIElzRXhjbHVkZWQoY21Mb2NhbEdlbmVyYXRvciogcm9vdCwgY21Mb2NhbEdlbmVyYXRvciogZ2VuKSBjb25zdDsKLSAgYm9vbCBJc0V4Y2x1ZGVkKGNtTG9jYWxHZW5lcmF0b3IqIHJvb3QsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpIGNvbnN0OworICBib29sIElzRXhjbHVkZWQoY21Mb2NhbEdlbmVyYXRvciogcm9vdCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpIGNvbnN0OwogICB2aXJ0dWFsIHZvaWQgSW5pdGlhbGl6ZVByb2dyZXNzTWFya3MoKSB7fQogCiAgIHN0cnVjdCBHbG9iYWxUYXJnZXRJbmZvCkBAIC01MjQsNiArNTU0LDggQEAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gRGVwZW5kczsKICAgICBzdGQ6OnN0cmluZyBXb3JraW5nRGlyOwogICAgIGJvb2wgVXNlc1Rlcm1pbmFsID0gZmFsc2U7CisgICAgY21UYXJnZXQ6OlBlckNvbmZpZyBQZXJDb25maWcgPSBjbVRhcmdldDo6UGVyQ29uZmlnOjpZZXM7CisgICAgYm9vbCBTdGRQaXBlc1VURjggPSBmYWxzZTsKICAgfTsKIAogICB2b2lkIENyZWF0ZURlZmF1bHRHbG9iYWxUYXJnZXRzKHN0ZDo6dmVjdG9yPEdsb2JhbFRhcmdldEluZm8+JiB0YXJnZXRzKTsKQEAgLTUzOSw4ICs1NzEsOCBAQAogICBzdGQ6OnN0cmluZyBGaW5kTWFrZVByb2dyYW1GaWxlOwogICBzdGQ6OnN0cmluZyBDb25maWd1cmVkRmlsZXNQYXRoOwogICBjbWFrZSogQ01ha2VJbnN0YW5jZTsKLSAgc3RkOjp2ZWN0b3I8Y21NYWtlZmlsZSo+IE1ha2VmaWxlczsKLSAgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+IExvY2FsR2VuZXJhdG9yczsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtTWFrZWZpbGU+PiBNYWtlZmlsZXM7CisgIExvY2FsR2VuZXJhdG9yVmVjdG9yIExvY2FsR2VuZXJhdG9yczsKICAgY21NYWtlZmlsZSogQ3VycmVudENvbmZpZ3VyZU1ha2VmaWxlOwogICAvLyBtYXAgZnJvbSBwcm9qZWN0IG5hbWUgdG8gdmVjdG9yIG9mIGxvY2FsIGdlbmVyYXRvcnMgaW4gdGhhdCBwcm9qZWN0CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4+IFByb2plY3RNYXA7CkBAIC01NTgsNyArNTkwLDcgQEAKIAogICBjbUdlbmVyYXRvclRhcmdldCogRmluZEdlbmVyYXRvclRhcmdldEltcGwoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpIGNvbnN0OwogCi0gIGNvbnN0IGNoYXIqIEdldFByZWRlZmluZWRUYXJnZXRzRm9sZGVyKCk7CisgIHN0ZDo6c3RyaW5nIEdldFByZWRlZmluZWRUYXJnZXRzRm9sZGVyKCk7CiAKIHByaXZhdGU6CiAgIHVzaW5nIFRhcmdldE1hcCA9IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgY21UYXJnZXQqPjsKQEAgLTY0Niw2ICs2NzgsOSBAQAogCiAgIHZpcnR1YWwgY29uc3QgY2hhciogR2V0QnVpbGRJZ25vcmVFcnJvcnNGbGFnKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCisgIGJvb2wgVW5zdXBwb3J0ZWRWYXJpYWJsZUlzRGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcG9ydGVkKSBjb25zdDsKKwogICAvLyBDYWNoZSBkaXJlY3RvcnkgY29udGVudCBhbmQgdGFyZ2V0IGZpbGVzIHRvIGJlIGJ1aWx0LgogICBzdHJ1Y3QgRGlyZWN0b3J5Q29udGVudAogICB7CkBAIC02NjYsNiArNzAxLDggQEAKICAgbXV0YWJsZSBzdGQ6Om1hcDxjbVNvdXJjZUZpbGUqLCBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+PgogICAgIEZpbGVuYW1lVGFyZ2V0RGVwZW5kczsKIAorICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IFJlYWxQYXRoczsKKwogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKICAgLy8gUG9vbCBvZiBmaWxlIGxvY2tzCiAgIGNtRmlsZUxvY2tQb29sIEZpbGVMb2NrUG9vbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkuaCBiL1NvdXJjZS9jbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkuaAppbmRleCBiYjVmNzRjLi4xM2NmZTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5LmgKKysrIGIvU291cmNlL2NtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeS5oCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKIGNsYXNzIGNtR2xvYmFsR2VuZXJhdG9yOwogY2xhc3MgY21ha2U7CiBzdHJ1Y3QgY21Eb2N1bWVudGF0aW9uRW50cnk7CkBAIC0yMyw4ICsyNSw4IEBACiAgIHZpcnR1YWwgfmNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSgpID0gZGVmYXVsdDsKIAogICAvKiogQ3JlYXRlIGEgR2xvYmFsR2VuZXJhdG9yICovCi0gIHZpcnR1YWwgY21HbG9iYWxHZW5lcmF0b3IqIENyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtYWtlKiBjbSkgY29uc3QgPSAwOworICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuLCBjbWFrZSogY20pIGNvbnN0ID0gMDsKIAogICAvKiogR2V0IHRoZSBkb2N1bWVudGF0aW9uIGVudHJ5IGZvciB0aGlzIGZhY3RvcnkgKi8KICAgdmlydHVhbCB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KSBjb25zdCA9IDA7CkBAIC00Miw3ICs0NCw3IEBACiAgIC8qKiBHZXQgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHBsYXRmb3JtcyBuYW1lIGZvciB0aGlzIGdlbmVyYXRvciAqLwogICB2aXJ0dWFsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRLbm93blBsYXRmb3JtcygpIGNvbnN0ID0gMDsKIAotICAvKiogSWYgdGhlIGdlbmVyYXRvciBzdXBvcnRzIHBsYXRmb3JtcywgZ2V0IGl0cyBkZWZhdWx0LiAgKi8KKyAgLyoqIElmIHRoZSBnZW5lcmF0b3Igc3VwcG9ydHMgcGxhdGZvcm1zLCBnZXQgaXRzIGRlZmF1bHQuICAqLwogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldERlZmF1bHRQbGF0Zm9ybU5hbWUoKSBjb25zdCA9IDA7CiB9OwogCkBAIC01MSwxMyArNTMsMTMgQEAKIHsKIHB1YmxpYzoKICAgLyoqIENyZWF0ZSBhIEdsb2JhbEdlbmVyYXRvciAqLwotICBjbUdsb2JhbEdlbmVyYXRvciogQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtYWtlKiBjbSkgY29uc3Qgb3ZlcnJpZGUKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtYWtlKiBjbSkgY29uc3Qgb3ZlcnJpZGUKICAgewogICAgIGlmIChuYW1lICE9IFQ6OkdldEFjdHVhbE5hbWUoKSkgewotICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KLSAgICByZXR1cm4gbmV3IFQoY20pOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KGNtOjptYWtlX3VuaXF1ZTxUPihjbSkpOwogICB9CiAKICAgLyoqIEdldCB0aGUgZG9jdW1lbnRhdGlvbiBlbnRyeSBmb3IgdGhpcyBmYWN0b3J5ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvci5jeHgKaW5kZXggNWE3MDhhYi4uN2M4NzEzMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yLmN4eApAQCAtOCw3ICs4LDEwIEBACiAjaW5jbHVkZSA8b3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3N0cmluZz4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbURvY3VtZW50YXRpb25FbnRyeS5oIgogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCkBAIC0xNiw2ICsxOSw3IEBACiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTG9jYWxHaHNNdWx0aUdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtNDAsMTAgKzQ0LDExIEBACiAKIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6On5jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCi1jbUxvY2FsR2VuZXJhdG9yKiBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcigKLSAgY21NYWtlZmlsZSogbWYpCitzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4KK2NtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKQogewotICByZXR1cm4gbmV3IGNtTG9jYWxHaHNNdWx0aUdlbmVyYXRvcih0aGlzLCBtZik7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4oCisgICAgY206Om1ha2VfdW5pcXVlPGNtTG9jYWxHaHNNdWx0aUdlbmVyYXRvcj4odGhpcywgbWYpKTsKIH0KIAogdm9pZCBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpHZXREb2N1bWVudGF0aW9uKGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSkKQEAgLTY0LDggKzY5LDExIEBACiB9CiAKIGJvb2wgY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcjo6U2V0R2VuZXJhdG9yVG9vbHNldChzdGQ6OnN0cmluZyBjb25zdCYgdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBidWlsZCwgY21NYWtlZmlsZSogbWYpCiB7CisgIGlmIChidWlsZCkgeworICAgIHJldHVybiB0cnVlOworICB9CiAgIHN0ZDo6c3RyaW5nIHRzcDsgLyogdG9vbHNldCBwYXRoICovCiAKICAgdGhpcy0+R2V0VG9vbHNldChtZiwgdHNwLCB0cyk7CkBAIC04NCw3ICs5Miw3IEBACiAgICAgLyogc3RvcmUgdGhlIGZ1bGwgdG9vbHNldCBmb3IgbGF0ZXIgdXNlCiAgICAgICogLS0gYWxyZWFkeSBkb25lIGlmIC1UPHRvb2xzZXQ+IHdhcyBzcGVjaWZpZWQKICAgICAgKi8KLSAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCIsIHRzcC5jX3N0cigpLAorICAgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIiwgdHNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2F0aW9uIG9mIGdlbmVyYXRvciB0b29sc2V0LiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKICAgfQpAQCAtMTA2LDggKzExNCw4IEBACiAgIH0KIAogICAvKiBzdG9yZSB0aGUgdG9vbHNldCB0aGF0IGlzIGJlaW5nIHVzZWQgZm9yIHRoaXMgYnVpbGQgKi8KLSAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfTUFLRV9QUk9HUkFNIiwgZ2J1aWxkLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWxkIHByb2dyYW0gdG8gdXNlIiwgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCwgdHJ1ZSk7CisgIG1mLT5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX01BS0VfUFJPR1JBTSIsIGdidWlsZCwgImJ1aWxkIHByb2dyYW0gdG8gdXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMLCB0cnVlKTsKIAogICBtZi0+QWRkRGVmaW5pdGlvbigiQ01BS0VfU1lTVEVNX1ZFUlNJT04iLCB0c3ApOwogCkBAIC0xMjYsNyArMTM0LDcgQEAKICAgICAvKiBzdG9yZSB0aGUgcGxhdGZvcm0gbmFtZSBmb3IgbGF0ZXIgdXNlCiAgICAgICogLS0gYWxyZWFkeSBkb25lIGlmIC1BPGFyY2g+IHdhcyBzcGVjaWZpZWQKICAgICAgKi8KLSAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0iLCBhcmNoLmNfc3RyKCksCisgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIiwgYXJjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lIG9mIGdlbmVyYXRvciBwbGF0Zm9ybS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CiAgIH0gZWxzZSB7CkBAIC0xNjAsNyArMTY4LDcgQEAKICAgaWYgKGNtSXNPZmYoYnNwTmFtZSkgJiYgcGxhdGZvcm0uZmluZCgiaW50ZWdyaXR5IikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBic3BOYW1lID0gInNpbSIgKyBhcmNoOwogICAgIC8qIHdyaXRlIGJhY2sgdGhlIGNhbGN1bGF0ZSBuYW1lIGZvciBuZXh0IHRpbWUgKi8KLSAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJHSFNfQlNQX05BTUUiLCBic3BOYW1lLmNfc3RyKCksCisgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiR0hTX0JTUF9OQU1FIiwgYnNwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lIG9mIEdIUyB0YXJnZXQgcGxhdGZvcm0uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RSSU5HLCB0cnVlKTsKICAgICBzdGQ6OnN0cmluZyBtID0gY21TdHJDYXQoCkBAIC0yMTAsMTAgKzIxOCwxMSBAQAogewogICBjb25zdCBjaGFyKiBnaHNSb290ID0gbWYtPkdldERlZmluaXRpb24oIkdIU19UT09MU0VUX1JPT1QiKTsKIAotICBpZiAoIWdoc1Jvb3QgfHwgZ2hzUm9vdFswXSA9PSAnXDAnKSB7Ci0gICAgZ2hzUm9vdCA9IERFRkFVTFRfVE9PTFNFVF9ST09UOworICBpZiAoY21Ob25lbXB0eShnaHNSb290KSkgeworICAgIHRzZCA9IGdoc1Jvb3Q7CisgIH0gZWxzZSB7CisgICAgdHNkID0gREVGQVVMVF9UT09MU0VUX1JPT1Q7CiAgIH0KLSAgdHNkID0gZ2hzUm9vdDsKIAogICBpZiAodHMuZW1wdHkoKSkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvdXRwdXQ7CkBAIC0yNDcsMTQgKzI1NiwxNSBAQAogCiB2b2lkIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OldyaXRlRmlsZUhlYWRlcihzdGQ6Om9zdHJlYW0mIGZvdXQpCiB7Ci0gIGZvdXQgPDwgIiMhZ2J1aWxkIiA8PCBzdGQ6OmVuZGw7Ci0gIGZvdXQgPDwgIiMiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIENNQUtFIGdlbmVyYXRlZCBmaWxlOiBETyBOT1QgRURJVCEiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8ICIjIEdlbmVyYXRlZCBieSBcIiIgPDwgR2V0QWN0dWFsTmFtZSgpIDw8ICJcIiIKLSAgICAgICA8PCAiIEdlbmVyYXRvciwgQ01ha2UgVmVyc2lvbiAiIDw8IGNtVmVyc2lvbjo6R2V0TWFqb3JWZXJzaW9uKCkgPDwgIi4iCi0gICAgICAgPDwgY21WZXJzaW9uOjpHZXRNaW5vclZlcnNpb24oKSA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgc3RkOjplbmRsOworICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgIGZvdXQgPDwgIiMhZ2J1aWxkXG4iCisgICAgICAgICAgIiNcbiIKKyAgICAgICAgICAiIyBDTUFLRSBnZW5lcmF0ZWQgZmlsZTogRE8gTk9UIEVESVQhXG4iCisgICAgICAgICAgIiMgR2VuZXJhdGVkIGJ5IFwiIiA8PCBHZXRBY3R1YWxOYW1lKCkgPDwgIlwiIgorICAgICAgICAgICIgR2VuZXJhdG9yLCBDTWFrZSBWZXJzaW9uICIgPDwgY21WZXJzaW9uOjpHZXRNYWpvclZlcnNpb24oKSA8PCAnLicKKyAgICAgICA8PCBjbVZlcnNpb246OkdldE1pbm9yVmVyc2lvbigpIDw8ICJcbiIKKyAgICAgICAgICAiI1xuXG4iOworICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KIH0KIAogdm9pZCBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpXcml0ZUN1c3RvbVJ1bGVCT0Qoc3RkOjpvc3RyZWFtJiBmb3V0KQpAQCAtMjYyLDM2ICsyNzIsMzYgQEAKICAgZm91dCA8PCAiQ29tbWFuZHMge1xuIgogICAgICAgICAgICIgIEN1c3RvbV9SdWxlX0NvbW1hbmQge1xuIgogICAgICAgICAgICIgICAgbmFtZSA9IFwiQ3VzdG9tIFJ1bGUgQ29tbWFuZFwiXG4iCi0gICAgICAgICAgIiAgICBleGVjID0gXCIiOworICAgICAgICAgICIgICAgZXhlYyA9IFwiIgogI2lmZGVmIF9XSU4zMgotICBmb3V0IDw8ICJjbWQuZXhlIjsKKyAgICAgICAgICAiY21kLmV4ZSIKICNlbHNlCi0gIGZvdXQgPDwgIi9iaW4vc2giOworICAgICAgICAgICIvYmluL3NoIgogI2VuZGlmCi0gIGZvdXQgPDwgIlwiXG4iCisgICAgICAgICAgIlwiXG4iCiAgICAgICAgICAgIiAgICBvcHRpb25zID0ge1wiU3BlY2lhbE9wdGlvbnNcIn1cbiIKICAgICAgICAgICAiICB9XG4iCi0gICAgICAgICAgIn1cbiI7CisgICAgICAgICAgIn1cbiIKIAotICBmb3V0IDw8ICJcblxuIjsKLSAgZm91dCA8PCAiRmlsZVR5cGVzIHtcbiIKKyAgICAgICAgICAiXG5cbiIKKyAgICAgICAgICAiRmlsZVR5cGVzIHtcbiIKICAgICAgICAgICAiICBDbWFrZVJ1bGUge1xuIgogICAgICAgICAgICIgICAgbmFtZSA9IFwiQ3VzdG9tIFJ1bGVcIlxuIgogICAgICAgICAgICIgICAgYWN0aW9uID0gXCImUnVuXCJcbiIKLSAgICAgICAgICAiICAgIGV4dGVuc2lvbnMgPSB7XCIiOworICAgICAgICAgICIgICAgZXh0ZW5zaW9ucyA9IHtcIiIKICNpZmRlZiBfV0lOMzIKLSAgZm91dCA8PCAiYmF0IjsKKyAgICAgICAgICAiYmF0IgogI2Vsc2UKLSAgZm91dCA8PCAic2giOworICAgICAgICAgICJzaCIKICNlbmRpZgotICBmb3V0IDw8ICJcIn1cbiIKKyAgICAgICAgICAiXCJ9XG4iCiAgICAgICAgICAgIiAgICBncmVwYWJsZSA9IGZhbHNlXG4iCiAgICAgICAgICAgIiAgICBjb21tYW5kID0gXCJDdXN0b20gUnVsZSBDb21tYW5kXCJcbiIKLSAgICAgICAgICAiICAgIGNvbW1hbmRMaW5lID0gXCIkQ09NTUFORCAiOworICAgICAgICAgICIgICAgY29tbWFuZExpbmUgPSBcIiRDT01NQU5EICIKICNpZmRlZiBfV0lOMzIKLSAgZm91dCA8PCAiL2MiOworICAgICAgICAgICIvYyIKICNlbmRpZgotICBmb3V0IDw8ICIgJElOUFVURklMRVwiXG4iCisgICAgICAgICAgIiAkSU5QVVRGSUxFXCJcbiIKICAgICAgICAgICAiICAgIHByb2dyZXNzID0gXCJQcm9jZXNzaW5nIEN1c3RvbSBSdWxlXCJcbiIKICAgICAgICAgICAiICAgIHByb21vdGVUb0ZpcnN0UGFzcyA9IHRydWVcbiIKICAgICAgICAgICAiICAgIG91dHB1dFR5cGUgPSBcIk5vbmVcIlxuIgpAQCAtMzIxLDEzICszMzEsMTMgQEAKICAgdGhpcy0+V3JpdGVIaWdoTGV2ZWxEaXJlY3RpdmVzKHJvb3QsIGZvdXQpOwogICBHaHNNdWx0aUdwajo6V3JpdGVHcGpUYWcoR2hzTXVsdGlHcGo6OlBST0pFQ1QsIGZvdXQpOwogCi0gIGZvdXQgPDwgIiMgVG9wIExldmVsIFByb2plY3QgRmlsZSIgPDwgc3RkOjplbmRsOworICBmb3V0IDw8ICIjIFRvcCBMZXZlbCBQcm9qZWN0IEZpbGVcbiI7CiAKICAgLy8gU3BlY2lmeSBCU1Agb3B0aW9uIGlmIHN1cHBsaWVkIGJ5IHVzZXIKICAgY29uc3QgY2hhciogYnNwTmFtZSA9CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRDYWNoZURlZmluaXRpb24oIkdIU19CU1BfTkFNRSIpOwogICBpZiAoIWNtSXNPZmYoYnNwTmFtZSkpIHsKLSAgICBmb3V0IDw8ICIgICAgLWJzcCAiIDw8IGJzcE5hbWUgPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgIiAgICAtYnNwICIgPDwgYnNwTmFtZSA8PCAnXG4nOwogICB9CiAKICAgLy8gU3BlY2lmeSBPUyBESVIgaWYgc3VwcGxpZWQgYnkgdXNlcgpAQCAtMzQyLDE0ICszNTIsMTQgQEAKICAgICB9IGVsc2UgewogICAgICAgZm91dCA8PCBvc0Rpck9wdGlvbjsKICAgICB9Ci0gICAgZm91dCA8PCAiXCIiIDw8IHRoaXMtPk9zRGlyIDw8ICJcIiIgPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgIlwiIiA8PCB0aGlzLT5Pc0RpciA8PCAiXCJcbiI7CiAgIH0KIH0KIAogdm9pZCBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpXcml0ZVN1YlByb2plY3RzKHN0ZDo6b3N0cmVhbSYgZm91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgYWxsX3RhcmdldCkKIHsKLSAgZm91dCA8PCAiQ01ha2VGaWxlcy8iIDw8IGFsbF90YXJnZXQgPDwgIiBbUHJvamVjdF0iIDw8IHN0ZDo6ZW5kbDsKKyAgZm91dCA8PCAiQ01ha2VGaWxlcy8iIDw8IGFsbF90YXJnZXQgPDwgIiBbUHJvamVjdF1cbiI7CiAgIC8vIEFsbCBrbm93biB0YXJnZXRzCiAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCA6IHRoaXMtPlByb2plY3RUYXJnZXRzKSB7CiAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgfHwKQEAgLTM2MCw3ICszNzAsNyBAQAogICAgICAgY29udGludWU7CiAgICAgfQogICAgIGZvdXQgPDwgIkNNYWtlRmlsZXMvIiA8PCB0YXJnZXQtPkdldE5hbWUoKSArICIudGd0IiArIEZJTEVfRVhURU5TSU9OCi0gICAgICAgICA8PCAiIFtQcm9qZWN0XSIgPDwgc3RkOjplbmRsOworICAgICAgICAgPDwgIiBbUHJvamVjdF1cbiI7CiAgIH0KIH0KIApAQCAtMzY4LDggKzM3OCw4IEBACiAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY21Mb2NhbEdlbmVyYXRvciogcm9vdCwKICAgc3RkOjpzdHJpbmcmIHJvb3RCaW5hcnlEaXIpCiB7Ci0gIGNvbnN0IGNoYXIqIHByb2pOYW1lID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIpOwotICBjb25zdCBjaGFyKiBwcm9qVHlwZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUVfRVhUIik7CisgIGNtUHJvcCBwcm9qTmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUUiKTsKKyAgY21Qcm9wIHByb2pUeXBlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRV9FWFQiKTsKICAgaWYgKHByb2pOYW1lICYmIHByb2pUeXBlKSB7CiAgICAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgc3RkOjpzdHJpbmcgZGlyID0gbGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKQEAgLTM4Miw5ICszOTIsOSBAQAogICAgICAgfQogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIHByb2pGaWxlID0gZGlyICsgcHJvak5hbWUgKyBGSUxFX0VYVEVOU0lPTjsKKyAgICBzdGQ6OnN0cmluZyBwcm9qRmlsZSA9IGRpciArICpwcm9qTmFtZSArIEZJTEVfRVhURU5TSU9OOwogICAgIGZvdXQgPDwgcHJvakZpbGU7Ci0gICAgZm91dCA8PCAiICIgPDwgcHJvalR5cGUgPDwgc3RkOjplbmRsOworICAgIGZvdXQgPDwgJyAnIDw8ICpwcm9qVHlwZSA8PCAnXG4nOwogICB9IGVsc2UgewogICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlID0KQEAgLTQ1OCwxMCArNDY4LDEwIEBACiAgICAgdGhpcy0+UHJvamVjdFRhcmdldHMucHVzaF9iYWNrKHQpOwogICB9CiAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHQgOiBzb3J0ZWRQcm9qZWN0VGFyZ2V0cykgewotICAgIGlmICh0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgeworICAgIGlmICghdC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICBpZiAoIWNtSXNPbih0LT5HZXRQcm9wZXJ0eSgiRVhDTFVERV9GUk9NX0FMTCIpKSkgeworICAgIGlmICghSXNFeGNsdWRlZCh0LT5HZXRMb2NhbEdlbmVyYXRvcigpLCB0KSkgewogICAgICAgZGVmYXVsdFRhcmdldHMucHVzaF9iYWNrKHQpOwogICAgIH0KICAgfQpAQCAtNTc3LDE0ICs1ODcsMTQgQEAKICAgICAvKiBpZiBtdWx0aXBsZSB0b3AtcHJvamVjdHMgYXJlIGZvdW5kIGluIGJ1aWxkIGRpcmVjdG9yeQogICAgICAqIHRoZW4gcHJlZmVyIHByb2plY3ROYW1lIHRvcC1wcm9qZWN0LgogICAgICAqLwotICAgIGlmICghY21Db250YWlucyhmaWxlcywgcHJvaikpIHsKKyAgICBpZiAoIWNtOjpjb250YWlucyhmaWxlcywgcHJvaikpIHsKICAgICAgIHByb2ogPSBmaWxlcy5hdCgwKTsKICAgICB9CiAgIH0KIAogICBtYWtlQ29tbWFuZC5BZGQoIi10b3AiLCBwcm9qKTsKICAgaWYgKCF0YXJnZXROYW1lcy5lbXB0eSgpKSB7Ci0gICAgaWYgKGNtQ29udGFpbnModGFyZ2V0TmFtZXMsICJjbGVhbiIpKSB7CisgICAgaWYgKGNtOjpjb250YWlucyh0YXJnZXROYW1lcywgImNsZWFuIikpIHsKICAgICAgIG1ha2VDb21tYW5kLkFkZCgiLWNsZWFuIik7CiAgICAgfSBlbHNlIHsKICAgICAgIGZvciAoY29uc3QgYXV0byYgdG5hbWUgOiB0YXJnZXROYW1lcykgewpAQCAtNjA2LDE0ICs2MTYsMTQgQEAKIHZvaWQgY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcjo6V3JpdGVNYWNyb3Moc3RkOjpvc3RyZWFtJiBmb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxvY2FsR2VuZXJhdG9yKiByb290KQogewotICBmb3V0IDw8ICJtYWNybyBQUk9KX05BTUU9IiA8PCByb290LT5HZXRQcm9qZWN0TmFtZSgpIDw8IHN0ZDo6ZW5kbDsKKyAgZm91dCA8PCAibWFjcm8gUFJPSl9OQU1FPSIgPDwgcm9vdC0+R2V0UHJvamVjdE5hbWUoKSA8PCAnXG4nOwogICBjaGFyIGNvbnN0KiBnaHNHcGpNYWNyb3MgPQogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0Q2FjaGVEZWZpbml0aW9uKCJHSFNfR1BKX01BQ1JPUyIpOwogICBpZiAobnVsbHB0ciAhPSBnaHNHcGpNYWNyb3MpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZXhwYW5kZWRMaXN0ID0KICAgICAgIGNtRXhwYW5kZWRMaXN0KHN0ZDo6c3RyaW5nKGdoc0dwak1hY3JvcykpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGFyZyA6IGV4cGFuZGVkTGlzdCkgewotICAgICAgZm91dCA8PCAibWFjcm8gIiA8PCBhcmcgPDwgc3RkOjplbmRsOworICAgICAgZm91dCA8PCAibWFjcm8gIiA8PCBhcmcgPDwgJ1xuJzsKICAgICB9CiAgIH0KIH0KQEAgLTYyNSw3ICs2MzUsNyBAQAogICBzdGQ6OnN0cmluZyB0Z3Q7CiAgIGNvbnN0IGNoYXIqIHQgPQogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0Q2FjaGVEZWZpbml0aW9uKCJHSFNfUFJJTUFSWV9UQVJHRVQiKTsKLSAgaWYgKHQgJiYgKnQgIT0gJ1wwJykgeworICBpZiAoY21Ob25lbXB0eSh0KSkgewogICAgIHRndCA9IHQ7CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5NYXJrQ2xpQXNVc2VkKCJHSFNfUFJJTUFSWV9UQVJHRVQiKTsKICAgfSBlbHNlIHsKQEAgLTYzNiwzMCArNjQ2LDI3IEBACiAgICAgdGd0ID0gY21TdHJDYXQoKGEgPyBhIDogIiIpLCAnXycsIChwID8gcCA6ICIiKSwgIi50Z3QiKTsKICAgfQogCi0gIGZvdXQgPDwgInByaW1hcnlUYXJnZXQ9IiA8PCB0Z3QgPDwgc3RkOjplbmRsOwotICBmb3V0IDw8ICJjdXN0b21pemF0aW9uPSIgPDwgcm9vdC0+R2V0QmluYXJ5RGlyZWN0b3J5KCkKLSAgICAgICA8PCAiL0NNYWtlRmlsZXMvY3VzdG9tX3J1bGUuYm9kIiA8PCBzdGQ6OmVuZGw7Ci0gIGZvdXQgPDwgImN1c3RvbWl6YXRpb249IiA8PCByb290LT5HZXRCaW5hcnlEaXJlY3RvcnkoKQotICAgICAgIDw8ICIvQ01ha2VGaWxlcy9jdXN0b21fdGFyZ2V0LmJvZCIgPDwgc3RkOjplbmRsOworICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgIGZvdXQgPDwgInByaW1hcnlUYXJnZXQ9IiA8PCB0Z3QgPDwgIlxuIgorICAgICAgICAgICJjdXN0b21pemF0aW9uPSIgPDwgcm9vdC0+R2V0QmluYXJ5RGlyZWN0b3J5KCkKKyAgICAgICA8PCAiL0NNYWtlRmlsZXMvY3VzdG9tX3J1bGUuYm9kXG4iCisgICAgICAgICAgImN1c3RvbWl6YXRpb249IiA8PCByb290LT5HZXRCaW5hcnlEaXJlY3RvcnkoKQorICAgICAgIDw8ICIvQ01ha2VGaWxlcy9jdXN0b21fdGFyZ2V0LmJvZCIgPDwgJ1xuJzsKKyAgLyogY2xhbmctZm9ybWF0IG9uICovCiAKICAgY2hhciBjb25zdCogY29uc3QgY3VzdG9taXphdGlvbiA9CiAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRDYWNoZURlZmluaXRpb24oIkdIU19DVVNUT01JWkFUSU9OIik7CiAgIGlmIChudWxscHRyICE9IGN1c3RvbWl6YXRpb24gJiYgc3RybGVuKGN1c3RvbWl6YXRpb24pID4gMCkgewotICAgIGZvdXQgPDwgImN1c3RvbWl6YXRpb249IiA8PCB0aGlzLT5UcmltUXVvdGVzKGN1c3RvbWl6YXRpb24pIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICJjdXN0b21pemF0aW9uPSIKKyAgICAgICAgIDw8IGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I6OlRyaW1RdW90ZXMoY3VzdG9taXphdGlvbikgPDwgJ1xuJzsKICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPk1hcmtDbGlBc1VzZWQoIkdIU19DVVNUT01JWkFUSU9OIik7CiAgIH0KIH0KIAotc3RkOjpzdHJpbmcgY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcjo6VHJpbVF1b3RlcyhzdGQ6OnN0cmluZyBjb25zdCYgc3RyKQorc3RkOjpzdHJpbmcgY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcjo6VHJpbVF1b3RlcyhzdGQ6OnN0cmluZyBzdHIpCiB7Ci0gIHN0ZDo6c3RyaW5nIHJlc3VsdDsKLSAgcmVzdWx0LnJlc2VydmUoc3RyLnNpemUoKSk7Ci0gIGZvciAoY29uc3QgY2hhciogY2ggPSBzdHIuY19zdHIoKTsgKmNoICE9ICdcMCc7ICsrY2gpIHsKLSAgICBpZiAoKmNoICE9ICciJykgewotICAgICAgcmVzdWx0ICs9ICpjaDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKKyAgY206OmVyYXNlKHN0ciwgJyInKTsKKyAgcmV0dXJuIHN0cjsKIH0KIAogYm9vbCBjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpUYXJnZXRDb21wYXJlOjpvcGVyYXRvcigpKApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yLmgKaW5kZXggY2NmZTA3My4uMTJjYThiNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvci5oCkBAIC00LDYgKzQsNyBAQAogI2RlZmluZSBjbUdoc011bHRpR2VuZXJhdG9yX2gKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtMjgsMTMgKzI5LDE1IEBACiAgIGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IoY21ha2UqIGNtKTsKICAgfmNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3IoKSBvdmVycmlkZTsKIAotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCkKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKQogICB7Ci0gICAgcmV0dXJuIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxHaHNNdWx0aUdlbmVyYXRvcj4oKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4oCisgICAgICBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PGNtR2xvYmFsR2hzTXVsdGlHZW5lcmF0b3I+KCkpOwogICB9CiAKICAgLy8hIGNyZWF0ZSB0aGUgY29ycmVjdCBsb2NhbCBnZW5lcmF0b3IKLSAgY21Mb2NhbEdlbmVyYXRvciogQ3JlYXRlTG9jYWxHZW5lcmF0b3IoY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4gQ3JlYXRlTG9jYWxHZW5lcmF0b3IoCisgICAgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwogCiAgIC8vLyBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgZ2VuZXJhdG9yLgogICBzdGF0aWMgc3RkOjpzdHJpbmcgR2V0QWN0dWFsTmFtZSgpIHsgcmV0dXJuICJHcmVlbiBIaWxscyBNVUxUSSI7IH0KQEAgLTU4LDcgKzYxLDggQEAKICAgc3RhdGljIGJvb2wgU3VwcG9ydHNQbGF0Zm9ybSgpIHsgcmV0dXJuIHRydWU7IH0KIAogICAvLyBUb29sc2V0IC8gUGxhdGZvcm0gU3VwcG9ydAotICBib29sIFNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisgIGJvb2wgU2V0R2VuZXJhdG9yVG9vbHNldChzdGQ6OnN0cmluZyBjb25zdCYgdHMsIGJvb2wgYnVpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CiAgIGJvb2wgU2V0R2VuZXJhdG9yUGxhdGZvcm0oc3RkOjpzdHJpbmcgY29uc3QmIHAsIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKIAogICAvKioKQEAgLTEwNyw3ICsxMTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiYgZ2VuZXJhdG9ycywKICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgYWxsX3RhcmdldCk7CiAKLSAgc3RkOjpzdHJpbmcgVHJpbVF1b3RlcyhzdGQ6OnN0cmluZyBjb25zdCYgc3RyKTsKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIFRyaW1RdW90ZXMoc3RkOjpzdHJpbmcgc3RyKTsKIAogICBzdGQ6OnN0cmluZyBPc0RpcjsKICAgc3RhdGljIGNvbnN0IGNoYXIqIERFRkFVTFRfQlVJTERfUFJPR1JBTTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yLmN4eAppbmRleCBmZjU0Mjg4Li5mYzMxMjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxKT01NYWtlZmlsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsSk9NTWFrZWZpbGVHZW5lcmF0b3IuY3h4CkBAIC02Niw3ICs2Niw3IEBACiAgIC8vIFNpbmNlIHdlIGhhdmUgZnVsbCBjb250cm9sIG92ZXIgdGhlIGludm9jYXRpb24gb2YgSk9NLCBsZXQgdXMKICAgLy8gbWFrZSBpdCBxdWlldC4KICAgam9tTWFrZU9wdGlvbnMucHVzaF9iYWNrKHRoaXMtPk1ha2VTaWxlbnRGbGFnKTsKLSAgY21BcHBlbmQoam9tTWFrZU9wdGlvbnMsIG1ha2VPcHRpb25zKTsKKyAgY206OmFwcGVuZChqb21NYWtlT3B0aW9ucywgbWFrZU9wdGlvbnMpOwogCiAgIC8vIEpPTSBkb2VzIHBhcmFsbGVsIGJ1aWxkcyBieSBkZWZhdWx0LCB0aGUgLWogaXMgb25seSBuZWVkZWQgaWYgYSBzcGVjaWZpYwogICAvLyBudW1iZXIgaXMgZ2l2ZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxKT01NYWtlZmlsZUdlbmVyYXRvci5oCmluZGV4IGZjMzlkZGYuLjlmMWVjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsSk9NTWFrZWZpbGVHZW5lcmF0b3IuaApAQCAtNCw2ICs0LDcgQEAKICNkZWZpbmUgY21HbG9iYWxKT01NYWtlZmlsZUdlbmVyYXRvcl9oCiAKICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogCiAjaW5jbHVkZSAiY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgiCiAKQEAgLTE2LDkgKzE3LDEwIEBACiB7CiBwdWJsaWM6CiAgIGNtR2xvYmFsSk9NTWFrZWZpbGVHZW5lcmF0b3IoY21ha2UqIGNtKTsKLSAgc3RhdGljIGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogTmV3RmFjdG9yeSgpCisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCkKICAgewotICAgIHJldHVybiBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PGNtR2xvYmFsSk9NTWFrZWZpbGVHZW5lcmF0b3I+KCk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KAorICAgICAgbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbEpPTU1ha2VmaWxlR2VuZXJhdG9yPigpKTsKICAgfQogICAvLyEgR2V0IHRoZSBuYW1lIGZvciB0aGUgZ2VuZXJhdG9yLgogICBzdGQ6OnN0cmluZyBHZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbE1TWVNNYWtlZmlsZUdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsTVNZU01ha2VmaWxlR2VuZXJhdG9yLmgKaW5kZXggZDZlNDg0Ny4uYjJkZTRmZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsTVNZU01ha2VmaWxlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsTVNZU01ha2VmaWxlR2VuZXJhdG9yLmgKQEAgLTMsNiArMyw4IEBACiAjaWZuZGVmIGNtR2xvYmFsTVNZU01ha2VmaWxlR2VuZXJhdG9yX2gKICNkZWZpbmUgY21HbG9iYWxNU1lTTWFrZWZpbGVHZW5lcmF0b3JfaAogCisjaW5jbHVkZSA8bWVtb3J5PgorCiAjaW5jbHVkZSAiY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgiCiAKIC8qKiBcY2xhc3MgY21HbG9iYWxNU1lTTWFrZWZpbGVHZW5lcmF0b3IKQEAgLTE0LDkgKzE2LDEwIEBACiB7CiBwdWJsaWM6CiAgIGNtR2xvYmFsTVNZU01ha2VmaWxlR2VuZXJhdG9yKGNtYWtlKiBjbSk7Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKQorICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpCiAgIHsKLSAgICByZXR1cm4gbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbE1TWVNNYWtlZmlsZUdlbmVyYXRvcj4oKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4oCisgICAgICBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PGNtR2xvYmFsTVNZU01ha2VmaWxlR2VuZXJhdG9yPigpKTsKICAgfQogCiAgIC8vISBHZXQgdGhlIG5hbWUgZm9yIHRoZSBnZW5lcmF0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxNaW5HV01ha2VmaWxlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxNaW5HV01ha2VmaWxlR2VuZXJhdG9yLmgKaW5kZXggMTUyOTdlMy4uYTlmOTJhMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsTWluR1dNYWtlZmlsZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbE1pbkdXTWFrZWZpbGVHZW5lcmF0b3IuaApAQCAtMyw2ICszLDggQEAKICNpZm5kZWYgY21HbG9iYWxNaW5HV01ha2VmaWxlR2VuZXJhdG9yX2gKICNkZWZpbmUgY21HbG9iYWxNaW5HV01ha2VmaWxlR2VuZXJhdG9yX2gKIAorI2luY2x1ZGUgPG1lbW9yeT4KKwogI2luY2x1ZGUgImNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgogCiAvKiogXGNsYXNzIGNtR2xvYmFsTWluR1dNYWtlZmlsZUdlbmVyYXRvcgpAQCAtMTQsMTAgKzE2LDEwIEBACiB7CiBwdWJsaWM6CiAgIGNtR2xvYmFsTWluR1dNYWtlZmlsZUdlbmVyYXRvcihjbWFrZSogY20pOwotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCkKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKQogICB7Ci0gICAgcmV0dXJuIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Ci0gICAgICBjbUdsb2JhbE1pbkdXTWFrZWZpbGVHZW5lcmF0b3I+KCk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KAorICAgICAgbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbE1pbkdXTWFrZWZpbGVHZW5lcmF0b3I+KCkpOwogICB9CiAgIC8vISBHZXQgdGhlIG5hbWUgZm9yIHRoZSBnZW5lcmF0b3IuCiAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgR2V0TmFtZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3IuY3h4CmluZGV4IDIyNzNjMDAuLmM0YmVjMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3IuY3h4CkBAIC02Niw3ICs2Niw3IEBACiAgIC8vIFNpbmNlIHdlIGhhdmUgZnVsbCBjb250cm9sIG92ZXIgdGhlIGludm9jYXRpb24gb2Ygbm1ha2UsIGxldCB1cwogICAvLyBtYWtlIGl0IHF1aWV0LgogICBubWFrZU1ha2VPcHRpb25zLnB1c2hfYmFjayh0aGlzLT5NYWtlU2lsZW50RmxhZyk7Ci0gIGNtQXBwZW5kKG5tYWtlTWFrZU9wdGlvbnMsIG1ha2VPcHRpb25zKTsKKyAgY206OmFwcGVuZChubWFrZU1ha2VPcHRpb25zLCBtYWtlT3B0aW9ucyk7CiAKICAgcmV0dXJuIHRoaXMtPmNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6R2VuZXJhdGVCdWlsZENvbW1hbmQoCiAgICAgbWFrZVByb2dyYW0sIHByb2plY3ROYW1lLCBwcm9qZWN0RGlyLCB0YXJnZXROYW1lcywgY29uZmlnLCBmYXN0LApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvci5oCmluZGV4IDQ1ODZiNzcuLmZkZjYwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yLmgKQEAgLTQsNiArNCw3IEBACiAjZGVmaW5lIGNtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvcl9oCiAKICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogCiAjaW5jbHVkZSAiY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgiCiAKQEAgLTE2LDEwICsxNywxMCBAQAogewogcHVibGljOgogICBjbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3IoY21ha2UqIGNtKTsKLSAgc3RhdGljIGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogTmV3RmFjdG9yeSgpCisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCkKICAgewotICAgIHJldHVybiBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PAotICAgICAgY21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yPigpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PigKKyAgICAgIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yPigpKTsKICAgfQogICAvLyEgR2V0IHRoZSBuYW1lIGZvciB0aGUgZ2VuZXJhdG9yLgogICBzdGQ6OnN0cmluZyBHZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbE5pbmphR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbE5pbmphR2VuZXJhdG9yLmN4eAppbmRleCBkYTIxZDZjLi4yZWYyMDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxOaW5qYUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsTmluamFHZW5lcmF0b3IuY3h4CkBAIC01LDI0ICs1LDI2IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNjdHlwZT4KICNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8c3N0cmVhbT4KIAorI2luY2x1ZGUgPGNtL2l0ZXJhdG9yPgogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvbWVtb3J5PgorCisjaW5jbHVkZSA8Y20zcC9qc29uL3JlYWRlci5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF9yZWFkZXIuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCi0jaW5jbHVkZSAiY21fanNvbmNwcF93cml0ZXIuaCIKLQotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCiAjaW5jbHVkZSAiY21Gb3J0cmFuUGFyc2VyLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiY21MaW5rTGluZUNvbXB1dGVyLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTG9jYWxOaW5qYUdlbmVyYXRvci5oIgpAQCAtNDIsMTAgKzQ0LDkgQEAKICNpbmNsdWRlICJjbVZlcnNpb24uaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCi1jbGFzcyBjbUxpbmtMaW5lQ29tcHV0ZXI7Ci0KIGNvbnN0IGNoYXIqIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6Ok5JTkpBX0JVSUxEX0ZJTEUgPSAiYnVpbGQubmluamEiOwotY29uc3QgY2hhciogY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TklOSkFfUlVMRVNfRklMRSA9ICJydWxlcy5uaW5qYSI7Citjb25zdCBjaGFyKiBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpOSU5KQV9SVUxFU19GSUxFID0KKyAgIkNNYWtlRmlsZXMvcnVsZXMubmluamEiOwogY29uc3QgY2hhciogY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6SU5ERU5UID0gIiAgIjsKICNpZmRlZiBfV0lOMzIKIHN0ZDo6c3RyaW5nIGNvbnN0IGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OlNIRUxMX05PT1AgPSAiY2QgLiI7CkBAIC04MywxMyArODQsMTUgQEAKICAgb3MgPDwgIiMgIiA8PCBjb21tZW50LnN1YnN0cihscG9zKSA8PCAiXG5cbiI7CiB9CiAKLWNtTGlua0xpbmVDb21wdXRlciogY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6Q3JlYXRlTGlua0xpbmVDb21wdXRlcigKK3N0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+CitjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpDcmVhdGVMaW5rTGluZUNvbXB1dGVyKAogICBjbU91dHB1dENvbnZlcnRlciogb3V0cHV0Q29udmVydGVyLAogICBjbVN0YXRlRGlyZWN0b3J5IGNvbnN0JiAvKiBzdGF0ZURpciAqLykgY29uc3QKIHsKLSAgcmV0dXJuIG5ldyBjbU5pbmphTGlua0xpbmVDb21wdXRlcigKLSAgICBvdXRwdXRDb252ZXJ0ZXIsCi0gICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCksIHRoaXMpOworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4oCisgICAgY206Om1ha2VfdW5pcXVlPGNtTmluamFMaW5rTGluZUNvbXB1dGVyPigKKyAgICAgIG91dHB1dENvbnZlcnRlciwKKyAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXS0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpLCB0aGlzKSk7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZVJ1bGVOYW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKQpAQCAtMTE0LDYgKzExNywxMSBAQAogICBzdGQ6OnN0cmluZyByZXN1bHQgPSBsaXQ7CiAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcocmVzdWx0LCAiJCIsICIkJCIpOwogICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKHJlc3VsdCwgIlxuIiwgIiRcbiIpOworICBpZiAodGhpcy0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0ckNhdCgnJCcsIHRoaXMtPkdldENNYWtlQ0ZHSW50RGlyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q01ha2VDRkdJbnREaXIoKSk7CisgIH0KICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM5LDE1ICsxNDcsMTUgQEAKIHsKICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGEgcnVsZS4KICAgaWYgKGJ1aWxkLlJ1bGUuZW1wdHkoKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJObyBydWxlIGZvciBXcml0ZUJ1aWxkISBjYWxsZWQgd2l0aCBjb21tZW50OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZC5Db21tZW50KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihjbVN0ckNhdCgKKyAgICAgICJObyBydWxlIGZvciBXcml0ZUJ1aWxkISBjYWxsZWQgd2l0aCBjb21tZW50OiAiLCBidWlsZC5Db21tZW50KSk7CiAgICAgcmV0dXJuOwogICB9CiAKICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvdXRwdXQgZmlsZS4KICAgaWYgKGJ1aWxkLk91dHB1dHMuZW1wdHkoKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAotICAgICAgIk5vIG91dHB1dCBmaWxlcyBmb3IgV3JpdGVCdWlsZCEgY2FsbGVkIHdpdGggY29tbWVudDogIiArIGJ1aWxkLkNvbW1lbnQpOworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGNtU3RyQ2F0KAorICAgICAgIk5vIG91dHB1dCBmaWxlcyBmb3IgV3JpdGVCdWlsZCEgY2FsbGVkIHdpdGggY29tbWVudDogIiwgYnVpbGQuQ29tbWVudCkpOwogICAgIHJldHVybjsKICAgfQogCkBAIC0xNTgsNyArMTY2LDcgQEAKICAgewogICAgIC8vIFdyaXRlIGV4cGxpY2l0IG91dHB1dHMKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQgOiBidWlsZC5PdXRwdXRzKSB7Ci0gICAgICBidWlsZFN0ciArPSAiICIgKyBFbmNvZGVQYXRoKG91dHB1dCk7CisgICAgICBidWlsZFN0ciArPSBjbVN0ckNhdCgnICcsIEVuY29kZVBhdGgob3V0cHV0KSk7CiAgICAgICBpZiAodGhpcy0+Q29tcHV0aW5nVW5rbm93bkRlcGVuZGVuY2llcykgewogICAgICAgICB0aGlzLT5Db21iaW5lZEJ1aWxkT3V0cHV0cy5pbnNlcnQob3V0cHV0KTsKICAgICAgIH0KQEAgLTE2NywxNCArMTc1LDEzIEBACiAgICAgaWYgKCFidWlsZC5JbXBsaWNpdE91dHMuZW1wdHkoKSkgewogICAgICAgYnVpbGRTdHIgKz0gIiB8IjsKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGltcGxpY2l0T3V0IDogYnVpbGQuSW1wbGljaXRPdXRzKSB7Ci0gICAgICAgIGJ1aWxkU3RyICs9ICIgIiArIEVuY29kZVBhdGgoaW1wbGljaXRPdXQpOworICAgICAgICBidWlsZFN0ciArPSBjbVN0ckNhdCgnICcsIEVuY29kZVBhdGgoaW1wbGljaXRPdXQpKTsKICAgICAgIH0KICAgICB9Ci0gICAgYnVpbGRTdHIgKz0gIjoiOworICAgIGJ1aWxkU3RyICs9ICc6JzsKIAogICAgIC8vIFdyaXRlIHRoZSBydWxlLgotICAgIGJ1aWxkU3RyICs9ICIgIjsKLSAgICBidWlsZFN0ciArPSBidWlsZC5SdWxlOworICAgIGJ1aWxkU3RyICs9IGNtU3RyQ2F0KCcgJywgYnVpbGQuUnVsZSk7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBhcmd1bWVudHM7CkBAIC0xODMsMTQgKzE5MCwxNCBAQAogCiAgICAgLy8gV3JpdGUgZXhwbGljaXQgZGVwZW5kZW5jaWVzLgogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGV4cGxpY2l0RGVwIDogYnVpbGQuRXhwbGljaXREZXBzKSB7Ci0gICAgICBhcmd1bWVudHMgKz0gIiAiICsgRW5jb2RlUGF0aChleHBsaWNpdERlcCk7CisgICAgICBhcmd1bWVudHMgKz0gY21TdHJDYXQoJyAnLCBFbmNvZGVQYXRoKGV4cGxpY2l0RGVwKSk7CiAgICAgfQogCiAgICAgLy8gV3JpdGUgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgogICAgIGlmICghYnVpbGQuSW1wbGljaXREZXBzLmVtcHR5KCkpIHsKICAgICAgIGFyZ3VtZW50cyArPSAiIHwiOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaW1wbGljaXREZXAgOiBidWlsZC5JbXBsaWNpdERlcHMpIHsKLSAgICAgICAgYXJndW1lbnRzICs9ICIgIiArIEVuY29kZVBhdGgoaW1wbGljaXREZXApOworICAgICAgICBhcmd1bWVudHMgKz0gY21TdHJDYXQoJyAnLCBFbmNvZGVQYXRoKGltcGxpY2l0RGVwKSk7CiAgICAgICB9CiAgICAgfQogCkBAIC0xOTgsMTEgKzIwNSwxMSBAQAogICAgIGlmICghYnVpbGQuT3JkZXJPbmx5RGVwcy5lbXB0eSgpKSB7CiAgICAgICBhcmd1bWVudHMgKz0gIiB8fCI7CiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvcmRlck9ubHlEZXAgOiBidWlsZC5PcmRlck9ubHlEZXBzKSB7Ci0gICAgICAgIGFyZ3VtZW50cyArPSAiICIgKyBFbmNvZGVQYXRoKG9yZGVyT25seURlcCk7CisgICAgICAgIGFyZ3VtZW50cyArPSBjbVN0ckNhdCgnICcsIEVuY29kZVBhdGgob3JkZXJPbmx5RGVwKSk7CiAgICAgICB9CiAgICAgfQogCi0gICAgYXJndW1lbnRzICs9ICJcbiI7CisgICAgYXJndW1lbnRzICs9ICdcbic7CiAgIH0KIAogICAvLyBXcml0ZSB0aGUgdmFyaWFibGVzIGJvdW5kIHRvIHRoaXMgYnVpbGQgc3RhdGVtZW50LgpAQCAtMjQ4LDggKzI1NSw4IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21tYW5kLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzY3JpcHRpb24sCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21tZW50LCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sLCBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgcmVzdGF0LAotICBjb25zdCBjbU5pbmphRGVwcyYgb3V0cHV0cywgY29uc3QgY21OaW5qYURlcHMmIGV4cGxpY2l0RGVwcywKLSAgY29uc3QgY21OaW5qYURlcHMmIG9yZGVyT25seURlcHMpCisgIGNvbnN0IGNtTmluamFEZXBzJiBvdXRwdXRzLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICBjb25zdCBjbU5pbmphRGVwcyYgZXhwbGljaXREZXBzLCBjb25zdCBjbU5pbmphRGVwcyYgb3JkZXJPbmx5RGVwcykKIHsKICAgdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFJ1bGUoKTsKIApAQCAtMjgyLDcgKzI4OSwxMSBAQAogICAgIGlmICghZGVwZmlsZS5lbXB0eSgpKSB7CiAgICAgICB2YXJzWyJkZXBmaWxlIl0gPSBkZXBmaWxlOwogICAgIH0KLSAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5CdWlsZEZpbGVTdHJlYW0sIGJ1aWxkKTsKKyAgICBpZiAoY29uZmlnLmVtcHR5KCkpIHsKKyAgICAgIHRoaXMtPldyaXRlQnVpbGQoKnRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKSwgYnVpbGQpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShjb25maWcpLCBidWlsZCk7CisgICAgfQogICB9CiAKICAgaWYgKHRoaXMtPkNvbXB1dGluZ1Vua25vd25EZXBlbmRlbmNpZXMpIHsKQEAgLTI5NywyMSArMzA4LDIyIEBACiB2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkFkZE1hY09TWENvbnRlbnRSdWxlKCkKIHsKICAgY21OaW5qYVJ1bGUgcnVsZSgiQ09QWV9PU1hfQ09OVEVOVCIpOwotICBydWxlLkNvbW1hbmQgPSBDTWFrZUNtZCgpICsgIiAtRSBjb3B5ICRpbiAkb3V0IjsKKyAgcnVsZS5Db21tYW5kID0gY21TdHJDYXQoQ01ha2VDbWQoKSwgIiAtRSBjb3B5ICRpbiAkb3V0Iik7CiAgIHJ1bGUuRGVzY3JpcHRpb24gPSAiQ29weWluZyBPUyBYIENvbnRlbnQgJG91dCI7CiAgIHJ1bGUuQ29tbWVudCA9ICJSdWxlIGZvciBjb3B5aW5nIE9TIFggYnVuZGxlIGNvbnRlbnQgZmlsZS4iOwogICB0aGlzLT5BZGRSdWxlKHJ1bGUpOwogfQogCiB2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlTWFjT1NYQ29udGVudEJ1aWxkKHN0ZDo6c3RyaW5nIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgdGhpcy0+QWRkTWFjT1NYQ29udGVudFJ1bGUoKTsKICAgewogICAgIGNtTmluamFCdWlsZCBidWlsZCgiQ09QWV9PU1hfQ09OVEVOVCIpOwogICAgIGJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKHN0ZDo6bW92ZShvdXRwdXQpKTsKICAgICBidWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKHN0ZDo6bW92ZShpbnB1dCkpOwotICAgIHRoaXMtPldyaXRlQnVpbGQoKnRoaXMtPkJ1aWxkRmlsZVN0cmVhbSwgYnVpbGQpOworICAgIHRoaXMtPldyaXRlQnVpbGQoKnRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGNvbmZpZyksIGJ1aWxkKTsKICAgfQogfQogCkBAIC0zMjEsMjMgKzMzMywyNCBAQAogICAvLyAtLSBQYXJhbWV0ZXIgY2hlY2tzCiAgIC8vIE1ha2Ugc3VyZSB0aGUgcnVsZSBoYXMgYSBuYW1lLgogICBpZiAocnVsZS5OYW1lLmVtcHR5KCkpIHsKLSAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiTm8gbmFtZSBnaXZlbiBmb3IgV3JpdGVSdWxlISBjYWxsZWQgd2l0aCBjb21tZW50OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLkNvbW1lbnQpOworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGNtU3RyQ2F0KAorICAgICAgIk5vIG5hbWUgZ2l2ZW4gZm9yIFdyaXRlUnVsZSEgY2FsbGVkIHdpdGggY29tbWVudDogIiwgcnVsZS5Db21tZW50KSk7CiAgICAgcmV0dXJuOwogICB9CiAKICAgLy8gTWFrZSBzdXJlIGEgY29tbWFuZCBpcyBnaXZlbi4KICAgaWYgKHJ1bGUuQ29tbWFuZC5lbXB0eSgpKSB7Ci0gICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCi0gICAgICAiTm8gY29tbWFuZCBnaXZlbiBmb3IgV3JpdGVSdWxlISBjYWxsZWQgd2l0aCBjb21tZW50OiAiICsgcnVsZS5Db21tZW50KTsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihjbVN0ckNhdCgKKyAgICAgICJObyBjb21tYW5kIGdpdmVuIGZvciBXcml0ZVJ1bGUhIGNhbGxlZCB3aXRoIGNvbW1lbnQ6ICIsIHJ1bGUuQ29tbWVudCkpOwogICAgIHJldHVybjsKICAgfQogCiAgIC8vIE1ha2Ugc3VyZSByZXNwb25zZSBmaWxlIGNvbnRlbnQgaXMgZ2l2ZW4KICAgaWYgKCFydWxlLlJzcEZpbGUuZW1wdHkoKSAmJiBydWxlLlJzcENvbnRlbnQuZW1wdHkoKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJyc3BmaWxlIGJ1dCBubyByc3BmaWxlX2NvbnRlbnQgZ2l2ZW4gZm9yIFdyaXRlUnVsZSEgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxsZWQgd2l0aCBjb21tZW50OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLkNvbW1lbnQpOworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgY21TdHJDYXQoInJzcGZpbGUgYnV0IG5vIHJzcGZpbGVfY29udGVudCBnaXZlbiBmb3IgV3JpdGVSdWxlISAiCisgICAgICAgICAgICAgICAiY2FsbGVkIHdpdGggY29tbWVudDogIiwKKyAgICAgICAgICAgICAgIHJ1bGUuQ29tbWVudCkpOwogICAgIHJldHVybjsKICAgfQogCkBAIC0zNzksOSArMzkyLDkgQEAKIHsKICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBuYW1lLgogICBpZiAobmFtZS5lbXB0eSgpKSB7Ci0gICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIk5vIG5hbWUgZ2l2ZW4gZm9yIFdyaXRlVmFyaWFibGUhIGNhbGxlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggY29tbWVudDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCk7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoY21TdHJDYXQoIk5vIG5hbWUgZ2l2ZW4gZm9yIFdyaXRlVmFyaWFibGUhIGNhbGxlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggY29tbWVudDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50KSk7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTQyMiwxNiArNDM1LDE2IEBACiAjaWZkZWYgX1dJTjMyCiAgIGNtLT5HZXRTdGF0ZSgpLT5TZXRXaW5kb3dzU2hlbGwodHJ1ZSk7CiAjZW5kaWYKLSAgLy8gLy8gTmluamEgaXMgbm90IHBvcnRlZCB0byBub24tVW5peCBPUyB5ZXQuCi0gIC8vIHRoaXMtPkZvcmNlVW5peFBhdGhzID0gdHJ1ZTsKICAgdGhpcy0+RmluZE1ha2VQcm9ncmFtRmlsZSA9ICJDTWFrZU5pbmphRmluZE1ha2UuY21ha2UiOwogfQogCiAvLyBWaXJ0dWFsIHB1YmxpYyBtZXRob2RzLgogCi1jbUxvY2FsR2VuZXJhdG9yKiBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikKK3N0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcigKKyAgY21NYWtlZmlsZSogbWYpCiB7Ci0gIHJldHVybiBuZXcgY21Mb2NhbE5pbmphR2VuZXJhdG9yKHRoaXMsIG1mKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21Mb2NhbE5pbmphR2VuZXJhdG9yPih0aGlzLCBtZikpOwogfQogCiBjb2RlY3Z0OjpFbmNvZGluZyBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpHZXRNYWtlZmlsZUVuY29kaW5nKCkgY29uc3QKQEAgLTQ3MCwxNCArNDgzLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLnN0cigpKTsKICAgICByZXR1cm47CiAgIH0KLSAgaWYgKCF0aGlzLT5PcGVuQnVpbGRGaWxlU3RyZWFtKCkpIHsKKyAgaWYgKCF0aGlzLT5JbnNwZWN0Q29uZmlnVHlwZVZhcmlhYmxlcygpKSB7CisgICAgcmV0dXJuOworICB9CisgIGlmICghdGhpcy0+T3BlbkJ1aWxkRmlsZVN0cmVhbXMoKSkgewogICAgIHJldHVybjsKICAgfQogICBpZiAoIXRoaXMtPk9wZW5SdWxlc0ZpbGVTdHJlYW0oKSkgewogICAgIHJldHVybjsKICAgfQogCi0gIHRoaXMtPlRhcmdldERlcGVuZHNDbG9zdXJlcy5jbGVhcigpOworICBmb3IgKGF1dG8mIGl0IDogdGhpcy0+Q29uZmlncykgeworICAgIGl0LnNlY29uZC5UYXJnZXREZXBlbmRzQ2xvc3VyZXMuY2xlYXIoKTsKKyAgfQogCiAgIHRoaXMtPkluaXRPdXRwdXRQYXRoUHJlZml4KCk7CiAgIHRoaXMtPlRhcmdldEFsbCA9IHRoaXMtPk5pbmphT3V0cHV0UGF0aCgiYWxsIik7CkBAIC00OTMsMTkgKzUxMSwxMDIgQEAKICAgdGhpcy0+Y21HbG9iYWxHZW5lcmF0b3I6OkdlbmVyYXRlKCk7CiAKICAgdGhpcy0+V3JpdGVBc3N1bWVkU291cmNlRGVwZW5kZW5jaWVzKCk7Ci0gIHRoaXMtPldyaXRlVGFyZ2V0QWxpYXNlcygqdGhpcy0+QnVpbGRGaWxlU3RyZWFtKTsKLSAgdGhpcy0+V3JpdGVGb2xkZXJUYXJnZXRzKCp0aGlzLT5CdWlsZEZpbGVTdHJlYW0pOwotICB0aGlzLT5Xcml0ZVVua25vd25FeHBsaWNpdERlcGVuZGVuY2llcygqdGhpcy0+QnVpbGRGaWxlU3RyZWFtKTsKLSAgdGhpcy0+V3JpdGVCdWlsdGluVGFyZ2V0cygqdGhpcy0+QnVpbGRGaWxlU3RyZWFtKTsKKyAgdGhpcy0+V3JpdGVUYXJnZXRBbGlhc2VzKCp0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCkpOworICB0aGlzLT5Xcml0ZUZvbGRlclRhcmdldHMoKnRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKSk7CisgIHRoaXMtPldyaXRlVW5rbm93bkV4cGxpY2l0RGVwZW5kZW5jaWVzKCp0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCkpOworICB0aGlzLT5Xcml0ZUJ1aWx0aW5UYXJnZXRzKCp0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCkpOwogCiAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRFcnJvck9jY3VyZWRGbGFnKCkpIHsKICAgICB0aGlzLT5SdWxlc0ZpbGVTdHJlYW0tPnNldHN0YXRlKHN0ZDo6aW9zOjpmYWlsYml0KTsKLSAgICB0aGlzLT5CdWlsZEZpbGVTdHJlYW0tPnNldHN0YXRlKHN0ZDo6aW9zOjpmYWlsYml0KTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPk1ha2VmaWxlc1swXS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgICAgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKSkgeworICAgICAgdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oY29uZmlnKS0+c2V0c3RhdGUoc3RkOjppb3M6OmZhaWxiaXQpOworICAgICAgdGhpcy0+R2V0Q29uZmlnRmlsZVN0cmVhbShjb25maWcpLT5zZXRzdGF0ZShzdGQ6Omlvczo6ZmFpbGJpdCk7CisgICAgfQorICAgIHRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKS0+c2V0c3RhdGUoc3RkOjppb3M6OmZhaWxiaXQpOwogICB9CiAKICAgdGhpcy0+Q2xvc2VDb21waWxlQ29tbWFuZHNTdHJlYW0oKTsKICAgdGhpcy0+Q2xvc2VSdWxlc0ZpbGVTdHJlYW0oKTsKLSAgdGhpcy0+Q2xvc2VCdWlsZEZpbGVTdHJlYW0oKTsKKyAgdGhpcy0+Q2xvc2VCdWlsZEZpbGVTdHJlYW1zKCk7CisKKyNpZmRlZiBfV0lOMzIKKyAgLy8gVGhlIG5pbmphIHRvb2xzIHdpbGwgbm90IGJlIGFibGUgdG8gdXBkYXRlIG1ldGFkYXRhIG9uIFdpbmRvd3MKKyAgLy8gd2hlbiB3ZSBhcmUgcmUtZ2VuZXJhdGluZyBpbnNpZGUgYW4gZXhpc3RpbmcgJ25pbmphJyBpbnZvY2F0aW9uCisgIC8vIGJlY2F1c2UgdGhlIG91dGVyIHRvb2wgaGFzIHRoZSBmaWxlcyBvcGVuIGZvciB3cml0ZS4KKyAgaWYgKCF0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFJlZ2VuZXJhdGVEdXJpbmdCdWlsZCgpKQorI2VuZGlmCisgIHsKKyAgICB0aGlzLT5DbGVhbk1ldGFEYXRhKCk7CisgIH0KK30KKwordm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpDbGVhbk1ldGFEYXRhKCkKK3sKKyAgYXV0byBydW5fbmluamFfdG9vbCA9IFt0aGlzXShzdGQ6OnZlY3RvcjxjaGFyIGNvbnN0Kj4gY29uc3QmIGFyZ3MpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29tbWFuZDsKKyAgICBjb21tYW5kLnB1c2hfYmFjayh0aGlzLT5OaW5qYUNvbW1hbmQpOworICAgIGNvbW1hbmQuZW1wbGFjZV9iYWNrKCItQyIpOworICAgIGNvbW1hbmQuZW1wbGFjZV9iYWNrKHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpKTsKKyAgICBjb21tYW5kLmVtcGxhY2VfYmFjaygiLXQiKTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGFyZyA6IGFyZ3MpIHsKKyAgICAgIGNvbW1hbmQuZW1wbGFjZV9iYWNrKGFyZyk7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIGVycm9yOworICAgIGlmICghY21TeXN0ZW1Ub29sczo6UnVuU2luZ2xlQ29tbWFuZChjb21tYW5kLCBudWxscHRyLCAmZXJyb3IsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6Ok9VVFBVVF9OT05FKSkgeworICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdHJDYXQoIlJ1bm5pbmdcbiAnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtSm9pbihjb21tYW5kLCAiJyAnIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB3aXRoOlxuICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcikpOworICAgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKKyAgICB9CisgIH07CisKKyAgLy8gQ2FuIHRoZSB0b29scyBiZWxvdyBleHBlY3QgJ2J1aWxkLm5pbmphJyB0byBiZSBsb2FkYWJsZT8KKyAgYm9vbCBjb25zdCBleHBlY3RCdWlsZE1hbmlmZXN0ID0KKyAgICAhdGhpcy0+SXNNdWx0aUNvbmZpZygpICYmIHRoaXMtPk91dHB1dFBhdGhQcmVmaXguZW1wdHkoKTsKKworICAvLyBTa2lwIHNvbWUgbmluamEgdG9vbHMgaWYgdGhleSBuZWVkICdidWlsZC5uaW5qYScgYnV0IGl0IGlzIG1pc3NpbmcuCisgIGJvb2wgY29uc3QgbWlzc2luZ0J1aWxkTWFuaWZlc3QgPSBleHBlY3RCdWlsZE1hbmlmZXN0ICYmCisgICAgKHRoaXMtPk5pbmphU3VwcG9ydHNDbGVhbkRlYWRUb29sIHx8CisgICAgIHRoaXMtPk5pbmphU3VwcG9ydHNVbmNvbmRpdGlvbmFsUmVjb21wYWN0VG9vbCkgJiYKKyAgICAhY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cygiYnVpbGQubmluamEiKTsKKworICAvLyBUaGUgYGNsZWFuZGVhZGAgdG9vbCBuZWVkcyB0byBrbm93IGFib3V0IGFsbCBvdXRwdXRzIGluIHRoZSBidWlsZCB3ZSBqdXN0CisgIC8vIHdyb3RlIG91dC4gTmluamEtTXVsdGkgZG9lc24ndCBoYXZlIGEgc2luZ2xlIGBidWlsZC5uaW5qYWAgd2UgY2FuIHVzZSB0aGF0CisgIC8vIGlzIHRoZSB1bmlvbiBvZiBhbGwgZ2VuZXJhdGVkIGNvbmZpZ3VyYXRpb25zLCBzbyB3ZSBjYW4ndCBydW4gaXQgcmVsaWFibHkKKyAgLy8gaW4gdGhhdCBjYXNlLgorICBpZiAodGhpcy0+TmluamFTdXBwb3J0c0NsZWFuRGVhZFRvb2wgJiYgZXhwZWN0QnVpbGRNYW5pZmVzdCAmJgorICAgICAgIW1pc3NpbmdCdWlsZE1hbmlmZXN0KSB7CisgICAgcnVuX25pbmphX3Rvb2woeyAiY2xlYW5kZWFkIiB9KTsKKyAgfQorICAvLyBUaGUgYHJlY29tcGFjdGAgdG9vbCBsb2FkcyB0aGUgbWFuaWZlc3QuIEFzIGFib3ZlLCB3ZSBkb24ndCBoYXZlIGEgc2luZ2xlCisgIC8vIGBidWlsZC5uaW5qYWAgdG8gbG9hZCBmb3IgdGhpcyBpbiBOaW5qYS1NdWx0aS4gVGhpcyBtYXkgYmUgcmVsYXhlZCBpbiB0aGUKKyAgLy8gZnV0dXJlIHBlbmRpbmcgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gaG93IE5pbmphIHdvcmtzIHVwc3RyZWFtCisgIC8vIChuaW5qYSMxNzIxKS4KKyAgaWYgKHRoaXMtPk5pbmphU3VwcG9ydHNVbmNvbmRpdGlvbmFsUmVjb21wYWN0VG9vbCAmJiBleHBlY3RCdWlsZE1hbmlmZXN0ICYmCisgICAgICAhbWlzc2luZ0J1aWxkTWFuaWZlc3QpIHsKKyAgICBydW5fbmluamFfdG9vbCh7ICJyZWNvbXBhY3QiIH0pOworICB9CisgIGlmICh0aGlzLT5OaW5qYVN1cHBvcnRzUmVzdGF0VG9vbCAmJiB0aGlzLT5PdXRwdXRQYXRoUHJlZml4LmVtcHR5KCkpIHsKKyAgICAvLyBYWFgobmluamEpOiBXZSBvbmx5IGxpc3QgYGJ1aWxkLm5pbmphYCBlbnRyeSBmaWxlcyBoZXJlIGJlY2F1c2UgQ01ha2UKKyAgICAvLyAqYWx3YXlzKiByZXdyaXRlcyB0aGVzZSBmaWxlcyBvbiBhIHJlY29uZmlndXJlLiBJZiBDTWFrZSBldmVyIGdldHMKKyAgICAvLyBzbWFydGVyIGFib3V0IHRoaXMsIGFsbCBDTWFrZS10aW1lIGNyZWF0ZWQvZWRpdGVkIGZpbGVzIGxpc3RlZCBhcworICAgIC8vIG91dHB1dHMgZm9yIHRoZSByZWNvbmZpZ3VyZSBidWlsZCBzdGF0ZW1lbnQgd2lsbCBuZWVkIHRvIGJlIGxpc3RlZCBoZXJlLgorICAgIGNtTmluamFEZXBzIG91dHB1dHM7CisgICAgdGhpcy0+QWRkUmVidWlsZE1hbmlmZXN0T3V0cHV0cyhvdXRwdXRzKTsKKyAgICBzdGQ6OnZlY3Rvcjxjb25zdCBjaGFyKj4gYXJnczsKKyAgICBhcmdzLnJlc2VydmUob3V0cHV0cy5zaXplKCkgKyAxKTsKKyAgICBhcmdzLnB1c2hfYmFjaygicmVzdGF0Iik7CisgICAgZm9yIChhdXRvIGNvbnN0JiBvdXRwdXQgOiBvdXRwdXRzKSB7CisgICAgICBhcmdzLnB1c2hfYmFjayhvdXRwdXQuY19zdHIoKSk7CisgICAgfQorICAgIHJ1bl9uaW5qYV90b29sKGFyZ3MpOworICB9CiB9CiAKIGJvb2wgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RmluZE1ha2VQcm9ncmFtKGNtTWFrZWZpbGUqIG1mKQpAQCAtNTI0LDEwICs2MjUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6T1VUUFVUX05PTkUpKSB7CiAgICAgICBtZi0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIlJ1bm5pbmdcbiAnIiArIGNtSm9pbihjb21tYW5kLCAiJyAnIikgKwotICAgICAgICAgICAgICAgICAgICAgICAgICInXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB3aXRoOlxuICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgY21TdHJDYXQoIlJ1bm5pbmdcbiAnIiwgY21Kb2luKGNvbW1hbmQsICInICciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB3aXRoOlxuICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKSk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTU2OSwxNCArNjcwLDM1IEBACiAgICAgICB9CiAgICAgfQogICB9CisgIHRoaXMtPk5pbmphU3VwcG9ydHNDbGVhbkRlYWRUb29sID0gIWNtU3lzdGVtVG9vbHM6OlZlcnNpb25Db21wYXJlKAorICAgIGNtU3lzdGVtVG9vbHM6Ok9QX0xFU1MsIHRoaXMtPk5pbmphVmVyc2lvbi5jX3N0cigpLAorICAgIFJlcXVpcmVkTmluamFWZXJzaW9uRm9yQ2xlYW5EZWFkVG9vbCgpLmNfc3RyKCkpOworICB0aGlzLT5OaW5qYVN1cHBvcnRzVW5jb25kaXRpb25hbFJlY29tcGFjdFRvb2wgPQorICAgICFjbVN5c3RlbVRvb2xzOjpWZXJzaW9uQ29tcGFyZSgKKyAgICAgIGNtU3lzdGVtVG9vbHM6Ok9QX0xFU1MsIHRoaXMtPk5pbmphVmVyc2lvbi5jX3N0cigpLAorICAgICAgUmVxdWlyZWROaW5qYVZlcnNpb25Gb3JVbmNvbmRpdGlvbmFsUmVjb21wYWN0VG9vbCgpLmNfc3RyKCkpOworICB0aGlzLT5OaW5qYVN1cHBvcnRzUmVzdGF0VG9vbCA9ICFjbVN5c3RlbVRvb2xzOjpWZXJzaW9uQ29tcGFyZSgKKyAgICBjbVN5c3RlbVRvb2xzOjpPUF9MRVNTLCB0aGlzLT5OaW5qYVZlcnNpb24uY19zdHIoKSwKKyAgICBSZXF1aXJlZE5pbmphVmVyc2lvbkZvclJlc3RhdFRvb2woKS5jX3N0cigpKTsKIH0KIAogYm9vbCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpDaGVja0xhbmd1YWdlcygKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBsYW5ndWFnZXMsIGNtTWFrZWZpbGUqIG1mKSBjb25zdAogewotICBpZiAoY21Db250YWlucyhsYW5ndWFnZXMsICJGb3J0cmFuIikpIHsKKyAgaWYgKGNtOjpjb250YWlucyhsYW5ndWFnZXMsICJGb3J0cmFuIikpIHsKICAgICByZXR1cm4gdGhpcy0+Q2hlY2tGb3J0cmFuKG1mKTsKICAgfQorICBpZiAoY206OmNvbnRhaW5zKGxhbmd1YWdlcywgIlN3aWZ0IikpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBhcmNoaXRlY3R1cmVzID0KKyAgICAgIG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMiKTsKKyAgICBpZiAoYXJjaGl0ZWN0dXJlcy5maW5kX2ZpcnN0X29mKCc7JykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIG1mLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgdmFsdWVzIGZvciBDTUFLRV9PU1hfQVJDSElURUNUVVJFUyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydGVkIHdpdGggU3dpZnQiKTsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CiAgIHJldHVybiB0cnVlOwogfQogCkBAIC01OTAsMTUgKzcxMiw4IEBACiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgZSA8PAogICAgICJUaGUgTmluamEgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBvcnQgRm9ydHJhbiB1c2luZyBOaW5qYSB2ZXJzaW9uXG4iCi0gICAgIiAgIiArIHRoaXMtPk5pbmphVmVyc2lvbiArICJcbiIKLSAgICAiZHVlIHRvIGxhY2sgb2YgcmVxdWlyZWQgZmVhdHVyZXMuICAiCi0gICAgIktpdHdhcmUgaGFzIGltcGxlbWVudGVkIHRoZSByZXF1aXJlZCBmZWF0dXJlcyBhbmQgdGhleSBoYXZlIGJlZW4gIgotICAgICJtZXJnZWQgdG8gdXBzdHJlYW0gbmluamEgZm9yIGluY2x1c2lvbiBpbiBOaW5qYSAxLjEwIGFuZCBoaWdoZXIuICAiCi0gICAgIkFzIG9mIHRoaXMgdmVyc2lvbiBvZiBDTWFrZSwgTmluamEgMS4xMCBoYXMgbm90IGJlZW4gcmVsZWFzZWQuICAiCi0gICAgIk1lYW53aGlsZSwgS2l0d2FyZSBtYWludGFpbnMgYSBicmFuY2ggb2YgTmluamEgYXQ6XG4iCi0gICAgIiAgaHR0cHM6Ly9naXRodWIuY29tL0tpdHdhcmUvbmluamEvdHJlZS9mZWF0dXJlcy1mb3ItZm9ydHJhbiNyZWFkbWVcbiIKLSAgICAid2l0aCB0aGUgcmVxdWlyZWQgZmVhdHVyZXMuICAiCi0gICAgIk9uZSBtYXkgYnVpbGQgbmluamEgZnJvbSB0aGF0IGJyYW5jaCB0byBnZXQgc3VwcG9ydCBmb3IgRm9ydHJhbi4iCisgICAgIiAgIiA8PCB0aGlzLT5OaW5qYVZlcnNpb24gPDwgIlxuIgorICAgICJkdWUgdG8gbGFjayBvZiByZXF1aXJlZCBmZWF0dXJlcy4gIE5pbmphIDEuMTAgb3IgaGlnaGVyIGlzIHJlcXVpcmVkLiIKICAgICA7CiAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogICBtZi0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CkBAIC02MDksNiArNzI0LDE3IEBACiB2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuYWJsZUxhbmd1YWdlKAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGxhbmdzLCBjbU1ha2VmaWxlKiBtZiwgYm9vbCBvcHRpb25hbCkKIHsKKyAgaWYgKHRoaXMtPklzTXVsdGlDb25maWcoKSkgeworICAgIGlmICghbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMiKSkgeworICAgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigKKyAgICAgICAgIkNNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMiLCAiRGVidWc7UmVsZWFzZTtSZWxXaXRoRGViSW5mbyIsCisgICAgICAgICJTZW1pY29sb24gc2VwYXJhdGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24gdHlwZXMsIG9ubHkgIgorICAgICAgICAic3VwcG9ydHMgRGVidWcsIFJlbGVhc2UsIE1pblNpemVSZWwsIGFuZCBSZWxXaXRoRGViSW5mbywgYW55dGhpbmcgIgorICAgICAgICAiZWxzZSB3aWxsIGJlIGlnbm9yZWQiLAorICAgICAgICBjbVN0YXRlRW51bXM6OlNUUklORyk7CisgICAgfQorICB9CisKICAgdGhpcy0+Y21HbG9iYWxHZW5lcmF0b3I6OkVuYWJsZUxhbmd1YWdlKGxhbmdzLCBtZiwgb3B0aW9uYWwpOwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsIDogbGFuZ3MpIHsKICAgICBpZiAobCA9PSAiTk9ORSIpIHsKQEAgLTY1MCw3ICs3NzYsNyBAQAogY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6R2VuZXJhdGVCdWlsZENvbW1hbmQoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlUHJvZ3JhbSwgY29uc3Qgc3RkOjpzdHJpbmcmIC8qcHJvamVjdE5hbWUqLywKICAgY29uc3Qgc3RkOjpzdHJpbmcmIC8qcHJvamVjdERpciovLAotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIHRhcmdldE5hbWVzLCBjb25zdCBzdGQ6OnN0cmluZyYgLypjb25maWcqLywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiB0YXJnZXROYW1lcywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKICAgYm9vbCAvKmZhc3QqLywgaW50IGpvYnMsIGJvb2wgdmVyYm9zZSwKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBtYWtlT3B0aW9ucykKIHsKQEAgLTY2Niw2ICs3OTIsOCBAQAogICAgIG1ha2VDb21tYW5kLkFkZCgiLWoiLCBzdGQ6OnRvX3N0cmluZyhqb2JzKSk7CiAgIH0KIAorICB0aGlzLT5BcHBlbmROaW5qYUZpbGVBcmd1bWVudChtYWtlQ29tbWFuZCwgY29uZmlnKTsKKwogICBtYWtlQ29tbWFuZC5BZGQobWFrZU9wdGlvbnMuYmVnaW4oKSwgbWFrZU9wdGlvbnMuZW5kKCkpOwogICBmb3IgKGNvbnN0IGF1dG8mIHRuYW1lIDogdGFyZ2V0TmFtZXMpIHsKICAgICBpZiAoIXRuYW1lLmVtcHR5KCkpIHsKQEAgLTcwNywzNSArODM1LDIxIEBACiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCkgY29uc3QKIHsKICAgLy8gQ29tcHV0ZSBmdWxsIHBhdGggdG8gb2JqZWN0IGZpbGUgZGlyZWN0b3J5IGZvciB0aGlzIHRhcmdldC4KLSAgc3RkOjpzdHJpbmcgZGlyID0KLSAgICBjbVN0ckNhdChndC0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLAotICAgICAgICAgICAgIGd0LT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGlyZWN0b3J5KGd0KSwgJy8nKTsKKyAgc3RkOjpzdHJpbmcgZGlyID0gY21TdHJDYXQoZ3QtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJywgZ3QtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkoZ3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLycsIHRoaXMtPkdldENNYWtlQ0ZHSW50RGlyKCksICcvJyk7CiAgIGd0LT5PYmplY3REaXJlY3RvcnkgPSBkaXI7CiB9CiAKIC8vIFByaXZhdGUgbWV0aG9kcwogCi1ib29sIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6Ok9wZW5CdWlsZEZpbGVTdHJlYW0oKQorYm9vbCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpPcGVuQnVpbGRGaWxlU3RyZWFtcygpCiB7Ci0gIC8vIENvbXB1dGUgTmluamEncyBidWlsZCBmaWxlIHBhdGguCi0gIHN0ZDo6c3RyaW5nIGJ1aWxkRmlsZVBhdGggPQotICAgIGNtU3RyQ2F0KHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpLCAnLycsCi0gICAgICAgICAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TklOSkFfQlVJTERfRklMRSk7Ci0KLSAgLy8gR2V0IGEgc3RyZWFtIHdoZXJlIHRvIGdlbmVyYXRlIHRoaW5ncy4KLSAgaWYgKCF0aGlzLT5CdWlsZEZpbGVTdHJlYW0pIHsKLSAgICB0aGlzLT5CdWlsZEZpbGVTdHJlYW0gPSBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPigKLSAgICAgIGJ1aWxkRmlsZVBhdGgsIGZhbHNlLCB0aGlzLT5HZXRNYWtlZmlsZUVuY29kaW5nKCkpOwotICAgIGlmICghKCp0aGlzLT5CdWlsZEZpbGVTdHJlYW0pKSB7Ci0gICAgICAvLyBBbiBlcnJvciBtZXNzYWdlIGlzIGdlbmVyYXRlZCBieSB0aGUgY29uc3RydWN0b3IgaWYgaXQgY2Fubm90Ci0gICAgICAvLyBvcGVuIHRoZSBmaWxlLgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgaWYgKCF0aGlzLT5PcGVuRmlsZVN0cmVhbSh0aGlzLT5CdWlsZEZpbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TklOSkFfQlVJTERfRklMRSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICAvLyBXcml0ZSB0aGUgZG8gbm90IGVkaXQgaGVhZGVyLgotICB0aGlzLT5Xcml0ZURpc2NsYWltZXIoKnRoaXMtPkJ1aWxkRmlsZVN0cmVhbSk7Ci0KICAgLy8gV3JpdGUgYSBjb21tZW50IGFib3V0IHRoaXMgZmlsZS4KICAgKnRoaXMtPkJ1aWxkRmlsZVN0cmVhbQogICAgIDw8ICIjIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGJ1aWxkIHN0YXRlbWVudHMgZGVzY3JpYmluZyB0aGVcbiIKQEAgLTc0NCw3ICs4NTgsNTMgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6Q2xvc2VCdWlsZEZpbGVTdHJlYW0oKQorYm9vbCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpPcGVuRmlsZVN0cmVhbSgKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4mIHN0cmVhbSwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit7CisgIC8vIEdldCBhIHN0cmVhbSB3aGVyZSB0byBnZW5lcmF0ZSB0aGluZ3MuCisgIGlmICghc3RyZWFtKSB7CisgICAgLy8gQ29tcHV0ZSBOaW5qYSdzIGJ1aWxkIGZpbGUgcGF0aC4KKyAgICBzdGQ6OnN0cmluZyBwYXRoID0KKyAgICAgIGNtU3RyQ2F0KHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpLCAnLycsIG5hbWUpOworICAgIHN0cmVhbSA9IGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+KAorICAgICAgcGF0aCwgZmFsc2UsIHRoaXMtPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7CisgICAgaWYgKCEoKnN0cmVhbSkpIHsKKyAgICAgIC8vIEFuIGVycm9yIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBpZiBpdCBjYW5ub3QKKyAgICAgIC8vIG9wZW4gdGhlIGZpbGUuCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIGRvIG5vdCBlZGl0IGhlYWRlci4KKyAgICB0aGlzLT5Xcml0ZURpc2NsYWltZXIoKnN0cmVhbSk7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKworY206Om9wdGlvbmFsPHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPj4gY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TGlzdFN1YnNldFdpdGhBbGwoCisgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgYWxsLCBjb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGRlZmF1bHRzLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGl0ZW1zKQoreworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gcmVzdWx0OworCisgIGZvciAoYXV0byBjb25zdCYgaXRlbSA6IGl0ZW1zKSB7CisgICAgaWYgKGl0ZW0gPT0gImFsbCIpIHsKKyAgICAgIGlmIChpdGVtcy5zaXplKCkgPT0gMSkgeworICAgICAgICByZXN1bHQgPSBkZWZhdWx0czsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBjbTo6bnVsbG9wdDsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGFsbC5jb3VudChpdGVtKSkgeworICAgICAgcmVzdWx0Lmluc2VydChpdGVtKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGNtOjpudWxsb3B0OworICAgIH0KKyAgfQorCisgIHJldHVybiBjbTo6bWFrZV9vcHRpb25hbChyZXN1bHQpOworfQorCit2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkNsb3NlQnVpbGRGaWxlU3RyZWFtcygpCiB7CiAgIGlmICh0aGlzLT5CdWlsZEZpbGVTdHJlYW0pIHsKICAgICB0aGlzLT5CdWlsZEZpbGVTdHJlYW0ucmVzZXQoKTsKQEAgLTc1NSwyNSArOTE1LDExIEBACiAKIGJvb2wgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6T3BlblJ1bGVzRmlsZVN0cmVhbSgpCiB7Ci0gIC8vIENvbXB1dGUgTmluamEncyBidWlsZCBmaWxlIHBhdGguCi0gIHN0ZDo6c3RyaW5nIHJ1bGVzRmlsZVBhdGggPQotICAgIGNtU3RyQ2F0KHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpLCAnLycsCi0gICAgICAgICAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TklOSkFfUlVMRVNfRklMRSk7Ci0KLSAgLy8gR2V0IGEgc3RyZWFtIHdoZXJlIHRvIGdlbmVyYXRlIHRoaW5ncy4KLSAgaWYgKCF0aGlzLT5SdWxlc0ZpbGVTdHJlYW0pIHsKLSAgICB0aGlzLT5SdWxlc0ZpbGVTdHJlYW0gPSBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPigKLSAgICAgIHJ1bGVzRmlsZVBhdGgsIGZhbHNlLCB0aGlzLT5HZXRNYWtlZmlsZUVuY29kaW5nKCkpOwotICAgIGlmICghKCp0aGlzLT5SdWxlc0ZpbGVTdHJlYW0pKSB7Ci0gICAgICAvLyBBbiBlcnJvciBtZXNzYWdlIGlzIGdlbmVyYXRlZCBieSB0aGUgY29uc3RydWN0b3IgaWYgaXQgY2Fubm90Ci0gICAgICAvLyBvcGVuIHRoZSBmaWxlLgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgaWYgKCF0aGlzLT5PcGVuRmlsZVN0cmVhbSh0aGlzLT5SdWxlc0ZpbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TklOSkFfUlVMRVNfRklMRSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICAvLyBXcml0ZSB0aGUgZG8gbm90IGVkaXQgaGVhZGVyLgotICB0aGlzLT5Xcml0ZURpc2NsYWltZXIoKnRoaXMtPlJ1bGVzRmlsZVN0cmVhbSk7Ci0KICAgLy8gV3JpdGUgY29tbWVudCBhYm91dCB0aGlzIGZpbGUuCiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgKnRoaXMtPlJ1bGVzRmlsZVN0cmVhbQpAQCAtODE5LDEwICs5NjUsMTAgQEAKICAgICByZXR1cm4gZi0+c2Vjb25kOwogICB9CiAKLSAgY21Mb2NhbE5pbmphR2VuZXJhdG9yKiBuZyA9Ci0gICAgc3RhdGljX2Nhc3Q8Y21Mb2NhbE5pbmphR2VuZXJhdG9yKj4odGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdKTsKLSAgc3RkOjpzdHJpbmcgY29uc3QmIGJpbl9kaXIgPSBuZy0+R2V0U3RhdGUoKS0+R2V0QmluYXJ5RGlyZWN0b3J5KCk7Ci0gIHN0ZDo6c3RyaW5nIGNvbnZQYXRoID0gbmctPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGJpbl9kaXIsIHBhdGgpOworICBjb25zdCBhdXRvJiBuZyA9CisgICAgY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdDxjbUxvY2FsTmluamFHZW5lcmF0b3I+KHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXSk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5fZGlyID0gbmcuR2V0U3RhdGUoKS0+R2V0QmluYXJ5RGlyZWN0b3J5KCk7CisgIHN0ZDo6c3RyaW5nIGNvbnZQYXRoID0gbmcuTWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoYmluX2RpciwgcGF0aCk7CiAgIGNvbnZQYXRoID0gdGhpcy0+TmluamFPdXRwdXRQYXRoKGNvbnZQYXRoKTsKICNpZmRlZiBfV0lOMzIKICAgc3RkOjpyZXBsYWNlKGNvbnZQYXRoLmJlZ2luKCksIGNvbnZQYXRoLmVuZCgpLCAnLycsICdcXCcpOwpAQCAtODMxLDkgKzk3NywxMCBAQAogICAgIC5maXJzdC0+c2Vjb25kOwogfQogCi12b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkFkZEFkZGl0aW9uYWxDbGVhbkZpbGUoc3RkOjpzdHJpbmcgZmlsZU5hbWUpCit2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkFkZEFkZGl0aW9uYWxDbGVhbkZpbGUoc3RkOjpzdHJpbmcgZmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKLSAgdGhpcy0+QWRkaXRpb25hbENsZWFuRmlsZXMuZW1wbGFjZShzdGQ6Om1vdmUoZmlsZU5hbWUpKTsKKyAgdGhpcy0+Q29uZmlnc1tjb25maWddLkFkZGl0aW9uYWxDbGVhbkZpbGVzLmVtcGxhY2Uoc3RkOjptb3ZlKGZpbGVOYW1lKSk7CiB9CiAKIHZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6QWRkQ1hYQ29tcGlsZUNvbW1hbmQoCkBAIC04NDMsNyArOTkwLDggQEAKICAgc3RkOjpzdHJpbmcgYnVpbGRGaWxlRGlyID0KICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKTsKICAgaWYgKCF0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0pIHsKLSAgICBzdGQ6OnN0cmluZyBidWlsZEZpbGVQYXRoID0gYnVpbGRGaWxlRGlyICsgIi9jb21waWxlX2NvbW1hbmRzLmpzb24iOworICAgIHN0ZDo6c3RyaW5nIGJ1aWxkRmlsZVBhdGggPQorICAgICAgY21TdHJDYXQoYnVpbGRGaWxlRGlyLCAiL2NvbXBpbGVfY29tbWFuZHMuanNvbiIpOwogICAgIGlmICh0aGlzLT5Db21wdXRpbmdVbmtub3duRGVwZW5kZW5jaWVzKSB7CiAgICAgICB0aGlzLT5Db21iaW5lZEJ1aWxkT3V0cHV0cy5pbnNlcnQoCiAgICAgICAgIHRoaXMtPk5pbmphT3V0cHV0UGF0aCgiY29tcGlsZV9jb21tYW5kcy5qc29uIikpOwpAQCAtODUyLDkgKzEwMDAsOSBAQAogICAgIC8vIEdldCBhIHN0cmVhbSB3aGVyZSB0byBnZW5lcmF0ZSB0aGluZ3MuCiAgICAgdGhpcy0+Q29tcGlsZUNvbW1hbmRzU3RyZWFtID0KICAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+KGJ1aWxkRmlsZVBhdGgpOwotICAgICp0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0gPDwgIlsiOworICAgICp0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0gPDwgIltcbiI7CiAgIH0gZWxzZSB7Ci0gICAgKnRoaXMtPkNvbXBpbGVDb21tYW5kc1N0cmVhbSA8PCAiLCIgPDwgc3RkOjplbmRsOworICAgICp0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0gPDwgIixcbiI7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBzb3VyY2VGaWxlTmFtZSA9IHNvdXJjZUZpbGU7CkBAIC04NjQsNyArMTAxMiw3IEBACiAgIH0KIAogICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCi0gICp0aGlzLT5Db21waWxlQ29tbWFuZHNTdHJlYW0gPDwgIlxue1xuIgorICAqdGhpcy0+Q29tcGlsZUNvbW1hbmRzU3RyZWFtIDw8ICJ7XG4iCiAgICAgIDw8IFIiKCAgImRpcmVjdG9yeSI6ICIpIgogICAgICA8PCBjbUdsb2JhbEdlbmVyYXRvcjo6RXNjYXBlSlNPTihidWlsZEZpbGVEaXIpIDw8ICJcIixcbiIKICAgICAgPDwgUiIoICAiY29tbWFuZCI6ICIpIgpAQCAtOTAxLDIzICsxMDQ5LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzc3VtZSBkZXBlbmRlbmNpZXMgZm9yIGdlbmVyYXRlZCBzb3VyY2UgZmlsZS4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qZGVwZmlsZSovICIiLCAvKmpvYl9wb29sKi8gIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp1c2VzX3Rlcm1pbmFsKi8gZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLypyZXN0YXQqLyB0cnVlLCBjbU5pbmphRGVwcygxLCBhc2QuZmlyc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qcmVzdGF0Ki8gdHJ1ZSwgY21OaW5qYURlcHMoMSwgYXNkLmZpcnN0KSwgIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21OaW5qYURlcHMoKSwgb3JkZXJPbmx5RGVwcyk7CiAgIH0KIH0KIAotc3RkOjpzdHJpbmcgT3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQpCitzdGQ6OnN0cmluZyBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpPcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQoCisgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKmNvbmZpZyovKSBjb25zdAogewotICByZXR1cm4gImNtYWtlX29iamVjdF9vcmRlcl9kZXBlbmRzX3RhcmdldF8iICsgdGFyZ2V0LT5HZXROYW1lKCk7CisgIHJldHVybiBjbVN0ckNhdCgiY21ha2Vfb2JqZWN0X29yZGVyX2RlcGVuZHNfdGFyZ2V0XyIsIHRhcmdldC0+R2V0TmFtZSgpKTsKIH0KIAogdm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpBcHBlbmRUYXJnZXRPdXRwdXRzKAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjbU5pbmphRGVwcyYgb3V0cHV0cywKLSAgY21OaW5qYVRhcmdldERlcGVuZHMgZGVwZW5kcykKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY21OaW5qYVRhcmdldERlcGVuZHMgZGVwZW5kcykKIHsKLSAgc3RkOjpzdHJpbmcgY29uZmlnTmFtZSA9Ci0gICAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIik7Ci0KICAgLy8gZm9yIGZyYW1ld29ya3MsIHdlIHdhbnQgdGhlIHJlYWwgbmFtZSwgbm90IHNtcGxlIG5hbWUKICAgLy8gZnJhbWV3b3JrcyBhbHdheXMgYXBwZWFyIHZlcnNpb25lZCwgYW5kIHRoZSBidWlsZC5uaW5qYQogICAvLyB3aWxsIGFsd2F5cyBhdHRlbXB0IHRvIG1hbmFnZSBzeW1ib2xpYyBsaW5rcyBpbnN0ZWFkCkBAIC05MjksMTkgKzEwNzUsMTkgQEAKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk6CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOiB7CiAgICAgICBpZiAoZGVwZW5kcyA9PSBEZXBlbmRPblRhcmdldE9yZGVyaW5nKSB7Ci0gICAgICAgIG91dHB1dHMucHVzaF9iYWNrKE9yZGVyRGVwZW5kc1RhcmdldEZvclRhcmdldCh0YXJnZXQpKTsKKyAgICAgICAgb3V0cHV0cy5wdXNoX2JhY2soT3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KHRhcmdldCwgY29uZmlnKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KICAgICAvLyBGQUxMVEhST1VHSAogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOiB7CiAgICAgICBvdXRwdXRzLnB1c2hfYmFjayh0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGFyZ2V0LT5HZXRGdWxsUGF0aCgKLSAgICAgICAgY29uZmlnTmFtZSwgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QsIHJlYWxuYW1lKSkpOworICAgICAgICBjb25maWcsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0LCByZWFsbmFtZSkpKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlk6IHsKICAgICAgIGlmIChkZXBlbmRzID09IERlcGVuZE9uVGFyZ2V0T3JkZXJpbmcpIHsKLSAgICAgICAgb3V0cHV0cy5wdXNoX2JhY2soT3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KHRhcmdldCkpOworICAgICAgICBvdXRwdXRzLnB1c2hfYmFjayhPcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQodGFyZ2V0LCBjb25maWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQpAQCAtOTQ5LDU5ICsxMDk1LDczIEBACiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQ6CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVUSUxJVFk6IHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPQotICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSArCi0gICAgICAgIHN0ZDo6c3RyaW5nKCIvIikgKyB0YXJnZXQtPkdldE5hbWUoKTsKLSAgICAgIG91dHB1dHMucHVzaF9iYWNrKHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChwYXRoKSk7CisgICAgICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAnLycsCisgICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0TmFtZSgpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dCA9IHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChwYXRoKTsKKyAgICAgIGlmICh0YXJnZXQtPlRhcmdldC0+SXNQZXJDb25maWcoKSkgeworICAgICAgICBvdXRwdXQgPSB0aGlzLT5CdWlsZEFsaWFzKG91dHB1dCwgY29uZmlnKTsKKyAgICAgIH0KKyAgICAgIG91dHB1dHMucHVzaF9iYWNrKG91dHB1dCk7CiAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWToKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6VU5LTk9XTl9MSUJSQVJZOgorICAgICAgYnJlYWs7CiAgIH0KIH0KIAogdm9pZCBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpBcHBlbmRUYXJnZXREZXBlbmRzKAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjbU5pbmphRGVwcyYgb3V0cHV0cywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcsCiAgIGNtTmluamFUYXJnZXREZXBlbmRzIGRlcGVuZHMpCiB7CiAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHsKICAgICAvLyBUaGVzZSBkZXBlbmQgb25seSBvbiBvdGhlciBDTWFrZS1wcm92aWRlZCB0YXJnZXRzLCBlLmcuICJhbGwiLgotICAgIGZvciAoQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiB1dGlsIDogdGFyZ2V0LT5HZXRVdGlsaXRpZXMoKSkgeworICAgIGZvciAoQlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4gY29uc3QmIHV0aWwgOgorICAgICAgICAgdGFyZ2V0LT5HZXRVdGlsaXRpZXMoKSkgewogICAgICAgc3RkOjpzdHJpbmcgZCA9Ci0gICAgICAgIHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpICsgIi8iICsKLSAgICAgICAgdXRpbC5WYWx1ZTsKLSAgICAgIG91dHB1dHMucHVzaF9iYWNrKHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChkKSk7CisgICAgICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAnLycsCisgICAgICAgICAgICAgICAgIHV0aWwuVmFsdWUuZmlyc3QpOworICAgICAgb3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+QnVpbGRBbGlhcyh0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoZCksIGNvbmZpZykpOwogICAgIH0KICAgfSBlbHNlIHsKICAgICBjbU5pbmphRGVwcyBvdXRzOwogICAgIGZvciAoY21UYXJnZXREZXBlbmQgY29uc3QmIHRhcmdldERlcCA6CiAgICAgICAgICB0aGlzLT5HZXRUYXJnZXREaXJlY3REZXBlbmRzKHRhcmdldCkpIHsKLSAgICAgIGlmICh0YXJnZXREZXAtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgICAgICBpZiAoIXRhcmdldERlcC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9Ci0gICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhcmdldERlcCwgb3V0cywgZGVwZW5kcyk7CisgICAgICBpZiAodGFyZ2V0RGVwLklzQ3Jvc3MoKSkgeworICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhcmdldERlcCwgb3V0cywgZmlsZUNvbmZpZywgZGVwZW5kcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhcmdldERlcCwgb3V0cywgY29uZmlnLCBkZXBlbmRzKTsKKyAgICAgIH0KICAgICB9CiAgICAgc3RkOjpzb3J0KG91dHMuYmVnaW4oKSwgb3V0cy5lbmQoKSk7Ci0gICAgY21BcHBlbmQob3V0cHV0cywgb3V0cyk7CisgICAgY206OmFwcGVuZChvdXRwdXRzLCBvdXRzKTsKICAgfQogfQogCiB2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKAotICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjbU5pbmphRGVwcyYgb3V0cHV0cykKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY21OaW5qYURlcHMmIG91dHB1dHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIGNtTmluamFPdXRzIG91dHM7Ci0gIHRoaXMtPkFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKHRhcmdldCwgb3V0cywgdHJ1ZSk7Ci0gIGNtQXBwZW5kKG91dHB1dHMsIG91dHMpOworICB0aGlzLT5BcHBlbmRUYXJnZXREZXBlbmRzQ2xvc3VyZSh0YXJnZXQsIG91dHMsIGNvbmZpZywgdHJ1ZSk7CisgIGNtOjphcHBlbmQob3V0cHV0cywgb3V0cyk7CiB9CiAKIHZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6QXBwZW5kVGFyZ2V0RGVwZW5kc0Nsb3N1cmUoCi0gIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsIGNtTmluamFPdXRzJiBvdXRwdXRzLCBib29sIG9taXRfc2VsZikKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY21OaW5qYU91dHMmIG91dHB1dHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGJvb2wgb21pdF9zZWxmKQogewogCiAgIC8vIHRyeSB0byBsb2NhdGUgdGhlIHRhcmdldCBpbiB0aGUgY2FjaGUKLSAgYXV0byBmaW5kID0gdGhpcy0+VGFyZ2V0RGVwZW5kc0Nsb3N1cmVzLmxvd2VyX2JvdW5kKHRhcmdldCk7CisgIGF1dG8gZmluZCA9IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5UYXJnZXREZXBlbmRzQ2xvc3VyZXMubG93ZXJfYm91bmQodGFyZ2V0KTsKIAotICBpZiAoZmluZCA9PSB0aGlzLT5UYXJnZXREZXBlbmRzQ2xvc3VyZXMuZW5kKCkgfHwgZmluZC0+Zmlyc3QgIT0gdGFyZ2V0KSB7CisgIGlmIChmaW5kID09IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5UYXJnZXREZXBlbmRzQ2xvc3VyZXMuZW5kKCkgfHwKKyAgICAgIGZpbmQtPmZpcnN0ICE9IHRhcmdldCkgewogICAgIC8vIFdlIG5vdyBjYWxjdWxhdGUgdGhlIGNsb3N1cmUgb3V0cHV0cyBieSBpbnNwZWN0aW5nIHRoZSBkZXBlbmRlbnQKICAgICAvLyB0YXJnZXRzIHJlY3Vyc2l2ZWx5LgogICAgIC8vIEZvciB0aGF0IHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIGxvY2FsIHJlc3VsdCBzZXQgdGhhdCBpcyBvbmx5CkBAIC0xMDExLDE1ICsxMTcxLDE2IEBACiAgICAgY21OaW5qYU91dHMgdGhpc19vdXRzOyAvLyB0aGlzIHdpbGwgYmUgdGhlIG5ldyBjYWNoZSBlbnRyeQogCiAgICAgZm9yIChhdXRvIGNvbnN0JiBkZXBfdGFyZ2V0IDogdGhpcy0+R2V0VGFyZ2V0RGlyZWN0RGVwZW5kcyh0YXJnZXQpKSB7Ci0gICAgICBpZiAoZGVwX3RhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgICAgIGlmICghZGVwX3RhcmdldC0+SXNJbkJ1aWxkU3lzdGVtKCkgfHwKKyAgICAgICAgICAodGhpcy0+RW5hYmxlQ3Jvc3NDb25maWdCdWlsZCgpICYmICFkZXBfdGFyZ2V0LklzQ3Jvc3MoKSkpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKICAgICAgIC8vIENvbGxlY3QgdGhlIGRlcGVuZGVudCB0YXJnZXRzIGZvciBfdGhpc18gdGFyZ2V0Ci0gICAgICB0aGlzLT5BcHBlbmRUYXJnZXREZXBlbmRzQ2xvc3VyZShkZXBfdGFyZ2V0LCB0aGlzX291dHMsIGZhbHNlKTsKKyAgICAgIHRoaXMtPkFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKGRlcF90YXJnZXQsIHRoaXNfb3V0cywgY29uZmlnLCBmYWxzZSk7CiAgICAgfQotICAgIGZpbmQgPSB0aGlzLT5UYXJnZXREZXBlbmRzQ2xvc3VyZXMuZW1wbGFjZV9oaW50KGZpbmQsIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUodGhpc19vdXRzKSk7CisgICAgZmluZCA9IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5UYXJnZXREZXBlbmRzQ2xvc3VyZXMuZW1wbGFjZV9oaW50KAorICAgICAgZmluZCwgdGFyZ2V0LCBzdGQ6Om1vdmUodGhpc19vdXRzKSk7CiAgIH0KIAogICAvLyBub3cgZmlsbCB0aGUgb3V0cHV0cyBvZiB0aGUgZmluYWwgcmVzdWx0IGZyb20gdGhlIG5ld2x5IGdlbmVyYXRlZCBjYWNoZQpAQCAtMTAyOSwyOSArMTE5MCw1NyBAQAogICAvLyBmaW5hbGx5IGdlbmVyYXRlIHRoZSBvdXRwdXRzIG9mIHRoZSB0YXJnZXQgaXRzZWxmLCBpZiBhcHBsaWNhYmxlCiAgIGNtTmluamFEZXBzIG91dHM7CiAgIGlmICghb21pdF9zZWxmKSB7Ci0gICAgdGhpcy0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0YXJnZXQsIG91dHMpOworICAgIHRoaXMtPkFwcGVuZFRhcmdldE91dHB1dHModGFyZ2V0LCBvdXRzLCBjb25maWcsIERlcGVuZE9uVGFyZ2V0QXJ0aWZhY3QpOwogICB9CiAgIG91dHB1dHMuaW5zZXJ0KG91dHMuYmVnaW4oKSwgb3V0cy5lbmQoKSk7CiB9CiAKIHZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6QWRkVGFyZ2V0QWxpYXMoY29uc3Qgc3RkOjpzdHJpbmcmIGFsaWFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICBzdGQ6OnN0cmluZyBidWlsZEFsaWFzID0gdGhpcy0+TmluamFPdXRwdXRQYXRoKGFsaWFzKTsKKyAgc3RkOjpzdHJpbmcgb3V0cHV0UGF0aCA9IHRoaXMtPk5pbmphT3V0cHV0UGF0aChhbGlhcyk7CisgIHN0ZDo6c3RyaW5nIGJ1aWxkQWxpYXMgPSB0aGlzLT5CdWlsZEFsaWFzKG91dHB1dFBhdGgsIGNvbmZpZyk7CiAgIGNtTmluamFEZXBzIG91dHB1dHM7Ci0gIHRoaXMtPkFwcGVuZFRhcmdldE91dHB1dHModGFyZ2V0LCBvdXRwdXRzKTsKLSAgLy8gTWFyayB0aGUgdGFyZ2V0J3Mgb3V0cHV0cyBhcyBhbWJpZ3VvdXMgdG8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgdGFyZ2V0IHVzZXMKLSAgLy8gdGhlIG91dHB1dCBhcyBhbiBhbGlhcy4KKyAgdGhpcy0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0YXJnZXQsIG91dHB1dHMsIGNvbmZpZywgRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CisgIC8vIE1hcmsgdGhlIHRhcmdldCdzIG91dHB1dHMgYXMgYW1iaWd1b3VzIHRvIGVuc3VyZSB0aGF0IG5vIG90aGVyIHRhcmdldAorICAvLyB1c2VzIHRoZSBvdXRwdXQgYXMgYW4gYWxpYXMuCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCA6IG91dHB1dHMpIHsKLSAgICBUYXJnZXRBbGlhc2VzW291dHB1dF0gPSBudWxscHRyOworICAgIHRoaXMtPlRhcmdldEFsaWFzZXNbb3V0cHV0XS5HZW5lcmF0b3JUYXJnZXQgPSBudWxscHRyOworICAgIHRoaXMtPkRlZmF1bHRUYXJnZXRBbGlhc2VzW291dHB1dF0uR2VuZXJhdG9yVGFyZ2V0ID0gbnVsbHB0cjsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcyIDoKKyAgICAgICAgIHRoaXMtPk1ha2VmaWxlcy5mcm9udCgpLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgICAgICAgICBjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpKSB7CisgICAgICB0aGlzLT5Db25maWdzW2NvbmZpZzJdLlRhcmdldEFsaWFzZXNbb3V0cHV0XS5HZW5lcmF0b3JUYXJnZXQgPSBudWxscHRyOworICAgIH0KICAgfQogCiAgIC8vIEluc2VydCB0aGUgYWxpYXMgaW50byB0aGUgbWFwLiAgSWYgdGhlIGFsaWFzIHdhcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlCiAgIC8vIG1hcCBhbmQgcmVmZXJyZWQgdG8gYW5vdGhlciB0YXJnZXQsIG1hcmsgaXQgYXMgYW1iaWd1b3VzLgotICBzdGQ6OnBhaXI8VGFyZ2V0QWxpYXNNYXA6Oml0ZXJhdG9yLCBib29sPiBuZXdBbGlhcyA9Ci0gICAgVGFyZ2V0QWxpYXNlcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIoYnVpbGRBbGlhcywgdGFyZ2V0KSk7Ci0gIGlmIChuZXdBbGlhcy5zZWNvbmQgJiYgbmV3QWxpYXMuZmlyc3QtPnNlY29uZCAhPSB0YXJnZXQpIHsKLSAgICBuZXdBbGlhcy5maXJzdC0+c2Vjb25kID0gbnVsbHB0cjsKKyAgVGFyZ2V0QWxpYXMgdGE7CisgIHRhLkdlbmVyYXRvclRhcmdldCA9IHRhcmdldDsKKyAgdGEuQ29uZmlnID0gY29uZmlnOworCisgIGF1dG8gbmV3QWxpYXNHbG9iYWwgPQorICAgIHRoaXMtPlRhcmdldEFsaWFzZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGJ1aWxkQWxpYXMsIHRhKSk7CisgIGlmIChuZXdBbGlhc0dsb2JhbC5zZWNvbmQgJiYKKyAgICAgIG5ld0FsaWFzR2xvYmFsLmZpcnN0LT5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0ICE9IHRhcmdldCkgeworICAgIG5ld0FsaWFzR2xvYmFsLmZpcnN0LT5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0ID0gbnVsbHB0cjsKKyAgfQorCisgIGF1dG8gbmV3QWxpYXNDb25maWcgPQorICAgIHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5UYXJnZXRBbGlhc2VzLmluc2VydChzdGQ6Om1ha2VfcGFpcihvdXRwdXRQYXRoLCB0YSkpOworICBpZiAobmV3QWxpYXNDb25maWcuc2Vjb25kICYmCisgICAgICBuZXdBbGlhc0NvbmZpZy5maXJzdC0+c2Vjb25kLkdlbmVyYXRvclRhcmdldCAhPSB0YXJnZXQpIHsKKyAgICBuZXdBbGlhc0NvbmZpZy5maXJzdC0+c2Vjb25kLkdlbmVyYXRvclRhcmdldCA9IG51bGxwdHI7CisgIH0KKyAgaWYgKHRoaXMtPkRlZmF1bHRDb25maWdzLmNvdW50KGNvbmZpZykpIHsKKyAgICBhdXRvIG5ld0FsaWFzRGVmYXVsdEdsb2JhbCA9CisgICAgICB0aGlzLT5EZWZhdWx0VGFyZ2V0QWxpYXNlcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIob3V0cHV0UGF0aCwgdGEpKTsKKyAgICBpZiAobmV3QWxpYXNEZWZhdWx0R2xvYmFsLnNlY29uZCAmJgorICAgICAgICBuZXdBbGlhc0RlZmF1bHRHbG9iYWwuZmlyc3QtPnNlY29uZC5HZW5lcmF0b3JUYXJnZXQgIT0gdGFyZ2V0KSB7CisgICAgICBuZXdBbGlhc0RlZmF1bHRHbG9iYWwuZmlyc3QtPnNlY29uZC5HZW5lcmF0b3JUYXJnZXQgPSBudWxscHRyOworICAgIH0KICAgfQogfQogCkBAIC0xMDYxLDEwICsxMjUwLDEwIEBACiAgIG9zIDw8ICIjIFRhcmdldCBhbGlhc2VzLlxuXG4iOwogCiAgIGNtTmluamFCdWlsZCBidWlsZCgicGhvbnkiKTsKLSAgYnVpbGQuT3V0cHV0cy5lbXBsYWNlX2JhY2soIiIpOwotICBmb3IgKGF1dG8gY29uc3QmIHRhIDogVGFyZ2V0QWxpYXNlcykgeworICBidWlsZC5PdXRwdXRzLmVtcGxhY2VfYmFjaygpOworICBmb3IgKGF1dG8gY29uc3QmIHRhIDogdGhpcy0+VGFyZ2V0QWxpYXNlcykgewogICAgIC8vIERvbid0IHdyaXRlIGFtYmlndW91cyBhbGlhc2VzLgotICAgIGlmICghdGEuc2Vjb25kKSB7CisgICAgaWYgKCF0YS5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0KSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAKQEAgLTEwNzQsMTMgKzEyNjMsNzMgQEAKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIC8vIE91dHB1dHMKLSAgICBidWlsZC5PdXRwdXRzWzBdID0gdGEuZmlyc3Q7Ci0gICAgLy8gRXhwbGljaXQgZGVwZGVuZGVuY2llcworICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IHRhLmZpcnN0OwogICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOwotICAgIHRoaXMtPkFwcGVuZFRhcmdldE91dHB1dHModGEuc2Vjb25kLCBidWlsZC5FeHBsaWNpdERlcHMpOwotICAgIC8vIFdyaXRlCi0gICAgdGhpcy0+V3JpdGVCdWlsZChvcywgYnVpbGQpOworICAgIGlmICh0YS5zZWNvbmQuQ29uZmlnID09ICJhbGwiKSB7CisgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPkNyb3NzQ29uZmlncykgeworICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhLnNlY29uZC5HZW5lcmF0b3JUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzLCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPkFwcGVuZFRhcmdldE91dHB1dHModGEuc2Vjb25kLkdlbmVyYXRvclRhcmdldCwgYnVpbGQuRXhwbGljaXREZXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZWNvbmQuQ29uZmlnLCBEZXBlbmRPblRhcmdldEFydGlmYWN0KTsKKyAgICB9CisgICAgdGhpcy0+V3JpdGVCdWlsZCh0aGlzLT5FbmFibGVDcm9zc0NvbmZpZ0J1aWxkKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGEuc2Vjb25kLkNvbmZpZyA9PSAiYWxsIiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Dcm9zc0NvbmZpZ3MuY291bnQodGEuc2Vjb25kLkNvbmZpZykpCisgICAgICAgICAgICAgICAgICAgICAgID8gb3MKKyAgICAgICAgICAgICAgICAgICAgICAgOiAqdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0odGEuc2Vjb25kLkNvbmZpZyksCisgICAgICAgICAgICAgICAgICAgICBidWlsZCk7CisgIH0KKworICBpZiAodGhpcy0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5NYWtlZmlsZXMuZnJvbnQoKS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgICAgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKSkgeworICAgICAgZm9yIChhdXRvIGNvbnN0JiB0YSA6IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5UYXJnZXRBbGlhc2VzKSB7CisgICAgICAgIC8vIERvbid0IHdyaXRlIGFtYmlndW91cyBhbGlhc2VzLgorICAgICAgICBpZiAoIXRhLnNlY29uZC5HZW5lcmF0b3JUYXJnZXQpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvbid0IHdyaXRlIGFsaWFzIGlmIHRoZXJlIGlzIGEgYWxyZWFkeSBhIGN1c3RvbSBjb21tYW5kIHdpdGgKKyAgICAgICAgLy8gbWF0Y2hpbmcgb3V0cHV0CisgICAgICAgIGlmICh0aGlzLT5IYXNDdXN0b21Db21tYW5kT3V0cHV0KHRhLmZpcnN0KSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYnVpbGQuT3V0cHV0cy5mcm9udCgpID0gdGEuZmlyc3Q7CisgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOworICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRhLnNlY29uZC5HZW5lcmF0b3JUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzLCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CisgICAgICAgIHRoaXMtPldyaXRlQnVpbGQoKnRoaXMtPkdldENvbmZpZ0ZpbGVTdHJlYW0oY29uZmlnKSwgYnVpbGQpOworICAgICAgfQorICAgIH0KKworICAgIGlmICghdGhpcy0+RGVmYXVsdENvbmZpZ3MuZW1wdHkoKSkgeworICAgICAgZm9yIChhdXRvIGNvbnN0JiB0YSA6IHRoaXMtPkRlZmF1bHRUYXJnZXRBbGlhc2VzKSB7CisgICAgICAgIC8vIERvbid0IHdyaXRlIGFtYmlndW91cyBhbGlhc2VzLgorICAgICAgICBpZiAoIXRhLnNlY29uZC5HZW5lcmF0b3JUYXJnZXQpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvbid0IHdyaXRlIGFsaWFzIGlmIHRoZXJlIGlzIGEgYWxyZWFkeSBhIGN1c3RvbSBjb21tYW5kIHdpdGgKKyAgICAgICAgLy8gbWF0Y2hpbmcgb3V0cHV0CisgICAgICAgIGlmICh0aGlzLT5IYXNDdXN0b21Db21tYW5kT3V0cHV0KHRhLmZpcnN0KSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYnVpbGQuT3V0cHV0cy5mcm9udCgpID0gdGEuZmlyc3Q7CisgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOworICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPkRlZmF1bHRDb25maWdzKSB7CisgICAgICAgICAgdGhpcy0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0YS5zZWNvbmQuR2VuZXJhdG9yVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzLCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRPblRhcmdldEFydGlmYWN0KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXREZWZhdWx0RmlsZVN0cmVhbSgpLCBidWlsZCk7CisgICAgICB9CisgICAgfQogICB9CiB9CiAKQEAgLTEwOTcsMjQgKzEzNDYsNjkgQEAKICAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjdXJyZW50QmluYXJ5RGlyID0gaXQuZmlyc3Q7CiAgICAgRGlyZWN0b3J5VGFyZ2V0IGNvbnN0JiBkdCA9IGl0LnNlY29uZDsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlncyA9CisgICAgICBkdC5MRy0+R2V0TWFrZWZpbGUoKS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIAogICAgIC8vIFNldHVwIHRhcmdldAotICAgIGJ1aWxkLkNvbW1lbnQgPSAiRm9sZGVyOiAiICsgY3VycmVudEJpbmFyeURpcjsKLSAgICBidWlsZC5PdXRwdXRzLmVtcGxhY2VfYmFjaygKLSAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChjdXJyZW50QmluYXJ5RGlyICsgIi9hbGwiKSk7Ci0gICAgZm9yIChEaXJlY3RvcnlUYXJnZXQ6OlRhcmdldCBjb25zdCYgdCA6IGR0LlRhcmdldHMpIHsKLSAgICAgIGlmICghdC5FeGNsdWRlRnJvbUFsbCkgewotICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHQuR1QsIGJ1aWxkLkV4cGxpY2l0RGVwcyk7CisgICAgY21OaW5qYURlcHMgY29uZmlnRGVwczsKKyAgICBidWlsZC5Db21tZW50ID0gY21TdHJDYXQoIkZvbGRlcjogIiwgY3VycmVudEJpbmFyeURpcik7CisgICAgYnVpbGQuT3V0cHV0cy5lbXBsYWNlX2JhY2soKTsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCBidWlsZERpckFsbFRhcmdldCA9CisgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoY21TdHJDYXQoY3VycmVudEJpbmFyeURpciwgIi9hbGwiKSk7CisgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiBjb25maWdzKSB7CisgICAgICBidWlsZC5FeHBsaWNpdERlcHMuY2xlYXIoKTsKKyAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IHRoaXMtPkJ1aWxkQWxpYXMoYnVpbGREaXJBbGxUYXJnZXQsIGNvbmZpZyk7CisgICAgICBjb25maWdEZXBzLmVtcGxhY2VfYmFjayhidWlsZC5PdXRwdXRzLmZyb250KCkpOworICAgICAgZm9yIChEaXJlY3RvcnlUYXJnZXQ6OlRhcmdldCBjb25zdCYgdCA6IGR0LlRhcmdldHMpIHsKKyAgICAgICAgaWYgKCFJc0V4Y2x1ZGVkRnJvbUFsbEluQ29uZmlnKHQsIGNvbmZpZykpIHsKKyAgICAgICAgICB0aGlzLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHQuR1QsIGJ1aWxkLkV4cGxpY2l0RGVwcywgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZvciAoRGlyZWN0b3J5VGFyZ2V0OjpEaXIgY29uc3QmIGQgOiBkdC5DaGlsZHJlbikgeworICAgICAgICBpZiAoIWQuRXhjbHVkZUZyb21BbGwpIHsKKyAgICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMuZW1wbGFjZV9iYWNrKHRoaXMtPkJ1aWxkQWxpYXMoCisgICAgICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoY21TdHJDYXQoZC5QYXRoLCAiL2FsbCIpKSwgY29uZmlnKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIFdyaXRlIHRhcmdldAorICAgICAgdGhpcy0+V3JpdGVCdWlsZCh0aGlzLT5FbmFibGVDcm9zc0NvbmZpZ0J1aWxkKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyb3NzQ29uZmlncy5jb3VudChjb25maWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcworICAgICAgICAgICAgICAgICAgICAgICAgIDogKnRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGNvbmZpZyksCisgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkKTsKKyAgICB9CisKKyAgICAvLyBBZGQgc2hvcnRjdXQgdGFyZ2V0CisgICAgaWYgKHRoaXMtPklzTXVsdGlDb25maWcoKSkgeworICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiBjb25maWdzKSB7CisgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcyA9IHsgdGhpcy0+QnVpbGRBbGlhcyhidWlsZERpckFsbFRhcmdldCwgY29uZmlnKSB9OworICAgICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSBidWlsZERpckFsbFRhcmdldDsKKyAgICAgICAgdGhpcy0+V3JpdGVCdWlsZCgqdGhpcy0+R2V0Q29uZmlnRmlsZVN0cmVhbShjb25maWcpLCBidWlsZCk7CisgICAgICB9CisKKyAgICAgIGlmICghdGhpcy0+RGVmYXVsdEZpbGVDb25maWcuZW1wdHkoKSkgeworICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMuY2xlYXIoKTsKKyAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5EZWZhdWx0Q29uZmlncykgeworICAgICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2soCisgICAgICAgICAgICB0aGlzLT5CdWlsZEFsaWFzKGJ1aWxkRGlyQWxsVGFyZ2V0LCBjb25maWcpKTsKKyAgICAgICAgfQorICAgICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSBidWlsZERpckFsbFRhcmdldDsKKyAgICAgICAgdGhpcy0+V3JpdGVCdWlsZCgqdGhpcy0+R2V0RGVmYXVsdEZpbGVTdHJlYW0oKSwgYnVpbGQpOwogICAgICAgfQogICAgIH0KLSAgICBmb3IgKERpcmVjdG9yeVRhcmdldDo6RGlyIGNvbnN0JiBkIDogZHQuQ2hpbGRyZW4pIHsKLSAgICAgIGlmICghZC5FeGNsdWRlRnJvbUFsbCkgewotICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMuZW1wbGFjZV9iYWNrKAotICAgICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChkLlBhdGggKyAiL2FsbCIpKTsKKworICAgIC8vIEFkZCB0YXJnZXQgZm9yIGFsbCBjb25maWdzCisgICAgaWYgKHRoaXMtPkVuYWJsZUNyb3NzQ29uZmlnQnVpbGQoKSkgeworICAgICAgYnVpbGQuRXhwbGljaXREZXBzLmNsZWFyKCk7CisgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPkNyb3NzQ29uZmlncykgeworICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKAorICAgICAgICAgIHRoaXMtPkJ1aWxkQWxpYXMoYnVpbGREaXJBbGxUYXJnZXQsIGNvbmZpZykpOwogICAgICAgfQorICAgICAgYnVpbGQuT3V0cHV0cy5mcm9udCgpID0gdGhpcy0+QnVpbGRBbGlhcyhidWlsZERpckFsbFRhcmdldCwgImFsbCIpOworICAgICAgdGhpcy0+V3JpdGVCdWlsZChvcywgYnVpbGQpOwogICAgIH0KLSAgICAvLyBXcml0ZSB0YXJnZXQKLSAgICB0aGlzLT5Xcml0ZUJ1aWxkKG9zLCBidWlsZCk7CiAgIH0KIH0KIApAQCAtMTE0OCw3ICsxNDQyLDcgQEAKICAgLy8gZ2V0IHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgY21ha2UgaXRzZWxmIGhhcyBnZW5lcmF0ZWQgYXMgYQogICAvLyBwcm9kdWN0IG9mIGNvbmZpZ3VyYXRpb24uCiAKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsZyA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgLy8gZ2V0IHRoZSB2ZWN0b3Igb2YgZmlsZXMgY3JlYXRlZCBieSB0aGlzIG1ha2VmaWxlIGFuZCBjb252ZXJ0IHRoZW0KICAgICAvLyB0byBuaW5qYSBwYXRocywgd2hpY2ggYXJlIGFsbCByZWxhdGl2ZSBpbiByZXNwZWN0IHRvIHRoZSBidWlsZCBkaXJlY3RvcnkKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlIDogbGctPkdldE1ha2VmaWxlKCktPkdldE91dHB1dEZpbGVzKCkpIHsKQEAgLTExNjEsOCArMTQ1NSw3IEBACiAgICAgICAgIGtub3duRGVwZW5kZW5jaWVzLmluc2VydCh0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoaikpOwogICAgICAgfQogICAgIH0KLSAgICBmb3IgKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlKiBsaSA6Ci0gICAgICAgICBsZy0+R2V0TWFrZWZpbGUoKS0+R2V0RXZhbHVhdGlvbkZpbGVzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpIDogbGctPkdldE1ha2VmaWxlKCktPkdldEV2YWx1YXRpb25GaWxlcygpKSB7CiAgICAgICAvLyBnZXQgYWxsIHRoZSBmaWxlcyBjcmVhdGVkIGJ5IGdlbmVyYXRvciBleHByZXNzaW9ucyBhbmQgY29udmVydCB0aGVtCiAgICAgICAvLyB0byBuaW5qYSBwYXRocwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZXZhbHVhdGlvbkZpbGUgOiBsaS0+R2V0RmlsZXMoKSkgewpAQCAtMTI0NywxMCArMTU0MCwxOCBAQAogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwogICBvcyA8PCAiIyBCdWlsdC1pbiB0YXJnZXRzXG5cbiI7CiAKLSAgdGhpcy0+V3JpdGVUYXJnZXREZWZhdWx0KG9zKTsKICAgdGhpcy0+V3JpdGVUYXJnZXRSZWJ1aWxkTWFuaWZlc3Qob3MpOwogICB0aGlzLT5Xcml0ZVRhcmdldENsZWFuKG9zKTsKICAgdGhpcy0+V3JpdGVUYXJnZXRIZWxwKG9zKTsKKworICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPk1ha2VmaWxlc1swXS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgICAgIGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZykpIHsKKyAgICB0aGlzLT5Xcml0ZVRhcmdldERlZmF1bHQoKnRoaXMtPkdldENvbmZpZ0ZpbGVTdHJlYW0oY29uZmlnKSk7CisgIH0KKworICBpZiAoIXRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnLmVtcHR5KCkpIHsKKyAgICB0aGlzLT5Xcml0ZVRhcmdldERlZmF1bHQoKnRoaXMtPkdldERlZmF1bHRGaWxlU3RyZWFtKCkpOworICB9CiB9CiAKIHZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVUYXJnZXREZWZhdWx0KHN0ZDo6b3N0cmVhbSYgb3MpCkBAIC0xMjY4LDEyICsxNTY5LDEyIEBACiAgIGlmICh0aGlzLT5HbG9iYWxTZXR0aW5nSXNPbigiQ01BS0VfU1VQUFJFU1NfUkVHRU5FUkFUSU9OIikpIHsKICAgICByZXR1cm47CiAgIH0KLSAgY21Mb2NhbEdlbmVyYXRvciogbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbMF07CisgIGNvbnN0IGF1dG8mIGxnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdOwogCiAgIHsKICAgICBjbU5pbmphUnVsZSBydWxlKCJSRVJVTl9DTUFLRSIpOwogICAgIHJ1bGUuQ29tbWFuZCA9Ci0gICAgICBjbVN0ckNhdChDTWFrZUNtZCgpLCAiIC1TIiwKKyAgICAgIGNtU3RyQ2F0KENNYWtlQ21kKCksICIgLS1yZWdlbmVyYXRlLWR1cmluZy1idWlsZCAtUyIsCiAgICAgICAgICAgICAgICBsZy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KGxnLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKSwKICAgICAgICAgICAgICAgICIgLUIiLApAQCAtMTI4Nyw5ICsxNTg4LDkgQEAKIAogICBjbU5pbmphQnVpbGQgcmVCdWlsZCgiUkVSVU5fQ01BS0UiKTsKICAgcmVCdWlsZC5Db21tZW50ID0gIlJlLXJ1biBDTWFrZSBpZiBhbnkgb2YgaXRzIGlucHV0cyBjaGFuZ2VkLiI7Ci0gIHJlQnVpbGQuT3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+TmluamFPdXRwdXRQYXRoKE5JTkpBX0JVSUxEX0ZJTEUpKTsKKyAgdGhpcy0+QWRkUmVidWlsZE1hbmlmZXN0T3V0cHV0cyhyZUJ1aWxkLk91dHB1dHMpOwogCi0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGZpIDogbG9jYWxHZW4tPkdldE1ha2VmaWxlKCktPkdldExpc3RGaWxlcygpKSB7CiAgICAgICByZUJ1aWxkLkltcGxpY2l0RGVwcy5wdXNoX2JhY2sodGhpcy0+Q29udmVydFRvTmluamFQYXRoKGZpKSk7CiAgICAgfQpAQCAtMTMxOCw3ICsxNjE5LDggQEAKIAogICAgIGNtTmluamFCdWlsZCBwaG9ueUJ1aWxkKCJwaG9ueSIpOwogICAgIHBob255QnVpbGQuQ29tbWVudCA9ICJQaG9ueSB0YXJnZXQgdG8gZm9yY2UgZ2xvYiB2ZXJpZmljYXRpb24gcnVuLiI7Ci0gICAgcGhvbnlCdWlsZC5PdXRwdXRzLnB1c2hfYmFjayhjbS0+R2V0R2xvYlZlcmlmeVNjcmlwdCgpICsgIl9mb3JjZSIpOworICAgIHBob255QnVpbGQuT3V0cHV0cy5wdXNoX2JhY2soCisgICAgICBjbVN0ckNhdChjbS0+R2V0R2xvYlZlcmlmeVNjcmlwdCgpLCAiX2ZvcmNlIikpOwogICAgIHRoaXMtPldyaXRlQnVpbGQob3MsIHBob255QnVpbGQpOwogCiAgICAgcmVCdWlsZC5WYXJpYWJsZXNbInJlc3RhdCJdID0gIjEiOwpAQCAtMTM3NiwxNCArMTY3OCwxNCBAQAogCiBzdGQ6OnN0cmluZyBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpDTWFrZUNtZCgpIGNvbnN0CiB7Ci0gIGNtTG9jYWxHZW5lcmF0b3IqIGxnZW4gPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuYXQoMCk7CisgIGNvbnN0IGF1dG8mIGxnZW4gPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMuYXQoMCk7CiAgIHJldHVybiBsZ2VuLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKIH0KIAogc3RkOjpzdHJpbmcgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TmluamFDbWQoKSBjb25zdAogewotICBjbUxvY2FsR2VuZXJhdG9yKiBsZ2VuID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdOworICBjb25zdCBhdXRvJiBsZ2VuID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdOwogICBpZiAobGdlbiAhPSBudWxscHRyKSB7CiAgICAgcmV0dXJuIGxnZW4tPkNvbnZlcnRUb091dHB1dEZvcm1hdCh0aGlzLT5OaW5qYUNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwpAQCAtMTQxMywxMyArMTcxNSwyNCBAQAogCiBib29sIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlVGFyZ2V0Q2xlYW5BZGRpdGlvbmFsKHN0ZDo6b3N0cmVhbSYgb3MpCiB7Ci0gIGNtTG9jYWxHZW5lcmF0b3IqIGxnciA9IHRoaXMtPkxvY2FsR2VuZXJhdG9ycy5hdCgwKTsKKyAgY29uc3QgYXV0byYgbGdyID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzLmF0KDApOwogICBzdGQ6OnN0cmluZyBjbGVhblNjcmlwdFJlbCA9ICJDTWFrZUZpbGVzL2NsZWFuX2FkZGl0aW9uYWwuY21ha2UiOwogICBzdGQ6OnN0cmluZyBjbGVhblNjcmlwdEFicyA9CiAgICAgY21TdHJDYXQobGdyLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLCBjbGVhblNjcmlwdFJlbCk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzID0KKyAgICB0aGlzLT5NYWtlZmlsZXNbMF0tPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIAogICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYWRkaXRpb25hbCBmaWxlcyB0byBjbGVhbgotICBpZiAodGhpcy0+QWRkaXRpb25hbENsZWFuRmlsZXMuZW1wdHkoKSkgeworICBib29sIGVtcHR5ID0gdHJ1ZTsKKyAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiBjb25maWdzKSB7CisgICAgYXV0byBjb25zdCBpdCA9IHRoaXMtPkNvbmZpZ3MuZmluZChjb25maWcpOworICAgIGlmIChpdCAhPSB0aGlzLT5Db25maWdzLmVuZCgpICYmCisgICAgICAgICFpdC0+c2Vjb25kLkFkZGl0aW9uYWxDbGVhbkZpbGVzLmVtcHR5KCkpIHsKKyAgICAgIGVtcHR5ID0gZmFsc2U7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKGVtcHR5KSB7CiAgICAgLy8gUmVtb3ZlIGNtYWtlIGNsZWFuIHNjcmlwdCBmaWxlIGlmIGl0IGV4aXN0cwogICAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoY2xlYW5TY3JpcHRBYnMpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MzEsMTQgKzE3NDQsMjMgQEAKICAgICBpZiAoIWZvdXQpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgZm91dCA8PCAiIyBBZGRpdGlvbmFsIGNsZWFuIGZpbGVzXG5cbiI7Ci0gICAgZm91dCA8PCAiZmlsZShSRU1PVkVfUkVDVVJTRVxuIjsKLSAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBhY2YgOiB0aGlzLT5BZGRpdGlvbmFsQ2xlYW5GaWxlcykgewotICAgICAgZm91dCA8PCAiICAiCi0gICAgICAgICAgIDw8IGNtT3V0cHV0Q29udmVydGVyOjpFc2NhcGVGb3JDTWFrZShDb252ZXJ0VG9OaW5qYVBhdGgoYWNmKSkKLSAgICAgICAgICAgPDwgJ1xuJzsKKyAgICBmb3V0IDw8ICIjIEFkZGl0aW9uYWwgY2xlYW4gZmlsZXNcbmNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KVxuIjsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKKyAgICAgIGF1dG8gY29uc3QgaXQgPSB0aGlzLT5Db25maWdzLmZpbmQoY29uZmlnKTsKKyAgICAgIGlmIChpdCAhPSB0aGlzLT5Db25maWdzLmVuZCgpICYmCisgICAgICAgICAgIWl0LT5zZWNvbmQuQWRkaXRpb25hbENsZWFuRmlsZXMuZW1wdHkoKSkgeworICAgICAgICBmb3V0IDw8ICJcbmlmKFwiJHtDT05GSUd9XCIgU1RSRVFVQUwgXCJcIiBPUiBcIiR7Q09ORklHfVwiIFNUUkVRVUFMIFwiIgorICAgICAgICAgICAgIDw8IGNvbmZpZyA8PCAiXCIpXG4iOworICAgICAgICBmb3V0IDw8ICIgIGZpbGUoUkVNT1ZFX1JFQ1VSU0VcbiI7CisgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGFjZiA6IGl0LT5zZWNvbmQuQWRkaXRpb25hbENsZWFuRmlsZXMpIHsKKyAgICAgICAgICBmb3V0IDw8ICIgICIKKyAgICAgICAgICAgICAgIDw8IGNtT3V0cHV0Q29udmVydGVyOjpFc2NhcGVGb3JDTWFrZShDb252ZXJ0VG9OaW5qYVBhdGgoYWNmKSkKKyAgICAgICAgICAgICAgIDw8ICdcbic7CisgICAgICAgIH0KKyAgICAgICAgZm91dCA8PCAiICApXG4iOworICAgICAgICBmb3V0IDw8ICJlbmRpZigpXG4iOworICAgICAgfQogICAgIH0KLSAgICBmb3V0IDw8ICIpXG4iOwogICB9CiAgIC8vIFJlZ2lzdGVyIGNsZWFuIHNjcmlwdCBmaWxlCiAgIGxnci0+R2V0TWFrZWZpbGUoKS0+QWRkQ01ha2VPdXRwdXRGaWxlKGNsZWFuU2NyaXB0QWJzKTsKQEAgLTE0NDcsNyArMTc2OSw3IEBACiAgIHsKICAgICBjbU5pbmphUnVsZSBydWxlKCJDTEVBTl9BRERJVElPTkFMIik7CiAgICAgcnVsZS5Db21tYW5kID0gY21TdHJDYXQoCi0gICAgICBDTWFrZUNtZCgpLCAiIC1QICIsCisgICAgICBDTWFrZUNtZCgpLCAiIC1EQ09ORklHPSRDT05GSUcgLVAgIiwKICAgICAgIGxnci0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHRoaXMtPk5pbmphT3V0cHV0UGF0aChjbGVhblNjcmlwdFJlbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpKTsKICAgICBydWxlLkRlc2NyaXB0aW9uID0gIkNsZWFuaW5nIGFkZGl0aW9uYWwgZmlsZXMuLi4iOwpAQCAtMTQ1OSw5ICsxNzgxLDE5IEBACiAgIHsKICAgICBjbU5pbmphQnVpbGQgYnVpbGQoIkNMRUFOX0FERElUSU9OQUwiKTsKICAgICBidWlsZC5Db21tZW50ID0gIkNsZWFuIGFkZGl0aW9uYWwgZmlsZXMuIjsKLSAgICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjaygKLSAgICAgIHRoaXMtPk5pbmphT3V0cHV0UGF0aCh0aGlzLT5HZXRBZGRpdGlvbmFsQ2xlYW5UYXJnZXROYW1lKCkpKTsKLSAgICBXcml0ZUJ1aWxkKG9zLCBidWlsZCk7CisgICAgYnVpbGQuT3V0cHV0cy5lbXBsYWNlX2JhY2soKTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKKyAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IHRoaXMtPkJ1aWxkQWxpYXMoCisgICAgICAgIHRoaXMtPk5pbmphT3V0cHV0UGF0aCh0aGlzLT5HZXRBZGRpdGlvbmFsQ2xlYW5UYXJnZXROYW1lKCkpLCBjb25maWcpOworICAgICAgYnVpbGQuVmFyaWFibGVzWyJDT05GSUciXSA9IGNvbmZpZzsKKyAgICAgIFdyaXRlQnVpbGQob3MsIGJ1aWxkKTsKKyAgICB9CisgICAgaWYgKHRoaXMtPklzTXVsdGlDb25maWcoKSkgeworICAgICAgYnVpbGQuT3V0cHV0cy5mcm9udCgpID0KKyAgICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKHRoaXMtPkdldEFkZGl0aW9uYWxDbGVhblRhcmdldE5hbWUoKSk7CisgICAgICBidWlsZC5WYXJpYWJsZXNbIkNPTkZJRyJdID0gIiI7CisgICAgICBXcml0ZUJ1aWxkKG9zLCBidWlsZCk7CisgICAgfQogICB9CiAgIC8vIFJldHVybiBzdWNjZXNzCiAgIHJldHVybiB0cnVlOwpAQCAtMTQ3NiwyMiArMTgwOCwxMTQgQEAKICAgLy8gV3JpdGUgcnVsZQogICB7CiAgICAgY21OaW5qYVJ1bGUgcnVsZSgiQ0xFQU4iKTsKLSAgICBydWxlLkNvbW1hbmQgPSBOaW5qYUNtZCgpICsgIiAtdCBjbGVhbiI7CisgICAgcnVsZS5Db21tYW5kID0gY21TdHJDYXQoTmluamFDbWQoKSwgIiAkRklMRV9BUkcgLXQgY2xlYW4gJFRBUkdFVFMiKTsKICAgICBydWxlLkRlc2NyaXB0aW9uID0gIkNsZWFuaW5nIGFsbCBidWlsdCBmaWxlcy4uLiI7CiAgICAgcnVsZS5Db21tZW50ID0gIlJ1bGUgZm9yIGNsZWFuaW5nIGFsbCBidWlsdCBmaWxlcy4iOwogICAgIFdyaXRlUnVsZSgqdGhpcy0+UnVsZXNGaWxlU3RyZWFtLCBydWxlKTsKICAgfQogCisgIGF1dG8gY29uc3QgY29uZmlncyA9IHRoaXMtPk1ha2VmaWxlcy5mcm9udCgpLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgIGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CisKICAgLy8gV3JpdGUgYnVpbGQKICAgewogICAgIGNtTmluamFCdWlsZCBidWlsZCgiQ0xFQU4iKTsKICAgICBidWlsZC5Db21tZW50ID0gIkNsZWFuIGFsbCB0aGUgYnVpbHQgZmlsZXMuIjsKLSAgICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjayh0aGlzLT5OaW5qYU91dHB1dFBhdGgodGhpcy0+R2V0Q2xlYW5UYXJnZXROYW1lKCkpKTsKLSAgICBpZiAoYWRkaXRpb25hbEZpbGVzKSB7Ci0gICAgICBidWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKAotICAgICAgICB0aGlzLT5OaW5qYU91dHB1dFBhdGgodGhpcy0+R2V0QWRkaXRpb25hbENsZWFuVGFyZ2V0TmFtZSgpKSk7CisgICAgYnVpbGQuT3V0cHV0cy5lbXBsYWNlX2JhY2soKTsKKworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogY29uZmlncykgeworICAgICAgYnVpbGQuT3V0cHV0cy5mcm9udCgpID0gdGhpcy0+QnVpbGRBbGlhcygKKyAgICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKHRoaXMtPkdldENsZWFuVGFyZ2V0TmFtZSgpKSwgY29uZmlnKTsKKyAgICAgIGlmICh0aGlzLT5Jc011bHRpQ29uZmlnKCkpIHsKKyAgICAgICAgYnVpbGQuVmFyaWFibGVzWyJUQVJHRVRTIl0gPQorICAgICAgICAgIGNtU3RyQ2F0KHRoaXMtPkJ1aWxkQWxpYXMoR2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0TmFtZSgpLCBjb25maWcpLAorICAgICAgICAgICAgICAgICAgICIgIiwgR2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0TmFtZSgpKTsKKyAgICAgIH0KKyAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOworICAgICAgaWYgKGFkZGl0aW9uYWxGaWxlcykgeworICAgICAgICBidWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKHRoaXMtPkJ1aWxkQWxpYXMoCisgICAgICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKHRoaXMtPkdldEFkZGl0aW9uYWxDbGVhblRhcmdldE5hbWUoKSksCisgICAgICAgICAgY29uZmlnKSk7CisgICAgICB9CisgICAgICBmb3IgKGF1dG8gY29uc3QmIGZpbGVDb25maWcgOiBjb25maWdzKSB7CisgICAgICAgIGlmIChmaWxlQ29uZmlnICE9IGNvbmZpZyAmJiAhdGhpcy0+RW5hYmxlQ3Jvc3NDb25maWdCdWlsZCgpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMtPklzTXVsdGlDb25maWcoKSkgeworICAgICAgICAgIGJ1aWxkLlZhcmlhYmxlc1siRklMRV9BUkciXSA9IGNtU3RyQ2F0KAorICAgICAgICAgICAgIi1mICIsCisgICAgICAgICAgICBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkdldE5pbmphSW1wbEZpbGVuYW1lKGZpbGVDb25maWcpKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLT5Xcml0ZUJ1aWxkKCp0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKSwgYnVpbGQpOworICAgICAgfQogICAgIH0KKworICAgIGlmICh0aGlzLT5FbmFibGVDcm9zc0NvbmZpZ0J1aWxkKCkpIHsKKyAgICAgIGJ1aWxkLk91dHB1dHMuZnJvbnQoKSA9IHRoaXMtPkJ1aWxkQWxpYXMoCisgICAgICAgIHRoaXMtPk5pbmphT3V0cHV0UGF0aCh0aGlzLT5HZXRDbGVhblRhcmdldE5hbWUoKSksICJhbGwiKTsKKyAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5jbGVhcigpOworCisgICAgICBpZiAoYWRkaXRpb25hbEZpbGVzKSB7CisgICAgICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+Q3Jvc3NDb25maWdzKSB7CisgICAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzLnB1c2hfYmFjayh0aGlzLT5CdWlsZEFsaWFzKAorICAgICAgICAgICAgdGhpcy0+TmluamFPdXRwdXRQYXRoKHRoaXMtPkdldEFkZGl0aW9uYWxDbGVhblRhcmdldE5hbWUoKSksCisgICAgICAgICAgICBjb25maWcpKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYnlwcm9kdWN0czsKKyAgICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+Q3Jvc3NDb25maWdzKSB7CisgICAgICAgIGJ5cHJvZHVjdHMucHVzaF9iYWNrKAorICAgICAgICAgIHRoaXMtPkJ1aWxkQWxpYXMoR2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0TmFtZSgpLCBjb25maWcpKTsKKyAgICAgIH0KKyAgICAgIGJ1aWxkLlZhcmlhYmxlc1siVEFSR0VUUyJdID0gY21Kb2luKGJ5cHJvZHVjdHMsICIgIik7CisKKyAgICAgIGZvciAoYXV0byBjb25zdCYgZmlsZUNvbmZpZyA6IGNvbmZpZ3MpIHsKKyAgICAgICAgYnVpbGQuVmFyaWFibGVzWyJGSUxFX0FSRyJdID0gY21TdHJDYXQoCisgICAgICAgICAgIi1mICIsCisgICAgICAgICAgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpHZXROaW5qYUltcGxGaWxlbmFtZShmaWxlQ29uZmlnKSk7CisgICAgICAgIHRoaXMtPldyaXRlQnVpbGQoKnRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGZpbGVDb25maWcpLCBidWlsZCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHRoaXMtPklzTXVsdGlDb25maWcoKSkgeworICAgIGNtTmluamFCdWlsZCBidWlsZCgicGhvbnkiKTsKKyAgICBidWlsZC5PdXRwdXRzLmVtcGxhY2VfYmFjaygKKyAgICAgIHRoaXMtPk5pbmphT3V0cHV0UGF0aCh0aGlzLT5HZXRDbGVhblRhcmdldE5hbWUoKSkpOworICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5lbXBsYWNlX2JhY2soKTsKKworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogY29uZmlncykgeworICAgICAgYnVpbGQuRXhwbGljaXREZXBzLmZyb250KCkgPSB0aGlzLT5CdWlsZEFsaWFzKAorICAgICAgICB0aGlzLT5OaW5qYU91dHB1dFBhdGgodGhpcy0+R2V0Q2xlYW5UYXJnZXROYW1lKCkpLCBjb25maWcpOworICAgICAgdGhpcy0+V3JpdGVCdWlsZCgqdGhpcy0+R2V0Q29uZmlnRmlsZVN0cmVhbShjb25maWcpLCBidWlsZCk7CisgICAgfQorCisgICAgaWYgKCF0aGlzLT5EZWZhdWx0Q29uZmlncy5lbXB0eSgpKSB7CisgICAgICBidWlsZC5FeHBsaWNpdERlcHMuY2xlYXIoKTsKKyAgICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+RGVmYXVsdENvbmZpZ3MpIHsKKyAgICAgICAgYnVpbGQuRXhwbGljaXREZXBzLnB1c2hfYmFjayh0aGlzLT5CdWlsZEFsaWFzKAorICAgICAgICAgIHRoaXMtPk5pbmphT3V0cHV0UGF0aCh0aGlzLT5HZXRDbGVhblRhcmdldE5hbWUoKSksIGNvbmZpZykpOworICAgICAgfQorICAgICAgdGhpcy0+V3JpdGVCdWlsZCgqdGhpcy0+R2V0RGVmYXVsdEZpbGVTdHJlYW0oKSwgYnVpbGQpOworICAgIH0KKyAgfQorCisgIC8vIFdyaXRlIGJ5cHJvZHVjdHMKKyAgaWYgKHRoaXMtPklzTXVsdGlDb25maWcoKSkgeworICAgIGNtTmluamFCdWlsZCBidWlsZCgicGhvbnkiKTsKKyAgICBidWlsZC5Db21tZW50ID0gIkNsZWFuIGJ5cHJvZHVjdHMuIjsKKyAgICBidWlsZC5PdXRwdXRzLmVtcGxhY2VfYmFjaygKKyAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChHZXRCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXROYW1lKCkpKTsKKyAgICBidWlsZC5FeHBsaWNpdERlcHMgPSB0aGlzLT5CeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQ7CiAgICAgV3JpdGVCdWlsZChvcywgYnVpbGQpOworCisgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiBjb25maWdzKSB7CisgICAgICBidWlsZC5PdXRwdXRzLmZyb250KCkgPSB0aGlzLT5CdWlsZEFsaWFzKAorICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoR2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0TmFtZSgpKSwgY29uZmlnKTsKKyAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcyA9IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5CeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQ7CisgICAgICBXcml0ZUJ1aWxkKG9zLCBidWlsZCk7CisgICAgfQogICB9CiB9CiAKQEAgLTE0OTksNyArMTkyMyw3IEBACiB7CiAgIHsKICAgICBjbU5pbmphUnVsZSBydWxlKCJIRUxQIik7Ci0gICAgcnVsZS5Db21tYW5kID0gTmluamFDbWQoKSArICIgLXQgdGFyZ2V0cyI7CisgICAgcnVsZS5Db21tYW5kID0gY21TdHJDYXQoTmluamFDbWQoKSwgIiAtdCB0YXJnZXRzIik7CiAgICAgcnVsZS5EZXNjcmlwdGlvbiA9ICJBbGwgcHJpbWFyeSB0YXJnZXRzIGF2YWlsYWJsZToiOwogICAgIHJ1bGUuQ29tbWVudCA9ICJSdWxlIGZvciBwcmludGluZyBhbGwgcHJpbWFyeSB0YXJnZXRzIGF2YWlsYWJsZS4iOwogICAgIFdyaXRlUnVsZSgqdGhpcy0+UnVsZXNGaWxlU3RyZWFtLCBydWxlKTsKQEAgLTE1MjYsNyArMTk1MCw3IEBACiAgIGlmICghdGhpcy0+SGFzT3V0cHV0UGF0aFByZWZpeCgpIHx8IGNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKHBhdGgpKSB7CiAgICAgcmV0dXJuIHBhdGg7CiAgIH0KLSAgcmV0dXJuIHRoaXMtPk91dHB1dFBhdGhQcmVmaXggKyBwYXRoOworICByZXR1cm4gY21TdHJDYXQodGhpcy0+T3V0cHV0UGF0aFByZWZpeCwgcGF0aCk7CiB9CiAKIHZvaWQgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6U3RyaXBOaW5qYU91dHB1dFBhdGhQcmVmaXhBc1N1ZmZpeCgKQEAgLTE2NTQsNyArMjA3OCw4IEBACiAgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1sYW5nPSIpKSB7CiAgICAgICBhcmdfbGFuZyA9IGFyZy5zdWJzdHIoNyk7CiAgICAgfSBlbHNlIHsKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCItRSBjbWFrZV9uaW5qYV9kZXBlbmRzIHVua25vd24gYXJndW1lbnQ6ICIgKyBhcmcpOworICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCisgICAgICAgIGNtU3RyQ2F0KCItRSBjbWFrZV9uaW5qYV9kZXBlbmRzIHVua25vd24gYXJndW1lbnQ6ICIsIGFyZykpOwogICAgICAgcmV0dXJuIDE7CiAgICAgfQogICB9CkBAIC0xNzI1LDcgKzIxNTAsOCBAQAogICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZGRpZihhcmdfZGRpKTsKICAgZGRpZiA8PCBkZGk7CiAgIGlmICghZGRpZikgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCItRSBjbWFrZV9uaW5qYV9kZXBlbmRzIGZhaWxlZCB0byB3cml0ZSAiICsgYXJnX2RkaSk7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCisgICAgICBjbVN0ckNhdCgiLUUgY21ha2VfbmluamFfZGVwZW5kcyBmYWlsZWQgdG8gd3JpdGUgIiwgYXJnX2RkaSkpOwogICAgIHJldHVybiAxOwogICB9CiAgIHJldHVybiAwOwpAQCAtMTc3MSw3ICsyMTk3LDggQEAKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGRlZmluZXM7CiAgIGNtRm9ydHJhblBhcnNlciBwYXJzZXIoZmMsIGluY2x1ZGVzLCBkZWZpbmVzLCBmaW5mbyk7CiAgIGlmICghY21Gb3J0cmFuUGFyc2VyX0ZpbGVQdXNoKCZwYXJzZXIsIGFyZ19wcC5jX3N0cigpKSkgewotICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCItRSBjbWFrZV9uaW5qYV9kZXBlbmRzIGZhaWxlZCB0byBvcGVuICIgKyBhcmdfcHApOworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgY21TdHJDYXQoIi1FIGNtYWtlX25pbmphX2RlcGVuZHMgZmFpbGVkIHRvIG9wZW4gIiwgYXJnX3BwKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KICAgaWYgKGNtRm9ydHJhbl95eXBhcnNlKHBhcnNlci5TY2FubmVyKSAhPSAwKSB7CkBAIC0xODA5LDExICsyMjM2LDkgQEAKICAgICBzbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5TZXRSZWxhdGl2ZVBhdGhUb3BTb3VyY2UoZGlyX3RvcF9zcmMuY19zdHIoKSk7CiAgICAgc25hcHNob3QuR2V0RGlyZWN0b3J5KCkuU2V0UmVsYXRpdmVQYXRoVG9wQmluYXJ5KGRpcl90b3BfYmxkLmNfc3RyKCkpOwogICAgIGF1dG8gbWZkID0gY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGU+KHRoaXMsIHNuYXBzaG90KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbE5pbmphR2VuZXJhdG9yPiBsZ2QoCi0gICAgICBzdGF0aWNfY2FzdDxjbUxvY2FsTmluamFHZW5lcmF0b3IqPigKLSAgICAgICAgdGhpcy0+Q3JlYXRlTG9jYWxHZW5lcmF0b3IobWZkLmdldCgpKSkpOwotICAgIHRoaXMtPk1ha2VmaWxlcy5wdXNoX2JhY2sobWZkLnJlbGVhc2UoKSk7Ci0gICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLnB1c2hfYmFjayhsZ2QucmVsZWFzZSgpKTsKKyAgICBhdXRvIGxnZCA9IHRoaXMtPkNyZWF0ZUxvY2FsR2VuZXJhdG9yKG1mZC5nZXQoKSk7CisgICAgdGhpcy0+TWFrZWZpbGVzLnB1c2hfYmFjayhzdGQ6Om1vdmUobWZkKSk7CisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzLnB1c2hfYmFjayhzdGQ6Om1vdmUobGdkKSk7CiAgIH0KIAogICBzdGQ6OnZlY3RvcjxjbUR5bmRlcE9iamVjdEluZm8+IG9iamVjdHM7CkBAIC0xODc2LDcgKzIzMDEsNyBAQAogICBKc29uOjpWYWx1ZSB0bSA9IEpzb246Om9iamVjdFZhbHVlOwogICBmb3IgKGNtRHluZGVwT2JqZWN0SW5mbyBjb25zdCYgb2JqZWN0IDogb2JqZWN0cykgewogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIHAgOiBvYmplY3QuUHJvdmlkZXMpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IG1vZCA9IG1vZHVsZV9kaXIgKyBwOworICAgICAgc3RkOjpzdHJpbmcgY29uc3QgbW9kID0gY21TdHJDYXQobW9kdWxlX2RpciwgcCk7CiAgICAgICBtb2RfZmlsZXNbcF0gPSBtb2Q7CiAgICAgICB0bVtwXSA9IG1vZDsKICAgICB9CkBAIC0xOTEyLDE0ICsyMzM3LDE5IEBACiAKICAgLy8gU3RvcmUgdGhlIG1hcCBvZiBtb2R1bGVzIHByb3ZpZGVkIGJ5IHRoaXMgdGFyZ2V0IGluIGEgZmlsZSBmb3IKICAgLy8gdXNlIGJ5IGRlcGVuZGVudHMgdGhhdCByZWZlcmVuY2UgdGhpcyB0YXJnZXQgaW4gbGlua2VkLXRhcmdldC1kaXJzLgotICBzdGQ6OnN0cmluZyBjb25zdCB0YXJnZXRfbW9kc19maWxlID0KLSAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoYXJnX2RkKSArICIvIiArIGFyZ19sYW5nICsgIk1vZHVsZXMuanNvbiI7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IHRhcmdldF9tb2RzX2ZpbGUgPSBjbVN0ckNhdCgKKyAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoYXJnX2RkKSwgJy8nLCBhcmdfbGFuZywgIk1vZHVsZXMuanNvbiIpOwogICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gdG1mKHRhcmdldF9tb2RzX2ZpbGUpOwogICB0bWYgPDwgdG07CiAKICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5hYmxlQ3Jvc3NDb25maWdCdWlsZCgpIGNvbnN0Cit7CisgIHJldHVybiAhdGhpcy0+Q3Jvc3NDb25maWdzLmVtcHR5KCk7Cit9CisKIGludCBjbWNtZF9jbWFrZV9uaW5qYV9keW5kZXAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhcmdCZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYXJnRW5kKQogewpAQCAtMTk0MSw3ICsyMzcxLDggQEAKICAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFN1ZmZpeChhcmcsICIuZGRpIikpIHsKICAgICAgIGFyZ19kZGlzLnB1c2hfYmFjayhhcmcpOwogICAgIH0gZWxzZSB7Ci0gICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiLUUgY21ha2VfbmluamFfZHluZGVwIHVua25vd24gYXJndW1lbnQ6ICIgKyBhcmcpOworICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCisgICAgICAgIGNtU3RyQ2F0KCItRSBjbWFrZV9uaW5qYV9keW5kZXAgdW5rbm93biBhcmd1bWVudDogIiwgYXJnKSk7CiAgICAgICByZXR1cm4gMTsKICAgICB9CiAgIH0KQEAgLTE5NzcsNyArMjQwOCw3IEBACiAgIHN0ZDo6c3RyaW5nIGNvbnN0IGRpcl90b3Bfc3JjID0gdGRpWyJkaXItdG9wLXNyYyJdLmFzU3RyaW5nKCk7CiAgIHN0ZDo6c3RyaW5nIG1vZHVsZV9kaXIgPSB0ZGlbIm1vZHVsZS1kaXIiXS5hc1N0cmluZygpOwogICBpZiAoIW1vZHVsZV9kaXIuZW1wdHkoKSAmJiAhY21IYXNMaXRlcmFsU3VmZml4KG1vZHVsZV9kaXIsICIvIikpIHsKLSAgICBtb2R1bGVfZGlyICs9ICIvIjsKKyAgICBtb2R1bGVfZGlyICs9ICcvJzsKICAgfQogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua2VkX3RhcmdldF9kaXJzOwogICBKc29uOjpWYWx1ZSBjb25zdCYgdGRpX2xpbmtlZF90YXJnZXRfZGlycyA9IHRkaVsibGlua2VkLXRhcmdldC1kaXJzIl07CkBAIC0xOTkwLDEzICsyNDIxLDI3MiBAQAogICBjbWFrZSBjbShjbWFrZTo6Um9sZUludGVybmFsLCBjbVN0YXRlOjpVbmtub3duKTsKICAgY20uU2V0SG9tZURpcmVjdG9yeShkaXJfdG9wX3NyYyk7CiAgIGNtLlNldEhvbWVPdXRwdXREaXJlY3RvcnkoZGlyX3RvcF9ibGQpOwotICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxOaW5qYUdlbmVyYXRvcj4gZ2dkKAotICAgIHN0YXRpY19jYXN0PGNtR2xvYmFsTmluamFHZW5lcmF0b3IqPihjbS5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoIk5pbmphIikpKTsKKyAgYXV0byBnZ2QgPSBjbS5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoIk5pbmphIik7CiAgIGlmICghZ2dkIHx8Ci0gICAgICAhZ2dkLT5Xcml0ZUR5bmRlcEZpbGUoZGlyX3RvcF9zcmMsIGRpcl90b3BfYmxkLCBkaXJfY3VyX3NyYywgZGlyX2N1cl9ibGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2RkLCBhcmdfZGRpcywgbW9kdWxlX2RpciwgbGlua2VkX3RhcmdldF9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19sYW5nKSkgeworICAgICAgIWNtOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8Y21HbG9iYWxOaW5qYUdlbmVyYXRvcj4oZ2dkKS5Xcml0ZUR5bmRlcEZpbGUoCisgICAgICAgIGRpcl90b3Bfc3JjLCBkaXJfdG9wX2JsZCwgZGlyX2N1cl9zcmMsIGRpcl9jdXJfYmxkLCBhcmdfZGQsIGFyZ19kZGlzLAorICAgICAgICBtb2R1bGVfZGlyLCBsaW5rZWRfdGFyZ2V0X2RpcnMsIGFyZ19sYW5nKSkgewogICAgIHJldHVybiAxOwogICB9CiAgIHJldHVybiAwOwogfQorCit2b2lkIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkFwcGVuZERpcmVjdG9yeUZvckNvbmZpZygKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHByZWZpeCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHN1ZmZpeCwgc3RkOjpzdHJpbmcmIGRpcikKK3sKKyAgaWYgKCFjb25maWcuZW1wdHkoKSAmJiB0aGlzLT5Jc011bHRpQ29uZmlnKCkpIHsKKyAgICBkaXIgKz0gY21TdHJDYXQocHJlZml4LCBjb25maWcsIHN1ZmZpeCk7CisgIH0KK30KKworc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkdldENyb3NzQ29uZmlncygKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcpIGNvbnN0Cit7CisgIGF1dG8gcmVzdWx0ID0gdGhpcy0+Q3Jvc3NDb25maWdzOworICByZXN1bHQuaW5zZXJ0KGZpbGVDb25maWcpOworICByZXR1cm4gcmVzdWx0OworfQorCitjb25zdCBjaGFyKiBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6Ok5JTkpBX0NPTU1PTl9GSUxFID0KKyAgIkNNYWtlRmlsZXMvY29tbW9uLm5pbmphIjsKK2NvbnN0IGNoYXIqIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6TklOSkFfRklMRV9FWFRFTlNJT04gPSAiLm5pbmphIjsKKworY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3IoY21ha2UqIGNtKQorICA6IGNtR2xvYmFsTmluamFHZW5lcmF0b3IoY20pCit7CisgIGNtLT5HZXRTdGF0ZSgpLT5TZXRJc0dlbmVyYXRvck11bHRpQ29uZmlnKHRydWUpOworICBjbS0+R2V0U3RhdGUoKS0+U2V0TmluamFNdWx0aSh0cnVlKTsKK30KKwordm9pZCBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KQoreworICBlbnRyeS5OYW1lID0gY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpHZXRBY3R1YWxOYW1lKCk7CisgIGVudHJ5LkJyaWVmID0gIkdlbmVyYXRlcyBidWlsZC08Q29uZmlnPi5uaW5qYSBmaWxlcy4iOworfQorCitzdGQ6OnN0cmluZyBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkV4cGFuZENGR0ludERpcigKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKK3sKKyAgc3RkOjpzdHJpbmcgcmVzdWx0ID0gc3RyOworICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKHJlc3VsdCwgdGhpcy0+R2V0Q01ha2VDRkdJbnREaXIoKSwgY29uZmlnKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6Ok9wZW5CdWlsZEZpbGVTdHJlYW1zKCkKK3sKKyAgaWYgKCF0aGlzLT5PcGVuRmlsZVN0cmVhbSh0aGlzLT5Db21tb25GaWxlU3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6TklOSkFfQ09NTU9OX0ZJTEUpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKCF0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZy5lbXB0eSgpKSB7CisgICAgaWYgKCF0aGlzLT5PcGVuRmlsZVN0cmVhbSh0aGlzLT5EZWZhdWx0RmlsZVN0cmVhbSwgTklOSkFfQlVJTERfRklMRSkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgKnRoaXMtPkRlZmF1bHRGaWxlU3RyZWFtCisgICAgICA8PCAiIyBCdWlsZCB1c2luZyBydWxlcyBmb3IgJyIgPDwgdGhpcy0+RGVmYXVsdEZpbGVDb25maWcgPDwgIicuXG5cbiIKKyAgICAgIDw8ICJpbmNsdWRlICIgPDwgR2V0TmluamFJbXBsRmlsZW5hbWUodGhpcy0+RGVmYXVsdEZpbGVDb25maWcpIDw8ICJcblxuIjsKKyAgfQorCisgIC8vIFdyaXRlIGEgY29tbWVudCBhYm91dCB0aGlzIGZpbGUuCisgICp0aGlzLT5Db21tb25GaWxlU3RyZWFtCisgICAgPDwgIiMgVGhpcyBmaWxlIGNvbnRhaW5zIGJ1aWxkIHN0YXRlbWVudHMgY29tbW9uIHRvIGFsbCAiCisgICAgICAgImNvbmZpZ3VyYXRpb25zLlxuXG4iOworCisgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgICAgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKSkgeworICAgIC8vIE9wZW4gaW1wbCBmaWxlLgorICAgIGlmICghdGhpcy0+T3BlbkZpbGVTdHJlYW0odGhpcy0+SW1wbEZpbGVTdHJlYW1zW2NvbmZpZ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXROaW5qYUltcGxGaWxlbmFtZShjb25maWcpKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIGEgY29tbWVudCBhYm91dCB0aGlzIGZpbGUuCisgICAgKnRoaXMtPkltcGxGaWxlU3RyZWFtc1tjb25maWddCisgICAgICA8PCAiIyBUaGlzIGZpbGUgY29udGFpbnMgYnVpbGQgc3RhdGVtZW50cyBzcGVjaWZpYyB0byB0aGUgXCIiIDw8IGNvbmZpZworICAgICAgPDwgIlwiXG4jIGNvbmZpZ3VyYXRpb24uXG5cbiI7CisKKyAgICAvLyBPcGVuIGNvbmZpZyBmaWxlLgorICAgIGlmICghdGhpcy0+T3BlbkZpbGVTdHJlYW0odGhpcy0+Q29uZmlnRmlsZVN0cmVhbXNbY29uZmlnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE5pbmphQ29uZmlnRmlsZW5hbWUoY29uZmlnKSkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSBhIGNvbW1lbnQgYWJvdXQgdGhpcyBmaWxlLgorICAgICp0aGlzLT5Db25maWdGaWxlU3RyZWFtc1tjb25maWddCisgICAgICA8PCAiIyBUaGlzIGZpbGUgY29udGFpbnMgYWxpYXNlcyBzcGVjaWZpYyB0byB0aGUgXCIiIDw8IGNvbmZpZworICAgICAgPDwgIlwiXG4jIGNvbmZpZ3VyYXRpb24uXG5cbiIKKyAgICAgIDw8ICJpbmNsdWRlICIgPDwgR2V0TmluamFJbXBsRmlsZW5hbWUoY29uZmlnKSA8PCAiXG5cbiI7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkNsb3NlQnVpbGRGaWxlU3RyZWFtcygpCit7CisgIGlmICh0aGlzLT5Db21tb25GaWxlU3RyZWFtKSB7CisgICAgdGhpcy0+Q29tbW9uRmlsZVN0cmVhbS5yZXNldCgpOworICB9IGVsc2UgeworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDb21tb24gZmlsZSBzdHJlYW0gd2FzIG5vdCBvcGVuLiIpOworICB9CisKKyAgaWYgKHRoaXMtPkRlZmF1bHRGaWxlU3RyZWFtKSB7CisgICAgdGhpcy0+RGVmYXVsdEZpbGVTdHJlYW0ucmVzZXQoKTsKKyAgfSAvLyBObyBlcnJvciBpZiBpdCB3YXNuJ3Qgb3BlbgorCisgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+TWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKAorICAgICAgICAgY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKSkgeworICAgIGlmICh0aGlzLT5JbXBsRmlsZVN0cmVhbXNbY29uZmlnXSkgeworICAgICAgdGhpcy0+SW1wbEZpbGVTdHJlYW1zW2NvbmZpZ10ucmVzZXQoKTsKKyAgICB9IGVsc2UgeworICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCisgICAgICAgIGNtU3RyQ2F0KCJJbXBsIGZpbGUgc3RyZWFtIGZvciBcIiIsIGNvbmZpZywgIlwiIHdhcyBub3Qgb3Blbi4iKSk7CisgICAgfQorICAgIGlmICh0aGlzLT5Db25maWdGaWxlU3RyZWFtc1tjb25maWddKSB7CisgICAgICB0aGlzLT5Db25maWdGaWxlU3RyZWFtc1tjb25maWddLnJlc2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgICBjbVN0ckNhdCgiQ29uZmlnIGZpbGUgc3RyZWFtIGZvciBcIiIsIGNvbmZpZywgIlwiIHdhcyBub3Qgb3Blbi4iKSk7CisgICAgfQorICB9Cit9CisKK3ZvaWQgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpBcHBlbmROaW5qYUZpbGVBcmd1bWVudCgKKyAgR2VuZXJhdGVkTWFrZUNvbW1hbmQmIGNvbW1hbmQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0Cit7CisgIGlmICghY29uZmlnLmVtcHR5KCkpIHsKKyAgICBjb21tYW5kLkFkZCgiLWYiKTsKKyAgICBjb21tYW5kLkFkZChHZXROaW5qYUNvbmZpZ0ZpbGVuYW1lKGNvbmZpZykpOworICB9Cit9CisKK3N0ZDo6c3RyaW5nIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6R2V0TmluamFJbXBsRmlsZW5hbWUoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCit7CisgIHJldHVybiBjbVN0ckNhdCgiQ01ha2VGaWxlcy9pbXBsLSIsIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6TklOSkFfRklMRV9FWFRFTlNJT04pOworfQorCitzdGQ6OnN0cmluZyBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6OkdldE5pbmphQ29uZmlnRmlsZW5hbWUoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCit7CisgIHJldHVybiBjbVN0ckNhdCgiYnVpbGQtIiwgY29uZmlnLAorICAgICAgICAgICAgICAgICAgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpOSU5KQV9GSUxFX0VYVEVOU0lPTik7Cit9CisKK3ZvaWQgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpBZGRSZWJ1aWxkTWFuaWZlc3RPdXRwdXRzKAorICBjbU5pbmphRGVwcyYgb3V0cHV0cykgY29uc3QKK3sKKyAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5NYWtlZmlsZXMuZnJvbnQoKS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgICAgIGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZykpIHsKKyAgICBvdXRwdXRzLnB1c2hfYmFjayh0aGlzLT5OaW5qYU91dHB1dFBhdGgoR2V0TmluamFJbXBsRmlsZW5hbWUoY29uZmlnKSkpOworICAgIG91dHB1dHMucHVzaF9iYWNrKHRoaXMtPk5pbmphT3V0cHV0UGF0aChHZXROaW5qYUNvbmZpZ0ZpbGVuYW1lKGNvbmZpZykpKTsKKyAgfQorICBpZiAoIXRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnLmVtcHR5KCkpIHsKKyAgICBvdXRwdXRzLnB1c2hfYmFjayh0aGlzLT5OaW5qYU91dHB1dFBhdGgoTklOSkFfQlVJTERfRklMRSkpOworICB9Cit9CisKK3ZvaWQgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpHZXRRdEF1dG9HZW5Db25maWdzKAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvbmZpZ3MpIGNvbnN0Cit7CisgIGF1dG8gYWxsQ29uZmlncyA9CisgICAgdGhpcy0+TWFrZWZpbGVzWzBdLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CisgIGNvbmZpZ3MuaW5zZXJ0KGNvbmZpZ3MuZW5kKCksIGNtOjpjYmVnaW4oYWxsQ29uZmlncyksIGNtOjpjZW5kKGFsbENvbmZpZ3MpKTsKK30KKworYm9vbCBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3I6Okluc3BlY3RDb25maWdUeXBlVmFyaWFibGVzKCkKK3sKKyAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5NYXJrQ2xpQXNVc2VkKCJDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUiKTsKKyAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5NYXJrQ2xpQXNVc2VkKCJDTUFLRV9DUk9TU19DT05GSUdTIik7CisgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+TWFya0NsaUFzVXNlZCgiQ01BS0VfREVGQVVMVF9DT05GSUdTIik7CisgIHJldHVybiB0aGlzLT5SZWFkQ2FjaGVFbnRyaWVzRm9yQnVpbGQoKnRoaXMtPk1ha2VmaWxlcy5mcm9udCgpLT5HZXRTdGF0ZSgpKTsKK30KKworc3RkOjpzdHJpbmcgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpHZXREZWZhdWx0QnVpbGRDb25maWcoKSBjb25zdAoreworICByZXR1cm4gIiI7Cit9CisKK2Jvb2wgY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpSZWFkQ2FjaGVFbnRyaWVzRm9yQnVpbGQoCisgIGNvbnN0IGNtU3RhdGUmIHN0YXRlKQoreworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnc1ZlYzsKKyAgY21FeHBhbmRMaXN0KHN0YXRlLkdldFNhZmVDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMiKSwKKyAgICAgICAgICAgICAgIGNvbmZpZ3NWZWMpOworICBpZiAoY29uZmlnc1ZlYy5lbXB0eSgpKSB7CisgICAgY29uZmlnc1ZlYy5lbXBsYWNlX2JhY2soKTsKKyAgfQorICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gY29uZmlncyhjb25maWdzVmVjLmNiZWdpbigpLCBjb25maWdzVmVjLmNlbmQoKSk7CisKKyAgdGhpcy0+RGVmYXVsdEZpbGVDb25maWcgPQorICAgIHN0YXRlLkdldFNhZmVDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0RFRkFVTFRfQlVJTERfVFlQRSIpOworICBpZiAodGhpcy0+RGVmYXVsdEZpbGVDb25maWcuZW1wdHkoKSkgeworICAgIHRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnID0gY29uZmlnc1ZlYy5mcm9udCgpOworICB9CisgIGlmICghY29uZmlncy5jb3VudCh0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZykpIHsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOworICAgIG1zZyA8PCAiVGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGJ5ICIKKyAgICAgICAgPDwgIkNNQUtFX0RFRkFVTFRfQlVJTERfVFlQRSAoIiA8PCB0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZworICAgICAgICA8PCAiKSBpcyBub3QgcHJlc2VudCBpbiBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTIjsKKyAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLnN0cigpKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY3Jvc3NDb25maWdzVmVjOworICBjbUV4cGFuZExpc3Qoc3RhdGUuR2V0U2FmZUNhY2hlRW50cnlWYWx1ZSgiQ01BS0VfQ1JPU1NfQ09ORklHUyIpLAorICAgICAgICAgICAgICAgY3Jvc3NDb25maWdzVmVjKTsKKyAgYXV0byBjcm9zc0NvbmZpZ3MgPSBMaXN0U3Vic2V0V2l0aEFsbChjb25maWdzLCBjb25maWdzLCBjcm9zc0NvbmZpZ3NWZWMpOworICBpZiAoIWNyb3NzQ29uZmlncykgeworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7CisgICAgbXNnIDw8ICJDTUFLRV9DUk9TU19DT05GSUdTIGlzIG5vdCBhIHN1YnNldCBvZiAiCisgICAgICAgIDw8ICJDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTIjsKKyAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLnN0cigpKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgdGhpcy0+Q3Jvc3NDb25maWdzID0gKmNyb3NzQ29uZmlnczsKKworICBhdXRvIGRlZmF1bHRDb25maWdzU3RyaW5nID0KKyAgICBzdGF0ZS5HZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9ERUZBVUxUX0NPTkZJR1MiKTsKKyAgaWYgKGRlZmF1bHRDb25maWdzU3RyaW5nLmVtcHR5KCkpIHsKKyAgICBkZWZhdWx0Q29uZmlnc1N0cmluZyA9IHRoaXMtPkRlZmF1bHRGaWxlQ29uZmlnOworICB9CisgIGlmICghZGVmYXVsdENvbmZpZ3NTdHJpbmcuZW1wdHkoKSAmJgorICAgICAgZGVmYXVsdENvbmZpZ3NTdHJpbmcgIT0gdGhpcy0+RGVmYXVsdEZpbGVDb25maWcgJiYKKyAgICAgICh0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZy5lbXB0eSgpIHx8IHRoaXMtPkNyb3NzQ29uZmlncy5lbXB0eSgpKSkgeworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7CisgICAgbXNnIDw8ICJDTUFLRV9ERUZBVUxUX0NPTkZJR1MgY2Fubm90IGJlIHVzZWQgd2l0aG91dCAiCisgICAgICAgIDw8ICJDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUgb3IgQ01BS0VfQ1JPU1NfQ09ORklHUyI7CisgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5zdHIoKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlZmF1bHRDb25maWdzVmVjOworICBjbUV4cGFuZExpc3QoZGVmYXVsdENvbmZpZ3NTdHJpbmcsIGRlZmF1bHRDb25maWdzVmVjKTsKKyAgaWYgKCF0aGlzLT5EZWZhdWx0RmlsZUNvbmZpZy5lbXB0eSgpKSB7CisgICAgYXV0byBkZWZhdWx0Q29uZmlncyA9CisgICAgICBMaXN0U3Vic2V0V2l0aEFsbCh0aGlzLT5HZXRDcm9zc0NvbmZpZ3ModGhpcy0+RGVmYXVsdEZpbGVDb25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3Jvc3NDb25maWdzLCBkZWZhdWx0Q29uZmlnc1ZlYyk7CisgICAgaWYgKCFkZWZhdWx0Q29uZmlncykgeworICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKKyAgICAgIG1zZyA8PCAiQ01BS0VfREVGQVVMVF9DT05GSUdTIGlzIG5vdCBhIHN1YnNldCBvZiBDTUFLRV9DUk9TU19DT05GSUdTIjsKKyAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5zdHIoKSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHRoaXMtPkRlZmF1bHRDb25maWdzID0gKmRlZmF1bHRDb25maWdzOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK3N0ZDo6c3RyaW5nIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6T3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KAorICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAoreworICByZXR1cm4gY21TdHJDYXQoImNtYWtlX29iamVjdF9vcmRlcl9kZXBlbmRzX3RhcmdldF8iLCB0YXJnZXQtPkdldE5hbWUoKSwgJ18nLAorICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZykpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsTmluamFHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbE5pbmphR2VuZXJhdG9yLmgKaW5kZXggMjQ0ZTlmZC4uMTBmNWNmNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsTmluamFHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxOaW5qYUdlbmVyYXRvci5oCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9vcHRpb25hbD4KKwogI2luY2x1ZGUgImNtX2NvZGVjdnQuaHh4IgogCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCkBAIC0yMiw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5LmgiCiAjaW5jbHVkZSAiY21OaW5qYVR5cGVzLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogCiBjbGFzcyBjbUN1c3RvbUNvbW1hbmQ7CiBjbGFzcyBjbUdlbmVyYXRvclRhcmdldDsKQEAgLTI5LDYgKzMyLDcgQEAKIGNsYXNzIGNtTG9jYWxHZW5lcmF0b3I7CiBjbGFzcyBjbU1ha2VmaWxlOwogY2xhc3MgY21PdXRwdXRDb252ZXJ0ZXI7CitjbGFzcyBjbVN0YXRlOwogY2xhc3MgY21TdGF0ZURpcmVjdG9yeTsKIGNsYXNzIGNtYWtlOwogc3RydWN0IGNtRG9jdW1lbnRhdGlvbkVudHJ5OwpAQCAtNzMsMTAgKzc3LDEwIEBACiAgIHN0YXRpYyB2b2lkIFdyaXRlRGl2aWRlcihzdGQ6Om9zdHJlYW0mIG9zKTsKIAogICBzdGF0aWMgc3RkOjpzdHJpbmcgRW5jb2RlUnVsZU5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpOwotICBzdGF0aWMgc3RkOjpzdHJpbmcgRW5jb2RlTGl0ZXJhbChjb25zdCBzdGQ6OnN0cmluZyYgbGl0KTsKKyAgc3RkOjpzdHJpbmcgRW5jb2RlTGl0ZXJhbChjb25zdCBzdGQ6OnN0cmluZyYgbGl0KTsKICAgc3RkOjpzdHJpbmcgRW5jb2RlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCk7CiAKLSAgY21MaW5rTGluZUNvbXB1dGVyKiBDcmVhdGVMaW5rTGluZUNvbXB1dGVyKAorICBzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPiBDcmVhdGVMaW5rTGluZUNvbXB1dGVyKAogICAgIGNtT3V0cHV0Q29udmVydGVyKiBvdXRwdXRDb252ZXJ0ZXIsCiAgICAgY21TdGF0ZURpcmVjdG9yeSBjb25zdCYgc3RhdGVEaXIpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xMTEsMTEgKzExNSwxMiBAQAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21tYW5kLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVzY3JpcHRpb24sCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbW1lbnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwb29sLCBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgcmVzdGF0LAotICAgIGNvbnN0IGNtTmluamFEZXBzJiBvdXRwdXRzLAorICAgIGNvbnN0IGNtTmluamFEZXBzJiBvdXRwdXRzLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgIGNvbnN0IGNtTmluamFEZXBzJiBleHBsaWNpdERlcHMgPSBjbU5pbmphRGVwcygpLAogICAgIGNvbnN0IGNtTmluamFEZXBzJiBvcmRlck9ubHlEZXBzID0gY21OaW5qYURlcHMoKSk7CiAKLSAgdm9pZCBXcml0ZU1hY09TWENvbnRlbnRCdWlsZChzdGQ6OnN0cmluZyBpbnB1dCwgc3RkOjpzdHJpbmcgb3V0cHV0KTsKKyAgdm9pZCBXcml0ZU1hY09TWENvbnRlbnRCdWlsZChzdGQ6OnN0cmluZyBpbnB1dCwgc3RkOjpzdHJpbmcgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiAgIC8qKgogICAgKiBXcml0ZSBhIHJ1bGUgc3RhdGVtZW50IHRvIEBhIG9zLgpAQCAtMTUxLDEyICsxNTYsMTQgQEAKIHB1YmxpYzoKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcihjbWFrZSogY20pOwogCi0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKQorICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpCiAgIHsKLSAgICByZXR1cm4gbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbE5pbmphR2VuZXJhdG9yPigpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PigKKyAgICAgIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxOaW5qYUdlbmVyYXRvcj4oKSk7CiAgIH0KIAotICBjbUxvY2FsR2VuZXJhdG9yKiBDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBDcmVhdGVMb2NhbEdlbmVyYXRvcigKKyAgICBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CiAKICAgc3RkOjpzdHJpbmcgR2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlCiAgIHsKQEAgLTIwNCw3ICsyMTEsMjYgQEAKICAgfQogICBjb25zdCBjaGFyKiBHZXRDbGVhblRhcmdldE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiY2xlYW4iOyB9CiAKLSAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBHZXRCdWlsZEZpbGVTdHJlYW0oKSBjb25zdAorICBib29sIFN1cHBvcnRzQ3VzdG9tQ29tbWFuZERlcGZpbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgdmlydHVhbCBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIEdldEltcGxGaWxlU3RyZWFtKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKmNvbmZpZyovKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbS5nZXQoKTsKKyAgfQorCisgIHZpcnR1YWwgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBHZXRDb25maWdGaWxlU3RyZWFtKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiAvKmNvbmZpZyovKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbS5nZXQoKTsKKyAgfQorCisgIHZpcnR1YWwgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBHZXREZWZhdWx0RmlsZVN0cmVhbSgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gdGhpcy0+QnVpbGRGaWxlU3RyZWFtLmdldCgpOworICB9CisKKyAgdmlydHVhbCBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIEdldENvbW1vbkZpbGVTdHJlYW0oKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbS5nZXQoKTsKICAgfQpAQCAtMjMxLDEyICsyNTcsMTcgQEAKICAgTWFwVG9OaW5qYVBhdGhJbXBsIE1hcFRvTmluamFQYXRoKCkgeyByZXR1cm4geyB0aGlzIH07IH0KIAogICAvLyAtLSBBZGRpdGlvbmFsIGNsZWFuIGZpbGVzCi0gIHZvaWQgQWRkQWRkaXRpb25hbENsZWFuRmlsZShzdGQ6OnN0cmluZyBmaWxlTmFtZSk7CisgIHZvaWQgQWRkQWRkaXRpb25hbENsZWFuRmlsZShzdGQ6OnN0cmluZyBmaWxlTmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAgIGNvbnN0IGNoYXIqIEdldEFkZGl0aW9uYWxDbGVhblRhcmdldE5hbWUoKSBjb25zdAogICB7CiAgICAgcmV0dXJuICJDTWFrZUZpbGVzL2NsZWFuLmFkZGl0aW9uYWwiOwogICB9CiAKKyAgc3RhdGljIGNvbnN0IGNoYXIqIEdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldE5hbWUoKQorICB7CisgICAgcmV0dXJuICJDTWFrZUZpbGVzL2NtYWtlX2J5cHJvZHVjdHNfZm9yX2NsZWFuX3RhcmdldCI7CisgIH0KKwogICB2b2lkIEFkZENYWENvbXBpbGVDb21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21tYW5kTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlRmlsZSk7CiAKQEAgLTI2MCw5ICsyOTEsOSBAQAogCiAgIC8vLyBDYWxsZWQgd2hlbiB3ZSBoYXZlIHNlZW4gdGhlIGdpdmVuIGN1c3RvbSBjb21tYW5kLiAgUmV0dXJucyB0cnVlCiAgIC8vLyBpZiB3ZSBoYXMgc2VlbiBpdCBiZWZvcmUuCi0gIGJvb2wgU2VlbkN1c3RvbUNvbW1hbmQoY21DdXN0b21Db21tYW5kIGNvbnN0KiBjYykKKyAgYm9vbCBTZWVuQ3VzdG9tQ29tbWFuZChjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGNjLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogICB7Ci0gICAgcmV0dXJuICF0aGlzLT5DdXN0b21Db21tYW5kcy5pbnNlcnQoY2MpLnNlY29uZDsKKyAgICByZXR1cm4gIXRoaXMtPkNvbmZpZ3NbY29uZmlnXS5DdXN0b21Db21tYW5kcy5pbnNlcnQoY2MpLnNlY29uZDsKICAgfQogCiAgIC8vLyBDYWxsZWQgd2hlbiB3ZSBoYXZlIHNlZW4gdGhlIGdpdmVuIGN1c3RvbSBjb21tYW5kIG91dHB1dC4KQEAgLTI4NCwyNSArMzE1LDQyIEBACiAgICAgQVNELmluc2VydChkZXBzLmJlZ2luKCksIGRlcHMuZW5kKCkpOwogICB9CiAKLSAgdm9pZCBBcHBlbmRUYXJnZXRPdXRwdXRzKAotICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsIGNtTmluamFEZXBzJiBvdXRwdXRzLAotICAgIGNtTmluamFUYXJnZXREZXBlbmRzIGRlcGVuZHMgPSBEZXBlbmRPblRhcmdldEFydGlmYWN0KTsKLSAgdm9pZCBBcHBlbmRUYXJnZXREZXBlbmRzKAotICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsIGNtTmluamFEZXBzJiBvdXRwdXRzLAotICAgIGNtTmluamFUYXJnZXREZXBlbmRzIGRlcGVuZHMgPSBEZXBlbmRPblRhcmdldEFydGlmYWN0KTsKLSAgdm9pZCBBcHBlbmRUYXJnZXREZXBlbmRzQ2xvc3VyZShjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFEZXBzJiBvdXRwdXRzKTsKLSAgdm9pZCBBcHBlbmRUYXJnZXREZXBlbmRzQ2xvc3VyZShjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFPdXRzJiBvdXRwdXRzLCBib29sIG9taXRfc2VsZik7CisgIHZpcnR1YWwgc3RkOjpzdHJpbmcgT3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KAorICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiYgR2V0TG9jYWxHZW5lcmF0b3JzKCkgY29uc3QKKyAgdm9pZCBBcHBlbmRUYXJnZXRPdXRwdXRzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphRGVwcyYgb3V0cHV0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFUYXJnZXREZXBlbmRzIGRlcGVuZHMpOworICB2b2lkIEFwcGVuZFRhcmdldERlcGVuZHMoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFEZXBzJiBvdXRwdXRzLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphVGFyZ2V0RGVwZW5kcyBkZXBlbmRzKTsKKyAgdm9pZCBBcHBlbmRUYXJnZXREZXBlbmRzQ2xvc3VyZShjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFEZXBzJiBvdXRwdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICB2b2lkIEFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21OaW5qYU91dHMmIG91dHB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgYm9vbCBvbWl0X3NlbGYpOworCisgIHZvaWQgQXBwZW5kRGlyZWN0b3J5Rm9yQ29uZmlnKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWZmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkaXIpIG92ZXJyaWRlOworCisgIHZpcnR1YWwgdm9pZCBBcHBlbmROaW5qYUZpbGVBcmd1bWVudChHZW5lcmF0ZWRNYWtlQ29tbWFuZCYgLypjb21tYW5kKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgLypjb25maWcqLykgY29uc3QKICAgewotICAgIHJldHVybiBMb2NhbEdlbmVyYXRvcnM7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgQWRkUmVidWlsZE1hbmlmZXN0T3V0cHV0cyhjbU5pbmphRGVwcyYgb3V0cHV0cykgY29uc3QKKyAgeworICAgIG91dHB1dHMucHVzaF9iYWNrKHRoaXMtPk5pbmphT3V0cHV0UGF0aChOSU5KQV9CVUlMRF9GSUxFKSk7CiAgIH0KIAogICBpbnQgR2V0UnVsZUNtZExlbmd0aChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgeyByZXR1cm4gUnVsZUNtZExlbmd0aFtuYW1lXTsgfQogCi0gIHZvaWQgQWRkVGFyZ2V0QWxpYXMoY29uc3Qgc3RkOjpzdHJpbmcmIGFsaWFzLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KTsKKyAgdm9pZCBBZGRUYXJnZXRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgYWxpYXMsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgdm9pZCBDb21wdXRlVGFyZ2V0T2JqZWN0RGlyZWN0b3J5KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTMxNiw2ICszNjQsMTIgQEAKICAgICByZXR1cm4gIjEuOSI7CiAgIH0KICAgc3RhdGljIHN0ZDo6c3RyaW5nIFJlcXVpcmVkTmluamFWZXJzaW9uRm9yRHluZGVwcygpIHsgcmV0dXJuICIxLjEwIjsgfQorICBzdGF0aWMgc3RkOjpzdHJpbmcgUmVxdWlyZWROaW5qYVZlcnNpb25Gb3JSZXN0YXRUb29sKCkgeyByZXR1cm4gIjEuMTAiOyB9CisgIHN0YXRpYyBzdGQ6OnN0cmluZyBSZXF1aXJlZE5pbmphVmVyc2lvbkZvclVuY29uZGl0aW9uYWxSZWNvbXBhY3RUb29sKCkKKyAgeworICAgIHJldHVybiAiMS4xMCI7CisgIH0KKyAgc3RhdGljIHN0ZDo6c3RyaW5nIFJlcXVpcmVkTmluamFWZXJzaW9uRm9yQ2xlYW5EZWFkVG9vbCgpIHsgcmV0dXJuICIxLjEwIjsgfQogICBib29sIFN1cHBvcnRzQ29uc29sZVBvb2woKSBjb25zdDsKICAgYm9vbCBTdXBwb3J0c0ltcGxpY2l0T3V0cygpIGNvbnN0OwogICBib29sIFN1cHBvcnRzTWFuaWZlc3RSZXN0YXQoKSBjb25zdDsKQEAgLTMzNSwxMSArMzg5LDU3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgbGlua2VkX3RhcmdldF9kaXJzLAogICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYXJnX2xhbmcpOwogCisgIHZpcnR1YWwgc3RkOjpzdHJpbmcgQnVpbGRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgYWxpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgLypjb25maWcqLykgY29uc3QKKyAgeworICAgIHJldHVybiBhbGlhczsKKyAgfQorCisgIHZpcnR1YWwgc3RkOjpzdHJpbmcgQ29uZmlnRGlyZWN0b3J5KGNvbnN0IHN0ZDo6c3RyaW5nJiAvKmNvbmZpZyovKSBjb25zdAorICB7CisgICAgcmV0dXJuICIiOworICB9CisKKyAgY21OaW5qYURlcHMmIEdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldCgpCisgIHsKKyAgICByZXR1cm4gdGhpcy0+Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0OworICB9CisKKyAgY21OaW5qYURlcHMmIEdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQorICB7CisgICAgcmV0dXJuIHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5CeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQ7CisgIH0KKworICBib29sIEVuYWJsZUNyb3NzQ29uZmlnQnVpbGQoKSBjb25zdDsKKworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gR2V0Q3Jvc3NDb25maWdzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworCisgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgR2V0RGVmYXVsdENvbmZpZ3MoKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPkRlZmF1bHRDb25maWdzOworICB9CisKIHByb3RlY3RlZDoKICAgdm9pZCBHZW5lcmF0ZSgpIG92ZXJyaWRlOwogCiAgIGJvb2wgQ2hlY2tBTExPV19EVVBMSUNBVEVfQ1VTVE9NX1RBUkdFVFMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgdmlydHVhbCBib29sIE9wZW5CdWlsZEZpbGVTdHJlYW1zKCk7CisgIHZpcnR1YWwgdm9pZCBDbG9zZUJ1aWxkRmlsZVN0cmVhbXMoKTsKKworICBib29sIE9wZW5GaWxlU3RyZWFtKHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+JiBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOworCisgIHN0YXRpYyBjbTo6b3B0aW9uYWw8c3RkOjpzZXQ8c3RkOjpzdHJpbmc+PiBMaXN0U3Vic2V0V2l0aEFsbCgKKyAgICBjb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGFsbCwgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBkZWZhdWx0cywKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGl0ZW1zKTsKKworICB2aXJ0dWFsIGJvb2wgSW5zcGVjdENvbmZpZ1R5cGVWYXJpYWJsZXMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IENyb3NzQ29uZmlnczsKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IERlZmF1bHRDb25maWdzOworICBzdGQ6OnN0cmluZyBEZWZhdWx0RmlsZUNvbmZpZzsKKwogcHJpdmF0ZToKICAgc3RkOjpzdHJpbmcgR2V0RWRpdENhY2hlQ29tbWFuZCgpIGNvbnN0IG92ZXJyaWRlOwogICBib29sIEZpbmRNYWtlUHJvZ3JhbShjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CkBAIC0zNDgsMTMgKzQ0OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mKSBjb25zdCBvdmVycmlkZTsKICAgYm9vbCBDaGVja0ZvcnRyYW4oY21NYWtlZmlsZSogbWYpIGNvbnN0OwogCi0gIGJvb2wgT3BlbkJ1aWxkRmlsZVN0cmVhbSgpOwotICB2b2lkIENsb3NlQnVpbGRGaWxlU3RyZWFtKCk7Ci0KICAgdm9pZCBDbG9zZUNvbXBpbGVDb21tYW5kc1N0cmVhbSgpOwogCiAgIGJvb2wgT3BlblJ1bGVzRmlsZVN0cmVhbSgpOwogICB2b2lkIENsb3NlUnVsZXNGaWxlU3RyZWFtKCk7CisgIHZvaWQgQ2xlYW5NZXRhRGF0YSgpOwogCiAgIC8vLyBXcml0ZSB0aGUgY29tbW9uIGRpc2NsYWltZXIgdGV4dCBhdCB0aGUgdG9wIG9mIGVhY2ggYnVpbGQgZmlsZS4KICAgdm9pZCBXcml0ZURpc2NsYWltZXIoc3RkOjpvc3RyZWFtJiBvcyk7CkBAIC0zOTUsOSArNDkzLDYgQEAKIAogICBib29sIFVzaW5nR0NDT25XaW5kb3dzID0gZmFsc2U7CiAKLSAgLy8vIFRoZSBzZXQgb2YgY3VzdG9tIGNvbW1hbmRzIHdlIGhhdmUgc2Vlbi4KLSAgc3RkOjpzZXQ8Y21DdXN0b21Db21tYW5kIGNvbnN0Kj4gQ3VzdG9tQ29tbWFuZHM7Ci0KICAgLy8vIFRoZSBzZXQgb2YgY3VzdG9tIGNvbW1hbmQgb3V0cHV0cyB3ZSBoYXZlIHNlZW4uCiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBDdXN0b21Db21tYW5kT3V0cHV0czsKIApAQCAtNDE2LDEwICs1MTEsMTQgQEAKICAgLy8vIFRoZSBtYXBwaW5nIGZyb20gc291cmNlIGZpbGUgdG8gYXNzdW1lZCBkZXBlbmRlbmNpZXMuCiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4+IEFzc3VtZWRTb3VyY2VEZXBlbmRlbmNpZXM7CiAKLSAgdXNpbmcgVGFyZ2V0QWxpYXNNYXAgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21HZW5lcmF0b3JUYXJnZXQqPjsKKyAgc3RydWN0IFRhcmdldEFsaWFzCisgIHsKKyAgICBjbUdlbmVyYXRvclRhcmdldCogR2VuZXJhdG9yVGFyZ2V0OworICAgIHN0ZDo6c3RyaW5nIENvbmZpZzsKKyAgfTsKKyAgdXNpbmcgVGFyZ2V0QWxpYXNNYXAgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVGFyZ2V0QWxpYXM+OwogICBUYXJnZXRBbGlhc01hcCBUYXJnZXRBbGlhc2VzOwotCi0gIHN0ZDo6bWFwPGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiwgY21OaW5qYU91dHM+IFRhcmdldERlcGVuZHNDbG9zdXJlczsKKyAgVGFyZ2V0QWxpYXNNYXAgRGVmYXVsdFRhcmdldEFsaWFzZXM7CiAKICAgLy8vIHRoZSBsb2NhbCBjYWNoZSBmb3IgY2FsbHMgdG8gQ29udmVydFRvTmluamFQYXRoCiAgIG11dGFibGUgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gQ29udmVydFRvTmluamFQYXRoQ2FjaGU7CkBAIC00MzEsNiArNTMwLDkgQEAKICAgYm9vbCBOaW5qYVN1cHBvcnRzTWFuaWZlc3RSZXN0YXQgPSBmYWxzZTsKICAgYm9vbCBOaW5qYVN1cHBvcnRzTXVsdGlsaW5lRGVwZmlsZSA9IGZhbHNlOwogICBib29sIE5pbmphU3VwcG9ydHNEeW5kZXBzID0gZmFsc2U7CisgIGJvb2wgTmluamFTdXBwb3J0c1Jlc3RhdFRvb2wgPSBmYWxzZTsKKyAgYm9vbCBOaW5qYVN1cHBvcnRzVW5jb25kaXRpb25hbFJlY29tcGFjdFRvb2wgPSBmYWxzZTsKKyAgYm9vbCBOaW5qYVN1cHBvcnRzQ2xlYW5EZWFkVG9vbCA9IGZhbHNlOwogCiBwcml2YXRlOgogICB2b2lkIEluaXRPdXRwdXRQYXRoUHJlZml4KCk7CkBAIC00MzgsNyArNTQwLDEyOCBAQAogICBzdGQ6OnN0cmluZyBPdXRwdXRQYXRoUHJlZml4OwogICBzdGQ6OnN0cmluZyBUYXJnZXRBbGw7CiAgIHN0ZDo6c3RyaW5nIENNYWtlQ2FjaGVGaWxlOwotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gQWRkaXRpb25hbENsZWFuRmlsZXM7CisKKyAgc3RydWN0IEJ5Q29uZmlnCisgIHsKKyAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gQWRkaXRpb25hbENsZWFuRmlsZXM7CisKKyAgICAvLy8gVGhlIHNldCBvZiBjdXN0b20gY29tbWFuZHMgd2UgaGF2ZSBzZWVuLgorICAgIHN0ZDo6c2V0PGNtQ3VzdG9tQ29tbWFuZCBjb25zdCo+IEN1c3RvbUNvbW1hbmRzOworCisgICAgc3RkOjptYXA8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqLCBjbU5pbmphT3V0cz4gVGFyZ2V0RGVwZW5kc0Nsb3N1cmVzOworCisgICAgVGFyZ2V0QWxpYXNNYXAgVGFyZ2V0QWxpYXNlczsKKworICAgIGNtTmluamFEZXBzIEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldDsKKyAgfTsKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIEJ5Q29uZmlnPiBDb25maWdzOworCisgIGNtTmluamFEZXBzIEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldDsKK307CisKK2NsYXNzIGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvciA6IHB1YmxpYyBjbUdsb2JhbE5pbmphR2VuZXJhdG9yCit7CitwdWJsaWM6CisgIC8vLyBUaGUgZGVmYXVsdCBuYW1lIG9mIE5pbmphJ3MgY29tbW9uIGZpbGUuIFR5cGljYWxseTogY29tbW9uLm5pbmphLgorICBzdGF0aWMgY29uc3QgY2hhciogTklOSkFfQ09NTU9OX0ZJTEU7CisgIC8vLyBUaGUgZGVmYXVsdCBmaWxlIGV4dGVuc2lvbiB0byB1c2UgZm9yIHBlci1jb25maWcgTmluamEgZmlsZXMuCisgIHN0YXRpYyBjb25zdCBjaGFyKiBOSU5KQV9GSUxFX0VYVEVOU0lPTjsKKworICBjbUdsb2JhbE5pbmphTXVsdGlHZW5lcmF0b3IoY21ha2UqIGNtKTsKKyAgYm9vbCBJc011bHRpQ29uZmlnKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpCisgIHsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4oCisgICAgICBuZXcgY21HbG9iYWxHZW5lcmF0b3JTaW1wbGVGYWN0b3J5PGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcj4oKSk7CisgIH0KKworICBzdGF0aWMgdm9pZCBHZXREb2N1bWVudGF0aW9uKGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSk7CisKKyAgc3RkOjpzdHJpbmcgR2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgIHsKKyAgICByZXR1cm4gY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpHZXRBY3R1YWxOYW1lKCk7CisgIH0KKworICBzdGF0aWMgc3RkOjpzdHJpbmcgR2V0QWN0dWFsTmFtZSgpIHsgcmV0dXJuICJOaW5qYSBNdWx0aS1Db25maWciOyB9CisKKyAgc3RkOjpzdHJpbmcgQnVpbGRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgYWxpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIGlmIChjb25maWcuZW1wdHkoKSkgeworICAgICAgcmV0dXJuIGFsaWFzOworICAgIH0KKyAgICByZXR1cm4gY21TdHJDYXQoYWxpYXMsICI6IiwgY29uZmlnKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIENvbmZpZ0RpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdCBvdmVycmlkZQorICB7CisgICAgaWYgKCFjb25maWcuZW1wdHkoKSkgeworICAgICAgcmV0dXJuIGNtU3RyQ2F0KCcvJywgY29uZmlnKTsKKyAgICB9CisgICAgcmV0dXJuICIiOworICB9CisKKyAgY29uc3QgY2hhciogR2V0Q01ha2VDRkdJbnREaXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiJHtDT05GSUdVUkFUSU9OfSI7IH0KKworICBzdGQ6OnN0cmluZyBFeHBhbmRDRkdJbnREaXIoY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0IG92ZXJyaWRlOworCisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSogR2V0SW1wbEZpbGVTdHJlYW0oCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIHJldHVybiB0aGlzLT5JbXBsRmlsZVN0cmVhbXMuYXQoY29uZmlnKS5nZXQoKTsKKyAgfQorCisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSogR2V0Q29uZmlnRmlsZVN0cmVhbSgKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdCBvdmVycmlkZQorICB7CisgICAgcmV0dXJuIHRoaXMtPkNvbmZpZ0ZpbGVTdHJlYW1zLmF0KGNvbmZpZykuZ2V0KCk7CisgIH0KKworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIEdldERlZmF1bHRGaWxlU3RyZWFtKCkgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIHJldHVybiB0aGlzLT5EZWZhdWx0RmlsZVN0cmVhbS5nZXQoKTsKKyAgfQorCisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSogR2V0Q29tbW9uRmlsZVN0cmVhbSgpIGNvbnN0IG92ZXJyaWRlCisgIHsKKyAgICByZXR1cm4gdGhpcy0+Q29tbW9uRmlsZVN0cmVhbS5nZXQoKTsKKyAgfQorCisgIHZvaWQgQXBwZW5kTmluamFGaWxlQXJndW1lbnQoR2VuZXJhdGVkTWFrZUNvbW1hbmQmIGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldE5pbmphSW1wbEZpbGVuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICBzdGF0aWMgc3RkOjpzdHJpbmcgR2V0TmluamFDb25maWdGaWxlbmFtZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKworICB2b2lkIEFkZFJlYnVpbGRNYW5pZmVzdE91dHB1dHMoY21OaW5qYURlcHMmIG91dHB1dHMpIGNvbnN0IG92ZXJyaWRlOworCisgIHZvaWQgR2V0UXRBdXRvR2VuQ29uZmlncyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvbmZpZ3MpIGNvbnN0IG92ZXJyaWRlOworCisgIGJvb2wgSW5zcGVjdENvbmZpZ1R5cGVWYXJpYWJsZXMoKSBvdmVycmlkZTsKKworICBzdGQ6OnN0cmluZyBHZXREZWZhdWx0QnVpbGRDb25maWcoKSBjb25zdCBvdmVycmlkZTsKKworICBib29sIFJlYWRDYWNoZUVudHJpZXNGb3JCdWlsZChjb25zdCBjbVN0YXRlJiBzdGF0ZSkgb3ZlcnJpZGU7CisKKyAgYm9vbCBTdXBwb3J0c0RlZmF1bHRCdWlsZFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgIGJvb2wgU3VwcG9ydHNDcm9zc0NvbmZpZ3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgIGJvb2wgU3VwcG9ydHNEZWZhdWx0Q29uZmlncygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICBzdGQ6OnN0cmluZyBPcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQoCisgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgYm9vbCBPcGVuQnVpbGRGaWxlU3RyZWFtcygpIG92ZXJyaWRlOworICB2b2lkIENsb3NlQnVpbGRGaWxlU3RyZWFtcygpIG92ZXJyaWRlOworCitwcml2YXRlOgorICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4+CisgICAgSW1wbEZpbGVTdHJlYW1zOworICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4+CisgICAgQ29uZmlnRmlsZVN0cmVhbXM7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IENvbW1vbkZpbGVTdHJlYW07CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IERlZmF1bHRGaWxlU3RyZWFtOwogfTsKIAogI2VuZGlmIC8vICEgY21HbG9iYWxOaW5qYUdlbmVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CmluZGV4IDRjMmQ2OWYuLmViYzkwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CkBAIC04LDggKzgsOSBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L21lbW9yeT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKQEAgLTE5LDYgKzIwLDcgQEAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlRGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC00MCw3ICs0Miw2IEBACiAjZWxzZQogICB0aGlzLT5Vc2VMaW5rU2NyaXB0ID0gdHJ1ZTsKICNlbmRpZgotICB0aGlzLT5Db21tYW5kRGF0YWJhc2UgPSBudWxscHRyOwogCiAgIHRoaXMtPkluY2x1ZGVEaXJlY3RpdmUgPSAiaW5jbHVkZSI7CiAgIHRoaXMtPkRlZmluZVdpbmRvd3NOVUxMID0gZmFsc2U7CkBAIC00OCw2ICs0OSw4IEBACiAgIHRoaXMtPlVuaXhDRCA9IHRydWU7CiB9CiAKK2NtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6fmNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMygpID0gZGVmYXVsdDsKKwogdm9pZCBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkVuYWJsZUxhbmd1YWdlKAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGxhbmd1YWdlcywgY21NYWtlZmlsZSogbWYsIGJvb2wgb3B0aW9uYWwpCiB7CkBAIC02MSwxMCArNjQsMTEgQEAKIH0KIAogLy8hIENyZWF0ZSBhIGxvY2FsIGdlbmVyYXRvciBhcHByb3ByaWF0ZSB0byB0aGlzIEdsb2JhbCBHZW5lcmF0b3IKLWNtTG9jYWxHZW5lcmF0b3IqIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q3JlYXRlTG9jYWxHZW5lcmF0b3IoCi0gIGNtTWFrZWZpbGUqIG1mKQorc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+CitjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKQogewotICByZXR1cm4gbmV3IGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKHRoaXMsIG1mKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KHRoaXMsIG1mKSk7CiB9CiAKIHZvaWQgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpHZXREb2N1bWVudGF0aW9uKApAQCAtMTE0LDYgKzExOCwxMiBAQAogICBndC0+T2JqZWN0RGlyZWN0b3J5ID0gZGlyOwogfQogCitib29sIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q2FuRXNjYXBlT2N0b3Rob3JwZSgpIGNvbnN0Cit7CisgIC8vIE1ha2UgdG9vbHMgdGhhdCB1c2UgVU5JWC1zdHlsZSAnLycgcGF0aHMgYWxzbyBzdXBwb3J0ICdcJyBlc2NhcGluZy4KKyAgcmV0dXJuIHRoaXMtPkZvcmNlVW5peFBhdGhzOworfQorCiB2b2lkIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q29uZmlndXJlKCkKIHsKICAgLy8gSW5pdGlhbGl6ZSBDTUFLRV9FRElUX0NPTU1BTkQgY2FjaGUgZW50cnkuCkBAIC0xMzMsNyArMTQzLDcgQEAKICAgICB0b3RhbCArPSBwbWkuc2Vjb25kLk51bWJlck9mQWN0aW9uczsKICAgfQogCi0gIC8vIHdyaXRlIGVhY2ggdGFyZ2V0J3MgcHJvZ3Jlc3MubWFrZSB0aGlzIGxvb3AgaXMgZG9uZSB0d2ljZS4gQmFzY2lhbGx5IHRoZQorICAvLyB3cml0ZSBlYWNoIHRhcmdldCdzIHByb2dyZXNzLm1ha2UgdGhpcyBsb29wIGlzIGRvbmUgdHdpY2UuIEJhc2ljYWxseSB0aGUKICAgLy8gR2VuZXJhdGUgcGFzcyBjb3VudHMgYWxsIHRoZSBhY3Rpb25zLCB0aGUgZmlyc3QgbG9vcCBiZWxvdyBkZXRlcm1pbmVzCiAgIC8vIGhvdyBtYW55IGFjdGlvbnMgaGF2ZSBwcm9ncmVzcyB1cGRhdGVzIGZvciBlYWNoIHRhcmdldCBhbmQgd3JpdGVzIHRvCiAgIC8vIGNvcnJyZWN0IHZhcmlhYmxlIHZhbHVlcyBmb3IgZXZlcnl0aGluZyBleGNlcHQgdGhlIGFsbCB0YXJnZXRzLiBUaGUKQEAgLTE0NCwyMSArMTU0LDIwIEBACiAgIGZvciAoYXV0byYgcG1pIDogdGhpcy0+UHJvZ3Jlc3NNYXApIHsKICAgICBwbWkuc2Vjb25kLldyaXRlUHJvZ3Jlc3NWYXJpYWJsZXModG90YWwsIGN1cnJlbnQpOwogICB9Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsZyA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgewogICAgIHN0ZDo6c3RyaW5nIG1hcmtGaWxlTmFtZSA9CiAgICAgICBjbVN0ckNhdChsZy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiL0NNYWtlRmlsZXMvcHJvZ3Jlc3MubWFya3MiKTsKICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gbWFya0ZpbGUobWFya0ZpbGVOYW1lKTsKLSAgICBtYXJrRmlsZSA8PCB0aGlzLT5Db3VudFByb2dyZXNzTWFya3NJbkFsbChsZykgPDwgIlxuIjsKKyAgICBtYXJrRmlsZSA8PCB0aGlzLT5Db3VudFByb2dyZXNzTWFya3NJbkFsbCgqbGcpIDw8ICJcbiI7CiAgIH0KIAogICAvLyB3cml0ZSB0aGUgbWFpbiBtYWtlZmlsZQogICB0aGlzLT5Xcml0ZU1haW5NYWtlZmlsZTIoKTsKICAgdGhpcy0+V3JpdGVNYWluQ01ha2VmaWxlKCk7CiAKLSAgaWYgKHRoaXMtPkNvbW1hbmREYXRhYmFzZSAhPSBudWxscHRyKSB7Ci0gICAgKnRoaXMtPkNvbW1hbmREYXRhYmFzZSA8PCBzdGQ6OmVuZGwgPDwgIl0iOwotICAgIGRlbGV0ZSB0aGlzLT5Db21tYW5kRGF0YWJhc2U7Ci0gICAgdGhpcy0+Q29tbWFuZERhdGFiYXNlID0gbnVsbHB0cjsKKyAgaWYgKHRoaXMtPkNvbW1hbmREYXRhYmFzZSkgeworICAgICp0aGlzLT5Db21tYW5kRGF0YWJhc2UgPDwgIlxuXSI7CisgICAgdGhpcy0+Q29tbWFuZERhdGFiYXNlLnJlc2V0KCk7CiAgIH0KIH0KIApAQCAtMTY2LDI2ICsxNzUsMjYgQEAKICAgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZUZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB3b3JraW5nRGlyZWN0b3J5LAogICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcGlsZUNvbW1hbmQpCiB7Ci0gIGlmICh0aGlzLT5Db21tYW5kRGF0YWJhc2UgPT0gbnVsbHB0cikgeworICBpZiAoIXRoaXMtPkNvbW1hbmREYXRhYmFzZSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmREYXRhYmFzZU5hbWUgPQogICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCkgKwogICAgICAgIi9jb21waWxlX2NvbW1hbmRzLmpzb24iOwotICAgIHRoaXMtPkNvbW1hbmREYXRhYmFzZSA9IG5ldyBjbUdlbmVyYXRlZEZpbGVTdHJlYW0oY29tbWFuZERhdGFiYXNlTmFtZSk7Ci0gICAgKnRoaXMtPkNvbW1hbmREYXRhYmFzZSA8PCAiWyIgPDwgc3RkOjplbmRsOworICAgIHRoaXMtPkNvbW1hbmREYXRhYmFzZSA9CisgICAgICBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPihjb21tYW5kRGF0YWJhc2VOYW1lKTsKKyAgICAqdGhpcy0+Q29tbWFuZERhdGFiYXNlIDw8ICJbXG4iOwogICB9IGVsc2UgewotICAgICp0aGlzLT5Db21tYW5kRGF0YWJhc2UgPDwgIiwiIDw8IHN0ZDo6ZW5kbDsKKyAgICAqdGhpcy0+Q29tbWFuZERhdGFiYXNlIDw8ICIsXG4iOwogICB9Ci0gICp0aGlzLT5Db21tYW5kRGF0YWJhc2UgPDwgInsiIDw8IHN0ZDo6ZW5kbAorICAqdGhpcy0+Q29tbWFuZERhdGFiYXNlIDw8ICJ7XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgUiIoICAiZGlyZWN0b3J5IjogIikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgY21HbG9iYWxHZW5lcmF0b3I6OkVzY2FwZUpTT04od29ya2luZ0RpcmVjdG9yeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCIsIiA8PCBzdGQ6OmVuZGwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCIsXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgUiIoICAiY29tbWFuZCI6ICIpIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNtR2xvYmFsR2VuZXJhdG9yOjpFc2NhcGVKU09OKGNvbXBpbGVDb21tYW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJcIiwiIDw8IHN0ZDo6ZW5kbAorICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJcIixcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBSIiggICJmaWxlIjogIikiCi0gICAgICAgICAgICAgICAgICAgICAgICAgPDwgY21HbG9iYWxHZW5lcmF0b3I6OkVzY2FwZUpTT04oc291cmNlRmlsZSkgPDwgIlwiIgotICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJ9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjbUdsb2JhbEdlbmVyYXRvcjo6RXNjYXBlSlNPTihzb3VyY2VGaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJcIlxufSI7CiB9CiAKIHZvaWQgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpXcml0ZU1haW5NYWtlZmlsZTIoKQpAQCAtMjAzLDExICsyMTIsMTEgQEAKICAgfQogCiAgIC8vIGdldCBhIGxvY2FsIGdlbmVyYXRvciBmb3Igc29tZSB1c2VmdWwgbWV0aG9kcwotICBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogbGcgPQotICAgIHN0YXRpY19jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4odGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdKTsKKyAgYXV0byYgbGcgPSBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzPigKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbMF0pOwogCiAgIC8vIFdyaXRlIHRoZSBkbyBub3QgZWRpdCBoZWFkZXIuCi0gIGxnLT5Xcml0ZURpc2NsYWltZXIobWFrZWZpbGVTdHJlYW0pOworICBsZy5Xcml0ZURpc2NsYWltZXIobWFrZWZpbGVTdHJlYW0pOwogCiAgIC8vIFdyaXRlIHRoZSBtYWluIGVudHJ5IHBvaW50IHRhcmdldC4gIFRoaXMgbXVzdCBiZSB0aGUgVkVSWSBmaXJzdAogICAvLyB0YXJnZXQgc28gdGhhdCBtYWtlIHdpdGggbm8gYXJndW1lbnRzIHdpbGwgcnVuIGl0LgpAQCAtMjE3LDEwICsyMjYsMTAgQEAKICAgZGVwZW5kcy5lbXBsYWNlX2JhY2soImFsbCIpOwogCiAgIC8vIFdyaXRlIHRoZSBydWxlLgotICBsZy0+V3JpdGVNYWtlUnVsZShtYWtlZmlsZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgIkRlZmF1bHQgdGFyZ2V0IGV4ZWN1dGVkIHdoZW4gbm8gYXJndW1lbnRzIGFyZSAiCi0gICAgICAgICAgICAgICAgICAgICJnaXZlbiB0byBtYWtlLiIsCi0gICAgICAgICAgICAgICAgICAgICJkZWZhdWx0X3RhcmdldCIsIGRlcGVuZHMsIG5vX2NvbW1hbmRzLCB0cnVlKTsKKyAgbGcuV3JpdGVNYWtlUnVsZShtYWtlZmlsZVN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAiRGVmYXVsdCB0YXJnZXQgZXhlY3V0ZWQgd2hlbiBubyBhcmd1bWVudHMgYXJlICIKKyAgICAgICAgICAgICAgICAgICAiZ2l2ZW4gdG8gbWFrZS4iLAorICAgICAgICAgICAgICAgICAgICJkZWZhdWx0X3RhcmdldCIsIGRlcGVuZHMsIG5vX2NvbW1hbmRzLCB0cnVlKTsKIAogICBkZXBlbmRzLmNsZWFyKCk7CiAKQEAgLTIzMSw3ICsyNDAsNyBAQAogICB9CiAKICAgLy8gV3JpdGUgb3V0IHRoZSAic3BlY2lhbCIgc3R1ZmYKLSAgbGctPldyaXRlU3BlY2lhbFRhcmdldHNUb3AobWFrZWZpbGVTdHJlYW0pOworICBsZy5Xcml0ZVNwZWNpYWxUYXJnZXRzVG9wKG1ha2VmaWxlU3RyZWFtKTsKIAogICAvLyBXcml0ZSB0aGUgZGlyZWN0b3J5IGxldmVsIHJ1bGVzLgogICBmb3IgKGF1dG8gY29uc3QmIGl0IDogdGhpcy0+Q29tcHV0ZURpcmVjdG9yeVRhcmdldHMoKSkgewpAQCAtMjM5LDEzICsyNDgsMTQgQEAKICAgfQogCiAgIC8vIFdyaXRlIHRoZSB0YXJnZXQgY29udmVuaWVuY2UgcnVsZXMKLSAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CiAgICAgdGhpcy0+V3JpdGVDb252ZW5pZW5jZVJ1bGVzMigKLSAgICAgIG1ha2VmaWxlU3RyZWFtLCBzdGF0aWNfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyo+KGxvY2FsR2VuKSk7CisgICAgICBtYWtlZmlsZVN0cmVhbSwKKyAgICAgIGNtOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KGxvY2FsR2VuKSk7CiAgIH0KIAogICAvLyBXcml0ZSBzcGVjaWFsIGJvdHRvbSB0YXJnZXRzCi0gIGxnLT5Xcml0ZVNwZWNpYWxUYXJnZXRzQm90dG9tKG1ha2VmaWxlU3RyZWFtKTsKKyAgbGcuV3JpdGVTcGVjaWFsVGFyZ2V0c0JvdHRvbShtYWtlZmlsZVN0cmVhbSk7CiB9CiAKIHZvaWQgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpXcml0ZU1haW5DTWFrZWZpbGUoKQpAQCAtMjY4LDEyICsyNzgsMTQgQEAKICAgc3RkOjpzdHJpbmcgbWFrZWZpbGVOYW1lID0KICAgICBjbVN0ckNhdCh0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSwgIi9NYWtlZmlsZSIpOwogCi0gIC8vIGdldCBhIGxvY2FsIGdlbmVyYXRvciBmb3Igc29tZSB1c2VmdWwgbWV0aG9kcwotICBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogbGcgPQotICAgIHN0YXRpY19jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4odGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdKTsKKyAgeworICAgIC8vIGdldCBhIGxvY2FsIGdlbmVyYXRvciBmb3Igc29tZSB1c2VmdWwgbWV0aG9kcworICAgIGF1dG8mIGxnID0gY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4oCisgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbMF0pOwogCi0gIC8vIFdyaXRlIHRoZSBkbyBub3QgZWRpdCBoZWFkZXIuCi0gIGxnLT5Xcml0ZURpc2NsYWltZXIoY21ha2VmaWxlU3RyZWFtKTsKKyAgICAvLyBXcml0ZSB0aGUgZG8gbm90IGVkaXQgaGVhZGVyLgorICAgIGxnLldyaXRlRGlzY2xhaW1lcihjbWFrZWZpbGVTdHJlYW0pOworICB9CiAKICAgLy8gU2F2ZSB0aGUgZ2VuZXJhdG9yIG5hbWUKICAgY21ha2VmaWxlU3RyZWFtIDw8ICIjIFRoZSBnZW5lcmF0b3IgdXNlZCBpczpcbiIKQEAgLTI4Miw5ICsyOTQsOSBAQAogCiAgIC8vIGZvciBlYWNoIGNtTWFrZWZpbGUgZ2V0IGl0cyBsaXN0IG9mIGRlcGVuZGVuY2llcwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGZpbGVzOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgZmlsZXMgY29udHJpYnV0aW5nIHRvIHRoaXMgZ2VuZXJhdGlvbiBzdGVwLgotICAgIGNtQXBwZW5kKGxmaWxlcywgbG9jYWxHZW4tPkdldE1ha2VmaWxlKCktPkdldExpc3RGaWxlcygpKTsKKyAgICBjbTo6YXBwZW5kKGxmaWxlcywgbG9jYWxHZW4tPkdldE1ha2VmaWxlKCktPkdldExpc3RGaWxlcygpKTsKICAgfQogCiAgIGNtYWtlKiBjbSA9IHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKTsKQEAgLTMwMCw1OSArMzEyLDYwIEBACiAgIGxmaWxlcy5lcmFzZShuZXdfZW5kLCBsZmlsZXMuZW5kKCkpOwogI2VuZGlmCiAKLSAgLy8gcmVzZXQgbGcgdG8gdGhlIGZpcnN0IG1ha2VmaWxlCi0gIGxnID0gc3RhdGljX2Nhc3Q8Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqPih0aGlzLT5Mb2NhbEdlbmVyYXRvcnNbMF0pOwotCi0gIHN0ZDo6c3RyaW5nIGN1cnJlbnRCaW5EaXIgPSBsZy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwotICAvLyBTYXZlIHRoZSBsaXN0IHRvIHRoZSBjbWFrZSBmaWxlLgotICBjbWFrZWZpbGVTdHJlYW0KLSAgICA8PCAiIyBUaGUgdG9wIGxldmVsIE1ha2VmaWxlIHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIgotICAgIDw8ICJzZXQoQ01BS0VfTUFLRUZJTEVfREVQRU5EU1xuIgotICAgIDw8ICIgIFwiQ01ha2VDYWNoZS50eHRcIlxuIjsKLSAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZiA6IGxmaWxlcykgewotICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiICBcIiIKLSAgICAgICAgICAgICAgICAgICAgPDwgbGctPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsIGYpCi0gICAgICAgICAgICAgICAgICAgIDw8ICJcIlxuIjsKLSAgfQotICBjbWFrZWZpbGVTdHJlYW0gPDwgIiAgKVxuXG4iOwotCi0gIC8vIEJ1aWxkIHRoZSBwYXRoIHRvIHRoZSBjYWNoZSBjaGVjayBmaWxlLgotICBzdGQ6OnN0cmluZyBjaGVjayA9Ci0gICAgY21TdHJDYXQodGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCksCi0gICAgICAgICAgICAgIi9DTWFrZUZpbGVzL2NtYWtlLmNoZWNrX2NhY2hlIik7Ci0KLSAgLy8gU2V0IHRoZSBjb3JyZXNwb25kaW5nIG1ha2VmaWxlIGluIHRoZSBjbWFrZSBmaWxlLgotICBjbWFrZWZpbGVTdHJlYW0gPDwgIiMgVGhlIGNvcnJlc3BvbmRpbmcgbWFrZWZpbGUgaXM6XG4iCi0gICAgICAgICAgICAgICAgICA8PCAic2V0KENNQUtFX01BS0VGSUxFX09VVFBVVFNcbiIKLSAgICAgICAgICAgICAgICAgIDw8ICIgIFwiIgotICAgICAgICAgICAgICAgICAgPDwgbGctPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZWZpbGVOYW1lKQotICAgICAgICAgICAgICAgICAgPDwgIlwiXG4iCi0gICAgICAgICAgICAgICAgICA8PCAiICBcIiIKLSAgICAgICAgICAgICAgICAgIDw8IGxnLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBjaGVjaykKLSAgICAgICAgICAgICAgICAgIDw8ICJcIlxuIjsKLSAgY21ha2VmaWxlU3RyZWFtIDw8ICIgIClcblxuIjsKLQotICBjb25zdCBzdGQ6OnN0cmluZyBiaW5EaXIgPSBsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCk7Ci0KLSAgLy8gQ01ha2UgbXVzdCByZXJ1biBpZiBhIGJ5cHJvZHVjdCBpcyBtaXNzaW5nLgogICB7Ci0gICAgY21ha2VmaWxlU3RyZWFtIDw8ICIjIEJ5cHJvZHVjdHMgb2YgQ01ha2UgZ2VuZXJhdGUgc3RlcDpcbiIKLSAgICAgICAgICAgICAgICAgICAgPDwgInNldChDTUFLRV9NQUtFRklMRV9QUk9EVUNUU1xuIjsKLSAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRmaWxlIDogbGctPkdldE1ha2VmaWxlKCktPkdldE91dHB1dEZpbGVzKCkpIHsKKyAgICAvLyByZXNldCBsZyB0byB0aGUgZmlyc3QgbWFrZWZpbGUKKyAgICBjb25zdCBhdXRvJiBsZyA9IGNtOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KAorICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3JzWzBdKTsKKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjdXJyZW50QmluRGlyID0gbGcuR2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOworICAgIC8vIFNhdmUgdGhlIGxpc3QgdG8gdGhlIGNtYWtlIGZpbGUuCisgICAgY21ha2VmaWxlU3RyZWFtCisgICAgICA8PCAiIyBUaGUgdG9wIGxldmVsIE1ha2VmaWxlIHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIgorICAgICAgPDwgInNldChDTUFLRV9NQUtFRklMRV9ERVBFTkRTXG4iCisgICAgICA8PCAiICBcIkNNYWtlQ2FjaGUudHh0XCJcbiI7CisgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZiA6IGxmaWxlcykgewogICAgICAgY21ha2VmaWxlU3RyZWFtIDw8ICIgIFwiIgotICAgICAgICAgICAgICAgICAgICAgIDw8IGxnLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIG91dGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgPDwgbGcuTWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoY3VycmVudEJpbkRpciwgZikKICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCJcbiI7CiAgICAgfQorICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiICApXG5cbiI7CiAKLSAgICAvLyBhZGQgaW4gYWxsIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gZmlsZXMKKyAgICAvLyBCdWlsZCB0aGUgcGF0aCB0byB0aGUgY2FjaGUgY2hlY2sgZmlsZS4KKyAgICBzdGQ6OnN0cmluZyBjaGVjayA9CisgICAgICBjbVN0ckNhdCh0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKSwKKyAgICAgICAgICAgICAgICIvQ01ha2VGaWxlcy9jbWFrZS5jaGVja19jYWNoZSIpOworCisgICAgLy8gU2V0IHRoZSBjb3JyZXNwb25kaW5nIG1ha2VmaWxlIGluIHRoZSBjbWFrZSBmaWxlLgorICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiIyBUaGUgY29ycmVzcG9uZGluZyBtYWtlZmlsZSBpczpcbiIKKyAgICAgICAgICAgICAgICAgICAgPDwgInNldChDTUFLRV9NQUtFRklMRV9PVVRQVVRTXG4iCisgICAgICAgICAgICAgICAgICAgIDw8ICIgIFwiIgorICAgICAgICAgICAgICAgICAgICA8PCBsZy5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlZmlsZU5hbWUpCisgICAgICAgICAgICAgICAgICAgIDw8ICJcIlxuIgorICAgICAgICAgICAgICAgICAgICA8PCAiICBcIiIKKyAgICAgICAgICAgICAgICAgICAgPDwgbGcuTWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoY3VycmVudEJpbkRpciwgY2hlY2spCisgICAgICAgICAgICAgICAgICAgIDw8ICJcIlxuIjsKKyAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiAgKVxuXG4iOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJpbkRpciA9IGxnLkdldEJpbmFyeURpcmVjdG9yeSgpOworCisgICAgLy8gQ01ha2UgbXVzdCByZXJ1biBpZiBhIGJ5cHJvZHVjdCBpcyBtaXNzaW5nLgorICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiIyBCeXByb2R1Y3RzIG9mIENNYWtlIGdlbmVyYXRlIHN0ZXA6XG4iCisgICAgICAgICAgICAgICAgICAgIDw8ICJzZXQoQ01BS0VfTUFLRUZJTEVfUFJPRFVDVFNcbiI7CisKKyAgICAvLyBhZGQgaW4gYW55IGJ5cHJvZHVjdHMgYW5kIGFsbCB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uIGZpbGVzCiAgICAgc3RkOjpzdHJpbmcgdG1wU3RyOwotICAgIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKLSAgICAgIGxnID0gc3RhdGljX2Nhc3Q8Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqPihsb2NhbEdlbik7Ci0gICAgICB0bXBTdHIgPSBjbVN0ckNhdChsZy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAorICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW4gOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG91dGZpbGUgOgorICAgICAgICAgICBsb2NhbEdlbi0+R2V0TWFrZWZpbGUoKS0+R2V0T3V0cHV0RmlsZXMoKSkgeworICAgICAgICBjbWFrZWZpbGVTdHJlYW0gPDwgIiAgXCIiCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBsZy5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIG91dGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXCJcbiI7CisgICAgICB9CisgICAgICB0bXBTdHIgPSBjbVN0ckNhdChsb2NhbEdlbi0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIi9DTWFrZUZpbGVzL0NNYWtlRGlyZWN0b3J5SW5mb3JtYXRpb24uY21ha2UiKTsKICAgICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiICBcIiIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBsZy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoYmluRGlyLCB0bXBTdHIpCisgICAgICAgICAgICAgICAgICAgICAgPDwgbG9jYWxHZW4tPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGJpbkRpciwgdG1wU3RyKQogICAgICAgICAgICAgICAgICAgICAgIDw8ICJcIlxuIjsKICAgICB9CiAgICAgY21ha2VmaWxlU3RyZWFtIDw8ICIgIClcblxuIjsKQEAgLTM2NCwyNiArMzc3LDI0IEBACiAKIHZvaWQgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpXcml0ZU1haW5DTWFrZWZpbGVMYW5ndWFnZVJ1bGVzKAogICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGNtYWtlZmlsZVN0cmVhbSwKLSAgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBsR2VuZXJhdG9ycykKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+PiYgbEdlbmVyYXRvcnMpCiB7Ci0gIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBsZzsKLQogICAvLyBub3cgbGlzdCBhbGwgdGhlIHRhcmdldCBpbmZvIGZpbGVzCiAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiIyBEZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZvciBhbGwgdGFyZ2V0czpcbiI7CiAgIGNtYWtlZmlsZVN0cmVhbSA8PCAic2V0KENNQUtFX0RFUEVORF9JTkZPX0ZJTEVTXG4iOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxHZW5lcmF0b3IgOiBsR2VuZXJhdG9ycykgewotICAgIGxnID0gc3RhdGljX2Nhc3Q8Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqPihsR2VuZXJhdG9yKTsKKyAgZm9yIChjb25zdCBhdXRvJiBsR2VuZXJhdG9yIDogbEdlbmVyYXRvcnMpIHsKKyAgICBjb25zdCBhdXRvJiBsZyA9CisgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzPihsR2VuZXJhdG9yKTsKICAgICAvLyBmb3IgYWxsIG9mIG91dCB0YXJnZXRzCi0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgdGd0IDogbGcuR2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICBpZiAoKHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgfHwKICAgICAgICAgICAodGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSkgfHwKICAgICAgICAgICAodGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSkgfHwKICAgICAgICAgICAodGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWSkgfHwKICAgICAgICAgICAodGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgfHwKICAgICAgICAgICAodGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpVVElMSVRZKSkgewotICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogZ3QgPSB0Z3Q7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHRuYW1lID0KLSAgICAgICAgICBjbVN0ckNhdChsZy0+R2V0UmVsYXRpdmVUYXJnZXREaXJlY3RvcnkoZ3QpLCAiL0RlcGVuZEluZm8uY21ha2UiKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgdG5hbWUgPSBjbVN0ckNhdChsZy5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeSh0Z3QuZ2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvRGVwZW5kSW5mby5jbWFrZSIpOwogICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyh0bmFtZSk7CiAgICAgICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiICBcIiIgPDwgdG5hbWUgPDwgIlwiXG4iOwogICAgICAgfQpAQCAtNDA1LDcgKzQxNiw3IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzOwogICBmb3IgKERpcmVjdG9yeVRhcmdldDo6VGFyZ2V0IGNvbnN0JiB0IDogZHQuVGFyZ2V0cykgewogICAgIC8vIEFkZCB0aGlzIHRvIHRoZSBsaXN0IG9mIGRlcGVuZHMgcnVsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCi0gICAgaWYgKCghY2hlY2tfYWxsIHx8ICF0LkV4Y2x1ZGVGcm9tQWxsKSAmJgorICAgIGlmICgoIWNoZWNrX2FsbCB8fCB0LkV4Y2x1ZGVkRnJvbUFsbEluQ29uZmlncy5lbXB0eSgpKSAmJgogICAgICAgICAoIWNoZWNrX3JlbGluayB8fAogICAgICAgICAgdC5HVC0+TmVlZFJlbGlua0JlZm9yZUluc3RhbGwobGctPkdldENvbmZpZ05hbWUoKSkpKSB7CiAgICAgICAvLyBUaGUgdGFyZ2V0IG1heSBiZSBmcm9tIGEgZGlmZmVyZW50IGRpcmVjdG9yeTsgdXNlIGl0cyBsb2NhbCBnZW4uCkBAIC00NzYsNiArNDg3LDc4IEBACiAgIH0KIH0KIAorbmFtZXNwYWNlIHsKK3N0ZDo6c3RyaW5nIENvbnZlcnRUb01ha2VmaWxlUGF0aEZvclVuaXgoc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgpCit7CisgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKyAgcmVzdWx0LnJlc2VydmUocGF0aC5zaXplKCkpOworICBmb3IgKGNoYXIgYyA6IHBhdGgpIHsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgJz0nOgorICAgICAgICAvLyBXZSBwcm92aWRlICdFUVVBTFMgPSA9JyB0byBlbmNvZGUgJz0nIGluIGEgbm9uLWFzc2lnbm1lbnQgY2FzZS4KKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiJChFUVVBTFMpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnJCc6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiQkIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnXFwnOgorICAgICAgY2FzZSAnICc6CisgICAgICBjYXNlICcjJzoKKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjaygnXFwnKTsKKyAgICAgICAgQ01fRkFMTFRIUk9VR0g7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXN1bHQucHVzaF9iYWNrKGMpOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorc3RkOjpzdHJpbmcgQ29udmVydFRvTWFrZWZpbGVQYXRoRm9yV2luZG93cyhzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkKK3sKKyAgYm9vbCBjb25zdCBxdW90ZSA9IHBhdGguZmluZF9maXJzdF9vZigiICMiKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgc3RkOjpzdHJpbmcgcmVzdWx0OworICByZXN1bHQucmVzZXJ2ZShwYXRoLnNpemUoKSArIChxdW90ZSA/IDIgOiAwKSk7CisgIGlmIChxdW90ZSkgeworICAgIHJlc3VsdC5wdXNoX2JhY2soJyInKTsKKyAgfQorICBmb3IgKGNoYXIgYyA6IHBhdGgpIHsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgJz0nOgorICAgICAgICAvLyBXZSBwcm92aWRlICdFUVVBTFMgPSA9JyB0byBlbmNvZGUgJz0nIGluIGEgbm9uLWFzc2lnbm1lbnQgY2FzZS4KKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiJChFUVVBTFMpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnJCc6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiQkIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnLyc6CisgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soJ1xcJyk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGlmIChxdW90ZSkgeworICAgIHJlc3VsdC5wdXNoX2JhY2soJyInKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCit9CisKK3N0ZDo6c3RyaW5nIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q29udmVydFRvTWFrZWZpbGVQYXRoKAorICBzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkgY29uc3QKK3sKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKKyAgaWYgKCF0aGlzLT5Gb3JjZVVuaXhQYXRocykgeworICAgIHJldHVybiBDb252ZXJ0VG9NYWtlZmlsZVBhdGhGb3JXaW5kb3dzKHBhdGgpOworICB9CisjZW5kaWYKKyAgcmV0dXJuIENvbnZlcnRUb01ha2VmaWxlUGF0aEZvclVuaXgocGF0aCk7Cit9CisKIHN0ZDo6dmVjdG9yPGNtR2xvYmFsR2VuZXJhdG9yOjpHZW5lcmF0ZWRNYWtlQ29tbWFuZD4KIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6R2VuZXJhdGVCdWlsZENvbW1hbmQoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWtlUHJvZ3JhbSwgY29uc3Qgc3RkOjpzdHJpbmcmIC8qcHJvamVjdE5hbWUqLywKQEAgLTQ4Nyw3ICs1NzAsNyBAQAogICBzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZT4gbWZ1OwogICBjbU1ha2VmaWxlKiBtZjsKICAgaWYgKCF0aGlzLT5NYWtlZmlsZXMuZW1wdHkoKSkgewotICAgIG1mID0gdGhpcy0+TWFrZWZpbGVzWzBdOworICAgIG1mID0gdGhpcy0+TWFrZWZpbGVzWzBdLmdldCgpOwogICB9IGVsc2UgewogICAgIGNtU3RhdGVTbmFwc2hvdCBzbmFwc2hvdCA9IHRoaXMtPkNNYWtlSW5zdGFuY2UtPkdldEN1cnJlbnRTbmFwc2hvdCgpOwogICAgIHNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldEN1cnJlbnRTb3VyY2UoCkBAIC01NDUsMTEgKzYyOCwxMSBAQAogICB9CiAKICAgLy8gd3JpdGUgdGhlIHRhcmdldCBjb252ZW5pZW5jZSBydWxlcwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnID0KLSAgICAgIHN0YXRpY19jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4obG9jYWxHZW4pOworICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgICAgYXV0byYgbGcgPQorICAgICAgY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4obG9jYWxHZW4pOwogICAgIC8vIGZvciBlYWNoIHRhcmdldCBHZW5lcmF0ZSB0aGUgcnVsZSBmaWxlcyBmb3IgZWFjaCB0YXJnZXQuCi0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogZ3RhcmdldCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGd0YXJnZXQgOiBsZy5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICAgIC8vIERvbid0IGVtaXQgdGhlIHNhbWUgcnVsZSB0d2ljZSAoZS5nLiB0d28gdGFyZ2V0cyB3aXRoIHRoZSBzYW1lCiAgICAgICAvLyBzaW1wbGUgbmFtZSkKICAgICAgIGludCB0eXBlID0gZ3RhcmdldC0+R2V0VHlwZSgpOwpAQCAtNTY0LDIzICs2NDcsMjMgQEAKICAgICAgICAgICAgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgfHwKICAgICAgICAgICAgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpVVElMSVRZKSkpIHsKICAgICAgICAgLy8gQWRkIGEgcnVsZSB0byBidWlsZCB0aGUgdGFyZ2V0IGJ5IG5hbWUuCi0gICAgICAgIGxnLT5Xcml0ZURpdmlkZXIocnVsZUZpbGVTdHJlYW0pOworICAgICAgICBsZy5Xcml0ZURpdmlkZXIocnVsZUZpbGVTdHJlYW0pOwogICAgICAgICBydWxlRmlsZVN0cmVhbSA8PCAiIyBUYXJnZXQgcnVsZXMgZm9yIHRhcmdldHMgbmFtZWQgIiA8PCBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJcblxuIjsKIAogICAgICAgICAvLyBXcml0ZSB0aGUgcnVsZS4KICAgICAgICAgY29tbWFuZHMuY2xlYXIoKTsKICAgICAgICAgc3RkOjpzdHJpbmcgdG1wID0gIkNNYWtlRmlsZXMvTWFrZWZpbGUyIjsKLSAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKGxnLT5HZXRSZWN1cnNpdmVNYWtlQ2FsbCh0bXAsIG5hbWUpKTsKKyAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKGxnLkdldFJlY3Vyc2l2ZU1ha2VDYWxsKHRtcCwgbmFtZSkpOwogICAgICAgICBkZXBlbmRzLmNsZWFyKCk7CiAgICAgICAgIGlmIChyZWdlbmVyYXRlKSB7CiAgICAgICAgICAgZGVwZW5kcy5lbXBsYWNlX2JhY2soImNtYWtlX2NoZWNrX2J1aWxkX3N5c3RlbSIpOwogICAgICAgICB9Ci0gICAgICAgIGxnLT5Xcml0ZU1ha2VSdWxlKHJ1bGVGaWxlU3RyZWFtLCAiQnVpbGQgcnVsZSBmb3IgdGFyZ2V0LiIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKKyAgICAgICAgbGcuV3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgIkJ1aWxkIHJ1bGUgZm9yIHRhcmdldC4iLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKIAogICAgICAgICAvLyBBZGQgYSBmYXN0IHJ1bGUgdG8gYnVpbGQgdGhlIHRhcmdldAotICAgICAgICBzdGQ6OnN0cmluZyBsb2NhbE5hbWUgPSBsZy0+R2V0UmVsYXRpdmVUYXJnZXREaXJlY3RvcnkoZ3RhcmdldCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGxvY2FsTmFtZSA9IGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpOwogICAgICAgICBzdGQ6OnN0cmluZyBtYWtlZmlsZU5hbWU7CiAgICAgICAgIG1ha2VmaWxlTmFtZSA9IGNtU3RyQ2F0KGxvY2FsTmFtZSwgIi9idWlsZC5tYWtlIik7CiAgICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKQEAgLTU4OCwyMyArNjcxLDIzIEBACiAgICAgICAgIHN0ZDo6c3RyaW5nIG1ha2VUYXJnZXROYW1lID0gY21TdHJDYXQobG9jYWxOYW1lLCAiL2J1aWxkIik7CiAgICAgICAgIGxvY2FsTmFtZSA9IGNtU3RyQ2F0KG5hbWUsICIvZmFzdCIpOwogICAgICAgICBjb21tYW5kcy5wdXNoX2JhY2soCi0gICAgICAgICAgbGctPkdldFJlY3Vyc2l2ZU1ha2VDYWxsKG1ha2VmaWxlTmFtZSwgbWFrZVRhcmdldE5hbWUpKTsKLSAgICAgICAgbGctPldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sICJmYXN0IGJ1aWxkIHJ1bGUgZm9yIHRhcmdldC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE5hbWUsIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKKyAgICAgICAgICBsZy5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIG1ha2VUYXJnZXROYW1lKSk7CisgICAgICAgIGxnLldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sICJmYXN0IGJ1aWxkIHJ1bGUgZm9yIHRhcmdldC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogCiAgICAgICAgIC8vIEFkZCBhIGxvY2FsIG5hbWUgZm9yIHRoZSBydWxlIHRvIHJlbGluayB0aGUgdGFyZ2V0IGJlZm9yZQogICAgICAgICAvLyBpbnN0YWxsYXRpb24uCi0gICAgICAgIGlmIChndGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbChsZy0+R2V0Q29uZmlnTmFtZSgpKSkgewotICAgICAgICAgIG1ha2VUYXJnZXROYW1lID0KLSAgICAgICAgICAgIGNtU3RyQ2F0KGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KSwgIi9wcmVpbnN0YWxsIik7CisgICAgICAgIGlmIChndGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbChsZy5HZXRDb25maWdOYW1lKCkpKSB7CisgICAgICAgICAgbWFrZVRhcmdldE5hbWUgPSBjbVN0ckNhdCgKKyAgICAgICAgICAgIGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpLCAiL3ByZWluc3RhbGwiKTsKICAgICAgICAgICBsb2NhbE5hbWUgPSBjbVN0ckNhdChuYW1lLCAiL3ByZWluc3RhbGwiKTsKICAgICAgICAgICBkZXBlbmRzLmNsZWFyKCk7CiAgICAgICAgICAgY29tbWFuZHMuY2xlYXIoKTsKICAgICAgICAgICBjb21tYW5kcy5wdXNoX2JhY2soCi0gICAgICAgICAgICBsZy0+R2V0UmVjdXJzaXZlTWFrZUNhbGwobWFrZWZpbGVOYW1lLCBtYWtlVGFyZ2V0TmFtZSkpOwotICAgICAgICAgIGxnLT5Xcml0ZU1ha2VSdWxlKHJ1bGVGaWxlU3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYW51YWwgcHJlLWluc3RhbGwgcmVsaW5rIHJ1bGUgZm9yIHRhcmdldC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOworICAgICAgICAgICAgbGcuR2V0UmVjdXJzaXZlTWFrZUNhbGwobWFrZWZpbGVOYW1lLCBtYWtlVGFyZ2V0TmFtZSkpOworICAgICAgICAgIGxnLldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFudWFsIHByZS1pbnN0YWxsIHJlbGluayBydWxlIGZvciB0YXJnZXQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtNjEyLDcgKzY5NSw3IEBACiB9CiAKIHZvaWQgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpXcml0ZUNvbnZlbmllbmNlUnVsZXMyKAotICBzdGQ6Om9zdHJlYW0mIHJ1bGVGaWxlU3RyZWFtLCBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogbGcpCisgIHN0ZDo6b3N0cmVhbSYgcnVsZUZpbGVTdHJlYW0sIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzJiBsZykKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZHM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb21tYW5kczsKQEAgLTYyNSw3ICs3MDgsNyBAQAogICB9CiAKICAgLy8gZm9yIGVhY2ggdGFyZ2V0IEdlbmVyYXRlIHRoZSBydWxlIGZpbGVzIGZvciBlYWNoIHRhcmdldC4KLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogZ3RhcmdldCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBndGFyZ2V0IDogbGcuR2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgaW50IHR5cGUgPSBndGFyZ2V0LT5HZXRUeXBlKCk7CiAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGd0YXJnZXQtPkdldE5hbWUoKTsKICAgICBpZiAoIW5hbWUuZW1wdHkoKSAmJgpAQCAtNjM3LDMxICs3MjAsMzEgQEAKICAgICAgICAgICh0eXBlID09IGNtU3RhdGVFbnVtczo6VVRJTElUWSkpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBtYWtlZmlsZU5hbWU7CiAgICAgICAvLyBBZGQgYSBydWxlIHRvIGJ1aWxkIHRoZSB0YXJnZXQgYnkgbmFtZS4KLSAgICAgIGxvY2FsTmFtZSA9IGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KTsKKyAgICAgIGxvY2FsTmFtZSA9IGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpOwogICAgICAgbWFrZWZpbGVOYW1lID0gY21TdHJDYXQobG9jYWxOYW1lLCAiL2J1aWxkLm1ha2UiKTsKIAotICAgICAgbGctPldyaXRlRGl2aWRlcihydWxlRmlsZVN0cmVhbSk7CisgICAgICBsZy5Xcml0ZURpdmlkZXIocnVsZUZpbGVTdHJlYW0pOwogICAgICAgcnVsZUZpbGVTdHJlYW0gPDwgIiMgVGFyZ2V0IHJ1bGVzIGZvciB0YXJnZXQgIiA8PCBsb2NhbE5hbWUgPDwgIlxuXG4iOwogCiAgICAgICBjb21tYW5kcy5jbGVhcigpOwogICAgICAgbWFrZVRhcmdldE5hbWUgPSBjbVN0ckNhdChsb2NhbE5hbWUsICIvZGVwZW5kIik7CiAgICAgICBjb21tYW5kcy5wdXNoX2JhY2soCi0gICAgICAgIGxnLT5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIG1ha2VUYXJnZXROYW1lKSk7CisgICAgICAgIGxnLkdldFJlY3Vyc2l2ZU1ha2VDYWxsKG1ha2VmaWxlTmFtZSwgbWFrZVRhcmdldE5hbWUpKTsKIAogICAgICAgbWFrZVRhcmdldE5hbWUgPSBjbVN0ckNhdChsb2NhbE5hbWUsICIvYnVpbGQiKTsKICAgICAgIGNvbW1hbmRzLnB1c2hfYmFjaygKLSAgICAgICAgbGctPkdldFJlY3Vyc2l2ZU1ha2VDYWxsKG1ha2VmaWxlTmFtZSwgbWFrZVRhcmdldE5hbWUpKTsKKyAgICAgICAgbGcuR2V0UmVjdXJzaXZlTWFrZUNhbGwobWFrZWZpbGVOYW1lLCBtYWtlVGFyZ2V0TmFtZSkpOwogCiAgICAgICAvLyBXcml0ZSB0aGUgcnVsZS4KICAgICAgIGxvY2FsTmFtZSArPSAiL2FsbCI7CiAgICAgICBkZXBlbmRzLmNsZWFyKCk7CiAKICAgICAgIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpFY2hvUHJvZ3Jlc3MgcHJvZ3Jlc3M7Ci0gICAgICBwcm9ncmVzcy5EaXIgPSBjbVN0ckNhdChsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCksICIvQ01ha2VGaWxlcyIpOworICAgICAgcHJvZ3Jlc3MuRGlyID0gY21TdHJDYXQobGcuR2V0QmluYXJ5RGlyZWN0b3J5KCksICIvQ01ha2VGaWxlcyIpOwogICAgICAgewogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcHJvZ3Jlc3NBcmc7CiAgICAgICAgIGNvbnN0IGNoYXIqIHNlcCA9ICIiOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgcHJvZ0ZpbGUgOiB0aGlzLT5Qcm9ncmVzc01hcFtndGFyZ2V0XS5NYXJrcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgcHJvZ0ZpbGUgOiB0aGlzLT5Qcm9ncmVzc01hcFtndGFyZ2V0LmdldCgpXS5NYXJrcykgewogICAgICAgICAgIHByb2dyZXNzQXJnIDw8IHNlcCA8PCBwcm9nRmlsZTsKICAgICAgICAgICBzZXAgPSAiLCI7CiAgICAgICAgIH0KQEAgLTY2OSwyMCArNzUyLDIwIEBACiAgICAgICB9CiAKICAgICAgIGJvb2wgdGFyZ2V0TWVzc2FnZXMgPSB0cnVlOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIHRndE1zZyA9CisgICAgICBpZiAoY21Qcm9wIHRndE1zZyA9CiAgICAgICAgICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAogICAgICAgICAgICAgICAiVEFSR0VUX01FU1NBR0VTIikpIHsKLSAgICAgICAgdGFyZ2V0TWVzc2FnZXMgPSBjbUlzT24odGd0TXNnKTsKKyAgICAgICAgdGFyZ2V0TWVzc2FnZXMgPSBjbUlzT24oKnRndE1zZyk7CiAgICAgICB9CiAKICAgICAgIGlmICh0YXJnZXRNZXNzYWdlcykgewotICAgICAgICBsZy0+QXBwZW5kRWNobyhjb21tYW5kcywgIkJ1aWx0IHRhcmdldCAiICsgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkVjaG9Ob3JtYWwsICZwcm9ncmVzcyk7CisgICAgICAgIGxnLkFwcGVuZEVjaG8oY29tbWFuZHMsICJCdWlsdCB0YXJnZXQgIiArIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkVjaG9Ob3JtYWwsICZwcm9ncmVzcyk7CiAgICAgICB9CiAKLSAgICAgIHRoaXMtPkFwcGVuZEdsb2JhbFRhcmdldERlcGVuZHMoZGVwZW5kcywgZ3RhcmdldCk7Ci0gICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgIkFsbCBCdWlsZCBydWxlIGZvciB0YXJnZXQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOworICAgICAgdGhpcy0+QXBwZW5kR2xvYmFsVGFyZ2V0RGVwZW5kcyhkZXBlbmRzLCBndGFyZ2V0LmdldCgpKTsKKyAgICAgIGxnLldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sICJBbGwgQnVpbGQgcnVsZSBmb3IgdGFyZ2V0LiIsIGxvY2FsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogCiAgICAgICAvLyBXcml0ZSB0aGUgcnVsZS4KICAgICAgIGNvbW1hbmRzLmNsZWFyKCk7CkBAIC02OTIsMjIgKzc3NSwyMSBAQAogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcHJvZ0NtZDsKICAgICAgICAgcHJvZ0NtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9wcm9ncmVzc19zdGFydCAiOwogICAgICAgICAvLyAjIGluIHRhcmdldAotICAgICAgICBwcm9nQ21kIDw8IGxnLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwcm9ncmVzcy5EaXIpLAotICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICAgIHByb2dDbWQgPDwgbGcuQ29udmVydFRvT3V0cHV0Rm9ybWF0KHByb2dyZXNzLkRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICAgICAgLy8KICAgICAgICAgc3RkOjpzZXQ8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqPiBlbWl0dGVkOwotICAgICAgICBwcm9nQ21kIDw8ICIgIiA8PCB0aGlzLT5Db3VudFByb2dyZXNzTWFya3NJblRhcmdldChndGFyZ2V0LCBlbWl0dGVkKTsKKyAgICAgICAgcHJvZ0NtZCA8PCAiICIKKyAgICAgICAgICAgICAgICA8PCB0aGlzLT5Db3VudFByb2dyZXNzTWFya3NJblRhcmdldChndGFyZ2V0LmdldCgpLCBlbWl0dGVkKTsKICAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKHByb2dDbWQuc3RyKCkpOwogICAgICAgfQogICAgICAgc3RkOjpzdHJpbmcgdG1wID0gIkNNYWtlRmlsZXMvTWFrZWZpbGUyIjsKLSAgICAgIGNvbW1hbmRzLnB1c2hfYmFjayhsZy0+R2V0UmVjdXJzaXZlTWFrZUNhbGwodG1wLCBsb2NhbE5hbWUpKTsKKyAgICAgIGNvbW1hbmRzLnB1c2hfYmFjayhsZy5HZXRSZWN1cnNpdmVNYWtlQ2FsbCh0bXAsIGxvY2FsTmFtZSkpOwogICAgICAgewogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcHJvZ0NtZDsKICAgICAgICAgcHJvZ0NtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9wcm9ncmVzc19zdGFydCAiOyAvLyAjIDAKLSAgICAgICAgcHJvZ0NtZCA8PCBsZy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZ3Jlc3MuRGlyKSwKLSAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgICAgICBwcm9nQ21kIDw8IGxnLkNvbnZlcnRUb091dHB1dEZvcm1hdChwcm9ncmVzcy5EaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgICAgIHByb2dDbWQgPDwgIiAwIjsKICAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKHByb2dDbWQuc3RyKCkpOwogICAgICAgfQpAQCAtNzE1LDM5ICs3OTcsMzkgQEAKICAgICAgIGlmIChyZWdlbmVyYXRlKSB7CiAgICAgICAgIGRlcGVuZHMuZW1wbGFjZV9iYWNrKCJjbWFrZV9jaGVja19idWlsZF9zeXN0ZW0iKTsKICAgICAgIH0KLSAgICAgIGxvY2FsTmFtZSA9IGNtU3RyQ2F0KGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KSwgIi9ydWxlIik7Ci0gICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBydWxlIGZvciBzdWJkaXIgaW52b2NhdGlvbiBmb3IgdGFyZ2V0LiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE5hbWUsIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKKyAgICAgIGxvY2FsTmFtZSA9CisgICAgICAgIGNtU3RyQ2F0KGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpLCAiL3J1bGUiKTsKKyAgICAgIGxnLldyaXRlTWFrZVJ1bGUocnVsZUZpbGVTdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBydWxlIGZvciBzdWJkaXIgaW52b2NhdGlvbiBmb3IgdGFyZ2V0LiIsCisgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogCiAgICAgICAvLyBBZGQgYSB0YXJnZXQgd2l0aCB0aGUgY2Fub25pY2FsIG5hbWUgKG5vIHByZWZpeCwgc3VmZml4IG9yIHBhdGgpLgogICAgICAgY29tbWFuZHMuY2xlYXIoKTsKICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKICAgICAgIGRlcGVuZHMucHVzaF9iYWNrKGxvY2FsTmFtZSk7Ci0gICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgIkNvbnZlbmllbmNlIG5hbWUgZm9yIHRhcmdldC4iLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOworICAgICAgbGcuV3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgIkNvbnZlbmllbmNlIG5hbWUgZm9yIHRhcmdldC4iLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLCBjb21tYW5kcywgdHJ1ZSk7CiAKICAgICAgIC8vIEFkZCBydWxlcyB0byBwcmVwYXJlIHRoZSB0YXJnZXQgZm9yIGluc3RhbGxhdGlvbi4KLSAgICAgIGlmIChndGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbChsZy0+R2V0Q29uZmlnTmFtZSgpKSkgewotICAgICAgICBsb2NhbE5hbWUgPQotICAgICAgICAgIGNtU3RyQ2F0KGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KSwgIi9wcmVpbnN0YWxsIik7CisgICAgICBpZiAoZ3RhcmdldC0+TmVlZFJlbGlua0JlZm9yZUluc3RhbGwobGcuR2V0Q29uZmlnTmFtZSgpKSkgeworICAgICAgICBsb2NhbE5hbWUgPSBjbVN0ckNhdChsZy5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0LmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9wcmVpbnN0YWxsIik7CiAgICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKICAgICAgICAgY29tbWFuZHMuY2xlYXIoKTsKLSAgICAgICAgY29tbWFuZHMucHVzaF9iYWNrKGxnLT5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIGxvY2FsTmFtZSkpOwotICAgICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZS1pbnN0YWxsIHJlbGluayBydWxlIGZvciB0YXJnZXQuIiwgbG9jYWxOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLCBjb21tYW5kcywgdHJ1ZSk7CisgICAgICAgIGNvbW1hbmRzLnB1c2hfYmFjayhsZy5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIGxvY2FsTmFtZSkpOworICAgICAgICBsZy5Xcml0ZU1ha2VSdWxlKHJ1bGVGaWxlU3RyZWFtLCAiUHJlLWluc3RhbGwgcmVsaW5rIHJ1bGUgZm9yIHRhcmdldC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogICAgICAgfQogCiAgICAgICAvLyBhZGQgdGhlIGNsZWFuIHJ1bGUKLSAgICAgIGxvY2FsTmFtZSA9IGxnLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeShndGFyZ2V0KTsKKyAgICAgIGxvY2FsTmFtZSA9IGxnLkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KGd0YXJnZXQuZ2V0KCkpOwogICAgICAgbWFrZVRhcmdldE5hbWUgPSBjbVN0ckNhdChsb2NhbE5hbWUsICIvY2xlYW4iKTsKICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKICAgICAgIGNvbW1hbmRzLmNsZWFyKCk7CiAgICAgICBjb21tYW5kcy5wdXNoX2JhY2soCi0gICAgICAgIGxnLT5HZXRSZWN1cnNpdmVNYWtlQ2FsbChtYWtlZmlsZU5hbWUsIG1ha2VUYXJnZXROYW1lKSk7Ci0gICAgICBsZy0+V3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgImNsZWFuIHJ1bGUgZm9yIHRhcmdldC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVRhcmdldE5hbWUsIGRlcGVuZHMsIGNvbW1hbmRzLCB0cnVlKTsKKyAgICAgICAgbGcuR2V0UmVjdXJzaXZlTWFrZUNhbGwobWFrZWZpbGVOYW1lLCBtYWtlVGFyZ2V0TmFtZSkpOworICAgICAgbGcuV3JpdGVNYWtlUnVsZShydWxlRmlsZVN0cmVhbSwgImNsZWFuIHJ1bGUgZm9yIHRhcmdldC4iLAorICAgICAgICAgICAgICAgICAgICAgICBtYWtlVGFyZ2V0TmFtZSwgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwogICAgICAgY29tbWFuZHMuY2xlYXIoKTsKICAgICB9CiAgIH0KQEAgLTc1OSwxMiArODQxLDExIEBACiB7CiAgIHRoaXMtPkRpcmVjdG9yeVRhcmdldHNNYXAuY2xlYXIoKTsKICAgLy8gTG9vcCBvdmVyIGFsbCB0YXJnZXRzIGluIGFsbCBsb2NhbCBnZW5lcmF0b3JzLgotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogZ3QgOiBsZy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgbGcgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGd0IDogbGctPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgY21Mb2NhbEdlbmVyYXRvciogdGxnID0gZ3QtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAKLSAgICAgIGlmIChndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgfHwKLSAgICAgICAgICBndC0+R2V0UHJvcGVydHlBc0Jvb2woIkVYQ0xVREVfRlJPTV9BTEwiKSkgeworICAgICAgaWYgKCFndC0+SXNJbkJ1aWxkU3lzdGVtKCkgfHwgSXNFeGNsdWRlZChsZy5nZXQoKSwgZ3QuZ2V0KCkpKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCkBAIC03NzgsMTIgKzg1OSwxMyBAQAogICAgICAgICAvLyBUaGlzIGxvY2FsIGdlbmVyYXRvciBpbmNsdWRlcyB0aGUgdGFyZ2V0LgogICAgICAgICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+JiB0YXJnZXRTZXQgPQogICAgICAgICAgIHRoaXMtPkRpcmVjdG9yeVRhcmdldHNNYXBbY3NucF07Ci0gICAgICAgIHRhcmdldFNldC5pbnNlcnQoZ3QpOworICAgICAgICB0YXJnZXRTZXQuaW5zZXJ0KGd0LmdldCgpKTsKIAogICAgICAgICAvLyBBZGQgZGVwZW5kZW5jaWVzIG9mIHRoZSBpbmNsdWRlZCB0YXJnZXQuICBBbiBleGNsdWRlZAogICAgICAgICAvLyB0YXJnZXQgbWF5IHN0aWxsIGJlIGluY2x1ZGVkIGlmIGl0IGlzIGEgZGVwZW5kZW5jeSBvZiBhCiAgICAgICAgIC8vIG5vbi1leGNsdWRlZCB0YXJnZXQuCi0gICAgICAgIGZvciAoY21UYXJnZXREZXBlbmQgY29uc3QmIHRndGRlcCA6IHRoaXMtPkdldFRhcmdldERpcmVjdERlcGVuZHMoZ3QpKSB7CisgICAgICAgIGZvciAoY21UYXJnZXREZXBlbmQgY29uc3QmIHRndGRlcCA6CisgICAgICAgICAgICAgdGhpcy0+R2V0VGFyZ2V0RGlyZWN0RGVwZW5kcyhndC5nZXQoKSkpIHsKICAgICAgICAgICB0YXJnZXRTZXQuaW5zZXJ0KHRndGRlcCk7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTc5OCw3ICs4ODAsNyBAQAogICBpZiAoZW1pdHRlZC5pbnNlcnQodGFyZ2V0KS5zZWNvbmQpIHsKICAgICBjb3VudCA9IHRoaXMtPlByb2dyZXNzTWFwW3RhcmdldF0uTWFya3Muc2l6ZSgpOwogICAgIGZvciAoY21UYXJnZXREZXBlbmQgY29uc3QmIGRlcGVuZCA6IHRoaXMtPkdldFRhcmdldERpcmVjdERlcGVuZHModGFyZ2V0KSkgewotICAgICAgaWYgKGRlcGVuZC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgICAgIGlmICghZGVwZW5kLT5Jc0luQnVpbGRTeXN0ZW0oKSkgewogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIGNvdW50ICs9IHRoaXMtPkNvdW50UHJvZ3Jlc3NNYXJrc0luVGFyZ2V0KGRlcGVuZCwgZW1pdHRlZCk7CkBAIC04MDgsMTIgKzg5MCwxMiBAQAogfQogCiBzaXplX3QgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpDb3VudFByb2dyZXNzTWFya3NJbkFsbCgKLSAgY21Mb2NhbEdlbmVyYXRvciogbGcpCisgIGNvbnN0IGNtTG9jYWxHZW5lcmF0b3ImIGxnKQogewogICBzaXplX3QgY291bnQgPSAwOwogICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+IGVtaXR0ZWQ7CiAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCA6Ci0gICAgICAgdGhpcy0+RGlyZWN0b3J5VGFyZ2V0c01hcFtsZy0+R2V0U3RhdGVTbmFwc2hvdCgpXSkgeworICAgICAgIHRoaXMtPkRpcmVjdG9yeVRhcmdldHNNYXBbbGcuR2V0U3RhdGVTbmFwc2hvdCgpXSkgewogICAgIGNvdW50ICs9IHRoaXMtPkNvdW50UHJvZ3Jlc3NNYXJrc0luVGFyZ2V0KHRhcmdldCwgZW1pdHRlZCk7CiAgIH0KICAgcmV0dXJuIGNvdW50OwpAQCAtODU1LDcgKzkzNyw3IEBACiAgIGZvciAoY21UYXJnZXREZXBlbmQgY29uc3QmIGkgOiB0aGlzLT5HZXRUYXJnZXREaXJlY3REZXBlbmRzKHRhcmdldCkpIHsKICAgICAvLyBDcmVhdGUgdGhlIHRhcmdldC1sZXZlbCBkZXBlbmRlbmN5LgogICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiBkZXAgPSBpOwotICAgIGlmIChkZXAtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgICAgaWYgKCFkZXAtPklzSW5CdWlsZFN5c3RlbSgpKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnMyA9CkBAIC04ODUsMzMgKzk2Nyw0OCBAQAogCiAgIC8vIEtlZXAgdHJhY2sgb2YgdGFyZ2V0cyBhbHJlYWR5IGxpc3RlZC4KICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGVtaXR0ZWRUYXJnZXRzOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gdXRpbGl0eV90YXJnZXRzOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZ2xvYmFsc190YXJnZXRzOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gcHJvamVjdF90YXJnZXRzOwogCiAgIC8vIGZvciBlYWNoIGxvY2FsIGdlbmVyYXRvcgotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxvY2FsR2VuIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqIGxnMiA9Ci0gICAgICBzdGF0aWNfY2FzdDxjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyo+KGxvY2FsR2VuKTsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IHRoaXMtPkxvY2FsR2VuZXJhdG9ycykgeworICAgIGNvbnN0IGF1dG8mIGxnMiA9CisgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzPihsb2NhbEdlbik7CiAgICAgLy8gZm9yIHRoZSBwYXNzZWQgaW4gbWFrZWZpbGUgb3IgaWYgdGhpcyBpcyB0aGUgdG9wIE1ha2VmaWxlIHdyaXB0ZSBvdXQKICAgICAvLyB0aGUgdGFyZ2V0cwotICAgIGlmIChsZzIgPT0gbGcgfHwgbGctPklzUm9vdE1ha2VmaWxlKCkpIHsKKyAgICBpZiAoJmxnMiA9PSBsZyB8fCBsZy0+SXNSb290TWFrZWZpbGUoKSkgewogICAgICAgLy8gZm9yIGVhY2ggdGFyZ2V0IEdlbmVyYXRlIHRoZSBydWxlIGZpbGVzIGZvciBlYWNoIHRhcmdldC4KLSAgICAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IGxnMi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IGxnMi5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICAgICAgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHR5cGUgPSB0YXJnZXQtPkdldFR5cGUoKTsKICAgICAgICAgaWYgKCh0eXBlID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgfHwKICAgICAgICAgICAgICh0eXBlID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpIHx8CiAgICAgICAgICAgICAodHlwZSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSB8fAogICAgICAgICAgICAgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWSkgfHwKLSAgICAgICAgICAgICh0eXBlID09IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHx8Ci0gICAgICAgICAgICAodHlwZSA9PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHx8Ci0gICAgICAgICAgICAodHlwZSA9PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpKSB7Ci0gICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgPSB0YXJnZXQtPkdldE5hbWUoKTsKLSAgICAgICAgICBpZiAoZW1pdHRlZFRhcmdldHMuaW5zZXJ0KG5hbWUpLnNlY29uZCkgewotICAgICAgICAgICAgcGF0aCA9IGNtU3RyQ2F0KCIuLi4gIiwgbmFtZSk7Ci0gICAgICAgICAgICBsZy0+QXBwZW5kRWNobyhjb21tYW5kcywgcGF0aCk7Ci0gICAgICAgICAgfQorICAgICAgICAgICAgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkpIHsKKyAgICAgICAgICBwcm9qZWN0X3RhcmdldHMuaW5zZXJ0KHRhcmdldC0+R2V0TmFtZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgeworICAgICAgICAgIGdsb2JhbHNfdGFyZ2V0cy5pbnNlcnQodGFyZ2V0LT5HZXROYW1lKCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpVVElMSVRZKSB7CisgICAgICAgICAgdXRpbGl0eV90YXJnZXRzLmluc2VydCh0YXJnZXQtPkdldE5hbWUoKSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KKworICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lIDogZ2xvYmFsc190YXJnZXRzKSB7CisgICAgcGF0aCA9IGNtU3RyQ2F0KCIuLi4gIiwgbmFtZSk7CisgICAgbGctPkFwcGVuZEVjaG8oY29tbWFuZHMsIHBhdGgpOworICB9CisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgOiB1dGlsaXR5X3RhcmdldHMpIHsKKyAgICBwYXRoID0gY21TdHJDYXQoIi4uLiAiLCBuYW1lKTsKKyAgICBsZy0+QXBwZW5kRWNobyhjb21tYW5kcywgcGF0aCk7CisgIH0KKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IHByb2plY3RfdGFyZ2V0cykgeworICAgIHBhdGggPSBjbVN0ckNhdCgiLi4uICIsIG5hbWUpOworICAgIGxnLT5BcHBlbmRFY2hvKGNvbW1hbmRzLCBwYXRoKTsKKyAgfQorCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG8gOiBsZy0+R2V0TG9jYWxIZWxwKCkpIHsKICAgICBwYXRoID0gY21TdHJDYXQoIi4uLiAiLCBvKTsKICAgICBsZy0+QXBwZW5kRWNobyhjb21tYW5kcywgcGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmggYi9Tb3VyY2UvY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmgKaW5kZXggNzlkYjMwZS4uMWNhYTRiNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtNjEsMTIgKzYyLDE5IEBACiB7CiBwdWJsaWM6CiAgIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyhjbWFrZSogY20pOwotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCkKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKQogICB7Ci0gICAgcmV0dXJuIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Ci0gICAgICBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KCk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KAorICAgICAgbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KCkpOwogICB9CiAKKyAgfmNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMygpIG92ZXJyaWRlOworCisgIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyhjb25zdCBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMmKSA9CisgICAgZGVsZXRlOworICBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMmIG9wZXJhdG9yPSgKKyAgICBjb25zdCBjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMmKSA9IGRlbGV0ZTsKKwogICAvLyEgR2V0IHRoZSBuYW1lIGZvciB0aGUgZ2VuZXJhdG9yLgogICBzdGQ6OnN0cmluZyBHZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGUKICAgewpAQCAtODksNyArOTcsOCBAQAogICAvKiogR2V0IHRoZSBkb2N1bWVudGF0aW9uIGVudHJ5IGZvciB0aGlzIGdlbmVyYXRvci4gICovCiAgIHN0YXRpYyB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KTsKIAotICBjbUxvY2FsR2VuZXJhdG9yKiBDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBDcmVhdGVMb2NhbEdlbmVyYXRvcigKKyAgICBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CiAKICAgLyoqCiAgICAqIFRyeSB0byBkZXRlcm1pbmUgc3lzdGVtIGluZm9ybWF0aW9uIHN1Y2ggYXMgc2hhcmVkIGxpYnJhcnkKQEAgLTEwNyw4ICsxMTYsOSBAQAogICAgKi8KICAgdm9pZCBHZW5lcmF0ZSgpIG92ZXJyaWRlOwogCi0gIHZvaWQgV3JpdGVNYWluQ01ha2VmaWxlTGFuZ3VhZ2VSdWxlcyhjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGNtYWtlZmlsZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiYpOworICB2b2lkIFdyaXRlTWFpbkNNYWtlZmlsZUxhbmd1YWdlUnVsZXMoCisgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbWFrZWZpbGVTdHJlYW0sCisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+PiYpOwogCiAgIC8vIHdyaXRlIG91dCB0aGUgaGVscCBydWxlIGxpc3RpbmcgdGhlIHZhbGlkIHRhcmdldHMKICAgdm9pZCBXcml0ZUhlbHBSdWxlKHN0ZDo6b3N0cmVhbSYgcnVsZUZpbGVTdHJlYW0sCkBAIC0xMjYsNiArMTM2LDEyIEBACiAgICAgICBvciBkZXBlbmRlbmNpZXMuICAqLwogICBzdGQ6OnN0cmluZyBHZXRFbXB0eVJ1bGVIYWNrRGVwZW5kcygpIHsgcmV0dXJuIHRoaXMtPkVtcHR5UnVsZUhhY2tEZXBlbmRzOyB9CiAKKyAgLyoqCisgICAqIENvbnZlcnQgYSBmaWxlIHBhdGggdG8gYSBNYWtlZmlsZSB0YXJnZXQgb3IgZGVwZW5kZW5jeSB3aXRoCisgICAqIGVzY2FwaW5nIGFuZCBxdW90aW5nIHN1aXRhYmxlIGZvciB0aGUgZ2VuZXJhdG9yJ3MgbWFrZSB0b29sLgorICAgKi8KKyAgc3RkOjpzdHJpbmcgQ29udmVydFRvTWFrZWZpbGVQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBwYXRoKSBjb25zdDsKKwogICAvLyBjaGFuZ2UgdGhlIGJ1aWxkIGNvbW1hbmQgZm9yIHNwZWVkCiAgIHN0ZDo6dmVjdG9yPEdlbmVyYXRlZE1ha2VDb21tYW5kPiBHZW5lcmF0ZUJ1aWxkQ29tbWFuZCgKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFrZVByb2dyYW0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9qZWN0TmFtZSwKQEAgLTE0Nyw2ICsxNjMsOSBAQAogICAvKiogRG9lcyB0aGUgbWFrZSB0b29sIHRvbGVyYXRlIC5ERUxFVEVfT05fRVJST1I/ICovCiAgIHZpcnR1YWwgYm9vbCBBbGxvd0RlbGV0ZU9uRXJyb3IoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgLyoqIERvZXMgdGhlIG1ha2UgdG9vbCBpbnRlcnByZXQgJ1wjJyBhcyAnIyc/ICAqLworICB2aXJ0dWFsIGJvb2wgQ2FuRXNjYXBlT2N0b3Rob3JwZSgpIGNvbnN0OworCiAgIGJvb2wgSXNJUE9TdXBwb3J0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgdm9pZCBDb21wdXRlVGFyZ2V0T2JqZWN0RGlyZWN0b3J5KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xNjEsNyArMTgwLDcgQEAKICAgdm9pZCBXcml0ZU1haW5DTWFrZWZpbGUoKTsKIAogICB2b2lkIFdyaXRlQ29udmVuaWVuY2VSdWxlczIoc3RkOjpvc3RyZWFtJiBydWxlRmlsZVN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyYpOwogCiAgIHZvaWQgV3JpdGVEaXJlY3RvcnlSdWxlMihzdGQ6Om9zdHJlYW0mIHJ1bGVGaWxlU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5VGFyZ2V0IGNvbnN0JiBkdCwgY29uc3QgY2hhciogcGFzcywKQEAgLTIyNyw5ICsyNDYsOSBAQAogICBzaXplX3QgQ291bnRQcm9ncmVzc01hcmtzSW5UYXJnZXQoCiAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKICAgICBzdGQ6OnNldDxjbUdlbmVyYXRvclRhcmdldCBjb25zdCo+JiBlbWl0dGVkKTsKLSAgc2l6ZV90IENvdW50UHJvZ3Jlc3NNYXJrc0luQWxsKGNtTG9jYWxHZW5lcmF0b3IqIGxnKTsKKyAgc2l6ZV90IENvdW50UHJvZ3Jlc3NNYXJrc0luQWxsKGNvbnN0IGNtTG9jYWxHZW5lcmF0b3ImIGxnKTsKIAotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0qIENvbW1hbmREYXRhYmFzZTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdGVkRmlsZVN0cmVhbT4gQ29tbWFuZERhdGFiYXNlOwogCiBwcml2YXRlOgogICBjb25zdCBjaGFyKiBHZXRCdWlsZElnbm9yZUVycm9yc0ZsYWcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiLWkiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5jeHgKaW5kZXggZjY0NzJhYi4uMzgwNTU0NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmN4eApAQCAtNCwxMiArNCwxNCBAQAogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCisjaW5jbHVkZSA8Y20zcC9qc29uL3JlYWRlci5oPgorCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvR2xvYi5oeHgiCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF9yZWFkZXIuaCIKLQogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKQEAgLTE3LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtVmVyc2lvbi5oIgogI2luY2x1ZGUgImNtVmlzdWFsU3R1ZGlvU2xuRGF0YS5oIgogI2luY2x1ZGUgImNtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmgiCkBAIC0yNiw2ICsyOSwxNiBAQAogc3RhdGljIGNvbnN0IGNoYXIgdnMxMGdlbmVyYXRvck5hbWVbXSA9ICJWaXN1YWwgU3R1ZGlvIDEwIDIwMTAiOwogc3RhdGljIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxjbUlERUZsYWdUYWJsZT4+IGxvYWRlZEZsYWdKc29uRmlsZXM7CiAKK3N0YXRpYyB2b2lkIENvbnZlcnRUb1dpbmRvd3NTbGFzaGVzKHN0ZDo6c3RyaW5nJiBzKQoreworICAvLyBmaXJzdCBjb252ZXJ0IGFsbCBvZiB0aGUgc2xhc2hlcworICBmb3IgKGF1dG8mIGNoIDogcykgeworICAgIGlmIChjaCA9PSAnLycpIHsKKyAgICAgIGNoID0gJ1xcJzsKKyAgICB9CisgIH0KK30KKwogLy8gTWFwIGdlbmVyYXRvciBuYW1lIHdpdGhvdXQgeWVhciB0byBuYW1lIHdpdGggeWVhci4KIHN0YXRpYyBjb25zdCBjaGFyKiBjbVZTMTBHZW5OYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBzdGQ6OnN0cmluZyYgZ2VuTmFtZSkKIHsKQEAgLTQ1LDI3ICs1OCwzMCBAQAogICA6IHB1YmxpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkKIHsKIHB1YmxpYzoKLSAgY21HbG9iYWxHZW5lcmF0b3IqIENyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCiAgIHsKICAgICBzdGQ6OnN0cmluZyBnZW5OYW1lOwogICAgIGNvbnN0IGNoYXIqIHAgPSBjbVZTMTBHZW5OYW1lKG5hbWUsIGdlbk5hbWUpOwogICAgIGlmICghcCkgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoISpwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IoY20sIGdlbk5hbWUsICIiKTsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIiIpKTsKICAgICB9CiAgICAgaWYgKCpwKysgIT0gJyAnKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIldpbjY0IikgPT0gMCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAieDY0Iik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJ4NjQiKSk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIklBNjQiKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJJdGFuaXVtIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJJdGFuaXVtIikpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICB9CiAKICAgdm9pZCBHZXREb2N1bWVudGF0aW9uKGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSkgY29uc3Qgb3ZlcnJpZGUKQEAgLTEwNSw5ICsxMjEsMTAgQEAKICAgc3RkOjpzdHJpbmcgR2V0RGVmYXVsdFBsYXRmb3JtTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJXaW4zMiI7IH0KIH07CiAKLWNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6TmV3RmFjdG9yeSgpCitzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PgorY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6TmV3RmFjdG9yeSgpCiB7Ci0gIHJldHVybiBuZXcgRmFjdG9yeTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KG5ldyBGYWN0b3J5KTsKIH0KIAogY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6Y21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcigKQEAgLTEyMSw5ICsxMzgsNiBAQAogICAgICJQcm9kdWN0RGlyIiwKICAgICB2YzEwRXhwcmVzcywgY21TeXN0ZW1Ub29sczo6S2V5V09XNjRfMzIpOwogICB0aGlzLT5DdWRhRW5hYmxlZCA9IGZhbHNlOwotICB0aGlzLT5TeXN0ZW1Jc1dpbmRvd3NDRSA9IGZhbHNlOwotICB0aGlzLT5TeXN0ZW1Jc1dpbmRvd3NQaG9uZSA9IGZhbHNlOwotICB0aGlzLT5TeXN0ZW1Jc1dpbmRvd3NTdG9yZSA9IGZhbHNlOwogICB0aGlzLT5NU0J1aWxkQ29tbWFuZEluaXRpYWxpemVkID0gZmFsc2U7CiAgIHsKICAgICBzdGQ6OnN0cmluZyBlbnZQbGF0Zm9ybVRvb2xzZXQ7CkBAIC0xOTMsNyArMjA3LDcgQEAKIH0KIAogYm9vbCBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yOjpTZXRHZW5lcmF0b3JUb29sc2V0KAotICBzdGQ6OnN0cmluZyBjb25zdCYgdHMsIGNtTWFrZWZpbGUqIG1mKQorICBzdGQ6OnN0cmluZyBjb25zdCYgdHMsIGJvb2wgYnVpbGQsIGNtTWFrZWZpbGUqIG1mKQogewogICBpZiAodGhpcy0+U3lzdGVtSXNXaW5kb3dzQ0UgJiYgdHMuZW1wdHkoKSAmJgogICAgICAgdGhpcy0+RGVmYXVsdFBsYXRmb3JtVG9vbHNldC5lbXB0eSgpKSB7CkBAIC0yMDgsNyArMjIyLDExIEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgaWYgKCF0aGlzLT5GaW5kVkNUYXJnZXRzUGF0aChtZikpIHsKKyAgaWYgKGJ1aWxkKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBpZiAodGhpcy0+Q3VzdG9tVkNUYXJnZXRzUGF0aC5lbXB0eSgpICYmICF0aGlzLT5GaW5kVkNUYXJnZXRzUGF0aChtZikpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIApAQCAtMjkzLDcgKzMxMSw3IEBACiAgICAgICB2ZXJzaW9uLmNsZWFyKCk7CiAgICAgfQogCi0gICAgaWYgKHZlcnNpb24uZmluZCh0aGlzLT5HZXRQbGF0Zm9ybVRvb2xzZXRTdHJpbmcoKSkgIT0gMCkgeworICAgIGlmICghY21IYXNQcmVmaXgodmVyc2lvbiwgdGhpcy0+R2V0UGxhdGZvcm1Ub29sc2V0U3RyaW5nKCkpKSB7CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgICAgIGUgPDwKQEAgLTM1NSw2ICszNzMsMTEgQEAKICAgaWYgKGNvbnN0IGNoYXIqIGN1ZGFEaXIgPSB0aGlzLT5HZXRQbGF0Zm9ybVRvb2xzZXRDdWRhQ3VzdG9tRGlyKCkpIHsKICAgICBtZi0+QWRkRGVmaW5pdGlvbigiQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9DVURBX0NVU1RPTV9ESVIiLCBjdWRhRGlyKTsKICAgfQorICBpZiAoY29uc3QgY2hhciogdmNUYXJnZXRzRGlyID0gdGhpcy0+R2V0Q3VzdG9tVkNUYXJnZXRzUGF0aCgpKSB7CisgICAgbWYtPkFkZERlZmluaXRpb24oIkNNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfVkNUQVJHRVRTX0NVU1RPTV9ESVIiLAorICAgICAgICAgICAgICAgICAgICAgIHZjVGFyZ2V0c0Rpcik7CisgIH0KKwogICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDQ4LDYgKzQ3MSwxMSBAQAogICAgIHRoaXMtPkdlbmVyYXRvclRvb2xzZXRWZXJzaW9uID0gdmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KKyAgaWYgKGtleSA9PSAiVkNUYXJnZXRzUGF0aCIpIHsKKyAgICB0aGlzLT5DdXN0b21WQ1RhcmdldHNQYXRoID0gdmFsdWU7CisgICAgQ29udmVydFRvV2luZG93c1NsYXNoZXModGhpcy0+Q3VzdG9tVkNUYXJnZXRzUGF0aCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC00ODAsMTggKzUwOCwxNiBAQAogICAgICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBzdGQ6OnN0cmluZyB2ID0gdGhpcy0+R2V0SW5zdGFsbGVkTnNpZ2h0VGVncmFWZXJzaW9uKCk7Ci0gICAgaWYgKHYuZW1wdHkoKSkgewotICAgICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICJDTUFLRV9TWVNURU1fTkFNRSBpcyAnQW5kcm9pZCcgYnV0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgIidOVklESUEgTnNpZ2h0IFRlZ3JhIFZpc3VhbCBTdHVkaW8gRWRpdGlvbicgIgotICAgICAgICAgICAgICAgICAgICAgICAiaXMgbm90IGluc3RhbGxlZC4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0iKSA9PSAiVGVncmEtQW5kcm9pZCIpIHsKKyAgICAgIGlmICghdGhpcy0+SW5pdGlhbGl6ZVRlZ3JhQW5kcm9pZChtZikpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5TeXN0ZW1Jc0FuZHJvaWQgPSB0cnVlOworICAgICAgaWYgKCF0aGlzLT5Jbml0aWFsaXplQW5kcm9pZChtZikpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQogICAgIH0KLSAgICB0aGlzLT5EZWZhdWx0UGxhdGZvcm1OYW1lID0gIlRlZ3JhLUFuZHJvaWQiOwotICAgIHRoaXMtPkRlZmF1bHRQbGF0Zm9ybVRvb2xzZXQgPSAiRGVmYXVsdCI7Ci0gICAgdGhpcy0+TnNpZ2h0VGVncmFWZXJzaW9uID0gdjsKLSAgICBtZi0+QWRkRGVmaW5pdGlvbigiQ01BS0VfVlNfTnNpZ2h0VGVncmFfVkVSU0lPTiIsIHYpOwogICB9CiAKICAgcmV0dXJuIHRydWU7CkBAIC01MzMsNiArNTU5LDMxIEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yOjpJbml0aWFsaXplVGVncmFBbmRyb2lkKGNtTWFrZWZpbGUqIG1mKQoreworICBzdGQ6OnN0cmluZyB2ID0gdGhpcy0+R2V0SW5zdGFsbGVkTnNpZ2h0VGVncmFWZXJzaW9uKCk7CisgIGlmICh2LmVtcHR5KCkpIHsKKyAgICBtZi0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICJDTUFLRV9TWVNURU1fTkFNRSBpcyAnQW5kcm9pZCcgYnV0ICIKKyAgICAgICAgICAgICAgICAgICAgICInTlZJRElBIE5zaWdodCBUZWdyYSBWaXN1YWwgU3R1ZGlvIEVkaXRpb24nICIKKyAgICAgICAgICAgICAgICAgICAgICJpcyBub3QgaW5zdGFsbGVkLiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICB0aGlzLT5EZWZhdWx0UGxhdGZvcm1OYW1lID0gIlRlZ3JhLUFuZHJvaWQiOworICB0aGlzLT5EZWZhdWx0UGxhdGZvcm1Ub29sc2V0ID0gIkRlZmF1bHQiOworICB0aGlzLT5Oc2lnaHRUZWdyYVZlcnNpb24gPSB2OworICBtZi0+QWRkRGVmaW5pdGlvbigiQ01BS0VfVlNfTnNpZ2h0VGVncmFfVkVSU0lPTiIsIHYpOworICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yOjpJbml0aWFsaXplQW5kcm9pZChjbU1ha2VmaWxlKiBtZikKK3sKKyAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgIGUgPDwgdGhpcy0+R2V0TmFtZSgpIDw8ICIgZG9lcyBub3Qgc3VwcG9ydCBBbmRyb2lkLiI7CisgIG1mLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OlNlbGVjdFdpbmRvd3NQaG9uZVRvb2xzZXQoCiAgIHN0ZDo6c3RyaW5nJiB0b29sc2V0KSBjb25zdAogewpAQCAtNTU2LDE2ICs2MDcsMzkgQEAKIH0KIAogLy8hIENyZWF0ZSBhIGxvY2FsIGdlbmVyYXRvciBhcHByb3ByaWF0ZSB0byB0aGlzIEdsb2JhbCBHZW5lcmF0b3IKLWNtTG9jYWxHZW5lcmF0b3IqIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKAotICBjbU1ha2VmaWxlKiBtZikKK3N0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPgorY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6Q3JlYXRlTG9jYWxHZW5lcmF0b3IoY21NYWtlZmlsZSogbWYpCiB7Ci0gIHJldHVybiBuZXcgY21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yKHRoaXMsIG1mKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yPih0aGlzLCBtZikpOwogfQogCiB2b2lkIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OkdlbmVyYXRlKCkKIHsKICAgdGhpcy0+TG9uZ2VzdFNvdXJjZSA9IExvbmdlc3RTb3VyY2VQYXRoKCk7CiAgIHRoaXMtPmNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvcjo6R2VuZXJhdGUoKTsKKyAgaWYgKCF0aGlzLT5BbmRyb2lkRXhlY3V0YWJsZVdhcm5pbmdzLmVtcHR5KCkgJiYKKyAgICAgICF0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRJc0luVHJ5Q29tcGlsZSgpKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIGUgPDwKKyAgICAgICJZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgIgorICAgICAgInN0YW5kYWxvbmUgZXhlY3V0YWJsZXMuIEhvd2V2ZXIsIHRoZSBmb2xsb3dpbmcgZXhlY3V0YWJsZSB0YXJnZXRzIGRvICIKKyAgICAgICJub3QgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyAiCisgICAgICAiZXhwZWN0ZWQuIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSAiCisgICAgICAiZmlsZW5hbWVzOlxuIgorICAgICAgIiAgIjsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyAgICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIG5hbWUgOiB0aGlzLT5BbmRyb2lkRXhlY3V0YWJsZVdhcm5pbmdzKSB7CisgICAgICBpZiAoIWZpcnN0KSB7CisgICAgICAgIGUgPDwgIiwgIjsKKyAgICAgIH0KKyAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICBlIDw8IG5hbWU7CisgICAgfQorICAgIHRoaXMtPkNNYWtlSW5zdGFuY2UtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6V0FSTklORywgZS5zdHIoKSk7CisgIH0KICAgaWYgKHRoaXMtPkxvbmdlc3RTb3VyY2UuTGVuZ3RoID4gMCkgewogICAgIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0gdGhpcy0+TG9uZ2VzdFNvdXJjZS5UYXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CkBAIC01OTAsNyArNjY0LDcgQEAKICAgICAgICJUbyBhdm9pZCB0aGlzIHByb2JsZW0gQ01ha2UgbXVzdCB1c2UgYSBmdWxsIHBhdGggZm9yIHRoaXMgZmlsZSAiCiAgICAgICAid2hpY2ggdGhlbiB0cmlnZ2VycyB0aGUgVlMgMTAgcHJvcGVydHkgZGlhbG9nIGJ1Zy4iOwogICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotICAgIGxnLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OldBUk5JTkcsIGUuc3RyKCkuY19zdHIoKSk7CisgICAgbGctPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6V0FSTklORywgZS5zdHIoKSk7CiAgIH0KIH0KIApAQCAtNjA5LDYgKzY4MywxNCBAQAogICBjbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3I6OkVuYWJsZUxhbmd1YWdlKGxhbmcsIG1mLCBvcHRpb25hbCk7CiB9CiAKK2NvbnN0IGNoYXIqIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OkdldEN1c3RvbVZDVGFyZ2V0c1BhdGgoKSBjb25zdAoreworICBpZiAodGhpcy0+Q3VzdG9tVkNUYXJnZXRzUGF0aC5lbXB0eSgpKSB7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKyAgcmV0dXJuIHRoaXMtPkN1c3RvbVZDVGFyZ2V0c1BhdGguY19zdHIoKTsKK30KKwogY29uc3QgY2hhciogY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6R2V0UGxhdGZvcm1Ub29sc2V0KCkgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgY29uc3QmIHRvb2xzZXQgPSB0aGlzLT5HZXRQbGF0Zm9ybVRvb2xzZXRTdHJpbmcoKTsKQEAgLTYyNCw4ICs3MDYsMTQgQEAKICAgaWYgKCF0aGlzLT5HZW5lcmF0b3JUb29sc2V0LmVtcHR5KCkpIHsKICAgICByZXR1cm4gdGhpcy0+R2VuZXJhdG9yVG9vbHNldDsKICAgfQotICBpZiAoIXRoaXMtPkRlZmF1bHRQbGF0Zm9ybVRvb2xzZXQuZW1wdHkoKSkgewotICAgIHJldHVybiB0aGlzLT5EZWZhdWx0UGxhdGZvcm1Ub29sc2V0OworICBpZiAodGhpcy0+U3lzdGVtSXNBbmRyb2lkKSB7CisgICAgaWYgKCF0aGlzLT5EZWZhdWx0QW5kcm9pZFRvb2xzZXQuZW1wdHkoKSkgeworICAgICAgcmV0dXJuIHRoaXMtPkRlZmF1bHRBbmRyb2lkVG9vbHNldDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKCF0aGlzLT5EZWZhdWx0UGxhdGZvcm1Ub29sc2V0LmVtcHR5KCkpIHsKKyAgICAgIHJldHVybiB0aGlzLT5EZWZhdWx0UGxhdGZvcm1Ub29sc2V0OworICAgIH0KICAgfQogICBzdGF0aWMgc3RkOjpzdHJpbmcgY29uc3QgZW1wdHk7CiAgIHJldHVybiBlbXB0eTsKQEAgLTgwMyw3ICs4OTEsNyBAQAogICAvLyBQcmVwYXJlIHRoZSB3b3JrIGRpcmVjdG9yeS4KICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KHdkKSkgewogICAgIHN0ZDo6c3RyaW5nIGUgPSAiRmFpbGVkIHRvIG1ha2UgZGlyZWN0b3J5OlxuICAiICsgd2Q7Ci0gICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuY19zdHIoKSk7CisgICAgbWYtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUpOwogICAgIGNtU3lzdGVtVG9vbHM6OlNldEZhdGFsRXJyb3JPY2N1cmVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC04MzksNyArOTI3LDEwIEBACiAgICAgICBlcGcuQXR0cmlidXRlKCJMYWJlbCIsICJHbG9iYWxzIik7CiAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiUHJvamVjdEd1aWQiKQogICAgICAgICAuQ29udGVudCgie0YzRkM2RDg2LTUwOEQtM0ZCMS05NkQyLTk5NUYwOEIxNDJFQ30iKTsKLSAgICAgIGNtWE1MRWxlbWVudChlcGcsICJLZXl3b3JkIikuQ29udGVudCgiV2luMzJQcm9qIik7CisgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiS2V5d29yZCIpCisgICAgICAgIC5Db250ZW50KG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfU1lTVEVNX05BTUUiKSA9PSAiQW5kcm9pZCIKKyAgICAgICAgICAgICAgICAgICA/ICJBbmRyb2lkIgorICAgICAgICAgICAgICAgICAgIDogIldpbjMyUHJvaiIpOwogICAgICAgY21YTUxFbGVtZW50KGVwZywgIlBsYXRmb3JtIikuQ29udGVudCh0aGlzLT5HZXRQbGF0Zm9ybU5hbWUoKSk7CiAgICAgICBpZiAodGhpcy0+R2V0U3lzdGVtTmFtZSgpID09ICJXaW5kb3dzUGhvbmUiKSB7CiAgICAgICAgIGNtWE1MRWxlbWVudChlcGcsICJBcHBsaWNhdGlvblR5cGUiKS5Db250ZW50KCJXaW5kb3dzIFBob25lIik7CkBAIC04NDksMTUgKzk0MCwyMSBAQAogICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiQXBwbGljYXRpb25UeXBlIikuQ29udGVudCgiV2luZG93cyBTdG9yZSIpOwogICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiQXBwbGljYXRpb25UeXBlUmV2aXNpb24iKQogICAgICAgICAgIC5Db250ZW50KHRoaXMtPkdldEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uKCkpOworICAgICAgfSBlbHNlIGlmICh0aGlzLT5HZXRTeXN0ZW1OYW1lKCkgPT0gIkFuZHJvaWQiKSB7CisgICAgICAgIGNtWE1MRWxlbWVudChlcGcsICJBcHBsaWNhdGlvblR5cGUiKS5Db250ZW50KCJBbmRyb2lkIik7CisgICAgICAgIGNtWE1MRWxlbWVudChlcGcsICJBcHBsaWNhdGlvblR5cGVSZXZpc2lvbiIpCisgICAgICAgICAgLkNvbnRlbnQodGhpcy0+R2V0QXBwbGljYXRpb25UeXBlUmV2aXNpb24oKSk7CiAgICAgICB9CiAgICAgICBpZiAoIXRoaXMtPldpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNpb24uZW1wdHkoKSkgewogICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbiIpCiAgICAgICAgICAgLkNvbnRlbnQodGhpcy0+V2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbik7CiAgICAgICB9Ci0gICAgICBpZiAodGhpcy0+R2V0UGxhdGZvcm1OYW1lKCkgPT0gIkFSTTY0IikgewotICAgICAgICBjbVhNTEVsZW1lbnQoZXBnLCAiV2luZG93c1NES0Rlc2t0b3BBUk02NFN1cHBvcnQiKS5Db250ZW50KCJ0cnVlIik7Ci0gICAgICB9IGVsc2UgaWYgKHRoaXMtPkdldFBsYXRmb3JtTmFtZSgpID09ICJBUk0iKSB7Ci0gICAgICAgIGNtWE1MRWxlbWVudChlcGcsICJXaW5kb3dzU0RLRGVza3RvcEFSTVN1cHBvcnQiKS5Db250ZW50KCJ0cnVlIik7CisgICAgICBpZiAodGhpcy0+R2V0U3lzdGVtTmFtZSgpICE9ICJBbmRyb2lkIikgeworICAgICAgICBpZiAodGhpcy0+R2V0UGxhdGZvcm1OYW1lKCkgPT0gIkFSTTY0IikgeworICAgICAgICAgIGNtWE1MRWxlbWVudChlcGcsICJXaW5kb3dzU0RLRGVza3RvcEFSTTY0U3VwcG9ydCIpLkNvbnRlbnQoInRydWUiKTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLT5HZXRQbGF0Zm9ybU5hbWUoKSA9PSAiQVJNIikgeworICAgICAgICAgIGNtWE1MRWxlbWVudChlcGcsICJXaW5kb3dzU0RLRGVza3RvcEFSTVN1cHBvcnQiKS5Db250ZW50KCJ0cnVlIik7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgICAgY21YTUxFbGVtZW50KGVwcmosICJJbXBvcnQiKQpAQCAtOTI0LDcgKzEwMjEsNyBAQAogICAgIGlmIChyZXQgIT0gMCkgewogICAgICAgZSA8PCAiRXhpdCBjb2RlOiAiIDw8IHJldCA8PCAiXG4iOwogICAgIH0KLSAgICBtZi0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKS5jX3N0cigpKTsKKyAgICBtZi0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CiAgICAgY21TeXN0ZW1Ub29sczo6U2V0RmF0YWxFcnJvck9jY3VyZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KQEAgLTEwOTgsOCArMTE5NSw3IEBACiAgIC8vIEhpZGUgdGhlbSBhd2F5IHVuZGVyIHRoZSBDTWFrZUZpbGVzIGRpcmVjdG9yeS4KICAgc3RkOjpzdHJpbmcgcnVsZURpciA9IGNtU3RyQ2F0KAogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpLCAiL0NNYWtlRmlsZXMvIiwKLSAgICBjbVN5c3RlbVRvb2xzOjpDb21wdXRlU3RyaW5nTUQ1KAotICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKG91dHB1dCkuY19zdHIoKSkpOworICAgIGNtU3lzdGVtVG9vbHM6OkNvbXB1dGVTdHJpbmdNRDUoY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKG91dHB1dCkpKTsKICAgc3RkOjpzdHJpbmcgcnVsZUZpbGUgPQogICAgIGNtU3RyQ2F0KHJ1bGVEaXIsICcvJywgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKG91dHB1dCksICIucnVsZSIpOwogICByZXR1cm4gcnVsZUZpbGU7CkBAIC0xMTcwLDYgKzEyNjYsMTAgQEAKIAogc3RkOjpzdHJpbmcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6R2V0QXBwbGljYXRpb25UeXBlUmV2aXNpb24oKSBjb25zdAogeworICBpZiAodGhpcy0+R2V0U3lzdGVtTmFtZSgpID09ICJBbmRyb2lkIikgeworICAgIHJldHVybiB0aGlzLT5HZXRBbmRyb2lkQXBwbGljYXRpb25UeXBlUmV2aXNpb24oKTsKKyAgfQorCiAgIC8vIFJldHVybiB0aGUgZmlyc3QgdHdvICcuJy1zZXBhcmF0ZWQgY29tcG9uZW50cyBvZiB0aGUgV2luZG93cyB2ZXJzaW9uLgogICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZDEgPSB0aGlzLT5TeXN0ZW1WZXJzaW9uLmZpbmQoJy4nKTsKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQyID0KQEAgLTEyOTMsNyArMTM5Myw3IEBACiAgICAgZSA8PCAiSlNPTiBmbGFnIHRhYmxlIFwiIiA8PCBmaWxlbmFtZSA8PAogICAgICAgIlwiIGNvdWxkIG5vdCBiZSBsb2FkZWQuXG4iOwogICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotICAgIG1mLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpLmNfc3RyKCkpOworICAgIG1mLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKICAgfQogICByZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmgKaW5kZXggNTZmMTE5My4uMGM1MzUzNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oCkBAIC0zLDYgKzMsOSBAQAogI2lmbmRlZiBjbUdsb2JhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yX2gKICNkZWZpbmUgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcl9oCiAKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c2V0PgorCiAjaW5jbHVkZSAiY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21WaXN1YWxTdHVkaW8xMFRvb2xzZXRPcHRpb25zLmgiCiAKQEAgLTE0LDEzICsxNywxNCBAQAogY2xhc3MgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvciA6IHB1YmxpYyBjbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IKIHsKIHB1YmxpYzoKLSAgc3RhdGljIGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogTmV3RmFjdG9yeSgpOworICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpOwogCiAgIGJvb2wgTWF0Y2hlc0dlbmVyYXRvck5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0IG92ZXJyaWRlOwogCiAgIGJvb2wgU2V0U3lzdGVtTmFtZShzdGQ6OnN0cmluZyBjb25zdCYgcywgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwogICBib29sIFNldEdlbmVyYXRvclBsYXRmb3JtKHN0ZDo6c3RyaW5nIGNvbnN0JiBwLCBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7Ci0gIGJvb2wgU2V0R2VuZXJhdG9yVG9vbHNldChzdGQ6OnN0cmluZyBjb25zdCYgdHMsIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKKyAgYm9vbCBTZXRHZW5lcmF0b3JUb29sc2V0KHN0ZDo6c3RyaW5nIGNvbnN0JiB0cywgYm9vbCBidWlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKIAogICBzdGQ6OnZlY3RvcjxHZW5lcmF0ZWRNYWtlQ29tbWFuZD4gR2VuZXJhdGVCdWlsZENvbW1hbmQoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1ha2VQcm9ncmFtLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvamVjdE5hbWUsCkBAIC0zMCw3ICszNCw4IEBACiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSkgb3ZlcnJpZGU7CiAKICAgLy8hIGNyZWF0ZSB0aGUgY29ycmVjdCBsb2NhbCBnZW5lcmF0b3IKLSAgY21Mb2NhbEdlbmVyYXRvciogQ3JlYXRlTG9jYWxHZW5lcmF0b3IoY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4gQ3JlYXRlTG9jYWxHZW5lcmF0b3IoCisgICAgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwogCiAgIC8qKgogICAgKiBUcnkgdG8gZGV0ZXJtaW5lIHN5c3RlbSBpbmZvcm1hdGlvbiBzdWNoIGFzIHNoYXJlZCBsaWJyYXJ5CkBAIC0zOSwxMiArNDQsMjAgQEAKICAgdm9pZCBFbmFibGVMYW5ndWFnZShzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGxhbmd1YWdlcywgY21NYWtlZmlsZSosCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvcHRpb25hbCkgb3ZlcnJpZGU7CiAKKyAgdm9pZCBBZGRBbmRyb2lkRXhlY3V0YWJsZVdhcm5pbmcoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCisgIHsKKyAgICB0aGlzLT5BbmRyb2lkRXhlY3V0YWJsZVdhcm5pbmdzLmluc2VydChuYW1lKTsKKyAgfQorCiAgIGJvb2wgSXNDdWRhRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkN1ZGFFbmFibGVkOyB9CiAKICAgLyoqIEdlbmVyYXRpbmcgZm9yIE5zaWdodCBUZWdyYSBWUyBwbHVnaW4/ICAqLwogICBib29sIElzTnNpZ2h0VGVncmEoKSBjb25zdDsKICAgc3RkOjpzdHJpbmcgR2V0TnNpZ2h0VGVncmFWZXJzaW9uKCkgY29uc3Q7CiAKKyAgLyoqIFRoZSB2Y3RhcmdldHMgcGF0aCBmb3IgdGhlIHRhcmdldCBwbGF0Zm9ybS4gICovCisgIGNvbnN0IGNoYXIqIEdldEN1c3RvbVZDVGFyZ2V0c1BhdGgoKSBjb25zdDsKKwogICAvKiogVGhlIHRvb2xzZXQgbmFtZSBmb3IgdGhlIHRhcmdldCBwbGF0Zm9ybS4gICovCiAgIGNvbnN0IGNoYXIqIEdldFBsYXRmb3JtVG9vbHNldCgpIGNvbnN0OwogICBzdGQ6OnN0cmluZyBjb25zdCYgR2V0UGxhdGZvcm1Ub29sc2V0U3RyaW5nKCkgY29uc3Q7CkBAIC05Myw2ICsxMDYsOSBAQAogICAvKiogUmV0dXJuIHRydWUgaWYgYnVpbGRpbmcgZm9yIFdpbmRvd3NTdG9yZSAqLwogICBib29sIFRhcmdldHNXaW5kb3dzU3RvcmUoKSBjb25zdCB7IHJldHVybiB0aGlzLT5TeXN0ZW1Jc1dpbmRvd3NTdG9yZTsgfQogCisgIC8qKiBSZXR1cm4gdHJ1ZSBpZiBidWlsZGluZyBmb3IgQW5kcm9pZCAqLworICBib29sIFRhcmdldHNBbmRyb2lkKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+U3lzdGVtSXNBbmRyb2lkOyB9CisKICAgY29uc3QgY2hhciogR2V0Q01ha2VDRkdJbnREaXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiJChDb25maWd1cmF0aW9uKSI7IH0KICAgYm9vbCBGaW5kNjRCaXRUb29scyhjbU1ha2VmaWxlKiBtZik7CiAKQEAgLTExNCwxMSArMTMwLDE1IEBACiAKICAgYm9vbCBJc0lQT1N1cHBvcnRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICB2aXJ0dWFsIGJvb2wgSXNTdGRPdXRFbmNvZGluZ1N1cHBvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldEluc3RhbGxlZE5zaWdodFRlZ3JhVmVyc2lvbigpOwogCiAgIC8qKiBSZXR1cm4gdGhlIGZpcnN0IHR3byBjb21wb25lbnRzIG9mIENNQUtFX1NZU1RFTV9WRVJTSU9OLiAgKi8KICAgc3RkOjpzdHJpbmcgR2V0QXBwbGljYXRpb25UeXBlUmV2aXNpb24oKSBjb25zdDsKIAorICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldEFuZHJvaWRBcHBsaWNhdGlvblR5cGVSZXZpc2lvbigpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisKICAgY21JREVGbGFnVGFibGUgY29uc3QqIEdldENsRmxhZ1RhYmxlKCkgY29uc3Q7CiAgIGNtSURFRmxhZ1RhYmxlIGNvbnN0KiBHZXRDU2hhcnBGbGFnVGFibGUoKSBjb25zdDsKICAgY21JREVGbGFnVGFibGUgY29uc3QqIEdldFJjRmxhZ1RhYmxlKCkgY29uc3Q7CkBAIC0xMzksNiArMTU5LDggQEAKICAgdmlydHVhbCBib29sIEluaXRpYWxpemVXaW5kb3dzQ0UoY21NYWtlZmlsZSogbWYpOwogICB2aXJ0dWFsIGJvb2wgSW5pdGlhbGl6ZVdpbmRvd3NQaG9uZShjbU1ha2VmaWxlKiBtZik7CiAgIHZpcnR1YWwgYm9vbCBJbml0aWFsaXplV2luZG93c1N0b3JlKGNtTWFrZWZpbGUqIG1mKTsKKyAgdmlydHVhbCBib29sIEluaXRpYWxpemVUZWdyYUFuZHJvaWQoY21NYWtlZmlsZSogbWYpOworICB2aXJ0dWFsIGJvb2wgSW5pdGlhbGl6ZUFuZHJvaWQoY21NYWtlZmlsZSogbWYpOwogCiAgIHZpcnR1YWwgYm9vbCBQcm9jZXNzR2VuZXJhdG9yVG9vbHNldEZpZWxkKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSk7CkBAIC0xNTcsMTAgKzE3OSwxMiBAQAogICBzdGQ6OnN0cmluZyBHZW5lcmF0b3JUb29sc2V0OwogICBzdGQ6OnN0cmluZyBHZW5lcmF0b3JUb29sc2V0VmVyc2lvbjsKICAgc3RkOjpzdHJpbmcgR2VuZXJhdG9yVG9vbHNldEhvc3RBcmNoaXRlY3R1cmU7CisgIHN0ZDo6c3RyaW5nIEdlbmVyYXRvclRvb2xzZXRDdXN0b21WQ1RhcmdldHNEaXI7CiAgIHN0ZDo6c3RyaW5nIEdlbmVyYXRvclRvb2xzZXRDdWRhOwogICBzdGQ6OnN0cmluZyBHZW5lcmF0b3JUb29sc2V0Q3VkYUN1c3RvbURpcjsKICAgc3RkOjpzdHJpbmcgRGVmYXVsdFBsYXRmb3JtVG9vbHNldDsKICAgc3RkOjpzdHJpbmcgRGVmYXVsdFBsYXRmb3JtVG9vbHNldEhvc3RBcmNoaXRlY3R1cmU7CisgIHN0ZDo6c3RyaW5nIERlZmF1bHRBbmRyb2lkVG9vbHNldDsKICAgc3RkOjpzdHJpbmcgV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbjsKICAgc3RkOjpzdHJpbmcgU3lzdGVtTmFtZTsKICAgc3RkOjpzdHJpbmcgU3lzdGVtVmVyc2lvbjsKQEAgLTE3NSw5ICsxOTksMTAgQEAKICAgc3RkOjpzdHJpbmcgRGVmYXVsdE5hc21GbGFnVGFibGVOYW1lOwogICBzdGQ6OnN0cmluZyBEZWZhdWx0UkNGbGFnVGFibGVOYW1lOwogICBib29sIFN1cHBvcnRzVW5pdHlCdWlsZHMgPSBmYWxzZTsKLSAgYm9vbCBTeXN0ZW1Jc1dpbmRvd3NDRTsKLSAgYm9vbCBTeXN0ZW1Jc1dpbmRvd3NQaG9uZTsKLSAgYm9vbCBTeXN0ZW1Jc1dpbmRvd3NTdG9yZTsKKyAgYm9vbCBTeXN0ZW1Jc1dpbmRvd3NDRSA9IGZhbHNlOworICBib29sIFN5c3RlbUlzV2luZG93c1Bob25lID0gZmFsc2U7CisgIGJvb2wgU3lzdGVtSXNXaW5kb3dzU3RvcmUgPSBmYWxzZTsKKyAgYm9vbCBTeXN0ZW1Jc0FuZHJvaWQgPSBmYWxzZTsKIAogcHJpdmF0ZToKICAgY2xhc3MgRmFjdG9yeTsKQEAgLTIwMSw2ICsyMjYsNyBAQAogICBzdGQ6OnN0cmluZyBNU0J1aWxkQ29tbWFuZDsKICAgYm9vbCBNU0J1aWxkQ29tbWFuZEluaXRpYWxpemVkOwogICBjbVZpc3VhbFN0dWRpbzEwVG9vbHNldE9wdGlvbnMgVG9vbHNldE9wdGlvbnM7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBBbmRyb2lkRXhlY3V0YWJsZVdhcm5pbmdzOwogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEZpbmRNU0J1aWxkQ29tbWFuZCgpOwogICBzdGQ6OnN0cmluZyBGaW5kRGV2RW52Q29tbWFuZCgpIG92ZXJyaWRlOwogICBzdGQ6OnN0cmluZyBHZXRWU01ha2VQcm9ncmFtKCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpcy0+R2V0TVNCdWlsZENvbW1hbmQoKTsgfQpAQCAtMjA5LDYgKzIzNSw3IEBACiAKICAgYm9vbCBQYXJzZUdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBjbU1ha2VmaWxlKiBtZik7CiAKKyAgc3RkOjpzdHJpbmcgQ3VzdG9tVkNUYXJnZXRzUGF0aDsKICAgc3RkOjpzdHJpbmcgVkNUYXJnZXRzUGF0aDsKICAgYm9vbCBGaW5kVkNUYXJnZXRzUGF0aChjbU1ha2VmaWxlKiBtZik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yLmN4eAppbmRleCA0Yjc0ZWYxLi5hMzg1Mzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IuY3h4CkBAIC0yLDYgKzIsOCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8dXRpbGl0eT4KKwogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCiAjaW5jbHVkZSAiY21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmgiCkBAIC0yOCwzOCArMzAsNDEgQEAKICAgOiBwdWJsaWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5CiB7CiBwdWJsaWM6Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQogICB7CiAgICAgc3RkOjpzdHJpbmcgZ2VuTmFtZTsKICAgICBjb25zdCBjaGFyKiBwID0gY21WUzExR2VuTmFtZShuYW1lLCBnZW5OYW1lKTsKICAgICBpZiAoIXApIHsKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgICB9CiAgICAgaWYgKCEqcCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAiIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IoY20sIGdlbk5hbWUsICIiKSk7CiAgICAgfQogICAgIGlmICgqcCsrICE9ICcgJykgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoc3RyY21wKHAsICJXaW42NCIpID09IDApIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIng2NCIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAieDY0IikpOwogICAgIH0KICAgICBpZiAoc3RyY21wKHAsICJBUk0iKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJBUk0iKTsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIkFSTSIpKTsKICAgICB9CiAKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zdGFsbGVkU0RLcyA9CiAgICAgICBjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yOjpHZXRJbnN0YWxsZWRXaW5kb3dzQ0VTREtzKCk7CiAKICAgICBpZiAoaW5zdGFsbGVkU0RLcy5maW5kKHApID09IGluc3RhbGxlZFNES3MuZW5kKCkpIHsKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgICB9CiAKLSAgICBjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yKiByZXQgPQotICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IoY20sIG5hbWUsIHApOworICAgIGF1dG8gcmV0ID0gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3I+KAorICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IoY20sIG5hbWUsIHApKTsKICAgICByZXQtPldpbmRvd3NDRVZlcnNpb24gPSAiOC4wMCI7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPihzdGQ6Om1vdmUocmV0KSk7CiAgIH0KIAogICB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KSBjb25zdCBvdmVycmlkZQpAQCAtMTEzLDkgKzExOCwxMCBAQAogICBzdGQ6OnN0cmluZyBHZXREZWZhdWx0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIldpbjMyIjsgfQogfTsKIAotY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkKK3N0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+CitjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkKIHsKLSAgcmV0dXJuIG5ldyBGYWN0b3J5OworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4obmV3IEZhY3RvcnkpOwogfQogCiBjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yOjpjbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yKApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzExR2VuZXJhdG9yLmgKaW5kZXggZjhjY2UxOC4uNWYxZmY3MyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvci5oCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAKQEAgLTIwLDcgKzIxLDcgQEAKIGNsYXNzIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IgOiBwdWJsaWMgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcgogewogcHVibGljOgotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCk7CisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCk7CiAKICAgYm9vbCBNYXRjaGVzR2VuZXJhdG9yTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yLmN4eAppbmRleCBkOTcwMmM5Li41YTI3OTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IuY3h4CkBAIC0yOCwyNyArMjgsMzAgQEAKICAgOiBwdWJsaWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5CiB7CiBwdWJsaWM6Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQogICB7CiAgICAgc3RkOjpzdHJpbmcgZ2VuTmFtZTsKICAgICBjb25zdCBjaGFyKiBwID0gY21WUzEyR2VuTmFtZShuYW1lLCBnZW5OYW1lKTsKICAgICBpZiAoIXApIHsKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgICB9CiAgICAgaWYgKCEqcCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAiIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IoY20sIGdlbk5hbWUsICIiKSk7CiAgICAgfQogICAgIGlmICgqcCsrICE9ICcgJykgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoc3RyY21wKHAsICJXaW42NCIpID09IDApIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIng2NCIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAieDY0IikpOwogICAgIH0KICAgICBpZiAoc3RyY21wKHAsICJBUk0iKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJBUk0iKTsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIkFSTSIpKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgfQogCiAgIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpIGNvbnN0IG92ZXJyaWRlCkBAIC04OCw5ICs5MSwxMCBAQAogICBzdGQ6OnN0cmluZyBHZXREZWZhdWx0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIldpbjMyIjsgfQogfTsKIAotY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkKK3N0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+CitjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkKIHsKLSAgcmV0dXJuIG5ldyBGYWN0b3J5OworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4obmV3IEZhY3RvcnkpOwogfQogCiBjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yOjpjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yKApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yLmgKaW5kZXggNTNiNzA5MS4uYmRkNDBmZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvci5oCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KIAogI2luY2x1ZGUgImNtR2xvYmFsVmlzdWFsU3R1ZGlvMTFHZW5lcmF0b3IuaCIKQEAgLTE4LDcgKzE5LDcgQEAKIGNsYXNzIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTJHZW5lcmF0b3IgOiBwdWJsaWMgY21HbG9iYWxWaXN1YWxTdHVkaW8xMUdlbmVyYXRvcgogewogcHVibGljOgotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCk7CisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCk7CiAKICAgYm9vbCBNYXRjaGVzR2VuZXJhdG9yTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmN4eAppbmRleCBjZDQ4NDc0Li40NTFkNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IuY3h4CkBAIC0yLDcgKzIsOCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvci5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y20vdmVjdG9yPgorCiAjaW5jbHVkZSAiY21Eb2N1bWVudGF0aW9uRW50cnkuaCIKICNpbmNsdWRlICJjbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC0yOCwyNyArMjksMzAgQEAKICAgOiBwdWJsaWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5CiB7CiBwdWJsaWM6Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQogICB7CiAgICAgc3RkOjpzdHJpbmcgZ2VuTmFtZTsKICAgICBjb25zdCBjaGFyKiBwID0gY21WUzE0R2VuTmFtZShuYW1lLCBnZW5OYW1lKTsKICAgICBpZiAoIXApIHsKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgICB9CiAgICAgaWYgKCEqcCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAiIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IoY20sIGdlbk5hbWUsICIiKSk7CiAgICAgfQogICAgIGlmICgqcCsrICE9ICcgJykgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoc3RyY21wKHAsICJXaW42NCIpID09IDApIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIng2NCIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yKGNtLCBnZW5OYW1lLCAieDY0IikpOwogICAgIH0KICAgICBpZiAoc3RyY21wKHAsICJBUk0iKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IoY20sIGdlbk5hbWUsICJBUk0iKTsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvcihjbSwgZ2VuTmFtZSwgIkFSTSIpKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgfQogCiAgIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpIGNvbnN0IG92ZXJyaWRlCkBAIC04OCw5ICs5MiwxMCBAQAogICBzdGQ6OnN0cmluZyBHZXREZWZhdWx0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIldpbjMyIjsgfQogfTsKIAotY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkKK3N0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+CitjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkKIHsKLSAgcmV0dXJuIG5ldyBGYWN0b3J5OworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4obmV3IEZhY3RvcnkpOwogfQogCiBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yOjpjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yKApAQCAtMTA0LDYgKzEwOSw3IEBACiAgICAgIlByb2R1Y3REaXIiLAogICAgIHZjMTRFeHByZXNzLCBjbVN5c3RlbVRvb2xzOjpLZXlXT1c2NF8zMik7CiAgIHRoaXMtPkRlZmF1bHRQbGF0Zm9ybVRvb2xzZXQgPSAidjE0MCI7CisgIHRoaXMtPkRlZmF1bHRBbmRyb2lkVG9vbHNldCA9ICJDbGFuZ18zXzgiOwogICB0aGlzLT5EZWZhdWx0Q0xGbGFnVGFibGVOYW1lID0gInYxNDAiOwogICB0aGlzLT5EZWZhdWx0Q1NoYXJwRmxhZ1RhYmxlTmFtZSA9ICJ2MTQwIjsKICAgdGhpcy0+RGVmYXVsdExpYkZsYWdUYWJsZU5hbWUgPSAidjE0IjsKQEAgLTE1NCw2ICsxNjAsMTEgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvcjo6SW5pdGlhbGl6ZUFuZHJvaWQoY21NYWtlZmlsZSopCit7CisgIHJldHVybiB0cnVlOworfQorCiBib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3I6OlNlbGVjdFdpbmRvd3MxMFNESyhjbU1ha2VmaWxlKiBtZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVxdWlyZWQpCiB7CkBAIC0yOTksNyArMzEwLDcgQEAKIAogICAvLyBTa2lwIFNES3MgdGhhdCBkbyBub3QgY29udGFpbiA8dW0vd2luZG93cy5oPiBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQKICAgLy8gb25seSB0aGUgVUNSVCBNU0lzIHdlcmUgaW5zdGFsbGVkIGZvciB0aGVtLgotICBjbUVyYXNlSWYoc2RrcywgTm9XaW5kb3dzSCgpKTsKKyAgY206OmVyYXNlX2lmKHNka3MsIE5vV2luZG93c0goKSk7CiAKICAgLy8gT25seSB1c2UgdGhlIGZpbGVuYW1lLCB3aGljaCB3aWxsIGJlIHRoZSBTREsgdmVyc2lvbi4KICAgZm9yIChzdGQ6OnN0cmluZyYgaSA6IHNka3MpIHsKQEAgLTMwOSw3ICszMjAsNyBAQAogICAvLyBTa2lwIFNES3MgdGhhdCBjYW5ub3QgYmUgdXNlZCB3aXRoIG91ciB0b29sc2V0LgogICBzdGQ6OnN0cmluZyBtYXhWZXJzaW9uID0gdGhpcy0+R2V0V2luZG93czEwU0RLTWF4VmVyc2lvbigpOwogICBpZiAoIW1heFZlcnNpb24uZW1wdHkoKSkgewotICAgIGNtRXJhc2VJZihzZGtzLCBXaW5kb3dzU0RLVG9vUmVjZW50KG1heFZlcnNpb24pKTsKKyAgICBjbTo6ZXJhc2VfaWYoc2RrcywgV2luZG93c1NES1Rvb1JlY2VudChtYXhWZXJzaW9uKSk7CiAgIH0KIAogICAvLyBTb3J0IHRoZSByZXN1bHRzIHRvIG1ha2Ugc3VyZSB3ZSBzZWxlY3QgdGhlIG1vc3QgcmVjZW50IG9uZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvci5oCmluZGV4IDZlMTJkM2UuLjM5MzUzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IuaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAKICNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpbzEyR2VuZXJhdG9yLmgiCkBAIC0xOCwxNiArMTksMjIgQEAKIGNsYXNzIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IgOiBwdWJsaWMgY21HbG9iYWxWaXN1YWxTdHVkaW8xMkdlbmVyYXRvcgogewogcHVibGljOgotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCk7CisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCk7CiAKICAgYm9vbCBNYXRjaGVzR2VuZXJhdG9yTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgY29uc3QgY2hhciogR2V0QW5kcm9pZEFwcGxpY2F0aW9uVHlwZVJldmlzaW9uKCkgY29uc3Qgb3ZlcnJpZGUKKyAgeworICAgIHJldHVybiAiMi4wIjsKKyAgfQorCiBwcm90ZWN0ZWQ6CiAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTRHZW5lcmF0b3IoY21ha2UqIGNtLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcGxhdGZvcm1JbkdlbmVyYXRvck5hbWUpOwogCiAgIGJvb2wgSW5pdGlhbGl6ZVdpbmRvd3MoY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwogICBib29sIEluaXRpYWxpemVXaW5kb3dzU3RvcmUoY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOworICBib29sIEluaXRpYWxpemVBbmRyb2lkKGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKICAgYm9vbCBTZWxlY3RXaW5kb3dzU3RvcmVUb29sc2V0KHN0ZDo6c3RyaW5nJiB0b29sc2V0KSBjb25zdCBvdmVycmlkZTsKIAogICAvLyBUaGVzZSBhcmVuJ3QgdmlydHVhbCBiZWNhdXNlIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNlbGVjdGVkIHZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yLmN4eAppbmRleCBlOGU5ZWNlLi4wMDgzYzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83MUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvNzFHZW5lcmF0b3IuY3h4CkBAIC0xOSw4ICsxOSw4IEBACiAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY21Mb2NhbEdlbmVyYXRvciogcm9vdCwKICAgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBnZW5lcmF0b3JzKQogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKLSAgcm9vdC0+R2V0TWFrZWZpbGUoKS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlncyk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzID0KKyAgICByb290LT5HZXRNYWtlZmlsZSgpLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgLy8gV3JpdGUgb3V0IHRoZSBoZWFkZXIgZm9yIGEgU0xOIGZpbGUKICAgdGhpcy0+V3JpdGVTTE5IZWFkZXIoZm91dCk7CkBAIC04NywxMSArODcsMTEgQEAKIC8vIHRoZSBsaWJyYXJpZXMgaXQgdXNlcyBhcmUgYWxzbyBkb25lIGhlcmUKIHZvaWQgY21HbG9iYWxWaXN1YWxTdHVkaW83MUdlbmVyYXRvcjo6V3JpdGVQcm9qZWN0KHN0ZDo6b3N0cmVhbSYgZm91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkc3BuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0KQogewogICAvLyBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIGZvcnRyYW4gYnVpbGQKLSAgY29uc3QgY2hhciogZXh0ID0gIi52Y3Byb2oiOworICBzdGQ6OnN0cmluZyBleHQgPSAiLnZjcHJvaiI7CiAgIGNvbnN0IGNoYXIqIHByb2plY3QgPQogICAgICJQcm9qZWN0KFwiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn1cIikgPSBcIiI7CiAgIGlmICh0aGlzLT5UYXJnZXRJc0ZvcnRyYW5Pbmx5KHQpKSB7CkBAIC0xMDIsMTQgKzEwMiwxNCBAQAogICAgIGV4dCA9ICIuY3Nwcm9qIjsKICAgICBwcm9qZWN0ID0gIlByb2plY3QoXCJ7RkFFMDRFQzAtMzAxRi0xMUQzLUJGNEItMDBDMDRGNzlFRkJDfVwiKSA9IFwiIjsKICAgfQotICBjb25zdCBjaGFyKiB0YXJnZXRFeHQgPSB0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRV9FWFQiKTsKKyAgY21Qcm9wIHRhcmdldEV4dCA9IHQtPkdldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FX0VYVCIpOwogICBpZiAodGFyZ2V0RXh0KSB7Ci0gICAgZXh0ID0gdGFyZ2V0RXh0OworICAgIGV4dCA9ICp0YXJnZXRFeHQ7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBndWlkID0gdGhpcy0+R2V0R1VJRChkc3BuYW1lKTsKICAgZm91dCA8PCBwcm9qZWN0IDw8IGRzcG5hbWUgPDwgIlwiLCBcIiIgPDwgdGhpcy0+Q29udmVydFRvU29sdXRpb25QYXRoKGRpcikKLSAgICAgICA8PCAoZGlyWzBdID8gIlxcIiA6ICIiKSA8PCBkc3BuYW1lIDw8IGV4dCA8PCAiXCIsIFwieyIgPDwgZ3VpZAorICAgICAgIDw8ICghZGlyLmVtcHR5KCkgPyAiXFwiIDogIiIpIDw8IGRzcG5hbWUgPDwgZXh0IDw8ICJcIiwgXCJ7IiA8PCBndWlkCiAgICAgICAgPDwgIn1cIlxuIjsKICAgZm91dCA8PCAiXHRQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0XG4iOwogICB0aGlzLT5Xcml0ZVByb2plY3REZXBlbmRzKGZvdXQsIGRzcG5hbWUsIGRpciwgdCk7CkBAIC0xMzgsNyArMTM4LDcgQEAKIC8vIE5vdGUsIHRoYXQgZGVwZW5kZW5jaWVzIGZyb20gZXhlY3V0YWJsZXMgdG8KIC8vIHRoZSBsaWJyYXJpZXMgaXQgdXNlcyBhcmUgYWxzbyBkb25lIGhlcmUKIHZvaWQgY21HbG9iYWxWaXN1YWxTdHVkaW83MUdlbmVyYXRvcjo6V3JpdGVQcm9qZWN0RGVwZW5kcygKLSAgc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0IGNoYXIqLAorICBzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiwgY29uc3Qgc3RkOjpzdHJpbmcmLAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0KQogewogICBWU0RlcGVuZFNldCBjb25zdCYgZGVwZW5kcyA9IHRoaXMtPlZTVGFyZ2V0RGVwZW5kc1t0YXJnZXRdOwpAQCAtMTU2LDggKzE1Niw5IEBACiAvLyBXcml0ZSBhIGRzcCBmaWxlIGludG8gdGhlIFNMTiBmaWxlLCBOb3RlLCB0aGF0IGRlcGVuZGVuY2llcyBmcm9tCiAvLyBleGVjdXRhYmxlcyB0byB0aGUgbGlicmFyaWVzIGl0IHVzZXMgYXJlIGFsc28gZG9uZSBoZXJlCiB2b2lkIGNtR2xvYmFsVmlzdWFsU3R1ZGlvNzFHZW5lcmF0b3I6OldyaXRlRXh0ZXJuYWxQcm9qZWN0KAotICBzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBjaGFyKiBsb2NhdGlvbiwKLSAgY29uc3QgY2hhciogdHlwZUd1aWQsIGNvbnN0IHN0ZDo6c2V0PEJUPHN0ZDo6c3RyaW5nPj4mIGRlcGVuZHMpCisgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsb2NhdGlvbiwKKyAgY29uc3QgY2hhciogdHlwZUd1aWQsCisgIGNvbnN0IHN0ZDo6c2V0PEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+PiYgZGVwZW5kcykKIHsKICAgZm91dCA8PCAiUHJvamVjdChcInsiCiAgICAgICAgPDwgKHR5cGVHdWlkID8gdHlwZUd1aWQgOiB0aGlzLT5FeHRlcm5hbFByb2plY3RUeXBlKGxvY2F0aW9uKSkKQEAgLTE2OSw4ICsxNzAsOCBAQAogICAvLyBwcm9qZWN0IGluc3RlYWQgb2YgaW4gdGhlIGdsb2JhbCBzZWN0aW9uCiAgIGlmICghZGVwZW5kcy5lbXB0eSgpKSB7CiAgICAgZm91dCA8PCAiXHRQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0XG4iOwotICAgIGZvciAoQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiBpdCA6IGRlcGVuZHMpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXAgPSBpdC5WYWx1ZTsKKyAgICBmb3IgKEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+IGNvbnN0JiBpdCA6IGRlcGVuZHMpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXAgPSBpdC5WYWx1ZS5maXJzdDsKICAgICAgIGlmICghZGVwLmVtcHR5KCkpIHsKICAgICAgICAgZm91dCA8PCAiXHRcdHsiIDw8IHRoaXMtPkdldEdVSUQoZGVwKSA8PCAifSA9IHsiIDw8IHRoaXMtPkdldEdVSUQoZGVwKQogICAgICAgICAgICAgIDw8ICJ9XG4iOwpAQCAtMTk3LDkgKzE5OCw5IEBACiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1hcENvbmZpZzsKICAgICBjb25zdCBjaGFyKiBkc3RDb25maWcgPSBpLmNfc3RyKCk7CiAgICAgaWYgKHRhcmdldC5HZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIikpIHsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBtID0gdGFyZ2V0LkdldFByb3BlcnR5KCJNQVBfSU1QT1JURURfQ09ORklHXyIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGkpKSkgewotICAgICAgICBjbUV4cGFuZExpc3QobSwgbWFwQ29uZmlnKTsKKyAgICAgIGlmIChjbVByb3AgbSA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiTUFQX0lNUE9SVEVEX0NPTkZJR18iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoaSkpKSB7CisgICAgICAgIGNtRXhwYW5kTGlzdCgqbSwgbWFwQ29uZmlnKTsKICAgICAgICAgaWYgKCFtYXBDb25maWcuZW1wdHkoKSkgewogICAgICAgICAgIGRzdENvbmZpZyA9IG1hcENvbmZpZ1swXS5jX3N0cigpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83MUdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvNzFHZW5lcmF0b3IuaAppbmRleCA4NTc1NWFmLi43ZWFkYWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83MUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzcxR2VuZXJhdG9yLmgKQEAgLTIyLDE4ICsyMiwyMCBAQAogICB2aXJ0dWFsIHZvaWQgV3JpdGVTb2x1dGlvbkNvbmZpZ3VyYXRpb25zKAogICAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzKTsKICAgdm9pZCBXcml0ZVByb2plY3Qoc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIHQpIG92ZXJyaWRlOworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIHQpIG92ZXJyaWRlOwogICB2b2lkIFdyaXRlUHJvamVjdERlcGVuZHMoc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0KSBvdmVycmlkZTsKICAgdm9pZCBXcml0ZVByb2plY3RDb25maWd1cmF0aW9ucygKICAgICBzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAogICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0JiB0YXJnZXQsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlncywKICAgICBjb25zdCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGNvbmZpZ3NQYXJ0T2ZEZWZhdWx0QnVpbGQsCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBsYXRmb3JtTWFwcGluZyA9ICIiKSBvdmVycmlkZTsKLSAgdm9pZCBXcml0ZUV4dGVybmFsUHJvamVjdChzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIHR5cGVHdWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PEJUPHN0ZDo6c3RyaW5nPj4mIGRlcGVuZHMpIG92ZXJyaWRlOworICB2b2lkIFdyaXRlRXh0ZXJuYWxQcm9qZWN0KAorICAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAorICAgIGNvbnN0IGNoYXIqIHR5cGVHdWlkLAorICAgIGNvbnN0IHN0ZDo6c2V0PEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+PiYgZGVwZW5kcykgb3ZlcnJpZGU7CiAKICAgLy8gRm9sZGVycyBhcmUgbm90IHN1cHBvcnRlZCBieSBWUyA3LjEuCiAgIGJvb2wgVXNlRm9sZGVyUHJvcGVydHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eAppbmRleCA0MGIyMTRjLi5mOGI0MzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eApAQCAtMiw4ICsyLDEwIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuaCIKIAorI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSA8d2luZG93cy5oPgpAQCAtMTI2LDcgKzEyOCw3IEBACiAgIC8vIGRvZXMgbm90IGtub3cgYWJvdXQuCiAgIHN0ZDo6c3RyaW5nIGV4dHJhUGF0aDsKICAgaWYgKGNtU3lzdGVtVG9vbHM6OkdldEVudigiQ01BS0VfTVNWQ0lERV9SVU5fUEFUSCIsIGV4dHJhUGF0aCkpIHsKLSAgICBtZi0+QWRkQ2FjaGVEZWZpbml0aW9uKCJDTUFLRV9NU1ZDSURFX1JVTl9QQVRIIiwgZXh0cmFQYXRoLmNfc3RyKCksCisgICAgbWYtPkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfTVNWQ0lERV9SVU5fUEFUSCIsIGV4dHJhUGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYXZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBDTUFLRV9NU1ZDSURFX1JVTl9QQVRIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RBVElDKTsKICAgfQpAQCAtMTg0LDcgKzE4Niw3IEBACiB9CiAKIGNvbnN0IGNoYXIqIGNtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6RXh0ZXJuYWxQcm9qZWN0VHlwZSgKLSAgY29uc3QgY2hhciogbG9jYXRpb24pCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsb2NhdGlvbikKIHsKICAgc3RkOjpzdHJpbmcgZXh0ZW5zaW9uID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVMYXN0RXh0ZW5zaW9uKGxvY2F0aW9uKTsKICAgaWYgKGV4dGVuc2lvbiA9PSAiLnZicHJvaiIpIHsKQEAgLTI2MywxMiArMjY1LDExIEBACiB9CiAKIC8vISBDcmVhdGUgYSBsb2NhbCBnZW5lcmF0b3IgYXBwcm9wcmlhdGUgdG8gdGhpcyBHbG9iYWwgR2VuZXJhdG9yCi1jbUxvY2FsR2VuZXJhdG9yKiBjbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3I6OkNyZWF0ZUxvY2FsR2VuZXJhdG9yKAotICBjbU1ha2VmaWxlKiBtZikKK3N0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPgorY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikKIHsKLSAgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IqIGxnID0KLSAgICBuZXcgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IodGhpcywgbWYpOwotICByZXR1cm4gbGc7CisgIGF1dG8gbGcgPSBjbTo6bWFrZV91bmlxdWU8Y21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3I+KHRoaXMsIG1mKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPihzdGQ6Om1vdmUobGcpKTsKIH0KIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKQEAgLTMwMCw3ICszMDEsNyBAQAogICBpZiAoIWNtU3lzdGVtVG9vbHM6OkdldEVycm9yT2NjdXJlZEZsYWcoKSAmJgogICAgICAgIXRoaXMtPkxvY2FsR2VuZXJhdG9ycy5lbXB0eSgpKSB7CiAgICAgdGhpcy0+Q2FsbFZpc3VhbFN0dWRpb01hY3JvKE1hY3JvUmVsb2FkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTTE5GaWxlKHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTTE5GaWxlKHRoaXMtPkxvY2FsR2VuZXJhdG9yc1swXS5nZXQoKSkpOwogICB9CiB9CiAKQEAgLTMzOCwyMiArMzM5LDIyIEBACiAgIC8vIGxvb3Agb3ZlciBhZ2FpbiBhbmQgd3JpdGUgb3V0IGNvbmZpZ3VyYXRpb25zIGZvciBlYWNoIHRhcmdldAogICAvLyBpbiB0aGUgc29sdXRpb24KICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0IDogcHJvamVjdFRhcmdldHMpIHsKLSAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgeworICAgIGlmICghdGFyZ2V0LT5Jc0luQnVpbGRTeXN0ZW0oKSkgewogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGNvbnN0IGNoYXIqIGV4cGF0aCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIpOworICAgIGNtUHJvcCBleHBhdGggPSB0YXJnZXQtPkdldFByb3BlcnR5KCJFWFRFUk5BTF9NU1BST0pFQ1QiKTsKICAgICBpZiAoZXhwYXRoKSB7CiAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsQ29uZmlndXJhdGlvbnMoY29uZmlncy5iZWdpbigpLCBjb25maWdzLmVuZCgpKTsKLSAgICAgIGNvbnN0IGNoYXIqIG1hcHBpbmcgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJWU19QTEFURk9STV9NQVBQSU5HIik7Ci0gICAgICB0aGlzLT5Xcml0ZVByb2plY3RDb25maWd1cmF0aW9ucyhmb3V0LCB0YXJnZXQtPkdldE5hbWUoKS5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldCwgY29uZmlncywgYWxsQ29uZmlndXJhdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID8gbWFwcGluZyA6ICIiKTsKKyAgICAgIGNtUHJvcCBtYXBwaW5nID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfUExBVEZPUk1fTUFQUElORyIpOworICAgICAgdGhpcy0+V3JpdGVQcm9qZWN0Q29uZmlndXJhdGlvbnMoZm91dCwgdGFyZ2V0LT5HZXROYW1lKCksICp0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzLCBhbGxDb25maWd1cmF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPyAqbWFwcGluZyA6ICIiKTsKICAgICB9IGVsc2UgewogICAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBjb25maWdzUGFydE9mRGVmYXVsdEJ1aWxkID0KICAgICAgICAgdGhpcy0+SXNQYXJ0T2ZEZWZhdWx0QnVpbGQoY29uZmlncywgcHJvamVjdFRhcmdldHMsIHRhcmdldCk7Ci0gICAgICBjb25zdCBjaGFyKiB2Y3Byb2pOYW1lID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIpOworICAgICAgY21Qcm9wIHZjcHJvak5hbWUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIik7CiAgICAgICBpZiAodmNwcm9qTmFtZSkgewotICAgICAgICB0aGlzLT5Xcml0ZVByb2plY3RDb25maWd1cmF0aW9ucyhmb3V0LCB2Y3Byb2pOYW1lLCAqdGFyZ2V0LCBjb25maWdzLAorICAgICAgICB0aGlzLT5Xcml0ZVByb2plY3RDb25maWd1cmF0aW9ucyhmb3V0LCAqdmNwcm9qTmFtZSwgKnRhcmdldCwgY29uZmlncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnc1BhcnRPZkRlZmF1bHRCdWlsZCk7CiAgICAgICB9CiAgICAgfQpAQCAtMzY4LDMxICszNjksMzIgQEAKIAogICBzdGQ6OnN0cmluZyByb290QmluYXJ5RGlyID0gcm9vdC0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwogICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQgOiBwcm9qZWN0VGFyZ2V0cykgewotICAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgICAgaWYgKCF0YXJnZXQtPklzSW5CdWlsZFN5c3RlbSgpKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgYm9vbCB3cml0dGVuID0gZmFsc2U7CiAKICAgICAvLyBoYW5kbGUgZXh0ZXJuYWwgdmMgcHJvamVjdCBmaWxlcwotICAgIGNvbnN0IGNoYXIqIGV4cGF0aCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIpOworICAgIGNtUHJvcCBleHBhdGggPSB0YXJnZXQtPkdldFByb3BlcnR5KCJFWFRFUk5BTF9NU1BST0pFQ1QiKTsKICAgICBpZiAoZXhwYXRoKSB7CiAgICAgICBzdGQ6OnN0cmluZyBwcm9qZWN0ID0gdGFyZ2V0LT5HZXROYW1lKCk7Ci0gICAgICBzdGQ6OnN0cmluZyBsb2NhdGlvbiA9IGV4cGF0aDsKKyAgICAgIHN0ZDo6c3RyaW5nIGxvY2F0aW9uID0gKmV4cGF0aDsKIAotICAgICAgdGhpcy0+V3JpdGVFeHRlcm5hbFByb2plY3QoZm91dCwgcHJvamVjdC5jX3N0cigpLCBsb2NhdGlvbi5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfUFJPSkVDVF9UWVBFIiksCisgICAgICBjbVByb3AgcCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1BST0pFQ1RfVFlQRSIpOworICAgICAgdGhpcy0+V3JpdGVFeHRlcm5hbFByb2plY3QoZm91dCwgcHJvamVjdCwgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldFV0aWxpdGllcygpKTsKICAgICAgIHdyaXR0ZW4gPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICBjb25zdCBjaGFyKiB2Y3Byb2pOYW1lID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIpOworICAgICAgY21Qcm9wIHZjcHJvak5hbWUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIik7CiAgICAgICBpZiAodmNwcm9qTmFtZSkgewogICAgICAgICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKTsKICAgICAgICAgc3RkOjpzdHJpbmcgZGlyID0gbGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKLSAgICAgICAgZGlyID0gcm9vdC0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgocm9vdEJpbmFyeURpciwgZGlyLmNfc3RyKCkpOworICAgICAgICBkaXIgPSByb290LT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChyb290QmluYXJ5RGlyLCBkaXIpOwogICAgICAgICBpZiAoZGlyID09ICIuIikgewogICAgICAgICAgIGRpci5jbGVhcigpOyAvLyBtc2J1aWxkIGNhbm5vdCBoYW5kbGUgIi5cIiBwcmVmaXgKICAgICAgICAgfQotICAgICAgICB0aGlzLT5Xcml0ZVByb2plY3QoZm91dCwgdmNwcm9qTmFtZSwgZGlyLmNfc3RyKCksIHRhcmdldCk7CisgICAgICAgIHRoaXMtPldyaXRlUHJvamVjdChmb3V0LCAqdmNwcm9qTmFtZSwgZGlyLCB0YXJnZXQpOwogICAgICAgICB3cml0dGVuID0gdHJ1ZTsKICAgICAgIH0KICAgICB9CkBAIC00MzQsMTQgKzQzNiwxNCBAQAogICBzdGQ6Om9zdHJlYW0mIGZvdXQsIE9yZGVyZWRUYXJnZXREZXBlbmRTZXQgY29uc3QmIHByb2plY3RUYXJnZXRzKQogewogICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQgOiBwcm9qZWN0VGFyZ2V0cykgewotICAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgICAgaWYgKCF0YXJnZXQtPklzSW5CdWlsZFN5c3RlbSgpKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgY29uc3QgY2hhciogdmNwcm9qTmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUUiKTsKKyAgICBjbVByb3AgdmNwcm9qTmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUUiKTsKICAgICBpZiAodmNwcm9qTmFtZSkgewogICAgICAgc3RkOjpzdHJpbmcgZGlyID0KICAgICAgICAgdGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCk7Ci0gICAgICB0aGlzLT5Xcml0ZVByb2plY3REZXBlbmRzKGZvdXQsIHZjcHJvak5hbWUsIGRpci5jX3N0cigpLCB0YXJnZXQpOworICAgICAgdGhpcy0+V3JpdGVQcm9qZWN0RGVwZW5kcyhmb3V0LCAqdmNwcm9qTmFtZSwgZGlyLCB0YXJnZXQpOwogICAgIH0KICAgfQogfQpAQCAtNDgyLDcgKzQ4NCw3IEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6Q29udmVydFRvU29sdXRpb25QYXRoKAotICBjb25zdCBjaGFyKiBwYXRoKQorICBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCkKIHsKICAgLy8gQ29udmVydCB0byBiYWNrc2xhc2hlcy4gIERvIG5vdCB1c2UgQ29udmVydFRvT3V0cHV0UGF0aCBiZWNhdXNlCiAgIC8vIHdlIHdpbGwgYWRkIHF1b3Rpbmcgb3Vyc2VsdmVzLCBhbmQgd2Uga25vdyB0aGVzZSBwcm9qZWN0cyBhbHdheXMKQEAgLTUwNCwxMyArNTA2LDEzIEBACiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wS2V5cyA9CiAgICAgcm9vdC0+R2V0TWFrZWZpbGUoKS0+R2V0UHJvcGVydHlLZXlzKCk7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGl0IDogcHJvcEtleXMpIHsKLSAgICBpZiAoaXQuZmluZCgiVlNfR0xPQkFMX1NFQ1RJT05fIikgPT0gMCkgeworICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoaXQsICJWU19HTE9CQUxfU0VDVElPTl8iKSkgewogICAgICAgc3RkOjpzdHJpbmcgc2VjdGlvblR5cGU7CiAgICAgICBzdGQ6OnN0cmluZyBuYW1lID0gaXQuc3Vic3RyKDE4KTsKLSAgICAgIGlmIChuYW1lLmZpbmQoIlBSRV8iKSA9PSAwKSB7CisgICAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KG5hbWUsICJQUkVfIikpIHsKICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDQpOwogICAgICAgICBzZWN0aW9uVHlwZSA9ICJwcmVTb2x1dGlvbiI7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUuZmluZCgiUE9TVF8iKSA9PSAwKSB7CisgICAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChuYW1lLCAiUE9TVF8iKSkgewogICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoNSk7CiAgICAgICAgIHNlY3Rpb25UeXBlID0gInBvc3RTb2x1dGlvbiI7CiAgICAgICB9IGVsc2UKQEAgLTUyNSw4ICs1MjcsOCBAQAogICAgICAgICAgIGV4dGVuc2liaWxpdHlBZGRJbnNPdmVycmlkZGVuID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBmb3V0IDw8ICJcdEdsb2JhbFNlY3Rpb24oIiA8PCBuYW1lIDw8ICIpID0gIiA8PCBzZWN0aW9uVHlwZSA8PCAiXG4iOwotICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5VmFsdWVQYWlycyA9Ci0gICAgICAgICAgY21FeHBhbmRlZExpc3Qocm9vdC0+R2V0TWFrZWZpbGUoKS0+R2V0UHJvcGVydHkoaXQpKTsKKyAgICAgICAgY21Qcm9wIHAgPSByb290LT5HZXRNYWtlZmlsZSgpLT5HZXRQcm9wZXJ0eShpdCk7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBrZXlWYWx1ZVBhaXJzID0gY21FeHBhbmRlZExpc3QocCA/ICpwIDogIiIpOwogICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpdFBhaXIgOiBrZXlWYWx1ZVBhaXJzKSB7CiAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3NFcXVhbCA9IGl0UGFpci5maW5kKCc9Jyk7CiAgICAgICAgICAgaWYgKHBvc0VxdWFsICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CkBAIC01NjYsOCArNTY4LDkgQEAKIHN0ZDo6c3RyaW5nIGNtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6V3JpdGVVdGlsaXR5RGVwZW5kKAogICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0KQogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlnczsKLSAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlncyA9CisgICAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgICBjbU1ha2VmaWxlOjpFeGNsdWRlRW1wdHlDb25maWcpOwogICBzdGQ6OnN0cmluZyBwbmFtZSA9IGNtU3RyQ2F0KHRhcmdldC0+R2V0TmFtZSgpLCAiX1VUSUxJVFkiKTsKICAgc3RkOjpzdHJpbmcgZm5hbWUgPQogICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAnLycsCkBAIC02NzUsNyArNjc4LDggQEAKICAgICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGNvbmZpZ3MpIHsKICAgICAgICAgICBjb25zdCBjaGFyKiBwcm9wZXJ0eVZhbHVlID0KICAgICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgaWYgKGNtSXNPbihjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAorICAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlICYmCisgICAgICAgICAgICAgIGNtSXNPbihjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAogICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUsIHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSwgaSkpKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25maWdzLmluc2VydChpKTsKICAgICAgICAgICB9CkBAIC02OTAsOSArNjk0LDcgQEAKICAgfQogICAvLyBpbnNwZWN0IEVYQ0xVREVfRlJPTV9ERUZBVUxUX0JVSUxEW188Q09ORklHPl0gcHJvcGVydGllcwogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogY29uZmlncykgewotICAgIGNvbnN0IGNoYXIqIHByb3BlcnR5VmFsdWUgPQotICAgICAgdGFyZ2V0LT5HZXRGZWF0dXJlKCJFWENMVURFX0ZST01fREVGQVVMVF9CVUlMRCIsIGkpOwotICAgIGlmIChjbUlzT2ZmKHByb3BlcnR5VmFsdWUpKSB7CisgICAgaWYgKGNtSXNPZmYodGFyZ2V0LT5HZXRGZWF0dXJlKCJFWENMVURFX0ZST01fREVGQVVMVF9CVUlMRCIsIGkpKSkgewogICAgICAgYWN0aXZlQ29uZmlncy5pbnNlcnQoaSk7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmgKaW5kZXggN2E5ZmNlZi4uNmNjMWNmOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuaApAQCAtMyw2ICszLDggQEAKICNpZm5kZWYgY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yX2gKICNkZWZpbmUgY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yX2gKIAorI2luY2x1ZGUgPG1lbW9yeT4KKwogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeS5oIgogI2luY2x1ZGUgImNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmgiCiAKQEAgLTIwLDcgKzIyLDggQEAKICAgfmNtR2xvYmFsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcigpOwogCiAgIC8vISBDcmVhdGUgYSBsb2NhbCBnZW5lcmF0b3IgYXBwcm9wcmlhdGUgdG8gdGhpcyBHbG9iYWwgR2VuZXJhdG9yCi0gIGNtTG9jYWxHZW5lcmF0b3IqIENyZWF0ZUxvY2FsR2VuZXJhdG9yKGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IENyZWF0ZUxvY2FsR2VuZXJhdG9yKAorICAgIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKICAgSnNvbjo6VmFsdWUgR2V0SnNvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA3LDE2ICsxMTAsMTcgQEAKICAgc3RkOjpzdHJpbmcgY29uc3QmIEdldERldkVudkNvbW1hbmQoKTsKICAgdmlydHVhbCBzdGQ6OnN0cmluZyBGaW5kRGV2RW52Q29tbWFuZCgpOwogCi0gIHN0YXRpYyBjb25zdCBjaGFyKiBFeHRlcm5hbFByb2plY3RUeXBlKGNvbnN0IGNoYXIqIGxvY2F0aW9uKTsKKyAgc3RhdGljIGNvbnN0IGNoYXIqIEV4dGVybmFsUHJvamVjdFR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIGxvY2F0aW9uKTsKIAogICB2aXJ0dWFsIHZvaWQgT3V0cHV0U0xORmlsZShjbUxvY2FsR2VuZXJhdG9yKiByb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIGdlbmVyYXRvcnMpOwogICB2aXJ0dWFsIHZvaWQgV3JpdGVTTE5GaWxlKHN0ZDo6b3N0cmVhbSYgZm91dCwgY21Mb2NhbEdlbmVyYXRvciogcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIGdlbmVyYXRvcnMpID0gMDsKICAgdmlydHVhbCB2b2lkIFdyaXRlUHJvamVjdChzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0KSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIHQpID0gMDsKICAgdmlydHVhbCB2b2lkIFdyaXRlUHJvamVjdERlcGVuZHMoc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0KSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBXcml0ZVByb2plY3RDb25maWd1cmF0aW9ucygKICAgICBzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLApAQCAtMTM4LDEwICsxNDIsMTEgQEAKICAgICBPcmRlcmVkVGFyZ2V0RGVwZW5kU2V0IGNvbnN0JiBwcm9qZWN0VGFyZ2V0cyk7CiAKICAgdmlydHVhbCB2b2lkIFdyaXRlRXh0ZXJuYWxQcm9qZWN0KAotICAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IGNoYXIqIHBhdGgsCi0gICAgY29uc3QgY2hhciogdHlwZUd1aWQsIGNvbnN0IHN0ZDo6c2V0PEJUPHN0ZDo6c3RyaW5nPj4mIGRlcGVuZGVuY2llcykgPSAwOworICAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAorICAgIGNvbnN0IGNoYXIqIHR5cGVHdWlkLAorICAgIGNvbnN0IHN0ZDo6c2V0PEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+PiYgZGVwZW5kZW5jaWVzKSA9IDA7CiAKLSAgc3RkOjpzdHJpbmcgQ29udmVydFRvU29sdXRpb25QYXRoKGNvbnN0IGNoYXIqIHBhdGgpOworICBzdGQ6OnN0cmluZyBDb252ZXJ0VG9Tb2x1dGlvblBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpOwogCiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBJc1BhcnRPZkRlZmF1bHRCdWlsZCgKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3MsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuY3h4CmluZGV4IDhlNjEyNWIuLmZjZGZjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuY3h4CkBAIC0yLDYgKzIsOSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvbWVtb3J5PgorCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kTGluZXMuaCIKICNpbmNsdWRlICJjbURvY3VtZW50YXRpb25FbnRyeS5oIgpAQCAtOTYsMjEgKzk5LDIyIEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+IGNvbnN0JiBnZW5lcmF0b3JzID0gdGhpcy0+TG9jYWxHZW5lcmF0b3JzOwotICBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvciogbGcgPQotICAgIHN0YXRpY19jYXN0PGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yKj4oZ2VuZXJhdG9yc1swXSk7Ci0gIGNtTWFrZWZpbGUqIG1mID0gbGctPkdldE1ha2VmaWxlKCk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPj4gY29uc3QmIGdlbmVyYXRvcnMgPQorICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yczsKKyAgYXV0byYgbGcgPQorICAgIGNtOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8Y21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3I+KGdlbmVyYXRvcnNbMF0pOwogCiAgIGNvbnN0IGNoYXIqIG5vX3dvcmtpbmdfZGlyZWN0b3J5ID0gbnVsbHB0cjsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2J5cHJvZHVjdHM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19kZXBlbmRzOwogICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBub19jb21tYW5kczsKLSAgY21UYXJnZXQqIHRndCA9IG1mLT5BZGRVdGlsaXR5Q29tbWFuZCgKLSAgICBDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VULCBjbUNvbW1hbmRPcmlnaW46OkdlbmVyYXRvciwgZmFsc2UsCi0gICAgbm9fd29ya2luZ19kaXJlY3RvcnksIG5vX2J5cHJvZHVjdHMsIG5vX2RlcGVuZHMsIG5vX2NvbW1hbmRzKTsKKyAgY21UYXJnZXQqIHRndCA9IGxnLkFkZFV0aWxpdHlDb21tYW5kKENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fd29ya2luZ19kaXJlY3RvcnksIG5vX2J5cHJvZHVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19kZXBlbmRzLCBub19jb21tYW5kcyk7CiAKLSAgY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0gbmV3IGNtR2VuZXJhdG9yVGFyZ2V0KHRndCwgbGcpOwotICBsZy0+QWRkR2VuZXJhdG9yVGFyZ2V0KGd0KTsKKyAgYXV0byBwdHIgPSBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0b3JUYXJnZXQ+KHRndCwgJmxnKTsKKyAgYXV0byBndCA9IHB0ci5nZXQoKTsKKyAgbGcuQWRkR2VuZXJhdG9yVGFyZ2V0KHN0ZDo6bW92ZShwdHIpKTsKIAogICAvLyBPcmdhbml6ZSBpbiB0aGUgInByZWRlZmluZWQgdGFyZ2V0cyIgZm9sZGVyOgogICAvLwpAQCAtMTI4LDcgKzEzMiw3IEBACiAgICAgICAgICAgICAgICBzdGFtcExpc3QpOwogICAgIHN0ZDo6c3RyaW5nIHN0YW1wRmlsZTsKICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZm91dChzdGFtcExpc3RGaWxlLmNfc3RyKCkpOwotICAgIGZvciAoY21Mb2NhbEdlbmVyYXRvciBjb25zdCogZ2kgOiBnZW5lcmF0b3JzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBnaSA6IGdlbmVyYXRvcnMpIHsKICAgICAgIHN0YW1wRmlsZSA9IGNtU3RyQ2F0KGdpLT5HZXRNYWtlZmlsZSgpLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL0NNYWtlRmlsZXMvZ2VuZXJhdGUuc3RhbXAiKTsKICAgICAgIGZvdXQgPDwgc3RhbXBGaWxlIDw8ICJcbiI7CkBAIC0xMzgsMTEgKzE0MiwxNCBAQAogCiAgIC8vIEFkZCBhIGN1c3RvbSBydWxlIHRvIHJlLXJ1biBDTWFrZSBpZiBhbnkgaW5wdXQgZmlsZXMgY2hhbmdlZC4KICAgeworICAgIC8vIFRoZSBjdXN0b20gcnVsZSBydW5zIGNtYWtlIHNvIHNldCBVVEYtOCBwaXBlcy4KKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IHRydWU7CisKICAgICAvLyBDb2xsZWN0IHRoZSBpbnB1dCBmaWxlcyB1c2VkIHRvIGdlbmVyYXRlIGFsbCB0YXJnZXRzIGluIHRoaXMKICAgICAvLyBwcm9qZWN0LgogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaXN0RmlsZXM7Ci0gICAgZm9yIChjbUxvY2FsR2VuZXJhdG9yKiBnZW4gOiBnZW5lcmF0b3JzKSB7Ci0gICAgICBjbUFwcGVuZChsaXN0RmlsZXMsIGdlbi0+R2V0TWFrZWZpbGUoKS0+R2V0TGlzdEZpbGVzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAgICAgY206OmFwcGVuZChsaXN0RmlsZXMsIGdlbi0+R2V0TWFrZWZpbGUoKS0+R2V0TGlzdEZpbGVzKCkpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGN1c3RvbSBwcmVidWlsZCB0YXJnZXQgdG8gcnVuIHRoZSBWZXJpZnlHbG9icyBzY3JpcHQuCkBAIC0xNTMsMTAgKzE2MCwxMCBAQAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGJ5cHJvZHVjdHM7CiAgICAgICBieXByb2R1Y3RzLnB1c2hfYmFjayhjbS0+R2V0R2xvYlZlcmlmeVN0YW1wKCkpOwogCi0gICAgICBtZi0+QWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAorICAgICAgbGcuQWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAogICAgICAgICBDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VULCBieXByb2R1Y3RzLCBub19kZXBlbmRzLAogICAgICAgICB2ZXJpZnlDb21tYW5kTGluZXMsIGNtQ3VzdG9tQ29tbWFuZFR5cGU6OlBSRV9CVUlMRCwKLSAgICAgICAgIkNoZWNraW5nIEZpbGUgR2xvYnMiLCBub193b3JraW5nX2RpcmVjdG9yeSwgZmFsc2UpOworICAgICAgICAiQ2hlY2tpbmcgRmlsZSBHbG9icyIsIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCBzdGRQaXBlc1VURjgpOwogCiAgICAgICAvLyBFbnN1cmUgWkVST19DSEVDSyBhbHdheXMgcnVucyBpbiBWaXN1YWwgU3R1ZGlvIHVzaW5nIE1TQnVpbGQsCiAgICAgICAvLyBvdGhlcndpc2UgdGhlIHByZWJ1aWxkIGNvbW1hbmQgd2lsbCBub3QgYmUgcnVuLgpAQCAtMTcxLDEwICsxNzgsMTAgQEAKICAgICBsaXN0RmlsZXMuZXJhc2UobmV3X2VuZCwgbGlzdEZpbGVzLmVuZCgpKTsKIAogICAgIC8vIENyZWF0ZSBhIHJ1bGUgdG8gcmUtcnVuIENNYWtlLgotICAgIHN0ZDo6c3RyaW5nIGFyZ1MgPSBjbVN0ckNhdCgiLVMiLCBsZy0+R2V0U291cmNlRGlyZWN0b3J5KCkpOwotICAgIHN0ZDo6c3RyaW5nIGFyZ0IgPSBjbVN0ckNhdCgiLUIiLCBsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOworICAgIHN0ZDo6c3RyaW5nIGFyZ1MgPSBjbVN0ckNhdCgiLVMiLCBsZy5HZXRTb3VyY2VEaXJlY3RvcnkoKSk7CisgICAgc3RkOjpzdHJpbmcgYXJnQiA9IGNtU3RyQ2F0KCItQiIsIGxnLkdldEJpbmFyeURpcmVjdG9yeSgpKTsKICAgICBzdGQ6OnN0cmluZyBjb25zdCBzbG4gPQotICAgICAgbGctPkdldEJpbmFyeURpcmVjdG9yeSgpICsgIi8iICsgbGctPkdldFByb2plY3ROYW1lKCkgKyAiLnNsbiI7CisgICAgICBsZy5HZXRCaW5hcnlEaXJlY3RvcnkoKSArICIvIiArIGxnLkdldFByb2plY3ROYW1lKCkgKyAiLnNsbiI7CiAgICAgY21DdXN0b21Db21tYW5kTGluZXMgY29tbWFuZExpbmVzID0gY21NYWtlU2luZ2xlQ29tbWFuZExpbmUoCiAgICAgICB7IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCBhcmdTLCBhcmdCLCAiLS1jaGVjay1zdGFtcC1saXN0IiwKICAgICAgICAgc3RhbXBMaXN0LCAiLS12cy1zb2x1dGlvbi1maWxlIiwgc2xuIH0pOwpAQCAtMTg1LDEwICsxOTIsMTEgQEAKICAgICAvLyAodGhpcyBjb3VsZCBiZSBhdm9pZGVkIHdpdGggcGVyLXRhcmdldCBzb3VyY2UgZmlsZXMpCiAgICAgc3RkOjpzdHJpbmcgbm9fbWFpbl9kZXBlbmRlbmN5OwogICAgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOwotICAgIGlmIChjbVNvdXJjZUZpbGUqIGZpbGUgPSBtZi0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICAgIGlmIChjbVNvdXJjZUZpbGUqIGZpbGUgPSBsZy5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCiAgICAgICAgICAgc3RhbXBzLCBub19ieXByb2R1Y3RzLCBsaXN0RmlsZXMsIG5vX21haW5fZGVwZW5kZW5jeSwKICAgICAgICAgICBub19pbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsICJDaGVja2luZyBCdWlsZCBTeXN0ZW0iLAotICAgICAgICAgIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCB0cnVlLCBmYWxzZSkpIHsKKyAgICAgICAgICBub193b3JraW5nX2RpcmVjdG9yeSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIiIsICIiLAorICAgICAgICAgIHN0ZFBpcGVzVVRGOCkpIHsKICAgICAgIGd0LT5BZGRTb3VyY2UoZmlsZS0+UmVzb2x2ZUZ1bGxQYXRoKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiRXJyb3IgYWRkaW5nIHJ1bGUgZm9yICIgKyBzdGFtcHNbMF0pOwpAQCAtMjAzLDEyICsyMTEsMTEgQEAKICAgY21HbG9iYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yOjpBZGRFeHRyYUlERVRhcmdldHMoKTsKICAgaWYgKHRoaXMtPkFkZENoZWNrVGFyZ2V0KCkpIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRoaXMtPkxvY2FsR2VuZXJhdG9ycy5zaXplKCk7ICsraSkgewotICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGd0cyA9Ci0gICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yc1tpXS0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICAgICAgY29uc3QgYXV0byYgdGd0cyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yc1tpXS0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwogICAgICAgLy8gQWxsIHRhcmdldHMgZGVwZW5kIG9uIHRoZSBidWlsZC1zeXN0ZW0gY2hlY2sgdGFyZ2V0LgotICAgICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGkgOiB0Z3RzKSB7CisgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRpIDogdGd0cykgewogICAgICAgICBpZiAodGktPkdldE5hbWUoKSAhPSBDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VUKSB7Ci0gICAgICAgICAgdGktPlRhcmdldC0+QWRkVXRpbGl0eShDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VUKTsKKyAgICAgICAgICB0aS0+VGFyZ2V0LT5BZGRVdGlsaXR5KENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTIzNyw5ICsyNDQsOSBAQAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtYXBDb25maWc7CiAgICAgY29uc3QgY2hhciogZHN0Q29uZmlnID0gaS5jX3N0cigpOwogICAgIGlmICh0YXJnZXQuR2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIpKSB7Ci0gICAgICBpZiAoY29uc3QgY2hhciogbSA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiTUFQX0lNUE9SVEVEX0NPTkZJR18iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShpKSkpIHsKLSAgICAgICAgY21FeHBhbmRMaXN0KG0sIG1hcENvbmZpZyk7CisgICAgICBpZiAoY21Qcm9wIG0gPSB0YXJnZXQuR2V0UHJvcGVydHkoIk1BUF9JTVBPUlRFRF9DT05GSUdfIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGkpKSkgeworICAgICAgICBjbUV4cGFuZExpc3QoKm0sIG1hcENvbmZpZyk7CiAgICAgICAgIGlmICghbWFwQ29uZmlnLmVtcHR5KCkpIHsKICAgICAgICAgICBkc3RDb25maWcgPSBtYXBDb25maWdbMF0uY19zdHIoKTsKICAgICAgICAgfQpAQCAtMjcyLDIzICsyNzksMzEgQEAKIGJvb2wgY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yOjpOZWVkc0RlcGxveSgKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QmIHRhcmdldCwgY29uc3QgY2hhciogY29uZmlnKSBjb25zdAogewotICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdHlwZSA9IHRhcmdldC5HZXRUeXBlKCk7Ci0gIGJvb2wgbm9EZXBsb3kgPSBEZXBsb3lJbmhpYml0ZWQodGFyZ2V0LCBjb25maWcpOwotICByZXR1cm4gIW5vRGVwbG95ICYmCi0gICAgKHR5cGUgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFIHx8Ci0gICAgIHR5cGUgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSkgJiYKLSAgICB0aGlzLT5UYXJnZXRTeXN0ZW1TdXBwb3J0c0RlcGxveW1lbnQoKTsKLX0KLQotYm9vbCBjbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3I6OkRlcGxveUluaGliaXRlZCgKLSAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QmIHRhcmdldCwgY29uc3QgY2hhciogY29uZmlnKSBjb25zdAotewotICBib29sIHJWYWwgPSBmYWxzZTsKLSAgaWYgKGNvbnN0IGNoYXIqIHByb3AgPSB0YXJnZXQuR2V0UHJvcGVydHkoIlZTX05PX1NPTFVUSU9OX0RFUExPWSIpKSB7Ci0gICAgclZhbCA9IGNtSXNPbigKLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUocHJvcCwgdGFyZ2V0LkxvY2FsR2VuZXJhdG9yLCBjb25maWcpKTsKKyAgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIGNvbnN0IHR5cGUgPSB0YXJnZXQuR2V0VHlwZSgpOworICBpZiAodHlwZSAhPSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUgJiYKKyAgICAgIHR5cGUgIT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSkgeworICAgIC8vIGRlcGxveW1lbnQgb25seSB2YWxpZCBvbiBleGVjdXRhYmxlcyBhbmQgc2hhcmVkIGxpYnJhcmllcy4KKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgcmV0dXJuIHJWYWw7CisKKyAgaWYgKGNtUHJvcCBwcm9wID0gdGFyZ2V0LkdldFByb3BlcnR5KCJWU19TT0xVVElPTl9ERVBMT1kiKSkgeworICAgIC8vIElmIHNldCwgaXQgZGljdGF0ZXMgYmVoYXZpb3IKKyAgICByZXR1cm4gY21Jc09uKAorICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgqcHJvcCwgdGFyZ2V0LkxvY2FsR2VuZXJhdG9yLCBjb25maWcpKTsKKyAgfQorCisgIC8vIFRvIGJlIGRlcHJlY2F0ZWQsIGRpc2FibGUgZGVwbG95bWVudCBldmVuIGlmIHRhcmdldCBzdXBwb3J0cyBpdC4KKyAgaWYgKGNtUHJvcCBwcm9wID0gdGFyZ2V0LkdldFByb3BlcnR5KCJWU19OT19TT0xVVElPTl9ERVBMT1kiKSkgeworICAgIGlmIChjbUlzT24oY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgqcHJvcCwgdGFyZ2V0LkxvY2FsR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpKSkgeworICAgICAgLy8gSWYgdHJ1ZSwgYWx3YXlzIGRpc2FibGUgZGVwbG95bWVudAorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIC8vIExlZ2FjeSBiZWhhdmlvciwgZW5hYmxlZCBkZXBsb3ltZW50IGJhc2VkIG9uICdoYXJkLWNvZGVkJyB0YXJnZXQKKyAgLy8gcGxhdGZvcm1zLgorICByZXR1cm4gdGhpcy0+VGFyZ2V0U3lzdGVtU3VwcG9ydHNEZXBsb3ltZW50KCk7CiB9CiAKIGJvb2wgY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yOjpUYXJnZXRTeXN0ZW1TdXBwb3J0c0RlcGxveW1lbnQoKSBjb25zdApAQCAtMzA0LDEzICszMTksMTMgQEAKIH0KIAogdm9pZCBjbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3I6OldyaXRlUHJvamVjdERlcGVuZHMoCi0gIHN0ZDo6b3N0cmVhbSYgZm91dCwgY29uc3Qgc3RkOjpzdHJpbmcmLCBjb25zdCBjaGFyKiwKKyAgc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0IHN0ZDo6c3RyaW5nJiwKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGd0KQogewogICBUYXJnZXREZXBlbmRTZXQgY29uc3QmIHVub3JkZXJlZCA9IHRoaXMtPkdldFRhcmdldERpcmVjdERlcGVuZHMoZ3QpOwogICBPcmRlcmVkVGFyZ2V0RGVwZW5kU2V0IGRlcGVuZHModW5vcmRlcmVkLCBzdGQ6OnN0cmluZygpKTsKICAgZm9yIChjbVRhcmdldERlcGVuZCBjb25zdCYgaSA6IGRlcGVuZHMpIHsKLSAgICBpZiAoaS0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgICBpZiAoIWktPklzSW5CdWlsZFN5c3RlbSgpKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgc3RkOjpzdHJpbmcgZ3VpZCA9IHRoaXMtPkdldEdVSUQoaS0+R2V0TmFtZSgpKTsKQEAgLTMyMiwxMCArMzM3LDExIEBACiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCiB7CiAgIC8vIExvb2sgZm9yIHV0aWxpdHkgZGVwZW5kZW5jaWVzIHRoYXQgbWFnaWNhbGx5IGxpbmsuCi0gIGZvciAoQlQ8c3RkOjpzdHJpbmc+IGNvbnN0JiB1aSA6IHRhcmdldC0+R2V0VXRpbGl0aWVzKCkpIHsKKyAgZm9yIChCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+PiBjb25zdCYgdWkgOiB0YXJnZXQtPkdldFV0aWxpdGllcygpKSB7CiAgICAgaWYgKGNtR2VuZXJhdG9yVGFyZ2V0KiBkZXBUYXJnZXQgPQotICAgICAgICAgIHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+RmluZEdlbmVyYXRvclRhcmdldFRvVXNlKHVpLlZhbHVlKSkgewotICAgICAgaWYgKGRlcFRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgJiYKKyAgICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkZpbmRHZW5lcmF0b3JUYXJnZXRUb1VzZSgKKyAgICAgICAgICAgIHVpLlZhbHVlLmZpcnN0KSkgeworICAgICAgaWYgKGRlcFRhcmdldC0+SXNJbkJ1aWxkU3lzdGVtKCkgJiYKICAgICAgICAgICBkZXBUYXJnZXQtPkdldFByb3BlcnR5KCJFWFRFUk5BTF9NU1BST0pFQ1QiKSkgewogICAgICAgICAvLyBUaGlzIHV0aWxpdHkgZGVwZW5kZW5jeSBuYW1lcyBhbiBleHRlcm5hbCAudmNwcm9qIHRhcmdldC4KICAgICAgICAgLy8gV2UgdXNlIExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPSJ0cnVlIiB0byBsaW5rIHRvIGl0IHdpdGhvdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzhHZW5lcmF0b3IuaAppbmRleCAzNTJiYzNjLi42Y2U2N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW84R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvci5oCkBAIC01NywxMCArNTcsNiBAQAogICB2aXJ0dWFsIGJvb2wgTmVlZHNEZXBsb3koY21HZW5lcmF0b3JUYXJnZXQgY29uc3QmIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbmZpZykgY29uc3Q7CiAKLSAgLyoqIFJldHVybnMgdHJ1ZSBpZiBkZXBsb3ltZW50IGhhcyBiZWVuIGRpc2FibGVkIGluIGNtYWtlIGZpbGUuICovCi0gIGJvb2wgRGVwbG95SW5oaWJpdGVkKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0JiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbmZpZykgY29uc3Q7Ci0KICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFyZ2V0IHN5c3RlbSBzdXBwb3J0IGRlYnVnZ2luZyBkZXBsb3ltZW50LiAqLwogICB2aXJ0dWFsIGJvb2wgVGFyZ2V0U3lzdGVtU3VwcG9ydHNEZXBsb3ltZW50KCkgY29uc3Q7CiAKQEAgLTc0LDcgKzcwLDcgQEAKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGxhdGZvcm1NYXBwaW5nID0gIiIpIG92ZXJyaWRlOwogICBib29sIENvbXB1dGVUYXJnZXREZXBlbmRzKCkgb3ZlcnJpZGU7CiAgIHZvaWQgV3JpdGVQcm9qZWN0RGVwZW5kcyhzdGQ6Om9zdHJlYW0mIGZvdXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqIHQpIG92ZXJyaWRlOwogCiAgIGJvb2wgVXNlRm9sZGVyUHJvcGVydHkoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvci5jeHgKaW5kZXggNmU2MWQyNi4uOWY3M2MxNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvci5jeHgKQEAgLTIsNiArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IuaCIKIAorI2luY2x1ZGUgPHV0aWxpdHk+CisKICNpbmNsdWRlICJjbURvY3VtZW50YXRpb25FbnRyeS5oIgogI2luY2x1ZGUgImNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgpAQCAtMTMsNDMgKzE1LDQ2IEBACiBjbGFzcyBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3I6OkZhY3RvcnkgOiBwdWJsaWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5CiB7CiBwdWJsaWM6Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQogICB7CiAgICAgaWYgKHN0cm5jbXAobmFtZS5jX3N0cigpLCB2czlnZW5lcmF0b3JOYW1lLAogICAgICAgICAgICAgICAgIHNpemVvZih2czlnZW5lcmF0b3JOYW1lKSAtIDEpICE9IDApIHsKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgICB9CiAKICAgICBjb25zdCBjaGFyKiBwID0gbmFtZS5jX3N0cigpICsgc2l6ZW9mKHZzOWdlbmVyYXRvck5hbWUpIC0gMTsKICAgICBpZiAocFswXSA9PSAnXDAnKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcihjbSwgbmFtZSwgIiIpOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IoY20sIG5hbWUsICIiKSk7CiAgICAgfQogCiAgICAgaWYgKHBbMF0gIT0gJyAnKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogCiAgICAgKytwOwogCiAgICAgaWYgKCFzdHJjbXAocCwgIklBNjQiKSkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IoY20sIG5hbWUsICJJdGFuaXVtIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcihjbSwgbmFtZSwgIkl0YW5pdW0iKSk7CiAgICAgfQogCiAgICAgaWYgKCFzdHJjbXAocCwgIldpbjY0IikpIHsKLSAgICAgIHJldHVybiBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yKGNtLCBuYW1lLCAieDY0Iik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcihjbSwgbmFtZSwgIng2NCIpKTsKICAgICB9CiAKICAgICBjbVZpc3VhbFN0dWRpb1dDRVBsYXRmb3JtUGFyc2VyIHBhcnNlcihwKTsKICAgICBwYXJzZXIuUGFyc2VWZXJzaW9uKCI5LjAiKTsKICAgICBpZiAoIXBhcnNlci5Gb3VuZCgpKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogCi0gICAgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yKiByZXQgPQotICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcihjbSwgbmFtZSwgcCk7CisgICAgYXV0byByZXQgPSBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yPigKKyAgICAgIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IoY20sIG5hbWUsIHApKTsKICAgICByZXQtPldpbmRvd3NDRVZlcnNpb24gPSBwYXJzZXIuR2V0T1NWZXJzaW9uKCk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPihzdGQ6Om1vdmUocmV0KSk7CiAgIH0KIAogICB2b2lkIEdldERvY3VtZW50YXRpb24oY21Eb2N1bWVudGF0aW9uRW50cnkmIGVudHJ5KSBjb25zdCBvdmVycmlkZQpAQCAtMTAzLDkgKzEwOCwxMCBAQAogICBzdGQ6OnN0cmluZyBHZXREZWZhdWx0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIldpbjMyIjsgfQogfTsKIAotY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKQorc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4KK2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcjo6TmV3RmFjdG9yeSgpCiB7Ci0gIHJldHVybiBuZXcgRmFjdG9yeTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KG5ldyBGYWN0b3J5KTsKIH0KIAogY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yOjpjbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yLmgKaW5kZXggN2JlYmZkNi4uNTMzMThhNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpbzlHZW5lcmF0b3IuaApAQCAtMyw2ICszLDggQEAKICNpZm5kZWYgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yX2gKICNkZWZpbmUgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yX2gKIAorI2luY2x1ZGUgPG1lbW9yeT4KKwogI2luY2x1ZGUgImNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvci5oIgogCiAvKiogXGNsYXNzIGNtR2xvYmFsVmlzdWFsU3R1ZGlvOUdlbmVyYXRvcgpAQCAtMTMsNyArMTUsNyBAQAogY2xhc3MgY21HbG9iYWxWaXN1YWxTdHVkaW85R2VuZXJhdG9yIDogcHVibGljIGNtR2xvYmFsVmlzdWFsU3R1ZGlvOEdlbmVyYXRvcgogewogcHVibGljOgotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5KCk7CisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBOZXdGYWN0b3J5KCk7CiAKICAgLyoqCiAgICAqIFdoZXJlIGRvZXMgdGhpcyB2ZXJzaW9uIG9mIFZpc3VhbCBTdHVkaW8gbG9vayBmb3IgbWFjcm9zIGZvciB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuY3h4CmluZGV4IGMwODNhNzUuLjAwMWQ4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmN4eApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxpb3N0cmVhbT4KIAogI2luY2x1ZGUgPGNtL2l0ZXJhdG9yPgorI2luY2x1ZGUgPGNtL21lbW9yeT4KIAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIApAQCAtMTY2LDcgKzE2Nyw3IEBACiAgICAgICBpZiAodGhpcy0+RXhwcmVzc0VkaXRpb24pIHsKICAgICAgICAgZm91dCA8PCAiIyBWaXN1YWwgU3R1ZGlvIEV4cHJlc3MgMTYgZm9yIFdpbmRvd3MgRGVza3RvcFxuIjsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvdXQgPDwgIiMgVmlzdWFsIFN0dWRpbyAxNlxuIjsKKyAgICAgICAgZm91dCA8PCAiIyBWaXN1YWwgU3R1ZGlvIFZlcnNpb24gMTZcbiI7CiAgICAgICB9CiAgICAgICBicmVhazsKICAgfQpAQCAtMTk3LDEyICsxOTgsMTIgQEAKICAgICBpZiAoIWdlbi5lbXB0eSgpKSB7CiAgICAgICAvLyBVc2Ugbm8gYWN0dWFsIGNvbW1hbmQgbGluZXMgc28gdGhhdCB0aGUgdGFyZ2V0IGl0c2VsZiBpcyBub3QKICAgICAgIC8vIGNvbnNpZGVyZWQgYWx3YXlzIG91dCBvZiBkYXRlLgotICAgICAgY21UYXJnZXQqIGFsbEJ1aWxkID0gZ2VuWzBdLT5HZXRNYWtlZmlsZSgpLT5BZGRVdGlsaXR5Q29tbWFuZCgKLSAgICAgICAgIkFMTF9CVUlMRCIsIGNtQ29tbWFuZE9yaWdpbjo6R2VuZXJhdG9yLCB0cnVlLCBub193b3JraW5nX2RpciwKLSAgICAgICAgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywgbm9fY29tbWFuZHMsIGZhbHNlLCAiQnVpbGQgYWxsIHByb2plY3RzIik7CisgICAgICBjbVRhcmdldCogYWxsQnVpbGQgPSBnZW5bMF0tPkFkZFV0aWxpdHlDb21tYW5kKAorICAgICAgICAiQUxMX0JVSUxEIiwgdHJ1ZSwgbm9fd29ya2luZ19kaXIsIG5vX2J5cHJvZHVjdHMsIG5vX2RlcGVuZHMsCisgICAgICAgIG5vX2NvbW1hbmRzLCBmYWxzZSwgIkJ1aWxkIGFsbCBwcm9qZWN0cyIpOwogCi0gICAgICBjbUdlbmVyYXRvclRhcmdldCogZ3QgPSBuZXcgY21HZW5lcmF0b3JUYXJnZXQoYWxsQnVpbGQsIGdlblswXSk7Ci0gICAgICBnZW5bMF0tPkFkZEdlbmVyYXRvclRhcmdldChndCk7CisgICAgICBnZW5bMF0tPkFkZEdlbmVyYXRvclRhcmdldCgKKyAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yVGFyZ2V0PihhbGxCdWlsZCwgZ2VuWzBdKSk7CiAKICAgICAgIC8vCiAgICAgICAvLyBPcmdhbml6ZSBpbiB0aGUgInByZWRlZmluZWQgdGFyZ2V0cyIgZm9sZGVyOgpAQCAtMjEzLDEzICsyMTQsMTMgQEAKIAogICAgICAgLy8gTm93IG1ha2UgYWxsIHRhcmdldHMgZGVwZW5kIG9uIHRoZSBBTExfQlVJTEQgdGFyZ2V0CiAgICAgICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IgY29uc3QqIGkgOiBnZW4pIHsKLSAgICAgICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGd0IDogaS0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGd0IDogaS0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICAgICAgaWYgKHRndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCB8fAogICAgICAgICAgICAgICB0Z3QtPklzSW1wb3J0ZWQoKSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgfQotICAgICAgICAgIGlmICghdGhpcy0+SXNFeGNsdWRlZChnZW5bMF0sIHRndCkpIHsKLSAgICAgICAgICAgIGFsbEJ1aWxkLT5BZGRVdGlsaXR5KHRndC0+R2V0TmFtZSgpKTsKKyAgICAgICAgICBpZiAoIXRoaXMtPklzRXhjbHVkZWQoZ2VuWzBdLCB0Z3QuZ2V0KCkpKSB7CisgICAgICAgICAgICBhbGxCdWlsZC0+QWRkVXRpbGl0eSh0Z3QtPkdldE5hbWUoKSwgZmFsc2UpOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtMzA4LDcgKzMwOSw3IEBACiAgIGlmICghZGlyLmVtcHR5KCkpIHsKICAgICBzdGQ6OnN0cmluZyBtYWNyb3NGaWxlID0gZGlyICsgIi9DTWFrZU1hY3Jvcy8iIENNQUtFX1ZTTUFDUk9TX0ZJTEVOQU1FOwogICAgIHN0ZDo6c3RyaW5nIG5leHRTdWJrZXlOYW1lOwotICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKG1hY3Jvc0ZpbGUuY19zdHIoKSkgJiYKKyAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhtYWNyb3NGaWxlKSAmJgogICAgICAgICBJc1Zpc3VhbFN0dWRpb01hY3Jvc0ZpbGVSZWdpc3RlcmVkKAogICAgICAgICAgIG1hY3Jvc0ZpbGUsIHRoaXMtPkdldFVzZXJNYWNyb3NSZWdLZXlCYXNlKCksIG5leHRTdWJrZXlOYW1lKSkgewogICAgICAgaWYgKG0gPT0gTWFjcm9SZWxvYWQpIHsKQEAgLTM2Nyw3ICszNjgsNyBAQAogdm9pZCBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6Rm9sbG93TGlua0RlcGVuZHMoCiAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIHN0ZDo6c2V0PGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIGxpbmtlZCkKIHsKLSAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgaWYgKCF0YXJnZXQtPklzSW5CdWlsZFN5c3RlbSgpKSB7CiAgICAgcmV0dXJuOwogICB9CiAgIGlmIChsaW5rZWQuaW5zZXJ0KHRhcmdldCkuc2Vjb25kICYmCkBAIC0zOTAsOCArMzkxLDggQEAKICAgfQogICBmb3IgKGF1dG8gY29uc3QmIGl0IDogdGhpcy0+UHJvamVjdE1hcCkgewogICAgIGZvciAoY29uc3QgY21Mb2NhbEdlbmVyYXRvciogaSA6IGl0LnNlY29uZCkgewotICAgICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGkgOiBpLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKLSAgICAgICAgdGhpcy0+Q29tcHV0ZVZTVGFyZ2V0RGVwZW5kcyh0aSk7CisgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRpIDogaS0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgICAgIHRoaXMtPkNvbXB1dGVWU1RhcmdldERlcGVuZHModGkuZ2V0KCkpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtNTA3LDkgKzUwOCw5IEBACiBzdGQ6OnN0cmluZyBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6R2V0U3RhcnR1cFByb2plY3ROYW1lKAogICBjbUxvY2FsR2VuZXJhdG9yIGNvbnN0KiByb290KSBjb25zdAogewotICBjb25zdCBjaGFyKiBuID0gcm9vdC0+R2V0TWFrZWZpbGUoKS0+R2V0UHJvcGVydHkoIlZTX1NUQVJUVVBfUFJPSkVDVCIpOwotICBpZiAobiAmJiAqbikgewotICAgIHN0ZDo6c3RyaW5nIHN0YXJ0dXAgPSBuOworICBjbVByb3AgbiA9IHJvb3QtPkdldE1ha2VmaWxlKCktPkdldFByb3BlcnR5KCJWU19TVEFSVFVQX1BST0pFQ1QiKTsKKyAgaWYgKGNtTm9uZW1wdHkobikpIHsKKyAgICBzdGQ6OnN0cmluZyBzdGFydHVwID0gKm47CiAgICAgaWYgKHRoaXMtPkZpbmRUYXJnZXQoc3RhcnR1cCkpIHsKICAgICAgIHJldHVybiBzdGFydHVwOwogICAgIH0gZWxzZSB7CkBAIC01OTMsNyArNTk0LDcgQEAKICAgICAgICAgc3RkOjpzdHJpbmcgZmlsZXBhdGg7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVwYXRobmFtZTsKICAgICAgICAgc3RkOjpzdHJpbmcgZmlsZXBhdGhwYXRoOwotICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsbmFtZS5jX3N0cigpKSkgeworICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmdWxsbmFtZSkpIHsKICAgICAgICAgICBmaWxlbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmdWxsbmFtZSk7CiAgICAgICAgICAgZmlsZXBhdGggPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgoZnVsbG5hbWUpOwogICAgICAgICAgIGZpbGVwYXRobmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmaWxlcGF0aCk7CkBAIC04MDAsMjcgKzgwMSwxNyBAQAogYm9vbCBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VGFyZ2V0SXNGb3J0cmFuT25seSgKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGd0KQogewotICAvLyBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIGZvcnRyYW4gYnVpbGQKLSAgewotICAgIC8vIElzc3VlIGRpYWdub3N0aWMgaWYgdGhlIHNvdXJjZSBmaWxlcyBkZXBlbmQgb24gdGhlIGNvbmZpZy4KLSAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBzb3VyY2VzOwotICAgIGlmICghZ3QtPkdldENvbmZpZ0NvbW1vblNvdXJjZUZpbGVzKHNvdXJjZXMpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBzb3VyY2UgbGFuZ3VhZ2UsIEZvcnRyYW4gaGFzIHRvIGJlIHVzZWQKICAgLy8gaW4gb3JkZXIgZm9yIHRoZSBzb3VyY2VzIHRvIGNvbXBpbGUuCi0gIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBsYW5ndWFnZXM7Ci0gIGd0LT5HZXRMYW5ndWFnZXMobGFuZ3VhZ2VzLCAiIik7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBsYW5ndWFnZXMgPSBndC0+R2V0QWxsQ29uZmlnQ29tcGlsZUxhbmd1YWdlcygpOwogICAvLyBDb25zaWRlciBhbiBleHBsaWNpdCBsaW5rZXIgbGFuZ3VhZ2UgcHJvcGVydHksIGJ1dCAqbm90KiB0aGUKICAgLy8gY29tcHV0ZWQgbGlua2VyIGxhbmd1YWdlIHRoYXQgbWF5IGRlcGVuZCBvbiBsaW5rZWQgdGFyZ2V0cy4KICAgLy8gVGhpcyBhbGxvd3MgdGhlIHByb2plY3QgdG8gY29udHJvbCB0aGUgbGFuZ3VhZ2UgY2hvaWNlIGluCiAgIC8vIGEgdGFyZ2V0IHdpdGggbm9uZSBvZiBpdHMgb3duIHNvdXJjZXMsIGUuZy4gd2hlbiBhbHNvIHVzaW5nCiAgIC8vIG9iamVjdCBsaWJyYXJpZXMuCi0gIGNvbnN0IGNoYXIqIGxpbmtMYW5nID0gZ3QtPkdldFByb3BlcnR5KCJMSU5LRVJfTEFOR1VBR0UiKTsKLSAgaWYgKGxpbmtMYW5nICYmICpsaW5rTGFuZykgewotICAgIGxhbmd1YWdlcy5pbnNlcnQobGlua0xhbmcpOworICBjbVByb3AgbGlua0xhbmcgPSBndC0+R2V0UHJvcGVydHkoIkxJTktFUl9MQU5HVUFHRSIpOworICBpZiAoY21Ob25lbXB0eShsaW5rTGFuZykpIHsKKyAgICBsYW5ndWFnZXMuaW5zZXJ0KCpsaW5rTGFuZyk7CiAgIH0KIAogICAvLyBJbnRlbCBGb3J0cmFuIC52ZnByb2ogZmlsZXMgZG8gc3VwcG9ydCB0aGUgcmVzb3VyY2UgY29tcGlsZXIuCkBAIC05MjcsNyArOTE4LDcgQEAKICAgICAgIHN0ZDo6c3RyaW5nIG9iakZpbGUgPSBpdDsKICAgICAgIC8vIHJlcGxhY2UgJChDb25maWd1cmF0aW9uTmFtZSkgaW4gdGhlIG9iamVjdCBuYW1lcwogICAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhvYmpGaWxlLCB0aGlzLT5HZXRDTWFrZUNGR0ludERpcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdOYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdOYW1lKTsKICAgICAgIGlmIChjbUhhc0xpdGVyYWxTdWZmaXgob2JqRmlsZSwgIi5vYmoiKSkgewogICAgICAgICBmb3V0IDw8IG9iakZpbGUgPDwgIlxuIjsKICAgICAgIH0KQEAgLTk0MCw5ICs5MzEsMTAgQEAKIAogICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMgPSBjbU1ha2VTaW5nbGVDb21tYW5kTGluZSgKICAgICB7IGNtYWtlQ29tbWFuZCwgIi1FIiwgIl9fY3JlYXRlX2RlZiIsIG1kaS0+RGVmRmlsZSwgb2Jqc19maWxlIH0pOwotICBjbUN1c3RvbUNvbW1hbmQgY29tbWFuZChndC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLCBvdXRwdXRzLCBlbXB0eSwgZW1wdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lcywgIkF1dG8gYnVpbGQgZGxsIGV4cG9ydHMiLCAiLiIpOwotICBjb21tYW5kcy5wdXNoX2JhY2soY29tbWFuZCk7CisgIGNtQ3VzdG9tQ29tbWFuZCBjb21tYW5kKG91dHB1dHMsIGVtcHR5LCBlbXB0eSwgY29tbWFuZExpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBndC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXRCYWNrdHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkF1dG8gYnVpbGQgZGxsIGV4cG9ydHMiLCAiLiIsIHRydWUpOworICBjb21tYW5kcy5wdXNoX2JhY2soc3RkOjptb3ZlKGNvbW1hbmQpKTsKIH0KIAogc3RhdGljIGJvb2wgT3BlblNvbHV0aW9uKHN0ZDo6c3RyaW5nIHNsbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmgKaW5kZXggNGYyMDA3Zi4uMjlhNWMyYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmgKQEAgLTE1MCw2ICsxNTAsOCBAQAogICBib29sIE9wZW4oY29uc3Qgc3RkOjpzdHJpbmcmIGJpbmRpciwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb2plY3ROYW1lLAogICAgICAgICAgICAgYm9vbCBkcnlSdW4pIG92ZXJyaWRlOwogCisgIGJvb2wgSXNWaXN1YWxTdHVkaW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKIHByb3RlY3RlZDoKICAgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IoY21ha2UqIGNtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcGxhdGZvcm1JbkdlbmVyYXRvck5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvci5jeHgKaW5kZXggYTM3MTYzMy4uZTJlMDQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3IuY3h4CkBAIC0xMDAsNiArMTAwLDI0IEBACiAgIHJldHVybiAiIjsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIqIFZTVmVyc2lvblRvQW5kcm9pZFRvb2xzZXQoCisgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWU1ZlcnNpb24gdikKK3sKKyAgc3dpdGNoICh2KSB7CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlM5OgorICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTA6CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxMToKKyAgICBjYXNlIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzEyOgorICAgICAgcmV0dXJuICIiOworICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTQ6CisgICAgICByZXR1cm4gIkNsYW5nXzNfOCI7CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxNToKKyAgICBjYXNlIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE2OgorICAgICAgcmV0dXJuICJDbGFuZ181XzAiOworICB9CisgIHJldHVybiAiIjsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgdnMxNWdlbmVyYXRvck5hbWVbXSA9ICJWaXN1YWwgU3R1ZGlvIDE1IDIwMTciOwogCiAvLyBNYXAgZ2VuZXJhdG9yIG5hbWUgd2l0aG91dCB5ZWFyIHRvIG5hbWUgd2l0aCB5ZWFyLgpAQCAtMTIxLDMwICsxMzksMzMgQEAKICAgOiBwdWJsaWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5CiB7CiBwdWJsaWM6Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21ha2UqIGNtKSBjb25zdCBvdmVycmlkZQogICB7CiAgICAgc3RkOjpzdHJpbmcgZ2VuTmFtZTsKICAgICBjb25zdCBjaGFyKiBwID0gY21WUzE1R2VuTmFtZShuYW1lLCBnZW5OYW1lKTsKICAgICBpZiAoIXApIHsKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgICB9CiAgICAgaWYgKCEqcCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcigKLSAgICAgICAgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTUsIGNtLCBnZW5OYW1lLCAiIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKAorICAgICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE1LCBjbSwgZ2VuTmFtZSwgIiIpKTsKICAgICB9CiAgICAgaWYgKCpwKysgIT0gJyAnKSB7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KCk7CiAgICAgfQogICAgIGlmIChzdHJjbXAocCwgIldpbjY0IikgPT0gMCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcigKLSAgICAgICAgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTUsIGNtLCBnZW5OYW1lLCAieDY0Iik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKAorICAgICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE1LCBjbSwgZ2VuTmFtZSwgIng2NCIpKTsKICAgICB9CiAgICAgaWYgKHN0cmNtcChwLCAiQVJNIikgPT0gMCkgewotICAgICAgcmV0dXJuIG5ldyBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcigKLSAgICAgICAgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTUsIGNtLCBnZW5OYW1lLCAiQVJNIik7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigKKyAgICAgICAgbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKAorICAgICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE1LCBjbSwgZ2VuTmFtZSwgIkFSTSIpKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgfQogCiAgIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpIGNvbnN0IG92ZXJyaWRlCkBAIC0xODUsMTAgKzIwNiwxMCBAQAogICBzdGQ6OnN0cmluZyBHZXREZWZhdWx0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIldpbjMyIjsgfQogfTsKIAotY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5Kgorc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4KIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpOZXdGYWN0b3J5MTUoKQogewotICByZXR1cm4gbmV3IEZhY3RvcnkxNTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+KG5ldyBGYWN0b3J5MTUpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciB2czE2Z2VuZXJhdG9yTmFtZVtdID0gIlZpc3VhbCBTdHVkaW8gMTYgMjAxOSI7CkBAIC0yMTIsMTkgKzIzMywyMCBAQAogICA6IHB1YmxpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkKIHsKIHB1YmxpYzoKLSAgY21HbG9iYWxHZW5lcmF0b3IqIENyZWF0ZUdsb2JhbEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlCiAgIHsKICAgICBzdGQ6OnN0cmluZyBnZW5OYW1lOwogICAgIGNvbnN0IGNoYXIqIHAgPSBjbVZTMTZHZW5OYW1lKG5hbWUsIGdlbk5hbWUpOwogICAgIGlmICghcCkgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICAgIH0KICAgICBpZiAoISpwKSB7Ci0gICAgICByZXR1cm4gbmV3IGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKAotICAgICAgICBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxNiwgY20sIGdlbk5hbWUsICIiKTsKKyAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgICAgICBuZXcgY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3IoCisgICAgICAgICAgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTYsIGNtLCBnZW5OYW1lLCAiIikpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPigpOwogICB9CiAKICAgdm9pZCBHZXREb2N1bWVudGF0aW9uKGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSkgY29uc3Qgb3ZlcnJpZGUKQEAgLTI2NSwxMCArMjg3LDEwIEBACiAgIH0KIH07CiAKLWNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSoKK3N0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+CiBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvcjo6TmV3RmFjdG9yeTE2KCkKIHsKLSAgcmV0dXJuIG5ldyBGYWN0b3J5MTY7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PihuZXcgRmFjdG9yeTE2KTsKIH0KIAogY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3I6OmNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKApAQCAtMjgwLDYgKzMwMiw3IEBACiAgIHRoaXMtPlZlcnNpb24gPSB2ZXJzaW9uOwogICB0aGlzLT5FeHByZXNzRWRpdGlvbiA9IGZhbHNlOwogICB0aGlzLT5EZWZhdWx0UGxhdGZvcm1Ub29sc2V0ID0gVlNWZXJzaW9uVG9Ub29sc2V0KHRoaXMtPlZlcnNpb24pOworICB0aGlzLT5EZWZhdWx0QW5kcm9pZFRvb2xzZXQgPSBWU1ZlcnNpb25Ub0FuZHJvaWRUb29sc2V0KHRoaXMtPlZlcnNpb24pOwogICB0aGlzLT5EZWZhdWx0Q0xGbGFnVGFibGVOYW1lID0gVlNWZXJzaW9uVG9Ub29sc2V0KHRoaXMtPlZlcnNpb24pOwogICB0aGlzLT5EZWZhdWx0Q1NoYXJwRmxhZ1RhYmxlTmFtZSA9IFZTVmVyc2lvblRvVG9vbHNldCh0aGlzLT5WZXJzaW9uKTsKICAgdGhpcy0+RGVmYXVsdExpbmtGbGFnVGFibGVOYW1lID0gVlNWZXJzaW9uVG9Ub29sc2V0KHRoaXMtPlZlcnNpb24pOwpAQCAtMzYyLDYgKzM4NSwxMiBAQAogICByZXR1cm4gdnNTZXR1cEFQSUhlbHBlci5HZXRWU0luc3RhbmNlSW5mbyhkaXIpOwogfQogCitib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpHZXRWU0luc3RhbmNlVmVyc2lvbigKKyAgdW5zaWduZWQgbG9uZyBsb25nJiB2c0luc3RhbmNlVmVyc2lvbikgY29uc3QKK3sKKyAgcmV0dXJuIHZzU2V0dXBBUElIZWxwZXIuR2V0VlNJbnN0YW5jZVZlcnNpb24odnNJbnN0YW5jZVZlcnNpb24pOworfQorCiBib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpJc0RlZmF1bHRUb29sc2V0KAogICBjb25zdCBzdGQ6OnN0cmluZyYgdmVyc2lvbikgY29uc3QKIHsKQEAgLTM4Myw2ICs0MTIsNDAgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpJc1N0ZE91dEVuY29kaW5nU3VwcG9ydGVkKCkgY29uc3QKK3sKKyAgLy8gU3VwcG9ydGVkIGZyb20gVmlzdWFsIFN0dWRpbyAxNi43IFByZXZpZXcgMy4KKyAgaWYgKHRoaXMtPlZlcnNpb24gPiBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlNWZXJzaW9uOjpWUzE2KSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaWYgKHRoaXMtPlZlcnNpb24gPCBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlNWZXJzaW9uOjpWUzE2KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdCB2c0luc3RhbmNlVmVyc2lvbjE2XzdfUDIgPSA0NTAzNjMxNjY2NjEwMjEyOworICB1bnNpZ25lZCBsb25nIGxvbmcgdnNJbnN0YW5jZVZlcnNpb247CisgIHJldHVybiAodGhpcy0+R2V0VlNJbnN0YW5jZVZlcnNpb24odnNJbnN0YW5jZVZlcnNpb24pICYmCisgICAgICAgICAgdnNJbnN0YW5jZVZlcnNpb24gPiB2c0luc3RhbmNlVmVyc2lvbjE2XzdfUDIpOworfQorCitjb25zdCBjaGFyKgorY21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3I6OkdldEFuZHJvaWRBcHBsaWNhdGlvblR5cGVSZXZpc2lvbigpCisgIGNvbnN0Cit7CisgIHN3aXRjaCAodGhpcy0+VmVyc2lvbikgeworICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTOToKKyAgICBjYXNlIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzEwOgorICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTE6CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxMjoKKyAgICAgIHJldHVybiAiIjsKKyAgICBjYXNlIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzE0OgorICAgICAgcmV0dXJuICIyLjAiOworICAgIGNhc2UgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3I6OlZTMTU6CisgICAgY2FzZSBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6VlMxNjoKKyAgICAgIHJldHVybiAiMy4wIjsKKyAgfQorICByZXR1cm4gIiI7Cit9CisKIHN0ZDo6c3RyaW5nIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yOjpHZXRBdXhpbGlhcnlUb29sc2V0KCkgY29uc3QKIHsKICAgY29uc3QgY2hhciogdmVyc2lvbiA9IHRoaXMtPkdldFBsYXRmb3JtVG9vbHNldFZlcnNpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmgKaW5kZXggNDY2ODE2Yi4uZDViODMzNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogCiAjaW5jbHVkZSAiY21HbG9iYWxWaXN1YWxTdHVkaW8xNEdlbmVyYXRvci5oIgpAQCAtMTksOCArMjAsOCBAQAogICA6IHB1YmxpYyBjbUdsb2JhbFZpc3VhbFN0dWRpbzE0R2VuZXJhdG9yCiB7CiBwdWJsaWM6Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkxNSgpOwotICBzdGF0aWMgY21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5KiBOZXdGYWN0b3J5MTYoKTsKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkxNSgpOworICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeTE2KCk7CiAKICAgYm9vbCBNYXRjaGVzR2VuZXJhdG9yTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTI4LDkgKzI5LDE1IEBACiAKICAgYm9vbCBHZXRWU0luc3RhbmNlKHN0ZDo6c3RyaW5nJiBkaXIpIGNvbnN0OwogCisgIGJvb2wgR2V0VlNJbnN0YW5jZVZlcnNpb24odW5zaWduZWQgbG9uZyBsb25nJiB2c0luc3RhbmNlVmVyc2lvbikgY29uc3Q7CisKICAgYm9vbCBJc0RlZmF1bHRUb29sc2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiB2ZXJzaW9uKSBjb25zdCBvdmVycmlkZTsKICAgc3RkOjpzdHJpbmcgR2V0QXV4aWxpYXJ5VG9vbHNldCgpIGNvbnN0IG92ZXJyaWRlOwogCisgIGJvb2wgSXNTdGRPdXRFbmNvZGluZ1N1cHBvcnRlZCgpIGNvbnN0IG92ZXJyaWRlOworCisgIGNvbnN0IGNoYXIqIEdldEFuZHJvaWRBcHBsaWNhdGlvblR5cGVSZXZpc2lvbigpIGNvbnN0IG92ZXJyaWRlOworCiBwcm90ZWN0ZWQ6CiAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvVmVyc2lvbmVkR2VuZXJhdG9yKAogICAgIFZTVmVyc2lvbiB2ZXJzaW9uLCBjbWFrZSogY20sIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3IuY3h4CmluZGV4IDMwOGRkZGEuLmQ2YTdhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21HbG9iYWxXYXRjb21XTWFrZUdlbmVyYXRvci5jeHgKQEAgLTE5LDcgKzE5LDcgQEAKICNlbmRpZgogICB0aGlzLT5Ub29sU3VwcG9ydHNDb2xvciA9IHRydWU7CiAgIHRoaXMtPk5lZWRTeW1ib2xpY01hcmsgPSB0cnVlOwotICB0aGlzLT5FbXB0eVJ1bGVIYWNrQ29tbWFuZCA9ICJAY2QgLiI7CisgIHRoaXMtPkVtcHR5UnVsZUhhY2tDb21tYW5kID0gIkAlbnVsbCI7CiAjaWZkZWYgX1dJTjMyCiAgIGNtLT5HZXRTdGF0ZSgpLT5TZXRXaW5kb3dzU2hlbGwodHJ1ZSk7CiAjZW5kaWYKQEAgLTQ0LDYgKzQ0LDE2IEBACiAgIHRoaXMtPmNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6RW5hYmxlTGFuZ3VhZ2UobCwgbWYsIG9wdGlvbmFsKTsKIH0KIAorYm9vbCBjbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yOjpTZXRTeXN0ZW1OYW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mKQoreworICBpZiAobWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9TWVNURU1fUFJPQ0VTU09SIikgPT0gIkk4NiIpIHsKKyAgICBtZi0+QWRkRGVmaW5pdGlvbigiQ01BS0VfR0VORVJBVE9SX0NDIiwgIndjbCIpOworICAgIG1mLT5BZGREZWZpbml0aW9uKCJDTUFLRV9HRU5FUkFUT1JfQ1hYIiwgIndjbCIpOworICB9CisgIHJldHVybiB0aGlzLT5jbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OlNldFN5c3RlbU5hbWUocywgbWYpOworfQorCiB2b2lkIGNtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3I6OkdldERvY3VtZW50YXRpb24oCiAgIGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21HbG9iYWxXYXRjb21XTWFrZUdlbmVyYXRvci5oCmluZGV4IDY0YWNlMTMuLmM0NzEyN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3IuaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCkBAIC0yNSw5ICsyNiwxMCBAQAogewogcHVibGljOgogICBjbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yKGNtYWtlKiBjbSk7Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKQorICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4gTmV3RmFjdG9yeSgpCiAgIHsKLSAgICByZXR1cm4gbmV3IGNtR2xvYmFsR2VuZXJhdG9yU2ltcGxlRmFjdG9yeTxjbUdsb2JhbFdhdGNvbVdNYWtlR2VuZXJhdG9yPigpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PigKKyAgICAgIG5ldyBjbUdsb2JhbEdlbmVyYXRvclNpbXBsZUZhY3Rvcnk8Y21HbG9iYWxXYXRjb21XTWFrZUdlbmVyYXRvcj4oKSk7CiAgIH0KICAgLy8hIEdldCB0aGUgbmFtZSBmb3IgdGhlIGdlbmVyYXRvci4KICAgc3RkOjpzdHJpbmcgR2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlCkBAIC0zOSw2ICs0MSw5IEBACiAgIC8qKiBHZXQgdGhlIGRvY3VtZW50YXRpb24gZW50cnkgZm9yIHRoaXMgZ2VuZXJhdG9yLiAgKi8KICAgc3RhdGljIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpOwogCisgIC8qKiBUZWxsIHRoZSBnZW5lcmF0b3IgYWJvdXQgdGhlIHRhcmdldCBzeXN0ZW0uICAqLworICBib29sIFNldFN5c3RlbU5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIHMsIGNtTWFrZWZpbGUqIG1mKSBvdmVycmlkZTsKKwogICAvKioKICAgICogVHJ5IHRvIGRldGVybWluZSBzeXN0ZW0gaW5mb3JtYXRpb24gc3VjaCBhcyBzaGFyZWQgbGlicmFyeQogICAgKiBleHRlbnNpb24sIHB0aHJlYWRzLCBieXRlIG9yZGVyIGV0Yy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdsb2JhbFhDb2RlR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUdsb2JhbFhDb2RlR2VuZXJhdG9yLmN4eAppbmRleCBhZWU0NzViLi41NzRlMGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtR2xvYmFsWENvZGVHZW5lcmF0b3IuY3h4CkBAIC0yLDE3ICsyLDIwIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUdsb2JhbFhDb2RlR2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxpb21hbmlwPgogI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmQuaCIKICNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IuaCIKQEAgLTMxLDYgKzM0LDcgQEAKICNpbmNsdWRlICJjbVNvdXJjZUdyb3VwLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbVRhcmdldC5oIgogI2luY2x1ZGUgImNtWENvZGUyMU9iamVjdC5oIgpAQCAtMTI5LDggKzEzMyw4IEBACiBjbGFzcyBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpGYWN0b3J5IDogcHVibGljIGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeQogewogcHVibGljOgotICBjbUdsb2JhbEdlbmVyYXRvciogQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtYWtlKiBjbSkgY29uc3Qgb3ZlcnJpZGU7CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbWFrZSogY20pIGNvbnN0IG92ZXJyaWRlOwogCiAgIHZvaWQgR2V0RG9jdW1lbnRhdGlvbihjbURvY3VtZW50YXRpb25FbnRyeSYgZW50cnkpIGNvbnN0IG92ZXJyaWRlCiAgIHsKQEAgLTE2OSw2ICsxNzMsNyBAQAogCiAgIHRoaXMtPlJvb3RPYmplY3QgPSBudWxscHRyOwogICB0aGlzLT5NYWluR3JvdXBDaGlsZHJlbiA9IG51bGxwdHI7CisgIHRoaXMtPkZyYW1ld29ya0dyb3VwID0gbnVsbHB0cjsKICAgdGhpcy0+Q3VycmVudE1ha2VmaWxlID0gbnVsbHB0cjsKICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yID0gbnVsbHB0cjsKICAgdGhpcy0+WGNvZGVCdWlsZENvbW1hbmRJbml0aWFsaXplZCA9IGZhbHNlOwpAQCAtMTc5LDE2ICsxODQsMTcgQEAKICAgY20tPkdldFN0YXRlKCktPlNldElzR2VuZXJhdG9yTXVsdGlDb25maWcodHJ1ZSk7CiB9CiAKLWNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6TmV3RmFjdG9yeSgpCitzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5PiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkKIHsKLSAgcmV0dXJuIG5ldyBGYWN0b3J5OworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeT4obmV3IEZhY3RvcnkpOwogfQogCi1jbUdsb2JhbEdlbmVyYXRvciogY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6RmFjdG9yeTo6Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKAotICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21ha2UqIGNtKSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPgorY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6RmFjdG9yeTo6Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtYWtlKiBjbSkgY29uc3QKIHsKICAgaWYgKG5hbWUgIT0gR2V0QWN0dWFsTmFtZSgpKSB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgfQogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKICAgY21YY29kZVZlcnNpb25QYXJzZXIgcGFyc2VyOwpAQCAtMjI0LDE2ICsyMzAsMTcgQEAKICAgaWYgKHZlcnNpb25fbnVtYmVyIDwgNTApIHsKICAgICBjbS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICJYY29kZSAiICsgdmVyc2lvbl9zdHJpbmcgKyAiIG5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oKTsKICAgfQogCi0gIGF1dG8gZ2cgPSBjbTo6bWFrZV91bmlxdWU8Y21HbG9iYWxYQ29kZUdlbmVyYXRvcj4oY20sIHZlcnNpb25fc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25fbnVtYmVyKTsKLSAgcmV0dXJuIGdnLnJlbGVhc2UoKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oCisgICAgY206Om1ha2VfdW5pcXVlPGNtR2xvYmFsWENvZGVHZW5lcmF0b3I+KGNtLCB2ZXJzaW9uX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl9udW1iZXIpKTsKICNlbHNlCiAgIHN0ZDo6Y2VyciA8PCAiQ01ha2Ugc2hvdWxkIGJlIGJ1aWx0IHdpdGggY21ha2UgdG8gdXNlIFhjb2RlLCAiCiAgICAgICAgICAgICAgICAiZGVmYXVsdCB0byBYY29kZSAxLjVcbiI7Ci0gIHJldHVybiBuZXcgY21HbG9iYWxYQ29kZUdlbmVyYXRvcihjbSk7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdsb2JhbFhDb2RlR2VuZXJhdG9yPihjbSkpOwogI2VuZGlmCiB9CiAKQEAgLTI2Niw4ICsyNzMsMTUgQEAKICAgcmV0dXJuIG1ha2VQcm9ncmFtOwogfQogCitib29sIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OlNldFN5c3RlbU5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpCit7CisgIHRoaXMtPlN5c3RlbU5hbWUgPSBzOworICByZXR1cm4gdGhpcy0+Y21HbG9iYWxHZW5lcmF0b3I6OlNldFN5c3RlbU5hbWUocywgbWYpOworfQorCiBib29sIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OlNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYnVpbGQsIGNtTWFrZWZpbGUqIG1mKQogewogICBpZiAodHMuZmluZF9maXJzdF9vZigiLD0iKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwpAQCAtMjgzLDYgKzI5Nyw5IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAgIHRoaXMtPkdlbmVyYXRvclRvb2xzZXQgPSB0czsKKyAgaWYgKGJ1aWxkKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KICAgaWYgKCF0aGlzLT5HZW5lcmF0b3JUb29sc2V0LmVtcHR5KCkpIHsKICAgICBtZi0+QWRkRGVmaW5pdGlvbigiQ01BS0VfWENPREVfUExBVEZPUk1fVE9PTFNFVCIsIHRoaXMtPkdlbmVyYXRvclRvb2xzZXQpOwogICB9CkBAIC0zNTQsNyArMzcxLDcgQEAKICAgICBzdGQ6OnN0cmluZyBwcm9qZWN0QXJnID0gY21TdHJDYXQocHJvamVjdE5hbWUsICIueGNvZGVwcm9qIik7CiAgICAgbWFrZUNvbW1hbmQuQWRkKHByb2plY3RBcmcpOwogICB9Ci0gIGlmIChjbUNvbnRhaW5zKHRhcmdldE5hbWVzLCAiY2xlYW4iKSkgeworICBpZiAoY206OmNvbnRhaW5zKHRhcmdldE5hbWVzLCAiY2xlYW4iKSkgewogICAgIG1ha2VDb21tYW5kLkFkZCgiY2xlYW4iKTsKICAgICBtYWtlQ29tbWFuZC5BZGQoIi10YXJnZXQiLCAiQUxMX0JVSUxEIik7CiAgIH0gZWxzZSB7CkBAIC0zODgsOSArNDA1LDExIEBACiB9CiAKIC8vISBDcmVhdGUgYSBsb2NhbCBnZW5lcmF0b3IgYXBwcm9wcmlhdGUgdG8gdGhpcyBHbG9iYWwgR2VuZXJhdG9yCi1jbUxvY2FsR2VuZXJhdG9yKiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcihjbU1ha2VmaWxlKiBtZikKK3N0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpDcmVhdGVMb2NhbEdlbmVyYXRvcigKKyAgY21NYWtlZmlsZSogbWYpCiB7Ci0gIHJldHVybiBuZXcgY21Mb2NhbFhDb2RlR2VuZXJhdG9yKHRoaXMsIG1mKTsKKyAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUxvY2FsR2VuZXJhdG9yPigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21Mb2NhbFhDb2RlR2VuZXJhdG9yPih0aGlzLCBtZikpOwogfQogCiB2b2lkIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkFkZEV4dHJhSURFVGFyZ2V0cygpCkBAIC00MDksMTAgKzQyOCwxMCBAQAogewogICBzaXplX3QgaW5kZXggPSAwOwogICBhdXRvIGNvbnN0JiBsZ2VucyA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9ycygpOwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnZW4gOiBsZ2VucykgewotICAgIGF1dG8gY29uc3QmIHRhcmdldHMgPSBsZ2VuLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCBjb25zdCogZ3QgOiB0YXJnZXRzKSB7Ci0gICAgICB0aGlzLT5Db21wdXRlVGFyZ2V0T3JkZXIoZ3QsIGluZGV4KTsKKyAgZm9yIChhdXRvIGNvbnN0JiBsZ2VuIDogbGdlbnMpIHsKKyAgICBjb25zdCBhdXRvJiB0YXJnZXRzID0gbGdlbi0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICAgIGZvciAoY29uc3QgYXV0byYgZ3QgOiB0YXJnZXRzKSB7CisgICAgICB0aGlzLT5Db21wdXRlVGFyZ2V0T3JkZXIoZ3QuZ2V0KCksIGluZGV4KTsKICAgICB9CiAgIH0KICAgYXNzZXJ0KGluZGV4ID09IHRoaXMtPlRhcmdldE9yZGVySW5kZXguc2l6ZSgpKTsKQEAgLTQ1OCw2ICs0NzcsOSBAQAogICAgICAgfQogICAgIH0KIAorICAgIC8vIGNhY2hlIHRoZSBlbmFibGVkIGxhbmd1YWdlcyBmb3Igc291cmNlIGZpbGUgdHlwZSBxdWVyaWVzCisgICAgdGhpcy0+R2V0RW5hYmxlZExhbmd1YWdlcyh0aGlzLT5FbmFibGVkTGFuZ3MpOworCiAgICAgdGhpcy0+U2V0R2VuZXJhdGlvblJvb3Qocm9vdCk7CiAgICAgLy8gbm93IGNyZWF0ZSB0aGUgcHJvamVjdAogICAgIHRoaXMtPk91dHB1dFhDb2RlUHJvamVjdChyb290LCBrZXlWYWwuc2Vjb25kKTsKQEAgLTQ5NiwyMCArNTE4LDE2IEBACiB2b2lkIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkFkZEV4dHJhVGFyZ2V0cygKICAgY21Mb2NhbEdlbmVyYXRvciogcm9vdCwgc3RkOjp2ZWN0b3I8Y21Mb2NhbEdlbmVyYXRvcio+JiBnZW5zKQogewotICBjbU1ha2VmaWxlKiBtZiA9IHJvb3QtPkdldE1ha2VmaWxlKCk7Ci0KICAgY29uc3QgY2hhciogbm9fd29ya2luZ19kaXJlY3RvcnkgPSBudWxscHRyOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fYnlwcm9kdWN0czsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2RlcGVuZHM7CiAKICAgLy8gQWRkIEFMTF9CVUlMRAotICBjbVRhcmdldCogYWxsYnVpbGQgPSBtZi0+QWRkVXRpbGl0eUNvbW1hbmQoCi0gICAgIkFMTF9CVUlMRCIsIGNtQ29tbWFuZE9yaWdpbjo6R2VuZXJhdG9yLCB0cnVlLCBub193b3JraW5nX2RpcmVjdG9yeSwKLSAgICBub19ieXByb2R1Y3RzLCBub19kZXBlbmRzLAorICBjbVRhcmdldCogYWxsYnVpbGQgPSByb290LT5BZGRVdGlsaXR5Q29tbWFuZCgKKyAgICAiQUxMX0JVSUxEIiwgdHJ1ZSwgbm9fd29ya2luZ19kaXJlY3RvcnksIG5vX2J5cHJvZHVjdHMsIG5vX2RlcGVuZHMsCiAgICAgY21NYWtlU2luZ2xlQ29tbWFuZExpbmUoeyAiZWNobyIsICJCdWlsZCBhbGwgcHJvamVjdHMiIH0pKTsKIAotICBjbUdlbmVyYXRvclRhcmdldCogYWxsQnVpbGRHdCA9IG5ldyBjbUdlbmVyYXRvclRhcmdldChhbGxidWlsZCwgcm9vdCk7Ci0gIHJvb3QtPkFkZEdlbmVyYXRvclRhcmdldChhbGxCdWlsZEd0KTsKKyAgcm9vdC0+QWRkR2VuZXJhdG9yVGFyZ2V0KGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRvclRhcmdldD4oYWxsYnVpbGQsIHJvb3QpKTsKIAogICAvLyBBZGQgWENPREUgZGVwZW5kIGhlbHBlcgogICBzdGQ6OnN0cmluZyBkaXIgPSByb290LT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CkBAIC01MjAsNTIgKzUzOCw1MyBAQAogICAvLyBBZGQgWkVST19DSEVDSwogICBib29sIHJlZ2VuZXJhdGUgPSAhdGhpcy0+R2xvYmFsU2V0dGluZ0lzT24oIkNNQUtFX1NVUFBSRVNTX1JFR0VORVJBVElPTiIpOwogICBib29sIGdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seSA9Ci0gICAgbWYtPklzT24oIkNNQUtFX1hDT0RFX0dFTkVSQVRFX1RPUF9MRVZFTF9QUk9KRUNUX09OTFkiKTsKKyAgICByb290LT5HZXRNYWtlZmlsZSgpLT5Jc09uKCJDTUFLRV9YQ09ERV9HRU5FUkFURV9UT1BfTEVWRUxfUFJPSkVDVF9PTkxZIik7CiAgIGJvb2wgaXNUb3BMZXZlbCA9CiAgICAgIXJvb3QtPkdldFN0YXRlU25hcHNob3QoKS5HZXRCdWlsZHN5c3RlbURpcmVjdG9yeVBhcmVudCgpLklzVmFsaWQoKTsKLSAgaWYgKHJlZ2VuZXJhdGUgJiYgKGlzVG9wTGV2ZWwgfHwgIWdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seSkpIHsKKyAgYm9vbCBpc0dlbmVyYXRlUHJvamVjdCA9IGlzVG9wTGV2ZWwgfHwgIWdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seTsKKyAgaWYgKHJlZ2VuZXJhdGUgJiYgaXNHZW5lcmF0ZVByb2plY3QpIHsKICAgICB0aGlzLT5DcmVhdGVSZVJ1bkNNYWtlRmlsZShyb290LCBnZW5zKTsKICAgICBzdGQ6OnN0cmluZyBmaWxlID0KICAgICAgIHRoaXMtPkNvbnZlcnRUb1JlbGF0aXZlRm9yTWFrZSh0aGlzLT5DdXJyZW50UmVSdW5DTWFrZU1ha2VmaWxlKTsKICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGZpbGUsICJcXCAiLCAiICIpOwotICAgIGNtVGFyZ2V0KiBjaGVjayA9IG1mLT5BZGRVdGlsaXR5Q29tbWFuZCgKLSAgICAgIENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQsIGNtQ29tbWFuZE9yaWdpbjo6R2VuZXJhdG9yLCB0cnVlLAotICAgICAgbm9fd29ya2luZ19kaXJlY3RvcnksIG5vX2J5cHJvZHVjdHMsIG5vX2RlcGVuZHMsCi0gICAgICBjbU1ha2VTaW5nbGVDb21tYW5kTGluZSh7ICJtYWtlIiwgIi1mIiwgZmlsZSB9KSk7CisgICAgY21UYXJnZXQqIGNoZWNrID0KKyAgICAgIHJvb3QtPkFkZFV0aWxpdHlDb21tYW5kKENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub193b3JraW5nX2RpcmVjdG9yeSwgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZVNpbmdsZUNvbW1hbmRMaW5lKHsgIm1ha2UiLCAiLWYiLCBmaWxlIH0pKTsKIAotICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBjaGVja0d0ID0gbmV3IGNtR2VuZXJhdG9yVGFyZ2V0KGNoZWNrLCByb290KTsKLSAgICByb290LT5BZGRHZW5lcmF0b3JUYXJnZXQoY2hlY2tHdCk7CisgICAgcm9vdC0+QWRkR2VuZXJhdG9yVGFyZ2V0KGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRvclRhcmdldD4oY2hlY2ssIHJvb3QpKTsKICAgfQogCiAgIC8vIG5vdyBtYWtlIHRoZSBhbGxidWlsZCBkZXBlbmQgb24gYWxsIHRoZSBub24tdXRpbGl0eSB0YXJnZXRzCiAgIC8vIGluIHRoZSBwcm9qZWN0CiAgIGZvciAoYXV0byYgZ2VuIDogZ2VucykgewotICAgIGZvciAoYXV0byB0YXJnZXQgOiBnZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogZ2VuLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKICAgICAgIGlmIChyZWdlbmVyYXRlICYmCiAgICAgICAgICAgKHRhcmdldC0+R2V0TmFtZSgpICE9IENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQpKSB7Ci0gICAgICAgIHRhcmdldC0+VGFyZ2V0LT5BZGRVdGlsaXR5KENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQpOworICAgICAgICB0YXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eShDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VULCBmYWxzZSk7CiAgICAgICB9CiAKICAgICAgIC8vIG1ha2UgYWxsIGV4ZSwgc2hhcmVkIGxpYnMgYW5kIG1vZHVsZXMKICAgICAgIC8vIHJ1biB0aGUgZGVwZW5kIGNoZWNrIG1ha2VmaWxlIGFzIGEgcG9zdCBidWlsZCBydWxlCiAgICAgICAvLyB0aGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgd2hlbiB0aGUgbmV4dCB0YXJnZXQgaXMgYnVpbHQKICAgICAgIC8vIHRoaW5ncyBhcmUgdXAtdG8tZGF0ZQotICAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKKyAgICAgIGlmIChpc0dlbmVyYXRlUHJvamVjdCAmJgorICAgICAgICAgIHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKICAgICAgICAgY29tbWFuZExpbmVzLmZyb250KCkuYmFjaygpID0gLy8gZmlsbCBwbGFjZWhvbGRlcgogICAgICAgICAgIHRoaXMtPlBvc3RCdWlsZE1ha2VUYXJnZXQodGFyZ2V0LT5HZXROYW1lKCksICIkKENPTkZJR1VSQVRJT04pIik7Ci0gICAgICAgIGdlbi0+R2V0TWFrZWZpbGUoKS0+QWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAorICAgICAgICBnZW4tPkFkZEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKICAgICAgICAgICB0YXJnZXQtPkdldE5hbWUoKSwgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywgY29tbWFuZExpbmVzLAogICAgICAgICAgIGNtQ3VzdG9tQ29tbWFuZFR5cGU6OlBPU1RfQlVJTEQsICJEZXBlbmQgY2hlY2sgZm9yIHhjb2RlIiwKICAgICAgICAgICBkaXIuY19zdHIoKSwgdHJ1ZSwgZmFsc2UsICIiLCAiIiwgZmFsc2UsCiAgICAgICAgICAgY21PYmplY3RMaWJyYXJ5Q29tbWFuZHM6OkFjY2VwdCk7CiAgICAgICB9CiAKLSAgICAgIGlmICghdGhpcy0+SXNFeGNsdWRlZChnZW5zWzBdLCB0YXJnZXQpKSB7Ci0gICAgICAgIGFsbGJ1aWxkLT5BZGRVdGlsaXR5KHRhcmdldC0+R2V0TmFtZSgpKTsKKyAgICAgIGlmICghdGhpcy0+SXNFeGNsdWRlZChnZW5zWzBdLCB0YXJnZXQuZ2V0KCkpKSB7CisgICAgICAgIGFsbGJ1aWxkLT5BZGRVdGlsaXR5KHRhcmdldC0+R2V0TmFtZSgpLCBmYWxzZSk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC01NzYsNyArNTk1LDcgQEAKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxmaWxlczsKICAgZm9yIChhdXRvIGdlbiA6IGdlbnMpIHsKLSAgICBjbUFwcGVuZChsZmlsZXMsIGdlbi0+R2V0TWFrZWZpbGUoKS0+R2V0TGlzdEZpbGVzKCkpOworICAgIGNtOjphcHBlbmQobGZpbGVzLCBnZW4tPkdldE1ha2VmaWxlKCktPkdldExpc3RGaWxlcygpKTsKICAgfQogCiAgIC8vIHNvcnQgdGhlIGFycmF5CkBAIC02MzYsNyArNjU1LDggQEAKICAgICAgICAgICAgICAgICAgPDwgIlxuIjsKIH0KIAotc3RhdGljIGJvb2wgb2JqZWN0SWRMZXNzVGhhbihjbVhDb2RlT2JqZWN0KiBsLCBjbVhDb2RlT2JqZWN0KiByKQorc3RhdGljIGJvb2wgb2JqZWN0SWRMZXNzVGhhbihjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Y21YQ29kZU9iamVjdD4mIGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxjbVhDb2RlT2JqZWN0PiYgcikKIHsKICAgcmV0dXJuIGwtPkdldElkKCkgPCByLT5HZXRJZCgpOwogfQpAQCAtNjUwLDkgKzY3MCw2IEBACiB2b2lkIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNsZWFyWENvZGVPYmplY3RzKCkKIHsKICAgdGhpcy0+VGFyZ2V0RG9uZVNldC5jbGVhcigpOwotICBmb3IgKGF1dG8mIG9iaiA6IHRoaXMtPlhDb2RlT2JqZWN0cykgewotICAgIGRlbGV0ZSBvYmo7Ci0gIH0KICAgdGhpcy0+WENvZGVPYmplY3RzLmNsZWFyKCk7CiAgIHRoaXMtPlhDb2RlT2JqZWN0SURzLmNsZWFyKCk7CiAgIHRoaXMtPlhDb2RlT2JqZWN0TWFwLmNsZWFyKCk7CkBAIC02NjAsOSArNjc3LDEwIEBACiAgIHRoaXMtPkdyb3VwTmFtZU1hcC5jbGVhcigpOwogICB0aGlzLT5UYXJnZXRHcm91cC5jbGVhcigpOwogICB0aGlzLT5GaWxlUmVmcy5jbGVhcigpOworICB0aGlzLT5FeHRlcm5hbExpYlJlZnMuY2xlYXIoKTsKIH0KIAotdm9pZCBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjphZGRPYmplY3QoY21YQ29kZU9iamVjdCogb2JqKQordm9pZCBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjphZGRPYmplY3Qoc3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+IG9iaikKIHsKICAgaWYgKG9iai0+R2V0VHlwZSgpID09IGNtWENvZGVPYmplY3Q6Ok9CSkVDVCkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCA9IG9iai0+R2V0SWQoKTsKQEAgLTY3NywyMiArNjk1LDI0IEBACiAgICAgdGhpcy0+WENvZGVPYmplY3RJRHMuaW5zZXJ0KGlkKTsKICAgfQogCi0gIHRoaXMtPlhDb2RlT2JqZWN0cy5wdXNoX2JhY2sob2JqKTsKKyAgdGhpcy0+WENvZGVPYmplY3RzLnB1c2hfYmFjayhzdGQ6Om1vdmUob2JqKSk7CiB9CiAKIGNtWENvZGVPYmplY3QqIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNyZWF0ZU9iamVjdCgKICAgY21YQ29kZU9iamVjdDo6UEJYVHlwZSBwdHlwZSkKIHsKLSAgY21YQ29kZU9iamVjdCogb2JqID0gbmV3IGNtWENvZGUyMU9iamVjdChwdHlwZSwgY21YQ29kZU9iamVjdDo6T0JKRUNUKTsKLSAgdGhpcy0+YWRkT2JqZWN0KG9iaik7Ci0gIHJldHVybiBvYmo7CisgIGF1dG8gb2JqID0gY206Om1ha2VfdW5pcXVlPGNtWENvZGUyMU9iamVjdD4ocHR5cGUsIGNtWENvZGVPYmplY3Q6Ok9CSkVDVCk7CisgIGF1dG8gcHRyID0gb2JqLmdldCgpOworICB0aGlzLT5hZGRPYmplY3Qoc3RkOjptb3ZlKG9iaikpOworICByZXR1cm4gcHRyOwogfQogCiBjbVhDb2RlT2JqZWN0KiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpDcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6VHlwZSB0eXBlKQogewotICBjbVhDb2RlT2JqZWN0KiBvYmogPSBuZXcgY21YQ29kZU9iamVjdChjbVhDb2RlT2JqZWN0OjpOb25lLCB0eXBlKTsKLSAgdGhpcy0+YWRkT2JqZWN0KG9iaik7Ci0gIHJldHVybiBvYmo7CisgIGF1dG8gb2JqID0gY206Om1ha2VfdW5pcXVlPGNtWENvZGVPYmplY3Q+KGNtWENvZGVPYmplY3Q6Ok5vbmUsIHR5cGUpOworICBhdXRvIHB0ciA9IG9iai5nZXQoKTsKKyAgdGhpcy0+YWRkT2JqZWN0KHN0ZDo6bW92ZShvYmopKTsKKyAgcmV0dXJuIHB0cjsKIH0KIAogY21YQ29kZU9iamVjdCogY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Q3JlYXRlU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQpAQCAtNzI2LDcgKzc0Niw3IEBACiAgIHJldHVybiBrZXk7CiB9CiAKLWNtWENvZGVPYmplY3QqIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNyZWF0ZVhDb2RlU291cmNlRmlsZUZyb21QYXRoKAorY21YQ29kZU9iamVjdCogY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Q3JlYXRlWENvZGVCdWlsZEZpbGVGcm9tUGF0aCgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxwYXRoLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAogICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywgY21Tb3VyY2VGaWxlKiBzZikKIHsKQEAgLTc2MiwxMSArNzgyLDE1IEBACiAgIFhDb2RlR2VuZXJhdG9yRXhwcmVzc2lvbkludGVycHJldGVyJiBvcGVyYXRvcj0oCiAgICAgWENvZGVHZW5lcmF0b3JFeHByZXNzaW9uSW50ZXJwcmV0ZXIgY29uc3QmKSA9IGRlbGV0ZTsKIAotICB1c2luZyBjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlcjo6RXZhbHVhdGU7Ci0KICAgY29uc3Qgc3RkOjpzdHJpbmcmIEV2YWx1YXRlKGNvbnN0IGNoYXIqIGV4cHJlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHkpCiAgIHsKKyAgICByZXR1cm4gdGhpcy0+RXZhbHVhdGUoc3RkOjpzdHJpbmcoZXhwcmVzc2lvbiA/IGV4cHJlc3Npb24gOiAiIiksIHByb3BlcnR5KTsKKyAgfQorCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBFdmFsdWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSkKKyAgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9jZXNzZWQgPQogICAgICAgdGhpcy0+Y21HZW5lcmF0b3JFeHByZXNzaW9uSW50ZXJwcmV0ZXI6OkV2YWx1YXRlKGV4cHJlc3Npb24sIHByb3BlcnR5KTsKICAgICBpZiAodGhpcy0+Q29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uLT5HZXRIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uKCkpIHsKQEAgLTc5Nyw3ICs4MjEsNyBAQAogCiAgIC8vIEFkZCBmbGFncyBmcm9tIHRhcmdldCBhbmQgc291cmNlIGZpbGUgcHJvcGVydGllcy4KICAgc3RkOjpzdHJpbmcgZmxhZ3M7Ci0gIGNvbnN0IGNoYXIqIHNyY2ZtdCA9IHNmLT5HZXRQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHNyY2ZtdCA9IHNmLT5HZXRTYWZlUHJvcGVydHkoIkZvcnRyYW5fRk9STUFUIik7CiAgIHN3aXRjaCAoY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5Gb3JtYXQoc3JjZm10KSkgewogICAgIGNhc2UgY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5Gb3JtYXRGaXhlZDoKICAgICAgIGZsYWdzID0gIi1maXhlZCAiICsgZmxhZ3M7CkBAIC04MDgsMjMgKzgzMiwzMSBAQAogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgfQorCisgIC8vIGV4cGxpY2l0bHkgYWRkIHRoZSBleHBsaWNpdCBsYW5ndWFnZSBmbGFnIGJlZm9yZSBhbnkgb3RoZXIgZmxhZworICAvLyB0aGlzIHdheSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXIgZmxhZ3MgaXMgbWFpbnRhaW5lZAorICBpZiAoc2YtPkdldFByb3BlcnR5KCJMQU5HVUFHRSIpKSB7CisgICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLT5BcHBlbmRGZWF0dXJlT3B0aW9ucyhmbGFncywgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFWFBMSUNJVF9MQU5HVUFHRSIpOworICB9CisKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9GTEFHUygiQ09NUElMRV9GTEFHUyIpOwotICBpZiAoY29uc3QgY2hhciogY2ZsYWdzID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7Ci0gICAgbGctPkFwcGVuZEZsYWdzKGZsYWdzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNmbGFncywgQ09NUElMRV9GTEFHUykpOworICBpZiAoY21Qcm9wIGNmbGFncyA9IHNmLT5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgeworICAgIGxnLT5BcHBlbmRGbGFncyhmbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2ZsYWdzLCBDT01QSUxFX0ZMQUdTKSk7CiAgIH0KICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9PUFRJT05TKCJDT01QSUxFX09QVElPTlMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvcHRpb25zID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKKyAgaWYgKGNtUHJvcCBjb3B0aW9ucyA9IHNmLT5HZXRQcm9wZXJ0eShDT01QSUxFX09QVElPTlMpKSB7CiAgICAgbGctPkFwcGVuZENvbXBpbGVPcHRpb25zKAotICAgICAgZmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUykpOworICAgICAgZmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvcHRpb25zLCBDT01QSUxFX09QVElPTlMpKTsKICAgfQogCiAgIC8vIEFkZCBwZXItc291cmNlIGRlZmluaXRpb25zLgogICBCdWlsZE9iamVjdExpc3RPclN0cmluZyBmbGFnc0J1aWxkKHRoaXMsIGZhbHNlKTsKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9ERUZJTklUSU9OUygiQ09NUElMRV9ERUZJTklUSU9OUyIpOwotICBpZiAoY29uc3QgY2hhciogY29tcGlsZV9kZWZzID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CisgIGlmIChjbVByb3AgY29tcGlsZV9kZWZzID0gc2YtPkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CiAgICAgdGhpcy0+QXBwZW5kRGVmaW5lcygKICAgICAgIGZsYWdzQnVpbGQsCi0gICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykuY19zdHIoKSwKKyAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykuY19zdHIoKSwKICAgICAgIHRydWUpOwogICB9CiAKQEAgLTg0MiwxNSArODc0LDE1IEBACiAgIC8vIEFkZCBwZXItc291cmNlIGluY2x1ZGUgZGlyZWN0b3JpZXMuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlczsKICAgY29uc3Qgc3RkOjpzdHJpbmcgSU5DTFVERV9ESVJFQ1RPUklFUygiSU5DTFVERV9ESVJFQ1RPUklFUyIpOwotICBpZiAoY29uc3QgY2hhciogY2luY2x1ZGVzID0gc2YtPkdldFByb3BlcnR5KElOQ0xVREVfRElSRUNUT1JJRVMpKSB7CisgIGlmIChjbVByb3AgY2luY2x1ZGVzID0gc2YtPkdldFByb3BlcnR5KElOQ0xVREVfRElSRUNUT1JJRVMpKSB7CiAgICAgbGctPkFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcygKLSAgICAgIGluY2x1ZGVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNpbmNsdWRlcywgSU5DTFVERV9ESVJFQ1RPUklFUyksCisgICAgICBpbmNsdWRlcywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2luY2x1ZGVzLCBJTkNMVURFX0RJUkVDVE9SSUVTKSwKICAgICAgICpzZik7CiAgIH0KICAgbGctPkFwcGVuZEZsYWdzKGZsYWdzLCBsZy0+R2V0SW5jbHVkZUZsYWdzKGluY2x1ZGVzLCBndGd0LCBsYW5nLCB0cnVlKSk7CiAKICAgY21YQ29kZU9iamVjdCogYnVpbGRGaWxlID0KLSAgICB0aGlzLT5DcmVhdGVYQ29kZVNvdXJjZUZpbGVGcm9tUGF0aChzZi0+UmVzb2x2ZUZ1bGxQYXRoKCksIGd0Z3QsIGxhbmcsIHNmKTsKKyAgICB0aGlzLT5DcmVhdGVYQ29kZUJ1aWxkRmlsZUZyb21QYXRoKHNmLT5SZXNvbHZlRnVsbFBhdGgoKSwgZ3RndCwgbGFuZywgc2YpOwogCiAgIGNtWENvZGVPYmplY3QqIHNldHRpbmdzID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6OkFUVFJJQlVURV9HUk9VUCk7CiAgIHNldHRpbmdzLT5BZGRBdHRyaWJ1dGVJZk5vdEVtcHR5KCJDT01QSUxFUl9GTEFHUyIsCkBAIC04NzMsMTAgKzkwNSwxMCBAQAogICB9CiAKICAgLy8gQWRkIHVzZXItc3BlY2lmaWVkIGZpbGUgYXR0cmlidXRlcy4KLSAgY29uc3QgY2hhciogZXh0cmFGaWxlQXR0cmlidXRlcyA9IHNmLT5HZXRQcm9wZXJ0eSgiWENPREVfRklMRV9BVFRSSUJVVEVTIik7CisgIGNtUHJvcCBleHRyYUZpbGVBdHRyaWJ1dGVzID0gc2YtPkdldFByb3BlcnR5KCJYQ09ERV9GSUxFX0FUVFJJQlVURVMiKTsKICAgaWYgKGV4dHJhRmlsZUF0dHJpYnV0ZXMpIHsKICAgICAvLyBFeHBhbmQgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcy4KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXR0cmlidXRlcyA9IGNtRXhwYW5kZWRMaXN0KGV4dHJhRmlsZUF0dHJpYnV0ZXMpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdHRyaWJ1dGVzID0gY21FeHBhbmRlZExpc3QoKmV4dHJhRmlsZUF0dHJpYnV0ZXMpOwogCiAgICAgLy8gU3RvcmUgdGhlIGF0dHJpYnV0ZXMuCiAgICAgZm9yIChjb25zdCBhdXRvJiBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKSB7CkBAIC04OTgsMTkgKzkzMCw0NSBAQAogICAgICAgICAgICAgICIvQ01ha2VMaXN0cy50eHQiKTsKICAgY21Tb3VyY2VGaWxlKiBzcmNDTWFrZUxpc3RzID0gdGFyZ2V0LT5NYWtlZmlsZS0+R2V0T3JDcmVhdGVTb3VyY2UoCiAgICAgbGlzdGZpbGUsIGZhbHNlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKLSAgaWYgKCFjbUNvbnRhaW5zKHNvdXJjZXMsIHNyY0NNYWtlTGlzdHMpKSB7CisgIGlmICghY206OmNvbnRhaW5zKHNvdXJjZXMsIHNyY0NNYWtlTGlzdHMpKSB7CiAgICAgc291cmNlcy5wdXNoX2JhY2soc3JjQ01ha2VMaXN0cyk7CiAgIH0KIH0KIAotc3RkOjpzdHJpbmcgR2V0U291cmNlY29kZVZhbHVlRnJvbUZpbGVFeHRlbnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIF9leHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGtlZXBMYXN0S25vd25GaWxlVHlwZSkKK2Jvb2wgSXNMaWJyYXJ5RXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlRXh0KQoreworICByZXR1cm4gKGZpbGVFeHQgPT0gIi5mcmFtZXdvcmsiIHx8IGZpbGVFeHQgPT0gIi5hIiB8fCBmaWxlRXh0ID09ICIubyIgfHwKKyAgICAgICAgICBmaWxlRXh0ID09ICIuZHlsaWIiIHx8IGZpbGVFeHQgPT0gIi50YmQiKTsKK30KK2Jvb2wgSXNMaWJyYXJ5VHlwZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZVR5cGUpCit7CisgIHJldHVybiAoZmlsZVR5cGUgPT0gIndyYXBwZXIuZnJhbWV3b3JrIiB8fCBmaWxlVHlwZSA9PSAiYXJjaGl2ZS5hciIgfHwKKyAgICAgICAgICBmaWxlVHlwZSA9PSAiY29tcGlsZWQubWFjaC1vLm9iamZpbGUiIHx8CisgICAgICAgICAgZmlsZVR5cGUgPT0gImNvbXBpbGVkLm1hY2gtby5keWxpYiIgfHwKKyAgICAgICAgICBmaWxlVHlwZSA9PSAic291cmNlY29kZS50ZXh0LWJhc2VkLWR5bGliLWRlZmluaXRpb24iKTsKK30KKworc3RkOjpzdHJpbmcgR2V0RGlyZWN0b3J5VmFsdWVGcm9tRmlsZUV4dGVuc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZGlyRXh0KQoreworICBzdGQ6OnN0cmluZyBleHQgPSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UoZGlyRXh0KTsKKyAgaWYgKGV4dCA9PSAiZnJhbWV3b3JrIikgeworICAgIHJldHVybiAid3JhcHBlci5mcmFtZXdvcmsiOworICB9CisgIGlmIChleHQgPT0gInhjYXNzZXRzIikgeworICAgIHJldHVybiAiZm9sZGVyLmFzc2V0Y2F0YWxvZyI7CisgIH0KKyAgcmV0dXJuICJmb2xkZXIiOworfQorCitzdGQ6OnN0cmluZyBHZXRTb3VyY2Vjb2RlVmFsdWVGcm9tRmlsZUV4dGVuc2lvbigKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIF9leHQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAorICBib29sJiBrZWVwTGFzdEtub3duRmlsZVR5cGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZW5hYmxlZF9sYW5ncykKIHsKICAgc3RkOjpzdHJpbmcgZXh0ID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKF9leHQpOwogICBzdGQ6OnN0cmluZyBzb3VyY2Vjb2RlID0gInNvdXJjZWNvZGUiOwogCiAgIGlmIChleHQgPT0gIm8iKSB7CisgICAga2VlcExhc3RLbm93bkZpbGVUeXBlID0gdHJ1ZTsKICAgICBzb3VyY2Vjb2RlID0gImNvbXBpbGVkLm1hY2gtby5vYmpmaWxlIjsKICAgfSBlbHNlIGlmIChleHQgPT0gInhjdGVzdCIpIHsKICAgICBzb3VyY2Vjb2RlID0gIndyYXBwZXIuY2ZidW5kbGUiOwpAQCAtOTIwLDkgKzk3OCw5IEBACiAgIH0gZWxzZSBpZiAoZXh0ID09ICJzdG9yeWJvYXJkIikgewogICAgIGtlZXBMYXN0S25vd25GaWxlVHlwZSA9IHRydWU7CiAgICAgc291cmNlY29kZSA9ICJmaWxlLnN0b3J5Ym9hcmQiOwotICB9IGVsc2UgaWYgKGV4dCA9PSAibW0iKSB7CisgIH0gZWxzZSBpZiAoZXh0ID09ICJtbSIgJiYgIWNtOjpjb250YWlucyhlbmFibGVkX2xhbmdzLCAiT0JKQ1hYIikpIHsKICAgICBzb3VyY2Vjb2RlICs9ICIuY3BwLm9iamNwcCI7Ci0gIH0gZWxzZSBpZiAoZXh0ID09ICJtIikgeworICB9IGVsc2UgaWYgKGV4dCA9PSAibSIgJiYgIWNtOjpjb250YWlucyhlbmFibGVkX2xhbmdzLCAiT0JKQyIpKSB7CiAgICAgc291cmNlY29kZSArPSAiLmMub2JqYyI7CiAgIH0gZWxzZSBpZiAoZXh0ID09ICJzd2lmdCIpIHsKICAgICBzb3VyY2Vjb2RlICs9ICIuc3dpZnQiOwpAQCAtOTU0LDYgKzEwMTIsMTQgQEAKICAgICBzb3VyY2Vjb2RlICs9ICIubWV0YWwiOwogICB9IGVsc2UgaWYgKGV4dCA9PSAibWlnIikgewogICAgIHNvdXJjZWNvZGUgKz0gIi5taWciOworICB9IGVsc2UgaWYgKGV4dCA9PSAidGJkIikgeworICAgIHNvdXJjZWNvZGUgKz0gIi50ZXh0LWJhc2VkLWR5bGliLWRlZmluaXRpb24iOworICB9IGVsc2UgaWYgKGV4dCA9PSAiYSIpIHsKKyAgICBrZWVwTGFzdEtub3duRmlsZVR5cGUgPSB0cnVlOworICAgIHNvdXJjZWNvZGUgPSAiYXJjaGl2ZS5hciI7CisgIH0gZWxzZSBpZiAoZXh0ID09ICJkeWxpYiIpIHsKKyAgICBrZWVwTGFzdEtub3duRmlsZVR5cGUgPSB0cnVlOworICAgIHNvdXJjZWNvZGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsKICAgfQogICAvLyBlbHNlCiAgIC8vICB7CkBAIC05NzAsNjIgKzEwMzYsODAgQEAKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxwYXRoLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAogICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywgY21Tb3VyY2VGaWxlKiBzZikKIHsKLSAgc3RkOjpzdHJpbmcga2V5ID0gR2V0R3JvdXBNYXBLZXlGcm9tUGF0aCh0YXJnZXQsIGZ1bGxwYXRoKTsKLSAgY21YQ29kZU9iamVjdCogZmlsZVJlZiA9IHRoaXMtPkZpbGVSZWZzW2tleV07Ci0gIGlmICghZmlsZVJlZikgewotICAgIGZpbGVSZWYgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6UEJYRmlsZVJlZmVyZW5jZSk7Ci0gICAgZmlsZVJlZi0+U2V0Q29tbWVudChmdWxscGF0aCk7Ci0gICAgdGhpcy0+RmlsZVJlZnNba2V5XSA9IGZpbGVSZWY7Ci0gIH0KLSAgY21YQ29kZU9iamVjdCogZ3JvdXAgPSB0aGlzLT5Hcm91cE1hcFtrZXldOwotICBjbVhDb2RlT2JqZWN0KiBjaGlsZHJlbiA9IGdyb3VwLT5HZXRPYmplY3QoImNoaWxkcmVuIik7Ci0gIGlmICghY2hpbGRyZW4tPkhhc09iamVjdChmaWxlUmVmKSkgewotICAgIGNoaWxkcmVuLT5BZGRPYmplY3QoZmlsZVJlZik7Ci0gIH0KLSAgZmlsZVJlZi0+QWRkQXR0cmlidXRlKCJmaWxlRW5jb2RpbmciLCB0aGlzLT5DcmVhdGVTdHJpbmcoIjQiKSk7Ci0KICAgYm9vbCB1c2VMYXN0S25vd25GaWxlVHlwZSA9IGZhbHNlOwogICBzdGQ6OnN0cmluZyBmaWxlVHlwZTsKICAgaWYgKHNmKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGUgPSBzZi0+R2V0UHJvcGVydHkoIlhDT0RFX0VYUExJQ0lUX0ZJTEVfVFlQRSIpKSB7Ci0gICAgICBmaWxlVHlwZSA9IGU7Ci0gICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBsID0gc2YtPkdldFByb3BlcnR5KCJYQ09ERV9MQVNUX0tOT1dOX0ZJTEVfVFlQRSIpKSB7CisgICAgaWYgKGNtUHJvcCBlID0gc2YtPkdldFByb3BlcnR5KCJYQ09ERV9FWFBMSUNJVF9GSUxFX1RZUEUiKSkgeworICAgICAgZmlsZVR5cGUgPSAqZTsKKyAgICB9IGVsc2UgaWYgKGNtUHJvcCBsID0gc2YtPkdldFByb3BlcnR5KCJYQ09ERV9MQVNUX0tOT1dOX0ZJTEVfVFlQRSIpKSB7CiAgICAgICB1c2VMYXN0S25vd25GaWxlVHlwZSA9IHRydWU7Ci0gICAgICBmaWxlVHlwZSA9IGw7CisgICAgICBmaWxlVHlwZSA9ICpsOwogICAgIH0KICAgfQorICAvLyBNYWtlIGEgY29weSBzbyB0aGF0IHdlIGNhbiBvdmVycmlkZSBpdCBsYXRlcgorICBzdGQ6OnN0cmluZyBwYXRoID0gZnVsbHBhdGg7CisgIC8vIENvbXB1dGUgdGhlIGV4dGVuc2lvbiB3aXRob3V0IGxlYWRpbmcgJy4nLgorICBzdGQ6OnN0cmluZyBleHQgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZUxhc3RFeHRlbnNpb24ocGF0aCk7CisgIGlmICghZXh0LmVtcHR5KCkpIHsKKyAgICBleHQgPSBleHQuc3Vic3RyKDEpOworICB9CiAgIGlmIChmaWxlVHlwZS5lbXB0eSgpKSB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgZXh0ZW5zaW9uIHdpdGhvdXQgbGVhZGluZyAnLicuCi0gICAgc3RkOjpzdHJpbmcgZXh0ID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVMYXN0RXh0ZW5zaW9uKGZ1bGxwYXRoKTsKLSAgICBpZiAoIWV4dC5lbXB0eSgpKSB7Ci0gICAgICBleHQgPSBleHQuc3Vic3RyKDEpOworICAgIC8vIElmIGZpbGUgaGFzIG5vIGV4dGVuc2lvbiBpdCdzIGVpdGhlciBhIHJhdyBleGVjdXRhYmxlIG9yIG1pZ2h0CisgICAgLy8gYmUgYSBkaXJlY3QgcmVmZXJlbmNlIHRvIGJpbmFyeSB3aXRoaW4gYSBmcmFtZXdvcmsgKGJhZCBwcmFjdGljZSEpCisgICAgLy8gc28gdGhpcyBpcyB3aGVyZSB3ZSBjaGFuZ2UgdGhlIHBhdGggdG8gdGhlIHBvaW50IHRvIGZyYW1ld29yaworICAgIC8vIGRpcmVjdG9yeS4KKyAgICBpZiAoZXh0LmVtcHR5KCkpIHsKKyAgICAgIGF1dG8gcGFyZW50RGlyID0gY21TeXN0ZW1Ub29sczo6R2V0UGFyZW50RGlyZWN0b3J5KHBhdGgpOworICAgICAgYXV0byBwYXJlbnRFeHQgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZUxhc3RFeHRlbnNpb24ocGFyZW50RGlyKTsKKyAgICAgIGlmIChwYXJlbnRFeHQgPT0gIi5mcmFtZXdvcmsiKSB7CisgICAgICAgIHBhdGggPSBwYXJlbnREaXI7CisgICAgICAgIGV4dCA9IHBhcmVudEV4dC5zdWJzdHIoMSk7CisgICAgICB9CiAgICAgfQotCiAgICAgLy8gSWYgZnVsbHBhdGggcmVmZXJlbmNlcyBhIGRpcmVjdG9yeSwgdGhlbiB3ZSBuZWVkIHRvIHNwZWNpZnkKICAgICAvLyBsYXN0S25vd25GaWxlVHlwZSBhcyBmb2xkZXIgaW4gb3JkZXIgZm9yIFhjb2RlIHRvIGJlIGFibGUgdG8KICAgICAvLyBvcGVuIHRoZSBjb250ZW50cyBvZiB0aGUgZm9sZGVyLgogICAgIC8vIChYY29kZSA0LjYgZG9lcyBub3QgbGlrZSBleHBsaWNpdEZpbGVUeXBlPWZvbGRlcikuCi0gICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShmdWxscGF0aCkpIHsKLSAgICAgIGZpbGVUeXBlID0gKGV4dCA9PSAieGNhc3NldHMiID8gImZvbGRlci5hc3NldGNhdGFsb2ciIDogImZvbGRlciIpOworICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkocGF0aCkpIHsKKyAgICAgIGZpbGVUeXBlID0gR2V0RGlyZWN0b3J5VmFsdWVGcm9tRmlsZUV4dGVuc2lvbihleHQpOwogICAgICAgdXNlTGFzdEtub3duRmlsZVR5cGUgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICBmaWxlVHlwZSA9Ci0gICAgICAgIEdldFNvdXJjZWNvZGVWYWx1ZUZyb21GaWxlRXh0ZW5zaW9uKGV4dCwgbGFuZywgdXNlTGFzdEtub3duRmlsZVR5cGUpOworICAgICAgZmlsZVR5cGUgPSBHZXRTb3VyY2Vjb2RlVmFsdWVGcm9tRmlsZUV4dGVuc2lvbigKKyAgICAgICAgZXh0LCBsYW5nLCB1c2VMYXN0S25vd25GaWxlVHlwZSwgdGhpcy0+RW5hYmxlZExhbmdzKTsKICAgICB9CiAgIH0KIAorICBzdGQ6OnN0cmluZyBrZXkgPSBHZXRHcm91cE1hcEtleUZyb21QYXRoKHRhcmdldCwgcGF0aCk7CisgIGNtWENvZGVPYmplY3QqIGZpbGVSZWYgPSB0aGlzLT5GaWxlUmVmc1trZXldOworICBpZiAoIWZpbGVSZWYpIHsKKyAgICBmaWxlUmVmID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6OlBCWEZpbGVSZWZlcmVuY2UpOworICAgIGZpbGVSZWYtPlNldENvbW1lbnQocGF0aCk7CisgICAgdGhpcy0+RmlsZVJlZnNba2V5XSA9IGZpbGVSZWY7CisgIH0KKyAgZmlsZVJlZi0+QWRkQXR0cmlidXRlKCJmaWxlRW5jb2RpbmciLCB0aGlzLT5DcmVhdGVTdHJpbmcoIjQiKSk7CiAgIGZpbGVSZWYtPkFkZEF0dHJpYnV0ZSh1c2VMYXN0S25vd25GaWxlVHlwZSA/ICJsYXN0S25vd25GaWxlVHlwZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImV4cGxpY2l0RmlsZVR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKGZpbGVUeXBlKSk7Ci0KICAgLy8gU3RvcmUgdGhlIGZpbGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAgc3RkOjpzdHJpbmcgcGF0aCA9IHRoaXMtPlJlbGF0aXZlVG9Tb3VyY2UoZnVsbHBhdGgpOworICBpZiAoIUlzTGlicmFyeVR5cGUoZmlsZVR5cGUpKSB7CisgICAgcGF0aCA9IHRoaXMtPlJlbGF0aXZlVG9Tb3VyY2UocGF0aCk7CisgIH0KICAgc3RkOjpzdHJpbmcgbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShwYXRoKTsKICAgY29uc3QgY2hhciogc291cmNlVHJlZSA9CiAgICAgY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGF0aCkgPyAiPGFic29sdXRlPiIgOiAiU09VUkNFX1JPT1QiOwogICBmaWxlUmVmLT5BZGRBdHRyaWJ1dGUoIm5hbWUiLCB0aGlzLT5DcmVhdGVTdHJpbmcobmFtZSkpOwogICBmaWxlUmVmLT5BZGRBdHRyaWJ1dGUoInBhdGgiLCB0aGlzLT5DcmVhdGVTdHJpbmcocGF0aCkpOwogICBmaWxlUmVmLT5BZGRBdHRyaWJ1dGUoInNvdXJjZVRyZWUiLCB0aGlzLT5DcmVhdGVTdHJpbmcoc291cmNlVHJlZSkpOworCisgIGNtWENvZGVPYmplY3QqIGdyb3VwID0gdGhpcy0+R3JvdXBNYXBba2V5XTsKKyAgaWYgKCFncm91cCAmJiBJc0xpYnJhcnlUeXBlKGZpbGVUeXBlKSkgeworICAgIGdyb3VwID0gdGhpcy0+RnJhbWV3b3JrR3JvdXA7CisgICAgdGhpcy0+R3JvdXBNYXBba2V5XSA9IGdyb3VwOworICB9CisgIGNtWENvZGVPYmplY3QqIGNoaWxkcmVuID0gZ3JvdXAtPkdldE9iamVjdCgiY2hpbGRyZW4iKTsKKyAgaWYgKCFjaGlsZHJlbi0+SGFzT2JqZWN0KGZpbGVSZWYpKSB7CisgICAgY2hpbGRyZW4tPkFkZE9iamVjdChmaWxlUmVmKTsKKyAgfQogICByZXR1cm4gZmlsZVJlZjsKIH0KIApAQCAtMTA1OCwxMSArMTE0Miw4IEBACiAgIHRoaXMtPkN1cnJlbnRNYWtlZmlsZSA9IGdlbi0+R2V0TWFrZWZpbGUoKTsKIAogICAvLyBTZWxlY3QgdGhlIGN1cnJlbnQgc2V0IG9mIGNvbmZpZ3VyYXRpb24gdHlwZXMuCi0gIHRoaXMtPkN1cnJlbnRDb25maWd1cmF0aW9uVHlwZXMuY2xlYXIoKTsKLSAgdGhpcy0+Q3VycmVudE1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyh0aGlzLT5DdXJyZW50Q29uZmlndXJhdGlvblR5cGVzKTsKLSAgaWYgKHRoaXMtPkN1cnJlbnRDb25maWd1cmF0aW9uVHlwZXMuZW1wdHkoKSkgewotICAgIHRoaXMtPkN1cnJlbnRDb25maWd1cmF0aW9uVHlwZXMuZW1wbGFjZV9iYWNrKCk7Ci0gIH0KKyAgdGhpcy0+Q3VycmVudENvbmZpZ3VyYXRpb25UeXBlcyA9CisgICAgdGhpcy0+Q3VycmVudE1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiB9CiAKIHN0cnVjdCBjbVNvdXJjZUZpbGVQYXRoQ29tcGFyZQpAQCAtMTA5Myw4ICsxMTc0LDggQEAKICAgY21Mb2NhbEdlbmVyYXRvciogZ2VuLCBzdGQ6OnZlY3RvcjxjbVhDb2RlT2JqZWN0Kj4mIHRhcmdldHMpCiB7CiAgIHRoaXMtPlNldEN1cnJlbnRMb2NhbEdlbmVyYXRvcihnZW4pOwotICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+IGd0cyA9Ci0gICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4gZ3RzOworICBjbTo6YXBwZW5kKGd0cywgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpOwogICBzdGQ6OnNvcnQoZ3RzLmJlZ2luKCksIGd0cy5lbmQoKSwKICAgICAgICAgICAgIFt0aGlzXShjbUdlbmVyYXRvclRhcmdldCBjb25zdCogbCwgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHIpIHsKICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMtPlRhcmdldE9yZGVySW5kZXhbbF0gPCB0aGlzLT5UYXJnZXRPcmRlckluZGV4W3JdOwpAQCAtMTExOCw3ICsxMTk5LDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCi0gIGlmIChndGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgeworICBpZiAoIWd0Z3QtPklzSW5CdWlsZFN5c3RlbSgpKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApAQCAtMTEzMywyMyArMTIxNCwyNCBAQAogICB9CiAKICAgLy8gb3JnYW5pemUgdGhlIHNvdXJjZXMKLSAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gY2xhc3NlczsKLSAgaWYgKCFndGd0LT5HZXRDb25maWdDb21tb25Tb3VyY2VGaWxlcyhjbGFzc2VzKSkgeworICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBjb21tb25Tb3VyY2VGaWxlczsKKyAgaWYgKCFndGd0LT5HZXRDb25maWdDb21tb25Tb3VyY2VGaWxlcyhjb21tb25Tb3VyY2VGaWxlcykpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICAvLyBBZGQgQ01ha2VMaXN0cy50eHQgZmlsZSBmb3IgdXNlciBjb252ZW5pZW5jZS4KLSAgdGhpcy0+QWRkWENvZGVQcm9qQnVpbGRSdWxlKGd0Z3QsIGNsYXNzZXMpOworICB0aGlzLT5BZGRYQ29kZVByb2pCdWlsZFJ1bGUoZ3RndCwgY29tbW9uU291cmNlRmlsZXMpOwogCiAgIC8vIEFkZCB0aGUgSW5mby5wbGlzdCB3ZSBhcmUgYWJvdXQgdG8gZ2VuZXJhdGUgZm9yIGFuIEFwcCBCdW5kbGUuCiAgIGlmIChndGd0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiTUFDT1NYX0JVTkRMRSIpKSB7CiAgICAgc3RkOjpzdHJpbmcgcGxpc3QgPSB0aGlzLT5Db21wdXRlSW5mb1BMaXN0TG9jYXRpb24oZ3RndCk7CiAgICAgY21Tb3VyY2VGaWxlKiBzZiA9IGd0Z3QtPk1ha2VmaWxlLT5HZXRPckNyZWF0ZVNvdXJjZSgKICAgICAgIHBsaXN0LCB0cnVlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKLSAgICBjbGFzc2VzLnB1c2hfYmFjayhzZik7CisgICAgY29tbW9uU291cmNlRmlsZXMucHVzaF9iYWNrKHNmKTsKICAgfQogCi0gIHN0ZDo6c29ydChjbGFzc2VzLmJlZ2luKCksIGNsYXNzZXMuZW5kKCksIGNtU291cmNlRmlsZVBhdGhDb21wYXJlKCkpOworICBzdGQ6OnNvcnQoY29tbW9uU291cmNlRmlsZXMuYmVnaW4oKSwgY29tbW9uU291cmNlRmlsZXMuZW5kKCksCisgICAgICAgICAgICBjbVNvdXJjZUZpbGVQYXRoQ29tcGFyZSgpKTsKIAogICBndGd0LT5Db21wdXRlT2JqZWN0TWFwcGluZygpOwogCkBAIC0xMTU3LDE2ICsxMjM5LDE5IEBACiAgIHN0ZDo6dmVjdG9yPGNtWENvZGVPYmplY3QqPiBoZWFkZXJGaWxlczsKICAgc3RkOjp2ZWN0b3I8Y21YQ29kZU9iamVjdCo+IHJlc291cmNlRmlsZXM7CiAgIHN0ZDo6dmVjdG9yPGNtWENvZGVPYmplY3QqPiBzb3VyY2VGaWxlczsKLSAgZm9yIChhdXRvIHNvdXJjZUZpbGUgOiBjbGFzc2VzKSB7CisgIGZvciAoYXV0byBzb3VyY2VGaWxlIDogY29tbW9uU291cmNlRmlsZXMpIHsKICAgICBjbVhDb2RlT2JqZWN0KiB4c2YgPSB0aGlzLT5DcmVhdGVYQ29kZVNvdXJjZUZpbGUoCiAgICAgICB0aGlzLT5DdXJyZW50TG9jYWxHZW5lcmF0b3IsIHNvdXJjZUZpbGUsIGd0Z3QpOwogICAgIGNtWENvZGVPYmplY3QqIGZyID0geHNmLT5HZXRPYmplY3QoImZpbGVSZWYiKTsKICAgICBjbVhDb2RlT2JqZWN0KiBmaWxldHlwZSA9IGZyLT5HZXRPYmplY3QoKS0+R2V0T2JqZWN0KCJleHBsaWNpdEZpbGVUeXBlIik7CisgICAgaWYgKCFmaWxldHlwZSkgeworICAgICAgZmlsZXR5cGUgPSBmci0+R2V0T2JqZWN0KCktPkdldE9iamVjdCgibGFzdEtub3duRmlsZVR5cGUiKTsKKyAgICB9CiAKICAgICBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlRmlsZUZsYWdzIHRzRmxhZ3MgPQogICAgICAgZ3RndC0+R2V0VGFyZ2V0U291cmNlRmlsZUZsYWdzKHNvdXJjZUZpbGUpOwogCi0gICAgaWYgKGZpbGV0eXBlICYmIGZpbGV0eXBlLT5HZXRTdHJpbmcoKSA9PSAiY29tcGlsZWQubWFjaC1vLm9iamZpbGUiKSB7CisgICAgaWYgKGZpbGV0eXBlICYmIElzTGlicmFyeVR5cGUoZmlsZXR5cGUtPkdldFN0cmluZygpKSkgewogICAgICAgaWYgKHNvdXJjZUZpbGUtPkdldE9iamVjdExpYnJhcnkoKS5lbXB0eSgpKSB7CiAgICAgICAgIGV4dGVybmFsT2JqRmlsZXMucHVzaF9iYWNrKHhzZik7CiAgICAgICB9CkBAIC0xMjU2LDcgKzEzNDEsNyBAQAogICAgIHVzaW5nIG1hcE9mVmVjdG9yT2ZTb3VyY2VGaWxlcyA9CiAgICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4+OwogICAgIG1hcE9mVmVjdG9yT2ZTb3VyY2VGaWxlcyBidW5kbGVGaWxlczsKLSAgICBmb3IgKGF1dG8gc291cmNlRmlsZSA6IGNsYXNzZXMpIHsKKyAgICBmb3IgKGF1dG8gc291cmNlRmlsZSA6IGNvbW1vblNvdXJjZUZpbGVzKSB7CiAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlRmlsZUZsYWdzIHRzRmxhZ3MgPQogICAgICAgICBndGd0LT5HZXRUYXJnZXRTb3VyY2VGaWxlRmxhZ3Moc291cmNlRmlsZSk7CiAgICAgICBpZiAodHNGbGFncy5UeXBlID09IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VGaWxlVHlwZU1hY0NvbnRlbnQpIHsKQEAgLTEzMDQsNyArMTM4OSw3IEBACiAgICAgdXNpbmcgbWFwT2ZWZWN0b3JPZlNvdXJjZUZpbGVzID0KICAgICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPj47CiAgICAgbWFwT2ZWZWN0b3JPZlNvdXJjZUZpbGVzIGJ1bmRsZUZpbGVzOwotICAgIGZvciAoYXV0byBzb3VyY2VGaWxlIDogY2xhc3NlcykgeworICAgIGZvciAoYXV0byBzb3VyY2VGaWxlIDogY29tbW9uU291cmNlRmlsZXMpIHsKICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VGaWxlRmxhZ3MgdHNGbGFncyA9CiAgICAgICAgIGd0Z3QtPkdldFRhcmdldFNvdXJjZUZpbGVGbGFncyhzb3VyY2VGaWxlKTsKICAgICAgIGlmICh0c0ZsYWdzLlR5cGUgPT0gY21HZW5lcmF0b3JUYXJnZXQ6OlNvdXJjZUZpbGVUeXBlRGVlcFJlc291cmNlKSB7CkBAIC0xMzM0LDIyICsxNDE5LDIwIEBACiAgICAgfQogICB9CiAKLSAgLy8gY3JlYXRlIGZyYW1ld29yayBidWlsZCBwaGFzZQorICAvLyBhbHdheXMgY3JlYXRlIGZyYW1ld29yayBidWlsZCBwaGFzZQogICBjbVhDb2RlT2JqZWN0KiBmcmFtZXdvcmtCdWlsZFBoYXNlID0gbnVsbHB0cjsKLSAgaWYgKCFleHRlcm5hbE9iakZpbGVzLmVtcHR5KCkpIHsKLSAgICBmcmFtZXdvcmtCdWlsZFBoYXNlID0KLSAgICAgIHRoaXMtPkNyZWF0ZU9iamVjdChjbVhDb2RlT2JqZWN0OjpQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSk7Ci0gICAgZnJhbWV3b3JrQnVpbGRQaGFzZS0+U2V0Q29tbWVudCgiRnJhbWV3b3JrcyIpOwotICAgIGZyYW1ld29ya0J1aWxkUGhhc2UtPkFkZEF0dHJpYnV0ZSgiYnVpbGRBY3Rpb25NYXNrIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKCIyMTQ3NDgzNjQ3IikpOwotICAgIGJ1aWxkRmlsZXMgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6T0JKRUNUX0xJU1QpOwotICAgIGZyYW1ld29ya0J1aWxkUGhhc2UtPkFkZEF0dHJpYnV0ZSgiZmlsZXMiLCBidWlsZEZpbGVzKTsKLSAgICBmb3IgKGF1dG8mIGV4dGVybmFsT2JqRmlsZSA6IGV4dGVybmFsT2JqRmlsZXMpIHsKLSAgICAgIGJ1aWxkRmlsZXMtPkFkZE9iamVjdChleHRlcm5hbE9iakZpbGUpOwotICAgIH0KLSAgICBmcmFtZXdvcmtCdWlsZFBoYXNlLT5BZGRBdHRyaWJ1dGUoInJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoIjAiKSk7CisgIGZyYW1ld29ya0J1aWxkUGhhc2UgPQorICAgIHRoaXMtPkNyZWF0ZU9iamVjdChjbVhDb2RlT2JqZWN0OjpQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSk7CisgIGZyYW1ld29ya0J1aWxkUGhhc2UtPlNldENvbW1lbnQoIkZyYW1ld29ya3MiKTsKKyAgZnJhbWV3b3JrQnVpbGRQaGFzZS0+QWRkQXR0cmlidXRlKCJidWlsZEFjdGlvbk1hc2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKCIyMTQ3NDgzNjQ3IikpOworICBidWlsZEZpbGVzID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6Ok9CSkVDVF9MSVNUKTsKKyAgZnJhbWV3b3JrQnVpbGRQaGFzZS0+QWRkQXR0cmlidXRlKCJmaWxlcyIsIGJ1aWxkRmlsZXMpOworICBmb3IgKGF1dG8mIGV4dGVybmFsT2JqRmlsZSA6IGV4dGVybmFsT2JqRmlsZXMpIHsKKyAgICBidWlsZEZpbGVzLT5BZGRPYmplY3QoZXh0ZXJuYWxPYmpGaWxlKTsKICAgfQorICBmcmFtZXdvcmtCdWlsZFBoYXNlLT5BZGRBdHRyaWJ1dGUoInJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKCIwIikpOwogCiAgIC8vIGNyZWF0ZSBsaXN0IG9mIGJ1aWxkIHBoYXNlcyBhbmQgY3JlYXRlIHRoZSBYY29kZSB0YXJnZXQKICAgY21YQ29kZU9iamVjdCogYnVpbGRQaGFzZXMgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6T0JKRUNUX0xJU1QpOwpAQCAtMTM2NCwxMSArMTQ0NywxMSBAQAogCiB2b2lkIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkZvcmNlTGlua2VyTGFuZ3VhZ2VzKCkKIHsKLSAgZm9yIChhdXRvIGxvY2FsR2VuZXJhdG9yIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7CisgIGZvciAoY29uc3QgYXV0byYgbG9jYWxHZW5lcmF0b3IgOiB0aGlzLT5Mb2NhbEdlbmVyYXRvcnMpIHsKICAgICAvLyBBbGwgdGFyZ2V0cyBkZXBlbmQgb24gdGhlIGJ1aWxkLXN5c3RlbSBjaGVjayB0YXJnZXQuCi0gICAgZm9yIChhdXRvIHRndCA6IGxvY2FsR2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRndCA6IGxvY2FsR2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSBhbGwgdGFyZ2V0cyBsaW5rIHVzaW5nIHRoZSBwcm9wZXIgbGFuZ3VhZ2UuCi0gICAgICB0aGlzLT5Gb3JjZUxpbmtlckxhbmd1YWdlKHRndCk7CisgICAgICB0aGlzLT5Gb3JjZUxpbmtlckxhbmd1YWdlKHRndC5nZXQoKSk7CiAgICAgfQogICB9CiB9CkBAIC0xNDE0LDggKzE0OTcsOCBAQAogCiBib29sIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OklzSGVhZGVyRmlsZShjbVNvdXJjZUZpbGUqIHNmKQogewotICByZXR1cm4gY21Db250YWlucyh0aGlzLT5DTWFrZUluc3RhbmNlLT5HZXRIZWFkZXJFeHRlbnNpb25zKCksCi0gICAgICAgICAgICAgICAgICAgIHNmLT5HZXRFeHRlbnNpb24oKSk7CisgIHJldHVybiBjbTo6Y29udGFpbnModGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0SGVhZGVyRXh0ZW5zaW9ucygpLAorICAgICAgICAgICAgICAgICAgICAgIHNmLT5HZXRFeHRlbnNpb24oKSk7CiB9CiAKIGNtWENvZGVPYmplY3QqIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkNyZWF0ZUJ1aWxkUGhhc2UoCkBAIC0xNDU2LDE2ICsxNTM5LDE3IEBACiAgICAgICBjbVN0ckNhdCgiJDxUQVJHRVRfU09OQU1FX0ZJTEU6IiwgZ3RndC0+R2V0TmFtZSgpLCAnPicpOwogICAgIHN0ZDo6c3RyaW5nIHN0cl9saW5rX2ZpbGUgPQogICAgICAgY21TdHJDYXQoIiQ8VEFSR0VUX0xJTktFUl9GSUxFOiIsIGd0Z3QtPkdldE5hbWUoKSwgJz4nKTsKKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IHRydWU7CiAgICAgY21DdXN0b21Db21tYW5kTGluZXMgY21kID0gY21NYWtlU2luZ2xlQ29tbWFuZExpbmUoCiAgICAgICB7IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCAiLUUiLCAiY21ha2Vfc3ltbGlua19saWJyYXJ5IiwKICAgICAgICAgc3RyX2ZpbGUsIHN0cl9zb19maWxlLCBzdHJfbGlua19maWxlIH0pOwogCi0gICAgY21DdXN0b21Db21tYW5kIGNvbW1hbmQodGhpcy0+Q3VycmVudE1ha2VmaWxlLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwgY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDcmVhdGluZyBzeW1saW5rcyIsICIiKTsKKyAgICBjbUN1c3RvbUNvbW1hbmQgY29tbWFuZCgKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLCBjbWQsIHRoaXMtPkN1cnJlbnRNYWtlZmlsZS0+R2V0QmFja3RyYWNlKCksCisgICAgICAiQ3JlYXRpbmcgc3ltbGlua3MiLCAiIiwgc3RkUGlwZXNVVEY4KTsKIAotICAgIHBvc3RidWlsZC5wdXNoX2JhY2soY29tbWFuZCk7CisgICAgcG9zdGJ1aWxkLnB1c2hfYmFjayhzdGQ6Om1vdmUoY29tbWFuZCkpOwogICB9CiAKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gY2xhc3NlczsKQEAgLTE3NjEsNyArMTg0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21YQ29kZU9iamVjdCogYnVpbGRTZXR0aW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnTmFtZSkKIHsKLSAgaWYgKGd0Z3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgIGlmICghZ3RndC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICByZXR1cm47CiAgIH0KIApAQCAtMTg1MywxOCArMTkzNywxOCBAQAogICBpZiAoZ3RndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkgfHwKICAgICAgIGd0Z3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSB7CiAgICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLT5HZXRTdGF0aWNMaWJyYXJ5RmxhZ3MoCi0gICAgICBleHRyYUxpbmtPcHRpb25zLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnTmFtZSksIGxsYW5nLCBndGd0KTsKKyAgICAgIGV4dHJhTGlua09wdGlvbnMsIGNvbmZpZ05hbWUsIGxsYW5nLCBndGd0KTsKICAgfSBlbHNlIHsKLSAgICBjb25zdCBjaGFyKiB0YXJnZXRMaW5rRmxhZ3MgPSBndGd0LT5HZXRQcm9wZXJ0eSgiTElOS19GTEFHUyIpOworICAgIGNtUHJvcCB0YXJnZXRMaW5rRmxhZ3MgPSBndGd0LT5HZXRQcm9wZXJ0eSgiTElOS19GTEFHUyIpOwogICAgIGlmICh0YXJnZXRMaW5rRmxhZ3MpIHsKICAgICAgIHRoaXMtPkN1cnJlbnRMb2NhbEdlbmVyYXRvci0+QXBwZW5kRmxhZ3MoZXh0cmFMaW5rT3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGlua0ZsYWdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhcmdldExpbmtGbGFncyk7CiAgICAgfQogICAgIGlmICghY29uZmlnTmFtZS5lbXB0eSgpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBsaW5rRmxhZ3NWYXIgPQogICAgICAgICBjbVN0ckNhdCgiTElOS19GTEFHU18iLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnTmFtZSkpOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIGxpbmtGbGFncyA9IGd0Z3QtPkdldFByb3BlcnR5KGxpbmtGbGFnc1ZhcikpIHsKLSAgICAgICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncyhleHRyYUxpbmtPcHRpb25zLCBsaW5rRmxhZ3MpOworICAgICAgaWYgKGNtUHJvcCBsaW5rRmxhZ3MgPSBndGd0LT5HZXRQcm9wZXJ0eShsaW5rRmxhZ3NWYXIpKSB7CisgICAgICAgIHRoaXMtPkN1cnJlbnRMb2NhbEdlbmVyYXRvci0+QXBwZW5kRmxhZ3MoZXh0cmFMaW5rT3B0aW9ucywgKmxpbmtGbGFncyk7CiAgICAgICB9CiAgICAgfQogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRzOwpAQCAtMTkwMCw4ICsxOTg0LDggQEAKICAgc3RkOjpzdHJpbmcgcG5zdWZmaXg7CiAgIGd0Z3QtPkdldEZ1bGxOYW1lQ29tcG9uZW50cyhwbnByZWZpeCwgcG5iYXNlLCBwbnN1ZmZpeCwgY29uZmlnTmFtZSk7CiAKLSAgY29uc3QgY2hhciogdmVyc2lvbiA9IGd0Z3QtPkdldFByb3BlcnR5KCJWRVJTSU9OIik7Ci0gIGNvbnN0IGNoYXIqIHNvdmVyc2lvbiA9IGd0Z3QtPkdldFByb3BlcnR5KCJTT1ZFUlNJT04iKTsKKyAgY21Qcm9wIHZlcnNpb24gPSBndGd0LT5HZXRQcm9wZXJ0eSgiVkVSU0lPTiIpOworICBjbVByb3Agc292ZXJzaW9uID0gZ3RndC0+R2V0UHJvcGVydHkoIlNPVkVSU0lPTiIpOwogICBpZiAoIWd0Z3QtPkhhc1NPTmFtZShjb25maWdOYW1lKSB8fCBndGd0LT5Jc0ZyYW1ld29ya09uQXBwbGUoKSkgewogICAgIHZlcnNpb24gPSBudWxscHRyOwogICAgIHNvdmVyc2lvbiA9IG51bGxwdHI7CkBAIC0xOTE3LDkgKzIwMDEsOSBAQAogICBzdGQ6OnN0cmluZyBzb05hbWUgPSBwbmJhc2U7CiAgIGlmICh2ZXJzaW9uICYmIHNvdmVyc2lvbikgewogICAgIHJlYWxOYW1lICs9ICIuIjsKLSAgICByZWFsTmFtZSArPSB2ZXJzaW9uOworICAgIHJlYWxOYW1lICs9ICp2ZXJzaW9uOwogICAgIHNvTmFtZSArPSAiLiI7Ci0gICAgc29OYW1lICs9IHNvdmVyc2lvbjsKKyAgICBzb05hbWUgKz0gKnNvdmVyc2lvbjsKICAgfQogCiAgIC8vIFNldCBhdHRyaWJ1dGVzIHRvIHNwZWNpZnkgdGhlIHByb3BlciBuYW1lIGZvciB0aGUgdGFyZ2V0LgpAQCAtMTk2NSwxMCArMjA0OSwxMCBAQAogICAgICAgICBzdGQ6OnN0cmluZyBmd192ZXJzaW9uID0gZ3RndC0+R2V0RnJhbWV3b3JrVmVyc2lvbigpOwogICAgICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIkZSQU1FV09SS19WRVJTSU9OIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZyhmd192ZXJzaW9uKSk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGV4dCA9IGd0Z3QtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7CisgICAgICAgIGNtUHJvcCBleHQgPSBndGd0LT5HZXRQcm9wZXJ0eSgiQlVORExFX0VYVEVOU0lPTiIpOwogICAgICAgICBpZiAoZXh0KSB7CiAgICAgICAgICAgYnVpbGRTZXR0aW5ncy0+QWRkQXR0cmlidXRlKCJXUkFQUEVSX0VYVEVOU0lPTiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZyhleHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKCpleHQpKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0ZDo6c3RyaW5nIHBsaXN0ID0gdGhpcy0+Q29tcHV0ZUluZm9QTGlzdExvY2F0aW9uKGd0Z3QpOwpAQCAtMjAwNiwxMCArMjA5MCwxMCBAQAogICAgICAgICAgIGV4dHJhTGlua09wdGlvbnMgKz0gIiAiOwogICAgICAgICAgIGV4dHJhTGlua09wdGlvbnMgKz0gY3JlYXRlRmxhZ3M7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3QgY2hhciogZXh0ID0gZ3RndC0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKKyAgICAgICAgY21Qcm9wIGV4dCA9IGd0Z3QtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7CiAgICAgICAgIGlmIChleHQpIHsKICAgICAgICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIldSQVBQRVJfRVhURU5TSU9OIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKGV4dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoKmV4dCkpOwogICAgICAgICB9CiAgICAgICAgIHN0ZDo6c3RyaW5nIHBsaXN0ID0gdGhpcy0+Q29tcHV0ZUluZm9QTGlzdExvY2F0aW9uKGd0Z3QpOwogICAgICAgICAvLyBYY29kZSB3aWxsIGNyZWF0ZSB0aGUgZmluYWwgdmVyc2lvbiBvZiBJbmZvLnBsaXN0IGF0IGJ1aWxkIHRpbWUsCkBAIC0yMDQwLDEwICsyMTI0LDEwIEBACiAgICAgICAgIHN0ZDo6c3RyaW5nIGZ3X3ZlcnNpb24gPSBndGd0LT5HZXRGcmFtZXdvcmtWZXJzaW9uKCk7CiAgICAgICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiRlJBTUVXT1JLX1ZFUlNJT04iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKGZ3X3ZlcnNpb24pKTsKLSAgICAgICAgY29uc3QgY2hhciogZXh0ID0gZ3RndC0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKTsKKyAgICAgICAgY21Qcm9wIGV4dCA9IGd0Z3QtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7CiAgICAgICAgIGlmIChleHQpIHsKICAgICAgICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIldSQVBQRVJfRVhURU5TSU9OIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKGV4dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoKmV4dCkpOwogICAgICAgICB9CiAKICAgICAgICAgc3RkOjpzdHJpbmcgcGxpc3QgPSB0aGlzLT5Db21wdXRlSW5mb1BMaXN0TG9jYXRpb24oZ3RndCk7CkBAIC0yMDc5LDEwICsyMTYzLDEwIEBACiAKICAgICAgIC8vIEhhbmRsZSBidW5kbGVzIGFuZCBub3JtYWwgZXhlY3V0YWJsZXMgc2VwYXJhdGVseS4KICAgICAgIGlmIChndGd0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiTUFDT1NYX0JVTkRMRSIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGV4dCA9IGd0Z3QtPkdldFByb3BlcnR5KCJCVU5ETEVfRVhURU5TSU9OIik7CisgICAgICAgIGNtUHJvcCBleHQgPSBndGd0LT5HZXRQcm9wZXJ0eSgiQlVORExFX0VYVEVOU0lPTiIpOwogICAgICAgICBpZiAoZXh0KSB7CiAgICAgICAgICAgYnVpbGRTZXR0aW5ncy0+QWRkQXR0cmlidXRlKCJXUkFQUEVSX0VYVEVOU0lPTiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZyhleHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q3JlYXRlU3RyaW5nKCpleHQpKTsKICAgICAgICAgfQogICAgICAgICBzdGQ6OnN0cmluZyBwbGlzdCA9IHRoaXMtPkNvbXB1dGVJbmZvUExpc3RMb2NhdGlvbihndGd0KTsKICAgICAgICAgLy8gWGNvZGUgd2lsbCBjcmVhdGUgdGhlIGZpbmFsIHZlcnNpb24gb2YgSW5mby5wbGlzdCBhdCBidWlsZCB0aW1lLApAQCAtMjI3Nyw3ICsyMzYxLDcgQEAKIAogICAvLyBBZGQgRm9ydHJhbiBzb3VyY2UgZm9ybWF0IGF0dHJpYnV0ZSBpZiBwcm9wZXJ0eSBpcyBzZXQuCiAgIGNvbnN0IGNoYXIqIGZvcm1hdCA9IG51bGxwdHI7Ci0gIGNvbnN0IGNoYXIqIHRndGZtdCA9IGd0Z3QtPkdldFByb3BlcnR5KCJGb3J0cmFuX0ZPUk1BVCIpOworICBzdGQ6OnN0cmluZyBjb25zdCYgdGd0Zm10ID0gZ3RndC0+R2V0U2FmZVByb3BlcnR5KCJGb3J0cmFuX0ZPUk1BVCIpOwogICBzd2l0Y2ggKGNtT3V0cHV0Q29udmVydGVyOjpHZXRGb3J0cmFuRm9ybWF0KHRndGZtdCkpIHsKICAgICBjYXNlIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuRm9ybWF0Rml4ZWQ6CiAgICAgICBmb3JtYXQgPSAiZml4ZWQiOwpAQCAtMjM1Myw5ICsyNDM3LDYgQEAKICAgYnVpbGRTZXR0aW5ncy0+QWRkQXR0cmlidXRlKCJTRUNUT1JERVJfRkxBR1MiLCB0aGlzLT5DcmVhdGVTdHJpbmcoIiIpKTsKICAgYnVpbGRTZXR0aW5ncy0+QWRkQXR0cmlidXRlKCJVU0VfSEVBREVSTUFQIiwgdGhpcy0+Q3JlYXRlU3RyaW5nKCJOTyIpKTsKICAgY21YQ29kZU9iamVjdCogZ3JvdXAgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6T0JKRUNUX0xJU1QpOwotICBncm91cC0+QWRkT2JqZWN0KHRoaXMtPkNyZWF0ZVN0cmluZygiLVdtb3N0IikpOwotICBncm91cC0+QWRkT2JqZWN0KHRoaXMtPkNyZWF0ZVN0cmluZygiLVduby1mb3VyLWNoYXItY29uc3RhbnRzIikpOwotICBncm91cC0+QWRkT2JqZWN0KHRoaXMtPkNyZWF0ZVN0cmluZygiLVduby11bmtub3duLXByYWdtYXMiKSk7CiAgIGdyb3VwLT5BZGRPYmplY3QodGhpcy0+Q3JlYXRlU3RyaW5nKCIkKGluaGVyaXRlZCkiKSk7CiAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiV0FSTklOR19DRkxBR1MiLCBncm91cCk7CiAKQEAgLTIzNjUsOCArMjQ0Niw5IEBACiAgICAgaW50IG1pbm9yOwogICAgIGludCBwYXRjaDsKIAotICAgIC8vIFZFUlNJT04gLT4gY3VycmVudF92ZXJzaW9uCi0gICAgZ3RndC0+R2V0VGFyZ2V0VmVyc2lvbihmYWxzZSwgbWFqb3IsIG1pbm9yLCBwYXRjaCk7CisgICAgLy8gTUFDSE9fQ1VSUkVOVF9WRVJTSU9OIG9yIFZFUlNJT04gLT4gY3VycmVudF92ZXJzaW9uCisgICAgZ3RndC0+R2V0VGFyZ2V0VmVyc2lvbkZhbGxiYWNrKCJNQUNIT19DVVJSRU5UX1ZFUlNJT04iLCAiVkVSU0lPTiIsIG1ham9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5vciwgcGF0Y2gpOwogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSB2OwogCiAgICAgLy8gWGNvZGUgYWx3YXlzIHdhbnRzIGF0IGxlYXN0IDEuMC4wIG9yIG5vdGhpbmcKQEAgLTIzNzYsOCArMjQ1OCw5IEBACiAgICAgYnVpbGRTZXR0aW5ncy0+QWRkQXR0cmlidXRlKCJEWUxJQl9DVVJSRU5UX1ZFUlNJT04iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcodi5zdHIoKSkpOwogCi0gICAgLy8gU09WRVJTSU9OIC0+IGNvbXBhdGliaWxpdHlfdmVyc2lvbgotICAgIGd0Z3QtPkdldFRhcmdldFZlcnNpb24odHJ1ZSwgbWFqb3IsIG1pbm9yLCBwYXRjaCk7CisgICAgLy8gTUFDSE9fQ09NUEFUSUJJTElUWV9WRVJTSU9OIG9yIFNPVkVSU0lPTiAtPiBjb21wYXRpYmlsaXR5X3ZlcnNpb24KKyAgICBndGd0LT5HZXRUYXJnZXRWZXJzaW9uRmFsbGJhY2soIk1BQ0hPX0NPTVBBVElCSUxJVFlfVkVSU0lPTiIsICJTT1ZFUlNJT04iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWpvciwgbWlub3IsIHBhdGNoKTsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gdnNvOwogCiAgICAgLy8gWGNvZGUgYWx3YXlzIHdhbnRzIGF0IGxlYXN0IDEuMC4wIG9yIG5vdGhpbmcKQEAgLTI0MDEsMTIgKzI0ODQsMTMgQEAKICAgLy8gQ29udmVydCAiWENPREVfQVRUUklCVVRFXyoiIHByb3BlcnRpZXMgZGlyZWN0bHkuCiAgIHsKICAgICBmb3IgKGF1dG8gY29uc3QmIHByb3AgOiBndGd0LT5HZXRQcm9wZXJ0eUtleXMoKSkgewotICAgICAgaWYgKHByb3AuZmluZCgiWENPREVfQVRUUklCVVRFXyIpID09IDApIHsKKyAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgocHJvcCwgIlhDT0RFX0FUVFJJQlVURV8iKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBhdHRyaWJ1dGUgPSBwcm9wLnN1YnN0cigxNik7CiAgICAgICAgIHRoaXMtPkZpbHRlckNvbmZpZ3VyYXRpb25BdHRyaWJ1dGUoY29uZmlnTmFtZSwgYXR0cmlidXRlKTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGUuZW1wdHkoKSkgeworICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwciA9IGd0Z3QtPkdldFNhZmVQcm9wZXJ0eShwcm9wKTsKICAgICAgICAgICBzdGQ6OnN0cmluZyBwcm9jZXNzZWQgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAotICAgICAgICAgICAgZ3RndC0+R2V0UHJvcGVydHkocHJvcCksIHRoaXMtPkN1cnJlbnRMb2NhbEdlbmVyYXRvciwgY29uZmlnTmFtZSk7CisgICAgICAgICAgICBwciwgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKICAgICAgICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoYXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcocHJvY2Vzc2VkKSk7CiAgICAgICAgIH0KQEAgLTI1MjUsOCArMjYwOSw4IEBACiBjb25zdCBjaGFyKiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yOjpHZXRUYXJnZXRGaWxlVHlwZSgKICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKIHsKLSAgaWYgKGNvbnN0IGNoYXIqIGUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJYQ09ERV9FWFBMSUNJVF9GSUxFX1RZUEUiKSkgewotICAgIHJldHVybiBlOworICBpZiAoY21Qcm9wIGUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJYQ09ERV9FWFBMSUNJVF9GSUxFX1RZUEUiKSkgeworICAgIHJldHVybiBlLT5jX3N0cigpOwogICB9CiAKICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewpAQCAtMjU1OCw4ICsyNjQyLDggQEAKIGNvbnN0IGNoYXIqIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OkdldFRhcmdldFByb2R1Y3RUeXBlKAogICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogewotICBpZiAoY29uc3QgY2hhciogZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlhDT0RFX1BST0RVQ1RfVFlQRSIpKSB7Ci0gICAgcmV0dXJuIGU7CisgIGlmIChjbVByb3AgZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlhDT0RFX1BST0RVQ1RfVFlQRSIpKSB7CisgICAgcmV0dXJuIGUtPmNfc3RyKCk7CiAgIH0KIAogICBzd2l0Y2ggKHRhcmdldC0+R2V0VHlwZSgpKSB7CkBAIC0yNTk0LDcgKzI2NzgsNyBAQAogY21YQ29kZU9iamVjdCogY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Q3JlYXRlWENvZGVUYXJnZXQoCiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndGd0LCBjbVhDb2RlT2JqZWN0KiBidWlsZFBoYXNlcykKIHsKLSAgaWYgKGd0Z3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgIGlmICghZ3RndC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogICBjbVhDb2RlT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6UEJYTmF0aXZlVGFyZ2V0KTsKQEAgLTI3MzcsNyArMjgyMSw3IEBACiAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkVycm9yIG5vIHRhcmdldCBvbiB4b2JqZWN0XG4iKTsKICAgICByZXR1cm47CiAgIH0KLSAgaWYgKGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgeworICBpZiAoIWd0LT5Jc0luQnVpbGRTeXN0ZW0oKSkgewogICAgIHJldHVybjsKICAgfQogCkBAIC0yNzQ4LDYgKzI4MzIsMTkwIEBACiAgICAgfQogICB9CiAKKyAgLy8gU2VwYXJhdGUgbGlicmFyaWVzIGludG8gb25lcyB0aGF0IGNhbiBiZSBsaW5rZWQgdXNpbmcgIkxpbmsgQmluYXJ5IFdpdGgKKyAgLy8gTGlicmFyaWVzIiBidWlsZCBwaGFzZSBhbmQgdGhlIG9uZXMgdGhhdCBjYW4ndC4gT25seSB0YXJnZXRzIHRoYXQgYnVpbGQKKyAgLy8gQXBwbGUgYnVuZGxlcyAoLmFwcCwgLmZyYW1ld29yaywgLmJ1bmRsZSkgY2FuIHVzZSB0aGlzIGZlYXR1cmUgYW5kIG9ubHkKKyAgLy8gdGFyZ2V0cyB0aGF0IHJlcHJlc2VudCBhY3R1YWwgbGlicmFyaWVzIChzdGF0aWMgb3IgZHluYW1pYywgbG9jYWwgb3IKKyAgLy8gaW1wb3J0ZWQpIG5vdCBvYmplY3RzIGFuZCBub3QgZXhlY3V0YWJsZXMgd2lsbCBiZSB1c2VkLiBUaGVzZSBhcmUKKyAgLy8gbGltaXRhdGlvbnMgaW1wb3NlZCBieSBDTWFrZSB1c2UtY2FzZXMgLSBvdGhlcndpc2UgYSBsb3Qgb2YgdGhpbmdzIGJyZWFrLgorICAvLyBUaGUgcmVzdCB3aWxsIGJlIGxpbmtlZCB1c2luZyBsaW5rZXIgZmxhZ3MgKE9USEVSX0xERkxBR1Mgc2V0dGluZyBpbiBYY29kZQorICAvLyBwcm9qZWN0KS4KKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6SXRlbSBjb25zdCo+PgorICAgIGNvbmZpZ0l0ZW1NYXA7CisgIGF1dG8gYWRkVG9MaW5rZXJBcmd1bWVudHMgPQorICAgIFsmY29uZmlnSXRlbU1hcF0oY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZ05hbWUsCisgICAgICAgICAgICAgICAgICAgICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246Okl0ZW0gY29uc3QqIGxpYkl0ZW1QdHIpIHsKKyAgICAgIGF1dG8mIGxpbmtWZWN0b3IgPSBjb25maWdJdGVtTWFwW2NvbmZpZ05hbWVdOworICAgICAgaWYgKHN0ZDo6ZmluZF9pZihsaW5rVmVjdG9yLmJlZ2luKCksIGxpbmtWZWN0b3IuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgIFtsaWJJdGVtUHRyXShjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246Okl0ZW0gY29uc3QqIHApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcCA9PSBsaWJJdGVtUHRyOworICAgICAgICAgICAgICAgICAgICAgICB9KSA9PSBsaW5rVmVjdG9yLmVuZCgpKSB7CisgICAgICAgIGxpbmtWZWN0b3IucHVzaF9iYWNrKGxpYkl0ZW1QdHIpOworICAgICAgfQorICAgIH07CisgIHN0ZDo6dmVjdG9yPGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjo6SXRlbSBjb25zdCo+IGxpbmtQaGFzZVRhcmdldFZlY3RvcjsKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gdGFyZ2V0Q29uZmlnTWFwOworICB1c2luZyBDb25maWdJdGVtUGFpciA9CisgICAgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb246Okl0ZW0gY29uc3QqPjsKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPENvbmZpZ0l0ZW1QYWlyPj4gdGFyZ2V0SXRlbU1hcDsKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gdGFyZ2V0UHJvZHVjdE5hbWVNYXA7CisgIGZvciAoYXV0byBjb25zdCYgY29uZmlnTmFtZSA6IHRoaXMtPkN1cnJlbnRDb25maWd1cmF0aW9uVHlwZXMpIHsKKyAgICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIGNsaSA9IGd0LT5HZXRMaW5rSW5mb3JtYXRpb24oY29uZmlnTmFtZSk7CisgICAgaWYgKCFjbGkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBmb3IgKGF1dG8gY29uc3QmIGxpYkl0ZW0gOiBjbGktPkdldEl0ZW1zKCkpIHsKKyAgICAgIGlmIChndC0+SXNCdW5kbGVPbkFwcGxlKCkgJiYKKyAgICAgICAgICAoZ3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUgfHwKKyAgICAgICAgICAgZ3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CisgICAgICAgICAgIGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWSB8fAorICAgICAgICAgICBndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6VU5LTk9XTl9MSUJSQVJZKSAmJgorICAgICAgICAgICgobGliSXRlbS5UYXJnZXQgJiYKKyAgICAgICAgICAgIChsaWJJdGVtLlRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkgfHwKKyAgICAgICAgICAgICBsaWJJdGVtLlRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKKyAgICAgICAgICAgICBsaWJJdGVtLlRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlkpKSB8fAorICAgICAgICAgICAoIWxpYkl0ZW0uVGFyZ2V0ICYmIGxpYkl0ZW0uSXNQYXRoKSkpIHsKKyAgICAgICAgLy8gQWRkIHVuaXF1ZSBjb25maWd1cmF0aW9uIG5hbWUgdG8gdGFyZ2V0LWNvbmZpZyBtYXAgZm9yIGxhdGVyCisgICAgICAgIC8vIGNoZWNrcworICAgICAgICBzdGQ6OnN0cmluZyBsaWJOYW1lOworICAgICAgICBpZiAobGliSXRlbS5UYXJnZXQpIHsKKyAgICAgICAgICBsaWJOYW1lID0gbGliSXRlbS5UYXJnZXQtPkdldE5hbWUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsaWJOYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGxpYkl0ZW0uVmFsdWUuVmFsdWUpOworICAgICAgICAgIGNvbnN0IGF1dG8gbGliRXh0ID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVFeHRlbnNpb24obGliTmFtZSk7CisgICAgICAgICAgaWYgKCFJc0xpYnJhcnlFeHRlbnNpb24obGliRXh0KSkgeworICAgICAgICAgICAgLy8gQWRkIHRoaXMgbGlicmFyeSBpdGVtIHRvIGEgcmVndWxhciBsaW5rZXIgZmxhZyBsaXN0CisgICAgICAgICAgICBhZGRUb0xpbmtlckFyZ3VtZW50cyhjb25maWdOYW1lLCAmbGliSXRlbSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXV0byYgY29uZmlnVmVjdG9yID0gdGFyZ2V0Q29uZmlnTWFwW2xpYk5hbWVdOworICAgICAgICBpZiAoc3RkOjpmaW5kKGNvbmZpZ1ZlY3Rvci5iZWdpbigpLCBjb25maWdWZWN0b3IuZW5kKCksIGNvbmZpZ05hbWUpID09CisgICAgICAgICAgICBjb25maWdWZWN0b3IuZW5kKCkpIHsKKyAgICAgICAgICBjb25maWdWZWN0b3IucHVzaF9iYWNrKGNvbmZpZ05hbWUpOworICAgICAgICB9CisgICAgICAgIC8vIEFkZCBhIHBhaXIgb2YgY29uZmlnIGFuZCBpdGVtIHRvIHRhcmdldC1pdGVtIG1hcAorICAgICAgICBhdXRvJiBpdGVtVmVjdG9yID0gdGFyZ2V0SXRlbU1hcFtsaWJOYW1lXTsKKyAgICAgICAgaXRlbVZlY3Rvci5lbXBsYWNlX2JhY2soQ29uZmlnSXRlbVBhaXIoY29uZmlnTmFtZSwgJmxpYkl0ZW0pKTsKKyAgICAgICAgLy8gQWRkIHByb2R1Y3QgZmlsZS1uYW1lIHRvIGEgbGliLXByb2R1Y3QgbWFwCisgICAgICAgIGF1dG8gcHJvZHVjdE5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUobGliSXRlbS5WYWx1ZS5WYWx1ZSk7CisgICAgICAgIGF1dG8mIHByb2R1Y3RWZWN0b3IgPSB0YXJnZXRQcm9kdWN0TmFtZU1hcFtsaWJOYW1lXTsKKyAgICAgICAgaWYgKHN0ZDo6ZmluZChwcm9kdWN0VmVjdG9yLmJlZ2luKCksIHByb2R1Y3RWZWN0b3IuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdE5hbWUpID09IHByb2R1Y3RWZWN0b3IuZW5kKCkpIHsKKyAgICAgICAgICBwcm9kdWN0VmVjdG9yLnB1c2hfYmFjayhwcm9kdWN0TmFtZSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFkZCB0aGlzIGxpYnJhcnkgaXRlbSB0byBhIHJlZ3VsYXIgbGlua2VyIGZsYWcgbGlzdAorICAgICAgICBhZGRUb0xpbmtlckFyZ3VtZW50cyhjb25maWdOYW1lLCAmbGliSXRlbSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gR28gdGhyb3VnaCB0YXJnZXQgbGlicmFyeSBtYXAgYW5kIHNlcGFyYXRlIGxpYnJhcmllcyB0aGF0IGFyZSBsaW5rZWQKKyAgLy8gaW4gYWxsIGNvbmZpZ3VyYXRpb25zIGFuZCBwcm9kdWNlIG9ubHkgc2luZ2xlIHByb2R1Y3QsIGZyb20gdGhlIHJlc3QuCisgIC8vIE9ubHkgdGhlc2Ugd2lsbCBiZSBsaW5rZWQgdGhyb3VnaCAiTGluayBCaW5hcnkgV2l0aCBMaWJyYXJpZXMiIGJ1aWxkCisgIC8vIHBoYXNlLgorICBmb3IgKGF1dG8gY29uc3QmIHRhcmdldExpYkNvbmZpZ3MgOiB0YXJnZXRDb25maWdNYXApIHsKKyAgICAvLyBBZGQgdGhpcyBsaWJyYXJ5IHRvICJMaW5rIEJpbmFyeSBXaXRoIExpYnJhcmllcyIgYnVpbGQgcGhhc2UgaWYgaXQncworICAgIC8vIGxpbmtlZCBpbiBhbGwgY29uZmlndXJhdGlvbnMgYW5kIGl0IGhhcyBvbmx5IG9uZSBwcm9kdWN0IG5hbWUKKyAgICBhdXRvJiBpdGVtVmVjdG9yID0gdGFyZ2V0SXRlbU1hcFt0YXJnZXRMaWJDb25maWdzLmZpcnN0XTsKKyAgICBhdXRvJiBwcm9kdWN0VmVjdG9yID0gdGFyZ2V0UHJvZHVjdE5hbWVNYXBbdGFyZ2V0TGliQ29uZmlncy5maXJzdF07CisgICAgaWYgKHRhcmdldExpYkNvbmZpZ3Muc2Vjb25kID09IHRoaXMtPkN1cnJlbnRDb25maWd1cmF0aW9uVHlwZXMgJiYKKyAgICAgICAgcHJvZHVjdFZlY3Rvci5zaXplKCkgPT0gMSkgeworICAgICAgLy8gQWRkIHRoaXMgbGlicmFyeSB0byAiTGluayBCaW5hcnkgV2l0aCBMaWJyYXJpZXMiIGxpc3QKKyAgICAgIGxpbmtQaGFzZVRhcmdldFZlY3Rvci5wdXNoX2JhY2soaXRlbVZlY3RvclswXS5zZWNvbmQpOworICAgIH0gZWxzZSB7CisgICAgICBmb3IgKGF1dG8gY29uc3QmIGxpYkl0ZW0gOiB0YXJnZXRJdGVtTWFwW3RhcmdldExpYkNvbmZpZ3MuZmlyc3RdKSB7CisgICAgICAgIC8vIEFkZCB0aGlzIGxpYnJhcnkgaXRlbSB0byBhIHJlZ3VsYXIgbGlua2VyIGZsYWcgbGlzdAorICAgICAgICBhZGRUb0xpbmtlckFyZ3VtZW50cyhsaWJJdGVtLmZpcnN0LCBsaWJJdGVtLnNlY29uZCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gQWRkIGxpYnJhcmllcyB0byAiTGluayBCaW5hcnkgV2l0aCBMaWJyYXJpZXMiIGJ1aWxkIHBoYXNlIGFuZCBjb2xsZWN0CisgIC8vIHRoZWlyIHNlYXJjaCBwYXRocy4gWGNvZGUgZG9lcyBub3Qgc3VwcG9ydCBwZXItY29uZmlndXJhdGlvbiBsaW5raW5nCisgIC8vIGluIHRoaXMgYnVpbGQgcGhhc2Ugc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24KKyAgLy8gc2VwYXJhdGVseS4KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmtTZWFyY2hQYXRoczsKKyAgZm9yIChhdXRvIGNvbnN0JiBsaWJJdGVtIDogbGlua1BoYXNlVGFyZ2V0VmVjdG9yKSB7CisgICAgLy8gQWRkIHRhcmdldCBvdXRwdXQgZGlyZWN0b3J5IGFzIGEgbGlicmFyeSBzZWFyY2ggcGF0aAorICAgIHN0ZDo6c3RyaW5nIGxpbmtEaXI7CisgICAgaWYgKGxpYkl0ZW0tPlRhcmdldCkgeworICAgICAgbGlua0RpciA9IGNtU3lzdGVtVG9vbHM6OkdldFBhcmVudERpcmVjdG9yeSgKKyAgICAgICAgbGliSXRlbS0+VGFyZ2V0LT5HZXRMb2NhdGlvbkZvckJ1aWxkKCkpOworICAgIH0gZWxzZSB7CisgICAgICBsaW5rRGlyID0gY21TeXN0ZW1Ub29sczo6R2V0UGFyZW50RGlyZWN0b3J5KGxpYkl0ZW0tPlZhbHVlLlZhbHVlKTsKKyAgICB9CisgICAgaWYgKHN0ZDo6ZmluZChsaW5rU2VhcmNoUGF0aHMuYmVnaW4oKSwgbGlua1NlYXJjaFBhdGhzLmVuZCgpLCBsaW5rRGlyKSA9PQorICAgICAgICBsaW5rU2VhcmNoUGF0aHMuZW5kKCkpIHsKKyAgICAgIGxpbmtTZWFyY2hQYXRocy5wdXNoX2JhY2sobGlua0Rpcik7CisgICAgfQorICAgIC8vIEFkZCB0YXJnZXQgZGVwZW5kZW5jeQorICAgIGlmIChsaWJJdGVtLT5UYXJnZXQgJiYgIWxpYkl0ZW0tPlRhcmdldC0+SXNJbXBvcnRlZCgpKSB7CisgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZ05hbWUgOiB0aGlzLT5DdXJyZW50Q29uZmlndXJhdGlvblR5cGVzKSB7CisgICAgICAgIHRhcmdldC0+QWRkRGVwZW5kVGFyZ2V0KGNvbmZpZ05hbWUsIGxpYkl0ZW0tPlRhcmdldC0+R2V0TmFtZSgpKTsKKyAgICAgIH0KKyAgICB9CisgICAgLy8gR2V0IHRoZSBsaWJyYXJ5IHRhcmdldAorICAgIGF1dG8qIGxpYlRhcmdldCA9IEZpbmRYQ29kZVRhcmdldChsaWJJdGVtLT5UYXJnZXQpOworICAgIGNtWENvZGVPYmplY3QqIGJ1aWxkRmlsZTsKKyAgICBpZiAoIWxpYlRhcmdldCkgeworICAgICAgaWYgKGxpYkl0ZW0tPklzUGF0aCkgeworICAgICAgICAvLyBHZXQgb3IgY3JlYXRlIGEgZGlyZWN0IGZpbGUgcmVmIGluIHRoZSByb290IHByb2plY3QKKyAgICAgICAgYXV0byBpdCA9IHRoaXMtPkV4dGVybmFsTGliUmVmcy5maW5kKGxpYkl0ZW0tPlZhbHVlLlZhbHVlKTsKKyAgICAgICAgaWYgKGl0ID09IHRoaXMtPkV4dGVybmFsTGliUmVmcy5lbmQoKSkgeworICAgICAgICAgIGJ1aWxkRmlsZSA9IENyZWF0ZVhDb2RlQnVpbGRGaWxlRnJvbVBhdGgobGliSXRlbS0+VmFsdWUuVmFsdWUsIGd0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIG51bGxwdHIpOworICAgICAgICAgIHRoaXMtPkV4dGVybmFsTGliUmVmcy5lbXBsYWNlKGxpYkl0ZW0tPlZhbHVlLlZhbHVlLCBidWlsZEZpbGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGJ1aWxkRmlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFkZCB0aGlzIGxpYnJhcnkgaXRlbSBiYWNrIHRvIGEgcmVndWxhciBsaW5rZXIgZmxhZyBsaXN0CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY29uZiA6IGNvbmZpZ0l0ZW1NYXApIHsKKyAgICAgICAgICBhZGRUb0xpbmtlckFyZ3VtZW50cyhjb25mLmZpcnN0LCBsaWJJdGVtKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gQWRkIHRoZSB0YXJnZXQgb3V0cHV0IGZpbGUgYXMgYSBidWlsZCByZWZlcmVuY2UgZm9yIG90aGVyIHRhcmdldHMKKyAgICAgIC8vIHRvIGxpbmsgYWdhaW5zdAorICAgICAgYXV0byogZmlsZVJlZk9iamVjdCA9IGxpYlRhcmdldC0+R2V0T2JqZWN0KCJwcm9kdWN0UmVmZXJlbmNlIik7CisgICAgICBpZiAoIWZpbGVSZWZPYmplY3QpIHsKKyAgICAgICAgLy8gQWRkIHRoaXMgbGlicmFyeSBpdGVtIGJhY2sgdG8gYSByZWd1bGFyIGxpbmtlciBmbGFnIGxpc3QKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjb25mIDogY29uZmlnSXRlbU1hcCkgeworICAgICAgICAgIGFkZFRvTGlua2VyQXJndW1lbnRzKGNvbmYuZmlyc3QsIGxpYkl0ZW0pOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgYXV0byBpdCA9IEZpbGVSZWZUb0J1aWxkRmlsZU1hcC5maW5kKGZpbGVSZWZPYmplY3QpOworICAgICAgaWYgKGl0ID09IEZpbGVSZWZUb0J1aWxkRmlsZU1hcC5lbmQoKSkgeworICAgICAgICBidWlsZEZpbGUgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6UEJYQnVpbGRGaWxlKTsKKyAgICAgICAgYnVpbGRGaWxlLT5BZGRBdHRyaWJ1dGUoImZpbGVSZWYiLCBmaWxlUmVmT2JqZWN0KTsKKyAgICAgICAgRmlsZVJlZlRvQnVpbGRGaWxlTWFwW2ZpbGVSZWZPYmplY3RdID0gYnVpbGRGaWxlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYnVpbGRGaWxlID0gaXQtPnNlY29uZDsKKyAgICAgIH0KKyAgICB9CisgICAgLy8gQWRkIHRoaXMgcmVmZXJlbmNlIHRvIGN1cnJlbnQgdGFyZ2V0CisgICAgYXV0byogYnVpbGRQaGFzZXMgPSB0YXJnZXQtPkdldE9iamVjdCgiYnVpbGRQaGFzZXMiKTsKKyAgICBpZiAoIWJ1aWxkUGhhc2VzKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgYXV0byogZnJhbWV3b3JrQnVpbGRQaGFzZSA9CisgICAgICBidWlsZFBoYXNlcy0+R2V0T2JqZWN0KGNtWENvZGVPYmplY3Q6OlBCWEZyYW1ld29ya3NCdWlsZFBoYXNlKTsKKyAgICBpZiAoIWZyYW1ld29ya0J1aWxkUGhhc2UpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBhdXRvKiBidWlsZEZpbGVzID0gZnJhbWV3b3JrQnVpbGRQaGFzZS0+R2V0T2JqZWN0KCJmaWxlcyIpOworICAgIGlmICghYnVpbGRGaWxlcykgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmICghYnVpbGRGaWxlcy0+SGFzT2JqZWN0KGJ1aWxkRmlsZSkpIHsKKyAgICAgIGJ1aWxkRmlsZXMtPkFkZE9iamVjdChidWlsZEZpbGUpOworICAgIH0KKyAgfQorCiAgIC8vIExvb3Agb3ZlciBjb25maWd1cmF0aW9uIHR5cGVzIGFuZCBzZXQgcGVyLWNvbmZpZ3VyYXRpb24gaW5mby4KICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWdOYW1lIDogdGhpcy0+Q3VycmVudENvbmZpZ3VyYXRpb25UeXBlcykgewogICAgIHsKQEAgLTI3NzUsMjEgKzMwNDMsMjAgQEAKICAgICB9CiAKICAgICAvLyBDb21wdXRlIHRoZSBsaW5rIGxpYnJhcnkgYW5kIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KLSAgICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIHBjbGkgPSBndC0+R2V0TGlua0luZm9ybWF0aW9uKGNvbmZpZ05hbWUpOwotICAgIGlmICghcGNsaSkgeworICAgIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiogY2xpID0gZ3QtPkdldExpbmtJbmZvcm1hdGlvbihjb25maWdOYW1lKTsKKyAgICBpZiAoIWNsaSkgewogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiYgY2xpID0gKnBjbGk7CiAKICAgICAvLyBBZGQgZGVwZW5kZW5jaWVzIGRpcmVjdGx5IG9uIGxpYnJhcnkgZmlsZXMuCi0gICAgZm9yIChhdXRvIGNvbnN0JiBsaWJEZXAgOiBjbGkuR2V0RGVwZW5kcygpKSB7CisgICAgZm9yIChhdXRvIGNvbnN0JiBsaWJEZXAgOiBjbGktPkdldERlcGVuZHMoKSkgewogICAgICAgdGFyZ2V0LT5BZGREZXBlbmRMaWJyYXJ5KGNvbmZpZ05hbWUsIGxpYkRlcCk7CiAgICAgfQogCiAgICAgLy8gYWRkIHRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRocwogICAgIHsKICAgICAgIHN0ZDo6c3RyaW5nIGxpbmtEaXJzOwotICAgICAgZm9yIChhdXRvIGNvbnN0JiBsaWJEaXIgOiBjbGkuR2V0RGlyZWN0b3JpZXMoKSkgeworICAgICAgZm9yIChhdXRvIGNvbnN0JiBsaWJEaXIgOiBjbGktPkdldERpcmVjdG9yaWVzKCkpIHsKICAgICAgICAgaWYgKCFsaWJEaXIuZW1wdHkoKSAmJiBsaWJEaXIgIT0gIi91c3IvbGliIikgewogICAgICAgICAgIC8vIE5vdyBhZGQgdGhlIHNhbWUgb25lIGJ1dCBhcHBlbmQKICAgICAgICAgICAvLyAkKENPTkZJR1VSQVRJT04pJChFRkZFQ1RJVkVfUExBVEZPUk1fTkFNRSkgdG8gaXQ6CkBAIC0yODAwLDE1ICszMDY3LDIyIEBACiAgICAgICAgICAgbGlua0RpcnMgKz0gdGhpcy0+WENvZGVFc2NhcGVQYXRoKGxpYkRpcik7CiAgICAgICAgIH0KICAgICAgIH0KKyAgICAgIC8vIEFkZCBwcmV2aW91c2x5IGNvbGxlY3RlZCBwYXRocyB3aGVyZSB0byBsb29rIGZvciBsaWJyYXJpZXMKKyAgICAgIC8vIHRoYXQgd2VyZSBhZGRlZCB0byAiTGluayBCaW5hcnkgV2l0aCBMaWJyYXJpZXMiCisgICAgICBmb3IgKGF1dG8mIGxpbmtEaXIgOiBsaW5rU2VhcmNoUGF0aHMpIHsKKyAgICAgICAgbGlua0RpcnMgKz0gIiAiOworICAgICAgICBsaW5rRGlycyArPSB0aGlzLT5YQ29kZUVzY2FwZVBhdGgobGlua0Rpcik7CisgICAgICB9CiAgICAgICB0aGlzLT5BcHBlbmRCdWlsZFNldHRpbmdBdHRyaWJ1dGUodGFyZ2V0LCAiTElCUkFSWV9TRUFSQ0hfUEFUSFMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtEaXJzLmNfc3RyKCksIGNvbmZpZ05hbWUpOwogICAgIH0KIAotICAgIC8vIG5vdyBhZGQgdGhlIGxpbmsgbGlicmFyaWVzCisgICAgLy8gbm93IGFkZCB0aGUgbGVmdC1vdmVyIGxpbmsgbGlicmFyaWVzCiAgICAgewogICAgICAgc3RkOjpzdHJpbmcgbGlua0xpYnM7CiAgICAgICBjb25zdCBjaGFyKiBzZXAgPSAiIjsKLSAgICAgIGZvciAoYXV0byBjb25zdCYgbGliTmFtZSA6IGNsaS5HZXRJdGVtcygpKSB7CisgICAgICBmb3IgKGF1dG8gY29uc3QmIGxpYkl0ZW0gOiBjb25maWdJdGVtTWFwW2NvbmZpZ05hbWVdKSB7CisgICAgICAgIGF1dG8gY29uc3QmIGxpYk5hbWUgPSAqbGliSXRlbTsKICAgICAgICAgbGlua0xpYnMgKz0gc2VwOwogICAgICAgICBzZXAgPSAiICI7CiAgICAgICAgIGlmIChsaWJOYW1lLklzUGF0aCkgewpAQCAtMjgzNCwyNiArMzEwOCwyMyBAQAogICBmb3IgKGF1dG8mIGdlbmVyYXRvciA6IGdlbmVyYXRvcnMpIHsKICAgICBjbU1ha2VmaWxlKiBtZiA9IGdlbmVyYXRvci0+R2V0TWFrZWZpbGUoKTsKICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUdyb3VwPiBzb3VyY2VHcm91cHMgPSBtZi0+R2V0U291cmNlR3JvdXBzKCk7Ci0gICAgZm9yIChhdXRvIGd0Z3QgOiBnZW5lcmF0b3ItPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgZ3RndCA6IGdlbmVyYXRvci0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgICAvLyBTYW1lIHNraXBwaW5nIGxvZ2ljIGhlcmUgYXMgaW4gQ3JlYXRlWENvZGVUYXJnZXRzIHNvIHRoYXQgd2UgZG8gbm90CiAgICAgICAvLyBlbmQgdXAgd2l0aCAoZW1wdHkgYW55aG93KSBaRVJPX0NIRUNLLCBpbnN0YWxsLCBvciB0ZXN0IHNvdXJjZQogICAgICAgLy8gZ3JvdXBzOgogICAgICAgLy8KLSAgICAgIGlmIChndGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgaWYgKGd0Z3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgaWYgKGd0Z3QtPkdldE5hbWUoKSA9PSBDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VUKSB7CisgICAgICBpZiAoIWd0Z3QtPklzSW5CdWlsZFN5c3RlbSgpIHx8CisgICAgICAgICAgZ3RndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCB8fAorICAgICAgICAgIGd0Z3QtPkdldE5hbWUoKSA9PSBDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VUKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCi0gICAgICBhdXRvIGFkZFNvdXJjZVRvR3JvdXAgPSBbdGhpcywgbWYsIGd0Z3QsCisgICAgICBhdXRvIGFkZFNvdXJjZVRvR3JvdXAgPSBbdGhpcywgbWYsICZndGd0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2VHcm91cHNdKHN0ZDo6c3RyaW5nIGNvbnN0JiBzb3VyY2UpIHsKICAgICAgICAgY21Tb3VyY2VHcm91cCogc291cmNlR3JvdXAgPSBtZi0+RmluZFNvdXJjZUdyb3VwKHNvdXJjZSwgc291cmNlR3JvdXBzKTsKLSAgICAgICAgY21YQ29kZU9iamVjdCogcGJ4Z3JvdXAgPSB0aGlzLT5DcmVhdGVPckdldFBCWEdyb3VwKGd0Z3QsIHNvdXJjZUdyb3VwKTsKLSAgICAgICAgc3RkOjpzdHJpbmcga2V5ID0gR2V0R3JvdXBNYXBLZXlGcm9tUGF0aChndGd0LCBzb3VyY2UpOworICAgICAgICBjbVhDb2RlT2JqZWN0KiBwYnhncm91cCA9CisgICAgICAgICAgdGhpcy0+Q3JlYXRlT3JHZXRQQlhHcm91cChndGd0LmdldCgpLCBzb3VyY2VHcm91cCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGtleSA9IEdldEdyb3VwTWFwS2V5RnJvbVBhdGgoZ3RndC5nZXQoKSwgc291cmNlKTsKICAgICAgICAgdGhpcy0+R3JvdXBNYXBba2V5XSA9IHBieGdyb3VwOwogICAgICAgfTsKIApAQCAtMjg3OSw3ICszMTUwLDcgQEAKIAogICAgICAgLy8gQWRkIHRoZSBJbmZvLnBsaXN0IHdlIGFyZSBhYm91dCB0byBnZW5lcmF0ZSBmb3IgYW4gQXBwIEJ1bmRsZS4KICAgICAgIGlmIChndGd0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiTUFDT1NYX0JVTkRMRSIpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHBsaXN0ID0gdGhpcy0+Q29tcHV0ZUluZm9QTGlzdExvY2F0aW9uKGd0Z3QpOworICAgICAgICBzdGQ6OnN0cmluZyBwbGlzdCA9IHRoaXMtPkNvbXB1dGVJbmZvUExpc3RMb2NhdGlvbihndGd0LmdldCgpKTsKICAgICAgICAgY21Tb3VyY2VGaWxlKiBzZiA9IGd0Z3QtPk1ha2VmaWxlLT5HZXRPckNyZWF0ZVNvdXJjZSgKICAgICAgICAgICBwbGlzdCwgdHJ1ZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7CiAgICAgICAgIGFkZFNvdXJjZVRvR3JvdXAoc2YtPlJlc29sdmVGdWxsUGF0aCgpKTsKQEAgLTI5ODgsNiArMzI1OSw3IEBACiAgIHRoaXMtPkNsZWFyWENvZGVPYmplY3RzKCk7CiAgIHRoaXMtPlJvb3RPYmplY3QgPSBudWxscHRyOwogICB0aGlzLT5NYWluR3JvdXBDaGlsZHJlbiA9IG51bGxwdHI7CisgIHRoaXMtPkZyYW1ld29ya0dyb3VwID0gbnVsbHB0cjsKICAgY21YQ29kZU9iamVjdCogZ3JvdXAgPSB0aGlzLT5DcmVhdGVPYmplY3QoY21YQ29kZU9iamVjdDo6QVRUUklCVVRFX0dST1VQKTsKICAgZ3JvdXAtPkFkZEF0dHJpYnV0ZSgiQ09QWV9QSEFTRV9TVFJJUCIsIHRoaXMtPkNyZWF0ZVN0cmluZygiTk8iKSk7CiAgIGNtWENvZGVPYmplY3QqIGxpc3RPYmpzID0gdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6Ok9CSkVDVF9MSVNUKTsKQEAgLTMwMjIsNiArMzI5NCwxNSBAQAogICBwcm9kdWN0R3JvdXAtPkFkZEF0dHJpYnV0ZSgiY2hpbGRyZW4iLCBwcm9kdWN0R3JvdXBDaGlsZHJlbik7CiAgIHRoaXMtPk1haW5Hcm91cENoaWxkcmVuLT5BZGRPYmplY3QocHJvZHVjdEdyb3VwKTsKIAorICB0aGlzLT5GcmFtZXdvcmtHcm91cCA9IHRoaXMtPkNyZWF0ZU9iamVjdChjbVhDb2RlT2JqZWN0OjpQQlhHcm91cCk7CisgIHRoaXMtPkZyYW1ld29ya0dyb3VwLT5BZGRBdHRyaWJ1dGUoIm5hbWUiLCB0aGlzLT5DcmVhdGVTdHJpbmcoIkZyYW1ld29ya3MiKSk7CisgIHRoaXMtPkZyYW1ld29ya0dyb3VwLT5BZGRBdHRyaWJ1dGUoInNvdXJjZVRyZWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZygiPGdyb3VwPiIpKTsKKyAgY21YQ29kZU9iamVjdCogZnJhbWV3b3JrR3JvdXBDaGlsZHJlbiA9CisgICAgdGhpcy0+Q3JlYXRlT2JqZWN0KGNtWENvZGVPYmplY3Q6Ok9CSkVDVF9MSVNUKTsKKyAgdGhpcy0+RnJhbWV3b3JrR3JvdXAtPkFkZEF0dHJpYnV0ZSgiY2hpbGRyZW4iLCBmcmFtZXdvcmtHcm91cENoaWxkcmVuKTsKKyAgdGhpcy0+TWFpbkdyb3VwQ2hpbGRyZW4tPkFkZE9iamVjdCh0aGlzLT5GcmFtZXdvcmtHcm91cCk7CisKICAgdGhpcy0+Um9vdE9iamVjdCA9IHRoaXMtPkNyZWF0ZU9iamVjdChjbVhDb2RlT2JqZWN0OjpQQlhQcm9qZWN0KTsKICAgdGhpcy0+Um9vdE9iamVjdC0+U2V0Q29tbWVudCgiUHJvamVjdCBvYmplY3QiKTsKIApAQCAtMzA5OCwxMSArMzM3OSwxOSBAQAogICBpZiAoYXJjaHMuZW1wdHkoKSkgewogICAgIC8vIFRlbGwgWGNvZGUgdG8gdXNlIE5BVElWRV9BUkNIIGluc3RlYWQgb2YgQVJDSFMuCiAgICAgYnVpbGRTZXR0aW5ncy0+QWRkQXR0cmlidXRlKCJPTkxZX0FDVElWRV9BUkNIIiwgdGhpcy0+Q3JlYXRlU3RyaW5nKCJZRVMiKSk7CisgICAgLy8gV2hlbiB0YXJnZXRpbmcgbWFjT1MsIHVzZSBvbmx5IHRoZSBob3N0IGFyY2hpdGVjdHVyZS4KKyAgICBpZiAodGhpcy0+U3lzdGVtTmFtZSA9PSAiRGFyd2luIl9zICYmCisgICAgICAgICghY21Ob25lbXB0eShzeXNyb290KSB8fAorICAgICAgICAgY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKHN5c3Jvb3QpLmZpbmQoIm1hY29zIikgIT0KKyAgICAgICAgICAgc3RkOjpzdHJpbmc6Om5wb3MpKSB7CisgICAgICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIkFSQ0hTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoIiQoTkFUSVZFX0FSQ0hfQUNUVUFMKSIpKTsKKyAgICB9CiAgIH0gZWxzZSB7CiAgICAgLy8gVGVsbCBYY29kZSB0byB1c2UgQVJDSFMgKE9OTFlfQUNUSVZFX0FSQ0ggZGVmYXVsdHMgdG8gTk8pLgogICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiQVJDSFMiLCB0aGlzLT5DcmVhdGVTdHJpbmcoYXJjaHMpKTsKICAgfQotICBpZiAoZGVwbG95bWVudFRhcmdldCAmJiAqZGVwbG95bWVudFRhcmdldCkgeworICBpZiAoY21Ob25lbXB0eShkZXBsb3ltZW50VGFyZ2V0KSkgewogICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZShHZXREZXBsb3ltZW50UGxhdGZvcm0ocm9vdC0+R2V0TWFrZWZpbGUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZyhkZXBsb3ltZW50VGFyZ2V0KSk7CiAgIH0KQEAgLTMxMjksMTggKzM0MTgsMjQgQEAKICAgc3RkOjpzdHJpbmcgc3ltcm9vdCA9IGNtU3RyQ2F0KHJvb3QtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9idWlsZCIpOwogICBidWlsZFNldHRpbmdzLT5BZGRBdHRyaWJ1dGUoIlNZTVJPT1QiLCB0aGlzLT5DcmVhdGVTdHJpbmcoc3ltcm9vdCkpOwogCisgIC8vIEluc2lkZSBhIHRyeV9jb21waWxlIHByb2plY3QsIGRvIG5vdCByZXF1aXJlIHNpZ25pbmcgb24gYW55IHBsYXRmb3JtLgorICBpZiAodGhpcy0+Q01ha2VJbnN0YW5jZS0+R2V0SXNJblRyeUNvbXBpbGUoKSkgeworICAgIGJ1aWxkU2V0dGluZ3MtPkFkZEF0dHJpYnV0ZSgiQ09ERV9TSUdOSU5HX0FMTE9XRUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DcmVhdGVTdHJpbmcoIk5PIikpOworICB9CisKICAgZm9yIChhdXRvJiBjb25maWcgOiBjb25maWdzKSB7CiAgICAgY21YQ29kZU9iamVjdCogYnVpbGRTZXR0aW5nc0ZvckNmZyA9IHRoaXMtPkNyZWF0ZUZsYXRDbG9uZShidWlsZFNldHRpbmdzKTsKIAogICAgIC8vIFB1dCB0aGlzIGxhc3Qgc28gaXQgY2FuIG92ZXJyaWRlIGV4aXN0aW5nIHNldHRpbmdzCiAgICAgLy8gQ29udmVydCAiQ01BS0VfWENPREVfQVRUUklCVVRFXyoiIHZhcmlhYmxlcyBkaXJlY3RseS4KICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhciA6IHRoaXMtPkN1cnJlbnRNYWtlZmlsZS0+R2V0RGVmaW5pdGlvbnMoKSkgewotICAgICAgaWYgKHZhci5maW5kKCJDTUFLRV9YQ09ERV9BVFRSSUJVVEVfIikgPT0gMCkgeworICAgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeCh2YXIsICJDTUFLRV9YQ09ERV9BVFRSSUJVVEVfIikpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgYXR0cmlidXRlID0gdmFyLnN1YnN0cigyMik7CiAgICAgICAgIHRoaXMtPkZpbHRlckNvbmZpZ3VyYXRpb25BdHRyaWJ1dGUoY29uZmlnLmZpcnN0LCBhdHRyaWJ1dGUpOwogICAgICAgICBpZiAoIWF0dHJpYnV0ZS5lbXB0eSgpKSB7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgcHJvY2Vzc2VkID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgICAgICAgIHRoaXMtPkN1cnJlbnRNYWtlZmlsZS0+R2V0RGVmaW5pdGlvbih2YXIpLAorICAgICAgICAgICAgdGhpcy0+Q3VycmVudE1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbih2YXIpLAogICAgICAgICAgICAgdGhpcy0+Q3VycmVudExvY2FsR2VuZXJhdG9yLCBjb25maWcuZmlyc3QpOwogICAgICAgICAgIGJ1aWxkU2V0dGluZ3NGb3JDZmctPkFkZEF0dHJpYnV0ZShhdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNyZWF0ZVN0cmluZyhwcm9jZXNzZWQpKTsKQEAgLTMxOTEsMTQgKzM0ODYsMTQgQEAKIHZvaWQgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6Q29tcHV0ZUFyY2hpdGVjdHVyZXMoY21NYWtlZmlsZSogbWYpCiB7CiAgIHRoaXMtPkFyY2hpdGVjdHVyZXMuY2xlYXIoKTsKLSAgY29uc3QgY2hhciogb3N4QXJjaCA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9PU1hfQVJDSElURUNUVVJFUyIpOwogICBjb25zdCBjaGFyKiBzeXNyb290ID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX09TWF9TWVNST09UIik7Ci0gIGlmIChvc3hBcmNoICYmIHN5c3Jvb3QpIHsKLSAgICBjbUV4cGFuZExpc3Qoc3RkOjpzdHJpbmcob3N4QXJjaCksIHRoaXMtPkFyY2hpdGVjdHVyZXMpOworICBpZiAoc3lzcm9vdCkgeworICAgIG1mLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9PU1hfQVJDSElURUNUVVJFUyIsIHRoaXMtPkFyY2hpdGVjdHVyZXMpOwogICB9CiAKICAgaWYgKHRoaXMtPkFyY2hpdGVjdHVyZXMuZW1wdHkoKSkgewotICAgIC8vIFdpdGggbm8gQVJDSFMgd2UgdXNlIE9OTFlfQUNUSVZFX0FSQ0guCisgICAgLy8gV2l0aCBubyBBUkNIUyB3ZSB1c2UgT05MWV9BQ1RJVkVfQVJDSCBhbmQgcG9zc2libHkgYQorICAgIC8vIHBsYXRmb3JtLXNwZWNpZmljIGRlZmF1bHQgQVJDSFMgcGxhY2Vob2xkZXIgdmFsdWUuCiAgICAgLy8gTG9vayB1cCB0aGUgYXJjaCB0aGF0IFhjb2RlIGNob29zZXMgaW4gdGhpcyBjYXNlLgogICAgIGlmIChjb25zdCBjaGFyKiBhcmNoID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX1hDT0RFX0FSQ0hTIikpIHsKICAgICAgIHRoaXMtPk9iamVjdERpckFyY2hEZWZhdWx0ID0gYXJjaDsKQEAgLTMzODQsNyArMzY3OSw3IEBACiAgIC8vIGNvbGxlY3QgYWxsIHRlc3RzIGZvciB0aGUgdGFyZ2V0cwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21YQ29kZVNjaGVtZTo6VGVzdE9iamVjdHM+IHRlc3RhYmxlczsKIAotICBmb3IgKGF1dG8gb2JqIDogdGhpcy0+WENvZGVPYmplY3RzKSB7CisgIGZvciAoY29uc3QgYXV0byYgb2JqIDogdGhpcy0+WENvZGVPYmplY3RzKSB7CiAgICAgaWYgKG9iai0+R2V0VHlwZSgpICE9IGNtWENvZGVPYmplY3Q6Ok9CSkVDVCB8fAogICAgICAgICBvYmotPkdldElzQSgpICE9IGNtWENvZGVPYmplY3Q6OlBCWE5hdGl2ZVRhcmdldCkgewogICAgICAgY29udGludWU7CkBAIC0zMzk0LDEyICszNjg5LDEyIEBACiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICBjb25zdCBjaGFyKiB0ZXN0ZWUgPSBvYmotPkdldFRhcmdldCgpLT5HZXRQcm9wZXJ0eSgiWENURVNUX1RFU1RFRSIpOworICAgIGNtUHJvcCB0ZXN0ZWUgPSBvYmotPkdldFRhcmdldCgpLT5HZXRQcm9wZXJ0eSgiWENURVNUX1RFU1RFRSIpOwogICAgIGlmICghdGVzdGVlKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICB0ZXN0YWJsZXNbdGVzdGVlXS5wdXNoX2JhY2sob2JqKTsKKyAgICB0ZXN0YWJsZXNbKnRlc3RlZV0ucHVzaF9iYWNrKG9iai5nZXQoKSk7CiAgIH0KIAogICAvLyBnZW5lcmF0ZSBzY2hlbWUKQEAgLTM0MDgsMTQgKzM3MDMsMTQgQEAKICAgLy8gU2luY2UgdGhlIGxvd2VzdCBhdmFpbGFibGUgWGNvZGUgdmVyc2lvbiBmb3IgdGVzdGluZyB3YXMgNi40LAogICAvLyBJJ20gc2V0dGluZyB0aGlzIGFzIGEgbGltaXQgdGhlbgogICBpZiAodGhpcy0+WGNvZGVWZXJzaW9uID49IDY0KSB7Ci0gICAgZm9yIChhdXRvIG9iaiA6IHRoaXMtPlhDb2RlT2JqZWN0cykgeworICAgIGZvciAoY29uc3QgYXV0byYgb2JqIDogdGhpcy0+WENvZGVPYmplY3RzKSB7CiAgICAgICBpZiAob2JqLT5HZXRUeXBlKCkgPT0gY21YQ29kZU9iamVjdDo6T0JKRUNUICYmCiAgICAgICAgICAgKG9iai0+R2V0SXNBKCkgPT0gY21YQ29kZU9iamVjdDo6UEJYTmF0aXZlVGFyZ2V0IHx8CiAgICAgICAgICAgIG9iai0+R2V0SXNBKCkgPT0gY21YQ29kZU9iamVjdDo6UEJYQWdncmVnYXRlVGFyZ2V0KSAmJgogICAgICAgICAgIChyb290LT5HZXRNYWtlZmlsZSgpLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldElzSW5UcnlDb21waWxlKCkgfHwKICAgICAgICAgICAgb2JqLT5HZXRUYXJnZXQoKS0+R2V0UHJvcGVydHlBc0Jvb2woIlhDT0RFX0dFTkVSQVRFX1NDSEVNRSIpKSkgewogICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSA9IG9iai0+R2V0VGFyZ2V0KCktPkdldE5hbWUoKTsKLSAgICAgICAgY21YQ29kZVNjaGVtZSBzY2htKG9iaiwgdGVzdGFibGVzW3RhcmdldE5hbWVdLAorICAgICAgICBjbVhDb2RlU2NoZW1lIHNjaG0ocm9vdCwgb2JqLmdldCgpLCB0ZXN0YWJsZXNbdGFyZ2V0TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5DdXJyZW50Q29uZmlndXJhdGlvblR5cGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+WGNvZGVWZXJzaW9uKTsKICAgICAgICAgc2NobS5Xcml0ZVhDb2RlU2hhcmVkU2NoZW1lKHhjUHJvakRpciwKQEAgLTM0NTQsNiArMzc0OSw4IEBACiAgIGlmICh0aGlzLT5YY29kZVZlcnNpb24gPj0gMTAwKSB7CiAgICAgeG91dC5FbGVtZW50KCJrZXkiLCAiQnVpbGRTeXN0ZW1UeXBlIik7CiAgICAgeG91dC5FbGVtZW50KCJzdHJpbmciLCAiT3JpZ2luYWwiKTsKKyAgICB4b3V0LkVsZW1lbnQoImtleSIsICJEaXNhYmxlQnVpbGRTeXN0ZW1EZXByZWNhdGlvbldhcm5pbmciKTsKKyAgICB4b3V0LkVsZW1lbnQoInRydWUiKTsKICAgfQogICBpZiAoaGFzR2VuZXJhdGVkU2NoZW1lcykgewogICAgIHhvdXQuRWxlbWVudCgia2V5IiwKQEAgLTM1NDEsNyArMzgzOCw3IEBACiAKIHN0ZDo6c3RyaW5nIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OlhDb2RlRXNjYXBlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcCkKIHsKLSAgaWYgKHAuZmluZCgnICcpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgIGlmIChwLmZpbmRfZmlyc3Rfb2YoIiBbXSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgc3RkOjpzdHJpbmcgdCA9IGNtU3RyQ2F0KCciJywgcCwgJyInKTsKICAgICByZXR1cm4gdDsKICAgfQpAQCAtMzY4NywxNSArMzk4NCwxNCBAQAogCiBib29sIGNtR2xvYmFsWENvZGVHZW5lcmF0b3I6OlVzZUVmZmVjdGl2ZVBsYXRmb3JtTmFtZShjbU1ha2VmaWxlKiBtZikgY29uc3QKIHsKLSAgY29uc3QgY2hhciogZXBuVmFsdWUgPQotICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoCi0gICAgICAiWENPREVfRU1JVF9FRkZFQ1RJVkVfUExBVEZPUk1fTkFNRSIpOworICBjbVByb3AgZXBuVmFsdWUgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KAorICAgICJYQ09ERV9FTUlUX0VGRkVDVElWRV9QTEFURk9STV9OQU1FIik7CiAKICAgaWYgKCFlcG5WYWx1ZSkgewogICAgIHJldHVybiBtZi0+UGxhdGZvcm1Jc0FwcGxlRW1iZWRkZWQoKTsKICAgfQogCi0gIHJldHVybiBjbUlzT24oZXBuVmFsdWUpOworICByZXR1cm4gY21Jc09uKCplcG5WYWx1ZSk7CiB9CiAKIGJvb2wgY21HbG9iYWxYQ29kZUdlbmVyYXRvcjo6U2hvdWxkU3RyaXBSZXNvdXJjZVBhdGgoY21NYWtlZmlsZSopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5oIGIvU291cmNlL2NtR2xvYmFsWENvZGVHZW5lcmF0b3IuaAppbmRleCBhZjkwNWQwLi43MDE4ZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HbG9iYWxYQ29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUdsb2JhbFhDb2RlR2VuZXJhdG9yLmgKQEAgLTcsNiArNyw3IEBACiAKICNpbmNsdWRlIDxpb3Nmd2Q+CiAjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTI3LDE0ICsyOCwxOCBAQAogLyoqIFxjbGFzcyBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yCiAgKiBcYnJpZWYgV3JpdGUgYSBVbml4IG1ha2VmaWxlcy4KICAqCi0gKiBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yIG1hbmFnZXMgVU5JWCBidWlsZCBwcm9jZXNzIGZvciBhIHRyZWUKKyAqIGNtR2xvYmFsWENvZGVHZW5lcmF0b3IgbWFuYWdlcyBYY29kZSBidWlsZCBwcm9jZXNzIGZvciBhIHRyZWUKICAqLwogY2xhc3MgY21HbG9iYWxYQ29kZUdlbmVyYXRvciA6IHB1YmxpYyBjbUdsb2JhbEdlbmVyYXRvcgogewogcHVibGljOgogICBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yKGNtYWtlKiBjbSwgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uX251bWJlcik7Ci0gIHN0YXRpYyBjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIE5ld0ZhY3RvcnkoKTsKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvckZhY3Rvcnk+IE5ld0ZhY3RvcnkoKTsKKworICBjbUdsb2JhbFhDb2RlR2VuZXJhdG9yKGNvbnN0IGNtR2xvYmFsWENvZGVHZW5lcmF0b3ImKSA9IGRlbGV0ZTsKKyAgY29uc3QgY21HbG9iYWxYQ29kZUdlbmVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IGNtR2xvYmFsWENvZGVHZW5lcmF0b3ImKSA9CisgICAgZGVsZXRlOwogCiAgIC8vISBHZXQgdGhlIG5hbWUgZm9yIHRoZSBnZW5lcmF0b3IuCiAgIHN0ZDo6c3RyaW5nIEdldE5hbWUoKSBjb25zdCBvdmVycmlkZQpAQCAtNDcsNyArNTIsOCBAQAogICBzdGF0aWMgdm9pZCBHZXREb2N1bWVudGF0aW9uKGNtRG9jdW1lbnRhdGlvbkVudHJ5JiBlbnRyeSk7CiAKICAgLy8hIENyZWF0ZSBhIGxvY2FsIGdlbmVyYXRvciBhcHByb3ByaWF0ZSB0byB0aGlzIEdsb2JhbCBHZW5lcmF0b3IKLSAgY21Mb2NhbEdlbmVyYXRvciogQ3JlYXRlTG9jYWxHZW5lcmF0b3IoY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4gQ3JlYXRlTG9jYWxHZW5lcmF0b3IoCisgICAgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwogCiAgIC8qKgogICAgKiBUcnkgdG8gZGV0ZXJtaW5lIHN5c3RlbSBpbmZvcm1hdGlvbiBzdWNoIGFzIHNoYXJlZCBsaWJyYXJ5CkBAIC0xMDMsNyArMTA5LDkgQEAKIAogICBib29sIFNob3VsZFN0cmlwUmVzb3VyY2VQYXRoKGNtTWFrZWZpbGUqKSBjb25zdCBvdmVycmlkZTsKIAotICBib29sIFNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBjbU1ha2VmaWxlKiBtZikgb3ZlcnJpZGU7CisgIGJvb2wgU2V0U3lzdGVtTmFtZShzdGQ6OnN0cmluZyBjb25zdCYgcywgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOworICBib29sIFNldEdlbmVyYXRvclRvb2xzZXQoc3RkOjpzdHJpbmcgY29uc3QmIHRzLCBib29sIGJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpIG92ZXJyaWRlOwogICB2b2lkIEFwcGVuZEZsYWcoc3RkOjpzdHJpbmcmIGZsYWdzLCBzdGQ6OnN0cmluZyBjb25zdCYgZmxhZykgY29uc3Q7CiAKIHByb3RlY3RlZDoKQEAgLTE5NiwxMCArMjA0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVNvdXJjZUZpbGUqIHNmKTsKLSAgY21YQ29kZU9iamVjdCogQ3JlYXRlWENvZGVTb3VyY2VGaWxlRnJvbVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Tb3VyY2VGaWxlKiBzZik7CisgIGNtWENvZGVPYmplY3QqIENyZWF0ZVhDb2RlQnVpbGRGaWxlRnJvbVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Tb3VyY2VGaWxlKiBzZik7CiAgIGNtWENvZGVPYmplY3QqIENyZWF0ZVhDb2RlRmlsZVJlZmVyZW5jZShjbVNvdXJjZUZpbGUqIHNmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CiAgIGNtWENvZGVPYmplY3QqIENyZWF0ZVhDb2RlU291cmNlRmlsZShjbUxvY2FsR2VuZXJhdG9yKiBnZW4sIGNtU291cmNlRmlsZSogc2YsCkBAIC0yNDYsNyArMjU0LDcgQEAKICAgdW5zaWduZWQgaW50IFhjb2RlVmVyc2lvbjsKICAgc3RkOjpzdHJpbmcgVmVyc2lvblN0cmluZzsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IFhDb2RlT2JqZWN0SURzOwotICBzdGQ6OnZlY3RvcjxjbVhDb2RlT2JqZWN0Kj4gWENvZGVPYmplY3RzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21YQ29kZU9iamVjdD4+IFhDb2RlT2JqZWN0czsKICAgY21YQ29kZU9iamVjdCogUm9vdE9iamVjdDsKIAogcHJpdmF0ZToKQEAgLTI3MCwxMCArMjc4LDExIEBACiAgIHZvaWQgQ29tcHV0ZUFyY2hpdGVjdHVyZXMoY21NYWtlZmlsZSogbWYpOwogICB2b2lkIENvbXB1dGVPYmplY3REaXJBcmNoKGNtTWFrZWZpbGUqIG1mKTsKIAotICB2b2lkIGFkZE9iamVjdChjbVhDb2RlT2JqZWN0KiBvYmopOworICB2b2lkIGFkZE9iamVjdChzdGQ6OnVuaXF1ZV9wdHI8Y21YQ29kZU9iamVjdD4gb2JqKTsKICAgc3RkOjpzdHJpbmcgUG9zdEJ1aWxkTWFrZVRhcmdldChzdGQ6OnN0cmluZyBjb25zdCYgdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZ05hbWUpOwogICBjbVhDb2RlT2JqZWN0KiBNYWluR3JvdXBDaGlsZHJlbjsKKyAgY21YQ29kZU9iamVjdCogRnJhbWV3b3JrR3JvdXA7CiAgIGNtTWFrZWZpbGUqIEN1cnJlbnRNYWtlZmlsZTsKICAgY21Mb2NhbEdlbmVyYXRvciogQ3VycmVudExvY2FsR2VuZXJhdG9yOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ3VycmVudENvbmZpZ3VyYXRpb25UeXBlczsKQEAgLTI4NywxMiArMjk2LDE2IEBACiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjbVhDb2RlT2JqZWN0Kj4gR3JvdXBOYW1lTWFwOwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21YQ29kZU9iamVjdCo+IFRhcmdldEdyb3VwOwogICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21YQ29kZU9iamVjdCo+IEZpbGVSZWZzOworICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21YQ29kZU9iamVjdCo+IEV4dGVybmFsTGliUmVmczsKICAgc3RkOjptYXA8Y21HZW5lcmF0b3JUYXJnZXQgY29uc3QqLCBjbVhDb2RlT2JqZWN0Kj4gWENvZGVPYmplY3RNYXA7CisgIHN0ZDo6bWFwPGNtWENvZGVPYmplY3QqLCBjbVhDb2RlT2JqZWN0Kj4gRmlsZVJlZlRvQnVpbGRGaWxlTWFwOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQXJjaGl0ZWN0dXJlczsKICAgc3RkOjpzdHJpbmcgT2JqZWN0RGlyQXJjaERlZmF1bHQ7CiAgIHN0ZDo6c3RyaW5nIE9iamVjdERpckFyY2g7CisgIHN0ZDo6c3RyaW5nIFN5c3RlbU5hbWU7CiAgIHN0ZDo6c3RyaW5nIEdlbmVyYXRvclRvb2xzZXQ7CiAgIHN0ZDo6bWFwPGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0Kiwgc2l6ZV90PiBUYXJnZXRPcmRlckluZGV4OworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gRW5hYmxlZExhbmdzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HcmFwaEFkamFjZW5jeUxpc3QuaCBiL1NvdXJjZS9jbUdyYXBoQWRqYWNlbmN5TGlzdC5oCmluZGV4IDVlZDZhZjQuLjRlMWYxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUdyYXBoQWRqYWNlbmN5TGlzdC5oCisrKyBiL1NvdXJjZS9jbUdyYXBoQWRqYWNlbmN5TGlzdC5oCkBAIC0xOCw5ICsxOCwxMCBAQAogY2xhc3MgY21HcmFwaEVkZ2UKIHsKIHB1YmxpYzoKLSAgY21HcmFwaEVkZ2UoaW50IG4sIGJvb2wgcywgY21MaXN0RmlsZUJhY2t0cmFjZSBidCkKKyAgY21HcmFwaEVkZ2UoaW50IG4sIGJvb2wgcywgYm9vbCBjLCBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0KQogICAgIDogRGVzdChuKQogICAgICwgU3Ryb25nKHMpCisgICAgLCBDcm9zcyhjKQogICAgICwgQmFja3RyYWNlKHN0ZDo6bW92ZShidCkpCiAgIHsKICAgfQpAQCAtMjgsMTEgKzI5LDE0IEBACiAKICAgYm9vbCBJc1N0cm9uZygpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlN0cm9uZzsgfQogCisgIGJvb2wgSXNDcm9zcygpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkNyb3NzOyB9CisKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgR2V0QmFja3RyYWNlKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+QmFja3RyYWNlOyB9CiAKIHByaXZhdGU6CiAgIGludCBEZXN0OwogICBib29sIFN0cm9uZzsKKyAgYm9vbCBDcm9zczsKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBCYWNrdHJhY2U7CiB9Owogc3RydWN0IGNtR3JhcGhFZGdlTGlzdCA6IHB1YmxpYyBzdGQ6OnZlY3RvcjxjbUdyYXBoRWRnZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUdyYXBoVml6V3JpdGVyLmN4eCBiL1NvdXJjZS9jbUdyYXBoVml6V3JpdGVyLmN4eAppbmRleCBlMGQ1NDVkLi41NzBmNGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HcmFwaFZpeldyaXRlci5jeHgKKysrIGIvU291cmNlL2NtR3JhcGhWaXpXcml0ZXIuY3h4CkBAIC0yLDE3NiArMiwyMDIgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtR3JhcGhWaXpXcml0ZXIuaCIKIAotI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y2N0eXBlPgogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtTGlua0l0ZW0uaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlU25hcHNob3QuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCi0jaW5jbHVkZSAiY21UYXJnZXQuaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCiBuYW1lc3BhY2UgewotZW51bSBMaW5rTGlicmFyeVNjb3BlVHlwZQorCitjaGFyIGNvbnN0KiBjb25zdCBHUkFQSFZJWl9FREdFX1NUWUxFX1BVQkxJQyA9ICJzb2xpZCI7CitjaGFyIGNvbnN0KiBjb25zdCBHUkFQSFZJWl9FREdFX1NUWUxFX0lOVEVSRkFDRSA9ICJkYXNoZWQiOworY2hhciBjb25zdCogY29uc3QgR1JBUEhWSVpfRURHRV9TVFlMRV9QUklWQVRFID0gImRvdHRlZCI7CisKK2NoYXIgY29uc3QqIGNvbnN0IEdSQVBIVklaX05PREVfU0hBUEVfRVhFQ1VUQUJMRSA9ICJlZ2ciOyAvLyBlZ2cteGVjdXRhYmxlCisKKy8vIE5vcm1hbCBsaWJyYXJpZXMuCitjaGFyIGNvbnN0KiBjb25zdCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfU1RBVElDID0gIm9jdGFnb24iOworY2hhciBjb25zdCogY29uc3QgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX1NIQVJFRCA9ICJkb3VibGVvY3RhZ29uIjsKK2NoYXIgY29uc3QqIGNvbnN0IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9NT0RVTEUgPSAidHJpcGxlb2N0YWdvbiI7CisKK2NoYXIgY29uc3QqIGNvbnN0IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9JTlRFUkZBQ0UgPSAicGVudGFnb24iOworY2hhciBjb25zdCogY29uc3QgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX09CSkVDVCA9ICJoZXhhZ29uIjsKK2NoYXIgY29uc3QqIGNvbnN0IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9VTktOT1dOID0gInNlcHRhZ29uIjsKKworY2hhciBjb25zdCogY29uc3QgR1JBUEhWSVpfTk9ERV9TSEFQRV9VVElMSVRZID0gImJveCI7CisKK2NvbnN0IGNoYXIqIGdldFNoYXBlRm9yVGFyZ2V0KGNvbnN0IGNtTGlua0l0ZW0mIGl0ZW0pCiB7Ci0gIExMVF9TQ09QRV9QVUJMSUMsCi0gIExMVF9TQ09QRV9QUklWQVRFLAotICBMTFRfU0NPUEVfSU5URVJGQUNFCisgIGlmIChpdGVtLlRhcmdldCA9PSBudWxscHRyKSB7CisgICAgcmV0dXJuIEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9VTktOT1dOOworICB9CisKKyAgc3dpdGNoIChpdGVtLlRhcmdldC0+R2V0VHlwZSgpKSB7CisgICAgY2FzZSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEU6CisgICAgICByZXR1cm4gR1JBUEhWSVpfTk9ERV9TSEFQRV9FWEVDVVRBQkxFOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKKyAgICAgIHJldHVybiBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfU1RBVElDOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKKyAgICAgIHJldHVybiBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfU0hBUkVEOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKKyAgICAgIHJldHVybiBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfTU9EVUxFOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWToKKyAgICAgIHJldHVybiBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfT0JKRUNUOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgorICAgICAgcmV0dXJuIEdSQVBIVklaX05PREVfU0hBUEVfVVRJTElUWTsKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlk6CisgICAgICByZXR1cm4gR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX0lOVEVSRkFDRTsKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6VU5LTk9XTl9MSUJSQVJZOgorICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX1VOS05PV047CisgIH0KK30KKworc3RydWN0IERlcGVuZGVlc0RpcgoreworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgc3RhdGljIGNvbnN0IGNtTGlua0l0ZW0mIHNyYyhjb25zdCBUJiBjb24pCisgIHsKKyAgICByZXR1cm4gY29uLnNyYzsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdGF0aWMgY29uc3QgY21MaW5rSXRlbSYgZHN0KGNvbnN0IFQmIGNvbikKKyAgeworICAgIHJldHVybiBjb24uZHN0OworICB9CiB9OwogCi1jb25zdCBjaGFyKiBjb25zdCBHUkFQSFZJWl9QUklWQVRFX0VERUdFX1NUWUxFID0gImRhc2hlZCI7Ci1jb25zdCBjaGFyKiBjb25zdCBHUkFQSFZJWl9JTlRFUkZBQ0VfRURFR0VfU1RZTEUgPSAiZG90dGVkIjsKLQotc3RkOjpzdHJpbmcgZ2V0TGlua0xpYnJhcnlTdHlsZShjb25zdCBMaW5rTGlicmFyeVNjb3BlVHlwZSYgdHlwZSkKK3N0cnVjdCBEZXBlbmRlcnNEaXIKIHsKLSAgc3RkOjpzdHJpbmcgc3R5bGU7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgTExUX1NDT1BFX1BSSVZBVEU6Ci0gICAgICBzdHlsZSA9ICJbc3R5bGUgPSAiICsgc3RkOjpzdHJpbmcoR1JBUEhWSVpfUFJJVkFURV9FREVHRV9TVFlMRSkgKyAiXSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIExMVF9TQ09QRV9JTlRFUkZBQ0U6Ci0gICAgICBzdHlsZSA9ICJbc3R5bGUgPSAiICsgc3RkOjpzdHJpbmcoR1JBUEhWSVpfSU5URVJGQUNFX0VERUdFX1NUWUxFKSArICJdIjsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0YXRpYyBjb25zdCBjbUxpbmtJdGVtJiBzcmMoY29uc3QgVCYgY29uKQorICB7CisgICAgcmV0dXJuIGNvbi5kc3Q7CiAgIH0KLSAgcmV0dXJuIHN0eWxlOworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdGF0aWMgY29uc3QgY21MaW5rSXRlbSYgZHN0KGNvbnN0IFQmIGNvbikKKyAgeworICAgIHJldHVybiBjb24uc3JjOworICB9Cit9OwogfQogCi1jb25zdCBjaGFyKiBnZXRTaGFwZUZvclRhcmdldChjb25zdCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQotewotICBpZiAoIXRhcmdldCkgewotICAgIHJldHVybiAiZWxsaXBzZSI7Ci0gIH0KLQotICBzd2l0Y2ggKHRhcmdldC0+R2V0VHlwZSgpKSB7Ci0gICAgY2FzZSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEU6Ci0gICAgICByZXR1cm4gImhvdXNlIjsKLSAgICBjYXNlIGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlk6Ci0gICAgICByZXR1cm4gImRpYW1vbmQiOwotICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKLSAgICAgIHJldHVybiAicG9seWdvbiI7Ci0gICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOgotICAgICAgcmV0dXJuICJvY3RhZ29uIjsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gImJveCI7Ci19Ci0KLXN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBMaW5rTGlicmFyeVNjb3BlVHlwZT4gZ2V0U2NvcGVkTGlua0xpYnJhcmllc0Zyb21UYXJnZXQoCi0gIGNtVGFyZ2V0KiBUYXJnZXQsIGNvbnN0IGNtR2xvYmFsR2VuZXJhdG9yKiBnbG9iYWxHZW5lcmF0b3IpCi17Ci0gIGNoYXIgc2VwID0gJzsnOwotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTGlua0xpYnJhcnlTY29wZVR5cGU+IHRva2VuczsKLSAgc2l6ZV90IHN0YXJ0ID0gMDsKLSAgc2l6ZV90IGVuZCA9IDA7Ci0KLSAgY29uc3QgY2hhciogcEludGVyZmFjZUxpbmtMaWJyYXJpZXMgPQotICAgIFRhcmdldC0+R2V0UHJvcGVydHkoIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyIpOwotICBjb25zdCBjaGFyKiBwTGlua0xpYnJhcmllcyA9IFRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfTElCUkFSSUVTIik7Ci0KLSAgaWYgKCFwSW50ZXJmYWNlTGlua0xpYnJhcmllcyAmJiAhcExpbmtMaWJyYXJpZXMpIHsKLSAgICByZXR1cm4gdG9rZW5zOyAvLyB0YXJnZXQgaXMgbm90IGxpbmtlZCBhZ2FpbnN0IGFueSBvdGhlciBsaWJyYXJpZXMKLSAgfQotCi0gIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCB0b3VjaCBhIG51bGwtcHRyCi0gIGF1dG8gaW50ZXJmYWNlTGlua0xpYnJhcmllcyA9Ci0gICAgc3RkOjpzdHJpbmcocEludGVyZmFjZUxpbmtMaWJyYXJpZXMgPyBwSW50ZXJmYWNlTGlua0xpYnJhcmllcyA6ICIiKTsKLSAgYXV0byBsaW5rTGlicmFyaWVzID0gc3RkOjpzdHJpbmcocExpbmtMaWJyYXJpZXMgPyBwTGlua0xpYnJhcmllcyA6ICIiKTsKLQotICAvLyBmaXJzdCBleHRyYWN0IGludGVyZmFjZUxpbmtMaWJyYXJpZXMKLSAgd2hpbGUgKHN0YXJ0IDwgaW50ZXJmYWNlTGlua0xpYnJhcmllcy5sZW5ndGgoKSkgewotCi0gICAgaWYgKChlbmQgPSBpbnRlcmZhY2VMaW5rTGlicmFyaWVzLmZpbmQoc2VwLCBzdGFydCkpID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICBlbmQgPSBpbnRlcmZhY2VMaW5rTGlicmFyaWVzLmxlbmd0aCgpOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIGVsZW1lbnQgPSBpbnRlcmZhY2VMaW5rTGlicmFyaWVzLnN1YnN0cihzdGFydCwgZW5kIC0gc3RhcnQpOwotICAgIGlmIChnbG9iYWxHZW5lcmF0b3ItPklzQWxpYXMoZWxlbWVudCkpIHsKLSAgICAgIGNvbnN0IGF1dG8gdGd0ID0gZ2xvYmFsR2VuZXJhdG9yLT5GaW5kVGFyZ2V0KGVsZW1lbnQpOwotICAgICAgaWYgKHRndCkgewotICAgICAgICBlbGVtZW50ID0gdGd0LT5HZXROYW1lKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHN0ZDo6c3RyaW5nOjpucG9zID09IGVsZW1lbnQuZmluZCgiJDxMSU5LX09OTFk6IiwgMCkpIHsKLSAgICAgIC8vIHdlIGFzc3VtZSBmaXJzdCwgdGhhdCB0aGlzIGxpYnJhcnkgaXMgYW4gaW50ZXJmYWNlIGxpYnJhcnkuCi0gICAgICAvLyBpZiB3ZSBmaW5kIGl0IGFnYWluIGluIHRoZSBsaW5rbGlicmFyaWVzIHByb3BlcnR5LCB3ZSBwcm9tb3RlIGl0IHRvIGFuCi0gICAgICAvLyBwdWJsaWMgbGlicmFyeS4KLSAgICAgIHRva2Vuc1tlbGVtZW50XSA9IExMVF9TQ09QRV9JTlRFUkZBQ0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIHRoaXMgaXMgYW4gcHJpdmF0ZSBsaW5rZWQgc3RhdGljIGxpYnJhcnkuCi0gICAgICAvLyB3ZSB0YWtlIGNhcmUgb2YgdGhpcyBjYXNlIGluIHRoZSBzZWNvbmQgaXRlcmF0b3IuCi0gICAgfQotICAgIHN0YXJ0ID0gZW5kICsgMTsKLSAgfQotCi0gIC8vIHNlY29uZCBleHRyYWN0IGxpbmtMaWJyYXJpZXMKLSAgc3RhcnQgPSAwOwotICB3aGlsZSAoc3RhcnQgPCBsaW5rTGlicmFyaWVzLmxlbmd0aCgpKSB7Ci0KLSAgICBpZiAoKGVuZCA9IGxpbmtMaWJyYXJpZXMuZmluZChzZXAsIHN0YXJ0KSkgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgIGVuZCA9IGxpbmtMaWJyYXJpZXMubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgZWxlbWVudCA9IGxpbmtMaWJyYXJpZXMuc3Vic3RyKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgaWYgKGdsb2JhbEdlbmVyYXRvci0+SXNBbGlhcyhlbGVtZW50KSkgewotICAgICAgY29uc3QgYXV0byB0Z3QgPSBnbG9iYWxHZW5lcmF0b3ItPkZpbmRUYXJnZXQoZWxlbWVudCk7Ci0gICAgICBpZiAodGd0KSB7Ci0gICAgICAgIGVsZW1lbnQgPSB0Z3QtPkdldE5hbWUoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodG9rZW5zLmZpbmQoZWxlbWVudCkgPT0gdG9rZW5zLmVuZCgpKSB7Ci0gICAgICAvLyB0aGlzIGxpYnJhcnkgaXMgbm90IGZvdW5kIGluIGludGVyZmFjZUxpbmtMaWJyYXJpZXMgYnV0IGluCi0gICAgICAvLyBsaW5rTGlicmFyaWVzLgotICAgICAgLy8gdGhpcyByZXN1bHRzIGluIGEgcHJpdmF0ZSBsaW5rZWQgbGlicmFyeS4KLSAgICAgIHRva2Vuc1tlbGVtZW50XSA9IExMVF9TQ09QRV9QUklWQVRFOwotICAgIH0gZWxzZSBpZiAoTExUX1NDT1BFX0lOVEVSRkFDRSA9PSB0b2tlbnNbZWxlbWVudF0pIHsKLSAgICAgIC8vIHRoaXMgbGlicmFyeSBpcyBmb3VuZCBpbiBpbnRlcmZhY2VMaW5rTGlicmFyaWVzIGFuZCBsaW5rTGlicmFyaWVzLgotICAgICAgLy8gdGhpcyByZXN1bHRzIGluIGEgcHVibGljIGxpbmtlZCBsaWJyYXJ5LgotICAgICAgdG9rZW5zW2VsZW1lbnRdID0gTExUX1NDT1BFX1BVQkxJQzsKLSAgICB9IGVsc2UgewotICAgICAgLy8gcHJpdmF0ZSBhbmQgcHVibGljIGxpbmtlZCBsaWJyYXJpZXMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFueW1vcmUuCi0gICAgfQotCi0gICAgc3RhcnQgPSBlbmQgKyAxOwotICB9Ci0KLSAgcmV0dXJuIHRva2VuczsKLX0KLX0KLQotY21HcmFwaFZpeldyaXRlcjo6Y21HcmFwaFZpeldyaXRlcihjb25zdCBjbUdsb2JhbEdlbmVyYXRvciogZ2xvYmFsR2VuZXJhdG9yKQotICA6IEdyYXBoVHlwZSgiZGlncmFwaCIpCi0gICwgR3JhcGhOYW1lKCJHRyIpCitjbUdyYXBoVml6V3JpdGVyOjpjbUdyYXBoVml6V3JpdGVyKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21HbG9iYWxHZW5lcmF0b3IqIGdsb2JhbEdlbmVyYXRvcikKKyAgOiBGaWxlTmFtZShmaWxlTmFtZSkKKyAgLCBHbG9iYWxGaWxlU3RyZWFtKGZpbGVOYW1lKQorICAsIEdyYXBoTmFtZShnbG9iYWxHZW5lcmF0b3ItPkdldFNhZmVHbG9iYWxTZXR0aW5nKCJDTUFLRV9QUk9KRUNUX05BTUUiKSkKICAgLCBHcmFwaEhlYWRlcigibm9kZSBbXG4gIGZvbnRzaXplID0gXCIxMlwiXG5dOyIpCiAgICwgR3JhcGhOb2RlUHJlZml4KCJub2RlIikKICAgLCBHbG9iYWxHZW5lcmF0b3IoZ2xvYmFsR2VuZXJhdG9yKQotICAsIExvY2FsR2VuZXJhdG9ycyhnbG9iYWxHZW5lcmF0b3ItPkdldExvY2FsR2VuZXJhdG9ycygpKQorICAsIE5leHROb2RlSWQoMCkKICAgLCBHZW5lcmF0ZUZvckV4ZWN1dGFibGVzKHRydWUpCiAgICwgR2VuZXJhdGVGb3JTdGF0aWNMaWJzKHRydWUpCiAgICwgR2VuZXJhdGVGb3JTaGFyZWRMaWJzKHRydWUpCiAgICwgR2VuZXJhdGVGb3JNb2R1bGVMaWJzKHRydWUpCi0gICwgR2VuZXJhdGVGb3JJbnRlcmZhY2UodHJ1ZSkKKyAgLCBHZW5lcmF0ZUZvckludGVyZmFjZUxpYnModHJ1ZSkKKyAgLCBHZW5lcmF0ZUZvck9iamVjdExpYnModHJ1ZSkKKyAgLCBHZW5lcmF0ZUZvclVua25vd25MaWJzKHRydWUpCisgICwgR2VuZXJhdGVGb3JDdXN0b21UYXJnZXRzKGZhbHNlKQogICAsIEdlbmVyYXRlRm9yRXh0ZXJuYWxzKHRydWUpCiAgICwgR2VuZXJhdGVQZXJUYXJnZXQodHJ1ZSkKICAgLCBHZW5lcmF0ZURlcGVuZGVycyh0cnVlKQotICAsIEhhdmVUYXJnZXRzQW5kTGlicyhmYWxzZSkKIHsKIH0KIAorY21HcmFwaFZpeldyaXRlcjo6fmNtR3JhcGhWaXpXcml0ZXIoKQoreworICB0aGlzLT5Xcml0ZUZvb3Rlcih0aGlzLT5HbG9iYWxGaWxlU3RyZWFtKTsKK30KKwordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpWaXNpdEdyYXBoKHN0ZDo6c3RyaW5nIGNvbnN0JikKK3sKKyAgdGhpcy0+V3JpdGVIZWFkZXIoR2xvYmFsRmlsZVN0cmVhbSwgdGhpcy0+R3JhcGhOYW1lKTsKKyAgdGhpcy0+V3JpdGVMZWdlbmQoR2xvYmFsRmlsZVN0cmVhbSk7Cit9CisKK3ZvaWQgY21HcmFwaFZpeldyaXRlcjo6T25JdGVtKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0pCit7CisgIGlmICh0aGlzLT5JdGVtRXhjbHVkZWQoaXRlbSkpIHsKKyAgICByZXR1cm47CisgIH0KKworICBOb2RlTmFtZXNbaXRlbS5Bc1N0cigpXSA9IGNtU3RyQ2F0KEdyYXBoTm9kZVByZWZpeCwgTmV4dE5vZGVJZCk7CisgICsrTmV4dE5vZGVJZDsKKworICB0aGlzLT5Xcml0ZU5vZGUodGhpcy0+R2xvYmFsRmlsZVN0cmVhbSwgaXRlbSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IGNtR3JhcGhWaXpXcml0ZXI6OkNyZWF0ZVRhcmdldEZpbGUoCisgIGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0sIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlTmFtZVN1ZmZpeCkKK3sKKyAgYXV0byBjb25zdCBwYXRoU2FmZUl0ZW1OYW1lID0gUGF0aFNhZmVTdHJpbmcoaXRlbS5Bc1N0cigpKTsKKyAgYXV0byBjb25zdCBwZXJUYXJnZXRGaWxlTmFtZSA9CisgICAgY21TdHJDYXQodGhpcy0+RmlsZU5hbWUsICcuJywgcGF0aFNhZmVJdGVtTmFtZSwgZmlsZU5hbWVTdWZmaXgpOworICBhdXRvIHBlclRhcmdldEZpbGVTdHJlYW0gPQorICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+KHBlclRhcmdldEZpbGVOYW1lKTsKKworICB0aGlzLT5Xcml0ZUhlYWRlcigqcGVyVGFyZ2V0RmlsZVN0cmVhbSwgaXRlbS5Bc1N0cigpKTsKKyAgdGhpcy0+V3JpdGVOb2RlKCpwZXJUYXJnZXRGaWxlU3RyZWFtLCBpdGVtKTsKKworICByZXR1cm4gcGVyVGFyZ2V0RmlsZVN0cmVhbTsKK30KKwordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpPbkRpcmVjdExpbmsoY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGVuY3lUeXBlIGR0KQoreworICB0aGlzLT5WaXNpdExpbmsoZGVwZW5kZXIsIGRlcGVuZGVlLCB0cnVlLCBHZXRFZGdlU3R5bGUoZHQpKTsKK30KKwordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpPbkluZGlyZWN0TGluayhjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZWUpCit7CisgIHRoaXMtPlZpc2l0TGluayhkZXBlbmRlciwgZGVwZW5kZWUsIGZhbHNlKTsKK30KKwordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpWaXNpdExpbmsoY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSwgYm9vbCBpc0RpcmVjdExpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgc2NvcGVUeXBlKQoreworICBpZiAodGhpcy0+SXRlbUV4Y2x1ZGVkKGRlcGVuZGVyKSB8fCB0aGlzLT5JdGVtRXhjbHVkZWQoZGVwZW5kZWUpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKCFpc0RpcmVjdExpbmspIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyB3cml0ZSBnbG9iYWwgZGF0YSBkaXJlY3RseQorICB0aGlzLT5Xcml0ZUNvbm5lY3Rpb24odGhpcy0+R2xvYmFsRmlsZVN0cmVhbSwgZGVwZW5kZXIsIGRlcGVuZGVlLCBzY29wZVR5cGUpOworCisgIGlmICh0aGlzLT5HZW5lcmF0ZVBlclRhcmdldCkgeworICAgIFBlclRhcmdldENvbm5lY3Rpb25zW2RlcGVuZGVyXS5lbXBsYWNlX2JhY2soZGVwZW5kZXIsIGRlcGVuZGVlLCBzY29wZVR5cGUpOworICB9CisKKyAgaWYgKHRoaXMtPkdlbmVyYXRlRGVwZW5kZXJzKSB7CisgICAgVGFyZ2V0RGVwZW5kZXJzQ29ubmVjdGlvbnNbZGVwZW5kZWVdLmVtcGxhY2VfYmFjayhkZXBlbmRlZSwgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZVR5cGUpOworICB9Cit9CisKIHZvaWQgY21HcmFwaFZpeldyaXRlcjo6UmVhZFNldHRpbmdzKAogICBjb25zdCBzdGQ6OnN0cmluZyYgc2V0dGluZ3NGaWxlTmFtZSwKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZhbGxiYWNrU2V0dGluZ3NGaWxlTmFtZSkKQEAgLTIwOCw3ICsyMzQsNiBAQAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9IHdoaWxlIChmYWxzZSkKIAotICBfX3NldF9pZl9zZXQodGhpcy0+R3JhcGhUeXBlLCAiR1JBUEhWSVpfR1JBUEhfVFlQRSIpOwogICBfX3NldF9pZl9zZXQodGhpcy0+R3JhcGhOYW1lLCAiR1JBUEhWSVpfR1JBUEhfTkFNRSIpOwogICBfX3NldF9pZl9zZXQodGhpcy0+R3JhcGhIZWFkZXIsICJHUkFQSFZJWl9HUkFQSF9IRUFERVIiKTsKICAgX19zZXRfaWZfc2V0KHRoaXMtPkdyYXBoTm9kZVByZWZpeCwgIkdSQVBIVklaX05PREVfUFJFRklYIik7CkBAIC0yMTcsNyArMjQyLDcgQEAKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IG1mLkdldERlZmluaXRpb24oY21ha2VEZWZpbml0aW9uKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICh2YXIpID0gbWYuSXNPbihjbWFrZURlZmluaXRpb24pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICh2YXIpID0gY21Jc09uKHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSAoZmFsc2UpCiAKQEAgLTIyNSw3ICsyNTAsMTAgQEAKICAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JTdGF0aWNMaWJzLCAiR1JBUEhWSVpfU1RBVElDX0xJQlMiKTsKICAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JTaGFyZWRMaWJzLCAiR1JBUEhWSVpfU0hBUkVEX0xJQlMiKTsKICAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JNb2R1bGVMaWJzLCAiR1JBUEhWSVpfTU9EVUxFX0xJQlMiKTsKLSAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JJbnRlcmZhY2UsICJHUkFQSFZJWl9JTlRFUkZBQ0UiKTsKKyAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JJbnRlcmZhY2VMaWJzLCAiR1JBUEhWSVpfSU5URVJGQUNFX0xJQlMiKTsKKyAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JPYmplY3RMaWJzLCAiR1JBUEhWSVpfT0JKRUNUX0xJQlMiKTsKKyAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVGb3JVbmtub3duTGlicywgIkdSQVBIVklaX1VOS05PV05fTElCUyIpOworICBfX3NldF9ib29sX2lmX3NldCh0aGlzLT5HZW5lcmF0ZUZvckN1c3RvbVRhcmdldHMsICJHUkFQSFZJWl9DVVNUT01fVEFSR0VUUyIpOwogICBfX3NldF9ib29sX2lmX3NldCh0aGlzLT5HZW5lcmF0ZUZvckV4dGVybmFscywgIkdSQVBIVklaX0VYVEVSTkFMX0xJQlMiKTsKICAgX19zZXRfYm9vbF9pZl9zZXQodGhpcy0+R2VuZXJhdGVQZXJUYXJnZXQsICJHUkFQSFZJWl9HRU5FUkFURV9QRVJfVEFSR0VUIik7CiAgIF9fc2V0X2Jvb2xfaWZfc2V0KHRoaXMtPkdlbmVyYXRlRGVwZW5kZXJzLCAiR1JBUEhWSVpfR0VORVJBVEVfREVQRU5ERVJTIik7CkBAIC0yNDgsMzI5ICsyNzYsMjQxIEBACiAgIH0KIH0KIAotLy8gSXRlcmF0ZSBvdmVyIGFsbCB0YXJnZXRzIGFuZCB3cml0ZSBmb3IgZWFjaCBvbmUgYSBncmFwaCB3aGljaCBzaG93cwotLy8gd2hpY2ggb3RoZXIgdGFyZ2V0cyBkZXBlbmQgb24gaXQuCi12b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlVGFyZ2V0RGVwZW5kZXJzRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKQordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpXcml0ZSgpCiB7Ci0gIGlmICghdGhpcy0+R2VuZXJhdGVEZXBlbmRlcnMpIHsKLSAgICByZXR1cm47Ci0gIH0KKyAgYXV0byBnZyA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvcjsKIAotICB0aGlzLT5Db2xsZWN0VGFyZ2V0c0FuZExpYnMoKTsKKyAgdGhpcy0+VmlzaXRHcmFwaChnZy0+R2V0TmFtZSgpKTsKIAotICBmb3IgKGF1dG8gY29uc3QmIHB0ciA6IHRoaXMtPlRhcmdldFB0cnMpIHsKLSAgICBpZiAocHRyLnNlY29uZCA9PSBudWxscHRyKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9CisgIC8vIFdlIHdhbnQgdG8gdHJhdmVyc2UgaW4gYSBkZXRlcm1pbmVkIG9yZGVyLCBzdWNoIHRoYXQgdGhlIG91dHB1dCBpcyBhbHdheXMKKyAgLy8gdGhlIHNhbWUgZm9yIGEgZ2l2ZW4gcHJvamVjdCAodGhpcyBtYWtlcyB0ZXN0cyByZXByb2R1Y2libGUsIGV0Yy4pCisgIHN0ZDo6c2V0PGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiwgY21HZW5lcmF0b3JUYXJnZXQ6OlN0cmljdFRhcmdldENvbXBhcmlzb24+CisgICAgc29ydGVkR2VuZXJhdG9yVGFyZ2V0czsKIAotICAgIGlmICghdGhpcy0+R2VuZXJhdGVGb3JUYXJnZXRUeXBlKHB0ci5zZWNvbmQtPkdldFR5cGUoKSkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIGN1cnJlbnRGaWxlbmFtZSA9Ci0gICAgICBjbVN0ckNhdChmaWxlTmFtZSwgJy4nLCBwdHIuZmlyc3QsICIuZGVwZW5kZXJzIik7Ci0KLSAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gc3RyKGN1cnJlbnRGaWxlbmFtZSk7Ci0gICAgaWYgKCFzdHIpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWRDb25uZWN0aW9uczsKLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWROb2RlczsKLQotICAgIHN0ZDo6Y291dCA8PCAiV3JpdGluZyAiIDw8IGN1cnJlbnRGaWxlbmFtZSA8PCAiLi4uIiA8PCBzdGQ6OmVuZGw7Ci0gICAgdGhpcy0+V3JpdGVIZWFkZXIoc3RyKTsKLQotICAgIHRoaXMtPldyaXRlRGVwZW5kZXJDb25uZWN0aW9ucyhwdHIuZmlyc3QsIGluc2VydGVkTm9kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0KLSAgICB0aGlzLT5Xcml0ZUZvb3RlcihzdHIpOwotICB9Ci19Ci0KLS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGFyZ2V0cyBhbmQgd3JpdGUgZm9yIGVhY2ggb25lIGEgZ3JhcGggd2hpY2ggc2hvd3MKLS8vIG9uIHdoaWNoIHRhcmdldHMgaXQgZGVwZW5kcy4KLXZvaWQgY21HcmFwaFZpeldyaXRlcjo6V3JpdGVQZXJUYXJnZXRGaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCi17Ci0gIGlmICghdGhpcy0+R2VuZXJhdGVQZXJUYXJnZXQpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICB0aGlzLT5Db2xsZWN0VGFyZ2V0c0FuZExpYnMoKTsKLQotICBmb3IgKGF1dG8gY29uc3QmIHB0ciA6IHRoaXMtPlRhcmdldFB0cnMpIHsKLSAgICBpZiAocHRyLnNlY29uZCA9PSBudWxscHRyKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXRoaXMtPkdlbmVyYXRlRm9yVGFyZ2V0VHlwZShwdHIuc2Vjb25kLT5HZXRUeXBlKCkpKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWRDb25uZWN0aW9uczsKLSAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWROb2RlczsKLQotICAgIHN0ZDo6c3RyaW5nIGN1cnJlbnRGaWxlbmFtZSA9IGNtU3RyQ2F0KGZpbGVOYW1lLCAnLicsIHB0ci5maXJzdCk7Ci0gICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIHN0cihjdXJyZW50RmlsZW5hbWUpOwotICAgIGlmICghc3RyKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RkOjpjb3V0IDw8ICJXcml0aW5nICIgPDwgY3VycmVudEZpbGVuYW1lIDw8ICIuLi4iIDw8IHN0ZDo6ZW5kbDsKLSAgICB0aGlzLT5Xcml0ZUhlYWRlcihzdHIpOwotCi0gICAgdGhpcy0+V3JpdGVDb25uZWN0aW9ucyhwdHIuZmlyc3QsIGluc2VydGVkTm9kZXMsIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0gICAgdGhpcy0+V3JpdGVGb290ZXIoc3RyKTsKLSAgfQotfQotCi12b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlR2xvYmFsRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpCi17Ci0gIHRoaXMtPkNvbGxlY3RUYXJnZXRzQW5kTGlicygpOwotCi0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBzdHIoZmlsZU5hbWUpOwotICBpZiAoIXN0cikgewotICAgIHJldHVybjsKLSAgfQotICB0aGlzLT5Xcml0ZUhlYWRlcihzdHIpOwotCi0gIHN0ZDo6Y291dCA8PCAiV3JpdGluZyAiIDw8IGZpbGVOYW1lIDw8ICIuLi4iIDw8IHN0ZDo6ZW5kbDsKLQotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gaW5zZXJ0ZWRDb25uZWN0aW9uczsKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGluc2VydGVkTm9kZXM7Ci0KLSAgZm9yIChhdXRvIGNvbnN0JiBwdHIgOiB0aGlzLT5UYXJnZXRQdHJzKSB7Ci0gICAgaWYgKHB0ci5zZWNvbmQgPT0gbnVsbHB0cikgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKCF0aGlzLT5HZW5lcmF0ZUZvclRhcmdldFR5cGUocHRyLnNlY29uZC0+R2V0VHlwZSgpKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgdGhpcy0+V3JpdGVDb25uZWN0aW9ucyhwdHIuZmlyc3QsIGluc2VydGVkTm9kZXMsIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0gIH0KLSAgdGhpcy0+V3JpdGVGb290ZXIoc3RyKTsKLX0KLQotdm9pZCBjbUdyYXBoVml6V3JpdGVyOjpXcml0ZUhlYWRlcihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3QKLXsKLSAgc3RyIDw8IHRoaXMtPkdyYXBoVHlwZSA8PCAiIFwiIiA8PCB0aGlzLT5HcmFwaE5hbWUgPDwgIlwiIHsiIDw8IHN0ZDo6ZW5kbDsKLSAgc3RyIDw8IHRoaXMtPkdyYXBoSGVhZGVyIDw8IHN0ZDo6ZW5kbDsKLX0KLQotdm9pZCBjbUdyYXBoVml6V3JpdGVyOjpXcml0ZUZvb3RlcihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3QKLXsKLSAgc3RyIDw8ICJ9IiA8PCBzdGQ6OmVuZGw7Ci19Ci0KLXZvaWQgY21HcmFwaFZpeldyaXRlcjo6V3JpdGVDb25uZWN0aW9ucygKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaW5zZXJ0ZWROb2RlcywKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBpbnNlcnRlZENvbm5lY3Rpb25zLCBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3QKLXsKLSAgYXV0byB0YXJnZXRQdHJJdCA9IHRoaXMtPlRhcmdldFB0cnMuZmluZCh0YXJnZXROYW1lKTsKLQotICBpZiAodGFyZ2V0UHRySXQgPT0gdGhpcy0+VGFyZ2V0UHRycy5lbmQoKSkgLy8gbm90IGZvdW5kIGF0IGFsbAotICB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgdGhpcy0+V3JpdGVOb2RlKHRhcmdldE5hbWUsIHRhcmdldFB0ckl0LT5zZWNvbmQsIGluc2VydGVkTm9kZXMsIHN0cik7Ci0KLSAgaWYgKHRhcmdldFB0ckl0LT5zZWNvbmQgPT0gbnVsbHB0cikgLy8gaXQncyBhbiBleHRlcm5hbCBsaWJyYXJ5Ci0gIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBzdGQ6OnN0cmluZyBteU5vZGVOYW1lID0gdGhpcy0+VGFyZ2V0TmFtZXNOb2Rlcy5maW5kKHRhcmdldE5hbWUpLT5zZWNvbmQ7Ci0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBMaW5rTGlicmFyeVNjb3BlVHlwZT4gbGwgPQotICAgIGdldFNjb3BlZExpbmtMaWJyYXJpZXNGcm9tVGFyZ2V0KHRhcmdldFB0ckl0LT5zZWNvbmQtPlRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWxHZW5lcmF0b3IpOwotCi0gIGZvciAoYXV0byBjb25zdCYgbGxpdCA6IGxsKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpYk5hbWUgPSBsbGl0LmZpcnN0OwotICAgIGF1dG8gbGliTmFtZUl0ID0gdGhpcy0+VGFyZ2V0TmFtZXNOb2Rlcy5maW5kKGxpYk5hbWUpOwotCi0gICAgLy8gY2FuIGhhcHBlbiBlLmcuIGlmIEdSQVBIVklaX1RBUkdFVF9JR05PUkVfUkVHRVggaXMgdXNlZAotICAgIGlmIChsaWJOYW1lSXQgPT0gdGhpcy0+VGFyZ2V0TmFtZXNOb2Rlcy5lbmQoKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgY29ubmVjdGlvbk5hbWUgPSBjbVN0ckNhdChteU5vZGVOYW1lLCAnLScsIGxpYk5hbWVJdC0+c2Vjb25kKTsKLSAgICBpZiAoaW5zZXJ0ZWRDb25uZWN0aW9ucy5maW5kKGNvbm5lY3Rpb25OYW1lKSA9PQotICAgICAgICBpbnNlcnRlZENvbm5lY3Rpb25zLmVuZCgpKSB7Ci0gICAgICBpbnNlcnRlZENvbm5lY3Rpb25zLmluc2VydChjb25uZWN0aW9uTmFtZSk7Ci0gICAgICB0aGlzLT5Xcml0ZU5vZGUobGliTmFtZSwgdGhpcy0+VGFyZ2V0UHRycy5maW5kKGxpYk5hbWUpLT5zZWNvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcywgc3RyKTsKLQotICAgICAgc3RyIDw8ICIgICAgXCIiIDw8IG15Tm9kZU5hbWUgPDwgIlwiIC0+IFwiIiA8PCBsaWJOYW1lSXQtPnNlY29uZCA8PCAiXCIiOwotCi0gICAgICBzdHIgPDwgZ2V0TGlua0xpYnJhcnlTdHlsZShsbGl0LnNlY29uZCk7Ci0KLSAgICAgIHN0ciA8PCAiIC8vICIgPDwgdGFyZ2V0TmFtZSA8PCAiIC0+ICIgPDwgbGliTmFtZSA8PCBzdGQ6OmVuZGw7Ci0gICAgICB0aGlzLT5Xcml0ZUNvbm5lY3Rpb25zKGxpYk5hbWUsIGluc2VydGVkTm9kZXMsIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgY21HcmFwaFZpeldyaXRlcjo6V3JpdGVEZXBlbmRlckNvbm5lY3Rpb25zKAotICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBpbnNlcnRlZE5vZGVzLAotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGluc2VydGVkQ29ubmVjdGlvbnMsIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgc3RyKSBjb25zdAotewotICBhdXRvIHRhcmdldFB0ckl0ID0gdGhpcy0+VGFyZ2V0UHRycy5maW5kKHRhcmdldE5hbWUpOwotCi0gIGlmICh0YXJnZXRQdHJJdCA9PSB0aGlzLT5UYXJnZXRQdHJzLmVuZCgpKSAvLyBub3QgZm91bmQgYXQgYWxsCi0gIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICB0aGlzLT5Xcml0ZU5vZGUodGFyZ2V0TmFtZSwgdGFyZ2V0UHRySXQtPnNlY29uZCwgaW5zZXJ0ZWROb2Rlcywgc3RyKTsKLQotICBpZiAodGFyZ2V0UHRySXQtPnNlY29uZCA9PSBudWxscHRyKSAvLyBpdCdzIGFuIGV4dGVybmFsIGxpYnJhcnkKLSAgewotICAgIHJldHVybjsKLSAgfQotCi0gIHN0ZDo6c3RyaW5nIG15Tm9kZU5hbWUgPSB0aGlzLT5UYXJnZXROYW1lc05vZGVzLmZpbmQodGFyZ2V0TmFtZSktPnNlY29uZDsKLQotICAvLyBub3cgc2VhcmNoIHdobyBsaW5rcyBhZ2FpbnN0IG1lCi0gIGZvciAoYXV0byBjb25zdCYgdHB0ciA6IHRoaXMtPlRhcmdldFB0cnMpIHsKLSAgICBpZiAodHB0ci5zZWNvbmQgPT0gbnVsbHB0cikgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKCF0aGlzLT5HZW5lcmF0ZUZvclRhcmdldFR5cGUodHB0ci5zZWNvbmQtPkdldFR5cGUoKSkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8vIE5vdyB3ZSBoYXZlIGEgdGFyZ2V0LCBjaGVjayB3aGV0aGVyIGl0IGxpbmtzIGFnYWluc3QgdGFyZ2V0TmFtZS4KLSAgICAvLyBJZiBzbywgZHJhdyBhIGNvbm5lY3Rpb24sIGFuZCB0aGVuIGNvbnRpbnVlIHdpdGggZGVwZW5kZXJzIG9uIHRoYXQgb25lLgotICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBMaW5rTGlicmFyeVNjb3BlVHlwZT4gbGwgPQotICAgICAgZ2V0U2NvcGVkTGlua0xpYnJhcmllc0Zyb21UYXJnZXQodHB0ci5zZWNvbmQtPlRhcmdldCwgR2xvYmFsR2VuZXJhdG9yKTsKLQotICAgIGZvciAoYXV0byBjb25zdCYgbGxpdCA6IGxsKSB7Ci0gICAgICBpZiAobGxpdC5maXJzdCA9PSB0YXJnZXROYW1lKSB7Ci0gICAgICAgIC8vIFNvIHRoaXMgdGFyZ2V0IGxpbmtzIGFnYWluc3QgdGFyZ2V0TmFtZS4KLSAgICAgICAgYXV0byBkZXBlbmRlck5vZGVOYW1lSXQgPSB0aGlzLT5UYXJnZXROYW1lc05vZGVzLmZpbmQodHB0ci5maXJzdCk7Ci0KLSAgICAgICAgaWYgKGRlcGVuZGVyTm9kZU5hbWVJdCAhPSB0aGlzLT5UYXJnZXROYW1lc05vZGVzLmVuZCgpKSB7Ci0gICAgICAgICAgc3RkOjpzdHJpbmcgY29ubmVjdGlvbk5hbWUgPQotICAgICAgICAgICAgY21TdHJDYXQoZGVwZW5kZXJOb2RlTmFtZUl0LT5zZWNvbmQsICctJywgbXlOb2RlTmFtZSk7Ci0KLSAgICAgICAgICBpZiAoaW5zZXJ0ZWRDb25uZWN0aW9ucy5maW5kKGNvbm5lY3Rpb25OYW1lKSA9PQotICAgICAgICAgICAgICBpbnNlcnRlZENvbm5lY3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgICAgICBpbnNlcnRlZENvbm5lY3Rpb25zLmluc2VydChjb25uZWN0aW9uTmFtZSk7Ci0gICAgICAgICAgICB0aGlzLT5Xcml0ZU5vZGUodHB0ci5maXJzdCwgdHB0ci5zZWNvbmQsIGluc2VydGVkTm9kZXMsIHN0cik7Ci0KLSAgICAgICAgICAgIHN0ciA8PCAiICAgIFwiIiA8PCBkZXBlbmRlck5vZGVOYW1lSXQtPnNlY29uZCA8PCAiXCIgLT4gXCIiCi0gICAgICAgICAgICAgICAgPDwgbXlOb2RlTmFtZSA8PCAiXCIiOwotICAgICAgICAgICAgc3RyIDw8ICIgLy8gIiA8PCB0YXJnZXROYW1lIDw8ICIgLT4gIiA8PCB0cHRyLmZpcnN0IDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgICAgIHN0ciA8PCBnZXRMaW5rTGlicmFyeVN0eWxlKGxsaXQuc2Vjb25kKTsKLSAgICAgICAgICAgIHRoaXMtPldyaXRlRGVwZW5kZXJDb25uZWN0aW9ucyh0cHRyLmZpcnN0LCBpbnNlcnRlZE5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkQ29ubmVjdGlvbnMsIHN0cik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICBmb3IgKGNvbnN0IGF1dG8mIGxnIDogZ2ctPkdldExvY2FsR2VuZXJhdG9ycygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBndCA6IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICAgIC8vIFJlc2VydmVkIHRhcmdldHMgaGF2ZSBpbmNvbnNpc3RlbnQgbmFtZXMgYWNyb3NzIHBsYXRmb3JtcyAoZS5nLiAnYWxsJworICAgICAgLy8gdnMuICdBTExfQlVJTEQnKSwgd2hpY2ggY2FuIGRpc3J1cHQgdGhlIHRyYXZlcnNhbCBvcmRlcmluZy4KKyAgICAgIC8vIFdlIGRvbid0IG5lZWQgb3Igd2FudCB0aGVtIGFueXdheS4KKyAgICAgIGlmICghY21HbG9iYWxHZW5lcmF0b3I6OklzUmVzZXJ2ZWRUYXJnZXQoZ3QtPkdldE5hbWUoKSkpIHsKKyAgICAgICAgc29ydGVkR2VuZXJhdG9yVGFyZ2V0cy5pbnNlcnQoZ3QuZ2V0KCkpOwogICAgICAgfQogICAgIH0KICAgfQotfQogCi12b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlTm9kZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGluc2VydGVkTm9kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIHN0cikgY29uc3QKLXsKLSAgaWYgKGluc2VydGVkTm9kZXMuZmluZCh0YXJnZXROYW1lKSA9PSBpbnNlcnRlZE5vZGVzLmVuZCgpKSB7Ci0gICAgaW5zZXJ0ZWROb2Rlcy5pbnNlcnQodGFyZ2V0TmFtZSk7Ci0gICAgYXV0byBuYW1lSXQgPSB0aGlzLT5UYXJnZXROYW1lc05vZGVzLmZpbmQodGFyZ2V0TmFtZSk7CisgIC8vIHdyaXRlIGdsb2JhbCBkYXRhIGFuZCBjb2xsZWN0IGFsbCBjb25uZWN0aW9uIGRhdGEgZm9yIHBlciB0YXJnZXQgZ3JhcGhzCisgIGZvciAoYXV0byBjb25zdCBndCA6IHNvcnRlZEdlbmVyYXRvclRhcmdldHMpIHsKKyAgICBhdXRvIGl0ZW0gPSBjbUxpbmtJdGVtKGd0LCBmYWxzZSwgZ3QtPkdldEJhY2t0cmFjZSgpKTsKKyAgICB0aGlzLT5WaXNpdEl0ZW0oaXRlbSk7CisgIH0KIAotICAgIHN0ciA8PCAiICAgIFwiIiA8PCBuYW1lSXQtPnNlY29uZCA8PCAiXCIgWyBsYWJlbD1cIiIgPDwgdGFyZ2V0TmFtZQotICAgICAgICA8PCAiXCIgc2hhcGU9XCIiIDw8IGdldFNoYXBlRm9yVGFyZ2V0KHRhcmdldCkgPDwgIlwiXTsiIDw8IHN0ZDo6ZW5kbDsKKyAgaWYgKHRoaXMtPkdlbmVyYXRlUGVyVGFyZ2V0KSB7CisgICAgV3JpdGVQZXJUYXJnZXRDb25uZWN0aW9uczxEZXBlbmRlZXNEaXI+KFBlclRhcmdldENvbm5lY3Rpb25zKTsKKyAgfQorCisgIGlmICh0aGlzLT5HZW5lcmF0ZURlcGVuZGVycykgeworICAgIFdyaXRlUGVyVGFyZ2V0Q29ubmVjdGlvbnM8RGVwZW5kZXJzRGlyPihUYXJnZXREZXBlbmRlcnNDb25uZWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5kZXBlbmRlcnMiKTsKICAgfQogfQogCi12b2lkIGNtR3JhcGhWaXpXcml0ZXI6OkNvbGxlY3RUYXJnZXRzQW5kTGlicygpCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OkZpbmRBbGxDb25uZWN0aW9ucyhjb25zdCBDb25uZWN0aW9uc01hcCYgY29ubmVjdGlvbk1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTGlua0l0ZW0mIHJvb3RJdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbnMmIGV4dGVuZGVkQ29ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PGNtTGlua0l0ZW0+JiB2aXNpdGVkSXRlbXMpCiB7Ci0gIGlmICghdGhpcy0+SGF2ZVRhcmdldHNBbmRMaWJzKSB7Ci0gICAgdGhpcy0+SGF2ZVRhcmdldHNBbmRMaWJzID0gdHJ1ZTsKLSAgICBpbnQgY250ID0gdGhpcy0+Q29sbGVjdEFsbFRhcmdldHMoKTsKLSAgICBpZiAodGhpcy0+R2VuZXJhdGVGb3JFeHRlcm5hbHMpIHsKLSAgICAgIHRoaXMtPkNvbGxlY3RBbGxFeHRlcm5hbExpYnMoY250KTsKKyAgLy8gc29tZSAidGFyZ2V0cyIgYXJlIG5vdCBpbiBtYXAsIGUuZy4gbGlua2VyIGZsYWdzIGFzIC1sbSBvcgorICAvLyB0YXJnZXRzIHdpdGhvdXQgZGVwZW5kZW5jeS4KKyAgLy8gaW4gYm90aCBjYXNlcyB3ZSBhcmUgZmluaXNoZWQgd2l0aCB0cmF2ZXJzaW5nIHRoZSBncmFwaAorICBpZiAoY29ubmVjdGlvbk1hcC5maW5kKHJvb3RJdGVtKSA9PSBjb25uZWN0aW9uTWFwLmNlbmQoKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGNvbnN0IENvbm5lY3Rpb25zJiBvcmlnQ29ucyA9IGNvbm5lY3Rpb25NYXAuYXQocm9vdEl0ZW0pOworCisgIGZvciAoY29uc3QgQ29ubmVjdGlvbiYgY29uIDogb3JpZ0NvbnMpIHsKKyAgICBleHRlbmRlZENvbnMuZW1wbGFjZV9iYWNrKGNvbik7CisgICAgY29uc3QgY21MaW5rSXRlbSYgZHN0SXRlbSA9IGNvbi5kc3Q7CisgICAgYm9vbCBjb25zdCB2aXNpdGVkID0gdmlzaXRlZEl0ZW1zLmZpbmQoZHN0SXRlbSkgIT0gdmlzaXRlZEl0ZW1zLmNlbmQoKTsKKyAgICBpZiAoIXZpc2l0ZWQpIHsKKyAgICAgIHZpc2l0ZWRJdGVtcy5pbnNlcnQoZHN0SXRlbSk7CisgICAgICBGaW5kQWxsQ29ubmVjdGlvbnMoY29ubmVjdGlvbk1hcCwgZHN0SXRlbSwgZXh0ZW5kZWRDb25zLCB2aXNpdGVkSXRlbXMpOwogICAgIH0KICAgfQogfQogCi1pbnQgY21HcmFwaFZpeldyaXRlcjo6Q29sbGVjdEFsbFRhcmdldHMoKQordm9pZCBjbUdyYXBoVml6V3JpdGVyOjpGaW5kQWxsQ29ubmVjdGlvbnMoY29uc3QgQ29ubmVjdGlvbnNNYXAmIGNvbm5lY3Rpb25NYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpbmtJdGVtJiByb290SXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25zJiBleHRlbmRlZENvbnMpCiB7Ci0gIGludCBjbnQgPSAwOwotICAvLyBGaXJzdCBwYXNzIGdldCB0aGUgbGlzdCBvZiBhbGwgY21ha2UgdGFyZ2V0cwotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlYWxUYXJnZXROYW1lID0gdGFyZ2V0LT5HZXROYW1lKCk7Ci0gICAgICBpZiAodGhpcy0+SWdub3JlVGhpc1RhcmdldChyZWFsVGFyZ2V0TmFtZSkpIHsKLSAgICAgICAgLy8gU2tpcCBpZ25vcmVkIHRhcmdldHMKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICAvLyBzdGQ6OmNvdXQgPDwgIkZvdW5kIHRhcmdldDogIiA8PCB0aXQtPmZpcnN0IDw8IHN0ZDo6ZW5kbDsKLSAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3RyOwotICAgICAgb3N0ciA8PCB0aGlzLT5HcmFwaE5vZGVQcmVmaXggPDwgY250Kys7Ci0gICAgICB0aGlzLT5UYXJnZXROYW1lc05vZGVzW3JlYWxUYXJnZXROYW1lXSA9IG9zdHIuc3RyKCk7Ci0gICAgICB0aGlzLT5UYXJnZXRQdHJzW3JlYWxUYXJnZXROYW1lXSA9IHRhcmdldDsKKyAgc3RkOjpzZXQ8Y21MaW5rSXRlbT4gdmlzaXRlZEl0ZW1zID0geyByb290SXRlbSB9OworICBGaW5kQWxsQ29ubmVjdGlvbnMoY29ubmVjdGlvbk1hcCwgcm9vdEl0ZW0sIGV4dGVuZGVkQ29ucywgdmlzaXRlZEl0ZW1zKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERpckZ1bmM+Cit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlUGVyVGFyZ2V0Q29ubmVjdGlvbnMoCisgIGNvbnN0IENvbm5lY3Rpb25zTWFwJiBjb25uZWN0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lU3VmZml4KQoreworICAvLyB0aGUgcGVyIHRhcmdldCBjb25uZWN0aW9ucyBtdXN0IGJlIGV4dGVuZGVkIGJ5IGluZGlyZWN0IGRlcGVuZGVuY2llcworICBDb25uZWN0aW9uc01hcCBleHRlbmRlZENvbm5lY3Rpb25zOworICBmb3IgKGF1dG8gY29uc3QmIGNvblBlclRhcmdldCA6IGNvbm5lY3Rpb25zKSB7CisgICAgY29uc3QgY21MaW5rSXRlbSYgcm9vdEl0ZW0gPSBjb25QZXJUYXJnZXQuZmlyc3Q7CisgICAgQ29ubmVjdGlvbnMmIGV4dGVuZGVkQ29ucyA9IGV4dGVuZGVkQ29ubmVjdGlvbnNbY29uUGVyVGFyZ2V0LmZpcnN0XTsKKyAgICBGaW5kQWxsQ29ubmVjdGlvbnMoY29ubmVjdGlvbnMsIHJvb3RJdGVtLCBleHRlbmRlZENvbnMpOworICB9CisKKyAgZm9yIChhdXRvIGNvbnN0JiBjb25QZXJUYXJnZXQgOiBleHRlbmRlZENvbm5lY3Rpb25zKSB7CisgICAgY29uc3QgY21MaW5rSXRlbSYgcm9vdEl0ZW0gPSBjb25QZXJUYXJnZXQuZmlyc3Q7CisKKyAgICAvLyBzb21lIG9mIHRoZSBub2RlcyBhcmUgZXhjbHVkZWQgY29tcGxldGVseSBhbmQgYXJlIG5vdCB3cml0dGVuCisgICAgaWYgKHRoaXMtPkl0ZW1FeGNsdWRlZChyb290SXRlbSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGNvbnN0IENvbm5lY3Rpb25zJiBjb25zID0gY29uUGVyVGFyZ2V0LnNlY29uZDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IGZpbGVTdHJlYW0gPQorICAgICAgdGhpcy0+Q3JlYXRlVGFyZ2V0RmlsZShyb290SXRlbSwgZmlsZU5hbWVTdWZmaXgpOworCisgICAgZm9yIChjb25zdCBDb25uZWN0aW9uJiBjb24gOiBjb25zKSB7CisgICAgICBjb25zdCBjbUxpbmtJdGVtJiBzcmMgPSBEaXJGdW5jOjpzcmMoY29uKTsKKyAgICAgIGNvbnN0IGNtTGlua0l0ZW0mIGRzdCA9IERpckZ1bmM6OmRzdChjb24pOworICAgICAgdGhpcy0+V3JpdGVOb2RlKCpmaWxlU3RyZWFtLCBjb24uZHN0KTsKKyAgICAgIHRoaXMtPldyaXRlQ29ubmVjdGlvbigqZmlsZVN0cmVhbSwgc3JjLCBkc3QsIGNvbi5zY29wZVR5cGUpOworICAgIH0KKworICAgIHRoaXMtPldyaXRlRm9vdGVyKCpmaWxlU3RyZWFtKTsKKyAgfQorfQorCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlSGVhZGVyKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQoreworICBhdXRvIGNvbnN0IGVzY2FwZWRHcmFwaE5hbWUgPSBFc2NhcGVGb3JEb3RGaWxlKG5hbWUpOworICBmcyA8PCAiZGlncmFwaCBcIiIgPDwgZXNjYXBlZEdyYXBoTmFtZSA8PCAiXCIge1xuIgorICAgICA8PCB0aGlzLT5HcmFwaEhlYWRlciA8PCAnXG4nOworfQorCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlRm9vdGVyKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMpCit7CisgIGZzIDw8ICJ9XG4iOworfQorCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlTGVnZW5kKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMpCit7CisgIC8vIE5vdGUgdGhhdCB0aGUgc3ViZ3JhcGggbmFtZSBtdXN0IHN0YXJ0IHdpdGggImNsdXN0ZXIiLCBhcyBkb25lIGhlcmUsIHRvCisgIC8vIG1ha2UgR3JhcGh2aXogbGF5b3V0IGVuZ2luZXMgZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBrZWVwIHRoZSBub2RlcworICAvLyB0b2dldGhlci4KKyAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICBmcyA8PCAic3ViZ3JhcGggY2x1c3RlckxlZ2VuZCB7XG4iCisgICAgICAgICIgIGxhYmVsID0gXCJMZWdlbmRcIjtcbiIKKyAgICAgICAgLy8gU2V0IHRoZSBjb2xvciBvZiB0aGUgYm94IHN1cnJvdW5kaW5nIHRoZSBsZWdlbmQuCisgICAgICAgICIgIGNvbG9yID0gYmxhY2s7XG4iCisgICAgICAgIC8vIFdlIHVzZSBpbnZpc2libGUgZWRnZXMganVzdCB0byBlbmZvcmNlIHRoZSBsYXlvdXQuCisgICAgICAgICIgIGVkZ2UgWyBzdHlsZSA9IGludmlzIF07XG4iCisgICAgICAgIC8vIE5vZGVzLgorICAgICAgICAiICBsZWdlbmROb2RlMCBbIGxhYmVsID0gXCJFeGVjdXRhYmxlXCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0VYRUNVVEFCTEUgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlMSBbIGxhYmVsID0gXCJTdGF0aWMgTGlicmFyeVwiLCBzaGFwZSA9ICIKKyAgICAgPDwgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX1NUQVRJQyA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSBcIlNoYXJlZCBMaWJyYXJ5XCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfU0hBUkVEIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9IFwiTW9kdWxlIExpYnJhcnlcIiwgc2hhcGUgPSAiCisgICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfTElCUkFSWV9NT0RVTEUgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlNCBbIGxhYmVsID0gXCJJbnRlcmZhY2UgTGlicmFyeVwiLCBzaGFwZSA9ICIKKyAgICAgPDwgR1JBUEhWSVpfTk9ERV9TSEFQRV9MSUJSQVJZX0lOVEVSRkFDRSA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSBcIk9iamVjdCBMaWJyYXJ5XCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfT0JKRUNUIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTYgWyBsYWJlbCA9IFwiVW5rbm93biBMaWJyYXJ5XCIsIHNoYXBlID0gIgorICAgICA8PCBHUkFQSFZJWl9OT0RFX1NIQVBFX0xJQlJBUllfVU5LTk9XTiA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGU3IFsgbGFiZWwgPSBcIkN1c3RvbSBUYXJnZXRcIiwgc2hhcGUgPSAiCisgICAgIDw8IEdSQVBIVklaX05PREVfU0hBUEVfVVRJTElUWSA8PCAiIF07XG4iCisgICAgICAgIC8vIEVkZ2VzLgorICAgICAgICAvLyBTb21lIG9mIHRob3NlIGFyZSBkdW1teSAoaW52aXNpYmxlKSBlZGdlcyB0byBlbmZvcmNlIGEgbGF5b3V0LgorICAgICAgICAiICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gIgorICAgICA8PCBHUkFQSFZJWl9FREdFX1NUWUxFX1BVQkxJQyA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSAiCisgICAgIDw8IEdSQVBIVklaX0VER0VfU1RZTEVfUFVCTElDIDw8ICIgXTtcbiIKKyAgICAgICAgIiAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTM7XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUxIC0+IGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSBcIkludGVyZmFjZVwiLCBzdHlsZSA9ICIKKyAgICAgPDwgR1JBUEhWSVpfRURHRV9TVFlMRV9JTlRFUkZBQ0UgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gXCJQcml2YXRlXCIsIHN0eWxlID0gIgorICAgICA8PCBHUkFQSFZJWl9FREdFX1NUWUxFX1BSSVZBVEUgPDwgIiBdO1xuIgorICAgICAgICAiICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gIgorICAgICA8PCBHUkFQSFZJWl9FREdFX1NUWUxFX1BVQkxJQyA8PCAiIF07XG4iCisgICAgICAgICIgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGU3O1xuIgorICAgICAgICAifVxuIjsKKyAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworfQorCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlTm9kZShjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgaXRlbSkKK3sKKyAgYXV0byBjb25zdCYgaXRlbU5hbWUgPSBpdGVtLkFzU3RyKCk7CisgIGF1dG8gY29uc3QmIG5vZGVOYW1lID0gdGhpcy0+Tm9kZU5hbWVzW2l0ZW1OYW1lXTsKKworICBhdXRvIGNvbnN0IGl0ZW1OYW1lV2l0aEFsaWFzZXMgPSBJdGVtTmFtZVdpdGhBbGlhc2VzKGl0ZW1OYW1lKTsKKyAgYXV0byBjb25zdCBlc2NhcGVkTGFiZWwgPSBFc2NhcGVGb3JEb3RGaWxlKGl0ZW1OYW1lV2l0aEFsaWFzZXMpOworCisgIGZzIDw8ICIgICAgXCIiIDw8IG5vZGVOYW1lIDw8ICJcIiBbIGxhYmVsID0gXCIiIDw8IGVzY2FwZWRMYWJlbAorICAgICA8PCAiXCIsIHNoYXBlID0gIiA8PCBnZXRTaGFwZUZvclRhcmdldChpdGVtKSA8PCAiIF07XG4iOworfQorCit2b2lkIGNtR3JhcGhWaXpXcml0ZXI6OldyaXRlQ29ubmVjdGlvbihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBlZGdlU3R5bGUpCit7CisgIGF1dG8gY29uc3QmIGRlcGVuZGVyTmFtZSA9IGRlcGVuZGVyLkFzU3RyKCk7CisgIGF1dG8gY29uc3QmIGRlcGVuZGVlTmFtZSA9IGRlcGVuZGVlLkFzU3RyKCk7CisKKyAgZnMgPDwgIiAgICBcIiIgPDwgdGhpcy0+Tm9kZU5hbWVzW2RlcGVuZGVyTmFtZV0gPDwgIlwiIC0+IFwiIgorICAgICA8PCB0aGlzLT5Ob2RlTmFtZXNbZGVwZW5kZWVOYW1lXSA8PCAiXCIgIgorICAgICA8PCBlZGdlU3R5bGUKKyAgICAgPDwgIiAvLyAiIDw8IGRlcGVuZGVyTmFtZSA8PCAiIC0+ICIgPDwgZGVwZW5kZWVOYW1lIDw8ICdcbic7Cit9CisKK2Jvb2wgY21HcmFwaFZpeldyaXRlcjo6SXRlbUV4Y2x1ZGVkKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0pCit7CisgIGF1dG8gY29uc3QgaXRlbU5hbWUgPSBpdGVtLkFzU3RyKCk7CisKKyAgaWYgKHRoaXMtPkl0ZW1OYW1lRmlsdGVyZWRPdXQoaXRlbU5hbWUpKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBpZiAoaXRlbS5UYXJnZXQgPT0gbnVsbHB0cikgeworICAgIHJldHVybiAhdGhpcy0+R2VuZXJhdGVGb3JFeHRlcm5hbHM7CisgIH0KKworICBpZiAoaXRlbS5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGl0ZW1OYW1lLCAiTmlnaHRseSIpIHx8CisgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChpdGVtTmFtZSwgIkNvbnRpbnVvdXMiKSB8fAorICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgoaXRlbU5hbWUsICJFeHBlcmltZW50YWwiKSkgeworICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CiAKLSAgcmV0dXJuIGNudDsKLX0KLQotaW50IGNtR3JhcGhWaXpXcml0ZXI6OkNvbGxlY3RBbGxFeHRlcm5hbExpYnMoaW50IGNudCkKLXsKLSAgLy8gT2ssIG5vdyBmaW5kIGFsbCB0aGUgc3R1ZmYgd2UgbGluayB0byB0aGF0IGlzIG5vdCBpbiBjbWFrZQotICBmb3IgKGNtTG9jYWxHZW5lcmF0b3IqIGxnIDogdGhpcy0+TG9jYWxHZW5lcmF0b3JzKSB7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGFyZ2V0cyA9IGxnLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGFyZ2V0cykgewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlYWxUYXJnZXROYW1lID0gdGFyZ2V0LT5HZXROYW1lKCk7Ci0gICAgICBpZiAodGhpcy0+SWdub3JlVGhpc1RhcmdldChyZWFsVGFyZ2V0TmFtZSkpIHsKLSAgICAgICAgLy8gU2tpcCBpZ25vcmVkIHRhcmdldHMKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBjb25zdCBjbVRhcmdldDo6TGlua0xpYnJhcnlWZWN0b3JUeXBlKiBsbCA9Ci0gICAgICAgICYodGFyZ2V0LT5UYXJnZXQtPkdldE9yaWdpbmFsTGlua0xpYnJhcmllcygpKTsKLSAgICAgIGZvciAoYXV0byBjb25zdCYgbGxpdCA6ICpsbCkgewotICAgICAgICBzdGQ6OnN0cmluZyBsaWJOYW1lID0gbGxpdC5maXJzdDsKLSAgICAgICAgaWYgKHRoaXMtPklnbm9yZVRoaXNUYXJnZXQobGliTmFtZSkpIHsKLSAgICAgICAgICAvLyBTa2lwIGlnbm9yZWQgdGFyZ2V0cwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEdsb2JhbEdlbmVyYXRvci0+SXNBbGlhcyhsaWJOYW1lKSkgewotICAgICAgICAgIGNvbnN0IGF1dG8gdGd0ID0gR2xvYmFsR2VuZXJhdG9yLT5GaW5kVGFyZ2V0KGxpYk5hbWUpOwotICAgICAgICAgIGlmICh0Z3QpIHsKLSAgICAgICAgICAgIGxpYk5hbWUgPSB0Z3QtPkdldE5hbWUoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHRhckl0ID0gdGhpcy0+VGFyZ2V0UHRycy5maW5kKGxpYk5hbWUpOwotICAgICAgICBpZiAodGFySXQgPT0gdGhpcy0+VGFyZ2V0UHRycy5lbmQoKSkgewotICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3RyOwotICAgICAgICAgIG9zdHIgPDwgdGhpcy0+R3JhcGhOb2RlUHJlZml4IDw8IGNudCsrOwotICAgICAgICAgIHRoaXMtPlRhcmdldE5hbWVzTm9kZXNbbGliTmFtZV0gPSBvc3RyLnN0cigpOwotICAgICAgICAgIHRoaXMtPlRhcmdldFB0cnNbbGliTmFtZV0gPSBudWxscHRyOwotICAgICAgICAgIC8vIHN0ciA8PCAiICAgIFwiIiA8PCBvc3RyIDw8ICJcIiBbIGxhYmVsPVwiIiA8PCBsaWJOYW1lCi0gICAgICAgICAgLy8gPDwgICJcIiBzaGFwZT1cImVsbGlwc2VcIl07IiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9CisgIGlmIChpdGVtLlRhcmdldC0+SXNJbXBvcnRlZCgpICYmICF0aGlzLT5HZW5lcmF0ZUZvckV4dGVybmFscykgeworICAgIHJldHVybiB0cnVlOwogICB9Ci0gIHJldHVybiBjbnQ7CisKKyAgcmV0dXJuICF0aGlzLT5UYXJnZXRUeXBlRW5hYmxlZChpdGVtLlRhcmdldC0+R2V0VHlwZSgpKTsKIH0KIAotYm9vbCBjbUdyYXBoVml6V3JpdGVyOjpJZ25vcmVUaGlzVGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQorYm9vbCBjbUdyYXBoVml6V3JpdGVyOjpJdGVtTmFtZUZpbHRlcmVkT3V0KHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtTmFtZSkKIHsKKyAgaWYgKGl0ZW1OYW1lID09ICI+IikgeworICAgIC8vIEZJWE1FOiB3aHkgZG8gd2UgZXZlbiByZWNlaXZlIHN1Y2ggYSB0YXJnZXQgaGVyZT8KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlmIChjbUdsb2JhbEdlbmVyYXRvcjo6SXNSZXNlcnZlZFRhcmdldChpdGVtTmFtZSkpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCiAgIGZvciAoY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uJiByZWdFeCA6IHRoaXMtPlRhcmdldHNUb0lnbm9yZVJlZ2V4KSB7CiAgICAgaWYgKHJlZ0V4LmlzX3ZhbGlkKCkpIHsKLSAgICAgIGlmIChyZWdFeC5maW5kKG5hbWUpKSB7CisgICAgICBpZiAocmVnRXguZmluZChpdGVtTmFtZSkpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAgfQpAQCAtNTc5LDcgKzUxOSw3IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBjbUdyYXBoVml6V3JpdGVyOjpHZW5lcmF0ZUZvclRhcmdldFR5cGUoCitib29sIGNtR3JhcGhWaXpXcml0ZXI6OlRhcmdldFR5cGVFbmFibGVkKAogICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSkgY29uc3QKIHsKICAgc3dpdGNoICh0YXJnZXRUeXBlKSB7CkBAIC01OTIsOSArNTMyLDczIEBACiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOgogICAgICAgcmV0dXJuIHRoaXMtPkdlbmVyYXRlRm9yTW9kdWxlTGliczsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlk6Ci0gICAgICByZXR1cm4gdGhpcy0+R2VuZXJhdGVGb3JJbnRlcmZhY2U7CisgICAgICByZXR1cm4gdGhpcy0+R2VuZXJhdGVGb3JJbnRlcmZhY2VMaWJzOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWToKKyAgICAgIHJldHVybiB0aGlzLT5HZW5lcmF0ZUZvck9iamVjdExpYnM7CisgICAgY2FzZSBjbVN0YXRlRW51bXM6OlVOS05PV05fTElCUkFSWToKKyAgICAgIHJldHVybiB0aGlzLT5HZW5lcmF0ZUZvclVua25vd25MaWJzOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgorICAgICAgcmV0dXJuIHRoaXMtPkdlbmVyYXRlRm9yQ3VzdG9tVGFyZ2V0czsKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVDoKKyAgICAgIC8vIEJ1aWx0LWluIHRhcmdldHMgbGlrZSBlZGl0X2NhY2hlLCBldGMuCisgICAgICAvLyBXZSBkb24ndCBuZWVkL3dhbnQgdGhvc2UgaW4gdGhlIGRvdCBmaWxlLgorICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgfQogICByZXR1cm4gZmFsc2U7CiB9CisKK3N0ZDo6c3RyaW5nIGNtR3JhcGhWaXpXcml0ZXI6Okl0ZW1OYW1lV2l0aEFsaWFzZXMoCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtTmFtZSkgY29uc3QKK3sKKyAgYXV0byBuYW1lV2l0aEFsaWFzZXMgPSBpdGVtTmFtZTsKKworICBmb3IgKGF1dG8gY29uc3QmIGxnIDogdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMb2NhbEdlbmVyYXRvcnMoKSkgeworICAgIGZvciAoYXV0byBjb25zdCYgYWxpYXNUYXJnZXRzIDogbGctPkdldE1ha2VmaWxlKCktPkdldEFsaWFzVGFyZ2V0cygpKSB7CisgICAgICBpZiAoYWxpYXNUYXJnZXRzLnNlY29uZCA9PSBpdGVtTmFtZSkgeworICAgICAgICBuYW1lV2l0aEFsaWFzZXMgKz0gIlxcbigiICsgYWxpYXNUYXJnZXRzLmZpcnN0ICsgIikiOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBuYW1lV2l0aEFsaWFzZXM7Cit9CisKK3N0ZDo6c3RyaW5nIGNtR3JhcGhWaXpXcml0ZXI6OkdldEVkZ2VTdHlsZShEZXBlbmRlbmN5VHlwZSBkdCkKK3sKKyAgc3RkOjpzdHJpbmcgc3R5bGU7CisgIHN3aXRjaCAoZHQpIHsKKyAgICBjYXNlIERlcGVuZGVuY3lUeXBlOjpMaW5rUHJpdmF0ZToKKyAgICAgIHN0eWxlID0gIlsgc3R5bGUgPSAiICsgc3RkOjpzdHJpbmcoR1JBUEhWSVpfRURHRV9TVFlMRV9QUklWQVRFKSArICIgXSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIERlcGVuZGVuY3lUeXBlOjpMaW5rSW50ZXJmYWNlOgorICAgICAgc3R5bGUgPSAiWyBzdHlsZSA9ICIgKyBzdGQ6OnN0cmluZyhHUkFQSFZJWl9FREdFX1NUWUxFX0lOVEVSRkFDRSkgKyAiIF0iOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisgIHJldHVybiBzdHlsZTsKK30KKworc3RkOjpzdHJpbmcgY21HcmFwaFZpeldyaXRlcjo6RXNjYXBlRm9yRG90RmlsZShzdGQ6OnN0cmluZyBjb25zdCYgc3RyKQoreworICByZXR1cm4gY21TeXN0ZW1Ub29sczo6RXNjYXBlQ2hhcnMoc3RyLmRhdGEoKSwgIlwiIik7Cit9CisKK3N0ZDo6c3RyaW5nIGNtR3JhcGhWaXpXcml0ZXI6OlBhdGhTYWZlU3RyaW5nKHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIpCit7CisgIHN0ZDo6c3RyaW5nIHBhdGhTYWZlU3RyOworCisgIC8vIFdlJ2xsIG9ubHkga2VlcCBhbHBoYW51bWVyaWNhbCBjaGFyYWN0ZXJzLCBwbHVzIHRoZSBmb2xsb3dpbmcgb25lcyB0aGF0CisgIC8vIGFyZSBjb21tb24sIGFuZCBzYWZlIG9uIGFsbCBwbGF0Zm9ybXM6CisgIGF1dG8gY29uc3QgZXh0cmFfY2hhcnMgPSBzdGQ6OnNldDxjaGFyPnsgJy4nLCAnLScsICdfJyB9OworCisgIGZvciAoY2hhciBjIDogc3RyKSB7CisgICAgaWYgKHN0ZDo6aXNhbG51bShjKSB8fCBleHRyYV9jaGFycy5maW5kKGMpICE9IGV4dHJhX2NoYXJzLmNlbmQoKSkgeworICAgICAgcGF0aFNhZmVTdHIgKz0gYzsKKyAgICB9CisgIH0KKworICByZXR1cm4gcGF0aFNhZmVTdHI7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21HcmFwaFZpeldyaXRlci5oIGIvU291cmNlL2NtR3JhcGhWaXpXcml0ZXIuaAppbmRleCA5YzMwNTFmLi5kMTMwMGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21HcmFwaFZpeldyaXRlci5oCisrKyBiL1NvdXJjZS9jbUdyYXBoVml6V3JpdGVyLmgKQEAgLTYsODcgKzYsMTM1IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAorI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgorI2luY2x1ZGUgImNtTGlua0l0ZW0uaCIKKyNpbmNsdWRlICJjbUxpbmtJdGVtR3JhcGhWaXNpdG9yLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAKLWNsYXNzIGNtR2VuZXJhdGVkRmlsZVN0cmVhbTsKLWNsYXNzIGNtR2VuZXJhdG9yVGFyZ2V0OwotY2xhc3MgY21Mb2NhbEdlbmVyYXRvcjsKIGNsYXNzIGNtR2xvYmFsR2VuZXJhdG9yOwogCiAvKiogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHdyaXRpbmcgZmlsZXMgZm9yIGdyYXBodml6IChkb3QpIGZvciBncmFwaHMKICAqIHJlcHJlc2VudGluZyB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHRhcmdldHMgaW4gdGhlIHByb2plY3QuICovCi1jbGFzcyBjbUdyYXBoVml6V3JpdGVyCitjbGFzcyBjbUdyYXBoVml6V3JpdGVyIDogcHVibGljIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3IKIHsKIHB1YmxpYzoKLSAgY21HcmFwaFZpeldyaXRlcihjb25zdCBjbUdsb2JhbEdlbmVyYXRvciogZ2xvYmFsR2VuZXJhdG9yKTsKKyAgY21HcmFwaFZpeldyaXRlcihzdGQ6OnN0cmluZyBjb25zdCYgZmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY21HbG9iYWxHZW5lcmF0b3IqIGdsb2JhbEdlbmVyYXRvcik7CisgIH5jbUdyYXBoVml6V3JpdGVyKCkgb3ZlcnJpZGU7CisKKyAgdm9pZCBWaXNpdEdyYXBoKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKSBvdmVycmlkZTsKKworICB2b2lkIE9uSXRlbShjbUxpbmtJdGVtIGNvbnN0JiBpdGVtKSBvdmVycmlkZTsKKworICB2b2lkIE9uRGlyZWN0TGluayhjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlciwgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZWUsCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGVuY3lUeXBlIGR0KSBvdmVycmlkZTsKKworICB2b2lkIE9uSW5kaXJlY3RMaW5rKGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVyLAorICAgICAgICAgICAgICAgICAgICAgIGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVlKSBvdmVycmlkZTsKIAogICB2b2lkIFJlYWRTZXR0aW5ncyhjb25zdCBzdGQ6OnN0cmluZyYgc2V0dGluZ3NGaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZhbGxiYWNrU2V0dGluZ3NGaWxlTmFtZSk7CiAKLSAgdm9pZCBXcml0ZVBlclRhcmdldEZpbGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSk7Ci0gIHZvaWQgV3JpdGVUYXJnZXREZXBlbmRlcnNGaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpOworICB2b2lkIFdyaXRlKCk7CiAKLSAgdm9pZCBXcml0ZUdsb2JhbEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lKTsKK3ByaXZhdGU6CisgIHN0cnVjdCBDb25uZWN0aW9uCisgIHsKKyAgICBDb25uZWN0aW9uKGNtTGlua0l0ZW0gcywgY21MaW5rSXRlbSBkLCBzdGQ6OnN0cmluZyBzY29wZSkKKyAgICAgIDogc3JjKHN0ZDo6bW92ZShzKSkKKyAgICAgICwgZHN0KHN0ZDo6bW92ZShkKSkKKyAgICAgICwgc2NvcGVUeXBlKHN0ZDo6bW92ZShzY29wZSkpCisgICAgeworICAgIH0KIAotcHJvdGVjdGVkOgotICB2b2lkIENvbGxlY3RUYXJnZXRzQW5kTGlicygpOworICAgIGNtTGlua0l0ZW0gc3JjOworICAgIGNtTGlua0l0ZW0gZHN0OworICAgIHN0ZDo6c3RyaW5nIHNjb3BlVHlwZTsKKyAgfTsKKyAgdXNpbmcgQ29ubmVjdGlvbnMgPSBzdGQ6OnZlY3RvcjxDb25uZWN0aW9uPjsKKyAgdXNpbmcgQ29ubmVjdGlvbnNNYXAgPSBzdGQ6Om1hcDxjbUxpbmtJdGVtLCBDb25uZWN0aW9ucz47CiAKLSAgaW50IENvbGxlY3RBbGxUYXJnZXRzKCk7CisgIHZvaWQgVmlzaXRMaW5rKGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVyLCBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSwKKyAgICAgICAgICAgICAgICAgYm9vbCBpc0RpcmVjdExpbmssIHN0ZDo6c3RyaW5nIGNvbnN0JiBzY29wZVR5cGUgPSAiIik7CiAKLSAgaW50IENvbGxlY3RBbGxFeHRlcm5hbExpYnMoaW50IGNudCk7CisgIHZvaWQgV3JpdGVIZWFkZXIoY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBmcywgc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpOwogCi0gIHZvaWQgV3JpdGVIZWFkZXIoY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBzdHIpIGNvbnN0OworICB2b2lkIFdyaXRlRm9vdGVyKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgZnMpOwogCi0gIHZvaWQgV3JpdGVDb25uZWN0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaW5zZXJ0ZWROb2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaW5zZXJ0ZWRDb25uZWN0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgc3RyKSBjb25zdDsKKyAgdm9pZCBXcml0ZUxlZ2VuZChjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZzKTsKIAotICB2b2lkIFdyaXRlRGVwZW5kZXJDb25uZWN0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBpbnNlcnRlZE5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIGluc2VydGVkQ29ubmVjdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgc3RyKSBjb25zdDsKKyAgdm9pZCBXcml0ZU5vZGUoY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBmcywgY21MaW5rSXRlbSBjb25zdCYgaXRlbSk7CiAKLSAgdm9pZCBXcml0ZU5vZGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgaW5zZXJ0ZWROb2RlcywKLSAgICAgICAgICAgICAgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBzdHIpIGNvbnN0OworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPiBDcmVhdGVUYXJnZXRGaWxlKAorICAgIGNtTGlua0l0ZW0gY29uc3QmIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVOYW1lU3VmZml4ID0gIiIpOwogCi0gIHZvaWQgV3JpdGVGb290ZXIoY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBzdHIpIGNvbnN0OworICB2b2lkIFdyaXRlQ29ubmVjdGlvbihjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGZzLAorICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlclRhcmdldE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVlVGFyZ2V0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGVkZ2VTdHlsZSk7CiAKLSAgYm9vbCBJZ25vcmVUaGlzVGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKKyAgdm9pZCBGaW5kQWxsQ29ubmVjdGlvbnMoY29uc3QgQ29ubmVjdGlvbnNNYXAmIGNvbm5lY3Rpb25NYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTGlua0l0ZW0mIHJvb3RJdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9ucyYgZXh0ZW5kZWRDb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNldDxjbUxpbmtJdGVtPiYgdmlzaXRlZEl0ZW1zKTsKIAotICBib29sIEdlbmVyYXRlRm9yVGFyZ2V0VHlwZShjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSkgY29uc3Q7CisgIHZvaWQgRmluZEFsbENvbm5lY3Rpb25zKGNvbnN0IENvbm5lY3Rpb25zTWFwJiBjb25uZWN0aW9uTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpbmtJdGVtJiByb290SXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbnMmIGV4dGVuZGVkQ29ucyk7CiAKLSAgc3RkOjpzdHJpbmcgR3JhcGhUeXBlOworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRGlyRnVuYz4KKyAgdm9pZCBXcml0ZVBlclRhcmdldENvbm5lY3Rpb25zKGNvbnN0IENvbm5lY3Rpb25zTWFwJiBjb25uZWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZVN1ZmZpeCA9ICIiKTsKKworICBib29sIEl0ZW1FeGNsdWRlZChjbUxpbmtJdGVtIGNvbnN0JiBpdGVtKTsKKyAgYm9vbCBJdGVtTmFtZUZpbHRlcmVkT3V0KHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtTmFtZSk7CisgIGJvb2wgVGFyZ2V0VHlwZUVuYWJsZWQoY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHRhcmdldFR5cGUpIGNvbnN0OworCisgIHN0ZDo6c3RyaW5nIEl0ZW1OYW1lV2l0aEFsaWFzZXMoc3RkOjpzdHJpbmcgY29uc3QmIGl0ZW1OYW1lKSBjb25zdDsKKworICBzdGF0aWMgc3RkOjpzdHJpbmcgR2V0RWRnZVN0eWxlKERlcGVuZGVuY3lUeXBlIGR0KTsKKworICBzdGF0aWMgc3RkOjpzdHJpbmcgRXNjYXBlRm9yRG90RmlsZShzdGQ6OnN0cmluZyBjb25zdCYgc3RyKTsKKworICBzdGF0aWMgc3RkOjpzdHJpbmcgUGF0aFNhZmVTdHJpbmcoc3RkOjpzdHJpbmcgY29uc3QmIHN0cik7CisKKyAgc3RkOjpzdHJpbmcgRmlsZU5hbWU7CisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBHbG9iYWxGaWxlU3RyZWFtOworCisgIENvbm5lY3Rpb25zTWFwIFBlclRhcmdldENvbm5lY3Rpb25zOworICBDb25uZWN0aW9uc01hcCBUYXJnZXREZXBlbmRlcnNDb25uZWN0aW9uczsKKwogICBzdGQ6OnN0cmluZyBHcmFwaE5hbWU7CiAgIHN0ZDo6c3RyaW5nIEdyYXBoSGVhZGVyOwogICBzdGQ6OnN0cmluZyBHcmFwaE5vZGVQcmVmaXg7CiAKICAgc3RkOjp2ZWN0b3I8Y21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uPiBUYXJnZXRzVG9JZ25vcmVSZWdleDsKIAotICBjb25zdCBjbUdsb2JhbEdlbmVyYXRvciogR2xvYmFsR2VuZXJhdG9yOwotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4mIExvY2FsR2VuZXJhdG9yczsKKyAgY21HbG9iYWxHZW5lcmF0b3IgY29uc3QqIEdsb2JhbEdlbmVyYXRvcjsKIAotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY29uc3QgY21HZW5lcmF0b3JUYXJnZXQqPiBUYXJnZXRQdHJzOwotICAvLyBtYXBzIGZyb20gdGhlIGFjdHVhbCB0YXJnZXQgbmFtZXMgdG8gbm9kZSBuYW1lcyBpbiBkb3Q6Ci0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gVGFyZ2V0TmFtZXNOb2RlczsKKyAgaW50IE5leHROb2RlSWQ7CisgIC8vIG1hcHMgZnJvbSB0aGUgYWN0dWFsIGl0ZW0gbmFtZXMgdG8gbm9kZSBuYW1lcyBpbiBkb3Q6CisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gTm9kZU5hbWVzOwogCiAgIGJvb2wgR2VuZXJhdGVGb3JFeGVjdXRhYmxlczsKICAgYm9vbCBHZW5lcmF0ZUZvclN0YXRpY0xpYnM7CiAgIGJvb2wgR2VuZXJhdGVGb3JTaGFyZWRMaWJzOwogICBib29sIEdlbmVyYXRlRm9yTW9kdWxlTGliczsKLSAgYm9vbCBHZW5lcmF0ZUZvckludGVyZmFjZTsKKyAgYm9vbCBHZW5lcmF0ZUZvckludGVyZmFjZUxpYnM7CisgIGJvb2wgR2VuZXJhdGVGb3JPYmplY3RMaWJzOworICBib29sIEdlbmVyYXRlRm9yVW5rbm93bkxpYnM7CisgIGJvb2wgR2VuZXJhdGVGb3JDdXN0b21UYXJnZXRzOwogICBib29sIEdlbmVyYXRlRm9yRXh0ZXJuYWxzOwogICBib29sIEdlbmVyYXRlUGVyVGFyZ2V0OwogICBib29sIEdlbmVyYXRlRGVwZW5kZXJzOwotICBib29sIEhhdmVUYXJnZXRzQW5kTGliczsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSURFT3B0aW9ucy5jeHggYi9Tb3VyY2UvY21JREVPcHRpb25zLmN4eAppbmRleCA3MTMyNmQyLi5iNTMzMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JREVPcHRpb25zLmN4eAorKysgYi9Tb3VyY2UvY21JREVPcHRpb25zLmN4eApAQCAtNCw2ICs0LDggQEAKIAogI2luY2x1ZGUgPGl0ZXJhdG9yPgogCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICJjbXN5cy9TdHJpbmcuaCIKQEAgLTE3Myw3ICsxNzUsNyBAQAogfQogdm9pZCBjbUlERU9wdGlvbnM6OkFkZERlZmluZXMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZWZpbmVzKQogewotICBjbUFwcGVuZCh0aGlzLT5EZWZpbmVzLCBkZWZpbmVzKTsKKyAgY206OmFwcGVuZCh0aGlzLT5EZWZpbmVzLCBkZWZpbmVzKTsKIH0KIAogc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjbUlERU9wdGlvbnM6OkdldERlZmluZXMoKSBjb25zdApAQCAtMTk1LDcgKzE5Nyw3IEBACiB9CiB2b2lkIGNtSURFT3B0aW9uczo6QWRkSW5jbHVkZXMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBpbmNsdWRlcykKIHsKLSAgY21BcHBlbmQodGhpcy0+SW5jbHVkZXMsIGluY2x1ZGVzKTsKKyAgY206OmFwcGVuZCh0aGlzLT5JbmNsdWRlcywgaW5jbHVkZXMpOwogfQogCiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNtSURFT3B0aW9uczo6R2V0SW5jbHVkZXMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtSWZDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUlmQ29tbWFuZC5jeHgKaW5kZXggMjkwZTA2NC4uNTgwOGY5MCAxMDA2NDQKLS0tIGEvU291cmNlL2NtSWZDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21JZkNvbW1hbmQuY3h4CkBAIC03LDggKzcsNyBAQAogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgotCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogI2luY2x1ZGUgImNtQ29uZGl0aW9uRXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluY2x1ZGVDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUluY2x1ZGVDb21tYW5kLmN4eAppbmRleCAxNDI2NGY0Li5hZTgwMWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbmNsdWRlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtSW5jbHVkZUNvbW1hbmQuY3h4CkBAIC0yLDcgKzIsOSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21JbmNsdWRlQ29tbWFuZC5oIgogCisjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKQEAgLTE2LDYgKzE4LDExIEBACiBib29sIGNtSW5jbHVkZUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7CisgIHN0YXRpYyBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21Qb2xpY2llczo6UG9saWN5SUQ+IERlcHJlY2F0ZWRNb2R1bGVzOworICBpZiAoRGVwcmVjYXRlZE1vZHVsZXMuZW1wdHkoKSkgeworICAgIERlcHJlY2F0ZWRNb2R1bGVzWyJEb2N1bWVudGF0aW9uIl0gPSBjbVBvbGljaWVzOjpDTVAwMTA2OworICB9CisKICAgaWYgKGFyZ3MuZW1wdHkoKSB8fCBhcmdzLnNpemUoKSA+IDQpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbGxlZCB3aXRoIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMuICAiCiAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlKCkgb25seSB0YWtlcyBvbmUgZmlsZS4iKTsKQEAgLTY1LDkgKzcyLDM1IEBACiAgIH0KIAogICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGZuYW1lKSkgeworICAgIGJvb2wgc3lzdGVtID0gZmFsc2U7CiAgICAgLy8gTm90IGEgcGF0aC4gTWF5YmUgbW9kdWxlLgogICAgIHN0ZDo6c3RyaW5nIG1vZHVsZSA9IGNtU3RyQ2F0KGZuYW1lLCAiLmNtYWtlIik7Ci0gICAgc3RkOjpzdHJpbmcgbWZpbGUgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRNb2R1bGVzRmlsZShtb2R1bGUpOworICAgIHN0ZDo6c3RyaW5nIG1maWxlID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0TW9kdWxlc0ZpbGUobW9kdWxlLCBzeXN0ZW0pOworCisgICAgaWYgKHN5c3RlbSkgeworICAgICAgYXV0byBNb2R1bGVQb2xpY3kgPSBEZXByZWNhdGVkTW9kdWxlcy5maW5kKGZuYW1lKTsKKyAgICAgIGlmIChNb2R1bGVQb2xpY3kgIT0gRGVwcmVjYXRlZE1vZHVsZXMuZW5kKCkpIHsKKyAgICAgICAgY21Qb2xpY2llczo6UG9saWN5U3RhdHVzIFBvbGljeVN0YXR1cyA9CisgICAgICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0UG9saWN5U3RhdHVzKE1vZHVsZVBvbGljeS0+c2Vjb25kKTsKKyAgICAgICAgc3dpdGNoIChQb2xpY3lTdGF0dXMpIHsKKyAgICAgICAgICBjYXNlIGNtUG9saWNpZXM6OldBUk46IHsKKyAgICAgICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzc3VlTWVzc2FnZSgKKyAgICAgICAgICAgICAgTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLAorICAgICAgICAgICAgICBjbVN0ckNhdChjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKE1vZHVsZVBvbGljeS0+c2Vjb25kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIlxuIikpOworICAgICAgICAgICAgQ01fRkFMTFRIUk9VR0g7CisgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9JRl9VU0VEOgorICAgICAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfQUxXQVlTOgorICAgICAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgorICAgICAgICAgICAgbWZpbGUgPSAiIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFtZmlsZS5lbXB0eSgpKSB7CiAgICAgICBmbmFtZSA9IG1maWxlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluY2x1ZGVEaXJlY3RvcnlDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUluY2x1ZGVEaXJlY3RvcnlDb21tYW5kLmN4eAppbmRleCAxNzBhZWExLi5iNDA4ZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbmNsdWRlRGlyZWN0b3J5Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtSW5jbHVkZURpcmVjdG9yeUNvbW1hbmQuY3h4CkBAIC02LDcgKzYsOCBAQAogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC01OCw5ICs1OSw5IEBACiAgICAgR2V0SW5jbHVkZXMobWYsICppLCBpbmNsdWRlcyk7CiAKICAgICBpZiAoYmVmb3JlKSB7Ci0gICAgICBjbUFwcGVuZChiZWZvcmVJbmNsdWRlcywgaW5jbHVkZXMpOworICAgICAgY206OmFwcGVuZChiZWZvcmVJbmNsdWRlcywgaW5jbHVkZXMpOwogICAgIH0gZWxzZSB7Ci0gICAgICBjbUFwcGVuZChhZnRlckluY2x1ZGVzLCBpbmNsdWRlcyk7CisgICAgICBjbTo6YXBwZW5kKGFmdGVySW5jbHVkZXMsIGluY2x1ZGVzKTsKICAgICB9CiAgICAgaWYgKHN5c3RlbSkgewogICAgICAgc3lzdGVtSW5jbHVkZXMuaW5zZXJ0KGluY2x1ZGVzLmJlZ2luKCksIGluY2x1ZGVzLmVuZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluY2x1ZGVFeHRlcm5hbE1TUHJvamVjdENvbW1hbmQuY3h4IGIvU291cmNlL2NtSW5jbHVkZUV4dGVybmFsTVNQcm9qZWN0Q29tbWFuZC5jeHgKaW5kZXggZmExZThiYy4uNWI1MzJjZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5jbHVkZUV4dGVybmFsTVNQcm9qZWN0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtSW5jbHVkZUV4dGVybmFsTVNQcm9qZWN0Q29tbWFuZC5jeHgKQEAgLTc3LDI4ICs3NywyNyBAQAogCiAgICAgaWYgKCFjdXN0b21HdWlkLmVtcHR5KCkpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGd1aWRWYXJpYWJsZSA9IHV0aWxpdHlfbmFtZSArICJfR1VJRF9DTUFLRSI7Ci0gICAgICBtZi5HZXRDTWFrZUluc3RhbmNlKCktPkFkZENhY2hlRW50cnkoZ3VpZFZhcmlhYmxlLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tR3VpZC5jX3N0cigpLCAiU3RvcmVkIEdVSUQiLAorICAgICAgbWYuR2V0Q01ha2VJbnN0YW5jZSgpLT5BZGRDYWNoZUVudHJ5KGd1aWRWYXJpYWJsZSwgY3VzdG9tR3VpZC5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdG9yZWQgR1VJRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIGEgdGFyZ2V0IGluc3RhbmNlIGZvciB0aGlzIHV0aWxpdHkuCi0gICAgY21UYXJnZXQqIHRhcmdldCA9Ci0gICAgICBtZi5BZGROZXdUYXJnZXQoY21TdGF0ZUVudW1zOjpVVElMSVRZLCB1dGlsaXR5X25hbWUuY19zdHIoKSk7CisgICAgY21UYXJnZXQqIHRhcmdldCA9IG1mLkFkZE5ld1RhcmdldChjbVN0YXRlRW51bXM6OlVUSUxJVFksIHV0aWxpdHlfbmFtZSk7CiAgICAgaWYgKG1mLkdldFByb3BlcnR5QXNCb29sKCJFWENMVURFX0ZST01fQUxMIikpIHsKICAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkoIkVYQ0xVREVfRlJPTV9BTEwiLCAiVFJVRSIpOwogICAgIH0KIAotICAgIHRhcmdldC0+U2V0UHJvcGVydHkoIkdFTkVSQVRPUl9GSUxFX05BTUUiLCB1dGlsaXR5X25hbWUuY19zdHIoKSk7Ci0gICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIiwgcGF0aC5jX3N0cigpKTsKKyAgICB0YXJnZXQtPlNldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIiwgdXRpbGl0eV9uYW1lKTsKKyAgICB0YXJnZXQtPlNldFByb3BlcnR5KCJFWFRFUk5BTF9NU1BST0pFQ1QiLCBwYXRoKTsKIAogICAgIGlmICghY3VzdG9tVHlwZS5lbXB0eSgpKQotICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiVlNfUFJPSkVDVF9UWVBFIiwgY3VzdG9tVHlwZS5jX3N0cigpKTsKKyAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkoIlZTX1BST0pFQ1RfVFlQRSIsIGN1c3RvbVR5cGUpOwogICAgIGlmICghcGxhdGZvcm1NYXBwaW5nLmVtcHR5KCkpCi0gICAgICB0YXJnZXQtPlNldFByb3BlcnR5KCJWU19QTEFURk9STV9NQVBQSU5HIiwgcGxhdGZvcm1NYXBwaW5nLmNfc3RyKCkpOworICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiVlNfUExBVEZPUk1fTUFQUElORyIsIHBsYXRmb3JtTWFwcGluZyk7CiAKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBkIDogZGVwZW5kcykgewotICAgICAgdGFyZ2V0LT5BZGRVdGlsaXR5KGQuY19zdHIoKSk7CisgICAgICB0YXJnZXQtPkFkZFV0aWxpdHkoZCwgZmFsc2UpOwogICAgIH0KICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21JbnN0YWxsQ29tbWFuZC5jeHgKaW5kZXggZTUxMTE5Ni4uODM2MDllMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxDb21tYW5kLmN4eApAQCAtOCwxMSArOCwxMCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbXN5cy9HbG9iLmh4eCIKIAotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCi0KICNpbmNsdWRlICJjbUFyZ3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUV4cG9ydFNldC5oIgpAQCAtMjksNiArMjgsNyBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN1YmNvbW1hbmRUYWJsZS5oIgpAQCAtODUsNyArODUsNyBAQAogICBzdGQ6OnN0cmluZyBEZWZhdWx0Q29tcG9uZW50TmFtZTsKIH07CiAKLWNtSW5zdGFsbFRhcmdldEdlbmVyYXRvciogQ3JlYXRlSW5zdGFsbFRhcmdldEdlbmVyYXRvcigKK3N0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3I+IENyZWF0ZUluc3RhbGxUYXJnZXRHZW5lcmF0b3IoCiAgIGNtVGFyZ2V0JiB0YXJnZXQsIGNvbnN0IGNtSW5zdGFsbENvbW1hbmRBcmd1bWVudHMmIGFyZ3MsIGJvb2wgaW1wTGliLAogICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBiYWNrdHJhY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXN0aW5hdGlvbiwKICAgYm9vbCBmb3JjZU9wdCA9IGZhbHNlLCBib29sIG5hbWVsaW5rID0gZmFsc2UpCkBAIC05MywxOCArOTMsMTcgQEAKICAgY21JbnN0YWxsR2VuZXJhdG9yOjpNZXNzYWdlTGV2ZWwgbWVzc2FnZSA9CiAgICAgY21JbnN0YWxsR2VuZXJhdG9yOjpTZWxlY3RNZXNzYWdlTGV2ZWwodGFyZ2V0LkdldE1ha2VmaWxlKCkpOwogICB0YXJnZXQuU2V0SGF2ZUluc3RhbGxSdWxlKHRydWUpOwotICBjb25zdCBjaGFyKiBjb21wb25lbnQgPSBuYW1lbGluayA/IGFyZ3MuR2V0TmFtZWxpbmtDb21wb25lbnQoKS5jX3N0cigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXJncy5HZXRDb21wb25lbnQoKS5jX3N0cigpOwotICBhdXRvIGcgPSBuZXcgY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKAotICAgIHRhcmdldC5HZXROYW1lKCksIGRlc3RpbmF0aW9uLmNfc3RyKCksIGltcExpYiwKLSAgICBhcmdzLkdldFBlcm1pc3Npb25zKCkuY19zdHIoKSwgYXJncy5HZXRDb25maWd1cmF0aW9ucygpLCBjb21wb25lbnQsCi0gICAgbWVzc2FnZSwgYXJncy5HZXRFeGNsdWRlRnJvbUFsbCgpLCBhcmdzLkdldE9wdGlvbmFsKCkgfHwgZm9yY2VPcHQsCi0gICAgYmFja3RyYWNlKTsKLSAgdGFyZ2V0LkFkZEluc3RhbGxHZW5lcmF0b3IoZyk7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21wb25lbnQgPQorICAgIG5hbWVsaW5rID8gYXJncy5HZXROYW1lbGlua0NvbXBvbmVudCgpIDogYXJncy5HZXRDb21wb25lbnQoKTsKKyAgYXV0byBnID0gY206Om1ha2VfdW5pcXVlPGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcj4oCisgICAgdGFyZ2V0LkdldE5hbWUoKSwgZGVzdGluYXRpb24sIGltcExpYiwgYXJncy5HZXRQZXJtaXNzaW9ucygpLAorICAgIGFyZ3MuR2V0Q29uZmlndXJhdGlvbnMoKSwgY29tcG9uZW50LCBtZXNzYWdlLCBhcmdzLkdldEV4Y2x1ZGVGcm9tQWxsKCksCisgICAgYXJncy5HZXRPcHRpb25hbCgpIHx8IGZvcmNlT3B0LCBiYWNrdHJhY2UpOworICB0YXJnZXQuQWRkSW5zdGFsbEdlbmVyYXRvcihnLmdldCgpKTsKICAgcmV0dXJuIGc7CiB9CiAKLWNtSW5zdGFsbFRhcmdldEdlbmVyYXRvciogQ3JlYXRlSW5zdGFsbFRhcmdldEdlbmVyYXRvcigKK3N0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3I+IENyZWF0ZUluc3RhbGxUYXJnZXRHZW5lcmF0b3IoCiAgIGNtVGFyZ2V0JiB0YXJnZXQsIGNvbnN0IGNtSW5zdGFsbENvbW1hbmRBcmd1bWVudHMmIGFyZ3MsIGJvb2wgaW1wTGliLAogICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBiYWNrdHJhY2UsIGJvb2wgZm9yY2VPcHQgPSBmYWxzZSwKICAgYm9vbCBuYW1lbGluayA9IGZhbHNlKQpAQCAtMTE0LDIwICsxMTMsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWxpbmspOwogfQogCi1jbUluc3RhbGxGaWxlc0dlbmVyYXRvciogQ3JlYXRlSW5zdGFsbEZpbGVzR2VuZXJhdG9yKAorc3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yPiBDcmVhdGVJbnN0YWxsRmlsZXNHZW5lcmF0b3IoCiAgIGNtTWFrZWZpbGUqIG1mLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGFic0ZpbGVzLAogICBjb25zdCBjbUluc3RhbGxDb21tYW5kQXJndW1lbnRzJiBhcmdzLCBib29sIHByb2dyYW1zLAogICBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdGluYXRpb24pCiB7CiAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6TWVzc2FnZUxldmVsIG1lc3NhZ2UgPQogICAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6U2VsZWN0TWVzc2FnZUxldmVsKG1mKTsKLSAgcmV0dXJuIG5ldyBjbUluc3RhbGxGaWxlc0dlbmVyYXRvcigKLSAgICBhYnNGaWxlcywgZGVzdGluYXRpb24uY19zdHIoKSwgcHJvZ3JhbXMsIGFyZ3MuR2V0UGVybWlzc2lvbnMoKS5jX3N0cigpLAotICAgIGFyZ3MuR2V0Q29uZmlndXJhdGlvbnMoKSwgYXJncy5HZXRDb21wb25lbnQoKS5jX3N0cigpLCBtZXNzYWdlLAotICAgIGFyZ3MuR2V0RXhjbHVkZUZyb21BbGwoKSwgYXJncy5HZXRSZW5hbWUoKS5jX3N0cigpLCBhcmdzLkdldE9wdGlvbmFsKCkpOworICByZXR1cm4gY206Om1ha2VfdW5pcXVlPGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yPigKKyAgICBhYnNGaWxlcywgZGVzdGluYXRpb24sIHByb2dyYW1zLCBhcmdzLkdldFBlcm1pc3Npb25zKCksCisgICAgYXJncy5HZXRDb25maWd1cmF0aW9ucygpLCBhcmdzLkdldENvbXBvbmVudCgpLCBtZXNzYWdlLAorICAgIGFyZ3MuR2V0RXhjbHVkZUZyb21BbGwoKSwgYXJncy5HZXRSZW5hbWUoKSwgYXJncy5HZXRPcHRpb25hbCgpKTsKIH0KIAotY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IqIENyZWF0ZUluc3RhbGxGaWxlc0dlbmVyYXRvcigKK3N0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxGaWxlc0dlbmVyYXRvcj4gQ3JlYXRlSW5zdGFsbEZpbGVzR2VuZXJhdG9yKAogICBjbU1ha2VmaWxlKiBtZiwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhYnNGaWxlcywKICAgY29uc3QgY21JbnN0YWxsQ29tbWFuZEFyZ3VtZW50cyYgYXJncywgYm9vbCBwcm9ncmFtcykKIHsKQEAgLTE5NiwxMyArMTk1LDE1IEBACiAgICAgICAgIHN0YXR1cy5TZXRFcnJvcigiZ2l2ZW4gYSBkaXJlY3RvcnkgYXMgdmFsdWUgb2YgU0NSSVBUIGFyZ3VtZW50LiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IobmV3IGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvcigKLSAgICAgICAgc2NyaXB0LmNfc3RyKCksIGZhbHNlLCBjb21wb25lbnQuY19zdHIoKSwgZXhjbHVkZV9mcm9tX2FsbCkpOworICAgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKAorICAgICAgICBjbTo6bWFrZV91bmlxdWU8Y21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yPihzY3JpcHQsIGZhbHNlLCBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZnJvbV9hbGwpKTsKICAgICB9IGVsc2UgaWYgKGRvaW5nX2NvZGUpIHsKICAgICAgIGRvaW5nX2NvZGUgPSBmYWxzZTsKICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb2RlID0gYXJnOwotICAgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKG5ldyBjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IoCi0gICAgICAgIGNvZGUuY19zdHIoKSwgdHJ1ZSwgY29tcG9uZW50LmNfc3RyKCksIGV4Y2x1ZGVfZnJvbV9hbGwpKTsKKyAgICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcigKKyAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvcj4oY29kZSwgdHJ1ZSwgY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2Zyb21fYWxsKSk7CiAgICAgfQogICB9CiAKQEAgLTQ0OSwxNiArNDUwLDE2IEBACiAgIGZvciAoY21UYXJnZXQqIHRpIDogdGFyZ2V0cykgewogICAgIC8vIEhhbmRsZSBlYWNoIHRhcmdldCB0eXBlLgogICAgIGNtVGFyZ2V0JiB0YXJnZXQgPSAqdGk7Ci0gICAgY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKiBhcmNoaXZlR2VuZXJhdG9yID0gbnVsbHB0cjsKLSAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IqIGxpYnJhcnlHZW5lcmF0b3IgPSBudWxscHRyOwotICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvciogbmFtZWxpbmtHZW5lcmF0b3IgPSBudWxscHRyOwotICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvciogcnVudGltZUdlbmVyYXRvciA9IG51bGxwdHI7Ci0gICAgY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKiBvYmplY3RHZW5lcmF0b3IgPSBudWxscHRyOwotICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvciogZnJhbWV3b3JrR2VuZXJhdG9yID0gbnVsbHB0cjsKLSAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IqIGJ1bmRsZUdlbmVyYXRvciA9IG51bGxwdHI7Ci0gICAgY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IqIHByaXZhdGVIZWFkZXJHZW5lcmF0b3IgPSBudWxscHRyOwotICAgIGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yKiBwdWJsaWNIZWFkZXJHZW5lcmF0b3IgPSBudWxscHRyOwotICAgIGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yKiByZXNvdXJjZUdlbmVyYXRvciA9IG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcj4gYXJjaGl2ZUdlbmVyYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yPiBsaWJyYXJ5R2VuZXJhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3I+IG5hbWVsaW5rR2VuZXJhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3I+IHJ1bnRpbWVHZW5lcmF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcj4gb2JqZWN0R2VuZXJhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3I+IGZyYW1ld29ya0dlbmVyYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yPiBidW5kbGVHZW5lcmF0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yPiBwcml2YXRlSGVhZGVyR2VuZXJhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxGaWxlc0dlbmVyYXRvcj4gcHVibGljSGVhZGVyR2VuZXJhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxGaWxlc0dlbmVyYXRvcj4gcmVzb3VyY2VHZW5lcmF0b3I7CiAKICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgZGVmYXVsdCBkZXN0aW5hdGlvbnMgZm9yIFBVQkxJQ19IRUFERVIgYW5kCiAgICAgLy8gUFJJVkFURV9IRUFERVIgaWYgYW55IGFydGlmYWN0cyBhcmUgc3BlY2lmaWVkLgpAQCAtNDkxLDcgKzQ5Miw3IEBACiAgICAgICAgICAgICAgIHRhcmdldCwgcnVudGltZUFyZ3MsIGZhbHNlLCBoZWxwZXIuTWFrZWZpbGUtPkdldEJhY2t0cmFjZSgpKTsKICAgICAgICAgICAgIGFydGlmYWN0c1NwZWNpZmllZCA9IHRydWU7CiAgICAgICAgICAgfQotICAgICAgICAgIGlmICgoYXJjaGl2ZUdlbmVyYXRvciA9PSBudWxscHRyKSAmJiAocnVudGltZUdlbmVyYXRvciA9PSBudWxscHRyKSkgeworICAgICAgICAgIGlmICghYXJjaGl2ZUdlbmVyYXRvciAmJiAhcnVudGltZUdlbmVyYXRvcikgewogICAgICAgICAgICAgYXJjaGl2ZUdlbmVyYXRvciA9IENyZWF0ZUluc3RhbGxUYXJnZXRHZW5lcmF0b3IoCiAgICAgICAgICAgICAgIHRhcmdldCwgYXJjaGl2ZUFyZ3MsIHRydWUsIGhlbHBlci5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCksCiAgICAgICAgICAgICAgIGhlbHBlci5HZXRBcmNoaXZlRGVzdGluYXRpb24obnVsbHB0cikpOwpAQCAtNjYwLDcgKzY2MSw2IEBACiAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uIEFuIElOVEVSRkFDRV9MSUJSQVJZIGNhbiBiZSBpbnN0YWxsZWQsIGJ1dCB0aGUKICAgICAgICAgLy8gb25seSBlZmZlY3Qgb2YgdGhhdCBpcyB0byBtYWtlIGl0IGV4cG9ydGFibGUuIEl0IGluc3RhbGxzIG5vCiAgICAgICAgIC8vIG90aGVyIGZpbGVzIGl0c2VsZi4KLSAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gZHVlIHRvIHRoZSBhYm92ZSB0eXBlIGNoZWNrLgogICAgICAgICAvLyBJZ25vcmUgdGhlIGNhc2UuCkBAIC02NzksOSArNjc5LDkgQEAKICAgICB9CiAKICAgICBpZiAoY3JlYXRlSW5zdGFsbEdlbmVyYXRvcnNGb3JUYXJnZXRGaWxlU2V0cyAmJiAhbmFtZWxpbmtPbmx5KSB7Ci0gICAgICBjb25zdCBjaGFyKiBmaWxlcyA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiUFJJVkFURV9IRUFERVIiKTsKLSAgICAgIGlmICgoZmlsZXMpICYmICgqZmlsZXMpKSB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWxGaWxlcyA9IGNtRXhwYW5kZWRMaXN0KGZpbGVzKTsKKyAgICAgIGNtUHJvcCBmaWxlcyA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiUFJJVkFURV9IRUFERVIiKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGZpbGVzKSkgeworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYWJzRmlsZXM7CiAgICAgICAgIGlmICghaGVscGVyLk1ha2VGaWxlc0Z1bGxQYXRoKCJQUklWQVRFX0hFQURFUiIsIHJlbEZpbGVzLCBhYnNGaWxlcykpIHsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MDIsOCArNzAyLDggQEAKICAgICAgIH0KIAogICAgICAgZmlsZXMgPSB0YXJnZXQuR2V0UHJvcGVydHkoIlBVQkxJQ19IRUFERVIiKTsKLSAgICAgIGlmICgoZmlsZXMpICYmICgqZmlsZXMpKSB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWxGaWxlcyA9IGNtRXhwYW5kZWRMaXN0KGZpbGVzKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGZpbGVzKSkgeworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYWJzRmlsZXM7CiAgICAgICAgIGlmICghaGVscGVyLk1ha2VGaWxlc0Z1bGxQYXRoKCJQVUJMSUNfSEVBREVSIiwgcmVsRmlsZXMsIGFic0ZpbGVzKSkgewogICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTcyNCw4ICs3MjQsOCBAQAogICAgICAgfQogCiAgICAgICBmaWxlcyA9IHRhcmdldC5HZXRQcm9wZXJ0eSgiUkVTT1VSQ0UiKTsKLSAgICAgIGlmICgoZmlsZXMpICYmICgqZmlsZXMpKSB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWxGaWxlcyA9IGNtRXhwYW5kZWRMaXN0KGZpbGVzKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGZpbGVzKSkgeworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVsRmlsZXMgPSBjbUV4cGFuZGVkTGlzdCgqZmlsZXMpOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYWJzRmlsZXM7CiAgICAgICAgIGlmICghaGVscGVyLk1ha2VGaWxlc0Z1bGxQYXRoKCJSRVNPVVJDRSIsIHJlbEZpbGVzLCBhYnNGaWxlcykpIHsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NDQsNDMgKzc0NCwxOCBAQAogICAgICAgfQogICAgIH0KIAotICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hldGhlciB3ZSdyZSBpbnN0YWxsaW5nIGFueXRoaW5nIGluIGVhY2ggY2F0ZWdvcnkKLSAgICBpbnN0YWxsc0FyY2hpdmUgPSBpbnN0YWxsc0FyY2hpdmUgfHwgYXJjaGl2ZUdlbmVyYXRvciAhPSBudWxscHRyOwotICAgIGluc3RhbGxzTGlicmFyeSA9IGluc3RhbGxzTGlicmFyeSB8fCBsaWJyYXJ5R2VuZXJhdG9yICE9IG51bGxwdHI7Ci0gICAgaW5zdGFsbHNOYW1lbGluayA9IGluc3RhbGxzTmFtZWxpbmsgfHwgbmFtZWxpbmtHZW5lcmF0b3IgIT0gbnVsbHB0cjsKLSAgICBpbnN0YWxsc1J1bnRpbWUgPSBpbnN0YWxsc1J1bnRpbWUgfHwgcnVudGltZUdlbmVyYXRvciAhPSBudWxscHRyOwotICAgIGluc3RhbGxzT2JqZWN0ID0gaW5zdGFsbHNPYmplY3QgfHwgb2JqZWN0R2VuZXJhdG9yICE9IG51bGxwdHI7Ci0gICAgaW5zdGFsbHNGcmFtZXdvcmsgPSBpbnN0YWxsc0ZyYW1ld29yayB8fCBmcmFtZXdvcmtHZW5lcmF0b3IgIT0gbnVsbHB0cjsKLSAgICBpbnN0YWxsc0J1bmRsZSA9IGluc3RhbGxzQnVuZGxlIHx8IGJ1bmRsZUdlbmVyYXRvciAhPSBudWxscHRyOwotICAgIGluc3RhbGxzUHJpdmF0ZUhlYWRlciA9Ci0gICAgICBpbnN0YWxsc1ByaXZhdGVIZWFkZXIgfHwgcHJpdmF0ZUhlYWRlckdlbmVyYXRvciAhPSBudWxscHRyOwotICAgIGluc3RhbGxzUHVibGljSGVhZGVyID0KLSAgICAgIGluc3RhbGxzUHVibGljSGVhZGVyIHx8IHB1YmxpY0hlYWRlckdlbmVyYXRvciAhPSBudWxscHRyOwotICAgIGluc3RhbGxzUmVzb3VyY2UgPSBpbnN0YWxsc1Jlc291cmNlIHx8IHJlc291cmNlR2VuZXJhdG9yOwotCi0gICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKGFyY2hpdmVHZW5lcmF0b3IpOwotICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihsaWJyYXJ5R2VuZXJhdG9yKTsKLSAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IobmFtZWxpbmtHZW5lcmF0b3IpOwotICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihydW50aW1lR2VuZXJhdG9yKTsKLSAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3Iob2JqZWN0R2VuZXJhdG9yKTsKLSAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IoZnJhbWV3b3JrR2VuZXJhdG9yKTsKLSAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IoYnVuZGxlR2VuZXJhdG9yKTsKLSAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3IocHJpdmF0ZUhlYWRlckdlbmVyYXRvcik7Ci0gICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHB1YmxpY0hlYWRlckdlbmVyYXRvcik7Ci0gICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHJlc291cmNlR2VuZXJhdG9yKTsKLQogICAgIC8vIEFkZCB0aGlzIGluc3RhbGwgcnVsZSB0byBhbiBleHBvcnQgaWYgb25lIHdhcyBzcGVjaWZpZWQgYW5kCiAgICAgLy8gdGhpcyBpcyBub3QgYSBuYW1lbGluay1vbmx5IHJ1bGUuCiAgICAgaWYgKCFleHBvcnRzLmVtcHR5KCkgJiYgIW5hbWVsaW5rT25seSkgewogICAgICAgYXV0byB0ZSA9IGNtOjptYWtlX3VuaXF1ZTxjbVRhcmdldEV4cG9ydD4oKTsKICAgICAgIHRlLT5UYXJnZXROYW1lID0gdGFyZ2V0LkdldE5hbWUoKTsKLSAgICAgIHRlLT5BcmNoaXZlR2VuZXJhdG9yID0gYXJjaGl2ZUdlbmVyYXRvcjsKLSAgICAgIHRlLT5CdW5kbGVHZW5lcmF0b3IgPSBidW5kbGVHZW5lcmF0b3I7Ci0gICAgICB0ZS0+RnJhbWV3b3JrR2VuZXJhdG9yID0gZnJhbWV3b3JrR2VuZXJhdG9yOwotICAgICAgdGUtPkhlYWRlckdlbmVyYXRvciA9IHB1YmxpY0hlYWRlckdlbmVyYXRvcjsKLSAgICAgIHRlLT5MaWJyYXJ5R2VuZXJhdG9yID0gbGlicmFyeUdlbmVyYXRvcjsKLSAgICAgIHRlLT5SdW50aW1lR2VuZXJhdG9yID0gcnVudGltZUdlbmVyYXRvcjsKLSAgICAgIHRlLT5PYmplY3RzR2VuZXJhdG9yID0gb2JqZWN0R2VuZXJhdG9yOworICAgICAgdGUtPkFyY2hpdmVHZW5lcmF0b3IgPSBhcmNoaXZlR2VuZXJhdG9yLmdldCgpOworICAgICAgdGUtPkJ1bmRsZUdlbmVyYXRvciA9IGJ1bmRsZUdlbmVyYXRvci5nZXQoKTsKKyAgICAgIHRlLT5GcmFtZXdvcmtHZW5lcmF0b3IgPSBmcmFtZXdvcmtHZW5lcmF0b3IuZ2V0KCk7CisgICAgICB0ZS0+SGVhZGVyR2VuZXJhdG9yID0gcHVibGljSGVhZGVyR2VuZXJhdG9yLmdldCgpOworICAgICAgdGUtPkxpYnJhcnlHZW5lcmF0b3IgPSBsaWJyYXJ5R2VuZXJhdG9yLmdldCgpOworICAgICAgdGUtPlJ1bnRpbWVHZW5lcmF0b3IgPSBydW50aW1lR2VuZXJhdG9yLmdldCgpOworICAgICAgdGUtPk9iamVjdHNHZW5lcmF0b3IgPSBvYmplY3RHZW5lcmF0b3IuZ2V0KCk7CiAgICAgICB0ZS0+SW50ZXJmYWNlSW5jbHVkZURpcmVjdG9yaWVzID0KICAgICAgICAgY21Kb2luKGluY2x1ZGVzQXJncy5HZXRJbmNsdWRlRGlycygpLCAiOyIpOwogCkBAIC03ODgsNiArNzYzLDI5IEBACiAgICAgICAgIC0+R2V0RXhwb3J0U2V0cygpW2V4cG9ydHNdCiAgICAgICAgIC5BZGRUYXJnZXRFeHBvcnQoc3RkOjptb3ZlKHRlKSk7CiAgICAgfQorCisgICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIHdlJ3JlIGluc3RhbGxpbmcgYW55dGhpbmcgaW4gZWFjaCBjYXRlZ29yeQorICAgIGluc3RhbGxzQXJjaGl2ZSA9IGluc3RhbGxzQXJjaGl2ZSB8fCBhcmNoaXZlR2VuZXJhdG9yOworICAgIGluc3RhbGxzTGlicmFyeSA9IGluc3RhbGxzTGlicmFyeSB8fCBsaWJyYXJ5R2VuZXJhdG9yOworICAgIGluc3RhbGxzTmFtZWxpbmsgPSBpbnN0YWxsc05hbWVsaW5rIHx8IG5hbWVsaW5rR2VuZXJhdG9yOworICAgIGluc3RhbGxzUnVudGltZSA9IGluc3RhbGxzUnVudGltZSB8fCBydW50aW1lR2VuZXJhdG9yOworICAgIGluc3RhbGxzT2JqZWN0ID0gaW5zdGFsbHNPYmplY3QgfHwgb2JqZWN0R2VuZXJhdG9yOworICAgIGluc3RhbGxzRnJhbWV3b3JrID0gaW5zdGFsbHNGcmFtZXdvcmsgfHwgZnJhbWV3b3JrR2VuZXJhdG9yOworICAgIGluc3RhbGxzQnVuZGxlID0gaW5zdGFsbHNCdW5kbGUgfHwgYnVuZGxlR2VuZXJhdG9yOworICAgIGluc3RhbGxzUHJpdmF0ZUhlYWRlciA9IGluc3RhbGxzUHJpdmF0ZUhlYWRlciB8fCBwcml2YXRlSGVhZGVyR2VuZXJhdG9yOworICAgIGluc3RhbGxzUHVibGljSGVhZGVyID0gaW5zdGFsbHNQdWJsaWNIZWFkZXIgfHwgcHVibGljSGVhZGVyR2VuZXJhdG9yOworICAgIGluc3RhbGxzUmVzb3VyY2UgPSBpbnN0YWxsc1Jlc291cmNlIHx8IHJlc291cmNlR2VuZXJhdG9yOworCisgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6bW92ZShhcmNoaXZlR2VuZXJhdG9yKSk7CisgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6bW92ZShsaWJyYXJ5R2VuZXJhdG9yKSk7CisgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6bW92ZShuYW1lbGlua0dlbmVyYXRvcikpOworICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihzdGQ6Om1vdmUocnVudGltZUdlbmVyYXRvcikpOworICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihzdGQ6Om1vdmUob2JqZWN0R2VuZXJhdG9yKSk7CisgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6bW92ZShmcmFtZXdvcmtHZW5lcmF0b3IpKTsKKyAgICBoZWxwZXIuTWFrZWZpbGUtPkFkZEluc3RhbGxHZW5lcmF0b3Ioc3RkOjptb3ZlKGJ1bmRsZUdlbmVyYXRvcikpOworICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihzdGQ6Om1vdmUocHJpdmF0ZUhlYWRlckdlbmVyYXRvcikpOworICAgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihzdGQ6Om1vdmUocHVibGljSGVhZGVyR2VuZXJhdG9yKSk7CisgICAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6bW92ZShyZXNvdXJjZUdlbmVyYXRvcikpOwogICB9CiAKICAgLy8gVGVsbCB0aGUgZ2xvYmFsIGdlbmVyYXRvciBhYm91dCBhbnkgaW5zdGFsbGF0aW9uIGNvbXBvbmVudCBuYW1lcwpAQCAtOTc1LDcgKzk3Myw3IEBACiAgIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCA9IGZhbHNlOwogICBib29sIG1lc3NhZ2VfbmV2ZXIgPSBmYWxzZTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRpcnM7Ci0gIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uID0gbnVsbHB0cjsKKyAgY29uc3Qgc3RkOjpzdHJpbmcqIGRlc3RpbmF0aW9uID0gbnVsbHB0cjsKICAgc3RkOjpzdHJpbmcgcGVybWlzc2lvbnNfZmlsZTsKICAgc3RkOjpzdHJpbmcgcGVybWlzc2lvbnNfZGlyOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlndXJhdGlvbnM7CkBAIC0xMTM0LDcgKzExMzIsNyBAQAogICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdDb25maWd1cmF0aW9ucykgewogICAgICAgY29uZmlndXJhdGlvbnMucHVzaF9iYWNrKGFyZ3NbaV0pOwogICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdEZXN0aW5hdGlvbikgewotICAgICAgZGVzdGluYXRpb24gPSBhcmdzW2ldLmNfc3RyKCk7CisgICAgICBkZXN0aW5hdGlvbiA9ICZhcmdzW2ldOwogICAgICAgZG9pbmcgPSBEb2luZ05vbmU7CiAgICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ1R5cGUpIHsKICAgICAgIGlmIChhbGxvd2VkVHlwZXMuY291bnQoYXJnc1tpXSkgPT0gMCkgewpAQCAtMTE1OSw3ICsxMTU3LDcgQEAKICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nUmVnZXgpIHsKICAgICAgIGxpdGVyYWxfYXJncyArPSAiIFJFR0VYIFwiIjsKIC8vIE1hdGNoIHJ1bGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIG9uIHNvbWUgcGxhdGZvcm1zLgotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4ID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKGFyZ3NbaV0pOwogI2Vsc2UKICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4ID0gYXJnc1tpXTsKQEAgLTEyMjAsNyArMTIxOCw3IEBACiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGRlc3RpbmF0aW9uU3RyID0gaGVscGVyLkdldERlc3RpbmF0aW9uRm9yVHlwZShudWxscHRyLCB0eXBlKTsKLSAgICBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uU3RyLmNfc3RyKCk7CisgICAgZGVzdGluYXRpb24gPSAmZGVzdGluYXRpb25TdHI7CiAgIH0gZWxzZSBpZiAoIXR5cGUuZW1wdHkoKSkgewogICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdChhcmdzWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGdpdmVuIGJvdGggVFlQRSBhbmQgREVTVElOQVRJT04gIgpAQCAtMTIzMiwxMCArMTIzMCwxMCBAQAogICAgIGNtSW5zdGFsbEdlbmVyYXRvcjo6U2VsZWN0TWVzc2FnZUxldmVsKGhlbHBlci5NYWtlZmlsZSwgbWVzc2FnZV9uZXZlcik7CiAKICAgLy8gQ3JlYXRlIHRoZSBkaXJlY3RvcnkgaW5zdGFsbCBnZW5lcmF0b3IuCi0gIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcihuZXcgY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yKAotICAgIGRpcnMsIGRlc3RpbmF0aW9uLCBwZXJtaXNzaW9uc19maWxlLmNfc3RyKCksIHBlcm1pc3Npb25zX2Rpci5jX3N0cigpLAotICAgIGNvbmZpZ3VyYXRpb25zLCBjb21wb25lbnQuY19zdHIoKSwgbWVzc2FnZSwgZXhjbHVkZV9mcm9tX2FsbCwKLSAgICBsaXRlcmFsX2FyZ3MuY19zdHIoKSwgb3B0aW9uYWwpKTsKKyAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKAorICAgIGNtOjptYWtlX3VuaXF1ZTxjbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3I+KAorICAgICAgZGlycywgKmRlc3RpbmF0aW9uLCBwZXJtaXNzaW9uc19maWxlLCBwZXJtaXNzaW9uc19kaXIsIGNvbmZpZ3VyYXRpb25zLAorICAgICAgY29tcG9uZW50LCBtZXNzYWdlLCBleGNsdWRlX2Zyb21fYWxsLCBsaXRlcmFsX2FyZ3MsIG9wdGlvbmFsKSk7CiAKICAgLy8gVGVsbCB0aGUgZ2xvYmFsIGdlbmVyYXRvciBhYm91dCBhbnkgaW5zdGFsbGF0aW9uIGNvbXBvbmVudCBuYW1lcwogICAvLyBzcGVjaWZpZWQuCkBAIC0xMzIzLDEyICsxMzIxLDExIEBACiAgICAgY21JbnN0YWxsR2VuZXJhdG9yOjpTZWxlY3RNZXNzYWdlTGV2ZWwoaGVscGVyLk1ha2VmaWxlKTsKIAogICAvLyBDcmVhdGUgdGhlIGV4cG9ydCBpbnN0YWxsIGdlbmVyYXRvci4KLSAgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKiBleHBvcnRHZW5lcmF0b3IgPSBuZXcgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKAotICAgICZleHBvcnRTZXQsIGljYS5HZXREZXN0aW5hdGlvbigpLmNfc3RyKCksIGljYS5HZXRQZXJtaXNzaW9ucygpLmNfc3RyKCksCi0gICAgaWNhLkdldENvbmZpZ3VyYXRpb25zKCksIGljYS5HZXRDb21wb25lbnQoKS5jX3N0cigpLCBtZXNzYWdlLAotICAgIGljYS5HZXRFeGNsdWRlRnJvbUFsbCgpLCBmbmFtZS5jX3N0cigpLCBuYW1lX3NwYWNlLmNfc3RyKCksIGV4cG9ydE9sZCwKLSAgICB0cnVlKTsKLSAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKGV4cG9ydEdlbmVyYXRvcik7CisgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yPigKKyAgICAgICZleHBvcnRTZXQsIGljYS5HZXREZXN0aW5hdGlvbigpLCBpY2EuR2V0UGVybWlzc2lvbnMoKSwKKyAgICAgIGljYS5HZXRDb25maWd1cmF0aW9ucygpLCBpY2EuR2V0Q29tcG9uZW50KCksIG1lc3NhZ2UsCisgICAgICBpY2EuR2V0RXhjbHVkZUZyb21BbGwoKSwgZm5hbWUsIG5hbWVfc3BhY2UsIGV4cG9ydE9sZCwgdHJ1ZSkpOwogCiAgIHJldHVybiB0cnVlOwogI2Vsc2UKQEAgLTE0MzcsMTIgKzE0MzQsMTEgQEAKICAgICBjbUluc3RhbGxHZW5lcmF0b3I6OlNlbGVjdE1lc3NhZ2VMZXZlbChoZWxwZXIuTWFrZWZpbGUpOwogCiAgIC8vIENyZWF0ZSB0aGUgZXhwb3J0IGluc3RhbGwgZ2VuZXJhdG9yLgotICBjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IqIGV4cG9ydEdlbmVyYXRvciA9IG5ldyBjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IoCi0gICAgJmV4cG9ydFNldCwgaWNhLkdldERlc3RpbmF0aW9uKCkuY19zdHIoKSwgaWNhLkdldFBlcm1pc3Npb25zKCkuY19zdHIoKSwKLSAgICBpY2EuR2V0Q29uZmlndXJhdGlvbnMoKSwgaWNhLkdldENvbXBvbmVudCgpLmNfc3RyKCksIG1lc3NhZ2UsCi0gICAgaWNhLkdldEV4Y2x1ZGVGcm9tQWxsKCksIGZuYW1lLmNfc3RyKCksIG5hbWVfc3BhY2UuY19zdHIoKSwgZXhwb3J0T2xkLAotICAgIGZhbHNlKTsKLSAgaGVscGVyLk1ha2VmaWxlLT5BZGRJbnN0YWxsR2VuZXJhdG9yKGV4cG9ydEdlbmVyYXRvcik7CisgIGhlbHBlci5NYWtlZmlsZS0+QWRkSW5zdGFsbEdlbmVyYXRvcigKKyAgICBjbTo6bWFrZV91bmlxdWU8Y21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yPigKKyAgICAgICZleHBvcnRTZXQsIGljYS5HZXREZXN0aW5hdGlvbigpLCBpY2EuR2V0UGVybWlzc2lvbnMoKSwKKyAgICAgIGljYS5HZXRDb25maWd1cmF0aW9ucygpLCBpY2EuR2V0Q29tcG9uZW50KCksIG1lc3NhZ2UsCisgICAgICBpY2EuR2V0RXhjbHVkZUZyb21BbGwoKSwgZm5hbWUsIG5hbWVfc3BhY2UsIGV4cG9ydE9sZCwgZmFsc2UpKTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxDb21tYW5kQXJndW1lbnRzLmN4eCBiL1NvdXJjZS9jbUluc3RhbGxDb21tYW5kQXJndW1lbnRzLmN4eAppbmRleCAzMWJhNjNmLi5hMDM0Njg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsQ29tbWFuZEFyZ3VtZW50cy5jeHgKKysrIGIvU291cmNlL2NtSW5zdGFsbENvbW1hbmRBcmd1bWVudHMuY3h4CkBAIC00LDcgKzQsNyBAQAogCiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbERpcmVjdG9yeUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yLmN4eAppbmRleCAyNTljN2Y3Li4xNzVlN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yLmN4eApAQCAtMiw2ICsyLDggQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtSW5zdGFsbERpcmVjdG9yeUdlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8dXRpbGl0eT4KKwogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtSW5zdGFsbFR5cGUuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCkBAIC0xMCwxOCArMTIsMTggQEAKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKIGNtSW5zdGFsbERpcmVjdG9yeUdlbmVyYXRvcjo6Y21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yKAotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGRpcnMsIGNvbnN0IGNoYXIqIGRlc3QsCi0gIGNvbnN0IGNoYXIqIGZpbGVfcGVybWlzc2lvbnMsIGNvbnN0IGNoYXIqIGRpcl9wZXJtaXNzaW9ucywKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywgY29uc3QgY2hhciogY29tcG9uZW50LAotICBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLCBjb25zdCBjaGFyKiBsaXRlcmFsX2FyZ3MsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZGlycywgc3RkOjpzdHJpbmcgY29uc3QmIGRlc3QsCisgIHN0ZDo6c3RyaW5nIGZpbGVfcGVybWlzc2lvbnMsIHN0ZDo6c3RyaW5nIGRpcl9wZXJtaXNzaW9ucywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywgc3RkOjpzdHJpbmcgY29uc3QmIGNvbXBvbmVudCwKKyAgTWVzc2FnZUxldmVsIG1lc3NhZ2UsIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCwgc3RkOjpzdHJpbmcgbGl0ZXJhbF9hcmdzLAogICBib29sIG9wdGlvbmFsKQogICA6IGNtSW5zdGFsbEdlbmVyYXRvcihkZXN0LCBjb25maWd1cmF0aW9ucywgY29tcG9uZW50LCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2Zyb21fYWxsKQogICAsIExvY2FsR2VuZXJhdG9yKG51bGxwdHIpCiAgICwgRGlyZWN0b3JpZXMoZGlycykKLSAgLCBGaWxlUGVybWlzc2lvbnMoZmlsZV9wZXJtaXNzaW9ucykKLSAgLCBEaXJQZXJtaXNzaW9ucyhkaXJfcGVybWlzc2lvbnMpCi0gICwgTGl0ZXJhbEFyZ3VtZW50cyhsaXRlcmFsX2FyZ3MpCisgICwgRmlsZVBlcm1pc3Npb25zKHN0ZDo6bW92ZShmaWxlX3Blcm1pc3Npb25zKSkKKyAgLCBEaXJQZXJtaXNzaW9ucyhzdGQ6Om1vdmUoZGlyX3Blcm1pc3Npb25zKSkKKyAgLCBMaXRlcmFsQXJndW1lbnRzKHN0ZDo6bW92ZShsaXRlcmFsX2FyZ3MpKQogICAsIE9wdGlvbmFsKG9wdGlvbmFsKQogewogICAvLyBXZSBuZWVkIHBlci1jb25maWcgYWN0aW9ucyBpZiBkZXN0aW5hdGlvbiBoYXZlIGdlbmVyYXRvciBleHByZXNzaW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUluc3RhbGxEaXJlY3RvcnlHZW5lcmF0b3IuaAppbmRleCA4NGMwNjk0Li5iZWM4OWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtSW5zdGFsbERpcmVjdG9yeUdlbmVyYXRvci5oCkBAIC0yMSwxMiArMjEsMTMgQEAKIHsKIHB1YmxpYzoKICAgY21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlc3QsIGNvbnN0IGNoYXIqIGZpbGVfcGVybWlzc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkaXJfcGVybWlzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVfcGVybWlzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBkaXJfcGVybWlzc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCwgY29uc3QgY2hhciogbGl0ZXJhbF9hcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvcHRpb25hbCA9IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbGl0ZXJhbF9hcmdzLCBib29sIG9wdGlvbmFsID0gZmFsc2UpOwogICB+Y21JbnN0YWxsRGlyZWN0b3J5R2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKICAgYm9vbCBDb21wdXRlKGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBvdmVycmlkZTsKQEAgLTQxLDExICs0MiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudCBpbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBkaXJzKTsKICAgY21Mb2NhbEdlbmVyYXRvciogTG9jYWxHZW5lcmF0b3I7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBEaXJlY3RvcmllczsKLSAgc3RkOjpzdHJpbmcgRmlsZVBlcm1pc3Npb25zOwotICBzdGQ6OnN0cmluZyBEaXJQZXJtaXNzaW9uczsKLSAgc3RkOjpzdHJpbmcgTGl0ZXJhbEFyZ3VtZW50czsKLSAgYm9vbCBPcHRpb25hbDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0IERpcmVjdG9yaWVzOworICBzdGQ6OnN0cmluZyBjb25zdCBGaWxlUGVybWlzc2lvbnM7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IERpclBlcm1pc3Npb25zOworICBzdGQ6OnN0cmluZyBjb25zdCBMaXRlcmFsQXJndW1lbnRzOworICBib29sIGNvbnN0IE9wdGlvbmFsOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IuY3h4CmluZGV4IGNiYTY4YmUuLjZlMzUwOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IuY3h4CkBAIC03LDYgKzcsOCBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtL21lbW9yeT4KKwogI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKICMgIGluY2x1ZGUgImNtRXhwb3J0SW5zdGFsbEFuZHJvaWRNS0dlbmVyYXRvci5oIgogI2VuZGlmCkBAIC0xOCwzMyArMjAsMzAgQEAKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKIGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcjo6Y21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKAotICBjbUV4cG9ydFNldCogZXhwb3J0U2V0LCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbiwKLSAgY29uc3QgY2hhciogZmlsZV9wZXJtaXNzaW9ucywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywKLSAgY29uc3QgY2hhciogY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLAotICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgY2hhciogbmFtZV9zcGFjZSwgYm9vbCBleHBvcnRPbGQsIGJvb2wgYW5kcm9pZCkKKyAgY21FeHBvcnRTZXQqIGV4cG9ydFNldCwgc3RkOjpzdHJpbmcgY29uc3QmIGRlc3RpbmF0aW9uLAorICBzdGQ6OnN0cmluZyBmaWxlX3Blcm1pc3Npb25zLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLAorICBzdGQ6OnN0cmluZyBjb25zdCYgY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLAorICBzdGQ6OnN0cmluZyBmaWxlbmFtZSwgc3RkOjpzdHJpbmcgbmFtZV9zcGFjZSwgYm9vbCBleHBvcnRPbGQsIGJvb2wgYW5kcm9pZCkKICAgOiBjbUluc3RhbGxHZW5lcmF0b3IoZGVzdGluYXRpb24sIGNvbmZpZ3VyYXRpb25zLCBjb21wb25lbnQsIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZnJvbV9hbGwpCiAgICwgRXhwb3J0U2V0KGV4cG9ydFNldCkKLSAgLCBGaWxlUGVybWlzc2lvbnMoZmlsZV9wZXJtaXNzaW9ucykKLSAgLCBGaWxlTmFtZShmaWxlbmFtZSkKLSAgLCBOYW1lc3BhY2UobmFtZV9zcGFjZSkKKyAgLCBGaWxlUGVybWlzc2lvbnMoc3RkOjptb3ZlKGZpbGVfcGVybWlzc2lvbnMpKQorICAsIEZpbGVOYW1lKHN0ZDo6bW92ZShmaWxlbmFtZSkpCisgICwgTmFtZXNwYWNlKHN0ZDo6bW92ZShuYW1lX3NwYWNlKSkKICAgLCBFeHBvcnRPbGQoZXhwb3J0T2xkKQogICAsIExvY2FsR2VuZXJhdG9yKG51bGxwdHIpCiB7CiAgIGlmIChhbmRyb2lkKSB7CiAjaWZuZGVmIENNQUtFX0JPT1RTVFJBUAotICAgIHRoaXMtPkVGR2VuID0gbmV3IGNtRXhwb3J0SW5zdGFsbEFuZHJvaWRNS0dlbmVyYXRvcih0aGlzKTsKKyAgICB0aGlzLT5FRkdlbiA9IGNtOjptYWtlX3VuaXF1ZTxjbUV4cG9ydEluc3RhbGxBbmRyb2lkTUtHZW5lcmF0b3I+KHRoaXMpOwogI2VuZGlmCiAgIH0gZWxzZSB7Ci0gICAgdGhpcy0+RUZHZW4gPSBuZXcgY21FeHBvcnRJbnN0YWxsRmlsZUdlbmVyYXRvcih0aGlzKTsKKyAgICB0aGlzLT5FRkdlbiA9IGNtOjptYWtlX3VuaXF1ZTxjbUV4cG9ydEluc3RhbGxGaWxlR2VuZXJhdG9yPih0aGlzKTsKICAgfQogICBleHBvcnRTZXQtPkFkZEluc3RhbGxhdGlvbih0aGlzKTsKIH0KIAotY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yOjp+Y21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKCkKLXsKLSAgZGVsZXRlIHRoaXMtPkVGR2VuOwotfQorY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yOjp+Y21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiBib29sIGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcjo6Q29tcHV0ZShjbUxvY2FsR2VuZXJhdG9yKiBsZykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IuaAppbmRleCBmNDQxMjdlLi40M2RkMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtSW5zdGFsbEV4cG9ydEdlbmVyYXRvci5oCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKQEAgLTIzLDE1ICsyNCwxOSBAQAogY2xhc3MgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yIDogcHVibGljIGNtSW5zdGFsbEdlbmVyYXRvcgogewogcHVibGljOgotICBjbUluc3RhbGxFeHBvcnRHZW5lcmF0b3IoY21FeHBvcnRTZXQqIGV4cG9ydFNldCwgY29uc3QgY2hhciogZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVfcGVybWlzc2lvbnMsCisgIGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvcihjbUV4cG9ydFNldCogZXhwb3J0U2V0LCBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVfcGVybWlzc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvbmZpZ3VyYXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCwgY29uc3QgY2hhciogZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lX3NwYWNlLCBib29sIGV4cG9ydE9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX2Zyb21fYWxsLCBzdGQ6OnN0cmluZyBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWVfc3BhY2UsIGJvb2wgZXhwb3J0T2xkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbmRyb2lkKTsKKyAgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKGNvbnN0IGNtSW5zdGFsbEV4cG9ydEdlbmVyYXRvciYpID0gZGVsZXRlOwogICB+Y21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKKyAgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgY21JbnN0YWxsRXhwb3J0R2VuZXJhdG9yJikgPQorICAgIGRlbGV0ZTsKKwogICBjbUV4cG9ydFNldCogR2V0RXhwb3J0U2V0KCkgeyByZXR1cm4gdGhpcy0+RXhwb3J0U2V0OyB9CiAKICAgYm9vbCBDb21wdXRlKGNtTG9jYWxHZW5lcmF0b3IqIGxnKSBvdmVycmlkZTsKQEAgLTUyLDE2ICs1NywxNiBAQAogICB2b2lkIENvbXB1dGVUZW1wRGlyKCk7CiAgIHNpemVfdCBHZXRNYXhDb25maWdMZW5ndGgoKSBjb25zdDsKIAotICBjbUV4cG9ydFNldCogRXhwb3J0U2V0OwotICBzdGQ6OnN0cmluZyBGaWxlUGVybWlzc2lvbnM7Ci0gIHN0ZDo6c3RyaW5nIEZpbGVOYW1lOwotICBzdGQ6OnN0cmluZyBOYW1lc3BhY2U7Ci0gIGJvb2wgRXhwb3J0T2xkOworICBjbUV4cG9ydFNldCogY29uc3QgRXhwb3J0U2V0OworICBzdGQ6OnN0cmluZyBjb25zdCBGaWxlUGVybWlzc2lvbnM7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IEZpbGVOYW1lOworICBzdGQ6OnN0cmluZyBjb25zdCBOYW1lc3BhY2U7CisgIGJvb2wgY29uc3QgRXhwb3J0T2xkOwogICBjbUxvY2FsR2VuZXJhdG9yKiBMb2NhbEdlbmVyYXRvcjsKIAogICBzdGQ6OnN0cmluZyBUZW1wRGlyOwogICBzdGQ6OnN0cmluZyBNYWluSW1wb3J0RmlsZTsKLSAgY21FeHBvcnRJbnN0YWxsRmlsZUdlbmVyYXRvciogRUZHZW47CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUV4cG9ydEluc3RhbGxGaWxlR2VuZXJhdG9yPiBFRkdlbjsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbEZpbGVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21JbnN0YWxsRmlsZXNDb21tYW5kLmN4eAppbmRleCBkNjIzOTQzLi4zYzU5ZjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsRmlsZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsRmlsZXNDb21tYW5kLmN4eApAQCAtMiwxNiArMiwyMSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21JbnN0YWxsRmlsZXNDb21tYW5kLmgiCiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUluc3RhbGxHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKK2NsYXNzIGNtTGlzdEZpbGVCYWNrdHJhY2U7CisKIHN0YXRpYyBzdGQ6OnN0cmluZyBGaW5kSW5zdGFsbFNvdXJjZShjbU1ha2VmaWxlJiBtYWtlZmlsZSwgY29uc3QgY2hhciogbmFtZSk7CiBzdGF0aWMgdm9pZCBDcmVhdGVJbnN0YWxsR2VuZXJhdG9yKGNtTWFrZWZpbGUmIG1ha2VmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwKQEAgLTQzLDkgKzQ4LDEwIEBACiAgICAgQ3JlYXRlSW5zdGFsbEdlbmVyYXRvcihtZiwgZGVzdCwgZmlsZXMpOwogICB9IGVsc2UgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaW5hbEFyZ3MoYXJncy5iZWdpbigpICsgMSwgYXJncy5lbmQoKSk7Ci0gICAgbWYuQWRkRmluYWxBY3Rpb24oW2Rlc3QsIGZpbmFsQXJnc10oY21NYWtlZmlsZSYgbWFrZWZpbGUpIHsKLSAgICAgIEZpbmFsQWN0aW9uKG1ha2VmaWxlLCBkZXN0LCBmaW5hbEFyZ3MpOwotICAgIH0pOworICAgIG1mLkFkZEdlbmVyYXRvckFjdGlvbigKKyAgICAgIFtkZXN0LCBmaW5hbEFyZ3NdKGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJikgeworICAgICAgICBGaW5hbEFjdGlvbigqbGcuR2V0TWFrZWZpbGUoKSwgZGVzdCwgZmluYWxBcmdzKTsKKyAgICAgIH0pOwogICB9CiAKICAgbWYuR2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZEluc3RhbGxDb21wb25lbnQoCkBAIC0xMDksMTcgKzExNSwxNyBAQAogICB9CiAKICAgLy8gVXNlIGEgZmlsZSBpbnN0YWxsIGdlbmVyYXRvci4KLSAgY29uc3QgY2hhciogbm9fcGVybWlzc2lvbnMgPSAiIjsKLSAgY29uc3QgY2hhciogbm9fcmVuYW1lID0gIiI7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIG5vX3Blcm1pc3Npb25zOworICBjb25zdCBzdGQ6OnN0cmluZyBub19yZW5hbWU7CiAgIGJvb2wgbm9fZXhjbHVkZV9mcm9tX2FsbCA9IGZhbHNlOwogICBzdGQ6OnN0cmluZyBub19jb21wb25lbnQgPQogICAgIG1ha2VmaWxlLkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9JTlNUQUxMX0RFRkFVTFRfQ09NUE9ORU5UX05BTUUiKTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2NvbmZpZ3VyYXRpb25zOwogICBjbUluc3RhbGxHZW5lcmF0b3I6Ok1lc3NhZ2VMZXZlbCBtZXNzYWdlID0KICAgICBjbUluc3RhbGxHZW5lcmF0b3I6OlNlbGVjdE1lc3NhZ2VMZXZlbCgmbWFrZWZpbGUpOwotICBtYWtlZmlsZS5BZGRJbnN0YWxsR2VuZXJhdG9yKG5ldyBjbUluc3RhbGxGaWxlc0dlbmVyYXRvcigKLSAgICBmaWxlcywgZGVzdGluYXRpb24uY19zdHIoKSwgZmFsc2UsIG5vX3Blcm1pc3Npb25zLCBub19jb25maWd1cmF0aW9ucywKLSAgICBub19jb21wb25lbnQuY19zdHIoKSwgbWVzc2FnZSwgbm9fZXhjbHVkZV9mcm9tX2FsbCwgbm9fcmVuYW1lKSk7CisgIG1ha2VmaWxlLkFkZEluc3RhbGxHZW5lcmF0b3IoY206Om1ha2VfdW5pcXVlPGNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yPigKKyAgICBmaWxlcywgZGVzdGluYXRpb24sIGZhbHNlLCBub19wZXJtaXNzaW9ucywgbm9fY29uZmlndXJhdGlvbnMsIG5vX2NvbXBvbmVudCwKKyAgICBtZXNzYWdlLCBub19leGNsdWRlX2Zyb21fYWxsLCBub19yZW5hbWUpKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtSW5zdGFsbEZpbGVzR2VuZXJhdG9yLmN4eAppbmRleCBmNWI2OWE1Li5hZDJmODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsRmlsZXNHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxGaWxlc0dlbmVyYXRvci5jeHgKQEAgLTIsNiArMiw4IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbUluc3RhbGxGaWxlc0dlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8dXRpbGl0eT4KKwogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtSW5zdGFsbFR5cGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTksMTYgKzExLDE3IEBACiBjbGFzcyBjbUxvY2FsR2VuZXJhdG9yOwogCiBjbUluc3RhbGxGaWxlc0dlbmVyYXRvcjo6Y21JbnN0YWxsRmlsZXNHZW5lcmF0b3IoCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZmlsZXMsIGNvbnN0IGNoYXIqIGRlc3QsIGJvb2wgcHJvZ3JhbXMsCi0gIGNvbnN0IGNoYXIqIGZpbGVfcGVybWlzc2lvbnMsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlndXJhdGlvbnMsCi0gIGNvbnN0IGNoYXIqIGNvbXBvbmVudCwgTWVzc2FnZUxldmVsIG1lc3NhZ2UsIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCwKLSAgY29uc3QgY2hhciogcmVuYW1lLCBib29sIG9wdGlvbmFsKQorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGZpbGVzLCBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwKKyAgYm9vbCBwcm9ncmFtcywgc3RkOjpzdHJpbmcgZmlsZV9wZXJtaXNzaW9ucywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywgc3RkOjpzdHJpbmcgY29uc3QmIGNvbXBvbmVudCwKKyAgTWVzc2FnZUxldmVsIG1lc3NhZ2UsIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCwgc3RkOjpzdHJpbmcgcmVuYW1lLAorICBib29sIG9wdGlvbmFsKQogICA6IGNtSW5zdGFsbEdlbmVyYXRvcihkZXN0LCBjb25maWd1cmF0aW9ucywgY29tcG9uZW50LCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2Zyb21fYWxsKQogICAsIExvY2FsR2VuZXJhdG9yKG51bGxwdHIpCiAgICwgRmlsZXMoZmlsZXMpCi0gICwgRmlsZVBlcm1pc3Npb25zKGZpbGVfcGVybWlzc2lvbnMpCi0gICwgUmVuYW1lKHJlbmFtZSkKKyAgLCBGaWxlUGVybWlzc2lvbnMoc3RkOjptb3ZlKGZpbGVfcGVybWlzc2lvbnMpKQorICAsIFJlbmFtZShzdGQ6Om1vdmUocmVuYW1lKSkKICAgLCBQcm9ncmFtcyhwcm9ncmFtcykKICAgLCBPcHRpb25hbChvcHRpb25hbCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxGaWxlc0dlbmVyYXRvci5oIGIvU291cmNlL2NtSW5zdGFsbEZpbGVzR2VuZXJhdG9yLmgKaW5kZXggYTY4MDAzNy4uODI2NjYwMyAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbEZpbGVzR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtSW5zdGFsbEZpbGVzR2VuZXJhdG9yLmgKQEAgLTIxLDExICsyMSwxMSBAQAogewogcHVibGljOgogICBjbUluc3RhbGxGaWxlc0dlbmVyYXRvcihzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZXN0LCBib29sIHByb2dyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlX3Blcm1pc3Npb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwgYm9vbCBwcm9ncmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZmlsZV9wZXJtaXNzaW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX2Zyb21fYWxsLCBjb25zdCBjaGFyKiByZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsIHN0ZDo6c3RyaW5nIHJlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvcHRpb25hbCA9IGZhbHNlKTsKICAgfmNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKQEAgLTQyLDExICs0MiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBmaWxlcyk7CiAKICAgY21Mb2NhbEdlbmVyYXRvciogTG9jYWxHZW5lcmF0b3I7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBGaWxlczsKLSAgc3RkOjpzdHJpbmcgRmlsZVBlcm1pc3Npb25zOwotICBzdGQ6OnN0cmluZyBSZW5hbWU7Ci0gIGJvb2wgUHJvZ3JhbXM7Ci0gIGJvb2wgT3B0aW9uYWw7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCBGaWxlczsKKyAgc3RkOjpzdHJpbmcgY29uc3QgRmlsZVBlcm1pc3Npb25zOworICBzdGQ6OnN0cmluZyBjb25zdCBSZW5hbWU7CisgIGJvb2wgY29uc3QgUHJvZ3JhbXM7CisgIGJvb2wgY29uc3QgT3B0aW9uYWw7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtSW5zdGFsbEdlbmVyYXRvci5jeHgKaW5kZXggZWMxNzM2MS4uMDY2NTg5NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtSW5zdGFsbEdlbmVyYXRvci5jeHgKQEAgLTMsMTYgKzMsMTcgQEAKICNpbmNsdWRlICJjbUluc3RhbGxHZW5lcmF0b3IuaCIKIAogI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKIGNtSW5zdGFsbEdlbmVyYXRvcjo6Y21JbnN0YWxsR2VuZXJhdG9yKAotICBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbiwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywKLSAgY29uc3QgY2hhciogY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsKQorICBzdGQ6OnN0cmluZyBkZXN0aW5hdGlvbiwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywKKyAgc3RkOjpzdHJpbmcgY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsKQogICA6IGNtU2NyaXB0R2VuZXJhdG9yKCJDTUFLRV9JTlNUQUxMX0NPTkZJR19OQU1FIiwgY29uZmlndXJhdGlvbnMpCi0gICwgRGVzdGluYXRpb24oZGVzdGluYXRpb24gPyBkZXN0aW5hdGlvbiA6ICIiKQotICAsIENvbXBvbmVudChjb21wb25lbnQgPyBjb21wb25lbnQgOiAiIikKKyAgLCBEZXN0aW5hdGlvbihzdGQ6Om1vdmUoZGVzdGluYXRpb24pKQorICAsIENvbXBvbmVudChzdGQ6Om1vdmUoY29tcG9uZW50KSkKICAgLCBNZXNzYWdlKG1lc3NhZ2UpCiAgICwgRXhjbHVkZUZyb21BbGwoZXhjbHVkZV9mcm9tX2FsbCkKIHsKQEAgLTEzOSw4ICsxNDAsOCBAQAogICBvcyA8PCAiKVxuIjsKIH0KIAotc3RkOjpzdHJpbmcgY21JbnN0YWxsR2VuZXJhdG9yOjpDcmVhdGVDb21wb25lbnRUZXN0KGNvbnN0IGNoYXIqIGNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVfZnJvbV9hbGwpCitzdGQ6OnN0cmluZyBjbUluc3RhbGxHZW5lcmF0b3I6OkNyZWF0ZUNvbXBvbmVudFRlc3QoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21wb25lbnQsIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCkKIHsKICAgc3RkOjpzdHJpbmcgcmVzdWx0ID0gUiIoIngke0NNQUtFX0lOU1RBTExfQ09NUE9ORU5UfXgiIFNUUkVRVUFMICJ4KSI7CiAgIHJlc3VsdCArPSBjb21wb25lbnQ7CkBAIC0xNTgsNyArMTU5LDcgQEAKIAogICAvLyBCZWdpbiB0aGlzIGJsb2NrIG9mIGluc3RhbGxhdGlvbi4KICAgc3RkOjpzdHJpbmcgY29tcG9uZW50X3Rlc3QgPQotICAgIHRoaXMtPkNyZWF0ZUNvbXBvbmVudFRlc3QodGhpcy0+Q29tcG9uZW50LmNfc3RyKCksIHRoaXMtPkV4Y2x1ZGVGcm9tQWxsKTsKKyAgICB0aGlzLT5DcmVhdGVDb21wb25lbnRUZXN0KHRoaXMtPkNvbXBvbmVudCwgdGhpcy0+RXhjbHVkZUZyb21BbGwpOwogICBvcyA8PCBpbmRlbnQgPDwgImlmKCIgPDwgY29tcG9uZW50X3Rlc3QgPDwgIilcbiI7CiAKICAgLy8gR2VuZXJhdGUgdGhlIHNjcmlwdCBwb3NzaWJseSB3aXRoIHBlci1jb25maWd1cmF0aW9uIGNvZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21JbnN0YWxsR2VuZXJhdG9yLmgKaW5kZXggMDI0MDI3ZC4uZDc4NmQyNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUluc3RhbGxHZW5lcmF0b3IuaApAQCAtMzAsOSArMzAsOSBAQAogICAgIE1lc3NhZ2VOZXZlcgogICB9OwogCi0gIGNtSW5zdGFsbEdlbmVyYXRvcihjb25zdCBjaGFyKiBkZXN0aW5hdGlvbiwKKyAgY21JbnN0YWxsR2VuZXJhdG9yKHN0ZDo6c3RyaW5nIGRlc3RpbmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWd1cmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbXBvbmVudCwgTWVzc2FnZUxldmVsIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX2Zyb21fYWxsKTsKICAgfmNtSW5zdGFsbEdlbmVyYXRvcigpIG92ZXJyaWRlOwogCkBAIC02NSwxNCArNjUsMTQgQEAKIHByb3RlY3RlZDoKICAgdm9pZCBHZW5lcmF0ZVNjcmlwdChzdGQ6Om9zdHJlYW0mIG9zKSBvdmVycmlkZTsKIAotICBzdGQ6OnN0cmluZyBDcmVhdGVDb21wb25lbnRUZXN0KGNvbnN0IGNoYXIqIGNvbXBvbmVudCwKKyAgc3RkOjpzdHJpbmcgQ3JlYXRlQ29tcG9uZW50VGVzdChjb25zdCBzdGQ6OnN0cmluZyYgY29tcG9uZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCk7CiAKICAgLy8gSW5mb3JtYXRpb24gc2hhcmVkIGJ5IG1vc3QgZ2VuZXJhdG9yIHR5cGVzLgotICBzdGQ6OnN0cmluZyBEZXN0aW5hdGlvbjsKLSAgc3RkOjpzdHJpbmcgQ29tcG9uZW50OwotICBNZXNzYWdlTGV2ZWwgTWVzc2FnZTsKLSAgYm9vbCBFeGNsdWRlRnJvbUFsbDsKKyAgc3RkOjpzdHJpbmcgY29uc3QgRGVzdGluYXRpb247CisgIHN0ZDo6c3RyaW5nIGNvbnN0IENvbXBvbmVudDsKKyAgTWVzc2FnZUxldmVsIGNvbnN0IE1lc3NhZ2U7CisgIGJvb2wgY29uc3QgRXhjbHVkZUZyb21BbGw7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxQcm9ncmFtc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtSW5zdGFsbFByb2dyYW1zQ29tbWFuZC5jeHgKaW5kZXggNmJiNDQwOS4uYmUwN2ZkNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbFByb2dyYW1zQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtSW5zdGFsbFByb2dyYW1zQ29tbWFuZC5jeHgKQEAgLTIsMTUgKzIsMjAgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtSW5zdGFsbFByb2dyYW1zQ29tbWFuZC5oIgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtSW5zdGFsbEZpbGVzR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21JbnN0YWxsR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKK2NsYXNzIGNtTGlzdEZpbGVCYWNrdHJhY2U7CisKIHN0YXRpYyB2b2lkIEZpbmFsQWN0aW9uKGNtTWFrZWZpbGUmIG1ha2VmaWxlLCBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncyk7CiBzdGF0aWMgc3RkOjpzdHJpbmcgRmluZEluc3RhbGxTb3VyY2UoY21NYWtlZmlsZSYgbWFrZWZpbGUsIGNvbnN0IGNoYXIqIG5hbWUpOwpAQCAtMzMsOSArMzgsMTAgQEAKIAogICBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCA9IGFyZ3NbMF07CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCBmaW5hbEFyZ3MoYXJncy5iZWdpbigpICsgMSwgYXJncy5lbmQoKSk7Ci0gIG1mLkFkZEZpbmFsQWN0aW9uKFtkZXN0LCBmaW5hbEFyZ3NdKGNtTWFrZWZpbGUmIG1ha2VmaWxlKSB7Ci0gICAgRmluYWxBY3Rpb24obWFrZWZpbGUsIGRlc3QsIGZpbmFsQXJncyk7Ci0gIH0pOworICBtZi5BZGRHZW5lcmF0b3JBY3Rpb24oCisgICAgW2Rlc3QsIGZpbmFsQXJnc10oY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmKSB7CisgICAgICBGaW5hbEFjdGlvbigqbGcuR2V0TWFrZWZpbGUoKSwgZGVzdCwgZmluYWxBcmdzKTsKKyAgICB9KTsKICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTgzLDE3ICs4OSwxNyBAQAogICB9CiAKICAgLy8gVXNlIGEgZmlsZSBpbnN0YWxsIGdlbmVyYXRvci4KLSAgY29uc3QgY2hhciogbm9fcGVybWlzc2lvbnMgPSAiIjsKLSAgY29uc3QgY2hhciogbm9fcmVuYW1lID0gIiI7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIG5vX3Blcm1pc3Npb25zOworICBjb25zdCBzdGQ6OnN0cmluZyBub19yZW5hbWU7CiAgIGJvb2wgbm9fZXhjbHVkZV9mcm9tX2FsbCA9IGZhbHNlOwogICBzdGQ6OnN0cmluZyBub19jb21wb25lbnQgPQogICAgIG1ha2VmaWxlLkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9JTlNUQUxMX0RFRkFVTFRfQ09NUE9ORU5UX05BTUUiKTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2NvbmZpZ3VyYXRpb25zOwogICBjbUluc3RhbGxHZW5lcmF0b3I6Ok1lc3NhZ2VMZXZlbCBtZXNzYWdlID0KICAgICBjbUluc3RhbGxHZW5lcmF0b3I6OlNlbGVjdE1lc3NhZ2VMZXZlbCgmbWFrZWZpbGUpOwotICBtYWtlZmlsZS5BZGRJbnN0YWxsR2VuZXJhdG9yKG5ldyBjbUluc3RhbGxGaWxlc0dlbmVyYXRvcigKLSAgICBmaWxlcywgZGVzdGluYXRpb24uY19zdHIoKSwgdHJ1ZSwgbm9fcGVybWlzc2lvbnMsIG5vX2NvbmZpZ3VyYXRpb25zLAotICAgIG5vX2NvbXBvbmVudC5jX3N0cigpLCBtZXNzYWdlLCBub19leGNsdWRlX2Zyb21fYWxsLCBub19yZW5hbWUpKTsKKyAgbWFrZWZpbGUuQWRkSW5zdGFsbEdlbmVyYXRvcihjbTo6bWFrZV91bmlxdWU8Y21JbnN0YWxsRmlsZXNHZW5lcmF0b3I+KAorICAgIGZpbGVzLCBkZXN0aW5hdGlvbiwgdHJ1ZSwgbm9fcGVybWlzc2lvbnMsIG5vX2NvbmZpZ3VyYXRpb25zLCBub19jb21wb25lbnQsCisgICAgbWVzc2FnZSwgbm9fZXhjbHVkZV9mcm9tX2FsbCwgbm9fcmVuYW1lKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbFNjcmlwdEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yLmN4eAppbmRleCBlYTI5NDU1Li43Y2RmM2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yLmN4eApAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlICJjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IuaCIKIAogI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKQEAgLTExLDEzICsxMiwxMiBAQAogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKICNpbmNsdWRlICJjbVNjcmlwdEdlbmVyYXRvci5oIgogCi1jbUluc3RhbGxTY3JpcHRHZW5lcmF0b3I6OmNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvcihjb25zdCBjaGFyKiBzY3JpcHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVfZnJvbV9hbGwpCi0gIDogY21JbnN0YWxsR2VuZXJhdG9yKG51bGxwdHIsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLCBjb21wb25lbnQsCitjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3I6OmNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvcigKKyAgc3RkOjpzdHJpbmcgc2NyaXB0LCBib29sIGNvZGUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21wb25lbnQsCisgIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCkKKyAgOiBjbUluc3RhbGxHZW5lcmF0b3IoIiIsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLCBjb21wb25lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VEZWZhdWx0LCBleGNsdWRlX2Zyb21fYWxsKQotICAsIFNjcmlwdChzY3JpcHQpCisgICwgU2NyaXB0KHN0ZDo6bW92ZShzY3JpcHQpKQogICAsIENvZGUoY29kZSkKICAgLCBBbGxvd0dlbmV4KGZhbHNlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbFNjcmlwdEdlbmVyYXRvci5oIGIvU291cmNlL2NtSW5zdGFsbFNjcmlwdEdlbmVyYXRvci5oCmluZGV4IDdlZmEzMjEuLjBhOWM0YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yLmgKQEAgLTE5LDggKzE5LDkgQEAKIGNsYXNzIGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvciA6IHB1YmxpYyBjbUluc3RhbGxHZW5lcmF0b3IKIHsKIHB1YmxpYzoKLSAgY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yKGNvbnN0IGNoYXIqIHNjcmlwdCwgYm9vbCBjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29tcG9uZW50LCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwpOworICBjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3Ioc3RkOjpzdHJpbmcgc2NyaXB0LCBib29sIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX2Zyb21fYWxsKTsKICAgfmNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvcigpIG92ZXJyaWRlOwogCiAgIGJvb2wgQ29tcHV0ZShjbUxvY2FsR2VuZXJhdG9yKiBsZykgb3ZlcnJpZGU7CkBAIC0zMiw4ICszMyw4IEBACiAgIHZvaWQgQWRkU2NyaXB0SW5zdGFsbFJ1bGUoc3RkOjpvc3RyZWFtJiBvcywgSW5kZW50IGluZGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgc2NyaXB0KTsKIAotICBzdGQ6OnN0cmluZyBTY3JpcHQ7Ci0gIGJvb2wgQ29kZTsKKyAgc3RkOjpzdHJpbmcgY29uc3QgU2NyaXB0OworICBib29sIGNvbnN0IENvZGU7CiAgIGNtTG9jYWxHZW5lcmF0b3IqIExvY2FsR2VuZXJhdG9yOwogICBib29sIEFsbG93R2VuZXg7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmN4eAppbmRleCA4YTBmZWZhLi4xMmJjOTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmN4eApAQCAtMiw3ICsyLDkgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvci5oIgogCisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCkBAIC0xMiwxMSArMTQsMTEgQEAKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKIGNtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvcjo6Y21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yKAotICBjbU1ha2VmaWxlKiBtYWtlZmlsZSwgY29uc3QgY2hhciogYmluYXJ5RGlyZWN0b3J5LCBib29sIGV4Y2x1ZGVGcm9tQWxsKQotICA6IGNtSW5zdGFsbEdlbmVyYXRvcihudWxscHRyLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZURlZmF1bHQsIGV4Y2x1ZGVGcm9tQWxsKQorICBjbU1ha2VmaWxlKiBtYWtlZmlsZSwgc3RkOjpzdHJpbmcgYmluYXJ5RGlyZWN0b3J5LCBib29sIGV4Y2x1ZGVGcm9tQWxsKQorICA6IGNtSW5zdGFsbEdlbmVyYXRvcigiIiwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCksICIiLCBNZXNzYWdlRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUZyb21BbGwpCiAgICwgTWFrZWZpbGUobWFrZWZpbGUpCi0gICwgQmluYXJ5RGlyZWN0b3J5KGJpbmFyeURpcmVjdG9yeSkKKyAgLCBCaW5hcnlEaXJlY3Rvcnkoc3RkOjptb3ZlKGJpbmFyeURpcmVjdG9yeSkpCiB7CiB9CiAKQEAgLTI0LDcgKzI2LDcgQEAKIAogYm9vbCBjbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3I6OkhhdmVJbnN0YWxsKCkKIHsKLSAgZm9yIChhdXRvIGdlbmVyYXRvciA6IHRoaXMtPk1ha2VmaWxlLT5HZXRJbnN0YWxsR2VuZXJhdG9ycygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgZ2VuZXJhdG9yIDogdGhpcy0+TWFrZWZpbGUtPkdldEluc3RhbGxHZW5lcmF0b3JzKCkpIHsKICAgICBpZiAoZ2VuZXJhdG9yLT5IYXZlSW5zdGFsbCgpKSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmgKaW5kZXggYjk5YmRkNS4uZjljZDBmMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IuaApAQCAtMjAsNyArMjAsNyBAQAogewogcHVibGljOgogICBjbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3IoY21NYWtlZmlsZSogbWFrZWZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBiaW5hcnlEaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBiaW5hcnlEaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVGcm9tQWxsKTsKICAgfmNtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvcigpIG92ZXJyaWRlOwogCkBAIC0zMyw4ICszMyw4IEBACiBwcm90ZWN0ZWQ6CiAgIHZvaWQgR2VuZXJhdGVTY3JpcHQoc3RkOjpvc3RyZWFtJiBvcykgb3ZlcnJpZGU7CiAKLSAgY21NYWtlZmlsZSogTWFrZWZpbGU7Ci0gIHN0ZDo6c3RyaW5nIEJpbmFyeURpcmVjdG9yeTsKKyAgY21NYWtlZmlsZSogY29uc3QgTWFrZWZpbGU7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IEJpbmFyeURpcmVjdG9yeTsKICAgY21Mb2NhbEdlbmVyYXRvciogTG9jYWxHZW5lcmF0b3I7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IGFhOTJmYTcuLjE3OGQ1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IuY3h4CkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCkBAIC0yNSwxNSArMjYsMTUgQEAKICNpbmNsdWRlICJjbWFrZS5oIgogCiBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3I6OmNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcigKLSAgc3RkOjpzdHJpbmcgdGFyZ2V0TmFtZSwgY29uc3QgY2hhciogZGVzdCwgYm9vbCBpbXBsaWIsCi0gIGNvbnN0IGNoYXIqIGZpbGVfcGVybWlzc2lvbnMsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlndXJhdGlvbnMsCi0gIGNvbnN0IGNoYXIqIGNvbXBvbmVudCwgTWVzc2FnZUxldmVsIG1lc3NhZ2UsIGJvb2wgZXhjbHVkZV9mcm9tX2FsbCwKKyAgc3RkOjpzdHJpbmcgdGFyZ2V0TmFtZSwgc3RkOjpzdHJpbmcgY29uc3QmIGRlc3QsIGJvb2wgaW1wbGliLAorICBzdGQ6OnN0cmluZyBmaWxlX3Blcm1pc3Npb25zLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLAorICBzdGQ6OnN0cmluZyBjb25zdCYgY29tcG9uZW50LCBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLAogICBib29sIG9wdGlvbmFsLCBjbUxpc3RGaWxlQmFja3RyYWNlIGJhY2t0cmFjZSkKICAgOiBjbUluc3RhbGxHZW5lcmF0b3IoZGVzdCwgY29uZmlndXJhdGlvbnMsIGNvbXBvbmVudCwgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9mcm9tX2FsbCkKICAgLCBUYXJnZXROYW1lKHN0ZDo6bW92ZSh0YXJnZXROYW1lKSkKICAgLCBUYXJnZXQobnVsbHB0cikKLSAgLCBGaWxlUGVybWlzc2lvbnMoZmlsZV9wZXJtaXNzaW9ucykKKyAgLCBGaWxlUGVybWlzc2lvbnMoc3RkOjptb3ZlKGZpbGVfcGVybWlzc2lvbnMpKQogICAsIEltcG9ydExpYnJhcnkoaW1wbGliKQogICAsIE9wdGlvbmFsKG9wdGlvbmFsKQogICAsIEJhY2t0cmFjZShzdGQ6Om1vdmUoYmFja3RyYWNlKSkKQEAgLTEzMyw4ICsxMzQsMTAgQEAKICAgICAgICAgY21NYWtlZmlsZSBjb25zdCogbWYgPSB0aGlzLT5UYXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKTsKIAogICAgICAgICAvLyBHZXQgQXBwIEJ1bmRsZSBFeHRlbnNpb24KLSAgICAgICAgY29uc3QgY2hhciogZXh0ID0gdGhpcy0+VGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQlVORExFX0VYVEVOU0lPTiIpOwotICAgICAgICBpZiAoIWV4dCkgeworICAgICAgICBzdGQ6OnN0cmluZyBleHQ7CisgICAgICAgIGlmIChjbVByb3AgcCA9IHRoaXMtPlRhcmdldC0+R2V0UHJvcGVydHkoIkJVTkRMRV9FWFRFTlNJT04iKSkgeworICAgICAgICAgIGV4dCA9ICpwOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGV4dCA9ICJhcHAiOwogICAgICAgICB9CiAKQEAgLTU1NCw3ICs1NTcsOCBAQAogICAgICAgLy8gY29tcG9uZW50cyBvZiB0aGUgaW5zdGFsbF9uYW1lIGZpZWxkIHRoZW4gd2UgbmVlZCB0byBjcmVhdGUgYQogICAgICAgLy8gbWFwcGluZyB0byBiZSBhcHBsaWVkIGFmdGVyIGluc3RhbGxhdGlvbi4KICAgICAgIHN0ZDo6c3RyaW5nIGZvcl9idWlsZCA9IHRndC0+R2V0SW5zdGFsbE5hbWVEaXJGb3JCdWlsZFRyZWUoY29uZmlnKTsKLSAgICAgIHN0ZDo6c3RyaW5nIGZvcl9pbnN0YWxsID0gdGd0LT5HZXRJbnN0YWxsTmFtZURpckZvckluc3RhbGxUcmVlKCk7CisgICAgICBzdGQ6OnN0cmluZyBmb3JfaW5zdGFsbCA9IHRndC0+R2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgKKyAgICAgICAgY29uZmlnLCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0iKTsKICAgICAgIGlmIChmb3JfYnVpbGQgIT0gZm9yX2luc3RhbGwpIHsKICAgICAgICAgLy8gVGhlIGRpcmVjdG9yeSBwb3J0aW9ucyBkaWZmZXIuICBBcHBlbmQgdGhlIGZpbGVuYW1lIHRvCiAgICAgICAgIC8vIGNyZWF0ZSB0aGUgbWFwcGluZy4KQEAgLTU3Nyw3ICs1ODEsOCBAQAogICBpZiAodGhpcy0+VGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSkgewogICAgIHN0ZDo6c3RyaW5nIGZvcl9idWlsZCA9CiAgICAgICB0aGlzLT5UYXJnZXQtPkdldEluc3RhbGxOYW1lRGlyRm9yQnVpbGRUcmVlKGNvbmZpZyk7Ci0gICAgc3RkOjpzdHJpbmcgZm9yX2luc3RhbGwgPSB0aGlzLT5UYXJnZXQtPkdldEluc3RhbGxOYW1lRGlyRm9ySW5zdGFsbFRyZWUoKTsKKyAgICBzdGQ6OnN0cmluZyBmb3JfaW5zdGFsbCA9IHRoaXMtPlRhcmdldC0+R2V0SW5zdGFsbE5hbWVEaXJGb3JJbnN0YWxsVHJlZSgKKyAgICAgIGNvbmZpZywgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9Iik7CiAKICAgICBpZiAodGhpcy0+VGFyZ2V0LT5Jc0ZyYW1ld29ya09uQXBwbGUoKSAmJiBmb3JfaW5zdGFsbC5lbXB0eSgpKSB7CiAgICAgICAvLyBGcmFtZXdvcmtzIHNlZW0gdG8gaGF2ZSBhbiBpZCBjb3JyZXNwb25kaW5nIHRvIHRoZWlyIG93biBmdWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLmgKaW5kZXggODczMDQ1NC4uZTIxMDAxZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbFRhcmdldEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IuaApAQCAtMjMsMTEgKzIzLDExIEBACiB7CiBwdWJsaWM6CiAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcigKLSAgICBzdGQ6OnN0cmluZyB0YXJnZXROYW1lLCBjb25zdCBjaGFyKiBkZXN0LCBib29sIGltcGxpYiwKLSAgICBjb25zdCBjaGFyKiBmaWxlX3Blcm1pc3Npb25zLAotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgY29uZmlndXJhdGlvbnMsIGNvbnN0IGNoYXIqIGNvbXBvbmVudCwKLSAgICBNZXNzYWdlTGV2ZWwgbWVzc2FnZSwgYm9vbCBleGNsdWRlX2Zyb21fYWxsLCBib29sIG9wdGlvbmFsLAotICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgYmFja3RyYWNlID0gY21MaXN0RmlsZUJhY2t0cmFjZSgpKTsKKyAgICBzdGQ6OnN0cmluZyB0YXJnZXROYW1lLCBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwgYm9vbCBpbXBsaWIsCisgICAgc3RkOjpzdHJpbmcgZmlsZV9wZXJtaXNzaW9ucywKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNvbmZpZ3VyYXRpb25zLAorICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb21wb25lbnQsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlLCBib29sIGV4Y2x1ZGVfZnJvbV9hbGwsCisgICAgYm9vbCBvcHRpb25hbCwgY21MaXN0RmlsZUJhY2t0cmFjZSBiYWNrdHJhY2UgPSBjbUxpc3RGaWxlQmFja3RyYWNlKCkpOwogICB+Y21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKICAgLyoqIFNlbGVjdCB0aGUgcG9saWN5IGZvciBpbnN0YWxsaW5nIHNoYXJlZCBsaWJyYXJ5IGxpbmthYmxlIG5hbWUKQEAgLTEwNiwxMyArMTA2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRvRGVzdERpclBhdGgpOwogICB2b2lkIElzc3VlQ01QMDA5NVdhcm5pbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHVuZXNjYXBlZFJwYXRoKTsKIAotICBzdGQ6OnN0cmluZyBUYXJnZXROYW1lOworICBzdGQ6OnN0cmluZyBjb25zdCBUYXJnZXROYW1lOwogICBjbUdlbmVyYXRvclRhcmdldCogVGFyZ2V0OwotICBzdGQ6OnN0cmluZyBGaWxlUGVybWlzc2lvbnM7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IEZpbGVQZXJtaXNzaW9uczsKICAgTmFtZWxpbmtNb2RlVHlwZSBOYW1lbGlua01vZGU7Ci0gIGJvb2wgSW1wb3J0TGlicmFyeTsKLSAgYm9vbCBPcHRpb25hbDsKLSAgY21MaXN0RmlsZUJhY2t0cmFjZSBCYWNrdHJhY2U7CisgIGJvb2wgY29uc3QgSW1wb3J0TGlicmFyeTsKKyAgYm9vbCBjb25zdCBPcHRpb25hbDsKKyAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCBCYWNrdHJhY2U7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUluc3RhbGxlZEZpbGUuY3h4IGIvU291cmNlL2NtSW5zdGFsbGVkRmlsZS5jeHgKaW5kZXggZWFiZTU5MC4uMzIzOTVkMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtSW5zdGFsbGVkRmlsZS5jeHgKKysrIGIvU291cmNlL2NtSW5zdGFsbGVkRmlsZS5jeHgKQEAgLTQsNyArNCw2IEBACiAKICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgpAQCAtMTIsMTcgKzExLDExIEBACiAKIGNtSW5zdGFsbGVkRmlsZTo6Y21JbnN0YWxsZWRGaWxlKCkgPSBkZWZhdWx0OwogCi1jbUluc3RhbGxlZEZpbGU6On5jbUluc3RhbGxlZEZpbGUoKQotewotICBkZWxldGUgTmFtZUV4cHJlc3Npb247Ci19CitjbUluc3RhbGxlZEZpbGU6On5jbUluc3RhbGxlZEZpbGUoKSA9IGRlZmF1bHQ7CiAKIGNtSW5zdGFsbGVkRmlsZTo6UHJvcGVydHk6OlByb3BlcnR5KCkgPSBkZWZhdWx0OwogCi1jbUluc3RhbGxlZEZpbGU6OlByb3BlcnR5Ojp+UHJvcGVydHkoKQotewotICBjbURlbGV0ZUFsbCh0aGlzLT5WYWx1ZUV4cHJlc3Npb25zKTsKLX0KK2NtSW5zdGFsbGVkRmlsZTo6UHJvcGVydHk6On5Qcm9wZXJ0eSgpID0gZGVmYXVsdDsKIAogdm9pZCBjbUluc3RhbGxlZEZpbGU6OlNldE5hbWUoY21NYWtlZmlsZSogbWYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQogewpAQCAtMzAsNyArMjMsNyBAQAogICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2UoYmFja3RyYWNlKTsKIAogICB0aGlzLT5OYW1lID0gbmFtZTsKLSAgdGhpcy0+TmFtZUV4cHJlc3Npb24gPSBnZS5QYXJzZShuYW1lKS5yZWxlYXNlKCk7CisgIHRoaXMtPk5hbWVFeHByZXNzaW9uID0gZ2UuUGFyc2UobmFtZSk7CiB9CiAKIHN0ZDo6c3RyaW5nIGNvbnN0JiBjbUluc3RhbGxlZEZpbGU6OkdldE5hbWUoKSBjb25zdApAQCAtNDksNyArNDIsOCBAQAogfQogCiB2b2lkIGNtSW5zdGFsbGVkRmlsZTo6U2V0UHJvcGVydHkoY21NYWtlZmlsZSBjb25zdCogbWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKIHsKICAgdGhpcy0+UmVtb3ZlUHJvcGVydHkocHJvcCk7CiAgIHRoaXMtPkFwcGVuZFByb3BlcnR5KG1mLCBwcm9wLCB2YWx1ZSk7CkBAIC01NywxMyArNTEsMTQgQEAKIAogdm9pZCBjbUluc3RhbGxlZEZpbGU6OkFwcGVuZFByb3BlcnR5KGNtTWFrZWZpbGUgY29uc3QqIG1mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlLCBib29sIC8qYXNTdHJpbmcqLykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKmFzU3RyaW5nKi8pCiB7CiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgYmFja3RyYWNlID0gbWYtPkdldEJhY2t0cmFjZSgpOwogICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2UoYmFja3RyYWNlKTsKIAogICBQcm9wZXJ0eSYgcHJvcGVydHkgPSB0aGlzLT5Qcm9wZXJ0aWVzW3Byb3BdOwotICBwcm9wZXJ0eS5WYWx1ZUV4cHJlc3Npb25zLnB1c2hfYmFjayhnZS5QYXJzZSh2YWx1ZSkucmVsZWFzZSgpKTsKKyAgcHJvcGVydHkuVmFsdWVFeHByZXNzaW9ucy5wdXNoX2JhY2soZ2UuUGFyc2UodmFsdWUpKTsKIH0KIAogYm9vbCBjbUluc3RhbGxlZEZpbGU6Okhhc1Byb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdApAQCAtODQsNyArNzksNyBAQAogICBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgIHN0ZDo6c3RyaW5nIHNlcGFyYXRvcjsKIAotICBmb3IgKGF1dG8gdmUgOiBwcm9wZXJ0eS5WYWx1ZUV4cHJlc3Npb25zKSB7CisgIGZvciAoY29uc3QgYXV0byYgdmUgOiBwcm9wZXJ0eS5WYWx1ZUV4cHJlc3Npb25zKSB7CiAgICAgb3V0cHV0ICs9IHNlcGFyYXRvcjsKICAgICBvdXRwdXQgKz0gdmUtPkdldElucHV0KCk7CiAgICAgc2VwYXJhdG9yID0gIjsiOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtSW5zdGFsbGVkRmlsZS5oIGIvU291cmNlL2NtSW5zdGFsbGVkRmlsZS5oCmluZGV4IGVlODA5ZWUuLjA3ZjcwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUluc3RhbGxlZEZpbGUuaAorKysgYi9Tb3VyY2UvY21JbnN0YWxsZWRGaWxlLmgKQEAgLTI0LDcgKzI0LDcgQEAKICAgdXNpbmcgQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uUHRyVHlwZSA9CiAgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPjsKIAotICB1c2luZyBFeHByZXNzaW9uVmVjdG9yVHlwZSA9IHN0ZDo6dmVjdG9yPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uKj47CisgIHVzaW5nIEV4cHJlc3Npb25WZWN0b3JUeXBlID0gc3RkOjp2ZWN0b3I8Q29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uUHRyVHlwZT47CiAKICAgc3RydWN0IFByb3BlcnR5CiAgIHsKQEAgLTQ5LDEwICs0OSwxMCBAQAogICB2b2lkIFJlbW92ZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKTsKIAogICB2b2lkIFNldFByb3BlcnR5KGNtTWFrZWZpbGUgY29uc3QqIG1mLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKIAogICB2b2lkIEFwcGVuZFByb3BlcnR5KGNtTWFrZWZpbGUgY29uc3QqIG1mLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSwgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7CiAKICAgYm9vbCBIYXNQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CiAKQEAgLTczLDcgKzczLDcgQEAKIAogcHJpdmF0ZToKICAgc3RkOjpzdHJpbmcgTmFtZTsKLSAgY21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24qIE5hbWVFeHByZXNzaW9uID0gbnVsbHB0cjsKKyAgQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uUHRyVHlwZSBOYW1lRXhwcmVzc2lvbjsKICAgUHJvcGVydHlNYXBUeXBlIFByb3BlcnRpZXM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Kc29uT2JqZWN0cy5jeHggYi9Tb3VyY2UvY21Kc29uT2JqZWN0cy5jeHgKaW5kZXggYjIzYWI0My4uM2EyZTNiZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtSnNvbk9iamVjdHMuY3h4CisrKyBiL1NvdXJjZS9jbUpzb25PYmplY3RzLmN4eApAQCAtOCwxMyArOCwxNSBAQAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgpAQCAtMjYsNiArMjgsNyBAQAogI2luY2x1ZGUgImNtTGlua0xpbmVDb21wdXRlci5oIgogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUHJvcGVydHlNYXAuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCkBAIC00MywxNiArNDYsMTIgQEAKIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBnZXRDb25maWd1cmF0aW9ucyhjb25zdCBjbWFrZSogY20pCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWd1cmF0aW9uczsKLSAgYXV0byBtYWtlZmlsZXMgPSBjbS0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE1ha2VmaWxlcygpOworICBjb25zdCBhdXRvJiBtYWtlZmlsZXMgPSBjbS0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE1ha2VmaWxlcygpOwogICBpZiAobWFrZWZpbGVzLmVtcHR5KCkpIHsKICAgICByZXR1cm4gY29uZmlndXJhdGlvbnM7CiAgIH0KIAotICBtYWtlZmlsZXNbMF0tPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3VyYXRpb25zKTsKLSAgaWYgKGNvbmZpZ3VyYXRpb25zLmVtcHR5KCkpIHsKLSAgICBjb25maWd1cmF0aW9ucy5lbXBsYWNlX2JhY2soKTsKLSAgfQotICByZXR1cm4gY29uZmlndXJhdGlvbnM7CisgIHJldHVybiBtYWtlZmlsZXNbMF0tPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIH0KIAogYm9vbCBoYXNTdHJpbmcoY29uc3QgSnNvbjo6VmFsdWUmIHYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQpAQCAtODIsMTMgKzgxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiB0bXBGaWxlcykKIHsKICAgY29uc3Qgc3RkOjpzdHJpbmcgY21ha2VSb290RGlyID0gY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VSb290KCkgKyAnLyc7Ci0gIHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiBjb25zdCYgbWFrZWZpbGVzID0gZ2ctPkdldE1ha2VmaWxlcygpOwotICBmb3IgKGNtTWFrZWZpbGUgY29uc3QqIG1mIDogbWFrZWZpbGVzKSB7CisgIGF1dG8gY29uc3QmIG1ha2VmaWxlcyA9IGdnLT5HZXRNYWtlZmlsZXMoKTsKKyAgZm9yIChjb25zdCBhdXRvJiBtZiA6IG1ha2VmaWxlcykgewogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxmIDogbWYtPkdldExpc3RGaWxlcygpKSB7CiAKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHN0YXJ0T2ZGaWxlID0gbGYuc3Vic3RyKDAsIGNtYWtlUm9vdERpci5zaXplKCkpOwogICAgICAgY29uc3QgYm9vbCBpc0ludGVybmFsID0gKHN0YXJ0T2ZGaWxlID09IGNtYWtlUm9vdERpcik7Ci0gICAgICBjb25zdCBib29sIGlzVGVtcG9yYXJ5ID0gIWlzSW50ZXJuYWwgJiYgKGxmLmZpbmQoYnVpbGREaXIgKyAnLycpID09IDApOworICAgICAgY29uc3QgYm9vbCBpc1RlbXBvcmFyeSA9CisgICAgICAgICFpc0ludGVybmFsICYmIChjbUhhc1ByZWZpeChsZiwgYnVpbGREaXIgKyAnLycpKTsKIAogICAgICAgc3RkOjpzdHJpbmcgdG9BZGQgPSBsZjsKICAgICAgIGlmICghc291cmNlRGlyLmVtcHR5KCkpIHsKQEAgLTI3MiwxNCArMjcyLDE0IEBACiAKICAgICAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVGbGFncyA9IGxkLkZsYWdzOwogICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9GTEFHUygiQ09NUElMRV9GTEFHUyIpOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIGNmbGFncyA9IGZpbGUtPkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7CisgICAgICBpZiAoY21Qcm9wIGNmbGFncyA9IGZpbGUtPkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7CiAgICAgICAgIGxnLT5BcHBlbmRGbGFncyhjb21waWxlRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNmbGFncywgQ09NUElMRV9GTEFHUykpOworICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2ZsYWdzLCBDT01QSUxFX0ZMQUdTKSk7CiAgICAgICB9CiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX09QVElPTlMoIkNPTVBJTEVfT1BUSU9OUyIpOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIGNvcHRpb25zID0gZmlsZS0+R2V0UHJvcGVydHkoQ09NUElMRV9PUFRJT05TKSkgeworICAgICAgaWYgKGNtUHJvcCBjb3B0aW9ucyA9IGZpbGUtPkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKICAgICAgICAgbGctPkFwcGVuZENvbXBpbGVPcHRpb25zKAotICAgICAgICAgIGNvbXBpbGVGbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjb3B0aW9ucywgQ09NUElMRV9PUFRJT05TKSk7CisgICAgICAgICAgY29tcGlsZUZsYWdzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb3B0aW9ucywgQ09NUElMRV9PUFRJT05TKSk7CiAgICAgICB9CiAgICAgICBmaWxlRGF0YS5GbGFncyA9IGNvbXBpbGVGbGFnczsKIApAQCAtMjg3LDkgKzI4Nyw5IEBACiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jbHVkZXM7CiAKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIElOQ0xVREVfRElSRUNUT1JJRVMoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBjaW5jbHVkZXMgPSBmaWxlLT5HZXRQcm9wZXJ0eShJTkNMVURFX0RJUkVDVE9SSUVTKSkgeworICAgICAgaWYgKGNtUHJvcCBjaW5jbHVkZXMgPSBmaWxlLT5HZXRQcm9wZXJ0eShJTkNMVURFX0RJUkVDVE9SSUVTKSkgewogICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXZhbHVhdGVkSW5jbHVkZXMgPQotICAgICAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY2luY2x1ZGVzLCBJTkNMVURFX0RJUkVDVE9SSUVTKTsKKyAgICAgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjaW5jbHVkZXMsIElOQ0xVREVfRElSRUNUT1JJRVMpOwogICAgICAgICBsZy0+QXBwZW5kSW5jbHVkZURpcmVjdG9yaWVzKGluY2x1ZGVzLCBldmFsdWF0ZWRJbmNsdWRlcywgKmZpbGUpOwogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaW5jbHVkZSA6IGluY2x1ZGVzKSB7CkBAIC0zMDYsMTcgKzMwNiwxNyBAQAogCiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX0RFRklOSVRJT05TKCJDT01QSUxFX0RFRklOSVRJT05TIik7CiAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZGVmaW5lczsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBkZWZzID0gZmlsZS0+R2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKKyAgICAgIGlmIChjbVByb3AgZGVmcyA9IGZpbGUtPkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CiAgICAgICAgIGxnLT5BcHBlbmREZWZpbmVzKAotICAgICAgICAgIGRlZmluZXMsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUykpOworICAgICAgICAgIGRlZmluZXMsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmRlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpKTsKICAgICAgIH0KIAogICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZGVmUHJvcE5hbWUgPQogICAgICAgICAiQ09NUElMRV9ERUZJTklUSU9OU18iICsgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyk7Ci0gICAgICBpZiAoY29uc3QgY2hhciogY29uZmlnX2RlZnMgPSBmaWxlLT5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSkpIHsKKyAgICAgIGlmIChjbVByb3AgY29uZmlnX2RlZnMgPSBmaWxlLT5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSkpIHsKICAgICAgICAgbGctPkFwcGVuZERlZmluZXMoCiAgICAgICAgICAgZGVmaW5lcywKLSAgICAgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbmZpZ19kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CisgICAgICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY29uZmlnX2RlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpKTsKICAgICAgIH0KIAogICAgICAgZGVmaW5lcy5pbnNlcnQobGQuRGVmaW5lcy5iZWdpbigpLCBsZC5EZWZpbmVzLmVuZCgpKTsKQEAgLTQ4NSwxMCArNDg1LDEwIEBACiAgICAgcmVzdWx0W2tIQVNfSU5TVEFMTF9SVUxFXSA9IHRydWU7CiAKICAgICBKc29uOjpWYWx1ZSBpbnN0YWxsUGF0aHMgPSBKc29uOjphcnJheVZhbHVlOwotICAgIGF1dG8gdGFyZ2V0R2VuZXJhdG9ycyA9IHRhcmdldC0+TWFrZWZpbGUtPkdldEluc3RhbGxHZW5lcmF0b3JzKCk7Ci0gICAgZm9yIChhdXRvIGluc3RhbGxHZW5lcmF0b3IgOiB0YXJnZXRHZW5lcmF0b3JzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0YWxsR2VuZXJhdG9yIDoKKyAgICAgICAgIHRhcmdldC0+TWFrZWZpbGUtPkdldEluc3RhbGxHZW5lcmF0b3JzKCkpIHsKICAgICAgIGF1dG8gaW5zdGFsbFRhcmdldEdlbmVyYXRvciA9Ci0gICAgICAgIGR5bmFtaWNfY2FzdDxjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IqPihpbnN0YWxsR2VuZXJhdG9yKTsKKyAgICAgICAgZHluYW1pY19jYXN0PGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcio+KGluc3RhbGxHZW5lcmF0b3IuZ2V0KCkpOwogICAgICAgaWYgKGluc3RhbGxUYXJnZXRHZW5lcmF0b3IgIT0gbnVsbHB0ciAmJgogICAgICAgICAgIGluc3RhbGxUYXJnZXRHZW5lcmF0b3ItPkdldFRhcmdldCgpLT5UYXJnZXQgPT0gdGFyZ2V0LT5UYXJnZXQpIHsKICAgICAgICAgYXV0byBkZXN0ID0gaW5zdGFsbFRhcmdldEdlbmVyYXRvci0+R2V0RGVzdGluYXRpb24oY29uZmlnKTsKQEAgLTYwMSw3ICs2MDEsNyBAQAogCiAgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4gdGFyZ2V0TGlzdDsKICAgZm9yIChhdXRvIGNvbnN0JiBsZ0l0IDogZ2VuZXJhdG9ycykgewotICAgIGNtQXBwZW5kKHRhcmdldExpc3QsIGxnSXQtPkdldEdlbmVyYXRvclRhcmdldHMoKSk7CisgICAgY206OmFwcGVuZCh0YXJnZXRMaXN0LCBsZ0l0LT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpOwogICB9CiAgIHN0ZDo6c29ydCh0YXJnZXRMaXN0LmJlZ2luKCksIHRhcmdldExpc3QuZW5kKCkpOwogCkBAIC02NDEsOSArNjQxLDkgQEAKICAgICAvLyBhc3NvY2lhdGVkIGdlbmVyYXRvcnMuCiAgICAgYm9vbCBoYXNJbnN0YWxsUnVsZSA9IGZhbHNlOwogICAgIGZvciAoY29uc3QgYXV0byBnZW5lcmF0b3IgOiBwcm9qZWN0SXQuc2Vjb25kKSB7Ci0gICAgICBmb3IgKGNvbnN0IGF1dG8gaW5zdGFsbEdlbiA6CisgICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RhbGxHZW4gOgogICAgICAgICAgICBnZW5lcmF0b3ItPkdldE1ha2VmaWxlKCktPkdldEluc3RhbGxHZW5lcmF0b3JzKCkpIHsKLSAgICAgICAgaWYgKCFkeW5hbWljX2Nhc3Q8Y21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yKj4oaW5zdGFsbEdlbikpIHsKKyAgICAgICAgaWYgKCFkeW5hbWljX2Nhc3Q8Y21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yKj4oaW5zdGFsbEdlbi5nZXQoKSkpIHsKICAgICAgICAgICBoYXNJbnN0YWxsUnVsZSA9IHRydWU7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUpzb25PYmplY3RzLmggYi9Tb3VyY2UvY21Kc29uT2JqZWN0cy5oCmluZGV4IDY0MjkxY2MuLjJmZDRiMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUpzb25PYmplY3RzLmgKKysrIGIvU291cmNlL2NtSnNvbk9iamVjdHMuaApAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgorI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgogCiBjbGFzcyBjbWFrZTsKIGNsYXNzIGNtR2xvYmFsR2VuZXJhdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlua0l0ZW0uY3h4IGIvU291cmNlL2NtTGlua0l0ZW0uY3h4CmluZGV4IDkxZWIxODMuLjRlNTBkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxpbmtJdGVtLmN4eAorKysgYi9Tb3VyY2UvY21MaW5rSXRlbS5jeHgKQEAgLTgsMTQgKzgsMTcgQEAKIAogY21MaW5rSXRlbTo6Y21MaW5rSXRlbSgpID0gZGVmYXVsdDsKIAotY21MaW5rSXRlbTo6Y21MaW5rSXRlbShzdGQ6OnN0cmluZyBuLCBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0KQorY21MaW5rSXRlbTo6Y21MaW5rSXRlbShzdGQ6OnN0cmluZyBuLCBib29sIGMsIGNtTGlzdEZpbGVCYWNrdHJhY2UgYnQpCiAgIDogU3RyaW5nKHN0ZDo6bW92ZShuKSkKKyAgLCBDcm9zcyhjKQogICAsIEJhY2t0cmFjZShzdGQ6Om1vdmUoYnQpKQogewogfQogCi1jbUxpbmtJdGVtOjpjbUxpbmtJdGVtKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0LCBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0KQorY21MaW5rSXRlbTo6Y21MaW5rSXRlbShjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdCwgYm9vbCBjLAorICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0KQogICA6IFRhcmdldCh0KQorICAsIENyb3NzKGMpCiAgICwgQmFja3RyYWNlKHN0ZDo6bW92ZShidCkpCiB7CiB9CkBAIC0zOSwxMiArNDIsMTYgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KICAgLy8gT3JkZXIgYW1vbmcgc3RyaW5ncy4KLSAgcmV0dXJuIGwuU3RyaW5nIDwgci5TdHJpbmc7CisgIGlmIChsLlN0cmluZyA8IHIuU3RyaW5nKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgLy8gT3JkZXIgYW1vbmcgY3Jvc3MtY29uZmlnLgorICByZXR1cm4gbC5Dcm9zcyA8IHIuQ3Jvc3M7CiB9CiAKIGJvb2wgb3BlcmF0b3I9PShjbUxpbmtJdGVtIGNvbnN0JiBsLCBjbUxpbmtJdGVtIGNvbnN0JiByKQogewotICByZXR1cm4gbC5UYXJnZXQgPT0gci5UYXJnZXQgJiYgbC5TdHJpbmcgPT0gci5TdHJpbmc7CisgIHJldHVybiBsLlRhcmdldCA9PSByLlRhcmdldCAmJiBsLlN0cmluZyA9PSByLlN0cmluZyAmJiBsLkNyb3NzID09IHIuQ3Jvc3M7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjbUxpbmtJdGVtIGNvbnN0JiBpdGVtKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlua0l0ZW0uaCBiL1NvdXJjZS9jbUxpbmtJdGVtLmgKaW5kZXggMmQ5Mzc4Yi4uM2Q5MjkzNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTGlua0l0ZW0uaAorKysgYi9Tb3VyY2UvY21MaW5rSXRlbS5oCkBAIC0xMCw3ICsxMCw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbVRhcmdldExpbmtMaWJyYXJ5VHlwZS5oIgpAQCAtMjQsMTAgKzI1LDExIEBACiAKIHB1YmxpYzoKICAgY21MaW5rSXRlbSgpOwotICBjbUxpbmtJdGVtKHN0ZDo6c3RyaW5nIHMsIGNtTGlzdEZpbGVCYWNrdHJhY2UgYnQpOwotICBjbUxpbmtJdGVtKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0LCBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0KTsKKyAgY21MaW5rSXRlbShzdGQ6OnN0cmluZyBzLCBib29sIGMsIGNtTGlzdEZpbGVCYWNrdHJhY2UgYnQpOworICBjbUxpbmtJdGVtKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0LCBib29sIGMsIGNtTGlzdEZpbGVCYWNrdHJhY2UgYnQpOwogICBzdGQ6OnN0cmluZyBjb25zdCYgQXNTdHIoKSBjb25zdDsKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIFRhcmdldCA9IG51bGxwdHI7CisgIGJvb2wgQ3Jvc3MgPSBmYWxzZTsKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBCYWNrdHJhY2U7CiAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChjbUxpbmtJdGVtIGNvbnN0JiBsLCBjbUxpbmtJdGVtIGNvbnN0JiByKTsKICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjbUxpbmtJdGVtIGNvbnN0JiBsLCBjbUxpbmtJdGVtIGNvbnN0JiByKTsKQEAgLTUyLDYgKzU0LDkgQEAKICAgLy8gTGlicmFyaWVzIGxpbmtlZCBkaXJlY3RseSBpbiBvdGhlciBjb25maWd1cmF0aW9ucy4KICAgLy8gTmVlZGVkIG9ubHkgZm9yIE9MRCBiZWhhdmlvciBvZiBDTVAwMDAzLgogICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiBXcm9uZ0NvbmZpZ0xpYnJhcmllczsKKworICAvLyBXaGV0aGVyIHRoZSBsaXN0IGRlcGVuZHMgb24gYSBnZW5leCByZWZlcmVuY2luZyB0aGUgY29uZmlndXJhdGlvbi4KKyAgYm9vbCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uID0gZmFsc2U7CiB9OwogCiBzdHJ1Y3QgY21MaW5rSW50ZXJmYWNlTGlicmFyaWVzCkBAIC02MSw2ICs2Niw5IEBACiAKICAgLy8gV2hldGhlciB0aGUgbGlzdCBkZXBlbmRzIG9uIGEgZ2VuZXggcmVmZXJlbmNpbmcgdGhlIGhlYWQgdGFyZ2V0LgogICBib29sIEhhZEhlYWRTZW5zaXRpdmVDb25kaXRpb24gPSBmYWxzZTsKKworICAvLyBXaGV0aGVyIHRoZSBsaXN0IGRlcGVuZHMgb24gYSBnZW5leCByZWZlcmVuY2luZyB0aGUgY29uZmlndXJhdGlvbi4KKyAgYm9vbCBIYWRDb250ZXh0U2Vuc2l0aXZlQ29uZGl0aW9uID0gZmFsc2U7CiB9OwogCiBzdHJ1Y3QgY21MaW5rSW50ZXJmYWNlIDogcHVibGljIGNtTGlua0ludGVyZmFjZUxpYnJhcmllcwpAQCAtODAsNiArODgsOSBAQAogICBzdGQ6OnZlY3RvcjxjbUxpbmtJdGVtPiBXcm9uZ0NvbmZpZ0xpYnJhcmllczsKIAogICBib29sIEltcGxlbWVudGF0aW9uSXNJbnRlcmZhY2UgPSBmYWxzZTsKKworICAvLyBXaGV0aGVyIHRoZSBsaXN0IGRlcGVuZHMgb24gYSBsaW5rIGxhbmd1YWdlIGdlbmV4LgorICBib29sIEhhZExpbmtMYW5ndWFnZVNlbnNpdGl2ZUNvbmRpdGlvbiA9IGZhbHNlOwogfTsKIAogc3RydWN0IGNtT3B0aW9uYWxMaW5rSW50ZXJmYWNlIDogcHVibGljIGNtTGlua0ludGVyZmFjZQpAQCAtOTksNiArMTEwLDkgQEAKIHsKICAgLy8gTGFuZ3VhZ2VzIHdob3NlIHJ1bnRpbWUgbGlicmFyaWVzIG11c3QgYmUgbGlua2VkLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGFuZ3VhZ2VzOworCisgIC8vIFdoZXRoZXIgdGhlIGxpc3QgZGVwZW5kcyBvbiBhIGxpbmsgbGFuZ3VhZ2UgZ2VuZXguCisgIGJvb2wgSGFkTGlua0xhbmd1YWdlU2Vuc2l0aXZlQ29uZGl0aW9uID0gZmFsc2U7CiB9OwogCiAvLyBDYWNoZSBsaW5rIGltcGxlbWVudGF0aW9uIGNvbXB1dGF0aW9uIGZyb20gZWFjaCBjb25maWd1cmF0aW9uLgpAQCAtMTIwLDcgKzEzNCw3IEBACiAKICAgLy8gQ2hlY2sgaWYgYW55IGVudHJ5IGluIHRoZSBsaXN0IG1hdGNoZXMgdGhpcyBjb25maWd1cmF0aW9uLgogICBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwotICBpZiAoY21Db250YWlucyhkZWJ1Z0NvbmZpZ3MsIGNvbmZpZ1VwcGVyKSkgeworICBpZiAoY206OmNvbnRhaW5zKGRlYnVnQ29uZmlncywgY29uZmlnVXBwZXIpKSB7CiAgICAgcmV0dXJuIERFQlVHX0xpYnJhcnlUeXBlOwogICB9CiAgIC8vIFRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgbm90IGEgZGVidWcgY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpbmtJdGVtR3JhcGhWaXNpdG9yLmN4eCBiL1NvdXJjZS9jbUxpbmtJdGVtR3JhcGhWaXNpdG9yLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmRkM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtTGlua0l0ZW1HcmFwaFZpc2l0b3IuY3h4CkBAIC0wLDAgKzEsMTM5IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaW5jbHVkZSAiY21MaW5rSXRlbUdyYXBoVmlzaXRvci5oIgorCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJjbUxpbmtJdGVtLmgiCisjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorCit2b2lkIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3I6OlZpc2l0SXRlbShjbUxpbmtJdGVtIGNvbnN0JiBpdGVtKQoreworICBpZiAodGhpcy0+SXRlbVZpc2l0ZWQoaXRlbSkpIHsKKyAgICByZXR1cm47CisgIH0KKworICB0aGlzLT5Pbkl0ZW0oaXRlbSk7CisKKyAgdGhpcy0+VmlzaXRMaW5rcyhpdGVtLCBpdGVtKTsKK30KKwordm9pZCBjbUxpbmtJdGVtR3JhcGhWaXNpdG9yOjpWaXNpdExpbmtzKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaW5rSXRlbSBjb25zdCYgcm9vdEl0ZW0pCit7CisgIGlmIChpdGVtLlRhcmdldCA9PSBudWxscHRyKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiBpdGVtLlRhcmdldC0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoCisgICAgICAgICBjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpKSB7CisgICAgdGhpcy0+VmlzaXRMaW5rcyhpdGVtLCByb290SXRlbSwgY29uZmlnKTsKKyAgfQorfQorCit2b2lkIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3I6OlZpc2l0TGlua3MoY21MaW5rSXRlbSBjb25zdCYgaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiByb290SXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKQoreworICBhdXRvIGNvbnN0JiB0YXJnZXQgPSAqaXRlbS5UYXJnZXQ7CisKKyAgRGVwZW5kZW5jeU1hcCBkZXBlbmRlbmNpZXM7CisgIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3I6OkdldERlcGVuZGVuY2llcyh0YXJnZXQsIGNvbmZpZywgZGVwZW5kZW5jaWVzKTsKKworICBmb3IgKGF1dG8gY29uc3QmIGQgOiBkZXBlbmRlbmNpZXMpIHsKKyAgICBhdXRvIGNvbnN0JiBkZXBlbmRlbmN5ID0gZC5zZWNvbmQ7CisgICAgYXV0byBjb25zdCYgZGVwZW5kZW5jeVR5cGUgPSBkZXBlbmRlbmN5LmZpcnN0OworICAgIGF1dG8gY29uc3QmIGRlcGVuZGVlID0gZGVwZW5kZW5jeS5zZWNvbmQ7CisgICAgdGhpcy0+VmlzaXRJdGVtKGRlcGVuZGVlKTsKKworICAgIGlmICh0aGlzLT5MaW5rVmlzaXRlZChpdGVtLCBkZXBlbmRlZSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIHRoaXMtPk9uRGlyZWN0TGluayhpdGVtLCBkZXBlbmRlZSwgZGVwZW5kZW5jeVR5cGUpOworCisgICAgaWYgKHJvb3RJdGVtLkFzU3RyKCkgIT0gaXRlbS5Bc1N0cigpKSB7CisgICAgICB0aGlzLT5PbkluZGlyZWN0TGluayhyb290SXRlbSwgZGVwZW5kZWUpOworICAgIH0KKworICAgIC8vIFZpc2l0IGFsbCB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBsaW5rcy4KKyAgICB0aGlzLT5WaXNpdExpbmtzKGRlcGVuZGVlLCBkZXBlbmRlZSk7CisgICAgdGhpcy0+VmlzaXRMaW5rcyhkZXBlbmRlZSwgaXRlbSk7CisgICAgdGhpcy0+VmlzaXRMaW5rcyhkZXBlbmRlZSwgcm9vdEl0ZW0pOworICB9Cit9CisKK2Jvb2wgY21MaW5rSXRlbUdyYXBoVmlzaXRvcjo6SXRlbVZpc2l0ZWQoY21MaW5rSXRlbSBjb25zdCYgaXRlbSkKK3sKKyAgYXV0byYgY29sbGVjdGlvbiA9IHRoaXMtPlZpc2l0ZWRJdGVtczsKKworICBib29sIGNvbnN0IHZpc2l0ZWQgPSBjb2xsZWN0aW9uLmZpbmQoaXRlbS5Bc1N0cigpKSAhPSBjb2xsZWN0aW9uLmNlbmQoKTsKKworICBpZiAoIXZpc2l0ZWQpIHsKKyAgICBjb2xsZWN0aW9uLmluc2VydChpdGVtLkFzU3RyKCkpOworICB9CisKKyAgcmV0dXJuIHZpc2l0ZWQ7Cit9CisKK2Jvb2wgY21MaW5rSXRlbUdyYXBoVmlzaXRvcjo6TGlua1Zpc2l0ZWQoY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlua0l0ZW0gY29uc3QmIGRlcGVuZGVlKQoreworICBhdXRvIGNvbnN0IGxpbmsgPSBzdGQ6Om1ha2VfcGFpcjw+KGRlcGVuZGVyLkFzU3RyKCksIGRlcGVuZGVlLkFzU3RyKCkpOworCisgIGJvb2wgY29uc3QgbGlua1Zpc2l0ZWQgPQorICAgIHRoaXMtPlZpc2l0ZWRMaW5rcy5maW5kKGxpbmspICE9IHRoaXMtPlZpc2l0ZWRMaW5rcy5jZW5kKCk7CisKKyAgaWYgKCFsaW5rVmlzaXRlZCkgeworICAgIHRoaXMtPlZpc2l0ZWRMaW5rcy5pbnNlcnQobGluayk7CisgIH0KKworICByZXR1cm4gbGlua1Zpc2l0ZWQ7Cit9CisKK3ZvaWQgY21MaW5rSXRlbUdyYXBoVmlzaXRvcjo6R2V0RGVwZW5kZW5jaWVzKGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0JiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kZW5jeU1hcCYgZGVwZW5kZW5jaWVzKQoreworICBhdXRvIGltcGxlbWVudGF0aW9uTGlicmFyaWVzID0gdGFyZ2V0LkdldExpbmtJbXBsZW1lbnRhdGlvbkxpYnJhcmllcyhjb25maWcpOworICBpZiAoaW1wbGVtZW50YXRpb25MaWJyYXJpZXMgIT0gbnVsbHB0cikgeworICAgIGZvciAoYXV0byBjb25zdCYgbGliIDogaW1wbGVtZW50YXRpb25MaWJyYXJpZXMtPkxpYnJhcmllcykgeworICAgICAgYXV0byBjb25zdCYgbmFtZSA9IGxpYi5Bc1N0cigpOworICAgICAgZGVwZW5kZW5jaWVzW25hbWVdID0gRGVwZW5kZW5jeShEZXBlbmRlbmN5VHlwZTo6TGlua1ByaXZhdGUsIGxpYik7CisgICAgfQorICB9CisKKyAgYXV0byBpbnRlcmZhY2VMaWJyYXJpZXMgPQorICAgIHRhcmdldC5HZXRMaW5rSW50ZXJmYWNlTGlicmFyaWVzKGNvbmZpZywgJnRhcmdldCwgdHJ1ZSk7CisgIGlmIChpbnRlcmZhY2VMaWJyYXJpZXMgIT0gbnVsbHB0cikgeworICAgIGZvciAoYXV0byBjb25zdCYgbGliIDogaW50ZXJmYWNlTGlicmFyaWVzLT5MaWJyYXJpZXMpIHsKKyAgICAgIGF1dG8gY29uc3QmIG5hbWUgPSBsaWIuQXNTdHIoKTsKKyAgICAgIGlmIChkZXBlbmRlbmNpZXMuZmluZChuYW1lKSAhPSBkZXBlbmRlbmNpZXMuY2VuZCgpKSB7CisgICAgICAgIGRlcGVuZGVuY2llc1tuYW1lXSA9IERlcGVuZGVuY3koRGVwZW5kZW5jeVR5cGU6OkxpbmtQdWJsaWMsIGxpYik7CisgICAgICB9IGVsc2UgeworICAgICAgICBkZXBlbmRlbmNpZXNbbmFtZV0gPSBEZXBlbmRlbmN5KERlcGVuZGVuY3lUeXBlOjpMaW5rSW50ZXJmYWNlLCBsaWIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4gb2JqZWN0TGlicmFyaWVzOworICB0YXJnZXQuR2V0T2JqZWN0TGlicmFyaWVzQ01QMDAyNihvYmplY3RMaWJyYXJpZXMpOworICBmb3IgKGF1dG8gY29uc3QmIGxpYiA6IG9iamVjdExpYnJhcmllcykgeworICAgIGF1dG8gY29uc3QmIG5hbWUgPSBsaWItPkdldE5hbWUoKTsKKyAgICBpZiAoZGVwZW5kZW5jaWVzLmZpbmQobmFtZSkgPT0gZGVwZW5kZW5jaWVzLmNlbmQoKSkgeworICAgICAgYXV0byBvYmplY3RJdGVtID0gY21MaW5rSXRlbShsaWIsIGZhbHNlLCBsaWItPkdldEJhY2t0cmFjZSgpKTsKKyAgICAgIGRlcGVuZGVuY2llc1tuYW1lXSA9IERlcGVuZGVuY3koRGVwZW5kZW5jeVR5cGU6Ok9iamVjdCwgb2JqZWN0SXRlbSk7CisgICAgfQorICB9CisKKyAgYXV0byBjb25zdCYgdXRpbGl0eUl0ZW1zID0gdGFyZ2V0LkdldFV0aWxpdHlJdGVtcygpOworICBmb3IgKGF1dG8gY29uc3QmIGl0ZW0gOiB1dGlsaXR5SXRlbXMpIHsKKyAgICBhdXRvIGNvbnN0JiBuYW1lID0gaXRlbS5Bc1N0cigpOworICAgIGlmIChkZXBlbmRlbmNpZXMuZmluZChuYW1lKSA9PSBkZXBlbmRlbmNpZXMuY2VuZCgpKSB7CisgICAgICBkZXBlbmRlbmNpZXNbbmFtZV0gPSBEZXBlbmRlbmN5KERlcGVuZGVuY3lUeXBlOjpVdGlsaXR5LCBpdGVtKTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpbmtJdGVtR3JhcGhWaXNpdG9yLmggYi9Tb3VyY2UvY21MaW5rSXRlbUdyYXBoVmlzaXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZGM2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21MaW5rSXRlbUdyYXBoVmlzaXRvci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21MaW5rSXRlbUdyYXBoVmlzaXRvcl9oCisjZGVmaW5lIGNtTGlua0l0ZW1HcmFwaFZpc2l0b3JfaAorCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgImNtTGlua0l0ZW0uaCIKKworY2xhc3MgY21HZW5lcmF0b3JUYXJnZXQ7CisKKy8qKiBcY2xhc3MgY21MaW5rSXRlbUdyYXBoVmlzaXRvcgorICogXGJyaWVmIFZpc2l0cyBhIGdyYXBoIG9mIGxpbmtlZCBpdGVtcy4KKyAqCisgKiBBbGxvd3MgdG8gdmlzaXQgaXRlbXMgYW5kIGRlcGVuZGVuY3kgbGlua3MgKGRpcmVjdCBhbmQgaW5kaXJlY3QpIGJldHdlZW4KKyAqIHRob3NlIGl0ZW1zLgorICogVGhpcyBhYnN0cmFjdCBjbGFzcyB0YWtlcyBjYXJlIG9mIHRoZSBncmFwaCB0cmF2ZXJzYWwsIG1ha2luZyBzdXJlIHRoYXQ6CisgKiAgIC0gaXQgdGVybWluYXRlcyBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiBjeWNsZXM7CisgKiAgIC0gaXQgdmlzaXRzIGV2ZXJ5IG9iamVjdCBvbmNlIChhbmQgb25seSBvbmNlKTsKKyAqICAgLSBpdCB2aXNpdHMgdGhlIG9iamVjdHMgaW4gdGhlIHNhbWUgb3JkZXIgZXZlcnkgdGltZS4KKyAqCisgKiBDaGlsZHJlbiBjbGFzc2VzIG9ubHkgaGF2ZSB0byBpbXBsZW1lbnQgT25JdGVtKCkgZXRjLiB0byBoYW5kbGUgd2hhdGV2ZXIKKyAqIGxvZ2ljIHRoZXkgY2FyZSBhYm91dC4KKyAqLworY2xhc3MgY21MaW5rSXRlbUdyYXBoVmlzaXRvcgoreworcHVibGljOgorICB2aXJ0dWFsIH5jbUxpbmtJdGVtR3JhcGhWaXNpdG9yKCkgPSBkZWZhdWx0OworCisgIHZpcnR1YWwgdm9pZCBWaXNpdEdyYXBoKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKSA9IDA7CisKKyAgdm9pZCBWaXNpdEl0ZW0oY21MaW5rSXRlbSBjb25zdCYgaXRlbSk7CisKK3Byb3RlY3RlZDoKKyAgZW51bSBjbGFzcyBEZXBlbmRlbmN5VHlwZQorICB7CisgICAgTGlua0ludGVyZmFjZSwKKyAgICBMaW5rUHVibGljLAorICAgIExpbmtQcml2YXRlLAorICAgIE9iamVjdCwKKyAgICBVdGlsaXR5CisgIH07CisKKyAgdmlydHVhbCB2b2lkIE9uSXRlbShjbUxpbmtJdGVtIGNvbnN0JiBpdGVtKSA9IDA7CisKKyAgdmlydHVhbCB2b2lkIE9uRGlyZWN0TGluayhjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSwgRGVwZW5kZW5jeVR5cGUgZHQpID0gMDsKKworICB2aXJ0dWFsIHZvaWQgT25JbmRpcmVjdExpbmsoY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlZSkgPSAwOworCitwcml2YXRlOgorICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gVmlzaXRlZEl0ZW1zOworCisgIHN0ZDo6c2V0PHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+PiBWaXNpdGVkTGlua3M7CisKKyAgdm9pZCBWaXNpdExpbmtzKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0sIGNtTGlua0l0ZW0gY29uc3QmIHJvb3RJdGVtKTsKKyAgdm9pZCBWaXNpdExpbmtzKGNtTGlua0l0ZW0gY29uc3QmIGl0ZW0sIGNtTGlua0l0ZW0gY29uc3QmIHJvb3RJdGVtLAorICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyk7CisKKyAgdXNpbmcgRGVwZW5kZW5jeSA9IHN0ZDo6cGFpcjxEZXBlbmRlbmN5VHlwZSwgY21MaW5rSXRlbT47CisgIHVzaW5nIERlcGVuZGVuY3lNYXAgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgRGVwZW5kZW5jeT47CisKKyAgYm9vbCBJdGVtVmlzaXRlZChjbUxpbmtJdGVtIGNvbnN0JiBpdGVtKTsKKyAgYm9vbCBMaW5rVmlzaXRlZChjbUxpbmtJdGVtIGNvbnN0JiBkZXBlbmRlciwgY21MaW5rSXRlbSBjb25zdCYgZGVwZW5kZWUpOworCisgIHN0YXRpYyB2b2lkIEdldERlcGVuZGVuY2llcyhjbUdlbmVyYXRvclRhcmdldCBjb25zdCYgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGVuY3lNYXAmIGRlcGVuZGVuY2llcyk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpbmtMaWJyYXJpZXNDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUxpbmtMaWJyYXJpZXNDb21tYW5kLmN4eAppbmRleCBjYjYzY2ViLi4yYjhmODM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaW5rTGlicmFyaWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtTGlua0xpYnJhcmllc0NvbW1hbmQuY3h4CkBAIC0zMiw3ICszMiw3IEBACiAgICAgICB9CiAgICAgICBtZi5BcHBlbmRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiLCAib3B0aW1pemVkIik7CiAgICAgfQotICAgIG1mLkFwcGVuZFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIsIGktPmNfc3RyKCkpOworICAgIG1mLkFwcGVuZFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIsICppKTsKICAgfQogCiAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlua0xpbmVDb21wdXRlci5jeHggYi9Tb3VyY2UvY21MaW5rTGluZUNvbXB1dGVyLmN4eAppbmRleCAzZmM0MWNmLi40ODBjMDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaW5rTGluZUNvbXB1dGVyLmN4eAorKysgYi9Tb3VyY2UvY21MaW5rTGluZUNvbXB1dGVyLmN4eApAQCAtMjIsNiArMjIsNyBAQAogICAsIE91dHB1dENvbnZlcnRlcihvdXRwdXRDb252ZXJ0ZXIpCiAgICwgRm9yUmVzcG9uc2UoZmFsc2UpCiAgICwgVXNlV2F0Y29tUXVvdGUoZmFsc2UpCisgICwgVXNlTmluamFNdWx0aShmYWxzZSkKICAgLCBSZWxpbmsoZmFsc2UpCiB7CiB9CkBAIC0zMyw2ICszNCwxMSBAQAogICB0aGlzLT5Vc2VXYXRjb21RdW90ZSA9IHVzZVdhdGNvbVF1b3RlOwogfQogCit2b2lkIGNtTGlua0xpbmVDb21wdXRlcjo6U2V0VXNlTmluamFNdWx0aShib29sIHVzZU5pbmphTXVsdGkpCit7CisgIHRoaXMtPlVzZU5pbmphTXVsdGkgPSB1c2VOaW5qYU11bHRpOworfQorCiB2b2lkIGNtTGlua0xpbmVDb21wdXRlcjo6U2V0Rm9yUmVzcG9uc2UoYm9vbCBmb3JSZXNwb25zZSkKIHsKICAgdGhpcy0+Rm9yUmVzcG9uc2UgPSBmb3JSZXNwb25zZTsKQEAgLTkyLDEwICs5OCwxNCBAQAogCiBzdGQ6OnN0cmluZyBjbUxpbmtMaW5lQ29tcHV0ZXI6OkNvbnZlcnRUb091dHB1dEZvcm1hdChzdGQ6OnN0cmluZyBjb25zdCYgaW5wdXQpCiB7Ci0gIGNtT3V0cHV0Q29udmVydGVyOjpPdXRwdXRGb3JtYXQgc2hlbGxGb3JtYXQgPSAodGhpcy0+Rm9yUmVzcG9uc2UpCi0gICAgPyBjbU91dHB1dENvbnZlcnRlcjo6UkVTUE9OU0UKLSAgICA6ICgodGhpcy0+VXNlV2F0Y29tUXVvdGUpID8gY21PdXRwdXRDb252ZXJ0ZXI6OldBVENPTVFVT1RFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgIGNtT3V0cHV0Q29udmVydGVyOjpPdXRwdXRGb3JtYXQgc2hlbGxGb3JtYXQgPSBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEw7CisgIGlmICh0aGlzLT5Gb3JSZXNwb25zZSkgeworICAgIHNoZWxsRm9ybWF0ID0gY21PdXRwdXRDb252ZXJ0ZXI6OlJFU1BPTlNFOworICB9IGVsc2UgaWYgKHRoaXMtPlVzZVdhdGNvbVF1b3RlKSB7CisgICAgc2hlbGxGb3JtYXQgPSBjbU91dHB1dENvbnZlcnRlcjo6V0FUQ09NUVVPVEU7CisgIH0gZWxzZSBpZiAodGhpcy0+VXNlTmluamFNdWx0aSkgeworICAgIHNoZWxsRm9ybWF0ID0gY21PdXRwdXRDb252ZXJ0ZXI6Ok5JTkpBTVVMVEk7CisgIH0KIAogICByZXR1cm4gdGhpcy0+T3V0cHV0Q29udmVydGVyLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoaW5wdXQsIHNoZWxsRm9ybWF0KTsKIH0KQEAgLTEwMywxMCArMTEzLDE0IEBACiBzdGQ6OnN0cmluZyBjbUxpbmtMaW5lQ29tcHV0ZXI6OkNvbnZlcnRUb091dHB1dEZvckV4aXN0aW5nKAogICBzdGQ6OnN0cmluZyBjb25zdCYgaW5wdXQpCiB7Ci0gIGNtT3V0cHV0Q29udmVydGVyOjpPdXRwdXRGb3JtYXQgc2hlbGxGb3JtYXQgPSAodGhpcy0+Rm9yUmVzcG9uc2UpCi0gICAgPyBjbU91dHB1dENvbnZlcnRlcjo6UkVTUE9OU0UKLSAgICA6ICgodGhpcy0+VXNlV2F0Y29tUXVvdGUpID8gY21PdXRwdXRDb252ZXJ0ZXI6OldBVENPTVFVT1RFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgIGNtT3V0cHV0Q29udmVydGVyOjpPdXRwdXRGb3JtYXQgc2hlbGxGb3JtYXQgPSBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEw7CisgIGlmICh0aGlzLT5Gb3JSZXNwb25zZSkgeworICAgIHNoZWxsRm9ybWF0ID0gY21PdXRwdXRDb252ZXJ0ZXI6OlJFU1BPTlNFOworICB9IGVsc2UgaWYgKHRoaXMtPlVzZVdhdGNvbVF1b3RlKSB7CisgICAgc2hlbGxGb3JtYXQgPSBjbU91dHB1dENvbnZlcnRlcjo6V0FUQ09NUVVPVEU7CisgIH0gZWxzZSBpZiAodGhpcy0+VXNlTmluamFNdWx0aSkgeworICAgIHNoZWxsRm9ybWF0ID0gY21PdXRwdXRDb252ZXJ0ZXI6Ok5JTkpBTVVMVEk7CisgIH0KIAogICByZXR1cm4gdGhpcy0+T3V0cHV0Q29udmVydGVyLT5Db252ZXJ0VG9PdXRwdXRGb3JFeGlzdGluZyhpbnB1dCwgc2hlbGxGb3JtYXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlua0xpbmVDb21wdXRlci5oIGIvU291cmNlL2NtTGlua0xpbmVDb21wdXRlci5oCmluZGV4IGY0MjY5NzYuLmRmNDI0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxpbmtMaW5lQ29tcHV0ZXIuaAorKysgYi9Tb3VyY2UvY21MaW5rTGluZUNvbXB1dGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKICAgY21MaW5rTGluZUNvbXB1dGVyJiBvcGVyYXRvcj0oY21MaW5rTGluZUNvbXB1dGVyIGNvbnN0JikgPSBkZWxldGU7CiAKICAgdm9pZCBTZXRVc2VXYXRjb21RdW90ZShib29sIHVzZVdhdGNvbVF1b3RlKTsKKyAgdm9pZCBTZXRVc2VOaW5qYU11bHRpKGJvb2wgdXNlTmluamFNdWx0aSk7CiAgIHZvaWQgU2V0Rm9yUmVzcG9uc2UoYm9vbCBmb3JSZXNwb25zZSk7CiAgIHZvaWQgU2V0UmVsaW5rKGJvb2wgcmVsaW5rKTsKIApAQCAtNjksNiArNzAsNyBAQAogCiAgIGJvb2wgRm9yUmVzcG9uc2U7CiAgIGJvb2wgVXNlV2F0Y29tUXVvdGU7CisgIGJvb2wgVXNlTmluamFNdWx0aTsKICAgYm9vbCBSZWxpbms7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21MaW5rTGluZURldmljZUNvbXB1dGVyLmN4eCBiL1NvdXJjZS9jbUxpbmtMaW5lRGV2aWNlQ29tcHV0ZXIuY3h4CmluZGV4IDY1ZWQzNGMuLjU3MzlmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxpbmtMaW5lRGV2aWNlQ29tcHV0ZXIuY3h4CisrKyBiL1NvdXJjZS9jbUxpbmtMaW5lRGV2aWNlQ29tcHV0ZXIuY3h4CkBAIC02LDcgKzYsOCBAQAogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgpAQCAtMTQsNiArMTUsNyBAQAogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGVEaXJlY3RvcnkuaCIKICNpbmNsdWRlICJjbVN0YXRlU25hcHNob3QuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKQEAgLTE3NiwxMSArMTc4LDExIEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHJlc29sdmVEZXZpY2VTeW1ib2xzID0KKyAgaWYgKGNtUHJvcCByZXNvbHZlRGV2aWNlU3ltYm9scyA9CiAgICAgICAgIHRhcmdldC5HZXRQcm9wZXJ0eSgiQ1VEQV9SRVNPTFZFX0RFVklDRV9TWU1CT0xTIikpIHsKICAgICAvLyBJZiBDVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgd2UgbmVlZAogICAgIC8vIHRvIGhvbm9yIHRoZSB2YWx1ZSBubyBtYXR0ZXIgd2hhdCBpdCBpcy4KLSAgICByZXR1cm4gY21Jc09uKHJlc29sdmVEZXZpY2VTeW1ib2xzKTsKKyAgICByZXR1cm4gY21Jc09uKCpyZXNvbHZlRGV2aWNlU3ltYm9scyk7CiAgIH0KIAogICAvLyBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgcmVxdWlyZQpAQCAtMTg4LDIyICsxOTAsMTkgQEAKICAgY21HZW5lcmF0b3JUYXJnZXQ6OkxpbmtDbG9zdXJlIGNvbnN0KiBjbG9zdXJlID0KICAgICB0YXJnZXQuR2V0TGlua0Nsb3N1cmUoY29uZmlnKTsKIAotICBpZiAoY21Db250YWlucyhjbG9zdXJlLT5MYW5ndWFnZXMsICJDVURBIikpIHsKLSAgICBpZiAoY29uc3QgY2hhciogc2VwYXJhYmxlQ29tcGlsYXRpb24gPQotICAgICAgICAgIHRhcmdldC5HZXRQcm9wZXJ0eSgiQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04iKSkgewotICAgICAgaWYgKGNtSXNPbihzZXBhcmFibGVDb21waWxhdGlvbikpIHsKLSAgICAgICAgYm9vbCBkb0RldmljZUxpbmtpbmcgPSBmYWxzZTsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQuR2V0VHlwZSgpKSB7Ci0gICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgotICAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKLSAgICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKLSAgICAgICAgICAgIGRvRGV2aWNlTGlua2luZyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRvRGV2aWNlTGlua2luZzsKKyAgaWYgKGNtOjpjb250YWlucyhjbG9zdXJlLT5MYW5ndWFnZXMsICJDVURBIikpIHsKKyAgICBpZiAoY21Jc09uKHRhcmdldC5HZXRQcm9wZXJ0eSgiQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04iKSkpIHsKKyAgICAgIGJvb2wgZG9EZXZpY2VMaW5raW5nID0gZmFsc2U7CisgICAgICBzd2l0Y2ggKHRhcmdldC5HZXRUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgorICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlk6CisgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOgorICAgICAgICAgIGRvRGV2aWNlTGlua2luZyA9IHRydWU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CiAgICAgICB9CisgICAgICByZXR1cm4gZG9EZXZpY2VMaW5raW5nOwogICAgIH0KIAogICAgIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbiogcGNsaSA9IHRhcmdldC5HZXRMaW5rSW5mb3JtYXRpb24oY29uZmlnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpc3RDb21tYW5kLmN4eCBiL1NvdXJjZS9jbUxpc3RDb21tYW5kLmN4eAppbmRleCA1MjAwYTE2Li5lZGVjNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaXN0Q29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtTGlzdENvbW1hbmQuY3h4CkBAIC0xNiwxMSArMTYsMTEgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKLQogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCkBAIC02Niw3ICs2Niw3IEBACiAgIC8vIGV4cGFuZCB0aGUgdmFyaWFibGUgaW50byBhIGxpc3QKICAgY21FeHBhbmRMaXN0KGxpc3RTdHJpbmcsIGxpc3QsIHRydWUpOwogICAvLyBpZiBubyBlbXB0eSBlbGVtZW50cyB0aGVuIGp1c3QgcmV0dXJuCi0gIGlmICghY21Db250YWlucyhsaXN0LCBzdGQ6OnN0cmluZygpKSkgeworICBpZiAoIWNtOjpjb250YWlucyhsaXN0LCBzdGQ6OnN0cmluZygpKSkgewogICAgIHJldHVybiB0cnVlOwogICB9CiAgIC8vIGlmIHdlIGhhdmUgZW1wdHkgZWxlbWVudHMgd2UgbmVlZCB0byBjaGVjayBwb2xpY3kgQ01QMDAwNwpAQCAtMTA1MSw2ICsxMDUxLDcgQEAKICAgICBVTklOSVRJQUxJWkVELAogICAgIFNUUklORywKICAgICBGSUxFX0JBU0VOQU1FLAorICAgIE5BVFVSQUwsCiAgIH07CiAgIGVudW0gY2xhc3MgQ2FzZVNlbnNpdGl2aXR5CiAgIHsKQEAgLTEwNzQsMTAgKzEwNzUsMjUgQEAKICAgICAgIDogbnVsbHB0cjsKICAgfQogCisgIHVzaW5nIENvbXBhcmlzb25GdW5jdGlvbiA9CisgICAgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IHN0ZDo6c3RyaW5nJiwgY29uc3Qgc3RkOjpzdHJpbmcmKT47CisgIENvbXBhcmlzb25GdW5jdGlvbiBHZXRDb21wYXJpc29uRnVuY3Rpb24oQ29tcGFyZSBjb21wYXJlKQorICB7CisgICAgaWYgKGNvbXBhcmUgPT0gQ29tcGFyZTo6TkFUVVJBTCkgeworICAgICAgcmV0dXJuIHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0IHN0ZDo6c3RyaW5nJik+KAorICAgICAgICBbXShjb25zdCBzdGQ6OnN0cmluZyYgeCwgY29uc3Qgc3RkOjpzdHJpbmcmIHkpIHsKKyAgICAgICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6c3RydmVyc2NtcCh4LCB5KSA8IDA7CisgICAgICAgIH0pOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IHN0ZDo6c3RyaW5nJiwgY29uc3Qgc3RkOjpzdHJpbmcmKT4oCisgICAgICBbXShjb25zdCBzdGQ6OnN0cmluZyYgeCwgY29uc3Qgc3RkOjpzdHJpbmcmIHkpIHsgcmV0dXJuIHggPCB5OyB9KTsKKyAgfQorCiBwdWJsaWM6CiAgIGNtU3RyaW5nU29ydGVyKENvbXBhcmUgY29tcGFyZSwgQ2FzZVNlbnNpdGl2aXR5IGNhc2VTZW5zaXRpdml0eSwKICAgICAgICAgICAgICAgICAgT3JkZXIgZGVzYyA9IE9yZGVyOjpBU0NFTkRJTkcpCiAgICAgOiBmaWx0ZXJzeyBHZXRDb21wYXJlRmlsdGVyKGNvbXBhcmUpLCBHZXRDYXNlRmlsdGVyKGNhc2VTZW5zaXRpdml0eSkgfQorICAgICwgc29ydE1ldGhvZChHZXRDb21wYXJpc29uRnVuY3Rpb24oY29tcGFyZSkpCiAgICAgLCBkZXNjZW5kaW5nKGRlc2MgPT0gT3JkZXI6OkRFU0NFTkRJTkcpCiAgIHsKICAgfQpAQCAtMTA5OSwxNSArMTExNSwxNiBAQAogICAgIHN0ZDo6c3RyaW5nIGJmID0gQXBwbHlGaWx0ZXIoYik7CiAgICAgYm9vbCByZXN1bHQ7CiAgICAgaWYgKGRlc2NlbmRpbmcpIHsKLSAgICAgIHJlc3VsdCA9IGJmIDwgYWY7CisgICAgICByZXN1bHQgPSBzb3J0TWV0aG9kKGJmLCBhZik7CiAgICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IGFmIDwgYmY7CisgICAgICByZXN1bHQgPSBzb3J0TWV0aG9kKGFmLCBiZik7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAogcHJvdGVjdGVkOgogICBTdHJpbmdGaWx0ZXIgZmlsdGVyc1syXSA9IHsgbnVsbHB0ciwgbnVsbHB0ciB9OworICBDb21wYXJpc29uRnVuY3Rpb24gc29ydE1ldGhvZDsKICAgYm9vbCBkZXNjZW5kaW5nOwogfTsKIApAQCAtMTE0Miw2ICsxMTU5LDggQEAKICAgICAgICAgICBzb3J0Q29tcGFyZSA9IGNtU3RyaW5nU29ydGVyOjpDb21wYXJlOjpTVFJJTkc7CiAgICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgPT0gIkZJTEVfQkFTRU5BTUUiKSB7CiAgICAgICAgICAgc29ydENvbXBhcmUgPSBjbVN0cmluZ1NvcnRlcjo6Q29tcGFyZTo6RklMRV9CQVNFTkFNRTsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCA9PSAiTkFUVVJBTCIpIHsKKyAgICAgICAgICBzb3J0Q29tcGFyZSA9IGNtU3RyaW5nU29ydGVyOjpDb21wYXJlOjpOQVRVUkFMOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHN0ZDo6c3RyaW5nIGVycm9yID0KICAgICAgICAgICAgIGNtU3RyQ2F0KG1lc3NhZ2VIaW50LCAidmFsdWUgXCIiLCBhcmd1bWVudCwgIlwiIGZvciBvcHRpb24gXCIiLApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTGlzdEZpbGVDYWNoZS5jeHggYi9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmN4eAppbmRleCA0NzY3OWM5Li43ZWJiMDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmN4eAorKysgYi9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmN4eApAQCAtMjYsMTMgKzI2LDE1IEBACiBzdHJ1Y3QgY21MaXN0RmlsZVBhcnNlcgogewogICBjbUxpc3RGaWxlUGFyc2VyKGNtTGlzdEZpbGUqIGxmLCBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQsCi0gICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwgY29uc3QgY2hhciogZmlsZW5hbWUpOworICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIpOwogICB+Y21MaXN0RmlsZVBhcnNlcigpOwogICBjbUxpc3RGaWxlUGFyc2VyKGNvbnN0IGNtTGlzdEZpbGVQYXJzZXImKSA9IGRlbGV0ZTsKICAgY21MaXN0RmlsZVBhcnNlciYgb3BlcmF0b3I9KGNvbnN0IGNtTGlzdEZpbGVQYXJzZXImKSA9IGRlbGV0ZTsKICAgdm9pZCBJc3N1ZUZpbGVPcGVuRXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIHRleHQpIGNvbnN0OwogICB2b2lkIElzc3VlRXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QmIHRleHQpIGNvbnN0OwotICBib29sIFBhcnNlRmlsZSgpOworICBib29sIFBhcnNlRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSk7CisgIGJvb2wgUGFyc2VTdHJpbmcoY29uc3QgY2hhciogc3RyLCBjb25zdCBjaGFyKiB2aXJ0dWFsX2ZpbGVuYW1lKTsKKyAgYm9vbCBQYXJzZSgpOwogICBib29sIFBhcnNlRnVuY3Rpb24oY29uc3QgY2hhciogbmFtZSwgbG9uZyBsaW5lKTsKICAgYm9vbCBBZGRBcmd1bWVudChjbUxpc3RGaWxlTGV4ZXJfVG9rZW4qIHRva2VuLAogICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVBcmd1bWVudDo6RGVsaW1pdGVyIGRlbGltKTsKQEAgLTUxLDEyICs1MywxMSBAQAogfTsKIAogY21MaXN0RmlsZVBhcnNlcjo6Y21MaXN0RmlsZVBhcnNlcihjbUxpc3RGaWxlKiBsZiwgY21MaXN0RmlsZUJhY2t0cmFjZSBsZmJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlcikKICAgOiBMaXN0RmlsZShsZikKICAgLCBCYWNrdHJhY2Uoc3RkOjptb3ZlKGxmYnQpKQogICAsIE1lc3NlbmdlcihtZXNzZW5nZXIpCi0gICwgRmlsZU5hbWUoZmlsZW5hbWUpCisgICwgRmlsZU5hbWUobnVsbHB0cikKICAgLCBMZXhlcihjbUxpc3RGaWxlTGV4ZXJfTmV3KCkpCiB7CiB9CkBAIC04Myw4ICs4NCwxMCBAQAogICBjbVN5c3RlbVRvb2xzOjpTZXRGYXRhbEVycm9yT2NjdXJlZCgpOwogfQogCi1ib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlRmlsZSgpCitib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkKIHsKKyAgdGhpcy0+RmlsZU5hbWUgPSBmaWxlbmFtZTsKKwogICAvLyBPcGVuIHRoZSBmaWxlLgogICBjbUxpc3RGaWxlTGV4ZXJfQk9NIGJvbTsKICAgaWYgKCFjbUxpc3RGaWxlTGV4ZXJfU2V0RmlsZU5hbWUodGhpcy0+TGV4ZXIsIHRoaXMtPkZpbGVOYW1lLCAmYm9tKSkgewpAQCAtMTA3LDYgKzExMCwyNCBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCisgIHJldHVybiBQYXJzZSgpOworfQorCitib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmlydHVhbF9maWxlbmFtZSkKK3sKKyAgdGhpcy0+RmlsZU5hbWUgPSB2aXJ0dWFsX2ZpbGVuYW1lOworCisgIGlmICghY21MaXN0RmlsZUxleGVyX1NldFN0cmluZyh0aGlzLT5MZXhlciwgc3RyKSkgeworICAgIHRoaXMtPklzc3VlRmlsZU9wZW5FcnJvcigiY21MaXN0RmlsZUNhY2hlOiBjYW5ub3QgYWxsb2NhdGUgYnVmZmVyLiIpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiBQYXJzZSgpOworfQorCitib29sIGNtTGlzdEZpbGVQYXJzZXI6OlBhcnNlKCkKK3sKICAgLy8gVXNlIGEgc2ltcGxlIHJlY3Vyc2l2ZS1kZXNjZW50IHBhcnNlciB0byBwcm9jZXNzIHRoZSB0b2tlbgogICAvLyBzdHJlYW0uCiAgIGJvb2wgaGF2ZU5ld2xpbmUgPSB0cnVlOwpAQCAtMTU1LDggKzE3NiwyMiBAQAogICBib29sIHBhcnNlRXJyb3IgPSBmYWxzZTsKIAogICB7Ci0gICAgY21MaXN0RmlsZVBhcnNlciBwYXJzZXIodGhpcywgbGZidCwgbWVzc2VuZ2VyLCBmaWxlbmFtZSk7Ci0gICAgcGFyc2VFcnJvciA9ICFwYXJzZXIuUGFyc2VGaWxlKCk7CisgICAgY21MaXN0RmlsZVBhcnNlciBwYXJzZXIodGhpcywgbGZidCwgbWVzc2VuZ2VyKTsKKyAgICBwYXJzZUVycm9yID0gIXBhcnNlci5QYXJzZUZpbGUoZmlsZW5hbWUpOworICB9CisKKyAgcmV0dXJuICFwYXJzZUVycm9yOworfQorCitib29sIGNtTGlzdEZpbGU6OlBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0ciwgY29uc3QgY2hhciogdmlydHVhbF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCkKK3sKKyAgYm9vbCBwYXJzZUVycm9yID0gZmFsc2U7CisKKyAgeworICAgIGNtTGlzdEZpbGVQYXJzZXIgcGFyc2VyKHRoaXMsIGxmYnQsIG1lc3Nlbmdlcik7CisgICAgcGFyc2VFcnJvciA9ICFwYXJzZXIuUGFyc2VTdHJpbmcoc3RyLCB2aXJ0dWFsX2ZpbGVuYW1lKTsKICAgfQogCiAgIHJldHVybiAhcGFyc2VFcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxpc3RGaWxlQ2FjaGUuaCBiL1NvdXJjZS9jbUxpc3RGaWxlQ2FjaGUuaAppbmRleCA5Y2FlODI3Li4wYjQ0MTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21MaXN0RmlsZUNhY2hlLmgKKysrIGIvU291cmNlL2NtTGlzdEZpbGVDYWNoZS5oCkBAIC0xNzUsNiArMTc1LDMyIEBACiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBCVDxzdGQ6OnN0cmluZz4gY29uc3QmIHMpOwogCisvLyBXcmFwIHR5cGUgVCBhcyBhIHZhbHVlIHdpdGggcG90ZW50aWFsbHkgbXVsdGlwbGUgYmFja3RyYWNlcy4gIEZvciBwdXJwb3NlcworLy8gb2Ygb3JkZXJpbmcgYW5kIGVxdWFsaXR5IGNvbXBhcmlzb24sIG9ubHkgdGhlIG9yaWdpbmFsIHZhbHVlIGlzIHVzZWQuICBUaGUKKy8vIGJhY2t0cmFjZSBpcyBjb25zaWRlcmVkIGluY2lkZW50YWwuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIEJUcworeworcHVibGljOgorICBCVHMoVCB2ID0gVCgpLCBjbUxpc3RGaWxlQmFja3RyYWNlIGJ0ID0gY21MaXN0RmlsZUJhY2t0cmFjZSgpKQorICAgIDogVmFsdWUoc3RkOjptb3ZlKHYpKQorICB7CisgICAgQmFja3RyYWNlcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGJ0KSk7CisgIH0KKyAgVCBWYWx1ZTsKKyAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUJhY2t0cmFjZT4gQmFja3RyYWNlczsKKyAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShCVHM8VD4gY29uc3QmIGwsIEJUczxUPiBjb25zdCYgcikKKyAgeworICAgIHJldHVybiBsLlZhbHVlID09IHIuVmFsdWU7CisgIH0KKyAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KEJUczxUPiBjb25zdCYgbCwgQlRzPFQ+IGNvbnN0JiByKQorICB7CisgICAgcmV0dXJuIGwuVmFsdWUgPCByLlZhbHVlOworICB9CisgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oQlRzPFQ+IGNvbnN0JiBsLCBUIGNvbnN0JiByKSB7IHJldHVybiBsLlZhbHVlID09IHI7IH0KKyAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShUIGNvbnN0JiBsLCBCVHM8VD4gY29uc3QmIHIpIHsgcmV0dXJuIGwgPT0gci5WYWx1ZTsgfQorfTsKKwogc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiBFeHBhbmRMaXN0V2l0aEJhY2t0cmFjZSgKICAgc3RkOjpzdHJpbmcgY29uc3QmIGxpc3QsCiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0ID0gY21MaXN0RmlsZUJhY2t0cmFjZSgpKTsKQEAgLTE4NCw2ICsyMTAsOSBAQAogICBib29sIFBhcnNlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAogICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBsZmJ0KTsKIAorICBib29sIFBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0ciwgY29uc3QgY2hhciogdmlydHVhbF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLCBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBsZmJ0KTsKKwogICBzdGQ6OnZlY3RvcjxjbUxpc3RGaWxlRnVuY3Rpb24+IEZ1bmN0aW9uczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvYWRDYWNoZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtTG9hZENhY2hlQ29tbWFuZC5jeHgKaW5kZXggMTE4NGJjYi4uZDQ5ZTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9hZENhY2hlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtTG9hZENhY2hlQ29tbWFuZC5jeHgKQEAgLTI0LDEyICsyNCwyMCBAQAogewogICBpZiAoYXJncy5lbXB0eSgpKSB7CiAgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiIpOworICAgIHJldHVybiBmYWxzZTsKICAgfQogCiAgIGlmIChhcmdzLnNpemUoKSA+PSAyICYmIGFyZ3NbMV0gPT0gIlJFQURfV0lUSF9QUkVGSVgiKSB7CiAgICAgcmV0dXJuIFJlYWRXaXRoUHJlZml4KGFyZ3MsIHN0YXR1cyk7CiAgIH0KIAorICBpZiAoc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRXb3JraW5nTW9kZSgpID09CisgICAgICBjbWFrZTo6U0NSSVBUX01PREUpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoCisgICAgICAiT25seSBsb2FkX2NhY2hlKFJFQURfV0lUSF9QUkVGSVgpIG1heSBiZSB1c2VkIGluIHNjcmlwdCBtb2RlIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgLy8gQ2FjaGUgZW50cmllcyB0byBiZSBleGNsdWRlZCBmcm9tIHRoZSBpbXBvcnQgbGlzdC4KICAgLy8gSWYgdGhpcyBzZXQgaXMgZW1wdHksIGFsbCBjYWNoZSBlbnRyaWVzIGFyZSBicm91Z2h0IGluCiAgIC8vIGFuZCB0aGV5IGNhbiBub3QgYmUgb3ZlcnJpZGRlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvYWRDb21tYW5kQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21Mb2FkQ29tbWFuZENvbW1hbmQuY3h4CmluZGV4IDIzYWNlNjQuLjU3OTBlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvYWRDb21tYW5kQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtTG9hZENvbW1hbmRDb21tYW5kLmN4eApAQCAtMSw1ICsxLDE1IEBACiAvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fc3VuKQorLy8gUE9TSVggQVBJcyBhcmUgbmVlZGVkCisjICBkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDIwMDgwOUwKKyNlbmRpZgorI2lmIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykKKy8vIEZvciBpc2FzY2lpCisjICBkZWZpbmUgX1hPUEVOX1NPVVJDRSA3MDAKKyNlbmRpZgorCiAjaW5jbHVkZSAiY21Mb2FkQ29tbWFuZENvbW1hbmQuaCIKIAogI2luY2x1ZGUgPGNzaWduYWw+CkBAIC0xNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21EeW5hbWljTG9hZGVyLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKKyNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTI1LDYgKzM2LDggQEAKICMgIGluY2x1ZGUgPG1hbGxvYy5oPiAvKiBmb3IgbWFsbG9jL2ZyZWUgb24gUU5YICovCiAjZW5kaWYKIAorY2xhc3MgY21MaXN0RmlsZUJhY2t0cmFjZTsKKwogbmFtZXNwYWNlIHsKIAogY29uc3QgY2hhciogTGFzdE5hbWUgPSBudWxscHRyOwpAQCAtMTU4LDggKzE3MSwxMCBAQAogICBpZiAocmVzdWx0KSB7CiAgICAgaWYgKHRoaXMtPkltcGwtPkZpbmFsUGFzcykgewogICAgICAgYXV0byBpbXBsID0gdGhpcy0+SW1wbDsKLSAgICAgIHRoaXMtPk1ha2VmaWxlLT5BZGRGaW5hbEFjdGlvbigKLSAgICAgICAgW2ltcGxdKGNtTWFrZWZpbGUmIG1ha2VmaWxlKSB7IGltcGwtPkRvRmluYWxQYXNzKCZtYWtlZmlsZSk7IH0pOworICAgICAgdGhpcy0+TWFrZWZpbGUtPkFkZEdlbmVyYXRvckFjdGlvbigKKyAgICAgICAgW2ltcGxdKGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJikgeworICAgICAgICAgIGltcGwtPkRvRmluYWxQYXNzKGxnLkdldE1ha2VmaWxlKCkpOworICAgICAgICB9KTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsQ29tbW9uR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUxvY2FsQ29tbW9uR2VuZXJhdG9yLmN4eAppbmRleCBmODY5NTVkLi40NGRiODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbENvbW1vbkdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTG9jYWxDb21tb25HZW5lcmF0b3IuY3h4CkBAIC0xNywxNCArMTcsOCBAQAogICA6IGNtTG9jYWxHZW5lcmF0b3IoZ2csIG1mKQogICAsIFdvcmtpbmdEaXJlY3Rvcnkoc3RkOjptb3ZlKHdkKSkKIHsKLSAgLy8gU3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkLgotICBpZiAoY29uc3QgY2hhciogY29uZmlnID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSkgewotICAgIC8vIFVzZSB0aGUgYnVpbGQgdHlwZSBnaXZlbiBieSB0aGUgdXNlci4KLSAgICB0aGlzLT5Db25maWdOYW1lID0gY29uZmlnOwotICB9IGVsc2UgewotICAgIC8vIE5vIGNvbmZpZ3VyYXRpb24gdHlwZSBnaXZlbi4KLSAgICB0aGlzLT5Db25maWdOYW1lLmNsZWFyKCk7Ci0gIH0KKyAgdGhpcy0+Q29uZmlnTmFtZXMgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiB9CiAKIGNtTG9jYWxDb21tb25HZW5lcmF0b3I6On5jbUxvY2FsQ29tbW9uR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwpAQCAtNTQsNiArNDgsMTUgQEAKICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRSZXF1aXJlZERlZmluaXRpb24oIkNNQUtFX0ZvcnRyYW5fTU9ERElSX0ZMQUciKSwKICAgICAgIG1vZF9kaXIpOwogICAgIHRoaXMtPkFwcGVuZEZsYWdzKGZsYWdzLCBtb2RmbGFnKTsKKyAgICAvLyBTb21lIGNvbXBpbGVycyBkbyBub3Qgc2VhcmNoIHRoZWlyIG93biBtb2R1bGUgb3V0cHV0IGRpcmVjdG9yeQorICAgIC8vIGZvciB1c2luZyBvdGhlciBtb2R1bGVzLiAgQWRkIGFuIGluY2x1ZGUgZGlyZWN0b3J5IGV4cGxpY2l0bHkKKyAgICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBjb21waWxlcnMgdGhhdCBkbyBzZWFyY2ggaXQuCisgICAgc3RkOjpzdHJpbmcgaW5jZmxhZyA9CisgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0ZvcnRyYW5fTU9ERElSX0lOQ0xVREVfRkxBRyIpOworICAgIGlmICghaW5jZmxhZy5lbXB0eSgpKSB7CisgICAgICBpbmNmbGFnID0gY21TdHJDYXQoaW5jZmxhZywgbW9kX2Rpcik7CisgICAgICB0aGlzLT5BcHBlbmRGbGFncyhmbGFncywgaW5jZmxhZyk7CisgICAgfQogICB9CiAKICAgLy8gSWYgdGhlcmUgaXMgYSBzZXBhcmF0ZSBtb2R1bGUgcGF0aCBmbGFnIHRoZW4gZHVwbGljYXRlIHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTG9jYWxDb21tb25HZW5lcmF0b3IuaCBiL1NvdXJjZS9jbUxvY2FsQ29tbW9uR2VuZXJhdG9yLmgKaW5kZXggZWFlZjZhYi4uMzc4Y2E2MyAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxDb21tb25HZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21Mb2NhbENvbW1vbkdlbmVyYXRvci5oCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAKQEAgLTI1LDcgKzI2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgd2QpOwogICB+Y21Mb2NhbENvbW1vbkdlbmVyYXRvcigpIG92ZXJyaWRlOwogCi0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBHZXRDb25maWdOYW1lKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q29uZmlnTmFtZTsgfQorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIEdldENvbmZpZ05hbWVzKCkgY29uc3QKKyAgeworICAgIHJldHVybiB0aGlzLT5Db25maWdOYW1lczsKKyAgfQogCiAgIHN0ZDo6c3RyaW5nIEdldFdvcmtpbmdEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5Xb3JraW5nRGlyZWN0b3J5OyB9CiAKQEAgLTM5LDcgKzQzLDcgQEAKIHByb3RlY3RlZDoKICAgc3RkOjpzdHJpbmcgV29ya2luZ0RpcmVjdG9yeTsKIAotICBzdGQ6OnN0cmluZyBDb25maWdOYW1lOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ29uZmlnTmFtZXM7CiAKICAgZnJpZW5kIGNsYXNzIGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbUxvY2FsR2VuZXJhdG9yLmN4eAppbmRleCBhZjkyZTFiLi43ZTM1ZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTG9jYWxHZW5lcmF0b3IuY3h4CkBAIC0yLDkgKzIsMjMgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtTG9jYWxHZW5lcmF0b3IuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci5oIgpAQCAtMTksMTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21MaW5rTGluZUNvbXB1dGVyLmgiCi0jaW5jbHVkZSAiY21MaW5rTGluZURldmljZUNvbXB1dGVyLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlTG9jYXRpb24uaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQuaCIKKyNpbmNsdWRlICJjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlRGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC00MCwyMCArNTUsNiBAQAogIyAgaW5jbHVkZSAiY21DcnlwdG9IYXNoLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KLQogI2lmIGRlZmluZWQoX19IQUlLVV9fKQogIyAgaW5jbHVkZSA8RmluZERpcmVjdG9yeS5oPgogIyAgaW5jbHVkZSA8U3RvcmFnZURlZnMuaD4KQEAgLTEyOSw2ICsxMzAsMjggQEAKICAgICB0aGlzLT5MaW5rZXJTeXNyb290ID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9TWVNST09UIik7CiAgIH0KIAorICBpZiAoY21Qcm9wIGFwcGxlQXJjaFN5c3Jvb3RzID0KKyAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZigiQ01BS0VfQVBQTEVfQVJDSF9TWVNST09UUyIpKSB7CisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGFwcGxlQXJjaHMgPQorICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9PU1hfQVJDSElURUNUVVJFUyIpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmNoczsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3lzcm9vdHM7CisgICAgY21FeHBhbmRMaXN0KGFwcGxlQXJjaHMsIGFyY2hzKTsKKyAgICBjbUV4cGFuZExpc3QoKmFwcGxlQXJjaFN5c3Jvb3RzLCBzeXNyb290cywgdHJ1ZSk7CisgICAgaWYgKGFyY2hzLnNpemUoKSA9PSBzeXNyb290cy5zaXplKCkpIHsKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJjaHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdGhpcy0+QXBwbGVBcmNoU3lzcm9vdHNbYXJjaHNbaV1dID0gc3lzcm9vdHNbaV07CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGUgPQorICAgICAgICBjbVN0ckNhdCgiQ01BS0VfQVBQTEVfQVJDSF9TWVNST09UUzpcbiAgIiwgKmFwcGxlQXJjaFN5c3Jvb3RzLAorICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICJpcyBub3QgdGhlIHNhbWUgbGVuZ3RoIGFzIENNQUtFX09TWF9BUkNISVRFQ1RVUkVTOlxuICAiLAorICAgICAgICAgICAgICAgICBhcHBsZUFyY2hzKTsKKyAgICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUpOworICAgIH0KKyAgfQorCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcgOiBlbmFibGVkTGFuZ3VhZ2VzKSB7CiAgICAgaWYgKGxhbmcgPT0gIk5PTkUiKSB7CiAgICAgICBjb250aW51ZTsKQEAgLTE4MSwxMSArMjA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxpbmtlclN5c3Jvb3QpOwogfQogCi1jbUxvY2FsR2VuZXJhdG9yOjp+Y21Mb2NhbEdlbmVyYXRvcigpCi17Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkdlbmVyYXRvclRhcmdldHMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5Pd25lZEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0cyk7Ci19CitjbUxvY2FsR2VuZXJhdG9yOjp+Y21Mb2NhbEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpJc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGUgdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0KSBjb25zdApAQCAtMjAyLDcgKzIyMSw3IEBACiAgIHRoaXMtPk9iamVjdFBhdGhNYXggPSAxMDAwOwogI2VuZGlmCiAgIGNvbnN0IGNoYXIqIHBsZW4gPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfT0JKRUNUX1BBVEhfTUFYIik7Ci0gIGlmIChwbGVuICYmICpwbGVuKSB7CisgIGlmIChjbU5vbmVtcHR5KHBsZW4pKSB7CiAgICAgdW5zaWduZWQgaW50IHBtYXg7CiAgICAgaWYgKHNzY2FuZihwbGVuLCAiJXUiLCAmcG1heCkgPT0gMSkgewogICAgICAgaWYgKHBtYXggPj0gMTI4KSB7CkBAIC0yNjMsOSArMjgyLDkgQEAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6VHJhY2VEZXBlbmRlbmNpZXMoKQogewogICAvLyBHZW5lcmF0ZSB0aGUgcnVsZSBmaWxlcyBmb3IgZWFjaCB0YXJnZXQuCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRhcmdldHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRhcmdldHMpIHsKLSAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgeworICBjb25zdCBhdXRvJiB0YXJnZXRzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICBpZiAoIXRhcmdldC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICB0YXJnZXQtPlRyYWNlRGVwZW5kZW5jaWVzKCk7CkBAIC0yNzksOSArMjk4LDkgQEAKICAgfQogCiAgIC8vIENvbXB1dGUgdGhlIHNldCBvZiBjb25maWd1cmF0aW9ucy4KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3VyYXRpb25UeXBlczsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3VyYXRpb25UeXBlcywgZmFsc2UpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uZmlndXJhdGlvblR5cGVzID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpPbmx5TXVsdGlDb25maWcpOworICBzdGQ6OnN0cmluZyBjb25maWcgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTsKIAogICBzdGQ6OnN0cmluZyBmaWxlID0KICAgICBjbVN0ckNhdCh0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRCaW5hcnkoKSwKQEAgLTI5MCwzNiArMzA5LDQwIEBACiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmb3V0KGZpbGUpOwogICBmb3V0LlNldENvcHlJZkRpZmZlcmVudCh0cnVlKTsKIAotICBmb3V0IDw8ICIjIENNYWtlIGdlbmVyYXRlZCBUZXN0ZmlsZSBmb3IgIiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyBTb3VyY2UgZGlyZWN0b3J5OiAiCi0gICAgICAgPDwgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50U291cmNlKCkgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgQnVpbGQgZGlyZWN0b3J5OiAiCi0gICAgICAgPDwgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50QmluYXJ5KCkgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiMgIiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIHJlbGV2YW50IHRlc3RpbmcgY29tbWFuZHMgIgotICAgICAgIDw8ICJyZXF1aXJlZCBmb3IgIiA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCAiIyB0ZXN0aW5nIHRoaXMgZGlyZWN0b3J5IGFuZCBsaXN0cyBzdWJkaXJlY3RvcmllcyB0byAiCi0gICAgICAgPDwgImJlIHRlc3RlZCBhcyB3ZWxsLiIgPDwgc3RkOjplbmRsOworICBmb3V0IDw8ICIjIENNYWtlIGdlbmVyYXRlZCBUZXN0ZmlsZSBmb3IgXG4iCisgICAgICAgICAgIiMgU291cmNlIGRpcmVjdG9yeTogIgorICAgICAgIDw8IHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudFNvdXJjZSgpCisgICAgICAgPDwgIlxuIgorICAgICAgICAgICIjIEJ1aWxkIGRpcmVjdG9yeTogIgorICAgICAgIDw8IHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudEJpbmFyeSgpCisgICAgICAgPDwgIlxuIgorICAgICAgICAgICIjIFxuIgorICAgICAgICAgICIjIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgcmVsZXZhbnQgdGVzdGluZyBjb21tYW5kcyAiCisgICAgICAgICAgInJlcXVpcmVkIGZvciBcbiIKKyAgICAgICAgICAiIyB0ZXN0aW5nIHRoaXMgZGlyZWN0b3J5IGFuZCBsaXN0cyBzdWJkaXJlY3RvcmllcyB0byAiCisgICAgICAgICAgImJlIHRlc3RlZCBhcyB3ZWxsLlxuIjsKIAotICBjb25zdCBjaGFyKiB0ZXN0SW5jbHVkZUZpbGUgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eSgiVEVTVF9JTkNMVURFX0ZJTEUiKTsKLSAgaWYgKHRlc3RJbmNsdWRlRmlsZSkgewotICAgIGZvdXQgPDwgImluY2x1ZGUoXCIiIDw8IHRlc3RJbmNsdWRlRmlsZSA8PCAiXCIpIiA8PCBzdGQ6OmVuZGw7CisgIHN0ZDo6c3RyaW5nIHJlc291cmNlU3BlY0ZpbGUgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFIik7CisgIGlmICghcmVzb3VyY2VTcGVjRmlsZS5lbXB0eSgpKSB7CisgICAgZm91dCA8PCAic2V0KENURVNUX1JFU09VUkNFX1NQRUNfRklMRSBcIiIgPDwgcmVzb3VyY2VTcGVjRmlsZSA8PCAiXCIpXG4iOwogICB9CiAKLSAgY29uc3QgY2hhciogdGVzdEluY2x1ZGVGaWxlcyA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJURVNUX0lOQ0xVREVfRklMRVMiKTsKKyAgY21Qcm9wIHRlc3RJbmNsdWRlRmlsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eSgiVEVTVF9JTkNMVURFX0ZJTEUiKTsKKyAgaWYgKHRlc3RJbmNsdWRlRmlsZSkgeworICAgIGZvdXQgPDwgImluY2x1ZGUoXCIiIDw8ICp0ZXN0SW5jbHVkZUZpbGUgPDwgIlwiKVxuIjsKKyAgfQorCisgIGNtUHJvcCB0ZXN0SW5jbHVkZUZpbGVzID0gdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJURVNUX0lOQ0xVREVfRklMRVMiKTsKICAgaWYgKHRlc3RJbmNsdWRlRmlsZXMpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jbHVkZXNMaXN0ID0gY21FeHBhbmRlZExpc3QodGVzdEluY2x1ZGVGaWxlcyk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzTGlzdCA9IGNtRXhwYW5kZWRMaXN0KCp0ZXN0SW5jbHVkZUZpbGVzKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW5jbHVkZXNMaXN0KSB7Ci0gICAgICBmb3V0IDw8ICJpbmNsdWRlKFwiIiA8PCBpIDw8ICJcIikiIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIGZvdXQgPDwgImluY2x1ZGUoXCIiIDw8IGkgPDwgIlwiKVxuIjsKICAgICB9CiAgIH0KIAogICAvLyBBc2sgZWFjaCB0ZXN0IGdlbmVyYXRvciB0byB3cml0ZSBpdHMgY29kZS4KLSAgc3RkOjp2ZWN0b3I8Y21UZXN0R2VuZXJhdG9yKj4gY29uc3QmIHRlc3RlcnMgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRUZXN0R2VuZXJhdG9ycygpOwotICBmb3IgKGNtVGVzdEdlbmVyYXRvciogdGVzdGVyIDogdGVzdGVycykgeworICBmb3IgKGNvbnN0IGF1dG8mIHRlc3RlciA6IHRoaXMtPk1ha2VmaWxlLT5HZXRUZXN0R2VuZXJhdG9ycygpKSB7CiAgICAgdGVzdGVyLT5Db21wdXRlKHRoaXMpOwogICAgIHRlc3Rlci0+R2VuZXJhdGUoZm91dCwgY29uZmlnLCBjb25maWd1cmF0aW9uVHlwZXMpOwogICB9CkBAIC0zMzEsMTggKzM1NCwxOCBAQAogICAgIHN0ZDo6c3RyaW5nIG91dFAgPSBpLkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRCaW5hcnkoKTsKICAgICBvdXRQID0gdGhpcy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgocGFyZW50QmluRGlyLCBvdXRQKTsKICAgICBvdXRQID0gY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKG91dFApOwotICAgIGZvdXQgPDwgInN1YmRpcnMoIiA8PCBvdXRQIDw8ICIpIiA8PCBzdGQ6OmVuZGw7CisgICAgZm91dCA8PCAic3ViZGlycygiIDw8IG91dFAgPDwgIilcbiI7CiAgIH0KIAogICAvLyBBZGQgZGlyZWN0b3J5IGxhYmVscyBwcm9wZXJ0eQogICBjb25zdCBjaGFyKiBkaXJlY3RvcnlMYWJlbHMgPQogICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ESVJFQ1RPUllfTEFCRUxTIik7Ci0gIGNvbnN0IGNoYXIqIGxhYmVscyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eSgiTEFCRUxTIik7CisgIGNtUHJvcCBsYWJlbHMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIkxBQkVMUyIpOwogCiAgIGlmIChsYWJlbHMgfHwgZGlyZWN0b3J5TGFiZWxzKSB7CiAgICAgZm91dCA8PCAic2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzKFBST1BFUlRJRVMgTEFCRUxTICI7CiAgICAgaWYgKGxhYmVscykgewotICAgICAgZm91dCA8PCBjbU91dHB1dENvbnZlcnRlcjo6RXNjYXBlRm9yQ01ha2UobGFiZWxzKTsKKyAgICAgIGZvdXQgPDwgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKCpsYWJlbHMpOwogICAgIH0KICAgICBpZiAobGFiZWxzICYmIGRpcmVjdG9yeUxhYmVscykgewogICAgICAgZm91dCA8PCAiOyI7CkBAIC0zNTAsMTQgKzM3MywxNCBAQAogICAgIGlmIChkaXJlY3RvcnlMYWJlbHMpIHsKICAgICAgIGZvdXQgPDwgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKGRpcmVjdG9yeUxhYmVscyk7CiAgICAgfQotICAgIGZvdXQgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgICBmb3V0IDw8ICIpXG4iOwogICB9CiB9CiAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6Q3JlYXRlRXZhbHVhdGlvbkZpbGVPdXRwdXRzKCkKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncygpOworICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGMgOiBjb25maWdzKSB7CiAgICAgdGhpcy0+Q3JlYXRlRXZhbHVhdGlvbkZpbGVPdXRwdXRzKGMpOwogICB9CkBAIC0zNjUsOSArMzg4LDcgQEAKIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpDcmVhdGVFdmFsdWF0aW9uRmlsZU91dHB1dHMoc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZykKIHsKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUqPiBlZiA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldEV2YWx1YXRpb25GaWxlcygpOwotICBmb3IgKGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlKiBnZWVmIDogZWYpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBnZWVmIDogdGhpcy0+TWFrZWZpbGUtPkdldEV2YWx1YXRpb25GaWxlcygpKSB7CiAgICAgZ2VlZi0+Q3JlYXRlT3V0cHV0RmlsZSh0aGlzLCBjb25maWcpOwogICB9CiB9CkBAIC0zNzUsOCArMzk2LDcgQEAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6UHJvY2Vzc0V2YWx1YXRpb25GaWxlcygKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBnZW5lcmF0ZWRGaWxlcykKIHsKLSAgZm9yIChjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0aW9uRmlsZSogZ2VlZiA6Ci0gICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldEV2YWx1YXRpb25GaWxlcygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgZ2VlZiA6IHRoaXMtPk1ha2VmaWxlLT5HZXRFdmFsdWF0aW9uRmlsZXMoKSkgewogICAgIGdlZWYtPkdlbmVyYXRlKHRoaXMpOwogICAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGYXRhbEVycm9yT2NjdXJlZCgpKSB7CiAgICAgICByZXR1cm47CkBAIC0zOTUsNyArNDE1LDcgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjbUFwcGVuZChnZW5lcmF0ZWRGaWxlcywgZmlsZXMpOworICAgIGNtOjphcHBlbmQoZ2VuZXJhdGVkRmlsZXMsIGZpbGVzKTsKICAgICBzdGQ6OmlucGxhY2VfbWVyZ2UoZ2VuZXJhdGVkRmlsZXMuYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkRmlsZXMuZW5kKCkgLSBmaWxlcy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZEZpbGVzLmVuZCgpKTsKQEAgLTQxNCw3ICs0MzQsNyBAQAogICAgICAgcHJlZml4X3dpbjMyID0gIkM6IjsKICAgICB9CiAgICAgY29uc3QgY2hhciogcHJvamVjdF9uYW1lID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIlBST0pFQ1RfTkFNRSIpOwotICAgIGlmIChwcm9qZWN0X25hbWUgJiYgcHJvamVjdF9uYW1lWzBdKSB7CisgICAgaWYgKGNtTm9uZW1wdHkocHJvamVjdF9uYW1lKSkgewogICAgICAgcHJlZml4X3dpbjMyICs9ICIvUHJvZ3JhbSBGaWxlcy8iOwogICAgICAgcHJlZml4X3dpbjMyICs9IHByb2plY3RfbmFtZTsKICAgICB9IGVsc2UgewpAQCAtNDQzLDkgKzQ2Myw5IEBACiAgIH0KIAogICAvLyBDb21wdXRlIHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMuCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWd1cmF0aW9uVHlwZXM7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWd1cmF0aW9uVHlwZXMsIGZhbHNlKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3VyYXRpb25UeXBlcyA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6T25seU11bHRpQ29uZmlnKTsKKyAgc3RkOjpzdHJpbmcgY29uZmlnID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmF1bHRDb25maWd1cmF0aW9uKCk7CiAKICAgLy8gQ2hvb3NlIGEgZGVmYXVsdCBpbnN0YWxsIGNvbmZpZ3VyYXRpb24uCiAgIHN0ZDo6c3RyaW5nIGRlZmF1bHRfY29uZmlnID0gY29uZmlnOwpAQCAtNDc0LDE2ICs0OTQsMTcgQEAKICAgZm91dC5TZXRDb3B5SWZEaWZmZXJlbnQodHJ1ZSk7CiAKICAgLy8gV3JpdGUgdGhlIGhlYWRlci4KKyAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICBmb3V0IDw8ICIjIEluc3RhbGwgc2NyaXB0IGZvciBkaXJlY3Rvcnk6ICIKLSAgICAgICA8PCB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRTb3VyY2UoKSA8PCBzdGQ6OmVuZGwKLSAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gIGZvdXQgPDwgIiMgU2V0IHRoZSBpbnN0YWxsIHByZWZpeCIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgImlmKE5PVCBERUZJTkVEIENNQUtFX0lOU1RBTExfUFJFRklYKSIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgIiAgc2V0KENNQUtFX0lOU1RBTExfUFJFRklYIFwiIiA8PCBwcmVmaXggPDwgIlwiKSIgPDwgc3RkOjplbmRsCi0gICAgICAgPDwgImVuZGlmKCkiIDw8IHN0ZDo6ZW5kbAorICAgICAgIDw8IHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudFNvdXJjZSgpCisgICAgICAgPDwgIlxuXG4iCisgICAgICAgICAgIiMgU2V0IHRoZSBpbnN0YWxsIHByZWZpeFxuIgorICAgICAgICAgICJpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX1BSRUZJWClcbiIKKyAgICAgICAgICAiICBzZXQoQ01BS0VfSU5TVEFMTF9QUkVGSVggXCIiIDw8IHByZWZpeCA8PCAiXCIpXG4iCisgICAgICAgICAgImVuZGlmKClcbiIKICAgICAgICA8PCBSIihzdHJpbmcoUkVHRVggUkVQTEFDRSAiLyQiICIiIENNQUtFX0lOU1RBTExfUFJFRklYICkiCi0gICAgICAgPDwgIlwiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH1cIikiIDw8IHN0ZDo6ZW5kbAotICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICA8PCAiXCIke0NNQUtFX0lOU1RBTExfUFJFRklYfVwiKVxuXG4iOworICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KIAogICAvLyBXcml0ZSBzdXBwb3J0IGNvZGUgZm9yIGdlbmVyYXRpbmcgcGVyLWNvbmZpZ3VyYXRpb24gaW5zdGFsbCBydWxlcy4KICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwpAQCAtNTU3LDIwICs1NzgsODQgQEAKICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICAgfQogCisgIC8vIFdyaXRlIG91dCBDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk0gc28gdGhhdAorICAvLyBpbnN0YWxsZWQgY29kZSB0aGF0IHVzZXMgYGZpbGUoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTKWAKKyAgLy8gaGFzIHNhbWUgcGxhdGZvcm0gdmFyaWFibGUgYXMgd2hlbiBydW5uaW5nIGNtYWtlCisgIGlmIChjb25zdCBjaGFyKiBwbGF0Zm9ybSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKAorICAgICAgICAiQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX1BMQVRGT1JNIikpIHsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgZm91dCA8PAorICAgICAgIiMgU2V0IGRlZmF1bHQgaW5zdGFsbCBkaXJlY3RvcnkgcGVybWlzc2lvbnMuXG4iCisgICAgICAiaWYoTk9UIERFRklORUQgQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX1BMQVRGT1JNKVxuIgorICAgICAgIiAgc2V0KENNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19QTEFURk9STSBcIiIKKyAgICAgICAgIDw8IHBsYXRmb3JtIDw8ICJcIilcbiIKKyAgICAgICJlbmRpZigpXG4iCisgICAgICAiXG4iOworICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworICB9CisKKyAgLy8gV3JpdGUgb3V0IENNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19UT09MIHNvIHRoYXQKKyAgLy8gaW5zdGFsbGVkIGNvZGUgdGhhdCB1c2VzIGBmaWxlKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUylgCisgIC8vIGhhcyBzYW1lIHRvb2wgc2VsZWN0ZWQgYXMgd2hlbiBydW5uaW5nIGNtYWtlCisgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kID0KKyAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19UT09MIikpIHsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisgICAgZm91dCA8PAorICAgICAgIiMgU2V0IGRlZmF1bHQgaW5zdGFsbCBkaXJlY3RvcnkgcGVybWlzc2lvbnMuXG4iCisgICAgICAiaWYoTk9UIERFRklORUQgQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX1RPT0wpXG4iCisgICAgICAiICBzZXQoQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX1RPT0wgXCIiCisgICAgICAgICA8PCBjb21tYW5kIDw8ICJcIilcbiIKKyAgICAgICJlbmRpZigpXG4iCisgICAgICAiXG4iOworICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworICB9CisKKyAgLy8gV3JpdGUgb3V0IENNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19DT01NQU5EIHNvIHRoYXQKKyAgLy8gaW5zdGFsbGVkIGNvZGUgdGhhdCB1c2VzIGBmaWxlKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUylgCisgIC8vIGhhcyBzYW1lIHBhdGggdG8gdGhlIHRvb2wgYXMgd2hlbiBydW5uaW5nIGNtYWtlCisgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oCisgICAgICAgICJDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfQ09NTUFORCIpKSB7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIGZvdXQgPDwKKyAgICAgICIjIFNldCBkZWZhdWx0IGluc3RhbGwgZGlyZWN0b3J5IHBlcm1pc3Npb25zLlxuIgorICAgICAgImlmKE5PVCBERUZJTkVEIENNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19DT01NQU5EKVxuIgorICAgICAgIiAgc2V0KENNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19DT01NQU5EIFwiIgorICAgICAgICAgPDwgY29tbWFuZCA8PCAiXCIpXG4iCisgICAgICAiZW5kaWYoKVxuIgorICAgICAgIlxuIjsKKyAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyAgfQorCisgIC8vIFdyaXRlIG91dCBDTUFLRV9PQkpEVU1QIHNvIHRoYXQgaW5zdGFsbGVkIGNvZGUgdGhhdCB1c2VzCisgIC8vIGBmaWxlKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUylgIGFuZCBoYXNuJ3Qgc3BlY2lmaWVkCisgIC8vIENNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19DT01NQU5EIGhhcyBjb25zaXN0ZW50CisgIC8vIGxvZ2ljIHRvIGZhbGxiYWNrIHRvIENNQUtFX09CSkRVTVAgd2hlbiBgb2JqZHVtcGAgaXMKKyAgLy8gbm90IG9uIHRoZSBwYXRoCisgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX09CSkRVTVAiKSkgeworICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyAgICBmb3V0IDw8CisgICAgICAiIyBTZXQgZGVmYXVsdCBpbnN0YWxsIGRpcmVjdG9yeSBwZXJtaXNzaW9ucy5cbiIKKyAgICAgICJpZihOT1QgREVGSU5FRCBDTUFLRV9PQkpEVU1QKVxuIgorICAgICAgIiAgc2V0KENNQUtFX09CSkRVTVAgXCIiCisgICAgICAgICA8PCBjb21tYW5kIDw8ICJcIilcbiIKKyAgICAgICJlbmRpZigpXG4iCisgICAgICAiXG4iOworICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLworICB9CisKICAgLy8gQXNrIGVhY2ggaW5zdGFsbCBnZW5lcmF0b3IgdG8gd3JpdGUgaXRzIGNvZGUuCiAgIGNtUG9saWNpZXM6OlBvbGljeVN0YXR1cyBzdGF0dXMgPSB0aGlzLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA4Mik7Ci0gIHN0ZDo6dmVjdG9yPGNtSW5zdGFsbEdlbmVyYXRvcio+IGNvbnN0JiBpbnN0YWxsZXJzID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0SW5zdGFsbEdlbmVyYXRvcnMoKTsKKyAgYXV0byBjb25zdCYgaW5zdGFsbGVycyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRJbnN0YWxsR2VuZXJhdG9ycygpOwogICBib29sIGhhdmVTdWJkaXJlY3RvcnlJbnN0YWxsID0gZmFsc2U7CiAgIGJvb2wgaGF2ZUluc3RhbGxBZnRlclN1YmRpcmVjdG9yeSA9IGZhbHNlOwogICBpZiAoc3RhdHVzID09IGNtUG9saWNpZXM6OldBUk4pIHsKLSAgICBmb3IgKGNtSW5zdGFsbEdlbmVyYXRvciogaW5zdGFsbGVyIDogaW5zdGFsbGVycykgeworICAgIGZvciAoY29uc3QgYXV0byYgaW5zdGFsbGVyIDogaW5zdGFsbGVycykgewogICAgICAgaW5zdGFsbGVyLT5DaGVja0NNUDAwODIoaGF2ZVN1YmRpcmVjdG9yeUluc3RhbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlSW5zdGFsbEFmdGVyU3ViZGlyZWN0b3J5KTsKICAgICAgIGluc3RhbGxlci0+R2VuZXJhdGUoZm91dCwgY29uZmlnLCBjb25maWd1cmF0aW9uVHlwZXMpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBmb3IgKGNtSW5zdGFsbEdlbmVyYXRvciogaW5zdGFsbGVyIDogaW5zdGFsbGVycykgeworICAgIGZvciAoY29uc3QgYXV0byYgaW5zdGFsbGVyIDogaW5zdGFsbGVycykgewogICAgICAgaW5zdGFsbGVyLT5HZW5lcmF0ZShmb3V0LCBjb25maWcsIGNvbmZpZ3VyYXRpb25UeXBlcyk7CiAgICAgfQogICB9CkBAIC01OTksOCArNjg0LDcgQEAKICAgICAgICAgICBpZiAoIWMuR2V0RGlyZWN0b3J5KCkuR2V0UHJvcGVydHlBc0Jvb2woIkVYQ0xVREVfRlJPTV9BTEwiKSkgewogICAgICAgICAgICAgc3RkOjpzdHJpbmcgb2RpciA9IGMuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudEJpbmFyeSgpOwogICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMob2Rpcik7Ci0gICAgICAgICAgICBmb3V0IDw8ICIgIGluY2x1ZGUoXCIiIDw8IG9kaXIgPDwgIi9jbWFrZV9pbnN0YWxsLmNtYWtlXCIpIgotICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICAgICAgICBmb3V0IDw8ICIgIGluY2x1ZGUoXCIiIDw8IG9kaXIgPDwgIi9jbWFrZV9pbnN0YWxsLmNtYWtlXCIpXG4iOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3V0IDw8ICJcbiI7CkBAIC02MzUsMTEgKzcxOSwxNCBAQAogICB9CiB9CiAKLXZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkR2VuZXJhdG9yVGFyZ2V0KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCkKK3ZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkR2VuZXJhdG9yVGFyZ2V0KAorICBzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JUYXJnZXQ+IGd0KQogewotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXRzLnB1c2hfYmFjayhndCk7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldFNlYXJjaEluZGV4LmVtcGxhY2UoZ3QtPkdldE5hbWUoKSwgZ3QpOwotICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkluZGV4R2VuZXJhdG9yVGFyZ2V0KGd0KTsKKyAgY21HZW5lcmF0b3JUYXJnZXQqIGd0X3B0ciA9IGd0LmdldCgpOworCisgIHRoaXMtPkdlbmVyYXRvclRhcmdldHMucHVzaF9iYWNrKHN0ZDo6bW92ZShndCkpOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXRTZWFyY2hJbmRleC5lbXBsYWNlKGd0X3B0ci0+R2V0TmFtZSgpLCBndF9wdHIpOworICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkluZGV4R2VuZXJhdG9yVGFyZ2V0KGd0X3B0cik7CiB9CiAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkSW1wb3J0ZWRHZW5lcmF0b3JUYXJnZXQoY21HZW5lcmF0b3JUYXJnZXQqIGd0KQpAQCAtNjQ4LDkgKzczNSwxMCBAQAogICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkluZGV4R2VuZXJhdG9yVGFyZ2V0KGd0KTsKIH0KIAotdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBZGRPd25lZEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCkKK3ZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkT3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldCgKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yVGFyZ2V0PiBndCkKIHsKLSAgdGhpcy0+T3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldHMucHVzaF9iYWNrKGd0KTsKKyAgdGhpcy0+T3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldHMucHVzaF9iYWNrKHN0ZDo6bW92ZShndCkpOwogfQogCiBjbUdlbmVyYXRvclRhcmdldCogY21Mb2NhbEdlbmVyYXRvcjo6RmluZExvY2FsTm9uQWxpYXNHZW5lcmF0b3JUYXJnZXQoCkBAIC02NjYsMTYgKzc1NCwxMyBAQAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpDb21wdXRlVGFyZ2V0TWFuaWZlc3QoKQogewogICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbiB0eXBlcy4KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzOwotICB0aGlzLT5NYWtlZmlsZS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlnTmFtZXMpOwotICBpZiAoY29uZmlnTmFtZXMuZW1wdHkoKSkgewotICAgIGNvbmZpZ05hbWVzLmVtcGxhY2VfYmFjaygpOwotICB9CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdOYW1lcyA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIAogICAvLyBBZGQgb3VyIHRhcmdldHMgdG8gdGhlIG1hbmlmZXN0IGZvciBlYWNoIGNvbmZpZ3VyYXRpb24uCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRhcmdldHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRhcmdldHMpIHsKLSAgICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgeworICBjb25zdCBhdXRvJiB0YXJnZXRzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOworICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICBpZiAoIXRhcmdldC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogY29uZmlnTmFtZXMpIHsKQEAgLTY4NywyNSArNzcyLDIzIEBACiBib29sIGNtTG9jYWxHZW5lcmF0b3I6OkNvbXB1dGVUYXJnZXRDb21waWxlRmVhdHVyZXMoKQogewogICAvLyBDb2xsZWN0IHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbiB0eXBlcy4KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzOwotICB0aGlzLT5NYWtlZmlsZS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlnTmFtZXMpOwotICBpZiAoY29uZmlnTmFtZXMuZW1wdHkoKSkgewotICAgIGNvbmZpZ05hbWVzLmVtcGxhY2VfYmFjaygpOwotICB9CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdOYW1lcyA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6SW5jbHVkZUVtcHR5Q29uZmlnKTsKIAogICB1c2luZyBMYW5ndWFnZVBhaXIgPSBzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjsKICAgc3RkOjp2ZWN0b3I8TGFuZ3VhZ2VQYWlyPiBwYWlyZWRMYW5ndWFnZXN7IHsgIk9CSkMiLCAiQyIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIk9CSkNYWCIsICJDWFgiIH0gfTsKLSAgc3RkOjpzZXQ8TGFuZ3VhZ2VQYWlyPiBvYmpjRW5hYmxlZExhbmd1YWdlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIk9CSkNYWCIsICJDWFgiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJDVURBIiwgIkNYWCIgfSB9OworICBzdGQ6OnNldDxMYW5ndWFnZVBhaXI+IGluZmVycmVkRW5hYmxlZExhbmd1YWdlczsKICAgZm9yIChhdXRvIGNvbnN0JiBsYW5nIDogcGFpcmVkTGFuZ3VhZ2VzKSB7CiAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRMYW5ndWFnZUVuYWJsZWQobGFuZy5maXJzdCkpIHsKLSAgICAgIG9iamNFbmFibGVkTGFuZ3VhZ2VzLmluc2VydChsYW5nKTsKKyAgICAgIGluZmVycmVkRW5hYmxlZExhbmd1YWdlcy5pbnNlcnQobGFuZyk7CiAgICAgfQogICB9CiAKICAgLy8gUHJvY2VzcyBjb21waWxlIGZlYXR1cmVzIG9mIGFsbCB0YXJnZXRzLgotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0YXJnZXRzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgIGNvbnN0IGF1dG8mIHRhcmdldHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CisgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0cykgewogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGMgOiBjb25maWdOYW1lcykgewogICAgICAgaWYgKCF0YXJnZXQtPkNvbXB1dGVDb21waWxlRmVhdHVyZXMoYykpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzE0LDM1ICs3OTcsOSBAQAogCiAgICAgLy8gTm93IHRoYXQgQy9DKysgX1NUQU5EQVJEIHZhbHVlcyBoYXZlIGJlZW4gY29tcHV0ZWQKICAgICAvLyBzZXQgdGhlIHZhbHVlcyB0byBPYmpDL09iakNYWCBfU1RBTkRBUkQgdmFyaWFibGVzCi0gICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKLSAgICAgIGF1dG8gY29weVN0YW5kYXJkVG9PYmpMYW5nID0gWyZdKExhbmd1YWdlUGFpciBjb25zdCYgbGFuZykgLT4gYm9vbCB7Ci0gICAgICAgIGlmICghdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLmZpcnN0LCAiX1NUQU5EQVJEIikpKSB7Ci0gICAgICAgICAgYXV0byogc3RhbmRhcmQgPQotICAgICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLnNlY29uZCwgIl9TVEFOREFSRCIpKTsKLSAgICAgICAgICBpZiAoIXN0YW5kYXJkKSB7Ci0gICAgICAgICAgICBzdGFuZGFyZCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKAotICAgICAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZy5zZWNvbmQsICJfU1RBTkRBUkRfREVGQVVMVCIpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcuZmlyc3QsICJfU1RBTkRBUkQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH07Ci0gICAgICBhdXRvIGNvcHlQcm9wZXJ0eVRvT2JqTGFuZyA9IFsmXShMYW5ndWFnZVBhaXIgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwcm9wZXJ0eSkgewotICAgICAgICBpZiAoIXRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZy5maXJzdCwgcHJvcGVydHkpKSAmJgotICAgICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLnNlY29uZCwgcHJvcGVydHkpKSkgewotICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5TZXRQcm9wZXJ0eSgKLSAgICAgICAgICAgIGNtU3RyQ2F0KGxhbmcuZmlyc3QsIHByb3BlcnR5KSwKLSAgICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZy5zZWNvbmQsIHByb3BlcnR5KSkpOwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgZm9yIChhdXRvIGNvbnN0JiBsYW5nIDogb2JqY0VuYWJsZWRMYW5ndWFnZXMpIHsKLSAgICAgICAgaWYgKGNvcHlTdGFuZGFyZFRvT2JqTGFuZyhsYW5nKSkgewotICAgICAgICAgIGNvcHlQcm9wZXJ0eVRvT2JqTGFuZyhsYW5nLCAiX1NUQU5EQVJEX1JFUVVJUkVEIik7Ci0gICAgICAgICAgY29weVByb3BlcnR5VG9PYmpMYW5nKGxhbmcsICJfRVhURU5TSU9OUyIpOwotICAgICAgICB9CisgICAgaWYgKHRhcmdldC0+Q2FuQ29tcGlsZVNvdXJjZXMoKSkgeworICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYyA6IGNvbmZpZ05hbWVzKSB7CisgICAgICAgIHRhcmdldC0+Q29tcHV0ZUNvbXBpbGVGZWF0dXJlcyhjLCBpbmZlcnJlZEVuYWJsZWRMYW5ndWFnZXMpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtNzY4LDEwICs4MjUsMTMgQEAKIGNvbnN0IGNoYXIqIGNtTG9jYWxHZW5lcmF0b3I6OkdldFJ1bGVMYXVuY2hlcihjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKQogeworICBjbVByb3AgcDsKICAgaWYgKHRhcmdldCkgewotICAgIHJldHVybiB0YXJnZXQtPkdldFByb3BlcnR5KHByb3ApOworICAgIHAgPSB0YXJnZXQtPkdldFByb3BlcnR5KHByb3ApOworICB9IGVsc2UgeworICAgIHAgPSB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkocHJvcCk7CiAgIH0KLSAgcmV0dXJuIHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eShwcm9wKTsKKyAgcmV0dXJuIHAgPyBwLT5jX3N0cigpIDogbnVsbHB0cjsKIH0KIAogc3RkOjpzdHJpbmcgY21Mb2NhbEdlbmVyYXRvcjo6Q29udmVydFRvSW5jbHVkZVJlZmVyZW5jZSgKQEAgLTgzMyw3ICs4OTMsNyBAQAogICBlbWl0dGVkLmluc2VydCgiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MiKTsKICNlbmRpZgogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW5jbHVkZXMpIHsKLSAgICBpZiAoZndTZWFyY2hGbGFnICYmICpmd1NlYXJjaEZsYWcgJiYgdGhpcy0+TWFrZWZpbGUtPklzT24oIkFQUExFIikgJiYKKyAgICBpZiAoY21Ob25lbXB0eShmd1NlYXJjaEZsYWcpICYmIHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJBUFBMRSIpICYmCiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OklzUGF0aFRvRnJhbWV3b3JrKGkpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCBmcmFtZXdvcmtEaXIgPQogICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNtU3RyQ2F0KGksICIvLi4vIikpOwpAQCAtODc1LDcgKzkzNSw3IEBACiAgIGlmICgoc2VwWzBdICE9ICcgJykgJiYgIWZsYWdzLmVtcHR5KCkgJiYgZmxhZ3MuYmFjaygpID09IHNlcFswXSkgewogICAgIGZsYWdzLmJhY2soKSA9ICcgJzsKICAgfQotICByZXR1cm4gZmxhZ3M7CisgIHJldHVybiBjbVRyaW1XaGl0ZXNwYWNlKGZsYWdzKTsKIH0KIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBZGRDb21waWxlT3B0aW9ucyhzdGQ6OnN0cmluZyYgZmxhZ3MsCkBAIC04OTgsOSArOTU4LDkgQEAKICAgaWYgKGNvbnN0IGNoYXIqIGxhbmdGbGFnUmVnZXhTdHIgPQogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihsYW5nRmxhZ1JlZ2V4VmFyKSkgewogICAgIC8vIEZpbHRlciBmbGFncyBhY2NlcHRhYmxlIHRvIHRoaXMgbGFuZ3VhZ2UuCi0gICAgaWYgKGNvbnN0IGNoYXIqIHRhcmdldEZsYWdzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9GTEFHUyIpKSB7CisgICAgaWYgKGNtUHJvcCB0YXJnZXRGbGFncyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkNPTVBJTEVfRkxBR1MiKSkgewogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdHM7Ci0gICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZVdpbmRvd3NDb21tYW5kTGluZSh0YXJnZXRGbGFncywgb3B0cyk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpQYXJzZVdpbmRvd3NDb21tYW5kTGluZSh0YXJnZXRGbGFncy0+Y19zdHIoKSwgb3B0cyk7CiAgICAgICAvLyBSZS1lc2NhcGUgdGhlc2UgZmxhZ3Mgc2luY2UgQ09NUElMRV9GTEFHUyB3ZXJlIGFscmVhZHkgcGFyc2VkCiAgICAgICAvLyBhcyBhIGNvbW1hbmQgbGluZSBhYm92ZS4KICAgICAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVPcHRzOwpAQCAtOTE1LDEwICs5NzUsMTAgQEAKICAgICB0aGlzLT5BcHBlbmRDb21waWxlT3B0aW9ucyhmbGFncywgdGFyZ2V0Q29tcGlsZU9wdHMsIGxhbmdGbGFnUmVnZXhTdHIpOwogICB9IGVsc2UgewogICAgIC8vIFVzZSBhbGwgZmxhZ3MuCi0gICAgaWYgKGNvbnN0IGNoYXIqIHRhcmdldEZsYWdzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9GTEFHUyIpKSB7CisgICAgaWYgKGNtUHJvcCB0YXJnZXRGbGFncyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkNPTVBJTEVfRkxBR1MiKSkgewogICAgICAgLy8gQ09NUElMRV9GTEFHUyBhcmUgbm90IGVzY2FwZWQgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4KICAgICAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVGbGFnczsKLSAgICAgIHRoaXMtPkFwcGVuZEZsYWdzKGNvbXBpbGVGbGFncywgdGFyZ2V0RmxhZ3MpOworICAgICAgdGhpcy0+QXBwZW5kRmxhZ3MoY29tcGlsZUZsYWdzLCAqdGFyZ2V0RmxhZ3MpOwogICAgICAgaWYgKCFjb21waWxlRmxhZ3MuZW1wdHkoKSkgewogICAgICAgICBmbGFncy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGNvbXBpbGVGbGFncykpOwogICAgICAgfQpAQCAtOTI5LDEyICs5ODksMTMgQEAKICAgICB0aGlzLT5BcHBlbmRDb21waWxlT3B0aW9ucyhmbGFncywgdGFyZ2V0Q29tcGlsZU9wdHMpOwogICB9CiAKKyAgY21TdGFuZGFyZExldmVsUmVzb2x2ZXIgc3RhbmRhcmRSZXNvbHZlcih0aGlzLT5NYWtlZmlsZSk7CiAgIGZvciAoYXV0byBjb25zdCYgaXQgOiB0YXJnZXQtPkdldE1heExhbmd1YWdlU3RhbmRhcmRzKCkpIHsKLSAgICBjb25zdCBjaGFyKiBzdGFuZGFyZCA9IHRhcmdldC0+R2V0UHJvcGVydHkoaXQuZmlyc3QgKyAiX1NUQU5EQVJEIik7CisgICAgY21Qcm9wIHN0YW5kYXJkID0gdGFyZ2V0LT5HZXRMYW5ndWFnZVN0YW5kYXJkKGl0LmZpcnN0LCBjb25maWcpOwogICAgIGlmICghc3RhbmRhcmQpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzTGF0ZXJTdGFuZGFyZChpdC5maXJzdCwgc3RhbmRhcmQsIGl0LnNlY29uZCkpIHsKKyAgICBpZiAoc3RhbmRhcmRSZXNvbHZlci5Jc0xhdGVyU3RhbmRhcmQoaXQuZmlyc3QsICpzdGFuZGFyZCwgaXQuc2Vjb25kKSkgewogICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgICBlIDw8ICJUaGUgQ09NUElMRV9GRUFUVVJFUyBwcm9wZXJ0eSBvZiB0YXJnZXQgXCIiIDw8IHRhcmdldC0+R2V0TmFtZSgpCiAgICAgICAgIDw8ICJcIiB3YXMgZXZhbHVhdGVkIHdoZW4gY29tcHV0aW5nIHRoZSBsaW5rICIKQEAgLTk0MywxOSArMTAwNCwxOCBAQAogICAgICAgICA8PCAiXCIgZm9yIHRoYXQgY29tcHV0YXRpb24uICBDb21wdXRpbmcgdGhlICIKICAgICAgICAgICAgIkNPTVBJTEVfRkVBVFVSRVMgYmFzZWQgb24gdGhlIGxpbmsgaW1wbGVtZW50YXRpb24gcmVzdWx0ZWQgaW4gYSAiCiAgICAgICAgICAgICJoaWdoZXIgXCIiCi0gICAgICAgIDw8IGl0LmZpcnN0IDw8ICJfU1RBTkRBUkRcIiBcIiIgPDwgc3RhbmRhcmQKKyAgICAgICAgPDwgaXQuZmlyc3QgPDwgIl9TVEFOREFSRFwiIFwiIiA8PCAqc3RhbmRhcmQKICAgICAgICAgPDwgIlwiLiAgIgogICAgICAgICAgICAiVGhpcyBpcyBub3QgcGVybWl0dGVkLiBUaGUgQ09NUElMRV9GRUFUVVJFUyBtYXkgbm90IGJvdGggZGVwZW5kICIKICAgICAgICAgICAgIm9uICIKLSAgICAgICAgICAgImFuZCBiZSBkZXBlbmRlZCBvbiBieSB0aGUgbGluayBpbXBsZW1lbnRhdGlvbi4iCi0gICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgImFuZCBiZSBkZXBlbmRlZCBvbiBieSB0aGUgbGluayBpbXBsZW1lbnRhdGlvbi5cbiI7CiAgICAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKICAgICAgIHJldHVybjsKICAgICB9CiAgIH0KIAogICBzdGQ6OnN0cmluZyBjb21wUmVxRmxhZzsKLSAgdGhpcy0+QWRkQ29tcGlsZXJSZXF1aXJlbWVudEZsYWcoY29tcFJlcUZsYWcsIHRhcmdldCwgbGFuZyk7CisgIHRoaXMtPkFkZENvbXBpbGVyUmVxdWlyZW1lbnRGbGFnKGNvbXBSZXFGbGFnLCB0YXJnZXQsIGxhbmcsIGNvbmZpZyk7CiAgIGlmICghY29tcFJlcUZsYWcuZW1wdHkoKSkgewogICAgIGZsYWdzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoY29tcFJlcUZsYWcpKTsKICAgfQpAQCAtOTcxLDEwICsxMDMxLDEwIEBACiAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpNYW5hZ2VkVHlwZTo6TWFuYWdlZCkgewogICAgICAgLy8gYWRkIC9KTUMgZmxhZ3MgaWYgdGFyZ2V0IHByb3BlcnR5IFZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkcgaXMgc2V0CiAgICAgICAvLyB0byBPTgotICAgICAgaWYgKGNoYXIgY29uc3QqIGptY0V4cHJHZW4gPQorICAgICAgaWYgKGNtUHJvcCBqbWNFeHByR2VuID0KICAgICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0pVU1RfTVlfQ09ERV9ERUJVR0dJTkciKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBpc0pNQ0VuYWJsZWQgPQotICAgICAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoam1jRXhwckdlbiwgdGhpcywgY29uZmlnKTsKKyAgICAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKCpqbWNFeHByR2VuLCB0aGlzLCBjb25maWcpOwogICAgICAgICBpZiAoY21Jc09uKGlzSk1DRW5hYmxlZCkpIHsKICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0VmVjID0gY21FeHBhbmRlZExpc3Qoam1jKTsKICAgICAgICAgICBzdGQ6OnN0cmluZyBqbWNGbGFnczsKQEAgLTk4OCw2ICsxMDQ4LDkyIEBACiAgIH0KIH0KIAorY21UYXJnZXQqIGNtTG9jYWxHZW5lcmF0b3I6OkFkZEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGNtQ3VzdG9tQ29tbWFuZFR5cGUgdHlwZSwKKyAgY29uc3QgY2hhciogY29tbWVudCwgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKKyAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sLAorICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBjbU9iamVjdExpYnJhcnlDb21tYW5kcyBvYmpMaWJDb21tYW5kcywKKyAgYm9vbCBzdGRQaXBlc1VURjgpCit7CisgIGNtVGFyZ2V0KiB0ID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1c3RvbUNvbW1hbmRUYXJnZXQoCisgICAgdGFyZ2V0LCBvYmpMaWJDb21tYW5kcywgdGhpcy0+RGlyZWN0b3J5QmFja3RyYWNlKTsKKyAgaWYgKCF0KSB7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKworICBkZXRhaWw6OkFkZEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKKyAgICAqdGhpcywgdGhpcy0+RGlyZWN0b3J5QmFja3RyYWNlLCBjbUNvbW1hbmRPcmlnaW46OkdlbmVyYXRvciwgdCwgYnlwcm9kdWN0cywKKyAgICBkZXBlbmRzLCBjb21tYW5kTGluZXMsIHR5cGUsIGNvbW1lbnQsIHdvcmtpbmdEaXIsIGVzY2FwZU9sZFN0eWxlLAorICAgIHVzZXNfdGVybWluYWwsIGRlcGZpbGUsIGpvYl9wb29sLCBjb21tYW5kX2V4cGFuZF9saXN0cywgc3RkUGlwZXNVVEY4KTsKKworICByZXR1cm4gdDsKK30KKworY21Tb3VyY2VGaWxlKiBjbUxvY2FsR2VuZXJhdG9yOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvdXRwdXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywKKyAgY29uc3QgY2hhciogY29tbWVudCwgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCByZXBsYWNlLAorICBib29sIGVzY2FwZU9sZFN0eWxlLCBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsIGJvb2wgc3RkUGlwZXNVVEY4KQoreworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fYnlwcm9kdWN0czsKKyAgY21JbXBsaWNpdERlcGVuZHNMaXN0IG5vX2ltcGxpY2l0X2RlcGVuZHM7CisgIHJldHVybiB0aGlzLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgeyBvdXRwdXQgfSwgbm9fYnlwcm9kdWN0cywgZGVwZW5kcywgbWFpbl9kZXBlbmRlbmN5LCBub19pbXBsaWNpdF9kZXBlbmRzLAorICAgIGNvbW1hbmRMaW5lcywgY29tbWVudCwgd29ya2luZ0RpciwgcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsCisgICAgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sLCBzdGRQaXBlc1VURjgpOworfQorCitjbVNvdXJjZUZpbGUqIGNtTG9jYWxHZW5lcmF0b3I6OkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKKyAgY29uc3QgY21JbXBsaWNpdERlcGVuZHNMaXN0JiBpbXBsaWNpdF9kZXBlbmRzLAorICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAorICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCisgIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpCit7CisgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3V0cHV0LgorICBpZiAob3V0cHV0cy5lbXB0eSgpKSB7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkF0dGVtcHQgdG8gYWRkIGEgY3VzdG9tIHJ1bGUgd2l0aCBubyBvdXRwdXQhIik7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKworICByZXR1cm4gZGV0YWlsOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgKnRoaXMsIHRoaXMtPkRpcmVjdG9yeUJhY2t0cmFjZSwgY21Db21tYW5kT3JpZ2luOjpHZW5lcmF0b3IsIG91dHB1dHMsCisgICAgYnlwcm9kdWN0cywgZGVwZW5kcywgbWFpbl9kZXBlbmRlbmN5LCBpbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsCisgICAgY29tbWVudCwgd29ya2luZ0RpciwgcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsCisgICAgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sLCBzdGRQaXBlc1VURjgpOworfQorCitjbVRhcmdldCogY21Mb2NhbEdlbmVyYXRvcjo6QWRkVXRpbGl0eUNvbW1hbmQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiB1dGlsaXR5TmFtZSwgYm9vbCBleGNsdWRlRnJvbUFsbCwgY29uc3QgY2hhciogd29ya2luZ0RpciwKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCisgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sLCBib29sIHN0ZFBpcGVzVVRGOCkKK3sKKyAgY21UYXJnZXQqIHRhcmdldCA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkFkZE5ld1V0aWxpdHlUYXJnZXQodXRpbGl0eU5hbWUsIGV4Y2x1ZGVGcm9tQWxsKTsKKyAgdGFyZ2V0LT5TZXRJc0dlbmVyYXRvclByb3ZpZGVkKHRydWUpOworCisgIGlmIChjb21tYW5kTGluZXMuZW1wdHkoKSAmJiBkZXBlbmRzLmVtcHR5KCkpIHsKKyAgICByZXR1cm4gdGFyZ2V0OworICB9CisKKyAgZGV0YWlsOjpBZGRVdGlsaXR5Q29tbWFuZCgKKyAgICAqdGhpcywgdGhpcy0+RGlyZWN0b3J5QmFja3RyYWNlLCBjbUNvbW1hbmRPcmlnaW46OkdlbmVyYXRvciwgdGFyZ2V0LAorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRVdGlsaXR5T3V0cHV0KHRhcmdldCksIHdvcmtpbmdEaXIsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsCisgICAgY29tbWFuZExpbmVzLCBlc2NhcGVPbGRTdHlsZSwgY29tbWVudCwgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsCisgICAgam9iX3Bvb2wsIHN0ZFBpcGVzVVRGOCk7CisKKyAgcmV0dXJuIHRhcmdldDsKK30KKwogc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiBjbUxvY2FsR2VuZXJhdG9yOjpHZXRJbmNsdWRlRGlyZWN0b3JpZXNJbXBsaWNpdCgKICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsIGJvb2wgc3RyaXBJbXBsaWNpdERpcnMsCkBAIC0xMDU1LDExICsxMjAxLDEwIEBACiAgICAgLy8gKiBDb21waWxlcnMgbGlrZSBnZm9ydHJhbiBkbyBub3Qgc2VhcmNoIHRoZWlyIG93biBpbXBsaWNpdCBpbmNsdWRlCiAgICAgLy8gICBkaXJlY3RvcmllcyBmb3IgbW9kdWxlcyAoJy5tb2QnIGZpbGVzKS4KICAgICBpZiAobGFuZyAhPSAiRm9ydHJhbiIpIHsKLSAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oCi0gICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX0lNUExJQ0lUX0lOQ0xVREVfRElSRUNUT1JJRVMiKSk7Ci0gICAgICBpZiAodmFsdWUgIT0gbnVsbHB0cikgewotICAgICAgICBzaXplX3QgY29uc3QgaW1wRGlyVmVjT2xkU2l6ZSA9IGltcERpclZlYy5zaXplKCk7Ci0gICAgICAgIGNtRXhwYW5kTGlzdCh2YWx1ZSwgaW1wRGlyVmVjKTsKKyAgICAgIHNpemVfdCBjb25zdCBpbXBEaXJWZWNPbGRTaXplID0gaW1wRGlyVmVjLnNpemUoKTsKKyAgICAgIGlmICh0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdCgKKyAgICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX0lNUExJQ0lUX0lOQ0xVREVfRElSRUNUT1JJRVMiKSwKKyAgICAgICAgICAgIGltcERpclZlYykpIHsKICAgICAgICAgLy8gRklYTUU6IFVzZSBjbVJhbmdlIHdpdGggJ2FkdmFuY2UoKScgd2hlbiBpdCBzdXBwb3J0cyBub24tY29uc3QuCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbXBEaXJWZWNPbGRTaXplOyBpIDwgaW1wRGlyVmVjLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoaW1wRGlyVmVjW2ldKTsKQEAgLTEwNzQsNyArMTIxOSw3IEBACiAgICAgLy8gZGlyZWN0bHkuICBJbiB0aGlzIGNhc2UgYWRkaW5nIC1JL3Vzci9pbmNsdWRlIGNhbiBoaWRlIFNESyBoZWFkZXJzIHNvIHdlCiAgICAgLy8gbXVzdCBzdGlsbCBleGNsdWRlIGl0LgogICAgIGlmICgobGFuZyA9PSAiQyIgfHwgbGFuZyA9PSAiQ1hYIiB8fCBsYW5nID09ICJDVURBIikgJiYKLSAgICAgICAgIWNtQ29udGFpbnMoaW1wRGlyVmVjLCAiL3Vzci9pbmNsdWRlIikgJiYKKyAgICAgICAgIWNtOjpjb250YWlucyhpbXBEaXJWZWMsICIvdXNyL2luY2x1ZGUiKSAmJgogICAgICAgICBzdGQ6OmZpbmRfaWYoaW1wRGlyVmVjLmJlZ2luKCksIGltcERpclZlYy5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgIFtdKHN0ZDo6c3RyaW5nIGNvbnN0JiBkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbUhhc0xpdGVyYWxTdWZmaXgoZCwgIi91c3IvaW5jbHVkZSIpOwpAQCAtMTA4NCw3ICsxMjI5LDcgQEAKICAgICB9CiAKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogaW1wRGlyVmVjKSB7Ci0gICAgICBpZiAoaW1wbGljaXRTZXQuaW5zZXJ0KGNtU3lzdGVtVG9vbHM6OkdldFJlYWxQYXRoKGkpKS5zZWNvbmQpIHsKKyAgICAgIGlmIChpbXBsaWNpdFNldC5pbnNlcnQodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRSZWFsUGF0aChpKSkuc2Vjb25kKSB7CiAgICAgICAgIGltcGxpY2l0RGlycy5lbXBsYWNlX2JhY2soaSk7CiAgICAgICB9CiAgICAgfQpAQCAtMTA5NSwxMyArMTI0MCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICZsYW5nXShzdGQ6OnN0cmluZyBjb25zdCYgZGlyKSB7CiAgICAgcmV0dXJuICgKICAgICAgIC8vIERvIG5vdCBleGNsdWRlIGRpcmVjdG9yaWVzIHRoYXQgYXJlIG5vdCBpbiBhbiBleGNsdWRlZCBzZXQuCi0gICAgICAoKCFjbUNvbnRhaW5zKGltcGxpY2l0U2V0LCBjbVN5c3RlbVRvb2xzOjpHZXRSZWFsUGF0aChkaXIpKSkgJiYKLSAgICAgICAoIWNtQ29udGFpbnMoaW1wbGljaXRFeGNsdWRlLCBkaXIpKSkKKyAgICAgICgoIWNtOjpjb250YWlucyhpbXBsaWNpdFNldCwgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRSZWFsUGF0aChkaXIpKSkgJiYKKyAgICAgICAoIWNtOjpjb250YWlucyhpbXBsaWNpdEV4Y2x1ZGUsIGRpcikpKQogICAgICAgLy8gRG8gbm90IGV4Y2x1ZGUgZW50cmllcyBvZiB0aGUgQ1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgZXZlbiB0aG91Z2gKICAgICAgIC8vIHRoZXkgYXJlIGltcGxpY2l0bHkgc2VhcmNoZWQgYnkgdGhlIGNvbXBpbGVyLiAgVGhleSBhcmUgbWVhbnQgdG8gYmUKICAgICAgIC8vIHVzZXItc3BlY2lmaWVkIGRpcmVjdG9yaWVzIHRoYXQgY2FuIGJlIHJlLW9yZGVyZWQgb3IgY29udmVydGVkIHRvCiAgICAgICAvLyAtaXN5c3RlbSB3aXRob3V0IGJyZWFraW5nIHJlYWwgY29tcGlsZXIgYnVpbHRpbiBoZWFkZXJzLgotICAgICAgfHwgKChsYW5nID09ICJDIiB8fCBsYW5nID09ICJDWFgiKSAmJiBjbUNvbnRhaW5zKHRoaXMtPkVudkNQQVRILCBkaXIpKSk7CisgICAgICB8fAorICAgICAgKChsYW5nID09ICJDIiB8fCBsYW5nID09ICJDWFgiKSAmJiBjbTo6Y29udGFpbnModGhpcy0+RW52Q1BBVEgsIGRpcikpKTsKICAgfTsKIAogICAvLyBHZXQgdGhlIHRhcmdldC1zcGVjaWZpYyBpbmNsdWRlIGRpcmVjdG9yaWVzLgpAQCAtMTEyNyw3ICsxMjczLDcgQEAKICAgICB9CiAgIH0KIAotICAvLyBFbWl0IHJlbWFpbmluZyBub24gaW1wbGljaXQgdXNlciBkaXJlY29yaWVzLgorICAvLyBFbWl0IHJlbWFpbmluZyBub24gaW1wbGljaXQgdXNlciBkaXJlY3Rvcmllcy4KICAgZm9yIChCVDxzdGQ6OnN0cmluZz4gY29uc3QmIHVkciA6IHVzZXJEaXJzKSB7CiAgICAgaWYgKG5vdEV4Y2x1ZGVkKHVkci5WYWx1ZSkpIHsKICAgICAgIGVtaXRCVCh1ZHIpOwpAQCAtMTE0OCw3ICsxMjk0LDcgQEAKICAgaWYgKCFzdHJpcEltcGxpY2l0RGlycykgewogICAgIC8vIEFwcGVuZCBpbXBsaWNpdCBkaXJlY3RvcmllcyB0aGF0IHdlcmUgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyIG9ubHkKICAgICBmb3IgKEJUPHN0ZDo6c3RyaW5nPiBjb25zdCYgdWRyIDogdXNlckRpcnMpIHsKLSAgICAgIGlmIChjbUNvbnRhaW5zKGltcGxpY2l0U2V0LCBjbVN5c3RlbVRvb2xzOjpHZXRSZWFsUGF0aCh1ZHIuVmFsdWUpKSkgeworICAgICAgaWYgKGNtOjpjb250YWlucyhpbXBsaWNpdFNldCwgY21TeXN0ZW1Ub29sczo6R2V0UmVhbFBhdGgodWRyLlZhbHVlKSkpIHsKICAgICAgICAgZW1pdEJUKHVkcik7CiAgICAgICB9CiAgICAgfQpAQCAtMTIwNSwxNCArMTM1MSwxNSBAQAogICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLCBzdGQ6OnN0cmluZyBjb25zdCYgbGlua0xhbmd1YWdlLAogICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogeworICBjb25zdCBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwogICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IGZsYWdzOwogICBpZiAobGlua0xhbmd1YWdlICE9ICJTd2lmdCIpIHsKICAgICBzdGQ6OnN0cmluZyBzdGF0aWNMaWJGbGFnczsKICAgICB0aGlzLT5BcHBlbmRGbGFncygKICAgICAgIHN0YXRpY0xpYkZsYWdzLAogICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTIikpOwotICAgIGlmICghY29uZmlnLmVtcHR5KCkpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSAiQ01BS0VfU1RBVElDX0xJTktFUl9GTEFHU18iICsgY29uZmlnOworICAgIGlmICghY29uZmlnVXBwZXIuZW1wdHkoKSkgeworICAgICAgc3RkOjpzdHJpbmcgbmFtZSA9ICJDTUFLRV9TVEFUSUNfTElOS0VSX0ZMQUdTXyIgKyBjb25maWdVcHBlcjsKICAgICAgIHRoaXMtPkFwcGVuZEZsYWdzKHN0YXRpY0xpYkZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKG5hbWUpKTsKICAgICB9CkBAIC0xMjI0LDggKzEzNzEsOCBAQAogICBzdGQ6OnN0cmluZyBzdGF0aWNMaWJGbGFnczsKICAgdGhpcy0+QXBwZW5kRmxhZ3Moc3RhdGljTGliRmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJTVEFUSUNfTElCUkFSWV9GTEFHUyIpKTsKLSAgaWYgKCFjb25maWcuZW1wdHkoKSkgewotICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSAiU1RBVElDX0xJQlJBUllfRkxBR1NfIiArIGNvbmZpZzsKKyAgaWYgKCFjb25maWdVcHBlci5lbXB0eSgpKSB7CisgICAgc3RkOjpzdHJpbmcgbmFtZSA9ICJTVEFUSUNfTElCUkFSWV9GTEFHU18iICsgY29uZmlnVXBwZXI7CiAgICAgdGhpcy0+QXBwZW5kRmxhZ3Moc3RhdGljTGliRmxhZ3MsIHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KG5hbWUpKTsKICAgfQogCkBAIC0xMjQxLDYgKzEzODgsMzAgQEAKICAgcmV0dXJuIGZsYWdzOwogfQogCit2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkdldERldmljZUxpbmtGbGFncygKKyAgY21MaW5rTGluZUNvbXB1dGVyKiBsaW5rTGluZUNvbXB1dGVyLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICBzdGQ6OnN0cmluZyYgbGlua0xpYnMsIHN0ZDo6c3RyaW5nJiBsaW5rRmxhZ3MsIHN0ZDo6c3RyaW5nJiBmcmFtZXdvcmtQYXRoLAorICBzdGQ6OnN0cmluZyYgbGlua1BhdGgsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCit7CisgIGNtR2VuZXJhdG9yVGFyZ2V0OjpEZXZpY2VMaW5rU2V0dGVyIHNldHRlcigqdGFyZ2V0KTsKKworICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIHBjbGkgPSB0YXJnZXQtPkdldExpbmtJbmZvcm1hdGlvbihjb25maWcpOworICBjb25zdCBzdGQ6OnN0cmluZyBsaW5rTGFuZ3VhZ2UgPQorICAgIGxpbmtMaW5lQ29tcHV0ZXItPkdldExpbmtlckxhbmd1YWdlKHRhcmdldCwgY29uZmlnKTsKKworICBpZiAocGNsaSkgeworICAgIC8vIENvbXB1dGUgdGhlIHJlcXVpcmVkIGN1ZGEgZGV2aWNlIGxpbmsgbGlicmFyaWVzIHdoZW4KKyAgICAvLyByZXNvbHZpbmcgY3VkYSBkZXZpY2Ugc3ltYm9scworICAgIHRoaXMtPk91dHB1dExpbmtMaWJyYXJpZXMocGNsaSwgbGlua0xpbmVDb21wdXRlciwgbGlua0xpYnMsIGZyYW1ld29ya1BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rUGF0aCk7CisgIH0KKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua09wdHM7CisgIHRhcmdldC0+R2V0TGlua09wdGlvbnMobGlua09wdHMsIGNvbmZpZywgbGlua0xhbmd1YWdlKTsKKyAgLy8gTElOS19PUFRJT05TIGFyZSBlc2NhcGVkLgorICB0aGlzLT5BcHBlbmRDb21waWxlT3B0aW9ucyhsaW5rRmxhZ3MsIGxpbmtPcHRzKTsKK30KKwogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpHZXRUYXJnZXRGbGFncygKICAgY21MaW5rTGluZUNvbXB1dGVyKiBsaW5rTGluZUNvbXB1dGVyLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICBzdGQ6OnN0cmluZyYgbGlua0xpYnMsIHN0ZDo6c3RyaW5nJiBmbGFncywgc3RkOjpzdHJpbmcmIGxpbmtGbGFncywKQEAgLTEyNjIsMjMgKzE0MzMsMTcgQEAKICAgc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiYgbGlua0ZsYWdzLCBzdGQ6OnN0cmluZyYgZnJhbWV3b3JrUGF0aCwKICAgc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiYgbGlua1BhdGgsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCiB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGJ1aWxkVHlwZSA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOworICBjb25zdCBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwogICBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIHBjbGkgPSB0YXJnZXQtPkdldExpbmtJbmZvcm1hdGlvbihjb25maWcpOwogICBjb25zdCBjaGFyKiBsaWJyYXJ5TGlua1ZhcmlhYmxlID0KICAgICAiQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyI7IC8vIGRlZmF1bHQgdG8gc2hhcmVkIGxpYnJhcnkKIAogICBjb25zdCBzdGQ6OnN0cmluZyBsaW5rTGFuZ3VhZ2UgPQotICAgIGxpbmtMaW5lQ29tcHV0ZXItPkdldExpbmtlckxhbmd1YWdlKHRhcmdldCwgYnVpbGRUeXBlKTsKKyAgICBsaW5rTGluZUNvbXB1dGVyLT5HZXRMaW5rZXJMYW5ndWFnZSh0YXJnZXQsIGNvbmZpZyk7CiAKICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKLSAgICAgIGxpbmtGbGFncyA9IHRoaXMtPkdldFN0YXRpY0xpYnJhcnlGbGFncyhidWlsZFR5cGUsIGxpbmtMYW5ndWFnZSwgdGFyZ2V0KTsKLSAgICAgIGlmIChwY2xpICYmIGR5bmFtaWNfY2FzdDxjbUxpbmtMaW5lRGV2aWNlQ29tcHV0ZXIqPihsaW5rTGluZUNvbXB1dGVyKSkgewotICAgICAgICAvLyBDb21wdXRlIHRoZSByZXF1aXJlZCBjdWRhIGRldmljZSBsaW5rIGxpYnJhcmllcyB3aGVuCi0gICAgICAgIC8vIHJlc29sdmluZyBjdWRhIGRldmljZSBzeW1ib2xzCi0gICAgICAgIHRoaXMtPk91dHB1dExpbmtMaWJyYXJpZXMocGNsaSwgbGlua0xpbmVDb21wdXRlciwgbGlua0xpYnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrUGF0aCwgbGlua1BhdGgpOwotICAgICAgfQorICAgICAgbGlua0ZsYWdzID0gdGhpcy0+R2V0U3RhdGljTGlicmFyeUZsYWdzKGNvbmZpZywgbGlua0xhbmd1YWdlLCB0YXJnZXQpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOgogICAgICAgbGlicmFyeUxpbmtWYXJpYWJsZSA9ICJDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTIjsKQEAgLTEyODgsOCArMTQ1Myw4IEBACiAgICAgICBpZiAobGlua0xhbmd1YWdlICE9ICJTd2lmdCIpIHsKICAgICAgICAgc2hhcmVkTGliRmxhZ3MgPSBjbVN0ckNhdCgKICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24obGlicmFyeUxpbmtWYXJpYWJsZSksICcgJyk7Ci0gICAgICAgIGlmICghYnVpbGRUeXBlLmVtcHR5KCkpIHsKLSAgICAgICAgICBzdGQ6OnN0cmluZyBidWlsZCA9IGNtU3RyQ2F0KGxpYnJhcnlMaW5rVmFyaWFibGUsICdfJywgYnVpbGRUeXBlKTsKKyAgICAgICAgaWYgKCFjb25maWdVcHBlci5lbXB0eSgpKSB7CisgICAgICAgICAgc3RkOjpzdHJpbmcgYnVpbGQgPSBjbVN0ckNhdChsaWJyYXJ5TGlua1ZhcmlhYmxlLCAnXycsIGNvbmZpZ1VwcGVyKTsKICAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oYnVpbGQpOwogICAgICAgICAgIHNoYXJlZExpYkZsYWdzICs9ICIgIjsKICAgICAgICAgfQpAQCAtMTI5NywzMCArMTQ2MiwzMCBAQAogICAgICAgICAgICAgISh0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ1lHV0lOIikgfHwKICAgICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPklzT24oIk1JTkdXIikpKSB7CiAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKLSAgICAgICAgICB0YXJnZXQtPkdldFNvdXJjZUZpbGVzKHNvdXJjZXMsIGJ1aWxkVHlwZSk7CisgICAgICAgICAgdGFyZ2V0LT5HZXRTb3VyY2VGaWxlcyhzb3VyY2VzLCBjb25maWcpOwogICAgICAgICAgIHN0ZDo6c3RyaW5nIGRlZkZsYWcgPQogICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9MSU5LX0RFRl9GSUxFX0ZMQUciKTsKICAgICAgICAgICBmb3IgKGNtU291cmNlRmlsZSogc2YgOiBzb3VyY2VzKSB7CiAgICAgICAgICAgICBpZiAoc2YtPkdldEV4dGVuc2lvbigpID09ICJkZWYiKSB7CiAgICAgICAgICAgICAgIHNoYXJlZExpYkZsYWdzICs9IGRlZkZsYWc7Ci0gICAgICAgICAgICAgIHNoYXJlZExpYkZsYWdzICs9IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHNmLT5SZXNvbHZlRnVsbFBhdGgoKSksIFNIRUxMKTsKKyAgICAgICAgICAgICAgc2hhcmVkTGliRmxhZ3MgKz0KKyAgICAgICAgICAgICAgICB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoc2YtPlJlc29sdmVGdWxsUGF0aCgpLCBTSEVMTCk7CiAgICAgICAgICAgICAgIHNoYXJlZExpYkZsYWdzICs9ICIgIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgY29uc3QgY2hhciogdGFyZ2V0TGlua0ZsYWdzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTElOS19GTEFHUyIpOworICAgICAgY21Qcm9wIHRhcmdldExpbmtGbGFncyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfRkxBR1MiKTsKICAgICAgIGlmICh0YXJnZXRMaW5rRmxhZ3MpIHsKLSAgICAgICAgc2hhcmVkTGliRmxhZ3MgKz0gdGFyZ2V0TGlua0ZsYWdzOworICAgICAgICBzaGFyZWRMaWJGbGFncyArPSAqdGFyZ2V0TGlua0ZsYWdzOwogICAgICAgICBzaGFyZWRMaWJGbGFncyArPSAiICI7CiAgICAgICB9Ci0gICAgICBpZiAoIWJ1aWxkVHlwZS5lbXB0eSgpKSB7CisgICAgICBpZiAoIWNvbmZpZ1VwcGVyLmVtcHR5KCkpIHsKICAgICAgICAgdGFyZ2V0TGlua0ZsYWdzID0KLSAgICAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KCJMSU5LX0ZMQUdTXyIsIGJ1aWxkVHlwZSkpOworICAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQoIkxJTktfRkxBR1NfIiwgY29uZmlnVXBwZXIpKTsKICAgICAgICAgaWYgKHRhcmdldExpbmtGbGFncykgewotICAgICAgICAgIHNoYXJlZExpYkZsYWdzICs9IHRhcmdldExpbmtGbGFnczsKKyAgICAgICAgICBzaGFyZWRMaWJGbGFncyArPSAqdGFyZ2V0TGlua0ZsYWdzOwogICAgICAgICAgIHNoYXJlZExpYkZsYWdzICs9ICIgIjsKICAgICAgICAgfQogICAgICAgfQpAQCAtMTM0Myw5ICsxNTA4LDkgQEAKICAgICAgIGlmIChsaW5rTGFuZ3VhZ2UgIT0gIlN3aWZ0IikgewogICAgICAgICBleGVGbGFncyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfRVhFX0xJTktFUl9GTEFHUyIpOwogICAgICAgICBleGVGbGFncyArPSAiICI7Ci0gICAgICAgIGlmICghYnVpbGRUeXBlLmVtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFjb25maWdVcHBlci5lbXB0eSgpKSB7CiAgICAgICAgICAgZXhlRmxhZ3MgKz0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAotICAgICAgICAgICAgY21TdHJDYXQoIkNNQUtFX0VYRV9MSU5LRVJfRkxBR1NfIiwgYnVpbGRUeXBlKSk7CisgICAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfRVhFX0xJTktFUl9GTEFHU18iLCBjb25maWdVcHBlcikpOwogICAgICAgICAgIGV4ZUZsYWdzICs9ICIgIjsKICAgICAgICAgfQogICAgICAgICBpZiAobGlua0xhbmd1YWdlLmVtcHR5KCkpIHsKQEAgLTEzNzIsMTUgKzE1MzcsMTQgQEAKICAgICAgICAgfQogICAgICAgfQogCi0gICAgICB0aGlzLT5BZGRMYW5ndWFnZUZsYWdzRm9yTGlua2luZyhmbGFncywgdGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIGJ1aWxkVHlwZSk7CisgICAgICB0aGlzLT5BZGRMYW5ndWFnZUZsYWdzRm9yTGlua2luZyhmbGFncywgdGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIGNvbmZpZyk7CiAgICAgICBpZiAocGNsaSkgewogICAgICAgICB0aGlzLT5PdXRwdXRMaW5rTGlicmFyaWVzKHBjbGksIGxpbmtMaW5lQ29tcHV0ZXIsIGxpbmtMaWJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29ya1BhdGgsIGxpbmtQYXRoKTsKICAgICAgIH0KIAotICAgICAgaWYgKGNtSXNPbih0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQlVJTERfU0hBUkVEX0xJQlMiKSkpIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgc0ZsYWdWYXIgPSBzdGQ6OnN0cmluZygiQ01BS0VfU0hBUkVEX0JVSUxEXyIpICsKLSAgICAgICAgICBsaW5rTGFuZ3VhZ2UgKyBzdGQ6OnN0cmluZygiX0ZMQUdTIik7CisgICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24oIkJVSUxEX1NIQVJFRF9MSUJTIikpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgc0ZsYWdWYXIgPSAiQ01BS0VfU0hBUkVEX0JVSUxEXyIgKyBsaW5rTGFuZ3VhZ2UgKyAiX0ZMQUdTIjsKICAgICAgICAgZXhlRmxhZ3MgKz0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKHNGbGFnVmFyKTsKICAgICAgICAgZXhlRmxhZ3MgKz0gIiAiOwogICAgICAgfQpAQCAtMTM5MiwxNiArMTU1NiwxNiBAQAogICAgICAgICBleGVGbGFncyArPSAiICI7CiAgICAgICB9CiAKLSAgICAgIGNvbnN0IGNoYXIqIHRhcmdldExpbmtGbGFncyA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkxJTktfRkxBR1MiKTsKKyAgICAgIGNtUHJvcCB0YXJnZXRMaW5rRmxhZ3MgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0ZMQUdTIik7CiAgICAgICBpZiAodGFyZ2V0TGlua0ZsYWdzKSB7Ci0gICAgICAgIGV4ZUZsYWdzICs9IHRhcmdldExpbmtGbGFnczsKKyAgICAgICAgZXhlRmxhZ3MgKz0gKnRhcmdldExpbmtGbGFnczsKICAgICAgICAgZXhlRmxhZ3MgKz0gIiAiOwogICAgICAgfQotICAgICAgaWYgKCFidWlsZFR5cGUuZW1wdHkoKSkgeworICAgICAgaWYgKCFjb25maWdVcHBlci5lbXB0eSgpKSB7CiAgICAgICAgIHRhcmdldExpbmtGbGFncyA9Ci0gICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdCgiTElOS19GTEFHU18iLCBidWlsZFR5cGUpKTsKKyAgICAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KCJMSU5LX0ZMQUdTXyIsIGNvbmZpZ1VwcGVyKSk7CiAgICAgICAgIGlmICh0YXJnZXRMaW5rRmxhZ3MpIHsKLSAgICAgICAgICBleGVGbGFncyArPSB0YXJnZXRMaW5rRmxhZ3M7CisgICAgICAgICAgZXhlRmxhZ3MgKz0gKnRhcmdldExpbmtGbGFnczsKICAgICAgICAgICBleGVGbGFncyArPSAiICI7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTE0MzIsMTYgKzE1OTYsMTcgQEAKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6R2V0VGFyZ2V0Q29tcGlsZUZsYWdzKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYXJjaCkKIHsKICAgc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiB0bXBGbGFncyA9Ci0gICAgdGhpcy0+R2V0VGFyZ2V0Q29tcGlsZUZsYWdzKHRhcmdldCwgY29uZmlnLCBsYW5nKTsKKyAgICB0aGlzLT5HZXRUYXJnZXRDb21waWxlRmxhZ3ModGFyZ2V0LCBjb25maWcsIGxhbmcsIGFyY2gpOwogICB0aGlzLT5BcHBlbmRGbGFncyhmbGFncywgdG1wRmxhZ3MpOwogfQogCiBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IGNtTG9jYWxHZW5lcmF0b3I6OkdldFRhcmdldENvbXBpbGVGbGFncygKICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKLSAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBzdGQ6OnN0cmluZyBjb25zdCYgYXJjaCkKIHsKICAgc3RkOjp2ZWN0b3I8QlQ8c3RkOjpzdHJpbmc+PiBmbGFnczsKICAgc3RkOjpzdHJpbmcgY29tcGlsZUZsYWdzOwpAQCAtMTQ1NSw3ICsxNjIwLDcgQEAKICAgICB0aGlzLT5BcHBlbmRGZWF0dXJlT3B0aW9ucyhjb21waWxlRmxhZ3MsIGxhbmcsICJJUE8iKTsKICAgfQogCi0gIHRoaXMtPkFkZEFyY2hpdGVjdHVyZUZsYWdzKGNvbXBpbGVGbGFncywgdGFyZ2V0LCBsYW5nLCBjb25maWcpOworICB0aGlzLT5BZGRBcmNoaXRlY3R1cmVGbGFncyhjb21waWxlRmxhZ3MsIHRhcmdldCwgbGFuZywgY29uZmlnLCBhcmNoKTsKIAogICBpZiAobGFuZyA9PSAiRm9ydHJhbiIpIHsKICAgICB0aGlzLT5BcHBlbmRGbGFncyhjb21waWxlRmxhZ3MsCkBAIC0xNDg4LDcgKzE2NTMsNyBAQAogCiAgIHN0ZDo6c3RyaW5nIGZ3U2VhcmNoRmxhZ1ZhciA9ICJDTUFLRV8iICsgbGFuZyArICJfRlJBTUVXT1JLX1NFQVJDSF9GTEFHIjsKICAgY29uc3QgY2hhciogZndTZWFyY2hGbGFnID0gbWYtPkdldERlZmluaXRpb24oZndTZWFyY2hGbGFnVmFyKTsKLSAgaWYgKCEoZndTZWFyY2hGbGFnICYmICpmd1NlYXJjaEZsYWcpKSB7CisgIGlmICghY21Ob25lbXB0eShmd1NlYXJjaEZsYWcpKSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CiAgIH0KIApAQCAtMTY0NCwxMCArMTgwOSwxMCBAQAogICAgICAgICAgICAgICAiQ01BS0VfUE9MSUNZX1dBUk5JTkdfQ01QMDA2NSIpKSB7CiAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHc7CiAgICAgICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwotICAgICAgICAgIHcgPDwgY21Qb2xpY2llczo6R2V0UG9saWN5V2FybmluZyhjbVBvbGljaWVzOjpDTVAwMDY1KSA8PCAiXG4iCi0gICAgICAgICAgICAiRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBDTWFrZSwgIgotICAgICAgICAgICAgImFkZGl0aW9uYWwgZmxhZ3MgbWF5IGJlIGFkZGVkIHRvIGV4cG9ydCBzeW1ib2xzIG9uIGFsbCAiCi0gICAgICAgICAgICAiZXhlY3V0YWJsZXMgcmVnYXJkbGVzcyBvZiB0aGVpciBFTkFCTEVfRVhQT1JUUyBwcm9wZXJ0eS4iOworICAgICAgICAgICAgdyA8PCBjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAwNjUpIDw8ICJcbiIKKyAgICAgICAgICAgICAgIkZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgQ01ha2UsICIKKyAgICAgICAgICAgICAgImFkZGl0aW9uYWwgZmxhZ3MgbWF5IGJlIGFkZGVkIHRvIGV4cG9ydCBzeW1ib2xzIG9uIGFsbCAiCisgICAgICAgICAgICAgICJleGVjdXRhYmxlcyByZWdhcmRsZXNzIG9mIHRoZWlyIEVOQUJMRV9FWFBPUlRTIHByb3BlcnR5LiI7CiAgICAgICAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgICAgICAgICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpBVVRIT1JfV0FSTklORywgdy5zdHIoKSk7CiAgICAgICAgIH0KQEAgLTE2ODAsMTUgKzE4NDUsNDYgQEAKICAgcmV0dXJuIGxpbmtGbGFnczsKIH0KIAorYm9vbCBjbUxvY2FsR2VuZXJhdG9yOjpBbGxBcHBsZUFyY2hTeXNyb290c0FyZVRoZVNhbWUoCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJjaHMsIGNvbnN0IGNoYXIqIHN5c3Jvb3QpCit7CisgIGlmICghc3lzcm9vdCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGFyY2ggOiBhcmNocykgeworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmNoU3lzcm9vdCA9IHRoaXMtPkFwcGxlQXJjaFN5c3Jvb3RzW2FyY2hdOworICAgIGlmIChjbUlzT2ZmKGFyY2hTeXNyb290KSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmIChhcmNoU3lzcm9vdCAhPSBzeXNyb290KSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkQXJjaGl0ZWN0dXJlRmxhZ3Moc3RkOjpzdHJpbmcmIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbHRlckFyY2gpCiB7Ci0gIC8vIE9ubHkgYWRkIG1hY09TIHNwZWNpZmljIGZsYWdzIG9uIERhcndpbiBwbGF0Zm9ybXMgKG1hY09TIGFuZCBpT1MpOgorICAvLyBPbmx5IGFkZCBBcHBsZSBzcGVjaWZpYyBmbGFncyBvbiBBcHBsZSBwbGF0Zm9ybXMKICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJBUFBMRSIpICYmIHRoaXMtPkVtaXRVbml2ZXJzYWxCaW5hcnlGbGFncykgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmNoczsKICAgICB0YXJnZXQtPkdldEFwcGxlQXJjaHMoY29uZmlnLCBhcmNocyk7CisgICAgaWYgKCFhcmNocy5lbXB0eSgpICYmICFsYW5nLmVtcHR5KCkgJiYKKyAgICAgICAgKGxhbmdbMF0gPT0gJ0MnIHx8IGxhbmdbMF0gPT0gJ0YnIHx8IGxhbmdbMF0gPT0gJ08nKSkgeworICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYXJjaCA6IGFyY2hzKSB7CisgICAgICAgIGlmIChmaWx0ZXJBcmNoLmVtcHR5KCkgfHwgZmlsdGVyQXJjaCA9PSBhcmNoKSB7CisgICAgICAgICAgZmxhZ3MgKz0gIiAtYXJjaCAiOworICAgICAgICAgIGZsYWdzICs9IGFyY2g7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBzeXNyb290ID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX09TWF9TWVNST09UIik7CiAgICAgaWYgKHN5c3Jvb3QgJiYgc3lzcm9vdFswXSA9PSAnLycgJiYgIXN5c3Jvb3RbMV0pIHsKICAgICAgIHN5c3Jvb3QgPSBudWxscHRyOwpAQCAtMTY5NiwyOSArMTg5MiwzNiBAQAogICAgIHN0ZDo6c3RyaW5nIHN5c3Jvb3RGbGFnVmFyID0KICAgICAgIHN0ZDo6c3RyaW5nKCJDTUFLRV8iKSArIGxhbmcgKyAiX1NZU1JPT1RfRkxBRyI7CiAgICAgY29uc3QgY2hhciogc3lzcm9vdEZsYWcgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihzeXNyb290RmxhZ1Zhcik7CisgICAgaWYgKGNtTm9uZW1wdHkoc3lzcm9vdEZsYWcpKSB7CisgICAgICBpZiAoIXRoaXMtPkFwcGxlQXJjaFN5c3Jvb3RzLmVtcHR5KCkgJiYKKyAgICAgICAgICAhdGhpcy0+QWxsQXBwbGVBcmNoU3lzcm9vdHNBcmVUaGVTYW1lKGFyY2hzLCBzeXNyb290KSkgeworICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmNoIDogYXJjaHMpIHsKKyAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYXJjaFN5c3Jvb3QgPSB0aGlzLT5BcHBsZUFyY2hTeXNyb290c1thcmNoXTsKKyAgICAgICAgICBpZiAoY21Jc09mZihhcmNoU3lzcm9vdCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoZmlsdGVyQXJjaC5lbXB0eSgpIHx8IGZpbHRlckFyY2ggPT0gYXJjaCkgeworICAgICAgICAgICAgZmxhZ3MgKz0gIiAtWGFyY2hfIiArIGFyY2ggKyAiICI7CisgICAgICAgICAgICAvLyBDb21iaW5lIHN5c3Jvb3QgZmxhZyBhbmQgcGF0aCB0byB3b3JrIHdpdGggLVhhcmNoCisgICAgICAgICAgICBzdGQ6OnN0cmluZyBhcmNoX3N5c3Jvb3QgPSBzeXNyb290RmxhZyArIGFyY2hTeXNyb290OworICAgICAgICAgICAgZmxhZ3MgKz0gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KGFyY2hfc3lzcm9vdCwgU0hFTEwpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChzeXNyb290ICYmICpzeXNyb290KSB7CisgICAgICAgIGZsYWdzICs9ICIgIjsKKyAgICAgICAgZmxhZ3MgKz0gc3lzcm9vdEZsYWc7CisgICAgICAgIGZsYWdzICs9ICIgIjsKKyAgICAgICAgZmxhZ3MgKz0gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHN5c3Jvb3QsIFNIRUxMKTsKKyAgICAgIH0KKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBkZXBsb3ltZW50VGFyZ2V0ID0KICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9PU1hfREVQTE9ZTUVOVF9UQVJHRVQiKTsKICAgICBzdGQ6OnN0cmluZyBkZXBsb3ltZW50VGFyZ2V0RmxhZ1ZhciA9CiAgICAgICBzdGQ6OnN0cmluZygiQ01BS0VfIikgKyBsYW5nICsgIl9PU1hfREVQTE9ZTUVOVF9UQVJHRVRfRkxBRyI7CiAgICAgY29uc3QgY2hhciogZGVwbG95bWVudFRhcmdldEZsYWcgPQogICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oZGVwbG95bWVudFRhcmdldEZsYWdWYXIpOwotICAgIGlmICghYXJjaHMuZW1wdHkoKSAmJiAhbGFuZy5lbXB0eSgpICYmCi0gICAgICAgIChsYW5nWzBdID09ICdDJyB8fCBsYW5nWzBdID09ICdGJyB8fCBsYW5nWzBdID09ICdPJykpIHsKLSAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGFyY2ggOiBhcmNocykgewotICAgICAgICBmbGFncyArPSAiIC1hcmNoICI7Ci0gICAgICAgIGZsYWdzICs9IGFyY2g7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHN5c3Jvb3RGbGFnICYmICpzeXNyb290RmxhZyAmJiBzeXNyb290ICYmICpzeXNyb290KSB7Ci0gICAgICBmbGFncyArPSAiICI7Ci0gICAgICBmbGFncyArPSBzeXNyb290RmxhZzsKLSAgICAgIGZsYWdzICs9ICIgIjsKLSAgICAgIGZsYWdzICs9IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChzeXNyb290LCBTSEVMTCk7Ci0gICAgfQotCi0gICAgaWYgKGRlcGxveW1lbnRUYXJnZXRGbGFnICYmICpkZXBsb3ltZW50VGFyZ2V0RmxhZyAmJiBkZXBsb3ltZW50VGFyZ2V0ICYmCi0gICAgICAgICpkZXBsb3ltZW50VGFyZ2V0KSB7CisgICAgaWYgKGNtTm9uZW1wdHkoZGVwbG95bWVudFRhcmdldEZsYWcpICYmIGNtTm9uZW1wdHkoZGVwbG95bWVudFRhcmdldCkpIHsKICAgICAgIGZsYWdzICs9ICIgIjsKICAgICAgIGZsYWdzICs9IGRlcGxveW1lbnRUYXJnZXRGbGFnOwogICAgICAgZmxhZ3MgKz0gZGVwbG95bWVudFRhcmdldDsKQEAgLTE3MzYsMjggKzE5MzksNDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogCiAgIGlmIChsYW5nID09ICJTd2lmdCIpIHsKLSAgICBpZiAoY29uc3QgY2hhciogdiA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlN3aWZ0X0xBTkdVQUdFX1ZFUlNJT04iKSkgeworICAgIGlmIChjbVByb3AgdiA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlN3aWZ0X0xBTkdVQUdFX1ZFUlNJT04iKSkgewogICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OlZlcnNpb25Db21wYXJlKAogICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6T1BfR1JFQVRFUl9FUVVBTCwKICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9Td2lmdF9DT01QSUxFUl9WRVJTSU9OIiksCiAgICAgICAgICAgICAiNC4yIikpIHsKLSAgICAgICAgdGhpcy0+QXBwZW5kRmxhZ3MoZmxhZ3MsICItc3dpZnQtdmVyc2lvbiAiICsgc3RkOjpzdHJpbmcodikpOworICAgICAgICB0aGlzLT5BcHBlbmRGbGFncyhmbGFncywgIi1zd2lmdC12ZXJzaW9uICIgKyAqdik7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKGxhbmcgPT0gIkNVREEiKSB7CisgICAgdGFyZ2V0LT5BZGRDVURBQXJjaGl0ZWN0dXJlRmxhZ3MoZmxhZ3MpOworICAgIHRhcmdldC0+QWRkQ1VEQVRvb2xraXRGbGFncyhmbGFncyk7CisKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29tcGlsZXIgPQorICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9DVURBX0NPTVBJTEVSX0lEIik7CisKKyAgICBpZiAoY29tcGlsZXIgPT0gIkNsYW5nIikgeworICAgICAgYm9vbCBzZXBhcmFibGUgPSB0YXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiIpOworCisgICAgICBpZiAoc2VwYXJhYmxlKSB7CisgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICJDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBpc24ndCBzdXBwb3J0ZWQgb24gQ2xhbmcuICIKKyAgICAgICAgICAiU2VlIENNYWtlIGlzc3VlICMyMDcyNi4iKTsKICAgICAgIH0KICAgICB9CiAgIH0KIAogICAvLyBBZGQgTVNWQyBydW50aW1lIGxpYnJhcnkgZmxhZ3MuICBUaGlzIGlzIGFjdGl2YXRlZCBieSB0aGUgcHJlc2VuY2UKICAgLy8gb2YgYSBkZWZhdWx0IHNlbGVjdGlvbiB3aGV0aGVyIG9yIG5vdCBpdCBpcyBvdmVycmlkZGVuIGJ5IGEgcHJvcGVydHkuCi0gIGNvbnN0IGNoYXIqIG1zdmNSdW50aW1lTGlicmFyeURlZmF1bHQgPQotICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWV9ERUZBVUxUIik7Ci0gIGlmIChtc3ZjUnVudGltZUxpYnJhcnlEZWZhdWx0ICYmICptc3ZjUnVudGltZUxpYnJhcnlEZWZhdWx0KSB7Ci0gICAgY29uc3QgY2hhciogbXN2Y1J1bnRpbWVMaWJyYXJ5VmFsdWUgPQorICBjbVByb3AgbXN2Y1J1bnRpbWVMaWJyYXJ5RGVmYXVsdCA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZigiQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUllfREVGQVVMVCIpOworICBpZiAoY21Ob25lbXB0eShtc3ZjUnVudGltZUxpYnJhcnlEZWZhdWx0KSkgeworICAgIGNtUHJvcCBtc3ZjUnVudGltZUxpYnJhcnlWYWx1ZSA9CiAgICAgICB0YXJnZXQtPkdldFByb3BlcnR5KCJNU1ZDX1JVTlRJTUVfTElCUkFSWSIpOwogICAgIGlmICghbXN2Y1J1bnRpbWVMaWJyYXJ5VmFsdWUpIHsKICAgICAgIG1zdmNSdW50aW1lTGlicmFyeVZhbHVlID0gbXN2Y1J1bnRpbWVMaWJyYXJ5RGVmYXVsdDsKICAgICB9CiAgICAgc3RkOjpzdHJpbmcgY29uc3QgbXN2Y1J1bnRpbWVMaWJyYXJ5ID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgIG1zdmNSdW50aW1lTGlicmFyeVZhbHVlLCB0aGlzLCBjb25maWcsIHRhcmdldCk7CisgICAgICAqbXN2Y1J1bnRpbWVMaWJyYXJ5VmFsdWUsIHRoaXMsIGNvbmZpZywgdGFyZ2V0KTsKICAgICBpZiAoIW1zdmNSdW50aW1lTGlicmFyeS5lbXB0eSgpKSB7CiAgICAgICBpZiAoY29uc3QgY2hhciogbXN2Y1J1bnRpbWVMaWJyYXJ5T3B0aW9ucyA9CiAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKQEAgLTE3ODksNyArMjAwOSw3IEBACiAgICAgLy8gd2hlbiBsaW5raW5nIGluIG9yZGVyIHRvIHVzZSB0aGUgbWF0Y2hpbmcgc3RhbmRhcmQgbGlicmFyeS4KICAgICAvLyBGSVhNRTogSWYgQ01ha2UgZ2FpbnMgYW4gYWJzdHJhY3Rpb24gZm9yIHN0YW5kYXJkIGxpYnJhcnkKICAgICAvLyBzZWxlY3Rpb24sIHRoaXMgd2lsbCBoYXZlIHRvIGJlIHJlY29uY2lsZWQgd2l0aCBpdC4KLSAgICB0aGlzLT5BZGRDb21waWxlclJlcXVpcmVtZW50RmxhZyhmbGFncywgdGFyZ2V0LCBsYW5nKTsKKyAgICB0aGlzLT5BZGRDb21waWxlclJlcXVpcmVtZW50RmxhZyhmbGFncywgdGFyZ2V0LCBsYW5nLCBjb25maWcpOwogICB9CiAKICAgdGhpcy0+QWRkTGFuZ3VhZ2VGbGFncyhmbGFncywgdGFyZ2V0LCBsYW5nLCBjb25maWcpOwpAQCAtMTgwNyw2ICsyMDI3LDE1IEBACiAgICAgcmV0dXJuIGltcG9ydGVkLT5zZWNvbmQ7CiAgIH0KIAorICAvLyBmaW5kIGxvY2FsIGFsaWFzIHRvIGltcG9ydGVkIHRhcmdldAorICBhdXRvIGFsaWFzZWQgPSB0aGlzLT5BbGlhc1RhcmdldHMuZmluZChuYW1lKTsKKyAgaWYgKGFsaWFzZWQgIT0gdGhpcy0+QWxpYXNUYXJnZXRzLmVuZCgpKSB7CisgICAgaW1wb3J0ZWQgPSB0aGlzLT5JbXBvcnRlZEdlbmVyYXRvclRhcmdldHMuZmluZChhbGlhc2VkLT5zZWNvbmQpOworICAgIGlmIChpbXBvcnRlZCAhPSB0aGlzLT5JbXBvcnRlZEdlbmVyYXRvclRhcmdldHMuZW5kKCkpIHsKKyAgICAgIHJldHVybiBpbXBvcnRlZC0+c2Vjb25kOworICAgIH0KKyAgfQorCiAgIGlmIChjbUdlbmVyYXRvclRhcmdldCogdCA9IHRoaXMtPkZpbmRMb2NhbE5vbkFsaWFzR2VuZXJhdG9yVGFyZ2V0KG5hbWUpKSB7CiAgICAgcmV0dXJuIHQ7CiAgIH0KQEAgLTE4MzAsNyArMjA1OSw2IEBACiAgIGlmIChuYW1lLmVtcHR5KCkpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLQogICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVMYXN0RXh0ZW5zaW9uKG5hbWUpID09ICIuZXhlIikgewogICAgIG5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVdpdGhvdXRMYXN0RXh0ZW5zaW9uKG5hbWUpOwogICB9CkBAIC0xODY0LDE2ICsyMDkyLDE1IEBACiAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlk6CiAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlk6CiAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VU5LTk9XTl9MSUJSQVJZOgotICAgICAgICBkZXAgPSB0YXJnZXQtPkdldExvY2F0aW9uKGNvbmZpZyk7CisgICAgICAgIGRlcCA9IHRhcmdldC0+R2V0RnVsbFBhdGgoY29uZmlnLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnJlYWxuYW1lPSovdHJ1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok9CSkVDVF9MSUJSQVJZOgogICAgICAgICAvLyBBbiBvYmplY3QgbGlicmFyeSBoYXMgbm8gc2luZ2xlIGZpbGUgb24gd2hpY2ggdG8gZGVwZW5kLgogICAgICAgICAvLyBUaGlzIHdhcyBsaXN0ZWQgdG8gZ2V0IHRoZSB0YXJnZXQtbGV2ZWwgZGVwZW5kZW5jeS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZOgogICAgICAgICAvLyBBbiBpbnRlcmZhY2UgbGlicmFyeSBoYXMgbm8gZmlsZSBvbiB3aGljaCB0byBkZXBlbmQuCiAgICAgICAgIC8vIFRoaXMgd2FzIGxpc3RlZCB0byBnZXQgdGhlIHRhcmdldC1sZXZlbCBkZXBlbmRlbmN5LgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VVRJTElUWToKICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUOgogICAgICAgICAvLyBBIHV0aWxpdHkgdGFyZ2V0IGhhcyBubyBmaWxlIG9uIHdoaWNoIHRvIGRlcGVuZC4gIFRoaXMgd2FzIGxpc3RlZApAQCAtMTg5OCw4ICsyMTI1LDE2IEBACiAKICAgLy8gVHJlYXQgdGhlIG5hbWUgYXMgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQKICAgLy8gd2FzIGdpdmVuLgotICBkZXAgPSBjbVN0ckNhdCh0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRTb3VyY2UoKSwgJy8nLAotICAgICAgICAgICAgICAgICBpbk5hbWUpOworICBkZXAgPSBjbVN0ckNhdCh0aGlzLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksICcvJywgaW5OYW1lKTsKKworICAvLyBJZiB0aGUgaW4tc291cmNlIHBhdGggZG9lcyBub3QgZXhpc3QsIGFzc3VtZSBpdCBpbnN0ZWFkIGxpdmVzIGluIHRoZQorICAvLyBiaW5hcnkgZGlyZWN0b3J5LgorICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZGVwKSkgeworICAgIGRlcCA9IGNtU3RyQ2F0KHRoaXMtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLCBpbk5hbWUpOworICB9CisKKyAgZGVwID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChkZXAsIHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpKTsKKwogICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTkxNywxNTIgKzIxNTIsMjEgQEAKIH0KIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBZGRDb21waWxlclJlcXVpcmVtZW50RmxhZygKLSAgc3RkOjpzdHJpbmcmIGZsYWdzLCBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykKKyAgc3RkOjpzdHJpbmcmIGZsYWdzLCBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKLSAgaWYgKGxhbmcuZW1wdHkoKSkgewotICAgIHJldHVybjsKLSAgfQotICBjb25zdCBjaGFyKiBkZWZhdWx0U3RkID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKyAiX1NUQU5EQVJEX0RFRkFVTFQiKTsKLSAgaWYgKCFkZWZhdWx0U3RkIHx8ICEqZGVmYXVsdFN0ZCkgewotICAgIC8vIFRoaXMgY29tcGlsZXIgaGFzIG5vIG5vdGlvbiBvZiBsYW5ndWFnZSBzdGFuZGFyZCBsZXZlbHMuCi0gICAgcmV0dXJuOwotICB9Ci0gIHN0ZDo6c3RyaW5nIGV4dFByb3AgPSBsYW5nICsgIl9FWFRFTlNJT05TIjsKLSAgYm9vbCBleHQgPSB0cnVlOwotICBpZiAoY29uc3QgY2hhciogZXh0UHJvcFZhbHVlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShleHRQcm9wKSkgewotICAgIGlmIChjbUlzT2ZmKGV4dFByb3BWYWx1ZSkpIHsKLSAgICAgIGV4dCA9IGZhbHNlOwotICAgIH0KLSAgfQotICBzdGQ6OnN0cmluZyBzdGRQcm9wID0gbGFuZyArICJfU1RBTkRBUkQiOwotICBjb25zdCBjaGFyKiBzdGFuZGFyZFByb3AgPSB0YXJnZXQtPkdldFByb3BlcnR5KHN0ZFByb3ApOwotICBpZiAoIXN0YW5kYXJkUHJvcCkgewotICAgIGlmIChleHQpIHsKLSAgICAgIC8vIE5vIGxhbmd1YWdlIHN0YW5kYXJkIGlzIHNwZWNpZmllZCBhbmQgZXh0ZW5zaW9ucyBhcmUgbm90IGRpc2FibGVkLgotICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBjb21waWxlciBuZWVkcyBhIGZsYWcgdG8gZW5hYmxlIGV4dGVuc2lvbnMuCi0gICAgICBzdGQ6OnN0cmluZyBjb25zdCBvcHRpb25fZmxhZyA9Ci0gICAgICAgICJDTUFLRV8iICsgbGFuZyArICJfRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OIjsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBvcHQgPQotICAgICAgICAgICAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24ob3B0aW9uX2ZsYWcpKSB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRWZWMgPSBjbUV4cGFuZGVkTGlzdChvcHQpOwotICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogb3B0VmVjKSB7Ci0gICAgICAgICAgdGhpcy0+QXBwZW5kRmxhZ0VzY2FwZShmbGFncywgaSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuOwotICB9CisgIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyIHN0YW5kYXJkUmVzb2x2ZXIodGhpcy0+TWFrZWZpbGUpOwogCi0gIHN0ZDo6c3RyaW5nIGNvbnN0IHR5cGUgPSBleHQgPyAiRVhURU5TSU9OIiA6ICJTVEFOREFSRCI7Ci0KLSAgaWYgKHRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2wobGFuZyArICJfU1RBTkRBUkRfUkVRVUlSRUQiKSkgewotICAgIHN0ZDo6c3RyaW5nIG9wdGlvbl9mbGFnID0KLSAgICAgICJDTUFLRV8iICsgbGFuZyArIHN0YW5kYXJkUHJvcCArICJfIiArIHR5cGUgKyAiX0NPTVBJTEVfT1BUSU9OIjsKLQotICAgIGNvbnN0IGNoYXIqIG9wdCA9Ci0gICAgICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbihvcHRpb25fZmxhZyk7Ci0gICAgaWYgKCFvcHQpIHsKLSAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwotICAgICAgZSA8PCAiVGFyZ2V0IFwiIiA8PCB0YXJnZXQtPkdldE5hbWUoKQotICAgICAgICA8PCAiXCIgcmVxdWlyZXMgdGhlIGxhbmd1YWdlICIKLSAgICAgICAgICAgImRpYWxlY3QgXCIiCi0gICAgICAgIDw8IGxhbmcgPDwgc3RhbmRhcmRQcm9wIDw8ICJcIiAiCi0gICAgICAgIDw8IChleHQgPyAiKHdpdGggY29tcGlsZXIgZXh0ZW5zaW9ucykiIDogIiIpCi0gICAgICAgIDw8ICIsIGJ1dCBDTWFrZSAiCi0gICAgICAgICAgICJkb2VzIG5vdCBrbm93IHRoZSBjb21waWxlIGZsYWdzIHRvIHVzZSB0byBlbmFibGUgaXQuIjsKLSAgICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCkpOwotICAgIH0gZWxzZSB7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvcHRpb25GbGFnRGVmID0KKyAgICBzdGFuZGFyZFJlc29sdmVyLkdldENvbXBpbGVPcHRpb25EZWYodGFyZ2V0LCBsYW5nLCBjb25maWcpOworICBpZiAoIW9wdGlvbkZsYWdEZWYuZW1wdHkoKSkgeworICAgIGF1dG8gb3B0ID0gdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24ob3B0aW9uRmxhZ0RlZik7CisgICAgaWYgKG9wdCkgewogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdFZlYyA9IGNtRXhwYW5kZWRMaXN0KG9wdCk7CiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogb3B0VmVjKSB7CiAgICAgICAgIHRoaXMtPkFwcGVuZEZsYWdFc2NhcGUoZmxhZ3MsIGkpOwogICAgICAgfQogICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLQotICBzdGF0aWMgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gbGFuZ1N0ZE1hcDsKLSAgaWYgKGxhbmdTdGRNYXAuZW1wdHkoKSkgewotICAgIC8vIE1haW50YWluIHNvcnRlZCBvcmRlciwgbW9zdCByZWNlbnQgZmlyc3QuCi0gICAgbGFuZ1N0ZE1hcFsiQ1hYIl0uZW1wbGFjZV9iYWNrKCIyMCIpOwotICAgIGxhbmdTdGRNYXBbIkNYWCJdLmVtcGxhY2VfYmFjaygiMTciKTsKLSAgICBsYW5nU3RkTWFwWyJDWFgiXS5lbXBsYWNlX2JhY2soIjE0Iik7Ci0gICAgbGFuZ1N0ZE1hcFsiQ1hYIl0uZW1wbGFjZV9iYWNrKCIxMSIpOwotICAgIGxhbmdTdGRNYXBbIkNYWCJdLmVtcGxhY2VfYmFjaygiOTgiKTsKLQotICAgIGxhbmdTdGRNYXBbIk9CSkNYWCJdLmVtcGxhY2VfYmFjaygiMjAiKTsKLSAgICBsYW5nU3RkTWFwWyJPQkpDWFgiXS5lbXBsYWNlX2JhY2soIjE3Iik7Ci0gICAgbGFuZ1N0ZE1hcFsiT0JKQ1hYIl0uZW1wbGFjZV9iYWNrKCIxNCIpOwotICAgIGxhbmdTdGRNYXBbIk9CSkNYWCJdLmVtcGxhY2VfYmFjaygiMTEiKTsKLSAgICBsYW5nU3RkTWFwWyJPQkpDWFgiXS5lbXBsYWNlX2JhY2soIjk4Iik7Ci0KLSAgICBsYW5nU3RkTWFwWyJDIl0uZW1wbGFjZV9iYWNrKCIxMSIpOwotICAgIGxhbmdTdGRNYXBbIkMiXS5lbXBsYWNlX2JhY2soIjk5Iik7Ci0gICAgbGFuZ1N0ZE1hcFsiQyJdLmVtcGxhY2VfYmFjaygiOTAiKTsKLQotICAgIGxhbmdTdGRNYXBbIk9CSkMiXS5lbXBsYWNlX2JhY2soIjExIik7Ci0gICAgbGFuZ1N0ZE1hcFsiT0JKQyJdLmVtcGxhY2VfYmFjaygiOTkiKTsKLSAgICBsYW5nU3RkTWFwWyJPQkpDIl0uZW1wbGFjZV9iYWNrKCI5MCIpOwotCi0gICAgbGFuZ1N0ZE1hcFsiQ1VEQSJdLmVtcGxhY2VfYmFjaygiMTQiKTsKLSAgICBsYW5nU3RkTWFwWyJDVURBIl0uZW1wbGFjZV9iYWNrKCIxMSIpOwotICAgIGxhbmdTdGRNYXBbIkNVREEiXS5lbXBsYWNlX2JhY2soIjk4Iik7Ci0gIH0KLQotICBzdGQ6OnN0cmluZyBzdGFuZGFyZChzdGFuZGFyZFByb3ApOwotCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc3RkcyA9IGxhbmdTdGRNYXBbbGFuZ107Ci0KLSAgYXV0byBzdGRJdCA9IHN0ZDo6ZmluZChzdGRzLmJlZ2luKCksIHN0ZHMuZW5kKCksIHN0YW5kYXJkKTsKLSAgaWYgKHN0ZEl0ID09IHN0ZHMuZW5kKCkpIHsKLSAgICBzdGQ6OnN0cmluZyBlID0KLSAgICAgIGxhbmcgKyAiX1NUQU5EQVJEIGlzIHNldCB0byBpbnZhbGlkIHZhbHVlICciICsgc3RhbmRhcmQgKyAiJyI7Ci0gICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKAotICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLCB0YXJnZXQtPkdldEJhY2t0cmFjZSgpKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBhdXRvIGRlZmF1bHRTdGRJdCA9IHN0ZDo6ZmluZChzdGRzLmJlZ2luKCksIHN0ZHMuZW5kKCksIGRlZmF1bHRTdGQpOwotICBpZiAoZGVmYXVsdFN0ZEl0ID09IHN0ZHMuZW5kKCkpIHsKLSAgICBzdGQ6OnN0cmluZyBlID0gIkNNQUtFXyIgKyBsYW5nICsKLSAgICAgICJfU1RBTkRBUkRfREVGQVVMVCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSAnIiArIHN0ZDo6c3RyaW5nKGRlZmF1bHRTdGQpICsKLSAgICAgICInIjsKLSAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OklOVEVSTkFMX0VSUk9SLCBlKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBJZiB0aGUgc3RhbmRhcmQgcmVxdWVzdGVkIGlzIG9sZGVyIHRoYW4gdGhlIGNvbXBpbGVyJ3MgZGVmYXVsdAotICAvLyB0aGVuIHdlIG5lZWQgdG8gdXNlIGEgZmxhZyB0byBjaGFuZ2UgaXQuICBUaGUgY29tcGFyaXNvbiBpcwotICAvLyBncmVhdGVyLW9yLWVxdWFsIGJlY2F1c2UgdGhlIHN0YW5kYXJkcyBhcmUgc3RvcmVkIGluIGJhY2t3YXJkCi0gIC8vIGNocm9ub2xvZ2ljYWwgb3JkZXIuCi0gIGlmIChzdGRJdCA+PSBkZWZhdWx0U3RkSXQpIHsKLSAgICBzdGQ6OnN0cmluZyBvcHRpb25fZmxhZyA9Ci0gICAgICAiQ01BS0VfIiArIGxhbmcgKyAqc3RkSXQgKyAiXyIgKyB0eXBlICsgIl9DT01QSUxFX09QVElPTiI7Ci0KLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgb3B0ID0KLSAgICAgIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXRSZXF1aXJlZERlZmluaXRpb24ob3B0aW9uX2ZsYWcpOwotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRWZWMgPSBjbUV4cGFuZGVkTGlzdChvcHQpOwotICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBvcHRWZWMpIHsKLSAgICAgIHRoaXMtPkFwcGVuZEZsYWdFc2NhcGUoZmxhZ3MsIGkpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBUaGUgc3RhbmRhcmQgcmVxdWVzdGVkIGlzIGF0IGxlYXN0IGFzIG5ldyBhcyB0aGUgY29tcGlsZXIncyBkZWZhdWx0LAotICAvLyBhbmQgdGhlIHN0YW5kYXJkIHJlcXVlc3QgaXMgbm90IHJlcXVpcmVkLiAgRGVjYXkgdG8gdGhlIG5ld2VzdCBzdGFuZGFyZAotICAvLyBmb3Igd2hpY2ggYSBmbGFnIGlzIGRlZmluZWQuCi0gIGZvciAoOyBzdGRJdCA8IGRlZmF1bHRTdGRJdDsgKytzdGRJdCkgewotICAgIHN0ZDo6c3RyaW5nIG9wdGlvbl9mbGFnID0KLSAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAqc3RkSXQsICJfIiwgdHlwZSwgIl9DT01QSUxFX09QVElPTiIpOwotCi0gICAgaWYgKGNvbnN0IGNoYXIqIG9wdCA9Ci0gICAgICAgICAgdGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24ob3B0aW9uX2ZsYWcpKSB7Ci0gICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0VmVjID0gY21FeHBhbmRlZExpc3Qob3B0KTsKLSAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGkgOiBvcHRWZWMpIHsKLSAgICAgICAgdGhpcy0+QXBwZW5kRmxhZ0VzY2FwZShmbGFncywgaSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm47Ci0gICAgfQogICB9CiB9CiAKQEAgLTIwNzksNyArMjE4Myw3IEBACiAgIH0KICAgc3RkOjpzdHJpbmcgZmxhZ0RlZmluZSA9IGxhbmcgKyAiX1ZJU0lCSUxJVFlfUFJFU0VUIjsKIAotICBjb25zdCBjaGFyKiBwcm9wID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShmbGFnRGVmaW5lKTsKKyAgY21Qcm9wIHByb3AgPSB0YXJnZXQtPkdldFByb3BlcnR5KGZsYWdEZWZpbmUpOwogICBpZiAoIXByb3ApIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTIwODcsMTcgKzIxOTEsMTcgQEAKICAgICAqd2FybkNNUDAwNjMgKz0gIiAgIiArIGZsYWdEZWZpbmUgKyAiXG4iOwogICAgIHJldHVybjsKICAgfQotICBpZiAoc3RyY21wKHByb3AsICJoaWRkZW4iKSAhPSAwICYmIHN0cmNtcChwcm9wLCAiZGVmYXVsdCIpICE9IDAgJiYKLSAgICAgIHN0cmNtcChwcm9wLCAicHJvdGVjdGVkIikgIT0gMCAmJiBzdHJjbXAocHJvcCwgImludGVybmFsIikgIT0gMCkgeworICBpZiAoKCpwcm9wICE9ICJoaWRkZW4iKSAmJiAoKnByb3AgIT0gImRlZmF1bHQiKSAmJiAoKnByb3AgIT0gInByb3RlY3RlZCIpICYmCisgICAgICAoKnByb3AgIT0gImludGVybmFsIikpIHsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKLSAgICBlIDw8ICJUYXJnZXQgIiA8PCB0YXJnZXQtPkdldE5hbWUoKSA8PCAiIHVzZXMgdW5zdXBwb3J0ZWQgdmFsdWUgXCIiIDw8IHByb3AKLSAgICAgIDw8ICJcIiBmb3IgIiA8PCBmbGFnRGVmaW5lIDw8ICIuIgorICAgIGUgPDwgIlRhcmdldCAiIDw8IHRhcmdldC0+R2V0TmFtZSgpIDw8ICIgdXNlcyB1bnN1cHBvcnRlZCB2YWx1ZSBcIiIKKyAgICAgIDw8ICpwcm9wIDw8ICJcIiBmb3IgIiA8PCBmbGFnRGVmaW5lIDw8ICIuIgogICAgICAgPDwgIiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6IGRlZmF1bHQsIGhpZGRlbiwgcHJvdGVjdGVkLCBhbmQgIgogICAgICAgICAgImludGVybmFsLiI7CiAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoZS5zdHIoKSk7CiAgICAgcmV0dXJuOwogICB9Ci0gIHN0ZDo6c3RyaW5nIG9wdGlvbiA9IHN0ZDo6c3RyaW5nKG9wdCkgKyBwcm9wOworICBzdGQ6OnN0cmluZyBvcHRpb24gPSBvcHQgKyAqcHJvcDsKICAgbGctPkFwcGVuZEZsYWdzKGZsYWdzLCBvcHRpb24pOwogfQogCkBAIC0yMjE1LDcgKzIzMTksOCBAQAogICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwogICAgICAgICAgIGUgPDwgIlZhcmlhYmxlICIgPDwgZmxhZ3NWYXIKICAgICAgICAgICAgIDw8ICIgaGFzIGJlZW4gbW9kaWZpZWQuIENNYWtlICIKLSAgICAgICAgICAgICAgICJ3aWxsIGlnbm9yZSB0aGUgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSB0YXJnZXQgcHJvcGVydHkgZm9yICIKKyAgICAgICAgICAgICAgICJ3aWxsIGlnbm9yZSB0aGUgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSB0YXJnZXQgcHJvcGVydHkgIgorICAgICAgICAgICAgICAgImZvciAiCiAgICAgICAgICAgICAgICAic2hhcmVkIGxpYnJhcmllcyBhbmQgd2lsbCB1c2UgdGhlICIKICAgICAgICAgICAgIDw8IGZsYWdzVmFyCiAgICAgICAgICAgICA8PCAiIHZhcmlhYmxlICIKQEAgLTIyNzcsNyArMjM4Miw5IEBACiB2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkFwcGVuZEZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5ld0ZsYWdzKSBjb25zdAogewotICBpZiAoIW5ld0ZsYWdzLmVtcHR5KCkpIHsKKyAgYm9vbCBhbGxTcGFjZXMgPSBzdGQ6OmFsbF9vZihuZXdGbGFncy5iZWdpbigpLCBuZXdGbGFncy5lbmQoKSwgY21Jc1NwYWNlKTsKKworICBpZiAoIW5ld0ZsYWdzLmVtcHR5KCkgJiYgIWFsbFNwYWNlcykgewogICAgIGlmICghZmxhZ3MuZW1wdHkoKSkgewogICAgICAgZmxhZ3MgKz0gIiAiOwogICAgIH0KQEAgLTIyOTYsMTc4ICsyNDAzLDM4MiBAQAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBcHBlbmRGbGFnRXNjYXBlKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmF3RmxhZykgY29uc3QKIHsKLSAgdGhpcy0+QXBwZW5kRmxhZ3MoZmxhZ3MsIHRoaXMtPkVzY2FwZUZvclNoZWxsKHJhd0ZsYWcpKTsKKyAgdGhpcy0+QXBwZW5kRmxhZ3MoCisgICAgZmxhZ3MsCisgICAgdGhpcy0+RXNjYXBlRm9yU2hlbGwocmF3RmxhZywgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdGhpcy0+SXNOaW5qYU11bHRpKCkpKTsKIH0KIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpBZGRQY2hEZXBlbmRlbmNpZXMoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKIHsKLSAgLy8gRklYTUU6IEhhbmRsZSBhbGwgY29uZmlndXJhdGlvbnMgaW4gbXVsdGktY29uZmlnIGdlbmVyYXRvcnMuCi0gIHN0ZDo6c3RyaW5nIGNvbmZpZzsKLSAgaWYgKCF0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSB7Ci0gICAgY29uZmlnID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIik7Ci0gIH0KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3NMaXN0ID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcpOwogCi0gIC8vIEZJWE1FOiBSZWZhY3RvciBjb2xsZWN0aW9uIG9mIHNvdXJjZXMgdG8gbm90IGV2YWx1YXRlIG9iamVjdCBsaWJyYXJpZXMuCi0gIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IHNvdXJjZXM7Ci0gIHRhcmdldC0+R2V0U291cmNlRmlsZXMoc291cmNlcywgY29uZmlnKTsKKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnIDogY29uZmlnc0xpc3QpIHsKKyAgICAvLyBGSVhNRTogUmVmYWN0b3IgY29sbGVjdGlvbiBvZiBzb3VyY2VzIHRvIG5vdCBldmFsdWF0ZSBvYmplY3QKKyAgICAvLyBsaWJyYXJpZXMuCisgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKKyAgICB0YXJnZXQtPkdldFNvdXJjZUZpbGVzKHNvdXJjZXMsIGNvbmZpZyk7CiAKLSAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgbGFuZyA6IHsgIkMiLCAiQ1hYIiwgIk9CSkMiLCAiT0JKQ1hYIiB9KSB7Ci0gICAgYXV0byBsYW5nU291cmNlcyA9Ci0gICAgICBzdGQ6OmNvdW50X2lmKHNvdXJjZXMuYmVnaW4oKSwgc291cmNlcy5lbmQoKSwgW2xhbmddKGNtU291cmNlRmlsZSogc2YpIHsKLSAgICAgICAgcmV0dXJuIGxhbmcgPT0gc2YtPkdldExhbmd1YWdlKCkgJiYKLSAgICAgICAgICAhc2YtPkdldFByb3BlcnR5KCJTS0lQX1BSRUNPTVBJTEVfSEVBREVSUyIpOwotICAgICAgfSk7Ci0gICAgaWYgKGxhbmdTb3VyY2VzID09IDApIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KKyAgICBjb25zdCBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpOwogCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoU291cmNlID0gdGFyZ2V0LT5HZXRQY2hTb3VyY2UoY29uZmlnLCBsYW5nKTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0YXJnZXQtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmcpOwotCi0gICAgaWYgKHBjaFNvdXJjZS5lbXB0eSgpIHx8IHBjaEhlYWRlci5lbXB0eSgpKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hFeHRlbnNpb24gPQotICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9QQ0hfRVhURU5TSU9OIik7Ci0KLSAgICBpZiAocGNoRXh0ZW5zaW9uLmVtcHR5KCkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIHBjaFJldXNlRnJvbSA9Ci0gICAgICB0YXJnZXQtPkdldFByb3BlcnR5KCJQUkVDT01QSUxFX0hFQURFUlNfUkVVU0VfRlJPTSIpOwotCi0gICAgYXV0byBwY2hfc2YgPSB0aGlzLT5NYWtlZmlsZS0+R2V0T3JDcmVhdGVTb3VyY2UoCi0gICAgICBwY2hTb3VyY2UsIGZhbHNlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKLQotICAgIGlmICghdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzWGNvZGUoKSkgewotICAgICAgaWYgKCFwY2hSZXVzZUZyb20pIHsKLSAgICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UocGNoU291cmNlLCB0cnVlKTsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nIDogeyAiQyIsICJDWFgiLCAiT0JKQyIsICJPQkpDWFgiIH0pIHsKKyAgICAgIGF1dG8gbGFuZ1NvdXJjZXMgPSBzdGQ6OmNvdW50X2lmKAorICAgICAgICBzb3VyY2VzLmJlZ2luKCksIHNvdXJjZXMuZW5kKCksIFtsYW5nXShjbVNvdXJjZUZpbGUqIHNmKSB7CisgICAgICAgICAgcmV0dXJuIGxhbmcgPT0gc2YtPkdldExhbmd1YWdlKCkgJiYKKyAgICAgICAgICAgICFzZi0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIik7CisgICAgICAgIH0pOworICAgICAgaWYgKGxhbmdTb3VyY2VzID09IDApIHsKKyAgICAgICAgY29udGludWU7CiAgICAgICB9CiAKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEZpbGUgPSB0YXJnZXQtPkdldFBjaEZpbGUoY29uZmlnLCBsYW5nKTsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmNoaXRlY3R1cmVzOworICAgICAgaWYgKCF0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNYY29kZSgpKSB7CisgICAgICAgIHRhcmdldC0+R2V0QXBwbGVBcmNocyhjb25maWcsIGFyY2hpdGVjdHVyZXMpOworICAgICAgfQorICAgICAgaWYgKGFyY2hpdGVjdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBhcmNoaXRlY3R1cmVzLmVtcGxhY2VfYmFjaygpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgdXNlTXVsdGlBcmNoUGNoOworICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoIDogYXJjaGl0ZWN0dXJlcykgeworICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaEhlYWRlciA9CisgICAgICAgICAgICB0YXJnZXQtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmcsIGFyY2gpOworICAgICAgICAgIGlmICghcGNoSGVhZGVyLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHVzZU11bHRpQXJjaFBjaCA9IGNtU3RyQ2F0KHVzZU11bHRpQXJjaFBjaCwgIjstWGFyY2hfIiwgYXJjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7LWluY2x1ZGUiLCBwY2hIZWFkZXIpOworICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAvLyBFeGNsdWRlIHRoZSBwY2ggZmlsZXMgZnJvbSBsaW5raW5nCi0gICAgICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX0xJTktfUENIIikpIHsKLSAgICAgICAgaWYgKCFwY2hSZXVzZUZyb20pIHsKLSAgICAgICAgICBwY2hfc2YtPlNldFByb3BlcnR5KCJPQkpFQ1RfT1VUUFVUUyIsIHBjaEZpbGUuY19zdHIoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYXV0byByZXVzZVRhcmdldCA9Ci0gICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkZpbmRHZW5lcmF0b3JUYXJnZXQocGNoUmV1c2VGcm9tKTsKKyAgICAgICAgaWYgKCF1c2VNdWx0aUFyY2hQY2guZW1wdHkoKSkgeworICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5TZXRQcm9wZXJ0eSgKKyAgICAgICAgICAgIGNtU3RyQ2F0KGxhbmcsICJfQ09NUElMRV9PUFRJT05TX1VTRV9QQ0giKSwgdXNlTXVsdGlBcmNoUGNoKTsKKyAgICAgICAgfQorICAgICAgfQogCi0gICAgICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9QQ0hfQ09QWV9DT01QSUxFX1BEQiIpKSB7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoIDogYXJjaGl0ZWN0dXJlcykgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPSB0YXJnZXQtPkdldFBjaFNvdXJjZShjb25maWcsIGxhbmcsIGFyY2gpOworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwY2hIZWFkZXIgPSB0YXJnZXQtPkdldFBjaEhlYWRlcihjb25maWcsIGxhbmcsIGFyY2gpOwogCi0gICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwZGJfcHJlZml4ID0KLSAgICAgICAgICAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKQotICAgICAgICAgICAgICA/IGNtU3RyQ2F0KHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0Q01ha2VDRkdJbnREaXIoKSwgIi8iKQotICAgICAgICAgICAgICA6ICIiOworICAgICAgICBpZiAocGNoU291cmNlLmVtcHR5KCkgfHwgcGNoSGVhZGVyLmVtcHR5KCkpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyB0YXJnZXRfY29tcGlsZV9wZGJfZGlyID0gY21TdHJDYXQoCi0gICAgICAgICAgICAgIHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiLyIsCi0gICAgICAgICAgICAgIHRhcmdldC0+R2V0TmFtZSgpLCAiLmRpci8iKTsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRXh0ZW5zaW9uID0KKyAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX1BDSF9FWFRFTlNJT04iKTsKIAotICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgY29weV9zY3JpcHQgPQotICAgICAgICAgICAgICBjbVN0ckNhdCh0YXJnZXRfY29tcGlsZV9wZGJfZGlyLCAiY29weV9pZGJfcGRiLmNtYWtlIik7Ci0gICAgICAgICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gZmlsZShjb3B5X3NjcmlwdCk7CisgICAgICAgIGlmIChwY2hFeHRlbnNpb24uZW1wdHkoKSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGZpbGUgPDwgIiMgQ01ha2UgZ2VuZXJhdGVkIGZpbGVcbiI7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gZXh0ZW5zaW9uIDogeyAiLnBkYiIsICIuaWRiIiB9KSB7Ci0gICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZyb21fZmlsZSA9IGNtU3RyQ2F0KAotICAgICAgICAgICAgICAgIHJldXNlVGFyZ2V0LT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCi0gICAgICAgICAgICAgICAgIi8iLCBwY2hSZXVzZUZyb20sICIuZGlyLyR7UERCX1BSRUZJWH0iLCBwY2hSZXVzZUZyb20sCi0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uKTsKKyAgICAgICAgY21Qcm9wIFJldXNlRnJvbSA9CisgICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00iKTsKIAotICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyB0b19kaXIgPSBjbVN0ckNhdCgKLSAgICAgICAgICAgICAgICB0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi8iLAotICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0TmFtZSgpLCAiLmRpci8ke1BEQl9QUkVGSVh9Iik7CisgICAgICAgIGF1dG8gcGNoX3NmID0gdGhpcy0+TWFrZWZpbGUtPkdldE9yQ3JlYXRlU291cmNlKAorICAgICAgICAgIHBjaFNvdXJjZSwgZmFsc2UsIGNtU291cmNlRmlsZUxvY2F0aW9uS2luZDo6S25vd24pOwogCi0gICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRvX2ZpbGUgPQotICAgICAgICAgICAgICAgIGNtU3RyQ2F0KHRvX2RpciwgcGNoUmV1c2VGcm9tLCBleHRlbnNpb24pOwotCi0gICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGRlc3RfZmlsZSA9IHRvX2ZpbGU7Ci0KLSAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcHJlZml4ID0gdGFyZ2V0LT5HZXRTYWZlUHJvcGVydHkoIlBSRUZJWCIpOwotICAgICAgICAgICAgICBpZiAoIXByZWZpeC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZGVzdF9maWxlID0gY21TdHJDYXQodG9fZGlyLCBwcmVmaXgsIHBjaFJldXNlRnJvbSwgZXh0ZW5zaW9uKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGZpbGUgPDwgImlmIChFWElTVFMgXCIiIDw8IGZyb21fZmlsZSA8PCAiXCIgQU5EIFwiIiA8PCBmcm9tX2ZpbGUKLSAgICAgICAgICAgICAgICAgICA8PCAiXCIgSVNfTkVXRVJfVEhBTiBcIiIgPDwgZGVzdF9maWxlIDw8ICJcIilcbiI7Ci0gICAgICAgICAgICAgIGZpbGUgPDwgIiAgZmlsZShDT1BZIFwiIiA8PCBmcm9tX2ZpbGUgPDwgIlwiIgotICAgICAgICAgICAgICAgICAgIDw8ICIgREVTVElOQVRJT04gXCIiIDw8IHRvX2RpciA8PCAiXCIpXG4iOwotICAgICAgICAgICAgICBpZiAoIXByZWZpeC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZmlsZSA8PCAiICBmaWxlKFJFTU9WRSBcIiIgPDwgZGVzdF9maWxlIDw8ICJcIilcbiI7Ci0gICAgICAgICAgICAgICAgZmlsZSA8PCAiICBmaWxlKFJFTkFNRSBcIiIgPDwgdG9fZmlsZSA8PCAiXCIgXCIiIDw8IGRlc3RfZmlsZQotICAgICAgICAgICAgICAgICAgICAgPDwgIlwiKVxuIjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBmaWxlIDw8ICJlbmRpZigpXG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXM7Ci0gICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lIGN1cnJlbnRMaW5lOwotICAgICAgICAgICAgY3VycmVudExpbmUucHVzaF9iYWNrKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lLnB1c2hfYmFjayhjbVN0ckNhdCgiLURQREJfUFJFRklYPSIsIHBkYl9wcmVmaXgpKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lLnB1c2hfYmFjaygiLVAiKTsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lLnB1c2hfYmFjayhjb3B5X3NjcmlwdCk7Ci0gICAgICAgICAgICBjb21tYW5kTGluZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShjdXJyZW50TGluZSkpOwotCi0gICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBub19tYWluX2RlcGVuZGVuY3k7Ci0gICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwczsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5vX21lc3NhZ2UgPSAiIjsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5vX2N1cnJlbnRfZGlyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19ieXByb2R1Y3RzOwotCi0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3V0cHV0czsKLSAgICAgICAgICAgIG91dHB1dHMucHVzaF9iYWNrKGNtU3RyQ2F0KHRhcmdldF9jb21waWxlX3BkYl9kaXIsIHBkYl9wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2hSZXVzZUZyb20sICIucGRiIikpOwotCi0gICAgICAgICAgICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKSkgewotICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAotICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0TmFtZSgpLCBvdXRwdXRzLCBub19kZXBzLCBjb21tYW5kTGluZXMsCi0gICAgICAgICAgICAgICAgY21DdXN0b21Db21tYW5kVHlwZTo6UFJFX0JVSUxELCBub19tZXNzYWdlLCBub19jdXJyZW50X2Rpcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBjbUltcGxpY2l0RGVwZW5kc0xpc3Qgbm9faW1wbGljaXRfZGVwZW5kczsKLSAgICAgICAgICAgICAgY21Tb3VyY2VGaWxlKiBjb3B5X3J1bGUgPQotICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCi0gICAgICAgICAgICAgICAgICBvdXRwdXRzLCBub19ieXByb2R1Y3RzLCBub19kZXBzLCBub19tYWluX2RlcGVuZGVuY3ksCi0gICAgICAgICAgICAgICAgICBub19pbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsIG5vX21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICBub19jdXJyZW50X2Rpcik7Ci0KLSAgICAgICAgICAgICAgaWYgKGNvcHlfcnVsZSkgewotICAgICAgICAgICAgICAgIHRhcmdldC0+QWRkU291cmNlKGNvcHlfcnVsZS0+UmVzb2x2ZUZ1bGxQYXRoKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2NvbXBpbGVfcGRiX2Rpci5jX3N0cigpKTsKKyAgICAgICAgaWYgKCF0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNYY29kZSgpKSB7CisgICAgICAgICAgaWYgKCFSZXVzZUZyb20pIHsKKyAgICAgICAgICAgIHRhcmdldC0+QWRkU291cmNlKHBjaFNvdXJjZSwgdHJ1ZSk7CiAgICAgICAgICAgfQogCi0gICAgICAgICAgc3RkOjpzdHJpbmcgcGNoU291cmNlT2JqID0KLSAgICAgICAgICAgIHJldXNlVGFyZ2V0LT5HZXRQY2hGaWxlT2JqZWN0KGNvbmZpZywgbGFuZyk7CisgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoRmlsZSA9IHRhcmdldC0+R2V0UGNoRmlsZShjb25maWcsIGxhbmcsIGFyY2gpOwogCi0gICAgICAgICAgLy8gTGluayB0byB0aGUgcGNoIG9iamVjdCBmaWxlCi0gICAgICAgICAgdGFyZ2V0LT5UYXJnZXQtPkFwcGVuZFByb3BlcnR5KAotICAgICAgICAgICAgIkxJTktfRkxBR1MiLAotICAgICAgICAgICAgY21TdHJDYXQoIiAiLCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQocGNoU291cmNlT2JqLCBTSEVMTCkpCi0gICAgICAgICAgICAgIC5jX3N0cigpLAotICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgLy8gRXhjbHVkZSB0aGUgcGNoIGZpbGVzIGZyb20gbGlua2luZworICAgICAgICAgIGlmICh0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfTElOS19QQ0giKSkgeworICAgICAgICAgICAgaWYgKCFSZXVzZUZyb20pIHsKKyAgICAgICAgICAgICAgcGNoX3NmLT5BcHBlbmRQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAiT0JKRUNUX09VVFBVVFMiLAorICAgICAgICAgICAgICAgIGNtU3RyQ2F0KCIkPCQ8Q09ORklHOiIsIGNvbmZpZywgIj46IiwgcGNoRmlsZSwgIj4iKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBhdXRvIHJldXNlVGFyZ2V0ID0KKyAgICAgICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkZpbmRHZW5lcmF0b3JUYXJnZXQoKlJldXNlRnJvbSk7CisKKyAgICAgICAgICAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9QQ0hfQ09QWV9DT01QSUxFX1BEQiIpKSB7CisKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjb21waWxlcklkID0KKyAgICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKKyAgICAgICAgICAgICAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfQ09NUElMRVJfSUQiKSk7CisKKyAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjb21waWxlclZlcnNpb24gPQorICAgICAgICAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKAorICAgICAgICAgICAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9DT01QSUxFUl9WRVJTSU9OIikpOworCisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbGFuZ0ZsYWdzID0KKyAgICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKKyAgICAgICAgICAgICAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfRkxBR1NfIiwgY29uZmlnVXBwZXIpKTsKKworICAgICAgICAgICAgICAgIC8vIE1TVkMgMjAwOCBpcyBwcm9kdWNpbmcgYm90aCAucGRiIGFuZCAuaWRiIGZpbGVzIHdpdGggL1ppLgorICAgICAgICAgICAgICAgIGlmICgobGFuZ0ZsYWdzLmZpbmQoIi9aSSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zIHx8CisgICAgICAgICAgICAgICAgICAgICBsYW5nRmxhZ3MuZmluZCgiLVpJIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHx8CisgICAgICAgICAgICAgICAgICAgIChjbVN5c3RlbVRvb2xzOjpWZXJzaW9uQ29tcGFyZShjbVN5c3RlbVRvb2xzOjpPUF9MRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJWZXJzaW9uLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTYuMCIpICYmCisgICAgICAgICAgICAgICAgICAgICBjb21waWxlcklkID09ICJNU1ZDIikpIHsKKyAgICAgICAgICAgICAgICAgIENvcHlQY2hDb21waWxlUGRiKGNvbmZpZywgdGFyZ2V0LCAqUmV1c2VGcm9tLCByZXVzZVRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIi5wZGIiLCAiLmlkYiIgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobGFuZ0ZsYWdzLmZpbmQoIi9aaSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ0ZsYWdzLmZpbmQoIi1aaSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSkgeworICAgICAgICAgICAgICAgICAgQ29weVBjaENvbXBpbGVQZGIoY29uZmlnLCB0YXJnZXQsICpSZXVzZUZyb20sIHJldXNlVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAiLnBkYiIgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKHJldXNlVGFyZ2V0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgeworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHBjaFNvdXJjZU9iaiA9CisgICAgICAgICAgICAgICAgICByZXVzZVRhcmdldC0+R2V0UGNoRmlsZU9iamVjdChjb25maWcsIGxhbmcsIGFyY2gpOworCisgICAgICAgICAgICAgICAgLy8gTGluayB0byB0aGUgcGNoIG9iamVjdCBmaWxlCisgICAgICAgICAgICAgICAgdGFyZ2V0LT5UYXJnZXQtPkFwcGVuZFByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgY21TdHJDYXQoIkxJTktfRkxBR1NfIiwgY29uZmlnVXBwZXIpLAorICAgICAgICAgICAgICAgICAgY21TdHJDYXQoIiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHBjaFNvdXJjZU9iaiwgU0hFTEwpKSwKKyAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBjaF9zZi0+U2V0UHJvcGVydHkoIlBDSF9FWFRFTlNJT04iLCBwY2hFeHRlbnNpb24uY19zdHIoKSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgLy8gQWRkIHBjaEhlYWRlciB0byBzb3VyY2UgZmlsZXMsIHdoaWNoIHdpbGwKKyAgICAgICAgICAvLyBiZSBncm91cGVkIGFzICJQcmVjb21waWxlIEhlYWRlciBGaWxlIgorICAgICAgICAgIGF1dG8gcGNoSGVhZGVyX3NmID0gdGhpcy0+TWFrZWZpbGUtPkdldE9yQ3JlYXRlU291cmNlKAorICAgICAgICAgICAgcGNoSGVhZGVyLCB0cnVlLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKKyAgICAgICAgICBzdGQ6OnN0cmluZyBlcnI7CisgICAgICAgICAgcGNoSGVhZGVyX3NmLT5SZXNvbHZlRnVsbFBhdGgoJmVycik7CisKKyAgICAgICAgICAvLyBUaGUgcGNoIGZpbGUgaXMgZ2VuZXJhdGVkLCBidXQgbWFyayBpdCBhcyBub3QgZ2VuZXJhdGVkCisgICAgICAgICAgLy8gc28gdGhhdCBhIGNsZWFuIG9wZXJhdGlvbiB3aWxsIG5vdCByZW1vdmUgaXQgZnJvbSBkaXNrCisgICAgICAgICAgcGNoSGVhZGVyX3NmLT5TZXRQcm9wZXJ0eSgiR0VORVJBVEVEIiwgIjAiKTsKKworICAgICAgICAgIHRhcmdldC0+QWRkU291cmNlKHBjaEhlYWRlcik7CiAgICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBjaF9zZi0+U2V0UHJvcGVydHkoIlBDSF9FWFRFTlNJT04iLCBwY2hFeHRlbnNpb24uY19zdHIoKSk7CiAgICAgICB9Ci0KLSAgICAgIC8vIEFkZCBwY2hIZWFkZXIgdG8gc291cmNlIGZpbGVzLCB3aGljaCB3aWxsCi0gICAgICAvLyBiZSBncm91cGVkIGFzICJQcmVjb21waWxlIEhlYWRlciBGaWxlIgotICAgICAgYXV0byBwY2hIZWFkZXJfc2YgPSB0aGlzLT5NYWtlZmlsZS0+R2V0T3JDcmVhdGVTb3VyY2UoCi0gICAgICAgIHBjaEhlYWRlciwgZmFsc2UsIGNtU291cmNlRmlsZUxvY2F0aW9uS2luZDo6S25vd24pOwotICAgICAgc3RkOjpzdHJpbmcgZXJyOwotICAgICAgcGNoSGVhZGVyX3NmLT5SZXNvbHZlRnVsbFBhdGgoJmVycik7Ci0gICAgICB0YXJnZXQtPkFkZFNvdXJjZShwY2hIZWFkZXIpOwogICAgIH0KICAgfQogfQogCit2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkNvcHlQY2hDb21waWxlUGRiKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAorICBjb25zdCBzdGQ6OnN0cmluZyYgUmV1c2VGcm9tLCBjbUdlbmVyYXRvclRhcmdldCogcmV1c2VUYXJnZXQsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZXh0ZW5zaW9ucykKK3sKKyAgY29uc3Qgc3RkOjpzdHJpbmcgcGRiX3ByZWZpeCA9CisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKSA/IGNtU3RyQ2F0KGNvbmZpZywgIi8iKSA6ICIiOworCisgIGNvbnN0IHN0ZDo6c3RyaW5nIHRhcmdldF9jb21waWxlX3BkYl9kaXIgPQorICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiLyIsCisgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksICIuZGlyLyIpOworCisgIGNvbnN0IHN0ZDo6c3RyaW5nIGNvcHlfc2NyaXB0ID0KKyAgICBjbVN0ckNhdCh0YXJnZXRfY29tcGlsZV9wZGJfZGlyLCAiY29weV9pZGJfcGRiLmNtYWtlIik7CisgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmaWxlKGNvcHlfc2NyaXB0KTsKKworICBmaWxlIDw8ICIjIENNYWtlIGdlbmVyYXRlZCBmaWxlXG4iOworCisgIGZpbGUgPDwgIiMgVGhlIGNvbXBpbGVyIGdlbmVyYXRlZCBwZGIgZmlsZSBuZWVkcyB0byBiZSB3cml0dGVuIHRvIGRpc2tcbiIKKyAgICAgICA8PCAiIyBieSBtc3BkYnNydi4gVGhlIGZvcmVhY2ggcmV0cnkgbG9vcCBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlXG4iCisgICAgICAgPDwgIiMgdGhlIHBkYiBmaWxlIGlzIHJlYWR5IHRvIGJlIGNvcGllZC5cblxuIjsKKworICBmb3IgKGF1dG8gY29uc3QmIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnMpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBmcm9tX2ZpbGUgPQorICAgICAgY21TdHJDYXQocmV1c2VUYXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKKyAgICAgICAgICAgICAgICIvIiwgUmV1c2VGcm9tLCAiLmRpci8ke1BEQl9QUkVGSVh9IiwgUmV1c2VGcm9tLCBleHRlbnNpb24pOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgdG9fZGlyID0KKyAgICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiLyIsCisgICAgICAgICAgICAgICB0YXJnZXQtPkdldE5hbWUoKSwgIi5kaXIvJHtQREJfUFJFRklYfSIpOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgdG9fZmlsZSA9IGNtU3RyQ2F0KHRvX2RpciwgUmV1c2VGcm9tLCBleHRlbnNpb24pOworCisgICAgc3RkOjpzdHJpbmcgZGVzdF9maWxlID0gdG9fZmlsZTsKKworICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcmVmaXggPSB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiUFJFRklYIik7CisgICAgaWYgKCFwcmVmaXguZW1wdHkoKSkgeworICAgICAgZGVzdF9maWxlID0gY21TdHJDYXQodG9fZGlyLCBwcmVmaXgsIFJldXNlRnJvbSwgZXh0ZW5zaW9uKTsKKyAgICB9CisKKyAgICBmaWxlIDw8ICJmb3JlYWNoKHJldHJ5IFJBTkdFIDEgMzApXG4iOworICAgIGZpbGUgPDwgIiAgaWYgKEVYSVNUUyBcIiIgPDwgZnJvbV9maWxlIDw8ICJcIiBBTkQgXCIiIDw8IGZyb21fZmlsZQorICAgICAgICAgPDwgIiAgXCIgSVNfTkVXRVJfVEhBTiBcIiIgPDwgZGVzdF9maWxlIDw8ICJcIilcbiI7CisgICAgZmlsZSA8PCAiICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSI7CisgICAgZmlsZSA8PCAiIFwiIiA8PCBmcm9tX2ZpbGUgPDwgIlwiIgorICAgICAgICAgPDwgIiBcIiIgPDwgdG9fZGlyIDw8ICJcIiBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0ICIKKyAgICAgICAgIDw8ICIgRVJST1JfUVVJRVQpXG4iOworICAgIGZpbGUgPDwgIiAgICBpZiAoTk9UIHJlc3VsdCBFUVVBTCAwKVxuIgorICAgICAgICAgPDwgIiAgICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0iCisgICAgICAgICA8PCAiIC1FIHNsZWVwIDEpXG4iCisgICAgICAgICA8PCAiICAgIGVsc2UoKVxuIjsKKyAgICBpZiAoIXByZWZpeC5lbXB0eSgpKSB7CisgICAgICBmaWxlIDw8ICIgIGZpbGUoUkVNT1ZFIFwiIiA8PCBkZXN0X2ZpbGUgPDwgIlwiKVxuIjsKKyAgICAgIGZpbGUgPDwgIiAgZmlsZShSRU5BTUUgXCIiIDw8IHRvX2ZpbGUgPDwgIlwiIFwiIiA8PCBkZXN0X2ZpbGUgPDwgIlwiKVxuIjsKKyAgICB9CisgICAgZmlsZSA8PCAiICAgICAgYnJlYWsoKVxuIgorICAgICAgICAgPDwgIiAgICBlbmRpZigpXG4iOworICAgIGZpbGUgPDwgIiAgZWxzZWlmKE5PVCBFWElTVFMgXCIiIDw8IGZyb21fZmlsZSA8PCAiXCIpXG4iCisgICAgICAgICA8PCAiICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0iCisgICAgICAgICA8PCAiIC1FIHNsZWVwIDEpXG4iCisgICAgICAgICA8PCAiICBlbmRpZigpXG4iOworICAgIGZpbGUgPDwgImVuZGZvcmVhY2goKVxuIjsKKyAgfQorCisgIGJvb2wgc3RkUGlwZXNVVEY4ID0gdHJ1ZTsKKworICBhdXRvIGNvbmZpZ0dlbmV4ID0gWyZdKGNtOjpzdHJpbmdfdmlldyBleHByKSAtPiBzdGQ6OnN0cmluZyB7CisgICAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc1Zpc3VhbFN0dWRpbygpKSB7CisgICAgICByZXR1cm4gY21TdHJDYXQoIiQ8JDxDT05GSUc6IiwgY29uZmlnLCAiPjoiLCBleHByLCAiPiIpOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpzdHJpbmcoZXhwcik7CisgIH07CisKKyAgY21DdXN0b21Db21tYW5kTGluZXMgY29tbWFuZExpbmVzID0gY21NYWtlU2luZ2xlQ29tbWFuZExpbmUoCisgICAgeyBjb25maWdHZW5leChjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSksCisgICAgICBjb25maWdHZW5leChjbVN0ckNhdCgiLURQREJfUFJFRklYPSIsIHBkYl9wcmVmaXgpKSwgY29uZmlnR2VuZXgoIi1QIiksCisgICAgICBjb25maWdHZW5leChjb3B5X3NjcmlwdCkgfSk7CisKKyAgY29uc3Qgc3RkOjpzdHJpbmcgbm9fbWFpbl9kZXBlbmRlbmN5OworICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwczsKKyAgY29uc3QgY2hhciogbm9fbWVzc2FnZSA9ICIiOworICBjb25zdCBjaGFyKiBub19jdXJyZW50X2RpciA9IG51bGxwdHI7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19ieXByb2R1Y3RzOworCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvdXRwdXRzOworICBvdXRwdXRzLnB1c2hfYmFjaygKKyAgICBjbVN0ckNhdCh0YXJnZXRfY29tcGlsZV9wZGJfZGlyLCBwZGJfcHJlZml4LCBSZXVzZUZyb20sICIucGRiIikpOworCisgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNWaXN1YWxTdHVkaW8oKSkgeworICAgIHRoaXMtPkFkZEN1c3RvbUNvbW1hbmRUb1RhcmdldCgKKyAgICAgIHRhcmdldC0+R2V0TmFtZSgpLCBvdXRwdXRzLCBub19kZXBzLCBjb21tYW5kTGluZXMsCisgICAgICBjbUN1c3RvbUNvbW1hbmRUeXBlOjpQUkVfQlVJTEQsIG5vX21lc3NhZ2UsIG5vX2N1cnJlbnRfZGlyLCB0cnVlLCBmYWxzZSwKKyAgICAgICIiLCAiIiwgZmFsc2UsIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzOjpSZWplY3QsIHN0ZFBpcGVzVVRGOCk7CisgIH0gZWxzZSB7CisgICAgY21JbXBsaWNpdERlcGVuZHNMaXN0IG5vX2ltcGxpY2l0X2RlcGVuZHM7CisgICAgY21Tb3VyY2VGaWxlKiBjb3B5X3J1bGUgPSB0aGlzLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgICBvdXRwdXRzLCBub19ieXByb2R1Y3RzLCBub19kZXBzLCBub19tYWluX2RlcGVuZGVuY3ksIG5vX2ltcGxpY2l0X2RlcGVuZHMsCisgICAgICBjb21tYW5kTGluZXMsIG5vX21lc3NhZ2UsIG5vX2N1cnJlbnRfZGlyLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAiIiwKKyAgICAgICIiLCBzdGRQaXBlc1VURjgpOworCisgICAgaWYgKGNvcHlfcnVsZSkgeworICAgICAgdGFyZ2V0LT5BZGRTb3VyY2UoY29weV9ydWxlLT5SZXNvbHZlRnVsbFBhdGgoKSk7CisgICAgfQorICB9CisKKyAgdGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJDT01QSUxFX1BEQl9PVVRQVVRfRElSRUNUT1JZIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9jb21waWxlX3BkYl9kaXIpOworfQorCituYW1lc3BhY2UgeworCitpbmxpbmUgdm9pZCBSZWdpc3RlclVuaXR5U291cmNlcyhjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBjbVNvdXJjZUZpbGUqIHNmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVuYW1lKQoreworICB0YXJnZXQtPkFkZFNvdXJjZUZpbGVUb1VuaXR5QmF0Y2goc2YtPlJlc29sdmVGdWxsUGF0aCgpKTsKKyAgc2YtPlNldFByb3BlcnR5KCJVTklUWV9TT1VSQ0VfRklMRSIsIGZpbGVuYW1lLmNfc3RyKCkpOworfQorCitpbmxpbmUgdm9pZCBJbmNsdWRlRmlsZUluVW5pdHlTb3VyY2VzKGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgdW5pdHlfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHNmX2Z1bGxfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wIGJlZm9yZUluY2x1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtUHJvcCBhZnRlckluY2x1ZGUpCit7CisgIGlmIChiZWZvcmVJbmNsdWRlKSB7CisgICAgdW5pdHlfZmlsZSA8PCAqYmVmb3JlSW5jbHVkZSA8PCAiXG4iOworICB9CisKKyAgdW5pdHlfZmlsZSA8PCAiI2luY2x1ZGUgXCIiIDw8IHNmX2Z1bGxfcGF0aCA8PCAiXCJcbiI7CisKKyAgaWYgKGFmdGVySW5jbHVkZSkgeworICAgIHVuaXR5X2ZpbGUgPDwgKmFmdGVySW5jbHVkZSA8PCAiXG4iOworICB9Cit9CisKK3N0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBBZGRVbml0eUZpbGVzTW9kZUF1dG8oCisgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiBjb25zdCYgZmlsdGVyZWRfc291cmNlcywgY21Qcm9wIGJlZm9yZUluY2x1ZGUsCisgIGNtUHJvcCBhZnRlckluY2x1ZGUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlbmFtZV9iYXNlLCBzaXplX3QgYmF0Y2hTaXplKQoreworICBpZiAoYmF0Y2hTaXplID09IDApIHsKKyAgICBiYXRjaFNpemUgPSBmaWx0ZXJlZF9zb3VyY2VzLnNpemUoKTsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bml0eV9maWxlczsKKyAgZm9yIChzaXplX3QgaXRlbXNMZWZ0ID0gZmlsdGVyZWRfc291cmNlcy5zaXplKCksIGNodW5rLCBiYXRjaCA9IDA7CisgICAgICAgaXRlbXNMZWZ0ID4gMDsgaXRlbXNMZWZ0IC09IGNodW5rLCArK2JhdGNoKSB7CisKKyAgICBjaHVuayA9IHN0ZDo6bWluKGl0ZW1zTGVmdCwgYmF0Y2hTaXplKTsKKworICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gY21TdHJDYXQoZmlsZW5hbWVfYmFzZSwgInVuaXR5XyIsIGJhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbmcgPT0gIkMiKSA/ICJfYy5jIiA6ICJfY3h4LmN4eCIpOworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZW5hbWVfdG1wID0gY21TdHJDYXQoZmlsZW5hbWUsICIudG1wIik7CisgICAgeworICAgICAgc2l6ZV90IGJlZ2luID0gYmF0Y2ggKiBiYXRjaFNpemU7CisgICAgICBzaXplX3QgZW5kID0gYmVnaW4gKyBjaHVuazsKKworICAgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZpbGUoCisgICAgICAgIGZpbGVuYW1lX3RtcCwgZmFsc2UsCisgICAgICAgIHRhcmdldC0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7CisgICAgICBmaWxlIDw8ICIvKiBnZW5lcmF0ZWQgYnkgQ01ha2UgKi9cblxuIjsKKworICAgICAgZm9yICg7IGJlZ2luICE9IGVuZDsgKytiZWdpbikgeworICAgICAgICBjbVNvdXJjZUZpbGUqIHNmID0gZmlsdGVyZWRfc291cmNlc1tiZWdpbl07CisgICAgICAgIFJlZ2lzdGVyVW5pdHlTb3VyY2VzKHRhcmdldCwgc2YsIGZpbGVuYW1lKTsKKyAgICAgICAgSW5jbHVkZUZpbGVJblVuaXR5U291cmNlcyhmaWxlLCBzZi0+UmVzb2x2ZUZ1bGxQYXRoKCksIGJlZm9yZUluY2x1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJJbmNsdWRlKTsKKyAgICAgIH0KKyAgICB9CisgICAgY21TeXN0ZW1Ub29sczo6TW92ZUZpbGVJZkRpZmZlcmVudChmaWxlbmFtZV90bXAsIGZpbGVuYW1lKTsKKyAgICB1bml0eV9maWxlcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGZpbGVuYW1lKSk7CisgIH0KKyAgcmV0dXJuIHVuaXR5X2ZpbGVzOworfQorCitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQWRkVW5pdHlGaWxlc01vZGVHcm91cCgKKyAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+IGNvbnN0JiBmaWx0ZXJlZF9zb3VyY2VzLCBjbVByb3AgYmVmb3JlSW5jbHVkZSwKKyAgY21Qcm9wIGFmdGVySW5jbHVkZSwgc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVuYW1lX2Jhc2UpCit7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bml0eV9maWxlczsKKworICAvLyBzb3VyY2VzIG9yZ2FuaXplZCBieSBncm91cCBuYW1lLiBEcm9wIGFueSBzb3VyY2UKKyAgLy8gd2l0aG91dCBhIGdyb3VwCisgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4+IGV4cGxpY2l0X21hcHBpbmc7CisgIGZvciAoY21Tb3VyY2VGaWxlKiBzZiA6IGZpbHRlcmVkX3NvdXJjZXMpIHsKKyAgICBpZiAoY21Qcm9wIHZhbHVlID0gc2YtPkdldFByb3BlcnR5KCJVTklUWV9HUk9VUCIpKSB7CisgICAgICBhdXRvIGkgPSBleHBsaWNpdF9tYXBwaW5nLmZpbmQoKnZhbHVlKTsKKyAgICAgIGlmIChpID09IGV4cGxpY2l0X21hcHBpbmcuZW5kKCkpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlc3sgc2YgfTsKKyAgICAgICAgZXhwbGljaXRfbWFwcGluZy5lbXBsYWNlKCp2YWx1ZSwgc291cmNlcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpLT5zZWNvbmQuZW1wbGFjZV9iYWNrKHNmKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBmb3IgKGF1dG8gY29uc3QmIGl0ZW0gOiBleHBsaWNpdF9tYXBwaW5nKSB7CisgICAgYXV0byBjb25zdCYgbmFtZSA9IGl0ZW0uZmlyc3Q7CisgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSBjbVN0ckNhdChmaWxlbmFtZV9iYXNlLCAidW5pdHlfIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW5nID09ICJDIikgPyAiX2MuYyIgOiAiX2N4eC5jeHgiKTsKKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVuYW1lX3RtcCA9IGNtU3RyQ2F0KGZpbGVuYW1lLCAiLnRtcCIpOworICAgIHsKKyAgICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmaWxlKAorICAgICAgICBmaWxlbmFtZV90bXAsIGZhbHNlLAorICAgICAgICB0YXJnZXQtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRNYWtlZmlsZUVuY29kaW5nKCkpOworICAgICAgZmlsZSA8PCAiLyogZ2VuZXJhdGVkIGJ5IENNYWtlICovXG5cbiI7CisKKyAgICAgIGZvciAoY21Tb3VyY2VGaWxlKiBzZiA6IGl0ZW0uc2Vjb25kKSB7CisgICAgICAgIFJlZ2lzdGVyVW5pdHlTb3VyY2VzKHRhcmdldCwgc2YsIGZpbGVuYW1lKTsKKyAgICAgICAgSW5jbHVkZUZpbGVJblVuaXR5U291cmNlcyhmaWxlLCBzZi0+UmVzb2x2ZUZ1bGxQYXRoKCksIGJlZm9yZUluY2x1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJJbmNsdWRlKTsKKyAgICAgIH0KKyAgICB9CisgICAgY21TeXN0ZW1Ub29sczo6TW92ZUZpbGVJZkRpZmZlcmVudChmaWxlbmFtZV90bXAsIGZpbGVuYW1lKTsKKyAgICB1bml0eV9maWxlcy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGZpbGVuYW1lKSk7CisgIH0KKworICByZXR1cm4gdW5pdHlfZmlsZXM7Cit9Cit9CisKIHZvaWQgY21Mb2NhbEdlbmVyYXRvcjo6QWRkVW5pdHlCdWlsZChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogewogICBpZiAoIXRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woIlVOSVRZX0JVSUxEIikpIHsKQEAgLTI0ODgsMTIgKzI3OTksMTUgQEAKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKICAgdGFyZ2V0LT5HZXRTb3VyY2VGaWxlcyhzb3VyY2VzLCBjb25maWcpOwogCi0gIGF1dG8gYmF0Y2hTaXplU3RyaW5nID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVU5JVFlfQlVJTERfQkFUQ0hfU0laRSIpOwotICBjb25zdCBzaXplX3QgdW5pdHlCYXRjaFNpemUgPQotICAgIHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjphdG9pKGJhdGNoU2l6ZVN0cmluZykpOworICBjbVByb3AgYmF0Y2hTaXplU3RyaW5nID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVU5JVFlfQlVJTERfQkFUQ0hfU0laRSIpOworICBjb25zdCBzaXplX3QgdW5pdHlCYXRjaFNpemUgPSBiYXRjaFNpemVTdHJpbmcKKyAgICA/IHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjphdG9pKGJhdGNoU2l6ZVN0cmluZy0+Y19zdHIoKSkpCisgICAgOiAwOwogCi0gIGF1dG8gYmVmb3JlSW5jbHVkZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlVOSVRZX0JVSUxEX0NPREVfQkVGT1JFX0lOQ0xVREUiKTsKLSAgYXV0byBhZnRlckluY2x1ZGUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJVTklUWV9CVUlMRF9DT0RFX0FGVEVSX0lOQ0xVREUiKTsKKyAgY21Qcm9wIGJlZm9yZUluY2x1ZGUgPQorICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIlVOSVRZX0JVSUxEX0NPREVfQkVGT1JFX0lOQ0xVREUiKTsKKyAgY21Qcm9wIGFmdGVySW5jbHVkZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlVOSVRZX0JVSUxEX0NPREVfQUZURVJfSU5DTFVERSIpOworICBjbVByb3AgdW5pdHlNb2RlID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVU5JVFlfQlVJTERfTU9ERSIpOwogCiAgIGZvciAoc3RkOjpzdHJpbmcgbGFuZyA6IHsgIkMiLCAiQ1hYIiB9KSB7CiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gZmlsdGVyZWRfc291cmNlczsKQEAgLTI1MDgsNTQgKzI4MjIsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICFzZi0+R2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKICAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICBzaXplX3QgYmF0Y2hTaXplID0gdW5pdHlCYXRjaFNpemU7Ci0gICAgaWYgKHVuaXR5QmF0Y2hTaXplID09IDApIHsKLSAgICAgIGJhdGNoU2l6ZSA9IGZpbHRlcmVkX3NvdXJjZXMuc2l6ZSgpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bml0eV9maWxlczsKKyAgICBpZiAoIXVuaXR5TW9kZSB8fCAqdW5pdHlNb2RlID09ICJCQVRDSCIpIHsKKyAgICAgIHVuaXR5X2ZpbGVzID0KKyAgICAgICAgQWRkVW5pdHlGaWxlc01vZGVBdXRvKHRhcmdldCwgbGFuZywgZmlsdGVyZWRfc291cmNlcywgYmVmb3JlSW5jbHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVySW5jbHVkZSwgZmlsZW5hbWVfYmFzZSwgdW5pdHlCYXRjaFNpemUpOworICAgIH0gZWxzZSBpZiAodW5pdHlNb2RlICYmICp1bml0eU1vZGUgPT0gIkdST1VQIikgeworICAgICAgdW5pdHlfZmlsZXMgPQorICAgICAgICBBZGRVbml0eUZpbGVzTW9kZUdyb3VwKHRhcmdldCwgbGFuZywgZmlsdGVyZWRfc291cmNlcywgYmVmb3JlSW5jbHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckluY2x1ZGUsIGZpbGVuYW1lX2Jhc2UpOworICAgIH0gZWxzZSB7CisgICAgICAvLyB1bml0eSBtb2RlIGlzIHNldCB0byBhbiB1bnN1cHBvcnRlZCB2YWx1ZQorICAgICAgc3RkOjpzdHJpbmcgZSgiSW52YWxpZCBVTklUWV9CVUlMRF9NT0RFIHZhbHVlIG9mICIgKyAqdW5pdHlNb2RlICsKKyAgICAgICAgICAgICAgICAgICAgIiBhc3NpZ25lZCB0byB0YXJnZXQgIiArIHRhcmdldC0+R2V0TmFtZSgpICsKKyAgICAgICAgICAgICAgICAgICAgIi4gQWNjZXB0YWJsZSB2YWx1ZXMgYXJlIEJBVENIIGFuZCBHUk9VUC4iKTsKKyAgICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUpOwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGl0ZW1zTGVmdCA9IGZpbHRlcmVkX3NvdXJjZXMuc2l6ZSgpLCBjaHVuayA9IGJhdGNoU2l6ZSwKLSAgICAgICAgICAgICAgICBiYXRjaCA9IDA7Ci0gICAgICAgICBpdGVtc0xlZnQgPiAwOyBpdGVtc0xlZnQgLT0gY2h1bmssICsrYmF0Y2gpIHsKLQotICAgICAgY2h1bmsgPSBzdGQ6Om1pbihpdGVtc0xlZnQsIGJhdGNoU2l6ZSk7Ci0KLSAgICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gY21TdHJDYXQoZmlsZW5hbWVfYmFzZSwgInVuaXR5XyIsIGJhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFuZyA9PSAiQyIpID8gIl9jLmMiIDogIl9jeHguY3h4Iik7Ci0KLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVuYW1lX3RtcCA9IGNtU3RyQ2F0KGZpbGVuYW1lLCAiLnRtcCIpOwotICAgICAgewotICAgICAgICBzaXplX3QgYmVnaW4gPSBiYXRjaCAqIGJhdGNoU2l6ZTsKLSAgICAgICAgc2l6ZV90IGVuZCA9IGJlZ2luICsgY2h1bms7Ci0KLSAgICAgICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtIGZpbGUoCi0gICAgICAgICAgZmlsZW5hbWVfdG1wLCBmYWxzZSwKLSAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0TWFrZWZpbGVFbmNvZGluZygpKTsKLSAgICAgICAgZmlsZSA8PCAiLyogZ2VuZXJhdGVkIGJ5IENNYWtlICovXG5cbiI7Ci0KLSAgICAgICAgZm9yICg7IGJlZ2luICE9IGVuZDsgKytiZWdpbikgewotICAgICAgICAgIGNtU291cmNlRmlsZSogc2YgPSBmaWx0ZXJlZF9zb3VyY2VzW2JlZ2luXTsKLQotICAgICAgICAgIHRhcmdldC0+QWRkU291cmNlRmlsZVRvVW5pdHlCYXRjaChzZi0+UmVzb2x2ZUZ1bGxQYXRoKCkpOwotICAgICAgICAgIHNmLT5TZXRQcm9wZXJ0eSgiVU5JVFlfU09VUkNFX0ZJTEUiLCBmaWxlbmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgIGlmIChiZWZvcmVJbmNsdWRlKSB7Ci0gICAgICAgICAgICBmaWxlIDw8IGJlZm9yZUluY2x1ZGUgPDwgIlxuIjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBmaWxlIDw8ICIjaW5jbHVkZSBcIiIgPDwgc2YtPlJlc29sdmVGdWxsUGF0aCgpIDw8ICJcIlxuIjsKLQotICAgICAgICAgIGlmIChhZnRlckluY2x1ZGUpIHsKLSAgICAgICAgICAgIGZpbGUgPDwgYWZ0ZXJJbmNsdWRlIDw8ICJcbiI7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBjbVN5c3RlbVRvb2xzOjpNb3ZlRmlsZUlmRGlmZmVyZW50KGZpbGVuYW1lX3RtcCwgZmlsZW5hbWUpOwotCi0gICAgICB0YXJnZXQtPkFkZFNvdXJjZShmaWxlbmFtZSwgdHJ1ZSk7Ci0KLSAgICAgIGF1dG8gdW5pdHkgPSB0aGlzLT5NYWtlZmlsZS0+R2V0T3JDcmVhdGVTb3VyY2UoZmlsZW5hbWUpOworICAgIGZvciAoYXV0byBjb25zdCYgZmlsZSA6IHVuaXR5X2ZpbGVzKSB7CisgICAgICBhdXRvIHVuaXR5ID0gdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0T3JDcmVhdGVTb3VyY2UoZmlsZSk7CisgICAgICB0YXJnZXQtPkFkZFNvdXJjZShmaWxlLCB0cnVlKTsKICAgICAgIHVuaXR5LT5TZXRQcm9wZXJ0eSgiU0tJUF9VTklUWV9CVUlMRF9JTkNMVVNJT04iLCAiT04iKTsKLSAgICAgIHVuaXR5LT5TZXRQcm9wZXJ0eSgiVU5JVFlfU09VUkNFX0ZJTEUiLCBmaWxlbmFtZS5jX3N0cigpKTsKKyAgICAgIHVuaXR5LT5TZXRQcm9wZXJ0eSgiVU5JVFlfU09VUkNFX0ZJTEUiLCBmaWxlLmNfc3RyKCkpOwogICAgIH0KICAgfQogfQpAQCAtMjYyNiwxMSArMjkxNCwxMSBAQAogfQogCiB2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkFwcGVuZENvbXBpbGVPcHRpb25zKHN0ZDo6c3RyaW5nJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBvcHRpb25zX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvcHRpb25zX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlZ2V4KSBjb25zdAogewogICAvLyBTaG9ydC1jaXJjdWl0IGlmIHRoZXJlIGFyZSBubyBvcHRpb25zLgotICBpZiAoIW9wdGlvbnNfbGlzdCkgeworICBpZiAob3B0aW9uc19saXN0LmVtcHR5KCkpIHsKICAgICByZXR1cm47CiAgIH0KIApAQCAtMjY4NCwxMSArMjk3MiwxMSBAQAogfQogCiB2b2lkIGNtTG9jYWxHZW5lcmF0b3I6OkFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcygKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBpbmNsdWRlcywgY29uc3QgY2hhciogaW5jbHVkZXNfbGlzdCwKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBpbmNsdWRlcywgY29uc3Qgc3RkOjpzdHJpbmcmIGluY2x1ZGVzX2xpc3QsCiAgIGNvbnN0IGNtU291cmNlRmlsZSYgc291cmNlRmlsZSkgY29uc3QKIHsKICAgLy8gU2hvcnQtY2lyY3VpdCBpZiB0aGVyZSBhcmUgbm8gaW5jbHVkZXMuCi0gIGlmICghaW5jbHVkZXNfbGlzdCkgeworICBpZiAoaW5jbHVkZXNfbGlzdC5lbXB0eSgpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTI3NzIsNyArMzA2MCw3IEBACiAgIGlmICghbGFuZy5lbXB0eSgpKSB7CiAgICAgY29uc3QgY2hhciogZGYgPQogICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfREVGSU5FX0ZMQUciKSk7Ci0gICAgaWYgKGRmICYmICpkZikgeworICAgIGlmIChjbU5vbmVtcHR5KGRmKSkgewogICAgICAgZGZsYWcgPSBkZjsKICAgICB9CiAgIH0KQEAgLTI3OTEsMTEgKzMwNzksMTEgQEAKICAgICAgIC8vIGNvbW1hbmQgbGluZSB3aXRob3V0IGFueSBlc2NhcGVzLiAgSG93ZXZlciB3ZSBzdGlsbCBoYXZlIHRvCiAgICAgICAvLyBnZXQgdGhlICckJyBhbmQgJyMnIGNoYXJhY3RlcnMgdGhyb3VnaCBXTWFrZSBhcyAnJCQnIGFuZAogICAgICAgLy8gJyQjJy4KLSAgICAgIGZvciAoY29uc3QgY2hhciogYyA9IGRlZmluZS5jX3N0cigpOyAqYzsgKytjKSB7Ci0gICAgICAgIGlmICgqYyA9PSAnJCcgfHwgKmMgPT0gJyMnKSB7CisgICAgICBmb3IgKGNoYXIgYyA6IGRlZmluZSkgeworICAgICAgICBpZiAoYyA9PSAnJCcgfHwgYyA9PSAnIycpIHsKICAgICAgICAgICBkZWYgKz0gJyQnOwogICAgICAgICB9Ci0gICAgICAgIGRlZiArPSAqYzsKKyAgICAgICAgZGVmICs9IGM7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIE1ha2UgdGhlIGRlZmluaXRpb24gYXBwZWFyIHByb3Blcmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuICBVc2UKQEAgLTI4MjcsMTkgKzMxMTUsMTkgQEAKICAgfQogfQogCi1jb25zdCBjaGFyKiBjbUxvY2FsR2VuZXJhdG9yOjpHZXRGZWF0dXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQorY21Qcm9wIGNtTG9jYWxHZW5lcmF0b3I6OkdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBzdGQ6OnN0cmluZyBmZWF0dXJlTmFtZSA9IGZlYXR1cmU7Ci0gIC8vIFRPRE86IERlZmluZSBhY2N1bXVsYXRpb24gcG9saWN5IGZvciBmZWF0dXJlcyAocHJlcGVuZCwgYXBwZW5kLCByZXBsYWNlKS4KLSAgLy8gQ3VycmVudGx5IHdlIGFsd2F5cyByZXBsYWNlLgorICAvLyBUT0RPOiBEZWZpbmUgYWNjdW11bGF0aW9uIHBvbGljeSBmb3IgZmVhdHVyZXMgKHByZXBlbmQsIGFwcGVuZCwKKyAgLy8gcmVwbGFjZSkuIEN1cnJlbnRseSB3ZSBhbHdheXMgcmVwbGFjZS4KICAgaWYgKCFjb25maWcuZW1wdHkoKSkgewogICAgIGZlYXR1cmVOYW1lICs9ICJfIjsKICAgICBmZWF0dXJlTmFtZSArPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKICAgfQogICBjbVN0YXRlU25hcHNob3Qgc25wID0gdGhpcy0+U3RhdGVTbmFwc2hvdDsKICAgd2hpbGUgKHNucC5Jc1ZhbGlkKCkpIHsKLSAgICBpZiAoY29uc3QgY2hhciogdmFsdWUgPSBzbnAuR2V0RGlyZWN0b3J5KCkuR2V0UHJvcGVydHkoZmVhdHVyZU5hbWUpKSB7CisgICAgaWYgKGNtUHJvcCB2YWx1ZSA9IHNucC5HZXREaXJlY3RvcnkoKS5HZXRQcm9wZXJ0eShmZWF0dXJlTmFtZSkpIHsKICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAgICAgc25wID0gc25wLkdldEJ1aWxkc3lzdGVtRGlyZWN0b3J5UGFyZW50KCk7CkBAIC0yODgyLDcgKzMxNzAsNyBAQAogewogcHVibGljOgogICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3JMb2NhbChjbUxvY2FsR2VuZXJhdG9yKiBsZywgc3RkOjpzdHJpbmcgY29uc3QmIHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlc3QsIGJvb2wgaW1wbGliKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVzdCwgYm9vbCBpbXBsaWIpCiAgICAgOiBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3IoCiAgICAgICAgIHQsIGRlc3QsIGltcGxpYiwgIiIsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLCAiVW5zcGVjaWZpZWQiLAogICAgICAgICBjbUluc3RhbGxHZW5lcmF0b3I6OlNlbGVjdE1lc3NhZ2VMZXZlbChsZy0+R2V0TWFrZWZpbGUoKSksIGZhbHNlLApAQCAtMjg5OCwxNSArMzE4NiwxNSBAQAogewogICAvLyBDb252ZXJ0IHRoZSBvbGQtc3R5bGUgaW5zdGFsbCBzcGVjaWZpY2F0aW9uIGZyb20gZWFjaCB0YXJnZXQgdG8KICAgLy8gYW4gaW5zdGFsbCBnZW5lcmF0b3IgYW5kIHJ1biBpdC4KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGd0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogbCA6IHRndHMpIHsKKyAgY29uc3QgYXV0byYgdGd0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgZm9yIChjb25zdCBhdXRvJiBsIDogdGd0cykgewogICAgIGlmIChsLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgICAgY29udGludWU7CiAgICAgfQogCiAgICAgLy8gSW5jbHVkZSB0aGUgdXNlci1zcGVjaWZpZWQgcHJlLWluc3RhbGwgc2NyaXB0IGZvciB0aGlzIHRhcmdldC4KLSAgICBpZiAoY29uc3QgY2hhciogcHJlaW5zdGFsbCA9IGwtPkdldFByb3BlcnR5KCJQUkVfSU5TVEFMTF9TQ1JJUFQiKSkgewotICAgICAgY21JbnN0YWxsU2NyaXB0R2VuZXJhdG9yIGcocHJlaW5zdGFsbCwgZmFsc2UsIG51bGxwdHIsIGZhbHNlKTsKKyAgICBpZiAoY21Qcm9wIHByZWluc3RhbGwgPSBsLT5HZXRQcm9wZXJ0eSgiUFJFX0lOU1RBTExfU0NSSVBUIikpIHsKKyAgICAgIGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvciBnKCpwcmVpbnN0YWxsLCBmYWxzZSwgIiIsIGZhbHNlKTsKICAgICAgIGcuR2VuZXJhdGUob3MsIGNvbmZpZywgY29uZmlndXJhdGlvblR5cGVzKTsKICAgICB9CiAKQEAgLTI5MjcsOCArMzIxNSw4IEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOiB7CiAgICAgICAgICAgLy8gVXNlIGEgdGFyZ2V0IGluc3RhbGwgZ2VuZXJhdG9yLgotICAgICAgICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvckxvY2FsIGcodGhpcywgbC0+R2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uY19zdHIoKSwgZmFsc2UpOworICAgICAgICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvckxvY2FsIGcodGhpcywgbC0+R2V0TmFtZSgpLCBkZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgICBnLkdlbmVyYXRlKG9zLCBjb25maWcsIGNvbmZpZ3VyYXRpb25UeXBlcyk7CiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWTogewpAQCAtMjkzNiwxOSArMzIyNCwxOSBAQAogICAgICAgICAgIC8vIFNwZWNpYWwgY29kZSB0byBoYW5kbGUgRExMLiAgSW5zdGFsbCB0aGUgaW1wb3J0IGxpYnJhcnkKICAgICAgICAgICAvLyB0byB0aGUgbm9ybWFsIGRlc3RpbmF0aW9uIGFuZCB0aGUgRExMIHRvIHRoZSBydW50aW1lCiAgICAgICAgICAgLy8gZGVzdGluYXRpb24uCi0gICAgICAgICAgY21JbnN0YWxsVGFyZ2V0R2VuZXJhdG9yTG9jYWwgZzEodGhpcywgbC0+R2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmNfc3RyKCksIHRydWUpOworICAgICAgICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvckxvY2FsIGcxKHRoaXMsIGwtPkdldE5hbWUoKSwgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgZzEuR2VuZXJhdGUob3MsIGNvbmZpZywgY29uZmlndXJhdGlvblR5cGVzKTsKICAgICAgICAgICAvLyBXZSBhbHNvIHNraXAgb3ZlciB0aGUgbGVhZGluZyBzbGFzaCBnaXZlbiBieSB0aGUgdXNlci4KICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGwtPlRhcmdldC0+R2V0UnVudGltZUluc3RhbGxQYXRoKCkuc3Vic3RyKDEpOwogICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3JMb2NhbCBnMih0aGlzLCBsLT5HZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uY19zdHIoKSwgZmFsc2UpOworICAgICAgICAgIGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvckxvY2FsIGcyKHRoaXMsIGwtPkdldE5hbWUoKSwgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogICAgICAgICAgIGcyLkdlbmVyYXRlKG9zLCBjb25maWcsIGNvbmZpZ3VyYXRpb25UeXBlcyk7CiAjZWxzZQogICAgICAgICAgIC8vIFVzZSBhIHRhcmdldCBpbnN0YWxsIGdlbmVyYXRvci4KLSAgICAgICAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3JMb2NhbCBnKHRoaXMsIGwtPkdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmNfc3RyKCksIGZhbHNlKTsKKyAgICAgICAgICBjbUluc3RhbGxUYXJnZXRHZW5lcmF0b3JMb2NhbCBnKHRoaXMsIGwtPkdldE5hbWUoKSwgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgICAgZy5HZW5lcmF0ZShvcywgY29uZmlnLCBjb25maWd1cmF0aW9uVHlwZXMpOwogI2VuZGlmCiAgICAgICAgIH0gYnJlYWs7CkBAIC0yOTU4LDggKzMyNDYsOCBAQAogICAgIH0KIAogICAgIC8vIEluY2x1ZGUgdGhlIHVzZXItc3BlY2lmaWVkIHBvc3QtaW5zdGFsbCBzY3JpcHQgZm9yIHRoaXMgdGFyZ2V0LgotICAgIGlmIChjb25zdCBjaGFyKiBwb3N0aW5zdGFsbCA9IGwtPkdldFByb3BlcnR5KCJQT1NUX0lOU1RBTExfU0NSSVBUIikpIHsKLSAgICAgIGNtSW5zdGFsbFNjcmlwdEdlbmVyYXRvciBnKHBvc3RpbnN0YWxsLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOworICAgIGlmIChjbVByb3AgcG9zdGluc3RhbGwgPSBsLT5HZXRQcm9wZXJ0eSgiUE9TVF9JTlNUQUxMX1NDUklQVCIpKSB7CisgICAgICBjbUluc3RhbGxTY3JpcHRHZW5lcmF0b3IgZygqcG9zdGluc3RhbGwsIGZhbHNlLCAiIiwgZmFsc2UpOwogICAgICAgZy5HZW5lcmF0ZShvcywgY29uZmlnLCBjb25maWd1cmF0aW9uVHlwZXMpOwogICAgIH0KICAgfQpAQCAtMzExNSw2ICszNDAzLDExIEBACiAgIHJldHVybiB0aGlzLT5HZXRTdGF0ZSgpLT5Vc2VOTWFrZSgpOwogfQogCitib29sIGNtTG9jYWxHZW5lcmF0b3I6OklzTmluamFNdWx0aSgpIGNvbnN0Cit7CisgIHJldHVybiB0aGlzLT5HZXRTdGF0ZSgpLT5Vc2VOaW5qYU11bHRpKCk7Cit9CisKIHN0ZDo6c3RyaW5nIGNtTG9jYWxHZW5lcmF0b3I6OkdldE9iamVjdEZpbGVOYW1lV2l0aG91dFRhcmdldCgKICAgY29uc3QgY21Tb3VyY2VGaWxlJiBzb3VyY2UsIHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXJfbWF4LAogICBib29sKiBoYXNTb3VyY2VFeHRlbnNpb24sIGNoYXIgY29uc3QqIGN1c3RvbU91dHB1dEV4dGVuc2lvbikKQEAgLTMxNDAsMTEgKzM0MzMsMTIgQEAKICAgLy8gU2VsZWN0IGEgbmljZS1sb29raW5nIHJlZmVyZW5jZSB0byB0aGUgc291cmNlIGZpbGUgdG8gY29uc3RydWN0CiAgIC8vIHRoZSBvYmplY3QgZmlsZSBuYW1lLgogICBzdGQ6OnN0cmluZyBvYmplY3ROYW1lOworICAvLyBYWFgoY2xhbmctdGlkeSk6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxNjUKKyAgLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtYnJhbmNoLWNsb25lKQogICBpZiAoKHJlbFNvdXJjZSAmJiAhcmVsQmluYXJ5KSB8fCAoc3ViU291cmNlICYmICFzdWJCaW5hcnkpKSB7CiAgICAgb2JqZWN0TmFtZSA9IHJlbEZyb21Tb3VyY2U7Ci0gIH0gZWxzZSBpZiAoKHJlbEJpbmFyeSAmJiAhcmVsU291cmNlKSB8fCAoc3ViQmluYXJ5ICYmICFzdWJTb3VyY2UpKSB7Ci0gICAgb2JqZWN0TmFtZSA9IHJlbEZyb21CaW5hcnk7Ci0gIH0gZWxzZSBpZiAocmVsRnJvbUJpbmFyeS5sZW5ndGgoKSA8IHJlbEZyb21Tb3VyY2UubGVuZ3RoKCkpIHsKKyAgfSBlbHNlIGlmICgocmVsQmluYXJ5ICYmICFyZWxTb3VyY2UpIHx8IChzdWJCaW5hcnkgJiYgIXN1YlNvdXJjZSkgfHwKKyAgICAgICAgICAgICByZWxGcm9tQmluYXJ5Lmxlbmd0aCgpIDwgcmVsRnJvbVNvdXJjZS5sZW5ndGgoKSkgewogICAgIG9iamVjdE5hbWUgPSByZWxGcm9tQmluYXJ5OwogICB9IGVsc2UgewogICAgIG9iamVjdE5hbWUgPSByZWxGcm9tU291cmNlOwpAQCAtMzE2MiwxMiArMzQ1NiwxMiBAQAogICAvLyBFbnN1cmUgdGhhdCBmb3IgdGhlIENNYWtlRmlsZXMvPHRhcmdldD4uZGlyL2dlbmVyYXRlZF9zb3VyY2VfZmlsZQogICAvLyB3ZSBkb24ndCBlbmQgdXAgaGF2aW5nOgogICAvLyBDTWFrZUZpbGVzLzx0YXJnZXQ+LmRpci9DTWFrZUZpbGVzLzx0YXJnZXQ+LmRpci9nZW5lcmF0ZWRfc291cmNlX2ZpbGUub2JqCi0gIGNvbnN0IGNoYXIqIHVuaXR5U291cmNlRmlsZSA9IHNvdXJjZS5HZXRQcm9wZXJ0eSgiVU5JVFlfU09VUkNFX0ZJTEUiKTsKLSAgY29uc3QgY2hhciogcGNoRXh0ZW5zaW9uID0gc291cmNlLkdldFByb3BlcnR5KCJQQ0hfRVhURU5TSU9OIik7CisgIGNtUHJvcCB1bml0eVNvdXJjZUZpbGUgPSBzb3VyY2UuR2V0UHJvcGVydHkoIlVOSVRZX1NPVVJDRV9GSUxFIik7CisgIGNtUHJvcCBwc0V4dGVuc2lvbiA9IHNvdXJjZS5HZXRQcm9wZXJ0eSgiUENIX0VYVEVOU0lPTiIpOwogICBjb25zdCBib29sIGlzUGNoT2JqZWN0ID0gb2JqZWN0TmFtZS5maW5kKCJjbWFrZV9wY2giKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKLSAgaWYgKHVuaXR5U291cmNlRmlsZSB8fCBwY2hFeHRlbnNpb24gfHwgaXNQY2hPYmplY3QpIHsKLSAgICBpZiAocGNoRXh0ZW5zaW9uKSB7Ci0gICAgICBjdXN0b21PdXRwdXRFeHRlbnNpb24gPSBwY2hFeHRlbnNpb247CisgIGlmICh1bml0eVNvdXJjZUZpbGUgfHwgcHNFeHRlbnNpb24gfHwgaXNQY2hPYmplY3QpIHsKKyAgICBpZiAocHNFeHRlbnNpb24pIHsKKyAgICAgIGN1c3RvbU91dHB1dEV4dGVuc2lvbiA9IHBzRXh0ZW5zaW9uLT5jX3N0cigpOwogICAgIH0KIAogICAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiB2YXIoIihDTWFrZUZpbGVzL1teL10rLmRpci8pIik7CkBAIC0zMzAzLDcgKzM1OTcsNiBAQAogICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbVBvbGljaWVzOjpORVc6CiAgICAgICAvLyBOZXcgYmVoYXZpb3IgaXMgdG8gaWdub3JlIHRoZSB2YXJpYWJsZS4KLSAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0lGX1VTRUQ6CiAgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9BTFdBWVM6CiAgICAgICAvLyBUaGlzIHdpbGwgbmV2ZXIgYmUgdGhlIGNhc2UgYmVjYXVzZSB0aGUgb25seSB3YXkgdG8gcmVxdWlyZQpAQCAtMzM2NSw4ICszNjU4LDggQEAKIHN0YXRpYyB2b2lkIGNtTEdJbmZvUHJvcChjbU1ha2VmaWxlKiBtZiwgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkKIHsKLSAgaWYgKGNvbnN0IGNoYXIqIHZhbCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcCkpIHsKLSAgICBtZi0+QWRkRGVmaW5pdGlvbihwcm9wLCB2YWwpOworICBpZiAoY21Qcm9wIHZhbCA9IHRhcmdldC0+R2V0UHJvcGVydHkocHJvcCkpIHsKKyAgICBtZi0+QWRkRGVmaW5pdGlvbihwcm9wLCAqdmFsKTsKICAgfQogfQogCkBAIC0zMzc1LDggKzM2NjgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkKIHsKICAgLy8gRmluZCB0aGUgSW5mby5wbGlzdCB0ZW1wbGF0ZS4KLSAgY29uc3QgY2hhciogaW4gPSB0YXJnZXQtPkdldFByb3BlcnR5KCJNQUNPU1hfQlVORExFX0lORk9fUExJU1QiKTsKLSAgc3RkOjpzdHJpbmcgaW5GaWxlID0gKGluICYmICppbikgPyBpbiA6ICJNYWNPU1hCdW5kbGVJbmZvLnBsaXN0LmluIjsKKyAgY21Qcm9wIGluID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTUFDT1NYX0JVTkRMRV9JTkZPX1BMSVNUIik7CisgIHN0ZDo6c3RyaW5nIGluRmlsZSA9IGNtTm9uZW1wdHkoaW4pID8gKmluIDogIk1hY09TWEJ1bmRsZUluZm8ucGxpc3QuaW4iOwogICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGluRmlsZSkpIHsKICAgICBzdGQ6OnN0cmluZyBpbk1vZCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRNb2R1bGVzRmlsZShpbkZpbGUpOwogICAgIGlmICghaW5Nb2QuZW1wdHkoKSkgewpAQCAtMzQwNiw3ICszNjk5LDcgQEAKICAgY21MR0luZm9Qcm9wKG1mLCB0YXJnZXQsICJNQUNPU1hfQlVORExFX1NIT1JUX1ZFUlNJT05fU1RSSU5HIik7CiAgIGNtTEdJbmZvUHJvcChtZiwgdGFyZ2V0LCAiTUFDT1NYX0JVTkRMRV9CVU5ETEVfVkVSU0lPTiIpOwogICBjbUxHSW5mb1Byb3AobWYsIHRhcmdldCwgIk1BQ09TWF9CVU5ETEVfQ09QWVJJR0hUIik7Ci0gIG1mLT5Db25maWd1cmVGaWxlKGluRmlsZSwgZm5hbWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICBtZi0+Q29uZmlndXJlRmlsZShpbkZpbGUsIGZuYW1lLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKIH0KIAogdm9pZCBjbUxvY2FsR2VuZXJhdG9yOjpHZW5lcmF0ZUZyYW1ld29ya0luZm9QTGlzdCgKQEAgLTM0MTQsOCArMzcwNyw4IEBACiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkKIHsKICAgLy8gRmluZCB0aGUgSW5mby5wbGlzdCB0ZW1wbGF0ZS4KLSAgY29uc3QgY2hhciogaW4gPSB0YXJnZXQtPkdldFByb3BlcnR5KCJNQUNPU1hfRlJBTUVXT1JLX0lORk9fUExJU1QiKTsKLSAgc3RkOjpzdHJpbmcgaW5GaWxlID0gKGluICYmICppbikgPyBpbiA6ICJNYWNPU1hGcmFtZXdvcmtJbmZvLnBsaXN0LmluIjsKKyAgY21Qcm9wIGluID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTUFDT1NYX0ZSQU1FV09SS19JTkZPX1BMSVNUIik7CisgIHN0ZDo6c3RyaW5nIGluRmlsZSA9IGNtTm9uZW1wdHkoaW4pID8gKmluIDogIk1hY09TWEZyYW1ld29ya0luZm8ucGxpc3QuaW4iOwogICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGluRmlsZSkpIHsKICAgICBzdGQ6OnN0cmluZyBpbk1vZCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRNb2R1bGVzRmlsZShpbkZpbGUpOwogICAgIGlmICghaW5Nb2QuZW1wdHkoKSkgewpAQCAtMzQ0MSw1ICszNzM0LDI0OCBAQAogICBjbUxHSW5mb1Byb3AobWYsIHRhcmdldCwgIk1BQ09TWF9GUkFNRVdPUktfSURFTlRJRklFUiIpOwogICBjbUxHSW5mb1Byb3AobWYsIHRhcmdldCwgIk1BQ09TWF9GUkFNRVdPUktfU0hPUlRfVkVSU0lPTl9TVFJJTkciKTsKICAgY21MR0luZm9Qcm9wKG1mLCB0YXJnZXQsICJNQUNPU1hfRlJBTUVXT1JLX0JVTkRMRV9WRVJTSU9OIik7Ci0gIG1mLT5Db25maWd1cmVGaWxlKGluRmlsZSwgZm5hbWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICBtZi0+Q29uZmlndXJlRmlsZShpbkZpbGUsIGZuYW1lLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKK30KKworbmFtZXNwYWNlIHsKK3ZvaWQgQ3JlYXRlR2VuZXJhdGVkU291cmNlKGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBzdGQ6OnN0cmluZyYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Db21tYW5kT3JpZ2luIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQpCit7CisgIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQob3V0cHV0KSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgIC8vIE91dHB1dHMgd2l0aG91dCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgZnJvbSB0aGUgcHJvamVjdCBhcmUgYWxyZWFkeQorICAgIC8vIGNyZWF0ZWQgYW5kIG1hcmtlZCBhcyBnZW5lcmF0ZWQuICBEbyBub3QgbWFyayB0aGVtIGFnYWluLCBiZWNhdXNlCisgICAgLy8gb3RoZXIgY29tbWFuZHMgbWlnaHQgaGF2ZSBvdmVyd3JpdHRlbiB0aGUgcHJvcGVydHkuCisgICAgaWYgKG9yaWdpbiA9PSBjbUNvbW1hbmRPcmlnaW46OkdlbmVyYXRvcikgeworICAgICAgbGcuR2V0TWFrZWZpbGUoKS0+R2V0T3JDcmVhdGVHZW5lcmF0ZWRTb3VyY2Uob3V0cHV0KTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbGcuR2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAiR2VuZXJhdG9yIGV4cHJlc3Npb25zIGluIGN1c3RvbSBjb21tYW5kIG91dHB1dHMgYXJlIG5vdCBpbXBsZW1lbnRlZCEiLAorICAgICAgbGZidCk7CisgIH0KK30KKwordm9pZCBDcmVhdGVHZW5lcmF0ZWRTb3VyY2VzKGNtTG9jYWxHZW5lcmF0b3ImIGxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUNvbW1hbmRPcmlnaW4gb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQpCit7CisgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG8gOiBvdXRwdXRzKSB7CisgICAgQ3JlYXRlR2VuZXJhdGVkU291cmNlKGxnLCBvLCBvcmlnaW4sIGxmYnQpOworICB9Cit9CisKK2NtU291cmNlRmlsZSogQWRkQ3VzdG9tQ29tbWFuZCgKKyAgY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cywKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWluX2RlcGVuZGVuY3ksCisgIGNvbnN0IGNtSW1wbGljaXREZXBlbmRzTGlzdCYgaW1wbGljaXRfZGVwZW5kcywKKyAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKKyAgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCByZXBsYWNlLCBib29sIGVzY2FwZU9sZFN0eWxlLAorICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAorICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsIGJvb2wgc3RkUGlwZXNVVEY4KQoreworICBjbU1ha2VmaWxlKiBtZiA9IGxnLkdldE1ha2VmaWxlKCk7CisKKyAgLy8gQ2hvb3NlIGEgc291cmNlIGZpbGUgb24gd2hpY2ggdG8gc3RvcmUgdGhlIGN1c3RvbSBjb21tYW5kLgorICBjbVNvdXJjZUZpbGUqIGZpbGUgPSBudWxscHRyOworICBpZiAoIWNvbW1hbmRMaW5lcy5lbXB0eSgpICYmICFtYWluX2RlcGVuZGVuY3kuZW1wdHkoKSkgeworICAgIC8vIFRoZSBtYWluIGRlcGVuZGVuY3kgd2FzIHNwZWNpZmllZC4gIFVzZSBpdCB1bmxlc3MgYSBkaWZmZXJlbnQKKyAgICAvLyBjdXN0b20gY29tbWFuZCBhbHJlYWR5IHVzZWQgaXQuCisgICAgZmlsZSA9IG1mLT5HZXRTb3VyY2UobWFpbl9kZXBlbmRlbmN5KTsKKyAgICBpZiAoZmlsZSAmJiBmaWxlLT5HZXRDdXN0b21Db21tYW5kKCkgJiYgIXJlcGxhY2UpIHsKKyAgICAgIC8vIFRoZSBtYWluIGRlcGVuZGVuY3kgYWxyZWFkeSBoYXMgYSBjdXN0b20gY29tbWFuZC4KKyAgICAgIGlmIChjb21tYW5kTGluZXMgPT0gZmlsZS0+R2V0Q3VzdG9tQ29tbWFuZCgpLT5HZXRDb21tYW5kTGluZXMoKSkgeworICAgICAgICAvLyBUaGUgZXhpc3RpbmcgY3VzdG9tIGNvbW1hbmQgaXMgaWRlbnRpY2FsLiAgU2lsZW50bHkgaWdub3JlCisgICAgICAgIC8vIHRoZSBkdXBsaWNhdGUuCisgICAgICAgIHJldHVybiBmaWxlOworICAgICAgfQorICAgICAgLy8gVGhlIGV4aXN0aW5nIGN1c3RvbSBjb21tYW5kIGlzIGRpZmZlcmVudC4gIFdlIG5lZWQgdG8KKyAgICAgIC8vIGdlbmVyYXRlIGEgcnVsZSBmaWxlIGZvciB0aGlzIG5ldyBjb21tYW5kLgorICAgICAgZmlsZSA9IG51bGxwdHI7CisgICAgfSBlbHNlIGlmICghZmlsZSkgeworICAgICAgZmlsZSA9IG1mLT5DcmVhdGVTb3VyY2UobWFpbl9kZXBlbmRlbmN5KTsKKyAgICB9CisgIH0KKworICAvLyBHZW5lcmF0ZSBhIHJ1bGUgZmlsZSBpZiB0aGUgbWFpbiBkZXBlbmRlbmN5IGlzIG5vdCBhdmFpbGFibGUuCisgIGlmICghZmlsZSkgeworICAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9IGxnLkdldEdsb2JhbEdlbmVyYXRvcigpOworCisgICAgLy8gQ29uc3RydWN0IGEgcnVsZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlyc3Qgb3V0cHV0IHByb2R1Y2VkLgorICAgIHN0ZDo6c3RyaW5nIG91dE5hbWUgPSBnZy0+R2VuZXJhdGVSdWxlRmlsZShvdXRwdXRzWzBdKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBydWxlIGZpbGUgYWxyZWFkeSBleGlzdHMuCisgICAgZmlsZSA9IG1mLT5HZXRTb3VyY2Uob3V0TmFtZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7CisgICAgaWYgKGZpbGUgJiYgZmlsZS0+R2V0Q3VzdG9tQ29tbWFuZCgpICYmICFyZXBsYWNlKSB7CisgICAgICAvLyBUaGUgcnVsZSBmaWxlIGFscmVhZHkgZXhpc3RzLgorICAgICAgaWYgKGNvbW1hbmRMaW5lcyAhPSBmaWxlLT5HZXRDdXN0b21Db21tYW5kKCktPkdldENvbW1hbmRMaW5lcygpKSB7CisgICAgICAgIGxnLkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKAorICAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICBjbVN0ckNhdCgiQXR0ZW1wdCB0byBhZGQgYSBjdXN0b20gcnVsZSB0byBvdXRwdXRcbiAgIiwgb3V0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAiXG53aGljaCBhbHJlYWR5IGhhcyBhIGN1c3RvbSBydWxlLiIpLAorICAgICAgICAgIGxmYnQpOworICAgICAgfQorICAgICAgcmV0dXJuIGZpbGU7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEgY21Tb3VyY2VGaWxlIGZvciB0aGUgcnVsZSBmaWxlLgorICAgIGlmICghZmlsZSkgeworICAgICAgZmlsZSA9IG1mLT5DcmVhdGVTb3VyY2Uob3V0TmFtZSwgdHJ1ZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7CisgICAgfQorICAgIGZpbGUtPlNldFByb3BlcnR5KCJfX0NNQUtFX1JVTEUiLCAiMSIpOworICB9CisKKyAgLy8gQXR0YWNoIHRoZSBjdXN0b20gY29tbWFuZCB0byB0aGUgZmlsZS4KKyAgaWYgKGZpbGUpIHsKKyAgICAvLyBDb25zdHJ1Y3QgYSBjb21wbGV0ZSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwZW5kczIoZGVwZW5kcyk7CisgICAgaWYgKCFtYWluX2RlcGVuZGVuY3kuZW1wdHkoKSkgeworICAgICAgZGVwZW5kczIucHVzaF9iYWNrKG1haW5fZGVwZW5kZW5jeSk7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ3VzdG9tQ29tbWFuZD4gY2MgPSBjbTo6bWFrZV91bmlxdWU8Y21DdXN0b21Db21tYW5kPigKKyAgICAgIG91dHB1dHMsIGJ5cHJvZHVjdHMsIGRlcGVuZHMyLCBjb21tYW5kTGluZXMsIGxmYnQsIGNvbW1lbnQsIHdvcmtpbmdEaXIsCisgICAgICBzdGRQaXBlc1VURjgpOworICAgIGNjLT5TZXRFc2NhcGVPbGRTdHlsZShlc2NhcGVPbGRTdHlsZSk7CisgICAgY2MtPlNldEVzY2FwZUFsbG93TWFrZVZhcnModHJ1ZSk7CisgICAgY2MtPlNldEltcGxpY2l0RGVwZW5kcyhpbXBsaWNpdF9kZXBlbmRzKTsKKyAgICBjYy0+U2V0VXNlc1Rlcm1pbmFsKHVzZXNfdGVybWluYWwpOworICAgIGNjLT5TZXRDb21tYW5kRXhwYW5kTGlzdHMoY29tbWFuZF9leHBhbmRfbGlzdHMpOworICAgIGNjLT5TZXREZXBmaWxlKGRlcGZpbGUpOworICAgIGNjLT5TZXRKb2JQb29sKGpvYl9wb29sKTsKKyAgICBmaWxlLT5TZXRDdXN0b21Db21tYW5kKHN0ZDo6bW92ZShjYykpOworCisgICAgbWYtPkFkZFNvdXJjZU91dHB1dHMoZmlsZSwgb3V0cHV0cywgYnlwcm9kdWN0cyk7CisgIH0KKyAgcmV0dXJuIGZpbGU7Cit9Cit9CisKK25hbWVzcGFjZSBkZXRhaWwgewordm9pZCBBZGRDdXN0b21Db21tYW5kVG9UYXJnZXQoY21Mb2NhbEdlbmVyYXRvciYgbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Db21tYW5kT3JpZ2luIG9yaWdpbiwgY21UYXJnZXQqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUN1c3RvbUNvbW1hbmRUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIGVzY2FwZU9sZFN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsIGJvb2wgc3RkUGlwZXNVVEY4KQoreworICBjbU1ha2VmaWxlKiBtZiA9IGxnLkdldE1ha2VmaWxlKCk7CisKKyAgLy8gQWx3YXlzIGNyZWF0ZSB0aGUgYnlwcm9kdWN0IHNvdXJjZXMgYW5kIG1hcmsgdGhlbSBnZW5lcmF0ZWQuCisgIENyZWF0ZUdlbmVyYXRlZFNvdXJjZXMobGcsIGJ5cHJvZHVjdHMsIG9yaWdpbiwgbGZidCk7CisKKyAgLy8gQWRkIHRoZSBjb21tYW5kIHRvIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBzdGVwIGZvciB0aGUgdGFyZ2V0LgorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fb3V0cHV0OworICBjbUN1c3RvbUNvbW1hbmQgY2Mobm9fb3V0cHV0LCBieXByb2R1Y3RzLCBkZXBlbmRzLCBjb21tYW5kTGluZXMsIGxmYnQsCisgICAgICAgICAgICAgICAgICAgICBjb21tZW50LCB3b3JraW5nRGlyLCBzdGRQaXBlc1VURjgpOworICBjYy5TZXRFc2NhcGVPbGRTdHlsZShlc2NhcGVPbGRTdHlsZSk7CisgIGNjLlNldEVzY2FwZUFsbG93TWFrZVZhcnModHJ1ZSk7CisgIGNjLlNldFVzZXNUZXJtaW5hbCh1c2VzX3Rlcm1pbmFsKTsKKyAgY2MuU2V0Q29tbWFuZEV4cGFuZExpc3RzKGNvbW1hbmRfZXhwYW5kX2xpc3RzKTsKKyAgY2MuU2V0RGVwZmlsZShkZXBmaWxlKTsKKyAgY2MuU2V0Sm9iUG9vbChqb2JfcG9vbCk7CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgY21DdXN0b21Db21tYW5kVHlwZTo6UFJFX0JVSUxEOgorICAgICAgdGFyZ2V0LT5BZGRQcmVCdWlsZENvbW1hbmQoc3RkOjptb3ZlKGNjKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIGNtQ3VzdG9tQ29tbWFuZFR5cGU6OlBSRV9MSU5LOgorICAgICAgdGFyZ2V0LT5BZGRQcmVMaW5rQ29tbWFuZChzdGQ6Om1vdmUoY2MpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgY21DdXN0b21Db21tYW5kVHlwZTo6UE9TVF9CVUlMRDoKKyAgICAgIHRhcmdldC0+QWRkUG9zdEJ1aWxkQ29tbWFuZChzdGQ6Om1vdmUoY2MpKTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgbWYtPkFkZFRhcmdldEJ5cHJvZHVjdHModGFyZ2V0LCBieXByb2R1Y3RzKTsKK30KKworY21Tb3VyY2VGaWxlKiBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgIGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LAorICBjbUNvbW1hbmRPcmlnaW4gb3JpZ2luLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLCBjb25zdCBzdGQ6OnN0cmluZyYgbWFpbl9kZXBlbmRlbmN5LAorICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCisgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgcmVwbGFjZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKKyAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sLCBib29sIHN0ZFBpcGVzVVRGOCkKK3sKKyAgLy8gQWx3YXlzIGNyZWF0ZSB0aGUgb3V0cHV0IHNvdXJjZXMgYW5kIG1hcmsgdGhlbSBnZW5lcmF0ZWQuCisgIENyZWF0ZUdlbmVyYXRlZFNvdXJjZXMobGcsIG91dHB1dHMsIG9yaWdpbiwgbGZidCk7CisgIENyZWF0ZUdlbmVyYXRlZFNvdXJjZXMobGcsIGJ5cHJvZHVjdHMsIG9yaWdpbiwgbGZidCk7CisKKyAgcmV0dXJuIEFkZEN1c3RvbUNvbW1hbmQoCisgICAgbGcsIGxmYnQsIG91dHB1dHMsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsIG1haW5fZGVwZW5kZW5jeSwgaW1wbGljaXRfZGVwZW5kcywKKyAgICBjb21tYW5kTGluZXMsIGNvbW1lbnQsIHdvcmtpbmdEaXIsIHJlcGxhY2UsIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLAorICAgIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBkZXBmaWxlLCBqb2JfcG9vbCwgc3RkUGlwZXNVVEY4KTsKK30KKwordm9pZCBBcHBlbmRDdXN0b21Db21tYW5kVG9PdXRwdXQoY21Mb2NhbEdlbmVyYXRvciYgbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtSW1wbGljaXREZXBlbmRzTGlzdCYgaW1wbGljaXRfZGVwZW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMpCit7CisgIC8vIExvb2t1cCBhbiBleGlzdGluZyBjb21tYW5kLgorICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IGxnLkdldE1ha2VmaWxlKCktPkdldFNvdXJjZUZpbGVXaXRoT3V0cHV0KG91dHB1dCkpIHsKKyAgICBpZiAoY21DdXN0b21Db21tYW5kKiBjYyA9IHNmLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKKyAgICAgIGNjLT5BcHBlbmRDb21tYW5kcyhjb21tYW5kTGluZXMpOworICAgICAgY2MtPkFwcGVuZERlcGVuZHMoZGVwZW5kcyk7CisgICAgICBjYy0+QXBwZW5kSW1wbGljaXREZXBlbmRzKGltcGxpY2l0X2RlcGVuZHMpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIC8vIE5vIGV4aXN0aW5nIGNvbW1hbmQgZm91bmQuCisgIGxnLkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKAorICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICBjbVN0ckNhdCgiQXR0ZW1wdCB0byBhcHBlbmQgdG8gb3V0cHV0XG4gICIsIG91dHB1dCwKKyAgICAgICAgICAgICAiXG53aGljaCBpcyBub3QgYWxyZWFkeSBhIGN1c3RvbSBjb21tYW5kIG91dHB1dC4iKSwKKyAgICBsZmJ0KTsKK30KKwordm9pZCBBZGRVdGlsaXR5Q29tbWFuZChjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCwKKyAgICAgICAgICAgICAgICAgICAgICAgY21Db21tYW5kT3JpZ2luIG9yaWdpbiwgY21UYXJnZXQqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21VdGlsaXR5T3V0cHV0JiBmb3JjZSwgY29uc3QgY2hhciogd29ya2luZ0RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXNjYXBlT2xkU3R5bGUsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sLCBib29sIHN0ZFBpcGVzVVRGOCkKK3sKKyAgLy8gQWx3YXlzIGNyZWF0ZSB0aGUgYnlwcm9kdWN0IHNvdXJjZXMgYW5kIG1hcmsgdGhlbSBnZW5lcmF0ZWQuCisgIENyZWF0ZUdlbmVyYXRlZFNvdXJjZShsZywgZm9yY2UuTmFtZSwgb3JpZ2luLCBsZmJ0KTsKKyAgQ3JlYXRlR2VuZXJhdGVkU291cmNlcyhsZywgYnlwcm9kdWN0cywgb3JpZ2luLCBsZmJ0KTsKKworICAvLyBVc2UgYW4gZW1wdHkgY29tbWVudCB0byBhdm9pZCBnZW5lcmF0aW9uIG9mIGRlZmF1bHQgY29tbWVudC4KKyAgaWYgKCFjb21tZW50KSB7CisgICAgY29tbWVudCA9ICIiOworICB9CisKKyAgc3RkOjpzdHJpbmcgbm9fbWFpbl9kZXBlbmRlbmN5OworICBjbUltcGxpY2l0RGVwZW5kc0xpc3Qgbm9faW1wbGljaXRfZGVwZW5kczsKKyAgY21Tb3VyY2VGaWxlKiBydWxlID0gQWRkQ3VzdG9tQ29tbWFuZCgKKyAgICBsZywgbGZidCwgeyBmb3JjZS5OYW1lIH0sIGJ5cHJvZHVjdHMsIGRlcGVuZHMsIG5vX21haW5fZGVwZW5kZW5jeSwKKyAgICBub19pbXBsaWNpdF9kZXBlbmRzLCBjb21tYW5kTGluZXMsIGNvbW1lbnQsIHdvcmtpbmdEaXIsCisgICAgLypyZXBsYWNlPSovZmFsc2UsIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLCBjb21tYW5kX2V4cGFuZF9saXN0cywKKyAgICAvKmRlcGZpbGU9Ki8iIiwgam9iX3Bvb2wsIHN0ZFBpcGVzVVRGOCk7CisgIGlmIChydWxlKSB7CisgICAgbGcuR2V0TWFrZWZpbGUoKS0+QWRkVGFyZ2V0Qnlwcm9kdWN0cyh0YXJnZXQsIGJ5cHJvZHVjdHMpOworICB9CisKKyAgaWYgKCFmb3JjZS5OYW1lQ01QMDA0OS5lbXB0eSgpKSB7CisgICAgdGFyZ2V0LT5BZGRTb3VyY2UoZm9yY2UuTmFtZUNNUDAwNDkpOworICB9Cit9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5oIGIvU291cmNlL2NtTG9jYWxHZW5lcmF0b3IuaAppbmRleCAxMjM1OWRiLi4wYzUxYTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbUxvY2FsR2VuZXJhdG9yLmgKQEAgLTcsMjggKzcsMzQgQEAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbV9rd2ltbC5oIgorI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKKyNpbmNsdWRlICJjbUN1c3RvbUNvbW1hbmRUeXBlcy5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAKIGNsYXNzIGNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbjsKIGNsYXNzIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvcjsKK2NsYXNzIGNtQ3VzdG9tQ29tbWFuZExpbmVzOwogY2xhc3MgY21HZW5lcmF0b3JUYXJnZXQ7CiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvcjsKK2NsYXNzIGNtSW1wbGljaXREZXBlbmRzTGlzdDsKIGNsYXNzIGNtTGlua0xpbmVDb21wdXRlcjsKIGNsYXNzIGNtTWFrZWZpbGU7CiBjbGFzcyBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOwogY2xhc3MgY21Tb3VyY2VGaWxlOwogY2xhc3MgY21TdGF0ZTsKK2NsYXNzIGNtVGFyZ2V0OwogY2xhc3MgY21ha2U7CiAKIC8qKiBcY2xhc3MgY21Mb2NhbEdlbmVyYXRvcgpAQCAtMTAwLDggKzEwNiw4IEBACiAKICAgdm9pZCBBZGRBcmNoaXRlY3R1cmVGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsdGVyQXJjaCA9IHN0ZDo6c3RyaW5nKCkpOwogCiAgIHZvaWQgQWRkTGFuZ3VhZ2VGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MsIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CkBAIC0xMTgsNyArMTI0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogICB2b2lkIEFkZENvbXBpbGVyUmVxdWlyZW1lbnRGbGFnKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKICAgLy8hIEFwcGVuZCBmbGFncyB0byBhIHN0cmluZy4KICAgdmlydHVhbCB2b2lkIEFwcGVuZEZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdGbGFncykgY29uc3Q7CkBAIC0xNDMsMTQgKzE1MCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JSZXNwb25zZUZpbGUgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgPSAiIik7CiAKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgR2V0R2VuZXJhdG9yVGFyZ2V0cygpIGNvbnN0CisgIHVzaW5nIEdlbmVyYXRvclRhcmdldFZlY3RvciA9CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yVGFyZ2V0Pj47CisgIGNvbnN0IEdlbmVyYXRvclRhcmdldFZlY3RvciYgR2V0R2VuZXJhdG9yVGFyZ2V0cygpIGNvbnN0CiAgIHsKICAgICByZXR1cm4gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0czsKICAgfQogCi0gIHZvaWQgQWRkR2VuZXJhdG9yVGFyZ2V0KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCk7CisgIHZvaWQgQWRkR2VuZXJhdG9yVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRvclRhcmdldD4gZ3QpOwogICB2b2lkIEFkZEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0KGNtR2VuZXJhdG9yVGFyZ2V0KiBndCk7Ci0gIHZvaWQgQWRkT3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldChjbUdlbmVyYXRvclRhcmdldCogZ3QpOworICB2b2lkIEFkZE93bmVkSW1wb3J0ZWRHZW5lcmF0b3JUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yVGFyZ2V0PiBndCk7CiAKICAgY21HZW5lcmF0b3JUYXJnZXQqIEZpbmRMb2NhbE5vbkFsaWFzR2VuZXJhdG9yVGFyZ2V0KAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdDsKQEAgLTE2MCwxNSArMTY5LDggQEAKICAgICogUHJvY2VzcyBhIGxpc3Qgb2YgaW5jbHVkZSBkaXJlY3RvcmllcwogICAgKi8KICAgdm9pZCBBcHBlbmRJbmNsdWRlRGlyZWN0b3JpZXMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBpbmNsdWRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5jbHVkZXNfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21Tb3VyY2VGaWxlJiBzb3VyY2VGaWxlKSBjb25zdDsKLSAgdm9pZCBBcHBlbmRJbmNsdWRlRGlyZWN0b3JpZXMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBpbmNsdWRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGluY2x1ZGVzX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtU291cmNlRmlsZSYgc291cmNlRmlsZSkgY29uc3QKLSAgewotICAgIHRoaXMtPkFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcyhpbmNsdWRlcywgaW5jbHVkZXNfbGlzdC5jX3N0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlKTsKLSAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVNvdXJjZUZpbGUmIHNvdXJjZUZpbGUpIGNvbnN0OwogICB2b2lkIEFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGluY2x1ZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGluY2x1ZGVzX3ZlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21Tb3VyY2VGaWxlJiBzb3VyY2VGaWxlKSBjb25zdDsKQEAgLTE4OCwxNCArMTkwLDkgQEAKICAgICogRW5jb2RlIGEgbGlzdCBvZiBjb21waWxlIG9wdGlvbnMgZm9yIHRoZSBjb21waWxlcgogICAgKiBjb21tYW5kIGxpbmUuCiAgICAqLwotICB2b2lkIEFwcGVuZENvbXBpbGVPcHRpb25zKHN0ZDo6c3RyaW5nJiBvcHRpb25zLCBjb25zdCBjaGFyKiBvcHRpb25zX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVnZXggPSBudWxscHRyKSBjb25zdDsKICAgdm9pZCBBcHBlbmRDb21waWxlT3B0aW9ucyhzdGQ6OnN0cmluZyYgb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgb3B0aW9uc19saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlZ2V4ID0gbnVsbHB0cikgY29uc3QKLSAgewotICAgIHRoaXMtPkFwcGVuZENvbXBpbGVPcHRpb25zKG9wdGlvbnMsIG9wdGlvbnNfbGlzdC5jX3N0cigpLCByZWdleCk7Ci0gIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWdleCA9IG51bGxwdHIpIGNvbnN0OwogICB2b2lkIEFwcGVuZENvbXBpbGVPcHRpb25zKHN0ZDo6c3RyaW5nJiBvcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3B0aW9uc192ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVnZXggPSBudWxscHRyKSBjb25zdDsKQEAgLTIxMyw4ICsyMTAsNyBAQAogICB2b2lkIEFwcGVuZEZlYXR1cmVPcHRpb25zKHN0ZDo6c3RyaW5nJiBmbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmVhdHVyZSk7CiAKLSAgY29uc3QgY2hhciogR2V0RmVhdHVyZShjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKKyAgY21Qcm9wIEdldEZlYXR1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiAgIC8qKiBcYnJpZWYgR2V0IGFic29sdXRlIHBhdGggdG8gZGVwZW5kZW5jeSBcYSBuYW1lCiAgICAqCkBAIC0yOTIsNiArMjg4LDU1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKKyAgLyoqCisgICAqIEFkZCBhIGN1c3RvbSBQUkVfQlVJTEQsIFBSRV9MSU5LLCBvciBQT1NUX0JVSUxEIGNvbW1hbmQgdG8gYSB0YXJnZXQuCisgICAqLworICBjbVRhcmdldCogQWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY21DdXN0b21Db21tYW5kVHlwZSB0eXBlLAorICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAorICAgIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsCisgICAgY21PYmplY3RMaWJyYXJ5Q29tbWFuZHMgb2JqTGliQ29tbWFuZHMgPSBjbU9iamVjdExpYnJhcnlDb21tYW5kczo6UmVqZWN0LAorICAgIGJvb2wgc3RkUGlwZXNVVEY4ID0gZmFsc2UpOworCisgIC8qKgorICAgKiBBZGQgYSBjdXN0b20gY29tbWFuZCB0byBhIHNvdXJjZSBmaWxlLgorICAgKi8KKyAgY21Tb3VyY2VGaWxlKiBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWluX2RlcGVuZGVuY3ksCisgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKKyAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCisgICAgYm9vbCB1c2VzX3Rlcm1pbmFsID0gZmFsc2UsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSwKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIiwKKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IGZhbHNlKTsKKyAgY21Tb3VyY2VGaWxlKiBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKKyAgICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCisgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKKyAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCisgICAgYm9vbCB1c2VzX3Rlcm1pbmFsID0gZmFsc2UsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSwKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIiwKKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IGZhbHNlKTsKKworICAvKioKKyAgICogQWRkIGEgdXRpbGl0eSB0byB0aGUgYnVpbGQuICBBIHV0aWxpdHkgdGFyZ2V0IGlzIGEgY29tbWFuZCB0aGF0IGlzIHJ1bgorICAgKiBldmVyeSB0aW1lIHRoZSB0YXJnZXQgaXMgYnVpbHQuCisgICAqLworICBjbVRhcmdldCogQWRkVXRpbGl0eUNvbW1hbmQoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHV0aWxpdHlOYW1lLCBib29sIGV4Y2x1ZGVGcm9tQWxsLAorICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCisgICAgY29uc3QgY2hhciogY29tbWVudCA9IG51bGxwdHIsIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLAorICAgIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMgPSBmYWxzZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIsCisgICAgYm9vbCBzdGRQaXBlc1VURjggPSBmYWxzZSk7CisKICAgc3RkOjpzdHJpbmcgR2V0UHJvamVjdE5hbWUoKSBjb25zdDsKIAogICAvKiogQ29tcHV0ZSB0aGUgbGFuZ3VhZ2UgdXNlZCB0byBjb21waWxlIHRoZSBnaXZlbiBzb3VyY2UgZmlsZS4gICovCkBAIC0zNzcsNiArNDIyLDExIEBACiAKICAgLyoqIEZpbGwgb3V0IHRoZXNlIHN0cmluZ3MgZm9yIHRoZSBnaXZlbiB0YXJnZXQuICBMaWJyYXJpZXMgdG8gbGluaywKICAgICogIGZsYWdzLCBhbmQgbGlua2ZsYWdzLiAqLworICB2b2lkIEdldERldmljZUxpbmtGbGFncyhjbUxpbmtMaW5lQ29tcHV0ZXIqIGxpbmtMaW5lQ29tcHV0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIHN0ZDo6c3RyaW5nJiBsaW5rTGlicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGxpbmtGbGFncywgc3RkOjpzdHJpbmcmIGZyYW1ld29ya1BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBsaW5rUGF0aCwgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CisKICAgdm9pZCBHZXRUYXJnZXRGbGFncyhjbUxpbmtMaW5lQ29tcHV0ZXIqIGxpbmtMaW5lQ29tcHV0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgc3RkOjpzdHJpbmcmIGxpbmtMaWJzLAogICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBmbGFncywgc3RkOjpzdHJpbmcmIGxpbmtGbGFncywKQEAgLTM5NSwxMCArNDQ1LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3Q7CiAgIHZvaWQgR2V0VGFyZ2V0Q29tcGlsZUZsYWdzKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBzdGQ6OnN0cmluZyYgZmxhZ3MpOwotICBzdGQ6OnZlY3RvcjxCVDxzdGQ6OnN0cmluZz4+IEdldFRhcmdldENvbXBpbGVGbGFncyhjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBzdGQ6OnN0cmluZyYgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmNoID0gc3RkOjpzdHJpbmcoKSk7CisgIHN0ZDo6dmVjdG9yPEJUPHN0ZDo6c3RyaW5nPj4gR2V0VGFyZ2V0Q29tcGlsZUZsYWdzKAorICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsCisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmNoID0gc3RkOjpzdHJpbmcoKSk7CiAKICAgc3RkOjpzdHJpbmcgR2V0RnJhbWV3b3JrRmxhZ3Moc3RkOjpzdHJpbmcgY29uc3QmIGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcsCkBAIC00MTQsNiArNDY1LDcgQEAKICAgYm9vbCBJc1dhdGNvbVdNYWtlKCkgY29uc3Q7CiAgIGJvb2wgSXNNaW5HV01ha2UoKSBjb25zdDsKICAgYm9vbCBJc05NYWtlKCkgY29uc3Q7CisgIGJvb2wgSXNOaW5qYU11bHRpKCkgY29uc3Q7CiAKICAgdm9pZCBJc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGUgdCwgc3RkOjpzdHJpbmcgY29uc3QmIHRleHQpIGNvbnN0OwogCkBAIC00NjEsMTcgKzUxMywxOCBAQAogICB1c2luZyBHZW5lcmF0b3JUYXJnZXRNYXAgPQogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgY21HZW5lcmF0b3JUYXJnZXQqPjsKICAgR2VuZXJhdG9yVGFyZ2V0TWFwIEdlbmVyYXRvclRhcmdldFNlYXJjaEluZGV4OwotICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+IEdlbmVyYXRvclRhcmdldHM7CisgIEdlbmVyYXRvclRhcmdldFZlY3RvciBHZW5lcmF0b3JUYXJnZXRzOwogCiAgIHN0ZDo6c2V0PGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0Kj4gV2FybkNNUDAwNjM7CiAgIEdlbmVyYXRvclRhcmdldE1hcCBJbXBvcnRlZEdlbmVyYXRvclRhcmdldHM7Ci0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4gT3duZWRJbXBvcnRlZEdlbmVyYXRvclRhcmdldHM7CisgIEdlbmVyYXRvclRhcmdldFZlY3RvciBPd25lZEltcG9ydGVkR2VuZXJhdG9yVGFyZ2V0czsKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBBbGlhc1RhcmdldHM7CiAKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBDb21waWxlcnM7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gVmFyaWFibGVNYXBwaW5nczsKICAgc3RkOjpzdHJpbmcgQ29tcGlsZXJTeXNyb290OwogICBzdGQ6OnN0cmluZyBMaW5rZXJTeXNyb290OworICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBBcHBsZUFyY2hTeXNyb290czsKIAogICBib29sIEVtaXRVbml2ZXJzYWxCaW5hcnlGbGFnczsKIApAQCAtNDg2LDYgKzUzOSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0VHlwZSk7CiAKICAgdm9pZCBDb21wdXRlT2JqZWN0TWF4UGF0aCgpOworICBib29sIEFsbEFwcGxlQXJjaFN5c3Jvb3RzQXJlVGhlU2FtZShjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGFyY2hzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzeXNyb290KTsKKworICB2b2lkIENvcHlQY2hDb21waWxlUGRiKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIFJldXNlRnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogcmV1c2VUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBleHRlbnNpb25zKTsKIH07CiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCkBAIC00OTQsNCArNTU0LDQ2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBtYXhfdG90YWxfbGVuKTsKICNlbmRpZgogCituYW1lc3BhY2UgZGV0YWlsIHsKK3ZvaWQgQWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KGNtTG9jYWxHZW5lcmF0b3ImIGxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sIGNtVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21DdXN0b21Db21tYW5kVHlwZSB0eXBlLCBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlc190ZXJtaW5hbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBib29sIHN0ZFBpcGVzVVRGOCk7CisKK2NtU291cmNlRmlsZSogQWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICBjbUxvY2FsR2VuZXJhdG9yJiBsZywgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCwKKyAgY21Db21tYW5kT3JpZ2luIG9yaWdpbiwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKKyAgY29uc3QgY21JbXBsaWNpdERlcGVuZHNMaXN0JiBpbXBsaWNpdF9kZXBlbmRzLAorICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAorICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCisgIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpOworCit2b2lkIEFwcGVuZEN1c3RvbUNvbW1hbmRUb091dHB1dChjbUxvY2FsR2VuZXJhdG9yJiBsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21JbXBsaWNpdERlcGVuZHNMaXN0JiBpbXBsaWNpdF9kZXBlbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcyk7CisKK3ZvaWQgQWRkVXRpbGl0eUNvbW1hbmQoY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQsCisgICAgICAgICAgICAgICAgICAgICAgIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sIGNtVGFyZ2V0KiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtVXRpbGl0eU91dHB1dCYgZm9yY2UsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGVzY2FwZU9sZFN0eWxlLCBjb25zdCBjaGFyKiBjb21tZW50LAorICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsR2hzTXVsdGlHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTG9jYWxHaHNNdWx0aUdlbmVyYXRvci5jeHgKaW5kZXggNGIxMDc5OC4uYTIzYWQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxHaHNNdWx0aUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTG9jYWxHaHNNdWx0aUdlbmVyYXRvci5jeHgKQEAgLTUsMTEgKzUsMTIgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21HaHNNdWx0aVRhcmdldEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtR2xvYmFsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCi0jaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgogCkBAIC0zMSw3ICszMiw3IEBACiB2b2lkIGNtTG9jYWxHaHNNdWx0aUdlbmVyYXRvcjo6R2VuZXJhdGVUYXJnZXRzRGVwdGhGaXJzdCgKICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgcmVtYWluaW5nKQogewotICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgeworICBpZiAoIXRhcmdldC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICByZXR1cm47CiAgIH0KICAgLy8gRmluZCB0aGlzIHRhcmdldCBpbiB0aGUgbGlzdCBvZiByZW1haW5pbmcgdGFyZ2V0cy4KQEAgLTUwLDEwICs1MSwxMSBAQAogCiB2b2lkIGNtTG9jYWxHaHNNdWx0aUdlbmVyYXRvcjo6R2VuZXJhdGUoKQogewotICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+IHJlbWFpbmluZyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiByZW1haW5pbmc7CisgIGNtOjphcHBlbmQocmVtYWluaW5nLCB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpOwogICBmb3IgKGF1dG8mIHQgOiByZW1haW5pbmcpIHsKICAgICBpZiAodCkgewotICAgICAgR2VuZXJhdGVUYXJnZXRzRGVwdGhGaXJzdCh0LCByZW1haW5pbmcpOworICAgICAgdGhpcy0+R2VuZXJhdGVUYXJnZXRzRGVwdGhGaXJzdCh0LCByZW1haW5pbmcpOwogICAgIH0KICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTG9jYWxOaW5qYUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21Mb2NhbE5pbmphR2VuZXJhdG9yLmN4eAppbmRleCAxMzRiYmUxLi5lZjM0OTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbE5pbmphR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21Mb2NhbE5pbmphR2VuZXJhdG9yLmN4eApAQCAtMjMsMTIgKzIzLDE0IEBACiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU5pbmphVGFyZ2V0R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgorI2luY2x1ZGUgImNtVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKIAogY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpjbUxvY2FsTmluamFHZW5lcmF0b3IoY21HbG9iYWxHZW5lcmF0b3IqIGdnLApAQCAtNjEsNyArNjMsMTIgQEAKICAgICB0aGlzLT5Ib21lUmVsYXRpdmVPdXRwdXRQYXRoLmNsZWFyKCk7CiAgIH0KIAotICB0aGlzLT5Xcml0ZVByb2Nlc3NlZE1ha2VmaWxlKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpKTsKKyAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc011bHRpQ29uZmlnKCkpIHsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPkdldENvbmZpZ05hbWVzKCkpIHsKKyAgICAgIHRoaXMtPldyaXRlUHJvY2Vzc2VkTWFrZWZpbGUodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oY29uZmlnKSk7CisgICAgfQorICB9CisgIHRoaXMtPldyaXRlUHJvY2Vzc2VkTWFrZWZpbGUodGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpKTsKICNpZmRlZiBOSU5KQV9HRU5fVkVSQk9TRV9GSUxFUwogICB0aGlzLT5Xcml0ZVByb2Nlc3NlZE1ha2VmaWxlKHRoaXMtPkdldFJ1bGVzRmlsZVN0cmVhbSgpKTsKICNlbmRpZgpAQCAtODIsMTggKzg5LDY2IEBACiAgICAgfQogICB9CiAKLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7Ci0gICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgICBpZiAoIXRhcmdldC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICBhdXRvIHRnID0gY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6TmV3KHRhcmdldCk7CisgICAgYXV0byB0ZyA9IGNtTmluamFUYXJnZXRHZW5lcmF0b3I6Ok5ldyh0YXJnZXQuZ2V0KCkpOwogICAgIGlmICh0ZykgewotICAgICAgdGctPkdlbmVyYXRlKCk7CisgICAgICBpZiAodGFyZ2V0LT5UYXJnZXQtPklzUGVyQ29uZmlnKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5HZXRDb25maWdOYW1lcygpKSB7CisgICAgICAgICAgdGctPkdlbmVyYXRlKGNvbmZpZyk7CisgICAgICAgICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCAmJgorICAgICAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgICAgICAgICBjbU5pbmphQnVpbGQgcGhvbnlBbGlhcygicGhvbnkiKTsKKyAgICAgICAgICAgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldE91dHB1dHMoCisgICAgICAgICAgICAgIHRhcmdldC5nZXQoKSwgcGhvbnlBbGlhcy5PdXRwdXRzLCAiIiwgRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CisgICAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXRPdXRwdXRzKAorICAgICAgICAgICAgICB0YXJnZXQuZ2V0KCksIHBob255QWxpYXMuRXhwbGljaXREZXBzLCBjb25maWcsCisgICAgICAgICAgICAgIERlcGVuZE9uVGFyZ2V0QXJ0aWZhY3QpOworICAgICAgICAgICAgdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCgKKyAgICAgICAgICAgICAgKnRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkdldENvbmZpZ0ZpbGVTdHJlYW0oY29uZmlnKSwKKyAgICAgICAgICAgICAgcGhvbnlBbGlhcyk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQgJiYKKyAgICAgICAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc011bHRpQ29uZmlnKCkpIHsKKyAgICAgICAgICBpZiAoIXRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkdldERlZmF1bHRDb25maWdzKCkuZW1wdHkoKSkgeworICAgICAgICAgICAgY21OaW5qYUJ1aWxkIHBob255QWxpYXMoInBob255Iik7CisgICAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXRPdXRwdXRzKAorICAgICAgICAgICAgICB0YXJnZXQuZ2V0KCksIHBob255QWxpYXMuT3V0cHV0cywgIiIsIERlcGVuZE9uVGFyZ2V0QXJ0aWZhY3QpOworICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOgorICAgICAgICAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5HZXREZWZhdWx0Q29uZmlncygpKSB7CisgICAgICAgICAgICAgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldE91dHB1dHMoCisgICAgICAgICAgICAgICAgdGFyZ2V0LmdldCgpLCBwaG9ueUFsaWFzLkV4cGxpY2l0RGVwcywgY29uZmlnLAorICAgICAgICAgICAgICAgIERlcGVuZE9uVGFyZ2V0QXJ0aWZhY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCgKKyAgICAgICAgICAgICAgKnRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkdldERlZmF1bHRGaWxlU3RyZWFtKCksCisgICAgICAgICAgICAgIHBob255QWxpYXMpOworICAgICAgICAgIH0KKyAgICAgICAgICBjbU5pbmphQnVpbGQgcGhvbnlBbGlhcygicGhvbnkiKTsKKyAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXRPdXRwdXRzKAorICAgICAgICAgICAgdGFyZ2V0LmdldCgpLCBwaG9ueUFsaWFzLk91dHB1dHMsICJhbGwiLCBEZXBlbmRPblRhcmdldEFydGlmYWN0KTsKKyAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPkdldENvbmZpZ05hbWVzKCkpIHsKKyAgICAgICAgICAgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldE91dHB1dHMoCisgICAgICAgICAgICAgIHRhcmdldC5nZXQoKSwgcGhvbnlBbGlhcy5FeHBsaWNpdERlcHMsIGNvbmZpZywKKyAgICAgICAgICAgICAgRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CisgICAgICAgICAgfQorICAgICAgICAgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPldyaXRlQnVpbGQoCisgICAgICAgICAgICAqdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+R2V0RGVmYXVsdEZpbGVTdHJlYW0oKSwKKyAgICAgICAgICAgIHBob255QWxpYXMpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICB0Zy0+R2VuZXJhdGUoIiIpOworICAgICAgfQogICAgIH0KICAgfQogCi0gIHRoaXMtPldyaXRlQ3VzdG9tQ29tbWFuZEJ1aWxkU3RhdGVtZW50cygpOwotICB0aGlzLT5BZGRpdGlvbmFsQ2xlYW5GaWxlcygpOworICBmb3IgKGF1dG8gY29uc3QmIGNvbmZpZyA6IHRoaXMtPkdldENvbmZpZ05hbWVzKCkpIHsKKyAgICB0aGlzLT5Xcml0ZUN1c3RvbUNvbW1hbmRCdWlsZFN0YXRlbWVudHMoY29uZmlnKTsKKyAgICB0aGlzLT5BZGRpdGlvbmFsQ2xlYW5GaWxlcyhjb25maWcpOworICB9CiB9CiAKIC8vIFRPRE86IFBpY2tlZCB1cCBmcm9tIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLiAgUmVmYWN0b3IgaXQuCkBAIC0xMzAsOCArMTg1LDkgQEAKICAgYm9vbCBmb3JjZUZ1bGxQYXRocykKIHsKICAgaWYgKGZvcmNlRnVsbFBhdGhzKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHBhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KTsKKyAgICByZXR1cm4gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAorICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwYXRoLCB0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpLAorICAgICAgZm9ybWF0KTsKICAgfQogICByZXR1cm4gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAogICAgIHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpLCBwYXRoKSwKQEAgLTE0MCw5ICsxOTYsMTUgQEAKIAogLy8gUHJpdmF0ZSBtZXRob2RzLgogCi1jbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6R2V0QnVpbGRGaWxlU3RyZWFtKCkgY29uc3QKK2NtR2VuZXJhdGVkRmlsZVN0cmVhbSYgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpHZXRJbXBsRmlsZVN0cmVhbSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgcmV0dXJuICp0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5HZXRCdWlsZEZpbGVTdHJlYW0oKTsKKyAgcmV0dXJuICp0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5HZXRJbXBsRmlsZVN0cmVhbShjb25maWcpOworfQorCitjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6R2V0Q29tbW9uRmlsZVN0cmVhbSgpIGNvbnN0Cit7CisgIHJldHVybiAqdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpOwogfQogCiBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6R2V0UnVsZXNGaWxlU3RyZWFtKCkgY29uc3QKQEAgLTE2MiwxMCArMjI0LDIyIEBACiAKIHZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpXcml0ZUJ1aWxkRmlsZVRvcCgpCiB7Ci0gIC8vIEZvciB0aGUgYnVpbGQgZmlsZS4KLSAgdGhpcy0+V3JpdGVQcm9qZWN0SGVhZGVyKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpKTsKLSAgdGhpcy0+V3JpdGVOaW5qYVJlcXVpcmVkVmVyc2lvbih0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSk7Ci0gIHRoaXMtPldyaXRlTmluamFGaWxlc0luY2x1c2lvbih0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSk7CisgIHRoaXMtPldyaXRlUHJvamVjdEhlYWRlcih0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCkpOworCisgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSB7CisgICAgZm9yIChhdXRvIGNvbnN0JiBjb25maWcgOiB0aGlzLT5HZXRDb25maWdOYW1lcygpKSB7CisgICAgICBhdXRvJiBzdHJlYW0gPSB0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShjb25maWcpOworICAgICAgdGhpcy0+V3JpdGVQcm9qZWN0SGVhZGVyKHN0cmVhbSk7CisgICAgICB0aGlzLT5Xcml0ZU5pbmphUmVxdWlyZWRWZXJzaW9uKHN0cmVhbSk7CisgICAgICB0aGlzLT5Xcml0ZU5pbmphQ29uZmlndXJhdGlvblZhcmlhYmxlKHN0cmVhbSwgY29uZmlnKTsKKyAgICAgIHRoaXMtPldyaXRlTmluamFGaWxlc0luY2x1c2lvbkNvbmZpZyhzdHJlYW0pOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICB0aGlzLT5Xcml0ZU5pbmphUmVxdWlyZWRWZXJzaW9uKHRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKSk7CisgICAgdGhpcy0+V3JpdGVOaW5qYUNvbmZpZ3VyYXRpb25WYXJpYWJsZSh0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lcygpLmZyb250KCkpOworICB9CisgIHRoaXMtPldyaXRlTmluamFGaWxlc0luY2x1c2lvbkNvbW1vbih0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCkpOwogCiAgIC8vIEZvciB0aGUgcnVsZSBmaWxlLgogICB0aGlzLT5Xcml0ZVByb2plY3RIZWFkZXIodGhpcy0+R2V0UnVsZXNGaWxlU3RyZWFtKCkpOwpAQCAtMTc0LDggKzI0OCw4IEBACiB2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVQcm9qZWN0SGVhZGVyKHN0ZDo6b3N0cmVhbSYgb3MpCiB7CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcihvcyk7Ci0gIG9zIDw8ICIjIFByb2plY3Q6ICIgPDwgdGhpcy0+R2V0UHJvamVjdE5hbWUoKSA8PCBzdGQ6OmVuZGwKLSAgICAgPDwgIiMgQ29uZmlndXJhdGlvbjogIiA8PCB0aGlzLT5Db25maWdOYW1lIDw8IHN0ZDo6ZW5kbDsKKyAgb3MgPDwgIiMgUHJvamVjdDogIiA8PCB0aGlzLT5HZXRQcm9qZWN0TmFtZSgpIDw8ICdcbicKKyAgICAgPDwgIiMgQ29uZmlndXJhdGlvbnM6ICIgPDwgY21Kb2luKHRoaXMtPkdldENvbmZpZ05hbWVzKCksICIsICIpIDw8ICdcbic7CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcihvcyk7CiB9CiAKQEAgLTIwMiwzMSArMjc2LDM3IEBACiAKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVDb21tZW50KAogICAgIG9zLCAiTWluaW1hbCB2ZXJzaW9uIG9mIE5pbmphIHJlcXVpcmVkIGJ5IHRoaXMgZmlsZSIpOwotICBvcyA8PCAibmluamFfcmVxdWlyZWRfdmVyc2lvbiA9ICIgPDwgcmVxdWlyZWRWZXJzaW9uIDw8IHN0ZDo6ZW5kbAotICAgICA8PCBzdGQ6OmVuZGw7CisgIG9zIDw8ICJuaW5qYV9yZXF1aXJlZF92ZXJzaW9uID0gIiA8PCByZXF1aXJlZFZlcnNpb24gPDwgIlxuXG4iOworfQorCit2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVOaW5qYUNvbmZpZ3VyYXRpb25WYXJpYWJsZSgKKyAgc3RkOjpvc3RyZWFtJiBvcywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKK3sKKyAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVWYXJpYWJsZSgKKyAgICBvcywgIkNPTkZJR1VSQVRJT04iLCBjb25maWcsCisgICAgIlNldCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvciBjdXN0b20gY29tbWFuZHMuIik7CiB9CiAKIHZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpXcml0ZVBvb2xzKHN0ZDo6b3N0cmVhbSYgb3MpCiB7CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcihvcyk7CiAKLSAgY29uc3QgY2hhciogam9icG9vbHMgPQorICBjbVByb3Agam9icG9vbHMgPQogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoIkpPQl9QT09MUyIpOwogICBpZiAoIWpvYnBvb2xzKSB7Ci0gICAgam9icG9vbHMgPSB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKCJDTUFLRV9KT0JfUE9PTFMiKTsKKyAgICBqb2Jwb29scyA9IHRoaXMtPkdldE1ha2VmaWxlKCktPkdldERlZigiQ01BS0VfSk9CX1BPT0xTIik7CiAgIH0KICAgaWYgKGpvYnBvb2xzKSB7CiAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVDb21tZW50KAogICAgICAgb3MsICJQb29scyBkZWZpbmVkIGJ5IGdsb2JhbCBwcm9wZXJ0eSBKT0JfUE9PTFMiKTsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcG9vbHMgPSBjbUV4cGFuZGVkTGlzdChqb2Jwb29scyk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBvb2xzID0gY21FeHBhbmRlZExpc3QoKmpvYnBvb2xzKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBwb29sIDogcG9vbHMpIHsKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZXEgPSBwb29sLmZpbmQoJz0nKTsKICAgICAgIHVuc2lnbmVkIGludCBqb2JzOwogICAgICAgaWYgKGVxICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmCiAgICAgICAgICAgc3NjYW5mKHBvb2wuY19zdHIoKSArIGVxLCAiPSV1IiwgJmpvYnMpID09IDEpIHsKLSAgICAgICAgb3MgPDwgInBvb2wgIiA8PCBwb29sLnN1YnN0cigwLCBlcSkgPDwgc3RkOjplbmRsOwotICAgICAgICBvcyA8PCAiICBkZXB0aCA9ICIgPDwgam9icyA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIG9zIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgb3MgPDwgInBvb2wgIiA8PCBwb29sLnN1YnN0cigwLCBlcSkgPDwgIlxuICBkZXB0aCA9ICIgPDwgam9icworICAgICAgICAgICA8PCAiXG5cbiI7CiAgICAgICB9IGVsc2UgewogICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiSW52YWxpZCBwb29sIGRlZmluZWQgYnkgcHJvcGVydHkgJ0pPQl9QT09MUyc6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sKTsKQEAgLTIzNSwxMSArMzE1LDIzIEBACiAgIH0KIH0KIAotdm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlTmluamFGaWxlc0luY2x1c2lvbihzdGQ6Om9zdHJlYW0mIG9zKQordm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlTmluamFGaWxlc0luY2x1c2lvbkNvbmZpZyhzdGQ6Om9zdHJlYW0mIG9zKQogewogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwotICBvcyA8PCAiIyBJbmNsdWRlIGF1eGlsaWFyeSBmaWxlcy5cbiIKLSAgICAgPDwgIlxuIjsKKyAgb3MgPDwgIiMgSW5jbHVkZSBhdXhpbGlhcnkgZmlsZXMuXG5cbiI7CisgIGNtR2xvYmFsTmluamFHZW5lcmF0b3IqIG5nID0gdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QgbmluamFDb21tb25GaWxlID0KKyAgICBuZy0+TmluamFPdXRwdXRQYXRoKGNtR2xvYmFsTmluamFNdWx0aUdlbmVyYXRvcjo6TklOSkFfQ09NTU9OX0ZJTEUpOworICBzdGQ6OnN0cmluZyBjb25zdCBjb21tb25GaWxlUGF0aCA9IG5nLT5FbmNvZGVQYXRoKG5pbmphQ29tbW9uRmlsZSk7CisgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlSW5jbHVkZShvcywgY29tbW9uRmlsZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5jbHVkZSBjb21tb24gZmlsZS4iKTsKKyAgb3MgPDwgIlxuIjsKK30KKwordm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlTmluamFGaWxlc0luY2x1c2lvbkNvbW1vbihzdGQ6Om9zdHJlYW0mIG9zKQoreworICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOworICBvcyA8PCAiIyBJbmNsdWRlIGF1eGlsaWFyeSBmaWxlcy5cblxuIjsKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvciogbmcgPSB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpOwogICBzdGQ6OnN0cmluZyBjb25zdCBuaW5qYVJ1bGVzRmlsZSA9CiAgICAgbmctPk5pbmphT3V0cHV0UGF0aChjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpOSU5KQV9SVUxFU19GSUxFKTsKQEAgLTI1MiwzNiArMzQ0LDQxIEBACiB2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVQcm9jZXNzZWRNYWtlZmlsZShzdGQ6Om9zdHJlYW0mIG9zKQogewogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIob3MpOwotICBvcyA8PCAiIyBXcml0ZSBzdGF0ZW1lbnRzIGRlY2xhcmVkIGluIENNYWtlTGlzdHMudHh0OiIgPDwgc3RkOjplbmRsCisgIG9zIDw8ICIjIFdyaXRlIHN0YXRlbWVudHMgZGVjbGFyZWQgaW4gQ01ha2VMaXN0cy50eHQ6XG4iCiAgICAgIDw8ICIjICIgPDwgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX0NVUlJFTlRfTElTVF9GSUxFIikKLSAgICAgPDwgc3RkOjplbmRsOworICAgICA8PCAnXG4nOwogICBpZiAodGhpcy0+SXNSb290TWFrZWZpbGUoKSkgewotICAgIG9zIDw8ICIjIFdoaWNoIGlzIHRoZSByb290IGZpbGUuIiA8PCBzdGQ6OmVuZGw7CisgICAgb3MgPDwgIiMgV2hpY2ggaXMgdGhlIHJvb3QgZmlsZS5cbiI7CiAgIH0KICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKG9zKTsKLSAgb3MgPDwgc3RkOjplbmRsOworICBvcyA8PCAnXG4nOwogfQogCiB2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6QXBwZW5kVGFyZ2V0T3V0cHV0cyhjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21OaW5qYURlcHMmIG91dHB1dHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphRGVwcyYgb3V0cHV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldE91dHB1dHModGFyZ2V0LCBvdXRwdXRzKTsKKyAgdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+QXBwZW5kVGFyZ2V0T3V0cHV0cyh0YXJnZXQsIG91dHB1dHMsIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRPblRhcmdldEFydGlmYWN0KTsKIH0KIAogdm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OkFwcGVuZFRhcmdldERlcGVuZHMoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFEZXBzJiBvdXRwdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21OaW5qYVRhcmdldERlcGVuZHMgZGVwZW5kcykKIHsKLSAgdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+QXBwZW5kVGFyZ2V0RGVwZW5kcyh0YXJnZXQsIG91dHB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyk7CisgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHModGFyZ2V0LCBvdXRwdXRzLCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZywgZGVwZW5kcyk7CiB9CiAKIHZvaWQgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpBcHBlbmRDdXN0b21Db21tYW5kRGVwcygKLSAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNvbnN0JiBjY2csIGNtTmluamFEZXBzJiBuaW5qYURlcHMpCisgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjb25zdCYgY2NnLCBjbU5pbmphRGVwcyYgbmluamFEZXBzLAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpIDogY2NnLkdldERlcGVuZHMoKSkgewogICAgIHN0ZDo6c3RyaW5nIGRlcDsKLSAgICBpZiAodGhpcy0+R2V0UmVhbERlcGVuZGVuY3koaSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBkZXApKSB7CisgICAgaWYgKHRoaXMtPkdldFJlYWxEZXBlbmRlbmN5KGksIGNvbmZpZywgZGVwKSkgewogICAgICAgbmluamFEZXBzLnB1c2hfYmFjaygKICAgICAgICAgdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+Q29udmVydFRvTmluamFQYXRoKGRlcCkpOwogICAgIH0KQEAgLTQxNiw2ICs1MTMsOCBAQAogdm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OkFwcGVuZEN1c3RvbUNvbW1hbmRMaW5lcygKICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNvbnN0JiBjY2csIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY21kTGluZXMpCiB7CisgIGF1dG8qIGdnID0gdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKTsKKwogICBpZiAoY2NnLkdldE51bWJlck9mQ29tbWFuZHMoKSA+IDApIHsKICAgICBzdGQ6OnN0cmluZyB3ZCA9IGNjZy5HZXRXb3JraW5nRGlyZWN0b3J5KCk7CiAgICAgaWYgKHdkLmVtcHR5KCkpIHsKQEAgLTQzNyw4ICs1MzYsMTAgQEAKIAogICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGNjZy5HZXROdW1iZXJPZkNvbW1hbmRzKCk7ICsraSkgewogICAgIGNtZExpbmVzLnB1c2hfYmFjayhsYXVuY2hlciArCi0gICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChjY2cuR2V0Q29tbWFuZChpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkpOworICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgY2NnLkdldENvbW1hbmQoaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2ctPklzTXVsdGlDb25maWcoKSA/IGNtT3V0cHV0Q29udmVydGVyOjpOSU5KQU1VTFRJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkpOwogCiAgICAgc3RkOjpzdHJpbmcmIGNtZCA9IGNtZExpbmVzLmJhY2soKTsKICAgICBjY2cuQXBwZW5kQXJndW1lbnRzKGksIGNtZCk7CkBAIC00NDYsMTQgKzU0NywxNSBAQAogfQogCiB2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVDdXN0b21Db21tYW5kQnVpbGRTdGF0ZW1lbnQoCi0gIGNtQ3VzdG9tQ29tbWFuZCBjb25zdCogY2MsIGNvbnN0IGNtTmluamFEZXBzJiBvcmRlck9ubHlEZXBzKQorICBjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGNjLCBjb25zdCBjbU5pbmphRGVwcyYgb3JkZXJPbmx5RGVwcywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvciogZ2cgPSB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpOwotICBpZiAoZ2ctPlNlZW5DdXN0b21Db21tYW5kKGNjKSkgeworICBpZiAoZ2ctPlNlZW5DdXN0b21Db21tYW5kKGNjLCBjb25maWcpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZygqY2MsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgdGhpcyk7CisgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coKmNjLCBjb25maWcsIHRoaXMpOwogCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cyA9IGNjZy5HZXRPdXRwdXRzKCk7CiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cyA9IGNjZy5HZXRCeXByb2R1Y3RzKCk7CkBAIC00ODQsNyArNTg2LDcgQEAKICAgfQogCiAgIGNtTmluamFEZXBzIG5pbmphRGVwczsKLSAgdGhpcy0+QXBwZW5kQ3VzdG9tQ29tbWFuZERlcHMoY2NnLCBuaW5qYURlcHMpOworICB0aGlzLT5BcHBlbmRDdXN0b21Db21tYW5kRGVwcyhjY2csIG5pbmphRGVwcywgY29uZmlnKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21kTGluZXM7CiAgIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmRMaW5lcyhjY2csIGNtZExpbmVzKTsKQEAgLTQ5NSw3ICs1OTcsNyBAQAogICAgIGJ1aWxkLk91dHB1dHMgPSBzdGQ6Om1vdmUobmluamFPdXRwdXRzKTsKICAgICBidWlsZC5FeHBsaWNpdERlcHMgPSBzdGQ6Om1vdmUobmluamFEZXBzKTsKICAgICBidWlsZC5PcmRlck9ubHlEZXBzID0gb3JkZXJPbmx5RGVwczsKLSAgICBnZy0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgYnVpbGQpOworICAgIGdnLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGNvbmZpZyksIGJ1aWxkKTsKICAgfSBlbHNlIHsKICAgICBzdGQ6OnN0cmluZyBjdXN0b21TdGVwID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKG5pbmphT3V0cHV0c1swXSk7CiAgICAgLy8gSGFzaCBmdWxsIHBhdGggdG8gbWFrZSB1bmlxdWUuCkBAIC01MDcsOCArNjA5LDggQEAKICAgICAgIHRoaXMtPkJ1aWxkQ29tbWFuZExpbmUoY21kTGluZXMsIGN1c3RvbVN0ZXApLAogICAgICAgdGhpcy0+Q29uc3RydWN0Q29tbWVudChjY2cpLCAiQ3VzdG9tIGNvbW1hbmQgZm9yICIgKyBuaW5qYU91dHB1dHNbMF0sCiAgICAgICBjYy0+R2V0RGVwZmlsZSgpLCBjYy0+R2V0Sm9iUG9vbCgpLCBjYy0+R2V0VXNlc1Rlcm1pbmFsKCksCi0gICAgICAvKnJlc3RhdCovICFzeW1ib2xpYyB8fCAhYnlwcm9kdWN0cy5lbXB0eSgpLCBuaW5qYU91dHB1dHMsIG5pbmphRGVwcywKLSAgICAgIG9yZGVyT25seURlcHMpOworICAgICAgLypyZXN0YXQqLyAhc3ltYm9saWMgfHwgIWJ5cHJvZHVjdHMuZW1wdHkoKSwgbmluamFPdXRwdXRzLCBjb25maWcsCisgICAgICBuaW5qYURlcHMsIG9yZGVyT25seURlcHMpOwogICB9CiB9CiAKQEAgLTUyNCw3ICs2MjYsOCBAQAogICBpbnMuZmlyc3QtPnNlY29uZC5pbnNlcnQodGFyZ2V0KTsKIH0KIAotdm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OldyaXRlQ3VzdG9tQ29tbWFuZEJ1aWxkU3RhdGVtZW50cygpCit2b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVDdXN0b21Db21tYW5kQnVpbGRTdGF0ZW1lbnRzKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCogY3VzdG9tQ29tbWFuZCA6IHRoaXMtPkN1c3RvbUNvbW1hbmRzKSB7CiAgICAgYXV0byBpID0gdGhpcy0+Q3VzdG9tQ29tbWFuZFRhcmdldHMuZmluZChjdXN0b21Db21tYW5kKTsKQEAgLTU0MiwxNSArNjQ1LDE2IEBACiAgICAgYXV0byBqID0gaS0+c2Vjb25kLmJlZ2luKCk7CiAgICAgYXNzZXJ0KGogIT0gaS0+c2Vjb25kLmVuZCgpKTsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY2NUYXJnZXREZXBzOwotICAgIHRoaXMtPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHNDbG9zdXJlKCpqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjVGFyZ2V0RGVwcyk7CisgICAgdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+QXBwZW5kVGFyZ2V0RGVwZW5kc0Nsb3N1cmUoCisgICAgICAqaiwgY2NUYXJnZXREZXBzLCBjb25maWcpOwogICAgIHN0ZDo6c29ydChjY1RhcmdldERlcHMuYmVnaW4oKSwgY2NUYXJnZXREZXBzLmVuZCgpKTsKICAgICArK2o7CiAKICAgICBmb3IgKDsgaiAhPSBpLT5zZWNvbmQuZW5kKCk7ICsraikgewogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGpEZXBzOwogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcHNJbnRlcnNlY3Rpb247Ci0gICAgICB0aGlzLT5HZXRHbG9iYWxOaW5qYUdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXREZXBlbmRzQ2xvc3VyZSgqaiwgakRlcHMpOworICAgICAgdGhpcy0+R2V0R2xvYmFsTmluamFHZW5lcmF0b3IoKS0+QXBwZW5kVGFyZ2V0RGVwZW5kc0Nsb3N1cmUoKmosIGpEZXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgICAgIHN0ZDo6c29ydChqRGVwcy5iZWdpbigpLCBqRGVwcy5lbmQoKSk7CiAgICAgICBzdGQ6OnNldF9pbnRlcnNlY3Rpb24oY2NUYXJnZXREZXBzLmJlZ2luKCksIGNjVGFyZ2V0RGVwcy5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqRGVwcy5iZWdpbigpLCBqRGVwcy5lbmQoKSwKQEAgLTU1OCwxNyArNjYyLDE2IEBACiAgICAgICBjY1RhcmdldERlcHMgPSBkZXBzSW50ZXJzZWN0aW9uOwogICAgIH0KIAotICAgIHRoaXMtPldyaXRlQ3VzdG9tQ29tbWFuZEJ1aWxkU3RhdGVtZW50KGktPmZpcnN0LCBjY1RhcmdldERlcHMpOworICAgIHRoaXMtPldyaXRlQ3VzdG9tQ29tbWFuZEJ1aWxkU3RhdGVtZW50KGktPmZpcnN0LCBjY1RhcmdldERlcHMsIGNvbmZpZyk7CiAgIH0KIH0KIAogc3RkOjpzdHJpbmcgY21Mb2NhbE5pbmphR2VuZXJhdG9yOjpNYWtlQ3VzdG9tTGF1bmNoZXIoCiAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjb25zdCYgY2NnKQogewotICBjb25zdCBjaGFyKiBwcm9wZXJ0eV92YWx1ZSA9Ci0gICAgdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJSVUxFX0xBVU5DSF9DVVNUT00iKTsKKyAgY21Qcm9wIHByb3BlcnR5X3ZhbHVlID0gdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJSVUxFX0xBVU5DSF9DVVNUT00iKTsKIAotICBpZiAoIXByb3BlcnR5X3ZhbHVlIHx8ICEqcHJvcGVydHlfdmFsdWUpIHsKKyAgaWYgKCFjbU5vbmVtcHR5KHByb3BlcnR5X3ZhbHVlKSkgewogICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwogICB9CiAKQEAgLTU5MCw3ICs2OTMsNyBAQAogICBzdGQ6OnVuaXF1ZV9wdHI8Y21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcj4gcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIoCiAgICAgdGhpcy0+Q3JlYXRlUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIoKSk7CiAKLSAgc3RkOjpzdHJpbmcgbGF1bmNoZXIgPSBwcm9wZXJ0eV92YWx1ZTsKKyAgc3RkOjpzdHJpbmcgbGF1bmNoZXIgPSAqcHJvcGVydHlfdmFsdWU7CiAgIHJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLT5FeHBhbmRSdWxlVmFyaWFibGVzKHRoaXMsIGxhdW5jaGVyLCB2YXJzKTsKICAgaWYgKCFsYXVuY2hlci5lbXB0eSgpKSB7CiAgICAgbGF1bmNoZXIgKz0gIiAiOwpAQCAtNTk5LDE1ICs3MDIsMTMgQEAKICAgcmV0dXJuIGxhdW5jaGVyOwogfQogCi12b2lkIGNtTG9jYWxOaW5qYUdlbmVyYXRvcjo6QWRkaXRpb25hbENsZWFuRmlsZXMoKQordm9pZCBjbUxvY2FsTmluamFHZW5lcmF0b3I6OkFkZGl0aW9uYWxDbGVhbkZpbGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wX3ZhbHVlID0KKyAgaWYgKGNtUHJvcCBwcm9wX3ZhbHVlID0KICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJBRERJVElPTkFMX0NMRUFOX0ZJTEVTIikpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY2xlYW5GaWxlczsKICAgICB7Ci0gICAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgIHByb3BfdmFsdWUsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSksCisgICAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgqcHJvcF92YWx1ZSwgdGhpcywgY29uZmlnKSwKICAgICAgICAgICAgICAgICAgICBjbGVhbkZpbGVzKTsKICAgICB9CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGJpbmFyeURpciA9IHRoaXMtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKQEAgLTYxNSw3ICs3MTYsNyBAQAogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGNsZWFuRmlsZSA6IGNsZWFuRmlsZXMpIHsKICAgICAgIC8vIFN1cHBvcnQgcmVsYXRpdmUgcGF0aHMKICAgICAgIGdnLT5BZGRBZGRpdGlvbmFsQ2xlYW5GaWxlKAotICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNsZWFuRmlsZSwgYmluYXJ5RGlyKSk7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoY2xlYW5GaWxlLCBiaW5hcnlEaXIpLCBjb25maWcpOwogICAgIH0KICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTG9jYWxOaW5qYUdlbmVyYXRvci5oIGIvU291cmNlL2NtTG9jYWxOaW5qYUdlbmVyYXRvci5oCmluZGV4IGY2NDUzNGMuLjczYzBjZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsTmluamFHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21Mb2NhbE5pbmphR2VuZXJhdG9yLmgKQEAgLTY0LDE3ICs2NCwyMCBAQAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjdXN0b21TdGVwID0gc3RkOjpzdHJpbmcoKSwKICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0ID0gbnVsbHB0cikgY29uc3Q7CiAKLSAgdm9pZCBBcHBlbmRUYXJnZXRPdXRwdXRzKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIGNtTmluamFEZXBzJiBvdXRwdXRzKTsKLSAgdm9pZCBBcHBlbmRUYXJnZXREZXBlbmRzKAotICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIGNtTmluamFEZXBzJiBvdXRwdXRzLAotICAgIGNtTmluamFUYXJnZXREZXBlbmRzIGRlcGVuZHMgPSBEZXBlbmRPblRhcmdldEFydGlmYWN0KTsKKyAgdm9pZCBBcHBlbmRUYXJnZXRPdXRwdXRzKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsIGNtTmluamFEZXBzJiBvdXRwdXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CisgIHZvaWQgQXBwZW5kVGFyZ2V0RGVwZW5kcyhjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBjbU5pbmphRGVwcyYgb3V0cHV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZUNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTmluamFUYXJnZXREZXBlbmRzIGRlcGVuZHMpOwogCiAgIHZvaWQgQWRkQ3VzdG9tQ29tbWFuZFRhcmdldChjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CiAgIHZvaWQgQXBwZW5kQ3VzdG9tQ29tbWFuZExpbmVzKGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjb25zdCYgY2NnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNtZExpbmVzKTsKICAgdm9pZCBBcHBlbmRDdXN0b21Db21tYW5kRGVwcyhjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY29uc3QmIGNjZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphRGVwcyYgbmluamFEZXBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU5pbmphRGVwcyYgbmluamFEZXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiBwcm90ZWN0ZWQ6CiAgIHN0ZDo6c3RyaW5nIENvbnZlcnRUb0luY2x1ZGVSZWZlcmVuY2UoCkBAIC04MywyMCArODYsMjUgQEAKICAgICBib29sIGZvcmNlRnVsbFBhdGhzID0gZmFsc2UpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIEdldEJ1aWxkRmlsZVN0cmVhbSgpIGNvbnN0OworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIEdldEltcGxGaWxlU3RyZWFtKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIEdldENvbW1vbkZpbGVTdHJlYW0oKSBjb25zdDsKICAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBHZXRSdWxlc0ZpbGVTdHJlYW0oKSBjb25zdDsKIAogICB2b2lkIFdyaXRlQnVpbGRGaWxlVG9wKCk7CiAgIHZvaWQgV3JpdGVQcm9qZWN0SGVhZGVyKHN0ZDo6b3N0cmVhbSYgb3MpOwogICB2b2lkIFdyaXRlTmluamFSZXF1aXJlZFZlcnNpb24oc3RkOjpvc3RyZWFtJiBvcyk7Ci0gIHZvaWQgV3JpdGVOaW5qYUZpbGVzSW5jbHVzaW9uKHN0ZDo6b3N0cmVhbSYgb3MpOworICB2b2lkIFdyaXRlTmluamFDb25maWd1cmF0aW9uVmFyaWFibGUoc3RkOjpvc3RyZWFtJiBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICB2b2lkIFdyaXRlTmluamFGaWxlc0luY2x1c2lvbkNvbmZpZyhzdGQ6Om9zdHJlYW0mIG9zKTsKKyAgdm9pZCBXcml0ZU5pbmphRmlsZXNJbmNsdXNpb25Db21tb24oc3RkOjpvc3RyZWFtJiBvcyk7CiAgIHZvaWQgV3JpdGVQcm9jZXNzZWRNYWtlZmlsZShzdGQ6Om9zdHJlYW0mIG9zKTsKICAgdm9pZCBXcml0ZVBvb2xzKHN0ZDo6b3N0cmVhbSYgb3MpOwogCiAgIHZvaWQgV3JpdGVDdXN0b21Db21tYW5kQnVpbGRTdGF0ZW1lbnQoY21DdXN0b21Db21tYW5kIGNvbnN0KiBjYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbU5pbmphRGVwcyYgb3JkZXJPbmx5RGVwcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21OaW5qYURlcHMmIG9yZGVyT25seURlcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKLSAgdm9pZCBXcml0ZUN1c3RvbUNvbW1hbmRCdWlsZFN0YXRlbWVudHMoKTsKKyAgdm9pZCBXcml0ZUN1c3RvbUNvbW1hbmRCdWlsZFN0YXRlbWVudHMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgc3RkOjpzdHJpbmcgTWFrZUN1c3RvbUxhdW5jaGVyKGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjb25zdCYgY2NnKTsKIApAQCAtMTA0LDcgKzExMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY3VzdG9tU3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQpIGNvbnN0OwogCi0gIHZvaWQgQWRkaXRpb25hbENsZWFuRmlsZXMoKTsKKyAgdm9pZCBBZGRpdGlvbmFsQ2xlYW5GaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAogICBzdGQ6OnN0cmluZyBIb21lUmVsYXRpdmVPdXRwdXRQYXRoOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4IGIvU291cmNlL2NtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzLmN4eAppbmRleCA2ZjIxODNkLi44YWNkMWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5jeHgKQEAgLTMsMTYgKzMsMTggQEAKICNpbmNsdWRlICJjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbS92ZWN0b3I+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvVGVybWluYWwuaCIKIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtRmlsZVRpbWVDYWNoZS5oIgpAQCAtMjYsNiArMjgsNyBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21SYW5nZS5oIgogI2luY2x1ZGUgImNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKQEAgLTQ2LDM3ICs0OSw2IEBACiAjICBpbmNsdWRlICJjbURlcGVuZHNKYXZhLmgiCiAjZW5kaWYKIAotLy8gRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBNYWtlZmlsZSBkZXBlbmRlbmN5IGxpbmVzCi1jbGFzcyBjbU1ha2VTYWZlCi17Ci1wdWJsaWM6Ci0gIGNtTWFrZVNhZmUoY29uc3QgY2hhciogcykKLSAgICA6IERhdGEocykKLSAgewotICB9Ci0gIGNtTWFrZVNhZmUoc3RkOjpzdHJpbmcgY29uc3QmIHMpCi0gICAgOiBEYXRhKHMuY19zdHIoKSkKLSAgewotICB9Ci0KLXByaXZhdGU6Ci0gIGNvbnN0IGNoYXIqIERhdGE7Ci0gIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY21NYWtlU2FmZSBjb25zdCYgc2VsZikKLSAgewotICAgIGZvciAoY29uc3QgY2hhciogYyA9IHNlbGYuRGF0YTsgKmM7ICsrYykgewotICAgICAgc3dpdGNoICgqYykgewotICAgICAgICBjYXNlICc9JzoKLSAgICAgICAgICBvcyA8PCAiJChFUVVBTFMpIjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBvcyA8PCAqYzsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG9zOwotICB9Ci19OwotCiAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBiZWxvdy4KIHN0YXRpYyBzdGQ6OnN0cmluZyBjbVNwbGl0RXh0ZW5zaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbiwgc3RkOjpzdHJpbmcmIGJhc2UpCiB7CkBAIC0xMDYsNiArNzgsMTMgQEAKIAogY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6On5jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMygpID0gZGVmYXVsdDsKIAorc3RkOjpzdHJpbmcgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkdldENvbmZpZ05hbWUoKSBjb25zdAoreworICBhdXRvIGNvbnN0JiBjb25maWdOYW1lcyA9IHRoaXMtPkdldENvbmZpZ05hbWVzKCk7CisgIGFzc2VydChjb25maWdOYW1lcy5zaXplKCkgPT0gMSk7CisgIHJldHVybiBjb25maWdOYW1lcy5mcm9udCgpOworfQorCiB2b2lkIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpHZW5lcmF0ZSgpCiB7CiAgIC8vIFJlY29yZCB3aGV0aGVyIHNvbWUgb3B0aW9ucyBhcmUgZW5hYmxlZCB0byBhdm9pZCBjaGVja2luZyBtYW55CkBAIC0xMjEsMTIgKzEwMCwxMiBAQAogICAvLyBHZW5lcmF0ZSB0aGUgcnVsZSBmaWxlcyBmb3IgZWFjaCB0YXJnZXQuCiAgIGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogZ2cgPQogICAgIHN0YXRpY19jYXN0PGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyo+KHRoaXMtPkdsb2JhbEdlbmVyYXRvcik7Ci0gIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA6IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewotICAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgICAgaWYgKCF0YXJnZXQtPklzSW5CdWlsZFN5c3RlbSgpKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgc3RkOjp1bmlxdWVfcHRyPGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I+IHRnKAotICAgICAgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6TmV3KHRhcmdldCkpOworICAgICAgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6TmV3KHRhcmdldC5nZXQoKSkpOwogICAgIGlmICh0ZykgewogICAgICAgdGctPldyaXRlUnVsZUZpbGVzKCk7CiAgICAgICBnZy0+UmVjb3JkVGFyZ2V0UHJvZ3Jlc3ModGcuZ2V0KCkpOwpAQCAtMTU3LDE1ICsxMzYsMTUgQEAKIHZvaWQgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkdldExvY2FsT2JqZWN0RmlsZXMoCiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBMb2NhbE9iamVjdEluZm8+JiBsb2NhbE9iamVjdEZpbGVzKQogewotICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA6IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewotICAgIGlmIChndC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBndCA6IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgIGlmICghZ3QtPkNhbkNvbXBpbGVTb3VyY2VzKCkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBvYmplY3RTb3VyY2VzOwotICAgIGd0LT5HZXRPYmplY3RTb3VyY2VzKG9iamVjdFNvdXJjZXMsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIGd0LT5HZXRPYmplY3RTb3VyY2VzKG9iamVjdFNvdXJjZXMsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgLy8gQ29tcHV0ZSBmdWxsIHBhdGggdG8gb2JqZWN0IGZpbGUgZGlyZWN0b3J5IGZvciB0aGlzIHRhcmdldC4KICAgICBzdGQ6OnN0cmluZyBkaXIgPSBjbVN0ckNhdChndC0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLycsIHRoaXMtPkdldFRhcmdldERpcmVjdG9yeShndCksICcvJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nLCB0aGlzLT5HZXRUYXJnZXREaXJlY3RvcnkoZ3QuZ2V0KCkpLCAnLycpOwogICAgIC8vIENvbXB1dGUgdGhlIG5hbWUgb2YgZWFjaCBvYmplY3QgZmlsZS4KICAgICBmb3IgKGNtU291cmNlRmlsZSBjb25zdCogc2YgOiBvYmplY3RTb3VyY2VzKSB7CiAgICAgICBib29sIGhhc1NvdXJjZUV4dGVuc2lvbiA9IHRydWU7CkBAIC0xNzYsNyArMTU1LDcgQEAKICAgICAgIH0KICAgICAgIExvY2FsT2JqZWN0SW5mbyYgaW5mbyA9IGxvY2FsT2JqZWN0RmlsZXNbb2JqZWN0TmFtZV07CiAgICAgICBpbmZvLkhhc1NvdXJjZUV4dGVuc2lvbiA9IGhhc1NvdXJjZUV4dGVuc2lvbjsKLSAgICAgIGluZm8uZW1wbGFjZV9iYWNrKGd0LCBzZi0+R2V0TGFuZ3VhZ2UoKSk7CisgICAgICBpbmZvLmVtcGxhY2VfYmFjayhndC5nZXQoKSwgc2YtPkdldExhbmd1YWdlKCkpOwogICAgIH0KICAgfQogfQpAQCAtMzUyLDcgKzMzMSw3IEBACiAgIC8vIGZvciBlYWNoIHRhcmdldCB3ZSBqdXN0IHByb3ZpZGUgYSBydWxlIHRvIGNkIHVwIHRvIHRoZSB0b3AgYW5kIGRvIGEgbWFrZQogICAvLyBvbiB0aGUgdGFyZ2V0CiAgIHN0ZDo6c3RyaW5nIGxvY2FsTmFtZTsKLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgaWYgKCh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpIHx8CiAgICAgICAgICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSB8fAogICAgICAgICAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSkgfHwKQEAgLTM2Miw3ICszNDEsOCBAQAogICAgICAgZW1pdHRlZC5pbnNlcnQodGFyZ2V0LT5HZXROYW1lKCkpOwogCiAgICAgICAvLyBmb3Igc3ViZGlycyBhZGQgYSBydWxlIHRvIGJ1aWxkIHRoaXMgc3BlY2lmaWMgdGFyZ2V0IGJ5IG5hbWUuCi0gICAgICBsb2NhbE5hbWUgPSBjbVN0ckNhdCh0aGlzLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeSh0YXJnZXQpLCAiL3J1bGUiKTsKKyAgICAgIGxvY2FsTmFtZSA9CisgICAgICAgIGNtU3RyQ2F0KHRoaXMtPkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KHRhcmdldC5nZXQoKSksICIvcnVsZSIpOwogICAgICAgY29tbWFuZHMuY2xlYXIoKTsKICAgICAgIGRlcGVuZHMuY2xlYXIoKTsKIApAQCAtMzgzLDExICszNjMsMTEgQEAKICAgICAgIH0KIAogICAgICAgLy8gQWRkIGEgZmFzdCBydWxlIHRvIGJ1aWxkIHRoZSB0YXJnZXQKLSAgICAgIHN0ZDo6c3RyaW5nIG1ha2VmaWxlTmFtZSA9Ci0gICAgICAgIGNtU3RyQ2F0KHRoaXMtPkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KHRhcmdldCksICIvYnVpbGQubWFrZSIpOworICAgICAgc3RkOjpzdHJpbmcgbWFrZWZpbGVOYW1lID0gY21TdHJDYXQoCisgICAgICAgIHRoaXMtPkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KHRhcmdldC5nZXQoKSksICIvYnVpbGQubWFrZSIpOwogICAgICAgLy8gbWFrZSBzdXJlIHRoZSBtYWtlZmlsZSBuYW1lIGlzIHN1aXRhYmxlIGZvciBhIG1ha2VmaWxlCiAgICAgICBzdGQ6OnN0cmluZyBtYWtlVGFyZ2V0TmFtZSA9Ci0gICAgICAgIGNtU3RyQ2F0KHRoaXMtPkdldFJlbGF0aXZlVGFyZ2V0RGlyZWN0b3J5KHRhcmdldCksICIvYnVpbGQiKTsKKyAgICAgICAgY21TdHJDYXQodGhpcy0+R2V0UmVsYXRpdmVUYXJnZXREaXJlY3RvcnkodGFyZ2V0LmdldCgpKSwgIi9idWlsZCIpOwogICAgICAgbG9jYWxOYW1lID0gY21TdHJDYXQodGFyZ2V0LT5HZXROYW1lKCksICIvZmFzdCIpOwogICAgICAgZGVwZW5kcy5jbGVhcigpOwogICAgICAgY29tbWFuZHMuY2xlYXIoKTsKQEAgLTQwMCw5ICszODAsOSBAQAogCiAgICAgICAvLyBBZGQgYSBsb2NhbCBuYW1lIGZvciB0aGUgcnVsZSB0byByZWxpbmsgdGhlIHRhcmdldCBiZWZvcmUKICAgICAgIC8vIGluc3RhbGxhdGlvbi4KLSAgICAgIGlmICh0YXJnZXQtPk5lZWRSZWxpbmtCZWZvcmVJbnN0YWxsKHRoaXMtPkNvbmZpZ05hbWUpKSB7Ci0gICAgICAgIG1ha2VUYXJnZXROYW1lID0KLSAgICAgICAgICBjbVN0ckNhdCh0aGlzLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeSh0YXJnZXQpLCAiL3ByZWluc3RhbGwiKTsKKyAgICAgIGlmICh0YXJnZXQtPk5lZWRSZWxpbmtCZWZvcmVJbnN0YWxsKHRoaXMtPkdldENvbmZpZ05hbWUoKSkpIHsKKyAgICAgICAgbWFrZVRhcmdldE5hbWUgPSBjbVN0ckNhdCgKKyAgICAgICAgICB0aGlzLT5HZXRSZWxhdGl2ZVRhcmdldERpcmVjdG9yeSh0YXJnZXQuZ2V0KCkpLCAiL3ByZWluc3RhbGwiKTsKICAgICAgICAgbG9jYWxOYW1lID0gY21TdHJDYXQodGFyZ2V0LT5HZXROYW1lKCksICIvcHJlaW5zdGFsbCIpOwogICAgICAgICBkZXBlbmRzLmNsZWFyKCk7CiAgICAgICAgIGNvbW1hbmRzLmNsZWFyKCk7CkBAIC00ODgsNiArNDY4LDE0IEBACiAgIHJldHVybiB0aGlzLT5Ib21lUmVsYXRpdmVPdXRwdXRQYXRoOwogfQogCitzdGQ6OnN0cmluZyBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6Q29udmVydFRvTWFrZWZpbGVQYXRoKAorICBzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkgY29uc3QKK3sKKyAgY21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKiBnZyA9CisgICAgc3RhdGljX2Nhc3Q8Y21HbG9iYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKj4odGhpcy0+R2xvYmFsR2VuZXJhdG9yKTsKKyAgcmV0dXJuIGdnLT5Db252ZXJ0VG9NYWtlZmlsZVBhdGgocGF0aCk7Cit9CisKIHZvaWQgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OldyaXRlTWFrZVJ1bGUoCiAgIHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKQEAgLTUxOCw3ICs1MDYsNyBAQAogICB9CiAKICAgLy8gQ29uc3RydWN0IHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiB0aGUgcnVsZS4KLSAgc3RkOjpzdHJpbmcgdGd0ID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aCgKKyAgc3RkOjpzdHJpbmcgdGd0ID0gdGhpcy0+Q29udmVydFRvTWFrZWZpbGVQYXRoKAogICAgIHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpLCB0YXJnZXQpKTsKIAogICBjb25zdCBjaGFyKiBzcGFjZSA9ICIiOwpAQCAtNTMyLDMwICs1MjAsMzAgQEAKICAgaWYgKHN5bWJvbGljKSB7CiAgICAgaWYgKGNvbnN0IGNoYXIqIHN5bSA9CiAgICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFX01BS0VfU1lNQk9MSUNfUlVMRSIpKSB7Ci0gICAgICBvcyA8PCBjbU1ha2VTYWZlKHRndCkgPDwgc3BhY2UgPDwgIjogIiA8PCBzeW0gPDwgIlxuIjsKKyAgICAgIG9zIDw8IHRndCA8PCBzcGFjZSA8PCAiOiAiIDw8IHN5bSA8PCAiXG4iOwogICAgIH0KICAgfQogCiAgIC8vIFdyaXRlIHRoZSBydWxlLgogICBpZiAoZGVwZW5kcy5lbXB0eSgpKSB7CiAgICAgLy8gTm8gZGVwZW5kZW5jaWVzLiAgVGhlIGNvbW1hbmRzIHdpbGwgYWx3YXlzIHJ1bi4KLSAgICBvcyA8PCBjbU1ha2VTYWZlKHRndCkgPDwgc3BhY2UgPDwgIjpcbiI7CisgICAgb3MgPDwgdGd0IDw8IHNwYWNlIDw8ICI6XG4iOwogICB9IGVsc2UgewogICAgIC8vIFNwbGl0IGRlcGVuZGVuY2llcyBpbnRvIG11bHRpcGxlIHJ1bGUgbGluZXMuICBUaGlzIGFsbG93cyBmb3IKICAgICAvLyB2ZXJ5IGxvbmcgZGVwZW5kZW5jeSBsaXN0cyBldmVuIG9uIG9sZGVyIG1ha2UgaW1wbGVtZW50YXRpb25zLgogICAgIHN0ZDo6c3RyaW5nIGJpbkRpciA9IHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGRlcGVuZCA6IGRlcGVuZHMpIHsKLSAgICAgIHJlcGxhY2UgPSBkZXBlbmQ7Ci0gICAgICByZXBsYWNlID0gY21TeXN0ZW1Ub29sczo6Q29udmVydFRvT3V0cHV0UGF0aCgKLSAgICAgICAgdGhpcy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoYmluRGlyLCByZXBsYWNlKSk7Ci0gICAgICBvcyA8PCBjbU1ha2VTYWZlKHRndCkgPDwgc3BhY2UgPDwgIjogIiA8PCBjbU1ha2VTYWZlKHJlcGxhY2UpIDw8ICJcbiI7CisgICAgICBvcyA8PCB0Z3QgPDwgc3BhY2UgPDwgIjogIgorICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvTWFrZWZpbGVQYXRoKAorICAgICAgICAgICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChiaW5EaXIsIGRlcGVuZCkpCisgICAgICAgICA8PCAnXG4nOwogICAgIH0KICAgfQogCiAgIC8vIFdyaXRlIHRoZSBsaXN0IG9mIGNvbW1hbmRzLgogICBvcyA8PCBjbVdyYXAoIlx0IiwgY29tbWFuZHMsICIiLCAiXG4iKSA8PCAiXG4iOwogICBpZiAoc3ltYm9saWMgJiYgIXRoaXMtPklzV2F0Y29tV01ha2UoKSkgewotICAgIG9zIDw8ICIuUEhPTlkgOiAiIDw8IGNtTWFrZVNhZmUodGd0KSA8PCAiXG4iOworICAgIG9zIDw8ICIuUEhPTlkgOiAiIDw8IHRndCA8PCAiXG4iOwogICB9CiAgIG9zIDw8ICJcbiI7CiAgIC8vIEFkZCB0aGUgb3V0cHV0IHRvIHRoZSBsb2NhbCBoZWxwIGlmIHJlcXVlc3RlZC4KQEAgLTYxMyw4ICs2MDEsNyBAQAogICAgIHRoaXMtPk1heWJlQ29udmVydFdhdGNvbVNoZWxsQ29tbWFuZChjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSk7CiAgIGlmIChjbWFrZVNoZWxsQ29tbWFuZC5lbXB0eSgpKSB7CiAgICAgY21ha2VTaGVsbENvbW1hbmQgPSB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKSwKLSAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgfQogCiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KQEAgLTYyOCw3ICs2MTUsNyBAQAogICAgIDw8ICIjIFRoZSBjb21tYW5kIHRvIHJlbW92ZSBhIGZpbGUuXG4iCiAgICAgPDwgIlJNID0gIgogICAgIDw8IGNtYWtlU2hlbGxDb21tYW5kCi0gICAgPDwgIiAtRSByZW1vdmUgLWZcbiIKKyAgICA8PCAiIC1FIHJtIC1mXG4iCiAgICAgPDwgIlxuIjsKICAgbWFrZWZpbGVTdHJlYW0KICAgICA8PCAiIyBFc2NhcGluZyBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzLlxuIgpAQCAtNjM4LDE2ICs2MjUsMTQgQEAKICAgICA8PCAiIyBUaGUgdG9wLWxldmVsIHNvdXJjZSBkaXJlY3Rvcnkgb24gd2hpY2ggQ01ha2Ugd2FzIHJ1bi5cbiIKICAgICA8PCAiQ01BS0VfU09VUkNFX0RJUiA9ICIKICAgICA8PCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRoaXMtPkdldFNvdXJjZURpcmVjdG9yeSgpKSwKLSAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkKKyAgICAgIHRoaXMtPkdldFNvdXJjZURpcmVjdG9yeSgpLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpCiAgICAgPDwgIlxuIgogICAgIDw8ICJcbiI7CiAgIG1ha2VmaWxlU3RyZWFtCiAgICAgPDwgIiMgVGhlIHRvcC1sZXZlbCBidWlsZCBkaXJlY3Rvcnkgb24gd2hpY2ggQ01ha2Ugd2FzIHJ1bi5cbiIKICAgICA8PCAiQ01BS0VfQklOQVJZX0RJUiA9ICIKICAgICA8PCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpKSwKLSAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkKKyAgICAgIHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpCiAgICAgPDwgIlxuIgogICAgIDw8ICJcbiI7CiAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwpAQCAtNjczLDkgKzY1OCwxNSBAQAogICBpZiAoIXRoaXMtPklzTk1ha2UoKSAmJiAhdGhpcy0+SXNXYXRjb21XTWFrZSgpICYmCiAgICAgICAhdGhpcy0+Qm9ybGFuZE1ha2VDdXJseUhhY2spIHsKICAgICAvLyB0dXJuIG9mZiBSQ1MgYW5kIFNDQ1MgYXV0b21hdGljIHN0dWZmIGZyb20gZ21ha2UKLSAgICBtYWtlZmlsZVN0cmVhbQotICAgICAgPDwgIiMgUmVtb3ZlIHNvbWUgcnVsZXMgZnJvbSBnbWFrZSB0aGF0IC5TVUZGSVhFUyBkb2VzIG5vdCByZW1vdmUuXG4iCi0gICAgICA8PCAiU1VGRklYRVMgPVxuXG4iOworICAgIGNvbnN0ZXhwciBjb25zdCBjaGFyKiB2Y3NfcnVsZXNbXSA9IHsKKyAgICAgICIlLHYiLCAiUkNTLyUiLCAiUkNTLyUsdiIsICJTQ0NTL3MuJSIsICJzLiUiLAorICAgIH07CisgICAgZm9yIChhdXRvIHZjc19ydWxlIDogdmNzX3J1bGVzKSB7CisgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdmNzX2RlcGVuZDsKKyAgICAgIHZjc19kZXBlbmQuZW1wbGFjZV9iYWNrKHZjc19ydWxlKTsKKyAgICAgIHRoaXMtPldyaXRlTWFrZVJ1bGUobWFrZWZpbGVTdHJlYW0sICJEaXNhYmxlIFZDUy1iYXNlZCBpbXBsaWNpdCBydWxlcy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIsIHZjc19kZXBlbmQsIG5vX2NvbW1hbmRzLCBmYWxzZSk7CisgICAgfQogICB9CiAgIC8vIEFkZCBhIGZha2Ugc3VmZml4IHRvIGtlZXAgSFAgaGFwcHkuICBNdXN0IGJlIG1heCAzMiBjaGFycyBmb3IgU0dJIG1ha2UuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzOwpAQCAtNzIyLDkgKzcxMywxMCBAQAogICAgIC8vICJWRVJCT1NFPTEiIHRvIGJlIGFkZGVkIGFzIGEgbWFrZSB2YXJpYWJsZSB3aGljaCB3aWxsIGNoYW5nZSB0aGUKICAgICAvLyBuYW1lIG9mIHRoaXMgc3BlY2lhbCB0YXJnZXQuICBUaGlzIGdpdmVzIGEgbWFrZS10aW1lIGNob2ljZSB0bwogICAgIC8vIHRoZSB1c2VyLgotICAgIHRoaXMtPldyaXRlTWFrZVJ1bGUobWFrZWZpbGVTdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAiU3VwcHJlc3MgZGlzcGxheSBvZiBleGVjdXRlZCBjb21tYW5kcy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIiQoVkVSQk9TRSkuU0lMRU5UIiwgbm9fZGVwZW5kcywgbm9fY29tbWFuZHMsIGZhbHNlKTsKKyAgICAvLyBXcml0ZSBkaXJlY3RseSB0byB0aGUgc3RyZWFtIHNpbmNlIFdyaXRlTWFrZVJ1bGUgZXNjYXBlcyAnJCcuCisgICAgbWFrZWZpbGVTdHJlYW0gPDwgIiNTdXBwcmVzcyBkaXNwbGF5IG9mIGV4ZWN1dGVkIGNvbW1hbmRzLlxuIgorICAgICAgICAgICAgICAgICAgICAgICIkKFZFUkJPU0UpLlNJTEVOVDpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiXG4iOwogICB9CiAKICAgLy8gV29yay1hcm91bmQgZm9yIG1ha2VzIHRoYXQgZHJvcCBydWxlcyB0aGF0IGhhdmUgbm8gZGVwZW5kZW5jaWVzCkBAIC04NTMsNyArODQ1LDcgQEAKICAgLy8gQWRkIGEgZGVwZW5kZW5jeSBvbiB0aGUgcnVsZSBmaWxlIGl0c2VsZiB1bmxlc3MgYW4gb3B0aW9uIHRvIHNraXAKICAgLy8gaXQgaXMgc3BlY2lmaWNhbGx5IGVuYWJsZWQgYnkgdGhlIHVzZXIgb3IgcHJvamVjdC4KICAgaWYgKCF0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfU0tJUF9SVUxFX0RFUEVOREVOQ1kiKSkgewotICAgIGNtQXBwZW5kKGRlcGVuZHMsIHJ1bGVGaWxlcyk7CisgICAgY206OmFwcGVuZChkZXBlbmRzLCBydWxlRmlsZXMpOwogICB9CiB9CiAKQEAgLTg2MSw3ICs4NTMsNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsIGNvbnN0IHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4mIGNjcykKIHsKICAgZm9yIChjbUN1c3RvbUNvbW1hbmQgY29uc3QmIGNjIDogY2NzKSB7Ci0gICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZyhjYywgdGhpcy0+Q29uZmlnTmFtZSwgdGhpcyk7CisgICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZyhjYywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCB0aGlzKTsKICAgICB0aGlzLT5BcHBlbmRDdXN0b21EZXBlbmQoZGVwZW5kcywgY2NnKTsKICAgfQogfQpAQCAtODcyLDcgKzg2NCw3IEBACiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGQgOiBjY2cuR2V0RGVwZW5kcygpKSB7CiAgICAgLy8gTG9va3VwIHRoZSByZWFsIG5hbWUgb2YgdGhlIGRlcGVuZGVuY3kgaW4gY2FzZSBpdCBpcyBhIENNYWtlIHRhcmdldC4KICAgICBzdGQ6OnN0cmluZyBkZXA7Ci0gICAgaWYgKHRoaXMtPkdldFJlYWxEZXBlbmRlbmN5KGQsIHRoaXMtPkNvbmZpZ05hbWUsIGRlcCkpIHsKKyAgICBpZiAodGhpcy0+R2V0UmVhbERlcGVuZGVuY3koZCwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBkZXApKSB7CiAgICAgICBkZXBlbmRzLnB1c2hfYmFjayhzdGQ6Om1vdmUoZGVwKSk7CiAgICAgfQogICB9CkBAIC04ODMsNyArODc1LDcgQEAKICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIHJlbGF0aXZlKQogewogICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCYgY2MgOiBjY3MpIHsKLSAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNjLCB0aGlzLT5Db25maWdOYW1lLCB0aGlzKTsKKyAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNjLCB0aGlzLT5HZXRDb25maWdOYW1lKCksIHRoaXMpOwogICAgIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmQoY29tbWFuZHMsIGNjZywgdGFyZ2V0LCByZWxhdGl2ZSwgdHJ1ZSk7CiAgIH0KIH0KQEAgLTk1OCwxMSArOTUwLDEyIEBACiAgICAgICBzdGQ6OnN0cmluZyBsYXVuY2hlcjsKICAgICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgdGhlcmUgaXMgbm8gbGF1bmNoZXIuCiAgICAgICBjb25zdCBjaGFyKiB2YWwgPSB0aGlzLT5HZXRSdWxlTGF1bmNoZXIodGFyZ2V0LCAiUlVMRV9MQVVOQ0hfQ1VTVE9NIik7Ci0gICAgICBpZiAodmFsICYmICp2YWwpIHsKKyAgICAgIGlmIChjbU5vbmVtcHR5KHZhbCkpIHsKICAgICAgICAgLy8gRXhwYW5kIHJ1bGUgdmFyaWFibGVzIHJlZmVyZW5jZWQgaW4gdGhlIGdpdmVuIGxhdW5jaGVyIGNvbW1hbmQuCiAgICAgICAgIGNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXI6OlJ1bGVWYXJpYWJsZXMgdmFyczsKICAgICAgICAgdmFycy5DTVRhcmdldE5hbWUgPSB0YXJnZXQtPkdldE5hbWUoKS5jX3N0cigpOwotICAgICAgICB2YXJzLkNNVGFyZ2V0VHlwZSA9IGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRhcmdldC0+R2V0VHlwZSgpKTsKKyAgICAgICAgdmFycy5DTVRhcmdldFR5cGUgPQorICAgICAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRhcmdldC0+R2V0VHlwZSgpKS5jX3N0cigpOwogICAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cyA9IGNjZy5HZXRPdXRwdXRzKCk7CiAgICAgICAgIGlmICghb3V0cHV0cy5lbXB0eSgpKSB7CkBAIC0xMDI2LDcgKzEwMTksNyBAQAogICB0aGlzLT5DcmVhdGVDRENvbW1hbmQoY29tbWFuZHMxLCBkaXIsIHJlbGF0aXZlKTsKIAogICAvLyBwdXNoIGJhY2sgdGhlIGN1c3RvbSBjb21tYW5kcwotICBjbUFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKKyAgY206OmFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKIH0KIAogdm9pZCBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMzo6QXBwZW5kQ2xlYW5Db21tYW5kKApAQCAtMTA0MSwxMCArMTAzNCw5IEBACiAgICAgY2xlYW5maWxlICs9IGZpbGVuYW1lOwogICB9CiAgIGNsZWFuZmlsZSArPSAiLmNtYWtlIjsKLSAgc3RkOjpzdHJpbmcgY2xlYW5maWxlUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoY2xlYW5maWxlKTsKLSAgY21zeXM6Om9mc3RyZWFtIGZvdXQoY2xlYW5maWxlUGF0aC5jX3N0cigpKTsKKyAgY21zeXM6Om9mc3RyZWFtIGZvdXQoY2xlYW5maWxlLmNfc3RyKCkpOwogICBpZiAoIWZvdXQpIHsKLSAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiQ291bGQgbm90IGNyZWF0ZSAiICsgY2xlYW5maWxlUGF0aCk7CisgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgIiArIGNsZWFuZmlsZSk7CiAgIH0KICAgaWYgKCFmaWxlcy5lbXB0eSgpKSB7CiAgICAgZm91dCA8PCAiZmlsZShSRU1PVkVfUkVDVVJTRVxuIjsKQEAgLTEwODYsMTAgKzEwNzgsMTAgQEAKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNsZWFuRmlsZXM7CiAgIC8vIExvb2sgZm9yIGFkZGl0aW9uYWwgZmlsZXMgcmVnaXN0ZXJlZCBmb3IgY2xlYW5pbmcgaW4gdGhpcyBkaXJlY3RvcnkuCi0gIGlmIChjb25zdCBjaGFyKiBwcm9wX3ZhbHVlID0KKyAgaWYgKGNtUHJvcCBwcm9wX3ZhbHVlID0KICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJBRERJVElPTkFMX0NMRUFOX0ZJTEVTIikpIHsKICAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgICAgICAgICAgICAgICBwcm9wX3ZhbHVlLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICpwcm9wX3ZhbHVlLCB0aGlzLAogICAgICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQlVJTERfVFlQRSIpKSwKICAgICAgICAgICAgICAgICAgY2xlYW5GaWxlcyk7CiAgIH0KQEAgLTEwOTcsMTggKzEwODksMTYgQEAKICAgICByZXR1cm47CiAgIH0KIAotICBjbUxvY2FsR2VuZXJhdG9yKiByb290TEcgPQotICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRMb2NhbEdlbmVyYXRvcnMoKS5hdCgwKTsKKyAgY29uc3QgYXV0byYgcm9vdExHID0gdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldExvY2FsR2VuZXJhdG9ycygpLmF0KDApOwogICBzdGQ6OnN0cmluZyBjb25zdCYgYmluYXJ5RGlyID0gcm9vdExHLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjdXJyZW50QmluYXJ5RGlyID0gdGhpcy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwogICBzdGQ6OnN0cmluZyBjbGVhbmZpbGUgPQogICAgIGNtU3RyQ2F0KGN1cnJlbnRCaW5hcnlEaXIsICIvQ01ha2VGaWxlcy9jbWFrZV9kaXJlY3RvcnlfY2xlYW4uY21ha2UiKTsKICAgLy8gV3JpdGUgY2xlYW4gc2NyaXB0CiAgIHsKLSAgICBzdGQ6OnN0cmluZyBjbGVhbmZpbGVQYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjbGVhbmZpbGUpOwotICAgIGNtc3lzOjpvZnN0cmVhbSBmb3V0KGNsZWFuZmlsZVBhdGguY19zdHIoKSk7CisgICAgY21zeXM6Om9mc3RyZWFtIGZvdXQoY2xlYW5maWxlLmNfc3RyKCkpOwogICAgIGlmICghZm91dCkgewotICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgIiArIGNsZWFuZmlsZVBhdGgpOworICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgIiArIGNsZWFuZmlsZSk7CiAgICAgICByZXR1cm47CiAgICAgfQogICAgIGZvdXQgPDwgImZpbGUoUkVNT1ZFX1JFQ1VSU0VcbiI7CkBAIC0xMTc5LDkgKzExNjksOCBAQAogICAgICAgICAgICAgY29sb3JfbmFtZSk7CiAgICAgICAgICAgaWYgKHByb2dyZXNzKSB7CiAgICAgICAgICAgICBjbWQgKz0gIi0tcHJvZ3Jlc3MtZGlyPSI7Ci0gICAgICAgICAgICBjbWQgKz0gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHByb2dyZXNzLT5EaXIpLAotICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgICAgICAgICAgY21kICs9IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChwcm9ncmVzcy0+RGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICAgICAgICAgICAgY21kICs9ICIgIjsKICAgICAgICAgICAgIGNtZCArPSAiLS1wcm9ncmVzcy1udW09IjsKICAgICAgICAgICAgIGNtZCArPSBwcm9ncmVzcy0+QXJnOwpAQCAtMTMxNiwxMCArMTMwNSw5IEBACiAgICAgaW50IHJlc3VsdDsKICAgICBpZiAoIWZ0Yy0+Q29tcGFyZShpbnRlcm5hbERlcGVuZEZpbGUsIHRndEluZm8sICZyZXN1bHQpIHx8IHJlc3VsdCA8IDApIHsKICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgICAgIG1zZyA8PCAiRGVwZW5kZWUgXCIiIDw8IHRndEluZm8gPDwgIlwiIGlzIG5ld2VyIHRoYW4gZGVwZW5kZXIgXCIiCi0gICAgICAgICAgICA8PCBpbnRlcm5hbERlcGVuZEZpbGUgPDwgIlwiLiIgPDwgc3RkOjplbmRsOwotICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQobXNnLnN0cigpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6U3Rkb3V0KGNtU3RyQ2F0KCJEZXBlbmRlZSBcIiIsIHRndEluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRlciBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbERlcGVuZEZpbGUsICJcIi5cbiIpKTsKICAgICAgIH0KICAgICAgIG5lZWRSZXNjYW5EZXBlbmRJbmZvID0gdHJ1ZTsKICAgICB9CkBAIC0xMzM2LDEwICsxMzI0LDkgQEAKICAgICBpZiAoIWZ0Yy0+Q29tcGFyZShpbnRlcm5hbERlcGVuZEZpbGUsIGRpckluZm9GaWxlLCAmcmVzdWx0KSB8fAogICAgICAgICByZXN1bHQgPCAwKSB7CiAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICAgICAgICBtc2cgPDwgIkRlcGVuZGVlIFwiIiA8PCBkaXJJbmZvRmlsZSA8PCAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRlciBcIiIKLSAgICAgICAgICAgIDw8IGludGVybmFsRGVwZW5kRmlsZSA8PCAiXCIuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChtc2cuc3RyKCkpOworICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQoY21TdHJDYXQoIkRlcGVuZGVlIFwiIiwgZGlySW5mb0ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIgaXMgbmV3ZXIgdGhhbiBkZXBlbmRlciBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbERlcGVuZEZpbGUsICJcIi5cbiIpKTsKICAgICAgIH0KICAgICAgIG5lZWRSZXNjYW5EaXJJbmZvID0gdHJ1ZTsKICAgICB9CkBAIC0xNTA1LDExICsxNDkyLDkgQEAKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhkZXBlbmRlZSkgJiYKICAgICAgICAgIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZGVwZW5kZXIpKSB7CiAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwotICAgICAgICBtc2cgPDwgIkRlbGV0aW5nIHByaW1hcnkgY3VzdG9tIGNvbW1hbmQgb3V0cHV0IFwiIiA8PCBkZXBlbmRlZQotICAgICAgICAgICAgPDwgIlwiIGJlY2F1c2UgYW5vdGhlciBvdXRwdXQgXCIiIDw8IGRlcGVuZGVyCi0gICAgICAgICAgICA8PCAiXCIgZG9lcyBub3QgZXhpc3QuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dChtc2cuc3RyKCkpOworICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQoY21TdHJDYXQoCisgICAgICAgICAgIkRlbGV0aW5nIHByaW1hcnkgY3VzdG9tIGNvbW1hbmQgb3V0cHV0IFwiIiwgZGVwZW5kZWUsCisgICAgICAgICAgIlwiIGJlY2F1c2UgYW5vdGhlciBvdXRwdXQgXCIiLCBkZXBlbmRlciwgIlwiIGRvZXMgbm90IGV4aXN0LlxuIikpOwogICAgICAgfQogICAgICAgY21TeXN0ZW1Ub29sczo6UmVtb3ZlRmlsZShkZXBlbmRlZSk7CiAgICAgfQpAQCAtMTU1NSwyMSArMTU0MCwxOSBAQAogICB0aGlzLT5Xcml0ZURpdmlkZXIocnVsZUZpbGVTdHJlYW0pOwogICBydWxlRmlsZVN0cmVhbSA8PCAiIyBUYXJnZXRzIHByb3ZpZGVkIGdsb2JhbGx5IGJ5IENNYWtlLlxuIgogICAgICAgICAgICAgICAgICA8PCAiXG4iOwotICBjb25zdCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiB0YXJnZXRzID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpOwotICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA6IHRhcmdldHMpIHsKKyAgY29uc3QgYXV0byYgdGFyZ2V0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgZm9yIChjb25zdCBhdXRvJiBndCA6IHRhcmdldHMpIHsKICAgICBpZiAoZ3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHRhcmdldFN0cmluZyA9CiAgICAgICAgICJTcGVjaWFsIHJ1bGUgZm9yIHRoZSB0YXJnZXQgIiArIGd0LT5HZXROYW1lKCk7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29tbWFuZHM7CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwZW5kczsKIAotICAgICAgY29uc3QgY2hhciogdGV4dCA9IGd0LT5HZXRQcm9wZXJ0eSgiRWNob1N0cmluZyIpOwotICAgICAgaWYgKCF0ZXh0KSB7Ci0gICAgICAgIHRleHQgPSAiUnVubmluZyBleHRlcm5hbCBjb21tYW5kIC4uLiI7Ci0gICAgICB9CisgICAgICBjbVByb3AgcCA9IGd0LT5HZXRQcm9wZXJ0eSgiRWNob1N0cmluZyIpOworICAgICAgY29uc3QgY2hhciogdGV4dCA9IHAgPyBwLT5jX3N0cigpIDogIlJ1bm5pbmcgZXh0ZXJuYWwgY29tbWFuZCAuLi4iOwogICAgICAgZGVwZW5kcy5yZXNlcnZlKGd0LT5HZXRVdGlsaXRpZXMoKS5zaXplKCkpOwotICAgICAgZm9yIChCVDxzdGQ6OnN0cmluZz4gY29uc3QmIHUgOiBndC0+R2V0VXRpbGl0aWVzKCkpIHsKLSAgICAgICAgZGVwZW5kcy5wdXNoX2JhY2sodS5WYWx1ZSk7CisgICAgICBmb3IgKEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+IGNvbnN0JiB1IDogZ3QtPkdldFV0aWxpdGllcygpKSB7CisgICAgICAgIGRlcGVuZHMucHVzaF9iYWNrKHUuVmFsdWUuZmlyc3QpOwogICAgICAgfQogICAgICAgdGhpcy0+QXBwZW5kRWNobyhjb21tYW5kcywgdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkVjaG9HbG9iYWwpOwpAQCAtMTU3NywxMCArMTU2MCwxMCBAQAogICAgICAgLy8gR2xvYmFsIHRhcmdldHMgc3RvcmUgdGhlaXIgcnVsZXMgaW4gcHJlLSBhbmQgcG9zdC1idWlsZCBjb21tYW5kcy4KICAgICAgIHRoaXMtPkFwcGVuZEN1c3RvbURlcGVuZHMoZGVwZW5kcywgZ3QtPkdldFByZUJ1aWxkQ29tbWFuZHMoKSk7CiAgICAgICB0aGlzLT5BcHBlbmRDdXN0b21EZXBlbmRzKGRlcGVuZHMsIGd0LT5HZXRQb3N0QnVpbGRDb21tYW5kcygpKTsKLSAgICAgIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmRzKGNvbW1hbmRzLCBndC0+R2V0UHJlQnVpbGRDb21tYW5kcygpLCBndCwKKyAgICAgIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmRzKGNvbW1hbmRzLCBndC0+R2V0UHJlQnVpbGRDb21tYW5kcygpLCBndC5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7Ci0gICAgICB0aGlzLT5BcHBlbmRDdXN0b21Db21tYW5kcyhjb21tYW5kcywgZ3QtPkdldFBvc3RCdWlsZENvbW1hbmRzKCksIGd0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKTsKKyAgICAgIHRoaXMtPkFwcGVuZEN1c3RvbUNvbW1hbmRzKGNvbW1hbmRzLCBndC0+R2V0UG9zdEJ1aWxkQ29tbWFuZHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0LmdldCgpLCB0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpOwogICAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0TmFtZSA9IGd0LT5HZXROYW1lKCk7CiAgICAgICB0aGlzLT5Xcml0ZU1ha2VSdWxlKHJ1bGVGaWxlU3RyZWFtLCB0YXJnZXRTdHJpbmcuY19zdHIoKSwgdGFyZ2V0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcywgY29tbWFuZHMsIHRydWUpOwpAQCAtMTYyMSwxNSArMTYwNCwxNCBAQAogICB7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHByb2dDbWQ7CiAgICAgcHJvZ0NtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9wcm9ncmVzc19zdGFydCAiOwotICAgIHByb2dDbWQgPDwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwcm9ncmVzc0RpciksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgcHJvZ0NtZCA8PCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQocHJvZ3Jlc3NEaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKIAogICAgIHN0ZDo6c3RyaW5nIHByb2dyZXNzRmlsZSA9ICIvQ01ha2VGaWxlcy9wcm9ncmVzcy5tYXJrcyI7CiAgICAgc3RkOjpzdHJpbmcgcHJvZ3Jlc3NGaWxlTmFtZUZ1bGwgPSB0aGlzLT5Db252ZXJ0VG9GdWxsUGF0aChwcm9ncmVzc0ZpbGUpOwogICAgIHByb2dDbWQgPDwgIiAiCi0gICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZ3Jlc3NGaWxlTmFtZUZ1bGwpLAotICAgICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHByb2dyZXNzRmlsZU5hbWVGdWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgY29tbWFuZHMucHVzaF9iYWNrKHByb2dDbWQuc3RyKCkpOwogICB9CiAgIHN0ZDo6c3RyaW5nIG1mMkRpciA9ICJDTWFrZUZpbGVzL01ha2VmaWxlMiI7CkBAIC0xNjM5LDggKzE2MjEsOCBAQAogICB7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHByb2dDbWQ7CiAgICAgcHJvZ0NtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9wcm9ncmVzc19zdGFydCAiOyAvLyAjIDAKLSAgICBwcm9nQ21kIDw8IHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocHJvZ3Jlc3NEaXIpLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgIHByb2dDbWQgPDwgdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KHByb2dyZXNzRGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgcHJvZ0NtZCA8PCAiIDAiOwogICAgIGNvbW1hbmRzLnB1c2hfYmFjayhwcm9nQ21kLnN0cigpKTsKICAgfQpAQCAtMTc2Miw3ICsxNzQ0LDcgQEAKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gSWYgaXQncyBhbiBhYnNvbHV0ZSBwYXRoLCBjaGVjayBpZiBpdCBzdGFydHMgd2l0aCB0aGUgc291cmNlCi0gICAgLy8gZGlyZWNvdG9yeToKKyAgICAvLyBkaXJlY3Rvcnk6CiAgICAgcmV0dXJuICgKICAgICAgICEoSXNJbkRpcmVjdG9yeShTb3VyY2VEaXIsIHBhdGgpIHx8IElzSW5EaXJlY3RvcnkoQmluYXJ5RGlyLCBwYXRoKSkpOwogICB9CkBAIC0xNzczLDcgKzE3NTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0RGlyKQogICB7CiAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlIHRlc3QgZGlyZWN0b3J5ICJzdGFydHMgd2l0aCIgdGhlIGJhc2UgZGlyZWN0b3J5OgotICAgIGlmICh0ZXN0RGlyLmZpbmQoYmFzZURpcikgIT0gMCkgeworICAgIGlmICghY21IYXNQcmVmaXgodGVzdERpciwgYmFzZURpcikpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gSWYgaXQgZG9lcywgdGhlbiBjaGVjayB0aGF0IGl0J3MgZWl0aGVyIHRoZSBzYW1lIHN0cmluZywgb3IgdGhhdCB0aGUKQEAgLTE4MjUsNyArMTgwNyw3IEBACiAgICAgc3RkOjpzdHJpbmcgY2lkVmFyID0KICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBpbXBsaWNpdExhbmcuZmlyc3QsICJfQ09NUElMRVJfSUQiKTsKICAgICBjb25zdCBjaGFyKiBjaWQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihjaWRWYXIpOwotICAgIGlmIChjaWQgJiYgKmNpZCkgeworICAgIGlmIChjbU5vbmVtcHR5KGNpZCkpIHsKICAgICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAic2V0KENNQUtFXyIgPDwgaW1wbGljaXRMYW5nLmZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgPDwgIl9DT01QSUxFUl9JRCBcIiIgPDwgY2lkIDw8ICJcIilcbiI7CiAgICAgfQpAQCAtMTg0Myw3ICsxODI1LDcgQEAKIAogICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgZm9yIHRoZSB0YXJnZXQuCiAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGRlZmluZXM7Ci0gICAgdGhpcy0+R2V0VGFyZ2V0RGVmaW5lcyh0YXJnZXQsIHRoaXMtPkNvbmZpZ05hbWUsIGltcGxpY2l0TGFuZy5maXJzdCwKKyAgICB0aGlzLT5HZXRUYXJnZXREZWZpbmVzKHRhcmdldCwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBpbXBsaWNpdExhbmcuZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzKTsKICAgICBpZiAoIWRlZmluZXMuZW1wdHkoKSkgewogICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwpAQCAtMTg2NywxMSArMTg0OSwxMSBAQAogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlczsKIAogICAgIHRoaXMtPkdldEluY2x1ZGVEaXJlY3RvcmllcyhpbmNsdWRlcywgdGFyZ2V0LCBpbXBsaWNpdExhbmcuZmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbmZpZ05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICAgIHN0ZDo6c3RyaW5nIGJpbmFyeURpciA9IHRoaXMtPkdldFN0YXRlKCktPkdldEJpbmFyeURpcmVjdG9yeSgpOwogICAgIGlmICh0aGlzLT5NYWtlZmlsZS0+SXNPbigiQ01BS0VfREVQRU5EU19JTl9QUk9KRUNUX09OTFkiKSkgewogICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHNvdXJjZURpciA9IHRoaXMtPkdldFN0YXRlKCktPkdldFNvdXJjZURpcmVjdG9yeSgpOwotICAgICAgY21FcmFzZUlmKGluY2x1ZGVzLCA6Ok5vdEluUHJvamVjdERpcihzb3VyY2VEaXIsIGJpbmFyeURpcikpOworICAgICAgY206OmVyYXNlX2lmKGluY2x1ZGVzLCA6Ok5vdEluUHJvamVjdERpcihzb3VyY2VEaXIsIGJpbmFyeURpcikpOwogICAgIH0KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbmNsdWRlIDogaW5jbHVkZXMpIHsKICAgICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAiICBcIiIKQEAgLTE4ODQsMTMgKzE4NjYsMTMgQEAKICAgLy8gU3RvcmUgaW5jbHVkZSB0cmFuc2Zvcm0gcnVsZSBwcm9wZXJ0aWVzLiAgV3JpdGUgdGhlIGRpcmVjdG9yeQogICAvLyBydWxlcyBmaXJzdCBiZWNhdXNlIHRoZXkgbWF5IGJlIG92ZXJyaWRkZW4gYnkgbGF0ZXIgdGFyZ2V0IHJ1bGVzLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdHJhbnNmb3JtUnVsZXM7Ci0gIGlmIChjb25zdCBjaGFyKiB4Zm9ybSA9CisgIGlmIChjbVByb3AgeGZvcm0gPQogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIklNUExJQ0lUX0RFUEVORFNfSU5DTFVERV9UUkFOU0ZPUk0iKSkgewotICAgIGNtRXhwYW5kTGlzdCh4Zm9ybSwgdHJhbnNmb3JtUnVsZXMpOworICAgIGNtRXhwYW5kTGlzdCgqeGZvcm0sIHRyYW5zZm9ybVJ1bGVzKTsKICAgfQotICBpZiAoY29uc3QgY2hhciogeGZvcm0gPQorICBpZiAoY21Qcm9wIHhmb3JtID0KICAgICAgICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiSU1QTElDSVRfREVQRU5EU19JTkNMVURFX1RSQU5TRk9STSIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KHhmb3JtLCB0cmFuc2Zvcm1SdWxlcyk7CisgICAgY21FeHBhbmRMaXN0KCp4Zm9ybSwgdHJhbnNmb3JtUnVsZXMpOwogICB9CiAgIGlmICghdHJhbnNmb3JtUnVsZXMuZW1wdHkoKSkgewogICAgIGNtYWtlZmlsZVN0cmVhbSA8PCAic2V0KENNQUtFX0lOQ0xVREVfVFJBTlNGT1JNU1xuIjsKQEAgLTE5NTcsMjUgKzE5MzksMjUgQEAKIHZvaWQgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OldyaXRlRGl2aWRlcihzdGQ6Om9zdHJlYW0mIG9zKQogewogICBvcyA8PCAiIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgotICAgICA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOworICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOwogfQogCiB2b2lkIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzOjpXcml0ZUNNYWtlQXJndW1lbnQoc3RkOjpvc3RyZWFtJiBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQogewogICAvLyBXcml0ZSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBzdHJlYW0gd2l0aCBlc2NhcGluZyB0byBnZXQgaXQgYmFjawogICAvLyBpbnRvIENNYWtlIHRocm91Z2ggdGhlIGxleGljYWwgc2Nhbm5lci4KLSAgb3MgPDwgIlwiIjsKLSAgZm9yIChjb25zdCBjaGFyKiBjID0gczsgKmM7ICsrYykgewotICAgIGlmICgqYyA9PSAnXFwnKSB7CisgIG9zIDw8ICciJzsKKyAgZm9yIChjaGFyIGMgOiBzKSB7CisgICAgaWYgKGMgPT0gJ1xcJykgewogICAgICAgb3MgPDwgIlxcXFwiOwotICAgIH0gZWxzZSBpZiAoKmMgPT0gJyInKSB7CisgICAgfSBlbHNlIGlmIChjID09ICciJykgewogICAgICAgb3MgPDwgIlxcXCIiOwogICAgIH0gZWxzZSB7Ci0gICAgICBvcyA8PCAqYzsKKyAgICAgIG9zIDw8IGM7CiAgICAgfQogICB9Ci0gIG9zIDw8ICJcIiI7CisgIG9zIDw8ICciJzsKIH0KIAogc3RkOjpzdHJpbmcgY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM6OkNvbnZlcnRUb1F1b3RlZE91dHB1dFBhdGgoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCBiL1NvdXJjZS9jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oCmluZGV4IGYxMmFlOGIuLjJiMDc5NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oCisrKyBiL1NvdXJjZS9jbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMy5oCkBAIC0zMyw2ICszMyw4IEBACiAgIGNtTG9jYWxVbml4TWFrZWZpbGVHZW5lcmF0b3IzKGNtR2xvYmFsR2VuZXJhdG9yKiBnZywgY21NYWtlZmlsZSogbWYpOwogICB+Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMoKSBvdmVycmlkZTsKIAorICBzdGQ6OnN0cmluZyBHZXRDb25maWdOYW1lKCkgY29uc3Q7CisKICAgdm9pZCBDb21wdXRlSG9tZVJlbGF0aXZlT3V0cHV0UGF0aCgpIG92ZXJyaWRlOwogCiAgIC8qKgpAQCAtNDQsNiArNDYsMTIgQEAKICAgLy8gbG9jYWwgZ2VuZXJhdG9ycyBTdGFydE91dHB1dERpcmVjdG9yeQogICBjb25zdCBzdGQ6OnN0cmluZyYgR2V0SG9tZVJlbGF0aXZlT3V0cHV0UGF0aCgpOwogCisgIC8qKgorICAgKiBDb252ZXJ0IGEgZmlsZSBwYXRoIHRvIGEgTWFrZWZpbGUgdGFyZ2V0IG9yIGRlcGVuZGVuY3kgd2l0aAorICAgKiBlc2NhcGluZyBhbmQgcXVvdGluZyBzdWl0YWJsZSBmb3IgdGhlIGdlbmVyYXRvcidzIG1ha2UgdG9vbC4KKyAgICovCisgIHN0ZDo6c3RyaW5nIENvbnZlcnRUb01ha2VmaWxlUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkgY29uc3Q7CisKICAgLy8gV3JpdGUgb3V0IGEgbWFrZSBydWxlCiAgIHZvaWQgV3JpdGVNYWtlUnVsZShzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBjaGFyKiBjb21tZW50LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCwKQEAgLTc1LDcgKzgzLDcgQEAKICAgdm9pZCBTZXRCb3JsYW5kTWFrZUN1cmx5SGFjayhib29sIGIpIHsgdGhpcy0+Qm9ybGFuZE1ha2VDdXJseUhhY2sgPSBiOyB9CiAKICAgLy8gdXNlZCBpbiB3cml0aW5nIG91dCBDbWFrZSBmaWxlcyBzdWNoIGFzIFdyaXRlRGlyZWN0b3J5SW5mb3JtYXRpb24KLSAgc3RhdGljIHZvaWQgV3JpdGVDTWFrZUFyZ3VtZW50KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IGNoYXIqIHMpOworICBzdGF0aWMgdm9pZCBXcml0ZUNNYWtlQXJndW1lbnQoc3RkOjpvc3RyZWFtJiBvcywgY29uc3Qgc3RkOjpzdHJpbmcmIHMpOwogCiAgIC8qKiBjcmVhdGVzIHRoZSBjb21tb24gZGlzY2xhaW1lciB0ZXh0IGF0IHRoZSB0b3Agb2YgZWFjaCBtYWtlZmlsZSAqLwogICB2b2lkIFdyaXRlRGlzY2xhaW1lcihzdGQ6Om9zdHJlYW0mIG9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5jeHgKaW5kZXggZjNkODI4Yi4uNmM3ZDZjNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5jeHgKQEAgLTIsOCArMiwxMSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJjbV9leHBhdC5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAorI2luY2x1ZGUgPGNtM3AvZXhwYXQuaD4KKworI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKQEAgLTY2LDcgKzY5LDcgQEAKIHZvaWQgY21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yOjpHZW5lcmF0ZVRhcmdldHNEZXB0aEZpcnN0KAogICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldCo+JiByZW1haW5pbmcpCiB7Ci0gIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgIGlmICghdGFyZ2V0LT5Jc0luQnVpbGRTeXN0ZW0oKSkgewogICAgIHJldHVybjsKICAgfQogICAvLyBGaW5kIHRoaXMgdGFyZ2V0IGluIHRoZSBsaXN0IG9mIHJlbWFpbmluZyB0YXJnZXRzLgpAQCAtMTAxLDEwICsxMDQsMTEgQEAKIAogdm9pZCBjbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I6OkdlbmVyYXRlKCkKIHsKLSAgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiByZW1haW5pbmcgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CisgIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4gcmVtYWluaW5nOworICBjbTo6YXBwZW5kKHJlbWFpbmluZywgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKTsKICAgZm9yIChhdXRvJiB0IDogcmVtYWluaW5nKSB7CiAgICAgaWYgKHQpIHsKLSAgICAgIEdlbmVyYXRlVGFyZ2V0c0RlcHRoRmlyc3QodCwgcmVtYWluaW5nKTsKKyAgICAgIHRoaXMtPkdlbmVyYXRlVGFyZ2V0c0RlcHRoRmlyc3QodCwgcmVtYWluaW5nKTsKICAgICB9CiAgIH0KICAgdGhpcy0+V3JpdGVTdGFtcEZpbGVzKCk7CkBAIC0xMjQsOCArMTI4LDcgQEAKICAgc3RkOjpzdHJpbmcgZ3VpZFN0b3JlTmFtZSA9IGNtU3RyQ2F0KG5hbWUsICJfR1VJRF9DTUFLRSIpOwogICAvLyBzYXZlIHRoZSBHVUlEIGluIHRoZSBjYWNoZQogICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldENNYWtlSW5zdGFuY2UoKS0+QWRkQ2FjaGVFbnRyeSgKLSAgICBndWlkU3RvcmVOYW1lLmNfc3RyKCksIHBhcnNlci5HVUlELmNfc3RyKCksICJTdG9yZWQgR1VJRCIsCi0gICAgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CisgICAgZ3VpZFN0b3JlTmFtZSwgcGFyc2VyLkdVSUQuY19zdHIoKSwgIlN0b3JlZCBHVUlEIiwgY21TdGF0ZUVudW1zOjpJTlRFUk5BTCk7CiB9CiAKIGNvbnN0IGNoYXIqIGNtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvcjo6UmVwb3J0RXJyb3JMYWJlbCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmN4eAppbmRleCBlNzcxYTRhLi5mZWM2YTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvci5jeHgKQEAgLTIsMTIgKzIsMTQgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCisjaW5jbHVkZSA8Y20zcC9leHBhdC5oPgogI2luY2x1ZGUgPGN0eXBlLmg+IC8vIGZvciBpc3NwYWNlCiAKLSNpbmNsdWRlICJjbV9leHBhdC5oIgotCiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmgiCkBAIC0xOCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21YTUxQYXJzZXIuaCIKICNpbmNsdWRlICJjbWFrZS5oIgpAQCAtNTIsMjYgKzU1LDIzIEBACiBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6Y21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IoCiAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZywgY21NYWtlZmlsZSogbWYpCiAgIDogY21Mb2NhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcihnZywgbWYpCisgICwgSW50ZXJuYWwoY206Om1ha2VfdW5pcXVlPGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9ySW50ZXJuYWxzPih0aGlzKSkKIHsKLSAgdGhpcy0+SW50ZXJuYWwgPSBuZXcgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3JJbnRlcm5hbHModGhpcyk7CiB9CiAKLWNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yOjp+Y21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IoKQotewotICBkZWxldGUgdGhpcy0+SW50ZXJuYWw7Ci19CitjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6fmNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiB2b2lkIGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yOjpBZGRIZWxwZXJDb21tYW5kcygpCiB7CiAgIC8vIE5vdyBjcmVhdGUgR1VJRHMgZm9yIHRhcmdldHMKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JUYXJnZXQqPiYgdGd0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKLSAgZm9yIChjbUdlbmVyYXRvclRhcmdldCBjb25zdCogbCA6IHRndHMpIHsKLSAgICBpZiAobC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgY29uc3QgYXV0byYgdGd0cyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldHMoKTsKKyAgZm9yIChjb25zdCBhdXRvJiBsIDogdGd0cykgeworICAgIGlmICghbC0+SXNJbkJ1aWxkU3lzdGVtKCkpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICBjb25zdCBjaGFyKiBwYXRoID0gbC0+R2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIpOworICAgIGNtUHJvcCBwYXRoID0gbC0+R2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIpOwogICAgIGlmIChwYXRoKSB7Ci0gICAgICB0aGlzLT5SZWFkQW5kU3RvcmVFeHRlcm5hbEdVSUQobC0+R2V0TmFtZSgpLCBwYXRoKTsKKyAgICAgIHRoaXMtPlJlYWRBbmRTdG9yZUV4dGVybmFsR1VJRChsLT5HZXROYW1lKCksIHBhdGgtPmNfc3RyKCkpOwogICAgIH0KICAgfQogCkBAIC04OSw4ICs4OSw4IEBACiAgIC8vIFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzIFNlcnZpY2UgUGFjayAxIHdpbGwgbm90IHJ1biBwb3N0LWJ1aWxkCiAgIC8vIGNvbW1hbmRzIGZvciB0YXJnZXRzIGluIHdoaWNoIG5vIHNvdXJjZXMgYXJlIGJ1aWx0LiAgQWRkIGR1bW15CiAgIC8vIHJ1bGVzIHRvIGZvcmNlIHRoZXNlIHRhcmdldHMgdG8gYnVpbGQuCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRndHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7Ci0gIGZvciAoY21HZW5lcmF0b3JUYXJnZXQqIGwgOiB0Z3RzKSB7CisgIGNvbnN0IGF1dG8mIHRndHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CisgIGZvciAoYXV0byYgbCA6IHRndHMpIHsKICAgICBpZiAobC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgewogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2RlcGVuZHM7CiAgICAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBmb3JjZV9jb21tYW5kcyA9CkBAIC0xMDIsOSArMTAyLDkgQEAKICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRPckNyZWF0ZUdlbmVyYXRlZFNvdXJjZShmb3JjZSkpIHsKICAgICAgICAgc2YtPlNldFByb3BlcnR5KCJTWU1CT0xJQyIsICIxIik7CiAgICAgICB9Ci0gICAgICBpZiAoY21Tb3VyY2VGaWxlKiBmaWxlID0gdGhpcy0+TWFrZWZpbGUtPkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKLSAgICAgICAgICAgIGZvcmNlLmNfc3RyKCksIG5vX2RlcGVuZHMsIG5vX21haW5fZGVwZW5kZW5jeSwgZm9yY2VfY29tbWFuZHMsICIgIiwKLSAgICAgICAgICAgIDAsIHRydWUpKSB7CisgICAgICBpZiAoY21Tb3VyY2VGaWxlKiBmaWxlID0gdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICAgICAgICAgICAgZm9yY2UsIG5vX2RlcGVuZHMsIG5vX21haW5fZGVwZW5kZW5jeSwgZm9yY2VfY29tbWFuZHMsICIgIiwKKyAgICAgICAgICAgIG51bGxwdHIsIHRydWUpKSB7CiAgICAgICAgIGwtPkFkZFNvdXJjZShmaWxlLT5SZXNvbHZlRnVsbFBhdGgoKSk7CiAgICAgICB9CiAgICAgfQpAQCAtMTI1LDE3ICsxMjUsMTcgQEAKICAgfQogCiAgIC8vIEdldCB0aGUgc2V0IG9mIHRhcmdldHMgaW4gdGhpcyBkaXJlY3RvcnkuCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yVGFyZ2V0Kj4mIHRndHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CisgIGNvbnN0IGF1dG8mIHRndHMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCk7CiAKICAgLy8gQ3JlYXRlIHRoZSBwcm9qZWN0IGZpbGUgZm9yIGVhY2ggdGFyZ2V0LgotICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0KiBsIDogdGd0cykgewotICAgIGlmIChsLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgeworICBmb3IgKGNvbnN0IGF1dG8mIGwgOiB0Z3RzKSB7CisgICAgaWYgKCFsLT5Jc0luQnVpbGRTeXN0ZW0oKSkgewogICAgICAgY29udGludWU7CiAgICAgfQogICAgIC8vIElOQ0xVREVfRVhURVJOQUxfTVNQUk9KRUNUIGNvbW1hbmQgb25seSBhZmZlY3RzIHRoZSB3b3Jrc3BhY2UKICAgICAvLyBzbyBkb24ndCBidWlsZCBhIHByb2plY3RmaWxlIGZvciBpdAogICAgIGlmICghbC0+R2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIpKSB7Ci0gICAgICB0aGlzLT5DcmVhdGVTaW5nbGVWQ1Byb2oobC0+R2V0TmFtZSgpLCBsKTsKKyAgICAgIHRoaXMtPkNyZWF0ZVNpbmdsZVZDUHJvaihsLT5HZXROYW1lKCksIGwuZ2V0KCkpOwogICAgIH0KICAgfQogfQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgIC8vIG91dCBvZiBkYXRlLgogICBzdGQ6OnN0cmluZyBzdGFtcE5hbWUgPQogICAgIGNtU3RyQ2F0KHRoaXMtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9DTWFrZUZpbGVzIik7Ci0gIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3Rvcnkoc3RhbXBOYW1lLmNfc3RyKCkpOworICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KHN0YW1wTmFtZSk7CiAgIHN0YW1wTmFtZSArPSAiL2dlbmVyYXRlLnN0YW1wIjsKICAgY21zeXM6Om9mc3RyZWFtIHN0YW1wKHN0YW1wTmFtZS5jX3N0cigpKTsKICAgc3RhbXAgPDwgIiMgQ01ha2UgZ2VuZXJhdGlvbiB0aW1lc3RhbXAgZmlsZSBmb3IgdGhpcyBkaXJlY3RvcnkuXG4iOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgIH0KIAogICAvLyBhZGQgdG8gdGhlIGxpc3Qgb2YgcHJvamVjdHMKLSAgdGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIiwgbG5hbWUuY19zdHIoKSk7CisgIHRhcmdldC0+VGFyZ2V0LT5TZXRQcm9wZXJ0eSgiR0VORVJBVE9SX0ZJTEVfTkFNRSIsIGxuYW1lKTsKICAgLy8gY3JlYXRlIHRoZSBkc3AuY21ha2UgZmlsZQogICBzdGQ6OnN0cmluZyBmbmFtZTsKICAgZm5hbWUgPSBjbVN0ckNhdCh0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICcvJywgbG5hbWUpOwpAQCAtMjI2LDcgKzIyNiw2IEBACiAKICAgc3RkOjpzdHJpbmcgbWFrZWZpbGVJbiA9CiAgICAgY21TdHJDYXQodGhpcy0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLCAiL0NNYWtlTGlzdHMudHh0Iik7Ci0gIG1ha2VmaWxlSW4gPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKG1ha2VmaWxlSW4pOwogICBpZiAoY21Tb3VyY2VGaWxlKiBmaWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZShtYWtlZmlsZUluKSkgewogICAgIGlmIChmaWxlLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKICAgICAgIHJldHVybiBmaWxlOwpAQCAtMjUyLDE3ICsyNTEsMTYgQEAKICAgc3RkOjpzdHJpbmcgYXJnQiA9IGNtU3RyQ2F0KCItQiIsIHRoaXMtPkdldEJpbmFyeURpcmVjdG9yeSgpKTsKICAgc3RkOjpzdHJpbmcgc3RhbXBOYW1lID0KICAgICBjbVN0ckNhdCh0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICIvQ01ha2VGaWxlcy9nZW5lcmF0ZS5zdGFtcCIpOworICBib29sIHN0ZFBpcGVzVVRGOCA9IHRydWU7CiAgIGNtQ3VzdG9tQ29tbWFuZExpbmVzIGNvbW1hbmRMaW5lcyA9CiAgICAgY21NYWtlU2luZ2xlQ29tbWFuZExpbmUoeyBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgYXJnUywgYXJnQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWNoZWNrLXN0YW1wLWZpbGUiLCBzdGFtcE5hbWUgfSk7CiAgIHN0ZDo6c3RyaW5nIGNvbW1lbnQgPSBjbVN0ckNhdCgiQnVpbGRpbmcgQ3VzdG9tIFJ1bGUgIiwgbWFrZWZpbGVJbik7CiAgIGNvbnN0IGNoYXIqIG5vX3dvcmtpbmdfZGlyZWN0b3J5ID0gbnVsbHB0cjsKLSAgc3RkOjpzdHJpbmcgZnVsbHBhdGhTdGFtcE5hbWUgPQotICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc3RhbXBOYW1lLmNfc3RyKCkpOwotICB0aGlzLT5NYWtlZmlsZS0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgIGZ1bGxwYXRoU3RhbXBOYW1lLCBsaXN0RmlsZXMsIG1ha2VmaWxlSW4sIGNvbW1hbmRMaW5lcywgY29tbWVudC5jX3N0cigpLAotICAgIG5vX3dvcmtpbmdfZGlyZWN0b3J5LCB0cnVlLCBmYWxzZSk7Ci0gIGlmIChjbVNvdXJjZUZpbGUqIGZpbGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U291cmNlKG1ha2VmaWxlSW4uY19zdHIoKSkpIHsKKyAgdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICAgIHN0YW1wTmFtZSwgbGlzdEZpbGVzLCBtYWtlZmlsZUluLCBjb21tYW5kTGluZXMsIGNvbW1lbnQuY19zdHIoKSwKKyAgICBub193b3JraW5nX2RpcmVjdG9yeSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIiIsICIiLCBzdGRQaXBlc1VURjgpOworICBpZiAoY21Tb3VyY2VGaWxlKiBmaWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZShtYWtlZmlsZUluKSkgewogICAgIC8vIEZpbmFsaXplIHRoZSBzb3VyY2UgZmlsZSBwYXRoIG5vdyBzaW5jZSB3ZSdyZSBhZGRpbmcgdGhpcyBhZnRlcgogICAgIC8vIHRoZSBnZW5lcmF0b3IgdmFsaWRhdGVkIGFsbCBwcm9qZWN0LW5hbWVkIHNvdXJjZXMuCiAgICAgZmlsZS0+UmVzb2x2ZUZ1bGxQYXRoKCk7CkBAIC0yNzksMTIgKzI3NywxMyBAQAogewogICBmb3V0IDw8ICJcdDxDb25maWd1cmF0aW9ucz5cbiI7CiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyA6IGNvbmZpZ3MpIHsKLSAgICB0aGlzLT5Xcml0ZUNvbmZpZ3VyYXRpb24oZm91dCwgY29uZmlnLmNfc3RyKCksIGxpYk5hbWUsIHRhcmdldCk7CisgICAgdGhpcy0+V3JpdGVDb25maWd1cmF0aW9uKGZvdXQsIGNvbmZpZywgbGliTmFtZSwgdGFyZ2V0KTsKICAgfQogICBmb3V0IDw8ICJcdDwvQ29uZmlndXJhdGlvbnM+XG4iOwogfQogY21WUzdGbGFnVGFibGUgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3JGb3J0cmFuRmxhZ1RhYmxlW10gPSB7CiAgIHsgIlByZXByb2Nlc3MiLCAiZnBwIiwgIlJ1biBQcmVwcm9jZXNzb3Igb24gZmlsZXMiLCAicHJlcHJvY2Vzc1llcyIsIDAgfSwKKyAgeyAiUHJlcHJvY2VzcyIsICJub2ZwcCIsICJSdW4gUHJlcHJvY2Vzc29yIG9uIGZpbGVzIiwgInByZXByb2Nlc3NObyIsIDAgfSwKICAgeyAiU3VwcHJlc3NTdGFydHVwQmFubmVyIiwgIm5vbG9nbyIsICJTdXBwcmVzc1N0YXJ0dXBCYW5uZXIiLCAidHJ1ZSIsIDAgfSwKICAgeyAiU291cmNlRmlsZUZvcm1hdCIsICJmaXhlZCIsICJVc2UgRml4ZWQgRm9ybWF0IiwgImZpbGVGb3JtYXRGaXhlZCIsIDAgfSwKICAgeyAiU291cmNlRmlsZUZvcm1hdCIsICJmcmVlIiwgIlVzZSBGcmVlIEZvcm1hdCIsICJmaWxlRm9ybWF0RnJlZSIsIDAgfSwKQEAgLTU4MCw3ICs1NzksNyBAQAogICAgICAgdGhpcy0+U3RyZWFtIDw8IHRoaXMtPkxHLT5Fc2NhcGVGb3JYTUwoIlxuIik7CiAgICAgfQogICAgIHN0ZDo6c3RyaW5nIHNjcmlwdCA9IHRoaXMtPkxHLT5Db25zdHJ1Y3RTY3JpcHQoY2NnKTsKLSAgICB0aGlzLT5TdHJlYW0gPDwgdGhpcy0+TEctPkVzY2FwZUZvclhNTChzY3JpcHQuY19zdHIoKSk7CisgICAgdGhpcy0+U3RyZWFtIDw8IHRoaXMtPkxHLT5Fc2NhcGVGb3JYTUwoc2NyaXB0KTsKICAgfQogCiBwcml2YXRlOgpAQCAtNjczLDcgKzY3Miw3IEBACiAKICAgaWYgKHRoaXMtPkZvcnRyYW5Qcm9qZWN0KSB7CiAgICAgc3dpdGNoIChjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhbkZvcm1hdCgKLSAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIkZvcnRyYW5fRk9STUFUIikpKSB7CisgICAgICB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKSkpIHsKICAgICAgIGNhc2UgY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5Gb3JtYXRGaXhlZDoKICAgICAgICAgZmxhZ3MgKz0gIiAtZml4ZWQiOwogICAgICAgICBicmVhazsKQEAgLTY4Myw2ICs2ODIsMTggQEAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHN3aXRjaCAoY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5QcmVwcm9jZXNzKAorICAgICAgdGFyZ2V0LT5HZXRTYWZlUHJvcGVydHkoIkZvcnRyYW5fUFJFUFJPQ0VTUyIpKSkgeworICAgICAgY2FzZSBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhblByZXByb2Nlc3M6Ok5lZWRlZDoKKyAgICAgICAgZmxhZ3MgKz0gIiAtZnBwIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2Vzczo6Tm90TmVlZGVkOgorICAgICAgICBmbGFncyArPSAiIC1ub2ZwcCI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogICB9CiAKICAgLy8gR2V0IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyBmb3IgdGhpcyBkaXJlY3RvcnkuCkBAIC03MzMsMTMgKzc0NCwxMyBAQAogICAgICAgOiB0YXJnZXQtPkdldERpcmVjdG9yeShjb25maWdOYW1lKTsKICAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgICAgZm91dCA8PCAiXHRcdFx0T3V0cHV0RGlyZWN0b3J5PVwiIgotICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShvdXREaXIuY19zdHIoKSkgPDwgIlwiXG4iOworICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShvdXREaXIpIDw8ICJcIlxuIjsKICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICAgfQogCiAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgZm91dCA8PCAiXHRcdFx0SW50ZXJtZWRpYXRlRGlyZWN0b3J5PVwiIgotICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgoaW50ZXJtZWRpYXRlRGlyLmNfc3RyKCkpCisgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChpbnRlcm1lZGlhdGVEaXIpCiAgICAgICAgPDwgIlwiXG4iCiAgICAgICAgPDwgIlx0XHRcdENvbmZpZ3VyYXRpb25UeXBlPVwiIiA8PCBjb25maWdUeXBlIDw8ICJcIlxuIgogICAgICAgIDw8ICJcdFx0XHRVc2VPZk1GQz1cIiIgPDwgbWZjRmxhZyA8PCAiXCJcbiIKQEAgLTc3OSwxNyArNzkwLDE1IEBACiAgIGZvdXQgPDwgIlx0XHRcdDxUb29sXG4iCiAgICAgICAgPDwgIlx0XHRcdFx0TmFtZT1cIiIgPDwgdG9vbCA8PCAiXCJcbiI7CiAgIGlmICh0aGlzLT5Gb3J0cmFuUHJvamVjdCkgewotICAgIGNvbnN0IGNoYXIqIHRhcmdldF9tb2RfZGlyID0KLSAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIkZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWSIpOworICAgIGNtUHJvcCB0YXJnZXRfbW9kX2RpciA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWSIpOwogICAgIHN0ZDo6c3RyaW5nIG1vZERpcjsKICAgICBpZiAodGFyZ2V0X21vZF9kaXIpIHsKICAgICAgIG1vZERpciA9IHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKAotICAgICAgICB0aGlzLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksIHRhcmdldF9tb2RfZGlyKTsKKyAgICAgICAgdGhpcy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAqdGFyZ2V0X21vZF9kaXIpOwogICAgIH0gZWxzZSB7CiAgICAgICBtb2REaXIgPSAiLiI7CiAgICAgfQotICAgIGZvdXQgPDwgIlx0XHRcdFx0TW9kdWxlUGF0aD1cIiIKLSAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgobW9kRGlyLmNfc3RyKCkpCisgICAgZm91dCA8PCAiXHRcdFx0XHRNb2R1bGVQYXRoPVwiIiA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKG1vZERpcikKICAgICAgICAgIDw8ICJcXCQoQ29uZmlndXJhdGlvbk5hbWUpXCJcbiI7CiAgIH0KICAgdGFyZ2V0T3B0aW9ucy5PdXRwdXRBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKApAQCAtODAyLDcgKzgxMSw3IEBACiAgICAgc3RkOjpzdHJpbmcgcGRiID0gdGFyZ2V0LT5HZXRDb21waWxlUERCUGF0aChjb25maWdOYW1lKTsKICAgICBpZiAoIXBkYi5lbXB0eSgpKSB7CiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPVwiIgotICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHBkYi5jX3N0cigpKSA8PCAiXCJcbiI7CisgICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUocGRiKSA8PCAiXCJcbiI7CiAgICAgfQogICB9CiAgIGZvdXQgPDwgIi8+XG4iOyAvLyBlbmQgb2YgPFRvb2wgTmFtZT1WQ0NMQ29tcGlsZXJUb29sCkBAIC04NzksNyArODg4LDcgQEAKICAgICAgIGZvdXQgPDwgIlxuXHRcdFx0XHRBZGRpdGlvbmFsTWFuaWZlc3RGaWxlcz1cIiI7CiAgICAgICBmb3IgKGNtU291cmNlRmlsZSBjb25zdCogbWFuaWZlc3QgOiBtYW5pZmVzdF9zcmNzKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIG0gPSBtYW5pZmVzdC0+R2V0RnVsbFBhdGgoKTsKLSAgICAgICAgZm91dCA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKG0uY19zdHIoKSkgPDwgIjsiOworICAgICAgICBmb3V0IDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgobSkgPDwgIjsiOwogICAgICAgfQogICAgICAgZm91dCA8PCAiXCIiOwogICAgIH0KQEAgLTkzOSwxNyArOTQ4LDE3IEBACiAgICAgICAiICIgKyBHZXRCdWlsZFR5cGVMaW5rZXJGbGFncygiQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHUyIsIGNvbmZpZ05hbWUpOwogICB9CiAKLSAgY29uc3QgY2hhciogdGFyZ2V0TGlua0ZsYWdzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTElOS19GTEFHUyIpOworICBjbVByb3AgdGFyZ2V0TGlua0ZsYWdzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiTElOS19GTEFHUyIpOwogICBpZiAodGFyZ2V0TGlua0ZsYWdzKSB7CiAgICAgZXh0cmFMaW5rT3B0aW9ucyArPSAiICI7Ci0gICAgZXh0cmFMaW5rT3B0aW9ucyArPSB0YXJnZXRMaW5rRmxhZ3M7CisgICAgZXh0cmFMaW5rT3B0aW9ucyArPSAqdGFyZ2V0TGlua0ZsYWdzOwogICB9CiAgIHN0ZDo6c3RyaW5nIGNvbmZpZ1R5cGVVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWdOYW1lKTsKICAgc3RkOjpzdHJpbmcgbGlua0ZsYWdzQ29uZmlnID0gY21TdHJDYXQoIkxJTktfRkxBR1NfIiwgY29uZmlnVHlwZVVwcGVyKTsKLSAgdGFyZ2V0TGlua0ZsYWdzID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShsaW5rRmxhZ3NDb25maWcuY19zdHIoKSk7CisgIHRhcmdldExpbmtGbGFncyA9IHRhcmdldC0+R2V0UHJvcGVydHkobGlua0ZsYWdzQ29uZmlnKTsKICAgaWYgKHRhcmdldExpbmtGbGFncykgewogICAgIGV4dHJhTGlua09wdGlvbnMgKz0gIiAiOwotICAgIGV4dHJhTGlua09wdGlvbnMgKz0gdGFyZ2V0TGlua0ZsYWdzOworICAgIGV4dHJhTGlua09wdGlvbnMgKz0gKnRhcmdldExpbmtGbGFnczsKICAgfQogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcHRzOwpAQCAtOTg1LDcgKzk5NCw3IEBACiAgICAgICBmb3V0IDw8ICJcdFx0XHQ8VG9vbFxuIgogICAgICAgICAgICA8PCAiXHRcdFx0XHROYW1lPVwiIiA8PCB0b29sIDw8ICJcIlxuIjsKICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0T3V0cHV0RmlsZT1cIiIKLSAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShsaWJwYXRoLmNfc3RyKCkpIDw8ICJcIi8+XG4iOworICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKGxpYnBhdGgpIDw8ICJcIi8+XG4iOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWTogewpAQCAtMTAwOCwxNCArMTAxNywxMyBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICBzdGQ6OnN0cmluZyBsaWJmbGFnczsKLSAgICAgIHRoaXMtPkdldFN0YXRpY0xpYnJhcnlGbGFncyhsaWJmbGFncywgY29uZmlnVHlwZVVwcGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UoY29uZmlnTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KTsKKyAgICAgIHRoaXMtPkdldFN0YXRpY0xpYnJhcnlGbGFncygKKyAgICAgICAgbGliZmxhZ3MsIGNvbmZpZ05hbWUsIHRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UoY29uZmlnTmFtZSksIHRhcmdldCk7CiAgICAgICBpZiAoIWxpYmZsYWdzLmVtcHR5KCkpIHsKICAgICAgICAgZm91dCA8PCAiXHRcdFx0XHRBZGRpdGlvbmFsT3B0aW9ucz1cIiIgPDwgbGliZmxhZ3MgPDwgIlwiXG4iOwogICAgICAgfQogICAgICAgZm91dCA8PCAiXHRcdFx0XHRPdXRwdXRGaWxlPVwiIgotICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKGxpYnBhdGguY19zdHIoKSkgPDwgIlwiLz5cbiI7CisgICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUobGlicGF0aCkgPDwgIlwiLz5cbiI7CiAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgpAQCAtMTA1Nyw3ICsxMDY1LDcgQEAKICAgICAgIHRlbXAgPQogICAgICAgICBjbVN0ckNhdCh0YXJnZXQtPkdldERpcmVjdG9yeShjb25maWdOYW1lKSwgJy8nLCB0YXJnZXROYW1lcy5PdXRwdXQpOwogICAgICAgZm91dCA8PCAiXHRcdFx0XHRPdXRwdXRGaWxlPVwiIgotICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHRlbXAuY19zdHIoKSkgPDwgIlwiXG4iOworICAgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHRlbXApIDw8ICJcIlxuIjsKICAgICAgIHRoaXMtPldyaXRlVGFyZ2V0VmVyc2lvbkF0dHJpYnV0ZShmb3V0LCB0YXJnZXQpOwogICAgICAgbGlua09wdGlvbnMuT3V0cHV0RmxhZ01hcChmb3V0LCA0KTsKICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz1cIiI7CkBAIC0xMDY2LDcgKzEwNzQsNyBAQAogICAgICAgdGVtcCA9CiAgICAgICAgIGNtU3RyQ2F0KHRhcmdldC0+R2V0UERCRGlyZWN0b3J5KGNvbmZpZ05hbWUpLCAnLycsIHRhcmdldE5hbWVzLlBEQik7CiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdFByb2dyYW1EYXRhYmFzZUZpbGU9XCIiCi0gICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUodGVtcC5jX3N0cigpKSA8PCAiXCJcbiI7CisgICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUodGVtcCkgPDwgIlwiXG4iOwogICAgICAgaWYgKHRhcmdldE9wdGlvbnMuSXNEZWJ1ZygpKSB7CiAgICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPVwidHJ1ZVwiXG4iOwogICAgICAgfQpAQCAtMTA3OCw3ICsxMDg2LDcgQEAKICAgICAgICAgfQogICAgICAgfQogICAgICAgc3RkOjpzdHJpbmcgc3RhY2tWYXIgPSBjbVN0ckNhdCgiQ01BS0VfIiwgbGlua0xhbmd1YWdlLCAiX1NUQUNLX1NJWkUiKTsKLSAgICAgIGNvbnN0IGNoYXIqIHN0YWNrVmFsID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oc3RhY2tWYXIuY19zdHIoKSk7CisgICAgICBjb25zdCBjaGFyKiBzdGFja1ZhbCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHN0YWNrVmFyKTsKICAgICAgIGlmIChzdGFja1ZhbCkgewogICAgICAgICBmb3V0IDw8ICJcdFx0XHRcdFN0YWNrUmVzZXJ2ZVNpemU9XCIiIDw8IHN0YWNrVmFsIDw8ICJcIlxuIjsKICAgICAgIH0KQEAgLTEwODYsNyArMTA5NCw3IEBACiAgICAgICAgIHRhcmdldC0+R2V0RGlyZWN0b3J5KGNvbmZpZ05hbWUsIGNtU3RhdGVFbnVtczo6SW1wb3J0TGlicmFyeUFydGlmYWN0KSwKICAgICAgICAgJy8nLCB0YXJnZXROYW1lcy5JbXBvcnRMaWJyYXJ5KTsKICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0SW1wb3J0TGlicmFyeT1cIiIKLSAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZSh0ZW1wLmNfc3RyKCkpIDw8ICJcIiI7CisgICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUodGVtcCkgPDwgIlwiIjsKICAgICAgIGlmICh0aGlzLT5Gb3J0cmFuUHJvamVjdCkgewogICAgICAgICBmb3V0IDw8ICJcblx0XHRcdFx0TGlua0RMTD1cInRydWVcIiI7CiAgICAgICB9CkBAIC0xMTMyLDE0ICsxMTQwLDE0IEBACiAgICAgICB0ZW1wID0KICAgICAgICAgY21TdHJDYXQodGFyZ2V0LT5HZXREaXJlY3RvcnkoY29uZmlnTmFtZSksICcvJywgdGFyZ2V0TmFtZXMuT3V0cHV0KTsKICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0T3V0cHV0RmlsZT1cIiIKLSAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZSh0ZW1wLmNfc3RyKCkpIDw8ICJcIlxuIjsKKyAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZSh0ZW1wKSA8PCAiXCJcbiI7CiAgICAgICB0aGlzLT5Xcml0ZVRhcmdldFZlcnNpb25BdHRyaWJ1dGUoZm91dCwgdGFyZ2V0KTsKICAgICAgIGxpbmtPcHRpb25zLk91dHB1dEZsYWdNYXAoZm91dCwgNCk7CiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9XCIiOwogICAgICAgdGhpcy0+T3V0cHV0TGlicmFyeURpcmVjdG9yaWVzKGZvdXQsIGNsaS5HZXREaXJlY3RvcmllcygpKTsKICAgICAgIGZvdXQgPDwgIlwiXG4iOwogICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUoCi0gICAgICAgIHRhcmdldC0+R2V0UERCRGlyZWN0b3J5KGNvbmZpZ05hbWUpLmNfc3RyKCkpOworICAgICAgICB0YXJnZXQtPkdldFBEQkRpcmVjdG9yeShjb25maWdOYW1lKSk7CiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdFByb2dyYW1EYXRhYmFzZUZpbGU9XCIiIDw8IHBhdGggPDwgIi8iCiAgICAgICAgICAgIDw8IHRhcmdldE5hbWVzLlBEQiA8PCAiXCJcbiI7CiAgICAgICBpZiAodGFyZ2V0T3B0aW9ucy5Jc0RlYnVnKCkpIHsKQEAgLTExNjcsNyArMTE3NSw3IEBACiAgICAgICAgICAgICAgPDwgIlwiXG4iOwogICAgICAgfQogICAgICAgc3RkOjpzdHJpbmcgc3RhY2tWYXIgPSBjbVN0ckNhdCgiQ01BS0VfIiwgbGlua0xhbmd1YWdlLCAiX1NUQUNLX1NJWkUiKTsKLSAgICAgIGNvbnN0IGNoYXIqIHN0YWNrVmFsID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oc3RhY2tWYXIuY19zdHIoKSk7CisgICAgICBjb25zdCBjaGFyKiBzdGFja1ZhbCA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHN0YWNrVmFyKTsKICAgICAgIGlmIChzdGFja1ZhbCkgewogICAgICAgICBmb3V0IDw8ICJcdFx0XHRcdFN0YWNrUmVzZXJ2ZVNpemU9XCIiIDw8IHN0YWNrVmFsIDw8ICJcIiI7CiAgICAgICB9CkBAIC0xMTc1LDcgKzExODMsNyBAQAogICAgICAgICB0YXJnZXQtPkdldERpcmVjdG9yeShjb25maWdOYW1lLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCksCiAgICAgICAgICcvJywgdGFyZ2V0TmFtZXMuSW1wb3J0TGlicmFyeSk7CiAgICAgICBmb3V0IDw8ICJcdFx0XHRcdEltcG9ydExpYnJhcnk9XCIiCi0gICAgICAgICAgIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUodGVtcC5jX3N0cigpKSA8PCAiXCIvPlxuIjsKKyAgICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZSh0ZW1wKSA8PCAiXCIvPlxuIjsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VVRJTElUWToKQEAgLTEyMDgsOCArMTIxNiw4IEBACiAgIHN0ZDo6b3N0cmVhbSYgZm91dCwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKIHsKICAgaWYgKHRoaXMtPldpbmRvd3NDRVByb2plY3QpIHsKLSAgICBjb25zdCBjaGFyKiBkaXIgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkiKTsKLSAgICBjb25zdCBjaGFyKiBhZGRpdGlvbmFsRmlsZXMgPQorICAgIGNtUHJvcCBkaXIgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkiKTsKKyAgICBjbVByb3AgYWRkaXRpb25hbEZpbGVzID0KICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIkRFUExPWU1FTlRfQURESVRJT05BTF9GSUxFUyIpOwogCiAgICAgaWYgKGRpciA9PSBudWxscHRyICYmIGFkZGl0aW9uYWxGaWxlcyA9PSBudWxscHRyKSB7CkBAIC0xMjE5LDE1ICsxMjI3LDE1IEBACiAgICAgZm91dCA8PCAiXHRcdFx0PERlcGxveW1lbnRUb29sXG4iCiAgICAgICAgICAgICAiXHRcdFx0XHRGb3JjZURpcnR5PVwiLTFcIlxuIgogICAgICAgICAgICAgIlx0XHRcdFx0UmVtb3RlRGlyZWN0b3J5PVwiIgotICAgICAgICAgPDwgR2V0RXNjYXBlZFByb3BlcnR5SWZWYWx1ZU5vdE5VTEwoZGlyKQorICAgICAgICAgPDwgR2V0RXNjYXBlZFByb3BlcnR5SWZWYWx1ZU5vdE5VTEwoZGlyLT5jX3N0cigpKQogICAgICAgICAgPDwgIlwiXG4iCiAgICAgICAgICAgICAiXHRcdFx0XHRSZWdpc3Rlck91dHB1dD1cIjBcIlxuIgogICAgICAgICAgICAgIlx0XHRcdFx0QWRkaXRpb25hbEZpbGVzPVwiIgotICAgICAgICAgPDwgR2V0RXNjYXBlZFByb3BlcnR5SWZWYWx1ZU5vdE5VTEwoYWRkaXRpb25hbEZpbGVzKSA8PCAiXCIvPlxuIjsKKyAgICAgICAgIDw8IEdldEVzY2FwZWRQcm9wZXJ0eUlmVmFsdWVOb3ROVUxMKGFkZGl0aW9uYWxGaWxlcy0+Y19zdHIoKSkKKyAgICAgICAgIDw8ICJcIi8+XG4iOwogCiAgICAgaWYgKGRpciAhPSBudWxscHRyKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBjb25zdCBleGUgPQotICAgICAgICBkaXIgKyBzdGQ6OnN0cmluZygiXFwiKSArIHRhcmdldC0+R2V0RnVsbE5hbWUoY29uZmlnKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGV4ZSA9ICpkaXIgKyAiXFwiICsgdGFyZ2V0LT5HZXRGdWxsTmFtZShjb25maWcpOwogCiAgICAgICBmb3V0IDw8ICJcdFx0XHQ8RGVidWdnZXJUb29sXG4iCiAgICAgICAgICAgICAgICJcdFx0XHRcdFJlbW90ZUV4ZWN1dGFibGU9XCIiCkBAIC0xMjU2LDggKzEyNjQsOCBAQAogICBmb3IgKGF1dG8gY29uc3QmIGxpYiA6IGxpYnMpIHsKICAgICBpZiAobGliLklzUGF0aCkgewogICAgICAgc3RkOjpzdHJpbmcgcmVsID0KLSAgICAgICAgbGctPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsIGxpYi5WYWx1ZS5WYWx1ZS5jX3N0cigpKTsKLSAgICAgIGZvdXQgPDwgbGctPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgocmVsLmNfc3RyKCkpIDw8ICIgIjsKKyAgICAgICAgbGctPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsIGxpYi5WYWx1ZS5WYWx1ZSk7CisgICAgICBmb3V0IDw8IGxnLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKHJlbCkgPDwgIiAiOwogICAgIH0gZWxzZSBpZiAoIWxpYi5UYXJnZXQgfHwKICAgICAgICAgICAgICAgIGxpYi5UYXJnZXQtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CiAgICAgICBmb3V0IDw8IGxpYi5WYWx1ZS5WYWx1ZSA8PCAiICI7CkBAIC0xMjgyLDcgKzEyOTAsNyBAQAogICAgIGlmICghb2JqLT5HZXRPYmplY3RMaWJyYXJ5KCkuZW1wdHkoKSkgewogICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG9iakZpbGUgPSBvYmotPkdldEZ1bGxQYXRoKCk7CiAgICAgICBzdGQ6OnN0cmluZyByZWwgPSBsZy0+TWF5YmVDb252ZXJ0VG9SZWxhdGl2ZVBhdGgoY3VycmVudEJpbkRpciwgb2JqRmlsZSk7Ci0gICAgICBmb3V0IDw8IHNlcCA8PCBsZy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChyZWwuY19zdHIoKSk7CisgICAgICBmb3V0IDw8IHNlcCA8PCBsZy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChyZWwpOwogICAgICAgc2VwID0gIiAiOwogICAgIH0KICAgfQpAQCAtMTMwMyw5ICsxMzExLDggQEAKICAgICB9CiAKICAgICAvLyBTd2l0Y2ggdG8gYSByZWxhdGl2ZSBwYXRoIHNwZWNpZmljYXRpb24gaWYgaXQgaXMgc2hvcnRlci4KLSAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgoZGlyLmNfc3RyKCkpKSB7Ci0gICAgICBzdGQ6OnN0cmluZyByZWwgPQotICAgICAgICB0aGlzLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aChjdXJyZW50QmluRGlyLCBkaXIuY19zdHIoKSk7CisgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGRpcikpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIHJlbCA9IHRoaXMtPk1heWJlQ29udmVydFRvUmVsYXRpdmVQYXRoKGN1cnJlbnRCaW5EaXIsIGRpcik7CiAgICAgICBpZiAocmVsLnNpemUoKSA8IGRpci5zaXplKCkpIHsKICAgICAgICAgZGlyID0gcmVsOwogICAgICAgfQpAQCAtMTMxNCw5ICsxMzIxLDggQEAKICAgICAvLyBGaXJzdCBzZWFyY2ggYSBjb25maWd1cmF0aW9uLXNwZWNpZmljIHN1YmRpcmVjdG9yeSBhbmQgdGhlbiB0aGUKICAgICAvLyBvcmlnaW5hbCBkaXJlY3RvcnkuCiAgICAgZm91dCA8PCBjb21tYQotICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aCgKLSAgICAgICAgICAgICAgKGRpciArICIvJChDb25maWd1cmF0aW9uTmFtZSkiKS5jX3N0cigpKQotICAgICAgICAgPDwgIiwiIDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgoZGlyLmNfc3RyKCkpOworICAgICAgICAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChkaXIgKyAiLyQoQ29uZmlndXJhdGlvbk5hbWUpIikgPDwgIiwiCisgICAgICAgICA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKGRpcik7CiAgICAgY29tbWEgPSAiLCI7CiAgIH0KIH0KQEAgLTEzMjUsOCArMTMzMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpYk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKIHsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7Ci0gIHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdzKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3MgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgLy8gV2UgbWF5IGJlIG1vZGlmeWluZyB0aGUgc291cmNlIGdyb3VwcyB0ZW1wb3JhcmlseSwgc28gbWFrZSBhIGNvcHkuCiAgIHN0ZDo6dmVjdG9yPGNtU291cmNlR3JvdXA+IHNvdXJjZUdyb3VwcyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTb3VyY2VHcm91cHMoKTsKQEAgLTEzMzcsNyArMTM0Myw3IEBACiAgIC8vIEFkZCBDTWFrZUxpc3RzLnR4dCBmaWxlIHdpdGggcnVsZSB0byByZS1ydW4gQ01ha2UgZm9yIHVzZXIgY29udmVuaWVuY2UuCiAgIGlmICh0YXJnZXQtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQgJiYKICAgICAgIHRhcmdldC0+R2V0TmFtZSgpICE9IENNQUtFX0NIRUNLX0JVSUxEX1NZU1RFTV9UQVJHRVQpIHsKLSAgICBpZiAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiA9IHRoaXMtPkNyZWF0ZVZDUHJvakJ1aWxkUnVsZSgpKSB7CisgICAgaWYgKGNtU291cmNlRmlsZSogc2YgPSB0aGlzLT5DcmVhdGVWQ1Byb2pCdWlsZFJ1bGUoKSkgewogICAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OkFsbENvbmZpZ1NvdXJjZSBhY3M7CiAgICAgICBhY3MuU291cmNlID0gc2Y7CiAgICAgICBhY3MuS2luZCA9IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VLaW5kQ3VzdG9tQ29tbWFuZDsKQEAgLTE0NTIsMTQgKzE0NTgsMTUgQEAKICAgICAgIG5lZWRmYyA9IHRydWU7CiAgICAgfQogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfRkxBR1MoIkNPTVBJTEVfRkxBR1MiKTsKLSAgICBpZiAoY29uc3QgY2hhciogY2ZsYWdzID0gc2YuR2V0UHJvcGVydHkoQ09NUElMRV9GTEFHUykpIHsKLSAgICAgIGZjLkNvbXBpbGVGbGFncyA9IGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY2ZsYWdzLCBDT01QSUxFX0ZMQUdTKTsKKyAgICBpZiAoY21Qcm9wIGNmbGFncyA9IHNmLkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7CisgICAgICBmYy5Db21waWxlRmxhZ3MgPSBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjZmxhZ3MsIENPTVBJTEVfRkxBR1MpOwogICAgICAgbmVlZGZjID0gdHJ1ZTsKICAgICB9CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9PUFRJT05TKCJDT01QSUxFX09QVElPTlMiKTsKLSAgICBpZiAoY29uc3QgY2hhciogY29wdGlvbnMgPSBzZi5HZXRQcm9wZXJ0eShDT01QSUxFX09QVElPTlMpKSB7CisgICAgaWYgKGNtUHJvcCBjb3B0aW9ucyA9IHNmLkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKICAgICAgIGxnLT5BcHBlbmRDb21waWxlT3B0aW9ucygKLSAgICAgICAgZmMuQ29tcGlsZUZsYWdzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvcHRpb25zLCBDT01QSUxFX09QVElPTlMpKTsKKyAgICAgICAgZmMuQ29tcGlsZUZsYWdzLAorICAgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb3B0aW9ucywgQ09NUElMRV9PUFRJT05TKSk7CiAgICAgICBuZWVkZmMgPSB0cnVlOwogICAgIH0KICAgICAvLyBBZGQgcHJlY29tcGlsZSBoZWFkZXJzIGNvbXBpbGUgb3B0aW9ucy4KQEAgLTE0NzksOCArMTQ4NiwyMiBAQAogICAgIH0KIAogICAgIGlmIChsZy0+Rm9ydHJhblByb2plY3QpIHsKKyAgICAgIHN3aXRjaCAoY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5QcmVwcm9jZXNzKAorICAgICAgICBzZi5HZXRTYWZlUHJvcGVydHkoIkZvcnRyYW5fUFJFUFJPQ0VTUyIpKSkgeworICAgICAgICBjYXNlIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2Vzczo6TmVlZGVkOgorICAgICAgICAgIGZjLkNvbXBpbGVGbGFncyA9IGNtU3RyQ2F0KCItZnBwICIsIGZjLkNvbXBpbGVGbGFncyk7CisgICAgICAgICAgbmVlZGZjID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhblByZXByb2Nlc3M6Ok5vdE5lZWRlZDoKKyAgICAgICAgICBmYy5Db21waWxlRmxhZ3MgPSBjbVN0ckNhdCgiLW5vZnBwICIsIGZjLkNvbXBpbGVGbGFncyk7CisgICAgICAgICAgbmVlZGZjID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKwogICAgICAgc3dpdGNoIChjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhbkZvcm1hdCgKLSAgICAgICAgc2YuR2V0UHJvcGVydHkoIkZvcnRyYW5fRk9STUFUIikpKSB7CisgICAgICAgIHNmLkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9GT1JNQVQiKSkpIHsKICAgICAgICAgY2FzZSBjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhbkZvcm1hdEZpeGVkOgogICAgICAgICAgIGZjLkNvbXBpbGVGbGFncyA9ICItZml4ZWQgIiArIGZjLkNvbXBpbGVGbGFnczsKICAgICAgICAgICBuZWVkZmMgPSB0cnVlOwpAQCAtMTQ5NCw0MSArMTUxNSw0MCBAQAogICAgICAgfQogICAgIH0KICAgICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX0RFRklOSVRJT05TKCJDT01QSUxFX0RFRklOSVRJT05TIik7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNkZWZzID0gc2YuR2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKLSAgICAgIGZjLkNvbXBpbGVEZWZzID0gZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUyk7CisgICAgaWYgKGNtUHJvcCBjZGVmcyA9IHNmLkdldFByb3BlcnR5KENPTVBJTEVfREVGSU5JVElPTlMpKSB7CisgICAgICBmYy5Db21waWxlRGVmcyA9IGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNkZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKTsKICAgICAgIG5lZWRmYyA9IHRydWU7CiAgICAgfQogICAgIHN0ZDo6c3RyaW5nIGRlZlByb3BOYW1lID0gY21TdHJDYXQoIkNPTVBJTEVfREVGSU5JVElPTlNfIiwgY29uZmlnVXBwZXIpOwotICAgIGlmIChjb25zdCBjaGFyKiBjY2RlZnMgPSBzZi5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSkpIHsKKyAgICBpZiAoY21Qcm9wIGNjZGVmcyA9IHNmLkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgewogICAgICAgZmMuQ29tcGlsZURlZnNDb25maWcgPQotICAgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNjZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUyk7CisgICAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNjZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUyk7CiAgICAgICBuZWVkZmMgPSB0cnVlOwogICAgIH0KIAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIElOQ0xVREVfRElSRUNUT1JJRVMoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKLSAgICBpZiAoY29uc3QgY2hhciogY2luY3MgPSBzZi5HZXRQcm9wZXJ0eShJTkNMVURFX0RJUkVDVE9SSUVTKSkgewotICAgICAgZmMuSW5jbHVkZURpcnMgPSBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNpbmNzLCBJTkNMVURFX0RJUkVDVE9SSUVTKTsKKyAgICBpZiAoY21Qcm9wIGNpbmNzID0gc2YuR2V0UHJvcGVydHkoSU5DTFVERV9ESVJFQ1RPUklFUykpIHsKKyAgICAgIGZjLkluY2x1ZGVEaXJzID0gZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2luY3MsIElOQ0xVREVfRElSRUNUT1JJRVMpOwogICAgICAgbmVlZGZjID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBDaGVjayBmb3IgZXh0cmEgb2JqZWN0LWZpbGUgZGVwZW5kZW5jaWVzLgotICAgIGlmIChjb25zdCBjaGFyKiBkZXBzID0gc2YuR2V0UHJvcGVydHkoIk9CSkVDVF9ERVBFTkRTIikpIHsKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzID0gY21FeHBhbmRlZExpc3QoZGVwcyk7CisgICAgaWYgKGNtUHJvcCBkZXBzID0gc2YuR2V0UHJvcGVydHkoIk9CSkVDVF9ERVBFTkRTIikpIHsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzID0gY21FeHBhbmRlZExpc3QoKmRlcHMpOwogICAgICAgY29uc3QgY2hhciogc2VwID0gIiI7Ci0gICAgICBmb3IgKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6aXRlcmF0b3IgaiA9IGRlcGVuZHMuYmVnaW4oKTsKLSAgICAgICAgICAgaiAhPSBkZXBlbmRzLmVuZCgpOyArK2opIHsKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGQgOiBkZXBlbmRzKSB7CiAgICAgICAgIGZjLkFkZGl0aW9uYWxEZXBzICs9IHNlcDsKLSAgICAgICAgZmMuQWRkaXRpb25hbERlcHMgKz0gbGctPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgoai0+Y19zdHIoKSk7CisgICAgICAgIGZjLkFkZGl0aW9uYWxEZXBzICs9IGxnLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoKGQpOwogICAgICAgICBzZXAgPSAiOyI7CiAgICAgICAgIG5lZWRmYyA9IHRydWU7CiAgICAgICB9CiAgICAgfQogCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSA9IGd0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWcuY19zdHIoKSk7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSA9IGd0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWcpOwogICAgIC8vIElmIEhFQURFUl9GSUxFX09OTFkgaXMgc2V0LCB3ZSBtdXN0IHN1cHByZXNzIHRoaXMgZ2VuZXJhdGlvbiBpbgogICAgIC8vIHRoZSBwcm9qZWN0IGZpbGUKICAgICBmYy5FeGNsdWRlZEZyb21CdWlsZCA9IHNmLkdldFByb3BlcnR5QXNCb29sKCJIRUFERVJfRklMRV9PTkxZIikgfHwKLSAgICAgICFjbUNvbnRhaW5zKGFjcy5Db25maWdzLCBjaSkgfHwKKyAgICAgICFjbTo6Y29udGFpbnMoYWNzLkNvbmZpZ3MsIGNpKSB8fAogICAgICAgKGd0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiVU5JVFlfQlVJTEQiKSAmJgogICAgICAgIHNmLkdldFByb3BlcnR5KCJVTklUWV9TT1VSQ0VfRklMRSIpICYmCiAgICAgICAgIXNmLkdldFByb3BlcnR5QXNCb29sKCJTS0lQX1VOSVRZX0JVSUxEX0lOQ0xVU0lPTiIpKTsKQEAgLTE1NjAsOCArMTU4MCw5IEBACiBzdGQ6OnN0cmluZyBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6Q29tcHV0ZUxvbmdlc3RPYmplY3REaXJlY3RvcnkoCiAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQpIGNvbnN0CiB7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzOwotICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlncyk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzID0KKyAgICB0YXJnZXQtPlRhcmdldC0+R2V0TWFrZWZpbGUoKS0+R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgICAgIGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBsZW5ndGggY29uZmlndXJhdGlvbiBuYW1lLgogICBzdGQ6OnN0cmluZyBjb25maWdfbWF4OwpAQCAtMTYyOSw3ICsxNjUwLDcgQEAKICAgICAgIEZDSW5mbyBmY2luZm8odGhpcywgdGFyZ2V0LCBhY3MsIGNvbmZpZ3MpOwogCiAgICAgICBmb3V0IDw8ICJcdFx0XHQ8RmlsZVxuIjsKLSAgICAgIHN0ZDo6c3RyaW5nIGQgPSB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHNvdXJjZS5jX3N0cigpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGQgPSB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKHNvdXJjZSk7CiAgICAgICAvLyBUZWxsIE1TLURldiB3aGF0IHRoZSBzb3VyY2UgaXMuICBJZiB0aGUgY29tcGlsZXIga25vd3MgaG93IHRvCiAgICAgICAvLyBidWlsZCBpdCwgdGhlbiBpdCB3aWxsLgogICAgICAgZm91dCA8PCAiXHRcdFx0XHRSZWxhdGl2ZVBhdGg9XCIiIDw8IGQgPDwgIlwiPlxuIjsKQEAgLTE3NTksMjEgKzE3ODAsMjEgQEAKICAgICAgIGZvdXQgPDwgIlx0XHRcdFx0XHQ8VG9vbFxuIgogICAgICAgICAgICA8PCAiXHRcdFx0XHRcdE5hbWU9XCIiIDw8IGNvbXBpbGVUb29sIDw8ICJcIlxuIgogICAgICAgICAgICA8PCAiXHRcdFx0XHRcdEFkZGl0aW9uYWxPcHRpb25zPVwiIgotICAgICAgICAgICA8PCB0aGlzLT5Fc2NhcGVGb3JYTUwoZmMuQ29tcGlsZUZsYWdzLmNfc3RyKCkpIDw8ICJcIi8+XG4iOworICAgICAgICAgICA8PCB0aGlzLT5Fc2NhcGVGb3JYTUwoZmMuQ29tcGlsZUZsYWdzKSA8PCAiXCIvPlxuIjsKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBjb21tZW50ID0gdGhpcy0+Q29uc3RydWN0Q29tbWVudChjY2cpOwogICAgIHN0ZDo6c3RyaW5nIHNjcmlwdCA9IHRoaXMtPkNvbnN0cnVjdFNjcmlwdChjY2cpOwogICAgIGlmICh0aGlzLT5Gb3J0cmFuUHJvamVjdCkgewotICAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhzY3JpcHQsICIkKENvbmZpZ3VyYXRpb24pIiwgY29uZmlnLmNfc3RyKCkpOworICAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhzY3JpcHQsICIkKENvbmZpZ3VyYXRpb24pIiwgY29uZmlnKTsKICAgICB9CiAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICAgIGZvdXQgPDwgIlx0XHRcdFx0XHQ8VG9vbFxuIgogICAgICAgICAgPDwgIlx0XHRcdFx0XHROYW1lPVwiIiA8PCBjdXN0b21Ub29sIDw8ICJcIlxuIgogICAgICAgICAgPDwgIlx0XHRcdFx0XHREZXNjcmlwdGlvbj1cIiIKLSAgICAgICAgIDw8IHRoaXMtPkVzY2FwZUZvclhNTChjb21tZW50LmNfc3RyKCkpIDw8ICJcIlxuIgorICAgICAgICAgPDwgdGhpcy0+RXNjYXBlRm9yWE1MKGNvbW1lbnQpIDw8ICJcIlxuIgogICAgICAgICAgPDwgIlx0XHRcdFx0XHRDb21tYW5kTGluZT1cIiIKLSAgICAgICAgIDw8IHRoaXMtPkVzY2FwZUZvclhNTChzY3JpcHQuY19zdHIoKSkgPDwgIlwiXG4iCisgICAgICAgICA8PCB0aGlzLT5Fc2NhcGVGb3JYTUwoc2NyaXB0KSA8PCAiXCJcbiIKICAgICAgICAgIDw8ICJcdFx0XHRcdFx0QWRkaXRpb25hbERlcGVuZGVuY2llcz1cIiI7CiAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgICAgaWYgKGNjZy5HZXREZXBlbmRzKCkuZW1wdHkoKSkgewpAQCAtMTc4OSw4ICsxODEwLDggQEAKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGQgOiBjY2cuR2V0RGVwZW5kcygpKSB7CiAgICAgICAgIC8vIEdldCB0aGUgcmVhbCBuYW1lIG9mIHRoZSBkZXBlbmRlbmN5IGluIGNhc2UgaXQgaXMgYSBDTWFrZSB0YXJnZXQuCiAgICAgICAgIHN0ZDo6c3RyaW5nIGRlcDsKLSAgICAgICAgaWYgKHRoaXMtPkdldFJlYWxEZXBlbmRlbmN5KGQuY19zdHIoKSwgY29uZmlnLmNfc3RyKCksIGRlcCkpIHsKLSAgICAgICAgICBmb3V0IDw8IHRoaXMtPkNvbnZlcnRUb1hNTE91dHB1dFBhdGgoZGVwLmNfc3RyKCkpIDw8ICI7IjsKKyAgICAgICAgaWYgKHRoaXMtPkdldFJlYWxEZXBlbmRlbmN5KGQsIGNvbmZpZywgZGVwKSkgeworICAgICAgICAgIGZvdXQgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aChkZXApIDw8ICI7IjsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTE4MDIsNyArMTgyMyw3IEBACiAgICAgICAvLyBXcml0ZSBhIHJ1bGUgZm9yIHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoaXMgY29tbWFuZC4KICAgICAgIGNvbnN0IGNoYXIqIHNlcCA9ICIiOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb3V0cHV0IDogY2NnLkdldE91dHB1dHMoKSkgewotICAgICAgICBmb3V0IDw8IHNlcCA8PCB0aGlzLT5Db252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKG91dHB1dC5jX3N0cigpKTsKKyAgICAgICAgZm91dCA8PCBzZXAgPDwgdGhpcy0+Q29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShvdXRwdXQpOwogICAgICAgICBzZXAgPSAiOyI7CiAgICAgICB9CiAgICAgfQpAQCAtMTg4MSwyMCArMTkwMiwyMCBAQAogewogICAvLyBpZiB3ZSBoYXZlIGFsbCB0aGUgcmVxdWlyZWQgU291cmNlIGNvZGUgY29udHJvbCB0YWdzCiAgIC8vIHRoZW4gYWRkIHRoYXQgdG8gdGhlIHByb2plY3QKLSAgY29uc3QgY2hhciogdnNQcm9qZWN0bmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19QUk9KRUNUTkFNRSIpOwotICBjb25zdCBjaGFyKiB2c0xvY2FscGF0aCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19MT0NBTFBBVEgiKTsKLSAgY29uc3QgY2hhciogdnNQcm92aWRlciA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19QUk9WSURFUiIpOworICBjbVByb3AgdnNQcm9qZWN0bmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19QUk9KRUNUTkFNRSIpOworICBjbVByb3AgdnNMb2NhbHBhdGggPSB0YXJnZXQtPkdldFByb3BlcnR5KCJWU19TQ0NfTE9DQUxQQVRIIik7CisgIGNtUHJvcCB2c1Byb3ZpZGVyID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfU0NDX1BST1ZJREVSIik7CiAKICAgaWYgKHZzUHJvdmlkZXIgJiYgdnNMb2NhbHBhdGggJiYgdnNQcm9qZWN0bmFtZSkgewogICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KLSAgICBmb3V0IDw8ICJcdFNjY1Byb2plY3ROYW1lPVwiIiA8PCB2c1Byb2plY3RuYW1lIDw8ICJcIlxuIgotICAgICAgICAgPDwgIlx0U2NjTG9jYWxQYXRoPVwiIiA8PCB2c0xvY2FscGF0aCA8PCAiXCJcbiIKLSAgICAgICAgIDw8ICJcdFNjY1Byb3ZpZGVyPVwiIiA8PCB2c1Byb3ZpZGVyIDw8ICJcIlxuIjsKKyAgICBmb3V0IDw8ICJcdFNjY1Byb2plY3ROYW1lPVwiIiA8PCAqdnNQcm9qZWN0bmFtZSA8PCAiXCJcbiIKKyAgICAgICAgIDw8ICJcdFNjY0xvY2FsUGF0aD1cIiIgPDwgKnZzTG9jYWxwYXRoIDw8ICJcIlxuIgorICAgICAgICAgPDwgIlx0U2NjUHJvdmlkZXI9XCIiIDw8ICp2c1Byb3ZpZGVyIDw8ICJcIlxuIjsKICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KIAotICAgIGNvbnN0IGNoYXIqIHZzQXV4UGF0aCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19BVVhQQVRIIik7CisgICAgY21Qcm9wIHZzQXV4UGF0aCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1NDQ19BVVhQQVRIIik7CiAgICAgaWYgKHZzQXV4UGF0aCkgewotICAgICAgZm91dCA8PCAiXHRTY2NBdXhQYXRoPVwiIiA8PCB2c0F1eFBhdGggPDwgIlwiXG4iOworICAgICAgZm91dCA8PCAiXHRTY2NBdXhQYXRoPVwiIiA8PCAqdnNBdXhQYXRoIDw8ICJcIlxuIjsKICAgICB9CiAgIH0KIH0KQEAgLTE5MTIsMTAgKzE5MzMsOCBAQAogICAgICAgIDw8ICJcdFByb2plY3RDcmVhdG9yPVwiSW50ZWwgRm9ydHJhblwiXG4iCiAgICAgICAgPDwgIlx0VmVyc2lvbj1cIiIgPDwgZ2ctPkdldEludGVsUHJvamVjdFZlcnNpb24oKSA8PCAiXCJcbiI7CiAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotICBjb25zdCBjaGFyKiBrZXl3b3JkID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfS0VZV09SRCIpOwotICBpZiAoIWtleXdvcmQpIHsKLSAgICBrZXl3b3JkID0gIkNvbnNvbGUgQXBwbGljYXRpb24iOwotICB9CisgIGNtUHJvcCBwID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfS0VZV09SRCIpOworICBjb25zdCBjaGFyKiBrZXl3b3JkID0gcCA/IHAtPmNfc3RyKCkgOiAiQ29uc29sZSBBcHBsaWNhdGlvbiI7CiAgIGNvbnN0IGNoYXIqIHByb2plY3RUeXBlID0gMDsKICAgc3dpdGNoICh0YXJnZXQtPkdldFR5cGUoKSkgewogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKQEAgLTE5NDgsNyArMTk2Nyw3IEBACiAgIHRoaXMtPldyaXRlUHJvamVjdFNDQyhmb3V0LCB0YXJnZXQpOwogICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCiAgIGZvdXQ8PCAiXHRLZXl3b3JkPVwiIiA8PCBrZXl3b3JkIDw8ICJcIj5cbiIKLSAgICAgICA8PCAiXHRQcm9qZWN0R1VJRD1cInsiIDw8IGdnLT5HZXRHVUlEKGxpYk5hbWUuY19zdHIoKSkgPDwgIn1cIj5cbiIKKyAgICAgICA8PCAiXHRQcm9qZWN0R1VJRD1cInsiIDw8IGdnLT5HZXRHVUlEKGxpYk5hbWUpIDw8ICJ9XCI+XG4iCiAgICAgICAgPDwgIlx0PFBsYXRmb3Jtcz5cbiIKICAgICAgICA8PCAiXHRcdDxQbGF0Zm9ybVxuXHRcdFx0TmFtZT1cIiIgPDwgZ2ctPkdldFBsYXRmb3JtTmFtZSgpIDw8ICJcIi8+XG4iCiAgICAgICAgPDwgIlx0PC9QbGF0Zm9ybXM+XG4iOwpAQCAtMTk3NCwyMCArMTk5MywxNiBAQAogICAgICAgIDw8ICJcdFByb2plY3RUeXBlPVwiVmlzdWFsIEMrK1wiXG4iOwogICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICAgZm91dCA8PCAiXHRWZXJzaW9uPVwiIiA8PCAoZ2ctPkdldFZlcnNpb24oKSAvIDEwKSA8PCAiLjAwXCJcbiI7Ci0gIGNvbnN0IGNoYXIqIHByb2pMYWJlbCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlBST0pFQ1RfTEFCRUwiKTsKLSAgaWYgKCFwcm9qTGFiZWwpIHsKLSAgICBwcm9qTGFiZWwgPSBsaWJOYW1lLmNfc3RyKCk7Ci0gIH0KLSAgY29uc3QgY2hhcioga2V5d29yZCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0tFWVdPUkQiKTsKLSAgaWYgKCFrZXl3b3JkKSB7Ci0gICAga2V5d29yZCA9ICJXaW4zMlByb2oiOwotICB9CisgIGNtUHJvcCBwID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiUFJPSkVDVF9MQUJFTCIpOworICBjb25zdCBzdGQ6OnN0cmluZyBwcm9qTGFiZWwgPSBwID8gKnAgOiBsaWJOYW1lOworICBwID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfS0VZV09SRCIpOworICBjb25zdCBzdGQ6OnN0cmluZyBrZXl3b3JkID0gcCA/ICpwIDogIldpbjMyUHJvaiI7CiAgIGZvdXQgPDwgIlx0TmFtZT1cIiIgPDwgcHJvakxhYmVsIDw8ICJcIlxuIjsKLSAgZm91dCA8PCAiXHRQcm9qZWN0R1VJRD1cInsiIDw8IGdnLT5HZXRHVUlEKGxpYk5hbWUuY19zdHIoKSkgPDwgIn1cIlxuIjsKKyAgZm91dCA8PCAiXHRQcm9qZWN0R1VJRD1cInsiIDw8IGdnLT5HZXRHVUlEKGxpYk5hbWUpIDw8ICJ9XCJcbiI7CiAgIHRoaXMtPldyaXRlUHJvamVjdFNDQyhmb3V0LCB0YXJnZXQpOwotICBpZiAoY29uc3QgY2hhciogdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiA9CisgIGlmIChjbVByb3AgdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiA9CiAgICAgICAgIHRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04iKSkgewotICAgIGZvdXQgPDwgIlx0VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj1cIiIgPDwgdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiA8PCAiXCJcbiI7CisgICAgZm91dCA8PCAiXHRUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPVwiIiA8PCAqdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiA8PCAiXCJcbiI7CiAgIH0KICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwogICBmb3V0IDw8ICJcdEtleXdvcmQ9XCIiIDw8IGtleXdvcmQgPDwgIlwiPlxuIgpAQCAtMjAxNCw3ICsyMDI5LDcgQEAKICAgZm91dCA8PCAiXHQ8R2xvYmFscz5cbiI7CiAKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYga2V5IDogdGFyZ2V0LT5HZXRQcm9wZXJ0eUtleXMoKSkgewotICAgIGlmIChrZXkuZmluZCgiVlNfR0xPQkFMXyIpID09IDApIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGtleSwgIlZTX0dMT0JBTF8iKSkgewogICAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGtleS5zdWJzdHIoMTApOwogICAgICAgaWYgKCFuYW1lLmVtcHR5KCkpIHsKICAgICAgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwpAQCAtMjAzNyw3ICsyMDUyLDcgQEAKIH0KIAogc3RkOjpzdHJpbmcgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3I6OkNvbnZlcnRUb1hNTE91dHB1dFBhdGgoCi0gIGNvbnN0IGNoYXIqIHBhdGgpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKQogewogICBzdGQ6OnN0cmluZyByZXQgPQogICAgIHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChwYXRoLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwpAQCAtMjA0OSw3ICsyMDY0LDcgQEAKIH0KIAogc3RkOjpzdHJpbmcgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3I6OkNvbnZlcnRUb1hNTE91dHB1dFBhdGhTaW5nbGUoCi0gIGNvbnN0IGNoYXIqIHBhdGgpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKQogewogICBzdGQ6OnN0cmluZyByZXQgPQogICAgIHRoaXMtPkNvbnZlcnRUb091dHB1dEZvcm1hdChwYXRoLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwpAQCAtMjA2MSw3ICsyMDc2LDcgQEAKIH0KIAogdm9pZCBjbVZTN0dlbmVyYXRvck9wdGlvbnM6Ok91dHB1dEZsYWcoc3RkOjpvc3RyZWFtJiBmb3V0LCBpbnQgaW5kZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQpCiB7CiAgIGZvdXQuZmlsbCgnXHQnKTsKQEAgLTIxMzAsOCArMjE0NSw3IEBACiAgIHN0ZDo6c3RyaW5nIGd1aWRTdG9yZU5hbWUgPSBjbVN0ckNhdChuYW1lLCAiX0dVSURfQ01BS0UiKTsKICAgLy8gc2F2ZSB0aGUgR1VJRCBpbiB0aGUgY2FjaGUKICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDTWFrZUluc3RhbmNlKCktPkFkZENhY2hlRW50cnkoCi0gICAgZ3VpZFN0b3JlTmFtZS5jX3N0cigpLCBwYXJzZXIuR1VJRC5jX3N0cigpLCAiU3RvcmVkIEdVSUQiLAotICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOworICAgIGd1aWRTdG9yZU5hbWUsIHBhcnNlci5HVUlELmNfc3RyKCksICJTdG9yZWQgR1VJRCIsIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOwogfQogCiBzdGQ6OnN0cmluZyBjbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcjo6R2V0VGFyZ2V0RGlyZWN0b3J5KApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuaAppbmRleCA2NzE3ODNmLi44YjliOGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3IuaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCiAjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCkBAIC0zMCw3ICszMSw3IEBACiAgICAgOiBjbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnMobGcsIHRvb2wsIHRhYmxlLCBleHRyYVRhYmxlKQogICB7CiAgIH0KLSAgdm9pZCBPdXRwdXRGbGFnKHN0ZDo6b3N0cmVhbSYgZm91dCwgaW50IGluZGVudCwgY29uc3QgY2hhciogdGFnLAorICB2b2lkIE91dHB1dEZsYWcoc3RkOjpvc3RyZWFtJiBmb3V0LCBpbnQgaW5kZW50LCBjb25zdCBzdGQ6OnN0cmluZyYgdGFnLAogICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQpIG92ZXJyaWRlOwogfTsKIApAQCAtNDgsNiArNDksMTAgQEAKIAogICB2aXJ0dWFsIH5jbUxvY2FsVmlzdWFsU3R1ZGlvN0dlbmVyYXRvcigpOwogCisgIGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yKGNvbnN0IGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yJikgPSBkZWxldGU7CisgIGNvbnN0IGNtTG9jYWxWaXN1YWxTdHVkaW83R2VuZXJhdG9yJiBvcGVyYXRvcj0oCisgICAgY29uc3QgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3ImKSA9IGRlbGV0ZTsKKwogICB2b2lkIEFkZEhlbHBlckNvbW1hbmRzKCkgb3ZlcnJpZGU7CiAKICAgLyoqCkBAIC0xMDEsOCArMTA2LDggQEAKICAgdm9pZCBXcml0ZUNvbmZpZ3VyYXRpb24oc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpYk5hbWUsIGNtR2VuZXJhdG9yVGFyZ2V0KiB0Z3QpOwogICBzdGQ6OnN0cmluZyBFc2NhcGVGb3JYTUwoY29uc3Qgc3RkOjpzdHJpbmcmIHMpOwotICBzdGQ6OnN0cmluZyBDb252ZXJ0VG9YTUxPdXRwdXRQYXRoKGNvbnN0IGNoYXIqIHBhdGgpOwotICBzdGQ6OnN0cmluZyBDb252ZXJ0VG9YTUxPdXRwdXRQYXRoU2luZ2xlKGNvbnN0IGNoYXIqIHBhdGgpOworICBzdGQ6OnN0cmluZyBDb252ZXJ0VG9YTUxPdXRwdXRQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKTsKKyAgc3RkOjpzdHJpbmcgQ29udmVydFRvWE1MT3V0cHV0UGF0aFNpbmdsZShjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCk7CiAgIHZvaWQgT3V0cHV0VGFyZ2V0UnVsZXMoc3RkOjpvc3RyZWFtJiBmb3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWJOYW1lKTsKQEAgLTE0NCw3ICsxNDksNyBAQAogCiAgIGJvb2wgRm9ydHJhblByb2plY3Q7CiAgIGJvb2wgV2luZG93c0NFUHJvamVjdDsKLSAgY21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3JJbnRlcm5hbHMqIEludGVybmFsOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbFZpc3VhbFN0dWRpbzdHZW5lcmF0b3JJbnRlcm5hbHM+IEludGVybmFsOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21Mb2NhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5jeHgKaW5kZXggMzM2ZTNhNS4uZWJkNGY5NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbUxvY2FsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yLmN4eApAQCAtMTAyLDEwICsxMDIsMTIgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX291dHB1dDsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2J5cHJvZHVjdHM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBub19kZXBlbmRzOworICBib29sIHN0ZFBpcGVzVVRGOCA9IHRydWU7CiAgIGNtQ3VzdG9tQ29tbWFuZExpbmVzIGNvbW1hbmRzID0gY21NYWtlU2luZ2xlQ29tbWFuZExpbmUoCiAgICAgeyBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgIi1FIiwgIm1ha2VfZGlyZWN0b3J5IiwgaW1wRGlyIH0pOwotICBwY2MucmVzZXQobmV3IGNtQ3VzdG9tQ29tbWFuZCgwLCBub19vdXRwdXQsIG5vX2J5cHJvZHVjdHMsIG5vX2RlcGVuZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLCAwLCAwKSk7CisgIHBjYy5yZXNldChuZXcgY21DdXN0b21Db21tYW5kKG5vX291dHB1dCwgbm9fYnlwcm9kdWN0cywgbm9fZGVwZW5kcywgY29tbWFuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UoKSwgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkUGlwZXNVVEY4KSk7CiAgIHBjYy0+U2V0RXNjYXBlT2xkU3R5bGUoZmFsc2UpOwogICBwY2MtPlNldEVzY2FwZUFsbG93TWFrZVZhcnModHJ1ZSk7CiAgIHJldHVybiBwY2M7CkBAIC0xNTQsOCArMTU2LDcgQEAKICAgICBzY3JpcHQgKz0gbmV3bGluZTsKICAgICBuZXdsaW5lID0gbmV3bGluZV90ZXh0OwogICAgIHNjcmlwdCArPSAiY2QgIjsKLSAgICBzY3JpcHQgKz0gdGhpcy0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh3b3JraW5nRGlyZWN0b3J5KSwgU0hFTEwpOworICAgIHNjcmlwdCArPSB0aGlzLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQod29ya2luZ0RpcmVjdG9yeSwgU0hFTEwpOwogICAgIHNjcmlwdCArPSBjaGVja19lcnJvcjsKIAogICAgIC8vIENoYW5nZSB0aGUgd29ya2luZyBkcml2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbUxvY2FsWENvZGVHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtTG9jYWxYQ29kZUdlbmVyYXRvci5jeHgKaW5kZXggNWEwNmQ0YS4uYWMwZDM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTG9jYWxYQ29kZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTG9jYWxYQ29kZUdlbmVyYXRvci5jeHgKQEAgLTQwLDcgKzQwLDcgQEAKIHsKICAgY21Mb2NhbEdlbmVyYXRvcjo6R2VuZXJhdGUoKTsKIAotICBmb3IgKGF1dG8gdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0cygpKSB7CiAgICAgdGFyZ2V0LT5IYXNNYWNPU1hScGF0aEluc3RhbGxOYW1lRGlyKCIiKTsKICAgfQogfQpAQCAtNDksNyArNDksNyBAQAogewogICBjbUxvY2FsR2VuZXJhdG9yOjpHZW5lcmF0ZUluc3RhbGxSdWxlcygpOwogCi0gIGZvciAoYXV0byB0YXJnZXQgOiB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXRzKCkpIHsKICAgICB0YXJnZXQtPkhhc01hY09TWFJwYXRoSW5zdGFsbE5hbWVEaXIoIiIpOwogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWNoTy5jeHggYi9Tb3VyY2UvY21NYWNoTy5jeHgKaW5kZXggNmNiZWQzNi4uNTMxMTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFjaE8uY3h4CisrKyBiL1NvdXJjZS9jbU1hY2hPLmN4eApAQCAtNzksMTQgKzc5LDE0IEBACiAgIC8vIEEgbG9hZF9jb21tYW5kIGFuZCBpdHMgYXNzb2NpYXRlZCBkYXRhCiAgIHN0cnVjdCBSYXdMb2FkQ29tbWFuZAogICB7Ci0gICAgdWludDMyX3QgdHlwZShjb25zdCBjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzKiBtKSBjb25zdAorICAgIHVpbnQzMl90IHR5cGUoY29uc3QgY21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kcyYgbSkgY29uc3QKICAgICB7CiAgICAgICBpZiAodGhpcy0+TG9hZENvbW1hbmQuc2l6ZSgpIDwgc2l6ZW9mKGxvYWRfY29tbWFuZCkpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICB9CiAgICAgICBjb25zdCBsb2FkX2NvbW1hbmQqIGNtZCA9CiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgbG9hZF9jb21tYW5kKj4oJnRoaXMtPkxvYWRDb21tYW5kWzBdKTsKLSAgICAgIHJldHVybiBtLT5zd2FwKGNtZC0+Y21kKTsKKyAgICAgIHJldHVybiBtLnN3YXAoY21kLT5jbWQpOwogICAgIH0KICAgICBzdGQ6OnZlY3RvcjxjaGFyPiBMb2FkQ29tbWFuZDsKICAgfTsKQEAgLTE4Niw4ICsxODYsMTEgQEAKIHsKIHB1YmxpYzoKICAgY21NYWNoT0ludGVybmFsKGNvbnN0IGNoYXIqIGZuYW1lKTsKKyAgY21NYWNoT0ludGVybmFsKGNvbnN0IGNtTWFjaE9JbnRlcm5hbCYpID0gZGVsZXRlOwogICB+Y21NYWNoT0ludGVybmFsKCk7CiAKKyAgY21NYWNoT0ludGVybmFsJiBvcGVyYXRvcj0oY29uc3QgY21NYWNoT0ludGVybmFsJikgPSBkZWxldGU7CisKICAgLy8gcmVhZCBhIE1hY2gtTyBmaWxlCiAgIGJvb2wgcmVhZF9tYWNoX28odWludDMyX3QgZmlsZV9vZmZzZXQpOwogCkBAIC0yMDIsNyArMjA1LDcgQEAKICAgc3RkOjpzdHJpbmcgRXJyb3JNZXNzYWdlOwogCiAgIC8vIHRoZSBsaXN0IG9mIE1hY2gtTydzCi0gIHN0ZDo6dmVjdG9yPGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHMqPiBNYWNoT0xpc3Q7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzPj4gTWFjaE9MaXN0OwogfTsKIAogY21NYWNoT0ludGVybmFsOjpjbU1hY2hPSW50ZXJuYWwoY29uc3QgY2hhciogZm5hbWUpCkBAIC0yNjAsMTIgKzI2Myw3IEBACiAgIH0KIH0KIAotY21NYWNoT0ludGVybmFsOjp+Y21NYWNoT0ludGVybmFsKCkKLXsKLSAgZm9yIChhdXRvJiBpIDogdGhpcy0+TWFjaE9MaXN0KSB7Ci0gICAgZGVsZXRlIGk7Ci0gIH0KLX0KK2NtTWFjaE9JbnRlcm5hbDo6fmNtTWFjaE9JbnRlcm5hbCgpID0gZGVmYXVsdDsKIAogYm9vbCBjbU1hY2hPSW50ZXJuYWw6OnJlYWRfbWFjaF9vKHVpbnQzMl90IGZpbGVfb2Zmc2V0KQogewpAQCAtMjgwLDI1ICsyNzgsMjUgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICBjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzKiBmID0gbnVsbHB0cjsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHM+IGY7CiAgIGlmIChtYWdpYyA9PSBNSF9DSUdBTSB8fCBtYWdpYyA9PSBNSF9NQUdJQykgewogICAgIGJvb2wgc3dhcCA9IGZhbHNlOwogICAgIGlmIChtYWdpYyA9PSBNSF9DSUdBTSkgewogICAgICAgc3dhcCA9IHRydWU7CiAgICAgfQotICAgIGYgPSBuZXcgY21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kc0ltcGw8bWFjaF9oZWFkZXI+KHN3YXApOworICAgIGYgPSBjbTo6bWFrZV91bmlxdWU8Y21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kc0ltcGw8bWFjaF9oZWFkZXI+Pihzd2FwKTsKICAgfSBlbHNlIGlmIChtYWdpYyA9PSBNSF9DSUdBTV82NCB8fCBtYWdpYyA9PSBNSF9NQUdJQ182NCkgewogICAgIGJvb2wgc3dhcCA9IGZhbHNlOwogICAgIGlmIChtYWdpYyA9PSBNSF9DSUdBTV82NCkgewogICAgICAgc3dhcCA9IHRydWU7CiAgICAgfQotICAgIGYgPSBuZXcgY21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kc0ltcGw8bWFjaF9oZWFkZXJfNjQ+KHN3YXApOworICAgIGYgPQorICAgICAgY206Om1ha2VfdW5pcXVlPGNtTWFjaE9IZWFkZXJBbmRMb2FkQ29tbWFuZHNJbXBsPG1hY2hfaGVhZGVyXzY0Pj4oc3dhcCk7CiAgIH0KIAogICBpZiAoZiAmJiBmLT5yZWFkX21hY2hfbyh0aGlzLT5GaW4pKSB7Ci0gICAgdGhpcy0+TWFjaE9MaXN0LnB1c2hfYmFjayhmKTsKKyAgICB0aGlzLT5NYWNoT0xpc3QucHVzaF9iYWNrKHN0ZDo6bW92ZShmKSk7CiAgIH0gZWxzZSB7Ci0gICAgZGVsZXRlIGY7CiAgICAgdGhpcy0+RXJyb3JNZXNzYWdlID0gIkZhaWxlZCB0byByZWFkIE1hY2gtTyBoZWFkZXIuIjsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KQEAgLTMzMywxMSArMzMxLDEyIEBACiAgIH0KIAogICAvLyBncmFiIHRoZSBmaXJzdCBNYWNoLU8gYW5kIGdldCB0aGUgaW5zdGFsbCBuYW1lIGZyb20gdGhhdCBvbmUKLSAgY21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kcyogbWFjaG8gPSB0aGlzLT5JbnRlcm5hbC0+TWFjaE9MaXN0WzBdOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21NYWNoT0hlYWRlckFuZExvYWRDb21tYW5kcz4mIG1hY2hvID0KKyAgICB0aGlzLT5JbnRlcm5hbC0+TWFjaE9MaXN0WzBdOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hY2hvLT5sb2FkX2NvbW1hbmRzKCkuc2l6ZSgpOyBpKyspIHsKICAgICBjb25zdCBjbU1hY2hPSGVhZGVyQW5kTG9hZENvbW1hbmRzOjpSYXdMb2FkQ29tbWFuZCYgY21kID0KICAgICAgIG1hY2hvLT5sb2FkX2NvbW1hbmRzKClbaV07Ci0gICAgdWludDMyX3QgbGNfY21kID0gY21kLnR5cGUobWFjaG8pOworICAgIHVpbnQzMl90IGxjX2NtZCA9IGNtZC50eXBlKCptYWNobyk7CiAgICAgaWYgKGxjX2NtZCA9PSBMQ19JRF9EWUxJQiB8fCBsY19jbWQgPT0gTENfTE9BRF9XRUFLX0RZTElCIHx8CiAgICAgICAgIGxjX2NtZCA9PSBMQ19MT0FEX0RZTElCKSB7CiAgICAgICBpZiAoc2l6ZW9mKGR5bGliX2NvbW1hbmQpIDwgY21kLkxvYWRDb21tYW5kLnNpemUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFjcm9Db21tYW5kLmN4eCBiL1NvdXJjZS9jbU1hY3JvQ29tbWFuZC5jeHgKaW5kZXggYmE5OTQ3YS4uYzg4YjM0MyAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFjcm9Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21NYWNyb0NvbW1hbmQuY3h4CkBAIC03LDEwICs3LDkgQEAKIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgotCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUZ1bmN0aW9uQmxvY2tlci5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgpAQCAtMTY3LDcgKzE2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQogewogICBjbU1ha2VmaWxlJiBtZiA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpOwotICBtZi5BcHBlbmRQcm9wZXJ0eSgiTUFDUk9TIiwgdGhpcy0+QXJnc1swXS5jX3N0cigpKTsKKyAgbWYuQXBwZW5kUHJvcGVydHkoIk1BQ1JPUyIsIHRoaXMtPkFyZ3NbMF0pOwogICAvLyBjcmVhdGUgYSBuZXcgY29tbWFuZCBhbmQgYWRkIGl0IHRvIGNtYWtlCiAgIGNtTWFjcm9IZWxwZXJDb21tYW5kIGY7CiAgIGYuQXJncyA9IHRoaXMtPkFyZ3M7CkBAIC0xOTAsNyArMTg5LDcgQEAKICAgLy8gY3JlYXRlIGEgZnVuY3Rpb24gYmxvY2tlcgogICB7CiAgICAgYXV0byBmYiA9IGNtOjptYWtlX3VuaXF1ZTxjbU1hY3JvRnVuY3Rpb25CbG9ja2VyPigpOwotICAgIGNtQXBwZW5kKGZiLT5BcmdzLCBhcmdzKTsKKyAgICBjbTo6YXBwZW5kKGZiLT5BcmdzLCBhcmdzKTsKICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRGdW5jdGlvbkJsb2NrZXIoc3RkOjptb3ZlKGZiKSk7CiAgIH0KICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZS5jeHggYi9Tb3VyY2UvY21NYWtlZmlsZS5jeHgKaW5kZXggZjE0M2VmNy4uNWUxZjA3MCAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFrZWZpbGUuY3h4CisrKyBiL1NvdXJjZS9jbU1ha2VmaWxlLmN4eApAQCAtMTUsMTggKzE1LDI2IEBACiAKICNpbmNsdWRlIDxjbS9pdGVyYXRvcj4KICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y20vb3B0aW9uYWw+CisjaW5jbHVkZSA8Y20vdmVjdG9yPgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KKworI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KIAogI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKIAogI2luY2x1ZGUgImNtX3N5c19zdGF0LmgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNvbW1hbmRBcmd1bWVudFBhcnNlckhlbHBlci5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUV4cGFuZGVkQ29tbWFuZEFyZ3VtZW50LmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCisjaW5jbHVkZSAiY21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJjbUZTUGVybWlzc2lvbnMuaCIKICNpbmNsdWRlICJjbUZpbGVMb2NrUG9vbC5oIgogI2luY2x1ZGUgImNtRnVuY3Rpb25CbG9ja2VyLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCkBAIC0zNiw2ICs0NCw3IEBACiAjaW5jbHVkZSAiY21JbnN0YWxsR2VuZXJhdG9yLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSAiY21JbnN0YWxsU3ViZGlyZWN0b3J5R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCisjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCkBAIC01NCwxMSArNjMsMTQgQEAKICNpbmNsdWRlICJjbWFrZS5oIgogCiAjaWZuZGVmIENNQUtFX0JPT1RTVFJBUAorIyAgaW5jbHVkZSAiY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEuaCIKICMgIGluY2x1ZGUgImNtVmFyaWFibGVXYXRjaC5oIgogI2VuZGlmCiAKIGNsYXNzIGNtTWVzc2VuZ2VyOwogCit1c2luZyBuYW1lc3BhY2UgY21GU1Blcm1pc3Npb25zOworCiBjbURpcmVjdG9yeUlkOjpjbURpcmVjdG9yeUlkKHN0ZDo6c3RyaW5nIHMpCiAgIDogU3RyaW5nKHN0ZDo6bW92ZShzKSkKIHsKQEAgLTczLDcgKzg1LDYgQEAKIHsKICAgdGhpcy0+SXNTb3VyY2VGaWxlVHJ5Q29tcGlsZSA9IGZhbHNlOwogCi0gIHRoaXMtPldhcm5VbnVzZWQgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFdhcm5VbnVzZWQoKTsKICAgdGhpcy0+Q2hlY2tTeXN0ZW1WYXJzID0gdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRDaGVja1N5c3RlbVZhcnMoKTsKIAogICB0aGlzLT5TdXBwcmVzc1NpZGVFZmZlY3RzID0gZmFsc2U7CkBAIC0xMTcsMTUgKzEyOCw3IEBACiAjZW5kaWYKIH0KIAotY21NYWtlZmlsZTo6fmNtTWFrZWZpbGUoKQotewotICBjbURlbGV0ZUFsbCh0aGlzLT5JbnN0YWxsR2VuZXJhdG9ycyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPlRlc3RHZW5lcmF0b3JzKTsKLSAgY21EZWxldGVBbGwodGhpcy0+U291cmNlRmlsZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5UZXN0cyk7Ci0gIGNtRGVsZXRlQWxsKHRoaXMtPkltcG9ydGVkVGFyZ2V0c093bmVkKTsKLSAgY21EZWxldGVBbGwodGhpcy0+RXZhbHVhdGlvbkZpbGVzKTsKLX0KK2NtTWFrZWZpbGU6On5jbU1ha2VmaWxlKCkgPSBkZWZhdWx0OwogCiBjbURpcmVjdG9yeUlkIGNtTWFrZWZpbGU6OkdldERpcmVjdG9yeUlkKCkgY29uc3QKIHsKQEAgLTEzMyw3ICsxMzYsNyBAQAogICAvLyBJZiB3ZSBldmVyIG5lZWQgdG8gZXhwb3NlIHRoaXMgdG8gQ01ha2UgbGFuZ3VhZ2UgY29kZSB3ZSBzaG91bGQKICAgLy8gYWRkIGEgcmVhZC1vbmx5IHByb3BlcnR5IGluIGNtTWFrZWZpbGU6OkdldFByb3BlcnR5LgogICBjaGFyIGJ1ZlszMl07Ci0gIHNwcmludGYoYnVmLCAiPCVwPiIsCisgIHNwcmludGYoYnVmLCAiKCVwKSIsCiAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCBjb25zdCo+KHRoaXMpKTsgLy8gY2FzdCBhdm9pZHMgZm9ybWF0IHdhcm5pbmcKICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1Zik7CiB9CkBAIC0xNDYsNyArMTQ5LDcgQEAKICAgICAgIHRoaXMtPkV4ZWN1dGlvblN0YXR1c1N0YWNrLmJhY2soKS0+U2V0TmVzdGVkRXJyb3IoKTsKICAgICB9CiAgIH0KLSAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UodCwgdGV4dCwgdGhpcy0+R2V0QmFja3RyYWNlKCkpOworICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZSh0LCB0ZXh0LCB0aGlzLT5CYWNrdHJhY2UpOwogfQogCiBib29sIGNtTWFrZWZpbGU6OkNoZWNrQ01QMDAzNyhzdGQ6OnN0cmluZyBjb25zdCYgdGFyZ2V0TmFtZSwKQEAgLTE5Myw3ICsxOTYsNyBAQAogICBzdGQ6OnN0cmluZyBlbnY7CiAgIGNtU3lzdGVtVG9vbHM6OkdldEVudih2YXJOYW1lLCBlbnYpOwogCi0gIGJvb2wgY29uc3QgaGF2ZVZhciA9IHZhciAmJiAqdmFyOworICBib29sIGNvbnN0IGhhdmVWYXIgPSBjbU5vbmVtcHR5KHZhcik7CiAgIGJvb2wgY29uc3QgaGF2ZUVudiA9ICFlbnYuZW1wdHkoKTsKICAgaWYgKChoYXZlVmFyIHx8IGhhdmVFbnYpICYmIHRoaXMtPldhcm5lZENNUDAwNzQuaW5zZXJ0KHZhck5hbWUpLnNlY29uZCkgewogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSB3OwpAQCAtMzEzLDIxICszMTYsNTQgQEAKICAgfQogCiAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gIG1zZyA8PCBmdWxsX3BhdGggPDwgIigiIDw8IGxmZi5MaW5lIDw8ICIpOiAgIjsKLSAgbXNnIDw8IGxmZi5OYW1lLk9yaWdpbmFsIDw8ICIoIjsKLSAgYm9vbCBleHBhbmQgPSB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFRyYWNlRXhwYW5kKCk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzOwogICBzdGQ6OnN0cmluZyB0ZW1wOworICBib29sIGV4cGFuZCA9IHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0VHJhY2VFeHBhbmQoKTsKKworICBhcmdzLnJlc2VydmUobGZmLkFyZ3VtZW50cy5zaXplKCkpOwogICBmb3IgKGNtTGlzdEZpbGVBcmd1bWVudCBjb25zdCYgYXJnIDogbGZmLkFyZ3VtZW50cykgewogICAgIGlmIChleHBhbmQpIHsKICAgICAgIHRlbXAgPSBhcmcuVmFsdWU7CiAgICAgICB0aGlzLT5FeHBhbmRWYXJpYWJsZXNJblN0cmluZyh0ZW1wKTsKLSAgICAgIG1zZyA8PCB0ZW1wOworICAgICAgYXJncy5wdXNoX2JhY2sodGVtcCk7CiAgICAgfSBlbHNlIHsKLSAgICAgIG1zZyA8PCBhcmcuVmFsdWU7CisgICAgICBhcmdzLnB1c2hfYmFjayhhcmcuVmFsdWUpOwogICAgIH0KLSAgICBtc2cgPDwgIiAiOwogICB9Ci0gIG1zZyA8PCAiKSI7CisKKyAgc3dpdGNoICh0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldFRyYWNlRm9ybWF0KCkpIHsKKyAgICBjYXNlIGNtYWtlOjpUcmFjZUZvcm1hdDo6VFJBQ0VfSlNPTl9WMTogeworI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKKyAgICAgIEpzb246OlZhbHVlIHZhbDsKKyAgICAgIEpzb246OlN0cmVhbVdyaXRlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICAgIGJ1aWxkZXJbImluZGVudGF0aW9uIl0gPSAiIjsKKyAgICAgIHZhbFsiZmlsZSJdID0gZnVsbF9wYXRoOworICAgICAgdmFsWyJsaW5lIl0gPSBzdGF0aWNfY2FzdDxKc29uOjpWYWx1ZTo6SW50NjQ+KGxmZi5MaW5lKTsKKyAgICAgIHZhbFsiY21kIl0gPSBsZmYuTmFtZS5PcmlnaW5hbDsKKyAgICAgIHZhbFsiYXJncyJdID0gSnNvbjo6VmFsdWUoSnNvbjo6YXJyYXlWYWx1ZSk7CisgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgOiBhcmdzKSB7CisgICAgICAgIHZhbFsiYXJncyJdLmFwcGVuZChhcmcpOworICAgICAgfQorICAgICAgdmFsWyJ0aW1lIl0gPSBjbVN5c3RlbVRvb2xzOjpHZXRUaW1lKCk7CisgICAgICB2YWxbImZyYW1lIl0gPQorICAgICAgICBzdGF0aWNfY2FzdDxKc29uOjpWYWx1ZTo6VUludDY0Pih0aGlzLT5FeGVjdXRpb25TdGF0dXNTdGFjay5zaXplKCkpOworICAgICAgbXNnIDw8IEpzb246OndyaXRlU3RyaW5nKGJ1aWxkZXIsIHZhbCk7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIGNtYWtlOjpUcmFjZUZvcm1hdDo6VFJBQ0VfSFVNQU46CisgICAgICBtc2cgPDwgZnVsbF9wYXRoIDw8ICIoIiA8PCBsZmYuTGluZSA8PCAiKTogICI7CisgICAgICBtc2cgPDwgbGZmLk5hbWUuT3JpZ2luYWwgPDwgIigiOworCisgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgOiBhcmdzKSB7CisgICAgICAgIG1zZyA8PCBhcmcgPDwgIiAiOworICAgICAgfQorICAgICAgbXNnIDw8ICIpIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgY21ha2U6OlRyYWNlRm9ybWF0OjpUUkFDRV9VTkRFRklORUQ6CisgICAgICBtc2cgPDwgIklOVEVSTkFMIEVSUk9SOiBUcmFjZSBmb3JtYXQgaXMgVFJBQ0VfVU5ERUZJTkVEIjsKKyAgICAgIGJyZWFrOworICB9CiAKICAgYXV0byYgZiA9IHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0VHJhY2VGaWxlKCk7CiAgIGlmIChmKSB7CkBAIC0zNDEsMTkgKzM3NywzMCBAQAogY2xhc3MgY21NYWtlZmlsZUNhbGwKIHsKIHB1YmxpYzoKLSAgY21NYWtlZmlsZUNhbGwoY21NYWtlZmlsZSogbWYsIGNtQ29tbWFuZENvbnRleHQgY29uc3QmIGNjLAorICBjbU1ha2VmaWxlQ2FsbChjbU1ha2VmaWxlKiBtZiwgY21MaXN0RmlsZUZ1bmN0aW9uIGNvbnN0JiBsZmYsCiAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiAgICAgOiBNYWtlZmlsZShtZikKICAgewogICAgIGNtTGlzdEZpbGVDb250ZXh0IGNvbnN0JiBsZmMgPSBjbUxpc3RGaWxlQ29udGV4dDo6RnJvbUNvbW1hbmRDb250ZXh0KAotICAgICAgY2MsIHRoaXMtPk1ha2VmaWxlLT5TdGF0ZVNuYXBzaG90LkdldEV4ZWN1dGlvbkxpc3RGaWxlKCkpOworICAgICAgbGZmLCB0aGlzLT5NYWtlZmlsZS0+U3RhdGVTbmFwc2hvdC5HZXRFeGVjdXRpb25MaXN0RmlsZSgpKTsKICAgICB0aGlzLT5NYWtlZmlsZS0+QmFja3RyYWNlID0gdGhpcy0+TWFrZWZpbGUtPkJhY2t0cmFjZS5QdXNoKGxmYyk7CiAgICAgKyt0aGlzLT5NYWtlZmlsZS0+UmVjdXJzaW9uRGVwdGg7CiAgICAgdGhpcy0+TWFrZWZpbGUtPkV4ZWN1dGlvblN0YXR1c1N0YWNrLnB1c2hfYmFjaygmc3RhdHVzKTsKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5HZXRDTWFrZUluc3RhbmNlKCktPklzUHJvZmlsaW5nRW5hYmxlZCgpKSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRQcm9maWxpbmdPdXRwdXQoKS5TdGFydEVudHJ5KGxmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGZjKTsKKyAgICB9CisjZW5kaWYKICAgfQogCiAgIH5jbU1ha2VmaWxlQ2FsbCgpCiAgIHsKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5HZXRDTWFrZUluc3RhbmNlKCktPklzUHJvZmlsaW5nRW5hYmxlZCgpKSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRQcm9maWxpbmdPdXRwdXQoKS5TdG9wRW50cnkoKTsKKyAgICB9CisjZW5kaWYKICAgICB0aGlzLT5NYWtlZmlsZS0+RXhlY3V0aW9uU3RhdHVzU3RhY2sucG9wX2JhY2soKTsKICAgICAtLXRoaXMtPk1ha2VmaWxlLT5SZWN1cnNpb25EZXB0aDsKICAgICB0aGlzLT5NYWtlZmlsZS0+QmFja3RyYWNlID0gdGhpcy0+TWFrZWZpbGUtPkJhY2t0cmFjZS5Qb3AoKTsKQEAgLTY1Myw2ICs3MDAsMjcgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgY21NYWtlZmlsZTo6UmVhZExpc3RGaWxlQXNTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2aXJ0dWFsRmlsZU5hbWUpCit7CisgIHN0ZDo6c3RyaW5nIGZpbGVuYW1ldG9yZWFkID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICB2aXJ0dWFsRmlsZU5hbWUsIHRoaXMtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSk7CisKKyAgTGlzdEZpbGVTY29wZSBzY29wZSh0aGlzLCBmaWxlbmFtZXRvcmVhZCk7CisKKyAgY21MaXN0RmlsZSBsaXN0RmlsZTsKKyAgaWYgKCFsaXN0RmlsZS5QYXJzZVN0cmluZyhjb250ZW50LmNfc3RyKCksIHZpcnR1YWxGaWxlTmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldE1lc3NlbmdlcigpLCB0aGlzLT5CYWNrdHJhY2UpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgdGhpcy0+UmVhZExpc3RGaWxlKGxpc3RGaWxlLCBmaWxlbmFtZXRvcmVhZCk7CisgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRGYXRhbEVycm9yT2NjdXJlZCgpKSB7CisgICAgc2NvcGUuUXVpZXQoKTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBjbU1ha2VmaWxlOjpSZWFkTGlzdEZpbGUoY21MaXN0RmlsZSBjb25zdCYgbGlzdEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZmlsZW5hbWV0b3JlYWQpCiB7CkBAIC02ODQsNyArNzUyLDYgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgfQotICB0aGlzLT5DaGVja0ZvclVudXNlZFZhcmlhYmxlcygpOwogCiAgIHRoaXMtPkFkZERlZmluaXRpb24oIkNNQUtFX1BBUkVOVF9MSVNUX0ZJTEUiLCBjdXJyZW50UGFyZW50RmlsZSk7CiAgIHRoaXMtPkFkZERlZmluaXRpb24oIkNNQUtFX0NVUlJFTlRfTElTVF9GSUxFIiwgY3VycmVudEZpbGUpOwpAQCAtNzM3LDE4ICs4MDQsMTkgQEAKICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjb25kaXRpb24sCiAgIGJvb2wgaW5wdXRJc0NvbnRlbnQpCiB7Ci0gIHRoaXMtPkV2YWx1YXRpb25GaWxlcy5wdXNoX2JhY2sobmV3IGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlKAotICAgIGlucHV0RmlsZSwgc3RkOjptb3ZlKG91dHB1dE5hbWUpLCBzdGQ6Om1vdmUoY29uZGl0aW9uKSwgaW5wdXRJc0NvbnRlbnQsCi0gICAgdGhpcy0+R2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwNzApKSk7CisgIHRoaXMtPkV2YWx1YXRpb25GaWxlcy5wdXNoX2JhY2soCisgICAgY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlPigKKyAgICAgIGlucHV0RmlsZSwgc3RkOjptb3ZlKG91dHB1dE5hbWUpLCBzdGQ6Om1vdmUoY29uZGl0aW9uKSwgaW5wdXRJc0NvbnRlbnQsCisgICAgICB0aGlzLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA3MCkpKTsKIH0KIAotc3RkOjp2ZWN0b3I8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGUqPgorY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlPj4mCiBjbU1ha2VmaWxlOjpHZXRFdmFsdWF0aW9uRmlsZXMoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+RXZhbHVhdGlvbkZpbGVzOwogfQogCi1zdGQ6OnZlY3RvcjxjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcio+CitzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3I+PiBjb25zdCYKIGNtTWFrZWZpbGU6OkdldEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+RXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yczsKQEAgLTc1NywxNiArODI1LDIxIEBACiB2b2lkIGNtTWFrZWZpbGU6OlJlbW92ZUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvckNNUDAwMjQoCiAgIGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBnZW4pCiB7Ci0gIGF1dG8gaXQgPSBzdGQ6OmZpbmQodGhpcy0+RXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9ycy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMuZW5kKCksIGdlbik7CisgIGF1dG8gaXQgPQorICAgIHN0ZDo6ZmluZF9pZih0aGlzLT5FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3JzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMuZW5kKCksCisgICAgICAgICAgICAgICAgIFtnZW5dKHN0ZDo6dW5pcXVlX3B0cjxjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcj4gY29uc3QmIHApIHsKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gcC5nZXQoKSA9PSBnZW47CisgICAgICAgICAgICAgICAgIH0pOwogICBpZiAoaXQgIT0gdGhpcy0+RXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9ycy5lbmQoKSkgewogICAgIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMuZXJhc2UoaXQpOwogICB9CiB9CiAKLXZvaWQgY21NYWtlZmlsZTo6QWRkRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBnZW4pCit2b2lkIGNtTWFrZWZpbGU6OkFkZEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcigKKyAgc3RkOjp1bmlxdWVfcHRyPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yPiBnZW4pCiB7Ci0gIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMucHVzaF9iYWNrKGdlbik7CisgIHRoaXMtPkV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShnZW4pKTsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTc4MCwzOCArODUzLDQyIEBACiB9OwogfQogCi12b2lkIGNtTWFrZWZpbGU6OkFkZEZpbmFsQWN0aW9uKEZpbmFsQWN0aW9uIGFjdGlvbikKK3ZvaWQgY21NYWtlZmlsZTo6QWRkR2VuZXJhdG9yQWN0aW9uKEdlbmVyYXRvckFjdGlvbiBhY3Rpb24pCiB7Ci0gIHRoaXMtPkZpbmFsQWN0aW9ucy5wdXNoX2JhY2soc3RkOjptb3ZlKGFjdGlvbikpOworICBhc3NlcnQoIXRoaXMtPkdlbmVyYXRvckFjdGlvbnNJbnZva2VkKTsKKyAgdGhpcy0+R2VuZXJhdG9yQWN0aW9ucy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGFjdGlvbiksIHRoaXMtPkJhY2t0cmFjZSk7CiB9CiAKLXZvaWQgY21NYWtlZmlsZTo6RmluYWxQYXNzKCkKK3ZvaWQgY21NYWtlZmlsZTo6RG9HZW5lcmF0ZShjbUxvY2FsR2VuZXJhdG9yJiBsZykKIHsKICAgLy8gZG8gYWxsIHRoZSB2YXJpYWJsZSBleHBhbnNpb25zIGhlcmUKICAgdGhpcy0+RXhwYW5kVmFyaWFibGVzQ01QMDAxOSgpOwogCiAgIC8vIGdpdmUgYWxsIHRoZSBjb21tYW5kcyBhIGNoYW5jZSB0byBkbyBzb21ldGhpbmcKICAgLy8gYWZ0ZXIgdGhlIGZpbGUgaGFzIGJlZW4gcGFyc2VkIGJlZm9yZSBnZW5lcmF0aW9uCi0gIGZvciAoRmluYWxBY3Rpb24mIGFjdGlvbiA6IHRoaXMtPkZpbmFsQWN0aW9ucykgewotICAgIGFjdGlvbigqdGhpcyk7CisgIGZvciAoY29uc3QgQlQ8R2VuZXJhdG9yQWN0aW9uPiYgYWN0aW9uIDogdGhpcy0+R2VuZXJhdG9yQWN0aW9ucykgeworICAgIGFjdGlvbi5WYWx1ZShsZywgYWN0aW9uLkJhY2t0cmFjZSk7CiAgIH0KKyAgdGhpcy0+R2VuZXJhdG9yQWN0aW9uc0ludm9rZWQgPSB0cnVlOworICB0aGlzLT5EZWxheWVkT3V0cHV0RmlsZXMuY2xlYXIoKTsKKyAgdGhpcy0+RGVsYXllZE91dHB1dEZpbGVzSGF2ZUdlbmV4ID0gZmFsc2U7CiAKICAgLy8gZ28gdGhyb3VnaCBhbGwgY29uZmlndXJlZCBmaWxlcyBhbmQgc2VlIHdoaWNoIG9uZXMgc3RpbGwgZXhpc3QuCiAgIC8vIHdlIGRvbid0IHdhbnQgY21ha2UgdG8gcmUtcnVuIGlmIGEgY29uZmlndXJlZCBmaWxlIGlzIGNyZWF0ZWQgYW5kIGRlbGV0ZWQKICAgLy8gZHVyaW5nIHByb2Nlc3NpbmcgYXMgdGhhdCB3b3VsZCBtYWtlIGl0IGEgdHJhbnNpZW50IGZpbGUgdGhhdCBjYW4ndAogICAvLyBpbmZsdWVuY2UgdGhlIGJ1aWxkIHByb2Nlc3MKLSAgY21FcmFzZUlmKHRoaXMtPk91dHB1dEZpbGVzLCBmaWxlX25vdF9wZXJzaXN0ZW50KCkpOworICBjbTo6ZXJhc2VfaWYodGhpcy0+T3V0cHV0RmlsZXMsIGZpbGVfbm90X3BlcnNpc3RlbnQoKSk7CiAKICAgLy8gaWYgYSBjb25maWd1cmVkIGZpbGUgaXMgdXNlZCBhcyBpbnB1dCBmb3IgYW5vdGhlciBjb25maWd1cmVkIGZpbGUsCiAgIC8vIGFuZCB0aGVuIGRlbGV0ZWQgaXQgd2lsbCBzaG93IHVwIGluIHRoZSBpbnB1dCBsaXN0IGZpbGVzIHNvIHdlCiAgIC8vIG5lZWQgdG8gc2NhbiB0aG9zZSB0b28KLSAgY21FcmFzZUlmKHRoaXMtPkxpc3RGaWxlcywgZmlsZV9ub3RfcGVyc2lzdGVudCgpKTsKKyAgY206OmVyYXNlX2lmKHRoaXMtPkxpc3RGaWxlcywgZmlsZV9ub3RfcGVyc2lzdGVudCgpKTsKIH0KIAogLy8gR2VuZXJhdGUgdGhlIG91dHB1dCBmaWxlCi12b2lkIGNtTWFrZWZpbGU6OkNvbmZpZ3VyZUZpbmFsUGFzcygpCit2b2lkIGNtTWFrZWZpbGU6OkdlbmVyYXRlKGNtTG9jYWxHZW5lcmF0b3ImIGxnKQogewotICB0aGlzLT5GaW5hbFBhc3MoKTsKKyAgdGhpcy0+RG9HZW5lcmF0ZShsZyk7CiAgIGNvbnN0IGNoYXIqIG9sZFZhbHVlID0gdGhpcy0+R2V0RGVmaW5pdGlvbigiQ01BS0VfQkFDS1dBUkRTX0NPTVBBVElCSUxJVFkiKTsKICAgaWYgKG9sZFZhbHVlICYmCiAgICAgICBjbVN5c3RlbVRvb2xzOjpWZXJzaW9uQ29tcGFyZShjbVN5c3RlbVRvb2xzOjpPUF9MRVNTLCBvbGRWYWx1ZSwgIjIuNCIpKSB7CkBAIC04MjUsNiArOTAyLDM5IEBACiAgIH0KIH0KIAorbmFtZXNwYWNlIHsKKy8vIFRoZXJlIGFyZSBzdGlsbCB0b28gbWFueSBpbXBsaWNpdCBiYWNrdHJhY2VzIHRocm91Z2ggY21NYWtlZmlsZS4gIEFzIGEKKy8vIHdvcmthcm91bmQgd2UgcmVzZXQgdGhlIGJhY2t0cmFjZSB0ZW1wb3JhcmlseS4KK3N0cnVjdCBCYWNrdHJhY2VHdWFyZAoreworICBCYWNrdHJhY2VHdWFyZChjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0LCBjbUxpc3RGaWxlQmFja3RyYWNlIGN1cnJlbnQpCisgICAgOiBCYWNrdHJhY2UobGZidCkKKyAgICAsIFByZXZpb3VzKGxmYnQpCisgIHsKKyAgICB0aGlzLT5CYWNrdHJhY2UgPSBzdGQ6Om1vdmUoY3VycmVudCk7CisgIH0KKworICB+QmFja3RyYWNlR3VhcmQoKSB7IHRoaXMtPkJhY2t0cmFjZSA9IHN0ZDo6bW92ZShQcmV2aW91cyk7IH0KKworcHJpdmF0ZToKKyAgY21MaXN0RmlsZUJhY2t0cmFjZSYgQmFja3RyYWNlOworICBjbUxpc3RGaWxlQmFja3RyYWNlIFByZXZpb3VzOworfTsKKworY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBNYWtlT3B0aW9uYWxTdHJpbmcoY29uc3QgY2hhciogc3RyKQoreworICBpZiAoc3RyKSB7CisgICAgcmV0dXJuIHN0cjsKKyAgfQorICByZXR1cm4gY206Om51bGxvcHQ7Cit9CisKK2NvbnN0IGNoYXIqIEdldENTdHJPck51bGwoY29uc3QgY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiYgc3RyKQoreworICByZXR1cm4gc3RyID8gc3RyLT5jX3N0cigpIDogbnVsbHB0cjsKK30KK30KKwogYm9vbCBjbU1ha2VmaWxlOjpWYWxpZGF0ZUN1c3RvbUNvbW1hbmQoCiAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMpIGNvbnN0CiB7CkBAIC04NDIsNyArOTUyLDggQEAKIH0KIAogY21UYXJnZXQqIGNtTWFrZWZpbGU6OkdldEN1c3RvbUNvbW1hbmRUYXJnZXQoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzIG9iakxpYkNvbW1hbmRzKSBjb25zdAorICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0LCBjbU9iamVjdExpYnJhcnlDb21tYW5kcyBvYmpMaWJDb21tYW5kcywKKyAgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYgbGZidCkgY29uc3QKIHsKICAgLy8gRmluZCB0aGUgdGFyZ2V0IHRvIHdoaWNoIHRvIGFkZCB0aGUgY3VzdG9tIGNvbW1hbmQuCiAgIGF1dG8gdGkgPSB0aGlzLT5UYXJnZXRzLmZpbmQodGFyZ2V0KTsKQEAgLTg3Niw3ICs5ODcsNyBAQAogICAgICAgICBlIDw8ICJObyBUQVJHRVQgJyIgPDwgdGFyZ2V0CiAgICAgICAgICAgPDwgIicgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGlzIGRpcmVjdG9yeS4iOwogICAgICAgfQotICAgICAgdGhpcy0+SXNzdWVNZXNzYWdlKG1lc3NhZ2VUeXBlLCBlLnN0cigpKTsKKyAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKG1lc3NhZ2VUeXBlLCBlLnN0cigpLCBsZmJ0KTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg4OSw3ICsxMDAwLDggQEAKICAgICBlIDw8ICJUYXJnZXQgXCIiIDw8IHRhcmdldAogICAgICAgPDwgIlwiIGlzIGFuIE9CSkVDVCBsaWJyYXJ5ICIKICAgICAgICAgICJ0aGF0IG1heSBub3QgaGF2ZSBQUkVfQlVJTEQsIFBSRV9MSU5LLCBvciBQT1NUX0JVSUxEIGNvbW1hbmRzLiI7Ci0gICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CisgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxmYnQpOwogICAgIHJldHVybiBudWxscHRyOwogICB9CiAgIGlmICh0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewpAQCAtODk3LDcgKzEwMDksOCBAQAogICAgIGUgPDwgIlRhcmdldCBcIiIgPDwgdGFyZ2V0CiAgICAgICA8PCAiXCIgaXMgYW4gSU5URVJGQUNFIGxpYnJhcnkgIgogICAgICAgICAgInRoYXQgbWF5IG5vdCBoYXZlIFBSRV9CVUlMRCwgUFJFX0xJTkssIG9yIFBPU1RfQlVJTEQgY29tbWFuZHMuIjsKLSAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGZidCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiAgIH0KIApAQCAtOTEwLDkgKzEwMjMsMTAgQEAKICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY21DdXN0b21Db21tYW5kVHlwZSB0eXBlLAogICBjb25zdCBjaGFyKiBjb21tZW50LCBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIGVzY2FwZU9sZFN0eWxlLAogICBib29sIHVzZXNfdGVybWluYWwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsCi0gIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzIG9iakxpYkNvbW1hbmRzKQorICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBib29sIHN0ZFBpcGVzVVRGOCkKIHsKLSAgY21UYXJnZXQqIHQgPSB0aGlzLT5HZXRDdXN0b21Db21tYW5kVGFyZ2V0KHRhcmdldCwgb2JqTGliQ29tbWFuZHMpOworICBjbVRhcmdldCogdCA9IHRoaXMtPkdldEN1c3RvbUNvbW1hbmRUYXJnZXQoCisgICAgdGFyZ2V0LCBjbU9iamVjdExpYnJhcnlDb21tYW5kczo6UmVqZWN0LCB0aGlzLT5CYWNrdHJhY2UpOwogCiAgIC8vIFZhbGlkYXRlIGN1c3RvbSBjb21tYW5kcy4KICAgaWYgKCF0IHx8ICF0aGlzLT5WYWxpZGF0ZUN1c3RvbUNvbW1hbmQoY29tbWFuZExpbmVzKSkgewpAQCAtOTIwLDE3NSArMTAzNCw4NSBAQAogICB9CiAKICAgLy8gQWx3YXlzIGNyZWF0ZSB0aGUgYnlwcm9kdWN0IHNvdXJjZXMgYW5kIG1hcmsgdGhlbSBnZW5lcmF0ZWQuCi0gIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZFNvdXJjZXMoYnlwcm9kdWN0cyk7CisgIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZEJ5cHJvZHVjdHMoYnlwcm9kdWN0cyk7CiAKLSAgdGhpcy0+Q29tbWl0Q3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAotICAgIHQsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsIGNvbW1hbmRMaW5lcywgdHlwZSwgY29tbWVudCwgd29ya2luZ0RpciwKLSAgICBlc2NhcGVPbGRTdHlsZSwgdXNlc190ZXJtaW5hbCwgZGVwZmlsZSwgam9iX3Bvb2wsIGNvbW1hbmRfZXhwYW5kX2xpc3RzKTsKKyAgLy8gU3RyaW5ncyBjb3VsZCBiZSBtb3ZlZCBpbnRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIEMrKzE0LgorICBjbTo6b3B0aW9uYWw8c3RkOjpzdHJpbmc+IGNvbW1lbnRTdHIgPSBNYWtlT3B0aW9uYWxTdHJpbmcoY29tbWVudCk7CisgIGNtOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gd29ya2luZ1N0ciA9IE1ha2VPcHRpb25hbFN0cmluZyh3b3JraW5nRGlyKTsKKworICAvLyBEaXNwYXRjaCBjb21tYW5kIGNyZWF0aW9uIHRvIGFsbG93IGdlbmVyYXRvciBleHByZXNzaW9ucyBpbiBvdXRwdXRzLgorICB0aGlzLT5BZGRHZW5lcmF0b3JBY3Rpb24oCisgICAgWz1dKGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KSB7CisgICAgICBCYWNrdHJhY2VHdWFyZCBndWFyZCh0aGlzLT5CYWNrdHJhY2UsIGxmYnQpOworICAgICAgZGV0YWlsOjpBZGRDdXN0b21Db21tYW5kVG9UYXJnZXQoCisgICAgICAgIGxnLCBsZmJ0LCBjbUNvbW1hbmRPcmlnaW46OlByb2plY3QsIHQsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsCisgICAgICAgIGNvbW1hbmRMaW5lcywgdHlwZSwgR2V0Q1N0ck9yTnVsbChjb21tZW50U3RyKSwKKyAgICAgICAgR2V0Q1N0ck9yTnVsbCh3b3JraW5nU3RyKSwgZXNjYXBlT2xkU3R5bGUsIHVzZXNfdGVybWluYWwsIGRlcGZpbGUsCisgICAgICAgIGpvYl9wb29sLCBjb21tYW5kX2V4cGFuZF9saXN0cywgc3RkUGlwZXNVVEY4KTsKKyAgICB9KTsKIAogICByZXR1cm4gdDsKIH0KIAotdm9pZCBjbU1ha2VmaWxlOjpDb21taXRDdXN0b21Db21tYW5kVG9UYXJnZXQoCi0gIGNtVGFyZ2V0KiB0YXJnZXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAotICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjbUN1c3RvbUNvbW1hbmRUeXBlIHR5cGUsCi0gIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCi0gIGJvb2wgdXNlc190ZXJtaW5hbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwKLSAgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cykKLXsKLSAgLy8gQWRkIHRoZSBjb21tYW5kIHRvIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBzdGVwIGZvciB0aGUgdGFyZ2V0LgotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fb3V0cHV0OwotICBjbUN1c3RvbUNvbW1hbmQgY2ModGhpcywgbm9fb3V0cHV0LCBieXByb2R1Y3RzLCBkZXBlbmRzLCBjb21tYW5kTGluZXMsCi0gICAgICAgICAgICAgICAgICAgICBjb21tZW50LCB3b3JraW5nRGlyKTsKLSAgY2MuU2V0RXNjYXBlT2xkU3R5bGUoZXNjYXBlT2xkU3R5bGUpOwotICBjYy5TZXRFc2NhcGVBbGxvd01ha2VWYXJzKHRydWUpOwotICBjYy5TZXRVc2VzVGVybWluYWwodXNlc190ZXJtaW5hbCk7Ci0gIGNjLlNldENvbW1hbmRFeHBhbmRMaXN0cyhjb21tYW5kX2V4cGFuZF9saXN0cyk7Ci0gIGNjLlNldERlcGZpbGUoZGVwZmlsZSk7Ci0gIGNjLlNldEpvYlBvb2woam9iX3Bvb2wpOwotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIGNtQ3VzdG9tQ29tbWFuZFR5cGU6OlBSRV9CVUlMRDoKLSAgICAgIHRhcmdldC0+QWRkUHJlQnVpbGRDb21tYW5kKHN0ZDo6bW92ZShjYykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBjbUN1c3RvbUNvbW1hbmRUeXBlOjpQUkVfTElOSzoKLSAgICAgIHRhcmdldC0+QWRkUHJlTGlua0NvbW1hbmQoc3RkOjptb3ZlKGNjKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGNtQ3VzdG9tQ29tbWFuZFR5cGU6OlBPU1RfQlVJTEQ6Ci0gICAgICB0YXJnZXQtPkFkZFBvc3RCdWlsZENvbW1hbmQoc3RkOjptb3ZlKGNjKSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHRoaXMtPkFkZFRhcmdldEJ5cHJvZHVjdHModGFyZ2V0LCBieXByb2R1Y3RzKTsKLX0KLQotY21Tb3VyY2VGaWxlKiBjbU1ha2VmaWxlOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCit2b2lkIGNtTWFrZWZpbGU6OkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAogICBjb25zdCBzdGQ6OnN0cmluZyYgbWFpbl9kZXBlbmRlbmN5LCBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLAotICBjb25zdCBjaGFyKiBjb21tZW50LCBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UsCi0gIGJvb2wgZXNjYXBlT2xkU3R5bGUsIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCkKKyAgY29uc3QgY2hhciogY29tbWVudCwgY29uc3QgY2hhciogd29ya2luZ0RpciwKKyAgY29uc3QgQ29tbWFuZFNvdXJjZUNhbGxiYWNrJiBjYWxsYmFjaywgYm9vbCByZXBsYWNlLCBib29sIGVzY2FwZU9sZFN0eWxlLAorICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAorICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsIGJvb2wgc3RkUGlwZXNVVEY4KQogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3V0cHV0czsKLSAgb3V0cHV0cy5wdXNoX2JhY2sob3V0cHV0KTsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX2J5cHJvZHVjdHM7CiAgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOwotICByZXR1cm4gdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgIG91dHB1dHMsIG5vX2J5cHJvZHVjdHMsIGRlcGVuZHMsIG1haW5fZGVwZW5kZW5jeSwgbm9faW1wbGljaXRfZGVwZW5kcywKLSAgICBjb21tYW5kTGluZXMsIGNvbW1lbnQsIHdvcmtpbmdEaXIsIHJlcGxhY2UsIGVzY2FwZU9sZFN0eWxlLCB1c2VzX3Rlcm1pbmFsLAotICAgIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBkZXBmaWxlLCBqb2JfcG9vbCk7CisgIHRoaXMtPkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgICB7IG91dHB1dCB9LCBub19ieXByb2R1Y3RzLCBkZXBlbmRzLCBtYWluX2RlcGVuZGVuY3ksIG5vX2ltcGxpY2l0X2RlcGVuZHMsCisgICAgY29tbWFuZExpbmVzLCBjb21tZW50LCB3b3JraW5nRGlyLCBjYWxsYmFjaywgcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsCisgICAgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sLCBzdGRQaXBlc1VURjgpOwogfQogCi1jbVNvdXJjZUZpbGUqIGNtTWFrZWZpbGU6OkFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKK3ZvaWQgY21NYWtlZmlsZTo6QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMsCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLCBjb25zdCBzdGQ6OnN0cmluZyYgbWFpbl9kZXBlbmRlbmN5LAogICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCiAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGNvbnN0IGNoYXIqIGNvbW1lbnQsCi0gIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgcmVwbGFjZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKLSAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKQorICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBjb25zdCBDb21tYW5kU291cmNlQ2FsbGJhY2smIGNhbGxiYWNrLCBib29sIHJlcGxhY2UsCisgIGJvb2wgZXNjYXBlT2xkU3R5bGUsIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpCiB7CiAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3V0cHV0LgogICBpZiAob3V0cHV0cy5lbXB0eSgpKSB7CiAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkF0dGVtcHQgdG8gYWRkIGEgY3VzdG9tIHJ1bGUgd2l0aCBubyBvdXRwdXQhIik7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuOwogICB9CiAKICAgLy8gVmFsaWRhdGUgY3VzdG9tIGNvbW1hbmRzLgogICBpZiAoIXRoaXMtPlZhbGlkYXRlQ3VzdG9tQ29tbWFuZChjb21tYW5kTGluZXMpKSB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuOwogICB9CiAKICAgLy8gQWx3YXlzIGNyZWF0ZSB0aGUgb3V0cHV0IHNvdXJjZXMgYW5kIG1hcmsgdGhlbSBnZW5lcmF0ZWQuCi0gIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZFNvdXJjZXMob3V0cHV0cyk7Ci0gIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZFNvdXJjZXMoYnlwcm9kdWN0cyk7CisgIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZE91dHB1dHMob3V0cHV0cyk7CisgIHRoaXMtPkNyZWF0ZUdlbmVyYXRlZEJ5cHJvZHVjdHMoYnlwcm9kdWN0cyk7CiAKLSAgcmV0dXJuIHRoaXMtPkNvbW1pdEN1c3RvbUNvbW1hbmRUb091dHB1dCgKLSAgICBvdXRwdXRzLCBieXByb2R1Y3RzLCBkZXBlbmRzLCBtYWluX2RlcGVuZGVuY3ksIGltcGxpY2l0X2RlcGVuZHMsCi0gICAgY29tbWFuZExpbmVzLCBjb21tZW50LCB3b3JraW5nRGlyLCByZXBsYWNlLCBlc2NhcGVPbGRTdHlsZSwgdXNlc190ZXJtaW5hbCwKLSAgICBjb21tYW5kX2V4cGFuZF9saXN0cywgZGVwZmlsZSwgam9iX3Bvb2wpOwotfQorICAvLyBTdHJpbmdzIGNvdWxkIGJlIG1vdmVkIGludG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggQysrMTQuCisgIGNtOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gY29tbWVudFN0ciA9IE1ha2VPcHRpb25hbFN0cmluZyhjb21tZW50KTsKKyAgY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiB3b3JraW5nU3RyID0gTWFrZU9wdGlvbmFsU3RyaW5nKHdvcmtpbmdEaXIpOwogCi1jbVNvdXJjZUZpbGUqIGNtTWFrZWZpbGU6OkNvbW1pdEN1c3RvbUNvbW1hbmRUb091dHB1dCgKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAotICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKLSAgY29uc3QgY21JbXBsaWNpdERlcGVuZHNMaXN0JiBpbXBsaWNpdF9kZXBlbmRzLAotICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAotICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCi0gIGJvb2wgdXNlc190ZXJtaW5hbCwgYm9vbCBjb21tYW5kX2V4cGFuZF9saXN0cywgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUsCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCkKLXsKLSAgLy8gQ2hvb3NlIGEgc291cmNlIGZpbGUgb24gd2hpY2ggdG8gc3RvcmUgdGhlIGN1c3RvbSBjb21tYW5kLgotICBjbVNvdXJjZUZpbGUqIGZpbGUgPSBudWxscHRyOwotICBpZiAoIWNvbW1hbmRMaW5lcy5lbXB0eSgpICYmICFtYWluX2RlcGVuZGVuY3kuZW1wdHkoKSkgewotICAgIC8vIFRoZSBtYWluIGRlcGVuZGVuY3kgd2FzIHNwZWNpZmllZC4gIFVzZSBpdCB1bmxlc3MgYSBkaWZmZXJlbnQKLSAgICAvLyBjdXN0b20gY29tbWFuZCBhbHJlYWR5IHVzZWQgaXQuCi0gICAgZmlsZSA9IHRoaXMtPkdldFNvdXJjZShtYWluX2RlcGVuZGVuY3kpOwotICAgIGlmIChmaWxlICYmIGZpbGUtPkdldEN1c3RvbUNvbW1hbmQoKSAmJiAhcmVwbGFjZSkgewotICAgICAgLy8gVGhlIG1haW4gZGVwZW5kZW5jeSBhbHJlYWR5IGhhcyBhIGN1c3RvbSBjb21tYW5kLgotICAgICAgaWYgKGNvbW1hbmRMaW5lcyA9PSBmaWxlLT5HZXRDdXN0b21Db21tYW5kKCktPkdldENvbW1hbmRMaW5lcygpKSB7Ci0gICAgICAgIC8vIFRoZSBleGlzdGluZyBjdXN0b20gY29tbWFuZCBpcyBpZGVudGljYWwuICBTaWxlbnRseSBpZ25vcmUKLSAgICAgICAgLy8gdGhlIGR1cGxpY2F0ZS4KLSAgICAgICAgcmV0dXJuIGZpbGU7CisgIC8vIERpc3BhdGNoIGNvbW1hbmQgY3JlYXRpb24gdG8gYWxsb3cgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluIG91dHB1dHMuCisgIHRoaXMtPkFkZEdlbmVyYXRvckFjdGlvbigKKyAgICBbPV0oY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQpIHsKKyAgICAgIEJhY2t0cmFjZUd1YXJkIGd1YXJkKHRoaXMtPkJhY2t0cmFjZSwgbGZidCk7CisgICAgICBjbVNvdXJjZUZpbGUqIHNmID0gZGV0YWlsOjpBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgICAgIGxnLCBsZmJ0LCBjbUNvbW1hbmRPcmlnaW46OlByb2plY3QsIG91dHB1dHMsIGJ5cHJvZHVjdHMsIGRlcGVuZHMsCisgICAgICAgIG1haW5fZGVwZW5kZW5jeSwgaW1wbGljaXRfZGVwZW5kcywgY29tbWFuZExpbmVzLAorICAgICAgICBHZXRDU3RyT3JOdWxsKGNvbW1lbnRTdHIpLCBHZXRDU3RyT3JOdWxsKHdvcmtpbmdTdHIpLCByZXBsYWNlLAorICAgICAgICBlc2NhcGVPbGRTdHlsZSwgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsIGRlcGZpbGUsIGpvYl9wb29sLAorICAgICAgICBzdGRQaXBlc1VURjgpOworICAgICAgaWYgKGNhbGxiYWNrICYmIHNmKSB7CisgICAgICAgIGNhbGxiYWNrKHNmKTsKICAgICAgIH0KLSAgICAgIC8vIFRoZSBleGlzdGluZyBjdXN0b20gY29tbWFuZCBpcyBkaWZmZXJlbnQuICBXZSBuZWVkIHRvCi0gICAgICAvLyBnZW5lcmF0ZSBhIHJ1bGUgZmlsZSBmb3IgdGhpcyBuZXcgY29tbWFuZC4KLSAgICAgIGZpbGUgPSBudWxscHRyOwotICAgIH0gZWxzZSBpZiAoIWZpbGUpIHsKLSAgICAgIGZpbGUgPSB0aGlzLT5DcmVhdGVTb3VyY2UobWFpbl9kZXBlbmRlbmN5KTsKLSAgICB9Ci0gIH0KLQotICAvLyBHZW5lcmF0ZSBhIHJ1bGUgZmlsZSBpZiB0aGUgbWFpbiBkZXBlbmRlbmN5IGlzIG5vdCBhdmFpbGFibGUuCi0gIGlmICghZmlsZSkgewotICAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZyA9IHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpOwotCi0gICAgLy8gQ29uc3RydWN0IGEgcnVsZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlyc3Qgb3V0cHV0IHByb2R1Y2VkLgotICAgIHN0ZDo6c3RyaW5nIG91dE5hbWUgPSBnZy0+R2VuZXJhdGVSdWxlRmlsZShvdXRwdXRzWzBdKTsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBydWxlIGZpbGUgYWxyZWFkeSBleGlzdHMuCi0gICAgZmlsZSA9IHRoaXMtPkdldFNvdXJjZShvdXROYW1lLCBjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQ6Oktub3duKTsKLSAgICBpZiAoZmlsZSAmJiBmaWxlLT5HZXRDdXN0b21Db21tYW5kKCkgJiYgIXJlcGxhY2UpIHsKLSAgICAgIC8vIFRoZSBydWxlIGZpbGUgYWxyZWFkeSBleGlzdHMuCi0gICAgICBpZiAoY29tbWFuZExpbmVzICE9IGZpbGUtPkdldEN1c3RvbUNvbW1hbmQoKS0+R2V0Q29tbWFuZExpbmVzKCkpIHsKLSAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkF0dGVtcHQgdG8gYWRkIGEgY3VzdG9tIHJ1bGUgdG8gb3V0cHV0IFwiIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dE5hbWUgKyAiXCIgd2hpY2ggYWxyZWFkeSBoYXMgYSBjdXN0b20gcnVsZS4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmaWxlOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIGNtU291cmNlRmlsZSBmb3IgdGhlIHJ1bGUgZmlsZS4KLSAgICBpZiAoIWZpbGUpIHsKLSAgICAgIGZpbGUgPQotICAgICAgICB0aGlzLT5DcmVhdGVTb3VyY2Uob3V0TmFtZSwgdHJ1ZSwgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kOjpLbm93bik7Ci0gICAgfQotICAgIGZpbGUtPlNldFByb3BlcnR5KCJfX0NNQUtFX1JVTEUiLCAiMSIpOwotICB9Ci0KLSAgLy8gQXR0YWNoIHRoZSBjdXN0b20gY29tbWFuZCB0byB0aGUgZmlsZS4KLSAgaWYgKGZpbGUpIHsKLSAgICAvLyBDb25zdHJ1Y3QgYSBjb21wbGV0ZSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVwZW5kczIoZGVwZW5kcyk7Ci0gICAgaWYgKCFtYWluX2RlcGVuZGVuY3kuZW1wdHkoKSkgewotICAgICAgZGVwZW5kczIucHVzaF9iYWNrKG1haW5fZGVwZW5kZW5jeSk7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPGNtQ3VzdG9tQ29tbWFuZD4gY2MgPSBjbTo6bWFrZV91bmlxdWU8Y21DdXN0b21Db21tYW5kPigKLSAgICAgIHRoaXMsIG91dHB1dHMsIGJ5cHJvZHVjdHMsIGRlcGVuZHMyLCBjb21tYW5kTGluZXMsIGNvbW1lbnQsIHdvcmtpbmdEaXIpOwotICAgIGNjLT5TZXRFc2NhcGVPbGRTdHlsZShlc2NhcGVPbGRTdHlsZSk7Ci0gICAgY2MtPlNldEVzY2FwZUFsbG93TWFrZVZhcnModHJ1ZSk7Ci0gICAgY2MtPlNldEltcGxpY2l0RGVwZW5kcyhpbXBsaWNpdF9kZXBlbmRzKTsKLSAgICBjYy0+U2V0VXNlc1Rlcm1pbmFsKHVzZXNfdGVybWluYWwpOwotICAgIGNjLT5TZXRDb21tYW5kRXhwYW5kTGlzdHMoY29tbWFuZF9leHBhbmRfbGlzdHMpOwotICAgIGNjLT5TZXREZXBmaWxlKGRlcGZpbGUpOwotICAgIGNjLT5TZXRKb2JQb29sKGpvYl9wb29sKTsKLSAgICBmaWxlLT5TZXRDdXN0b21Db21tYW5kKHN0ZDo6bW92ZShjYykpOwotCi0gICAgdGhpcy0+QWRkU291cmNlT3V0cHV0cyhmaWxlLCBvdXRwdXRzLCBieXByb2R1Y3RzKTsKLSAgfQotICByZXR1cm4gZmlsZTsKKyAgICB9KTsKIH0KIAogdm9pZCBjbU1ha2VmaWxlOjpBZGRDdXN0b21Db21tYW5kT2xkU3R5bGUoCkBAIC0xMTM2LDExICsxMTYwLDggQEAKICAgaWYgKHNvdXJjZUZpbGVzLmZpbmQoc291cmNlKSkgewogICAgIC8vIFRoZSBzb3VyY2UgbG9va3MgbGlrZSBhIHJlYWwgZmlsZS4gIFVzZSBpdCBhcyB0aGUgbWFpbiBkZXBlbmRlbmN5LgogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCA6IG91dHB1dHMpIHsKLSAgICAgIGNtU291cmNlRmlsZSogc2YgPSB0aGlzLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCi0gICAgICAgIG91dHB1dCwgZGVwZW5kcywgc291cmNlLCBjb21tYW5kTGluZXMsIGNvbW1lbnQsIG51bGxwdHIpOwotICAgICAgaWYgKHNmKSB7Ci0gICAgICAgIGFkZFJ1bGVGaWxlVG9UYXJnZXQoc2YpOwotICAgICAgfQorICAgICAgdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KG91dHB1dCwgZGVwZW5kcywgc291cmNlLCBjb21tYW5kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCwgbnVsbHB0ciwgYWRkUnVsZUZpbGVUb1RhcmdldCk7CiAgICAgfQogICB9IGVsc2UgewogICAgIHN0ZDo6c3RyaW5nIG5vX21haW5fZGVwZW5kZW5jeTsKQEAgLTExNDksMTEgKzExNzAsOSBAQAogCiAgICAgLy8gVGhlIHNvdXJjZSBtYXkgbm90IGJlIGEgcmVhbCBmaWxlLiAgRG8gbm90IHVzZSBhIG1haW4gZGVwZW5kZW5jeS4KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQgOiBvdXRwdXRzKSB7Ci0gICAgICBjbVNvdXJjZUZpbGUqIHNmID0gdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgICAgICBvdXRwdXQsIGRlcGVuZHMyLCBub19tYWluX2RlcGVuZGVuY3ksIGNvbW1hbmRMaW5lcywgY29tbWVudCwgbnVsbHB0cik7Ci0gICAgICBpZiAoc2YpIHsKLSAgICAgICAgYWRkUnVsZUZpbGVUb1RhcmdldChzZik7Ci0gICAgICB9CisgICAgICB0aGlzLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQob3V0cHV0LCBkZXBlbmRzMiwgbm9fbWFpbl9kZXBlbmRlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lcywgY29tbWVudCwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlRmlsZVRvVGFyZ2V0KTsKICAgICB9CiAgIH0KIH0KQEAgLTExNzAsMjkgKzExODksMTggQEAKIAogICAvLyBWYWxpZGF0ZSBjdXN0b20gY29tbWFuZHMuCiAgIGlmICh0aGlzLT5WYWxpZGF0ZUN1c3RvbUNvbW1hbmQoY29tbWFuZExpbmVzKSkgewotICAgIC8vIEFkZCBjb21tYW5kIGZhY3RvcnkgdG8gYWxsb3cgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluIG91dHB1dC4KLSAgICB0aGlzLT5Db21taXRBcHBlbmRDdXN0b21Db21tYW5kVG9PdXRwdXQob3V0cHV0LCBkZXBlbmRzLCBpbXBsaWNpdF9kZXBlbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZXMpOworICAgIC8vIERpc3BhdGNoIGNvbW1hbmQgY3JlYXRpb24gdG8gYWxsb3cgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluIG91dHB1dHMuCisgICAgdGhpcy0+QWRkR2VuZXJhdG9yQWN0aW9uKAorICAgICAgWz1dKGNtTG9jYWxHZW5lcmF0b3ImIGxnLCBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KSB7CisgICAgICAgIEJhY2t0cmFjZUd1YXJkIGd1YXJkKHRoaXMtPkJhY2t0cmFjZSwgbGZidCk7CisgICAgICAgIGRldGFpbDo6QXBwZW5kQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KGxnLCBsZmJ0LCBvdXRwdXQsIGRlcGVuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0X2RlcGVuZHMsIGNvbW1hbmRMaW5lcyk7CisgICAgICB9KTsKICAgfQogCiAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGNtTWFrZWZpbGU6OkNvbW1pdEFwcGVuZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAotICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCi0gIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMpCi17Ci0gIC8vIExvb2t1cCBhbiBleGlzdGluZyBjb21tYW5kLgotICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IHRoaXMtPkdldFNvdXJjZUZpbGVXaXRoT3V0cHV0KG91dHB1dCkpIHsKLSAgICBpZiAoY21DdXN0b21Db21tYW5kKiBjYyA9IHNmLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKLSAgICAgIGNjLT5BcHBlbmRDb21tYW5kcyhjb21tYW5kTGluZXMpOwotICAgICAgY2MtPkFwcGVuZERlcGVuZHMoZGVwZW5kcyk7Ci0gICAgICBjYy0+QXBwZW5kSW1wbGljaXREZXBlbmRzKGltcGxpY2l0X2RlcGVuZHMpOwotICAgIH0KLSAgfQotfQotCiBjbVV0aWxpdHlPdXRwdXQgY21NYWtlZmlsZTo6R2V0VXRpbGl0eU91dHB1dChjbVRhcmdldCogdGFyZ2V0KQogewogICBzdGQ6OnN0cmluZyBmb3JjZSA9IGNtU3RyQ2F0KHRoaXMtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKQEAgLTEyMTUsMTUgKzEyMjMsMTQgQEAKIH0KIAogY21UYXJnZXQqIGNtTWFrZWZpbGU6OkFkZFV0aWxpdHlDb21tYW5kKAotICBjb25zdCBzdGQ6OnN0cmluZyYgdXRpbGl0eU5hbWUsIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sIGJvb2wgZXhjbHVkZUZyb21BbGwsCi0gIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXJlY3RvcnksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHV0aWxpdHlOYW1lLCBib29sIGV4Y2x1ZGVGcm9tQWxsLCBjb25zdCBjaGFyKiB3b3JraW5nRGlyLAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCiAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgYm9vbCBlc2NhcGVPbGRTdHlsZSwKICAgY29uc3QgY2hhciogY29tbWVudCwgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLAotICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCwgYm9vbCBzdGRQaXBlc1VURjgpCiB7Ci0gIGNtVGFyZ2V0KiB0YXJnZXQgPQotICAgIHRoaXMtPkFkZE5ld1V0aWxpdHlUYXJnZXQodXRpbGl0eU5hbWUsIG9yaWdpbiwgZXhjbHVkZUZyb21BbGwpOworICBjbVRhcmdldCogdGFyZ2V0ID0gdGhpcy0+QWRkTmV3VXRpbGl0eVRhcmdldCh1dGlsaXR5TmFtZSwgZXhjbHVkZUZyb21BbGwpOwogCiAgIC8vIFZhbGlkYXRlIGN1c3RvbSBjb21tYW5kcy4KICAgaWYgKChjb21tYW5kTGluZXMuZW1wdHkoKSAmJiBkZXBlbmRzLmVtcHR5KCkpIHx8CkBAIC0xMjM2LDQ1ICsxMjQzLDI2IEBACiAgIHRoaXMtPkdldE9yQ3JlYXRlR2VuZXJhdGVkU291cmNlKGZvcmNlLk5hbWUpOwogCiAgIC8vIEFsd2F5cyBjcmVhdGUgdGhlIGJ5cHJvZHVjdCBzb3VyY2VzIGFuZCBtYXJrIHRoZW0gZ2VuZXJhdGVkLgotICB0aGlzLT5DcmVhdGVHZW5lcmF0ZWRTb3VyY2VzKGJ5cHJvZHVjdHMpOworICB0aGlzLT5DcmVhdGVHZW5lcmF0ZWRCeXByb2R1Y3RzKGJ5cHJvZHVjdHMpOwogCi0gIGlmICghY29tbWVudCkgewotICAgIC8vIFVzZSBhbiBlbXB0eSBjb21tZW50IHRvIGF2b2lkIGdlbmVyYXRpb24gb2YgZGVmYXVsdCBjb21tZW50LgotICAgIGNvbW1lbnQgPSAiIjsKLSAgfQorICAvLyBTdHJpbmdzIGNvdWxkIGJlIG1vdmVkIGludG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggQysrMTQuCisgIGNtOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gY29tbWVudFN0ciA9IE1ha2VPcHRpb25hbFN0cmluZyhjb21tZW50KTsKKyAgY206Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiB3b3JraW5nU3RyID0gTWFrZU9wdGlvbmFsU3RyaW5nKHdvcmtpbmdEaXIpOwogCi0gIHRoaXMtPkNvbW1pdFV0aWxpdHlDb21tYW5kKHRhcmdldCwgZm9yY2UsIHdvcmtpbmdEaXJlY3RvcnksIGJ5cHJvZHVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMsIGNvbW1hbmRMaW5lcywgZXNjYXBlT2xkU3R5bGUsIGNvbW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXNfdGVybWluYWwsIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBqb2JfcG9vbCk7CisgIC8vIERpc3BhdGNoIGNvbW1hbmQgY3JlYXRpb24gdG8gYWxsb3cgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGluIG91dHB1dHMuCisgIHRoaXMtPkFkZEdlbmVyYXRvckFjdGlvbigKKyAgICBbPV0oY21Mb2NhbEdlbmVyYXRvciYgbGcsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmIGxmYnQpIHsKKyAgICAgIEJhY2t0cmFjZUd1YXJkIGd1YXJkKHRoaXMtPkJhY2t0cmFjZSwgbGZidCk7CisgICAgICBkZXRhaWw6OkFkZFV0aWxpdHlDb21tYW5kKGxnLCBsZmJ0LCBjbUNvbW1hbmRPcmlnaW46OlByb2plY3QsIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2UsIEdldENTdHJPck51bGwod29ya2luZ1N0ciksIGJ5cHJvZHVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMsIGNvbW1hbmRMaW5lcywgZXNjYXBlT2xkU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENTdHJPck51bGwoY29tbWVudFN0ciksIHVzZXNfdGVybWluYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfZXhwYW5kX2xpc3RzLCBqb2JfcG9vbCwgc3RkUGlwZXNVVEY4KTsKKyAgICB9KTsKIAogICByZXR1cm4gdGFyZ2V0OwogfQogCi12b2lkIGNtTWFrZWZpbGU6OkNvbW1pdFV0aWxpdHlDb21tYW5kKAotICBjbVRhcmdldCogdGFyZ2V0LCBjb25zdCBjbVV0aWxpdHlPdXRwdXQmIGZvcmNlLCBjb25zdCBjaGFyKiB3b3JraW5nRGlyZWN0b3J5LAotICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKLSAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgYm9vbCBlc2NhcGVPbGRTdHlsZSwKLSAgY29uc3QgY2hhciogY29tbWVudCwgYm9vbCB1c2VzX3Rlcm1pbmFsLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzLAotICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wpCi17Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmb3JjZWQ7Ci0gIGZvcmNlZC5wdXNoX2JhY2soZm9yY2UuTmFtZSk7Ci0gIHN0ZDo6c3RyaW5nIG5vX21haW5fZGVwZW5kZW5jeTsKLSAgY21JbXBsaWNpdERlcGVuZHNMaXN0IG5vX2ltcGxpY2l0X2RlcGVuZHM7Ci0gIGJvb2wgbm9fcmVwbGFjZSA9IGZhbHNlOwotICBjbVNvdXJjZUZpbGUqIHNmID0gdGhpcy0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgIGZvcmNlZCwgYnlwcm9kdWN0cywgZGVwZW5kcywgbm9fbWFpbl9kZXBlbmRlbmN5LCBub19pbXBsaWNpdF9kZXBlbmRzLAotICAgIGNvbW1hbmRMaW5lcywgY29tbWVudCwgd29ya2luZ0RpcmVjdG9yeSwgbm9fcmVwbGFjZSwgZXNjYXBlT2xkU3R5bGUsCi0gICAgdXNlc190ZXJtaW5hbCwgY29tbWFuZF9leHBhbmRfbGlzdHMsIC8qZGVwZmlsZT0qLyIiLCBqb2JfcG9vbCk7Ci0gIGlmICghZm9yY2UuTmFtZUNNUDAwNDkuZW1wdHkoKSkgewotICAgIHRhcmdldC0+QWRkU291cmNlKGZvcmNlLk5hbWVDTVAwMDQ5KTsKLSAgfQotICBpZiAoc2YpIHsKLSAgICB0aGlzLT5BZGRUYXJnZXRCeXByb2R1Y3RzKHRhcmdldCwgYnlwcm9kdWN0cyk7Ci0gIH0KLX0KLQogc3RhdGljIHZvaWQgc19BZGREZWZpbmVGbGFnKHN0ZDo6c3RyaW5nIGNvbnN0JiBmbGFnLCBzdGQ6OnN0cmluZyYgZGZsYWdzKQogewogICAvLyByZW1vdmUgYW55IFxuXHIKQEAgLTEzNDIsMjggKzEzMzAsMjcgQEAKIAogdm9pZCBjbU1ha2VmaWxlOjpBZGRDb21waWxlRGVmaW5pdGlvbihzdGQ6OnN0cmluZyBjb25zdCYgb3B0aW9uKQogewotICB0aGlzLT5BcHBlbmRQcm9wZXJ0eSgiQ09NUElMRV9ERUZJTklUSU9OUyIsIG9wdGlvbi5jX3N0cigpKTsKKyAgdGhpcy0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiLCBvcHRpb24pOwogfQogCiB2b2lkIGNtTWFrZWZpbGU6OkFkZENvbXBpbGVPcHRpb24oc3RkOjpzdHJpbmcgY29uc3QmIG9wdGlvbikKIHsKLSAgdGhpcy0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfT1BUSU9OUyIsIG9wdGlvbi5jX3N0cigpKTsKKyAgdGhpcy0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfT1BUSU9OUyIsIG9wdGlvbik7CiB9CiAKIHZvaWQgY21NYWtlZmlsZTo6QWRkTGlua09wdGlvbihzdGQ6OnN0cmluZyBjb25zdCYgb3B0aW9uKQogewotICB0aGlzLT5BcHBlbmRQcm9wZXJ0eSgiTElOS19PUFRJT05TIiwgb3B0aW9uLmNfc3RyKCkpOworICB0aGlzLT5BcHBlbmRQcm9wZXJ0eSgiTElOS19PUFRJT05TIiwgb3B0aW9uKTsKIH0KIAogdm9pZCBjbU1ha2VmaWxlOjpBZGRMaW5rRGlyZWN0b3J5KHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXJlY3RvcnksIGJvb2wgYmVmb3JlKQogewotICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSB0aGlzLT5HZXRCYWNrdHJhY2UoKTsKICAgaWYgKGJlZm9yZSkgewotICAgIHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuUHJlcGVuZExpbmtEaXJlY3Rvcmllc0VudHJ5KGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZmJ0KTsKKyAgICB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLlByZXBlbmRMaW5rRGlyZWN0b3JpZXNFbnRyeSgKKyAgICAgIGRpcmVjdG9yeSwgdGhpcy0+QmFja3RyYWNlKTsKICAgfSBlbHNlIHsKLSAgICB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLkFwcGVuZExpbmtEaXJlY3Rvcmllc0VudHJ5KGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxmYnQpOworICAgIHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuQXBwZW5kTGlua0RpcmVjdG9yaWVzRW50cnkoCisgICAgICBkaXJlY3RvcnksIHRoaXMtPkJhY2t0cmFjZSk7CiAgIH0KIH0KIApAQCAtMTQwOCw5ICsxMzk1LDkgQEAKICAgY29uc3QgY2hhciogZGVmaW5lID0gZGVmLmNfc3RyKCkgKyAyOwogCiAgIGlmIChyZW1vdmUpIHsKLSAgICBpZiAoY29uc3QgY2hhciogY2RlZnMgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9ERUZJTklUSU9OUyIpKSB7CisgICAgaWYgKGNtUHJvcCBjZGVmcyA9IHRoaXMtPkdldFByb3BlcnR5KCJDT01QSUxFX0RFRklOSVRJT05TIikpIHsKICAgICAgIC8vIEV4cGFuZCB0aGUgbGlzdC4KLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWZzID0gY21FeHBhbmRlZExpc3QoY2RlZnMpOworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlZnMgPSBjbUV4cGFuZGVkTGlzdCgqY2RlZnMpOwogCiAgICAgICAvLyBSZWNvbXBvc2UgdGhlIGxpc3Qgd2l0aG91dCB0aGUgZGVmaW5pdGlvbi4KICAgICAgIGF1dG8gZGVmRW5kID0gc3RkOjpyZW1vdmUoZGVmcy5iZWdpbigpLCBkZWZzLmVuZCgpLCBkZWZpbmUpOwpAQCAtMTQzOSwyOSArMTQyNiwzMiBAQAogICAvLyBJbmNsdWRlIHRyYW5zZm9ybSBwcm9wZXJ0eS4gIFRoZXJlIGlzIG5vIHBlci1jb25maWcgdmVyc2lvbi4KICAgewogICAgIGNvbnN0IGNoYXIqIHByb3AgPSAiSU1QTElDSVRfREVQRU5EU19JTkNMVURFX1RSQU5TRk9STSI7Ci0gICAgdGhpcy0+U2V0UHJvcGVydHkocHJvcCwgcGFyZW50LT5HZXRQcm9wZXJ0eShwcm9wKSk7CisgICAgY21Qcm9wIHAgPSBwYXJlbnQtPkdldFByb3BlcnR5KHByb3ApOworICAgIHRoaXMtPlNldFByb3BlcnR5KHByb3AsIHAgPyBwLT5jX3N0cigpIDogbnVsbHB0cik7CiAgIH0KIAogICAvLyBjb21waWxlIGRlZmluaXRpb25zIHByb3BlcnR5IGFuZCBwZXItY29uZmlnIHZlcnNpb25zCiAgIGNtUG9saWNpZXM6OlBvbGljeVN0YXR1cyBwb2xTdCA9IHRoaXMtPkdldFBvbGljeVN0YXR1cyhjbVBvbGljaWVzOjpDTVAwMDQzKTsKICAgaWYgKHBvbFN0ID09IGNtUG9saWNpZXM6OldBUk4gfHwgcG9sU3QgPT0gY21Qb2xpY2llczo6T0xEKSB7Ci0gICAgdGhpcy0+U2V0UHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiLAotICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+R2V0UHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiKSk7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7Ci0gICAgdGhpcy0+R2V0Q29uZmlndXJhdGlvbnMoY29uZmlncyk7CisgICAgY21Qcm9wIHAgPSBwYXJlbnQtPkdldFByb3BlcnR5KCJDT01QSUxFX0RFRklOSVRJT05TIik7CisgICAgdGhpcy0+U2V0UHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiLCBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHIpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzID0KKyAgICAgIHRoaXMtPkdldEdlbmVyYXRvckNvbmZpZ3MoY21NYWtlZmlsZTo6RXhjbHVkZUVtcHR5Q29uZmlnKTsKICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcgOiBjb25maWdzKSB7CiAgICAgICBzdGQ6OnN0cmluZyBkZWZQcm9wTmFtZSA9CiAgICAgICAgIGNtU3RyQ2F0KCJDT01QSUxFX0RFRklOSVRJT05TXyIsIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpKTsKLSAgICAgIGNvbnN0IGNoYXIqIHByb3AgPSBwYXJlbnQtPkdldFByb3BlcnR5KGRlZlByb3BOYW1lKTsKLSAgICAgIHRoaXMtPlNldFByb3BlcnR5KGRlZlByb3BOYW1lLCBwcm9wKTsKKyAgICAgIGNtUHJvcCBwcm9wID0gcGFyZW50LT5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSk7CisgICAgICB0aGlzLT5TZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSwgcHJvcCA/IHByb3AtPmNfc3RyKCkgOiBudWxscHRyKTsKICAgICB9CiAgIH0KIAogICAvLyBsYWJlbHMKLSAgdGhpcy0+U2V0UHJvcGVydHkoIkxBQkVMUyIsIHBhcmVudC0+R2V0UHJvcGVydHkoIkxBQkVMUyIpKTsKKyAgY21Qcm9wIHAgPSBwYXJlbnQtPkdldFByb3BlcnR5KCJMQUJFTFMiKTsKKyAgdGhpcy0+U2V0UHJvcGVydHkoIkxBQkVMUyIsIHAgPyBwLT5jX3N0cigpIDogbnVsbHB0cik7CiAKICAgLy8gbGluayBsaWJyYXJpZXMKLSAgdGhpcy0+U2V0UHJvcGVydHkoIkxJTktfTElCUkFSSUVTIiwgcGFyZW50LT5HZXRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiKSk7CisgIHAgPSBwYXJlbnQtPkdldFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIpOworICB0aGlzLT5TZXRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiLCBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHIpOwogCiAgIC8vIHRoZSBpbml0aWFsIHByb2plY3QgbmFtZQogICB0aGlzLT5TdGF0ZVNuYXBzaG90LlNldFByb2plY3ROYW1lKHBhcmVudC0+U3RhdGVTbmFwc2hvdC5HZXRQcm9qZWN0TmFtZSgpKTsKQEAgLTE0NzIsMTAgKzE0NjIsMjcgQEAKICAgLy8gSW1wb3J0ZWQgdGFyZ2V0cy4KICAgdGhpcy0+SW1wb3J0ZWRUYXJnZXRzID0gcGFyZW50LT5JbXBvcnRlZFRhcmdldHM7CiAKKyAgLy8gTm9uLWdsb2JhbCBBbGlhcyB0YXJnZXRzLgorICB0aGlzLT5BbGlhc1RhcmdldHMgPSBwYXJlbnQtPkFsaWFzVGFyZ2V0czsKKwogICAvLyBSZWN1cnNpb24gZGVwdGguCiAgIHRoaXMtPlJlY3Vyc2lvbkRlcHRoID0gcGFyZW50LT5SZWN1cnNpb25EZXB0aDsKIH0KIAordm9pZCBjbU1ha2VmaWxlOjpBZGRJbnN0YWxsR2VuZXJhdG9yKHN0ZDo6dW5pcXVlX3B0cjxjbUluc3RhbGxHZW5lcmF0b3I+IGcpCit7CisgIGlmIChnKSB7CisgICAgdGhpcy0+SW5zdGFsbEdlbmVyYXRvcnMucHVzaF9iYWNrKHN0ZDo6bW92ZShnKSk7CisgIH0KK30KKwordm9pZCBjbU1ha2VmaWxlOjpBZGRUZXN0R2VuZXJhdG9yKHN0ZDo6dW5pcXVlX3B0cjxjbVRlc3RHZW5lcmF0b3I+IGcpCit7CisgIGlmIChnKSB7CisgICAgdGhpcy0+VGVzdEdlbmVyYXRvcnMucHVzaF9iYWNrKHN0ZDo6bW92ZShnKSk7CisgIH0KK30KKwogdm9pZCBjbU1ha2VmaWxlOjpQdXNoRnVuY3Rpb25TY29wZShzdGQ6OnN0cmluZyBjb25zdCYgZmlsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtUG9saWNpZXM6OlBvbGljeU1hcCYgcG0pCiB7CkBAIC0xNTA3LDggKzE1MTQsNiBAQAogI2VuZGlmCiAKICAgdGhpcy0+UG9wTG9vcEJsb2NrQmFycmllcigpOwotCi0gIHRoaXMtPkNoZWNrRm9yVW51c2VkVmFyaWFibGVzKCk7CiB9CiAKIHZvaWQgY21NYWtlZmlsZTo6UHVzaE1hY3JvU2NvcGUoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVOYW1lLApAQCAtMTY0Miw3ICsxNjQ3LDcgQEAKICAgICAgICAgYWxsb3dlZENvbW1hbmRzLmluc2VydCgibWVzc2FnZSIpOwogICAgICAgICBpc1Byb2JsZW0gPSBmYWxzZTsKICAgICAgICAgZm9yIChjbUxpc3RGaWxlRnVuY3Rpb24gY29uc3QmIGZ1bmMgOiBsaXN0RmlsZS5GdW5jdGlvbnMpIHsKLSAgICAgICAgICBpZiAoIWNtQ29udGFpbnMoYWxsb3dlZENvbW1hbmRzLCBmdW5jLk5hbWUuTG93ZXIpKSB7CisgICAgICAgICAgaWYgKCFjbTo6Y29udGFpbnMoYWxsb3dlZENvbW1hbmRzLCBmdW5jLk5hbWUuTG93ZXIpKSB7CiAgICAgICAgICAgICBpc1Byb2JsZW0gPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQpAQCAtMTY1NSw3ICsxNjYwLDggQEAKICAgICAgICAgdGhpcy0+U2V0Q2hlY2tDTVAwMDAwKHRydWUpOwogCiAgICAgICAgIC8vIEltcGxpY2l0bHkgc2V0IHRoZSB2ZXJzaW9uIGZvciB0aGUgdXNlci4KLSAgICAgICAgdGhpcy0+U2V0UG9saWN5VmVyc2lvbigiMi40Iiwgc3RkOjpzdHJpbmcoKSk7CisgICAgICAgIGNtUG9saWNpZXM6OkFwcGx5UG9saWN5VmVyc2lvbih0aGlzLCAyLCA0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qb2xpY2llczo6V2FybkNvbXBhdDo6T2ZmKTsKICAgICAgIH0KICAgICB9CiAgICAgYm9vbCBoYXNQcm9qZWN0ID0gZmFsc2U7CkBAIC0xNzc2LDggKzE3ODIsMTAgQEAKIAogICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KGJpblBhdGgpOwogCi0gIGNtTWFrZWZpbGUqIHN1Yk1mID0gbmV3IGNtTWFrZWZpbGUodGhpcy0+R2xvYmFsR2VuZXJhdG9yLCBuZXdTbmFwc2hvdCk7Ci0gIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5BZGRNYWtlZmlsZShzdWJNZik7CisgIGF1dG8gc3ViTWZ1ID0KKyAgICBjbTo6bWFrZV91bmlxdWU8Y21NYWtlZmlsZT4odGhpcy0+R2xvYmFsR2VuZXJhdG9yLCBuZXdTbmFwc2hvdCk7CisgIGF1dG8gc3ViTWYgPSBzdWJNZnUuZ2V0KCk7CisgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5BZGRNYWtlZmlsZShzdGQ6Om1vdmUoc3ViTWZ1KSk7CiAKICAgaWYgKGV4Y2x1ZGVGcm9tQWxsKSB7CiAgICAgc3ViTWYtPlNldFByb3BlcnR5KCJFWENMVURFX0ZST01fQUxMIiwgIlRSVUUiKTsKQEAgLTE3ODksOCArMTc5Nyw4IEBACiAgICAgdGhpcy0+VW5Db25maWd1cmVkRGlyZWN0b3JpZXMucHVzaF9iYWNrKHN1Yk1mKTsKICAgfQogCi0gIHRoaXMtPkFkZEluc3RhbGxHZW5lcmF0b3IobmV3IGNtSW5zdGFsbFN1YmRpcmVjdG9yeUdlbmVyYXRvcigKLSAgICBzdWJNZiwgYmluUGF0aC5jX3N0cigpLCBleGNsdWRlRnJvbUFsbCkpOworICB0aGlzLT5BZGRJbnN0YWxsR2VuZXJhdG9yKGNtOjptYWtlX3VuaXF1ZTxjbUluc3RhbGxTdWJkaXJlY3RvcnlHZW5lcmF0b3I+KAorICAgIHN1Yk1mLCBiaW5QYXRoLCBleGNsdWRlRnJvbUFsbCkpOwogfQogCiBjb25zdCBzdGQ6OnN0cmluZyYgY21NYWtlZmlsZTo6R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpIGNvbnN0CkBAIC0xODIwLDIwICsxODI4LDE5IEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgY21MaXN0RmlsZUJhY2t0cmFjZSBsZmJ0ID0gdGhpcy0+R2V0QmFja3RyYWNlKCk7CiAgIHN0ZDo6c3RyaW5nIGVudHJ5U3RyaW5nID0gY21Kb2luKGluY3MsICI7Iik7CiAgIGlmIChiZWZvcmUpIHsKICAgICB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERpcmVjdG9yeSgpLlByZXBlbmRJbmNsdWRlRGlyZWN0b3JpZXNFbnRyeSgKLSAgICAgIGVudHJ5U3RyaW5nLCBsZmJ0KTsKKyAgICAgIGVudHJ5U3RyaW5nLCB0aGlzLT5CYWNrdHJhY2UpOwogICB9IGVsc2UgewogICAgIHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuQXBwZW5kSW5jbHVkZURpcmVjdG9yaWVzRW50cnkoCi0gICAgICBlbnRyeVN0cmluZywgbGZidCk7CisgICAgICBlbnRyeVN0cmluZywgdGhpcy0+QmFja3RyYWNlKTsKICAgfQogCiAgIC8vIFByb3BlcnR5IG9uIGVhY2ggdGFyZ2V0OgogICBmb3IgKGF1dG8mIHRhcmdldCA6IHRoaXMtPlRhcmdldHMpIHsKICAgICBjbVRhcmdldCYgdCA9IHRhcmdldC5zZWNvbmQ7Ci0gICAgdC5JbnNlcnRJbmNsdWRlKGVudHJ5U3RyaW5nLCBsZmJ0LCBiZWZvcmUpOworICAgIHQuSW5zZXJ0SW5jbHVkZShlbnRyeVN0cmluZywgdGhpcy0+QmFja3RyYWNlLCBiZWZvcmUpOwogICB9CiB9CiAKQEAgLTE4NTMsOSArMTg2MCw2IEBACiAKIHZvaWQgY21NYWtlZmlsZTo6QWRkRGVmaW5pdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY206OnN0cmluZ192aWV3IHZhbHVlKQogewotICBpZiAodGhpcy0+VmFyaWFibGVJbml0aWFsaXplZChuYW1lKSkgewotICAgIHRoaXMtPkxvZ1VudXNlZCgiY2hhbmdpbmcgZGVmaW5pdGlvbiIsIG5hbWUpOwotICB9CiAgIHRoaXMtPlN0YXRlU25hcHNob3QuU2V0RGVmaW5pdGlvbihuYW1lLCB2YWx1ZSk7CiAKICNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCkBAIC0xODc3LDggKzE4ODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZSkKIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcqIGV4aXN0aW5nVmFsdWUgPQotICAgIHRoaXMtPkdldFN0YXRlKCktPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShuYW1lKTsKKyAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPSB0aGlzLT5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUobmFtZSk7CiAgIC8vIG11c3QgYmUgb3V0c2lkZSB0aGUgZm9sbG93aW5nIGlmKCkgdG8ga2VlcCBpdCBhbGl2ZSBsb25nIGVub3VnaAogICBzdGQ6OnN0cmluZyBudmFsdWU7CiAKQEAgLTE5MTcsMTYgKzE5MjAsNiBAQAogICB0aGlzLT5TdGF0ZVNuYXBzaG90LlJlbW92ZURlZmluaXRpb24obmFtZSk7CiB9CiAKLXZvaWQgY21NYWtlZmlsZTo6Q2hlY2tGb3JVbnVzZWRWYXJpYWJsZXMoKSBjb25zdAotewotICBpZiAoIXRoaXMtPldhcm5VbnVzZWQpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYga2V5IDogdGhpcy0+U3RhdGVTbmFwc2hvdC5VbnVzZWRLZXlzKCkpIHsKLSAgICB0aGlzLT5Mb2dVbnVzZWQoIm91dCBvZiBzY29wZSIsIGtleSk7Ci0gIH0KLX0KLQogdm9pZCBjbU1ha2VmaWxlOjpNYXJrVmFyaWFibGVBc1VzZWQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcikKIHsKICAgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREZWZpbml0aW9uKHZhcik7CkBAIC0xOTU0LDI5ICsxOTQ3LDggQEAKICAgfQogfQogCi12b2lkIGNtTWFrZWZpbGU6OkxvZ1VudXNlZChjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdAotewotICBpZiAodGhpcy0+V2FyblVudXNlZCkgewotICAgIHN0ZDo6c3RyaW5nIHBhdGg7Ci0gICAgaWYgKCF0aGlzLT5FeGVjdXRpb25TdGF0dXNTdGFjay5lbXB0eSgpKSB7Ci0gICAgICBwYXRoID0gdGhpcy0+R2V0RXhlY3V0aW9uQ29udGV4dCgpLkZpbGVQYXRoOwotICAgIH0gZWxzZSB7Ci0gICAgICBwYXRoID0gY21TdHJDYXQodGhpcy0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLCAiL0NNYWtlTGlzdHMudHh0Iik7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMtPkNoZWNrU3lzdGVtVmFycyB8fCB0aGlzLT5Jc1Byb2plY3RGaWxlKHBhdGguY19zdHIoKSkpIHsKLSAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtc2c7Ci0gICAgICBtc2cgPDwgInVudXNlZCB2YXJpYWJsZSAoIiA8PCByZWFzb24gPDwgIikgXCciIDw8IG5hbWUgPDwgIlwnIjsKLSAgICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsIG1zZy5zdHIoKSk7Ci0gICAgfQotICB9Ci19Ci0KIHZvaWQgY21NYWtlZmlsZTo6UmVtb3ZlRGVmaW5pdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKIHsKLSAgaWYgKHRoaXMtPlZhcmlhYmxlSW5pdGlhbGl6ZWQobmFtZSkpIHsKLSAgICB0aGlzLT5Mb2dVbnVzZWQoInVuc2V0dGluZyIsIG5hbWUpOwotICB9CiAgIHRoaXMtPlN0YXRlU25hcHNob3QuUmVtb3ZlRGVmaW5pdGlvbihuYW1lKTsKICNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCiAgIGNtVmFyaWFibGVXYXRjaCogdnYgPSB0aGlzLT5HZXRWYXJpYWJsZVdhdGNoKCk7CkBAIC0yMDA4LDggKzE5ODAsOCBAQAogICAgIGRlZmF1bHQ6OwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGxpbmtMaWJzUHJvcCA9IHRoaXMtPkdldFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmtMaWJzID0gY21FeHBhbmRlZExpc3QobGlua0xpYnNQcm9wKTsKKyAgaWYgKGNtUHJvcCBsaW5rTGlic1Byb3AgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiKSkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rTGlicyA9IGNtRXhwYW5kZWRMaXN0KCpsaW5rTGlic1Byb3ApOwogCiAgICAgZm9yIChhdXRvIGogPSBsaW5rTGlicy5iZWdpbigpOyBqICE9IGxpbmtMaWJzLmVuZCgpOyArK2opIHsKICAgICAgIHN0ZDo6c3RyaW5nIGxpYnJhcnlOYW1lID0gKmo7CkBAIC0yMDI3LDE1ICsxOTk5LDE4IEBACiAgICAgICB0YXJnZXQuQWRkTGlua0xpYnJhcnkoKnRoaXMsIGxpYnJhcnlOYW1lLCBsaWJUeXBlKTsKICAgICAgIHRhcmdldC5BcHBlbmRQcm9wZXJ0eSgKICAgICAgICAgIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyIsCi0gICAgICAgIHRhcmdldC5HZXREZWJ1Z0dlbmVyYXRvckV4cHJlc3Npb25zKGxpYnJhcnlOYW1lLCBsaWJUeXBlKS5jX3N0cigpKTsKKyAgICAgICAgdGFyZ2V0LkdldERlYnVnR2VuZXJhdG9yRXhwcmVzc2lvbnMobGlicmFyeU5hbWUsIGxpYlR5cGUpKTsKICAgICB9CiAgIH0KIH0KIAotdm9pZCBjbU1ha2VmaWxlOjpBZGRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgbG5hbWUsIHN0ZDo6c3RyaW5nIGNvbnN0JiB0Z3ROYW1lKQordm9pZCBjbU1ha2VmaWxlOjpBZGRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgbG5hbWUsIHN0ZDo6c3RyaW5nIGNvbnN0JiB0Z3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGdsb2JhbGx5VmlzaWJsZSkKIHsKICAgdGhpcy0+QWxpYXNUYXJnZXRzW2xuYW1lXSA9IHRndE5hbWU7Ci0gIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5BZGRBbGlhcyhsbmFtZSwgdGd0TmFtZSk7CisgIGlmIChnbG9iYWxseVZpc2libGUpIHsKKyAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkQWxpYXMobG5hbWUsIHRndE5hbWUpOworICB9CiB9CiAKIGNtVGFyZ2V0KiBjbU1ha2VmaWxlOjpBZGRMaWJyYXJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBsbmFtZSwKQEAgLTIwNzgsMTAgKzIwNTMsMTEgQEAKIGNtVGFyZ2V0KiBjbU1ha2VmaWxlOjpBZGROZXdUYXJnZXQoY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQogewotICBhdXRvIGl0ID0KLSAgICB0aGlzLT5UYXJnZXRzCi0gICAgICAuZW1wbGFjZShuYW1lLCBjbVRhcmdldChuYW1lLCB0eXBlLCBjbVRhcmdldDo6VmlzaWJpbGl0eU5vcm1hbCwgdGhpcykpCi0gICAgICAuZmlyc3Q7CisgIGF1dG8gaXQgPSB0aGlzLT5UYXJnZXRzCisgICAgICAgICAgICAgIC5lbXBsYWNlKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNtVGFyZ2V0KG5hbWUsIHR5cGUsIGNtVGFyZ2V0OjpWaXNpYmlsaXR5Tm9ybWFsLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVRhcmdldDo6UGVyQ29uZmlnOjpZZXMpKQorICAgICAgICAgICAgICAuZmlyc3Q7CiAgIHRoaXMtPk9yZGVyZWRUYXJnZXRzLnB1c2hfYmFjaygmaXQtPnNlY29uZCk7CiAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5JbmRleFRhcmdldCgmaXQtPnNlY29uZCk7CiAgIHRoaXMtPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKS5BZGROb3JtYWxUYXJnZXROYW1lKG5hbWUpOwpAQCAtMjA4OSwxMSArMjA2NSw5IEBACiB9CiAKIGNtVGFyZ2V0KiBjbU1ha2VmaWxlOjpBZGROZXdVdGlsaXR5VGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiB1dGlsaXR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtQ29tbWFuZE9yaWdpbiBvcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4Y2x1ZGVGcm9tQWxsKQogewogICBjbVRhcmdldCogdGFyZ2V0ID0gdGhpcy0+QWRkTmV3VGFyZ2V0KGNtU3RhdGVFbnVtczo6VVRJTElUWSwgdXRpbGl0eU5hbWUpOwotICB0YXJnZXQtPlNldElzR2VuZXJhdG9yUHJvdmlkZWQob3JpZ2luID09IGNtQ29tbWFuZE9yaWdpbjo6R2VuZXJhdG9yKTsKICAgaWYgKGV4Y2x1ZGVGcm9tQWxsKSB7CiAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRVhDTFVERV9GUk9NX0FMTCIsICJUUlVFIik7CiAgIH0KQEAgLTIxNTUsMTggKzIxMjksMTggQEAKIAogICAvLyBMb29rIHRocm91Z2ggYWxsIHRoZSBzb3VyY2UgZmlsZXMgdGhhdCBoYXZlIGN1c3RvbSBjb21tYW5kcyBhbmQgc2VlIGlmIHRoZQogICAvLyBjdXN0b20gY29tbWFuZCBoYXMgdGhlIHBhc3NlZCBzb3VyY2UgZmlsZSBhcyBhbiBvdXRwdXQuCi0gIGZvciAoY21Tb3VyY2VGaWxlKiBzcmMgOiB0aGlzLT5Tb3VyY2VGaWxlcykgeworICBmb3IgKGNvbnN0IGF1dG8mIHNyYyA6IHRoaXMtPlNvdXJjZUZpbGVzKSB7CiAgICAgLy8gRG9lcyB0aGlzIHNvdXJjZSBmaWxlIGhhdmUgYSBjdXN0b20gY29tbWFuZD8KICAgICBpZiAoc3JjLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKICAgICAgIC8vIERvZXMgdGhlIG91dHB1dCBvZiB0aGUgY3VzdG9tIGNvbW1hbmQgbWF0Y2ggdGhlIHNvdXJjZSBmaWxlIG5hbWU/CiAgICAgICBpZiAoQW55T3V0cHV0TWF0Y2hlcyhuYW1lLCBzcmMtPkdldEN1c3RvbUNvbW1hbmQoKS0+R2V0T3V0cHV0cygpKSkgewogICAgICAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIG91dHB1dC4KLSAgICAgICAgcmV0dXJuIHNyYzsKKyAgICAgICAgcmV0dXJuIHNyYy5nZXQoKTsKICAgICAgIH0KICAgICAgIGlmIChraW5kID09IGNtU291cmNlT3V0cHV0S2luZDo6T3V0cHV0T3JCeXByb2R1Y3QpIHsKICAgICAgICAgaWYgKEFueU91dHB1dE1hdGNoZXMobmFtZSwgc3JjLT5HZXRDdXN0b21Db21tYW5kKCktPkdldEJ5cHJvZHVjdHMoKSkpIHsKICAgICAgICAgICAvLyBEbyBub3QgcmV0dXJuIHRoZSBzb3VyY2UgeWV0IGFzIHRoZXJlIG1pZ2h0IGJlIGEgbWF0Y2hpbmcgb3V0cHV0LgotICAgICAgICAgIGZhbGxiYWNrID0gc3JjOworICAgICAgICAgIGZhbGxiYWNrID0gc3JjLmdldCgpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMjIxMSw4ICsyMTg1LDggQEAKICAgICAgICghby0+c2Vjb25kLlNvdXJjZXMuU291cmNlSXNCeXByb2R1Y3QgfHwKICAgICAgICBraW5kID09IGNtU291cmNlT3V0cHV0S2luZDo6T3V0cHV0T3JCeXByb2R1Y3QpKSB7CiAgICAgLy8gU291cmNlIGZpbGUgY291bGQgYWxzbyBiZSBudWxsIHBvaW50ZXIgZm9yIGV4YW1wbGUgaWYgd2UgZm91bmQgdGhlCi0gICAgLy8gYnlwcm9kdWN0IG9mIGEgdXRpbGl0eSB0YXJnZXQgb3IgYSBQUkVfQlVJTEQsIFBSRV9MSU5LLCBvciBQT1NUX0JVSUxECi0gICAgLy8gY29tbWFuZCBvZiBhIHRhcmdldC4KKyAgICAvLyBieXByb2R1Y3Qgb2YgYSB1dGlsaXR5IHRhcmdldCwgYSBQUkVfQlVJTEQsIFBSRV9MSU5LLCBvciBQT1NUX0JVSUxECisgICAgLy8gY29tbWFuZCBvZiBhIHRhcmdldCwgb3IgYSBub3QgeWV0IGNyZWF0ZWQgY3VzdG9tIGNvbW1hbmQuCiAgICAgcmV0dXJuIG8tPnNlY29uZC5Tb3VyY2VzLlNvdXJjZTsKICAgfQogICByZXR1cm4gbnVsbHB0cjsKQEAgLTIyMjAsMTIgKzIxOTQsMjAgQEAKIAogYm9vbCBjbU1ha2VmaWxlOjpNaWdodEhhdmVDdXN0b21Db21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdAogewotICAvLyBUaGlzIHdpbGwgaGF2ZSB0byBiZSBjaGFuZ2VkIGZvciBkZWxheWluZyBjdXN0b20gY29tbWFuZCBjcmVhdGlvbiwgYmVjYXVzZQotICAvLyBHZXRTb3VyY2VGaWxlV2l0aE91dHB1dCByZXF1aXJlcyB0aGUgY29tbWFuZCB0byBiZSBhbHJlYWR5IGNyZWF0ZWQuCi0gIGlmIChjbVNvdXJjZUZpbGUqIHNmID0gdGhpcy0+R2V0U291cmNlRmlsZVdpdGhPdXRwdXQobmFtZSkpIHsKLSAgICBpZiAoc2YtPkdldEN1c3RvbUNvbW1hbmQoKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICBpZiAodGhpcy0+RGVsYXllZE91dHB1dEZpbGVzSGF2ZUdlbmV4IHx8CisgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQobmFtZSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAvLyBDb3VsZCBiZSBtb3JlIHJlc3RyaWN0aXZlLCBidXQgZm9yIG5vdyB3ZSBhc3N1bWUgdGhhdCB0aGVyZSBjb3VsZCBhbHdheXMKKyAgICAvLyBiZSBhIG1hdGNoIHdoZW4gZ2VuZXJhdG9yIGV4cHJlc3Npb25zIGFyZSBpbnZvbHZlZC4KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICAvLyBBbHNvIHNlZSBMaW5lYXJHZXRTb3VyY2VGaWxlV2l0aE91dHB1dC4KKyAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChuYW1lKSkgeworICAgIHJldHVybiBBbnlPdXRwdXRNYXRjaGVzKG5hbWUsIHRoaXMtPkRlbGF5ZWRPdXRwdXRGaWxlcyk7CisgIH0KKyAgLy8gT3RoZXJ3aXNlIHdlIHVzZSBhbiBlZmZpY2llbnQgbG9va3VwIG1hcC4KKyAgYXV0byBvID0gdGhpcy0+T3V0cHV0VG9Tb3VyY2UuZmluZChuYW1lKTsKKyAgaWYgKG8gIT0gdGhpcy0+T3V0cHV0VG9Tb3VyY2UuZW5kKCkpIHsKKyAgICByZXR1cm4gby0+c2Vjb25kLlNvdXJjZU1pZ2h0QmVPdXRwdXQ7CiAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjI3OCw2ICsyMjYwLDcgQEAKICAgU291cmNlRW50cnkgZW50cnk7CiAgIGVudHJ5LlNvdXJjZXMuU291cmNlID0gc291cmNlOwogICBlbnRyeS5Tb3VyY2VzLlNvdXJjZUlzQnlwcm9kdWN0ID0gYnlwcm9kdWN0OworICBlbnRyeS5Tb3VyY2VNaWdodEJlT3V0cHV0ID0gIWJ5cHJvZHVjdDsKIAogICBhdXRvIHByID0gdGhpcy0+T3V0cHV0VG9Tb3VyY2UuZW1wbGFjZShvdXRwdXQsIGVudHJ5KTsKICAgaWYgKCFwci5zZWNvbmQpIHsKQEAgLTIyODcsNiArMjI3MCw3IEBACiAgICAgICAgIChjdXJyZW50LlNvdXJjZXMuU291cmNlSXNCeXByb2R1Y3QgJiYgIWJ5cHJvZHVjdCkpIHsKICAgICAgIGN1cnJlbnQuU291cmNlcy5Tb3VyY2UgPSBzb3VyY2U7CiAgICAgICBjdXJyZW50LlNvdXJjZXMuU291cmNlSXNCeXByb2R1Y3QgPSBmYWxzZTsKKyAgICAgIGN1cnJlbnQuU291cmNlTWlnaHRCZU91dHB1dCA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIE11bHRpcGxlIGN1c3RvbSBjb21tYW5kcyBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dCBidXQgbWF5CiAgICAgICAvLyBiZSBhdHRhY2hlZCB0byBhIGRpZmZlcmVudCBzb3VyY2UgZmlsZSAoTUFJTl9ERVBFTkRFTkNZKS4KQEAgLTIzOTIsMTEgKzIzNzYsMTEgQEAKIAogY21Tb3VyY2VHcm91cCogY21NYWtlZmlsZTo6R2V0T3JDcmVhdGVTb3VyY2VHcm91cChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKIHsKLSAgY29uc3QgY2hhciogZGVsaW1pdGVyID0gdGhpcy0+R2V0RGVmaW5pdGlvbigiU09VUkNFX0dST1VQX0RFTElNSVRFUiIpOwotICBpZiAoZGVsaW1pdGVyID09IG51bGxwdHIpIHsKLSAgICBkZWxpbWl0ZXIgPSAiXFwiOworICBjb25zdCBjaGFyKiBkZWxpbWl0ZXJzID0gdGhpcy0+R2V0RGVmaW5pdGlvbigiU09VUkNFX0dST1VQX0RFTElNSVRFUiIpOworICBpZiAoZGVsaW1pdGVycyA9PSBudWxscHRyKSB7CisgICAgZGVsaW1pdGVycyA9ICIvXFwiOwogICB9Ci0gIHJldHVybiB0aGlzLT5HZXRPckNyZWF0ZVNvdXJjZUdyb3VwKGNtVG9rZW5pemUobmFtZSwgZGVsaW1pdGVyKSk7CisgIHJldHVybiB0aGlzLT5HZXRPckNyZWF0ZVNvdXJjZUdyb3VwKGNtVG9rZW5pemUobmFtZSwgZGVsaW1pdGVycykpOwogfQogCiAvKioKQEAgLTI0NDQsMTQgKzI0MjgsMTQgQEAKICAgfQogICBzdGQ6Om9zdHJpbmdzdHJlYW0gdzsKIAotICBjb25zdCBjaGFyKiBpbmNsdWRlRGlycyA9IHRoaXMtPkdldFByb3BlcnR5KCJJTkNMVURFX0RJUkVDVE9SSUVTIik7Ci0gIGlmIChtaWdodEV4cGFuZFZhcmlhYmxlc0NNUDAwMTkoaW5jbHVkZURpcnMpKSB7Ci0gICAgc3RkOjpzdHJpbmcgZGlycyA9IGluY2x1ZGVEaXJzOworICBjbVByb3AgaW5jbHVkZURpcnMgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU5DTFVERV9ESVJFQ1RPUklFUyIpOworICBpZiAoaW5jbHVkZURpcnMgJiYgbWlnaHRFeHBhbmRWYXJpYWJsZXNDTVAwMDE5KGluY2x1ZGVEaXJzLT5jX3N0cigpKSkgeworICAgIHN0ZDo6c3RyaW5nIGRpcnMgPSAqaW5jbHVkZURpcnM7CiAgICAgdGhpcy0+RXhwYW5kVmFyaWFibGVzSW5TdHJpbmcoZGlycywgdHJ1ZSwgdHJ1ZSk7Ci0gICAgaWYgKHBvbCA9PSBjbVBvbGljaWVzOjpXQVJOICYmIGRpcnMgIT0gaW5jbHVkZURpcnMpIHsKKyAgICBpZiAocG9sID09IGNtUG9saWNpZXM6OldBUk4gJiYgZGlycyAhPSAqaW5jbHVkZURpcnMpIHsKICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgICAgIHcgPDwgIkV2YWx1YXRlZCBkaXJlY3RvcnkgSU5DTFVERV9ESVJFQ1RPUklFU1xuIgotICAgICAgICA8PCAiICAiIDw8IGluY2x1ZGVEaXJzIDw8ICJcbiIKKyAgICAgICAgPDwgIiAgIiA8PCAqaW5jbHVkZURpcnMgPDwgIlxuIgogICAgICAgICA8PCAiYXNcbiIKICAgICAgICAgPDwgIiAgIiA8PCBkaXJzIDw8ICJcbiI7CiAgICAgICAvKiBjbGFuZy1mb3JtYXQgb24gKi8KQEAgLTI0NjcsMjUgKzI0NTEsMjUgQEAKICAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICBpbmNsdWRlRGlycyA9IHQuR2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKLSAgICBpZiAobWlnaHRFeHBhbmRWYXJpYWJsZXNDTVAwMDE5KGluY2x1ZGVEaXJzKSkgewotICAgICAgc3RkOjpzdHJpbmcgZGlycyA9IGluY2x1ZGVEaXJzOworICAgIGlmIChpbmNsdWRlRGlycyAmJiBtaWdodEV4cGFuZFZhcmlhYmxlc0NNUDAwMTkoaW5jbHVkZURpcnMtPmNfc3RyKCkpKSB7CisgICAgICBzdGQ6OnN0cmluZyBkaXJzID0gKmluY2x1ZGVEaXJzOwogICAgICAgdGhpcy0+RXhwYW5kVmFyaWFibGVzSW5TdHJpbmcoZGlycywgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICBpZiAocG9sID09IGNtUG9saWNpZXM6OldBUk4gJiYgZGlycyAhPSBpbmNsdWRlRGlycykgeworICAgICAgaWYgKHBvbCA9PSBjbVBvbGljaWVzOjpXQVJOICYmIGRpcnMgIT0gKmluY2x1ZGVEaXJzKSB7CiAgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KICAgICAgICAgdyA8PCAiRXZhbHVhdGVkIHRhcmdldCAiIDw8IHQuR2V0TmFtZSgpIDw8ICIgSU5DTFVERV9ESVJFQ1RPUklFU1xuIgotICAgICAgICAgIDw8ICIgICIgPDwgaW5jbHVkZURpcnMgPDwgIlxuIgorICAgICAgICAgIDw8ICIgICIgPDwgKmluY2x1ZGVEaXJzIDw8ICJcbiIKICAgICAgICAgICA8PCAiYXNcbiIKICAgICAgICAgICA8PCAiICAiIDw8IGRpcnMgPDwgIlxuIjsKICAgICAgICAgLyogY2xhbmctZm9ybWF0IG9uICovCiAgICAgICB9Ci0gICAgICB0LlNldFByb3BlcnR5KCJJTkNMVURFX0RJUkVDVE9SSUVTIiwgZGlycy5jX3N0cigpKTsKKyAgICAgIHQuU2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiLCBkaXJzKTsKICAgICB9CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogbGlua0RpcnNQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoIkxJTktfRElSRUNUT1JJRVMiKSkgewotICAgIGlmIChtaWdodEV4cGFuZFZhcmlhYmxlc0NNUDAwMTkobGlua0RpcnNQcm9wKSkgewotICAgICAgc3RkOjpzdHJpbmcgZCA9IGxpbmtEaXJzUHJvcDsKLSAgICAgIHN0ZDo6c3RyaW5nIG9yaWcgPSBsaW5rRGlyc1Byb3A7CisgIGlmIChjbVByb3AgbGlua0RpcnNQcm9wID0gdGhpcy0+R2V0UHJvcGVydHkoIkxJTktfRElSRUNUT1JJRVMiKSkgeworICAgIGlmIChtaWdodEV4cGFuZFZhcmlhYmxlc0NNUDAwMTkobGlua0RpcnNQcm9wLT5jX3N0cigpKSkgeworICAgICAgc3RkOjpzdHJpbmcgZCA9ICpsaW5rRGlyc1Byb3A7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvcmlnID0gZDsKICAgICAgIHRoaXMtPkV4cGFuZFZhcmlhYmxlc0luU3RyaW5nKGQsIHRydWUsIHRydWUpOwogICAgICAgaWYgKHBvbCA9PSBjbVBvbGljaWVzOjpXQVJOICYmIGQgIT0gb3JpZykgewogICAgICAgICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCkBAIC0yNDk4LDIwICsyNDgyLDE3IEBACiAgICAgfQogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGxpbmtMaWJzUHJvcCA9IHRoaXMtPkdldFByb3BlcnR5KCJMSU5LX0xJQlJBUklFUyIpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpbmtMaWJzID0gY21FeHBhbmRlZExpc3QobGlua0xpYnNQcm9wKTsKKyAgaWYgKGNtUHJvcCBsaW5rTGlic1Byb3AgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiKSkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rTGlicyA9IGNtRXhwYW5kZWRMaXN0KCpsaW5rTGlic1Byb3ApOwogCiAgICAgZm9yIChhdXRvIGwgPSBsaW5rTGlicy5iZWdpbigpOyBsICE9IGxpbmtMaWJzLmVuZCgpOyArK2wpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGxpYk5hbWUgPSAqbDsKLSAgICAgIGlmIChsaWJOYW1lID09ICJvcHRpbWl6ZWQiKSB7Ci0gICAgICAgICsrbDsKLSAgICAgICAgbGliTmFtZSA9ICpsOwotICAgICAgfSBlbHNlIGlmIChsaWJOYW1lID09ICJkZWJ1ZyIpIHsKKyAgICAgIGlmIChsaWJOYW1lID09ICJvcHRpbWl6ZWQiX3MgfHwgbGliTmFtZSA9PSAiZGVidWciX3MpIHsKICAgICAgICAgKytsOwogICAgICAgICBsaWJOYW1lID0gKmw7CiAgICAgICB9CiAgICAgICBpZiAobWlnaHRFeHBhbmRWYXJpYWJsZXNDTVAwMDE5KGxpYk5hbWUuY19zdHIoKSkpIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgb3JpZyA9IGxpYk5hbWU7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG9yaWcgPSBsaWJOYW1lOwogICAgICAgICB0aGlzLT5FeHBhbmRWYXJpYWJsZXNJblN0cmluZyhsaWJOYW1lLCB0cnVlLCB0cnVlKTsKICAgICAgICAgaWYgKHBvbCA9PSBjbVBvbGljaWVzOjpXQVJOICYmIGxpYk5hbWUgIT0gb3JpZykgewogICAgICAgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KQEAgLTI1NDAsOCArMjUyMSw3IEBACiAKIGJvb2wgY21NYWtlZmlsZTo6SXNPbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgY29uc3QgY2hhciogdmFsdWUgPSB0aGlzLT5HZXREZWZpbml0aW9uKG5hbWUpOwotICByZXR1cm4gY21Jc09uKHZhbHVlKTsKKyAgcmV0dXJuIGNtSXNPbih0aGlzLT5HZXREZWYobmFtZSkpOwogfQogCiBib29sIGNtTWFrZWZpbGU6OklzU2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMjYxNSw3ICsyNTk1LDcgQEAKICAgfTsKIAogICBmb3IgKGF1dG8gY29uc3QmIGVudHJ5IDogc2RrRGF0YWJhc2UpIHsKLSAgICBpZiAoc2RrUm9vdC5maW5kKGVudHJ5Lm5hbWUpID09IDAgfHwKKyAgICBpZiAoY21IYXNQcmVmaXgoc2RrUm9vdCwgZW50cnkubmFtZSkgfHwKICAgICAgICAgc2RrUm9vdC5maW5kKHN0ZDo6c3RyaW5nKCIvIikgKyBlbnRyeS5uYW1lKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgcmV0dXJuIGVudHJ5LnNkazsKICAgICB9CkBAIC0yNjczLDcgKzI2NTMsNyBAQAogCiBib29sIGNtTWFrZWZpbGU6OklzRGVmaW5pdGlvblNldChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcqIGRlZiA9IHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGVmaW5pdGlvbihuYW1lKTsKKyAgY21Qcm9wIGRlZiA9IHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGVmaW5pdGlvbihuYW1lKTsKICAgaWYgKCFkZWYpIHsKICAgICBkZWYgPSB0aGlzLT5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUobmFtZSk7CiAgIH0KQEAgLTI2OTAsNyArMjY3MCw3IEBACiAKIGNvbnN0IHN0ZDo6c3RyaW5nKiBjbU1ha2VmaWxlOjpHZXREZWYoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBkZWYgPSB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERlZmluaXRpb24obmFtZSk7CisgIGNtUHJvcCBkZWYgPSB0aGlzLT5TdGF0ZVNuYXBzaG90LkdldERlZmluaXRpb24obmFtZSk7CiAgIGlmICghZGVmKSB7CiAgICAgZGVmID0gdGhpcy0+R2V0U3RhdGUoKS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKG5hbWUpOwogICB9CkBAIC0yNzM2LDEwICsyNzE2LDIyIEBACiAgIHJldHVybiAqZGVmOwogfQogCitib29sIGNtTWFrZWZpbGU6OkdldERlZkV4cGFuZExpc3QoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbXB0eUFyZ3MpIGNvbnN0Cit7CisgIGNtUHJvcCBkZWYgPSB0aGlzLT5HZXREZWYobmFtZSk7CisgIGlmICghZGVmKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGNtRXhwYW5kTGlzdCgqZGVmLCBvdXQsIGVtcHR5QXJncyk7CisgIHJldHVybiB0cnVlOworfQorCiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21NYWtlZmlsZTo6R2V0RGVmaW5pdGlvbnMoKSBjb25zdAogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVzID0gdGhpcy0+U3RhdGVTbmFwc2hvdC5DbG9zdXJlS2V5cygpOwotICBjbUFwcGVuZChyZXMsIHRoaXMtPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlLZXlzKCkpOworICBjbTo6YXBwZW5kKHJlcywgdGhpcy0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeUtleXMoKSk7CiAgIHN0ZDo6c29ydChyZXMuYmVnaW4oKSwgcmVzLmVuZCgpKTsKICAgcmV0dXJuIHJlczsKIH0KQEAgLTMwMjQsNyArMzAxNiw3IEBACiAgICAgICAgICAgb3BlbnN0YWNrLnBvcF9iYWNrKCk7CiAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsYXN0LCBpbiAtIGxhc3QpOwogICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsb29rdXAgPSByZXN1bHQuc3Vic3RyKHZhci5sb2MpOwotICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgICBjbVByb3AgdmFsdWUgPSBudWxscHRyOwogICAgICAgICAgIHN0ZDo6c3RyaW5nIHZhcnJlc3VsdDsKICAgICAgICAgICBzdGQ6OnN0cmluZyBzdmFsdWU7CiAgICAgICAgICAgc3dpdGNoICh2YXIuZG9tYWluKSB7CkBAIC0zMDMyLDEyICszMDI0LDEyIEBACiAgICAgICAgICAgICAgIGlmIChmaWxlbmFtZSAmJiBsb29rdXAgPT0gbGluZVZhcikgewogICAgICAgICAgICAgICAgIHZhcnJlc3VsdCA9IHN0ZDo6dG9fc3RyaW5nKGxpbmUpOwogICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy0+R2V0RGVmaW5pdGlvbihsb29rdXApOworICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy0+R2V0RGVmKGxvb2t1cCk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEVOVklST05NRU5UOgogICAgICAgICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RW52KGxvb2t1cCwgc3ZhbHVlKSkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gc3ZhbHVlLmNfc3RyKCk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSAmc3ZhbHVlOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDQUNIRToKQEAgLTMwNDcsOSArMzAzOSw5IEBACiAgICAgICAgICAgLy8gR2V0IHRoZSBzdHJpbmcgd2UncmUgbWVhbnQgdG8gYXBwZW5kIHRvLgogICAgICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgaWYgKGVzY2FwZVF1b3RlcykgewotICAgICAgICAgICAgICB2YXJyZXN1bHQgPSBjbUVzY2FwZVF1b3Rlcyh2YWx1ZSk7CisgICAgICAgICAgICAgIHZhcnJlc3VsdCA9IGNtRXNjYXBlUXVvdGVzKCp2YWx1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICB2YXJyZXN1bHQgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgdmFycmVzdWx0ID0gKnZhbHVlOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMtPlN1cHByZXNzU2lkZUVmZmVjdHMpIHsKICAgICAgICAgICAgIHRoaXMtPk1heWJlV2FyblVuaW5pdGlhbGl6ZWQobG9va3VwLCBmaWxlbmFtZSk7CkBAIC0zMjYwLDI4ICszMjUyLDI4IEBACiAgIH0KIH0KIAotc3RkOjpzdHJpbmcgY21NYWtlZmlsZTo6R2V0Q29uZmlndXJhdGlvbnMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb25maWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaW5nbGVDb25maWcpIGNvbnN0CitzdGQ6OnN0cmluZyBjbU1ha2VmaWxlOjpHZXREZWZhdWx0Q29uZmlndXJhdGlvbigpIGNvbnN0CiB7CiAgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ1R5cGVzID0KLSAgICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKCJDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTIikpIHsKLSAgICAgIGNtRXhwYW5kTGlzdChjb25maWdUeXBlcywgY29uZmlncyk7Ci0gICAgfQotICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gc3RkOjpzdHJpbmd7fTsKICAgfQotICBjb25zdCBzdGQ6OnN0cmluZyYgYnVpbGRUeXBlID0gdGhpcy0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKTsKLSAgaWYgKHNpbmdsZUNvbmZpZyAmJiAhYnVpbGRUeXBlLmVtcHR5KCkpIHsKLSAgICBjb25maWdzLnB1c2hfYmFjayhidWlsZFR5cGUpOwotICB9Ci0gIHJldHVybiBidWlsZFR5cGU7CisgIHJldHVybiB0aGlzLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQlVJTERfVFlQRSIpOwogfQogCi1zdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21NYWtlZmlsZTo6R2V0R2VuZXJhdG9yQ29uZmlncygpIGNvbnN0CitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21NYWtlZmlsZTo6R2V0R2VuZXJhdG9yQ29uZmlncygKKyAgR2VuZXJhdG9yQ29uZmlnUXVlcnkgbW9kZSkgY29uc3QKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7Ci0gIEdldENvbmZpZ3VyYXRpb25zKGNvbmZpZ3MpOwotICBpZiAoY29uZmlncy5lbXB0eSgpKSB7CisgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SXNNdWx0aUNvbmZpZygpIHx8CisgICAgICBtb2RlID09IGNtTWFrZWZpbGU6Ok9ubHlNdWx0aUNvbmZpZykgeworICAgIHRoaXMtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMiLCBjb25maWdzKTsKKyAgfSBlbHNlIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgYnVpbGRUeXBlID0gdGhpcy0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKTsKKyAgICBpZiAoIWJ1aWxkVHlwZS5lbXB0eSgpKSB7CisgICAgICBjb25maWdzLmVtcGxhY2VfYmFjayhidWlsZFR5cGUpOworICAgIH0KKyAgfQorICBpZiAobW9kZSA9PSBjbU1ha2VmaWxlOjpJbmNsdWRlRW1wdHlDb25maWcgJiYgY29uZmlncy5lbXB0eSgpKSB7CiAgICAgY29uZmlncy5lbXBsYWNlX2JhY2soKTsKICAgfQogICByZXR1cm4gY29uZmlnczsKQEAgLTM1MTQsMjQgKzM1MDYsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kIGtpbmQpCiB7Ci0gIGNtU291cmNlRmlsZSogc2YgPSBuZXcgY21Tb3VyY2VGaWxlKHRoaXMsIHNvdXJjZU5hbWUsIGtpbmQpOworICBhdXRvIHNmID0gY206Om1ha2VfdW5pcXVlPGNtU291cmNlRmlsZT4odGhpcywgc291cmNlTmFtZSwga2luZCk7CiAgIGlmIChnZW5lcmF0ZWQpIHsKICAgICBzZi0+U2V0UHJvcGVydHkoIkdFTkVSQVRFRCIsICIxIik7CiAgIH0KLSAgdGhpcy0+U291cmNlRmlsZXMucHVzaF9iYWNrKHNmKTsKIAogICBhdXRvIG5hbWUgPQogICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+U3RyaXBFeHRlbnNpb24oc2YtPkdldExvY2F0aW9uKCkuR2V0TmFtZSgpKTsKICNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0FQUExFX18pCiAgIG5hbWUgPSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UobmFtZSk7CiAjZW5kaWYKLSAgdGhpcy0+U291cmNlRmlsZVNlYXJjaEluZGV4W25hbWVdLnB1c2hfYmFjayhzZik7CisgIHRoaXMtPlNvdXJjZUZpbGVTZWFyY2hJbmRleFtuYW1lXS5wdXNoX2JhY2soc2YuZ2V0KCkpOwogICAvLyBmb3IgIktub3duIiBwYXRocyBhZGQgZGlyZWN0IGxvb2t1cCAodXNlZCBmb3IgZmFzdGVyIGxvb2t1cCBpbiBHZXRTb3VyY2UpCiAgIGlmIChraW5kID09IGNtU291cmNlRmlsZUxvY2F0aW9uS2luZDo6S25vd24pIHsKLSAgICB0aGlzLT5Lbm93bkZpbGVTZWFyY2hJbmRleFtzb3VyY2VOYW1lXSA9IHNmOworICAgIHRoaXMtPktub3duRmlsZVNlYXJjaEluZGV4W3NvdXJjZU5hbWVdID0gc2YuZ2V0KCk7CiAgIH0KIAotICByZXR1cm4gc2Y7CisgIHRoaXMtPlNvdXJjZUZpbGVzLnB1c2hfYmFjayhzdGQ6Om1vdmUoc2YpKTsKKworICByZXR1cm4gdGhpcy0+U291cmNlRmlsZXMuYmFjaygpLmdldCgpOwogfQogCiBjbVNvdXJjZUZpbGUqIGNtTWFrZWZpbGU6OkdldE9yQ3JlYXRlU291cmNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VOYW1lLApAQCAtMzU1MywxMSArMzU0Niw0MSBAQAogICByZXR1cm4gc2Y7CiB9CiAKLXZvaWQgY21NYWtlZmlsZTo6Q3JlYXRlR2VuZXJhdGVkU291cmNlcygKK3ZvaWQgY21NYWtlZmlsZTo6Q3JlYXRlR2VuZXJhdGVkT3V0cHV0cygKICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzKQogewotICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQgOiBvdXRwdXRzKSB7Ci0gICAgdGhpcy0+R2V0T3JDcmVhdGVHZW5lcmF0ZWRTb3VyY2Uob3V0cHV0KTsKKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbyA6IG91dHB1dHMpIHsKKyAgICBpZiAoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKG8pID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICB0aGlzLT5HZXRPckNyZWF0ZUdlbmVyYXRlZFNvdXJjZShvKTsKKyAgICAgIHRoaXMtPkFkZERlbGF5ZWRPdXRwdXQobyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPkRlbGF5ZWRPdXRwdXRGaWxlc0hhdmVHZW5leCA9IHRydWU7CisgICAgfQorICB9Cit9CisKK3ZvaWQgY21NYWtlZmlsZTo6Q3JlYXRlR2VuZXJhdGVkQnlwcm9kdWN0cygKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzKQoreworICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBvIDogYnlwcm9kdWN0cykgeworICAgIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQobykgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIHRoaXMtPkdldE9yQ3JlYXRlR2VuZXJhdGVkU291cmNlKG8pOworICAgIH0KKyAgfQorfQorCit2b2lkIGNtTWFrZWZpbGU6OkFkZERlbGF5ZWRPdXRwdXQoc3RkOjpzdHJpbmcgY29uc3QmIG91dHB1dCkKK3sKKyAgLy8gTm90ZSB0aGF0IHRoaXMgdmVjdG9yIG1pZ2h0IGNvbnRhaW4gdGhlIG91dHB1dCBuYW1lcyBpbiBhIGRpZmZlcmVudCBvcmRlcgorICAvLyB0aGFuIGluIHNvdXJjZSBmaWxlIGl0ZXJhdGlvbiBvcmRlci4KKyAgdGhpcy0+RGVsYXllZE91dHB1dEZpbGVzLnB1c2hfYmFjayhvdXRwdXQpOworCisgIFNvdXJjZUVudHJ5IGVudHJ5OworICBlbnRyeS5Tb3VyY2VNaWdodEJlT3V0cHV0ID0gdHJ1ZTsKKworICBhdXRvIHByID0gdGhpcy0+T3V0cHV0VG9Tb3VyY2UuZW1wbGFjZShvdXRwdXQsIGVudHJ5KTsKKyAgaWYgKCFwci5zZWNvbmQpIHsKKyAgICBwci5maXJzdC0+c2Vjb25kLlNvdXJjZU1pZ2h0QmVPdXRwdXQgPSB0cnVlOwogICB9CiB9CiAKQEAgLTM2MzAsOCArMzY1Myw3IEBACiAgIC8vIGJlIHJ1biB0aGF0IHdheSBidXQgdGhlIGNtYWtlIG9iamVjdCByZXF1aXJlcyBhIHZhaWxpZCBwYXRoCiAgIGNtYWtlIGNtKGNtYWtlOjpSb2xlUHJvamVjdCwgY21TdGF0ZTo6UHJvamVjdCk7CiAgIGNtLlNldElzSW5UcnlDb21waWxlKHRydWUpOwotICBjbUdsb2JhbEdlbmVyYXRvciogZ2cgPQotICAgIGNtLkNyZWF0ZUdsb2JhbEdlbmVyYXRvcih0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0TmFtZSgpKTsKKyAgYXV0byBnZyA9IGNtLkNyZWF0ZUdsb2JhbEdlbmVyYXRvcih0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0TmFtZSgpKTsKICAgaWYgKCFnZykgewogICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6SU5URVJOQUxfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICAgICJHbG9iYWwgZ2VuZXJhdG9yICciICsKQEAgLTM2NDIsNyArMzY2NCw3IEBACiAgICAgcmV0dXJuIDE7CiAgIH0KICAgZ2ctPlJlY3Vyc2lvbkRlcHRoID0gdGhpcy0+UmVjdXJzaW9uRGVwdGg7Ci0gIGNtLlNldEdsb2JhbEdlbmVyYXRvcihnZyk7CisgIGNtLlNldEdsb2JhbEdlbmVyYXRvcihzdGQ6Om1vdmUoZ2cpKTsKIAogICAvLyBkbyBhIGNvbmZpZ3VyZQogICBjbS5TZXRIb21lRGlyZWN0b3J5KHNyY2Rpcik7CkBAIC0zNjUxLDcgKzM2NzMsNyBAQAogICBjbS5TZXRHZW5lcmF0b3JQbGF0Zm9ybSh0aGlzLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNIikpOwogICBjbS5TZXRHZW5lcmF0b3JUb29sc2V0KHRoaXMtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCIpKTsKICAgY20uTG9hZENhY2hlKCk7Ci0gIGlmICghZ2ctPklzTXVsdGlDb25maWcoKSkgeworICBpZiAoIWNtLkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc011bHRpQ29uZmlnKCkpIHsKICAgICBpZiAoY29uc3QgY2hhciogY29uZmlnID0KICAgICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKCJDTUFLRV9UUllfQ09NUElMRV9DT05GSUdVUkFUSU9OIikpIHsKICAgICAgIC8vIFRlbGwgdGhlIHNpbmdsZS1jb25maWd1cmF0aW9uIGdlbmVyYXRvciB3aGljaCBvbmUgdG8gdXNlLgpAQCAtMzY3MSw3ICszNjkzLDcgQEAKICAgaWYgKGNtYWtlQXJncykgewogICAgIC8vIEZJWE1FOiBXb3JrYXJvdW5kIHRvIGlnbm9yZSB1bnVzZWQgQ0xJIHZhcmlhYmxlcyBpbiB0cnktY29tcGlsZS4KICAgICAvLwotICAgIC8vIElkZWFsbHkgd2Ugc2hvdWxkIHVzZSBTZXRBcmdzIHRvIGhvbm9yIG9wdGlvbnMgbGlrZSAtLXdhcm4tdW51c2VkLXZhcnMuCisgICAgLy8gSWRlYWxseSB3ZSBzaG91bGQgdXNlIFNldEFyZ3MgZm9yIG9wdGlvbnMgbGlrZSAtLW5vLXdhcm4tdW51c2VkLWNsaS4KICAgICAvLyBIb3dldmVyLCB0aGVyZSBpcyBhIHN1YnRsZSBwcm9ibGVtIHdoZW4gY2VydGFpbiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0bwogICAgIC8vIGEgbWFjcm8gd3JhcHBpbmcgYXJvdW5kIHRyeV9jb21waWxlIG9yIHRyeV9ydW4gdGhhdCBkb2VzIG5vdCBlc2NhcGUKICAgICAvLyBzZW1pY29sb25zIGluIGl0cyBwYXJhbWV0ZXJzIGJ1dCBqdXN0IHBhc3NlcyAke0FSR1Z9IG9yICR7QVJHTn0uICBJbgpAQCAtMzY5MCwxNCArMzcxMiwxNSBAQAogICAgIC8vIHRoZSB2YWx1ZSBWQVI9YSBpcyBzdWZmaWNpZW50IGZvciB0aGUgdHJ5X2NvbXBpbGUgb3IgdHJ5X3J1biB0byBnZXQgdGhlCiAgICAgLy8gY29ycmVjdCByZXN1bHQuICBDYWxsaW5nIFNldEFyZ3MgaGVyZSB3b3VsZCBicmVhayBzdWNoIHByb2plY3RzIHRoYXQKICAgICAvLyBwcmV2aW91c2x5IGJ1aWx0LiAgSW5zdGVhZCB3ZSB3b3JrIGFyb3VuZCB0aGUgaXNzdWUgYnkgbmV2ZXIgcmVwb3J0aW5nCi0gICAgLy8gdW51c2VkIGFyZ3VtZW50cyBhbmQgaWdub3Jpbmcgb3B0aW9ucyBzdWNoIGFzIC0td2Fybi11bnVzZWQtdmFycy4KKyAgICAvLyB1bnVzZWQgYXJndW1lbnRzIGFuZCBpZ25vcmluZyBvcHRpb25zIHN1Y2ggYXMgLS1uby13YXJuLXVudXNlZC1jbGkuCiAgICAgY20uU2V0V2FyblVudXNlZENsaShmYWxzZSk7CiAgICAgLy8gY20uU2V0QXJncygqY21ha2VBcmdzLCB0cnVlKTsKIAogICAgIGNtLlNldENhY2hlQXJncygqY21ha2VBcmdzKTsKICAgfQogICAvLyB0byBzYXZlIHRpbWUgd2UgcGFzcyB0aGUgRW5hYmxlTGFuZ3VhZ2UgaW5mbyBkaXJlY3RseQotICBnZy0+RW5hYmxlTGFuZ3VhZ2VzRnJvbUdlbmVyYXRvcih0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKSwgdGhpcyk7CisgIGNtLkdldEdsb2JhbEdlbmVyYXRvcigpLT5FbmFibGVMYW5ndWFnZXNGcm9tR2VuZXJhdG9yKAorICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLCB0aGlzKTsKICAgaWYgKHRoaXMtPklzT24oIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9XQVJOSU5HUyIpKSB7CiAgICAgY20uQWRkQ2FjaGVFbnRyeSgiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX1dBUk5JTkdTIiwgIlRSVUUiLCAiIiwKICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOwpAQCAtMzc3Nyw3ICszODAwLDggQEAKIH0KIAogc3RkOjpzdHJpbmcgY21NYWtlZmlsZTo6R2V0TW9kdWxlc0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgc3lzdGVtKSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgc3lzdGVtLCBib29sIGRlYnVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGRlYnVnQnVmZmVyKSBjb25zdAogewogICBzdGQ6OnN0cmluZyByZXN1bHQ7CiAKQEAgLTM4MDgsNiArMzgzMiw5IEBACiAgICAgICAgIG1vZHVsZUluQ01ha2VNb2R1bGVQYXRoID0gaXRlbXBsOwogICAgICAgICBicmVhazsKICAgICAgIH0KKyAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICBkZWJ1Z0J1ZmZlciA9IGNtU3RyQ2F0KGRlYnVnQnVmZmVyLCAiICAiLCBpdGVtcGwsICJcbiIpOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0zODE2LDYgKzM4NDMsOSBAQAogICAgIGNtU3RyQ2F0KGNtU3lzdGVtVG9vbHM6OkdldENNYWtlUm9vdCgpLCAiL01vZHVsZXMvIiwgZmlsZW5hbWUpOwogICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhtb2R1bGVJbkNNYWtlUm9vdCk7CiAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhtb2R1bGVJbkNNYWtlUm9vdCkpIHsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGRlYnVnQnVmZmVyID0gY21TdHJDYXQoZGVidWdCdWZmZXIsICIgICIsIG1vZHVsZUluQ01ha2VSb290LCAiXG4iKTsKKyAgICB9CiAgICAgbW9kdWxlSW5DTWFrZVJvb3QuY2xlYXIoKTsKICAgfQogCkBAIC0zOTM2LDYgKzM5NjYsNyBAQAogaW50IGNtTWFrZWZpbGU6OkNvbmZpZ3VyZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGluZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvdXRmaWxlLCBib29sIGNvcHlvbmx5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdE9ubHksIGJvb2wgZXNjYXBlUXVvdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2Vfc291cmNlX3Blcm1pc3Npb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21OZXdMaW5lU3R5bGUgbmV3TGluZSkKIHsKICAgaW50IHJlcyA9IDE7CkBAIC0zOTU5LDcgKzM5OTAsMTMgQEAKICAgdGhpcy0+QWRkQ01ha2VPdXRwdXRGaWxlKHNvdXRmaWxlKTsKIAogICBtb2RlX3QgcGVybSA9IDA7Ci0gIGNtU3lzdGVtVG9vbHM6OkdldFBlcm1pc3Npb25zKHNpbmZpbGUsIHBlcm0pOworICBpZiAoIXVzZV9zb3VyY2VfcGVybWlzc2lvbnMpIHsKKyAgICBwZXJtID0gcGVybSB8IG1vZGVfb3duZXJfcmVhZCB8IG1vZGVfb3duZXJfd3JpdGUgfCBtb2RlX2dyb3VwX3JlYWQgfAorICAgICAgbW9kZV93b3JsZF9yZWFkOworICB9IGVsc2UgeworICAgIGNtU3lzdGVtVG9vbHM6OkdldFBlcm1pc3Npb25zKHNpbmZpbGUsIHBlcm0pOworICB9CisKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBzb3V0ZmlsZS5yZmluZCgnLycpOwogICBpZiAocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IHNvdXRmaWxlLnN1YnN0cigwLCBwb3MpOwpAQCAtMzk2OCw2ICs0MDA1LDEzIEBACiAKICAgaWYgKGNvcHlvbmx5KSB7CiAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpDb3B5RmlsZUlmRGlmZmVyZW50KHNpbmZpbGUsIHNvdXRmaWxlKSkgeworICAgICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRMYXN0U3lzdGVtRXJyb3IoKSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpTZXRQZXJtaXNzaW9ucyhzb3V0ZmlsZSwgcGVybSkpIHsKKyAgICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0TGFzdFN5c3RlbUVycm9yKCkpOwogICAgICAgcmV0dXJuIDA7CiAgICAgfQogICB9IGVsc2UgewpAQCAtNDAxOCw5ICs0MDYyLDE1IEBACiAgICAgZmluLmNsb3NlKCk7CiAgICAgZm91dC5jbG9zZSgpOwogICAgIGlmICghY21TeXN0ZW1Ub29sczo6Q29weUZpbGVJZkRpZmZlcmVudCh0ZW1wT3V0cHV0RmlsZSwgc291dGZpbGUpKSB7CisgICAgICB0aGlzLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldExhc3RTeXN0ZW1FcnJvcigpKTsKICAgICAgIHJlcyA9IDA7CiAgICAgfSBlbHNlIHsKLSAgICAgIGNtU3lzdGVtVG9vbHM6OlNldFBlcm1pc3Npb25zKHNvdXRmaWxlLCBwZXJtKTsKKyAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6U2V0UGVybWlzc2lvbnMoc291dGZpbGUsIHBlcm0pKSB7CisgICAgICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRMYXN0U3lzdGVtRXJyb3IoKSk7CisgICAgICAgIHJlcyA9IDA7CisgICAgICB9CiAgICAgfQogICAgIGNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUodGVtcE91dHB1dEZpbGUpOwogICB9CkBAIC00MDI5LDE5ICs0MDc5LDE3IEBACiAKIHZvaWQgY21NYWtlZmlsZTo6U2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlKQogewotICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSB0aGlzLT5HZXRCYWNrdHJhY2UoKTsKLSAgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5TZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSwgbGZidCk7CisgIHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuU2V0UHJvcGVydHkocHJvcCwgdmFsdWUsIHRoaXMtPkJhY2t0cmFjZSk7CiB9CiAKLXZvaWQgY21NYWtlZmlsZTo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nKQordm9pZCBjbU1ha2VmaWxlOjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBib29sIGFzU3RyaW5nKQogewotICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSB0aGlzLT5HZXRCYWNrdHJhY2UoKTsKICAgdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5BcHBlbmRQcm9wZXJ0eShwcm9wLCB2YWx1ZSwgYXNTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGZidCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QmFja3RyYWNlKTsKIH0KIAotY29uc3QgY2hhciogY21NYWtlZmlsZTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CitjbVByb3AgY21NYWtlZmlsZTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CiB7CiAgIC8vIENoZWNrIGZvciBjb21wdXRlZCBwcm9wZXJ0aWVzLgogICBzdGF0aWMgc3RkOjpzdHJpbmcgb3V0cHV0OwpAQCAtNDA1NCwxMyArNDEwMiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhaXIuZmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgb3V0cHV0ID0gY21Kb2luKGtleXMsICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAKICAgcmV0dXJuIHRoaXMtPlN0YXRlU25hcHNob3QuR2V0RGlyZWN0b3J5KCkuR2V0UHJvcGVydHkocHJvcCk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtTWFrZWZpbGU6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBib29sIGNoYWluKSBjb25zdAorY21Qcm9wIGNtTWFrZWZpbGU6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBib29sIGNoYWluKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+U3RhdGVTbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5HZXRQcm9wZXJ0eShwcm9wLCBjaGFpbik7CiB9CkBAIC00MDkwLDkgKzQxMzgsMTAgQEAKICAgaWYgKHRlc3QpIHsKICAgICByZXR1cm4gdGVzdDsKICAgfQotICB0ZXN0ID0gbmV3IGNtVGVzdCh0aGlzKTsKLSAgdGVzdC0+U2V0TmFtZSh0ZXN0TmFtZSk7Ci0gIHRoaXMtPlRlc3RzW3Rlc3ROYW1lXSA9IHRlc3Q7CisgIGF1dG8gbmV3VGVzdCA9IGNtOjptYWtlX3VuaXF1ZTxjbVRlc3Q+KHRoaXMpOworICB0ZXN0ID0gbmV3VGVzdC5nZXQoKTsKKyAgbmV3VGVzdC0+U2V0TmFtZSh0ZXN0TmFtZSk7CisgIHRoaXMtPlRlc3RzW3Rlc3ROYW1lXSA9IHN0ZDo6bW92ZShuZXdUZXN0KTsKICAgcmV0dXJuIHRlc3Q7CiB9CiAKQEAgLTQxMDAsNyArNDE0OSw3IEBACiB7CiAgIGF1dG8gbWkgPSB0aGlzLT5UZXN0cy5maW5kKHRlc3ROYW1lKTsKICAgaWYgKG1pICE9IHRoaXMtPlRlc3RzLmVuZCgpKSB7Ci0gICAgcmV0dXJuIG1pLT5zZWNvbmQ7CisgICAgcmV0dXJuIG1pLT5zZWNvbmQuZ2V0KCk7CiAgIH0KICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC00MTA4LDcgKzQxNTcsNyBAQAogdm9pZCBjbU1ha2VmaWxlOjpHZXRUZXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxjbVRlc3QqPiYgdGVzdHMpCiB7Ci0gIGZvciAoYXV0byBnZW5lcmF0b3IgOiB0aGlzLT5HZXRUZXN0R2VuZXJhdG9ycygpKSB7CisgIGZvciAoY29uc3QgYXV0byYgZ2VuZXJhdG9yIDogdGhpcy0+R2V0VGVzdEdlbmVyYXRvcnMoKSkgewogICAgIGlmIChnZW5lcmF0b3ItPlRlc3RzRm9yQ29uZmlnKGNvbmZpZykpIHsKICAgICAgIHRlc3RzLnB1c2hfYmFjayhnZW5lcmF0b3ItPkdldFRlc3QoKSk7CiAgICAgfQpAQCAtNDExOCw4ICs0MTY3LDggQEAKIHZvaWQgY21NYWtlZmlsZTo6QWRkQ01ha2VEZXBlbmRGaWxlc0Zyb21Vc2VyKCkKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcHM7Ci0gIGlmIChjb25zdCBjaGFyKiBkZXBzX3N0ciA9IHRoaXMtPkdldFByb3BlcnR5KCJDTUFLRV9DT05GSUdVUkVfREVQRU5EUyIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KGRlcHNfc3RyLCBkZXBzKTsKKyAgaWYgKGNtUHJvcCBkZXBzX3N0ciA9IHRoaXMtPkdldFByb3BlcnR5KCJDTUFLRV9DT05GSUdVUkVfREVQRU5EUyIpKSB7CisgICAgY21FeHBhbmRMaXN0KCpkZXBzX3N0ciwgZGVwcyk7CiAgIH0KICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZGVwIDogZGVwcykgewogICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChkZXApKSB7CkBAIC00MTc4LDggKzQyMjcsNiBAQAogCiAgIHRoaXMtPlBvcExvb3BCbG9ja0JhcnJpZXIoKTsKIAotICB0aGlzLT5DaGVja0ZvclVudXNlZFZhcmlhYmxlcygpOwotCiAgIHRoaXMtPlBvcFNuYXBzaG90KCk7CiB9CiAKQEAgLTQyMTQsMTUgKzQyNjEsMTUgQEAKICAgICBuZXcgY21UYXJnZXQobmFtZSwgdHlwZSwKICAgICAgICAgICAgICAgICAgZ2xvYmFsID8gY21UYXJnZXQ6OlZpc2liaWxpdHlJbXBvcnRlZEdsb2JhbGx5CiAgICAgICAgICAgICAgICAgICAgICAgICA6IGNtVGFyZ2V0OjpWaXNpYmlsaXR5SW1wb3J0ZWQsCi0gICAgICAgICAgICAgICAgIHRoaXMpKTsKKyAgICAgICAgICAgICAgICAgdGhpcywgY21UYXJnZXQ6OlBlckNvbmZpZzo6WWVzKSk7CiAKICAgLy8gQWRkIHRvIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGltcG9ydGVkIHRhcmdldHMuCiAgIHRoaXMtPkltcG9ydGVkVGFyZ2V0c1tuYW1lXSA9IHRhcmdldC5nZXQoKTsKICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkluZGV4VGFyZ2V0KHRhcmdldC5nZXQoKSk7CiAKICAgLy8gVHJhbnNmZXIgb3duZXJzaGlwIHRvIHRoaXMgY21NYWtlZmlsZSBvYmplY3QuCi0gIHRoaXMtPkltcG9ydGVkVGFyZ2V0c093bmVkLnB1c2hfYmFjayh0YXJnZXQuZ2V0KCkpOwotICByZXR1cm4gdGFyZ2V0LnJlbGVhc2UoKTsKKyAgdGhpcy0+SW1wb3J0ZWRUYXJnZXRzT3duZWQucHVzaF9iYWNrKHN0ZDo6bW92ZSh0YXJnZXQpKTsKKyAgcmV0dXJuIHRoaXMtPkltcG9ydGVkVGFyZ2V0c093bmVkLmJhY2soKS5nZXQoKTsKIH0KIAogY21UYXJnZXQqIGNtTWFrZWZpbGU6OkZpbmRUYXJnZXRUb1VzZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKQEAgLTQyMzAsNyArNDI3NywxNSBAQAogewogICAvLyBMb29rIGZvciBhbiBpbXBvcnRlZCB0YXJnZXQuICBUaGVzZSB0YWtlIHByaW9yaXR5IGJlY2F1c2UgdGhleQogICAvLyBhcmUgbW9yZSBsb2NhbCBpbiBzY29wZSBhbmQgZG8gbm90IGhhdmUgdG8gYmUgZ2xvYmFsbHkgdW5pcXVlLgotICBhdXRvIGltcG9ydGVkID0gdGhpcy0+SW1wb3J0ZWRUYXJnZXRzLmZpbmQobmFtZSk7CisgIGF1dG8gdGFyZ2V0TmFtZSA9IG5hbWU7CisgIGlmICghZXhjbHVkZUFsaWFzZXMpIHsKKyAgICAvLyBMb29rIGZvciBsb2NhbCBhbGlhcyB0YXJnZXRzLgorICAgIGF1dG8gYWxpYXMgPSB0aGlzLT5BbGlhc1RhcmdldHMuZmluZChuYW1lKTsKKyAgICBpZiAoYWxpYXMgIT0gdGhpcy0+QWxpYXNUYXJnZXRzLmVuZCgpKSB7CisgICAgICB0YXJnZXROYW1lID0gYWxpYXMtPnNlY29uZDsKKyAgICB9CisgIH0KKyAgYXV0byBpbXBvcnRlZCA9IHRoaXMtPkltcG9ydGVkVGFyZ2V0cy5maW5kKHRhcmdldE5hbWUpOwogICBpZiAoaW1wb3J0ZWQgIT0gdGhpcy0+SW1wb3J0ZWRUYXJnZXRzLmVuZCgpKSB7CiAgICAgcmV0dXJuIGltcG9ydGVkLT5zZWNvbmQ7CiAgIH0KQEAgLTQyNDYsNyArNDMwMSw3IEBACiAKIGJvb2wgY21NYWtlZmlsZTo6SXNBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgaWYgKGNtQ29udGFpbnModGhpcy0+QWxpYXNUYXJnZXRzLCBuYW1lKSkgeworICBpZiAoY206OmNvbnRhaW5zKHRoaXMtPkFsaWFzVGFyZ2V0cywgbmFtZSkpIHsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogICByZXR1cm4gdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzQWxpYXMobmFtZSk7CkBAIC00NDg3LDcgKzQ1NDIsNyBAQAogCiAgIC8vIERlcHJlY2F0ZSBvbGQgcG9saWNpZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCByZXF1aXJlIGEgbG90CiAgIC8vIG9mIGNvZGUgdG8gbWFpbnRhaW4gdGhlIG9sZCBiZWhhdmlvci4KLSAgaWYgKHN0YXR1cyA9PSBjbVBvbGljaWVzOjpPTEQgJiYgaWQgPD0gY21Qb2xpY2llczo6Q01QMDA2NyAmJgorICBpZiAoc3RhdHVzID09IGNtUG9saWNpZXM6Ok9MRCAmJiBpZCA8PSBjbVBvbGljaWVzOjpDTVAwMDcyICYmCiAgICAgICAhKHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SXNJblRyeUNvbXBpbGUoKSAmJgogICAgICAgICAoCiAgICAgICAgICAgLy8gUG9saWNpZXMgc2V0IGJ5IGNtQ29yZVRyeUNvbXBpbGU6OlRyeUNvbXBpbGVDb2RlLgpAQCAtNDUyOSw3ICs0NTg0LDcgQEAKICAgLy8gY21TdGF0ZVNuYXBzaG90IG1hbmFnZXMgbmVzdGVkIHBvbGljeSBzY29wZXMgd2l0aGluIGl0LgogICAvLyBTaW5jZSB0aGUgc2NvcGUgY29ycmVzcG9uZGluZyB0byB0aGUgc25hcHNob3QgaXMgY2xvc2luZywKICAgLy8gcmVqZWN0IGFueSBzdGlsbC1vcGVuIG5lc3RlZCBwb2xpY3kgc2NvcGVzIHdpdGggYW4gZXJyb3IuCi0gIHdoaWxlICghdGhpcy0+U3RhdGVTbmFwc2hvdC5DYW5Qb3BQb2xpY3lTY29wZSgpKSB7CisgIHdoaWxlICh0aGlzLT5TdGF0ZVNuYXBzaG90LkNhblBvcFBvbGljeVNjb3BlKCkpIHsKICAgICBpZiAocmVwb3J0RXJyb3IpIHsKICAgICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImNtYWtlX3BvbGljeSBQVVNIIHdpdGhvdXQgbWF0Y2hpbmcgUE9QIik7CkBAIC00NTQ1LDcgKzQ2MDAsOCBAQAogYm9vbCBjbU1ha2VmaWxlOjpTZXRQb2xpY3lWZXJzaW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiB2ZXJzaW9uX21pbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmVyc2lvbl9tYXgpCiB7Ci0gIHJldHVybiBjbVBvbGljaWVzOjpBcHBseVBvbGljeVZlcnNpb24odGhpcywgdmVyc2lvbl9taW4sIHZlcnNpb25fbWF4KTsKKyAgcmV0dXJuIGNtUG9saWNpZXM6OkFwcGx5UG9saWN5VmVyc2lvbih0aGlzLCB2ZXJzaW9uX21pbiwgdmVyc2lvbl9tYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qb2xpY2llczo6V2FybkNvbXBhdDo6T24pOwogfQogCiBib29sIGNtTWFrZWZpbGU6Okhhc0NNUDAwNTRBbHJlYWR5QmVlblJlcG9ydGVkKApAQCAtNDU4MSw1MTcgKzQ2MzcsNiBAQAogICByZXR1cm4gaWdub3JlRXJyb3JzOwogfQogCi0jZGVmaW5lIEZFQVRVUkVfU1RSSU5HKEYpICwgI0YKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDX0ZFQVRVUkVTW10gPSB7IG51bGxwdHIgRk9SX0VBQ0hfQ19GRUFUVVJFKAotICBGRUFUVVJFX1NUUklORykgfTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENYWF9GRUFUVVJFU1tdID0geyBudWxscHRyIEZPUl9FQUNIX0NYWF9GRUFUVVJFKAotICBGRUFUVVJFX1NUUklORykgfTsKLSN1bmRlZiBGRUFUVVJFX1NUUklORwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ19TVEFOREFSRFNbXSA9IHsgIjkwIiwgIjk5IiwgIjExIiB9Owotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENYWF9TVEFOREFSRFNbXSA9IHsgIjk4IiwgIjExIiwgIjE0IiwgIjE3IiwgIjIwIiB9OwotCi1ib29sIGNtTWFrZWZpbGU6OkFkZFJlcXVpcmVkVGFyZ2V0RmVhdHVyZShjbVRhcmdldCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0Ci17Ci0gIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoZmVhdHVyZSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICB0YXJnZXQtPkFwcGVuZFByb3BlcnR5KCJDT01QSUxFX0ZFQVRVUkVTIiwgZmVhdHVyZS5jX3N0cigpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHN0ZDo6c3RyaW5nIGxhbmc7Ci0gIGlmICghdGhpcy0+Q29tcGlsZUZlYXR1cmVLbm93bih0YXJnZXQsIGZlYXR1cmUsIGxhbmcsIGVycm9yKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGNvbnN0IGNoYXIqIGZlYXR1cmVzID0gdGhpcy0+Q29tcGlsZUZlYXR1cmVzQXZhaWxhYmxlKGxhbmcsIGVycm9yKTsKLSAgaWYgKCFmZWF0dXJlcykgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdmFpbGFibGVGZWF0dXJlcyA9IGNtRXhwYW5kZWRMaXN0KGZlYXR1cmVzKTsKLSAgaWYgKCFjbUNvbnRhaW5zKGF2YWlsYWJsZUZlYXR1cmVzLCBmZWF0dXJlKSkgewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwotICAgIGUgPDwgIlRoZSBjb21waWxlciBmZWF0dXJlIFwiIiA8PCBmZWF0dXJlIDw8ICJcIiBpcyBub3Qga25vd24gdG8gIiA8PCBsYW5nCi0gICAgICA8PCAiIGNvbXBpbGVyXG5cIiIKLSAgICAgIDw8IHRoaXMtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9JRCIpCi0gICAgICA8PCAiXCJcbnZlcnNpb24gIgotICAgICAgPDwgdGhpcy0+R2V0RGVmaW5pdGlvbigiQ01BS0VfIiArIGxhbmcgKyAiX0NPTVBJTEVSX1ZFUlNJT04iKSA8PCAiLiI7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAqZXJyb3IgPSBlLnN0cigpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5CYWNrdHJhY2UpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB0YXJnZXQtPkFwcGVuZFByb3BlcnR5KCJDT01QSUxFX0ZFQVRVUkVTIiwgZmVhdHVyZS5jX3N0cigpKTsKLQotICByZXR1cm4gbGFuZyA9PSAiQyIgfHwgbGFuZyA9PSAiT0JKQyIKLSAgICA/IHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q0ZlYXR1cmUodGFyZ2V0LCBmZWF0dXJlLCBsYW5nLCBlcnJvcikKLSAgICA6IHRoaXMtPkFkZFJlcXVpcmVkVGFyZ2V0Q3h4RmVhdHVyZSh0YXJnZXQsIGZlYXR1cmUsIGxhbmcsIGVycm9yKTsKLX0KLQotYm9vbCBjbU1ha2VmaWxlOjpDb21waWxlRmVhdHVyZUtub3duKGNtVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yKSBjb25zdAotewotICBhc3NlcnQoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKGZlYXR1cmUpID09IHN0ZDo6c3RyaW5nOjpucG9zKTsKLQotICBib29sIGlzQ0ZlYXR1cmUgPQotICAgIHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfRkVBVFVSRVMpICsgMSwgY206OmNlbmQoQ19GRUFUVVJFUyksCi0gICAgICAgICAgICAgICAgIGNtU3RyQ21wKGZlYXR1cmUpKSAhPSBjbTo6Y2VuZChDX0ZFQVRVUkVTKTsKLSAgaWYgKGlzQ0ZlYXR1cmUpIHsKLSAgICBsYW5nID0gIkMiOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGJvb2wgaXNDeHhGZWF0dXJlID0KLSAgICBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDWFhfRkVBVFVSRVMpICsgMSwgY206OmNlbmQoQ1hYX0ZFQVRVUkVTKSwKLSAgICAgICAgICAgICAgICAgY21TdHJDbXAoZmVhdHVyZSkpICE9IGNtOjpjZW5kKENYWF9GRUFUVVJFUyk7Ci0gIGlmIChpc0N4eEZlYXR1cmUpIHsKLSAgICBsYW5nID0gIkNYWCI7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7Ci0gIGlmIChlcnJvcikgewotICAgIGUgPDwgInNwZWNpZmllZCI7Ci0gIH0gZWxzZSB7Ci0gICAgZSA8PCAiU3BlY2lmaWVkIjsKLSAgfQotICBlIDw8ICIgdW5rbm93biBmZWF0dXJlIFwiIiA8PCBmZWF0dXJlCi0gICAgPDwgIlwiIGZvciAiCi0gICAgICAgInRhcmdldCBcIiIKLSAgICA8PCB0YXJnZXQtPkdldE5hbWUoKSA8PCAiXCIuIjsKLSAgaWYgKGVycm9yKSB7Ci0gICAgKmVycm9yID0gZS5zdHIoKTsKLSAgfSBlbHNlIHsKLSAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QmFja3RyYWNlKTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWNvbnN0IGNoYXIqIGNtTWFrZWZpbGU6OkNvbXBpbGVGZWF0dXJlc0F2YWlsYWJsZShjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0Ci17Ci0gIGlmICghdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRMYW5ndWFnZUVuYWJsZWQobGFuZykpIHsKLSAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgIGUgPDwgImNhbm5vdCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGUgPDwgIkNhbm5vdCI7Ci0gICAgfQotICAgIGUgPDwgIiB1c2UgZmVhdHVyZXMgZnJvbSBub24tZW5hYmxlZCBsYW5ndWFnZSAiIDw8IGxhbmc7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAqZXJyb3IgPSBlLnN0cigpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLT5HZXRDTWFrZUluc3RhbmNlKCktPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsIGUuc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5CYWNrdHJhY2UpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotCi0gIGNvbnN0IGNoYXIqIGZlYXR1cmVzS25vd24gPQotICAgIHRoaXMtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFX0ZFQVRVUkVTIik7Ci0KLSAgaWYgKCFmZWF0dXJlc0tub3duIHx8ICEqZmVhdHVyZXNLbm93bikgewotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwotICAgIGlmIChlcnJvcikgewotICAgICAgZSA8PCAibm8iOwotICAgIH0gZWxzZSB7Ci0gICAgICBlIDw8ICJObyI7Ci0gICAgfQotICAgIGUgPDwgIiBrbm93biBmZWF0dXJlcyBmb3IgIiA8PCBsYW5nIDw8ICIgY29tcGlsZXJcblwiIgotICAgICAgPDwgdGhpcy0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9JRCIpCi0gICAgICA8PCAiXCJcbnZlcnNpb24gIgotICAgICAgPDwgdGhpcy0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9WRVJTSU9OIikgPDwgIi4iOwotICAgIGlmIChlcnJvcikgewotICAgICAgKmVycm9yID0gZS5zdHIoKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QmFja3RyYWNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAgcmV0dXJuIGZlYXR1cmVzS25vd247Ci19Ci0KLWJvb2wgY21NYWtlZmlsZTo6SGF2ZVN0YW5kYXJkQXZhaWxhYmxlKGNtVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlKSBjb25zdAotewotICByZXR1cm4gbGFuZyA9PSAiQyIgfHwgbGFuZyA9PSAiT0JKQyIKLSAgICA/IHRoaXMtPkhhdmVDU3RhbmRhcmRBdmFpbGFibGUodGFyZ2V0LCBmZWF0dXJlLCBsYW5nKQotICAgIDogdGhpcy0+SGF2ZUN4eFN0YW5kYXJkQXZhaWxhYmxlKHRhcmdldCwgZmVhdHVyZSwgbGFuZyk7Ci19Ci0KLWJvb2wgY21NYWtlZmlsZTo6SGF2ZUNTdGFuZGFyZEF2YWlsYWJsZShjbVRhcmdldCBjb25zdCogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdAotewotICBjb25zdCBjaGFyKiBkZWZhdWx0Q1N0YW5kYXJkID0KLSAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7Ci0gIGlmICghZGVmYXVsdENTdGFuZGFyZCkgewotICAgIHRoaXMtPklzc3VlTWVzc2FnZSgKLSAgICAgIE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwKLSAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLAotICAgICAgICAgICAgICAgIl9TVEFOREFSRF9ERUZBVUxUIGlzIG5vdCBzZXQuICBDT01QSUxFX0ZFQVRVUkVTIHN1cHBvcnQgIgotICAgICAgICAgICAgICAgIm5vdCBmdWxseSBjb25maWd1cmVkIGZvciB0aGlzIGNvbXBpbGVyLiIpKTsKLSAgICAvLyBSZXR1cm4gdHJ1ZSBzbyB0aGUgY2FsbGVyIGRvZXMgbm90IHRyeSB0byBsb29rdXAgdGhlIGRlZmF1bHQgc3RhbmRhcmQuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgaWYgKHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGRlZmF1bHRDU3RhbmRhcmQpKSA9PSBjbTo6Y2VuZChDX1NUQU5EQVJEUykpIHsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoIlRoZSBDTUFLRV8iLCBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1NUQU5EQVJEX0RFRkFVTFQgdmFyaWFibGUgY29udGFpbnMgYW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB2YWx1ZTogXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q1N0YW5kYXJkLCAiXCIuIik7Ci0gICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwgZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgYm9vbCBuZWVkQzkwID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEM5OSA9IGZhbHNlOwotICBib29sIG5lZWRDMTEgPSBmYWxzZTsKLQotICB0aGlzLT5DaGVja05lZWRlZENMYW5ndWFnZShmZWF0dXJlLCBsYW5nLCBuZWVkQzkwLCBuZWVkQzk5LCBuZWVkQzExKTsKLQotICBjb25zdCBjaGFyKiBleGlzdGluZ0NTdGFuZGFyZCA9Ci0gICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIikpOwotICBpZiAoIWV4aXN0aW5nQ1N0YW5kYXJkKSB7Ci0gICAgZXhpc3RpbmdDU3RhbmRhcmQgPSBkZWZhdWx0Q1N0YW5kYXJkOwotICB9Ci0KLSAgaWYgKHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ1N0YW5kYXJkKSkgPT0gY206OmNlbmQoQ19TVEFOREFSRFMpKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgZSA9IGNtU3RyQ2F0KAotICAgICAgIlRoZSAiLCBsYW5nLCAiX1NUQU5EQVJEIHByb3BlcnR5IG9uIHRhcmdldCBcIiIsIHRhcmdldC0+R2V0TmFtZSgpLAotICAgICAgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsIGV4aXN0aW5nQ1N0YW5kYXJkLCAiXCIuIik7Ci0gICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgY29uc3QgY2hhciogY29uc3QqIGV4aXN0aW5nQ0l0ID0gZXhpc3RpbmdDU3RhbmRhcmQKLSAgICA/IHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ1N0YW5kYXJkKSkKLSAgICA6IGNtOjpjZW5kKENfU1RBTkRBUkRTKTsKLQotICBpZiAobmVlZEMxMSAmJiBleGlzdGluZ0NTdGFuZGFyZCAmJgotICAgICAgZXhpc3RpbmdDSXQgPCBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbTo6Y2VuZChDX1NUQU5EQVJEUyksIGNtU3RyQ21wKCIxMSIpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAobmVlZEM5OSAmJiBleGlzdGluZ0NTdGFuZGFyZCAmJgotICAgICAgZXhpc3RpbmdDSXQgPCBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbTo6Y2VuZChDX1NUQU5EQVJEUyksIGNtU3RyQ21wKCI5OSIpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAobmVlZEM5MCAmJiBleGlzdGluZ0NTdGFuZGFyZCAmJgotICAgICAgZXhpc3RpbmdDSXQgPCBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbTo6Y2VuZChDX1NUQU5EQVJEUyksIGNtU3RyQ21wKCI5MCIpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBjbU1ha2VmaWxlOjpJc0xhdGVyU3RhbmRhcmQoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHJocykKLXsKLSAgaWYgKGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIk9CSkMiKSB7Ci0gICAgY29uc3QgY2hhciogY29uc3QqIHJoc0l0ID0gc3RkOjpmaW5kX2lmKAotICAgICAgY206OmNiZWdpbihDX1NUQU5EQVJEUyksIGNtOjpjZW5kKENfU1RBTkRBUkRTKSwgY21TdHJDbXAocmhzKSk7Ci0KLSAgICByZXR1cm4gc3RkOjpmaW5kX2lmKHJoc0l0LCBjbTo6Y2VuZChDX1NUQU5EQVJEUyksIGNtU3RyQ21wKGxocykpICE9Ci0gICAgICBjbTo6Y2VuZChDX1NUQU5EQVJEUyk7Ci0gIH0KLSAgY29uc3QgY2hhciogY29uc3QqIHJoc0l0ID0gc3RkOjpmaW5kX2lmKAotICAgIGNtOjpjYmVnaW4oQ1hYX1NUQU5EQVJEUyksIGNtOjpjZW5kKENYWF9TVEFOREFSRFMpLCBjbVN0ckNtcChyaHMpKTsKLQotICByZXR1cm4gc3RkOjpmaW5kX2lmKHJoc0l0LCBjbTo6Y2VuZChDWFhfU1RBTkRBUkRTKSwgY21TdHJDbXAobGhzKSkgIT0KLSAgICBjbTo6Y2VuZChDWFhfU1RBTkRBUkRTKTsKLX0KLQotYm9vbCBjbU1ha2VmaWxlOjpIYXZlQ3h4U3RhbmRhcmRBdmFpbGFibGUoY21UYXJnZXQgY29uc3QqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0Ci17Ci0gIGNvbnN0IGNoYXIqIGRlZmF1bHRDeHhTdGFuZGFyZCA9Ci0gICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9TVEFOREFSRF9ERUZBVUxUIikpOwotICBpZiAoIWRlZmF1bHRDeHhTdGFuZGFyZCkgewotICAgIHRoaXMtPklzc3VlTWVzc2FnZSgKLSAgICAgIE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwKLSAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLAotICAgICAgICAgICAgICAgIl9TVEFOREFSRF9ERUZBVUxUIGlzIG5vdCBzZXQuICBDT01QSUxFX0ZFQVRVUkVTIHN1cHBvcnQgIgotICAgICAgICAgICAgICAgIm5vdCBmdWxseSBjb25maWd1cmVkIGZvciB0aGlzIGNvbXBpbGVyLiIpKTsKLSAgICAvLyBSZXR1cm4gdHJ1ZSBzbyB0aGUgY2FsbGVyIGRvZXMgbm90IHRyeSB0byBsb29rdXAgdGhlIGRlZmF1bHQgc3RhbmRhcmQuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgaWYgKHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENYWF9TVEFOREFSRFMpLCBjbTo6Y2VuZChDWFhfU1RBTkRBUkRTKSwKLSAgICAgICAgICAgICAgICAgICBjbVN0ckNtcChkZWZhdWx0Q3h4U3RhbmRhcmQpKSA9PSBjbTo6Y2VuZChDWFhfU1RBTkRBUkRTKSkgewotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGUgPQotICAgICAgY21TdHJDYXQoIlRoZSBDTUFLRV8iLCBsYW5nLCAiX1NUQU5EQVJEX0RFRkFVTFQgdmFyaWFibGUgY29udGFpbnMgYW4gIiwKLSAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlOiBcIiIsIGRlZmF1bHRDeHhTdGFuZGFyZCwgIlwiLiIpOwotICAgIHRoaXMtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6SU5URVJOQUxfRVJST1IsIGUpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJvb2wgbmVlZEN4eDk4ID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN4eDExID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN4eDE0ID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN4eDE3ID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN4eDIwID0gZmFsc2U7Ci0gIHRoaXMtPkNoZWNrTmVlZGVkQ3h4TGFuZ3VhZ2UoZmVhdHVyZSwgbGFuZywgbmVlZEN4eDk4LCBuZWVkQ3h4MTEsIG5lZWRDeHgxNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkQ3h4MTcsIG5lZWRDeHgyMCk7Ci0KLSAgY29uc3QgY2hhciogZXhpc3RpbmdDeHhTdGFuZGFyZCA9Ci0gICAgdGFyZ2V0LT5HZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIikpOwotICBpZiAoIWV4aXN0aW5nQ3h4U3RhbmRhcmQpIHsKLSAgICBleGlzdGluZ0N4eFN0YW5kYXJkID0gZGVmYXVsdEN4eFN0YW5kYXJkOwotICB9Ci0KLSAgY29uc3QgY2hhciogY29uc3QqIGV4aXN0aW5nQ3h4TGV2ZWwgPQotICAgIHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENYWF9TVEFOREFSRFMpLCBjbTo6Y2VuZChDWFhfU1RBTkRBUkRTKSwKLSAgICAgICAgICAgICAgICAgY21TdHJDbXAoZXhpc3RpbmdDeHhTdGFuZGFyZCkpOwotICBpZiAoZXhpc3RpbmdDeHhMZXZlbCA9PSBjbTo6Y2VuZChDWFhfU1RBTkRBUkRTKSkgewotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGUgPSBjbVN0ckNhdCgKLSAgICAgICJUaGUgIiwgbGFuZywgIl9TVEFOREFSRCBwcm9wZXJ0eSBvbiB0YXJnZXQgXCIiLCB0YXJnZXQtPkdldE5hbWUoKSwKLSAgICAgICJcIiBjb250YWluZWQgYW4gaW52YWxpZCB2YWx1ZTogXCIiLCBleGlzdGluZ0N4eFN0YW5kYXJkLCAiXCIuIik7Ci0gICAgdGhpcy0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyogY2xhbmctZm9ybWF0IG9mZiAqLwotICBjb25zdCBjaGFyKiBjb25zdCogbmVlZEN4eExldmVsID0KLSAgICBuZWVkQ3h4MjAgPyAmQ1hYX1NUQU5EQVJEU1s0XQotICAgIDogbmVlZEN4eDE3ID8gJkNYWF9TVEFOREFSRFNbM10KLSAgICA6IG5lZWRDeHgxNCA/ICZDWFhfU1RBTkRBUkRTWzJdCi0gICAgOiBuZWVkQ3h4MTEgPyAmQ1hYX1NUQU5EQVJEU1sxXQotICAgIDogbmVlZEN4eDk4ID8gJkNYWF9TVEFOREFSRFNbMF0KLSAgICA6IG51bGxwdHI7Ci0gIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotCi0gIHJldHVybiAhbmVlZEN4eExldmVsIHx8IG5lZWRDeHhMZXZlbCA8PSBleGlzdGluZ0N4eExldmVsOwotfQotCi12b2lkIGNtTWFrZWZpbGU6OkNoZWNrTmVlZGVkQ3h4TGFuZ3VhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN4eDk4LCBib29sJiBuZWVkQ3h4MTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN4eDE0LCBib29sJiBuZWVkQ3h4MTcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN4eDIwKSBjb25zdAotewotICBpZiAoY29uc3QgY2hhciogcHJvcEN4eDk4ID0KLSAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIjk4X0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wQ3h4OTgpOwotICAgIG5lZWRDeHg5OCA9IGNtQ29udGFpbnMocHJvcHMsIGZlYXR1cmUpOwotICB9Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wQ3h4MTEgPQotICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiMTFfQ09NUElMRV9GRUFUVVJFUyIpKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDeHgxMSk7Ci0gICAgbmVlZEN4eDExID0gY21Db250YWlucyhwcm9wcywgZmVhdHVyZSk7Ci0gIH0KLSAgaWYgKGNvbnN0IGNoYXIqIHByb3BDeHgxNCA9Ci0gICAgICAgIHRoaXMtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICIxNF9DT01QSUxFX0ZFQVRVUkVTIikpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcEN4eDE0KTsKLSAgICBuZWVkQ3h4MTQgPSBjbUNvbnRhaW5zKHByb3BzLCBmZWF0dXJlKTsKLSAgfQotICBpZiAoY29uc3QgY2hhciogcHJvcEN4eDE3ID0KLSAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIjE3X0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wQ3h4MTcpOwotICAgIG5lZWRDeHgxNyA9IGNtQ29udGFpbnMocHJvcHMsIGZlYXR1cmUpOwotICB9Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wQ3h4MjAgPQotICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiMjBfQ09NUElMRV9GRUFUVVJFUyIpKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDeHgyMCk7Ci0gICAgbmVlZEN4eDIwID0gY21Db250YWlucyhwcm9wcywgZmVhdHVyZSk7Ci0gIH0KLX0KLQotYm9vbCBjbU1ha2VmaWxlOjpBZGRSZXF1aXJlZFRhcmdldEN4eEZlYXR1cmUoY21UYXJnZXQqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0Ci17Ci0gIGJvb2wgbmVlZEN4eDk4ID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN4eDExID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN4eDE0ID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN4eDE3ID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEN4eDIwID0gZmFsc2U7Ci0KLSAgdGhpcy0+Q2hlY2tOZWVkZWRDeHhMYW5ndWFnZShmZWF0dXJlLCBsYW5nLCBuZWVkQ3h4OTgsIG5lZWRDeHgxMSwgbmVlZEN4eDE0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRDeHgxNywgbmVlZEN4eDIwKTsKLQotICBjb25zdCBjaGFyKiBleGlzdGluZ0N4eFN0YW5kYXJkID0KLSAgICB0YXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcsICJfU1RBTkRBUkQiKSk7Ci0gIGlmIChleGlzdGluZ0N4eFN0YW5kYXJkID09IG51bGxwdHIpIHsKLSAgICBjb25zdCBjaGFyKiBkZWZhdWx0Q3h4U3RhbmRhcmQgPQotICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9TVEFOREFSRF9ERUZBVUxUIikpOwotICAgIGlmIChkZWZhdWx0Q3h4U3RhbmRhcmQgJiYgKmRlZmF1bHRDeHhTdGFuZGFyZCkgewotICAgICAgZXhpc3RpbmdDeHhTdGFuZGFyZCA9IGRlZmF1bHRDeHhTdGFuZGFyZDsKLSAgICB9Ci0gIH0KLSAgY29uc3QgY2hhciogY29uc3QqIGV4aXN0aW5nQ3h4TGV2ZWwgPSBudWxscHRyOwotICBpZiAoZXhpc3RpbmdDeHhTdGFuZGFyZCkgewotICAgIGV4aXN0aW5nQ3h4TGV2ZWwgPQotICAgICAgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1hYX1NUQU5EQVJEUyksIGNtOjpjZW5kKENYWF9TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ3h4U3RhbmRhcmQpKTsKLSAgICBpZiAoZXhpc3RpbmdDeHhMZXZlbCA9PSBjbTo6Y2VuZChDWFhfU1RBTkRBUkRTKSkgewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZSA9IGNtU3RyQ2F0KAotICAgICAgICAiVGhlICIsIGxhbmcsICJfU1RBTkRBUkQgcHJvcGVydHkgb24gdGFyZ2V0IFwiIiwgdGFyZ2V0LT5HZXROYW1lKCksCi0gICAgICAgICJcIiBjb250YWluZWQgYW4gaW52YWxpZCB2YWx1ZTogXCIiLCBleGlzdGluZ0N4eFN0YW5kYXJkLCAiXCIuIik7Ci0gICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgKmVycm9yID0gZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QmFja3RyYWNlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBjb25zdCBjaGFyKiBleGlzdGluZ0N1ZGFTdGFuZGFyZCA9IHRhcmdldC0+R2V0UHJvcGVydHkoIkNVREFfU1RBTkRBUkQiKTsKLSAgY29uc3QgY2hhciogY29uc3QqIGV4aXN0aW5nQ3VkYUxldmVsID0gbnVsbHB0cjsKLSAgaWYgKGV4aXN0aW5nQ3VkYVN0YW5kYXJkKSB7Ci0gICAgZXhpc3RpbmdDdWRhTGV2ZWwgPQotICAgICAgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1hYX1NUQU5EQVJEUyksIGNtOjpjZW5kKENYWF9TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGV4aXN0aW5nQ3VkYVN0YW5kYXJkKSk7Ci0gICAgaWYgKGV4aXN0aW5nQ3VkYUxldmVsID09IGNtOjpjZW5kKENYWF9TVEFOREFSRFMpKSB7Ci0gICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKLSAgICAgIGUgPDwgIlRoZSBDVURBX1NUQU5EQVJEIHByb3BlcnR5IG9uIHRhcmdldCBcIiIgPDwgdGFyZ2V0LT5HZXROYW1lKCkKLSAgICAgICAgPDwgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIgPDwgZXhpc3RpbmdDdWRhU3RhbmRhcmQKLSAgICAgICAgPDwgIlwiLiI7Ci0gICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgKmVycm9yID0gZS5zdHIoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdHIoKSwgdGhpcy0+QmFja3RyYWNlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICAvKiBjbGFuZy1mb3JtYXQgb2ZmICovCi0gIGNvbnN0IGNoYXIqIGNvbnN0KiBuZWVkQ3h4TGV2ZWwgPQotICAgIG5lZWRDeHgyMCA/ICZDWFhfU1RBTkRBUkRTWzRdCi0gICAgOiBuZWVkQ3h4MTcgPyAmQ1hYX1NUQU5EQVJEU1szXQotICAgIDogbmVlZEN4eDE0ID8gJkNYWF9TVEFOREFSRFNbMl0KLSAgICA6IG5lZWRDeHgxMSA/ICZDWFhfU1RBTkRBUkRTWzFdCi0gICAgOiBuZWVkQ3h4OTggPyAmQ1hYX1NUQU5EQVJEU1swXQotICAgIDogbnVsbHB0cjsKLSAgLyogY2xhbmctZm9ybWF0IG9uICovCi0KLSAgaWYgKG5lZWRDeHhMZXZlbCkgewotICAgIC8vIEVuc3VyZSB0aGUgQysrIGxhbmd1YWdlIGxldmVsIGlzIGhpZ2ggZW5vdWdoIHRvIHN1cHBvcnQKLSAgICAvLyB0aGUgbmVlZGVkIEMrKyBmZWF0dXJlcy4KLSAgICBpZiAoIWV4aXN0aW5nQ3h4TGV2ZWwgfHwgZXhpc3RpbmdDeHhMZXZlbCA8IG5lZWRDeHhMZXZlbCkgewotICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIiksICpuZWVkQ3h4TGV2ZWwpOwotICAgIH0KLQotICAgIC8vIEVuc3VyZSB0aGUgQ1VEQSBsYW5ndWFnZSBsZXZlbCBpcyBoaWdoIGVub3VnaCB0byBzdXBwb3J0Ci0gICAgLy8gdGhlIG5lZWRlZCBDKysgZmVhdHVyZXMuCi0gICAgaWYgKCFleGlzdGluZ0N1ZGFMZXZlbCB8fCBleGlzdGluZ0N1ZGFMZXZlbCA8IG5lZWRDeHhMZXZlbCkgewotICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ1VEQV9TVEFOREFSRCIsICpuZWVkQ3h4TGV2ZWwpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIGNtTWFrZWZpbGU6OkNoZWNrTmVlZGVkQ0xhbmd1YWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgYm9vbCYgbmVlZEM5MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEM5OSwgYm9vbCYgbmVlZEMxMSkgY29uc3QKLXsKLSAgaWYgKGNvbnN0IGNoYXIqIHByb3BDOTAgPQotICAgICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiOTBfQ09NUElMRV9GRUFUVVJFUyIpKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcyA9IGNtRXhwYW5kZWRMaXN0KHByb3BDOTApOwotICAgIG5lZWRDOTAgPSBjbUNvbnRhaW5zKHByb3BzLCBmZWF0dXJlKTsKLSAgfQotICBpZiAoY29uc3QgY2hhciogcHJvcEM5OSA9Ci0gICAgICAgIHRoaXMtPkdldERlZmluaXRpb24oY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICI5OV9DT01QSUxFX0ZFQVRVUkVTIikpKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcEM5OSk7Ci0gICAgbmVlZEM5OSA9IGNtQ29udGFpbnMocHJvcHMsIGZlYXR1cmUpOwotICB9Ci0gIGlmIChjb25zdCBjaGFyKiBwcm9wQzExID0KLSAgICAgICAgdGhpcy0+R2V0RGVmaW5pdGlvbihjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIjExX0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcHMgPSBjbUV4cGFuZGVkTGlzdChwcm9wQzExKTsKLSAgICBuZWVkQzExID0gY21Db250YWlucyhwcm9wcywgZmVhdHVyZSk7Ci0gIH0KLX0KLQotYm9vbCBjbU1ha2VmaWxlOjpBZGRSZXF1aXJlZFRhcmdldENGZWF0dXJlKGNtVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yKSBjb25zdAotewotICBib29sIG5lZWRDOTAgPSBmYWxzZTsKLSAgYm9vbCBuZWVkQzk5ID0gZmFsc2U7Ci0gIGJvb2wgbmVlZEMxMSA9IGZhbHNlOwotCi0gIHRoaXMtPkNoZWNrTmVlZGVkQ0xhbmd1YWdlKGZlYXR1cmUsIGxhbmcsIG5lZWRDOTAsIG5lZWRDOTksIG5lZWRDMTEpOwotCi0gIGNvbnN0IGNoYXIqIGV4aXN0aW5nQ1N0YW5kYXJkID0KLSAgICB0YXJnZXQtPkdldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcsICJfU1RBTkRBUkQiKSk7Ci0gIGlmIChleGlzdGluZ0NTdGFuZGFyZCA9PSBudWxscHRyKSB7Ci0gICAgY29uc3QgY2hhciogZGVmYXVsdENTdGFuZGFyZCA9Ci0gICAgICB0aGlzLT5HZXREZWZpbml0aW9uKGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7Ci0gICAgaWYgKGRlZmF1bHRDU3RhbmRhcmQgJiYgKmRlZmF1bHRDU3RhbmRhcmQpIHsKLSAgICAgIGV4aXN0aW5nQ1N0YW5kYXJkID0gZGVmYXVsdENTdGFuZGFyZDsKLSAgICB9Ci0gIH0KLSAgaWYgKGV4aXN0aW5nQ1N0YW5kYXJkKSB7Ci0gICAgaWYgKHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgICAgY21TdHJDbXAoZXhpc3RpbmdDU3RhbmRhcmQpKSA9PSBjbTo6Y2VuZChDX1NUQU5EQVJEUykpIHsKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGUgPSBjbVN0ckNhdCgKLSAgICAgICAgIlRoZSAiLCBsYW5nLCAiX1NUQU5EQVJEIHByb3BlcnR5IG9uIHRhcmdldCBcIiIsIHRhcmdldC0+R2V0TmFtZSgpLAotICAgICAgICAiXCIgY29udGFpbmVkIGFuIGludmFsaWQgdmFsdWU6IFwiIiwgZXhpc3RpbmdDU3RhbmRhcmQsICJcIi4iKTsKLSAgICAgIGlmIChlcnJvcikgewotICAgICAgICAqZXJyb3IgPSBlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy0+R2V0Q01ha2VJbnN0YW5jZSgpLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5CYWNrdHJhY2UpOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICBjb25zdCBjaGFyKiBjb25zdCogZXhpc3RpbmdDSXQgPSBleGlzdGluZ0NTdGFuZGFyZAotICAgID8gc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ19TVEFOREFSRFMpLCBjbTo6Y2VuZChDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgY21TdHJDbXAoZXhpc3RpbmdDU3RhbmRhcmQpKQotICAgIDogY206OmNlbmQoQ19TVEFOREFSRFMpOwotCi0gIGJvb2wgc2V0QzkwID0gbmVlZEM5MCAmJiAhZXhpc3RpbmdDU3RhbmRhcmQ7Ci0gIGJvb2wgc2V0Qzk5ID0gbmVlZEM5OSAmJiAhZXhpc3RpbmdDU3RhbmRhcmQ7Ci0gIGJvb2wgc2V0QzExID0gbmVlZEMxMSAmJiAhZXhpc3RpbmdDU3RhbmRhcmQ7Ci0KLSAgaWYgKG5lZWRDMTEgJiYgZXhpc3RpbmdDU3RhbmRhcmQgJiYKLSAgICAgIGV4aXN0aW5nQ0l0IDwgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY206OmNlbmQoQ19TVEFOREFSRFMpLCBjbVN0ckNtcCgiMTEiKSkpIHsKLSAgICBzZXRDMTEgPSB0cnVlOwotICB9IGVsc2UgaWYgKG5lZWRDOTkgJiYgZXhpc3RpbmdDU3RhbmRhcmQgJiYKLSAgICAgICAgICAgICBleGlzdGluZ0NJdCA8IHN0ZDo6ZmluZF9pZihjbTo6Y2JlZ2luKENfU1RBTkRBUkRTKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbTo6Y2VuZChDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdHJDbXAoIjk5IikpKSB7Ci0gICAgc2V0Qzk5ID0gdHJ1ZTsKLSAgfSBlbHNlIGlmIChuZWVkQzkwICYmIGV4aXN0aW5nQ1N0YW5kYXJkICYmCi0gICAgICAgICAgICAgZXhpc3RpbmdDSXQgPCBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX1NUQU5EQVJEUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY206OmNlbmQoQ19TVEFOREFSRFMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RyQ21wKCI5MCIpKSkgewotICAgIHNldEM5MCA9IHRydWU7Ci0gIH0KLQotICBpZiAoc2V0QzExKSB7Ci0gICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIiksICIxMSIpOwotICB9IGVsc2UgaWYgKHNldEM5OSkgewotICAgIHRhcmdldC0+U2V0UHJvcGVydHkoY21TdHJDYXQobGFuZywgIl9TVEFOREFSRCIpLCAiOTkiKTsKLSAgfSBlbHNlIGlmIChzZXRDOTApIHsKLSAgICB0YXJnZXQtPlNldFByb3BlcnR5KGNtU3RyQ2F0KGxhbmcsICJfU1RBTkRBUkQiKSwgIjkwIik7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KIGNtTWFrZWZpbGU6OkZ1bmN0aW9uUHVzaFBvcDo6RnVuY3Rpb25QdXNoUG9wKGNtTWFrZWZpbGUqIG1mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qb2xpY2llczo6UG9saWN5TWFwIGNvbnN0JiBwbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1ha2VmaWxlLmggYi9Tb3VyY2UvY21NYWtlZmlsZS5oCmluZGV4IDZlNTk0OTQuLjgwZDgwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1ha2VmaWxlLmgKKysrIGIvU291cmNlL2NtTWFrZWZpbGUuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbU5ld0xpbmVTdHlsZS5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlTG9jYXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC00OSw2ICs1MCw3IEBACiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvcjsKIGNsYXNzIGNtSW1wbGljaXREZXBlbmRzTGlzdDsKIGNsYXNzIGNtSW5zdGFsbEdlbmVyYXRvcjsKK2NsYXNzIGNtTG9jYWxHZW5lcmF0b3I7CiBjbGFzcyBjbU1lc3NlbmdlcjsKIGNsYXNzIGNtU291cmNlRmlsZTsKIGNsYXNzIGNtU3RhdGU7CkBAIC0xMTYsNiArMTE4LDkgQEAKIAogICBib29sIFJlYWRMaXN0RmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpOwogCisgIGJvb2wgUmVhZExpc3RGaWxlQXNTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZpcnR1YWxGaWxlTmFtZSk7CisKICAgYm9vbCBSZWFkRGVwZW5kZW50RmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub1BvbGljeVNjb3BlID0gdHJ1ZSk7CiAKQEAgLTEzNCw3ICsxMzksNyBAQAogICBzdGQ6OnVuaXF1ZV9wdHI8Y21GdW5jdGlvbkJsb2NrZXI+IFJlbW92ZUZ1bmN0aW9uQmxvY2tlcigpOwogCiAgIC8qKgotICAgKiBUcnkgcnVubmluZyBjbWFrZSBhbmQgYnVpbGRpbmcgYSBmaWxlLiBUaGlzIGlzIHVzZWQgZm9yIGR5bmFsaWNhbGx5CisgICAqIFRyeSBydW5uaW5nIGNtYWtlIGFuZCBidWlsZGluZyBhIGZpbGUuIFRoaXMgaXMgdXNlZCBmb3IgZHluYW1pY2FsbHkKICAgICogbG9hZGVkIGNvbW1hbmRzLCBub3QgYXMgcGFydCBvZiB0aGUgdXN1YWwgYnVpbGQgcHJvY2Vzcy4KICAgICovCiAgIGludCBUcnlDb21waWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzcmNkaXIsIGNvbnN0IHN0ZDo6c3RyaW5nJiBiaW5kaXIsCkBAIC0xNTEsMzEgKzE1NiwzMSBAQAogICBib29sIEVuZm9yY2VVbmlxdWVOYW1lKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBzdGQ6OnN0cmluZyYgbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNDdXN0b20gPSBmYWxzZSkgY29uc3Q7CiAKLSAgdXNpbmcgRmluYWxBY3Rpb24gPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoY21NYWtlZmlsZSYpPjsKKyAgdXNpbmcgR2VuZXJhdG9yQWN0aW9uID0KKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoY21Mb2NhbEdlbmVyYXRvciYsIGNvbnN0IGNtTGlzdEZpbGVCYWNrdHJhY2UmKT47CiAKICAgLyoqCi0gICAqIFJlZ2lzdGVyIGFuIGFjdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGR1cmluZyBGaW5hbFBhc3MKKyAgICogUmVnaXN0ZXIgYW4gYWN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgZHVyaW5nIEdlbmVyYXRlCiAgICAqLwotICB2b2lkIEFkZEZpbmFsQWN0aW9uKEZpbmFsQWN0aW9uIGFjdGlvbik7CisgIHZvaWQgQWRkR2VuZXJhdG9yQWN0aW9uKEdlbmVyYXRvckFjdGlvbiBhY3Rpb24pOwogCiAgIC8qKgotICAgKiBQZXJmb3JtIEZpbmFsUGFzcywgTGlicmFyeSBkZXBlbmRlbmN5IGFuYWx5c2lzIGV0YyBiZWZvcmUgb3V0cHV0IG9mIHRoZQotICAgKiBtYWtlZmlsZS4KKyAgICogUGVyZm9ybSBnZW5lcmF0ZSBhY3Rpb25zLCBMaWJyYXJ5IGRlcGVuZGVuY3kgYW5hbHlzaXMgZXRjIGJlZm9yZSBvdXRwdXQgb2YKKyAgICogdGhlIG1ha2VmaWxlLgogICAgKi8KLSAgdm9pZCBDb25maWd1cmVGaW5hbFBhc3MoKTsKLQotICAvKioKLSAgICogcnVuIGFsbCBGaW5hbEFjdGlvbnMuCi0gICAqLwotICB2b2lkIEZpbmFsUGFzcygpOworICB2b2lkIEdlbmVyYXRlKGNtTG9jYWxHZW5lcmF0b3ImIGxnKTsKIAogICAvKioKICAgICogR2V0IHRoZSB0YXJnZXQgZm9yIFBSRV9CVUlMRCwgUFJFX0xJTkssIG9yIFBPU1RfQlVJTEQgY29tbWFuZHMuCiAgICAqLwotICBjbVRhcmdldCogR2V0Q3VzdG9tQ29tbWFuZFRhcmdldCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0LCBjbU9iamVjdExpYnJhcnlDb21tYW5kcyBvYmpMaWJDb21tYW5kcykgY29uc3Q7CisgIGNtVGFyZ2V0KiBHZXRDdXN0b21Db21tYW5kVGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT2JqZWN0TGlicmFyeUNvbW1hbmRzIG9iakxpYkNvbW1hbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbUxpc3RGaWxlQmFja3RyYWNlJiBsZmJ0KSBjb25zdDsKIAotICAvKiogQWRkIGEgY3VzdG9tIGNvbW1hbmQgdG8gdGhlIGJ1aWxkLiAgKi8KKyAgLyoqCisgICAqIERpc3BhdGNoIGFkZGluZyBhIGN1c3RvbSBQUkVfQlVJTEQsIFBSRV9MSU5LLCBvciBQT1NUX0JVSUxEIGNvbW1hbmQgdG8gYQorICAgKiB0YXJnZXQuCisgICAqLwogICBjbVRhcmdldCogQWRkQ3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCkBAIC0xODMsMjQgKzE4OCwzNyBAQAogICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAogICAgIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsCi0gICAgY21PYmplY3RMaWJyYXJ5Q29tbWFuZHMgb2JqTGliQ29tbWFuZHMgPSBjbU9iamVjdExpYnJhcnlDb21tYW5kczo6UmVqZWN0KTsKLSAgY21Tb3VyY2VGaWxlKiBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgYm9vbCBzdGRQaXBlc1VURjggPSBmYWxzZSk7CisKKyAgLyoqCisgICAqIENhbGxlZCBmb3IgZWFjaCBmaWxlIHdpdGggY3VzdG9tIGNvbW1hbmQuCisgICAqLworICB1c2luZyBDb21tYW5kU291cmNlQ2FsbGJhY2sgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoY21Tb3VyY2VGaWxlKik+OworCisgIC8qKgorICAgKiBEaXNwYXRjaCBhZGRpbmcgYSBjdXN0b20gY29tbWFuZCB0byBhIHNvdXJjZSBmaWxlLgorICAgKi8KKyAgdm9pZCBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYWluX2RlcGVuZGVuY3ksCiAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKLSAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCisgICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgY29uc3QgQ29tbWFuZFNvdXJjZUNhbGxiYWNrJiBjYWxsYmFjayA9IG51bGxwdHIsCisgICAgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAogICAgIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUgPSAiIiwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIpOwotICBjbVNvdXJjZUZpbGUqIEFkZEN1c3RvbUNvbW1hbmRUb091dHB1dCgKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSA9ICIiLCBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wgPSAiIiwKKyAgICBib29sIHN0ZFBpcGVzVVRGOCA9IGZhbHNlKTsKKyAgdm9pZCBBZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzLAogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1haW5fZGVwZW5kZW5jeSwKICAgICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCiAgICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY29uc3QgY2hhciogY29tbWVudCwKLSAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSA9IHRydWUsCisgICAgY29uc3QgY2hhciogd29ya2luZ0RpciwgY29uc3QgQ29tbWFuZFNvdXJjZUNhbGxiYWNrJiBjYWxsYmFjayA9IG51bGxwdHIsCisgICAgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAogICAgIGJvb2wgdXNlc190ZXJtaW5hbCA9IGZhbHNlLCBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlcGZpbGUgPSAiIiwgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sID0gIiIpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlID0gIiIsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiLAorICAgIGJvb2wgc3RkUGlwZXNVVEY4ID0gZmFsc2UpOwogICB2b2lkIEFkZEN1c3RvbUNvbW1hbmRPbGRTdHlsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKQEAgLTI0NCw3ICsyNjIsNyBAQAogCiAgIC8qKiBDcmVhdGUgYSB0YXJnZXQgaW5zdGFuY2UgZm9yIHRoZSB1dGlsaXR5LiAgKi8KICAgY21UYXJnZXQqIEFkZE5ld1V0aWxpdHlUYXJnZXQoY29uc3Qgc3RkOjpzdHJpbmcmIHV0aWxpdHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUNvbW1hbmRPcmlnaW4gb3JpZ2luLCBib29sIGV4Y2x1ZGVGcm9tQWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlRnJvbUFsbCk7CiAKICAgLyoqCiAgICAqIEFkZCBhbiBleGVjdXRhYmxlIHRvIHRoZSBidWlsZC4KQEAgLTI1OSwxNyArMjc3LDE3IEBACiAgIGNtVXRpbGl0eU91dHB1dCBHZXRVdGlsaXR5T3V0cHV0KGNtVGFyZ2V0KiB0YXJnZXQpOwogCiAgIC8qKgotICAgKiBBZGQgYSB1dGlsaXR5IHRvIHRoZSBidWlsZC4gIEEgdXRpbGl0eSB0YXJnZXQgaXMgYSBjb21tYW5kIHRoYXQKLSAgICogaXMgcnVuIGV2ZXJ5IHRpbWUgdGhlIHRhcmdldCBpcyBidWlsdC4KKyAgICogRGlzcGF0Y2ggYWRkaW5nIGEgdXRpbGl0eSB0byB0aGUgYnVpbGQuICBBIHV0aWxpdHkgdGFyZ2V0IGlzIGEgY29tbWFuZAorICAgKiB0aGF0IGlzIHJ1biBldmVyeSB0aW1lIHRoZSB0YXJnZXQgaXMgYnVpbHQuCiAgICAqLwogICBjbVRhcmdldCogQWRkVXRpbGl0eUNvbW1hbmQoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHV0aWxpdHlOYW1lLCBjbUNvbW1hbmRPcmlnaW4gb3JpZ2luLAotICAgIGJvb2wgZXhjbHVkZUZyb21BbGwsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXJlY3RvcnksCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB1dGlsaXR5TmFtZSwgYm9vbCBleGNsdWRlRnJvbUFsbCwKKyAgICBjb25zdCBjaGFyKiB3b3JraW5nRGlyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAogICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsIGJvb2wgZXNjYXBlT2xkU3R5bGUgPSB0cnVlLAogICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQgPSBudWxscHRyLCBib29sIHVzZXNfdGVybWluYWwgPSBmYWxzZSwKLSAgICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiKTsKKyAgICBib29sIGNvbW1hbmRfZXhwYW5kX2xpc3RzID0gZmFsc2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCA9ICIiLAorICAgIGJvb2wgc3RkUGlwZXNVVEY4ID0gZmFsc2UpOwogCiAgIC8qKgogICAgKiBBZGQgYSBzdWJkaXJlY3RvcnkgdG8gdGhlIGJ1aWxkLgpAQCAtMzA0LDYgKzMyMiwxMiBAQAogICB2b2lkIEFkZENhY2hlRGVmaW5pdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgY2hhciogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRvYywgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlID0gZmFsc2UpOworICB2b2lkIEFkZENhY2hlRGVmaW5pdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkb2MsIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZSA9IGZhbHNlKQorICB7CisgICAgQWRkQ2FjaGVEZWZpbml0aW9uKG5hbWUsIHZhbHVlLmNfc3RyKCksIGRvYywgdHlwZSwgZm9yY2UpOworICB9CiAKICAgLyoqCiAgICAqIFJlbW92ZSBhIHZhcmlhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgYnVpbGQuICBUaGlzIGlzIG5vdCB2YWxpZApAQCAtMzE4LDEyICszNDIsMTkgQEAKICAgICovCiAgIHZvaWQgU2V0UHJvamVjdE5hbWUoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUpOwogCi0gIC8qKiBHZXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGdlbmVyYXRlZC4gICovCi0gIHN0ZDo6c3RyaW5nIEdldENvbmZpZ3VyYXRpb25zKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29uZmlncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaW5nbGUgPSB0cnVlKSBjb25zdDsKKyAgLyogR2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KKyAgc3RkOjpzdHJpbmcgR2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKSBjb25zdDsKKworICBlbnVtIEdlbmVyYXRvckNvbmZpZ1F1ZXJ5CisgIHsKKyAgICBJbmNsdWRlRW1wdHlDb25maWcsIC8vIEluY2x1ZGUgIiIgYWthIG5vY29uZmlnCisgICAgRXhjbHVkZUVtcHR5Q29uZmlnLCAvLyBFeGNsdWRlICIiIGFrYSBub2NvbmZpZworICAgIE9ubHlNdWx0aUNvbmZpZywKKyAgfTsKIAogICAvKiogR2V0IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgZGVwZW5kZW5jeSBjaGVja2luZy4gICovCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRHZW5lcmF0b3JDb25maWdzKCkgY29uc3Q7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBHZXRHZW5lcmF0b3JDb25maWdzKAorICAgIEdlbmVyYXRvckNvbmZpZ1F1ZXJ5IG1vZGUpIGNvbnN0OwogCiAgIC8qKgogICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkuCkBAIC0zMzIsNyArMzYzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc3JjcywKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlRnJvbUFsbCA9IGZhbHNlKTsKLSAgdm9pZCBBZGRBbGlhcyhjb25zdCBzdGQ6OnN0cmluZyYgbGlibmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHRndCk7CisgIHZvaWQgQWRkQWxpYXMoY29uc3Qgc3RkOjpzdHJpbmcmIGxpYm5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0Z3QsCisgICAgICAgICAgICAgICAgYm9vbCBnbG9iYWxseVZpc2libGUgPSB0cnVlKTsKIAogICAvL0B7CiAgIC8qKgpAQCAtMzk4LDcgKzQzMCw4IEBACiAgIH0KICAgY29uc3QgY2hhciogR2V0SW5jbHVkZVJlZ3VsYXJFeHByZXNzaW9uKCkgY29uc3QKICAgewotICAgIHJldHVybiB0aGlzLT5HZXRQcm9wZXJ0eSgiSU5DTFVERV9SRUdVTEFSX0VYUFJFU1NJT04iKTsKKyAgICBjbVByb3AgcCA9IHRoaXMtPkdldFByb3BlcnR5KCJJTkNMVURFX1JFR1VMQVJfRVhQUkVTU0lPTiIpOworICAgIHJldHVybiBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHI7CiAgIH0KIAogICAvKioKQEAgLTQwOSw5ICs0NDIsOSBAQAogICB7CiAgICAgdGhpcy0+Q29tcGxhaW5GaWxlUmVndWxhckV4cHJlc3Npb24gPSByZWdleDsKICAgfQotICBjb25zdCBjaGFyKiBHZXRDb21wbGFpblJlZ3VsYXJFeHByZXNzaW9uKCkgY29uc3QKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIEdldENvbXBsYWluUmVndWxhckV4cHJlc3Npb24oKSBjb25zdAogICB7Ci0gICAgcmV0dXJuIHRoaXMtPkNvbXBsYWluRmlsZVJlZ3VsYXJFeHByZXNzaW9uLmNfc3RyKCk7CisgICAgcmV0dXJuIHRoaXMtPkNvbXBsYWluRmlsZVJlZ3VsYXJFeHByZXNzaW9uOwogICB9CiAKICAgLy8gLS0gTGlzdCBvZiB0YXJnZXRzCkBAIC00MjEsNyArNDU0LDcgQEAKICAgLyoqIEdldCB0aGUgdGFyZ2V0IG1hcCAtIGNvbnN0IHZlcnNpb24gKi8KICAgY21UYXJnZXRNYXAgY29uc3QmIEdldFRhcmdldHMoKSBjb25zdCB7IHJldHVybiB0aGlzLT5UYXJnZXRzOyB9CiAKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21UYXJnZXQqPiYgR2V0T3duZWRJbXBvcnRlZFRhcmdldHMoKSBjb25zdAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21UYXJnZXQ+PiYgR2V0T3duZWRJbXBvcnRlZFRhcmdldHMoKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPkltcG9ydGVkVGFyZ2V0c093bmVkOwogICB9CkBAIC00ODcsNiArNTIwLDggQEAKICAgY29uc3Qgc3RkOjpzdHJpbmcmIEdldFNhZmVEZWZpbml0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3Q7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRSZXF1aXJlZERlZmluaXRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OwogICBib29sIElzRGVmaW5pdGlvblNldChjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0OworICBib29sIEdldERlZkV4cGFuZExpc3QoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbXB0eUFyZ3MgPSBmYWxzZSkgY29uc3Q7CiAgIC8qKgogICAgKiBHZXQgdGhlIGxpc3Qgb2YgYWxsIHZhcmlhYmxlcyBpbiB0aGUgY3VycmVudCBzcGFjZS4gSWYgYXJndW1lbnQKICAgICogY2FjaGVvbmx5IGlzIHNwZWNpZmllZCBhbmQgaXMgZ3JlYXRlciB0aGFuIDAsIHRoZW4gb25seSBjYWNoZQpAQCAtNjU4LDYgKzY5Myw3IEBACiAgICAqLwogICBpbnQgQ29uZmlndXJlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgaW5maWxlLCBjb25zdCBzdGQ6OnN0cmluZyYgb3V0ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb3B5b25seSwgYm9vbCBhdE9ubHksIGJvb2wgZXNjYXBlUXVvdGVzLAorICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9zb3VyY2VfcGVybWlzc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgIGNtTmV3TGluZVN0eWxlID0gY21OZXdMaW5lU3R5bGUoKSk7CiAKICAgLyoqCkBAIC03MTcsNyArNzUzLDcgQEAKICAgLyoqCiAgICAqIEdldCBhbGwgdGhlIHNvdXJjZSBmaWxlcyB0aGlzIG1ha2VmaWxlIGtub3dzIGFib3V0CiAgICAqLwotICBjb25zdCBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPiYgR2V0U291cmNlRmlsZXMoKSBjb25zdAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21Tb3VyY2VGaWxlPj4mIEdldFNvdXJjZUZpbGVzKCkgY29uc3QKICAgewogICAgIHJldHVybiB0aGlzLT5Tb3VyY2VGaWxlczsKICAgfQpAQCAtNzU2LDQ1ICs3OTIsNTAgQEAKICAgc3RkOjpzdHJpbmcgR2V0TW9kdWxlc0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0CiAgIHsKICAgICBib29sIHN5c3RlbTsKLSAgICByZXR1cm4gdGhpcy0+R2V0TW9kdWxlc0ZpbGUobmFtZSwgc3lzdGVtKTsKKyAgICBzdGQ6OnN0cmluZyBkZWJ1Z0J1ZmZlcjsKKyAgICByZXR1cm4gdGhpcy0+R2V0TW9kdWxlc0ZpbGUobmFtZSwgc3lzdGVtLCBmYWxzZSwgZGVidWdCdWZmZXIpOwogICB9CiAKLSAgc3RkOjpzdHJpbmcgR2V0TW9kdWxlc0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGJvb2wmIHN5c3RlbSkgY29uc3Q7CisgIC8qKgorICAgKiBSZXR1cm4gYSBsb2NhdGlvbiBvZiBhIGZpbGUgaW4gY21ha2Ugb3IgY3VzdG9tIG1vZHVsZXMgZGlyZWN0b3J5CisgICAqLworICBzdGQ6OnN0cmluZyBHZXRNb2R1bGVzRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgYm9vbCYgc3lzdGVtKSBjb25zdAorICB7CisgICAgc3RkOjpzdHJpbmcgZGVidWdCdWZmZXI7CisgICAgcmV0dXJuIHRoaXMtPkdldE1vZHVsZXNGaWxlKG5hbWUsIHN5c3RlbSwgZmFsc2UsIGRlYnVnQnVmZmVyKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIEdldE1vZHVsZXNGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBib29sJiBzeXN0ZW0sIGJvb2wgZGVidWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkZWJ1Z0J1ZmZlcikgY29uc3Q7CiAKICAgLy8hIFNldC9HZXQgYSBwcm9wZXJ0eSBvZiB0aGlzIGRpcmVjdG9yeQogICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlLAorICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKLSAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OwotICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgYm9vbCBjaGFpbikgY29uc3Q7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgYm9vbCBjaGFpbikgY29uc3Q7CiAgIGJvb2wgR2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0UHJvcGVydHlLZXlzKCkgY29uc3Q7CiAKICAgLy8hIEluaXRpYWxpemUgYSBtYWtlZmlsZSBmcm9tIGl0cyBwYXJlbnQKICAgdm9pZCBJbml0aWFsaXplRnJvbVBhcmVudChjbU1ha2VmaWxlKiBwYXJlbnQpOwogCi0gIHZvaWQgQWRkSW5zdGFsbEdlbmVyYXRvcihjbUluc3RhbGxHZW5lcmF0b3IqIGcpCi0gIHsKLSAgICBpZiAoZykgewotICAgICAgdGhpcy0+SW5zdGFsbEdlbmVyYXRvcnMucHVzaF9iYWNrKGcpOwotICAgIH0KLSAgfQotICBzdGQ6OnZlY3RvcjxjbUluc3RhbGxHZW5lcmF0b3IqPiYgR2V0SW5zdGFsbEdlbmVyYXRvcnMoKQorICB2b2lkIEFkZEluc3RhbGxHZW5lcmF0b3Ioc3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbEdlbmVyYXRvcj4gZyk7CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbEdlbmVyYXRvcj4+JiBHZXRJbnN0YWxsR2VuZXJhdG9ycygpCiAgIHsKICAgICByZXR1cm4gdGhpcy0+SW5zdGFsbEdlbmVyYXRvcnM7CiAgIH0KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21JbnN0YWxsR2VuZXJhdG9yKj4mIEdldEluc3RhbGxHZW5lcmF0b3JzKCkgY29uc3QKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbEdlbmVyYXRvcj4+JgorICBHZXRJbnN0YWxsR2VuZXJhdG9ycygpIGNvbnN0CiAgIHsKICAgICByZXR1cm4gdGhpcy0+SW5zdGFsbEdlbmVyYXRvcnM7CiAgIH0KIAotICB2b2lkIEFkZFRlc3RHZW5lcmF0b3IoY21UZXN0R2VuZXJhdG9yKiBnKQotICB7Ci0gICAgaWYgKGcpIHsKLSAgICAgIHRoaXMtPlRlc3RHZW5lcmF0b3JzLnB1c2hfYmFjayhnKTsKLSAgICB9Ci0gIH0KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y21UZXN0R2VuZXJhdG9yKj4mIEdldFRlc3RHZW5lcmF0b3JzKCkgY29uc3QKKyAgdm9pZCBBZGRUZXN0R2VuZXJhdG9yKHN0ZDo6dW5pcXVlX3B0cjxjbVRlc3RHZW5lcmF0b3I+IGcpOworCisgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVRlc3RHZW5lcmF0b3I+PiYgR2V0VGVzdEdlbmVyYXRvcnMoKQorICAgIGNvbnN0CiAgIHsKICAgICByZXR1cm4gdGhpcy0+VGVzdEdlbmVyYXRvcnM7CiAgIH0KQEAgLTg5MiwyMSArOTMzLDYgQEAKIAogICBib29sIFBvbGljeU9wdGlvbmFsV2FybmluZ0VuYWJsZWQoc3RkOjpzdHJpbmcgY29uc3QmIHZhcik7CiAKLSAgYm9vbCBBZGRSZXF1aXJlZFRhcmdldEZlYXR1cmUoY21UYXJnZXQqIHRhcmdldCwgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvciA9IG51bGxwdHIpIGNvbnN0OwotCi0gIGJvb2wgQ29tcGlsZUZlYXR1cmVLbm93bihjbVRhcmdldCBjb25zdCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBsYW5nLCBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0OwotCi0gIGNvbnN0IGNoYXIqIENvbXBpbGVGZWF0dXJlc0F2YWlsYWJsZShjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3Q7Ci0KLSAgYm9vbCBIYXZlU3RhbmRhcmRBdmFpbGFibGUoY21UYXJnZXQgY29uc3QqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlKSBjb25zdDsKLQotICBib29sIElzTGF0ZXJTdGFuZGFyZChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgc3RkOjpzdHJpbmcgY29uc3QmIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHJocyk7Ci0KICAgdm9pZCBQdXNoTG9vcEJsb2NrKCk7CiAgIHZvaWQgUG9wTG9vcEJsb2NrKCk7CiAgIGJvb2wgSXNMb29wQmxvY2soKSBjb25zdDsKQEAgLTkyNywxMiArOTUzLDE0IEBACiAgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBvdXRwdXROYW1lLAogICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY29uZGl0aW9uLAogICAgIGJvb2wgaW5wdXRJc0NvbnRlbnQpOwotICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvckV4cHJlc3Npb25FdmFsdWF0aW9uRmlsZSo+IEdldEV2YWx1YXRpb25GaWxlcygpIGNvbnN0OworICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGU+PiYKKyAgR2V0RXZhbHVhdGlvbkZpbGVzKCkgY29uc3Q7CiAKLSAgc3RkOjp2ZWN0b3I8Y21FeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IqPiBHZXRFeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3JzKCkKLSAgICBjb25zdDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yPj4gY29uc3QmCisgIEdldEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcnMoKSBjb25zdDsKICAgdm9pZCBSZW1vdmVFeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3JDTVAwMDI0KGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKiBnZW4pOwotICB2b2lkIEFkZEV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvcihjbUV4cG9ydEJ1aWxkRmlsZUdlbmVyYXRvciogZ2VuKTsKKyAgdm9pZCBBZGRFeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3IoCisgICAgc3RkOjp1bmlxdWVfcHRyPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yPiBnZW4pOwogCiAgIC8vIE1haW50YWluIGEgc3RhY2sgb2YgcGFja2FnZSByb290cyB0byBhbGxvdyBuZXN0ZWQgUEFDS0FHRV9ST09UX1BBVEgKICAgLy8gc2VhcmNoZXMKQEAgLTk1MCw5ICs5NzgsNiBAQAogICAvLyBhZGQgbGluayBsaWJyYXJpZXMgYW5kIGRpcmVjdG9yaWVzIHRvIHRoZSB0YXJnZXQKICAgdm9pZCBBZGRHbG9iYWxMaW5rSW5mb3JtYXRpb24oY21UYXJnZXQmIHRhcmdldCk7CiAKLSAgLy8gQ2hlY2sgZm9yIGEgYW4gdW51c2VkIHZhcmlhYmxlCi0gIHZvaWQgTG9nVW51c2VkKGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OwotCiAgIG11dGFibGUgc3RkOjpzZXQ8Y21MaXN0RmlsZUNvbnRleHQ+IENNUDAwNTRSZXBvcnRlZElkczsKIAogICAvLyBsaWJyYXJpZXMsIGNsYXNzZXMsIGFuZCBleGVjdXRhYmxlcwpAQCAtOTYyLDggKzk4Nyw3IEBACiAgIHVzaW5nIFRhcmdldHNWZWMgPSBzdGQ6OnZlY3RvcjxjbVRhcmdldCo+OwogICBUYXJnZXRzVmVjIE9yZGVyZWRUYXJnZXRzOwogCi0gIHVzaW5nIFNvdXJjZUZpbGVWZWMgPSBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUqPjsKLSAgU291cmNlRmlsZVZlYyBTb3VyY2VGaWxlczsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtU291cmNlRmlsZT4+IFNvdXJjZUZpbGVzOwogCiAgIC8vIEJlY2F1c2UgY21Tb3VyY2VGaWxlIG5hbWVzIGFyZSBjb21wYXJlZCBpbiBhIGZ1enp5IHdheSAoc2VlCiAgIC8vIGNtU291cmNlRmlsZUxvY2F0aW9uOjpNYXRjaCgpKSB3ZSBjYW4ndCBoYXZlIGEgc3RyYWlnaHQgbWFwcGluZyBmcm9tCkBAIC05NzEsMTQgKzk5NSwxNSBAQAogICAvLyBOYW1lIHBvcnRpb24gb2YgdGhlIGNtU291cmNlRmlsZUxvY2F0aW9uIGFuZCB0aGVuIGNvbXBhcmUgb24gdGhlIGxpc3Qgb2YKICAgLy8gY21Tb3VyY2VGaWxlcyB0aGF0IG1pZ2h0IG1hdGNoIHRoYXQgbmFtZS4gIE5vdGUgdGhhdCBvbiBwbGF0Zm9ybXMgd2hpY2gKICAgLy8gaGF2ZSBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSB3ZSBzdG9yZSB0aGUga2V5IGluIGFsbCBsb3dlcmNhc2UuCi0gIHVzaW5nIFNvdXJjZUZpbGVNYXAgPSBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIFNvdXJjZUZpbGVWZWM+OworICB1c2luZyBTb3VyY2VGaWxlTWFwID0KKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSo+PjsKICAgU291cmNlRmlsZU1hcCBTb3VyY2VGaWxlU2VhcmNoSW5kZXg7CiAKICAgLy8gRm9yICJLbm93biIgcGF0aHMgd2UgY2FuIHN0b3JlIGEgZGlyZWN0IGZpbGVuYW1lIHRvIGNtU291cmNlRmlsZSBtYXAKICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBjbVNvdXJjZUZpbGUqPiBLbm93bkZpbGVTZWFyY2hJbmRleDsKIAogICAvLyBUZXN0cwotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21UZXN0Kj4gVGVzdHM7CisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Y21UZXN0Pj4gVGVzdHM7CiAKICAgLy8gVGhlIHNldCBvZiBpbmNsdWRlIGRpcmVjdG9yaWVzIHRoYXQgYXJlIG1hcmtlZCBhcyBzeXN0ZW0gaW5jbHVkZQogICAvLyBkaXJlY3Rvcmllcy4KQEAgLTk4Nyw4ICsxMDEyLDggQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IExpc3RGaWxlczsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IE91dHB1dEZpbGVzOwogCi0gIHN0ZDo6dmVjdG9yPGNtSW5zdGFsbEdlbmVyYXRvcio+IEluc3RhbGxHZW5lcmF0b3JzOwotICBzdGQ6OnZlY3RvcjxjbVRlc3RHZW5lcmF0b3IqPiBUZXN0R2VuZXJhdG9yczsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtSW5zdGFsbEdlbmVyYXRvcj4+IEluc3RhbGxHZW5lcmF0b3JzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21UZXN0R2VuZXJhdG9yPj4gVGVzdEdlbmVyYXRvcnM7CiAKICAgc3RkOjpzdHJpbmcgQ29tcGxhaW5GaWxlUmVndWxhckV4cHJlc3Npb247CiAgIHN0ZDo6c3RyaW5nIERlZmluZUZsYWdzOwpAQCAtMTAwMSw3ICsxMDI2LDYgQEAKICAgc2l6ZV90IE9iamVjdExpYnJhcmllc1NvdXJjZUdyb3VwSW5kZXg7CiAjZW5kaWYKIAotICBzdGQ6OnZlY3RvcjxGaW5hbEFjdGlvbj4gRmluYWxBY3Rpb25zOwogICBjbUdsb2JhbEdlbmVyYXRvciogR2xvYmFsR2VuZXJhdG9yOwogICBib29sIElzRnVuY3Rpb25CbG9ja2VkKGNvbnN0IGNtTGlzdEZpbGVGdW5jdGlvbiYgbGZmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpOwpAQCAtMTAxMSw2ICsxMDM1LDggQEAKICAgY21MaXN0RmlsZUJhY2t0cmFjZSBCYWNrdHJhY2U7CiAgIGludCBSZWN1cnNpb25EZXB0aDsKIAorICB2b2lkIERvR2VuZXJhdGUoY21Mb2NhbEdlbmVyYXRvciYgbGcpOworCiAgIHZvaWQgUmVhZExpc3RGaWxlKGNtTGlzdEZpbGUgY29uc3QmIGxpc3RGaWxlLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWV0b3JlYWQpOwogCkBAIC0xMDM2LDE1ICsxMDYyLDE3IEBACiAgIG11dGFibGUgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIGNtTmFtZWRDdXJseTsKIAogICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4gVW5Db25maWd1cmVkRGlyZWN0b3JpZXM7Ci0gIHN0ZDo6dmVjdG9yPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yKj4gRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yczsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtRXhwb3J0QnVpbGRGaWxlR2VuZXJhdG9yPj4KKyAgICBFeHBvcnRCdWlsZEZpbGVHZW5lcmF0b3JzOwogCi0gIHN0ZDo6dmVjdG9yPGNtR2VuZXJhdG9yRXhwcmVzc2lvbkV2YWx1YXRpb25GaWxlKj4gRXZhbHVhdGlvbkZpbGVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21HZW5lcmF0b3JFeHByZXNzaW9uRXZhbHVhdGlvbkZpbGU+PgorICAgIEV2YWx1YXRpb25GaWxlczsKIAogICBzdGQ6OnZlY3RvcjxjbUV4ZWN1dGlvblN0YXR1cyo+IEV4ZWN1dGlvblN0YXR1c1N0YWNrOwogICBmcmllbmQgY2xhc3MgY21NYWtlZmlsZUNhbGw7CiAgIGZyaWVuZCBjbGFzcyBjbVBhcnNlRmlsZVNjb3BlOwogCi0gIHN0ZDo6dmVjdG9yPGNtVGFyZ2V0Kj4gSW1wb3J0ZWRUYXJnZXRzT3duZWQ7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVRhcmdldD4+IEltcG9ydGVkVGFyZ2V0c093bmVkOwogICB1c2luZyBUYXJnZXRNYXAgPSBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGNtVGFyZ2V0Kj47CiAgIFRhcmdldE1hcCBJbXBvcnRlZFRhcmdldHM7CiAKQEAgLTEwODAsMzggKzExMDgsMTUgQEAKIAogICBib29sIFZhbGlkYXRlQ3VzdG9tQ29tbWFuZChjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzKSBjb25zdDsKIAotICB2b2lkIENyZWF0ZUdlbmVyYXRlZFNvdXJjZXMoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzKTsKKyAgdm9pZCBDcmVhdGVHZW5lcmF0ZWRPdXRwdXRzKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgb3V0cHV0cyk7CisgIHZvaWQgQ3JlYXRlR2VuZXJhdGVkQnlwcm9kdWN0cyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMpOwogCi0gIHZvaWQgQ29tbWl0Q3VzdG9tQ29tbWFuZFRvVGFyZ2V0KAotICAgIGNtVGFyZ2V0KiB0YXJnZXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYnlwcm9kdWN0cywKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGRlcGVuZHMsCi0gICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcywgY21DdXN0b21Db21tYW5kVHlwZSB0eXBlLAotICAgIGNvbnN0IGNoYXIqIGNvbW1lbnQsIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgZXNjYXBlT2xkU3R5bGUsCi0gICAgYm9vbCB1c2VzX3Rlcm1pbmFsLCBjb25zdCBzdGQ6OnN0cmluZyYgZGVwZmlsZSwKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgam9iX3Bvb2wsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMpOwotICBjbVNvdXJjZUZpbGUqIENvbW1pdEN1c3RvbUNvbW1hbmRUb091dHB1dCgKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG91dHB1dHMsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBieXByb2R1Y3RzLAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFpbl9kZXBlbmRlbmN5LAotICAgIGNvbnN0IGNtSW1wbGljaXREZXBlbmRzTGlzdCYgaW1wbGljaXRfZGVwZW5kcywKLSAgICBjb25zdCBjbUN1c3RvbUNvbW1hbmRMaW5lcyYgY29tbWFuZExpbmVzLCBjb25zdCBjaGFyKiBjb21tZW50LAotICAgIGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIsIGJvb2wgcmVwbGFjZSwgYm9vbCBlc2NhcGVPbGRTdHlsZSwKLSAgICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXBmaWxlLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBqb2JfcG9vbCk7Ci0gIHZvaWQgQ29tbWl0QXBwZW5kQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvdXRwdXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZGVwZW5kcywKLSAgICBjb25zdCBjbUltcGxpY2l0RGVwZW5kc0xpc3QmIGltcGxpY2l0X2RlcGVuZHMsCi0gICAgY29uc3QgY21DdXN0b21Db21tYW5kTGluZXMmIGNvbW1hbmRMaW5lcyk7CisgIHN0ZDo6dmVjdG9yPEJUPEdlbmVyYXRvckFjdGlvbj4+IEdlbmVyYXRvckFjdGlvbnM7CisgIGJvb2wgR2VuZXJhdG9yQWN0aW9uc0ludm9rZWQgPSBmYWxzZTsKKyAgYm9vbCBEZWxheWVkT3V0cHV0RmlsZXNIYXZlR2VuZXggPSBmYWxzZTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IERlbGF5ZWRPdXRwdXRGaWxlczsKIAotICB2b2lkIENvbW1pdFV0aWxpdHlDb21tYW5kKGNtVGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNtVXRpbGl0eU91dHB1dCYgZm9yY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogd29ya2luZ0RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBkZXBlbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtQ3VzdG9tQ29tbWFuZExpbmVzJiBjb21tYW5kTGluZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlc2NhcGVPbGRTdHlsZSwgY29uc3QgY2hhciogY29tbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZXNfdGVybWluYWwsIGJvb2wgY29tbWFuZF9leHBhbmRfbGlzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGpvYl9wb29sKTsKKyAgdm9pZCBBZGREZWxheWVkT3V0cHV0KHN0ZDo6c3RyaW5nIGNvbnN0JiBvdXRwdXQpOwogCiAgIC8qKgogICAgKiBTZWUgTGluZWFyR2V0U291cmNlRmlsZVdpdGhPdXRwdXQgZm9yIGJhY2tncm91bmQgaW5mb3JtYXRpb24KQEAgLTExMzEsNiArMTEzNiw3IEBACiAgIHN0cnVjdCBTb3VyY2VFbnRyeQogICB7CiAgICAgY21Tb3VyY2VzV2l0aE91dHB1dCBTb3VyY2VzOworICAgIGJvb2wgU291cmNlTWlnaHRCZU91dHB1dCA9IGZhbHNlOwogICB9OwogCiAgIC8vIEEgbWFwIGZvciBmYXN0IG91dHB1dCB0byBpbnB1dCBsb29rIHVwLgpAQCAtMTE0NiwzNCArMTE1Miw2IEBACiAgICAqLwogICBib29sIE1pZ2h0SGF2ZUN1c3RvbUNvbW1hbmQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OwogCi0gIGJvb2wgQWRkUmVxdWlyZWRUYXJnZXRDRmVhdHVyZShjbVRhcmdldCogdGFyZ2V0LCBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yID0gbnVsbHB0cikgY29uc3Q7Ci0KLSAgYm9vbCBBZGRSZXF1aXJlZFRhcmdldEN4eEZlYXR1cmUoY21UYXJnZXQqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IgPSBudWxscHRyKSBjb25zdDsKLQotICB2b2lkIENoZWNrTmVlZGVkQ0xhbmd1YWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBib29sJiBuZWVkQzkwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIG5lZWRDOTksIGJvb2wmIG5lZWRDMTEpIGNvbnN0OwotICB2b2lkIENoZWNrTmVlZGVkQ3h4TGFuZ3VhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgYm9vbCYgbmVlZEN4eDk4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgbmVlZEN4eDExLCBib29sJiBuZWVkQ3h4MTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBuZWVkQ3h4MTcsIGJvb2wmIG5lZWRDeHgyMCkgY29uc3Q7Ci0KLSAgYm9vbCBIYXZlQ1N0YW5kYXJkQXZhaWxhYmxlKGNtVGFyZ2V0IGNvbnN0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKLSAgYm9vbCBIYXZlQ3h4U3RhbmRhcmRBdmFpbGFibGUoY21UYXJnZXQgY29uc3QqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKLQotICB2b2lkIENoZWNrRm9yVW51c2VkVmFyaWFibGVzKCkgY29uc3Q7Ci0KLSAgLy8gVW51c2VkIHZhcmlhYmxlIGZsYWdzCi0gIGJvb2wgV2FyblVudXNlZDsKICAgYm9vbCBDaGVja1N5c3RlbVZhcnM7CiAgIGJvb2wgQ2hlY2tDTVAwMDAwOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gV2FybmVkQ01QMDA3NDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1ha2VmaWxlRXhlY3V0YWJsZVRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21NYWtlZmlsZUV4ZWN1dGFibGVUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IDQwMjY1ZmYuLmJjMjg4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1ha2VmaWxlRXhlY3V0YWJsZVRhcmdldEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTWFrZWZpbGVFeGVjdXRhYmxlVGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtOSw4ICs5LDggQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKQEAgLTM1LDEwICszNSw5IEBACiB7CiAgIHRoaXMtPkN1c3RvbUNvbW1hbmREcml2ZXIgPSBPbkRlcGVuZHM7CiAgIHRoaXMtPlRhcmdldE5hbWVzID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4ZWN1dGFibGVOYW1lcyh0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4ZWN1dGFibGVOYW1lcyh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCi0gIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvciA9Ci0gICAgY206Om1ha2VfdW5pcXVlPGNtT1NYQnVuZGxlR2VuZXJhdG9yPih0YXJnZXQsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3IgPSBjbTo6bWFrZV91bmlxdWU8Y21PU1hCdW5kbGVHZW5lcmF0b3I+KHRhcmdldCk7CiAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+U2V0TWFjQ29udGVudEZvbGRlcnMoJnRoaXMtPk1hY0NvbnRlbnRGb2xkZXJzKTsKIH0KIApAQCAtNjQsNyArNjMsNyBAQAogCiAgIC8vIHdyaXRlIHRoZSBsaW5rIHJ1bGVzCiAgIHRoaXMtPldyaXRlRXhlY3V0YWJsZVJ1bGUoZmFsc2UpOwotICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbCh0aGlzLT5Db25maWdOYW1lKSkgeworICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbCh0aGlzLT5HZXRDb25maWdOYW1lKCkpKSB7CiAgICAgLy8gV3JpdGUgcnVsZXMgdG8gbGluayBhbiBpbnN0YWxsYWJsZSB2ZXJzaW9uIG9mIHRoZSB0YXJnZXQuCiAgICAgdGhpcy0+V3JpdGVFeGVjdXRhYmxlUnVsZSh0cnVlKTsKICAgfQpAQCAtODUsNyArODQsNyBAQAogewogI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKICAgY29uc3QgYm9vbCByZXF1aXJlc0RldmljZUxpbmtpbmcgPSByZXF1aXJlRGV2aWNlTGlua2luZygKLSAgICAqdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCAqdGhpcy0+TG9jYWxHZW5lcmF0b3IsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgICp0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICp0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgaWYgKCFyZXF1aXJlc0RldmljZUxpbmtpbmcpIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTEyMywzMSArMTIyLDE1IEBACiAgIH0KIAogICAvLyBCdWlsZCBhIGxpc3Qgb2YgY29tcGlsZXIgZmxhZ3MgYW5kIGxpbmtlciBmbGFncy4KLSAgc3RkOjpzdHJpbmcgZmxhZ3M7CisgIHN0ZDo6c3RyaW5nIGxhbmdGbGFnczsKICAgc3RkOjpzdHJpbmcgbGlua0ZsYWdzOwogCi0gIC8vIEFkZCBmbGFncyB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZS4KLSAgLy8gQWRkIHN5bWJvbCBleHBvcnQgZmxhZ3MgaWYgbmVjZXNzYXJ5LgotICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5Jc0V4ZWN1dGFibGVXaXRoRXhwb3J0cygpKSB7Ci0gICAgc3RkOjpzdHJpbmcgZXhwb3J0X2ZsYWdfdmFyID0KLSAgICAgIGNtU3RyQ2F0KCJDTUFLRV9FWEVfRVhQT1JUU18iLCBsaW5rTGFuZ3VhZ2UsICJfRkxBRyIpOwotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncygKLSAgICAgIGxpbmtGbGFncywgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKGV4cG9ydF9mbGFnX3ZhcikpOwotICB9Ci0KLSAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZsYWdzKGxpbmtGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRMaW5rTGlic0NNUDAwNjUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtMYW5ndWFnZSwgKnRoaXMtPkdlbmVyYXRvclRhcmdldCkpOwotCiAgIC8vIEFkZCBsYW5ndWFnZSBmZWF0dXJlIGZsYWdzLgogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoCi0gICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICBsYW5nRmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCi0gIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRBcmNoaXRlY3R1cmVGbGFncyhmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0xhbmd1YWdlLCB0aGlzLT5Db25maWdOYW1lKTsKLQotICAvLyBBZGQgdGFyZ2V0LXNwZWNpZmljIGxpbmtlciBmbGFncy4KLSAgdGhpcy0+R2V0VGFyZ2V0TGlua0ZsYWdzKGxpbmtGbGFncywgbGlua0xhbmd1YWdlKTsKKyAgLy8gQWRkIGRldmljZS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MuCisgIHRoaXMtPkdldERldmljZUxpbmtGbGFncyhsaW5rRmxhZ3MsIGxpbmtMYW5ndWFnZSk7CiAKICAgLy8gQ29uc3RydWN0IGEgbGlzdCBvZiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBleGVjdXRhYmxlIHRoYXQKICAgLy8gbWF5IG5lZWQgdG8gYmUgY2xlYW5lZC4KQEAgLTE5Nyw2ICsxODAsOCBAQAogICAgIHRoaXMtPkNyZWF0ZU9iamVjdExpc3RzKHVzZUxpbmtTY3JpcHQsIGZhbHNlLCB1c2VSZXNwb25zZUZpbGVGb3JPYmplY3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkT2JqcywgZGVwZW5kcywgdXNlV2F0Y29tUXVvdGUpOwogCisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGFpeEV4cG9ydHMgPSB0aGlzLT5HZXRBSVhFeHBvcnRzKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisKICAgICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgICAgc3RkOjpzdHJpbmcgb2JqZWN0RGlyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRTdXBwb3J0RGlyZWN0b3J5KCk7CiAKQEAgLTIxMywxNyArMTk4LDE5IEBACiAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksIHRhcmdldE91dHB1dFJlYWwpLAogICAgICAgb3V0cHV0KTsKIAotICAgIHN0ZDo6c3RyaW5nIHRhcmdldEZ1bGxQYXRoQ29tcGlsZVBEQiA9IHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKCk7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0RnVsbFBhdGhDb21waWxlUERCID0KKyAgICAgIHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0T3V0UGF0aENvbXBpbGVQREIgPQogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCh0YXJnZXRGdWxsUGF0aENvbXBpbGVQREIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAKICAgICB2YXJzLkxhbmd1YWdlID0gbGlua0xhbmd1YWdlLmNfc3RyKCk7CisgICAgdmFycy5BSVhFeHBvcnRzID0gYWl4RXhwb3J0cy5jX3N0cigpOwogICAgIHZhcnMuT2JqZWN0cyA9IGJ1aWxkT2Jqcy5jX3N0cigpOwogICAgIHZhcnMuT2JqZWN0RGlyID0gb2JqZWN0RGlyLmNfc3RyKCk7CiAgICAgdmFycy5UYXJnZXQgPSB0YXJnZXQuY19zdHIoKTsKICAgICB2YXJzLkxpbmtMaWJyYXJpZXMgPSBsaW5rTGlicy5jX3N0cigpOwotICAgIHZhcnMuRmxhZ3MgPSBmbGFncy5jX3N0cigpOworICAgIHZhcnMuTGFuZ3VhZ2VDb21waWxlRmxhZ3MgPSBsYW5nRmxhZ3MuY19zdHIoKTsKICAgICB2YXJzLkxpbmtGbGFncyA9IGxpbmtGbGFncy5jX3N0cigpOwogICAgIHZhcnMuVGFyZ2V0Q29tcGlsZVBEQiA9IHRhcmdldE91dFBhdGhDb21waWxlUERCLmNfc3RyKCk7CiAKQEAgLTIzMSw3ICsyMTgsNyBAQAogCiAgICAgY29uc3QgY2hhciogdmFsID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFJ1bGVMYXVuY2hlcigKICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgIlJVTEVfTEFVTkNIX0xJTksiKTsKLSAgICBpZiAodmFsICYmICp2YWwpIHsKKyAgICBpZiAoY21Ob25lbXB0eSh2YWwpKSB7CiAgICAgICBsYXVuY2hlciA9IGNtU3RyQ2F0KHZhbCwgJyAnKTsKICAgICB9CiAKQEAgLTI2Myw3ICsyNTAsNyBAQAogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q3JlYXRlQ0RDb21tYW5kKAogICAgIGNvbW1hbmRzMSwgdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICBjbUFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKKyAgY206OmFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKICAgY29tbWFuZHMxLmNsZWFyKCk7CiAKICAgLy8gV3JpdGUgdGhlIGJ1aWxkIHJ1bGUuCkBAIC0yODcsMTIgKzI3NCwxNCBAQAogCiAgIC8vIEdldCB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSB0byBnZW5lcmF0ZS4KICAgY21HZW5lcmF0b3JUYXJnZXQ6Ok5hbWVzIHRhcmdldE5hbWVzID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4ZWN1dGFibGVOYW1lcyh0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4ZWN1dGFibGVOYW1lcyh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgIC8vIENvbnN0cnVjdCB0aGUgZnVsbCBwYXRoIHZlcnNpb24gb2YgdGhlIG5hbWVzLgotICBzdGQ6OnN0cmluZyBvdXRwYXRoID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSk7CisgIHN0ZDo6c3RyaW5nIG91dHBhdGggPQorICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPklzQXBwQnVuZGxlT25BcHBsZSgpKSB7Ci0gICAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yLT5DcmVhdGVBcHBCdW5kbGUodGFyZ2V0TmFtZXMuT3V0cHV0LCBvdXRwYXRoKTsKKyAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUFwcEJ1bmRsZSh0YXJnZXROYW1lcy5PdXRwdXQsIG91dHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgfQogICBvdXRwYXRoICs9ICcvJzsKICAgc3RkOjpzdHJpbmcgb3V0cGF0aEltcDsKQEAgLTMwOCwxOCArMjk3LDE4IEBACiAgICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShvdXRwYXRoKTsKICAgICBpZiAoIXRhcmdldE5hbWVzLkltcG9ydExpYnJhcnkuZW1wdHkoKSkgewogICAgICAgb3V0cGF0aEltcCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KAotICAgICAgICB0aGlzLT5Db25maWdOYW1lLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCk7CisgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpOwogICAgICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShvdXRwYXRoSW1wKTsKICAgICAgIG91dHBhdGhJbXAgKz0gJy8nOwogICAgIH0KICAgfQogCiAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVQZGJPdXRwdXRQYXRoID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldENvbXBpbGVQREJEaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRDb21waWxlUERCRGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3RvcnkoY29tcGlsZVBkYk91dHB1dFBhdGgpOwogCiAgIHN0ZDo6c3RyaW5nIHBkYk91dHB1dFBhdGggPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UERCRGlyZWN0b3J5KHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UERCRGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3RvcnkocGRiT3V0cHV0UGF0aCk7CiAgIHBkYk91dHB1dFBhdGggKz0gJy8nOwogCkBAIC0zNDcsNyArMzM2LDcgQEAKIAogICAvLyBHZXQgdGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgbGlua2luZyB0aGlzIGV4ZWN1dGFibGUuCiAgIHN0ZDo6c3RyaW5nIGxpbmtMYW5ndWFnZSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBsaW5rIGxhbmd1YWdlLgogICBpZiAobGlua0xhbmd1YWdlLmVtcHR5KCkpIHsKQEAgLTM4MCw3ICszNjksNyBAQAogCiAgIC8vIEFkZCBmbGFncyB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZS4KICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZENvbmZpZ1ZhcmlhYmxlRmxhZ3MoCi0gICAgbGlua0ZsYWdzLCAiQ01BS0VfRVhFX0xJTktFUl9GTEFHUyIsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIGxpbmtGbGFncywgIkNNQUtFX0VYRV9MSU5LRVJfRkxBR1MiLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJXSU4zMl9FWEVDVVRBQkxFIikpIHsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRmxhZ3MoCkBAIC00MDksMjUgKzM5OCwyNiBAQAogCiAgIC8vIEFkZCBsYW5ndWFnZSBmZWF0dXJlIGZsYWdzLgogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoCi0gICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICBmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKLSAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZEFyY2hpdGVjdHVyZUZsYWdzKGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkQXJjaGl0ZWN0dXJlRmxhZ3MoCisgICAgZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgIC8vIEFkZCB0YXJnZXQtc3BlY2lmaWMgbGlua2VyIGZsYWdzLgogICB0aGlzLT5HZXRUYXJnZXRMaW5rRmxhZ3MobGlua0ZsYWdzLCBsaW5rTGFuZ3VhZ2UpOwogCiAgIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPiBsaW5rTGluZUNvbXB1dGVyKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIgPQogICAgICAgdGhpcy0+Q3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IsCi0gICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpKTsKKyAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSk7CiAKLSAgICB0aGlzLT5BZGRNb2R1bGVEZWZpbml0aW9uRmxhZyhsaW5rTGluZUNvbXB1dGVyLmdldCgpLCBsaW5rRmxhZ3MpOworICAgIHRoaXMtPkFkZE1vZHVsZURlZmluaXRpb25GbGFnKGxpbmtMaW5lQ29tcHV0ZXIuZ2V0KCksIGxpbmtGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICB9CiAKLSAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZElQT0xpbmtlckZsYWdzKGxpbmtGbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q29uZmlnTmFtZSwgbGlua0xhbmd1YWdlKTsKKyAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZElQT0xpbmtlckZsYWdzKAorICAgIGxpbmtGbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCB0aGlzLT5HZXRDb25maWdOYW1lKCksIGxpbmtMYW5ndWFnZSk7CiAKICAgLy8gQ29uc3RydWN0IGEgbGlzdCBvZiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBleGVjdXRhYmxlIHRoYXQKICAgLy8gbWF5IG5lZWQgdG8gYmUgY2xlYW5lZC4KQEAgLTQ1MSw3ICs0NDEsNyBAQAogICAgICAgdGFyZ2V0RnVsbFBhdGhJbXBvcnQpKTsKICAgICBzdGQ6OnN0cmluZyBpbXBsaWI7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0SW1wbGliR05VdG9NUygKLSAgICAgICAgICB0aGlzLT5Db25maWdOYW1lLCB0YXJnZXRGdWxsUGF0aEltcG9ydCwgaW1wbGliKSkgeworICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgdGFyZ2V0RnVsbFBhdGhJbXBvcnQsIGltcGxpYikpIHsKICAgICAgIGV4ZUNsZWFuRmlsZXMucHVzaF9iYWNrKHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aCgKICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgaW1wbGliKSk7CiAgICAgfQpAQCAtNDc5LDcgKzQ2OSw3IEBACiAgIC8vIENvbnN0cnVjdCB0aGUgbWFpbiBsaW5rIHJ1bGUuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWFsX2xpbmtfY29tbWFuZHM7CiAgIHN0ZDo6c3RyaW5nIGxpbmtSdWxlVmFyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRDcmVhdGVSdWxlVmFyaWFibGUoCi0gICAgbGlua0xhbmd1YWdlLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIHN0ZDo6c3RyaW5nIGxpbmtSdWxlID0gdGhpcy0+R2V0TGlua1J1bGUobGlua1J1bGVWYXIpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29tbWFuZHMxOwogICBjbUV4cGFuZExpc3QobGlua1J1bGUsIHJlYWxfbGlua19jb21tYW5kcyk7CkBAIC00ODgsOSArNDc4LDcgQEAKICAgICAvLyBhZGQgaXQgbm93LgogICAgIHN0ZDo6c3RyaW5nIGltcGxpYlJ1bGVWYXIgPQogICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxpbmtMYW5ndWFnZSwgIl9DUkVBVEVfSU1QT1JUX0xJQlJBUlkiKTsKLSAgICBpZiAoY29uc3QgY2hhciogcnVsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGltcGxpYlJ1bGVWYXIpKSB7Ci0gICAgICBjbUV4cGFuZExpc3QocnVsZSwgcmVhbF9saW5rX2NvbW1hbmRzKTsKLSAgICB9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoaW1wbGliUnVsZVZhciwgcmVhbF9saW5rX2NvbW1hbmRzKTsKICAgfQogCiAgIGJvb2wgdXNlUmVzcG9uc2VGaWxlRm9yT2JqZWN0cyA9CkBAIC01MDYsMTAgKzQ5NCwxMCBAQAogICAgIC8vIFNldCBwYXRoIGNvbnZlcnNpb24gZm9yIGxpbmsgc2NyaXB0IHNoZWxscy4KICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+U2V0TGlua1NjcmlwdFNoZWxsKHVzZUxpbmtTY3JpcHQpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gbGlua0xpbmVDb21wdXRlcigKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPiBsaW5rTGluZUNvbXB1dGVyID0KICAgICAgIHRoaXMtPkNyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCiAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLAotICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpKSk7CisgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpOwogICAgIGxpbmtMaW5lQ29tcHV0ZXItPlNldEZvclJlc3BvbnNlKHVzZVJlc3BvbnNlRmlsZUZvckxpYnMpOwogICAgIGxpbmtMaW5lQ29tcHV0ZXItPlNldFVzZVdhdGNvbVF1b3RlKHVzZVdhdGNvbVF1b3RlKTsKICAgICBsaW5rTGluZUNvbXB1dGVyLT5TZXRSZWxpbmsocmVsaW5rKTsKQEAgLTUzNiwxMiArNTI0LDEyIEBACiAgICAgLy8gbWF5YmUgY3JlYXRlIC5kZWYgZmlsZSBmcm9tIGxpc3Qgb2Ygb2JqZWN0cwogICAgIHRoaXMtPkdlbkRlZkZpbGUocmVhbF9saW5rX2NvbW1hbmRzKTsKIAotICAgIHN0ZDo6c3RyaW5nIG1hbmlmZXN0cyA9IHRoaXMtPkdldE1hbmlmZXN0cygpOworICAgIHN0ZDo6c3RyaW5nIG1hbmlmZXN0cyA9IHRoaXMtPkdldE1hbmlmZXN0cyh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyB2YXJzOwogICAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkuY19zdHIoKTsKICAgICB2YXJzLkNNVGFyZ2V0VHlwZSA9Ci0gICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSk7CisgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSkuY19zdHIoKTsKICAgICB2YXJzLkxhbmd1YWdlID0gbGlua0xhbmd1YWdlLmNfc3RyKCk7CiAgICAgdmFycy5PYmplY3RzID0gYnVpbGRPYmpzLmNfc3RyKCk7CiAgICAgc3RkOjpzdHJpbmcgb2JqZWN0RGlyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRTdXBwb3J0RGlyZWN0b3J5KCk7CkBAIC01OTUsNyArNTgzLDcgQEAKIAogICAgIGNvbnN0IGNoYXIqIHZhbCA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRSdWxlTGF1bmNoZXIoCiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICJSVUxFX0xBVU5DSF9MSU5LIik7Ci0gICAgaWYgKHZhbCAmJiAqdmFsKSB7CisgICAgaWYgKGNtTm9uZW1wdHkodmFsKSkgewogICAgICAgbGF1bmNoZXIgPSBjbVN0ckNhdCh2YWwsICcgJyk7CiAgICAgfQogCkBAIC02MjcsNyArNjE1LDcgQEAKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNyZWF0ZUNEQ29tbWFuZCgKICAgICBjb21tYW5kczEsIHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpKTsKLSAgY21BcHBlbmQoY29tbWFuZHMsIGNvbW1hbmRzMSk7CisgIGNtOjphcHBlbmQoY29tbWFuZHMsIGNvbW1hbmRzMSk7CiAgIGNvbW1hbmRzMS5jbGVhcigpOwogCiAgIC8vIEFkZCBhIHJ1bGUgdG8gY3JlYXRlIG5lY2Vzc2FyeSBzeW1saW5rcyBmb3IgdGhlIGxpYnJhcnkuCkBAIC02MzksNyArNjI3LDcgQEAKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q3JlYXRlQ0RDb21tYW5kKAogICAgICAgY29tbWFuZHMxLCB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpKTsKLSAgICBjbUFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKKyAgICBjbTo6YXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOwogICAgIGNvbW1hbmRzMS5jbGVhcigpOwogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1ha2VmaWxlTGlicmFyeVRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21NYWtlZmlsZUxpYnJhcnlUYXJnZXRHZW5lcmF0b3IuY3h4CmluZGV4IDU0YTY2MDYuLjFjMjVmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1ha2VmaWxlTGlicmFyeVRhcmdldEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTWFrZWZpbGVMaWJyYXJ5VGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtOSw4ICs5LDggQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0ZWRGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKQEAgLTM2LDExICszNiwxMCBAQAogICB0aGlzLT5DdXN0b21Db21tYW5kRHJpdmVyID0gT25EZXBlbmRzOwogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSkgewogICAgIHRoaXMtPlRhcmdldE5hbWVzID0KLSAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlicmFyeU5hbWVzKHRoaXMtPkNvbmZpZ05hbWUpOworICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaWJyYXJ5TmFtZXModGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgfQogCi0gIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvciA9Ci0gICAgY206Om1ha2VfdW5pcXVlPGNtT1NYQnVuZGxlR2VuZXJhdG9yPih0YXJnZXQsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3IgPSBjbTo6bWFrZV91bmlxdWU8Y21PU1hCdW5kbGVHZW5lcmF0b3I+KHRhcmdldCk7CiAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+U2V0TWFjQ29udGVudEZvbGRlcnMoJnRoaXMtPk1hY0NvbnRlbnRGb2xkZXJzKTsKIH0KIApAQCAtNjksMTQgKzY4LDE2IEBACiAgICAgICBicmVhazsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlk6CiAgICAgICB0aGlzLT5Xcml0ZVNoYXJlZExpYnJhcnlSdWxlcyhmYWxzZSk7Ci0gICAgICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbCh0aGlzLT5Db25maWdOYW1lKSkgeworICAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+TmVlZFJlbGlua0JlZm9yZUluc3RhbGwoCisgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpKSB7CiAgICAgICAgIC8vIFdyaXRlIHJ1bGVzIHRvIGxpbmsgYW4gaW5zdGFsbGFibGUgdmVyc2lvbiBvZiB0aGUgdGFyZ2V0LgogICAgICAgICB0aGlzLT5Xcml0ZVNoYXJlZExpYnJhcnlSdWxlcyh0cnVlKTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKICAgICAgIHRoaXMtPldyaXRlTW9kdWxlTGlicmFyeVJ1bGVzKGZhbHNlKTsKLSAgICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPk5lZWRSZWxpbmtCZWZvcmVJbnN0YWxsKHRoaXMtPkNvbmZpZ05hbWUpKSB7CisgICAgICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5OZWVkUmVsaW5rQmVmb3JlSW5zdGFsbCgKKyAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSkpIHsKICAgICAgICAgLy8gV3JpdGUgcnVsZXMgdG8gbGluayBhbiBpbnN0YWxsYWJsZSB2ZXJzaW9uIG9mIHRoZSB0YXJnZXQuCiAgICAgICAgIHRoaXMtPldyaXRlTW9kdWxlTGlicmFyeVJ1bGVzKHRydWUpOwogICAgICAgfQpAQCAtMTI2LDIyICsxMjcsMjEgQEAKIHZvaWQgY21NYWtlZmlsZUxpYnJhcnlUYXJnZXRHZW5lcmF0b3I6OldyaXRlU3RhdGljTGlicmFyeVJ1bGVzKCkKIHsKICAgY29uc3QgYm9vbCByZXF1aXJlc0RldmljZUxpbmtpbmcgPSByZXF1aXJlRGV2aWNlTGlua2luZygKLSAgICAqdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCAqdGhpcy0+TG9jYWxHZW5lcmF0b3IsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgICp0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICp0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgaWYgKHJlcXVpcmVzRGV2aWNlTGlua2luZykgewogICAgIHN0ZDo6c3RyaW5nIGxpbmtSdWxlVmFyID0gIkNNQUtFX0NVREFfREVWSUNFX0xJTktfTElCUkFSWSI7CiAgICAgdGhpcy0+V3JpdGVEZXZpY2VMaWJyYXJ5UnVsZXMobGlua1J1bGVWYXIsIGZhbHNlKTsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIGxpbmtMYW5ndWFnZSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgc3RkOjpzdHJpbmcgbGlua1J1bGVWYXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldENyZWF0ZVJ1bGVWYXJpYWJsZSgKLSAgICBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICBzdGQ6OnN0cmluZyBleHRyYUZsYWdzOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGljTGlicmFyeUZsYWdzKAotICAgIGV4dHJhRmxhZ3MsIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZSh0aGlzLT5Db25maWdOYW1lKSwgbGlua0xhbmd1YWdlLAotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCk7CisgICAgZXh0cmFGbGFncywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdlbmVyYXRvclRhcmdldCk7CiAgIHRoaXMtPldyaXRlTGlicmFyeVJ1bGVzKGxpbmtSdWxlVmFyLCBleHRyYUZsYWdzLCBmYWxzZSk7CiB9CiAKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAgIGlmICghcmVsaW5rKSB7CiAgICAgY29uc3QgYm9vbCByZXF1aXJlc0RldmljZUxpbmtpbmcgPSByZXF1aXJlRGV2aWNlTGlua2luZygKLSAgICAgICp0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICp0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICAqdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCAqdGhpcy0+TG9jYWxHZW5lcmF0b3IsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgaWYgKHJlcXVpcmVzRGV2aWNlTGlua2luZykgewogICAgICAgc3RkOjpzdHJpbmcgbGlua1J1bGVWYXIgPSAiQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19MSUJSQVJZIjsKICAgICAgIHRoaXMtPldyaXRlRGV2aWNlTGlicmFyeVJ1bGVzKGxpbmtSdWxlVmFyLCByZWxpbmspOwpAQCAtMTYyLDIxICsxNjIsMjIgQEAKICAgfQogCiAgIHN0ZDo6c3RyaW5nIGxpbmtMYW5ndWFnZSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIHN0ZDo6c3RyaW5nIGxpbmtSdWxlVmFyID0KICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGlua0xhbmd1YWdlLCAiX0NSRUFURV9TSEFSRURfTElCUkFSWSIpOwogCiAgIHN0ZDo6c3RyaW5nIGV4dHJhRmxhZ3M7CiAgIHRoaXMtPkdldFRhcmdldExpbmtGbGFncyhleHRyYUZsYWdzLCBsaW5rTGFuZ3VhZ2UpOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkQ29uZmlnVmFyaWFibGVGbGFncygKLSAgICBleHRyYUZsYWdzLCAiQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyIsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIGV4dHJhRmxhZ3MsICJDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTIiwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAotICBzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPiBsaW5rTGluZUNvbXB1dGVyKAorICBzdGQ6OnVuaXF1ZV9wdHI8Y21MaW5rTGluZUNvbXB1dGVyPiBsaW5rTGluZUNvbXB1dGVyID0KICAgICB0aGlzLT5DcmVhdGVMaW5rTGluZUNvbXB1dGVyKAogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IsCi0gICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpKSk7CisgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpKTsKIAotICB0aGlzLT5BZGRNb2R1bGVEZWZpbml0aW9uRmxhZyhsaW5rTGluZUNvbXB1dGVyLmdldCgpLCBleHRyYUZsYWdzKTsKKyAgdGhpcy0+QWRkTW9kdWxlRGVmaW5pdGlvbkZsYWcobGlua0xpbmVDb21wdXRlci5nZXQoKSwgZXh0cmFGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiTElOS19XSEFUX1lPVV9VU0UiKSkgewogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncyhleHRyYUZsYWdzLCAiIC1XbCwtLW5vLWFzLW5lZWRlZCIpOwpAQCAtMTg4LDcgKzE4OSw3IEBACiB7CiAgIGlmICghcmVsaW5rKSB7CiAgICAgY29uc3QgYm9vbCByZXF1aXJlc0RldmljZUxpbmtpbmcgPSByZXF1aXJlRGV2aWNlTGlua2luZygKLSAgICAgICp0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICp0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICAqdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCAqdGhpcy0+TG9jYWxHZW5lcmF0b3IsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgaWYgKHJlcXVpcmVzRGV2aWNlTGlua2luZykgewogICAgICAgc3RkOjpzdHJpbmcgbGlua1J1bGVWYXIgPSAiQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19MSUJSQVJZIjsKICAgICAgIHRoaXMtPldyaXRlRGV2aWNlTGlicmFyeVJ1bGVzKGxpbmtSdWxlVmFyLCByZWxpbmspOwpAQCAtMTk2LDIxICsxOTcsMjIgQEAKICAgfQogCiAgIHN0ZDo6c3RyaW5nIGxpbmtMYW5ndWFnZSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIHN0ZDo6c3RyaW5nIGxpbmtSdWxlVmFyID0KICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGlua0xhbmd1YWdlLCAiX0NSRUFURV9TSEFSRURfTU9EVUxFIik7CiAKICAgc3RkOjpzdHJpbmcgZXh0cmFGbGFnczsKICAgdGhpcy0+R2V0VGFyZ2V0TGlua0ZsYWdzKGV4dHJhRmxhZ3MsIGxpbmtMYW5ndWFnZSk7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRDb25maWdWYXJpYWJsZUZsYWdzKAotICAgIGV4dHJhRmxhZ3MsICJDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTIiwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgZXh0cmFGbGFncywgIkNNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1MiLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCi0gIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIoCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIgPQogICAgIHRoaXMtPkNyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvciwKLSAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpKTsKKyAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpOwogCi0gIHRoaXMtPkFkZE1vZHVsZURlZmluaXRpb25GbGFnKGxpbmtMaW5lQ29tcHV0ZXIuZ2V0KCksIGV4dHJhRmxhZ3MpOworICB0aGlzLT5BZGRNb2R1bGVEZWZpbml0aW9uRmxhZyhsaW5rTGluZUNvbXB1dGVyLmdldCgpLCBleHRyYUZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgIHRoaXMtPldyaXRlTGlicmFyeVJ1bGVzKGxpbmtSdWxlVmFyLCBleHRyYUZsYWdzLCByZWxpbmspOwogfQpAQCAtMjE4LDE0ICsyMjAsMTQgQEAKIHZvaWQgY21NYWtlZmlsZUxpYnJhcnlUYXJnZXRHZW5lcmF0b3I6OldyaXRlRnJhbWV3b3JrUnVsZXMoYm9vbCByZWxpbmspCiB7CiAgIHN0ZDo6c3RyaW5nIGxpbmtMYW5ndWFnZSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIHN0ZDo6c3RyaW5nIGxpbmtSdWxlVmFyID0KICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGlua0xhbmd1YWdlLCAiX0NSRUFURV9NQUNPU1hfRlJBTUVXT1JLIik7CiAKICAgc3RkOjpzdHJpbmcgZXh0cmFGbGFnczsKICAgdGhpcy0+R2V0VGFyZ2V0TGlua0ZsYWdzKGV4dHJhRmxhZ3MsIGxpbmtMYW5ndWFnZSk7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRDb25maWdWYXJpYWJsZUZsYWdzKAotICAgIGV4dHJhRmxhZ3MsICJDTUFLRV9NQUNPU1hfRlJBTUVXT1JLX0xJTktFUl9GTEFHUyIsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIGV4dHJhRmxhZ3MsICJDTUFLRV9NQUNPU1hfRlJBTUVXT1JLX0xJTktFUl9GTEFHUyIsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgdGhpcy0+V3JpdGVMaWJyYXJ5UnVsZXMobGlua1J1bGVWYXIsIGV4dHJhRmxhZ3MsIHJlbGluayk7CiB9CkBAIC0yNDcsOSArMjQ5LDE0IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzOwogICB0aGlzLT5BcHBlbmRMaW5rRGVwZW5kcyhkZXBlbmRzLCBsaW5rTGFuZ3VhZ2UpOwogCisgIC8vIEFkZCBsYW5ndWFnZS1zcGVjaWZpYyBmbGFncy4KKyAgc3RkOjpzdHJpbmcgbGFuZ0ZsYWdzOworICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoCisgICAgbGFuZ0ZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKwogICAvLyBDcmVhdGUgc2V0IG9mIGxpbmtpbmcgZmxhZ3MuCiAgIHN0ZDo6c3RyaW5nIGxpbmtGbGFnczsKLSAgdGhpcy0+R2V0VGFyZ2V0TGlua0ZsYWdzKGxpbmtGbGFncywgbGlua0xhbmd1YWdlKTsKKyAgdGhpcy0+R2V0RGV2aWNlTGlua0ZsYWdzKGxpbmtGbGFncywgbGlua0xhbmd1YWdlKTsKIAogICAvLyBHZXQgdGhlIG5hbWUgb2YgdGhlIGRldmljZSBvYmplY3QgdG8gZ2VuZXJhdGUuCiAgIHN0ZDo6c3RyaW5nIGNvbnN0IHRhcmdldE91dHB1dFJlYWwgPQpAQCAtMzMxLDcgKzMzOCw4IEBACiAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksIHRhcmdldE91dHB1dFJlYWwpLAogICAgICAgb3V0cHV0KTsKIAotICAgIHN0ZDo6c3RyaW5nIHRhcmdldEZ1bGxQYXRoQ29tcGlsZVBEQiA9IHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKCk7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0RnVsbFBhdGhDb21waWxlUERCID0KKyAgICAgIHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0T3V0UGF0aENvbXBpbGVQREIgPQogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCh0YXJnZXRGdWxsUGF0aENvbXBpbGVQREIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CkBAIC0zNDEsMjAgKzM0OSwxNCBAQAogICAgIHZhcnMuVGFyZ2V0ID0gdGFyZ2V0LmNfc3RyKCk7CiAgICAgdmFycy5MaW5rTGlicmFyaWVzID0gbGlua0xpYnMuY19zdHIoKTsKICAgICB2YXJzLk9iamVjdHNRdW90ZWQgPSBidWlsZE9ianMuY19zdHIoKTsKKyAgICB2YXJzLkxhbmd1YWdlQ29tcGlsZUZsYWdzID0gbGFuZ0ZsYWdzLmNfc3RyKCk7CiAgICAgdmFycy5MaW5rRmxhZ3MgPSBsaW5rRmxhZ3MuY19zdHIoKTsKICAgICB2YXJzLlRhcmdldENvbXBpbGVQREIgPSB0YXJnZXRPdXRQYXRoQ29tcGlsZVBEQi5jX3N0cigpOwogCi0gICAgLy8gQWRkIGxhbmd1YWdlLXNwZWNpZmljIGZsYWdzLgotICAgIHN0ZDo6c3RyaW5nIGxhbmdGbGFnczsKLSAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoCi0gICAgICBsYW5nRmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5Db25maWdOYW1lKTsKLQotICAgIHZhcnMuTGFuZ3VhZ2VDb21waWxlRmxhZ3MgPSBsYW5nRmxhZ3MuY19zdHIoKTsKLQogICAgIHN0ZDo6c3RyaW5nIGxhdW5jaGVyOwogICAgIGNvbnN0IGNoYXIqIHZhbCA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRSdWxlTGF1bmNoZXIoCiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsICJSVUxFX0xBVU5DSF9MSU5LIik7Ci0gICAgaWYgKHZhbCAmJiAqdmFsKSB7CisgICAgaWYgKGNtTm9uZW1wdHkodmFsKSkgewogICAgICAgbGF1bmNoZXIgPSBjbVN0ckNhdCh2YWwsICcgJyk7CiAgICAgfQogCkBAIC0zOTMsNyArMzk1LDcgQEAKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNyZWF0ZUNEQ29tbWFuZCgKICAgICBjb21tYW5kczEsIHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpKTsKLSAgY21BcHBlbmQoY29tbWFuZHMsIGNvbW1hbmRzMSk7CisgIGNtOjphcHBlbmQoY29tbWFuZHMsIGNvbW1hbmRzMSk7CiAgIGNvbW1hbmRzMS5jbGVhcigpOwogCiAgIC8vIENvbXB1dGUgdGhlIGxpc3Qgb2Ygb3V0cHV0cy4KQEAgLTQyMCw3ICs0MjIsNyBAQAogCiAgIC8vIEdldCB0aGUgbGFuZ3VhZ2UgdG8gdXNlIGZvciBsaW5raW5nIHRoaXMgbGlicmFyeS4KICAgc3RkOjpzdHJpbmcgbGlua0xhbmd1YWdlID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIGxpbmsgbGFuZ3VhZ2UuCiAgIGlmIChsaW5rTGFuZ3VhZ2UuZW1wdHkoKSkgewpAQCAtNDM5LDggKzQ0MSw4IEBACiAgIC8vIENyZWF0ZSBzZXQgb2YgbGlua2luZyBmbGFncy4KICAgc3RkOjpzdHJpbmcgbGlua0ZsYWdzOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRmxhZ3MobGlua0ZsYWdzLCBleHRyYUZsYWdzKTsKLSAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZElQT0xpbmtlckZsYWdzKGxpbmtGbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Q29uZmlnTmFtZSwgbGlua0xhbmd1YWdlKTsKKyAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZElQT0xpbmtlckZsYWdzKAorICAgIGxpbmtGbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCB0aGlzLT5HZXRDb25maWdOYW1lKCksIGxpbmtMYW5ndWFnZSk7CiAKICAgLy8gQWRkIE9TWCB2ZXJzaW9uIGZsYWdzLCBpZiBhbnkuCiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CkBAIC00NTAsMjAgKzQ1MiwyMCBAQAogICB9CiAKICAgLy8gQ29uc3RydWN0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5LgotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpYnJhcnlOYW1lcyh0aGlzLT5Db25maWdOYW1lKTsKKyAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaWJyYXJ5TmFtZXModGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAogICAvLyBDb25zdHJ1Y3QgdGhlIGZ1bGwgcGF0aCB2ZXJzaW9uIG9mIHRoZSBuYW1lcy4KICAgc3RkOjpzdHJpbmcgb3V0cGF0aDsKICAgc3RkOjpzdHJpbmcgb3V0cGF0aEltcDsKICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+SXNGcmFtZXdvcmtPbkFwcGxlKCkpIHsKLSAgICBvdXRwYXRoID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSk7CisgICAgb3V0cGF0aCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yLT5DcmVhdGVGcmFtZXdvcmsodGhpcy0+VGFyZ2V0TmFtZXMuT3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHBhdGgsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgb3V0cGF0aCArPSAnLyc7CiAgIH0gZWxzZSBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5Jc0NGQnVuZGxlT25BcHBsZSgpKSB7Ci0gICAgb3V0cGF0aCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KHRoaXMtPkNvbmZpZ05hbWUpOwotICAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+Q3JlYXRlQ0ZCdW5kbGUodGhpcy0+VGFyZ2V0TmFtZXMuT3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cGF0aCk7CisgICAgb3V0cGF0aCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yLT5DcmVhdGVDRkJ1bmRsZSh0aGlzLT5UYXJnZXROYW1lcy5PdXRwdXQsIG91dHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICAgIG91dHBhdGggKz0gJy8nOwogICB9IGVsc2UgaWYgKHJlbGluaykgewogICAgIG91dHBhdGggPSBjbVN0ckNhdCh0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLApAQCAtNDc0LDIzICs0NzYsMjMgQEAKICAgICAgIG91dHBhdGhJbXAgPSBvdXRwYXRoOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBvdXRwYXRoID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXREaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSk7CisgICAgb3V0cGF0aCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShvdXRwYXRoKTsKICAgICBvdXRwYXRoICs9ICcvJzsKICAgICBpZiAoIXRoaXMtPlRhcmdldE5hbWVzLkltcG9ydExpYnJhcnkuZW1wdHkoKSkgewogICAgICAgb3V0cGF0aEltcCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RGlyZWN0b3J5KAotICAgICAgICB0aGlzLT5Db25maWdOYW1lLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCk7CisgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpOwogICAgICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShvdXRwYXRoSW1wKTsKICAgICAgIG91dHBhdGhJbXAgKz0gJy8nOwogICAgIH0KICAgfQogCiAgIHN0ZDo6c3RyaW5nIGNvbXBpbGVQZGJPdXRwdXRQYXRoID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldENvbXBpbGVQREJEaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRDb21waWxlUERCRGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3RvcnkoY29tcGlsZVBkYk91dHB1dFBhdGgpOwogCiAgIHN0ZDo6c3RyaW5nIHBkYk91dHB1dFBhdGggPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UERCRGlyZWN0b3J5KHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UERCRGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3RvcnkocGRiT3V0cHV0UGF0aCk7CiAgIHBkYk91dHB1dFBhdGggKz0gIi8iOwogCkBAIC01NjcsNyArNTY5LDcgQEAKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q3JlYXRlQ0RDb21tYW5kKAogICAgICAgY29tbWFuZHMxLCB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpKTsKLSAgICBjbUFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKKyAgICBjbTo6YXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOwogICAgIGNvbW1hbmRzMS5jbGVhcigpOwogICB9CiAKQEAgLTU4Niw3ICs1ODgsNyBAQAogICAgICAgdGFyZ2V0RnVsbFBhdGhJbXBvcnQpKTsKICAgICBzdGQ6OnN0cmluZyBpbXBsaWI7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0SW1wbGliR05VdG9NUygKLSAgICAgICAgICB0aGlzLT5Db25maWdOYW1lLCB0YXJnZXRGdWxsUGF0aEltcG9ydCwgaW1wbGliKSkgeworICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgdGFyZ2V0RnVsbFBhdGhJbXBvcnQsIGltcGxpYikpIHsKICAgICAgIGxpYkNsZWFuRmlsZXMuaW5zZXJ0KHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5NYXliZUNvbnZlcnRUb1JlbGF0aXZlUGF0aCgKICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgaW1wbGliKSk7CiAgICAgfQpAQCAtNjM4LDI5ICs2NDAsMjMgQEAKICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsaW5rTGFuZ3VhZ2UsICJfQVJDSElWRV9DUkVBVEUiKTsKIAogICAgIGFyQ3JlYXRlVmFyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlU3BlY2lmaWNMaW5rUnVsZVZhcmlhYmxlKAotICAgICAgYXJDcmVhdGVWYXIsIGxpbmtMYW5ndWFnZSwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICBhckNyZWF0ZVZhciwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCi0gICAgaWYgKGNvbnN0IGNoYXIqIHJ1bGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihhckNyZWF0ZVZhcikpIHsKLSAgICAgIGNtRXhwYW5kTGlzdChydWxlLCBhcmNoaXZlQ3JlYXRlQ29tbWFuZHMpOwotICAgIH0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmRXhwYW5kTGlzdChhckNyZWF0ZVZhciwgYXJjaGl2ZUNyZWF0ZUNvbW1hbmRzKTsKICAgICBzdGQ6OnN0cmluZyBhckFwcGVuZFZhciA9CiAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGlua0xhbmd1YWdlLCAiX0FSQ0hJVkVfQVBQRU5EIik7CiAKICAgICBhckFwcGVuZFZhciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RmVhdHVyZVNwZWNpZmljTGlua1J1bGVWYXJpYWJsZSgKLSAgICAgIGFyQXBwZW5kVmFyLCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgICAgYXJBcHBlbmRWYXIsIGxpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKIAotICAgIGlmIChjb25zdCBjaGFyKiBydWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oYXJBcHBlbmRWYXIpKSB7Ci0gICAgICBjbUV4cGFuZExpc3QocnVsZSwgYXJjaGl2ZUFwcGVuZENvbW1hbmRzKTsKLSAgICB9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoYXJBcHBlbmRWYXIsIGFyY2hpdmVBcHBlbmRDb21tYW5kcyk7CiAgICAgc3RkOjpzdHJpbmcgYXJGaW5pc2hWYXIgPQogICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxpbmtMYW5ndWFnZSwgIl9BUkNISVZFX0ZJTklTSCIpOwogCiAgICAgYXJGaW5pc2hWYXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEZlYXR1cmVTcGVjaWZpY0xpbmtSdWxlVmFyaWFibGUoCi0gICAgICBhckZpbmlzaFZhciwgbGlua0xhbmd1YWdlLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgICAgIGFyRmluaXNoVmFyLCBsaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKLSAgICBpZiAoY29uc3QgY2hhciogcnVsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKGFyRmluaXNoVmFyKSkgewotICAgICAgY21FeHBhbmRMaXN0KHJ1bGUsIGFyY2hpdmVGaW5pc2hDb21tYW5kcyk7Ci0gICAgfQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KGFyRmluaXNoVmFyLCBhcmNoaXZlRmluaXNoQ29tbWFuZHMpOwogICB9CiAKICAgLy8gRGVjaWRlIHdoZXRoZXIgdG8gdXNlIGFyY2hpdmluZyBydWxlcy4KQEAgLTY5NiwxMCArNjkyLDEwIEBACiAgICAgc3RkOjpzdHJpbmcgbGlua0xpYnM7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkpIHsKIAotICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4gbGlua0xpbmVDb21wdXRlcigKKyAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIgPQogICAgICAgICB0aGlzLT5DcmVhdGVMaW5rTGluZUNvbXB1dGVyKAogICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLAotICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpKTsKKyAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpKTsKICAgICAgIGxpbmtMaW5lQ29tcHV0ZXItPlNldEZvclJlc3BvbnNlKHVzZVJlc3BvbnNlRmlsZUZvckxpYnMpOwogICAgICAgbGlua0xpbmVDb21wdXRlci0+U2V0VXNlV2F0Y29tUXVvdGUodXNlV2F0Y29tUXVvdGUpOwogICAgICAgbGlua0xpbmVDb21wdXRlci0+U2V0UmVsaW5rKHJlbGluayk7CkBAIC03MjMsMTAgKzcxOSwxMiBAQAogICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgfQogCisgICAgc3RkOjpzdHJpbmcgY29uc3QmIGFpeEV4cG9ydHMgPSB0aGlzLT5HZXRBSVhFeHBvcnRzKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisKICAgICAvLyBtYXliZSBjcmVhdGUgLmRlZiBmaWxlIGZyb20gbGlzdCBvZiBvYmplY3RzCiAgICAgdGhpcy0+R2VuRGVmRmlsZShyZWFsX2xpbmtfY29tbWFuZHMpOwogCi0gICAgc3RkOjpzdHJpbmcgbWFuaWZlc3RzID0gdGhpcy0+R2V0TWFuaWZlc3RzKCk7CisgICAgc3RkOjpzdHJpbmcgbWFuaWZlc3RzID0gdGhpcy0+R2V0TWFuaWZlc3RzKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgICAgdmFycy5UYXJnZXRQREIgPSB0YXJnZXRPdXRQYXRoUERCLmNfc3RyKCk7CkBAIC03NTAsOCArNzQ4LDkgQEAKIAogICAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkuY19zdHIoKTsKICAgICB2YXJzLkNNVGFyZ2V0VHlwZSA9Ci0gICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSk7CisgICAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSkuY19zdHIoKTsKICAgICB2YXJzLkxhbmd1YWdlID0gbGlua0xhbmd1YWdlLmNfc3RyKCk7CisgICAgdmFycy5BSVhFeHBvcnRzID0gYWl4RXhwb3J0cy5jX3N0cigpOwogICAgIHZhcnMuT2JqZWN0cyA9IGJ1aWxkT2Jqcy5jX3N0cigpOwogICAgIHN0ZDo6c3RyaW5nIG9iamVjdERpciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpOwogCkBAIC03NzEsNyArNzcwLDcgQEAKICAgICB2YXJzLlRhcmdldCA9IHRhcmdldC5jX3N0cigpOwogICAgIHZhcnMuTGlua0xpYnJhcmllcyA9IGxpbmtMaWJzLmNfc3RyKCk7CiAgICAgdmFycy5PYmplY3RzUXVvdGVkID0gYnVpbGRPYmpzLmNfc3RyKCk7Ci0gICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+SGFzU09OYW1lKHRoaXMtPkNvbmZpZ05hbWUpKSB7CisgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+SGFzU09OYW1lKHRoaXMtPkdldENvbmZpZ05hbWUoKSkpIHsKICAgICAgIHZhcnMuU09OYW1lRmxhZyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTT05hbWVGbGFnKGxpbmtMYW5ndWFnZSk7CiAgICAgICB2YXJzLlRhcmdldFNPTmFtZSA9IHRoaXMtPlRhcmdldE5hbWVzLlNoYXJlZE9iamVjdC5jX3N0cigpOwogICAgIH0KQEAgLTc4Myw4ICs3ODIsOCBAQAogICAgIHN0ZDo6c3RyaW5nIGluc3RhbGxfbmFtZV9kaXI7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkpIHsKICAgICAgIC8vIEdldCB0aGUgaW5zdGFsbF9uYW1lIGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIHRyZWUuCi0gICAgICBpbnN0YWxsX25hbWVfZGlyID0KLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRJbnN0YWxsTmFtZURpckZvckJ1aWxkVHJlZSh0aGlzLT5Db25maWdOYW1lKTsKKyAgICAgIGluc3RhbGxfbmFtZV9kaXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEluc3RhbGxOYW1lRGlyRm9yQnVpbGRUcmVlKAorICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgICAgICAvLyBTZXQgdGhlIHJ1bGUgdmFyaWFibGUgcmVwbGFjZW1lbnQgdmFsdWUuCiAgICAgICBpZiAoaW5zdGFsbF9uYW1lX2Rpci5lbXB0eSgpKSB7CkBAIC04MDAsMTcgKzc5OSwxNyBAQAogICAgIC8vIEFkZCBsYW5ndWFnZS1zcGVjaWZpYyBmbGFncy4KICAgICBzdGQ6OnN0cmluZyBsYW5nRmxhZ3M7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZExhbmd1YWdlRmxhZ3NGb3JMaW5raW5nKAotICAgICAgbGFuZ0ZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxpbmtMYW5ndWFnZSwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICBsYW5nRmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZEFyY2hpdGVjdHVyZUZsYWdzKAotICAgICAgbGFuZ0ZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxpbmtMYW5ndWFnZSwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgICBsYW5nRmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogCiAgICAgdmFycy5MYW5ndWFnZUNvbXBpbGVGbGFncyA9IGxhbmdGbGFncy5jX3N0cigpOwogCiAgICAgc3RkOjpzdHJpbmcgbGF1bmNoZXI7CiAgICAgY29uc3QgY2hhciogdmFsID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFJ1bGVMYXVuY2hlcigKICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgIlJVTEVfTEFVTkNIX0xJTksiKTsKLSAgICBpZiAodmFsICYmICp2YWwpIHsKKyAgICBpZiAoY21Ob25lbXB0eSh2YWwpKSB7CiAgICAgICBsYXVuY2hlciA9IGNtU3RyQ2F0KHZhbCwgJyAnKTsKICAgICB9CiAKQEAgLTkwMyw3ICs5MDIsNyBAQAogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q3JlYXRlQ0RDb21tYW5kKAogICAgIGNvbW1hbmRzMSwgdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICBjbUFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKKyAgY206OmFwcGVuZChjb21tYW5kcywgY29tbWFuZHMxKTsKICAgY29tbWFuZHMxLmNsZWFyKCk7CiAKICAgLy8gQWRkIGEgcnVsZSB0byBjcmVhdGUgbmVjZXNzYXJ5IHN5bWxpbmtzIGZvciB0aGUgbGlicmFyeS4KQEAgLTkxNyw3ICs5MTYsNyBAQAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5DcmVhdGVDRENvbW1hbmQoCiAgICAgICBjb21tYW5kczEsIHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICAgIGNtQXBwZW5kKGNvbW1hbmRzLCBjb21tYW5kczEpOworICAgIGNtOjphcHBlbmQoY29tbWFuZHMsIGNvbW1hbmRzMSk7CiAgICAgY29tbWFuZHMxLmNsZWFyKCk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhLmN4eCBiL1NvdXJjZS9jbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmZDQ0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5jeHgKQEAgLTAsMCArMSwxMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpbmNsdWRlICJjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5oIgorCisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKyNpbmNsdWRlIDxjbTNwL2pzb24vd3JpdGVyLmg+CisKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKKyNpbmNsdWRlICJjbXN5cy9TeXN0ZW1JbmZvcm1hdGlvbi5oeHgiCisKKyNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKKyNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCisKK2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhOjpjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb2ZpbGVTdHJlYW0pCit7CisgIHN0ZDo6aW9zOjpvcGVubW9kZSBvbW9kZSA9IHN0ZDo6aW9zOjpvdXQgfCBzdGQ6Omlvczo6dHJ1bmM7CisgIHRoaXMtPlByb2ZpbGVTdHJlYW0ub3Blbihwcm9maWxlU3RyZWFtLmNfc3RyKCksIG9tb2RlKTsKKyAgSnNvbjo6U3RyZWFtV3JpdGVyQnVpbGRlciB3YnVpbGRlcjsKKyAgdGhpcy0+SnNvbldyaXRlciA9CisgICAgc3RkOjp1bmlxdWVfcHRyPEpzb246OlN0cmVhbVdyaXRlcj4od2J1aWxkZXIubmV3U3RyZWFtV3JpdGVyKCkpOworICBpZiAoIXRoaXMtPlByb2ZpbGVTdHJlYW0uZ29vZCgpKSB7CisgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKHN0ZDo6c3RyaW5nKCJVbmFibGUgdG8gb3BlbjogIikgKyBwcm9maWxlU3RyZWFtKTsKKyAgfQorCisgIHRoaXMtPlByb2ZpbGVTdHJlYW0gPDwgIlsiOworfTsKKworY21NYWtlZmlsZVByb2ZpbGluZ0RhdGE6On5jbU1ha2VmaWxlUHJvZmlsaW5nRGF0YSgpIG5vZXhjZXB0Cit7CisgIGlmICh0aGlzLT5Qcm9maWxlU3RyZWFtLmdvb2QoKSkgeworICAgIHRyeSB7CisgICAgICB0aGlzLT5Qcm9maWxlU3RyZWFtIDw8ICJdIjsKKyAgICAgIHRoaXMtPlByb2ZpbGVTdHJlYW0uY2xvc2UoKTsKKyAgICB9IGNhdGNoICguLi4pIHsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJFcnJvciB3cml0aW5nIHByb2ZpbGluZyBvdXRwdXQhIik7CisgICAgfQorICB9Cit9CisKK3ZvaWQgY21NYWtlZmlsZVByb2ZpbGluZ0RhdGE6OlN0YXJ0RW50cnkoY29uc3QgY21MaXN0RmlsZUZ1bmN0aW9uJiBsZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVDb250ZXh0IGNvbnN0JiBsZmMpCit7CisgIC8qIERvIG5vdCB0cnkgYWdhaW4gaWYgd2UgcHJldmlvdXNseSBmYWlsZWQgdG8gd3JpdGUgdG8gb3V0cHV0LiAqLworICBpZiAoIXRoaXMtPlByb2ZpbGVTdHJlYW0uZ29vZCgpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgdHJ5IHsKKyAgICBpZiAodGhpcy0+UHJvZmlsZVN0cmVhbS50ZWxscCgpID4gMSkgeworICAgICAgdGhpcy0+UHJvZmlsZVN0cmVhbSA8PCAiLCI7CisgICAgfQorICAgIGNtc3lzOjpTeXN0ZW1JbmZvcm1hdGlvbiBpbmZvOworICAgIEpzb246OlZhbHVlIHY7CisgICAgdlsicGgiXSA9ICJCIjsKKyAgICB2WyJuYW1lIl0gPSBsZmYuTmFtZS5Mb3dlcjsKKyAgICB2WyJjYXQiXSA9ICJjbWFrZSI7CisgICAgdlsidHMiXSA9IEpzb246OlZhbHVlOjpVSW50NjQoCisgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPigKKyAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpKQorICAgICAgICAuY291bnQoKSk7CisgICAgdlsicGlkIl0gPSBzdGF0aWNfY2FzdDxpbnQ+KGluZm8uR2V0UHJvY2Vzc0lkKCkpOworICAgIHZbInRpZCJdID0gMDsKKyAgICBKc29uOjpWYWx1ZSBhcmdzVmFsdWU7CisgICAgaWYgKCFsZmYuQXJndW1lbnRzLmVtcHR5KCkpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGFyZ3M7CisgICAgICBmb3IgKGNvbnN0IGF1dG8mIGEgOiBsZmYuQXJndW1lbnRzKSB7CisgICAgICAgIGFyZ3MgKz0gKGFyZ3MuZW1wdHkoKSA/ICIiIDogIiAiKSArIGEuVmFsdWU7CisgICAgICB9CisgICAgICBhcmdzVmFsdWVbImZ1bmN0aW9uQXJncyJdID0gYXJnczsKKyAgICB9CisgICAgYXJnc1ZhbHVlWyJsb2NhdGlvbiJdID0gbGZjLkZpbGVQYXRoICsgIjoiICsgc3RkOjp0b19zdHJpbmcobGZjLkxpbmUpOworICAgIHZbImFyZ3MiXSA9IGFyZ3NWYWx1ZTsKKworICAgIHRoaXMtPkpzb25Xcml0ZXItPndyaXRlKHYsICZ0aGlzLT5Qcm9maWxlU3RyZWFtKTsKKyAgfSBjYXRjaCAoc3RkOjppb3NfYmFzZTo6ZmFpbHVyZSYgZmFpbCkgeworICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgICAgY21TdHJDYXQoIkZhaWxlZCB0byB3cml0ZSB0byBwcm9maWxpbmcgb3V0cHV0OiAiLCBmYWlsLndoYXQoKSkpOworICB9IGNhdGNoICguLi4pIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiRXJyb3Igd3JpdGluZyBwcm9maWxpbmcgb3V0cHV0ISIpOworICB9Cit9CisKK3ZvaWQgY21NYWtlZmlsZVByb2ZpbGluZ0RhdGE6OlN0b3BFbnRyeSgpCit7CisgIC8qIERvIG5vdCB0cnkgYWdhaW4gaWYgd2UgcHJldmlvdXNseSBmYWlsZWQgdG8gd3JpdGUgdG8gb3V0cHV0LiAqLworICBpZiAoIXRoaXMtPlByb2ZpbGVTdHJlYW0uZ29vZCgpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgdHJ5IHsKKyAgICB0aGlzLT5Qcm9maWxlU3RyZWFtIDw8ICIsIjsKKyAgICBjbXN5czo6U3lzdGVtSW5mb3JtYXRpb24gaW5mbzsKKyAgICBKc29uOjpWYWx1ZSB2OworICAgIHZbInBoIl0gPSAiRSI7CisgICAgdlsidHMiXSA9IEpzb246OlZhbHVlOjpVSW50NjQoCisgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPigKKyAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpKQorICAgICAgICAuY291bnQoKSk7CisgICAgdlsicGlkIl0gPSBzdGF0aWNfY2FzdDxpbnQ+KGluZm8uR2V0UHJvY2Vzc0lkKCkpOworICAgIHZbInRpZCJdID0gMDsKKyAgICB0aGlzLT5Kc29uV3JpdGVyLT53cml0ZSh2LCAmdGhpcy0+UHJvZmlsZVN0cmVhbSk7CisgIH0gY2F0Y2ggKHN0ZDo6aW9zX2Jhc2U6OmZhaWx1cmUmIGZhaWwpIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgIGNtU3RyQ2F0KCJGYWlsZWQgdG8gd3JpdGUgdG8gcHJvZmlsaW5nIG91dHB1dDoiLCBmYWlsLndoYXQoKSkpOworICB9IGNhdGNoICguLi4pIHsKKyAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiRXJyb3Igd3JpdGluZyBwcm9maWxpbmcgb3V0cHV0ISIpOworICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEuaCBiL1NvdXJjZS9jbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYWJkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21NYWtlZmlsZVByb2ZpbGluZ0RhdGEuaApAQCAtMCwwICsxLDI5IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhX2gKKyNkZWZpbmUgY21NYWtlZmlsZVByb2ZpbGluZ0RhdGFfaAorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKKworbmFtZXNwYWNlIEpzb24geworY2xhc3MgU3RyZWFtV3JpdGVyOworfQorCitjbGFzcyBjbUxpc3RGaWxlQ29udGV4dDsKK3N0cnVjdCBjbUxpc3RGaWxlRnVuY3Rpb247CisKK2NsYXNzIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhCit7CitwdWJsaWM6CisgIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhKGNvbnN0IHN0ZDo6c3RyaW5nJik7CisgIH5jbU1ha2VmaWxlUHJvZmlsaW5nRGF0YSgpIG5vZXhjZXB0OworICB2b2lkIFN0YXJ0RW50cnkoY29uc3QgY21MaXN0RmlsZUZ1bmN0aW9uJiBsZmYsIGNtTGlzdEZpbGVDb250ZXh0IGNvbnN0JiBsZmMpOworICB2b2lkIFN0b3BFbnRyeSgpOworCitwcml2YXRlOgorICBjbXN5czo6b2ZzdHJlYW0gUHJvZmlsZVN0cmVhbTsKKyAgc3RkOjp1bmlxdWVfcHRyPEpzb246OlN0cmVhbVdyaXRlcj4gSnNvbldyaXRlcjsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmN4eAppbmRleCA5ZDA4ZTA3Li4xM2MyZmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IuY3h4CkBAIC0yLDEyICsyLDE1IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmgiCkBAIC0xNSw2ICsxOCw3IEBACiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKKyNpbmNsdWRlICJjbUxpbmtMaW5lQ29tcHV0ZXIuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlICJjbUxvY2FsQ29tbW9uR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC0yMiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY21NYWtlZmlsZUxpYnJhcnlUYXJnZXRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlVXRpbGl0eVRhcmdldEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCkBAIC0zNSwxMiArNDAsNyBAQAogCiBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCiAgIDogY21Db21tb25UYXJnZXRHZW5lcmF0b3IodGFyZ2V0KQotICAsIE9TWEJ1bmRsZUdlbmVyYXRvcihudWxscHRyKQotICAsIE1hY09TWENvbnRlbnRHZW5lcmF0b3IobnVsbHB0cikKIHsKLSAgdGhpcy0+QnVpbGRGaWxlU3RyZWFtID0gbnVsbHB0cjsKLSAgdGhpcy0+SW5mb0ZpbGVTdHJlYW0gPSBudWxscHRyOwotICB0aGlzLT5GbGFnRmlsZVN0cmVhbSA9IG51bGxwdHI7CiAgIHRoaXMtPkN1c3RvbUNvbW1hbmREcml2ZXIgPSBPbkJ1aWxkOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvciA9CiAgICAgc3RhdGljX2Nhc3Q8Y21Mb2NhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjMqPih0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCkpOwpAQCAtNDgsMzUgKzQ4LDMxIEBACiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEdsb2JhbEdlbmVyYXRvcigpKTsKICAgY21ha2UqIGNtID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDTWFrZUluc3RhbmNlKCk7CiAgIHRoaXMtPk5vUnVsZU1lc3NhZ2VzID0gZmFsc2U7Ci0gIGlmIChjb25zdCBjaGFyKiBydWxlU3RhdHVzID0KLSAgICAgICAgY20tPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJSVUxFX01FU1NBR0VTIikpIHsKLSAgICB0aGlzLT5Ob1J1bGVNZXNzYWdlcyA9IGNtSXNPZmYocnVsZVN0YXR1cyk7CisgIGlmIChjbVByb3AgcnVsZVN0YXR1cyA9IGNtLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eSgiUlVMRV9NRVNTQUdFUyIpKSB7CisgICAgdGhpcy0+Tm9SdWxlTWVzc2FnZXMgPSBjbUlzT2ZmKCpydWxlU3RhdHVzKTsKICAgfQotICBNYWNPU1hDb250ZW50R2VuZXJhdG9yID0gbmV3IE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlKHRoaXMpOworICBNYWNPU1hDb250ZW50R2VuZXJhdG9yID0gY206Om1ha2VfdW5pcXVlPE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlPih0aGlzKTsKIH0KIAotY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6fmNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IoKQotewotICBkZWxldGUgTWFjT1NYQ29udGVudEdlbmVyYXRvcjsKLX0KK2NtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6On5jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCi1jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yKiBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpOZXcoCitzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcj4gY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6TmV3KAogICBjbUdlbmVyYXRvclRhcmdldCogdGd0KQogewotICBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yKiByZXN1bHQgPSBudWxscHRyOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcj4gcmVzdWx0OwogCiAgIHN3aXRjaCAodGd0LT5HZXRUeXBlKCkpIHsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKLSAgICAgIHJlc3VsdCA9IG5ldyBjbU1ha2VmaWxlRXhlY3V0YWJsZVRhcmdldEdlbmVyYXRvcih0Z3QpOworICAgICAgcmVzdWx0ID0gY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGVFeGVjdXRhYmxlVGFyZ2V0R2VuZXJhdG9yPih0Z3QpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZOgogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWToKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlk6CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok9CSkVDVF9MSUJSQVJZOgotICAgICAgcmVzdWx0ID0gbmV3IGNtTWFrZWZpbGVMaWJyYXJ5VGFyZ2V0R2VuZXJhdG9yKHRndCk7CisgICAgICByZXN1bHQgPSBjbTo6bWFrZV91bmlxdWU8Y21NYWtlZmlsZUxpYnJhcnlUYXJnZXRHZW5lcmF0b3I+KHRndCk7CiAgICAgICBicmVhazsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VVRJTElUWToKLSAgICAgIHJlc3VsdCA9IG5ldyBjbU1ha2VmaWxlVXRpbGl0eVRhcmdldEdlbmVyYXRvcih0Z3QpOworICAgICAgcmVzdWx0ID0gY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGVVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yPih0Z3QpOwogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04NSw2ICs4MSwyNSBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCitzdGQ6OnN0cmluZyBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpHZXRDb25maWdOYW1lKCkKK3sKKyAgYXV0byBjb25zdCYgY29uZmlnTmFtZXMgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q29uZmlnTmFtZXMoKTsKKyAgYXNzZXJ0KGNvbmZpZ05hbWVzLnNpemUoKSA9PSAxKTsKKyAgcmV0dXJuIGNvbmZpZ05hbWVzLmZyb250KCk7Cit9CisKK3ZvaWQgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6R2V0RGV2aWNlTGlua0ZsYWdzKAorICBzdGQ6OnN0cmluZyYgbGlua0ZsYWdzLCBjb25zdCBzdGQ6OnN0cmluZyYgbGlua0xhbmd1YWdlKQoreworICBjbUdlbmVyYXRvclRhcmdldDo6RGV2aWNlTGlua1NldHRlciBzZXR0ZXIoKnRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpKTsKKworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua09wdHM7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua09wdGlvbnMobGlua09wdHMsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rTGFuZ3VhZ2UpOworICAvLyBMSU5LX09QVElPTlMgYXJlIGVzY2FwZWQuCisgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRDb21waWxlT3B0aW9ucyhsaW5rRmxhZ3MsIGxpbmtPcHRzKTsKK30KKwogdm9pZCBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpHZXRUYXJnZXRMaW5rRmxhZ3MoCiAgIHN0ZDo6c3RyaW5nJiBmbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSkKIHsKQEAgLTkyLDE3ICsxMDcsMTggQEAKICAgICBmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRTYWZlUHJvcGVydHkoIkxJTktfRkxBR1MiKSk7CiAKICAgc3RkOjpzdHJpbmcgbGlua0ZsYWdzQ29uZmlnID0KLSAgICBjbVN0ckNhdCgiTElOS19GTEFHU18iLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UodGhpcy0+Q29uZmlnTmFtZSkpOworICAgIGNtU3RyQ2F0KCJMSU5LX0ZMQUdTXyIsIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZSh0aGlzLT5HZXRDb25maWdOYW1lKCkpKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZsYWdzKAogICAgIGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFNhZmVQcm9wZXJ0eShsaW5rRmxhZ3NDb25maWcpKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3B0czsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rT3B0aW9ucyhvcHRzLCB0aGlzLT5Db25maWdOYW1lLCBsaW5rTGFuZ3VhZ2UpOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtPcHRpb25zKG9wdHMsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rTGFuZ3VhZ2UpOwogICAvLyBMSU5LX09QVElPTlMgYXJlIGVzY2FwZWQuCiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRDb21waWxlT3B0aW9ucyhmbGFncywgb3B0cyk7CiAKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZFBvc2l0aW9uSW5kZXBlbmRlbnRMaW5rZXJGbGFncygKLSAgICBmbGFncywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCB0aGlzLT5Db25maWdOYW1lLCBsaW5rTGFuZ3VhZ2UpOworICAgIGZsYWdzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgbGlua0xhbmd1YWdlKTsKIH0KIAogdm9pZCBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpDcmVhdGVSdWxlRmlsZSgpCkBAIC0xMjgsOSArMTQ0LDkgQEAKIAogICAvLyBPcGVuIHRoZSBydWxlIGZpbGUuICBUaGlzIHNob3VsZCBiZSBjb3B5LWlmLWRpZmZlcmVudCBiZWNhdXNlIHRoZQogICAvLyBydWxlcyBtYXkgZGVwZW5kIG9uIHRoaXMgZmlsZSBpdHNlbGYuCi0gIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbSA9Ci0gICAgbmV3IGNtR2VuZXJhdGVkRmlsZVN0cmVhbSh0aGlzLT5CdWlsZEZpbGVOYW1lRnVsbCwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7CisgIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbSA9IGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+KAorICAgIHRoaXMtPkJ1aWxkRmlsZU5hbWVGdWxsLCBmYWxzZSwKKyAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldE1ha2VmaWxlRW5jb2RpbmcoKSk7CiAgIGlmICghdGhpcy0+QnVpbGRGaWxlU3RyZWFtKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC0xNTIsMjYgKzE2OCwyNiBAQAogCiAgIC8vIEV2YWx1YXRlcyBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgYW5kIGV4cGFuZHMgcHJvcF92YWx1ZQogICBhdXRvIGV2YWx1YXRlZEZpbGVzID0KLSAgICBbdGhpc10oY29uc3QgY2hhciogcHJvcF92YWx1ZSkgLT4gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHsKKyAgICBbdGhpc10oY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BfdmFsdWUpIC0+IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzOwotICAgIGNtRXhwYW5kTGlzdCgKLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUocHJvcF92YWx1ZSwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkNvbmZpZ05hbWUsIHRoaXMtPkdlbmVyYXRvclRhcmdldCksCi0gICAgICBmaWxlcyk7CisgICAgY21FeHBhbmRMaXN0KGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCisgICAgICAgICAgICAgICAgICAgcHJvcF92YWx1ZSwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQpLAorICAgICAgICAgICAgICAgICBmaWxlcyk7CiAgICAgcmV0dXJuIGZpbGVzOwogICB9OwogCiAgIC8vIExvb2sgZm9yIGFkZGl0aW9uYWwgZmlsZXMgcmVnaXN0ZXJlZCBmb3IgY2xlYW5pbmcgaW4gdGhpcyBkaXJlY3RvcnkuCi0gIGlmIChjb25zdCBjaGFyKiBwcm9wX3ZhbHVlID0KKyAgaWYgKGNtUHJvcCBwcm9wX3ZhbHVlID0KICAgICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KCJBRERJVElPTkFMX01BS0VfQ0xFQU5fRklMRVMiKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCBmaWxlcyA9IGV2YWx1YXRlZEZpbGVzKHByb3BfdmFsdWUpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCBmaWxlcyA9IGV2YWx1YXRlZEZpbGVzKCpwcm9wX3ZhbHVlKTsKICAgICB0aGlzLT5DbGVhbkZpbGVzLmluc2VydChmaWxlcy5iZWdpbigpLCBmaWxlcy5lbmQoKSk7CiAgIH0KIAogICAvLyBMb29rIGZvciBhZGRpdGlvbmFsIGZpbGVzIHJlZ2lzdGVyZWQgZm9yIGNsZWFuaW5nIGluIHRoaXMgdGFyZ2V0LgotICBpZiAoY29uc3QgY2hhciogcHJvcF92YWx1ZSA9CisgIGlmIChjbVByb3AgcHJvcF92YWx1ZSA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkFERElUSU9OQUxfQ0xFQU5fRklMRVMiKSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCBmaWxlcyA9IGV2YWx1YXRlZEZpbGVzKHByb3BfdmFsdWUpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCBmaWxlcyA9IGV2YWx1YXRlZEZpbGVzKCpwcm9wX3ZhbHVlKTsKICAgICAvLyBGb3IgcmVsYXRpdmUgcGF0aCBzdXBwb3J0CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGJpbmFyeURpciA9CiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwpAQCAtMTgxLDE4ICsxOTcsMTggQEAKICAgfQogCiAgIC8vIGFkZCBjdXN0b20gY29tbWFuZHMgdG8gdGhlIGNsZWFuIHJ1bGVzPwotICBjb25zdCBjaGFyKiBjbGVhbl9ub19jdXN0b20gPSB0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIkNMRUFOX05PX0NVU1RPTSIpOwotICBib29sIGNsZWFuID0gY21Jc09mZihjbGVhbl9ub19jdXN0b20pOworICBib29sIGNsZWFuID0gY21Jc09mZih0aGlzLT5NYWtlZmlsZS0+R2V0UHJvcGVydHkoIkNMRUFOX05PX0NVU1RPTSIpKTsKIAogICAvLyBGaXJzdCBnZW5lcmF0ZSB0aGUgb2JqZWN0IHJ1bGUgZmlsZXMuICBTYXZlIGEgbGlzdCBvZiBhbGwgb2JqZWN0CiAgIC8vIGZpbGVzIGZvciB0aGlzIHRhcmdldC4KICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gY3VzdG9tQ29tbWFuZHM7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q3VzdG9tQ29tbWFuZHMoY3VzdG9tQ29tbWFuZHMsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEN1c3RvbUNvbW1hbmRzKGN1c3RvbUNvbW1hbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIHN0ZDo6c3RyaW5nIGN1cnJlbnRCaW5EaXIgPQogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CiAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiA6IGN1c3RvbUNvbW1hbmRzKSB7Ci0gICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZygqc2YtPkdldEN1c3RvbUNvbW1hbmQoKSwgdGhpcy0+Q29uZmlnTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yKTsKKyAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKCpzZi0+R2V0Q3VzdG9tQ29tbWFuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCB0aGlzLT5Mb2NhbEdlbmVyYXRvcik7CiAgICAgdGhpcy0+R2VuZXJhdGVDdXN0b21SdWxlRmlsZShjY2cpOwogICAgIGlmIChjbGVhbikgewogICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRwdXRzID0gY2NnLkdldE91dHB1dHMoKTsKQEAgLTIxNSwxMiArMjMxLDE0IEBACiAgICAgc3RkOjp2ZWN0b3I8Y21DdXN0b21Db21tYW5kPiBidWlsZEV2ZW50Q29tbWFuZHMgPQogICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcmVCdWlsZENvbW1hbmRzKCk7CiAKLSAgICBjbUFwcGVuZChidWlsZEV2ZW50Q29tbWFuZHMsIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJlTGlua0NvbW1hbmRzKCkpOwotICAgIGNtQXBwZW5kKGJ1aWxkRXZlbnRDb21tYW5kcywKLSAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBvc3RCdWlsZENvbW1hbmRzKCkpOworICAgIGNtOjphcHBlbmQoYnVpbGRFdmVudENvbW1hbmRzLAorICAgICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcmVMaW5rQ29tbWFuZHMoKSk7CisgICAgY206OmFwcGVuZChidWlsZEV2ZW50Q29tbWFuZHMsCisgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBvc3RCdWlsZENvbW1hbmRzKCkpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBiZSA6IGJ1aWxkRXZlbnRDb21tYW5kcykgewotICAgICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGJlZyhiZSwgdGhpcy0+Q29uZmlnTmFtZSwgdGhpcy0+TG9jYWxHZW5lcmF0b3IpOworICAgICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGJlZyhiZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcik7CiAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGJ5cHJvZHVjdHMgPSBiZWcuR2V0Qnlwcm9kdWN0cygpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYnlwcm9kdWN0IDogYnlwcm9kdWN0cykgewogICAgICAgICB0aGlzLT5DbGVhbkZpbGVzLmluc2VydCgKQEAgLTIzMCwxNyArMjQ4LDE5IEBACiAgICAgfQogICB9CiAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGhlYWRlclNvdXJjZXM7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0SGVhZGVyU291cmNlcyhoZWFkZXJTb3VyY2VzLCB0aGlzLT5Db25maWdOYW1lKTsKKyAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRIZWFkZXJTb3VyY2VzKGhlYWRlclNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkdlbmVyYXRlTWFjT1NYQ29udGVudFN0YXRlbWVudHMoCi0gICAgaGVhZGVyU291cmNlcywgdGhpcy0+TWFjT1NYQ29udGVudEdlbmVyYXRvcik7CisgICAgaGVhZGVyU291cmNlcywgdGhpcy0+TWFjT1NYQ29udGVudEdlbmVyYXRvci5nZXQoKSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gZXh0cmFTb3VyY2VzOwotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4dHJhU291cmNlcyhleHRyYVNvdXJjZXMsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4dHJhU291cmNlcyhleHRyYVNvdXJjZXMsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+R2VuZXJhdGVNYWNPU1hDb250ZW50U3RhdGVtZW50cygKLSAgICBleHRyYVNvdXJjZXMsIHRoaXMtPk1hY09TWENvbnRlbnRHZW5lcmF0b3IpOworICAgIGV4dHJhU291cmNlcywgdGhpcy0+TWFjT1NYQ29udGVudEdlbmVyYXRvci5nZXQoKSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgY29uc3QgY2hhciogcGNoRXh0ZW5zaW9uID0KICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfUENIX0VYVEVOU0lPTiIpOwogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBleHRlcm5hbE9iamVjdHM7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXh0ZXJuYWxPYmplY3RzKGV4dGVybmFsT2JqZWN0cywgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXh0ZXJuYWxPYmplY3RzKGV4dGVybmFsT2JqZWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNmIDogZXh0ZXJuYWxPYmplY3RzKSB7CiAgICAgYXV0byBjb25zdCYgb2JqZWN0RmlsZU5hbWUgPSBzZi0+R2V0RnVsbFBhdGgoKTsKICAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OlN0cmluZ0VuZHNXaXRoKG9iamVjdEZpbGVOYW1lLCBwY2hFeHRlbnNpb24pKSB7CkBAIC0yNDgsNyArMjY4LDggQEAKICAgICB9CiAgIH0KICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gb2JqZWN0U291cmNlczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRPYmplY3RTb3VyY2VzKG9iamVjdFNvdXJjZXMsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE9iamVjdFNvdXJjZXMob2JqZWN0U291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzZiA6IG9iamVjdFNvdXJjZXMpIHsKICAgICAvLyBHZW5lcmF0ZSB0aGlzIG9iamVjdCBmaWxlJ3MgcnVsZSBmaWxlLgogICAgIHRoaXMtPldyaXRlT2JqZWN0UnVsZUZpbGVzKCpzZik7CkBAIC0yOTEsMTcgKzMxMiwxNiBAQAogICAgICAgZGVwZW5kRmlsZU5hbWVGdWxsLCBmYWxzZSwgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZUVuY29kaW5nKCkpOwogICAgIGRlcEZpbGVTdHJlYW0gPDwgIiMgRW1wdHkgZGVwZW5kZW5jaWVzIGZpbGUgZm9yICIKICAgICAgICAgICAgICAgICAgIDw8IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpIDw8ICIuXG4iCi0gICAgICAgICAgICAgICAgICA8PCAiIyBUaGlzIG1heSBiZSByZXBsYWNlZCB3aGVuIGRlcGVuZGVuY2llcyBhcmUgYnVpbHQuIgotICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICAgICAgPDwgIiMgVGhpcyBtYXkgYmUgcmVwbGFjZWQgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0LlxuIjsKICAgfQogCiAgIC8vIE9wZW4gdGhlIGZsYWdzIGZpbGUuICBUaGlzIHNob3VsZCBiZSBjb3B5LWlmLWRpZmZlcmVudCBiZWNhdXNlIHRoZQogICAvLyBydWxlcyBtYXkgZGVwZW5kIG9uIHRoaXMgZmlsZSBpdHNlbGYuCiAgIHRoaXMtPkZsYWdGaWxlTmFtZUZ1bGwgPQogICAgIGNtU3RyQ2F0KHRoaXMtPlRhcmdldEJ1aWxkRGlyZWN0b3J5RnVsbCwgIi9mbGFncy5tYWtlIik7Ci0gIHRoaXMtPkZsYWdGaWxlU3RyZWFtID0KLSAgICBuZXcgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKHRoaXMtPkZsYWdGaWxlTmFtZUZ1bGwsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZUVuY29kaW5nKCkpOworICB0aGlzLT5GbGFnRmlsZVN0cmVhbSA9IGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+KAorICAgIHRoaXMtPkZsYWdGaWxlTmFtZUZ1bGwsIGZhbHNlLAorICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGVFbmNvZGluZygpKTsKICAgaWYgKCF0aGlzLT5GbGFnRmlsZVN0cmVhbSkgewogICAgIHJldHVybjsKICAgfQpAQCAtMzMzLDIyICszNTMsMzcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlxuIjsKICAgfQogCisgIGJvb2wgY29uc3QgZXNjYXBlT2N0b3Rob3JwZSA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+Q2FuRXNjYXBlT2N0b3Rob3JwZSgpOworCiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmd1YWdlIDogbGFuZ3VhZ2VzKSB7Ci0gICAgc3RkOjpzdHJpbmcgZmxhZ3MgPSB0aGlzLT5HZXRGbGFncyhsYW5ndWFnZSk7Ci0gICAgc3RkOjpzdHJpbmcgZGVmaW5lcyA9IHRoaXMtPkdldERlZmluZXMobGFuZ3VhZ2UpOwotICAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVzID0gdGhpcy0+R2V0SW5jbHVkZXMobGFuZ3VhZ2UpOwotICAgIC8vIEVzY2FwZSBjb21tZW50IGNoYXJhY3RlcnMgc28gdGhleSBkbyBub3QgdGVybWluYXRlIGFzc2lnbm1lbnQuCi0gICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhmbGFncywgIiMiLCAiXFwjIik7Ci0gICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhkZWZpbmVzLCAiIyIsICJcXCMiKTsKLSAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGluY2x1ZGVzLCAiIyIsICJcXCMiKTsKLSAgICAqdGhpcy0+RmxhZ0ZpbGVTdHJlYW0gPDwgbGFuZ3VhZ2UgPDwgIl9GTEFHUyA9ICIgPDwgZmxhZ3MgPDwgIlxuXG4iOworICAgIHN0ZDo6c3RyaW5nIGRlZmluZXMgPSB0aGlzLT5HZXREZWZpbmVzKGxhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVzID0gdGhpcy0+R2V0SW5jbHVkZXMobGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgaWYgKGVzY2FwZU9jdG90aG9ycGUpIHsKKyAgICAgIC8vIEVzY2FwZSBjb21tZW50IGNoYXJhY3RlcnMgc28gdGhleSBkbyBub3QgdGVybWluYXRlIGFzc2lnbm1lbnQuCisgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGRlZmluZXMsICIjIiwgIlxcIyIpOworICAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhpbmNsdWRlcywgIiMiLCAiXFwjIik7CisgICAgfQogICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCBsYW5ndWFnZSA8PCAiX0RFRklORVMgPSAiIDw8IGRlZmluZXMgPDwgIlxuXG4iOwogICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCBsYW5ndWFnZSA8PCAiX0lOQ0xVREVTID0gIiA8PCBpbmNsdWRlcyA8PCAiXG5cbiI7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJjaGl0ZWN0dXJlczsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEFwcGxlQXJjaHModGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBhcmNoaXRlY3R1cmVzKTsKKyAgICBhcmNoaXRlY3R1cmVzLmVtcGxhY2VfYmFjaygpOworCisgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgYXJjaCA6IGFyY2hpdGVjdHVyZXMpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGZsYWdzID0KKyAgICAgICAgdGhpcy0+R2V0RmxhZ3MobGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgYXJjaCk7CisgICAgICBpZiAoZXNjYXBlT2N0b3Rob3JwZSkgeworICAgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGZsYWdzLCAiIyIsICJcXCMiKTsKKyAgICAgIH0KKyAgICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCBsYW5ndWFnZSA8PCAiX0ZMQUdTIiA8PCBhcmNoIDw8ICIgPSAiIDw8IGZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlxuXG4iOworICAgIH0KICAgfQogfQogCiB2b2lkIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6Ok1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlOjpvcGVyYXRvcigpKAotICBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwgY29uc3QgY2hhciogcGtnbG9jKQorICBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwgY29uc3QgY2hhciogcGtnbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICAvLyBTa2lwIE9TIFggY29udGVudCB3aGVuIG5vdCBidWlsZGluZyBhIEZyYW1ld29yayBvciBCdW5kbGUuCiAgIGlmICghdGhpcy0+R2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+SXNCdW5kbGVPbkFwcGxlKCkpIHsKQEAgLTM1Niw3ICszOTEsOCBAQAogICB9CiAKICAgc3RkOjpzdHJpbmcgbWFjZGlyID0KLSAgICB0aGlzLT5HZW5lcmF0b3ItPk9TWEJ1bmRsZUdlbmVyYXRvci0+SW5pdE1hY09TWENvbnRlbnREaXJlY3RvcnkocGtnbG9jKTsKKyAgICB0aGlzLT5HZW5lcmF0b3ItPk9TWEJ1bmRsZUdlbmVyYXRvci0+SW5pdE1hY09TWENvbnRlbnREaXJlY3RvcnkocGtnbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogCiAgIC8vIEdldCB0aGUgaW5wdXQgZmlsZSBsb2NhdGlvbi4KICAgc3RkOjpzdHJpbmcgY29uc3QmIGlucHV0ID0gc291cmNlLkdldEZ1bGxQYXRoKCk7CkBAIC00NTEsMjEgKzQ4Nyw0MSBAQAogICAvLyBnZW5lcmF0ZSB0aGUgZGVwZW5kIHNjYW5uaW5nIHJ1bGUKICAgdGhpcy0+V3JpdGVPYmplY3REZXBlbmRSdWxlcyhzb3VyY2UsIGRlcGVuZHMpOwogCi0gIHN0ZDo6c3RyaW5nIGNvbmZpZyA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDb25maWdOYW1lKCk7CisgIHN0ZDo6c3RyaW5nIGNvbmZpZyA9IHRoaXMtPkdldENvbmZpZ05hbWUoKTsKICAgc3RkOjpzdHJpbmcgY29uZmlnVXBwZXIgPSBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKTsKIAogICAvLyBBZGQgcHJlY29tcGlsZSBoZWFkZXJzIGRlcGVuZGVuY2llcwotICBjb25zdCBzdGQ6OnN0cmluZyBwY2hTb3VyY2UgPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZyk7Ci0gIGlmICghcGNoU291cmNlLmVtcHR5KCkgJiYgIXNvdXJjZS5HZXRQcm9wZXJ0eSgiU0tJUF9QUkVDT01QSUxFX0hFQURFUlMiKSkgewotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwY2hIZWFkZXIgPQotICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5nKTsKLSAgICBkZXBlbmRzLnB1c2hfYmFjayhwY2hIZWFkZXIpOwotICAgIGlmIChzb3VyY2UuR2V0RnVsbFBhdGgoKSAhPSBwY2hTb3VyY2UpIHsKLSAgICAgIGRlcGVuZHMucHVzaF9iYWNrKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoRmlsZShjb25maWcsIGxhbmcpKTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyY2hpdGVjdHVyZXM7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0QXBwbGVBcmNocyhjb25maWcsIGFyY2hpdGVjdHVyZXMpOworICBpZiAoYXJjaGl0ZWN0dXJlcy5lbXB0eSgpKSB7CisgICAgYXJjaGl0ZWN0dXJlcy5lbXBsYWNlX2JhY2soKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIGZpbHRlckFyY2g7CisgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IHBjaFNvdXJjZXM7CisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggOiBhcmNoaXRlY3R1cmVzKSB7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoU291cmNlID0KKyAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZywgYXJjaCk7CisgICAgaWYgKHBjaFNvdXJjZSA9PSBzb3VyY2UuR2V0RnVsbFBhdGgoKSkgeworICAgICAgZmlsdGVyQXJjaCA9IGFyY2g7CiAgICAgfQotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRJbXBsaWNpdERlcGVuZHModGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqRnVsbFBhdGgsIHBjaEhlYWRlcik7CisgICAgaWYgKCFwY2hTb3VyY2UuZW1wdHkoKSkgeworICAgICAgcGNoU291cmNlcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIocGNoU291cmNlLCBhcmNoKSk7CisgICAgfQorICB9CisKKyAgaWYgKCFwY2hTb3VyY2VzLmVtcHR5KCkgJiYgIXNvdXJjZS5HZXRQcm9wZXJ0eSgiU0tJUF9QUkVDT01QSUxFX0hFQURFUlMiKSkgeworICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggOiBhcmNoaXRlY3R1cmVzKSB7CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcGNoSGVhZGVyID0KKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5nLCBhcmNoKTsKKyAgICAgIGRlcGVuZHMucHVzaF9iYWNrKHBjaEhlYWRlcik7CisgICAgICBpZiAocGNoU291cmNlcy5maW5kKHNvdXJjZS5HZXRGdWxsUGF0aCgpKSA9PSBwY2hTb3VyY2VzLmVuZCgpKSB7CisgICAgICAgIGRlcGVuZHMucHVzaF9iYWNrKAorICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoRmlsZShjb25maWcsIGxhbmcsIGFyY2gpKTsKKyAgICAgIH0KKyAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BZGRJbXBsaWNpdERlcGVuZHModGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpGdWxsUGF0aCwgcGNoSGVhZGVyKTsKKyAgICB9CiAgIH0KIAogICBzdGQ6OnN0cmluZyByZWxhdGl2ZU9iaiA9CkBAIC00NzUsOCArNTMxLDE1IEBACiAgIC8vIEJ1aWxkIHRoZSBzZXQgb2YgY29tcGlsZXIgZmxhZ3MuCiAgIHN0ZDo6c3RyaW5nIGZsYWdzOwogCisgIC8vIGV4cGxpY2l0bHkgYWRkIHRoZSBleHBsaWNpdCBsYW5ndWFnZSBmbGFnIGJlZm9yZSBhbnkgb3RoZXIgZmxhZworICAvLyB0aGlzIHdheSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXIgZmxhZ3MgaXMgbWFpbnRhaW5lZAorICBpZiAoc291cmNlLkdldFByb3BlcnR5KCJMQU5HVUFHRSIpKSB7CisgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZlYXR1cmVPcHRpb25zKGZsYWdzLCBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRVhQTElDSVRfTEFOR1VBR0UiKTsKKyAgfQorCiAgIC8vIEFkZCBsYW5ndWFnZS1zcGVjaWZpYyBmbGFncy4KLSAgc3RkOjpzdHJpbmcgbGFuZ0ZsYWdzID0gY21TdHJDYXQoIiQoIiwgbGFuZywgIl9GTEFHUykiKTsKKyAgc3RkOjpzdHJpbmcgbGFuZ0ZsYWdzID0gY21TdHJDYXQoIiQoIiwgbGFuZywgIl9GTEFHUyIsIGZpbHRlckFyY2gsICIpIik7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncyhmbGFncywgbGFuZ0ZsYWdzKTsKIAogICBjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlciBnZW5leEludGVycHJldGVyKApAQCAtNDg1LDEzICs1NDgsMTQgQEAKICAgLy8gQWRkIEZvcnRyYW4gZm9ybWF0IGZsYWdzLgogICBpZiAobGFuZyA9PSAiRm9ydHJhbiIpIHsKICAgICB0aGlzLT5BcHBlbmRGb3J0cmFuRm9ybWF0RmxhZ3MoZmxhZ3MsIHNvdXJjZSk7CisgICAgdGhpcy0+QXBwZW5kRm9ydHJhblByZXByb2Nlc3NGbGFncyhmbGFncywgc291cmNlKTsKICAgfQogCiAgIC8vIEFkZCBmbGFncyBmcm9tIHNvdXJjZSBmaWxlIHByb3BlcnRpZXMuCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIENPTVBJTEVfRkxBR1MoIkNPTVBJTEVfRkxBR1MiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNmbGFncyA9IHNvdXJjZS5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgeworICBpZiAoY21Qcm9wIGNmbGFncyA9IHNvdXJjZS5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBldmFsdWF0ZWRGbGFncyA9Ci0gICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNmbGFncywgQ09NUElMRV9GTEFHUyk7CisgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjZmxhZ3MsIENPTVBJTEVfRkxBR1MpOwogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncyhmbGFncywgZXZhbHVhdGVkRmxhZ3MpOwogICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCAiIyBDdXN0b20gZmxhZ3M6ICIgPDwgcmVsYXRpdmVPYmoKICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIl9GTEFHUyA9ICIgPDwgZXZhbHVhdGVkRmxhZ3MgPDwgIlxuIgpAQCAtNDk5LDkgKzU2Myw5IEBACiAgIH0KIAogICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX09QVElPTlMoIkNPTVBJTEVfT1BUSU9OUyIpOwotICBpZiAoY29uc3QgY2hhciogY29wdGlvbnMgPSBzb3VyY2UuR2V0UHJvcGVydHkoQ09NUElMRV9PUFRJT05TKSkgeworICBpZiAoY21Qcm9wIGNvcHRpb25zID0gc291cmNlLkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXZhbHVhdGVkT3B0aW9ucyA9Ci0gICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvcHRpb25zLCBDT01QSUxFX09QVElPTlMpOworICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUyk7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZENvbXBpbGVPcHRpb25zKGZsYWdzLCBldmFsdWF0ZWRPcHRpb25zKTsKICAgICAqdGhpcy0+RmxhZ0ZpbGVTdHJlYW0gPDwgIiMgQ3VzdG9tIG9wdGlvbnM6ICIgPDwgcmVsYXRpdmVPYmoKICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIl9PUFRJT05TID0gIiA8PCBldmFsdWF0ZWRPcHRpb25zIDw8ICJcbiIKQEAgLTUwOSwxMSArNTczLDEyIEBACiAgIH0KIAogICAvLyBBZGQgcHJlY29tcGlsZSBoZWFkZXJzIGNvbXBpbGUgb3B0aW9ucy4KLSAgaWYgKCFwY2hTb3VyY2UuZW1wdHkoKSAmJiAhc291cmNlLkdldFByb3BlcnR5KCJTS0lQX1BSRUNPTVBJTEVfSEVBREVSUyIpKSB7CisgIGlmICghcGNoU291cmNlcy5lbXB0eSgpICYmICFzb3VyY2UuR2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKICAgICBzdGQ6OnN0cmluZyBwY2hPcHRpb25zOwotICAgIGlmIChzb3VyY2UuR2V0RnVsbFBhdGgoKSA9PSBwY2hTb3VyY2UpIHsKLSAgICAgIHBjaE9wdGlvbnMgPQotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaENyZWF0ZUNvbXBpbGVPcHRpb25zKGNvbmZpZywgbGFuZyk7CisgICAgYXV0byBwY2hJdCA9IHBjaFNvdXJjZXMuZmluZChzb3VyY2UuR2V0RnVsbFBhdGgoKSk7CisgICAgaWYgKHBjaEl0ICE9IHBjaFNvdXJjZXMuZW5kKCkpIHsKKyAgICAgIHBjaE9wdGlvbnMgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaENyZWF0ZUNvbXBpbGVPcHRpb25zKAorICAgICAgICBjb25maWcsIGxhbmcsIHBjaEl0LT5zZWNvbmQpOwogICAgIH0gZWxzZSB7CiAgICAgICBwY2hPcHRpb25zID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hVc2VDb21waWxlT3B0aW9ucyhjb25maWcsIGxhbmcpOwpAQCAtNTMyLDkgKzU5Nyw5IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlczsKIAogICBjb25zdCBzdGQ6OnN0cmluZyBJTkNMVURFX0RJUkVDVE9SSUVTKCJJTkNMVURFX0RJUkVDVE9SSUVTIik7Ci0gIGlmIChjb25zdCBjaGFyKiBjaW5jbHVkZXMgPSBzb3VyY2UuR2V0UHJvcGVydHkoSU5DTFVERV9ESVJFQ1RPUklFUykpIHsKKyAgaWYgKGNtUHJvcCBjaW5jbHVkZXMgPSBzb3VyY2UuR2V0UHJvcGVydHkoSU5DTFVERV9ESVJFQ1RPUklFUykpIHsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXZhbHVhdGVkSW5jbHVkZXMgPQotICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjaW5jbHVkZXMsIElOQ0xVREVfRElSRUNUT1JJRVMpOworICAgICAgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2luY2x1ZGVzLCBJTkNMVURFX0RJUkVDVE9SSUVTKTsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kSW5jbHVkZURpcmVjdG9yaWVzKGluY2x1ZGVzLCBldmFsdWF0ZWRJbmNsdWRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSk7CiAgICAgKnRoaXMtPkZsYWdGaWxlU3RyZWFtIDw8ICIjIEN1c3RvbSBpbmNsdWRlIGRpcmVjdG9yaWVzOiAiIDw8IHJlbGF0aXZlT2JqCkBAIC01NDgsMTggKzYxMywxOCBAQAogCiAgIC8vIEFkZCBzb3VyY2Utc3BlY2lmaWMgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLgogICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX0RFRklOSVRJT05TKCJDT01QSUxFX0RFRklOSVRJT05TIik7Ci0gIGlmIChjb25zdCBjaGFyKiBjb21waWxlX2RlZnMgPSBzb3VyY2UuR2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKKyAgaWYgKGNtUHJvcCBjb21waWxlX2RlZnMgPSBzb3VyY2UuR2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXZhbHVhdGVkRGVmcyA9Ci0gICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUyk7CisgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb21waWxlX2RlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpOwogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmREZWZpbmVzKGRlZmluZXMsIGV2YWx1YXRlZERlZnMpOwogICAgICp0aGlzLT5GbGFnRmlsZVN0cmVhbSA8PCAiIyBDdXN0b20gZGVmaW5lczogIiA8PCByZWxhdGl2ZU9iagogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiX0RFRklORVMgPSAiIDw8IGV2YWx1YXRlZERlZnMgPDwgIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iOwogICB9CiAgIHN0ZDo6c3RyaW5nIGRlZlByb3BOYW1lID0gY21TdHJDYXQoIkNPTVBJTEVfREVGSU5JVElPTlNfIiwgY29uZmlnVXBwZXIpOwotICBpZiAoY29uc3QgY2hhciogY29uZmlnX2NvbXBpbGVfZGVmcyA9IHNvdXJjZS5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSkpIHsKKyAgaWYgKGNtUHJvcCBjb25maWdfY29tcGlsZV9kZWZzID0gc291cmNlLkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBldmFsdWF0ZWREZWZzID0KLSAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29uZmlnX2NvbXBpbGVfZGVmcywgQ09NUElMRV9ERUZJTklUSU9OUyk7CisgICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb25maWdfY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKTsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRGVmaW5lcyhkZWZpbmVzLCBldmFsdWF0ZWREZWZzKTsKICAgICAqdGhpcy0+RmxhZ0ZpbGVTdHJlYW0gPDwgIiMgQ3VzdG9tIGRlZmluZXM6ICIgPDwgcmVsYXRpdmVPYmogPDwgIl9ERUZJTkVTXyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgY29uZmlnVXBwZXIgPDwgIiA9ICIgPDwgZXZhbHVhdGVkRGVmcyA8PCAiXG4iCkBAIC01OTMsMTYgKzY1OCwxNyBAQAogICB7CiAgICAgc3RkOjpzdHJpbmcgdGFyZ2V0RnVsbFBhdGhSZWFsOwogICAgIHN0ZDo6c3RyaW5nIHRhcmdldEZ1bGxQYXRoUERCOwotICAgIHN0ZDo6c3RyaW5nIHRhcmdldEZ1bGxQYXRoQ29tcGlsZVBEQiA9IHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKCk7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0RnVsbFBhdGhDb21waWxlUERCID0KKyAgICAgIHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSB8fAogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZIHx8CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWSkgewogICAgICAgdGFyZ2V0RnVsbFBhdGhSZWFsID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGdWxsUGF0aCgKLSAgICAgICAgdGhpcy0+Q29uZmlnTmFtZSwgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QsIHRydWUpOwotICAgICAgdGFyZ2V0RnVsbFBhdGhQREIgPQotICAgICAgICBjbVN0ckNhdCh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBEQkRpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lKSwgJy8nLAotICAgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBEQk5hbWUodGhpcy0+Q29uZmlnTmFtZSkpOworICAgICAgICB0aGlzLT5HZXRDb25maWdOYW1lKCksIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0LCB0cnVlKTsKKyAgICAgIHRhcmdldEZ1bGxQYXRoUERCID0gY21TdHJDYXQoCisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UERCRGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSksICcvJywKKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQREJOYW1lKHRoaXMtPkdldENvbmZpZ05hbWUoKSkpOwogICAgIH0KIAogICAgIHRhcmdldE91dFBhdGhSZWFsID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKQEAgLTYyOCw3ICs2OTQsNyBAQAogICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkuY19zdHIoKTsKICAgdmFycy5DTVRhcmdldFR5cGUgPQotICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpKTsKKyAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSkuY19zdHIoKTsKICAgdmFycy5MYW5ndWFnZSA9IGxhbmcuY19zdHIoKTsKICAgdmFycy5UYXJnZXQgPSB0YXJnZXRPdXRQYXRoUmVhbC5jX3N0cigpOwogICB2YXJzLlRhcmdldFBEQiA9IHRhcmdldE91dFBhdGhQREIuY19zdHIoKTsKQEAgLTcwNiwxNiArNzcyLDE4IEBACiAgICAgICAvLyBubyBsYXVuY2hlciBmb3IgQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMKICAgICAgIHJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLT5FeHBhbmRSdWxlVmFyaWFibGVzKHRoaXMtPkxvY2FsR2VuZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUNvbW1hbmQsIHZhcnMpOwotICAgICAgc3RkOjpzdHJpbmcgd29ya2luZ0RpcmVjdG9yeSA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCi0gICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpOworICAgICAgc3RkOjpzdHJpbmcgd29ya2luZ0RpcmVjdG9yeSA9CisgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CiAgICAgICBjb21waWxlQ29tbWFuZC5yZXBsYWNlKGNvbXBpbGVDb21tYW5kLmZpbmQobGFuZ0ZsYWdzKSwgbGFuZ0ZsYWdzLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0RmxhZ3MobGFuZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRGbGFncyhsYW5nLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpKTsKICAgICAgIHN0ZDo6c3RyaW5nIGxhbmdEZWZpbmVzID0gc3RkOjpzdHJpbmcoIiQoIikgKyBsYW5nICsgIl9ERUZJTkVTKSI7CiAgICAgICBjb21waWxlQ29tbWFuZC5yZXBsYWNlKGNvbXBpbGVDb21tYW5kLmZpbmQobGFuZ0RlZmluZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nRGVmaW5lcy5zaXplKCksIHRoaXMtPkdldERlZmluZXMobGFuZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nRGVmaW5lcy5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldERlZmluZXMobGFuZywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKSk7CiAgICAgICBzdGQ6OnN0cmluZyBsYW5nSW5jbHVkZXMgPSBzdGQ6OnN0cmluZygiJCgiKSArIGxhbmcgKyAiX0lOQ0xVREVTKSI7CiAgICAgICBjb21waWxlQ29tbWFuZC5yZXBsYWNlKGNvbXBpbGVDb21tYW5kLmZpbmQobGFuZ0luY2x1ZGVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ0luY2x1ZGVzLnNpemUoKSwgdGhpcy0+R2V0SW5jbHVkZXMobGFuZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nSW5jbHVkZXMuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRJbmNsdWRlcyhsYW5nLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpKTsKIAogICAgICAgY29uc3QgY2hhciogZWxpbWluYXRlW10gPSB7CiAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9TVEFSVF9URU1QX0ZJTEUiKSwKQEAgLTczNywyNSArODA1LDI0IEBACiAgICAgICAgIChsYW5nID09ICJDIiB8fCBsYW5nID09ICJDWFgiIHx8IGxhbmcgPT0gIkZvcnRyYW4iIHx8IGxhbmcgPT0gIkNVREEiIHx8CiAgICAgICAgICBsYW5nID09ICJPQkpDIiB8fCBsYW5nID09ICJPQkpDWFgiKSkgewogICAgICAgc3RkOjpzdHJpbmcgY29uc3QgY2xhdW5jaGVyX3Byb3AgPSBsYW5nICsgIl9DT01QSUxFUl9MQVVOQ0hFUiI7Ci0gICAgICBjb25zdCBjaGFyKiBjbGF1bmNoZXIgPQotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGNsYXVuY2hlcl9wcm9wKTsKLSAgICAgIGlmIChjbGF1bmNoZXIgJiYgKmNsYXVuY2hlcikgewotICAgICAgICBjb21waWxlckxhdW5jaGVyID0gY2xhdW5jaGVyOworICAgICAgY21Qcm9wIGNsYXVuY2hlciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoY2xhdW5jaGVyX3Byb3ApOworICAgICAgaWYgKGNtTm9uZW1wdHkoY2xhdW5jaGVyKSkgeworICAgICAgICBjb21waWxlckxhdW5jaGVyID0gKmNsYXVuY2hlcjsKICAgICAgIH0KICAgICB9CiAKICAgICAvLyBNYXliZSBpbnNlcnQgYW4gaW5jbHVkZS13aGF0LXlvdS11c2UgcnVubmVyLgogICAgIGlmICghY29tcGlsZUNvbW1hbmRzLmVtcHR5KCkgJiYgKGxhbmcgPT0gIkMiIHx8IGxhbmcgPT0gIkNYWCIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCBpd3l1X3Byb3AgPSBsYW5nICsgIl9JTkNMVURFX1dIQVRfWU9VX1VTRSI7Ci0gICAgICBjb25zdCBjaGFyKiBpd3l1ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShpd3l1X3Byb3ApOworICAgICAgY21Qcm9wIGl3eXUgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGl3eXVfcHJvcCk7CiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCB0aWR5X3Byb3AgPSBsYW5nICsgIl9DTEFOR19USURZIjsKLSAgICAgIGNvbnN0IGNoYXIqIHRpZHkgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KHRpZHlfcHJvcCk7CisgICAgICBjbVByb3AgdGlkeSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkodGlkeV9wcm9wKTsKICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGxpbnRfcHJvcCA9IGxhbmcgKyAiX0NQUExJTlQiOwotICAgICAgY29uc3QgY2hhciogY3BwbGludCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoY3BwbGludF9wcm9wKTsKKyAgICAgIGNtUHJvcCBjcHBsaW50ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShjcHBsaW50X3Byb3ApOwogICAgICAgc3RkOjpzdHJpbmcgY29uc3QgY3BwY2hlY2tfcHJvcCA9IGxhbmcgKyAiX0NQUENIRUNLIjsKLSAgICAgIGNvbnN0IGNoYXIqIGNwcGNoZWNrID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShjcHBjaGVja19wcm9wKTsKLSAgICAgIGlmICgoaXd5dSAmJiAqaXd5dSkgfHwgKHRpZHkgJiYgKnRpZHkpIHx8IChjcHBsaW50ICYmICpjcHBsaW50KSB8fAotICAgICAgICAgIChjcHBjaGVjayAmJiAqY3BwY2hlY2spKSB7CisgICAgICBjbVByb3AgY3BwY2hlY2sgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGNwcGNoZWNrX3Byb3ApOworICAgICAgaWYgKGNtTm9uZW1wdHkoaXd5dSkgfHwgY21Ob25lbXB0eSh0aWR5KSB8fCBjbU5vbmVtcHR5KGNwcGxpbnQpIHx8CisgICAgICAgICAgY21Ob25lbXB0eShjcHBjaGVjaykpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgcnVuX2l3eXUgPSAiJChDTUFLRV9DT01NQU5EKSAtRSBfX3J1bl9jb19jb21waWxlIjsKICAgICAgICAgaWYgKCFjb21waWxlckxhdW5jaGVyLmVtcHR5KCkpIHsKICAgICAgICAgICAvLyBJbiBfX3J1bl9jb19jb21waWxlIGNhc2UgdGhlIGxhdW5jaGVyIGNvbW1hbmQgaXMgc3VwcGxpZWQKQEAgLTc2NCwyNCArODMxLDMwIEBACiAgICAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkVzY2FwZUZvclNoZWxsKGNvbXBpbGVyTGF1bmNoZXIpOwogICAgICAgICAgIGNvbXBpbGVyTGF1bmNoZXIuY2xlYXIoKTsKICAgICAgICAgfQotICAgICAgICBpZiAoaXd5dSAmJiAqaXd5dSkgeworICAgICAgICBpZiAoY21Ob25lbXB0eShpd3l1KSkgewogICAgICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1pd3l1PSI7Ci0gICAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkVzY2FwZUZvclNoZWxsKGl3eXUpOworICAgICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbCgqaXd5dSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRpZHkgJiYgKnRpZHkpIHsKKyAgICAgICAgaWYgKGNtTm9uZW1wdHkodGlkeSkpIHsKICAgICAgICAgICBydW5faXd5dSArPSAiIC0tdGlkeT0iOwotICAgICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbCh0aWR5KTsKKyAgICAgICAgICBjb25zdCBjaGFyKiBkcml2ZXJNb2RlID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oCisgICAgICAgICAgICAiQ01BS0VfIiArIGxhbmcgKyAiX0NMQU5HX1RJRFlfRFJJVkVSX01PREUiKTsKKyAgICAgICAgICBpZiAoIWNtTm9uZW1wdHkoZHJpdmVyTW9kZSkpIHsKKyAgICAgICAgICAgIGRyaXZlck1vZGUgPSBsYW5nID09ICJDIiA/ICJnY2MiIDogImcrKyI7CisgICAgICAgICAgfQorICAgICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbCgKKyAgICAgICAgICAgIGNtU3RyQ2F0KCp0aWR5LCAiOy0tZXh0cmEtYXJnLWJlZm9yZT0tLWRyaXZlci1tb2RlPSIsIGRyaXZlck1vZGUpKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY3BwbGludCAmJiAqY3BwbGludCkgeworICAgICAgICBpZiAoY21Ob25lbXB0eShjcHBsaW50KSkgewogICAgICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1jcHBsaW50PSI7Ci0gICAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkVzY2FwZUZvclNoZWxsKGNwcGxpbnQpOworICAgICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbCgqY3BwbGludCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNwcGNoZWNrICYmICpjcHBjaGVjaykgeworICAgICAgICBpZiAoY21Ob25lbXB0eShjcHBjaGVjaykpIHsKICAgICAgICAgICBydW5faXd5dSArPSAiIC0tY3BwY2hlY2s9IjsKLSAgICAgICAgICBydW5faXd5dSArPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+RXNjYXBlRm9yU2hlbGwoY3BwY2hlY2spOworICAgICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbCgqY3BwY2hlY2spOwogICAgICAgICB9Ci0gICAgICAgIGlmICgodGlkeSAmJiAqdGlkeSkgfHwgKGNwcGxpbnQgJiYgKmNwcGxpbnQpIHx8Ci0gICAgICAgICAgICAoY3BwY2hlY2sgJiYgKmNwcGNoZWNrKSkgeworICAgICAgICBpZiAoY21Ob25lbXB0eSh0aWR5KSB8fCAoY21Ob25lbXB0eShjcHBsaW50KSkgfHwKKyAgICAgICAgICAgIChjbU5vbmVtcHR5KGNwcGNoZWNrKSkpIHsKICAgICAgICAgICBydW5faXd5dSArPSAiIC0tc291cmNlPSI7CiAgICAgICAgICAgcnVuX2l3eXUgKz0gc291cmNlRmlsZTsKICAgICAgICAgfQpAQCAtODA4LDcgKzg4MSw3IEBACiAgICAgewogICAgICAgY29uc3QgY2hhciogdmFsID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFJ1bGVMYXVuY2hlcigKICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCAiUlVMRV9MQVVOQ0hfQ09NUElMRSIpOwotICAgICAgaWYgKHZhbCAmJiAqdmFsKSB7CisgICAgICBpZiAoY21Ob25lbXB0eSh2YWwpKSB7CiAgICAgICAgIGxhdW5jaGVyID0gY21TdHJDYXQodmFsLCAnICcpOwogICAgICAgfQogICAgIH0KQEAgLTgyNCwxNSArODk3LDIwIEBACiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNyZWF0ZUNEQ29tbWFuZCgKICAgICAgIGNvbXBpbGVDb21tYW5kcywgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7Ci0gICAgY21BcHBlbmQoY29tbWFuZHMsIGNvbXBpbGVDb21tYW5kcyk7CisgICAgY206OmFwcGVuZChjb21tYW5kcywgY29tcGlsZUNvbW1hbmRzKTsKICAgfQogCiAgIC8vIENoZWNrIGZvciBleHRyYSBvdXRwdXRzIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGF0aW9uLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3V0cHV0cygxLCByZWxhdGl2ZU9iaik7Ci0gIGlmIChjb25zdCBjaGFyKiBleHRyYV9vdXRwdXRzX3N0ciA9IHNvdXJjZS5HZXRQcm9wZXJ0eSgiT0JKRUNUX09VVFBVVFMiKSkgewotICAgIC8vIFJlZ2lzdGVyIHRoZXNlIGFzIGV4dHJhIGZpbGVzIHRvIGNsZWFuLgotICAgIGNtRXhwYW5kTGlzdChleHRyYV9vdXRwdXRzX3N0ciwgb3V0cHV0cyk7Ci0gICAgdGhpcy0+Q2xlYW5GaWxlcy5pbnNlcnQob3V0cHV0cy5iZWdpbigpICsgMSwgb3V0cHV0cy5lbmQoKSk7CisgIGlmIChjbVByb3AgZXh0cmFfb3V0cHV0c19zdHIgPSBzb3VyY2UuR2V0UHJvcGVydHkoIk9CSkVDVF9PVVRQVVRTIikpIHsKKyAgICBzdGQ6OnN0cmluZyBldmFsdWF0ZWRfb3V0cHV0cyA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCisgICAgICAqZXh0cmFfb3V0cHV0c19zdHIsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcpOworCisgICAgaWYgKCFldmFsdWF0ZWRfb3V0cHV0cy5lbXB0eSgpKSB7CisgICAgICAvLyBSZWdpc3RlciB0aGVzZSBhcyBleHRyYSBmaWxlcyB0byBjbGVhbi4KKyAgICAgIGNtRXhwYW5kTGlzdChldmFsdWF0ZWRfb3V0cHV0cywgb3V0cHV0cyk7CisgICAgICB0aGlzLT5DbGVhbkZpbGVzLmluc2VydChvdXRwdXRzLmJlZ2luKCkgKyAxLCBvdXRwdXRzLmVuZCgpKTsKKyAgICB9CiAgIH0KIAogICAvLyBXcml0ZSB0aGUgcnVsZS4KQEAgLTg4Myw3ICs5NjEsNyBAQAogICAgICAgICAgIHByZXByb2Nlc3NDb21tYW5kcywKICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRCaW5hcnlEaXJlY3RvcnkoKSk7Ci0gICAgICAgIGNtQXBwZW5kKGNvbW1hbmRzLCBwcmVwcm9jZXNzQ29tbWFuZHMpOworICAgICAgICBjbTo6YXBwZW5kKGNvbW1hbmRzLCBwcmVwcm9jZXNzQ29tbWFuZHMpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3RkOjpzdHJpbmcgY21kID0KICAgICAgICAgICBjbVN0ckNhdCgiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV91bmltcGxlbWVudGVkX3ZhcmlhYmxlICIsCkBAIC05MjcsNyArMTAwNSw3IEBACiAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5DcmVhdGVDRENvbW1hbmQoCiAgICAgICAgICAgYXNzZW1ibHlDb21tYW5kcywgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpOwotICAgICAgICBjbUFwcGVuZChjb21tYW5kcywgYXNzZW1ibHlDb21tYW5kcyk7CisgICAgICAgIGNtOjphcHBlbmQoY29tbWFuZHMsIGFzc2VtYmx5Q29tbWFuZHMpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3RkOjpzdHJpbmcgY21kID0KICAgICAgICAgICBjbVN0ckNhdCgiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV91bmltcGxlbWVudGVkX3ZhcmlhYmxlICIsCkBAIC0xMDM3LDcgKzExMTUsOCBAQAogICB0aGlzLT5JbmZvRmlsZU5hbWVGdWxsID0gY21TdHJDYXQoZGlyLCAiL0RlcGVuZEluZm8uY21ha2UiKTsKICAgdGhpcy0+SW5mb0ZpbGVOYW1lRnVsbCA9CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb0Z1bGxQYXRoKHRoaXMtPkluZm9GaWxlTmFtZUZ1bGwpOwotICB0aGlzLT5JbmZvRmlsZVN0cmVhbSA9IG5ldyBjbUdlbmVyYXRlZEZpbGVTdHJlYW0odGhpcy0+SW5mb0ZpbGVOYW1lRnVsbCk7CisgIHRoaXMtPkluZm9GaWxlU3RyZWFtID0KKyAgICBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0ZWRGaWxlU3RyZWFtPih0aGlzLT5JbmZvRmlsZU5hbWVGdWxsKTsKICAgaWYgKCF0aGlzLT5JbmZvRmlsZVN0cmVhbSkgewogICAgIHJldHVybjsKICAgfQpAQCAtMTA2OSw3ICsxMTQ4LDggQEAKICAgICA8PCAiIyBUYXJnZXRzIHRvIHdoaWNoIHRoaXMgdGFyZ2V0IGxpbmtzLlxuIgogICAgIDw8ICJzZXQoQ01BS0VfVEFSR0VUX0xJTktFRF9JTkZPX0ZJTEVTXG4iOwogICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkaXJzID0gdGhpcy0+R2V0TGlua2VkVGFyZ2V0RGlyZWN0b3JpZXMoKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGlycyA9CisgICAgICB0aGlzLT5HZXRMaW5rZWRUYXJnZXREaXJlY3Rvcmllcyh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGQgOiBkaXJzKSB7CiAgICAgICAqdGhpcy0+SW5mb0ZpbGVTdHJlYW0gPDwgIiAgXCIiIDw8IGQgPDwgIi9EZXBlbmRJbmZvLmNtYWtlXCJcbiI7CiAgICAgfQpAQCAtMTEwOSw4ICsxMTg5LDcgQEAKICAgLy8gdHJhbnNsYXRpb24gdGFibGUgZm9yIHRoZSBkZXBlbmRlbmN5IHNjYW5uaW5nIHByb2Nlc3MuCiAgIGRlcENtZCA8PCAiY2QgIgogICAgICAgICAgPDwgKHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCi0gICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpKSwKKyAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEJpbmFyeURpcmVjdG9yeSgpLAogICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpKQogICAgICAgICAgPDwgIiAmJiAiOwogI2VuZGlmCkBAIC0xMTI2LDIzICsxMjA1LDE5IEBACiAgIGRlcENtZCA8PCAiJChDTUFLRV9DT01NQU5EKSAtRSBjbWFrZV9kZXBlbmRzIFwiIgogICAgICAgICAgPDwgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXROYW1lKCkgPDwgIlwiICIKICAgICAgICAgIDw8IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCi0gICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFNvdXJjZURpcmVjdG9yeSgpKSwKKyAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFNvdXJjZURpcmVjdG9yeSgpLAogICAgICAgICAgICAgICBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpCiAgICAgICAgICA8PCAiICIKICAgICAgICAgIDw8IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCi0gICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSksCisgICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkKICAgICAgICAgIDw8ICIgIgogICAgICAgICAgPDwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKLSAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCkpLAorICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkKICAgICAgICAgIDw8ICIgIgogICAgICAgICAgPDwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKLSAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKSwKKyAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKQogICAgICAgICAgPDwgIiAiCiAgICAgICAgICA8PCB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KApAQCAtMTE3Miw5ICsxMjQ3LDkgQEAKICAgICBzb3VyY2VzLCB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSk7CiAgIGZvciAoY21Tb3VyY2VGaWxlKiBzb3VyY2UgOiBzb3VyY2VzKSB7CiAgICAgaWYgKGNtQ3VzdG9tQ29tbWFuZCogY2MgPSBzb3VyY2UtPkdldEN1c3RvbUNvbW1hbmQoKSkgewotICAgICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZygqY2MsIHRoaXMtPkNvbmZpZ05hbWUsCisgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKCpjYywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvcik7Ci0gICAgICBjbUFwcGVuZChkZXBlbmRzLCBjY2cuR2V0T3V0cHV0cygpKTsKKyAgICAgIGNtOjphcHBlbmQoZGVwZW5kcywgY2NnLkdldE91dHB1dHMoKSk7CiAgICAgfQogICB9CiB9CkBAIC0xMTg1LDggKzEyNjAsOCBAQAogICAvLyBDcmVhdGUgdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGtub3duIGF0IGNtYWtlIHRpbWUuICBUaGVzZSBhcmUKICAgLy8gc2hhcmVkIGJldHdlZW4gdGhlIG9iamVjdCBmaWxlIGFuZCBkZXBlbmRlbmN5IHNjYW5uaW5nIHJ1bGUuCiAgIGRlcGVuZHMucHVzaF9iYWNrKHNvdXJjZS5HZXRGdWxsUGF0aCgpKTsKLSAgaWYgKGNvbnN0IGNoYXIqIG9iamVjdERlcHMgPSBzb3VyY2UuR2V0UHJvcGVydHkoIk9CSkVDVF9ERVBFTkRTIikpIHsKLSAgICBjbUV4cGFuZExpc3Qob2JqZWN0RGVwcywgZGVwZW5kcyk7CisgIGlmIChjbVByb3Agb2JqZWN0RGVwcyA9IHNvdXJjZS5HZXRQcm9wZXJ0eSgiT0JKRUNUX0RFUEVORFMiKSkgeworICAgIGNtRXhwYW5kTGlzdCgqb2JqZWN0RGVwcywgZGVwZW5kcyk7CiAgIH0KIH0KIApAQCAtMTIzMCw4ICsxMzA1LDEwIEBACiAKICAgLy8gU2V0dXAgaW1wbGljaXQgZGVwZW5kZW5jeSBzY2FubmluZy4KICAgZm9yIChhdXRvIGNvbnN0JiBpZGkgOiBjY2cuR2V0Q0MoKS5HZXRJbXBsaWNpdERlcGVuZHMoKSkgewotICAgIHN0ZDo6c3RyaW5nIG9iakZ1bGxQYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChvdXRwdXRzWzBdKTsKLSAgICBzdGQ6OnN0cmluZyBzcmNGdWxsUGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoaWRpLnNlY29uZCk7CisgICAgc3RkOjpzdHJpbmcgb2JqRnVsbFBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgb3V0cHV0c1swXSwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7CisgICAgc3RkOjpzdHJpbmcgc3JjRnVsbFBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgaWRpLnNlY29uZCwgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFkZEltcGxpY2l0RGVwZW5kcyh0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGlkaS5maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iakZ1bGxQYXRoLCBzcmNGdWxsUGF0aCk7CiAgIH0KQEAgLTE0MTEsNyArMTQ4OCw3IEBACiAgICAgfQogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBleHRyYSBmaWxlcyBhcmUgYnVpbHQuCi0gICAgY21BcHBlbmQoZGVwZW5kcywgdGhpcy0+RXh0cmFGaWxlcyk7CisgICAgY206OmFwcGVuZChkZXBlbmRzLCB0aGlzLT5FeHRyYUZpbGVzKTsKICAgfQogCiAgIC8vIFdyaXRlIHRoZSBkcml2ZXIgcnVsZS4KQEAgLTE0MzAsMTAgKzE1MDcsMTAgQEAKICAgfQogCiAgIC8vIExvb3Agb3ZlciBhbGwgbGlicmFyeSBkZXBlbmRlbmNpZXMuCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBjZmcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q29uZmlnTmFtZSgpOworICBjb25zdCBzdGQ6OnN0cmluZyYgY2ZnID0gdGhpcy0+R2V0Q29uZmlnTmFtZSgpOwogICBpZiAoY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBjbGkgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtJbmZvcm1hdGlvbihjZmcpKSB7Ci0gICAgY21BcHBlbmQoZGVwZW5kcywgY2xpLT5HZXREZXBlbmRzKCkpOworICAgIGNtOjphcHBlbmQoZGVwZW5kcywgY2xpLT5HZXREZXBlbmRzKCkpOwogICB9CiB9CiAKQEAgLTE0NDksNyArMTUyNiw3IEBACiAgIH0KIAogICAvLyBBZGQgZGVwZW5kZW5jaWVzIG9uIHRoZSBleHRlcm5hbCBvYmplY3QgZmlsZXMuCi0gIGNtQXBwZW5kKGRlcGVuZHMsIHRoaXMtPkV4dGVybmFsT2JqZWN0cyk7CisgIGNtOjphcHBlbmQoZGVwZW5kcywgdGhpcy0+RXh0ZXJuYWxPYmplY3RzKTsKIAogICAvLyBBZGQgYSBkZXBlbmRlbmN5IG9uIHRoZSBydWxlIGZpbGUgaXRzZWxmLgogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kUnVsZURlcGVuZChkZXBlbmRzLApAQCAtMTQ3NSwxMyArMTU1MiwxMyBAQAogCiAgIC8vIEFkZCBhIGRlcGVuZGVuY3kgb24gdXNlci1zcGVjaWZpZWQgbWFuaWZlc3QgZmlsZXMsIGlmIGFueS4KICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gbWFuaWZlc3Rfc3JjczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNYW5pZmVzdHMobWFuaWZlc3Rfc3JjcywgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TWFuaWZlc3RzKG1hbmlmZXN0X3NyY3MsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBtYW5pZmVzdF9zcmMgOiBtYW5pZmVzdF9zcmNzKSB7CiAgICAgZGVwZW5kcy5wdXNoX2JhY2sobWFuaWZlc3Rfc3JjLT5HZXRGdWxsUGF0aCgpKTsKICAgfQogCiAgIC8vIEFkZCB1c2VyLXNwZWNpZmllZCBkZXBlbmRlbmNpZXMuCi0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0RlcGVuZHMoZGVwZW5kcywgdGhpcy0+Q29uZmlnTmFtZSwKKyAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rRGVwZW5kcyhkZXBlbmRzLCB0aGlzLT5HZXRDb25maWdOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0xhbmd1YWdlKTsKIH0KIApAQCAtMTQ4OSwxMCArMTU2NiwxMSBAQAogICBjb25zdCBzdGQ6OnN0cmluZyYgbGlua1J1bGVWYXIpCiB7CiAgIHN0ZDo6c3RyaW5nIGxpbmtSdWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldFJlcXVpcmVkRGVmaW5pdGlvbihsaW5rUnVsZVZhcik7Ci0gIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkhhc0ltcGxpYkdOVXRvTVModGhpcy0+Q29uZmlnTmFtZSkpIHsKLSAgICBzdGQ6OnN0cmluZyBydWxlVmFyID0gY21TdHJDYXQoCi0gICAgICAiQ01BS0VfIiwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5Db25maWdOYW1lKSwKLSAgICAgICJfR05VdG9NU19SVUxFIik7CisgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkhhc0ltcGxpYkdOVXRvTVModGhpcy0+R2V0Q29uZmlnTmFtZSgpKSkgeworICAgIHN0ZDo6c3RyaW5nIHJ1bGVWYXIgPQorICAgICAgY21TdHJDYXQoIkNNQUtFXyIsCisgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkdldENvbmZpZ05hbWUoKSksCisgICAgICAgICAgICAgICAiX0dOVXRvTVNfUlVMRSIpOwogICAgIGlmIChjb25zdCBjaGFyKiBydWxlID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24ocnVsZVZhcikpIHsKICAgICAgIGxpbmtSdWxlICs9IHJ1bGU7CiAgICAgfQpAQCAtMTUwMiw5ICsxNTgwLDkgQEAKIAogdm9pZCBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpDbG9zZUZpbGVTdHJlYW1zKCkKIHsKLSAgZGVsZXRlIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbTsKLSAgZGVsZXRlIHRoaXMtPkluZm9GaWxlU3RyZWFtOwotICBkZWxldGUgdGhpcy0+RmxhZ0ZpbGVTdHJlYW07CisgIHRoaXMtPkJ1aWxkRmlsZVN0cmVhbS5yZXNldCgpOworICB0aGlzLT5JbmZvRmlsZVN0cmVhbS5yZXNldCgpOworICB0aGlzLT5GbGFnRmlsZVN0cmVhbS5yZXNldCgpOwogfQogCiB2b2lkIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6OkNyZWF0ZUxpbmtTY3JpcHQoCkBAIC0xNjEzLDcgKzE2OTEsOCBAQAogICByZXR1cm4gcmVzcG9uc2VGaWxlTmFtZTsKIH0KIAotY21MaW5rTGluZUNvbXB1dGVyKiBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yOjpDcmVhdGVMaW5rTGluZUNvbXB1dGVyKAorc3RkOjp1bmlxdWVfcHRyPGNtTGlua0xpbmVDb21wdXRlcj4KK2NtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6OkNyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCiAgIGNtT3V0cHV0Q29udmVydGVyKiBvdXRwdXRDb252ZXJ0ZXIsIGNtU3RhdGVEaXJlY3RvcnkgY29uc3QmIHN0YXRlRGlyKQogewogICBpZiAodGhpcy0+TWFrZWZpbGUtPklzT24oIk1TVkM2MCIpKSB7CkBAIC0xNjMxLDcgKzE3MTAsNyBAQAogICBzdGQ6OnN0cmluZyBmcmFtZXdvcmtQYXRoOwogICBzdGQ6OnN0cmluZyBsaW5rUGF0aDsKICAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBwY2xpID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtJbmZvcm1hdGlvbih0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtJbmZvcm1hdGlvbih0aGlzLT5HZXRDb25maWdOYW1lKCkpOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+T3V0cHV0TGlua0xpYnJhcmllcyhwY2xpLCBsaW5rTGluZUNvbXB1dGVyLCBsaW5rTGlicywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrUGF0aCwgbGlua1BhdGgpOwogICBsaW5rTGlicyA9IGZyYW1ld29ya1BhdGggKyBsaW5rUGF0aCArIGxpbmtMaWJzOwpAQCAtMTYzOSw5ICsxNzE4LDEwIEBACiAgIGlmICh1c2VSZXNwb25zZUZpbGUgJiYKICAgICAgIGxpbmtMaWJzLmZpbmRfZmlyc3Rfbm90X29mKCcgJykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAvLyBMb29rdXAgdGhlIHJlc3BvbnNlIGZpbGUgcmVmZXJlbmNlIGZsYWcuCi0gICAgc3RkOjpzdHJpbmcgcmVzcG9uc2VGbGFnVmFyID0gY21TdHJDYXQoCi0gICAgICAiQ01BS0VfIiwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5Db25maWdOYW1lKSwKLSAgICAgICJfUkVTUE9OU0VfRklMRV9MSU5LX0ZMQUciKTsKKyAgICBzdGQ6OnN0cmluZyByZXNwb25zZUZsYWdWYXIgPQorICAgICAgY21TdHJDYXQoIkNNQUtFXyIsCisgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtlckxhbmd1YWdlKHRoaXMtPkdldENvbmZpZ05hbWUoKSksCisgICAgICAgICAgICAgICAiX1JFU1BPTlNFX0ZJTEVfTElOS19GTEFHIik7CiAgICAgY29uc3QgY2hhciogcmVzcG9uc2VGbGFnID0gdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24ocmVzcG9uc2VGbGFnVmFyKTsKICAgICBpZiAoIXJlc3BvbnNlRmxhZykgewogICAgICAgcmVzcG9uc2VGbGFnID0gIkAiOwpAQCAtMTY3Niw5ICsxNzU2LDEwIEBACiAgICAgdGhpcy0+V3JpdGVPYmplY3RzU3RyaW5ncyhvYmplY3Rfc3RyaW5ncywgcmVzcG9uc2VGaWxlTGltaXQpOwogCiAgICAgLy8gTG9va3VwIHRoZSByZXNwb25zZSBmaWxlIHJlZmVyZW5jZSBmbGFnLgotICAgIHN0ZDo6c3RyaW5nIHJlc3BvbnNlRmxhZ1ZhciA9IGNtU3RyQ2F0KAotICAgICAgIkNNQUtFXyIsIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UodGhpcy0+Q29uZmlnTmFtZSksCi0gICAgICAiX1JFU1BPTlNFX0ZJTEVfTElOS19GTEFHIik7CisgICAgc3RkOjpzdHJpbmcgcmVzcG9uc2VGbGFnVmFyID0KKyAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLAorICAgICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5HZXRDb25maWdOYW1lKCkpLAorICAgICAgICAgICAgICAgIl9SRVNQT05TRV9GSUxFX0xJTktfRkxBRyIpOwogICAgIGNvbnN0IGNoYXIqIHJlc3BvbnNlRmxhZyA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHJlc3BvbnNlRmxhZ1Zhcik7CiAgICAgaWYgKCFyZXNwb25zZUZsYWcpIHsKICAgICAgIHJlc3BvbnNlRmxhZyA9ICJAIjsKQEAgLTE3MTcsNyArMTc5OCw4IEBACiB9CiAKIHZvaWQgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6QWRkSW5jbHVkZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgLypjb25maWcqLykKIHsKICAgc3RkOjpzdHJpbmcgcmVzcG9uc2VWYXIgPQogICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1VTRV9SRVNQT05TRV9GSUxFX0ZPUl9JTkNMVURFUyIpOwpAQCAtMTcyNSwxMSArMTgwNywxMSBAQAogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlczsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEluY2x1ZGVEaXJlY3RvcmllcyhpbmNsdWRlcywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmcsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmcsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAKICAgc3RkOjpzdHJpbmcgaW5jbHVkZUZsYWdzID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEluY2x1ZGVGbGFncygKICAgICBpbmNsdWRlcywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5nLCBmYWxzZSwgdXNlUmVzcG9uc2VGaWxlLAotICAgIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CiAgIGlmIChpbmNsdWRlRmxhZ3MuZW1wdHkoKSkgewogICAgIHJldHVybjsKICAgfQpAQCAtMTc3NSw3ICsxODU3LDcgQEAKICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksIG9iamxpc3RfZmlsZSksCiAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgY29uc3QgY2hhciogbm1fZXhlY3V0YWJsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKCJDTUFLRV9OTSIpOwotICBpZiAobm1fZXhlY3V0YWJsZSAmJiAqbm1fZXhlY3V0YWJsZSkgeworICBpZiAoY21Ob25lbXB0eShubV9leGVjdXRhYmxlKSkgewogICAgIGNtZCArPSAiIC0tbm09IjsKICAgICBjbWQgKz0gdGhpcy0+TG9jYWxDb21tb25HZW5lcmF0b3ItPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKICAgICAgIG5tX2V4ZWN1dGFibGUsIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5oIGIvU291cmNlL2NtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IuaAppbmRleCA3YjljN2E1Li5mMzhmODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9jbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yLmgKQEAgLTM0LDEwICszNCwxNSBAQAogcHVibGljOgogICAvLyBjb25zdHJ1Y3RvciB0byBzZXQgdGhlIGl2YXJzCiAgIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CisgIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IoY29uc3QgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvciYpID0gZGVsZXRlOwogICB+Y21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcigpIG92ZXJyaWRlOwogCisgIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3ImIG9wZXJhdG9yPShjb25zdCBjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yJikgPQorICAgIGRlbGV0ZTsKKwogICAvLyBjb25zdHJ1Y3QgdXNpbmcgdGhpcyBmYWN0b3J5IGNhbGwKLSAgc3RhdGljIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3IqIE5ldyhjbUdlbmVyYXRvclRhcmdldCogdGd0KTsKKyAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjbU1ha2VmaWxlVGFyZ2V0R2VuZXJhdG9yPiBOZXcoCisgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRndCk7CiAKICAgLyogdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoaXMgY2xhc3MuIFdyaXRlcyB0aGUgTWFrZWZpbGVzIGFzc29jaWF0ZWQKICAgICAgd2l0aCB0aGlzIHRhcmdldCAqLwpAQCAtNTIsNyArNTcsMTEgQEAKIAogICBjbUdlbmVyYXRvclRhcmdldCogR2V0R2VuZXJhdG9yVGFyZ2V0KCkgeyByZXR1cm4gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0OyB9CiAKKyAgc3RkOjpzdHJpbmcgR2V0Q29uZmlnTmFtZSgpOworCiBwcm90ZWN0ZWQ6CisgIHZvaWQgR2V0RGV2aWNlTGlua0ZsYWdzKHN0ZDo6c3RyaW5nJiBsaW5rRmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5rTGFuZ3VhZ2UpOwogICB2b2lkIEdldFRhcmdldExpbmtGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5rTGFuZ3VhZ2UpOwogCiAgIC8vIGNyZWF0ZSB0aGUgZmlsZSBhbmQgZGlyZWN0b3J5IGV0YwpAQCAtODEsNyArOTAsOCBAQAogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIG9wZXJhdG9yKCkoY21Tb3VyY2VGaWxlIGNvbnN0JiBzb3VyY2UsIGNvbnN0IGNoYXIqIHBrZ2xvYykgb3ZlcnJpZGU7CisgICAgdm9pZCBvcGVyYXRvcigpKGNtU291cmNlRmlsZSBjb25zdCYgc291cmNlLCBjb25zdCBjaGFyKiBwa2dsb2MsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIG92ZXJyaWRlOwogCiAgIHByaXZhdGU6CiAgICAgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvciogR2VuZXJhdG9yOwpAQCAtMTM3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG1ha2VmaWxlX2NvbW1hbmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBtYWtlZmlsZV9kZXBlbmRzKTsKIAotICBjbUxpbmtMaW5lQ29tcHV0ZXIqIENyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IENyZWF0ZUxpbmtMaW5lQ29tcHV0ZXIoCiAgICAgY21PdXRwdXRDb252ZXJ0ZXIqIG91dHB1dENvbnZlcnRlciwgY21TdGF0ZURpcmVjdG9yeSBjb25zdCYgc3RhdGVEaXIpOwogCiAgIC8qKiBDcmVhdGUgYSByZXNwb25zZSBmaWxlIHdpdGggdGhlIGdpdmVuIHNldCBvZiBvcHRpb25zLiAgUmV0dXJucwpAQCAtMTYzLDcgKzE3Myw4IEBACiAgIC8qKiBBZGQgY29tbWFuZHMgZm9yIGdlbmVyYXRlIGRlZiBmaWxlcyAqLwogICB2b2lkIEdlbkRlZkZpbGUoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiByZWFsX2xpbmtfY29tbWFuZHMpOwogCi0gIHZvaWQgQWRkSW5jbHVkZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpIG92ZXJyaWRlOworICB2b2lkIEFkZEluY2x1ZGVGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBvdmVycmlkZTsKIAogICB2aXJ0dWFsIHZvaWQgQ2xvc2VGaWxlU3RyZWFtcygpOwogICBjbUxvY2FsVW5peE1ha2VmaWxlR2VuZXJhdG9yMyogTG9jYWxHZW5lcmF0b3I7CkBAIC0xOTEsMTEgKzIwMiwxMSBAQAogICBzdGQ6OnN0cmluZyBUYXJnZXRCdWlsZERpcmVjdG9yeUZ1bGw7CiAKICAgLy8gdGhlIHN0cmVhbSBmb3IgdGhlIGJ1aWxkIGZpbGUKLSAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtKiBCdWlsZEZpbGVTdHJlYW07CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IEJ1aWxkRmlsZVN0cmVhbTsKIAogICAvLyB0aGUgc3RyZWFtIGZvciB0aGUgZmxhZyBmaWxlCiAgIHN0ZDo6c3RyaW5nIEZsYWdGaWxlTmFtZUZ1bGw7Ci0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSogRmxhZ0ZpbGVTdHJlYW07CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IEZsYWdGaWxlU3RyZWFtOwogICBjbGFzcyBTdHJpbmdMaXN0IDogcHVibGljIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPgogICB7CiAgIH07CkBAIC0yMDMsNyArMjE0LDcgQEAKIAogICAvLyB0aGUgc3RyZWFtIGZvciB0aGUgaW5mbyBmaWxlCiAgIHN0ZDo6c3RyaW5nIEluZm9GaWxlTmFtZUZ1bGw7Ci0gIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSogSW5mb0ZpbGVTdHJlYW07CisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdlbmVyYXRlZEZpbGVTdHJlYW0+IEluZm9GaWxlU3RyZWFtOwogCiAgIC8vIGZpbGVzIHRvIGNsZWFuCiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBDbGVhbkZpbGVzOwpAQCAtMjMyLDcgKzI0Myw3IEBACiAgIC8vIG1hY09TIGNvbnRlbnQgaW5mby4KICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IE1hY0NvbnRlbnRGb2xkZXJzOwogICBzdGQ6OnVuaXF1ZV9wdHI8Y21PU1hCdW5kbGVHZW5lcmF0b3I+IE9TWEJ1bmRsZUdlbmVyYXRvcjsKLSAgTWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGUqIE1hY09TWENvbnRlbnRHZW5lcmF0b3I7CisgIHN0ZDo6dW5pcXVlX3B0cjxNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZT4gTWFjT1NYQ29udGVudEdlbmVyYXRvcjsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFrZWZpbGVVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbU1ha2VmaWxlVXRpbGl0eVRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggMTYyNWU0Zi4uNmMxOGU0OCAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFrZWZpbGVVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21NYWtlZmlsZVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuY3h4CkBAIC0yMiw4ICsyMiw3IEBACiAgIDogY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcih0YXJnZXQpCiB7CiAgIHRoaXMtPkN1c3RvbUNvbW1hbmREcml2ZXIgPSBPblV0aWxpdHk7Ci0gIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvciA9Ci0gICAgY206Om1ha2VfdW5pcXVlPGNtT1NYQnVuZGxlR2VuZXJhdG9yPih0YXJnZXQsIHRoaXMtPkNvbmZpZ05hbWUpOworICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3IgPSBjbTo6bWFrZV91bmlxdWU8Y21PU1hCdW5kbGVHZW5lcmF0b3I+KHRhcmdldCk7CiAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+U2V0TWFjQ29udGVudEZvbGRlcnMoJnRoaXMtPk1hY0NvbnRlbnRGb2xkZXJzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWFya0FzQWR2YW5jZWRDb21tYW5kLmN4eCBiL1NvdXJjZS9jbU1hcmtBc0FkdmFuY2VkQ29tbWFuZC5jeHgKaW5kZXggY2E0NmUxNC4uNDUwNDNmYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTWFya0FzQWR2YW5jZWRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21NYXJrQXNBZHZhbmNlZENvbW1hbmQuY3h4CkBAIC00LDggKzQsMTEgQEAKIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgorI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVBvbGljaWVzLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCkBAIC0yOCwxNCArMzEsNjMgQEAKICAgICB9CiAgICAgaSA9IDE7CiAgIH0KKworICBjbU1ha2VmaWxlJiBtZiA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpOworICBjbVN0YXRlKiBzdGF0ZSA9IG1mLkdldFN0YXRlKCk7CisKICAgZm9yICg7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZhcmlhYmxlID0gYXJnc1tpXTsKLSAgICBjbVN0YXRlKiBzdGF0ZSA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldFN0YXRlKCk7Ci0gICAgaWYgKCFzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHZhcmlhYmxlKSkgewotICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q01ha2VJbnN0YW5jZSgpLT5BZGRDYWNoZUVudHJ5KAotICAgICAgICB2YXJpYWJsZSwgbnVsbHB0ciwgbnVsbHB0ciwgY21TdGF0ZUVudW1zOjpVTklOSVRJQUxJWkVEKTsKLSAgICAgIG92ZXJ3cml0ZSA9IHRydWU7CisKKyAgICBib29sIGlzc3VlTWVzc2FnZSA9IGZhbHNlOworICAgIGJvb2wgb2xkQmVoYXZpb3IgPSBmYWxzZTsKKyAgICBib29sIGlnbm9yZVZhcmlhYmxlID0gZmFsc2U7CisgICAgc3dpdGNoIChtZi5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwMikpIHsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6V0FSTjoKKyAgICAgICAgaWYgKG1mLlBvbGljeU9wdGlvbmFsV2FybmluZ0VuYWJsZWQoIkNNQUtFX1BPTElDWV9XQVJOSU5HX0NNUDAxMDIiKSkgeworICAgICAgICAgIGlmICghc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSh2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgIGlzc3VlTWVzc2FnZSA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIENNX0ZBTExUSFJPVUdIOworICAgICAgY2FzZSBjbVBvbGljaWVzOjpPTEQ6CisgICAgICAgIG9sZEJlaGF2aW9yID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGNtUG9saWNpZXM6Ok5FVzoKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfSUZfVVNFRDoKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfQUxXQVlTOgorICAgICAgICBpZiAoIXN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUodmFyaWFibGUpKSB7CisgICAgICAgICAgaWdub3JlVmFyaWFibGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIC8vIEZpcnN0IHNlZSBpZiB3ZSBzaG91bGQgaXNzdWUgYSBtZXNzYWdlIGFib3V0IENNUDAxMDIKKyAgICBpZiAoaXNzdWVNZXNzYWdlKSB7CisgICAgICBzdGQ6OnN0cmluZyBlcnIgPSBjbVN0ckNhdCgKKyAgICAgICAgIlBvbGljeSBDTVAwMTAyIGlzIG5vdCBzZXQ6IFRoZSB2YXJpYWJsZSBuYW1lZCBcIiIsIHZhcmlhYmxlLAorICAgICAgICAiXCIgaXMgbm90IGluIHRoZSBjYWNoZS4gVGhpcyByZXN1bHRzIGluIGFuIGVtcHR5IGNhY2hlIGVudHJ5IHdoaWNoICIKKyAgICAgICAgImlzIG5vIGxvbmdlciBjcmVhdGVkIHdoZW4gcG9saWN5IENNUDAxMDIgaXMgc2V0IHRvIE5FVy4gUnVuIFwiY21ha2UgIgorICAgICAgICAiLS1oZWxwLXBvbGljeSBDTVAwMTAyXCIgZm9yIHBvbGljeSBkZXRhaWxzLiBVc2UgdGhlIGNtYWtlX3BvbGljeSAiCisgICAgICAgICJjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuIik7CisgICAgICBtZi5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLCBlcnIpOworICAgIH0KKworICAgIC8vIElmIGl0J3Mgbm90IGluIHRoZSBjYWNoZSBhbmQgd2UncmUgdXNpbmcgdGhlIG5ldyBiZWhhdmlvciwgbm90aGluZyB0bworICAgIC8vIHNlZSBoZXJlLgorICAgIGlmIChpZ25vcmVWYXJpYWJsZSkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgd2Ugd2FudCB0aGUgb2xkIGJlaGF2aW9yIG9mIG1ha2luZyBhIGR1bW15IGNhY2hlIGVudHJ5LgorICAgIGlmIChvbGRCZWhhdmlvcikgeworICAgICAgaWYgKCFzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHZhcmlhYmxlKSkgeworICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCktPkFkZENhY2hlRW50cnkoCisgICAgICAgICAgdmFyaWFibGUsIG51bGxwdHIsIG51bGxwdHIsIGNtU3RhdGVFbnVtczo6VU5JTklUSUFMSVpFRCk7CisgICAgICAgIG92ZXJ3cml0ZSA9IHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgbmVlZCBhIGNhY2hlIGVudHJ5IHRvIGRvIHRoaXMuCiAgICAgaWYgKCFzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKHZhcmlhYmxlKSkgewogICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIlRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiIpOwogICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWF0aENvbW1hbmQuY3h4IGIvU291cmNlL2NtTWF0aENvbW1hbmQuY3h4CmluZGV4IGYxMWI5MDYuLjU2MjIxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1hdGhDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21NYXRoQ29tbWFuZC5jeHgKQEAgLTQsNyArNCw3IEBACiAKICNpbmNsdWRlIDxjc3RkaW8+CiAKLSNpbmNsdWRlICJjbV9rd2ltbC5oIgorI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtRXhwclBhcnNlckhlbHBlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtTWVzc2FnZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtTWVzc2FnZUNvbW1hbmQuY3h4CmluZGV4IDk2YTYzODYuLmM3YmI5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU1lc3NhZ2VDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21NZXNzYWdlQ29tbWFuZC5jeHgKQEAgLTMsNiArMywxMCBAQAogI2luY2x1ZGUgImNtTWVzc2FnZUNvbW1hbmQuaCIKIAogI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCkBAIC0xMyw2ICsxNyw1NSBAQAogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKICNpbmNsdWRlICJjbWFrZS5oIgogCituYW1lc3BhY2UgeworCitlbnVtIGNsYXNzIENoZWNraW5nVHlwZQoreworICBVTkRFRklORUQsCisgIENIRUNLX1NUQVJULAorICBDSEVDS19QQVNTLAorICBDSEVDS19GQUlMCit9OworCitzdGQ6OnN0cmluZyBJbmRlbnRUZXh0KHN0ZDo6c3RyaW5nIHRleHQsIGNtTWFrZWZpbGUmIG1mKQoreworICBhdXRvIGluZGVudCA9CisgICAgY21Kb2luKGNtRXhwYW5kZWRMaXN0KG1mLkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9NRVNTQUdFX0lOREVOVCIpKSwgIiIpOworCisgIGNvbnN0IGF1dG8gc2hvd0NvbnRleHQgPSBtZi5HZXRDTWFrZUluc3RhbmNlKCktPkdldFNob3dMb2dDb250ZXh0KCkgfHwKKyAgICBtZi5Jc09uKCJDTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPVyIpOworICBpZiAoc2hvd0NvbnRleHQpIHsKKyAgICBhdXRvIGNvbnRleHQgPSBjbUpvaW4oCisgICAgICBjbUV4cGFuZGVkTGlzdChtZi5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfTUVTU0FHRV9DT05URVhUIikpLCAiLiIpOworICAgIGlmICghY29udGV4dC5lbXB0eSgpKSB7CisgICAgICBpbmRlbnQuaW5zZXJ0KDB1LCBjbVN0ckNhdCgiWyJfcywgY29udGV4dCwgIl0gIl9zKSk7CisgICAgfQorICB9CisKKyAgaWYgKCFpbmRlbnQuZW1wdHkoKSkgeworICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcodGV4dCwgIlxuIiwgIlxuIiArIGluZGVudCk7CisgICAgdGV4dC5pbnNlcnQoMHUsIGluZGVudCk7CisgIH0KKyAgcmV0dXJuIHRleHQ7Cit9CisKK3ZvaWQgUmVwb3J0Q2hlY2tSZXN1bHQoY206OnN0cmluZ192aWV3IHdoYXQsIHN0ZDo6c3RyaW5nIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSYgbWYpCit7CisgIGlmIChtZi5HZXRDTWFrZUluc3RhbmNlKCktPkhhc0NoZWNrSW5Qcm9ncmVzcygpKSB7CisgICAgYXV0byB0ZXh0ID0gbWYuR2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRUb3BDaGVja0luUHJvZ3Jlc3NNZXNzYWdlKCkgKyAiIC0gIiArCisgICAgICBzdGQ6Om1vdmUocmVzdWx0KTsKKyAgICBtZi5EaXNwbGF5U3RhdHVzKEluZGVudFRleHQoc3RkOjptb3ZlKHRleHQpLCBtZiksIC0xKTsKKyAgfSBlbHNlIHsKKyAgICBtZi5HZXRNZXNzZW5nZXIoKS0+RGlzcGxheU1lc3NhZ2UoCisgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsCisgICAgICBjbVN0ckNhdCgiSWdub3JlZCAiX3MsIHdoYXQsICIgd2l0aG91dCBDSEVDS19TVEFSVCJfcyksCisgICAgICBtZi5HZXRCYWNrdHJhY2UoKSk7CisgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIC8vIGNtTGlicmFyeUNvbW1hbmQKIGJvb2wgY21NZXNzYWdlQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKQEAgLTIxLDExICs3NCwxNSBAQAogICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMiKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KKworICBhdXRvJiBtZiA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpOworCiAgIGF1dG8gaSA9IGFyZ3MuY2JlZ2luKCk7CiAKICAgYXV0byB0eXBlID0gTWVzc2FnZVR5cGU6Ok1FU1NBR0U7CiAgIGF1dG8gZmF0YWwgPSBmYWxzZTsKICAgYXV0byBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1VOREVGSU5FRDsKKyAgYXV0byBjaGVja2luZ1R5cGUgPSBDaGVja2luZ1R5cGU6OlVOREVGSU5FRDsKICAgaWYgKCppID09ICJTRU5EX0VSUk9SIikgewogICAgIHR5cGUgPSBNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1I7CiAgICAgbGV2ZWwgPSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19FUlJPUjsKQEAgLTQwLDE5ICs5NywzMCBAQAogICAgIGxldmVsID0gY21ha2U6OkxvZ0xldmVsOjpMT0dfV0FSTklORzsKICAgICArK2k7CiAgIH0gZWxzZSBpZiAoKmkgPT0gIkFVVEhPUl9XQVJOSU5HIikgewotICAgIGlmIChzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc1NldCgiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX0VSUk9SUyIpICYmCi0gICAgICAgICFzdGF0dXMuR2V0TWFrZWZpbGUoKS5Jc09uKCJDTUFLRV9TVVBQUkVTU19ERVZFTE9QRVJfRVJST1JTIikpIHsKKyAgICBpZiAobWYuSXNTZXQoIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9FUlJPUlMiKSAmJgorICAgICAgICAhbWYuSXNPbigiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX0VSUk9SUyIpKSB7CiAgICAgICBmYXRhbCA9IHRydWU7CiAgICAgICB0eXBlID0gTWVzc2FnZVR5cGU6OkFVVEhPUl9FUlJPUjsKICAgICAgIGxldmVsID0gY21ha2U6OkxvZ0xldmVsOjpMT0dfRVJST1I7Ci0gICAgfSBlbHNlIGlmICghc3RhdHVzLkdldE1ha2VmaWxlKCkuSXNPbigKLSAgICAgICAgICAgICAgICAgIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9XQVJOSU5HUyIpKSB7CisgICAgfSBlbHNlIGlmICghbWYuSXNPbigiQ01BS0VfU1VQUFJFU1NfREVWRUxPUEVSX1dBUk5JTkdTIikpIHsKICAgICAgIHR5cGUgPSBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkc7CiAgICAgICBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1dBUk5JTkc7CiAgICAgfSBlbHNlIHsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICArK2k7CisgIH0gZWxzZSBpZiAoKmkgPT0gIkNIRUNLX1NUQVJUIikgeworICAgIGxldmVsID0gY21ha2U6OkxvZ0xldmVsOjpMT0dfU1RBVFVTOworICAgIGNoZWNraW5nVHlwZSA9IENoZWNraW5nVHlwZTo6Q0hFQ0tfU1RBUlQ7CisgICAgKytpOworICB9IGVsc2UgaWYgKCppID09ICJDSEVDS19QQVNTIikgeworICAgIGxldmVsID0gY21ha2U6OkxvZ0xldmVsOjpMT0dfU1RBVFVTOworICAgIGNoZWNraW5nVHlwZSA9IENoZWNraW5nVHlwZTo6Q0hFQ0tfUEFTUzsKKyAgICArK2k7CisgIH0gZWxzZSBpZiAoKmkgPT0gIkNIRUNLX0ZBSUwiKSB7CisgICAgbGV2ZWwgPSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19TVEFUVVM7CisgICAgY2hlY2tpbmdUeXBlID0gQ2hlY2tpbmdUeXBlOjpDSEVDS19GQUlMOworICAgICsraTsKICAgfSBlbHNlIGlmICgqaSA9PSAiU1RBVFVTIikgewogICAgIGxldmVsID0gY21ha2U6OkxvZ0xldmVsOjpMT0dfU1RBVFVTOwogICAgICsraTsKQEAgLTY2LDEyICsxMzQsMTIgQEAKICAgICBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1RSQUNFOwogICAgICsraTsKICAgfSBlbHNlIGlmICgqaSA9PSAiREVQUkVDQVRJT04iKSB7Ci0gICAgaWYgKHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzT24oIkNNQUtFX0VSUk9SX0RFUFJFQ0FURUQiKSkgeworICAgIGlmIChtZi5Jc09uKCJDTUFLRV9FUlJPUl9ERVBSRUNBVEVEIikpIHsKICAgICAgIGZhdGFsID0gdHJ1ZTsKICAgICAgIHR5cGUgPSBNZXNzYWdlVHlwZTo6REVQUkVDQVRJT05fRVJST1I7CiAgICAgICBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX0VSUk9SOwotICAgIH0gZWxzZSBpZiAoIXN0YXR1cy5HZXRNYWtlZmlsZSgpLklzU2V0KCJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiKSB8fAotICAgICAgICAgICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuSXNPbigiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIikpIHsKKyAgICB9IGVsc2UgaWYgKCFtZi5Jc1NldCgiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIikgfHwKKyAgICAgICAgICAgICAgIG1mLklzT24oIkNNQUtFX1dBUk5fREVQUkVDQVRFRCIpKSB7CiAgICAgICB0eXBlID0gTWVzc2FnZVR5cGU6OkRFUFJFQ0FUSU9OX1dBUk5JTkc7CiAgICAgICBsZXZlbCA9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1dBUk5JTkc7CiAgICAgfSBlbHNlIHsKQEAgLTg5LDEwICsxNTcsMTkgQEAKICAgYXNzZXJ0KCJNZXNzYWdlIGxvZyBsZXZlbCBleHBlY3RlZCB0byBiZSBzZXQiICYmCiAgICAgICAgICBsZXZlbCAhPSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19VTkRFRklORUQpOwogCi0gIGF1dG8gZGVzaXJlZExldmVsID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRMb2dMZXZlbCgpOworICBhdXRvIGRlc2lyZWRMZXZlbCA9IG1mLkdldENNYWtlSW5zdGFuY2UoKS0+R2V0TG9nTGV2ZWwoKTsKICAgYXNzZXJ0KCJFeHBlY3RlZCBhIHZhbGlkIGxvZyBsZXZlbCBoZXJlIiAmJgogICAgICAgICAgZGVzaXJlZExldmVsICE9IGNtYWtlOjpMb2dMZXZlbDo6TE9HX1VOREVGSU5FRCk7CiAKKyAgLy8gQ29tbWFuZCBsaW5lIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGNhY2hlIHZhcmlhYmxlCisgIGlmICghbWYuR2V0Q01ha2VJbnN0YW5jZSgpLT5XYXNMb2dMZXZlbFNldFZpYUNMSSgpKSB7CisgICAgY29uc3QgYXV0byBkZXNpcmVkTGV2ZWxGcm9tQ2FjaGUgPQorICAgICAgY21ha2U6OlN0cmluZ1RvTG9nTGV2ZWwobWYuR2V0U2FmZURlZmluaXRpb24oIkNNQUtFX01FU1NBR0VfTE9HX0xFVkVMIikpOworICAgIGlmIChkZXNpcmVkTGV2ZWxGcm9tQ2FjaGUgIT0gY21ha2U6OkxvZ0xldmVsOjpMT0dfVU5ERUZJTkVEKSB7CisgICAgICBkZXNpcmVkTGV2ZWwgPSBkZXNpcmVkTGV2ZWxGcm9tQ2FjaGU7CisgICAgfQorICB9CisKICAgaWYgKGRlc2lyZWRMZXZlbCA8IGxldmVsKSB7CiAgICAgLy8gU3VwcHJlc3MgdGhlIG1lc3NhZ2UKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMCwzNyArMTc3LDQyIEBACiAKICAgYXV0byBtZXNzYWdlID0gY21Kb2luKGNtTWFrZVJhbmdlKGksIGFyZ3MuY2VuZCgpKSwgIiIpOwogCi0gIGlmIChjbWFrZTo6TG9nTGV2ZWw6OkxPR19OT1RJQ0UgPD0gbGV2ZWwpIHsKLSAgICAvLyBDaGVjayBpZiBhbnkgaW5kZW50YXRpb24gaGFzIHJlcXVlc3RlZDoKLSAgICAvLyBgQ01BS0VfTUVTU0FHRV9JTkRFTlRgIGlzIGEgbGlzdCBvZiAicGFkZGluZyIgcGllY2VzCi0gICAgLy8gdG8gYmUgam9pbmVkIGFuZCBwcmVwZW5kZWQgdG8gdGhlIG1lc3NhZ2UgbGluZXMuCi0gICAgYXV0byBpbmRlbnQgPSBjbUpvaW4oY21FeHBhbmRlZExpc3Qoc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0U2FmZURlZmluaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiQ01BS0VfTUVTU0FHRV9JTkRFTlQiKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiIpOwotICAgIC8vIE1ha2UgZXZlcnkgbGluZSBvZiB0aGUgYG1lc3NhZ2VgIGluZGVudGVkCi0gICAgLy8gTk9URSBDYW4ndCByZXVzZSBgY21Eb2N1bWVudGF0aW9uRm9ybWF0dGVyOjpQcmludFByZWZvcm1hdHRlZGAKLSAgICAvLyBoZXJlIGN1eiBpdCBhcHBlbmRzIGBcbmAgdG8gdGhlIEVPTSA7LSgKLSAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKG1lc3NhZ2UsICJcbiIsICJcbiIgKyBpbmRlbnQpOwotICAgIG1lc3NhZ2UgPSBpbmRlbnQgKyBtZXNzYWdlOwotICB9Ci0KICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgY21ha2U6OkxvZ0xldmVsOjpMT0dfRVJST1I6CiAgICAgY2FzZSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19XQVJOSU5HOgogICAgICAgLy8gd2UndmUgb3ZlcnJpZGRlbiB0aGUgbWVzc2FnZSB0eXBlLCBhYm92ZSwgc28gZGlzcGxheSBpdCBkaXJlY3RseQotICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0TWVzc2VuZ2VyKCktPkRpc3BsYXlNZXNzYWdlKAotICAgICAgICB0eXBlLCBtZXNzYWdlLCBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRCYWNrdHJhY2UoKSk7CisgICAgICBtZi5HZXRNZXNzZW5nZXIoKS0+RGlzcGxheU1lc3NhZ2UodHlwZSwgbWVzc2FnZSwgbWYuR2V0QmFja3RyYWNlKCkpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIGNtYWtlOjpMb2dMZXZlbDo6TE9HX05PVElDRToKLSAgICAgIGNtU3lzdGVtVG9vbHM6Ok1lc3NhZ2UobWVzc2FnZSk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpNZXNzYWdlKEluZGVudFRleHQobWVzc2FnZSwgbWYpKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19TVEFUVVM6CisgICAgICBzd2l0Y2ggKGNoZWNraW5nVHlwZSkgeworICAgICAgICBjYXNlIENoZWNraW5nVHlwZTo6Q0hFQ0tfU1RBUlQ6CisgICAgICAgICAgbWYuRGlzcGxheVN0YXR1cyhJbmRlbnRUZXh0KG1lc3NhZ2UsIG1mKSwgLTEpOworICAgICAgICAgIG1mLkdldENNYWtlSW5zdGFuY2UoKS0+UHVzaENoZWNrSW5Qcm9ncmVzc01lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGVja2luZ1R5cGU6OkNIRUNLX1BBU1M6CisgICAgICAgICAgUmVwb3J0Q2hlY2tSZXN1bHQoIkNIRUNLX1BBU1MiX3MsIG1lc3NhZ2UsIG1mKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoZWNraW5nVHlwZTo6Q0hFQ0tfRkFJTDoKKyAgICAgICAgICBSZXBvcnRDaGVja1Jlc3VsdCgiQ0hFQ0tfRkFJTCJfcywgbWVzc2FnZSwgbWYpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgbWYuRGlzcGxheVN0YXR1cyhJbmRlbnRUZXh0KG1lc3NhZ2UsIG1mKSwgLTEpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisKICAgICBjYXNlIGNtYWtlOjpMb2dMZXZlbDo6TE9HX1ZFUkJPU0U6CiAgICAgY2FzZSBjbWFrZTo6TG9nTGV2ZWw6OkxPR19ERUJVRzoKICAgICBjYXNlIGNtYWtlOjpMb2dMZXZlbDo6TE9HX1RSQUNFOgotICAgICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuRGlzcGxheVN0YXR1cyhtZXNzYWdlLCAtMSk7CisgICAgICBtZi5EaXNwbGF5U3RhdHVzKEluZGVudFRleHQobWVzc2FnZSwgbWYpLCAtMSk7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggYTQ1OGNhYy4uYmRlNWVlNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtMTEsOCArMTEsOCBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y20vdmVjdG9yPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmgiCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY21OaW5qYVR5cGVzLmgiCiAjaW5jbHVkZSAiY21PU1hCdW5kbGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU91dHB1dENvbnZlcnRlci5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgpAQCAtNDEsMzMgKzQyLDI1IEBACiBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yKAogICBjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogICA6IGNtTmluamFUYXJnZXRHZW5lcmF0b3IodGFyZ2V0KQotICAsIFRhcmdldExpbmtMYW5ndWFnZSgiIikKIHsKLSAgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlID0gdGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5HZXRDb25maWdOYW1lKCkpOwotICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSB7Ci0gICAgdGhpcy0+VGFyZ2V0TmFtZXMgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0RXhlY3V0YWJsZU5hbWVzKAotICAgICAgR2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0Q29uZmlnTmFtZSgpKTsKLSAgfSBlbHNlIHsKLSAgICB0aGlzLT5UYXJnZXROYW1lcyA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRMaWJyYXJ5TmFtZXMoCi0gICAgICBHZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRDb25maWdOYW1lKCkpOwotICB9Ci0KICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKICAgICAvLyBvbiBXaW5kb3dzIHRoZSBvdXRwdXQgZGlyIGlzIGFscmVhZHkgbmVlZGVkIGF0IGNvbXBpbGUgdGltZQogICAgIC8vIGVuc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cyAoT3V0RGlyIHRlc3QpCi0gICAgRW5zdXJlRGlyZWN0b3J5RXhpc3RzKHRhcmdldC0+R2V0RGlyZWN0b3J5KHRoaXMtPkdldENvbmZpZ05hbWUoKSkpOworICAgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogdGhpcy0+R2V0Q29uZmlnTmFtZXMoKSkgeworICAgICAgRW5zdXJlRGlyZWN0b3J5RXhpc3RzKHRhcmdldC0+R2V0RGlyZWN0b3J5KGNvbmZpZykpOworICAgIH0KICAgfQogCi0gIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvciA9Ci0gICAgY206Om1ha2VfdW5pcXVlPGNtT1NYQnVuZGxlR2VuZXJhdG9yPih0YXJnZXQsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvciA9IGNtOjptYWtlX3VuaXF1ZTxjbU9TWEJ1bmRsZUdlbmVyYXRvcj4odGFyZ2V0KTsKICAgdGhpcy0+T1NYQnVuZGxlR2VuZXJhdG9yLT5TZXRNYWNDb250ZW50Rm9sZGVycygmdGhpcy0+TWFjQ29udGVudEZvbGRlcnMpOwogfQogCiBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjp+Y21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAotdm9pZCBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpHZW5lcmF0ZSgpCit2b2lkIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OkdlbmVyYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UuZW1wdHkoKSkgeworICBzdGQ6OnN0cmluZyBsYW5nID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZShjb25maWcpOworICBpZiAodGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZykuZW1wdHkoKSkgewogICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJDTWFrZSBjYW4gbm90IGRldGVybWluZSBsaW5rZXIgbGFuZ3VhZ2UgZm9yICIKICAgICAgICAgICAgICAgICAgICAgICAgICAidGFyZ2V0OiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0TmFtZSgpKTsKQEAgLTc1LDI1ICs2OCw0OCBAQAogICB9CiAKICAgLy8gV3JpdGUgdGhlIHJ1bGVzIGZvciBlYWNoIGxhbmd1YWdlLgotICB0aGlzLT5Xcml0ZUxhbmd1YWdlc1J1bGVzKCk7CisgIHRoaXMtPldyaXRlTGFuZ3VhZ2VzUnVsZXMoY29uZmlnKTsKIAogICAvLyBXcml0ZSB0aGUgYnVpbGQgc3RhdGVtZW50cwotICB0aGlzLT5Xcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50cygpOworICBib29sIGZpcnN0Rm9yQ29uZmlnID0gdHJ1ZTsKKyAgZm9yIChhdXRvIGNvbnN0JiBmaWxlQ29uZmlnIDogdGhpcy0+R2V0Q29uZmlnTmFtZXMoKSkgeworICAgIGlmICghdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCkKKyAgICAgICAgICAgLT5HZXRDcm9zc0NvbmZpZ3MoZmlsZUNvbmZpZykKKyAgICAgICAgICAgLmNvdW50KGNvbmZpZykpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICB0aGlzLT5Xcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50cyhjb25maWcsIGZpbGVDb25maWcsIGZpcnN0Rm9yQ29uZmlnKTsKKyAgICBmaXJzdEZvckNvbmZpZyA9IGZhbHNlOworICB9CiAKICAgaWYgKHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgewotICAgIHRoaXMtPldyaXRlT2JqZWN0TGliU3RhdGVtZW50KCk7CisgICAgdGhpcy0+V3JpdGVPYmplY3RMaWJTdGF0ZW1lbnQoY29uZmlnKTsKICAgfSBlbHNlIHsKLSAgICAvLyBJZiB0aGlzIHRhcmdldCBoYXMgY3VkYSBsYW5ndWFnZSBsaW5rIGlucHV0cywgYW5kIHdlIG5lZWQgdG8gZG8KLSAgICAvLyBkZXZpY2UgbGlua2luZwotICAgIHRoaXMtPldyaXRlRGV2aWNlTGlua1N0YXRlbWVudCgpOwotICAgIHRoaXMtPldyaXRlTGlua1N0YXRlbWVudCgpOworICAgIGZpcnN0Rm9yQ29uZmlnID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8gY29uc3QmIGZpbGVDb25maWcgOiB0aGlzLT5HZXRDb25maWdOYW1lcygpKSB7CisgICAgICBpZiAoIXRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpCisgICAgICAgICAgICAgLT5HZXRDcm9zc0NvbmZpZ3MoZmlsZUNvbmZpZykKKyAgICAgICAgICAgICAuY291bnQoY29uZmlnKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIC8vIElmIHRoaXMgdGFyZ2V0IGhhcyBjdWRhIGxhbmd1YWdlIGxpbmsgaW5wdXRzLCBhbmQgd2UgbmVlZCB0byBkbworICAgICAgLy8gZGV2aWNlIGxpbmtpbmcKKyAgICAgIHRoaXMtPldyaXRlRGV2aWNlTGlua1N0YXRlbWVudChjb25maWcsIGZpbGVDb25maWcsIGZpcnN0Rm9yQ29uZmlnKTsKKyAgICAgIHRoaXMtPldyaXRlTGlua1N0YXRlbWVudChjb25maWcsIGZpbGVDb25maWcsIGZpcnN0Rm9yQ29uZmlnKTsKKyAgICAgIGZpcnN0Rm9yQ29uZmlnID0gZmFsc2U7CisgICAgfQorICB9CisgIGlmICh0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RW5hYmxlQ3Jvc3NDb25maWdCdWlsZCgpKSB7CisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFRhcmdldEFsaWFzKAorICAgICAgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpLCB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwgImFsbCIpOwogICB9CiAKICAgLy8gRmluZCBBRERJVElPTkFMX0NMRUFOX0ZJTEVTCi0gIHRoaXMtPkFkZGl0aW9uYWxDbGVhbkZpbGVzKCk7CisgIHRoaXMtPkFkZGl0aW9uYWxDbGVhbkZpbGVzKGNvbmZpZyk7CiB9CiAKLXZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVMYW5ndWFnZXNSdWxlcygpCit2b2lkIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OldyaXRlTGFuZ3VhZ2VzUnVsZXMoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAjaWZkZWYgTklOSkFfR0VOX1ZFUkJPU0VfRklMRVMKICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6V3JpdGVEaXZpZGVyKHRoaXMtPkdldFJ1bGVzRmlsZVN0cmVhbSgpKTsKQEAgLTEwNiw4ICsxMjIsNyBAQAogICAvLyBXcml0ZSBydWxlcyBmb3IgbGFuZ3VhZ2VzIGNvbXBpbGVkIGluIHRoaXMgdGFyZ2V0LgogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbGFuZ3VhZ2VzOwogICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBzb3VyY2VGaWxlczsKLSAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE9iamVjdFNvdXJjZXMoCi0gICAgc291cmNlRmlsZXMsIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIikpOworICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0T2JqZWN0U291cmNlcyhzb3VyY2VGaWxlcywgY29uZmlnKTsKICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNmIDogc291cmNlRmlsZXMpIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCBsYW5nID0gc2YtPkdldExhbmd1YWdlKCk7CiAgICAgaWYgKCFsYW5nLmVtcHR5KCkpIHsKQEAgLTExNSw3ICsxMzAsNyBAQAogICAgIH0KICAgfQogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSA6IGxhbmd1YWdlcykgewotICAgIHRoaXMtPldyaXRlTGFuZ3VhZ2VSdWxlcyhsYW5ndWFnZSk7CisgICAgdGhpcy0+V3JpdGVMYW5ndWFnZVJ1bGVzKGxhbmd1YWdlLCBjb25maWcpOwogICB9CiB9CiAKQEAgLTEzOSwyMiArMTU0LDI4IEBACiAgIH0KIH0KIAotc3RkOjpzdHJpbmcgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6TGFuZ3VhZ2VMaW5rZXJSdWxlKCkgY29uc3QKK3N0ZDo6c3RyaW5nIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6Okxhbmd1YWdlTGlua2VyUnVsZSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgcmV0dXJuIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSArICJfIiArCi0gICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSkgKwotICAgICJfTElOS0VSX18iICsKKyAgcmV0dXJuIGNtU3RyQ2F0KAorICAgIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCAiXyIsCisgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSksCisgICAgIl9MSU5LRVJfXyIsCiAgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUoCi0gICAgICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXROYW1lKCkpOworICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE5hbWUoKSksCisgICAgIl8iLCBjb25maWcpOwogfQogCi1zdGQ6OnN0cmluZyBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpMYW5ndWFnZUxpbmtlckRldmljZVJ1bGUoKSBjb25zdAorc3RkOjpzdHJpbmcgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6TGFuZ3VhZ2VMaW5rZXJEZXZpY2VSdWxlKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewotICByZXR1cm4gdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlICsgIl8iICsKLSAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0VHlwZSgpKSArCi0gICAgIl9ERVZJQ0VfTElOS0VSX18iICsKKyAgcmV0dXJuIGNtU3RyQ2F0KAorICAgIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCAiXyIsCisgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSksCisgICAgIl9ERVZJQ0VfTElOS0VSX18iLAogICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OkVuY29kZVJ1bGVOYW1lKAotICAgICAgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0TmFtZSgpKTsKKyAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXROYW1lKCkpLAorICAgICJfIiwgY29uZmlnKTsKIH0KIAogc3RydWN0IGNtTmluamFSZW1vdmVOb09wQ29tbWFuZHMKQEAgLTE2NSwxNCArMTg2LDE2IEBACiAgIH0KIH07CiAKLXZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVEZXZpY2VMaW5rUnVsZShib29sIHVzZVJlc3BvbnNlRmlsZSkKK3ZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVEZXZpY2VMaW5rUnVsZSgKKyAgYm9vbCB1c2VSZXNwb25zZUZpbGUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIGNtTmluamFSdWxlIHJ1bGUodGhpcy0+TGFuZ3VhZ2VMaW5rZXJEZXZpY2VSdWxlKCkpOworICBjbU5pbmphUnVsZSBydWxlKHRoaXMtPkxhbmd1YWdlTGlua2VyRGV2aWNlUnVsZShjb25maWcpKTsKICAgaWYgKCF0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+SGFzUnVsZShydWxlLk5hbWUpKSB7CiAgICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyB2YXJzOwogICAgIHZhcnMuQ01UYXJnZXROYW1lID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE5hbWUoKS5jX3N0cigpOwogICAgIHZhcnMuQ01UYXJnZXRUeXBlID0KLSAgICAgIGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRUeXBlKCkpOworICAgICAgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSkKKyAgICAgICAgLmNfc3RyKCk7CiAKICAgICB2YXJzLkxhbmd1YWdlID0gIkNVREEiOwogCkBAIC0yMTEsMTYgKzIzNCwxMiBAQAogICAgIHZhcnMuTGlua0ZsYWdzID0gIiRMSU5LX0ZMQUdTIjsKICAgICB2YXJzLk1hbmlmZXN0cyA9ICIkTUFOSUZFU1RTIjsKIAotICAgIHN0ZDo6c3RyaW5nIGxhbmdGbGFnczsKLSAgICBpZiAodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpIHsKLSAgICAgIGxhbmdGbGFncyArPSAiJExBTkdVQUdFX0NPTVBJTEVfRkxBR1MgJEFSQ0hfRkxBR1MiOwotICAgICAgdmFycy5MYW5ndWFnZUNvbXBpbGVGbGFncyA9IGxhbmdGbGFncy5jX3N0cigpOwotICAgIH0KKyAgICB2YXJzLkxhbmd1YWdlQ29tcGlsZUZsYWdzID0gIiRMQU5HVUFHRV9DT01QSUxFX0ZMQUdTIjsKIAogICAgIHN0ZDo6c3RyaW5nIGxhdW5jaGVyOwogICAgIGNvbnN0IGNoYXIqIHZhbCA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldFJ1bGVMYXVuY2hlcigKICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLCAiUlVMRV9MQVVOQ0hfTElOSyIpOwotICAgIGlmICh2YWwgJiYgKnZhbCkgeworICAgIGlmIChjbU5vbmVtcHR5KHZhbCkpIHsKICAgICAgIGxhdW5jaGVyID0gY21TdHJDYXQodmFsLCAnICcpOwogICAgIH0KIApAQCAtMjM2LDM1ICsyNTUsNDAgQEAKICAgICB9CiAKICAgICAvLyBJZiB0aGVyZSBpcyBubyByYW5saWIgdGhlIGNvbW1hbmQgd2lsbCBiZSAiOiIuICBTa2lwIGl0LgotICAgIGNtRXJhc2VJZihsaW5rQ21kcywgY21OaW5qYVJlbW92ZU5vT3BDb21tYW5kcygpKTsKKyAgICBjbTo6ZXJhc2VfaWYobGlua0NtZHMsIGNtTmluamFSZW1vdmVOb09wQ29tbWFuZHMoKSk7CiAKICAgICBydWxlLkNvbW1hbmQgPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5CdWlsZENvbW1hbmRMaW5lKGxpbmtDbWRzKTsKIAogICAgIC8vIFdyaXRlIHRoZSBsaW5rZXIgcnVsZSB3aXRoIHJlc3BvbnNlIGZpbGUgaWYgbmVlZGVkLgotICAgIHJ1bGUuQ29tbWVudCA9IGNtU3RyQ2F0KCJSdWxlIGZvciBsaW5raW5nICIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSwgJyAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFZpc2libGVUeXBlTmFtZSgpLCAnLicpOwotICAgIHJ1bGUuRGVzY3JpcHRpb24gPSBjbVN0ckNhdCgiTGlua2luZyAiLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UsICcgJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0VmlzaWJsZVR5cGVOYW1lKCksICIgJFRBUkdFVF9GSUxFIik7CisgICAgcnVsZS5Db21tZW50ID0KKyAgICAgIGNtU3RyQ2F0KCJSdWxlIGZvciBsaW5raW5nICIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCAnICcsCisgICAgICAgICAgICAgICB0aGlzLT5HZXRWaXNpYmxlVHlwZU5hbWUoKSwgJy4nKTsKKyAgICBydWxlLkRlc2NyaXB0aW9uID0KKyAgICAgIGNtU3RyQ2F0KCJMaW5raW5nICIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCAnICcsCisgICAgICAgICAgICAgICB0aGlzLT5HZXRWaXNpYmxlVHlwZU5hbWUoKSwgIiAkVEFSR0VUX0ZJTEUiKTsKICAgICBydWxlLlJlc3RhdCA9ICIkUkVTVEFUIjsKIAogICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5BZGRSdWxlKHJ1bGUpOwogICB9CiB9CiAKLXZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVMaW5rUnVsZShib29sIHVzZVJlc3BvbnNlRmlsZSkKK3ZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVMaW5rUnVsZShib29sIHVzZVJlc3BvbnNlRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRUeXBlKCk7CiAKLSAgc3RkOjpzdHJpbmcgbGlua1J1bGVOYW1lID0gdGhpcy0+TGFuZ3VhZ2VMaW5rZXJSdWxlKCk7CisgIHN0ZDo6c3RyaW5nIGxpbmtSdWxlTmFtZSA9IHRoaXMtPkxhbmd1YWdlTGlua2VyUnVsZShjb25maWcpOwogICBpZiAoIXRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5IYXNSdWxlKGxpbmtSdWxlTmFtZSkpIHsKICAgICBjbU5pbmphUnVsZSBydWxlKHN0ZDo6bW92ZShsaW5rUnVsZU5hbWUpKTsKICAgICBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzIHZhcnM7CiAgICAgdmFycy5DTVRhcmdldE5hbWUgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0TmFtZSgpLmNfc3RyKCk7Ci0gICAgdmFycy5DTVRhcmdldFR5cGUgPSBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0YXJnZXRUeXBlKTsKKyAgICB2YXJzLkNNVGFyZ2V0VHlwZSA9IGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRhcmdldFR5cGUpLmNfc3RyKCk7CiAKLSAgICB2YXJzLkxhbmd1YWdlID0gdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLmNfc3RyKCk7CisgICAgc3RkOjpzdHJpbmcgbGFuZyA9IHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpOworICAgIHZhcnMuTGFuZ3VhZ2UgPSBjb25maWcuY19zdHIoKTsKKyAgICB2YXJzLkFJWEV4cG9ydHMgPSAiJEFJWF9FWFBPUlRTIjsKIAotICAgIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UgPT0gIlN3aWZ0IikgeworICAgIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSA9PSAiU3dpZnQiKSB7CiAgICAgICB2YXJzLlN3aWZ0TGlicmFyeU5hbWUgPSAiJFNXSUZUX0xJQlJBUllfTkFNRSI7CiAgICAgICB2YXJzLlN3aWZ0TW9kdWxlID0gIiRTV0lGVF9NT0RVTEUiOwogICAgICAgdmFycy5Td2lmdE1vZHVsZU5hbWUgPSAiJFNXSUZUX01PRFVMRV9OQU1FIjsKQEAgLTI3OCw3ICszMDIsOCBAQAogCiAgICAgc3RkOjpzdHJpbmcgcmVzcG9uc2VGbGFnOwogCi0gICAgc3RkOjpzdHJpbmcgY21ha2VWYXJMYW5nID0gY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSk7CisgICAgc3RkOjpzdHJpbmcgY21ha2VWYXJMYW5nID0KKyAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSk7CiAKICAgICAvLyBidWlsZCByZXNwb25zZSBmaWxlIG5hbWUKICAgICBzdGQ6OnN0cmluZyBjbWFrZUxpbmtWYXIgPSBjbWFrZVZhckxhbmcgKyAiX1JFU1BPTlNFX0ZJTEVfTElOS19GTEFHIjsKQEAgLTMwNCw3ICszMjksNyBAQAogICAgICAgICBydWxlLlJzcENvbnRlbnQgPSAiJGluX25ld2xpbmUiOwogICAgICAgfQogICAgICAgcnVsZS5Sc3BDb250ZW50ICs9ICIgJExJTktfUEFUSCAkTElOS19MSUJSQVJJRVMiOwotICAgICAgaWYgKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSA9PSAiU3dpZnQiKSB7CisgICAgICBpZiAodGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZykgPT0gIlN3aWZ0IikgewogICAgICAgICB2YXJzLlN3aWZ0U291cmNlcyA9IHJlc3BvbnNlRmxhZy5jX3N0cigpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgdmFycy5PYmplY3RzID0gcmVzcG9uc2VGbGFnLmNfc3RyKCk7CkBAIC0zNTEsNyArMzc2LDcgQEAKICAgICBzdGQ6OnN0cmluZyBsYXVuY2hlcjsKICAgICBjb25zdCBjaGFyKiB2YWwgPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRSdWxlTGF1bmNoZXIoCiAgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwgIlJVTEVfTEFVTkNIX0xJTksiKTsKLSAgICBpZiAodmFsICYmICp2YWwpIHsKKyAgICBpZiAoY21Ob25lbXB0eSh2YWwpKSB7CiAgICAgICBsYXVuY2hlciA9IGNtU3RyQ2F0KHZhbCwgJyAnKTsKICAgICB9CiAKQEAgLTM1OSw3ICszODQsNyBAQAogICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q3JlYXRlUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIoKSk7CiAKICAgICAvLyBSdWxlIGZvciBsaW5raW5nIGxpYnJhcnkvZXhlY3V0YWJsZS4KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua0NtZHMgPSB0aGlzLT5Db21wdXRlTGlua0NtZCgpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rQ21kcyA9IHRoaXMtPkNvbXB1dGVMaW5rQ21kKGNvbmZpZyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyYgbGlua0NtZCA6IGxpbmtDbWRzKSB7CiAgICAgICBsaW5rQ21kID0gY21TdHJDYXQobGF1bmNoZXIsIGxpbmtDbWQpOwogICAgICAgcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXItPkV4cGFuZFJ1bGVWYXJpYWJsZXModGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSwKQEAgLTM2NywyMiArMzkyLDI1IEBACiAgICAgfQogCiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gcmFubGliIHRoZSBjb21tYW5kIHdpbGwgYmUgIjoiLiAgU2tpcCBpdC4KLSAgICBjbUVyYXNlSWYobGlua0NtZHMsIGNtTmluamFSZW1vdmVOb09wQ29tbWFuZHMoKSk7CisgICAgY206OmVyYXNlX2lmKGxpbmtDbWRzLCBjbU5pbmphUmVtb3ZlTm9PcENvbW1hbmRzKCkpOwogCiAgICAgbGlua0NtZHMuaW5zZXJ0KGxpbmtDbWRzLmJlZ2luKCksICIkUFJFX0xJTksiKTsKICAgICBsaW5rQ21kcy5lbXBsYWNlX2JhY2soIiRQT1NUX0JVSUxEIik7CiAgICAgcnVsZS5Db21tYW5kID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+QnVpbGRDb21tYW5kTGluZShsaW5rQ21kcyk7CiAKICAgICAvLyBXcml0ZSB0aGUgbGlua2VyIHJ1bGUgd2l0aCByZXNwb25zZSBmaWxlIGlmIG5lZWRlZC4KLSAgICBydWxlLkNvbW1lbnQgPSBjbVN0ckNhdCgiUnVsZSBmb3IgbGlua2luZyAiLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UsICcgJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRWaXNpYmxlVHlwZU5hbWUoKSwgJy4nKTsKLSAgICBydWxlLkRlc2NyaXB0aW9uID0gY21TdHJDYXQoIkxpbmtpbmcgIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLCAnICcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFZpc2libGVUeXBlTmFtZSgpLCAiICRUQVJHRVRfRklMRSIpOworICAgIHJ1bGUuQ29tbWVudCA9CisgICAgICBjbVN0ckNhdCgiUnVsZSBmb3IgbGlua2luZyAiLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgJyAnLAorICAgICAgICAgICAgICAgdGhpcy0+R2V0VmlzaWJsZVR5cGVOYW1lKCksICcuJyk7CisgICAgcnVsZS5EZXNjcmlwdGlvbiA9CisgICAgICBjbVN0ckNhdCgiTGlua2luZyAiLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgJyAnLAorICAgICAgICAgICAgICAgdGhpcy0+R2V0VmlzaWJsZVR5cGVOYW1lKCksICIgJFRBUkdFVF9GSUxFIik7CiAgICAgcnVsZS5SZXN0YXQgPSAiJFJFU1RBVCI7CiAgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFJ1bGUocnVsZSk7CiAgIH0KIAotICBpZiAodGhpcy0+VGFyZ2V0TmFtZXMuT3V0cHV0ICE9IHRoaXMtPlRhcmdldE5hbWVzLlJlYWwgJiYKKyAgYXV0byBjb25zdCB0Z3ROYW1lcyA9IHRoaXMtPlRhcmdldE5hbWVzKGNvbmZpZyk7CisgIGlmICh0Z3ROYW1lcy5PdXRwdXQgIT0gdGd0TmFtZXMuUmVhbCAmJgogICAgICAgIXRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5Jc0ZyYW1ld29ya09uQXBwbGUoKSkgewogICAgIHN0ZDo6c3RyaW5nIGNtYWtlQ29tbWFuZCA9CiAgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCkBAIC00MjYsMTQgKzQ1NCwxMiBAQAogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlk6CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOiB7Ci0gICAgICBjb25zdCBzdGQ6OnN0cmluZyBjdWRhTGlua0NtZCgKLSAgICAgICAgdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfQ1VEQV9ERVZJQ0VfTElOS19MSUJSQVJZIikpOwotICAgICAgY21FeHBhbmRMaXN0KGN1ZGFMaW5rQ21kLCBsaW5rQ21kcyk7CisgICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9DVURBX0RFVklDRV9MSU5LX0xJQlJBUlkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQ21kcyk7CiAgICAgfSBicmVhazsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRTogewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgY3VkYUxpbmtDbWQodGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbigKLSAgICAgICAgIkNNQUtFX0NVREFfREVWSUNFX0xJTktfRVhFQ1VUQUJMRSIpKTsKLSAgICAgIGNtRXhwYW5kTGlzdChjdWRhTGlua0NtZCwgbGlua0NtZHMpOworICAgICAgdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmRXhwYW5kTGlzdCgKKyAgICAgICAgIkNNQUtFX0NVREFfREVWSUNFX0xJTktfRVhFQ1VUQUJMRSIsIGxpbmtDbWRzKTsKICAgICB9IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKQEAgLTQ0MSw3ICs0NjcsOCBAQAogICByZXR1cm4gbGlua0NtZHM7CiB9CiAKLXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpDb21wdXRlTGlua0NtZCgpCitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6Q29tcHV0ZUxpbmtDbWQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rQ21kczsKICAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5HZXRNYWtlZmlsZSgpOwpAQCAtNDUwLDE0ICs0NzcsMTQgQEAKICAgICAvLyB0aGlzIG9jY3VycyB3aGVuIHRoaW5ncyBsaWtlIElQTyBpcyBlbmFibGVkLCBhbmQgd2UgbmVlZCB0byB1c2UgdGhlCiAgICAgLy8gQ01BS0VfPGxhbmc+X0NSRUFURV9TVEFUSUNfTElCUkFSWV9JUE8gZGVmaW5lIGluc3RlYWQuCiAgICAgc3RkOjpzdHJpbmcgbGlua0NtZFZhciA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRDcmVhdGVSdWxlVmFyaWFibGUoCi0gICAgICB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgICB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgY29uZmlnKTsKICAgICBjb25zdCBjaGFyKiBsaW5rQ21kID0gbWYtPkdldERlZmluaXRpb24obGlua0NtZFZhcik7CiAgICAgaWYgKGxpbmtDbWQpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGxpbmtDbWRTdHIgPSBsaW5rQ21kOwotICAgICAgaWYgKHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5IYXNJbXBsaWJHTlV0b01TKHRoaXMtPkNvbmZpZ05hbWUpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHJ1bGVWYXIgPSBjbVN0ckNhdCgKLSAgICAgICAgICAiQ01BS0VfIiwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rZXJMYW5ndWFnZSh0aGlzLT5Db25maWdOYW1lKSwKLSAgICAgICAgICAiX0dOVXRvTVNfUlVMRSIpOworICAgICAgaWYgKHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5IYXNJbXBsaWJHTlV0b01TKGNvbmZpZykpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgcnVsZVZhciA9CisgICAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UoY29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAiX0dOVXRvTVNfUlVMRSIpOwogICAgICAgICBpZiAoY29uc3QgY2hhciogcnVsZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHJ1bGVWYXIpKSB7CiAgICAgICAgICAgbGlua0NtZFN0ciArPSBydWxlOwogICAgICAgICB9CkBAIC00NjksOSArNDk2LDggQEAKICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCBjbUxvY2FsR2VuZXJhdG9yOjpTSEVMTCksCiAgICAgICAgICAgIiAtRSBfX3J1bl9jb19jb21waWxlIC0tbHd5dT0iKTsKICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQmIGd0ID0gKnRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpOwotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjZmdOYW1lID0gdGhpcy0+R2V0Q29uZmlnTmFtZSgpOwogICAgICAgICBzdGQ6OnN0cmluZyB0YXJnZXRPdXRwdXRSZWFsID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKAotICAgICAgICAgIGd0LkdldEZ1bGxQYXRoKGNmZ05hbWUsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0LAorICAgICAgICAgIGd0LkdldEZ1bGxQYXRoKGNvbmZpZywgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLypyZWFsbmFtZT0qL3RydWUpKTsKICAgICAgICAgY21ha2VDb21tYW5kICs9IHRhcmdldE91dHB1dFJlYWw7CiAgICAgICAgIGxpbmtDbWRzLnB1c2hfYmFjayhzdGQ6Om1vdmUoY21ha2VDb21tYW5kKSk7CkBAIC00ODYsMjUgKzUxMiwyNSBAQAogICAgICAgICBzdGQ6OnN0cmluZyBjbWFrZUNvbW1hbmQgPQogICAgICAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwotICAgICAgICBsaW5rQ21kcy5wdXNoX2JhY2soY21ha2VDb21tYW5kICsgIiAtRSByZW1vdmUgJFRBUkdFVF9GSUxFIik7CisgICAgICAgIGxpbmtDbWRzLnB1c2hfYmFjayhjbWFrZUNvbW1hbmQgKyAiIC1FIHJtIC1mICRUQVJHRVRfRklMRSIpOwogICAgICAgfQogICAgICAgLy8gVE9ETzogVXNlIEFSQ0hJVkVfQVBQRU5EIGZvciBhcmNoaXZlcyBvdmVyIGEgY2VydGFpbiBzaXplLgogICAgICAgewotICAgICAgICBzdGQ6OnN0cmluZyBsaW5rQ21kVmFyID0KLSAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLCAiX0FSQ0hJVkVfQ1JFQVRFIik7CisgICAgICAgIHN0ZDo6c3RyaW5nIGxpbmtDbWRWYXIgPSBjbVN0ckNhdCgKKyAgICAgICAgICAiQ01BS0VfIiwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksICJfQVJDSElWRV9DUkVBVEUiKTsKIAogICAgICAgICBsaW5rQ21kVmFyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGZWF0dXJlU3BlY2lmaWNMaW5rUnVsZVZhcmlhYmxlKAotICAgICAgICAgIGxpbmtDbWRWYXIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICAgICAgICBsaW5rQ21kVmFyLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgY29uZmlnKTsKIAogICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGlua0NtZCA9IG1mLT5HZXRSZXF1aXJlZERlZmluaXRpb24obGlua0NtZFZhcik7CiAgICAgICAgIGNtRXhwYW5kTGlzdChsaW5rQ21kLCBsaW5rQ21kcyk7CiAgICAgICB9CiAgICAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGxpbmtDbWRWYXIgPQotICAgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UsICJfQVJDSElWRV9GSU5JU0giKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgbGlua0NtZFZhciA9IGNtU3RyQ2F0KAorICAgICAgICAgICJDTUFLRV8iLCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgIl9BUkNISVZFX0ZJTklTSCIpOwogCiAgICAgICAgIGxpbmtDbWRWYXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEZlYXR1cmVTcGVjaWZpY0xpbmtSdWxlVmFyaWFibGUoCi0gICAgICAgICAgbGlua0NtZFZhciwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICAgICAgICAgIGxpbmtDbWRWYXIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLCBjb25maWcpOwogCiAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsaW5rQ21kID0gbWYtPkdldFJlcXVpcmVkRGVmaW5pdGlvbihsaW5rQ21kVmFyKTsKICAgICAgICAgY21FeHBhbmRMaXN0KGxpbmtDbWQsIGxpbmtDbWRzKTsKQEAgLTUyMywxOSArNTQ5LDI3IEBACiAgICAgICAgIGxpbmtDbWRzLnB1c2hfYmFjayhjbWFrZUNvbW1hbmQgKyAiIC1FIHRvdWNoICRUQVJHRVRfRklMRSIpOwogICAgICAgfQogI2VuZGlmCi0gICAgICByZXR1cm4gbGlua0NtZHM7Ci0gICAgfQorICAgIH0gYnJlYWs7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZOgogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOgorICAgICAgaWYgKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpID09ICJTd2lmdCIpIHsKKyAgICAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+SXNFeGVjdXRhYmxlV2l0aEV4cG9ydHMoKSkgeworICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9FWEVfRVhQT1JUU19Td2lmdF9GTEFHIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQ21kcyk7CisgICAgICAgIH0KKyAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICBhc3NlcnQoZmFsc2UgJiYgIlVuZXhwZWN0ZWQgdGFyZ2V0IHR5cGUiKTsKICAgfQotICByZXR1cm4gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCk7CisgIHJldHVybiBsaW5rQ21kczsKIH0KIAotdm9pZCBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZURldmljZUxpbmtTdGF0ZW1lbnQoKQordm9pZCBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZURldmljZUxpbmtTdGF0ZW1lbnQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlQ29uZmlnLAorICBib29sIGZpcnN0Rm9yQ29uZmlnKQogewogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yKiBnbG9iYWxHZW4gPSB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKICAgaWYgKCFnbG9iYWxHZW4tPkdldExhbmd1YWdlRW5hYmxlZCgiQ1VEQSIpKSB7CkBAIC01NDUsMzcgKzU3OSw2NCBAQAogICBjbUdlbmVyYXRvclRhcmdldCogZ2VuVGFyZ2V0ID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCk7CiAKICAgYm9vbCByZXF1aXJlc0RldmljZUxpbmtpbmcgPSByZXF1aXJlRGV2aWNlTGlua2luZygKLSAgICAqdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCAqdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSwgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgKnRoaXMtPkdlbmVyYXRvclRhcmdldCwgKnRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCksIGNvbmZpZyk7CiAgIGlmICghcmVxdWlyZXNEZXZpY2VMaW5raW5nKSB7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgLy8gTm93IHdlIGNhbiBkbyBkZXZpY2UgbGlua2luZwotCiAgIC8vIEZpcnN0IGFuZCB2ZXJ5IGltcG9ydGFudCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3aGlsZSBpbnNpZGUgdGhpcwogICAvLyBzdGVwIG91ciBsaW5rIGxhbmd1YWdlIGlzIHNldCB0byBDVURBCiAgIHN0ZDo6c3RyaW5nIGN1ZGFMaW5rTGFuZ3VhZ2UgPSAiQ1VEQSI7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBvYmpFeHQgPQogICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQ1VEQV9PVVRQVVRfRVhURU5TSU9OIik7CiAKLSAgc3RkOjpzdHJpbmcgY29uc3QgY2ZnTmFtZSA9IHRoaXMtPkdldENvbmZpZ05hbWUoKTsKLSAgc3RkOjpzdHJpbmcgY29uc3QgdGFyZ2V0T3V0cHV0UmVhbCA9IENvbnZlcnRUb05pbmphUGF0aCgKLSAgICBnZW5UYXJnZXQtPk9iamVjdERpcmVjdG9yeSArICJjbWFrZV9kZXZpY2VfbGluayIgKyBvYmpFeHQpOworICBzdGQ6OnN0cmluZyB0YXJnZXRPdXRwdXREaXIgPQorICAgIGNtU3RyQ2F0KHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldFRhcmdldERpcmVjdG9yeShnZW5UYXJnZXQpLAorICAgICAgICAgICAgIGdsb2JhbEdlbi0+Q29uZmlnRGlyZWN0b3J5KGNvbmZpZyksICIvIik7CisgIHRhcmdldE91dHB1dERpciA9IGdsb2JhbEdlbi0+RXhwYW5kQ0ZHSW50RGlyKHRhcmdldE91dHB1dERpciwgY29uZmlnKTsKIAotICBzdGQ6OnN0cmluZyBjb25zdCB0YXJnZXRPdXRwdXRJbXBsaWIgPSBDb252ZXJ0VG9OaW5qYVBhdGgoCi0gICAgZ2VuVGFyZ2V0LT5HZXRGdWxsUGF0aChjZmdOYW1lLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCkpOworICBzdGQ6OnN0cmluZyB0YXJnZXRPdXRwdXRSZWFsID0KKyAgICBDb252ZXJ0VG9OaW5qYVBhdGgodGFyZ2V0T3V0cHV0RGlyICsgImNtYWtlX2RldmljZV9saW5rIiArIG9iakV4dCk7CiAKKyAgc3RkOjpzdHJpbmcgdGFyZ2V0T3V0cHV0SW1wbGliID0gQ29udmVydFRvTmluamFQYXRoKAorICAgIGdlblRhcmdldC0+R2V0RnVsbFBhdGgoY29uZmlnLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCkpOworCisgIGlmIChjb25maWcgIT0gZmlsZUNvbmZpZykgeworICAgIHN0ZDo6c3RyaW5nIHRhcmdldE91dHB1dEZpbGVDb25maWdEaXIgPQorICAgICAgY21TdHJDYXQodGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0VGFyZ2V0RGlyZWN0b3J5KGdlblRhcmdldCksCisgICAgICAgICAgICAgICBnbG9iYWxHZW4tPkNvbmZpZ0RpcmVjdG9yeShmaWxlQ29uZmlnKSwgIi8iKTsKKyAgICB0YXJnZXRPdXRwdXRGaWxlQ29uZmlnRGlyID0KKyAgICAgIGdsb2JhbEdlbi0+RXhwYW5kQ0ZHSW50RGlyKHRhcmdldE91dHB1dERpciwgZmlsZUNvbmZpZyk7CisgICAgaWYgKHRhcmdldE91dHB1dERpciA9PSB0YXJnZXRPdXRwdXRGaWxlQ29uZmlnRGlyKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFnZW5UYXJnZXQtPkdldEZ1bGxOYW1lKGNvbmZpZywgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpCisgICAgICAgICAgIC5lbXB0eSgpICYmCisgICAgICAgICFnZW5UYXJnZXQKKyAgICAgICAgICAgLT5HZXRGdWxsTmFtZShmaWxlQ29uZmlnLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCkKKyAgICAgICAgICAgLmVtcHR5KCkgJiYKKyAgICAgICAgdGFyZ2V0T3V0cHV0SW1wbGliID09CisgICAgICAgICAgQ29udmVydFRvTmluamFQYXRoKGdlblRhcmdldC0+R2V0RnVsbFBhdGgoCisgICAgICAgICAgICBmaWxlQ29uZmlnLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCkpKSB7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgaWYgKGZpcnN0Rm9yQ29uZmlnKSB7CisgICAgZ2xvYmFsR2VuLT5HZXRCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQoY29uZmlnKS5wdXNoX2JhY2sodGFyZ2V0T3V0cHV0UmVhbCk7CisgIH0KICAgdGhpcy0+RGV2aWNlTGlua09iamVjdCA9IHRhcmdldE91dHB1dFJlYWw7CiAKICAgLy8gV3JpdGUgY29tbWVudHMuCi0gIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcih0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSk7CisgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcih0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCkpOwogICBjb25zdCBjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSA9IGdlblRhcmdldC0+R2V0VHlwZSgpOwotICB0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSA8PCAiIyBEZXZpY2UgTGluayBidWlsZCBzdGF0ZW1lbnRzIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRhcmdldFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgdGFyZ2V0ICIgPDwgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpIDw8ICJcblxuIjsKKyAgdGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpIDw8ICIjIERldmljZSBMaW5rIGJ1aWxkIHN0YXRlbWVudHMgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNtU3RhdGU6OkdldFRhcmdldFR5cGVOYW1lKHRhcmdldFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIHRhcmdldCAiIDw8IHRoaXMtPkdldFRhcmdldE5hbWUoKSA8PCAiXG5cbiI7CiAKICAgLy8gQ29tcHV0ZSB0aGUgY29tbWVudC4KLSAgY21OaW5qYUJ1aWxkIGJ1aWxkKHRoaXMtPkxhbmd1YWdlTGlua2VyRGV2aWNlUnVsZSgpKTsKKyAgY21OaW5qYUJ1aWxkIGJ1aWxkKHRoaXMtPkxhbmd1YWdlTGlua2VyRGV2aWNlUnVsZShjb25maWcpKTsKICAgYnVpbGQuQ29tbWVudCA9CiAgICAgY21TdHJDYXQoIkxpbmsgdGhlICIsIHRoaXMtPkdldFZpc2libGVUeXBlTmFtZSgpLCAnICcsIHRhcmdldE91dHB1dFJlYWwpOwogCkBAIC01ODQsMTQgKzY0NSwxNSBAQAogICAvLyBDb21wdXRlIG91dHB1dHMuCiAgIGJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKHRhcmdldE91dHB1dFJlYWwpOwogICAvLyBDb21wdXRlIHNwZWNpZmljIGxpYnJhcmllcyB0byBsaW5rIHdpdGguCi0gIGJ1aWxkLkV4cGxpY2l0RGVwcyA9IHRoaXMtPkdldE9iamVjdHMoKTsKLSAgYnVpbGQuSW1wbGljaXREZXBzID0gdGhpcy0+Q29tcHV0ZUxpbmtEZXBzKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSk7CisgIGJ1aWxkLkV4cGxpY2l0RGVwcyA9IHRoaXMtPkdldE9iamVjdHMoY29uZmlnKTsKKyAgYnVpbGQuSW1wbGljaXREZXBzID0KKyAgICB0aGlzLT5Db21wdXRlTGlua0RlcHModGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksIGNvbmZpZyk7CiAKICAgc3RkOjpzdHJpbmcgZnJhbWV3b3JrUGF0aDsKICAgc3RkOjpzdHJpbmcgbGlua1BhdGg7CiAKLSAgc3RkOjpzdHJpbmcgY3JlYXRlUnVsZSA9IGdlblRhcmdldC0+R2V0Q3JlYXRlUnVsZVZhcmlhYmxlKAotICAgIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgc3RkOjpzdHJpbmcgY3JlYXRlUnVsZSA9CisgICAgZ2VuVGFyZ2V0LT5HZXRDcmVhdGVSdWxlVmFyaWFibGUodGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksIGNvbmZpZyk7CiAgIGNvbnN0IGJvb2wgdXNlV2F0Y29tUXVvdGUgPQogICAgIHRoaXMtPkdldE1ha2VmaWxlKCktPklzT24oY3JlYXRlUnVsZSArICJfVVNFX1dBVENPTV9RVU9URSIpOwogICBjbUxvY2FsTmluamFHZW5lcmF0b3ImIGxvY2FsR2VuID0gKnRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCk7CkBAIC02MDUsNDMgKzY2NywzNCBAQAogICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpLAogICAgICAgZ2xvYmFsR2VuKSk7CiAgIGxpbmtMaW5lQ29tcHV0ZXItPlNldFVzZVdhdGNvbVF1b3RlKHVzZVdhdGNvbVF1b3RlKTsKKyAgbGlua0xpbmVDb21wdXRlci0+U2V0VXNlTmluamFNdWx0aShnbG9iYWxHZW4tPklzTXVsdGlDb25maWcoKSk7CiAKLSAgbG9jYWxHZW4uR2V0VGFyZ2V0RmxhZ3MoCi0gICAgbGlua0xpbmVDb21wdXRlci5nZXQoKSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLCB2YXJzWyJMSU5LX0xJQlJBUklFUyJdLAotICAgIHZhcnNbIkZMQUdTIl0sIHZhcnNbIkxJTktfRkxBR1MiXSwgZnJhbWV3b3JrUGF0aCwgbGlua1BhdGgsIGdlblRhcmdldCk7CisgIGxvY2FsR2VuLkdldERldmljZUxpbmtGbGFncyhsaW5rTGluZUNvbXB1dGVyLmdldCgpLCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzWyJMSU5LX0xJQlJBUklFUyJdLCB2YXJzWyJMSU5LX0ZMQUdTIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtQYXRoLCBsaW5rUGF0aCwgZ2VuVGFyZ2V0KTsKIAogICB0aGlzLT5hZGRQb29sTmluamFWYXJpYWJsZSgiSk9CX1BPT0xfTElOSyIsIGdlblRhcmdldCwgdmFycyk7CiAKLSAgdmFyc1siTElOS19GTEFHUyJdID0KLSAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVMaXRlcmFsKHZhcnNbIkxJTktfRkxBR1MiXSk7CisgIHZhcnNbIkxJTktfRkxBR1MiXSA9IGdsb2JhbEdlbi0+RW5jb2RlTGl0ZXJhbCh2YXJzWyJMSU5LX0ZMQUdTIl0pOwogCi0gIHZhcnNbIk1BTklGRVNUUyJdID0gdGhpcy0+R2V0TWFuaWZlc3RzKCk7CisgIHZhcnNbIk1BTklGRVNUUyJdID0gdGhpcy0+R2V0TWFuaWZlc3RzKGNvbmZpZyk7CiAKICAgdmFyc1siTElOS19QQVRIIl0gPSBmcmFtZXdvcmtQYXRoICsgbGlua1BhdGg7CiAKLSAgLy8gQ29tcHV0ZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbGluayBmbGFncy4gIFllcywgdGhlc2UgZ28gaW50byBhIGRpZmZlcmVudAotICAvLyB2YXJpYWJsZSBmb3IgZXhlY3V0YWJsZXMsIHByb2JhYmx5IGR1ZSB0byBhIG1pc3Rha2UgbWFkZSB3aGVuIGR1cGxpY2F0aW5nCi0gIC8vIGNvZGUgYmV0d2VlbiB0aGUgTWFrZWZpbGUgZXhlY3V0YWJsZSBhbmQgbGlicmFyeSBnZW5lcmF0b3JzLgotICBpZiAodGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpIHsKLSAgICBzdGQ6OnN0cmluZyB0ID0gdmFyc1siRkxBR1MiXTsKLSAgICBsb2NhbEdlbi5BZGRBcmNoaXRlY3R1cmVGbGFncyh0LCBnZW5UYXJnZXQsIGN1ZGFMaW5rTGFuZ3VhZ2UsIGNmZ05hbWUpOwotICAgIHZhcnNbIkZMQUdTIl0gPSB0OwotICB9IGVsc2UgewotICAgIHN0ZDo6c3RyaW5nIHQgPSB2YXJzWyJBUkNIX0ZMQUdTIl07Ci0gICAgbG9jYWxHZW4uQWRkQXJjaGl0ZWN0dXJlRmxhZ3ModCwgZ2VuVGFyZ2V0LCBjdWRhTGlua0xhbmd1YWdlLCBjZmdOYW1lKTsKLSAgICB2YXJzWyJBUkNIX0ZMQUdTIl0gPSB0OwotICAgIHQuY2xlYXIoKTsKLSAgICBsb2NhbEdlbi5BZGRMYW5ndWFnZUZsYWdzRm9yTGlua2luZyh0LCBnZW5UYXJnZXQsIGN1ZGFMaW5rTGFuZ3VhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnTmFtZSk7Ci0gICAgdmFyc1siTEFOR1VBR0VfQ09NUElMRV9GTEFHUyJdID0gdDsKLSAgfQotICBpZiAoZ2VuVGFyZ2V0LT5IYXNTT05hbWUoY2ZnTmFtZSkpIHsKKyAgLy8gQ29tcHV0ZSBsYW5ndWFnZSBzcGVjaWZpYyBsaW5rIGZsYWdzLgorICBzdGQ6OnN0cmluZyBsYW5nRmxhZ3M7CisgIGxvY2FsR2VuLkFkZExhbmd1YWdlRmxhZ3NGb3JMaW5raW5nKGxhbmdGbGFncywgZ2VuVGFyZ2V0LCBjdWRhTGlua0xhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOworICB2YXJzWyJMQU5HVUFHRV9DT01QSUxFX0ZMQUdTIl0gPSBsYW5nRmxhZ3M7CisKKyAgYXV0byBjb25zdCB0Z3ROYW1lcyA9IHRoaXMtPlRhcmdldE5hbWVzKGNvbmZpZyk7CisgIGlmIChnZW5UYXJnZXQtPkhhc1NPTmFtZShjb25maWcpKSB7CiAgICAgdmFyc1siU09OQU1FX0ZMQUciXSA9Ci0gICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRTT05hbWVGbGFnKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSk7Ci0gICAgdmFyc1siU09OQU1FIl0gPSB0aGlzLT5UYXJnZXROYW1lcy5TaGFyZWRPYmplY3Q7CisgICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRTT05hbWVGbGFnKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpKTsKKyAgICB2YXJzWyJTT05BTUUiXSA9IHRndE5hbWVzLlNoYXJlZE9iamVjdDsKICAgICBpZiAodGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSB7CiAgICAgICBzdGQ6OnN0cmluZyBpbnN0YWxsX2RpciA9Ci0gICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRJbnN0YWxsTmFtZURpckZvckJ1aWxkVHJlZShjZmdOYW1lKTsKKyAgICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldEluc3RhbGxOYW1lRGlyRm9yQnVpbGRUcmVlKGNvbmZpZyk7CiAgICAgICBpZiAoIWluc3RhbGxfZGlyLmVtcHR5KCkpIHsKICAgICAgICAgdmFyc1siSU5TVEFMTE5BTUVfRElSIl0gPSBsb2NhbEdlbi5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCiAgICAgICAgICAgaW5zdGFsbF9kaXIsIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CkBAIC02NDksMjUgKzcwMiwyOCBAQAogICAgIH0KICAgfQogCi0gIGlmICghdGhpcy0+VGFyZ2V0TmFtZXMuSW1wb3J0TGlicmFyeS5lbXB0eSgpKSB7CisgIGlmICghdGd0TmFtZXMuSW1wb3J0TGlicmFyeS5lbXB0eSgpKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgaW1wTGliUGF0aCA9IGxvY2FsR2VuLkNvbnZlcnRUb091dHB1dEZvcm1hdCgKICAgICAgIHRhcmdldE91dHB1dEltcGxpYiwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICB2YXJzWyJUQVJHRVRfSU1QTElCIl0gPSBpbXBMaWJQYXRoOwogICAgIEVuc3VyZVBhcmVudERpcmVjdG9yeUV4aXN0cyhpbXBMaWJQYXRoKTsKICAgfQogCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIG9ialBhdGggPSBHZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0U3VwcG9ydERpcmVjdG9yeSgpOworICBjb25zdCBzdGQ6OnN0cmluZyBvYmpQYXRoID0KKyAgICBjbVN0ckNhdChHZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0U3VwcG9ydERpcmVjdG9yeSgpLAorICAgICAgICAgICAgIGdsb2JhbEdlbi0+Q29uZmlnRGlyZWN0b3J5KGNvbmZpZykpOworCiAgIHZhcnNbIk9CSkVDVF9ESVIiXSA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgob2JqUGF0aCksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgIEVuc3VyZURpcmVjdG9yeUV4aXN0cyhvYmpQYXRoKTsKIAotICB0aGlzLT5TZXRNc3ZjVGFyZ2V0UGRiVmFyaWFibGUodmFycyk7CisgIHRoaXMtPlNldE1zdmNUYXJnZXRQZGJWYXJpYWJsZSh2YXJzLCBjb25maWcpOwogCisgIHN0ZDo6c3RyaW5nJiBsaW5rTGlicmFyaWVzID0gdmFyc1siTElOS19MSUJSQVJJRVMiXTsKKyAgc3RkOjpzdHJpbmcmIGxpbmtfcGF0aCA9IHZhcnNbIkxJTktfUEFUSCJdOwogICBpZiAoZ2xvYmFsR2VuLT5Jc0dDQ09uV2luZG93cygpKSB7CiAgICAgLy8gYXIuZXhlIGNhbid0IGhhbmRsZSBiYWNrc2xhc2hlcyBpbiByc3AgZmlsZXMgKGltcGxpY2l0bHkgdXNlZCBieSBnY2MpCi0gICAgc3RkOjpzdHJpbmcmIGxpbmtMaWJyYXJpZXMgPSB2YXJzWyJMSU5LX0xJQlJBUklFUyJdOwogICAgIHN0ZDo6cmVwbGFjZShsaW5rTGlicmFyaWVzLmJlZ2luKCksIGxpbmtMaWJyYXJpZXMuZW5kKCksICdcXCcsICcvJyk7Ci0gICAgc3RkOjpzdHJpbmcmIGxpbmtfcGF0aCA9IHZhcnNbIkxJTktfUEFUSCJdOwogICAgIHN0ZDo6cmVwbGFjZShsaW5rX3BhdGguYmVnaW4oKSwgbGlua19wYXRoLmVuZCgpLCAnXFwnLCAnLycpOwogICB9CiAKQEAgLTY3NSw2NSArNzMxLDEwMiBAQAogICAvLyBkbyBub3QgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgZm9yY2VkIGEgcmVzcG9uc2UgZmlsZS4KICAgaW50IGNvbnN0IGNvbW1hbmRMaW5lTGVuZ3RoTGltaXQgPQogICAgIHN0YXRpY19jYXN0PGludD4oY21TeXN0ZW1Ub29sczo6Q2FsY3VsYXRlQ29tbWFuZExpbmVMZW5ndGhMaW1pdCgpKSAtCi0gICAgZ2xvYmFsR2VuLT5HZXRSdWxlQ21kTGVuZ3RoKHRoaXMtPkxhbmd1YWdlTGlua2VyRGV2aWNlUnVsZSgpKTsKKyAgICBnbG9iYWxHZW4tPkdldFJ1bGVDbWRMZW5ndGgodGhpcy0+TGFuZ3VhZ2VMaW5rZXJEZXZpY2VSdWxlKGNvbmZpZykpOwogCi0gIGJ1aWxkLlJzcEZpbGUgPSB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoc3RkOjpzdHJpbmcoIkNNYWtlRmlsZXMvIikgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlblRhcmdldC0+R2V0TmFtZSgpICsgIi5yc3AiKTsKKyAgYnVpbGQuUnNwRmlsZSA9IHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCgKKyAgICBjbVN0ckNhdCgiQ01ha2VGaWxlcy8iLCBnZW5UYXJnZXQtPkdldE5hbWUoKSwKKyAgICAgICAgICAgICBnbG9iYWxHZW4tPklzTXVsdGlDb25maWcoKSA/IGNtU3RyQ2F0KCcuJywgY29uZmlnKSA6ICIiLCAiLnJzcCIpKTsKIAogICAvLyBHYXRoZXIgb3JkZXItb25seSBkZXBlbmRlbmNpZXMuCi0gIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHModGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuT3JkZXJPbmx5RGVwcyk7CisgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHMoCisgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksIGJ1aWxkLk9yZGVyT25seURlcHMsIGNvbmZpZywgY29uZmlnLAorICAgIERlcGVuZE9uVGFyZ2V0QXJ0aWZhY3QpOwogCiAgIC8vIFdyaXRlIHRoZSBidWlsZCBzdGF0ZW1lbnQgZm9yIHRoaXMgdGFyZ2V0LgogICBib29sIHVzZWRSZXNwb25zZUZpbGUgPSBmYWxzZTsKLSAgZ2xvYmFsR2VuLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBidWlsZCwKKyAgZ2xvYmFsR2VuLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldENvbW1vbkZpbGVTdHJlYW0oKSwgYnVpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZUxlbmd0aExpbWl0LCAmdXNlZFJlc3BvbnNlRmlsZSk7Ci0gIHRoaXMtPldyaXRlRGV2aWNlTGlua1J1bGUodXNlZFJlc3BvbnNlRmlsZSk7CisgIHRoaXMtPldyaXRlRGV2aWNlTGlua1J1bGUodXNlZFJlc3BvbnNlRmlsZSwgY29uZmlnKTsKIH0KIAotdm9pZCBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUxpbmtTdGF0ZW1lbnQoKQordm9pZCBjbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUxpbmtTdGF0ZW1lbnQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlQ29uZmlnLAorICBib29sIGZpcnN0Rm9yQ29uZmlnKQogewogICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPkdldE1ha2VmaWxlKCk7CiAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3IqIGdsb2JhbEdlbiA9IHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpOwogICBjbUdlbmVyYXRvclRhcmdldCogZ3QgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKTsKIAotICBjb25zdCBzdGQ6OnN0cmluZyBjZmdOYW1lID0gdGhpcy0+R2V0Q29uZmlnTmFtZSgpOwotICBzdGQ6OnN0cmluZyB0YXJnZXRPdXRwdXQgPSBDb252ZXJ0VG9OaW5qYVBhdGgoZ3QtPkdldEZ1bGxQYXRoKGNmZ05hbWUpKTsKKyAgc3RkOjpzdHJpbmcgdGFyZ2V0T3V0cHV0ID0gQ29udmVydFRvTmluamFQYXRoKGd0LT5HZXRGdWxsUGF0aChjb25maWcpKTsKICAgc3RkOjpzdHJpbmcgdGFyZ2V0T3V0cHV0UmVhbCA9IENvbnZlcnRUb05pbmphUGF0aCgKLSAgICBndC0+R2V0RnVsbFBhdGgoY2ZnTmFtZSwgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QsCisgICAgZ3QtPkdldEZ1bGxQYXRoKGNvbmZpZywgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QsCiAgICAgICAgICAgICAgICAgICAgIC8qcmVhbG5hbWU9Ki90cnVlKSk7CiAgIHN0ZDo6c3RyaW5nIHRhcmdldE91dHB1dEltcGxpYiA9IENvbnZlcnRUb05pbmphUGF0aCgKLSAgICBndC0+R2V0RnVsbFBhdGgoY2ZnTmFtZSwgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3QpKTsKKyAgICBndC0+R2V0RnVsbFBhdGgoY29uZmlnLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCkpOwogCisgIGlmIChjb25maWcgIT0gZmlsZUNvbmZpZykgeworICAgIGlmICh0YXJnZXRPdXRwdXQgPT0gQ29udmVydFRvTmluamFQYXRoKGd0LT5HZXRGdWxsUGF0aChmaWxlQ29uZmlnKSkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRhcmdldE91dHB1dFJlYWwgPT0KKyAgICAgICAgQ29udmVydFRvTmluamFQYXRoKGd0LT5HZXRGdWxsUGF0aChmaWxlQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qcmVhbG5hbWU9Ki90cnVlKSkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFndC0+R2V0RnVsbE5hbWUoY29uZmlnLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCkKKyAgICAgICAgICAgLmVtcHR5KCkgJiYKKyAgICAgICAgIWd0LT5HZXRGdWxsTmFtZShmaWxlQ29uZmlnLCBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdCkKKyAgICAgICAgICAgLmVtcHR5KCkgJiYKKyAgICAgICAgdGFyZ2V0T3V0cHV0SW1wbGliID09CisgICAgICAgICAgQ29udmVydFRvTmluamFQYXRoKGd0LT5HZXRGdWxsUGF0aCgKKyAgICAgICAgICAgIGZpbGVDb25maWcsIGNtU3RhdGVFbnVtczo6SW1wb3J0TGlicmFyeUFydGlmYWN0KSkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICBhdXRvIGNvbnN0IHRndE5hbWVzID0gdGhpcy0+VGFyZ2V0TmFtZXMoY29uZmlnKTsKICAgaWYgKGd0LT5Jc0FwcEJ1bmRsZU9uQXBwbGUoKSkgewogICAgIC8vIENyZWF0ZSB0aGUgYXBwIGJ1bmRsZQotICAgIHN0ZDo6c3RyaW5nIG91dHBhdGggPSBndC0+R2V0RGlyZWN0b3J5KGNmZ05hbWUpOwotICAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+Q3JlYXRlQXBwQnVuZGxlKHRoaXMtPlRhcmdldE5hbWVzLk91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwYXRoKTsKKyAgICBzdGQ6OnN0cmluZyBvdXRwYXRoID0gZ3QtPkdldERpcmVjdG9yeShjb25maWcpOworICAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+Q3JlYXRlQXBwQnVuZGxlKHRndE5hbWVzLk91dHB1dCwgb3V0cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBvdXRwdXQgcGF0aAotICAgIHRhcmdldE91dHB1dCA9IGNtU3RyQ2F0KG91dHBhdGgsICcvJywgdGhpcy0+VGFyZ2V0TmFtZXMuT3V0cHV0KTsKKyAgICB0YXJnZXRPdXRwdXQgPSBjbVN0ckNhdChvdXRwYXRoLCAnLycsIHRndE5hbWVzLk91dHB1dCk7CiAgICAgdGFyZ2V0T3V0cHV0ID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRhcmdldE91dHB1dCk7Ci0gICAgdGFyZ2V0T3V0cHV0UmVhbCA9IGNtU3RyQ2F0KG91dHBhdGgsICcvJywgdGhpcy0+VGFyZ2V0TmFtZXMuUmVhbCk7CisgICAgdGFyZ2V0T3V0cHV0UmVhbCA9IGNtU3RyQ2F0KG91dHBhdGgsICcvJywgdGd0TmFtZXMuUmVhbCk7CiAgICAgdGFyZ2V0T3V0cHV0UmVhbCA9IHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0YXJnZXRPdXRwdXRSZWFsKTsKICAgfSBlbHNlIGlmIChndC0+SXNGcmFtZXdvcmtPbkFwcGxlKCkpIHsKICAgICAvLyBDcmVhdGUgdGhlIGxpYnJhcnkgZnJhbWV3b3JrLgotICAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+Q3JlYXRlRnJhbWV3b3JrKHRoaXMtPlRhcmdldE5hbWVzLk91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndC0+R2V0RGlyZWN0b3J5KGNmZ05hbWUpKTsKKworICAgIGNtT1NYQnVuZGxlR2VuZXJhdG9yOjpTa2lwUGFydHMgYnVuZGxlU2tpcFBhcnRzOworICAgIGlmIChnbG9iYWxHZW4tPkdldE5hbWUoKSA9PSAiTmluamEgTXVsdGktQ29uZmlnIikgeworICAgICAgY29uc3QgYXV0byBwb3N0Rml4ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRGaWxlUG9zdGZpeChjb25maWcpOworICAgICAgLy8gU2tpcCBjcmVhdGluZyBJbmZvLnBsaXN0IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zLCBhbmQKKyAgICAgIC8vIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaGFzIGEgcG9zdGZpeC4gVGhlIG5vbi1wb3N0Zml4IGNvbmZpZ3VyYXRpb24KKyAgICAgIC8vIEluZm8ucGxpc3QgY2FuIGJlIHVzZWQgYnkgYWxsIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucy4KKyAgICAgIGlmICghcG9zdEZpeC5lbXB0eSgpKSB7CisgICAgICAgIGJ1bmRsZVNraXBQYXJ0cy5pbmZvUGxpc3QgPSB0cnVlOworICAgICAgfQorICAgIH0KKworICAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+Q3JlYXRlRnJhbWV3b3JrKAorICAgICAgdGd0TmFtZXMuT3V0cHV0LCBndC0+R2V0RGlyZWN0b3J5KGNvbmZpZyksIGNvbmZpZywgYnVuZGxlU2tpcFBhcnRzKTsKICAgfSBlbHNlIGlmIChndC0+SXNDRkJ1bmRsZU9uQXBwbGUoKSkgewogICAgIC8vIENyZWF0ZSB0aGUgY29yZSBmb3VuZGF0aW9uIGJ1bmRsZS4KLSAgICB0aGlzLT5PU1hCdW5kbGVHZW5lcmF0b3ItPkNyZWF0ZUNGQnVuZGxlKHRoaXMtPlRhcmdldE5hbWVzLk91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0LT5HZXREaXJlY3RvcnkoY2ZnTmFtZSkpOworICAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+Q3JlYXRlQ0ZCdW5kbGUodGd0TmFtZXMuT3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3QtPkdldERpcmVjdG9yeShjb25maWcpLCBjb25maWcpOwogICB9CiAKICAgLy8gV3JpdGUgY29tbWVudHMuCi0gIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcih0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSk7CisgIGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OldyaXRlRGl2aWRlcih0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKSk7CiAgIGNvbnN0IGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlID0gZ3QtPkdldFR5cGUoKTsKLSAgdGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkKKyAgdGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZykKICAgICA8PCAiIyBMaW5rIGJ1aWxkIHN0YXRlbWVudHMgZm9yICIgPDwgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGFyZ2V0VHlwZSkKICAgICA8PCAiIHRhcmdldCAiIDw8IHRoaXMtPkdldFRhcmdldE5hbWUoKSA8PCAiXG5cbiI7CiAKLSAgY21OaW5qYUJ1aWxkIGxpbmtCdWlsZCh0aGlzLT5MYW5ndWFnZUxpbmtlclJ1bGUoKSk7CisgIGNtTmluamFCdWlsZCBsaW5rQnVpbGQodGhpcy0+TGFuZ3VhZ2VMaW5rZXJSdWxlKGNvbmZpZykpOwogICBjbU5pbmphVmFycyYgdmFycyA9IGxpbmtCdWlsZC5WYXJpYWJsZXM7CiAKICAgLy8gQ29tcHV0ZSB0aGUgY29tbWVudC4KQEAgLTc0MiwxNyArODM1LDIwIEBACiAKICAgLy8gQ29tcHV0ZSBvdXRwdXRzLgogICBsaW5rQnVpbGQuT3V0cHV0cy5wdXNoX2JhY2sodGFyZ2V0T3V0cHV0UmVhbCk7CisgIGlmIChmaXJzdEZvckNvbmZpZykgeworICAgIGdsb2JhbEdlbi0+R2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0KGNvbmZpZykucHVzaF9iYWNrKHRhcmdldE91dHB1dFJlYWwpOworICB9CiAKLSAgaWYgKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSA9PSAiU3dpZnQiKSB7Ci0gICAgdmFyc1siU1dJRlRfTElCUkFSWV9OQU1FIl0gPSBbdGhpc10oKSAtPiBzdGQ6OnN0cmluZyB7CisgIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSA9PSAiU3dpZnQiKSB7CisgICAgdmFyc1siU1dJRlRfTElCUkFSWV9OQU1FIl0gPSBbdGhpcywgY29uZmlnXSgpIC0+IHN0ZDo6c3RyaW5nIHsKICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpOYW1lcyB0YXJnZXROYW1lcyA9Ci0gICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRMaWJyYXJ5TmFtZXModGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldExpYnJhcnlOYW1lcyhjb25maWcpOwogICAgICAgcmV0dXJuIHRhcmdldE5hbWVzLkJhc2U7CiAgICAgfSgpOwogCiAgICAgdmFyc1siU1dJRlRfTU9EVUxFX05BTUUiXSA9IFtndF0oKSAtPiBzdGQ6OnN0cmluZyB7Ci0gICAgICBpZiAoY29uc3QgY2hhciogbmFtZSA9IGd0LT5HZXRQcm9wZXJ0eSgiU3dpZnRfTU9EVUxFX05BTUUiKSkgewotICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgIGlmIChjbVByb3AgbmFtZSA9IGd0LT5HZXRQcm9wZXJ0eSgiU3dpZnRfTU9EVUxFX05BTUUiKSkgeworICAgICAgICByZXR1cm4gKm5hbWU7CiAgICAgICB9CiAgICAgICByZXR1cm4gZ3QtPkdldE5hbWUoKTsKICAgICB9KCk7CkBAIC03NjAsMTUgKzg1NiwxNSBAQAogICAgIHZhcnNbIlNXSUZUX01PRFVMRSJdID0gW3RoaXNdKGNvbnN0IHN0ZDo6c3RyaW5nJiBtb2R1bGUpIC0+IHN0ZDo6c3RyaW5nIHsKICAgICAgIHN0ZDo6c3RyaW5nIGRpcmVjdG9yeSA9CiAgICAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKLSAgICAgIGlmIChjb25zdCBjaGFyKiBwcm9wID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFByb3BlcnR5KAorICAgICAgaWYgKGNtUHJvcCBwcm9wID0gdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFByb3BlcnR5KAogICAgICAgICAgICAgIlN3aWZ0X01PRFVMRV9ESVJFQ1RPUlkiKSkgewotICAgICAgICBkaXJlY3RvcnkgPSBwcm9wOworICAgICAgICBkaXJlY3RvcnkgPSAqcHJvcDsKICAgICAgIH0KIAogICAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IG1vZHVsZSArICIuc3dpZnRtb2R1bGUiOwotICAgICAgaWYgKGNvbnN0IGNoYXIqIHByb3AgPQorICAgICAgaWYgKGNtUHJvcCBwcm9wID0KICAgICAgICAgICAgIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLT5HZXRQcm9wZXJ0eSgiU3dpZnRfTU9EVUxFIikpIHsKLSAgICAgICAgbmFtZSA9IHByb3A7CisgICAgICAgIG5hbWUgPSAqcHJvcDsKICAgICAgIH0KIAogICAgICAgcmV0dXJuIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKQEAgLTc3NiwxOCArODcyLDE3IEBACiAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgfSh2YXJzWyJTV0lGVF9NT0RVTEVfTkFNRSJdKTsKIAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1hcCA9IGNtU3RyQ2F0KGd0LT5HZXRTdXBwb3J0RGlyZWN0b3J5KCksICcvJywgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJywgIm91dHB1dC1maWxlLW1hcC5qc29uIik7CiAgICAgdmFyc1siU1dJRlRfT1VUUFVUX0ZJTEVfTUFQIl0gPQogICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAotICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoZ3QtPkdldFN1cHBvcnREaXJlY3RvcnkoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL291dHB1dC1maWxlLW1hcC5qc29uIiksCi0gICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChtYXApLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogCi0gICAgdmFyc1siU1dJRlRfU09VUkNFUyJdID0gW3RoaXNdKCkgLT4gc3RkOjpzdHJpbmcgeworICAgIHZhcnNbIlNXSUZUX1NPVVJDRVMiXSA9IFt0aGlzLCBjb25maWddKCkgLT4gc3RkOjpzdHJpbmcgewogICAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gc291cmNlczsKICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIG9zczsKIAotICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldE9iamVjdFNvdXJjZXMoc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0T2JqZWN0U291cmNlcyhzb3VyY2VzLCBjb25maWcpOwogICAgICAgY21Mb2NhbEdlbmVyYXRvciBjb25zdCogTG9jYWxHZW4gPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpOwogICAgICAgZm9yIChjb25zdCBhdXRvJiBzb3VyY2UgOiBzb3VyY2VzKSB7CiAgICAgICAgIG9zcyA8PCAiICIKQEAgLTgwMSwyNyArODk2LDI4IEBACiAgICAgLy8gU2luY2Ugd2UgZG8gbm90IHBlcmZvcm0gb2JqZWN0IGJ1aWxkcywgY29tcHV0ZSB0aGUKICAgICAvLyBkZWZpbmVzL2ZsYWdzL2luY2x1ZGVzIGhlcmUgc28gdGhhdCB0aGV5IGNhbiBiZSBwYXNzZWQgYWxvbmcKICAgICAvLyBhcHByb3ByaWF0ZWx5LgotICAgIHZhcnNbIkRFRklORVMiXSA9IHRoaXMtPkdldERlZmluZXMoIlN3aWZ0Iik7Ci0gICAgdmFyc1siRkxBR1MiXSA9IHRoaXMtPkdldEZsYWdzKCJTd2lmdCIpOwotICAgIHZhcnNbIklOQ0xVREVTIl0gPSB0aGlzLT5HZXRJbmNsdWRlcygiU3dpZnQiKTsKKyAgICB2YXJzWyJERUZJTkVTIl0gPSB0aGlzLT5HZXREZWZpbmVzKCJTd2lmdCIsIGNvbmZpZyk7CisgICAgdmFyc1siRkxBR1MiXSA9IHRoaXMtPkdldEZsYWdzKCJTd2lmdCIsIGNvbmZpZyk7CisgICAgdmFyc1siSU5DTFVERVMiXSA9IHRoaXMtPkdldEluY2x1ZGVzKCJTd2lmdCIsIGNvbmZpZyk7CiAgIH0KIAogICAvLyBDb21wdXRlIHNwZWNpZmljIGxpYnJhcmllcyB0byBsaW5rIHdpdGguCi0gIGlmICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UgPT0gIlN3aWZ0IikgeworICBpZiAodGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZykgPT0gIlN3aWZ0IikgewogICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IHNvdXJjZXM7Ci0gICAgZ3QtPkdldE9iamVjdFNvdXJjZXMoc291cmNlcywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICBndC0+R2V0T2JqZWN0U291cmNlcyhzb3VyY2VzLCBjb25maWcpOwogICAgIGZvciAoY29uc3QgYXV0byYgc291cmNlIDogc291cmNlcykgewogICAgICAgbGlua0J1aWxkLk91dHB1dHMucHVzaF9iYWNrKAotICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0T2JqZWN0RmlsZVBhdGgoc291cmNlKSkpOworICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0T2JqZWN0RmlsZVBhdGgoc291cmNlLCBjb25maWcpKSk7CiAgICAgICBsaW5rQnVpbGQuRXhwbGljaXREZXBzLnB1c2hfYmFjaygKICAgICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldFNvdXJjZUZpbGVQYXRoKHNvdXJjZSkpKTsKICAgICB9CiAKICAgICBsaW5rQnVpbGQuT3V0cHV0cy5wdXNoX2JhY2sodmFyc1siU1dJRlRfTU9EVUxFIl0pOwogICB9IGVsc2UgewotICAgIGxpbmtCdWlsZC5FeHBsaWNpdERlcHMgPSB0aGlzLT5HZXRPYmplY3RzKCk7CisgICAgbGlua0J1aWxkLkV4cGxpY2l0RGVwcyA9IHRoaXMtPkdldE9iamVjdHMoY29uZmlnKTsKICAgfQotICBsaW5rQnVpbGQuSW1wbGljaXREZXBzID0gdGhpcy0+Q29tcHV0ZUxpbmtEZXBzKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSk7CisgIGxpbmtCdWlsZC5JbXBsaWNpdERlcHMgPQorICAgIHRoaXMtPkNvbXB1dGVMaW5rRGVwcyh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgY29uZmlnKTsKIAogICBpZiAoIXRoaXMtPkRldmljZUxpbmtPYmplY3QuZW1wdHkoKSkgewogICAgIGxpbmtCdWlsZC5FeHBsaWNpdERlcHMucHVzaF9iYWNrKHRoaXMtPkRldmljZUxpbmtPYmplY3QpOwpAQCAtODMxLDM5ICs5MjcsNDIgQEAKICAgc3RkOjpzdHJpbmcgbGlua1BhdGg7CiAKICAgc3RkOjpzdHJpbmcgY3JlYXRlUnVsZSA9Ci0gICAgZ3QtPkdldENyZWF0ZVJ1bGVWYXJpYWJsZSh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgZ3QtPkdldENyZWF0ZVJ1bGVWYXJpYWJsZSh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwgY29uZmlnKTsKICAgYm9vbCB1c2VXYXRjb21RdW90ZSA9IG1mLT5Jc09uKGNyZWF0ZVJ1bGUgKyAiX1VTRV9XQVRDT01fUVVPVEUiKTsKICAgY21Mb2NhbE5pbmphR2VuZXJhdG9yJiBsb2NhbEdlbiA9ICp0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpOwogCiAgIHZhcnNbIlRBUkdFVF9GSUxFIl0gPQogICAgIGxvY2FsR2VuLkNvbnZlcnRUb091dHB1dEZvcm1hdCh0YXJnZXRPdXRwdXRSZWFsLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogCi0gIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIoCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUxpbmtMaW5lQ29tcHV0ZXI+IGxpbmtMaW5lQ29tcHV0ZXIgPQogICAgIGdsb2JhbEdlbi0+Q3JlYXRlTGlua0xpbmVDb21wdXRlcigKICAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCksCi0gICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5HZXRTdGF0ZVNuYXBzaG90KCkuR2V0RGlyZWN0b3J5KCkpKTsKKyAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSk7CiAgIGxpbmtMaW5lQ29tcHV0ZXItPlNldFVzZVdhdGNvbVF1b3RlKHVzZVdhdGNvbVF1b3RlKTsKKyAgbGlua0xpbmVDb21wdXRlci0+U2V0VXNlTmluamFNdWx0aShnbG9iYWxHZW4tPklzTXVsdGlDb25maWcoKSk7CiAKLSAgbG9jYWxHZW4uR2V0VGFyZ2V0RmxhZ3MobGlua0xpbmVDb21wdXRlci5nZXQoKSwgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLAorICBsb2NhbEdlbi5HZXRUYXJnZXRGbGFncyhsaW5rTGluZUNvbXB1dGVyLmdldCgpLCBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnNbIkxJTktfTElCUkFSSUVTIl0sIHZhcnNbIkZMQUdTIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnNbIkxJTktfRkxBR1MiXSwgZnJhbWV3b3JrUGF0aCwgbGlua1BhdGgsIGd0KTsKIAogICAvLyBBZGQgT1MgWCB2ZXJzaW9uIGZsYWdzLCBpZiBhbnkuCiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZKSB7Ci0gICAgdGhpcy0+QXBwZW5kT1NYVmVyRmxhZyh2YXJzWyJMSU5LX0ZMQUdTIl0sIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT01QQVRJQklMSVRZIiwgdHJ1ZSk7Ci0gICAgdGhpcy0+QXBwZW5kT1NYVmVyRmxhZyh2YXJzWyJMSU5LX0ZMQUdTIl0sIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJDVVJSRU5UIiwgZmFsc2UpOworICAgIHRoaXMtPkFwcGVuZE9TWFZlckZsYWcodmFyc1siTElOS19GTEFHUyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksICJDT01QQVRJQklMSVRZIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgIHRoaXMtPkFwcGVuZE9TWFZlckZsYWcodmFyc1siTElOS19GTEFHUyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksICJDVVJSRU5UIiwgZmFsc2UpOwogICB9CiAKICAgdGhpcy0+YWRkUG9vbE5pbmphVmFyaWFibGUoIkpPQl9QT09MX0xJTksiLCBndCwgdmFycyk7CiAKLSAgdGhpcy0+QWRkTW9kdWxlRGVmaW5pdGlvbkZsYWcobGlua0xpbmVDb21wdXRlci5nZXQoKSwgdmFyc1siTElOS19GTEFHUyJdKTsKLSAgdmFyc1siTElOS19GTEFHUyJdID0KLSAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVMaXRlcmFsKHZhcnNbIkxJTktfRkxBR1MiXSk7CisgIHRoaXMtPkFkZE1vZHVsZURlZmluaXRpb25GbGFnKGxpbmtMaW5lQ29tcHV0ZXIuZ2V0KCksIHZhcnNbIkxJTktfRkxBR1MiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKKyAgdmFyc1siTElOS19GTEFHUyJdID0gZ2xvYmFsR2VuLT5FbmNvZGVMaXRlcmFsKHZhcnNbIkxJTktfRkxBR1MiXSk7CiAKLSAgdmFyc1siTUFOSUZFU1RTIl0gPSB0aGlzLT5HZXRNYW5pZmVzdHMoKTsKKyAgdmFyc1siTUFOSUZFU1RTIl0gPSB0aGlzLT5HZXRNYW5pZmVzdHMoY29uZmlnKTsKKyAgdmFyc1siQUlYX0VYUE9SVFMiXSA9IHRoaXMtPkdldEFJWEV4cG9ydHMoY29uZmlnKTsKIAogICB2YXJzWyJMSU5LX1BBVEgiXSA9IGZyYW1ld29ya1BhdGggKyBsaW5rUGF0aDsKICAgc3RkOjpzdHJpbmcgbHd5dUZsYWdzOwpAQCAtODc2LDIzICs5NzUsMjYgQEAKICAgLy8gY29kZSBiZXR3ZWVuIHRoZSBNYWtlZmlsZSBleGVjdXRhYmxlIGFuZCBsaWJyYXJ5IGdlbmVyYXRvcnMuCiAgIGlmICh0YXJnZXRUeXBlID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgewogICAgIHN0ZDo6c3RyaW5nIHQgPSB2YXJzWyJGTEFHUyJdOwotICAgIGxvY2FsR2VuLkFkZEFyY2hpdGVjdHVyZUZsYWdzKHQsIGd0LCBUYXJnZXRMaW5rTGFuZ3VhZ2UsIGNmZ05hbWUpOworICAgIGxvY2FsR2VuLkFkZEFyY2hpdGVjdHVyZUZsYWdzKHQsIGd0LCB0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogICAgIHQgKz0gbHd5dUZsYWdzOwogICAgIHZhcnNbIkZMQUdTIl0gPSB0OwogICB9IGVsc2UgewogICAgIHN0ZDo6c3RyaW5nIHQgPSB2YXJzWyJBUkNIX0ZMQUdTIl07Ci0gICAgbG9jYWxHZW4uQWRkQXJjaGl0ZWN0dXJlRmxhZ3ModCwgZ3QsIFRhcmdldExpbmtMYW5ndWFnZSwgY2ZnTmFtZSk7CisgICAgbG9jYWxHZW4uQWRkQXJjaGl0ZWN0dXJlRmxhZ3ModCwgZ3QsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgICAgdmFyc1siQVJDSF9GTEFHUyJdID0gdDsKICAgICB0LmNsZWFyKCk7CiAgICAgdCArPSBsd3l1RmxhZ3M7Ci0gICAgbG9jYWxHZW4uQWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcodCwgZ3QsIFRhcmdldExpbmtMYW5ndWFnZSwgY2ZnTmFtZSk7CisgICAgbG9jYWxHZW4uQWRkTGFuZ3VhZ2VGbGFnc0ZvckxpbmtpbmcoCisgICAgICB0LCBndCwgdGhpcy0+VGFyZ2V0TGlua0xhbmd1YWdlKGNvbmZpZyksIGNvbmZpZyk7CiAgICAgdmFyc1siTEFOR1VBR0VfQ09NUElMRV9GTEFHUyJdID0gdDsKICAgfQotICBpZiAoZ3QtPkhhc1NPTmFtZShjZmdOYW1lKSkgewotICAgIHZhcnNbIlNPTkFNRV9GTEFHIl0gPSBtZi0+R2V0U09OYW1lRmxhZyh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UpOwotICAgIHZhcnNbIlNPTkFNRSJdID0gdGhpcy0+VGFyZ2V0TmFtZXMuU2hhcmVkT2JqZWN0OworICBpZiAoZ3QtPkhhc1NPTmFtZShjb25maWcpKSB7CisgICAgdmFyc1siU09OQU1FX0ZMQUciXSA9IG1mLT5HZXRTT05hbWVGbGFnKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpKTsKKyAgICB2YXJzWyJTT05BTUUiXSA9IHRndE5hbWVzLlNoYXJlZE9iamVjdDsKICAgICBpZiAodGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBpbnN0YWxsX2RpciA9IGd0LT5HZXRJbnN0YWxsTmFtZURpckZvckJ1aWxkVHJlZShjZmdOYW1lKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGluc3RhbGxfZGlyID0gZ3QtPkdldEluc3RhbGxOYW1lRGlyRm9yQnVpbGRUcmVlKGNvbmZpZyk7CiAgICAgICBpZiAoIWluc3RhbGxfZGlyLmVtcHR5KCkpIHsKICAgICAgICAgdmFyc1siSU5TVEFMTE5BTUVfRElSIl0gPSBsb2NhbEdlbi5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCiAgICAgICAgICAgaW5zdGFsbF9kaXIsIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CkBAIC05MDIsNDEgKzEwMDQsNDYgQEAKIAogICBjbU5pbmphRGVwcyBieXByb2R1Y3RzOwogCi0gIGlmICghdGhpcy0+VGFyZ2V0TmFtZXMuSW1wb3J0TGlicmFyeS5lbXB0eSgpKSB7CisgIGlmICghdGd0TmFtZXMuSW1wb3J0TGlicmFyeS5lbXB0eSgpKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgaW1wTGliUGF0aCA9IGxvY2FsR2VuLkNvbnZlcnRUb091dHB1dEZvcm1hdCgKICAgICAgIHRhcmdldE91dHB1dEltcGxpYiwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICB2YXJzWyJUQVJHRVRfSU1QTElCIl0gPSBpbXBMaWJQYXRoOwogICAgIEVuc3VyZVBhcmVudERpcmVjdG9yeUV4aXN0cyhpbXBMaWJQYXRoKTsKLSAgICBpZiAoZ3QtPkhhc0ltcG9ydExpYnJhcnkoY2ZnTmFtZSkpIHsKKyAgICBpZiAoZ3QtPkhhc0ltcG9ydExpYnJhcnkoY29uZmlnKSkgewogICAgICAgYnlwcm9kdWN0cy5wdXNoX2JhY2sodGFyZ2V0T3V0cHV0SW1wbGliKTsKKyAgICAgIGlmIChmaXJzdEZvckNvbmZpZykgeworICAgICAgICBnbG9iYWxHZW4tPkdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldChjb25maWcpLnB1c2hfYmFjaygKKyAgICAgICAgICB0YXJnZXRPdXRwdXRJbXBsaWIpOworICAgICAgfQogICAgIH0KICAgfQogCi0gIGlmICghdGhpcy0+U2V0TXN2Y1RhcmdldFBkYlZhcmlhYmxlKHZhcnMpKSB7CisgIGlmICghdGhpcy0+U2V0TXN2Y1RhcmdldFBkYlZhcmlhYmxlKHZhcnMsIGNvbmZpZykpIHsKICAgICAvLyBJdCBpcyBjb21tb24gdG8gcGxhY2UgZGVidWcgc3ltYm9scyBhdCBhIHNwZWNpZmljIHBsYWNlLAogICAgIC8vIHNvIHdlIG5lZWQgYSBwbGFpbiB0YXJnZXQgbmFtZSBpbiB0aGUgcnVsZSBhdmFpbGFibGUuCiAgICAgc3RkOjpzdHJpbmcgcHJlZml4OwogICAgIHN0ZDo6c3RyaW5nIGJhc2U7CiAgICAgc3RkOjpzdHJpbmcgc3VmZml4OwotICAgIGd0LT5HZXRGdWxsTmFtZUNvbXBvbmVudHMocHJlZml4LCBiYXNlLCBzdWZmaXgpOworICAgIGd0LT5HZXRGdWxsTmFtZUNvbXBvbmVudHMocHJlZml4LCBiYXNlLCBzdWZmaXgsIGNvbmZpZyk7CiAgICAgc3RkOjpzdHJpbmcgZGJnX3N1ZmZpeCA9ICIuZGJnIjsKICAgICAvLyBUT0RPOiBXaGVyZSB0byBkb2N1bWVudD8KLSAgICBpZiAobWYtPkdldERlZmluaXRpb24oIkNNQUtFX0RFQlVHX1NZTUJPTF9TVUZGSVgiKSkgewotICAgICAgZGJnX3N1ZmZpeCA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ERUJVR19TWU1CT0xfU1VGRklYIik7CisgICAgaWYgKGF1dG8gZCA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9ERUJVR19TWU1CT0xfU1VGRklYIikpIHsKKyAgICAgIGRiZ19zdWZmaXggPSBkOwogICAgIH0KICAgICB2YXJzWyJUQVJHRVRfUERCIl0gPSBiYXNlICsgc3VmZml4ICsgZGJnX3N1ZmZpeDsKICAgfQogCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIG9ialBhdGggPSBndC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpOworICBjb25zdCBzdGQ6OnN0cmluZyBvYmpQYXRoID0KKyAgICBjbVN0ckNhdChndC0+R2V0U3VwcG9ydERpcmVjdG9yeSgpLCBnbG9iYWxHZW4tPkNvbmZpZ0RpcmVjdG9yeShjb25maWcpKTsKICAgdmFyc1siT0JKRUNUX0RJUiJdID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAogICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChvYmpQYXRoKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgRW5zdXJlRGlyZWN0b3J5RXhpc3RzKG9ialBhdGgpOwogCisgIHN0ZDo6c3RyaW5nJiBsaW5rTGlicmFyaWVzID0gdmFyc1siTElOS19MSUJSQVJJRVMiXTsKKyAgc3RkOjpzdHJpbmcmIGxpbmtfcGF0aCA9IHZhcnNbIkxJTktfUEFUSCJdOwogICBpZiAoZ2xvYmFsR2VuLT5Jc0dDQ09uV2luZG93cygpKSB7CiAgICAgLy8gYXIuZXhlIGNhbid0IGhhbmRsZSBiYWNrc2xhc2hlcyBpbiByc3AgZmlsZXMgKGltcGxpY2l0bHkgdXNlZCBieSBnY2MpCi0gICAgc3RkOjpzdHJpbmcmIGxpbmtMaWJyYXJpZXMgPSB2YXJzWyJMSU5LX0xJQlJBUklFUyJdOwogICAgIHN0ZDo6cmVwbGFjZShsaW5rTGlicmFyaWVzLmJlZ2luKCksIGxpbmtMaWJyYXJpZXMuZW5kKCksICdcXCcsICcvJyk7Ci0gICAgc3RkOjpzdHJpbmcmIGxpbmtfcGF0aCA9IHZhcnNbIkxJTktfUEFUSCJdOwogICAgIHN0ZDo6cmVwbGFjZShsaW5rX3BhdGguYmVnaW4oKSwgbGlua19wYXRoLmVuZCgpLCAnXFwnLCAnLycpOwogICB9CiAKQEAgLTk0NywyMyArMTA1NCwzMCBAQAogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcmVMaW5rQ21kTGluZXM7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwb3N0QnVpbGRDbWRMaW5lczsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBjbWRMaW5lTGlzdHNbM10gPSB7ICZwcmVMaW5rQ21kTGluZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJlTGlua0NtZExpbmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvc3RCdWlsZENtZExpbmVzIH07CiAKLSAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSAzOyArK2kpIHsKLSAgICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCYgY2MgOiAqY21kTGlzdHNbaV0pIHsKLSAgICAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coY2MsIGNmZ05hbWUsIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCkpOwotICAgICAgbG9jYWxHZW4uQXBwZW5kQ3VzdG9tQ29tbWFuZExpbmVzKGNjZywgKmNtZExpbmVMaXN0c1tpXSk7Ci0gICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNjQnlwcm9kdWN0cyA9IGNjZy5HZXRCeXByb2R1Y3RzKCk7Ci0gICAgICBzdGQ6OnRyYW5zZm9ybShjY0J5cHJvZHVjdHMuYmVnaW4oKSwgY2NCeXByb2R1Y3RzLmVuZCgpLAotICAgICAgICAgICAgICAgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKGJ5cHJvZHVjdHMpLCBNYXBUb05pbmphUGF0aCgpKTsKKyAgaWYgKGNvbmZpZyA9PSBmaWxlQ29uZmlnKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBjbWRMaW5lTGlzdHNbM10gPSB7ICZwcmVMaW5rQ21kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmVMaW5rQ21kTGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb3N0QnVpbGRDbWRMaW5lcyB9OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSAzOyArK2kpIHsKKyAgICAgIGZvciAoY21DdXN0b21Db21tYW5kIGNvbnN0JiBjYyA6ICpjbWRMaXN0c1tpXSkgeworICAgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNjLCBjb25maWcsIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCkpOworICAgICAgICBsb2NhbEdlbi5BcHBlbmRDdXN0b21Db21tYW5kTGluZXMoY2NnLCAqY21kTGluZUxpc3RzW2ldKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjY0J5cHJvZHVjdHMgPSBjY2cuR2V0Qnlwcm9kdWN0cygpOworICAgICAgICBzdGQ6OnRyYW5zZm9ybShjY0J5cHJvZHVjdHMuYmVnaW4oKSwgY2NCeXByb2R1Y3RzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmJhY2tfaW5zZXJ0ZXIoYnlwcm9kdWN0cyksIE1hcFRvTmluamFQYXRoKCkpOworICAgICAgICBzdGQ6OnRyYW5zZm9ybSgKKyAgICAgICAgICBjY0J5cHJvZHVjdHMuYmVnaW4oKSwgY2NCeXByb2R1Y3RzLmVuZCgpLAorICAgICAgICAgIHN0ZDo6YmFja19pbnNlcnRlcihnbG9iYWxHZW4tPkdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldCgpKSwKKyAgICAgICAgICBNYXBUb05pbmphUGF0aCgpKTsKKyAgICAgIH0KICAgICB9CiAgIH0KIAogICAvLyBtYXliZSBjcmVhdGUgLmRlZiBmaWxlIGZyb20gbGlzdCBvZiBvYmplY3RzCiAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpNb2R1bGVEZWZpbml0aW9uSW5mbyBjb25zdCogbWRpID0KLSAgICBndC0+R2V0TW9kdWxlRGVmaW5pdGlvbkluZm8odGhpcy0+R2V0Q29uZmlnTmFtZSgpKTsKKyAgICBndC0+R2V0TW9kdWxlRGVmaW5pdGlvbkluZm8oY29uZmlnKTsKICAgaWYgKG1kaSAmJiBtZGktPkRlZkZpbGVHZW5lcmF0ZWQpIHsKICAgICBzdGQ6OnN0cmluZyBjbWFrZUNvbW1hbmQgPQogICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KApAQCAtOTc4LDcgKzEwOTIsNyBAQAogICAgICAgb2JqX2xpc3RfZmlsZSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKIAogICAgIGNvbnN0IGNoYXIqIG5tX2V4ZWN1dGFibGUgPSBHZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKCJDTUFLRV9OTSIpOwotICAgIGlmIChubV9leGVjdXRhYmxlICYmICpubV9leGVjdXRhYmxlKSB7CisgICAgaWYgKGNtTm9uZW1wdHkobm1fZXhlY3V0YWJsZSkpIHsKICAgICAgIGNtZCArPSAiIC0tbm09IjsKICAgICAgIGNtZCArPSB0aGlzLT5Mb2NhbENvbW1vbkdlbmVyYXRvci0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KAogICAgICAgICBubV9leGVjdXRhYmxlLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwpAQCAtOTg5LDcgKzExMDMsNyBAQAogICAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBmb3V0KG9ial9saXN0X2ZpbGUpOwogCiAgICAgaWYgKG1kaS0+V2luZG93c0V4cG9ydEFsbFN5bWJvbHMpIHsKLSAgICAgIGNtTmluamFEZXBzIG9ianMgPSB0aGlzLT5HZXRPYmplY3RzKCk7CisgICAgICBjbU5pbmphRGVwcyBvYmpzID0gdGhpcy0+R2V0T2JqZWN0cyhjb25maWcpOwogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgb2JqIDogb2JqcykgewogICAgICAgICBpZiAoY21IYXNMaXRlcmFsU3VmZml4KG9iaiwgIi5vYmoiKSkgewogICAgICAgICAgIGZvdXQgPDwgb2JqIDw8ICJcbiI7CkBAIC0xMDI0LDcgKzExMzgsOCBAQAogICAgIHN5bWxpbmtWYXJzWyJQT1NUX0JVSUxEIl0gPSBwb3N0QnVpbGRDbWRMaW5lOwogICB9CiAKLSAgc3RkOjpzdHJpbmcgY21ha2VWYXJMYW5nID0gY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSk7CisgIHN0ZDo6c3RyaW5nIGNtYWtlVmFyTGFuZyA9CisgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpKTsKIAogICAvLyBidWlsZCByZXNwb25zZSBmaWxlIG5hbWUKICAgc3RkOjpzdHJpbmcgY21ha2VMaW5rVmFyID0gY21ha2VWYXJMYW5nICsgIl9SRVNQT05TRV9GSUxFX0xJTktfRkxBRyI7CkBAIC0xMDMyLDggKzExNDcsOCBAQAogICBjb25zdCBjaGFyKiBmbGFnID0gR2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbihjbWFrZUxpbmtWYXIpOwogCiAgIGJvb2wgY29uc3QgbGFuZ19zdXBwb3J0c19yZXNwb25zZSA9Ci0gICAgISh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UgPT0gIlJDIiB8fAotICAgICAgKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZSA9PSAiQ1VEQSIgJiYgIWZsYWcpKTsKKyAgICAhKHRoaXMtPlRhcmdldExpbmtMYW5ndWFnZShjb25maWcpID09ICJSQyIgfHwKKyAgICAgICh0aGlzLT5UYXJnZXRMaW5rTGFuZ3VhZ2UoY29uZmlnKSA9PSAiQ1VEQSIgJiYgIWZsYWcpKTsKICAgaW50IGNvbW1hbmRMaW5lTGVuZ3RoTGltaXQgPSAtMTsKICAgaWYgKCFsYW5nX3N1cHBvcnRzX3Jlc3BvbnNlIHx8ICF0aGlzLT5Gb3JjZVJlc3BvbnNlRmlsZSgpKSB7CiAgICAgY29tbWFuZExpbmVMZW5ndGhMaW1pdCA9CkBAIC0xMDQxLDIyICsxMTU2LDI0IEBACiAgICAgICBnbG9iYWxHZW4tPkdldFJ1bGVDbWRMZW5ndGgobGlua0J1aWxkLlJ1bGUpOwogICB9CiAKLSAgbGlua0J1aWxkLlJzcEZpbGUgPSB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoc3RkOjpzdHJpbmcoIkNNYWtlRmlsZXMvIikgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndC0+R2V0TmFtZSgpICsgIi5yc3AiKTsKKyAgbGlua0J1aWxkLlJzcEZpbGUgPSB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoCisgICAgY21TdHJDYXQoIkNNYWtlRmlsZXMvIiwgZ3QtPkdldE5hbWUoKSwKKyAgICAgICAgICAgICBnbG9iYWxHZW4tPklzTXVsdGlDb25maWcoKSA/IGNtU3RyQ2F0KCcuJywgY29uZmlnKSA6ICIiLCAiLnJzcCIpKTsKIAogICAvLyBHYXRoZXIgb3JkZXItb25seSBkZXBlbmRlbmNpZXMuCi0gIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHMoZ3QsIGxpbmtCdWlsZC5PcmRlck9ubHlEZXBzKTsKKyAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+QXBwZW5kVGFyZ2V0RGVwZW5kcygKKyAgICBndCwgbGlua0J1aWxkLk9yZGVyT25seURlcHMsIGNvbmZpZywgZmlsZUNvbmZpZywgRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CiAKICAgLy8gQWRkIG9yZGVyLW9ubHkgZGVwZW5kZW5jaWVzIG9uIHZlcnNpb25pbmcgc3ltbGlua3Mgb2Ygc2hhcmVkIGxpYnMgd2UgbGluay4KICAgaWYgKCF0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPklzRExMUGxhdGZvcm0oKSkgewogICAgIGlmIChjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb24qIGNsaSA9Ci0gICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rSW5mb3JtYXRpb24odGhpcy0+R2V0Q29uZmlnTmFtZSgpKSkgeworICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKGNvbmZpZykpIHsKICAgICAgIGZvciAoYXV0byBjb25zdCYgaXRlbSA6IGNsaS0+R2V0SXRlbXMoKSkgewogICAgICAgICBpZiAoaXRlbS5UYXJnZXQgJiYKICAgICAgICAgICAgIGl0ZW0uVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSAmJgogICAgICAgICAgICAgIWl0ZW0uVGFyZ2V0LT5Jc0ZyYW1ld29ya09uQXBwbGUoKSkgewotICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsaWIgPSB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoCi0gICAgICAgICAgICBpdGVtLlRhcmdldC0+R2V0RnVsbFBhdGgodGhpcy0+R2V0Q29uZmlnTmFtZSgpKSk7CisgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxpYiA9CisgICAgICAgICAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoaXRlbS5UYXJnZXQtPkdldEZ1bGxQYXRoKGNvbmZpZykpOwogICAgICAgICAgIGlmIChzdGQ6OmZpbmQobGlua0J1aWxkLkltcGxpY2l0RGVwcy5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1aWxkLkltcGxpY2l0RGVwcy5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxpYikgPT0gbGlua0J1aWxkLkltcGxpY2l0RGVwcy5lbmQoKSkgewpAQCAtMTA3NywyNCArMTE5NCwyNyBAQAogCiAgIC8vIFdyaXRlIHRoZSBidWlsZCBzdGF0ZW1lbnQgZm9yIHRoaXMgdGFyZ2V0LgogICBib29sIHVzZWRSZXNwb25zZUZpbGUgPSBmYWxzZTsKLSAgZ2xvYmFsR2VuLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBsaW5rQnVpbGQsCisgIGdsb2JhbEdlbi0+V3JpdGVCdWlsZCh0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKSwgbGlua0J1aWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZExpbmVMZW5ndGhMaW1pdCwgJnVzZWRSZXNwb25zZUZpbGUpOwotICB0aGlzLT5Xcml0ZUxpbmtSdWxlKHVzZWRSZXNwb25zZUZpbGUpOworICB0aGlzLT5Xcml0ZUxpbmtSdWxlKHVzZWRSZXNwb25zZUZpbGUsIGNvbmZpZyk7CiAKICAgaWYgKHN5bWxpbmtOZWVkZWQpIHsKICAgICBpZiAodGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpIHsKICAgICAgIGNtTmluamFCdWlsZCBidWlsZCgiQ01BS0VfU1lNTElOS19FWEVDVVRBQkxFIik7CiAgICAgICBidWlsZC5Db21tZW50ID0gIkNyZWF0ZSBleGVjdXRhYmxlIHN5bWxpbmsgIiArIHRhcmdldE91dHB1dDsKICAgICAgIGJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKHRhcmdldE91dHB1dCk7CisgICAgICBpZiAoZmlyc3RGb3JDb25maWcpIHsKKyAgICAgICAgZ2xvYmFsR2VuLT5HZXRCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQoY29uZmlnKS5wdXNoX2JhY2sodGFyZ2V0T3V0cHV0KTsKKyAgICAgIH0KICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2sodGFyZ2V0T3V0cHV0UmVhbCk7CiAgICAgICBidWlsZC5WYXJpYWJsZXMgPSBzdGQ6Om1vdmUoc3ltbGlua1ZhcnMpOwotICAgICAgZ2xvYmFsR2VuLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBidWlsZCk7CisgICAgICBnbG9iYWxHZW4tPldyaXRlQnVpbGQodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZyksIGJ1aWxkKTsKICAgICB9IGVsc2UgewogICAgICAgY21OaW5qYUJ1aWxkIGJ1aWxkKCJDTUFLRV9TWU1MSU5LX0xJQlJBUlkiKTsKICAgICAgIGJ1aWxkLkNvbW1lbnQgPSAiQ3JlYXRlIGxpYnJhcnkgc3ltbGluayAiICsgdGFyZ2V0T3V0cHV0OwogCiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCBzb05hbWUgPSB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgoCi0gICAgICAgIHRoaXMtPkdldFRhcmdldEZpbGVQYXRoKHRoaXMtPlRhcmdldE5hbWVzLlNoYXJlZE9iamVjdCkpOworICAgICAgICB0aGlzLT5HZXRUYXJnZXRGaWxlUGF0aCh0Z3ROYW1lcy5TaGFyZWRPYmplY3QsIGNvbmZpZykpOwogICAgICAgLy8gSWYgb25lIGxpbmsgaGFzIHRvIGJlIGNyZWF0ZWQuCiAgICAgICBpZiAodGFyZ2V0T3V0cHV0UmVhbCA9PSBzb05hbWUgfHwgdGFyZ2V0T3V0cHV0ID09IHNvTmFtZSkgewogICAgICAgICBzeW1saW5rVmFyc1siU09OQU1FIl0gPQpAQCAtMTEwMywzMyArMTIyMyw1OCBAQAogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3ltbGlua1ZhcnNbIlNPTkFNRSJdLmNsZWFyKCk7CiAgICAgICAgIGJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKHNvTmFtZSk7CisgICAgICAgIGlmIChmaXJzdEZvckNvbmZpZykgeworICAgICAgICAgIGdsb2JhbEdlbi0+R2V0Qnlwcm9kdWN0c0ZvckNsZWFuVGFyZ2V0KGNvbmZpZykucHVzaF9iYWNrKHNvTmFtZSk7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKHRhcmdldE91dHB1dCk7CisgICAgICBpZiAoZmlyc3RGb3JDb25maWcpIHsKKyAgICAgICAgZ2xvYmFsR2VuLT5HZXRCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQoY29uZmlnKS5wdXNoX2JhY2sodGFyZ2V0T3V0cHV0KTsKKyAgICAgIH0KICAgICAgIGJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2sodGFyZ2V0T3V0cHV0UmVhbCk7CiAgICAgICBidWlsZC5WYXJpYWJsZXMgPSBzdGQ6Om1vdmUoc3ltbGlua1ZhcnMpOwogCi0gICAgICBnbG9iYWxHZW4tPldyaXRlQnVpbGQodGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCksIGJ1aWxkKTsKKyAgICAgIGdsb2JhbEdlbi0+V3JpdGVCdWlsZCh0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKSwgYnVpbGQpOwogICAgIH0KICAgfQogCiAgIC8vIEFkZCBhbGlhc2VzIGZvciB0aGUgZmlsZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUuCi0gIGdsb2JhbEdlbi0+QWRkVGFyZ2V0QWxpYXModGhpcy0+VGFyZ2V0TmFtZXMuT3V0cHV0LCBndCk7Ci0gIGdsb2JhbEdlbi0+QWRkVGFyZ2V0QWxpYXModGhpcy0+R2V0VGFyZ2V0TmFtZSgpLCBndCk7CisgIGdsb2JhbEdlbi0+QWRkVGFyZ2V0QWxpYXModGd0TmFtZXMuT3V0cHV0LCBndCwgY29uZmlnKTsKKyAgZ2xvYmFsR2VuLT5BZGRUYXJnZXRBbGlhcyh0aGlzLT5HZXRUYXJnZXROYW1lKCksIGd0LCBjb25maWcpOwogfQogCi12b2lkIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OldyaXRlT2JqZWN0TGliU3RhdGVtZW50KCkKK3ZvaWQgY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvcjo6V3JpdGVPYmplY3RMaWJTdGF0ZW1lbnQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIC8vIFdyaXRlIGEgcGhvbnkgb3V0cHV0IHRoYXQgZGVwZW5kcyBvbiBhbGwgb2JqZWN0IGZpbGVzLgogICB7CiAgICAgY21OaW5qYUJ1aWxkIGJ1aWxkKCJwaG9ueSIpOwogICAgIGJ1aWxkLkNvbW1lbnQgPSAiT2JqZWN0IGxpYnJhcnkgIiArIHRoaXMtPkdldFRhcmdldE5hbWUoKTsKICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXRPdXRwdXRzKHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuT3V0cHV0cyk7Ci0gICAgYnVpbGQuRXhwbGljaXREZXBzID0gdGhpcy0+R2V0T2JqZWN0cygpOwotICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBidWlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZC5PdXRwdXRzLCBjb25maWcpOworICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldE91dHB1dHMoCisgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwKKyAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRCeXByb2R1Y3RzRm9yQ2xlYW5UYXJnZXQoY29uZmlnKSwgY29uZmlnKTsKKyAgICBidWlsZC5FeHBsaWNpdERlcHMgPSB0aGlzLT5HZXRPYmplY3RzKGNvbmZpZyk7CisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlQnVpbGQodGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpLCBidWlsZCk7CiAgIH0KIAogICAvLyBBZGQgYWxpYXNlcyBmb3IgdGhlIHRhcmdldCBuYW1lLgotICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkVGFyZ2V0QWxpYXModGhpcy0+R2V0VGFyZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCkpOworICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkVGFyZ2V0QWxpYXMoCisgICAgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpLCB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwgY29uZmlnKTsKK30KKworY21HZW5lcmF0b3JUYXJnZXQ6Ok5hbWVzIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OlRhcmdldE5hbWVzKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAoreworICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSB7CisgICAgcmV0dXJuIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXhlY3V0YWJsZU5hbWVzKGNvbmZpZyk7CisgIH0KKyAgcmV0dXJuIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlicmFyeU5hbWVzKGNvbmZpZyk7Cit9CisKK3N0ZDo6c3RyaW5nIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3I6OlRhcmdldExpbmtMYW5ndWFnZSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKK3sKKyAgcmV0dXJuIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UoY29uZmlnKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21OaW5qYU5vcm1hbFRhcmdldEdlbmVyYXRvci5oCmluZGV4IGViYzEyNjguLjlkZTk5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3IuaApAQCAtMTcsMzAgKzE3LDMzIEBACiAgIGNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CiAgIH5jbU5pbmphTm9ybWFsVGFyZ2V0R2VuZXJhdG9yKCkgb3ZlcnJpZGU7CiAKLSAgdm9pZCBHZW5lcmF0ZSgpIG92ZXJyaWRlOworICB2b2lkIEdlbmVyYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICBzdGQ6OnN0cmluZyBMYW5ndWFnZUxpbmtlclJ1bGUoKSBjb25zdDsKLSAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VMaW5rZXJEZXZpY2VSdWxlKCkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIExhbmd1YWdlTGlua2VyUnVsZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VMaW5rZXJEZXZpY2VSdWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIGNvbnN0IGNoYXIqIEdldFZpc2libGVUeXBlTmFtZSgpIGNvbnN0OwotICB2b2lkIFdyaXRlTGFuZ3VhZ2VzUnVsZXMoKTsKKyAgdm9pZCBXcml0ZUxhbmd1YWdlc1J1bGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCi0gIHZvaWQgV3JpdGVMaW5rUnVsZShib29sIHVzZVJlc3BvbnNlRmlsZSk7Ci0gIHZvaWQgV3JpdGVEZXZpY2VMaW5rUnVsZShib29sIHVzZVJlc3BvbnNlRmlsZSk7CisgIHZvaWQgV3JpdGVMaW5rUnVsZShib29sIHVzZVJlc3BvbnNlRmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CisgIHZvaWQgV3JpdGVEZXZpY2VMaW5rUnVsZShib29sIHVzZVJlc3BvbnNlRmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKLSAgdm9pZCBXcml0ZUxpbmtTdGF0ZW1lbnQoKTsKLSAgdm9pZCBXcml0ZURldmljZUxpbmtTdGF0ZW1lbnQoKTsKKyAgdm9pZCBXcml0ZUxpbmtTdGF0ZW1lbnQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcsIGJvb2wgZmlyc3RGb3JDb25maWcpOworICB2b2lkIFdyaXRlRGV2aWNlTGlua1N0YXRlbWVudChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZUNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdEZvckNvbmZpZyk7CiAKLSAgdm9pZCBXcml0ZU9iamVjdExpYlN0YXRlbWVudCgpOworICB2b2lkIFdyaXRlT2JqZWN0TGliU3RhdGVtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBDb21wdXRlTGlua0NtZCgpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ29tcHV0ZUxpbmtDbWQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBDb21wdXRlRGV2aWNlTGlua0NtZCgpOwogCiBwcml2YXRlOgogICAvLyBUYXJnZXQgbmFtZSBpbmZvLgotICBjbUdlbmVyYXRvclRhcmdldDo6TmFtZXMgVGFyZ2V0TmFtZXM7Ci0gIHN0ZDo6c3RyaW5nIFRhcmdldExpbmtMYW5ndWFnZTsKKyAgY21HZW5lcmF0b3JUYXJnZXQ6Ok5hbWVzIFRhcmdldE5hbWVzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworICBzdGQ6OnN0cmluZyBUYXJnZXRMaW5rTGFuZ3VhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAgIHN0ZDo6c3RyaW5nIERldmljZUxpbmtPYmplY3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21OaW5qYVRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21OaW5qYVRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggMGFhYjkxMi4uMDQ4ZGJiNiAxMDA2NDQKLS0tIGEvU291cmNlL2NtTmluamFUYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbU5pbmphVGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtNywxNCArNywxNiBAQAogI2luY2x1ZGUgPGl0ZXJhdG9yPgogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxvc3RyZWFtPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3dyaXRlci5oIgorI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgorI2luY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ29tcHV0ZUxpbmtJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgpAQCAtMjcsNiArMjksNyBAQAogI2luY2x1ZGUgImNtTmluamFOb3JtYWxUYXJnZXRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCkBAIC01OCwxOSArNjEsMjggQEAKIAogY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6Y21OaW5qYVRhcmdldEdlbmVyYXRvcihjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0KQogICA6IGNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yKHRhcmdldCkKLSAgLCBNYWNPU1hDb250ZW50R2VuZXJhdG9yKG51bGxwdHIpCiAgICwgT1NYQnVuZGxlR2VuZXJhdG9yKG51bGxwdHIpCiAgICwgTG9jYWxHZW5lcmF0b3IoCiAgICAgICBzdGF0aWNfY2FzdDxjbUxvY2FsTmluamFHZW5lcmF0b3IqPih0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCkpKQogewotICBNYWNPU1hDb250ZW50R2VuZXJhdG9yID0gY206Om1ha2VfdW5pcXVlPE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlPih0aGlzKTsKKyAgZm9yIChhdXRvIGNvbnN0JiBmaWxlQ29uZmlnIDoKKyAgICAgICB0YXJnZXQtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZykpIHsKKyAgICB0aGlzLT5Db25maWdzW2ZpbGVDb25maWddLk1hY09TWENvbnRlbnRHZW5lcmF0b3IgPQorICAgICAgY206Om1ha2VfdW5pcXVlPE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlPih0aGlzLCBmaWxlQ29uZmlnKTsKKyAgfQogfQogCiBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjp+Y21OaW5qYVRhcmdldEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAotY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRCdWlsZEZpbGVTdHJlYW0oKSBjb25zdAorY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRJbXBsRmlsZVN0cmVhbSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgcmV0dXJuICp0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0QnVpbGRGaWxlU3RyZWFtKCk7CisgIHJldHVybiAqdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldEltcGxGaWxlU3RyZWFtKGNvbmZpZyk7Cit9CisKK2NtR2VuZXJhdGVkRmlsZVN0cmVhbSYgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6R2V0Q29tbW9uRmlsZVN0cmVhbSgpIGNvbnN0Cit7CisgIHJldHVybiAqdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkdldENvbW1vbkZpbGVTdHJlYW0oKTsKIH0KIAogY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRSdWxlc0ZpbGVTdHJlYW0oKSBjb25zdApAQCAtODQsMTcgKzk2LDMwIEBACiB9CiAKIHN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6Okxhbmd1YWdlQ29tcGlsZXJSdWxlKAotICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZykgY29uc3QKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHJldHVybiBsYW5nICsgIl9DT01QSUxFUl9fIiArCi0gICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkpOworICByZXR1cm4gY21TdHJDYXQoCisgICAgbGFuZywgIl9DT01QSUxFUl9fIiwKKyAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVSdWxlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSksCisgICAgJ18nLCBjb25maWcpOwogfQogCiBzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpMYW5ndWFnZVByZXByb2Nlc3NSdWxlKAotICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3QKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHJldHVybiBsYW5nICsgIl9QUkVQUk9DRVNTX18iICsKLSAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVSdWxlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSk7CisgIHJldHVybiBjbVN0ckNhdCgKKyAgICBsYW5nLCAiX1BSRVBST0NFU1NfU0NBTl9fIiwKKyAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVSdWxlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSksCisgICAgJ18nLCBjb25maWcpOworfQorCitzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpMYW5ndWFnZURlcGVuZGVuY3lSdWxlKAorICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKK3sKKyAgcmV0dXJuIGNtU3RyQ2F0KAorICAgIGxhbmcsICJfU0NBTl9fIiwKKyAgICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpFbmNvZGVSdWxlTmFtZSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSksCisgICAgJ18nLCBjb25maWcpOwogfQogCiBib29sIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6Ok5lZWRFeHBsaWNpdFByZXByb2Nlc3NpbmcoCkBAIC0xMTcsMTAgKzE0MiwxMiBAQAogfQogCiBzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpMYW5ndWFnZUR5bmRlcFJ1bGUoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKSBjb25zdAorICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKLSAgcmV0dXJuIGxhbmcgKyAiX0RZTkRFUF9fIiArCi0gICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkpOworICByZXR1cm4gY21TdHJDYXQoCisgICAgbGFuZywgIl9EWU5ERVBfXyIsCisgICAgY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6RW5jb2RlUnVsZU5hbWUodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXROYW1lKCkpLAorICAgICdfJywgY29uZmlnKTsKIH0KIAogYm9vbCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpOZWVkRHluZGVwKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdApAQCAtMTI4LDkgKzE1NSwxMSBAQAogICByZXR1cm4gbGFuZyA9PSAiRm9ydHJhbiI7CiB9CiAKLXN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6Ok9yZGVyRGVwZW5kc1RhcmdldEZvclRhcmdldCgpCitzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpPcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7Ci0gIHJldHVybiAiY21ha2Vfb2JqZWN0X29yZGVyX2RlcGVuZHNfdGFyZ2V0XyIgKyB0aGlzLT5HZXRUYXJnZXROYW1lKCk7CisgIHJldHVybiB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+T3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KAorICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgY29uZmlnKTsKIH0KIAogLy8gVE9ETzogTW9zdCBvZiB0aGUgY29kZSBpcyBwaWNrZWQgdXAgZnJvbQpAQCAtMTM4LDQ0ICsxNjcsNzEgQEAKIC8vIHZvaWQgY21NYWtlZmlsZVRhcmdldEdlbmVyYXRvcjo6V3JpdGVUYXJnZXRMYW5ndWFnZUZsYWdzKCkKIC8vIFJlZmFjdG9yIGl0Lgogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6Q29tcHV0ZUZsYWdzRm9yT2JqZWN0KAotICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKQorICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICBzdGQ6OnN0cmluZyBmbGFncyA9IHRoaXMtPkdldEZsYWdzKGxhbmd1YWdlKTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgY29uZmlnTmFtZSA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRDb25maWdOYW1lKCk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmNoaXRlY3R1cmVzOworICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBwY2hTb3VyY2VzOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEFwcGxlQXJjaHMoY29uZmlnLCBhcmNoaXRlY3R1cmVzKTsKKyAgaWYgKGFyY2hpdGVjdHVyZXMuZW1wdHkoKSkgeworICAgIGFyY2hpdGVjdHVyZXMuZW1wbGFjZV9iYWNrKCk7CisgIH0KKworICBzdGQ6OnN0cmluZyBmaWx0ZXJBcmNoOworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmNoIDogYXJjaGl0ZWN0dXJlcykgeworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaFNvdXJjZSA9CisgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaFNvdXJjZShjb25maWcsIGxhbmd1YWdlLCBhcmNoKTsKKyAgICBpZiAocGNoU291cmNlID09IHNvdXJjZS0+R2V0RnVsbFBhdGgoKSkgeworICAgICAgZmlsdGVyQXJjaCA9IGFyY2g7CisgICAgfQorICAgIGlmICghcGNoU291cmNlLmVtcHR5KCkpIHsKKyAgICAgIHBjaFNvdXJjZXMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHBjaFNvdXJjZSwgYXJjaCkpOworICAgIH0KKyAgfQorCisgIHN0ZDo6c3RyaW5nIGZsYWdzOworICAvLyBleHBsaWNpdGx5IGFkZCB0aGUgZXhwbGljaXQgbGFuZ3VhZ2UgZmxhZyBiZWZvcmUgYW55IG90aGVyIGZsYWcKKyAgLy8gdGhpcyB3YXkgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB1c2VyIGZsYWdzIGlzIG1haW50YWluZWQKKyAgaWYgKHNvdXJjZS0+R2V0UHJvcGVydHkoIkxBTkdVQUdFIikpIHsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRmVhdHVyZU9wdGlvbnMoZmxhZ3MsIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRVhQTElDSVRfTEFOR1VBR0UiKTsKKyAgICBmbGFncyArPSAiICI7CisgIH0KKworICBmbGFncyArPSB0aGlzLT5HZXRGbGFncyhsYW5ndWFnZSwgY29uZmlnLCBmaWx0ZXJBcmNoKTsKIAogICAvLyBBZGQgRm9ydHJhbiBmb3JtYXQgZmxhZ3MuCiAgIGlmIChsYW5ndWFnZSA9PSAiRm9ydHJhbiIpIHsKICAgICB0aGlzLT5BcHBlbmRGb3J0cmFuRm9ybWF0RmxhZ3MoZmxhZ3MsICpzb3VyY2UpOworICAgIHRoaXMtPkFwcGVuZEZvcnRyYW5QcmVwcm9jZXNzRmxhZ3MoZmxhZ3MsICpzb3VyY2UpOwogICB9CiAKICAgLy8gQWRkIHNvdXJjZSBmaWxlIHNwZWNpZmljIGZsYWdzLgogICBjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlciBnZW5leEludGVycHJldGVyKAotICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmd1YWdlKTsKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmd1YWdlKTsKIAogICBjb25zdCBzdGQ6OnN0cmluZyBDT01QSUxFX0ZMQUdTKCJDT01QSUxFX0ZMQUdTIik7Ci0gIGlmIChjb25zdCBjaGFyKiBjZmxhZ3MgPSBzb3VyY2UtPkdldFByb3BlcnR5KENPTVBJTEVfRkxBR1MpKSB7CisgIGlmIChjbVByb3AgY2ZsYWdzID0gc291cmNlLT5HZXRQcm9wZXJ0eShDT01QSUxFX0ZMQUdTKSkgewogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRGbGFncygKLSAgICAgIGZsYWdzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNmbGFncywgQ09NUElMRV9GTEFHUykpOworICAgICAgZmxhZ3MsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNmbGFncywgQ09NUElMRV9GTEFHUykpOwogICB9CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9PUFRJT05TKCJDT01QSUxFX09QVElPTlMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNvcHRpb25zID0gc291cmNlLT5HZXRQcm9wZXJ0eShDT01QSUxFX09QVElPTlMpKSB7CisgIGlmIChjbVByb3AgY29wdGlvbnMgPSBzb3VyY2UtPkdldFByb3BlcnR5KENPTVBJTEVfT1BUSU9OUykpIHsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kQ29tcGlsZU9wdGlvbnMoCi0gICAgICBmbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZShjb3B0aW9ucywgQ09NUElMRV9PUFRJT05TKSk7CisgICAgICBmbGFncywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY29wdGlvbnMsIENPTVBJTEVfT1BUSU9OUykpOwogICB9CiAKICAgLy8gQWRkIHByZWNvbXBpbGUgaGVhZGVycyBjb21waWxlIG9wdGlvbnMuCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaFNvdXJjZSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hTb3VyY2UoY29uZmlnTmFtZSwgbGFuZ3VhZ2UpOwotCi0gIGlmICghcGNoU291cmNlLmVtcHR5KCkgJiYgIXNvdXJjZS0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKKyAgaWYgKCFwY2hTb3VyY2VzLmVtcHR5KCkgJiYgIXNvdXJjZS0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKICAgICBzdGQ6OnN0cmluZyBwY2hPcHRpb25zOwotICAgIGlmIChzb3VyY2UtPkdldEZ1bGxQYXRoKCkgPT0gcGNoU291cmNlKSB7CisgICAgYXV0byBwY2hJdCA9IHBjaFNvdXJjZXMuZmluZChzb3VyY2UtPkdldEZ1bGxQYXRoKCkpOworICAgIGlmIChwY2hJdCAhPSBwY2hTb3VyY2VzLmVuZCgpKSB7CiAgICAgICBwY2hPcHRpb25zID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hDcmVhdGVDb21waWxlT3B0aW9ucygKLSAgICAgICAgY29uZmlnTmFtZSwgbGFuZ3VhZ2UpOworICAgICAgICBjb25maWcsIGxhbmd1YWdlLCBwY2hJdC0+c2Vjb25kKTsKICAgICB9IGVsc2UgewogICAgICAgcGNoT3B0aW9ucyA9Ci0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoVXNlQ29tcGlsZU9wdGlvbnMoY29uZmlnTmFtZSwgbGFuZ3VhZ2UpOworICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBjaFVzZUNvbXBpbGVPcHRpb25zKGNvbmZpZywgbGFuZ3VhZ2UpOwogICAgIH0KIAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRDb21waWxlT3B0aW9ucygKQEAgLTE4NiwxNiArMjQyLDE3IEBACiB9CiAKIHZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6QWRkSW5jbHVkZUZsYWdzKHN0ZDo6c3RyaW5nJiBsYW5ndWFnZUZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmd1YWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwogICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0SW5jbHVkZURpcmVjdG9yaWVzKGluY2x1ZGVzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UsIGNvbmZpZyk7CiAgIC8vIEFkZCBpbmNsdWRlIGRpcmVjdG9yeSBmbGFncy4KICAgc3RkOjpzdHJpbmcgaW5jbHVkZUZsYWdzID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEluY2x1ZGVGbGFncygKICAgICBpbmNsdWRlcywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBsYW5ndWFnZSwKICAgICBsYW5ndWFnZSA9PSAiUkMiLCAvLyBmdWxsIGluY2x1ZGUgcGF0aHMgZm9yIFJDIG5lZWRlZCBieSBjbWNsZGVwcwotICAgIGZhbHNlLCB0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICAgIGZhbHNlLCBjb25maWcpOwogICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzR0NDT25XaW5kb3dzKCkpIHsKICAgICBzdGQ6OnJlcGxhY2UoaW5jbHVkZUZsYWdzLmJlZ2luKCksIGluY2x1ZGVGbGFncy5lbmQoKSwgJ1xcJywgJy8nKTsKICAgfQpAQCAtMjA1LDggKzI2Miw4IEBACiAKIGJvb2wgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6TmVlZERlcFR5cGVNU1ZDKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKSBjb25zdAogewotICBzdGQ6OnN0cmluZyBjb25zdCYgZGVwdHlwZSA9Ci0gICAgdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX05JTkpBX0RFUFRZUEVfIiArIGxhbmcpOworICBzdGQ6OnN0cmluZyBjb25zdCYgZGVwdHlwZSA9IHRoaXMtPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKAorICAgIGNtU3RyQ2F0KCJDTUFLRV9OSU5KQV9ERVBUWVBFXyIsIGxhbmcpKTsKICAgaWYgKGRlcHR5cGUgPT0gIm1zdmMiKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KQEAgLTIzMiw1OCArMjg5LDYzIEBACiAvLyBUT0RPOiBSZWZhY3RvciB3aXRoCiAvLyB2b2lkIGNtTWFrZWZpbGVUYXJnZXRHZW5lcmF0b3I6OldyaXRlVGFyZ2V0TGFuZ3VhZ2VGbGFncygpLgogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6Q29tcHV0ZURlZmluZXMoY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZGVmaW5lczsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgY29uZmlnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldENvbmZpZ05hbWUoKTsKICAgY21HZW5lcmF0b3JFeHByZXNzaW9uSW50ZXJwcmV0ZXIgZ2VuZXhJbnRlcnByZXRlcigKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmd1YWdlKTsKIAorICAvLyBTZXJpb3VzbHk/PworICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzTXVsdGlDb25maWcoKSkgeworICAgIGRlZmluZXMuaW5zZXJ0KGNtU3RyQ2F0KCJDTUFLRV9JTlRESVI9XCIiLCBjb25maWcsICciJykpOworICB9CisKICAgY29uc3Qgc3RkOjpzdHJpbmcgQ09NUElMRV9ERUZJTklUSU9OUygiQ09NUElMRV9ERUZJTklUSU9OUyIpOwotICBpZiAoY29uc3QgY2hhciogY29tcGlsZV9kZWZzID0gc291cmNlLT5HZXRQcm9wZXJ0eShDT01QSUxFX0RFRklOSVRJT05TKSkgeworICBpZiAoY21Qcm9wIGNvbXBpbGVfZGVmcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoQ09NUElMRV9ERUZJTklUSU9OUykpIHsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRGVmaW5lcygKLSAgICAgIGRlZmluZXMsIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoY29tcGlsZV9kZWZzLCBDT01QSUxFX0RFRklOSVRJT05TKSk7CisgICAgICBkZWZpbmVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKCpjb21waWxlX2RlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpKTsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIGRlZlByb3BOYW1lID0KICAgICBjbVN0ckNhdCgiQ09NUElMRV9ERUZJTklUSU9OU18iLCBjbVN5c3RlbVRvb2xzOjpVcHBlckNhc2UoY29uZmlnKSk7Ci0gIGlmIChjb25zdCBjaGFyKiBjb25maWdfY29tcGlsZV9kZWZzID0gc291cmNlLT5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSkpIHsKKyAgaWYgKGNtUHJvcCBjb25maWdfY29tcGlsZV9kZWZzID0gc291cmNlLT5HZXRQcm9wZXJ0eShkZWZQcm9wTmFtZSkpIHsKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRGVmaW5lcygKICAgICAgIGRlZmluZXMsCi0gICAgICBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNvbmZpZ19jb21waWxlX2RlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpKTsKKyAgICAgIGdlbmV4SW50ZXJwcmV0ZXIuRXZhbHVhdGUoKmNvbmZpZ19jb21waWxlX2RlZnMsIENPTVBJTEVfREVGSU5JVElPTlMpKTsKICAgfQogCi0gIHN0ZDo6c3RyaW5nIGRlZmluZXNTdHJpbmcgPSB0aGlzLT5HZXREZWZpbmVzKGxhbmd1YWdlKTsKKyAgc3RkOjpzdHJpbmcgZGVmaW5lc1N0cmluZyA9IHRoaXMtPkdldERlZmluZXMobGFuZ3VhZ2UsIGNvbmZpZyk7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Kb2luRGVmaW5lcyhkZWZpbmVzLCBkZWZpbmVzU3RyaW5nLCBsYW5ndWFnZSk7CiAKICAgcmV0dXJuIGRlZmluZXNTdHJpbmc7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkNvbXB1dGVJbmNsdWRlcygKLSAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSkKKyAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwotICBjb25zdCBzdGQ6OnN0cmluZyBjb25maWcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q29uZmlnTmFtZSgpOwogICBjbUdlbmVyYXRvckV4cHJlc3Npb25JbnRlcnByZXRlciBnZW5leEludGVycHJldGVyKAogICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgbGFuZ3VhZ2UpOwogCiAgIGNvbnN0IHN0ZDo6c3RyaW5nIElOQ0xVREVfRElSRUNUT1JJRVMoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNpbmNsdWRlcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoSU5DTFVERV9ESVJFQ1RPUklFUykpIHsKKyAgaWYgKGNtUHJvcCBjaW5jbHVkZXMgPSBzb3VyY2UtPkdldFByb3BlcnR5KElOQ0xVREVfRElSRUNUT1JJRVMpKSB7CiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEluY2x1ZGVEaXJlY3RvcmllcygKLSAgICAgIGluY2x1ZGVzLCBnZW5leEludGVycHJldGVyLkV2YWx1YXRlKGNpbmNsdWRlcywgSU5DTFVERV9ESVJFQ1RPUklFUyksCisgICAgICBpbmNsdWRlcywgZ2VuZXhJbnRlcnByZXRlci5FdmFsdWF0ZSgqY2luY2x1ZGVzLCBJTkNMVURFX0RJUkVDVE9SSUVTKSwKICAgICAgICpzb3VyY2UpOwogICB9CiAKICAgc3RkOjpzdHJpbmcgaW5jbHVkZXNTdHJpbmcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0SW5jbHVkZUZsYWdzKAogICAgIGluY2x1ZGVzLCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmd1YWdlLCB0cnVlLCBmYWxzZSwgY29uZmlnKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkFwcGVuZEZsYWdzKGluY2x1ZGVzU3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0SW5jbHVkZXMobGFuZ3VhZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldEluY2x1ZGVzKGxhbmd1YWdlLCBjb25maWcpKTsKIAogICByZXR1cm4gaW5jbHVkZXNTdHJpbmc7CiB9CiAKIGNtTmluamFEZXBzIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkNvbXB1dGVMaW5rRGVwcygKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSkgY29uc3QKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgLy8gU3RhdGljIGxpYnJhcmllcyBuZXZlciBkZXBlbmQgb24gb3RoZXIgdGFyZ2V0cyBmb3IgbGlua2luZy4KICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkgfHwKQEAgLTI5Miw3ICszNTQsNyBAQAogICB9CiAKICAgY21Db21wdXRlTGlua0luZm9ybWF0aW9uKiBjbGkgPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0luZm9ybWF0aW9uKHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rSW5mb3JtYXRpb24oY29uZmlnKTsKICAgaWYgKCFjbGkpIHsKICAgICByZXR1cm4gY21OaW5qYURlcHMoKTsKICAgfQpAQCAtMzAzLDggKzM2NSw3IEBACiAKICAgLy8gQWRkIGEgZGVwZW5kZW5jeSBvbiB0aGUgbGluayBkZWZpbml0aW9ucyBmaWxlLCBpZiBhbnkuCiAgIGlmIChjbUdlbmVyYXRvclRhcmdldDo6TW9kdWxlRGVmaW5pdGlvbkluZm8gY29uc3QqIG1kaSA9Ci0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TW9kdWxlRGVmaW5pdGlvbkluZm8oCi0gICAgICAgICAgdGhpcy0+R2V0Q29uZmlnTmFtZSgpKSkgeworICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE1vZHVsZURlZmluaXRpb25JbmZvKGNvbmZpZykpIHsKICAgICBmb3IgKGNtU291cmNlRmlsZSBjb25zdCogc3JjIDogbWRpLT5Tb3VyY2VzKSB7CiAgICAgICByZXN1bHQucHVzaF9iYWNrKHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aChzcmMtPkdldEZ1bGxQYXRoKCkpKTsKICAgICB9CkBAIC0zMTIsMTUgKzM3MywxNCBAQAogCiAgIC8vIEFkZCBhIGRlcGVuZGVuY3kgb24gdXNlci1zcGVjaWZpZWQgbWFuaWZlc3QgZmlsZXMsIGlmIGFueS4KICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gbWFuaWZlc3Rfc3JjczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNYW5pZmVzdHMobWFuaWZlc3Rfc3JjcywgdGhpcy0+Q29uZmlnTmFtZSk7CisgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TWFuaWZlc3RzKG1hbmlmZXN0X3NyY3MsIGNvbmZpZyk7CiAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBtYW5pZmVzdF9zcmMgOiBtYW5pZmVzdF9zcmNzKSB7CiAgICAgcmVzdWx0LnB1c2hfYmFjayh0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgobWFuaWZlc3Rfc3JjLT5HZXRGdWxsUGF0aCgpKSk7CiAgIH0KIAogICAvLyBBZGQgdXNlci1zcGVjaWZpZWQgZGVwZW5kZW5jaWVzLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbGlua0RlcHM7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0RlcGVuZHMobGlua0RlcHMsIHRoaXMtPkNvbmZpZ05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0xhbmd1YWdlKTsKKyAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRMaW5rRGVwZW5kcyhsaW5rRGVwcywgY29uZmlnLCBsaW5rTGFuZ3VhZ2UpOwogICBzdGQ6OnRyYW5zZm9ybShsaW5rRGVwcy5iZWdpbigpLCBsaW5rRGVwcy5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKHJlc3VsdCksCiAgICAgICAgICAgICAgICAgIE1hcFRvTmluamFQYXRoKCkpOwogCkBAIC0zMzQsMjEgKzM5NCwyMSBAQAogfQogCiBzdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRPYmplY3RGaWxlUGF0aCgKLSAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UpIGNvbnN0CisgIGNtU291cmNlRmlsZSBjb25zdCogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewogICBzdGQ6OnN0cmluZyBwYXRoID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEhvbWVSZWxhdGl2ZU91dHB1dFBhdGgoKTsKICAgaWYgKCFwYXRoLmVtcHR5KCkpIHsKLSAgICBwYXRoICs9ICIvIjsKKyAgICBwYXRoICs9ICcvJzsKICAgfQogICBzdGQ6OnN0cmluZyBjb25zdCYgb2JqZWN0TmFtZSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0T2JqZWN0TmFtZShzb3VyY2UpOwotICBwYXRoICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkodGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKLSAgcGF0aCArPSAiLyI7Ci0gIHBhdGggKz0gb2JqZWN0TmFtZTsKKyAgcGF0aCArPSBjbVN0ckNhdCgKKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGlyZWN0b3J5KHRoaXMtPkdlbmVyYXRvclRhcmdldCksCisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkNvbmZpZ0RpcmVjdG9yeShjb25maWcpLCAnLycsIG9iamVjdE5hbWUpOwogICByZXR1cm4gcGF0aDsKIH0KIAogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6R2V0UHJlcHJvY2Vzc2VkRmlsZVBhdGgoCi0gIGNtU291cmNlRmlsZSBjb25zdCogc291cmNlKSBjb25zdAorICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgLy8gQ2hvb3NlIGFuIGV4dGVuc2lvbiB0byBjb21waWxlIGFscmVhZHktcHJlcHJvY2Vzc2VkIHNvdXJjZS4KICAgc3RkOjpzdHJpbmcgcHBFeHQgPSBzb3VyY2UtPkdldEV4dGVuc2lvbigpOwpAQCAtMzcxLDU3ICs0MzEsNTcgQEAKICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+R2V0TGFuZ3VhZ2VPdXRwdXRFeHRlbnNpb24oKnNvdXJjZSk7CiAgIGFzc2VydChvYmpOYW1lLnNpemUoKSA+PSBvYmpFeHQuc2l6ZSgpKTsKICAgc3RkOjpzdHJpbmcgY29uc3QgcHBOYW1lID0KLSAgICBvYmpOYW1lLnN1YnN0cigwLCBvYmpOYW1lLnNpemUoKSAtIG9iakV4dC5zaXplKCkpICsgIi1wcC4iICsgcHBFeHQ7CisgICAgY21TdHJDYXQob2JqTmFtZS5zdWJzdHIoMCwgb2JqTmFtZS5zaXplKCkgLSBvYmpFeHQuc2l6ZSgpKSwgIi1wcC4iLCBwcEV4dCk7CiAKICAgc3RkOjpzdHJpbmcgcGF0aCA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRIb21lUmVsYXRpdmVPdXRwdXRQYXRoKCk7CiAgIGlmICghcGF0aC5lbXB0eSgpKSB7Ci0gICAgcGF0aCArPSAiLyI7CisgICAgcGF0aCArPSAnLyc7CiAgIH0KLSAgcGF0aCArPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0VGFyZ2V0RGlyZWN0b3J5KHRoaXMtPkdlbmVyYXRvclRhcmdldCk7Ci0gIHBhdGggKz0gIi8iOwotICBwYXRoICs9IHBwTmFtZTsKKyAgcGF0aCArPQorICAgIGNtU3RyQ2F0KHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkodGhpcy0+R2VuZXJhdG9yVGFyZ2V0KSwKKyAgICAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+Q29uZmlnRGlyZWN0b3J5KGNvbmZpZyksICcvJywgcHBOYW1lKTsKICAgcmV0dXJuIHBhdGg7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkdldER5bmRlcEZpbGVQYXRoKAotICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3QKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7CiAgIHN0ZDo6c3RyaW5nIHBhdGggPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0SG9tZVJlbGF0aXZlT3V0cHV0UGF0aCgpOwogICBpZiAoIXBhdGguZW1wdHkoKSkgewotICAgIHBhdGggKz0gIi8iOworICAgIHBhdGggKz0gJy8nOwogICB9Ci0gIHBhdGggKz0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQpOwotICBwYXRoICs9ICIvIjsKLSAgcGF0aCArPSBsYW5nOwotICBwYXRoICs9ICIuZGQiOworICBwYXRoICs9IGNtU3RyQ2F0KAorICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkodGhpcy0+R2VuZXJhdG9yVGFyZ2V0KSwKKyAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+Q29uZmlnRGlyZWN0b3J5KGNvbmZpZyksICcvJywgbGFuZywgIi5kZCIpOwogICByZXR1cm4gcGF0aDsKIH0KIAogc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6R2V0VGFyZ2V0RGVwZW5kSW5mb1BhdGgoCi0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdAorICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgc3RkOjpzdHJpbmcgcGF0aCA9CiAgICAgY21TdHJDYXQodGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgJy8nLAogICAgICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRUYXJnZXREaXJlY3RvcnkodGhpcy0+R2VuZXJhdG9yVGFyZ2V0KSwKLSAgICAgICAgICAgICAnLycsIGxhbmcsICJEZXBlbmRJbmZvLmpzb24iKTsKKyAgICAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+Q29uZmlnRGlyZWN0b3J5KGNvbmZpZyksICcvJywgbGFuZywKKyAgICAgICAgICAgICAiRGVwZW5kSW5mby5qc29uIik7CiAgIHJldHVybiBwYXRoOwogfQogCi1zdGQ6OnN0cmluZyBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpHZXRUYXJnZXRPdXRwdXREaXIoKSBjb25zdAorc3RkOjpzdHJpbmcgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6R2V0VGFyZ2V0T3V0cHV0RGlyKAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdAogewotICBzdGQ6OnN0cmluZyBkaXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldERpcmVjdG9yeSh0aGlzLT5HZXRDb25maWdOYW1lKCkpOworICBzdGQ6OnN0cmluZyBkaXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldERpcmVjdG9yeShjb25maWcpOwogICByZXR1cm4gQ29udmVydFRvTmluamFQYXRoKGRpcik7CiB9CiAKIHN0ZDo6c3RyaW5nIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkdldFRhcmdldEZpbGVQYXRoKAotICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0CiB7Ci0gIHN0ZDo6c3RyaW5nIHBhdGggPSB0aGlzLT5HZXRUYXJnZXRPdXRwdXREaXIoKTsKKyAgc3RkOjpzdHJpbmcgcGF0aCA9IHRoaXMtPkdldFRhcmdldE91dHB1dERpcihjb25maWcpOwogICBpZiAocGF0aC5lbXB0eSgpIHx8IHBhdGggPT0gIi4iKSB7CiAgICAgcmV0dXJuIG5hbWU7CiAgIH0KLSAgcGF0aCArPSAiLyI7Ci0gIHBhdGggKz0gbmFtZTsKKyAgcGF0aCArPSBjbVN0ckNhdCgnLycsIG5hbWUpOwogICByZXR1cm4gcGF0aDsKIH0KIApAQCAtNDMwLDIxICs0OTAsMjEgQEAKICAgcmV0dXJuIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TmFtZSgpOwogfQogCi1ib29sIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OlNldE1zdmNUYXJnZXRQZGJWYXJpYWJsZShjbU5pbmphVmFycyYgdmFycykgY29uc3QKK2Jvb2wgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6U2V0TXN2Y1RhcmdldFBkYlZhcmlhYmxlKAorICBjbU5pbmphVmFycyYgdmFycywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKIHsKICAgY21NYWtlZmlsZSogbWYgPSB0aGlzLT5HZXRNYWtlZmlsZSgpOwogICBpZiAobWYtPkdldERlZmluaXRpb24oIk1TVkNfQ19BUkNISVRFQ1RVUkVfSUQiKSB8fAogICAgICAgbWYtPkdldERlZmluaXRpb24oIk1TVkNfQ1hYX0FSQ0hJVEVDVFVSRV9JRCIpIHx8CiAgICAgICBtZi0+R2V0RGVmaW5pdGlvbigiTVNWQ19DVURBX0FSQ0hJVEVDVFVSRV9JRCIpKSB7CiAgICAgc3RkOjpzdHJpbmcgcGRiUGF0aDsKLSAgICBzdGQ6OnN0cmluZyBjb21waWxlUGRiUGF0aCA9IHRoaXMtPkNvbXB1dGVUYXJnZXRDb21waWxlUERCKCk7CisgICAgc3RkOjpzdHJpbmcgY29tcGlsZVBkYlBhdGggPSB0aGlzLT5Db21wdXRlVGFyZ2V0Q29tcGlsZVBEQihjb25maWcpOwogICAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUgfHwKICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWSB8fAogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6TU9EVUxFX0xJQlJBUlkpIHsKLSAgICAgIHBkYlBhdGggPSBjbVN0ckNhdCgKLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQREJEaXJlY3RvcnkodGhpcy0+R2V0Q29uZmlnTmFtZSgpKSwgJy8nLAotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFBEQk5hbWUodGhpcy0+R2V0Q29uZmlnTmFtZSgpKSk7CisgICAgICBwZGJQYXRoID0gY21TdHJDYXQodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQREJEaXJlY3RvcnkoY29uZmlnKSwgJy8nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UERCTmFtZShjb25maWcpKTsKICAgICB9CiAKICAgICB2YXJzWyJUQVJHRVRfUERCIl0gPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCkBAIC00NjAsMjAgKzUyMCwxMDcgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OldyaXRlTGFuZ3VhZ2VSdWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpCit2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OldyaXRlTGFuZ3VhZ2VSdWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogI2lmZGVmIE5JTkpBX0dFTl9WRVJCT1NFX0ZJTEVTCiAgIHRoaXMtPkdldFJ1bGVzRmlsZVN0cmVhbSgpIDw8ICIjIFJ1bGVzIGZvciBsYW5ndWFnZSAiIDw8IGxhbmd1YWdlIDw8ICJcblxuIjsKICNlbmRpZgotICB0aGlzLT5Xcml0ZUNvbXBpbGVSdWxlKGxhbmd1YWdlKTsKKyAgdGhpcy0+V3JpdGVDb21waWxlUnVsZShsYW5ndWFnZSwgY29uZmlnKTsKIH0KIAotdm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUNvbXBpbGVSdWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKQorbmFtZXNwYWNlIHsKKy8vIENyZWF0ZSB0aGUgY29tbWFuZCB0byBydW4gdGhlIGRlcGVuZGVuY3kgc2Nhbm5lcgorc3RkOjpzdHJpbmcgR2V0U2NhbkNvbW1hbmQoY29uc3Qgc3RkOjpzdHJpbmcmIGNtYWtlQ21kLCBjb25zdCBzdGQ6OnN0cmluZyYgdGRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcEZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZWREeW5kZXAsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZGlGaWxlKQoreworICBzdGQ6OnN0cmluZyBjY21kID0KKyAgICBjbVN0ckNhdChjbWFrZUNtZCwgIiAtRSBjbWFrZV9uaW5qYV9kZXBlbmRzIC0tdGRpPSIsIHRkaSwgIiAtLWxhbmc9IiwgbGFuZywKKyAgICAgICAgICAgICAiIC0tcHA9IiwgcHBGaWxlLCAiIC0tZGVwPSRERVBfRklMRSIpOworICBpZiAobmVlZER5bmRlcCkgeworICAgIGNjbWQgPSBjbVN0ckNhdChjY21kLCAiIC0tb2JqPSRPQkpfRklMRSAtLWRkaT0iLCBkZGlGaWxlKTsKKyAgfQorICByZXR1cm4gY2NtZDsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBkZXBlbmRlbmN5IHNjYW5uaW5nIHJ1bGUsIHdpdGggb3B0aW9uYWwKKy8vIGV4cGxpY2l0IHByZXByb2Nlc3Npbmcgc3RlcCBpZiBwcmVwcm9jZXNzQ29tbWFuZCBpcyBub24tZW1wdHkKK2NtTmluamFSdWxlIEdldFByZXByb2Nlc3NTY2FuUnVsZSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHJ1bGVOYW1lLCBjbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyOjpSdWxlVmFyaWFibGVzJiB2YXJzLAorICBjb25zdCBzdGQ6OnN0cmluZyYgcmVzcG9uc2VGbGFnLCBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ3MsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYXVuY2hlciwKKyAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlciogY29uc3QgcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIsCisgIHN0ZDo6c3RyaW5nIHNjYW5Db21tYW5kLCBjbUxvY2FsTmluamFHZW5lcmF0b3IqIGdlbmVyYXRvciwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHByZXByb2Nlc3NDb21tYW5kID0gIiIpCit7CisgIGNtTmluamFSdWxlIHJ1bGUocnVsZU5hbWUpOworICAvLyBFeHBsaWNpdCBwcmVwcm9jZXNzaW5nIGFsd2F5cyB1c2VzIGEgZGVwZmlsZS4KKyAgcnVsZS5EZXBUeXBlID0gIiI7IC8vIG5vIGRlcHM9IGZvciBtdWx0aXBsZSBvdXRwdXRzCisgIHJ1bGUuRGVwRmlsZSA9ICIkREVQX0ZJTEUiOworCisgIGNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXI6OlJ1bGVWYXJpYWJsZXMgcHBWYXJzOworICBwcFZhcnMuQ01UYXJnZXROYW1lID0gdmFycy5DTVRhcmdldE5hbWU7CisgIHBwVmFycy5DTVRhcmdldFR5cGUgPSB2YXJzLkNNVGFyZ2V0VHlwZTsKKyAgcHBWYXJzLkxhbmd1YWdlID0gdmFycy5MYW5ndWFnZTsKKyAgcHBWYXJzLk9iamVjdCA9ICIkb3V0IjsgLy8gZm9yIFJVTEVfTEFVTkNIX0NPTVBJTEUKKyAgcHBWYXJzLlByZXByb2Nlc3NlZFNvdXJjZSA9ICIkb3V0IjsKKyAgcHBWYXJzLkRlcGVuZGVuY3lGaWxlID0gcnVsZS5EZXBGaWxlLmNfc3RyKCk7CisKKyAgLy8gUHJlcHJvY2Vzc2luZyB1c2VzIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGNvbXBpbGF0aW9uIHVzZXMKKyAgLy8gcHJlcHJvY2Vzc2VkIG91dHB1dCBvciBvcmlnaW5hbCBzb3VyY2UKKyAgcHBWYXJzLlNvdXJjZSA9IHZhcnMuU291cmNlOworICB2YXJzLlNvdXJjZSA9ICIkaW4iOworCisgIC8vIENvcHkgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIHRvIHRoZSBwcmVwcm9jZXNzb3IgcnVsZS4KKyAgcHBWYXJzLkRlZmluZXMgPSB2YXJzLkRlZmluZXM7CisKKyAgLy8gQ29weSBpbmNsdWRlIGRpcmVjdG9yaWVzIHRvIHRoZSBwcmVwcm9jZXNzb3IgcnVsZS4gIFRoZSBGb3J0cmFuCisgIC8vIGNvbXBpbGF0aW9uIHJ1bGUgc3RpbGwgbmVlZHMgdGhlbSBmb3IgdGhlIElOQ0xVREUgZGlyZWN0aXZlLgorICBwcFZhcnMuSW5jbHVkZXMgPSB2YXJzLkluY2x1ZGVzOworCisgIC8vIFByZXByb2Nlc3NpbmcgYW5kIGNvbXBpbGF0aW9uIHVzZSB0aGUgc2FtZSBmbGFncy4KKyAgc3RkOjpzdHJpbmcgcHBGbGFncyA9IGZsYWdzOworCisgIC8vIElmIHVzaW5nIGEgcmVzcG9uc2UgZmlsZSwgbW92ZSBkZWZpbmVzLCBpbmNsdWRlcywgYW5kIGZsYWdzIGludG8gaXQuCisgIGlmICghcmVzcG9uc2VGbGFnLmVtcHR5KCkpIHsKKyAgICBydWxlLlJzcEZpbGUgPSAiJFJTUF9GSUxFIjsKKyAgICBydWxlLlJzcENvbnRlbnQgPQorICAgICAgY21TdHJDYXQoJyAnLCBwcFZhcnMuRGVmaW5lcywgJyAnLCBwcFZhcnMuSW5jbHVkZXMsICcgJywgcHBGbGFncyk7CisgICAgcHBGbGFncyA9IGNtU3RyQ2F0KHJlc3BvbnNlRmxhZywgcnVsZS5Sc3BGaWxlKTsKKyAgICBwcFZhcnMuRGVmaW5lcyA9ICIiOworICAgIHBwVmFycy5JbmNsdWRlcyA9ICIiOworICB9CisKKyAgcHBWYXJzLkZsYWdzID0gcHBGbGFncy5jX3N0cigpOworCisgIC8vIFJ1bGUgZm9yIHByZXByb2Nlc3Npbmcgc291cmNlIGZpbGUuCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcENtZHM7CisKKyAgaWYgKCFwcmVwcm9jZXNzQ29tbWFuZC5lbXB0eSgpKSB7CisgICAgLy8gTG9va3VwIHRoZSBleHBsaWNpdCBwcmVwcm9jZXNzaW5nIHJ1bGUuCisgICAgY21FeHBhbmRMaXN0KHByZXByb2Nlc3NDb21tYW5kLCBwcENtZHMpOworICAgIGZvciAoc3RkOjpzdHJpbmcmIGkgOiBwcENtZHMpIHsKKyAgICAgIGkgPSBjbVN0ckNhdChsYXVuY2hlciwgaSk7CisgICAgICBydWxlUGxhY2Vob2xkZXJFeHBhbmRlci0+RXhwYW5kUnVsZVZhcmlhYmxlcyhnZW5lcmF0b3IsIGksIHBwVmFycyk7CisgICAgfQorICB9CisKKyAgLy8gUnVuIENNYWtlIGRlcGVuZGVuY3kgc2Nhbm5lciBvbiBlaXRoZXIgcHJlcHJvY2Vzc2VkIG91dHB1dCBvciBzb3VyY2UgZmlsZQorICBwcENtZHMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShzY2FuQ29tbWFuZCkpOworICBydWxlLkNvbW1hbmQgPSBnZW5lcmF0b3ItPkJ1aWxkQ29tbWFuZExpbmUocHBDbWRzKTsKKworICByZXR1cm4gcnVsZTsKK30KK30KKwordm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUNvbXBpbGVSdWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpCiB7CiAgIGNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXI6OlJ1bGVWYXJpYWJsZXMgdmFyczsKICAgdmFycy5DTVRhcmdldE5hbWUgPSB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0TmFtZSgpLmNfc3RyKCk7CiAgIHZhcnMuQ01UYXJnZXRUeXBlID0KLSAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0VHlwZSgpKTsKKyAgICBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSh0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+R2V0VHlwZSgpKS5jX3N0cigpOwogICB2YXJzLkxhbmd1YWdlID0gbGFuZy5jX3N0cigpOwogICB2YXJzLlNvdXJjZSA9ICIkaW4iOwogICB2YXJzLk9iamVjdCA9ICIkb3V0IjsKQEAgLTQ5OCw3ICs2NDUsNyBAQAogICBib29sIGNvbnN0IGxhbmdfc3VwcG9ydHNfcmVzcG9uc2UgPSBsYW5nICE9ICJSQyI7CiAgIGlmIChsYW5nX3N1cHBvcnRzX3Jlc3BvbnNlICYmIHRoaXMtPkZvcmNlUmVzcG9uc2VGaWxlKCkpIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCByZXNwb25zZUZsYWdWYXIgPQotICAgICAgIkNNQUtFXyIgKyBsYW5nICsgIl9SRVNQT05TRV9GSUxFX0ZMQUciOworICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfUkVTUE9OU0VfRklMRV9GTEFHIik7CiAgICAgcmVzcG9uc2VGbGFnID0gdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKHJlc3BvbnNlRmxhZ1Zhcik7CiAgICAgaWYgKHJlc3BvbnNlRmxhZy5lbXB0eSgpICYmIGxhbmcgIT0gIkNVREEiKSB7CiAgICAgICByZXNwb25zZUZsYWcgPSAiQCI7CkBAIC01MDksMTMgKzY1NiwxMyBAQAogICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNyZWF0ZVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyKCkpOwogCiAgIHN0ZDo6c3RyaW5nIGNvbnN0IHRkaSA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICBDb252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0VGFyZ2V0RGVwZW5kSW5mb1BhdGgobGFuZykpLAorICAgIENvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRUYXJnZXREZXBlbmRJbmZvUGF0aChsYW5nLCBjb25maWcpKSwKICAgICBjbUxvY2FsR2VuZXJhdG9yOjpTSEVMTCk7CiAKICAgc3RkOjpzdHJpbmcgbGF1bmNoZXI7CiAgIGNvbnN0IGNoYXIqIHZhbCA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkdldFJ1bGVMYXVuY2hlcigKICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwgIlJVTEVfTEFVTkNIX0NPTVBJTEUiKTsKLSAgaWYgKHZhbCAmJiAqdmFsKSB7CisgIGlmIChjbU5vbmVtcHR5KHZhbCkpIHsKICAgICBsYXVuY2hlciA9IGNtU3RyQ2F0KHZhbCwgJyAnKTsKICAgfQogCkBAIC01MjQsODcgKzY3MSw0NyBAQAogICAgICAgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksIGNtTG9jYWxHZW5lcmF0b3I6OlNIRUxMKTsKIAogICBpZiAoZXhwbGljaXRQUCkgewotICAgIGNtTmluamFSdWxlIHJ1bGUodGhpcy0+TGFuZ3VhZ2VQcmVwcm9jZXNzUnVsZShsYW5nKSk7Ci0gICAgLy8gRXhwbGljaXQgcHJlcHJvY2Vzc2luZyBhbHdheXMgdXNlcyBhIGRlcGZpbGUuCi0gICAgcnVsZS5EZXBUeXBlID0gIiI7IC8vIG5vIGRlcHM9IGZvciBtdWx0aXBsZSBvdXRwdXRzCi0gICAgcnVsZS5EZXBGaWxlID0gIiRERVBfRklMRSI7CisgICAgLy8gQ29tYmluZWQgcHJlcHJvY2Vzc2luZyBhbmQgZGVwZW5kZW5jeSBzY2FubmluZworICAgIGNvbnN0IGF1dG8gcHBTY2FuQ29tbWFuZCA9IEdldFNjYW5Db21tYW5kKAorICAgICAgY21ha2VDbWQsIHRkaSwgbGFuZywgIiRvdXQiLCBuZWVkRHluZGVwLCAiJERZTkRFUF9JTlRFUk1FRElBVEVfRklMRSIpOworICAgIGNvbnN0IGF1dG8gcHBWYXIgPSBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9QUkVQUk9DRVNTX1NPVVJDRSIpOwogCi0gICAgY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlcjo6UnVsZVZhcmlhYmxlcyBwcFZhcnM7Ci0gICAgcHBWYXJzLkNNVGFyZ2V0TmFtZSA9IHZhcnMuQ01UYXJnZXROYW1lOwotICAgIHBwVmFycy5DTVRhcmdldFR5cGUgPSB2YXJzLkNNVGFyZ2V0VHlwZTsKLSAgICBwcFZhcnMuTGFuZ3VhZ2UgPSB2YXJzLkxhbmd1YWdlOwotICAgIHBwVmFycy5PYmplY3QgPSAiJG91dCI7IC8vIGZvciBSVUxFX0xBVU5DSF9DT01QSUxFCi0gICAgcHBWYXJzLlByZXByb2Nlc3NlZFNvdXJjZSA9ICIkb3V0IjsKLSAgICBwcFZhcnMuRGVwZW5kZW5jeUZpbGUgPSBydWxlLkRlcEZpbGUuY19zdHIoKTsKLQotICAgIC8vIFByZXByb2Nlc3NpbmcgdXNlcyB0aGUgb3JpZ2luYWwgc291cmNlLAotICAgIC8vIGNvbXBpbGF0aW9uIHVzZXMgcHJlcHJvY2Vzc2VkIG91dHB1dC4KLSAgICBwcFZhcnMuU291cmNlID0gdmFycy5Tb3VyY2U7Ci0gICAgdmFycy5Tb3VyY2UgPSAiJGluIjsKLQotICAgIC8vIFByZXByb2Nlc3NpbmcgYW5kIGNvbXBpbGF0aW9uIHVzZSB0aGUgc2FtZSBmbGFncy4KLSAgICBzdGQ6OnN0cmluZyBwcEZsYWdzID0gZmxhZ3M7Ci0KLSAgICBpZiAoIWNvbXBpbGVQUFdpdGhEZWZpbmVzKSB7Ci0gICAgICAvLyBNb3ZlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIHJ1bGUuCi0gICAgICBwcFZhcnMuRGVmaW5lcyA9IHZhcnMuRGVmaW5lczsKLSAgICAgIHZhcnMuRGVmaW5lcyA9ICIiOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBDb3B5IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIHJ1bGUuCi0gICAgICBwcFZhcnMuRGVmaW5lcyA9IHZhcnMuRGVmaW5lczsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IGluY2x1ZGUgZGlyZWN0b3JpZXMgdG8gdGhlIHByZXByb2Nlc3NvciBydWxlLiAgVGhlIEZvcnRyYW4KLSAgICAvLyBjb21waWxhdGlvbiBydWxlIHN0aWxsIG5lZWRzIHRoZW0gZm9yIHRoZSBJTkNMVURFIGRpcmVjdGl2ZS4KLSAgICBwcFZhcnMuSW5jbHVkZXMgPSB2YXJzLkluY2x1ZGVzOwotCi0gICAgLy8gSWYgdXNpbmcgYSByZXNwb25zZSBmaWxlLCBtb3ZlIGRlZmluZXMsIGluY2x1ZGVzLCBhbmQgZmxhZ3MgaW50byBpdC4KLSAgICBpZiAoIXJlc3BvbnNlRmxhZy5lbXB0eSgpKSB7Ci0gICAgICBydWxlLlJzcEZpbGUgPSAiJFJTUF9GSUxFIjsKLSAgICAgIHJ1bGUuUnNwQ29udGVudCA9Ci0gICAgICAgIGNtU3RyQ2F0KCcgJywgcHBWYXJzLkRlZmluZXMsICcgJywgcHBWYXJzLkluY2x1ZGVzLCAnICcsIHBwRmxhZ3MpOwotICAgICAgcHBGbGFncyA9IHJlc3BvbnNlRmxhZyArIHJ1bGUuUnNwRmlsZTsKLSAgICAgIHBwVmFycy5EZWZpbmVzID0gIiI7Ci0gICAgICBwcFZhcnMuSW5jbHVkZXMgPSAiIjsKLSAgICB9Ci0KLSAgICBwcFZhcnMuRmxhZ3MgPSBwcEZsYWdzLmNfc3RyKCk7Ci0KLSAgICAvLyBSdWxlIGZvciBwcmVwcm9jZXNzaW5nIHNvdXJjZSBmaWxlLgotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcENtZHM7Ci0gICAgewotICAgICAgLy8gTG9va3VwIHRoZSBleHBsaWNpdCBwcmVwcm9jZXNzaW5nIHJ1bGUuCi0gICAgICBzdGQ6OnN0cmluZyBwcFZhciA9IGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5nLCAiX1BSRVBST0NFU1NfU09VUkNFIik7Ci0gICAgICBjbUV4cGFuZExpc3QodGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0UmVxdWlyZWREZWZpbml0aW9uKHBwVmFyKSwgcHBDbWRzKTsKLSAgICB9Ci0KLSAgICBmb3IgKHN0ZDo6c3RyaW5nJiBpIDogcHBDbWRzKSB7Ci0gICAgICBpID0gY21TdHJDYXQobGF1bmNoZXIsIGkpOwotICAgICAgcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXItPkV4cGFuZFJ1bGVWYXJpYWJsZXModGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHBwVmFycyk7Ci0gICAgfQotCi0gICAgLy8gUnVuIENNYWtlIGRlcGVuZGVuY3kgc2Nhbm5lciBvbiBwcmVwcm9jZXNzZWQgb3V0cHV0LgotICAgIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGNjbWQgPQotICAgICAgICBjbVN0ckNhdChjbWFrZUNtZCwgIiAtRSBjbWFrZV9uaW5qYV9kZXBlbmRzIC0tdGRpPSIsIHRkaSwKLSAgICAgICAgICAgICAgICAgIiAtLWxhbmc9IiwgbGFuZywgIiAtLXBwPSRvdXQgLS1kZXA9JERFUF9GSUxFIik7Ci0gICAgICBpZiAobmVlZER5bmRlcCkgewotICAgICAgICBjY21kICs9ICIgLS1vYmo9JE9CSl9GSUxFIC0tZGRpPSREWU5ERVBfSU5URVJNRURJQVRFX0ZJTEUiOwotICAgICAgfQotICAgICAgcHBDbWRzLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoY2NtZCkpOwotICAgIH0KLSAgICBydWxlLkNvbW1hbmQgPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5CdWlsZENvbW1hbmRMaW5lKHBwQ21kcyk7CisgICAgYXV0byBwcFJ1bGUgPSBHZXRQcmVwcm9jZXNzU2NhblJ1bGUoCisgICAgICB0aGlzLT5MYW5ndWFnZVByZXByb2Nlc3NSdWxlKGxhbmcsIGNvbmZpZyksIHZhcnMsIHJlc3BvbnNlRmxhZywgZmxhZ3MsCisgICAgICBsYXVuY2hlciwgcnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuZ2V0KCksIHBwU2NhbkNvbW1hbmQsCisgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLCBtZi0+R2V0UmVxdWlyZWREZWZpbml0aW9uKHBwVmFyKSk7CiAKICAgICAvLyBXcml0ZSB0aGUgcnVsZSBmb3IgcHJlcHJvY2Vzc2luZyBmaWxlIG9mIHRoZSBnaXZlbiBsYW5ndWFnZS4KLSAgICBydWxlLkNvbW1lbnQgPSBjbVN0ckNhdCgiUnVsZSBmb3IgcHJlcHJvY2Vzc2luZyAiLCBsYW5nLCAiIGZpbGVzLiIpOwotICAgIHJ1bGUuRGVzY3JpcHRpb24gPSBjbVN0ckNhdCgiQnVpbGRpbmcgIiwgbGFuZywgIiBwcmVwcm9jZXNzZWQgJG91dCIpOwotICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5BZGRSdWxlKHJ1bGUpOworICAgIHBwUnVsZS5Db21tZW50ID0gY21TdHJDYXQoIlJ1bGUgZm9yIHByZXByb2Nlc3NpbmcgIiwgbGFuZywgIiBmaWxlcy4iKTsKKyAgICBwcFJ1bGUuRGVzY3JpcHRpb24gPSBjbVN0ckNhdCgiQnVpbGRpbmcgIiwgbGFuZywgIiBwcmVwcm9jZXNzZWQgJG91dCIpOworCisgICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFJ1bGUocHBSdWxlKTsKKworICAgIGlmICghY29tcGlsZVBQV2l0aERlZmluZXMpIHsKKyAgICAgIC8vIFJlbW92ZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgZnJvbSBjb21waWxhdGlvbiBzdGVwCisgICAgICB2YXJzLkRlZmluZXMgPSAiIjsKKyAgICB9CisKKyAgICAvLyBKdXN0IGRlcGVuZGVuY3kgc2Nhbm5pbmcgZm9yIGZpbGVzIHRoYXQgaGF2ZSBwcmVwcm9jZXNzaW5nIHR1cm5lZCBvZmYKKyAgICBjb25zdCBhdXRvIHNjYW5Db21tYW5kID0KKyAgICAgIEdldFNjYW5Db21tYW5kKGNtYWtlQ21kLCB0ZGksIGxhbmcsICIkaW4iLCBuZWVkRHluZGVwLCAiJG91dCIpOworCisgICAgYXV0byBzY2FuUnVsZSA9IEdldFByZXByb2Nlc3NTY2FuUnVsZSgKKyAgICAgIHRoaXMtPkxhbmd1YWdlRGVwZW5kZW5jeVJ1bGUobGFuZywgY29uZmlnKSwgdmFycywgIiIsIGZsYWdzLCBsYXVuY2hlciwKKyAgICAgIHJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmdldCgpLCBzY2FuQ29tbWFuZCwgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKSk7CisKKyAgICAvLyBXcml0ZSB0aGUgcnVsZSBmb3IgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZS4KKyAgICBzY2FuUnVsZS5Db21tZW50ID0gY21TdHJDYXQoIlJ1bGUgZm9yIGdlbmVyYXRpbmcgIiwgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkZXBlbmRlbmNpZXMgb24gbm9uLXByZXByb2Nlc3NlZCBmaWxlcy4iKTsKKyAgICBzY2FuUnVsZS5EZXNjcmlwdGlvbiA9CisgICAgICBjbVN0ckNhdCgiR2VuZXJhdGluZyAiLCBsYW5nLCAiIGRlcGVuZGVuY2llcyBmb3IgJGluIik7CisKKyAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkUnVsZShzY2FuUnVsZSk7CiAgIH0KIAogICBpZiAobmVlZER5bmRlcCkgewogICAgIC8vIFdyaXRlIHRoZSBydWxlIGZvciBuaW5qYSBkeW5kZXAgZmlsZSBnZW5lcmF0aW9uLgotICAgIGNtTmluamFSdWxlIHJ1bGUodGhpcy0+TGFuZ3VhZ2VEeW5kZXBSdWxlKGxhbmcpKTsKKyAgICBjbU5pbmphUnVsZSBydWxlKHRoaXMtPkxhbmd1YWdlRHluZGVwUnVsZShsYW5nLCBjb25maWcpKTsKICAgICAvLyBDb21tYW5kIGxpbmUgbGVuZ3RoIGlzIGFsbW9zdCBhbHdheXMgbGltaXRlZCAtPiB1c2UgcmVzcG9uc2UgZmlsZSBmb3IKICAgICAvLyBkeW5kZXAgcnVsZXMKICAgICBydWxlLlJzcEZpbGUgPSAiJG91dC5yc3AiOwpAQCAtNjI4LDEzICs3MzUsMTMgQEAKICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+QWRkUnVsZShydWxlKTsKICAgfQogCi0gIGNtTmluamFSdWxlIHJ1bGUodGhpcy0+TGFuZ3VhZ2VDb21waWxlclJ1bGUobGFuZykpOworICBjbU5pbmphUnVsZSBydWxlKHRoaXMtPkxhbmd1YWdlQ29tcGlsZXJSdWxlKGxhbmcsIGNvbmZpZykpOwogICAvLyBJZiB1c2luZyBhIHJlc3BvbnNlIGZpbGUsIG1vdmUgZGVmaW5lcywgaW5jbHVkZXMsIGFuZCBmbGFncyBpbnRvIGl0LgogICBpZiAoIXJlc3BvbnNlRmxhZy5lbXB0eSgpKSB7CiAgICAgcnVsZS5Sc3BGaWxlID0gIiRSU1BfRklMRSI7CiAgICAgcnVsZS5Sc3BDb250ZW50ID0KICAgICAgIGNtU3RyQ2F0KCcgJywgdmFycy5EZWZpbmVzLCAnICcsIHZhcnMuSW5jbHVkZXMsICcgJywgZmxhZ3MpOwotICAgIGZsYWdzID0gcmVzcG9uc2VGbGFnICsgcnVsZS5Sc3BGaWxlOworICAgIGZsYWdzID0gY21TdHJDYXQocmVzcG9uc2VGbGFnLCBydWxlLlJzcEZpbGUpOwogICAgIHZhcnMuRGVmaW5lcyA9ICIiOwogICAgIHZhcnMuSW5jbHVkZXMgPSAiIjsKICAgfQpAQCAtNjQ3LDE1ICs3NTQsMTUgQEAKICAgICBydWxlLkRlcFR5cGUgPSAibXN2YyI7CiAgICAgcnVsZS5EZXBGaWxlLmNsZWFyKCk7CiAgICAgZmxhZ3MgKz0gIiAvc2hvd0luY2x1ZGVzIjsKLSAgfSBlbHNlIGlmIChtZi0+SXNPbigiQ01BS0VfTklOSkFfQ01DTERFUFNfIiArIGxhbmcpKSB7CisgIH0gZWxzZSBpZiAobWYtPklzT24oY21TdHJDYXQoIkNNQUtFX05JTkpBX0NNQ0xERVBTXyIsIGxhbmcpKSkgewogICAgIC8vIEZvciB0aGUgTVMgcmVzb3VyY2UgY29tcGlsZXIgd2UgbmVlZCBjbWNsZGVwcywgYnV0IHNraXAgZGVwZW5kZW5jaWVzCiAgICAgLy8gZm9yIHNvdXJjZS1maWxlIHRyeV9jb21waWxlIGNhc2VzIGJlY2F1c2UgdGhleSBhcmUgYWx3YXlzIGZyZXNoLgogICAgIGlmICghbWYtPkdldElzU291cmNlRmlsZVRyeUNvbXBpbGUoKSkgewogICAgICAgcnVsZS5EZXBUeXBlID0gImdjYyI7CiAgICAgICBydWxlLkRlcEZpbGUgPSAiJERFUF9GSUxFIjsKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNsID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0NfQ09NUElMRVIiKQotICAgICAgICA/IG1mLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfQ19DT01QSUxFUiIpCi0gICAgICAgIDogbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9DWFhfQ09NUElMRVIiKTsKKyAgICAgIGF1dG8gZCA9IG1mLT5HZXREZWZpbml0aW9uKCJDTUFLRV9DX0NPTVBJTEVSIik7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBjbCA9CisgICAgICAgIGQgPyBkIDogbWYtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9DWFhfQ09NUElMRVIiKTsKICAgICAgIGNsZGVwcyA9IGNtU3RyQ2F0KCciJywgY21TeXN0ZW1Ub29sczo6R2V0Q01DbERlcHNDb21tYW5kKCksICJcIiAiLCBsYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgJyAnLCB2YXJzLlNvdXJjZSwgIiAkREVQX0ZJTEUgJG91dCBcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtZi0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0NMX1NIT1dJTkNMVURFU19QUkVGSVgiKSwKQEAgLTY2NCwxNCArNzcxLDE0IEBACiAgIH0gZWxzZSB7CiAgICAgcnVsZS5EZXBUeXBlID0gImdjYyI7CiAgICAgcnVsZS5EZXBGaWxlID0gIiRERVBfRklMRSI7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgZmxhZ3NOYW1lID0gIkNNQUtFX0RFUEZJTEVfRkxBR1NfIiArIGxhbmc7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmxhZ3NOYW1lID0gY21TdHJDYXQoIkNNQUtFX0RFUEZJTEVfRkxBR1NfIiwgbGFuZyk7CiAgICAgc3RkOjpzdHJpbmcgZGVwZmlsZUZsYWdzID0gbWYtPkdldFNhZmVEZWZpbml0aW9uKGZsYWdzTmFtZSk7CiAgICAgaWYgKCFkZXBmaWxlRmxhZ3MuZW1wdHkoKSkgewogICAgICAgY21TeXN0ZW1Ub29sczo6UmVwbGFjZVN0cmluZyhkZXBmaWxlRmxhZ3MsICI8REVQRklMRT4iLCAiJERFUF9GSUxFIik7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpSZXBsYWNlU3RyaW5nKGRlcGZpbGVGbGFncywgIjxPQkpFQ1Q+IiwgIiRvdXQiKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoZGVwZmlsZUZsYWdzLCAiPENNQUtFX0NfQ09NUElMRVI+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0NfQ09NUElMRVIiKSk7Ci0gICAgICBmbGFncyArPSAiICIgKyBkZXBmaWxlRmxhZ3M7CisgICAgICBmbGFncyArPSBjbVN0ckNhdCgnICcsIGRlcGZpbGVGbGFncyk7CiAgICAgfQogICB9CiAKQEAgLTY5NCw3ICs4MDEsNyBAQAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21waWxlQ21kID0gbWYtPkdldFJlcXVpcmVkRGVmaW5pdGlvbihjbWRWYXIpOwogICAgIGNtRXhwYW5kTGlzdChjb21waWxlQ21kLCBjb21waWxlQ21kcyk7CiAgIH0gZWxzZSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgY21kVmFyID0gIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFX09CSkVDVCI7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgY21kVmFyID0gY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfQ09NUElMRV9PQkpFQ1QiKTsKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29tcGlsZUNtZCA9IG1mLT5HZXRSZXF1aXJlZERlZmluaXRpb24oY21kVmFyKTsKICAgICBjbUV4cGFuZExpc3QoY29tcGlsZUNtZCwgY29tcGlsZUNtZHMpOwogICB9CkBAIC03MDQsNTEgKzgxMSw1OCBAQAogICBpZiAoIWNvbXBpbGVDbWRzLmVtcHR5KCkgJiYKICAgICAgIChsYW5nID09ICJDIiB8fCBsYW5nID09ICJDWFgiIHx8IGxhbmcgPT0gIkZvcnRyYW4iIHx8IGxhbmcgPT0gIkNVREEiIHx8CiAgICAgICAgbGFuZyA9PSAiT0JKQyIgfHwgbGFuZyA9PSAiT0JKQ1hYIikpIHsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCBjbGF1bmNoZXJfcHJvcCA9IGxhbmcgKyAiX0NPTVBJTEVSX0xBVU5DSEVSIjsKLSAgICBjb25zdCBjaGFyKiBjbGF1bmNoZXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGNsYXVuY2hlcl9wcm9wKTsKLSAgICBpZiAoY2xhdW5jaGVyICYmICpjbGF1bmNoZXIpIHsKLSAgICAgIGNvbXBpbGVyTGF1bmNoZXIgPSBjbGF1bmNoZXI7CisgICAgc3RkOjpzdHJpbmcgY29uc3QgY2xhdW5jaGVyX3Byb3AgPSBjbVN0ckNhdChsYW5nLCAiX0NPTVBJTEVSX0xBVU5DSEVSIik7CisgICAgY21Qcm9wIGNsYXVuY2hlciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoY2xhdW5jaGVyX3Byb3ApOworICAgIGlmIChjbU5vbmVtcHR5KGNsYXVuY2hlcikpIHsKKyAgICAgIGNvbXBpbGVyTGF1bmNoZXIgPSAqY2xhdW5jaGVyOwogICAgIH0KICAgfQogCiAgIC8vIE1heWJlIGluc2VydCBhbiBpbmNsdWRlLXdoYXQteW91LXVzZSBydW5uZXIuCiAgIGlmICghY29tcGlsZUNtZHMuZW1wdHkoKSAmJiAobGFuZyA9PSAiQyIgfHwgbGFuZyA9PSAiQ1hYIikpIHsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCBpd3l1X3Byb3AgPSBsYW5nICsgIl9JTkNMVURFX1dIQVRfWU9VX1VTRSI7Ci0gICAgY29uc3QgY2hhciogaXd5dSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoaXd5dV9wcm9wKTsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCB0aWR5X3Byb3AgPSBsYW5nICsgIl9DTEFOR19USURZIjsKLSAgICBjb25zdCBjaGFyKiB0aWR5ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSh0aWR5X3Byb3ApOwotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGxpbnRfcHJvcCA9IGxhbmcgKyAiX0NQUExJTlQiOwotICAgIGNvbnN0IGNoYXIqIGNwcGxpbnQgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGNwcGxpbnRfcHJvcCk7Ci0gICAgc3RkOjpzdHJpbmcgY29uc3QgY3BwY2hlY2tfcHJvcCA9IGxhbmcgKyAiX0NQUENIRUNLIjsKLSAgICBjb25zdCBjaGFyKiBjcHBjaGVjayA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoY3BwY2hlY2tfcHJvcCk7Ci0gICAgaWYgKChpd3l1ICYmICppd3l1KSB8fCAodGlkeSAmJiAqdGlkeSkgfHwgKGNwcGxpbnQgJiYgKmNwcGxpbnQpIHx8Ci0gICAgICAgIChjcHBjaGVjayAmJiAqY3BwY2hlY2spKSB7CisgICAgc3RkOjpzdHJpbmcgY29uc3QgaXd5dV9wcm9wID0gY21TdHJDYXQobGFuZywgIl9JTkNMVURFX1dIQVRfWU9VX1VTRSIpOworICAgIGNtUHJvcCBpd3l1ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShpd3l1X3Byb3ApOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHRpZHlfcHJvcCA9IGNtU3RyQ2F0KGxhbmcsICJfQ0xBTkdfVElEWSIpOworICAgIGNtUHJvcCB0aWR5ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSh0aWR5X3Byb3ApOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGxpbnRfcHJvcCA9IGNtU3RyQ2F0KGxhbmcsICJfQ1BQTElOVCIpOworICAgIGNtUHJvcCBjcHBsaW50ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShjcHBsaW50X3Byb3ApOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGNwcGNoZWNrX3Byb3AgPSBjbVN0ckNhdChsYW5nLCAiX0NQUENIRUNLIik7CisgICAgY21Qcm9wIGNwcGNoZWNrID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShjcHBjaGVja19wcm9wKTsKKyAgICBpZiAoY21Ob25lbXB0eShpd3l1KSB8fCBjbU5vbmVtcHR5KHRpZHkpIHx8IGNtTm9uZW1wdHkoY3BwbGludCkgfHwKKyAgICAgICAgY21Ob25lbXB0eShjcHBjaGVjaykpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHJ1bl9pd3l1ID0gY21TdHJDYXQoY21ha2VDbWQsICIgLUUgX19ydW5fY29fY29tcGlsZSIpOwogICAgICAgaWYgKCFjb21waWxlckxhdW5jaGVyLmVtcHR5KCkpIHsKICAgICAgICAgLy8gSW4gX19ydW5fY29fY29tcGlsZSBjYXNlIHRoZSBsYXVuY2hlciBjb21tYW5kIGlzIHN1cHBsaWVkCiAgICAgICAgIC8vIHZpYSAtLWxhdW5jaGVyPTxtYXliZS1saXN0PiBhbmQgY29uc3VtZWQKLSAgICAgICAgcnVuX2l3eXUgKz0gIiAtLWxhdW5jaGVyPSI7Ci0gICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbChjb21waWxlckxhdW5jaGVyKTsKKyAgICAgICAgcnVuX2l3eXUgKz0KKyAgICAgICAgICBjbVN0ckNhdCgiIC0tbGF1bmNoZXI9IiwKKyAgICAgICAgICAgICAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+RXNjYXBlRm9yU2hlbGwoY29tcGlsZXJMYXVuY2hlcikpOwogICAgICAgICBjb21waWxlckxhdW5jaGVyLmNsZWFyKCk7CiAgICAgICB9Ci0gICAgICBpZiAoaXd5dSAmJiAqaXd5dSkgewotICAgICAgICBydW5faXd5dSArPSAiIC0taXd5dT0iOwotICAgICAgICBydW5faXd5dSArPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Fc2NhcGVGb3JTaGVsbChpd3l1KTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGl3eXUpKSB7CisgICAgICAgIHJ1bl9pd3l1ICs9IGNtU3RyQ2F0KCIgLS1pd3l1PSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkVzY2FwZUZvclNoZWxsKCppd3l1KSk7CiAgICAgICB9Ci0gICAgICBpZiAodGlkeSAmJiAqdGlkeSkgeworICAgICAgaWYgKGNtTm9uZW1wdHkodGlkeSkpIHsKICAgICAgICAgcnVuX2l3eXUgKz0gIiAtLXRpZHk9IjsKLSAgICAgICAgcnVuX2l3eXUgKz0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+RXNjYXBlRm9yU2hlbGwodGlkeSk7CisgICAgICAgIGNvbnN0IGNoYXIqIGRyaXZlck1vZGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKKyAgICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZywgIl9DTEFOR19USURZX0RSSVZFUl9NT0RFIikpOworICAgICAgICBpZiAoIWNtTm9uZW1wdHkoZHJpdmVyTW9kZSkpIHsKKyAgICAgICAgICBkcml2ZXJNb2RlID0gbGFuZyA9PSAiQyIgPyAiZ2NjIiA6ICJnKysiOworICAgICAgICB9CisgICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkVzY2FwZUZvclNoZWxsKAorICAgICAgICAgIGNtU3RyQ2F0KCp0aWR5LCAiOy0tZXh0cmEtYXJnLWJlZm9yZT0tLWRyaXZlci1tb2RlPSIsIGRyaXZlck1vZGUpKTsKICAgICAgIH0KLSAgICAgIGlmIChjcHBsaW50ICYmICpjcHBsaW50KSB7Ci0gICAgICAgIHJ1bl9pd3l1ICs9ICIgLS1jcHBsaW50PSI7Ci0gICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkVzY2FwZUZvclNoZWxsKGNwcGxpbnQpOworICAgICAgaWYgKGNtTm9uZW1wdHkoY3BwbGludCkpIHsKKyAgICAgICAgcnVuX2l3eXUgKz0gY21TdHJDYXQoCisgICAgICAgICAgIiAtLWNwcGxpbnQ9IiwgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+RXNjYXBlRm9yU2hlbGwoKmNwcGxpbnQpKTsKICAgICAgIH0KLSAgICAgIGlmIChjcHBjaGVjayAmJiAqY3BwY2hlY2spIHsKLSAgICAgICAgcnVuX2l3eXUgKz0gIiAtLWNwcGNoZWNrPSI7Ci0gICAgICAgIHJ1bl9pd3l1ICs9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkVzY2FwZUZvclNoZWxsKGNwcGNoZWNrKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGNwcGNoZWNrKSkgeworICAgICAgICBydW5faXd5dSArPQorICAgICAgICAgIGNtU3RyQ2F0KCIgLS1jcHBjaGVjaz0iLAorICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkVzY2FwZUZvclNoZWxsKCpjcHBjaGVjaykpOwogICAgICAgfQotICAgICAgaWYgKCh0aWR5ICYmICp0aWR5KSB8fCAoY3BwbGludCAmJiAqY3BwbGludCkgfHwKLSAgICAgICAgICAoY3BwY2hlY2sgJiYgKmNwcGNoZWNrKSkgeworICAgICAgaWYgKGNtTm9uZW1wdHkodGlkeSkgfHwgY21Ob25lbXB0eShjcHBsaW50KSB8fCBjbU5vbmVtcHR5KGNwcGNoZWNrKSkgewogICAgICAgICBydW5faXd5dSArPSAiIC0tc291cmNlPSRpbiI7CiAgICAgICB9CiAgICAgICBydW5faXd5dSArPSAiIC0tICI7CkBAIC03NjcsNyArODgxLDcgQEAKICAgICAgICAgaSA9IHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5Fc2NhcGVGb3JTaGVsbChpKTsKICAgICAgIH0KICAgICB9Ci0gICAgY29tcGlsZUNtZHMuZnJvbnQoKS5pbnNlcnQoMCwgY21Kb2luKGFyZ3MsICIgIikgKyAiICIpOworICAgIGNvbXBpbGVDbWRzLmZyb250KCkuaW5zZXJ0KDAsIGNtU3RyQ2F0KGNtSm9pbihhcmdzLCAiICIpLCAnICcpKTsKICAgfQogCiAgIGlmICghY29tcGlsZUNtZHMuZW1wdHkoKSkgewpAQCAtNzg4LDcwICs5MDIsNzUgQEAKICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPkFkZFJ1bGUocnVsZSk7CiB9CiAKLXZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6V3JpdGVPYmplY3RCdWlsZFN0YXRlbWVudHMoKQordm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50cygKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVDb25maWcsCisgIGJvb2wgZmlyc3RGb3JDb25maWcpCiB7CiAgIC8vIFdyaXRlIGNvbW1lbnRzLgotICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIodGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCkpOwotICB0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKQorICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yOjpXcml0ZURpdmlkZXIodGhpcy0+R2V0SW1wbEZpbGVTdHJlYW0oZmlsZUNvbmZpZykpOworICB0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKQogICAgIDw8ICIjIE9iamVjdCBidWlsZCBzdGF0ZW1lbnRzIGZvciAiCiAgICAgPDwgY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCktPkdldFR5cGUoKSkKICAgICA8PCAiIHRhcmdldCAiIDw8IHRoaXMtPkdldFRhcmdldE5hbWUoKSA8PCAiXG5cbiI7CiAKICAgewogICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGN1c3RvbUNvbW1hbmRzOwotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q3VzdG9tQ29tbWFuZHMoY3VzdG9tQ29tbWFuZHMsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q3VzdG9tQ29tbWFuZHMoY3VzdG9tQ29tbWFuZHMsIGNvbmZpZyk7CiAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNmIDogY3VzdG9tQ29tbWFuZHMpIHsKICAgICAgIGNtQ3VzdG9tQ29tbWFuZCBjb25zdCogY2MgPSBzZi0+R2V0Q3VzdG9tQ29tbWFuZCgpOwogICAgICAgdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKS0+QWRkQ3VzdG9tQ29tbWFuZFRhcmdldCgKICAgICAgICAgY2MsIHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpKTsKICAgICAgIC8vIFJlY29yZCB0aGUgY3VzdG9tIGNvbW1hbmRzIGZvciB0aGlzIHRhcmdldC4gVGhlIGNvbnRhaW5lciBpcyB1c2VkCiAgICAgICAvLyBpbiBXcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50IHdoZW4gY2FsbGVkIGluIGEgbG9vcCBiZWxvdy4KLSAgICAgIHRoaXMtPkN1c3RvbUNvbW1hbmRzLnB1c2hfYmFjayhjYyk7CisgICAgICB0aGlzLT5Db25maWdzW2NvbmZpZ10uQ3VzdG9tQ29tbWFuZHMucHVzaF9iYWNrKGNjKTsKICAgICB9CiAgIH0KICAgewogICAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGhlYWRlclNvdXJjZXM7Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRIZWFkZXJTb3VyY2VzKGhlYWRlclNvdXJjZXMsIHRoaXMtPkNvbmZpZ05hbWUpOworICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0SGVhZGVyU291cmNlcyhoZWFkZXJTb3VyY2VzLCBjb25maWcpOwogICAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+R2VuZXJhdGVNYWNPU1hDb250ZW50U3RhdGVtZW50cygKLSAgICAgIGhlYWRlclNvdXJjZXMsIHRoaXMtPk1hY09TWENvbnRlbnRHZW5lcmF0b3IuZ2V0KCkpOworICAgICAgaGVhZGVyU291cmNlcywgdGhpcy0+Q29uZmlnc1tmaWxlQ29uZmlnXS5NYWNPU1hDb250ZW50R2VuZXJhdG9yLmdldCgpLAorICAgICAgY29uZmlnKTsKICAgfQogICB7CiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gZXh0cmFTb3VyY2VzOwotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXh0cmFTb3VyY2VzKGV4dHJhU291cmNlcywgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeHRyYVNvdXJjZXMoZXh0cmFTb3VyY2VzLCBjb25maWcpOwogICAgIHRoaXMtPk9TWEJ1bmRsZUdlbmVyYXRvci0+R2VuZXJhdGVNYWNPU1hDb250ZW50U3RhdGVtZW50cygKLSAgICAgIGV4dHJhU291cmNlcywgdGhpcy0+TWFjT1NYQ29udGVudEdlbmVyYXRvci5nZXQoKSk7CisgICAgICBleHRyYVNvdXJjZXMsIHRoaXMtPkNvbmZpZ3NbZmlsZUNvbmZpZ10uTWFjT1NYQ29udGVudEdlbmVyYXRvci5nZXQoKSwKKyAgICAgIGNvbmZpZyk7CiAgIH0KLSAgeworICBpZiAoZmlyc3RGb3JDb25maWcpIHsKICAgICBjb25zdCBjaGFyKiBwY2hFeHRlbnNpb24gPQogICAgICAgR2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfUENIX0VYVEVOU0lPTiIpOwogCiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gZXh0ZXJuYWxPYmplY3RzOwotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXh0ZXJuYWxPYmplY3RzKGV4dGVybmFsT2JqZWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db25maWdOYW1lKTsKKyAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4dGVybmFsT2JqZWN0cyhleHRlcm5hbE9iamVjdHMsIGNvbmZpZyk7CiAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNmIDogZXh0ZXJuYWxPYmplY3RzKSB7Ci0gICAgICBjb25zdCBhdXRvIG9iamVjdEZpbGVOYW1lID0gdGhpcy0+R2V0U291cmNlRmlsZVBhdGgoc2YpOworICAgICAgYXV0byBvYmplY3RGaWxlTmFtZSA9IHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5FeHBhbmRDRkdJbnREaXIoCisgICAgICAgIHRoaXMtPkdldFNvdXJjZUZpbGVQYXRoKHNmKSwgY29uZmlnKTsKICAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6U3RyaW5nRW5kc1dpdGgob2JqZWN0RmlsZU5hbWUsIHBjaEV4dGVuc2lvbikpIHsKLSAgICAgICAgdGhpcy0+T2JqZWN0cy5wdXNoX2JhY2sob2JqZWN0RmlsZU5hbWUpOworICAgICAgICB0aGlzLT5Db25maWdzW2NvbmZpZ10uT2JqZWN0cy5wdXNoX2JhY2sob2JqZWN0RmlsZU5hbWUpOwogICAgICAgfQogICAgIH0KICAgfQogCiAgIHsKICAgICBjbU5pbmphQnVpbGQgYnVpbGQoInBob255Iik7Ci0gICAgYnVpbGQuQ29tbWVudCA9ICJPcmRlci1vbmx5IHBob255IHRhcmdldCBmb3IgIiArIHRoaXMtPkdldFRhcmdldE5hbWUoKTsKLSAgICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjayh0aGlzLT5PcmRlckRlcGVuZHNUYXJnZXRGb3JUYXJnZXQoKSk7CisgICAgYnVpbGQuQ29tbWVudCA9CisgICAgICBjbVN0ckNhdCgiT3JkZXItb25seSBwaG9ueSB0YXJnZXQgZm9yICIsIHRoaXMtPkdldFRhcmdldE5hbWUoKSk7CisgICAgYnVpbGQuT3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+T3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KGNvbmZpZykpOwogCiAgICAgY21OaW5qYURlcHMmIG9yZGVyT25seURlcHMgPSBidWlsZC5PcmRlck9ubHlEZXBzOwogICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkFwcGVuZFRhcmdldERlcGVuZHMoCi0gICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIG9yZGVyT25seURlcHMsIERlcGVuZE9uVGFyZ2V0T3JkZXJpbmcpOworICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBvcmRlck9ubHlEZXBzLCBjb25maWcsIGZpbGVDb25maWcsCisgICAgICBEZXBlbmRPblRhcmdldE9yZGVyaW5nKTsKIAogICAgIC8vIEFkZCBvcmRlci1vbmx5IGRlcGVuZGVuY2llcyBvbiBvdGhlciBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldC4KLSAgICBjbUFwcGVuZChvcmRlck9ubHlEZXBzLCB0aGlzLT5FeHRyYUZpbGVzKTsKKyAgICBjbTo6YXBwZW5kKG9yZGVyT25seURlcHMsIHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5FeHRyYUZpbGVzKTsKIAogICAgIC8vIEFkZCBvcmRlci1vbmx5IGRlcGVuZGVuY2llcyBvbiBjdXN0b20gY29tbWFuZCBvdXRwdXRzLgotICAgIGZvciAoY21DdXN0b21Db21tYW5kIGNvbnN0KiBjYyA6IHRoaXMtPkN1c3RvbUNvbW1hbmRzKSB7Ci0gICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKCpjYywgdGhpcy0+R2V0Q29uZmlnTmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpKTsKKyAgICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCogY2MgOiB0aGlzLT5Db25maWdzW2NvbmZpZ10uQ3VzdG9tQ29tbWFuZHMpIHsKKyAgICAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coKmNjLCBjb25maWcsIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCkpOwogICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjY291dHB1dHMgPSBjY2cuR2V0T3V0cHV0cygpOwogICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjY2J5cHJvZHVjdHMgPSBjY2cuR2V0Qnlwcm9kdWN0cygpOwogICAgICAgc3RkOjp0cmFuc2Zvcm0oY2NvdXRwdXRzLmJlZ2luKCksIGNjb3V0cHV0cy5lbmQoKSwKQEAgLTg3NywyNiArOTk2LDI3IEBACiAgICAgICBvcmRlck9ubHlEZXBzLnB1c2hfYmFjayh0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGd0RGlyKSk7CiAgICAgfQogCi0gICAgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlQnVpbGQodGhpcy0+R2V0QnVpbGRGaWxlU3RyZWFtKCksIGJ1aWxkKTsKKyAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCh0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCk7CiAgIH0KIAogICB7CiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gb2JqZWN0U291cmNlczsKLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE9iamVjdFNvdXJjZXMob2JqZWN0U291cmNlcywgdGhpcy0+Q29uZmlnTmFtZSk7CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRPYmplY3RTb3VyY2VzKG9iamVjdFNvdXJjZXMsIGNvbmZpZyk7CiAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNmIDogb2JqZWN0U291cmNlcykgewotICAgICAgdGhpcy0+V3JpdGVPYmplY3RCdWlsZFN0YXRlbWVudChzZik7CisgICAgICB0aGlzLT5Xcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50KHNmLCBjb25maWcsIGZpbGVDb25maWcsIGZpcnN0Rm9yQ29uZmlnKTsKICAgICB9CiAgIH0KIAotICBmb3IgKGF1dG8gY29uc3QmIGxhbmdERElGaWxlcyA6IHRoaXMtPkRESUZpbGVzKSB7CisgIGZvciAoYXV0byBjb25zdCYgbGFuZ0RESUZpbGVzIDogdGhpcy0+Q29uZmlnc1tjb25maWddLkRESUZpbGVzKSB7CiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmd1YWdlID0gbGFuZ0RESUZpbGVzLmZpcnN0OwogICAgIGNtTmluamFEZXBzIGNvbnN0JiBkZGlGaWxlcyA9IGxhbmdERElGaWxlcy5zZWNvbmQ7CiAKLSAgICBjbU5pbmphQnVpbGQgYnVpbGQodGhpcy0+TGFuZ3VhZ2VEeW5kZXBSdWxlKGxhbmd1YWdlKSk7Ci0gICAgYnVpbGQuT3V0cHV0cy5wdXNoX2JhY2sodGhpcy0+R2V0RHluZGVwRmlsZVBhdGgobGFuZ3VhZ2UpKTsKKyAgICBjbU5pbmphQnVpbGQgYnVpbGQodGhpcy0+TGFuZ3VhZ2VEeW5kZXBSdWxlKGxhbmd1YWdlLCBjb25maWcpKTsKKyAgICBidWlsZC5PdXRwdXRzLnB1c2hfYmFjayh0aGlzLT5HZXREeW5kZXBGaWxlUGF0aChsYW5ndWFnZSwgY29uZmlnKSk7CiAgICAgYnVpbGQuRXhwbGljaXREZXBzID0gZGRpRmlsZXM7CiAKLSAgICB0aGlzLT5Xcml0ZVRhcmdldERlcGVuZEluZm8obGFuZ3VhZ2UpOworICAgIHRoaXMtPldyaXRlVGFyZ2V0RGVwZW5kSW5mbyhsYW5ndWFnZSwgY29uZmlnKTsKIAogICAgIC8vIE1ha2Ugc3VyZSBkeW5kZXAgZmlsZXMgZm9yIGFsbCBvdXIgZGVwZW5kZW5jaWVzIGhhdmUgYWxyZWFkeQogICAgIC8vIGJlZW4gZ2VuZXJhdGVkIHNvIHRoYXQgdGhlICc8TEFORz5Nb2R1bGVzLmpzb24nIGZpbGVzIHRoZXkKQEAgLTkwNyw1MyArMTAyNywxMzUgQEAKICAgICAvLyByZWZhY3RvcmluZyB0aGUgTmluamEgZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIHRhcmdldHMgaW4KICAgICAvLyBkZXBlbmRlbmN5IG9yZGVyIHNvIHRoYXQgd2UgY2FuIGNvbGxlY3QgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4KICAgICB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5BcHBlbmRUYXJnZXREZXBlbmRzKAotICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LCBidWlsZC5PcmRlck9ubHlEZXBzLCBEZXBlbmRPblRhcmdldEFydGlmYWN0KTsKKyAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCwgYnVpbGQuT3JkZXJPbmx5RGVwcywgY29uZmlnLCBmaWxlQ29uZmlnLAorICAgICAgRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CiAKLSAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgYnVpbGQpOworICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGZpbGVDb25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkKTsKICAgfQogCi0gIHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpIDw8ICJcbiI7CisgIHRoaXMtPkdldEltcGxGaWxlU3RyZWFtKGZpbGVDb25maWcpIDw8ICJcbiI7CiAKLSAgaWYgKCF0aGlzLT5Td2lmdE91dHB1dE1hcC5lbXB0eSgpKSB7CisgIGlmICghdGhpcy0+Q29uZmlnc1tjb25maWddLlN3aWZ0T3V0cHV0TWFwLmVtcHR5KCkpIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCBtYXBGaWxlUGF0aCA9Ci0gICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKSArICIvb3V0cHV0LWZpbGUtbWFwLmpzb24iOwotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHRhcmdldFN3aWZ0RGVwc1BhdGggPSBbdGhpc10oKSAtPiBzdGQ6OnN0cmluZyB7CisgICAgICBjbVN0ckNhdCh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKSwgJy8nLCBjb25maWcsICcvJywKKyAgICAgICAgICAgICAgICJvdXRwdXQtZmlsZS1tYXAuanNvbiIpOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHRhcmdldFN3aWZ0RGVwc1BhdGggPSBbdGhpcywgY29uZmlnXSgpIC0+IHN0ZDo6c3RyaW5nIHsKICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0IGNvbnN0KiB0YXJnZXQgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQ7Ci0gICAgICBpZiAoY29uc3QgY2hhciogbmFtZSA9IHRhcmdldC0+R2V0UHJvcGVydHkoIlN3aWZ0X0RFUEVOREVOQ0lFU19GSUxFIikpIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICBpZiAoY21Qcm9wIG5hbWUgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJTd2lmdF9ERVBFTkRFTkNJRVNfRklMRSIpKSB7CisgICAgICAgIHJldHVybiAqbmFtZTsKICAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGFyZ2V0LT5HZXRTdXBwb3J0RGlyZWN0b3J5KCkgKyAiLyIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldE5hbWUoKSArICIuc3dpZnRkZXBzIik7CisgICAgICByZXR1cm4gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKAorICAgICAgICBjbVN0ckNhdCh0YXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKSwgJy8nLCBjb25maWcsICcvJywKKyAgICAgICAgICAgICAgICAgdGFyZ2V0LT5HZXROYW1lKCksICIuc3dpZnRkZXBzIikpOwogICAgIH0oKTsKIAogICAgIC8vIGJ1aWxkIHRoZSBnbG9iYWwgdGFyZ2V0IGRlcGVuZGVuY2llcwogICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBsZS9zd2lmdC9ibG9iL21hc3Rlci9kb2NzL0RyaXZlci5tZCNvdXRwdXQtZmlsZS1tYXBzCiAgICAgSnNvbjo6VmFsdWUgZGVwcyhKc29uOjpvYmplY3RWYWx1ZSk7CiAgICAgZGVwc1sic3dpZnQtZGVwZW5kZW5jaWVzIl0gPSB0YXJnZXRTd2lmdERlcHNQYXRoOwotICAgIHRoaXMtPlN3aWZ0T3V0cHV0TWFwWyIiXSA9IGRlcHM7CisgICAgdGhpcy0+Q29uZmlnc1tjb25maWddLlN3aWZ0T3V0cHV0TWFwWyIiXSA9IGRlcHM7CiAKICAgICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0gb3V0cHV0KG1hcEZpbGVQYXRoKTsKLSAgICBvdXRwdXQgPDwgdGhpcy0+U3dpZnRPdXRwdXRNYXA7CisgICAgb3V0cHV0IDw8IHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5Td2lmdE91dHB1dE1hcDsKICAgfQogfQogCituYW1lc3BhY2UgeworY21OaW5qYUJ1aWxkIEdldFByZXByb2Nlc3NPclNjYW5CdWlsZCgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHJ1bGVOYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgcHBGaWxlTmFtZSwgYm9vbCBjb21waWxlUFAsCisgIGJvb2wgY29tcGlsZVBQV2l0aERlZmluZXMsIGNtTmluamFCdWlsZCYgb2JqQnVpbGQsIGNtTmluamFWYXJzJiB2YXJzLAorICBjb25zdCBzdGQ6OnN0cmluZyYgZGVwRmlsZU5hbWUsIGJvb2wgbmVlZER5bmRlcCwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG9iamVjdEZpbGVOYW1lKQoreworICAvLyBFeHBsaWNpdCBwcmVwcm9jZXNzaW5nIGFuZCBkZXBlbmRlbmN5CisgIGNtTmluamFCdWlsZCBwcEJ1aWxkKHJ1bGVOYW1lKTsKKworICBpZiAoIXBwRmlsZU5hbWUuZW1wdHkoKSkgeworICAgIHBwQnVpbGQuT3V0cHV0cy5wdXNoX2JhY2socHBGaWxlTmFtZSk7CisgICAgcHBCdWlsZC5Sc3BGaWxlID0gY21TdHJDYXQocHBGaWxlTmFtZSwgIi5yc3AiKTsKKyAgfSBlbHNlIHsKKyAgICBwcEJ1aWxkLlJzcEZpbGUgPSAiJG91dC5yc3AiOworICB9CisKKyAgaWYgKGNvbXBpbGVQUCkgeworICAgIC8vIE1vdmUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIHRvIHRoZSBwcmVwcm9jZXNzaW5nIGJ1aWxkIHN0YXRlbWVudC4KKyAgICBzdGQ6OnN3YXAocHBCdWlsZC5FeHBsaWNpdERlcHMsIG9iakJ1aWxkLkV4cGxpY2l0RGVwcyk7CisgICAgc3RkOjpzd2FwKHBwQnVpbGQuSW1wbGljaXREZXBzLCBvYmpCdWlsZC5JbXBsaWNpdERlcHMpOworICAgIHN0ZDo6c3dhcChwcEJ1aWxkLk9yZGVyT25seURlcHMsIG9iakJ1aWxkLk9yZGVyT25seURlcHMpOworICAgIHN0ZDo6c3dhcChwcEJ1aWxkLlZhcmlhYmxlc1siSU5fQUJTIl0sIHZhcnNbIklOX0FCUyJdKTsKKworICAgIC8vIFRoZSBhY3R1YWwgY29tcGlsYXRpb24gd2lsbCBub3cgdXNlIHRoZSBwcmVwcm9jZXNzZWQgc291cmNlLgorICAgIG9iakJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2socHBGaWxlTmFtZSk7CisgIH0gZWxzZSB7CisgICAgLy8gQ29weSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgdG8gdGhlIHByZXByb2Nlc3NpbmcgYnVpbGQgc3RhdGVtZW50LgorICAgIHBwQnVpbGQuRXhwbGljaXREZXBzID0gb2JqQnVpbGQuRXhwbGljaXREZXBzOworICAgIHBwQnVpbGQuSW1wbGljaXREZXBzID0gb2JqQnVpbGQuSW1wbGljaXREZXBzOworICAgIHBwQnVpbGQuT3JkZXJPbmx5RGVwcyA9IG9iakJ1aWxkLk9yZGVyT25seURlcHM7CisgICAgcHBCdWlsZC5WYXJpYWJsZXNbIklOX0FCUyJdID0gdmFyc1siSU5fQUJTIl07CisgIH0KKworICAvLyBQcmVwcm9jZXNzaW5nIGFuZCBjb21waWxhdGlvbiBnZW5lcmFsbHkgdXNlIHRoZSBzYW1lIGZsYWdzLgorICBwcEJ1aWxkLlZhcmlhYmxlc1siRkxBR1MiXSA9IHZhcnNbIkZMQUdTIl07CisKKyAgaWYgKGNvbXBpbGVQUCAmJiAhY29tcGlsZVBQV2l0aERlZmluZXMpIHsKKyAgICAvLyBNb3ZlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIGJ1aWxkIHN0YXRlbWVudC4KKyAgICBzdGQ6OnN3YXAocHBCdWlsZC5WYXJpYWJsZXNbIkRFRklORVMiXSwgdmFyc1siREVGSU5FUyJdKTsKKyAgfSBlbHNlIHsKKyAgICAvLyBDb3B5IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIGJ1aWxkIHN0YXRlbWVudC4KKyAgICBwcEJ1aWxkLlZhcmlhYmxlc1siREVGSU5FUyJdID0gdmFyc1siREVGSU5FUyJdOworICB9CisKKyAgLy8gQ29weSBpbmNsdWRlIGRpcmVjdG9yaWVzIHRvIHRoZSBwcmVwcm9jZXNzb3IgYnVpbGQgc3RhdGVtZW50LiAgVGhlCisgIC8vIEZvcnRyYW4gY29tcGlsYXRpb24gYnVpbGQgc3RhdGVtZW50IHN0aWxsIG5lZWRzIHRoZW0gZm9yIHRoZSBJTkNMVURFCisgIC8vIGRpcmVjdGl2ZS4KKyAgcHBCdWlsZC5WYXJpYWJsZXNbIklOQ0xVREVTIl0gPSB2YXJzWyJJTkNMVURFUyJdOworCisgIC8vIEV4cGxpY2l0IHByZXByb2Nlc3NpbmcgYWx3YXlzIHVzZXMgYSBkZXBmaWxlLgorICBwcEJ1aWxkLlZhcmlhYmxlc1siREVQX0ZJTEUiXSA9IGRlcEZpbGVOYW1lOworICBpZiAoY29tcGlsZVBQKSB7CisgICAgLy8gVGhlIGFjdHVhbCBjb21waWxhdGlvbiBkb2VzIG5vdCBuZWVkIGEgZGVwZmlsZSBiZWNhdXNlIGl0CisgICAgLy8gZGVwZW5kcyBvbiB0aGUgYWxyZWFkeS1wcmVwcm9jZXNzZWQgc291cmNlLgorICAgIHZhcnMuZXJhc2UoIkRFUF9GSUxFIik7CisgIH0KKworICBpZiAobmVlZER5bmRlcCkgeworICAgIC8vIFRlbGwgZGVwZW5kZW5jeSBzY2FubmVyIHRoZSBvYmplY3QgZmlsZSB0aGF0IHdpbGwgcmVzdWx0IGZyb20KKyAgICAvLyBjb21waWxpbmcgdGhlIHNvdXJjZS4KKyAgICBwcEJ1aWxkLlZhcmlhYmxlc1siT0JKX0ZJTEUiXSA9IG9iamVjdEZpbGVOYW1lOworCisgICAgLy8gVGVsbCBkZXBlbmRlbmN5IHNjYW5uZXIgd2hlcmUgdG8gc3RvcmUgZHluZGVwIGludGVybWVkaWF0ZSByZXN1bHRzLgorICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGRkaUZpbGUgPSBjbVN0ckNhdChvYmplY3RGaWxlTmFtZSwgIi5kZGkiKTsKKyAgICBpZiAocHBGaWxlTmFtZS5lbXB0eSgpKSB7CisgICAgICBwcEJ1aWxkLk91dHB1dHMucHVzaF9iYWNrKGRkaUZpbGUpOworICAgIH0gZWxzZSB7CisgICAgICBwcEJ1aWxkLlZhcmlhYmxlc1siRFlOREVQX0lOVEVSTUVESUFURV9GSUxFIl0gPSBkZGlGaWxlOworICAgICAgcHBCdWlsZC5JbXBsaWNpdE91dHMucHVzaF9iYWNrKGRkaUZpbGUpOworICAgIH0KKyAgfQorICByZXR1cm4gcHBCdWlsZDsKK30KK30KKwogdm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50KAotICBjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSkKKyAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcsCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlQ29uZmlnLCBib29sIGZpcnN0Rm9yQ29uZmlnKQogewogICBzdGQ6OnN0cmluZyBjb25zdCBsYW5ndWFnZSA9IHNvdXJjZS0+R2V0TGFuZ3VhZ2UoKTsKICAgc3RkOjpzdHJpbmcgY29uc3Qgc291cmNlRmlsZU5hbWUgPQogICAgIGxhbmd1YWdlID09ICJSQyIgPyBzb3VyY2UtPkdldEZ1bGxQYXRoKCkgOiB0aGlzLT5HZXRTb3VyY2VGaWxlUGF0aChzb3VyY2UpOwotICBzdGQ6OnN0cmluZyBjb25zdCBvYmplY3REaXIgPQotICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKSk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IG9iamVjdERpciA9IHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCgKKyAgICBjbVN0ckNhdCh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFN1cHBvcnREaXJlY3RvcnkoKSwKKyAgICAgICAgICAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+Q29uZmlnRGlyZWN0b3J5KGNvbmZpZykpKTsKICAgc3RkOjpzdHJpbmcgY29uc3Qgb2JqZWN0RmlsZU5hbWUgPQotICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRPYmplY3RGaWxlUGF0aChzb3VyY2UpKTsKKyAgICB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0T2JqZWN0RmlsZVBhdGgoc291cmNlLCBjb25maWcpKTsKICAgc3RkOjpzdHJpbmcgY29uc3Qgb2JqZWN0RmlsZURpciA9CiAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKG9iamVjdEZpbGVOYW1lKTsKIAogICBzdGQ6OnN0cmluZyBjbWFrZVZhckxhbmcgPSBjbVN0ckNhdCgiQ01BS0VfIiwgbGFuZ3VhZ2UpOwogCiAgIC8vIGJ1aWxkIHJlc3BvbnNlIGZpbGUgbmFtZQotICBzdGQ6OnN0cmluZyBjbWFrZUxpbmtWYXIgPSBjbWFrZVZhckxhbmcgKyAiX1JFU1BPTlNFX0ZJTEVfRkxBRyI7CisgIHN0ZDo6c3RyaW5nIGNtYWtlTGlua1ZhciA9IGNtU3RyQ2F0KGNtYWtlVmFyTGFuZywgIl9SRVNQT05TRV9GSUxFX0ZMQUciKTsKIAogICBjb25zdCBjaGFyKiBmbGFnID0gR2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbihjbWFrZUxpbmtWYXIpOwogCkBAIC05NjIsMTEgKzExNjQsMTEgQEAKICAgaW50IGNvbnN0IGNvbW1hbmRMaW5lTGVuZ3RoTGltaXQgPQogICAgICgobGFuZ19zdXBwb3J0c19yZXNwb25zZSAmJiB0aGlzLT5Gb3JjZVJlc3BvbnNlRmlsZSgpKSkgPyAtMSA6IDA7CiAKLSAgY21OaW5qYUJ1aWxkIG9iakJ1aWxkKHRoaXMtPkxhbmd1YWdlQ29tcGlsZXJSdWxlKGxhbmd1YWdlKSk7CisgIGNtTmluamFCdWlsZCBvYmpCdWlsZCh0aGlzLT5MYW5ndWFnZUNvbXBpbGVyUnVsZShsYW5ndWFnZSwgY29uZmlnKSk7CiAgIGNtTmluamFWYXJzJiB2YXJzID0gb2JqQnVpbGQuVmFyaWFibGVzOwotICB2YXJzWyJGTEFHUyJdID0gdGhpcy0+Q29tcHV0ZUZsYWdzRm9yT2JqZWN0KHNvdXJjZSwgbGFuZ3VhZ2UpOwotICB2YXJzWyJERUZJTkVTIl0gPSB0aGlzLT5Db21wdXRlRGVmaW5lcyhzb3VyY2UsIGxhbmd1YWdlKTsKLSAgdmFyc1siSU5DTFVERVMiXSA9IHRoaXMtPkNvbXB1dGVJbmNsdWRlcyhzb3VyY2UsIGxhbmd1YWdlKTsKKyAgdmFyc1siRkxBR1MiXSA9IHRoaXMtPkNvbXB1dGVGbGFnc0Zvck9iamVjdChzb3VyY2UsIGxhbmd1YWdlLCBjb25maWcpOworICB2YXJzWyJERUZJTkVTIl0gPSB0aGlzLT5Db21wdXRlRGVmaW5lcyhzb3VyY2UsIGxhbmd1YWdlLCBjb25maWcpOworICB2YXJzWyJJTkNMVURFUyJdID0gdGhpcy0+Q29tcHV0ZUluY2x1ZGVzKHNvdXJjZSwgbGFuZ3VhZ2UsIGNvbmZpZyk7CiAKICAgaWYgKCF0aGlzLT5OZWVkRGVwVHlwZU1TVkMobGFuZ3VhZ2UpKSB7CiAgICAgYm9vbCByZXBsYWNlRXh0KGZhbHNlKTsKQEAgLTk3OCwxNCArMTE4MCwxNSBAQAogICAgIGlmICghcmVwbGFjZUV4dCkgewogICAgICAgLy8gdXNlIG9yaWdpbmFsIGNvZGUKICAgICAgIHZhcnNbIkRFUF9GSUxFIl0gPSB0aGlzLT5HZXRMb2NhbEdlbmVyYXRvcigpLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICAgIG9iamVjdEZpbGVOYW1lICsgIi5kIiwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKKyAgICAgICAgY21TdHJDYXQob2JqZWN0RmlsZU5hbWUsICIuZCIpLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwogICAgIH0gZWxzZSB7CiAgICAgICAvLyBSZXBsYWNlIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSBleHRlbnNpb24gd2l0aCB0aGUKICAgICAgIC8vIGRlcGVuZCBmaWxlIGV4dGVuc2lvbi4KLSAgICAgIHN0ZDo6c3RyaW5nIGRlcGVuZEZpbGVOYW1lID0KLSAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVXaXRob3V0TGFzdEV4dGVuc2lvbihvYmplY3RGaWxlTmFtZSkgKyAiLmQiOworICAgICAgc3RkOjpzdHJpbmcgZGVwZW5kRmlsZU5hbWUgPSBjbVN0ckNhdCgKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVXaXRob3V0TGFzdEV4dGVuc2lvbihvYmplY3RGaWxlTmFtZSksICIuZCIpOwogICAgICAgdmFyc1siREVQX0ZJTEUiXSA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgb2JqZWN0RmlsZURpciArICIvIiArIGRlcGVuZEZpbGVOYW1lLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOworICAgICAgICBjbVN0ckNhdChvYmplY3RGaWxlRGlyLCAnLycsIGRlcGVuZEZpbGVOYW1lKSwKKyAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgICB9CiAgIH0KIApAQCAtOTk0LDExICsxMTk3LDEzIEBACiAgICAgdmFyc1siRkxBR1MiXSwgdmFyc1siREVGSU5FUyJdLCB2YXJzWyJJTkNMVURFUyJdKTsKIAogICBvYmpCdWlsZC5PdXRwdXRzLnB1c2hfYmFjayhvYmplY3RGaWxlTmFtZSk7Ci0gIGNvbnN0IGNoYXIqIHBjaEV4dGVuc2lvbiA9Ci0gICAgdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfUENIX0VYVEVOU0lPTiIpOwotICBpZiAoIWNtU3lzdGVtVG9vbHM6OlN0cmluZ0VuZHNXaXRoKG9iamVjdEZpbGVOYW1lLCBwY2hFeHRlbnNpb24pKSB7Ci0gICAgLy8gQWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIG9iamVjdCBmaWxlcy4KLSAgICB0aGlzLT5PYmplY3RzLnB1c2hfYmFjayhvYmplY3RGaWxlTmFtZSk7CisgIGlmIChmaXJzdEZvckNvbmZpZykgeworICAgIGNvbnN0IGNoYXIqIHBjaEV4dGVuc2lvbiA9CisgICAgICB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKCJDTUFLRV9QQ0hfRVhURU5TSU9OIik7CisgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpTdHJpbmdFbmRzV2l0aChvYmplY3RGaWxlTmFtZSwgcGNoRXh0ZW5zaW9uKSkgeworICAgICAgLy8gQWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIG9iamVjdCBmaWxlcy4KKyAgICAgIHRoaXMtPkNvbmZpZ3NbY29uZmlnXS5PYmplY3RzLnB1c2hfYmFjayhvYmplY3RGaWxlTmFtZSk7CisgICAgfQogICB9CiAKICAgb2JqQnVpbGQuRXhwbGljaXREZXBzLnB1c2hfYmFjayhzb3VyY2VGaWxlTmFtZSk7CkBAIC0xMDA2LDE5ICsxMjExLDM1IEBACiAgIC8vIEFkZCBwcmVjb21waWxlIGhlYWRlcnMgZGVwZW5kZW5jaWVzCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBMaXN0OwogCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIHBjaFNvdXJjZSA9Ci0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hTb3VyY2UodGhpcy0+R2V0Q29uZmlnTmFtZSgpLCBsYW5ndWFnZSk7Ci0gIGlmICghcGNoU291cmNlLmVtcHR5KCkgJiYgIXNvdXJjZS0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKLSAgICBkZXBMaXN0LnB1c2hfYmFjaygKLSAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoSGVhZGVyKHRoaXMtPkdldENvbmZpZ05hbWUoKSwgbGFuZ3VhZ2UpKTsKLSAgICBpZiAoc291cmNlLT5HZXRGdWxsUGF0aCgpICE9IHBjaFNvdXJjZSkgewotICAgICAgZGVwTGlzdC5wdXNoX2JhY2soCi0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoRmlsZSh0aGlzLT5HZXRDb25maWdOYW1lKCksIGxhbmd1YWdlKSk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmNoaXRlY3R1cmVzOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEFwcGxlQXJjaHMoY29uZmlnLCBhcmNoaXRlY3R1cmVzKTsKKyAgaWYgKGFyY2hpdGVjdHVyZXMuZW1wdHkoKSkgeworICAgIGFyY2hpdGVjdHVyZXMuZW1wbGFjZV9iYWNrKCk7CisgIH0KKworICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+IHBjaFNvdXJjZXM7CisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggOiBhcmNoaXRlY3R1cmVzKSB7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGNoU291cmNlID0KKyAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UGNoU291cmNlKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpOworCisgICAgaWYgKCFwY2hTb3VyY2UuZW1wdHkoKSkgeworICAgICAgcGNoU291cmNlcy5pbnNlcnQocGNoU291cmNlKTsKICAgICB9CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogb2JqZWN0RGVwcyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoIk9CSkVDVF9ERVBFTkRTIikpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb2JqRGVwTGlzdCA9IGNtRXhwYW5kZWRMaXN0KG9iamVjdERlcHMpOworICBpZiAoIXBjaFNvdXJjZXMuZW1wdHkoKSAmJiAhc291cmNlLT5HZXRQcm9wZXJ0eSgiU0tJUF9QUkVDT01QSUxFX0hFQURFUlMiKSkgeworICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGFyY2ggOiBhcmNoaXRlY3R1cmVzKSB7CisgICAgICBkZXBMaXN0LnB1c2hfYmFjaygKKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hIZWFkZXIoY29uZmlnLCBsYW5ndWFnZSwgYXJjaCkpOworICAgICAgaWYgKHBjaFNvdXJjZXMuZmluZChzb3VyY2UtPkdldEZ1bGxQYXRoKCkpID09IHBjaFNvdXJjZXMuZW5kKCkpIHsKKyAgICAgICAgZGVwTGlzdC5wdXNoX2JhY2soCisgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQY2hGaWxlKGNvbmZpZywgbGFuZ3VhZ2UsIGFyY2gpKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoY21Qcm9wIG9iamVjdERlcHMgPSBzb3VyY2UtPkdldFByb3BlcnR5KCJPQkpFQ1RfREVQRU5EUyIpKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9iakRlcExpc3QgPSBjbUV4cGFuZGVkTGlzdCgqb2JqZWN0RGVwcyk7CiAgICAgc3RkOjpjb3B5KG9iakRlcExpc3QuYmVnaW4oKSwgb2JqRGVwTGlzdC5lbmQoKSwKICAgICAgICAgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKGRlcExpc3QpKTsKICAgfQpAQCAtMTAzNCw3ICsxMjU1LDcgQEAKICAgICAgICAgICAgICAgICAgICBNYXBUb05pbmphUGF0aCgpKTsKICAgfQogCi0gIG9iakJ1aWxkLk9yZGVyT25seURlcHMucHVzaF9iYWNrKHRoaXMtPk9yZGVyRGVwZW5kc1RhcmdldEZvclRhcmdldCgpKTsKKyAgb2JqQnVpbGQuT3JkZXJPbmx5RGVwcy5wdXNoX2JhY2sodGhpcy0+T3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KGNvbmZpZykpOwogCiAgIC8vIElmIHRoZSBzb3VyY2UgZmlsZSBpcyBHRU5FUkFURUQgYW5kIGRvZXMgbm90IGhhdmUgYSBjdXN0b20gY29tbWFuZAogICAvLyAoZWl0aGVyIGF0dGFjaGVkIHRvIHRoaXMgc291cmNlIGZpbGUgb3IgYW5vdGhlciBvbmUpLCBhc3N1bWUgdGhhdCBvbmUgb2YKQEAgLTEwNTQsNTkgKzEyNzUsNDcgQEAKICAgLy8gRm9yIHNvbWUgY2FzZXMgd2UgZG8gYW4gZXhwbGljaXQgcHJlcHJvY2Vzc29yIGludm9jYXRpb24uCiAgIGJvb2wgY29uc3QgZXhwbGljaXRQUCA9IHRoaXMtPk5lZWRFeHBsaWNpdFByZXByb2Nlc3NpbmcobGFuZ3VhZ2UpOwogICBpZiAoZXhwbGljaXRQUCkgewotICAgIGNtTmluamFCdWlsZCBwcEJ1aWxkKHRoaXMtPkxhbmd1YWdlUHJlcHJvY2Vzc1J1bGUobGFuZ3VhZ2UpKTsKIAotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHBwRmlsZU5hbWUgPQotICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldFByZXByb2Nlc3NlZEZpbGVQYXRoKHNvdXJjZSkpOwotICAgIHBwQnVpbGQuT3V0cHV0cy5wdXNoX2JhY2socHBGaWxlTmFtZSk7Ci0KLSAgICBwcEJ1aWxkLlJzcEZpbGUgPSBwcEZpbGVOYW1lICsgIi5yc3AiOwotCi0gICAgYm9vbCBjb25zdCBjb21waWxlUFAgPSB0aGlzLT5Vc2VQcmVwcm9jZXNzZWRTb3VyY2UobGFuZ3VhZ2UpOwotICAgIGJvb2wgY29uc3QgY29tcGlsZVBQV2l0aERlZmluZXMgPQotICAgICAgY29tcGlsZVBQICYmIHRoaXMtPkNvbXBpbGVQcmVwcm9jZXNzZWRTb3VyY2VXaXRoRGVmaW5lcyhsYW5ndWFnZSk7Ci0gICAgaWYgKGNvbXBpbGVQUCkgewotICAgICAgLy8gTW92ZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgdG8gdGhlIHByZXByb2Nlc3NpbmcgYnVpbGQgc3RhdGVtZW50LgotICAgICAgc3RkOjpzd2FwKHBwQnVpbGQuRXhwbGljaXREZXBzLCBvYmpCdWlsZC5FeHBsaWNpdERlcHMpOwotICAgICAgc3RkOjpzd2FwKHBwQnVpbGQuSW1wbGljaXREZXBzLCBvYmpCdWlsZC5JbXBsaWNpdERlcHMpOwotICAgICAgc3RkOjpzd2FwKHBwQnVpbGQuT3JkZXJPbmx5RGVwcywgb2JqQnVpbGQuT3JkZXJPbmx5RGVwcyk7Ci0gICAgICBzdGQ6OnN3YXAocHBCdWlsZC5WYXJpYWJsZXNbIklOX0FCUyJdLCB2YXJzWyJJTl9BQlMiXSk7Ci0KLSAgICAgIC8vIFRoZSBhY3R1YWwgY29tcGlsYXRpb24gd2lsbCBub3cgdXNlIHRoZSBwcmVwcm9jZXNzZWQgc291cmNlLgotICAgICAgb2JqQnVpbGQuRXhwbGljaXREZXBzLnB1c2hfYmFjayhwcEZpbGVOYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gQ29weSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgdG8gdGhlIHByZXByb2Nlc3NpbmcgYnVpbGQgc3RhdGVtZW50LgotICAgICAgcHBCdWlsZC5FeHBsaWNpdERlcHMgPSBvYmpCdWlsZC5FeHBsaWNpdERlcHM7Ci0gICAgICBwcEJ1aWxkLkltcGxpY2l0RGVwcyA9IG9iakJ1aWxkLkltcGxpY2l0RGVwczsKLSAgICAgIHBwQnVpbGQuT3JkZXJPbmx5RGVwcyA9IG9iakJ1aWxkLk9yZGVyT25seURlcHM7Ci0gICAgICBwcEJ1aWxkLlZhcmlhYmxlc1siSU5fQUJTIl0gPSB2YXJzWyJJTl9BQlMiXTsKKyAgICAvLyBJZiBzb3VyY2UvdGFyZ2V0IGhhcyBwcmVwcm9jZXNzaW5nIHR1cm5lZCBvZmYsIHdlIHN0aWxsIG5lZWQgdG8KKyAgICAvLyBnZW5lcmF0ZSBhbiBleHBsaWNpdCBkZXBlbmRlbmN5IHN0ZXAKKyAgICBjb25zdCBhdXRvIHNyY3BwID0gc291cmNlLT5HZXRTYWZlUHJvcGVydHkoIkZvcnRyYW5fUFJFUFJPQ0VTUyIpOworICAgIGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2VzcyBwcmVwcm9jZXNzID0KKyAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpHZXRGb3J0cmFuUHJlcHJvY2VzcyhzcmNwcCk7CisgICAgaWYgKHByZXByb2Nlc3MgPT0gY21PdXRwdXRDb252ZXJ0ZXI6OkZvcnRyYW5QcmVwcm9jZXNzOjpVbnNldCkgeworICAgICAgY29uc3QgYXV0byYgdGd0cHAgPQorICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiRm9ydHJhbl9QUkVQUk9DRVNTIik7CisgICAgICBwcmVwcm9jZXNzID0gY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5QcmVwcm9jZXNzKHRndHBwKTsKICAgICB9CiAKLSAgICAvLyBQcmVwcm9jZXNzaW5nIGFuZCBjb21waWxhdGlvbiBnZW5lcmFsbHkgdXNlIHRoZSBzYW1lIGZsYWdzLgotICAgIHBwQnVpbGQuVmFyaWFibGVzWyJGTEFHUyJdID0gdmFyc1siRkxBR1MiXTsKKyAgICBib29sIGNvbnN0IGNvbXBpbGVQUCA9IHRoaXMtPlVzZVByZXByb2Nlc3NlZFNvdXJjZShsYW5ndWFnZSkgJiYKKyAgICAgIChwcmVwcm9jZXNzICE9IGNtT3V0cHV0Q29udmVydGVyOjpGb3J0cmFuUHJlcHJvY2Vzczo6Tm90TmVlZGVkKTsKKyAgICBib29sIGNvbnN0IGNvbXBpbGVQUFdpdGhEZWZpbmVzID0KKyAgICAgIGNvbXBpbGVQUCAmJiB0aGlzLT5Db21waWxlUHJlcHJvY2Vzc2VkU291cmNlV2l0aERlZmluZXMobGFuZ3VhZ2UpOworCisgICAgc3RkOjpzdHJpbmcgY29uc3QgcHBGaWxlTmFtZSA9IGNvbXBpbGVQUAorICAgICAgPyB0aGlzLT5Db252ZXJ0VG9OaW5qYVBhdGgodGhpcy0+R2V0UHJlcHJvY2Vzc2VkRmlsZVBhdGgoc291cmNlLCBjb25maWcpKQorICAgICAgOiAiIjsKKworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGJ1aWxkTmFtZSA9IGNvbXBpbGVQUAorICAgICAgPyB0aGlzLT5MYW5ndWFnZVByZXByb2Nlc3NSdWxlKGxhbmd1YWdlLCBjb25maWcpCisgICAgICA6IHRoaXMtPkxhbmd1YWdlRGVwZW5kZW5jeVJ1bGUobGFuZ3VhZ2UsIGNvbmZpZyk7CisKKyAgICBjb25zdCBhdXRvIGRlcEV4dGVuc2lvbiA9IGNvbXBpbGVQUCA/ICIucHAuZCIgOiAiLmQiOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGRlcEZpbGVOYW1lID0KKyAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKKyAgICAgICAgY21TdHJDYXQob2JqZWN0RmlsZU5hbWUsIGRlcEV4dGVuc2lvbiksIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisKKyAgICBjbU5pbmphQnVpbGQgcHBCdWlsZCA9IEdldFByZXByb2Nlc3NPclNjYW5CdWlsZCgKKyAgICAgIGJ1aWxkTmFtZSwgcHBGaWxlTmFtZSwgY29tcGlsZVBQLCBjb21waWxlUFBXaXRoRGVmaW5lcywgb2JqQnVpbGQsIHZhcnMsCisgICAgICBkZXBGaWxlTmFtZSwgbmVlZER5bmRlcCwgb2JqZWN0RmlsZU5hbWUpOwogCiAgICAgaWYgKGNvbXBpbGVQUCkgewogICAgICAgLy8gSW4gY2FzZSBjb21waWxhdGlvbiByZXF1aXJlcyBmbGFncyB0aGF0IGFyZSBpbmNvbXBhdGlibGUgd2l0aAogICAgICAgLy8gcHJlcHJvY2Vzc2luZywgaW5jbHVkZSB0aGVtIGhlcmUuCiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcG9zdEZsYWcgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oCi0gICAgICAgICJDTUFLRV8iICsgbGFuZ3VhZ2UgKyAiX1BPU1RQUk9DRVNTX0ZMQUciKTsKKyAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmd1YWdlLCAiX1BPU1RQUk9DRVNTX0ZMQUciKSk7CiAgICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QXBwZW5kRmxhZ3ModmFyc1siRkxBR1MiXSwgcG9zdEZsYWcpOwotICAgIH0KIAotICAgIGlmIChjb21waWxlUFAgJiYgIWNvbXBpbGVQUFdpdGhEZWZpbmVzKSB7Ci0gICAgICAvLyBNb3ZlIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIGJ1aWxkIHN0YXRlbWVudC4KLSAgICAgIHN0ZDo6c3dhcChwcEJ1aWxkLlZhcmlhYmxlc1siREVGSU5FUyJdLCB2YXJzWyJERUZJTkVTIl0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBDb3B5IHByZXByb2Nlc3NvciBkZWZpbml0aW9ucyB0byB0aGUgcHJlcHJvY2Vzc29yIGJ1aWxkIHN0YXRlbWVudC4KLSAgICAgIHBwQnVpbGQuVmFyaWFibGVzWyJERUZJTkVTIl0gPSB2YXJzWyJERUZJTkVTIl07Ci0gICAgfQotCi0gICAgLy8gQ29weSBpbmNsdWRlIGRpcmVjdG9yaWVzIHRvIHRoZSBwcmVwcm9jZXNzb3IgYnVpbGQgc3RhdGVtZW50LiAgVGhlCi0gICAgLy8gRm9ydHJhbiBjb21waWxhdGlvbiBidWlsZCBzdGF0ZW1lbnQgc3RpbGwgbmVlZHMgdGhlbSBmb3IgdGhlIElOQ0xVREUKLSAgICAvLyBkaXJlY3RpdmUuCi0gICAgcHBCdWlsZC5WYXJpYWJsZXNbIklOQ0xVREVTIl0gPSB2YXJzWyJJTkNMVURFUyJdOwotCi0gICAgaWYgKGNvbXBpbGVQUCkgewogICAgICAgLy8gUHJlcGVuZCBzb3VyY2UgZmlsZSdzIG9yaWdpbmFsIGRpcmVjdG9yeSBhcyBhbiBpbmNsdWRlIGRpcmVjdG9yeQogICAgICAgLy8gc28gZS5nLiBGb3J0cmFuIElOQ0xVREUgc3RhdGVtZW50cyBjYW4gbG9vayBmb3IgZmlsZXMgaW4gaXQuCiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc291cmNlRGlyZWN0b3J5OwpAQCAtMTExNSw0MSArMTMyNCwyNCBAQAogCiAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VEaXJlY3RvcnlGbGFnID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEluY2x1ZGVGbGFncygKICAgICAgICAgc291cmNlRGlyZWN0b3J5LCB0aGlzLT5HZW5lcmF0b3JUYXJnZXQsIGxhbmd1YWdlLCBmYWxzZSwgZmFsc2UsCi0gICAgICAgIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgICAgIGNvbmZpZyk7CiAKLSAgICAgIHZhcnNbIklOQ0xVREVTIl0gPSBzb3VyY2VEaXJlY3RvcnlGbGFnICsgIiAiICsgdmFyc1siSU5DTFVERVMiXTsKKyAgICAgIHZhcnNbIklOQ0xVREVTIl0gPSBjbVN0ckNhdChzb3VyY2VEaXJlY3RvcnlGbGFnLCAnICcsIHZhcnNbIklOQ0xVREVTIl0pOwogICAgIH0KIAotICAgIC8vIEV4cGxpY2l0IHByZXByb2Nlc3NpbmcgYWx3YXlzIHVzZXMgYSBkZXBmaWxlLgotICAgIHBwQnVpbGQuVmFyaWFibGVzWyJERVBfRklMRSJdID0KLSAgICAgIHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCktPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKLSAgICAgICAgb2JqZWN0RmlsZU5hbWUgKyAiLnBwLmQiLCBjbU91dHB1dENvbnZlcnRlcjo6U0hFTEwpOwotICAgIGlmIChjb21waWxlUFApIHsKLSAgICAgIC8vIFRoZSBhY3R1YWwgY29tcGlsYXRpb24gZG9lcyBub3QgbmVlZCBhIGRlcGZpbGUgYmVjYXVzZSBpdAotICAgICAgLy8gZGVwZW5kcyBvbiB0aGUgYWxyZWFkeS1wcmVwcm9jZXNzZWQgc291cmNlLgotICAgICAgdmFycy5lcmFzZSgiREVQX0ZJTEUiKTsKLSAgICB9Ci0KLSAgICBpZiAobmVlZER5bmRlcCkgewotICAgICAgLy8gVGVsbCBkZXBlbmRlbmN5IHNjYW5uZXIgdGhlIG9iamVjdCBmaWxlIHRoYXQgd2lsbCByZXN1bHQgZnJvbQotICAgICAgLy8gY29tcGlsaW5nIHRoZSBzb3VyY2UuCi0gICAgICBwcEJ1aWxkLlZhcmlhYmxlc1siT0JKX0ZJTEUiXSA9IG9iamVjdEZpbGVOYW1lOwotCi0gICAgICAvLyBUZWxsIGRlcGVuZGVuY3kgc2Nhbm5lciB3aGVyZSB0byBzdG9yZSBkeW5kZXAgaW50ZXJtZWRpYXRlIHJlc3VsdHMuCi0gICAgICBzdGQ6OnN0cmluZyBjb25zdCBkZGlGaWxlID0gb2JqZWN0RmlsZU5hbWUgKyAiLmRkaSI7Ci0gICAgICBwcEJ1aWxkLlZhcmlhYmxlc1siRFlOREVQX0lOVEVSTUVESUFURV9GSUxFIl0gPSBkZGlGaWxlOwotICAgICAgcHBCdWlsZC5JbXBsaWNpdE91dHMucHVzaF9iYWNrKGRkaUZpbGUpOwotICAgICAgdGhpcy0+RERJRmlsZXNbbGFuZ3VhZ2VdLnB1c2hfYmFjayhkZGlGaWxlKTsKKyAgICBpZiAoZmlyc3RGb3JDb25maWcgJiYgbmVlZER5bmRlcCkgeworICAgICAgc3RkOjpzdHJpbmcgY29uc3QgZGRpRmlsZSA9IGNtU3RyQ2F0KG9iamVjdEZpbGVOYW1lLCAiLmRkaSIpOworICAgICAgdGhpcy0+Q29uZmlnc1tjb25maWddLkRESUZpbGVzW2xhbmd1YWdlXS5wdXNoX2JhY2soZGRpRmlsZSk7CiAgICAgfQogCiAgICAgdGhpcy0+YWRkUG9vbE5pbmphVmFyaWFibGUoIkpPQl9QT09MX0NPTVBJTEUiLCB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcEJ1aWxkLlZhcmlhYmxlcyk7CiAKLSAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgcHBCdWlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZUxlbmd0aExpbWl0KTsKKyAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCh0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcEJ1aWxkLCBjb21tYW5kTGluZUxlbmd0aExpbWl0KTsKICAgfQogICBpZiAobmVlZER5bmRlcCkgewotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGR5bmRlcCA9IHRoaXMtPkdldER5bmRlcEZpbGVQYXRoKGxhbmd1YWdlKTsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCBkeW5kZXAgPSB0aGlzLT5HZXREeW5kZXBGaWxlUGF0aChsYW5ndWFnZSwgY29uZmlnKTsKICAgICBvYmpCdWlsZC5PcmRlck9ubHlEZXBzLnB1c2hfYmFjayhkeW5kZXApOwogICAgIHZhcnNbImR5bmRlcCJdID0gZHluZGVwOwogICB9CkBAIC0xMTY0LDM0ICsxMzU2LDQ5IEBACiAgIHRoaXMtPmFkZFBvb2xOaW5qYVZhcmlhYmxlKCJKT0JfUE9PTF9DT01QSUxFIiwgdGhpcy0+R2V0R2VuZXJhdG9yVGFyZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMpOwogCi0gIHRoaXMtPlNldE1zdmNUYXJnZXRQZGJWYXJpYWJsZSh2YXJzKTsKKyAgaWYgKCFwY2hTb3VyY2VzLmVtcHR5KCkgJiYgIXNvdXJjZS0+R2V0UHJvcGVydHkoIlNLSVBfUFJFQ09NUElMRV9IRUFERVJTIikpIHsKKyAgICBhdXRvIHBjaEl0ID0gcGNoU291cmNlcy5maW5kKHNvdXJjZS0+R2V0RnVsbFBhdGgoKSk7CisgICAgaWYgKHBjaEl0ICE9IHBjaFNvdXJjZXMuZW5kKCkpIHsKKyAgICAgIHRoaXMtPmFkZFBvb2xOaW5qYVZhcmlhYmxlKCJKT0JfUE9PTF9QUkVDT01QSUxFX0hFQURFUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRHZW5lcmF0b3JUYXJnZXQoKSwgdmFycyk7CisgICAgfQorICB9CiAKLSAgb2JqQnVpbGQuUnNwRmlsZSA9IG9iamVjdEZpbGVOYW1lICsgIi5yc3AiOworICB0aGlzLT5TZXRNc3ZjVGFyZ2V0UGRiVmFyaWFibGUodmFycywgY29uZmlnKTsKKworICBvYmpCdWlsZC5Sc3BGaWxlID0gY21TdHJDYXQob2JqZWN0RmlsZU5hbWUsICIucnNwIik7CiAKICAgaWYgKGxhbmd1YWdlID09ICJTd2lmdCIpIHsKLSAgICB0aGlzLT5FbWl0U3dpZnREZXBlbmRlbmN5SW5mbyhzb3VyY2UpOworICAgIHRoaXMtPkVtaXRTd2lmdERlcGVuZGVuY3lJbmZvKHNvdXJjZSwgY29uZmlnKTsKICAgfSBlbHNlIHsKLSAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwKKyAgICB0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+V3JpdGVCdWlsZCh0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpCdWlsZCwgY29tbWFuZExpbmVMZW5ndGhMaW1pdCk7CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogb2JqZWN0T3V0cHV0cyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoIk9CSkVDVF9PVVRQVVRTIikpIHsKLSAgICBjbU5pbmphQnVpbGQgYnVpbGQoInBob255Iik7Ci0gICAgYnVpbGQuQ29tbWVudCA9ICJBZGRpdGlvbmFsIG91dHB1dCBmaWxlcy4iOwotICAgIGJ1aWxkLk91dHB1dHMgPSBjbUV4cGFuZGVkTGlzdChvYmplY3RPdXRwdXRzKTsKLSAgICBzdGQ6OnRyYW5zZm9ybShidWlsZC5PdXRwdXRzLmJlZ2luKCksIGJ1aWxkLk91dHB1dHMuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgYnVpbGQuT3V0cHV0cy5iZWdpbigpLCBNYXBUb05pbmphUGF0aCgpKTsKLSAgICBidWlsZC5FeHBsaWNpdERlcHMgPSBvYmpCdWlsZC5PdXRwdXRzOwotICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBidWlsZCk7CisgIGlmIChjbVByb3Agb2JqZWN0T3V0cHV0cyA9IHNvdXJjZS0+R2V0UHJvcGVydHkoIk9CSkVDVF9PVVRQVVRTIikpIHsKKyAgICBzdGQ6OnN0cmluZyBldmFsdWF0ZWRPYmplY3RPdXRwdXRzID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKKyAgICAgICpvYmplY3RPdXRwdXRzLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKworICAgIGlmICghZXZhbHVhdGVkT2JqZWN0T3V0cHV0cy5lbXB0eSgpKSB7CisgICAgICBjbU5pbmphQnVpbGQgYnVpbGQoInBob255Iik7CisgICAgICBidWlsZC5Db21tZW50ID0gIkFkZGl0aW9uYWwgb3V0cHV0IGZpbGVzLiI7CisgICAgICBidWlsZC5PdXRwdXRzID0gY21FeHBhbmRlZExpc3QoZXZhbHVhdGVkT2JqZWN0T3V0cHV0cyk7CisgICAgICBzdGQ6OnRyYW5zZm9ybShidWlsZC5PdXRwdXRzLmJlZ2luKCksIGJ1aWxkLk91dHB1dHMuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICBidWlsZC5PdXRwdXRzLmJlZ2luKCksIE1hcFRvTmluamFQYXRoKCkpOworICAgICAgYnVpbGQuRXhwbGljaXREZXBzID0gb2JqQnVpbGQuT3V0cHV0czsKKyAgICAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZUJ1aWxkKAorICAgICAgICB0aGlzLT5HZXRJbXBsRmlsZVN0cmVhbShmaWxlQ29uZmlnKSwgYnVpbGQpOworICAgIH0KICAgfQogfQogCi12b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OldyaXRlVGFyZ2V0RGVwZW5kSW5mbyhzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykKK3ZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6V3JpdGVUYXJnZXREZXBlbmRJbmZvKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgSnNvbjo6VmFsdWUgdGRpKEpzb246Om9iamVjdFZhbHVlKTsKICAgdGRpWyJsYW5ndWFnZSJdID0gbGFuZzsKLSAgdGRpWyJjb21waWxlci1pZCJdID0KLSAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9JRCIpOworICB0ZGlbImNvbXBpbGVyLWlkIl0gPSB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oCisgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxhbmcsICJfQ09NUElMRVJfSUQiKSk7CiAKICAgaWYgKGxhbmcgPT0gIkZvcnRyYW4iKSB7CiAgICAgc3RkOjpzdHJpbmcgbW9kX2RpciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Rm9ydHJhbk1vZHVsZURpcmVjdG9yeSgKQEAgLTEyMTQsNyArMTQyMSw3IEBACiAgIEpzb246OlZhbHVlJiB0ZGlfaW5jbHVkZV9kaXJzID0gdGRpWyJpbmNsdWRlLWRpcnMiXSA9IEpzb246OmFycmF5VmFsdWU7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlczsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldEluY2x1ZGVEaXJlY3RvcmllcyhpbmNsdWRlcywgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmcsIHRoaXMtPkdldENvbmZpZ05hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZywgY29uZmlnKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGluY2x1ZGVzKSB7CiAgICAgLy8gQ29udmVydCB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcyB0aGUgc2FtZSB3YXkgd2UgZG8gZm9yIC1JIGZsYWdzLgogICAgIC8vIFNlZSB1cHN0cmVhbSBuaW5qYSBpc3N1ZSAxMjUxLgpAQCAtMTIyMyw0OCArMTQzMCw0OSBAQAogCiAgIEpzb246OlZhbHVlJiB0ZGlfbGlua2VkX3RhcmdldF9kaXJzID0gdGRpWyJsaW5rZWQtdGFyZ2V0LWRpcnMiXSA9CiAgICAgSnNvbjo6YXJyYXlWYWx1ZTsKLSAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbCA6IHRoaXMtPkdldExpbmtlZFRhcmdldERpcmVjdG9yaWVzKCkpIHsKKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbCA6IHRoaXMtPkdldExpbmtlZFRhcmdldERpcmVjdG9yaWVzKGNvbmZpZykpIHsKICAgICB0ZGlfbGlua2VkX3RhcmdldF9kaXJzLmFwcGVuZChsKTsKICAgfQogCi0gIHN0ZDo6c3RyaW5nIGNvbnN0IHRkaW4gPSB0aGlzLT5HZXRUYXJnZXREZXBlbmRJbmZvUGF0aChsYW5nKTsKKyAgc3RkOjpzdHJpbmcgY29uc3QgdGRpbiA9IHRoaXMtPkdldFRhcmdldERlcGVuZEluZm9QYXRoKGxhbmcsIGNvbmZpZyk7CiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSB0ZGlmKHRkaW4pOwogICB0ZGlmIDw8IHRkaTsKIH0KIAogdm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpFbWl0U3dpZnREZXBlbmRlbmN5SW5mbygKLSAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UpCisgIGNtU291cmNlRmlsZSBjb25zdCogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBzdGQ6OnN0cmluZyBjb25zdCBzb3VyY2VGaWxlUGF0aCA9CiAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldFNvdXJjZUZpbGVQYXRoKHNvdXJjZSkpOwogICBzdGQ6OnN0cmluZyBjb25zdCBvYmplY3RGaWxlUGF0aCA9Ci0gICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldE9iamVjdEZpbGVQYXRoKHNvdXJjZSkpOworICAgIHRoaXMtPkNvbnZlcnRUb05pbmphUGF0aCh0aGlzLT5HZXRPYmplY3RGaWxlUGF0aChzb3VyY2UsIGNvbmZpZykpOwogICBzdGQ6OnN0cmluZyBjb25zdCBzd2lmdERlcHNQYXRoID0gW3NvdXJjZSwgb2JqZWN0RmlsZVBhdGhdKCkgLT4gc3RkOjpzdHJpbmcgewotICAgIGlmIChjb25zdCBjaGFyKiBuYW1lID0gc291cmNlLT5HZXRQcm9wZXJ0eSgiU3dpZnRfREVQRU5ERU5DSUVTX0ZJTEUiKSkgewotICAgICAgcmV0dXJuIG5hbWU7CisgICAgaWYgKGNtUHJvcCBuYW1lID0gc291cmNlLT5HZXRQcm9wZXJ0eSgiU3dpZnRfREVQRU5ERU5DSUVTX0ZJTEUiKSkgeworICAgICAgcmV0dXJuICpuYW1lOwogICAgIH0KLSAgICByZXR1cm4gb2JqZWN0RmlsZVBhdGggKyAiLnN3aWZ0ZGVwcyI7CisgICAgcmV0dXJuIGNtU3RyQ2F0KG9iamVjdEZpbGVQYXRoLCAiLnN3aWZ0ZGVwcyIpOwogICB9KCk7CiAgIHN0ZDo6c3RyaW5nIGNvbnN0IHN3aWZ0RGlhUGF0aCA9IFtzb3VyY2UsIG9iamVjdEZpbGVQYXRoXSgpIC0+IHN0ZDo6c3RyaW5nIHsKLSAgICBpZiAoY29uc3QgY2hhciogbmFtZSA9IHNvdXJjZS0+R2V0UHJvcGVydHkoIlN3aWZ0X0RJQUdOT1NUSUNTX0ZJTEUiKSkgewotICAgICAgcmV0dXJuIG5hbWU7CisgICAgaWYgKGNtUHJvcCBuYW1lID0gc291cmNlLT5HZXRQcm9wZXJ0eSgiU3dpZnRfRElBR05PU1RJQ1NfRklMRSIpKSB7CisgICAgICByZXR1cm4gKm5hbWU7CiAgICAgfQotICAgIHJldHVybiBvYmplY3RGaWxlUGF0aCArICIuZGlhIjsKKyAgICByZXR1cm4gY21TdHJDYXQob2JqZWN0RmlsZVBhdGgsICIuZGlhIik7CiAgIH0oKTsKLSAgc3RkOjpzdHJpbmcgY29uc3QgbWFrZURlcHNQYXRoID0gW3RoaXMsIHNvdXJjZV0oKSAtPiBzdGQ6OnN0cmluZyB7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IG1ha2VEZXBzUGF0aCA9IFt0aGlzLCBzb3VyY2UsIGNvbmZpZ10oKSAtPiBzdGQ6OnN0cmluZyB7CiAgICAgY21Mb2NhbE5pbmphR2VuZXJhdG9yIGNvbnN0KiBsb2NhbCA9IHRoaXMtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgc3RkOjpzdHJpbmcgY29uc3Qgb2JqZWN0RmlsZU5hbWUgPQotICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldE9iamVjdEZpbGVQYXRoKHNvdXJjZSkpOworICAgICAgdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHRoaXMtPkdldE9iamVjdEZpbGVQYXRoKHNvdXJjZSwgY29uZmlnKSk7CiAgICAgc3RkOjpzdHJpbmcgY29uc3Qgb2JqZWN0RmlsZURpciA9CiAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgob2JqZWN0RmlsZU5hbWUpOwogCiAgICAgaWYgKHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9Td2lmdF9ERVBGTEVfRVhUTlNJT05fUkVQTEFDRSIpKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBkZXBlbmRGaWxlTmFtZSA9Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lV2l0aG91dExhc3RFeHRlbnNpb24ob2JqZWN0RmlsZU5hbWUpICsgIi5kIjsKLSAgICAgIHJldHVybiBsb2NhbC0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KG9iamVjdEZpbGVEaXIgKyAiLyIgKyBkZXBlbmRGaWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICBzdGQ6OnN0cmluZyBkZXBlbmRGaWxlTmFtZSA9IGNtU3RyQ2F0KAorICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVdpdGhvdXRMYXN0RXh0ZW5zaW9uKG9iamVjdEZpbGVOYW1lKSwgIi5kIik7CisgICAgICByZXR1cm4gbG9jYWwtPkNvbnZlcnRUb091dHB1dEZvcm1hdCgKKyAgICAgICAgY21TdHJDYXQob2JqZWN0RmlsZURpciwgJy8nLCBkZXBlbmRGaWxlTmFtZSksCisgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CiAgICAgfQotICAgIHJldHVybiBsb2NhbC0+Q29udmVydFRvT3V0cHV0Rm9ybWF0KG9iamVjdEZpbGVOYW1lICsgIi5kIiwKKyAgICByZXR1cm4gbG9jYWwtPkNvbnZlcnRUb091dHB1dEZvcm1hdChjbVN0ckNhdChvYmplY3RGaWxlTmFtZSwgIi5kIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgfSgpOwogCkBAIC0xMjc1LDcgKzE0ODMsNyBAQAogICBlbnRyeVsiZGVwZW5kZW5jaWVzIl0gPSBtYWtlRGVwc1BhdGg7CiAgIGVudHJ5WyJzd2lmdC1kZXBlbmRlbmNpZXMiXSA9IHN3aWZ0RGVwc1BhdGg7CiAgIGVudHJ5WyJkaWFnbm9zdGljcyJdID0gc3dpZnREaWFQYXRoOwotICBTd2lmdE91dHB1dE1hcFtzb3VyY2VGaWxlUGF0aF0gPSBlbnRyeTsKKyAgdGhpcy0+Q29uZmlnc1tjb25maWddLlN3aWZ0T3V0cHV0TWFwW3NvdXJjZUZpbGVQYXRoXSA9IGVudHJ5OwogfQogCiB2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkV4cG9ydE9iamVjdENvbXBpbGVDb21tYW5kKApAQCAtMTMyOSw3ICsxNTM3LDcgQEAKICAgICAgIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldFJlcXVpcmVkRGVmaW5pdGlvbihjbWRWYXIpOwogICAgIGNtRXhwYW5kTGlzdChjb21waWxlQ21kLCBjb21waWxlQ21kcyk7CiAgIH0gZWxzZSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgY21kVmFyID0gIkNNQUtFXyIgKyBsYW5ndWFnZSArICJfQ09NUElMRV9PQkpFQ1QiOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNtZFZhciA9IGNtU3RyQ2F0KCJDTUFLRV8iLCBsYW5ndWFnZSwgIl9DT01QSUxFX09CSkVDVCIpOwogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21waWxlQ21kID0KICAgICAgIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldFJlcXVpcmVkRGVmaW5pdGlvbihjbWRWYXIpOwogICAgIGNtRXhwYW5kTGlzdChjb21waWxlQ21kLCBjb21waWxlQ21kcyk7CkBAIC0xMzUwLDI3ICsxNTU4LDM0IEBACiAgIHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5BZGRDWFhDb21waWxlQ29tbWFuZChjbWRMaW5lLCBzb3VyY2VGaWxlTmFtZSk7CiB9CiAKLXZvaWQgY21OaW5qYVRhcmdldEdlbmVyYXRvcjo6QWRkaXRpb25hbENsZWFuRmlsZXMoKQordm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjpBZGRpdGlvbmFsQ2xlYW5GaWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewotICBpZiAoY29uc3QgY2hhciogcHJvcF92YWx1ZSA9CisgIGlmIChjbVByb3AgcHJvcF92YWx1ZSA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkFERElUSU9OQUxfQ0xFQU5fRklMRVMiKSkgewogICAgIGNtTG9jYWxOaW5qYUdlbmVyYXRvciogbGcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvcjsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY2xlYW5GaWxlczsKLSAgICBjbUV4cGFuZExpc3QoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgICAgICAgICAgICAgICBwcm9wX3ZhbHVlLCBsZywKLSAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX0JVSUxEX1RZUEUiKSwKLSAgICAgICAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQpLAorICAgIGNtRXhwYW5kTGlzdChjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKCpwcm9wX3ZhbHVlLCBsZywgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldCksCiAgICAgICAgICAgICAgICAgIGNsZWFuRmlsZXMpOwogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiaW5hcnlEaXIgPSBsZy0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwogICAgIGNtR2xvYmFsTmluamFHZW5lcmF0b3IqIGdnID0gbGctPkdldEdsb2JhbE5pbmphR2VuZXJhdG9yKCk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY2xlYW5GaWxlIDogY2xlYW5GaWxlcykgewogICAgICAgLy8gU3VwcG9ydCByZWxhdGl2ZSBwYXRocwogICAgICAgZ2ctPkFkZEFkZGl0aW9uYWxDbGVhbkZpbGUoCi0gICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoY2xlYW5GaWxlLCBiaW5hcnlEaXIpKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjbGVhbkZpbGUsIGJpbmFyeURpciksIGNvbmZpZyk7CiAgICAgfQogICB9CiB9CiAKK2NtTmluamFEZXBzIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkdldE9iamVjdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3QKK3sKKyAgYXV0byBjb25zdCBpdCA9IHRoaXMtPkNvbmZpZ3MuZmluZChjb25maWcpOworICBpZiAoaXQgIT0gdGhpcy0+Q29uZmlncy5lbmQoKSkgeworICAgIHJldHVybiBpdC0+c2Vjb25kLk9iamVjdHM7CisgIH0KKyAgcmV0dXJuIHt9OworfQorCiB2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6OkVuc3VyZURpcmVjdG9yeUV4aXN0cygKICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpIGNvbnN0CiB7CkBAIC0xMzkzLDcgKzE2MDgsNyBAQAogfQogCiB2b2lkIGNtTmluamFUYXJnZXRHZW5lcmF0b3I6Ok1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlOjpvcGVyYXRvcigpKAotICBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwgY29uc3QgY2hhciogcGtnbG9jKQorICBjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwgY29uc3QgY2hhciogcGtnbG9jLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICAvLyBTa2lwIE9TIFggY29udGVudCB3aGVuIG5vdCBidWlsZGluZyBhIEZyYW1ld29yayBvciBCdW5kbGUuCiAgIGlmICghdGhpcy0+R2VuZXJhdG9yLT5HZXRHZW5lcmF0b3JUYXJnZXQoKS0+SXNCdW5kbGVPbkFwcGxlKCkpIHsKQEAgLTE0MDEsNyArMTYxNiwxOCBAQAogICB9CiAKICAgc3RkOjpzdHJpbmcgbWFjZGlyID0KLSAgICB0aGlzLT5HZW5lcmF0b3ItPk9TWEJ1bmRsZUdlbmVyYXRvci0+SW5pdE1hY09TWENvbnRlbnREaXJlY3RvcnkocGtnbG9jKTsKKyAgICB0aGlzLT5HZW5lcmF0b3ItPk9TWEJ1bmRsZUdlbmVyYXRvci0+SW5pdE1hY09TWENvbnRlbnREaXJlY3RvcnkocGtnbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOworCisgIC8vIFJlamVjdCBmaWxlcyB0aGF0IGNvbGxpZGUgd2l0aCBmaWxlcyBmcm9tIHRoZSBOaW5qYSBmaWxlJ3MgbmF0aXZlIGNvbmZpZy4KKyAgaWYgKGNvbmZpZyAhPSB0aGlzLT5GaWxlQ29uZmlnKSB7CisgICAgc3RkOjpzdHJpbmcgbmF0aXZlTWFjZGlyID0KKyAgICAgIHRoaXMtPkdlbmVyYXRvci0+T1NYQnVuZGxlR2VuZXJhdG9yLT5Jbml0TWFjT1NYQ29udGVudERpcmVjdG9yeSgKKyAgICAgICAgcGtnbG9jLCB0aGlzLT5GaWxlQ29uZmlnKTsKKyAgICBpZiAobWFjZGlyID09IG5hdGl2ZU1hY2RpcikgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQogCiAgIC8vIEdldCB0aGUgaW5wdXQgZmlsZSBsb2NhdGlvbi4KICAgc3RkOjpzdHJpbmcgaW5wdXQgPSBzb3VyY2UuR2V0RnVsbFBhdGgoKTsKQEAgLTE0MTMsMjAgKzE2MzksMjAgQEAKICAgb3V0cHV0ID0gdGhpcy0+R2VuZXJhdG9yLT5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+Q29udmVydFRvTmluamFQYXRoKG91dHB1dCk7CiAKICAgLy8gV3JpdGUgYSBidWlsZCBzdGF0ZW1lbnQgdG8gY29weSB0aGUgY29udGVudCBpbnRvIHRoZSBidW5kbGUuCi0gIHRoaXMtPkdlbmVyYXRvci0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPldyaXRlTWFjT1NYQ29udGVudEJ1aWxkKGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOworICB0aGlzLT5HZW5lcmF0b3ItPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Xcml0ZU1hY09TWENvbnRlbnRCdWlsZCgKKyAgICBpbnB1dCwgb3V0cHV0LCB0aGlzLT5GaWxlQ29uZmlnKTsKIAogICAvLyBBZGQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSB0YXJnZXQgc28gdGhhdCBpdCBnZXRzIGNhbGxlZC4KLSAgdGhpcy0+R2VuZXJhdG9yLT5FeHRyYUZpbGVzLnB1c2hfYmFjayhzdGQ6Om1vdmUob3V0cHV0KSk7CisgIHRoaXMtPkdlbmVyYXRvci0+Q29uZmlnc1tjb25maWddLkV4dHJhRmlsZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShvdXRwdXQpKTsKIH0KIAogdm9pZCBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yOjphZGRQb29sTmluamFWYXJpYWJsZSgKICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBvb2xfcHJvcGVydHksIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQsCiAgIGNtTmluamFWYXJzJiB2YXJzKQogewotICBjb25zdCBjaGFyKiBwb29sID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eShwb29sX3Byb3BlcnR5KTsKKyAgY21Qcm9wIHBvb2wgPSB0YXJnZXQtPkdldFByb3BlcnR5KHBvb2xfcHJvcGVydHkpOwogICBpZiAocG9vbCkgewotICAgIHZhcnNbInBvb2wiXSA9IHBvb2w7CisgICAgdmFyc1sicG9vbCJdID0gKnBvb2w7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTmluamFUYXJnZXRHZW5lcmF0b3IuaCBiL1NvdXJjZS9jbU5pbmphVGFyZ2V0R2VuZXJhdG9yLmgKaW5kZXggNDYyN2JjZC4uOGQ0MzcyZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTmluamFUYXJnZXRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21OaW5qYVRhcmdldEdlbmVyYXRvci5oCkBAIC05LDkgKzksMTAgQEAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfdmFsdWUuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KIAogI2luY2x1ZGUgImNtQ29tbW9uVGFyZ2V0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxOaW5qYUdlbmVyYXRvci5oIgpAQCAtMzgsMTYgKzM5LDE3IEBACiAgIC8vLyBEZXN0cnVjdG9yLgogICB+Y21OaW5qYVRhcmdldEdlbmVyYXRvcigpIG92ZXJyaWRlOwogCi0gIHZpcnR1YWwgdm9pZCBHZW5lcmF0ZSgpID0gMDsKKyAgdmlydHVhbCB2b2lkIEdlbmVyYXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpID0gMDsKIAogICBzdGQ6OnN0cmluZyBHZXRUYXJnZXROYW1lKCkgY29uc3Q7CiAKICAgYm9vbCBOZWVkRGVwVHlwZU1TVkMoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gIGJvb2wgU2V0TXN2Y1RhcmdldFBkYlZhcmlhYmxlKGNtTmluamFWYXJzJikgY29uc3Q7CisgIGJvb2wgU2V0TXN2Y1RhcmdldFBkYlZhcmlhYmxlKGNtTmluamFWYXJzJiwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKLSAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBHZXRCdWlsZEZpbGVTdHJlYW0oKSBjb25zdDsKKyAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBHZXRJbXBsRmlsZVN0cmVhbShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKKyAgY21HZW5lcmF0ZWRGaWxlU3RyZWFtJiBHZXRDb21tb25GaWxlU3RyZWFtKCkgY29uc3Q7CiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSYgR2V0UnVsZXNGaWxlU3RyZWFtKCkgY29uc3Q7CiAKICAgY21HZW5lcmF0b3JUYXJnZXQqIEdldEdlbmVyYXRvclRhcmdldCgpIGNvbnN0CkBAIC02NCwxNSArNjYsMjAgQEAKIAogICBjbU1ha2VmaWxlKiBHZXRNYWtlZmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPk1ha2VmaWxlOyB9CiAKLSAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VDb21waWxlclJ1bGUoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpIGNvbnN0OwotICBzdGQ6OnN0cmluZyBMYW5ndWFnZVByZXByb2Nlc3NSdWxlKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2VDb21waWxlclJ1bGUoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworICBzdGQ6OnN0cmluZyBMYW5ndWFnZVByZXByb2Nlc3NSdWxlKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OworICBzdGQ6OnN0cmluZyBMYW5ndWFnZURlcGVuZGVuY3lSdWxlKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogICBib29sIE5lZWRFeHBsaWNpdFByZXByb2Nlc3Npbmcoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OwotICBzdGQ6OnN0cmluZyBMYW5ndWFnZUR5bmRlcFJ1bGUoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OworICBzdGQ6OnN0cmluZyBMYW5ndWFnZUR5bmRlcFJ1bGUoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKICAgYm9vbCBOZWVkRHluZGVwKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nKSBjb25zdDsKICAgYm9vbCBVc2VQcmVwcm9jZXNzZWRTb3VyY2Uoc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIGNvbnN0OwogICBib29sIENvbXBpbGVQcmVwcm9jZXNzZWRTb3VyY2VXaXRoRGVmaW5lcyhzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3Q7CiAKLSAgc3RkOjpzdHJpbmcgT3JkZXJEZXBlbmRzVGFyZ2V0Rm9yVGFyZ2V0KCk7CisgIHN0ZDo6c3RyaW5nIE9yZGVyRGVwZW5kc1RhcmdldEZvclRhcmdldChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAogICBzdGQ6OnN0cmluZyBDb21wdXRlT3JkZXJEZXBlbmRzRm9yVGFyZ2V0KCk7CiAKQEAgLTgyLDE1ICs4OSwxOSBAQAogICAgKiAgICAgICBieSBMYW5ndWFnZUZsYWdzVmFyTmFtZSgpLgogICAgKi8KICAgc3RkOjpzdHJpbmcgQ29tcHV0ZUZsYWdzRm9yT2JqZWN0KGNtU291cmNlRmlsZSBjb25zdCogc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCi0gIHZvaWQgQWRkSW5jbHVkZUZsYWdzKHN0ZDo6c3RyaW5nJiBmbGFncywgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpIG92ZXJyaWRlOworICB2b2lkIEFkZEluY2x1ZGVGbGFncyhzdGQ6OnN0cmluZyYgZmxhZ3MsIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBvdmVycmlkZTsKIAogICBzdGQ6OnN0cmluZyBDb21wdXRlRGVmaW5lcyhjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAogICBzdGQ6OnN0cmluZyBDb21wdXRlSW5jbHVkZXMoY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgc3RkOjpzdHJpbmcgQ29udmVydFRvTmluamFQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKSBjb25zdAogICB7CkBAIC0xMDIsMzYgKzExMyw1MSBAQAogICB9CiAKICAgLy8vIEByZXR1cm4gdGhlIGxpc3Qgb2YgbGluayBkZXBlbmRlbmN5IGZvciB0aGUgZ2l2ZW4gdGFyZ2V0IEBhIHRhcmdldC4KLSAgY21OaW5qYURlcHMgQ29tcHV0ZUxpbmtEZXBzKGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5rTGFuZ3VhZ2UpIGNvbnN0OworICBjbU5pbmphRGVwcyBDb21wdXRlTGlua0RlcHMoY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmtMYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8vLyBAcmV0dXJuIHRoZSBzb3VyY2UgZmlsZSBwYXRoIGZvciB0aGUgZ2l2ZW4gQGEgc291cmNlLgogICBzdGQ6OnN0cmluZyBHZXRTb3VyY2VGaWxlUGF0aChjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSkgY29uc3Q7CiAKICAgLy8vIEByZXR1cm4gdGhlIG9iamVjdCBmaWxlIHBhdGggZm9yIHRoZSBnaXZlbiBAYSBzb3VyY2UuCi0gIHN0ZDo6c3RyaW5nIEdldE9iamVjdEZpbGVQYXRoKGNtU291cmNlRmlsZSBjb25zdCogc291cmNlKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgR2V0T2JqZWN0RmlsZVBhdGgoY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8vLyBAcmV0dXJuIHRoZSBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGUgcGF0aCBmb3IgdGhlIGdpdmVuIEBhIHNvdXJjZS4KLSAgc3RkOjpzdHJpbmcgR2V0UHJlcHJvY2Vzc2VkRmlsZVBhdGgoY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRQcmVwcm9jZXNzZWRGaWxlUGF0aChjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKICAgLy8vIEByZXR1cm4gdGhlIGR5bmRlcCBmaWxlIHBhdGggZm9yIHRoaXMgdGFyZ2V0LgotICBzdGQ6OnN0cmluZyBHZXREeW5kZXBGaWxlUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldER5bmRlcEZpbGVQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICAvLy8gQHJldHVybiB0aGUgdGFyZ2V0IGRlcGVuZGVuY3kgc2Nhbm5lciBpbmZvIGZpbGUgcGF0aAotICBzdGQ6OnN0cmluZyBHZXRUYXJnZXREZXBlbmRJbmZvUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZykgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldFRhcmdldERlcGVuZEluZm9QYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICAvLy8gQHJldHVybiB0aGUgZmlsZSBwYXRoIHdoZXJlIHRoZSB0YXJnZXQgbmFtZWQgQGEgbmFtZSBpcyBnZW5lcmF0ZWQuCi0gIHN0ZDo6c3RyaW5nIEdldFRhcmdldEZpbGVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgR2V0VGFyZ2V0RmlsZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpIGNvbnN0OwogCiAgIC8vLyBAcmV0dXJuIHRoZSBvdXRwdXQgcGF0aCBmb3IgdGhlIHRhcmdldC4KLSAgdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRUYXJnZXRPdXRwdXREaXIoKSBjb25zdDsKKyAgdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRUYXJnZXRPdXRwdXREaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgY29uc3Q7CiAKLSAgdm9pZCBXcml0ZUxhbmd1YWdlUnVsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKTsKLSAgdm9pZCBXcml0ZUNvbXBpbGVSdWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSk7Ci0gIHZvaWQgV3JpdGVPYmplY3RCdWlsZFN0YXRlbWVudHMoKTsKLSAgdm9pZCBXcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50KGNtU291cmNlRmlsZSBjb25zdCogc291cmNlKTsKLSAgdm9pZCBXcml0ZVRhcmdldERlcGVuZEluZm8oc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcpOworICB2b2lkIFdyaXRlTGFuZ3VhZ2VSdWxlcyhjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOworICB2b2lkIFdyaXRlQ29tcGlsZVJ1bGUoY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CisgIHZvaWQgV3JpdGVPYmplY3RCdWlsZFN0YXRlbWVudHMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZUNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpcnN0Rm9yQ29uZmlnKTsKKyAgdm9pZCBXcml0ZU9iamVjdEJ1aWxkU3RhdGVtZW50KGNtU291cmNlRmlsZSBjb25zdCogc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdEZvckNvbmZpZyk7CisgIHZvaWQgV3JpdGVUYXJnZXREZXBlbmRJbmZvKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAotICB2b2lkIEVtaXRTd2lmdERlcGVuZGVuY3lJbmZvKGNtU291cmNlRmlsZSBjb25zdCogc291cmNlKTsKKyAgdm9pZCBFbWl0U3dpZnREZXBlbmRlbmN5SW5mbyhjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKTsKIAogICB2b2lkIEV4cG9ydE9iamVjdENvbXBpbGVDb21tYW5kKAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5ndWFnZSwgc3RkOjpzdHJpbmcgY29uc3QmIHNvdXJjZUZpbGVOYW1lLApAQCAtMTM5LDkgKzE2NSw5IEBACiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG9iamVjdEZpbGVEaXIsIHN0ZDo6c3RyaW5nIGNvbnN0JiBmbGFncywKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVmaW5lcywgc3RkOjpzdHJpbmcgY29uc3QmIGluY2x1ZGVzKTsKIAotICB2b2lkIEFkZGl0aW9uYWxDbGVhbkZpbGVzKCk7CisgIHZvaWQgQWRkaXRpb25hbENsZWFuRmlsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKLSAgY21OaW5qYURlcHMgR2V0T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPk9iamVjdHM7IH0KKyAgY21OaW5qYURlcHMgR2V0T2JqZWN0cyhjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBjb25zdDsKIAogICB2b2lkIEVuc3VyZURpcmVjdG9yeUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgZGlyKSBjb25zdDsKICAgdm9pZCBFbnN1cmVQYXJlbnREaXJlY3RvcnlFeGlzdHMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpIGNvbnN0OwpAQCAtMTUwLDE5ICsxNzYsMjIgQEAKICAgc3RydWN0IE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlCiAgICAgOiBjbU9TWEJ1bmRsZUdlbmVyYXRvcjo6TWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGUKICAgewotICAgIE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlKGNtTmluamFUYXJnZXRHZW5lcmF0b3IqIGcpCisgICAgTWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGUoY21OaW5qYVRhcmdldEdlbmVyYXRvciogZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBmaWxlQ29uZmlnKQogICAgICAgOiBHZW5lcmF0b3IoZykKKyAgICAgICwgRmlsZUNvbmZpZyhzdGQ6Om1vdmUoZmlsZUNvbmZpZykpCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgb3BlcmF0b3IoKShjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwgY29uc3QgY2hhciogcGtnbG9jKSBvdmVycmlkZTsKKyAgICB2b2lkIG9wZXJhdG9yKCkoY21Tb3VyY2VGaWxlIGNvbnN0JiBzb3VyY2UsIGNvbnN0IGNoYXIqIHBrZ2xvYywKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykgb3ZlcnJpZGU7CiAKICAgcHJpdmF0ZToKICAgICBjbU5pbmphVGFyZ2V0R2VuZXJhdG9yKiBHZW5lcmF0b3I7CisgICAgc3RkOjpzdHJpbmcgRmlsZUNvbmZpZzsKICAgfTsKICAgZnJpZW5kIHN0cnVjdCBNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZTsKIAotICBzdGQ6OnVuaXF1ZV9wdHI8TWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGU+IE1hY09TWENvbnRlbnRHZW5lcmF0b3I7CiAgIC8vIFByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHN1Yi1jbGFzc2VzLgogICBzdGQ6OnVuaXF1ZV9wdHI8Y21PU1hCdW5kbGVHZW5lcmF0b3I+IE9TWEJ1bmRsZUdlbmVyYXRvcjsKICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IE1hY0NvbnRlbnRGb2xkZXJzOwpAQCAtMTc0LDE0ICsyMDMsMjEgQEAKIAogcHJpdmF0ZToKICAgY21Mb2NhbE5pbmphR2VuZXJhdG9yKiBMb2NhbEdlbmVyYXRvcjsKLSAgLy8vIExpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvciB0aGlzIHRhcmdldC4KLSAgY21OaW5qYURlcHMgT2JqZWN0czsKLSAgLy8gRm9ydHJhbiBTdXBwb3J0Ci0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjbU5pbmphRGVwcz4gRERJRmlsZXM7Ci0gIC8vIFN3aWZ0IFN1cHBvcnQKLSAgSnNvbjo6VmFsdWUgU3dpZnRPdXRwdXRNYXA7Ci0gIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZCBjb25zdCo+IEN1c3RvbUNvbW1hbmRzOwotICBjbU5pbmphRGVwcyBFeHRyYUZpbGVzOworCisgIHN0cnVjdCBCeUNvbmZpZworICB7CisgICAgLy8vIExpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvciB0aGlzIHRhcmdldC4KKyAgICBjbU5pbmphRGVwcyBPYmplY3RzOworICAgIC8vIEZvcnRyYW4gU3VwcG9ydAorICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjbU5pbmphRGVwcz4gRERJRmlsZXM7CisgICAgLy8gU3dpZnQgU3VwcG9ydAorICAgIEpzb246OlZhbHVlIFN3aWZ0T3V0cHV0TWFwOworICAgIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZCBjb25zdCo+IEN1c3RvbUNvbW1hbmRzOworICAgIGNtTmluamFEZXBzIEV4dHJhRmlsZXM7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlPiBNYWNPU1hDb250ZW50R2VuZXJhdG9yOworICB9OworCisgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBCeUNvbmZpZz4gQ29uZmlnczsKIH07CiAKICNlbmRpZiAvLyAhIGNtTmluamFUYXJnZXRHZW5lcmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggNTI1OTAzNy4uOTUwOGJiOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21OaW5qYVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IuY3h4CkBAIC0xNSwxMyArMTUsMTQgQEAKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtR2xvYmFsTmluamFHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxvY2FsTmluamFHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21OaW5qYVR5cGVzLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgorI2luY2x1ZGUgImNtVGFyZ2V0LmgiCiAKIGNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yOjpjbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvcigKICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCkKQEAgLTMxLDE0ICszMiwxOCBAQAogCiBjbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvcjo6fmNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCi12b2lkIGNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yOjpHZW5lcmF0ZSgpCit2b2lkIGNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yOjpHZW5lcmF0ZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBjbUdsb2JhbE5pbmphR2VuZXJhdG9yKiBnZyA9IHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpOwogICBjbUxvY2FsTmluamFHZW5lcmF0b3IqIGxnID0gdGhpcy0+R2V0TG9jYWxHZW5lcmF0b3IoKTsKICAgY21HZW5lcmF0b3JUYXJnZXQqIGdlblRhcmdldCA9IHRoaXMtPkdldEdlbmVyYXRvclRhcmdldCgpOwogCisgIHN0ZDo6c3RyaW5nIGNvbmZpZ0RpcjsKKyAgaWYgKGdlblRhcmdldC0+VGFyZ2V0LT5Jc1BlckNvbmZpZygpKSB7CisgICAgY29uZmlnRGlyID0gZ2ctPkNvbmZpZ0RpcmVjdG9yeShjb25maWcpOworICB9CiAgIHN0ZDo6c3RyaW5nIHV0aWxDb21tYW5kTmFtZSA9Ci0gICAgY21TdHJDYXQobGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9DTWFrZUZpbGVzLyIsCisgICAgY21TdHJDYXQobGctPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwgIi9DTWFrZUZpbGVzIiwgY29uZmlnRGlyLCAiLyIsCiAgICAgICAgICAgICAgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpLCAiLnV0aWwiKTsKICAgdXRpbENvbW1hbmROYW1lID0gdGhpcy0+Q29udmVydFRvTmluamFQYXRoKHV0aWxDb21tYW5kTmFtZSk7CiAKQEAgLTU1LDggKzYwLDggQEAKIAogICAgIGZvciAoc3RkOjp2ZWN0b3I8Y21DdXN0b21Db21tYW5kPiBjb25zdCogY21kTGlzdCA6IGNtZExpc3RzKSB7CiAgICAgICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCYgY2kgOiAqY21kTGlzdCkgewotICAgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNpLCB0aGlzLT5HZXRDb25maWdOYW1lKCksIGxnKTsKLSAgICAgICAgbGctPkFwcGVuZEN1c3RvbUNvbW1hbmREZXBzKGNjZywgZGVwcyk7CisgICAgICAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coY2ksIGNvbmZpZywgbGcpOworICAgICAgICBsZy0+QXBwZW5kQ3VzdG9tQ29tbWFuZERlcHMoY2NnLCBkZXBzLCBjb25maWcpOwogICAgICAgICBsZy0+QXBwZW5kQ3VzdG9tQ29tbWFuZExpbmVzKGNjZywgY29tbWFuZHMpOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNjQnlwcm9kdWN0cyA9IGNjZy5HZXRCeXByb2R1Y3RzKCk7CiAgICAgICAgIHN0ZDo6dHJhbnNmb3JtKGNjQnlwcm9kdWN0cy5iZWdpbigpLCBjY0J5cHJvZHVjdHMuZW5kKCksCkBAIC02OSwxMyArNzQsMTEgQEAKICAgfQogCiAgIHsKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnID0KLSAgICAgIHRoaXMtPkdldE1ha2VmaWxlKCktPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV9CVUlMRF9UWVBFIik7CiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gc291cmNlczsKICAgICBnZW5UYXJnZXQtPkdldFNvdXJjZUZpbGVzKHNvdXJjZXMsIGNvbmZpZyk7CiAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSA6IHNvdXJjZXMpIHsKICAgICAgIGlmIChjbUN1c3RvbUNvbW1hbmQgY29uc3QqIGNjID0gc291cmNlLT5HZXRDdXN0b21Db21tYW5kKCkpIHsKLSAgICAgICAgY21DdXN0b21Db21tYW5kR2VuZXJhdG9yIGNjZygqY2MsIHRoaXMtPkdldENvbmZpZ05hbWUoKSwgbGcpOworICAgICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKCpjYywgY29uZmlnLCBsZyk7CiAgICAgICAgIGxnLT5BZGRDdXN0b21Db21tYW5kVGFyZ2V0KGNjLCBnZW5UYXJnZXQpOwogCiAgICAgICAgIC8vIERlcGVuZCBvbiBhbGwgY3VzdG9tIGNvbW1hbmQgb3V0cHV0cy4KQEAgLTg5LDIwICs5MiwyOSBAQAogICAgIH0KICAgfQogCi0gIGxnLT5BcHBlbmRUYXJnZXRPdXRwdXRzKGdlblRhcmdldCwgcGhvbnlCdWlsZC5PdXRwdXRzKTsKLSAgbGctPkFwcGVuZFRhcmdldERlcGVuZHMoZ2VuVGFyZ2V0LCBkZXBzKTsKKyAgc3RkOjpzdHJpbmcgb3V0cHV0Q29uZmlnOworICBpZiAoZ2VuVGFyZ2V0LT5UYXJnZXQtPklzUGVyQ29uZmlnKCkpIHsKKyAgICBvdXRwdXRDb25maWcgPSBjb25maWc7CisgIH0KKyAgbGctPkFwcGVuZFRhcmdldE91dHB1dHMoZ2VuVGFyZ2V0LCBwaG9ueUJ1aWxkLk91dHB1dHMsIG91dHB1dENvbmZpZyk7CisgIGlmIChnZW5UYXJnZXQtPlRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgeworICAgIGxnLT5BcHBlbmRUYXJnZXRPdXRwdXRzKGdlblRhcmdldCwgZ2ctPkdldEJ5cHJvZHVjdHNGb3JDbGVhblRhcmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CisgIH0KKyAgbGctPkFwcGVuZFRhcmdldERlcGVuZHMoZ2VuVGFyZ2V0LCBkZXBzLCBjb25maWcsIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kT25UYXJnZXRBcnRpZmFjdCk7CiAKICAgaWYgKGNvbW1hbmRzLmVtcHR5KCkpIHsKICAgICBwaG9ueUJ1aWxkLkNvbW1lbnQgPSAiVXRpbGl0eSBjb21tYW5kIGZvciAiICsgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpOwogICAgIHBob255QnVpbGQuRXhwbGljaXREZXBzID0gc3RkOjptb3ZlKGRlcHMpOwotICAgIGdnLT5Xcml0ZUJ1aWxkKHRoaXMtPkdldEJ1aWxkRmlsZVN0cmVhbSgpLCBwaG9ueUJ1aWxkKTsKKyAgICBnZy0+V3JpdGVCdWlsZCh0aGlzLT5HZXRDb21tb25GaWxlU3RyZWFtKCksIHBob255QnVpbGQpOwogICB9IGVsc2UgewogICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPQogICAgICAgbGctPkJ1aWxkQ29tbWFuZExpbmUoY29tbWFuZHMsICJ1dGlsaXR5IiwgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKICAgICBzdGQ6OnN0cmluZyBkZXNjOwotICAgIGNvbnN0IGNoYXIqIGVjaG9TdHIgPSBnZW5UYXJnZXQtPkdldFByb3BlcnR5KCJFY2hvU3RyaW5nIik7CisgICAgY21Qcm9wIGVjaG9TdHIgPSBnZW5UYXJnZXQtPkdldFByb3BlcnR5KCJFY2hvU3RyaW5nIik7CiAgICAgaWYgKGVjaG9TdHIpIHsKLSAgICAgIGRlc2MgPSBlY2hvU3RyOworICAgICAgZGVzYyA9ICplY2hvU3RyOwogICAgIH0gZWxzZSB7CiAgICAgICBkZXNjID0gIlJ1bm5pbmcgdXRpbGl0eSBjb21tYW5kIGZvciAiICsgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpOwogICAgIH0KQEAgLTExOCw2ICsxMzAsNyBAQAogICAgICAgbGctPkNvbnZlcnRUb091dHB1dEZvcm1hdChsZy0+R2V0QmluYXJ5RGlyZWN0b3J5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCkpOwogICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoY29tbWFuZCwgIiQoQVJHUykiLCAiIik7CisgICAgY29tbWFuZCA9IGdnLT5FeHBhbmRDRkdJbnREaXIoY29tbWFuZCwgY29uZmlnKTsKIAogICAgIGlmIChjb21tYW5kLmZpbmQoJyQnKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgcmV0dXJuOwpAQCAtMTI3LDIyICsxNDAsMjcgQEAKICAgICAgIGdnLT5TZWVuQ3VzdG9tQ29tbWFuZE91dHB1dCh1dGlsX291dHB1dCk7CiAgICAgfQogCisgICAgc3RkOjpzdHJpbmcgY2NDb25maWc7CisgICAgaWYgKGdlblRhcmdldC0+VGFyZ2V0LT5Jc1BlckNvbmZpZygpICYmCisgICAgICAgIGdlblRhcmdldC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgeworICAgICAgY2NDb25maWcgPSBjb25maWc7CisgICAgfQogICAgIGdnLT5Xcml0ZUN1c3RvbUNvbW1hbmRCdWlsZChjb21tYW5kLCBkZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXRpbGl0eSBjb21tYW5kIGZvciAiICsgdGhpcy0+R2V0VGFyZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmRlcGZpbGUqLyAiIiwgLypqb2JfcG9vbCovICIiLCB1c2VzX3Rlcm1pbmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnJlc3RhdCovIHRydWUsIHV0aWxfb3V0cHV0cywgZGVwcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qcmVzdGF0Ki8gdHJ1ZSwgdXRpbF9vdXRwdXRzLCBjY0NvbmZpZywgZGVwcyk7CiAKICAgICBwaG9ueUJ1aWxkLkV4cGxpY2l0RGVwcy5wdXNoX2JhY2sodXRpbENvbW1hbmROYW1lKTsKLSAgICBnZy0+V3JpdGVCdWlsZCh0aGlzLT5HZXRCdWlsZEZpbGVTdHJlYW0oKSwgcGhvbnlCdWlsZCk7CisgICAgZ2ctPldyaXRlQnVpbGQodGhpcy0+R2V0Q29tbW9uRmlsZVN0cmVhbSgpLCBwaG9ueUJ1aWxkKTsKICAgfQogCiAgIC8vIEZpbmQgQURESVRJT05BTF9DTEVBTl9GSUxFUwotICB0aGlzLT5BZGRpdGlvbmFsQ2xlYW5GaWxlcygpOworICB0aGlzLT5BZGRpdGlvbmFsQ2xlYW5GaWxlcyhjb25maWcpOwogCiAgIC8vIEFkZCBhbiBhbGlhcyBmb3IgdGhlIGxvZ2ljYWwgdGFyZ2V0IG5hbWUgcmVnYXJkbGVzcyBvZiB3aGF0IGRpcmVjdG9yeQogICAvLyBjb250YWlucyBpdC4gIFNraXAgdGhpcyBmb3IgR0xPQkFMX1RBUkdFVCBiZWNhdXNlIHRoZXkgYXJlIG1lYW50IHRvCiAgIC8vIGJlIHBlci1kaXJlY3RvcnkgYW5kIGhhdmUgb25lIGF0IHRoZSB0b3AtbGV2ZWwgYW55d2F5LgogICBpZiAoZ2VuVGFyZ2V0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUKSB7Ci0gICAgZ2ctPkFkZFRhcmdldEFsaWFzKHRoaXMtPkdldFRhcmdldE5hbWUoKSwgZ2VuVGFyZ2V0KTsKKyAgICBnZy0+QWRkVGFyZ2V0QWxpYXModGhpcy0+R2V0VGFyZ2V0TmFtZSgpLCBnZW5UYXJnZXQsIGNvbmZpZyk7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvci5oIGIvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmgKaW5kZXggMDFjYzQ1OS4uY2EzZjBhNCAxMDA2NDQKLS0tIGEvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yLmgKQEAgLTUsNiArNSw4IEBACiAKICNpbmNsdWRlICJjbUNvbmZpZ3VyZS5oIiAvLyBJV1lVIHByYWdtYToga2VlcAogCisjaW5jbHVkZSA8c3RyaW5nPgorCiAjaW5jbHVkZSAiY21OaW5qYVRhcmdldEdlbmVyYXRvci5oIgogCiBjbGFzcyBjbUdlbmVyYXRvclRhcmdldDsKQEAgLTE1LDcgKzE3LDcgQEAKICAgY21OaW5qYVV0aWxpdHlUYXJnZXRHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CiAgIH5jbU5pbmphVXRpbGl0eVRhcmdldEdlbmVyYXRvcigpIG92ZXJyaWRlOwogCi0gIHZvaWQgR2VuZXJhdGUoKSBvdmVycmlkZTsKKyAgdm9pZCBHZW5lcmF0ZShjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKSBvdmVycmlkZTsKIH07CiAKICNlbmRpZiAvLyAhIGNtTmluamFVdGlsaXR5VGFyZ2V0R2VuZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU9TWEJ1bmRsZUdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21PU1hCdW5kbGVHZW5lcmF0b3IuY3h4CmluZGV4IGE2ZjRlNTEuLjdlZWE0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU9TWEJ1bmRsZUdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtT1NYQnVuZGxlR2VuZXJhdG9yLmN4eApAQCAtMyw3ICszLDYgQEAKICNpbmNsdWRlICJjbU9TWEJ1bmRsZUdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCkBAIC0xNSwxMiArMTQsMTAgQEAKIAogY2xhc3MgY21Tb3VyY2VGaWxlOwogCi1jbU9TWEJ1bmRsZUdlbmVyYXRvcjo6Y21PU1hCdW5kbGVHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25maWdOYW1lKQorY21PU1hCdW5kbGVHZW5lcmF0b3I6OmNtT1NYQnVuZGxlR2VuZXJhdG9yKGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQpCiAgIDogR1QodGFyZ2V0KQogICAsIE1ha2VmaWxlKHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpKQogICAsIExvY2FsR2VuZXJhdG9yKHRhcmdldC0+R2V0TG9jYWxHZW5lcmF0b3IoKSkKLSAgLCBDb25maWdOYW1lKHN0ZDo6bW92ZShjb25maWdOYW1lKSkKICAgLCBNYWNDb250ZW50Rm9sZGVycyhudWxscHRyKQogewogICBpZiAodGhpcy0+TXVzdFNraXAoKSkgewpAQCAtMzQsMzQgKzMxLDM0IEBACiB9CiAKIHZvaWQgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkNyZWF0ZUFwcEJ1bmRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgb3V0cGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgb3V0cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBpZiAodGhpcy0+TXVzdFNraXAoKSkgewogICAgIHJldHVybjsKICAgfQogCiAgIC8vIENvbXB1dGUgYnVuZGxlIGRpcmVjdG9yeSBuYW1lcy4KLSAgc3RkOjpzdHJpbmcgb3V0ID0KLSAgICBjbVN0ckNhdChvdXRwYXRoLCAnLycsCi0gICAgICAgICAgICAgdGhpcy0+R1QtPkdldEFwcEJ1bmRsZURpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OkZ1bGxMZXZlbCkpOworICBzdGQ6OnN0cmluZyBvdXQgPSBjbVN0ckNhdCgKKyAgICBvdXRwYXRoLCAnLycsCisgICAgdGhpcy0+R1QtPkdldEFwcEJ1bmRsZURpcmVjdG9yeShjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0OjpGdWxsTGV2ZWwpKTsKICAgY21TeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeShvdXQpOwogICB0aGlzLT5NYWtlZmlsZS0+QWRkQ01ha2VPdXRwdXRGaWxlKG91dCk7CiAKICAgLy8gQ29uZmlndXJlIHRoZSBJbmZvLnBsaXN0IGZpbGUuICBOb3RlIHRoYXQgaXQgbmVlZHMgdGhlIGV4ZWN1dGFibGUgbmFtZQogICAvLyB0byBiZSBzZXQuCi0gIHN0ZDo6c3RyaW5nIHBsaXN0ID0KLSAgICBjbVN0ckNhdChvdXRwYXRoLCAnLycsCi0gICAgICAgICAgICAgdGhpcy0+R1QtPkdldEFwcEJ1bmRsZURpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbnRlbnRMZXZlbCksCi0gICAgICAgICAgICAgIi9JbmZvLnBsaXN0Iik7CisgIHN0ZDo6c3RyaW5nIHBsaXN0ID0gY21TdHJDYXQoCisgICAgb3V0cGF0aCwgJy8nLAorICAgIHRoaXMtPkdULT5HZXRBcHBCdW5kbGVEaXJlY3RvcnkoY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldDo6Q29udGVudExldmVsKSwKKyAgICAiL0luZm8ucGxpc3QiKTsKICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdlbmVyYXRlQXBwbGVJbmZvUExpc3QodGhpcy0+R1QsIHRhcmdldE5hbWUsIHBsaXN0KTsKICAgdGhpcy0+TWFrZWZpbGUtPkFkZENNYWtlT3V0cHV0RmlsZShwbGlzdCk7CiAgIG91dHBhdGggPSBvdXQ7CiB9CiAKLXZvaWQgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkNyZWF0ZUZyYW1ld29yayhjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb3V0cGF0aCkKK3ZvaWQgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkNyZWF0ZUZyYW1ld29yaygKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBvdXRwYXRoLAorICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLCBjb25zdCBjbU9TWEJ1bmRsZUdlbmVyYXRvcjo6U2tpcFBhcnRzJiBza2lwUGFydHMpCiB7CiAgIGlmICh0aGlzLT5NdXN0U2tpcCgpKSB7CiAgICAgcmV0dXJuOwpAQCAtNzAsMjggKzY3LDI4IEBACiAgIGFzc2VydCh0aGlzLT5NYWNDb250ZW50Rm9sZGVycyk7CiAKICAgLy8gQ29tcHV0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIHRvcC1sZXZlbCBmb28uZnJhbWV3b3JrIGRpcmVjdG9yeS4KLSAgc3RkOjpzdHJpbmcgY29udGVudGRpciA9Ci0gICAgY21TdHJDYXQob3V0cGF0aCwgJy8nLAotICAgICAgICAgICAgIHRoaXMtPkdULT5HZXRGcmFtZXdvcmtEaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb250ZW50TGV2ZWwpLAotICAgICAgICAgICAgICcvJyk7CisgIHN0ZDo6c3RyaW5nIGNvbnRlbnRkaXIgPSBjbVN0ckNhdCgKKyAgICBvdXRwYXRoLCAnLycsCisgICAgdGhpcy0+R1QtPkdldEZyYW1ld29ya0RpcmVjdG9yeShjb25maWcsIGNtR2VuZXJhdG9yVGFyZ2V0OjpDb250ZW50TGV2ZWwpLAorICAgICcvJyk7CiAKICAgc3RkOjpzdHJpbmcgbmV3b3V0cGF0aCA9IG91dHBhdGggKyAiLyIgKwotICAgIHRoaXMtPkdULT5HZXRGcmFtZXdvcmtEaXJlY3RvcnkodGhpcy0+Q29uZmlnTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpGdWxsTGV2ZWwpOworICAgIHRoaXMtPkdULT5HZXRGcmFtZXdvcmtEaXJlY3RvcnkoY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldDo6RnVsbExldmVsKTsKIAogICBzdGQ6OnN0cmluZyBmcmFtZXdvcmtWZXJzaW9uID0gdGhpcy0+R1QtPkdldEZyYW1ld29ya1ZlcnNpb24oKTsKIAotICAvLyBDb25maWd1cmUgdGhlIEluZm8ucGxpc3QgZmlsZQotICBzdGQ6OnN0cmluZyBwbGlzdCA9IG5ld291dHBhdGg7Ci0gIGlmICghdGhpcy0+TWFrZWZpbGUtPlBsYXRmb3JtSXNBcHBsZUVtYmVkZGVkKCkpIHsKLSAgICAvLyBQdXQgdGhlIEluZm8ucGxpc3QgZmlsZSBpbnRvIHRoZSBSZXNvdXJjZXMgZGlyZWN0b3J5LgotICAgIHRoaXMtPk1hY0NvbnRlbnRGb2xkZXJzLT5pbnNlcnQoIlJlc291cmNlcyIpOwotICAgIHBsaXN0ICs9ICIvUmVzb3VyY2VzIjsKLSAgfQotICBwbGlzdCArPSAiL0luZm8ucGxpc3QiOwogICBzdGQ6OnN0cmluZyBuYW1lID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKHRhcmdldE5hbWUpOwotICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2VuZXJhdGVGcmFtZXdvcmtJbmZvUExpc3QodGhpcy0+R1QsIG5hbWUsIHBsaXN0KTsKKyAgaWYgKCFza2lwUGFydHMuaW5mb1BsaXN0KSB7CisgICAgLy8gQ29uZmlndXJlIHRoZSBJbmZvLnBsaXN0IGZpbGUKKyAgICBzdGQ6OnN0cmluZyBwbGlzdCA9IG5ld291dHBhdGg7CisgICAgaWYgKCF0aGlzLT5NYWtlZmlsZS0+UGxhdGZvcm1Jc0FwcGxlRW1iZWRkZWQoKSkgeworICAgICAgLy8gUHV0IHRoZSBJbmZvLnBsaXN0IGZpbGUgaW50byB0aGUgUmVzb3VyY2VzIGRpcmVjdG9yeS4KKyAgICAgIHRoaXMtPk1hY0NvbnRlbnRGb2xkZXJzLT5pbnNlcnQoIlJlc291cmNlcyIpOworICAgICAgcGxpc3QgKz0gIi9SZXNvdXJjZXMiOworICAgIH0KKyAgICBwbGlzdCArPSAiL0luZm8ucGxpc3QiOworICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZW5lcmF0ZUZyYW1ld29ya0luZm9QTGlzdCh0aGlzLT5HVCwgbmFtZSwgcGxpc3QpOworICB9CiAKICAgLy8gR2VuZXJhdGUgVmVyc2lvbnMgZGlyZWN0b3J5IG9ubHkgZm9yIE1hY09TWCBmcmFtZXdvcmtzCiAgIGlmICh0aGlzLT5NYWtlZmlsZS0+UGxhdGZvcm1Jc0FwcGxlRW1iZWRkZWQoKSkgewpAQCAtMTU2LDI3ICsxNTMsMjYgQEAKIH0KIAogdm9pZCBjbU9TWEJ1bmRsZUdlbmVyYXRvcjo6Q3JlYXRlQ0ZCdW5kbGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgaWYgKHRoaXMtPk11c3RTa2lwKCkpIHsKICAgICByZXR1cm47CiAgIH0KIAogICAvLyBDb21wdXRlIGJ1bmRsZSBkaXJlY3RvcnkgbmFtZXMuCi0gIHN0ZDo6c3RyaW5nIG91dCA9Ci0gICAgY21TdHJDYXQocm9vdCwgJy8nLAotICAgICAgICAgICAgIHRoaXMtPkdULT5HZXRDRkJ1bmRsZURpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6RnVsbExldmVsKSk7CisgIHN0ZDo6c3RyaW5nIG91dCA9IGNtU3RyQ2F0KAorICAgIHJvb3QsICcvJywKKyAgICB0aGlzLT5HVC0+R2V0Q0ZCdW5kbGVEaXJlY3RvcnkoY29uZmlnLCBjbUdlbmVyYXRvclRhcmdldDo6RnVsbExldmVsKSk7CiAgIGNtU3lzdGVtVG9vbHM6Ok1ha2VEaXJlY3Rvcnkob3V0KTsKICAgdGhpcy0+TWFrZWZpbGUtPkFkZENNYWtlT3V0cHV0RmlsZShvdXQpOwogCiAgIC8vIENvbmZpZ3VyZSB0aGUgSW5mby5wbGlzdCBmaWxlLiAgTm90ZSB0aGF0IGl0IG5lZWRzIHRoZSBleGVjdXRhYmxlIG5hbWUKICAgLy8gdG8gYmUgc2V0LgotICBzdGQ6OnN0cmluZyBwbGlzdCA9Ci0gICAgY21TdHJDYXQocm9vdCwgJy8nLAotICAgICAgICAgICAgIHRoaXMtPkdULT5HZXRDRkJ1bmRsZURpcmVjdG9yeSh0aGlzLT5Db25maWdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6Q29udGVudExldmVsKSwKLSAgICAgICAgICAgICAiL0luZm8ucGxpc3QiKTsKKyAgc3RkOjpzdHJpbmcgcGxpc3QgPSBjbVN0ckNhdCgKKyAgICByb290LCAnLycsCisgICAgdGhpcy0+R1QtPkdldENGQnVuZGxlRGlyZWN0b3J5KGNvbmZpZywgY21HZW5lcmF0b3JUYXJnZXQ6OkNvbnRlbnRMZXZlbCksCisgICAgIi9JbmZvLnBsaXN0Iik7CiAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUodGFyZ2V0TmFtZSk7CiAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZW5lcmF0ZUFwcGxlSW5mb1BMaXN0KHRoaXMtPkdULCBuYW1lLCBwbGlzdCk7CiAgIHRoaXMtPk1ha2VmaWxlLT5BZGRDTWFrZU91dHB1dEZpbGUocGxpc3QpOwpAQCAtMTg0LDcgKzE4MCw3IEBACiAKIHZvaWQgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkdlbmVyYXRlTWFjT1NYQ29udGVudFN0YXRlbWVudHMoCiAgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGNvbnN0JiBzb3VyY2VzLAotICBNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZSogZ2VuZXJhdG9yKQorICBNYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZSogZ2VuZXJhdG9yLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBpZiAodGhpcy0+TXVzdFNraXAoKSkgewogICAgIHJldHVybjsKQEAgLTE5NCwyMCArMTkwLDE5IEBACiAgICAgY21HZW5lcmF0b3JUYXJnZXQ6OlNvdXJjZUZpbGVGbGFncyB0c0ZsYWdzID0KICAgICAgIHRoaXMtPkdULT5HZXRUYXJnZXRTb3VyY2VGaWxlRmxhZ3Moc291cmNlKTsKICAgICBpZiAodHNGbGFncy5UeXBlICE9IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VGaWxlVHlwZU5vcm1hbCkgewotICAgICAgKCpnZW5lcmF0b3IpKCpzb3VyY2UsIHRzRmxhZ3MuTWFjRm9sZGVyKTsKKyAgICAgICgqZ2VuZXJhdG9yKSgqc291cmNlLCB0c0ZsYWdzLk1hY0ZvbGRlciwgY29uZmlnKTsKICAgICB9CiAgIH0KIH0KIAogc3RkOjpzdHJpbmcgY21PU1hCdW5kbGVHZW5lcmF0b3I6OkluaXRNYWNPU1hDb250ZW50RGlyZWN0b3J5KAotICBjb25zdCBjaGFyKiBwa2dsb2MpCisgIGNvbnN0IGNoYXIqIHBrZ2xvYywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZykKIHsKICAgLy8gQ29uc3RydWN0IHRoZSBmdWxsIHBhdGggdG8gdGhlIGNvbnRlbnQgc3ViZGlyZWN0b3J5LgogCi0gIHN0ZDo6c3RyaW5nIG1hY2RpciA9Ci0gICAgY21TdHJDYXQodGhpcy0+R1QtPkdldE1hY0NvbnRlbnREaXJlY3RvcnkoCi0gICAgICAgICAgICAgICB0aGlzLT5Db25maWdOYW1lLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCksCi0gICAgICAgICAgICAgJy8nLCBwa2dsb2MpOworICBzdGQ6OnN0cmluZyBtYWNkaXIgPSBjbVN0ckNhdCh0aGlzLT5HVC0+R2V0TWFjQ29udGVudERpcmVjdG9yeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcsIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8nLCBwa2dsb2MpOwogICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KG1hY2Rpcik7CiAKICAgLy8gUmVjb3JkIHVzZSBvZiB0aGlzIGNvbnRlbnQgbG9jYXRpb24uICBPbmx5IHRoZSBmaXJzdCBsZXZlbApkaWZmIC0tZ2l0IGEvU291cmNlL2NtT1NYQnVuZGxlR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21PU1hCdW5kbGVHZW5lcmF0b3IuaAppbmRleCAzZGVhNmNjLi41YmYxZDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PU1hCdW5kbGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21PU1hCdW5kbGVHZW5lcmF0b3IuaApAQCAtMTcsMjkgKzE3LDQzIEBACiBjbGFzcyBjbU9TWEJ1bmRsZUdlbmVyYXRvcgogewogcHVibGljOgotICBjbU9TWEJ1bmRsZUdlbmVyYXRvcihjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0LCBzdGQ6OnN0cmluZyBjb25maWdOYW1lKTsKKyAgY21PU1hCdW5kbGVHZW5lcmF0b3IoY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCk7CisKKyAgc3RydWN0IFNraXBQYXJ0cworICB7CisgICAgU2tpcFBhcnRzKCkKKyAgICAgIDogaW5mb1BsaXN0KGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgYm9vbCBpbmZvUGxpc3Q7IC8vIE5PTElOVChtb2Rlcm5pemUtdXNlLWRlZmF1bHQtbWVtYmVyLWluaXQpCisgIH07CiAKICAgLy8gY3JlYXRlIGFuIGFwcCBidW5kbGUgYXQgYSBnaXZlbiByb290LCBhbmQgcmV0dXJuCiAgIC8vIHRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBidW5kbGUgdGhhdCBjb250YWlucyB0aGUgZXhlY3V0YWJsZQotICB2b2lkIENyZWF0ZUFwcEJ1bmRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwgc3RkOjpzdHJpbmcmIHJvb3QpOworICB2b2lkIENyZWF0ZUFwcEJ1bmRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwgc3RkOjpzdHJpbmcmIHJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpOwogCiAgIC8vIGNyZWF0ZSBhIGZyYW1ld29yayBhdCBhIGdpdmVuIHJvb3QKLSAgdm9pZCBDcmVhdGVGcmFtZXdvcmsoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290KTsKKyAgdm9pZCBDcmVhdGVGcmFtZXdvcmsoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa2lwUGFydHMmIHNraXBQYXJ0cyA9IFNraXBQYXJ0cygpKTsKIAogICAvLyBjcmVhdGUgYSBjZiBidW5kbGUgYXQgYSBnaXZlbiByb290Ci0gIHZvaWQgQ3JlYXRlQ0ZCdW5kbGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiByb290KTsKKyAgdm9pZCBDcmVhdGVDRkJ1bmRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgc3RydWN0IE1hY09TWENvbnRlbnRHZW5lcmF0b3JUeXBlCiAgIHsKICAgICB2aXJ0dWFsIH5NYWNPU1hDb250ZW50R2VuZXJhdG9yVHlwZSgpID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwa2dsb2MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShjbVNvdXJjZUZpbGUgY29uc3QmIHNvdXJjZSwgY29uc3QgY2hhciogcGtnbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcpID0gMDsKICAgfTsKIAogICB2b2lkIEdlbmVyYXRlTWFjT1NYQ29udGVudFN0YXRlbWVudHMoCiAgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gY29uc3QmIHNvdXJjZXMsCi0gICAgTWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGUqIGdlbmVyYXRvcik7Ci0gIHN0ZDo6c3RyaW5nIEluaXRNYWNPU1hDb250ZW50RGlyZWN0b3J5KGNvbnN0IGNoYXIqIHBrZ2xvYyk7CisgICAgTWFjT1NYQ29udGVudEdlbmVyYXRvclR5cGUqIGdlbmVyYXRvciwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CisgIHN0ZDo6c3RyaW5nIEluaXRNYWNPU1hDb250ZW50RGlyZWN0b3J5KGNvbnN0IGNoYXIqIHBrZ2xvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAKICAgdm9pZCBTZXRNYWNDb250ZW50Rm9sZGVycyhzdGQ6OnNldDxzdGQ6OnN0cmluZz4qIG1hY0NvbnRlbnRGb2xkZXJzKQogICB7CkBAIC01Myw3ICs2Nyw2IEBACiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBHVDsKICAgY21NYWtlZmlsZSogTWFrZWZpbGU7CiAgIGNtTG9jYWxHZW5lcmF0b3IqIExvY2FsR2VuZXJhdG9yOwotICBzdGQ6OnN0cmluZyBDb25maWdOYW1lOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4qIE1hY0NvbnRlbnRGb2xkZXJzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtT3B0aW9uQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21PcHRpb25Db21tYW5kLmN4eAppbmRleCAyMmU1OWFjLi5hNThlMmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PcHRpb25Db21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21PcHRpb25Db21tYW5kLmN4eApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgogI2luY2x1ZGUgImNtUG9saWNpZXMuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVTbmFwc2hvdC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgpAQCAtNTIsNyArNTMsNyBAQAogICAvLyBTZWUgaWYgYSBjYWNoZSB2YXJpYWJsZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cwogICAvLyBJZiBzbyBqdXN0IG1ha2Ugc3VyZSB0aGUgZG9jIHN0YXRlIGlzIGNvcnJlY3QKICAgY21TdGF0ZSogc3RhdGUgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRTdGF0ZSgpOwotICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShhcmdzWzBdKTsKKyAgY21Qcm9wIGV4aXN0aW5nVmFsdWUgPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGFyZ3NbMF0pOwogICBpZiAoZXhpc3RpbmdWYWx1ZSAmJgogICAgICAgKHN0YXRlLT5HZXRDYWNoZUVudHJ5VHlwZShhcmdzWzBdKSAhPSBjbVN0YXRlRW51bXM6OlVOSU5JVElBTElaRUQpKSB7CiAgICAgc3RhdGUtPlNldENhY2hlRW50cnlQcm9wZXJ0eShhcmdzWzBdLCAiSEVMUFNUUklORyIsIGFyZ3NbMV0pOwpAQCAtNjAsNyArNjEsNyBAQAogICB9CiAKICAgLy8gTm90aGluZyBpbiB0aGUgY2FjaGUgc28gYWRkIGl0Ci0gIHN0ZDo6c3RyaW5nIGluaXRpYWxWYWx1ZSA9IGV4aXN0aW5nVmFsdWUgPyBleGlzdGluZ1ZhbHVlIDogIk9mZiI7CisgIHN0ZDo6c3RyaW5nIGluaXRpYWxWYWx1ZSA9IGV4aXN0aW5nVmFsdWUgPyAqZXhpc3RpbmdWYWx1ZSA6ICJPZmYiOwogICBpZiAoYXJncy5zaXplKCkgPT0gMykgewogICAgIGluaXRpYWxWYWx1ZSA9IGFyZ3NbMl07CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU9yZGVyRGlyZWN0b3JpZXMuY3h4IGIvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5jeHgKaW5kZXggMDczMjIyYy4uMDM2OWFmMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5jeHgKKysrIGIvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5jeHgKQEAgLTgsNyArOCw5IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKQEAgLTI0OCwxMSArMjUwLDcgQEAKICAgdGhpcy0+Q29tcHV0ZWQgPSBmYWxzZTsKIH0KIAotY21PcmRlckRpcmVjdG9yaWVzOjp+Y21PcmRlckRpcmVjdG9yaWVzKCkKLXsKLSAgY21EZWxldGVBbGwodGhpcy0+Q29uc3RyYWludEVudHJpZXMpOwotICBjbURlbGV0ZUFsbCh0aGlzLT5JbXBsaWNpdERpckVudHJpZXMpOwotfQorY21PcmRlckRpcmVjdG9yaWVzOjp+Y21PcmRlckRpcmVjdG9yaWVzKCkgPSBkZWZhdWx0OwogCiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGNtT3JkZXJEaXJlY3Rvcmllczo6R2V0T3JkZXJlZERpcmVjdG9yaWVzKCkKIHsKQEAgLTI4NiwxNCArMjg0LDE2IEBACiAKICAgICAgIGlmICh0aGlzLT5Jc0ltcGxpY2l0RGlyZWN0b3J5KGRpcikpIHsKICAgICAgICAgdGhpcy0+SW1wbGljaXREaXJFbnRyaWVzLnB1c2hfYmFjaygKLSAgICAgICAgICBuZXcgY21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludFNPTmFtZSh0aGlzLCBmdWxsUGF0aCwgc29uYW1lKSk7CisgICAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtT3JkZXJEaXJlY3Rvcmllc0NvbnN0cmFpbnRTT05hbWU+KHRoaXMsIGZ1bGxQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb25hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCB0aGUgcnVudGltZSBpbmZvcm1hdGlvbiBlbnRyeSBmb3IgdGhpcyBsaWJyYXJ5LgogICAgIHRoaXMtPkNvbnN0cmFpbnRFbnRyaWVzLnB1c2hfYmFjaygKLSAgICAgIG5ldyBjbU9yZGVyRGlyZWN0b3JpZXNDb25zdHJhaW50U09OYW1lKHRoaXMsIGZ1bGxQYXRoLCBzb25hbWUpKTsKKyAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbU9yZGVyRGlyZWN0b3JpZXNDb25zdHJhaW50U09OYW1lPih0aGlzLCBmdWxsUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb25hbWUpKTsKICAgfSBlbHNlIHsKICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHNhbWUgbGlicmFyeSBpcyBsaW5rZWQgbXVsdGlwbGUgdGltZXMuCiAgICAgLy8gSW4gdGhhdCBjYXNlIHRoZSBydW50aW1lIGluZm9ybWF0aW9uIGNoZWNrIG5lZWQgYmUgZG9uZSBvbmx5CkBAIC0zMTQsMjcgKzMxNCwyOCBAQAogICAgICAgc3RkOjpzdHJpbmcgZGlyID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGZ1bGxQYXRoKTsKICAgICAgIGlmICh0aGlzLT5Jc0ltcGxpY2l0RGlyZWN0b3J5KGRpcikpIHsKICAgICAgICAgdGhpcy0+SW1wbGljaXREaXJFbnRyaWVzLnB1c2hfYmFjaygKLSAgICAgICAgICBuZXcgY21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludExpYnJhcnkodGhpcywgZnVsbFBhdGgpKTsKKyAgICAgICAgICBjbTo6bWFrZV91bmlxdWU8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludExpYnJhcnk+KHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGF0aCkpOwogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBsaW5rIGxpYnJhcnkgZW50cnkuCiAgICAgdGhpcy0+Q29uc3RyYWludEVudHJpZXMucHVzaF9iYWNrKAotICAgICAgbmV3IGNtT3JkZXJEaXJlY3Rvcmllc0NvbnN0cmFpbnRMaWJyYXJ5KHRoaXMsIGZ1bGxQYXRoKSk7CisgICAgICBjbTo6bWFrZV91bmlxdWU8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludExpYnJhcnk+KHRoaXMsIGZ1bGxQYXRoKSk7CiAgIH0KIH0KIAogdm9pZCBjbU9yZGVyRGlyZWN0b3JpZXM6OkFkZFVzZXJEaXJlY3RvcmllcygKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBleHRyYSkKIHsKLSAgY21BcHBlbmQodGhpcy0+VXNlckRpcmVjdG9yaWVzLCBleHRyYSk7CisgIGNtOjphcHBlbmQodGhpcy0+VXNlckRpcmVjdG9yaWVzLCBleHRyYSk7CiB9CiAKIHZvaWQgY21PcmRlckRpcmVjdG9yaWVzOjpBZGRMYW5ndWFnZURpcmVjdG9yaWVzKAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGRpcnMpCiB7Ci0gIGNtQXBwZW5kKHRoaXMtPkxhbmd1YWdlRGlyZWN0b3JpZXMsIGRpcnMpOworICBjbTo6YXBwZW5kKHRoaXMtPkxhbmd1YWdlRGlyZWN0b3JpZXMsIGRpcnMpOwogfQogCiB2b2lkIGNtT3JkZXJEaXJlY3Rvcmllczo6U2V0SW1wbGljaXREaXJlY3RvcmllcygKQEAgLTM2OSw3ICszNzAsNyBAQAogICB0aGlzLT5BZGRPcmlnaW5hbERpcmVjdG9yaWVzKHRoaXMtPlVzZXJEaXJlY3Rvcmllcyk7CiAKICAgLy8gQWRkIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgY29uc3RyYWludHMuCi0gIGZvciAoY21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludCogZW50cnkgOiB0aGlzLT5Db25zdHJhaW50RW50cmllcykgeworICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdGhpcy0+Q29uc3RyYWludEVudHJpZXMpIHsKICAgICBlbnRyeS0+QWRkRGlyZWN0b3J5KCk7CiAgIH0KIApAQCAtNDU0LDcgKzQ1NSw3IEBACiAgIC8vIENoZWNrIGZvciBpdGVtcyBpbiBpbXBsaWNpdCBsaW5rIGRpcmVjdG9yaWVzIHRoYXQgaGF2ZSBjb25mbGljdHMKICAgLy8gaW4gdGhlIGV4cGxpY2l0IGRpcmVjdG9yaWVzLgogICBzdGQ6Om9zdHJpbmdzdHJlYW0gY29uZmxpY3RzOwotICBmb3IgKGNtT3JkZXJEaXJlY3Rvcmllc0NvbnN0cmFpbnQqIGVudHJ5IDogdGhpcy0+SW1wbGljaXREaXJFbnRyaWVzKSB7CisgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiB0aGlzLT5JbXBsaWNpdERpckVudHJpZXMpIHsKICAgICBlbnRyeS0+RmluZEltcGxpY2l0Q29uZmxpY3RzKGNvbmZsaWN0cyk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5oIGIvU291cmNlL2NtT3JkZXJEaXJlY3Rvcmllcy5oCmluZGV4IDIzYzUxNDUuLjhjZTUzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbU9yZGVyRGlyZWN0b3JpZXMuaAorKysgYi9Tb3VyY2UvY21PcmRlckRpcmVjdG9yaWVzLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtNDYsOCArNDcsOSBAQAogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBPcmRlcmVkRGlyZWN0b3JpZXM7CiAKLSAgc3RkOjp2ZWN0b3I8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludCo+IENvbnN0cmFpbnRFbnRyaWVzOwotICBzdGQ6OnZlY3RvcjxjbU9yZGVyRGlyZWN0b3JpZXNDb25zdHJhaW50Kj4gSW1wbGljaXREaXJFbnRyaWVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludD4+IENvbnN0cmFpbnRFbnRyaWVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21PcmRlckRpcmVjdG9yaWVzQ29uc3RyYWludD4+CisgICAgSW1wbGljaXREaXJFbnRyaWVzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gVXNlckRpcmVjdG9yaWVzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGFuZ3VhZ2VEaXJlY3RvcmllczsKICAgY21zeXM6OlJlZ3VsYXJFeHByZXNzaW9uIFJlbW92ZUxpYnJhcnlFeHRlbnNpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuY3h4IGIvU291cmNlL2NtT3V0cHV0Q29udmVydGVyLmN4eAppbmRleCBlNjAyYTZkLi4zNTllOWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuY3h4CisrKyBiL1NvdXJjZS9jbU91dHB1dENvbnZlcnRlci5jeHgKQEAgLTI2LDcgKzI2LDcgQEAKICAgLy8gYWxyZWFkeSBleGlzdHMsIHdlIGNhbiB1c2UgYSBzaG9ydC1wYXRoIHRvIHJlZmVyZW5jZSBpdCB3aXRob3V0IGEKICAgLy8gc3BhY2UuCiAgIGlmICh0aGlzLT5HZXRTdGF0ZSgpLT5Vc2VXaW5kb3dzU2hlbGwoKSAmJgotICAgICAgcmVtb3RlLmZpbmQoJyAnKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJgorICAgICAgcmVtb3RlLmZpbmRfZmlyc3Rfb2YoIiAjIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYKICAgICAgIGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMocmVtb3RlKSkgewogICAgIHN0ZDo6c3RyaW5nIHRtcDsKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0U2hvcnRQYXRoKHJlbW90ZSwgdG1wKSkgewpAQCAtNDMsOSArNDMsMTAgQEAKIHsKICAgc3RkOjpzdHJpbmcgcmVzdWx0KHNvdXJjZSk7CiAgIC8vIENvbnZlcnQgaXQgdG8gYW4gb3V0cHV0IHBhdGguCi0gIGlmIChvdXRwdXQgPT0gU0hFTEwgfHwgb3V0cHV0ID09IFdBVENPTVFVT1RFKSB7CisgIGlmIChvdXRwdXQgPT0gU0hFTEwgfHwgb3V0cHV0ID09IFdBVENPTVFVT1RFIHx8IG91dHB1dCA9PSBOSU5KQU1VTFRJKSB7CiAgICAgcmVzdWx0ID0gdGhpcy0+Q29udmVydERpcmVjdG9yeVNlcGFyYXRvcnNGb3JTaGVsbChzb3VyY2UpOwotICAgIHJlc3VsdCA9IHRoaXMtPkVzY2FwZUZvclNoZWxsKHJlc3VsdCwgdHJ1ZSwgZmFsc2UsIG91dHB1dCA9PSBXQVRDT01RVU9URSk7CisgICAgcmVzdWx0ID0gdGhpcy0+RXNjYXBlRm9yU2hlbGwocmVzdWx0LCB0cnVlLCBmYWxzZSwgb3V0cHV0ID09IFdBVENPTVFVT1RFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9PSBOSU5KQU1VTFRJKTsKICAgfSBlbHNlIGlmIChvdXRwdXQgPT0gUkVTUE9OU0UpIHsKICAgICByZXN1bHQgPSB0aGlzLT5Fc2NhcGVGb3JTaGVsbChyZXN1bHQsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogICB9CkBAIC03OSw5ICs4MCw5IEBACiAgIHJldHVybiAoc2hlbGxPcGVyYXRvcnMuY291bnQoc3RyKSAhPSAwKTsKIH0KIAotc3RkOjpzdHJpbmcgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvclNoZWxsKGNtOjpzdHJpbmdfdmlldyBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYWtlVmFycywgYm9vbCBmb3JFY2hvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlV2F0Y29tUXVvdGUpIGNvbnN0CitzdGQ6OnN0cmluZyBjbU91dHB1dENvbnZlcnRlcjo6RXNjYXBlRm9yU2hlbGwoCisgIGNtOjpzdHJpbmdfdmlldyBzdHIsIGJvb2wgbWFrZVZhcnMsIGJvb2wgZm9yRWNobywgYm9vbCB1c2VXYXRjb21RdW90ZSwKKyAgYm9vbCB1bmVzY2FwZU5pbmphQ29uZmlndXJhdGlvbikgY29uc3QKIHsKICAgLy8gRG8gbm90IGVzY2FwZSBzaGVsbCBvcGVyYXRvcnMuCiAgIGlmIChjbU91dHB1dENvbnZlcnRlcklzU2hlbGxPcGVyYXRvcihzdHIpKSB7CkBAIC05NSw2ICs5Niw5IEBACiAgIH0gZWxzZSBpZiAoIXRoaXMtPkxpbmtTY3JpcHRTaGVsbCkgewogICAgIGZsYWdzIHw9IFNoZWxsX0ZsYWdfTWFrZTsKICAgfQorICBpZiAodW5lc2NhcGVOaW5qYUNvbmZpZ3VyYXRpb24pIHsKKyAgICBmbGFncyB8PSBTaGVsbF9GbGFnX1VuZXNjYXBlTmluamFDb25maWd1cmF0aW9uOworICB9CiAgIGlmIChtYWtlVmFycykgewogICAgIGZsYWdzIHw9IFNoZWxsX0ZsYWdfQWxsb3dNYWtlVmFyaWFibGVzOwogICB9CkBAIC0xNjYsMTMgKzE3MCwxNSBAQAogICByZXR1cm4gZm9ybWF0OwogfQogCi1jbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhbkZvcm1hdCBjbU91dHB1dENvbnZlcnRlcjo6R2V0Rm9ydHJhbkZvcm1hdCgKLSAgY29uc3QgY2hhciogdmFsdWUpCitjbU91dHB1dENvbnZlcnRlcjo6Rm9ydHJhblByZXByb2Nlc3MgY21PdXRwdXRDb252ZXJ0ZXI6OkdldEZvcnRyYW5QcmVwcm9jZXNzKAorICBjbTo6c3RyaW5nX3ZpZXcgdmFsdWUpCiB7Ci0gIGlmICghdmFsdWUpIHsKLSAgICByZXR1cm4gRm9ydHJhbkZvcm1hdE5vbmU7CisgIGlmICh2YWx1ZS5lbXB0eSgpKSB7CisgICAgcmV0dXJuIEZvcnRyYW5QcmVwcm9jZXNzOjpVbnNldDsKICAgfQotICByZXR1cm4gR2V0Rm9ydHJhbkZvcm1hdChjbTo6c3RyaW5nX3ZpZXcodmFsdWUpKTsKKworICByZXR1cm4gY21Jc09uKHZhbHVlKSA/IEZvcnRyYW5QcmVwcm9jZXNzOjpOZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgOiBGb3J0cmFuUHJlcHJvY2Vzczo6Tm90TmVlZGVkOwogfQogCiB2b2lkIGNtT3V0cHV0Q29udmVydGVyOjpTZXRMaW5rU2NyaXB0U2hlbGwoYm9vbCBsaW5rU2NyaXB0U2hlbGwpCkBAIC01MTEsNSArNTE3LDE0IEBACiAgICAgfQogICB9CiAKKyAgaWYgKGZsYWdzICYgU2hlbGxfRmxhZ19VbmVzY2FwZU5pbmphQ29uZmlndXJhdGlvbikgeworICAgIHN0ZDo6c3RyaW5nIG5pbmphQ29uZmlnUmVwbGFjZTsKKyAgICBpZiAoZmxhZ3MgJiBTaGVsbF9GbGFnX0lzVW5peCkgeworICAgICAgbmluamFDb25maWdSZXBsYWNlICs9ICdcXCc7CisgICAgfQorICAgIG5pbmphQ29uZmlnUmVwbGFjZSArPSAiJCR7Q09ORklHVVJBVElPTn0iOworICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcob3V0LCBuaW5qYUNvbmZpZ1JlcGxhY2UsICIke0NPTkZJR1VSQVRJT059Iik7CisgIH0KKwogICByZXR1cm4gb3V0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtT3V0cHV0Q29udmVydGVyLmggYi9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuaAppbmRleCAzNDlhMDY5Li5hOGI0NTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvY21PdXRwdXRDb252ZXJ0ZXIuaApAQCAtMjIsNiArMjIsNyBAQAogICB7CiAgICAgU0hFTEwsCiAgICAgV0FUQ09NUVVPVEUsCisgICAgTklOSkFNVUxUSSwKICAgICBSRVNQT05TRQogICB9OwogICBzdGQ6OnN0cmluZyBDb252ZXJ0VG9PdXRwdXRGb3JtYXQoY206OnN0cmluZ192aWV3IHNvdXJjZSwKQEAgLTcwLDEyICs3MSwxNCBAQAogICAgIC8qKiBUaGUgdGFyZ2V0IHNoZWxsIHF1b3RpbmcgdXNlcyBleHRyYSBzaW5nbGUgUXVvdGVzIGZvciBXYXRjb20gdG9vbHMuICAqLwogICAgIFNoZWxsX0ZsYWdfV2F0Y29tUXVvdGUgPSAoMSA8PCA3KSwKIAotICAgIFNoZWxsX0ZsYWdfSXNVbml4ID0gKDEgPDwgOCkKKyAgICBTaGVsbF9GbGFnX0lzVW5peCA9ICgxIDw8IDgpLAorCisgICAgU2hlbGxfRmxhZ19VbmVzY2FwZU5pbmphQ29uZmlndXJhdGlvbiA9ICgxIDw8IDkpLAogICB9OwogCiAgIHN0ZDo6c3RyaW5nIEVzY2FwZUZvclNoZWxsKGNtOjpzdHJpbmdfdmlldyBzdHIsIGJvb2wgbWFrZVZhcnMgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JFY2hvID0gZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlV2F0Y29tUXVvdGUgPSBmYWxzZSkgY29uc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yRWNobyA9IGZhbHNlLCBib29sIHVzZVdhdGNvbVF1b3RlID0gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5lc2NhcGVOaW5qYUNvbmZpZ3VyYXRpb24gPSBmYWxzZSkgY29uc3Q7CiAKICAgc3RhdGljIHN0ZDo6c3RyaW5nIEVzY2FwZUZvckNNYWtlKGNtOjpzdHJpbmdfdmlldyBzdHIpOwogCkBAIC05MSw3ICs5NCwxNCBAQAogICAgIEZvcnRyYW5Gb3JtYXRGcmVlCiAgIH07CiAgIHN0YXRpYyBGb3J0cmFuRm9ybWF0IEdldEZvcnRyYW5Gb3JtYXQoY206OnN0cmluZ192aWV3IHZhbHVlKTsKLSAgc3RhdGljIEZvcnRyYW5Gb3JtYXQgR2V0Rm9ydHJhbkZvcm1hdChjb25zdCBjaGFyKiB2YWx1ZSk7CisKKyAgZW51bSBjbGFzcyBGb3J0cmFuUHJlcHJvY2VzcworICB7CisgICAgVW5zZXQsCisgICAgTm90TmVlZGVkLAorICAgIE5lZWRlZAorICB9OworICBzdGF0aWMgRm9ydHJhblByZXByb2Nlc3MgR2V0Rm9ydHJhblByZXByb2Nlc3MoY206OnN0cmluZ192aWV3IHZhbHVlKTsKIAogcHJpdmF0ZToKICAgY21TdGF0ZSogR2V0U3RhdGUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbU91dHB1dFJlcXVpcmVkRmlsZXNDb21tYW5kLmN4eCBiL1NvdXJjZS9jbU91dHB1dFJlcXVpcmVkRmlsZXNDb21tYW5kLmN4eAppbmRleCBlMDkzYmUwLi5hYTVhYmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21PdXRwdXRSZXF1aXJlZEZpbGVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtT3V0cHV0UmVxdWlyZWRGaWxlc0NvbW1hbmQuY3h4CkBAIC03LDEzICs3LDE1IEBACiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAKKyNpbmNsdWRlIDxjbS9tZW1vcnk+CisKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtOTQsNyArOTYsNyBAQAogICAvKioKICAgICogRGVzdHJ1Y3Rvci4KICAgICovCi0gIH5jbUxCRGVwZW5kKCkgeyBjbURlbGV0ZUFsbCh0aGlzLT5EZXBlbmRJbmZvcm1hdGlvbk1hcCk7IH0KKyAgfmNtTEJEZXBlbmQoKSA9IGRlZmF1bHQ7CiAKICAgY21MQkRlcGVuZChjb25zdCBjbUxCRGVwZW5kJikgPSBkZWxldGU7CiAgIGNtTEJEZXBlbmQmIG9wZXJhdG9yPShjb25zdCBjbUxCRGVwZW5kJikgPSBkZWxldGU7CkBAIC0xMTYsMTQgKzExOCwxMyBAQAogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiB1bmlxdWVJbmNsdWRlczsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3JkZXJlZEFuZFVuaXF1ZUluY2x1ZGVzOwogICAgIGZvciAoYXV0byBjb25zdCYgdGFyZ2V0IDogdGhpcy0+TWFrZWZpbGUtPkdldFRhcmdldHMoKSkgewotICAgICAgY29uc3QgY2hhciogaW5jRGlyUHJvcCA9Ci0gICAgICAgIHRhcmdldC5zZWNvbmQuR2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiKTsKKyAgICAgIGNtUHJvcCBpbmNEaXJQcm9wID0gdGFyZ2V0LnNlY29uZC5HZXRQcm9wZXJ0eSgiSU5DTFVERV9ESVJFQ1RPUklFUyIpOwogICAgICAgaWYgKCFpbmNEaXJQcm9wKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCiAgICAgICBzdGQ6OnN0cmluZyBpbmNEaXJzID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpQcmVwcm9jZXNzKAotICAgICAgICBpbmNEaXJQcm9wLCBjbUdlbmVyYXRvckV4cHJlc3Npb246OlN0cmlwQWxsR2VuZXJhdG9yRXhwcmVzc2lvbnMpOworICAgICAgICAqaW5jRGlyUHJvcCwgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpTdHJpcEFsbEdlbmVyYXRvckV4cHJlc3Npb25zKTsKIAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzID0gY21FeHBhbmRlZExpc3QoaW5jRGlycyk7CiAKQEAgLTE1Miw5ICsxNTMsOSBAQAogICAgKiBHZW5lcmF0ZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBmaWxlIGdpdmVuLiAgUmV0dXJucyBhIHBvaW50ZXIgdG8KICAgICogdGhlIGNtRGVwZW5kSW5mb3JtYXRpb24gb2JqZWN0IGZvciB0aGUgZmlsZS4KICAgICovCi0gIGNvbnN0IGNtRGVwZW5kSW5mb3JtYXRpb24qIEZpbmREZXBlbmRlbmNpZXMoY29uc3QgY2hhciogZmlsZSkKKyAgY29uc3QgY21EZXBlbmRJbmZvcm1hdGlvbiogRmluZERlcGVuZGVuY2llcyhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZSkKICAgewotICAgIGNtRGVwZW5kSW5mb3JtYXRpb24qIGluZm8gPSB0aGlzLT5HZXREZXBlbmRJbmZvcm1hdGlvbihmaWxlLCBudWxscHRyKTsKKyAgICBjbURlcGVuZEluZm9ybWF0aW9uKiBpbmZvID0gdGhpcy0+R2V0RGVwZW5kSW5mb3JtYXRpb24oZmlsZSwgIiIpOwogICAgIHRoaXMtPkdlbmVyYXRlRGVwZW5kSW5mb3JtYXRpb24oaW5mbyk7CiAgICAgcmV0dXJuIGluZm87CiAgIH0KQEAgLTIwMyw3ICsyMDQsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gQWRkIHRoaXMgZmlsZSBhbmQgYWxsIGl0cyBkZXBlbmRlbmNpZXMuCi0gICAgICAgIHRoaXMtPkFkZERlcGVuZGVuY3koaW5mbywgaW5jbHVkZUZpbGUuY19zdHIoKSk7CisgICAgICAgIHRoaXMtPkFkZERlcGVuZGVuY3koaW5mbywgaW5jbHVkZUZpbGUpOwogICAgICAgICAvLy8gYWRkIHRoZSBjeHggZmlsZSBpZiBpdCBleGlzdHMKICAgICAgICAgc3RkOjpzdHJpbmcgY3h4RmlsZSA9IGluY2x1ZGVGaWxlOwogICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IGN4eEZpbGUucmZpbmQoJy4nKTsKQEAgLTI1NCw3ICsyNTUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAgICAgIHRoaXMtPkFkZERlcGVuZGVuY3koaW5mbywgY3h4RmlsZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHRoaXMtPkFkZERlcGVuZGVuY3koaW5mbywgY3h4RmlsZSk7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CkBAIC0yNjQsMTAgKzI2NSwxMCBAQAogICAvKioKICAgICogQWRkIGEgZGVwZW5kZW5jeS4gIFBvc3NpYmx5IHdhbGsgaXQgZm9yIG1vcmUgZGVwZW5kZW5jaWVzLgogICAgKi8KLSAgdm9pZCBBZGREZXBlbmRlbmN5KGNtRGVwZW5kSW5mb3JtYXRpb24qIGluZm8sIGNvbnN0IGNoYXIqIGZpbGUpCisgIHZvaWQgQWRkRGVwZW5kZW5jeShjbURlcGVuZEluZm9ybWF0aW9uKiBpbmZvLCBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZSkKICAgewogICAgIGNtRGVwZW5kSW5mb3JtYXRpb24qIGRlcGVuZEluZm8gPQotICAgICAgdGhpcy0+R2V0RGVwZW5kSW5mb3JtYXRpb24oZmlsZSwgaW5mby0+UGF0aE9ubHkuY19zdHIoKSk7CisgICAgICB0aGlzLT5HZXREZXBlbmRJbmZvcm1hdGlvbihmaWxlLCBpbmZvLT5QYXRoT25seSk7CiAgICAgdGhpcy0+R2VuZXJhdGVEZXBlbmRJbmZvcm1hdGlvbihkZXBlbmRJbmZvKTsKICAgICBpbmZvLT5BZGREZXBlbmRlbmNpZXMoZGVwZW5kSW5mbyk7CiAgIH0KQEAgLTMxMyw3ICszMTQsNyBAQAogICAgICAgICAvLyBEZXBlbmRlbmN5IGhpbnRzIGhhdmUgYmVlbiBnaXZlbi4gIFVzZSB0aGVtIHRvIGJlZ2luIHRoZQogICAgICAgICAvLyByZWN1cnNpb24uCiAgICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUgOiBjRmlsZS5HZXREZXBlbmRzKCkpIHsKLSAgICAgICAgICB0aGlzLT5BZGREZXBlbmRlbmN5KGluZm8sIGZpbGUuY19zdHIoKSk7CisgICAgICAgICAgdGhpcy0+QWRkRGVwZW5kZW5jeShpbmZvLCBmaWxlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZvdW5kIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24uICBXZSBhcmUgZG9uZS4KQEAgLTM2MSw4ICszNjIsOCBAQAogICAgKiBHZXQgYW4gaW5zdGFuY2Ugb2YgY21EZXBlbmRJbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBmaWxlCiAgICAqIG5hbWUuCiAgICAqLwotICBjbURlcGVuZEluZm9ybWF0aW9uKiBHZXREZXBlbmRJbmZvcm1hdGlvbihjb25zdCBjaGFyKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYVBhdGgpCisgIGNtRGVwZW5kSW5mb3JtYXRpb24qIEdldERlcGVuZEluZm9ybWF0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXh0cmFQYXRoKQogICB7CiAgICAgLy8gR2V0IHRoZSBmdWxsIHBhdGggZm9yIHRoZSBmaWxlIHNvIHRoYXQgbG9va3VwIGlzIHVuYW1iaWd1b3VzLgogICAgIHN0ZDo6c3RyaW5nIGZ1bGxQYXRoID0gdGhpcy0+RnVsbFBhdGgoZmlsZSwgZXh0cmFQYXRoKTsKQEAgLTM3MSwxNSArMzcyLDE2IEBACiAgICAgYXV0byByZXN1bHQgPSB0aGlzLT5EZXBlbmRJbmZvcm1hdGlvbk1hcC5maW5kKGZ1bGxQYXRoKTsKICAgICBpZiAocmVzdWx0ICE9IHRoaXMtPkRlcGVuZEluZm9ybWF0aW9uTWFwLmVuZCgpKSB7CiAgICAgICAvLyBGb3VuZCBhbiBpbnN0YW5jZSwgcmV0dXJuIGl0LgotICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLmdldCgpOwogICAgIH0KICAgICAvLyBEaWRuJ3QgZmluZCBhbiBpbnN0YW5jZS4gIENyZWF0ZSBhIG5ldyBvbmUgYW5kIHNhdmUgaXQuCi0gICAgY21EZXBlbmRJbmZvcm1hdGlvbiogaW5mbyA9IG5ldyBjbURlcGVuZEluZm9ybWF0aW9uOworICAgIGF1dG8gaW5mbyA9IGNtOjptYWtlX3VuaXF1ZTxjbURlcGVuZEluZm9ybWF0aW9uPigpOworICAgIGF1dG8gcHRyID0gaW5mby5nZXQoKTsKICAgICBpbmZvLT5GdWxsUGF0aCA9IGZ1bGxQYXRoOwogICAgIGluZm8tPlBhdGhPbmx5ID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGZ1bGxQYXRoKTsKICAgICBpbmZvLT5JbmNsdWRlTmFtZSA9IGZpbGU7Ci0gICAgdGhpcy0+RGVwZW5kSW5mb3JtYXRpb25NYXBbZnVsbFBhdGhdID0gaW5mbzsKLSAgICByZXR1cm4gaW5mbzsKKyAgICB0aGlzLT5EZXBlbmRJbmZvcm1hdGlvbk1hcFtmdWxsUGF0aF0gPSBzdGQ6Om1vdmUoaW5mbyk7CisgICAgcmV0dXJuIHB0cjsKICAgfQogCiAgIC8qKgpAQCAtMzg3LDE0ICszODksOSBAQAogICAgKiBUaGlzIHVzZXMgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMuCiAgICAqIFRPRE86IENhY2hlIHBhdGggY29udmVyc2lvbnMgdG8gcmVkdWNlIEZpbGVFeGlzdHMgY2FsbHMuCiAgICAqLwotICBzdGQ6OnN0cmluZyBGdWxsUGF0aChjb25zdCBjaGFyKiBmbmFtZSwgY29uc3QgY2hhciogZXh0cmFQYXRoKQorICBzdGQ6OnN0cmluZyBGdWxsUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHRyYVBhdGgpCiAgIHsKLSAgICBEaXJlY3RvcnlUb0ZpbGVUb1BhdGhNYXBUeXBlOjppdGVyYXRvciBtOwotICAgIGlmIChleHRyYVBhdGgpIHsKLSAgICAgIG0gPSB0aGlzLT5EaXJlY3RvcnlUb0ZpbGVUb1BhdGhNYXAuZmluZChleHRyYVBhdGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBtID0gdGhpcy0+RGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwLmZpbmQoIiIpOwotICAgIH0KKyAgICBhdXRvIG0gPSB0aGlzLT5EaXJlY3RvcnlUb0ZpbGVUb1BhdGhNYXAuZmluZChleHRyYVBhdGgpOwogCiAgICAgaWYgKG0gIT0gdGhpcy0+RGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwLmVuZCgpKSB7CiAgICAgICBGaWxlVG9QYXRoTWFwVHlwZSYgbWFwID0gbS0+c2Vjb25kOwpAQCAtNDA2LDcgKzQwMyw3IEBACiAKICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhmbmFtZSwgdHJ1ZSkpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGZwID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChmbmFtZSk7Ci0gICAgICB0aGlzLT5EaXJlY3RvcnlUb0ZpbGVUb1BhdGhNYXBbZXh0cmFQYXRoID8gZXh0cmFQYXRoIDogIiJdW2ZuYW1lXSA9IGZwOworICAgICAgdGhpcy0+RGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwW2V4dHJhUGF0aF1bZm5hbWVdID0gZnA7CiAgICAgICByZXR1cm4gZnA7CiAgICAgfQogCkBAIC00MTgsMTIgKzQxNSwxMiBAQAogICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMocGF0aCwgdHJ1ZSkgJiYKICAgICAgICAgICAhY21TeXN0ZW1Ub29sczo6RmlsZUlzRGlyZWN0b3J5KHBhdGgpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGZwID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwYXRoKTsKLSAgICAgICAgdGhpcy0+RGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwW2V4dHJhUGF0aCA/IGV4dHJhUGF0aCA6ICIiXVtmbmFtZV0gPSBmcDsKKyAgICAgICAgdGhpcy0+RGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwW2V4dHJhUGF0aF1bZm5hbWVdID0gZnA7CiAgICAgICAgIHJldHVybiBmcDsKICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZXh0cmFQYXRoKSB7CisgICAgaWYgKCFleHRyYVBhdGguZW1wdHkoKSkgewogICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IGV4dHJhUGF0aDsKICAgICAgIGlmICghcGF0aC5lbXB0eSgpICYmIHBhdGguYmFjaygpICE9ICcvJykgewogICAgICAgICBwYXRoID0gcGF0aCArICIvIjsKQEAgLTQzOCw3ICs0MzUsNyBAQAogICAgIH0KIAogICAgIC8vIENvdWxkbid0IGZpbmQgdGhlIGZpbGUuCi0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGZuYW1lKTsKKyAgICByZXR1cm4gZm5hbWU7CiAgIH0KIAogICBjbU1ha2VmaWxlKiBNYWtlZmlsZTsKQEAgLTQ0OSw3ICs0NDYsOCBAQAogICB1c2luZyBGaWxlVG9QYXRoTWFwVHlwZSA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz47CiAgIHVzaW5nIERpcmVjdG9yeVRvRmlsZVRvUGF0aE1hcFR5cGUgPQogICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBGaWxlVG9QYXRoTWFwVHlwZT47Ci0gIHVzaW5nIERlcGVuZEluZm9ybWF0aW9uTWFwVHlwZSA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjbURlcGVuZEluZm9ybWF0aW9uKj47CisgIHVzaW5nIERlcGVuZEluZm9ybWF0aW9uTWFwVHlwZSA9CisgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxjbURlcGVuZEluZm9ybWF0aW9uPj47CiAgIERlcGVuZEluZm9ybWF0aW9uTWFwVHlwZSBEZXBlbmRJbmZvcm1hdGlvbk1hcDsKICAgRGlyZWN0b3J5VG9GaWxlVG9QYXRoTWFwVHlwZSBEaXJlY3RvcnlUb0ZpbGVUb1BhdGhNYXA7CiB9OwpAQCAtNDc2LDcgKzQ3NCw3IEBACiAgIG1kLlNldE1ha2VmaWxlKCZzdGF0dXMuR2V0TWFrZWZpbGUoKSk7CiAgIG1kLkFkZFNlYXJjaFBhdGgoc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpKTsKICAgLy8gZmluZCB0aGUgZGVwZW5kcyBmb3IgYSBmaWxlCi0gIGNvbnN0IGNtRGVwZW5kSW5mb3JtYXRpb24qIGluZm8gPSBtZC5GaW5kRGVwZW5kZW5jaWVzKGZpbGUuY19zdHIoKSk7CisgIGNvbnN0IGNtRGVwZW5kSW5mb3JtYXRpb24qIGluZm8gPSBtZC5GaW5kRGVwZW5kZW5jaWVzKGZpbGUpOwogICBpZiAoaW5mbykgewogICAgIC8vIHdyaXRlIHRoZW0gb3V0CiAgICAgRklMRSogZm91dCA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6Rm9wZW4ob3V0cHV0RmlsZSwgInciKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVBpcGVDb25uZWN0aW9uLmggYi9Tb3VyY2UvY21QaXBlQ29ubmVjdGlvbi5oCmluZGV4IDgxZjhhNDkuLjEyMTU3MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVBpcGVDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL2NtUGlwZUNvbm5lY3Rpb24uaApAQCAtNiw3ICs2LDcgQEAKIAogI2luY2x1ZGUgPHN0cmluZz4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21Db25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUG9saWNpZXMuY3h4IGIvU291cmNlL2NtUG9saWNpZXMuY3h4CmluZGV4IDVjOGJjOTguLjAxZThjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVBvbGljaWVzLmN4eAorKysgYi9Tb3VyY2UvY21Qb2xpY2llcy5jeHgKQEAgLTcsOSArNywxMSBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCisjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtNzIsNiArNzQsNyBAQAogI2RlZmluZSBQT0xJQ1lfQ0FTRShJRCwgVl9NQUpPUiwgVl9NSU5PUiwgVl9QQVRDSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBjYXNlIGNtUG9saWNpZXM6OklEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHJldHVybiAjVl9NQUpPUiAiLiIgI1ZfTUlOT1IgIi4iICNWX1BBVENIOworICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKICAgICBDTV9GT1JfRUFDSF9QT0xJQ1lfSURfVkVSU0lPTihQT0xJQ1lfQ0FTRSkKICN1bmRlZiBQT0xJQ1lfQ0FTRQogICAgIGNhc2UgY21Qb2xpY2llczo6Q01QQ09VTlQ6CkBAIC05MCw2ICs5Myw3IEBACiAgICAgICAgICAgICAobWFqb3JWID09IChWX01BSk9SKSAmJiBtaW5vclYgKyAxIDwgKFZfTUlOT1IpICsgMSkgfHwgICAgICAgICAgICBcCiAgICAgICAgICAgICAobWFqb3JWID09IChWX01BSk9SKSAmJiBtaW5vclYgPT0gKFZfTUlOT1IpICYmICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgcGF0Y2hWICsgMSA8IChWX1BBVENIKSArIDEpKTsKKyAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1icmFuY2gtY2xvbmUpCiAgICAgQ01fRk9SX0VBQ0hfUE9MSUNZX0lEX1ZFUlNJT04oUE9MSUNZX0NBU0UpCiAjdW5kZWYgUE9MSUNZX0NBU0UKICAgICBjYXNlIGNtUG9saWNpZXM6OkNNUENPVU5UOgpAQCAtMTU1LDcgKzE1OSw4IEBACiAKIGJvb2wgY21Qb2xpY2llczo6QXBwbHlQb2xpY3lWZXJzaW9uKGNtTWFrZWZpbGUqIG1mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2FybkNvbXBhdCB3YXJuQ29tcGF0KQogewogICAvLyBQYXJzZSBjb21wb25lbnRzIG9mIHRoZSBtaW5pbXVtIHZlcnNpb24uCiAgIHVuc2lnbmVkIGludCBtaW5NYWpvciA9IDI7CkBAIC0yNDIsMTMgKzI0NywzNCBAQAogICAgIHBvbFBhdGNoID0gbWF4UGF0Y2g7CiAgIH0KIAotICByZXR1cm4gY21Qb2xpY2llczo6QXBwbHlQb2xpY3lWZXJzaW9uKG1mLCBwb2xNYWpvciwgcG9sTWlub3IsIHBvbFBhdGNoKTsKKyAgcmV0dXJuIGNtUG9saWNpZXM6OkFwcGx5UG9saWN5VmVyc2lvbihtZiwgcG9sTWFqb3IsIHBvbE1pbm9yLCBwb2xQYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuQ29tcGF0KTsKIH0KIAogYm9vbCBjbVBvbGljaWVzOjpBcHBseVBvbGljeVZlcnNpb24oY21NYWtlZmlsZSogbWYsIHVuc2lnbmVkIGludCBtYWpvclZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtaW5vclZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYXRjaFZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYXRjaFZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhcm5Db21wYXQgd2FybkNvbXBhdCkKIHsKKyAgLy8gV2FybiBhYm91dCBwb2xpY3kgdmVyc2lvbnMgZm9yIHdoaWNoIHN1cHBvcnQgd2lsbCBiZSByZW1vdmVkLgorICBpZiAod2FybkNvbXBhdCA9PSBXYXJuQ29tcGF0OjpPbiAmJgorICAgICAgKG1ham9yVmVyIDwgMiB8fCAobWFqb3JWZXIgPT0gMiAmJiBtaW5vclZlciA8IDgpIHx8CisgICAgICAgKG1ham9yVmVyID09IDIgJiYgbWlub3JWZXIgPT0gOCAmJiBwYXRjaFZlciA8IDEyKSkgJiYKKyAgICAgIC8vIEF2b2lkIHdhcm5pbmcgb24gY2FsbHMgZ2VuZXJhdGVkIGJ5IGluc3RhbGwoRVhQT1JUKQorICAgICAgLy8gaW4gQ01ha2UgdmVyc2lvbnMgcHJpb3IgdG8gMy4xOC4KKyAgICAgICEobWFqb3JWZXIgPT0gMiAmJiBtaW5vclZlciA9PSA2ICYmIHBhdGNoVmVyID09IDAgJiYKKyAgICAgICAgbWYtPkdldFN0YXRlU25hcHNob3QoKS5DYW5Qb3BQb2xpY3lTY29wZSgpICYmCisgICAgICAgIGNtU3lzdGVtVG9vbHM6OlN0cnVjbXAobWYtPkdldEJhY2t0cmFjZSgpLlRvcCgpLk5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY21ha2VfcG9saWN5IikgPT0gMCkpIHsKKyAgICBtZi0+SXNzdWVNZXNzYWdlKAorICAgICAgTWVzc2FnZVR5cGU6OkRFUFJFQ0FUSU9OX1dBUk5JTkcsCisgICAgICAiQ29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDwgMi44LjEyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tICIKKyAgICAgICJhIGZ1dHVyZSB2ZXJzaW9uIG9mIENNYWtlLlxuIgorICAgICAgIlVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggIgorICAgICAgInRvIHRlbGwgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCAiCisgICAgICAib2xkZXIgdmVyc2lvbnMuIik7CisgIH0KKwogICAvLyBub3cgbG9vcCBvdmVyIGFsbCB0aGUgcG9saWNpZXMgYW5kIHNldCB0aGVtIGFzIGFwcHJvcHJpYXRlCiAgIHN0ZDo6dmVjdG9yPGNtUG9saWNpZXM6OlBvbGljeUlEPiBhbmNpZW50UG9saWNpZXM7CiAgIGZvciAoUG9saWN5SUQgcGlkID0gY21Qb2xpY2llczo6Q01QMDAwMDsgcGlkICE9IGNtUG9saWNpZXM6OkNNUENPVU5UOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUG9saWNpZXMuaCBiL1NvdXJjZS9jbVBvbGljaWVzLmgKaW5kZXggOTJjODBiYi4uYmJhOGIwMyAxMDA2NDQKLS0tIGEvU291cmNlL2NtUG9saWNpZXMuaAorKysgYi9Tb3VyY2UvY21Qb2xpY2llcy5oCkBAIC0yOTAsNyArMjkwLDQwIEBACiAgIFNFTEVDVChQT0xJQ1ksIENNUDAwOTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAiRXh0ZXJuYWxQcm9qZWN0X0FkZCB3aXRoIEdJVF9TVUJNT0RVTEVTIFwiXCIgaW5pdGlhbGl6ZXMgbm8gIiAgICAgICBcCiAgICAgICAgICAic3VibW9kdWxlcy4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAzLCAxNiwgMCwgY21Qb2xpY2llczo6V0FSTikKKyAgICAgICAgIDMsIDE2LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDA5OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJGaW5kRkxFWCBydW5zIGZsZXggaW4gQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSIHdoZW4gZXhlY3V0aW5nLiIsIDMsIFwKKyAgICAgICAgIDE3LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDA5OSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJMaW5rIHByb3BlcnRpZXMgYXJlIHRyYW5zaXRpdmUgb3ZlciBwcml2YXRlIGRlcGVuZGVuY3kgb24gc3RhdGljICIgIFwKKyAgICAgICAgICJsaWJyYXJpZXMuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIDMsIDE3LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwMCwgIkxldCBBVVRPTU9DIGFuZCBBVVRPVUlDIHByb2Nlc3MgLmhoIGZpbGVzLiIsIDMsICAgIFwKKyAgICAgICAgIDE3LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJ0YXJnZXRfY29tcGlsZV9vcHRpb25zIGhvbm9ycyBCRUZPUkUga2V5d29yZCBpbiBhbGwgc2NvcGVzLiIsIDMsICAgIFwKKyAgICAgICAgIDE3LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJtYXJrX2FzX2FkdmFuY2VkKCkgZG9lcyBub3RoaW5nIGlmIGEgY2FjaGUgZW50cnkgZG9lcyBub3QgZXhpc3QuIiwgIFwKKyAgICAgICAgIDMsIDE3LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJNdWx0aXBsZSBleHBvcnQoKSB3aXRoIHNhbWUgRklMRSB3aXRob3V0IEFQUEVORCBpcyBub3QgYWxsb3dlZC4iLCAgIFwKKyAgICAgICAgIDMsIDE4LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgbm93IGRldGVjdGVkIGZvciBOVkNDLCBlbXB0eSAiICAgICAgICAgICAgIFwKKyAgICAgICAgICJDVURBX0FSQ0hJVEVDVFVSRVMgbm90IGFsbG93ZWQuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIDMsIDE4LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwNSwgIkRldmljZSBsaW5rIHN0ZXAgdXNlcyB0aGUgbGluayBvcHRpb25zLiIsIDMsIDE4LCAgIFwKKyAgICAgICAgIDAsIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwNiwgIlRoZSBEb2N1bWVudGF0aW9uIG1vZHVsZSBpcyByZW1vdmVkLiIsIDMsIDE4LCAwLCAgIFwKKyAgICAgICAgIGNtUG9saWNpZXM6OldBUk4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwNywgIkFuIEFMSUFTIHRhcmdldCBjYW5ub3Qgb3ZlcndyaXRlIGFub3RoZXIgdGFyZ2V0LiIsIFwKKyAgICAgICAgIDMsIDE4LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwOCwgIkEgdGFyZ2V0IGNhbm5vdCBsaW5rIHRvIGl0c2VsZiB0aHJvdWdoIGFuIGFsaWFzLiIsIFwKKyAgICAgICAgIDMsIDE4LCAwLCBjbVBvbGljaWVzOjpXQVJOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgU0VMRUNUKFBPTElDWSwgQ01QMDEwOSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICJmaW5kX3Byb2dyYW0oKSByZXF1aXJlcyBwZXJtaXNzaW9uIHRvIGV4ZWN1dGUgYnV0IG5vdCB0byByZWFkLiIsIDMsIFwKKyAgICAgICAgIDE5LCAwLCBjbVBvbGljaWVzOjpXQVJOKQogCiAjZGVmaW5lIENNX1NFTEVDVF9JRChGLCBBMSwgQTIsIEEzLCBBNCwgQTUsIEE2KSBGKEExKQogI2RlZmluZSBDTV9GT1JfRUFDSF9QT0xJQ1lfSUQoUE9MSUNZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzE5LDcgKzM1MiwxMSBAQAogICBGKENNUDAwNzYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGKENNUDAwODEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGKENNUDAwODMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGKENNUDAwOTUpCisgIEYoQ01QMDA5NSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoQ01QMDA5OSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoQ01QMDEwNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoQ01QMDEwNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoQ01QMDEwOCkKIAogLyoqIFxjbGFzcyBjbVBvbGljaWVzCiAgKiBcYnJpZWYgSGFuZGxlcyBjaGFuZ2VzIGluIENNYWtlIGJlaGF2aW9yIGFuZCBwb2xpY2llcwpAQCAtMzYyLDEyICszOTksMjAgQEAKICAgLy8hIEdldCB0aGUgZGVmYXVsdCBzdGF0dXMgZm9yIGEgcG9saWN5CiAgIHN0YXRpYyBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgR2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OlBvbGljeUlEIGlkKTsKIAorICBlbnVtIGNsYXNzIFdhcm5Db21wYXQKKyAgeworICAgIE9mZiwKKyAgICBPbgorICB9OworCiAgIC8vISBTZXQgYSBwb2xpY3kgbGV2ZWwgZm9yIHRoaXMgbGlzdGZpbGUKICAgc3RhdGljIGJvb2wgQXBwbHlQb2xpY3lWZXJzaW9uKGNtTWFrZWZpbGUqIG1mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb25fbWF4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2ZXJzaW9uX21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhcm5Db21wYXQgd2FybkNvbXBhdCk7CiAgIHN0YXRpYyBib29sIEFwcGx5UG9saWN5VmVyc2lvbihjbU1ha2VmaWxlKiBtZiwgdW5zaWduZWQgaW50IG1ham9yVmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1pbm9yVmVyLCB1bnNpZ25lZCBpbnQgcGF0Y2hWZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1pbm9yVmVyLCB1bnNpZ25lZCBpbnQgcGF0Y2hWZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXJuQ29tcGF0IHdhcm5Db21wYXQpOwogCiAgIC8vISByZXR1cm4gYSB3YXJuaW5nIHN0cmluZyBmb3IgYSBnaXZlbiBwb2xpY3kKICAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldFBvbGljeVdhcm5pbmcoY21Qb2xpY2llczo6UG9saWN5SUQgaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvY2Vzc091dHB1dC5jeHggYi9Tb3VyY2UvY21Qcm9jZXNzT3V0cHV0LmN4eAppbmRleCBlODBlYTVjLi4wZmI0ZmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Qcm9jZXNzT3V0cHV0LmN4eAorKysgYi9Tb3VyY2UvY21Qcm9jZXNzT3V0cHV0LmN4eApAQCAtNCw3ICs0LDEwIEBACiAjaW5jbHVkZSAiY21Qcm9jZXNzT3V0cHV0LmgiCiAKICNpZiBkZWZpbmVkKF9XSU4zMikKKyMgIGluY2x1ZGUgPGNtL21lbW9yeT4KKwogIyAgaW5jbHVkZSA8d2luZG93cy5oPgorCiB1bnNpZ25lZCBpbnQgY21Qcm9jZXNzT3V0cHV0OjpkZWZhdWx0Q29kZXBhZ2UgPQogICBLV1NZU19FTkNPRElOR19ERUZBVUxUX0NPREVQQUdFOwogI2VuZGlmCkBAIC0xNDMsOSArMTQ2LDkgQEAKICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgIGNvbnN0IGludCB3bGVuZ3RoID0KICAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyKGNvZGVwYWdlLCAwLCByYXcuY19zdHIoKSwgaW50KHJhdy5zaXplKCkpLCBOVUxMLCAwKTsKLSAgd2NoYXJfdCogd2RhdGEgPSBuZXcgd2NoYXJfdFt3bGVuZ3RoXTsKLSAgaW50IHIgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKGNvZGVwYWdlLCAwLCByYXcuY19zdHIoKSwgaW50KHJhdy5zaXplKCkpLCB3ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdsZW5ndGgpOworICBhdXRvIHdkYXRhID0gY206Om1ha2VfdW5pcXVlPHdjaGFyX3RbXT4od2xlbmd0aCk7CisgIGludCByID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlcGFnZSwgMCwgcmF3LmNfc3RyKCksIGludChyYXcuc2l6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkYXRhLmdldCgpLCB3bGVuZ3RoKTsKICAgaWYgKHIgPiAwKSB7CiAgICAgaWYgKGxhc3RDaGFyKSB7CiAgICAgICAqbGFzdENoYXIgPSAwOwpAQCAtMTU0LDE4ICsxNTcsMTYgQEAKICAgICAgICAgKmxhc3RDaGFyID0gd2RhdGFbd2xlbmd0aCAtIDFdOwogICAgICAgfQogICAgIH0KLSAgICBpbnQgbGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZShkZWZhdWx0Q29kZXBhZ2UsIDAsIHdkYXRhLCB3bGVuZ3RoLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIE5VTEwpOwotICAgIGNoYXIqIGRhdGEgPSBuZXcgY2hhcltsZW5ndGhdOwotICAgIHIgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGRlZmF1bHRDb2RlcGFnZSwgMCwgd2RhdGEsIHdsZW5ndGgsIGRhdGEsIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICBpbnQgbGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZShkZWZhdWx0Q29kZXBhZ2UsIDAsIHdkYXRhLmdldCgpLCB3bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworICAgIGF1dG8gZGF0YSA9IGNtOjptYWtlX3VuaXF1ZTxjaGFyW10+KGxlbmd0aCk7CisgICAgciA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoZGVmYXVsdENvZGVwYWdlLCAwLCB3ZGF0YS5nZXQoKSwgd2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdldCgpLCBsZW5ndGgsIE5VTEwsIE5VTEwpOwogICAgIGlmIChyID4gMCkgewotICAgICAgZGVjb2RlZCA9IHN0ZDo6c3RyaW5nKGRhdGEsIGxlbmd0aCk7CisgICAgICBkZWNvZGVkID0gc3RkOjpzdHJpbmcoZGF0YS5nZXQoKSwgbGVuZ3RoKTsKICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgIH0KLSAgICBkZWxldGVbXSBkYXRhOwogICB9Ci0gIGRlbGV0ZVtdIHdkYXRhOwogICByZXR1cm4gc3VjY2VzczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvamVjdENvbW1hbmQuY3h4IGIvU291cmNlL2NtUHJvamVjdENvbW1hbmQuY3h4CmluZGV4IDdiYjUyMDkuLmJiNmRiOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVByb2plY3RDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21Qcm9qZWN0Q29tbWFuZC5jeHgKQEAgLTM5LDEzICszOSwxOCBAQAogCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9qZWN0TmFtZSA9IGFyZ3NbMF07CiAKKyAgaWYgKCFJbmNsdWRlQnlWYXJpYWJsZShzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNNQUtFX1BST0pFQ1RfIiArIHByb2plY3ROYW1lICsgIl9JTkNMVURFX0JFRk9SRSIpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgbWYuU2V0UHJvamVjdE5hbWUocHJvamVjdE5hbWUpOwogCiAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbihwcm9qZWN0TmFtZSArICJfQklOQVJZX0RJUiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtZi5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1mLkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJWYWx1ZSBDb21wdXRlZCBieSBDTWFrZSIsIGNtU3RhdGVFbnVtczo6U1RBVElDKTsKICAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKHByb2plY3ROYW1lICsgIl9TT1VSQ0VfRElSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1mLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbWYuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIlZhbHVlIENvbXB1dGVkIGJ5IENNYWtlIiwgY21TdGF0ZUVudW1zOjpTVEFUSUMpOwogCiAgIG1mLkFkZERlZmluaXRpb24oIlBST0pFQ1RfQklOQVJZX0RJUiIsIG1mLkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKSk7CkBAIC02MSw3ICs2Niw3IEBACiAgIC8vIHdpbGwgd29yay4KICAgaWYgKCFtZi5HZXREZWZpbml0aW9uKCJDTUFLRV9QUk9KRUNUX05BTUUiKSB8fCBtZi5Jc1Jvb3RNYWtlZmlsZSgpKSB7CiAgICAgbWYuQWRkRGVmaW5pdGlvbigiQ01BS0VfUFJPSkVDVF9OQU1FIiwgcHJvamVjdE5hbWUpOwotICAgIG1mLkFkZENhY2hlRGVmaW5pdGlvbigiQ01BS0VfUFJPSkVDVF9OQU1FIiwgcHJvamVjdE5hbWUuY19zdHIoKSwKKyAgICBtZi5BZGRDYWNoZURlZmluaXRpb24oIkNNQUtFX1BST0pFQ1RfTkFNRSIsIHByb2plY3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFsdWUgQ29tcHV0ZWQgYnkgQ01ha2UiLCBjbVN0YXRlRW51bXM6OlNUQVRJQyk7CiAgIH0KIApAQCAtMjk4LDcgKzMwMyw3IEBACiAgICAgc3RkOjpzdHJpbmcgdnc7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IHZ2KSB7CiAgICAgICBjb25zdCBjaGFyKiBjb25zdCB2ID0gbWYuR2V0RGVmaW5pdGlvbihpKTsKLSAgICAgIGlmICh2ICYmICp2KSB7CisgICAgICBpZiAoY21Ob25lbXB0eSh2KSkgewogICAgICAgICBpZiAoY21wMDA0OCA9PSBjbVBvbGljaWVzOjpXQVJOKSB7CiAgICAgICAgICAgaWYgKCFpbmplY3RlZFByb2plY3RDb21tYW5kKSB7CiAgICAgICAgICAgICB2dyArPSAiXG4gICI7CkBAIC0zNzQsNyArMzc5LDcgQEAKICAgLy8gQ01ha2VMaXN0cy50eHQgZmlsZSwgdGhlbiBnbyB3aXRoIHRoZSBsYXN0IG9uZS4KICAgaWYgKCFtZi5HZXREZWZpbml0aW9uKG5hbWUpIHx8IG1mLklzUm9vdE1ha2VmaWxlKCkpIHsKICAgICBtZi5BZGREZWZpbml0aW9uKG5hbWUsIHZhbHVlKTsKLSAgICBtZi5BZGRDYWNoZURlZmluaXRpb24obmFtZSwgdmFsdWUuY19zdHIoKSwgIlZhbHVlIENvbXB1dGVkIGJ5IENNYWtlIiwKKyAgICBtZi5BZGRDYWNoZURlZmluaXRpb24obmFtZSwgdmFsdWUsICJWYWx1ZSBDb21wdXRlZCBieSBDTWFrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6U1RBVElDKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvcGVydHkuaCBiL1NvdXJjZS9jbVByb3BlcnR5LmgKaW5kZXggODBmMTMxYS4uYjBmY2NlNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtUHJvcGVydHkuaAorKysgYi9Tb3VyY2UvY21Qcm9wZXJ0eS5oCkBAIC01LDYgKzUsOCBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPHN0cmluZz4KKwogY2xhc3MgY21Qcm9wZXJ0eQogewogcHVibGljOgpAQCAtMjIsNCArMjQsNiBAQAogICB9OwogfTsKIAordXNpbmcgY21Qcm9wID0gY29uc3Qgc3RkOjpzdHJpbmcqOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbi5jeHggYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uY3h4CmluZGV4IDZhMzE3NGMuLjE3OTZiYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbi5jeHgKKysrIGIvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uLmN4eApAQCAtMiwxOSArMiwzOCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb24uaCIKIAotdm9pZCBjbVByb3BlcnR5RGVmaW5pdGlvbjo6RGVmaW5lUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzaG9ydERlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZnVsbERlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGFpbikKKyNpbmNsdWRlIDx0dXBsZT4KKworY21Qcm9wZXJ0eURlZmluaXRpb246OmNtUHJvcGVydHlEZWZpbml0aW9uKHN0ZDo6c3RyaW5nIHNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZnVsbERlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhaW5lZCkKKyAgOiBTaG9ydERlc2NyaXB0aW9uKHN0ZDo6bW92ZShzaG9ydERlc2NyaXB0aW9uKSkKKyAgLCBGdWxsRGVzY3JpcHRpb24oc3RkOjptb3ZlKGZ1bGxEZXNjcmlwdGlvbikpCisgICwgQ2hhaW5lZChjaGFpbmVkKQogewotICB0aGlzLT5OYW1lID0gbmFtZTsKLSAgdGhpcy0+U2NvcGUgPSBzY29wZTsKLSAgdGhpcy0+Q2hhaW5lZCA9IGNoYWluOwotICBpZiAoc2hvcnREZXNjcmlwdGlvbikgewotICAgIHRoaXMtPlNob3J0RGVzY3JpcHRpb24gPSBzaG9ydERlc2NyaXB0aW9uOworfQorCit2b2lkIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwOjpEZWZpbmVQcm9wZXJ0eSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSwKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIFNob3J0RGVzY3JpcHRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBGdWxsRGVzY3JpcHRpb24sCisgIGJvb2wgY2hhaW4pCit7CisgIGF1dG8gaXQgPSB0aGlzLT5NYXBfLmZpbmQoa2V5X3R5cGUobmFtZSwgc2NvcGUpKTsKKyAgaWYgKGl0ID09IHRoaXMtPk1hcF8uZW5kKCkpIHsKKyAgICAvLyB0cnlfZW1wbGFjZSgpIHNpbmNlIEMrKzE3CisgICAgdGhpcy0+TWFwXy5lbXBsYWNlKAorICAgICAgc3RkOjpwaWVjZXdpc2VfY29uc3RydWN0LCBzdGQ6OmZvcndhcmRfYXNfdHVwbGUobmFtZSwgc2NvcGUpLAorICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKFNob3J0RGVzY3JpcHRpb24sIEZ1bGxEZXNjcmlwdGlvbiwgY2hhaW4pKTsKICAgfQotICBpZiAoZnVsbERlc2NyaXB0aW9uKSB7Ci0gICAgdGhpcy0+RnVsbERlc2NyaXB0aW9uID0gZnVsbERlc2NyaXB0aW9uOworfQorCitjbVByb3BlcnR5RGVmaW5pdGlvbiBjb25zdCogY21Qcm9wZXJ0eURlZmluaXRpb25NYXA6OkdldFByb3BlcnR5RGVmaW5pdGlvbigKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSkgY29uc3QKK3sKKyAgYXV0byBpdCA9IHRoaXMtPk1hcF8uZmluZChrZXlfdHlwZShuYW1lLCBzY29wZSkpOworICBpZiAoaXQgIT0gdGhpcy0+TWFwXy5lbmQoKSkgeworICAgIHJldHVybiAmaXQtPnNlY29uZDsKICAgfQorCisgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uLmggYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uaAppbmRleCAwZDY4YzMyLi5mODNiYzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb24uaApAQCAtNSw3ICs1LDkgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAKQEAgLTEzLDI4ICsxNSwxOSBAQAogICogXGJyaWVmIFByb3BlcnR5IG1ldGEtaW5mb3JtYXRpb24KICAqCiAgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCBwcm9wZXJ0eToKLSAqIC0gTmFtZTsKICAqIC0gVmFyaW91cyBkb2N1bWVudGF0aW9uIHN0cmluZ3M7Ci0gKiAtIFRoZSBzY29wZSBvZiB0aGUgcHJvcGVydHk7CiAgKiAtIElmIHRoZSBwcm9wZXJ0eSBpcyBjaGFpbmVkLgogICovCiBjbGFzcyBjbVByb3BlcnR5RGVmaW5pdGlvbgogewogcHVibGljOgotICAvLy8gRGVmaW5lIHRoaXMgcHJvcGVydHkKLSAgdm9pZCBEZWZpbmVQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIFNob3J0RGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogRnVsbERlc2NyaXB0aW9uLCBib29sIGNoYWluZWQpOwotCi0gIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yCi0gIGNtUHJvcGVydHlEZWZpbml0aW9uKCkgeyB0aGlzLT5DaGFpbmVkID0gZmFsc2U7IH0KKyAgLy8vIENvbnN0cnVjdG9yCisgIGNtUHJvcGVydHlEZWZpbml0aW9uKHN0ZDo6c3RyaW5nIHNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbmVkKTsKIAogICAvLy8gSXMgdGhlIHByb3BlcnR5IGNoYWluZWQ/CiAgIGJvb2wgSXNDaGFpbmVkKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Q2hhaW5lZDsgfQogCi0gIC8vLyBHZXQgdGhlIHNjb3BlCi0gIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBHZXRTY29wZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlNjb3BlOyB9Ci0KICAgLy8vIEdldCB0aGUgZG9jdW1lbnRhdGlvbiAoc2hvcnQgdmVyc2lvbikKICAgY29uc3Qgc3RkOjpzdHJpbmcmIEdldFNob3J0RGVzY3JpcHRpb24oKSBjb25zdAogICB7CkBAIC00NywxMiArNDAsMzAgQEAKICAgICByZXR1cm4gdGhpcy0+RnVsbERlc2NyaXB0aW9uOwogICB9CiAKLXByb3RlY3RlZDoKLSAgc3RkOjpzdHJpbmcgTmFtZTsKK3ByaXZhdGU6CiAgIHN0ZDo6c3RyaW5nIFNob3J0RGVzY3JpcHRpb247CiAgIHN0ZDo6c3RyaW5nIEZ1bGxEZXNjcmlwdGlvbjsKLSAgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIFNjb3BlOwogICBib29sIENoYWluZWQ7CiB9OwogCisvKiogXGNsYXNzIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwCisgKiBcYnJpZWYgTWFwIHByb3BlcnR5IG5hbWUgYW5kIHNjb3BlIHRvIHRoZWlyIGRlZmluaXRpb24KKyAqLworY2xhc3MgY21Qcm9wZXJ0eURlZmluaXRpb25NYXAKK3sKK3B1YmxpYzoKKyAgLy8gZGVmaW5lIHRoZSBwcm9wZXJ0eQorICB2b2lkIERlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIFNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbik7CisKKyAgLy8gZ2V0IHRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uIGlmIHByZXNlbnQsIG90aGVyd2lzZSBudWxscHRyCisgIGNtUHJvcGVydHlEZWZpbml0aW9uIGNvbnN0KiBHZXRQcm9wZXJ0eURlZmluaXRpb24oCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgIHVzaW5nIGtleV90eXBlID0gc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBjbVByb3BlcnR5OjpTY29wZVR5cGU+OworICBzdGQ6Om1hcDxrZXlfdHlwZSwgY21Qcm9wZXJ0eURlZmluaXRpb24+IE1hcF87Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5jeHggYi9Tb3VyY2UvY21Qcm9wZXJ0eURlZmluaXRpb25NYXAuY3h4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzUyZWQ3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5jeHgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb25NYXAuaCIKLQotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLXZvaWQgY21Qcm9wZXJ0eURlZmluaXRpb25NYXA6OkRlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogU2hvcnREZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIEZ1bGxEZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhaW4pCi17Ci0gIGF1dG8gaXQgPSB0aGlzLT5maW5kKG5hbWUpOwotICBjbVByb3BlcnR5RGVmaW5pdGlvbiogcHJvcDsKLSAgaWYgKGl0ID09IHRoaXMtPmVuZCgpKSB7Ci0gICAgcHJvcCA9ICYoKnRoaXMpW25hbWVdOwotICAgIHByb3AtPkRlZmluZVByb3BlcnR5KG5hbWUsIHNjb3BlLCBTaG9ydERlc2NyaXB0aW9uLCBGdWxsRGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhaW4pOwotICB9Ci19Ci0KLWJvb2wgY21Qcm9wZXJ0eURlZmluaXRpb25NYXA6OklzUHJvcGVydHlEZWZpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdAotewotICByZXR1cm4gdGhpcy0+ZmluZChuYW1lKSAhPSB0aGlzLT5lbmQoKTsKLX0KLQotYm9vbCBjbVByb3BlcnR5RGVmaW5pdGlvbk1hcDo6SXNQcm9wZXJ0eUNoYWluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gIGF1dG8gaXQgPSB0aGlzLT5maW5kKG5hbWUpOwotICBpZiAoaXQgPT0gdGhpcy0+ZW5kKCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gaXQtPnNlY29uZC5Jc0NoYWluZWQoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVByb3BlcnR5RGVmaW5pdGlvbk1hcC5oIGIvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uTWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYzc5MTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL2NtUHJvcGVydHlEZWZpbml0aW9uTWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwX2gKLSNkZWZpbmUgY21Qcm9wZXJ0eURlZmluaXRpb25NYXBfaAotCi0jaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJjbVByb3BlcnR5LmgiCi0jaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb24uaCIKLQotY2xhc3MgY21Qcm9wZXJ0eURlZmluaXRpb25NYXAKLSAgOiBwdWJsaWMgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNtUHJvcGVydHlEZWZpbml0aW9uPgotewotcHVibGljOgotICAvLyBkZWZpbmUgdGhlIHByb3BlcnR5Ci0gIHZvaWQgRGVmaW5lUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBTaG9ydERlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbik7Ci0KLSAgLy8gaGFzIGEgbmFtZWQgcHJvcGVydHkgYmVlbiBkZWZpbmVkCi0gIGJvb2wgSXNQcm9wZXJ0eURlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OwotCi0gIC8vIGlzIGEgbmFtZWQgcHJvcGVydHkgc2V0IHRvIGNoYWluCi0gIGJvb2wgSXNQcm9wZXJ0eUNoYWluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Qcm9wZXJ0eU1hcC5jeHggYi9Tb3VyY2UvY21Qcm9wZXJ0eU1hcC5jeHgKaW5kZXggYTNkNDk0Ni4uZjIyZjM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtUHJvcGVydHlNYXAuY3h4CisrKyBiL1NvdXJjZS9jbVByb3BlcnR5TWFwLmN4eApAQCAtMjAsMTEgKzIwLDExIEBACiAgIE1hcF9bbmFtZV0gPSB2YWx1ZTsKIH0KIAotdm9pZCBjbVByb3BlcnR5TWFwOjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgY2hhciogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcpCit2b2lkIGNtUHJvcGVydHlNYXA6OkFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGJvb2wgYXNTdHJpbmcpCiB7CiAgIC8vIFNraXAgaWYgbm90aGluZyB0byBhcHBlbmQuCi0gIGlmICghdmFsdWUgfHwgISp2YWx1ZSkgeworICBpZiAodmFsdWUuZW1wdHkoKSkgewogICAgIHJldHVybjsKICAgfQogCkBAIC00MiwxMyArNDIsMTEgQEAKICAgTWFwXy5lcmFzZShuYW1lKTsKIH0KIAotY29uc3QgY2hhciogY21Qcm9wZXJ0eU1hcDo6R2V0UHJvcGVydHlWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3QKK2NtUHJvcCBjbVByb3BlcnR5TWFwOjpHZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdAogewotICB7Ci0gICAgYXV0byBpdCA9IE1hcF8uZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gTWFwXy5lbmQoKSkgewotICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuY19zdHIoKTsKLSAgICB9CisgIGF1dG8gaXQgPSBNYXBfLmZpbmQobmFtZSk7CisgIGlmIChpdCAhPSBNYXBfLmVuZCgpKSB7CisgICAgcmV0dXJuICZpdC0+c2Vjb25kOwogICB9CiAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUHJvcGVydHlNYXAuaCBiL1NvdXJjZS9jbVByb3BlcnR5TWFwLmgKaW5kZXggOWFlZDM0OS4uNWZjNDZhMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtUHJvcGVydHlNYXAuaAorKysgYi9Tb3VyY2UvY21Qcm9wZXJ0eU1hcC5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCisKIC8qKiBcY2xhc3MgY21Qcm9wZXJ0eU1hcAogICogXGJyaWVmIFN0cmluZyBwcm9wZXJ0eSBtYXAuCiAgKi8KQEAgLTI3LDExICsyOSwxMSBAQAogICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAgLy8hIEFwcGVuZCB0byB0aGUgcHJvcGVydHkgdmFsdWUKLSAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgY2hhciogdmFsdWUsCisgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nID0gZmFsc2UpOwogCiAgIC8vISBHZXQgdGhlIHByb3BlcnR5IHZhbHVlCi0gIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0OworICBjbVByb3AgR2V0UHJvcGVydHlWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgY29uc3Q7CiAKICAgLy8hIFJlbW92ZSB0aGUgcHJvcGVydHkgQGEgbmFtZSBmcm9tIHRoZSBtYXAKICAgdm9pZCBSZW1vdmVQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21RVFdyYXBDUFBDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVFUV3JhcENQUENvbW1hbmQuY3h4CmluZGV4IGNjNGRmOGYuLjc5NWMyZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVFUV3JhcENQUENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVFUV3JhcENQUENvbW1hbmQuY3h4CkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTM5LDcgKzQwLDggQEAKICAgICAgICAgY21TdHJDYXQobWYuR2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpLCAiL21vY18iLCBzcmNOYW1lLCAiLmN4eCIpOwogICAgICAgY21Tb3VyY2VGaWxlKiBzZiA9IG1mLkdldE9yQ3JlYXRlU291cmNlKG5ld05hbWUsIHRydWUpOwogICAgICAgaWYgKGN1cnIpIHsKLSAgICAgICAgc2YtPlNldFByb3BlcnR5KCJBQlNUUkFDVCIsIGN1cnItPkdldFByb3BlcnR5KCJBQlNUUkFDVCIpKTsKKyAgICAgICAgY21Qcm9wIHAgPSBjdXJyLT5HZXRQcm9wZXJ0eSgiQUJTVFJBQ1QiKTsKKyAgICAgICAgc2YtPlNldFByb3BlcnR5KCJBQlNUUkFDVCIsIHAgPyBwLT5jX3N0cigpIDogbnVsbHB0cik7CiAgICAgICB9CiAKICAgICAgIC8vIENvbXB1dGUgdGhlIG5hbWUgb2YgdGhlIGhlYWRlciBmcm9tIHdoaWNoIHRvIGdlbmVyYXRlIHRoZSBmaWxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUXRBdXRvR2VuLmN4eCBiL1NvdXJjZS9jbVF0QXV0b0dlbi5jeHgKaW5kZXggZWI3YzkwMC4uNTdmY2QyZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuLmN4eAorKysgYi9Tb3VyY2UvY21RdEF1dG9HZW4uY3h4CkBAIC04LDEwICs4LDExIEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAjaW5jbHVkZSAiY21zeXMvUmVndWxhckV4cHJlc3Npb24uaHh4IgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtUHJvY2Vzc091dHB1dC5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtNTMsNyArNTQsNyBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvLyBUZXN0IGlmIHRoaXMgaXMgYSB2YWx1ZSBvcHRpb24gYW5kIGNoYW5nZSB0aGUgZXhpc3RpbmcgdmFsdWUKLSAgICAgICAgaWYgKCFvcHROYW1lLmVtcHR5KCkgJiYgY21Db250YWlucyh2YWx1ZU9wdHMsIG9wdE5hbWUpKSB7CisgICAgICAgIGlmICghb3B0TmFtZS5lbXB0eSgpICYmIGNtOjpjb250YWlucyh2YWx1ZU9wdHMsIG9wdE5hbWUpKSB7CiAgICAgICAgICAgY29uc3QgYXV0byBleGlzdEl0TmV4dChleGlzdEl0ICsgMSk7CiAgICAgICAgICAgY29uc3QgYXV0byBmaXROZXh0KGZpdCArIDEpOwogICAgICAgICAgIGlmICgoZXhpc3RJdE5leHQgIT0gYmFzZU9wdHMuZW5kKCkpICYmIChmaXROZXh0ICE9IGZpdEVuZCkpIHsKQEAgLTY3LDcgKzY4LDcgQEAKICAgICB9CiAgIH0KICAgLy8gQXBwZW5kIG9wdGlvbnMKLSAgY21BcHBlbmQoYmFzZU9wdHMsIGV4dHJhT3B0cyk7CisgIGNtOjphcHBlbmQoYmFzZU9wdHMsIGV4dHJhT3B0cyk7CiB9CiAKIC8vIC0gQ2xhc3MgZGVmaW5pdGlvbnMKQEAgLTMyOCw3ICszMjksNyBAQAogICAgIHsKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbWQ7CiAgICAgICBjbWQuZW1wbGFjZV9iYWNrKHRoaXMtPlJjY0V4Y3V0YWJsZV8pOwotICAgICAgY21BcHBlbmQoY21kLCB0aGlzLT5MaXN0T3B0aW9uc18pOworICAgICAgY206OmFwcGVuZChjbWQsIHRoaXMtPkxpc3RPcHRpb25zXyk7CiAgICAgICBjbWQuZW1wbGFjZV9iYWNrKGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShxcmNGaWxlKSk7CiAKICAgICAgIC8vIExvZyBjb21tYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplci5jeHggYi9Tb3VyY2UvY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplci5jeHgKaW5kZXggZWY2Yjg4Ni4uZmFjMmJiZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIuY3h4CisrKyBiL1NvdXJjZS9jbVF0QXV0b0dlbkdsb2JhbEluaXRpYWxpemVyLmN4eApAQCAtNywxMyArNywxMyBAQAogI2luY2x1ZGUgPGNtL21lbW9yeT4KIAogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCi0jaW5jbHVkZSAiY21DdXN0b21Db21tYW5kVHlwZXMuaCIKICNpbmNsdWRlICJjbUR1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKICNpbmNsdWRlICJjbVByb2Nlc3NPdXRwdXQuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21RdEF1dG9HZW4uaCIKICNpbmNsdWRlICJjbVF0QXV0b0dlbkluaXRpYWxpemVyLmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgpAQCAtNDEsMzkgKzQxLDM5IEBACiB9CiAKIGNtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXI6OmNtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIoCi0gIHN0ZDo6dmVjdG9yPGNtTG9jYWxHZW5lcmF0b3IqPiBjb25zdCYgbG9jYWxHZW5lcmF0b3JzKQorICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21Mb2NhbEdlbmVyYXRvcj4+IGNvbnN0JiBsb2NhbEdlbmVyYXRvcnMpCiB7Ci0gIGZvciAoY21Mb2NhbEdlbmVyYXRvciogbG9jYWxHZW4gOiBsb2NhbEdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBsb2NhbEdlbiA6IGxvY2FsR2VuZXJhdG9ycykgewogICAgIC8vIERldGVjdCBnbG9iYWwgYXV0b2dlbiBhbmQgYXV0b3JjYyB0YXJnZXQgbmFtZXMKICAgICBib29sIGdsb2JhbEF1dG9HZW5UYXJnZXQgPSBmYWxzZTsKICAgICBib29sIGdsb2JhbEF1dG9SY2NUYXJnZXQgPSBmYWxzZTsKICAgICB7CiAgICAgICBjbU1ha2VmaWxlKiBtYWtlZmlsZSA9IGxvY2FsR2VuLT5HZXRNYWtlZmlsZSgpOwogICAgICAgLy8gRGV0ZWN0IGdsb2JhbCBhdXRvZ2VuIHRhcmdldCBuYW1lCi0gICAgICBpZiAoY21Jc09uKG1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUIikpKSB7CisgICAgICBpZiAobWFrZWZpbGUtPklzT24oIkNNQUtFX0dMT0JBTF9BVVRPR0VOX1RBUkdFVCIpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIHRhcmdldE5hbWUgPQogICAgICAgICAgIG1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfR0xPQkFMX0FVVE9HRU5fVEFSR0VUX05BTUUiKTsKICAgICAgICAgaWYgKHRhcmdldE5hbWUuZW1wdHkoKSkgewogICAgICAgICAgIHRhcmdldE5hbWUgPSAiYXV0b2dlbiI7CiAgICAgICAgIH0KLSAgICAgICAgR2xvYmFsQXV0b0dlblRhcmdldHNfLmVtcGxhY2UobG9jYWxHZW4sIHN0ZDo6bW92ZSh0YXJnZXROYW1lKSk7CisgICAgICAgIEdsb2JhbEF1dG9HZW5UYXJnZXRzXy5lbXBsYWNlKGxvY2FsR2VuLmdldCgpLCBzdGQ6Om1vdmUodGFyZ2V0TmFtZSkpOwogICAgICAgICBnbG9iYWxBdXRvR2VuVGFyZ2V0ID0gdHJ1ZTsKICAgICAgIH0KIAogICAgICAgLy8gRGV0ZWN0IGdsb2JhbCBhdXRvcmNjIHRhcmdldCBuYW1lCi0gICAgICBpZiAoY21Jc09uKG1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUIikpKSB7CisgICAgICBpZiAobWFrZWZpbGUtPklzT24oIkNNQUtFX0dMT0JBTF9BVVRPUkNDX1RBUkdFVCIpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIHRhcmdldE5hbWUgPQogICAgICAgICAgIG1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigiQ01BS0VfR0xPQkFMX0FVVE9SQ0NfVEFSR0VUX05BTUUiKTsKICAgICAgICAgaWYgKHRhcmdldE5hbWUuZW1wdHkoKSkgewogICAgICAgICAgIHRhcmdldE5hbWUgPSAiYXV0b3JjYyI7CiAgICAgICAgIH0KLSAgICAgICAgR2xvYmFsQXV0b1JjY1RhcmdldHNfLmVtcGxhY2UobG9jYWxHZW4sIHN0ZDo6bW92ZSh0YXJnZXROYW1lKSk7CisgICAgICAgIEdsb2JhbEF1dG9SY2NUYXJnZXRzXy5lbXBsYWNlKGxvY2FsR2VuLmdldCgpLCBzdGQ6Om1vdmUodGFyZ2V0TmFtZSkpOwogICAgICAgICBnbG9iYWxBdXRvUmNjVGFyZ2V0ID0gdHJ1ZTsKICAgICAgIH0KICAgICB9CiAKICAgICAvLyBGaW5kIHRhcmdldHMgdGhhdCByZXF1aXJlIEFVVE9NT0MvVUlDL1JDQyBwcm9jZXNzaW5nCi0gICAgZm9yIChjbUdlbmVyYXRvclRhcmdldCogdGFyZ2V0IDogbG9jYWxHZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogbG9jYWxHZW4tPkdldEdlbmVyYXRvclRhcmdldHMoKSkgewogICAgICAgLy8gUHJvY2VzcyBvbmx5IGNlcnRhaW4gdGFyZ2V0IHR5cGVzCiAgICAgICBzd2l0Y2ggKHRhcmdldC0+R2V0VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOgpAQCAtOTYsMTUgKzk2LDE1IEBACiAgICAgICBib29sIGNvbnN0IHVpYyA9IHRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woa3coKS5BVVRPVUlDKTsKICAgICAgIGJvb2wgY29uc3QgcmNjID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eUFzQm9vbChrdygpLkFVVE9SQ0MpOwogICAgICAgaWYgKG1vYyB8fCB1aWMgfHwgcmNjKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0IG1vY0V4ZWMgPQorICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbW9jRXhlYyA9CiAgICAgICAgICAgdGFyZ2V0LT5HZXRTYWZlUHJvcGVydHkoa3coKS5BVVRPTU9DX0VYRUNVVEFCTEUpOwotICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCB1aWNFeGVjID0KKyAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHVpY0V4ZWMgPQogICAgICAgICAgIHRhcmdldC0+R2V0U2FmZVByb3BlcnR5KGt3KCkuQVVUT1VJQ19FWEVDVVRBQkxFKTsKLSAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QgcmNjRXhlYyA9CisgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiByY2NFeGVjID0KICAgICAgICAgICB0YXJnZXQtPkdldFNhZmVQcm9wZXJ0eShrdygpLkFVVE9SQ0NfRVhFQ1VUQUJMRSk7CiAKICAgICAgICAgLy8gV2Ugc3VwcG9ydCBRdDQsIFF0NSBhbmQgUXQ2Ci0gICAgICAgIGF1dG8gcXRWZXJzaW9uID0gY21RdEF1dG9HZW5Jbml0aWFsaXplcjo6R2V0UXRWZXJzaW9uKHRhcmdldCk7CisgICAgICAgIGF1dG8gcXRWZXJzaW9uID0gY21RdEF1dG9HZW5Jbml0aWFsaXplcjo6R2V0UXRWZXJzaW9uKHRhcmdldC5nZXQoKSk7CiAgICAgICAgIGJvb2wgY29uc3QgdmFsaWRRdCA9IChxdFZlcnNpb24uZmlyc3QuTWFqb3IgPT0gNCkgfHwKICAgICAgICAgICAocXRWZXJzaW9uLmZpcnN0Lk1ham9yID09IDUpIHx8IChxdFZlcnNpb24uZmlyc3QuTWFqb3IgPT0gNik7CiAKQEAgLTEzNSw4ICsxMzUsOCBAQAogICAgICAgICBpZiAobW9jSXNWYWxpZCB8fCB1aWNJc1ZhbGlkIHx8IHJjY0lzVmFsaWQpIHsKICAgICAgICAgICAvLyBDcmVhdGUgYXV0b2dlbiB0YXJnZXQgaW5pdGlhbGl6ZXIKICAgICAgICAgICBJbml0aWFsaXplcnNfLmVtcGxhY2VfYmFjayhjbTo6bWFrZV91bmlxdWU8Y21RdEF1dG9HZW5Jbml0aWFsaXplcj4oCi0gICAgICAgICAgICB0aGlzLCB0YXJnZXQsIHF0VmVyc2lvbi5maXJzdCwgbW9jSXNWYWxpZCwgdWljSXNWYWxpZCwgcmNjSXNWYWxpZCwKLSAgICAgICAgICAgIGdsb2JhbEF1dG9HZW5UYXJnZXQsIGdsb2JhbEF1dG9SY2NUYXJnZXQpKTsKKyAgICAgICAgICAgIHRoaXMsIHRhcmdldC5nZXQoKSwgcXRWZXJzaW9uLmZpcnN0LCBtb2NJc1ZhbGlkLCB1aWNJc1ZhbGlkLAorICAgICAgICAgICAgcmNjSXNWYWxpZCwgZ2xvYmFsQXV0b0dlblRhcmdldCwgZ2xvYmFsQXV0b1JjY1RhcmdldCkpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMTU0LDIwICsxNTQsMjEgQEAKICAgICBjbU1ha2VmaWxlKiBtYWtlZmlsZSA9IGxvY2FsR2VuLT5HZXRNYWtlZmlsZSgpOwogCiAgICAgLy8gQ3JlYXRlIHV0aWxpdHkgdGFyZ2V0Ci0gICAgY21UYXJnZXQqIHRhcmdldCA9IG1ha2VmaWxlLT5BZGRVdGlsaXR5Q29tbWFuZCgKLSAgICAgIG5hbWUsIGNtQ29tbWFuZE9yaWdpbjo6R2VuZXJhdG9yLCB0cnVlLAotICAgICAgbWFrZWZpbGUtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKS5jX3N0cigpIC8qd29yayBkaXIqLywKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpIC8qb3V0cHV0Ki8sCi0gICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSAvKmRlcGVuZHMqLywgY21DdXN0b21Db21tYW5kTGluZXMoKSwgZmFsc2UsCi0gICAgICBjb21tZW50LmNfc3RyKCkpOwotICAgIGxvY2FsR2VuLT5BZGRHZW5lcmF0b3JUYXJnZXQobmV3IGNtR2VuZXJhdG9yVGFyZ2V0KHRhcmdldCwgbG9jYWxHZW4pKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fYnlwcm9kdWN0czsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwZW5kczsKKyAgICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBub19jb21tYW5kczsKKyAgICBjbVRhcmdldCogdGFyZ2V0ID0gbG9jYWxHZW4tPkFkZFV0aWxpdHlDb21tYW5kKAorICAgICAgbmFtZSwgdHJ1ZSwgbWFrZWZpbGUtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKS5jX3N0cigpLCBub19ieXByb2R1Y3RzLAorICAgICAgbm9fZGVwZW5kcywgbm9fY29tbWFuZHMsIGZhbHNlLCBjb21tZW50LmNfc3RyKCkpOworICAgIGxvY2FsR2VuLT5BZGRHZW5lcmF0b3JUYXJnZXQoCisgICAgICBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0b3JUYXJnZXQ+KHRhcmdldCwgbG9jYWxHZW4pKTsKIAogICAgIC8vIFNldCBGT0xERVIgcHJvcGVydHkgaW4gdGhlIHRhcmdldAogICAgIHsKLSAgICAgIGNoYXIgY29uc3QqIGZvbGRlciA9CisgICAgICBjbVByb3AgZm9sZGVyID0KICAgICAgICAgbWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJBVVRPR0VOX1RBUkdFVFNfRk9MREVSIik7CiAgICAgICBpZiAoZm9sZGVyICE9IG51bGxwdHIpIHsKLSAgICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRk9MREVSIiwgZm9sZGVyKTsKKyAgICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRk9MREVSIiwgKmZvbGRlcik7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0xODAsNyArMTgxLDcgQEAKICAgaWYgKGl0ICE9IEdsb2JhbEF1dG9HZW5UYXJnZXRzXy5lbmQoKSkgewogICAgIGNtR2VuZXJhdG9yVGFyZ2V0KiB0YXJnZXQgPSBsb2NhbEdlbi0+RmluZEdlbmVyYXRvclRhcmdldFRvVXNlKGl0LT5zZWNvbmQpOwogICAgIGlmICh0YXJnZXQgIT0gbnVsbHB0cikgewotICAgICAgdGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodGFyZ2V0TmFtZSwgbG9jYWxHZW4tPkdldE1ha2VmaWxlKCkpOworICAgICAgdGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodGFyZ2V0TmFtZSwgZmFsc2UsIGxvY2FsR2VuLT5HZXRNYWtlZmlsZSgpKTsKICAgICB9CiAgIH0KIH0KQEAgLTE5Miw3ICsxOTMsNyBAQAogICBpZiAoaXQgIT0gR2xvYmFsQXV0b1JjY1RhcmdldHNfLmVuZCgpKSB7CiAgICAgY21HZW5lcmF0b3JUYXJnZXQqIHRhcmdldCA9IGxvY2FsR2VuLT5GaW5kR2VuZXJhdG9yVGFyZ2V0VG9Vc2UoaXQtPnNlY29uZCk7CiAgICAgaWYgKHRhcmdldCAhPSBudWxscHRyKSB7Ci0gICAgICB0YXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh0YXJnZXROYW1lLCBsb2NhbEdlbi0+R2V0TWFrZWZpbGUoKSk7CisgICAgICB0YXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh0YXJnZXROYW1lLCBmYWxzZSwgbG9jYWxHZW4tPkdldE1ha2VmaWxlKCkpOwogICAgIH0KICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIuaCBiL1NvdXJjZS9jbVF0QXV0b0dlbkdsb2JhbEluaXRpYWxpemVyLmgKaW5kZXggODA2NzI1YS4uMmY2ZTU4MSAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIuaAorKysgYi9Tb3VyY2UvY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplci5oCkBAIC00OCw3ICs0OCw3IEBACiAKIHB1YmxpYzoKICAgY21RdEF1dG9HZW5HbG9iYWxJbml0aWFsaXplcigKLSAgICBzdGQ6OnZlY3RvcjxjbUxvY2FsR2VuZXJhdG9yKj4gY29uc3QmIGxvY2FsR2VuZXJhdG9ycyk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+PiBjb25zdCYgbG9jYWxHZW5lcmF0b3JzKTsKICAgfmNtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIoKTsKIAogICBLZXl3b3JkcyBjb25zdCYga3coKSBjb25zdCB7IHJldHVybiBLZXl3b3Jkc187IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21RdEF1dG9HZW5Jbml0aWFsaXplci5jeHggYi9Tb3VyY2UvY21RdEF1dG9HZW5Jbml0aWFsaXplci5jeHgKaW5kZXggNWViMDRmNy4uMDY5NTdiMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuSW5pdGlhbGl6ZXIuY3h4CisrKyBiL1NvdXJjZS9jbVF0QXV0b0dlbkluaXRpYWxpemVyLmN4eApAQCAtMTYsMTYgKzE2LDE1IEBACiAjaW5jbHVkZSA8Y20vYWxnb3JpdGhtPgogI2luY2x1ZGUgPGNtL2l0ZXJhdG9yPgogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKyNpbmNsdWRlIDxjbTNwL2pzb24vd3JpdGVyLmg+CiAKICNpbmNsdWRlICJjbXN5cy9TeXN0ZW1JbmZvcm1hdGlvbi5oeHgiCiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCi0jaW5jbHVkZSAiY21fanNvbmNwcF93cml0ZXIuaCIKLQotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZExpbmVzLmgiCi0jaW5jbHVkZSAiY21DdXN0b21Db21tYW5kVHlwZXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgpAQCAtMzYsNiArMzUsNyBAQAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVF0QXV0b0dlbi5oIgogI2luY2x1ZGUgImNtUXRBdXRvR2VuR2xvYmFsSW5pdGlhbGl6ZXIuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKQEAgLTMxNSwxMCArMzE1LDkgQEAKIHsKICAgLy8gQ29uZmlndXJhdGlvbnMKICAgdGhpcy0+TXVsdGlDb25maWcgPSB0aGlzLT5HbG9iYWxHZW4tPklzTXVsdGlDb25maWcoKTsKLSAgdGhpcy0+Q29uZmlnRGVmYXVsdCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyh0aGlzLT5Db25maWdzTGlzdCk7Ci0gIGlmICh0aGlzLT5Db25maWdzTGlzdC5lbXB0eSgpKSB7Ci0gICAgdGhpcy0+Q29uZmlnc0xpc3QucHVzaF9iYWNrKHRoaXMtPkNvbmZpZ0RlZmF1bHQpOwotICB9CisgIHRoaXMtPkNvbmZpZ0RlZmF1bHQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTsKKyAgdGhpcy0+Q29uZmlnc0xpc3QgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkluY2x1ZGVFbXB0eUNvbmZpZyk7CiAKICAgLy8gVmVyYm9zaXR5CiAgIHsKQEAgLTM0MCw3ICszMzksNyBAQAogCiAgIC8vIFRhcmdldHMgRk9MREVSCiAgIHsKLSAgICBjb25zdCBjaGFyKiBmb2xkZXIgPQorICAgIGNtUHJvcCBmb2xkZXIgPQogICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldFN0YXRlKCktPkdldEdsb2JhbFByb3BlcnR5KCJBVVRPTU9DX1RBUkdFVFNfRk9MREVSIik7CiAgICAgaWYgKGZvbGRlciA9PSBudWxscHRyKSB7CiAgICAgICBmb2xkZXIgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+R2V0R2xvYmFsUHJvcGVydHkoCkBAIC0zNTEsMjggKzM1MCw0MiBAQAogICAgICAgZm9sZGVyID0gdGhpcy0+R2VuVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiRk9MREVSIik7CiAgICAgfQogICAgIGlmIChmb2xkZXIgIT0gbnVsbHB0cikgewotICAgICAgdGhpcy0+VGFyZ2V0c0ZvbGRlciA9IGZvbGRlcjsKKyAgICAgIHRoaXMtPlRhcmdldHNGb2xkZXIgPSAqZm9sZGVyOwogICAgIH0KICAgfQogCi0gIC8vIENoZWNrIHN0YXR1cyBvZiBwb2xpY3kgQ01QMDA3MQotICB7Ci0gICAgY21Qb2xpY2llczo6UG9saWN5U3RhdHVzIGNvbnN0IENNUDAwNzFfc3RhdHVzID0KLSAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDA3MSk7Ci0gICAgc3dpdGNoIChDTVAwMDcxX3N0YXR1cykgewotICAgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOgotICAgICAgICB0aGlzLT5DTVAwMDcxV2FybiA9IHRydWU7Ci0gICAgICAgIENNX0ZBTExUSFJPVUdIOwotICAgICAgY2FzZSBjbVBvbGljaWVzOjpPTEQ6Ci0gICAgICAgIC8vIElnbm9yZSBHRU5FUkFURUQgZmlsZQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfSUZfVVNFRDoKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfQUxXQVlTOgotICAgICAgY2FzZSBjbVBvbGljaWVzOjpORVc6Ci0gICAgICAgIC8vIFByb2Nlc3MgR0VORVJBVEVEIGZpbGUKLSAgICAgICAgdGhpcy0+Q01QMDA3MUFjY2VwdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgLy8gQ2hlY2sgc3RhdHVzIG9mIHBvbGljeSBDTVAwMDcxIHJlZ2FyZGluZyBoYW5kbGluZyBvZiBHRU5FUkFURUQgZmlsZXMKKyAgc3dpdGNoICh0aGlzLT5NYWtlZmlsZS0+R2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwNzEpKSB7CisgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOgorICAgICAgLy8gSWdub3JlIEdFTkVSQVRFRCBmaWxlcyBidXQgd2FybgorICAgICAgdGhpcy0+Q01QMDA3MVdhcm4gPSB0cnVlOworICAgICAgQ01fRkFMTFRIUk9VR0g7CisgICAgY2FzZSBjbVBvbGljaWVzOjpPTEQ6CisgICAgICAvLyBJZ25vcmUgR0VORVJBVEVEIGZpbGVzCisgICAgICBicmVhazsKKyAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0lGX1VTRUQ6CisgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9BTFdBWVM6CisgICAgY2FzZSBjbVBvbGljaWVzOjpORVc6CisgICAgICAvLyBQcm9jZXNzIEdFTkVSQVRFRCBmaWxlcworICAgICAgdGhpcy0+Q01QMDA3MUFjY2VwdCA9IHRydWU7CisgICAgICBicmVhazsKKyAgfQorCisgIC8vIENoZWNrIHN0YXR1cyBvZiBwb2xpY3kgQ01QMDEwMCByZWdhcmRpbmcgaGFuZGxpbmcgb2YgLmhoIGhlYWRlcnMKKyAgc3dpdGNoICh0aGlzLT5NYWtlZmlsZS0+R2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAxMDApKSB7CisgICAgY2FzZSBjbVBvbGljaWVzOjpXQVJOOgorICAgICAgLy8gSWdub3JlIGJ1dCAuaGggZmlsZXMgYnV0IHdhcm4KKyAgICAgIHRoaXMtPkNNUDAxMDBXYXJuID0gdHJ1ZTsKKyAgICAgIENNX0ZBTExUSFJPVUdIOworICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgorICAgICAgLy8gSWdub3JlIC5oaCBmaWxlcworICAgICAgYnJlYWs7CisgICAgY2FzZSBjbVBvbGljaWVzOjpSRVFVSVJFRF9JRl9VU0VEOgorICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfQUxXQVlTOgorICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgorICAgICAgLy8gUHJvY2VzcyAuaGggZmlsZQorICAgICAgdGhpcy0+Q01QMDEwMEFjY2VwdCA9IHRydWU7CisgICAgICBicmVhazsKICAgfQogCiAgIC8vIENvbW1vbiBkaXJlY3RvcmllcwpAQCAtNDI3LDcgKzQ0MCw4IEBACiAKICAgICAvLyBBdXRvZ2VuIHRhcmdldCBwYXJhbGxlbCBwcm9jZXNzaW5nCiAgICAgewotICAgICAgc3RkOjpzdHJpbmcgcHJvcCA9IHRoaXMtPkdlblRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJBVVRPR0VOX1BBUkFMTEVMIik7CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCA9CisgICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJBVVRPR0VOX1BBUkFMTEVMIik7CiAgICAgICBpZiAocHJvcC5lbXB0eSgpIHx8IChwcm9wID09ICJBVVRPIikpIHsKICAgICAgICAgLy8gQXV0b2RldGVjdCBudW1iZXIgb2YgQ1BVcwogICAgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LlBhcmFsbGVsID0gR2V0UGFyYWxsZWxDUFVDb3VudCgpOwpAQCAtNDU4LDcgKzQ3Miw3IEBACiAgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZE9yaWdpbiA9CiAgICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woIkFVVE9HRU5fT1JJR0lOX0RFUEVORFMiKTsKIAotICAgICAgc3RkOjpzdHJpbmcgY29uc3QgZGVwcyA9CisgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZGVwcyA9CiAgICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJBVVRPR0VOX1RBUkdFVF9ERVBFTkRTIik7CiAgICAgICBpZiAoIWRlcHMuZW1wdHkoKSkgewogICAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXBOYW1lIDogY21FeHBhbmRlZExpc3QoZGVwcykpIHsKQEAgLTQ3NSw3ICs0ODksNyBAQAogCiAgICAgaWYgKHRoaXMtPk1vYy5FbmFibGVkKSB7CiAgICAgICAvLyBQYXRoIHByZWZpeAotICAgICAgaWYgKGNtSXNPbih0aGlzLT5HZW5UYXJnZXQtPkdldFNhZmVQcm9wZXJ0eSgiQVVUT01PQ19QQVRIX1BSRUZJWCIpKSkgeworICAgICAgaWYgKGNtSXNPbih0aGlzLT5HZW5UYXJnZXQtPkdldFByb3BlcnR5KCJBVVRPTU9DX1BBVEhfUFJFRklYIikpKSB7CiAgICAgICAgIHRoaXMtPk1vYy5QYXRoUHJlZml4ID0gdHJ1ZTsKICAgICAgIH0KIApAQCAtNTU2LDkgKzU3MCw4IEBACiAgIGlmICh0aGlzLT5HZW5UYXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJBVVRPTU9DX0NPTVBJTEVSX1BSRURFRklORVMiKSAmJgogICAgICAgKHRoaXMtPlF0VmVyc2lvbiA+PSBJbnRlZ2VyVmVyc2lvbig1LCA4KSkpIHsKICAgICAvLyBDb21tYW5kCi0gICAgY21FeHBhbmRMaXN0KHRoaXMtPk1ha2VmaWxlLT5HZXRTYWZlRGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgICAgICAiQ01BS0VfQ1hYX0NPTVBJTEVSX1BSRURFRklORVNfQ09NTUFORCIpLAotICAgICAgICAgICAgICAgICB0aGlzLT5Nb2MuUHJlZGVmc0NtZCk7CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZkV4cGFuZExpc3QoIkNNQUtFX0NYWF9DT01QSUxFUl9QUkVERUZJTkVTX0NPTU1BTkQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1vYy5QcmVkZWZzQ21kKTsKICAgICAvLyBIZWFkZXIKICAgICBpZiAoIXRoaXMtPk1vYy5QcmVkZWZzQ21kLmVtcHR5KCkpIHsKICAgICAgIENvbmZpZ0ZpbGVOYW1lcyh0aGlzLT5Nb2MuUHJlZGVmc0ZpbGUsCkBAIC02NDEsNyArNjU0LDcgQEAKIHsKICAgLy8gVWljIHNlYXJjaCBwYXRocwogICB7Ci0gICAgc3RkOjpzdHJpbmcgY29uc3QgdXNwID0KKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgdXNwID0KICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0U2FmZVByb3BlcnR5KCJBVVRPVUlDX1NFQVJDSF9QQVRIUyIpOwogICAgIGlmICghdXNwLmVtcHR5KCkpIHsKICAgICAgIHRoaXMtPlVpYy5TZWFyY2hQYXRocyA9CkBAIC03MzQsMTUgKzc0NywyNiBAQAogICAgIHJldHVybiBtdWY7CiAgIH07CiAKLSAgYXV0byBhZGRNVUZpbGUgPSBbJl0oTVVGaWxlSGFuZGxlJiYgbXVmLCBib29sIGlzSGVhZGVyKSB7CisgIGF1dG8gYWRkTVVIZWFkZXIgPSBbdGhpc10oTVVGaWxlSGFuZGxlJiYgbXVmLCBjbTo6c3RyaW5nX3ZpZXcgZXh0ZW5zaW9uKSB7CisgICAgY21Tb3VyY2VGaWxlKiBzZiA9IG11Zi0+U0Y7CisgICAgY29uc3QgYm9vbCBtdUl0ID0gKG11Zi0+TW9jSXQgfHwgbXVmLT5VaWNJdCk7CisgICAgaWYgKHRoaXMtPkNNUDAxMDBBY2NlcHQgfHwgKGV4dGVuc2lvbiAhPSAiaGgiKSkgeworICAgICAgLy8gQWNjZXB0CisgICAgICBpZiAobXVJdCAmJiBtdWYtPkdlbmVyYXRlZCkgeworICAgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkZpbGVzR2VuZXJhdGVkLmVtcGxhY2VfYmFjayhtdWYuZ2V0KCkpOworICAgICAgfQorICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5IZWFkZXJzLmVtcGxhY2Uoc2YsIHN0ZDo6bW92ZShtdWYpKTsKKyAgICB9IGVsc2UgaWYgKG11SXQgJiYgdGhpcy0+Q01QMDEwMFdhcm4pIHsKKyAgICAgIC8vIFN0b3JlIGZpbGUgZm9yIHdhcm5pbmcgbWVzc2FnZQorICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5DTVAwMTAwSGVhZGVyc1dhcm4ucHVzaF9iYWNrKHNmKTsKKyAgICB9CisgIH07CisKKyAgYXV0byBhZGRNVVNvdXJjZSA9IFt0aGlzXShNVUZpbGVIYW5kbGUmJiBtdWYpIHsKICAgICBpZiAoKG11Zi0+TW9jSXQgfHwgbXVmLT5VaWNJdCkgJiYgbXVmLT5HZW5lcmF0ZWQpIHsKICAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuRmlsZXNHZW5lcmF0ZWQuZW1wbGFjZV9iYWNrKG11Zi5nZXQoKSk7CiAgICAgfQotICAgIGlmIChpc0hlYWRlcikgewotICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5IZWFkZXJzLmVtcGxhY2UobXVmLT5TRiwgc3RkOjptb3ZlKG11ZikpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LlNvdXJjZXMuZW1wbGFjZShtdWYtPlNGLCBzdGQ6Om1vdmUobXVmKSk7Ci0gICAgfQorICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuU291cmNlcy5lbXBsYWNlKG11Zi0+U0YsIHN0ZDo6bW92ZShtdWYpKTsKICAgfTsKIAogICAvLyBTY2FuIHRocm91Z2ggdGFyZ2V0IGZpbGVzCkBAIC03NjQsMTEgKzc4OCwxMCBAQAogCiAgICAgICAvLyBSZWdpc3RlciBmaWxlcyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBieSBtb2Mgb3IgdWljCiAgICAgICBpZiAodGhpcy0+TW9jT3JVaWNFbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBhIHBvbGljeSB0byBpbmNsdWRlIC5oaCBmaWxlcy4KLSAgICAgICAgaWYgKGNtLT5Jc0hlYWRlckV4dGVuc2lvbihleHRMb3dlcikgJiYgZXh0TG93ZXIgIT0gImhoIikgewotICAgICAgICAgIGFkZE1VRmlsZShtYWtlTVVGaWxlKHNmLCBmdWxsUGF0aCwgdHJ1ZSksIHRydWUpOwotICAgICAgICB9IGVsc2UgaWYgKGNtLT5Jc1NvdXJjZUV4dGVuc2lvbihleHRMb3dlcikpIHsKLSAgICAgICAgICBhZGRNVUZpbGUobWFrZU1VRmlsZShzZiwgZnVsbFBhdGgsIHRydWUpLCBmYWxzZSk7CisgICAgICAgIGlmIChjbS0+SXNBSGVhZGVyRXh0ZW5zaW9uKGV4dExvd2VyKSkgeworICAgICAgICAgIGFkZE1VSGVhZGVyKG1ha2VNVUZpbGUoc2YsIGZ1bGxQYXRoLCB0cnVlKSwgZXh0TG93ZXIpOworICAgICAgICB9IGVsc2UgaWYgKGNtLT5Jc0FDTGlrZVNvdXJjZUV4dGVuc2lvbihleHRMb3dlcikpIHsKKyAgICAgICAgICBhZGRNVVNvdXJjZShtYWtlTVVGaWxlKHNmLCBmdWxsUGF0aCwgdHJ1ZSkpOwogICAgICAgICB9CiAgICAgICB9CiAKQEAgLTgwMiw4ICs4MjUsNiBAQAogCiAgIC8vIEZvciBzb3VyY2UgZmlsZXMgZmluZCBhZGRpdGlvbmFsIGhlYWRlcnMgYW5kIHByaXZhdGUgaGVhZGVycwogICBpZiAodGhpcy0+TW9jT3JVaWNFbmFibGVkKCkpIHsKLSAgICBzdGQ6OnZlY3RvcjxNVUZpbGVIYW5kbGU+IGV4dHJhSGVhZGVyczsKLSAgICBleHRyYUhlYWRlcnMucmVzZXJ2ZSh0aGlzLT5BdXRvZ2VuVGFyZ2V0LlNvdXJjZXMuc2l6ZSgpICogMik7CiAgICAgLy8gSGVhZGVyIHNlYXJjaCBzdWZmaXhlcyBhbmQgZXh0ZW5zaW9ucwogICAgIHN0YXRpYyBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y206OnN0cmluZ192aWV3PiBjb25zdCBzdWZmaXhlc3sgIiIsICJfcCIgfTsKICAgICBhdXRvIGNvbnN0JiBleHRzID0gY20tPkdldEhlYWRlckV4dGVuc2lvbnMoKTsKQEAgLTgyNiw3ICs4NDcsNyBAQAogICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U291cmNlKGZ1bGxQYXRoLCBsb2NhdGlvbktpbmQpOwogICAgICAgICAgICAgaWYgKHNmICE9IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Uga25vdyBhYm91dCB0aGlzIGhlYWRlciBhbHJlYWR5Ci0gICAgICAgICAgICAgIGlmIChjbUNvbnRhaW5zKHRoaXMtPkF1dG9nZW5UYXJnZXQuSGVhZGVycywgc2YpKSB7CisgICAgICAgICAgICAgIGlmIChjbTo6Y29udGFpbnModGhpcy0+QXV0b2dlblRhcmdldC5IZWFkZXJzLCBzZikpIHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAvLyBXZSBvbmx5IGFjY2VwdCBub3QtR0VORVJBVEVEIGZpbGVzIHRoYXQgZG8gZXhpc3QuCkBAIC04NDEsMjMgKzg2MiwxOSBAQAogCiAgICAgICAgICAgICBpZiAoc2YgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICBhdXRvIGVNdWYgPSBtYWtlTVVGaWxlKHNmLCBmdWxsUGF0aCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgIC8vIE9ueSBwcm9jZXNzIG1vYy91aWMgd2hlbiB0aGUgcGFyZW50IGlzIHByb2Nlc3NlZCBhcyB3ZWxsCisgICAgICAgICAgICAgIC8vIE9ubHkgcHJvY2VzcyBtb2MvdWljIHdoZW4gdGhlIHBhcmVudCBpcyBwcm9jZXNzZWQgYXMgd2VsbAogICAgICAgICAgICAgICBpZiAoIW11Zi5Nb2NJdCkgewogICAgICAgICAgICAgICAgIGVNdWYtPk1vY0l0ID0gZmFsc2U7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKCFtdWYuVWljSXQpIHsKICAgICAgICAgICAgICAgICBlTXVmLT5VaWNJdCA9IGZhbHNlOwogICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGV4dHJhSGVhZGVycy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGVNdWYpKTsKKyAgICAgICAgICAgICAgYWRkTVVIZWFkZXIoc3RkOjptb3ZlKGVNdWYpLCBleHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0KLSAgICAvLyBNb3ZlIGdlbmVyYXRlZCBmaWxlcyB0byBtYWluIGhlYWRlcnMgbGlzdAotICAgIGZvciAoYXV0byYgZU11ZiA6IGV4dHJhSGVhZGVycykgewotICAgICAgYWRkTVVGaWxlKHN0ZDo6bW92ZShlTXVmKSwgdHJ1ZSk7Ci0gICAgfQogICB9CiAKICAgLy8gU2NhbiB0aHJvdWdoIGFsbCBzb3VyY2UgZmlsZXMgaW4gdGhlIG1ha2VmaWxlIHRvIGV4dHJhY3QgbW9jIGFuZCB1aWMKQEAgLTg2NSw3ICs4ODIsNyBAQAogICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgdGhlaXIgZmlsZSBuYW1lcyBtaWdodCBiZSBkaXNjb3ZlcmVkIGZyb20gc291cmNlIGZpbGVzCiAgIC8vIGF0IGdlbmVyYXRpb24gdGltZS4KICAgaWYgKHRoaXMtPk1vY09yVWljRW5hYmxlZCgpKSB7Ci0gICAgZm9yIChjbVNvdXJjZUZpbGUqIHNmIDogdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZUZpbGVzKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNmIDogdGhpcy0+TWFrZWZpbGUtPkdldFNvdXJjZUZpbGVzKCkpIHsKICAgICAgIC8vIHNmLT5HZXRFeHRlbnNpb24oKSBpcyBvbmx5IHZhbGlkIGFmdGVyIHNmLT5SZXNvbHZlRnVsbFBhdGgoKSAuLi4KICAgICAgIC8vIFNpbmNlIHdlJ3JlIGl0ZXJhdGluZyBvdmVyIHNvdXJjZSBmaWxlcyB0aGF0IG1pZ2h0IGJlIG5vdCBpbiB0aGUKICAgICAgIC8vIHRhcmdldCB3ZSBuZWVkIHRvIGNoZWNrIGZvciBwYXRoIGVycm9ycyAobm90IGV4aXN0aW5nIGZpbGVzKS4KQEAgLTg3NywxOSArODk0LDE4IEBACiAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZXh0TG93ZXIgPQogICAgICAgICBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2Uoc2YtPkdldEV4dGVuc2lvbigpKTsKIAotICAgICAgLy8gRklYTUU6IEFkZCBhIHBvbGljeSB0byBpbmNsdWRlIC5oaCBmaWxlcy4KLSAgICAgIGlmIChjbS0+SXNIZWFkZXJFeHRlbnNpb24oZXh0TG93ZXIpICYmIGV4dExvd2VyICE9ICJoaCIpIHsKLSAgICAgICAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkF1dG9nZW5UYXJnZXQuSGVhZGVycywgc2YpKSB7Ci0gICAgICAgICAgYXV0byBtdWYgPSBtYWtlTVVGaWxlKHNmLCBmdWxsUGF0aCwgZmFsc2UpOworICAgICAgaWYgKGNtLT5Jc0FIZWFkZXJFeHRlbnNpb24oZXh0TG93ZXIpKSB7CisgICAgICAgIGlmICghY206OmNvbnRhaW5zKHRoaXMtPkF1dG9nZW5UYXJnZXQuSGVhZGVycywgc2YuZ2V0KCkpKSB7CisgICAgICAgICAgYXV0byBtdWYgPSBtYWtlTVVGaWxlKHNmLmdldCgpLCBmdWxsUGF0aCwgZmFsc2UpOwogICAgICAgICAgIGlmIChtdWYtPlNraXBNb2MgfHwgbXVmLT5Ta2lwVWljKSB7Ci0gICAgICAgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkhlYWRlcnMuZW1wbGFjZShzZiwgc3RkOjptb3ZlKG11ZikpOworICAgICAgICAgICAgYWRkTVVIZWFkZXIoc3RkOjptb3ZlKG11ZiksIGV4dExvd2VyKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoY20tPklzU291cmNlRXh0ZW5zaW9uKGV4dExvd2VyKSkgewotICAgICAgICBpZiAoIWNtQ29udGFpbnModGhpcy0+QXV0b2dlblRhcmdldC5IZWFkZXJzLCBzZikpIHsKLSAgICAgICAgICBhdXRvIG11ZiA9IG1ha2VNVUZpbGUoc2YsIGZ1bGxQYXRoLCBmYWxzZSk7CisgICAgICB9IGVsc2UgaWYgKGNtLT5Jc0FDTGlrZVNvdXJjZUV4dGVuc2lvbihleHRMb3dlcikpIHsKKyAgICAgICAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+QXV0b2dlblRhcmdldC5Tb3VyY2VzLCBzZi5nZXQoKSkpIHsKKyAgICAgICAgICBhdXRvIG11ZiA9IG1ha2VNVUZpbGUoc2YuZ2V0KCksIGZ1bGxQYXRoLCBmYWxzZSk7CiAgICAgICAgICAgaWYgKG11Zi0+U2tpcE1vYyB8fCBtdWYtPlNraXBVaWMpIHsKLSAgICAgICAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuU291cmNlcy5lbXBsYWNlKHNmLCBzdGQ6Om1vdmUobXVmKSk7CisgICAgICAgICAgICBhZGRNVVNvdXJjZShzdGQ6Om1vdmUobXVmKSk7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9IGVsc2UgaWYgKHRoaXMtPlVpYy5FbmFibGVkICYmIChleHRMb3dlciA9PSBrdy51aSkpIHsKQEAgLTk0Nyw2ICs5NjMsMzUgQEAKICAgICB9CiAgIH0KIAorICAvLyBHZW5lcmF0ZSBDTVAwMTAwIHdhcm5pbmcKKyAgaWYgKHRoaXMtPk1vY09yVWljRW5hYmxlZCgpICYmCisgICAgICAhdGhpcy0+QXV0b2dlblRhcmdldC5DTVAwMTAwSGVhZGVyc1dhcm4uZW1wdHkoKSkgeworICAgIGNtOjpzdHJpbmdfdmlldyBwcm9wZXJ0eTsKKyAgICBpZiAodGhpcy0+TW9jLkVuYWJsZWQgJiYgdGhpcy0+VWljLkVuYWJsZWQpIHsKKyAgICAgIHByb3BlcnR5ID0gIlNLSVBfQVVUT0dFTiI7CisgICAgfSBlbHNlIGlmICh0aGlzLT5Nb2MuRW5hYmxlZCkgeworICAgICAgcHJvcGVydHkgPSAiU0tJUF9BVVRPTU9DIjsKKyAgICB9IGVsc2UgaWYgKHRoaXMtPlVpYy5FbmFibGVkKSB7CisgICAgICBwcm9wZXJ0eSA9ICJTS0lQX0FVVE9VSUMiOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBmaWxlczsKKyAgICBmb3IgKGNtU291cmNlRmlsZSogc2YgOiB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkNNUDAxMDBIZWFkZXJzV2FybikgeworICAgICAgZmlsZXMgKz0gY21TdHJDYXQoIiAgIiwgUXVvdGVkKHNmLT5HZXRGdWxsUGF0aCgpKSwgJ1xuJyk7CisgICAgfQorICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICBNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsCisgICAgICBjbVN0ckNhdCgKKyAgICAgICAgY21Qb2xpY2llczo6R2V0UG9saWN5V2FybmluZyhjbVBvbGljaWVzOjpDTVAwMTAwKSwgJ1xuJywKKyAgICAgICAgIkZvciBjb21wYXRpYmlsaXR5LCBDTWFrZSBpcyBleGNsdWRpbmcgdGhlIGhlYWRlciBmaWxlKHMpOlxuIiwgZmlsZXMsCisgICAgICAgICJmcm9tIHByb2Nlc3NpbmcgYnkgIiwKKyAgICAgICAgY21RdEF1dG9HZW46OlRvb2xzKHRoaXMtPk1vYy5FbmFibGVkLCB0aGlzLT5VaWMuRW5hYmxlZCwgZmFsc2UpLAorICAgICAgICAiLiAgSWYgYW55IG9mIHRoZSBmaWxlcyBzaG91bGQgYmUgcHJvY2Vzc2VkLCBzZXQgQ01QMDEwMCB0byBORVcuICAiCisgICAgICAgICJJZiBhbnkgb2YgdGhlIGZpbGVzIHNob3VsZCBub3QgYmUgcHJvY2Vzc2VkLCAiCisgICAgICAgICJleHBsaWNpdGx5IGV4Y2x1ZGUgdGhlbSBieSBzZXR0aW5nIHRoZSBzb3VyY2UgZmlsZSBwcm9wZXJ0eSAiLAorICAgICAgICBwcm9wZXJ0eSwgIjpcbiAgc2V0X3Byb3BlcnR5KFNPVVJDRSBmaWxlLmhoIFBST1BFUlRZICIsIHByb3BlcnR5LAorICAgICAgICAiIE9OKVxuIikpOworICB9CisKICAgLy8gUHJvY2VzcyBxcmMgZmlsZXMKICAgaWYgKCF0aGlzLT5SY2MuUXJjcy5lbXB0eSgpKSB7CiAgICAgY29uc3QgYm9vbCBtb2Rlcm5RdCA9ICh0aGlzLT5RdFZlcnNpb24uTWFqb3IgPj0gNSk7CkBAIC0xMDQ1LDkgKzEwOTAsMTcgQEAKICAgfQogCiAgIC8vIENvbXBvc2UgY29tbWFuZCBsaW5lcwotICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXMgPSBjbU1ha2VTaW5nbGVDb21tYW5kTGluZSgKLSAgICB7IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCAiLUUiLCAiY21ha2VfYXV0b2dlbiIsCi0gICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkluZm9GaWxlLCAiJDxDT05GSUdVUkFUSU9OPiIgfSk7CisgIC8vIFRPRE86IFJlZmFjdG9yIGF1dG9nZW4gdG8gb3V0cHV0IGEgcGVyLWNvbmZpZyBtb2NzX2NvbXBpbGF0aW9uLmNwcCBpbnN0ZWFkCisgIC8vIG9mIGZpZGRsaW5nIHdpdGggdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ3M7CisgIHRoaXMtPkdsb2JhbEdlbi0+R2V0UXRBdXRvR2VuQ29uZmlncyhjb25maWdzKTsKKyAgYm9vbCBzdGRQaXBlc1VURjggPSB0cnVlOworICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBjb21tYW5kTGluZXM7CisgIGZvciAoYXV0byBjb25zdCYgY29uZmlnIDogY29uZmlncykgeworICAgIGNvbW1hbmRMaW5lcy5wdXNoX2JhY2soY21NYWtlQ29tbWFuZExpbmUoCisgICAgICB7IGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpLCAiLUUiLCAiY21ha2VfYXV0b2dlbiIsCisgICAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuSW5mb0ZpbGUsIGNvbmZpZyB9KSk7CisgIH0KIAogICAvLyBVc2UgUFJFX0JVSUxEIG9uIGRlbWFuZAogICBib29sIHVzZVBSRV9CVUlMRCA9IGZhbHNlOwpAQCAtMTA3Myw3ICsxMTI2LDcgQEAKICAgaWYgKHVzZVBSRV9CVUlMRCkgewogICAgIC8vIEFkZCBhZGRpdGlvbmFsIGF1dG9nZW4gdGFyZ2V0IGRlcGVuZGVuY2llcyB0byBvcmlnaW4gdGFyZ2V0CiAgICAgZm9yIChjbVRhcmdldCogZGVwVGFyZ2V0IDogdGhpcy0+QXV0b2dlblRhcmdldC5EZXBlbmRUYXJnZXRzKSB7Ci0gICAgICB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eShkZXBUYXJnZXQtPkdldE5hbWUoKSwKKyAgICAgIHRoaXMtPkdlblRhcmdldC0+VGFyZ2V0LT5BZGRVdGlsaXR5KGRlcFRhcmdldC0+R2V0TmFtZSgpLCBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlKTsKICAgICB9CiAKQEAgLTEwODQsOSArMTEzNyw5IEBACiAgICAgLy8gUFJFX0JVSUxEIGRvZXMgbm90IHN1cHBvcnQgZmlsZSBkZXBlbmRlbmNpZXMhCiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5vX291dHB1dDsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbm9fZGVwczsKLSAgICBjbUN1c3RvbUNvbW1hbmQgY2ModGhpcy0+TWFrZWZpbGUsIG5vX291dHB1dCwgYXV0b2dlblByb3ZpZGVzLCBub19kZXBzLAotICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZXMsIGF1dG9nZW5Db21tZW50LmNfc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCkpOworICAgIGNtQ3VzdG9tQ29tbWFuZCBjYyhub19vdXRwdXQsIGF1dG9nZW5Qcm92aWRlcywgbm9fZGVwcywgY29tbWFuZExpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCksIGF1dG9nZW5Db21tZW50LmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksIHN0ZFBpcGVzVVRGOCk7CiAgICAgY2MuU2V0RXNjYXBlT2xkU3R5bGUoZmFsc2UpOwogICAgIGNjLlNldEVzY2FwZUFsbG93TWFrZVZhcnModHJ1ZSk7CiAgICAgdGhpcy0+R2VuVGFyZ2V0LT5UYXJnZXQtPkFkZFByZUJ1aWxkQ29tbWFuZChzdGQ6Om1vdmUoY2MpKTsKQEAgLTExMTksMzUgKzExNzIsMTI3IEBACiAgICAgICB9CiAgICAgfQogCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZGVuY2llcygKKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwZW5kRmlsZXMuYmVnaW4oKSwKKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwZW5kRmlsZXMuZW5kKCkpOworCisgICAgY29uc3QgYm9vbCB1c2VOaW5qYURlcGZpbGUgPSB0aGlzLT5RdFZlcnNpb24gPj0gSW50ZWdlclZlcnNpb24oNSwgMTUpICYmCisgICAgICB0aGlzLT5HbG9iYWxHZW4tPkdldE5hbWUoKS5maW5kKCJOaW5qYSIpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgIGlmICh1c2VOaW5qYURlcGZpbGUpIHsKKyAgICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBjb21tYW5kIHRoYXQgZ2VuZXJhdGVzIGEgdGltZXN0YW1wIGZpbGUgYW5kCisgICAgICAvLyBoYXMgYSBkZXBmaWxlIGFzc2lnbmVkLiBUaGUgZGVwZmlsZSBpcyBjcmVhdGVkIGJ5IEpvYkRlcEZpbGVzTWVyZ2VULgorICAgICAgLy8KKyAgICAgIC8vIEFsc28gY3JlYXRlIGFuIGFkZGl0aW9uYWwgJ19hdXRvZ2VuX3RpbWVzdGFtcF9kZXBzJyB0aGF0IHRoZSBjdXN0b20KKyAgICAgIC8vIGNvbW1hbmQgd2lsbCBkZXBlbmQgb24uIEl0IHdpbGwgaGF2ZSBubyBzb3VyY2VzIG9yIGNvbW1hbmRzIHRvCisgICAgICAvLyBleGVjdXRlLCBidXQgaXQgd2lsbCBoYXZlIGRlcGVuZGVuY2llcyB0aGF0IHdvdWxkIG9yaWdpbmFsbHkgYmUKKyAgICAgIC8vIGFzc2lnbmVkIHRvIHRoZSBwcmUtUXQgNS4xNSAnYXV0b2dlbicgdGFyZ2V0LiBUaGVzZSBkZXBlbmRlbmNpZXMgd2lsbAorICAgICAgLy8gc2VydmUgYXMgYSBsaXN0IG9mIG9yZGVyLW9ubHkgZGVwZW5kZW5jaWVzIGZvciB0aGUgY3VzdG9tIGNvbW1hbmQsCisgICAgICAvLyB3aXRob3V0IGZvcmNpbmcgdGhlIGN1c3RvbSBjb21tYW5kIHRvIHJlLWV4ZWN1dGUuCisgICAgICAvLworICAgICAgLy8gVGhlIGRlcGVuZGVuY3kgdHJlZSB3b3VsZCB0aGVuIGxvb2sgbGlrZQorICAgICAgLy8gJ19hdXRvZ2VuX3RpbWVzdGFtcF9kZXBzIChvcmRlci1vbmx5KScgPC0gJy90aW1lc3RhbXAnIGZpbGUgPC0KKyAgICAgIC8vICdfYXV0b2dlbicgdGFyZ2V0LgorICAgICAgY29uc3QgYXV0byB0aW1lc3RhbXBUYXJnZXROYW1lID0KKyAgICAgICAgY21TdHJDYXQodGhpcy0+R2VuVGFyZ2V0LT5HZXROYW1lKCksICJfYXV0b2dlbl90aW1lc3RhbXBfZGVwcyIpOworICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRpbWVzdGFtcFRhcmdldFByb3ZpZGVzOworICAgICAgY21DdXN0b21Db21tYW5kTGluZXMgdGltZXN0YW1wVGFyZ2V0Q29tbWFuZExpbmVzOworCisgICAgICAvLyBBZGQgYWRkaXRpb25hbCBhdXRvZ2VuIHRhcmdldCBkZXBlbmRlbmNpZXMgdG8KKyAgICAgIC8vICdfYXV0b2dlbl90aW1lc3RhbXBfZGVwcycuCisgICAgICBmb3IgKGNvbnN0IGNtVGFyZ2V0KiB0IDogdGhpcy0+QXV0b2dlblRhcmdldC5EZXBlbmRUYXJnZXRzKSB7CisgICAgICAgIGRlcGVuZGVuY2llcy5wdXNoX2JhY2sodC0+R2V0TmFtZSgpKTsKKyAgICAgIH0KKworICAgICAgY21UYXJnZXQqIHRpbWVzdGFtcFRhcmdldCA9IHRoaXMtPkxvY2FsR2VuLT5BZGRVdGlsaXR5Q29tbWFuZCgKKyAgICAgICAgdGltZXN0YW1wVGFyZ2V0TmFtZSwgdHJ1ZSwgdGhpcy0+RGlyLldvcmsuY19zdHIoKSwKKyAgICAgICAgLypieXByb2R1Y3RzPSovdGltZXN0YW1wVGFyZ2V0UHJvdmlkZXMsCisgICAgICAgIC8qZGVwZW5kcz0qL2RlcGVuZGVuY2llcywgdGltZXN0YW1wVGFyZ2V0Q29tbWFuZExpbmVzLCBmYWxzZSwgbnVsbHB0cik7CisgICAgICB0aGlzLT5Mb2NhbEdlbi0+QWRkR2VuZXJhdG9yVGFyZ2V0KAorICAgICAgICBjbTo6bWFrZV91bmlxdWU8Y21HZW5lcmF0b3JUYXJnZXQ+KHRpbWVzdGFtcFRhcmdldCwgdGhpcy0+TG9jYWxHZW4pKTsKKworICAgICAgLy8gU2V0IEZPTERFUiBwcm9wZXJ0eSBvbiB0aGUgdGltZXN0YW1wIHRhcmdldCwgc28gaXQgYXBwZWFycyBpbiB0aGUKKyAgICAgIC8vIGFwcHJvcHJpYXRlIGZvbGRlciBpbiBhbiBJREUgb3IgaW4gdGhlIGZpbGUgYXBpLgorICAgICAgaWYgKCF0aGlzLT5UYXJnZXRzRm9sZGVyLmVtcHR5KCkpIHsKKyAgICAgICAgdGltZXN0YW1wVGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRk9MREVSIiwgdGhpcy0+VGFyZ2V0c0ZvbGRlcik7CisgICAgICB9CisKKyAgICAgIC8vIE1ha2UgJy90aW1lc3RhbXAnIGZpbGUgZGVwZW5kIG9uICdfYXV0b2dlbl90aW1lc3RhbXBfZGVwcycgYW5kIG9uIHRoZQorICAgICAgLy8gbW9jIGFuZCB1aWMgZXhlY3V0YWJsZXMgKHdoaWNoZXZlciBhcmUgZW5hYmxlZCkuCisgICAgICBkZXBlbmRlbmNpZXMuY2xlYXIoKTsKKyAgICAgIGRlcGVuZGVuY2llcy5wdXNoX2JhY2sodGltZXN0YW1wVGFyZ2V0TmFtZSk7CisKKyAgICAgIGlmICh0aGlzLT5Nb2MuRXhlY3V0YWJsZVRhcmdldCAhPSBudWxscHRyKSB7CisgICAgICAgIGRlcGVuZGVuY2llcy5wdXNoX2JhY2sodGhpcy0+TW9jLkV4ZWN1dGFibGVUYXJnZXQtPlRhcmdldC0+R2V0TmFtZSgpKTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLT5VaWMuRXhlY3V0YWJsZVRhcmdldCAhPSBudWxscHRyKSB7CisgICAgICAgIGRlcGVuZGVuY2llcy5wdXNoX2JhY2sodGhpcy0+VWljLkV4ZWN1dGFibGVUYXJnZXQtPlRhcmdldC0+R2V0TmFtZSgpKTsKKyAgICAgIH0KKworICAgICAgLy8gQ3JlYXRlIHRoZSBjdXN0b20gY29tbWFuZCB0aGF0IG91dHB1dHMgdGhlIHRpbWVzdGFtcCBmaWxlLgorICAgICAgY29uc3QgY2hhciB0aW1lc3RhbXBGaWxlTmFtZVtdID0gInRpbWVzdGFtcCI7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvdXRwdXRGaWxlID0KKyAgICAgICAgY21TdHJDYXQodGhpcy0+RGlyLkJ1aWxkLCAiLyIsIHRpbWVzdGFtcEZpbGVOYW1lKTsKKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwRmlsZSA9IGNtU3RyQ2F0KHRoaXMtPkRpci5CdWlsZCwgIi9kZXBzIik7CisgICAgICBhdXRvIHJlbGF0aXZlQmluYXJ5RGlyID0gY21TeXN0ZW1Ub29sczo6UmVsYXRpdmVQYXRoKAorICAgICAgICB0aGlzLT5Mb2NhbEdlbi0+R2V0QmluYXJ5RGlyZWN0b3J5KCksCisgICAgICAgIHRoaXMtPkxvY2FsR2VuLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCkpOworICAgICAgaWYgKCFyZWxhdGl2ZUJpbmFyeURpci5lbXB0eSgpKSB7CisgICAgICAgIHJlbGF0aXZlQmluYXJ5RGlyID0gY21TdHJDYXQocmVsYXRpdmVCaW5hcnlEaXIsICIvIik7CisgICAgICB9CisgICAgICB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcEZpbGVSdWxlTmFtZSA9CisgICAgICAgIGNtU3RyQ2F0KHJlbGF0aXZlQmluYXJ5RGlyLCB0aGlzLT5HZW5UYXJnZXQtPkdldE5hbWUoKSwgIl9hdXRvZ2VuLyIsCisgICAgICAgICAgICAgICAgIHRpbWVzdGFtcEZpbGVOYW1lKTsKKyAgICAgIGNvbW1hbmRMaW5lcy5wdXNoX2JhY2soY21NYWtlQ29tbWFuZExpbmUoCisgICAgICAgIHsgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCksICItRSIsICJ0b3VjaCIsIG91dHB1dEZpbGUgfSkpOworCisgICAgICB0aGlzLT5BZGRHZW5lcmF0ZWRTb3VyY2Uob3V0cHV0RmlsZSwgdGhpcy0+TW9jKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5vX21haW5fZGVwZW5kZW5jeTsKKyAgICAgIHRoaXMtPkxvY2FsR2VuLT5BZGRDdXN0b21Db21tYW5kVG9PdXRwdXQoCisgICAgICAgIG91dHB1dEZpbGUsIGRlcGVuZGVuY2llcywgbm9fbWFpbl9kZXBlbmRlbmN5LCBjb21tYW5kTGluZXMsCisgICAgICAgIGF1dG9nZW5Db21tZW50LmNfc3RyKCksIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksIC8qcmVwbGFjZT0qL2ZhbHNlLAorICAgICAgICAvKmVzY2FwZU9sZFN0eWxlPSovZmFsc2UsCisgICAgICAgIC8qdXNlc190ZXJtaW5hbD0qL2ZhbHNlLAorICAgICAgICAvKmNvbW1hbmRfZXhwYW5kX2xpc3RzPSovZmFsc2UsIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwRmlsZSwgIiIsCisgICAgICAgIHN0ZFBpcGVzVVRGOCk7CisKKyAgICAgIC8vIEFsdGVyIHZhcmlhYmxlcyBmb3IgdGhlIGF1dG9nZW4gdGFyZ2V0IHdoaWNoIG5vdyBtZXJlbHkgd3JhcHMgdGhlCisgICAgICAvLyBjdXN0b20gY29tbWFuZAorICAgICAgZGVwZW5kZW5jaWVzLmNsZWFyKCk7CisgICAgICBkZXBlbmRlbmNpZXMucHVzaF9iYWNrKG91dHB1dEZpbGUpOworICAgICAgY29tbWFuZExpbmVzLmNsZWFyKCk7CisgICAgICBhdXRvZ2VuQ29tbWVudC5jbGVhcigpOworICAgIH0KKwogICAgIC8vIENyZWF0ZSBhdXRvZ2VuIHRhcmdldAotICAgIGNtVGFyZ2V0KiBhdXRvZ2VuVGFyZ2V0ID0gdGhpcy0+TWFrZWZpbGUtPkFkZFV0aWxpdHlDb21tYW5kKAotICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5OYW1lLCBjbUNvbW1hbmRPcmlnaW46OkdlbmVyYXRvciwgdHJ1ZSwKLSAgICAgIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksIC8qYnlwcm9kdWN0cz0qL2F1dG9nZW5Qcm92aWRlcywKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPih0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZEZpbGVzLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+QXV0b2dlblRhcmdldC5EZXBlbmRGaWxlcy5lbmQoKSksCi0gICAgICBjb21tYW5kTGluZXMsIGZhbHNlLCBhdXRvZ2VuQ29tbWVudC5jX3N0cigpKTsKKyAgICBjbVRhcmdldCogYXV0b2dlblRhcmdldCA9IHRoaXMtPkxvY2FsR2VuLT5BZGRVdGlsaXR5Q29tbWFuZCgKKyAgICAgIHRoaXMtPkF1dG9nZW5UYXJnZXQuTmFtZSwgdHJ1ZSwgdGhpcy0+RGlyLldvcmsuY19zdHIoKSwKKyAgICAgIC8qYnlwcm9kdWN0cz0qL2F1dG9nZW5Qcm92aWRlcywKKyAgICAgIC8qZGVwZW5kcz0qL2RlcGVuZGVuY2llcywgY29tbWFuZExpbmVzLCBmYWxzZSwgYXV0b2dlbkNvbW1lbnQuY19zdHIoKSk7CiAgICAgLy8gQ3JlYXRlIGF1dG9nZW4gZ2VuZXJhdG9yIHRhcmdldAogICAgIHRoaXMtPkxvY2FsR2VuLT5BZGRHZW5lcmF0b3JUYXJnZXQoCi0gICAgICBuZXcgY21HZW5lcmF0b3JUYXJnZXQoYXV0b2dlblRhcmdldCwgdGhpcy0+TG9jYWxHZW4pKTsKKyAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdlbmVyYXRvclRhcmdldD4oYXV0b2dlblRhcmdldCwgdGhpcy0+TG9jYWxHZW4pKTsKIAogICAgIC8vIEZvcndhcmQgb3JpZ2luIHV0aWxpdGllcyB0byBhdXRvZ2VuIHRhcmdldAogICAgIGlmICh0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZE9yaWdpbikgewotICAgICAgZm9yIChCVDxzdGQ6OnN0cmluZz4gY29uc3QmIGRlcE5hbWUgOiB0aGlzLT5HZW5UYXJnZXQtPkdldFV0aWxpdGllcygpKSB7Ci0gICAgICAgIGF1dG9nZW5UYXJnZXQtPkFkZFV0aWxpdHkoZGVwTmFtZS5WYWx1ZSwgdGhpcy0+TWFrZWZpbGUpOworICAgICAgZm9yIChCVDxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGJvb2w+PiBjb25zdCYgZGVwTmFtZSA6CisgICAgICAgICAgIHRoaXMtPkdlblRhcmdldC0+R2V0VXRpbGl0aWVzKCkpIHsKKyAgICAgICAgYXV0b2dlblRhcmdldC0+QWRkVXRpbGl0eShkZXBOYW1lLlZhbHVlLmZpcnN0LCBmYWxzZSwgdGhpcy0+TWFrZWZpbGUpOwogICAgICAgfQogICAgIH0KLSAgICAvLyBBZGQgYWRkaXRpb25hbCBhdXRvZ2VuIHRhcmdldCBkZXBlbmRlbmNpZXMgdG8gYXV0b2dlbiB0YXJnZXQKLSAgICBmb3IgKGNtVGFyZ2V0KiBkZXBUYXJnZXQgOiB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZFRhcmdldHMpIHsKLSAgICAgIGF1dG9nZW5UYXJnZXQtPkFkZFV0aWxpdHkoZGVwVGFyZ2V0LT5HZXROYW1lKCksIHRoaXMtPk1ha2VmaWxlKTsKKyAgICBpZiAoIXVzZU5pbmphRGVwZmlsZSkgeworICAgICAgLy8gQWRkIGFkZGl0aW9uYWwgYXV0b2dlbiB0YXJnZXQgZGVwZW5kZW5jaWVzIHRvIGF1dG9nZW4gdGFyZ2V0CisgICAgICBmb3IgKGNtVGFyZ2V0KiBkZXBUYXJnZXQgOiB0aGlzLT5BdXRvZ2VuVGFyZ2V0LkRlcGVuZFRhcmdldHMpIHsKKyAgICAgICAgYXV0b2dlblRhcmdldC0+QWRkVXRpbGl0eShkZXBUYXJnZXQtPkdldE5hbWUoKSwgZmFsc2UsIHRoaXMtPk1ha2VmaWxlKTsKKyAgICAgIH0KICAgICB9CiAKICAgICAvLyBTZXQgRk9MREVSIHByb3BlcnR5IGluIGF1dG9nZW4gdGFyZ2V0CiAgICAgaWYgKCF0aGlzLT5UYXJnZXRzRm9sZGVyLmVtcHR5KCkpIHsKLSAgICAgIGF1dG9nZW5UYXJnZXQtPlNldFByb3BlcnR5KCJGT0xERVIiLCB0aGlzLT5UYXJnZXRzRm9sZGVyLmNfc3RyKCkpOworICAgICAgYXV0b2dlblRhcmdldC0+U2V0UHJvcGVydHkoIkZPTERFUiIsIHRoaXMtPlRhcmdldHNGb2xkZXIpOwogICAgIH0KIAogICAgIC8vIEFkZCBhdXRvZ2VuIHRhcmdldCB0byB0aGUgb3JpZ2luIHRhcmdldCBkZXBlbmRlbmNpZXMKLSAgICB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eSh0aGlzLT5BdXRvZ2VuVGFyZ2V0Lk5hbWUsCisgICAgdGhpcy0+R2VuVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkodGhpcy0+QXV0b2dlblRhcmdldC5OYW1lLCBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZSk7CiAKICAgICAvLyBBZGQgYXV0b2dlbiB0YXJnZXQgdG8gdGhlIGdsb2JhbCBhdXRvZ2VuIHRhcmdldCBkZXBlbmRlbmNpZXMKQEAgLTExNzksNiArMTMyNCw3IEBACiAgICAgY2NEZXBlbmRzLnB1c2hfYmFjayhxcmMuUXJjRmlsZSk7CiAgICAgY2NEZXBlbmRzLnB1c2hfYmFjayhxcmMuSW5mb0ZpbGUpOwogCisgICAgYm9vbCBzdGRQaXBlc1VURjggPSB0cnVlOwogICAgIGNtQ3VzdG9tQ29tbWFuZExpbmVzIGNvbW1hbmRMaW5lczsKICAgICBpZiAodGhpcy0+TXVsdGlDb25maWcpIHsKICAgICAgIC8vIEJ1aWxkIGZvciBhbGwgY29uZmlndXJhdGlvbnMKQEAgLTEyMDUsMjUgKzEzNTEsMjYgQEAKICAgICAgICAgICBjY05hbWUgKz0gY21TdHJDYXQoJ18nLCBxcmMuUXJjUGF0aENoZWNrc3VtKTsKICAgICAgICAgfQogCi0gICAgICAgIGNtVGFyZ2V0KiBhdXRvUmNjVGFyZ2V0ID0gdGhpcy0+TWFrZWZpbGUtPkFkZFV0aWxpdHlDb21tYW5kKAotICAgICAgICAgIGNjTmFtZSwgY21Db21tYW5kT3JpZ2luOjpHZW5lcmF0b3IsIHRydWUsIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksCi0gICAgICAgICAgY2NPdXRwdXQsIGNjRGVwZW5kcywgY29tbWFuZExpbmVzLCBmYWxzZSwgY2NDb21tZW50LmNfc3RyKCkpOworICAgICAgICBjbVRhcmdldCogYXV0b1JjY1RhcmdldCA9IHRoaXMtPkxvY2FsR2VuLT5BZGRVdGlsaXR5Q29tbWFuZCgKKyAgICAgICAgICBjY05hbWUsIHRydWUsIHRoaXMtPkRpci5Xb3JrLmNfc3RyKCksIGNjT3V0cHV0LCBjY0RlcGVuZHMsCisgICAgICAgICAgY29tbWFuZExpbmVzLCBmYWxzZSwgY2NDb21tZW50LmNfc3RyKCksIGZhbHNlLCBmYWxzZSwgIiIsCisgICAgICAgICAgc3RkUGlwZXNVVEY4KTsKIAogICAgICAgICAvLyBDcmVhdGUgYXV0b2dlbiBnZW5lcmF0b3IgdGFyZ2V0CiAgICAgICAgIHRoaXMtPkxvY2FsR2VuLT5BZGRHZW5lcmF0b3JUYXJnZXQoCi0gICAgICAgICAgbmV3IGNtR2VuZXJhdG9yVGFyZ2V0KGF1dG9SY2NUYXJnZXQsIHRoaXMtPkxvY2FsR2VuKSk7CisgICAgICAgICAgY206Om1ha2VfdW5pcXVlPGNtR2VuZXJhdG9yVGFyZ2V0PihhdXRvUmNjVGFyZ2V0LCB0aGlzLT5Mb2NhbEdlbikpOwogCiAgICAgICAgIC8vIFNldCBGT0xERVIgcHJvcGVydHkgaW4gYXV0b2dlbiB0YXJnZXQKICAgICAgICAgaWYgKCF0aGlzLT5UYXJnZXRzRm9sZGVyLmVtcHR5KCkpIHsKLSAgICAgICAgICBhdXRvUmNjVGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRk9MREVSIiwgdGhpcy0+VGFyZ2V0c0ZvbGRlci5jX3N0cigpKTsKKyAgICAgICAgICBhdXRvUmNjVGFyZ2V0LT5TZXRQcm9wZXJ0eSgiRk9MREVSIiwgdGhpcy0+VGFyZ2V0c0ZvbGRlcik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0aGlzLT5SY2MuRXhlY3V0YWJsZVRhcmdldE5hbWUuZW1wdHkoKSkgewotICAgICAgICAgIGF1dG9SY2NUYXJnZXQtPkFkZFV0aWxpdHkodGhpcy0+UmNjLkV4ZWN1dGFibGVUYXJnZXROYW1lLAorICAgICAgICAgIGF1dG9SY2NUYXJnZXQtPkFkZFV0aWxpdHkodGhpcy0+UmNjLkV4ZWN1dGFibGVUYXJnZXROYW1lLCBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgLy8gQWRkIGF1dG9nZW4gdGFyZ2V0IHRvIHRoZSBvcmlnaW4gdGFyZ2V0IGRlcGVuZGVuY2llcwotICAgICAgdGhpcy0+R2VuVGFyZ2V0LT5UYXJnZXQtPkFkZFV0aWxpdHkoY2NOYW1lLCB0aGlzLT5NYWtlZmlsZSk7CisgICAgICB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+QWRkVXRpbGl0eShjY05hbWUsIGZhbHNlLCB0aGlzLT5NYWtlZmlsZSk7CiAKICAgICAgIC8vIEFkZCBhdXRvZ2VuIHRhcmdldCB0byB0aGUgZ2xvYmFsIGF1dG9nZW4gdGFyZ2V0IGRlcGVuZGVuY2llcwogICAgICAgaWYgKHRoaXMtPlJjYy5HbG9iYWxUYXJnZXQpIHsKQEAgLTEyNDQsMTAgKzEzOTEsMTEgQEAKICAgICAgICAgfQogICAgICAgICBzdGQ6OnN0cmluZyBub19tYWluX2RlcGVuZGVuY3k7CiAgICAgICAgIGNtSW1wbGljaXREZXBlbmRzTGlzdCBub19pbXBsaWNpdF9kZXBlbmRzOwotICAgICAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAorICAgICAgICB0aGlzLT5Mb2NhbEdlbi0+QWRkQ3VzdG9tQ29tbWFuZFRvT3V0cHV0KAogICAgICAgICAgIGNjT3V0cHV0LCBjY0J5cHJvZHVjdHMsIGNjRGVwZW5kcywgbm9fbWFpbl9kZXBlbmRlbmN5LAogICAgICAgICAgIG5vX2ltcGxpY2l0X2RlcGVuZHMsIGNvbW1hbmRMaW5lcywgY2NDb21tZW50LmNfc3RyKCksCi0gICAgICAgICAgdGhpcy0+RGlyLldvcmsuY19zdHIoKSk7CisgICAgICAgICAgdGhpcy0+RGlyLldvcmsuY19zdHIoKSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgIiIsICIiLAorICAgICAgICAgIHN0ZFBpcGVzVVRGOCk7CiAgICAgICB9CiAgICAgICAvLyBSZWNvbmZpZ3VyZSB3aGVuIC5xcmMgZmlsZSBjaGFuZ2VzCiAgICAgICB0aGlzLT5NYWtlZmlsZS0+QWRkQ01ha2VEZXBlbmRGaWxlKHFyYy5RcmNGaWxlKTsKQEAgLTEzNTYsMTIgKzE1MDQsMTUgQEAKICAgaW5mby5TZXRDb25maWcoIklOQ0xVREVfRElSIiwgdGhpcy0+RGlyLkluY2x1ZGUpOwogCiAgIGluZm8uU2V0VUludCgiUVRfVkVSU0lPTl9NQUpPUiIsIHRoaXMtPlF0VmVyc2lvbi5NYWpvcik7CisgIGluZm8uU2V0VUludCgiUVRfVkVSU0lPTl9NSU5PUiIsIHRoaXMtPlF0VmVyc2lvbi5NaW5vcik7CiAgIGluZm8uU2V0KCJRVF9NT0NfRVhFQ1VUQUJMRSIsIHRoaXMtPk1vYy5FeGVjdXRhYmxlKTsKICAgaW5mby5TZXQoIlFUX1VJQ19FWEVDVVRBQkxFIiwgdGhpcy0+VWljLkV4ZWN1dGFibGUpOwogCiAgIGluZm8uU2V0KCJDTUFLRV9FWEVDVVRBQkxFIiwgY21TeXN0ZW1Ub29sczo6R2V0Q01ha2VDb21tYW5kKCkpOwogICBpbmZvLlNldENvbmZpZygiU0VUVElOR1NfRklMRSIsIHRoaXMtPkF1dG9nZW5UYXJnZXQuU2V0dGluZ3NGaWxlKTsKICAgaW5mby5TZXRDb25maWcoIlBBUlNFX0NBQ0hFX0ZJTEUiLCB0aGlzLT5BdXRvZ2VuVGFyZ2V0LlBhcnNlQ2FjaGVGaWxlKTsKKyAgaW5mby5TZXQoIkRFUF9GSUxFIiwgdGhpcy0+QXV0b2dlblRhcmdldC5EZXBGaWxlKTsKKyAgaW5mby5TZXQoIkRFUF9GSUxFX1JVTEVfTkFNRSIsIHRoaXMtPkF1dG9nZW5UYXJnZXQuRGVwRmlsZVJ1bGVOYW1lKTsKICAgaW5mby5TZXRBcnJheSgiSEVBREVSX0VYVEVOU0lPTlMiLAogICAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldEhlYWRlckV4dGVuc2lvbnMoKSk7CiAgIGluZm8uU2V0QXJyYXlBcnJheSgKQEAgLTE1MDEsMTAgKzE2NTIsOSBAQAogICAgICAgICBjbVN0ckNhdChnZW5OYW1lVXBwZXIsICJfU09VUkNFX0dST1VQIiksICJBVVRPR0VOX1NPVVJDRV9HUk9VUCIKICAgICAgIH07CiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wIDogcHJvcHMpIHsKLSAgICAgICAgY29uc3QgY2hhciogcHJvcE5hbWUgPQotICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgaWYgKChwcm9wTmFtZSAhPSBudWxscHRyKSAmJiAoKnByb3BOYW1lICE9ICdcMCcpKSB7Ci0gICAgICAgICAgZ3JvdXBOYW1lID0gcHJvcE5hbWU7CisgICAgICAgIGNtUHJvcCBwcm9wTmFtZSA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRHbG9iYWxQcm9wZXJ0eShwcm9wKTsKKyAgICAgICAgaWYgKGNtTm9uZW1wdHkocHJvcE5hbWUpKSB7CisgICAgICAgICAgZ3JvdXBOYW1lID0gKnByb3BOYW1lOwogICAgICAgICAgIHByb3BlcnR5ID0gcHJvcDsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTUyOCw4ICsxNjc4LDggQEAKIAogdm9pZCBjbVF0QXV0b0dlbkluaXRpYWxpemVyOjpBZGRDbGVhbkZpbGUoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGVOYW1lKQogewotICB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+QXBwZW5kUHJvcGVydHkoIkFERElUSU9OQUxfQ0xFQU5fRklMRVMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUuY19zdHIoKSwgZmFsc2UpOworICB0aGlzLT5HZW5UYXJnZXQtPlRhcmdldC0+QXBwZW5kUHJvcGVydHkoIkFERElUSU9OQUxfQ0xFQU5fRklMRVMiLCBmaWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKIH0KIAogdm9pZCBjbVF0QXV0b0dlbkluaXRpYWxpemVyOjpDb25maWdGaWxlTmFtZXMoQ29uZmlnU3RyaW5nJiBjb25maWdTdHJpbmcsCkBAIC0xNTY1LDYgKzE3MTUsMTMgQEAKICAgICB9CiAgICAgcmV0dXJuIDB1OwogICB9OworICBhdXRvIHRvVUludDIgPSBbXShjbVByb3AgaW5wdXQpIC0+IHVuc2lnbmVkIGludCB7CisgICAgdW5zaWduZWQgbG9uZyB0bXAgPSAwOworICAgIGlmIChpbnB1dCAhPSBudWxscHRyICYmIGNtU3RyVG9VTG9uZygqaW5wdXQsICZ0bXApKSB7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih0bXApOworICAgIH0KKyAgICByZXR1cm4gMHU7CisgIH07CiAKICAgLy8gSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgdG8gYSBkZWZhdWx0CiAgIHN0ZDo6cGFpcjxJbnRlZ2VyVmVyc2lvbiwgdW5zaWduZWQgaW50PiByZXMoCkBAIC0xNTg2LDkgKzE3NDMsOSBAQAogICAgIGtub3duUXRWZXJzaW9ucy5yZXNlcnZlKGtleXMuc2l6ZSgpICogMik7CiAKICAgICAvLyBBZGRzIGEgdmVyc2lvbiB0byB0aGUgcmVzdWx0IChudWxscHRyIHNhZmUpCi0gICAgYXV0byBhZGRWZXJzaW9uID0gWyZrbm93blF0VmVyc2lvbnMsICZ0b1VJbnRdKGNvbnN0IGNoYXIqIG1ham9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtaW5vcikgewotICAgICAgY21RdEF1dG9HZW46OkludGVnZXJWZXJzaW9uIHZlcih0b1VJbnQobWFqb3IpLCB0b1VJbnQobWlub3IpKTsKKyAgICBhdXRvIGFkZFZlcnNpb24gPSBbJmtub3duUXRWZXJzaW9ucywgJnRvVUludDJdKGNtUHJvcCBtYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtUHJvcCBtaW5vcikgeworICAgICAgY21RdEF1dG9HZW46OkludGVnZXJWZXJzaW9uIHZlcih0b1VJbnQyKG1ham9yKSwgdG9VSW50MihtaW5vcikpOwogICAgICAgaWYgKHZlci5NYWpvciAhPSAwKSB7CiAgICAgICAgIGtub3duUXRWZXJzaW9ucy5lbXBsYWNlX2JhY2sodmVyKTsKICAgICAgIH0KQEAgLTE1OTYsOCArMTc1Myw4IEBACiAKICAgICAvLyBSZWFkIHZlcnNpb25zIGZyb20gdmFyaWFibGVzCiAgICAgZm9yIChhdXRvIGNvbnN0JiBrZXlQYWlyIDoga2V5cykgewotICAgICAgYWRkVmVyc2lvbih0YXJnZXQtPk1ha2VmaWxlLT5HZXREZWZpbml0aW9uKHN0ZDo6c3RyaW5nKGtleVBhaXIuZmlyc3QpKSwKLSAgICAgICAgICAgICAgICAgdGFyZ2V0LT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbihzdGQ6OnN0cmluZyhrZXlQYWlyLnNlY29uZCkpKTsKKyAgICAgIGFkZFZlcnNpb24odGFyZ2V0LT5NYWtlZmlsZS0+R2V0RGVmKHN0ZDo6c3RyaW5nKGtleVBhaXIuZmlyc3QpKSwKKyAgICAgICAgICAgICAgICAgdGFyZ2V0LT5NYWtlZmlsZS0+R2V0RGVmKHN0ZDo6c3RyaW5nKGtleVBhaXIuc2Vjb25kKSkpOwogICAgIH0KIAogICAgIC8vIFJlYWQgdmVyc2lvbnMgZnJvbSBkaXJlY3RvcnkgcHJvcGVydGllcwpAQCAtMTYzMiwyMSArMTc4OSwzOSBAQAogICBpZiAoIW11Zi5Nb2NJdCkgewogICAgIHJldHVybiByZXM7CiAgIH0KLSAgewotICAgIHN0ZDo6c3RyaW5nIGNvbnN0IGJhc2VQYXRoID0KLSAgICAgIGNtU3RyQ2F0KHRoaXMtPlBhdGhDaGVja1N1bS5nZXRQYXJ0KG11Zi5GdWxsUGF0aCksICIvbW9jXyIsCi0gICAgICAgICAgICAgICBGaWxlTmFtZVdpdGhvdXRMYXN0RXh0ZW5zaW9uKG11Zi5GdWxsUGF0aCkpOwotICAgIHN0ZDo6c3RyaW5nIHN1ZmZpeDsKLSAgICBjb25zdGV4cHIgc3RkOjpzaXplX3QgbnVtX3RyaWVzX21heCA9IDI1NjsKLSAgICBmb3IgKHN0ZDo6c2l6ZV90IGlpID0gMDsgaWkgIT0gbnVtX3RyaWVzX21heDsgKytpaSkgewotICAgICAgcmVzID0gY21TdHJDYXQoYmFzZVBhdGgsIHN1ZmZpeCwgIi5jcHAiKTsKLSAgICAgIGlmICh0aGlzLT5Nb2MuRW1pdHRlZEJ1aWxkUGF0aHMuZW1wbGFjZShyZXMpLnNlY29uZCkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8vIENvbXB1dGUgbmV3IHN1ZmZpeAotICAgICAgc3VmZml4ID0gY21TdHJDYXQoJ18nLCBpaSArIDEpOworCisgIHN0ZDo6c3RyaW5nIGJhc2VQYXRoID0KKyAgICBjbVN0ckNhdCh0aGlzLT5QYXRoQ2hlY2tTdW0uZ2V0UGFydChtdWYuRnVsbFBhdGgpLCAiL21vY18iLAorICAgICAgICAgICAgIEZpbGVOYW1lV2l0aG91dExhc3RFeHRlbnNpb24obXVmLkZ1bGxQYXRoKSk7CisKKyAgcmVzID0gY21TdHJDYXQoYmFzZVBhdGgsICIuY3BwIik7CisgIGlmICh0aGlzLT5Nb2MuRW1pdHRlZEJ1aWxkUGF0aHMuZW1wbGFjZShyZXMpLnNlY29uZCkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICAvLyBGaWxlIG5hbWUgYWxyZWFkeSBlbWl0dGVkLgorICAvLyBUcnkgYXBwZW5kaW5nIHRoZSBoZWFkZXIgc3VmZml4IHRvIHRoZSBiYXNlIHBhdGguCisgIGJhc2VQYXRoID0gY21TdHJDYXQoYmFzZVBhdGgsICdfJywgbXVmLlNGLT5HZXRFeHRlbnNpb24oKSk7CisgIHJlcyA9IGNtU3RyQ2F0KGJhc2VQYXRoLCAiLmNwcCIpOworICBpZiAodGhpcy0+TW9jLkVtaXR0ZWRCdWlsZFBhdGhzLmVtcGxhY2UocmVzKS5zZWNvbmQpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLy8gRmlsZSBuYW1lIHdpdGggaGVhZGVyIGV4dGVuc2lvbiBhbHJlYWR5IGVtaXR0ZWQuCisgIC8vIFRyeSBhZGRpbmcgYSBudW1iZXIgdG8gdGhlIGJhc2UgcGF0aC4KKyAgY29uc3RleHByIHN0ZDo6c2l6ZV90IG51bWJlcl9iZWdpbiA9IDI7CisgIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBudW1iZXJfZW5kID0gMjU2OworICBmb3IgKHN0ZDo6c2l6ZV90IGlpID0gbnVtYmVyX2JlZ2luOyBpaSAhPSBudW1iZXJfZW5kOyArK2lpKSB7CisgICAgcmVzID0gY21TdHJDYXQoYmFzZVBhdGgsICdfJywgaWksICIuY3BwIik7CisgICAgaWYgKHRoaXMtPk1vYy5FbWl0dGVkQnVpbGRQYXRocy5lbXBsYWNlKHJlcykuc2Vjb25kKSB7CisgICAgICByZXR1cm4gcmVzOwogICAgIH0KICAgfQorCisgIC8vIE91dHB1dCBmaWxlIG5hbWUgY29uZmxpY3QgKHVubGlrZWx5LCBidXQgc3RpbGwuLi4pCisgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAorICAgIGNtU3RyQ2F0KCJtb2Mgb3V0cHV0IGZpbGUgbmFtZSBjb25mbGljdCBmb3IgIiwgbXVmLkZ1bGxQYXRoKSk7CisKICAgcmV0dXJuIHJlczsKIH0KIApAQCAtMTY2Miw3ICsxODM3LDcgQEAKICAgLy8gQ3VzdG9tIGV4ZWN1dGFibGUKICAgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0IHByb3AgPSBjbVN0ckNhdChnZW5WYXJzLkdlbk5hbWVVcHBlciwgIl9FWEVDVVRBQkxFIik7Ci0gICAgc3RkOjpzdHJpbmcgY29uc3QgdmFsID0gdGhpcy0+R2VuVGFyZ2V0LT5UYXJnZXQtPkdldFNhZmVQcm9wZXJ0eShwcm9wKTsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsID0gdGhpcy0+R2VuVGFyZ2V0LT5UYXJnZXQtPkdldFNhZmVQcm9wZXJ0eShwcm9wKTsKICAgICBpZiAoIXZhbC5lbXB0eSgpKSB7CiAgICAgICAvLyBFdmFsdWF0ZSBnZW5lcmF0b3IgZXhwcmVzc2lvbgogICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUXRBdXRvR2VuSW5pdGlhbGl6ZXIuaCBiL1NvdXJjZS9jbVF0QXV0b0dlbkluaXRpYWxpemVyLmgKaW5kZXggZDU1MjU5Yy4uNDhlYzFhMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuSW5pdGlhbGl6ZXIuaAorKysgYi9Tb3VyY2UvY21RdEF1dG9HZW5Jbml0aWFsaXplci5oCkBAIC0xNjAsNiArMTYwLDggQEAKICAgYm9vbCBNdWx0aUNvbmZpZyA9IGZhbHNlOwogICBib29sIENNUDAwNzFBY2NlcHQgPSBmYWxzZTsKICAgYm9vbCBDTVAwMDcxV2FybiA9IGZhbHNlOworICBib29sIENNUDAxMDBBY2NlcHQgPSBmYWxzZTsKKyAgYm9vbCBDTVAwMTAwV2FybiA9IGZhbHNlOwogICBzdGQ6OnN0cmluZyBDb25maWdEZWZhdWx0OwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ29uZmlnc0xpc3Q7CiAgIHN0ZDo6c3RyaW5nIFRhcmdldHNGb2xkZXI7CkBAIC0xODksMTAgKzE5MSwxMyBAQAogICAgIGJvb2wgRGVwZW5kT3JpZ2luID0gZmFsc2U7CiAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IERlcGVuZEZpbGVzOwogICAgIHN0ZDo6c2V0PGNtVGFyZ2V0Kj4gRGVwZW5kVGFyZ2V0czsKKyAgICBzdGQ6OnN0cmluZyBEZXBGaWxlOworICAgIHN0ZDo6c3RyaW5nIERlcEZpbGVSdWxlTmFtZTsKICAgICAvLyBTb3VyY2VzIHRvIHByb2Nlc3MKICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y21Tb3VyY2VGaWxlKiwgTVVGaWxlSGFuZGxlPiBIZWFkZXJzOwogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxjbVNvdXJjZUZpbGUqLCBNVUZpbGVIYW5kbGU+IFNvdXJjZXM7CiAgICAgc3RkOjp2ZWN0b3I8TVVGaWxlKj4gRmlsZXNHZW5lcmF0ZWQ7CisgICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlKj4gQ01QMDEwMEhlYWRlcnNXYXJuOwogICB9IEF1dG9nZW5UYXJnZXQ7CiAKICAgLyoqIG1vYyB2YXJpYWJsZXMuICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUXRBdXRvR2VuZXJhdG9yLmN4eCBiL1NvdXJjZS9jbVF0QXV0b0dlbmVyYXRvci5jeHgKaW5kZXggZGE5NjMwNS4uZWUyYmMwOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtUXRBdXRvR2VuZXJhdG9yLmN4eAorKysgYi9Tb3VyY2UvY21RdEF1dG9HZW5lcmF0b3IuY3h4CkBAIC0yLDkgKzIsOSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21RdEF1dG9HZW5lcmF0b3IuaCIKIAotI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgorI2luY2x1ZGUgPGNtM3AvanNvbi9yZWFkZXIuaD4KIAotI2luY2x1ZGUgImNtX2pzb25jcHBfcmVhZGVyLmgiCisjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAKICNpbmNsdWRlICJjbVF0QXV0b0dlbi5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUXRBdXRvR2VuZXJhdG9yLmggYi9Tb3VyY2UvY21RdEF1dG9HZW5lcmF0b3IuaAppbmRleCBiYmU2ZGQwLi44M2ZiM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21RdEF1dG9HZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21RdEF1dG9HZW5lcmF0b3IuaApAQCAtMTMsNyArMTMsNyBAQAogCiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CiAKICNpbmNsdWRlICJjbUZpbGVUaW1lLmgiCiAjaW5jbHVkZSAiY21RdEF1dG9HZW4uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVF0QXV0b01vY1VpYy5jeHggYi9Tb3VyY2UvY21RdEF1dG9Nb2NVaWMuY3h4CmluZGV4IGY4Yjg5ODEuLmY2Y2NjZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVF0QXV0b01vY1VpYy5jeHgKKysrIGIvU291cmNlL2NtUXRBdXRvTW9jVWljLmN4eApAQCAtMTYsMTUgKzE2LDE3IEBACiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCisjaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CiAKICNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCi0KLSNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbUNyeXB0b0hhc2guaCIKICNpbmNsdWRlICJjbUZpbGVUaW1lLmgiCisjaW5jbHVkZSAiY21HY2NEZXBmaWxlUmVhZGVyLmgiCisjaW5jbHVkZSAiY21HY2NEZXBmaWxlUmVhZGVyVHlwZXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRlZEZpbGVTdHJlYW0uaCIKICNpbmNsdWRlICJjbVF0QXV0b0dlbi5oIgogI2luY2x1ZGUgImNtUXRBdXRvR2VuZXJhdG9yLmgiCkBAIC0xNzAsNyArMTcyLDcgQEAKICAgICAvLyAtLSBBdHRyaWJ1dGVzCiAgICAgLy8gLSBDb25maWcKICAgICBib29sIE11bHRpQ29uZmlnID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW50IFF0VmVyc2lvbk1ham9yID0gNDsKKyAgICBJbnRlZ2VyVmVyc2lvbiBRdFZlcnNpb24gPSB7IDQsIDAgfTsKICAgICB1bnNpZ25lZCBpbnQgVGhyZWFkQ291bnQgPSAwOwogICAgIC8vIC0gRGlyZWN0b3JpZXMKICAgICBzdGQ6OnN0cmluZyBBdXRvZ2VuQnVpbGREaXI7CkBAIC0xNzksNiArMTgxLDggQEAKICAgICBzdGQ6OnN0cmluZyBDTWFrZUV4ZWN1dGFibGU7CiAgICAgY21GaWxlVGltZSBDTWFrZUV4ZWN1dGFibGVUaW1lOwogICAgIHN0ZDo6c3RyaW5nIFBhcnNlQ2FjaGVGaWxlOworICAgIHN0ZDo6c3RyaW5nIERlcEZpbGU7CisgICAgc3RkOjpzdHJpbmcgRGVwRmlsZVJ1bGVOYW1lOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBIZWFkZXJFeHRlbnNpb25zOwogICB9OwogCkBAIC0yMTYsNiArMjIwLDcgQEAKICAgICBib29sIFNldHRpbmdzQ2hhbmdlZCA9IGZhbHNlOwogICAgIGJvb2wgUmVsYXhlZE1vZGUgPSBmYWxzZTsKICAgICBib29sIFBhdGhQcmVmaXggPSBmYWxzZTsKKyAgICBib29sIENhbk91dHB1dERlcGVuZGVuY2llcyA9IGZhbHNlOwogICAgIGNtRmlsZVRpbWUgRXhlY3V0YWJsZVRpbWU7CiAgICAgc3RkOjpzdHJpbmcgRXhlY3V0YWJsZTsKICAgICBzdGQ6OnN0cmluZyBDb21wRmlsZUFiczsKQEAgLTQ4NSw4ICs0OTAsMTcgQEAKICAgY2xhc3MgSm9iQ29tcGlsZU1vY1QgOiBwdWJsaWMgSm9iQ29tcGlsZVQKICAgewogICBwdWJsaWM6Ci0gICAgdXNpbmcgSm9iQ29tcGlsZVQ6OkpvYkNvbXBpbGVUOworICAgIEpvYkNvbXBpbGVNb2NUKE1hcHBpbmdIYW5kbGVUIHVpY01hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6c3RyaW5nPiByZWFzb24sCisgICAgICAgICAgICAgICAgICAgUGFyc2VDYWNoZVQ6OkZpbGVIYW5kbGVUIGNhY2hlRW50cnkpCisgICAgICA6IEpvYkNvbXBpbGVUKHN0ZDo6bW92ZSh1aWNNYXBwaW5nKSwgc3RkOjptb3ZlKHJlYXNvbikpCisgICAgICAsIENhY2hlRW50cnkoc3RkOjptb3ZlKGNhY2hlRW50cnkpKQorICAgIHsKKyAgICB9CiAgICAgdm9pZCBQcm9jZXNzKCkgb3ZlcnJpZGU7CisKKyAgcHJvdGVjdGVkOgorICAgIFBhcnNlQ2FjaGVUOjpGaWxlSGFuZGxlVCBDYWNoZUVudHJ5OwogICB9OwogCiAgIC8qKiB1aWMgY29tcGlsZXMgYSBmaWxlLiAgKi8KQEAgLTUwNCw2ICs1MTgsMTIgQEAKICAgICB2b2lkIFByb2Nlc3MoKSBvdmVycmlkZTsKICAgfTsKIAorICBjbGFzcyBKb2JEZXBGaWxlc01lcmdlVCA6IHB1YmxpYyBKb2JGZW5jZVQKKyAgeworICBwcml2YXRlOgorICAgIHZvaWQgUHJvY2VzcygpIG92ZXJyaWRlOworICB9OworCiAgIC8qKiBAYnJpZWYgVGhlIGxhc3Qgam9iLiAgKi8KICAgY2xhc3MgSm9iRmluaXNoVCA6IHB1YmxpYyBKb2JGZW5jZVQKICAgewpAQCAtNTQ2LDYgKzU2Niw5IEBACiAgIHZvaWQgQWJvcnQoYm9vbCBlcnJvcik7CiAgIC8vIC0tIEdlbmVyYXRpb24KICAgYm9vbCBDcmVhdGVEaXJlY3RvcmllcygpOworICAvLyAtLSBTdXBwb3J0IGZvciBkZXBmaWxlcworICBzdGF0aWMgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZGVuY2llc0Zyb21EZXBGaWxlKAorICAgIGNvbnN0IGNoYXIqIGZpbGVQYXRoKTsKIAogcHJpdmF0ZToKICAgLy8gLS0gU2V0dGluZ3MKQEAgLTY3NywyNyArNzAwLDI3IEBACiAgIGlmICghb2ZzKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIG9mcyA8PCAiIyBHZW5lcmF0ZWQgYnkgQ01ha2UuIENoYW5nZXMgd2lsbCBiZSBvdmVyd3JpdHRlbi4iIDw8IHN0ZDo6ZW5kbDsKKyAgb2ZzIDw8ICIjIEdlbmVyYXRlZCBieSBDTWFrZS4gQ2hhbmdlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIjsKICAgZm9yIChhdXRvIGNvbnN0JiBwYWlyIDogTWFwXykgewotICAgIG9mcyA8PCBwYWlyLmZpcnN0IDw8IHN0ZDo6ZW5kbDsKKyAgICBvZnMgPDwgcGFpci5maXJzdCA8PCAnXG4nOwogICAgIEZpbGVUIGNvbnN0JiBmaWxlID0gKnBhaXIuc2Vjb25kOwogICAgIGlmICghZmlsZS5Nb2MuTWFjcm8uZW1wdHkoKSkgewotICAgICAgb2ZzIDw8ICIgbW1jOiIgPDwgZmlsZS5Nb2MuTWFjcm8gPDwgc3RkOjplbmRsOworICAgICAgb2ZzIDw8ICIgbW1jOiIgPDwgZmlsZS5Nb2MuTWFjcm8gPDwgJ1xuJzsKICAgICB9CiAgICAgZm9yIChJbmNsdWRlS2V5VCBjb25zdCYgaXRlbSA6IGZpbGUuTW9jLkluY2x1ZGUuVW5kZXJzY29yZSkgewotICAgICAgb2ZzIDw8ICIgbWl1OiIgPDwgaXRlbS5LZXkgPDwgc3RkOjplbmRsOworICAgICAgb2ZzIDw8ICIgbWl1OiIgPDwgaXRlbS5LZXkgPDwgJ1xuJzsKICAgICB9CiAgICAgZm9yIChJbmNsdWRlS2V5VCBjb25zdCYgaXRlbSA6IGZpbGUuTW9jLkluY2x1ZGUuRG90KSB7Ci0gICAgICBvZnMgPDwgIiBtaWQ6IiA8PCBpdGVtLktleSA8PCBzdGQ6OmVuZGw7CisgICAgICBvZnMgPDwgIiBtaWQ6IiA8PCBpdGVtLktleSA8PCAnXG4nOwogICAgIH0KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtIDogZmlsZS5Nb2MuRGVwZW5kcykgewotICAgICAgb2ZzIDw8ICIgbWRwOiIgPDwgaXRlbSA8PCBzdGQ6OmVuZGw7CisgICAgICBvZnMgPDwgIiBtZHA6IiA8PCBpdGVtIDw8ICdcbic7CiAgICAgfQogICAgIGZvciAoSW5jbHVkZUtleVQgY29uc3QmIGl0ZW0gOiBmaWxlLlVpYy5JbmNsdWRlKSB7Ci0gICAgICBvZnMgPDwgIiB1aWM6IiA8PCBpdGVtLktleSA8PCBzdGQ6OmVuZGw7CisgICAgICBvZnMgPDwgIiB1aWM6IiA8PCBpdGVtLktleSA8PCAnXG4nOwogICAgIH0KICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBpdGVtIDogZmlsZS5VaWMuRGVwZW5kcykgewotICAgICAgb2ZzIDw8ICIgdWRwOiIgPDwgaXRlbSA8PCBzdGQ6OmVuZGw7CisgICAgICBvZnMgPDwgIiB1ZHA6IiA8PCBpdGVtIDw8ICdcbic7CiAgICAgfQogICB9CiAgIHJldHVybiBvZnMuQ2xvc2UoKTsKQEAgLTgwOCw5ICs4MzEsOSBAQAogICAgICAgLy8gQ29tcG9zZSBjb21tYW5kCiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21kID0gTW9jQ29uc3QoKS5QcmVkZWZzQ21kOwogICAgICAgLy8gQWRkIGRlZmluaXRpb25zCi0gICAgICBjbUFwcGVuZChjbWQsIE1vY0NvbnN0KCkuT3B0aW9uc0RlZmluaXRpb25zKTsKKyAgICAgIGNtOjphcHBlbmQoY21kLCBNb2NDb25zdCgpLk9wdGlvbnNEZWZpbml0aW9ucyk7CiAgICAgICAvLyBBZGQgaW5jbHVkZXMKLSAgICAgIGNtQXBwZW5kKGNtZCwgTW9jQ29uc3QoKS5PcHRpb25zSW5jbHVkZXMpOworICAgICAgY206OmFwcGVuZChjbWQsIE1vY0NvbnN0KCkuT3B0aW9uc0luY2x1ZGVzKTsKICAgICAgIC8vIEV4ZWN1dGUgY29tbWFuZAogICAgICAgaWYgKCFSdW5Qcm9jZXNzKEdlblQ6Ok1PQywgcmVzdWx0LCBjbWQsIHJlYXNvbi5nZXQoKSkpIHsKICAgICAgICAgTG9nQ29tbWFuZEVycm9yKEdlblQ6Ok1PQywKQEAgLTk1MSw3ICs5NzQsNyBAQAogCiB2b2lkIGNtUXRBdXRvTW9jVWljVDo6Sm9iUGFyc2VUOjpNb2NEZXBlbmRlY2llcygpCiB7Ci0gIGlmIChNb2NDb25zdCgpLkRlcGVuZEZpbHRlcnMuZW1wdHkoKSkgeworICBpZiAoTW9jQ29uc3QoKS5EZXBlbmRGaWx0ZXJzLmVtcHR5KCkgfHwgTW9jQ29uc3QoKS5DYW5PdXRwdXREZXBlbmRlbmNpZXMpIHsKICAgICByZXR1cm47CiAgIH0KIApAQCAtMTY3NCw4ICsxNjk3LDEzIEBACiAgIGlmIChQcm9iZSgqbWFwcGluZywgcmVhc29uLmdldCgpKSkgewogICAgIC8vIFJlZ2lzdGVyIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBjcmVhdGlvbgogICAgIE1vY0V2YWwoKS5PdXRwdXREaXJzLmVtcGxhY2UoY21RdEF1dG9HZW46OlBhcmVudERpcihtYXBwaW5nLT5PdXRwdXRGaWxlKSk7CisgICAgLy8gRmV0Y2ggdGhlIGNhY2hlIGVudHJ5IGZvciB0aGUgc291cmNlIGZpbGUKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgc291cmNlRmlsZSA9IG1hcHBpbmctPlNvdXJjZUZpbGUtPkZpbGVOYW1lOworICAgIFBhcnNlQ2FjaGVUOjpHZXRPckluc2VydFQgY2FjaGVFbnRyeSA9CisgICAgICBCYXNlRXZhbCgpLlBhcnNlQ2FjaGUuR2V0T3JJbnNlcnQoc291cmNlRmlsZSk7CiAgICAgLy8gQWRkIG1vYyBqb2IKLSAgICBHZW4oKS0+V29ya2VyUG9vbCgpLkVtcGxhY2VKb2I8Sm9iQ29tcGlsZU1vY1Q+KG1hcHBpbmcsIHN0ZDo6bW92ZShyZWFzb24pKTsKKyAgICBHZW4oKS0+V29ya2VyUG9vbCgpLkVtcGxhY2VKb2I8Sm9iQ29tcGlsZU1vY1Q+KAorICAgICAgbWFwcGluZywgc3RkOjptb3ZlKHJlYXNvbiksIHN0ZDo6bW92ZShjYWNoZUVudHJ5LmZpcnN0KSk7CiAgICAgLy8gQ2hlY2sgaWYgYSBtb2Mgam9iIGZvciBhIG1vY3NfY29tcGlsYXRpb24uY3BwIGVudHJ5IHdhcyBnZW5lcmF0ZWQKICAgICBpZiAoY29tcEZpbGUpIHsKICAgICAgIE1vY0V2YWwoKS5Db21wVXBkYXRlZCA9IHRydWU7CkBAIC0xNzc5LDYgKzE4MDcsMTQgQEAKICAgc3RkOjpzdHJpbmcgY29uc3QmIHNvdXJjZURpciwgc3RkOjpzdHJpbmcgY29uc3QmIGluY2x1ZGVTdHJpbmcpIGNvbnN0CiB7CiAgIHVzaW5nIFJlc1BhaXIgPSBzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGNtRmlsZVRpbWU+OworICAvLyBtb2MncyBkZXBlbmRlbmN5IGZpbGUgY29udGFpbnMgYWJzb2x1dGUgcGF0aHMKKyAgaWYgKE1vY0NvbnN0KCkuQ2FuT3V0cHV0RGVwZW5kZW5jaWVzKSB7CisgICAgUmVzUGFpciByZXN7IGluY2x1ZGVTdHJpbmcsIHt9IH07CisgICAgaWYgKHJlcy5zZWNvbmQuTG9hZChyZXMuZmlyc3QpKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICByZXR1cm4ge307CisgIH0KICAgLy8gU2VhcmNoIGluIHZpY2luaXR5IG9mIHRoZSBzb3VyY2UKICAgewogICAgIFJlc1BhaXIgcmVzeyBzb3VyY2VEaXIgKyBpbmNsdWRlU3RyaW5nLCB7fSB9OwpAQCAtMTg5OCw2ICsxOTM0LDExIEBACiAgICAgR2VuKCktPldvcmtlclBvb2woKS5FbXBsYWNlSm9iPEpvYk1vY3NDb21waWxhdGlvblQ+KCk7CiAgIH0KIAorICBpZiAoIUJhc2VDb25zdCgpLkRlcEZpbGUuZW1wdHkoKSkgeworICAgIC8vIEFkZCBqb2IgdG8gbWVyZ2UgZGVwIGZpbGVzCisgICAgR2VuKCktPldvcmtlclBvb2woKS5FbXBsYWNlSm9iPEpvYkRlcEZpbGVzTWVyZ2VUPigpOworICB9CisKICAgLy8gQWRkIGZpbmlzaCBqb2IKICAgR2VuKCktPldvcmtlclBvb2woKS5FbXBsYWNlSm9iPEpvYkZpbmlzaFQ+KCk7CiB9CkBAIC0xOTE2LDkgKzE5NTcsOSBAQAogICAgICAgICAgICAgICAgIE1vY0NvbnN0KCkuT3B0aW9uc0V4dHJhLnNpemUoKSArIDE2KTsKICAgICBjbWQucHVzaF9iYWNrKE1vY0NvbnN0KCkuRXhlY3V0YWJsZSk7CiAgICAgLy8gQWRkIGRlZmluaXRpb25zCi0gICAgY21BcHBlbmQoY21kLCBNb2NDb25zdCgpLk9wdGlvbnNEZWZpbml0aW9ucyk7CisgICAgY206OmFwcGVuZChjbWQsIE1vY0NvbnN0KCkuT3B0aW9uc0RlZmluaXRpb25zKTsKICAgICAvLyBBZGQgaW5jbHVkZXMKLSAgICBjbUFwcGVuZChjbWQsIE1vY0NvbnN0KCkuT3B0aW9uc0luY2x1ZGVzKTsKKyAgICBjbTo6YXBwZW5kKGNtZCwgTW9jQ29uc3QoKS5PcHRpb25zSW5jbHVkZXMpOwogICAgIC8vIEFkZCBwcmVkZWZzIGluY2x1ZGUKICAgICBpZiAoIU1vY0NvbnN0KCkuUHJlZGVmc0ZpbGVBYnMuZW1wdHkoKSkgewogICAgICAgY21kLmVtcGxhY2VfYmFjaygiLS1pbmNsdWRlIik7CkBAIC0xOTQ2LDcgKzE5ODcsMTAgQEAKICAgICAgIH0KICAgICB9CiAgICAgLy8gQWRkIGV4dHJhIG9wdGlvbnMKLSAgICBjbUFwcGVuZChjbWQsIE1vY0NvbnN0KCkuT3B0aW9uc0V4dHJhKTsKKyAgICBjbTo6YXBwZW5kKGNtZCwgTW9jQ29uc3QoKS5PcHRpb25zRXh0cmEpOworICAgIGlmIChNb2NDb25zdCgpLkNhbk91dHB1dERlcGVuZGVuY2llcykgeworICAgICAgY21kLmVtcGxhY2VfYmFjaygiLS1vdXRwdXQtZGVwLWZpbGUiKTsKKyAgICB9CiAgICAgLy8gQWRkIG91dHB1dCBmaWxlCiAgICAgY21kLmVtcGxhY2VfYmFjaygiLW8iKTsKICAgICBjbWQucHVzaF9iYWNrKG91dHB1dEZpbGUpOwpAQCAtMTk1NiwxMiArMjAwMCw3IEBACiAKICAgLy8gRXhlY3V0ZSBtb2MgY29tbWFuZAogICBjbVdvcmtlclBvb2w6OlByb2Nlc3NSZXN1bHRUIHJlc3VsdDsKLSAgaWYgKFJ1blByb2Nlc3MoR2VuVDo6TU9DLCByZXN1bHQsIGNtZCwgUmVhc29uLmdldCgpKSkgewotICAgIC8vIE1vYyBjb21tYW5kIHN1Y2Nlc3MuIFByaW50IG1vYyBvdXRwdXQuCi0gICAgaWYgKCFyZXN1bHQuU3RkT3V0LmVtcHR5KCkpIHsKLSAgICAgIExvZygpLkluZm8oR2VuVDo6TU9DLCByZXN1bHQuU3RkT3V0KTsKLSAgICB9Ci0gIH0gZWxzZSB7CisgIGlmICghUnVuUHJvY2VzcyhHZW5UOjpNT0MsIHJlc3VsdCwgY21kLCBSZWFzb24uZ2V0KCkpKSB7CiAgICAgLy8gTW9jIGNvbW1hbmQgZmFpbGVkCiAgICAgc3RkOjpzdHJpbmcgaW5jbHVkZXJzOwogICAgIGlmICghTWFwcGluZy0+SW5jbHVkZXJGaWxlcy5lbXB0eSgpKSB7CkBAIC0xOTc2LDYgKzIwMTUsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBhdGgob3V0cHV0RmlsZSksICdcbicsIGluY2x1ZGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LkVycm9yTWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgIGNtZCwgcmVzdWx0LlN0ZE91dCk7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gTW9jIGNvbW1hbmQgc3VjY2Vzcy4gUHJpbnQgbW9jIG91dHB1dC4KKyAgaWYgKCFyZXN1bHQuU3RkT3V0LmVtcHR5KCkpIHsKKyAgICBMb2coKS5JbmZvKEdlblQ6Ok1PQywgcmVzdWx0LlN0ZE91dCk7CisgIH0KKworICAvLyBFeHRyYWN0IGRlcGVuZGVuY2llcyBmcm9tIHRoZSBkZXAgZmlsZSBtb2MgZ2VuZXJhdGVkIGZvciB1cworICBpZiAoTW9jQ29uc3QoKS5DYW5PdXRwdXREZXBlbmRlbmNpZXMpIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBkZXBmaWxlID0gb3V0cHV0RmlsZSArICIuZCI7CisgICAgaWYgKExvZygpLlZlcmJvc2UoKSkgeworICAgICAgTG9nKCkuSW5mbyhHZW5UOjpNT0MsCisgICAgICAgICAgICAgICAgICJSZWFkaW5nIGRlcGVuZGVuY2llcyBmcm9tICIgKyBNZXNzYWdlUGF0aChkZXBmaWxlKSk7CisgICAgfQorICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhkZXBmaWxlKSkgeworICAgICAgTG9nKCkuV2FybmluZyhHZW5UOjpNT0MsCisgICAgICAgICAgICAgICAgICAgICJEZXBlbmRlbmN5IGZpbGUgIiArIE1lc3NhZ2VQYXRoKGRlcGZpbGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAiIGRvZXMgbm90IGV4aXN0LiIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDYWNoZUVudHJ5LT5Nb2MuRGVwZW5kcyA9IGRlcGVuZGVuY2llc0Zyb21EZXBGaWxlKGRlcGZpbGUuY19zdHIoKSk7CiAgIH0KIH0KIApAQCAtMTk5Miw5ICsyMDUzLDkgQEAKICAgICBhdXRvIG9wdGlvbkl0ID0gVWljQ29uc3QoKS5VaUZpbGVzLmZpbmQoc291cmNlRmlsZSk7CiAgICAgaWYgKG9wdGlvbkl0ICE9IFVpY0NvbnN0KCkuVWlGaWxlcy5lbmQoKSkgewogICAgICAgVWljTWVyZ2VPcHRpb25zKGFsbE9wdHMsIG9wdGlvbkl0LT5zZWNvbmQuT3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAoQmFzZUNvbnN0KCkuUXRWZXJzaW9uTWFqb3IgPT0gNSkpOworICAgICAgICAgICAgICAgICAgICAgIChCYXNlQ29uc3QoKS5RdFZlcnNpb24uTWFqb3IgPT0gNSkpOwogICAgIH0KLSAgICBjbUFwcGVuZChjbWQsIGFsbE9wdHMpOworICAgIGNtOjphcHBlbmQoY21kLCBhbGxPcHRzKTsKICAgfQogICBjbWQuZW1wbGFjZV9iYWNrKCItbyIpOwogICBjbWQuZW1wbGFjZV9iYWNrKG91dHB1dEZpbGUpOwpAQCAtMjA2Nyw2ICsyMTI4LDEwNyBAQAogICB9CiB9CiAKKy8qCisgKiBFc2NhcGVzIHBhdGhzIGZvciBOaW5qYSBkZXBmaWxlcy4KKyAqIFRoaXMgaXMgYSByZS1pbXBsZW1lbnRhdGlvbiBvZiB3aGF0IG1vYyBkb2VzIHdoZW4gd3JpdGluZyBkZXBmaWxlcy4KKyAqLworc3RkOjpzdHJpbmcgZXNjYXBlRGVwZW5kZW5jeVBhdGgoY206OnN0cmluZ192aWV3IHBhdGgpCit7CisgIHN0ZDo6c3RyaW5nIGVzY2FwZWRQYXRoOworICBlc2NhcGVkUGF0aC5yZXNlcnZlKHBhdGguc2l6ZSgpKTsKKyAgY29uc3Qgc2l6ZV90IHMgPSBwYXRoLnNpemUoKTsKKyAgaW50IGJhY2tzbGFzaENvdW50ID0gMDsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzOyArK2kpIHsKKyAgICBpZiAocGF0aFtpXSA9PSAnXFwnKSB7CisgICAgICArK2JhY2tzbGFzaENvdW50OworICAgIH0gZWxzZSB7CisgICAgICBpZiAocGF0aFtpXSA9PSAnJCcpIHsKKyAgICAgICAgZXNjYXBlZFBhdGgucHVzaF9iYWNrKCckJyk7CisgICAgICB9IGVsc2UgaWYgKHBhdGhbaV0gPT0gJyMnKSB7CisgICAgICAgIGVzY2FwZWRQYXRoLnB1c2hfYmFjaygnXFwnKTsKKyAgICAgIH0gZWxzZSBpZiAocGF0aFtpXSA9PSAnICcpIHsKKyAgICAgICAgLy8gRG91YmxlIHRoZSBhbW91bnQgb2Ygd3JpdHRlbiBiYWNrc2xhc2hlcywKKyAgICAgICAgLy8gYW5kIGFkZCBvbmUgbW9yZSB0byBlc2NhcGUgdGhlIHNwYWNlLgorICAgICAgICB3aGlsZSAoYmFja3NsYXNoQ291bnQtLSA+PSAwKSB7CisgICAgICAgICAgZXNjYXBlZFBhdGgucHVzaF9iYWNrKCdcXCcpOworICAgICAgICB9CisgICAgICB9CisgICAgICBiYWNrc2xhc2hDb3VudCA9IDA7CisgICAgfQorICAgIGVzY2FwZWRQYXRoLnB1c2hfYmFjayhwYXRoW2ldKTsKKyAgfQorICByZXR1cm4gZXNjYXBlZFBhdGg7Cit9CisKK3ZvaWQgY21RdEF1dG9Nb2NVaWNUOjpKb2JEZXBGaWxlc01lcmdlVDo6UHJvY2VzcygpCit7CisgIGlmIChMb2coKS5WZXJib3NlKCkpIHsKKyAgICBMb2coKS5JbmZvKEdlblQ6Ok1PQywKKyAgICAgICAgICAgICAgIGNtU3RyQ2F0KCJNZXJnaW5nIE1PQyBkZXBlbmRlbmNpZXMgaW50byAiLAorICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBhdGgoQmFzZUNvbnN0KCkuRGVwRmlsZS5jX3N0cigpKSkpOworICB9CisgIGF1dG8gcHJvY2Vzc0RlcEZpbGUgPQorICAgIFtdKGNvbnN0IHN0ZDo6c3RyaW5nJiBtb2NPdXRwdXRGaWxlKSAtPiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4geworICAgIHN0ZDo6c3RyaW5nIGYgPSBtb2NPdXRwdXRGaWxlICsgIi5kIjsKKyAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZikpIHsKKyAgICAgIHJldHVybiB7fTsKKyAgICB9CisgICAgcmV0dXJuIGRlcGVuZGVuY2llc0Zyb21EZXBGaWxlKGYuY19zdHIoKSk7CisgIH07CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGRlcGVuZGVuY2llczsKKyAgUGFyc2VDYWNoZVQmIHBhcnNlQ2FjaGUgPSBCYXNlRXZhbCgpLlBhcnNlQ2FjaGU7CisgIGF1dG8gcHJvY2Vzc01hcHBpbmdFbnRyeSA9IFsmXShjb25zdCBNYXBwaW5nTWFwVDo6dmFsdWVfdHlwZSYgbSkgeworICAgIGF1dG8gY2FjaGVFbnRyeSA9IHBhcnNlQ2FjaGUuR2V0T3JJbnNlcnQobS5maXJzdCk7CisgICAgaWYgKGNhY2hlRW50cnkuZmlyc3QtPk1vYy5EZXBlbmRzLmVtcHR5KCkpIHsKKyAgICAgIGNhY2hlRW50cnkuZmlyc3QtPk1vYy5EZXBlbmRzID0gcHJvY2Vzc0RlcEZpbGUobS5zZWNvbmQtPk91dHB1dEZpbGUpOworICAgIH0KKyAgICBkZXBlbmRlbmNpZXMuaW5zZXJ0KGRlcGVuZGVuY2llcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnkuZmlyc3QtPk1vYy5EZXBlbmRzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5LmZpcnN0LT5Nb2MuRGVwZW5kcy5lbmQoKSk7CisgIH07CisKKyAgc3RkOjpmb3JfZWFjaChNb2NFdmFsKCkuSGVhZGVyTWFwcGluZ3MuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICBNb2NFdmFsKCkuSGVhZGVyTWFwcGluZ3MuZW5kKCksIHByb2Nlc3NNYXBwaW5nRW50cnkpOworICBzdGQ6OmZvcl9lYWNoKE1vY0V2YWwoKS5Tb3VyY2VNYXBwaW5ncy5iZWdpbigpLAorICAgICAgICAgICAgICAgIE1vY0V2YWwoKS5Tb3VyY2VNYXBwaW5ncy5lbmQoKSwgcHJvY2Vzc01hcHBpbmdFbnRyeSk7CisKKyAgLy8gUmVtb3ZlIGR1cGxpY2F0ZXMgdG8gbWFrZSB0aGUgZGVwZmlsZSBzbWFsbGVyCisgIHN0ZDo6c29ydChkZXBlbmRlbmNpZXMuYmVnaW4oKSwgZGVwZW5kZW5jaWVzLmVuZCgpKTsKKyAgZGVwZW5kZW5jaWVzLmVyYXNlKHN0ZDo6dW5pcXVlKGRlcGVuZGVuY2llcy5iZWdpbigpLCBkZXBlbmRlbmNpZXMuZW5kKCkpLAorICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmVuZCgpKTsKKworICAvLyBBZGQgZm9ybSBmaWxlcworICBmb3IgKGNvbnN0IGF1dG8mIHVpZiA6IFVpY0V2YWwoKS5VaUZpbGVzKSB7CisgICAgZGVwZW5kZW5jaWVzLnB1c2hfYmFjayh1aWYuZmlyc3QpOworICB9CisKKyAgLy8gV3JpdGUgdGhlIGZpbGUKKyAgY21zeXM6Om9mc3RyZWFtIG9mczsKKyAgb2ZzLm9wZW4oQmFzZUNvbnN0KCkuRGVwRmlsZS5jX3N0cigpLAorICAgICAgICAgICAoc3RkOjppb3M6Om91dCB8IHN0ZDo6aW9zOjpiaW5hcnkgfCBzdGQ6Omlvczo6dHJ1bmMpKTsKKyAgaWYgKCFvZnMpIHsKKyAgICBMb2dFcnJvcihHZW5UOjpHRU4sCisgICAgICAgICAgICAgY21TdHJDYXQoIkNhbm5vdCBvcGVuICIsIE1lc3NhZ2VQYXRoKEJhc2VDb25zdCgpLkRlcEZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICIgZm9yIHdyaXRpbmcuIikpOworICAgIHJldHVybjsKKyAgfQorICBvZnMgPDwgQmFzZUNvbnN0KCkuRGVwRmlsZVJ1bGVOYW1lIDw8ICI6IFxcXG4iOworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlIDogZGVwZW5kZW5jaWVzKSB7CisgICAgb2ZzIDw8ICdcdCcgPDwgZXNjYXBlRGVwZW5kZW5jeVBhdGgoZmlsZSkgPDwgIiBcXFxuIjsKKyAgICBpZiAoIW9mcy5nb29kKCkpIHsKKyAgICAgIExvZ0Vycm9yKEdlblQ6OkdFTiwKKyAgICAgICAgICAgICAgIGNtU3RyQ2F0KCJXcml0aW5nIGRlcGZpbGUiLCBNZXNzYWdlUGF0aChCYXNlQ29uc3QoKS5EZXBGaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgZmFpbGVkLiIpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICAvLyBBZGQgdGhlIENNYWtlIGV4ZWN1dGFibGUgdG8gcmUtbmV3IGNhY2hlIGRhdGEgaWYgbmVjZXNzYXJ5LgorICAvLyBBbHNvLCB0aGlzIGlzIHRoZSBsYXN0IGVudHJ5LCBzbyBkb24ndCBhZGQgYSBiYWNrc2xhc2guCisgIG9mcyA8PCAnXHQnIDw8IGVzY2FwZURlcGVuZGVuY3lQYXRoKEJhc2VDb25zdCgpLkNNYWtlRXhlY3V0YWJsZSkgPDwgJ1xuJzsKK30KKwogdm9pZCBjbVF0QXV0b01vY1VpY1Q6OkpvYkZpbmlzaFQ6OlByb2Nlc3MoKQogewogICBHZW4oKS0+QWJvcnRTdWNjZXNzKCk7CkBAIC0yMDgyLDcgKzIyNDQsOCBAQAogewogICAvLyAtLSBSZXF1aXJlZCBzZXR0aW5ncwogICBpZiAoIWluZm8uR2V0Qm9vbCgiTVVMVElfQ09ORklHIiwgQmFzZUNvbnN0Xy5NdWx0aUNvbmZpZywgdHJ1ZSkgfHwKLSAgICAgICFpbmZvLkdldFVJbnQoIlFUX1ZFUlNJT05fTUFKT1IiLCBCYXNlQ29uc3RfLlF0VmVyc2lvbk1ham9yLCB0cnVlKSB8fAorICAgICAgIWluZm8uR2V0VUludCgiUVRfVkVSU0lPTl9NQUpPUiIsIEJhc2VDb25zdF8uUXRWZXJzaW9uLk1ham9yLCB0cnVlKSB8fAorICAgICAgIWluZm8uR2V0VUludCgiUVRfVkVSU0lPTl9NSU5PUiIsIEJhc2VDb25zdF8uUXRWZXJzaW9uLk1pbm9yLCB0cnVlKSB8fAogICAgICAgIWluZm8uR2V0VUludCgiUEFSQUxMRUwiLCBCYXNlQ29uc3RfLlRocmVhZENvdW50LCBmYWxzZSkgfHwKICAgICAgICFpbmZvLkdldFN0cmluZygiQlVJTERfRElSIiwgQmFzZUNvbnN0Xy5BdXRvZ2VuQnVpbGREaXIsIHRydWUpIHx8CiAgICAgICAhaW5mby5HZXRTdHJpbmdDb25maWcoIklOQ0xVREVfRElSIiwgQmFzZUNvbnN0Xy5BdXRvZ2VuSW5jbHVkZURpciwKQEAgLTIwOTAsNiArMjI1Myw5IEBACiAgICAgICAhaW5mby5HZXRTdHJpbmcoIkNNQUtFX0VYRUNVVEFCTEUiLCBCYXNlQ29uc3RfLkNNYWtlRXhlY3V0YWJsZSwgdHJ1ZSkgfHwKICAgICAgICFpbmZvLkdldFN0cmluZ0NvbmZpZygiUEFSU0VfQ0FDSEVfRklMRSIsIEJhc2VDb25zdF8uUGFyc2VDYWNoZUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSkgfHwKKyAgICAgICFpbmZvLkdldFN0cmluZygiREVQX0ZJTEUiLCBCYXNlQ29uc3RfLkRlcEZpbGUsIGZhbHNlKSB8fAorICAgICAgIWluZm8uR2V0U3RyaW5nKCJERVBfRklMRV9SVUxFX05BTUUiLCBCYXNlQ29uc3RfLkRlcEZpbGVSdWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBmYWxzZSkgfHwKICAgICAgICFpbmZvLkdldFN0cmluZ0NvbmZpZygiU0VUVElOR1NfRklMRSIsIFNldHRpbmdzRmlsZV8sIHRydWUpIHx8CiAgICAgICAhaW5mby5HZXRBcnJheSgiSEVBREVSX0VYVEVOU0lPTlMiLCBCYXNlQ29uc3RfLkhlYWRlckV4dGVuc2lvbnMsIHRydWUpIHx8CiAgICAgICAhaW5mby5HZXRTdHJpbmcoIlFUX01PQ19FWEVDVVRBQkxFIiwgTW9jQ29uc3RfLkV4ZWN1dGFibGUsIGZhbHNlKSB8fApAQCAtMjE0Myw4ICsyMzA5LDEwIEBACiAgICAgICBNb2NDb25zdF8uTWFjcm9GaWx0ZXJzLmVtcGxhY2VfYmFjaygKICAgICAgICAgaXRlbSwgKCJbXG5dWyBcdF0qez9bIFx0XSoiICsgaXRlbSkuYXBwZW5kKCJbXmEtekEtWjAtOV9dIikpOwogICAgIH0KLSAgICAvLyBEZXBlbmRlbmN5IGZpbHRlcnMKLSAgICB7CisgICAgLy8gQ2FuIG1vYyBvdXRwdXQgZGVwZW5kZW5jaWVzIG9yIGRvIHdlIG5lZWQgdG8gc2V0dXAgZGVwZW5kZW5jeSBmaWx0ZXJzPworICAgIGlmIChCYXNlQ29uc3RfLlF0VmVyc2lvbiA+PSBJbnRlZ2VyVmVyc2lvbig1LCAxNSkpIHsKKyAgICAgIE1vY0NvbnN0Xy5DYW5PdXRwdXREZXBlbmRlbmNpZXMgPSB0cnVlOworICAgIH0gZWxzZSB7CiAgICAgICBKc29uOjpWYWx1ZSBjb25zdCYgdmFsID0gaW5mby5HZXRWYWx1ZSgiTU9DX0RFUEVORF9GSUxURVJTIik7CiAgICAgICBpZiAoIXZhbC5pc0FycmF5KCkpIHsKICAgICAgICAgcmV0dXJuIGluZm8uTG9nRXJyb3IoIk1PQ19ERVBFTkRfRklMVEVSUyBKU09OIHZhbHVlIGlzIG5vdCBhbiBhcnJheS4iKTsKQEAgLTI2NjAsNiArMjgyOCwxOSBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtUXRBdXRvTW9jVWljVDo6ZGVwZW5kZW5jaWVzRnJvbURlcEZpbGUoCisgIGNvbnN0IGNoYXIqIGZpbGVQYXRoKQoreworICBjbUdjY0RlcGZpbGVDb250ZW50IGNvbnRlbnQgPSBjbVJlYWRHY2NEZXBmaWxlKGZpbGVQYXRoKTsKKyAgaWYgKGNvbnRlbnQuZW1wdHkoKSkgeworICAgIHJldHVybiB7fTsKKyAgfQorCisgIC8vIE1vYyBvdXRwdXRzIGEgZGVwZmlsZSB3aXRoIGV4YWN0bHkgb25lIHJ1bGUuCisgIC8vIERpc2NhcmQgdGhlIHJ1bGUgYW5kIHJldHVybiB0aGUgZGVwZW5kZW5jaWVzLgorICByZXR1cm4gY29udGVudC5mcm9udCgpLnBhdGhzOworfQorCiB2b2lkIGNtUXRBdXRvTW9jVWljVDo6QWJvcnQoYm9vbCBlcnJvcikKIHsKICAgaWYgKGVycm9yKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21RdEF1dG9SY2MuY3h4IGIvU291cmNlL2NtUXRBdXRvUmNjLmN4eAppbmRleCAzYWY4MWFkLi4wOGViNGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21RdEF1dG9SY2MuY3h4CisrKyBiL1NvdXJjZS9jbVF0QXV0b1JjYy5jeHgKQEAgLTYsNyArNiw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtQ3J5cHRvSGFzaC5oIgogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbUZpbGVMb2NrLmgiCkBAIC00MDUsNyArNDA2LDcgQEAKICAgLy8gQ29tcG9zZSByY2MgY29tbWFuZAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21kOwogICBjbWQucHVzaF9iYWNrKFJjY0V4ZWN1dGFibGVfKTsKLSAgY21BcHBlbmQoY21kLCBPcHRpb25zXyk7CisgIGNtOjphcHBlbmQoY21kLCBPcHRpb25zXyk7CiAgIGNtZC5lbXBsYWNlX2JhY2soIi1vIik7CiAgIGNtZC5wdXNoX2JhY2soUmNjRmlsZU91dHB1dF8pOwogICBjbWQucHVzaF9iYWNrKFFyY0ZpbGVfKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVJTVC5jeHggYi9Tb3VyY2UvY21SU1QuY3h4CmluZGV4IDdmNGFiZjkuLjI2ZTkzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVJTVC5jeHgKKysrIGIvU291cmNlL2NtUlNULmN4eApAQCAtODksNyArODksOCBAQAogICAgICAgICB0aGlzLT5Qcm9jZXNzTGluZShsaW5lKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChsaW5lWzBdICE9ICcjJykgewotICAgICAgICAgIHRoaXMtPlByb2Nlc3NMaW5lKGxpbmUuc3Vic3RyKDAsIHBvcykpOworICAgICAgICAgIGxpbmUucmVzaXplKHBvcyk7CisgICAgICAgICAgdGhpcy0+UHJvY2Vzc0xpbmUobGluZSk7CiAgICAgICAgIH0KICAgICAgICAgcnN0LmNsZWFyKCk7CiAgICAgICAgIHRoaXMtPlJlc2V0KCk7CkBAIC0xMDIsOCArMTAzLDkgQEAKICAgICAgICAgICB0aGlzLT5Qcm9jZXNzTGluZSgiIik7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGxpbmUuc3Vic3RyKDAsIDIpID09ICIjICIpIHsKLSAgICAgICAgICB0aGlzLT5Qcm9jZXNzTGluZShsaW5lLnN1YnN0cigyKSk7CisgICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgobGluZSwgIiMgIikpIHsKKyAgICAgICAgICBsaW5lLmVyYXNlKDAsIDIpOworICAgICAgICAgIHRoaXMtPlByb2Nlc3NMaW5lKGxpbmUpOwogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHJzdC5jbGVhcigpOwpAQCAtMTY0LDYgKzE2Niw4IEBACiAgICAgdGhpcy0+TWFya3VwID0KICAgICAgIChsaW5lLmZpbmRfZmlyc3Rfbm90X29mKCIgXHQiLCAyKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IE1hcmt1cEVtcHR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNYXJrdXBOb3JtYWwpOworICAgIC8vIFhYWChjbGFuZy10aWR5KTogaHR0cHM6Ly9idWdzLmxsdm0ub3JnL3Nob3dfYnVnLmNnaT9pZD00NDE2NQorICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKICAgICBpZiAodGhpcy0+Q01ha2VEaXJlY3RpdmUuZmluZChsaW5lKSkgewogICAgICAgLy8gT3V0cHV0IGNtYWtlIGRvbWFpbiBkaXJlY3RpdmVzIGFuZCB0aGVpciBjb250ZW50IG5vcm1hbGx5LgogICAgICAgdGhpcy0+Tm9ybWFsTGluZShsaW5lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmN4eCBiL1NvdXJjZS9jbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmN4eAppbmRleCAwYTFkMTA5Li40ZmY4MWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlci5jeHgKKysrIGIvU291cmNlL2NtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuY3h4CkBAIC04NSw2ICs4NSwxMSBAQAogICAgICAgcmV0dXJuIHJlcGxhY2VWYWx1ZXMuT2JqZWN0c1F1b3RlZDsKICAgICB9CiAgIH0KKyAgaWYgKHJlcGxhY2VWYWx1ZXMuQUlYRXhwb3J0cykgeworICAgIGlmICh2YXJpYWJsZSA9PSAiQUlYX0VYUE9SVFMiKSB7CisgICAgICByZXR1cm4gcmVwbGFjZVZhbHVlcy5BSVhFeHBvcnRzOworICAgIH0KKyAgfQogICBpZiAocmVwbGFjZVZhbHVlcy5EZWZpbmVzICYmIHZhcmlhYmxlID09ICJERUZJTkVTIikgewogICAgIHJldHVybiByZXBsYWNlVmFsdWVzLkRlZmluZXM7CiAgIH0KQEAgLTIzMSw4ICsyMzYsNyBAQAogICB9CiAgIGlmICh2YXJpYWJsZSA9PSAiQ01BS0VfQ09NTUFORCIpIHsKICAgICByZXR1cm4gb3V0cHV0Q29udmVydGVyLT5Db252ZXJ0VG9PdXRwdXRGb3JtYXQoCi0gICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNtU3lzdGVtVG9vbHM6OkdldENNYWtlQ29tbWFuZCgpKSwKLSAgICAgIGNtT3V0cHV0Q29udmVydGVyOjpTSEVMTCk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDTWFrZUNvbW1hbmQoKSwgY21PdXRwdXRDb252ZXJ0ZXI6OlNIRUxMKTsKICAgfQogCiAgIGF1dG8gY29tcEl0ID0gdGhpcy0+Q29tcGlsZXJzLmZpbmQodmFyaWFibGUpOwpAQCAtMjU3LDcgKzI2MSw3IEBACiAgICAgICB0aGlzLT5WYXJpYWJsZU1hcHBpbmdzWyJDTUFLRV8iICsgY29tcEl0LT5zZWNvbmQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX0NPTVBJTEVfT1BUSU9OU19TWVNST09UIl07CiAKLSAgICAvLyBpZiB0aGVyZSBpcyBhIHJlcXVpcmVkIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjb21waWxlciBhZGQgaXQKKyAgICAvLyBpZiB0aGVyZSBhcmUgcmVxdWlyZWQgYXJndW1lbnRzIHRvIHRoZSBjb21waWxlciBhZGQgaXQKICAgICAvLyB0byB0aGUgY29tcGlsZXIgc3RyaW5nCiAgICAgaWYgKCFjb21waWxlckFyZzEuZW1wdHkoKSkgewogICAgICAgcmV0ICs9ICIgIjsKQEAgLTMyOSw3ICszMzMsMTcgQEAKICAgICAgIHN0ZDo6c3RyaW5nIHJlcGxhY2UgPQogICAgICAgICB0aGlzLT5FeHBhbmRSdWxlVmFyaWFibGUob3V0cHV0Q29udmVydGVyLCB2YXIsIHJlcGxhY2VWYWx1ZXMpOwogICAgICAgZXhwYW5kZWRJbnB1dCArPSBzLnN1YnN0cihwb3MsIHN0YXJ0IC0gcG9zKTsKKworICAgICAgLy8gUHJldmVudCBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGluIHRoZSBvdXRwdXQgaWYgdGhlIHJ1bGUgdmFyaWFibGUKKyAgICAgIC8vIGV4cGFuZHMgdG8gYW4gZW1wdHkgc3RyaW5nLgorICAgICAgYm9vbCBjb25zZWN1dGl2ZSA9IHJlcGxhY2UuZW1wdHkoKSAmJiBzdGFydCA+IDAgJiYgc1tzdGFydCAtIDFdID09ICcgJyAmJgorICAgICAgICBlbmQgKyAxIDwgcy5zaXplKCkgJiYgc1tlbmQgKyAxXSA9PSAnICc7CisgICAgICBpZiAoY29uc2VjdXRpdmUpIHsKKyAgICAgICAgZXhwYW5kZWRJbnB1dC5wb3BfYmFjaygpOworICAgICAgfQorCiAgICAgICBleHBhbmRlZElucHV0ICs9IHJlcGxhY2U7CisKICAgICAgIC8vIG1vdmUgdG8gbmV4dCBvbmUKICAgICAgIHN0YXJ0ID0gcy5maW5kKCc8Jywgc3RhcnQgKyB2YXIuc2l6ZSgpICsgMik7CiAgICAgICBwb3MgPSBlbmQgKyAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuaCBiL1NvdXJjZS9jbVJ1bGVQbGFjZWhvbGRlckV4cGFuZGVyLmgKaW5kZXggOGYzNjE5Ni4uMDllOGEzYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIuaAorKysgYi9Tb3VyY2UvY21SdWxlUGxhY2Vob2xkZXJFeHBhbmRlci5oCkBAIC0zNiw2ICszNiw3IEBACiAgICAgY29uc3QgY2hhciogVGFyZ2V0VmVyc2lvbk1ham9yOwogICAgIGNvbnN0IGNoYXIqIFRhcmdldFZlcnNpb25NaW5vcjsKICAgICBjb25zdCBjaGFyKiBMYW5ndWFnZTsKKyAgICBjb25zdCBjaGFyKiBBSVhFeHBvcnRzOwogICAgIGNvbnN0IGNoYXIqIE9iamVjdHM7CiAgICAgY29uc3QgY2hhciogVGFyZ2V0OwogICAgIGNvbnN0IGNoYXIqIExpbmtMaWJyYXJpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21SdW50aW1lRGVwZW5kZW5jeUFyY2hpdmUuY3h4IGIvU291cmNlL2NtUnVudGltZURlcGVuZGVuY3lBcmNoaXZlLmN4eAppbmRleCA3YTk4N2MyLi4wNzgxZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21SdW50aW1lRGVwZW5kZW5jeUFyY2hpdmUuY3h4CisrKyBiL1NvdXJjZS9jbVJ1bnRpbWVEZXBlbmRlbmN5QXJjaGl2ZS5jeHgKQEAgLTM5LDcgKzM5LDcgQEAKICAgc3RkOjpzdHJpbmcgdnNsb2M7CiAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICMgIGlmbmRlZiBDTUFLRV9CT09UU1RSQVAKLSAgaWYgKGdnLT5HZXROYW1lKCkuZmluZChwcmVmaXgpID09IDApIHsKKyAgaWYgKGNtSGFzUHJlZml4KGdnLT5HZXROYW1lKCksIHByZWZpeCkpIHsKICAgICBjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvciogdnNnZW4gPQogICAgICAgc3RhdGljX2Nhc3Q8Y21HbG9iYWxWaXN1YWxTdHVkaW9WZXJzaW9uZWRHZW5lcmF0b3IqPihnZyk7CiAgICAgaWYgKHZzZ2VuLT5HZXRWU0luc3RhbmNlKHZzbG9jKSkgewpAQCAtMjE4LDYgKzIxOCw5IEBACiAgIC8vIEZpcnN0IHNlZSBpZiBpdCB3YXMgc3VwcGxpZWQgYnkgdGhlIHVzZXIKICAgc3RkOjpzdHJpbmcgdG9vbENvbW1hbmQgPSB0aGlzLT5HZXRNYWtlZmlsZSgpLT5HZXRTYWZlRGVmaW5pdGlvbigKICAgICAiQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX0NPTU1BTkQiKTsKKyAgaWYgKHRvb2xDb21tYW5kLmVtcHR5KCkgJiYgc2VhcmNoID09ICJvYmpkdW1wIikgeworICAgIHRvb2xDb21tYW5kID0gdGhpcy0+R2V0TWFrZWZpbGUoKS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFX09CSkRVTVAiKTsKKyAgfQogICBpZiAoIXRvb2xDb21tYW5kLmVtcHR5KCkpIHsKICAgICBjbUV4cGFuZExpc3QodG9vbENvbW1hbmQsIGNvbW1hbmQpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2NyaXB0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21TY3JpcHRHZW5lcmF0b3IuaAppbmRleCBjOGJiMWFiLi43ZDY3NmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TY3JpcHRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvY21TY3JpcHRHZW5lcmF0b3IuaApAQCAtNzEsNyArNzEsNyBAQAogCiAgIHN0ZDo6c3RyaW5nIENyZWF0ZUNvbmZpZ1Rlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyk7CiAgIHN0ZDo6c3RyaW5nIENyZWF0ZUNvbmZpZ1Rlc3Qoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBjb25maWdzKTsKLSAgc3RkOjpzdHJpbmcgQ3JlYXRlQ29tcG9uZW50VGVzdChjb25zdCBjaGFyKiBjb21wb25lbnQpOworICBzdGQ6OnN0cmluZyBDcmVhdGVDb21wb25lbnRUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBjb21wb25lbnQpOwogCiAgIC8vIEluZm9ybWF0aW9uIHNoYXJlZCBieSBtb3N0IGdlbmVyYXRvciB0eXBlcy4KICAgc3RkOjpzdHJpbmcgUnVudGltZUNvbmZpZ1ZhcmlhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2VhcmNoUGF0aC5jeHggYi9Tb3VyY2UvY21TZWFyY2hQYXRoLmN4eAppbmRleCBkMTVjZTU3Li5lYjhmY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZWFyY2hQYXRoLmN4eAorKysgYi9Tb3VyY2UvY21TZWFyY2hQYXRoLmN4eApAQCAtMTgwLDggKzE4MCwxNCBAQAogICAgIGlmIChzdWJkaXIgPT0gImluY2x1ZGUiIHx8IHN1YmRpciA9PSAibGliIikgewogICAgICAgY29uc3QgY2hhciogYXJjaCA9CiAgICAgICAgIHRoaXMtPkZDLT5NYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigiQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUiKTsKLSAgICAgIGlmIChhcmNoICYmICphcmNoKSB7Ci0gICAgICAgIHRoaXMtPkFkZFBhdGhJbnRlcm5hbChkaXIgKyBzdWJkaXIgKyAiLyIgKyBhcmNoLCBiYXNlKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGFyY2gpKSB7CisgICAgICAgIGlmICh0aGlzLT5GQy0+TWFrZWZpbGUtPklzRGVmaW5pdGlvblNldCgiQ01BS0VfU1lTUk9PVCIpICYmCisgICAgICAgICAgICB0aGlzLT5GQy0+TWFrZWZpbGUtPklzRGVmaW5pdGlvblNldCgKKyAgICAgICAgICAgICAgIkNNQUtFX1BSRUZJWF9MSUJSQVJZX0FSQ0hJVEVDVFVSRSIpKSB7CisgICAgICAgICAgdGhpcy0+QWRkUGF0aEludGVybmFsKGNtU3RyQ2F0KCcvJywgYXJjaCwgZGlyLCBzdWJkaXIpLCBiYXNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLT5BZGRQYXRoSW50ZXJuYWwoY21TdHJDYXQoZGlyLCBzdWJkaXIsICcvJywgYXJjaCksIGJhc2UpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICAgIHN0ZDo6c3RyaW5nIGFkZCA9IGRpciArIHN1YmRpcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNlYXJjaFBhdGguaCBiL1NvdXJjZS9jbVNlYXJjaFBhdGguaAppbmRleCAyYTU3NmVkLi4zZWNjNzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZWFyY2hQYXRoLmgKKysrIGIvU291cmNlL2NtU2VhcmNoUGF0aC5oCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAorI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CkBAIC0yNyw2ICsyOCw3IEBACiAgIH5jbVNlYXJjaFBhdGgoKTsKIAogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIEdldFBhdGhzKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+UGF0aHM7IH0KKyAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlBhdGhzLnNpemUoKTsgfQogCiAgIHZvaWQgRXh0cmFjdFdpdGhvdXQoY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBpZ25vcmUsCiAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvdXRQYXRocywKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNlcGFyYXRlQXJndW1lbnRzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21TZXBhcmF0ZUFyZ3VtZW50c0NvbW1hbmQuY3h4CmluZGV4IDUyYmRlN2MuLmNmZTMwODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNlcGFyYXRlQXJndW1lbnRzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtU2VwYXJhdGVBcmd1bWVudHNDb21tYW5kLmN4eApAQCAtMzksNiArMzksOCBAQAogICAgIGlmIChkb2luZyA9PSBEb2luZ1ZhcmlhYmxlKSB7CiAgICAgICB2YXIgPSBhcmc7CiAgICAgICBkb2luZyA9IERvaW5nTW9kZTsKKyAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgY2xvbmUgb25lIG9mIHRoZSBvdGhlciBibG9ja3MuCisgICAgICAvLyBOT0xJTlRORVhUTElORShidWdwcm9uZS1icmFuY2gtY2xvbmUpCiAgICAgfSBlbHNlIGlmIChkb2luZyA9PSBEb2luZ01vZGUgJiYgYXJnID09ICJOQVRJVkVfQ09NTUFORCIpIHsKICNpZmRlZiBfV0lOMzIKICAgICAgIG1vZGUgPSBNb2RlV2luZG93czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNlcnZlci5jeHggYi9Tb3VyY2UvY21TZXJ2ZXIuY3h4CmluZGV4IDNiMmU1ZjMuLjdmOTc0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNlcnZlci5jeHgKKysrIGIvU291cmNlL2NtU2VydmVyLmN4eApAQCAtNCw2ICs0LDcgQEAKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzaWduYWw+CiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxtdXRleD4KQEAgLTEyLDEwICsxMywxMCBAQAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS9zaGFyZWRfbXV0ZXg+CiAKLSNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vcmVhZGVyLmg+CisjaW5jbHVkZSA8Y20zcC9qc29uL3dyaXRlci5oPgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF9yZWFkZXIuaCIKLSNpbmNsdWRlICJjbV9qc29uY3BwX3dyaXRlci5oIgorI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgogCiAjaW5jbHVkZSAiY21Db25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiY21GaWxlTW9uaXRvci5oIgpAQCAtNTksMTYgKzYwLDEyIEBACiAgICwgU3VwcG9ydEV4cGVyaW1lbnRhbChzdXBwb3J0RXhwZXJpbWVudGFsKQogewogICAvLyBSZWdpc3RlciBzdXBwb3J0ZWQgcHJvdG9jb2xzOgotICB0aGlzLT5SZWdpc3RlclByb3RvY29sKG5ldyBjbVNlcnZlclByb3RvY29sMSk7CisgIHRoaXMtPlJlZ2lzdGVyUHJvdG9jb2woY206Om1ha2VfdW5pcXVlPGNtU2VydmVyUHJvdG9jb2wxPigpKTsKIH0KIAogY21TZXJ2ZXI6On5jbVNlcnZlcigpCiB7CiAgIENsb3NlKCk7Ci0KLSAgZm9yIChjbVNlcnZlclByb3RvY29sKiBwIDogdGhpcy0+U3VwcG9ydGVkUHJvdG9jb2xzKSB7Ci0gICAgZGVsZXRlIHA7Ci0gIH0KIH0KIAogdm9pZCBjbVNlcnZlcjo6UHJvY2Vzc1JlcXVlc3QoY21Db25uZWN0aW9uKiBjb25uZWN0aW9uLApAQCAtMTE3LDIyICsxMTQsMjIgQEAKICAgfQogfQogCi12b2lkIGNtU2VydmVyOjpSZWdpc3RlclByb3RvY29sKGNtU2VydmVyUHJvdG9jb2wqIHByb3RvY29sKQordm9pZCBjbVNlcnZlcjo6UmVnaXN0ZXJQcm90b2NvbChzdGQ6OnVuaXF1ZV9wdHI8Y21TZXJ2ZXJQcm90b2NvbD4gcHJvdG9jb2wpCiB7CiAgIGlmIChwcm90b2NvbC0+SXNFeHBlcmltZW50YWwoKSAmJiAhdGhpcy0+U3VwcG9ydEV4cGVyaW1lbnRhbCkgewotICAgIGRlbGV0ZSBwcm90b2NvbDsKKyAgICBwcm90b2NvbC5yZXNldCgpOwogICAgIHJldHVybjsKICAgfQogICBhdXRvIHZlcnNpb24gPSBwcm90b2NvbC0+UHJvdG9jb2xWZXJzaW9uKCk7CiAgIGFzc2VydCh2ZXJzaW9uLmZpcnN0ID49IDApOwogICBhc3NlcnQodmVyc2lvbi5zZWNvbmQgPj0gMCk7Ci0gIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYodGhpcy0+U3VwcG9ydGVkUHJvdG9jb2xzLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+U3VwcG9ydGVkUHJvdG9jb2xzLmVuZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFt2ZXJzaW9uXShjbVNlcnZlclByb3RvY29sKiBwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC0+UHJvdG9jb2xWZXJzaW9uKCkgPT0gdmVyc2lvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZigKKyAgICB0aGlzLT5TdXBwb3J0ZWRQcm90b2NvbHMuYmVnaW4oKSwgdGhpcy0+U3VwcG9ydGVkUHJvdG9jb2xzLmVuZCgpLAorICAgIFt2ZXJzaW9uXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Y21TZXJ2ZXJQcm90b2NvbD4mIHApIHsKKyAgICAgIHJldHVybiBwLT5Qcm90b2NvbFZlcnNpb24oKSA9PSB2ZXJzaW9uOworICAgIH0pOwogICBpZiAoaXQgPT0gdGhpcy0+U3VwcG9ydGVkUHJvdG9jb2xzLmVuZCgpKSB7Ci0gICAgdGhpcy0+U3VwcG9ydGVkUHJvdG9jb2xzLnB1c2hfYmFjayhwcm90b2NvbCk7CisgICAgdGhpcy0+U3VwcG9ydGVkUHJvdG9jb2xzLnB1c2hfYmFjayhzdGQ6Om1vdmUocHJvdG9jb2wpKTsKICAgfQogfQogCkBAIC0yOTcsMTkgKzI5NCwyMCBAQAogfQogCiBjbVNlcnZlclByb3RvY29sKiBjbVNlcnZlcjo6RmluZE1hdGNoaW5nUHJvdG9jb2woCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNtU2VydmVyUHJvdG9jb2wqPiYgcHJvdG9jb2xzLCBpbnQgbWFqb3IsIGludCBtaW5vcikKKyAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtU2VydmVyUHJvdG9jb2w+PiYgcHJvdG9jb2xzLCBpbnQgbWFqb3IsCisgIGludCBtaW5vcikKIHsKICAgY21TZXJ2ZXJQcm90b2NvbCogYmVzdE1hdGNoID0gbnVsbHB0cjsKLSAgZm9yIChhdXRvIHByb3RvY29sIDogcHJvdG9jb2xzKSB7CisgIGZvciAoY29uc3QgYXV0byYgcHJvdG9jb2wgOiBwcm90b2NvbHMpIHsKICAgICBhdXRvIHZlcnNpb24gPSBwcm90b2NvbC0+UHJvdG9jb2xWZXJzaW9uKCk7CiAgICAgaWYgKG1ham9yICE9IHZlcnNpb24uZmlyc3QpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICBpZiAobWlub3IgPT0gdmVyc2lvbi5zZWNvbmQpIHsKLSAgICAgIHJldHVybiBwcm90b2NvbDsKKyAgICAgIHJldHVybiBwcm90b2NvbC5nZXQoKTsKICAgICB9CiAgICAgaWYgKCFiZXN0TWF0Y2ggfHwgYmVzdE1hdGNoLT5Qcm90b2NvbFZlcnNpb24oKS5zZWNvbmQgPCB2ZXJzaW9uLnNlY29uZCkgewotICAgICAgYmVzdE1hdGNoID0gcHJvdG9jb2w7CisgICAgICBiZXN0TWF0Y2ggPSBwcm90b2NvbC5nZXQoKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIG1pbm9yIDwgMCA/IGJlc3RNYXRjaCA6IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXJ2ZXIuaCBiL1NvdXJjZS9jbVNlcnZlci5oCmluZGV4IDNkNzAyN2IuLjk1NDMzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNlcnZlci5oCisrKyBiL1NvdXJjZS9jbVNlcnZlci5oCkBAIC0xMCw4ICsxMCw4IEBACiAKICNpbmNsdWRlIDxjbS9zaGFyZWRfbXV0ZXg+CiAKLSNpbmNsdWRlICJjbV9qc29uY3BwX3ZhbHVlLmgiCi0jaW5jbHVkZSAiY21fdXYuaCIKKyNpbmNsdWRlIDxjbTNwL2pzb24vdmFsdWUuaD4KKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAKICNpbmNsdWRlICJjbVVWSGFuZGxlUHRyLmgiCiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogICBjbUZpbGVNb25pdG9yKiBGaWxlTW9uaXRvcigpIGNvbnN0OwogCiBwcml2YXRlOgotICB2b2lkIFJlZ2lzdGVyUHJvdG9jb2woY21TZXJ2ZXJQcm90b2NvbCogcHJvdG9jb2wpOworICB2b2lkIFJlZ2lzdGVyUHJvdG9jb2woc3RkOjp1bmlxdWVfcHRyPGNtU2VydmVyUHJvdG9jb2w+IHByb3RvY29sKTsKIAogICAvLyBDYWxsYmFja3MgZnJvbSBjbVNlcnZlckNvbm5lY3Rpb246CiAKQEAgLTE0OSwxMiArMTQ5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlYnVnSW5mbyogZGVidWcpIGNvbnN0OwogCiAgIHN0YXRpYyBjbVNlcnZlclByb3RvY29sKiBGaW5kTWF0Y2hpbmdQcm90b2NvbCgKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxjbVNlcnZlclByb3RvY29sKj4mIHByb3RvY29scywgaW50IG1ham9yLCBpbnQgbWlub3IpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxjbVNlcnZlclByb3RvY29sPj4mIHByb3RvY29scywgaW50IG1ham9yLAorICAgIGludCBtaW5vcik7CiAKICAgY29uc3QgYm9vbCBTdXBwb3J0RXhwZXJpbWVudGFsOwogCiAgIGNtU2VydmVyUHJvdG9jb2wqIFByb3RvY29sID0gbnVsbHB0cjsKLSAgc3RkOjp2ZWN0b3I8Y21TZXJ2ZXJQcm90b2NvbCo+IFN1cHBvcnRlZFByb3RvY29sczsKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtU2VydmVyUHJvdG9jb2w+PiBTdXBwb3J0ZWRQcm90b2NvbHM7CiAKICAgZnJpZW5kIGNsYXNzIGNtU2VydmVyUHJvdG9jb2w7CiAgIGZyaWVuZCBjbGFzcyBjbVNlcnZlclJlcXVlc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXJ2ZXJDb25uZWN0aW9uLmN4eCBiL1NvdXJjZS9jbVNlcnZlckNvbm5lY3Rpb24uY3h4CmluZGV4IDI3OTE5NzIuLmI0ZjQxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNlcnZlckNvbm5lY3Rpb24uY3h4CisrKyBiL1NvdXJjZS9jbVNlcnZlckNvbm5lY3Rpb24uY3h4CkBAIC00LDcgKzQsNyBAQAogCiAjaW5jbHVkZSAiY21TZXJ2ZXJDb25uZWN0aW9uLmgiCiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAogI2luY2x1ZGUgImNtU2VydmVyLmgiCiAjaW5jbHVkZSAiY21TZXJ2ZXJEaWN0aW9uYXJ5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXJ2ZXJQcm90b2NvbC5jeHggYi9Tb3VyY2UvY21TZXJ2ZXJQcm90b2NvbC5jeHgKaW5kZXggNTYwMDNkZi4uZTU4NmZkOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2VydmVyUHJvdG9jb2wuY3h4CisrKyBiL1NvdXJjZS9jbVNlcnZlclByb3RvY29sLmN4eApAQCAtMTAsMTYgKzEwLDE3IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtRmlsZU1vbml0b3IuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtSnNvbk9iamVjdERpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJjbUpzb25PYmplY3RzLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVNlcnZlci5oIgogI2luY2x1ZGUgImNtU2VydmVyRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKQEAgLTEzNSw2ICsxMzYsNyBAQAogICB0aGlzLT5tX1NlcnZlciA9IHNlcnZlcjsKICAgdGhpcy0+bV9DTWFrZUluc3RhbmNlID0KICAgICBjbTo6bWFrZV91bmlxdWU8Y21ha2U+KGNtYWtlOjpSb2xlUHJvamVjdCwgY21TdGF0ZTo6UHJvamVjdCk7CisgIHRoaXMtPm1fV2FyblVudXNlZCA9IGZhbHNlOwogICBjb25zdCBib29sIHJlc3VsdCA9IHRoaXMtPkRvQWN0aXZhdGUocmVxdWVzdCwgZXJyb3JNZXNzYWdlKTsKICAgaWYgKCFyZXN1bHQpIHsKICAgICB0aGlzLT5tX0NNYWtlSW5zdGFuY2UgPSBudWxscHRyOwpAQCAtMTgyLDcgKzE4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNhY2hlZFZhbHVlID0KLSAgICBzdGQ6OnN0cmluZyhzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9IT01FX0RJUkVDVE9SWSIpKTsKKyAgICAqc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfSE9NRV9ESVJFQ1RPUlkiKTsKICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKICAgICB2YWx1ZSA9IGNhY2hlZFZhbHVlOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjA1LDkgKzIwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5RGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3JNZXNzYWdlKQogewotICBjb25zdCBjaGFyKiBlbnRyeSA9IHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoa2V5KTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgY2FjaGVkVmFsdWUgPQotICAgIGVudHJ5ID09IG51bGxwdHIgPyBzdGQ6OnN0cmluZygpIDogc3RkOjpzdHJpbmcoZW50cnkpOworICBjb25zdCBzdGQ6OnN0cmluZyBjYWNoZWRWYWx1ZSA9IHN0YXRlLT5HZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKGtleSk7CiAgIGlmICh2YWx1ZS5lbXB0eSgpKSB7CiAgICAgdmFsdWUgPSBjYWNoZWRWYWx1ZTsKICAgfQpAQCAtNDM1LDcgKzQzNSw3IEBACiAgICAga2V5cyA9IGFsbEtleXM7CiAgIH0gZWxzZSB7CiAgICAgZm9yIChhdXRvIGNvbnN0JiBpIDoga2V5cykgewotICAgICAgaWYgKCFjbUNvbnRhaW5zKGFsbEtleXMsIGkpKSB7CisgICAgICBpZiAoIWNtOjpjb250YWlucyhhbGxLZXlzLCBpKSkgewogICAgICAgICByZXR1cm4gcmVxdWVzdC5SZXBvcnRFcnJvcigiS2V5IFwiIiArIGkgKyAiXCIgbm90IGZvdW5kIGluIGNhY2hlLiIpOwogICAgICAgfQogICAgIH0KQEAgLTQ0NiwxMyArNDQ2LDEzIEBACiAgICAgZW50cnlba0tFWV9LRVldID0ga2V5OwogICAgIGVudHJ5W2tUWVBFX0tFWV0gPQogICAgICAgY21TdGF0ZTo6Q2FjaGVFbnRyeVR5cGVUb1N0cmluZyhzdGF0ZS0+R2V0Q2FjaGVFbnRyeVR5cGUoa2V5KSk7Ci0gICAgZW50cnlba1ZBTFVFX0tFWV0gPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKGtleSk7CisgICAgZW50cnlba1ZBTFVFX0tFWV0gPSAqc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOwogCiAgICAgSnNvbjo6VmFsdWUgcHJvcHMgPSBKc29uOjpvYmplY3RWYWx1ZTsKICAgICBib29sIGhhdmVQcm9wZXJ0aWVzID0gZmFsc2U7CiAgICAgZm9yIChhdXRvIGNvbnN0JiBwcm9wIDogc3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eUxpc3Qoa2V5KSkgewogICAgICAgaGF2ZVByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgcHJvcHNbcHJvcF0gPSBzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgcHJvcCk7CisgICAgICBwcm9wc1twcm9wXSA9ICpzdGF0ZS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgcHJvcCk7CiAgICAgfQogICAgIGlmIChoYXZlUHJvcGVydGllcykgewogICAgICAgZW50cnlba1BST1BFUlRJRVNfS0VZXSA9IHByb3BzOwpAQCAtNTY0LDcgKzU2NCw3IEBACiAKICAgaWYgKGNtLT5Mb2FkQ2FjaGUoYnVpbGREaXIpKSB7CiAgICAgLy8gYnVpbGQgZGlyZWN0b3J5IGhhcyBiZWVuIHNldCB1cCBiZWZvcmUKLSAgICBjb25zdCBzdGQ6OnN0cmluZyogY2FjaGVkU291cmNlRGlyID0KKyAgICBjbVByb3AgY2FjaGVkU291cmNlRGlyID0KICAgICAgIGNtLT5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0hPTUVfRElSRUNUT1JZIik7CiAgICAgaWYgKCFjYWNoZWRTb3VyY2VEaXIpIHsKICAgICAgIHJldHVybiByZXF1ZXN0LlJlcG9ydEVycm9yKCJObyBDTUFLRV9IT01FX0RJUkVDVE9SWSBmb3VuZCBpbiBjYWNoZS4iKTsKQEAgLTU3NCw3ICs1NzQsNyBAQAogICAgICAgY20tPlNldEhvbWVEaXJlY3Rvcnkoc291cmNlRGlyKTsKICAgICB9CiAKLSAgICBjb25zdCBzdGQ6OnN0cmluZyogY2FjaGVkR2VuZXJhdG9yID0KKyAgICBjbVByb3AgY2FjaGVkR2VuZXJhdG9yID0KICAgICAgIGNtLT5HZXRTdGF0ZSgpLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOwogICAgIGlmIChjYWNoZWRHZW5lcmF0b3IpIHsKICAgICAgIGlmIChnZyAmJiBnZy0+R2V0TmFtZSgpICE9ICpjYWNoZWRHZW5lcmF0b3IpIHsKQEAgLTYzNyw3ICs2MzcsNyBAQAogICBvYmpba1RSQUNFX0tFWV0gPSBjbS0+R2V0VHJhY2UoKTsKICAgb2JqW2tUUkFDRV9FWFBBTkRfS0VZXSA9IGNtLT5HZXRUcmFjZUV4cGFuZCgpOwogICBvYmpba1dBUk5fVU5JTklUSUFMSVpFRF9LRVldID0gY20tPkdldFdhcm5VbmluaXRpYWxpemVkKCk7Ci0gIG9ialtrV0FSTl9VTlVTRURfS0VZXSA9IGNtLT5HZXRXYXJuVW51c2VkKCk7CisgIG9ialtrV0FSTl9VTlVTRURfS0VZXSA9IG1fV2FyblVudXNlZDsKICAgb2JqW2tXQVJOX1VOVVNFRF9DTElfS0VZXSA9IGNtLT5HZXRXYXJuVW51c2VkQ2xpKCk7CiAgIG9ialtrQ0hFQ0tfU1lTVEVNX1ZBUlNfS0VZXSA9IGNtLT5HZXRDaGVja1N5c3RlbVZhcnMoKTsKIApAQCAtNjgzLDcgKzY4Myw3IEBACiAgIHNldEJvb2wocmVxdWVzdCwga1RSQUNFX0VYUEFORF9LRVksIFtjbV0oYm9vbCBlKSB7IGNtLT5TZXRUcmFjZUV4cGFuZChlKTsgfSk7CiAgIHNldEJvb2wocmVxdWVzdCwga1dBUk5fVU5JTklUSUFMSVpFRF9LRVksCiAgICAgICAgICAgW2NtXShib29sIGUpIHsgY20tPlNldFdhcm5VbmluaXRpYWxpemVkKGUpOyB9KTsKLSAgc2V0Qm9vbChyZXF1ZXN0LCBrV0FSTl9VTlVTRURfS0VZLCBbY21dKGJvb2wgZSkgeyBjbS0+U2V0V2FyblVudXNlZChlKTsgfSk7CisgIHNldEJvb2wocmVxdWVzdCwga1dBUk5fVU5VU0VEX0tFWSwgW3RoaXNdKGJvb2wgZSkgeyBtX1dhcm5VbnVzZWQgPSBlOyB9KTsKICAgc2V0Qm9vbChyZXF1ZXN0LCBrV0FSTl9VTlVTRURfQ0xJX0tFWSwKICAgICAgICAgICBbY21dKGJvb2wgZSkgeyBjbS0+U2V0V2FyblVudXNlZENsaShlKTsgfSk7CiAgIHNldEJvb2wocmVxdWVzdCwga0NIRUNLX1NZU1RFTV9WQVJTX0tFWSwKQEAgLTc0NCw3ICs3NDQsNyBAQAogICBjbS0+U2V0SG9tZURpcmVjdG9yeShTb3VyY2VEaXJlY3RvcnkpOwogICBjbS0+U2V0SG9tZU91dHB1dERpcmVjdG9yeShCdWlsZERpcmVjdG9yeSk7CiAKLSAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gY20tPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihmdWxsR2VuZXJhdG9yTmFtZSk7CisgIGF1dG8gZ2cgPSBjbS0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKGZ1bGxHZW5lcmF0b3JOYW1lKTsKICAgaWYgKCFnZykgewogICAgIHNldEVycm9yTWVzc2FnZSgKICAgICAgIGVycm9yTWVzc2FnZSwKQEAgLTc1Myw3ICs3NTMsNyBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGNtLT5TZXRHbG9iYWxHZW5lcmF0b3IoZ2cpOworICBjbS0+U2V0R2xvYmFsR2VuZXJhdG9yKHN0ZDo6bW92ZShnZykpOwogCiAgIGNtLT5TZXRHZW5lcmF0b3JUb29sc2V0KFRvb2xzZXQpOwogICBjbS0+U2V0R2VuZXJhdG9yUGxhdGZvcm0oUGxhdGZvcm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2VydmVyUHJvdG9jb2wuaCBiL1NvdXJjZS9jbVNlcnZlclByb3RvY29sLmgKaW5kZXggODQ0NmMzZS4uNjAwOWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2VydmVyUHJvdG9jb2wuaAorKysgYi9Tb3VyY2UvY21TZXJ2ZXJQcm90b2NvbC5oCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgorI2luY2x1ZGUgPGNtM3AvanNvbi92YWx1ZS5oPgogCiAjaW5jbHVkZSAiY21ha2UuaCIKIApAQCAtOTQsNiArOTQsNyBAQAogICAvLyBJbXBsZW1lbnQgcHJvdG9jb2wgc3BlY2lmaWMgYWN0aXZhdGlvbiB0YXNrcyBoZXJlLiBDYWxsZWQgZnJvbSBBY3RpdmF0ZSgpLgogICB2aXJ0dWFsIGJvb2wgRG9BY3RpdmF0ZShjb25zdCBjbVNlcnZlclJlcXVlc3QmIHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvck1lc3NhZ2UpOworICBib29sIG1fV2FyblVudXNlZCA9IGZhbHNlOyAvLyBzdG9yYWdlIGZvciBsZWdhY3kgb3B0aW9uCiAKIHByaXZhdGU6CiAgIHN0ZDo6dW5pcXVlX3B0cjxjbWFrZT4gbV9DTWFrZUluc3RhbmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2V0Q29tbWFuZC5jeHggYi9Tb3VyY2UvY21TZXRDb21tYW5kLmN4eAppbmRleCA4YzNhNGNiLi4zNTRiNGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXRDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21TZXRDb21tYW5kLmN4eApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC0xMjEsNyArMTIyLDcgQEAKIAogICBpZiAoY2FjaGUpIHsKICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGNhY2hlU3RhcnQgPSBhcmdzLnNpemUoKSAtIDMgLSAoZm9yY2UgPyAxIDogMCk7Ci0gICAgaWYgKCFjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKGFyZ3NbY2FjaGVTdGFydCArIDFdLmNfc3RyKCksIHR5cGUpKSB7CisgICAgaWYgKCFjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKGFyZ3NbY2FjaGVTdGFydCArIDFdLCB0eXBlKSkgewogICAgICAgc3RkOjpzdHJpbmcgbSA9ICJpbXBsaWNpdGx5IGNvbnZlcnRpbmcgJyIgKyBhcmdzW2NhY2hlU3RhcnQgKyAxXSArCiAgICAgICAgICInIHRvICdTVFJJTkcnIHR5cGUuIjsKICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6QVVUSE9SX1dBUk5JTkcsIG0pOwpAQCAtMTM1LDcgKzEzNiw3IEBACiAKICAgLy8gc2VlIGlmIHRoaXMgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUKICAgY21TdGF0ZSogc3RhdGUgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRTdGF0ZSgpOwotICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSh2YXJpYWJsZSk7CisgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSh2YXJpYWJsZSk7CiAgIGlmIChleGlzdGluZ1ZhbHVlICYmCiAgICAgICAoc3RhdGUtPkdldENhY2hlRW50cnlUeXBlKHZhcmlhYmxlKSAhPSBjbVN0YXRlRW51bXM6OlVOSU5JVElBTElaRUQpKSB7CiAgICAgLy8gaWYgdGhlIHNldCBpcyB0cnlpbmcgdG8gQ0FDSEUgdGhlIHZhbHVlIGJ1dCB0aGUgdmFsdWUKQEAgLTE0OSw4ICsxNTAsOCBAQAogCiAgIC8vIGlmIGl0IGlzIG1lYW50IHRvIGJlIGluIHRoZSBjYWNoZSB0aGVuIGRlZmluZSBpdCBpbiB0aGUgY2FjaGUKICAgaWYgKGNhY2hlKSB7Ci0gICAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKHZhcmlhYmxlLCB2YWx1ZS5jX3N0cigpLCBkb2NzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIGZvcmNlKTsKKyAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRDYWNoZURlZmluaXRpb24odmFyaWFibGUsIHZhbHVlLCBkb2NzdHJpbmcsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlKTsKICAgfSBlbHNlIHsKICAgICAvLyBhZGQgdGhlIGRlZmluaXRpb24KICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGREZWZpbml0aW9uKHZhcmlhYmxlLCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXREaXJlY3RvcnlQcm9wZXJ0aWVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21TZXREaXJlY3RvcnlQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKaW5kZXggMzVkYWNhNi4uMDdhZDI0NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2V0RGlyZWN0b3J5UHJvcGVydGllc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNldERpcmVjdG9yeVByb3BlcnRpZXNDb21tYW5kLmN4eApAQCAtNSwxMiArNSw2IEBACiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAKLW5hbWVzcGFjZSB7Ci1ib29sIFJ1bkNvbW1hbmQoY21NYWtlZmlsZSYgbWYsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWl0LAotICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWl0ZW5kLAotICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBlcnJvcnMpOwotfQotCiAvLyBjbVNldERpcmVjdG9yeVByb3BlcnRpZXNDb21tYW5kCiBib29sIGNtU2V0RGlyZWN0b3J5UHJvcGVydGllc0NvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCkBAIC0yMCwzOCArMTQsMjYgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICBzdGQ6OnN0cmluZyBlcnJvcnM7Ci0gIGJvb2wgcmV0ID0KLSAgICBSdW5Db21tYW5kKHN0YXR1cy5HZXRNYWtlZmlsZSgpLCBhcmdzLmJlZ2luKCkgKyAxLCBhcmdzLmVuZCgpLCBlcnJvcnMpOwotICBpZiAoIXJldCkgewotICAgIHN0YXR1cy5TZXRFcnJvcihlcnJvcnMpOworICAvLyBQUk9QRVJUSUVTIGZvbGxvd2VkIGJ5IHByb3AgdmFsdWUgcGFpcnMKKyAgaWYgKGFyZ3Muc2l6ZSgpICUgMiAhPSAxKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIHJldHVybiByZXQ7Ci19CiAKLW5hbWVzcGFjZSB7Ci1ib29sIFJ1bkNvbW1hbmQoY21NYWtlZmlsZSYgbWYsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWl0LAotICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWl0ZW5kLAotICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBlcnJvcnMpCi17Ci0gIGZvciAoOyBhaXQgIT0gYWl0ZW5kOyBhaXQgKz0gMikgewotICAgIGlmIChhaXQgKyAxID09IGFpdGVuZCkgewotICAgICAgZXJyb3JzID0gIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCA9ICphaXQ7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlID0gKihhaXQgKyAxKTsKKyAgZm9yIChhdXRvIGl0ZXIgPSBhcmdzLmJlZ2luKCkgKyAxOyBpdGVyICE9IGFyZ3MuZW5kKCk7IGl0ZXIgKz0gMikgeworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wID0gKml0ZXI7CiAgICAgaWYgKHByb3AgPT0gIlZBUklBQkxFUyIpIHsKLSAgICAgIGVycm9ycyA9ICJWYXJpYWJsZXMgYW5kIGNhY2hlIHZhcmlhYmxlcyBzaG91bGQgYmUgc2V0IHVzaW5nIFNFVCBjb21tYW5kIjsKKyAgICAgIHN0YXR1cy5TZXRFcnJvcigKKyAgICAgICAgIlZhcmlhYmxlcyBhbmQgY2FjaGUgdmFyaWFibGVzIHNob3VsZCBiZSBzZXQgdXNpbmcgU0VUIGNvbW1hbmQiKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gIk1BQ1JPUyIpIHsKLSAgICAgIGVycm9ycyA9ICJDb21tYW5kcyBhbmQgbWFjcm9zIGNhbm5vdCBiZSBzZXQgdXNpbmcgU0VUX0NNQUtFX1BST1BFUlRJRVMiOworICAgICAgc3RhdHVzLlNldEVycm9yKAorICAgICAgICAiQ29tbWFuZHMgYW5kIG1hY3JvcyBjYW5ub3QgYmUgc2V0IHVzaW5nIFNFVF9DTUFLRV9QUk9QRVJUSUVTIik7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1mLlNldFByb3BlcnR5KHByb3AsIHZhbHVlLmNfc3RyKCkpOworICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLlNldFByb3BlcnR5KHByb3AsIChpdGVyICsgMSktPmNfc3RyKCkpOwogICB9CiAKICAgcmV0dXJuIHRydWU7CiB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXRQcm9wZXJ0eUNvbW1hbmQuY3h4IGIvU291cmNlL2NtU2V0UHJvcGVydHlDb21tYW5kLmN4eAppbmRleCAxMTJkODMyLi42Y2E3NjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXRQcm9wZXJ0eUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNldFByb3BlcnR5Q29tbWFuZC5jeHgKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgogCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgpAQCAtNDMsNyArNDQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKTsKKyAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiYgZGlyZWN0b3J5X21ha2VmaWxlcywKKyAgICAgICAgICAgICAgICAgICAgICBib29sIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSk7CiBib29sIEhhbmRsZVNvdXJjZShjbVNvdXJjZUZpbGUqIHNmLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGJvb2wgYXBwZW5kQXNTdHJpbmcsCiAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKTsKQEAgLTc0LDYgKzc3LDE0NyBAQAogICAgICAgICAgICAgICAgICAgIGJvb2wgYXBwZW5kTW9kZSwgYm9vbCByZW1vdmUpOwogfQogCituYW1lc3BhY2UgU2V0UHJvcGVydHlDb21tYW5kIHsKK2Jvb2wgSGFuZGxlU291cmNlRmlsZURpcmVjdG9yeVNjb3BlcygKKyAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZV9kaXJlY3RvcmllcywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMsCisgIHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiYgZGlyZWN0b3J5X21ha2VmaWxlcykKK3sKKyAgc3RkOjp1bm9yZGVyZWRfc2V0PGNtTWFrZWZpbGUqPiBkaXJlY3RvcnlfbWFrZWZpbGVzX3NldDsKKworICBjbU1ha2VmaWxlKiBjdXJyZW50X2Rpcl9tZiA9ICZzdGF0dXMuR2V0TWFrZWZpbGUoKTsKKyAgaWYgKCFzb3VyY2VfZmlsZV9kaXJlY3Rvcmllcy5lbXB0eSgpKSB7CisgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgZGlyX3BhdGggOiBzb3VyY2VfZmlsZV9kaXJlY3RvcmllcykgeworICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgYWJzb2x1dGVfZGlyX3BhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKAorICAgICAgICBkaXJfcGF0aCwgY3VycmVudF9kaXJfbWYtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSk7CisgICAgICBjbU1ha2VmaWxlKiBkaXJfbWYgPQorICAgICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZE1ha2VmaWxlKAorICAgICAgICAgIGFic29sdXRlX2Rpcl9wYXRoKTsKKyAgICAgIGlmICghZGlyX21mKSB7CisgICAgICAgIHN0YXR1cy5TZXRFcnJvcihjbVN0ckNhdCgiZ2l2ZW4gbm9uLWV4aXN0ZW50IERJUkVDVE9SWSAiLCBkaXJfcGF0aCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICBpZiAoZGlyZWN0b3J5X21ha2VmaWxlc19zZXQuZmluZChkaXJfbWYpID09CisgICAgICAgICAgZGlyZWN0b3J5X21ha2VmaWxlc19zZXQuZW5kKCkpIHsKKyAgICAgICAgZGlyZWN0b3J5X21ha2VmaWxlcy5wdXNoX2JhY2soZGlyX21mKTsKKyAgICAgICAgZGlyZWN0b3J5X21ha2VmaWxlc19zZXQuaW5zZXJ0KGRpcl9tZik7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKCFzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMuZW1wdHkoKSkgeworICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldF9uYW1lIDogc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzKSB7CisgICAgICBjbVRhcmdldCogdGFyZ2V0ID0gY3VycmVudF9kaXJfbWYtPkZpbmRUYXJnZXRUb1VzZSh0YXJnZXRfbmFtZSk7CisgICAgICBpZiAoIXRhcmdldCkgeworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoCisgICAgICAgICAgImdpdmVuIG5vbi1leGlzdGVudCB0YXJnZXQgZm9yIFRBUkdFVF9ESVJFQ1RPUlkgIiwgdGFyZ2V0X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgY21Qcm9wIHRhcmdldF9zb3VyY2VfZGlyID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiU09VUkNFX0RJUiIpOworICAgICAgY21NYWtlZmlsZSogdGFyZ2V0X2Rpcl9tZiA9CisgICAgICAgIHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kTWFrZWZpbGUoCisgICAgICAgICAgKnRhcmdldF9zb3VyY2VfZGlyKTsKKworICAgICAgaWYgKGRpcmVjdG9yeV9tYWtlZmlsZXNfc2V0LmZpbmQodGFyZ2V0X2Rpcl9tZikgPT0KKyAgICAgICAgICBkaXJlY3RvcnlfbWFrZWZpbGVzX3NldC5lbmQoKSkgeworICAgICAgICBkaXJlY3RvcnlfbWFrZWZpbGVzLnB1c2hfYmFjayh0YXJnZXRfZGlyX21mKTsKKyAgICAgICAgZGlyZWN0b3J5X21ha2VmaWxlc19zZXQuaW5zZXJ0KHRhcmdldF9kaXJfbWYpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChzb3VyY2VfZmlsZV9kaXJlY3Rvcmllcy5lbXB0eSgpICYmCisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMuZW1wdHkoKSkgeworICAgIGRpcmVjdG9yeV9tYWtlZmlsZXMucHVzaF9iYWNrKGN1cnJlbnRfZGlyX21mKTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIYW5kbGVTb3VyY2VGaWxlRGlyZWN0b3J5U2NvcGVWYWxpZGF0aW9uKAorICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBib29sIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCwKKyAgYm9vbCBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzKQoreworICAvLyBWYWxpZGF0ZSBzb3VyY2UgZmlsZSBkaXJlY3Rvcnkgc2NvcGVzLgorICBpZiAoc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkICYmCisgICAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcmllcy5lbXB0eSgpKSB7CisgICAgc3RkOjpzdHJpbmcgZXJyb3JzID0gImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm8gdmFsdWUgcHJvdmlkZWQgdG8gdGhlIERJUkVDVE9SWSBvcHRpb24iOworICAgIHN0YXR1cy5TZXRFcnJvcihlcnJvcnMpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAoc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkICYmCisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMuZW1wdHkoKSkgeworICAgIHN0ZDo6c3RyaW5nIGVycm9ycyA9ICJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSBUQVJHRVRfRElSRUNUT1JZIG9wdGlvbiI7CisgICAgc3RhdHVzLlNldEVycm9yKGVycm9ycyk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiB0cnVlOworfQorCitib29sIEhhbmRsZUFuZFZhbGlkYXRlU291cmNlRmlsZURpcmVjdG9ydG9yeVNjb3BlcygKKyAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywgYm9vbCBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQsCisgIGJvb2wgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3RvcmllcywKKyAgc3RkOjp2ZWN0b3I8Y21NYWtlZmlsZSo+JiBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzKQoreworICBib29sIHNjb3BlX29wdGlvbnNfdmFsaWQgPQorICAgIFNldFByb3BlcnR5Q29tbWFuZDo6SGFuZGxlU291cmNlRmlsZURpcmVjdG9yeVNjb3BlVmFsaWRhdGlvbigKKyAgICAgIHN0YXR1cywgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkLAorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkLCBzb3VyY2VfZmlsZV9kaXJlY3RvcmllcywKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3Rvcmllcyk7CisgIGlmICghc2NvcGVfb3B0aW9uc192YWxpZCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHNjb3BlX29wdGlvbnNfdmFsaWQgPSBTZXRQcm9wZXJ0eUNvbW1hbmQ6OkhhbmRsZVNvdXJjZUZpbGVEaXJlY3RvcnlTY29wZXMoCisgICAgc3RhdHVzLCBzb3VyY2VfZmlsZV9kaXJlY3Rvcmllcywgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLAorICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9tYWtlZmlsZXMpOworICByZXR1cm4gc2NvcGVfb3B0aW9uc192YWxpZDsKK30KKworc3RkOjpzdHJpbmcgTWFrZVNvdXJjZUZpbGVQYXRoQWJzb2x1dGVJZk5lZWRlZCgKKyAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZV9maWxlX3BhdGgsCisgIGNvbnN0IGJvb2wgbmVlZGVkKQoreworICBpZiAoIW5lZWRlZCkgeworICAgIHJldHVybiBzb3VyY2VfZmlsZV9wYXRoOworICB9CisgIGNvbnN0IHN0ZDo6c3RyaW5nIGFic29sdXRlX2ZpbGVfcGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgc291cmNlX2ZpbGVfcGF0aCwgc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpKTsKKyAgcmV0dXJuIGFic29sdXRlX2ZpbGVfcGF0aDsKK30KKwordm9pZCBNYWtlU291cmNlRmlsZVBhdGhzQWJzb2x1dGVJZk5lZWRlZCgKKyAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZXNfYWJzb2x1dGVfcGF0aHMsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZXNfaXRfYmVnaW4sCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZXNfaXRfZW5kLCBjb25zdCBib29sIG5lZWRlZCkKK3sKKworICAvLyBNYWtlIHRoZSBmaWxlIHBhdGhzIGFic29sdXRlLCBzbyB0aGF0IHJlbGF0aXZlIHNvdXJjZSBmaWxlIHBhdGhzIGFyZQorICAvLyBwaWNrZWQgdXAgcmVsYXRpdmUgdG8gdGhlIGNvbW1hbmQgY2FsbGluZyBzaXRlLCByZWdhcmRsZXNzIG9mIHRoZQorICAvLyBkaXJlY3Rvcnkgc2NvcGUuCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6ZGlmZmVyZW5jZV90eXBlIG51bV9maWxlcyA9CisgICAgZmlsZXNfaXRfZW5kIC0gZmlsZXNfaXRfYmVnaW47CisgIHNvdXJjZV9maWxlc19hYnNvbHV0ZV9wYXRocy5yZXNlcnZlKG51bV9maWxlcyk7CisKKyAgaWYgKCFuZWVkZWQpIHsKKyAgICBzb3VyY2VfZmlsZXNfYWJzb2x1dGVfcGF0aHMuYXNzaWduKGZpbGVzX2l0X2JlZ2luLCBmaWxlc19pdF9lbmQpOworICAgIHJldHVybjsKKyAgfQorCisgIGZvciAoOyBmaWxlc19pdF9iZWdpbiAhPSBmaWxlc19pdF9lbmQ7ICsrZmlsZXNfaXRfYmVnaW4pIHsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBhYnNvbHV0ZV9maWxlX3BhdGggPQorICAgICAgTWFrZVNvdXJjZUZpbGVQYXRoQWJzb2x1dGVJZk5lZWRlZChzdGF0dXMsICpmaWxlc19pdF9iZWdpbiwgdHJ1ZSk7CisgICAgc291cmNlX2ZpbGVzX2Fic29sdXRlX3BhdGhzLnB1c2hfYmFjayhhYnNvbHV0ZV9maWxlX3BhdGgpOworICB9Cit9Cit9CisKIGJvb2wgY21TZXRQcm9wZXJ0eUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQogewpAQCAtMTE0LDEzICsyNTgsMjAgQEAKICAgc3RkOjpzdHJpbmcgcHJvcGVydHlOYW1lOwogICBzdGQ6OnN0cmluZyBwcm9wZXJ0eVZhbHVlOwogCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb3VyY2VfZmlsZV9kaXJlY3RvcmllczsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3RvcmllczsKKyAgYm9vbCBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQgPSBmYWxzZTsKKyAgYm9vbCBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQgPSBmYWxzZTsKKwogICAvLyBQYXJzZSB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIHVwIHRvIHRoZSB2YWx1ZXMuCiAgIGVudW0gRG9pbmcKICAgewogICAgIERvaW5nTm9uZSwKICAgICBEb2luZ05hbWVzLAogICAgIERvaW5nUHJvcGVydHksCi0gICAgRG9pbmdWYWx1ZXMKKyAgICBEb2luZ1ZhbHVlcywKKyAgICBEb2luZ1NvdXJjZURpcmVjdG9yeSwKKyAgICBEb2luZ1NvdXJjZVRhcmdldERpcmVjdG9yeQogICB9OwogICBEb2luZyBkb2luZyA9IERvaW5nTmFtZXM7CiAgIGNvbnN0IGNoYXIqIHNlcCA9ICIiOwpAQCAtMTM3LDggKzI4OCwyMCBAQAogICAgICAgYXBwZW5kTW9kZSA9IHRydWU7CiAgICAgICByZW1vdmUgPSBmYWxzZTsKICAgICAgIGFwcGVuZEFzU3RyaW5nID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGRvaW5nICE9IERvaW5nUHJvcGVydHkgJiYgZG9pbmcgIT0gRG9pbmdWYWx1ZXMgJiYKKyAgICAgICAgICAgICAgIHNjb3BlID09IGNtUHJvcGVydHk6OlNPVVJDRV9GSUxFICYmIGFyZyA9PSAiRElSRUNUT1JZIikgeworICAgICAgZG9pbmcgPSBEb2luZ1NvdXJjZURpcmVjdG9yeTsKKyAgICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChkb2luZyAhPSBEb2luZ1Byb3BlcnR5ICYmIGRvaW5nICE9IERvaW5nVmFsdWVzICYmCisgICAgICAgICAgICAgICBzY29wZSA9PSBjbVByb3BlcnR5OjpTT1VSQ0VfRklMRSAmJiBhcmcgPT0gIlRBUkdFVF9ESVJFQ1RPUlkiKSB7CisgICAgICBkb2luZyA9IERvaW5nU291cmNlVGFyZ2V0RGlyZWN0b3J5OworICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X29wdGlvbl9lbmFibGVkID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nTmFtZXMpIHsKICAgICAgIG5hbWVzLmluc2VydChhcmcpOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdTb3VyY2VEaXJlY3RvcnkpIHsKKyAgICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLnB1c2hfYmFjayhhcmcpOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkpIHsKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3Rvcmllcy5wdXNoX2JhY2soYXJnKTsKICAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nUHJvcGVydHkpIHsKICAgICAgIHByb3BlcnR5TmFtZSA9IGFyZzsKICAgICAgIGRvaW5nID0gRG9pbmdWYWx1ZXM7CkBAIC0xNTksNiArMzIyLDE4IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKKyAgc3RkOjp2ZWN0b3I8Y21NYWtlZmlsZSo+IHNvdXJjZV9maWxlX2RpcmVjdG9yeV9tYWtlZmlsZXM7CisgIGJvb2wgZmlsZV9zY29wZXNfaGFuZGxlZCA9CisgICAgU2V0UHJvcGVydHlDb21tYW5kOjpIYW5kbGVBbmRWYWxpZGF0ZVNvdXJjZUZpbGVEaXJlY3RvcnRvcnlTY29wZXMoCisgICAgICBzdGF0dXMsIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCwKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCwgc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMsCisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMsIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9tYWtlZmlsZXMpOworICBpZiAoIWZpbGVfc2NvcGVzX2hhbmRsZWQpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgYm9vbCBzb3VyY2VfZmlsZV9wYXRoc19zaG91bGRfYmVfYWJzb2x1dGUgPQorICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCB8fCBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQ7CisKICAgLy8gRGlzcGF0Y2ggcHJvcGVydHkgc2V0dGluZy4KICAgc3dpdGNoIChzY29wZSkgewogICAgIGNhc2UgY21Qcm9wZXJ0eTo6R0xPQkFMOgpAQCAtMTcyLDcgKzM0Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRBc1N0cmluZywgYXBwZW5kTW9kZSwgcmVtb3ZlKTsKICAgICBjYXNlIGNtUHJvcGVydHk6OlNPVVJDRV9GSUxFOgogICAgICAgcmV0dXJuIEhhbmRsZVNvdXJjZU1vZGUoc3RhdHVzLCBuYW1lcywgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQXNTdHJpbmcsIGFwcGVuZE1vZGUsIHJlbW92ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRBc1N0cmluZywgYXBwZW5kTW9kZSwgcmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSk7CiAgICAgY2FzZSBjbVByb3BlcnR5OjpURVNUOgogICAgICAgcmV0dXJuIEhhbmRsZVRlc3RNb2RlKHN0YXR1cywgbmFtZXMsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRBc1N0cmluZywgYXBwZW5kTW9kZSwgcmVtb3ZlKTsKQEAgLTE5NCw5ICszNzEsOCBAQAogYm9vbCBIYW5kbGVHbG9iYWxNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICBpZiAoIW5hbWVzLmVtcHR5KCkpIHsKICAgICBzdGF0dXMuU2V0RXJyb3IoImdpdmVuIG5hbWVzIGZvciBHTE9CQUwgc2NvcGUuIik7CkBAIC0yMDUsMTQgKzM4MSwxNCBAQAogCiAgIC8vIFNldCBvciBhcHBlbmQgdGhlIHByb3BlcnR5LgogICBjbWFrZSogY20gPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCk7Ci0gIGNvbnN0IGNoYXIqIHZhbHVlID0gcHJvcGVydHlWYWx1ZS5jX3N0cigpOwotICBpZiAocmVtb3ZlKSB7Ci0gICAgdmFsdWUgPSBudWxscHRyOwotICB9CiAgIGlmIChhcHBlbmRNb2RlKSB7Ci0gICAgY20tPkFwcGVuZFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUgPyB2YWx1ZSA6ICIiLCBhcHBlbmRBc1N0cmluZyk7CisgICAgY20tPkFwcGVuZFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgYXBwZW5kQXNTdHJpbmcpOwogICB9IGVsc2UgewotICAgIGNtLT5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBpZiAocmVtb3ZlKSB7CisgICAgICBjbS0+U2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBudWxscHRyKTsKKyAgICB9IGVsc2UgeworICAgICAgY20tPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZS5jX3N0cigpKTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4gdHJ1ZTsKQEAgLTIyMSw5ICszOTcsOCBAQAogYm9vbCBIYW5kbGVEaXJlY3RvcnlNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICBpZiAobmFtZXMuc2l6ZSgpID4gMSkgewogICAgIHN0YXR1cy5TZXRFcnJvcigiYWxsb3dzIGF0IG1vc3Qgb25lIG5hbWUgZm9yIERJUkVDVE9SWSBzY29wZS4iKTsKQEAgLTIzNywxNCArNDEyLDggQEAKICAgaWYgKCFuYW1lcy5lbXB0eSgpKSB7CiAgICAgLy8gQ29uc3RydWN0IHRoZSBkaXJlY3RvcnkgbmFtZS4gIEludGVycHJldCByZWxhdGl2ZSBwYXRocyB3aXRoCiAgICAgLy8gcmVzcGVjdCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0gICAgc3RkOjpzdHJpbmcgZGlyID0gKm5hbWVzLmJlZ2luKCk7Ci0gICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChkaXIpKSB7Ci0gICAgICBkaXIgPSBjbVN0ckNhdChzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCksICcvJywKLSAgICAgICAgICAgICAgICAgICAgICpuYW1lcy5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgbG9jYWwgZ2VuZXJhdG9ycyBhcmUgYXNzb2NpYXRlZCB3aXRoIGNvbGxhcHNlZCBwYXRocy4KLSAgICBkaXIgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGRpcik7CisgICAgc3RkOjpzdHJpbmcgZGlyID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCgKKyAgICAgICpuYW1lcy5iZWdpbigpLCBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkpOwogCiAgICAgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRHbG9iYWxHZW5lcmF0b3IoKS0+RmluZE1ha2VmaWxlKGRpcik7CiAgICAgaWYgKCFtZikgewpAQCAtMjU4LDE0ICs0MjcsMTQgQEAKICAgfQogCiAgIC8vIFNldCBvciBhcHBlbmQgdGhlIHByb3BlcnR5LgotICBjb25zdCBjaGFyKiB2YWx1ZSA9IHByb3BlcnR5VmFsdWUuY19zdHIoKTsKLSAgaWYgKHJlbW92ZSkgewotICAgIHZhbHVlID0gbnVsbHB0cjsKLSAgfQogICBpZiAoYXBwZW5kTW9kZSkgewotICAgIG1mLT5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlID8gdmFsdWUgOiAiIiwgYXBwZW5kQXNTdHJpbmcpOworICAgIG1mLT5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUsIGFwcGVuZEFzU3RyaW5nKTsKICAgfSBlbHNlIHsKLSAgICBtZi0+U2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgaWYgKHJlbW92ZSkgeworICAgICAgbWYtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbnVsbHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgIG1mLT5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUuY19zdHIoKSk7CisgICAgfQogICB9CiAKICAgcmV0dXJuIHRydWU7CkBAIC0yNzQsOSArNDQzLDggQEAKIGJvb2wgSGFuZGxlVGFyZ2V0TW9kZShjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFwcGVuZEFzU3RyaW5nLCBjb25zdCBib29sIGFwcGVuZE1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGJvb2wgYXBwZW5kQXNTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IG5hbWVzKSB7CiAgICAgaWYgKHN0YXR1cy5HZXRNYWtlZmlsZSgpLklzQWxpYXMobmFtZSkpIHsKQEAgLTMwMCwxOCArNDY4LDE4IEBACiAKIGJvb2wgSGFuZGxlVGFyZ2V0KGNtVGFyZ2V0KiB0YXJnZXQsIGNtTWFrZWZpbGUmIG1ha2VmaWxlLAogICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBjb25zdCBib29sIGFwcGVuZEFzU3RyaW5nLAotICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBhcHBlbmRNb2RlLCBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBib29sIGFwcGVuZEFzU3RyaW5nLAorICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgLy8gU2V0IG9yIGFwcGVuZCB0aGUgcHJvcGVydHkuCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gcHJvcGVydHlWYWx1ZS5jX3N0cigpOwotICBpZiAocmVtb3ZlKSB7Ci0gICAgdmFsdWUgPSBudWxscHRyOwotICB9CiAgIGlmIChhcHBlbmRNb2RlKSB7Ci0gICAgdGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhcHBlbmRBc1N0cmluZyk7CisgICAgdGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUsIGFwcGVuZEFzU3RyaW5nKTsKICAgfSBlbHNlIHsKLSAgICB0YXJnZXQtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIGlmIChyZW1vdmUpIHsKKyAgICAgIHRhcmdldC0+U2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBudWxscHRyKTsKKyAgICB9IGVsc2UgeworICAgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUpOworICAgIH0KICAgfQogCiAgIC8vIENoZWNrIHRoZSByZXN1bHRpbmcgdmFsdWUuCkBAIC0zMjMsNDkgKzQ5MSw1NyBAQAogYm9vbCBIYW5kbGVTb3VyY2VNb2RlKGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtTWFrZWZpbGUqPiYgZGlyZWN0b3J5X21ha2VmaWxlcywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSkKIHsKLSAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSA6IG5hbWVzKSB7Ci0gICAgLy8gR2V0IHRoZSBzb3VyY2UgZmlsZS4KLSAgICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldE9yQ3JlYXRlU291cmNlKG5hbWUpKSB7Ci0gICAgICBpZiAoIUhhbmRsZVNvdXJjZShzZiwgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlLCBhcHBlbmRBc1N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE1vZGUsIHJlbW92ZSkpIHsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzX2Fic29sdXRlOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdW5pcXVlX2ZpbGVzKG5hbWVzLmJlZ2luKCksIG5hbWVzLmVuZCgpKTsKKyAgU2V0UHJvcGVydHlDb21tYW5kOjpNYWtlU291cmNlRmlsZVBhdGhzQWJzb2x1dGVJZk5lZWRlZCgKKyAgICBzdGF0dXMsIGZpbGVzX2Fic29sdXRlLCB1bmlxdWVfZmlsZXMuYmVnaW4oKSwgdW5pcXVlX2ZpbGVzLmVuZCgpLAorICAgIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSk7CisKKyAgZm9yIChjb25zdCBhdXRvIG1mIDogZGlyZWN0b3J5X21ha2VmaWxlcykgeworICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgOiBmaWxlc19hYnNvbHV0ZSkgeworICAgICAgLy8gR2V0IHRoZSBzb3VyY2UgZmlsZS4KKyAgICAgIGlmIChjbVNvdXJjZUZpbGUqIHNmID0gbWYtPkdldE9yQ3JlYXRlU291cmNlKG5hbWUpKSB7CisgICAgICAgIGlmICghSGFuZGxlU291cmNlKHNmLCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUsIGFwcGVuZEFzU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRNb2RlLCByZW1vdmUpKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoCisgICAgICAgICAgImdpdmVuIFNPVVJDRSBuYW1lIHRoYXQgY291bGQgbm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQ6ICIsIG5hbWUpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBzdGF0dXMuU2V0RXJyb3IoY21TdHJDYXQoCi0gICAgICAgICJnaXZlbiBTT1VSQ0UgbmFtZSB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBjcmVhdGVkOiAiLCBuYW1lKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICB9CisKICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSGFuZGxlU291cmNlKGNtU291cmNlRmlsZSogc2YsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgY29uc3QgYm9vbCBhcHBlbmRBc1N0cmluZywKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwgY29uc3QgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgIGJvb2wgYXBwZW5kTW9kZSwgYm9vbCByZW1vdmUpCiB7CiAgIC8vIFNldCBvciBhcHBlbmQgdGhlIHByb3BlcnR5LgotICBjb25zdCBjaGFyKiB2YWx1ZSA9IHByb3BlcnR5VmFsdWUuY19zdHIoKTsKLSAgaWYgKHJlbW92ZSkgewotICAgIHZhbHVlID0gbnVsbHB0cjsKLSAgfQotCiAgIGlmIChhcHBlbmRNb2RlKSB7Ci0gICAgc2YtPkFwcGVuZFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUsIGFwcGVuZEFzU3RyaW5nKTsKKyAgICBzZi0+QXBwZW5kUHJvcGVydHkocHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlLCBhcHBlbmRBc1N0cmluZyk7CiAgIH0gZWxzZSB7Ci0gICAgc2YtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIGlmIChyZW1vdmUpIHsKKyAgICAgIHNmLT5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG51bGxwdHIpOworICAgIH0gZWxzZSB7CisgICAgICBzZi0+U2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlLmNfc3RyKCkpOworICAgIH0KICAgfQogICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBIYW5kbGVUZXN0TW9kZShjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIG5hbWVzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBhcHBlbmRBc1N0cmluZywgY29uc3QgYm9vbCBhcHBlbmRNb2RlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGJvb2wgYXBwZW5kQXNTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIGJvb2wgYXBwZW5kTW9kZSwgYm9vbCByZW1vdmUpCiB7CiAgIC8vIExvb2sgZm9yIHRlc3RzIHdpdGggYWxsIG5hbWVzIGdpdmVuLgogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz46Oml0ZXJhdG9yIG5leHQ7CkBAIC0zOTYsMTggKzU3MiwxOCBAQAogfQogCiBib29sIEhhbmRsZVRlc3QoY21UZXN0KiB0ZXN0LCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBjb25zdCBib29sIGFwcGVuZEFzU3RyaW5nLAotICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwgY29uc3QgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGJvb2wgYXBwZW5kQXNTdHJpbmcsCisgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgLy8gU2V0IG9yIGFwcGVuZCB0aGUgcHJvcGVydHkuCi0gIGNvbnN0IGNoYXIqIHZhbHVlID0gcHJvcGVydHlWYWx1ZS5jX3N0cigpOwotICBpZiAocmVtb3ZlKSB7Ci0gICAgdmFsdWUgPSBudWxscHRyOwotICB9CiAgIGlmIChhcHBlbmRNb2RlKSB7Ci0gICAgdGVzdC0+QXBwZW5kUHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSwgYXBwZW5kQXNTdHJpbmcpOworICAgIHRlc3QtPkFwcGVuZFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgYXBwZW5kQXNTdHJpbmcpOwogICB9IGVsc2UgewotICAgIHRlc3QtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIGlmIChyZW1vdmUpIHsKKyAgICAgIHRlc3QtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgbnVsbHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3QtPlNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZS5jX3N0cigpKTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4gdHJ1ZTsKQEAgLTQxNiw5ICs1OTIsOCBAQAogYm9vbCBIYW5kbGVDYWNoZU1vZGUoY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFwcGVuZEFzU3RyaW5nLCBjb25zdCBib29sIGFwcGVuZE1vZGUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBib29sIGFwcGVuZEFzU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCBhcHBlbmRNb2RlLCBib29sIHJlbW92ZSkKIHsKICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiQURWQU5DRUQiKSB7CiAgICAgaWYgKCFyZW1vdmUgJiYgIWNtSXNPbihwcm9wZXJ0eVZhbHVlKSAmJiAhY21Jc09mZihwcm9wZXJ0eVZhbHVlKSkgewpAQCAtNDQ1LDcgKzYyMCw3IEBACiAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgOiBuYW1lcykgewogICAgIC8vIEdldCB0aGUgc291cmNlIGZpbGUuCiAgICAgY21ha2UqIGNtID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0Q01ha2VJbnN0YW5jZSgpOwotICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nVmFsdWUgPSBjbS0+R2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVZhbHVlKG5hbWUpOworICAgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0gY20tPkdldFN0YXRlKCktPkdldENhY2hlRW50cnlWYWx1ZShuYW1lKTsKICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkgewogICAgICAgaWYgKCFIYW5kbGVDYWNoZUVudHJ5KG5hbWUsIHN0YXR1cy5HZXRNYWtlZmlsZSgpLCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZSwgYXBwZW5kQXNTdHJpbmcsIGFwcGVuZE1vZGUsCkBAIC00NjMsMjEgKzYzOCwxOSBAQAogCiBib29sIEhhbmRsZUNhY2hlRW50cnkoc3RkOjpzdHJpbmcgY29uc3QmIGNhY2hlS2V5LCBjb25zdCBjbU1ha2VmaWxlJiBtYWtlZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICAvLyBTZXQgb3IgYXBwZW5kIHRoZSBwcm9wZXJ0eS4KLSAgY29uc3QgY2hhciogdmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmNfc3RyKCk7CiAgIGNtU3RhdGUqIHN0YXRlID0gbWFrZWZpbGUuR2V0U3RhdGUoKTsKICAgaWYgKHJlbW92ZSkgewogICAgIHN0YXRlLT5SZW1vdmVDYWNoZUVudHJ5UHJvcGVydHkoY2FjaGVLZXksIHByb3BlcnR5TmFtZSk7CiAgIH0KICAgaWYgKGFwcGVuZE1vZGUpIHsKLSAgICBzdGF0ZS0+QXBwZW5kQ2FjaGVFbnRyeVByb3BlcnR5KGNhY2hlS2V5LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLAorICAgIHN0YXRlLT5BcHBlbmRDYWNoZUVudHJ5UHJvcGVydHkoY2FjaGVLZXksIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEFzU3RyaW5nKTsKICAgfSBlbHNlIHsKLSAgICBzdGF0ZS0+U2V0Q2FjaGVFbnRyeVByb3BlcnR5KGNhY2hlS2V5LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBzdGF0ZS0+U2V0Q2FjaGVFbnRyeVByb3BlcnR5KGNhY2hlS2V5LCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUpOwogICB9CiAKICAgcmV0dXJuIHRydWU7CkBAIC00ODYsOSArNjU5LDggQEAKIGJvb2wgSGFuZGxlSW5zdGFsbE1vZGUoY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsIGNvbnN0IGJvb2wgYXBwZW5kTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCByZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eVZhbHVlLCBib29sIGFwcGVuZEFzU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICBjbWFrZSogY20gPSBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDTWFrZUluc3RhbmNlKCk7CiAKQEAgLTUxMCwxNyArNjgyLDE3IEBACiAKIGJvb2wgSGFuZGxlSW5zdGFsbChjbUluc3RhbGxlZEZpbGUqIGZpbGUsIGNtTWFrZWZpbGUmIG1ha2VmaWxlLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5VmFsdWUsIGNvbnN0IGJvb2wgYXBwZW5kQXNTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBhcHBlbmRNb2RlLCBjb25zdCBib29sIHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHlWYWx1ZSwgYm9vbCBhcHBlbmRBc1N0cmluZywKKyAgICAgICAgICAgICAgICAgICBib29sIGFwcGVuZE1vZGUsIGJvb2wgcmVtb3ZlKQogewogICAvLyBTZXQgb3IgYXBwZW5kIHRoZSBwcm9wZXJ0eS4KLSAgY29uc3QgY2hhciogdmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmNfc3RyKCk7CiAgIGlmIChyZW1vdmUpIHsKICAgICBmaWxlLT5SZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogICB9IGVsc2UgaWYgKGFwcGVuZE1vZGUpIHsKLSAgICBmaWxlLT5BcHBlbmRQcm9wZXJ0eSgmbWFrZWZpbGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGFwcGVuZEFzU3RyaW5nKTsKKyAgICBmaWxlLT5BcHBlbmRQcm9wZXJ0eSgmbWFrZWZpbGUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRBc1N0cmluZyk7CiAgIH0gZWxzZSB7Ci0gICAgZmlsZS0+U2V0UHJvcGVydHkoJm1ha2VmaWxlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBmaWxlLT5TZXRQcm9wZXJ0eSgmbWFrZWZpbGUsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSk7CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXRQcm9wZXJ0eUNvbW1hbmQuaCBiL1NvdXJjZS9jbVNldFByb3BlcnR5Q29tbWFuZC5oCmluZGV4IGVjMzZmODQuLmFmNTY2YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNldFByb3BlcnR5Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9jbVNldFByb3BlcnR5Q29tbWFuZC5oCkBAIC04LDkgKzgsMzggQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCitjbGFzcyBjbU1ha2VmaWxlOwogY2xhc3MgY21FeGVjdXRpb25TdGF0dXM7CiAKIGJvb2wgY21TZXRQcm9wZXJ0eUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKTsKIAorbmFtZXNwYWNlIFNldFByb3BlcnR5Q29tbWFuZCB7Citib29sIEhhbmRsZVNvdXJjZUZpbGVEaXJlY3RvcnlTY29wZXMoCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc291cmNlX2ZpbGVfZGlyZWN0b3JpZXMsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLAorICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4mIGRpcmVjdG9yeV9tYWtlZmlsZXMpOworCitib29sIEhhbmRsZVNvdXJjZUZpbGVEaXJlY3RvcnlTY29wZVZhbGlkYXRpb24oCisgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMsIGJvb2wgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkLAorICBib29sIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCwKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZV9kaXJlY3RvcmllcywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZV90YXJnZXRfZGlyZWN0b3JpZXMpOworCitib29sIEhhbmRsZUFuZFZhbGlkYXRlU291cmNlRmlsZURpcmVjdG9ydG9yeVNjb3BlcygKKyAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywgYm9vbCBzb3VyY2VfZGlyZWN0b3JpZXNfb3B0aW9uX2VuY291bnRlcmVkLAorICBib29sIHNvdXJjZV90YXJnZXRfZGlyZWN0b3JpZXNfb3B0aW9uX2VuY291bnRlcmVkLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHNvdXJjZV9kaXJlY3RvcmllcywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfdGFyZ2V0X2RpcmVjdG9yaWVzLAorICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4mIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9tYWtlZmlsZXMpOworCitzdGQ6OnN0cmluZyBNYWtlU291cmNlRmlsZVBhdGhBYnNvbHV0ZUlmTmVlZGVkKAorICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzLCBjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlX2ZpbGVfcGF0aCwgYm9vbCBuZWVkZWQpOwordm9pZCBNYWtlU291cmNlRmlsZVBhdGhzQWJzb2x1dGVJZk5lZWRlZCgKKyAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cywKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBzb3VyY2VfZmlsZXNfYWJzb2x1dGVfcGF0aHMsCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZXNfaXRfYmVnaW4sCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZXNfaXRfZW5kLCBib29sIG5lZWRlZCk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2V0U291cmNlRmlsZXNQcm9wZXJ0aWVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21TZXRTb3VyY2VGaWxlc1Byb3BlcnRpZXNDb21tYW5kLmN4eAppbmRleCA3ZmY2MDRiLi5jMWIwYzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TZXRTb3VyY2VGaWxlc1Byb3BlcnRpZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21TZXRTb3VyY2VGaWxlc1Byb3BlcnRpZXNDb21tYW5kLmN4eApAQCAtMiwxNyArMiwyMyBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21TZXRTb3VyY2VGaWxlc1Byb3BlcnRpZXNDb21tYW5kLmgiCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisKICNpbmNsdWRlICJjbUV4ZWN1dGlvblN0YXR1cy5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVNldFByb3BlcnR5Q29tbWFuZC5oIgogI2luY2x1ZGUgImNtU291cmNlRmlsZS5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogCi1zdGF0aWMgYm9vbCBSdW5Db21tYW5kKGNtTWFrZWZpbGUqIG1mLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGZpbGViZWcsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZWVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwcm9wYmVnLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHByb3BlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBlcnJvcnMpOworc3RhdGljIGJvb2wgUnVuQ29tbWFuZEZvclNjb3BlKAorICBjbU1ha2VmaWxlKiBtZiwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBmaWxlX2JlZ2luLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGZpbGVfZW5kLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHByb3BfYmVnaW4sCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcHJvcF9lbmQsIHN0ZDo6c3RyaW5nJiBlcnJvcnMpOwogCiBib29sIGNtU2V0U291cmNlRmlsZXNQcm9wZXJ0aWVzQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUV4ZWN1dGlvblN0YXR1cyYgc3RhdHVzKQpAQCAtMjMsNTYgKzI5LDEwNiBAQAogICB9CiAKICAgLy8gYnJlYWsgdGhlIGFyZ3VtZW50cyBpbnRvIHNvdXJjZSBmaWxlIG5hbWVzIGFuZCBwcm9wZXJ0aWVzCi0gIGludCBudW1GaWxlcyA9IDA7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgajsKLSAgaiA9IGFyZ3MuYmVnaW4oKTsKICAgLy8gb2xkIHN0eWxlIGFsbG93cyBmb3Igc3BlY2lmaWVyIGJlZm9yZSBQUk9QRVJUSUVTIGtleXdvcmQKLSAgd2hpbGUgKGogIT0gYXJncy5lbmQoKSAmJiAqaiAhPSAiQUJTVFJBQ1QiICYmICpqICE9ICJXUkFQX0VYQ0xVREUiICYmCi0gICAgICAgICAqaiAhPSAiR0VORVJBVEVEIiAmJiAqaiAhPSAiQ09NUElMRV9GTEFHUyIgJiYKLSAgICAgICAgICpqICE9ICJPQkpFQ1RfREVQRU5EUyIgJiYgKmogIT0gIlBST1BFUlRJRVMiKSB7Ci0gICAgbnVtRmlsZXMrKzsKLSAgICArK2o7CisgIHN0YXRpYyBjb25zdCBjbTo6c3RyaW5nX3ZpZXcgcHJvcF9uYW1lc1tdID0geworICAgICJBQlNUUkFDVCIsICAgICAgICJHRU5FUkFURUQiLCAgIldSQVBfRVhDTFVERSIsICJDT01QSUxFX0ZMQUdTIiwKKyAgICAiT0JKRUNUX0RFUEVORFMiLCAiUFJPUEVSVElFUyIsICJESVJFQ1RPUlkiLCAgICAiVEFSR0VUX0RJUkVDVE9SWSIKKyAgfTsKKworICBhdXRvIGlzQVByb3BlcnR5S2V5d29yZCA9CisgICAgW10oY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciYgYXJnX2l0KSB7CisgICAgICByZXR1cm4gc3RkOjphbnlfb2YoCisgICAgICAgIHN0ZDo6YmVnaW4ocHJvcF9uYW1lcyksIHN0ZDo6ZW5kKHByb3BfbmFtZXMpLAorICAgICAgICBbJmFyZ19pdF0oY206OnN0cmluZ192aWV3IHByb3BfbmFtZSkgeyByZXR1cm4gKmFyZ19pdCA9PSBwcm9wX25hbWU7IH0pOworICAgIH07CisKKyAgYXV0byBvcHRpb25zX2JlZ2luID0gc3RkOjpmaW5kX2ZpcnN0X29mKAorICAgIGFyZ3MuYmVnaW4oKSwgYXJncy5lbmQoKSwgc3RkOjpiZWdpbihwcm9wX25hbWVzKSwgc3RkOjplbmQocHJvcF9uYW1lcykpOworICBhdXRvIG9wdGlvbnNfaXQgPSBvcHRpb25zX2JlZ2luOworCisgIC8vIEhhbmRsZSBkaXJlY3Rvcnkgb3B0aW9ucy4KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzOworICBib29sIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCA9IGZhbHNlOworICBib29sIHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZCA9IGZhbHNlOworICBzdGQ6OnZlY3RvcjxjbU1ha2VmaWxlKj4gc291cmNlX2ZpbGVfZGlyZWN0b3J5X21ha2VmaWxlczsKKworICBlbnVtIERvaW5nCisgIHsKKyAgICBEb2luZ05vbmUsCisgICAgRG9pbmdTb3VyY2VEaXJlY3RvcnksCisgICAgRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkKKyAgfTsKKyAgRG9pbmcgZG9pbmcgPSBEb2luZ05vbmU7CisgIGZvciAoOyBvcHRpb25zX2l0ICE9IGFyZ3MuZW5kKCk7ICsrb3B0aW9uc19pdCkgeworICAgIGlmICgqb3B0aW9uc19pdCA9PSAiRElSRUNUT1JZIikgeworICAgICAgZG9pbmcgPSBEb2luZ1NvdXJjZURpcmVjdG9yeTsKKyAgICAgIHNvdXJjZV9maWxlX2RpcmVjdG9yeV9vcHRpb25fZW5hYmxlZCA9IHRydWU7CisgICAgfSBlbHNlIGlmICgqb3B0aW9uc19pdCA9PSAiVEFSR0VUX0RJUkVDVE9SWSIpIHsKKyAgICAgIGRvaW5nID0gRG9pbmdTb3VyY2VUYXJnZXREaXJlY3Rvcnk7CisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoaXNBUHJvcGVydHlLZXl3b3JkKG9wdGlvbnNfaXQpKSB7CisgICAgICBicmVhazsKKyAgICB9IGVsc2UgaWYgKGRvaW5nID09IERvaW5nU291cmNlRGlyZWN0b3J5KSB7CisgICAgICBzb3VyY2VfZmlsZV9kaXJlY3Rvcmllcy5wdXNoX2JhY2soKm9wdGlvbnNfaXQpOworICAgIH0gZWxzZSBpZiAoZG9pbmcgPT0gRG9pbmdTb3VyY2VUYXJnZXREaXJlY3RvcnkpIHsKKyAgICAgIHNvdXJjZV9maWxlX3RhcmdldF9kaXJlY3Rvcmllcy5wdXNoX2JhY2soKm9wdGlvbnNfaXQpOworICAgIH0gZWxzZSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoCisgICAgICAgIGNtU3RyQ2F0KCJnaXZlbiBpbnZhbGlkIGFyZ3VtZW50IFwiIiwgKm9wdGlvbnNfaXQsICJcIi4iKSk7CisgICAgfQogICB9CiAKLSAgY21NYWtlZmlsZSYgbWYgPSBzdGF0dXMuR2V0TWFrZWZpbGUoKTsKKyAgY29uc3QgYXV0byBwcm9wc19iZWdpbiA9IG9wdGlvbnNfaXQ7CiAKLSAgLy8gbm93IGNhbGwgdGhlIHdvcmtlciBmdW5jdGlvbgorICBib29sIGZpbGVfc2NvcGVzX2hhbmRsZWQgPQorICAgIFNldFByb3BlcnR5Q29tbWFuZDo6SGFuZGxlQW5kVmFsaWRhdGVTb3VyY2VGaWxlRGlyZWN0b3J0b3J5U2NvcGVzKAorICAgICAgc3RhdHVzLCBzb3VyY2VfZmlsZV9kaXJlY3Rvcnlfb3B0aW9uX2VuYWJsZWQsCisgICAgICBzb3VyY2VfZmlsZV90YXJnZXRfb3B0aW9uX2VuYWJsZWQsIHNvdXJjZV9maWxlX2RpcmVjdG9yaWVzLAorICAgICAgc291cmNlX2ZpbGVfdGFyZ2V0X2RpcmVjdG9yaWVzLCBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzKTsKKyAgaWYgKCFmaWxlX3Njb3Blc19oYW5kbGVkKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzOworICBib29sIHNvdXJjZV9maWxlX3BhdGhzX3Nob3VsZF9iZV9hYnNvbHV0ZSA9CisgICAgc291cmNlX2ZpbGVfZGlyZWN0b3J5X29wdGlvbl9lbmFibGVkIHx8IHNvdXJjZV9maWxlX3RhcmdldF9vcHRpb25fZW5hYmxlZDsKKyAgU2V0UHJvcGVydHlDb21tYW5kOjpNYWtlU291cmNlRmlsZVBhdGhzQWJzb2x1dGVJZk5lZWRlZCgKKyAgICBzdGF0dXMsIGZpbGVzLCBhcmdzLmJlZ2luKCksIG9wdGlvbnNfYmVnaW4sCisgICAgc291cmNlX2ZpbGVfcGF0aHNfc2hvdWxkX2JlX2Fic29sdXRlKTsKKworICAvLyBOb3cgY2FsbCB0aGUgd29ya2VyIGZ1bmN0aW9uIGZvciBlYWNoIGRpcmVjdG9yeSBzY29wZSByZXByZXNlbnRlZCBieSBhCisgIC8vIGNtTWFrZWZpbGUgaW5zdGFuY2UuCiAgIHN0ZDo6c3RyaW5nIGVycm9yczsKLSAgYm9vbCByZXQgPSBSdW5Db21tYW5kKCZtZiwgYXJncy5iZWdpbigpLCBhcmdzLmJlZ2luKCkgKyBudW1GaWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYmVnaW4oKSArIG51bUZpbGVzLCBhcmdzLmVuZCgpLCBlcnJvcnMpOwotICBpZiAoIXJldCkgewotICAgIHN0YXR1cy5TZXRFcnJvcihlcnJvcnMpOworICBmb3IgKGNvbnN0IGF1dG8gbWYgOiBzb3VyY2VfZmlsZV9kaXJlY3RvcnlfbWFrZWZpbGVzKSB7CisgICAgYm9vbCByZXQgPSBSdW5Db21tYW5kRm9yU2NvcGUobWYsIGZpbGVzLmJlZ2luKCksIGZpbGVzLmVuZCgpLCBwcm9wc19iZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmVuZCgpLCBlcnJvcnMpOworICAgIGlmICghcmV0KSB7CisgICAgICBzdGF0dXMuU2V0RXJyb3IoZXJyb3JzKTsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQogICB9Ci0gIHJldHVybiByZXQ7CisKKyAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIFJ1bkNvbW1hbmQoY21NYWtlZmlsZSogbWYsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZWJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBmaWxlZW5kLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHByb3BiZWcsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcHJvcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGVycm9ycykKK3N0YXRpYyBib29sIFJ1bkNvbW1hbmRGb3JTY29wZSgKKyAgY21NYWtlZmlsZSogbWYsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmlsZV9iZWdpbiwKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBmaWxlX2VuZCwKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwcm9wX2JlZ2luLAorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHByb3BfZW5kLCBzdGQ6OnN0cmluZyYgZXJyb3JzKQogewogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcGVydHlQYWlyczsKLSAgYm9vbCBnZW5lcmF0ZWQgPSBmYWxzZTsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBqOwogICAvLyBidWlsZCB0aGUgcHJvcGVydHkgcGFpcnMKLSAgZm9yIChqID0gcHJvcGJlZzsgaiAhPSBwcm9wZW5kOyArK2opIHsKLSAgICAvLyBvbGQgc3R5bGUgYWxsb3dzIGZvciBzcGVjaWZpZXIgYmVmb3JlIFBST1BFUlRJRVMga2V5d29yZAotICAgIGlmICgqaiA9PSAiQUJTVFJBQ1QiKSB7Ci0gICAgICBwcm9wZXJ0eVBhaXJzLmVtcGxhY2VfYmFjaygiQUJTVFJBQ1QiKTsKLSAgICAgIHByb3BlcnR5UGFpcnMuZW1wbGFjZV9iYWNrKCIxIik7Ci0gICAgfSBlbHNlIGlmICgqaiA9PSAiV1JBUF9FWENMVURFIikgewotICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIldSQVBfRVhDTFVERSIpOwotICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIjEiKTsKLSAgICB9IGVsc2UgaWYgKCpqID09ICJHRU5FUkFURUQiKSB7Ci0gICAgICBnZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIkdFTkVSQVRFRCIpOworICBmb3IgKGF1dG8gaiA9IHByb3BfYmVnaW47IGogIT0gcHJvcF9lbmQ7ICsraikgeworICAgIC8vIGNvbnN1bWUgb2xkIHN0eWxlIG9wdGlvbnMKKyAgICBpZiAoKmogPT0gIkFCU1RSQUNUIiB8fCAqaiA9PSAiR0VORVJBVEVEIiB8fCAqaiA9PSAiV1JBUF9FWENMVURFIikgeworICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soKmopOwogICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIjEiKTsKICAgICB9IGVsc2UgaWYgKCpqID09ICJDT01QSUxFX0ZMQUdTIikgewogICAgICAgcHJvcGVydHlQYWlycy5lbXBsYWNlX2JhY2soIkNPTVBJTEVfRkxBR1MiKTsKICAgICAgICsrajsKLSAgICAgIGlmIChqID09IHByb3BlbmQpIHsKKyAgICAgIGlmIChqID09IHByb3BfZW5kKSB7CiAgICAgICAgIGVycm9ycyA9ICJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyAiCiAgICAgICAgICAgICAgICAgICJDT01QSUxFX0ZMQUdTIHdpdGggbm8gZmxhZ3MiOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04MSwzMyArMTM3LDIyIEBACiAgICAgfSBlbHNlIGlmICgqaiA9PSAiT0JKRUNUX0RFUEVORFMiKSB7CiAgICAgICBwcm9wZXJ0eVBhaXJzLmVtcGxhY2VfYmFjaygiT0JKRUNUX0RFUEVORFMiKTsKICAgICAgICsrajsKLSAgICAgIGlmIChqID09IHByb3BlbmQpIHsKKyAgICAgIGlmIChqID09IHByb3BfZW5kKSB7CiAgICAgICAgIGVycm9ycyA9ICJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyAiCiAgICAgICAgICAgICAgICAgICJPQkpFQ1RfREVQRU5EUyB3aXRoIG5vIGRlcGVuZGVuY2llcyI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICAgIHByb3BlcnR5UGFpcnMucHVzaF9iYWNrKCpqKTsKICAgICB9IGVsc2UgaWYgKCpqID09ICJQUk9QRVJUSUVTIikgewotICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLCBuZXcgc3R5bGUKLSAgICAgICsrajsKLSAgICAgIHdoaWxlIChqICE9IHByb3BlbmQpIHsKLSAgICAgICAgcHJvcGVydHlQYWlycy5wdXNoX2JhY2soKmopOwotICAgICAgICBpZiAoKmogPT0gIkdFTkVSQVRFRCIpIHsKLSAgICAgICAgICArK2o7Ci0gICAgICAgICAgaWYgKGogIT0gcHJvcGVuZCAmJiBjbUlzT24oKmopKSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICArK2o7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGogPT0gcHJvcGVuZCkgewotICAgICAgICAgIGVycm9ycyA9ICJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cy4iOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBwcm9wZXJ0eVBhaXJzLnB1c2hfYmFjaygqaik7Ci0gICAgICAgICsrajsKKyAgICAgIC8vIFBST1BFUlRJRVMgaXMgZm9sbG93ZWQgYnkgbmV3IHN0eWxlIHByb3AgdmFsdWUgcGFpcnMKKyAgICAgIGNtU3RyaW5nUmFuZ2UgbmV3U3R5bGVQcm9wc3sgaiArIDEsIHByb3BfZW5kIH07CisgICAgICBpZiAobmV3U3R5bGVQcm9wcy5zaXplKCkgJSAyICE9IDApIHsKKyAgICAgICAgZXJyb3JzID0gImNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLiI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KLSAgICAgIC8vIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBiZWNhdXNlIGogaXMgYWxyZWFkeSA9PSBlbmQKKyAgICAgIC8vIHNldCBuZXdTdHlsZVByb3BzIGFzIGlzLgorICAgICAgY206OmFwcGVuZChwcm9wZXJ0eVBhaXJzLCBuZXdTdHlsZVByb3BzKTsKKyAgICAgIC8vIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAgIGJyZWFrOwogICAgIH0gZWxzZSB7CiAgICAgICBlcnJvcnMgPSAiY2FsbGVkIHdpdGggaWxsZWdhbCBhcmd1bWVudHMsIG1heWJlIG1pc3NpbmcgYSAiCkBAIC0xMTYsMTUgKzE2MSwxMyBAQAogICAgIH0KICAgfQogCi0gIC8vIG5vdyBsb29wIG92ZXIgYWxsIHRoZSBmaWxlcwotICBmb3IgKGogPSBmaWxlYmVnOyBqICE9IGZpbGVlbmQ7ICsraikgeworICAvLyBsb29wIG92ZXIgYWxsIHRoZSBmaWxlcworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBzZm5hbWUgOiBjbVN0cmluZ1JhbmdleyBmaWxlX2JlZ2luLCBmaWxlX2VuZCB9KSB7CiAgICAgLy8gZ2V0IHRoZSBzb3VyY2UgZmlsZQotICAgIGNtU291cmNlRmlsZSogc2YgPSBtZi0+R2V0T3JDcmVhdGVTb3VyY2UoKmosIGdlbmVyYXRlZCk7Ci0gICAgaWYgKHNmKSB7Ci0gICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIGFsbCB0aGUgcHJvcHMgYW5kIHNldCB0aGVtCi0gICAgICB1bnNpZ25lZCBpbnQgazsKLSAgICAgIGZvciAoayA9IDA7IGsgPCBwcm9wZXJ0eVBhaXJzLnNpemUoKTsgayA9IGsgKyAyKSB7Ci0gICAgICAgIHNmLT5TZXRQcm9wZXJ0eShwcm9wZXJ0eVBhaXJzW2tdLCBwcm9wZXJ0eVBhaXJzW2sgKyAxXS5jX3N0cigpKTsKKyAgICBpZiAoY21Tb3VyY2VGaWxlKiBzZiA9IG1mLT5HZXRPckNyZWF0ZVNvdXJjZShzZm5hbWUpKSB7CisgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIHByb3BzIGFuZCBzZXQgdGhlbQorICAgICAgZm9yIChhdXRvIGsgPSBwcm9wZXJ0eVBhaXJzLmJlZ2luKCk7IGsgIT0gcHJvcGVydHlQYWlycy5lbmQoKTsgayArPSAyKSB7CisgICAgICAgIHNmLT5TZXRQcm9wZXJ0eSgqaywgKGsgKyAxKS0+Y19zdHIoKSk7CiAgICAgICB9CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TZXRUYXJnZXRQcm9wZXJ0aWVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21TZXRUYXJnZXRQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKaW5kZXggOGQ5MTdkYi4uYmRjODRhZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2V0VGFyZ2V0UHJvcGVydGllc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVNldFRhcmdldFByb3BlcnRpZXNDb21tYW5kLmN4eApAQCAtMiwxOCArMiwxNCBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21TZXRUYXJnZXRQcm9wZXJ0aWVzQ29tbWFuZC5oIgogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGl0ZXJhdG9yPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21UYXJnZXQuaCIKIAotc3RhdGljIGJvb2wgU2V0T25lVGFyZ2V0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHByb3BlcnR5UGFpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYpOwotCiBib29sIGNtU2V0VGFyZ2V0UHJvcGVydGllc0NvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7CkBAIC0yMiw2MSArMTgsMzggQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICAvLyBmaXJzdCBjb2xsZWN0IHVwIHRoZSBsaXN0IG9mIGZpbGVzCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wZXJ0eVBhaXJzOwotICBpbnQgbnVtRmlsZXMgPSAwOwotICBmb3IgKGF1dG8gaiA9IGFyZ3MuYmVnaW4oKTsgaiAhPSBhcmdzLmVuZCgpOyArK2opIHsKLSAgICBpZiAoKmogPT0gIlBST1BFUlRJRVMiKSB7Ci0gICAgICAvLyBub3cgbG9vcCB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMsIG5ldyBzdHlsZQotICAgICAgKytqOwotICAgICAgaWYgKHN0ZDo6ZGlzdGFuY2UoaiwgYXJncy5lbmQoKSkgJSAyICE9IDApIHsKLSAgICAgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgY21BcHBlbmQocHJvcGVydHlQYWlycywgaiwgYXJncy5lbmQoKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgbnVtRmlsZXMrKzsKKyAgLy8gZmlyc3QgaWRlbnRpZnkgdGhlIHByb3BlcnRpZXMgYXJndW1lbnRzCisgIGF1dG8gcHJvcHNJdGVyID0gc3RkOjpmaW5kKGFyZ3MuYmVnaW4oKSwgYXJncy5lbmQoKSwgIlBST1BFUlRJRVMiKTsKKyAgaWYgKHByb3BzSXRlciA9PSBhcmdzLmVuZCgpIHx8IHByb3BzSXRlciArIDEgPT0gYXJncy5lbmQoKSkgeworICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaWxsZWdhbCBhcmd1bWVudHMsIG1heWJlIG1pc3NpbmcgYSAiCisgICAgICAgICAgICAgICAgICAgICJQUk9QRVJUSUVTIHNwZWNpZmllcj8iKTsKKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgaWYgKHByb3BlcnR5UGFpcnMuZW1wdHkoKSkgewotICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaWxsZWdhbCBhcmd1bWVudHMsIG1heWJlIG1pc3NpbmcgIgotICAgICAgICAgICAgICAgICAgICAiYSBQUk9QRVJUSUVTIHNwZWNpZmllcj8iKTsKKworICBpZiAoc3RkOjpkaXN0YW5jZShwcm9wc0l0ZXIsIGFyZ3MuZW5kKCkpICUgMiAhPSAxKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBjbU1ha2VmaWxlJiBtZiA9IHN0YXR1cy5HZXRNYWtlZmlsZSgpOwogCi0gIC8vIG5vdyBsb29wIG92ZXIgYWxsIHRoZSB0YXJnZXRzCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRmlsZXM7ICsraSkgewotICAgIGlmIChtZi5Jc0FsaWFzKGFyZ3NbaV0pKSB7CisgIC8vIGxvb3Agb3ZlciBhbGwgdGhlIHRhcmdldHMKKyAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgdG5hbWUgOiBjbVN0cmluZ1JhbmdleyBhcmdzLmJlZ2luKCksIHByb3BzSXRlciB9KSB7CisgICAgaWYgKG1mLklzQWxpYXModG5hbWUpKSB7CiAgICAgICBzdGF0dXMuU2V0RXJyb3IoImNhbiBub3QgYmUgdXNlZCBvbiBhbiBBTElBUyB0YXJnZXQuIik7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGJvb2wgcmV0ID0gU2V0T25lVGFyZ2V0KGFyZ3NbaV0sIHByb3BlcnR5UGFpcnMsICZtZik7Ci0gICAgaWYgKCFyZXQpIHsKKyAgICBpZiAoY21UYXJnZXQqIHRhcmdldCA9IG1mLkZpbmRUYXJnZXRUb1VzZSh0bmFtZSkpIHsKKyAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbGwgdGhlIHByb3BzIGFuZCBzZXQgdGhlbQorICAgICAgZm9yIChhdXRvIGsgPSBwcm9wc0l0ZXIgKyAxOyBrICE9IGFyZ3MuZW5kKCk7IGsgKz0gMikgeworICAgICAgICB0YXJnZXQtPlNldFByb3BlcnR5KCprLCAqKGsgKyAxKSk7CisgICAgICAgIHRhcmdldC0+Q2hlY2tQcm9wZXJ0eSgqaywgJm1mKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgewogICAgICAgc3RhdHVzLlNldEVycm9yKAotICAgICAgICBjbVN0ckNhdCgiQ2FuIG5vdCBmaW5kIHRhcmdldCB0byBhZGQgcHJvcGVydGllcyB0bzogIiwgYXJnc1tpXSkpOworICAgICAgICBjbVN0ckNhdCgiQ2FuIG5vdCBmaW5kIHRhcmdldCB0byBhZGQgcHJvcGVydGllcyB0bzogIiwgdG5hbWUpKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9Ci0KLXN0YXRpYyBib29sIFNldE9uZVRhcmdldChjb25zdCBzdGQ6OnN0cmluZyYgdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwcm9wZXJ0eVBhaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIG1mKQotewotICBpZiAoY21UYXJnZXQqIHRhcmdldCA9IG1mLT5GaW5kVGFyZ2V0VG9Vc2UodG5hbWUpKSB7Ci0gICAgLy8gbm93IGxvb3AgdGhyb3VnaCBhbGwgdGhlIHByb3BzIGFuZCBzZXQgdGhlbQotICAgIHVuc2lnbmVkIGludCBrOwotICAgIGZvciAoayA9IDA7IGsgPCBwcm9wZXJ0eVBhaXJzLnNpemUoKTsgayA9IGsgKyAyKSB7Ci0gICAgICB0YXJnZXQtPlNldFByb3BlcnR5KHByb3BlcnR5UGFpcnNba10sIHByb3BlcnR5UGFpcnNbayArIDFdLmNfc3RyKCkpOwotICAgICAgdGFyZ2V0LT5DaGVja1Byb3BlcnR5KHByb3BlcnR5UGFpcnNba10sIG1mKTsKLSAgICB9Ci0gIH0KLSAgLy8gaWYgZmlsZSBpcyBub3QgYWxyZWFkeSBpbiB0aGUgbWFrZWZpbGUsIHRoZW4gYWRkIGl0Ci0gIGVsc2UgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNldFRlc3RzUHJvcGVydGllc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKaW5kZXggZGU2MWVkYS4uYzRiZmY3NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5jeHgKQEAgLTIsMTggKzIsMTQgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtU2V0VGVzdHNQcm9wZXJ0aWVzQ29tbWFuZC5oIgogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGl0ZXJhdG9yPgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21UZXN0LmgiCiAKLXN0YXRpYyBib29sIFNldE9uZVRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHByb3BlcnR5UGFpcnMsIGNtTWFrZWZpbGUqIG1mLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZXJyb3JzKTsKLQogYm9vbCBjbVNldFRlc3RzUHJvcGVydGllc0NvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKIHsKQEAgLTIyLDYxICsxOCwzMyBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGNtTWFrZWZpbGUmIG1mID0gc3RhdHVzLkdldE1ha2VmaWxlKCk7Ci0KLSAgLy8gZmlyc3QgY29sbGVjdCB1cCB0aGUgbGlzdCBvZiBmaWxlcwotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcHJvcGVydHlQYWlyczsKLSAgaW50IG51bUZpbGVzID0gMDsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBqOwotICBmb3IgKGogPSBhcmdzLmJlZ2luKCk7IGogIT0gYXJncy5lbmQoKTsgKytqKSB7Ci0gICAgaWYgKCpqID09ICJQUk9QRVJUSUVTIikgewotICAgICAgLy8gbm93IGxvb3AgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLCBuZXcgc3R5bGUKLSAgICAgICsrajsKLSAgICAgIGlmIChzdGQ6OmRpc3RhbmNlKGosIGFyZ3MuZW5kKCkpICUgMiAhPSAwKSB7Ci0gICAgICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNtQXBwZW5kKHByb3BlcnR5UGFpcnMsIGosIGFyZ3MuZW5kKCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIG51bUZpbGVzKys7Ci0gIH0KLSAgaWYgKHByb3BlcnR5UGFpcnMuZW1wdHkoKSkgewotICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaWxsZWdhbCBhcmd1bWVudHMsIG1heWJlICIKLSAgICAgICAgICAgICAgICAgICAgIm1pc3NpbmcgYSBQUk9QRVJUSUVTIHNwZWNpZmllcj8iKTsKKyAgLy8gZmlyc3QgaWRlbnRpZnkgdGhlIHByb3BlcnRpZXMgYXJndW1lbnRzCisgIGF1dG8gcHJvcHNJdGVyID0gc3RkOjpmaW5kKGFyZ3MuYmVnaW4oKSwgYXJncy5lbmQoKSwgIlBST1BFUlRJRVMiKTsKKyAgaWYgKHByb3BzSXRlciA9PSBhcmdzLmVuZCgpIHx8IHByb3BzSXRlciArIDEgPT0gYXJncy5lbmQoKSkgeworICAgIHN0YXR1cy5TZXRFcnJvcigiY2FsbGVkIHdpdGggaWxsZWdhbCBhcmd1bWVudHMsIG1heWJlIG1pc3NpbmcgYSAiCisgICAgICAgICAgICAgICAgICAgICJQUk9QRVJUSUVTIHNwZWNpZmllcj8iKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICAvLyBub3cgbG9vcCBvdmVyIGFsbCB0aGUgdGFyZ2V0cwotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IG51bUZpbGVzOyArK2kpIHsKLSAgICBzdGQ6OnN0cmluZyBlcnJvcnM7Ci0gICAgYm9vbCByZXQgPSBTZXRPbmVUZXN0KGFyZ3NbaV0sIHByb3BlcnR5UGFpcnMsICZtZiwgZXJyb3JzKTsKLSAgICBpZiAoIXJldCkgewotICAgICAgc3RhdHVzLlNldEVycm9yKGVycm9ycyk7Ci0gICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBTZXRPbmVUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBwcm9wZXJ0eVBhaXJzLCBjbU1ha2VmaWxlKiBtZiwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGVycm9ycykKLXsKLSAgaWYgKGNtVGVzdCogdGVzdCA9IG1mLT5HZXRUZXN0KHRuYW1lKSkgewotICAgIC8vIG5vdyBsb29wIHRocm91Z2ggYWxsIHRoZSBwcm9wcyBhbmQgc2V0IHRoZW0KLSAgICB1bnNpZ25lZCBpbnQgazsKLSAgICBmb3IgKGsgPSAwOyBrIDwgcHJvcGVydHlQYWlycy5zaXplKCk7IGsgPSBrICsgMikgewotICAgICAgaWYgKCFwcm9wZXJ0eVBhaXJzW2tdLmVtcHR5KCkpIHsKLSAgICAgICAgdGVzdC0+U2V0UHJvcGVydHkocHJvcGVydHlQYWlyc1trXSwgcHJvcGVydHlQYWlyc1trICsgMV0uY19zdHIoKSk7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIGVycm9ycyA9IGNtU3RyQ2F0KCJDYW4gbm90IGZpbmQgdGVzdCB0byBhZGQgcHJvcGVydGllcyB0bzogIiwgdG5hbWUpOworICBpZiAoc3RkOjpkaXN0YW5jZShwcm9wc0l0ZXIsIGFyZ3MuZW5kKCkpICUgMiAhPSAxKSB7CisgICAgc3RhdHVzLlNldEVycm9yKCJjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAorICAvLyBsb29wIG92ZXIgYWxsIHRoZSB0ZXN0cworICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiB0bmFtZSA6IGNtU3RyaW5nUmFuZ2V7IGFyZ3MuYmVnaW4oKSwgcHJvcHNJdGVyIH0pIHsKKyAgICBpZiAoY21UZXN0KiB0ZXN0ID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0VGVzdCh0bmFtZSkpIHsKKyAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbGwgdGhlIHByb3BzIGFuZCBzZXQgdGhlbQorICAgICAgZm9yIChhdXRvIGsgPSBwcm9wc0l0ZXIgKyAxOyBrICE9IGFyZ3MuZW5kKCk7IGsgKz0gMikgeworICAgICAgICBpZiAoIWstPmVtcHR5KCkpIHsKKyAgICAgICAgICB0ZXN0LT5TZXRQcm9wZXJ0eSgqaywgKGsgKyAxKS0+Y19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgc3RhdHVzLlNldEVycm9yKAorICAgICAgICBjbVN0ckNhdCgiQ2FuIG5vdCBmaW5kIHRlc3QgdG8gYWRkIHByb3BlcnRpZXMgdG86ICIsIHRuYW1lKSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CiAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU2l0ZU5hbWVDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVNpdGVOYW1lQ29tbWFuZC5jeHgKaW5kZXggZDQ3ZjEyMS4uYjJkOTA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU2l0ZU5hbWVDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21TaXRlTmFtZUNvbW1hbmQuY3h4CkBAIC03Miw4ICs3Miw3IEBACiAgIH0KICNlbmRpZgogICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRDYWNoZURlZmluaXRpb24oCi0gICAgYXJnc1swXSwgc2l0ZU5hbWUuY19zdHIoKSwKLSAgICAiTmFtZSBvZiB0aGUgY29tcHV0ZXIvc2l0ZSB3aGVyZSBjb21waWxlIGlzIGJlaW5nIHJ1biIsCisgICAgYXJnc1swXSwgc2l0ZU5hbWUsICJOYW1lIG9mIHRoZSBjb21wdXRlci9zaXRlIHdoZXJlIGNvbXBpbGUgaXMgYmVpbmcgcnVuIiwKICAgICBjbVN0YXRlRW51bXM6OlNUUklORyk7CiAKICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Tb3VyY2VGaWxlLmN4eCBiL1NvdXJjZS9jbVNvdXJjZUZpbGUuY3h4CmluZGV4IDJhMzQ1ZWIuLmVmNDRhNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNvdXJjZUZpbGUuY3h4CisrKyBiL1NvdXJjZS9jbVNvdXJjZUZpbGUuY3h4CkBAIC0yLDcgKzIsNiBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlLmgiCiAKLSNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKQEAgLTQ4LDkgKzQ3LDkgQEAKIHN0ZDo6c3RyaW5nIGNvbnN0JiBjbVNvdXJjZUZpbGU6OkdldE9yRGV0ZXJtaW5lTGFuZ3VhZ2UoKQogewogICAvLyBJZiB0aGUgbGFuZ3VhZ2Ugd2FzIHNldCBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyIHRoZW4gdXNlIGl0LgotICBpZiAoY29uc3QgY2hhciogbGFuZyA9IHRoaXMtPkdldFByb3BlcnR5KHByb3BMQU5HVUFHRSkpIHsKKyAgaWYgKGNtUHJvcCBsYW5nID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcExBTkdVQUdFKSkgewogICAgIC8vIEFzc2lnbiB0byBtZW1iZXIgaW4gb3JkZXIgdG8gcmV0dXJuIGEgcmVmZXJlbmNlLgotICAgIHRoaXMtPkxhbmd1YWdlID0gbGFuZzsKKyAgICB0aGlzLT5MYW5ndWFnZSA9ICpsYW5nOwogICAgIHJldHVybiB0aGlzLT5MYW5ndWFnZTsKICAgfQogCkBAIC04MSw4ICs4MCw4IEBACiBzdGQ6OnN0cmluZyBjbVNvdXJjZUZpbGU6OkdldExhbmd1YWdlKCkgY29uc3QKIHsKICAgLy8gSWYgdGhlIGxhbmd1YWdlIHdhcyBzZXQgZXhwbGljaXRseSBieSB0aGUgdXNlciB0aGVuIHVzZSBpdC4KLSAgaWYgKGNvbnN0IGNoYXIqIGxhbmcgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wTEFOR1VBR0UpKSB7Ci0gICAgcmV0dXJuIGxhbmc7CisgIGlmIChjbVByb3AgbGFuZyA9IHRoaXMtPkdldFByb3BlcnR5KHByb3BMQU5HVUFHRSkpIHsKKyAgICByZXR1cm4gKmxhbmc7CiAgIH0KIAogICAvLyBVc2UgdGhlIGxhbmd1YWdlIGRldGVybWluZWQgZnJvbSB0aGUgZmlsZSBleHRlbnNpb24uCkBAIC0xMjgsMTUgKzEyNywxMyBAQAogICAvLyBUaGUgZmlsZSBpcyBub3QgZ2VuZXJhdGVkLiAgSXQgbXVzdCBleGlzdCBvbiBkaXNrLgogICBjbU1ha2VmaWxlIGNvbnN0KiBtYWtlZmlsZSA9IHRoaXMtPkxvY2F0aW9uLkdldE1ha2VmaWxlKCk7CiAgIC8vIExvY2F0aW9uIHBhdGgKLSAgc3RkOjpzdHJpbmcgY29uc3QgbFBhdGggPSB0aGlzLT5Mb2NhdGlvbi5HZXRGdWxsUGF0aCgpOworICBzdGQ6OnN0cmluZyBjb25zdCYgbFBhdGggPSB0aGlzLT5Mb2NhdGlvbi5HZXRGdWxsUGF0aCgpOwogICAvLyBMaXN0IG9mIGV4dGVuc2lvbiBsaXN0cwotICBzdGQ6OmFycmF5PHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCosIDI+IGNvbnN0IGV4dHNMaXN0cyA9IHsKLSAgICB7ICZtYWtlZmlsZS0+R2V0Q01ha2VJbnN0YW5jZSgpLT5HZXRTb3VyY2VFeHRlbnNpb25zKCksCi0gICAgICAmbWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+R2V0SGVhZGVyRXh0ZW5zaW9ucygpIH0KLSAgfTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4dHMgPQorICAgIG1ha2VmaWxlLT5HZXRDTWFrZUluc3RhbmNlKCktPkdldEFsbEV4dGVuc2lvbnMoKTsKIAogICAvLyBUcmllcyB0byBmaW5kIHRoZSBmaWxlIGluIGEgZ2l2ZW4gZGlyZWN0b3J5Ci0gIGF1dG8gZmluZEluRGlyID0gW3RoaXMsICZleHRzTGlzdHMsICZsUGF0aF0oc3RkOjpzdHJpbmcgY29uc3QmIGRpcikgLT4gYm9vbCB7CisgIGF1dG8gZmluZEluRGlyID0gW3RoaXMsICZleHRzLCAmbFBhdGhdKHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXIpIC0+IGJvb2wgewogICAgIC8vIENvbXB1dGUgZnVsbCBwYXRoCiAgICAgc3RkOjpzdHJpbmcgY29uc3QgZnVsbFBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGxQYXRoLCBkaXIpOwogICAgIC8vIFRyeSBmdWxsIHBhdGgKQEAgLTE0NSwxNCArMTQyLDEyIEBACiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gVHJ5IGZ1bGwgcGF0aCB3aXRoIGV4dGVuc2lvbgotICAgIGZvciAoYXV0byBleHRzIDogZXh0c0xpc3RzKSB7Ci0gICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQgOiAqZXh0cykgewotICAgICAgICBpZiAoIWV4dC5lbXB0eSgpKSB7Ci0gICAgICAgICAgc3RkOjpzdHJpbmcgZXh0UGF0aCA9IGNtU3RyQ2F0KGZ1bGxQYXRoLCAnLicsIGV4dCk7Ci0gICAgICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZXh0UGF0aCkpIHsKLSAgICAgICAgICAgIHRoaXMtPkZ1bGxQYXRoID0gZXh0UGF0aDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KKyAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQgOiBleHRzKSB7CisgICAgICBpZiAoIWV4dC5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV4dFBhdGggPSBjbVN0ckNhdChmdWxsUGF0aCwgJy4nLCBleHQpOworICAgICAgICBpZiAoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhleHRQYXRoKSkgeworICAgICAgICAgIHRoaXMtPkZ1bGxQYXRoID0gZXh0UGF0aDsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTE3NSwxMSArMTcwLDkgQEAKICAgLy8gQ29tcG9zZSBlcnJvcgogICBzdGQ6OnN0cmluZyBlcnIgPQogICAgIGNtU3RyQ2F0KCJDYW5ub3QgZmluZCBzb3VyY2UgZmlsZTpcbiAgIiwgbFBhdGgsICJcblRyaWVkIGV4dGVuc2lvbnMiKTsKLSAgZm9yIChhdXRvIGV4dHMgOiBleHRzTGlzdHMpIHsKLSAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQgOiAqZXh0cykgewotICAgICAgZXJyICs9ICIgLiI7Ci0gICAgICBlcnIgKz0gZXh0OwotICAgIH0KKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZXh0IDogZXh0cykgeworICAgIGVyciArPSAiIC4iOworICAgIGVyciArPSBleHQ7CiAgIH0KICAgaWYgKGVycm9yICE9IG51bGxwdHIpIHsKICAgICAqZXJyb3IgPSBzdGQ6Om1vdmUoZXJyKTsKQEAgLTI2MCwyMSArMjUzLDIxIEBACiAgIH0KIH0KIAotdm9pZCBjbVNvdXJjZUZpbGU6OkFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nKQordm9pZCBjbVNvdXJjZUZpbGU6OkFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgYm9vbCBhc1N0cmluZykKIHsKICAgaWYgKHByb3AgPT0gcHJvcElOQ0xVREVfRElSRUNUT1JJRVMpIHsKLSAgICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSB0aGlzLT5Mb2NhdGlvbi5HZXRNYWtlZmlsZSgpLT5HZXRCYWNrdHJhY2UoKTsKICAgICAgIHRoaXMtPkluY2x1ZGVEaXJlY3Rvcmllcy5lbXBsYWNlX2JhY2sodmFsdWUsIGxmYnQpOwogICAgIH0KICAgfSBlbHNlIGlmIChwcm9wID09IHByb3BDT01QSUxFX09QVElPTlMpIHsKLSAgICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSB0aGlzLT5Mb2NhdGlvbi5HZXRNYWtlZmlsZSgpLT5HZXRCYWNrdHJhY2UoKTsKICAgICAgIHRoaXMtPkNvbXBpbGVPcHRpb25zLmVtcGxhY2VfYmFjayh2YWx1ZSwgbGZidCk7CiAgICAgfQogICB9IGVsc2UgaWYgKHByb3AgPT0gcHJvcENPTVBJTEVfREVGSU5JVElPTlMpIHsKLSAgICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSB0aGlzLT5Mb2NhdGlvbi5HZXRNYWtlZmlsZSgpLT5HZXRCYWNrdHJhY2UoKTsKICAgICAgIHRoaXMtPkNvbXBpbGVEZWZpbml0aW9ucy5lbXBsYWNlX2JhY2sodmFsdWUsIGxmYnQpOwogICAgIH0KQEAgLTMxNywxNyArMzEwLDE4IEBACiAgIH0KIAogICAvLyBQZXJmb3JtIHRoZSBub3JtYWwgcHJvcGVydHkgbG9va3VwLgotICByZXR1cm4gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7CisgIGNtUHJvcCBwID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7CisgIHJldHVybiBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHI7CiB9CiAKLWNvbnN0IGNoYXIqIGNtU291cmNlRmlsZTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CitjbVByb3AgY21Tb3VyY2VGaWxlOjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKICAgLy8gQ2hlY2sgZm9yIGNvbXB1dGVkIHByb3BlcnRpZXMuCiAgIGlmIChwcm9wID09IHByb3BMT0NBVElPTikgewogICAgIGlmICh0aGlzLT5GdWxsUGF0aC5lbXB0eSgpKSB7CiAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIHRoaXMtPkZ1bGxQYXRoLmNfc3RyKCk7CisgICAgcmV0dXJuICZ0aGlzLT5GdWxsUGF0aDsKICAgfQogCiAgIC8vIENoZWNrIGZvciB0aGUgcHJvcGVydGllcyB3aXRoIGJhY2t0cmFjZXMuCkBAIC0zMzgsNyArMzMyLDcgQEAKIAogICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgb3V0cHV0ID0gY21Kb2luKHRoaXMtPkluY2x1ZGVEaXJlY3RvcmllcywgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KIAogICBpZiAocHJvcCA9PSBwcm9wQ09NUElMRV9PUFRJT05TKSB7CkBAIC0zNDgsNyArMzQyLDcgQEAKIAogICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgb3V0cHV0ID0gY21Kb2luKHRoaXMtPkNvbXBpbGVPcHRpb25zLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogCiAgIGlmIChwcm9wID09IHByb3BDT01QSUxFX0RFRklOSVRJT05TKSB7CkBAIC0zNTgsMTAgKzM1MiwxMCBAQAogCiAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+Q29tcGlsZURlZmluaXRpb25zLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogCi0gIGNvbnN0IGNoYXIqIHJldFZhbCA9IHRoaXMtPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZShwcm9wKTsKKyAgY21Qcm9wIHJldFZhbCA9IHRoaXMtPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZShwcm9wKTsKICAgaWYgKCFyZXRWYWwpIHsKICAgICBjbU1ha2VmaWxlIGNvbnN0KiBtZiA9IHRoaXMtPkxvY2F0aW9uLkdldE1ha2VmaWxlKCk7CiAgICAgY29uc3QgYm9vbCBjaGFpbiA9CkBAIC0zNjksNiArMzYzLDcgQEAKICAgICBpZiAoY2hhaW4pIHsKICAgICAgIHJldHVybiBtZi0+R2V0UHJvcGVydHkocHJvcCwgY2hhaW4pOwogICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogCiAgIHJldHVybiByZXRWYWw7CkBAIC0zNzYsMTEgKzM3MSwxMSBAQAogCiBjb25zdCBjaGFyKiBjbVNvdXJjZUZpbGU6OkdldFNhZmVQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKLSAgY29uc3QgY2hhciogcmV0ID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7CisgIGNtUHJvcCByZXQgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKTsKICAgaWYgKCFyZXQpIHsKICAgICByZXR1cm4gIiI7CiAgIH0KLSAgcmV0dXJuIHJldDsKKyAgcmV0dXJuIHJldC0+Y19zdHIoKTsKIH0KIAogYm9vbCBjbVNvdXJjZUZpbGU6OkdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlRmlsZS5oIGIvU291cmNlL2NtU291cmNlRmlsZS5oCmluZGV4IDgyYTM2MjUuLmU2NjkwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNvdXJjZUZpbGUuaAorKysgYi9Tb3VyY2UvY21Tb3VyY2VGaWxlLmgKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgImNtQ3VzdG9tQ29tbWFuZC5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVByb3BlcnR5TWFwLmgiCiAjaW5jbHVkZSAiY21Tb3VyY2VGaWxlTG9jYXRpb24uaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGVMb2NhdGlvbktpbmQuaCIKQEAgLTQyLDEwICs0MywxMCBAQAogCiAgIC8vISBTZXQvR2V0IGEgcHJvcGVydHkgb2YgdGhpcyBzb3VyY2UgZmlsZQogICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlLAorICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKICAgLy8hIE1pZ2h0IHJldHVybiBhIG51bGxwdHIgaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXQgb3IgaW52YWxpZAotICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CiAgIC8vISBBbHdheXMgcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIKICAgY29uc3QgY2hhciogR2V0U2FmZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKICAgYm9vbCBHZXRQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CkBAIC0xNTQsMTEgKzE1NSwxMCBAQAogI2RlZmluZSBDTV9IRUFERVJfUkVHRVggIlxcLihofGhofGhcXCtcXCt8aG18aHBwfGh4eHxpbnx0eHh8aW5sKSQiCiAKICNkZWZpbmUgQ01fU09VUkNFX1JFR0VYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIlxcLihDfE18Y3xjXFwrXFwrfGNjfGNwcHxjeHh8Y3V8ZnxmOTB8Zm9yfGZwcHxmdG58bXxtbXxyY3xkZWZ8cnxvZGx8aWRsfCIgIFwKLSAgImhwaiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgInxiYXQpJCIKKyAgIlxcLihDfEZ8TXxjfGNcXCtcXCt8Y2N8Y3BwfGN4eHxjdXxmfGY5MHxmb3J8ZnBwfGZ0bnxtfG1tfCIgICAgICAgICAgICAgICAgIFwKKyAgInJjfGRlZnxyfG9kbHxpZGx8aHBqfGJhdCkkIgogCi0jZGVmaW5lIENNX1BDSF9SRUdFWCAiY21ha2VfcGNoXFwuKGh8aHh4KSQiCisjZGVmaW5lIENNX1BDSF9SRUdFWCAiY21ha2VfcGNoKF9bXi5dKyk/XFwuKGh8aHh4KSQiCiAKICNkZWZpbmUgQ01fUkVTT1VSQ0VfUkVHRVggIlxcLihwZGZ8cGxpc3R8cG5nfGpwZWd8anBnfHN0b3J5Ym9hcmR8eGNhc3NldHMpJCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtU291cmNlRmlsZUxvY2F0aW9uLmN4eCBiL1NvdXJjZS9jbVNvdXJjZUZpbGVMb2NhdGlvbi5jeHgKaW5kZXggZGY3MDJiMC4uMjIyYmFmYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU291cmNlRmlsZUxvY2F0aW9uLmN4eAorKysgYi9Tb3VyY2UvY21Tb3VyY2VGaWxlTG9jYXRpb24uY3h4CkBAIC00LDYgKzQsOCBAQAogCiAjaW5jbHVkZSA8Y2Fzc2VydD4KIAorI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCiAjaW5jbHVkZSAiY21NZXNzYWdlVHlwZS5oIgpAQCAtMzEsNyArMzMsOCBAQAogICB0aGlzLT5BbWJpZ3VvdXNFeHRlbnNpb24gPSB0cnVlOwogICB0aGlzLT5EaXJlY3RvcnkgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVBhdGgobmFtZSk7CiAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aCh0aGlzLT5EaXJlY3RvcnkpKSB7Ci0gICAgdGhpcy0+RGlyZWN0b3J5ID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aCh0aGlzLT5EaXJlY3RvcnkpOworICAgIHRoaXMtPkRpcmVjdG9yeSA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgICB0aGlzLT5EaXJlY3RvcnksIG1mLT5HZXRIb21lT3V0cHV0RGlyZWN0b3J5KCkpOwogICB9CiAgIHRoaXMtPk5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUobmFtZSk7CiAgIGlmIChraW5kID09IGNtU291cmNlRmlsZUxvY2F0aW9uS2luZDo6S25vd24pIHsKQEAgLTk4LDcgKzEwMSw3IEBACiAgIGNtTWFrZWZpbGUgY29uc3QqIG1mID0gdGhpcy0+TWFrZWZpbGU7CiAgIGF1dG8gY20gPSBtZi0+R2V0Q01ha2VJbnN0YW5jZSgpOwogICBpZiAoIWdnLT5HZXRMYW5ndWFnZUZyb21FeHRlbnNpb24oZXh0LmNfc3RyKCkpLmVtcHR5KCkgfHwKLSAgICAgIGNtLT5Jc1NvdXJjZUV4dGVuc2lvbihleHQpIHx8IGNtLT5Jc0hlYWRlckV4dGVuc2lvbihleHQpKSB7CisgICAgICBjbS0+SXNBS25vd25FeHRlbnNpb24oZXh0KSkgewogICAgIC8vIFRoaXMgaXMgYSBrbm93biBleHRlbnNpb24uICBVc2UgdGhlIGdpdmVuIGZpbGVuYW1lIHdpdGggZXh0ZW5zaW9uLgogICAgIHRoaXMtPk5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUobmFtZSk7CiAgICAgdGhpcy0+QW1iaWd1b3VzRXh0ZW5zaW9uID0gZmFsc2U7CkBAIC0xNTEsMTAgKzE1NCwxMCBAQAogCiAgIC8vIE9ubHkgYSBmaXhlZCBzZXQgb2YgZXh0ZW5zaW9ucyB3aWxsIGJlIHRyaWVkIHRvIG1hdGNoIGEgZmlsZSBvbgogICAvLyBkaXNrLiAgT25lIG9mIHRoZXNlIG11c3QgbWF0Y2ggaWYgbG9jIHJlZmVycyB0byB0aGlzIHNvdXJjZSBmaWxlLgotICBzdGQ6OnN0cmluZyBjb25zdCYgZXh0ID0gdGhpcy0+TmFtZS5zdWJzdHIobG9jLk5hbWUuc2l6ZSgpICsgMSk7CisgIGF1dG8gZXh0ID0gY206OnN0cmluZ192aWV3KHRoaXMtPk5hbWUpLnN1YnN0cihsb2MuTmFtZS5zaXplKCkgKyAxKTsKICAgY21NYWtlZmlsZSBjb25zdCogbWYgPSB0aGlzLT5NYWtlZmlsZTsKICAgYXV0byBjbSA9IG1mLT5HZXRDTWFrZUluc3RhbmNlKCk7Ci0gIHJldHVybiBjbS0+SXNTb3VyY2VFeHRlbnNpb24oZXh0KSB8fCBjbS0+SXNIZWFkZXJFeHRlbnNpb24oZXh0KTsKKyAgcmV0dXJuIGNtLT5Jc0FLbm93bkV4dGVuc2lvbihleHQpOwogfQogCiBib29sIGNtU291cmNlRmlsZUxvY2F0aW9uOjpNYXRjaGVzKGNtU291cmNlRmlsZUxvY2F0aW9uIGNvbnN0JiBsb2MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Tb3VyY2VHcm91cC5jeHggYi9Tb3VyY2UvY21Tb3VyY2VHcm91cC5jeHgKaW5kZXggOGMzZWM5Zi4uMTU1MDY4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmN4eAorKysgYi9Tb3VyY2UvY21Tb3VyY2VHcm91cC5jeHgKQEAgLTQsNiArNCw4IEBACiAKICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSA8Y20vbWVtb3J5PgorCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAKIGNsYXNzIGNtU291cmNlR3JvdXBJbnRlcm5hbHMKQEAgLTE2LDcgKzE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGFyZW50TmFtZSkKICAgOiBOYW1lKHN0ZDo6bW92ZShuYW1lKSkKIHsKLSAgdGhpcy0+SW50ZXJuYWwgPSBuZXcgY21Tb3VyY2VHcm91cEludGVybmFsczsKKyAgdGhpcy0+SW50ZXJuYWwgPSBjbTo6bWFrZV91bmlxdWU8Y21Tb3VyY2VHcm91cEludGVybmFscz4oKTsKICAgdGhpcy0+U2V0R3JvdXBSZWdleChyZWdleCk7CiAgIGlmIChwYXJlbnROYW1lKSB7CiAgICAgdGhpcy0+RnVsbE5hbWUgPSBjbVN0ckNhdChwYXJlbnROYW1lLCAnXFwnKTsKQEAgLTI0LDEwICsyNiw3IEBACiAgIHRoaXMtPkZ1bGxOYW1lICs9IHRoaXMtPk5hbWU7CiB9CiAKLWNtU291cmNlR3JvdXA6On5jbVNvdXJjZUdyb3VwKCkKLXsKLSAgZGVsZXRlIHRoaXMtPkludGVybmFsOwotfQorY21Tb3VyY2VHcm91cDo6fmNtU291cmNlR3JvdXAoKSA9IGRlZmF1bHQ7CiAKIGNtU291cmNlR3JvdXA6OmNtU291cmNlR3JvdXAoY21Tb3VyY2VHcm91cCBjb25zdCYgcikKIHsKQEAgLTM2LDcgKzM1LDcgQEAKICAgdGhpcy0+R3JvdXBSZWdleCA9IHIuR3JvdXBSZWdleDsKICAgdGhpcy0+R3JvdXBGaWxlcyA9IHIuR3JvdXBGaWxlczsKICAgdGhpcy0+U291cmNlRmlsZXMgPSByLlNvdXJjZUZpbGVzOwotICB0aGlzLT5JbnRlcm5hbCA9IG5ldyBjbVNvdXJjZUdyb3VwSW50ZXJuYWxzKCpyLkludGVybmFsKTsKKyAgdGhpcy0+SW50ZXJuYWwgPSBjbTo6bWFrZV91bmlxdWU8Y21Tb3VyY2VHcm91cEludGVybmFscz4oKnIuSW50ZXJuYWwpOwogfQogCiBjbVNvdXJjZUdyb3VwJiBjbVNvdXJjZUdyb3VwOjpvcGVyYXRvcj0oY21Tb3VyY2VHcm91cCBjb25zdCYgcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmggYi9Tb3VyY2UvY21Tb3VyY2VHcm91cC5oCmluZGV4IDU4MWRjNWQuLjYyM2NkZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNvdXJjZUdyb3VwLmgKKysrIGIvU291cmNlL2NtU291cmNlR3JvdXAuaApAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CkBAIC0xMjIsNyArMTIzLDcgQEAKICAgICovCiAgIHN0ZDo6dmVjdG9yPGNvbnN0IGNtU291cmNlRmlsZSo+IFNvdXJjZUZpbGVzOwogCi0gIGNtU291cmNlR3JvdXBJbnRlcm5hbHMqIEludGVybmFsOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21Tb3VyY2VHcm91cEludGVybmFscz4gSW50ZXJuYWw7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVNvdXJjZUdyb3VwQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21Tb3VyY2VHcm91cENvbW1hbmQuY3h4CmluZGV4IGNjNjI5NTIuLmJiNzVhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVNvdXJjZUdyb3VwQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtU291cmNlR3JvdXBDb21tYW5kLmN4eApAQCAtNyw3ICs3LDggQEAKICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21NYWtlZmlsZS5oIgogI2luY2x1ZGUgImNtU291cmNlR3JvdXAuaCIKQEAgLTMwLDE4ICszMSw2IEBACiAgIHJldHVybiBjbVRva2VuaXplKHBhdGgsICJcXC8iKTsKIH0KIAotc3RkOjpzdHJpbmcgZ2V0RnVsbEZpbGVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBjdXJyZW50UGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCkKLXsKLSAgc3RkOjpzdHJpbmcgZnVsbFBhdGggPSBwYXRoOwotCi0gIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGF0aCkpIHsKLSAgICBmdWxsUGF0aCA9IGNtU3RyQ2F0KGN1cnJlbnRQYXRoLCAnLycsIHBhdGgpOwotICB9Ci0KLSAgcmV0dXJuIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoZnVsbFBhdGgpOwotfQotCiBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZ2V0U291cmNlR3JvdXBGaWxlc1BhdGhzKAogICBjb25zdCBzdGQ6OnN0cmluZyYgcm9vdCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBmaWxlcykKIHsKQEAgLTEyNCw3ICsxMTMsOCBAQAogICAgICAgICBlcnJvck1zZyA9ICJDb3VsZCBub3QgY3JlYXRlIHNvdXJjZSBncm91cCBmb3IgZmlsZTogIiArIHNnRmlsZXNQYXRoOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAgICBjb25zdCBzdGQ6OnN0cmluZyBmdWxsUGF0aCA9IGdldEZ1bGxGaWxlUGF0aChyb290LCBzZ0ZpbGVzUGF0aCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBmdWxsUGF0aCA9CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoc2dGaWxlc1BhdGgsIHJvb3QpOwogICAgICAgc2ctPkFkZEdyb3VwRmlsZShmdWxsUGF0aCk7CiAgICAgfQogICB9CkBAIC0xNDcsNyArMTM3LDcgQEAKIGJvb2wgaXNFeHBlY3RlZE9wdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgYXJndW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXhwZWN0ZWRPcHRpb25zJiBleHBlY3RlZE9wdGlvbnMpCiB7Ci0gIHJldHVybiBjbUNvbnRhaW5zKGV4cGVjdGVkT3B0aW9ucywgYXJndW1lbnQpOworICByZXR1cm4gY206OmNvbnRhaW5zKGV4cGVjdGVkT3B0aW9ucywgYXJndW1lbnQpOwogfQogCiB2b2lkIHBhcnNlQXJndW1lbnRzKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncywKQEAgLTI1NSwxMCArMjQ1LDggQEAKICAgICAgIHBhcnNlZEFyZ3VtZW50c1trRmlsZXNPcHRpb25OYW1lXTsKICAgICBmb3IgKGF1dG8gY29uc3QmIGZpbGVzQXJnIDogZmlsZXNBcmd1bWVudHMpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHNyYyA9IGZpbGVzQXJnOwotICAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChzcmMpKSB7Ci0gICAgICAgIHNyYyA9IGNtU3RyQ2F0KG1mLkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSwgJy8nLCBmaWxlc0FyZyk7Ci0gICAgICB9Ci0gICAgICBzcmMgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHNyYyk7CisgICAgICBzcmMgPQorICAgICAgICBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHNyYywgbWYuR2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpKTsKICAgICAgIHNnLT5BZGRHcm91cEZpbGUoc3JjKTsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5jeHggYi9Tb3VyY2UvY21TdGFuZGFyZExldmVsUmVzb2x2ZXIuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYmFiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21TdGFuZGFyZExldmVsUmVzb2x2ZXIuY3h4CkBAIC0wLDAgKzEsNTM4IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisKKyNpbmNsdWRlICJjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8Y20vaXRlcmF0b3I+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCisjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiY21HZW5lcmF0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgImNtVGFyZ2V0LmgiCisjaW5jbHVkZSAiY21ha2UuaCIKKworbmFtZXNwYWNlIHsKKworI2RlZmluZSBGRUFUVVJFX1NUUklORyhGKSAsICNGCitjb25zdCBjaGFyKiBjb25zdCBDX0ZFQVRVUkVTW10gPSB7IG51bGxwdHIgRk9SX0VBQ0hfQ19GRUFUVVJFKAorICBGRUFUVVJFX1NUUklORykgfTsKKworY29uc3QgY2hhciogY29uc3QgQ1hYX0ZFQVRVUkVTW10gPSB7IG51bGxwdHIgRk9SX0VBQ0hfQ1hYX0ZFQVRVUkUoCisgIEZFQVRVUkVfU1RSSU5HKSB9OworCitjb25zdCBjaGFyKiBjb25zdCBDVURBX0ZFQVRVUkVTW10gPSB7IG51bGxwdHIgRk9SX0VBQ0hfQ1VEQV9GRUFUVVJFKAorICBGRUFUVVJFX1NUUklORykgfTsKKyN1bmRlZiBGRUFUVVJFX1NUUklORworCitzdHJ1Y3QgU3RhbmRhcmROZWVkZWQKK3sKKyAgaW50IGluZGV4OworICBpbnQgdmFsdWU7Cit9OworCitzdHJ1Y3QgU3RhbmFyZExldmVsQ29tcHV0ZXIKK3sKKyAgZXhwbGljaXQgU3RhbmFyZExldmVsQ29tcHV0ZXIoc3RkOjpzdHJpbmcgbGFuZywgc3RkOjp2ZWN0b3I8aW50PiBsZXZlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsZXZlbHNTdHIpCisgICAgOiBMYW5ndWFnZShzdGQ6Om1vdmUobGFuZykpCisgICAgLCBMZXZlbHMoc3RkOjptb3ZlKGxldmVscykpCisgICAgLCBMZXZlbHNBc1N0cmluZ3Moc3RkOjptb3ZlKGxldmVsc1N0cikpCisgIHsKKyAgICBhc3NlcnQobGV2ZWxzLnNpemUoKSA9PSBsZXZlbHNTdHIuc2l6ZSgpKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIEdldENvbXBpbGVPcHRpb25EZWYoY21NYWtlZmlsZSogbWFrZWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKSBjb25zdAorICB7CisKKyAgICBjb25zdCBhdXRvJiBzdGRzID0gdGhpcy0+TGV2ZWxzOworICAgIGNvbnN0IGF1dG8mIHN0ZHNTdHJpbmdzID0gdGhpcy0+TGV2ZWxzQXNTdHJpbmdzOworCisgICAgY29uc3QgY2hhciogZGVmYXVsdFN0ZCA9IG1ha2VmaWxlLT5HZXREZWZpbml0aW9uKAorICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxhbmd1YWdlLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7CisgICAgaWYgKCFjbU5vbmVtcHR5KGRlZmF1bHRTdGQpKSB7CisgICAgICAvLyB0aGlzIGNvbXBpbGVyIGhhcyBubyBub3Rpb24gb2YgbGFuZ3VhZ2Ugc3RhbmRhcmQgbGV2ZWxzCisgICAgICByZXR1cm4gc3RkOjpzdHJpbmd7fTsKKyAgICB9CisKKyAgICBib29sIGV4dCA9IHRydWU7CisgICAgaWYgKGNtUHJvcCBleHRQcm9wVmFsdWUgPSB0YXJnZXQtPkdldExhbmd1YWdlRXh0ZW5zaW9ucyh0aGlzLT5MYW5ndWFnZSkpIHsKKyAgICAgIGlmIChjbUlzT2ZmKCpleHRQcm9wVmFsdWUpKSB7CisgICAgICAgIGV4dCA9IGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIGNtUHJvcCBzdGFuZGFyZFByb3AgPSB0YXJnZXQtPkdldExhbmd1YWdlU3RhbmRhcmQodGhpcy0+TGFuZ3VhZ2UsIGNvbmZpZyk7CisgICAgaWYgKCFzdGFuZGFyZFByb3ApIHsKKyAgICAgIGlmIChleHQpIHsKKyAgICAgICAgLy8gTm8gbGFuZ3VhZ2Ugc3RhbmRhcmQgaXMgc3BlY2lmaWVkIGFuZCBleHRlbnNpb25zIGFyZSBub3QgZGlzYWJsZWQuCisgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgY29tcGlsZXIgbmVlZHMgYSBmbGFnIHRvIGVuYWJsZSBleHRlbnNpb25zLgorICAgICAgICByZXR1cm4gY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxhbmd1YWdlLCAiX0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiIpOworICAgICAgfQorICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5ne307CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgY29uc3QgdHlwZSA9IGV4dCA/ICJFWFRFTlNJT04iIDogIlNUQU5EQVJEIjsKKworICAgIGlmICh0YXJnZXQtPkdldExhbmd1YWdlU3RhbmRhcmRSZXF1aXJlZCh0aGlzLT5MYW5ndWFnZSkpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIG9wdGlvbl9mbGFnID0gY21TdHJDYXQoCisgICAgICAgICJDTUFLRV8iLCB0aGlzLT5MYW5ndWFnZSwgKnN0YW5kYXJkUHJvcCwgIl8iLCB0eXBlLCAiX0NPTVBJTEVfT1BUSU9OIik7CisKKyAgICAgIGNvbnN0IGNoYXIqIG9wdCA9CisgICAgICAgIHRhcmdldC0+VGFyZ2V0LT5HZXRNYWtlZmlsZSgpLT5HZXREZWZpbml0aW9uKG9wdGlvbl9mbGFnKTsKKyAgICAgIGlmICghb3B0KSB7CisgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOworICAgICAgICBlIDw8ICJUYXJnZXQgXCIiIDw8IHRhcmdldC0+R2V0TmFtZSgpCisgICAgICAgICAgPDwgIlwiIHJlcXVpcmVzIHRoZSBsYW5ndWFnZSAiCisgICAgICAgICAgICAgImRpYWxlY3QgXCIiCisgICAgICAgICAgPDwgdGhpcy0+TGFuZ3VhZ2UgPDwgKnN0YW5kYXJkUHJvcCA8PCAiXCIgIgorICAgICAgICAgIDw8IChleHQgPyAiKHdpdGggY29tcGlsZXIgZXh0ZW5zaW9ucykiIDogIiIpCisgICAgICAgICAgPDwgIiwgYnV0IENNYWtlICIKKyAgICAgICAgICAgICAiZG9lcyBub3Qga25vdyB0aGUgY29tcGlsZSBmbGFncyB0byB1c2UgdG8gZW5hYmxlIGl0LiI7CisgICAgICAgIG1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBvcHRpb25fZmxhZzsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBzdGFuZGFyZFN0cigqc3RhbmRhcmRQcm9wKTsKKyAgICBpZiAodGhpcy0+TGFuZ3VhZ2UgPT0gIkNVREEiICYmIHN0YW5kYXJkU3RyID09ICI5OCIpIHsKKyAgICAgIHN0YW5kYXJkU3RyID0gIjAzIjsKKyAgICB9CisKKyAgICBpbnQgc3RhbmRhcmRWYWx1ZSA9IC0xOworICAgIGludCBkZWZhdWx0VmFsdWUgPSAtMTsKKyAgICB0cnkgeworICAgICAgc3RhbmRhcmRWYWx1ZSA9IHN0ZDo6c3RvaShzdGFuZGFyZFN0cik7CisgICAgICBkZWZhdWx0VmFsdWUgPSBzdGQ6OnN0b2koZGVmYXVsdFN0ZCk7CisgICAgfSBjYXRjaCAoc3RkOjppbnZhbGlkX2FyZ3VtZW50JikgeworICAgICAgLy8gZmFsbCB0aHJvdWdoIGFzIHdlIHdhbnQgYW4gZXJyb3IKKyAgICAgIC8vIHdoZW4gd2UgY2FuJ3QgZmluZCB0aGUgYmFkIHZhbHVlIGluIHRoZSBgc3Rkc2AgdmVjdG9yCisgICAgfQorCisgICAgYXV0byBzdGRJdCA9IHN0ZDo6ZmluZChjbTo6Y2JlZ2luKHN0ZHMpLCBjbTo6Y2VuZChzdGRzKSwgc3RhbmRhcmRWYWx1ZSk7CisgICAgaWYgKHN0ZEl0ID09IGNtOjpjZW5kKHN0ZHMpKSB7CisgICAgICBzdGQ6OnN0cmluZyBlID0KKyAgICAgICAgY21TdHJDYXQodGhpcy0+TGFuZ3VhZ2UsICJfU1RBTkRBUkQgaXMgc2V0IHRvIGludmFsaWQgdmFsdWUgJyIsCisgICAgICAgICAgICAgICAgIHN0YW5kYXJkU3RyLCAiJyIpOworICAgICAgbWFrZWZpbGUtPkdldENNYWtlSW5zdGFuY2UoKS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldEJhY2t0cmFjZSgpKTsKKyAgICAgIHJldHVybiBzdGQ6OnN0cmluZ3t9OworICAgIH0KKworICAgIGF1dG8gZGVmYXVsdFN0ZEl0ID0KKyAgICAgIHN0ZDo6ZmluZChjbTo6Y2JlZ2luKHN0ZHMpLCBjbTo6Y2VuZChzdGRzKSwgZGVmYXVsdFZhbHVlKTsKKyAgICBpZiAoZGVmYXVsdFN0ZEl0ID09IGNtOjpjZW5kKHN0ZHMpKSB7CisgICAgICBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfU1RBTkRBUkRfREVGQVVMVCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSAnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RkLCAiJyIpOworICAgICAgbWFrZWZpbGUtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6SU5URVJOQUxfRVJST1IsIGUpOworICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5ne307CisgICAgfQorCisgICAgLy8gSWYgdGhlIHN0YW5kYXJkIHJlcXVlc3RlZCBpcyBvbGRlciB0aGFuIHRoZSBjb21waWxlcidzIGRlZmF1bHQKKyAgICAvLyB0aGVuIHdlIG5lZWQgdG8gdXNlIGEgZmxhZyB0byBjaGFuZ2UgaXQuCisgICAgaWYgKHN0ZEl0IDw9IGRlZmF1bHRTdGRJdCkgeworICAgICAgYXV0byBvZmZzZXQgPSBzdGQ6OmRpc3RhbmNlKGNtOjpjYmVnaW4oc3RkcyksIHN0ZEl0KTsKKyAgICAgIHJldHVybiBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+TGFuZ3VhZ2UsIHN0ZHNTdHJpbmdzW29mZnNldF0sICJfIiwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAiX0NPTVBJTEVfT1BUSU9OIik7CisgICAgfQorCisgICAgLy8gVGhlIHN0YW5kYXJkIHJlcXVlc3RlZCBpcyBhdCBsZWFzdCBhcyBuZXcgYXMgdGhlIGNvbXBpbGVyJ3MgZGVmYXVsdCwKKyAgICAvLyBhbmQgdGhlIHN0YW5kYXJkIHJlcXVlc3QgaXMgbm90IHJlcXVpcmVkLiAgRGVjYXkgdG8gdGhlIG5ld2VzdCBzdGFuZGFyZAorICAgIC8vIGZvciB3aGljaCBhIGZsYWcgaXMgZGVmaW5lZC4KKyAgICBmb3IgKDsgZGVmYXVsdFN0ZEl0IDwgc3RkSXQ7IC0tc3RkSXQpIHsKKyAgICAgIGF1dG8gb2Zmc2V0ID0gc3RkOjpkaXN0YW5jZShjbTo6Y2JlZ2luKHN0ZHMpLCBzdGRJdCk7CisgICAgICBzdGQ6OnN0cmluZyBvcHRpb25fZmxhZyA9CisgICAgICAgIGNtU3RyQ2F0KCJDTUFLRV8iLCB0aGlzLT5MYW5ndWFnZSwgc3Rkc1N0cmluZ3Nbb2Zmc2V0XSwgIl8iLCB0eXBlLAorICAgICAgICAgICAgICAgICAiX0NPTVBJTEVfT1BUSU9OIik7CisgICAgICBpZiAodGFyZ2V0LT5UYXJnZXQtPkdldE1ha2VmaWxlKCktPkdldERlZmluaXRpb24ob3B0aW9uX2ZsYWcpKSB7CisgICAgICAgIHJldHVybiBvcHRpb25fZmxhZzsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpzdHJpbmd7fTsKKyAgfQorCisgIGJvb2wgR2V0TmV3UmVxdWlyZWRTdGFuZGFyZChjbU1ha2VmaWxlKiBtYWtlZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YXJnZXROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3AgY3VycmVudExhbmdTdGFuZGFyZFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIG5ld1JlcXVpcmVkU3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0CisgIHsKKyAgICBpZiAoY3VycmVudExhbmdTdGFuZGFyZFZhbHVlKSB7CisgICAgICBuZXdSZXF1aXJlZFN0YW5kYXJkID0gKmN1cnJlbnRMYW5nU3RhbmRhcmRWYWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAgbmV3UmVxdWlyZWRTdGFuZGFyZC5jbGVhcigpOworICAgIH0KKworICAgIGF1dG8gbmVlZGVkID0gdGhpcy0+SGlnaGVzdFN0YW5kYXJkTmVlZGVkKG1ha2VmaWxlLCBmZWF0dXJlKTsKKworICAgIGNtUHJvcCBleGlzdGluZ1N0YW5kYXJkID0gY3VycmVudExhbmdTdGFuZGFyZFZhbHVlOworICAgIGlmIChleGlzdGluZ1N0YW5kYXJkID09IG51bGxwdHIpIHsKKyAgICAgIGNtUHJvcCBkZWZhdWx0U3RhbmRhcmQgPSBtYWtlZmlsZS0+R2V0RGVmKAorICAgICAgICBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+TGFuZ3VhZ2UsICJfU1RBTkRBUkRfREVGQVVMVCIpKTsKKyAgICAgIGlmIChjbU5vbmVtcHR5KGRlZmF1bHRTdGFuZGFyZCkpIHsKKyAgICAgICAgZXhpc3RpbmdTdGFuZGFyZCA9IGRlZmF1bHRTdGFuZGFyZDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGV4aXN0aW5nTGV2ZWxJdGVyID0gY206OmNlbmQodGhpcy0+TGV2ZWxzKTsKKyAgICBpZiAoZXhpc3RpbmdTdGFuZGFyZCkgeworICAgICAgZXhpc3RpbmdMZXZlbEl0ZXIgPQorICAgICAgICBzdGQ6OmZpbmQoY206OmNiZWdpbih0aGlzLT5MZXZlbHMpLCBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpLAorICAgICAgICAgICAgICAgICAgc3RkOjpzdG9pKCpleGlzdGluZ1N0YW5kYXJkKSk7CisgICAgICBpZiAoZXhpc3RpbmdMZXZlbEl0ZXIgPT0gY206OmNlbmQodGhpcy0+TGV2ZWxzKSkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0KKyAgICAgICAgICBjbVN0ckNhdCgiVGhlICIsIHRoaXMtPkxhbmd1YWdlLCAiX1NUQU5EQVJEIHByb3BlcnR5IG9uIHRhcmdldCBcIiIsCisgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZSwgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsCisgICAgICAgICAgICAgICAgICAgKmV4aXN0aW5nU3RhbmRhcmQsICJcIi4iKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgKmVycm9yID0gZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBtYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuZWVkZWQuaW5kZXggIT0gLTEpIHsKKyAgICAgIC8vIEVuc3VyZSB0aGUgQysrIGxhbmd1YWdlIGxldmVsIGlzIGhpZ2ggZW5vdWdoIHRvIHN1cHBvcnQKKyAgICAgIC8vIHRoZSBuZWVkZWQgQysrIGZlYXR1cmVzLgorICAgICAgaWYgKGV4aXN0aW5nTGV2ZWxJdGVyID09IGNtOjpjZW5kKHRoaXMtPkxldmVscykgfHwKKyAgICAgICAgICBleGlzdGluZ0xldmVsSXRlciA8IHRoaXMtPkxldmVscy5iZWdpbigpICsgbmVlZGVkLmluZGV4KSB7CisgICAgICAgIG5ld1JlcXVpcmVkU3RhbmRhcmQgPSB0aGlzLT5MZXZlbHNBc1N0cmluZ3NbbmVlZGVkLmluZGV4XTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGJvb2wgSGF2ZVN0YW5kYXJkQXZhaWxhYmxlKGNtTWFrZWZpbGUqIG1ha2VmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZmVhdHVyZSkgY29uc3QKKyAgeworICAgIGNtUHJvcCBkZWZhdWx0U3RhbmRhcmQgPSBtYWtlZmlsZS0+R2V0RGVmKAorICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxhbmd1YWdlLCAiX1NUQU5EQVJEX0RFRkFVTFQiKSk7CisgICAgaWYgKCFkZWZhdWx0U3RhbmRhcmQpIHsKKyAgICAgIG1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoCisgICAgICAgIE1lc3NhZ2VUeXBlOjpJTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgY21TdHJDYXQoIkNNQUtFXyIsIHRoaXMtPkxhbmd1YWdlLAorICAgICAgICAgICAgICAgICAiX1NUQU5EQVJEX0RFRkFVTFQgaXMgbm90IHNldC4gIENPTVBJTEVfRkVBVFVSRVMgc3VwcG9ydCAiCisgICAgICAgICAgICAgICAgICJub3QgZnVsbHkgY29uZmlndXJlZCBmb3IgdGhpcyBjb21waWxlci4iKSk7CisgICAgICAvLyBSZXR1cm4gdHJ1ZSBzbyB0aGUgY2FsbGVyIGRvZXMgbm90IHRyeSB0byBsb29rdXAgdGhlIGRlZmF1bHQgc3RhbmRhcmQuCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gY29udmVydCBkZWZhdWx0U3RhbmRhcmQgdG8gYW4gaW50ZWdlcgorICAgIGlmIChzdGQ6OmZpbmQoY206OmNiZWdpbih0aGlzLT5MZXZlbHMpLCBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpLAorICAgICAgICAgICAgICAgICAgc3RkOjpzdG9pKCpkZWZhdWx0U3RhbmRhcmQpKSA9PSBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpKSB7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0gY21TdHJDYXQoIlRoZSBDTUFLRV8iLCB0aGlzLT5MYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1NUQU5EQVJEX0RFRkFVTFQgdmFyaWFibGUgY29udGFpbnMgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlOiBcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlZmF1bHRTdGFuZGFyZCwgIlwiLiIpOworICAgICAgbWFrZWZpbGUtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6SU5URVJOQUxfRVJST1IsIGUpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNtUHJvcCBleGlzdGluZ1N0YW5kYXJkID0KKyAgICAgIHRhcmdldC0+R2V0TGFuZ3VhZ2VTdGFuZGFyZCh0aGlzLT5MYW5ndWFnZSwgY29uZmlnKTsKKyAgICBpZiAoIWV4aXN0aW5nU3RhbmRhcmQpIHsKKyAgICAgIGV4aXN0aW5nU3RhbmRhcmQgPSBkZWZhdWx0U3RhbmRhcmQ7CisgICAgfQorCisgICAgYXV0byBleGlzdGluZ0xldmVsSXRlciA9CisgICAgICBzdGQ6OmZpbmQoY206OmNiZWdpbih0aGlzLT5MZXZlbHMpLCBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpLAorICAgICAgICAgICAgICAgIHN0ZDo6c3RvaSgqZXhpc3RpbmdTdGFuZGFyZCkpOworICAgIGlmIChleGlzdGluZ0xldmVsSXRlciA9PSBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpKSB7CisgICAgICBjb25zdCBzdGQ6OnN0cmluZyBlID0KKyAgICAgICAgY21TdHJDYXQoIlRoZSAiLCB0aGlzLT5MYW5ndWFnZSwgIl9TVEFOREFSRCBwcm9wZXJ0eSBvbiB0YXJnZXQgXCIiLAorICAgICAgICAgICAgICAgICB0YXJnZXQtPkdldE5hbWUoKSwgIlwiIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHZhbHVlOiBcIiIsCisgICAgICAgICAgICAgICAgICpleGlzdGluZ1N0YW5kYXJkLCAiXCIuIik7CisgICAgICBtYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYXV0byBuZWVkZWQgPSB0aGlzLT5IaWdoZXN0U3RhbmRhcmROZWVkZWQobWFrZWZpbGUsIGZlYXR1cmUpOworCisgICAgcmV0dXJuIChuZWVkZWQuaW5kZXggPT0gLTEpIHx8CisgICAgICAodGhpcy0+TGV2ZWxzLmJlZ2luKCkgKyBuZWVkZWQuaW5kZXgpIDw9IGV4aXN0aW5nTGV2ZWxJdGVyOworICB9CisKKyAgU3RhbmRhcmROZWVkZWQgSGlnaGVzdFN0YW5kYXJkTmVlZGVkKGNtTWFrZWZpbGUqIG1ha2VmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGZlYXR1cmUpIGNvbnN0CisgIHsKKyAgICBzdGQ6OnN0cmluZyBwcmVmaXggPSBjbVN0ckNhdCgiQ01BS0VfIiwgdGhpcy0+TGFuZ3VhZ2UpOworICAgIFN0YW5kYXJkTmVlZGVkIG1heExldmVsID0geyAtMSwgLTEgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRoaXMtPkxldmVscy5zaXplKCk7ICsraSkgeworICAgICAgaWYgKGNvbnN0IGNoYXIqIHByb3AgPSBtYWtlZmlsZS0+R2V0RGVmaW5pdGlvbigKKyAgICAgICAgICAgIGNtU3RyQ2F0KHByZWZpeCwgdGhpcy0+TGV2ZWxzQXNTdHJpbmdzW2ldLCAiX0NPTVBJTEVfRkVBVFVSRVMiKSkpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByb3BzID0gY21FeHBhbmRlZExpc3QocHJvcCk7CisgICAgICAgIGlmIChjbTo6Y29udGFpbnMocHJvcHMsIGZlYXR1cmUpKSB7CisgICAgICAgICAgbWF4TGV2ZWwgPSB7IHN0YXRpY19jYXN0PGludD4oaSksIHRoaXMtPkxldmVsc1tpXSB9OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYXhMZXZlbDsKKyAgfQorCisgIGJvb2wgSXNMYXRlclN0YW5kYXJkKGludCBsaHMsIGludCByaHMpIGNvbnN0CisgIHsKKyAgICBhdXRvIHJoc0l0ID0KKyAgICAgIHN0ZDo6ZmluZChjbTo6Y2JlZ2luKHRoaXMtPkxldmVscyksIGNtOjpjZW5kKHRoaXMtPkxldmVscyksIHJocyk7CisKKyAgICByZXR1cm4gc3RkOjpmaW5kKHJoc0l0LCBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpLCBsaHMpICE9CisgICAgICBjbTo6Y2VuZCh0aGlzLT5MZXZlbHMpOworICB9CisKKyAgc3RkOjpzdHJpbmcgTGFuZ3VhZ2U7CisgIHN0ZDo6dmVjdG9yPGludD4gTGV2ZWxzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gTGV2ZWxzQXNTdHJpbmdzOworfTsKKworc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBTdGFuYXJkTGV2ZWxDb21wdXRlcj4gU3RhbmRhcmRDb21wdXRlck1hcHBpbmcgPQorICB7CisgICAgeyAiQyIsCisgICAgICBTdGFuYXJkTGV2ZWxDb21wdXRlcnsgIkMiLCBzdGQ6OnZlY3RvcjxpbnQ+eyA5MCwgOTksIDExIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+eyAiOTAiLCAiOTkiLCAiMTEiIH0gfSB9LAorICAgIHsgIkNYWCIsCisgICAgICBTdGFuYXJkTGV2ZWxDb21wdXRlcnsKKyAgICAgICAgIkNYWCIsIHN0ZDo6dmVjdG9yPGludD57IDk4LCAxMSwgMTQsIDE3LCAyMCB9LAorICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz57ICI5OCIsICIxMSIsICIxNCIsICIxNyIsICIyMCIgfSB9IH0sCisgICAgeyAiQ1VEQSIsCisgICAgICBTdGFuYXJkTGV2ZWxDb21wdXRlcnsKKyAgICAgICAgIkNVREEiLCBzdGQ6OnZlY3RvcjxpbnQ+eyAwMywgMTEsIDE0LCAxNywgMjAgfSwKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+eyAiMDMiLCAiMTEiLCAiMTQiLCAiMTciLCAiMjAiIH0gfSB9LAorICAgIHsgIk9CSkMiLAorICAgICAgU3RhbmFyZExldmVsQ29tcHV0ZXJ7ICJPQkpDIiwgc3RkOjp2ZWN0b3I8aW50PnsgOTAsIDk5LCAxMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPnsgIjkwIiwgIjk5IiwgIjExIiB9IH0gfSwKKyAgICB7ICJPQkpDWFgiLAorICAgICAgU3RhbmFyZExldmVsQ29tcHV0ZXJ7CisgICAgICAgICJPQkpDWFgiLCBzdGQ6OnZlY3RvcjxpbnQ+eyA5OCwgMTEsIDE0LCAxNywgMjAgfSwKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+eyAiOTgiLCAiMTEiLCAiMTQiLCAiMTciLCAiMjAiIH0gfSB9LAorICB9OworfQorCitzdGQ6OnN0cmluZyBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlcjo6R2V0Q29tcGlsZU9wdGlvbkRlZigKKyAgY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIHRhcmdldCwgc3RkOjpzdHJpbmcgY29uc3QmIGxhbmcsCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0Cit7CisgIGNvbnN0IGF1dG8mIG1hcHBpbmcgPSBTdGFuZGFyZENvbXB1dGVyTWFwcGluZy5maW5kKGxhbmcpOworICBpZiAobWFwcGluZyA9PSBjbTo6Y2VuZChTdGFuZGFyZENvbXB1dGVyTWFwcGluZykpIHsKKyAgICByZXR1cm4gc3RkOjpzdHJpbmd7fTsKKyAgfQorCisgIHJldHVybiBtYXBwaW5nLT5zZWNvbmQuR2V0Q29tcGlsZU9wdGlvbkRlZih0aGlzLT5NYWtlZmlsZSwgdGFyZ2V0LCBjb25maWcpOworfQorCitib29sIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyOjpBZGRSZXF1aXJlZFRhcmdldEZlYXR1cmUoCisgIGNtVGFyZ2V0KiB0YXJnZXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLCBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0Cit7CisgIGlmIChjbUdlbmVyYXRvckV4cHJlc3Npb246OkZpbmQoZmVhdHVyZSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICB0YXJnZXQtPkFwcGVuZFByb3BlcnR5KCJDT01QSUxFX0ZFQVRVUkVTIiwgZmVhdHVyZSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBzdGQ6OnN0cmluZyBsYW5nOworICBpZiAoIXRoaXMtPkNoZWNrQ29tcGlsZUZlYXR1cmVzQXZhaWxhYmxlKHRhcmdldC0+R2V0TmFtZSgpLCBmZWF0dXJlLCBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHRhcmdldC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfRkVBVFVSRVMiLCBmZWF0dXJlKTsKKworICAvLyBGSVhNRTogQWRkIGEgcG9saWN5IHRvIGF2b2lkIHVwZGF0aW5nIHRoZSA8TEFORz5fU1RBTkRBUkQgdGFyZ2V0CisgIC8vIHByb3BlcnR5IGR1ZSB0byBDT01QSUxFX0ZFQVRVUkVTLiAgVGhlIGxhbmd1YWdlIHN0YW5kYXJkIHNlbGVjdGlvbgorICAvLyBzaG91bGQgYmUgZG9uZSBwdXJlbHkgYXQgZ2VuZXJhdGUgdGltZSBiYXNlZCBvbiB3aGF0ZXZlciB0aGUgcHJvamVjdAorICAvLyBjb2RlIHB1dCBpbiB0aGVzZSBwcm9wZXJ0aWVzIGV4cGxpY2l0bHkuICBUaGF0IGlzIG1vc3RseSB0cnVlIG5vdywKKyAgLy8gYnV0IGZvciBjb21wYXRpYmlsaXR5IHdlIG5lZWQgdG8gY29udGludWUgdXBkYXRpbmcgdGhlIHByb3BlcnR5IGhlcmUuCisgIHN0ZDo6c3RyaW5nIG5ld1JlcXVpcmVkU3RhbmRhcmQ7CisgIGJvb2wgbmV3UmVxdWlyZWQgPSB0aGlzLT5HZXROZXdSZXF1aXJlZFN0YW5kYXJkKAorICAgIHRhcmdldC0+R2V0TmFtZSgpLCBmZWF0dXJlLAorICAgIHRhcmdldC0+R2V0UHJvcGVydHkoY21TdHJDYXQobGFuZywgIl9TVEFOREFSRCIpKSwgbmV3UmVxdWlyZWRTdGFuZGFyZCwKKyAgICBlcnJvcik7CisgIGlmICghbmV3UmVxdWlyZWRTdGFuZGFyZC5lbXB0eSgpKSB7CisgICAgdGFyZ2V0LT5TZXRQcm9wZXJ0eShjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIiksIG5ld1JlcXVpcmVkU3RhbmRhcmQpOworICB9CisgIHJldHVybiBuZXdSZXF1aXJlZDsKK30KKworYm9vbCBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlcjo6Q2hlY2tDb21waWxlRmVhdHVyZXNBdmFpbGFibGUoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXROYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwgc3RkOjpzdHJpbmcmIGxhbmcsCisgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKK3sKKyAgaWYgKCF0aGlzLT5Db21waWxlRmVhdHVyZUtub3duKHRhcmdldE5hbWUsIGZlYXR1cmUsIGxhbmcsIGVycm9yKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGNvbnN0IGNoYXIqIGZlYXR1cmVzID0gdGhpcy0+Q29tcGlsZUZlYXR1cmVzQXZhaWxhYmxlKGxhbmcsIGVycm9yKTsKKyAgaWYgKCFmZWF0dXJlcykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdmFpbGFibGVGZWF0dXJlcyA9IGNtRXhwYW5kZWRMaXN0KGZlYXR1cmVzKTsKKyAgaWYgKCFjbTo6Y29udGFpbnMoYXZhaWxhYmxlRmVhdHVyZXMsIGZlYXR1cmUpKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgZSA8PCAiVGhlIGNvbXBpbGVyIGZlYXR1cmUgXCIiIDw8IGZlYXR1cmUgPDwgIlwiIGlzIG5vdCBrbm93biB0byAiIDw8IGxhbmcKKyAgICAgIDw8ICIgY29tcGlsZXJcblwiIgorICAgICAgPDwgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9JRCIpCisgICAgICA8PCAiXCJcbnZlcnNpb24gIgorICAgICAgPDwgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9WRVJTSU9OIikKKyAgICAgIDw8ICIuIjsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICplcnJvciA9IGUuc3RyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY21TdGFuZGFyZExldmVsUmVzb2x2ZXI6OkNvbXBpbGVGZWF0dXJlS25vd24oCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXROYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwgc3RkOjpzdHJpbmcmIGxhbmcsCisgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKK3sKKyAgYXNzZXJ0KGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChmZWF0dXJlKSA9PSBzdGQ6OnN0cmluZzo6bnBvcyk7CisKKyAgYm9vbCBpc0NGZWF0dXJlID0KKyAgICBzdGQ6OmZpbmRfaWYoY206OmNiZWdpbihDX0ZFQVRVUkVTKSArIDEsIGNtOjpjZW5kKENfRkVBVFVSRVMpLAorICAgICAgICAgICAgICAgICBjbVN0ckNtcChmZWF0dXJlKSkgIT0gY206OmNlbmQoQ19GRUFUVVJFUyk7CisgIGlmIChpc0NGZWF0dXJlKSB7CisgICAgbGFuZyA9ICJDIjsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBib29sIGlzQ3h4RmVhdHVyZSA9CisgICAgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1hYX0ZFQVRVUkVTKSArIDEsIGNtOjpjZW5kKENYWF9GRUFUVVJFUyksCisgICAgICAgICAgICAgICAgIGNtU3RyQ21wKGZlYXR1cmUpKSAhPSBjbTo6Y2VuZChDWFhfRkVBVFVSRVMpOworICBpZiAoaXNDeHhGZWF0dXJlKSB7CisgICAgbGFuZyA9ICJDWFgiOworICAgIHJldHVybiB0cnVlOworICB9CisgIGJvb2wgaXNDdWRhRmVhdHVyZSA9CisgICAgc3RkOjpmaW5kX2lmKGNtOjpjYmVnaW4oQ1VEQV9GRUFUVVJFUykgKyAxLCBjbTo6Y2VuZChDVURBX0ZFQVRVUkVTKSwKKyAgICAgICAgICAgICAgICAgY21TdHJDbXAoZmVhdHVyZSkpICE9IGNtOjpjZW5kKENVREFfRkVBVFVSRVMpOworICBpZiAoaXNDdWRhRmVhdHVyZSkgeworICAgIGxhbmcgPSAiQ1VEQSI7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgIGlmIChlcnJvcikgeworICAgIGUgPDwgInNwZWNpZmllZCI7CisgIH0gZWxzZSB7CisgICAgZSA8PCAiU3BlY2lmaWVkIjsKKyAgfQorICBlIDw8ICIgdW5rbm93biBmZWF0dXJlIFwiIiA8PCBmZWF0dXJlCisgICAgPDwgIlwiIGZvciAiCisgICAgICAgInRhcmdldCBcIiIKKyAgICA8PCB0YXJnZXROYW1lIDw8ICJcIi4iOworICBpZiAoZXJyb3IpIHsKKyAgICAqZXJyb3IgPSBlLnN0cigpOworICB9IGVsc2UgeworICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IGNoYXIqIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyOjpDb21waWxlRmVhdHVyZXNBdmFpbGFibGUoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nLCBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0Cit7CisgIGlmICghdGhpcy0+TWFrZWZpbGUtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5HZXRMYW5ndWFnZUVuYWJsZWQobGFuZykpIHsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgIGUgPDwgImNhbm5vdCI7CisgICAgfSBlbHNlIHsKKyAgICAgIGUgPDwgIkNhbm5vdCI7CisgICAgfQorICAgIGUgPDwgIiB1c2UgZmVhdHVyZXMgZnJvbSBub24tZW5hYmxlZCBsYW5ndWFnZSAiIDw8IGxhbmc7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAqZXJyb3IgPSBlLnN0cigpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwgZS5zdHIoKSk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworICB9CisKKyAgY29uc3QgY2hhciogZmVhdHVyZXNLbm93biA9CisgICAgdGhpcy0+TWFrZWZpbGUtPkdldERlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFX0ZFQVRVUkVTIik7CisKKyAgaWYgKCFjbU5vbmVtcHR5KGZlYXR1cmVzS25vd24pKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CisgICAgaWYgKGVycm9yKSB7CisgICAgICBlIDw8ICJubyI7CisgICAgfSBlbHNlIHsKKyAgICAgIGUgPDwgIk5vIjsKKyAgICB9CisgICAgZSA8PCAiIGtub3duIGZlYXR1cmVzIGZvciAiIDw8IGxhbmcgPDwgIiBjb21waWxlclxuXCIiCisgICAgICA8PCB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIkNNQUtFXyIgKyBsYW5nICsgIl9DT01QSUxFUl9JRCIpCisgICAgICA8PCAiXCJcbnZlcnNpb24gIgorICAgICAgPDwgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJDTUFLRV8iICsgbGFuZyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9DT01QSUxFUl9WRVJTSU9OIikKKyAgICAgIDw8ICIuIjsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICplcnJvciA9IGUuc3RyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKyAgcmV0dXJuIGZlYXR1cmVzS25vd247Cit9CisKK2Jvb2wgY21TdGFuZGFyZExldmVsUmVzb2x2ZXI6OkdldE5ld1JlcXVpcmVkU3RhbmRhcmQoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXROYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKKyAgY21Qcm9wIGN1cnJlbnRMYW5nU3RhbmRhcmRWYWx1ZSwgc3RkOjpzdHJpbmcmIG5ld1JlcXVpcmVkU3RhbmRhcmQsCisgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3QKK3sKKyAgc3RkOjpzdHJpbmcgbGFuZzsKKyAgaWYgKCF0aGlzLT5DaGVja0NvbXBpbGVGZWF0dXJlc0F2YWlsYWJsZSh0YXJnZXROYW1lLCBmZWF0dXJlLCBsYW5nLCBlcnJvcikpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBhdXRvIG1hcHBpbmcgPSBTdGFuZGFyZENvbXB1dGVyTWFwcGluZy5maW5kKGxhbmcpOworICBpZiAobWFwcGluZyAhPSBjbTo6Y2VuZChTdGFuZGFyZENvbXB1dGVyTWFwcGluZykpIHsKKyAgICByZXR1cm4gbWFwcGluZy0+c2Vjb25kLkdldE5ld1JlcXVpcmVkU3RhbmRhcmQoCisgICAgICB0aGlzLT5NYWtlZmlsZSwgdGFyZ2V0TmFtZSwgZmVhdHVyZSwgY3VycmVudExhbmdTdGFuZGFyZFZhbHVlLAorICAgICAgbmV3UmVxdWlyZWRTdGFuZGFyZCwgZXJyb3IpOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlcjo6SGF2ZVN0YW5kYXJkQXZhaWxhYmxlKAorICBjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LCBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUpIGNvbnN0Cit7CisgIGF1dG8gbWFwcGluZyA9IFN0YW5kYXJkQ29tcHV0ZXJNYXBwaW5nLmZpbmQobGFuZyk7CisgIGlmIChtYXBwaW5nICE9IGNtOjpjZW5kKFN0YW5kYXJkQ29tcHV0ZXJNYXBwaW5nKSkgeworICAgIHJldHVybiBtYXBwaW5nLT5zZWNvbmQuSGF2ZVN0YW5kYXJkQXZhaWxhYmxlKHRoaXMtPk1ha2VmaWxlLCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLCBmZWF0dXJlKTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgY21TdGFuZGFyZExldmVsUmVzb2x2ZXI6OklzTGF0ZXJTdGFuZGFyZChzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiByaHMpIGNvbnN0Cit7CisgIGF1dG8gbWFwcGluZyA9IFN0YW5kYXJkQ29tcHV0ZXJNYXBwaW5nLmZpbmQobGFuZyk7CisgIGlmIChtYXBwaW5nICE9IGNtOjpjZW5kKFN0YW5kYXJkQ29tcHV0ZXJNYXBwaW5nKSkgeworICAgIHJldHVybiBtYXBwaW5nLT5zZWNvbmQuSXNMYXRlclN0YW5kYXJkKHN0ZDo6c3RvaShsaHMpLCBzdGQ6OnN0b2kocmhzKSk7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RhbmRhcmRMZXZlbFJlc29sdmVyLmggYi9Tb3VyY2UvY21TdGFuZGFyZExldmVsUmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTlhNWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtU3RhbmRhcmRMZXZlbFJlc29sdmVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlcl9oCisjZGVmaW5lIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyX2gKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKKworY2xhc3MgY21NYWtlZmlsZTsKK2NsYXNzIGNtR2VuZXJhdG9yVGFyZ2V0OworY2xhc3MgY21UYXJnZXQ7CisKK2NsYXNzIGNtU3RhbmRhcmRMZXZlbFJlc29sdmVyCit7CisKK3B1YmxpYzoKKyAgZXhwbGljaXQgY21TdGFuZGFyZExldmVsUmVzb2x2ZXIoY21NYWtlZmlsZSogbWFrZWZpbGUpCisgICAgOiBNYWtlZmlsZShtYWtlZmlsZSkKKyAgeworICB9CisKKyAgc3RkOjpzdHJpbmcgR2V0Q29tcGlsZU9wdGlvbkRlZihjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpIGNvbnN0OworCisgIGJvb2wgQWRkUmVxdWlyZWRUYXJnZXRGZWF0dXJlKGNtVGFyZ2V0KiB0YXJnZXQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IgPSBudWxscHRyKSBjb25zdDsKKworICBib29sIENvbXBpbGVGZWF0dXJlS25vd24oY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwgc3RkOjpzdHJpbmcmIGxhbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0OworCisgIGNvbnN0IGNoYXIqIENvbXBpbGVGZWF0dXJlc0F2YWlsYWJsZShjb25zdCBzdGQ6OnN0cmluZyYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcikgY29uc3Q7CisKKyAgYm9vbCBHZXROZXdSZXF1aXJlZFN0YW5kYXJkKGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3AgY3VycmVudExhbmdTdGFuZGFyZFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIG5ld1JlcXVpcmVkU3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IgPSBudWxscHRyKSBjb25zdDsKKworICBib29sIEhhdmVTdGFuZGFyZEF2YWlsYWJsZShjbUdlbmVyYXRvclRhcmdldCBjb25zdCogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZlYXR1cmUpIGNvbnN0OworCisgIGJvb2wgSXNMYXRlclN0YW5kYXJkKHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLCBzdGQ6OnN0cmluZyBjb25zdCYgbGhzLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcmhzKSBjb25zdDsKKworcHJpdmF0ZToKKyAgYm9vbCBDaGVja0NvbXBpbGVGZWF0dXJlc0F2YWlsYWJsZShjb25zdCBzdGQ6OnN0cmluZyYgdGFyZ2V0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgbGFuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3IpIGNvbnN0OworCisgIGNtTWFrZWZpbGUqIE1ha2VmaWxlOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RhbmRhcmRMZXhlci5oIGIvU291cmNlL2NtU3RhbmRhcmRMZXhlci5oCmluZGV4IDEzZjc2MjIuLmUwYjIxMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN0YW5kYXJkTGV4ZXIuaAorKysgYi9Tb3VyY2UvY21TdGFuZGFyZExleGVyLmgKQEAgLTMsNiArMywyMyBAQAogI2lmbmRlZiBjbVN0YW5kYXJkTGV4ZXJfaAogI2RlZmluZSBjbVN0YW5kYXJkTGV4ZXJfaAogCisjaWYgZGVmaW5lZChfX2xpbnV4KQorLyogTmVlZGVkIGZvciBnbGliYyA8IDIuMTIgKi8KKyMgIGRlZmluZSBfWE9QRU5fU09VUkNFIDYwMAorI2VuZGlmCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX3N1bikKKy8qIFBPU0lYIEFQSXMgYXJlIG5lZWRlZCAqLworIyAgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAyMDA4MDlMCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fc3VuKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKKy8qIEMgc291cmNlczogZm9yIGZpbGVubyBhbmQgc3RyZHVwICovCisjICBkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAKKyNlbmRpZgorI2lmIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykKKy8qIEZvciBpc2FzY2lpICovCisjICBkZWZpbmUgX1hPUEVOX1NPVVJDRSA3MDAKKyNlbmRpZgorCiAjaW5jbHVkZSAiY21zeXMvQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKIC8qIERpc2FibGUgc29tZSB3YXJuaW5ncy4gICovCkBAIC01MCw3ICs2Nyw3IEBACiAjZGVmaW5lIFlZX05PX1VOUFVUIDEKICNkZWZpbmUgRUNITwogCi0jaW5jbHVkZSAiY21fa3dpbWwuaCIKKyNpbmNsdWRlIDxjbTNwL2t3aW1sL2ludC5oPgogdHlwZWRlZiBLV0lNTF9JTlRfaW50OF90IGZsZXhfaW50OF90OwogdHlwZWRlZiBLV0lNTF9JTlRfdWludDhfdCBmbGV4X3VpbnQ4X3Q7CiB0eXBlZGVmIEtXSU1MX0lOVF9pbnQxNl90IGZsZXhfaW50MTZfdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0YXRlLmN4eCBiL1NvdXJjZS9jbVN0YXRlLmN4eAppbmRleCBmOWI1ZWQxLi43M2YxNjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdGF0ZS5jeHgKKysrIGIvU291cmNlL2NtU3RhdGUuY3h4CkBAIC0zLDkgKzMsOSBAQAogI2luY2x1ZGUgImNtU3RhdGUuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgpAQCAtMzQsNjkgKzM0LDg0IEBACiAKIGNtU3RhdGU6On5jbVN0YXRlKCkgPSBkZWZhdWx0OwogCi1jb25zdCBjaGFyKiBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZShjbVN0YXRlRW51bXM6OlRhcmdldFR5cGUgdGFyZ2V0VHlwZSkKK2NvbnN0IHN0ZDo6c3RyaW5nJiBjbVN0YXRlOjpHZXRUYXJnZXRUeXBlTmFtZSgKKyAgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHRhcmdldFR5cGUpCiB7CisjZGVmaW5lIE1BS0VfU1RBVElDX1BST1AoUFJPUCkgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3AjI1BST1AgPSAjUFJPUAorICBNQUtFX1NUQVRJQ19QUk9QKFNUQVRJQ19MSUJSQVJZKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChNT0RVTEVfTElCUkFSWSk7CisgIE1BS0VfU1RBVElDX1BST1AoU0hBUkVEX0xJQlJBUlkpOworICBNQUtFX1NUQVRJQ19QUk9QKE9CSkVDVF9MSUJSQVJZKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChFWEVDVVRBQkxFKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChVVElMSVRZKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChHTE9CQUxfVEFSR0VUKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChJTlRFUkZBQ0VfTElCUkFSWSk7CisgIE1BS0VfU1RBVElDX1BST1AoVU5LTk9XTl9MSUJSQVJZKTsKKyAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3BFbXB0eTsKKyN1bmRlZiBNQUtFX1NUQVRJQ19QUk9QCisKICAgc3dpdGNoICh0YXJnZXRUeXBlKSB7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZOgotICAgICAgcmV0dXJuICJTVEFUSUNfTElCUkFSWSI7CisgICAgICByZXR1cm4gcHJvcFNUQVRJQ19MSUJSQVJZOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWToKLSAgICAgIHJldHVybiAiTU9EVUxFX0xJQlJBUlkiOworICAgICAgcmV0dXJuIHByb3BNT0RVTEVfTElCUkFSWTsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlk6Ci0gICAgICByZXR1cm4gIlNIQVJFRF9MSUJSQVJZIjsKKyAgICAgIHJldHVybiBwcm9wU0hBUkVEX0xJQlJBUlk7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok9CSkVDVF9MSUJSQVJZOgotICAgICAgcmV0dXJuICJPQkpFQ1RfTElCUkFSWSI7CisgICAgICByZXR1cm4gcHJvcE9CSkVDVF9MSUJSQVJZOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOgotICAgICAgcmV0dXJuICJFWEVDVVRBQkxFIjsKKyAgICAgIHJldHVybiBwcm9wRVhFQ1VUQUJMRTsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VVRJTElUWToKLSAgICAgIHJldHVybiAiVVRJTElUWSI7CisgICAgICByZXR1cm4gcHJvcFVUSUxJVFk7CiAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQ6Ci0gICAgICByZXR1cm4gIkdMT0JBTF9UQVJHRVQiOworICAgICAgcmV0dXJuIHByb3BHTE9CQUxfVEFSR0VUOwogICAgIGNhc2UgY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWToKLSAgICAgIHJldHVybiAiSU5URVJGQUNFX0xJQlJBUlkiOworICAgICAgcmV0dXJuIHByb3BJTlRFUkZBQ0VfTElCUkFSWTsKICAgICBjYXNlIGNtU3RhdGVFbnVtczo6VU5LTk9XTl9MSUJSQVJZOgotICAgICAgcmV0dXJuICJVTktOT1dOX0xJQlJBUlkiOworICAgICAgcmV0dXJuIHByb3BVTktOT1dOX0xJQlJBUlk7CiAgIH0KICAgYXNzZXJ0KGZhbHNlICYmICJVbmV4cGVjdGVkIHRhcmdldCB0eXBlIik7Ci0gIHJldHVybiBudWxscHRyOworICByZXR1cm4gcHJvcEVtcHR5OwogfQogCi1jb25zdCBjaGFyKiBjbUNhY2hlRW50cnlUeXBlc1tdID0geyAiQk9PTCIsICAgICAgICAgICJQQVRIIiwgICAgICJGSUxFUEFUSCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1RSSU5HIiwgICAgICAgICJJTlRFUk5BTCIsICJTVEFUSUMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVOSU5JVElBTElaRUQiLCBudWxscHRyIH07CitzdGF0aWMgY29uc3Qgc3RkOjphcnJheTxzdGQ6OnN0cmluZywgNz4gY21DYWNoZUVudHJ5VHlwZXMgPSB7CisgIHsgIkJPT0wiLCAiUEFUSCIsICJGSUxFUEFUSCIsICJTVFJJTkciLCAiSU5URVJOQUwiLCAiU1RBVElDIiwKKyAgICAiVU5JTklUSUFMSVpFRCIgfQorfTsKIAotY29uc3QgY2hhciogY21TdGF0ZTo6Q2FjaGVFbnRyeVR5cGVUb1N0cmluZyhjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIHR5cGUpCitjb25zdCBzdGQ6OnN0cmluZyYgY21TdGF0ZTo6Q2FjaGVFbnRyeVR5cGVUb1N0cmluZygKKyAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSB0eXBlKQogewotICBpZiAodHlwZSA+IDYpIHsKLSAgICByZXR1cm4gY21DYWNoZUVudHJ5VHlwZXNbNl07CisgIGlmICh0eXBlIDwgY21TdGF0ZUVudW1zOjpCT09MIHx8IHR5cGUgPiBjbVN0YXRlRW51bXM6OlVOSU5JVElBTElaRUQpIHsKKyAgICB0eXBlID0gY21TdGF0ZUVudW1zOjpVTklOSVRJQUxJWkVEOwogICB9CiAgIHJldHVybiBjbUNhY2hlRW50cnlUeXBlc1t0eXBlXTsKIH0KIAotY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSBjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKGNvbnN0IGNoYXIqIHMpCitjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIGNtU3RhdGU6OlN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUoCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzKQogewogICBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIHR5cGUgPSBjbVN0YXRlRW51bXM6OlNUUklORzsKICAgU3RyaW5nVG9DYWNoZUVudHJ5VHlwZShzLCB0eXBlKTsKICAgcmV0dXJuIHR5cGU7CiB9CiAKLWJvb2wgY21TdGF0ZTo6U3RyaW5nVG9DYWNoZUVudHJ5VHlwZShjb25zdCBjaGFyKiBzLAorYm9vbCBjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUmIHR5cGUpCiB7Ci0gIGludCBpID0gMDsKLSAgd2hpbGUgKGNtQ2FjaGVFbnRyeVR5cGVzW2ldKSB7Ci0gICAgaWYgKHN0cmNtcChzLCBjbUNhY2hlRW50cnlUeXBlc1tpXSkgPT0gMCkgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNtQ2FjaGVFbnRyeVR5cGVzLnNpemUoKTsgKytpKSB7CisgICAgaWYgKHMgPT0gY21DYWNoZUVudHJ5VHlwZXNbaV0pIHsKICAgICAgIHR5cGUgPSBzdGF0aWNfY2FzdDxjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlPihpKTsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICArK2k7CiAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIGNtU3RhdGU6OklzQ2FjaGVFbnRyeVR5cGUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkKIHsKLSAgZm9yIChpbnQgaSA9IDA7IGNtQ2FjaGVFbnRyeVR5cGVzW2ldOyArK2kpIHsKLSAgICBpZiAoa2V5ID09IGNtQ2FjaGVFbnRyeVR5cGVzW2ldKSB7CisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGkgOiBjbUNhY2hlRW50cnlUeXBlcykgeworICAgIGlmIChrZXkgPT0gaSkgewogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CkBAIC0xMjIsMjYgKzEzNywyMyBAQAogCiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21TdGF0ZTo6R2V0Q2FjaGVFbnRyeUtleXMoKSBjb25zdAogewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVmaW5pdGlvbnM7Ci0gIGRlZmluaXRpb25zLnJlc2VydmUodGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRTaXplKCkpOwotICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBjaXQgPSB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3IoKTsKLSAgZm9yIChjaXQuQmVnaW4oKTsgIWNpdC5Jc0F0RW5kKCk7IGNpdC5OZXh0KCkpIHsKLSAgICBkZWZpbml0aW9ucy5wdXNoX2JhY2soY2l0LkdldE5hbWUoKSk7Ci0gIH0KLSAgcmV0dXJuIGRlZmluaXRpb25zOworICByZXR1cm4gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUVudHJ5S2V5cygpOwogfQogCi1jb25zdCBjaGFyKiBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKK2NtUHJvcCBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKIHsKLSAgY21DYWNoZU1hbmFnZXI6OkNhY2hlRW50cnkqIGUgPSB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlRW50cnkoa2V5KTsKLSAgaWYgKCFlKSB7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAgcmV0dXJuIGUtPlZhbHVlLmNfc3RyKCk7CisgIHJldHVybiB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlRW50cnlWYWx1ZShrZXkpOwogfQogCi1jb25zdCBzdGQ6OnN0cmluZyogY21TdGF0ZTo6R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKAotICBzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdAorc3RkOjpzdHJpbmcgY21TdGF0ZTo6R2V0U2FmZUNhY2hlRW50cnlWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdAoreworICBpZiAoY21Qcm9wIHZhbCA9IHRoaXMtPkdldENhY2hlRW50cnlWYWx1ZShrZXkpKSB7CisgICAgcmV0dXJuICp2YWw7CisgIH0KKyAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7Cit9CisKK2NtUHJvcCBjbVN0YXRlOjpHZXRJbml0aWFsaXplZENhY2hlVmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKGtleSk7CiB9CkBAIC0xNDksOSArMTYxLDcgQEAKIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgY21TdGF0ZTo6R2V0Q2FjaGVFbnRyeVR5cGUoCiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpIGNvbnN0CiB7Ci0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0KLSAgICB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpOwotICByZXR1cm4gaXQuR2V0VHlwZSgpOworICByZXR1cm4gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUVudHJ5VHlwZShrZXkpOwogfQogCiB2b2lkIGNtU3RhdGU6OlNldENhY2hlRW50cnlWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5LApAQCAtMTY0LDQ0ICsxNzQsMzIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUpCiB7Ci0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0KLSAgICB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpOwotICBpdC5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlLmNfc3RyKCkpOworICB0aGlzLT5DYWNoZU1hbmFnZXItPlNldENhY2hlRW50cnlQcm9wZXJ0eShrZXksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIGNtU3RhdGU6OlNldENhY2hlRW50cnlCb29sUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmFsdWUpCiB7Ci0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0KLSAgICB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpOwotICBpdC5TZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgdGhpcy0+Q2FjaGVNYW5hZ2VyLT5TZXRDYWNoZUVudHJ5Qm9vbFByb3BlcnR5KGtleSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiB9CiAKIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5UHJvcGVydHlMaXN0KAogICBjb25zdCBzdGQ6OnN0cmluZyYga2V5KQogewotICBjbUNhY2hlTWFuYWdlcjo6Q2FjaGVJdGVyYXRvciBpdCA9Ci0gICAgdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUl0ZXJhdG9yKGtleS5jX3N0cigpKTsKLSAgcmV0dXJuIGl0LkdldFByb3BlcnR5TGlzdCgpOworICByZXR1cm4gdGhpcy0+Q2FjaGVNYW5hZ2VyLT5HZXRDYWNoZUVudHJ5UHJvcGVydHlMaXN0KGtleSk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtU3RhdGU6OkdldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpCitjbVByb3AgY21TdGF0ZTo6R2V0Q2FjaGVFbnRyeVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpCiB7Ci0gIGNtQ2FjaGVNYW5hZ2VyOjpDYWNoZUl0ZXJhdG9yIGl0ID0KLSAgICB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpOwotICBpZiAoIWl0LlByb3BlcnR5RXhpc3RzKHByb3BlcnR5TmFtZSkpIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICByZXR1cm4gaXQuR2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTsKKyAgcmV0dXJuIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGtleSwgcHJvcGVydHlOYW1lKTsKIH0KIAogYm9vbCBjbVN0YXRlOjpHZXRDYWNoZUVudHJ5UHJvcGVydHlBc0Jvb2woc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpCiB7Ci0gIHJldHVybiB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlSXRlcmF0b3Ioa2V5LmNfc3RyKCkpCi0gICAgLkdldFByb3BlcnR5QXNCb29sKHByb3BlcnR5TmFtZSk7CisgIHJldHVybiB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbChrZXksIHByb3BlcnR5TmFtZSk7CiB9CiAKIHZvaWQgY21TdGF0ZTo6QWRkQ2FjaGVFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSwKQEAgLTI1MywyMSArMjUxLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGJvb2wgYXNTdHJpbmcpCiB7Ci0gIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSkKLSAgICAuQXBwZW5kUHJvcGVydHkocHJvcGVydHksIHZhbHVlLmNfc3RyKCksIGFzU3RyaW5nKTsKKyAgdGhpcy0+Q2FjaGVNYW5hZ2VyLT5BcHBlbmRDYWNoZUVudHJ5UHJvcGVydHkoa2V5LCBwcm9wZXJ0eSwgdmFsdWUsIGFzU3RyaW5nKTsKIH0KIAogdm9pZCBjbVN0YXRlOjpSZW1vdmVDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpCiB7Ci0gIHRoaXMtPkNhY2hlTWFuYWdlci0+R2V0Q2FjaGVJdGVyYXRvcihrZXkuY19zdHIoKSkKLSAgICAuU2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBudWxscHRyKTsKKyAgdGhpcy0+Q2FjaGVNYW5hZ2VyLT5SZW1vdmVDYWNoZUVudHJ5UHJvcGVydHkoa2V5LCBwcm9wZXJ0eU5hbWUpOwogfQogCiBjbVN0YXRlU25hcHNob3QgY21TdGF0ZTo6UmVzZXQoKQogewogICB0aGlzLT5HbG9iYWxQcm9wZXJ0aWVzLkNsZWFyKCk7Ci0gIHRoaXMtPlByb3BlcnR5RGVmaW5pdGlvbnMuY2xlYXIoKTsKKyAgdGhpcy0+UHJvcGVydHlEZWZpbml0aW9ucyA9IHt9OwogICB0aGlzLT5HbG9iVmVyaWZpY2F0aW9uTWFuYWdlci0+UmVzZXQoKTsKIAogICBjbVN0YXRlRGV0YWlsOjpQb3NpdGlvblR5cGUgcG9zID0gdGhpcy0+U25hcHNob3REYXRhLlRydW5jYXRlKCk7CkBAIC0zMzAsNDIgKzMyNiwyNiBAQAogCiB2b2lkIGNtU3RhdGU6OkRlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIFNob3J0RGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgU2hvcnREZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbmVkKQogewotICB0aGlzLT5Qcm9wZXJ0eURlZmluaXRpb25zW3Njb3BlXS5EZWZpbmVQcm9wZXJ0eSgKLSAgICBuYW1lLCBzY29wZSwgU2hvcnREZXNjcmlwdGlvbiwgRnVsbERlc2NyaXB0aW9uLCBjaGFpbmVkKTsKKyAgdGhpcy0+UHJvcGVydHlEZWZpbml0aW9ucy5EZWZpbmVQcm9wZXJ0eShuYW1lLCBzY29wZSwgU2hvcnREZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdWxsRGVzY3JpcHRpb24sIGNoYWluZWQpOwogfQogCiBjbVByb3BlcnR5RGVmaW5pdGlvbiBjb25zdCogY21TdGF0ZTo6R2V0UHJvcGVydHlEZWZpbml0aW9uKAogICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY21Qcm9wZXJ0eTo6U2NvcGVUeXBlIHNjb3BlKSBjb25zdAogewotICBpZiAodGhpcy0+SXNQcm9wZXJ0eURlZmluZWQobmFtZSwgc2NvcGUpKSB7Ci0gICAgY21Qcm9wZXJ0eURlZmluaXRpb25NYXAgY29uc3QmIGRlZnMgPQotICAgICAgdGhpcy0+UHJvcGVydHlEZWZpbml0aW9ucy5maW5kKHNjb3BlKS0+c2Vjb25kOwotICAgIHJldHVybiAmZGVmcy5maW5kKG5hbWUpLT5zZWNvbmQ7Ci0gIH0KLSAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgY21TdGF0ZTo6SXNQcm9wZXJ0eURlZmluZWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSkgY29uc3QKLXsKLSAgYXV0byBpdCA9IHRoaXMtPlByb3BlcnR5RGVmaW5pdGlvbnMuZmluZChzY29wZSk7Ci0gIGlmIChpdCA9PSB0aGlzLT5Qcm9wZXJ0eURlZmluaXRpb25zLmVuZCgpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiBpdC0+c2Vjb25kLklzUHJvcGVydHlEZWZpbmVkKG5hbWUpOworICByZXR1cm4gdGhpcy0+UHJvcGVydHlEZWZpbml0aW9ucy5HZXRQcm9wZXJ0eURlZmluaXRpb24obmFtZSwgc2NvcGUpOwogfQogCiBib29sIGNtU3RhdGU6OklzUHJvcGVydHlDaGFpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUpIGNvbnN0CiB7Ci0gIGF1dG8gaXQgPSB0aGlzLT5Qcm9wZXJ0eURlZmluaXRpb25zLmZpbmQoc2NvcGUpOwotICBpZiAoaXQgPT0gdGhpcy0+UHJvcGVydHlEZWZpbml0aW9ucy5lbmQoKSkgewotICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKGF1dG8gZGVmID0gdGhpcy0+R2V0UHJvcGVydHlEZWZpbml0aW9uKG5hbWUsIHNjb3BlKSkgeworICAgIHJldHVybiBkZWYtPklzQ2hhaW5lZCgpOwogICB9Ci0gIHJldHVybiBpdC0+c2Vjb25kLklzUHJvcGVydHlDaGFpbmVkKG5hbWUpOworICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgY21TdGF0ZTo6U2V0TGFuZ3VhZ2VFbmFibGVkKHN0ZDo6c3RyaW5nIGNvbnN0JiBsKQpAQCAtNTYyLDEzICs1NDIsMTMgQEAKICAgdGhpcy0+R2xvYmFsUHJvcGVydGllcy5TZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7CiB9CiAKLXZvaWQgY21TdGF0ZTo6QXBwZW5kR2xvYmFsUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nKQordm9pZCBjbVN0YXRlOjpBcHBlbmRHbG9iYWxQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBib29sIGFzU3RyaW5nKQogewogICB0aGlzLT5HbG9iYWxQcm9wZXJ0aWVzLkFwcGVuZFByb3BlcnR5KHByb3AsIHZhbHVlLCBhc1N0cmluZyk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtU3RhdGU6OkdldEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKQorY21Qcm9wIGNtU3RhdGU6OkdldEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKQogewogICBpZiAocHJvcCA9PSAiQ0FDSEVfVkFSSUFCTEVTIikgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjYWNoZUtleXMgPSB0aGlzLT5HZXRDYWNoZUVudHJ5S2V5cygpOwpAQCAtNTkyLDI4ICs1NzIsNDkgQEAKICAgfQogI2RlZmluZSBTVFJJTkdfTElTVF9FTEVNRU5UKEYpICI7IiAjRgogICBpZiAocHJvcCA9PSAiQ01BS0VfQ19LTk9XTl9GRUFUVVJFUyIpIHsKLSAgICByZXR1cm4gJkZPUl9FQUNIX0NfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQ19GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdKTsKKyAgICByZXR1cm4gJnNfb3V0OwogICB9CiAgIGlmIChwcm9wID09ICJDTUFLRV9DOTBfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DOTBfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQzkwX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV0pOworICAgIHJldHVybiAmc19vdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNNQUtFX0M5OV9LTk9XTl9GRUFUVVJFUyIpIHsKLSAgICByZXR1cm4gJkZPUl9FQUNIX0M5OV9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBzX291dCgKKyAgICAgICZGT1JfRUFDSF9DOTlfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXSk7CisgICAgcmV0dXJuICZzX291dDsKICAgfQogICBpZiAocHJvcCA9PSAiQ01BS0VfQzExX0tOT1dOX0ZFQVRVUkVTIikgewotICAgIHJldHVybiAmRk9SX0VBQ0hfQzExX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0MxMV9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdKTsKKyAgICByZXR1cm4gJnNfb3V0OwogICB9CiAgIGlmIChwcm9wID09ICJDTUFLRV9DWFhfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DWFhfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQ1hYX0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV0pOworICAgIHJldHVybiAmc19vdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNNQUtFX0NYWDk4X0tOT1dOX0ZFQVRVUkVTIikgewotICAgIHJldHVybiAmRk9SX0VBQ0hfQ1hYOThfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgc19vdXQoCisgICAgICAmRk9SX0VBQ0hfQ1hYOThfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXSk7CisgICAgcmV0dXJuICZzX291dDsKICAgfQogICBpZiAocHJvcCA9PSAiQ01BS0VfQ1hYMTFfS05PV05fRkVBVFVSRVMiKSB7Ci0gICAgcmV0dXJuICZGT1JfRUFDSF9DWFgxMV9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBzX291dCgKKyAgICAgICZGT1JfRUFDSF9DWFgxMV9GRUFUVVJFKFNUUklOR19MSVNUX0VMRU1FTlQpWzFdKTsKKyAgICByZXR1cm4gJnNfb3V0OwogICB9CiAgIGlmIChwcm9wID09ICJDTUFLRV9DWFgxNF9LTk9XTl9GRUFUVVJFUyIpIHsKLSAgICByZXR1cm4gJkZPUl9FQUNIX0NYWDE0X0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV07CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0NYWDE0X0ZFQVRVUkUoU1RSSU5HX0xJU1RfRUxFTUVOVClbMV0pOworICAgIHJldHVybiAmc19vdXQ7CisgIH0KKyAgaWYgKHByb3AgPT0gIkNNQUtFX0NVREFfS05PV05fRkVBVFVSRVMiKSB7CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHNfb3V0KAorICAgICAgJkZPUl9FQUNIX0NVREFfRkVBVFVSRShTVFJJTkdfTElTVF9FTEVNRU5UKVsxXSk7CisgICAgcmV0dXJuICZzX291dDsKICAgfQogCiAjdW5kZWYgU1RSSU5HX0xJU1RfRUxFTUVOVApAQCAtNzEyLDYgKzcxMywxNiBAQAogICByZXR1cm4gdGhpcy0+TVNZU1NoZWxsOwogfQogCit2b2lkIGNtU3RhdGU6OlNldE5pbmphTXVsdGkoYm9vbCBuaW5qYU11bHRpKQoreworICB0aGlzLT5OaW5qYU11bHRpID0gbmluamFNdWx0aTsKK30KKworYm9vbCBjbVN0YXRlOjpVc2VOaW5qYU11bHRpKCkgY29uc3QKK3sKKyAgcmV0dXJuIHRoaXMtPk5pbmphTXVsdGk7Cit9CisKIHVuc2lnbmVkIGludCBjbVN0YXRlOjpHZXRDYWNoZU1ham9yVmVyc2lvbigpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5DYWNoZU1hbmFnZXItPkdldENhY2hlTWFqb3JWZXJzaW9uKCk7CkBAIC05OTMsMTIgKzEwMDQsMTIgQEAKICAgYm9vbCBmbGFnID0gZmFsc2U7CiAgIGlmIChyZWdRdW90ZWQuZmluZChlbnRyeSkpIHsKICAgICB2YXIgPSByZWdRdW90ZWQubWF0Y2goMSk7Ci0gICAgdHlwZSA9IGNtU3RhdGU6OlN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUocmVnUXVvdGVkLm1hdGNoKDIpLmNfc3RyKCkpOworICAgIHR5cGUgPSBjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKHJlZ1F1b3RlZC5tYXRjaCgyKSk7CiAgICAgdmFsdWUgPSByZWdRdW90ZWQubWF0Y2goMyk7CiAgICAgZmxhZyA9IHRydWU7CiAgIH0gZWxzZSBpZiAocmVnLmZpbmQoZW50cnkpKSB7CiAgICAgdmFyID0gcmVnLm1hdGNoKDEpOwotICAgIHR5cGUgPSBjbVN0YXRlOjpTdHJpbmdUb0NhY2hlRW50cnlUeXBlKHJlZy5tYXRjaCgyKS5jX3N0cigpKTsKKyAgICB0eXBlID0gY21TdGF0ZTo6U3RyaW5nVG9DYWNoZUVudHJ5VHlwZShyZWcubWF0Y2goMikpOwogICAgIHZhbHVlID0gcmVnLm1hdGNoKDMpOwogICAgIGZsYWcgPSB0cnVlOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdGF0ZS5oIGIvU291cmNlL2NtU3RhdGUuaAppbmRleCBhN2NhMDE1Li44ODU0OTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdGF0ZS5oCisrKyBiL1NvdXJjZS9jbVN0YXRlLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbVBvbGljaWVzLmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgotI2luY2x1ZGUgImNtUHJvcGVydHlEZWZpbml0aW9uTWFwLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eURlZmluaXRpb24uaCIKICNpbmNsdWRlICJjbVByb3BlcnR5TWFwLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVByaXZhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKQEAgLTI1LDcgKzI1LDYgQEAKIGNsYXNzIGNtQ2FjaGVNYW5hZ2VyOwogY2xhc3MgY21Db21tYW5kOwogY2xhc3MgY21HbG9iVmVyaWZpY2F0aW9uTWFuYWdlcjsKLWNsYXNzIGNtUHJvcGVydHlEZWZpbml0aW9uOwogY2xhc3MgY21TdGF0ZVNuYXBzaG90OwogY2xhc3MgY21NZXNzZW5nZXI7CiBjbGFzcyBjbUV4ZWN1dGlvblN0YXR1czsKQEAgLTUxLDcgKzUwLDggQEAKICAgICBDUGFjaywKICAgfTsKIAotICBzdGF0aWMgY29uc3QgY2hhciogR2V0VGFyZ2V0VHlwZU5hbWUoY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHRhcmdldFR5cGUpOworICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcmIEdldFRhcmdldFR5cGVOYW1lKAorICAgIGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKTsKIAogICBjbVN0YXRlU25hcHNob3QgQ3JlYXRlQmFzZVNuYXBzaG90KCk7CiAgIGNtU3RhdGVTbmFwc2hvdCBDcmVhdGVCdWlsZHN5c3RlbURpcmVjdG9yeVNuYXBzaG90KApAQCAtNzAsMTAgKzcwLDEyIEBACiAgICAgY21TdGF0ZVNuYXBzaG90IGNvbnN0JiBvcmlnaW5TbmFwc2hvdCk7CiAgIGNtU3RhdGVTbmFwc2hvdCBQb3AoY21TdGF0ZVNuYXBzaG90IGNvbnN0JiBvcmlnaW5TbmFwc2hvdCk7CiAKLSAgc3RhdGljIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgU3RyaW5nVG9DYWNoZUVudHJ5VHlwZShjb25zdCBjaGFyKik7Ci0gIHN0YXRpYyBib29sIFN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUoY29uc3QgY2hhciosCisgIHN0YXRpYyBjbVN0YXRlRW51bXM6OkNhY2hlRW50cnlUeXBlIFN0cmluZ1RvQ2FjaGVFbnRyeVR5cGUoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmKTsKKyAgc3RhdGljIGJvb2wgU3RyaW5nVG9DYWNoZUVudHJ5VHlwZShjb25zdCBzdGQ6OnN0cmluZyYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSYgdHlwZSk7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBDYWNoZUVudHJ5VHlwZVRvU3RyaW5nKGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUpOworICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcmIENhY2hlRW50cnlUeXBlVG9TdHJpbmcoCisgICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSk7CiAgIHN0YXRpYyBib29sIElzQ2FjaGVFbnRyeVR5cGUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSk7CiAKICAgYm9vbCBMb2FkQ2FjaGUoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgsIGJvb2wgaW50ZXJuYWwsCkBAIC04NSwxMSArODcsMTEgQEAKICAgYm9vbCBEZWxldGVDYWNoZShjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCk7CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldENhY2hlRW50cnlLZXlzKCkgY29uc3Q7Ci0gIGNvbnN0IGNoYXIqIEdldENhY2hlRW50cnlWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdDsKLSAgY29uc3Qgc3RkOjpzdHJpbmcqIEdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdDsKKyAgY21Qcm9wIEdldENhY2hlRW50cnlWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgR2V0U2FmZUNhY2hlRW50cnlWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdDsKKyAgY21Qcm9wIEdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdDsKICAgY21TdGF0ZUVudW1zOjpDYWNoZUVudHJ5VHlwZSBHZXRDYWNoZUVudHJ5VHlwZShzdGQ6OnN0cmluZyBjb25zdCYga2V5KSBjb25zdDsKICAgdm9pZCBTZXRDYWNoZUVudHJ5VmFsdWUoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlKTsKLSAgdm9pZCBTZXRDYWNoZVZhbHVlKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSk7CiAKICAgdm9pZCBSZW1vdmVDYWNoZUVudHJ5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXkpOwogCkBAIC05OSw4ICsxMDEsOCBAQAogICB2b2lkIFNldENhY2hlRW50cnlCb29sUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUsIGJvb2wgdmFsdWUpOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0Q2FjaGVFbnRyeVByb3BlcnR5TGlzdChzdGQ6OnN0cmluZyBjb25zdCYga2V5KTsKLSAgY29uc3QgY2hhciogR2V0Q2FjaGVFbnRyeVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lKTsKKyAgY21Qcm9wIEdldENhY2hlRW50cnlQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wZXJ0eU5hbWUpOwogICBib29sIEdldENhY2hlRW50cnlQcm9wZXJ0eUFzQm9vbChzdGQ6OnN0cmluZyBjb25zdCYga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgcHJvcGVydHlOYW1lKTsKICAgdm9pZCBBcHBlbmRDYWNoZUVudHJ5UHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIGtleSwKQEAgLTExOCwxNiArMTIwLDEzIEBACiAgIGNtU3RhdGVTbmFwc2hvdCBSZXNldCgpOwogICAvLyBEZWZpbmUgYSBwcm9wZXJ0eQogICB2b2lkIERlZmluZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogU2hvcnREZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBGdWxsRGVzY3JpcHRpb24sIGJvb2wgY2hhaW4gPSBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIFNob3J0RGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIEZ1bGxEZXNjcmlwdGlvbiwgYm9vbCBjaGFpbiA9IGZhbHNlKTsKIAogICAvLyBnZXQgcHJvcGVydHkgZGVmaW5pdGlvbgogICBjbVByb3BlcnR5RGVmaW5pdGlvbiBjb25zdCogR2V0UHJvcGVydHlEZWZpbml0aW9uKAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUpIGNvbnN0OwogCi0gIC8vIElzIGEgcHJvcGVydHkgZGVmaW5lZD8KLSAgYm9vbCBJc1Byb3BlcnR5RGVmaW5lZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjbVByb3BlcnR5OjpTY29wZVR5cGUgc2NvcGUpIGNvbnN0OwogICBib29sIElzUHJvcGVydHlDaGFpbmVkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNtUHJvcGVydHk6OlNjb3BlVHlwZSBzY29wZSkgY29uc3Q7CiAKQEAgLTE2Niw5ICsxNjUsOSBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0Q29tbWFuZE5hbWVzKCkgY29uc3Q7CiAKICAgdm9pZCBTZXRHbG9iYWxQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUpOwotICB2b2lkIEFwcGVuZEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSwKKyAgdm9pZCBBcHBlbmRHbG9iYWxQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNTdHJpbmcgPSBmYWxzZSk7Ci0gIGNvbnN0IGNoYXIqIEdldEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKTsKKyAgY21Qcm9wIEdldEdsb2JhbFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKTsKICAgYm9vbCBHZXRHbG9iYWxQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCk7CiAKICAgc3RkOjpzdHJpbmcgY29uc3QmIEdldFNvdXJjZURpcmVjdG9yeSgpIGNvbnN0OwpAQCAtMTkwLDYgKzE4OSw4IEBACiAgIGJvb2wgVXNlTk1ha2UoKSBjb25zdDsKICAgdm9pZCBTZXRNU1lTU2hlbGwoYm9vbCBtU1lTU2hlbGwpOwogICBib29sIFVzZU1TWVNTaGVsbCgpIGNvbnN0OworICB2b2lkIFNldE5pbmphTXVsdGkoYm9vbCBuaW5qYU11bHRpKTsKKyAgYm9vbCBVc2VOaW5qYU11bHRpKCkgY29uc3Q7CiAKICAgdW5zaWduZWQgaW50IEdldENhY2hlTWFqb3JWZXJzaW9uKCkgY29uc3Q7CiAgIHVuc2lnbmVkIGludCBHZXRDYWNoZU1pbm9yVmVyc2lvbigpIGNvbnN0OwpAQCAtMjE3LDcgKzIxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0KTsKIAotICBzdGQ6Om1hcDxjbVByb3BlcnR5OjpTY29wZVR5cGUsIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwPiBQcm9wZXJ0eURlZmluaXRpb25zOworICBjbVByb3BlcnR5RGVmaW5pdGlvbk1hcCBQcm9wZXJ0eURlZmluaXRpb25zOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gRW5hYmxlZExhbmd1YWdlczsKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIENvbW1hbmQ+IEJ1aWx0aW5Db21tYW5kczsKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIENvbW1hbmQ+IFNjcmlwdGVkQ29tbWFuZHM7CkBAIC0yNDUsNiArMjQ2LDcgQEAKICAgYm9vbCBNaW5HV01ha2UgPSBmYWxzZTsKICAgYm9vbCBOTWFrZSA9IGZhbHNlOwogICBib29sIE1TWVNTaGVsbCA9IGZhbHNlOworICBib29sIE5pbmphTXVsdGkgPSBmYWxzZTsKICAgTW9kZSBDdXJyZW50TW9kZSA9IFVua25vd247CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdGF0ZURpcmVjdG9yeS5jeHggYi9Tb3VyY2UvY21TdGF0ZURpcmVjdG9yeS5jeHgKaW5kZXggMTI2MmY1My4uNzk2YmIxZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RhdGVEaXJlY3RvcnkuY3h4CisrKyBiL1NvdXJjZS9jbVN0YXRlRGlyZWN0b3J5LmN4eApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9pdGVyYXRvcj4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKICNpbmNsdWRlICJjbUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVByb3BlcnR5LmgiCkBAIC01MjAsNyArNTIxLDcgQEAKIH0KIAogdm9pZCBjbVN0YXRlRGlyZWN0b3J5OjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWUsIGJvb2wgYXNTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgYm9vbCBhc1N0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgbGZidCkKIHsKICAgaWYgKHByb3AgPT0gIklOQ0xVREVfRElSRUNUT1JJRVMiKSB7CkBAIC01NDcsMzIgKzU0OCwzMSBAQAogICB0aGlzLT5EaXJlY3RvcnlTdGF0ZS0+UHJvcGVydGllcy5BcHBlbmRQcm9wZXJ0eShwcm9wLCB2YWx1ZSwgYXNTdHJpbmcpOwogfQogCi1jb25zdCBjaGFyKiBjbVN0YXRlRGlyZWN0b3J5OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKK2NtUHJvcCBjbVN0YXRlRGlyZWN0b3J5OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKICAgY29uc3QgYm9vbCBjaGFpbiA9CiAgICAgdGhpcy0+U25hcHNob3RfLlN0YXRlLT5Jc1Byb3BlcnR5Q2hhaW5lZChwcm9wLCBjbVByb3BlcnR5OjpESVJFQ1RPUlkpOwogICByZXR1cm4gdGhpcy0+R2V0UHJvcGVydHkocHJvcCwgY2hhaW4pOwogfQogCi1jb25zdCBjaGFyKiBjbVN0YXRlRGlyZWN0b3J5OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhaW4pIGNvbnN0CitjbVByb3AgY21TdGF0ZURpcmVjdG9yeTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGJvb2wgY2hhaW4pIGNvbnN0CiB7CiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgIG91dHB1dC5jbGVhcigpOwogICBpZiAocHJvcCA9PSAiUEFSRU5UX0RJUkVDVE9SWSIpIHsKICAgICBjbVN0YXRlU25hcHNob3QgcGFyZW50ID0gdGhpcy0+U25hcHNob3RfLkdldEJ1aWxkc3lzdGVtRGlyZWN0b3J5UGFyZW50KCk7CiAgICAgaWYgKHBhcmVudC5Jc1ZhbGlkKCkpIHsKLSAgICAgIHJldHVybiBwYXJlbnQuR2V0RGlyZWN0b3J5KCkuR2V0Q3VycmVudFNvdXJjZSgpLmNfc3RyKCk7CisgICAgICByZXR1cm4gJnBhcmVudC5HZXREaXJlY3RvcnkoKS5HZXRDdXJyZW50U291cmNlKCk7CiAgICAgfQotICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSBrQklOQVJZX0RJUikgewogICAgIG91dHB1dCA9IHRoaXMtPkdldEN1cnJlbnRCaW5hcnkoKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0ga1NPVVJDRV9ESVIpIHsKICAgICBvdXRwdXQgPSB0aGlzLT5HZXRDdXJyZW50U291cmNlKCk7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09IGtTVUJESVJFQ1RPUklFUykgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjaGlsZF9kaXJzOwpAQCAtNTgzLDExICs1ODMsMTEgQEAKICAgICAgIGNoaWxkX2RpcnMucHVzaF9iYWNrKGNpLkdldERpcmVjdG9yeSgpLkdldEN1cnJlbnRTb3VyY2UoKSk7CiAgICAgfQogICAgIG91dHB1dCA9IGNtSm9pbihjaGlsZF9kaXJzLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSBrQlVJTERTWVNURU1fVEFSR0VUUykgewogICAgIG91dHB1dCA9IGNtSm9pbih0aGlzLT5EaXJlY3RvcnlTdGF0ZS0+Tm9ybWFsVGFyZ2V0TmFtZXMsICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAKICAgaWYgKHByb3AgPT0gIkxJU1RGSUxFX1NUQUNLIikgewpAQCAtNTk5LDQxICs1OTksNDEgQEAKICAgICB9CiAgICAgc3RkOjpyZXZlcnNlKGxpc3RGaWxlcy5iZWdpbigpLCBsaXN0RmlsZXMuZW5kKCkpOwogICAgIG91dHB1dCA9IGNtSm9pbihsaXN0RmlsZXMsICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09ICJDQUNIRV9WQVJJQUJMRVMiKSB7CiAgICAgb3V0cHV0ID0gY21Kb2luKHRoaXMtPlNuYXBzaG90Xy5TdGF0ZS0+R2V0Q2FjaGVFbnRyeUtleXMoKSwgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIlZBUklBQkxFUyIpIHsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVzID0gdGhpcy0+U25hcHNob3RfLkNsb3N1cmVLZXlzKCk7Ci0gICAgY21BcHBlbmQocmVzLCB0aGlzLT5TbmFwc2hvdF8uU3RhdGUtPkdldENhY2hlRW50cnlLZXlzKCkpOworICAgIGNtOjphcHBlbmQocmVzLCB0aGlzLT5TbmFwc2hvdF8uU3RhdGUtPkdldENhY2hlRW50cnlLZXlzKCkpOwogICAgIHN0ZDo6c29ydChyZXMuYmVnaW4oKSwgcmVzLmVuZCgpKTsKICAgICBvdXRwdXQgPSBjbUpvaW4ocmVzLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSAiSU5DTFVERV9ESVJFQ1RPUklFUyIpIHsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+R2V0SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcygpLCAiOyIpOwotICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICByZXR1cm4gJm91dHB1dDsKICAgfQogICBpZiAocHJvcCA9PSAiQ09NUElMRV9PUFRJT05TIikgewogICAgIG91dHB1dCA9IGNtSm9pbih0aGlzLT5HZXRDb21waWxlT3B0aW9uc0VudHJpZXMoKSwgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkNPTVBJTEVfREVGSU5JVElPTlMiKSB7CiAgICAgb3V0cHV0ID0gY21Kb2luKHRoaXMtPkdldENvbXBpbGVEZWZpbml0aW9uc0VudHJpZXMoKSwgIjsiKTsKLSAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgcmV0dXJuICZvdXRwdXQ7CiAgIH0KICAgaWYgKHByb3AgPT0gIkxJTktfT1BUSU9OUyIpIHsKICAgICBvdXRwdXQgPSBjbUpvaW4odGhpcy0+R2V0TGlua09wdGlvbnNFbnRyaWVzKCksICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAgIGlmIChwcm9wID09ICJMSU5LX0RJUkVDVE9SSUVTIikgewogICAgIG91dHB1dCA9IGNtSm9pbih0aGlzLT5HZXRMaW5rRGlyZWN0b3JpZXNFbnRyaWVzKCksICI7Iik7Ci0gICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgIHJldHVybiAmb3V0cHV0OwogICB9CiAKLSAgY29uc3QgY2hhciogcmV0VmFsID0gdGhpcy0+RGlyZWN0b3J5U3RhdGUtPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZShwcm9wKTsKKyAgY21Qcm9wIHJldFZhbCA9IHRoaXMtPkRpcmVjdG9yeVN0YXRlLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgIGlmICghcmV0VmFsICYmIGNoYWluKSB7CiAgICAgY21TdGF0ZVNuYXBzaG90IHBhcmVudFNuYXBzaG90ID0KICAgICAgIHRoaXMtPlNuYXBzaG90Xy5HZXRCdWlsZHN5c3RlbURpcmVjdG9yeVBhcmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RhdGVEaXJlY3RvcnkuaCBiL1NvdXJjZS9jbVN0YXRlRGlyZWN0b3J5LmgKaW5kZXggZmUxNTU2My4uNzY1YWY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RhdGVEaXJlY3RvcnkuaAorKysgYi9Tb3VyY2UvY21TdGF0ZURpcmVjdG9yeS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21MaW5rZWRUcmVlLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGVQcml2YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVNuYXBzaG90LmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCkBAIC04NCwxMCArODUsMTAgQEAKIAogICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBsZmJ0KTsKLSAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCisgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nLCBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBsZmJ0KTsKLSAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OwotICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgYm9vbCBjaGFpbikgY29uc3Q7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgYm9vbCBjaGFpbikgY29uc3Q7CiAgIGJvb2wgR2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gR2V0UHJvcGVydHlLZXlzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0YXRlU25hcHNob3QuY3h4IGIvU291cmNlL2NtU3RhdGVTbmFwc2hvdC5jeHgKaW5kZXggNjQ1OTA3Yy4uYmY4ZTMzMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RhdGVTbmFwc2hvdC5jeHgKKysrIGIvU291cmNlL2NtU3RhdGVTbmFwc2hvdC5jeHgKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgImNtRGVmaW5pdGlvbnMuaCIKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eU1hcC5oIgogI2luY2x1ZGUgImNtU3RhdGUuaCIKICNpbmNsdWRlICJjbVN0YXRlRGlyZWN0b3J5LmgiCkBAIC0xNDcsNyArMTQ4LDcgQEAKIAogYm9vbCBjbVN0YXRlU25hcHNob3Q6OkNhblBvcFBvbGljeVNjb3BlKCkKIHsKLSAgcmV0dXJuIHRoaXMtPlBvc2l0aW9uLT5Qb2xpY2llcyA9PSB0aGlzLT5Qb3NpdGlvbi0+UG9saWN5U2NvcGU7CisgIHJldHVybiB0aGlzLT5Qb3NpdGlvbi0+UG9saWNpZXMgIT0gdGhpcy0+UG9zaXRpb24tPlBvbGljeVNjb3BlOwogfQogCiB2b2lkIGNtU3RhdGVTbmFwc2hvdDo6U2V0UG9saWN5KGNtUG9saWNpZXM6OlBvbGljeUlEIGlkLApAQCAtMjMxLDExICsyMzIsNiBAQAogICB0aGlzLT5Qb3NpdGlvbi0+VmFycy0+VW5zZXQobmFtZSk7CiB9CiAKLXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbVN0YXRlU25hcHNob3Q6OlVudXNlZEtleXMoKSBjb25zdAotewotICByZXR1cm4gdGhpcy0+UG9zaXRpb24tPlZhcnMtPlVudXNlZEtleXMoKTsKLX0KLQogc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtU3RhdGVTbmFwc2hvdDo6Q2xvc3VyZUtleXMoKSBjb25zdAogewogICByZXR1cm4gY21EZWZpbml0aW9uczo6Q2xvc3VyZUtleXModGhpcy0+UG9zaXRpb24tPlZhcnMsCkBAIC0zMTUsMTUgKzMxMSwxOSBAQAogICB0aGlzLT5TZXREZWZpbml0aW9uKCJVTklYIiwgIjEiKTsKICAgdGhpcy0+U2V0RGVmaW5pdGlvbigiQ01BS0VfSE9TVF9VTklYIiwgIjEiKTsKIAorIyAgaWYgZGVmaW5lZChfX0FORFJPSURfXykKKyAgdGhpcy0+U2V0RGVmaW5pdGlvbigiQ01BS0VfSE9TVF9TWVNURU1fTkFNRSIsICJBbmRyb2lkIik7CisjICBlbHNlCiAgIHN0cnVjdCB1dHNuYW1lIHV0c19uYW1lOwogICBpZiAodW5hbWUoJnV0c19uYW1lKSA+PSAwKSB7CiAgICAgdGhpcy0+U2V0RGVmaW5pdGlvbigiQ01BS0VfSE9TVF9TWVNURU1fTkFNRSIsIHV0c19uYW1lLnN5c25hbWUpOwogICB9CisjICBlbmRpZgogI2VuZGlmCiAjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQogICBzdGQ6OnN0cmluZyBsZWdhY3k7CiAgIGlmIChjbVN5c3RlbVRvb2xzOjpHZXRFbnYoIkNNQUtFX0xFR0FDWV9DWUdXSU5fV0lOMzIiLCBsZWdhY3kpICYmCi0gICAgICBjbUlzT24obGVnYWN5LmNfc3RyKCkpKSB7CisgICAgICBjbUlzT24obGVnYWN5KSkgewogICAgIHRoaXMtPlNldERlZmluaXRpb24oIldJTjMyIiwgIjEiKTsKICAgICB0aGlzLT5TZXREZWZpbml0aW9uKCJDTUFLRV9IT1NUX1dJTjMyIiwgIjEiKTsKICAgfQpAQCAtNDA3LDExICs0MDcsMTIgQEAKICAgICB0aGlzLT5Qb3NpdGlvbi0+QnVpbGRTeXN0ZW1EaXJlY3RvcnktPkxpbmtEaXJlY3Rvcmllc0JhY2t0cmFjZXMsCiAgICAgdGhpcy0+UG9zaXRpb24tPkxpbmtEaXJlY3Rvcmllc1Bvc2l0aW9uKTsKIAotICBjb25zdCBjaGFyKiBpbmNsdWRlX3JlZ2V4ID0KKyAgY21Qcm9wIGluY2x1ZGVfcmVnZXggPQogICAgIHBhcmVudC0+QnVpbGRTeXN0ZW1EaXJlY3RvcnktPlByb3BlcnRpZXMuR2V0UHJvcGVydHlWYWx1ZSgKICAgICAgICJJTkNMVURFX1JFR1VMQVJfRVhQUkVTU0lPTiIpOwogICB0aGlzLT5Qb3NpdGlvbi0+QnVpbGRTeXN0ZW1EaXJlY3RvcnktPlByb3BlcnRpZXMuU2V0UHJvcGVydHkoCi0gICAgIklOQ0xVREVfUkVHVUxBUl9FWFBSRVNTSU9OIiwgaW5jbHVkZV9yZWdleCk7CisgICAgIklOQ0xVREVfUkVHVUxBUl9FWFBSRVNTSU9OIiwKKyAgICBpbmNsdWRlX3JlZ2V4ID8gaW5jbHVkZV9yZWdleC0+Y19zdHIoKSA6IG51bGxwdHIpOwogfQogCiBjbVN0YXRlKiBjbVN0YXRlU25hcHNob3Q6OkdldFN0YXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVN0YXRlU25hcHNob3QuaCBiL1NvdXJjZS9jbVN0YXRlU25hcHNob3QuaAppbmRleCAwMjFmZDUzLi5jMTlmMTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdGF0ZVNuYXBzaG90LmgKKysrIGIvU291cmNlL2NtU3RhdGVTbmFwc2hvdC5oCkBAIC0yOCw3ICsyOCw2IEBACiAgIGJvb2wgSXNJbml0aWFsaXplZChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSkgY29uc3Q7CiAgIHZvaWQgU2V0RGVmaW5pdGlvbihzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY206OnN0cmluZ192aWV3IHZhbHVlKTsKICAgdm9pZCBSZW1vdmVEZWZpbml0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lKTsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFVudXNlZEtleXMoKSBjb25zdDsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IENsb3N1cmVLZXlzKCkgY29uc3Q7CiAgIGJvb2wgUmFpc2VTY29wZShzdGQ6OnN0cmluZyBjb25zdCYgdmFyLCBjb25zdCBjaGFyKiB2YXJEZWYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdHJpbmcuY3h4IGIvU291cmNlL2NtU3RyaW5nLmN4eAppbmRleCAyYTBjMTI1Li44OThiODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdHJpbmcuY3h4CisrKyBiL1NvdXJjZS9jbVN0cmluZy5jeHgKQEAgLTE3LDcgKzE3LDcgQEAKIHZvaWQgU3RyaW5nOjppbnRlcm5hbGx5X211dGF0ZV90b19zdGFibGVfc3RyaW5nKCkKIHsKICAgLy8gV2UgYXNzdW1lIHRoYXQgb25seSBvbmUgdGhyZWFkIG11dGF0ZXMgdGhpcyBpbnN0YW5jZSBhdAotICAvLyBhIHRpbWUgZXZlbiBpZiB3ZSBwb2ludCB0byBhIHNoYXJlZCBzdHJpbmcgYnVmZmVyIHJlZmVybmNlZAorICAvLyBhIHRpbWUgZXZlbiBpZiB3ZSBwb2ludCB0byBhIHNoYXJlZCBzdHJpbmcgYnVmZmVyIHJlZmVyZW5jZWQKICAgLy8gYnkgb3RoZXIgdGhyZWFkcy4KICAgKnRoaXMgPSBTdHJpbmcoZGF0YSgpLCBzaXplKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RyaW5nLmh4eCBiL1NvdXJjZS9jbVN0cmluZy5oeHgKaW5kZXggMDczZjRjOS4uNDBmZTIwZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RyaW5nLmh4eAorKysgYi9Tb3VyY2UvY21TdHJpbmcuaHh4CkBAIC0xNiw4ICsxNiw3IEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgPGNtL3N0cmluZ192aWV3PgotCi0jaW5jbHVkZSAiY21fc3RhdGljX3N0cmluZ192aWV3Lmh4eCIKKyNpbmNsdWRlIDxjbWV4dC9zdHJpbmdfdmlldz4KIAogbmFtZXNwYWNlIGNtIHsKIApAQCAtODgsMTggKzg3LDYgQEAKIH07CiAKIHRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50b1N0cmluZzxzdHJpbmdfdmlldz4gOiBzdGQ6OnRydWVfdHlwZQotewotICBzdGF0aWMgc3RkOjpzdHJpbmcgaW50b19zdHJpbmcoc3RyaW5nX3ZpZXcgcykgeyByZXR1cm4gc3RkOjpzdHJpbmcocyk7IH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50b1N0cmluZzxzdGF0aWNfc3RyaW5nX3ZpZXc+IDogc3RkOjp0cnVlX3R5cGUKLXsKLSAgc3RhdGljIHN0cmluZ192aWV3IGludG9fc3RyaW5nKHN0YXRpY19zdHJpbmdfdmlldyBzKSB7IHJldHVybiBzOyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgogc3RydWN0IEludG9TdHJpbmc8Y2hhcj4gOiBzdGQ6OnRydWVfdHlwZQogewogICBzdGF0aWMgc3RkOjpzdHJpbmcgaW50b19zdHJpbmcoY2hhciBjb25zdCYgYykgeyByZXR1cm4gc3RkOjpzdHJpbmcoMSwgYyk7IH0KQEAgLTIzOSw2ICsyMjYsMjUgQEAKICAgewogICB9CiAKKyAgLyoqCisgICAqIENvbnN0cnVjdCB2aWEgc3RhdGljX3N0cmluZ192aWV3IGNvbnN0cnVjdG9yLgorICAgKiBleHBsaWNpdCBpcyByZXF1aXJlZCB0byBhdm9pZCBhbWJpZ3VvdXMgb3ZlcmxvYWRlZCBvcGVyYXRvcnMgKGkuZSA9PSwKKyAgICogZXRjLi4uKSB3aXRoIHRoZSBvbmVzIHByb3ZpZGVkIGJ5IHN0cmluZ192aWV3LgorICAgKi8KKyAgZXhwbGljaXQgU3RyaW5nKHN0YXRpY19zdHJpbmdfdmlldyBzKQorICAgIDogU3RyaW5nKHMsIFByaXZhdGUoKSkKKyAgeworICB9CisgIC8qKgorICAgKiBDb25zdHJ1Y3QgdmlhIHN0cmluZ192aWV3IGNvbnN0cnVjdG9yLgorICAgKiBleHBsaWNpdCBpcyByZXF1aXJlZCB0byBhdm9pZCBhbWJpZ3VvdXMgb3ZlcmxvYWRlZCBvcGVyYXRvcnMgKGkuZSA9PSwKKyAgICogZXRjLi4uKSB3aXRoIHRoZSBvbmVzIHByb3ZpZGVkIGJ5IHN0cmluZ192aWV3LgorICAgKi8KKyAgZXhwbGljaXQgU3RyaW5nKHN0cmluZ192aWV3IHMpCisgICAgOiBTdHJpbmcoc3RkOjpzdHJpbmcocyksIFByaXZhdGUoKSkKKyAgeworICB9CisKICAgLyoqIENvbnN0cnVjdCB2aWEgc3RkOjpzdHJpbmcgaW5pdGlhbGl6ZXIgbGlzdCBjb25zdHJ1Y3Rvci4gICovCiAgIFN0cmluZyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y2hhcj4gaWwpCiAgICAgOiBTdHJpbmcoc3RkOjpzdHJpbmcoaWwpKQpAQCAtMzA2LDYgKzMxMiwxNyBAQAogICAgICAgVGhpcyBzaGFyZXMgb3duZXJzaGlwIG9mIHRoZSBvdGhlciBzdHJpbmcncyBidWZmZXIuICAqLwogICBTdHJpbmcmIG9wZXJhdG9yPShTdHJpbmcgY29uc3QmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CiAKKyAgU3RyaW5nJiBvcGVyYXRvcj0oc3RhdGljX3N0cmluZ192aWV3IHMpCisgIHsKKyAgICAqdGhpcyA9IFN0cmluZyhzKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgU3RyaW5nJiBvcGVyYXRvcj0oc3RyaW5nX3ZpZXcgcykKKyAgeworICAgICp0aGlzID0gU3RyaW5nKHMpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCiAgIC8qKiBBc3NpZ24gZnJvbSBhbnkgdHlwZSBpbXBsZW1lbnRpbmcgdGhlIEludG9TdHJpbmcgdHJhaXQuICAqLwogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgdHlwZW5hbWUgLy8gTk9MSU5UKCopCkBAIC0zMjgsNiArMzQ1LDcgQEAKIAogICAvKiogUmV0dXJuIGEgdmlldyBvZiB0aGUgc3RyaW5nLiAgKi8KICAgc3RyaW5nX3ZpZXcgdmlldygpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIHZpZXdfOyB9CisgIG9wZXJhdG9yIHN0cmluZ192aWV3KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gdGhpcy0+dmlldygpOyB9CiAKICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBpbnN0YW5jZSBpcyBhbiBlbXB0eSBzdHJpbmduIG9yIG51bGwgc3RyaW5nLiAgKi8KICAgYm9vbCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIHZpZXdfLmVtcHR5KCk7IH0KQEAgLTM2NSw3ICszODMsNyBAQAogICAgICAgaW5zdGFuY2UgaXMgbXV0YXRlZCBvciBkZXN0cm95ZWQuICAqLwogICBzdGQ6OnN0cmluZyBjb25zdCogc3RyX2lmX3N0YWJsZSgpIGNvbnN0OwogCi0gIC8qKiBHZXQgYSByZWZlcm5jZSB0byBhIG5vcm1hbCBzdGQ6OnN0cmluZy4gIFRoZSByZWZlcmVuY2UKKyAgLyoqIEdldCBhIHJlZmVyZW5jZSB0byBhIG5vcm1hbCBzdGQ6OnN0cmluZy4gIFRoZSByZWZlcmVuY2UKICAgICAgIGlzIHZhbGlkIHVudGlsIHRoaXMgaW5zdGFuY2UgaXMgbXV0YXRlZCBvciBkZXN0cm95ZWQuICAqLwogICBzdGQ6OnN0cmluZyBjb25zdCYgc3RyKCk7CiAKQEAgLTYzOCw1OCArNjU2LDE1NSBAQAogICBzdHJpbmdfdmlldyB2aWV3XzsKIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMLCB0eXBlbmFtZSBSPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QXNTdHJpbmdWaWV3PEw+Ojp2YWx1ZSAmJiBBc1N0cmluZ1ZpZXc8Uj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD46OnR5cGUKLW9wZXJhdG9yPT0oTCYmIGwsIFImJiByKQorLyoqCisgKiBUcmFpdCBmb3IgY29tcGFyYWJsZSB0eXBlcy4KKyAqLwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSXNDb21wYXJhYmxlIDogc3RkOjpmYWxzZV90eXBlCiB7Ci0gIHJldHVybiAoQXNTdHJpbmdWaWV3PEw+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxMPihsKSkgPT0KLSAgICAgICAgICBBc1N0cmluZ1ZpZXc8Uj46OnZpZXcoc3RkOjpmb3J3YXJkPFI+KHIpKSk7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBJc0NvbXBhcmFibGU8VCY+IDogSXNDb21wYXJhYmxlPFQ+Cit7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBJc0NvbXBhcmFibGU8VCBjb25zdD4gOiBJc0NvbXBhcmFibGU8VD4KK3sKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IElzQ29tcGFyYWJsZTxUIGNvbnN0Kj4gOiBJc0NvbXBhcmFibGU8VCo+Cit7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBOPgorc3RydWN0IElzQ29tcGFyYWJsZTxUIGNvbnN0W05dPiA6IElzQ29tcGFyYWJsZTxUW05dPgoreworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJc0NvbXBhcmFibGU8Y2hhcio+IDogc3RkOjp0cnVlX3R5cGUKK3sKK307CisKK3RlbXBsYXRlIDxzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIE4+CitzdHJ1Y3QgSXNDb21wYXJhYmxlPGNoYXJbTl0+IDogc3RkOjp0cnVlX3R5cGUKK3sKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSXNDb21wYXJhYmxlPHN0ZDo6c3RyaW5nPiA6IHN0ZDo6dHJ1ZV90eXBlCit7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IElzQ29tcGFyYWJsZTxjaGFyPiA6IHN0ZDo6dHJ1ZV90eXBlCit7Cit9OworCisvKiogY29tcGFyaXNvbiBvcGVyYXRvcnMgKi8KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBsLCBjb25zdCBTdHJpbmcmIHIpCit7CisgIHJldHVybiBsLnZpZXcoKSA9PSByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBMPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPEw+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3I9PSgKKyAgTCYmIGwsIGNvbnN0IFN0cmluZyYgcikKK3sKKyAgcmV0dXJuIEFzU3RyaW5nVmlldzxMPjo6dmlldyhzdGQ6OmZvcndhcmQ8TD4obCkpID09IHIudmlldygpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFI+Cit0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0NvbXBhcmFibGU8Uj46OnZhbHVlLCBib29sPjo6dHlwZSBvcGVyYXRvcj09KAorICBjb25zdCBTdHJpbmcmIGwsIFImJiByKQoreworICByZXR1cm4gbC52aWV3KCkgPT0gQXNTdHJpbmdWaWV3PFI+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxSPihyKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMLCB0eXBlbmFtZSBSPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QXNTdHJpbmdWaWV3PEw+Ojp2YWx1ZSAmJiBBc1N0cmluZ1ZpZXc8Uj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD46OnR5cGUKLW9wZXJhdG9yIT0oTCYmIGwsIFImJiByKQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcmIGwsIGNvbnN0IFN0cmluZyYgcikKIHsKLSAgcmV0dXJuIChBc1N0cmluZ1ZpZXc8TD46OnZpZXcoc3RkOjpmb3J3YXJkPEw+KGwpKSAhPQotICAgICAgICAgIEFzU3RyaW5nVmlldzxSPjo6dmlldyhzdGQ6OmZvcndhcmQ8Uj4ocikpKTsKKyAgcmV0dXJuIGwudmlldygpICE9IHIudmlldygpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIEw+Cit0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0NvbXBhcmFibGU8TD46OnZhbHVlLCBib29sPjo6dHlwZSBvcGVyYXRvciE9KAorICBMJiYgbCwgY29uc3QgU3RyaW5nJiByKQoreworICByZXR1cm4gQXNTdHJpbmdWaWV3PEw+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxMPihsKSkgIT0gci52aWV3KCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgUj4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzQ29tcGFyYWJsZTxSPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIG9wZXJhdG9yIT0oCisgIGNvbnN0IFN0cmluZyYgbCwgUiYmIHIpCit7CisgIHJldHVybiBsLnZpZXcoKSAhPSBBc1N0cmluZ1ZpZXc8Uj46OnZpZXcoc3RkOjpmb3J3YXJkPFI+KHIpKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEwsIHR5cGVuYW1lIFI+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxBc1N0cmluZ1ZpZXc8TD46OnZhbHVlICYmIEFzU3RyaW5nVmlldzxSPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sPjo6dHlwZQotb3BlcmF0b3I8KEwmJiBsLCBSJiYgcikKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBTdHJpbmcmIGwsIGNvbnN0IFN0cmluZyYgcikKIHsKLSAgcmV0dXJuIChBc1N0cmluZ1ZpZXc8TD46OnZpZXcoc3RkOjpmb3J3YXJkPEw+KGwpKSA8Ci0gICAgICAgICAgQXNTdHJpbmdWaWV3PFI+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxSPihyKSkpOworICByZXR1cm4gbC52aWV3KCkgPCByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBMPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPEw+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3I8KAorICBMJiYgbCwgY29uc3QgU3RyaW5nJiByKQoreworICByZXR1cm4gQXNTdHJpbmdWaWV3PEw+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxMPihsKSkgPCByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBSPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPFI+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3I8KAorICBjb25zdCBTdHJpbmcmIGwsIFImJiByKQoreworICByZXR1cm4gbC52aWV3KCkgPCBBc1N0cmluZ1ZpZXc8Uj46OnZpZXcoc3RkOjpmb3J3YXJkPFI+KHIpKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEwsIHR5cGVuYW1lIFI+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxBc1N0cmluZ1ZpZXc8TD46OnZhbHVlICYmIEFzU3RyaW5nVmlldzxSPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sPjo6dHlwZQotb3BlcmF0b3I8PShMJiYgbCwgUiYmIHIpCitpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFN0cmluZyYgbCwgY29uc3QgU3RyaW5nJiByKQogewotICByZXR1cm4gKEFzU3RyaW5nVmlldzxMPjo6dmlldyhzdGQ6OmZvcndhcmQ8TD4obCkpIDw9Ci0gICAgICAgICAgQXNTdHJpbmdWaWV3PFI+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxSPihyKSkpOworICByZXR1cm4gbC52aWV3KCkgPD0gci52aWV3KCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTD4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzQ29tcGFyYWJsZTxMPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIG9wZXJhdG9yPD0oCisgIEwmJiBsLCBjb25zdCBTdHJpbmcmIHIpCit7CisgIHJldHVybiBBc1N0cmluZ1ZpZXc8TD46OnZpZXcoc3RkOjpmb3J3YXJkPEw+KGwpKSA8PSByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBSPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPFI+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3I8PSgKKyAgY29uc3QgU3RyaW5nJiBsLCBSJiYgcikKK3sKKyAgcmV0dXJuIGwudmlldygpIDw9IEFzU3RyaW5nVmlldzxSPjo6dmlldyhzdGQ6OmZvcndhcmQ8Uj4ocikpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTCwgdHlwZW5hbWUgUj4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEFzU3RyaW5nVmlldzxMPjo6dmFsdWUgJiYgQXNTdHJpbmdWaWV3PFI+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+Ojp0eXBlCi1vcGVyYXRvcj4oTCYmIGwsIFImJiByKQoraW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFN0cmluZyYgbCwgY29uc3QgU3RyaW5nJiByKQogewotICByZXR1cm4gKEFzU3RyaW5nVmlldzxMPjo6dmlldyhzdGQ6OmZvcndhcmQ8TD4obCkpID4KLSAgICAgICAgICBBc1N0cmluZ1ZpZXc8Uj46OnZpZXcoc3RkOjpmb3J3YXJkPFI+KHIpKSk7CisgIHJldHVybiBsLnZpZXcoKSA+IHIudmlldygpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIEw+Cit0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0NvbXBhcmFibGU8TD46OnZhbHVlLCBib29sPjo6dHlwZSBvcGVyYXRvcj4oCisgIEwmJiBsLCBjb25zdCBTdHJpbmcmIHIpCit7CisgIHJldHVybiBBc1N0cmluZ1ZpZXc8TD46OnZpZXcoc3RkOjpmb3J3YXJkPEw+KGwpKSA+IHIudmlldygpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFI+Cit0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0NvbXBhcmFibGU8Uj46OnZhbHVlLCBib29sPjo6dHlwZSBvcGVyYXRvcj4oCisgIGNvbnN0IFN0cmluZyYgbCwgUiYmIHIpCit7CisgIHJldHVybiBsLnZpZXcoKSA+IEFzU3RyaW5nVmlldzxSPjo6dmlldyhzdGQ6OmZvcndhcmQ8Uj4ocikpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTCwgdHlwZW5hbWUgUj4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEFzU3RyaW5nVmlldzxMPjo6dmFsdWUgJiYgQXNTdHJpbmdWaWV3PFI+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+Ojp0eXBlCi1vcGVyYXRvcj49KEwmJiBsLCBSJiYgcikKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgU3RyaW5nJiBsLCBjb25zdCBTdHJpbmcmIHIpCiB7Ci0gIHJldHVybiAoQXNTdHJpbmdWaWV3PEw+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxMPihsKSkgPj0KLSAgICAgICAgICBBc1N0cmluZ1ZpZXc8Uj46OnZpZXcoc3RkOjpmb3J3YXJkPFI+KHIpKSk7CisgIHJldHVybiBsLnZpZXcoKSA+PSByLnZpZXcoKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBMPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNDb21wYXJhYmxlPEw+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgb3BlcmF0b3I+PSgKKyAgTCYmIGwsIGNvbnN0IFN0cmluZyYgcikKK3sKKyAgcmV0dXJuIEFzU3RyaW5nVmlldzxMPjo6dmlldyhzdGQ6OmZvcndhcmQ8TD4obCkpID49IHIudmlldygpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFI+Cit0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0NvbXBhcmFibGU8Uj46OnZhbHVlLCBib29sPjo6dHlwZSBvcGVyYXRvcj49KAorICBjb25zdCBTdHJpbmcmIGwsIFImJiByKQoreworICByZXR1cm4gbC52aWV3KCkgPj0gQXNTdHJpbmdWaWV3PFI+Ojp2aWV3KHN0ZDo6Zm9yd2FyZDxSPihyKSk7CiB9CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBTdHJpbmcgY29uc3QmIHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RyaW5nQWxnb3JpdGhtcy5jeHggYi9Tb3VyY2UvY21TdHJpbmdBbGdvcml0aG1zLmN4eAppbmRleCBiYjZkY2Q3Li43MWQyOGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdHJpbmdBbGdvcml0aG1zLmN4eAorKysgYi9Tb3VyY2UvY21TdHJpbmdBbGdvcml0aG1zLmN4eApAQCAtNCw3ICs0LDcgQEAKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjZXJybm8+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDxjc3RkbGliPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdHJpbmdBbGdvcml0aG1zLmggYi9Tb3VyY2UvY21TdHJpbmdBbGdvcml0aG1zLmgKaW5kZXggMGU0MDVkZS4uNGIwMDkwYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3RyaW5nQWxnb3JpdGhtcy5oCisrKyBiL1NvdXJjZS9jbVN0cmluZ0FsZ29yaXRobXMuaApAQCAtMjAsNiArMjAsMjAgQEAKIC8qKiBTdHJpbmcgcmFuZ2UgdHlwZS4gICovCiB1c2luZyBjbVN0cmluZ1JhbmdlID0gY21SYW5nZTxzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yPjsKIAorLyoqIENoZWNrIGZvciBub24tZW1wdHkgc3RyaW5nLiAgKi8KK2lubGluZSBib29sIGNtTm9uZW1wdHkoY29uc3QgY2hhciogc3RyKQoreworICByZXR1cm4gc3RyICYmICpzdHI7Cit9CitpbmxpbmUgYm9vbCBjbU5vbmVtcHR5KGNtOjpzdHJpbmdfdmlldyBzdHIpCit7CisgIHJldHVybiAhc3RyLmVtcHR5KCk7Cit9CitpbmxpbmUgYm9vbCBjbU5vbmVtcHR5KHN0ZDo6c3RyaW5nIGNvbnN0KiBzdHIpCit7CisgIHJldHVybiBzdHIgJiYgIXN0ci0+ZW1wdHkoKTsKK30KKwogLyoqIENhbGxhYmxlIHN0cmluZyBjb21wYXJpc29uIHN0cnVjdC4gICovCiBzdHJ1Y3QgY21TdHJDbXAKIHsKQEAgLTg3LDcgKzEwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhcmdzT3V0KQogewogICBmb3IgKDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCkgewotICAgIEV4cGFuZExpc3QoKmZpcnN0LCBhcmdzT3V0KTsKKyAgICBjbUV4cGFuZExpc3QoKmZpcnN0LCBhcmdzT3V0KTsKICAgfQogfQogCkBAIC0yMDUsMTAgKzIxOSwxMSBAQAogYm9vbCBjbUlzT24oY206OnN0cmluZ192aWV3IHZhbCk7CiBpbmxpbmUgYm9vbCBjbUlzT24oY29uc3QgY2hhciogdmFsKQogewotICBpZiAoIXZhbCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gY21Jc09uKGNtOjpzdHJpbmdfdmlldyh2YWwpKTsKKyAgcmV0dXJuIHZhbCAmJiBjbUlzT24oY206OnN0cmluZ192aWV3KHZhbCkpOworfQoraW5saW5lIGJvb2wgY21Jc09uKHN0ZDo6c3RyaW5nIGNvbnN0KiB2YWwpCit7CisgIHJldHVybiB2YWwgJiYgY21Jc09uKCp2YWwpOwogfQogCiAvKioKQEAgLTIyMSwxMCArMjM2LDExIEBACiBib29sIGNtSXNPZmYoY206OnN0cmluZ192aWV3IHZhbCk7CiBpbmxpbmUgYm9vbCBjbUlzT2ZmKGNvbnN0IGNoYXIqIHZhbCkKIHsKLSAgaWYgKCF2YWwpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gY21Jc09mZihjbTo6c3RyaW5nX3ZpZXcodmFsKSk7CisgIHJldHVybiAhdmFsIHx8IGNtSXNPZmYoY206OnN0cmluZ192aWV3KHZhbCkpOworfQoraW5saW5lIGJvb2wgY21Jc09mZihzdGQ6OnN0cmluZyBjb25zdCogdmFsKQoreworICByZXR1cm4gIXZhbCB8fCBjbUlzT2ZmKCp2YWwpOwogfQogCiAvKiogUmV0dXJucyB0cnVlIGlmIHN0cmluZyBAYSBzdHIgc3RhcnRzIHdpdGggdGhlIGNoYXJhY3RlciBAYSBwcmVmaXguICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3RyaW5nQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21TdHJpbmdDb21tYW5kLmN4eAppbmRleCA5MjEyMTk1Li5hN2MyMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21TdHJpbmdDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21TdHJpbmdDb21tYW5kLmN4eApAQCAtMTEsMTEgKzExLDEwIEBACiAjaW5jbHVkZSA8bWVtb3J5PgogCiAjaW5jbHVkZSA8Y20vaXRlcmF0b3I+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgotCiAjaW5jbHVkZSAiY21DcnlwdG9IYXNoLmgiCiAjaW5jbHVkZSAiY21FeGVjdXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKQEAgLTEyNCw2ICsxMjMsMjcgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSGFuZGxlSGV4Q29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKK3sKKyAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpIHsKKyAgICBzdGF0dXMuU2V0RXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGF1dG8gY29uc3QmIGluc3RyID0gYXJnc1sxXTsKKyAgYXV0byBjb25zdCYgb3V0dmFyID0gYXJnc1syXTsKKyAgc3RkOjpzdHJpbmcgb3V0cHV0KGluc3RyLnNpemUoKSAqIDIsICcgJyk7CisKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBoZXhJbmRleCA9IDA7CisgIGZvciAoYXV0byBjb25zdCYgYyA6IGluc3RyKSB7CisgICAgc3ByaW50Zigmb3V0cHV0W2hleEluZGV4XSwgIiUuMngiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSAmIDB4RkYpOworICAgIGhleEluZGV4ICs9IDI7CisgIH0KKworICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGREZWZpbml0aW9uKG91dHZhciwgb3V0cHV0KTsKKyAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgSGFuZGxlQ29uZmlndXJlQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKIHsKQEAgLTkzNiw2ICs5NTYsNyBAQAogICAgIHsgIlRPVVBQRVIiX3MsIEhhbmRsZVRvVXBwZXJDb21tYW5kIH0sCiAgICAgeyAiQ09NUEFSRSJfcywgSGFuZGxlQ29tcGFyZUNvbW1hbmQgfSwKICAgICB7ICJBU0NJSSJfcywgSGFuZGxlQXNjaWlDb21tYW5kIH0sCisgICAgeyAiSEVYIl9zLCBIYW5kbGVIZXhDb21tYW5kIH0sCiAgICAgeyAiQ09ORklHVVJFIl9zLCBIYW5kbGVDb25maWd1cmVDb21tYW5kIH0sCiAgICAgeyAiTEVOR1RIIl9zLCBIYW5kbGVMZW5ndGhDb21tYW5kIH0sCiAgICAgeyAiQVBQRU5EIl9zLCBIYW5kbGVBcHBlbmRDb21tYW5kIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21TdWJjb21tYW5kVGFibGUuaCBiL1NvdXJjZS9jbVN1YmNvbW1hbmRUYWJsZS5oCmluZGV4IDY1ZWI4YzcuLjdkZWFhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN1YmNvbW1hbmRUYWJsZS5oCisrKyBiL1NvdXJjZS9jbVN1YmNvbW1hbmRUYWJsZS5oCkBAIC0xMSw4ICsxMSw3IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+Ci0KLSNpbmNsdWRlICJjbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IgorI2luY2x1ZGUgPGNtZXh0L3N0cmluZ192aWV3PgogCiBjbGFzcyBjbUV4ZWN1dGlvblN0YXR1czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3lzdGVtVG9vbHMuY3h4IGIvU291cmNlL2NtU3lzdGVtVG9vbHMuY3h4CmluZGV4IGM0YTQyMjAuLjc5OGMyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVN5c3RlbVRvb2xzLmN4eAorKysgYi9Tb3VyY2UvY21TeXN0ZW1Ub29scy5jeHgKQEAgLTEsMTcgKzEsMjkgQEAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKworI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19zdW4pCisvLyBQT1NJWCBBUElzIGFyZSBuZWVkZWQKKyMgIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UgMjAwODA5TAorI2VuZGlmCisjaWYgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKQorLy8gRm9yIGlzYXNjaWkKKyMgIGRlZmluZSBfWE9QRU5fU09VUkNFIDcwMAorI2VuZGlmCisKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KKwogI2luY2x1ZGUgImNtRHVyYXRpb24uaCIKICNpbmNsdWRlICJjbVByb2Nlc3NPdXRwdXQuaCIKICNpbmNsdWRlICJjbVJhbmdlLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCi0jICBpbmNsdWRlICJjbV9saWJhcmNoaXZlLmgiCisjICBpbmNsdWRlIDxjbTNwL2FyY2hpdmUuaD4KKyMgIGluY2x1ZGUgPGNtM3AvYXJjaGl2ZV9lbnRyeS5oPgogCiAjICBpbmNsdWRlICJjbUFyY2hpdmVXcml0ZS5oIgogIyAgaW5jbHVkZSAiY21Mb2NhbGUuaCIKQEAgLTI0LDYgKzM2LDkgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQorIyAgaWYgZGVmaW5lZChfV0lOMzIpCisjICAgIGluY2x1ZGUgPGNtL21lbW9yeT4KKyMgIGVuZGlmCiAjICBpbmNsdWRlICJjbUNyeXB0b0hhc2guaCIKICNlbmRpZgogCkBAIC0zNjAsNyArMzc1LDcgQEAKICNlbHNlCiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlBhcnNlVW5peENvbW1hbmRMaW5lKGxpbmUuY19zdHIoKSwgYXJnczIpOwogI2VuZGlmCi0gICAgICAgIGNtQXBwZW5kKGFyZ19mdWxsLCBhcmdzMik7CisgICAgICAgIGNtOjphcHBlbmQoYXJnX2Z1bGwsIGFyZ3MyKTsKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgYXJnX2Z1bGwucHVzaF9iYWNrKGFyZyk7CkBAIC01ODUsNyArNjAwLDcgQEAKICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRvdXQoc3RyZGF0YSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNhcHR1cmVTdGRPdXQpIHsKLSAgICAgICAgICBjbUFwcGVuZCh0ZW1wU3RkT3V0LCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKKyAgICAgICAgICBjbTo6YXBwZW5kKHRlbXBTdGRPdXQsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOwogICAgICAgICB9CiAgICAgICB9IGVsc2UgaWYgKHBpcGUgPT0gY21zeXNQcm9jZXNzX1BpcGVfU1RERVJSKSB7CiAgICAgICAgIGlmIChvdXRwdXRmbGFnICE9IE9VVFBVVF9OT05FKSB7CkBAIC01OTMsNyArNjA4LDcgQEAKICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdGRlcnIoc3RyZGF0YSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNhcHR1cmVTdGRFcnIpIHsKLSAgICAgICAgICBjbUFwcGVuZCh0ZW1wU3RkRXJyLCBkYXRhLCBkYXRhICsgbGVuZ3RoKTsKKyAgICAgICAgICBjbTo6YXBwZW5kKHRlbXBTdGRFcnIsIGRhdGEsIGRhdGEgKyBsZW5ndGgpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtODA4LDEyICs4MjMsMTYgQEAKICAgLy8gUGVyZm9ybSBsaWJ1diBvbmUtdGltZSBpbml0aWFsaXphdGlvbiBub3csIGFuZCB0aGVuIHVuLWRvIGl0cwogICAvLyBnbG9iYWwgX2Ztb2RlIHNldHRpbmcgc28gdGhhdCB1c2luZyBsaWJ1diBkb2VzIG5vdCBjaGFuZ2UgdGhlCiAgIC8vIGRlZmF1bHQgZmlsZSB0ZXh0L2JpbmFyeSBtb2RlLiAgU2VlIGxpYnV2IGlzc3VlIDg0MC4KLSAgdXZfbG9vcF9jbG9zZSh1dl9kZWZhdWx0X2xvb3AoKSk7CisgIGlmICh1dl9sb29wX3QqIGxvb3AgPSB1dl9kZWZhdWx0X2xvb3AoKSkgeworICAgIHV2X2xvb3BfY2xvc2UobG9vcCk7CisgIH0KICMgIGlmZGVmIF9NU0NfVkVSCiAgIF9zZXRfZm1vZGUoX09fVEVYVCk7CiAjICBlbHNlCiAgIF9mbW9kZSA9IF9PX1RFWFQ7CiAjICBlbmRpZgorICAvLyBSZXBsYWNlIGxpYnV2J3MgcmVwb3J0IGhhbmRsZXIgd2l0aCBvdXIgb3duIHRvIHN1cHByZXNzIHBvcHVwcy4KKyAgY21TeXN0ZW1Ub29sczo6RW5hYmxlTVNWQ0RlYnVnSG9vaygpOwogI2VuZGlmCiB9CiAKQEAgLTkwNSw3ICs5MjQsNiBAQAogICBzdGQ6OnN0cmluZyB0aHVtYnByaW50OwogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKSAmJiBkZWZpbmVkKF9XSU4zMikKLSAgQllURSogY2VydERhdGEgPSBOVUxMOwogICBDUllQVF9JTlRFR0VSX0JMT0IgY3J5cHRCbG9iOwogICBIQ0VSVFNUT1JFIGNlcnRTdG9yZSA9IE5VTEw7CiAgIFBDQ0VSVF9DT05URVhUIGNlcnRDb250ZXh0ID0gTlVMTDsKQEAgLTkxNywxMiArOTM1LDEyIEBACiAgIGlmIChjZXJ0RmlsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSAmJiBjZXJ0RmlsZSAhPSBOVUxMKSB7CiAgICAgRFdPUkQgZmlsZVNpemUgPSBHZXRGaWxlU2l6ZShjZXJ0RmlsZSwgTlVMTCk7CiAgICAgaWYgKGZpbGVTaXplICE9IElOVkFMSURfRklMRV9TSVpFKSB7Ci0gICAgICBjZXJ0RGF0YSA9IG5ldyBCWVRFW2ZpbGVTaXplXTsKKyAgICAgIGF1dG8gY2VydERhdGEgPSBjbTo6bWFrZV91bmlxdWU8QllURVtdPihmaWxlU2l6ZSk7CiAgICAgICBpZiAoY2VydERhdGEgIT0gTlVMTCkgewogICAgICAgICBEV09SRCBkd1JlYWQgPSAwOwotICAgICAgICBpZiAoUmVhZEZpbGUoY2VydEZpbGUsIGNlcnREYXRhLCBmaWxlU2l6ZSwgJmR3UmVhZCwgTlVMTCkpIHsKKyAgICAgICAgaWYgKFJlYWRGaWxlKGNlcnRGaWxlLCBjZXJ0RGF0YS5nZXQoKSwgZmlsZVNpemUsICZkd1JlYWQsIE5VTEwpKSB7CiAgICAgICAgICAgY3J5cHRCbG9iLmNiRGF0YSA9IGZpbGVTaXplOwotICAgICAgICAgIGNyeXB0QmxvYi5wYkRhdGEgPSBjZXJ0RGF0YTsKKyAgICAgICAgICBjcnlwdEJsb2IucGJEYXRhID0gY2VydERhdGEuZ2V0KCk7CiAKICAgICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGlzIGlzIGEgdmFsaWQgY2VydAogICAgICAgICAgIGlmIChQRlhJc1BGWEJsb2IoJmNyeXB0QmxvYikpIHsKQEAgLTk1OCw3ICs5NzYsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBkZWxldGVbXSBjZXJ0RGF0YTsKICAgICAgIH0KICAgICB9CiAgICAgQ2xvc2VIYW5kbGUoY2VydEZpbGUpOwpAQCAtMTA1MSw4ICsxMDY4LDcgQEAKICAgICAgICAgaWYgKHR5cGUgPCAwICYmICFjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkoZm5hbWUpKSB7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNmbmFtZS5zaXplKCkgPj0gcHBhdGguc2l6ZSgpICYmCi0gICAgICAgICAgICBzZm5hbWUuc3Vic3RyKDAsIHBwYXRoLnNpemUoKSkgPT0gcHBhdGgpIHsKKyAgICAgICAgaWYgKGNtSGFzUHJlZml4KHNmbmFtZSwgcHBhdGgpKSB7CiAgICAgICAgICAgZmlsZXMucHVzaF9iYWNrKGZuYW1lKTsKICAgICAgICAgICByZXMgPSB0cnVlOwogICAgICAgICB9CkBAIC0xMTk3LDcgKzEyMTMsNyBAQAogewogIyAgaWYgIWRlZmluZWQoSEFWRV9VTlNFVEVOVikKICAgc3RkOjpzdHJpbmcgdmFyID0gY21TdHJDYXQodmFsdWUsICc9Jyk7Ci0gIHJldHVybiBjbVN5c3RlbVRvb2xzOjpQdXRFbnYodmFyLmNfc3RyKCkpOworICByZXR1cm4gY21TeXN0ZW1Ub29sczo6UHV0RW52KHZhcik7CiAjICBlbHNlCiAgIHVuc2V0ZW52KHZhbHVlKTsKICAgcmV0dXJuIHRydWU7CkBAIC0xMzA4LDYgKzEzMjQsNyBAQAogCiAgIGNtQXJjaGl2ZVdyaXRlIGEoZm91dCwgY29tcHJlc3MsIGZvcm1hdC5lbXB0eSgpID8gInBheHIiIDogZm9ybWF0KTsKIAorICBhLk9wZW4oKTsKICAgYS5TZXRNVGltZShtdGltZSk7CiAgIGEuU2V0VmVyYm9zZSh2ZXJib3NlKTsKICAgYm9vbCB0YXJDcmVhdGVkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZTsKQEAgLTE3MTAsMjYgKzE3MjcsMjYgQEAKICAgICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChkYXRhLCBsZW5ndGgsIHN0cmRhdGEsIDEpOwogICAgICAgLy8gQXBwZW5kIHRvIHRoZSBzdGRvdXQgYnVmZmVyLgogICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj46OnNpemVfdHlwZSBzaXplID0gb3V0LnNpemUoKTsKLSAgICAgIGNtQXBwZW5kKG91dCwgc3RyZGF0YSk7CisgICAgICBjbTo6YXBwZW5kKG91dCwgc3RyZGF0YSk7CiAgICAgICBvdXRpdGVyID0gb3V0LmJlZ2luKCkgKyBzaXplOwogICAgIH0gZWxzZSBpZiAocGlwZSA9PSBjbXN5c1Byb2Nlc3NfUGlwZV9TVERFUlIpIHsKICAgICAgIHByb2Nlc3NPdXRwdXQuRGVjb2RlVGV4dChkYXRhLCBsZW5ndGgsIHN0cmRhdGEsIDIpOwogICAgICAgLy8gQXBwZW5kIHRvIHRoZSBzdGRlcnIgYnVmZmVyLgogICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj46OnNpemVfdHlwZSBzaXplID0gZXJyLnNpemUoKTsKLSAgICAgIGNtQXBwZW5kKGVyciwgc3RyZGF0YSk7CisgICAgICBjbTo6YXBwZW5kKGVyciwgc3RyZGF0YSk7CiAgICAgICBlcnJpdGVyID0gZXJyLmJlZ2luKCkgKyBzaXplOwogICAgIH0gZWxzZSBpZiAocGlwZSA9PSBjbXN5c1Byb2Nlc3NfUGlwZV9Ob25lKSB7CiAgICAgICAvLyBCb3RoIHN0ZG91dCBhbmQgc3RkZXJyIHBpcGVzIGhhdmUgYnJva2VuLiAgUmV0dXJuIGxlZnRvdmVyIGRhdGEuCiAgICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoc3RkOjpzdHJpbmcoKSwgc3RyZGF0YSwgMSk7CiAgICAgICBpZiAoIXN0cmRhdGEuZW1wdHkoKSkgewogICAgICAgICBzdGQ6OnZlY3RvcjxjaGFyPjo6c2l6ZV90eXBlIHNpemUgPSBvdXQuc2l6ZSgpOwotICAgICAgICBjbUFwcGVuZChvdXQsIHN0cmRhdGEpOworICAgICAgICBjbTo6YXBwZW5kKG91dCwgc3RyZGF0YSk7CiAgICAgICAgIG91dGl0ZXIgPSBvdXQuYmVnaW4oKSArIHNpemU7CiAgICAgICB9CiAgICAgICBwcm9jZXNzT3V0cHV0LkRlY29kZVRleHQoc3RkOjpzdHJpbmcoKSwgc3RyZGF0YSwgMik7CiAgICAgICBpZiAoIXN0cmRhdGEuZW1wdHkoKSkgewogICAgICAgICBzdGQ6OnZlY3RvcjxjaGFyPjo6c2l6ZV90eXBlIHNpemUgPSBlcnIuc2l6ZSgpOwotICAgICAgICBjbUFwcGVuZChlcnIsIHN0cmRhdGEpOworICAgICAgICBjbTo6YXBwZW5kKGVyciwgc3RyZGF0YSk7CiAgICAgICAgIGVycml0ZXIgPSBlcnIuYmVnaW4oKSArIHNpemU7CiAgICAgICB9CiAgICAgICBpZiAoIW91dC5lbXB0eSgpKSB7CkBAIC0yMDY1LDYgKzIwODIsMTIgQEAKICAgcmV0dXJuIGNtU3lzdGVtVG9vbHNDTWFrZVJvb3Q7CiB9CiAKK3N0ZDo6c3RyaW5nIGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkKK3sKKyAgcmV0dXJuIGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgoCisgICAgY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpKTsKK30KKwogdm9pZCBjbVN5c3RlbVRvb2xzOjpNYWtlZmlsZUNvbG9yRWNobyhpbnQgY29sb3IsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmV3bGluZSwgYm9vbCBlbmFibGVkKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL2NtU3lzdGVtVG9vbHMuaCBiL1NvdXJjZS9jbVN5c3RlbVRvb2xzLmgKaW5kZXggZWUxNDlhMC4uYjg4NmM1OCAxMDA2NDQKLS0tIGEvU291cmNlL2NtU3lzdGVtVG9vbHMuaAorKysgYi9Tb3VyY2UvY21TeXN0ZW1Ub29scy5oCkBAIC0zOTAsNiArMzkwLDkgQEAKICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0JiBHZXRDTUNsRGVwc0NvbW1hbmQoKTsKICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN0JiBHZXRDTWFrZVJvb3QoKTsKIAorICAvKiogR2V0IHRoZSBDV0QgbWFwcGVkIHRocm91Z2ggdGhlIEtXU3lzIHRyYW5zbGF0aW9uIG1hcC4gICovCisgIHN0YXRpYyBzdGQ6OnN0cmluZyBHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpOworCiAgIC8qKiBFY2hvIGEgbWVzc2FnZSBpbiBjb2xvciB1c2luZyBLV1N5cydzIFRlcm1pbmFsIGNwcmludGYuICAqLwogICBzdGF0aWMgdm9pZCBNYWtlZmlsZUNvbG9yRWNobyhpbnQgY29sb3IsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGJvb2wgbmV3TGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldC5jeHggYi9Tb3VyY2UvY21UYXJnZXQuY3h4CmluZGV4IGNkZmQzNDkuLjBlNWRmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRhcmdldC5jeHgKKysrIGIvU291cmNlL2NtVGFyZ2V0LmN4eApAQCAtNywxMSArNywxMyBAQAogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KICNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CiAKICNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCiAKQEAgLTM4LDEzICs0MCwxMyBAQAogI2luY2x1ZGUgImNtYWtlLmgiCiAKIHRlbXBsYXRlIDw+Ci1jb25zdCBjaGFyKiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkNvbXB1dGVMb2NhdGlvbkZvckJ1aWxkPGNtVGFyZ2V0PigKK2NvbnN0IHN0ZDo6c3RyaW5nJiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkNvbXB1dGVMb2NhdGlvbkZvckJ1aWxkPGNtVGFyZ2V0PigKICAgY21UYXJnZXQgY29uc3QqIHRndCkKIHsKICAgc3RhdGljIHN0ZDo6c3RyaW5nIGxvYzsKICAgaWYgKHRndC0+SXNJbXBvcnRlZCgpKSB7CiAgICAgbG9jID0gdGd0LT5JbXBvcnRlZEdldEZ1bGxQYXRoKCIiLCBjbVN0YXRlRW51bXM6OlJ1bnRpbWVCaW5hcnlBcnRpZmFjdCk7Ci0gICAgcmV0dXJuIGxvYy5jX3N0cigpOworICAgIHJldHVybiBsb2M7CiAgIH0KIAogICBjbUdsb2JhbEdlbmVyYXRvciogZ2cgPSB0Z3QtPkdldEdsb2JhbEdlbmVyYXRvcigpOwpAQCAtNTMsMTggKzU1LDE4IEBACiAgIH0KICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0ID0gZ2ctPkZpbmRHZW5lcmF0b3JUYXJnZXQodGd0LT5HZXROYW1lKCkpOwogICBsb2MgPSBndC0+R2V0TG9jYXRpb25Gb3JCdWlsZCgpOwotICByZXR1cm4gbG9jLmNfc3RyKCk7CisgIHJldHVybiBsb2M7CiB9CiAKIHRlbXBsYXRlIDw+Ci1jb25zdCBjaGFyKiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkNvbXB1dGVMb2NhdGlvbjxjbVRhcmdldD4oCitjb25zdCBzdGQ6OnN0cmluZyYgY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpDb21wdXRlTG9jYXRpb248Y21UYXJnZXQ+KAogICBjbVRhcmdldCBjb25zdCogdGd0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnKQogewogICBzdGF0aWMgc3RkOjpzdHJpbmcgbG9jOwogICBpZiAodGd0LT5Jc0ltcG9ydGVkKCkpIHsKICAgICBsb2MgPQogICAgICAgdGd0LT5JbXBvcnRlZEdldEZ1bGxQYXRoKGNvbmZpZywgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QpOwotICAgIHJldHVybiBsb2MuY19zdHIoKTsKKyAgICByZXR1cm4gbG9jOwogICB9CiAKICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gdGd0LT5HZXRHbG9iYWxHZW5lcmF0b3IoKTsKQEAgLTczLDExICs3NSwxMSBAQAogICB9CiAgIGNtR2VuZXJhdG9yVGFyZ2V0KiBndCA9IGdnLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KHRndC0+R2V0TmFtZSgpKTsKICAgbG9jID0gZ3QtPkdldEZ1bGxQYXRoKGNvbmZpZywgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QpOwotICByZXR1cm4gbG9jLmNfc3RyKCk7CisgIHJldHVybiBsb2M7CiB9CiAKIHRlbXBsYXRlIDw+Ci1jb25zdCBjaGFyKiBjbVRhcmdldFByb3BlcnR5Q29tcHV0ZXI6OkdldFNvdXJjZXM8Y21UYXJnZXQ+KAorY21Qcm9wIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6R2V0U291cmNlczxjbVRhcmdldD4oCiAgIGNtVGFyZ2V0IGNvbnN0KiB0Z3QsIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIsCiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpCiB7CkBAIC0xNTUsNyArMTU3LDcgQEAKICAgfQogICBzdGF0aWMgc3RkOjpzdHJpbmcgc3JjczsKICAgc3JjcyA9IHNzLnN0cigpOwotICByZXR1cm4gc3Jjcy5jX3N0cigpOworICByZXR1cm4gJnNyY3M7CiB9CiAKIGNsYXNzIGNtVGFyZ2V0SW50ZXJuYWxzCkBAIC0xNzYsMTMgKzE3OCwxNSBAQAogICBib29sIElzSW1wb3J0ZWRUYXJnZXQ7CiAgIGJvb2wgSW1wb3J0ZWRHbG9iYWxseVZpc2libGU7CiAgIGJvb2wgQnVpbGRJbnRlcmZhY2VJbmNsdWRlc0FwcGVuZGVkOwotICBzdGQ6OnNldDxCVDxzdGQ6OnN0cmluZz4+IFV0aWxpdGllczsKKyAgYm9vbCBQZXJDb25maWc7CisgIHN0ZDo6c2V0PEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+PiBVdGlsaXRpZXM7CiAgIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gUHJlQnVpbGRDb21tYW5kczsKICAgc3RkOjp2ZWN0b3I8Y21DdXN0b21Db21tYW5kPiBQcmVMaW5rQ29tbWFuZHM7CiAgIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gUG9zdEJ1aWxkQ29tbWFuZHM7CiAgIHN0ZDo6dmVjdG9yPGNtSW5zdGFsbFRhcmdldEdlbmVyYXRvcio+IEluc3RhbGxHZW5lcmF0b3JzOwogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gU3lzdGVtSW5jbHVkZURpcmVjdG9yaWVzOwogICBjbVRhcmdldDo6TGlua0xpYnJhcnlWZWN0b3JUeXBlIE9yaWdpbmFsTGlua0xpYnJhcmllczsKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIEJUczxzdGQ6OnN0cmluZz4+IExhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0aWVzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gSW5jbHVkZURpcmVjdG9yaWVzRW50cmllczsKICAgc3RkOjp2ZWN0b3I8Y21MaXN0RmlsZUJhY2t0cmFjZT4gSW5jbHVkZURpcmVjdG9yaWVzQmFja3RyYWNlczsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IENvbXBpbGVPcHRpb25zRW50cmllczsKQEAgLTIxMiw4ICsyMTYsMTcgQEAKICAgc3RkOjpzdHJpbmcgUHJvY2Vzc1NvdXJjZUl0ZW1DTVAwMDQ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBzKTsKIH07CiAKK25hbWVzcGFjZSB7CisjZGVmaW5lIFNFVFVQX0NPTU1PTl9MQU5HVUFHRV9QUk9QRVJUSUVTKGxhbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGluaXRQcm9wKCNsYW5nICJfQ09NUElMRVJfTEFVTkNIRVIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGluaXRQcm9wKCNsYW5nICJfU1RBTkRBUkQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGluaXRQcm9wKCNsYW5nICJfU1RBTkRBUkRfUkVRVUlSRUQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGluaXRQcm9wKCNsYW5nICJfRVhURU5TSU9OUyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGluaXRQcm9wKCNsYW5nICJfVklTSUJJTElUWV9QUkVTRVQiKQorfQorCiBjbVRhcmdldDo6Y21UYXJnZXQoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIGNtU3RhdGVFbnVtczo6VGFyZ2V0VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgIFZpc2liaWxpdHkgdmlzLCBjbU1ha2VmaWxlKiBtZikKKyAgICAgICAgICAgICAgICAgICBWaXNpYmlsaXR5IHZpcywgY21NYWtlZmlsZSogbWYsIFBlckNvbmZpZyBwZXJDb25maWcpCiAgIDogaW1wbChjbTo6bWFrZV91bmlxdWU8Y21UYXJnZXRJbnRlcm5hbHM+KCkpCiB7CiAgIGFzc2VydChtZik7CkBAIC0yMjksNiArMjQyLDcgQEAKICAgICAodmlzID09IFZpc2liaWxpdHlJbXBvcnRlZCB8fCB2aXMgPT0gVmlzaWJpbGl0eUltcG9ydGVkR2xvYmFsbHkpOwogICBpbXBsLT5JbXBvcnRlZEdsb2JhbGx5VmlzaWJsZSA9IHZpcyA9PSBWaXNpYmlsaXR5SW1wb3J0ZWRHbG9iYWxseTsKICAgaW1wbC0+QnVpbGRJbnRlcmZhY2VJbmNsdWRlc0FwcGVuZGVkID0gZmFsc2U7CisgIGltcGwtPlBlckNvbmZpZyA9IChwZXJDb25maWcgPT0gUGVyQ29uZmlnOjpZZXMpOwogCiAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIERMTCBwbGF0Zm9ybS4KICAgaW1wbC0+SXNETExQbGF0Zm9ybSA9CkBAIC0yNjcsOCArMjgxLDE0IEBACiAgIH07CiAKICAgLy8gU2V0dXAgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMuCi0gIGlmICh0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSAmJgotICAgICAgdGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6VVRJTElUWSkgeworICBpZiAodGhpcy0+Q2FuQ29tcGlsZVNvdXJjZXMoKSkgeworCisgICAgU0VUVVBfQ09NTU9OX0xBTkdVQUdFX1BST1BFUlRJRVMoQyk7CisgICAgU0VUVVBfQ09NTU9OX0xBTkdVQUdFX1BST1BFUlRJRVMoT0JKQyk7CisgICAgU0VUVVBfQ09NTU9OX0xBTkdVQUdFX1BST1BFUlRJRVMoQ1hYKTsKKyAgICBTRVRVUF9DT01NT05fTEFOR1VBR0VfUFJPUEVSVElFUyhPQkpDWFgpOworICAgIFNFVFVQX0NPTU1PTl9MQU5HVUFHRV9QUk9QRVJUSUVTKENVREEpOworCiAgICAgaW5pdFByb3AoIkFORFJPSURfQVBJIik7CiAgICAgaW5pdFByb3AoIkFORFJPSURfQVBJX01JTiIpOwogICAgIGluaXRQcm9wKCJBTkRST0lEX0FSQ0giKTsKQEAgLTMwMCw5ICszMjAsMTEgQEAKICAgICBpbml0UHJvcCgiUERCX09VVFBVVF9ESVJFQ1RPUlkiKTsKICAgICBpbml0UHJvcCgiQ09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWSIpOwogICAgIGluaXRQcm9wKCJGUkFNRVdPUksiKTsKKyAgICBpbml0UHJvcCgiRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYIik7CiAgICAgaW5pdFByb3AoIkZvcnRyYW5fRk9STUFUIik7CiAgICAgaW5pdFByb3AoIkZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWSIpOwogICAgIGluaXRQcm9wKCJGb3J0cmFuX0NPTVBJTEVSX0xBVU5DSEVSIik7CisgICAgaW5pdFByb3AoIkZvcnRyYW5fUFJFUFJPQ0VTUyIpOwogICAgIGluaXRQcm9wKCJHTlV0b01TIik7CiAgICAgaW5pdFByb3AoIk9TWF9BUkNISVRFQ1RVUkVTIik7CiAgICAgaW5pdFByb3AoIklPU19JTlNUQUxMX0NPTUJJTkVEIik7CkBAIC0zMjgsNDUgKzM1MCwzMyBAQAogICAgIGluaXRQcm9wKCJOT19TWVNURU1fRlJPTV9JTVBPUlRFRCIpOwogICAgIGluaXRQcm9wKCJCVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIiKTsKICAgICBpbml0UHJvcCgiQ19DTEFOR19USURZIik7Ci0gICAgaW5pdFByb3AoIkNfQ09NUElMRVJfTEFVTkNIRVIiKTsKICAgICBpbml0UHJvcCgiQ19DUFBMSU5UIik7CiAgICAgaW5pdFByb3AoIkNfQ1BQQ0hFQ0siKTsKICAgICBpbml0UHJvcCgiQ19JTkNMVURFX1dIQVRfWU9VX1VTRSIpOwogICAgIGluaXRQcm9wKCJMSU5LX1dIQVRfWU9VX1VTRSIpOwotICAgIGluaXRQcm9wKCJDX1NUQU5EQVJEIik7Ci0gICAgaW5pdFByb3AoIkNfU1RBTkRBUkRfUkVRVUlSRUQiKTsKLSAgICBpbml0UHJvcCgiQ19FWFRFTlNJT05TIik7Ci0gICAgaW5pdFByb3AoIk9CSkNfQ09NUElMRVJfTEFVTkNIRVIiKTsKLSAgICBpbml0UHJvcCgiT0JKQ19TVEFOREFSRCIpOwotICAgIGluaXRQcm9wKCJPQkpDX1NUQU5EQVJEX1JFUVVJUkVEIik7Ci0gICAgaW5pdFByb3AoIk9CSkNfRVhURU5TSU9OUyIpOwogICAgIGluaXRQcm9wKCJDWFhfQ0xBTkdfVElEWSIpOwotICAgIGluaXRQcm9wKCJDWFhfQ09NUElMRVJfTEFVTkNIRVIiKTsKICAgICBpbml0UHJvcCgiQ1hYX0NQUExJTlQiKTsKICAgICBpbml0UHJvcCgiQ1hYX0NQUENIRUNLIik7CiAgICAgaW5pdFByb3AoIkNYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSIpOwotICAgIGluaXRQcm9wKCJDWFhfU1RBTkRBUkQiKTsKLSAgICBpbml0UHJvcCgiQ1hYX1NUQU5EQVJEX1JFUVVJUkVEIik7Ci0gICAgaW5pdFByb3AoIkNYWF9FWFRFTlNJT05TIik7Ci0gICAgaW5pdFByb3AoIk9CSkNYWF9DT01QSUxFUl9MQVVOQ0hFUiIpOwotICAgIGluaXRQcm9wKCJPQkpDWFhfU1RBTkRBUkQiKTsKLSAgICBpbml0UHJvcCgiT0JKQ1hYX1NUQU5EQVJEX1JFUVVJUkVEIik7Ci0gICAgaW5pdFByb3AoIk9CSkNYWF9FWFRFTlNJT05TIik7Ci0gICAgaW5pdFByb3AoIkNVREFfU1RBTkRBUkQiKTsKLSAgICBpbml0UHJvcCgiQ1VEQV9TVEFOREFSRF9SRVFVSVJFRCIpOwotICAgIGluaXRQcm9wKCJDVURBX0VYVEVOU0lPTlMiKTsKLSAgICBpbml0UHJvcCgiQ1VEQV9DT01QSUxFUl9MQVVOQ0hFUiIpOwogICAgIGluaXRQcm9wKCJDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiIpOwogICAgIGluaXRQcm9wKCJDVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMiKTsKKyAgICBpbml0UHJvcCgiQ1VEQV9SVU5USU1FX0xJQlJBUlkiKTsKKyAgICBpbml0UHJvcCgiQ1VEQV9BUkNISVRFQ1RVUkVTIik7CisgICAgaW5pdFByb3AoIlZJU0lCSUxJVFlfSU5MSU5FU19ISURERU4iKTsKKyAgICBpbml0UHJvcCgiSk9CX1BPT0xfQ09NUElMRSIpOworICAgIGluaXRQcm9wKCJKT0JfUE9PTF9MSU5LIik7CisgICAgaW5pdFByb3AoIkpPQl9QT09MX1BSRUNPTVBJTEVfSEVBREVSIik7CiAgICAgaW5pdFByb3AoIkxJTktfU0VBUkNIX1NUQVJUX1NUQVRJQyIpOwogICAgIGluaXRQcm9wKCJMSU5LX1NFQVJDSF9FTkRfU1RBVElDIik7Ci0gICAgaW5pdFByb3AoIkZPTERFUiIpOwogICAgIGluaXRQcm9wKCJTd2lmdF9MQU5HVUFHRV9WRVJTSU9OIik7CiAgICAgaW5pdFByb3AoIlN3aWZ0X01PRFVMRV9ESVJFQ1RPUlkiKTsKICAgICBpbml0UHJvcCgiVlNfSlVTVF9NWV9DT0RFX0RFQlVHR0lORyIpOwogICAgIGluaXRQcm9wKCJESVNBQkxFX1BSRUNPTVBJTEVfSEVBREVSUyIpOwogICAgIGluaXRQcm9wKCJVTklUWV9CVUlMRCIpOwogICAgIGluaXRQcm9wVmFsdWUoIlVOSVRZX0JVSUxEX0JBVENIX1NJWkUiLCAiOCIpOworICAgIGluaXRQcm9wVmFsdWUoIlVOSVRZX0JVSUxEX01PREUiLCAiQkFUQ0giKTsKKyAgICBpbml0UHJvcFZhbHVlKCJQQ0hfV0FSTl9JTlZBTElEIiwgIk9OIik7CisKICNpZmRlZiBfX0FQUExFX18KICAgICBpZiAodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCktPklzWGNvZGUoKSkgewogICAgICAgaW5pdFByb3AoIlhDT0RFX1NDSEVNRV9BRERSRVNTX1NBTklUSVpFUiIpOwpAQCAtMzc2LDYgKzM4Niw3IEBACiAgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX1RIUkVBRF9TQU5JVElaRVJfU1RPUCIpOwogICAgICAgaW5pdFByb3AoIlhDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUiIpOwogICAgICAgaW5pdFByb3AoIlhDT0RFX1NDSEVNRV9VTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUl9TVE9QIik7CisgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX1dPUktJTkdfRElSRUNUT1JZIik7CiAgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX0RJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUiIpOwogICAgICAgaW5pdFByb3AoIlhDT0RFX1NDSEVNRV9NQUlOX1RIUkVBRF9DSEVDS0VSX1NUT1AiKTsKICAgICAgIGluaXRQcm9wKCJYQ09ERV9TQ0hFTUVfTUFMTE9DX1NDUklCQkxFIik7CkBAIC0zODUsMTggKzM5NiwyMiBAQAogICAgICAgaW5pdFByb3AoIlhDT0RFX1NDSEVNRV9NQUxMT0NfU1RBQ0siKTsKICAgICAgIGluaXRQcm9wKCJYQ09ERV9TQ0hFTUVfRFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFIik7CiAgICAgICBpbml0UHJvcCgiWENPREVfU0NIRU1FX0RZTkFNSUNfTElCUkFSWV9MT0FEUyIpOworICAgICAgaW5pdFByb3AoIlhDT0RFX1NDSEVNRV9FTlZJUk9OTUVOVCIpOwogICAgIH0KICNlbmRpZgogICB9CiAKICAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgICAgaW5pdFByb3AoIkZPTERFUiIpOworCiAgICAgaWYgKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLT5Jc1hjb2RlKCkpIHsKICAgICAgIGluaXRQcm9wKCJYQ09ERV9HRU5FUkFURV9TQ0hFTUUiKTsKICAgICB9CiAgIH0KIAogICAvLyBTZXR1cCBwZXItY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBkZWZhdWx0IHZhbHVlcy4KLSAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKKyAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OlVUSUxJVFkgJiYKKyAgICAgIHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBjb25maWdQcm9wcyA9IHsKICAgICAgIC8qIGNsYW5nLWZvcm1hdCBuZWVkcyB0aGlzIGNvbW1lbnQgdG8gYnJlYWsgYWZ0ZXIgdGhlIG9wZW5pbmcgYnJhY2UgKi8KICAgICAgICJBUkNISVZFX09VVFBVVF9ESVJFQ1RPUllfIiwgICAgICJMSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfIiwKQEAgLTQwNSw4ICs0MjAsOCBAQAogICAgICAgIklOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fIgogICAgIH07CiAgICAgLy8gQ29sbGVjdCB0aGUgc2V0IG9mIGNvbmZpZ3VyYXRpb24gdHlwZXMuCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzOwotICAgIG1mLT5HZXRDb25maWd1cmF0aW9ucyhjb25maWdOYW1lcyk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbmZpZ05hbWVzID0KKyAgICAgIG1mLT5HZXRHZW5lcmF0b3JDb25maWdzKGNtTWFrZWZpbGU6OkV4Y2x1ZGVFbXB0eUNvbmZpZyk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnTmFtZSA6IGNvbmZpZ05hbWVzKSB7CiAgICAgICBzdGQ6OnN0cmluZyBjb25maWdVcHBlciA9IGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWdOYW1lKTsKICAgICAgIGZvciAoYXV0byBjb25zdCYgcHJvcCA6IGNvbmZpZ1Byb3BzKSB7CkBAIC00MzEsNiArNDQ2LDEzIEBACiAgICAgICAgICAgY21TdHJDYXQoY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZ05hbWUpLCAiX1BPU1RGSVgiKTsKICAgICAgICAgaW5pdFByb3AocHJvcGVydHkpOwogICAgICAgfQorCisgICAgICBpZiAoaW1wbC0+VGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CisgICAgICAgICAgaW1wbC0+VGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHByb3BlcnR5ID0gY21TdHJDYXQoIkZSQU1FV09SS19NVUxUSV9DT05GSUdfUE9TVEZJWF8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWdOYW1lKSk7CisgICAgICAgIGluaXRQcm9wKHByb3BlcnR5KTsKKyAgICAgIH0KICAgICB9CiAgIH0KIApAQCAtNDQwLDQwICs0NjIsMzAgQEAKICAgaWYgKCF0aGlzLT5Jc0ltcG9ydGVkKCkpIHsKICAgICAvLyBJbml0aWFsaXplIHRoZSBJTkNMVURFX0RJUkVDVE9SSUVTIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlCiAgICAgLy8gb2YgdGhlIHNhbWUgZGlyZWN0b3J5IHByb3BlcnR5OgotICAgIGNtQXBwZW5kKGltcGwtPkluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXMsCi0gICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldEluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXMoKSk7Ci0gICAgY21BcHBlbmQoaW1wbC0+SW5jbHVkZURpcmVjdG9yaWVzQmFja3RyYWNlcywKLSAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0SW5jbHVkZURpcmVjdG9yaWVzQmFja3RyYWNlcygpKTsKKyAgICBjbTo6YXBwZW5kKGltcGwtPkluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXMsCisgICAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcygpKTsKKyAgICBjbTo6YXBwZW5kKGltcGwtPkluY2x1ZGVEaXJlY3Rvcmllc0JhY2t0cmFjZXMsCisgICAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0SW5jbHVkZURpcmVjdG9yaWVzQmFja3RyYWNlcygpKTsKIAogICAgIHsKICAgICAgIGF1dG8gY29uc3QmIHN5c0luYyA9IGltcGwtPk1ha2VmaWxlLT5HZXRTeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMoKTsKICAgICAgIGltcGwtPlN5c3RlbUluY2x1ZGVEaXJlY3Rvcmllcy5pbnNlcnQoc3lzSW5jLmJlZ2luKCksIHN5c0luYy5lbmQoKSk7CiAgICAgfQogCi0gICAgY21BcHBlbmQoaW1wbC0+Q29tcGlsZU9wdGlvbnNFbnRyaWVzLAotICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRDb21waWxlT3B0aW9uc0VudHJpZXMoKSk7Ci0gICAgY21BcHBlbmQoaW1wbC0+Q29tcGlsZU9wdGlvbnNCYWNrdHJhY2VzLAotICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRDb21waWxlT3B0aW9uc0JhY2t0cmFjZXMoKSk7CisgICAgY206OmFwcGVuZChpbXBsLT5Db21waWxlT3B0aW9uc0VudHJpZXMsCisgICAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0Q29tcGlsZU9wdGlvbnNFbnRyaWVzKCkpOworICAgIGNtOjphcHBlbmQoaW1wbC0+Q29tcGlsZU9wdGlvbnNCYWNrdHJhY2VzLAorICAgICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldENvbXBpbGVPcHRpb25zQmFja3RyYWNlcygpKTsKIAotICAgIGNtQXBwZW5kKGltcGwtPkxpbmtPcHRpb25zRW50cmllcywKLSAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0TGlua09wdGlvbnNFbnRyaWVzKCkpOwotICAgIGNtQXBwZW5kKGltcGwtPkxpbmtPcHRpb25zQmFja3RyYWNlcywKLSAgICAgICAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0TGlua09wdGlvbnNCYWNrdHJhY2VzKCkpOworICAgIGNtOjphcHBlbmQoaW1wbC0+TGlua09wdGlvbnNFbnRyaWVzLAorICAgICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldExpbmtPcHRpb25zRW50cmllcygpKTsKKyAgICBjbTo6YXBwZW5kKGltcGwtPkxpbmtPcHRpb25zQmFja3RyYWNlcywKKyAgICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRMaW5rT3B0aW9uc0JhY2t0cmFjZXMoKSk7CiAKLSAgICBjbUFwcGVuZChpbXBsLT5MaW5rRGlyZWN0b3JpZXNFbnRyaWVzLAotICAgICAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRMaW5rRGlyZWN0b3JpZXNFbnRyaWVzKCkpOwotICAgIGNtQXBwZW5kKGltcGwtPkxpbmtEaXJlY3Rvcmllc0JhY2t0cmFjZXMsCi0gICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldExpbmtEaXJlY3Rvcmllc0JhY2t0cmFjZXMoKSk7Ci0gIH0KLQotICBpZiAodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgJiYKLSAgICAgIHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKLSAgICBpbml0UHJvcCgiQ19WSVNJQklMSVRZX1BSRVNFVCIpOwotICAgIGluaXRQcm9wKCJDWFhfVklTSUJJTElUWV9QUkVTRVQiKTsKLSAgICBpbml0UHJvcCgiT0JKQ19WSVNJQklMSVRZX1BSRVNFVCIpOwotICAgIGluaXRQcm9wKCJPQkpDWFhfVklTSUJJTElUWV9QUkVTRVQiKTsKLSAgICBpbml0UHJvcCgiQ1VEQV9WSVNJQklMSVRZX1BSRVNFVCIpOwotICAgIGluaXRQcm9wKCJWSVNJQklMSVRZX0lOTElORVNfSElEREVOIik7CisgICAgY206OmFwcGVuZChpbXBsLT5MaW5rRGlyZWN0b3JpZXNFbnRyaWVzLAorICAgICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldExpbmtEaXJlY3Rvcmllc0VudHJpZXMoKSk7CisgICAgY206OmFwcGVuZChpbXBsLT5MaW5rRGlyZWN0b3JpZXNCYWNrdHJhY2VzLAorICAgICAgICAgICAgICAgaW1wbC0+TWFrZWZpbGUtPkdldExpbmtEaXJlY3Rvcmllc0JhY2t0cmFjZXMoKSk7CiAgIH0KIAogICBpZiAoaW1wbC0+VGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUpIHsKQEAgLTQ4NCwxNyArNDk2LDE1IEBACiAgIGlmIChpbXBsLT5UYXJnZXRUeXBlID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKICAgICAgIGltcGwtPlRhcmdldFR5cGUgPT0gY21TdGF0ZUVudW1zOjpNT0RVTEVfTElCUkFSWSkgewogICAgIHRoaXMtPlNldFByb3BlcnR5KCJQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIiwgIlRydWUiKTsKKyAgfSBlbHNlIGlmICh0aGlzLT5DYW5Db21waWxlU291cmNlcygpKSB7CisgICAgaW5pdFByb3AoIlBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUiKTsKICAgfQogICBpZiAoaW1wbC0+VGFyZ2V0VHlwZSA9PSBjbVN0YXRlRW51bXM6OlNIQVJFRF9MSUJSQVJZIHx8CiAgICAgICBpbXBsLT5UYXJnZXRUeXBlID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSkgeworICAgIGluaXRQcm9wKCJBSVhfRVhQT1JUX0FMTF9TWU1CT0xTIik7CiAgICAgaW5pdFByb3AoIldJTkRPV1NfRVhQT1JUX0FMTF9TWU1CT0xTIik7CiAgIH0KIAotICBpZiAodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgJiYKLSAgICAgIHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKLSAgICBpbml0UHJvcCgiUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSIpOwotICB9Ci0KICAgLy8gUmVjb3JkIGN1cnJlbnQgcG9saWNpZXMgZm9yIGxhdGVyIHVzZS4KICAgaW1wbC0+TWFrZWZpbGUtPlJlY29yZFBvbGljaWVzKGltcGwtPlBvbGljeU1hcCk7CiAKQEAgLTUwNiwxOCArNTE2LDEyIEBACiAgICAgaW1wbC0+UG9saWN5TWFwLlNldChjbVBvbGljaWVzOjpDTVAwMDIyLCBjbVBvbGljaWVzOjpORVcpOwogICB9CiAKLSAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZICYmCi0gICAgICB0aGlzLT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpVVElMSVRZKSB7Ci0gICAgaW5pdFByb3AoIkpPQl9QT09MX0NPTVBJTEUiKTsKLSAgICBpbml0UHJvcCgiSk9CX1BPT0xfTElOSyIpOwotICB9Ci0KLSAgaWYgKGltcGwtPlRhcmdldFR5cGUgPD0gY21TdGF0ZUVudW1zOjpVVElMSVRZKSB7CisgIGlmIChpbXBsLT5UYXJnZXRUeXBlIDw9IGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVCkgeworICAgIGluaXRQcm9wKCJET1RORVRfVEFSR0VUX0ZSQU1FV09SSyIpOwogICAgIGluaXRQcm9wKCJET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OIik7CiAgIH0KIAotICBpZiAodGhpcy0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgJiYKLSAgICAgIHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OlVUSUxJVFkpIHsKKyAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CiAKICAgICAvLyBjaGVjayBmb3IgIkNNQUtFX1ZTX0dMT0JBTFMiIHZhcmlhYmxlIGFuZCBzZXQgdXAgdGFyZ2V0IHByb3BlcnRpZXMKICAgICAvLyBpZiBhbnkKQEAgLTU3NywxMyArNTgxLDQ4IEBACiAgIHJldHVybiBpbXBsLT5NYWtlZmlsZS0+R2V0R2xvYmFsR2VuZXJhdG9yKCk7CiB9CiAKLXZvaWQgY21UYXJnZXQ6OkFkZFV0aWxpdHkoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIGNtTWFrZWZpbGUqIG1mKQorQlRzPHN0ZDo6c3RyaW5nPiBjb25zdCogY21UYXJnZXQ6OkdldExhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0eSgKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgaW1wbC0+VXRpbGl0aWVzLmluc2VydCgKLSAgICBCVDxzdGQ6OnN0cmluZz4obmFtZSwgbWYgPyBtZi0+R2V0QmFja3RyYWNlKCkgOiBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKKyAgYXV0byBlbnRyeSA9IGltcGwtPkxhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0aWVzLmZpbmQocHJvcGVydHlOYW1lKTsKKyAgaWYgKGVudHJ5ICE9IGltcGwtPkxhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0aWVzLmVuZCgpKSB7CisgICAgcmV0dXJuICZlbnRyeS0+c2Vjb25kOworICB9CisKKyAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0ZDo6c2V0PEJUPHN0ZDo6c3RyaW5nPj4gY29uc3QmIGNtVGFyZ2V0OjpHZXRVdGlsaXRpZXMoKSBjb25zdAordm9pZCBjbVRhcmdldDo6U2V0TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmVhdHVyZSkKK3sKKyAgY21MaXN0RmlsZUJhY2t0cmFjZSBmZWF0dXJlQmFja3RyYWNlOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltcGwtPkNvbXBpbGVGZWF0dXJlc0VudHJpZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBpZiAoaW1wbC0+Q29tcGlsZUZlYXR1cmVzRW50cmllc1tpXSA9PSBmZWF0dXJlKSB7CisgICAgICBpZiAoaSA8IGltcGwtPkNvbXBpbGVGZWF0dXJlc0JhY2t0cmFjZXMuc2l6ZSgpKSB7CisgICAgICAgIGZlYXR1cmVCYWNrdHJhY2UgPSBpbXBsLT5Db21waWxlRmVhdHVyZXNCYWNrdHJhY2VzW2ldOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgQlRzPHN0ZDo6c3RyaW5nPiYgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5ID0KKyAgICBpbXBsLT5MYW5ndWFnZVN0YW5kYXJkUHJvcGVydGllc1tjbVN0ckNhdChsYW5nLCAiX1NUQU5EQVJEIildOworICBpZiAobGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LlZhbHVlICE9IHZhbHVlKSB7CisgICAgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LlZhbHVlID0gdmFsdWU7CisgICAgbGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5LkJhY2t0cmFjZXMuY2xlYXIoKTsKKyAgfQorICBsYW5ndWFnZVN0YW5kYXJkUHJvcGVydHkuQmFja3RyYWNlcy5lbXBsYWNlX2JhY2soZmVhdHVyZUJhY2t0cmFjZSk7Cit9CisKK3ZvaWQgY21UYXJnZXQ6OkFkZFV0aWxpdHkoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsIGJvb2wgY3Jvc3MsIGNtTWFrZWZpbGUqIG1mKQoreworICBpbXBsLT5VdGlsaXRpZXMuaW5zZXJ0KEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+KAorICAgIHsgbmFtZSwgY3Jvc3MgfSwgbWYgPyBtZi0+R2V0QmFja3RyYWNlKCkgOiBjbUxpc3RGaWxlQmFja3RyYWNlKCkpKTsKK30KKworc3RkOjpzZXQ8QlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4+IGNvbnN0JiBjbVRhcmdldDo6R2V0VXRpbGl0aWVzKCkKKyAgY29uc3QKIHsKICAgcmV0dXJuIGltcGwtPlV0aWxpdGllczsKIH0KQEAgLTYxNCw2ICs2NTMsMTIgQEAKICAgICAgICAgICB0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiTUFDT1NYX0JVTkRMRSIpKTsKIH0KIAorYm9vbCBjbVRhcmdldDo6SXNBbmRyb2lkR3VpRXhlY3V0YWJsZSgpIGNvbnN0Cit7CisgIHJldHVybiAodGhpcy0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRSAmJiBpbXBsLT5Jc0FuZHJvaWQgJiYKKyAgICAgICAgICB0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiQU5EUk9JRF9HVUkiKSk7Cit9CisKIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gY29uc3QmIGNtVGFyZ2V0OjpHZXRQcmVCdWlsZENvbW1hbmRzKCkgY29uc3QKIHsKICAgcmV0dXJuIGltcGwtPlByZUJ1aWxkQ29tbWFuZHM7CkBAIC04NzMsNyArOTE4LDcgQEAKICAgICAgIGNtTGlzdEZpbGVDb250ZXh0IGxmYyA9IGNtZC5zZWNvbmQ7CiAgICAgICBsZmMuRmlsZVBhdGggPSBjbURpci5Db252ZXJ0VG9SZWxQYXRoSWZOb3RDb250YWluZWQoCiAgICAgICAgIGltcGwtPk1ha2VmaWxlLT5HZXRTdGF0ZSgpLT5HZXRTb3VyY2VEaXJlY3RvcnkoKSwgbGZjLkZpbGVQYXRoKTsKLSAgICAgIHMgPDwgIiAqICIgPDwgbGZjIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIHMgPDwgIiAqICIgPDwgbGZjIDw8ICdcbic7CiAgICAgfQogICB9CiB9CkBAIC05MzUsMTQgKzk4MCw3IEBACiAgIHJldHVybiBpbXBsLT5PcmlnaW5hbExpbmtMaWJyYXJpZXM7CiB9CiAKLXZvaWQgY21UYXJnZXQ6OkFkZExpbmtMaWJyYXJ5KGNtTWFrZWZpbGUmIG1mLCBjb25zdCBzdGQ6OnN0cmluZyYgbGliLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21UYXJnZXRMaW5rTGlicmFyeVR5cGUgbGx0KQotewotICB0aGlzLT5BZGRMaW5rTGlicmFyeShtZiwgbGliLCBsaWIsIGxsdCk7Ci19Ci0KIHZvaWQgY21UYXJnZXQ6OkFkZExpbmtMaWJyYXJ5KGNtTWFrZWZpbGUmIG1mLCBzdGQ6OnN0cmluZyBjb25zdCYgbGliLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGxpYlJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtVGFyZ2V0TGlua0xpYnJhcnlUeXBlIGxsdCkKIHsKICAgY21UYXJnZXQqIHRndCA9IG1mLkZpbmRUYXJnZXRUb1VzZShsaWIpOwpAQCAtOTUxLDE0ICs5ODksMTMgQEAKIAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGxpYk5hbWUgPQogICAgICAgKGlzTm9uSW1wb3J0ZWRUYXJnZXQgJiYgbGx0ICE9IEdFTkVSQUxfTGlicmFyeVR5cGUpCi0gICAgICA/IHRhcmdldE5hbWVHZW5leChsaWJSZWYpCi0gICAgICA6IGxpYlJlZjsKLSAgICB0aGlzLT5BcHBlbmRQcm9wZXJ0eSgKLSAgICAgICJMSU5LX0xJQlJBUklFUyIsCi0gICAgICB0aGlzLT5HZXREZWJ1Z0dlbmVyYXRvckV4cHJlc3Npb25zKGxpYk5hbWUsIGxsdCkuY19zdHIoKSk7CisgICAgICA/IHRhcmdldE5hbWVHZW5leChsaWIpCisgICAgICA6IGxpYjsKKyAgICB0aGlzLT5BcHBlbmRQcm9wZXJ0eSgiTElOS19MSUJSQVJJRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldERlYnVnR2VuZXJhdG9yRXhwcmVzc2lvbnMobGliTmFtZSwgbGx0KSk7CiAgIH0KIAotICBpZiAoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKGxpYikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgbGliICE9IGxpYlJlZiB8fAorICBpZiAoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKGxpYikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwKICAgICAgICh0Z3QgJiYKICAgICAgICAodGd0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSB8fAogICAgICAgICB0Z3QtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6Ok9CSkVDVF9MSUJSQVJZKSkgfHwKQEAgLTEwMDAsNyArMTAzNyw3IEBACiAgICAgZGVwZW5kZW5jaWVzICs9ICI7IjsKICAgICBkZXBlbmRlbmNpZXMgKz0gbGliOwogICAgIGRlcGVuZGVuY2llcyArPSAiOyI7Ci0gICAgbWYuQWRkQ2FjaGVEZWZpbml0aW9uKHRhcmdldEVudHJ5LCBkZXBlbmRlbmNpZXMuY19zdHIoKSwKKyAgICBtZi5BZGRDYWNoZURlZmluaXRpb24odGFyZ2V0RW50cnksIGRlcGVuZGVuY2llcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlcGVuZGVuY2llcyBmb3IgdGhlIHRhcmdldCIsIGNtU3RhdGVFbnVtczo6U1RBVElDKTsKICAgfQogfQpAQCAtMTExMyw2ICsxMTUwLDExIEBACiAgICAgcmV0dXJuOwogICB9CiAjZGVmaW5lIE1BS0VfU1RBVElDX1BST1AoUFJPUCkgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3AjI1BST1AgPSAjUFJPUAorICBNQUtFX1NUQVRJQ19QUk9QKENfU1RBTkRBUkQpOworICBNQUtFX1NUQVRJQ19QUk9QKENYWF9TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoQ1VEQV9TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoT0JKQ19TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoT0JKQ1hYX1NUQU5EQVJEKTsKICAgTUFLRV9TVEFUSUNfUFJPUChDT01QSUxFX0RFRklOSVRJT05TKTsKICAgTUFLRV9TVEFUSUNfUFJPUChDT01QSUxFX0ZFQVRVUkVTKTsKICAgTUFLRV9TVEFUSUNfUFJPUChDT01QSUxFX09QVElPTlMpOwpAQCAtMTI4OSwyMCArMTMzMSwyOSBAQAogCiAgICAgaW1wbC0+UHJvcGVydGllcy5TZXRQcm9wZXJ0eShwcm9wLCByZXVzZWRGcm9tLmNfc3RyKCkpOwogCi0gICAgcmV1c2VkVGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIsIHJldXNlZEZyb20uY19zdHIoKSk7CisgICAgcmV1c2VkVGFyZ2V0LT5TZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIsIHJldXNlZEZyb20pOwogICAgIHJldXNlZFRhcmdldC0+U2V0UHJvcGVydHkoIkNPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUlkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdHJDYXQocmV1c2VkRnJvbSwgIi5kaXIvIikuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0ckNhdChyZXVzZWRGcm9tLCAiLmRpci8iKSk7CiAKLSAgICB0aGlzLT5TZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIsCi0gICAgICAgICAgICAgICAgICAgICAgcmV1c2VkVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIpKTsKLSAgICB0aGlzLT5BZGRVdGlsaXR5KHJldXNlZEZyb20sIGltcGwtPk1ha2VmaWxlKTsKKyAgICBjbVByb3AgdG1wID0gcmV1c2VkVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ09NUElMRV9QREJfTkFNRSIpOworICAgIHRoaXMtPlNldFByb3BlcnR5KCJDT01QSUxFX1BEQl9OQU1FIiwgdG1wID8gdG1wLT5jX3N0cigpIDogbnVsbHB0cik7CisgICAgdGhpcy0+QWRkVXRpbGl0eShyZXVzZWRGcm9tLCBmYWxzZSwgaW1wbC0+TWFrZWZpbGUpOworICB9IGVsc2UgaWYgKHByb3AgPT0gcHJvcENfU1RBTkRBUkQgfHwgcHJvcCA9PSBwcm9wQ1hYX1NUQU5EQVJEIHx8CisgICAgICAgICAgICAgcHJvcCA9PSBwcm9wQ1VEQV9TVEFOREFSRCB8fCBwcm9wID09IHByb3BPQkpDX1NUQU5EQVJEIHx8CisgICAgICAgICAgICAgcHJvcCA9PSBwcm9wT0JKQ1hYX1NUQU5EQVJEKSB7CisgICAgaWYgKHZhbHVlKSB7CisgICAgICBpbXBsLT5MYW5ndWFnZVN0YW5kYXJkUHJvcGVydGllc1twcm9wXSA9CisgICAgICAgIEJUczxzdGQ6OnN0cmluZz4odmFsdWUsIGltcGwtPk1ha2VmaWxlLT5HZXRCYWNrdHJhY2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGltcGwtPkxhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0aWVzLmVyYXNlKHByb3ApOworICAgIH0KICAgfSBlbHNlIHsKICAgICBpbXBsLT5Qcm9wZXJ0aWVzLlNldFByb3BlcnR5KHByb3AsIHZhbHVlKTsKICAgfQogfQogCi12b2lkIGNtVGFyZ2V0OjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nKQordm9pZCBjbVRhcmdldDo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGJvb2wgYXNTdHJpbmcpCiB7CiAgIGlmICghY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyOjpQYXNzZXNXaGl0ZWxpc3QoCiAgICAgICAgIHRoaXMtPkdldFR5cGUoKSwgcHJvcCwgaW1wbC0+TWFrZWZpbGUtPkdldE1lc3NlbmdlcigpLApAQCAtMTMzNywzNyArMTM4OCwzNyBAQAogICAgIHJldHVybjsKICAgfQogICBpZiAocHJvcCA9PSAiSU5DTFVERV9ESVJFQ1RPUklFUyIpIHsKLSAgICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICBpbXBsLT5JbmNsdWRlRGlyZWN0b3JpZXNFbnRyaWVzLmVtcGxhY2VfYmFjayh2YWx1ZSk7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSBpbXBsLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7CiAgICAgICBpbXBsLT5JbmNsdWRlRGlyZWN0b3JpZXNCYWNrdHJhY2VzLnB1c2hfYmFjayhsZmJ0KTsKICAgICB9CiAgIH0gZWxzZSBpZiAocHJvcCA9PSAiQ09NUElMRV9PUFRJT05TIikgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGltcGwtPkNvbXBpbGVPcHRpb25zRW50cmllcy5lbXBsYWNlX2JhY2sodmFsdWUpOwogICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBsZmJ0ID0gaW1wbC0+TWFrZWZpbGUtPkdldEJhY2t0cmFjZSgpOwogICAgICAgaW1wbC0+Q29tcGlsZU9wdGlvbnNCYWNrdHJhY2VzLnB1c2hfYmFjayhsZmJ0KTsKICAgICB9CiAgIH0gZWxzZSBpZiAocHJvcCA9PSAiQ09NUElMRV9GRUFUVVJFUyIpIHsKLSAgICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICBpbXBsLT5Db21waWxlRmVhdHVyZXNFbnRyaWVzLmVtcGxhY2VfYmFjayh2YWx1ZSk7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSBpbXBsLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7CiAgICAgICBpbXBsLT5Db21waWxlRmVhdHVyZXNCYWNrdHJhY2VzLnB1c2hfYmFjayhsZmJ0KTsKICAgICB9CiAgIH0gZWxzZSBpZiAocHJvcCA9PSAiQ09NUElMRV9ERUZJTklUSU9OUyIpIHsKLSAgICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICBpbXBsLT5Db21waWxlRGVmaW5pdGlvbnNFbnRyaWVzLmVtcGxhY2VfYmFjayh2YWx1ZSk7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSBpbXBsLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7CiAgICAgICBpbXBsLT5Db21waWxlRGVmaW5pdGlvbnNCYWNrdHJhY2VzLnB1c2hfYmFjayhsZmJ0KTsKICAgICB9CiAgIH0gZWxzZSBpZiAocHJvcCA9PSAiTElOS19PUFRJT05TIikgewotICAgIGlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKyAgICBpZiAoIXZhbHVlLmVtcHR5KCkpIHsKICAgICAgIGltcGwtPkxpbmtPcHRpb25zRW50cmllcy5lbXBsYWNlX2JhY2sodmFsdWUpOwogICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBsZmJ0ID0gaW1wbC0+TWFrZWZpbGUtPkdldEJhY2t0cmFjZSgpOwogICAgICAgaW1wbC0+TGlua09wdGlvbnNCYWNrdHJhY2VzLnB1c2hfYmFjayhsZmJ0KTsKICAgICB9CiAgIH0gZWxzZSBpZiAocHJvcCA9PSAiTElOS19ESVJFQ1RPUklFUyIpIHsKLSAgICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICBpbXBsLT5MaW5rRGlyZWN0b3JpZXNFbnRyaWVzLmVtcGxhY2VfYmFjayh2YWx1ZSk7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSBpbXBsLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7CiAgICAgICBpbXBsLT5MaW5rRGlyZWN0b3JpZXNCYWNrdHJhY2VzLnB1c2hfYmFjayhsZmJ0KTsKQEAgLTEzODEsMTMgKzE0MzIsMTMgQEAKICAgICAgIGltcGwtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHZhbHVlICYmICp2YWx1ZSkgeworICAgIGlmICghdmFsdWUuZW1wdHkoKSkgewogICAgICAgaW1wbC0+UHJlY29tcGlsZUhlYWRlcnNFbnRyaWVzLmVtcGxhY2VfYmFjayh2YWx1ZSk7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSBpbXBsLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7CiAgICAgICBpbXBsLT5QcmVjb21waWxlSGVhZGVyc0JhY2t0cmFjZXMucHVzaF9iYWNrKGxmYnQpOwogICAgIH0KICAgfSBlbHNlIGlmIChwcm9wID09ICJMSU5LX0xJQlJBUklFUyIpIHsKLSAgICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSBpbXBsLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7CiAgICAgICBpbXBsLT5MaW5rSW1wbGVtZW50YXRpb25Qcm9wZXJ0eUVudHJpZXMuZW1wbGFjZV9iYWNrKHZhbHVlKTsKICAgICAgIGltcGwtPkxpbmtJbXBsZW1lbnRhdGlvblByb3BlcnR5QmFja3RyYWNlcy5wdXNoX2JhY2sobGZidCk7CkBAIC0xMzk5LDYgKzE0NTAsMTEgQEAKICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgocHJvcCwgIklNUE9SVEVEX0xJQk5BTUUiKSkgewogICAgIGltcGwtPk1ha2VmaWxlLT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCArICIgcHJvcGVydHkgbWF5IG5vdCBiZSBBUFBFTkRlZC4iKTsKKyAgfSBlbHNlIGlmIChwcm9wID09ICJDX1NUQU5EQVJEIiB8fCBwcm9wID09ICJDWFhfU1RBTkRBUkQiIHx8CisgICAgICAgICAgICAgcHJvcCA9PSAiQ1VEQV9TVEFOREFSRCIgfHwgcHJvcCA9PSAiT0JKQ19TVEFOREFSRCIgfHwKKyAgICAgICAgICAgICBwcm9wID09ICJPQkpDWFhfU1RBTkRBUkQiKSB7CisgICAgaW1wbC0+TWFrZWZpbGUtPklzc3VlTWVzc2FnZShNZXNzYWdlVHlwZTo6RkFUQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wICsgIiBwcm9wZXJ0eSBtYXkgbm90IGJlIGFwcGVuZGVkLiIpOwogICB9IGVsc2UgewogICAgIGltcGwtPlByb3BlcnRpZXMuQXBwZW5kUHJvcGVydHkocHJvcCwgdmFsdWUsIGFzU3RyaW5nKTsKICAgfQpAQCAtMTQyNiw3ICsxNDgyLDcgQEAKICAgICBkaXJzICs9IGltcGwtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCk7CiAgICAgaWYgKCFkaXJzLmVtcHR5KCkpIHsKICAgICAgIHRoaXMtPkFwcGVuZFByb3BlcnR5KCJJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoIiQ8QlVJTERfSU5URVJGQUNFOiIgKyBkaXJzICsgIj4iKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgiJDxCVUlMRF9JTlRFUkZBQ0U6IiArIGRpcnMgKyAiPiIpKTsKICAgICB9CiAgIH0KIH0KQEAgLTE0OTgsNyArMTU1NCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNtVGFyZ2V0Q2hlY2tMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW1wb3J0ZWQpCiB7CkBAIC0xNTM2LDcgKzE1OTIsNyBAQAogICBjb250ZXh0LT5Jc3N1ZU1lc3NhZ2UoTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLCBlLnN0cigpKTsKIH0KIAotc3RhdGljIHZvaWQgY21UYXJnZXRDaGVja0lOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyhjb25zdCBjaGFyKiB2YWx1ZSwKK3N0YXRpYyB2b2lkIGNtVGFyZ2V0Q2hlY2tJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1ha2VmaWxlKiBjb250ZXh0KQogewogICAvLyBMb29rIGZvciBsaW5rLXR5cGUga2V5d29yZHMgaW4gdGhlIHZhbHVlLgpAQCAtMTU2MSw4ICsxNjE3LDEyIEBACiBzdGF0aWMgdm9pZCBjbVRhcmdldENoZWNrSU1QT1JURURfR0xPQkFMKGNvbnN0IGNtVGFyZ2V0KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWFrZWZpbGUqIGNvbnRleHQpCiB7Ci0gIHN0ZDo6dmVjdG9yPGNtVGFyZ2V0Kj4gdGFyZ2V0cyA9IGNvbnRleHQtPkdldE93bmVkSW1wb3J0ZWRUYXJnZXRzKCk7Ci0gIGF1dG8gaXQgPSBzdGQ6OmZpbmQodGFyZ2V0cy5iZWdpbigpLCB0YXJnZXRzLmVuZCgpLCB0YXJnZXQpOworICBjb25zdCBhdXRvJiB0YXJnZXRzID0gY29udGV4dC0+R2V0T3duZWRJbXBvcnRlZFRhcmdldHMoKTsKKyAgYXV0byBpdCA9CisgICAgc3RkOjpmaW5kX2lmKHRhcmdldHMuYmVnaW4oKSwgdGFyZ2V0cy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgWyZdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxjbVRhcmdldD4mIGltcG9ydFRhcmdldCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBpbXBvcnRUYXJnZXQuZ2V0KCk7CisgICAgICAgICAgICAgICAgIH0pOwogICBpZiAoaXQgPT0gdGFyZ2V0cy5lbmQoKSkgewogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBlOwogICAgIGUgPDwgIkF0dGVtcHQgdG8gcHJvbW90ZSBpbXBvcnRlZCB0YXJnZXQgXCIiIDw8IHRhcmdldC0+R2V0TmFtZSgpCkBAIC0xNTc3LDE4ICsxNjM3LDE4IEBACiB7CiAgIC8vIENlcnRhaW4gcHJvcGVydGllcyBuZWVkIGNoZWNraW5nLgogICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiKSkgewotICAgIGlmIChjb25zdCBjaGFyKiB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7Ci0gICAgICBjbVRhcmdldENoZWNrTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTKHByb3AsIHZhbHVlLCBjb250ZXh0LCBmYWxzZSk7CisgICAgaWYgKGNtUHJvcCB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7CisgICAgICBjbVRhcmdldENoZWNrTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTKHByb3AsICp2YWx1ZSwgY29udGV4dCwgZmFsc2UpOwogICAgIH0KICAgfQogICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KHByb3AsICJJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMiKSkgewotICAgIGlmIChjb25zdCBjaGFyKiB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7Ci0gICAgICBjbVRhcmdldENoZWNrTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTKHByb3AsIHZhbHVlLCBjb250ZXh0LCB0cnVlKTsKKyAgICBpZiAoY21Qcm9wIHZhbHVlID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCkpIHsKKyAgICAgIGNtVGFyZ2V0Q2hlY2tMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMocHJvcCwgKnZhbHVlLCBjb250ZXh0LCB0cnVlKTsKICAgICB9CiAgIH0KICAgaWYgKHByb3AgPT0gIklOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyIpIHsKLSAgICBpZiAoY29uc3QgY2hhciogdmFsdWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShwcm9wKSkgewotICAgICAgY21UYXJnZXRDaGVja0lOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyh2YWx1ZSwgY29udGV4dCk7CisgICAgaWYgKGNtUHJvcCB2YWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KHByb3ApKSB7CisgICAgICBjbVRhcmdldENoZWNrSU5URVJGQUNFX0xJTktfTElCUkFSSUVTKCp2YWx1ZSwgY29udGV4dCk7CiAgICAgfQogICB9CiAgIGlmIChwcm9wID09ICJJTVBPUlRFRF9HTE9CQUwiKSB7CkBAIC0xNTk4LDE2ICsxNjU4LDIxIEBACiAgIH0KIH0KIAotY29uc3QgY2hhciogY21UYXJnZXQ6OkdldENvbXB1dGVkUHJvcGVydHkoCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAotICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KSBjb25zdAorY21Qcm9wIGNtVGFyZ2V0OjpHZXRDb21wdXRlZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCkgY29uc3QKIHsKICAgcmV0dXJuIGNtVGFyZ2V0UHJvcGVydHlDb21wdXRlcjo6R2V0UHJvcGVydHkodGhpcywgcHJvcCwgbWVzc2VuZ2VyLCBjb250ZXh0KTsKIH0KIAotY29uc3QgY2hhciogY21UYXJnZXQ6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAorY21Qcm9wIGNtVGFyZ2V0OjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKIHsKICNkZWZpbmUgTUFLRV9TVEFUSUNfUFJPUChQUk9QKSBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgcHJvcCMjUFJPUCA9ICNQUk9QCisgIE1BS0VfU1RBVElDX1BST1AoQ19TVEFOREFSRCk7CisgIE1BS0VfU1RBVElDX1BST1AoQ1hYX1NUQU5EQVJEKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChDVURBX1NUQU5EQVJEKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChPQkpDX1NUQU5EQVJEKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChPQkpDWFhfU1RBTkRBUkQpOwogICBNQUtFX1NUQVRJQ19QUk9QKExJTktfTElCUkFSSUVTKTsKICAgTUFLRV9TVEFUSUNfUFJPUChUWVBFKTsKICAgTUFLRV9TVEFUSUNfUFJPUChJTkNMVURFX0RJUkVDVE9SSUVTKTsKQEAgLTE2MjQsOCArMTY4OSwxNSBAQAogICBNQUtFX1NUQVRJQ19QUk9QKEJJTkFSWV9ESVIpOwogICBNQUtFX1NUQVRJQ19QUk9QKFNPVVJDRV9ESVIpOwogICBNQUtFX1NUQVRJQ19QUk9QKFNPVVJDRVMpOworICBNQUtFX1NUQVRJQ19QUk9QKEZBTFNFKTsKKyAgTUFLRV9TVEFUSUNfUFJPUChUUlVFKTsKICN1bmRlZiBNQUtFX1NUQVRJQ19QUk9QCiAgIHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+IGNvbnN0IHNwZWNpYWxQcm9wc3sKKyAgICBwcm9wQ19TVEFOREFSRCwKKyAgICBwcm9wQ1hYX1NUQU5EQVJELAorICAgIHByb3BDVURBX1NUQU5EQVJELAorICAgIHByb3BPQkpDX1NUQU5EQVJELAorICAgIHByb3BPQkpDWFhfU1RBTkRBUkQsCiAgICAgcHJvcExJTktfTElCUkFSSUVTLAogICAgIHByb3BUWVBFLAogICAgIHByb3BJTkNMVURFX0RJUkVDVE9SSUVTLApAQCAtMTY0NCw2ICsxNzE2LDE1IEBACiAgICAgcHJvcFNPVVJDRVMKICAgfTsKICAgaWYgKHNwZWNpYWxQcm9wcy5jb3VudChwcm9wKSkgeworICAgIGlmIChwcm9wID09IHByb3BDX1NUQU5EQVJEIHx8IHByb3AgPT0gcHJvcENYWF9TVEFOREFSRCB8fAorICAgICAgICBwcm9wID09IHByb3BDVURBX1NUQU5EQVJEIHx8IHByb3AgPT0gcHJvcE9CSkNfU1RBTkRBUkQgfHwKKyAgICAgICAgcHJvcCA9PSBwcm9wT0JKQ1hYX1NUQU5EQVJEKSB7CisgICAgICBhdXRvIHByb3BlcnR5SXRlciA9IGltcGwtPkxhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0aWVzLmZpbmQocHJvcCk7CisgICAgICBpZiAocHJvcGVydHlJdGVyID09IGltcGwtPkxhbmd1YWdlU3RhbmRhcmRQcm9wZXJ0aWVzLmVuZCgpKSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgfQorICAgICAgcmV0dXJuICYocHJvcGVydHlJdGVyLT5zZWNvbmQuVmFsdWUpOworICAgIH0KICAgICBpZiAocHJvcCA9PSBwcm9wTElOS19MSUJSQVJJRVMpIHsKICAgICAgIGlmIChpbXBsLT5MaW5rSW1wbGVtZW50YXRpb25Qcm9wZXJ0eUVudHJpZXMuZW1wdHkoKSkgewogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE2NTEsMTEgKzE3MzIsMTEgQEAKIAogICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgICAgIG91dHB1dCA9IGNtSm9pbihpbXBsLT5MaW5rSW1wbGVtZW50YXRpb25Qcm9wZXJ0eUVudHJpZXMsICI7Iik7Ci0gICAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgICByZXR1cm4gJm91dHB1dDsKICAgICB9CiAgICAgLy8gdGhlIHR5cGUgcHJvcGVydHkgcmV0dXJucyB3aGF0IHR5cGUgdGhlIHRhcmdldCBpcwogICAgIGlmIChwcm9wID09IHByb3BUWVBFKSB7Ci0gICAgICByZXR1cm4gY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0VHlwZSgpKTsKKyAgICAgIHJldHVybiAmY21TdGF0ZTo6R2V0VGFyZ2V0VHlwZU5hbWUodGhpcy0+R2V0VHlwZSgpKTsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcElOQ0xVREVfRElSRUNUT1JJRVMpIHsKICAgICAgIGlmIChpbXBsLT5JbmNsdWRlRGlyZWN0b3JpZXNFbnRyaWVzLmVtcHR5KCkpIHsKQEAgLTE2NjQsNyArMTc0NSw3IEBACiAKICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgICBvdXRwdXQgPSBjbUpvaW4oaW1wbC0+SW5jbHVkZURpcmVjdG9yaWVzRW50cmllcywgIjsiKTsKLSAgICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICAgIHJldHVybiAmb3V0cHV0OwogICAgIH0KICAgICBpZiAocHJvcCA9PSBwcm9wQ09NUElMRV9GRUFUVVJFUykgewogICAgICAgaWYgKGltcGwtPkNvbXBpbGVGZWF0dXJlc0VudHJpZXMuZW1wdHkoKSkgewpAQCAtMTY3Myw3ICsxNzU0LDcgQEAKIAogICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgICAgIG91dHB1dCA9IGNtSm9pbihpbXBsLT5Db21waWxlRmVhdHVyZXNFbnRyaWVzLCAiOyIpOwotICAgICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgICAgcmV0dXJuICZvdXRwdXQ7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BDT01QSUxFX09QVElPTlMpIHsKICAgICAgIGlmIChpbXBsLT5Db21waWxlT3B0aW9uc0VudHJpZXMuZW1wdHkoKSkgewpAQCAtMTY4Miw3ICsxNzYzLDcgQEAKIAogICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgICAgIG91dHB1dCA9IGNtSm9pbihpbXBsLT5Db21waWxlT3B0aW9uc0VudHJpZXMsICI7Iik7Ci0gICAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgICByZXR1cm4gJm91dHB1dDsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcENPTVBJTEVfREVGSU5JVElPTlMpIHsKICAgICAgIGlmIChpbXBsLT5Db21waWxlRGVmaW5pdGlvbnNFbnRyaWVzLmVtcHR5KCkpIHsKQEAgLTE2OTEsNyArMTc3Miw3IEBACiAKICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgICBvdXRwdXQgPSBjbUpvaW4oaW1wbC0+Q29tcGlsZURlZmluaXRpb25zRW50cmllcywgIjsiKTsKLSAgICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICAgIHJldHVybiAmb3V0cHV0OwogICAgIH0KICAgICBpZiAocHJvcCA9PSBwcm9wTElOS19PUFRJT05TKSB7CiAgICAgICBpZiAoaW1wbC0+TGlua09wdGlvbnNFbnRyaWVzLmVtcHR5KCkpIHsKQEAgLTE3MDAsNyArMTc4MSw3IEBACiAKICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICAgICBvdXRwdXQgPSBjbUpvaW4oaW1wbC0+TGlua09wdGlvbnNFbnRyaWVzLCAiOyIpOwotICAgICAgcmV0dXJuIG91dHB1dC5jX3N0cigpOworICAgICAgcmV0dXJuICZvdXRwdXQ7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BMSU5LX0RJUkVDVE9SSUVTKSB7CiAgICAgICBpZiAoaW1wbC0+TGlua0RpcmVjdG9yaWVzRW50cmllcy5lbXB0eSgpKSB7CkBAIC0xNzEwLDcgKzE3OTEsNyBAQAogICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIG91dHB1dDsKICAgICAgIG91dHB1dCA9IGNtSm9pbihpbXBsLT5MaW5rRGlyZWN0b3JpZXNFbnRyaWVzLCAiOyIpOwogCi0gICAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgICByZXR1cm4gJm91dHB1dDsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcE1BTlVBTExZX0FEREVEX0RFUEVOREVOQ0lFUykgewogICAgICAgaWYgKGltcGwtPlV0aWxpdGllcy5lbXB0eSgpKSB7CkBAIC0xNzE4LDggKzE3OTksMTUgQEAKICAgICAgIH0KIAogICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIG91dHB1dDsKLSAgICAgIG91dHB1dCA9IGNtSm9pbihpbXBsLT5VdGlsaXRpZXMsICI7Iik7Ci0gICAgICByZXR1cm4gb3V0cHV0LmNfc3RyKCk7CisgICAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHV0aWxpdGllczsKKyAgICAgIHV0aWxpdGllcy5yZXNpemUoaW1wbC0+VXRpbGl0aWVzLnNpemUoKSk7CisgICAgICBzdGQ6OnRyYW5zZm9ybSgKKyAgICAgICAgaW1wbC0+VXRpbGl0aWVzLmNiZWdpbigpLCBpbXBsLT5VdGlsaXRpZXMuY2VuZCgpLCB1dGlsaXRpZXMuYmVnaW4oKSwKKyAgICAgICAgW10oY29uc3QgQlQ8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBib29sPj4mIGl0ZW0pIC0+IHN0ZDo6c3RyaW5nIHsKKyAgICAgICAgICByZXR1cm4gaXRlbS5WYWx1ZS5maXJzdDsKKyAgICAgICAgfSk7CisgICAgICBvdXRwdXQgPSBjbUpvaW4odXRpbGl0aWVzLCAiOyIpOworICAgICAgcmV0dXJuICZvdXRwdXQ7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BQUkVDT01QSUxFX0hFQURFUlMpIHsKICAgICAgIGlmIChpbXBsLT5QcmVjb21waWxlSGVhZGVyc0VudHJpZXMuZW1wdHkoKSkgewpAQCAtMTcyOCwzMiArMTgxNiwzMCBAQAogCiAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgb3V0cHV0OwogICAgICAgb3V0cHV0ID0gY21Kb2luKGltcGwtPlByZWNvbXBpbGVIZWFkZXJzRW50cmllcywgIjsiKTsKLSAgICAgIHJldHVybiBvdXRwdXQuY19zdHIoKTsKKyAgICAgIHJldHVybiAmb3V0cHV0OwogICAgIH0KICAgICBpZiAocHJvcCA9PSBwcm9wSU1QT1JURUQpIHsKLSAgICAgIHJldHVybiB0aGlzLT5Jc0ltcG9ydGVkKCkgPyAiVFJVRSIgOiAiRkFMU0UiOworICAgICAgcmV0dXJuIHRoaXMtPklzSW1wb3J0ZWQoKSA/ICZwcm9wVFJVRSA6ICZwcm9wRkFMU0U7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BJTVBPUlRFRF9HTE9CQUwpIHsKLSAgICAgIHJldHVybiB0aGlzLT5Jc0ltcG9ydGVkR2xvYmFsbHlWaXNpYmxlKCkgPyAiVFJVRSIgOiAiRkFMU0UiOworICAgICAgcmV0dXJuIHRoaXMtPklzSW1wb3J0ZWRHbG9iYWxseVZpc2libGUoKSA/ICZwcm9wVFJVRSA6ICZwcm9wRkFMU0U7CiAgICAgfQogICAgIGlmIChwcm9wID09IHByb3BOQU1FKSB7Ci0gICAgICByZXR1cm4gdGhpcy0+R2V0TmFtZSgpLmNfc3RyKCk7CisgICAgICByZXR1cm4gJnRoaXMtPkdldE5hbWUoKTsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcEJJTkFSWV9ESVIpIHsKLSAgICAgIHJldHVybiBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpCi0gICAgICAgIC5HZXREaXJlY3RvcnkoKQotICAgICAgICAuR2V0Q3VycmVudEJpbmFyeSgpCi0gICAgICAgIC5jX3N0cigpOworICAgICAgcmV0dXJuICZpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpCisgICAgICAgICAgICAgICAgLkdldERpcmVjdG9yeSgpCisgICAgICAgICAgICAgICAgLkdldEN1cnJlbnRCaW5hcnkoKTsKICAgICB9CiAgICAgaWYgKHByb3AgPT0gcHJvcFNPVVJDRV9ESVIpIHsKLSAgICAgIHJldHVybiBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpCi0gICAgICAgIC5HZXREaXJlY3RvcnkoKQotICAgICAgICAuR2V0Q3VycmVudFNvdXJjZSgpCi0gICAgICAgIC5jX3N0cigpOworICAgICAgcmV0dXJuICZpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpCisgICAgICAgICAgICAgICAgLkdldERpcmVjdG9yeSgpCisgICAgICAgICAgICAgICAgLkdldEN1cnJlbnRTb3VyY2UoKTsKICAgICB9CiAgIH0KIAotICBjb25zdCBjaGFyKiByZXRWYWwgPSBpbXBsLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CisgIGNtUHJvcCByZXRWYWwgPSBpbXBsLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgIGlmICghcmV0VmFsKSB7CiAgICAgY29uc3QgYm9vbCBjaGFpbiA9CiAgICAgICBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+SXNQcm9wZXJ0eUNoYWluZWQocHJvcCwgY21Qcm9wZXJ0eTo6VEFSR0VUKTsKQEAgLTE3NjEsMTcgKzE4NDcsMjAgQEAKICAgICAgIHJldHVybiBpbXBsLT5NYWtlZmlsZS0+R2V0U3RhdGVTbmFwc2hvdCgpLkdldERpcmVjdG9yeSgpLkdldFByb3BlcnR5KAogICAgICAgICBwcm9wLCBjaGFpbik7CiAgICAgfQorICAgIHJldHVybiBudWxscHRyOwogICB9CiAgIHJldHVybiByZXRWYWw7CiB9CiAKLWNvbnN0IGNoYXIqIGNtVGFyZ2V0OjpHZXRTYWZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CitzdGQ6OnN0cmluZyBjb25zdCYgY21UYXJnZXQ6OkdldFNhZmVQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCkgY29uc3QKIHsKLSAgY29uc3QgY2hhciogcmV0ID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7Ci0gIGlmICghcmV0KSB7Ci0gICAgcmV0dXJuICIiOworICBjbVByb3AgcmV0ID0gdGhpcy0+R2V0UHJvcGVydHkocHJvcCk7CisgIGlmIChyZXQpIHsKKyAgICByZXR1cm4gKnJldDsKICAgfQotICByZXR1cm4gcmV0OworCisgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb25zdCBzX2VtcHR5OworICByZXR1cm4gc19lbXB0eTsKIH0KIAogYm9vbCBjbVRhcmdldDo6R2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0CkBAIC0xODA0LDYgKzE4OTMsMzIgQEAKICAgcmV0dXJuIGltcGwtPkltcG9ydGVkR2xvYmFsbHlWaXNpYmxlOwogfQogCitib29sIGNtVGFyZ2V0OjpJc1BlckNvbmZpZygpIGNvbnN0Cit7CisgIHJldHVybiBpbXBsLT5QZXJDb25maWc7Cit9CisKK2Jvb2wgY21UYXJnZXQ6OkNhbkNvbXBpbGVTb3VyY2VzKCkgY29uc3QKK3sKKyAgaWYgKHRoaXMtPklzSW1wb3J0ZWQoKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBzd2l0Y2ggKHRoaXMtPkdldFR5cGUoKSkgeworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFOgorICAgIGNhc2UgY21TdGF0ZUVudW1zOjpTVEFUSUNfTElCUkFSWToKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlk6CisgICAgY2FzZSBjbVN0YXRlRW51bXM6Ok1PRFVMRV9MSUJSQVJZOgorICAgIGNhc2UgY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWToKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgY21TdGF0ZUVudW1zOjpVVElMSVRZOgorICAgIGNhc2UgY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWToKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6R0xPQkFMX1RBUkdFVDoKKyAgICBjYXNlIGNtU3RhdGVFbnVtczo6VU5LTk9XTl9MSUJSQVJZOgorICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCiBjb25zdCBjaGFyKiBjbVRhcmdldDo6R2V0U3VmZml4VmFyaWFibGVJbnRlcm5hbCgKICAgY21TdGF0ZUVudW1zOjpBcnRpZmFjdFR5cGUgYXJ0aWZhY3QpIGNvbnN0CiB7CkBAIC0xODMxLDcgKzE5NDYsNyBAQAogICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0OgogICAgICAgICAgIC8vIEFuZHJvaWQgR1VJIGFwcGxpY2F0aW9uIHBhY2thZ2VzIHN0b3JlIHRoZSBuYXRpdmUKICAgICAgICAgICAvLyBiaW5hcnkgYXMgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgICAgICByZXR1cm4gKGltcGwtPklzQW5kcm9pZCAmJiB0aGlzLT5HZXRQcm9wZXJ0eUFzQm9vbCgiQU5EUk9JRF9HVUkiKQorICAgICAgICAgIHJldHVybiAodGhpcy0+SXNBbmRyb2lkR3VpRXhlY3V0YWJsZSgpCiAgICAgICAgICAgICAgICAgICAgID8gIkNNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWCIKICAgICAgICAgICAgICAgICAgICAgOiAiQ01BS0VfRVhFQ1VUQUJMRV9TVUZGSVgiKTsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdDoKQEAgLTE4NzIsNyArMTk4Nyw3IEBACiAgICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3Q6CiAgICAgICAgICAgLy8gQW5kcm9pZCBHVUkgYXBwbGljYXRpb24gcGFja2FnZXMgc3RvcmUgdGhlIG5hdGl2ZQogICAgICAgICAgIC8vIGJpbmFyeSBhcyBhIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgICAgIHJldHVybiAoaW1wbC0+SXNBbmRyb2lkICYmIHRoaXMtPkdldFByb3BlcnR5QXNCb29sKCJBTkRST0lEX0dVSSIpCisgICAgICAgICAgcmV0dXJuICh0aGlzLT5Jc0FuZHJvaWRHdWlFeGVjdXRhYmxlKCkKICAgICAgICAgICAgICAgICAgICAgPyAiQ01BS0VfU0hBUkVEX0xJQlJBUllfUFJFRklYIgogICAgICAgICAgICAgICAgICAgICA6ICIiKTsKICAgICAgICAgY2FzZSBjbVN0YXRlRW51bXM6OkltcG9ydExpYnJhcnlBcnRpZmFjdDoKQEAgLTE5MDAsMzggKzIwMTUsMzcgQEAKIAogICBzdGQ6OnN0cmluZyByZXN1bHQ7CiAKLSAgY29uc3QgY2hhciogbG9jID0gbnVsbHB0cjsKLSAgY29uc3QgY2hhciogaW1wID0gbnVsbHB0cjsKKyAgY21Qcm9wIGxvYyA9IG51bGxwdHI7CisgIGNtUHJvcCBpbXAgPSBudWxscHRyOwogICBzdGQ6OnN0cmluZyBzdWZmaXg7CiAKICAgaWYgKHRoaXMtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZICYmCi0gICAgICB0aGlzLT5HZXRNYXBwZWRDb25maWcoZGVzaXJlZF9jb25maWcsICZsb2MsICZpbXAsIHN1ZmZpeCkpIHsKKyAgICAgIHRoaXMtPkdldE1hcHBlZENvbmZpZyhkZXNpcmVkX2NvbmZpZywgbG9jLCBpbXAsIHN1ZmZpeCkpIHsKICAgICBzd2l0Y2ggKGFydGlmYWN0KSB7CiAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6UnVudGltZUJpbmFyeUFydGlmYWN0OgogICAgICAgICBpZiAobG9jKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gbG9jOworICAgICAgICAgIHJlc3VsdCA9ICpsb2M7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgc3RkOjpzdHJpbmcgaW1wUHJvcCA9IGNtU3RyQ2F0KCJJTVBPUlRFRF9MT0NBVElPTiIsIHN1ZmZpeCk7Ci0gICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19sb2NhdGlvbiA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjb25maWdfbG9jYXRpb247Ci0gICAgICAgICAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiBsb2NhdGlvbiA9CisgICAgICAgICAgaWYgKGNtUHJvcCBjb25maWdfbG9jYXRpb24gPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gKmNvbmZpZ19sb2NhdGlvbjsKKyAgICAgICAgICB9IGVsc2UgaWYgKGNtUHJvcCBsb2NhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9MT0NBVElPTiIpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBsb2NhdGlvbjsKKyAgICAgICAgICAgIHJlc3VsdCA9ICpsb2NhdGlvbjsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgY21TdGF0ZUVudW1zOjpJbXBvcnRMaWJyYXJ5QXJ0aWZhY3Q6CiAgICAgICAgIGlmIChpbXApIHsKLSAgICAgICAgICByZXN1bHQgPSBpbXA7CisgICAgICAgICAgcmVzdWx0ID0gKmltcDsKICAgICAgICAgfSBlbHNlIGlmICh0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSB8fAogICAgICAgICAgICAgICAgICAgIHRoaXMtPklzRXhlY3V0YWJsZVdpdGhFeHBvcnRzKCkpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBpbXBQcm9wID0gY21TdHJDYXQoIklNUE9SVEVEX0lNUExJQiIsIHN1ZmZpeCk7Ci0gICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGNvbmZpZ19pbXBsaWIgPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gY29uZmlnX2ltcGxpYjsKLSAgICAgICAgICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIGltcGxpYiA9Ci0gICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9JTVBMSUIiKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gaW1wbGliOworICAgICAgICAgIGlmIChjbVByb3AgY29uZmlnX2ltcGxpYiA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApKSB7CisgICAgICAgICAgICByZXN1bHQgPSAqY29uZmlnX2ltcGxpYjsKKyAgICAgICAgICB9IGVsc2UgaWYgKGNtUHJvcCBpbXBsaWIgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfSU1QTElCIikpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9ICppbXBsaWI7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTk3NCw5ICsyMDg4LDggQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgY21UYXJnZXQ6OkdldE1hcHBlZENvbmZpZyhzdGQ6OnN0cmluZyBjb25zdCYgZGVzaXJlZF9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIGxvYywgY29uc3QgY2hhcioqIGltcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgc3VmZml4KSBjb25zdAorYm9vbCBjbVRhcmdldDo6R2V0TWFwcGVkQ29uZmlnKHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXNpcmVkX2NvbmZpZywgY21Qcm9wJiBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wJiBpbXAsIHN0ZDo6c3RyaW5nJiBzdWZmaXgpIGNvbnN0CiB7CiAgIHN0ZDo6c3RyaW5nIGNvbmZpZ191cHBlcjsKICAgaWYgKCFkZXNpcmVkX2NvbmZpZy5lbXB0eSgpKSB7CkBAIC0xOTk4LDggKzIxMTEsOCBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbWFwcGVkQ29uZmlnczsKICAgewogICAgIHN0ZDo6c3RyaW5nIG1hcFByb3AgPSBjbVN0ckNhdCgiTUFQX0lNUE9SVEVEX0NPTkZJR18iLCBjb25maWdfdXBwZXIpOwotICAgIGlmIChjb25zdCBjaGFyKiBtYXBWYWx1ZSA9IHRoaXMtPkdldFByb3BlcnR5KG1hcFByb3ApKSB7Ci0gICAgICBjbUV4cGFuZExpc3QobWFwVmFsdWUsIG1hcHBlZENvbmZpZ3MsIHRydWUpOworICAgIGlmIChjbVByb3AgbWFwVmFsdWUgPSB0aGlzLT5HZXRQcm9wZXJ0eShtYXBQcm9wKSkgeworICAgICAgY21FeHBhbmRMaXN0KCptYXBWYWx1ZSwgbWFwcGVkQ29uZmlncywgdHJ1ZSk7CiAgICAgfQogICB9CiAKQEAgLTIwMTMsMzAgKzIxMjYsMzAgQEAKIAogICAvLyBJZiBhIG1hcHBpbmcgd2FzIGZvdW5kLCBjaGVjayBpdHMgY29uZmlndXJhdGlvbnMuCiAgIGZvciAoYXV0byBtY2kgPSBtYXBwZWRDb25maWdzLmJlZ2luKCk7Ci0gICAgICAgISpsb2MgJiYgISppbXAgJiYgbWNpICE9IG1hcHBlZENvbmZpZ3MuZW5kKCk7ICsrbWNpKSB7CisgICAgICAgIWxvYyAmJiAhaW1wICYmIG1jaSAhPSBtYXBwZWRDb25maWdzLmVuZCgpOyArK21jaSkgewogICAgIC8vIExvb2sgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KICAgICBpZiAobWNpLT5lbXB0eSgpKSB7CiAgICAgICAvLyBBbiBlbXB0eSBzdHJpbmcgaW4gdGhlIG1hcHBpbmcgaGFzIGEgc3BlY2lhbCBtZWFuaW5nOgogICAgICAgLy8gbG9vayB1cCB0aGUgY29uZmlnLWxlc3MgcHJvcGVydGllcy4KLSAgICAgICpsb2MgPSB0aGlzLT5HZXRQcm9wZXJ0eShsb2NQcm9wQmFzZSk7CisgICAgICBsb2MgPSB0aGlzLT5HZXRQcm9wZXJ0eShsb2NQcm9wQmFzZSk7CiAgICAgICBpZiAoYWxsb3dJbXApIHsKLSAgICAgICAgKmltcCA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9JTVBMSUIiKTsKKyAgICAgICAgaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoIklNUE9SVEVEX0lNUExJQiIpOwogICAgICAgfQogICAgICAgLy8gSWYgaXQgd2FzIGZvdW5kLCBzZXQgdGhlIHN1ZmZpeC4KLSAgICAgIGlmICgqbG9jIHx8ICppbXApIHsKKyAgICAgIGlmIChsb2MgfHwgaW1wKSB7CiAgICAgICAgIHN1ZmZpeC5jbGVhcigpOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBzdGQ6OnN0cmluZyBtY1VwcGVyID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKCptY2kpOwogICAgICAgc3RkOjpzdHJpbmcgbG9jUHJvcCA9IGNtU3RyQ2F0KGxvY1Byb3BCYXNlLCAnXycsIG1jVXBwZXIpOwotICAgICAgKmxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3ApOworICAgICAgbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcCk7CiAgICAgICBpZiAoYWxsb3dJbXApIHsKICAgICAgICAgc3RkOjpzdHJpbmcgaW1wUHJvcCA9IGNtU3RyQ2F0KCJJTVBPUlRFRF9JTVBMSUJfIiwgbWNVcHBlcik7Ci0gICAgICAgICppbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKTsKKyAgICAgICAgaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCk7CiAgICAgICB9CiAKICAgICAgIC8vIElmIGl0IHdhcyBmb3VuZCwgdXNlIGl0IGZvciBhbGwgcHJvcGVydGllcyBiZWxvdy4KLSAgICAgIGlmICgqbG9jIHx8ICppbXApIHsKKyAgICAgIGlmIChsb2MgfHwgaW1wKSB7CiAgICAgICAgIHN1ZmZpeCA9IGNtU3RyQ2F0KCdfJywgbWNVcHBlcik7CiAgICAgICB9CiAgICAgfQpAQCAtMjA0NSw1OSArMjE1OCw1OSBAQAogICAvLyBJZiB3ZSBuZWVkZWQgdG8gZmluZCBvbmUgb2YgdGhlIG1hcHBlZCBjb25maWd1cmF0aW9ucyBidXQgZGlkIG5vdAogICAvLyB0aGVuIHRoZSB0YXJnZXQgbG9jYXRpb24gaXMgbm90IGZvdW5kLiAgVGhlIHByb2plY3QgZG9lcyBub3Qgd2FudAogICAvLyBhbnkgb3RoZXIgY29uZmlndXJhdGlvbi4KLSAgaWYgKCFtYXBwZWRDb25maWdzLmVtcHR5KCkgJiYgISpsb2MgJiYgISppbXApIHsKKyAgaWYgKCFtYXBwZWRDb25maWdzLmVtcHR5KCkgJiYgIWxvYyAmJiAhaW1wKSB7CiAgICAgLy8gSW50ZXJmYWNlIGxpYnJhcmllcyBhcmUgYWx3YXlzIGF2YWlsYWJsZSBiZWNhdXNlIHRoZWlyCi0gICAgLy8gbGlicmFyeSBuYW1lIGlzIG9wdGlvbmFsIHNvIGl0IGlzIG9rYXkgdG8gbGVhdmUgKmxvYyBlbXB0eS4KKyAgICAvLyBsaWJyYXJ5IG5hbWUgaXMgb3B0aW9uYWwgc28gaXQgaXMgb2theSB0byBsZWF2ZSBsb2MgZW1wdHkuCiAgICAgcmV0dXJuIHRoaXMtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZOwogICB9CiAKICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0IGZvdW5kIGl0IHRoZW4gdGhlcmUgYXJlIG5vIG1hcHBlZAogICAvLyBjb25maWd1cmF0aW9ucy4gIExvb2sgZm9yIGFuIGV4YWN0LW1hdGNoLgotICBpZiAoISpsb2MgJiYgISppbXApIHsKKyAgaWYgKCFsb2MgJiYgIWltcCkgewogICAgIHN0ZDo6c3RyaW5nIGxvY1Byb3AgPSBjbVN0ckNhdChsb2NQcm9wQmFzZSwgc3VmZml4KTsKLSAgICAqbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcCk7CisgICAgbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcCk7CiAgICAgaWYgKGFsbG93SW1wKSB7CiAgICAgICBzdGQ6OnN0cmluZyBpbXBQcm9wID0gY21TdHJDYXQoIklNUE9SVEVEX0lNUExJQiIsIHN1ZmZpeCk7Ci0gICAgICAqaW1wID0gdGhpcy0+R2V0UHJvcGVydHkoaW1wUHJvcCk7CisgICAgICBpbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKTsKICAgICB9CiAgIH0KIAogICAvLyBJZiB3ZSBoYXZlIG5vdCB5ZXQgZm91bmQgaXQgdGhlbiB0aGVyZSBhcmUgbm8gbWFwcGVkCiAgIC8vIGNvbmZpZ3VyYXRpb25zIGFuZCBubyBleGFjdCBtYXRjaC4KLSAgaWYgKCEqbG9jICYmICEqaW1wKSB7CisgIGlmICghbG9jICYmICFpbXApIHsKICAgICAvLyBUaGUgc3VmZml4IGNvbXB1dGVkIGFib3ZlIGlzIG5vdCB1c2VmdWwuCiAgICAgc3VmZml4LmNsZWFyKCk7CiAKICAgICAvLyBMb29rIGZvciBhIGNvbmZpZ3VyYXRpb24tbGVzcyBsb2NhdGlvbi4gIFRoaXMgbWF5IGJlIHNldCBieQogICAgIC8vIG1hbnVhbGx5LXdyaXR0ZW4gY29kZS4KLSAgICAqbG9jID0gdGhpcy0+R2V0UHJvcGVydHkobG9jUHJvcEJhc2UpOworICAgIGxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3BCYXNlKTsKICAgICBpZiAoYWxsb3dJbXApIHsKLSAgICAgICppbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfSU1QTElCIik7CisgICAgICBpbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfSU1QTElCIik7CiAgICAgfQogICB9CiAKICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0IGZvdW5kIGl0IHRoZW4gdGhlIHByb2plY3QgaXMgd2lsbGluZyB0byB0cnkKICAgLy8gYW55IGF2YWlsYWJsZSBjb25maWd1cmF0aW9uLgotICBpZiAoISpsb2MgJiYgISppbXApIHsKKyAgaWYgKCFsb2MgJiYgIWltcCkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdmFpbGFibGVDb25maWdzOwotICAgIGlmIChjb25zdCBjaGFyKiBpY29uZmlncyA9IHRoaXMtPkdldFByb3BlcnR5KCJJTVBPUlRFRF9DT05GSUdVUkFUSU9OUyIpKSB7Ci0gICAgICBjbUV4cGFuZExpc3QoaWNvbmZpZ3MsIGF2YWlsYWJsZUNvbmZpZ3MpOworICAgIGlmIChjbVByb3AgaWNvbmZpZ3MgPSB0aGlzLT5HZXRQcm9wZXJ0eSgiSU1QT1JURURfQ09ORklHVVJBVElPTlMiKSkgeworICAgICAgY21FeHBhbmRMaXN0KCppY29uZmlncywgYXZhaWxhYmxlQ29uZmlncyk7CiAgICAgfQogICAgIGZvciAoYXV0byBhY2kgPSBhdmFpbGFibGVDb25maWdzLmJlZ2luKCk7Ci0gICAgICAgICAhKmxvYyAmJiAhKmltcCAmJiBhY2kgIT0gYXZhaWxhYmxlQ29uZmlncy5lbmQoKTsgKythY2kpIHsKKyAgICAgICAgICFsb2MgJiYgIWltcCAmJiBhY2kgIT0gYXZhaWxhYmxlQ29uZmlncy5lbmQoKTsgKythY2kpIHsKICAgICAgIHN1ZmZpeCA9IGNtU3RyQ2F0KCdfJywgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKCphY2kpKTsKICAgICAgIHN0ZDo6c3RyaW5nIGxvY1Byb3AgPSBjbVN0ckNhdChsb2NQcm9wQmFzZSwgc3VmZml4KTsKLSAgICAgICpsb2MgPSB0aGlzLT5HZXRQcm9wZXJ0eShsb2NQcm9wKTsKKyAgICAgIGxvYyA9IHRoaXMtPkdldFByb3BlcnR5KGxvY1Byb3ApOwogICAgICAgaWYgKGFsbG93SW1wKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGltcFByb3AgPSBjbVN0ckNhdCgiSU1QT1JURURfSU1QTElCIiwgc3VmZml4KTsKLSAgICAgICAgKmltcCA9IHRoaXMtPkdldFByb3BlcnR5KGltcFByb3ApOworICAgICAgICBpbXAgPSB0aGlzLT5HZXRQcm9wZXJ0eShpbXBQcm9wKTsKICAgICAgIH0KICAgICB9CiAgIH0KICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0IGZvdW5kIGl0IHRoZW4gdGhlIHRhcmdldCBsb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlLgotICBpZiAoISpsb2MgJiYgISppbXApIHsKKyAgaWYgKCFsb2MgJiYgIWltcCkgewogICAgIC8vIEludGVyZmFjZSBsaWJyYXJpZXMgYXJlIGFsd2F5cyBhdmFpbGFibGUgYmVjYXVzZSB0aGVpcgotICAgIC8vIGxpYnJhcnkgbmFtZSBpcyBvcHRpb25hbCBzbyBpdCBpcyBva2F5IHRvIGxlYXZlICpsb2MgZW1wdHkuCisgICAgLy8gbGlicmFyeSBuYW1lIGlzIG9wdGlvbmFsIHNvIGl0IGlzIG9rYXkgdG8gbGVhdmUgbG9jIGVtcHR5LgogICAgIHJldHVybiB0aGlzLT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWTsKICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UYXJnZXQuaCBiL1NvdXJjZS9jbVRhcmdldC5oCmluZGV4IDY1YTFjZTMuLjQzZjE4ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRhcmdldC5oCisrKyBiL1NvdXJjZS9jbVRhcmdldC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21MaXN0RmlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgorI2luY2x1ZGUgImNtUHJvcGVydHkuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVRhcmdldExpbmtMaWJyYXJ5VHlwZS5oIgpAQCAtNDMsOCArNDQsMTQgQEAKICAgICBWaXNpYmlsaXR5SW1wb3J0ZWRHbG9iYWxseQogICB9OwogCisgIGVudW0gY2xhc3MgUGVyQ29uZmlnCisgIHsKKyAgICBZZXMsCisgICAgTm8KKyAgfTsKKwogICBjbVRhcmdldChzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY21TdGF0ZUVudW1zOjpUYXJnZXRUeXBlIHR5cGUsCi0gICAgICAgICAgIFZpc2liaWxpdHkgdmlzLCBjbU1ha2VmaWxlKiBtZik7CisgICAgICAgICAgIFZpc2liaWxpdHkgdmlzLCBjbU1ha2VmaWxlKiBtZiwgUGVyQ29uZmlnIHBlckNvbmZpZyk7CiAKICAgY21UYXJnZXQoY21UYXJnZXQgY29uc3QmKSA9IGRlbGV0ZTsKICAgY21UYXJnZXQoY21UYXJnZXQmJikgbm9leGNlcHQ7CkBAIC0xMTAsMTAgKzExNyw4IEBACiAgIC8vISBDbGVhciB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiByZWNvcmRlZCBmb3IgdGhpcyB0YXJnZXQsIGlmIGFueS4KICAgdm9pZCBDbGVhckRlcGVuZGVuY3lJbmZvcm1hdGlvbihjbU1ha2VmaWxlJiBtZik7CiAKLSAgdm9pZCBBZGRMaW5rTGlicmFyeShjbU1ha2VmaWxlJiBtZiwgY29uc3Qgc3RkOjpzdHJpbmcmIGxpYiwKLSAgICAgICAgICAgICAgICAgICAgICBjbVRhcmdldExpbmtMaWJyYXJ5VHlwZSBsbHQpOwogICB2b2lkIEFkZExpbmtMaWJyYXJ5KGNtTWFrZWZpbGUmIG1mLCBzdGQ6OnN0cmluZyBjb25zdCYgbGliLAotICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBsaWJSZWYsIGNtVGFyZ2V0TGlua0xpYnJhcnlUeXBlIGxsdCk7CisgICAgICAgICAgICAgICAgICAgICAgY21UYXJnZXRMaW5rTGlicmFyeVR5cGUgbGx0KTsKIAogICBlbnVtIFRMTFNpZ25hdHVyZQogICB7CkBAIC0xNTgsMjMgKzE2MywyNyBAQAogICAgKiBuYW1lIGFzIHdvdWxkIGJlIHNwZWNpZmllZCB0byB0aGUgQUREX0VYRUNVVEFCTEUgb3IgVVRJTElUWV9TT1VSQ0UKICAgICogY29tbWFuZHMuIEl0IGlzIG5vdCBhIGZ1bGwgcGF0aCBub3IgZG9lcyBpdCBoYXZlIGFuIGV4dGVuc2lvbi4KICAgICovCi0gIHZvaWQgQWRkVXRpbGl0eShzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwgY21NYWtlZmlsZSogbWYgPSBudWxscHRyKTsKKyAgdm9pZCBBZGRVdGlsaXR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLCBib29sIGNyb3NzLAorICAgICAgICAgICAgICAgICAgY21NYWtlZmlsZSogbWYgPSBudWxscHRyKTsKICAgLy8hIEdldCB0aGUgdXRpbGl0aWVzIHVzZWQgYnkgdGhpcyB0YXJnZXQKLSAgc3RkOjpzZXQ8QlQ8c3RkOjpzdHJpbmc+PiBjb25zdCYgR2V0VXRpbGl0aWVzKCkgY29uc3Q7CisgIHN0ZDo6c2V0PEJUPHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgYm9vbD4+PiBjb25zdCYgR2V0VXRpbGl0aWVzKCkgY29uc3Q7CiAKICAgLy8hIFNldC9HZXQgYSBwcm9wZXJ0eSBvZiB0aGlzIHRhcmdldCBmaWxlCiAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCisgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKKyAgeworICAgIFNldFByb3BlcnR5KHByb3AsIHZhbHVlLmNfc3RyKCkpOworICB9CisgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nID0gZmFsc2UpOwogICAvLyEgTWlnaHQgcmV0dXJuIGEgbnVsbHB0ciBpZiB0aGUgcHJvcGVydHkgaXMgbm90IHNldCBvciBpbnZhbGlkCi0gIGNvbnN0IGNoYXIqIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKKyAgY21Qcm9wIEdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKICAgLy8hIEFsd2F5cyByZXR1cm5zIGEgdmFsaWQgcG9pbnRlcgotICBjb25zdCBjaGFyKiBHZXRTYWZlUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OworICBzdGQ6OnN0cmluZyBjb25zdCYgR2V0U2FmZVByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wKSBjb25zdDsKICAgYm9vbCBHZXRQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3Q7CiAgIHZvaWQgQ2hlY2tQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY21NYWtlZmlsZSogY29udGV4dCkgY29uc3Q7Ci0gIGNvbnN0IGNoYXIqIEdldENvbXB1dGVkUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KSBjb25zdDsKKyAgY21Qcm9wIEdldENvbXB1dGVkUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpIGNvbnN0OwogICAvLyEgR2V0IGFsbCBwcm9wZXJ0aWVzCiAgIGNtUHJvcGVydHlNYXAgY29uc3QmIEdldFByb3BlcnRpZXMoKSBjb25zdDsKIApAQCAtMTg2LDkgKzE5NSwxMSBAQAogCiAgIGJvb2wgSXNJbXBvcnRlZCgpIGNvbnN0OwogICBib29sIElzSW1wb3J0ZWRHbG9iYWxseVZpc2libGUoKSBjb25zdDsKKyAgYm9vbCBJc1BlckNvbmZpZygpIGNvbnN0OworICBib29sIENhbkNvbXBpbGVTb3VyY2VzKCkgY29uc3Q7CiAKLSAgYm9vbCBHZXRNYXBwZWRDb25maWcoc3RkOjpzdHJpbmcgY29uc3QmIGRlc2lyZWRfY29uZmlnLCBjb25zdCBjaGFyKiogbG9jLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogaW1wLCBzdGQ6OnN0cmluZyYgc3VmZml4KSBjb25zdDsKKyAgYm9vbCBHZXRNYXBwZWRDb25maWcoc3RkOjpzdHJpbmcgY29uc3QmIGRlc2lyZWRfY29uZmlnLCBjbVByb3AmIGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgY21Qcm9wJiBpbXAsIHN0ZDo6c3RyaW5nJiBzdWZmaXgpIGNvbnN0OwogCiAgIC8vISBSZXR1cm4gd2hldGhlciB0aGlzIHRhcmdldCBpcyBhbiBleGVjdXRhYmxlIHdpdGggc3ltYm9sIGV4cG9ydHMgZW5hYmxlZC4KICAgYm9vbCBJc0V4ZWN1dGFibGVXaXRoRXhwb3J0cygpIGNvbnN0OwpAQCAtMTk5LDYgKzIxMCw5IEBACiAgIC8vISBSZXR1cm4gd2hldGhlciB0aGlzIHRhcmdldCBpcyBhbiBleGVjdXRhYmxlIEJ1bmRsZSBvbiBBcHBsZS4KICAgYm9vbCBJc0FwcEJ1bmRsZU9uQXBwbGUoKSBjb25zdDsKIAorICAvLyEgUmV0dXJuIHdoZXRoZXIgdGhpcyB0YXJnZXQgaXMgYSBHVUkgZXhlY3V0YWJsZSBvbiBBbmRyb2lkLgorICBib29sIElzQW5kcm9pZEd1aUV4ZWN1dGFibGUoKSBjb25zdDsKKwogICAvLyEgR2V0IGEgYmFja3RyYWNlIGZyb20gdGhlIGNyZWF0aW9uIG9mIHRoZSB0YXJnZXQuCiAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIEdldEJhY2t0cmFjZSgpIGNvbnN0OwogCkBAIC0yMjMsNiArMjM3LDEzIEBACiAgIHZvaWQgQWRkU3lzdGVtSW5jbHVkZURpcmVjdG9yaWVzKHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBjb25zdCYgaW5jcyk7CiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBjb25zdCYgR2V0U3lzdGVtSW5jbHVkZURpcmVjdG9yaWVzKCkgY29uc3Q7CiAKKyAgQlRzPHN0ZDo6c3RyaW5nPiBjb25zdCogR2V0TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5KAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OworCisgIHZvaWQgU2V0TGFuZ3VhZ2VTdGFuZGFyZFByb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBsYW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmZWF0dXJlKTsKKwogICBjbVN0cmluZ1JhbmdlIEdldEluY2x1ZGVEaXJlY3Rvcmllc0VudHJpZXMoKSBjb25zdDsKICAgY21CYWNrdHJhY2VSYW5nZSBHZXRJbmNsdWRlRGlyZWN0b3JpZXNCYWNrdHJhY2VzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldENvbXBpbGVEZWZpbml0aW9uc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtVGFyZ2V0Q29tcGlsZURlZmluaXRpb25zQ29tbWFuZC5jeHgKaW5kZXggZWRlZTE2Ny4uYjU2YjI0NSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0Q29tcGlsZURlZmluaXRpb25zQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtVGFyZ2V0Q29tcGlsZURlZmluaXRpb25zQ29tbWFuZC5jeHgKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypwcmVwZW5kKi8sIGJvb2wgLypzeXN0ZW0qLykgb3ZlcnJpZGUKICAgewotICAgIHRndC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiLCB0aGlzLT5Kb2luKGNvbnRlbnQpLmNfc3RyKCkpOworICAgIHRndC0+QXBwZW5kUHJvcGVydHkoIkNPTVBJTEVfREVGSU5JVElPTlMiLCB0aGlzLT5Kb2luKGNvbnRlbnQpKTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gU3VjY2Vzc2Z1bGx5IGhhbmRsZWQuCiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0Q29tcGlsZUZlYXR1cmVzQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21UYXJnZXRDb21waWxlRmVhdHVyZXNDb21tYW5kLmN4eAppbmRleCAwNmJlNGYwLi5hYTFhYmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXRDb21waWxlRmVhdHVyZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21UYXJnZXRDb21waWxlRmVhdHVyZXNDb21tYW5kLmN4eApAQCAtNCw2ICs0LDcgQEAKIAogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21TdGFuZGFyZExldmVsUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVRhcmdldFByb3BDb21tYW5kQmFzZS5oIgogCkBAIC0yOSw5ICszMCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKnByZXBlbmQqLywgYm9vbCAvKnN5c3RlbSovKSBvdmVycmlkZQogICB7CisgICAgY21TdGFuZGFyZExldmVsUmVzb2x2ZXIgc3RhbmRhcmRSZXNvbHZlcih0aGlzLT5NYWtlZmlsZSk7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaXQgOiBjb250ZW50KSB7CiAgICAgICBzdGQ6OnN0cmluZyBlcnJvcjsKLSAgICAgIGlmICghdGhpcy0+TWFrZWZpbGUtPkFkZFJlcXVpcmVkVGFyZ2V0RmVhdHVyZSh0Z3QsIGl0LCAmZXJyb3IpKSB7CisgICAgICBpZiAoIXN0YW5kYXJkUmVzb2x2ZXIuQWRkUmVxdWlyZWRUYXJnZXRGZWF0dXJlKHRndCwgaXQsICZlcnJvcikpIHsKICAgICAgICAgdGhpcy0+U2V0RXJyb3IoZXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCAoc3VjY2Vzc2Z1bGx5KSBoYW5kbGVkLgogICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0Q29tcGlsZU9wdGlvbnNDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVRhcmdldENvbXBpbGVPcHRpb25zQ29tbWFuZC5jeHgKaW5kZXggZTM5YjcyNi4uZGVlMmMxMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0Q29tcGlsZU9wdGlvbnNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21UYXJnZXRDb21waWxlT3B0aW9uc0NvbW1hbmQuY3h4CkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21Qb2xpY2llcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21UYXJnZXRQcm9wQ29tbWFuZEJhc2UuaCIKQEAgLTI3LDEwICsyOCwxNiBAQAogCiAgIGJvb2wgSGFuZGxlRGlyZWN0Q29udGVudChjbVRhcmdldCogdGd0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb250ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKnByZXBlbmQqLywgYm9vbCAvKnN5c3RlbSovKSBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVwZW5kLCBib29sIC8qc3lzdGVtKi8pIG92ZXJyaWRlCiAgIHsKKyAgICBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgcG9saWN5U3RhdHVzID0KKyAgICAgIHRoaXMtPk1ha2VmaWxlLT5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDEwMSk7CisgICAgaWYgKHBvbGljeVN0YXR1cyA9PSBjbVBvbGljaWVzOjpPTEQgfHwgcG9saWN5U3RhdHVzID09IGNtUG9saWNpZXM6OldBUk4pIHsKKyAgICAgIHByZXBlbmQgPSBmYWxzZTsKKyAgICB9CisKICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGxmYnQgPSB0aGlzLT5NYWtlZmlsZS0+R2V0QmFja3RyYWNlKCk7Ci0gICAgdGd0LT5JbnNlcnRDb21waWxlT3B0aW9uKHRoaXMtPkpvaW4oY29udGVudCksIGxmYnQpOworICAgIHRndC0+SW5zZXJ0Q29tcGlsZU9wdGlvbih0aGlzLT5Kb2luKGNvbnRlbnQpLCBsZmJ0LCBwcmVwZW5kKTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gU3VjY2Vzc2Z1bGx5IGhhbmRsZWQuCiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0RGVwZW5kLmggYi9Tb3VyY2UvY21UYXJnZXREZXBlbmQuaAppbmRleCA0Y2E3OGZhLi41NDUyY2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXREZXBlbmQuaAorKysgYi9Tb3VyY2UvY21UYXJnZXREZXBlbmQuaApAQCAtMTksNiArMTksNyBAQAogICAvLyBtdXRhYmxlIG1lbWJlcnMgdG8gYWNoaWV2ZSBhIG1hcCB3aXRoIHNldCBzeW50YXguCiAgIG11dGFibGUgYm9vbCBMaW5rOwogICBtdXRhYmxlIGJvb2wgVXRpbDsKKyAgbXV0YWJsZSBib29sIENyb3NzOwogICBtdXRhYmxlIGNtTGlzdEZpbGVCYWNrdHJhY2UgQmFja3RyYWNlOwogCiBwdWJsaWM6CkBAIC0yNiw2ICsyNyw3IEBACiAgICAgOiBUYXJnZXQodCkKICAgICAsIExpbmsoZmFsc2UpCiAgICAgLCBVdGlsKGZhbHNlKQorICAgICwgQ3Jvc3MoZmFsc2UpCiAgIHsKICAgfQogICBvcGVyYXRvciBjbUdlbmVyYXRvclRhcmdldCBjb25zdCooKSBjb25zdCB7IHJldHVybiB0aGlzLT5UYXJnZXQ7IH0KQEAgLTQzLDEyICs0NSwxNCBAQAogICAgICAgdGhpcy0+TGluayA9IHRydWU7CiAgICAgfQogICB9CisgIHZvaWQgU2V0Q3Jvc3MoYm9vbCBjcm9zcykgY29uc3QgeyB0aGlzLT5Dcm9zcyA9IGNyb3NzOyB9CiAgIHZvaWQgU2V0QmFja3RyYWNlKGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGJ0KSBjb25zdAogICB7CiAgICAgdGhpcy0+QmFja3RyYWNlID0gYnQ7CiAgIH0KICAgYm9vbCBJc0xpbmsoKSBjb25zdCB7IHJldHVybiB0aGlzLT5MaW5rOyB9CiAgIGJvb2wgSXNVdGlsKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VXRpbDsgfQorICBib29sIElzQ3Jvc3MoKSBjb25zdCB7IHJldHVybiB0aGlzLT5Dcm9zczsgfQogICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBHZXRCYWNrdHJhY2UoKSBjb25zdCB7IHJldHVybiB0aGlzLT5CYWNrdHJhY2U7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldEluY2x1ZGVEaXJlY3Rvcmllc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtVGFyZ2V0SW5jbHVkZURpcmVjdG9yaWVzQ29tbWFuZC5jeHgKaW5kZXggOTViNjlmMy4uMzU2MzViOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0SW5jbHVkZURpcmVjdG9yaWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtVGFyZ2V0SW5jbHVkZURpcmVjdG9yaWVzQ29tbWFuZC5jeHgKQEAgLTg4LDggKzg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKTsKICAgaWYgKHN5c3RlbSkgewogICAgIHN0ZDo6c3RyaW5nIGpvaW5lZCA9IHRoaXMtPkpvaW4oY29udGVudCk7Ci0gICAgdGd0LT5BcHBlbmRQcm9wZXJ0eSgiSU5URVJGQUNFX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGpvaW5lZC5jX3N0cigpKTsKKyAgICB0Z3QtPkFwcGVuZFByb3BlcnR5KCJJTlRFUkZBQ0VfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMiLCBqb2luZWQpOwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldExpbmtMaWJyYXJpZXNDb21tYW5kLmN4eCBiL1NvdXJjZS9jbVRhcmdldExpbmtMaWJyYXJpZXNDb21tYW5kLmN4eAppbmRleCAwZDIzODNhLi5kZjc1MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXRMaW5rTGlicmFyaWVzQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtVGFyZ2V0TGlua0xpYnJhcmllc0NvbW1hbmQuY3h4CkBAIC0zLDcgKzMsMTAgQEAKICNpbmNsdWRlICJjbVRhcmdldExpbmtMaWJyYXJpZXNDb21tYW5kLmgiCiAKICNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HZW5lcmF0b3JFeHByZXNzaW9uLmgiCkBAIC0zNCwxNSArMzcsMzAgQEAKIAogY29uc3QgY2hhciogTGlua0xpYnJhcnlUeXBlTmFtZXNbM10gPSB7ICJnZW5lcmFsIiwgImRlYnVnIiwgIm9wdGltaXplZCIgfTsKIAorc3RydWN0IFRMTAoreworICBjbU1ha2VmaWxlJiBNYWtlZmlsZTsKKyAgY21UYXJnZXQqIFRhcmdldDsKKyAgYm9vbCBXYXJuUmVtb3RlSW50ZXJmYWNlID0gZmFsc2U7CisgIGJvb2wgUmVqZWN0UmVtb3RlTGlua2luZyA9IGZhbHNlOworICBib29sIEVuY29kZVJlbW90ZVJlZmVyZW5jZSA9IGZhbHNlOworICBzdGQ6OnN0cmluZyBEaXJlY3RvcnlJZDsKKyAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiBQcm9wczsKKworICBUTEwoY21NYWtlZmlsZSYgbWYsIGNtVGFyZ2V0KiB0YXJnZXQpOworICB+VExMKCk7CisKKyAgYm9vbCBIYW5kbGVMaWJyYXJ5KFByb2Nlc3NpbmdTdGF0ZSBjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxpYiwgY21UYXJnZXRMaW5rTGlicmFyeVR5cGUgbGx0KTsKKyAgdm9pZCBBcHBlbmRQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlKTsKKyAgdm9pZCBBZmZlY3RzUHJvcGVydHkoc3RkOjpzdHJpbmcgY29uc3QmIHByb3ApOworfTsKKwogfSAvLyBuYW1lc3BhY2UKIAogc3RhdGljIHZvaWQgTGlua0xpYnJhcnlUeXBlU3BlY2lmaWVyV2FybmluZyhjbU1ha2VmaWxlJiBtZiwgaW50IGxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByaWdodCk7CiAKLXN0YXRpYyBib29sIEhhbmRsZUxpYnJhcnkoY21NYWtlZmlsZSYgbWYsIGNtVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NpbmdTdGF0ZSBjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGliLCBjbVRhcmdldExpbmtMaWJyYXJ5VHlwZSBsbHQpOwotCiBib29sIGNtVGFyZ2V0TGlua0xpYnJhcmllc0NvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtRXhlY3V0aW9uU3RhdHVzJiBzdGF0dXMpCiB7CkBAIC02NCwxMSArODIsOSBAQAogICBjbVRhcmdldCogdGFyZ2V0ID0KICAgICBtZi5HZXRDTWFrZUluc3RhbmNlKCktPkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kVGFyZ2V0KGFyZ3NbMF0pOwogICBpZiAoIXRhcmdldCkgewotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNtVGFyZ2V0Kj4mIGltcG9ydGVkVGFyZ2V0cyA9Ci0gICAgICBtZi5HZXRPd25lZEltcG9ydGVkVGFyZ2V0cygpOwotICAgIGZvciAoY21UYXJnZXQqIGltcG9ydGVkVGFyZ2V0IDogaW1wb3J0ZWRUYXJnZXRzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBpbXBvcnRlZFRhcmdldCA6IG1mLkdldE93bmVkSW1wb3J0ZWRUYXJnZXRzKCkpIHsKICAgICAgIGlmIChpbXBvcnRlZFRhcmdldC0+R2V0TmFtZSgpID09IGFyZ3NbMF0pIHsKLSAgICAgICAgdGFyZ2V0ID0gaW1wb3J0ZWRUYXJnZXQ7CisgICAgICAgIHRhcmdldCA9IGltcG9ydGVkVGFyZ2V0LmdldCgpOwogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CkBAIC0xNDksNiArMTY1LDggQEAKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCisgIFRMTCB0bGwobWYsIHRhcmdldCk7CisKICAgLy8gS2VlcCB0cmFjayBvZiBsaW5rIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVycy4KICAgY21UYXJnZXRMaW5rTGlicmFyeVR5cGUgbGx0ID0gR0VORVJBTF9MaWJyYXJ5VHlwZTsKICAgYm9vbCBoYXZlTExUID0gZmFsc2U7CkBAIC0yNDcsNyArMjY1LDcgQEAKICAgICB9IGVsc2UgaWYgKGhhdmVMTFQpIHsKICAgICAgIC8vIFRoZSBsaW5rIHR5cGUgd2FzIHNwZWNpZmllZCBieSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCiAgICAgICBoYXZlTExUID0gZmFsc2U7Ci0gICAgICBpZiAoIUhhbmRsZUxpYnJhcnkobWYsIHRhcmdldCwgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSwgYXJnc1tpXSwgbGx0KSkgeworICAgICAgaWYgKCF0bGwuSGFuZGxlTGlicmFyeShjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLCBhcmdzW2ldLCBsbHQpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjY4LDcgKzI4Niw3IEBACiAgICAgICAgICAgbGx0ID0gT1BUSU1JWkVEX0xpYnJhcnlUeXBlOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpZiAoIUhhbmRsZUxpYnJhcnkobWYsIHRhcmdldCwgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSwgYXJnc1tpXSwgbGx0KSkgeworICAgICAgaWYgKCF0bGwuSGFuZGxlTGlicmFyeShjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLCBhcmdzW2ldLCBsbHQpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICB9CkBAIC0zMTEsMjEgKzMyOSw0OCBAQAogICAgICAgIlwiIGluc3RlYWQgb2YgYSBsaWJyYXJ5IG5hbWUuICBUaGUgZmlyc3Qgc3BlY2lmaWVyIHdpbGwgYmUgaWdub3JlZC4iKSk7CiB9CiAKLXN0YXRpYyBib29sIEhhbmRsZUxpYnJhcnkoY21NYWtlZmlsZSYgbWYsIGNtVGFyZ2V0KiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NpbmdTdGF0ZSBjdXJyZW50UHJvY2Vzc2luZ1N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGliLCBjbVRhcmdldExpbmtMaWJyYXJ5VHlwZSBsbHQpCituYW1lc3BhY2UgeworCitUTEw6OlRMTChjbU1ha2VmaWxlJiBtZiwgY21UYXJnZXQqIHRhcmdldCkKKyAgOiBNYWtlZmlsZShtZikKKyAgLCBUYXJnZXQodGFyZ2V0KQogewotICBpZiAodGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpJTlRFUkZBQ0VfTElCUkFSWSAmJgorICBpZiAoJnRoaXMtPk1ha2VmaWxlICE9IHRoaXMtPlRhcmdldC0+R2V0TWFrZWZpbGUoKSkgeworICAgIC8vIFRoZSBMSFMgdGFyZ2V0IHdhcyBjcmVhdGVkIGluIGFub3RoZXIgZGlyZWN0b3J5LgorICAgIHN3aXRjaCAodGhpcy0+TWFrZWZpbGUuR2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwNzkpKSB7CisgICAgICBjYXNlIGNtUG9saWNpZXM6OldBUk46CisgICAgICAgIHRoaXMtPldhcm5SZW1vdGVJbnRlcmZhY2UgPSB0cnVlOworICAgICAgICBDTV9GQUxMVEhST1VHSDsKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgorICAgICAgICB0aGlzLT5SZWplY3RSZW1vdGVMaW5raW5nID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0FMV0FZUzoKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfSUZfVVNFRDoKKyAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgorICAgICAgICB0aGlzLT5FbmNvZGVSZW1vdGVSZWZlcmVuY2UgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKHRoaXMtPkVuY29kZVJlbW90ZVJlZmVyZW5jZSkgeworICAgIGNtRGlyZWN0b3J5SWQgY29uc3QgZGlySWQgPSB0aGlzLT5NYWtlZmlsZS5HZXREaXJlY3RvcnlJZCgpOworICAgIHRoaXMtPkRpcmVjdG9yeUlkID0gY21TdHJDYXQoQ01BS0VfRElSRUNUT1JZX0lEX1NFUCwgZGlySWQuU3RyaW5nKTsKKyAgfQorfQorCitib29sIFRMTDo6SGFuZGxlTGlicmFyeShQcm9jZXNzaW5nU3RhdGUgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWIsIGNtVGFyZ2V0TGlua0xpYnJhcnlUeXBlIGxsdCkKK3sKKyAgaWYgKHRoaXMtPlRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkgJiYKICAgICAgIGN1cnJlbnRQcm9jZXNzaW5nU3RhdGUgIT0gUHJvY2Vzc2luZ0tleXdvcmRMaW5rSW50ZXJmYWNlKSB7Ci0gICAgbWYuSXNzdWVNZXNzYWdlKAorICAgIHRoaXMtPk1ha2VmaWxlLklzc3VlTWVzc2FnZSgKICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKICAgICAgICJJTlRFUkZBQ0UgbGlicmFyeSBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIElOVEVSRkFDRSBrZXl3b3JkIG9mICIKICAgICAgICJ0YXJnZXRfbGlua19saWJyYXJpZXMiKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgaWYgKHRhcmdldC0+SXNJbXBvcnRlZCgpICYmCisgIGlmICh0aGlzLT5UYXJnZXQtPklzSW1wb3J0ZWQoKSAmJgogICAgICAgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSAhPSBQcm9jZXNzaW5nS2V5d29yZExpbmtJbnRlcmZhY2UpIHsKLSAgICBtZi5Jc3N1ZU1lc3NhZ2UoCisgICAgdGhpcy0+TWFrZWZpbGUuSXNzdWVNZXNzYWdlKAogICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAogICAgICAgIklNUE9SVEVEIGxpYnJhcnkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBJTlRFUkZBQ0Uga2V5d29yZCBvZiAiCiAgICAgICAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIik7CkBAIC0zNDAsMTEgKzM4NSwxMiBAQAogICAgICBjdXJyZW50UHJvY2Vzc2luZ1N0YXRlID09IFByb2Nlc3NpbmdLZXl3b3JkTGlua0ludGVyZmFjZSkKICAgICA/IGNtVGFyZ2V0OjpLZXl3b3JkVExMU2lnbmF0dXJlCiAgICAgOiBjbVRhcmdldDo6UGxhaW5UTExTaWduYXR1cmU7Ci0gIGlmICghdGFyZ2V0LT5QdXNoVExMQ29tbWFuZFRyYWNlKHNpZywgbWYuR2V0RXhlY3V0aW9uQ29udGV4dCgpKSkgeworICBpZiAoIXRoaXMtPlRhcmdldC0+UHVzaFRMTENvbW1hbmRUcmFjZSgKKyAgICAgICAgc2lnLCB0aGlzLT5NYWtlZmlsZS5HZXRFeGVjdXRpb25Db250ZXh0KCkpKSB7CiAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGU7CiAgICAgY29uc3QgY2hhciogbW9kYWwgPSBudWxscHRyOwogICAgIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlID0gTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HOwotICAgIHN3aXRjaCAobWYuR2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwMjMpKSB7CisgICAgc3dpdGNoICh0aGlzLT5NYWtlZmlsZS5HZXRQb2xpY3lTdGF0dXMoY21Qb2xpY2llczo6Q01QMDAyMykpIHsKICAgICAgIGNhc2UgY21Qb2xpY2llczo6V0FSTjoKICAgICAgICAgZSA8PCBjbVBvbGljaWVzOjpHZXRQb2xpY3lXYXJuaW5nKGNtUG9saWNpZXM6OkNNUDAwMjMpIDw8ICJcbiI7CiAgICAgICAgIG1vZGFsID0gInNob3VsZCI7CkBAIC0zNjUsNzMgKzQxMSwzOCBAQAogICAgICAgZSA8PCAiVGhlICIgPDwgZXhpc3RpbmdTaWcKICAgICAgICAgPDwgIiBzaWduYXR1cmUgZm9yIHRhcmdldF9saW5rX2xpYnJhcmllcyBoYXMgIgogICAgICAgICAgICAiYWxyZWFkeSBiZWVuIHVzZWQgd2l0aCB0aGUgdGFyZ2V0IFwiIgotICAgICAgICA8PCB0YXJnZXQtPkdldE5hbWUoKQorICAgICAgICA8PCB0aGlzLT5UYXJnZXQtPkdldE5hbWUoKQogICAgICAgICA8PCAiXCIuICBBbGwgdXNlcyBvZiB0YXJnZXRfbGlua19saWJyYXJpZXMgd2l0aCBhIHRhcmdldCAiIDw8IG1vZGFsCiAgICAgICAgIDw8ICIgYmUgZWl0aGVyIGFsbC1rZXl3b3JkIG9yIGFsbC1wbGFpbi5cbiI7Ci0gICAgICB0YXJnZXQtPkdldFRsbFNpZ25hdHVyZVRyYWNlcyhlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnID09IGNtVGFyZ2V0OjpLZXl3b3JkVExMU2lnbmF0dXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY21UYXJnZXQ6OlBsYWluVExMU2lnbmF0dXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY21UYXJnZXQ6OktleXdvcmRUTExTaWduYXR1cmUpOwotICAgICAgbWYuSXNzdWVNZXNzYWdlKG1lc3NhZ2VUeXBlLCBlLnN0cigpKTsKKyAgICAgIHRoaXMtPlRhcmdldC0+R2V0VGxsU2lnbmF0dXJlVHJhY2VzKGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWcgPT0gY21UYXJnZXQ6OktleXdvcmRUTExTaWduYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjbVRhcmdldDo6UGxhaW5UTExTaWduYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbVRhcmdldDo6S2V5d29yZFRMTFNpZ25hdHVyZSk7CisgICAgICB0aGlzLT5NYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UobWVzc2FnZVR5cGUsIGUuc3RyKCkpOwogICAgICAgaWYgKG1lc3NhZ2VUeXBlID09IE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUikgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9CiAgICAgfQogICB9CiAKLSAgYm9vbCB3YXJuUmVtb3RlSW50ZXJmYWNlID0gZmFsc2U7Ci0gIGJvb2wgcmVqZWN0UmVtb3RlTGlua2luZyA9IGZhbHNlOwotICBib29sIGVuY29kZVJlbW90ZVJlZmVyZW5jZSA9IGZhbHNlOwotICBpZiAoJm1mICE9IHRhcmdldC0+R2V0TWFrZWZpbGUoKSkgewotICAgIC8vIFRoZSBMSFMgdGFyZ2V0IHdhcyBjcmVhdGVkIGluIGFub3RoZXIgZGlyZWN0b3J5LgotICAgIHN3aXRjaCAobWYuR2V0UG9saWN5U3RhdHVzKGNtUG9saWNpZXM6OkNNUDAwNzkpKSB7Ci0gICAgICBjYXNlIGNtUG9saWNpZXM6OldBUk46Ci0gICAgICAgIHdhcm5SZW1vdGVJbnRlcmZhY2UgPSB0cnVlOwotICAgICAgICBDTV9GQUxMVEhST1VHSDsKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6T0xEOgotICAgICAgICByZWplY3RSZW1vdGVMaW5raW5nID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGNtUG9saWNpZXM6OlJFUVVJUkVEX0FMV0FZUzoKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6UkVRVUlSRURfSUZfVVNFRDoKLSAgICAgIGNhc2UgY21Qb2xpY2llczo6TkVXOgotICAgICAgICBlbmNvZGVSZW1vdGVSZWZlcmVuY2UgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBzdGQ6OnN0cmluZyBsaWJSZWY7Ci0gIGlmIChlbmNvZGVSZW1vdGVSZWZlcmVuY2UgJiYgIWNtU3lzdGVtVG9vbHM6OkZpbGVJc0Z1bGxQYXRoKGxpYikpIHsKLSAgICAvLyBUaGlzIGlzIGEgbGlicmFyeSBuYW1lIGFkZGVkIGJ5IGEgY2FsbGVyIHRoYXQgaXMgbm90IGluIHRoZQotICAgIC8vIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSB0YXJnZXQgd2FzIGNyZWF0ZWQuICBBZGQgYSBzdWZmaXggdG8KLSAgICAvLyB0aGUgbmFtZSB0byB0ZWxsIFJlc29sdmVMaW5rSXRlbSB0byBsb29rIHVwIHRoZSBuYW1lIGluIHRoZQotICAgIC8vIGNhbGxlcidzIGRpcmVjdG9yeS4KLSAgICBjbURpcmVjdG9yeUlkIGNvbnN0IGRpcklkID0gbWYuR2V0RGlyZWN0b3J5SWQoKTsKLSAgICBsaWJSZWYgPSBsaWIgKyBDTUFLRV9ESVJFQ1RPUllfSURfU0VQICsgZGlySWQuU3RyaW5nOwotICB9IGVsc2UgewotICAgIC8vIFRoaXMgaXMgYW4gYWJzb2x1dGUgcGF0aCBvciBhIGxpYnJhcnkgbmFtZSBhZGRlZCBieSBhIGNhbGxlcgotICAgIC8vIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgdGFyZ2V0IHdhcyBjcmVhdGVkLiAgV2UgY2FuIHVzZQotICAgIC8vIHRoZSBvcmlnaW5hbCBuYW1lIGRpcmVjdGx5LgotICAgIGxpYlJlZiA9IGxpYjsKLSAgfQotCiAgIC8vIEhhbmRsZSBub3JtYWwgY2FzZSB3aGVyZSB0aGUgY29tbWFuZCB3YXMgY2FsbGVkIHdpdGggYW5vdGhlciBrZXl3b3JkIHRoYW4KICAgLy8gSU5URVJGQUNFIC8gTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIG9yIG5vbmUgYXQgYWxsLiAoVGhlICJMSU5LX0xJQlJBUklFUyIKICAgLy8gcHJvcGVydHkgb2YgdGhlIHRhcmdldCBvbiB0aGUgTEhTIHNoYWxsIGJlIHBvcHVsYXRlZC4pCiAgIGlmIChjdXJyZW50UHJvY2Vzc2luZ1N0YXRlICE9IFByb2Nlc3NpbmdLZXl3b3JkTGlua0ludGVyZmFjZSAmJgogICAgICAgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSAhPSBQcm9jZXNzaW5nUGxhaW5MaW5rSW50ZXJmYWNlKSB7CiAKLSAgICBpZiAocmVqZWN0UmVtb3RlTGlua2luZykgewotICAgICAgbWYuSXNzdWVNZXNzYWdlKAorICAgIGlmICh0aGlzLT5SZWplY3RSZW1vdGVMaW5raW5nKSB7CisgICAgICB0aGlzLT5NYWtlZmlsZS5Jc3N1ZU1lc3NhZ2UoCiAgICAgICAgIE1lc3NhZ2VUeXBlOjpGQVRBTF9FUlJPUiwKICAgICAgICAgY21TdHJDYXQoIkF0dGVtcHQgdG8gYWRkIGxpbmsgbGlicmFyeSBcIiIsIGxpYiwgIlwiIHRvIHRhcmdldCBcIiIsCi0gICAgICAgICAgICAgICAgIHRhcmdldC0+R2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICB0aGlzLT5UYXJnZXQtPkdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgIlwiIHdoaWNoIGlzIG5vdCBidWlsdCBpbiB0aGlzICIKICAgICAgICAgICAgICAgICAgImRpcmVjdG9yeS5cblRoaXMgaXMgYWxsb3dlZCBvbmx5IHdoZW4gcG9saWN5IENNUDAwNzkgIgogICAgICAgICAgICAgICAgICAiaXMgc2V0IHRvIE5FVy4iKSk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY21UYXJnZXQqIHRndCA9IG1mLkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kVGFyZ2V0KGxpYik7CisgICAgY21UYXJnZXQqIHRndCA9IHRoaXMtPk1ha2VmaWxlLkdldEdsb2JhbEdlbmVyYXRvcigpLT5GaW5kVGFyZ2V0KGxpYik7CiAKICAgICBpZiAodGd0ICYmICh0Z3QtPkdldFR5cGUoKSAhPSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZKSAmJgogICAgICAgICAodGd0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpTSEFSRURfTElCUkFSWSkgJiYKQEAgLTQzOSw3ICs0NTAsNyBAQAogICAgICAgICAodGd0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgJiYKICAgICAgICAgKHRndC0+R2V0VHlwZSgpICE9IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpICYmCiAgICAgICAgICF0Z3QtPklzRXhlY3V0YWJsZVdpdGhFeHBvcnRzKCkpIHsKLSAgICAgIG1mLklzc3VlTWVzc2FnZSgKKyAgICAgIHRoaXMtPk1ha2VmaWxlLklzc3VlTWVzc2FnZSgKICAgICAgICAgTWVzc2FnZVR5cGU6OkZBVEFMX0VSUk9SLAogICAgICAgICBjbVN0ckNhdCgKICAgICAgICAgICAiVGFyZ2V0IFwiIiwgbGliLCAiXCIgb2YgdHlwZSAiLApAQCAtNDQ5LDE1ICs0NjAsMTYgQEAKICAgICAgICAgICAiZXhlY3V0YWJsZXMgd2l0aCB0aGUgRU5BQkxFX0VYUE9SVFMgcHJvcGVydHkgc2V0LiIpKTsKICAgICB9CiAKLSAgICB0YXJnZXQtPkFkZExpbmtMaWJyYXJ5KG1mLCBsaWIsIGxpYlJlZiwgbGx0KTsKKyAgICB0aGlzLT5BZmZlY3RzUHJvcGVydHkoIkxJTktfTElCUkFSSUVTIik7CisgICAgdGhpcy0+VGFyZ2V0LT5BZGRMaW5rTGlicmFyeSh0aGlzLT5NYWtlZmlsZSwgbGliLCBsbHQpOwogICB9CiAKLSAgaWYgKHdhcm5SZW1vdGVJbnRlcmZhY2UpIHsKLSAgICBtZi5Jc3N1ZU1lc3NhZ2UoCisgIGlmICh0aGlzLT5XYXJuUmVtb3RlSW50ZXJmYWNlKSB7CisgICAgdGhpcy0+TWFrZWZpbGUuSXNzdWVNZXNzYWdlKAogICAgICAgTWVzc2FnZVR5cGU6OkFVVEhPUl9XQVJOSU5HLAogICAgICAgY21TdHJDYXQoCiAgICAgICAgIGNtUG9saWNpZXM6OkdldFBvbGljeVdhcm5pbmcoY21Qb2xpY2llczo6Q01QMDA3OSksICJcblRhcmdldFxuICAiLAotICAgICAgICB0YXJnZXQtPkdldE5hbWUoKSwKKyAgICAgICAgdGhpcy0+VGFyZ2V0LT5HZXROYW1lKCksCiAgICAgICAgICJcbmlzIG5vdCBjcmVhdGVkIGluIHRoaXMgIgogICAgICAgICAiZGlyZWN0b3J5LiAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBDTWFrZSwgbGluayAiCiAgICAgICAgICJsaWJyYXJ5XG4gICIsCkBAIC00NzIsMTUgKzQ4NCwxNSBAQAogICAvLyBTVEFUSUMgbGlicmFyeS4pCiAgIGlmIChjdXJyZW50UHJvY2Vzc2luZ1N0YXRlID09IFByb2Nlc3NpbmdLZXl3b3JkUHJpdmF0ZUludGVyZmFjZSB8fAogICAgICAgY3VycmVudFByb2Nlc3NpbmdTdGF0ZSA9PSBQcm9jZXNzaW5nUGxhaW5Qcml2YXRlSW50ZXJmYWNlKSB7Ci0gICAgaWYgKHRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U1RBVElDX0xJQlJBUlkgfHwKLSAgICAgICAgdGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpPQkpFQ1RfTElCUkFSWSkgeworICAgIGlmICh0aGlzLT5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OlNUQVRJQ19MSUJSQVJZIHx8CisgICAgICAgIHRoaXMtPlRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGNvbmZpZ0xpYiA9Ci0gICAgICAgIHRhcmdldC0+R2V0RGVidWdHZW5lcmF0b3JFeHByZXNzaW9ucyhsaWJSZWYsIGxsdCk7CisgICAgICAgIHRoaXMtPlRhcmdldC0+R2V0RGVidWdHZW5lcmF0b3JFeHByZXNzaW9ucyhsaWIsIGxsdCk7CiAgICAgICBpZiAoY21HZW5lcmF0b3JFeHByZXNzaW9uOjpJc1ZhbGlkVGFyZ2V0TmFtZShsaWIpIHx8CiAgICAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKGxpYikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgICAgY29uZmlnTGliID0gIiQ8TElOS19PTkxZOiIgKyBjb25maWdMaWIgKyAiPiI7CiAgICAgICB9Ci0gICAgICB0YXJnZXQtPkFwcGVuZFByb3BlcnR5KCJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiLCBjb25maWdMaWIuY19zdHIoKSk7CisgICAgICB0aGlzLT5BcHBlbmRQcm9wZXJ0eSgiSU5URVJGQUNFX0xJTktfTElCUkFSSUVTIiwgY29uZmlnTGliKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KQEAgLTQ4OCw5ICs1MDAsOCBAQAogICAvLyBIYW5kbGUgZ2VuZXJhbCBjYXNlIHdoZXJlIHRoZSBjb21tYW5kIHdhcyBjYWxsZWQgd2l0aCBhbm90aGVyIGtleXdvcmQgdGhhbgogICAvLyBQUklWQVRFIC8gTElOS19QUklWQVRFIG9yIG5vbmUgYXQgYWxsLiAoVGhlICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiCiAgIC8vIHByb3BlcnR5IG9mIHRoZSB0YXJnZXQgb24gdGhlIExIUyBzaGFsbCBiZSBwb3B1bGF0ZWQuKQotICB0YXJnZXQtPkFwcGVuZFByb3BlcnR5KAotICAgICJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiLAotICAgIHRhcmdldC0+R2V0RGVidWdHZW5lcmF0b3JFeHByZXNzaW9ucyhsaWJSZWYsIGxsdCkuY19zdHIoKSk7CisgIHRoaXMtPkFwcGVuZFByb3BlcnR5KCJJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMiLAorICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5UYXJnZXQtPkdldERlYnVnR2VuZXJhdG9yRXhwcmVzc2lvbnMobGliLCBsbHQpKTsKIAogICAvLyBTdG9wIHByb2Nlc3NpbmcgaWYgY2FsbGVkIHdpdGhvdXQgYW55IGtleXdvcmQuCiAgIGlmIChjdXJyZW50UHJvY2Vzc2luZ1N0YXRlID09IFByb2Nlc3NpbmdMaW5rTGlicmFyaWVzKSB7CkBAIC00OTgsMTMgKzUwOSwxMyBAQAogICB9CiAgIC8vIFN0b3AgcHJvY2Vzc2luZyBpZiBwb2xpY3kgQ01QMDAyMiBpcyBzZXQgdG8gTkVXLgogICBjb25zdCBjbVBvbGljaWVzOjpQb2xpY3lTdGF0dXMgcG9saWN5MjJTdGF0dXMgPQotICAgIHRhcmdldC0+R2V0UG9saWN5U3RhdHVzQ01QMDAyMigpOworICAgIHRoaXMtPlRhcmdldC0+R2V0UG9saWN5U3RhdHVzQ01QMDAyMigpOwogICBpZiAocG9saWN5MjJTdGF0dXMgIT0gY21Qb2xpY2llczo6T0xEICYmCiAgICAgICBwb2xpY3kyMlN0YXR1cyAhPSBjbVBvbGljaWVzOjpXQVJOKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgLy8gU3RvcCBwcm9jZXNzaW5nIGlmIGNhbGxlZCB3aXRoIGFuIElOVEVSRkFDRSBsaWJyYXJ5IG9uIHRoZSBMSFMuCi0gIGlmICh0YXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CisgIGlmICh0aGlzLT5UYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OklOVEVSRkFDRV9MSUJSQVJZKSB7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApAQCAtNTE0LDcgKzUyNSw3IEBACiAgIHsKICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgY29uc2lkZXJlZCB0byBiZSBERUJVRy4KICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVidWdDb25maWdzID0KLSAgICAgIG1mLkdldENNYWtlSW5zdGFuY2UoKS0+R2V0RGVidWdDb25maWdzKCk7CisgICAgICB0aGlzLT5NYWtlZmlsZS5HZXRDTWFrZUluc3RhbmNlKCktPkdldERlYnVnQ29uZmlncygpOwogICAgIHN0ZDo6c3RyaW5nIHByb3A7CiAKICAgICAvLyBJbmNsdWRlIHRoaXMgbGlicmFyeSBpbiB0aGUgbGluayBpbnRlcmZhY2UgZm9yIHRoZSB0YXJnZXQuCkBAIC01MjIsMjIgKzUzMyw0OSBAQAogICAgICAgLy8gUHV0IGluIHRoZSBERUJVRyBjb25maWd1cmF0aW9uIGludGVyZmFjZXMuCiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBkYyA6IGRlYnVnQ29uZmlncykgewogICAgICAgICBwcm9wID0gY21TdHJDYXQoIkxJTktfSU5URVJGQUNFX0xJQlJBUklFU18iLCBkYyk7Ci0gICAgICAgIHRhcmdldC0+QXBwZW5kUHJvcGVydHkocHJvcCwgbGliUmVmLmNfc3RyKCkpOworICAgICAgICB0aGlzLT5BcHBlbmRQcm9wZXJ0eShwcm9wLCBsaWIpOwogICAgICAgfQogICAgIH0KICAgICBpZiAobGx0ID09IE9QVElNSVpFRF9MaWJyYXJ5VHlwZSB8fCBsbHQgPT0gR0VORVJBTF9MaWJyYXJ5VHlwZSkgewogICAgICAgLy8gUHV0IGluIHRoZSBub24tREVCVUcgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzLgotICAgICAgdGFyZ2V0LT5BcHBlbmRQcm9wZXJ0eSgiTElOS19JTlRFUkZBQ0VfTElCUkFSSUVTIiwgbGliUmVmLmNfc3RyKCkpOworICAgICAgdGhpcy0+QXBwZW5kUHJvcGVydHkoIkxJTktfSU5URVJGQUNFX0xJQlJBUklFUyIsIGxpYik7CiAKICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgREVCVUcgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIGV4aXN0IHNvIHRoYXQgdGhlCiAgICAgICAvLyBnZW5lcmFsIG9uZSB3aWxsIG5vdCBiZSB1c2VkIGFzIGEgZmFsbC1iYWNrLgogICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZGMgOiBkZWJ1Z0NvbmZpZ3MpIHsKICAgICAgICAgcHJvcCA9IGNtU3RyQ2F0KCJMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVNfIiwgZGMpOwotICAgICAgICBpZiAoIXRhcmdldC0+R2V0UHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgICB0YXJnZXQtPlNldFByb3BlcnR5KHByb3AsICIiKTsKKyAgICAgICAgaWYgKCF0aGlzLT5UYXJnZXQtPkdldFByb3BlcnR5KHByb3ApKSB7CisgICAgICAgICAgdGhpcy0+VGFyZ2V0LT5TZXRQcm9wZXJ0eShwcm9wLCAiIik7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KICAgcmV0dXJuIHRydWU7CiB9CisKK3ZvaWQgVExMOjpBcHBlbmRQcm9wZXJ0eShzdGQ6OnN0cmluZyBjb25zdCYgcHJvcCwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlKQoreworICB0aGlzLT5BZmZlY3RzUHJvcGVydHkocHJvcCk7CisgIHRoaXMtPlRhcmdldC0+QXBwZW5kUHJvcGVydHkocHJvcCwgdmFsdWUpOworfQorCit2b2lkIFRMTDo6QWZmZWN0c1Byb3BlcnR5KHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wKQoreworICBpZiAoIXRoaXMtPkVuY29kZVJlbW90ZVJlZmVyZW5jZSkgeworICAgIHJldHVybjsKKyAgfQorICAvLyBBZGQgYSB3cmFwcGVyIHRvIHRoZSBleHByZXNzaW9uIHRvIHRlbGwgTG9va3VwTGlua0l0ZW1zIHRvIGxvb2sgdXAKKyAgLy8gbmFtZXMgaW4gdGhlIGNhbGxlcidzIGRpcmVjdG9yeS4KKyAgaWYgKHRoaXMtPlByb3BzLmluc2VydChwcm9wKS5zZWNvbmQpIHsKKyAgICB0aGlzLT5UYXJnZXQtPkFwcGVuZFByb3BlcnR5KHByb3AsIHRoaXMtPkRpcmVjdG9yeUlkKTsKKyAgfQorfQorCitUTEw6On5UTEwoKQoreworICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wIDogdGhpcy0+UHJvcHMpIHsKKyAgICB0aGlzLT5UYXJnZXQtPkFwcGVuZFByb3BlcnR5KHByb3AsIENNQUtFX0RJUkVDVE9SWV9JRF9TRVApOworICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UYXJnZXRQcmVjb21waWxlSGVhZGVyc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtVGFyZ2V0UHJlY29tcGlsZUhlYWRlcnNDb21tYW5kLmN4eAppbmRleCBjNmUyZTVjLi4wNjcwYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UYXJnZXRQcmVjb21waWxlSGVhZGVyc0NvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVRhcmdldFByZWNvbXBpbGVIZWFkZXJzQ29tbWFuZC5jeHgKQEAgLTQ3LDkgKzQ3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypwcmVwZW5kKi8sIGJvb2wgLypzeXN0ZW0qLykgb3ZlcnJpZGUKICAgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBiYXNlID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKTsKLSAgICB0Z3QtPkFwcGVuZFByb3BlcnR5KAotICAgICAgIlBSRUNPTVBJTEVfSEVBREVSUyIsCi0gICAgICB0aGlzLT5Kb2luKENvbnZlcnRUb0Fic29sdXRlQ29udGVudChjb250ZW50LCBiYXNlKSkuY19zdHIoKSk7CisgICAgdGd0LT5BcHBlbmRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkpvaW4oQ29udmVydFRvQWJzb2x1dGVDb250ZW50KGNvbnRlbnQsIGJhc2UpKSk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0UHJvcENvbW1hbmRCYXNlLmN4eCBiL1NvdXJjZS9jbVRhcmdldFByb3BDb21tYW5kQmFzZS5jeHgKaW5kZXggYmJjMWUxNi4uZTcxNDcyMCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0UHJvcENvbW1hbmRCYXNlLmN4eAorKysgYi9Tb3VyY2UvY21UYXJnZXRQcm9wQ29tbWFuZEJhc2UuY3h4CkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbU1ha2VmaWxlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKQEAgLTg0LDkgKzg1LDcgQEAKICAgICB9CiAgICAgKythcmdJbmRleDsKIAotICAgIHRoaXMtPlRhcmdldC0+U2V0UHJvcGVydHkoIlBSRUNPTVBJTEVfSEVBREVSU19SRVVTRV9GUk9NIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJnSW5kZXhdLmNfc3RyKCkpOwotCisgICAgdGhpcy0+VGFyZ2V0LT5TZXRQcm9wZXJ0eSgiUFJFQ09NUElMRV9IRUFERVJTX1JFVVNFX0ZST00iLCBhcmdzW2FyZ0luZGV4XSk7CiAgICAgKythcmdJbmRleDsKICAgfQogCkBAIC0xNTksMTIgKzE1OCwxMSBAQAogewogICBpZiAocHJlcGVuZCkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3BOYW1lID0gc3RkOjpzdHJpbmcoIklOVEVSRkFDRV8iKSArIHRoaXMtPlByb3BlcnR5OwotICAgIGNvbnN0IGNoYXIqIHByb3BWYWx1ZSA9IHRndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRvdGFsQ29udGVudCA9IHRoaXMtPkpvaW4oY29udGVudCkgKwotICAgICAgKHByb3BWYWx1ZSA/IHN0ZDo6c3RyaW5nKCI7IikgKyBwcm9wVmFsdWUgOiBzdGQ6OnN0cmluZygpKTsKLSAgICB0Z3QtPlNldFByb3BlcnR5KHByb3BOYW1lLCB0b3RhbENvbnRlbnQuY19zdHIoKSk7CisgICAgY21Qcm9wIHByb3BWYWx1ZSA9IHRndC0+R2V0UHJvcGVydHkocHJvcE5hbWUpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHRvdGFsQ29udGVudCA9CisgICAgICB0aGlzLT5Kb2luKGNvbnRlbnQpICsgKHByb3BWYWx1ZSA/ICgiOyIgKyAqcHJvcFZhbHVlKSA6IHN0ZDo6c3RyaW5nKCkpOworICAgIHRndC0+U2V0UHJvcGVydHkocHJvcE5hbWUsIHRvdGFsQ29udGVudCk7CiAgIH0gZWxzZSB7Ci0gICAgdGd0LT5BcHBlbmRQcm9wZXJ0eSgiSU5URVJGQUNFXyIgKyB0aGlzLT5Qcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkpvaW4oY29udGVudCkuY19zdHIoKSk7CisgICAgdGd0LT5BcHBlbmRQcm9wZXJ0eSgiSU5URVJGQUNFXyIgKyB0aGlzLT5Qcm9wZXJ0eSwgdGhpcy0+Sm9pbihjb250ZW50KSk7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRhcmdldFByb3BlcnR5Q29tcHV0ZXIuY3h4IGIvU291cmNlL2NtVGFyZ2V0UHJvcGVydHlDb21wdXRlci5jeHgKaW5kZXggYmFhYjhkYS4uZjM3OTk1YyAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0UHJvcGVydHlDb21wdXRlci5jeHgKKysrIGIvU291cmNlL2NtVGFyZ2V0UHJvcGVydHlDb21wdXRlci5jeHgKQEAgLTYyLDYgKzYyLDcgQEAKICAgICAiQ09NUEFUSUJMRV9JTlRFUkZBQ0VfTlVNQkVSX01BWCIsCiAgICAgIkNPTVBBVElCTEVfSU5URVJGQUNFX05VTUJFUl9NSU4iLAogICAgICJDT01QQVRJQkxFX0lOVEVSRkFDRV9TVFJJTkciLAorICAgICJERVBSRUNBVElPTiIsCiAgICAgIkVYUE9SVF9OQU1FIiwKICAgICAiRVhQT1JUX1BST1BFUlRJRVMiLAogICAgICJJTVBPUlRFRCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyLmggYi9Tb3VyY2UvY21UYXJnZXRQcm9wZXJ0eUNvbXB1dGVyLmgKaW5kZXggM2IxMWFjZC4uZjg3YjdjMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGFyZ2V0UHJvcGVydHlDb21wdXRlci5oCisrKyBiL1NvdXJjZS9jbVRhcmdldFByb3BlcnR5Q29tcHV0ZXIuaApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCiAjaW5jbHVkZSAiY21TdHJpbmdBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtMTgsMTEgKzE5LDExIEBACiB7CiBwdWJsaWM6CiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQ+Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShUYXJnZXQgY29uc3QqIHRndCwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbU1lc3NlbmdlciogbWVzc2VuZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCkKKyAgc3RhdGljIGNtUHJvcCBHZXRQcm9wZXJ0eShUYXJnZXQgY29uc3QqIHRndCwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KQogICB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGxvYyA9IEdldExvY2F0aW9uKHRndCwgcHJvcCwgbWVzc2VuZ2VyLCBjb250ZXh0KSkgeworICAgIGlmIChjbVByb3AgbG9jID0gR2V0TG9jYXRpb24odGd0LCBwcm9wLCBtZXNzZW5nZXIsIGNvbnRleHQpKSB7CiAgICAgICByZXR1cm4gbG9jOwogICAgIH0KICAgICBpZiAoY21TeXN0ZW1Ub29sczo6R2V0RmF0YWxFcnJvck9jY3VyZWQoKSkgewpAQCAtNDYsMTUgKzQ3LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCk7CiAKICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldD4KLSAgc3RhdGljIGNvbnN0IGNoYXIqIENvbXB1dGVMb2NhdGlvbkZvckJ1aWxkKFRhcmdldCBjb25zdCogdGd0KTsKKyAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nJiBDb21wdXRlTG9jYXRpb25Gb3JCdWlsZChUYXJnZXQgY29uc3QqIHRndCk7CiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQ+Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBDb21wdXRlTG9jYXRpb24oVGFyZ2V0IGNvbnN0KiB0Z3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyk7CisgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyYgQ29tcHV0ZUxvY2F0aW9uKFRhcmdldCBjb25zdCogdGd0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnKTsKIAogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0PgotICBzdGF0aWMgY29uc3QgY2hhciogR2V0TG9jYXRpb24oVGFyZ2V0IGNvbnN0KiB0Z3QsIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21NZXNzZW5nZXIqIG1lc3NlbmdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpCisgIHN0YXRpYyBjbVByb3AgR2V0TG9jYXRpb24oVGFyZ2V0IGNvbnN0KiB0Z3QsIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUJhY2t0cmFjZSBjb25zdCYgY29udGV4dCkKIAogICB7CiAgICAgLy8gV2F0Y2ggZm9yIHNwZWNpYWwgImNvbXB1dGVkIiBwcm9wZXJ0aWVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbgpAQCAtNzEsNyArNzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCkpIHsKICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29tcHV0ZUxvY2F0aW9uRm9yQnVpbGQodGd0KTsKKyAgICAgICAgcmV0dXJuICZDb21wdXRlTG9jYXRpb25Gb3JCdWlsZCh0Z3QpOwogICAgICAgfQogCiAgICAgICAvLyBTdXBwb3J0ICJMT0NBVElPTl88Q09ORklHPiIuCkBAIC04Miw3ICs4Myw3IEBACiAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgc3RkOjpzdHJpbmcgY29uZmlnTmFtZSA9IHByb3Auc3Vic3RyKDkpOwotICAgICAgICByZXR1cm4gQ29tcHV0ZUxvY2F0aW9uKHRndCwgY29uZmlnTmFtZSk7CisgICAgICAgIHJldHVybiAmQ29tcHV0ZUxvY2F0aW9uKHRndCwgY29uZmlnTmFtZSk7CiAgICAgICB9CiAKICAgICAgIC8vIFN1cHBvcnQgIjxDT05GSUc+X0xPQ0FUSU9OIi4KQEAgLTk1LDcgKzk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCkpIHsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gQ29tcHV0ZUxvY2F0aW9uKHRndCwgY29uZmlnTmFtZSk7CisgICAgICAgICAgcmV0dXJuICZDb21wdXRlTG9jYXRpb24odGd0LCBjb25maWdOYW1lKTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTEwMyw4ICsxMDQsOCBAQAogICB9CiAKICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldD4KLSAgc3RhdGljIGNvbnN0IGNoYXIqIEdldFNvdXJjZXMoVGFyZ2V0IGNvbnN0KiB0Z3QsIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtTGlzdEZpbGVCYWNrdHJhY2UgY29uc3QmIGNvbnRleHQpOworICBzdGF0aWMgY21Qcm9wIEdldFNvdXJjZXMoVGFyZ2V0IGNvbnN0KiB0Z3QsIGNtTWVzc2VuZ2VyKiBtZXNzZW5nZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbUxpc3RGaWxlQmFja3RyYWNlIGNvbnN0JiBjb250ZXh0KTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVGFyZ2V0U291cmNlc0NvbW1hbmQuY3h4IGIvU291cmNlL2NtVGFyZ2V0U291cmNlc0NvbW1hbmQuY3h4CmluZGV4IGMyZTBiMjguLmExZmJjOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVRhcmdldFNvdXJjZXNDb21tYW5kLmN4eAorKysgYi9Tb3VyY2UvY21UYXJnZXRTb3VyY2VzQ29tbWFuZC5jeHgKQEAgLTQzLDggKzQzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypwcmVwZW5kKi8sIGJvb2wgLypzeXN0ZW0qLykgb3ZlcnJpZGUKICAgewogICAgIHRndC0+QXBwZW5kUHJvcGVydHkoCi0gICAgICAiU09VUkNFUyIsCi0gICAgICB0aGlzLT5Kb2luKENvbnZlcnRUb0Fic29sdXRlQ29udGVudCh0Z3QsIGNvbnRlbnQsIGZhbHNlKSkuY19zdHIoKSk7CisgICAgICAiU09VUkNFUyIsIHRoaXMtPkpvaW4oQ29udmVydFRvQWJzb2x1dGVDb250ZW50KHRndCwgY29udGVudCwgZmFsc2UpKSk7CiAgICAgcmV0dXJuIHRydWU7IC8vIFN1Y2Nlc3NmdWxseSBoYW5kbGVkLgogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRlc3QuY3h4IGIvU291cmNlL2NtVGVzdC5jeHgKaW5kZXggZDVjNjFjMS4uYTI2YmVmMyAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGVzdC5jeHgKKysrIGIvU291cmNlL2NtVGVzdC5jeHgKQEAgLTM0LDE1ICszNCwxOCBAQAogCiBjb25zdCBjaGFyKiBjbVRlc3Q6OkdldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdAogewotICBjb25zdCBjaGFyKiByZXRWYWwgPSB0aGlzLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CisgIGNtUHJvcCByZXRWYWwgPSB0aGlzLT5Qcm9wZXJ0aWVzLkdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgIGlmICghcmV0VmFsKSB7CiAgICAgY29uc3QgYm9vbCBjaGFpbiA9CiAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKS0+SXNQcm9wZXJ0eUNoYWluZWQocHJvcCwgY21Qcm9wZXJ0eTo6VEVTVCk7CiAgICAgaWYgKGNoYWluKSB7Ci0gICAgICByZXR1cm4gdGhpcy0+TWFrZWZpbGUtPkdldFByb3BlcnR5KHByb3AsIGNoYWluKTsKKyAgICAgIGlmIChjbVByb3AgcCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRQcm9wZXJ0eShwcm9wLCBjaGFpbikpIHsKKyAgICAgICAgcmV0dXJuIHAtPmNfc3RyKCk7CisgICAgICB9CiAgICAgfQorICAgIHJldHVybiBudWxscHRyOwogICB9Ci0gIHJldHVybiByZXRWYWw7CisgIHJldHVybiByZXRWYWwtPmNfc3RyKCk7CiB9CiAKIGJvb2wgY21UZXN0OjpHZXRQcm9wZXJ0eUFzQm9vbChjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkgY29uc3QKQEAgLTU1LDcgKzU4LDcgQEAKICAgdGhpcy0+UHJvcGVydGllcy5TZXRQcm9wZXJ0eShwcm9wLCB2YWx1ZSk7CiB9CiAKLXZvaWQgY21UZXN0OjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCit2b2lkIGNtVGVzdDo6QXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nKQogewogICB0aGlzLT5Qcm9wZXJ0aWVzLkFwcGVuZFByb3BlcnR5KHByb3AsIHZhbHVlLCBhc1N0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UZXN0LmggYi9Tb3VyY2UvY21UZXN0LmgKaW5kZXggZGQyNDZjNC4uNzJkNGVkOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGVzdC5oCisrKyBiL1NvdXJjZS9jbVRlc3QuaApAQCAtMzUsNyArMzUsNyBAQAogCiAgIC8vISBTZXQvR2V0IGEgcHJvcGVydHkgb2YgdGhpcyBzb3VyY2UgZmlsZQogICB2b2lkIFNldFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBjaGFyKiB2YWx1ZSk7Ci0gIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlLAorICB2b2lkIEFwcGVuZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZyA9IGZhbHNlKTsKICAgY29uc3QgY2hhciogR2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApIGNvbnN0OwogICBib29sIEdldFByb3BlcnR5QXNCb29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRlc3RHZW5lcmF0b3IuY3h4IGIvU291cmNlL2NtVGVzdEdlbmVyYXRvci5jeHgKaW5kZXggMzMzZDRkNS4uNzhiMjMwYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtVGVzdEdlbmVyYXRvci5jeHgKKysrIGIvU291cmNlL2NtVGVzdEdlbmVyYXRvci5jeHgKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlICJjbUxpc3RGaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY21PdXRwdXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21Qcm9wZXJ0eU1hcC5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVN0YXRlVHlwZXMuaCIKQEAgLTEwMCw5ICsxMDEsOSBAQAogICAgIGV4ZSA9IHRhcmdldC0+R2V0RnVsbFBhdGgoY29uZmlnKTsKIAogICAgIC8vIFByZXBlbmQgd2l0aCB0aGUgZW11bGF0b3Igd2hlbiBjcm9zcyBjb21waWxpbmcgaWYgcmVxdWlyZWQuCi0gICAgY29uc3QgY2hhciogZW11bGF0b3IgPSB0YXJnZXQtPkdldFByb3BlcnR5KCJDUk9TU0NPTVBJTElOR19FTVVMQVRPUiIpOwotICAgIGlmIChlbXVsYXRvciAhPSBudWxscHRyICYmICplbXVsYXRvcikgewotICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGVtdWxhdG9yV2l0aEFyZ3MgPSBjbUV4cGFuZGVkTGlzdChlbXVsYXRvcik7CisgICAgY21Qcm9wIGVtdWxhdG9yID0gdGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQ1JPU1NDT01QSUxJTkdfRU1VTEFUT1IiKTsKKyAgICBpZiAoY21Ob25lbXB0eShlbXVsYXRvcikpIHsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBlbXVsYXRvcldpdGhBcmdzID0gY21FeHBhbmRlZExpc3QoKmVtdWxhdG9yKTsKICAgICAgIHN0ZDo6c3RyaW5nIGVtdWxhdG9yRXhlKGVtdWxhdG9yV2l0aEFyZ3NbMF0pOwogICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoZW11bGF0b3JFeGUpOwogICAgICAgb3MgPDwgY21PdXRwdXRDb252ZXJ0ZXI6OkVzY2FwZUZvckNNYWtlKGVtdWxhdG9yRXhlKSA8PCAiICI7CkBAIC0xMzQsNyArMTM1LDcgQEAKICAgICAgICAgICAgIGdlLlBhcnNlKGkuc2Vjb25kKS0+RXZhbHVhdGUodGhpcy0+TEcsIGNvbmZpZykpOwogICB9CiAgIHRoaXMtPkdlbmVyYXRlSW50ZXJuYWxQcm9wZXJ0aWVzKG9zKTsKLSAgb3MgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgb3MgPDwgIilcbiI7CiB9CiAKIHZvaWQgY21UZXN0R2VuZXJhdG9yOjpHZW5lcmF0ZVNjcmlwdE5vQ29uZmlnKHN0ZDo6b3N0cmVhbSYgb3MsIEluZGVudCBpbmRlbnQpCkBAIC0xNzYsOSArMTc3LDkgQEAKICAgICAgIH0KICAgICAgIGZvdXQgPDwgYzsKICAgICB9Ci0gICAgZm91dCA8PCAiXCIiOworICAgIGZvdXQgPDwgJyInOwogICB9Ci0gIGZvdXQgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKKyAgZm91dCA8PCAiKVxuIjsKIAogICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgdGhlIHRlc3QuCiAgIGZvdXQgPDwgaW5kZW50IDw8ICJzZXRfdGVzdHNfcHJvcGVydGllcygiIDw8IHRoaXMtPlRlc3QtPkdldE5hbWUoKQpAQCAtMTg4LDcgKzE4OSw3IEBACiAgICAgICAgICA8PCBjbU91dHB1dENvbnZlcnRlcjo6RXNjYXBlRm9yQ01ha2UoaS5zZWNvbmQpOwogICB9CiAgIHRoaXMtPkdlbmVyYXRlSW50ZXJuYWxQcm9wZXJ0aWVzKGZvdXQpOwotICBmb3V0IDw8ICIpIiA8PCBzdGQ6OmVuZGw7CisgIGZvdXQgPDwgIilcbiI7CiB9CiAKIHZvaWQgY21UZXN0R2VuZXJhdG9yOjpHZW5lcmF0ZUludGVybmFsUHJvcGVydGllcyhzdGQ6Om9zdHJlYW0mIG9zKQpAQCAtMjEzLDcgKzIxNCw3IEBACiAgICAgcHJlcGVuZFRyaXBsZVNlcGFyYXRvciA9IHRydWU7CiAgIH0KIAotICBvcyA8PCAiXCIiOworICBvcyA8PCAnIic7CiB9CiAKIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjbVRlc3RHZW5lcmF0b3I6OkV2YWx1YXRlQ29tbWFuZExpbmVBcmd1bWVudHMoCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21UaW1lc3RhbXAuY3h4IGIvU291cmNlL2NtVGltZXN0YW1wLmN4eAppbmRleCAzOTBmZDE2Li5iZDZiYjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21UaW1lc3RhbXAuY3h4CisrKyBiL1NvdXJjZS9jbVRpbWVzdGFtcC5jeHgKQEAgLTEsNSArMSwxNSBAQAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX3N1bikKKy8vIFBPU0lYIEFQSXMgYXJlIG5lZWRlZAorIyAgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAyMDA4MDlMCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCisvLyBGb3IgaXNhc2NpaQorIyAgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNzAwCisjZW5kaWYKKwogI2luY2x1ZGUgImNtVGltZXN0YW1wLmgiCiAKICNpbmNsdWRlIDxjc3RkbGliPgpAQCAtMTU0LDcgKzE2NCw3IEBACiAgICAgICBicmVhazsKICAgICBjYXNlICdzJzogLy8gU2Vjb25kcyBzaW5jZSBVTklYIGVwb2NoIChtaWRuaWdodCAxLWphbi0xOTcwKQogICAgIHsKLSAgICAgIC8vIEJ1aWxkIGEgdGltZV90IGZvciBVTklYIGVwb2NoIGFuZCBzdWJzdHJhY3QgZnJvbSB0aGUgaW5wdXQgInRpbWVUIjoKKyAgICAgIC8vIEJ1aWxkIGEgdGltZV90IGZvciBVTklYIGVwb2NoIGFuZCBzdWJ0cmFjdCBmcm9tIHRoZSBpbnB1dCAidGltZVQiOgogICAgICAgc3RydWN0IHRtIHRtVW5peEVwb2NoOwogICAgICAgbWVtc2V0KCZ0bVVuaXhFcG9jaCwgMCwgc2l6ZW9mKHRtVW5peEVwb2NoKSk7CiAgICAgICB0bVVuaXhFcG9jaC50bV9tZGF5ID0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVRyeVJ1bkNvbW1hbmQuY3h4IGIvU291cmNlL2NtVHJ5UnVuQ29tbWFuZC5jeHgKaW5kZXggMGU4ZTk4Ni4uNjRkNzFiYyAxMDA2NDQKLS0tIGEvU291cmNlL2NtVHJ5UnVuQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtVHJ5UnVuQ29tbWFuZC5jeHgKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAiY21EdXJhdGlvbi5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbU1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiY21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZVR5cGVzLmgiCkBAIC0yNDIsOCArMjQzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQuY19zdHIoKSwgY21TdGF0ZUVudW1zOjpTVFJJTkcpOwogCiAgICAgY21TdGF0ZSogc3RhdGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKTsKLSAgICBjb25zdCBjaGFyKiBleGlzdGluZ1ZhbHVlID0KLSAgICAgIHN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUodGhpcy0+UnVuUmVzdWx0VmFyaWFibGUpOworICAgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSh0aGlzLT5SdW5SZXN1bHRWYXJpYWJsZSk7CiAgICAgaWYgKGV4aXN0aW5nVmFsdWUpIHsKICAgICAgIHN0YXRlLT5TZXRDYWNoZUVudHJ5UHJvcGVydHkodGhpcy0+UnVuUmVzdWx0VmFyaWFibGUsICJBRFZBTkNFRCIsICIxIik7CiAgICAgfQpAQCAtMjY1LDcgKzI2NSw3IEBACiAgICAgICAgIGludGVybmFsUnVuT3V0cHV0TmFtZSwgIlBMRUFTRV9GSUxMX09VVC1OT1RGT1VORCIsIGNvbW1lbnQuY19zdHIoKSwKICAgICAgICAgY21TdGF0ZUVudW1zOjpTVFJJTkcpOwogICAgICAgY21TdGF0ZSogc3RhdGUgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U3RhdGUoKTsKLSAgICAgIGNvbnN0IGNoYXIqIGV4aXN0aW5nID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShpbnRlcm5hbFJ1bk91dHB1dE5hbWUpOworICAgICAgY21Qcm9wIGV4aXN0aW5nID0gc3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShpbnRlcm5hbFJ1bk91dHB1dE5hbWUpOwogICAgICAgaWYgKGV4aXN0aW5nKSB7CiAgICAgICAgIHN0YXRlLT5TZXRDYWNoZUVudHJ5UHJvcGVydHkoaW50ZXJuYWxSdW5PdXRwdXROYW1lLCAiQURWQU5DRUQiLCAiMSIpOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVVZIYW5kbGVQdHIuY3h4IGIvU291cmNlL2NtVVZIYW5kbGVQdHIuY3h4CmluZGV4IDIzZGFiYjcuLmRmMmY2NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVVWSGFuZGxlUHRyLmN4eAorKysgYi9Tb3VyY2UvY21VVkhhbmRsZVB0ci5jeHgKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxtdXRleD4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiBuYW1lc3BhY2UgY20gewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21VVkhhbmRsZVB0ci5oIGIvU291cmNlL2NtVVZIYW5kbGVQdHIuaAppbmRleCAzMDgzYjYwLi5kOWRlN2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21VVkhhbmRsZVB0ci5oCisrKyBiL1NvdXJjZS9jbVVWSGFuZGxlUHRyLmgKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogCi0jaW5jbHVkZSAiY21fdXYuaCIKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAKICNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21VVlByb2Nlc3NDaGFpbi5jeHggYi9Tb3VyY2UvY21VVlByb2Nlc3NDaGFpbi5jeHgKaW5kZXggNTQzYzMzMC4uNjA0MGZkOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVVZQcm9jZXNzQ2hhaW4uY3h4CisrKyBiL1NvdXJjZS9jbVVWUHJvY2Vzc0NoYWluLmN4eApAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21HZXRQaXBlcy5oIgogI2luY2x1ZGUgImNtVVZIYW5kbGVQdHIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVVWUHJvY2Vzc0NoYWluLmggYi9Tb3VyY2UvY21VVlByb2Nlc3NDaGFpbi5oCmluZGV4IDA1YTdjYzguLmI1Y2NiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVVWUHJvY2Vzc0NoYWluLmgKKysrIGIvU291cmNlL2NtVVZQcm9jZXNzQ2hhaW4uaApAQCAtNCwxNCArNCwxNCBAQAogI2RlZmluZSBjbVVWUHJvY2Vzc0NoYWluX2gKIAogI2luY2x1ZGUgPGFycmF5PgotI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlIDxjc3RkaW50PgogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiBjbGFzcyBjbVVWUHJvY2Vzc0NoYWluOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21VVlNpZ25hbEhhY2tSQUlJLmggYi9Tb3VyY2UvY21VVlNpZ25hbEhhY2tSQUlJLmgKaW5kZXggNjM1OTlkYi4uNjBlNGNhOCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVVZTaWduYWxIYWNrUkFJSS5oCisrKyBiL1NvdXJjZS9jbVVWU2lnbmFsSGFja1JBSUkuaApAQCAtMyw3ICszLDcgQEAKICNwcmFnbWEgb25jZQogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAogI2lmIGRlZmluZWQoQ01BS0VfVVNFX1NZU1RFTV9MSUJVVikgJiYgIWRlZmluZWQoX1dJTjMyKSAmJiAgICAgICAgICAgICAgICAgICAgXAogICBVVl9WRVJTSU9OX01BSk9SID09IDEgJiYgVVZfVkVSU0lPTl9NSU5PUiA8IDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21VVlN0cmVhbWJ1Zi5oIGIvU291cmNlL2NtVVZTdHJlYW1idWYuaAppbmRleCAxYzhhNzcxLi41MGZhZWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21VVlN0cmVhbWJ1Zi5oCisrKyBiL1NvdXJjZS9jbVVWU3RyZWFtYnVmLmgKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSA8c3RyZWFtYnVmPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21VdGlsaXR5U291cmNlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21VdGlsaXR5U291cmNlQ29tbWFuZC5jeHgKaW5kZXggYTQzMTY1Yy4uNmRlNzhmZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtVXRpbGl0eVNvdXJjZUNvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVV0aWxpdHlTb3VyY2VDb21tYW5kLmN4eApAQCAtODQsOCArODQsOCBAQAogICBzdGQ6OnN0cmluZyB1dGlsaXR5RGlyZWN0b3J5ID0KICAgICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCk7CiAgIHN0ZDo6c3RyaW5nIGV4ZVBhdGg7Ci0gIGlmIChzdGF0dXMuR2V0TWFrZWZpbGUoKS5HZXREZWZpbml0aW9uKCJFWEVDVVRBQkxFX09VVFBVVF9QQVRIIikpIHsKLSAgICBleGVQYXRoID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0RGVmaW5pdGlvbigiRVhFQ1VUQUJMRV9PVVRQVVRfUEFUSCIpOworICBpZiAoYXV0byBkID0gc3RhdHVzLkdldE1ha2VmaWxlKCkuR2V0RGVmaW5pdGlvbigiRVhFQ1VUQUJMRV9PVVRQVVRfUEFUSCIpKSB7CisgICAgZXhlUGF0aCA9IGQ7CiAgIH0KICAgaWYgKCFleGVQYXRoLmVtcHR5KCkpIHsKICAgICB1dGlsaXR5RGlyZWN0b3J5ID0gZXhlUGF0aDsKQEAgLTEwMiwxNSArMTAyLDE1IEBACiAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcodXRpbGl0eUV4ZWN1dGFibGUsICIvLi8iLCAiLyIpOwogCiAgIC8vIEVudGVyIHRoZSB2YWx1ZSBpbnRvIHRoZSBjYWNoZS4KLSAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKAotICAgIGNhY2hlRW50cnksIHV0aWxpdHlFeGVjdXRhYmxlLmNfc3RyKCksICJQYXRoIHRvIGFuIGludGVybmFsIHByb2dyYW0uIiwKLSAgICBjbVN0YXRlRW51bXM6OkZJTEVQQVRIKTsKKyAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkQ2FjaGVEZWZpbml0aW9uKGNhY2hlRW50cnksIHV0aWxpdHlFeGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhdGggdG8gYW4gaW50ZXJuYWwgcHJvZ3JhbS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21TdGF0ZUVudW1zOjpGSUxFUEFUSCk7CiAgIC8vIGFkZCBhIHZhbHVlIGludG8gdGhlIGNhY2hlIHRoYXQgbWFwcyBmcm9tIHRoZQogICAvLyBmdWxsIHBhdGggdG8gdGhlIG5hbWUgb2YgdGhlIHByb2plY3QKICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXModXRpbGl0eUV4ZWN1dGFibGUpOwotICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRDYWNoZURlZmluaXRpb24oCi0gICAgdXRpbGl0eUV4ZWN1dGFibGUsIHV0aWxpdHlOYW1lLmNfc3RyKCksICJFeGVjdXRhYmxlIHRvIHByb2plY3QgbmFtZS4iLAotICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOworICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRDYWNoZURlZmluaXRpb24odXRpbGl0eUV4ZWN1dGFibGUsIHV0aWxpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4ZWN1dGFibGUgdG8gcHJvamVjdCBuYW1lLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVZTU2V0dXBIZWxwZXIuY3h4IGIvU291cmNlL2NtVlNTZXR1cEhlbHBlci5jeHgKaW5kZXggZGQ5ZjA1OC4uOTYyNjU5OSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVlNTZXR1cEhlbHBlci5jeHgKKysrIGIvU291cmNlL2NtVlNTZXR1cEhlbHBlci5jeHgKQEAgLTI1OCw2ICsyNTgsMjAgQEAKICAgcmV0dXJuIGlzSW5zdGFsbGVkOwogfQogCitib29sIGNtVlNTZXR1cEFQSUhlbHBlcjo6R2V0VlNJbnN0YW5jZVZlcnNpb24oCisgIHVuc2lnbmVkIGxvbmcgbG9uZyYgdnNJbnN0YW5jZVZlcnNpb24pCit7CisgIHZzSW5zdGFuY2VWZXJzaW9uID0gMDsKKyAgYm9vbCBpc0luc3RhbGxlZCA9IHRoaXMtPkVudW1lcmF0ZUFuZENob29zZVZTSW5zdGFuY2UoKTsKKworICBpZiAoaXNJbnN0YWxsZWQpIHsKKyAgICB2c0luc3RhbmNlVmVyc2lvbiA9CisgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGNob3Nlbkluc3RhbmNlSW5mby51bGxWZXJzaW9uKTsKKyAgfQorCisgIHJldHVybiBpc0luc3RhbGxlZDsKK30KKwogYm9vbCBjbVZTU2V0dXBBUElIZWxwZXI6OkdldFZDVG9vbHNldFZlcnNpb24oc3RkOjpzdHJpbmcmIHZzVG9vbHNldFZlcnNpb24pCiB7CiAgIHZzVG9vbHNldFZlcnNpb24uY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVZTU2V0dXBIZWxwZXIuaCBiL1NvdXJjZS9jbVZTU2V0dXBIZWxwZXIuaAppbmRleCAwOTgwY2VmLi5hOTI2ZWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21WU1NldHVwSGVscGVyLmgKKysrIGIvU291cmNlL2NtVlNTZXR1cEhlbHBlci5oCkBAIC04LDEzICs4LDEyIEBACiAjZW5kaWYKIAogLy8gUHVibGlzaGVkIGJ5IFZpc3VhbCBTdHVkaW8gU2V0dXAgdGVhbQorI2luY2x1ZGUgPGNtM3AvU2V0dXAuQ29uZmlndXJhdGlvbi5oPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKLSNpbmNsdWRlICJjbXZzc2V0dXAvU2V0dXAuQ29uZmlndXJhdGlvbi5oIgotCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KIGNsYXNzIFNtYXJ0Q09NUHRyCiB7CkBAIC0xMDcsNiArMTA2LDcgQEAKIAogICBib29sIElzVlNJbnN0YWxsZWQoKTsKICAgYm9vbCBHZXRWU0luc3RhbmNlSW5mbyhzdGQ6OnN0cmluZyYgdnNJbnN0YWxsTG9jYXRpb24pOworICBib29sIEdldFZTSW5zdGFuY2VWZXJzaW9uKHVuc2lnbmVkIGxvbmcgbG9uZyYgdnNJbnN0YW5jZVZlcnNpb24pOwogICBib29sIEdldFZDVG9vbHNldFZlcnNpb24oc3RkOjpzdHJpbmcmIHZzVG9vbHNldFZlcnNpb24pOwogICBib29sIElzV2luMTBTREtJbnN0YWxsZWQoKTsKICAgYm9vbCBJc1dpbjgxU0RLSW5zdGFsbGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WYXJpYWJsZVdhdGNoLmN4eCBiL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2guY3h4CmluZGV4IDQ5OTVkYTkuLjM1ZTFjOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2guY3h4CisrKyBiL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2guY3h4CkBAIC0yLDE5ICsyLDE5IEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbVZhcmlhYmxlV2F0Y2guaCIKIAorI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGNtVmFyaWFibGVXYXRjaEFjY2Vzc1N0cmluZ3NbXSA9IHsKLSAgIlJFQURfQUNDRVNTIiwgICAgICJVTktOT1dOX1JFQURfQUNDRVNTIiwgIlVOS05PV05fREVGSU5FRF9BQ0NFU1MiLAotICAiTU9ESUZJRURfQUNDRVNTIiwgIlJFTU9WRURfQUNDRVNTIiwgICAgICAiTk9fQUNDRVNTIgotfTsKLQotY29uc3QgY2hhciogY21WYXJpYWJsZVdhdGNoOjpHZXRBY2Nlc3NBc1N0cmluZyhpbnQgYWNjZXNzX3R5cGUpCitjb25zdCBzdGQ6OnN0cmluZyYgY21WYXJpYWJsZVdhdGNoOjpHZXRBY2Nlc3NBc1N0cmluZyhpbnQgYWNjZXNzX3R5cGUpCiB7CisgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHN0ZDo6c3RyaW5nLCA2PiBjbVZhcmlhYmxlV2F0Y2hBY2Nlc3NTdHJpbmdzID0geworICAgIHsgIlJFQURfQUNDRVNTIiwgIlVOS05PV05fUkVBRF9BQ0NFU1MiLCAiVU5LTk9XTl9ERUZJTkVEX0FDQ0VTUyIsCisgICAgICAiTU9ESUZJRURfQUNDRVNTIiwgIlJFTU9WRURfQUNDRVNTIiwgIk5PX0FDQ0VTUyIgfQorICB9OwogICBpZiAoYWNjZXNzX3R5cGUgPCAwIHx8IGFjY2Vzc190eXBlID49IGNtVmFyaWFibGVXYXRjaDo6Tk9fQUNDRVNTKSB7Ci0gICAgcmV0dXJuICJOT19BQ0NFU1MiOworICAgIGFjY2Vzc190eXBlID0gY21WYXJpYWJsZVdhdGNoOjpOT19BQ0NFU1M7CiAgIH0KICAgcmV0dXJuIGNtVmFyaWFibGVXYXRjaEFjY2Vzc1N0cmluZ3NbYWNjZXNzX3R5cGVdOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmFyaWFibGVXYXRjaC5oIGIvU291cmNlL2NtVmFyaWFibGVXYXRjaC5oCmluZGV4IGU0YjNiN2MuLjZjNDE4ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2guaAorKysgYi9Tb3VyY2UvY21WYXJpYWJsZVdhdGNoLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICovCiAgIGVudW0KICAgewotICAgIFZBUklBQkxFX1JFQURfQUNDRVNTID0gMCwKKyAgICBWQVJJQUJMRV9SRUFEX0FDQ0VTUywKICAgICBVTktOT1dOX1ZBUklBQkxFX1JFQURfQUNDRVNTLAogICAgIFVOS05PV05fVkFSSUFCTEVfREVGSU5FRF9BQ0NFU1MsCiAgICAgVkFSSUFCTEVfTU9ESUZJRURfQUNDRVNTLApAQCAtNTcsNyArNTcsNyBAQAogICAvKioKICAgICogUmV0dXJuIHRoZSBhY2Nlc3MgYXMgc3RyaW5nCiAgICAqLwotICBzdGF0aWMgY29uc3QgY2hhciogR2V0QWNjZXNzQXNTdHJpbmcoaW50IGFjY2Vzc190eXBlKTsKKyAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nJiBHZXRBY2Nlc3NBc1N0cmluZyhpbnQgYWNjZXNzX3R5cGUpOwogCiBwcm90ZWN0ZWQ6CiAgIHN0cnVjdCBQYWlyCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WYXJpYWJsZVdhdGNoQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21WYXJpYWJsZVdhdGNoQ29tbWFuZC5jeHgKaW5kZXggZjJjOGYzYy4uZWNhZTE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmFyaWFibGVXYXRjaENvbW1hbmQuY3h4CisrKyBiL1NvdXJjZS9jbVZhcmlhYmxlV2F0Y2hDb21tYW5kLmN4eApAQCAtMiw2ICsyLDcgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtVmFyaWFibGVXYXRjaENvbW1hbmQuaCIKIAorI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIApAQCAtMTQsMTcgKzE1LDE5IEBACiAjaW5jbHVkZSAiY21WYXJpYWJsZVdhdGNoLmgiCiAjaW5jbHVkZSAiY21ha2UuaCIKIAorY2xhc3MgY21Mb2NhbEdlbmVyYXRvcjsKKworbmFtZXNwYWNlIHsKIHN0cnVjdCBjbVZhcmlhYmxlV2F0Y2hDYWxsYmFja0RhdGEKIHsKICAgYm9vbCBJbkNhbGxiYWNrOwogICBzdGQ6OnN0cmluZyBDb21tYW5kOwogfTsKIAotc3RhdGljIHZvaWQgY21WYXJpYWJsZVdhdGNoQ29tbWFuZFZhcmlhYmxlQWNjZXNzZWQoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFjY2Vzc190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2xpZW50X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuZXdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtTWFrZWZpbGUqIG1mKQordm9pZCBjbVZhcmlhYmxlV2F0Y2hDb21tYW5kVmFyaWFibGVBY2Nlc3NlZChjb25zdCBzdGQ6OnN0cmluZyYgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhY2Nlc3NfdHlwZSwgdm9pZCogY2xpZW50X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5ld1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbU1ha2VmaWxlKiBtZikKIHsKICAgY21WYXJpYWJsZVdhdGNoQ2FsbGJhY2tEYXRhKiBkYXRhID0KICAgICBzdGF0aWNfY2FzdDxjbVZhcmlhYmxlV2F0Y2hDYWxsYmFja0RhdGEqPihjbGllbnRfZGF0YSk7CkBAIC0zNCw0MCArMzcsMzUgQEAKICAgfQogICBkYXRhLT5JbkNhbGxiYWNrID0gdHJ1ZTsKIAotICBjbUxpc3RGaWxlRnVuY3Rpb24gbmV3TEZGOwotICBjbUxpc3RGaWxlQXJndW1lbnQgYXJnOwotICBib29sIHByb2Nlc3NlZCA9IGZhbHNlOwotICBjb25zdCBjaGFyKiBhY2Nlc3NTdHJpbmcgPSBjbVZhcmlhYmxlV2F0Y2g6OkdldEFjY2Vzc0FzU3RyaW5nKGFjY2Vzc190eXBlKTsKLSAgY29uc3QgY2hhciogY3VycmVudExpc3RGaWxlID0gbWYtPkdldERlZmluaXRpb24oIkNNQUtFX0NVUlJFTlRfTElTVF9GSUxFIik7CisgIGF1dG8gYWNjZXNzU3RyaW5nID0gY21WYXJpYWJsZVdhdGNoOjpHZXRBY2Nlc3NBc1N0cmluZyhhY2Nlc3NfdHlwZSk7CiAKICAgLy8vIFVsdHJhIGJhZCEhCiAgIGNtTWFrZWZpbGUqIG1ha2VmaWxlID0gY29uc3RfY2FzdDxjbU1ha2VmaWxlKj4obWYpOwogCi0gIHN0ZDo6c3RyaW5nIHN0YWNrID0gbWFrZWZpbGUtPkdldFByb3BlcnR5KCJMSVNURklMRV9TVEFDSyIpOworICBzdGQ6OnN0cmluZyBzdGFjayA9ICptZi0+R2V0UHJvcGVydHkoIkxJU1RGSUxFX1NUQUNLIik7CiAgIGlmICghZGF0YS0+Q29tbWFuZC5lbXB0eSgpKSB7Ci0gICAgbmV3TEZGLkFyZ3VtZW50cy5jbGVhcigpOwotICAgIG5ld0xGRi5Bcmd1bWVudHMuZW1wbGFjZV9iYWNrKHZhcmlhYmxlLCBjbUxpc3RGaWxlQXJndW1lbnQ6OlF1b3RlZCwgOTk5OSk7Ci0gICAgbmV3TEZGLkFyZ3VtZW50cy5lbXBsYWNlX2JhY2soYWNjZXNzU3RyaW5nLCBjbUxpc3RGaWxlQXJndW1lbnQ6OlF1b3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTk5KTsKLSAgICBuZXdMRkYuQXJndW1lbnRzLmVtcGxhY2VfYmFjayhuZXdWYWx1ZSA/IG5ld1ZhbHVlIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21MaXN0RmlsZUFyZ3VtZW50OjpRdW90ZWQsIDk5OTkpOwotICAgIG5ld0xGRi5Bcmd1bWVudHMuZW1wbGFjZV9iYWNrKGN1cnJlbnRMaXN0RmlsZSwgY21MaXN0RmlsZUFyZ3VtZW50OjpRdW90ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5OSk7Ci0gICAgbmV3TEZGLkFyZ3VtZW50cy5lbXBsYWNlX2JhY2soc3RhY2ssIGNtTGlzdEZpbGVBcmd1bWVudDo6UXVvdGVkLCA5OTk5KTsKKyAgICBjbUxpc3RGaWxlRnVuY3Rpb24gbmV3TEZGOworICAgIGNvbnN0IGNoYXIqIGNvbnN0IGN1cnJlbnRMaXN0RmlsZSA9CisgICAgICBtZi0+R2V0RGVmaW5pdGlvbigiQ01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEUiKTsKKyAgICBjb25zdCBhdXRvIGZha2VMaW5lTm8gPQorICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShjbUxpc3RGaWxlQXJndW1lbnQ6OkxpbmUpPjo6bWF4KCk7CisgICAgbmV3TEZGLkFyZ3VtZW50cyA9IHsKKyAgICAgIHsgdmFyaWFibGUsIGNtTGlzdEZpbGVBcmd1bWVudDo6UXVvdGVkLCBmYWtlTGluZU5vIH0sCisgICAgICB7IGFjY2Vzc1N0cmluZywgY21MaXN0RmlsZUFyZ3VtZW50OjpRdW90ZWQsIGZha2VMaW5lTm8gfSwKKyAgICAgIHsgbmV3VmFsdWUgPyBuZXdWYWx1ZSA6ICIiLCBjbUxpc3RGaWxlQXJndW1lbnQ6OlF1b3RlZCwgZmFrZUxpbmVObyB9LAorICAgICAgeyBjdXJyZW50TGlzdEZpbGUsIGNtTGlzdEZpbGVBcmd1bWVudDo6UXVvdGVkLCBmYWtlTGluZU5vIH0sCisgICAgICB7IHN0YWNrLCBjbUxpc3RGaWxlQXJndW1lbnQ6OlF1b3RlZCwgZmFrZUxpbmVObyB9CisgICAgfTsKICAgICBuZXdMRkYuTmFtZSA9IGRhdGEtPkNvbW1hbmQ7Ci0gICAgbmV3TEZGLkxpbmUgPSA5OTk5OworICAgIG5ld0xGRi5MaW5lID0gZmFrZUxpbmVObzsKICAgICBjbUV4ZWN1dGlvblN0YXR1cyBzdGF0dXMoKm1ha2VmaWxlKTsKICAgICBpZiAoIW1ha2VmaWxlLT5FeGVjdXRlQ29tbWFuZChuZXdMRkYsIHN0YXR1cykpIHsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKAogICAgICAgICBjbVN0ckNhdCgiRXJyb3IgaW4gY21ha2UgY29kZSBhdFxuVW5rbm93bjowOlxuQSBjb21tYW5kIGZhaWxlZCAiCiAgICAgICAgICAgICAgICAgICJkdXJpbmcgdGhlIGludm9jYXRpb24gb2YgY2FsbGJhY2sgXCIiLAogICAgICAgICAgICAgICAgICBkYXRhLT5Db21tYW5kLCAiXCIuIikpOwotICAgICAgZGF0YS0+SW5DYWxsYmFjayA9IGZhbHNlOwotICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwcm9jZXNzZWQgPSB0cnVlOwotICB9Ci0gIGlmICghcHJvY2Vzc2VkKSB7CisgIH0gZWxzZSB7CiAgICAgbWFrZWZpbGUtPklzc3VlTWVzc2FnZSgKICAgICAgIE1lc3NhZ2VUeXBlOjpMT0csCiAgICAgICBjbVN0ckNhdCgiVmFyaWFibGUgXCIiLCB2YXJpYWJsZSwgIlwiIHdhcyBhY2Nlc3NlZCB1c2luZyAiLCBhY2Nlc3NTdHJpbmcsCkBAIC03Nyw3ICs3NSw3IEBACiAgIGRhdGEtPkluQ2FsbGJhY2sgPSBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgZGVsZXRlVmFyaWFibGVXYXRjaENhbGxiYWNrRGF0YSh2b2lkKiBjbGllbnRfZGF0YSkKK3ZvaWQgZGVsZXRlVmFyaWFibGVXYXRjaENhbGxiYWNrRGF0YSh2b2lkKiBjbGllbnRfZGF0YSkKIHsKICAgY21WYXJpYWJsZVdhdGNoQ2FsbGJhY2tEYXRhKiBkYXRhID0KICAgICBzdGF0aWNfY2FzdDxjbVZhcmlhYmxlV2F0Y2hDYWxsYmFja0RhdGEqPihjbGllbnRfZGF0YSk7CkBAIC05MSwxOCArODksMTggQEAKIHB1YmxpYzoKICAgLyogTk9MSU5UTkVYVExJTkUocGVyZm9ybWFuY2UtdW5uZWNlc3NhcnktdmFsdWUtcGFyYW0pICovCiAgIEZpbmFsQWN0aW9uKGNtTWFrZWZpbGUqIG1ha2VmaWxlLCBzdGQ6OnN0cmluZyB2YXJpYWJsZSkKLSAgICA6IEFjdGlvbihzdGQ6Om1ha2Vfc2hhcmVkPEltcGw+KG1ha2VmaWxlLCBzdGQ6Om1vdmUodmFyaWFibGUpKSkKKyAgICA6IEFjdGlvbnsgc3RkOjptYWtlX3NoYXJlZDxJbXBsPihtYWtlZmlsZSwgc3RkOjptb3ZlKHZhcmlhYmxlKSkgfQogICB7CiAgIH0KIAotICB2b2lkIG9wZXJhdG9yKCkoY21NYWtlZmlsZSYpIGNvbnN0IHt9CisgIHZvaWQgb3BlcmF0b3IoKShjbUxvY2FsR2VuZXJhdG9yJiwgY29uc3QgY21MaXN0RmlsZUJhY2t0cmFjZSYpIGNvbnN0IHt9CiAKIHByaXZhdGU6CiAgIHN0cnVjdCBJbXBsCiAgIHsKICAgICBJbXBsKGNtTWFrZWZpbGUqIG1ha2VmaWxlLCBzdGQ6OnN0cmluZyB2YXJpYWJsZSkKLSAgICAgIDogTWFrZWZpbGUobWFrZWZpbGUpCi0gICAgICAsIFZhcmlhYmxlKHN0ZDo6bW92ZSh2YXJpYWJsZSkpCisgICAgICA6IE1ha2VmaWxleyBtYWtlZmlsZSB9CisgICAgICAsIFZhcmlhYmxleyBzdGQ6Om1vdmUodmFyaWFibGUpIH0KICAgICB7CiAgICAgfQogCkBAIC0xMTIsMTIgKzExMCwxMyBAQAogICAgICAgICB0aGlzLT5WYXJpYWJsZSwgY21WYXJpYWJsZVdhdGNoQ29tbWFuZFZhcmlhYmxlQWNjZXNzZWQpOwogICAgIH0KIAotICAgIGNtTWFrZWZpbGUqIE1ha2VmaWxlOwotICAgIHN0ZDo6c3RyaW5nIFZhcmlhYmxlOworICAgIGNtTWFrZWZpbGUqIGNvbnN0IE1ha2VmaWxlOworICAgIHN0ZDo6c3RyaW5nIGNvbnN0IFZhcmlhYmxlOwogICB9OwogCiAgIHN0ZDo6c2hhcmVkX3B0cjxJbXBsIGNvbnN0PiBBY3Rpb247CiB9OworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIGJvb2wgY21WYXJpYWJsZVdhdGNoQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21FeGVjdXRpb25TdGF0dXMmIHN0YXR1cykKQEAgLTEzNiwxMCArMTM1LDEwIEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgY21WYXJpYWJsZVdhdGNoQ2FsbGJhY2tEYXRhKiBkYXRhID0gbmV3IGNtVmFyaWFibGVXYXRjaENhbGxiYWNrRGF0YTsKKyAgYXV0byogY29uc3QgZGF0YSA9IG5ldyBjbVZhcmlhYmxlV2F0Y2hDYWxsYmFja0RhdGE7CiAKICAgZGF0YS0+SW5DYWxsYmFjayA9IGZhbHNlOwotICBkYXRhLT5Db21tYW5kID0gY29tbWFuZDsKKyAgZGF0YS0+Q29tbWFuZCA9IHN0ZDo6bW92ZShjb21tYW5kKTsKIAogICBpZiAoIXN0YXR1cy5HZXRNYWtlZmlsZSgpLkdldENNYWtlSW5zdGFuY2UoKS0+R2V0VmFyaWFibGVXYXRjaCgpLT5BZGRXYXRjaCgKICAgICAgICAgdmFyaWFibGUsIGNtVmFyaWFibGVXYXRjaENvbW1hbmRWYXJpYWJsZUFjY2Vzc2VkLCBkYXRhLApAQCAtMTQ4LDcgKzE0Nyw3IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgc3RhdHVzLkdldE1ha2VmaWxlKCkuQWRkRmluYWxBY3Rpb24oCi0gICAgRmluYWxBY3Rpb24oJnN0YXR1cy5HZXRNYWtlZmlsZSgpLCB2YXJpYWJsZSkpOworICBzdGF0dXMuR2V0TWFrZWZpbGUoKS5BZGRHZW5lcmF0b3JBY3Rpb24oCisgICAgRmluYWxBY3Rpb257ICZzdGF0dXMuR2V0TWFrZWZpbGUoKSwgdmFyaWFibGUgfSk7CiAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmVyc2lvbi5oIGIvU291cmNlL2NtVmVyc2lvbi5oCmluZGV4IGJmZDk5NGQuLjkzMmVmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZlcnNpb24uaAorKysgYi9Tb3VyY2UvY21WZXJzaW9uLmgKQEAgLTMsNyArMyw3IEBACiAjaWZuZGVmIGNtVmVyc2lvbl9oCiAjZGVmaW5lIGNtVmVyc2lvbl9oCiAKLSNpbmNsdWRlICJjbV9rd2ltbC5oIgorI2luY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKIC8qKiBcY2xhc3MgY21WZXJzaW9uCiAgKiBcYnJpZWYgSGVscGVyIGNsYXNzIGZvciBwcm92aWRpbmcgQ01ha2UgYW5kIENUZXN0IHZlcnNpb24gaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvci5jeHggYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvci5jeHgKaW5kZXggYjMzY2I1MC4uNjM2OWMxZiAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3IuY3h4CisrKyBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yLmN4eApAQCAtNiwxMCArNiwxMiBAQAogI2luY2x1ZGUgPHNldD4KIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjbS92ZWN0b3I+CisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgogCiAjaW5jbHVkZSAid2luZG93cy5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21Db21wdXRlTGlua0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kLmgiCiAjaW5jbHVkZSAiY21DdXN0b21Db21tYW5kR2VuZXJhdG9yLmgiCkBAIC0xNywxMCArMTksMTIgQEAKICNpbmNsdWRlICJjbUdlbmVyYXRvckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgogI2luY2x1ZGUgImNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJjbUdsb2JhbFZpc3VhbFN0dWRpb1ZlcnNpb25lZEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTGlua0xpbmVEZXZpY2VDb21wdXRlci5oIgogI2luY2x1ZGUgImNtTG9jYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKICNpbmNsdWRlICJjbVNvdXJjZUZpbGUuaCIKKyNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCiAjaW5jbHVkZSAiY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmgiCiAKQEAgLTUyLDcgKzU2LDcgQEAKICAgYm9vbCBIYXNDb250ZW50ID0gZmFsc2U7CiAgIHN0ZDo6c3RyaW5nIFRhZzsKIAotICBFbGVtKHN0ZDo6b3N0cmVhbSYgcywgY29uc3QgY2hhciogdGFnKQorICBFbGVtKHN0ZDo6b3N0cmVhbSYgcywgY29uc3Qgc3RkOjpzdHJpbmcmIHRhZykKICAgICA6IFMocykKICAgICAsIEluZGVudCgwKQogICAgICwgVGFnKHRhZykKQEAgLTYwLDEwICs2NCwxMCBAQAogICAgIHRoaXMtPlN0YXJ0RWxlbWVudCgpOwogICB9CiAgIEVsZW0oY29uc3QgRWxlbSYpID0gZGVsZXRlOwotICBFbGVtKEVsZW0mIHBhciwgY29uc3QgY2hhciogdGFnKQorICBFbGVtKEVsZW0mIHBhciwgY206OnN0cmluZ192aWV3IHRhZykKICAgICA6IFMocGFyLlMpCiAgICAgLCBJbmRlbnQocGFyLkluZGVudCArIDEpCi0gICAgLCBUYWcodGFnKQorICAgICwgVGFnKHN0ZDo6c3RyaW5nKHRhZykpCiAgIHsKICAgICBwYXIuU2V0SGFzRWxlbWVudHMoKTsKICAgICB0aGlzLT5TdGFydEVsZW1lbnQoKTsKQEAgLTcxLDI4ICs3NSwyOCBAQAogICB2b2lkIFNldEhhc0VsZW1lbnRzKCkKICAgewogICAgIGlmICghSGFzRWxlbWVudHMpIHsKLSAgICAgIHRoaXMtPlMgPDwgIj5cbiI7CisgICAgICB0aGlzLT5TIDw8ICI+IjsKICAgICAgIEhhc0VsZW1lbnRzID0gdHJ1ZTsKICAgICB9CiAgIH0KICAgc3RkOjpvc3RyZWFtJiBXcml0ZVN0cmluZyhjb25zdCBjaGFyKiBsaW5lKTsKICAgdm9pZCBTdGFydEVsZW1lbnQoKSB7IHRoaXMtPldyaXRlU3RyaW5nKCI8IikgPDwgdGhpcy0+VGFnOyB9Ci0gIHZvaWQgRWxlbWVudChjb25zdCBjaGFyKiB0YWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWwpCisgIHZvaWQgRWxlbWVudChjbTo6c3RyaW5nX3ZpZXcgdGFnLCBzdGQ6OnN0cmluZyB2YWwpCiAgIHsKLSAgICBFbGVtKCp0aGlzLCB0YWcpLkNvbnRlbnQodmFsKTsKKyAgICBFbGVtKCp0aGlzLCB0YWcpLkNvbnRlbnQoc3RkOjptb3ZlKHZhbCkpOwogICB9Ci0gIEVsZW0mIEF0dHJpYnV0ZShjb25zdCBjaGFyKiBhbiwgY29uc3Qgc3RkOjpzdHJpbmcmIGF2KQorICBFbGVtJiBBdHRyaWJ1dGUoY29uc3QgY2hhciogYW4sIHN0ZDo6c3RyaW5nIGF2KQogICB7Ci0gICAgdGhpcy0+UyA8PCAiICIgPDwgYW4gPDwgIj1cIiIgPDwgY21WUzEwRXNjYXBlQXR0cihhdikgPDwgIlwiIjsKKyAgICB0aGlzLT5TIDw8ICIgIiA8PCBhbiA8PCAiPVwiIiA8PCBjbVZTMTBFc2NhcGVBdHRyKHN0ZDo6bW92ZShhdikpIDw8ICJcIiI7CiAgICAgcmV0dXJuICp0aGlzOwogICB9Ci0gIHZvaWQgQ29udGVudChjb25zdCBzdGQ6OnN0cmluZyYgdmFsKQorICB2b2lkIENvbnRlbnQoc3RkOjpzdHJpbmcgdmFsKQogICB7CiAgICAgaWYgKCF0aGlzLT5IYXNDb250ZW50KSB7CiAgICAgICB0aGlzLT5TIDw8ICI+IjsKICAgICAgIHRoaXMtPkhhc0NvbnRlbnQgPSB0cnVlOwogICAgIH0KLSAgICB0aGlzLT5TIDw8IGNtVlMxMEVzY2FwZVhNTCh2YWwpOworICAgIHRoaXMtPlMgPDwgY21WUzEwRXNjYXBlWE1MKHN0ZDo6bW92ZSh2YWwpKTsKICAgfQogICB+RWxlbSgpCiAgIHsKQEAgLTEwMywxOSArMTA3LDE0IEBACiAKICAgICBpZiAoSGFzRWxlbWVudHMpIHsKICAgICAgIHRoaXMtPldyaXRlU3RyaW5nKCI8LyIpIDw8IHRoaXMtPlRhZyA8PCAiPiI7Ci0gICAgICBpZiAodGhpcy0+SW5kZW50ID4gMCkgewotICAgICAgICB0aGlzLT5TIDw8ICdcbic7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGRvbid0IHByaW50IEVPTCBhdCBFT0YKLSAgICAgIH0KICAgICB9IGVsc2UgaWYgKEhhc0NvbnRlbnQpIHsKLSAgICAgIHRoaXMtPlMgPDwgIjwvIiA8PCB0aGlzLT5UYWcgPDwgIj5cbiI7CisgICAgICB0aGlzLT5TIDw8ICI8LyIgPDwgdGhpcy0+VGFnIDw8ICI+IjsKICAgICB9IGVsc2UgewotICAgICAgdGhpcy0+UyA8PCAiIC8+XG4iOworICAgICAgdGhpcy0+UyA8PCAiIC8+IjsKICAgICB9CiAgIH0KIAotICB2b2lkIFdyaXRlUGxhdGZvcm1Db25maWdUYWcoY29uc3QgY2hhciogdGFnLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZCwKKyAgdm9pZCBXcml0ZVBsYXRmb3JtQ29uZmlnVGFnKGNvbnN0IHN0ZDo6c3RyaW5nJiB0YWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQpOwogfTsKIApAQCAtMTMxLDggKzEzMCw4IEBACiAgIHsKICAgfQogCi0gIHZvaWQgT3V0cHV0RmxhZyhzdGQ6Om9zdHJlYW0mIC8qZm91dCovLCBpbnQgLyppbmRlbnQqLywgY29uc3QgY2hhciogdGFnLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQpIG92ZXJyaWRlCisgIHZvaWQgT3V0cHV0RmxhZyhzdGQ6Om9zdHJlYW0mIC8qZm91dCovLCBpbnQgLyppbmRlbnQqLywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50KSBvdmVycmlkZQogICB7CiAgICAgaWYgKCF0aGlzLT5HZXRDb25maWd1cmF0aW9uKCkuZW1wdHkoKSkgewogICAgICAgLy8gaWYgdGhlcmUgYXJlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWMgZmxhZ3MsIHRoZW4KQEAgLTIzMywxNSArMjMyLDE3IEBACiAgICwgTG9jYWxHZW5lcmF0b3IoCiAgICAgICAoY21Mb2NhbFZpc3VhbFN0dWRpbzEwR2VuZXJhdG9yKil0YXJnZXQtPkdldExvY2FsR2VuZXJhdG9yKCkpCiB7Ci0gIHRoaXMtPk1ha2VmaWxlLT5HZXRDb25maWd1cmF0aW9ucyh0aGlzLT5Db25maWd1cmF0aW9ucyk7CisgIHRoaXMtPkNvbmZpZ3VyYXRpb25zID0KKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0R2VuZXJhdG9yQ29uZmlncyhjbU1ha2VmaWxlOjpFeGNsdWRlRW1wdHlDb25maWcpOwogICB0aGlzLT5Oc2lnaHRUZWdyYSA9IGdnLT5Jc05zaWdodFRlZ3JhKCk7CisgIHRoaXMtPkFuZHJvaWQgPSBnZy0+VGFyZ2V0c0FuZHJvaWQoKTsKICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICB0aGlzLT5Oc2lnaHRUZWdyYVZlcnNpb25baV0gPSAwOwogICB9CiAgIHNzY2FuZihnZy0+R2V0TnNpZ2h0VGVncmFWZXJzaW9uKCkuY19zdHIoKSwgIiV1LiV1LiV1LiV1IiwKICAgICAgICAgICZ0aGlzLT5Oc2lnaHRUZWdyYVZlcnNpb25bMF0sICZ0aGlzLT5Oc2lnaHRUZWdyYVZlcnNpb25bMV0sCiAgICAgICAgICAmdGhpcy0+TnNpZ2h0VGVncmFWZXJzaW9uWzJdLCAmdGhpcy0+TnNpZ2h0VGVncmFWZXJzaW9uWzNdKTsKLSAgdGhpcy0+TVNUb29scyA9ICF0aGlzLT5Oc2lnaHRUZWdyYTsKKyAgdGhpcy0+TVNUb29scyA9ICF0aGlzLT5Oc2lnaHRUZWdyYSAmJiAhdGhpcy0+QW5kcm9pZDsKICAgdGhpcy0+TWFuYWdlZCA9IGZhbHNlOwogICB0aGlzLT5UYXJnZXRDb21waWxlQXNXaW5SVCA9IGZhbHNlOwogICB0aGlzLT5Jc01pc3NpbmdGaWxlcyA9IGZhbHNlOwpAQCAtMjUwLDYgKzI1MSw3IEBACiAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFRhcmdldERpcmVjdG9yeSh0aGlzLT5HZW5lcmF0b3JUYXJnZXQpOwogICB0aGlzLT5JblNvdXJjZUJ1aWxkID0gKHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkgPT0KICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpKTsKKyAgdGhpcy0+Q2xhc3NpZnlBbGxDb25maWdTb3VyY2VzKCk7CiB9CiAKIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6On5jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yKCkKQEAgLTI3NCw3ICsyNzYsNyBAQAogfQogCiB2b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OkVsZW06OldyaXRlUGxhdGZvcm1Db25maWdUYWcoCi0gIGNvbnN0IGNoYXIqIHRhZywgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50KQorICBjb25zdCBzdGQ6OnN0cmluZyYgdGFnLCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQpCiB7CiAgIEVsZW0oKnRoaXMsIHRhZykuQXR0cmlidXRlKCJDb25kaXRpb24iLCBjb25kKS5Db250ZW50KGNvbnRlbnQpOwogfQpAQCAtMjgyLDYgKzI4NCw3IEBACiBzdGQ6Om9zdHJlYW0mIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OkVsZW06OldyaXRlU3RyaW5nKAogICBjb25zdCBjaGFyKiBsaW5lKQogeworICB0aGlzLT5TIDw8ICdcbic7CiAgIHRoaXMtPlMuZmlsbCgnICcpOwogICB0aGlzLT5TLndpZHRoKHRoaXMtPkluZGVudCAqIDIpOwogICAvLyB3cml0ZSBhbiBlbXB0eSBzdHJpbmcgdG8gZ2V0IHRoZSBmaWxsIGxldmVsIGluZGVudCB0byBwcmludApAQCAtMzMyLDExICszMzUsMTggQEAKICAgICB0aGlzLT5Qcm9qZWN0VHlwZSA9IGNzcHJvajsKICAgICB0aGlzLT5NYW5hZ2VkID0gdHJ1ZTsKICAgfQorCisgIGlmICh0aGlzLT5BbmRyb2lkICYmCisgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA9PSBjbVN0YXRlRW51bXM6OkVYRUNVVEFCTEUgJiYKKyAgICAgICF0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPlRhcmdldC0+SXNBbmRyb2lkR3VpRXhlY3V0YWJsZSgpKSB7CisgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5BZGRBbmRyb2lkRXhlY3V0YWJsZVdhcm5pbmcodGhpcy0+TmFtZSk7CisgIH0KKwogICAvLyBUZWxsIHRoZSBnbG9iYWwgZ2VuZXJhdG9yIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IGZpbGUKICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPk5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5OYW1lKTsKICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPlNldFByb3BlcnR5KCJHRU5FUkFUT1JfRklMRV9OQU1FX0VYVCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0RmlsZUV4dGVuc2lvbi5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3RGaWxlRXh0ZW5zaW9uKTsKICAgdGhpcy0+RG90TmV0SGludFJlZmVyZW5jZXMuY2xlYXIoKTsKICAgdGhpcy0+QWRkaXRpb25hbFVzaW5nRGlyZWN0b3JpZXMuY2xlYXIoKTsKICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpIDw9IGNtU3RhdGVFbnVtczo6T0JKRUNUX0xJQlJBUlkpIHsKQEAgLTM3Niw4ICszODYsNyBAQAogICBjaGFyIG1hZ2ljW10gPSB7IGNoYXIoMHhFRiksIGNoYXIoMHhCQiksIGNoYXIoMHhCRikgfTsKICAgQnVpbGRGaWxlU3RyZWFtLndyaXRlKG1hZ2ljLCAzKTsKICAgQnVpbGRGaWxlU3RyZWFtIDw8ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCIiCi0gICAgICAgICAgICAgICAgICA8PCB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkVuY29kaW5nKCkgPDwgIlwiPz4iCi0gICAgICAgICAgICAgICAgICA8PCAiXG4iOworICAgICAgICAgICAgICAgICAgPDwgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5FbmNvZGluZygpIDw8ICJcIj8+IjsKICAgewogICAgIEVsZW0gZTAoQnVpbGRGaWxlU3RyZWFtLCAiUHJvamVjdCIpOwogICAgIGUwLkF0dHJpYnV0ZSgiRGVmYXVsdFRhcmdldHMiLCAiQnVpbGQiKTsKQEAgLTQyNywzOCArNDM2LDM4IEBACiAgICAgICBlMS5BdHRyaWJ1dGUoIkxhYmVsIiwgIkdsb2JhbHMiKTsKICAgICAgIGUxLkVsZW1lbnQoIlByb2plY3RHdWlkIiwgInsiICsgdGhpcy0+R1VJRCArICJ9Iik7CiAKLSAgICAgIGlmICh0aGlzLT5NU1Rvb2xzICYmCisgICAgICBpZiAoKHRoaXMtPk1TVG9vbHMgfHwgdGhpcy0+QW5kcm9pZCkgJiYKICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSA8PSBjbVN0YXRlRW51bXM6OkdMT0JBTF9UQVJHRVQpIHsKICAgICAgICAgdGhpcy0+V3JpdGVBcHBsaWNhdGlvblR5cGVTZXR0aW5ncyhlMSk7CiAgICAgICAgIHRoaXMtPlZlcmlmeU5lY2Vzc2FyeUZpbGVzKCk7CiAgICAgICB9CiAKLSAgICAgIGNvbnN0IGNoYXIqIHZzUHJvamVjdFR5cGVzID0KKyAgICAgIGNtUHJvcCB2c1Byb2plY3RUeXBlcyA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0dMT0JBTF9QUk9KRUNUX1RZUEVTIik7CiAgICAgICBpZiAodnNQcm9qZWN0VHlwZXMpIHsKICAgICAgICAgY29uc3QgY2hhciogdGFnTmFtZSA9ICJQcm9qZWN0VHlwZXMiOwogICAgICAgICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qKSB7CiAgICAgICAgICAgdGFnTmFtZSA9ICJQcm9qZWN0VHlwZUd1aWRzIjsKICAgICAgICAgfQotICAgICAgICBlMS5FbGVtZW50KHRhZ05hbWUsIHZzUHJvamVjdFR5cGVzKTsKKyAgICAgICAgZTEuRWxlbWVudCh0YWdOYW1lLCAqdnNQcm9qZWN0VHlwZXMpOwogICAgICAgfQogCi0gICAgICBjb25zdCBjaGFyKiB2c1Byb2plY3ROYW1lID0KKyAgICAgIGNtUHJvcCB2c1Byb2plY3ROYW1lID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfU0NDX1BST0pFQ1ROQU1FIik7Ci0gICAgICBjb25zdCBjaGFyKiB2c0xvY2FsUGF0aCA9CisgICAgICBjbVByb3AgdnNMb2NhbFBhdGggPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19TQ0NfTE9DQUxQQVRIIik7Ci0gICAgICBjb25zdCBjaGFyKiB2c1Byb3ZpZGVyID0KKyAgICAgIGNtUHJvcCB2c1Byb3ZpZGVyID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfU0NDX1BST1ZJREVSIik7CiAKICAgICAgIGlmICh2c1Byb2plY3ROYW1lICYmIHZzTG9jYWxQYXRoICYmIHZzUHJvdmlkZXIpIHsKLSAgICAgICAgZTEuRWxlbWVudCgiU2NjUHJvamVjdE5hbWUiLCB2c1Byb2plY3ROYW1lKTsKLSAgICAgICAgZTEuRWxlbWVudCgiU2NjTG9jYWxQYXRoIiwgdnNMb2NhbFBhdGgpOwotICAgICAgICBlMS5FbGVtZW50KCJTY2NQcm92aWRlciIsIHZzUHJvdmlkZXIpOworICAgICAgICBlMS5FbGVtZW50KCJTY2NQcm9qZWN0TmFtZSIsICp2c1Byb2plY3ROYW1lKTsKKyAgICAgICAgZTEuRWxlbWVudCgiU2NjTG9jYWxQYXRoIiwgKnZzTG9jYWxQYXRoKTsKKyAgICAgICAgZTEuRWxlbWVudCgiU2NjUHJvdmlkZXIiLCAqdnNQcm92aWRlcik7CiAKLSAgICAgICAgY29uc3QgY2hhciogdnNBdXhQYXRoID0KKyAgICAgICAgY21Qcm9wIHZzQXV4UGF0aCA9CiAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfU0NDX0FVWFBBVEgiKTsKICAgICAgICAgaWYgKHZzQXV4UGF0aCkgewotICAgICAgICAgIGUxLkVsZW1lbnQoIlNjY0F1eFBhdGgiLCB2c0F1eFBhdGgpOworICAgICAgICAgIGUxLkVsZW1lbnQoIlNjY0F1eFBhdGgiLCAqdnNBdXhQYXRoKTsKICAgICAgICAgfQogICAgICAgfQogCkBAIC00NjYsNDUgKzQ3NSw1OCBAQAogICAgICAgICBlMS5FbGVtZW50KCJXaW5NREFzc2VtYmx5IiwgInRydWUiKTsKICAgICAgIH0KIAotICAgICAgY29uc3QgY2hhciogdnNHbG9iYWxLZXl3b3JkID0KKyAgICAgIGNtUHJvcCB2c0dsb2JhbEtleXdvcmQgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19HTE9CQUxfS0VZV09SRCIpOwogICAgICAgaWYgKCF2c0dsb2JhbEtleXdvcmQpIHsKLSAgICAgICAgZTEuRWxlbWVudCgiS2V5d29yZCIsICJXaW4zMlByb2oiKTsKKyAgICAgICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c0FuZHJvaWQoKSkgeworICAgICAgICAgIGUxLkVsZW1lbnQoIktleXdvcmQiLCAiQW5kcm9pZCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGUxLkVsZW1lbnQoIktleXdvcmQiLCAiV2luMzJQcm9qIik7CisgICAgICAgIH0KICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGUxLkVsZW1lbnQoIktleXdvcmQiLCB2c0dsb2JhbEtleXdvcmQpOworICAgICAgICBlMS5FbGVtZW50KCJLZXl3b3JkIiwgKnZzR2xvYmFsS2V5d29yZCk7CiAgICAgICB9CiAKLSAgICAgIGNvbnN0IGNoYXIqIHZzR2xvYmFsUm9vdE5hbWVzcGFjZSA9CisgICAgICBjbVByb3AgdnNHbG9iYWxSb290TmFtZXNwYWNlID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfR0xPQkFMX1JPT1ROQU1FU1BBQ0UiKTsKICAgICAgIGlmICh2c0dsb2JhbFJvb3ROYW1lc3BhY2UpIHsKLSAgICAgICAgZTEuRWxlbWVudCgiUm9vdE5hbWVzcGFjZSIsIHZzR2xvYmFsUm9vdE5hbWVzcGFjZSk7CisgICAgICAgIGUxLkVsZW1lbnQoIlJvb3ROYW1lc3BhY2UiLCAqdnNHbG9iYWxSb290TmFtZXNwYWNlKTsKICAgICAgIH0KIAogICAgICAgZTEuRWxlbWVudCgiUGxhdGZvcm0iLCB0aGlzLT5QbGF0Zm9ybSk7Ci0gICAgICBjb25zdCBjaGFyKiBwcm9qTGFiZWwgPQotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJQUk9KRUNUX0xBQkVMIik7CisgICAgICBjbVByb3AgcHJvakxhYmVsID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiUFJPSkVDVF9MQUJFTCIpOwogICAgICAgaWYgKCFwcm9qTGFiZWwpIHsKLSAgICAgICAgcHJvakxhYmVsID0gdGhpcy0+TmFtZS5jX3N0cigpOworICAgICAgICBwcm9qTGFiZWwgPSAmdGhpcy0+TmFtZTsKICAgICAgIH0KLSAgICAgIGUxLkVsZW1lbnQoIlByb2plY3ROYW1lIiwgcHJvakxhYmVsKTsKKyAgICAgIGUxLkVsZW1lbnQoIlByb2plY3ROYW1lIiwgKnByb2pMYWJlbCk7CiAgICAgICB7Ci0gICAgICAgIC8vIFRPRE86IGFkZCBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBWU18qIHByb3BlcnR5PwotICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uID0KLSAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAorICAgICAgICBjbVByb3AgdGFyZ2V0RnJhbWV3b3JrID0KKyAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJET1RORVRfVEFSR0VUX0ZSQU1FV09SSyIpOworICAgICAgICBpZiAodGFyZ2V0RnJhbWV3b3JrKSB7CisgICAgICAgICAgaWYgKHN0ZDo6c3RyY2hyKHRhcmdldEZyYW1ld29yay0+Y19zdHIoKSwgJzsnKSAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBlMS5FbGVtZW50KCJUYXJnZXRGcmFtZXdvcmtzIiwgKnRhcmdldEZyYW1ld29yayk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGUxLkVsZW1lbnQoIlRhcmdldEZyYW1ld29yayIsICp0YXJnZXRGcmFtZXdvcmspOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBUT0RPOiBhZGQgZGVwcmVjYXRpb24gd2FybmluZyBmb3IgVlNfKiBwcm9wZXJ0eT8KKyAgICAgICAgICBjbVByb3AgcCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCiAgICAgICAgICAgICAiVlNfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTiIpOwotICAgICAgICBpZiAoIXRhcmdldEZyYW1ld29ya1ZlcnNpb24pIHsKLSAgICAgICAgICB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKLSAgICAgICAgICAgICJET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0YXJnZXRGcmFtZXdvcmtWZXJzaW9uICYmIHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJgotICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c0NFKCkgJiYKLSAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0VmVyc2lvbigpID09Ci0gICAgICAgICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzEyKSB7Ci0gICAgICAgICAgLy8gVlMxMiAuTkVUQ0YgZGVmYXVsdCB0byAuTkVUIGZyYW1ld29yayAzLjkKLSAgICAgICAgICB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uID0gInYzLjkiOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0YXJnZXRGcmFtZXdvcmtWZXJzaW9uKSB7Ci0gICAgICAgICAgZTEuRWxlbWVudCgiVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiIsIHRhcmdldEZyYW1ld29ya1ZlcnNpb24pOworICAgICAgICAgIGlmICghcCkgeworICAgICAgICAgICAgcCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCisgICAgICAgICAgICAgICJET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OIik7CisgICAgICAgICAgfQorICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldEZyYW1ld29ya1ZlcnNpb24gPSBwID8gcC0+Y19zdHIoKSA6IG51bGxwdHI7CisgICAgICAgICAgaWYgKCF0YXJnZXRGcmFtZXdvcmtWZXJzaW9uICYmIHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJgorICAgICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzQ0UoKSAmJgorICAgICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldFZlcnNpb24oKSA9PQorICAgICAgICAgICAgICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpWUzEyKSB7CisgICAgICAgICAgICAvLyBWUzEyIC5ORVRDRiBkZWZhdWx0IHRvIC5ORVQgZnJhbWV3b3JrIDMuOQorICAgICAgICAgICAgdGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiA9ICJ2My45IjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRhcmdldEZyYW1ld29ya1ZlcnNpb24pIHsKKyAgICAgICAgICAgIGUxLkVsZW1lbnQoIlRhcmdldEZyYW1ld29ya1ZlcnNpb24iLCB0YXJnZXRGcmFtZXdvcmtWZXJzaW9uKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IHZjeHByb2ogJiYKICAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NDRSgpKSB7CkBAIC01MTMsMTggKzUzNSwxNSBAQAogICAgICAgICB9CiAgICAgICAgIGlmICh0aGlzLT5Qcm9qZWN0VHlwZSA9PSBjc3Byb2ogJiYKICAgICAgICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NDRSgpKSB7Ci0gICAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0RnJhbWV3b3JrSWQgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAorICAgICAgICAgIGNtUHJvcCB0YXJnZXRGcmFtZXdvcmtJZCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCiAgICAgICAgICAgICAiVlNfVEFSR0VUX0ZSQU1FV09SS19JREVOVElGSUVSIik7Ci0gICAgICAgICAgaWYgKCF0YXJnZXRGcmFtZXdvcmtJZCkgewotICAgICAgICAgICAgdGFyZ2V0RnJhbWV3b3JrSWQgPSAiV2luZG93c0VtYmVkZGVkQ29tcGFjdCI7Ci0gICAgICAgICAgfQotICAgICAgICAgIGUxLkVsZW1lbnQoIlRhcmdldEZyYW1ld29ya0lkZW50aWZpZXIiLCB0YXJnZXRGcmFtZXdvcmtJZCk7Ci0gICAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0RnJhbWV3b3JrVmVyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKKyAgICAgICAgICBlMS5FbGVtZW50KCJUYXJnZXRGcmFtZXdvcmtJZGVudGlmaWVyIiwKKyAgICAgICAgICAgICAgICAgICAgIHRhcmdldEZyYW1ld29ya0lkID8gKnRhcmdldEZyYW1ld29ya0lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJXaW5kb3dzRW1iZWRkZWRDb21wYWN0Iik7CisgICAgICAgICAgY21Qcm9wIHRhcmdldEZyYW1ld29ya1ZlciA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCiAgICAgICAgICAgICAiVlNfVEFSR0VUX0ZSQU1FV09SS1NfVEFSR0VUX1ZFUlNJT04iKTsKLSAgICAgICAgICBpZiAoIXRhcmdldEZyYW1ld29ya1ZlcikgewotICAgICAgICAgICAgdGFyZ2V0RnJhbWV3b3JrVmVyID0gInY4LjAiOwotICAgICAgICAgIH0KLSAgICAgICAgICBlMS5FbGVtZW50KCJUYXJnZXRGcmFtZXdvcmtUYXJnZXRzVmVyc2lvbiIsIHRhcmdldEZyYW1ld29ya1Zlcik7CisgICAgICAgICAgZTEuRWxlbWVudCgiVGFyZ2V0RnJhbWV3b3JrVGFyZ2V0c1ZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RnJhbWV3b3JrVmVyID8gKnRhcmdldEZyYW1ld29ya1ZlciA6ICJ2OC4wIik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldFBsYXRmb3JtVG9vbHNldEN1ZGFDdXN0b21EaXJTdHJpbmcoKQogICAgICAgICAgICAgICAgLmVtcHR5KCkpIHsKQEAgLTU0MywyMSArNTYyLDI3IEBACiAgICAgICAgIGUxLkVsZW1lbnQoIlZDUHJvamVjdFVwZ3JhZGVyT2JqZWN0TmFtZSIsICJOb1VwZ3JhZGUiKTsKICAgICAgIH0KIAorICAgICAgaWYgKGNvbnN0IGNoYXIqIHZjVGFyZ2V0c1BhdGggPQorICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRDdXN0b21WQ1RhcmdldHNQYXRoKCkpIHsKKyAgICAgICAgZTEuRWxlbWVudCgiVkNUYXJnZXRzUGF0aCIsIHZjVGFyZ2V0c1BhdGgpOworICAgICAgfQorCiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5cyA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHlLZXlzKCk7CiAgICAgICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBrZXlJdCA6IGtleXMpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHByZWZpeCA9ICJWU19HTE9CQUxfIjsKLSAgICAgICAgaWYgKGtleUl0LmZpbmQocHJlZml4KSAhPSAwKQorICAgICAgICBzdGF0aWMgY29uc3QgY206OnN0cmluZ192aWV3IHByZWZpeCA9ICJWU19HTE9CQUxfIjsKKyAgICAgICAgaWYgKCFjbUhhc1ByZWZpeChrZXlJdCwgcHJlZml4KSkKICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RkOjpzdHJpbmcgZ2xvYmFsS2V5ID0ga2V5SXQuc3Vic3RyKHN0cmxlbihwcmVmaXgpKTsKKyAgICAgICAgY206OnN0cmluZ192aWV3IGdsb2JhbEtleSA9CisgICAgICAgICAgY206OnN0cmluZ192aWV3KGtleUl0KS5zdWJzdHIocHJlZml4Lmxlbmd0aCgpKTsKICAgICAgICAgLy8gU2tpcCBpbnZhbGlkIG9yIHNlcGFyYXRlbHktaGFuZGxlZCBwcm9wZXJ0aWVzLgogICAgICAgICBpZiAoZ2xvYmFsS2V5LmVtcHR5KCkgfHwgZ2xvYmFsS2V5ID09ICJQUk9KRUNUX1RZUEVTIiB8fAogICAgICAgICAgICAgZ2xvYmFsS2V5ID09ICJST09UTkFNRVNQQUNFIiB8fCBnbG9iYWxLZXkgPT0gIktFWVdPUkQiKSB7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3QgY2hhciogdmFsdWUgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGtleUl0KTsKKyAgICAgICAgY21Qcm9wIHZhbHVlID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShrZXlJdCk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGUxLkVsZW1lbnQoZ2xvYmFsS2V5LmNfc3RyKCksIHZhbHVlKTsKKyAgICAgICAgZTEuRWxlbWVudChnbG9iYWxLZXksICp2YWx1ZSk7CiAgICAgICB9CiAKICAgICAgIGlmICh0aGlzLT5NYW5hZ2VkKSB7CkBAIC02NDYsNyArNjcxLDcgQEAKICAgICAgICAgICBjbVN0ckNhdCh0aGlzLT5EZWZhdWx0QXJ0aWZhY3REaXIsICJcXG5hc20ucHJvcHMiKTsKICAgICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKHByb3BzTG9jYWwpOwogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+Q29uZmlndXJlRmlsZShwcm9wc1RlbXBsYXRlLCBwcm9wc0xvY2FsLCBmYWxzZSwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHRydWUpOwogICAgICAgICBFbGVtKGUxLCAiSW1wb3J0IikuQXR0cmlidXRlKCJQcm9qZWN0IiwgcHJvcHNMb2NhbCk7CiAgICAgICB9CiAgICAgfQpAQCAtNjYyLDkgKzY4Nyw4IEBACiAgICAgICAgICAgcHJvcHMgPSBWUzEwX0NTaGFycF9VU0VSX1BST1BTOwogICAgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgICAgaWYgKGNvbnN0IGNoYXIqIHAgPQotICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfVVNFUl9QUk9QUyIpKSB7Ci0gICAgICAgIHByb3BzID0gcDsKKyAgICAgIGlmIChjbVByb3AgcCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1VTRVJfUFJPUFMiKSkgeworICAgICAgICBwcm9wcyA9ICpwOwogICAgICAgfQogICAgICAgaWYgKCFwcm9wcy5lbXB0eSgpKSB7CiAgICAgICAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChwcm9wcyk7CkBAIC02NzYsNiArNzAwLDggQEAKIAogICAgICAgdGhpcy0+V3JpdGVQbGF0Zm9ybUV4dGVuc2lvbnMoZTEpOwogICAgIH0KKworICAgIHRoaXMtPldyaXRlRG90TmV0RG9jdW1lbnRhdGlvbkZpbGUoZTApOwogICAgIEVsZW0oZTAsICJQcm9wZXJ0eUdyb3VwIikuQXR0cmlidXRlKCJMYWJlbCIsICJVc2VyTWFjcm9zIik7CiAgICAgdGhpcy0+V3JpdGVXaW5SVFBhY2thZ2VDZXJ0aWZpY2F0ZUtleUZpbGUoZTApOwogICAgIHRoaXMtPldyaXRlUGF0aEFuZEluY3JlbWVudGFsTGlua09wdGlvbnMoZTApOwpAQCAtNzY4LDUwICs3OTQsNDEgQEAKIHZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVQYWNrYWdlUmVmZXJlbmNlcyhFbGVtJiBlMCkKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhY2thZ2VSZWZlcmVuY2VzOwotICBpZiAoY29uc3QgY2hhciogdnNQYWNrYWdlUmVmZXJlbmNlcyA9CisgIGlmIChjbVByb3AgdnNQYWNrYWdlUmVmZXJlbmNlcyA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1BBQ0tBR0VfUkVGRVJFTkNFUyIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KHZzUGFja2FnZVJlZmVyZW5jZXMsIHBhY2thZ2VSZWZlcmVuY2VzKTsKKyAgICBjbUV4cGFuZExpc3QoKnZzUGFja2FnZVJlZmVyZW5jZXMsIHBhY2thZ2VSZWZlcmVuY2VzKTsKICAgfQogICBpZiAoIXBhY2thZ2VSZWZlcmVuY2VzLmVtcHR5KCkpIHsKICAgICBFbGVtIGUxKGUwLCAiSXRlbUdyb3VwIik7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcmkgOiBwYWNrYWdlUmVmZXJlbmNlcykgewogICAgICAgc2l6ZV90IHZlcnNpb25JbmRleCA9IHJpLmZpbmRfbGFzdF9vZignXycpOwogICAgICAgaWYgKHZlcnNpb25JbmRleCAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBXcml0ZVBhY2thZ2VSZWZlcmVuY2UoZTEsIHJpLnN1YnN0cigwLCB2ZXJzaW9uSW5kZXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmkuc3Vic3RyKHZlcnNpb25JbmRleCArIDEpKTsKKyAgICAgICAgRWxlbSBlMihlMSwgIlBhY2thZ2VSZWZlcmVuY2UiKTsKKyAgICAgICAgZTIuQXR0cmlidXRlKCJJbmNsdWRlIiwgcmkuc3Vic3RyKDAsIHZlcnNpb25JbmRleCkpOworICAgICAgICBlMi5BdHRyaWJ1dGUoIlZlcnNpb24iLCByaS5zdWJzdHIodmVyc2lvbkluZGV4ICsgMSkpOwogICAgICAgfQogICAgIH0KICAgfQogfQogCi12b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OldyaXRlUGFja2FnZVJlZmVyZW5jZSgKLSAgRWxlbSYgZTEsIHN0ZDo6c3RyaW5nIGNvbnN0JiByZWYsIHN0ZDo6c3RyaW5nIGNvbnN0JiB2ZXJzaW9uKQotewotICBFbGVtIGUyKGUxLCAiUGFja2FnZVJlZmVyZW5jZSIpOwotICBlMi5BdHRyaWJ1dGUoIkluY2x1ZGUiLCByZWYpOwotICBlMi5BdHRyaWJ1dGUoIlZlcnNpb24iLCB2ZXJzaW9uKTsKLX0KLQogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZURvdE5ldFJlZmVyZW5jZXMoRWxlbSYgZTApCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWZlcmVuY2VzOwotICBpZiAoY29uc3QgY2hhciogdnNEb3ROZXRSZWZlcmVuY2VzID0KKyAgaWYgKGNtUHJvcCB2c0RvdE5ldFJlZmVyZW5jZXMgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19ET1RORVRfUkVGRVJFTkNFUyIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KHZzRG90TmV0UmVmZXJlbmNlcywgcmVmZXJlbmNlcyk7CisgICAgY21FeHBhbmRMaXN0KCp2c0RvdE5ldFJlZmVyZW5jZXMsIHJlZmVyZW5jZXMpOwogICB9CiAgIGNtUHJvcGVydHlNYXAgY29uc3QmIHByb3BzID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkdldFByb3BlcnRpZXMoKTsKICAgZm9yIChhdXRvIGNvbnN0JiBpIDogcHJvcHMuR2V0TGlzdCgpKSB7Ci0gICAgaWYgKGkuZmlyc3QuZmluZCgiVlNfRE9UTkVUX1JFRkVSRU5DRV8iKSA9PSAwKSB7Ci0gICAgICBzdGQ6OnN0cmluZyBuYW1lID0gaS5maXJzdC5zdWJzdHIoMjApOwotICAgICAgaWYgKCFuYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IGkuc2Vjb25kOwotICAgICAgICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGF0aCkpIHsKLSAgICAgICAgICBwYXRoID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSArICIvIiArIHBhdGg7Ci0gICAgICAgIH0KLSAgICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKHBhdGgpOwotICAgICAgICB0aGlzLT5Eb3ROZXRIaW50UmVmZXJlbmNlc1siIl0ucHVzaF9iYWNrKAotICAgICAgICAgIERvdE5ldEhpbnRSZWZlcmVuY2UobmFtZSwgcGF0aCkpOworICAgIHN0YXRpYyBjb25zdCBjbTo6c3RyaW5nX3ZpZXcgdnNEblJlZiA9ICJWU19ET1RORVRfUkVGRVJFTkNFXyI7CisgICAgaWYgKGNtSGFzUHJlZml4KGkuZmlyc3QsIHZzRG5SZWYpKSB7CisgICAgICBzdGQ6OnN0cmluZyBwYXRoID0gaS5zZWNvbmQ7CisgICAgICBpZiAoIWNtc3lzOjpTeXN0ZW1Ub29sczo6RmlsZUlzRnVsbFBhdGgocGF0aCkpIHsKKyAgICAgICAgcGF0aCA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCkgKyAiLyIgKyBwYXRoOwogICAgICAgfQorICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKHBhdGgpOworICAgICAgdGhpcy0+RG90TmV0SGludFJlZmVyZW5jZXNbIiJdLmVtcGxhY2VfYmFjaygKKyAgICAgICAgRG90TmV0SGludFJlZmVyZW5jZShpLmZpcnN0LnN1YnN0cih2c0RuUmVmLmxlbmd0aCgpKSwgcGF0aCkpOwogICAgIH0KICAgfQogICBpZiAoIXJlZmVyZW5jZXMuZW1wdHkoKSB8fCAhdGhpcy0+RG90TmV0SGludFJlZmVyZW5jZXMuZW1wdHkoKSkgewpAQCAtODI0LDcgKzg0MSw3IEBACiAgICAgICAgICAgY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZVdpdGhvdXRMYXN0RXh0ZW5zaW9uKHJpKTsKICAgICAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IHJpOwogICAgICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gocGF0aCk7Ci0gICAgICAgIHRoaXMtPkRvdE5ldEhpbnRSZWZlcmVuY2VzWyIiXS5wdXNoX2JhY2soCisgICAgICAgIHRoaXMtPkRvdE5ldEhpbnRSZWZlcmVuY2VzWyIiXS5lbXBsYWNlX2JhY2soCiAgICAgICAgICAgRG90TmV0SGludFJlZmVyZW5jZShuYW1lLCBwYXRoKSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICB0aGlzLT5Xcml0ZURvdE5ldFJlZmVyZW5jZShlMSwgcmksICIiLCAiIik7CkBAIC04NTYsOSArODczLDkgQEAKICAgZTIuRWxlbWVudCgiUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHkiLCAidHJ1ZSIpOwogICBpZiAoIWhpbnQuZW1wdHkoKSkgewogICAgIGNvbnN0IGNoYXIqIHByaXZhdGVSZWZlcmVuY2UgPSAiVHJ1ZSI7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKKyAgICBpZiAoY21Qcm9wIHZhbHVlID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKICAgICAgICAgICAiVlNfRE9UTkVUX1JFRkVSRU5DRVNfQ09QWV9MT0NBTCIpKSB7Ci0gICAgICBpZiAoY21Jc09mZih2YWx1ZSkpIHsKKyAgICAgIGlmIChjbUlzT2ZmKCp2YWx1ZSkpIHsKICAgICAgICAgcHJpdmF0ZVJlZmVyZW5jZSA9ICJGYWxzZSI7CiAgICAgICB9CiAgICAgfQpAQCAtODcwLDExICs4ODcsMTAgQEAKIAogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUltcG9ydHMoRWxlbSYgZTApCiB7Ci0gIGNvbnN0IGNoYXIqIGltcG9ydHMgPQorICBjbVByb3AgaW1wb3J0cyA9CiAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkdldFByb3BlcnR5KCJWU19QUk9KRUNUX0lNUE9SVCIpOwogICBpZiAoaW1wb3J0cykgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzU3BsaXQgPQotICAgICAgY21FeHBhbmRlZExpc3Qoc3RkOjpzdHJpbmcoaW1wb3J0cyksIGZhbHNlKTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJnc1NwbGl0ID0gY21FeHBhbmRlZExpc3QoKmltcG9ydHMsIGZhbHNlKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiBhcmdzU3BsaXQpIHsKICAgICAgIGlmICghY21zeXM6OlN5c3RlbVRvb2xzOjpGaWxlSXNGdWxsUGF0aChwYXRoKSkgewogICAgICAgICBwYXRoID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKSArICIvIiArIHBhdGg7CkBAIC04OTcsMjggKzkxMywzNCBAQAogICBDdXN0b21UYWdzIHRhZ3M7CiAgIGNtUHJvcGVydHlNYXAgY29uc3QmIHByb3BzID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkdldFByb3BlcnRpZXMoKTsKICAgZm9yIChjb25zdCBhdXRvJiBpIDogcHJvcHMuR2V0TGlzdCgpKSB7Ci0gICAgaWYgKGkuZmlyc3QuZmluZChyZWZQcm9wRnVsbFByZWZpeCkgPT0gMCkgewotICAgICAgc3RkOjpzdHJpbmcgcmVmVGFnID0gaS5maXJzdC5zdWJzdHIocmVmUHJvcEZ1bGxQcmVmaXgubGVuZ3RoKCkpOwotICAgICAgc3RkOjpzdHJpbmcgcmVmVmFsID0gaS5zZWNvbmQ7Ci0gICAgICBpZiAoIXJlZlRhZy5lbXB0eSgpICYmICFyZWZWYWwuZW1wdHkoKSkgewotICAgICAgICB0YWdzW3JlZlRhZ10gPSByZWZWYWw7Ci0gICAgICB9CisgICAgaWYgKGNtSGFzUHJlZml4KGkuZmlyc3QsIHJlZlByb3BGdWxsUHJlZml4KSAmJiAhaS5zZWNvbmQuZW1wdHkoKSkgeworICAgICAgdGFnc1tpLmZpcnN0LnN1YnN0cihyZWZQcm9wRnVsbFByZWZpeC5sZW5ndGgoKSldID0gaS5zZWNvbmQ7CiAgICAgfQogICB9CiAgIGZvciAoYXV0byBjb25zdCYgdGFnIDogdGFncykgewotICAgIGUyLkVsZW1lbnQodGFnLmZpcnN0LmNfc3RyKCksIHRhZy5zZWNvbmQpOworICAgIGUyLkVsZW1lbnQodGFnLmZpcnN0LCB0YWcuc2Vjb25kKTsKKyAgfQorfQorCit2b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OldyaXRlRG90TmV0RG9jdW1lbnRhdGlvbkZpbGUoRWxlbSYgZTApCit7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkb2N1bWVudGF0aW9uRmlsZSA9CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRTYWZlUHJvcGVydHkoIlZTX0RPVE5FVF9ET0NVTUVOVEFUSU9OX0ZJTEUiKTsKKworICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qICYmICFkb2N1bWVudGF0aW9uRmlsZS5lbXB0eSgpKSB7CisgICAgRWxlbSBlMShlMCwgIlByb3BlcnR5R3JvdXAiKTsKKyAgICBFbGVtIGUyKGUxLCAiRG9jdW1lbnRhdGlvbkZpbGUiKTsKKyAgICBlMi5Db250ZW50KGRvY3VtZW50YXRpb25GaWxlKTsKICAgfQogfQogCiB2b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OldyaXRlRW1iZWRkZWRSZXNvdXJjZUdyb3VwKEVsZW0mIGUwKQogewotICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiByZXN4T2JqczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRSZXN4U291cmNlcyhyZXN4T2JqcywgIiIpOwotICBpZiAoIXJlc3hPYmpzLmVtcHR5KCkpIHsKKyAgaWYgKCF0aGlzLT5SZXN4T2Jqcy5lbXB0eSgpKSB7CiAgICAgRWxlbSBlMShlMCwgIkl0ZW1Hcm91cCIpOwogICAgIHN0ZDo6c3RyaW5nIHNyY0RpciA9IHRoaXMtPk1ha2VmaWxlLT5HZXRDdXJyZW50U291cmNlRGlyZWN0b3J5KCk7CiAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKHNyY0Rpcik7Ci0gICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG9pIDogcmVzeE9ianMpIHsKKyAgICBmb3IgKGNtU291cmNlRmlsZSBjb25zdCogb2kgOiB0aGlzLT5SZXN4T2JqcykgewogICAgICAgc3RkOjpzdHJpbmcgb2JqID0gb2ktPkdldEZ1bGxQYXRoKCk7CiAgICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gob2JqKTsKICAgICAgIGJvb2wgdXNlUmVsYXRpdmVQYXRoID0gZmFsc2U7CkBAIC05MjcsNyArOTQ5LDcgQEAKICAgICAgICAgLy8gc3ViZGlyZWN0b3J5CiAgICAgICAgIC8vIG9mIHRoZSAuY3Nwcm9qIGZpbGUsIHdlIGhhdmUgdG8gdXNlIHJlbGF0aXZlIHBhdGhuYW1lcywgb3RoZXJ3aXNlCiAgICAgICAgIC8vIHZpc3VhbCBzdHVkaW8gZG9lcyBub3Qgc2hvdyB0aGUgZmlsZSBpbiB0aGUgSURFLiBTb3JyeS4KLSAgICAgICAgaWYgKG9iai5maW5kKHNyY0RpcikgPT0gMCkgeworICAgICAgICBpZiAoY21IYXNQcmVmaXgob2JqLCBzcmNEaXIpKSB7CiAgICAgICAgICAgb2JqID0gdGhpcy0+Q29udmVydFBhdGgob2JqLCB0cnVlKTsKICAgICAgICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gob2JqKTsKICAgICAgICAgICB1c2VSZWxhdGl2ZVBhdGggPSB0cnVlOwpAQCAtOTU2LDE3ICs5NzgsMTEgQEAKICAgICAgICAgLy8gSWYgdGhlIHJlc291cmNlIHdhcyBOT1QgYWRkZWQgdXNpbmcgYSByZWxhdGl2ZSBwYXRoICh3aGljaCBzaG91bGQKICAgICAgICAgLy8gYmUgdGhlIGRlZmF1bHQpLCB3ZSBoYXZlIHRvIHByb3ZpZGUgYSBsaW5rIGhlcmUKICAgICAgICAgaWYgKCF1c2VSZWxhdGl2ZVBhdGgpIHsKLSAgICAgICAgICBzdGQ6OnN0cmluZyBsaW5rOwotICAgICAgICAgIGlmIChvYmouZmluZChzcmNEaXIpID09IDApIHsKLSAgICAgICAgICAgIGxpbmsgPSBvYmouc3Vic3RyKHNyY0Rpci5sZW5ndGgoKSArIDEpOwotICAgICAgICAgIH0gZWxzZSBpZiAob2JqLmZpbmQoYmluRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgICBsaW5rID0gb2JqLnN1YnN0cihiaW5EaXIubGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHN0ZDo6c3RyaW5nIGxpbmsgPSB0aGlzLT5HZXRDU2hhcnBTb3VyY2VMaW5rKG9pKTsKKyAgICAgICAgICBpZiAobGluay5lbXB0eSgpKSB7CiAgICAgICAgICAgICBsaW5rID0gY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUob2JqKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFsaW5rLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIGUyLkVsZW1lbnQoIkxpbmsiLCBsaW5rKTsKLSAgICAgICAgICB9CisgICAgICAgICAgZTIuRWxlbWVudCgiTGluayIsIGxpbmspOwogICAgICAgICB9CiAgICAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgZ2VuZXJhdGVkIHJlc291cmNlIGZyb20gYSAuRGVzaWduZXIuY3MgZmlsZQogICAgICAgICBzdGQ6OnN0cmluZyBkZXNpZ25lclJlc291cmNlID0KQEAgLTk3NSwxNSArOTkxLDE1IEBACiAgICAgICAgICAgIi5EZXNpZ25lci5jcyI7CiAgICAgICAgIGlmIChjbXN5czo6U3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoZGVzaWduZXJSZXNvdXJjZSkpIHsKICAgICAgICAgICBzdGQ6OnN0cmluZyBnZW5lcmF0b3IgPSAiUHVibGljUmVzWEZpbGVDb2RlR2VuZXJhdG9yIjsKLSAgICAgICAgICBpZiAoY29uc3QgY2hhciogZyA9IG9pLT5HZXRQcm9wZXJ0eSgiVlNfUkVTT1VSQ0VfR0VORVJBVE9SIikpIHsKLSAgICAgICAgICAgIGdlbmVyYXRvciA9IGc7CisgICAgICAgICAgaWYgKGNtUHJvcCBnID0gb2ktPkdldFByb3BlcnR5KCJWU19SRVNPVVJDRV9HRU5FUkFUT1IiKSkgeworICAgICAgICAgICAgZ2VuZXJhdG9yID0gKmc7CiAgICAgICAgICAgfQogICAgICAgICAgIGlmICghZ2VuZXJhdG9yLmVtcHR5KCkpIHsKICAgICAgICAgICAgIGUyLkVsZW1lbnQoIkdlbmVyYXRvciIsIGdlbmVyYXRvcik7Ci0gICAgICAgICAgICBpZiAoZGVzaWduZXJSZXNvdXJjZS5maW5kKHNyY0RpcikgPT0gMCkgewotICAgICAgICAgICAgICBkZXNpZ25lclJlc291cmNlID0gZGVzaWduZXJSZXNvdXJjZS5zdWJzdHIoc3JjRGlyLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGRlc2lnbmVyUmVzb3VyY2UuZmluZChiaW5EaXIpID09IDApIHsKLSAgICAgICAgICAgICAgZGVzaWduZXJSZXNvdXJjZSA9IGRlc2lnbmVyUmVzb3VyY2Uuc3Vic3RyKGJpbkRpci5sZW5ndGgoKSArIDEpOworICAgICAgICAgICAgaWYgKGNtSGFzUHJlZml4KGRlc2lnbmVyUmVzb3VyY2UsIHNyY0RpcikpIHsKKyAgICAgICAgICAgICAgZGVzaWduZXJSZXNvdXJjZS5lcmFzZSgwLCBzcmNEaXIubGVuZ3RoKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjbUhhc1ByZWZpeChkZXNpZ25lclJlc291cmNlLCBiaW5EaXIpKSB7CisgICAgICAgICAgICAgIGRlc2lnbmVyUmVzb3VyY2UuZXJhc2UoMCwgYmluRGlyLmxlbmd0aCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIGRlc2lnbmVyUmVzb3VyY2UgPQogICAgICAgICAgICAgICAgIGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGRlc2lnbmVyUmVzb3VyY2UpOwpAQCAtOTk0LDEzICsxMDEwLDE0IEBACiAgICAgICAgIH0KICAgICAgICAgY29uc3QgY21Qcm9wZXJ0eU1hcCYgcHJvcHMgPSBvaS0+R2V0UHJvcGVydGllcygpOwogICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBwIDogcHJvcHMuR2V0S2V5cygpKSB7Ci0gICAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3BOYW1lUHJlZml4ID0gIlZTX0NTSEFSUF8iOwotICAgICAgICAgIGlmIChwLmZpbmQocHJvcE5hbWVQcmVmaXgpID09IDApIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRhZ05hbWUgPSBwLnN1YnN0cihwcm9wTmFtZVByZWZpeC5sZW5ndGgoKSk7CisgICAgICAgICAgc3RhdGljIGNvbnN0IGNtOjpzdHJpbmdfdmlldyBwcm9wTmFtZVByZWZpeCA9ICJWU19DU0hBUlBfIjsKKyAgICAgICAgICBpZiAoY21IYXNQcmVmaXgocCwgcHJvcE5hbWVQcmVmaXgpKSB7CisgICAgICAgICAgICBjbTo6c3RyaW5nX3ZpZXcgdGFnTmFtZSA9CisgICAgICAgICAgICAgIGNtOjpzdHJpbmdfdmlldyhwKS5zdWJzdHIocHJvcE5hbWVQcmVmaXgubGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKCF0YWdOYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBwcm9wcy5HZXRQcm9wZXJ0eVZhbHVlKHApOworICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUgPSAqcHJvcHMuR2V0UHJvcGVydHlWYWx1ZShwKTsKICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZTIuRWxlbWVudCh0YWdOYW1lLmNfc3RyKCksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBlMi5FbGVtZW50KHRhZ05hbWUsIHZhbHVlKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgIH0KQEAgLTEwMTIsMTYgKzEwMjksMTQgQEAKIAogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZVhhbWxGaWxlc0dyb3VwKEVsZW0mIGUwKQogewotICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiB4YW1sT2JqczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRYYW1sU291cmNlcyh4YW1sT2JqcywgIiIpOwotICBpZiAoIXhhbWxPYmpzLmVtcHR5KCkpIHsKKyAgaWYgKCF0aGlzLT5YYW1sT2Jqcy5lbXB0eSgpKSB7CiAgICAgRWxlbSBlMShlMCwgIkl0ZW1Hcm91cCIpOwotICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBvaSA6IHhhbWxPYmpzKSB7CisgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG9pIDogdGhpcy0+WGFtbE9ianMpIHsKICAgICAgIHN0ZDo6c3RyaW5nIG9iaiA9IG9pLT5HZXRGdWxsUGF0aCgpOwotICAgICAgY29uc3QgY2hhciogeGFtbFR5cGU7Ci0gICAgICBjb25zdCBjaGFyKiB4YW1sVHlwZVByb3BlcnR5ID0gb2ktPkdldFByb3BlcnR5KCJWU19YQU1MX1RZUEUiKTsKKyAgICAgIHN0ZDo6c3RyaW5nIHhhbWxUeXBlOworICAgICAgY21Qcm9wIHhhbWxUeXBlUHJvcGVydHkgPSBvaS0+R2V0UHJvcGVydHkoIlZTX1hBTUxfVFlQRSIpOwogICAgICAgaWYgKHhhbWxUeXBlUHJvcGVydHkpIHsKLSAgICAgICAgeGFtbFR5cGUgPSB4YW1sVHlwZVByb3BlcnR5OworICAgICAgICB4YW1sVHlwZSA9ICp4YW1sVHlwZVByb3BlcnR5OwogICAgICAgfSBlbHNlIHsKICAgICAgICAgeGFtbFR5cGUgPSAiUGFnZSI7CiAgICAgICB9CkBAIC0xMDI5LDI1ICsxMDQ0LDYgQEAKICAgICAgIEVsZW0gZTIoZTEsIHhhbWxUeXBlKTsKICAgICAgIHRoaXMtPldyaXRlU291cmNlKGUyLCBvaSk7CiAgICAgICBlMi5TZXRIYXNFbGVtZW50cygpOwotICAgICAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJiAhdGhpcy0+SW5Tb3VyY2VCdWlsZCkgewotICAgICAgICAvLyBhZGQgPExpbms+IHRhZyB0byB3cml0dGVuIFhBTUwgc291cmNlIGlmIG5lY2Vzc2FyeQotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc3JjRGlyID0KLSAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYmluRGlyID0KLSAgICAgICAgICB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudEJpbmFyeURpcmVjdG9yeSgpOwotICAgICAgICBzdGQ6OnN0cmluZyBsaW5rOwotICAgICAgICBpZiAob2JqLmZpbmQoc3JjRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgbGluayA9IG9iai5zdWJzdHIoc3JjRGlyLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqLmZpbmQoYmluRGlyKSA9PSAwKSB7Ci0gICAgICAgICAgbGluayA9IG9iai5zdWJzdHIoYmluRGlyLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbGluayA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFsaW5rLmVtcHR5KCkpIHsKLSAgICAgICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gobGluayk7Ci0gICAgICAgICAgZTIuRWxlbWVudCgiTGluayIsIGxpbmspOwotICAgICAgICB9Ci0gICAgICB9CiAgICAgICBlMi5FbGVtZW50KCJTdWJUeXBlIiwgIkRlc2lnbmVyIik7CiAgICAgfQogICB9CkBAIC0xMDkyLDkgKzEwODgsOSBAQAogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZVdpblJUUmVmZXJlbmNlcyhFbGVtJiBlMCkKIHsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlZmVyZW5jZXM7Ci0gIGlmIChjb25zdCBjaGFyKiB2c1dpblJUUmVmZXJlbmNlcyA9CisgIGlmIChjbVByb3AgdnNXaW5SVFJlZmVyZW5jZXMgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19XSU5SVF9SRUZFUkVOQ0VTIikpIHsKLSAgICBjbUV4cGFuZExpc3QodnNXaW5SVFJlZmVyZW5jZXMsIHJlZmVyZW5jZXMpOworICAgIGNtRXhwYW5kTGlzdCgqdnNXaW5SVFJlZmVyZW5jZXMsIHJlZmVyZW5jZXMpOwogICB9CiAKICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NQaG9uZSgpICYmCkBAIC0xMTM1LDkgKzExMzEsOSBAQAogCiAgICAgaWYgKHRoaXMtPlByb2plY3RUeXBlICE9IGNzcHJvaikgewogICAgICAgc3RkOjpzdHJpbmcgY29uZmlnVHlwZTsKLSAgICAgIGlmIChjb25zdCBjaGFyKiB2c0NvbmZpZ3VyYXRpb25UeXBlID0KKyAgICAgIGlmIChjbVByb3AgdnNDb25maWd1cmF0aW9uVHlwZSA9CiAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19DT05GSUdVUkFUSU9OX1RZUEUiKSkgewotICAgICAgICBjb25maWdUeXBlID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSh2c0NvbmZpZ3VyYXRpb25UeXBlLAorICAgICAgICBjb25maWdUeXBlID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgqdnNDb25maWd1cmF0aW9uVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGMpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgc3dpdGNoICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFR5cGUoKSkgewpAQCAtMTE1MSw5ICsxMTQ3LDExIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIGNtU3RhdGVFbnVtczo6RVhFQ1VUQUJMRToKICAgICAgICAgICAgIGlmICh0aGlzLT5Oc2lnaHRUZWdyYSAmJgotICAgICAgICAgICAgICAgICF0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJBTkRST0lEX0dVSSIpKSB7CisgICAgICAgICAgICAgICAgIXRoaXMtPkdlbmVyYXRvclRhcmdldC0+VGFyZ2V0LT5Jc0FuZHJvaWRHdWlFeGVjdXRhYmxlKCkpIHsKICAgICAgICAgICAgICAgLy8gQW5kcm9pZCBleGVjdXRhYmxlcyBhcmUgLnNvIHRvby4KICAgICAgICAgICAgICAgY29uZmlnVHlwZSA9ICJEeW5hbWljTGlicmFyeSI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMtPkFuZHJvaWQpIHsKKyAgICAgICAgICAgICAgY29uZmlnVHlwZSA9ICJEeW5hbWljTGlicmFyeSI7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBjb25maWdUeXBlID0gIkFwcGxpY2F0aW9uIjsKICAgICAgICAgICAgIH0KQEAgLTExODMsNiArMTE4MSw4IEBACiAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0aGlzLT5Oc2lnaHRUZWdyYSkgewogICAgICAgdGhpcy0+V3JpdGVOc2lnaHRUZWdyYUNvbmZpZ3VyYXRpb25WYWx1ZXMoZTEsIGMpOworICAgIH0gZWxzZSBpZiAodGhpcy0+QW5kcm9pZCkgeworICAgICAgdGhpcy0+V3JpdGVBbmRyb2lkQ29uZmlndXJhdGlvblZhbHVlcyhlMSwgYyk7CiAgICAgfQogICB9CiB9CkBAIC0xMTkzLDkgKzExOTMsOSBAQAogICBpZiAoIXRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NDRSgpKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIGNvbnN0IGNoYXIqIGFkZGl0aW9uYWxGaWxlcyA9CisgIGNtUHJvcCBhZGRpdGlvbmFsRmlsZXMgPQogICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkRFUExPWU1FTlRfQURESVRJT05BTF9GSUxFUyIpOwotICBjb25zdCBjaGFyKiByZW1vdGVEaXJlY3RvcnkgPQorICBjbVByb3AgcmVtb3RlRGlyZWN0b3J5ID0KICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJERVBMT1lNRU5UX1JFTU9URV9ESVJFQ1RPUlkiKTsKICAgaWYgKCEoYWRkaXRpb25hbEZpbGVzIHx8IHJlbW90ZURpcmVjdG9yeSkpIHsKICAgICByZXR1cm47CkBAIC0xMjA1LDEwICsxMjA1LDEwIEBACiAgICAgZTEuQXR0cmlidXRlKCJDb25kaXRpb24iLCB0aGlzLT5DYWxjQ29uZGl0aW9uKGMpKTsKIAogICAgIGlmIChyZW1vdGVEaXJlY3RvcnkpIHsKLSAgICAgIGUxLkVsZW1lbnQoIlJlbW90ZURpcmVjdG9yeSIsIHJlbW90ZURpcmVjdG9yeSk7CisgICAgICBlMS5FbGVtZW50KCJSZW1vdGVEaXJlY3RvcnkiLCAqcmVtb3RlRGlyZWN0b3J5KTsKICAgICB9CiAgICAgaWYgKGFkZGl0aW9uYWxGaWxlcykgewotICAgICAgZTEuRWxlbWVudCgiQ0VBZGRpdGlvbmFsRmlsZXMiLCBhZGRpdGlvbmFsRmlsZXMpOworICAgICAgZTEuRWxlbWVudCgiQ0VBZGRpdGlvbmFsRmlsZXMiLCAqYWRkaXRpb25hbEZpbGVzKTsKICAgICB9CiAgIH0KIH0KQEAgLTEyNDYsNyArMTI0NiwxMCBAQAogICB9IGVsc2UgewogICAgIGUxLkVsZW1lbnQoIkNoYXJhY3RlclNldCIsICJNdWx0aUJ5dGUiKTsKICAgfQotICBpZiAoY29uc3QgY2hhciogdG9vbHNldCA9IGdnLT5HZXRQbGF0Zm9ybVRvb2xzZXQoKSkgeworICBpZiAoY21Qcm9wIHByb2plY3RUb29sc2V0T3ZlcnJpZGUgPQorICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19QTEFURk9STV9UT09MU0VUIikpIHsKKyAgICBlMS5FbGVtZW50KCJQbGF0Zm9ybVRvb2xzZXQiLCAqcHJvamVjdFRvb2xzZXRPdmVycmlkZSk7CisgIH0gZWxzZSBpZiAoY29uc3QgY2hhciogdG9vbHNldCA9IGdnLT5HZXRQbGF0Zm9ybVRvb2xzZXQoKSkgewogICAgIGUxLkVsZW1lbnQoIlBsYXRmb3JtVG9vbHNldCIsIHRvb2xzZXQpOwogICB9CiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5QXNCb29sKCJWU19XSU5SVF9DT01QT05FTlQiKSB8fApAQCAtMTI4OSw3ICsxMjkyLDEwIEBACiAgICAgby5SZW1vdmVGbGFnKCJQbGF0Zm9ybSIpOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHRvb2xzZXQgPSBnZy0+R2V0UGxhdGZvcm1Ub29sc2V0KCkpIHsKKyAgaWYgKGNtUHJvcCBwcm9qZWN0VG9vbHNldE92ZXJyaWRlID0KKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfUExBVEZPUk1fVE9PTFNFVCIpKSB7CisgICAgZTEuRWxlbWVudCgiUGxhdGZvcm1Ub29sc2V0IiwgKnByb2plY3RUb29sc2V0T3ZlcnJpZGUpOworICB9IGVsc2UgaWYgKGNvbnN0IGNoYXIqIHRvb2xzZXQgPSBnZy0+R2V0UGxhdGZvcm1Ub29sc2V0KCkpIHsKICAgICBlMS5FbGVtZW50KCJQbGF0Zm9ybVRvb2xzZXQiLCB0b29sc2V0KTsKICAgfQogCkBAIC0xMjk3LDggKzEzMDMsOCBAQAogICAgIGNtU3RyQ2F0KGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpLCAiX1BPU1RGSVgiKTsKICAgc3RkOjpzdHJpbmcgYXNzZW1ibHlOYW1lID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRPdXRwdXROYW1lKAogICAgIGNvbmZpZywgY21TdGF0ZUVudW1zOjpSdW50aW1lQmluYXJ5QXJ0aWZhY3QpOwotICBpZiAoY29uc3QgY2hhciogcG9zdGZpeCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkocG9zdGZpeE5hbWUpKSB7Ci0gICAgYXNzZW1ibHlOYW1lICs9IHBvc3RmaXg7CisgIGlmIChjbVByb3AgcG9zdGZpeCA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkocG9zdGZpeE5hbWUpKSB7CisgICAgYXNzZW1ibHlOYW1lICs9ICpwb3N0Zml4OwogICB9CiAgIGUxLkVsZW1lbnQoIkFzc2VtYmx5TmFtZSIsIGFzc2VtYmx5TmFtZSk7CiAKQEAgLTEzMTgsNDMgKzEzMjQsNjUgQEAKICAgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvciogZ2cgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7CiAgIGNvbnN0IGNoYXIqIHRvb2xzZXQgPSBnZy0+R2V0UGxhdGZvcm1Ub29sc2V0KCk7CiAgIGUxLkVsZW1lbnQoIk5ka1Rvb2xjaGFpblZlcnNpb24iLCB0b29sc2V0ID8gdG9vbHNldCA6ICJEZWZhdWx0Iik7Ci0gIGlmIChjb25zdCBjaGFyKiBtaW5BcGkgPQotICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FQSV9NSU4iKSkgewotICAgIGUxLkVsZW1lbnQoIkFuZHJvaWRNaW5BUEkiLCAiYW5kcm9pZC0iICsgc3RkOjpzdHJpbmcobWluQXBpKSk7CisgIGlmIChjbVByb3AgbWluQXBpID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9BUElfTUlOIikpIHsKKyAgICBlMS5FbGVtZW50KCJBbmRyb2lkTWluQVBJIiwgImFuZHJvaWQtIiArICptaW5BcGkpOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiBhcGkgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FQSSIpKSB7Ci0gICAgZTEuRWxlbWVudCgiQW5kcm9pZFRhcmdldEFQSSIsICJhbmRyb2lkLSIgKyBzdGQ6OnN0cmluZyhhcGkpKTsKKyAgaWYgKGNtUHJvcCBhcGkgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FQSSIpKSB7CisgICAgZTEuRWxlbWVudCgiQW5kcm9pZFRhcmdldEFQSSIsICJhbmRyb2lkLSIgKyAqYXBpKTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBjcHVBcmNoID0KLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9BUkNIIikpIHsKLSAgICBlMS5FbGVtZW50KCJBbmRyb2lkQXJjaCIsIGNwdUFyY2gpOworICBpZiAoY21Qcm9wIGNwdUFyY2ggPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX0FSQ0giKSkgeworICAgIGUxLkVsZW1lbnQoIkFuZHJvaWRBcmNoIiwgKmNwdUFyY2gpOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHN0bFR5cGUgPQorICBpZiAoY21Qcm9wIHN0bFR5cGUgPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX1NUTF9UWVBFIikpIHsKLSAgICBlMS5FbGVtZW50KCJBbmRyb2lkU3RsVHlwZSIsIHN0bFR5cGUpOworICAgIGUxLkVsZW1lbnQoIkFuZHJvaWRTdGxUeXBlIiwgKnN0bFR5cGUpOworICB9Cit9CisKK3ZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVBbmRyb2lkQ29uZmlndXJhdGlvblZhbHVlcygKKyAgRWxlbSYgZTEsIHN0ZDo6c3RyaW5nIGNvbnN0JikKK3sKKyAgY21HbG9iYWxWaXN1YWxTdHVkaW8xMEdlbmVyYXRvciogZ2cgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7CisgIGlmIChjbVByb3AgcHJvamVjdFRvb2xzZXRPdmVycmlkZSA9CisgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX1BMQVRGT1JNX1RPT0xTRVQiKSkgeworICAgIGUxLkVsZW1lbnQoIlBsYXRmb3JtVG9vbHNldCIsICpwcm9qZWN0VG9vbHNldE92ZXJyaWRlKTsKKyAgfSBlbHNlIGlmIChjb25zdCBjaGFyKiB0b29sc2V0ID0gZ2ctPkdldFBsYXRmb3JtVG9vbHNldCgpKSB7CisgICAgZTEuRWxlbWVudCgiUGxhdGZvcm1Ub29sc2V0IiwgdG9vbHNldCk7CisgIH0KKyAgaWYgKGNtUHJvcCBzdGxUeXBlID0KKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9TVExfVFlQRSIpKSB7CisgICAgaWYgKCpzdGxUeXBlICE9ICJub25lIikgeworICAgICAgZTEuRWxlbWVudCgiVXNlT2ZTdGwiLCAqc3RsVHlwZSk7CisgICAgfQogICB9CiB9CiAKIHZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVDdXN0b21Db21tYW5kcyhFbGVtJiBlMCkKIHsKICAgdGhpcy0+Q1NoYXJwQ3VzdG9tQ29tbWFuZE5hbWVzLmNsZWFyKCk7Ci0gIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IGN1c3RvbUNvbW1hbmRzOwotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEN1c3RvbUNvbW1hbmRzKGN1c3RvbUNvbW1hbmRzLCAiIik7Ci0gIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzaSA6IGN1c3RvbUNvbW1hbmRzKSB7Ci0gICAgdGhpcy0+V3JpdGVDdXN0b21Db21tYW5kKGUwLCBzaSk7CisKKyAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzcmNDTWFrZUxpc3RzID0KKyAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+Q3JlYXRlVkNQcm9qQnVpbGRSdWxlKCk7CisKKyAgZm9yIChjbUdlbmVyYXRvclRhcmdldDo6QWxsQ29uZmlnU291cmNlIGNvbnN0JiBzaSA6CisgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRBbGxDb25maWdTb3VyY2VzKCkpIHsKKyAgICBpZiAoc2kuU291cmNlID09IHNyY0NNYWtlTGlzdHMpIHsKKyAgICAgIC8vIFNraXAgZXhwbGljaXQgcmVmZXJlbmNlIHRvIENNYWtlTGlzdHMudHh0IHNvdXJjZS4KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICB0aGlzLT5Xcml0ZUN1c3RvbUNvbW1hbmQoZTAsIHNpLlNvdXJjZSk7CiAgIH0KIAogICAvLyBBZGQgQ01ha2VMaXN0cy50eHQgZmlsZSB3aXRoIHJ1bGUgdG8gcmUtcnVuIENNYWtlIGZvciB1c2VyIGNvbnZlbmllbmNlLgogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgIT0gY21TdGF0ZUVudW1zOjpHTE9CQUxfVEFSR0VUICYmCiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldE5hbWUoKSAhPSBDTUFLRV9DSEVDS19CVUlMRF9TWVNURU1fVEFSR0VUKSB7Ci0gICAgaWYgKGNtU291cmNlRmlsZSBjb25zdCogc2YgPQotICAgICAgICAgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5DcmVhdGVWQ1Byb2pCdWlsZFJ1bGUoKSkgeworICAgIGlmIChzcmNDTWFrZUxpc3RzKSB7CiAgICAgICAvLyBXcml0ZSBkaXJlY3RseSByYXRoZXIgdGhhbiB0aHJvdWdoIFdyaXRlQ3VzdG9tQ29tbWFuZCBiZWNhdXNlCiAgICAgICAvLyB3ZSBkbyBub3Qgd2FudCB0aGUgZGUtZHVwbGljYXRpb24gYW5kIGl0IGhhcyBubyBkZXBlbmRlbmNpZXMuCi0gICAgICBpZiAoY21DdXN0b21Db21tYW5kIGNvbnN0KiBjb21tYW5kID0gc2YtPkdldEN1c3RvbUNvbW1hbmQoKSkgewotICAgICAgICB0aGlzLT5Xcml0ZUN1c3RvbVJ1bGUoZTAsIHNmLCAqY29tbWFuZCk7CisgICAgICBpZiAoY21DdXN0b21Db21tYW5kIGNvbnN0KiBjb21tYW5kID0gc3JjQ01ha2VMaXN0cy0+R2V0Q3VzdG9tQ29tbWFuZCgpKSB7CisgICAgICAgIHRoaXMtPldyaXRlQ3VzdG9tUnVsZShlMCwgc3JjQ01ha2VMaXN0cywgKmNvbW1hbmQpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMTQxNCwxNiArMTQ0MiwxNCBAQAogICAgIHNwZTIgPSBjbTo6bWFrZV91bmlxdWU8RWxlbT4oKnNwZTEsICJDdXN0b21CdWlsZCIpOwogICAgIHRoaXMtPldyaXRlU291cmNlKCpzcGUyLCBzb3VyY2UpOwogICAgIHNwZTItPlNldEhhc0VsZW1lbnRzKCk7CisgICAgaWYgKGNvbW1hbmQuR2V0U3RkUGlwZXNVVEY4KCkpIHsKKyAgICAgIHRoaXMtPldyaXRlU3RkT3V0RW5jb2RpbmdVdGY4KCpzcGUyKTsKKyAgICB9CiAgIH0gZWxzZSB7CiAgICAgRWxlbSBlMShlMCwgIkl0ZW1Hcm91cCIpOwogICAgIEVsZW0gZTIoZTEsICJOb25lIik7Ci0gICAgc3RkOjpzdHJpbmcgbGluazsKLSAgICB0aGlzLT5HZXRDU2hhcnBTb3VyY2VMaW5rKHNvdXJjZSwgbGluayk7CiAgICAgdGhpcy0+V3JpdGVTb3VyY2UoZTIsIHNvdXJjZSk7CiAgICAgZTIuU2V0SGFzRWxlbWVudHMoKTsKLSAgICBpZiAoIWxpbmsuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiTGluayIsIGxpbmspOwotICAgIH0KICAgfQogICBmb3IgKHN0ZDo6c3RyaW5nIGNvbnN0JiBjIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKICAgICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgY2NnKGNvbW1hbmQsIGMsIGxnKTsKQEAgLTE1OTgsOCArMTYyNCw3IEBACiAgIGZvdXQud3JpdGUobWFnaWMsIDMpOwogCiAgIGZvdXQgPDwgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIiIKLSAgICAgICA8PCB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkVuY29kaW5nKCkgPDwgIlwiPz4iCi0gICAgICAgPDwgIlxuIjsKKyAgICAgICA8PCB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkVuY29kaW5nKCkgPDwgIlwiPz4iOwogICB7CiAgICAgRWxlbSBlMChmb3V0LCAiUHJvamVjdCIpOwogICAgIGUwLkF0dHJpYnV0ZSgiVG9vbHNWZXJzaW9uIiwgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRUb29sc1ZlcnNpb24oKSk7CkBAIC0xNjM4LDExICsxNjYzLDkgQEAKICAgICAgIH0KICAgICB9CiAKLSAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiByZXN4T2JqczsKLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFJlc3hTb3VyY2VzKHJlc3hPYmpzLCAiIik7Ci0gICAgaWYgKCFyZXN4T2Jqcy5lbXB0eSgpKSB7CisgICAgaWYgKCF0aGlzLT5SZXN4T2Jqcy5lbXB0eSgpKSB7CiAgICAgICBFbGVtIGUxKGUwLCAiSXRlbUdyb3VwIik7Ci0gICAgICBmb3IgKGNtU291cmNlRmlsZSBjb25zdCogb2kgOiByZXN4T2JqcykgeworICAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIG9pIDogdGhpcy0+UmVzeE9ianMpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgb2JqID0gb2ktPkdldEZ1bGxQYXRoKCk7CiAgICAgICAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChvYmopOwogICAgICAgICBFbGVtIGUyKGUxLCAiRW1iZWRkZWRSZXNvdXJjZSIpOwpAQCAtMTY3MCw3ICsxNjkzLDcgQEAKICAgICAgICAgfQogICAgICAgfQogCi0gICAgICBpZiAoIXJlc3hPYmpzLmVtcHR5KCkgfHwgIXRoaXMtPkFkZGVkRmlsZXMuZW1wdHkoKSkgeworICAgICAgaWYgKCF0aGlzLT5SZXN4T2Jqcy5lbXB0eSgpIHx8ICF0aGlzLT5BZGRlZEZpbGVzLmVtcHR5KCkpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgZ3VpZE5hbWUgPSAiU0dfRmlsdGVyX1Jlc291cmNlIEZpbGVzIjsKICAgICAgICAgc3RkOjpzdHJpbmcgZ3VpZCA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0R1VJRChndWlkTmFtZSk7CiAgICAgICAgIEVsZW0gZTIoZTEsICJGaWx0ZXIiKTsKQEAgLTE3MzgsNyArMTc2MSw3IEBACiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGZpbHRlciA9IHNvdXJjZUdyb3VwLT5HZXRGdWxsTmFtZSgpOwogICAgIHN0ZDo6c3RyaW5nIHBhdGggPSB0aGlzLT5Db252ZXJ0UGF0aChzb3VyY2UsIHMuUmVsYXRpdmVQYXRoKTsKICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gocGF0aCk7Ci0gICAgRWxlbSBlMihlMSwgbmFtZS5jX3N0cigpKTsKKyAgICBFbGVtIGUyKGUxLCBuYW1lKTsKICAgICBlMi5BdHRyaWJ1dGUoIkluY2x1ZGUiLCBwYXRoKTsKICAgICBpZiAoIWZpbHRlci5lbXB0eSgpKSB7CiAgICAgICBlMi5FbGVtZW50KCJGaWx0ZXIiLCBmaWx0ZXIpOwpAQCAtMTc1NSwyNSArMTc3OCw3MCBAQAogICBpZiAodGhpcy0+SXNSZXN4SGVhZGVyKGZpbGVOYW1lKSkgewogICAgIGUyLkVsZW1lbnQoIkZpbGVUeXBlIiwgIkNwcEZvcm0iKTsKICAgfSBlbHNlIGlmICh0aGlzLT5Jc1hhbWxIZWFkZXIoZmlsZU5hbWUpKSB7Ci0gICAgc3RkOjpzdHJpbmcgeGFtbEZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmZpbmRfbGFzdF9vZigiLiIpKTsKLSAgICBlMi5FbGVtZW50KCJEZXBlbmRlbnRVcG9uIiwgeGFtbEZpbGVOYW1lKTsKKyAgICBlMi5FbGVtZW50KCJEZXBlbmRlbnRVcG9uIiwKKyAgICAgICAgICAgICAgIGZpbGVOYW1lLnN1YnN0cigwLCBmaWxlTmFtZS5maW5kX2xhc3Rfb2YoIi4iKSkpOwogICB9CiB9CiAKK3ZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6UGFyc2VTZXR0aW5nc1Byb3BlcnR5KAorICBjb25zdCBzdGQ6OnN0cmluZyYgc2V0dGluZ3NQcm9wZXJ0eVZhbHVlLCBDb25maWdUb1NldHRpbmdzJiB0b29sU2V0dGluZ3MpCit7CisgIGlmICghc2V0dGluZ3NQcm9wZXJ0eVZhbHVlLmVtcHR5KCkpIHsKKyAgICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2U7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9CisgICAgICBnZS5QYXJzZShzZXR0aW5nc1Byb3BlcnR5VmFsdWUpOworCisgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIGV2YWx1YXRlZCA9IGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzZXR0aW5ncyA9IGNtRXhwYW5kZWRMaXN0KGV2YWx1YXRlZCk7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXR0aW5nIDogc2V0dGluZ3MpIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBhc3NpZ25tZW50ID0gc2V0dGluZy5maW5kKCc9Jyk7CisgICAgICAgIGlmIChhc3NpZ25tZW50ICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcHJvcE5hbWUgPSBzZXR0aW5nLnN1YnN0cigwLCBhc3NpZ25tZW50KTsKKyAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwcm9wVmFsdWUgPSBzZXR0aW5nLnN1YnN0cihhc3NpZ25tZW50ICsgMSk7CisKKyAgICAgICAgICBpZiAoIXByb3BWYWx1ZS5lbXB0eSgpKSB7CisgICAgICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2Jvb2wgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6UHJvcGVydHlJc1NhbWVJbkFsbENvbmZpZ3MoCisgIGNvbnN0IENvbmZpZ1RvU2V0dGluZ3MmIHRvb2xTZXR0aW5ncywgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BOYW1lKQoreworICBzdGQ6OnN0cmluZyBmaXJzdFByb3BWYWx1ZSA9ICIiOworICBmb3IgKGNvbnN0IGF1dG8mIGNvbmZpZ1RvU2V0dGluZ3MgOiB0b29sU2V0dGluZ3MpIHsKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiYgc2V0dGluZ3MgPQorICAgICAgY29uZmlnVG9TZXR0aW5ncy5zZWNvbmQ7CisKKyAgICBpZiAoZmlyc3RQcm9wVmFsdWUuZW1wdHkoKSkgeworICAgICAgaWYgKHNldHRpbmdzLmZpbmQocHJvcE5hbWUpICE9IHNldHRpbmdzLmVuZCgpKSB7CisgICAgICAgIGZpcnN0UHJvcFZhbHVlID0gc2V0dGluZ3MuZmluZChwcm9wTmFtZSktPnNlY29uZDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2V0dGluZ3MuZmluZChwcm9wTmFtZSkgPT0gc2V0dGluZ3MuZW5kKCkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2V0dGluZ3MuZmluZChwcm9wTmFtZSktPnNlY29uZCAhPSBmaXJzdFByb3BWYWx1ZSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCiB2b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OldyaXRlRXh0cmFTb3VyY2UoRWxlbSYgZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzZikKIHsKICAgYm9vbCB0b29sSGFzU2V0dGluZ3MgPSBmYWxzZTsKICAgY29uc3QgY2hhciogdG9vbCA9ICJOb25lIjsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyVHlwZTsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyRW50cnlQb2ludDsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyTW9kZWw7Ci0gIHN0ZDo6c3RyaW5nIHNoYWRlckFkZGl0aW9uYWxGbGFnczsKLSAgc3RkOjpzdHJpbmcgc2hhZGVyRGlzYWJsZU9wdGltaXphdGlvbnM7Ci0gIHN0ZDo6c3RyaW5nIHNoYWRlckVuYWJsZURlYnVnOwotICBzdGQ6OnN0cmluZyBzaGFkZXJPYmplY3RGaWxlTmFtZTsKLSAgc3RkOjpzdHJpbmcgb3V0cHV0SGVhZGVyRmlsZTsKLSAgc3RkOjpzdHJpbmcgdmFyaWFibGVOYW1lOwogICBzdGQ6OnN0cmluZyBzZXR0aW5nc0dlbmVyYXRvcjsKICAgc3RkOjpzdHJpbmcgc2V0dGluZ3NMYXN0R2VuT3V0cHV0OwogICBzdGQ6OnN0cmluZyBzb3VyY2VMaW5rOwpAQCAtMTc4MSw3NiArMTg0OSw4NCBAQAogICBzdGQ6OnN0cmluZyBjb3B5VG9PdXREaXI7CiAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVJblZzaXg7CiAgIHN0ZDo6c3RyaW5nIGV4dCA9IGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzZi0+R2V0RXh0ZW5zaW9uKCkpOwotICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qKSB7Ci0gICAgLy8gRVZFUlkgZXh0cmEgc291cmNlIGZpbGUgbXVzdCBoYXZlIGEgPExpbms+LCBvdGhlcndpc2UgaXQgbWlnaHQgbm90Ci0gICAgLy8gYmUgdmlzaWJsZSBpbiBWaXN1YWwgU3R1ZGlvIGF0IGFsbC4gVGhlIHBhdGggcmVsYXRpdmUgdG8gY3VycmVudAotICAgIC8vIHNvdXJjZS0gb3IgYmluYXJ5LWRpciBpcyB1c2VkIHdpdGhpbiB0aGUgbGluaywgaWYgdGhlIGZpbGUgaXMKLSAgICAvLyBpbiBub25lIG9mIHRoZXNlIHBhdGhzLCBpdCBpcyBhZGRlZCB3aXRoIHRoZSBwbGFpbiBmaWxlbmFtZSB3aXRob3V0Ci0gICAgLy8gYW55IHBhdGguIFRoaXMgbWVhbnMgdGhlIGZpbGUgd2lsbCBzaG93IHVwIGF0IHJvb3QtbGV2ZWwgb2YgdGhlIGNzcHJvagotICAgIC8vICh3aGVyZSBDTWFrZUxpc3RzLnR4dCBldGMuIGFyZSkuCi0gICAgaWYgKCF0aGlzLT5JblNvdXJjZUJ1aWxkKSB7Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOwotICAgICAgc3RkOjpzdHJpbmcgZnVsbEZpbGVOYW1lID0gc2YtPkdldEZ1bGxQYXRoKCk7Ci0gICAgICBzdGQ6OnN0cmluZyBzcmNEaXIgPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwotICAgICAgc3RkOjpzdHJpbmcgYmluRGlyID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKLSAgICAgIGlmIChmdWxsRmlsZU5hbWUuZmluZChiaW5EaXIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHNvdXJjZUxpbmsuY2xlYXIoKTsKLSAgICAgIH0gZWxzZSBpZiAoZnVsbEZpbGVOYW1lLmZpbmQoc3JjRGlyKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBzb3VyY2VMaW5rID0gZnVsbEZpbGVOYW1lLnN1YnN0cihzcmNEaXIubGVuZ3RoKCkgKyAxKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIGZhbGxiYWNrOiBhZGQgcGxhaW4gZmlsZW5hbWUgd2l0aG91dCBhbnkgcGF0aAotICAgICAgICBzb3VyY2VMaW5rID0gY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZnVsbEZpbGVOYW1lKTsKLSAgICAgIH0KLSAgICAgIGlmICghc291cmNlTGluay5lbXB0eSgpKSB7Ci0gICAgICAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChzb3VyY2VMaW5rKTsKLSAgICAgIH0KLSAgICB9CisgIENvbmZpZ1RvU2V0dGluZ3MgdG9vbFNldHRpbmdzOworICBmb3IgKGNvbnN0IGF1dG8mIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgdG9vbFNldHRpbmdzW2NvbmZpZ107CisgIH0KKworICBpZiAodGhpcy0+UHJvamVjdFR5cGUgPT0gY3Nwcm9qICYmICF0aGlzLT5JblNvdXJjZUJ1aWxkKSB7CisgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKICAgfQogICBpZiAoZXh0ID09ICJobHNsIikgewogICAgIHRvb2wgPSAiRlhDb21waWxlIjsKICAgICAvLyBGaWd1cmUgb3V0IHRoZSB0eXBlIG9mIHNoYWRlciBjb21waWxlciB0byB1c2UuCi0gICAgaWYgKGNvbnN0IGNoYXIqIHN0ID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfVFlQRSIpKSB7Ci0gICAgICBzaGFkZXJUeXBlID0gc3Q7Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICAgIGlmIChjbVByb3Agc3QgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9UWVBFIikpIHsKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJTaGFkZXJUeXBlIl0gPSAqc3Q7CisgICAgICB9CiAgICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggZW50cnkgcG9pbnQgdG8gdXNlIGlmIGFueQotICAgIGlmIChjb25zdCBjaGFyKiBzZSA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0VOVFJZUE9JTlQiKSkgewotICAgICAgc2hhZGVyRW50cnlQb2ludCA9IHNlOwotICAgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKKyAgICBpZiAoY21Qcm9wIHNlID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfRU5UUllQT0lOVCIpKSB7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgeworICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVsiRW50cnlQb2ludE5hbWUiXSA9ICpzZTsKKyAgICAgIH0KICAgICB9CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCBzaGFkZXIgbW9kZWwgdG8gdXNlIGlmIGFueQotICAgIGlmIChjb25zdCBjaGFyKiBzbSA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX01PREVMIikpIHsKLSAgICAgIHNoYWRlck1vZGVsID0gc207Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICAgIGlmIChjbVByb3Agc20gPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9NT0RFTCIpKSB7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgeworICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVsiU2hhZGVyTW9kZWwiXSA9ICpzbTsKKyAgICAgIH0KICAgICB9CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCBvdXRwdXQgaGVhZGVyIGZpbGUgdG8gdXNlIGlmIGFueQotICAgIGlmIChjb25zdCBjaGFyKiBvaGYgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9PVVRQVVRfSEVBREVSX0ZJTEUiKSkgewotICAgICAgb3V0cHV0SGVhZGVyRmlsZSA9IG9oZjsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgaWYgKGNtUHJvcCBvaGYgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9PVVRQVVRfSEVBREVSX0ZJTEUiKSkgeworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ11bIkhlYWRlckZpbGVPdXRwdXQiXSA9ICpvaGY7CisgICAgICB9CiAgICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmFyaWFibGUgbmFtZSB0byB1c2UgaWYgYW55Ci0gICAgaWYgKGNvbnN0IGNoYXIqIHZuID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfVkFSSUFCTEVfTkFNRSIpKSB7Ci0gICAgICB2YXJpYWJsZU5hbWUgPSB2bjsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgaWYgKGNtUHJvcCB2biA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX1ZBUklBQkxFX05BTUUiKSkgeworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ11bIlZhcmlhYmxlTmFtZSJdID0gKnZuOworICAgICAgfQogICAgIH0KICAgICAvLyBGaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IGFkZGl0aW9uYWwgZmxhZ3MgdG8gdXNlCi0gICAgaWYgKGNvbnN0IGNoYXIqIHNhZiA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0ZMQUdTIikpIHsKLSAgICAgIHNoYWRlckFkZGl0aW9uYWxGbGFncyA9IHNhZjsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgaWYgKGNtUHJvcCBzYWYgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9GTEFHUyIpKSB7CisgICAgICBmb3IgKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWcgOiB0aGlzLT5Db25maWd1cmF0aW9ucykgeworICAgICAgICB0b29sU2V0dGluZ3NbY29uZmlnXVsiQWRkaXRpb25hbE9wdGlvbnMiXSA9ICpzYWY7CisgICAgICB9CiAgICAgfQogICAgIC8vIEZpZ3VyZSBvdXQgaWYgZGVidWcgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGdlbmVyYXRlZAotICAgIGlmIChjb25zdCBjaGFyKiBzZWQgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9FTkFCTEVfREVCVUciKSkgewotICAgICAgc2hhZGVyRW5hYmxlRGVidWcgPSBzZWQ7Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICAgIGlmIChjbVByb3Agc2VkID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfRU5BQkxFX0RFQlVHIikpIHsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZTsKKyAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0gZ2UuUGFyc2UoKnNlZCk7CisKKyAgICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbmZpZyA6IHRoaXMtPkNvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGV2YWx1YXRlZCA9IGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisKKyAgICAgICAgaWYgKCFldmFsdWF0ZWQuZW1wdHkoKSkgeworICAgICAgICAgIHRvb2xTZXR0aW5nc1tjb25maWddWyJFbmFibGVEZWJ1Z2dpbmdJbmZvcm1hdGlvbiJdID0KKyAgICAgICAgICAgIGNtSXNPbihldmFsdWF0ZWQpID8gInRydWUiIDogImZhbHNlIjsKKyAgICAgICAgfQorICAgICAgfQogICAgIH0KICAgICAvLyBGaWd1cmUgb3V0IGlmIG9wdGltaXphdGlvbnMgc2hvdWxkIGJlIGRpc2FibGVkCi0gICAgaWYgKGNvbnN0IGNoYXIqIHNkbyA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX0RJU0FCTEVfT1BUSU1JWkFUSU9OUyIpKSB7Ci0gICAgICBzaGFkZXJEaXNhYmxlT3B0aW1pemF0aW9ucyA9IHNkbzsKLSAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CisgICAgaWYgKGNtUHJvcCBzZG8gPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NIQURFUl9ESVNBQkxFX09QVElNSVpBVElPTlMiKSkgeworICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlOworICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjZ2UgPSBnZS5QYXJzZSgqc2RvKTsKKworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXZhbHVhdGVkID0gY2dlLT5FdmFsdWF0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKworICAgICAgICBpZiAoIWV2YWx1YXRlZC5lbXB0eSgpKSB7CisgICAgICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ11bIkRpc2FibGVPcHRpbWl6YXRpb25zIl0gPQorICAgICAgICAgICAgY21Jc09uKGV2YWx1YXRlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiOworICAgICAgICB9CisgICAgICB9CiAgICAgfQotICAgIGlmIChjb25zdCBjaGFyKiBzb2ZuID0gc2YtPkdldFByb3BlcnR5KCJWU19TSEFERVJfT0JKRUNUX0ZJTEVfTkFNRSIpKSB7Ci0gICAgICBzaGFkZXJPYmplY3RGaWxlTmFtZSA9IHNvZm47Ci0gICAgICB0b29sSGFzU2V0dGluZ3MgPSB0cnVlOworICAgIGlmIChjbVByb3Agc29mbiA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfU0hBREVSX09CSkVDVF9GSUxFX05BTUUiKSkgeworICAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlnIDogdGhpcy0+Q29uZmlndXJhdGlvbnMpIHsKKyAgICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ11bIk9iamVjdEZpbGVPdXRwdXQiXSA9ICpzb2ZuOworICAgICAgfQogICAgIH0KICAgfSBlbHNlIGlmIChleHQgPT0gImpwZyIgfHwgZXh0ID09ICJwbmciKSB7CiAgICAgdG9vbCA9ICJJbWFnZSI7CkBAIC0xODcwLDkgKzE5NDYsOSBAQAogICB9IGVsc2UgaWYgKGV4dCA9PSAidnNpeG1hbmlmZXN0IikgewogICAgIHN1YlR5cGUgPSAiRGVzaWduZXIiOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiBjID0gc2YtPkdldFByb3BlcnR5KCJWU19DT1BZX1RPX09VVF9ESVIiKSkgeworICBpZiAoY21Qcm9wIGMgPSBzZi0+R2V0UHJvcGVydHkoIlZTX0NPUFlfVE9fT1VUX0RJUiIpKSB7CiAgICAgdG9vbCA9ICJDb250ZW50IjsKLSAgICBjb3B5VG9PdXREaXIgPSBjOworICAgIGNvcHlUb091dERpciA9ICpjOwogICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7CiAgIH0KICAgaWYgKHNmLT5HZXRQcm9wZXJ0eUFzQm9vbCgiVlNfSU5DTFVERV9JTl9WU0lYIikpIHsKQEAgLTE4OTksMzIgKzE5NzUsNzkgQEAKICAgICB9CiAgIH0KIAotICBjb25zdCBjaGFyKiB0b29sT3ZlcnJpZGUgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1RPT0xfT1ZFUlJJREUiKTsKLSAgaWYgKHRvb2xPdmVycmlkZSAmJiAqdG9vbE92ZXJyaWRlKSB7Ci0gICAgdG9vbCA9IHRvb2xPdmVycmlkZTsKKyAgY21Qcm9wIHRvb2xPdmVycmlkZSA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfVE9PTF9PVkVSUklERSIpOworICBpZiAoY21Ob25lbXB0eSh0b29sT3ZlcnJpZGUpKSB7CisgICAgdG9vbCA9IHRvb2xPdmVycmlkZS0+Y19zdHIoKTsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIGRlcGxveUNvbnRlbnQ7CiAgIHN0ZDo6c3RyaW5nIGRlcGxveUxvY2F0aW9uOwogICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1Bob25lKCkgfHwKICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NTdG9yZSgpKSB7Ci0gICAgY29uc3QgY2hhciogY29udGVudCA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfREVQTE9ZTUVOVF9DT05URU5UIik7Ci0gICAgaWYgKGNvbnRlbnQgJiYgKmNvbnRlbnQpIHsKKyAgICBjbVByb3AgY29udGVudCA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfREVQTE9ZTUVOVF9DT05URU5UIik7CisgICAgaWYgKGNtTm9uZW1wdHkoY29udGVudCkpIHsKICAgICAgIHRvb2xIYXNTZXR0aW5ncyA9IHRydWU7Ci0gICAgICBkZXBsb3lDb250ZW50ID0gY29udGVudDsKKyAgICAgIGRlcGxveUNvbnRlbnQgPSAqY29udGVudDsKIAotICAgICAgY29uc3QgY2hhciogbG9jYXRpb24gPSBzZi0+R2V0UHJvcGVydHkoIlZTX0RFUExPWU1FTlRfTE9DQVRJT04iKTsKLSAgICAgIGlmIChsb2NhdGlvbiAmJiAqbG9jYXRpb24pIHsKLSAgICAgICAgZGVwbG95TG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICAgIGNtUHJvcCBsb2NhdGlvbiA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfREVQTE9ZTUVOVF9MT0NBVElPTiIpOworICAgICAgaWYgKGNtTm9uZW1wdHkobG9jYXRpb24pKSB7CisgICAgICAgIGRlcGxveUxvY2F0aW9uID0gKmxvY2F0aW9uOwogICAgICAgfQogICAgIH0KICAgfQogCisgIGlmIChQYXJzZWRUb29sVGFyZ2V0U2V0dGluZ3MuZmluZCh0b29sKSA9PSBQYXJzZWRUb29sVGFyZ2V0U2V0dGluZ3MuZW5kKCkpIHsKKyAgICBjbVByb3AgdG9vbFRhcmdldFByb3BlcnR5ID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPkdldFByb3BlcnR5KAorICAgICAgIlZTX1NPVVJDRV9TRVRUSU5HU18iICsgc3RkOjpzdHJpbmcodG9vbCkpOworICAgIENvbmZpZ1RvU2V0dGluZ3MgdG9vbFRhcmdldFNldHRpbmdzOworICAgIGlmICh0b29sVGFyZ2V0UHJvcGVydHkpIHsKKyAgICAgIFBhcnNlU2V0dGluZ3NQcm9wZXJ0eSgqdG9vbFRhcmdldFByb3BlcnR5LCB0b29sVGFyZ2V0U2V0dGluZ3MpOworICAgIH0KKworICAgIFBhcnNlZFRvb2xUYXJnZXRTZXR0aW5nc1t0b29sXSA9IHRvb2xUYXJnZXRTZXR0aW5nczsKKyAgfQorCisgIGZvciAoY29uc3QgYXV0byYgY29uZmlnVG9TZXR0aW5nIDogUGFyc2VkVG9vbFRhcmdldFNldHRpbmdzW3Rvb2xdKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBzZXR0aW5nIDogY29uZmlnVG9TZXR0aW5nLnNlY29uZCkgeworICAgICAgdG9vbFNldHRpbmdzW2NvbmZpZ1RvU2V0dGluZy5maXJzdF1bc2V0dGluZy5maXJzdF0gPSBzZXR0aW5nLnNlY29uZDsKKyAgICB9CisgIH0KKworICBpZiAoY21Qcm9wIHAgPSBzZi0+R2V0UHJvcGVydHkoIlZTX1NFVFRJTkdTIikpIHsKKyAgICBQYXJzZVNldHRpbmdzUHJvcGVydHkoKnAsIHRvb2xTZXR0aW5ncyk7CisgIH0KKworICBpZiAoIXRvb2xTZXR0aW5ncy5lbXB0eSgpKSB7CisgICAgdG9vbEhhc1NldHRpbmdzID0gdHJ1ZTsKKyAgfQorCiAgIEVsZW0gZTIoZTEsIHRvb2wpOwogICB0aGlzLT5Xcml0ZVNvdXJjZShlMiwgc2YpOwogICBpZiAodG9vbEhhc1NldHRpbmdzKSB7CiAgICAgZTIuU2V0SGFzRWxlbWVudHMoKTsKIAorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB3cml0dGVuU2V0dGluZ3M7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb25maWdTZXR0aW5ncyA6IHRvb2xTZXR0aW5ncykgeworICAgICAgZm9yIChjb25zdCBhdXRvJiBzZXR0aW5nIDogY29uZmlnU2V0dGluZ3Muc2Vjb25kKSB7CisKKyAgICAgICAgaWYgKHN0ZDo6ZmluZCh3cml0dGVuU2V0dGluZ3MuYmVnaW4oKSwgd3JpdHRlblNldHRpbmdzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuZmlyc3QpICE9IHdyaXR0ZW5TZXR0aW5ncy5lbmQoKSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFByb3BlcnR5SXNTYW1lSW5BbGxDb25maWdzKHRvb2xTZXR0aW5ncywgc2V0dGluZy5maXJzdCkpIHsKKyAgICAgICAgICBlMi5FbGVtZW50KHNldHRpbmcuZmlyc3QsIHNldHRpbmcuc2Vjb25kKTsKKyAgICAgICAgICB3cml0dGVuU2V0dGluZ3MucHVzaF9iYWNrKHNldHRpbmcuZmlyc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGUyLldyaXRlUGxhdGZvcm1Db25maWdUYWcoc2V0dGluZy5maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSciICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnU2V0dGluZ3MuZmlyc3QgKyAifCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5QbGF0Zm9ybSArICInIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuc2Vjb25kKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKwogICAgIGlmICghZGVwbG95Q29udGVudC5lbXB0eSgpKSB7CiAgICAgICBjbUdlbmVyYXRvckV4cHJlc3Npb24gZ2U7CiAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y21Db21waWxlZEdlbmVyYXRvckV4cHJlc3Npb24+IGNnZSA9CkBAIC0xOTUwLDgyICsyMDczLDEzIEBACiAgICAgICAgIH0KICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFzaGFkZXJUeXBlLmVtcHR5KCkpIHsKLSAgICAgIGUyLkVsZW1lbnQoIlNoYWRlclR5cGUiLCBzaGFkZXJUeXBlKTsKLSAgICB9Ci0gICAgaWYgKCFzaGFkZXJFbnRyeVBvaW50LmVtcHR5KCkpIHsKLSAgICAgIGUyLkVsZW1lbnQoIkVudHJ5UG9pbnROYW1lIiwgc2hhZGVyRW50cnlQb2ludCk7Ci0gICAgfQotICAgIGlmICghc2hhZGVyTW9kZWwuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiU2hhZGVyTW9kZWwiLCBzaGFkZXJNb2RlbCk7Ci0gICAgfQotICAgIGlmICghb3V0cHV0SGVhZGVyRmlsZS5lbXB0eSgpKSB7Ci0gICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSB0aGlzLT5Db25maWd1cmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBlMi5Xcml0ZVBsYXRmb3JtQ29uZmlnVGFnKCJIZWFkZXJGaWxlT3V0cHV0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db25maWd1cmF0aW9uc1tpXSArICJ8IiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5QbGF0Zm9ybSArICInIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRIZWFkZXJGaWxlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCF2YXJpYWJsZU5hbWUuZW1wdHkoKSkgewotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gdGhpcy0+Q29uZmlndXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZTIuV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZygiVmFyaWFibGVOYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db25maWd1cmF0aW9uc1tpXSArICJ8IiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5QbGF0Zm9ybSArICInIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZU5hbWUpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoIXNoYWRlckVuYWJsZURlYnVnLmVtcHR5KCkpIHsKLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbiBnZTsKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUNvbXBpbGVkR2VuZXJhdG9yRXhwcmVzc2lvbj4gY2dlID0KLSAgICAgICAgZ2UuUGFyc2Uoc2hhZGVyRW5hYmxlRGVidWcpOwogCi0gICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSB0aGlzLT5Db25maWd1cmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZW5hYmxlRGVidWcgPQotICAgICAgICAgIGNnZS0+RXZhbHVhdGUodGhpcy0+TG9jYWxHZW5lcmF0b3IsIHRoaXMtPkNvbmZpZ3VyYXRpb25zW2ldKTsKLSAgICAgICAgaWYgKCFlbmFibGVEZWJ1Zy5lbXB0eSgpKSB7Ci0gICAgICAgICAgZTIuV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZygiRW5hYmxlRGVidWdnaW5nSW5mb3JtYXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09JyIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5Db25maWd1cmF0aW9uc1tpXSArICJ8IiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlBsYXRmb3JtICsgIiciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21Jc09uKGVuYWJsZURlYnVnKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghc2hhZGVyRGlzYWJsZU9wdGltaXphdGlvbnMuZW1wdHkoKSkgewotICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uIGdlOwotICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtQ29tcGlsZWRHZW5lcmF0b3JFeHByZXNzaW9uPiBjZ2UgPQotICAgICAgICBnZS5QYXJzZShzaGFkZXJEaXNhYmxlT3B0aW1pemF0aW9ucyk7Ci0KLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHRoaXMtPkNvbmZpZ3VyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXNhYmxlT3B0aW1pemF0aW9ucyA9Ci0gICAgICAgICAgY2dlLT5FdmFsdWF0ZSh0aGlzLT5Mb2NhbEdlbmVyYXRvciwgdGhpcy0+Q29uZmlndXJhdGlvbnNbaV0pOwotICAgICAgICBpZiAoIWRpc2FibGVPcHRpbWl6YXRpb25zLmVtcHR5KCkpIHsKLSAgICAgICAgICBlMi5Xcml0ZVBsYXRmb3JtQ29uZmlnVGFnKAotICAgICAgICAgICAgIkRpc2FibGVPcHRpbWl6YXRpb25zIiwKLSAgICAgICAgICAgICInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSciICsgdGhpcy0+Q29uZmlndXJhdGlvbnNbaV0gKwotICAgICAgICAgICAgICAifCIgKyB0aGlzLT5QbGF0Zm9ybSArICInIiwKLSAgICAgICAgICAgIChjbUlzT24oZGlzYWJsZU9wdGltaXphdGlvbnMpID8gInRydWUiIDogImZhbHNlIikpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghc2hhZGVyT2JqZWN0RmlsZU5hbWUuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiT2JqZWN0RmlsZU91dHB1dCIsIHNoYWRlck9iamVjdEZpbGVOYW1lKTsKLSAgICB9Ci0gICAgaWYgKCFzaGFkZXJBZGRpdGlvbmFsRmxhZ3MuZW1wdHkoKSkgewotICAgICAgZTIuRWxlbWVudCgiQWRkaXRpb25hbE9wdGlvbnMiLCBzaGFkZXJBZGRpdGlvbmFsRmxhZ3MpOwotICAgIH0KICAgICBpZiAoIXNldHRpbmdzR2VuZXJhdG9yLmVtcHR5KCkpIHsKICAgICAgIGUyLkVsZW1lbnQoIkdlbmVyYXRvciIsIHNldHRpbmdzR2VuZXJhdG9yKTsKICAgICB9CiAgICAgaWYgKCFzZXR0aW5nc0xhc3RHZW5PdXRwdXQuZW1wdHkoKSkgewogICAgICAgZTIuRWxlbWVudCgiTGFzdEdlbk91dHB1dCIsIHNldHRpbmdzTGFzdEdlbk91dHB1dCk7CiAgICAgfQotICAgIGlmICghc291cmNlTGluay5lbXB0eSgpKSB7Ci0gICAgICBlMi5FbGVtZW50KCJMaW5rIiwgc291cmNlTGluayk7Ci0gICAgfQogICAgIGlmICghc3ViVHlwZS5lbXB0eSgpKSB7CiAgICAgICBlMi5FbGVtZW50KCJTdWJUeXBlIiwgc3ViVHlwZSk7CiAgICAgfQpAQCAtMjA3OCw2ICsyMTMyLDIwIEBACiAgIENvbnZlcnRUb1dpbmRvd3NTbGFzaChzb3VyY2VGaWxlKTsKICAgZTIuQXR0cmlidXRlKCJJbmNsdWRlIiwgc291cmNlRmlsZSk7CiAKKyAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaiAmJiAhdGhpcy0+SW5Tb3VyY2VCdWlsZCkgeworICAgIC8vIEZvciBvdXQgb2Ygc291cmNlIHByb2plY3RzIHdlIGhhdmUgdG8gcHJvdmlkZSBhIGxpbmsgKGlmIG5vdCBzcGVjaWZpZWQKKyAgICAvLyB2aWEgcHJvcGVydHkpIGZvciBldmVyeSBzb3VyY2UgZmlsZSAoYmVzaWRlcyAuY3MgZmlsZXMpIG90aGVyd2lzZSB0aGV5CisgICAgLy8gd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBWUyBhdCBhbGwuCisgICAgLy8gRmlyc3Qgd2UgY2hlY2sgaWYgdGhlIGZpbGUgaXMgaW4gYSBzb3VyY2UgZ3JvdXAsIHRoZW4gd2UgY2hlY2sgaWYgdGhlCisgICAgLy8gZmlsZSBwYXRoIGlzIHJlbGF0aXZlIHRvIGN1cnJlbnQgc291cmNlLSBvciBiaW5hcnktZGlyLCBvdGhlcndpc2UgaXQgaXMKKyAgICAvLyBhZGRlZCB3aXRoIHRoZSBwbGFpbiBmaWxlbmFtZSB3aXRob3V0IGFueSBwYXRoLiBUaGlzIG1lYW5zIHRoZSBmaWxlIHdpbGwKKyAgICAvLyBzaG93IHVwIGF0IHJvb3QtbGV2ZWwgb2YgdGhlIGNzcHJvaiAod2hlcmUgQ01ha2VMaXN0cy50eHQgZXRjLiBhcmUpLgorICAgIHN0ZDo6c3RyaW5nIGxpbmsgPSB0aGlzLT5HZXRDU2hhcnBTb3VyY2VMaW5rKHNmKTsKKyAgICBpZiAobGluay5lbXB0eSgpKQorICAgICAgbGluayA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKHNmLT5HZXRGdWxsUGF0aCgpKTsKKyAgICBlMi5FbGVtZW50KCJMaW5rIiwgbGluayk7CisgIH0KKwogICBUb29sU291cmNlIHRvb2xTb3VyY2UgPSB7IHNmLCBmb3JjZVJlbGF0aXZlIH07CiAgIHRoaXMtPlRvb2xzW2UyLlRhZ10ucHVzaF9iYWNrKHRvb2xTb3VyY2UpOwogfQpAQCAtMjE3OCwxMCArMjI0NiwxMCBAQAogICAgICAgICB9CiAgICAgICB9IGJyZWFrOwogICAgICAgY2FzZSBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlS2luZFJlc3g6Ci0gICAgICAgIC8vIEhhbmRsZWQgZWxzZXdoZXJlLgorICAgICAgICB0aGlzLT5SZXN4T2Jqcy5wdXNoX2JhY2soc2kuU291cmNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VLaW5kWGFtbDoKLSAgICAgICAgLy8gSGFuZGxlZCBlbHNld2hlcmUuCisgICAgICAgIHRoaXMtPlhhbWxPYmpzLnB1c2hfYmFjayhzaS5Tb3VyY2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIyMjEsMTEgKzIyODksMTEgQEAKICAgICAgICAgICBlMi5BdHRyaWJ1dGUoIkN1c3RvbVVuaXR5RmlsZSIsICJ0cnVlIik7CiAKICAgICAgICAgICBzdGQ6OnN0cmluZyB1bml0eURpciA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lUGF0aCgKLSAgICAgICAgICAgIHNpLlNvdXJjZS0+R2V0UHJvcGVydHkoIlVOSVRZX1NPVVJDRV9GSUxFIikpOworICAgICAgICAgICAgKnNpLlNvdXJjZS0+R2V0UHJvcGVydHkoIlVOSVRZX1NPVVJDRV9GSUxFIikpOwogICAgICAgICAgIGUyLkF0dHJpYnV0ZSgiVW5pdHlGaWxlc0RpcmVjdG9yeSIsIHVuaXR5RGlyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAvLyBWaXN1YWwgU3R1ZGlvIHZlcnNpb25zIHByaW9yIHRvIDIwMTcgMTUuOCBkbyBub3Qga25vdyBhYm91dCB1bml0eQotICAgICAgICAgIC8vIGJ1aWxkcywgdGh1cyB3ZSBleGNsdWRlIHRoZSBmaWxlcyBhbHJlZHkgcGFydCBvZiB1bml0eSBzb3VyY2VzLgorICAgICAgICAgIC8vIGJ1aWxkcywgdGh1cyB3ZSBleGNsdWRlIHRoZSBmaWxlcyBhbHJlYWR5IHBhcnQgb2YgdW5pdHkgc291cmNlcy4KICAgICAgICAgICBpZiAoIXNpLlNvdXJjZS0+R2V0UHJvcGVydHlBc0Jvb2woIlNLSVBfVU5JVFlfQlVJTERfSU5DTFVTSU9OIikpIHsKICAgICAgICAgICAgIGV4Y2x1ZGVfY29uZmlncyA9IHNpLkNvbmZpZ3M7CiAgICAgICAgICAgfQpAQCAtMjI2Niw0MSArMjMzNCwzNiBAQAogICBib29sIGNvbmZpZ0RlcGVuZGVudERlZmluZXMgPSBmYWxzZTsKICAgc3RkOjpzdHJpbmcgaW5jbHVkZXM7CiAgIGJvb2wgY29uZmlnRGVwZW5kZW50SW5jbHVkZXMgPSBmYWxzZTsKLSAgaWYgKGNvbnN0IGNoYXIqIGNmbGFncyA9IHNmLkdldFByb3BlcnR5KCJDT01QSUxFX0ZMQUdTIikpIHsKKyAgaWYgKGNtUHJvcCBjZmxhZ3MgPSBzZi5HZXRQcm9wZXJ0eSgiQ09NUElMRV9GTEFHUyIpKSB7CiAgICAgY29uZmlnRGVwZW5kZW50RmxhZ3MgPQotICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKGNmbGFncykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Ci0gICAgZmxhZ3MgKz0gY2ZsYWdzOworICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKCpjZmxhZ3MpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgIGZsYWdzICs9ICpjZmxhZ3M7CiAgIH0KLSAgaWYgKGNvbnN0IGNoYXIqIGNvcHRpb25zID0gc2YuR2V0UHJvcGVydHkoIkNPTVBJTEVfT1BUSU9OUyIpKSB7CisgIGlmIChjbVByb3AgY29wdGlvbnMgPSBzZi5HZXRQcm9wZXJ0eSgiQ09NUElMRV9PUFRJT05TIikpIHsKICAgICBjb25maWdEZXBlbmRlbnRPcHRpb25zID0KLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChjb3B0aW9ucykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Ci0gICAgb3B0aW9ucyArPSBjb3B0aW9uczsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZCgqY29wdGlvbnMpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgIG9wdGlvbnMgKz0gKmNvcHRpb25zOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiBjZGVmcyA9IHNmLkdldFByb3BlcnR5KCJDT01QSUxFX0RFRklOSVRJT05TIikpIHsKKyAgaWYgKGNtUHJvcCBjZGVmcyA9IHNmLkdldFByb3BlcnR5KCJDT01QSUxFX0RFRklOSVRJT05TIikpIHsKICAgICBjb25maWdEZXBlbmRlbnREZWZpbmVzID0KLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChjZGVmcykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Ci0gICAgZGVmaW5lcyArPSBjZGVmczsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZCgqY2RlZnMpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgIGRlZmluZXMgKz0gKmNkZWZzOwogICB9Ci0gIGlmIChjb25zdCBjaGFyKiBjaW5jbHVkZXMgPSBzZi5HZXRQcm9wZXJ0eSgiSU5DTFVERV9ESVJFQ1RPUklFUyIpKSB7CisgIGlmIChjbVByb3AgY2luY2x1ZGVzID0gc2YuR2V0UHJvcGVydHkoIklOQ0xVREVfRElSRUNUT1JJRVMiKSkgewogICAgIGNvbmZpZ0RlcGVuZGVudEluY2x1ZGVzID0KLSAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZChjaW5jbHVkZXMpICE9IHN0ZDo6c3RyaW5nOjpucG9zOwotICAgIGluY2x1ZGVzICs9IGNpbmNsdWRlczsKKyAgICAgIGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RmluZCgqY2luY2x1ZGVzKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICBpbmNsdWRlcyArPSAqY2luY2x1ZGVzOwogICB9Ci0gIHN0ZDo6c3RyaW5nIGxhbmcgPQotICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TGFuZ3VhZ2VGcm9tRXh0ZW5zaW9uKHNmLkdldEV4dGVuc2lvbigpLmNfc3RyKCkpOwotICBzdGQ6OnN0cmluZyBzb3VyY2VMYW5nID0gdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFNvdXJjZUZpbGVMYW5ndWFnZShzZik7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5rTGFuZ3VhZ2UgPQotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua2VyTGFuZ3VhZ2UoIiIpOwotICBib29sIG5lZWRGb3JjZUxhbmcgPSBmYWxzZTsKLSAgLy8gc291cmNlIGZpbGUgZG9lcyBub3QgbWF0Y2ggaXRzIGV4dGVuc2lvbiBsYW5ndWFnZQotICBpZiAobGFuZyAhPSBzb3VyY2VMYW5nKSB7Ci0gICAgbmVlZEZvcmNlTGFuZyA9IHRydWU7Ci0gICAgbGFuZyA9IHNvdXJjZUxhbmc7Ci0gIH0KLSAgLy8gaWYgdGhlIHNvdXJjZSBmaWxlIGRvZXMgbm90IG1hdGNoIHRoZSBsaW5rZXIgbGFuZ3VhZ2UKLSAgLy8gdGhlbiBmb3JjZSBjIG9yIGMrKworCisgIC8vIEZvcmNlIGxhbmd1YWdlIGlmIHRoZSBmaWxlIGV4dGVuc2lvbiBkb2VzIG5vdCBtYXRjaC4KKyAgLy8gTm90ZSB0aGF0IE1TVkMgdHJlYXRzIHRoZSB1cHBlci1jYXNlICcuQycgZXh0ZW5zaW9uIGFzIEMgYW5kIG5vdCBDKysuCisgIHN0ZDo6c3RyaW5nIGNvbnN0IGV4dCA9IHNmLkdldEV4dGVuc2lvbigpOworICBzdGQ6OnN0cmluZyBjb25zdCBleHRMYW5nID0gZXh0ID09ICJDIgorICAgID8gIkMiCisgICAgOiB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldExhbmd1YWdlRnJvbUV4dGVuc2lvbihleHQuY19zdHIoKSk7CisgIHN0ZDo6c3RyaW5nIGxhbmcgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0U291cmNlRmlsZUxhbmd1YWdlKHNmKTsKICAgY29uc3QgY2hhciogY29tcGlsZUFzID0gMDsKLSAgaWYgKG5lZWRGb3JjZUxhbmcgfHwgKGxpbmtMYW5ndWFnZSAhPSBsYW5nKSkgeworICBpZiAobGFuZyAhPSBleHRMYW5nKSB7CiAgICAgaWYgKGxhbmcgPT0gIkNYWCIpIHsKICAgICAgIC8vIGZvcmNlIGEgQysrIGZpbGUgdHlwZQogICAgICAgY29tcGlsZUFzID0gIkNvbXBpbGVBc0NwcCI7CkBAIC0yMzA5LDYgKzIzNzIsNyBAQAogICAgICAgY29tcGlsZUFzID0gIkNvbXBpbGVBc0MiOwogICAgIH0KICAgfQorCiAgIGJvb2wgbm9XaW5SVCA9IHRoaXMtPlRhcmdldENvbXBpbGVBc1dpblJUICYmIGxhbmcgPT0gIkMiOwogICAvLyBmb3IgdGhlIGZpcnN0IHRpbWUgd2UgbmVlZCBhIG5ldyBsaW5lIGlmIHRoZXJlIGlzIHNvbWV0aGluZwogICAvLyBwcm9kdWNlZCBoZXJlLgpAQCAtMjMyMywxMyArMjM4NywxMyBAQAogICAgIHN0ZDo6c3RyaW5nIGNvbmZpZ1VwcGVyID0gY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKGNvbmZpZyk7CiAgICAgc3RkOjpzdHJpbmcgY29uZmlnRGVmaW5lcyA9IGRlZmluZXM7CiAgICAgc3RkOjpzdHJpbmcgZGVmUHJvcE5hbWUgPSBjbVN0ckNhdCgiQ09NUElMRV9ERUZJTklUSU9OU18iLCBjb25maWdVcHBlcik7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGNjZGVmcyA9IHNmLkdldFByb3BlcnR5KGRlZlByb3BOYW1lKSkgeworICAgIGlmIChjbVByb3AgY2NkZWZzID0gc2YuR2V0UHJvcGVydHkoZGVmUHJvcE5hbWUpKSB7CiAgICAgICBpZiAoIWNvbmZpZ0RlZmluZXMuZW1wdHkoKSkgewogICAgICAgICBjb25maWdEZWZpbmVzICs9ICI7IjsKICAgICAgIH0KICAgICAgIGNvbmZpZ0RlcGVuZGVudERlZmluZXMgfD0KLSAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKGNjZGVmcykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Ci0gICAgICBjb25maWdEZWZpbmVzICs9IGNjZGVmczsKKyAgICAgICAgY21HZW5lcmF0b3JFeHByZXNzaW9uOjpGaW5kKCpjY2RlZnMpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgY29uZmlnRGVmaW5lcyArPSAqY2NkZWZzOwogICAgIH0KIAogICAgIC8vIEFkZCBwcmVjb21waWxlIGhlYWRlcnMgY29tcGlsZSBvcHRpb25zLgpAQCAtMjQzMCwxOSArMjQ5NCwxMyBAQAogICB9CiAgIGlmICh0aGlzLT5Jc1hhbWxTb3VyY2Uoc291cmNlLT5HZXRGdWxsUGF0aCgpKSkgewogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlTmFtZSA9IHNvdXJjZS0+R2V0RnVsbFBhdGgoKTsKLSAgICBzdGQ6OnN0cmluZyB4YW1sRmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHIoMCwgZmlsZU5hbWUuZmluZF9sYXN0X29mKCIuIikpOwotICAgIGUyLkVsZW1lbnQoIkRlcGVuZGVudFVwb24iLCB4YW1sRmlsZU5hbWUpOworICAgIGUyLkVsZW1lbnQoIkRlcGVuZGVudFVwb24iLAorICAgICAgICAgICAgICAgZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmZpbmRfbGFzdF9vZigiLiIpKSk7CiAgIH0KICAgaWYgKHRoaXMtPlByb2plY3RUeXBlID09IGNzcHJvaikgewogICAgIHN0ZDo6c3RyaW5nIGYgPSBzb3VyY2UtPkdldEZ1bGxQYXRoKCk7CiAgICAgdXNpbmcgQ3NQcm9wTWFwID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjsKICAgICBDc1Byb3BNYXAgc291cmNlRmlsZVRhZ3M7Ci0gICAgLy8gc2V0IDxMaW5rPiB0YWcgaWYgbmVjZXNzYXJ5Ci0gICAgc3RkOjpzdHJpbmcgbGluazsKLSAgICB0aGlzLT5HZXRDU2hhcnBTb3VyY2VMaW5rKHNvdXJjZSwgbGluayk7Ci0gICAgaWYgKCFsaW5rLmVtcHR5KCkpIHsKLSAgICAgIHNvdXJjZUZpbGVUYWdzWyJMaW5rIl0gPSBsaW5rOwotICAgIH0KICAgICB0aGlzLT5HZXRDU2hhcnBTb3VyY2VQcm9wZXJ0aWVzKCZzZiwgc291cmNlRmlsZVRhZ3MpOwogICAgIC8vIHdyaXRlIHNvdXJjZSBmaWxlIHNwZWNpZmljIHRhZ3MKICAgICBpZiAoIXNvdXJjZUZpbGVUYWdzLmVtcHR5KCkpIHsKQEAgLTI0ODAsMzQgKzI1MzgsMzQgQEAKICAgICBjb25zdCBzdGQ6OnN0cmluZyBjb25kID0gdGhpcy0+Q2FsY0NvbmRpdGlvbihjb25maWcpOwogCiAgICAgaWYgKHR0eXBlIDw9IGNtU3RhdGVFbnVtczo6VVRJTElUWSkgewotICAgICAgaWYgKGNvbnN0IGNoYXIqIHdvcmtpbmdEaXIgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAorICAgICAgaWYgKGNtUHJvcCB3b3JraW5nRGlyID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKICAgICAgICAgICAgICJWU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWSIpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGdlbldvcmtpbmdEaXIgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAotICAgICAgICAgIHdvcmtpbmdEaXIsIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWcpOworICAgICAgICAgICp3b3JraW5nRGlyLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKICAgICAgICAgZTEuV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZygiTG9jYWxEZWJ1Z2dlcldvcmtpbmdEaXJlY3RvcnkiLCBjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbldvcmtpbmdEaXIpOwogICAgICAgfQogCi0gICAgICBpZiAoY29uc3QgY2hhciogZW52aXJvbm1lbnQgPQorICAgICAgaWYgKGNtUHJvcCBlbnZpcm9ubWVudCA9CiAgICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19ERUJVR0dFUl9FTlZJUk9OTUVOVCIpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGdlbkVudmlyb25tZW50ID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgICAgICBlbnZpcm9ubWVudCwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CisgICAgICAgICAgKmVudmlyb25tZW50LCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKICAgICAgICAgZTEuV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZygiTG9jYWxEZWJ1Z2dlckVudmlyb25tZW50IiwgY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5FbnZpcm9ubWVudCk7CiAgICAgICB9CiAKLSAgICAgIGlmIChjb25zdCBjaGFyKiBkZWJ1Z2dlckNvbW1hbmQgPQorICAgICAgaWYgKGNtUHJvcCBkZWJ1Z2dlckNvbW1hbmQgPQogICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfREVCVUdHRVJfQ09NTUFORCIpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGdlbkRlYnVnZ2VyQ29tbWFuZCA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICAgICAgZGVidWdnZXJDb21tYW5kLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKyAgICAgICAgICAqZGVidWdnZXJDb21tYW5kLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKICAgICAgICAgZTEuV3JpdGVQbGF0Zm9ybUNvbmZpZ1RhZygiTG9jYWxEZWJ1Z2dlckNvbW1hbmQiLCBjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbkRlYnVnZ2VyQ29tbWFuZCk7CiAgICAgICB9CiAKLSAgICAgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kQXJndW1lbnRzID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKKyAgICAgIGlmIChjbVByb3AgY29tbWFuZEFyZ3VtZW50cyA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoCiAgICAgICAgICAgICAiVlNfREVCVUdHRVJfQ09NTUFORF9BUkdVTUVOVFMiKSkgewogICAgICAgICBzdGQ6OnN0cmluZyBnZW5Db21tYW5kQXJndW1lbnRzID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgICAgICBjb21tYW5kQXJndW1lbnRzLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnKTsKKyAgICAgICAgICAqY29tbWFuZEFyZ3VtZW50cywgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZyk7CiAgICAgICAgIGUxLldyaXRlUGxhdGZvcm1Db25maWdUYWcoIkxvY2FsRGVidWdnZXJDb21tYW5kQXJndW1lbnRzIiwgY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5Db21tYW5kQXJndW1lbnRzKTsKICAgICAgIH0KQEAgLTI2MjQsOSArMjY4Miw5IEBACiAKICAgLy8gU29tZSBsaW5rIG9wdGlvbnMgYmVsb25nIGhlcmUuICBVc2UgdGhlbSBub3cgYW5kIHJlbW92ZSB0aGVtIHNvIHRoYXQKICAgLy8gV3JpdGVMaW5rT3B0aW9ucyBkb2VzIG5vdCB1c2UgdGhlbS4KLSAgY29uc3QgY2hhciogZmxhZ3NbXSA9IHsgIkxpbmtEZWxheVNpZ24iLCAiTGlua0tleUZpbGUiLCAwIH07Ci0gIGZvciAoY29uc3QgY2hhcioqIGYgPSBmbGFnczsgKmY7ICsrZikgewotICAgIGNvbnN0IGNoYXIqIGZsYWcgPSAqZjsKKyAgc3RhdGljIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmbGFnc3sgIkxpbmtEZWxheVNpZ24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGlua0tleUZpbGUiIH07CisgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWcgOiBmbGFncykgewogICAgIGlmIChjb25zdCBjaGFyKiB2YWx1ZSA9IGxpbmtPcHRpb25zLkdldEZsYWcoZmxhZykpIHsKICAgICAgIGUxLldyaXRlUGxhdGZvcm1Db25maWdUYWcoZmxhZywgY29uZCwgdmFsdWUpOwogICAgICAgbGlua09wdGlvbnMuUmVtb3ZlRmxhZyhmbGFnKTsKQEAgLTI2OTIsNyArMjc1MCw3IEBACiAgIHN0ZDo6c3RyaW5nIGxhbmdGb3JDbENvbXBpbGU7CiAgIGlmICh0aGlzLT5Qcm9qZWN0VHlwZSA9PSBjc3Byb2opIHsKICAgICBsYW5nRm9yQ2xDb21waWxlID0gIkNTaGFycCI7Ci0gIH0gZWxzZSBpZiAoY21Db250YWlucyhjbExhbmdzLCBsaW5rTGFuZ3VhZ2UpKSB7CisgIH0gZWxzZSBpZiAoY206OmNvbnRhaW5zKGNsTGFuZ3MsIGxpbmtMYW5ndWFnZSkpIHsKICAgICBsYW5nRm9yQ2xDb21waWxlID0gbGlua0xhbmd1YWdlOwogICB9IGVsc2UgewogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBsYW5ndWFnZXM7CkBAIC0yNzExLDEzICsyNzY5LDYgQEAKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+QWRkQ29tcGlsZU9wdGlvbnMoZmxhZ3MsIHRoaXMtPkdlbmVyYXRvclRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ0ZvckNsQ29tcGlsZSwgY29uZmlnTmFtZSk7CiAgIH0KLSAgLy8gc2V0IHRoZSBjb3JyZWN0IGxhbmd1YWdlCi0gIGlmIChsaW5rTGFuZ3VhZ2UgPT0gIkMiKSB7Ci0gICAgY2xPcHRpb25zLkFkZEZsYWcoIkNvbXBpbGVBcyIsICJDb21waWxlQXNDIik7Ci0gIH0KLSAgaWYgKGxpbmtMYW5ndWFnZSA9PSAiQ1hYIikgewotICAgIGNsT3B0aW9ucy5BZGRGbGFnKCJDb21waWxlQXMiLCAiQ29tcGlsZUFzQ3BwIik7Ci0gIH0KIAogICAvLyBQdXQgdGhlIElQTyBlbmFibGVkIGNvbmZpZ3VyYXRpb25zIGludG8gYSBzZXQuCiAgIGlmICh0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPklzSVBPRW5hYmxlZChsaW5rTGFuZ3VhZ2UsIGNvbmZpZ05hbWUpKSB7CkBAIC0yNzY3LDkgKzI4MTgsOSBAQAogICAgICAgICB0aGlzLT5NYWtlZmlsZS0+SXNzdWVNZXNzYWdlKE1lc3NhZ2VUeXBlOjpXQVJOSU5HLCBtZXNzYWdlKTsKICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGF1dG8qIGNsciA9CisgICAgaWYgKGNtUHJvcCBjbHIgPQogICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkNPTU1PTl9MQU5HVUFHRV9SVU5USU1FIikpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGNsclN0cmluZyA9IGNscjsKKyAgICAgIHN0ZDo6c3RyaW5nIGNsclN0cmluZyA9ICpjbHI7CiAgICAgICBpZiAoIWNsclN0cmluZy5lbXB0eSgpKSB7CiAgICAgICAgIGNsclN0cmluZyA9ICI6IiArIGNsclN0cmluZzsKICAgICAgIH0KQEAgLTI3OTAsNiArMjg0MSw5IEBACiAgICAgY2FzZSBjc3Byb2o6CiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldENvbXBpbGVEZWZpbml0aW9ucyh0YXJnZXREZWZpbmVzLCBjb25maWdOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNTaGFycCIpOworICAgICAgY206OmVyYXNlX2lmKHRhcmdldERlZmluZXMsIFtdKHN0ZDo6c3RyaW5nIGNvbnN0JiBkZWYpIHsKKyAgICAgICAgcmV0dXJuIGRlZi5maW5kKCc9JykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICB9KTsKICAgICAgIGJyZWFrOwogICB9CiAgIGNsT3B0aW9ucy5BZGREZWZpbmVzKHRhcmdldERlZmluZXMpOwpAQCAtMjgxOCwxMCArMjg3Miw4IEBACiAgIH0KIAogICBpZiAodGhpcy0+TVNUb29scykgewotICAgIC8vIElmIHdlIGhhdmUgdGhlIFZTX1dJTlJUX0NPTVBPTkVOVCBvciBDTUFLRV9WU19XSU5SVF9CWV9ERUZBVUxUCi0gICAgLy8gc2V0IHRoZW4gZm9yY2UgQ29tcGlsZSBhcyBXaW5SVC4KLSAgICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eUFzQm9vbCgiVlNfV0lOUlRfQ09NUE9ORU5UIikgfHwKLSAgICAgICAgdGhpcy0+TWFrZWZpbGUtPklzT24oIkNNQUtFX1ZTX1dJTlJUX0JZX0RFRkFVTFQiKSkgeworICAgIC8vIElmIHdlIGhhdmUgdGhlIFZTX1dJTlJUX0NPTVBPTkVOVCBzZXQgdGhlbiBmb3JjZSBDb21waWxlIGFzIFdpblJUCisgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woIlZTX1dJTlJUX0NPTVBPTkVOVCIpKSB7CiAgICAgICBjbE9wdGlvbnMuQWRkRmxhZygiQ29tcGlsZUFzV2luUlQiLCAidHJ1ZSIpOwogICAgICAgLy8gRm9yIFdpblJUIGNvbXBvbmVudHMsIGFkZCB0aGUgX1dJTlJUX0RMTCBkZWZpbmUgdG8gcHJvZHVjZSBhIGxpYgogICAgICAgaWYgKHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6U0hBUkVEX0xJQlJBUlkgfHwKQEAgLTI4MjksNyArMjg4MSw4IEBACiAgICAgICAgIGNsT3B0aW9ucy5BZGREZWZpbmUoIl9XSU5SVF9ETEwiKTsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NTdG9yZSgpIHx8Ci0gICAgICAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzUGhvbmUoKSkgeworICAgICAgICAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1Bob25lKCkgfHwKKyAgICAgICAgICAgICAgIHRoaXMtPk1ha2VmaWxlLT5Jc09uKCJDTUFLRV9WU19XSU5SVF9CWV9ERUZBVUxUIikpIHsKICAgICAgIGlmICghY2xPcHRpb25zLklzV2luUnQoKSkgewogICAgICAgICBjbE9wdGlvbnMuQWRkRmxhZygiQ29tcGlsZUFzV2luUlQiLCAiZmFsc2UiKTsKICAgICAgIH0KQEAgLTI4NjYsNiArMjkxOSwxMiBAQAogICAgIGNsT3B0aW9ucy5SZW1vdmVGbGFnKCJTcGVjdHJlTWl0aWdhdGlvbiIpOwogICB9CiAKKyAgLy8gUmVtb3ZlIGFueSB0YXJnZXQtd2lkZSAtVEMgb3IgLVRQIGZsYWcgYWRkZWQgYnkgdGhlIHByb2plY3QuCisgIC8vIFN1Y2ggZmxhZ3MgYXJlIHVubmVjZXNzYXJ5IGFuZCBicmVhayBvdXIgbW9kZWwgb2YgbGFuZ3VhZ2Ugc2VsZWN0aW9uLgorICBpZiAobGFuZ0ZvckNsQ29tcGlsZSA9PSAiQyIgfHwgbGFuZ0ZvckNsQ29tcGlsZSA9PSAiQ1hYIikgeworICAgIGNsT3B0aW9ucy5SZW1vdmVGbGFnKCJDb21waWxlQXMiKTsKKyAgfQorCiAgIHRoaXMtPkNsT3B0aW9uc1tjb25maWdOYW1lXSA9IHN0ZDo6bW92ZShwT3B0aW9ucyk7CiAgIHJldHVybiB0cnVlOwogfQpAQCAtMjg4NSwxMyArMjk0NCwxNSBAQAogICBvaC5PdXRwdXRQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyh0aGlzLT5MYW5nRm9yQ2xDb21waWxlKTsKIAogICBpZiAodGhpcy0+TnNpZ2h0VGVncmEpIHsKLSAgICBpZiAoY29uc3QgY2hhciogcHJvY2Vzc01heCA9CisgICAgaWYgKGNtUHJvcCBwcm9jZXNzTWF4ID0KICAgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJBTkRST0lEX1BST0NFU1NfTUFYIikpIHsKLSAgICAgIGUyLkVsZW1lbnQoIlByb2Nlc3NNYXgiLCBwcm9jZXNzTWF4KTsKKyAgICAgIGUyLkVsZW1lbnQoIlByb2Nlc3NNYXgiLCAqcHJvY2Vzc01heCk7CiAgICAgfQogICB9CiAKLSAgaWYgKHRoaXMtPk1TVG9vbHMpIHsKKyAgaWYgKHRoaXMtPkFuZHJvaWQpIHsKKyAgICBlMi5FbGVtZW50KCJPYmplY3RGaWxlTmFtZSIsICIkKEludERpciklKGZpbGVuYW1lKS5vIik7CisgIH0gZWxzZSBpZiAodGhpcy0+TVNUb29scykgewogICAgIGNtc3lzOjpSZWd1bGFyRXhwcmVzc2lvbiBjbGFuZ1Rvb2xzZXQoInZbMC05XStfY2xhbmdfLioiKTsKICAgICBjb25zdCBjaGFyKiB0b29sc2V0ID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRQbGF0Zm9ybVRvb2xzZXQoKTsKICAgICBpZiAodG9vbHNldCAmJiBjbGFuZ1Rvb2xzZXQuZmluZCh0b29sc2V0KSkgewpAQCAtMzExNiw2ICszMTc3LDE3IEBACiAgIGN1ZGFPcHRpb25zLkFkZEluY2x1ZGVzKHRoaXMtPkdldEluY2x1ZGVzKGNvbmZpZ05hbWUsICJDVURBIikpOwogICBjdWRhT3B0aW9ucy5BZGRGbGFnKCJVc2VIb3N0SW5jbHVkZSIsICJmYWxzZSIpOwogCisgIC8vIEFkZCBydW50aW1lIGxpYnJhcnkgc2VsZWN0aW9uIGZsYWcuCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjdWRhUnVudGltZSA9CisgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRSdW50aW1lTGlua0xpYnJhcnkoIkNVREEiLCBjb25maWdOYW1lKTsKKyAgaWYgKGN1ZGFSdW50aW1lID09ICJTVEFUSUMiKSB7CisgICAgY3VkYU9wdGlvbnMuQWRkRmxhZygiQ3VkYVJ1bnRpbWUiLCAiU3RhdGljIik7CisgIH0gZWxzZSBpZiAoY3VkYVJ1bnRpbWUgPT0gIlNIQVJFRCIpIHsKKyAgICBjdWRhT3B0aW9ucy5BZGRGbGFnKCJDdWRhUnVudGltZSIsICJTaGFyZWQiKTsKKyAgfSBlbHNlIGlmIChjdWRhUnVudGltZSA9PSAiTk9ORSIpIHsKKyAgICBjdWRhT3B0aW9ucy5BZGRGbGFnKCJDdWRhUnVudGltZSIsICJOb25lIik7CisgIH0KKwogICB0aGlzLT5DdWRhT3B0aW9uc1tjb25maWdOYW1lXSA9IHN0ZDo6bW92ZShwT3B0aW9ucyk7CiAgIHJldHVybiB0cnVlOwogfQpAQCAtMzE1Niw2ICszMjI4LDggQEAKICAgICB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgT3B0aW9uczo6Q3VkYUNvbXBpbGVyLCBnZy0+R2V0Q3VkYUZsYWdUYWJsZSgpKTsKICAgT3B0aW9ucyYgY3VkYUxpbmtPcHRpb25zID0gKnBPcHRpb25zOwogCisgIGNtR2VuZXJhdG9yVGFyZ2V0OjpEZXZpY2VMaW5rU2V0dGVyIHNldHRlcigqdGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKKwogICAvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBkbyBhIGRldmljZSBsaW5rCiAgIGNvbnN0IGJvb2wgZG9EZXZpY2VMaW5raW5nID0gcmVxdWlyZURldmljZUxpbmtpbmcoCiAgICAgKnRoaXMtPkdlbmVyYXRvclRhcmdldCwgKnRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKQEAgLTMxNjMsMTIgKzMyMzcsMjAgQEAKICAgY3VkYUxpbmtPcHRpb25zLkFkZEZsYWcoIlBlcmZvcm1EZXZpY2VMaW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9EZXZpY2VMaW5raW5nID8gInRydWUiIDogImZhbHNlIik7CiAKLSAgLy8gU3VwcHJlc3MgZGVwcmVjYXRpb24gd2FybmluZ3MgZm9yIGRlZmF1bHQgR1BVIHRhcmdldHMgZHVyaW5nIGRldmljZSBsaW5rLgotICBpZiAoY21TeXN0ZW1Ub29sczo6VmVyc2lvbkNvbXBhcmVHcmVhdGVyRXEoCi0gICAgICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0UGxhdGZvcm1Ub29sc2V0Q3VkYVN0cmluZygpLCAiOC4wIikpIHsKLSAgICBjdWRhTGlua09wdGlvbnMuQXBwZW5kRmxhZ1N0cmluZygiQWRkaXRpb25hbE9wdGlvbnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItV25vLWRlcHJlY2F0ZWQtZ3B1LXRhcmdldHMiKTsKLSAgfQorICAvLyBBZGQgZXh0cmEgZmxhZ3MgZm9yIGRldmljZSBsaW5raW5nCisgIGN1ZGFMaW5rT3B0aW9ucy5BcHBlbmRGbGFnU3RyaW5nKAorICAgICJBZGRpdGlvbmFsT3B0aW9ucyIsCisgICAgdGhpcy0+TWFrZWZpbGUtPkdldFNhZmVEZWZpbml0aW9uKCJfQ01BS0VfQ1VEQV9FWFRSQV9GTEFHUyIpKTsKKyAgY3VkYUxpbmtPcHRpb25zLkFwcGVuZEZsYWdTdHJpbmcoCisgICAgIkFkZGl0aW9uYWxPcHRpb25zIiwKKyAgICB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oIl9DTUFLRV9DVURBX0VYVFJBX0RFVklDRV9MSU5LX0ZMQUdTIikpOworCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaW5rT3B0czsKKyAgc3RkOjpzdHJpbmcgbGlua0ZsYWdzOworICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldExpbmtPcHRpb25zKGxpbmtPcHRzLCBjb25maWdOYW1lLCAiQ1VEQSIpOworICAvLyBMSU5LX09QVElPTlMgYXJlIGVzY2FwZWQuCisgIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5BcHBlbmRDb21waWxlT3B0aW9ucyhsaW5rRmxhZ3MsIGxpbmtPcHRzKTsKKyAgY3VkYUxpbmtPcHRpb25zLkFwcGVuZEZsYWdTdHJpbmcoIkFkZGl0aW9uYWxPcHRpb25zIiwgbGlua0ZsYWdzKTsKIAogICAvLyBGb3Igc3RhdGljIGxpYnJhcmllcyB0aGF0IGhhdmUgZGV2aWNlIGxpbmtpbmcgZW5hYmxlZCBjb21wdXRlCiAgIC8vIHRoZSAgbGlicmFyaWVzCkBAIC0zMzg2LDkgKzM0NjgsOCBAQAogICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0TGlua0Nsb3N1cmUoY29uZmlnKS0+TGlua2VyTGFuZ3VhZ2U7CiAKICAgc3RkOjpzdHJpbmcgbGliZmxhZ3M7Ci0gIHRoaXMtPkxvY2FsR2VuZXJhdG9yLT5HZXRTdGF0aWNMaWJyYXJ5RmxhZ3MoCi0gICAgbGliZmxhZ3MsIGNtU3lzdGVtVG9vbHM6OlVwcGVyQ2FzZShjb25maWcpLCBsaW5rTGFuZ3VhZ2UsCi0gICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKKyAgdGhpcy0+TG9jYWxHZW5lcmF0b3ItPkdldFN0YXRpY0xpYnJhcnlGbGFncyhsaWJmbGFncywgY29uZmlnLCBsaW5rTGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0KTsKICAgaWYgKCFsaWJmbGFncy5lbXB0eSgpKSB7CiAgICAgRWxlbSBlMihlMSwgIkxpYiIpOwogICAgIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3IqIGdnID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yOwpAQCAtMzQyMyw3ICszNTA0LDcgQEAKICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gbWFuaWZlc3Rfc3JjczsKICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRNYW5pZmVzdHMobWFuaWZlc3Rfc3JjcywgY29uZmlnKTsKIAotICBjb25zdCBjaGFyKiBkcGlBd2FyZSA9IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0RQSV9BV0FSRSIpOworICBjbVByb3AgZHBpQXdhcmUgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19EUElfQVdBUkUiKTsKIAogICBpZiAoIW1hbmlmZXN0X3NyY3MuZW1wdHkoKSB8fCBkcGlBd2FyZSkgewogICAgIEVsZW0gZTIoZTEsICJNYW5pZmVzdCIpOwpAQCAtMzQzNywxNSArMzUxOCwxNCBAQAogICAgICAgZTIuRWxlbWVudCgiQWRkaXRpb25hbE1hbmlmZXN0RmlsZXMiLCBvc3Muc3RyKCkpOwogICAgIH0KICAgICBpZiAoZHBpQXdhcmUpIHsKLSAgICAgIGlmICghc3RyY21wKGRwaUF3YXJlLCAiUGVyTW9uaXRvciIpKSB7CisgICAgICBpZiAoKmRwaUF3YXJlID09ICJQZXJNb25pdG9yIikgewogICAgICAgICBlMi5FbGVtZW50KCJFbmFibGVEcGlBd2FyZW5lc3MiLCAiUGVyTW9uaXRvckhpZ2hEUElBd2FyZSIpOwotICAgICAgfSBlbHNlIGlmIChjbUlzT24oZHBpQXdhcmUpKSB7CisgICAgICB9IGVsc2UgaWYgKGNtSXNPbigqZHBpQXdhcmUpKSB7CiAgICAgICAgIGUyLkVsZW1lbnQoIkVuYWJsZURwaUF3YXJlbmVzcyIsICJ0cnVlIik7Ci0gICAgICB9IGVsc2UgaWYgKGNtSXNPZmYoZHBpQXdhcmUpKSB7CisgICAgICB9IGVsc2UgaWYgKGNtSXNPZmYoKmRwaUF3YXJlKSkgewogICAgICAgICBlMi5FbGVtZW50KCJFbmFibGVEcGlBd2FyZW5lc3MiLCAiZmFsc2UiKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJCYWQgcGFyYW1ldGVyIGZvciBWU19EUElfQVdBUkU6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyhkcGlBd2FyZSkpOworICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiQmFkIHBhcmFtZXRlciBmb3IgVlNfRFBJX0FXQVJFOiAiICsgKmRwaUF3YXJlKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTM0NTgsMTIgKzM1MzgsMTIgQEAKICAgLy8gaXRzIGxvY2F0aW9uIGFzIHRoZSByb290IHNvdXJjZSBkaXJlY3RvcnkuCiAgIHN0ZDo6c3RyaW5nIHJvb3REaXIgPSB0aGlzLT5Mb2NhbEdlbmVyYXRvci0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOwogICB7Ci0gICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gZXh0cmFTb3VyY2VzOwotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXh0cmFTb3VyY2VzKGV4dHJhU291cmNlcywgIiIpOwotICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzaSA6IGV4dHJhU291cmNlcykgewotICAgICAgaWYgKCJhbmRyb2lkbWFuaWZlc3QueG1sIiA9PQotICAgICAgICAgIGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzaS0+R2V0TG9jYXRpb24oKS5HZXROYW1lKCkpKSB7Ci0gICAgICAgIHJvb3REaXIgPSBzaS0+R2V0TG9jYXRpb24oKS5HZXREaXJlY3RvcnkoKTsKKyAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0OjpBbGxDb25maWdTb3VyY2UgY29uc3QmIHNvdXJjZSA6CisgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEFsbENvbmZpZ1NvdXJjZXMoKSkgeworICAgICAgaWYgKHNvdXJjZS5LaW5kID09IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VLaW5kRXh0cmEgJiYKKyAgICAgICAgICAiYW5kcm9pZG1hbmlmZXN0LnhtbCIgPT0KKyAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzb3VyY2UuU291cmNlLT5HZXRMb2NhdGlvbigpLkdldE5hbWUoKSkpIHsKKyAgICAgICAgcm9vdERpciA9IHNvdXJjZS5Tb3VyY2UtPkdldExvY2F0aW9uKCkuR2V0RGlyZWN0b3J5KCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KQEAgLTM0ODUsNTEgKzM1NjUsNTEgQEAKICAgICBlMi5FbGVtZW50KCJFbmFibGVQcm9HdWFyZCIsICJ0cnVlIik7CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogcHJvR3VhcmRDb25maWdMb2NhdGlvbiA9CisgIGlmIChjbVByb3AgcHJvR3VhcmRDb25maWdMb2NhdGlvbiA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkFORFJPSURfUFJPR1VBUkRfQ09ORklHX1BBVEgiKSkgewotICAgIGUyLkVsZW1lbnQoIlByb0d1YXJkQ29uZmlnTG9jYXRpb24iLCBwcm9HdWFyZENvbmZpZ0xvY2F0aW9uKTsKKyAgICBlMi5FbGVtZW50KCJQcm9HdWFyZENvbmZpZ0xvY2F0aW9uIiwgKnByb0d1YXJkQ29uZmlnTG9jYXRpb24pOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIHNlY3VyZVByb3BlcnRpZXNMb2NhdGlvbiA9CisgIGlmIChjbVByb3Agc2VjdXJlUHJvcGVydGllc0xvY2F0aW9uID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9TRUNVUkVfUFJPUFNfUEFUSCIpKSB7Ci0gICAgZTIuRWxlbWVudCgiU2VjdXJlUHJvcGVydGllc0xvY2F0aW9uIiwgc2VjdXJlUHJvcGVydGllc0xvY2F0aW9uKTsKKyAgICBlMi5FbGVtZW50KCJTZWN1cmVQcm9wZXJ0aWVzTG9jYXRpb24iLCAqc2VjdXJlUHJvcGVydGllc0xvY2F0aW9uKTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBuYXRpdmVMaWJEaXJlY3Rvcmllc0V4cHJlc3Npb24gPQorICBpZiAoY21Qcm9wIG5hdGl2ZUxpYkRpcmVjdG9yaWVzRXhwcmVzc2lvbiA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkFORFJPSURfTkFUSVZFX0xJQl9ESVJFQ1RPUklFUyIpKSB7CiAgICAgc3RkOjpzdHJpbmcgbmF0aXZlTGliRGlycyA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICBuYXRpdmVMaWJEaXJlY3Rvcmllc0V4cHJlc3Npb24sIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKKyAgICAgICpuYXRpdmVMaWJEaXJlY3Rvcmllc0V4cHJlc3Npb24sIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKICAgICBlMi5FbGVtZW50KCJOYXRpdmVMaWJEaXJlY3RvcmllcyIsIG5hdGl2ZUxpYkRpcnMpOwogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIG5hdGl2ZUxpYkRlcGVuZGVuY2llc0V4cHJlc3Npb24gPQorICBpZiAoY21Qcm9wIG5hdGl2ZUxpYkRlcGVuZGVuY2llc0V4cHJlc3Npb24gPQogICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAogICAgICAgICAgICJBTkRST0lEX05BVElWRV9MSUJfREVQRU5ERU5DSUVTIikpIHsKICAgICBzdGQ6OnN0cmluZyBuYXRpdmVMaWJEZXBzID0gY21HZW5lcmF0b3JFeHByZXNzaW9uOjpFdmFsdWF0ZSgKLSAgICAgIG5hdGl2ZUxpYkRlcGVuZGVuY2llc0V4cHJlc3Npb24sIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKKyAgICAgICpuYXRpdmVMaWJEZXBlbmRlbmNpZXNFeHByZXNzaW9uLCB0aGlzLT5Mb2NhbEdlbmVyYXRvciwgY29uZmlnTmFtZSk7CiAgICAgZTIuRWxlbWVudCgiTmF0aXZlTGliRGVwZW5kZW5jaWVzIiwgbmF0aXZlTGliRGVwcyk7CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogamF2YVNvdXJjZURpciA9CisgIGlmIChjbVByb3AgamF2YVNvdXJjZURpciA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkFORFJPSURfSkFWQV9TT1VSQ0VfRElSIikpIHsKLSAgICBlMi5FbGVtZW50KCJKYXZhU291cmNlRGlyIiwgamF2YVNvdXJjZURpcik7CisgICAgZTIuRWxlbWVudCgiSmF2YVNvdXJjZURpciIsICpqYXZhU291cmNlRGlyKTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBqYXJEaXJlY3Rvcmllc0V4cHJlc3Npb24gPQorICBpZiAoY21Qcm9wIGphckRpcmVjdG9yaWVzRXhwcmVzc2lvbiA9CiAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIkFORFJPSURfSkFSX0RJUkVDVE9SSUVTIikpIHsKICAgICBzdGQ6OnN0cmluZyBqYXJEaXJlY3RvcmllcyA9IGNtR2VuZXJhdG9yRXhwcmVzc2lvbjo6RXZhbHVhdGUoCi0gICAgICBqYXJEaXJlY3Rvcmllc0V4cHJlc3Npb24sIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKKyAgICAgICpqYXJEaXJlY3Rvcmllc0V4cHJlc3Npb24sIHRoaXMtPkxvY2FsR2VuZXJhdG9yLCBjb25maWdOYW1lKTsKICAgICBlMi5FbGVtZW50KCJKYXJEaXJlY3RvcmllcyIsIGphckRpcmVjdG9yaWVzKTsKICAgfQogCi0gIGlmIChjb25zdCBjaGFyKiBqYXJEZXBzID0KKyAgaWYgKGNtUHJvcCBqYXJEZXBzID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9KQVJfREVQRU5ERU5DSUVTIikpIHsKLSAgICBlMi5FbGVtZW50KCJKYXJEZXBlbmRlbmNpZXMiLCBqYXJEZXBzKTsKKyAgICBlMi5FbGVtZW50KCJKYXJEZXBlbmRlbmNpZXMiLCAqamFyRGVwcyk7CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogYXNzZXRzRGlyZWN0b3JpZXMgPQorICBpZiAoY21Qcm9wIGFzc2V0c0RpcmVjdG9yaWVzID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9BU1NFVFNfRElSRUNUT1JJRVMiKSkgewotICAgIGUyLkVsZW1lbnQoIkFzc2V0c0RpcmVjdG9yaWVzIiwgYXNzZXRzRGlyZWN0b3JpZXMpOworICAgIGUyLkVsZW1lbnQoIkFzc2V0c0RpcmVjdG9yaWVzIiwgKmFzc2V0c0RpcmVjdG9yaWVzKTsKICAgfQogCiAgIHsKQEAgLTM1MzgsMTAgKzM2MTgsMTAgQEAKICAgICBlMi5FbGVtZW50KCJBbmRyb2lkTWFuaWZlc3RMb2NhdGlvbiIsIG1hbmlmZXN0X3htbCk7CiAgIH0KIAotICBpZiAoY29uc3QgY2hhciogYW50QWRkaXRpb25hbE9wdGlvbnMgPQorICBpZiAoY21Qcm9wIGFudEFkZGl0aW9uYWxPcHRpb25zID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiQU5EUk9JRF9BTlRfQURESVRJT05BTF9PUFRJT05TIikpIHsKICAgICBlMi5FbGVtZW50KCJBZGRpdGlvbmFsT3B0aW9ucyIsCi0gICAgICAgICAgICAgICBzdGQ6OnN0cmluZyhhbnRBZGRpdGlvbmFsT3B0aW9ucykgKyAiICUoQWRkaXRpb25hbE9wdGlvbnMpIik7CisgICAgICAgICAgICAgICAqYW50QWRkaXRpb25hbE9wdGlvbnMgKyAiICUoQWRkaXRpb25hbE9wdGlvbnMpIik7CiAgIH0KIH0KIApAQCAtMzU5MywxNyArMzY3MywxNSBAQAogICBzdGQ6OnN0cmluZyBsaW5rRmxhZ1ZhciA9IGxpbmtGbGFnVmFyQmFzZSArICJfIiArIENPTkZJRzsKICAgZmxhZ3MgKz0gIiAiOwogICBmbGFncyArPSB0aGlzLT5NYWtlZmlsZS0+R2V0UmVxdWlyZWREZWZpbml0aW9uKGxpbmtGbGFnVmFyKTsKLSAgY29uc3QgY2hhciogdGFyZ2V0TGlua0ZsYWdzID0KLSAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0ZMQUdTIik7CisgIGNtUHJvcCB0YXJnZXRMaW5rRmxhZ3MgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJMSU5LX0ZMQUdTIik7CiAgIGlmICh0YXJnZXRMaW5rRmxhZ3MpIHsKICAgICBmbGFncyArPSAiICI7Ci0gICAgZmxhZ3MgKz0gdGFyZ2V0TGlua0ZsYWdzOworICAgIGZsYWdzICs9ICp0YXJnZXRMaW5rRmxhZ3M7CiAgIH0KICAgc3RkOjpzdHJpbmcgZmxhZ3NQcm9wID0gY21TdHJDYXQoIkxJTktfRkxBR1NfIiwgQ09ORklHKTsKLSAgaWYgKGNvbnN0IGNoYXIqIGZsYWdzQ29uZmlnID0KLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eShmbGFnc1Byb3ApKSB7CisgIGlmIChjbVByb3AgZmxhZ3NDb25maWcgPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KGZsYWdzUHJvcCkpIHsKICAgICBmbGFncyArPSAiICI7Ci0gICAgZmxhZ3MgKz0gZmxhZ3NDb25maWc7CisgICAgZmxhZ3MgKz0gKmZsYWdzQ29uZmlnOwogICB9CiAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG9wdHM7CkBAIC0zNjI0LDIxICszNzAyLDYgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpYlZlYzsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHZzVGFyZ2V0VmVjOwogICB0aGlzLT5BZGRMaWJyYXJpZXMoY2xpLCBsaWJWZWMsIHZzVGFyZ2V0VmVjLCBjb25maWcpOwotICBpZiAoY21Db250YWlucyhsaW5rQ2xvc3VyZS0+TGFuZ3VhZ2VzLCAiQ1VEQSIpICYmCi0gICAgICB0aGlzLT5DdWRhT3B0aW9uc1tjb25maWddICE9IG51bGxwdHIpIHsKLSAgICBzd2l0Y2ggKHRoaXMtPkN1ZGFPcHRpb25zW2NvbmZpZ10tPkdldEN1ZGFSdW50aW1lKCkpIHsKLSAgICAgIGNhc2UgY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zOjpDdWRhUnVudGltZVN0YXRpYzoKLSAgICAgICAgbGliVmVjLnB1c2hfYmFjaygiY3VkYWRldnJ0LmxpYiIpOwotICAgICAgICBsaWJWZWMucHVzaF9iYWNrKCJjdWRhcnRfc3RhdGljLmxpYiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zOjpDdWRhUnVudGltZVNoYXJlZDoKLSAgICAgICAgbGliVmVjLnB1c2hfYmFjaygiY3VkYWRldnJ0LmxpYiIpOwotICAgICAgICBsaWJWZWMucHVzaF9iYWNrKCJjdWRhcnQubGliIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBjbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnM6OkN1ZGFSdW50aW1lTm9uZToKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9CiAgIHN0ZDo6c3RyaW5nIHN0YW5kYXJkTGlic1ZhciA9CiAgICAgY21TdHJDYXQoIkNNQUtFXyIsIGxpbmtMYW5ndWFnZSwgIl9TVEFOREFSRF9MSUJSQVJJRVMiKTsKICAgc3RkOjpzdHJpbmcgY29uc3QmIGxpYnMgPSB0aGlzLT5NYWtlZmlsZS0+R2V0U2FmZURlZmluaXRpb24oc3RhbmRhcmRMaWJzVmFyKTsKQEAgLTM5MDksNyArMzk3Miw3IEBACiB7CiAgIGZvciAoVGFyZ2V0c0ZpbGVBbmRDb25maWdzJiBpIDogdGhpcy0+VGFyZ2V0c0ZpbGVBbmRDb25maWdzVmVjKSB7CiAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkNvbXBhcmVQYXRoKHRhcmdldHNGaWxlLCBpLkZpbGUpKSB7Ci0gICAgICBpZiAoIWNtQ29udGFpbnMoaS5Db25maWdzLCBjb25maWcpKSB7CisgICAgICBpZiAoIWNtOjpjb250YWlucyhpLkNvbmZpZ3MsIGNvbmZpZykpIHsKICAgICAgICAgaS5Db25maWdzLnB1c2hfYmFjayhjb25maWcpOwogICAgICAgfQogICAgICAgcmV0dXJuOwpAQCAtMzk5NSw4ICs0MDU4LDcgQEAKICAgICAvLyAgICBvdXRwdXQgbWFuaWZlc3QgZmxhZ3MgIDxNYW5pZmVzdD48L01hbmlmZXN0PgogICAgIHRoaXMtPldyaXRlTWFuaWZlc3RPcHRpb25zKGUxLCBjKTsKICAgICBpZiAodGhpcy0+TnNpZ2h0VGVncmEgJiYKLSAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFICYmCi0gICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHlBc0Jvb2woIkFORFJPSURfR1VJIikpIHsKKyAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5UYXJnZXQtPklzQW5kcm9pZEd1aUV4ZWN1dGFibGUoKSkgewogICAgICAgdGhpcy0+V3JpdGVBbnRCdWlsZE9wdGlvbnMoZTEsIGMpOwogICAgIH0KICAgfQpAQCAtNDAyNyw4ICs0MDg5LDggQEAKIH0KIAogdm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpXcml0ZUV2ZW50KAotICBFbGVtJiBlMSwgY29uc3QgY2hhciogbmFtZSwgc3RkOjp2ZWN0b3I8Y21DdXN0b21Db21tYW5kPiBjb25zdCYgY29tbWFuZHMsCi0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWdOYW1lKQorICBFbGVtJiBlMSwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gY29uc3QmIGNvbW1hbmRzLCBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnTmFtZSkKIHsKICAgaWYgKGNvbW1hbmRzLmVtcHR5KCkpIHsKICAgICByZXR1cm47CkBAIC00MDM3LDYgKzQwOTksNyBAQAogICBzdGQ6OnN0cmluZyBzY3JpcHQ7CiAgIGNvbnN0IGNoYXIqIHByZSA9ICIiOwogICBzdGQ6OnN0cmluZyBjb21tZW50OworICBib29sIHN0ZFBpcGVzVVRGOCA9IGZhbHNlOwogICBmb3IgKGNtQ3VzdG9tQ29tbWFuZCBjb25zdCYgY2MgOiBjb21tYW5kcykgewogICAgIGNtQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBjY2coY2MsIGNvbmZpZ05hbWUsIGxnKTsKICAgICBpZiAoIWNjZy5IYXNPbmx5RW1wdHlDb21tYW5kTGluZXMoKSkgewpAQCAtNDA0NSwxMSArNDEwOCwxNiBAQAogICAgICAgc2NyaXB0ICs9IHByZTsKICAgICAgIHByZSA9ICJcbiI7CiAgICAgICBzY3JpcHQgKz0gbGctPkNvbnN0cnVjdFNjcmlwdChjY2cpOworCisgICAgICBzdGRQaXBlc1VURjggPSBzdGRQaXBlc1VURjggfHwgY2MuR2V0U3RkUGlwZXNVVEY4KCk7CiAgICAgfQogICB9CiAgIGNvbW1lbnQgPSBjbVZTMTBFc2NhcGVDb21tZW50KGNvbW1lbnQpOwogICBpZiAodGhpcy0+UHJvamVjdFR5cGUgIT0gY3Nwcm9qKSB7CiAgICAgRWxlbSBlMihlMSwgbmFtZSk7CisgICAgaWYgKHN0ZFBpcGVzVVRGOCkgeworICAgICAgdGhpcy0+V3JpdGVTdGRPdXRFbmNvZGluZ1V0ZjgoZTIpOworICAgIH0KICAgICBlMi5FbGVtZW50KCJNZXNzYWdlIiwgY29tbWVudCk7CiAgICAgZTIuRWxlbWVudCgiQ29tbWFuZCIsIHNjcmlwdCk7CiAgIH0gZWxzZSB7CkBAIC00MDc2LDcgKzQxNDQsNyBAQAogICBFbGVtIGUxKGUwLCAiSXRlbUdyb3VwIik7CiAgIGUxLlNldEhhc0VsZW1lbnRzKCk7CiAgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQgY29uc3QqIGR0IDogZGVwZW5kcykgewotICAgIGlmIChkdC0+R2V0VHlwZSgpID09IGNtU3RhdGVFbnVtczo6SU5URVJGQUNFX0xJQlJBUlkpIHsKKyAgICBpZiAoIWR0LT5Jc0luQnVpbGRTeXN0ZW0oKSkgewogICAgICAgY29udGludWU7CiAgICAgfQogICAgIC8vIHNraXAgZm9ydHJhbiB0YXJnZXRzIGFzIHRoZXkgY2FuIG5vdCBiZSBwcm9jZXNzZWQgYnkgTVNCdWlsZApAQCAtNDA4Nyw5ICs0MTU1LDkgQEAKICAgICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IGR0LT5HZXRMb2NhbEdlbmVyYXRvcigpOwogICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBkdC0+R2V0TmFtZSgpOwogICAgIHN0ZDo6c3RyaW5nIHBhdGg7Ci0gICAgY29uc3QgY2hhciogcCA9IGR0LT5HZXRQcm9wZXJ0eSgiRVhURVJOQUxfTVNQUk9KRUNUIik7CisgICAgY21Qcm9wIHAgPSBkdC0+R2V0UHJvcGVydHkoIkVYVEVSTkFMX01TUFJPSkVDVCIpOwogICAgIGlmIChwKSB7Ci0gICAgICBwYXRoID0gcDsKKyAgICAgIHBhdGggPSAqcDsKICAgICB9IGVsc2UgewogICAgICAgcGF0aCA9IGNtU3RyQ2F0KGxnLT5HZXRDdXJyZW50QmluYXJ5RGlyZWN0b3J5KCksICcvJywgZHQtPkdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlUHJvamVjdEZpbGVFeHRlbnNpb24oZHQpKTsKQEAgLTQxMDAsOSArNDE2OCwxNCBAQAogICAgIGUyLkVsZW1lbnQoIlByb2plY3QiLCAieyIgKyB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldEdVSUQobmFtZSkgKyAifSIpOwogICAgIGUyLkVsZW1lbnQoIk5hbWUiLCBuYW1lKTsKICAgICB0aGlzLT5Xcml0ZURvdE5ldFJlZmVyZW5jZUN1c3RvbVRhZ3MoZTIsIG5hbWUpOworICAgIGlmIChkdC0+SXNDU2hhcnBPbmx5KCkgfHwgY21IYXNMaXRlcmFsU3VmZml4KHBhdGgsICJjc3Byb2oiKSkgeworICAgICAgZTIuRWxlbWVudCgiU2tpcEdldFRhcmdldEZyYW1ld29ya1Byb3BlcnRpZXMiLCAidHJ1ZSIpOworICAgIH0KIAogICAgIC8vIERvbid0IHJlZmVyZW5jZSB0YXJnZXRzIHRoYXQgZG9uJ3QgcHJvZHVjZSBhbnkgb3V0cHV0LgotICAgIGlmIChkdC0+R2V0TWFuYWdlZFR5cGUoIiIpID09IGNtR2VuZXJhdG9yVGFyZ2V0OjpNYW5hZ2VkVHlwZTo6VW5kZWZpbmVkKSB7CisgICAgaWYgKHRoaXMtPkNvbmZpZ3VyYXRpb25zLmVtcHR5KCkgfHwKKyAgICAgICAgZHQtPkdldE1hbmFnZWRUeXBlKHRoaXMtPkNvbmZpZ3VyYXRpb25zWzBdKSA9PQorICAgICAgICAgIGNtR2VuZXJhdG9yVGFyZ2V0OjpNYW5hZ2VkVHlwZTo6VW5kZWZpbmVkKSB7CiAgICAgICBlMi5FbGVtZW50KCJSZWZlcmVuY2VPdXRwdXRBc3NlbWJseSIsICJmYWxzZSIpOwogICAgICAgZTIuRWxlbWVudCgiQ29weVRvT3V0cHV0RGlyZWN0b3J5IiwgIk5ldmVyIik7CiAgICAgfQpAQCAtNDExNCwxNyArNDE4NywxNyBAQAogICAvLyBUaGlzIG9ubHkgYXBwbGllcyB0byBXaW5kb3dzIDEwIGFwcHMKICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NTdG9yZSgpICYmCiAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRTeXN0ZW1WZXJzaW9uKCksICIxMC4wIikpIHsKLSAgICBjb25zdCBjaGFyKiBkZXNrdG9wRXh0ZW5zaW9uc1ZlcnNpb24gPQorICAgIGNtUHJvcCBkZXNrdG9wRXh0ZW5zaW9uc1ZlcnNpb24gPQogICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04iKTsKICAgICBpZiAoZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uKSB7CiAgICAgICB0aGlzLT5Xcml0ZVNpbmdsZVBsYXRmb3JtRXh0ZW5zaW9uKGUxLCAiV2luZG93c0Rlc2t0b3AiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNrdG9wRXh0ZW5zaW9uc1ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVza3RvcEV4dGVuc2lvbnNWZXJzaW9uKTsKICAgICB9Ci0gICAgY29uc3QgY2hhciogbW9iaWxlRXh0ZW5zaW9uc1ZlcnNpb24gPQorICAgIGNtUHJvcCBtb2JpbGVFeHRlbnNpb25zVmVyc2lvbiA9CiAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KCJWU19NT0JJTEVfRVhURU5TSU9OU19WRVJTSU9OIik7CiAgICAgaWYgKG1vYmlsZUV4dGVuc2lvbnNWZXJzaW9uKSB7CiAgICAgICB0aGlzLT5Xcml0ZVNpbmdsZVBsYXRmb3JtRXh0ZW5zaW9uKGUxLCAiV2luZG93c01vYmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vYmlsZUV4dGVuc2lvbnNWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vYmlsZUV4dGVuc2lvbnNWZXJzaW9uKTsKICAgICB9CiAgIH0KIH0KQEAgLTQxNDksOSArNDIyMiw5IEBACiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzZGtSZWZlcmVuY2VzOwogICBzdGQ6OnVuaXF1ZV9wdHI8RWxlbT4gc3BlMTsKLSAgaWYgKGNvbnN0IGNoYXIqIHZzU0RLUmVmZXJlbmNlcyA9CisgIGlmIChjbVByb3AgdnNTREtSZWZlcmVuY2VzID0KICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfU0RLX1JFRkVSRU5DRVMiKSkgewotICAgIGNtRXhwYW5kTGlzdCh2c1NES1JlZmVyZW5jZXMsIHNka1JlZmVyZW5jZXMpOworICAgIGNtRXhwYW5kTGlzdCgqdnNTREtSZWZlcmVuY2VzLCBzZGtSZWZlcmVuY2VzKTsKICAgICBzcGUxID0gY206Om1ha2VfdW5pcXVlPEVsZW0+KGUwLCAiSXRlbUdyb3VwIik7CiAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcmkgOiBzZGtSZWZlcmVuY2VzKSB7CiAgICAgICBFbGVtKCpzcGUxLCAiU0RLUmVmZXJlbmNlIikuQXR0cmlidXRlKCJJbmNsdWRlIiwgcmkpOwpAQCAtNDE2MSwxMSArNDIzNCwxMSBAQAogICAvLyBUaGlzIG9ubHkgYXBwbGllcyB0byBXaW5kb3dzIDEwIGFwcHMKICAgaWYgKHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NTdG9yZSgpICYmCiAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRTeXN0ZW1WZXJzaW9uKCksICIxMC4wIikpIHsKLSAgICBjb25zdCBjaGFyKiBkZXNrdG9wRXh0ZW5zaW9uc1ZlcnNpb24gPQorICAgIGNtUHJvcCBkZXNrdG9wRXh0ZW5zaW9uc1ZlcnNpb24gPQogICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgiVlNfREVTS1RPUF9FWFRFTlNJT05TX1ZFUlNJT04iKTsKLSAgICBjb25zdCBjaGFyKiBtb2JpbGVFeHRlbnNpb25zVmVyc2lvbiA9CisgICAgY21Qcm9wIG1vYmlsZUV4dGVuc2lvbnNWZXJzaW9uID0KICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX01PQklMRV9FWFRFTlNJT05TX1ZFUlNJT04iKTsKLSAgICBjb25zdCBjaGFyKiBpb3RFeHRlbnNpb25zVmVyc2lvbiA9CisgICAgY21Qcm9wIGlvdEV4dGVuc2lvbnNWZXJzaW9uID0KICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0UHJvcGVydHkoIlZTX0lPVF9FWFRFTlNJT05TX1ZFUlNJT04iKTsKIAogICAgIGlmIChkZXNrdG9wRXh0ZW5zaW9uc1ZlcnNpb24gfHwgbW9iaWxlRXh0ZW5zaW9uc1ZlcnNpb24gfHwKQEAgLTQxNzUsMTUgKzQyNDgsMTUgQEAKICAgICAgIH0KICAgICAgIGlmIChkZXNrdG9wRXh0ZW5zaW9uc1ZlcnNpb24pIHsKICAgICAgICAgdGhpcy0+V3JpdGVTaW5nbGVTREtSZWZlcmVuY2UoKnNwZTEsICJXaW5kb3dzRGVza3RvcCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2t0b3BFeHRlbnNpb25zVmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXNrdG9wRXh0ZW5zaW9uc1ZlcnNpb24pOwogICAgICAgfQogICAgICAgaWYgKG1vYmlsZUV4dGVuc2lvbnNWZXJzaW9uKSB7CiAgICAgICAgIHRoaXMtPldyaXRlU2luZ2xlU0RLUmVmZXJlbmNlKCpzcGUxLCAiV2luZG93c01vYmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vYmlsZUV4dGVuc2lvbnNWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vYmlsZUV4dGVuc2lvbnNWZXJzaW9uKTsKICAgICAgIH0KICAgICAgIGlmIChpb3RFeHRlbnNpb25zVmVyc2lvbikgewogICAgICAgICB0aGlzLT5Xcml0ZVNpbmdsZVNES1JlZmVyZW5jZSgqc3BlMSwgIldpbmRvd3NJb1QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3RFeHRlbnNpb25zVmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICppb3RFeHRlbnNpb25zVmVyc2lvbik7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC00MjAzLDEyICs0Mjc2LDEzIEBACiAgICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1Bob25lKCkpICYmCiAgICAgICAoY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFID09IHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0VHlwZSgpKSkgewogICAgIHN0ZDo6c3RyaW5nIHBmeEZpbGU7Ci0gICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gY2VydGlmaWNhdGVzOwotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0Q2VydGlmaWNhdGVzKGNlcnRpZmljYXRlcywgIiIpOwotICAgIGZvciAoY21Tb3VyY2VGaWxlIGNvbnN0KiBzaSA6IGNlcnRpZmljYXRlcykgewotICAgICAgcGZ4RmlsZSA9IHRoaXMtPkNvbnZlcnRQYXRoKHNpLT5HZXRGdWxsUGF0aCgpLCBmYWxzZSk7Ci0gICAgICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gocGZ4RmlsZSk7Ci0gICAgICBicmVhazsKKyAgICBmb3IgKGNtR2VuZXJhdG9yVGFyZ2V0OjpBbGxDb25maWdTb3VyY2UgY29uc3QmIHNvdXJjZSA6CisgICAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEFsbENvbmZpZ1NvdXJjZXMoKSkgeworICAgICAgaWYgKHNvdXJjZS5LaW5kID09IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VLaW5kQ2VydGlmaWNhdGUpIHsKKyAgICAgICAgcGZ4RmlsZSA9IHRoaXMtPkNvbnZlcnRQYXRoKHNvdXJjZS5Tb3VyY2UtPkdldEZ1bGxQYXRoKCksIGZhbHNlKTsKKyAgICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKHBmeEZpbGUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KICAgICB9CiAKICAgICBpZiAodGhpcy0+SXNNaXNzaW5nRmlsZXMgJiYKQEAgLTQyNTQsMjggKzQzMjgsNjEgQEAKICAgfQogfQogCit2b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OkNsYXNzaWZ5QWxsQ29uZmlnU291cmNlcygpCit7CisgIGZvciAoY21HZW5lcmF0b3JUYXJnZXQ6OkFsbENvbmZpZ1NvdXJjZSBjb25zdCYgc291cmNlIDoKKyAgICAgICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEFsbENvbmZpZ1NvdXJjZXMoKSkgeworICAgIHRoaXMtPkNsYXNzaWZ5QWxsQ29uZmlnU291cmNlKHNvdXJjZSk7CisgIH0KK30KKwordm9pZCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpDbGFzc2lmeUFsbENvbmZpZ1NvdXJjZSgKKyAgY21HZW5lcmF0b3JUYXJnZXQ6OkFsbENvbmZpZ1NvdXJjZSBjb25zdCYgYWNzKQoreworICBzd2l0Y2ggKGFjcy5LaW5kKSB7CisgICAgY2FzZSBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlS2luZFJlc3g6IHsKKyAgICAgIC8vIEJ1aWxkIGFuZCBzYXZlIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIC5oIGZpbGUKKyAgICAgIC8vIFRoaXMgcmVsYXRpb25zaGlwIHdpbGwgYmUgdXNlZCBsYXRlciB3aGVuIGJ1aWxkaW5nIHRoZSBwcm9qZWN0IGZpbGVzLgorICAgICAgLy8gQm90aCBuYW1lcyB3b3VsZCBoYXZlIGJlZW4gYXV0byBnZW5lcmF0ZWQgZnJvbSBWaXN1YWwgU3R1ZGlvCisgICAgICAvLyB3aGVyZSB0aGUgdXNlciBzdXBwbGllZCB0aGUgZmlsZSBuYW1lIGFuZCBWaXN1YWwgU3R1ZGlvCisgICAgICAvLyBhcHBlbmRlZCB0aGUgc3VmZml4LgorICAgICAgc3RkOjpzdHJpbmcgcmVzeCA9IGFjcy5Tb3VyY2UtPlJlc29sdmVGdWxsUGF0aCgpOworICAgICAgc3RkOjpzdHJpbmcgaEZpbGVOYW1lID0gcmVzeC5zdWJzdHIoMCwgcmVzeC5maW5kX2xhc3Rfb2YoJy4nKSkgKyAiLmgiOworICAgICAgdGhpcy0+RXhwZWN0ZWRSZXN4SGVhZGVycy5pbnNlcnQoaEZpbGVOYW1lKTsKKyAgICB9IGJyZWFrOworICAgIGNhc2UgY21HZW5lcmF0b3JUYXJnZXQ6OlNvdXJjZUtpbmRYYW1sOiB7CisgICAgICAvLyBCdWlsZCBhbmQgc2F2ZSB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyAuaCBhbmQgLmNwcCBmaWxlCisgICAgICAvLyBUaGlzIHJlbGF0aW9uc2hpcCB3aWxsIGJlIHVzZWQgbGF0ZXIgd2hlbiBidWlsZGluZyB0aGUgcHJvamVjdCBmaWxlcy4KKyAgICAgIC8vIEJvdGggbmFtZXMgd291bGQgaGF2ZSBiZWVuIGF1dG8gZ2VuZXJhdGVkIGZyb20gVmlzdWFsIFN0dWRpbworICAgICAgLy8gd2hlcmUgdGhlIHVzZXIgc3VwcGxpZWQgdGhlIGZpbGUgbmFtZSBhbmQgVmlzdWFsIFN0dWRpbworICAgICAgLy8gYXBwZW5kZWQgdGhlIHN1ZmZpeC4KKyAgICAgIHN0ZDo6c3RyaW5nIHhhbWwgPSBhY3MuU291cmNlLT5SZXNvbHZlRnVsbFBhdGgoKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGhGaWxlTmFtZSA9IHhhbWwgKyAiLmgiOworICAgICAgc3RkOjpzdHJpbmcgY3BwRmlsZU5hbWUgPSB4YW1sICsgIi5jcHAiOworICAgICAgdGhpcy0+RXhwZWN0ZWRYYW1sSGVhZGVycy5pbnNlcnQoaEZpbGVOYW1lKTsKKyAgICAgIHRoaXMtPkV4cGVjdGVkWGFtbFNvdXJjZXMuaW5zZXJ0KGNwcEZpbGVOYW1lKTsKKyAgICB9IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorfQorCiBib29sIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OklzUmVzeEhlYWRlcigKICAgY29uc3Qgc3RkOjpzdHJpbmcmIGhlYWRlckZpbGUpCiB7Ci0gIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBleHBlY3RlZFJlc3hIZWFkZXJzOwotICB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldEV4cGVjdGVkUmVzeEhlYWRlcnMoZXhwZWN0ZWRSZXN4SGVhZGVycywgIiIpOwotICByZXR1cm4gZXhwZWN0ZWRSZXN4SGVhZGVycy5jb3VudChoZWFkZXJGaWxlKSA+IDA7CisgIHJldHVybiB0aGlzLT5FeHBlY3RlZFJlc3hIZWFkZXJzLmNvdW50KGhlYWRlckZpbGUpID4gMDsKIH0KIAogYm9vbCBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpJc1hhbWxIZWFkZXIoCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBoZWFkZXJGaWxlKQogewotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gZXhwZWN0ZWRYYW1sSGVhZGVyczsKLSAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeHBlY3RlZFhhbWxIZWFkZXJzKGV4cGVjdGVkWGFtbEhlYWRlcnMsICIiKTsKLSAgcmV0dXJuIGV4cGVjdGVkWGFtbEhlYWRlcnMuY291bnQoaGVhZGVyRmlsZSkgPiAwOworICByZXR1cm4gdGhpcy0+RXhwZWN0ZWRYYW1sSGVhZGVycy5jb3VudChoZWFkZXJGaWxlKSA+IDA7CiB9CiAKIGJvb2wgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6SXNYYW1sU291cmNlKAogICBjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlRmlsZSkKIHsKLSAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGV4cGVjdGVkWGFtbFNvdXJjZXM7Ci0gIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0RXhwZWN0ZWRYYW1sU291cmNlcyhleHBlY3RlZFhhbWxTb3VyY2VzLCAiIik7Ci0gIHJldHVybiBleHBlY3RlZFhhbWxTb3VyY2VzLmNvdW50KHNvdXJjZUZpbGUpID4gMDsKKyAgcmV0dXJuIHRoaXMtPkV4cGVjdGVkWGFtbFNvdXJjZXMuY291bnQoc291cmNlRmlsZSkgPiAwOwogfQogCiB2b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OldyaXRlQXBwbGljYXRpb25UeXBlU2V0dGluZ3MoRWxlbSYgZTEpCkBAIC00Mjg0LDYgKzQzOTEsNyBAQAogICBib29sIGlzQXBwQ29udGFpbmVyID0gZmFsc2U7CiAgIGJvb2wgY29uc3QgaXNXaW5kb3dzUGhvbmUgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzUGhvbmUoKTsKICAgYm9vbCBjb25zdCBpc1dpbmRvd3NTdG9yZSA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c1dpbmRvd3NTdG9yZSgpOworICBib29sIGNvbnN0IGlzQW5kcm9pZCA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+VGFyZ2V0c0FuZHJvaWQoKTsKICAgc3RkOjpzdHJpbmcgY29uc3QmIHJldiA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0QXBwbGljYXRpb25UeXBlUmV2aXNpb24oKTsKICAgaWYgKGlzV2luZG93c1Bob25lIHx8IGlzV2luZG93c1N0b3JlKSB7CiAgICAgZTEuRWxlbWVudCgiQXBwbGljYXRpb25UeXBlIiwKQEAgLTQzMjEsMjMgKzQ0MjksMjkgQEAKICAgICAgICAgICAgICAgICAgICB0aGlzLT5OYW1lICsgIl8kKENvbmZpZ3VyYXRpb24pXyQoUGxhdGZvcm0pLnhhcCIpOwogICAgICAgfQogICAgIH0KKyAgfSBlbHNlIGlmIChpc0FuZHJvaWQpIHsKKyAgICBlMS5FbGVtZW50KCJBcHBsaWNhdGlvblR5cGUiLCAiQW5kcm9pZCIpOworICAgIGUxLkVsZW1lbnQoIkFwcGxpY2F0aW9uVHlwZVJldmlzaW9uIiwKKyAgICAgICAgICAgICAgIGdnLT5HZXRBbmRyb2lkQXBwbGljYXRpb25UeXBlUmV2aXNpb24oKSk7CiAgIH0KICAgaWYgKGlzQXBwQ29udGFpbmVyKSB7CiAgICAgZTEuRWxlbWVudCgiQXBwQ29udGFpbmVyQXBwbGljYXRpb24iLCAidHJ1ZSIpOwotICB9IGVsc2UgaWYgKHRoaXMtPlBsYXRmb3JtID09ICJBUk02NCIpIHsKLSAgICBlMS5FbGVtZW50KCJXaW5kb3dzU0RLRGVza3RvcEFSTTY0U3VwcG9ydCIsICJ0cnVlIik7Ci0gIH0gZWxzZSBpZiAodGhpcy0+UGxhdGZvcm0gPT0gIkFSTSIpIHsKLSAgICBlMS5FbGVtZW50KCJXaW5kb3dzU0RLRGVza3RvcEFSTVN1cHBvcnQiLCAidHJ1ZSIpOworICB9IGVsc2UgaWYgKCFpc0FuZHJvaWQpIHsKKyAgICBpZiAodGhpcy0+UGxhdGZvcm0gPT0gIkFSTTY0IikgeworICAgICAgZTEuRWxlbWVudCgiV2luZG93c1NES0Rlc2t0b3BBUk02NFN1cHBvcnQiLCAidHJ1ZSIpOworICAgIH0gZWxzZSBpZiAodGhpcy0+UGxhdGZvcm0gPT0gIkFSTSIpIHsKKyAgICAgIGUxLkVsZW1lbnQoIldpbmRvd3NTREtEZXNrdG9wQVJNU3VwcG9ydCIsICJ0cnVlIik7CisgICAgfQogICB9CiAgIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YXJnZXRQbGF0Zm9ybVZlcnNpb24gPQogICAgIGdnLT5HZXRXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uKCk7CiAgIGlmICghdGFyZ2V0UGxhdGZvcm1WZXJzaW9uLmVtcHR5KCkpIHsKICAgICBlMS5FbGVtZW50KCJXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uIiwgdGFyZ2V0UGxhdGZvcm1WZXJzaW9uKTsKICAgfQotICBjb25zdCBjaGFyKiB0YXJnZXRQbGF0Zm9ybU1pblZlcnNpb24gPSB0aGlzLT5HZW5lcmF0b3JUYXJnZXQtPkdldFByb3BlcnR5KAorICBjbVByb3AgdGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uID0gdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRQcm9wZXJ0eSgKICAgICAiVlNfV0lORE9XU19UQVJHRVRfUExBVEZPUk1fTUlOX1ZFUlNJT04iKTsKICAgaWYgKHRhcmdldFBsYXRmb3JtTWluVmVyc2lvbikgewotICAgIGUxLkVsZW1lbnQoIldpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24iLCB0YXJnZXRQbGF0Zm9ybU1pblZlcnNpb24pOworICAgIGUxLkVsZW1lbnQoIldpbmRvd3NUYXJnZXRQbGF0Zm9ybU1pblZlcnNpb24iLCAqdGFyZ2V0UGxhdGZvcm1NaW5WZXJzaW9uKTsKICAgfSBlbHNlIGlmIChpc1dpbmRvd3NTdG9yZSAmJiByZXYgPT0gIjEwLjAiKSB7CiAgICAgLy8gSWYgdGhlIG1pbiB2ZXJzaW9uIGlzIG5vdCBzZXQsIHRoZW4gdXNlIHRoZSBUYXJnZXRQbGF0Zm9ybVZlcnNpb24KICAgICBpZiAoIXRhcmdldFBsYXRmb3JtVmVyc2lvbi5lbXB0eSgpKSB7CkBAIC00MzU2LDM5ICs0NDcwLDM4IEBACiAgIC8vIEZvciBXaW5kb3dzIGFuZCBXaW5kb3dzIFBob25lIGV4ZWN1dGFibGVzLCB3ZSB3aWxsIGFzc3VtZSB0aGF0IGlmIGEKICAgLy8gbWFuaWZlc3QgaXMgbm90IHByZXNlbnQgdGhhdCB3ZSBuZWVkIHRvIGFkZCBhbGwgdGhlIG5lY2Vzc2FyeSBmaWxlcwogICBpZiAodGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRUeXBlKCkgPT0gY21TdGF0ZUVudW1zOjpFWEVDVVRBQkxFKSB7Ci0gICAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gbWFuaWZlc3RTb3VyY2VzOwotICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0QXBwTWFuaWZlc3QobWFuaWZlc3RTb3VyY2VzLCAiIik7Ci0gICAgewotICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHYgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkdldFN5c3RlbVZlcnNpb24oKTsKLSAgICAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzUGhvbmUoKSkgewotICAgICAgICBpZiAodiA9PSAiOC4wIikgewotICAgICAgICAgIC8vIExvb2sgdGhyb3VnaCB0aGUgc291cmNlcyBmb3IgV01BcHBNYW5pZmVzdC54bWwKLSAgICAgICAgICBzdGQ6OnZlY3RvcjxjbVNvdXJjZUZpbGUgY29uc3QqPiBleHRyYVNvdXJjZXM7Ci0gICAgICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRFeHRyYVNvdXJjZXMoZXh0cmFTb3VyY2VzLCAiIik7Ci0gICAgICAgICAgYm9vbCBmb3VuZE1hbmlmZXN0ID0gZmFsc2U7Ci0gICAgICAgICAgZm9yIChjbVNvdXJjZUZpbGUgY29uc3QqIHNpIDogZXh0cmFTb3VyY2VzKSB7Ci0gICAgICAgICAgICAvLyBOZWVkIHRvIGRvIGEgbG93ZXJjYXNlIGNvbXBhcmlzb24gb24gdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICBpZiAoIndtYXBwbWFuaWZlc3QueG1sIiA9PQotICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShzaS0+R2V0TG9jYXRpb24oKS5HZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgIGZvdW5kTWFuaWZlc3QgPSB0cnVlOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFmb3VuZE1hbmlmZXN0KSB7Ci0gICAgICAgICAgICB0aGlzLT5Jc01pc3NpbmdGaWxlcyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHYgPT0gIjguMSIpIHsKLSAgICAgICAgICBpZiAobWFuaWZlc3RTb3VyY2VzLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIHRoaXMtPklzTWlzc2luZ0ZpbGVzID0gdHJ1ZTsKKyAgICBzdGQ6OnZlY3RvcjxjbUdlbmVyYXRvclRhcmdldDo6QWxsQ29uZmlnU291cmNlPiBtYW5pZmVzdFNvdXJjZXMgPQorICAgICAgdGhpcy0+R2VuZXJhdG9yVGFyZ2V0LT5HZXRBbGxDb25maWdTb3VyY2VzKAorICAgICAgICBjbUdlbmVyYXRvclRhcmdldDo6U291cmNlS2luZEFwcE1hbmlmZXN0KTsKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgdiA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0U3lzdGVtVmVyc2lvbigpOworICAgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzUGhvbmUoKSkgeworICAgICAgaWYgKHYgPT0gIjguMCIpIHsKKyAgICAgICAgLy8gTG9vayB0aHJvdWdoIHRoZSBzb3VyY2VzIGZvciBXTUFwcE1hbmlmZXN0LnhtbAorICAgICAgICBib29sIGZvdW5kTWFuaWZlc3QgPSBmYWxzZTsKKyAgICAgICAgZm9yIChjbUdlbmVyYXRvclRhcmdldDo6QWxsQ29uZmlnU291cmNlIGNvbnN0JiBzb3VyY2UgOgorICAgICAgICAgICAgIHRoaXMtPkdlbmVyYXRvclRhcmdldC0+R2V0QWxsQ29uZmlnU291cmNlcygpKSB7CisgICAgICAgICAgaWYgKHNvdXJjZS5LaW5kID09IGNtR2VuZXJhdG9yVGFyZ2V0OjpTb3VyY2VLaW5kRXh0cmEgJiYKKyAgICAgICAgICAgICAgIndtYXBwbWFuaWZlc3QueG1sIiA9PQorICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZSgKKyAgICAgICAgICAgICAgICAgIHNvdXJjZS5Tb3VyY2UtPkdldExvY2F0aW9uKCkuR2V0TmFtZSgpKSkgeworICAgICAgICAgICAgZm91bmRNYW5pZmVzdCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5UYXJnZXRzV2luZG93c1N0b3JlKCkpIHsKKyAgICAgICAgaWYgKCFmb3VuZE1hbmlmZXN0KSB7CisgICAgICAgICAgdGhpcy0+SXNNaXNzaW5nRmlsZXMgPSB0cnVlOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHYgPT0gIjguMSIpIHsKICAgICAgICAgaWYgKG1hbmlmZXN0U291cmNlcy5lbXB0eSgpKSB7Ci0gICAgICAgICAgaWYgKHYgPT0gIjguMCIpIHsKLSAgICAgICAgICAgIHRoaXMtPklzTWlzc2luZ0ZpbGVzID0gdHJ1ZTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHYgPT0gIjguMSIgfHwgY21IYXNMaXRlcmFsUHJlZml4KHYsICIxMC4wIikpIHsKLSAgICAgICAgICAgIHRoaXMtPklzTWlzc2luZ0ZpbGVzID0gdHJ1ZTsKLSAgICAgICAgICB9CisgICAgICAgICAgdGhpcy0+SXNNaXNzaW5nRmlsZXMgPSB0cnVlOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlRhcmdldHNXaW5kb3dzU3RvcmUoKSkgeworICAgICAgaWYgKG1hbmlmZXN0U291cmNlcy5lbXB0eSgpKSB7CisgICAgICAgIGlmICh2ID09ICI4LjAiKSB7CisgICAgICAgICAgdGhpcy0+SXNNaXNzaW5nRmlsZXMgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHYgPT0gIjguMSIgfHwgY21IYXNMaXRlcmFsUHJlZml4KHYsICIxMC4wIikpIHsKKyAgICAgICAgICB0aGlzLT5Jc01pc3NpbmdGaWxlcyA9IHRydWU7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC00ODI3LDExICs0OTQwLDExIEBACiAgIGlmICh0aGlzLT5Qcm9qZWN0VHlwZSA9PSBjc3Byb2opIHsKICAgICBjb25zdCBjbVByb3BlcnR5TWFwJiBwcm9wcyA9IHNmLT5HZXRQcm9wZXJ0aWVzKCk7CiAgICAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgcCA6IHByb3BzLkdldEtleXMoKSkgewotICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb3BOYW1lUHJlZml4ID0gIlZTX0NTSEFSUF8iOwotICAgICAgaWYgKHAuZmluZChwcm9wTmFtZVByZWZpeCkgPT0gMCkgeworICAgICAgc3RhdGljIGNvbnN0IGNtOjpzdHJpbmdfdmlldyBwcm9wTmFtZVByZWZpeCA9ICJWU19DU0hBUlBfIjsKKyAgICAgIGlmIChjbUhhc1ByZWZpeChwLCBwcm9wTmFtZVByZWZpeCkpIHsKICAgICAgICAgc3RkOjpzdHJpbmcgdGFnTmFtZSA9IHAuc3Vic3RyKHByb3BOYW1lUHJlZml4Lmxlbmd0aCgpKTsKICAgICAgICAgaWYgKCF0YWdOYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyB2YWwgPSBwcm9wcy5HZXRQcm9wZXJ0eVZhbHVlKHApOworICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWwgPSAqcHJvcHMuR2V0UHJvcGVydHlWYWx1ZShwKTsKICAgICAgICAgICBpZiAoIXZhbC5lbXB0eSgpKSB7CiAgICAgICAgICAgICB0YWdzW3RhZ05hbWVdID0gdmFsOwogICAgICAgICAgIH0gZWxzZSB7CkBAIC00ODQ3LDI4ICs0OTYwLDM4IEBACiAgIEVsZW0mIGUyLCBjb25zdCBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiB0YWdzKQogewogICBmb3IgKGNvbnN0IGF1dG8mIGkgOiB0YWdzKSB7Ci0gICAgZTIuRWxlbWVudChpLmZpcnN0LmNfc3RyKCksIGkuc2Vjb25kKTsKKyAgICBlMi5FbGVtZW50KGkuZmlyc3QsIGkuc2Vjb25kKTsKICAgfQogfQogCi12b2lkIGNtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3I6OkdldENTaGFycFNvdXJjZUxpbmsoCi0gIGNtU291cmNlRmlsZSBjb25zdCogc2YsIHN0ZDo6c3RyaW5nJiBsaW5rKQorc3RkOjpzdHJpbmcgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6R2V0Q1NoYXJwU291cmNlTGluaygKKyAgY21Tb3VyY2VGaWxlIGNvbnN0KiBzb3VyY2UpCiB7Ci0gIHN0ZDo6c3RyaW5nIGNvbnN0JiBzb3VyY2VGaWxlUGF0aCA9IHNmLT5HZXRGdWxsUGF0aCgpOwotICBzdGQ6OnN0cmluZyBjb25zdCYgYmluYXJ5RGlyID0gTG9jYWxHZW5lcmF0b3ItPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKLQotICBpZiAoIWNtU3lzdGVtVG9vbHM6OklzU3ViRGlyZWN0b3J5KHNvdXJjZUZpbGVQYXRoLCBiaW5hcnlEaXIpKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmlwRnJvbVBhdGggPQotICAgICAgdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRTb3VyY2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoc291cmNlRmlsZVBhdGguZmluZChzdHJpcEZyb21QYXRoKSA9PSAwKSB7Ci0gICAgICBpZiAoY29uc3QgY2hhciogbCA9IHNmLT5HZXRQcm9wZXJ0eSgiVlNfQ1NIQVJQX0xpbmsiKSkgewotICAgICAgICBsaW5rID0gbDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpbmsgPSBzb3VyY2VGaWxlUGF0aC5zdWJzdHIoc3RyaXBGcm9tUGF0aC5sZW5ndGgoKSArIDEpOwotICAgICAgfQotICAgICAgQ29udmVydFRvV2luZG93c1NsYXNoKGxpbmspOwotICAgIH0KKyAgLy8gRm9yIG91dCBvZiBzb3VyY2UgZmlsZXMsIHdlIGZpcnN0IGNoZWNrIGlmIGEgbWF0Y2hpbmcgc291cmNlIGdyb3VwCisgIC8vIGZvciB0aGlzIGZpbGUgZXhpc3RzLCBvdGhlcndpc2Ugd2UgY2hlY2sgaWYgdGhlIHBhdGggcmVsYXRpdmUgdG8gY3VycmVudAorICAvLyBzb3VyY2UtIG9yIGJpbmFyeS1kaXIgaXMgdXNlZCB3aXRoaW4gdGhlIGxpbmsgYW5kIHJldHVybiB0aGF0CisgIHN0ZDo6c3RyaW5nIGxpbms7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBmdWxsRmlsZU5hbWUgPSBzb3VyY2UtPkdldEZ1bGxQYXRoKCk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBzcmNEaXIgPSB0aGlzLT5NYWtlZmlsZS0+R2V0Q3VycmVudFNvdXJjZURpcmVjdG9yeSgpOworICBzdGQ6OnN0cmluZyBjb25zdCYgYmluRGlyID0gdGhpcy0+TWFrZWZpbGUtPkdldEN1cnJlbnRCaW5hcnlEaXJlY3RvcnkoKTsKKyAgLy8gdW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIGNvcHkgdGhlIHNvdXJjZSBncm91cHMsIGJlY2F1c2UKKyAgLy8gRmluZFNvdXJjZUdyb3VwIHVzZXMgYSByZWdleCB3aGljaCBpcyBtb2RpZnlpbmcgdGhlIGdyb3VwCisgIHN0ZDo6dmVjdG9yPGNtU291cmNlR3JvdXA+IHNvdXJjZUdyb3VwcyA9IHRoaXMtPk1ha2VmaWxlLT5HZXRTb3VyY2VHcm91cHMoKTsKKyAgY21Tb3VyY2VHcm91cCogc291cmNlR3JvdXAgPQorICAgIHRoaXMtPk1ha2VmaWxlLT5GaW5kU291cmNlR3JvdXAoZnVsbEZpbGVOYW1lLCBzb3VyY2VHcm91cHMpOworICBpZiAoc291cmNlR3JvdXAgJiYgIXNvdXJjZUdyb3VwLT5HZXRGdWxsTmFtZSgpLmVtcHR5KCkpIHsKKyAgICBsaW5rID0gc291cmNlR3JvdXAtPkdldEZ1bGxOYW1lKCkgKyAiLyIgKworICAgICAgY21zeXM6OlN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZnVsbEZpbGVOYW1lKTsKKyAgfSBlbHNlIGlmIChjbUhhc1ByZWZpeChmdWxsRmlsZU5hbWUsIHNyY0RpcikpIHsKKyAgICBsaW5rID0gZnVsbEZpbGVOYW1lLnN1YnN0cihzcmNEaXIubGVuZ3RoKCkgKyAxKTsKKyAgfSBlbHNlIGlmIChjbUhhc1ByZWZpeChmdWxsRmlsZU5hbWUsIGJpbkRpcikpIHsKKyAgICBsaW5rID0gZnVsbEZpbGVOYW1lLnN1YnN0cihiaW5EaXIubGVuZ3RoKCkgKyAxKTsKKyAgfSBlbHNlIGlmIChjbVByb3AgbCA9IHNvdXJjZS0+R2V0UHJvcGVydHkoIlZTX0NTSEFSUF9MaW5rIikpIHsKKyAgICBsaW5rID0gKmw7CiAgIH0KKworICBDb252ZXJ0VG9XaW5kb3dzU2xhc2gobGluayk7CisgIHJldHVybiBsaW5rOwogfQogCiBzdGQ6OnN0cmluZyBjbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yOjpHZXRDTWFrZUZpbGVQYXRoKApAQCAtNDg4MSwzICs1MDA0LDEwIEBACiAKICAgcmV0dXJuIHBhdGg7CiB9CisKK3ZvaWQgY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvcjo6V3JpdGVTdGRPdXRFbmNvZGluZ1V0ZjgoRWxlbSYgZTEpCit7CisgIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPklzU3RkT3V0RW5jb2RpbmdTdXBwb3J0ZWQoKSkgeworICAgIGUxLkVsZW1lbnQoIlN0ZE91dEVuY29kaW5nIiwgIlVURi04Iik7CisgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yLmggYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW8xMFRhcmdldEdlbmVyYXRvci5oCmluZGV4IGExOGEzM2QuLmM1NDA1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVZpc3VhbFN0dWRpbzEwVGFyZ2V0R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL2NtVmlzdWFsU3R1ZGlvMTBUYXJnZXRHZW5lcmF0b3IuaApAQCAtMTAsMTIgKzEwLDE0IEBACiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlICJjbUdlbmVyYXRvclRhcmdldC5oIgorCiBjbGFzcyBjbUNvbXB1dGVMaW5rSW5mb3JtYXRpb247CiBjbGFzcyBjbUN1c3RvbUNvbW1hbmQ7CiBjbGFzcyBjbUdlbmVyYXRlZEZpbGVTdHJlYW07Ci1jbGFzcyBjbUdlbmVyYXRvclRhcmdldDsKIGNsYXNzIGNtR2xvYmFsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I7CiBjbGFzcyBjbUxvY2FsVmlzdWFsU3R1ZGlvMTBHZW5lcmF0b3I7CiBjbGFzcyBjbU1ha2VmaWxlOwpAQCAtNjgsMTcgKzcwLDE3IEBACiAgIHZvaWQgV3JpdGVFeHRyYVNvdXJjZShFbGVtJiBlMSwgY21Tb3VyY2VGaWxlIGNvbnN0KiBzZik7CiAgIHZvaWQgV3JpdGVOc2lnaHRUZWdyYUNvbmZpZ3VyYXRpb25WYWx1ZXMoRWxlbSYgZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyk7CisgIHZvaWQgV3JpdGVBbmRyb2lkQ29uZmlndXJhdGlvblZhbHVlcyhFbGVtJiBlMSwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyk7CiAgIHZvaWQgV3JpdGVTb3VyY2UoRWxlbSYgZTIsIGNtU291cmNlRmlsZSBjb25zdCogc2YpOwogICB2b2lkIFdyaXRlRXhjbHVkZUZyb21CdWlsZChFbGVtJiBlMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiBjb25zdCYgZXhjbHVkZV9jb25maWdzKTsKICAgdm9pZCBXcml0ZUFsbFNvdXJjZXMoRWxlbSYgZTApOwogICB2b2lkIFdyaXRlUGFja2FnZVJlZmVyZW5jZXMoRWxlbSYgZTApOwotICB2b2lkIFdyaXRlUGFja2FnZVJlZmVyZW5jZShFbGVtJiBlMSwgc3RkOjpzdHJpbmcgY29uc3QmIHJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIHZlcnNpb24pOwogICB2b2lkIFdyaXRlRG90TmV0UmVmZXJlbmNlcyhFbGVtJiBlMCk7CiAgIHZvaWQgV3JpdGVEb3ROZXRSZWZlcmVuY2UoRWxlbSYgZTEsIHN0ZDo6c3RyaW5nIGNvbnN0JiByZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGhpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyk7CisgIHZvaWQgV3JpdGVEb3ROZXREb2N1bWVudGF0aW9uRmlsZShFbGVtJiBlMCk7CiAgIHZvaWQgV3JpdGVJbXBvcnRzKEVsZW0mIGUwKTsKICAgdm9pZCBXcml0ZURvdE5ldFJlZmVyZW5jZUN1c3RvbVRhZ3MoRWxlbSYgZTIsIHN0ZDo6c3RyaW5nIGNvbnN0JiByZWYpOwogICB2b2lkIFdyaXRlRW1iZWRkZWRSZXNvdXJjZUdyb3VwKEVsZW0mIGUwKTsKQEAgLTE2NCw3ICsxNjYsNyBAQAogICB2b2lkIFdyaXRlTGliT3B0aW9ucyhFbGVtJiBlMSwgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZyk7CiAgIHZvaWQgV3JpdGVNYW5pZmVzdE9wdGlvbnMoRWxlbSYgZTEsIHN0ZDo6c3RyaW5nIGNvbnN0JiBjb25maWcpOwogICB2b2lkIFdyaXRlRXZlbnRzKEVsZW0mIGUxLCBzdGQ6OnN0cmluZyBjb25zdCYgY29uZmlnTmFtZSk7Ci0gIHZvaWQgV3JpdGVFdmVudChFbGVtJiBlMSwgY29uc3QgY2hhciogbmFtZSwKKyAgdm9pZCBXcml0ZUV2ZW50KEVsZW0mIGUxLCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwKICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNtQ3VzdG9tQ29tbWFuZD4gY29uc3QmIGNvbW1hbmRzLAogICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGNvbmZpZ05hbWUpOwogICB2b2lkIFdyaXRlR3JvdXBTb3VyY2VzKEVsZW0mIGUwLCBzdGQ6OnN0cmluZyBjb25zdCYgbmFtZSwKQEAgLTE4Miw3ICsxODQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiYgdGFncyk7CiAgIHZvaWQgV3JpdGVDU2hhcnBTb3VyY2VQcm9wZXJ0aWVzKAogICAgIEVsZW0mIGUyLCBjb25zdCBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiB0YWdzKTsKLSAgdm9pZCBHZXRDU2hhcnBTb3VyY2VMaW5rKGNtU291cmNlRmlsZSBjb25zdCogc2YsIHN0ZDo6c3RyaW5nJiBsaW5rKTsKKyAgc3RkOjpzdHJpbmcgR2V0Q1NoYXJwU291cmNlTGluayhjbVNvdXJjZUZpbGUgY29uc3QqIHNvdXJjZSk7CisKKyAgdm9pZCBXcml0ZVN0ZE91dEVuY29kaW5nVXRmOChFbGVtJiBlMSk7CiAKIHByaXZhdGU6CiAgIGZyaWVuZCBjbGFzcyBjbVZTMTBHZW5lcmF0b3JPcHRpb25zOwpAQCAtMjEyLDYgKzIxNiw3IEBACiAgIGJvb2wgTVNUb29sczsKICAgYm9vbCBNYW5hZ2VkOwogICBib29sIE5zaWdodFRlZ3JhOworICBib29sIEFuZHJvaWQ7CiAgIHVuc2lnbmVkIGludCBOc2lnaHRUZWdyYVZlcnNpb25bNF07CiAgIGJvb2wgVGFyZ2V0Q29tcGlsZUFzV2luUlQ7CiAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBJUE9FbmFibGVkQ29uZmlndXJhdGlvbnM7CkBAIC0yMzUsNiArMjQwLDIzIEBACiAKICAgdXNpbmcgVG9vbFNvdXJjZU1hcCA9IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUb29sU291cmNlcz47CiAgIFRvb2xTb3VyY2VNYXAgVG9vbHM7CisKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IEV4cGVjdGVkUmVzeEhlYWRlcnM7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBFeHBlY3RlZFhhbWxIZWFkZXJzOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gRXhwZWN0ZWRYYW1sU291cmNlczsKKyAgc3RkOjp2ZWN0b3I8Y21Tb3VyY2VGaWxlIGNvbnN0Kj4gUmVzeE9ianM7CisgIHN0ZDo6dmVjdG9yPGNtU291cmNlRmlsZSBjb25zdCo+IFhhbWxPYmpzOworICB2b2lkIENsYXNzaWZ5QWxsQ29uZmlnU291cmNlcygpOworICB2b2lkIENsYXNzaWZ5QWxsQ29uZmlnU291cmNlKGNtR2VuZXJhdG9yVGFyZ2V0OjpBbGxDb25maWdTb3VyY2UgY29uc3QmIGFjcyk7CisKKyAgdXNpbmcgQ29uZmlnVG9TZXR0aW5ncyA9CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPj47CisgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgQ29uZmlnVG9TZXR0aW5ncz4gUGFyc2VkVG9vbFRhcmdldFNldHRpbmdzOworICBib29sIFByb3BlcnR5SXNTYW1lSW5BbGxDb25maWdzKGNvbnN0IENvbmZpZ1RvU2V0dGluZ3MmIHRvb2xTZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcE5hbWUpOworICB2b2lkIFBhcnNlU2V0dGluZ3NQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgc2V0dGluZ3NQcm9wZXJ0eVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdUb1NldHRpbmdzJiB0b29sU2V0dGluZ3MpOwogICBzdGQ6OnN0cmluZyBHZXRDTWFrZUZpbGVQYXRoKGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9ucy5jeHggYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmN4eAppbmRleCAxMTM5YWE5Li45MzdiNGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmN4eAorKysgYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmN4eApAQCAtMyw2ICszLDggQEAKICNpbmNsdWRlIDxjbS9pdGVyYXRvcj4KIAogI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21Mb2NhbFZpc3VhbFN0dWRpb0dlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtT3V0cHV0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiY21TeXN0ZW1Ub29scy5oIgpAQCAtMTQ5LDI3ICsxNTEsNiBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWNtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9uczo6Q3VkYVJ1bnRpbWUKLWNtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9uczo6R2V0Q3VkYVJ1bnRpbWUoKSBjb25zdAotewotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgRmxhZ1ZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaSA9Ci0gICAgdGhpcy0+RmxhZ01hcC5maW5kKCJDdWRhUnVudGltZSIpOwotICBpZiAoaSAhPSB0aGlzLT5GbGFnTWFwLmVuZCgpICYmIGktPnNlY29uZC5zaXplKCkgPT0gMSkgewotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjdWRhUnVudGltZSA9IGktPnNlY29uZFswXTsKLSAgICBpZiAoY3VkYVJ1bnRpbWUgPT0gIlN0YXRpYyIpIHsKLSAgICAgIHJldHVybiBDdWRhUnVudGltZVN0YXRpYzsKLSAgICB9Ci0gICAgaWYgKGN1ZGFSdW50aW1lID09ICJTaGFyZWQiKSB7Ci0gICAgICByZXR1cm4gQ3VkYVJ1bnRpbWVTaGFyZWQ7Ci0gICAgfQotICAgIGlmIChjdWRhUnVudGltZSA9PSAiTm9uZSIpIHsKLSAgICAgIHJldHVybiBDdWRhUnVudGltZU5vbmU7Ci0gICAgfQotICB9Ci0gIC8vIG52Y2MgZGVmYXVsdCBpcyBzdGF0aWMKLSAgcmV0dXJuIEN1ZGFSdW50aW1lU3RhdGljOwotfQotCiB2b2lkIGNtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9uczo6Rml4Q3VkYUNvZGVHZW5lcmF0aW9uKCkKIHsKICAgLy8gRXh0cmFjdCB0ZW1wb3JhcnkgdmFsdWVzIHN0b3JlZCBieSBvdXIgZmxhZyB0YWJsZS4KQEAgLTQzMSw3ICs0MTIsNyBAQAogICBpZiAodGhpcy0+RGVmaW5lcy5lbXB0eSgpKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIGNvbnN0IGNoYXIqIHRhZyA9ICJQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyI7CisgIHN0ZDo6c3RyaW5nIHRhZyA9ICJQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyI7CiAgIGlmIChsYW5nID09ICJDVURBIikgewogICAgIHRhZyA9ICJEZWZpbmVzIjsKICAgfQpAQCAtNDczLDcgKzQ1NCw3IEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgY29uc3QgY2hhciogdGFnID0gIkFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMiOworICBzdGQ6OnN0cmluZyB0YWcgPSAiQWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyI7CiAgIGlmIChsYW5nID09ICJDVURBIikgewogICAgIHRhZyA9ICJJbmNsdWRlIjsKICAgfSBlbHNlIGlmIChsYW5nID09ICJBU01fTUFTTSIgfHwgbGFuZyA9PSAiQVNNX05BU00iKSB7CkBAIC01MjgsNiArNTA5LDYgQEAKICAgICAgIHNlcCA9ICI7IjsKICAgICB9CiAKLSAgICB0aGlzLT5PdXRwdXRGbGFnKGZvdXQsIGluZGVudCwgbS5maXJzdC5jX3N0cigpLCBvc3Muc3RyKCkpOworICAgIHRoaXMtPk91dHB1dEZsYWcoZm91dCwgaW5kZW50LCBtLmZpcnN0LCBvc3Muc3RyKCkpOwogICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmggYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9HZW5lcmF0b3JPcHRpb25zLmgKaW5kZXggNTYwNTkzZS4uZjliNTBhNyAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvR2VuZXJhdG9yT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpb0dlbmVyYXRvck9wdGlvbnMuaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgImNtSURFT3B0aW9ucy5oIgogCiBjbGFzcyBjbUxvY2FsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOworY2xhc3MgY21HZW5lcmF0b3JUYXJnZXQ7CiAKIHVzaW5nIGNtVlM3RmxhZ1RhYmxlID0gY21JREVGbGFnVGFibGU7CiAKQEAgLTYxLDE0ICs2Miw2IEBACiAgIGJvb2wgVXNpbmdVbmljb2RlKCkgY29uc3Q7CiAgIGJvb2wgVXNpbmdTQkNTKCkgY29uc3Q7CiAKLSAgZW51bSBDdWRhUnVudGltZQotICB7Ci0gICAgQ3VkYVJ1bnRpbWVTdGF0aWMsCi0gICAgQ3VkYVJ1bnRpbWVTaGFyZWQsCi0gICAgQ3VkYVJ1bnRpbWVOb25lCi0gIH07Ci0gIEN1ZGFSdW50aW1lIEdldEN1ZGFSdW50aW1lKCkgY29uc3Q7Ci0KICAgdm9pZCBGaXhDdWRhQ29kZUdlbmVyYXRpb24oKTsKIAogICB2b2lkIEZpeE1hbmlmZXN0VUFDRmxhZ3MoKTsKQEAgLTg2LDcgKzc5LDggQEAKICAgY29uc3Qgc3RkOjpzdHJpbmcmIEdldENvbmZpZ3VyYXRpb24oKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICB2aXJ0dWFsIHZvaWQgT3V0cHV0RmxhZyhzdGQ6Om9zdHJlYW0mIGZvdXQsIGludCBpbmRlbnQsIGNvbnN0IGNoYXIqIHRhZywKKyAgdmlydHVhbCB2b2lkIE91dHB1dEZsYWcoc3RkOjpvc3RyZWFtJiBmb3V0LCBpbnQgaW5kZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudCkgPSAwOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmN4eCBiL1NvdXJjZS9jbVZpc3VhbFN0dWRpb1NsblBhcnNlci5jeHgKaW5kZXggNDUzM2U5Yi4uZDc4MjJiMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmN4eAorKysgYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9TbG5QYXJzZXIuY3h4CkBAIC01MTcsNyArNTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSYgc3RhdGUpCiB7CiAgIHNpemVfdCBpZHhFcXVhbFNpZ24gPSBsaW5lLmZpbmQoJz0nKTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxUYWcgPSBsaW5lLnN1YnN0cigwLCBpZHhFcXVhbFNpZ24pOworICBhdXRvIGZ1bGxUYWcgPSBjbTo6c3RyaW5nX3ZpZXcobGluZSkuc3Vic3RyKDAsIGlkeEVxdWFsU2lnbik7CiAgIGlmICghdGhpcy0+UGFyc2VUYWcoZnVsbFRhZywgcGFyc2VkTGluZSwgc3RhdGUpKQogICAgIHJldHVybiBmYWxzZTsKICAgaWYgKGlkeEVxdWFsU2lnbiAhPSBsaW5lLm5wb3MpIHsKQEAgLTU2MCw3ICs1NjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSYgc3RhdGUpCiB7CiAgIHNpemVfdCBpZHhFcXVhbFNpZ24gPSBsaW5lLmZpbmQoJz0nKTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bGxUYWcgPSBsaW5lLnN1YnN0cigwLCBpZHhFcXVhbFNpZ24pOworICBhdXRvIGZ1bGxUYWcgPSBjbTo6c3RyaW5nX3ZpZXcobGluZSkuc3Vic3RyKDAsIGlkeEVxdWFsU2lnbik7CiAgIGlmICghdGhpcy0+UGFyc2VUYWcoZnVsbFRhZywgcGFyc2VkTGluZSwgc3RhdGUpKQogICAgIHJldHVybiBmYWxzZTsKICAgaWYgKGlkeEVxdWFsU2lnbiAhPSBsaW5lLm5wb3MpIHsKQEAgLTU4NiwxNyArNTg2LDE3IEBACiAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGNtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyOjpQYXJzZVRhZyhjb25zdCBzdGQ6OnN0cmluZyYgZnVsbFRhZywKK2Jvb2wgY21WaXN1YWxTdHVkaW9TbG5QYXJzZXI6OlBhcnNlVGFnKGNtOjpzdHJpbmdfdmlldyBmdWxsVGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VkTGluZSYgcGFyc2VkTGluZSwgU3RhdGUmIHN0YXRlKQogewogICBzaXplX3QgaWR4TGVmdFBhcmVuID0gZnVsbFRhZy5maW5kKCcoJyk7Ci0gIGlmIChpZHhMZWZ0UGFyZW4gPT0gZnVsbFRhZy5ucG9zKSB7CisgIGlmIChpZHhMZWZ0UGFyZW4gPT0gY206OnN0cmluZ192aWV3OjpucG9zKSB7CiAgICAgcGFyc2VkTGluZS5TZXRUYWcoY21UcmltV2hpdGVzcGFjZShmdWxsVGFnKSk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgcGFyc2VkTGluZS5TZXRUYWcoY21UcmltV2hpdGVzcGFjZShmdWxsVGFnLnN1YnN0cigwLCBpZHhMZWZ0UGFyZW4pKSk7CiAgIHNpemVfdCBpZHhSaWdodFBhcmVuID0gZnVsbFRhZy5yZmluZCgnKScpOwotICBpZiAoaWR4UmlnaHRQYXJlbiA9PSBmdWxsVGFnLm5wb3MpIHsKKyAgaWYgKGlkeFJpZ2h0UGFyZW4gPT0gY206OnN0cmluZ192aWV3OjpucG9zKSB7CiAgICAgdGhpcy0+TGFzdFJlc3VsdC5TZXRFcnJvcihSZXN1bHRFcnJvcklucHV0U3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuR2V0Q3VycmVudExpbmUoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtVmlzdWFsU3R1ZGlvU2xuUGFyc2VyLmggYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9TbG5QYXJzZXIuaAppbmRleCA2YzA1NjMzLi40NTU3Y2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21WaXN1YWxTdHVkaW9TbG5QYXJzZXIuaAorKysgYi9Tb3VyY2UvY21WaXN1YWxTdHVkaW9TbG5QYXJzZXIuaApAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxpb3Nmd2Q+CiAjaW5jbHVkZSA8c3RyaW5nPgogCisjaW5jbHVkZSA8Y20vc3RyaW5nX3ZpZXc+CisKICNpbmNsdWRlIDxzdGRkZWYuaD4KIAogY2xhc3MgY21TbG5EYXRhOwpAQCAtOTcsOCArOTksNyBAQAogICBib29sIFBhcnNlS2V5VmFsdWVQYWlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBsaW5lLCBQYXJzZWRMaW5lJiBwYXJzZWRMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlJiBzdGF0ZSk7CiAKLSAgYm9vbCBQYXJzZVRhZyhjb25zdCBzdGQ6OnN0cmluZyYgZnVsbFRhZywgUGFyc2VkTGluZSYgcGFyc2VkTGluZSwKLSAgICAgICAgICAgICAgICBTdGF0ZSYgc3RhdGUpOworICBib29sIFBhcnNlVGFnKGNtOjpzdHJpbmdfdmlldyBmdWxsVGFnLCBQYXJzZWRMaW5lJiBwYXJzZWRMaW5lLCBTdGF0ZSYgc3RhdGUpOwogCiAgIGJvb2wgUGFyc2VWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIFBhcnNlZExpbmUmIHBhcnNlZExpbmUpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVdoaWxlQ29tbWFuZC5jeHggYi9Tb3VyY2UvY21XaGlsZUNvbW1hbmQuY3h4CmluZGV4IDI2ZTdjNzUuLjBkOGU4OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVdoaWxlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtV2hpbGVDb21tYW5kLmN4eApAQCAtNyw4ICs3LDcgQEAKIAogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KLQotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbUNvbmRpdGlvbkV2YWx1YXRvci5oIgogI2luY2x1ZGUgImNtRXhlY3V0aW9uU3RhdHVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21Xb3JrZXJQb29sLmN4eCBiL1NvdXJjZS9jbVdvcmtlclBvb2wuY3h4CmluZGV4IGFhMGQ2YjMuLjEyYWJhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVdvcmtlclBvb2wuY3h4CisrKyBiL1NvdXJjZS9jbVdvcmtlclBvb2wuY3h4CkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlIDxjbS9tZW1vcnk+CiAKLSNpbmNsdWRlICJjbV91di5oIgorI2luY2x1ZGUgPGNtM3AvdXYuaD4KIAogI2luY2x1ZGUgImNtUmFuZ2UuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKQEAgLTQ2OSwxMSArNDY5LDkgQEAKIAogdm9pZCBjbVdvcmtlclBvb2xXb3JrZXI6OlVWUHJvY2Vzc0ZpbmlzaGVkKCkKIHsKLSAgewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKFByb2NfLk11dGV4KTsKLSAgICBpZiAoUHJvY18uUk9QICYmIChQcm9jXy5ST1AtPklzRmluaXNoZWQoKSB8fCAhUHJvY18uUk9QLT5Jc1N0YXJ0ZWQoKSkpIHsKLSAgICAgIFByb2NfLlJPUC5yZXNldCgpOwotICAgIH0KKyAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soUHJvY18uTXV0ZXgpOworICBpZiAoUHJvY18uUk9QICYmIChQcm9jXy5ST1AtPklzRmluaXNoZWQoKSB8fCAhUHJvY18uUk9QLT5Jc1N0YXJ0ZWQoKSkpIHsKKyAgICBQcm9jXy5ST1AucmVzZXQoKTsKICAgfQogICAvLyBOb3RpZnkgaWRsaW5nIHRocmVhZAogICBQcm9jXy5Db25kaXRpb24ubm90aWZ5X29uZSgpOwpAQCAtNTMyLDYgKzUzMCw3IEBACiAgIHVuc2lnbmVkIGludCBKb2JzUHJvY2Vzc2luZyA9IDA7CiAgIHN0ZDo6ZGVxdWU8Y21Xb3JrZXJQb29sOjpKb2JIYW5kbGVUPiBRdWV1ZTsKICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgQ29uZGl0aW9uOworICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBDb25kaXRpb25GZW5jZTsKICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtV29ya2VyUG9vbFdvcmtlcj4+IFdvcmtlcnM7CiAKICAgLy8gLS0gUmVmZXJlbmNlcwpAQCAtNTkzLDE5ICs1OTIsMTIgQEAKIAogdm9pZCBjbVdvcmtlclBvb2xJbnRlcm5hbDo6QWJvcnQoKQogewotICBib29sIG5vdGlmeVRocmVhZHMgPSBmYWxzZTsKICAgLy8gQ2xlYXIgYWxsIGpvYnMgYW5kIHNldCBhYm9ydCBmbGFnCi0gIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gZ3VhcmQoTXV0ZXgpOwotICAgIGlmIChQcm9jZXNzaW5nICYmICFBYm9ydGluZykgewotICAgICAgLy8gUmVnaXN0ZXIgYWJvcnQgYW5kIGNsZWFyIHF1ZXVlCi0gICAgICBBYm9ydGluZyA9IHRydWU7Ci0gICAgICBRdWV1ZS5jbGVhcigpOwotICAgICAgbm90aWZ5VGhyZWFkcyA9IHRydWU7Ci0gICAgfQotICB9Ci0gIGlmIChub3RpZnlUaHJlYWRzKSB7Ci0gICAgLy8gV2FrZSB0aHJlYWRzCisgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBndWFyZChNdXRleCk7CisgIGlmICghQWJvcnRpbmcpIHsKKyAgICAvLyBSZWdpc3RlciBhYm9ydCBhbmQgY2xlYXIgcXVldWUKKyAgICBBYm9ydGluZyA9IHRydWU7CisgICAgUXVldWUuY2xlYXIoKTsKICAgICBDb25kaXRpb24ubm90aWZ5X2FsbCgpOwogICB9CiB9CkBAIC02NjksNyArNjYxLDcgQEAKICAgICBpZiAoQWJvcnRpbmcpIHsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAvLyBXYWl0IGZvciBuZXcgam9icworICAgIC8vIFdhaXQgZm9yIG5ldyBqb2JzIG9uIHRoZSBtYWluIENWCiAgICAgaWYgKFF1ZXVlLmVtcHR5KCkpIHsKICAgICAgICsrV29ya2Vyc0lkbGU7CiAgICAgICBDb25kaXRpb24ud2FpdCh1TG9jayk7CkBAIC02NzcsMjAgKzY2OSwzNCBAQAogICAgICAgY29udGludWU7CiAgICAgfQogCi0gICAgLy8gQ2hlY2sgZm9yIGZlbmNlIGpvYnMKLSAgICBpZiAoRmVuY2VQcm9jZXNzaW5nIHx8IFF1ZXVlLmZyb250KCktPklzRmVuY2UoKSkgewotICAgICAgaWYgKEpvYnNQcm9jZXNzaW5nICE9IDApIHsKLSAgICAgICAgQ29uZGl0aW9uLndhaXQodUxvY2spOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIC8vIE5vIGpvYnMgZ2V0IHByb2Nlc3NlZC4gU2V0IHRoZSBmZW5jZSBqb2IgcHJvY2Vzc2luZyBmbGFnLgotICAgICAgRmVuY2VQcm9jZXNzaW5nID0gdHJ1ZTsKKyAgICAvLyBJZiB0aGVyZSBpcyBhIGZlbmNlIGN1cnJlbnRseSBhY3RpdmUgb3Igd2FpdGluZywKKyAgICAvLyBzbGVlcCBvbiB0aGUgbWFpbiBDViBhbmQgdHJ5IGFnYWluLgorICAgIGlmIChGZW5jZVByb2Nlc3NpbmcpIHsKKyAgICAgIENvbmRpdGlvbi53YWl0KHVMb2NrKTsKKyAgICAgIGNvbnRpbnVlOwogICAgIH0KIAogICAgIC8vIFBvcCBuZXh0IGpvYiBmcm9tIHF1ZXVlCiAgICAgam9iSGFuZGxlID0gc3RkOjptb3ZlKFF1ZXVlLmZyb250KCkpOwogICAgIFF1ZXVlLnBvcF9mcm9udCgpOwogCisgICAgLy8gQ2hlY2sgZm9yIGZlbmNlIGpvYnMKKyAgICBib29sIHJhaXNlZEZlbmNlID0gZmFsc2U7CisgICAgaWYgKGpvYkhhbmRsZS0+SXNGZW5jZSgpKSB7CisgICAgICBGZW5jZVByb2Nlc3NpbmcgPSB0cnVlOworICAgICAgcmFpc2VkRmVuY2UgPSB0cnVlOworICAgICAgLy8gV2FpdCBvbiB0aGUgRmVuY2UgQ1YgdW50aWwgYWxsIHBlbmRpbmcgam9icyBhcmUgZG9uZS4KKyAgICAgIHdoaWxlIChKb2JzUHJvY2Vzc2luZyAhPSAwICYmICFBYm9ydGluZykgeworICAgICAgICBDb25kaXRpb25GZW5jZS53YWl0KHVMb2NrKTsKKyAgICAgIH0KKyAgICAgIC8vIFdoZW4gYWJvcnRpbmcsIGV4cGxpY2l0bHkga2ljayBhbGwgdGhyZWFkcyBhbGl2ZSBvbmNlIG1vcmUuCisgICAgICBpZiAoQWJvcnRpbmcpIHsKKyAgICAgICAgRmVuY2VQcm9jZXNzaW5nID0gZmFsc2U7CisgICAgICAgIENvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKwogICAgIC8vIFVubG9ja2VkIHNjb3BlIGZvciBqb2IgcHJvY2Vzc2luZwogICAgICsrSm9ic1Byb2Nlc3Npbmc7CiAgICAgewpAQCAtNzAxLDExICs3MDcsMTggQEAKICAgICB9CiAgICAgLS1Kb2JzUHJvY2Vzc2luZzsKIAotICAgIC8vIFdhcyB0aGlzIGEgZmVuY2Ugam9iPwotICAgIGlmIChGZW5jZVByb2Nlc3NpbmcpIHsKKyAgICAvLyBJZiB0aGlzIHdhcyB0aGUgdGhyZWFkIHRoYXQgZW50ZXJlZCBmZW5jZSBwcm9jZXNzaW5nCisgICAgLy8gb3JpZ2luYWxseSwgbm90aWZ5IGFsbCBpZGxpbmcgd29ya2VycyB0aGF0IHRoZSBmZW5jZQorICAgIC8vIGlzIGRvbmUuCisgICAgaWYgKHJhaXNlZEZlbmNlKSB7CiAgICAgICBGZW5jZVByb2Nlc3NpbmcgPSBmYWxzZTsKICAgICAgIENvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CiAgICAgfQorICAgIC8vIElmIGZlbmNlIHByb2Nlc3NpbmcgaXMgc3RpbGwgbm90IGRvbmUsIG5vdGlmeSB0aGUKKyAgICAvLyB0aGUgZmVuY2luZyB3b3JrZXIgd2hlbiBhbGwgYWN0aXZlIGpvYnMgYXJlIGRvbmUuCisgICAgaWYgKEZlbmNlUHJvY2Vzc2luZyAmJiBKb2JzUHJvY2Vzc2luZyA9PSAwKSB7CisgICAgICBDb25kaXRpb25GZW5jZS5ub3RpZnlfYWxsKCk7CisgICAgfQogICB9CiAKICAgLy8gRGVjcmVtZW50IHJ1bm5pbmcgd29ya2VycyBjb3VudApkaWZmIC0tZ2l0IGEvU291cmNlL2NtV29ya2luZ0RpcmVjdG9yeS5oIGIvU291cmNlL2NtV29ya2luZ0RpcmVjdG9yeS5oCmluZGV4IGQ0YTE2NGQuLjRjNzU3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVdvcmtpbmdEaXJlY3RvcnkuaAorKysgYi9Tb3VyY2UvY21Xb3JraW5nRGlyZWN0b3J5LmgKQEAgLTM3LDYgKzM3LDggQEAKICAgICovCiAgIGludCBHZXRMYXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gUmVzdWx0Q29kZTsgfQogCisgIHN0ZDo6c3RyaW5nIGNvbnN0JiBHZXRPbGREaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5PbGREaXI7IH0KKwogcHJpdmF0ZToKICAgc3RkOjpzdHJpbmcgT2xkRGlyOwogICBpbnQgUmVzdWx0Q29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVdyaXRlRmlsZUNvbW1hbmQuY3h4IGIvU291cmNlL2NtV3JpdGVGaWxlQ29tbWFuZC5jeHgKaW5kZXggMzRlMjFiMi4uNjY2YmE4NyAxMDA2NDQKLS0tIGEvU291cmNlL2NtV3JpdGVGaWxlQ29tbWFuZC5jeHgKKysrIGIvU291cmNlL2NtV3JpdGVGaWxlQ29tbWFuZC5jeHgKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBzdGF0dXMuU2V0RXJyb3IoZXJyb3IpOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBmaWxlIDw8IG1lc3NhZ2UgPDwgc3RkOjplbmRsOworICBmaWxlIDw8IG1lc3NhZ2UgPDwgJ1xuJzsKICAgZmlsZS5jbG9zZSgpOwogICBpZiAobW9kZSAmJiAhd3JpdGFibGUpIHsKICAgICBjbVN5c3RlbVRvb2xzOjpTZXRQZXJtaXNzaW9ucyhmaWxlTmFtZS5jX3N0cigpLCBtb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVhDb2RlMjFPYmplY3QuY3h4IGIvU291cmNlL2NtWENvZGUyMU9iamVjdC5jeHgKaW5kZXggYTliYjJlZi4uNmIxMzNhOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtWENvZGUyMU9iamVjdC5jeHgKKysrIGIvU291cmNlL2NtWENvZGUyMU9iamVjdC5jeHgKQEAgLTMwLDExICszMCwxMiBAQAogICBvdXQgPDwgIiAqLyI7CiB9CiAKLXZvaWQgY21YQ29kZTIxT2JqZWN0OjpQcmludExpc3Qoc3RkOjp2ZWN0b3I8Y21YQ29kZU9iamVjdCo+IGNvbnN0JiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0mIG91dCwgUEJYVHlwZSB0KQordm9pZCBjbVhDb2RlMjFPYmplY3Q6OlByaW50TGlzdCgKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+PiBjb25zdCYgdiwgc3RkOjpvc3RyZWFtJiBvdXQsCisgIFBCWFR5cGUgdCkKIHsKICAgYm9vbCBoYXNPbmUgPSBmYWxzZTsKLSAgZm9yIChhdXRvIG9iaiA6IHYpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBvYmogOiB2KSB7CiAgICAgaWYgKG9iai0+R2V0VHlwZSgpID09IE9CSkVDVCAmJiBvYmotPkdldElzQSgpID09IHQpIHsKICAgICAgIGhhc09uZSA9IHRydWU7CiAgICAgICBicmVhazsKQEAgLTQ0LDcgKzQ1LDcgQEAKICAgICByZXR1cm47CiAgIH0KICAgb3V0IDw8ICJcbi8qIEJlZ2luICIgPDwgUEJYVHlwZU5hbWVzW3RdIDw8ICIgc2VjdGlvbiAqL1xuIjsKLSAgZm9yIChhdXRvIG9iaiA6IHYpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBvYmogOiB2KSB7CiAgICAgaWYgKG9iai0+R2V0VHlwZSgpID09IE9CSkVDVCAmJiBvYmotPkdldElzQSgpID09IHQpIHsKICAgICAgIG9iai0+UHJpbnQob3V0KTsKICAgICB9CkBAIC01Miw4ICs1Myw4IEBACiAgIG91dCA8PCAiLyogRW5kICIgPDwgUEJYVHlwZU5hbWVzW3RdIDw8ICIgc2VjdGlvbiAqL1xuIjsKIH0KIAotdm9pZCBjbVhDb2RlMjFPYmplY3Q6OlByaW50TGlzdChzdGQ6OnZlY3RvcjxjbVhDb2RlT2JqZWN0Kj4gY29uc3QmIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSYgb3V0KQordm9pZCBjbVhDb2RlMjFPYmplY3Q6OlByaW50TGlzdCgKKyAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+PiBjb25zdCYgdiwgc3RkOjpvc3RyZWFtJiBvdXQpCiB7CiAgIGNtWENvZGVPYmplY3Q6OkluZGVudCgxLCBvdXQpOwogICBvdXQgPDwgIm9iamVjdHMgPSB7XG4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtWENvZGUyMU9iamVjdC5oIGIvU291cmNlL2NtWENvZGUyMU9iamVjdC5oCmluZGV4IDhlNGI4MGYuLjc2ZmFkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVhDb2RlMjFPYmplY3QuaAorKysgYi9Tb3VyY2UvY21YQ29kZTIxT2JqZWN0LmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiY21YQ29kZU9iamVjdC5oIgpAQCAtMTUsOCArMTYsOSBAQAogcHVibGljOgogICBjbVhDb2RlMjFPYmplY3QoUEJYVHlwZSBwdHlwZSwgVHlwZSB0eXBlKTsKICAgdm9pZCBQcmludENvbW1lbnQoc3RkOjpvc3RyZWFtJikgb3ZlcnJpZGU7Ci0gIHN0YXRpYyB2b2lkIFByaW50TGlzdChzdGQ6OnZlY3RvcjxjbVhDb2RlT2JqZWN0Kj4gY29uc3QmLCBzdGQ6Om9zdHJlYW0mIG91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBCWFR5cGUgdCk7Ci0gIHN0YXRpYyB2b2lkIFByaW50TGlzdChzdGQ6OnZlY3RvcjxjbVhDb2RlT2JqZWN0Kj4gY29uc3QmLCBzdGQ6Om9zdHJlYW0mIG91dCk7CisgIHN0YXRpYyB2b2lkIFByaW50TGlzdChzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21YQ29kZU9iamVjdD4+IGNvbnN0JiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSYgb3V0LCBQQlhUeXBlIHQpOworICBzdGF0aWMgdm9pZCBQcmludExpc3Qoc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGNtWENvZGVPYmplY3Q+PiBjb25zdCYsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0mIG91dCk7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21YQ29kZU9iamVjdC5oIGIvU291cmNlL2NtWENvZGVPYmplY3QuaAppbmRleCBkOWJlM2QyLi4yNGVjYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21YQ29kZU9iamVjdC5oCisrKyBiL1NvdXJjZS9jbVhDb2RlT2JqZWN0LmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNtQWxnb3JpdGhtcy5oIgorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KIAogY2xhc3MgY21HZW5lcmF0b3JUYXJnZXQ7CiAKQEAgLTgyLDEwICs4MiwxMyBAQAogICB2b2lkIFNldE9iamVjdChjbVhDb2RlT2JqZWN0KiB2YWx1ZSkgeyB0aGlzLT5PYmplY3QgPSB2YWx1ZTsgfQogICBjbVhDb2RlT2JqZWN0KiBHZXRPYmplY3QoKSB7IHJldHVybiB0aGlzLT5PYmplY3Q7IH0KICAgdm9pZCBBZGRPYmplY3QoY21YQ29kZU9iamVjdCogdmFsdWUpIHsgdGhpcy0+TGlzdC5wdXNoX2JhY2sodmFsdWUpOyB9Ci0gIGJvb2wgSGFzT2JqZWN0KGNtWENvZGVPYmplY3QqIG8pIGNvbnN0IHsgcmV0dXJuIGNtQ29udGFpbnModGhpcy0+TGlzdCwgbyk7IH0KKyAgYm9vbCBIYXNPYmplY3QoY21YQ29kZU9iamVjdCogbykgY29uc3QKKyAgeworICAgIHJldHVybiBjbTo6Y29udGFpbnModGhpcy0+TGlzdCwgbyk7CisgIH0KICAgdm9pZCBBZGRVbmlxdWVPYmplY3QoY21YQ29kZU9iamVjdCogdmFsdWUpCiAgIHsKLSAgICBpZiAoIWNtQ29udGFpbnModGhpcy0+TGlzdCwgdmFsdWUpKSB7CisgICAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+TGlzdCwgdmFsdWUpKSB7CiAgICAgICB0aGlzLT5MaXN0LnB1c2hfYmFjayh2YWx1ZSk7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21YQ29kZVNjaGVtZS5jeHggYi9Tb3VyY2UvY21YQ29kZVNjaGVtZS5jeHgKaW5kZXggYWZjOTVmNS4uNTVlOTQxZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtWENvZGVTY2hlbWUuY3h4CisrKyBiL1NvdXJjZS9jbVhDb2RlU2NoZW1lLmN4eApAQCAtNywxNCArNywxOSBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAorI2luY2x1ZGUgPGNtZXh0L2FsZ29yaXRobT4KKwogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgorI2luY2x1ZGUgImNtR2VuZXJhdG9yRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImNtR2VuZXJhdG9yVGFyZ2V0LmgiCiAjaW5jbHVkZSAiY21YTUxTYWZlLmgiCiAKLWNtWENvZGVTY2hlbWU6OmNtWENvZGVTY2hlbWUoY21YQ29kZU9iamVjdCogeGNPYmosIFRlc3RPYmplY3RzIHRlc3RzLAorY21YQ29kZVNjaGVtZTo6Y21YQ29kZVNjaGVtZShjbUxvY2FsR2VuZXJhdG9yKiBsZywgY21YQ29kZU9iamVjdCogeGNPYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RPYmplY3RzIHRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvbmZpZ0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB4Y1ZlcnNpb24pCi0gIDogVGFyZ2V0KHhjT2JqKQorICA6IExvY2FsR2VuZXJhdG9yKGxnKQorICAsIFRhcmdldCh4Y09iaikKICAgLCBUZXN0cyhzdGQ6Om1vdmUodGVzdHMpKQogICAsIFRhcmdldE5hbWUoeGNPYmotPkdldFRhcmdldCgpLT5HZXROYW1lKCkpCiAgICwgQ29uZmlnTGlzdChjb25maWdMaXN0KQpAQCAtMjgsNyArMzMsNyBAQAogICAvLyBDcmVhdGUgc2hhcmVkIHNjaGVtZSBzdWItZGlyZWN0b3J5IHRyZWUKICAgLy8KICAgc3RkOjpzdHJpbmcgeGNvZGVTY2hlbWVEaXIgPSBjbVN0ckNhdCh4Y1Byb2pEaXIsICIveGNzaGFyZWRkYXRhL3hjc2NoZW1lcyIpOwotICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KHhjb2RlU2NoZW1lRGlyLmNfc3RyKCkpOworICBjbVN5c3RlbVRvb2xzOjpNYWtlRGlyZWN0b3J5KHhjb2RlU2NoZW1lRGlyKTsKIAogICBzdGQ6OnN0cmluZyB4Y29kZVNjaGVtZUZpbGUgPQogICAgIGNtU3RyQ2F0KHhjb2RlU2NoZW1lRGlyLCAnLycsIHRoaXMtPlRhcmdldE5hbWUsICIueGNzY2hlbWUiKTsKQEAgLTEzNSw3ICsxNDAsOCBAQAogICB4b3V0LkF0dHJpYnV0ZSgic2VsZWN0ZWRMYXVuY2hlcklkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgICAiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREIiKTsKICAgeG91dC5BdHRyaWJ1dGUoImxhdW5jaFN0eWxlIiwgIjAiKTsKLSAgeG91dC5BdHRyaWJ1dGUoInVzZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkiLCAiTk8iKTsKKyAgV3JpdGVDdXN0b21Xb3JraW5nRGlyZWN0b3J5KHhvdXQsIGNvbmZpZ3VyYXRpb24pOworCiAgIHhvdXQuQXR0cmlidXRlKCJpZ25vcmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2giLCAiTk8iKTsKICAgV3JpdGVMYXVuY2hBY3Rpb25Cb29sZWFuQXR0cmlidXRlKHhvdXQsICJkZWJ1Z0RvY3VtZW50VmVyc2lvbmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWENPREVfU0NIRU1FX0RFQlVHX0RPQ1VNRU5UX1ZFUlNJT05JTkciLApAQCAtMTk4LDE0ICsyMDQsMTQgQEAKIAogICAvLyBJbmZvIHRhYiBiZWdpbgogCi0gIGlmIChjb25zdCBjaGFyKiBleGUgPQorICBpZiAoY21Qcm9wIGV4ZSA9CiAgICAgICAgIHRoaXMtPlRhcmdldC0+R2V0VGFyZ2V0KCktPkdldFByb3BlcnR5KCJYQ09ERV9TQ0hFTUVfRVhFQ1VUQUJMRSIpKSB7CiAKICAgICB4b3V0LlN0YXJ0RWxlbWVudCgiUGF0aFJ1bm5hYmxlIik7CiAgICAgeG91dC5CcmVha0F0dHJpYnV0ZXMoKTsKIAogICAgIHhvdXQuQXR0cmlidXRlKCJydW5uYWJsZURlYnVnZ2luZ01vZGUiLCAiMCIpOwotICAgIHhvdXQuQXR0cmlidXRlKCJGaWxlUGF0aCIsIGV4ZSk7CisgICAgeG91dC5BdHRyaWJ1dGUoIkZpbGVQYXRoIiwgKmV4ZSk7CiAKICAgICB4b3V0LkVuZEVsZW1lbnQoKTsgLy8gUGF0aFJ1bm5hYmxlCiAgIH0KQEAgLTIxNCw5ICsyMjAsOSBAQAogCiAgIC8vIEFyZ3VtZW50cyB0YWIgYmVnaW4KIAotICBpZiAoY29uc3QgY2hhciogYXJnTGlzdCA9CisgIGlmIChjbVByb3AgYXJnTGlzdCA9CiAgICAgICAgIHRoaXMtPlRhcmdldC0+R2V0VGFyZ2V0KCktPkdldFByb3BlcnR5KCJYQ09ERV9TQ0hFTUVfQVJHVU1FTlRTIikpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJndW1lbnRzID0gY21FeHBhbmRlZExpc3QoYXJnTGlzdCk7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyZ3VtZW50cyA9IGNtRXhwYW5kZWRMaXN0KCphcmdMaXN0KTsKICAgICBpZiAoIWFyZ3VtZW50cy5lbXB0eSgpKSB7CiAgICAgICB4b3V0LlN0YXJ0RWxlbWVudCgiQ29tbWFuZExpbmVBcmd1bWVudHMiKTsKIApAQCAtMjM0LDkgKzI0MCw5IEBACiAgICAgfQogICB9CiAKLSAgaWYgKGNvbnN0IGNoYXIqIGVudkxpc3QgPQorICBpZiAoY21Qcm9wIGVudkxpc3QgPQogICAgICAgICB0aGlzLT5UYXJnZXQtPkdldFRhcmdldCgpLT5HZXRQcm9wZXJ0eSgiWENPREVfU0NIRU1FX0VOVklST05NRU5UIikpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZW52cyA9IGNtRXhwYW5kZWRMaXN0KGVudkxpc3QpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBlbnZzID0gY21FeHBhbmRlZExpc3QoKmVudkxpc3QpOwogICAgIGlmICghZW52cy5lbXB0eSgpKSB7CiAgICAgICB4b3V0LlN0YXJ0RWxlbWVudCgiRW52aXJvbm1lbnRWYXJpYWJsZXMiKTsKIApAQCAtMzE3LDcgKzMyMyw3IEBACiAgIGNtWE1MV3JpdGVyJiB4b3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgYXR0ck5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJOYW1lLAogICBib29sIGRlZmF1bHRWYWx1ZSkKIHsKLSAgYXV0byBwcm9wZXJ0eSA9IFRhcmdldC0+R2V0VGFyZ2V0KCktPkdldFByb3BlcnR5KHZhck5hbWUpOworICBjbVByb3AgcHJvcGVydHkgPSBUYXJnZXQtPkdldFRhcmdldCgpLT5HZXRQcm9wZXJ0eSh2YXJOYW1lKTsKICAgYm9vbCBpc09uID0gKHByb3BlcnR5ID09IG51bGxwdHIgJiYgZGVmYXVsdFZhbHVlKSB8fCBjbUlzT24ocHJvcGVydHkpOwogCiAgIGlmIChpc09uKSB7CkBAIC0zNTUsNyArMzYxLDcgQEAKICAgeG91dC5BdHRyaWJ1dGUoImJ1aWxkQ29uZmlndXJhdGlvbiIsIGNvbmZpZ3VyYXRpb24pOwogICB4b3V0LkF0dHJpYnV0ZSgic2hvdWxkVXNlTGF1bmNoU2NoZW1lQXJnc0VudiIsICJZRVMiKTsKICAgeG91dC5BdHRyaWJ1dGUoInNhdmVkVG9vbElkZW50aWZpZXIiLCAiIik7Ci0gIHhvdXQuQXR0cmlidXRlKCJ1c2VDdXN0b21Xb3JraW5nRGlyZWN0b3J5IiwgIk5PIik7CisgIFdyaXRlQ3VzdG9tV29ya2luZ0RpcmVjdG9yeSh4b3V0LCBjb25maWd1cmF0aW9uKTsKICAgV3JpdGVMYXVuY2hBY3Rpb25Cb29sZWFuQXR0cmlidXRlKHhvdXQsICJkZWJ1Z0RvY3VtZW50VmVyc2lvbmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWENPREVfU0NIRU1FX0RFQlVHX0RPQ1VNRU5UX1ZFUlNJT05JTkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CkBAIC0zODksMTIgKzM5NSwzMCBAQAogICB4b3V0LkJyZWFrQXR0cmlidXRlcygpOwogICB4b3V0LkF0dHJpYnV0ZSgiQnVpbGRhYmxlSWRlbnRpZmllciIsICJwcmltYXJ5Iik7CiAgIHhvdXQuQXR0cmlidXRlKCJCbHVlcHJpbnRJZGVudGlmaWVyIiwgeGNPYmotPkdldElkKCkpOwotICB4b3V0LkF0dHJpYnV0ZSgiQnVpbGRhYmxlTmFtZSIsIHhjT2JqLT5HZXRUYXJnZXQoKS0+R2V0RnVsbE5hbWUoKSk7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IG5vQ29uZmlnOyAvLyBGSVhNRTogV2hhdCBjb25maWcgdG8gdXNlIGhlcmU/CisgIHhvdXQuQXR0cmlidXRlKCJCdWlsZGFibGVOYW1lIiwgeGNPYmotPkdldFRhcmdldCgpLT5HZXRGdWxsTmFtZShub0NvbmZpZykpOwogICB4b3V0LkF0dHJpYnV0ZSgiQmx1ZXByaW50TmFtZSIsIHhjT2JqLT5HZXRUYXJnZXQoKS0+R2V0TmFtZSgpKTsKICAgeG91dC5BdHRyaWJ1dGUoIlJlZmVyZW5jZWRDb250YWluZXIiLCAiY29udGFpbmVyOiIgKyBjb250YWluZXIpOwogICB4b3V0LkVuZEVsZW1lbnQoKTsKIH0KIAordm9pZCBjbVhDb2RlU2NoZW1lOjpXcml0ZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkoCisgIGNtWE1MV3JpdGVyJiB4b3V0LCBjb25zdCBzdGQ6OnN0cmluZyYgY29uZmlndXJhdGlvbikKK3sKKyAgc3RkOjpzdHJpbmcgY29uc3QmIHByb3BlcnR5VmFsdWUgPQorICAgIHRoaXMtPlRhcmdldC0+R2V0VGFyZ2V0KCktPkdldFNhZmVQcm9wZXJ0eSgKKyAgICAgICJYQ09ERV9TQ0hFTUVfV09SS0lOR19ESVJFQ1RPUlkiKTsKKyAgaWYgKHByb3BlcnR5VmFsdWUuZW1wdHkoKSkgeworICAgIHhvdXQuQXR0cmlidXRlKCJ1c2VDdXN0b21Xb3JraW5nRGlyZWN0b3J5IiwgIk5PIik7CisgIH0gZWxzZSB7CisgICAgeG91dC5BdHRyaWJ1dGUoInVzZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkiLCAiWUVTIik7CisKKyAgICBhdXRvIGN1c3RvbVdvcmtpbmdEaXJlY3RvcnkgPSBjbUdlbmVyYXRvckV4cHJlc3Npb246OkV2YWx1YXRlKAorICAgICAgcHJvcGVydHlWYWx1ZSwgdGhpcy0+TG9jYWxHZW5lcmF0b3IsIGNvbmZpZ3VyYXRpb24pOworICAgIHhvdXQuQXR0cmlidXRlKCJjdXN0b21Xb3JraW5nRGlyZWN0b3J5IiwgY3VzdG9tV29ya2luZ0RpcmVjdG9yeSk7CisgIH0KK30KKwogc3RkOjpzdHJpbmcgY21YQ29kZVNjaGVtZTo6V3JpdGVWZXJzaW9uU3RyaW5nKCkKIHsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIHY7CkBAIC00MDcsNyArNDMxLDcgQEAKICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbiBieSBuYW1lLAogICAvLyBhbmQgaWYgaXQncyBub3QgZm91bmQgcmV0dXJuIGZpcnN0IGZyb20gdGhlIGxpc3QKICAgLy8KLSAgaWYgKCFjbUNvbnRhaW5zKHRoaXMtPkNvbmZpZ0xpc3QsIG5hbWUpICYmICF0aGlzLT5Db25maWdMaXN0LmVtcHR5KCkpIHsKKyAgaWYgKCFjbTo6Y29udGFpbnModGhpcy0+Q29uZmlnTGlzdCwgbmFtZSkgJiYgIXRoaXMtPkNvbmZpZ0xpc3QuZW1wdHkoKSkgewogICAgIHJldHVybiB0aGlzLT5Db25maWdMaXN0WzBdOwogICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbVhDb2RlU2NoZW1lLmggYi9Tb3VyY2UvY21YQ29kZVNjaGVtZS5oCmluZGV4IGRmZjVlMzUuLmRhNDA4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVhDb2RlU2NoZW1lLmgKKysrIGIvU291cmNlL2NtWENvZGVTY2hlbWUuaApAQCAtMjAsNyArMjAsNyBAQAogcHVibGljOgogICB1c2luZyBUZXN0T2JqZWN0cyA9IHN0ZDo6dmVjdG9yPGNvbnN0IGNtWENvZGVPYmplY3QqPjsKIAotICBjbVhDb2RlU2NoZW1lKGNtWENvZGVPYmplY3QqIHhjT2JqLCBUZXN0T2JqZWN0cyB0ZXN0cywKKyAgY21YQ29kZVNjaGVtZShjbUxvY2FsR2VuZXJhdG9yKiBsZywgY21YQ29kZU9iamVjdCogeGNPYmosIFRlc3RPYmplY3RzIHRlc3RzLAogICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29uZmlnTGlzdCwKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeGNWZXJzaW9uKTsKIApAQCAtMjgsNiArMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRhaW5lcik7CiAKIHByaXZhdGU6CisgIGNtTG9jYWxHZW5lcmF0b3IqIGNvbnN0IExvY2FsR2VuZXJhdG9yOwogICBjb25zdCBjbVhDb2RlT2JqZWN0KiBjb25zdCBUYXJnZXQ7CiAgIGNvbnN0IFRlc3RPYmplY3RzIFRlc3RzOwogICBjb25zdCBzdGQ6OnN0cmluZyYgVGFyZ2V0TmFtZTsKQEAgLTYzLDYgKzY0LDkgQEAKICAgdm9pZCBXcml0ZUJ1aWxkYWJsZVJlZmVyZW5jZShjbVhNTFdyaXRlciYgeG91dCwgY29uc3QgY21YQ29kZU9iamVjdCogeGNPYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRhaW5lcik7CiAKKyAgdm9pZCBXcml0ZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkoY21YTUxXcml0ZXImIHhvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb25maWd1cmF0aW9uKTsKKwogICBzdGQ6OnN0cmluZyBXcml0ZVZlcnNpb25TdHJpbmcoKTsKICAgc3RkOjpzdHJpbmcgRmluZENvbmZpZ3VyYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21YTUxQYXJzZXIuY3h4IGIvU291cmNlL2NtWE1MUGFyc2VyLmN4eAppbmRleCBhZDVjNGJhLi4yNGRhOGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21YTUxQYXJzZXIuY3h4CisrKyBiL1NvdXJjZS9jbVhNTFBhcnNlci5jeHgKQEAgLTcsOSArNyw5IEBACiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3N0cmVhbT4KIAotI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgorI2luY2x1ZGUgPGNtM3AvZXhwYXQuaD4KIAotI2luY2x1ZGUgImNtX2V4cGF0LmgiCisjaW5jbHVkZSAiY21zeXMvRlN0cmVhbS5oeHgiCiAKIGNtWE1MUGFyc2VyOjpjbVhNTFBhcnNlcigpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21YTUxXcml0ZXIuaCBiL1NvdXJjZS9jbVhNTFdyaXRlci5oCmluZGV4IGJjNDQ1YWEuLjAwZWEwOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbVhNTFdyaXRlci5oCisrKyBiL1NvdXJjZS9jbVhNTFdyaXRlci5oCkBAIC02LDcgKzYsNyBAQAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKICNpbmNsdWRlIDxjaHJvbm8+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPGN0aW1lPgogI2luY2x1ZGUgPG9zdHJlYW0+CiAjaW5jbHVkZSA8c3RhY2s+CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21fZ2V0X2RhdGUuYyBiL1NvdXJjZS9jbV9nZXRfZGF0ZS5jCmluZGV4IDRiZWY4MDMuLjQ5ZjU1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbV9nZXRfZGF0ZS5jCisrKyBiL1NvdXJjZS9jbV9nZXRfZGF0ZS5jCkBAIC0yLDYgKzIsMTAgQEAKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogI2luY2x1ZGUgImNtX2dldF9kYXRlLmgiCiAKKy8vIEZJWE1FOiBUaGlzIHN1cHByZXNzZXMgdXNlIG9mIGxvY2FsdGltZV9yIGJlY2F1c2UgYXJjaGl2ZV9nZXRkYXRlLmMKKy8vIGRlcGVuZHMgdGhlIHJlc3Qgb2YgbGliYXJjaGl2ZSdzIGNoZWNrcyBmb3IgdGhhdC4KKyNkZWZpbmUgQ01fR0VUX0RBVEUKKwogI2RlZmluZSBfX2FyY2hpdmVfZ2V0X2RhdGUgY21fZ2V0X2RhdGUKIAogI2luY2x1ZGUgIi4uL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbV9zdGF0aWNfc3RyaW5nX3ZpZXcuaHh4IGIvU291cmNlL2NtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwOGFjOTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL2NtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX3N0YXRpY19zdHJpbmdfdmlld19oeHgKLSNkZWZpbmUgY21fc3RhdGljX3N0cmluZ192aWV3X2h4eAotCi0jaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLSNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KLQotbmFtZXNwYWNlIGNtIHsKLQotLyoqIEEgc3RyaW5nX3ZpZXcgdGhhdCBvbmx5IGJpbmRzIHRvIHN0YXRpYyBzdG9yYWdlLgotICoKLSAqIFRoaXMgaXMgdXNlZCB0b2dldGhlciB3aXRoIHRoZSBgIiJfc2AgdXNlci1kZWZpbmVkIGxpdGVyYWwgb3BlcmF0b3IKLSAqIHRvIGNvbnN0cnVjdCBhIHR5cGUtc2FmZSBhYnN0cmFjdGlvbiBvZiBhIHN0cmluZ192aWV3IHRoYXQgb25seSB2aWV3cwotICogc3RhdGljYWxseSBhbGxvY2F0ZWQgc3RyaW5ncy4gIFRoZXNlIHN0cmluZ3MgYXJlIGNvbnN0IGFuZCBhdmFpbGFibGUKLSAqIGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIHRoZSBwcm9ncmFtLgotICovCi1jbGFzcyBzdGF0aWNfc3RyaW5nX3ZpZXcgOiBwdWJsaWMgc3RyaW5nX3ZpZXcKLXsKLSAgc3RhdGljX3N0cmluZ192aWV3KHN0cmluZ192aWV3IHYpCi0gICAgOiBzdHJpbmdfdmlldyh2KQotICB7Ci0gIH0KLQotICBmcmllbmQgc3RhdGljX3N0cmluZ192aWV3IG9wZXJhdG9yIiIgX3MoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOwotfTsKLQotLyoqIENyZWF0ZSBhIHN0YXRpY19zdHJpbmdfdmlldyB1c2luZyBgIiJfc2AgbGl0ZXJhbCBzeW50YXguICAqLwotaW5saW5lIHN0YXRpY19zdHJpbmdfdmlldyBvcGVyYXRvciIiIF9zKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICByZXR1cm4gc3RyaW5nX3ZpZXcoZGF0YSwgc2l6ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGNtCi0KLXVzaW5nIGNtOjpvcGVyYXRvciIiIF9zOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS5jeHggYi9Tb3VyY2UvY21ha2UuY3h4CmluZGV4IGY2M2EyNjQuLmRjYjk2ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS5jeHgKKysrIGIvU291cmNlL2NtYWtlLmN4eApAQCAtMiwxNSArMiwzMSBAQAogICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCiAjaW5jbHVkZSAiY21ha2UuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KKwogI2luY2x1ZGUgPGNtL21lbW9yeT4KICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykgJiYgIWRlZmluZWQoQ01BS0VfQk9PVF9NSU5HVykKICMgIGluY2x1ZGUgPGNtL2l0ZXJhdG9yPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxjbWV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CisKKyNpbmNsdWRlICJjbXN5cy9GU3RyZWFtLmh4eCIKKyNpbmNsdWRlICJjbXN5cy9HbG9iLmh4eCIKKyNpbmNsdWRlICJjbXN5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHgiCisKICNpbmNsdWRlICJjbV9zeXNfc3RhdC5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiY21Db21tYW5kcy5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgImNtRG9jdW1lbnRhdGlvbkVudHJ5LmgiCkBAIC0yNCw2ICs0MCw5IEBACiAjaW5jbHVkZSAiY21MaW5rTGluZUNvbXB1dGVyLmgiCiAjaW5jbHVkZSAiY21Mb2NhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisjICBpbmNsdWRlICJjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YS5oIgorI2VuZGlmCiAjaW5jbHVkZSAiY21NZXNzZW5nZXIuaCIKICNpbmNsdWRlICJjbVN0YXRlLmgiCiAjaW5jbHVkZSAiY21TdGF0ZURpcmVjdG9yeS5oIgpAQCAtMzgsMTcgKzU3LDEzIEBACiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogIyAgaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KIAotIyAgaW5jbHVkZSAiY21fanNvbmNwcF93cml0ZXIuaCIKKyMgIGluY2x1ZGUgPGNtM3AvanNvbi93cml0ZXIuaD4KIAogIyAgaW5jbHVkZSAiY21GaWxlQVBJLmgiCiAjICBpbmNsdWRlICJjbUdyYXBoVml6V3JpdGVyLmgiCiAjICBpbmNsdWRlICJjbVZhcmlhYmxlV2F0Y2guaCIKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQotIyAgZGVmaW5lIENNQUtFX1VTRV9FQ0xJUFNFCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19NSU5HVzMyX18pICYmIGRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogIyAgZGVmaW5lIENNQUtFX0JPT1RfTUlOR1cKICNlbmRpZgpAQCAtNTYsNiArNzEsOCBAQAogLy8gaW5jbHVkZSB0aGUgZ2VuZXJhdG9yCiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAjICBpZiAhZGVmaW5lZChDTUFLRV9CT09UX01JTkdXKQorIyAgICBpbmNsdWRlIDxjbWV4dC9tZW1vcnk+CisKICMgICAgaW5jbHVkZSAiY21HbG9iYWxCb3JsYW5kTWFrZWZpbGVHZW5lcmF0b3IuaCIKICMgICAgaW5jbHVkZSAiY21HbG9iYWxKT01NYWtlZmlsZUdlbmVyYXRvci5oIgogIyAgICBpbmNsdWRlICJjbUdsb2JhbE5NYWtlTWFrZWZpbGVHZW5lcmF0b3IuaCIKQEAgLTgwLDE2ICs5NywxMyBAQAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKICMgIGluY2x1ZGUgImNtR2xvYmFsTmluamFHZW5lcmF0b3IuaCIKICNlbmRpZgotI2luY2x1ZGUgImNtRXh0cmFDb2RlTGl0ZUdlbmVyYXRvci5oIgogCi0jaWYgIWRlZmluZWQoQ01BS0VfQk9PVF9NSU5HVykKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCiAjICBpbmNsdWRlICJjbUV4dHJhQ29kZUJsb2Nrc0dlbmVyYXRvci5oIgotI2VuZGlmCi0jaW5jbHVkZSAiY21FeHRyYUthdGVHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJjbUV4dHJhU3VibGltZVRleHRHZW5lcmF0b3IuaCIKLQotI2lmZGVmIENNQUtFX1VTRV9FQ0xJUFNFCisjICBpbmNsdWRlICJjbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3IuaCIKICMgIGluY2x1ZGUgImNtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvci5oIgorIyAgaW5jbHVkZSAiY21FeHRyYUthdGVHZW5lcmF0b3IuaCIKKyMgIGluY2x1ZGUgImNtRXh0cmFTdWJsaW1lVGV4dEdlbmVyYXRvci5oIgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfV0lOMzIpCkBAIC0xMDYsMTkgKzEyMCw2IEBACiAjICBpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgotI2luY2x1ZGUgImNtc3lzL0dsb2IuaHh4IgotI2luY2x1ZGUgImNtc3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eCIKLQogbmFtZXNwYWNlIHsKIAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKQEAgLTEzMCw2ICsxMzEsNyBAQAogc3RhdGljIGJvb2wgY21ha2VDaGVja1N0YW1wRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgc3RhbXBOYW1lKTsKIHN0YXRpYyBib29sIGNtYWtlQ2hlY2tTdGFtcExpc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHN0YW1wTGlzdCk7CiAKKyNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCiBzdGF0aWMgdm9pZCBjbVdhcm5VbnVzZWRDbGlXYXJuaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXJpYWJsZSwgaW50IC8qdW51c2VkKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN0eCwgY29uc3QgY2hhciogLyp1bnVzZWQqLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21NYWtlZmlsZSogLyp1bnVzZWQqLykKQEAgLTEzNyw2ICsxMzksNyBAQAogICBjbWFrZSogY20gPSByZWludGVycHJldF9jYXN0PGNtYWtlKj4oY3R4KTsKICAgY20tPk1hcmtDbGlBc1VzZWQodmFyaWFibGUpOwogfQorI2VuZGlmCiAKIGNtYWtlOjpjbWFrZShSb2xlIHJvbGUsIGNtU3RhdGU6Ok1vZGUgbW9kZSkKICAgOiBGaWxlVGltZUNhY2hlKGNtOjptYWtlX3VuaXF1ZTxjbUZpbGVUaW1lQ2FjaGU+KCkpCkBAIC0xOTEsNyArMTk0LDcgQEAKICAgICB9OwogCiAgICAgLy8gVGhlICJjIiBleHRlbnNpb24gTVVTVCBwcmVjZWRlIHRoZSAiQyIgZXh0ZW5zaW9uLgotICAgIHNldHVwRXh0cyh0aGlzLT5Tb3VyY2VGaWxlRXh0ZW5zaW9ucywKKyAgICBzZXR1cEV4dHModGhpcy0+Q0xpa2VTb3VyY2VGaWxlRXh0ZW5zaW9ucywKICAgICAgICAgICAgICAgeyAiYyIsICJDIiwgImMrKyIsICJjYyIsICJjcHAiLCAiY3h4IiwgImN1IiwgIm0iLCAiTSIsICJtbSIgfSk7CiAgICAgc2V0dXBFeHRzKHRoaXMtPkhlYWRlckZpbGVFeHRlbnNpb25zLAogICAgICAgICAgICAgICB7ICJoIiwgImhoIiwgImgrKyIsICJobSIsICJocHAiLCAiaHh4IiwgImluIiwgInR4eCIgfSk7CkBAIC0yMDEsMTQgKzIwNCw3IEBACiAgIH0KIH0KIAotY21ha2U6On5jbWFrZSgpCi17Ci0gIGlmICh0aGlzLT5HbG9iYWxHZW5lcmF0b3IpIHsKLSAgICBkZWxldGUgdGhpcy0+R2xvYmFsR2VuZXJhdG9yOwotICAgIHRoaXMtPkdsb2JhbEdlbmVyYXRvciA9IG51bGxwdHI7Ci0gIH0KLSAgY21EZWxldGVBbGwodGhpcy0+R2VuZXJhdG9ycyk7Ci19CitjbWFrZTo6fmNtYWtlKCkgPSBkZWZhdWx0OwogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQogSnNvbjo6VmFsdWUgY21ha2U6OlJlcG9ydFZlcnNpb25Kc29uKCkgY29uc3QKQEAgLTI4OCwxMCArMjg0LDExIEBACiAvLyBQYXJzZSB0aGUgYXJncwogYm9vbCBjbWFrZTo6U2V0Q2FjaGVBcmdzKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncykKIHsKLSAgYm9vbCBmaW5kUGFja2FnZU1vZGUgPSBmYWxzZTsKKyAgYXV0byBmaW5kUGFja2FnZU1vZGUgPSBmYWxzZTsKKyAgYXV0byBzZWVuU2NyaXB0T3B0aW9uID0gZmFsc2U7CiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgPSBhcmdzW2ldOwotICAgIGlmIChhcmcuZmluZCgiLUQiLCAwKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItRCIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBlbnRyeSA9IGFyZy5zdWJzdHIoMik7CiAgICAgICBpZiAoZW50cnkuZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC0zMTIsOCArMzA5LDcgQEAKICAgICAgICAgYm9vbCBoYXZlVmFsdWUgPSBmYWxzZTsKICAgICAgICAgc3RkOjpzdHJpbmcgY2FjaGVkVmFsdWU7CiAgICAgICAgIGlmICh0aGlzLT5XYXJuVW51c2VkQ2xpKSB7Ci0gICAgICAgICAgaWYgKGNvbnN0IHN0ZDo6c3RyaW5nKiB2ID0KLSAgICAgICAgICAgICAgICB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKHZhcikpIHsKKyAgICAgICAgICBpZiAoY21Qcm9wIHYgPSB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKHZhcikpIHsKICAgICAgICAgICAgIGhhdmVWYWx1ZSA9IHRydWU7CiAgICAgICAgICAgICBjYWNoZWRWYWx1ZSA9ICp2OwogICAgICAgICAgIH0KQEAgLTMzMCw5ICszMjYsOCBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICJQYXJzZSBlcnJvciBpbiBjb21tYW5kIGxpbmUgYXJndW1lbnQ6ICIgPDwgYXJnIDw8ICJcbiIKLSAgICAgICAgICAgICAgICAgIDw8ICJTaG91bGQgYmU6IFZBUjp0eXBlPXZhbHVlXG4iOwotICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiTm8gY21ha2Ugc2NyaXB0IHByb3ZpZGVkLiIpOworICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiUGFyc2UgZXJyb3IgaW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50OiAiICsgYXJnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiArICJTaG91bGQgYmU6IFZBUjp0eXBlPXZhbHVlXG4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1XIikpIHsKQEAgLTM4MSw3ICszNzYsNyBAQAogICAgICAgICAvLyAtV25vLWVycm9yPTxuYW1lPgogICAgICAgICB0aGlzLT5EaWFnTGV2ZWxzW25hbWVdID0gc3RkOjptaW4odGhpcy0+RGlhZ0xldmVsc1tuYW1lXSwgRElBR19XQVJOKTsKICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItVSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItVSIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBlbnRyeVBhdHRlcm4gPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKGVudHJ5UGF0dGVybi5lbXB0eSgpKSB7CiAgICAgICAgICsraTsKQEAgLTM5Myw3ICszODgsNyBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICBjbXN5czo6UmVndWxhckV4cHJlc3Npb24gcmVnZXgoCi0gICAgICAgIGNtc3lzOjpHbG9iOjpQYXR0ZXJuVG9SZWdleChlbnRyeVBhdHRlcm4sIHRydWUsIHRydWUpLmNfc3RyKCkpOworICAgICAgICBjbXN5czo6R2xvYjo6UGF0dGVyblRvUmVnZXgoZW50cnlQYXR0ZXJuLCB0cnVlLCB0cnVlKSk7CiAgICAgICAvLyBnbyB0aHJvdWdoIGFsbCBjYWNoZSBlbnRyaWVzIGFuZCBjb2xsZWN0IHRoZSB2YXJzIHdoaWNoIHdpbGwgYmUKICAgICAgIC8vIHJlbW92ZWQKICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBlbnRyaWVzVG9EZWxldGU7CkBAIC00MTEsNyArNDA2LDcgQEAKICAgICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGN1cnJlbnRFbnRyeSA6IGVudHJpZXNUb0RlbGV0ZSkgewogICAgICAgICB0aGlzLT5TdGF0ZS0+UmVtb3ZlQ2FjaGVFbnRyeShjdXJyZW50RW50cnkpOwogICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1DIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1DIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHBhdGguZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC00MjIsMTEgKzQxNywxMSBAQAogICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgfQotICAgICAgc3RkOjpjb3V0IDw8ICJsb2FkaW5nIGluaXRpYWwgY2FjaGUgZmlsZSAiIDw8IHBhdGggPDwgIlxuIjsKKyAgICAgIGNtU3lzdGVtVG9vbHM6OlN0ZG91dCgibG9hZGluZyBpbml0aWFsIGNhY2hlIGZpbGUgIiArIHBhdGggKyAiXG4iKTsKICAgICAgIC8vIFJlc29sdmUgc2NyaXB0IHBhdGggc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZSByZWxhdGl2ZSB0byAkUFdELgogICAgICAgcGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocGF0aCk7CiAgICAgICB0aGlzLT5SZWFkTGlzdEZpbGUoYXJncywgcGF0aCk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLVAiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLVAiKSkgewogICAgICAgaSsrOwogICAgICAgaWYgKGkgPj0gYXJncy5zaXplKCkpIHsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIi1QIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBmaWxlIG5hbWUuIik7CkBAIC00NDUsNyArNDQwLDEyIEBACiAgICAgICB0aGlzLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KAogICAgICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpKTsKICAgICAgIHRoaXMtPlJlYWRMaXN0RmlsZShhcmdzLCBwYXRoKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLWZpbmQtcGFja2FnZSIsIDApID09IDApIHsKKyAgICAgIHNlZW5TY3JpcHRPcHRpb24gPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYXJnID09ICItLSIgJiYgc2VlblNjcmlwdE9wdGlvbikgeworICAgICAgLy8gU3RvcCBwcm9jZXNzaW5nIENNYWtlIGFyZ3MgYW5kIGF2b2lkIHBvc3NpYmxlIGVycm9ycworICAgICAgLy8gd2hlbiBhcmJpdHJhcnkgYXJncyBhcmUgZ2l2ZW4gdG8gQ01ha2Ugc2NyaXB0LgorICAgICAgYnJlYWs7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1maW5kLXBhY2thZ2UiKSkgewogICAgICAgZmluZFBhY2thZ2VNb2RlID0gdHJ1ZTsKICAgICB9CiAgIH0KQEAgLTQ2MiwxMiArNDYyLDEyIEBACiB7CiAgIC8vIGlmIGEgZ2VuZXJhdG9yIHdhcyBub3QgeWV0IGNyZWF0ZWQsIHRlbXBvcmFyaWx5IGNyZWF0ZSBvbmUKICAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCk7Ci0gIGJvb2wgY3JlYXRlZCA9IGZhbHNlOwogCiAgIC8vIGlmIGEgZ2VuZXJhdG9yIHdhcyBub3Qgc3BlY2lmaWVkIHVzZSBhIGdlbmVyaWMgb25lCisgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gZ2VuOwogICBpZiAoIWdnKSB7Ci0gICAgZ2cgPSBuZXcgY21HbG9iYWxHZW5lcmF0b3IodGhpcyk7Ci0gICAgY3JlYXRlZCA9IHRydWU7CisgICAgZ2VuID0gY206Om1ha2VfdW5pcXVlPGNtR2xvYmFsR2VuZXJhdG9yPih0aGlzKTsKKyAgICBnZyA9IGdlbi5nZXQoKTsKICAgfQogCiAgIC8vIHJlYWQgaW4gdGhlIGxpc3QgZmlsZSB0byBmaWxsIHRoZSBjYWNoZQpAQCAtNDg5LDExICs0ODksNiBAQAogICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkVycm9yIHByb2Nlc3NpbmcgZmlsZTogIiArIHBhdGgpOwogICAgIH0KICAgfQotCi0gIC8vIGZyZWUgZ2VuZXJpYyBvbmUgaWYgZ2VuZXJhdGVkCi0gIGlmIChjcmVhdGVkKSB7Ci0gICAgZGVsZXRlIGdnOwotICB9CiB9CiAKIGJvb2wgY21ha2U6OkZpbmRQYWNrYWdlKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYXJncykKQEAgLTUwMSw5ICs0OTYsNyBAQAogICB0aGlzLT5TZXRIb21lRGlyZWN0b3J5KGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkpOwogICB0aGlzLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KGNtU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkpOwogCi0gIC8vIGlmIGEgZ2VuZXJhdG9yIHdhcyBub3QgeWV0IGNyZWF0ZWQsIHRlbXBvcmFyaWx5IGNyZWF0ZSBvbmUKLSAgY21HbG9iYWxHZW5lcmF0b3IqIGdnID0gbmV3IGNtR2xvYmFsR2VuZXJhdG9yKHRoaXMpOwotICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3IoZ2cpOworICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3IoY206Om1ha2VfdW5pcXVlPGNtR2xvYmFsR2VuZXJhdG9yPih0aGlzKSk7CiAKICAgY21TdGF0ZVNuYXBzaG90IHNuYXBzaG90ID0gdGhpcy0+R2V0Q3VycmVudFNuYXBzaG90KCk7CiAgIHNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldEN1cnJlbnRCaW5hcnkoCkBAIC01MTIsOCArNTA1LDkgQEAKICAgICBjbVN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeSgpKTsKICAgLy8gcmVhZCBpbiB0aGUgbGlzdCBmaWxlIHRvIGZpbGwgdGhlIGNhY2hlCiAgIHNuYXBzaG90LlNldERlZmF1bHREZWZpbml0aW9ucygpOwotICBjbU1ha2VmaWxlKiBtZiA9IG5ldyBjbU1ha2VmaWxlKGdnLCBzbmFwc2hvdCk7Ci0gIGdnLT5BZGRNYWtlZmlsZShtZik7CisgIGF1dG8gbWZ1ID0gY206Om1ha2VfdW5pcXVlPGNtTWFrZWZpbGU+KHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpLCBzbmFwc2hvdCk7CisgIGNtTWFrZWZpbGUqIG1mID0gbWZ1LmdldCgpOworICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkFkZE1ha2VmaWxlKHN0ZDo6bW92ZShtZnUpKTsKIAogICBtZi0+U2V0QXJnY0FyZ3YoYXJncyk7CiAKQEAgLTUzMCwyNiArNTI0LDI2IEBACiAgICAgaWYgKCFxdWlldCkgewogICAgICAgcHJpbnRmKCIlcyBub3QgZm91bmQuXG4iLCBwYWNrYWdlTmFtZS5jX3N0cigpKTsKICAgICB9Ci0gIH0gZWxzZSBpZiAobW9kZSA9PSAiRVhJU1QiKSB7CisgIH0gZWxzZSBpZiAobW9kZSA9PSAiRVhJU1QiX3MpIHsKICAgICBpZiAoIXF1aWV0KSB7CiAgICAgICBwcmludGYoIiVzIGZvdW5kLlxuIiwgcGFja2FnZU5hbWUuY19zdHIoKSk7CiAgICAgfQotICB9IGVsc2UgaWYgKG1vZGUgPT0gIkNPTVBJTEUiKSB7CisgIH0gZWxzZSBpZiAobW9kZSA9PSAiQ09NUElMRSJfcykgewogICAgIHN0ZDo6c3RyaW5nIGluY2x1ZGVzID0gbWYtPkdldFNhZmVEZWZpbml0aW9uKCJQQUNLQUdFX0lOQ0xVREVfRElSUyIpOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbmNsdWRlRGlycyA9IGNtRXhwYW5kZWRMaXN0KGluY2x1ZGVzKTsKIAotICAgIGdnLT5DcmVhdGVHZW5lcmF0aW9uT2JqZWN0cygpOwotICAgIGNtTG9jYWxHZW5lcmF0b3IqIGxnID0gZ2ctPkxvY2FsR2VuZXJhdG9yc1swXTsKKyAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkNyZWF0ZUdlbmVyYXRpb25PYmplY3RzKCk7CisgICAgY29uc3QgYXV0byYgbGcgPSB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkxvY2FsR2VuZXJhdG9yc1swXTsKICAgICBzdGQ6OnN0cmluZyBpbmNsdWRlRmxhZ3MgPQogICAgICAgbGctPkdldEluY2x1ZGVGbGFncyhpbmNsdWRlRGlycywgbnVsbHB0ciwgbGFuZ3VhZ2UpOwogCiAgICAgc3RkOjpzdHJpbmcgZGVmaW5pdGlvbnMgPSBtZi0+R2V0U2FmZURlZmluaXRpb24oIlBBQ0tBR0VfREVGSU5JVElPTlMiKTsKICAgICBwcmludGYoIiVzICVzXG4iLCBpbmNsdWRlRmxhZ3MuY19zdHIoKSwgZGVmaW5pdGlvbnMuY19zdHIoKSk7Ci0gIH0gZWxzZSBpZiAobW9kZSA9PSAiTElOSyIpIHsKKyAgfSBlbHNlIGlmIChtb2RlID09ICJMSU5LIl9zKSB7CiAgICAgY29uc3QgY2hhciogdGFyZ2V0TmFtZSA9ICJkdW1teSI7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNyY3M7CiAgICAgY21UYXJnZXQqIHRndCA9IG1mLT5BZGRFeGVjdXRhYmxlKHRhcmdldE5hbWUsIHNyY3MsIHRydWUpOwotICAgIHRndC0+U2V0UHJvcGVydHkoIkxJTktFUl9MQU5HVUFHRSIsIGxhbmd1YWdlLmNfc3RyKCkpOworICAgIHRndC0+U2V0UHJvcGVydHkoIkxJTktFUl9MQU5HVUFHRSIsIGxhbmd1YWdlKTsKIAogICAgIHN0ZDo6c3RyaW5nIGxpYnMgPSBtZi0+R2V0U2FmZURlZmluaXRpb24oIlBBQ0tBR0VfTElCUkFSSUVTIik7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGxpYkxpc3QgPSBjbUV4cGFuZGVkTGlzdChsaWJzKTsKQEAgLTU2NSw4ICs1NTksOSBAQAogICAgIHN0ZDo6c3RyaW5nIGxpbmtQYXRoOwogICAgIHN0ZDo6c3RyaW5nIGZsYWdzOwogICAgIHN0ZDo6c3RyaW5nIGxpbmtGbGFnczsKLSAgICBnZy0+Q3JlYXRlR2VuZXJhdGlvbk9iamVjdHMoKTsKLSAgICBjbUdlbmVyYXRvclRhcmdldCogZ3RndCA9IGdnLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KHRndC0+R2V0TmFtZSgpKTsKKyAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkNyZWF0ZUdlbmVyYXRpb25PYmplY3RzKCk7CisgICAgY21HZW5lcmF0b3JUYXJnZXQqIGd0Z3QgPQorICAgICAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5GaW5kR2VuZXJhdG9yVGFyZ2V0KHRndC0+R2V0TmFtZSgpKTsKICAgICBjbUxvY2FsR2VuZXJhdG9yKiBsZyA9IGd0Z3QtPkdldExvY2FsR2VuZXJhdG9yKCk7CiAgICAgY21MaW5rTGluZUNvbXB1dGVyIGxpbmtMaW5lQ29tcHV0ZXIobGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGctPkdldFN0YXRlU25hcHNob3QoKS5HZXREaXJlY3RvcnkoKSk7CkBAIC01ODYsMTAgKzU4MSw2IEBACiAgICAgICAgICAgfSovCiAgIH0KIAotICAvLyBmcmVlIGdlbmVyaWMgb25lIGlmIGdlbmVyYXRlZAotICAvLyAgdGhpcy0+U2V0R2xvYmFsR2VuZXJhdG9yKDApOyAvLyBzZXR0aW5nIDAtcG9pbnRlciBpcyBub3QgcG9zc2libGUKLSAgLy8gIGRlbGV0ZSBnZzsgLy8gdGhpcyBjcmFzaGVzIGluc2lkZSB0aGUgY21ha2UgaW5zdGFuY2UKLQogICByZXR1cm4gcGFja2FnZUZvdW5kOwogfQogCkBAIC02MjYsOSArNjE3LDEzIEBACiB7CiAgIGJvb2wgaGF2ZVRvb2xzZXQgPSBmYWxzZTsKICAgYm9vbCBoYXZlUGxhdGZvcm0gPSBmYWxzZTsKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgIHN0ZDo6c3RyaW5nIHByb2ZpbGluZ0Zvcm1hdDsKKyAgc3RkOjpzdHJpbmcgcHJvZmlsaW5nT3V0cHV0OworI2VuZGlmCiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgYXJncy5zaXplKCk7ICsraSkgewogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBhcmcgPSBhcmdzW2ldOwotICAgIGlmIChhcmcuZmluZCgiLUgiLCAwKSA9PSAwIHx8IGFyZy5maW5kKCItUyIsIDApID09IDApIHsKKyAgICBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1IIikgfHwgY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1TIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHBhdGguZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC02NDYsOSArNjQxLDExIEBACiAgICAgICBwYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChwYXRoKTsKICAgICAgIGNtU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHBhdGgpOwogICAgICAgdGhpcy0+U2V0SG9tZURpcmVjdG9yeShwYXRoKTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItTyIsIDApID09IDApIHsKKyAgICAgIC8vIFhYWChjbGFuZy10aWR5KTogaHR0cHM6Ly9idWdzLmxsdm0ub3JnL3Nob3dfYnVnLmNnaT9pZD00NDE2NQorICAgICAgLy8gTk9MSU5UTkVYVExJTkUoYnVncHJvbmUtYnJhbmNoLWNsb25lKQorICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1PIikpIHsKICAgICAgIC8vIFRoZXJlIGlzIG5vIGxvY2FsIGdlbmVyYXRlIGFueW1vcmUuICBJZ25vcmUgLU8gb3B0aW9uLgotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1CIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1CIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHBhdGguZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC02NjcsNTIgKzY2NCw0MyBAQAogICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMocGF0aCk7CiAgICAgICB0aGlzLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KHBhdGgpOwogICAgIH0gZWxzZSBpZiAoKGkgPCBhcmdzLnNpemUoKSAtIDIpICYmCi0gICAgICAgICAgICAgICAoYXJnLmZpbmQoIi0tY2hlY2stYnVpbGQtc3lzdGVtIiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLWJ1aWxkLXN5c3RlbSIpKSB7CiAgICAgICB0aGlzLT5DaGVja0J1aWxkU3lzdGVtQXJndW1lbnQgPSBhcmdzWysraV07CiAgICAgICB0aGlzLT5DbGVhckJ1aWxkU3lzdGVtID0gKGF0b2koYXJnc1srK2ldLmNfc3RyKCkpID4gMCk7CiAgICAgfSBlbHNlIGlmICgoaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgJiYKLSAgICAgICAgICAgICAgIChhcmcuZmluZCgiLS1jaGVjay1zdGFtcC1maWxlIiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLXN0YW1wLWZpbGUiKSkgewogICAgICAgdGhpcy0+Q2hlY2tTdGFtcEZpbGUgPSBhcmdzWysraV07CiAgICAgfSBlbHNlIGlmICgoaSA8IGFyZ3Muc2l6ZSgpIC0gMSkgJiYKLSAgICAgICAgICAgICAgIChhcmcuZmluZCgiLS1jaGVjay1zdGFtcC1saXN0IiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWNoZWNrLXN0YW1wLWxpc3QiKSkgewogICAgICAgdGhpcy0+Q2hlY2tTdGFtcExpc3QgPSBhcmdzWysraV07CisgICAgfSBlbHNlIGlmIChhcmcgPT0gIi0tcmVnZW5lcmF0ZS1kdXJpbmctYnVpbGQiX3MpIHsKKyAgICAgIHRoaXMtPlJlZ2VuZXJhdGVEdXJpbmdCdWlsZCA9IHRydWU7CiAgICAgfQogI2lmIGRlZmluZWQoQ01BS0VfSEFWRV9WU19HRU5FUkFUT1JTKQogICAgIGVsc2UgaWYgKChpIDwgYXJncy5zaXplKCkgLSAxKSAmJgotICAgICAgICAgICAgIChhcmcuZmluZCgiLS12cy1zb2x1dGlvbi1maWxlIiwgMCkgPT0gMCkpIHsKKyAgICAgICAgICAgICBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS12cy1zb2x1dGlvbi1maWxlIikpIHsKICAgICAgIHRoaXMtPlZTU29sdXRpb25GaWxlID0gYXJnc1srK2ldOwogICAgIH0KICNlbmRpZgotICAgIGVsc2UgaWYgKGFyZy5maW5kKCItRCIsIDApID09IDApIHsKKyAgICBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUQiKSB8fCBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLVUiKSB8fAorICAgICAgICAgICAgIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItQyIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKLSAgICAgIC8vIGluIGNhc2UgJy1EIHZhcj12YWwnIGlzIGdpdmVuLCBhbHNvIHNraXAgdGhlIG5leHQKLSAgICAgIC8vIGluIGNhc2UgJy1EdmFyPXZhbCcgaXMgZ2l2ZW4sIGRvbid0IHNraXAgdGhlIG5leHQKKyAgICAgIC8vIGluIGNhc2UgJy1bRFVDXSBhcmd2YWwnIHZhcicgaXMgZ2l2ZW4sIGFsc28gc2tpcCB0aGUgbmV4dAorICAgICAgLy8gaW4gY2FzZSAnLVtEVUNdYXJndmFsJyBpcyBnaXZlbiwgZG9uJ3Qgc2tpcCB0aGUgbmV4dAogICAgICAgaWYgKGFyZy5zaXplKCkgPT0gMikgewogICAgICAgICArK2k7CiAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLVUiLCAwKSA9PSAwKSB7Ci0gICAgICAvLyBza2lwIGZvciBub3cKLSAgICAgIC8vIGluIGNhc2UgJy1VIHZhcicgaXMgZ2l2ZW4sIGFsc28gc2tpcCB0aGUgbmV4dAotICAgICAgLy8gaW4gY2FzZSAnLVV2YXInIGlzIGdpdmVuLCBkb24ndCBza2lwIHRoZSBuZXh0Ci0gICAgICBpZiAoYXJnLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgICsraTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItQyIsIDApID09IDApIHsKLSAgICAgIC8vIHNraXAgZm9yIG5vdwotICAgICAgLy8gaW4gY2FzZSAnLUMgcGF0aCcgaXMgZ2l2ZW4sIGFsc28gc2tpcCB0aGUgbmV4dAotICAgICAgLy8gaW4gY2FzZSAnLUNwYXRoJyBpcyBnaXZlbiwgZG9uJ3Qgc2tpcCB0aGUgbmV4dAotICAgICAgaWYgKGFyZy5zaXplKCkgPT0gMikgewotICAgICAgICArK2k7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLVAiLCAwKSA9PSAwKSB7CisgICAgICAvLyBYWFgoY2xhbmctdGlkeSk6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxNjUKKyAgICAgIC8vIE5PTElOVE5FWFRMSU5FKGJ1Z3Byb25lLWJyYW5jaC1jbG9uZSkKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItUCIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKICAgICAgIGkrKzsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLWZpbmQtcGFja2FnZSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWZpbmQtcGFja2FnZSIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKICAgICAgIGkrKzsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItVyIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItVyIpKSB7CiAgICAgICAvLyBza2lwIGZvciBub3cKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItLWdyYXBodml6PSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWdyYXBodml6PSIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyBwYXRoID0gYXJnLnN1YnN0cihzdHJsZW4oIi0tZ3JhcGh2aXo9IikpOwogICAgICAgcGF0aCA9IGNtU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocGF0aCk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhwYXRoKTsKQEAgLTcyMSwxMyArNzA5LDEzIEBACiAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJObyBmaWxlIHNwZWNpZmllZCBmb3IgLS1ncmFwaHZpeiIpOwogICAgICAgICByZXR1cm47CiAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1kZWJ1Zy10cnljb21waWxlIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tZGVidWctdHJ5Y29tcGlsZSIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgImRlYnVnIHRyeWNvbXBpbGUgb25cbiI7CiAgICAgICB0aGlzLT5EZWJ1Z1RyeUNvbXBpbGVPbigpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tZGVidWctb3V0cHV0IiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tZGVidWctb3V0cHV0IikpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiUnVubmluZyB3aXRoIGRlYnVnIG91dHB1dCBvbi5cbiI7CiAgICAgICB0aGlzLT5TZXREZWJ1Z091dHB1dE9uKHRydWUpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tbG9nLWxldmVsPSIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLWxvZy1sZXZlbD0iKSkgewogICAgICAgY29uc3QgYXV0byBsb2dMZXZlbCA9CiAgICAgICAgIFN0cmluZ1RvTG9nTGV2ZWwoYXJnLnN1YnN0cihzaXplb2YoIi0tbG9nLWxldmVsPSIpIC0gMSkpOwogICAgICAgaWYgKGxvZ0xldmVsID09IExvZ0xldmVsOjpMT0dfVU5ERUZJTkVEKSB7CkBAIC03MzUsNyArNzIzLDggQEAKICAgICAgICAgcmV0dXJuOwogICAgICAgfQogICAgICAgdGhpcy0+U2V0TG9nTGV2ZWwobG9nTGV2ZWwpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tbG9nbGV2ZWw9IiwgMCkgPT0gMCkgeworICAgICAgdGhpcy0+TG9nTGV2ZWxXYXNTZXRWaWFDTEkgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tbG9nbGV2ZWw9IikpIHsKICAgICAgIC8vIFRoaXMgaXMgc3VwcG9ydGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBUaGlzIG9wdGlvbiBvbmx5CiAgICAgICAvLyBhcHBlYXJlZCBpbiB0aGUgMy4xNS54IHJlbGVhc2Ugc2VyaWVzIGFuZCB3YXMgcmVuYW1lZCB0bwogICAgICAgLy8gLS1sb2ctbGV2ZWwgaW4gMy4xNi4wCkBAIC03NDYsMzkgKzczNSw1NCBAQAogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgICB0aGlzLT5TZXRMb2dMZXZlbChsb2dMZXZlbCk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS10cmFjZS1leHBhbmQiLCAwKSA9PSAwKSB7CisgICAgICB0aGlzLT5Mb2dMZXZlbFdhc1NldFZpYUNMSSA9IHRydWU7CisgICAgfSBlbHNlIGlmIChhcmcgPT0gIi0tbG9nLWNvbnRleHQiX3MpIHsKKyAgICAgIHRoaXMtPlNldFNob3dMb2dDb250ZXh0KHRydWUpOworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tZGVidWctZmluZCIpKSB7CisgICAgICBzdGQ6OmNvdXQgPDwgIlJ1bm5pbmcgd2l0aCBkZWJ1ZyBvdXRwdXQgb24gZm9yIHRoZSBgZmluZGAgY29tbWFuZHMuXG4iOworICAgICAgdGhpcy0+U2V0RGVidWdGaW5kT3V0cHV0T24odHJ1ZSk7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS10cmFjZS1leHBhbmQiKSkgewogICAgICAgc3RkOjpjb3V0IDw8ICJSdW5uaW5nIHdpdGggZXhwYW5kZWQgdHJhY2Ugb3V0cHV0IG9uLlxuIjsKICAgICAgIHRoaXMtPlNldFRyYWNlKHRydWUpOwogICAgICAgdGhpcy0+U2V0VHJhY2VFeHBhbmQodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS10cmFjZS1zb3VyY2U9IiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tdHJhY2UtZm9ybWF0PSIpKSB7CisgICAgICB0aGlzLT5TZXRUcmFjZSh0cnVlKTsKKyAgICAgIGNvbnN0IGF1dG8gdHJhY2VGb3JtYXQgPQorICAgICAgICBTdHJpbmdUb1RyYWNlRm9ybWF0KGFyZy5zdWJzdHIoc3RybGVuKCItLXRyYWNlLWZvcm1hdD0iKSkpOworICAgICAgaWYgKHRyYWNlRm9ybWF0ID09IFRyYWNlRm9ybWF0OjpUUkFDRV9VTkRFRklORUQpIHsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkludmFsaWQgZm9ybWF0IHNwZWNpZmllZCBmb3IgLS10cmFjZS1mb3JtYXQuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbGlkIGZvcm1hdHMgYXJlIGh1bWFuLCBqc29uLXYxLiIpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB0aGlzLT5TZXRUcmFjZUZvcm1hdCh0cmFjZUZvcm1hdCk7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS10cmFjZS1zb3VyY2U9IikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGZpbGUgPSBhcmcuc3Vic3RyKHN0cmxlbigiLS10cmFjZS1zb3VyY2U9IikpOwogICAgICAgY21TeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoZmlsZSk7CiAgICAgICB0aGlzLT5BZGRUcmFjZVNvdXJjZShmaWxlKTsKICAgICAgIHRoaXMtPlNldFRyYWNlKHRydWUpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tdHJhY2UtcmVkaXJlY3Q9IiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi0tdHJhY2UtcmVkaXJlY3Q9IikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGZpbGUgPSBhcmcuc3Vic3RyKHN0cmxlbigiLS10cmFjZS1yZWRpcmVjdD0iKSk7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhmaWxlKTsKICAgICAgIHRoaXMtPlNldFRyYWNlRmlsZShmaWxlKTsKICAgICAgIHRoaXMtPlNldFRyYWNlKHRydWUpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tdHJhY2UiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS10cmFjZSIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIlJ1bm5pbmcgd2l0aCB0cmFjZSBvdXRwdXQgb24uXG4iOwogICAgICAgdGhpcy0+U2V0VHJhY2UodHJ1ZSk7CiAgICAgICB0aGlzLT5TZXRUcmFjZUV4cGFuZChmYWxzZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS13YXJuLXVuaW5pdGlhbGl6ZWQiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS13YXJuLXVuaW5pdGlhbGl6ZWQiKSkgewogICAgICAgc3RkOjpjb3V0IDw8ICJXYXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuIjsKICAgICAgIHRoaXMtPlNldFdhcm5VbmluaXRpYWxpemVkKHRydWUpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0td2Fybi11bnVzZWQtdmFycyIsIDApID09IDApIHsKLSAgICAgIHN0ZDo6Y291dCA8PCAiRmluZGluZyB1bnVzZWQgdmFyaWFibGVzLlxuIjsKLSAgICAgIHRoaXMtPlNldFdhcm5VbnVzZWQodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChhcmcuZmluZCgiLS1uby13YXJuLXVudXNlZC1jbGkiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS13YXJuLXVudXNlZC12YXJzIikpIHsKKyAgICAgIC8vIE9wdGlvbiB3YXMgcmVtb3ZlZC4KKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLW5vLXdhcm4tdW51c2VkLWNsaSIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIk5vdCBzZWFyY2hpbmcgZm9yIHVudXNlZCB2YXJpYWJsZXMgZ2l2ZW4gb24gdGhlICIKICAgICAgICAgICAgICAgICA8PCAiY29tbWFuZCBsaW5lLlxuIjsKICAgICAgIHRoaXMtPlNldFdhcm5VbnVzZWRDbGkoZmFsc2UpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi0tY2hlY2stc3lzdGVtLXZhcnMiLCAwKSA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1jaGVjay1zeXN0ZW0tdmFycyIpKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIkFsc28gY2hlY2sgc3lzdGVtIGZpbGVzIHdoZW4gd2FybmluZyBhYm91dCB1bnVzZWQgYW5kICIKICAgICAgICAgICAgICAgICA8PCAidW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4iOwogICAgICAgdGhpcy0+U2V0Q2hlY2tTeXN0ZW1WYXJzKHRydWUpOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1BIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1BIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gYXJnLnN1YnN0cigyKTsKICAgICAgIGlmICh2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICAgICsraTsKQEAgLTc5NCw3ICs3OTgsNyBAQAogICAgICAgfQogICAgICAgdGhpcy0+U2V0R2VuZXJhdG9yUGxhdGZvcm0odmFsdWUpOwogICAgICAgaGF2ZVBsYXRmb3JtID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGFyZy5maW5kKCItVCIsIDApID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItVCIpKSB7CiAgICAgICBzdGQ6OnN0cmluZyB2YWx1ZSA9IGFyZy5zdWJzdHIoMik7CiAgICAgICBpZiAodmFsdWUuZW1wdHkoKSkgewogICAgICAgICArK2k7CkBAIC04MTAsNyArODE0LDcgQEAKICAgICAgIH0KICAgICAgIHRoaXMtPlNldEdlbmVyYXRvclRvb2xzZXQodmFsdWUpOwogICAgICAgaGF2ZVRvb2xzZXQgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXJnLmZpbmQoIi1HIiwgMCkgPT0gMCkgeworICAgIH0gZWxzZSBpZiAoY21IYXNMaXRlcmFsUHJlZml4KGFyZywgIi1HIikpIHsKICAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gYXJnLnN1YnN0cigyKTsKICAgICAgIGlmICh2YWx1ZS5lbXB0eSgpKSB7CiAgICAgICAgICsraTsKQEAgLTgyMSw3ICs4MjUsNyBAQAogICAgICAgICB9CiAgICAgICAgIHZhbHVlID0gYXJnc1tpXTsKICAgICAgIH0KLSAgICAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZW4gPSB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodmFsdWUpOworICAgICAgYXV0byBnZW4gPSB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodmFsdWUpOwogICAgICAgaWYgKCFnZW4pIHsKICAgICAgICAgc3RkOjpzdHJpbmcga2RldkVycm9yOwogICAgICAgICBpZiAodmFsdWUuZmluZCgiS0RldmVsb3AzIiwgMCkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKQEAgLTgzMyw3ICs4MzcsMjEgQEAKICAgICAgICAgdGhpcy0+UHJpbnRHZW5lcmF0b3JMaXN0KCk7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KLSAgICAgIHRoaXMtPlNldEdsb2JhbEdlbmVyYXRvcihnZW4pOworICAgICAgdGhpcy0+U2V0R2xvYmFsR2VuZXJhdG9yKHN0ZDo6bW92ZShnZW4pKTsKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1wcm9maWxpbmctZm9ybWF0IikpIHsKKyAgICAgIHByb2ZpbGluZ0Zvcm1hdCA9IGFyZy5zdWJzdHIoc3RybGVuKCItLXByb2ZpbGluZy1mb3JtYXQ9IikpOworICAgICAgaWYgKHByb2ZpbGluZ0Zvcm1hdC5lbXB0eSgpKSB7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJObyBmb3JtYXQgc3BlY2lmaWVkIGZvciAtLXByb2ZpbGluZy1mb3JtYXQiKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXByb2ZpbGluZy1vdXRwdXQiKSkgeworICAgICAgcHJvZmlsaW5nT3V0cHV0ID0gYXJnLnN1YnN0cihzdHJsZW4oIi0tcHJvZmlsaW5nLW91dHB1dD0iKSk7CisgICAgICBwcm9maWxpbmdPdXRwdXQgPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHByb2ZpbGluZ091dHB1dCk7CisgICAgICBjbVN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhwcm9maWxpbmdPdXRwdXQpOworICAgICAgaWYgKHByb2ZpbGluZ091dHB1dC5lbXB0eSgpKSB7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJObyBwYXRoIHNwZWNpZmllZCBmb3IgLS1wcm9maWxpbmctb3V0cHV0Iik7CisgICAgICB9CisjZW5kaWYKICAgICB9CiAgICAgLy8gbm8gb3B0aW9uIGFzc3VtZSBpdCBpcyB0aGUgcGF0aCB0byB0aGUgc291cmNlIG9yIGFuIGV4aXN0aW5nIGJ1aWxkCiAgICAgZWxzZSB7CkBAIC04NTEsNiArODY5LDI5IEBACiAgICAgfQogICB9CiAKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgIGlmICghcHJvZmlsaW5nT3V0cHV0LmVtcHR5KCkgfHwgIXByb2ZpbGluZ0Zvcm1hdC5lbXB0eSgpKSB7CisgICAgaWYgKHByb2ZpbGluZ091dHB1dC5lbXB0eSgpKSB7CisgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgICAgIi0tcHJvZmlsaW5nLWZvcm1hdCBzcGVjaWZpZWQgYnV0IG5vIC0tcHJvZmlsaW5nLW91dHB1dCEiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHByb2ZpbGluZ0Zvcm1hdCA9PSAiZ29vZ2xlLXRyYWNlIl9zKSB7CisgICAgICB0cnkgeworICAgICAgICB0aGlzLT5Qcm9maWxpbmdPdXRwdXQgPQorICAgICAgICAgIGNtOjptYWtlX3VuaXF1ZTxjbU1ha2VmaWxlUHJvZmlsaW5nRGF0YT4ocHJvZmlsaW5nT3V0cHV0KTsKKyAgICAgIH0gY2F0Y2ggKHN0ZDo6cnVudGltZV9lcnJvciYgZSkgeworICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigKKyAgICAgICAgICBjbVN0ckNhdCgiQ291bGQgbm90IHN0YXJ0IHByb2ZpbGluZzogIiwgZS53aGF0KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcigiSW52YWxpZCBmb3JtYXQgc3BlY2lmaWVkIGZvciAtLXByb2ZpbGluZy1mb3JtYXQiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKyNlbmRpZgorCiAgIGNvbnN0IGJvb2wgaGF2ZVNvdXJjZURpciA9ICF0aGlzLT5HZXRIb21lRGlyZWN0b3J5KCkuZW1wdHkoKTsKICAgY29uc3QgYm9vbCBoYXZlQmluYXJ5RGlyID0gIXRoaXMtPkdldEhvbWVPdXRwdXREaXJlY3RvcnkoKS5lbXB0eSgpOwogCkBAIC04OTAsNiArOTMxLDIzIEBACiAgIHJldHVybiAoaXQgIT0gbGV2ZWxzLmNlbmQoKSkgPyBpdC0+c2Vjb25kIDogTG9nTGV2ZWw6OkxPR19VTkRFRklORUQ7CiB9CiAKK2NtYWtlOjpUcmFjZUZvcm1hdCBjbWFrZTo6U3RyaW5nVG9UcmFjZUZvcm1hdChjb25zdCBzdGQ6OnN0cmluZyYgdHJhY2VTdHIpCit7CisgIHVzaW5nIFRyYWNlUGFpciA9IHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgVHJhY2VGb3JtYXQ+OworICBzdGF0aWMgY29uc3Qgc3RkOjp2ZWN0b3I8VHJhY2VQYWlyPiBsZXZlbHMgPSB7CisgICAgeyAiaHVtYW4iLCBUcmFjZUZvcm1hdDo6VFJBQ0VfSFVNQU4gfSwKKyAgICB7ICJqc29uLXYxIiwgVHJhY2VGb3JtYXQ6OlRSQUNFX0pTT05fVjEgfSwKKyAgfTsKKworICBjb25zdCBhdXRvIHRyYWNlU3RyTG93Q2FzZSA9IGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZSh0cmFjZVN0cik7CisKKyAgY29uc3QgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZihsZXZlbHMuY2JlZ2luKCksIGxldmVscy5jZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZ0cmFjZVN0ckxvd0Nhc2VdKGNvbnN0IFRyYWNlUGFpciYgcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAuZmlyc3QgPT0gdHJhY2VTdHJMb3dDYXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICByZXR1cm4gKGl0ICE9IGxldmVscy5jZW5kKCkpID8gaXQtPnNlY29uZCA6IFRyYWNlRm9ybWF0OjpUUkFDRV9VTkRFRklORUQ7Cit9CisKIHZvaWQgY21ha2U6OlNldFRyYWNlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZSkKIHsKICAgdGhpcy0+VHJhY2VGaWxlLmNsb3NlKCk7CkBAIC05MDQsNiArOTYyLDQ4IEBACiAgIHN0ZDo6Y291dCA8PCAiVHJhY2Ugd2lsbCBiZSB3cml0dGVuIHRvICIgPDwgZmlsZSA8PCAiXG4iOwogfQogCit2b2lkIGNtYWtlOjpQcmludFRyYWNlRm9ybWF0VmVyc2lvbigpCit7CisgIGlmICghdGhpcy0+R2V0VHJhY2UoKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIG1zZzsKKworICBzd2l0Y2ggKHRoaXMtPkdldFRyYWNlRm9ybWF0KCkpIHsKKyAgICBjYXNlIFRyYWNlRm9ybWF0OjpUUkFDRV9KU09OX1YxOiB7CisjaWZuZGVmIENNQUtFX0JPT1RTVFJBUAorICAgICAgSnNvbjo6VmFsdWUgdmFsOworICAgICAgSnNvbjo6VmFsdWUgdmVyc2lvbjsKKyAgICAgIEpzb246OlN0cmVhbVdyaXRlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICAgIGJ1aWxkZXJbImluZGVudGF0aW9uIl0gPSAiIjsKKyAgICAgIHZlcnNpb25bIm1ham9yIl0gPSAxOworICAgICAgdmVyc2lvblsibWlub3IiXSA9IDA7CisgICAgICB2YWxbInZlcnNpb24iXSA9IHZlcnNpb247CisgICAgICBtc2cgPSBKc29uOjp3cml0ZVN0cmluZyhidWlsZGVyLCB2YWwpOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBUcmFjZUZvcm1hdDo6VFJBQ0VfSFVNQU46CisgICAgICBtc2cgPSAiIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVHJhY2VGb3JtYXQ6OlRSQUNFX1VOREVGSU5FRDoKKyAgICAgIG1zZyA9ICJJTlRFUk5BTCBFUlJPUjogVHJhY2UgZm9ybWF0IGlzIFRSQUNFX1VOREVGSU5FRCI7CisgICAgICBicmVhazsKKyAgfQorCisgIGlmIChtc2cuZW1wdHkoKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGF1dG8mIGYgPSB0aGlzLT5HZXRUcmFjZUZpbGUoKTsKKyAgaWYgKGYpIHsKKyAgICBmIDw8IG1zZyA8PCAnXG4nOworICB9IGVsc2UgeworICAgIGNtU3lzdGVtVG9vbHM6Ok1lc3NhZ2UobXNnKTsKKyAgfQorfQorCiB2b2lkIGNtYWtlOjpTZXREaXJlY3Rvcmllc0Zyb21GaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBhcmcpCiB7CiAgIC8vIENoZWNrIGlmIHRoZSBhcmd1bWVudCByZWZlcnMgdG8gYSBDTWFrZUNhY2hlLnR4dCBvcgpAQCAtOTI3LDkgKzEwMjcsOSBAQAogICAgIHN0ZDo6c3RyaW5nIGZ1bGxQYXRoID0gY21TeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChhcmcpOwogICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZnVsbFBhdGgpOwogICAgIG5hbWUgPSBjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UobmFtZSk7Ci0gICAgaWYgKG5hbWUgPT0gImNtYWtlY2FjaGUudHh0IikgeworICAgIGlmIChuYW1lID09ICJjbWFrZWNhY2hlLnR4dCJfcykgewogICAgICAgY2FjaGVQYXRoID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGZ1bGxQYXRoKTsKLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImNtYWtlbGlzdHMudHh0IikgeworICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiY21ha2VsaXN0cy50eHQiX3MpIHsKICAgICAgIGxpc3RQYXRoID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGZ1bGxQYXRoKTsKICAgICB9CiAgIH0gZWxzZSB7CkBAIC05MzgsNyArMTAzOCw3IEBACiAgICAgc3RkOjpzdHJpbmcgZnVsbFBhdGggPSBjbVN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGFyZyk7CiAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IGNtU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmdWxsUGF0aCk7CiAgICAgbmFtZSA9IGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShuYW1lKTsKLSAgICBpZiAobmFtZSA9PSAiY21ha2VjYWNoZS50eHQiIHx8IG5hbWUgPT0gImNtYWtlbGlzdHMudHh0IikgeworICAgIGlmIChuYW1lID09ICJjbWFrZWNhY2hlLnR4dCJfcyB8fCBuYW1lID09ICJjbWFrZWxpc3RzLnR4dCJfcykgewogICAgICAgYXJnSXNGaWxlID0gdHJ1ZTsKICAgICAgIGxpc3RQYXRoID0gY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKGZ1bGxQYXRoKTsKICAgICB9IGVsc2UgewpAQCAtOTQ5LDExICsxMDQ5LDExIEBACiAgIC8vIElmIHRoZXJlIGlzIGEgQ01ha2VDYWNoZS50eHQgZmlsZSwgdXNlIGl0cyBzZXR0aW5ncy4KICAgaWYgKCFjYWNoZVBhdGguZW1wdHkoKSkgewogICAgIGlmICh0aGlzLT5Mb2FkQ2FjaGUoY2FjaGVQYXRoKSkgewotICAgICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9CisgICAgICBjbVByb3AgZXhpc3RpbmdWYWx1ZSA9CiAgICAgICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0hPTUVfRElSRUNUT1JZIik7CiAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZSkgewogICAgICAgICB0aGlzLT5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KGNhY2hlUGF0aCk7Ci0gICAgICAgIHRoaXMtPlNldEhvbWVEaXJlY3RvcnkoZXhpc3RpbmdWYWx1ZSk7CisgICAgICAgIHRoaXMtPlNldEhvbWVEaXJlY3RvcnkoKmV4aXN0aW5nVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgfQpAQCAtMTAyOSwyNCArMTEyOSwyMCBAQAogI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKICAgdGhpcy0+RXh0cmFHZW5lcmF0b3JzLnB1c2hfYmFjayhjbUV4dHJhQ29kZUJsb2Nrc0dlbmVyYXRvcjo6R2V0RmFjdG9yeSgpKTsKICAgdGhpcy0+RXh0cmFHZW5lcmF0b3JzLnB1c2hfYmFjayhjbUV4dHJhQ29kZUxpdGVHZW5lcmF0b3I6OkdldEZhY3RvcnkoKSk7Ci0gIHRoaXMtPkV4dHJhR2VuZXJhdG9ycy5wdXNoX2JhY2soY21FeHRyYVN1YmxpbWVUZXh0R2VuZXJhdG9yOjpHZXRGYWN0b3J5KCkpOwotICB0aGlzLT5FeHRyYUdlbmVyYXRvcnMucHVzaF9iYWNrKGNtRXh0cmFLYXRlR2VuZXJhdG9yOjpHZXRGYWN0b3J5KCkpOwotCi0jICBpZmRlZiBDTUFLRV9VU0VfRUNMSVBTRQogICB0aGlzLT5FeHRyYUdlbmVyYXRvcnMucHVzaF9iYWNrKGNtRXh0cmFFY2xpcHNlQ0RUNEdlbmVyYXRvcjo6R2V0RmFjdG9yeSgpKTsKLSMgIGVuZGlmCi0KKyAgdGhpcy0+RXh0cmFHZW5lcmF0b3JzLnB1c2hfYmFjayhjbUV4dHJhS2F0ZUdlbmVyYXRvcjo6R2V0RmFjdG9yeSgpKTsKKyAgdGhpcy0+RXh0cmFHZW5lcmF0b3JzLnB1c2hfYmFjayhjbUV4dHJhU3VibGltZVRleHRHZW5lcmF0b3I6OkdldEZhY3RvcnkoKSk7CiAjZW5kaWYKIH0KIAogdm9pZCBjbWFrZTo6R2V0UmVnaXN0ZXJlZEdlbmVyYXRvcnMoc3RkOjp2ZWN0b3I8R2VuZXJhdG9ySW5mbz4mIGdlbmVyYXRvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGluY2x1ZGVOYW1lc1dpdGhQbGF0Zm9ybSkgY29uc3QKIHsKLSAgZm9yIChjbUdsb2JhbEdlbmVyYXRvckZhY3RvcnkqIGdlbiA6IHRoaXMtPkdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBnZW4gOiB0aGlzLT5HZW5lcmF0b3JzKSB7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG5hbWVzID0gZ2VuLT5HZXRHZW5lcmF0b3JOYW1lcygpOwogCiAgICAgaWYgKGluY2x1ZGVOYW1lc1dpdGhQbGF0Zm9ybSkgewotICAgICAgY21BcHBlbmQobmFtZXMsIGdlbi0+R2V0R2VuZXJhdG9yTmFtZXNXaXRoUGxhdGZvcm0oKSk7CisgICAgICBjbTo6YXBwZW5kKG5hbWVzLCBnZW4tPkdldEdlbmVyYXRvck5hbWVzV2l0aFBsYXRmb3JtKCkpOwogICAgIH0KIAogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUgOiBuYW1lcykgewpAQCAtMTA5MSw3ICsxMTg3LDggQEAKICAgfQogfQogCi1zdGF0aWMgc3RkOjpwYWlyPGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IqLCBzdGQ6OnN0cmluZz4KK3N0YXRpYyBzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3I+LAorICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZz4KIGNyZWF0ZUV4dHJhR2VuZXJhdG9yKAogICBjb25zdCBzdGQ6OnZlY3RvcjxjbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yRmFjdG9yeSo+JiBpbiwKICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCkBAIC0xMTE0LDE1ICsxMjExLDE3IEBACiAgIHJldHVybiB7IG51bGxwdHIsIG5hbWUgfTsKIH0KIAotY21HbG9iYWxHZW5lcmF0b3IqIGNtYWtlOjpDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIGduYW1lKQorc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBjbWFrZTo6Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKAorICBjb25zdCBzdGQ6OnN0cmluZyYgZ25hbWUpCiB7Ci0gIHN0ZDo6cGFpcjxjbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yKiwgc3RkOjpzdHJpbmc+IGV4dHJhID0KLSAgICBjcmVhdGVFeHRyYUdlbmVyYXRvcih0aGlzLT5FeHRyYUdlbmVyYXRvcnMsIGduYW1lKTsKLSAgY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvciogZXh0cmFHZW5lcmF0b3IgPSBleHRyYS5maXJzdDsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZSA9IGV4dHJhLnNlY29uZDsKKyAgc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxjbUV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yPiwgc3RkOjpzdHJpbmc+CisgICAgZXh0cmEgPSBjcmVhdGVFeHRyYUdlbmVyYXRvcih0aGlzLT5FeHRyYUdlbmVyYXRvcnMsIGduYW1lKTsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3I+JiBleHRyYUdlbmVyYXRvciA9CisgICAgZXh0cmEuZmlyc3Q7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lID0gZXh0cmEuc2Vjb25kOwogCi0gIGNtR2xvYmFsR2VuZXJhdG9yKiBnZW5lcmF0b3IgPSBudWxscHRyOwotICBmb3IgKGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogZyA6IHRoaXMtPkdlbmVyYXRvcnMpIHsKKyAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBnZW5lcmF0b3I7CisgIGZvciAoY29uc3QgYXV0byYgZyA6IHRoaXMtPkdlbmVyYXRvcnMpIHsKICAgICBnZW5lcmF0b3IgPSBnLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IobmFtZSwgdGhpcyk7CiAgICAgaWYgKGdlbmVyYXRvcikgewogICAgICAgYnJlYWs7CkBAIC0xMTMwLDkgKzEyMjksNyBAQAogICB9CiAKICAgaWYgKGdlbmVyYXRvcikgewotICAgIGdlbmVyYXRvci0+U2V0RXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3IoZXh0cmFHZW5lcmF0b3IpOwotICB9IGVsc2UgewotICAgIGRlbGV0ZSBleHRyYUdlbmVyYXRvcjsKKyAgICBnZW5lcmF0b3ItPlNldEV4dGVybmFsTWFrZWZpbGVQcm9qZWN0R2VuZXJhdG9yKHN0ZDo6bW92ZShleHRyYUdlbmVyYXRvcikpOwogICB9CiAKICAgcmV0dXJuIGdlbmVyYXRvcjsKQEAgLTExODQsMTUgKzEyODEsMTMgQEAKICAgcmV0dXJuIGNhY2hlUGF0aDsKIH0KIAotdm9pZCBjbWFrZTo6U2V0R2xvYmFsR2VuZXJhdG9yKGNtR2xvYmFsR2VuZXJhdG9yKiBnZykKK3ZvaWQgY21ha2U6OlNldEdsb2JhbEdlbmVyYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IGdnKQogewogICBpZiAoIWdnKSB7CiAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkVycm9yIFNldEdsb2JhbEdlbmVyYXRvciBjYWxsZWQgd2l0aCBudWxsIik7CiAgICAgcmV0dXJuOwogICB9Ci0gIC8vIGRlbGV0ZSB0aGUgb2xkIGdlbmVyYXRvcgogICBpZiAodGhpcy0+R2xvYmFsR2VuZXJhdG9yKSB7Ci0gICAgZGVsZXRlIHRoaXMtPkdsb2JhbEdlbmVyYXRvcjsKICAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ1hYIGFuZCBDQwogICAgIC8vIFJlc3RvcmUgQ0MKICAgICBzdGQ6OnN0cmluZyBlbnYgPSAiQ0M9IjsKQEAgLTEyMDgsNyArMTMwMyw3IEBACiAgIH0KIAogICAvLyBzZXQgdGhlIG5ldwotICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IgPSBnZzsKKyAgdGhpcy0+R2xvYmFsR2VuZXJhdG9yID0gc3RkOjptb3ZlKGdnKTsKIAogICAvLyBzZXQgdGhlIGdsb2JhbCBmbGFnIGZvciB1bml4IHN0eWxlIHBhdGhzIG9uIGNtU3lzdGVtVG9vbHMgYXMgc29vbiBhcwogICAvLyB0aGUgZ2VuZXJhdG9yIGlzIHNldC4gIFRoaXMgYWxsb3dzIGdtYWtlIHRvIGJlIHVzZWQgb24gd2luZG93cy4KQEAgLTEyNzYsNyArMTM3MSw3IEBACiAKIGludCBjbWFrZTo6SGFuZGxlRGVsZXRlQ2FjaGVWYXJpYWJsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcikKIHsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyZ3NTcGxpdCA9IGNtRXhwYW5kZWRMaXN0KHN0ZDo6c3RyaW5nKHZhciksIHRydWUpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJnc1NwbGl0ID0gY21FeHBhbmRlZExpc3QodmFyLCB0cnVlKTsKICAgLy8gZXJhc2UgdGhlIHByb3BlcnR5IHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbgogICB0aGlzLT5TdGF0ZS0+U2V0R2xvYmFsUHJvcGVydHkoIl9fQ01BS0VfREVMRVRFX0NBQ0hFX0NIQU5HRV9WQVJTXyIsICIiKTsKICAgaWYgKHRoaXMtPlN0YXRlLT5HZXRJc0luVHJ5Q29tcGlsZSgpKSB7CkBAIC0xMjk1LDE0ICsxMzkwLDE5IEBACiAgICAgc2F2ZS5rZXkgPSAqaTsKICAgICB3YXJuaW5nIDw8ICppIDw8ICI9ICI7CiAgICAgaSsrOwotICAgIHNhdmUudmFsdWUgPSAqaTsKLSAgICB3YXJuaW5nIDw8ICppIDw8ICJcbiI7Ci0gICAgY29uc3QgY2hhciogZXhpc3RpbmdWYWx1ZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoc2F2ZS5rZXkpOworICAgIGlmIChpICE9IGFyZ3NTcGxpdC5lbmQoKSkgeworICAgICAgc2F2ZS52YWx1ZSA9ICppOworICAgICAgd2FybmluZyA8PCAqaSA8PCAiXG4iOworICAgIH0gZWxzZSB7CisgICAgICB3YXJuaW5nIDw8ICJcbiI7CisgICAgICBpIC09IDE7CisgICAgfQorICAgIGNtUHJvcCBleGlzdGluZ1ZhbHVlID0gdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZShzYXZlLmtleSk7CiAgICAgaWYgKGV4aXN0aW5nVmFsdWUpIHsKICAgICAgIHNhdmUudHlwZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VHlwZShzYXZlLmtleSk7Ci0gICAgICBpZiAoY29uc3QgY2hhciogaGVscCA9CisgICAgICBpZiAoY21Qcm9wIGhlbHAgPQogICAgICAgICAgICAgdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlQcm9wZXJ0eShzYXZlLmtleSwgIkhFTFBTVFJJTkciKSkgewotICAgICAgICBzYXZlLmhlbHAgPSBoZWxwOworICAgICAgICBzYXZlLmhlbHAgPSAqaGVscDsKICAgICAgIH0KICAgICB9CiAgICAgc2F2ZWQucHVzaF9iYWNrKHN0ZDo6bW92ZShzYXZlKSk7CkBAIC0xMzQ3LDkgKzE0NDcsOSBAQAogICBpZiAodGhpcy0+RGlhZ0xldmVscy5jb3VudCgiZGV2IikgPT0gMSkgewogICAgIGJvb2wgc2V0RGVwcmVjYXRlZFZhcmlhYmxlcyA9IGZhbHNlOwogCi0gICAgY29uc3QgY2hhciogY2FjaGVkV2FybkRlcHJlY2F0ZWQgPQorICAgIGNtUHJvcCBjYWNoZWRXYXJuRGVwcmVjYXRlZCA9CiAgICAgICB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiKTsKLSAgICBjb25zdCBjaGFyKiBjYWNoZWRFcnJvckRlcHJlY2F0ZWQgPQorICAgIGNtUHJvcCBjYWNoZWRFcnJvckRlcHJlY2F0ZWQgPQogICAgICAgdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfRVJST1JfREVQUkVDQVRFRCIpOwogCiAgICAgLy8gZG9uJ3Qgb3ZlcndyaXRlIGRlcHJlY2F0ZWQgd2FybmluZyBzZXR0aW5nIGZyb20gYSBwcmV2aW91cyBpbnZvY2F0aW9uCkBAIC0xMzg4LDggKzE0ODgsOCBAQAogICAvLyBDYWNoZSB2YXJpYWJsZXMgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHNldCBieSBhIHByZXZpb3VzIGludm9jYXRpb24sCiAgIC8vIHNvIHdlIGNhbm5vdCByZWx5IG9uIGNvbW1hbmQgbGluZSBvcHRpb25zIGFsb25lLiBBbHdheXMgZW5zdXJlIG91cgogICAvLyBtZXNzZW5nZXIgaXMgaW4gc3luYyB3aXRoIHRoZSBjYWNoZS4KLSAgY29uc3QgY2hhciogdmFsdWUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiKTsKLSAgdGhpcy0+TWVzc2VuZ2VyLT5TZXRTdXBwcmVzc0RlcHJlY2F0ZWRXYXJuaW5ncyh2YWx1ZSAmJiBjbUlzT2ZmKHZhbHVlKSk7CisgIGNtUHJvcCB2YWx1ZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX1dBUk5fREVQUkVDQVRFRCIpOworICB0aGlzLT5NZXNzZW5nZXItPlNldFN1cHByZXNzRGVwcmVjYXRlZFdhcm5pbmdzKHZhbHVlICYmIGNtSXNPZmYoKnZhbHVlKSk7CiAKICAgdmFsdWUgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9FUlJPUl9ERVBSRUNBVEVEIik7CiAgIHRoaXMtPk1lc3Nlbmdlci0+U2V0RGVwcmVjYXRlZFdhcm5pbmdzQXNFcnJvcnMoY21Jc09uKHZhbHVlKSk7CkBAIC0xMzk4LDEzICsxNDk4LDEzIEBACiAgIHRoaXMtPk1lc3Nlbmdlci0+U2V0U3VwcHJlc3NEZXZXYXJuaW5ncyhjbUlzT24odmFsdWUpKTsKIAogICB2YWx1ZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9FUlJPUlMiKTsKLSAgdGhpcy0+TWVzc2VuZ2VyLT5TZXREZXZXYXJuaW5nc0FzRXJyb3JzKHZhbHVlICYmIGNtSXNPZmYodmFsdWUpKTsKKyAgdGhpcy0+TWVzc2VuZ2VyLT5TZXREZXZXYXJuaW5nc0FzRXJyb3JzKHZhbHVlICYmIGNtSXNPZmYoKnZhbHVlKSk7CiAKICAgaW50IHJldCA9IHRoaXMtPkFjdHVhbENvbmZpZ3VyZSgpOwotICBjb25zdCBjaGFyKiBkZWxDYWNoZVZhcnMgPQorICBjbVByb3AgZGVsQ2FjaGVWYXJzID0KICAgICB0aGlzLT5TdGF0ZS0+R2V0R2xvYmFsUHJvcGVydHkoIl9fQ01BS0VfREVMRVRFX0NBQ0hFX0NIQU5HRV9WQVJTXyIpOwotICBpZiAoZGVsQ2FjaGVWYXJzICYmIGRlbENhY2hlVmFyc1swXSAhPSAwKSB7Ci0gICAgcmV0dXJuIHRoaXMtPkhhbmRsZURlbGV0ZUNhY2hlVmFyaWFibGVzKGRlbENhY2hlVmFycyk7CisgIGlmIChkZWxDYWNoZVZhcnMgJiYgIWRlbENhY2hlVmFycy0+ZW1wdHkoKSkgeworICAgIHJldHVybiB0aGlzLT5IYW5kbGVEZWxldGVDYWNoZVZhcmlhYmxlcygqZGVsQ2FjaGVWYXJzKTsKICAgfQogICByZXR1cm4gcmV0OwogfQpAQCAtMTQyOSw5ICsxNTI5LDggQEAKIAogICAvLyBubyBnZW5lcmF0b3Igc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUKICAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3IpIHsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyogZ2VuTmFtZSA9Ci0gICAgICB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9HRU5FUkFUT1IiKTsKLSAgICBjb25zdCBzdGQ6OnN0cmluZyogZXh0cmFHZW5OYW1lID0KKyAgICBjbVByb3AgZ2VuTmFtZSA9IHRoaXMtPlN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOworICAgIGNtUHJvcCBleHRyYUdlbk5hbWUgPQogICAgICAgdGhpcy0+U3RhdGUtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZSgiQ01BS0VfRVhUUkFfR0VORVJBVE9SIik7CiAgICAgaWYgKGdlbk5hbWUpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGZ1bGxOYW1lID0KQEAgLTE0NTQsOCArMTU1Myw3IEBACiAgICAgfQogICB9CiAKLSAgY29uc3Qgc3RkOjpzdHJpbmcqIGdlbk5hbWUgPQotICAgIHRoaXMtPlN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOworICBjbVByb3AgZ2VuTmFtZSA9IHRoaXMtPlN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOwogICBpZiAoZ2VuTmFtZSkgewogICAgIGlmICghdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5NYXRjaGVzR2VuZXJhdG9yTmFtZSgqZ2VuTmFtZSkpIHsKICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2UgPQpAQCAtMTQ3Nyw3ICsxNTc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOwogICB9CiAKLSAgaWYgKGNvbnN0IHN0ZDo6c3RyaW5nKiBpbnN0YW5jZSA9CisgIGlmIChjbVByb3AgaW5zdGFuY2UgPQogICAgICAgICB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfSU5TVEFOQ0UiKSkgewogICAgIGlmICh0aGlzLT5HZW5lcmF0b3JJbnN0YW5jZVNldCAmJiB0aGlzLT5HZW5lcmF0b3JJbnN0YW5jZSAhPSAqaW5zdGFuY2UpIHsKICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2UgPQpAQCAtMTQ5NCw3ICsxNTkyLDcgQEAKICAgICAgICJHZW5lcmF0b3IgaW5zdGFuY2UgaWRlbnRpZmllci4iLCBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKICAgfQogCi0gIGlmIChjb25zdCBzdGQ6OnN0cmluZyogcGxhdGZvcm1OYW1lID0KKyAgaWYgKGNtUHJvcCBwbGF0Zm9ybU5hbWUgPQogICAgICAgICB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0iKSkgewogICAgIGlmICh0aGlzLT5HZW5lcmF0b3JQbGF0Zm9ybVNldCAmJgogICAgICAgICB0aGlzLT5HZW5lcmF0b3JQbGF0Zm9ybSAhPSAqcGxhdGZvcm1OYW1lKSB7CkBAIC0xNTEyLDcgKzE2MTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWUgb2YgZ2VuZXJhdG9yIHBsYXRmb3JtLiIsIGNtU3RhdGVFbnVtczo6SU5URVJOQUwpOwogICB9CiAKLSAgaWYgKGNvbnN0IHN0ZDo6c3RyaW5nKiB0c05hbWUgPQorICBpZiAoY21Qcm9wIHRzTmFtZSA9CiAgICAgICAgIHRoaXMtPlN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIikpIHsKICAgICBpZiAodGhpcy0+R2VuZXJhdG9yVG9vbHNldFNldCAmJiB0aGlzLT5HZW5lcmF0b3JUb29sc2V0ICE9ICp0c05hbWUpIHsKICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2UgPQpAQCAtMTU3MSw3ICsxNjY5LDcgQEAKICAgICB9CiAgIH0KIAotICBjbU1ha2VmaWxlKiBtZiA9IHRoaXMtPkdsb2JhbEdlbmVyYXRvci0+R2V0TWFrZWZpbGVzKClbMF07CisgIGF1dG8mIG1mID0gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5HZXRNYWtlZmlsZXMoKVswXTsKICAgaWYgKG1mLT5Jc09uKCJDVEVTVF9VU0VfTEFVTkNIRVJTIikgJiYKICAgICAgICF0aGlzLT5TdGF0ZS0+R2V0R2xvYmFsUHJvcGVydHkoIlJVTEVfTEFVTkNIX0NPTVBJTEUiKSkgewogICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKApAQCAtMTU5MiwxMyArMTY5MCwxMiBAQAogc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBjbWFrZTo6RXZhbHVhdGVEZWZhdWx0R2xvYmFsR2VuZXJhdG9yKCkKIHsKICAgaWYgKCF0aGlzLT5FbnZpcm9ubWVudEdlbmVyYXRvci5lbXB0eSgpKSB7Ci0gICAgY21HbG9iYWxHZW5lcmF0b3IqIGdlbiA9Ci0gICAgICB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodGhpcy0+RW52aXJvbm1lbnRHZW5lcmF0b3IpOworICAgIGF1dG8gZ2VuID0gdGhpcy0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKHRoaXMtPkVudmlyb25tZW50R2VuZXJhdG9yKTsKICAgICBpZiAoIWdlbikgewogICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkNNQUtFX0dFTkVSQVRPUiB3YXMgc2V0IGJ1dCB0aGUgc3BlY2lmaWVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0b3IgZG9lc24ndCBleGlzdC4gVXNpbmcgQ01ha2UgZGVmYXVsdC4iKTsKICAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4oZ2VuKTsKKyAgICAgIHJldHVybiBnZW47CiAgICAgfQogICB9CiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKENNQUtFX0JPT1RfTUlOR1cpCkBAIC0xNjQ4LDEzICsxNzQ1LDE0IEBACiAgICAgICB9CiAgICAgfQogICB9Ci0gIGNtR2xvYmFsR2VuZXJhdG9yKiBnZW4gPSB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoZm91bmQpOworICBhdXRvIGdlbiA9IHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihmb3VuZCk7CiAgIGlmICghZ2VuKSB7Ci0gICAgZ2VuID0gbmV3IGNtR2xvYmFsTk1ha2VNYWtlZmlsZUdlbmVyYXRvcih0aGlzKTsKKyAgICBnZW4gPSBjbTo6bWFrZV91bmlxdWU8Y21HbG9iYWxOTWFrZU1ha2VmaWxlR2VuZXJhdG9yPih0aGlzKTsKICAgfQotICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPihnZW4pOworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPihzdGQ6Om1vdmUoZ2VuKSk7CiAjZWxzZQotICByZXR1cm4gY206Om1ha2VfdW5pcXVlPGNtR2xvYmFsVW5peE1ha2VmaWxlR2VuZXJhdG9yMz4odGhpcyk7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+KAorICAgIGNtOjptYWtlX3VuaXF1ZTxjbUdsb2JhbFVuaXhNYWtlZmlsZUdlbmVyYXRvcjM+KHRoaXMpKTsKICNlbmRpZgogfQogCkBAIC0xNjY1LDcgKzE3NjMsNyBAQAogICAvLyBUaGlzIHByaW50IGNvdWxkIGJlIHVuaWZpZWQgZm9yIGFsbCBwbGF0Zm9ybXMKICAgc3RkOjpjb3V0IDw8ICItLSBCdWlsZGluZyBmb3I6ICIgPDwgZ2VuLT5HZXROYW1lKCkgPDwgIlxuIjsKICNlbmRpZgotICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3IoZ2VuLnJlbGVhc2UoKSk7CisgIHRoaXMtPlNldEdsb2JhbEdlbmVyYXRvcihzdGQ6Om1vdmUoZ2VuKSk7CiB9CiAKIHZvaWQgY21ha2U6OlByZUxvYWRDTWFrZUZpbGVzKCkKQEAgLTE2OTYsNiArMTc5NCwxMSBAQAogICAgIHJldHVybiAtMTsKICAgfQogCisgIC8vIExvZyB0aGUgdHJhY2UgZm9ybWF0IHZlcnNpb24gdG8gdGhlIGRlc2lyZWQgb3V0cHV0CisgIGlmICh0aGlzLT5HZXRUcmFjZSgpKSB7CisgICAgdGhpcy0+UHJpbnRUcmFjZUZvcm1hdFZlcnNpb24oKTsKKyAgfQorCiAgIC8vIElmIHdlIGFyZSBnaXZlbiBhIHN0YW1wIGxpc3QgZmlsZSBjaGVjayBpZiBpdCBpcyByZWFsbHkgb3V0IG9mIGRhdGUuCiAgIGlmICghdGhpcy0+Q2hlY2tTdGFtcExpc3QuZW1wdHkoKSAmJgogICAgICAgY21ha2VDaGVja1N0YW1wTGlzdCh0aGlzLT5DaGVja1N0YW1wTGlzdCkpIHsKQEAgLTE3NjMsMTAgKzE4NjYsMTEgQEAKICAgICAgIGNtU3lzdGVtVG9vbHM6Ok1lc3NhZ2UoIkNNYWtlIENvbmZpZ3VyZSBzdGVwIGZhaWxlZC4gICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1aWxkIGZpbGVzIGNhbm5vdCBiZSByZWdlbmVyYXRlZCBjb3JyZWN0bHkuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdHRlbXB0aW5nIHRvIHN0b3AgSURFIGJ1aWxkLiIpOwotICAgICAgY21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IqIGdnID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8Y21HbG9iYWxWaXN1YWxTdHVkaW9HZW5lcmF0b3IqPih0aGlzLT5HbG9iYWxHZW5lcmF0b3IpOwotICAgICAgZ2ctPkNhbGxWaXN1YWxTdHVkaW9NYWNybyhjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvcjo6TWFjcm9TdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5WU1NvbHV0aW9uRmlsZSk7CisgICAgICBjbUdsb2JhbFZpc3VhbFN0dWRpb0dlbmVyYXRvciYgZ2cgPQorICAgICAgICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yPigKKyAgICAgICAgICB0aGlzLT5HbG9iYWxHZW5lcmF0b3IpOworICAgICAgZ2cuQ2FsbFZpc3VhbFN0dWRpb01hY3JvKGNtR2xvYmFsVmlzdWFsU3R1ZGlvR2VuZXJhdG9yOjpNYWNyb1N0b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+VlNTb2x1dGlvbkZpbGUpOwogICAgIH0KICNlbmRpZgogICAgIHJldHVybiByZXQ7CkBAIC0xODIxLDEzICsxOTI1LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUodHlwZSkpOwogICB0aGlzLT5VbndhdGNoVW51c2VkQ2xpKGtleSk7CiAKLSAgaWYgKGtleSA9PSAiQ01BS0VfV0FSTl9ERVBSRUNBVEVEIikgeworICBpZiAoa2V5ID09ICJDTUFLRV9XQVJOX0RFUFJFQ0FURUQiX3MpIHsKICAgICB0aGlzLT5NZXNzZW5nZXItPlNldFN1cHByZXNzRGVwcmVjYXRlZFdhcm5pbmdzKHZhbHVlICYmIGNtSXNPZmYodmFsdWUpKTsKLSAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX0VSUk9SX0RFUFJFQ0FURUQiKSB7CisgIH0gZWxzZSBpZiAoa2V5ID09ICJDTUFLRV9FUlJPUl9ERVBSRUNBVEVEIl9zKSB7CiAgICAgdGhpcy0+TWVzc2VuZ2VyLT5TZXREZXByZWNhdGVkV2FybmluZ3NBc0Vycm9ycyhjbUlzT24odmFsdWUpKTsKLSAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9XQVJOSU5HUyIpIHsKKyAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9XQVJOSU5HUyJfcykgewogICAgIHRoaXMtPk1lc3Nlbmdlci0+U2V0U3VwcHJlc3NEZXZXYXJuaW5ncyhjbUlzT24odmFsdWUpKTsKLSAgfSBlbHNlIGlmIChrZXkgPT0gIkNNQUtFX1NVUFBSRVNTX0RFVkVMT1BFUl9FUlJPUlMiKSB7CisgIH0gZWxzZSBpZiAoa2V5ID09ICJDTUFLRV9TVVBQUkVTU19ERVZFTE9QRVJfRVJST1JTIl9zKSB7CiAgICAgdGhpcy0+TWVzc2VuZ2VyLT5TZXREZXZXYXJuaW5nc0FzRXJyb3JzKHZhbHVlICYmIGNtSXNPZmYodmFsdWUpKTsKICAgfQogfQpAQCAtMTg1OSwxNSArMTk2MywyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3RyYWNlKTsKIH0KIAorc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNtYWtlOjpHZXRBbGxFeHRlbnNpb25zKCkgY29uc3QKK3sKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFsbEV4dCA9IHRoaXMtPkNMaWtlU291cmNlRmlsZUV4dGVuc2lvbnMub3JkZXJlZDsKKyAgYWxsRXh0Lmluc2VydChhbGxFeHQuZW5kKCksIHRoaXMtPkhlYWRlckZpbGVFeHRlbnNpb25zLm9yZGVyZWQuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICB0aGlzLT5IZWFkZXJGaWxlRXh0ZW5zaW9ucy5vcmRlcmVkLmVuZCgpKTsKKyAgLy8gY3VkYSBleHRlbnNpb25zIGFyZSBhbHNvIGluIFNvdXJjZUZpbGVFeHRlbnNpb25zIHNvIHdlIGlnbm9yZSBpdCBoZXJlCisgIGFsbEV4dC5pbnNlcnQoYWxsRXh0LmVuZCgpLCB0aGlzLT5Gb3J0cmFuRmlsZUV4dGVuc2lvbnMub3JkZXJlZC5iZWdpbigpLAorICAgICAgICAgICAgICAgIHRoaXMtPkZvcnRyYW5GaWxlRXh0ZW5zaW9ucy5vcmRlcmVkLmVuZCgpKTsKKyAgcmV0dXJuIGFsbEV4dDsKK30KKwogc3RkOjpzdHJpbmcgY21ha2U6OlN0cmlwRXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlKSBjb25zdAogewogICBhdXRvIGRvdHBvcyA9IGZpbGUucmZpbmQoJy4nKTsKICAgaWYgKGRvdHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIGF1dG8gZXh0ID0gZmlsZS5zdWJzdHIoZG90cG9zICsgMSk7CiAjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19BUFBMRV9fKQotICAgIGV4dCA9IGNtU3lzdGVtVG9vbHM6Okxvd2VyQ2FzZShleHQpOworICAgIGF1dG8gZXh0ID0gY21TeXN0ZW1Ub29sczo6TG93ZXJDYXNlKGZpbGUuc3Vic3RyKGRvdHBvcyArIDEpKTsKKyNlbHNlCisgICAgYXV0byBleHQgPSBjbTo6c3RyaW5nX3ZpZXcoZmlsZSkuc3Vic3RyKGRvdHBvcyArIDEpOwogI2VuZGlmCi0gICAgaWYgKHRoaXMtPklzU291cmNlRXh0ZW5zaW9uKGV4dCkgfHwgdGhpcy0+SXNIZWFkZXJFeHRlbnNpb24oZXh0KSkgeworICAgIGlmICh0aGlzLT5Jc0FLbm93bkV4dGVuc2lvbihleHQpKSB7CiAgICAgICByZXR1cm4gZmlsZS5zdWJzdHIoMCwgZG90cG9zKTsKICAgICB9CiAgIH0KQEAgLTE4NzYsNyArMTk5Miw3IEBACiAKIGNvbnN0IGNoYXIqIGNtYWtlOjpHZXRDYWNoZURlZmluaXRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBwID0gdGhpcy0+U3RhdGUtPkdldEluaXRpYWxpemVkQ2FjaGVWYWx1ZShuYW1lKTsKKyAgY21Qcm9wIHAgPSB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKG5hbWUpOwogICByZXR1cm4gcCA/IHAtPmNfc3RyKCkgOiBudWxscHRyOwogfQogCkBAIC0xOTE2LDYgKzIwMzIsNyBAQAogICB0aGlzLT5HZW5lcmF0b3JzLnB1c2hfYmFjayhjbUdsb2JhbEdoc011bHRpR2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkpOwogIyAgZW5kaWYKICAgdGhpcy0+R2VuZXJhdG9ycy5wdXNoX2JhY2soY21HbG9iYWxOaW5qYUdlbmVyYXRvcjo6TmV3RmFjdG9yeSgpKTsKKyAgdGhpcy0+R2VuZXJhdG9ycy5wdXNoX2JhY2soY21HbG9iYWxOaW5qYU11bHRpR2VuZXJhdG9yOjpOZXdGYWN0b3J5KCkpOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDTUFLRV9VU0VfV01BS0UpCiAgIHRoaXMtPkdlbmVyYXRvcnMucHVzaF9iYWNrKGNtR2xvYmFsV2F0Y29tV01ha2VHZW5lcmF0b3I6Ok5ld0ZhY3RvcnkoKSk7CkBAIC0yMDIxLDcgKzIxMzgsNyBAQAogICBjb25zdCBzdGQ6OnN0cmluZyBkZWZhdWx0TmFtZSA9IGRlZmF1bHRHZW5lcmF0b3ItPkdldE5hbWUoKTsKICAgYm9vbCBmb3VuZERlZmF1bHRPbmUgPSBmYWxzZTsKIAotICBmb3IgKGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeSogZyA6IHRoaXMtPkdlbmVyYXRvcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBnIDogdGhpcy0+R2VuZXJhdG9ycykgewogICAgIGNtRG9jdW1lbnRhdGlvbkVudHJ5IGU7CiAgICAgZy0+R2V0RG9jdW1lbnRhdGlvbihlKTsKICAgICBpZiAoIWZvdW5kRGVmYXVsdE9uZSAmJiBjbUhhc1ByZWZpeChlLk5hbWUsIGRlZmF1bHROYW1lKSkgewpAQCAtMjA4Miw3ICsyMTk5LDcgQEAKIHZvaWQgY21ha2U6OlVwZGF0ZUNvbnZlcnNpb25QYXRoVGFibGUoKQogewogICAvLyBVcGRhdGUgdGhlIHBhdGggY29udmVyc2lvbiB0YWJsZSB3aXRoIGFueSBzcGVjaWZpZWQgZmlsZToKLSAgY29uc3Qgc3RkOjpzdHJpbmcqIHRhYmxlcGF0aCA9CisgIGNtUHJvcCB0YWJsZXBhdGggPQogICAgIHRoaXMtPlN0YXRlLT5HZXRJbml0aWFsaXplZENhY2hlVmFsdWUoIkNNQUtFX1BBVEhfVFJBTlNMQVRJT05fRklMRSIpOwogCiAgIGlmICh0YWJsZXBhdGgpIHsKQEAgLTIxNTYsMjYgKzIyNzMsMjQgQEAKICAgaWYgKHRoaXMtPkNsZWFyQnVpbGRTeXN0ZW0pIHsKICAgICAvLyBHZXQgdGhlIGdlbmVyYXRvciB1c2VkIGZvciB0aGlzIGJ1aWxkIHN5c3RlbS4KICAgICBjb25zdCBjaGFyKiBnZW5OYW1lID0gbWYuR2V0RGVmaW5pdGlvbigiQ01BS0VfREVQRU5EU19HRU5FUkFUT1IiKTsKLSAgICBpZiAoIWdlbk5hbWUgfHwgZ2VuTmFtZVswXSA9PSAnXDAnKSB7CisgICAgaWYgKCFjbU5vbmVtcHR5KGdlbk5hbWUpKSB7CiAgICAgICBnZW5OYW1lID0gIlVuaXggTWFrZWZpbGVzIjsKICAgICB9CiAKICAgICAvLyBDcmVhdGUgdGhlIGdlbmVyYXRvciBhbmQgdXNlIGl0IHRvIGNsZWFyIHRoZSBkZXBlbmRlbmNpZXMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPiBnZ2QoCi0gICAgICB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IoZ2VuTmFtZSkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gZ2dkID0KKyAgICAgIHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihnZW5OYW1lKTsKICAgICBpZiAoZ2dkKSB7CiAgICAgICBjbS5HZXRDdXJyZW50U25hcHNob3QoKS5TZXREZWZhdWx0RGVmaW5pdGlvbnMoKTsKICAgICAgIGNtTWFrZWZpbGUgbWZkKGdnZC5nZXQoKSwgY20uR2V0Q3VycmVudFNuYXBzaG90KCkpOwotICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IGxnZChnZ2QtPkNyZWF0ZUxvY2FsR2VuZXJhdG9yKCZtZmQpKTsKKyAgICAgIGF1dG8gbGdkID0gZ2dkLT5DcmVhdGVMb2NhbEdlbmVyYXRvcigmbWZkKTsKICAgICAgIGxnZC0+Q2xlYXJEZXBlbmRlbmNpZXMoJm1mZCwgdmVyYm9zZSk7CiAgICAgfQogICB9CiAKICAgLy8gSWYgYW55IGJ5cHJvZHVjdCBvZiBtYWtlZmlsZSBnZW5lcmF0aW9uIGlzIG1pc3Npbmcgd2UgbXVzdCByZS1ydW4uCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9kdWN0czsKLSAgaWYgKGNvbnN0IGNoYXIqIHByb2R1Y3RTdHIgPSBtZi5HZXREZWZpbml0aW9uKCJDTUFLRV9NQUtFRklMRV9QUk9EVUNUUyIpKSB7Ci0gICAgY21FeHBhbmRMaXN0KHByb2R1Y3RTdHIsIHByb2R1Y3RzKTsKLSAgfQorICBtZi5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9NQUtFRklMRV9QUk9EVUNUUyIsIHByb2R1Y3RzKTsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgcCA6IHByb2R1Y3RzKSB7CiAgICAgaWYgKCEoY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhwKSB8fCBjbVN5c3RlbVRvb2xzOjpGaWxlSXNTeW1saW5rKHApKSkgewogICAgICAgaWYgKHZlcmJvc2UpIHsKQEAgLTIxOTAsMTEgKzIzMDUsOCBAQAogICAvLyBHZXQgdGhlIHNldCBvZiBkZXBlbmRlbmNpZXMgYW5kIG91dHB1dHMuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZXBlbmRzOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3V0cHV0czsKLSAgY29uc3QgY2hhciogZGVwZW5kc1N0ciA9IG1mLkdldERlZmluaXRpb24oIkNNQUtFX01BS0VGSUxFX0RFUEVORFMiKTsKLSAgY29uc3QgY2hhciogb3V0cHV0c1N0ciA9IG1mLkdldERlZmluaXRpb24oIkNNQUtFX01BS0VGSUxFX09VVFBVVFMiKTsKLSAgaWYgKGRlcGVuZHNTdHIgJiYgb3V0cHV0c1N0cikgewotICAgIGNtRXhwYW5kTGlzdChkZXBlbmRzU3RyLCBkZXBlbmRzKTsKLSAgICBjbUV4cGFuZExpc3Qob3V0cHV0c1N0ciwgb3V0cHV0cyk7CisgIGlmIChtZi5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9NQUtFRklMRV9ERVBFTkRTIiwgZGVwZW5kcykpIHsKKyAgICBtZi5HZXREZWZFeHBhbmRMaXN0KCJDTUFLRV9NQUtFRklMRV9PVVRQVVRTIiwgb3V0cHV0cyk7CiAgIH0KICAgaWYgKGRlcGVuZHMuZW1wdHkoKSB8fCBvdXRwdXRzLmVtcHR5KCkpIHsKICAgICAvLyBOb3QgZW5vdWdoIGluZm9ybWF0aW9uIHdhcyBwcm92aWRlZCB0byBkbyB0aGUgdGVzdC4gIEp1c3QgcmVydW4uCkBAIC0yMjg3LDcgKzIzOTksNyBAQAogdm9pZCBjbWFrZTo6R2VuZXJhdGVHcmFwaFZpeihjb25zdCBzdGQ6OnN0cmluZyYgZmlsZU5hbWUpIGNvbnN0CiB7CiAjaWZuZGVmIENNQUtFX0JPT1RTVFJBUAotICBjbUdyYXBoVml6V3JpdGVyIGd2V3JpdGVyKHRoaXMtPkdldEdsb2JhbEdlbmVyYXRvcigpKTsKKyAgY21HcmFwaFZpeldyaXRlciBndldyaXRlcihmaWxlTmFtZSwgdGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCkpOwogCiAgIHN0ZDo6c3RyaW5nIHNldHRpbmdzRmlsZSA9CiAgICAgY21TdHJDYXQodGhpcy0+R2V0SG9tZU91dHB1dERpcmVjdG9yeSgpLCAiL0NNYWtlR3JhcGhWaXpPcHRpb25zLmNtYWtlIik7CkBAIC0yMjk1LDkgKzI0MDcsOCBAQAogICAgIGNtU3RyQ2F0KHRoaXMtPkdldEhvbWVEaXJlY3RvcnkoKSwgIi9DTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZSIpOwogCiAgIGd2V3JpdGVyLlJlYWRTZXR0aW5ncyhzZXR0aW5nc0ZpbGUsIGZhbGxiYWNrU2V0dGluZ3NGaWxlKTsKLSAgZ3ZXcml0ZXIuV3JpdGVQZXJUYXJnZXRGaWxlcyhmaWxlTmFtZSk7Ci0gIGd2V3JpdGVyLldyaXRlVGFyZ2V0RGVwZW5kZXJzRmlsZXMoZmlsZU5hbWUpOwotICBndldyaXRlci5Xcml0ZUdsb2JhbEZpbGUoZmlsZU5hbWUpOworCisgIGd2V3JpdGVyLldyaXRlKCk7CiAKICNlbmRpZgogfQpAQCAtMjMwNywxMyArMjQxOCwxMyBAQAogICB0aGlzLT5TdGF0ZS0+U2V0R2xvYmFsUHJvcGVydHkocHJvcCwgdmFsdWUpOwogfQogCi12b2lkIGNtYWtlOjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCit2b2lkIGNtYWtlOjpBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc1N0cmluZykKIHsKICAgdGhpcy0+U3RhdGUtPkFwcGVuZEdsb2JhbFByb3BlcnR5KHByb3AsIHZhbHVlLCBhc1N0cmluZyk7CiB9CiAKLWNvbnN0IGNoYXIqIGNtYWtlOjpHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCkKK2NtUHJvcCBjbWFrZTo6R2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApCiB7CiAgIHJldHVybiB0aGlzLT5TdGF0ZS0+R2V0R2xvYmFsUHJvcGVydHkocHJvcCk7CiB9CkBAIC0yMzY1LDcgKzI0NzYsNyBAQAogICBib29sIHdyaXRlVG9TdGRvdXQgPSB0cnVlOwogICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYXJnID0gYXJnc1tpXTsKLSAgICBpZiAoYXJnLmZpbmQoIi1HIiwgMCkgPT0gMCkgeworICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLUciKSkgewogICAgICAgc3RkOjpzdHJpbmcgdmFsdWUgPSBhcmcuc3Vic3RyKDIpOwogICAgICAgaWYgKHZhbHVlLmVtcHR5KCkpIHsKICAgICAgICAgKytpOwpAQCAtMjM3NiwxMiArMjQ4NywxMiBAQAogICAgICAgICB9CiAgICAgICAgIHZhbHVlID0gYXJnc1tpXTsKICAgICAgIH0KLSAgICAgIGNtR2xvYmFsR2VuZXJhdG9yKiBnZW4gPSB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodmFsdWUpOworICAgICAgYXV0byBnZW4gPSB0aGlzLT5DcmVhdGVHbG9iYWxHZW5lcmF0b3IodmFsdWUpOwogICAgICAgaWYgKCFnZW4pIHsKICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgbmFtZWQgZ2VuZXJhdG9yICIgKyB2YWx1ZSk7CiAgICAgICAgIHRoaXMtPlByaW50R2VuZXJhdG9yTGlzdCgpOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy0+U2V0R2xvYmFsR2VuZXJhdG9yKGdlbik7CisgICAgICAgIHRoaXMtPlNldEdsb2JhbEdlbmVyYXRvcihzdGQ6Om1vdmUoZ2VuKSk7CiAgICAgICB9CiAgICAgfQogICAgIC8vIG5vIG9wdGlvbiBhc3N1bWUgaXQgaXMgdGhlIG91dHB1dCBmaWxlCkBAIC0yNTU0LDEwICsyNjY1LDEwIEBACiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY21ha2U6OkdldERlYnVnQ29uZmlncygpCiB7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25maWdzOwotICBpZiAoY29uc3QgY2hhciogY29uZmlnX2xpc3QgPQorICBpZiAoY21Qcm9wIGNvbmZpZ19saXN0ID0KICAgICAgICAgdGhpcy0+U3RhdGUtPkdldEdsb2JhbFByb3BlcnR5KCJERUJVR19DT05GSUdVUkFUSU9OUyIpKSB7CiAgICAgLy8gRXhwYW5kIHRoZSBzcGVjaWZpZWQgbGlzdCBhbmQgY29udmVydCB0byB1cHBlci1jYXNlLgotICAgIGNtRXhwYW5kTGlzdChjb25maWdfbGlzdCwgY29uZmlncyk7CisgICAgY21FeHBhbmRMaXN0KCpjb25maWdfbGlzdCwgY29uZmlncyk7CiAgICAgc3RkOjp0cmFuc2Zvcm0oY29uZmlncy5iZWdpbigpLCBjb25maWdzLmVuZCgpLCBjb25maWdzLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6VXBwZXJDYXNlKTsKICAgfQpAQCAtMjU4Nyw0OCArMjY5OCw1NiBAQAogICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IGNvdWxkIG5vdCBsb2FkIGNhY2hlXG4iOwogICAgIHJldHVybiAxOwogICB9Ci0gIGNvbnN0IGNoYXIqIGNhY2hlZEdlbmVyYXRvciA9Ci0gICAgdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfR0VORVJBVE9SIik7CisgIGNtUHJvcCBjYWNoZWRHZW5lcmF0b3IgPSB0aGlzLT5TdGF0ZS0+R2V0Q2FjaGVFbnRyeVZhbHVlKCJDTUFLRV9HRU5FUkFUT1IiKTsKICAgaWYgKCFjYWNoZWRHZW5lcmF0b3IpIHsKICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBjb3VsZCBub3QgZmluZCBDTUFLRV9HRU5FUkFUT1IgaW4gQ2FjaGVcbiI7CiAgICAgcmV0dXJuIDE7CiAgIH0KLSAgY21HbG9iYWxHZW5lcmF0b3IqIGdlbiA9IHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihjYWNoZWRHZW5lcmF0b3IpOworICBhdXRvIGdlbiA9IHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcigqY2FjaGVkR2VuZXJhdG9yKTsKICAgaWYgKCFnZW4pIHsKLSAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBjb3VsZCBjcmVhdGUgQ01BS0VfR0VORVJBVE9SIFwiIiA8PCBjYWNoZWRHZW5lcmF0b3IKKyAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBjb3VsZCBjcmVhdGUgQ01BS0VfR0VORVJBVE9SIFwiIiA8PCAqY2FjaGVkR2VuZXJhdG9yCiAgICAgICAgICAgICAgIDw8ICJcIlxuIjsKICAgICByZXR1cm4gMTsKICAgfQotICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3IoZ2VuKTsKLSAgY29uc3QgY2hhciogY2FjaGVkR2VuZXJhdG9ySW5zdGFuY2UgPQorICB0aGlzLT5TZXRHbG9iYWxHZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbikpOworICBjbVByb3AgY2FjaGVkR2VuZXJhdG9ySW5zdGFuY2UgPQogICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRSIpOwogICBpZiAoY2FjaGVkR2VuZXJhdG9ySW5zdGFuY2UpIHsKLSAgICBjbU1ha2VmaWxlIG1mKGdlbiwgdGhpcy0+R2V0Q3VycmVudFNuYXBzaG90KCkpOwotICAgIGlmICghZ2VuLT5TZXRHZW5lcmF0b3JJbnN0YW5jZShjYWNoZWRHZW5lcmF0b3JJbnN0YW5jZSwgJm1mKSkgeworICAgIGNtTWFrZWZpbGUgbWYodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCksIHRoaXMtPkdldEN1cnJlbnRTbmFwc2hvdCgpKTsKKyAgICBpZiAoIXRoaXMtPkdsb2JhbEdlbmVyYXRvci0+U2V0R2VuZXJhdG9ySW5zdGFuY2UoKmNhY2hlZEdlbmVyYXRvckluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWYpKSB7CiAgICAgICByZXR1cm4gMTsKICAgICB9CiAgIH0KLSAgY29uc3QgY2hhciogY2FjaGVkR2VuZXJhdG9yUGxhdGZvcm0gPQorICBjbVByb3AgY2FjaGVkR2VuZXJhdG9yUGxhdGZvcm0gPQogICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9QTEFURk9STSIpOwogICBpZiAoY2FjaGVkR2VuZXJhdG9yUGxhdGZvcm0pIHsKLSAgICBjbU1ha2VmaWxlIG1mKGdlbiwgdGhpcy0+R2V0Q3VycmVudFNuYXBzaG90KCkpOwotICAgIGlmICghZ2VuLT5TZXRHZW5lcmF0b3JQbGF0Zm9ybShjYWNoZWRHZW5lcmF0b3JQbGF0Zm9ybSwgJm1mKSkgeworICAgIGNtTWFrZWZpbGUgbWYodGhpcy0+R2V0R2xvYmFsR2VuZXJhdG9yKCksIHRoaXMtPkdldEN1cnJlbnRTbmFwc2hvdCgpKTsKKyAgICBpZiAoIXRoaXMtPkdsb2JhbEdlbmVyYXRvci0+U2V0R2VuZXJhdG9yUGxhdGZvcm0oKmNhY2hlZEdlbmVyYXRvclBsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWYpKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgY21Qcm9wIGNhY2hlZEdlbmVyYXRvclRvb2xzZXQgPQorICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUl9UT09MU0VUIik7CisgIGlmIChjYWNoZWRHZW5lcmF0b3JUb29sc2V0KSB7CisgICAgY21NYWtlZmlsZSBtZih0aGlzLT5HZXRHbG9iYWxHZW5lcmF0b3IoKSwgdGhpcy0+R2V0Q3VycmVudFNuYXBzaG90KCkpOworICAgIGlmICghdGhpcy0+R2xvYmFsR2VuZXJhdG9yLT5TZXRHZW5lcmF0b3JUb29sc2V0KCpjYWNoZWRHZW5lcmF0b3JUb29sc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICZtZikpIHsKICAgICAgIHJldHVybiAxOwogICAgIH0KICAgfQogICBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgIHN0ZDo6c3RyaW5nIHByb2pOYW1lOwotICBjb25zdCBjaGFyKiBjYWNoZWRQcm9qZWN0TmFtZSA9CisgIGNtUHJvcCBjYWNoZWRQcm9qZWN0TmFtZSA9CiAgICAgdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfUFJPSkVDVF9OQU1FIik7CiAgIGlmICghY2FjaGVkUHJvamVjdE5hbWUpIHsKICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBjb3VsZCBub3QgZmluZCBDTUFLRV9QUk9KRUNUX05BTUUgaW4gQ2FjaGVcbiI7CiAgICAgcmV0dXJuIDE7CiAgIH0KLSAgcHJvak5hbWUgPSBjYWNoZWRQcm9qZWN0TmFtZTsKKyAgcHJvak5hbWUgPSAqY2FjaGVkUHJvamVjdE5hbWU7CiAKLSAgY29uc3QgY2hhciogY2FjaGVkVmVyYm9zZSA9Ci0gICAgdGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfVkVSQk9TRV9NQUtFRklMRSIpOwotICBpZiAoY21Jc09uKGNhY2hlZFZlcmJvc2UpKSB7CisgIGlmIChjbUlzT24odGhpcy0+U3RhdGUtPkdldENhY2hlRW50cnlWYWx1ZSgiQ01BS0VfVkVSQk9TRV9NQUtFRklMRSIpKSkgewogICAgIHZlcmJvc2UgPSB0cnVlOwogICB9CiAKQEAgLTI2ODcsMTAgKzI4MDYsMTUgQEAKICAgfQogI2VuZGlmCiAKLSAgZ2VuLT5QcmludEJ1aWxkQ29tbWFuZEFkdmljZShzdGQ6OmNlcnIsIGpvYnMpOwotICByZXR1cm4gZ2VuLT5CdWlsZChqb2JzLCAiIiwgZGlyLCBwcm9qTmFtZSwgdGFyZ2V0cywgb3V0cHV0LCAiIiwgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICBjbGVhbiwgZmFsc2UsIHZlcmJvc2UsIGNtRHVyYXRpb246Onplcm8oKSwKLSAgICAgICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6T1VUUFVUX1BBU1NUSFJPVUdILCBuYXRpdmVPcHRpb25zKTsKKyAgaWYgKCF0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlJlYWRDYWNoZUVudHJpZXNGb3JCdWlsZCgqdGhpcy0+U3RhdGUpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPlByaW50QnVpbGRDb21tYW5kQWR2aWNlKHN0ZDo6Y2Vyciwgam9icyk7CisgIHJldHVybiB0aGlzLT5HbG9iYWxHZW5lcmF0b3ItPkJ1aWxkKAorICAgIGpvYnMsICIiLCBkaXIsIHByb2pOYW1lLCB0YXJnZXRzLCBvdXRwdXQsICIiLCBjb25maWcsIGNsZWFuLCBmYWxzZSwKKyAgICB2ZXJib3NlLCBjbUR1cmF0aW9uOjp6ZXJvKCksIGNtU3lzdGVtVG9vbHM6Ok9VVFBVVF9QQVNTVEhST1VHSCwKKyAgICBuYXRpdmVPcHRpb25zKTsKIH0KIAogYm9vbCBjbWFrZTo6T3Blbihjb25zdCBzdGQ6OnN0cmluZyYgZGlyLCBib29sIGRyeVJ1bikKQEAgLTI3MDcsNDAgKzI4MzEsNDAgQEAKICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBjb3VsZCBub3QgbG9hZCBjYWNoZVxuIjsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgY29uc3QgY2hhciogZ2VuTmFtZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOworICBjbVByb3AgZ2VuTmFtZSA9IHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX0dFTkVSQVRPUiIpOwogICBpZiAoIWdlbk5hbWUpIHsKICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBjb3VsZCBub3QgZmluZCBDTUFLRV9HRU5FUkFUT1IgaW4gQ2FjaGVcbiI7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nKiBleHRyYUdlbk5hbWUgPQorICBjbVByb3AgZXh0cmFHZW5OYW1lID0KICAgICB0aGlzLT5TdGF0ZS0+R2V0SW5pdGlhbGl6ZWRDYWNoZVZhbHVlKCJDTUFLRV9FWFRSQV9HRU5FUkFUT1IiKTsKICAgc3RkOjpzdHJpbmcgZnVsbE5hbWUgPQogICAgIGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3I6OkNyZWF0ZUZ1bGxHZW5lcmF0b3JOYW1lKAotICAgICAgZ2VuTmFtZSwgZXh0cmFHZW5OYW1lID8gKmV4dHJhR2VuTmFtZSA6ICIiKTsKKyAgICAgICpnZW5OYW1lLCBleHRyYUdlbk5hbWUgPyAqZXh0cmFHZW5OYW1lIDogIiIpOwogCi0gIHN0ZDo6dW5pcXVlX3B0cjxjbUdsb2JhbEdlbmVyYXRvcj4gZ2VuKAotICAgIHRoaXMtPkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihmdWxsTmFtZSkpOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IGdlbiA9CisgICAgdGhpcy0+Q3JlYXRlR2xvYmFsR2VuZXJhdG9yKGZ1bGxOYW1lKTsKICAgaWYgKCFnZW4pIHsKICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yOiBjb3VsZCBjcmVhdGUgQ01BS0VfR0VORVJBVE9SIFwiIiA8PCBmdWxsTmFtZQogICAgICAgICAgICAgICA8PCAiXCJcbiI7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgY29uc3QgY2hhciogY2FjaGVkUHJvamVjdE5hbWUgPQorICBjbVByb3AgY2FjaGVkUHJvamVjdE5hbWUgPQogICAgIHRoaXMtPlN0YXRlLT5HZXRDYWNoZUVudHJ5VmFsdWUoIkNNQUtFX1BST0pFQ1RfTkFNRSIpOwogICBpZiAoIWNhY2hlZFByb2plY3ROYW1lKSB7CiAgICAgc3RkOjpjZXJyIDw8ICJFcnJvcjogY291bGQgbm90IGZpbmQgQ01BS0VfUFJPSkVDVF9OQU1FIGluIENhY2hlXG4iOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIHJldHVybiBnZW4tPk9wZW4oZGlyLCBjYWNoZWRQcm9qZWN0TmFtZSwgZHJ5UnVuKTsKKyAgcmV0dXJuIGdlbi0+T3BlbihkaXIsICpjYWNoZWRQcm9qZWN0TmFtZSwgZHJ5UnVuKTsKIH0KIAogdm9pZCBjbWFrZTo6V2F0Y2hVbnVzZWRDbGkoY29uc3Qgc3RkOjpzdHJpbmcmIHZhcikKIHsKICNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCiAgIHRoaXMtPlZhcmlhYmxlV2F0Y2gtPkFkZFdhdGNoKHZhciwgY21XYXJuVW51c2VkQ2xpV2FybmluZywgdGhpcyk7Ci0gIGlmICghY21Db250YWlucyh0aGlzLT5Vc2VkQ2xpVmFyaWFibGVzLCB2YXIpKSB7CisgIGlmICghY206OmNvbnRhaW5zKHRoaXMtPlVzZWRDbGlWYXJpYWJsZXMsIHZhcikpIHsKICAgICB0aGlzLT5Vc2VkQ2xpVmFyaWFibGVzW3Zhcl0gPSBmYWxzZTsKICAgfQogI2VuZGlmCkBAIC0yODY3LDMgKzI5OTEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCBmdW5jdGlvbnMuIiwKICAgICAgICAgICAgICAgICAgICAgICBjbVN0YXRlRW51bXM6OklOVEVSTkFMKTsKIH0KKworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKK2NtTWFrZWZpbGVQcm9maWxpbmdEYXRhJiBjbWFrZTo6R2V0UHJvZmlsaW5nT3V0cHV0KCkKK3sKKyAgcmV0dXJuICoodGhpcy0+UHJvZmlsaW5nT3V0cHV0KTsKK30KKworYm9vbCBjbWFrZTo6SXNQcm9maWxpbmdFbmFibGVkKCkgY29uc3QKK3sKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHRoaXMtPlByb2ZpbGluZ091dHB1dCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS5oIGIvU291cmNlL2NtYWtlLmgKaW5kZXggNjg3YzEwNS4uMGM0ZjQyOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlLmgKKysrIGIvU291cmNlL2NtYWtlLmgKQEAgLTUsMjQgKzUsMzAgQEAKIAogI2luY2x1ZGUgImNtQ29uZmlndXJlLmgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCiAKKyNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RhY2s+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKwogI2luY2x1ZGUgImNtR2VuZXJhdGVkRmlsZVN0cmVhbS5oIgogI2luY2x1ZGUgImNtSW5zdGFsbGVkRmlsZS5oIgogI2luY2x1ZGUgImNtTGlzdEZpbGVDYWNoZS5oIgogI2luY2x1ZGUgImNtTWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVTbmFwc2hvdC5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQotIyAgaW5jbHVkZSAiY21fanNvbmNwcF92YWx1ZS5oIgorIyAgaW5jbHVkZSA8Y20zcC9qc29uL3ZhbHVlLmg+CiAjZW5kaWYKIAogY2xhc3MgY21FeHRlcm5hbE1ha2VmaWxlUHJvamVjdEdlbmVyYXRvckZhY3Rvcnk7CkBAIC0zMSw2ICszNyw5IEBACiBjbGFzcyBjbUdsb2JhbEdlbmVyYXRvcjsKIGNsYXNzIGNtR2xvYmFsR2VuZXJhdG9yRmFjdG9yeTsKIGNsYXNzIGNtTWFrZWZpbGU7CisjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQorY2xhc3MgY21NYWtlZmlsZVByb2ZpbGluZ0RhdGE7CisjZW5kaWYKIGNsYXNzIGNtTWVzc2VuZ2VyOwogY2xhc3MgY21WYXJpYWJsZVdhdGNoOwogc3RydWN0IGNtRG9jdW1lbnRhdGlvbkVudHJ5OwpAQCAtMTEwLDYgKzExOSwxNCBAQAogICAgIExPR19UUkFDRQogICB9OwogCisgIC8qKiBcYnJpZWYgRGVmaW5lIHN1cHBvcnRlZCB0cmFjZSBmb3JtYXRzICoqLworICBlbnVtIFRyYWNlRm9ybWF0CisgIHsKKyAgICBUUkFDRV9VTkRFRklORUQsCisgICAgVFJBQ0VfSFVNQU4sCisgICAgVFJBQ0VfSlNPTl9WMSwKKyAgfTsKKwogICBzdHJ1Y3QgR2VuZXJhdG9ySW5mbwogICB7CiAgICAgc3RkOjpzdHJpbmcgbmFtZTsKQEAgLTEyNCwxMyArMTQxLDEzIEBACiAKICAgc3RydWN0IEZpbGVFeHRlbnNpb25zCiAgIHsKLSAgICBib29sIFRlc3Qoc3RkOjpzdHJpbmcgY29uc3QmIGV4dCkgY29uc3QKKyAgICBib29sIFRlc3QoY206OnN0cmluZ192aWV3IGV4dCkgY29uc3QKICAgICB7CiAgICAgICByZXR1cm4gKHRoaXMtPnVub3JkZXJlZC5maW5kKGV4dCkgIT0gdGhpcy0+dW5vcmRlcmVkLmVuZCgpKTsKICAgICB9CiAKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3JkZXJlZDsKLSAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+IHVub3JkZXJlZDsKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y206OnN0cmluZ192aWV3PiB1bm9yZGVyZWQ7CiAgIH07CiAKICAgdXNpbmcgSW5zdGFsbGVkRmlsZXNNYXAgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY21JbnN0YWxsZWRGaWxlPjsKQEAgLTIwMiwyMSArMjE5LDI1IEBACiAgIHZvaWQgUHJlTG9hZENNYWtlRmlsZXMoKTsKIAogICAvLyEgQ3JlYXRlIGEgR2xvYmFsR2VuZXJhdG9yCi0gIGNtR2xvYmFsR2VuZXJhdG9yKiBDcmVhdGVHbG9iYWxHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IENyZWF0ZUdsb2JhbEdlbmVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CiAKICAgLy8hIFJldHVybiB0aGUgZ2xvYmFsIGdlbmVyYXRvciBhc3NpZ25lZCB0byB0aGlzIGluc3RhbmNlIG9mIGNtYWtlCi0gIGNtR2xvYmFsR2VuZXJhdG9yKiBHZXRHbG9iYWxHZW5lcmF0b3IoKSB7IHJldHVybiB0aGlzLT5HbG9iYWxHZW5lcmF0b3I7IH0KKyAgY21HbG9iYWxHZW5lcmF0b3IqIEdldEdsb2JhbEdlbmVyYXRvcigpCisgIHsKKyAgICByZXR1cm4gdGhpcy0+R2xvYmFsR2VuZXJhdG9yLmdldCgpOworICB9CiAgIC8vISBSZXR1cm4gdGhlIGdsb2JhbCBnZW5lcmF0b3IgYXNzaWduZWQgdG8gdGhpcyBpbnN0YW5jZSBvZiBjbWFrZSwgY29uc3QKICAgY29uc3QgY21HbG9iYWxHZW5lcmF0b3IqIEdldEdsb2JhbEdlbmVyYXRvcigpIGNvbnN0CiAgIHsKLSAgICByZXR1cm4gdGhpcy0+R2xvYmFsR2VuZXJhdG9yOworICAgIHJldHVybiB0aGlzLT5HbG9iYWxHZW5lcmF0b3IuZ2V0KCk7CiAgIH0KIAogICAvLyEgUmV0dXJuIHRoZSBmdWxsIHBhdGggdG8gd2hlcmUgdGhlIENNYWtlQ2FjaGUudHh0IGZpbGUgc2hvdWxkIGJlLgogICBzdGF0aWMgc3RkOjpzdHJpbmcgRmluZENhY2hlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgYmluYXJ5RGlyKTsKIAogICAvLyEgUmV0dXJuIHRoZSBnbG9iYWwgZ2VuZXJhdG9yIGFzc2lnbmVkIHRvIHRoaXMgaW5zdGFuY2Ugb2YgY21ha2UKLSAgdm9pZCBTZXRHbG9iYWxHZW5lcmF0b3IoY21HbG9iYWxHZW5lcmF0b3IqKTsKKyAgdm9pZCBTZXRHbG9iYWxHZW5lcmF0b3Ioc3RkOjp1bmlxdWVfcHRyPGNtR2xvYmFsR2VuZXJhdG9yPik7CiAKICAgLy8hIEdldCB0aGUgbmFtZXMgb2YgdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCBnZW5lcmF0b3JzCiAgIHZvaWQgR2V0UmVnaXN0ZXJlZEdlbmVyYXRvcnMoc3RkOjp2ZWN0b3I8R2VuZXJhdG9ySW5mbz4mIGdlbmVyYXRvcnMsCkBAIC0yNDMsNDYgKzI2NCwzNSBAQAogICAgIHRoaXMtPkdlbmVyYXRvclRvb2xzZXRTZXQgPSB0cnVlOwogICB9CiAKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBHZXRTb3VyY2VFeHRlbnNpb25zKCkgY29uc3QKKyAgYm9vbCBJc0FLbm93blNvdXJjZUV4dGVuc2lvbihjbTo6c3RyaW5nX3ZpZXcgZXh0KSBjb25zdAogICB7Ci0gICAgcmV0dXJuIHRoaXMtPlNvdXJjZUZpbGVFeHRlbnNpb25zLm9yZGVyZWQ7CisgICAgcmV0dXJuIHRoaXMtPkNMaWtlU291cmNlRmlsZUV4dGVuc2lvbnMuVGVzdChleHQpIHx8CisgICAgICB0aGlzLT5DdWRhRmlsZUV4dGVuc2lvbnMuVGVzdChleHQpIHx8CisgICAgICB0aGlzLT5Gb3J0cmFuRmlsZUV4dGVuc2lvbnMuVGVzdChleHQpOwogICB9CiAKLSAgYm9vbCBJc1NvdXJjZUV4dGVuc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZXh0KSBjb25zdAorICBib29sIElzQUNMaWtlU291cmNlRXh0ZW5zaW9uKGNtOjpzdHJpbmdfdmlldyBleHQpIGNvbnN0CiAgIHsKLSAgICByZXR1cm4gdGhpcy0+U291cmNlRmlsZUV4dGVuc2lvbnMuVGVzdChleHQpOworICAgIHJldHVybiB0aGlzLT5DTGlrZVNvdXJjZUZpbGVFeHRlbnNpb25zLlRlc3QoZXh0KTsKICAgfQogCisgIGJvb2wgSXNBS25vd25FeHRlbnNpb24oY206OnN0cmluZ192aWV3IGV4dCkgY29uc3QKKyAgeworICAgIHJldHVybiB0aGlzLT5Jc0FLbm93blNvdXJjZUV4dGVuc2lvbihleHQpIHx8IHRoaXMtPklzQUhlYWRlckV4dGVuc2lvbihleHQpOworICB9CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldEFsbEV4dGVuc2lvbnMoKSBjb25zdDsKKwogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIEdldEhlYWRlckV4dGVuc2lvbnMoKSBjb25zdAogICB7CiAgICAgcmV0dXJuIHRoaXMtPkhlYWRlckZpbGVFeHRlbnNpb25zLm9yZGVyZWQ7CiAgIH0KIAotICBib29sIElzSGVhZGVyRXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHQpIGNvbnN0CisgIGJvb2wgSXNBSGVhZGVyRXh0ZW5zaW9uKGNtOjpzdHJpbmdfdmlldyBleHQpIGNvbnN0CiAgIHsKICAgICByZXR1cm4gdGhpcy0+SGVhZGVyRmlsZUV4dGVuc2lvbnMuVGVzdChleHQpOwogICB9CiAKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBHZXRDdWRhRXh0ZW5zaW9ucygpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gdGhpcy0+Q3VkYUZpbGVFeHRlbnNpb25zLm9yZGVyZWQ7Ci0gIH0KLQotICBib29sIElzQ3VkYUV4dGVuc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgZXh0KSBjb25zdAotICB7Ci0gICAgcmV0dXJuIHRoaXMtPkN1ZGFGaWxlRXh0ZW5zaW9ucy5UZXN0KGV4dCk7Ci0gIH0KLQotICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIEdldEZvcnRyYW5FeHRlbnNpb25zKCkgY29uc3QKLSAgewotICAgIHJldHVybiB0aGlzLT5Gb3J0cmFuRmlsZUV4dGVuc2lvbnMub3JkZXJlZDsKLSAgfQotCi0gIGJvb2wgSXNGb3J0cmFuRXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHQpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gdGhpcy0+Rm9ydHJhbkZpbGVFeHRlbnNpb25zLlRlc3QoZXh0KTsKLSAgfQotCiAgIC8vIFN0cmlwcyB0aGUgZXh0ZW5zaW9uIChpZiBwcmVzZW50IGFuZCBrbm93bikgZnJvbSBhIGZpbGVuYW1lCiAgIHN0ZDo6c3RyaW5nIFN0cmlwRXh0ZW5zaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlKSBjb25zdDsKIApAQCAtMzQ0LDkgKzM1NCw5IEBACiAKICAgLy8hIFNldC9HZXQgYSBwcm9wZXJ0eSBvZiB0aGlzIHRhcmdldCBmaWxlCiAgIHZvaWQgU2V0UHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IGNoYXIqIHZhbHVlKTsKLSAgdm9pZCBBcHBlbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCwgY29uc3QgY2hhciogdmFsdWUsCisgIHZvaWQgQXBwZW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIHByb3AsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICBib29sIGFzU3RyaW5nID0gZmFsc2UpOwotICBjb25zdCBjaGFyKiBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCk7CisgIGNtUHJvcCBHZXRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgcHJvcCk7CiAgIGJvb2wgR2V0UHJvcGVydHlBc0Jvb2woY29uc3Qgc3RkOjpzdHJpbmcmIHByb3ApOwogCiAgIC8vISBHZXQgb3IgY3JlYXRlIGFuIGNtSW5zdGFsbGVkRmlsZSBpbnN0YW5jZSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdApAQCAtMzgwLDIwICszOTAsNTIgQEAKICAgICovCiAgIGNtRmlsZVRpbWVDYWNoZSogR2V0RmlsZVRpbWVDYWNoZSgpIHsgcmV0dXJuIHRoaXMtPkZpbGVUaW1lQ2FjaGUuZ2V0KCk7IH0KIAorICBib29sIFdhc0xvZ0xldmVsU2V0VmlhQ0xJKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+TG9nTGV2ZWxXYXNTZXRWaWFDTEk7IH0KKwogICAvLyEgR2V0IHRoZSBzZWxlY3RlZCBsb2cgbGV2ZWwgZm9yIGBtZXNzYWdlKClgIGNvbW1hbmRzIGR1cmluZyB0aGUgY21ha2UgcnVuLgogICBMb2dMZXZlbCBHZXRMb2dMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPk1lc3NhZ2VMb2dMZXZlbDsgfQogICB2b2lkIFNldExvZ0xldmVsKExvZ0xldmVsIGxldmVsKSB7IHRoaXMtPk1lc3NhZ2VMb2dMZXZlbCA9IGxldmVsOyB9CiAgIHN0YXRpYyBMb2dMZXZlbCBTdHJpbmdUb0xvZ0xldmVsKGNvbnN0IHN0ZDo6c3RyaW5nJiBsZXZlbFN0cik7CisgIHN0YXRpYyBUcmFjZUZvcm1hdCBTdHJpbmdUb1RyYWNlRm9ybWF0KGNvbnN0IHN0ZDo6c3RyaW5nJiBsZXZlbFN0cik7CisKKyAgYm9vbCBIYXNDaGVja0luUHJvZ3Jlc3MoKSBjb25zdAorICB7CisgICAgcmV0dXJuICF0aGlzLT5DaGVja0luUHJvZ3Jlc3NNZXNzYWdlcy5lbXB0eSgpOworICB9CisgIHN0ZDo6c2l6ZV90IEdldENoZWNrSW5Qcm9ncmVzc1NpemUoKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPkNoZWNrSW5Qcm9ncmVzc01lc3NhZ2VzLnNpemUoKTsKKyAgfQorICBzdGQ6OnN0cmluZyBHZXRUb3BDaGVja0luUHJvZ3Jlc3NNZXNzYWdlKCkKKyAgeworICAgIGF1dG8gbWVzc2FnZSA9IHRoaXMtPkNoZWNrSW5Qcm9ncmVzc01lc3NhZ2VzLnRvcCgpOworICAgIHRoaXMtPkNoZWNrSW5Qcm9ncmVzc01lc3NhZ2VzLnBvcCgpOworICAgIHJldHVybiBtZXNzYWdlOworICB9CisgIHZvaWQgUHVzaENoZWNrSW5Qcm9ncmVzc01lc3NhZ2Uoc3RkOjpzdHJpbmcgbWVzc2FnZSkKKyAgeworICAgIHRoaXMtPkNoZWNrSW5Qcm9ncmVzc01lc3NhZ2VzLmVtcGxhY2Uoc3RkOjptb3ZlKG1lc3NhZ2UpKTsKKyAgfQorCisgIC8vISBTaG91bGQgYG1lc3NhZ2VgIGNvbW1hbmQgZGlzcGxheSBjb250ZXh0LgorICBib29sIEdldFNob3dMb2dDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+TG9nQ29udGV4dDsgfQorICB2b2lkIFNldFNob3dMb2dDb250ZXh0KGJvb2wgYikgeyB0aGlzLT5Mb2dDb250ZXh0ID0gYjsgfQogCiAgIC8vISBEbyB3ZSB3YW50IGRlYnVnIG91dHB1dCBkdXJpbmcgdGhlIGNtYWtlIHJ1bi4KICAgYm9vbCBHZXREZWJ1Z091dHB1dCgpIHsgcmV0dXJuIHRoaXMtPkRlYnVnT3V0cHV0OyB9CiAgIHZvaWQgU2V0RGVidWdPdXRwdXRPbihib29sIGIpIHsgdGhpcy0+RGVidWdPdXRwdXQgPSBiOyB9CiAKKyAgLy8hIERvIHdlIHdhbnQgZGVidWcgb3V0cHV0IGZyb20gdGhlIGZpbmQgY29tbWFuZHMgZHVyaW5nIHRoZSBjbWFrZSBydW4uCisgIGJvb2wgR2V0RGVidWdGaW5kT3V0cHV0KCkgeyByZXR1cm4gdGhpcy0+RGVidWdGaW5kT3V0cHV0OyB9CisgIHZvaWQgU2V0RGVidWdGaW5kT3V0cHV0T24oYm9vbCBiKSB7IHRoaXMtPkRlYnVnRmluZE91dHB1dCA9IGI7IH0KKwogICAvLyEgRG8gd2Ugd2FudCB0cmFjZSBvdXRwdXQgZHVyaW5nIHRoZSBjbWFrZSBydW4uCi0gIGJvb2wgR2V0VHJhY2UoKSB7IHJldHVybiB0aGlzLT5UcmFjZTsgfQorICBib29sIEdldFRyYWNlKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VHJhY2U7IH0KICAgdm9pZCBTZXRUcmFjZShib29sIGIpIHsgdGhpcy0+VHJhY2UgPSBiOyB9Ci0gIGJvb2wgR2V0VHJhY2VFeHBhbmQoKSB7IHJldHVybiB0aGlzLT5UcmFjZUV4cGFuZDsgfQorICBib29sIEdldFRyYWNlRXhwYW5kKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VHJhY2VFeHBhbmQ7IH0KICAgdm9pZCBTZXRUcmFjZUV4cGFuZChib29sIGIpIHsgdGhpcy0+VHJhY2VFeHBhbmQgPSBiOyB9CisgIFRyYWNlRm9ybWF0IEdldFRyYWNlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+VHJhY2VGb3JtYXRWYXI7IH0KKyAgdm9pZCBTZXRUcmFjZUZvcm1hdChUcmFjZUZvcm1hdCBmKSB7IHRoaXMtPlRyYWNlRm9ybWF0VmFyID0gZjsgfQogICB2b2lkIEFkZFRyYWNlU291cmNlKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlKQogICB7CiAgICAgdGhpcy0+VHJhY2VPbmx5VGhpc1NvdXJjZXMucHVzaF9iYWNrKGZpbGUpOwpAQCAtNDA0LDExICs0NDYsMTAgQEAKICAgfQogICBjbUdlbmVyYXRlZEZpbGVTdHJlYW0mIEdldFRyYWNlRmlsZSgpIHsgcmV0dXJuIHRoaXMtPlRyYWNlRmlsZTsgfQogICB2b2lkIFNldFRyYWNlRmlsZShzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSk7CisgIHZvaWQgUHJpbnRUcmFjZUZvcm1hdFZlcnNpb24oKTsKIAogICBib29sIEdldFdhcm5VbmluaXRpYWxpemVkKCkgeyByZXR1cm4gdGhpcy0+V2FyblVuaW5pdGlhbGl6ZWQ7IH0KICAgdm9pZCBTZXRXYXJuVW5pbml0aWFsaXplZChib29sIGIpIHsgdGhpcy0+V2FyblVuaW5pdGlhbGl6ZWQgPSBiOyB9Ci0gIGJvb2wgR2V0V2FyblVudXNlZCgpIHsgcmV0dXJuIHRoaXMtPldhcm5VbnVzZWQ7IH0KLSAgdm9pZCBTZXRXYXJuVW51c2VkKGJvb2wgYikgeyB0aGlzLT5XYXJuVW51c2VkID0gYjsgfQogICBib29sIEdldFdhcm5VbnVzZWRDbGkoKSB7IHJldHVybiB0aGlzLT5XYXJuVW51c2VkQ2xpOyB9CiAgIHZvaWQgU2V0V2FyblVudXNlZENsaShib29sIGIpIHsgdGhpcy0+V2FyblVudXNlZENsaSA9IGI7IH0KICAgYm9vbCBHZXRDaGVja1N5c3RlbVZhcnMoKSB7IHJldHVybiB0aGlzLT5DaGVja1N5c3RlbVZhcnM7IH0KQEAgLTQ5OSwxMSArNTQwLDE5IEBACiAgIH0KICAgY21TdGF0ZVNuYXBzaG90IEdldEN1cnJlbnRTbmFwc2hvdCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPkN1cnJlbnRTbmFwc2hvdDsgfQogCisgIGJvb2wgR2V0UmVnZW5lcmF0ZUR1cmluZ0J1aWxkKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+UmVnZW5lcmF0ZUR1cmluZ0J1aWxkOyB9CisKKyNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCisgIGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhJiBHZXRQcm9maWxpbmdPdXRwdXQoKTsKKyAgYm9vbCBJc1Byb2ZpbGluZ0VuYWJsZWQoKSBjb25zdDsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgIHZvaWQgUnVuQ2hlY2tGb3JVbnVzZWRWYXJpYWJsZXMoKTsKICAgaW50IEhhbmRsZURlbGV0ZUNhY2hlVmFyaWFibGVzKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YXIpOwogCi0gIHVzaW5nIFJlZ2lzdGVyZWRHZW5lcmF0b3JzVmVjdG9yID0gc3RkOjp2ZWN0b3I8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5Kj47CisgIHVzaW5nIFJlZ2lzdGVyZWRHZW5lcmF0b3JzVmVjdG9yID0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3JGYWN0b3J5Pj47CiAgIFJlZ2lzdGVyZWRHZW5lcmF0b3JzVmVjdG9yIEdlbmVyYXRvcnM7CiAgIHVzaW5nIFJlZ2lzdGVyZWRFeHRyYUdlbmVyYXRvcnNWZWN0b3IgPQogICAgIHN0ZDo6dmVjdG9yPGNtRXh0ZXJuYWxNYWtlZmlsZVByb2plY3RHZW5lcmF0b3JGYWN0b3J5Kj47CkBAIC01MTMsNyArNTYyLDYgQEAKICAgdm9pZCBBZGREZWZhdWx0R2VuZXJhdG9ycygpOwogICB2b2lkIEFkZERlZmF1bHRFeHRyYUdlbmVyYXRvcnMoKTsKIAotICBjbUdsb2JhbEdlbmVyYXRvciogR2xvYmFsR2VuZXJhdG9yID0gbnVsbHB0cjsKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIERpYWdMZXZlbD4gRGlhZ0xldmVsczsKICAgc3RkOjpzdHJpbmcgR2VuZXJhdG9ySW5zdGFuY2U7CiAgIHN0ZDo6c3RyaW5nIEdlbmVyYXRvclBsYXRmb3JtOwpAQCAtNTQ5LDExICs1OTcsMTIgQEAKICAgUHJvZ3Jlc3NDYWxsYmFja1R5cGUgUHJvZ3Jlc3NDYWxsYmFjazsKICAgV29ya2luZ01vZGUgQ3VycmVudFdvcmtpbmdNb2RlID0gTk9STUFMX01PREU7CiAgIGJvb2wgRGVidWdPdXRwdXQgPSBmYWxzZTsKKyAgYm9vbCBEZWJ1Z0ZpbmRPdXRwdXQgPSBmYWxzZTsKICAgYm9vbCBUcmFjZSA9IGZhbHNlOwogICBib29sIFRyYWNlRXhwYW5kID0gZmFsc2U7CisgIFRyYWNlRm9ybWF0IFRyYWNlRm9ybWF0VmFyID0gVFJBQ0VfSFVNQU47CiAgIGNtR2VuZXJhdGVkRmlsZVN0cmVhbSBUcmFjZUZpbGU7CiAgIGJvb2wgV2FyblVuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgYm9vbCBXYXJuVW51c2VkID0gZmFsc2U7CiAgIGJvb2wgV2FyblVudXNlZENsaSA9IHRydWU7CiAgIGJvb2wgQ2hlY2tTeXN0ZW1WYXJzID0gZmFsc2U7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBib29sPiBVc2VkQ2xpVmFyaWFibGVzOwpAQCAtNTY1LDEyICs2MTQsMTMgQEAKICAgc3RkOjpzdHJpbmcgQ2hlY2tTdGFtcExpc3Q7CiAgIHN0ZDo6c3RyaW5nIFZTU29sdXRpb25GaWxlOwogICBzdGQ6OnN0cmluZyBFbnZpcm9ubWVudEdlbmVyYXRvcjsKLSAgRmlsZUV4dGVuc2lvbnMgU291cmNlRmlsZUV4dGVuc2lvbnM7CisgIEZpbGVFeHRlbnNpb25zIENMaWtlU291cmNlRmlsZUV4dGVuc2lvbnM7CiAgIEZpbGVFeHRlbnNpb25zIEhlYWRlckZpbGVFeHRlbnNpb25zOwogICBGaWxlRXh0ZW5zaW9ucyBDdWRhRmlsZUV4dGVuc2lvbnM7CiAgIEZpbGVFeHRlbnNpb25zIEZvcnRyYW5GaWxlRXh0ZW5zaW9uczsKICAgYm9vbCBDbGVhckJ1aWxkU3lzdGVtID0gZmFsc2U7CiAgIGJvb2wgRGVidWdUcnlDb21waWxlID0gZmFsc2U7CisgIGJvb2wgUmVnZW5lcmF0ZUR1cmluZ0J1aWxkID0gZmFsc2U7CiAgIHN0ZDo6dW5pcXVlX3B0cjxjbUZpbGVUaW1lQ2FjaGU+IEZpbGVUaW1lQ2FjaGU7CiAgIHN0ZDo6c3RyaW5nIEdyYXBoVml6RmlsZTsKICAgSW5zdGFsbGVkRmlsZXNNYXAgSW5zdGFsbGVkRmlsZXM7CkBAIC01ODcsNiArNjM3LDEyIEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBUcmFjZU9ubHlUaGlzU291cmNlczsKIAogICBMb2dMZXZlbCBNZXNzYWdlTG9nTGV2ZWwgPSBMb2dMZXZlbDo6TE9HX1NUQVRVUzsKKyAgYm9vbCBMb2dMZXZlbFdhc1NldFZpYUNMSSA9IGZhbHNlOworICBib29sIExvZ0NvbnRleHQgPSBmYWxzZTsKKworICBzdGQ6OnN0YWNrPHN0ZDo6c3RyaW5nPiBDaGVja0luUHJvZ3Jlc3NNZXNzYWdlczsKKworICBzdGQ6OnVuaXF1ZV9wdHI8Y21HbG9iYWxHZW5lcmF0b3I+IEdsb2JhbEdlbmVyYXRvcjsKIAogICB2b2lkIFVwZGF0ZUNvbnZlcnNpb25QYXRoVGFibGUoKTsKIApAQCAtNTk4LDYgKzY1NCwxMCBAQAogCiAgIHZvaWQgQXBwZW5kR2xvYmFsR2VuZXJhdG9yc0RvY3VtZW50YXRpb24oc3RkOjp2ZWN0b3I8Y21Eb2N1bWVudGF0aW9uRW50cnk+Jik7CiAgIHZvaWQgQXBwZW5kRXh0cmFHZW5lcmF0b3JzRG9jdW1lbnRhdGlvbihzdGQ6OnZlY3RvcjxjbURvY3VtZW50YXRpb25FbnRyeT4mKTsKKworI2lmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyAgc3RkOjp1bmlxdWVfcHRyPGNtTWFrZWZpbGVQcm9maWxpbmdEYXRhPiBQcm9maWxpbmdPdXRwdXQ7CisjZW5kaWYKIH07CiAKICNkZWZpbmUgQ01BS0VfU1RBTkRBUkRfT1BUSU9OU19UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTcxNCw0ICs3NzQsMTEgQEAKICAgRk9SX0VBQ0hfQ1hYMTFfRkVBVFVSRShGKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRk9SX0VBQ0hfQ1hYMTRfRkVBVFVSRShGKQogCisjZGVmaW5lIEZPUl9FQUNIX0NVREFfRkVBVFVSRShGKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEYoY3VkYV9zdGRfMjApCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlbWFpbi5jeHggYi9Tb3VyY2UvY21ha2VtYWluLmN4eAppbmRleCA2ZDNlNmVlLi40NjAwZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2VtYWluLmN4eAorKysgYi9Tb3VyY2UvY21ha2VtYWluLmN4eApAQCAtMSwxMCArMSwyNiBAQAogLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSAiY21Db25maWd1cmUuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNjdHlwZT4KKyNpbmNsdWRlIDxjbGltaXRzPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCisjaW5jbHVkZSA8Y20zcC91di5oPgorCiAjaW5jbHVkZSAiY21Eb2N1bWVudGF0aW9uRW50cnkuaCIgLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlICJjbUdsb2JhbEdlbmVyYXRvci5oIgogI2luY2x1ZGUgImNtTWFrZWZpbGUuaCIKKyNpbmNsdWRlICJjbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiY21TdGF0ZS5oIgogI2luY2x1ZGUgImNtU3RhdGVUeXBlcy5oIgogI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgpAQCAtMTgsMjAgKzM0LDEwIEBACiAjZW5kaWYKIAogI2luY2x1ZGUgImNtc3lzL0VuY29kaW5nLmh4eCIKLQotI2luY2x1ZGUgImNtX3V2LmgiCiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKICMgIGluY2x1ZGUgImNtc3lzL0NvbnNvbGVCdWYuaHh4IgogI2VuZGlmCiAKLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPGNjdHlwZT4KLSNpbmNsdWRlIDxjbGltaXRzPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQogbmFtZXNwYWNlIHsKICNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCiBjb25zdCBjaGFyKiBjbURvY3VtZW50YXRpb25OYW1lW11bMl0gPSB7CkBAIC02NSw3ICs3MSw3IEBACiAgIHsgIi0tb3BlbiA8ZGlyPiIsICJPcGVuIGdlbmVyYXRlZCBwcm9qZWN0IGluIHRoZSBhc3NvY2lhdGVkIGFwcGxpY2F0aW9uLiIgfSwKICAgeyAiLU4iLCAiVmlldyBtb2RlIG9ubHkuIiB9LAogICB7ICItUCA8ZmlsZT4iLCAiUHJvY2VzcyBzY3JpcHQgbW9kZS4iIH0sCi0gIHsgIi0tZmluZC1wYWNrYWdlIiwgIlJ1biBpbiBwa2ctY29uZmlnIGxpa2UgbW9kZS4iIH0sCisgIHsgIi0tZmluZC1wYWNrYWdlIiwgIkxlZ2FjeSBwa2ctY29uZmlnIGxpa2UgbW9kZS4gIERvIG5vdCB1c2UuIiB9LAogICB7ICItLWdyYXBodml6PVtmaWxlXSIsCiAgICAgIkdlbmVyYXRlIGdyYXBodml6IG9mIGRlcGVuZGVuY2llcywgc2VlICIKICAgICAiQ01ha2VHcmFwaFZpek9wdGlvbnMuY21ha2UgZm9yIG1vcmUuIiB9LApAQCAtNzMsMjIgKzc5LDMyIEBACiAgIHsgIi0tbG9nLWxldmVsPTxFUlJPUnxXQVJOSU5HfE5PVElDRXxTVEFUVVN8VkVSQk9TRXxERUJVR3xUUkFDRT4iLAogICAgICJTZXQgdGhlIHZlcmJvc2l0eSBvZiBtZXNzYWdlcyBmcm9tIENNYWtlIGZpbGVzLiAiCiAgICAgIi0tbG9nbGV2ZWwgaXMgYWxzbyBhY2NlcHRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zLiIgfSwKKyAgeyAiLS1sb2ctY29udGV4dCIsICJQcmVwZW5kIGxvZyBtZXNzYWdlcyB3aXRoIGNvbnRleHQsIGlmIGdpdmVuIiB9LAogICB7ICItLWRlYnVnLXRyeWNvbXBpbGUiLAogICAgICJEbyBub3QgZGVsZXRlIHRoZSB0cnlfY29tcGlsZSBidWlsZCB0cmVlLiBPbmx5ICIKICAgICAidXNlZnVsIG9uIG9uZSB0cnlfY29tcGlsZSBhdCBhIHRpbWUuIiB9LAogICB7ICItLWRlYnVnLW91dHB1dCIsICJQdXQgY21ha2UgaW4gYSBkZWJ1ZyBtb2RlLiIgfSwKKyAgeyAiLS1kZWJ1Zy1maW5kIiwgIlB1dCBjbWFrZSBmaW5kIGluIGEgZGVidWcgbW9kZS4iIH0sCiAgIHsgIi0tdHJhY2UiLCAiUHV0IGNtYWtlIGluIHRyYWNlIG1vZGUuIiB9LAogICB7ICItLXRyYWNlLWV4cGFuZCIsICJQdXQgY21ha2UgaW4gdHJhY2UgbW9kZSB3aXRoIHZhcmlhYmxlIGV4cGFuc2lvbi4iIH0sCisgIHsgIi0tdHJhY2UtZm9ybWF0PTxodW1hbnxqc29uLXYxPiIsICJTZXQgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIHRyYWNlLiIgfSwKICAgeyAiLS10cmFjZS1zb3VyY2U9PGZpbGU+IiwKICAgICAiVHJhY2Ugb25seSB0aGlzIENNYWtlIGZpbGUvbW9kdWxlLiBNdWx0aXBsZSBvcHRpb25zIGFsbG93ZWQuIiB9LAogICB7ICItLXRyYWNlLXJlZGlyZWN0PTxmaWxlPiIsCiAgICAgIlJlZGlyZWN0IHRyYWNlIG91dHB1dCB0byBhIGZpbGUgaW5zdGVhZCBvZiBzdGRlcnIuIiB9LAogICB7ICItLXdhcm4tdW5pbml0aWFsaXplZCIsICJXYXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiIgfSwKLSAgeyAiLS13YXJuLXVudXNlZC12YXJzIiwgIldhcm4gYWJvdXQgdW51c2VkIHZhcmlhYmxlcy4iIH0sCiAgIHsgIi0tbm8td2Fybi11bnVzZWQtY2xpIiwgIkRvbid0IHdhcm4gYWJvdXQgY29tbWFuZCBsaW5lIG9wdGlvbnMuIiB9LAogICB7ICItLWNoZWNrLXN5c3RlbS12YXJzIiwKICAgICAiRmluZCBwcm9ibGVtcyB3aXRoIHZhcmlhYmxlIHVzYWdlIGluIHN5c3RlbSAiCiAgICAgImZpbGVzLiIgfSwKKyMgIGlmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKKyAgeyAiLS1wcm9maWxpbmctZm9ybWF0PTxmbXQ+IiwKKyAgICAiT3V0cHV0IGRhdGEgZm9yIHByb2ZpbGluZyBDTWFrZSBzY3JpcHRzLiBTdXBwb3J0ZWQgZm9ybWF0czogIgorICAgICJnb29nbGUtdHJhY2UiIH0sCisgIHsgIi0tcHJvZmlsaW5nLW91dHB1dD08ZmlsZT4iLAorICAgICJTZWxlY3QgYW4gb3V0cHV0IHBhdGggZm9yIHRoZSBwcm9maWxpbmcgZGF0YSBlbmFibGVkIHRocm91Z2ggIgorICAgICItLXByb2ZpbGluZy1mb3JtYXQuIiB9LAorIyAgZW5kaWYKICAgeyBudWxscHRyLCBudWxscHRyIH0KIH07CiAKQEAgLTk5LDcgKzExNSw3IEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzOwogICBhcmdzLnJlc2VydmUoYWMgLSAxKTsKICAgYXJncy5lbXBsYWNlX2JhY2soYXZbMF0pOwotICBjbUFwcGVuZChhcmdzLCBhdiArIDIsIGF2ICsgYWMpOworICBjbTo6YXBwZW5kKGFyZ3MsIGF2ICsgMiwgYXYgKyBhYyk7CiAgIHJldHVybiBjbWNtZDo6RXhlY3V0ZUNNYWtlQ29tbWFuZChhcmdzKTsKIH0KIApAQCAtMjgyLDE2ICsyOTgsMTYgQEAKICAgICAgIGNtU3RhdGVFbnVtczo6Q2FjaGVFbnRyeVR5cGUgdCA9IGNtLkdldFN0YXRlKCktPkdldENhY2hlRW50cnlUeXBlKGspOwogICAgICAgaWYgKHQgIT0gY21TdGF0ZUVudW1zOjpJTlRFUk5BTCAmJiB0ICE9IGNtU3RhdGVFbnVtczo6U1RBVElDICYmCiAgICAgICAgICAgdCAhPSBjbVN0YXRlRW51bXM6OlVOSU5JVElBTElaRUQpIHsKLSAgICAgICAgY29uc3QgY2hhciogYWR2YW5jZWRQcm9wID0KKyAgICAgICAgY21Qcm9wIGFkdmFuY2VkUHJvcCA9CiAgICAgICAgICAgY20uR2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGssICJBRFZBTkNFRCIpOwogICAgICAgICBpZiAobGlzdF9hbGxfY2FjaGVkIHx8ICFhZHZhbmNlZFByb3ApIHsKICAgICAgICAgICBpZiAobGlzdF9oZWxwKSB7Ci0gICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIi8vICIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBjbS5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5UHJvcGVydHkoaywgIkhFTFBTVFJJTkciKQotICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgICAgIGNtUHJvcCBoZWxwID0KKyAgICAgICAgICAgICAgY20uR2V0U3RhdGUoKS0+R2V0Q2FjaGVFbnRyeVByb3BlcnR5KGssICJIRUxQU1RSSU5HIik7CisgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIi8vICIgPDwgKGhlbHAgPyAqaGVscCA6ICIiKSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgfQogICAgICAgICAgIHN0ZDo6Y291dCA8PCBrIDw8ICI6IiA8PCBjbVN0YXRlOjpDYWNoZUVudHJ5VHlwZVRvU3RyaW5nKHQpIDw8ICI9IgotICAgICAgICAgICAgICAgICAgICA8PCBjbS5HZXRTdGF0ZSgpLT5HZXRDYWNoZUVudHJ5VmFsdWUoaykgPDwgc3RkOjplbmRsOworICAgICAgICAgICAgICAgICAgICA8PCBjbS5HZXRTdGF0ZSgpLT5HZXRTYWZlQ2FjaGVFbnRyeVZhbHVlKGspIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICBpZiAobGlzdF9oZWxwKSB7CiAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAgIH0KQEAgLTMwOCw2ICszMjQsNyBAQAogICByZXR1cm4gMDsKIH0KIAorI2lmbmRlZiBDTUFLRV9CT09UU1RSQVAKIGludCBleHRyYWN0X2pvYl9udW1iZXIoaW50JiBpbmRleCwgY2hhciBjb25zdCogY3VycmVudCwgY2hhciBjb25zdCogbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbl9vZl9mbGFnKQogewpAQCAtMzM3LDYgKzM1NCw3IEBACiAgIH0KICAgcmV0dXJuIGpvYnM7CiB9CisjZW5kaWYKIAogaW50IGRvX2J1aWxkKGludCBhYywgY2hhciBjb25zdCogY29uc3QqIGF2KQogewpAQCAtMzQ2LDcgKzM2NCw3IEBACiAjZWxzZQogICBpbnQgam9icyA9IGNtYWtlOjpOT19CVUlMRF9QQVJBTExFTF9MRVZFTDsKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRhcmdldHM7Ci0gIHN0ZDo6c3RyaW5nIGNvbmZpZyA9ICJEZWJ1ZyI7CisgIHN0ZDo6c3RyaW5nIGNvbmZpZzsKICAgc3RkOjpzdHJpbmcgZGlyOwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbmF0aXZlT3B0aW9uczsKICAgYm9vbCBjbGVhbkZpcnN0ID0gZmFsc2U7CkBAIC01MDIsNiArNTIwLDEyMSBAQAogI2VuZGlmCiB9CiAKK2Jvb2wgcGFyc2VfZGVmYXVsdF9kaXJlY3RvcnlfcGVybWlzc2lvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBlcm1pc3Npb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGFyc2VkUGVybWlzc2lvbnNWYXIpCit7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXJzZWRQZXJtaXNzaW9uczsKKyAgZW51bSBEb2luZworICB7CisgICAgRG9pbmdOb25lLAorICAgIERvaW5nT3duZXIsCisgICAgRG9pbmdHcm91cCwKKyAgICBEb2luZ1dvcmxkLAorICAgIERvaW5nT3duZXJBc3NpZ25tZW50LAorICAgIERvaW5nR3JvdXBBc3NpZ25tZW50LAorICAgIERvaW5nV29ybGRBc3NpZ25tZW50LAorICB9OworICBEb2luZyBkb2luZyA9IERvaW5nTm9uZTsKKworICBhdXRvIHVuaXF1ZVB1c2hCYWNrID0gWyZwYXJzZWRQZXJtaXNzaW9uc10oY29uc3Qgc3RkOjpzdHJpbmcmIGUpIHsKKyAgICBpZiAoc3RkOjpmaW5kKHBhcnNlZFBlcm1pc3Npb25zLmJlZ2luKCksIHBhcnNlZFBlcm1pc3Npb25zLmVuZCgpLCBlKSA9PQorICAgICAgICBwYXJzZWRQZXJtaXNzaW9ucy5lbmQoKSkgeworICAgICAgcGFyc2VkUGVybWlzc2lvbnMucHVzaF9iYWNrKGUpOworICAgIH0KKyAgfTsKKworICBmb3IgKGF1dG8gY29uc3QmIGUgOiBwZXJtaXNzaW9ucykgeworICAgIHN3aXRjaCAoZG9pbmcpIHsKKyAgICAgIGNhc2UgRG9pbmdOb25lOgorICAgICAgICBpZiAoZSA9PSAndScpIHsKKyAgICAgICAgICBkb2luZyA9IERvaW5nT3duZXI7CisgICAgICAgIH0gZWxzZSBpZiAoZSA9PSAnZycpIHsKKyAgICAgICAgICBkb2luZyA9IERvaW5nR3JvdXA7CisgICAgICAgIH0gZWxzZSBpZiAoZSA9PSAnbycpIHsKKyAgICAgICAgICBkb2luZyA9IERvaW5nV29ybGQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEb2luZ093bmVyOgorICAgICAgICBpZiAoZSA9PSAnPScpIHsKKyAgICAgICAgICBkb2luZyA9IERvaW5nT3duZXJBc3NpZ25tZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRG9pbmdHcm91cDoKKyAgICAgICAgaWYgKGUgPT0gJz0nKSB7CisgICAgICAgICAgZG9pbmcgPSBEb2luZ0dyb3VwQXNzaWdubWVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERvaW5nV29ybGQ6CisgICAgICAgIGlmIChlID09ICc9JykgeworICAgICAgICAgIGRvaW5nID0gRG9pbmdXb3JsZEFzc2lnbm1lbnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEb2luZ093bmVyQXNzaWdubWVudDoKKyAgICAgICAgaWYgKGUgPT0gJ3InKSB7CisgICAgICAgICAgdW5pcXVlUHVzaEJhY2soIk9XTkVSX1JFQUQiKTsKKyAgICAgICAgfSBlbHNlIGlmIChlID09ICd3JykgeworICAgICAgICAgIHVuaXF1ZVB1c2hCYWNrKCJPV05FUl9XUklURSIpOworICAgICAgICB9IGVsc2UgaWYgKGUgPT0gJ3gnKSB7CisgICAgICAgICAgdW5pcXVlUHVzaEJhY2soIk9XTkVSX0VYRUNVVEUiKTsKKyAgICAgICAgfSBlbHNlIGlmIChlID09ICcsJykgeworICAgICAgICAgIGRvaW5nID0gRG9pbmdOb25lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRG9pbmdHcm91cEFzc2lnbm1lbnQ6CisgICAgICAgIGlmIChlID09ICdyJykgeworICAgICAgICAgIHVuaXF1ZVB1c2hCYWNrKCJHUk9VUF9SRUFEIik7CisgICAgICAgIH0gZWxzZSBpZiAoZSA9PSAndycpIHsKKyAgICAgICAgICB1bmlxdWVQdXNoQmFjaygiR1JPVVBfV1JJVEUiKTsKKyAgICAgICAgfSBlbHNlIGlmIChlID09ICd4JykgeworICAgICAgICAgIHVuaXF1ZVB1c2hCYWNrKCJHUk9VUF9FWEVDVVRFIik7CisgICAgICAgIH0gZWxzZSBpZiAoZSA9PSAnLCcpIHsKKyAgICAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIERvaW5nV29ybGRBc3NpZ25tZW50OgorICAgICAgICBpZiAoZSA9PSAncicpIHsKKyAgICAgICAgICB1bmlxdWVQdXNoQmFjaygiV09STERfUkVBRCIpOworICAgICAgICB9IGVsc2UgaWYgKGUgPT0gJ3cnKSB7CisgICAgICAgICAgdW5pcXVlUHVzaEJhY2soIldPUkxEX1dSSVRFIik7CisgICAgICAgIH0gZWxzZSBpZiAoZSA9PSAneCcpIHsKKyAgICAgICAgICB1bmlxdWVQdXNoQmFjaygiV09STERfRVhFQ1VURSIpOworICAgICAgICB9IGVsc2UgaWYgKGUgPT0gJywnKSB7CisgICAgICAgICAgZG9pbmcgPSBEb2luZ05vbmU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZiAoZG9pbmcgIT0gRG9pbmdPd25lckFzc2lnbm1lbnQgJiYgZG9pbmcgIT0gRG9pbmdHcm91cEFzc2lnbm1lbnQgJiYKKyAgICAgIGRvaW5nICE9IERvaW5nV29ybGRBc3NpZ25tZW50KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKKyAgZm9yIChhdXRvIGkgPSAwdTsgaSA8IHBhcnNlZFBlcm1pc3Npb25zLnNpemUoKTsgaSsrKSB7CisgICAgaWYgKGkgIT0gMCkgeworICAgICAgb3NzIDw8ICI7IjsKKyAgICB9CisgICAgb3NzIDw8IHBhcnNlZFBlcm1pc3Npb25zW2ldOworICB9CisKKyAgcGFyc2VkUGVybWlzc2lvbnNWYXIgPSBvc3Muc3RyKCk7CisgIHJldHVybiB0cnVlOworfQorCiBpbnQgZG9faW5zdGFsbChpbnQgYWMsIGNoYXIgY29uc3QqIGNvbnN0KiBhdikKIHsKICNpZmRlZiBDTUFLRV9CT09UU1RSQVAKQEAgLTUxMiw2ICs2NDUsNyBAQAogCiAgIHN0ZDo6c3RyaW5nIGNvbmZpZzsKICAgc3RkOjpzdHJpbmcgY29tcG9uZW50OworICBzdGQ6OnN0cmluZyBkZWZhdWx0RGlyZWN0b3J5UGVybWlzc2lvbnM7CiAgIHN0ZDo6c3RyaW5nIHByZWZpeDsKICAgc3RkOjpzdHJpbmcgZGlyOwogICBib29sIHN0cmlwID0gZmFsc2U7CkBAIC01MjQsNiArNjU4LDcgQEAKICAgICBEb2luZ0NvbmZpZywKICAgICBEb2luZ0NvbXBvbmVudCwKICAgICBEb2luZ1ByZWZpeCwKKyAgICBEb2luZ0RlZmF1bHREaXJlY3RvcnlQZXJtaXNzaW9ucywKICAgfTsKIAogICBEb2luZyBkb2luZyA9IERvaW5nRGlyOwpAQCAtNTQyLDYgKzY3Nyw4IEBACiAgICAgICAgICAgICAgICAoc3RyY21wKGF2W2ldLCAiLXYiKSA9PSAwKSkgewogICAgICAgdmVyYm9zZSA9IHRydWU7CiAgICAgICBkb2luZyA9IERvaW5nTm9uZTsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcChhdltpXSwgIi0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMiKSA9PSAwKSB7CisgICAgICBkb2luZyA9IERvaW5nRGVmYXVsdERpcmVjdG9yeVBlcm1pc3Npb25zOwogICAgIH0gZWxzZSB7CiAgICAgICBzd2l0Y2ggKGRvaW5nKSB7CiAgICAgICAgIGNhc2UgRG9pbmdEaXI6CkBAIC01NjAsNiArNjk3LDEwIEBACiAgICAgICAgICAgcHJlZml4ID0gYXZbaV07CiAgICAgICAgICAgZG9pbmcgPSBEb2luZ05vbmU7CiAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRG9pbmdEZWZhdWx0RGlyZWN0b3J5UGVybWlzc2lvbnM6CisgICAgICAgICAgZGVmYXVsdERpcmVjdG9yeVBlcm1pc3Npb25zID0gYXZbaV07CisgICAgICAgICAgZG9pbmcgPSBEb2luZ05vbmU7CisgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgc3RkOjpjZXJyIDw8ICJVbmtub3duIGFyZ3VtZW50ICIgPDwgYXZbaV0gPDwgc3RkOjplbmRsOwogICAgICAgICAgIGRpci5jbGVhcigpOwpAQCAtNTc2LDYgKzcxNyw4IEBACiAgICAgICAiICA8ZGlyPiAgICAgICAgICAgICAgPSBQcm9qZWN0IGJpbmFyeSBkaXJlY3RvcnkgdG8gaW5zdGFsbC5cbiIKICAgICAgICIgIC0tY29uZmlnIDxjZmc+ICAgICA9IEZvciBtdWx0aS1jb25maWd1cmF0aW9uIHRvb2xzLCBjaG9vc2UgPGNmZz4uXG4iCiAgICAgICAiICAtLWNvbXBvbmVudCA8Y29tcD4gPSBDb21wb25lbnQtYmFzZWQgaW5zdGFsbC4gT25seSBpbnN0YWxsIDxjb21wPi5cbiIKKyAgICAgICIgIC0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgPHBlcm1pc3Npb24+IFxuIgorICAgICAgIiAgICAgRGVmYXVsdCBpbnN0YWxsIHBlcm1pc3Npb24uIFVzZSBkZWZhdWx0IHBlcm1pc3Npb24gPHBlcm1pc3Npb24+LlxuIgogICAgICAgIiAgLS1wcmVmaXggPHByZWZpeD4gID0gVGhlIGluc3RhbGxhdGlvbiBwcmVmaXggQ01BS0VfSU5TVEFMTF9QUkVGSVguXG4iCiAgICAgICAiICAtLXN0cmlwICAgICAgICAgICAgPSBQZXJmb3JtaW5nIGluc3RhbGwvc3RyaXAuXG4iCiAgICAgICAiICAtdiAtLXZlcmJvc2UgICAgICAgPSBFbmFibGUgdmVyYm9zZSBvdXRwdXQuXG4iCkBAIC02MTYsNiArNzU5LDE4IEBACiAgICAgYXJncy5lbXBsYWNlX2JhY2soIi1EQ01BS0VfSU5TVEFMTF9DT05GSUdfTkFNRT0iICsgY29uZmlnKTsKICAgfQogCisgIGlmICghZGVmYXVsdERpcmVjdG9yeVBlcm1pc3Npb25zLmVtcHR5KCkpIHsKKyAgICBzdGQ6OnN0cmluZyBwYXJzZWRQZXJtaXNzaW9uc1ZhcjsKKyAgICBpZiAoIXBhcnNlX2RlZmF1bHRfZGlyZWN0b3J5X3Blcm1pc3Npb25zKGRlZmF1bHREaXJlY3RvcnlQZXJtaXNzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFBlcm1pc3Npb25zVmFyKSkgeworICAgICAgc3RkOjpjZXJyIDw8ICItLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIGlzIGluIGluY29ycmVjdCBmb3JtYXQiCisgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGFyZ3MuZW1wbGFjZV9iYWNrKCItRENNQUtFX0lOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlM9IiArCisgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkUGVybWlzc2lvbnNWYXIpOworICB9CisKICAgYXJncy5lbXBsYWNlX2JhY2soIi1QIik7CiAgIGFyZ3MuZW1wbGFjZV9iYWNrKGRpciArICIvY21ha2VfaW5zdGFsbC5jbWFrZSIpOwogCkBAIC02ODIsNyArODM3LDYgQEAKICAgYWMgPSBhcmdzLmFyZ2MoKTsKICAgYXYgPSBhcmdzLmFyZ3YoKTsKIAotICBjbVN5c3RlbVRvb2xzOjpFbmFibGVNU1ZDRGVidWdIb29rKCk7CiAgIGNtU3lzdGVtVG9vbHM6OkluaXRpYWxpemVMaWJVVigpOwogICBjbVN5c3RlbVRvb2xzOjpGaW5kQ01ha2VSZXNvdXJjZXMoYXZbMF0pOwogICBpZiAoYWMgPiAxKSB7CkBAIC03MDMsNiArODU3LDggQEAKICNpZm5kZWYgQ01BS0VfQk9PVFNUUkFQCiAgIGNtRHluYW1pY0xvYWRlcjo6Rmx1c2hDYWNoZSgpOwogI2VuZGlmCi0gIHV2X2xvb3BfY2xvc2UodXZfZGVmYXVsdF9sb29wKCkpOworICBpZiAodXZfbG9vcF90KiBsb29wID0gdXZfZGVmYXVsdF9sb29wKCkpIHsKKyAgICB1dl9sb29wX2Nsb3NlKGxvb3ApOworICB9CiAgIHJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21jbGRlcHMuY3h4IGIvU291cmNlL2NtY2xkZXBzLmN4eAppbmRleCBjYWY2NDUzLi41YzI3YWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21jbGRlcHMuY3h4CisrKyBiL1NvdXJjZS9jbWNsZGVwcy5jeHgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNtc3lzL0VuY29kaW5nLmh4eCIKIAorI2luY2x1ZGUgImNtU3RyaW5nQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgImNtU3lzdGVtVG9vbHMuaCIKIAogLy8gV2UgZG9uJ3Qgd2FudCBhbnkgd2lsZGNhcmQgZXhwYW5zaW9uLgpAQCAtNjMsNyArNjQsNyBAQAogICAgICAgICBtc2cpOwogfQogCi1zdGF0aWMgc3RkOjpzdHJpbmcgdHJpbUxlYWRpbmdTcGFjZShjb25zdCBzdGQ6OnN0cmluZyYgY21kbGluZSkKK3N0YXRpYyBjbTo6c3RyaW5nX3ZpZXcgdHJpbUxlYWRpbmdTcGFjZShjbTo6c3RyaW5nX3ZpZXcgY21kbGluZSkKIHsKICAgaW50IGkgPSAwOwogICBmb3IgKDsgY21kbGluZVtpXSA9PSAnICc7ICsraSkKQEAgLTgxLDM0ICs4MiwzMCBAQAogICB9CiB9CiAKLWJvb2wgc3RhcnRzV2l0aChjb25zdCBzdGQ6OnN0cmluZyYgc3RyLCBjb25zdCBzdGQ6OnN0cmluZyYgd2hhdCkKLXsKLSAgcmV0dXJuIHN0ci5jb21wYXJlKDAsIHdoYXQuc2l6ZSgpLCB3aGF0KSA9PSAwOwotfQotCiAvLyBTdHJpcHMgb25lIGFyZ3VtZW50IGZyb20gdGhlIGNtZGxpbmUgYW5kIHJldHVybnMgaXQuICJzdXJyb3VuZGluZyBxdW90ZXMiCiAvLyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBhcmd1bWVudCBpZiB0aGVyZSB3ZXJlIGFueS4KIHN0YXRpYyBzdGQ6OnN0cmluZyBnZXRBcmcoc3RkOjpzdHJpbmcmIGNtZGxpbmUpCiB7Ci0gIHN0ZDo6c3RyaW5nIHJldDsKICAgYm9vbCBpbl9xdW90ZWQgPSBmYWxzZTsKICAgdW5zaWduZWQgaW50IGkgPSAwOwogCi0gIGNtZGxpbmUgPSB0cmltTGVhZGluZ1NwYWNlKGNtZGxpbmUpOworICBjbTo6c3RyaW5nX3ZpZXcgY21kdmlldyA9IHRyaW1MZWFkaW5nU3BhY2UoY21kbGluZSk7CisgIHNpemVfdCBzcGFjZUNudCA9IGNtZGxpbmUuc2l6ZSgpIC0gY21kdmlldy5zaXplKCk7CiAKICAgZm9yICg7OyArK2kpIHsKLSAgICBpZiAoaSA+PSBjbWRsaW5lLnNpemUoKSkKKyAgICBpZiAoaSA+PSBjbWR2aWV3LnNpemUoKSkKICAgICAgIHVzYWdlKCJDb3VsZG4ndCBwYXJzZSBhcmd1bWVudHMuIik7Ci0gICAgaWYgKCFpbl9xdW90ZWQgJiYgY21kbGluZVtpXSA9PSAnICcpCisgICAgaWYgKCFpbl9xdW90ZWQgJiYgY21kdmlld1tpXSA9PSAnICcpCiAgICAgICBicmVhazsgLy8gImEgYiIgInggeSIKLSAgICBpZiAoY21kbGluZVtpXSA9PSAnIicpCisgICAgaWYgKGNtZHZpZXdbaV0gPT0gJyInKQogICAgICAgaW5fcXVvdGVkID0gIWluX3F1b3RlZDsKICAgfQogCi0gIHJldCA9IGNtZGxpbmUuc3Vic3RyKDAsIGkpOwotICBpZiAocmV0WzBdID09ICciJyAmJiByZXRbaSAtIDFdID09ICciJykKLSAgICByZXQgPSByZXQuc3Vic3RyKDEsIHJldC5zaXplKCkgLSAyKTsKLSAgY21kbGluZSA9IGNtZGxpbmUuc3Vic3RyKGkpOworICBjbWR2aWV3ID0gY21kdmlldy5zdWJzdHIoMCwgaSk7CisgIGlmIChjbWR2aWV3WzBdID09ICciJyAmJiBjbWR2aWV3W2kgLSAxXSA9PSAnIicpCisgICAgY21kdmlldyA9IGNtZHZpZXcuc3Vic3RyKDEsIGkgLSAyKTsKKyAgc3RkOjpzdHJpbmcgcmV0KGNtZHZpZXcpOworICBjbWRsaW5lLmVyYXNlKDAsIHNwYWNlQ250ICsgaSk7CiAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTEyNyw3ICsxMjQsNyBAQAogICBwcmVmaXggPSBnZXRBcmcoY21kbGluZSk7CiAgIGNscGF0aCA9IGdldEFyZyhjbWRsaW5lKTsKICAgYmlucGF0aCA9IGdldEFyZyhjbWRsaW5lKTsKLSAgcmVzdCA9IHRyaW1MZWFkaW5nU3BhY2UoY21kbGluZSk7CisgIHJlc3QgPSBzdGQ6OnN0cmluZyh0cmltTGVhZGluZ1NwYWNlKGNtZGxpbmUpKTsKIH0KIAogLy8gTm90IGFsbCBiYWNrc2xhc2hlcyBuZWVkIHRvIGJlIGVzY2FwZWQgaW4gYSBkZXBmaWxlLCBidXQgaXQncyBlYXNpZXIgdGhhdApAQCAtMTY5LDggKzE2Niw4IEBACiAgICAgLy8gYnVpbGQubmluamEgZmlsZS4gIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGNhbm9uaWNhbGl6ZSB0aGUgcGF0aCB0byB1c2UKICAgICAvLyBiYWNrd2FyZCBzbGFzaGVzIGFuZCByZWxhdGl2aXplIHRoZSBwYXRoIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuCiAgICAgcmVwbGFjZUFsbCh0bXAsICIvIiwgIlxcIik7Ci0gICAgaWYgKHN0YXJ0c1dpdGgodG1wLCBjd2QpKQotICAgICAgdG1wID0gdG1wLnN1YnN0cihjd2Quc2l6ZSgpKTsKKyAgICBpZiAoY21IYXNQcmVmaXgodG1wLCBjd2QpKQorICAgICAgdG1wLmVyYXNlKDAsIGN3ZC5zaXplKCkpOwogICAgIGVzY2FwZVBhdGgodG1wKTsKICAgICBmcHJpbnRmKG91dCwgIiVzIFxcXG4iLCB0bXAuY19zdHIoKSk7CiAgIH0KQEAgLTE5NCw3ICsxOTEsNyBAQAogICByZXR1cm4gcmVwbGFjZWQucmVwbGFjZShwb3MsIHdoYXQuc2l6ZSgpLCByZXBsYWNlbWVudCk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgc3JjZmlsZW5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZmlsZSwKK3N0YXRpYyBpbnQgcHJvY2VzcyhjbTo6c3RyaW5nX3ZpZXcgc3JjZmlsZW5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkZmlsZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb2JqZmlsZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY21kLCBjb25zdCBzdGQ6OnN0cmluZyYgZGlyID0gIiIsCiAgICAgICAgICAgICAgICAgICAgYm9vbCBxdWlldCA9IGZhbHNlKQpAQCAtMjIxLDEzICsyMTgsMTQgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGluY2x1ZGVzOwogICBib29sIGlzRmlyc3RMaW5lID0gdHJ1ZTsgLy8gY2wgcHJpbnRzIGFsd2F5cyBmaXJzdCB0aGUgc291cmNlIGZpbGVuYW1lCiAgIHdoaWxlIChzdGQ6OmdldGxpbmUoc3MsIGxpbmUpKSB7Ci0gICAgaWYgKHN0YXJ0c1dpdGgobGluZSwgcHJlZml4KSkgewotICAgICAgc3RkOjpzdHJpbmcgaW5jID0gdHJpbUxlYWRpbmdTcGFjZShsaW5lLnN1YnN0cihwcmVmaXguc2l6ZSgpKS5jX3N0cigpKTsKKyAgICBjbTo6c3RyaW5nX3ZpZXcgaW5jKGxpbmUpOworICAgIGlmIChjbUhhc1ByZWZpeChpbmMsIHByZWZpeCkpIHsKKyAgICAgIGluYyA9IHRyaW1MZWFkaW5nU3BhY2UoaW5jLnN1YnN0cihwcmVmaXguc2l6ZSgpKSk7CiAgICAgICBpZiAoaW5jLmJhY2soKSA9PSAnXHInKSAvLyBibGVjaCwgc3R1cGlkIFxyXG4KICAgICAgICAgaW5jID0gaW5jLnN1YnN0cigwLCBpbmMuc2l6ZSgpIC0gMSk7Ci0gICAgICBpbmNsdWRlcy5wdXNoX2JhY2soaW5jKTsKKyAgICAgIGluY2x1ZGVzLmVtcGxhY2VfYmFjayhzdGQ6OnN0cmluZyhpbmMpKTsKICAgICB9IGVsc2UgewotICAgICAgaWYgKCFpc0ZpcnN0TGluZSB8fCAhc3RhcnRzV2l0aChsaW5lLCBzcmNmaWxlbmFtZSkpIHsKKyAgICAgIGlmICghaXNGaXJzdExpbmUgfHwgIWNtSGFzUHJlZml4KGluYywgc3JjZmlsZW5hbWUpKSB7CiAgICAgICAgIGlmICghcXVpZXQgfHwgZXhpdF9jb2RlICE9IDApIHsKICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzXG4iLCBsaW5lLmNfc3RyKCkpOwogICAgICAgICB9CkBAIC0yNTgsMTQgKzI1NiwxMCBAQAogICAgICAgICAgICAgICAgICAgIGNsLCBiaW5wYXRoLCByZXN0KTsKIAogICAvLyBuZWVkZWQgdG8gc3VwcHJlc3MgZmlsZW5hbWUgb3V0cHV0IG9mIG1zdmMgdG9vbHMKLSAgc3RkOjpzdHJpbmcgc3JjZmlsZW5hbWU7Ci0gIHsKLSAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IHNyY2ZpbGUucmZpbmQoJ1xcJyk7Ci0gICAgaWYgKHBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgc3JjZmlsZW5hbWUgPSBzcmNmaWxlOwotICAgIH0gZWxzZSB7Ci0gICAgICBzcmNmaWxlbmFtZSA9IHNyY2ZpbGUuc3Vic3RyKHBvcyArIDEpOwotICAgIH0KKyAgY206OnN0cmluZ192aWV3IHNyY2ZpbGVuYW1lKHNyY2ZpbGUpOworICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9IHNyY2ZpbGUucmZpbmQoJ1xcJyk7CisgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBzcmNmaWxlbmFtZSA9IHNyY2ZpbGVuYW1lLnN1YnN0cihwb3MgKyAxKTsKICAgfQogCiAgIHN0ZDo6c3RyaW5nIG5vbCA9ICIgL25vbG9nbyAiOwpAQCAtMjg2LDcgKzI4MCw3IEBACiAgICAgLy8gY2FsbCBjbCBpbiBvYmplY3QgZGlyIHNvIHRoZSAuaSBpcyBnZW5lcmF0ZWQgdGhlcmUKICAgICBzdGQ6OnN0cmluZyBvYmpkaXI7CiAgICAgewotICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBvYmpmaWxlLnJmaW5kKCJcXCIpOworICAgICAgcG9zID0gb2JqZmlsZS5yZmluZCgiXFwiKTsKICAgICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgICAgb2JqZGlyID0gb2JqZmlsZS5zdWJzdHIoMCwgcG9zKTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWNtZC5jeHggYi9Tb3VyY2UvY21jbWQuY3h4CmluZGV4IGQwNWUzYzguLjFhNWZlYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWNtZC5jeHgKKysrIGIvU291cmNlL2NtY21kLmN4eApAQCAtMiw3ICsyLDExIEBACiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KICNpbmNsdWRlICJjbWNtZC5oIgogCi0jaW5jbHVkZSAiY21BbGdvcml0aG1zLmgiCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCisjaW5jbHVkZSA8Y20zcC91di5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKICNpbmNsdWRlICJjbUR1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY21HbG9iYWxHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjbUxvY2FsR2VuZXJhdG9yLmgiCkBAIC0xNSwyMiArMTksMjIgQEAKICNpbmNsdWRlICJjbVN0YXRlU25hcHNob3QuaCIKICNpbmNsdWRlICJjbVN0cmluZ0FsZ29yaXRobXMuaCIKICNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCisjaW5jbHVkZSAiY21VVlByb2Nlc3NDaGFpbi5oIgogI2luY2x1ZGUgImNtVXRpbHMuaHh4IgogI2luY2x1ZGUgImNtVmVyc2lvbi5oIgogI2luY2x1ZGUgImNtYWtlLmgiCiAKICNpZiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCiAjICBpbmNsdWRlICJjbURlcGVuZHNGb3J0cmFuLmgiIC8vIEZvciAtRSBjbWFrZV9jb3B5X2Y5MF9tb2QgY2FsbGJhY2suCisjICBpbmNsdWRlICJjbUZpbGVUaW1lLmgiCiAjICBpbmNsdWRlICJjbVNlcnZlci5oIgogIyAgaW5jbHVkZSAiY21TZXJ2ZXJDb25uZWN0aW9uLmgiCisKKyMgIGluY2x1ZGUgImJpbmRleHBsaWIuaCIKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKSAmJiBkZWZpbmVkKF9XSU4zMikKICMgIGluY2x1ZGUgImNtc3lzL0NvbnNvbGVCdWYuaHh4IgotCi0jICBpbmNsdWRlICJjbUZpbGVUaW1lLmgiCi0KLSMgIGluY2x1ZGUgImJpbmRleHBsaWIuaCIKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKSAmJiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKQEAgLTg0LDYgKzg4LDcgQEAKICAgICA8PCAiQXZhaWxhYmxlIGNvbW1hbmRzOiBcbiIKICAgICA8PCAiICBjYXBhYmlsaXRpZXMgICAgICAgICAgICAgIC0gUmVwb3J0IGNhcGFiaWxpdGllcyBidWlsdCBpbnRvIGNtYWtlICIKICAgICAgICAiaW4gSlNPTiBmb3JtYXRcbiIKKyAgICA8PCAiICBjYXQgPGZpbGVzPi4uLiAgICAgICAgICAgIC0gY29uY2F0IHRoZSBmaWxlcyBhbmQgcHJpbnQgdGhlbSB0byB0aGUgc3RhbmRhcmQgb3V0cHV0XG4iCiAgICAgPDwgIiAgY2hkaXIgZGlyIGNtZCBbYXJncy4uLl0gICAtIHJ1biBjb21tYW5kIGluIGEgZ2l2ZW4gZGlyZWN0b3J5XG4iCiAgICAgPDwgIiAgY29tcGFyZV9maWxlcyBbLS1pZ25vcmUtZW9sXSBmaWxlMSBmaWxlMlxuIgogICAgIDw8ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGNoZWNrIGlmIGZpbGUxIGlzIHNhbWUgYXMgZmlsZTJcbiIKQEAgLTEwNywxMCArMTEyLDEyIEBACiAgICAgPDwgIiAgc2hhMzg0c3VtIDxmaWxlPi4uLiAgICAgICAtIGNyZWF0ZSBTSEEzODQgY2hlY2tzdW0gb2YgZmlsZXNcbiIKICAgICA8PCAiICBzaGE1MTJzdW0gPGZpbGU+Li4uICAgICAgIC0gY3JlYXRlIFNIQTUxMiBjaGVja3N1bSBvZiBmaWxlc1xuIgogICAgIDw8ICIgIHJlbW92ZSBbLWZdIDxmaWxlPi4uLiAgICAgLSByZW1vdmUgdGhlIGZpbGUocyksIHVzZSAtZiB0byBmb3JjZSAiCi0gICAgICAgIml0XG4iCi0gICAgPDwgIiAgcmVtb3ZlX2RpcmVjdG9yeSA8ZGlyPi4uLiAtIHJlbW92ZSBkaXJlY3RvcmllcyBhbmQgdGhlaXIgY29udGVudHNcbiIKKyAgICAgICAiaXQgKGRlcHJlY2F0ZWQ6IHVzZSBybSBpbnN0ZWFkKVxuIgorICAgIDw8ICIgIHJlbW92ZV9kaXJlY3RvcnkgPGRpcj4uLi4gLSByZW1vdmUgZGlyZWN0b3JpZXMgYW5kIHRoZWlyIGNvbnRlbnRzIChkZXByZWNhdGVkOiB1c2Ugcm0gaW5zdGVhZClcbiIKICAgICA8PCAiICByZW5hbWUgb2xkbmFtZSBuZXduYW1lICAgIC0gcmVuYW1lIGEgZmlsZSBvciBkaXJlY3RvcnkgIgogICAgICAgICIob24gb25lIHZvbHVtZSlcbiIKKyAgICA8PCAiICBybSBbLXJSZl0gPGZpbGUvZGlyPi4uLiAgICAtIHJlbW92ZSBmaWxlcyBvciBkaXJlY3RvcmllcywgdXNlIC1mIHRvICIKKyAgICAgICAiZm9yY2UgaXQsIHIgb3IgUiB0byByZW1vdmUgZGlyZWN0b3JpZXMgYW5kIHRoZWlyIGNvbnRlbnRzIHJlY3Vyc2l2ZWx5XG4iCiAgICAgPDwgIiAgc2VydmVyICAgICAgICAgICAgICAgICAgICAtIHN0YXJ0IGNtYWtlIGluIHNlcnZlciBtb2RlXG4iCiAgICAgPDwgIiAgc2xlZXAgPG51bWJlcj4uLi4gICAgICAgICAtIHNsZWVwIGZvciBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kc1xuIgogICAgIDw8ICIgIHRhciBbY3h0XVt2Zl1bempKXSBmaWxlLnRhciBbZmlsZS9kaXIxIGZpbGUvZGlyMiAuLi5dXG4iCkBAIC0xMTksNiArMTI2LDcgQEAKICAgICA8PCAiICB0b3VjaCA8ZmlsZT4uLi4gICAgICAgICAgIC0gdG91Y2ggYSA8ZmlsZT4uXG4iCiAgICAgPDwgIiAgdG91Y2hfbm9jcmVhdGUgPGZpbGU+Li4uICAtIHRvdWNoIGEgPGZpbGU+IGJ1dCBkbyBub3QgY3JlYXRlIGl0LlxuIgogICAgIDw8ICIgIGNyZWF0ZV9zeW1saW5rIG9sZCBuZXcgICAgLSBjcmVhdGUgYSBzeW1ib2xpYyBsaW5rIG5ldyAtPiBvbGRcbiIKKyAgICA8PCAiICBjcmVhdGVfaGFyZGxpbmsgb2xkIG5ldyAgIC0gY3JlYXRlIGEgaGFyZCBsaW5rIG5ldyAtPiBvbGRcbiIKICAgICA8PCAiICB0cnVlICAgICAgICAgICAgICAgICAgICAgIC0gZG8gbm90aGluZyB3aXRoIGFuIGV4aXQgY29kZSBvZiAwXG4iCiAgICAgPDwgIiAgZmFsc2UgICAgICAgICAgICAgICAgICAgICAtIGRvIG5vdGhpbmcgd2l0aCBhbiBleGl0IGNvZGUgb2YgMVxuIgogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQpAQCAtMTcyLDYgKzE4MCwzMSBAQAogICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgY21DYXRGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlVG9BcHBlbmQpCit7CisgIGNtc3lzOjppZnN0cmVhbSBzb3VyY2UoZmlsZVRvQXBwZW5kLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZDo6aW9zOjpiaW5hcnkgfCBzdGQ6Omlvczo6aW4pKTsKKyAgc3RkOjpjb3V0IDw8IHNvdXJjZS5yZGJ1ZigpOworfQorCitzdGF0aWMgYm9vbCBjbVJlbW92ZURpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgZGlyLCBib29sIHJlY3Vyc2l2ZSA9IHRydWUpCit7CisgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNTeW1saW5rKGRpcikpIHsKKyAgICBpZiAoIWNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoZGlyKSkgeworICAgICAgc3RkOjpjZXJyIDw8ICJFcnJvciByZW1vdmluZyBkaXJlY3Rvcnkgc3ltbGluayBcIiIgPDwgZGlyIDw8ICJcIi5cbiI7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9IGVsc2UgaWYgKCFyZWN1cnNpdmUpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkVycm9yIHJlbW92aW5nIGRpcmVjdG9yeSBcIiIgPDwgZGlyCisgICAgICAgICAgICAgIDw8ICJcIiB3aXRob3V0IHJlY3Vyc2l2ZSBvcHRpb24uXG4iOworICAgIHJldHVybiBmYWxzZTsKKyAgfSBlbHNlIGlmICghY21TeXN0ZW1Ub29sczo6UmVtb3ZlQURpcmVjdG9yeShkaXIpKSB7CisgICAgc3RkOjpjZXJyIDw8ICJFcnJvciByZW1vdmluZyBkaXJlY3RvcnkgXCIiIDw8IGRpciA8PCAiXCIuXG4iOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGludCBIYW5kbGVJV1lVKGNvbnN0IHN0ZDo6c3RyaW5nJiBydW5DbWQsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIC8qIHNvdXJjZUZpbGUgKi8sCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBvcmlnX2NtZCkKQEAgLTE3OSw3ICsyMTIsNyBAQAogICAvLyBDb25zdHJ1Y3QgdGhlIGl3eXUgY29tbWFuZCBsaW5lIGJ5IHRha2luZyB3aGF0IHdhcyBnaXZlbgogICAvLyBhbmQgYWRkaW5nIGFsbCB0aGUgYXJndW1lbnRzIHdlIGdpdmUgdG8gdGhlIGNvbXBpbGVyLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaXd5dV9jbWQgPSBjbUV4cGFuZGVkTGlzdChydW5DbWQsIHRydWUpOwotICBjbUFwcGVuZChpd3l1X2NtZCwgb3JpZ19jbWQuYmVnaW4oKSArIDEsIG9yaWdfY21kLmVuZCgpKTsKKyAgY206OmFwcGVuZChpd3l1X2NtZCwgb3JpZ19jbWQuYmVnaW4oKSArIDEsIG9yaWdfY21kLmVuZCgpKTsKICAgLy8gUnVuIHRoZSBpd3l1IGNvbW1hbmQgbGluZS4gIENhcHR1cmUgaXRzIHN0ZGVyciBhbmQgaGlkZSBpdHMgc3Rkb3V0LgogICAvLyBJZ25vcmUgaXRzIHJldHVybiBjb2RlIGJlY2F1c2UgdGhlIHRvb2wgYWx3YXlzIHJldHVybnMgbm9uLXplcm8uCiAgIHN0ZDo6c3RyaW5nIHN0ZEVycjsKQEAgLTIxMCw3ICsyNDMsNyBAQAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdGlkeV9jbWQgPSBjbUV4cGFuZGVkTGlzdChydW5DbWQsIHRydWUpOwogICB0aWR5X2NtZC5wdXNoX2JhY2soc291cmNlRmlsZSk7CiAgIHRpZHlfY21kLmVtcGxhY2VfYmFjaygiLS0iKTsKLSAgY21BcHBlbmQodGlkeV9jbWQsIG9yaWdfY21kKTsKKyAgY206OmFwcGVuZCh0aWR5X2NtZCwgb3JpZ19jbWQpOwogCiAgIC8vIFJ1biB0aGUgdGlkeSBjb21tYW5kIGxpbmUuICBDYXB0dXJlIGl0cyBzdGRvdXQgYW5kIGhpZGUgaXRzIHN0ZGVyci4KICAgc3RkOjpzdHJpbmcgc3RkT3V0OwpAQCAtNTUwLDI4ICs1ODMsMjUgQEAKICAgICAgICAgZmlsZXNEaWZmZXIgPSBjbXN5czo6U3lzdGVtVG9vbHM6OlRleHRGaWxlc0RpZmZlcihhcmdzWzNdLCBhcmdzWzRdKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIDo6Q01ha2VDb21tYW5kVXNhZ2UoYXJnc1swXS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiAyOwogICAgICAgfQogCiAgICAgICBpZiAoZmlsZXNEaWZmZXIpIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICJGaWxlcyBcIiIgPDwgYXJnc1thcmdzLnNpemUoKSAtIDJdIDw8ICJcIiB0byBcIiIKLSAgICAgICAgICAgICAgICAgIDw8IGFyZ3NbYXJncy5zaXplKCkgLSAxXSA8PCAiXCIgYXJlIGRpZmZlcmVudC5cbiI7CiAgICAgICAgIHJldHVybiAxOwogICAgICAgfQogICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKLSAgICBlbHNlIGlmIChhcmdzWzFdID09ICJfX2NyZWF0ZV9kZWYiKSB7CisjaWYgIWRlZmluZWQoQ01BS0VfQk9PVFNUUkFQKQorICAgIGlmIChhcmdzWzFdID09ICJfX2NyZWF0ZV9kZWYiKSB7CiAgICAgICBpZiAoYXJncy5zaXplKCkgPCA0KSB7CiAgICAgICAgIHN0ZDo6Y2VyciA8PCAiX19jcmVhdGVfZGVmIFVzYWdlOiAtRSBfX2NyZWF0ZV9kZWYgb3V0ZmlsZS5kZWYgIgotICAgICAgICAgICAgICAgICAgICAgIm9iamxpc3RmaWxlIFstbm09bm0tcGF0aF1cbiI7CisgICAgICAgICAgICAgICAgICAgICAib2JqbGlzdGZpbGUgWy0tbm09bm0tcGF0aF1cbiI7CiAgICAgICAgIHJldHVybiAxOwogICAgICAgfQogICAgICAgY21zeXM6Omlmc3RyZWFtIGZpbihhcmdzWzNdLmNfc3RyKCksIHN0ZDo6aW9zOjppbiB8IHN0ZDo6aW9zOjpiaW5hcnkpOwogICAgICAgaWYgKCFmaW4pIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICJjb3VsZCBub3Qgb3BlbiBvYmplY3QgbGlzdCBmaWxlOiAiIDw8IGFyZ3NbM10uY19zdHIoKQotICAgICAgICAgICAgICAgICAgPDwgIlxuIjsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJjb3VsZCBub3Qgb3BlbiBvYmplY3QgbGlzdCBmaWxlOiAiIDw8IGFyZ3NbM10gPDwgIlxuIjsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZXM7CkBAIC01OTIsMTUgKzYyMiwxNCBAQAogICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBGSUxFKiBmb3V0ID0gY21zeXM6OlN5c3RlbVRvb2xzOjpGb3BlbihhcmdzWzJdLmNfc3RyKCksICJ3KyIpOworICAgICAgRklMRSogZm91dCA9IGNtc3lzOjpTeXN0ZW1Ub29sczo6Rm9wZW4oYXJnc1syXSwgIncrIik7CiAgICAgICBpZiAoIWZvdXQpIHsKLSAgICAgICAgc3RkOjpjZXJyIDw8ICJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgLmRlZiBmaWxlOiAiIDw8IGFyZ3NbMl0uY19zdHIoKQotICAgICAgICAgICAgICAgICAgPDwgIlxuIjsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgLmRlZiBmaWxlOiAiIDw8IGFyZ3NbMl0gPDwgIlxuIjsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBiaW5kZXhwbGliIGRlZmZpbGU7CiAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gNSkgewotICAgICAgICBhdXRvIGEgPSBhcmdzWzRdOworICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgYSA9IGFyZ3NbNF07CiAgICAgICAgIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYSwgIi0tbm09IikpIHsKICAgICAgICAgICBkZWZmaWxlLlNldE5tUGF0aChhLnN1YnN0cig1KSk7CiAgICAgICAgICAgc3RkOjpjZXJyIDw8IGEuc3Vic3RyKDUpIDw8ICJcbiI7CkBAIC02MDgsNyArNjM3LDcgQEAKICAgICAgICAgICBzdGQ6OmNlcnIgPDwgInVua25vd24gYXJndW1lbnQ6ICIgPDwgYSA8PCAiXG4iOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBmb3IgKGF1dG8gY29uc3QmIGZpbGUgOiBmaWxlcykgeworICAgICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSA6IGZpbGVzKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBleHQgPSBjbVN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZUxhc3RFeHRlbnNpb24oZmlsZSk7CiAgICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpMb3dlckNhc2UoZXh0KSA9PSAiLmRlZiIpIHsKICAgICAgICAgICBpZiAoIWRlZmZpbGUuQWRkRGVmaW5pdGlvbkZpbGUoZmlsZS5jX3N0cigpKSkgewpAQCAtNjUyLDcgKzY4MSw3IEBACiAgICAgICAgIH0gZWxzZSBpZiAoIWEuZW1wdHkoKSAmJiBhWzBdID09ICctJykgewogICAgICAgICAgIC8vIEVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBjb21tYW5kIG5hbWVzIGNhbm5vdCBzdGFydCBpbiAnLScsCiAgICAgICAgICAgLy8gc28gdGhpcyBtdXN0IGJlIGFuIHVua25vd24gb3B0aW9uLgotICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiY21ha2UgLUUgZW52OiB1bmtub3duIG9wdGlvbiAnIiA8PCBhIDw8ICInIgorICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiY21ha2UgLUUgZW52OiB1bmtub3duIG9wdGlvbiAnIiA8PCBhIDw8ICdcJycKICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9IGVsc2UgaWYgKGEuZmluZCgnPScpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CkBAIC03MDYsMTQgKzczNSw3IEBACiAgICAgICBib29sIHJldHVybl92YWx1ZSA9IGZhbHNlOwogICAgICAgZm9yIChhdXRvIGNvbnN0JiBhcmcgOiBjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDIpKSB7CiAgICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkoYXJnKSkgewotICAgICAgICAgIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNTeW1saW5rKGFyZykpIHsKLSAgICAgICAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6UmVtb3ZlRmlsZShhcmcpKSB7Ci0gICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3IgcmVtb3ZpbmcgZGlyZWN0b3J5IHN5bWxpbmsgXCIiIDw8IGFyZwotICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlwiLlxuIjsKLSAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgaWYgKCFjbVN5c3RlbVRvb2xzOjpSZW1vdmVBRGlyZWN0b3J5KGFyZykpIHsKLSAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3IgcmVtb3ZpbmcgZGlyZWN0b3J5IFwiIiA8PCBhcmcgPDwgIlwiLlxuIjsKKyAgICAgICAgICBpZiAoIWNtUmVtb3ZlRGlyZWN0b3J5KGFyZykpIHsKICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHRydWU7CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03MzksNiArNzYxLDY1IEBACiAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICAvLyBSZW1vdmUgZGlyZWN0b3JpZXMgb3IgZmlsZXMgd2l0aCBybQorICAgIGlmIChhcmdzWzFdID09ICJybSIgJiYgYXJncy5zaXplKCkgPiAyKSB7CisgICAgICAvLyBJZiBhbiBlcnJvciBvY2N1cnMsIHdlIHdhbnQgdG8gY29udGludWUgcmVtb3ZpbmcgdGhlIHJlbWFpbmluZworICAgICAgLy8gZmlsZXMvZGlyZWN0b3JpZXMuCisgICAgICBpbnQgcmV0dXJuX3ZhbHVlID0gMDsKKyAgICAgIGJvb2wgZm9yY2UgPSBmYWxzZTsKKyAgICAgIGJvb2wgcmVjdXJzaXZlID0gZmFsc2U7CisgICAgICBib29sIGRvaW5nX29wdGlvbnMgPSB0cnVlOworICAgICAgYm9vbCBhdF9sZWFzdF9vbmVfZmlsZSA9IGZhbHNlOworICAgICAgZm9yIChhdXRvIGNvbnN0JiBhcmcgOiBjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDIpKSB7CisgICAgICAgIGlmIChkb2luZ19vcHRpb25zICYmIGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItIikpIHsKKyAgICAgICAgICBpZiAoYXJnID09ICItLSIpIHsKKyAgICAgICAgICAgIGRvaW5nX29wdGlvbnMgPSBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGFyZy5maW5kKCdmJykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIGZvcmNlID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGFyZy5maW5kX2ZpcnN0X29mKCJyUiIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoYXJnLmZpbmRfZmlyc3Rfbm90X29mKCItZnJSIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJVbmtub3duIC1FIHJtIGFyZ3VtZW50OiAiICsgYXJnKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAoYXJnLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBhdF9sZWFzdF9vbmVfZmlsZSA9IHRydWU7CisgICAgICAgICAgLy8gQ29tcGxhaW4gaWYgdGhlIC1mIG9wdGlvbiB3YXMgbm90IGdpdmVuIGFuZAorICAgICAgICAgIC8vIGVpdGhlciBmaWxlIGRvZXMgbm90IGV4aXN0IG9yCisgICAgICAgICAgLy8gZmlsZSBjb3VsZCBub3QgYmUgcmVtb3ZlZCBhbmQgc3RpbGwgZXhpc3RzCisgICAgICAgICAgYm9vbCBmaWxlX2V4aXN0c19vcl9mb3JjZWRfcmVtb3ZlID0gY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhhcmcpIHx8CisgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpGaWxlSXNTeW1saW5rKGFyZykgfHwgZm9yY2U7CisgICAgICAgICAgaWYgKGNtU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShhcmcpKSB7CisgICAgICAgICAgICBpZiAoIWNtUmVtb3ZlRGlyZWN0b3J5KGFyZywgcmVjdXJzaXZlKSkgeworICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSBpZiAoKCFmaWxlX2V4aXN0c19vcl9mb3JjZWRfcmVtb3ZlKSB8fAorICAgICAgICAgICAgICAgICAgICAgKCFjbVN5c3RlbVRvb2xzOjpSZW1vdmVGaWxlKGFyZykgJiYKKyAgICAgICAgICAgICAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGFyZykpKSB7CisgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzX29yX2ZvcmNlZF9yZW1vdmUpIHsKKyAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoCisgICAgICAgICAgICAgICAgIkZpbGUgdG8gcmVtb3ZlIGRvZXMgbm90IGV4aXN0IGFuZCBmb3JjZSBpcyBub3Qgc2V0OiAiICsgYXJnKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJGaWxlIGNhbid0IGJlIHJlbW92ZWQgYW5kIHN0aWxsIGV4aXN0OiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoIWF0X2xlYXN0X29uZV9maWxlKSB7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKCJNaXNzaW5nIGZpbGUvZGlyZWN0b3J5IHRvIHJlbW92ZSIpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIHJldHVybiByZXR1cm5fdmFsdWU7CisgICAgfQorCiAgICAgLy8gVG91Y2ggZmlsZQogICAgIGlmIChhcmdzWzFdID09ICJ0b3VjaCIgJiYgYXJncy5zaXplKCkgPiAyKSB7CiAgICAgICBmb3IgKGF1dG8gY29uc3QmIGFyZyA6IGNtTWFrZVJhbmdlKGFyZ3MpLmFkdmFuY2UoMikpIHsKQEAgLTg0OSw2ICs5MzAsMzMgQEAKICAgICAgIHJldHVybiBIYXNoU3VtRmlsZShhcmdzLCBjbUNyeXB0b0hhc2g6OkFsZ29TSEE1MTIpOwogICAgIH0KIAorICAgIC8vIENvbW1hbmQgdG8gY29uY2F0IGZpbGVzIGludG8gb25lCisgICAgaWYgKGFyZ3NbMV0gPT0gImNhdCIgJiYgYXJncy5zaXplKCkgPj0gMykgeworICAgICAgaW50IHJldHVybl92YWx1ZSA9IDA7CisgICAgICBmb3IgKGF1dG8gY29uc3QmIGFyZyA6IGNtTWFrZVJhbmdlKGFyZ3MpLmFkdmFuY2UoMikpIHsKKyAgICAgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItIikpIHsKKyAgICAgICAgICBpZiAoYXJnICE9ICItLSIpIHsKKyAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGFyZyArICI6IG9wdGlvbiBub3QgaGFuZGxlZCIpOworICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIWNtU3lzdGVtVG9vbHM6OlRlc3RGaWxlQWNjZXNzKGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zeXM6OlRFU1RfRklMRV9SRUFEKSAmJgorICAgICAgICAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OlRlc3RGaWxlQWNjZXNzKGFyZywgY21zeXM6OlRFU1RfRklMRV9PSykpIHsKKyAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihhcmcgKyAiOiBwZXJtaXNzaW9uIGRlbmllZCAoaWdub3JpbmcpIik7CisgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkoYXJnKSkgeworICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkVycm9yKGFyZyArICI6IGlzIGEgZGlyZWN0b3J5IChpZ25vcmluZykiKTsKKyAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxOworICAgICAgICB9IGVsc2UgaWYgKCFjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGFyZykpIHsKKyAgICAgICAgICBjbVN5c3RlbVRvb2xzOjpFcnJvcihhcmcgKyAiOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IChpZ25vcmluZykiKTsKKyAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGNtQ2F0RmlsZShhcmcpOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworICAgIH0KKwogICAgIC8vIENvbW1hbmQgdG8gY2hhbmdlIGRpcmVjdG9yeSBhbmQgcnVuIGEgcHJvZ3JhbS4KICAgICBpZiAoYXJnc1sxXSA9PSAiY2hkaXIiICYmIGFyZ3Muc2l6ZSgpID49IDQpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkaXJlY3RvcnkgPSBhcmdzWzJdOwpAQCAtOTExLDcgKzEwMTksNyBAQAogICAgIC8vIENvbW1hbmQgdG8gY3JlYXRlIGEgc3ltYm9saWMgbGluay4gIEZhaWxzIG9uIHBsYXRmb3JtcyBub3QKICAgICAvLyBzdXBwb3J0aW5nIHRoZW0uCiAgICAgaWYgKGFyZ3NbMV0gPT0gImNyZWF0ZV9zeW1saW5rIiAmJiBhcmdzLnNpemUoKSA9PSA0KSB7Ci0gICAgICBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbkZpbGVOYW1lID0gYXJnc1szXS5jX3N0cigpOworICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRlc3RpbmF0aW9uRmlsZU5hbWUgPSBhcmdzWzNdOwogICAgICAgaWYgKChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGRlc3RpbmF0aW9uRmlsZU5hbWUpIHx8CiAgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkZpbGVJc1N5bWxpbmsoZGVzdGluYXRpb25GaWxlTmFtZSkpICYmCiAgICAgICAgICAgIWNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoZGVzdGluYXRpb25GaWxlTmFtZSkpIHsKQEAgLTkyNyw2ICsxMDM1LDM0IEBACiAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICAvLyBDb21tYW5kIHRvIGNyZWF0ZSBhIGhhcmQgbGluay4gIEZhaWxzIG9uIHBsYXRmb3JtcyBub3QKKyAgICAvLyBzdXBwb3J0aW5nIHRoZW0uCisgICAgaWYgKGFyZ3NbMV0gPT0gImNyZWF0ZV9oYXJkbGluayIgJiYgYXJncy5zaXplKCkgPT0gNCkgeworICAgICAgY29uc3QgY2hhciogU291Y2VGaWxlTmFtZSA9IGFyZ3NbMl0uY19zdHIoKTsKKyAgICAgIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uRmlsZU5hbWUgPSBhcmdzWzNdLmNfc3RyKCk7CisKKyAgICAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyhTb3VjZUZpbGVOYW1lKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgImZhaWxlZCB0byBjcmVhdGUgaGFyZCBsaW5rIGJlY2F1c2Ugc291cmNlIHBhdGggJyIKKyAgICAgICAgICAgICAgICAgIDw8IFNvdWNlRmlsZU5hbWUgPDwgIicgZG9lcyBub3QgZXhpc3QgXG4iOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgaWYgKChjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGRlc3RpbmF0aW9uRmlsZU5hbWUpIHx8CisgICAgICAgICAgIGNtU3lzdGVtVG9vbHM6OkZpbGVJc1N5bWxpbmsoZGVzdGluYXRpb25GaWxlTmFtZSkpICYmCisgICAgICAgICAgIWNtU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoZGVzdGluYXRpb25GaWxlTmFtZSkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgZW1zZyA9IGNtU3lzdGVtVG9vbHM6OkdldExhc3RTeXN0ZW1FcnJvcigpOworICAgICAgICBzdGQ6OmNlcnIgPDwgImZhaWxlZCB0byBjcmVhdGUgaGFyZCBsaW5rICciIDw8IGRlc3RpbmF0aW9uRmlsZU5hbWUKKyAgICAgICAgICAgICAgICAgIDw8ICInIGJlY2F1c2UgZXhpc3RpbmcgcGF0aCBjYW5ub3QgYmUgcmVtb3ZlZDogIiA8PCBlbXNnCisgICAgICAgICAgICAgICAgICA8PCAiXG4iOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgaWYgKCFjbVN5c3RlbVRvb2xzOjpDcmVhdGVMaW5rKGFyZ3NbMl0sIGFyZ3NbM10pKSB7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgLy8gQ29tbWFuZCB0byBkbyBub3RoaW5nIHdpdGggYW4gZXhpdCBjb2RlIG9mIDAuCiAgICAgaWYgKGFyZ3NbMV0gPT0gInRydWUiKSB7CiAgICAgICByZXR1cm4gMDsKQEAgLTk3Niw4ICsxMTEyLDcgQEAKICAgICAgICAgaG9tZU91dERpciA9IGFyZ3NbNV07CiAgICAgICAgIHN0YXJ0T3V0RGlyID0gYXJnc1s2XTsKICAgICAgICAgZGVwSW5mbyA9IGFyZ3NbN107Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA5ICYmIGFyZ3NbOF0ubGVuZ3RoKCkgPj0gOCAmJgotICAgICAgICAgICAgYXJnc1s4XS5zdWJzdHIoMCwgOCkgPT0gIi0tY29sb3I9IikgeworICAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gOSAmJiBjbUhhc0xpdGVyYWxQcmVmaXgoYXJnc1s4XSwgIi0tY29sb3I9IikpIHsKICAgICAgICAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBjb2xvciBiYXNlZCBvbiB0aGUgc3dpdGNoIHZhbHVlLgogICAgICAgICAgIGNvbG9yID0gKGFyZ3NbOF0uc2l6ZSgpID09IDggfHwgY21Jc09uKGFyZ3NbOF0uc3Vic3RyKDgpKSk7CiAgICAgICAgIH0KQEAgLTEwMDcsMTMgKzExNDIsMTMgQEAKICAgICAgIGNtLlNldEhvbWVEaXJlY3RvcnkoaG9tZURpcik7CiAgICAgICBjbS5TZXRIb21lT3V0cHV0RGlyZWN0b3J5KGhvbWVPdXREaXIpOwogICAgICAgY20uR2V0Q3VycmVudFNuYXBzaG90KCkuU2V0RGVmYXVsdERlZmluaXRpb25zKCk7Ci0gICAgICBpZiAoY21HbG9iYWxHZW5lcmF0b3IqIGdnZCA9IGNtLkNyZWF0ZUdsb2JhbEdlbmVyYXRvcihnZW4pKSB7Ci0gICAgICAgIGNtLlNldEdsb2JhbEdlbmVyYXRvcihnZ2QpOworICAgICAgaWYgKGF1dG8gZ2dkID0gY20uQ3JlYXRlR2xvYmFsR2VuZXJhdG9yKGdlbikpIHsKKyAgICAgICAgY20uU2V0R2xvYmFsR2VuZXJhdG9yKHN0ZDo6bW92ZShnZ2QpKTsKICAgICAgICAgY21TdGF0ZVNuYXBzaG90IHNuYXBzaG90ID0gY20uR2V0Q3VycmVudFNuYXBzaG90KCk7CiAgICAgICAgIHNuYXBzaG90LkdldERpcmVjdG9yeSgpLlNldEN1cnJlbnRCaW5hcnkoc3RhcnRPdXREaXIpOwogICAgICAgICBzbmFwc2hvdC5HZXREaXJlY3RvcnkoKS5TZXRDdXJyZW50U291cmNlKHN0YXJ0RGlyKTsKLSAgICAgICAgY21NYWtlZmlsZSBtZihnZ2QsIHNuYXBzaG90KTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNtTG9jYWxHZW5lcmF0b3I+IGxnZChnZ2QtPkNyZWF0ZUxvY2FsR2VuZXJhdG9yKCZtZikpOworICAgICAgICBjbU1ha2VmaWxlIG1mKGNtLkdldEdsb2JhbEdlbmVyYXRvcigpLCBzbmFwc2hvdCk7CisgICAgICAgIGF1dG8gbGdkID0gY20uR2V0R2xvYmFsR2VuZXJhdG9yKCktPkNyZWF0ZUxvY2FsR2VuZXJhdG9yKCZtZik7CiAKICAgICAgICAgLy8gQWN0dWFsbHkgc2NhbiBkZXBlbmRlbmNpZXMuCiAgICAgICAgIHJldHVybiBsZ2QtPlVwZGF0ZURlcGVuZGVuY2llcyhkZXBJbmZvLCB2ZXJib3NlLCBjb2xvcikgPyAwIDogMjsKQEAgLTEwNTYsNiArMTE5MSwxMCBAQAogICAgICAgcmV0dXJuIGNtY21kOjpWaXN1YWxTdHVkaW9MaW5rKGFyZ3MsIDIpOwogICAgIH0KIAorICAgIGlmIChhcmdzWzFdID09ICJjbWFrZV9sbHZtX3JjIikgeworICAgICAgcmV0dXJuIGNtY21kOjpSdW5MTFZNUkMoYXJncyk7CisgICAgfQorCiAgICAgLy8gSW50ZXJuYWwgQ01ha2UgY29sb3IgbWFrZWZpbGUgc3VwcG9ydC4KICAgICBpZiAoYXJnc1sxXSA9PSAiY21ha2VfZWNob19jb2xvciIpIHsKICAgICAgIHJldHVybiBjbWNtZDo6RXhlY3V0ZUVjaG9Db2xvcihhcmdzKTsKQEAgLTExMDQsNyArMTI0Myw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgfSBlbHNlIGlmIChjbUhhc0xpdGVyYWxQcmVmaXgoYXJnLCAiLS1mb3JtYXQ9IikpIHsKICAgICAgICAgICAgIGZvcm1hdCA9IGFyZy5zdWJzdHIoOSk7Ci0gICAgICAgICAgICBpZiAoIWNtQ29udGFpbnMoa25vd25Gb3JtYXRzLCBmb3JtYXQpKSB7CisgICAgICAgICAgICBpZiAoIWNtOjpjb250YWlucyhrbm93bkZvcm1hdHMsIGZvcm1hdCkpIHsKICAgICAgICAgICAgICAgY21TeXN0ZW1Ub29sczo6RXJyb3IoIlVua25vd24gLUUgdGFyIC0tZm9ybWF0PSBhcmd1bWVudDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCk7CiAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMTIyMiw3ICsxMzYxLDcgQEAKICAgICAgICAgfSBlbHNlIGlmIChhcmcgPT0gIi0tZGVidWciKSB7CiAgICAgICAgICAgcGlwZS5jbGVhcigpOwogICAgICAgICAgIGlzRGVidWcgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGFyZy5zdWJzdHIoMCwgcGlwZVByZWZpeC5zaXplKCkpID09IHBpcGVQcmVmaXgpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjbUhhc1ByZWZpeChhcmcsIHBpcGVQcmVmaXgpKSB7CiAgICAgICAgICAgaXNEZWJ1ZyA9IGZhbHNlOwogICAgICAgICAgIHBpcGUgPSBhcmcuc3Vic3RyKHBpcGVQcmVmaXguc2l6ZSgpKTsKICAgICAgICAgICBpZiAocGlwZS5lbXB0eSgpKSB7CkBAIC0xMjY1LDE1ICsxNDA0LDEyIEBACiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAgICAgLy8gV3JpdGUgcmVnaXN0cnkgdmFsdWUKICAgICBpZiAoYXJnc1sxXSA9PSAid3JpdGVfcmVndiIgJiYgYXJncy5zaXplKCkgPiAzKSB7Ci0gICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6V3JpdGVSZWdpc3RyeVZhbHVlKGFyZ3NbMl0uY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1szXS5jX3N0cigpKQotICAgICAgICA/IDAKLSAgICAgICAgOiAxOworICAgICAgcmV0dXJuIGNtU3lzdGVtVG9vbHM6OldyaXRlUmVnaXN0cnlWYWx1ZShhcmdzWzJdLCBhcmdzWzNdKSA/IDAgOiAxOwogICAgIH0KIAogICAgIC8vIERlbGV0ZSByZWdpc3RyeSB2YWx1ZQogICAgIGlmIChhcmdzWzFdID09ICJkZWxldGVfcmVndiIgJiYgYXJncy5zaXplKCkgPiAyKSB7Ci0gICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6RGVsZXRlUmVnaXN0cnlWYWx1ZShhcmdzWzJdLmNfc3RyKCkpID8gMCA6IDE7CisgICAgICByZXR1cm4gY21TeXN0ZW1Ub29sczo6RGVsZXRlUmVnaXN0cnlWYWx1ZShhcmdzWzJdKSA/IDAgOiAxOwogICAgIH0KIAogICAgIC8vIFJlbW92ZSBmaWxlCkBAIC0xNDI5LDcgKzE1NjUsNyBAQAogICBib29sIG5ld2xpbmUgPSB0cnVlOwogICBzdGQ6OnN0cmluZyBwcm9ncmVzc0RpcjsKICAgZm9yIChhdXRvIGNvbnN0JiBhcmcgOiBjbU1ha2VSYW5nZShhcmdzKS5hZHZhbmNlKDIpKSB7Ci0gICAgaWYgKGFyZy5maW5kKCItLXN3aXRjaD0iKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmcsICItLXN3aXRjaD0iKSkgewogICAgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgY29sb3IgYmFzZWQgb24gdGhlIHN3aXRjaCB2YWx1ZS4KICAgICAgIHN0ZDo6c3RyaW5nIHZhbHVlID0gYXJnLnN1YnN0cig5KTsKICAgICAgIGlmICghdmFsdWUuZW1wdHkoKSkgewpAQCAtMTQ4NCw3ICsxNjIwLDcgQEAKICAgLy8gICBhcmdzWzNdID09IC0tdmVyYm9zZT0/CiAgIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICBpZiAoYXJncy5zaXplKCkgPj0gNCkgewotICAgIGlmIChhcmdzWzNdLmZpbmQoIi0tdmVyYm9zZT0iKSA9PSAwKSB7CisgICAgaWYgKGNtSGFzTGl0ZXJhbFByZWZpeChhcmdzWzNdLCAiLS12ZXJib3NlPSIpKSB7CiAgICAgICBpZiAoIWNtSXNPZmYoYXJnc1szXS5zdWJzdHIoMTApKSkgewogICAgICAgICB2ZXJib3NlID0gdHJ1ZTsKICAgICAgIH0KQEAgLTE1NzIsMTEgKzE3MDgsMTMgQEAKICAgY21WaXN1YWxTdHVkaW9XQ0VQbGF0Zm9ybVBhcnNlciBwYXJzZXIobmFtZS5jX3N0cigpKTsKICAgcGFyc2VyLlBhcnNlVmVyc2lvbih2ZXJzaW9uKTsKICAgaWYgKHBhcnNlci5Gb3VuZCgpKSB7Ci0gICAgc3RkOjpjb3V0IDw8ICJAZWNobyBvZmYiIDw8IHN0ZDo6ZW5kbDsKLSAgICBzdGQ6OmNvdXQgPDwgImVjaG8gRW52aXJvbm1lbnQgU2VsZWN0aW9uOiAiIDw8IG5hbWUgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAic2V0IFBBVEg9IiA8PCBwYXJzZXIuR2V0UGF0aERpcmVjdG9yaWVzKCkgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAic2V0IElOQ0xVREU9IiA8PCBwYXJzZXIuR2V0SW5jbHVkZURpcmVjdG9yaWVzKCkgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAic2V0IExJQj0iIDw8IHBhcnNlci5HZXRMaWJyYXJ5RGlyZWN0b3JpZXMoKSA8PCBzdGQ6OmVuZGw7CisgICAgLyogY2xhbmctZm9ybWF0IG9mZiAqLworICAgIHN0ZDo6Y291dCA8PCAiQGVjaG8gb2ZmXG4iCisgICAgICAgICAgICAgICAgICJlY2hvIEVudmlyb25tZW50IFNlbGVjdGlvbjogIiA8PCBuYW1lIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgInNldCBQQVRIPSIgPDwgcGFyc2VyLkdldFBhdGhEaXJlY3RvcmllcygpIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgInNldCBJTkNMVURFPSIgPDwgcGFyc2VyLkdldEluY2x1ZGVEaXJlY3RvcmllcygpIDw8ICJcbiIKKyAgICAgICAgICAgICAgICAgInNldCBMSUI9IiA8PCBwYXJzZXIuR2V0TGlicmFyeURpcmVjdG9yaWVzKCkgPDwgc3RkOjplbmRsOworICAgIC8qIGNsYW5nLWZvcm1hdCBvbiAqLwogICAgIHJldHVybiAwOwogICB9CiAjZWxzZQpAQCAtMTU4Nyw2ICsxNzI1LDEyNyBAQAogICByZXR1cm4gLTE7CiB9CiAKK2ludCBjbWNtZDo6UnVuUHJlcHJvY2Vzc29yKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnRlcm1lZGlhdGVfZmlsZSkKK3sKKworICBjbVVWUHJvY2Vzc0NoYWluQnVpbGRlciBidWlsZGVyOworCisgIHV2X2ZzX3QgZnNfcmVxOworICBpbnQgcHJlcHJvY2Vzc2VkRmlsZSA9CisgICAgdXZfZnNfb3BlbihudWxscHRyLCAmZnNfcmVxLCBpbnRlcm1lZGlhdGVfZmlsZS5jX3N0cigpLCBPX0NSRUFUIHwgT19SRFdSLAorICAgICAgICAgICAgICAgMDY0NCwgbnVsbHB0cik7CisgIHV2X2ZzX3JlcV9jbGVhbnVwKCZmc19yZXEpOworCisgIGJ1aWxkZXIKKyAgICAuU2V0RXh0ZXJuYWxTdHJlYW0oY21VVlByb2Nlc3NDaGFpbkJ1aWxkZXI6OlN0cmVhbV9PVVRQVVQsCisgICAgICAgICAgICAgICAgICAgICAgIHByZXByb2Nlc3NlZEZpbGUpCisgICAgLlNldEJ1aWx0aW5TdHJlYW0oY21VVlByb2Nlc3NDaGFpbkJ1aWxkZXI6OlN0cmVhbV9FUlJPUikKKyAgICAuQWRkQ29tbWFuZChjb21tYW5kKTsKKyAgYXV0byBwcm9jZXNzID0gYnVpbGRlci5TdGFydCgpOworICBpZiAoIXByb2Nlc3MuVmFsaWQoKSkgeworICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIHN0YXJ0IHByZXByb2Nlc3Nvci4iOworICAgIHJldHVybiAxOworICB9CisgIGlmICghcHJvY2Vzcy5XYWl0KCkpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkZhaWxlZCB0byB3YWl0IGZvciBwcmVwcm9jZXNzb3IiOworICAgIHJldHVybiAxOworICB9CisgIGF1dG8gc3RhdHVzID0gcHJvY2Vzcy5HZXRTdGF0dXMoKTsKKyAgaWYgKCFzdGF0dXNbMF0gfHwgc3RhdHVzWzBdLT5FeGl0U3RhdHVzICE9IDApIHsKKyAgICBhdXRvIGVycm9yU3RyZWFtID0gcHJvY2Vzcy5FcnJvclN0cmVhbSgpOworICAgIGlmIChlcnJvclN0cmVhbSkgeworICAgICAgc3RkOjpjZXJyIDw8IGVycm9yU3RyZWFtLT5yZGJ1ZigpOworICAgIH0KKworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBjbWNtZDo6UnVuTExWTVJDKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncykKK3sKKyAgLy8gVGhlIGFyZ3VtZW50cyBhcmUKKyAgLy8gICBhcmdzWzBdID09IDxjbWFrZS1leGVjdXRhYmxlPgorICAvLyAgIGFyZ3NbMV0gPT0gY21ha2VfbGx2bV9yYworICAvLyAgIGFyZ3NbMl0gPT0gc291cmNlX2ZpbGVfcGF0aAorICAvLyAgIGFyZ3NbM10gPT0gaW50ZXJtZWRpYXRlX2ZpbGUKKyAgLy8gICBhcmdzWzQuLm5dID09IHByZXByb2Nlc3MrYXJncworICAvLyAgIGFyZ3NbbisxXSA9PSAtLQorICAvLyAgIGFyZ3NbbisyLi4uXSA9PSBsbHZtLXJjK2FyZ3MKKyAgaWYgKGFyZ3Muc2l6ZSgpIDwgMykgeworICAgIHN0ZDo6Y2VyciA8PCAiSW52YWxpZCBjbWFrZV9sbHZtX3JjIGFyZ3VtZW50cyI7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGludGVybWVkaWF0ZV9maWxlID0gYXJnc1szXTsKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZV9maWxlID0gYXJnc1syXTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHByZXByb2Nlc3M7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXNvdXJjZV9jb21waWxlOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIHBBcmdUZ3QgPSAmcHJlcHJvY2VzczsKKyAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgYXJnIDogY21NYWtlUmFuZ2UoYXJncykuYWR2YW5jZSg0KSkgeworICAgIGlmIChhcmcgPT0gIi0tIikgeworICAgICAgcEFyZ1RndCA9ICZyZXNvdXJjZV9jb21waWxlOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoYXJnLmZpbmQoIlNPVVJDRV9ESVIiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VEaXJBcmcgPSBhcmc7CisgICAgICAgIGNtU3lzdGVtVG9vbHM6OlJlcGxhY2VTdHJpbmcoCisgICAgICAgICAgc291cmNlRGlyQXJnLCAiU09VUkNFX0RJUiIsCisgICAgICAgICAgY21TeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVQYXRoKHNvdXJjZV9maWxlKSk7CisgICAgICAgIHBBcmdUZ3QtPnB1c2hfYmFjayhzb3VyY2VEaXJBcmcpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcEFyZ1RndC0+cHVzaF9iYWNrKGFyZyk7CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChwcmVwcm9jZXNzLmVtcHR5KCkpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkVtcHR5IHByZXByb2Nlc3NpbmcgY29tbWFuZCI7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgaWYgKHJlc291cmNlX2NvbXBpbGUuZW1wdHkoKSkgeworICAgIHN0ZDo6Y2VyciA8PCAiRW1wdHkgcmVzb3VyY2UgY29tcGlsYXRpb24gY29tbWFuZCI7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBhdXRvIHJlc3VsdCA9IFJ1blByZXByb2Nlc3NvcihwcmVwcm9jZXNzLCBpbnRlcm1lZGlhdGVfZmlsZSk7CisgIGlmIChyZXN1bHQgIT0gMCkgeworCisgICAgY21TeXN0ZW1Ub29sczo6UmVtb3ZlRmlsZShpbnRlcm1lZGlhdGVfZmlsZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBjbVVWUHJvY2Vzc0NoYWluQnVpbGRlciBidWlsZGVyOworCisgIGJ1aWxkZXIuU2V0QnVpbHRpblN0cmVhbShjbVVWUHJvY2Vzc0NoYWluQnVpbGRlcjo6U3RyZWFtX09VVFBVVCkKKyAgICAuU2V0QnVpbHRpblN0cmVhbShjbVVWUHJvY2Vzc0NoYWluQnVpbGRlcjo6U3RyZWFtX0VSUk9SKQorICAgIC5BZGRDb21tYW5kKHJlc291cmNlX2NvbXBpbGUpOworICBhdXRvIHByb2Nlc3MgPSBidWlsZGVyLlN0YXJ0KCk7CisgIHJlc3VsdCA9IDA7CisgIGlmICghcHJvY2Vzcy5WYWxpZCgpKSB7CisgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gc3RhcnQgcmVzb3VyY2UgY29tcGlsZXIuIjsKKyAgICByZXN1bHQgPSAxOworICB9IGVsc2UgeworICAgIGlmICghcHJvY2Vzcy5XYWl0KCkpIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIHdhaXQgZm9yIHJlc291cmNlIGNvbXBpbGVyIjsKKyAgICAgIHJlc3VsdCA9IDE7CisgICAgfQorICB9CisKKyAgY21TeXN0ZW1Ub29sczo6UmVtb3ZlRmlsZShpbnRlcm1lZGlhdGVfZmlsZSk7CisgIGlmIChyZXN1bHQgIT0gMCkgeworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgYXV0byBzdGF0dXMgPSBwcm9jZXNzLkdldFN0YXR1cygpOworICBpZiAoIXN0YXR1c1swXSB8fCBzdGF0dXNbMF0tPkV4aXRTdGF0dXMgIT0gMCkgeworICAgIGF1dG8gZXJyb3JTdHJlYW0gPSBwcm9jZXNzLkVycm9yU3RyZWFtKCk7CisgICAgaWYgKGVycm9yU3RyZWFtKSB7CisgICAgICBzdGQ6OmNlcnIgPDwgZXJyb3JTdHJlYW0tPnJkYnVmKCk7CisgICAgfQorICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKIGNsYXNzIGNtVlNMaW5rCiB7CiAgIGludCBUeXBlOwpAQCAtMTY0Miw3ICsxOTAxLDcgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGV4cGFuZGVkQXJnczsKICAgZm9yIChzdGQ6OnN0cmluZyBjb25zdCYgaSA6IGFyZ3MpIHsKICAgICAvLyBjaGVjayBmb3Igbm1ha2UgdGVtcG9yYXJ5IGZpbGVzCi0gICAgaWYgKGlbMF0gPT0gJ0AnICYmIGkuZmluZCgiQENNYWtlRmlsZXMiKSAhPSAwKSB7CisgICAgaWYgKGlbMF0gPT0gJ0AnICYmICFjbUhhc0xpdGVyYWxQcmVmaXgoaSwgIkBDTWFrZUZpbGVzIikpIHsKICAgICAgIGNtc3lzOjppZnN0cmVhbSBmaW4oaS5zdWJzdHIoMSkuY19zdHIoKSk7CiAgICAgICBzdGQ6OnN0cmluZyBsaW5lOwogICAgICAgd2hpbGUgKGNtU3lzdGVtVG9vbHM6OkdldExpbmVGcm9tU3RyZWFtKGZpbiwgbGluZSkpIHsKQEAgLTE3NjgsOSArMjAyNyw4IEBACiAKICAgLy8gUGFyc2UgdGhlIGxpbmsgY29tbWFuZCB0byBleHRyYWN0IGluZm9ybWF0aW9uIHdlIG5lZWQuCiAgIGZvciAoOyBhcmcgIT0gYXJnRW5kOyArK2FyZykgewotICAgIGlmIChjbVN5c3RlbVRvb2xzOjpTdHJ1Y21wKGFyZy0+Y19zdHIoKSwgIi9JTkNSRU1FTlRBTDpZRVMiKSA9PSAwKSB7Ci0gICAgICB0aGlzLT5JbmNyZW1lbnRhbCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChjbVN5c3RlbVRvb2xzOjpTdHJ1Y21wKGFyZy0+Y19zdHIoKSwgIi9JTkNSRU1FTlRBTCIpID09IDApIHsKKyAgICBpZiAoY21TeXN0ZW1Ub29sczo6U3RydWNtcChhcmctPmNfc3RyKCksICIvSU5DUkVNRU5UQUw6WUVTIikgPT0gMCB8fAorICAgICAgICBjbVN5c3RlbVRvb2xzOjpTdHJ1Y21wKGFyZy0+Y19zdHIoKSwgIi9JTkNSRU1FTlRBTCIpID09IDApIHsKICAgICAgIHRoaXMtPkluY3JlbWVudGFsID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGNtU3lzdGVtVG9vbHM6OlN0cnVjbXAoYXJnLT5jX3N0cigpLCAiL01BTklGRVNUOk5PIikgPT0gMCkgewogICAgICAgdGhpcy0+TGlua0dlbmVyYXRlc01hbmlmZXN0ID0gZmFsc2U7CkBAIC0xODgwLDEyICsyMTM4LDE4IEBACiAgIH0KIAogICAvLyBJZiB3ZSBoYXZlIG5vdCBwcmV2aW91c2x5IGdlbmVyYXRlZCBhIG1hbmlmZXN0IGZpbGUsCi0gIC8vIGdlbmVyYXRlIGFuIGVtcHR5IG9uZSBzbyB0aGUgcmVzb3VyY2UgY29tcGlsZXIgc3VjY2VlZHMuCisgIC8vIGdlbmVyYXRlIGEgbWFuaWZlc3QgZmlsZSBzbyB0aGUgcmVzb3VyY2UgY29tcGlsZXIgc3VjY2VlZHMuCiAgIGlmICghY21TeXN0ZW1Ub29sczo6RmlsZUV4aXN0cyh0aGlzLT5NYW5pZmVzdEZpbGUpKSB7CiAgICAgaWYgKHRoaXMtPlZlcmJvc2UpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiQ3JlYXRlIGVtcHR5OiAiIDw8IHRoaXMtPk1hbmlmZXN0RmlsZSA8PCAiXG4iOwogICAgIH0KLSAgICBjbXN5czo6b2ZzdHJlYW0gZm91dFRtcCh0aGlzLT5NYW5pZmVzdEZpbGUuY19zdHIoKSk7CisgICAgaWYgKHRoaXMtPlVzZXJNYW5pZmVzdHMuZW1wdHkoKSkgeworICAgICAgLy8gZ2VuZXJhdGUgYW4gZW1wdHkgbWFuaWZlc3QgYmVjYXVzZSB0aGVyZSBhcmUgbm8gdXNlciBwcm92aWRlZAorICAgICAgLy8gbWFuaWZlc3QgZmlsZXMuCisgICAgICBjbXN5czo6b2ZzdHJlYW0gZm91dFRtcCh0aGlzLT5NYW5pZmVzdEZpbGUuY19zdHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPlJ1bk1UKCIvb3V0OiIgKyB0aGlzLT5NYW5pZmVzdEZpbGUsIGZhbHNlKTsKKyAgICB9CiAgIH0KIAogICAvLyBDb21waWxlIHRoZSByZXNvdXJjZSBmaWxlLgpAQCAtMTk1MywxMCArMjIxNywxMyBAQAogICBtdENvbW1hbmQucHVzaF9iYWNrKHRoaXMtPk10UGF0aC5lbXB0eSgpID8gIm10IiA6IHRoaXMtPk10UGF0aCk7CiAgIG10Q29tbWFuZC5lbXBsYWNlX2JhY2soIi9ub2xvZ28iKTsKICAgbXRDb21tYW5kLmVtcGxhY2VfYmFjaygiL21hbmlmZXN0Iik7Ci0gIGlmICh0aGlzLT5MaW5rR2VuZXJhdGVzTWFuaWZlc3QpIHsKKworICAvLyBhZGQgdGhlIGxpbmtlciBnZW5lcmF0ZWQgbWFuaWZlc3QgaWYgdGhlIGZpbGUgZXhpc3RzLgorICBpZiAodGhpcy0+TGlua0dlbmVyYXRlc01hbmlmZXN0ICYmCisgICAgICBjbVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRoaXMtPkxpbmtlck1hbmlmZXN0RmlsZSkpIHsKICAgICBtdENvbW1hbmQucHVzaF9iYWNrKHRoaXMtPkxpbmtlck1hbmlmZXN0RmlsZSk7CiAgIH0KLSAgY21BcHBlbmQobXRDb21tYW5kLCB0aGlzLT5Vc2VyTWFuaWZlc3RzKTsKKyAgY206OmFwcGVuZChtdENvbW1hbmQsIHRoaXMtPlVzZXJNYW5pZmVzdHMpOwogICBtdENvbW1hbmQucHVzaF9iYWNrKG91dCk7CiAgIGlmIChub3RpZnkpIHsKICAgICAvLyBBZGQgYW4gdW5kb2N1bWVudGVkIG9wdGlvbiB0aGF0IGVuYWJsZXMgYSBzcGVjaWFsIHJldHVybgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtY21kLmggYi9Tb3VyY2UvY21jbWQuaAppbmRleCAxN2YyZjlhLi41YjZjODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21jbWQuaAorKysgYi9Tb3VyY2UvY21jbWQuaApAQCAtMzEsNiArMzEsOSBAQAogICBzdGF0aWMgaW50IEV4ZWN1dGVMaW5rU2NyaXB0KHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncyk7CiAgIHN0YXRpYyBpbnQgV2luZG93c0NFRW52aXJvbm1lbnQoY29uc3QgY2hhciogdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CisgIHN0YXRpYyBpbnQgUnVuUHJlcHJvY2Vzc29yKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGludGVybWVkaWF0ZV9maWxlKTsKKyAgc3RhdGljIGludCBSdW5MTFZNUkMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBhcmdzKTsKICAgc3RhdGljIGludCBWaXN1YWxTdHVkaW9MaW5rKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgYXJncywgaW50IHR5cGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2N0ZXN0LmN4eCBiL1NvdXJjZS9jdGVzdC5jeHgKaW5kZXggMGQ2NTkwMi4uM2I1YmY4YyAxMDA2NDQKLS0tIGEvU291cmNlL2N0ZXN0LmN4eAorKysgYi9Tb3VyY2UvY3Rlc3QuY3h4CkBAIC0zNSw2ICszNSw3IEBACiAgIHsgIi0tb3V0cHV0LW9uLWZhaWx1cmUiLAogICAgICJPdXRwdXQgYW55dGhpbmcgb3V0cHV0dGVkIGJ5IHRoZSB0ZXN0IHByb2dyYW0gIgogICAgICJpZiB0aGUgdGVzdCBzaG91bGQgZmFpbC4iIH0sCisgIHsgIi0tc3RvcC1vbi1mYWlsdXJlIiwgIlN0b3AgcnVubmluZyB0aGUgdGVzdHMgYWZ0ZXIgb25lIGhhcyBmYWlsZWQuIiB9LAogICB7ICItLXRlc3Qtb3V0cHV0LXNpemUtcGFzc2VkIDxzaXplPiIsCiAgICAgIkxpbWl0IHRoZSBvdXRwdXQgZm9yIHBhc3NlZCB0ZXN0cyAiCiAgICAgInRvIDxzaXplPiBieXRlcyIgfSwKQEAgLTk4LDkgKzk5LDEyIEBACiAgICAgIlJ1biBhIHNwZWNpZmljIG51bWJlciBvZiB0ZXN0cyBieSBudW1iZXIuIiB9LAogICB7ICItVSwgLS11bmlvbiIsICJUYWtlIHRoZSBVbmlvbiBvZiAtSSBhbmQgLVIiIH0sCiAgIHsgIi0tcmVydW4tZmFpbGVkIiwgIlJ1biBvbmx5IHRoZSB0ZXN0cyB0aGF0IGZhaWxlZCBwcmV2aW91c2x5IiB9LAotICB7ICItLXJlcGVhdC11bnRpbC1mYWlsIDxuPiIsCi0gICAgIlJlcXVpcmUgZWFjaCB0ZXN0IHRvIHJ1biA8bj4gIgotICAgICJ0aW1lcyB3aXRob3V0IGZhaWxpbmcgaW4gb3JkZXIgdG8gcGFzcyIgfSwKKyAgeyAiLS1yZXBlYXQgdW50aWwtZmFpbDo8bj4sIC0tcmVwZWF0LXVudGlsLWZhaWwgPG4+IiwKKyAgICAiUmVxdWlyZSBlYWNoIHRlc3QgdG8gcnVuIDxuPiB0aW1lcyB3aXRob3V0IGZhaWxpbmcgaW4gb3JkZXIgdG8gcGFzcyIgfSwKKyAgeyAiLS1yZXBlYXQgdW50aWwtcGFzczo8bj4iLAorICAgICJBbGxvdyBlYWNoIHRlc3QgdG8gcnVuIHVwIHRvIDxuPiB0aW1lcyBpbiBvcmRlciB0byBwYXNzIiB9LAorICB7ICItLXJlcGVhdCBhZnRlci10aW1lb3V0OjxuPiIsCisgICAgIkFsbG93IGVhY2ggdGVzdCB0byBydW4gdXAgdG8gPG4+IHRpbWVzIGlmIGl0IHRpbWVzIG91dCIgfSwKICAgeyAiLS1tYXgtd2lkdGggPHdpZHRoPiIsICJTZXQgdGhlIG1heCB3aWR0aCBmb3IgYSB0ZXN0IG5hbWUgdG8gb3V0cHV0IiB9LAogICB7ICItLWludGVyYWN0aXZlLWRlYnVnLW1vZGUgWzB8MV0iLCAiU2V0IHRoZSBpbnRlcmFjdGl2ZSBtb2RlIHRvIDAgb3IgMS4iIH0sCiAgIHsgIi0tcmVzb3VyY2Utc3BlYy1maWxlIDxmaWxlPiIsICJTZXQgdGhlIHJlc291cmNlIHNwZWMgZmlsZSB0byB1c2UuIiB9LApAQCAtMTQxLDYgKzE0NSw4IEBACiAgIHsgIi0taHR0cDEuMCIsICJTdWJtaXQgdXNpbmcgSFRUUCAxLjAuIiB9LAogICB7ICItLW5vLWNvbXByZXNzLW91dHB1dCIsICJEbyBub3QgY29tcHJlc3MgdGVzdCBvdXRwdXQgd2hlbiBzdWJtaXR0aW5nLiIgfSwKICAgeyAiLS1wcmludC1sYWJlbHMiLCAiUHJpbnQgYWxsIGF2YWlsYWJsZSB0ZXN0IGxhYmVscy4iIH0sCisgIHsgIi0tbm8tdGVzdHM9PFtlcnJvcnxpZ25vcmVdPiIsCisgICAgIlJlZ2FyZCBubyB0ZXN0cyBmb3VuZCBlaXRoZXIgYXMgJ2Vycm9yJyBvciAnaWdub3JlJyBpdC4iIH0sCiAgIHsgbnVsbHB0ciwgbnVsbHB0ciB9CiB9OwogCkBAIC0xNjEsNyArMTY3LDYgQEAKICAgYXJndiA9IGVuY29kaW5nX2FyZ3MuYXJndigpOwogCiAgIGNtU3lzdGVtVG9vbHM6OkRvTm90SW5oZXJpdFN0ZFBpcGVzKCk7Ci0gIGNtU3lzdGVtVG9vbHM6OkVuYWJsZU1TVkNEZWJ1Z0hvb2soKTsKICAgY21TeXN0ZW1Ub29sczo6SW5pdGlhbGl6ZUxpYlVWKCk7CiAgIGNtU3lzdGVtVG9vbHM6OkZpbmRDTWFrZVJlc291cmNlcyhhcmd2WzBdKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0Jhc2U2NC5jIGIvU291cmNlL2t3c3lzL0Jhc2U2NC5jCmluZGV4IGJmODc2ZjIuLjQyNjUwMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9CYXNlNjQuYworKysgYi9Tb3VyY2Uva3dzeXMvQmFzZTY0LmMKQEAgLTEzMCw3ICsxMzAsMTAgQEAKIC8qIERlY29kZSA0IGJ5dGVzIGludG8gYSAzIGJ5dGUgc3RyaW5nLiAqLwogaW50IGt3c3lzQmFzZTY0X0RlY29kZTMoY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCB1bnNpZ25lZCBjaGFyKiBkZXN0KQogewotICB1bnNpZ25lZCBjaGFyIGQwLCBkMSwgZDIsIGQzOworICB1bnNpZ25lZCBjaGFyIGQwOworICB1bnNpZ25lZCBjaGFyIGQxOworICB1bnNpZ25lZCBjaGFyIGQyOworICB1bnNpZ25lZCBjaGFyIGQzOwogCiAgIGQwID0ga3dzeXNCYXNlNjREZWNvZGVDaGFyKHNyY1swXSk7CiAgIGQxID0ga3dzeXNCYXNlNjREZWNvZGVDaGFyKHNyY1sxXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uva3dzeXMvQ01ha2VMaXN0cy50eHQKaW5kZXggMDliY2RiOS4uYjBhODU0MiAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9rd3N5cy9DTWFrZUxpc3RzLnR4dApAQCAtMTEsOSArMTEsOSBAQAogIyBiZSB1c2VkLiAgQWxsIGNsYXNzZXMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUaGUgQ01ha2UgbGlzdGZpbGUKICMgYWJvdmUgdGhpcyBvbmUgY29uZmlndXJlcyB0aGUgbGlicmFyeSBhcyBmb2xsb3dzOgogIwotIyAgU0VUKEtXU1lTX05BTUVTUEFDRSBmb29zeXMpCi0jICBTRVQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKSAgICAjIEVuYWJsZSBEaXJlY3RvcnkgY2xhc3MuCi0jICBTVUJESVJTKGt3c3lzKQorIyAgc2V0KEtXU1lTX05BTUVTUEFDRSBmb29zeXMpCisjICBzZXQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKSAgICAjIEVuYWJsZSBEaXJlY3RvcnkgY2xhc3MuCisjICBhZGRfc3ViZGlyZWN0b3J5KGt3c3lzKQogIwogIyBPcHRpb25hbCBzZXR0aW5ncyBhcmUgYXMgZm9sbG93czoKICMKQEAgLTM5LDggKzM5LDggQEAKICMKICMgICAgRXhhbXBsZToKICMKLSMgICAgICBTRVQoS1dTWVNfSEVBREVSX1JPT1QgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQotIyAgICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQorIyAgICAgIHNldChLV1NZU19IRUFERVJfUk9PVCAke1BST0pFQ1RfQklOQVJZX0RJUn0pCisjICAgICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke1BST0pFQ1RfQklOQVJZX0RJUn0pCiAjCiAjICBLV1NZU19DWFhfU1RBTkRBUkQgICAgICAgICA9IEEgdmFsdWUgZm9yIENNQUtFX0NYWF9TVEFOREFSRCB3aXRoaW4gS1dTeXMuCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0byBlbXB0eSBzdHJpbmcgdG8gdXNlIG5vIGRlZmF1bHQgdmFsdWUuCkBAIC02NSwxMSArNjUsMTEgQEAKICMKICMgICAgRXhhbXBsZToKICMKLSMgICAgICBTRVQoS1dTWVNfSU5TVEFMTF9CSU5fRElSIGJpbikKLSMgICAgICBTRVQoS1dTWVNfSU5TVEFMTF9MSUJfRElSIGxpYikKLSMgICAgICBTRVQoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUiBpbmNsdWRlKQotIyAgICAgIFNFVChLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUgUnVudGltZSkKLSMgICAgICBTRVQoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCBEZXZlbG9wbWVudCkKKyMgICAgICBzZXQoS1dTWVNfSU5TVEFMTF9CSU5fRElSIGJpbikKKyMgICAgICBzZXQoS1dTWVNfSU5TVEFMTF9MSUJfRElSIGxpYikKKyMgICAgICBzZXQoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUiBpbmNsdWRlKQorIyAgICAgIHNldChLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUgUnVudGltZSkKKyMgICAgICBzZXQoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCBEZXZlbG9wbWVudCkKIAogIyBPbmNlIGNvbmZpZ3VyZWQsIGt3c3lzIHNob3VsZCBiZSB1c2VkIGFzIGZvbGxvd3MgZnJvbSBDIG9yIEMrKyBjb2RlOgogIwpAQCAtODYsMzMgKzg2LDMzIEBACiAjIGFueSBvdXRzaWRlIG1haWxpbmcgbGlzdCBhbmQgbm8gZG9jdW1lbnRhdGlvbiBvZiB0aGUgY2hhbmdlIHdpbGwgYmUKICMgd3JpdHRlbi4KIAotQ01BS0VfTUlOSU1VTV9SRVFVSVJFRChWRVJTSU9OIDMuMSBGQVRBTF9FUlJPUikKLUZPUkVBQ0gocAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSBGQVRBTF9FUlJPUikKK2ZvcmVhY2gocAogICAgIENNUDAwNTYgIyBDTWFrZSAzLjIsIEhvbm9yIGxpbmsgZmxhZ3MgaW4gdHJ5X2NvbXBpbGUoKSBzb3VyY2UtZmlsZSBzaWduYXR1cmUuCiAgICAgQ01QMDA2MyAjIENNYWtlIDMuMywgSG9ub3IgdmlzaWJpbGl0eSBwcm9wZXJ0aWVzIGZvciBhbGwgdGFyZ2V0IHR5cGVzLgogICAgIENNUDAwNjcgIyBDTWFrZSAzLjgsIEhvbm9yIGxhbmd1YWdlIHN0YW5kYXJkIGluIHRyeV9jb21waWxlIHNvdXJjZS1maWxlIHNpZ25hdHVyZS4KICAgICBDTVAwMDY5ICMgQ01ha2UgMy45LCBJTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OIGlzIGVuZm9yY2VkIHdoZW4gZW5hYmxlZC4KICAgICApCi0gIElGKFBPTElDWSAke3B9KQotICAgIENNQUtFX1BPTElDWShTRVQgJHtwfSBORVcpCi0gIEVORElGKCkKLUVOREZPUkVBQ0goKQorICBpZihQT0xJQ1kgJHtwfSkKKyAgICBjbWFrZV9wb2xpY3koU0VUICR7cH0gTkVXKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIElmIGEgbmFtZXNwYWNlIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSAia3dzeXMiIGFuZCBlbmFibGUgdGVzdGluZy4KICMgVGhpcyBzaG91bGQgYmUgdGhlIGNhc2Ugb25seSB3aGVuIGt3c3lzIGlzIG5vdCBpbmNsdWRlZCBpbnNpZGUKICMgYW5vdGhlciBwcm9qZWN0IGFuZCBpcyBiZWluZyB0ZXN0ZWQuCi1JRihOT1QgS1dTWVNfTkFNRVNQQUNFKQotICBTRVQoS1dTWVNfTkFNRVNQQUNFICJrd3N5cyIpCi0gIFNFVChLV1NZU19TVEFOREFMT05FIDEpCi1FTkRJRigpCitpZihOT1QgS1dTWVNfTkFNRVNQQUNFKQorICBzZXQoS1dTWVNfTkFNRVNQQUNFICJrd3N5cyIpCisgIHNldChLV1NZU19TVEFOREFMT05FIDEpCitlbmRpZigpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgcHJvamVjdCBuYW1lIGlzIHRoYXQgb2YgdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UuCi1QUk9KRUNUKCR7S1dTWVNfTkFNRVNQQUNFfSkKK3Byb2plY3QoJHtLV1NZU19OQU1FU1BBQ0V9KQogCiAjIFRlbGwgQ01ha2UgaG93IHRvIGZvbGxvdyBkZXBlbmRlbmNpZXMgb2Ygc291cmNlcyBpbiB0aGlzIGRpcmVjdG9yeS4KLVNFVF9QUk9QRVJUWShESVJFQ1RPUlkKK3NldF9wcm9wZXJ0eShESVJFQ1RPUlkKICAgUFJPUEVSVFkgSU1QTElDSVRfREVQRU5EU19JTkNMVURFX1RSQU5TRk9STQogICAiS1dTWVNfSEVBREVSKCUpPTwke0tXU1lTX05BTUVTUEFDRX0vJT4iCiAgICkKQEAgLTEzMSwzMDkgKzEzMSwyNTMgQEAKIGVuZGlmKCkKIAogIyBTZWxlY3QgbGlicmFyeSBjb21wb25lbnRzLgotSUYoS1dTWVNfU1RBTkRBTE9ORSBPUiBDTWFrZV9TT1VSQ0VfRElSKQotICBTRVQoS1dTWVNfRU5BQkxFX0MgMSkKK2lmKEtXU1lTX1NUQU5EQUxPTkUgT1IgQ01ha2VfU09VUkNFX0RJUikKKyAgc2V0KEtXU1lTX0VOQUJMRV9DIDEpCiAgICMgRW5hYmxlIGFsbCBjb21wb25lbnRzLgotICBTRVQoS1dTWVNfVVNFX0Jhc2U2NCAxKQotICBTRVQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKQotICBTRVQoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIgMSkKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotICBTRVQoS1dTWVNfVVNFX0dsb2IgMSkKLSAgU0VUKEtXU1lTX1VTRV9NRDUgMSkKLSAgU0VUKEtXU1lTX1VTRV9Qcm9jZXNzIDEpCi0gIFNFVChLV1NZU19VU0VfUmVndWxhckV4cHJlc3Npb24gMSkKLSAgU0VUKEtXU1lTX1VTRV9TeXN0ZW0gMSkKLSAgU0VUKEtXU1lTX1VTRV9TeXN0ZW1Ub29scyAxKQotICBTRVQoS1dTWVNfVVNFX0NvbW1hbmRMaW5lQXJndW1lbnRzIDEpCi0gIFNFVChLV1NZU19VU0VfVGVybWluYWwgMSkKLSAgU0VUKEtXU1lTX1VTRV9JT1N0cmVhbSAxKQotICBTRVQoS1dTWVNfVVNFX0ZTdHJlYW0gMSkKLSAgU0VUKEtXU1lTX1VTRV9TdHJpbmcgMSkKLSAgU0VUKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbiAxKQotICBTRVQoS1dTWVNfVVNFX0NvbnNvbGVCdWYgMSkKLUVORElGKCkKKyAgc2V0KEtXU1lTX1VTRV9CYXNlNjQgMSkKKyAgc2V0KEtXU1lTX1VTRV9EaXJlY3RvcnkgMSkKKyAgc2V0KEtXU1lTX1VTRV9EeW5hbWljTG9hZGVyIDEpCisgIHNldChLV1NZU19VU0VfRW5jb2RpbmcgMSkKKyAgc2V0KEtXU1lTX1VTRV9HbG9iIDEpCisgIHNldChLV1NZU19VU0VfTUQ1IDEpCisgIHNldChLV1NZU19VU0VfUHJvY2VzcyAxKQorICBzZXQoS1dTWVNfVVNFX1JlZ3VsYXJFeHByZXNzaW9uIDEpCisgIHNldChLV1NZU19VU0VfU3lzdGVtIDEpCisgIHNldChLV1NZU19VU0VfU3lzdGVtVG9vbHMgMSkKKyAgc2V0KEtXU1lTX1VTRV9Db21tYW5kTGluZUFyZ3VtZW50cyAxKQorICBzZXQoS1dTWVNfVVNFX1Rlcm1pbmFsIDEpCisgIHNldChLV1NZU19VU0VfRlN0cmVhbSAxKQorICBzZXQoS1dTWVNfVVNFX1N0cmluZyAxKQorICBzZXQoS1dTWVNfVVNFX1N5c3RlbUluZm9ybWF0aW9uIDEpCisgIHNldChLV1NZU19VU0VfQ29uc29sZUJ1ZiAxKQorZW5kaWYoKQogCiAjIEVuZm9yY2UgY29tcG9uZW50IGRlcGVuZGVuY2llcy4KLUlGKEtXU1lTX1VTRV9TeXN0ZW1Ub29scykKLSAgU0VUKEtXU1lTX1VTRV9EaXJlY3RvcnkgMSkKLSAgU0VUKEtXU1lTX1VTRV9GU3RyZWFtIDEpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLUVORElGKCkKLUlGKEtXU1lTX1VTRV9HbG9iKQotICBTRVQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKQotICBTRVQoS1dTWVNfVVNFX1N5c3RlbVRvb2xzIDEpCi0gIFNFVChLV1NZU19VU0VfUmVndWxhckV4cHJlc3Npb24gMSkKLSAgU0VUKEtXU1lTX1VTRV9GU3RyZWFtIDEpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLUVORElGKCkKLUlGKEtXU1lTX1VTRV9Qcm9jZXNzKQotICBTRVQoS1dTWVNfVVNFX1N5c3RlbSAxKQotICBTRVQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCi1FTkRJRigpCi1JRihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCi0gIFNFVChLV1NZU19VU0VfUHJvY2VzcyAxKQotRU5ESUYoKQotSUYoS1dTWVNfVVNFX1N5c3RlbSkKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotRU5ESUYoKQotSUYoS1dTWVNfVVNFX0RpcmVjdG9yeSkKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotRU5ESUYoKQotSUYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCi0gIFNFVChLV1NZU19VU0VfRW5jb2RpbmcgMSkKLUVORElGKCkKLUlGKEtXU1lTX1VTRV9GU3RyZWFtKQotICBTRVQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCi1FTkRJRigpCi1JRihLV1NZU19VU0VfQ29uc29sZUJ1ZikKLSAgU0VUKEtXU1lTX1VTRV9FbmNvZGluZyAxKQotRU5ESUYoKQoraWYoS1dTWVNfVVNFX1N5c3RlbVRvb2xzKQorICBzZXQoS1dTWVNfVVNFX0RpcmVjdG9yeSAxKQorICBzZXQoS1dTWVNfVVNFX0ZTdHJlYW0gMSkKKyAgc2V0KEtXU1lTX1VTRV9FbmNvZGluZyAxKQorZW5kaWYoKQoraWYoS1dTWVNfVVNFX0dsb2IpCisgIHNldChLV1NZU19VU0VfRGlyZWN0b3J5IDEpCisgIHNldChLV1NZU19VU0VfU3lzdGVtVG9vbHMgMSkKKyAgc2V0KEtXU1lTX1VTRV9SZWd1bGFyRXhwcmVzc2lvbiAxKQorICBzZXQoS1dTWVNfVVNFX0ZTdHJlYW0gMSkKKyAgc2V0KEtXU1lTX1VTRV9FbmNvZGluZyAxKQorZW5kaWYoKQoraWYoS1dTWVNfVVNFX1Byb2Nlc3MpCisgIHNldChLV1NZU19VU0VfU3lzdGVtIDEpCisgIHNldChLV1NZU19VU0VfRW5jb2RpbmcgMSkKK2VuZGlmKCkKK2lmKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbikKKyAgc2V0KEtXU1lTX1VTRV9Qcm9jZXNzIDEpCitlbmRpZigpCitpZihLV1NZU19VU0VfU3lzdGVtKQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCitlbmRpZigpCitpZihLV1NZU19VU0VfRGlyZWN0b3J5KQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCitlbmRpZigpCitpZihLV1NZU19VU0VfRHluYW1pY0xvYWRlcikKKyAgc2V0KEtXU1lTX1VTRV9FbmNvZGluZyAxKQorZW5kaWYoKQoraWYoS1dTWVNfVVNFX0ZTdHJlYW0pCisgIHNldChLV1NZU19VU0VfRW5jb2RpbmcgMSkKK2VuZGlmKCkKK2lmKEtXU1lTX1VTRV9Db25zb2xlQnVmKQorICBzZXQoS1dTWVNfVVNFX0VuY29kaW5nIDEpCitlbmRpZigpCiAKICMgU3BlY2lmeSBkZWZhdWx0IDggYml0IGVuY29kaW5nIGZvciBXaW5kb3dzCi1JRihOT1QgS1dTWVNfRU5DT0RJTkdfREVGQVVMVF9DT0RFUEFHRSkKLSAgU0VUKEtXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0UgQ1BfQUNQKQotRU5ESUYoKQoraWYoTk9UIEtXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0UpCisgIHNldChLV1NZU19FTkNPRElOR19ERUZBVUxUX0NPREVQQUdFIENQX0FDUCkKK2VuZGlmKCkKIAogIyBFbmFibGUgdGVzdGluZyBpZiBidWlsZGluZyBzdGFuZGFsb25lLgotSUYoS1dTWVNfU1RBTkRBTE9ORSkKLSAgSU5DTFVERShEYXJ0KQotICBNQVJLX0FTX0FEVkFOQ0VEKEJVSUxEX1RFU1RJTkcgREFSVF9ST09UIFRDTF9UQ0xTSCkKLSAgSUYoQlVJTERfVEVTVElORykKLSAgICBFTkFCTEVfVEVTVElORygpCi0gIEVORElGKCkKLUVORElGKCkKK2lmKEtXU1lTX1NUQU5EQUxPTkUpCisgIGluY2x1ZGUoRGFydCkKKyAgbWFya19hc19hZHZhbmNlZChCVUlMRF9URVNUSU5HIERBUlRfUk9PVCBUQ0xfVENMU0gpCisgIGlmKEJVSUxEX1RFU1RJTkcpCisgICAgZW5hYmxlX3Rlc3RpbmcoKQorICBlbmRpZigpCitlbmRpZigpCiAKICMgQ2hvb3NlIGRlZmF1bHQgc2hhcmVkL3N0YXRpYyBidWlsZCBpZiBub3Qgc3BlY2lmaWVkLgotSUYoTk9UIERFRklORUQgS1dTWVNfQlVJTERfU0hBUkVEKQotICBTRVQoS1dTWVNfQlVJTERfU0hBUkVEICR7QlVJTERfU0hBUkVEX0xJQlN9KQotRU5ESUYoKQoraWYoTk9UIERFRklORUQgS1dTWVNfQlVJTERfU0hBUkVEKQorICBzZXQoS1dTWVNfQlVJTERfU0hBUkVEICR7QlVJTERfU0hBUkVEX0xJQlN9KQorZW5kaWYoKQogCiAjIEluY2x1ZGUgaGVscGVyIG1hY3Jvcy4KLUlOQ0xVREUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZSkKLUlOQ0xVREUoQ2hlY2tUeXBlU2l6ZSkKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZSkKK2luY2x1ZGUoQ2hlY2tUeXBlU2l6ZSkKIAogIyBEbyBmdWxsIGRlcGVuZGVuY3kgaGVhZGVycy4KLUlOQ0xVREVfUkVHVUxBUl9FWFBSRVNTSU9OKCJeLiokIikKK2luY2x1ZGVfcmVndWxhcl9leHByZXNzaW9uKCJeLiokIikKIAogIyBVc2UgbmV3IEtXU1lTX0lOU1RBTExfKl9ESVIgdmFyaWFibGUgbmFtZXMgdG8gY29udHJvbCBpbnN0YWxsYXRpb24uCiAjIFRha2UgZGVmYXVsdHMgZnJvbSB0aGUgb2xkIG5hbWVzLiAgTm90ZSB0aGF0IHRoZXJlIHdhcyBubyBvbGQgbmFtZQogIyBmb3IgdGhlIGJpbiBkaXIsIHNvIHdlIHRha2UgdGhlIG9sZCBsaWIgZGlyIG5hbWUgc28gRExMcyB3aWxsIGJlCiAjIGluc3RhbGxlZCBpbiBhIGNvbXBhdGlibGUgd2F5IGZvciBvbGQgY29kZS4KLUlGKE5PVCBLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICBTVFJJTkcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIKK2lmKE5PVCBLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIKICAgICAiJHtLV1NZU19IRUFERVJfSU5TVEFMTF9ESVJ9IikKLUVORElGKCkKLUlGKE5PVCBLV1NZU19JTlNUQUxMX0xJQl9ESVIpCi0gIFNUUklORyhSRUdFWCBSRVBMQUNFICJeLyIgIiIgS1dTWVNfSU5TVEFMTF9MSUJfRElSCitlbmRpZigpCitpZihOT1QgS1dTWVNfSU5TVEFMTF9MSUJfRElSKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfTElCX0RJUgogICAgICIke0tXU1lTX0xJQlJBUllfSU5TVEFMTF9ESVJ9IikKLUVORElGKCkKLUlGKE5PVCBLV1NZU19JTlNUQUxMX0JJTl9ESVIpCi0gIFNUUklORyhSRUdFWCBSRVBMQUNFICJeLyIgIiIgS1dTWVNfSU5TVEFMTF9CSU5fRElSCitlbmRpZigpCitpZihOT1QgS1dTWVNfSU5TVEFMTF9CSU5fRElSKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi8iICIiIEtXU1lTX0lOU1RBTExfQklOX0RJUgogICAgICIke0tXU1lTX0xJQlJBUllfSU5TVEFMTF9ESVJ9IikKLUVORElGKCkKK2VuZGlmKCkKIAogIyBTZXR1cCBoZWFkZXIgaW5zdGFsbCBydWxlcy4KLVNFVChLV1NZU19JTlNUQUxMX0lOQ0xVREVfT1BUSU9OUykKLUlGKEtXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlQpCi0gIFNFVChLV1NZU19JTlNUQUxMX0lOQ0xVREVfT1BUSU9OUyAke0tXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TfQorc2V0KEtXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TKQoraWYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKKyAgc2V0KEtXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TICR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX09QVElPTlN9CiAgICAgQ09NUE9ORU5UICR7S1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVH0KICAgICApCi1FTkRJRigpCitlbmRpZigpCiAKICMgU2V0dXAgbGlicmFyeSBpbnN0YWxsIHJ1bGVzLgotU0VUKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQotU0VUKEtXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRSkKLUlGKEtXU1lTX0lOU1RBTExfTElCX0RJUikKLSAgSUYoS1dTWVNfSU5TVEFMTF9FWFBPUlRfTkFNRSkKLSAgICBMSVNUKEFQUEVORCBLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSBFWFBPUlQgJHtLV1NZU19JTlNUQUxMX0VYUE9SVF9OQU1FfSkKLSAgRU5ESUYoKQorc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQorc2V0KEtXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRSkKK2lmKEtXU1lTX0lOU1RBTExfTElCX0RJUikKKyAgaWYoS1dTWVNfSU5TVEFMTF9FWFBPUlRfTkFNRSkKKyAgICBsaXN0KEFQUEVORCBLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSBFWFBPUlQgJHtLV1NZU19JTlNUQUxMX0VYUE9SVF9OQU1FfSkKKyAgZW5kaWYoKQogICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IHRvIHRoZSBsaWIgZGlyZWN0b3J5LgotICBTRVQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KKyAgc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CiAgICAgTElCUkFSWSBERVNUSU5BVElPTiAke0tXU1lTX0lOU1RBTExfTElCX0RJUn0gTkFNRUxJTktfU0tJUAogICAgICkKICAgIyBBc3NpZ24gdGhlIHNoYXJlZCBsaWJyYXJ5IHRvIHRoZSBydW50aW1lIGNvbXBvbmVudC4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9SVU5USU1FKQotICAgIFNFVChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQorICBpZihLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUpCisgICAgc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CiAgICAgICBDT01QT05FTlQgJHtLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUV9CiAgICAgICApCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfQlVJTERfU0hBUkVEKQotICAgIFNFVChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CisgIGVuZGlmKCkKKyAgaWYoS1dTWVNfQlVJTERfU0hBUkVEKQorICAgIHNldChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CiAgICAgICBMSUJSQVJZIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9MSUJfRElSfSBOQU1FTElOS19PTkxZCiAgICAgICApCiAgICAgIyBBc3NpZ24gdGhlIG5hbWVsaW5rIHRvIHRoZSBkZXZlbG9wbWVudCBjb21wb25lbnQuCi0gICAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKLSAgICAgIFNFVChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CisgICAgaWYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKKyAgICAgIHNldChLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUgJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9CiAgICAgICAgIENPTVBPTkVOVCAke0tXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlR9CiAgICAgICAgICkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIAogICAjIEluc3RhbGwgdGhlIGFyY2hpdmUgdG8gdGhlIGxpYiBkaXJlY3RvcnkuCi0gIFNFVChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQorICBzZXQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KICAgICBBUkNISVZFIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9MSUJfRElSfQogICAgICkKICAgIyBBc3NpZ24gdGhlIGFyY2hpdmUgdG8gdGhlIGRldmVsb3BtZW50IGNvbXBvbmVudC4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKLSAgICBTRVQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KKyAgaWYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9ERVZFTE9QTUVOVCkKKyAgICBzZXQoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUgJHtLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRX0KICAgICAgIENPTVBPTkVOVCAke0tXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfREVWRUxPUE1FTlR9CiAgICAgICApCi0gIEVORElGKCkKLUVORElGKCkKLUlGKEtXU1lTX0lOU1RBTExfQklOX0RJUikKKyAgZW5kaWYoKQorZW5kaWYoKQoraWYoS1dTWVNfSU5TVEFMTF9CSU5fRElSKQogICAjIEluc3RhbGwgdGhlIHJ1bnRpbWUgbGlicmFyeSB0byB0aGUgYmluIGRpcmVjdG9yeS4KLSAgU0VUKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CisgIHNldChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQogICAgIFJVTlRJTUUgREVTVElOQVRJT04gJHtLV1NZU19JTlNUQUxMX0JJTl9ESVJ9CiAgICAgKQogICAjIEFzc2lnbiB0aGUgcnVudGltZSBsaWJyYXJ5IHRvIHRoZSBydW50aW1lIGNvbXBvbmVudC4KLSAgSUYoS1dTWVNfSU5TVEFMTF9DT01QT05FTlRfTkFNRV9SVU5USU1FKQotICAgIFNFVChLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfQorICBpZihLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUpCisgICAgc2V0KEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9CiAgICAgICBDT01QT05FTlQgJHtLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUV9CiAgICAgICApCi0gIEVORElGKCkKLUVORElGKCkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjIERvIG5vdCBzdXBwb3J0IG9sZCBLV1NZU18qYV9JTlNUQUxMX0RJUiB2YXJpYWJsZSBuYW1lcy4KLVNFVChLV1NZU19IRUFERVJfSU5TVEFMTF9ESVIpCi1TRVQoS1dTWVNfTElCUkFSWV9JTlNUQUxMX0RJUikKK3NldChLV1NZU19IRUFERVJfSU5TVEFMTF9ESVIpCitzZXQoS1dTWVNfTElCUkFSWV9JTlNUQUxMX0RJUikKIAogIyBHZW5lcmF0ZWQgc291cmNlIGZpbGVzIHdpbGwgbmVlZCB0aGlzIGhlYWRlci4KLVNUUklORyhDT01QQVJFIEVRVUFMICIke1BST0pFQ1RfU09VUkNFX0RJUn0iICIke1BST0pFQ1RfQklOQVJZX0RJUn0iCitzdHJpbmcoQ09NUEFSRSBFUVVBTCAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9IiAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IgogICBLV1NZU19JTl9TT1VSQ0VfQlVJTEQpCi1JRihOT1QgS1dTWVNfSU5fU09VUkNFX0JVSUxEKQotICBDT05GSUdVUkVfRklMRSgke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXNQcml2YXRlLmgKK2lmKE5PVCBLV1NZU19JTl9TT1VSQ0VfQlVJTEQpCisgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9rd3N5c1ByaXZhdGUuaAogICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9rd3N5c1ByaXZhdGUuaCBDT1BZT05MWSBJTU1FRElBVEUpCi1FTkRJRigpCitlbmRpZigpCiAKICMgU2VsZWN0IHBsdWdpbiBtb2R1bGUgZmlsZSBuYW1lIGNvbnZlbnRpb24uCi1JRihOT1QgS1dTWVNfRHluYW1pY0xvYWRlcl9QUkVGSVgpCi0gIFNFVChLV1NZU19EeW5hbWljTG9hZGVyX1BSRUZJWCAke0NNQUtFX1NIQVJFRF9NT0RVTEVfUFJFRklYfSkKLUVORElGKCkKLUlGKE5PVCBLV1NZU19EeW5hbWljTG9hZGVyX1NVRkZJWCkKLSAgU0VUKEtXU1lTX0R5bmFtaWNMb2FkZXJfU1VGRklYICR7Q01BS0VfU0hBUkVEX01PRFVMRV9TVUZGSVh9KQotRU5ESUYoKQoraWYoTk9UIEtXU1lTX0R5bmFtaWNMb2FkZXJfUFJFRklYKQorICBzZXQoS1dTWVNfRHluYW1pY0xvYWRlcl9QUkVGSVggJHtDTUFLRV9TSEFSRURfTU9EVUxFX1BSRUZJWH0pCitlbmRpZigpCitpZihOT1QgS1dTWVNfRHluYW1pY0xvYWRlcl9TVUZGSVgpCisgIHNldChLV1NZU19EeW5hbWljTG9hZGVyX1NVRkZJWCAke0NNQUtFX1NIQVJFRF9NT0RVTEVfU1VGRklYfSkKK2VuZGlmKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFdlIHJlcXVpcmUgQU5TSSBzdXBwb3J0IGZyb20gdGhlIEMgY29tcGlsZXIuICBBZGQgYW55IG5lZWRlZCBmbGFncy4KLUlGKENNQUtFX0FOU0lfQ0ZMQUdTKQotICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAke0NNQUtFX0FOU0lfQ0ZMQUdTfSIpCi1FTkRJRigpCitpZihDTUFLRV9BTlNJX0NGTEFHUykKKyAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gJHtDTUFLRV9BTlNJX0NGTEFHU30iKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQWRqdXN0IGNvbXBpbGVyIGZsYWdzIGZvciBzb21lIHBsYXRmb3Jtcy4KLUlGKE5PVCBDTUFLRV9DT01QSUxFUl9JU19HTlVDWFgpCi0gIElGKENNQUtFX1NZU1RFTSBNQVRDSEVTICJPU0YxLVYuKiIpCi0gICAgU1RSSU5HKFJFR0VYIE1BVENIICItdGltcGxpY2l0X2xvY2FsIgoraWYoTk9UIENNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWCkKKyAgaWYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIk9TRjEtVi4qIikKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIi10aW1wbGljaXRfbG9jYWwiCiAgICAgICBLV1NZU19DWFhfRkxBR1NfSEFWRV9JTVBMSUNJVF9MT0NBTCAiJHtDTUFLRV9DWFhfRkxBR1N9IikKLSAgICBTVFJJTkcoUkVHRVggTUFUQ0ggIi1ub19pbXBsaWNpdF9pbmNsdWRlIgorICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiLW5vX2ltcGxpY2l0X2luY2x1ZGUiCiAgICAgICBLV1NZU19DWFhfRkxBR1NfSEFWRV9OT19JTVBMSUNJVF9JTkNMVURFICIke0NNQUtFX0NYWF9GTEFHU30iKQotICAgIElGKE5PVCBLV1NZU19DWFhfRkxBR1NfSEFWRV9JTVBMSUNJVF9MT0NBTCkKLSAgICAgIFNFVChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtdGltcGxpY2l0X2xvY2FsIikKLSAgICBFTkRJRigpCi0gICAgSUYoTk9UIEtXU1lTX0NYWF9GTEFHU19IQVZFX05PX0lNUExJQ0lUX0lOQ0xVREUpCi0gICAgICBTRVQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLW5vX2ltcGxpY2l0X2luY2x1ZGUiKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotICBJRihDTUFLRV9TWVNURU0gTUFUQ0hFUyAiSFAtVVgiKQotICAgIFNFVChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9FWFRSQV9GTEFHUyAiK3AiKQotICAgIElGKENNQUtFX0NYWF9DT01QSUxFUl9JRCBNQVRDSEVTICJIUCIpCisgICAgaWYoTk9UIEtXU1lTX0NYWF9GTEFHU19IQVZFX0lNUExJQ0lUX0xPQ0FMKQorICAgICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC10aW1wbGljaXRfbG9jYWwiKQorICAgIGVuZGlmKCkKKyAgICBpZihOT1QgS1dTWVNfQ1hYX0ZMQUdTX0hBVkVfTk9fSU1QTElDSVRfSU5DTFVERSkKKyAgICAgIHNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtbm9faW1wbGljaXRfaW5jbHVkZSIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJIUC1VWCIpCisgICAgc2V0KEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0VYVFJBX0ZMQUdTICIrcCIpCisgICAgaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkhQIikKICAgICAgICMgaXQgaXMga25vd24gdGhhdCB2ZXJzaW9uIDMuODUgZmFpbHMgYW5kIDYuMjUgd29ya3Mgd2l0aG91dCB0aGVzZSBmbGFncwotICAgICAgSUYoQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDQpCisgICAgICBpZihDTUFLRV9DWFhfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgNCkKICAgICAgICAgIyB1c2UgbmV3IEMrKyBsaWJyYXJ5IGFuZCBpbXByb3ZlZCB0ZW1wbGF0ZSBzdXBwb3J0Ci0gICAgICAgIFNFVChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtQUEgK2hweHN0ZDk4IikKLSAgICAgIEVORElGKCkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORElGKCkKLUlGKEtXU1lTX1NUQU5EQUxPTkUpCi0gIElGKENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCBTdW5Qcm8pCi0gICAgSUYoTk9UIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA1LjEzKQotICAgICAgU0VUKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1zdGQ9YysrMDMiKQotICAgIEVMU0UoKQotICAgICAgU0VUKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1saWJyYXJ5PXN0bHBvcnQ0IikKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORElGKCkKKyAgICAgICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1BQSAraHB4c3RkOTgiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQoraWYoS1dTWVNfU1RBTkRBTE9ORSkKKyAgaWYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIFNUUkVRVUFMIFN1blBybykKKyAgICBpZihOT1QgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDUuMTMpCisgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLXN0ZD1jKyswMyIpCisgICAgZWxzZSgpCisgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLWxpYnJhcnk9c3RscG9ydDQiKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ29uZmlndXJlIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGhlYWRlciB3cmFwcGVycyBiYXNlZCBvbiBjb21waWxlcidzCiAjIGNhcGFiaWxpdGllcyBhbmQgcGFyZW50IHByb2plY3QncyByZXF1ZXN0LiAgRW5mb3JjZSAwLzEgYXMgb25seQogIyBwb3NzaWJsZSB2YWx1ZXMgZm9yIGNvbmZpZ3VyYXRpb24gaW50byBDb25maWd1cmUuaHh4LgogCi0jIENoZWNrIGV4aXN0ZW5jZSBhbmQgdW5pcXVlbmVzcyBvZiBsb25nIGxvbmcgYW5kIF9faW50NjQuCi1LV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX0xPTkdfTE9ORwotICAiQ2hlY2tpbmcgd2hldGhlciBDKysgY29tcGlsZXIgaGFzICdsb25nIGxvbmcnIiBESVJFQ1QpCi1LV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX19fSU5UNjQKLSAgIkNoZWNraW5nIHdoZXRoZXIgQysrIGNvbXBpbGVyIGhhcyAnX19pbnQ2NCciIERJUkVDVCkKLUlGKEtXU1lTX0NYWF9IQVNfX19JTlQ2NCkKLSAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX1NBTUVfTE9OR19BTkRfX19JTlQ2NAotICAgICJDaGVja2luZyB3aGV0aGVyIGxvbmcgYW5kIF9faW50NjQgYXJlIHRoZSBzYW1lIHR5cGUiIERJUkVDVCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19MT05HX0xPTkcpCi0gICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX1NBTUVfTE9OR19MT05HX0FORF9fX0lOVDY0Ci0gICAgICAiQ2hlY2tpbmcgd2hldGhlciBsb25nIGxvbmcgYW5kIF9faW50NjQgYXJlIHRoZSBzYW1lIHR5cGUiIERJUkVDVCkKLSAgRU5ESUYoKQotRU5ESUYoKQotCi0jIEVuYWJsZSB0aGUgImxvbmcgbG9uZyIgdHlwZSBpZiBpdCBpcyBhdmFpbGFibGUuICBJdCBpcyBzdGFuZGFyZCBpbgotIyBDOTkgYW5kIEMrKzAzIGJ1dCBub3QgaW4gZWFybGllciBzdGFuZGFyZHMuCi1JRihLV1NZU19DWFhfSEFTX0xPTkdfTE9ORykKLSAgU0VUKEtXU1lTX1VTRV9MT05HX0xPTkcgMSkKLUVMU0UoKQotICBTRVQoS1dTWVNfVVNFX0xPTkdfTE9ORyAwKQotRU5ESUYoKQotCi0jIEVuYWJsZSB0aGUgIl9faW50NjQiIHR5cGUgaWYgaXQgaXMgYXZhaWxhYmxlIGFuZCB1bmlxdWUuICBJdCBpcyBub3QKLSMgc3RhbmRhcmQuCi1TRVQoS1dTWVNfVVNFX19fSU5UNjQgMCkKLUlGKEtXU1lTX0NYWF9IQVNfX19JTlQ2NCkKLSAgSUYoTk9UIEtXU1lTX0NYWF9TQU1FX0xPTkdfQU5EX19fSU5UNjQpCi0gICAgSUYoTk9UIEtXU1lTX0NYWF9TQU1FX0xPTkdfTE9OR19BTkRfX19JTlQ2NCkKLSAgICAgIFNFVChLV1NZU19VU0VfX19JTlQ2NCAxKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotRU5ESUYoKQotCi1JRihLV1NZU19VU0VfRW5jb2RpbmcpCitpZihLV1NZU19VU0VfRW5jb2RpbmcpCiAgICMgTG9vayBmb3IgdHlwZSBzaXplIGhlbHBlciBtYWNyb3MuCiAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX1NUTF9IQVNfV1NUUklORwogICAgICJDaGVja2luZyB3aGV0aGVyIHdzdHJpbmcgaXMgYXZhaWxhYmxlIiBESVJFQ1QpCi1FTkRJRigpCitlbmRpZigpCiAKLUlGKEtXU1lTX1VTRV9JT1N0cmVhbSkKLSAgIyBEZXRlcm1pbmUgd2hldGhlciBpb3N0cmVhbXMgc3VwcG9ydCBsb25nIGxvbmcuCi0gIElGKEtXU1lTX0NYWF9IQVNfTE9OR19MT05HKQotICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0lPU19IQVNfSVNUUkVBTV9MT05HX0xPTkcKLSAgICAgICJDaGVja2luZyBpZiBpc3RyZWFtIHN1cHBvcnRzIGxvbmcgbG9uZyIgRElSRUNUKQotICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0lPU19IQVNfT1NUUkVBTV9MT05HX0xPTkcKLSAgICAgICJDaGVja2luZyBpZiBvc3RyZWFtIHN1cHBvcnRzIGxvbmcgbG9uZyIgRElSRUNUKQotICBFTFNFKCkKLSAgICBTRVQoS1dTWVNfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9ORyAwKQotICAgIFNFVChLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HIDApCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19fX0lOVDY0KQotICAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0lPU19IQVNfSVNUUkVBTV9fX0lOVDY0Ci0gICAgICAiQ2hlY2tpbmcgaWYgaXN0cmVhbSBzdXBwb3J0cyBfX2ludDY0IiBESVJFQ1QpCi0gICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQKLSAgICAgICJDaGVja2luZyBpZiBvc3RyZWFtIHN1cHBvcnRzIF9faW50NjQiIERJUkVDVCkKLSAgRUxTRSgpCi0gICAgU0VUKEtXU1lTX0lPU19IQVNfSVNUUkVBTV9fX0lOVDY0IDApCi0gICAgU0VUKEtXU1lTX0lPU19IQVNfT1NUUkVBTV9fX0lOVDY0IDApCi0gIEVORElGKCkKLUVORElGKCkKK2lmKEtXU1lTX05BTUVTUEFDRSBNQVRDSEVTICJea3dzeXMkIikKKyAgc2V0KEtXU1lTX05BTUVfSVNfS1dTWVMgMSkKK2Vsc2UoKQorICBzZXQoS1dTWVNfTkFNRV9JU19LV1NZUyAwKQorZW5kaWYoKQogCi1JRihLV1NZU19OQU1FU1BBQ0UgTUFUQ0hFUyAiXmt3c3lzJCIpCi0gIFNFVChLV1NZU19OQU1FX0lTX0tXU1lTIDEpCi1FTFNFKCkKLSAgU0VUKEtXU1lTX05BTUVfSVNfS1dTWVMgMCkKLUVORElGKCkKLQotSUYoS1dTWVNfQlVJTERfU0hBUkVEKQotICBTRVQoS1dTWVNfQlVJTERfU0hBUkVEIDEpCi0gIFNFVChLV1NZU19MSUJSQVJZX1RZUEUgU0hBUkVEKQotRUxTRSgpCi0gIFNFVChLV1NZU19CVUlMRF9TSEFSRUQgMCkKLSAgU0VUKEtXU1lTX0xJQlJBUllfVFlQRSBTVEFUSUMpCi1FTkRJRigpCitpZihLV1NZU19CVUlMRF9TSEFSRUQpCisgIHNldChLV1NZU19CVUlMRF9TSEFSRUQgMSkKKyAgc2V0KEtXU1lTX0xJQlJBUllfVFlQRSBTSEFSRUQpCitlbHNlKCkKKyAgc2V0KEtXU1lTX0JVSUxEX1NIQVJFRCAwKQorICBzZXQoS1dTWVNfTElCUkFSWV9UWVBFIFNUQVRJQykKK2VuZGlmKCkKIAogaWYoTk9UIERFRklORUQgS1dTWVNfQlVJTERfUElDKQogICBzZXQoS1dTWVNfQlVJTERfUElDIDApCkBAIC00NDYsMzIgKzM5MCwzMiBAQAogICAiQ2hlY2tpbmcgd2hldGhlciBDIGNvbXBpbGVyIGhhcyBwdHJkaWZmX3QgaW4gc3RkZGVmLmgiIERJUkVDVCkKIEtXU1lTX1BMQVRGT1JNX0NfVEVTVChLV1NZU19DX0hBU19TU0laRV9UCiAgICJDaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFzIHNzaXplX3QgaW4gdW5pc3RkLmgiIERJUkVDVCkKLUlGKEtXU1lTX1VTRV9Qcm9jZXNzKQoraWYoS1dTWVNfVVNFX1Byb2Nlc3MpCiAgIEtXU1lTX1BMQVRGT1JNX0NfVEVTVChLV1NZU19DX0hBU19DTE9DS19HRVRUSU1FX01PTk9UT05JQwogICAgICJDaGVja2luZyB3aGV0aGVyIEMgY29tcGlsZXIgaGFzIGNsb2NrX2dldHRpbWUiIERJUkVDVCkKLUVORElGKCkKK2VuZGlmKCkKIAotU0VUX1NPVVJDRV9GSUxFU19QUk9QRVJUSUVTKFByb2Nlc3NVTklYLmMgU3lzdGVtLmMgUFJPUEVSVElFUworc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKFByb2Nlc3NVTklYLmMgU3lzdGVtLmMgUFJPUEVSVElFUwogICBDT01QSUxFX0ZMQUdTICItREtXU1lTX0NfSEFTX1BUUkRJRkZfVD0ke0tXU1lTX0NfSEFTX1BUUkRJRkZfVH0gLURLV1NZU19DX0hBU19TU0laRV9UPSR7S1dTWVNfQ19IQVNfU1NJWkVfVH0gLURLV1NZU19DX0hBU19DTE9DS19HRVRUSU1FX01PTk9UT05JQz0ke0tXU1lTX0NfSEFTX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDfSIKICAgKQogCi1JRihERUZJTkVEIEtXU1lTX1BST0NFU1NfVVNFX1NFTEVDVCkKLSAgR0VUX1BST1BFUlRZKFByb2Nlc3NVTklYX0ZMQUdTIFNPVVJDRSBQcm9jZXNzVU5JWC5jIFBST1BFUlRZIENPTVBJTEVfRkxBR1MpCi0gIFNFVF9QUk9QRVJUWShTT1VSQ0UgUHJvY2Vzc1VOSVguYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTICIke1Byb2Nlc3NVTklYX0ZMQUdTfSAtREtXU1lTUEVfVVNFX1NFTEVDVD0ke0tXU1lTUEVfVVNFX1NFTEVDVH0iKQotRU5ESUYoKQoraWYoREVGSU5FRCBLV1NZU19QUk9DRVNTX1VTRV9TRUxFQ1QpCisgIGdldF9wcm9wZXJ0eShQcm9jZXNzVU5JWF9GTEFHUyBTT1VSQ0UgUHJvY2Vzc1VOSVguYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTKQorICBzZXRfcHJvcGVydHkoU09VUkNFIFByb2Nlc3NVTklYLmMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAiJHtQcm9jZXNzVU5JWF9GTEFHU30gLURLV1NZU1BFX1VTRV9TRUxFQ1Q9JHtLV1NZU1BFX1VTRV9TRUxFQ1R9IikKK2VuZGlmKCkKIAotSUYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCi0gIEdFVF9QUk9QRVJUWShLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUyBHTE9CQUwgUFJPUEVSVFkgVEFSR0VUX1NVUFBPUlRTX1NIQVJFRF9MSUJTKQotICBJRihLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUykKLSAgICBTRVQoS1dTWVNfU1VQUE9SVFNfU0hBUkVEX0xJQlMgMSkKLSAgRUxTRSgpCi0gICAgU0VUKEtXU1lTX1NVUFBPUlRTX1NIQVJFRF9MSUJTIDApCi0gIEVORElGKCkKLSAgU0VUX1BST1BFUlRZKFNPVVJDRSBEeW5hbWljTG9hZGVyLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUworaWYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCisgIGdldF9wcm9wZXJ0eShLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUyBHTE9CQUwgUFJPUEVSVFkgVEFSR0VUX1NVUFBPUlRTX1NIQVJFRF9MSUJTKQorICBpZihLV1NZU19TVVBQT1JUU19TSEFSRURfTElCUykKKyAgICBzZXQoS1dTWVNfU1VQUE9SVFNfU0hBUkVEX0xJQlMgMSkKKyAgZWxzZSgpCisgICAgc2V0KEtXU1lTX1NVUFBPUlRTX1NIQVJFRF9MSUJTIDApCisgIGVuZGlmKCkKKyAgc2V0X3Byb3BlcnR5KFNPVVJDRSBEeW5hbWljTG9hZGVyLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUwogICAgIEtXU1lTX1NVUFBPUlRTX1NIQVJFRF9MSUJTPSR7S1dTWVNfU1VQUE9SVFNfU0hBUkVEX0xJQlN9KQotRU5ESUYoKQorZW5kaWYoKQogCi1JRihLV1NZU19VU0VfU3lzdGVtVG9vbHMpCitpZihLV1NZU19VU0VfU3lzdGVtVG9vbHMpCiAgIGlmIChOT1QgREVGSU5FRCBLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQKQogICAgIHNldChLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQIDEpCiAgIGVuZGlmICgpCkBAIC00OTQsNyArNDM4LDcgQEAKICAgICAiQ2hlY2tpbmcgd2hldGhlciBDWFggY29tcGlsZXIgc3RydWN0IHN0YXQgaGFzIHN0X210aW0gbWVtYmVyIiBESVJFQ1QpCiAgIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9TVEFUX0hBU19TVF9NVElNRVNQRUMKICAgICAiQ2hlY2tpbmcgd2hldGhlciBDWFggY29tcGlsZXIgc3RydWN0IHN0YXQgaGFzIHN0X210aW1lc3BlYyBtZW1iZXIiIERJUkVDVCkKLSAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1Ub29scy5jeHggQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMKKyAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1Ub29scy5jeHggQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMKICAgICBLV1NZU19DWFhfSEFTX1NFVEVOVj0ke0tXU1lTX0NYWF9IQVNfU0VURU5WfQogICAgIEtXU1lTX0NYWF9IQVNfVU5TRVRFTlY9JHtLV1NZU19DWFhfSEFTX1VOU0VURU5WfQogICAgIEtXU1lTX0NYWF9IQVNfRU5WSVJPTl9JTl9TVERMSUJfSD0ke0tXU1lTX0NYWF9IQVNfRU5WSVJPTl9JTl9TVERMSUJfSH0KQEAgLTUwMyw2MjMgKzQ0Nyw1NjQgQEAKICAgICBLV1NZU19DWFhfU1RBVF9IQVNfU1RfTVRJTT0ke0tXU1lTX0NYWF9TVEFUX0hBU19TVF9NVElNfQogICAgIEtXU1lTX0NYWF9TVEFUX0hBU19TVF9NVElNRVNQRUM9JHtLV1NZU19DWFhfU1RBVF9IQVNfU1RfTVRJTUVTUEVDfQogICAgICkKLSAgSUYoTk9UIFdJTjMyKQotICAgIElGKEtXU1lTX1NUQU5EQUxPTkUpCi0gICAgICBPUFRJT04oS1dTWVNfU1lTVEVNVE9PTFNfU1VQUE9SVF9XSU5ET1dTX1NMQVNIRVMgIklmIHRydWUsIFdpbmRvd3MgcGF0aHMgd2lsbCBiZSBzdXBwb3J0ZWQgb24gVW5peCBhcyB3ZWxsIiBPTikKLSAgICBFTkRJRigpCi0gICAgSUYoS1dTWVNfU1lTVEVNVE9PTFNfU1VQUE9SVF9XSU5ET1dTX1NMQVNIRVMpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbVRvb2xzLmN4eCB0ZXN0U3lzdGVtVG9vbHMuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCisgIGlmKE5PVCBXSU4zMikKKyAgICBpZihLV1NZU19TVEFOREFMT05FKQorICAgICAgb3B0aW9uKEtXU1lTX1NZU1RFTVRPT0xTX1NVUFBPUlRfV0lORE9XU19TTEFTSEVTICJJZiB0cnVlLCBXaW5kb3dzIHBhdGhzIHdpbGwgYmUgc3VwcG9ydGVkIG9uIFVuaXggYXMgd2VsbCIgT04pCisgICAgZW5kaWYoKQorICAgIGlmKEtXU1lTX1NZU1RFTVRPT0xTX1NVUFBPUlRfV0lORE9XU19TTEFTSEVTKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1Ub29scy5jeHggdGVzdFN5c3RlbVRvb2xzLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUwogICAgICAgICBLV1NZU19TWVNURU1UT09MU19TVVBQT1JUX1dJTkRPV1NfU0xBU0hFUwogICAgICAgICApCi0gICAgRU5ESUYoKQotICBFTkRJRigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCiAKICAgIyBEaXNhYmxlIGdldHB3bmFtIGZvciBzdGF0aWMgbGludXggYnVpbGRzIHNpbmNlIGl0IGRlcGVuZHMgb24gc2hhcmVkIGdsaWJjCi0gIEdFVF9QUk9QRVJUWShTSEFSRURfTElCU19TVVBQT1JURUQgR0xPQkFMIFBST1BFUlRZIFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCUykKLSAgSUYoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgiIEFORCBOT1QgU0hBUkVEX0xJQlNfU1VQUE9SVEVEKQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtVG9vbHMuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCisgIGdldF9wcm9wZXJ0eShTSEFSRURfTElCU19TVVBQT1JURUQgR0xPQkFMIFBST1BFUlRZIFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCUykKKyAgaWYoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgiIEFORCBOT1QgU0hBUkVEX0xJQlNfU1VQUE9SVEVEKQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtVG9vbHMuY3h4IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TCiAgICAgICBIQVZFX0dFVFBXTkFNPTAKICAgICAgICkKLSAgRU5ESUYoKQotRU5ESUYoKQorICBlbmRpZigpCitlbmRpZigpCiAKLUlGKEtXU1lTX1VTRV9TeXN0ZW1JbmZvcm1hdGlvbikKLSAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCitpZihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCisgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgIENPTVBJTEVfREVGSU5JVElPTlMgU0laRU9GX1ZPSURfUD0ke0NNQUtFX1NJWkVPRl9WT0lEX1B9KQotICBJRihOT1QgQ1lHV0lOKQotICAgIElOQ0xVREUoQ2hlY2tJbmNsdWRlRmlsZXMpCisgIGlmKE5PVCBDWUdXSU4pCisgICAgaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlcykKICAgICBDSEVDS19JTkNMVURFX0ZJTEVTKCJzeXMvdHlwZXMuaDtpZmFkZHJzLmgiIEtXU1lTX1NZU19IQVNfSUZBRERSU19IKQotICAgIElGKEtXU1lTX1NZU19IQVNfSUZBRERSU19IKQotICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgaWYoS1dTWVNfU1lTX0hBU19JRkFERFJTX0gpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNfSEFTX0lGQUREUlNfSD0xKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotICBJRihXSU4zMikKLSAgICBJTkNMVURFKENoZWNrU3ltYm9sRXhpc3RzKQotICAgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgUHNhcGkpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKFdJTjMyKQorICAgIGluY2x1ZGUoQ2hlY2tTeW1ib2xFeGlzdHMpCisgICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyBwc2FwaSkKICAgICBDSEVDS19TWU1CT0xfRVhJU1RTKEdldFByb2Nlc3NNZW1vcnlJbmZvICJ3aW5kb3dzLmg7cHNhcGkuaCIgS1dTWVNfU1lTX0hBU19QU0FQSSkKLSAgICBVTlNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCi0gICAgSUYoS1dTWVNfU1lTX0hBU19QU0FQSSkKLSAgICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQorICAgIHVuc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKKyAgICBpZihLV1NZU19TWVNfSEFTX1BTQVBJKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfU1lTX0hBU19QU0FQST0xKQotICAgICAgSUYoTVNWQzcwIE9SIE1TVkM3MSkKKyAgICAgIGlmKE1TVkM3MCBPUiBNU1ZDNzEpCiAgICAgICAgICMgU3VwcHJlc3MgTE5LNDA4OTogYWxsIHJlZmVyZW5jZXMgdG8gJ1BTQVBJLkRMTCcgZGlzY2FyZGVkIGJ5IC9PUFQ6UkVGCi0gICAgICAgIFNFVChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC9JR05PUkU6NDA4OSIpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi0gIElGKENNQUtFX1NZU1RFTSBNQVRDSEVTICJIUC1VWCIpCisgICAgICAgIHNldChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC9JR05PUkU6NDA4OSIpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJIUC1VWCIpCiAgICAgQ0hFQ0tfSU5DTFVERV9GSUxFUygic3lzL21wY3RsLmgiIEtXU1lTX1NZU19IQVNfTVBDVExfSCkKLSAgICBJRihLV1NZU19TWVNfSEFTX01QQ1RMX0gpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICBpZihLV1NZU19TWVNfSEFTX01QQ1RMX0gpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNfSEFTX01QQ1RMX0g9MSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLSAgSUYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkJTRCIpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKENNQUtFX1NZU1RFTSBNQVRDSEVTICJCU0QiKQogICAgIENIRUNLX0lOQ0xVREVfRklMRVMoIm1hY2hpbmUvY3B1LmgiIEtXU1lTX1NZU19IQVNfTUFDSElORV9DUFVfSCkKLSAgICBJRihLV1NZU19TWVNfSEFTX01BQ0hJTkVfQ1BVX0gpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICBpZihLV1NZU19TWVNfSEFTX01BQ0hJTkVfQ1BVX0gpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNfSEFTX01BQ0hJTkVfQ1BVX0g9MSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19STElNSVQ2NAogICAgICJDaGVja2luZyB3aGV0aGVyIENYWCBjb21waWxlciBoYXMgcmxpbWl0NjQiIERJUkVDVCkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0RFRklORVMpCi0gIElGKEtXU1lTX0NYWF9IQVNfUkxJTUlUNjQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgIHNldChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9ERUZJTkVTKQorICBpZihLV1NZU19DWFhfSEFTX1JMSU1JVDY0KQorICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX1JMSU1JVDY0PTEpCi0gIEVORElGKCkKLSAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19BVE9MCi0gICAgIkNoZWNraW5nIHdoZXRoZXIgQ1hYIGNvbXBpbGVyIGhhcyBhdG9sIiBESVJFQ1QpCi0gIElGKEtXU1lTX0NYWF9IQVNfQVRPTCkKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKLSAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfQ1hYX0hBU19BVE9MPTEpCi0gIEVORElGKCkKLSAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19BVE9MTAotICAgICJDaGVja2luZyB3aGV0aGVyIENYWCBjb21waWxlciBoYXMgYXRvbGwiIERJUkVDVCkKLSAgSUYoS1dTWVNfQ1hYX0hBU19BVE9MTCkKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKLSAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfQ1hYX0hBU19BVE9MTD0xKQotICBFTkRJRigpCi0gIEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUKEtXU1lTX0NYWF9IQVNfX0FUT0k2NAotICAgICJDaGVja2luZyB3aGV0aGVyIENYWCBjb21waWxlciBoYXMgX2F0b2k2NCIgRElSRUNUKQotICBJRihLV1NZU19DWFhfSEFTX19BVE9JNjQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCi0gICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX0NYWF9IQVNfX0FUT0k2ND0xKQotICBFTkRJRigpCi0gIElGKFVOSVgpCi0gICAgSU5DTFVERShDaGVja0luY2x1ZGVGaWxlQ1hYKQorICBlbmRpZigpCisgIGlmKFVOSVgpCisgICAgaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlQ1hYKQogICAgICMgY2hlY2sgZm9yIHNpbXBsZSBzdGFjayB0cmFjZQogICAgICMgdXN1YWxseSBpdCdzIGluIGxpYmMgYnV0IG9uIEZyZWVCU0QKICAgICAjIGl0J3MgaW4gbGliZXhlY2luZm8KLSAgICBGSU5EX0xJQlJBUlkoRVhFQ0lORk9fTElCICJleGVjaW5mbyIpCi0gICAgTUFSS19BU19BRFZBTkNFRChFWEVDSU5GT19MSUIpCi0gICAgSUYgKE5PVCBFWEVDSU5GT19MSUIpCi0gICAgICBTRVQoRVhFQ0lORk9fTElCICIiKQotICAgIEVORElGKCkKKyAgICBmaW5kX2xpYnJhcnkoRVhFQ0lORk9fTElCICJleGVjaW5mbyIpCisgICAgbWFya19hc19hZHZhbmNlZChFWEVDSU5GT19MSUIpCisgICAgaWYgKE5PVCBFWEVDSU5GT19MSUIpCisgICAgICBzZXQoRVhFQ0lORk9fTElCICIiKQorICAgIGVuZGlmKCkKICAgICBDSEVDS19JTkNMVURFX0ZJTEVfQ1hYKCJleGVjaW5mby5oIiBLV1NZU19DWFhfSEFTX0VYRUNJTkZPSCkKLSAgICBJRiAoS1dTWVNfQ1hYX0hBU19FWEVDSU5GT0gpCisgICAgaWYgKEtXU1lTX0NYWF9IQVNfRVhFQ0lORk9IKQogICAgICAgIyB3ZSBoYXZlIHRoZSBiYWNrdHJhY2UgaGVhZGVyIGNoZWNrIGlmIGl0CiAgICAgICAjIGNhbiBiZSB1c2VkIHdpdGggdGhpcyBjb21waWxlcgotICAgICAgU0VUKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0xJTktfTElCUkFSSUVTICR7RVhFQ0lORk9fTElCfSkKKyAgICAgIHNldChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUyAke0VYRUNJTkZPX0xJQn0pCiAgICAgICBLV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX0JBQ0tUUkFDRQogICAgICAgICAgIkNoZWNraW5nIHdoZXRoZXIgYmFja3RyYWNlIHdvcmtzIHdpdGggdGhpcyBDKysgY29tcGlsZXIiIERJUkVDVCkKLSAgICAgIFNFVChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUykKLSAgICAgIElGIChLV1NZU19DWFhfSEFTX0JBQ0tUUkFDRSkKKyAgICAgIHNldChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUykKKyAgICAgIGlmIChLV1NZU19DWFhfSEFTX0JBQ0tUUkFDRSkKICAgICAgICAgIyBiYWNrdHJhY2UgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgc3lzdGVtIGFuZCBjb21waWxlci4KICAgICAgICAgIyBub3cgY2hlY2sgZm9yIHRoZSBtb3JlIGFkdmFuY2VkIGNhcGFiaWxpdGllcy4KLSAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfU1lTVEVNSU5GT1JNQVRJT05fSEFTX0JBQ0tUUkFDRT0xKQogICAgICAgICAjIGNoZWNrIGZvciBzeW1ib2wgbG9va3VwIHVzaW5nIGRsYWRkcgogICAgICAgICBDSEVDS19JTkNMVURFX0ZJTEVfQ1hYKCJkbGZjbi5oIiBLV1NZU19DWFhfSEFTX0RMRkNOSCkKLSAgICAgICAgSUYgKEtXU1lTX0NYWF9IQVNfRExGQ05IKQorICAgICAgICBpZiAoS1dTWVNfQ1hYX0hBU19ETEZDTkgpCiAgICAgICAgICAgIyB3ZSBoYXZlIHN5bWJvbCBsb29rdXAgbGlicmFyaWVzIGFuZCBoZWFkZXJzCiAgICAgICAgICAgIyBjaGVjayBpZiB0aGV5IGNhbiBiZSB1c2VkIHdpdGggdGhpcyBjb21waWxlcgotICAgICAgICAgIFNFVChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUyAke0NNQUtFX0RMX0xJQlN9KQorICAgICAgICAgIHNldChLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFUyAke0NNQUtFX0RMX0xJQlN9KQogICAgICAgICAgICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19ETEFERFIKICAgICAgICAgICAgICJDaGVja2luZyB3aGV0aGVyIGRsYWRkciB3b3JrcyB3aXRoIHRoaXMgQysrIGNvbXBpbGVyIiBESVJFQ1QpCi0gICAgICAgICAgU0VUKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0xJTktfTElCUkFSSUVTKQotICAgICAgICAgIElGIChLV1NZU19DWFhfSEFTX0RMQUREUikKKyAgICAgICAgICBzZXQoS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfTElOS19MSUJSQVJJRVMpCisgICAgICAgICAgaWYgKEtXU1lTX0NYWF9IQVNfRExBRERSKQogICAgICAgICAgICAgIyBzeW1ib2wgbG9va3VwIGlzIHN1cHBvcnRlZCBieSB0aGlzIHN5c3RlbQogICAgICAgICAgICAgIyBhbmQgY29tcGlsZXIuCi0gICAgICAgICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICAgICAgICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgICAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX1NZU1RFTUlORk9STUFUSU9OX0hBU19TWU1CT0xfTE9PS1VQPTEpCi0gICAgICAgICAgRU5ESUYoKQotICAgICAgICBFTkRJRigpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCiAgICAgICAgICMgYysrIGRlbWFuZ2xpbmcgc3VwcG9ydAogICAgICAgICAjIGNoZWNrIGZvciBjeHhhYmkgaGVhZGVycwogICAgICAgICBDSEVDS19JTkNMVURFX0ZJTEVfQ1hYKCJjeHhhYmkuaCIgS1dTWVNfQ1hYX0hBU19DWFhBQklIKQotICAgICAgICBJRiAoS1dTWVNfQ1hYX0hBU19DWFhBQklIKQorICAgICAgICBpZiAoS1dTWVNfQ1hYX0hBU19DWFhBQklIKQogICAgICAgICAgICMgY2hlY2sgaWYgY3h4YWJpIGNhbiBiZSB1c2VkIHdpdGggdGhpcwogICAgICAgICAgICMgc3lzdGVtIGFuZCBjb21waWxlci4KICAgICAgICAgICBLV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX0NYWEFCSQogICAgICAgICAgICAgIkNoZWNraW5nIHdoZXRoZXIgY3h4YWJpIHdvcmtzIHdpdGggdGhpcyBDKysgY29tcGlsZXIiIERJUkVDVCkKLSAgICAgICAgICBJRiAoS1dTWVNfQ1hYX0hBU19DWFhBQkkpCisgICAgICAgICAgaWYgKEtXU1lTX0NYWF9IQVNfQ1hYQUJJKQogICAgICAgICAgICAgIyBjKysgZGVtYW5nbGUgdXNpbmcgY3h4YWJpIGlzIHN1cHBvcnRlZCB3aXRoCiAgICAgICAgICAgICAjIHRoaXMgc3lzdGVtIGFuZCBjb21waWxlcgotICAgICAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICAgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19TWVNURU1JTkZPUk1BVElPTl9IQVNfQ1BQX0RFTUFOR0xFPTEpCi0gICAgICAgICAgRU5ESUYoKQotICAgICAgICBFTkRJRigpCisgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbmRpZigpCiAgICAgICAgICMgYmFzaWMgYmFja3RyYWNlIHdvcmtzIGJldHRlciB3aXRoIHJlbGVhc2UgYnVpbGQKICAgICAgICAgIyBkb24ndCBib3RoZXIgd2l0aCBhZHZhbmNlZCBmZWF0dXJlcyBmb3IgcmVsZWFzZQotICAgICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCiAgICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OU19ERUJVRyBLV1NZU19TWVNURU1JTkZPUk1BVElPTl9IQVNfREVCVUdfQlVJTEQ9MSkKLSAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQogICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlNfUkVMV0lUSERFQklORk8gS1dTWVNfU1lTVEVNSU5GT1JNQVRJT05fSEFTX0RFQlVHX0JVSUxEPTEpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi0gIElGKEJPUkxBTkQpCi0gICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19CT1JMQU5EX0FTTQotICAgICAgIkNoZWNraW5nIHdoZXRoZXIgQm9ybGFuZCBDWFggY29tcGlsZXIgc3VwcG9ydHMgYXNzZW1ibGVyIGluc3RydWN0aW9ucyIgRElSRUNUKQotICAgIElGKEtXU1lTX0NYWF9IQVNfQk9STEFORF9BU00pCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKLSAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNPTEpCi0gICAgICBLV1NZU19QTEFURk9STV9DWFhfVEVTVChLV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNX0NQVUlECi0gICAgICAgICJDaGVja2luZyB3aGV0aGVyIEJvcmxhbmQgQ1hYIGNvbXBpbGVyIHN1cHBvcnRzIENQVUlEIGFzc2VtYmxlciBpbnN0cnVjdGlvbiIgRElSRUNUKQotICAgICAgSUYoS1dTWVNfQ1hYX0hBU19CT1JMQU5EX0FTTV9DUFVJRCkKLSAgICAgICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCi0gICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNX0NQVUlEPTEpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi0gIElGKEtXU1lTX1VTRV9fX0lOVDY0KQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgU3lzdGVtSW5mb3JtYXRpb24uY3h4IHRlc3RTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCi0gICAgICBDT01QSUxFX0RFRklOSVRJT05TIEtXU1lTX1VTRV9fX0lOVDY0PTEpCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfVVNFX0xPTkdfTE9ORykKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQotICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19VU0VfTE9OR19MT05HPTEpCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORykKLSAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4IEFQUEVORCBQUk9QRVJUWQotICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HPTEpCi0gIEVORElGKCkKLSAgSUYoS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKLSAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfSU9TX0hBU19PU1RSRUFNX19fSU5UNjQ9MSkKLSAgRU5ESUYoKQotICBJRihLV1NZU19CVUlMRF9TSEFSRUQpCi0gICAgU0VUX1BST1BFUlRZKFNPVVJDRSBTeXN0ZW1JbmZvcm1hdGlvbi5jeHggQVBQRU5EIFBST1BFUlRZCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCisgIGlmKEtXU1lTX0JVSUxEX1NIQVJFRCkKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgS1dTWVNfQlVJTERfU0hBUkVEPTEpCi0gIEVORElGKCkKKyAgZW5kaWYoKQogCi0gIElGKFVOSVggQU5EIE5PVCBDWUdXSU4pCisgIGlmKFVOSVggQU5EIE5PVCBDWUdXSU4pCiAgICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19HRVRMT0FEQVZHCiAgICAgICAiQ2hlY2tpbmcgd2hldGhlciBDWFggY29tcGlsZXIgaGFzIGdldGxvYWRhdmciIERJUkVDVCkKLSAgICBJRihLV1NZU19DWFhfSEFTX0dFVExPQURBVkcpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKKyAgICBpZihLV1NZU19DWFhfSEFTX0dFVExPQURBVkcpCisgICAgICBzZXRfcHJvcGVydHkoU09VUkNFIFN5c3RlbUluZm9ybWF0aW9uLmN4eCBBUFBFTkQgUFJPUEVSVFkKICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyBLV1NZU19DWFhfSEFTX0dFVExPQURBVkc9MSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGlmKCkKIAotSUYoS1dTWVNfVVNFX0ZTdHJlYW0pCitpZihLV1NZU19VU0VfRlN0cmVhbSkKICAgS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QoS1dTWVNfQ1hYX0hBU19FWFRfU1RESU9fRklMRUJVRl9ICiAgICAgIkNoZWNraW5nIHdoZXRoZXIgPGV4dC9zdGRpb19maWxlYnVmLmg+IGlzIGF2YWlsYWJsZSIgRElSRUNUKQotRU5ESUYoKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ2hvb3NlIGEgZGlyZWN0b3J5IGZvciB0aGUgZ2VuZXJhdGVkIGhlYWRlcnMuCi1JRihOT1QgS1dTWVNfSEVBREVSX1JPT1QpCi0gIFNFVChLV1NZU19IRUFERVJfUk9PVCAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9IikKLUVORElGKCkKLVNFVChLV1NZU19IRUFERVJfRElSICIke0tXU1lTX0hFQURFUl9ST09UfS8ke0tXU1lTX05BTUVTUEFDRX0iKQotSU5DTFVERV9ESVJFQ1RPUklFUygke0tXU1lTX0hFQURFUl9ST09UfSkKK2lmKE5PVCBLV1NZU19IRUFERVJfUk9PVCkKKyAgc2V0KEtXU1lTX0hFQURFUl9ST09UICIke1BST0pFQ1RfQklOQVJZX0RJUn0iKQorZW5kaWYoKQorc2V0KEtXU1lTX0hFQURFUl9ESVIgIiR7S1dTWVNfSEVBREVSX1JPT1R9LyR7S1dTWVNfTkFNRVNQQUNFfSIpCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7S1dTWVNfSEVBREVSX1JPT1R9KQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUlGKEtXU1lTX0lOU1RBTExfRE9DX0RJUikKK2lmKEtXU1lTX0lOU1RBTExfRE9DX0RJUikKICAgIyBBc3NpZ24gdGhlIGxpY2Vuc2UgdG8gdGhlIHJ1bnRpbWUgY29tcG9uZW50IHNpbmNlIGl0IG11c3QgYmUKICAgIyBkaXN0cmlidXRlZCB3aXRoIGJpbmFyeSBmb3JtcyBvZiB0aGlzIHNvZnR3YXJlLgotICBJRihLV1NZU19JTlNUQUxMX0NPTVBPTkVOVF9OQU1FX1JVTlRJTUUpCi0gICAgU0VUKEtXU1lTX0lOU1RBTExfTElDRU5TRV9PUFRJT05TICR7S1dTWVNfSU5TVEFMTF9MSUNFTlNFX09QVElPTlN9CisgIGlmKEtXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfUlVOVElNRSkKKyAgICBzZXQoS1dTWVNfSU5TVEFMTF9MSUNFTlNFX09QVElPTlMgJHtLV1NZU19JTlNUQUxMX0xJQ0VOU0VfT1BUSU9OU30KICAgICAgIENPTVBPTkVOVCAke0tXU1lTX0lOU1RBTExfQ09NUE9ORU5UX05BTUVfUlVOVElNRX0KICAgICAgICkKLSAgRU5ESUYoKQorICBlbmRpZigpCiAKICAgIyBJbnN0YWxsIHRoZSBsaWNlbnNlIHVuZGVyIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4KLSAgSU5TVEFMTChGSUxFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ29weXJpZ2h0LnR4dAorICBpbnN0YWxsKEZJTEVTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9Db3B5cmlnaHQudHh0CiAgICAgREVTVElOQVRJT04gJHtLV1NZU19JTlNUQUxMX0RPQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfQogICAgICR7S1dTWVNfSU5TVEFMTF9MSUNFTlNFX09QVElPTlN9KQotRU5ESUYoKQorZW5kaWYoKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQnVpbGQgYSBsaXN0IG9mIGNsYXNzZXMgYW5kIGhlYWRlcnMgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhlCiAjIHNlbGVjdGVkIGNvbXBvbmVudHMuICBJbml0aWFsaXplIHdpdGggcmVxdWlyZWQgY29tcG9uZW50cy4KLVNFVChLV1NZU19DTEFTU0VTKQotU0VUKEtXU1lTX0hfRklMRVMgQ29uZmlndXJlIFNoYXJlZEZvcndhcmQpCi1TRVQoS1dTWVNfSFhYX0ZJTEVTIENvbmZpZ3VyZSBTdHJpbmcpCi0KLUlGKE5PVCBDTWFrZV9TT1VSQ0VfRElSKQotICBTRVQoS1dTWVNfSFhYX0ZJTEVTICR7S1dTWVNfSFhYX0ZJTEVTfQotICAgIGhhc2h0YWJsZSBoYXNoX2Z1biBoYXNoX21hcCBoYXNoX3NldAotICAgICkKLUVORElGKCkKK3NldChLV1NZU19DTEFTU0VTKQorc2V0KEtXU1lTX0hfRklMRVMgQ29uZmlndXJlIFNoYXJlZEZvcndhcmQpCitzZXQoS1dTWVNfSFhYX0ZJTEVTIENvbmZpZ3VyZSBTdHJpbmcpCiAKICMgQWRkIHNlbGVjdGVkIEMrKyBjbGFzc2VzLgotU0VUKGNwcGNsYXNzZXMKK3NldChjcHBjbGFzc2VzCiAgIERpcmVjdG9yeSBEeW5hbWljTG9hZGVyIEVuY29kaW5nIEdsb2IgUmVndWxhckV4cHJlc3Npb24gU3lzdGVtVG9vbHMKLSAgQ29tbWFuZExpbmVBcmd1bWVudHMgSU9TdHJlYW0gRlN0cmVhbSBTeXN0ZW1JbmZvcm1hdGlvbiBDb25zb2xlQnVmCisgIENvbW1hbmRMaW5lQXJndW1lbnRzIEZTdHJlYW0gU3lzdGVtSW5mb3JtYXRpb24gQ29uc29sZUJ1ZgogICApCi1GT1JFQUNIKGNwcCAke2NwcGNsYXNzZXN9KQotICBJRihLV1NZU19VU0VfJHtjcHB9KQorZm9yZWFjaChjcHAgJHtjcHBjbGFzc2VzfSkKKyAgaWYoS1dTWVNfVVNFXyR7Y3BwfSkKICAgICAjIFVzZSB0aGUgY29ycmVzcG9uZGluZyBjbGFzcy4KLSAgICBTRVQoS1dTWVNfQ0xBU1NFUyAke0tXU1lTX0NMQVNTRVN9ICR7Y3BwfSkKKyAgICBzZXQoS1dTWVNfQ0xBU1NFUyAke0tXU1lTX0NMQVNTRVN9ICR7Y3BwfSkKIAogICAgICMgTG9hZCBjb21wb25lbnQtc3BlY2lmaWMgQ01ha2UgY29kZS4KLSAgICBJRihFWElTVFMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjcHB9LmNtYWtlKQotICAgICAgSU5DTFVERSgke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXMke2NwcH0uY21ha2UpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi1FTkRGT1JFQUNIKCkKKyAgICBpZihFWElTVFMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjcHB9LmNtYWtlKQorICAgICAgaW5jbHVkZSgke1BST0pFQ1RfU09VUkNFX0RJUn0va3dzeXMke2NwcH0uY21ha2UpCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKIAogIyBBZGQgc2VsZWN0ZWQgQyBjb21wb25lbnRzLgotRk9SRUFDSChjCitmb3JlYWNoKGMKICAgICBQcm9jZXNzIEJhc2U2NCBFbmNvZGluZyBNRDUgVGVybWluYWwgU3lzdGVtIFN0cmluZwogICAgICkKLSAgSUYoS1dTWVNfVVNFXyR7Y30pCisgIGlmKEtXU1lTX1VTRV8ke2N9KQogICAgICMgVXNlIHRoZSBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlLgotICAgIFNFVChLV1NZU19IX0ZJTEVTICR7S1dTWVNfSF9GSUxFU30gJHtjfSkKKyAgICBzZXQoS1dTWVNfSF9GSUxFUyAke0tXU1lTX0hfRklMRVN9ICR7Y30pCiAKICAgICAjIExvYWQgY29tcG9uZW50LXNwZWNpZmljIENNYWtlIGNvZGUuCi0gICAgSUYoRVhJU1RTICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9rd3N5cyR7Y30uY21ha2UpCi0gICAgICBJTkNMVURFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9rd3N5cyR7Y30uY21ha2UpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi1FTkRGT1JFQUNIKCkKKyAgICBpZihFWElTVFMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjfS5jbWFrZSkKKyAgICAgIGluY2x1ZGUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2t3c3lzJHtjfS5jbWFrZSkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQnVpbGQgYSBsaXN0IG9mIHNvdXJjZXMgZm9yIHRoZSBsaWJyYXJ5IGJhc2VkIG9uIGNvbXBvbmVudHMgdGhhdCBhcmUKICMgaW5jbHVkZWQuCi1TRVQoS1dTWVNfQ19TUkNTKQotU0VUKEtXU1lTX0NYWF9TUkNTKQorc2V0KEtXU1lTX0NfU1JDUykKK3NldChLV1NZU19DWFhfU1JDUykKIAogIyBBZGQgdGhlIHByb3BlciBzb3VyY2VzIGZvciB0aGlzIHBsYXRmb3JtJ3MgUHJvY2VzcyBpbXBsZW1lbnRhdGlvbi4KLUlGKEtXU1lTX1VTRV9Qcm9jZXNzKQotICBJRihOT1QgVU5JWCkKK2lmKEtXU1lTX1VTRV9Qcm9jZXNzKQorICBpZihOT1QgVU5JWCkKICAgICAjIFVzZSB0aGUgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KLSAgICBTRVQoS1dTWVNfQ19TUkNTICR7S1dTWVNfQ19TUkNTfSBQcm9jZXNzV2luMzIuYykKLSAgRUxTRSgpCisgICAgc2V0KEtXU1lTX0NfU1JDUyAke0tXU1lTX0NfU1JDU30gUHJvY2Vzc1dpbjMyLmMpCisgIGVsc2UoKQogICAgICMgVXNlIHRoZSBVTklYIGltcGxlbWVudGF0aW9uLgotICAgIFNFVChLV1NZU19DX1NSQ1MgJHtLV1NZU19DX1NSQ1N9IFByb2Nlc3NVTklYLmMpCi0gIEVORElGKCkKLUVORElGKCkKKyAgICBzZXQoS1dTWVNfQ19TUkNTICR7S1dTWVNfQ19TUkNTfSBQcm9jZXNzVU5JWC5jKQorICBlbmRpZigpCitlbmRpZigpCiAKICMgQWRkIHNlbGVjdGVkIEMgc291cmNlcy4KLUZPUkVBQ0goYyBCYXNlNjQgRW5jb2RpbmcgTUQ1IFRlcm1pbmFsIFN5c3RlbSBTdHJpbmcpCi0gIElGKEtXU1lTX1VTRV8ke2N9KQotICAgIElGKEVYSVNUUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtjfUMuYykKLSAgICAgIExJU1QoQVBQRU5EIEtXU1lTX0NfU1JDUyAke2N9Qy5jKQotICAgIEVMU0UoKQotICAgICAgTElTVChBUFBFTkQgS1dTWVNfQ19TUkNTICR7Y30uYykKLSAgICBFTkRJRigpCi0gIEVORElGKCkKLUVOREZPUkVBQ0goKQorZm9yZWFjaChjIEJhc2U2NCBFbmNvZGluZyBNRDUgVGVybWluYWwgU3lzdGVtIFN0cmluZykKKyAgaWYoS1dTWVNfVVNFXyR7Y30pCisgICAgaWYoRVhJU1RTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2N9Qy5jKQorICAgICAgbGlzdChBUFBFTkQgS1dTWVNfQ19TUkNTICR7Y31DLmMpCisgICAgZWxzZSgpCisgICAgICBsaXN0KEFQUEVORCBLV1NZU19DX1NSQ1MgJHtjfS5jKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCiAKICMgQ29uZmlndXJlIGhlYWRlcnMgb2YgQysrIGNsYXNzZXMgYW5kIGNvbnN0cnVjdCB0aGUgbGlzdCBvZiBzb3VyY2VzLgotRk9SRUFDSChjICR7S1dTWVNfQ0xBU1NFU30pCitmb3JlYWNoKGMgJHtLV1NZU19DTEFTU0VTfSkKICAgIyBBZGQgdGhpcyBzb3VyY2UgdG8gdGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIGZvciB0aGUgbGlicmFyeS4KLSAgSUYoRVhJU1RTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2N9Q1hYLmN4eCkKLSAgICBMSVNUKEFQUEVORCBLV1NZU19DWFhfU1JDUyAke2N9Q1hYLmN4eCkKLSAgRUxTRUlGKEVYSVNUUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtjfS5jeHgpCi0gICAgTElTVChBUFBFTkQgS1dTWVNfQ1hYX1NSQ1MgJHtjfS5jeHgpCi0gIEVORElGKCkKKyAgaWYoRVhJU1RTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2N9Q1hYLmN4eCkKKyAgICBsaXN0KEFQUEVORCBLV1NZU19DWFhfU1JDUyAke2N9Q1hYLmN4eCkKKyAgZWxzZWlmKEVYSVNUUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtjfS5jeHgpCisgICAgbGlzdChBUFBFTkQgS1dTWVNfQ1hYX1NSQ1MgJHtjfS5jeHgpCisgIGVuZGlmKCkKIAogICAjIENvbmZpZ3VyZSB0aGUgaGVhZGVyIGZvciB0aGlzIGNsYXNzLgotICBDT05GSUdVUkVfRklMRSgke1BST0pFQ1RfU09VUkNFX0RJUn0vJHtjfS5oeHguaW4gJHtLV1NZU19IRUFERVJfRElSfS8ke2N9Lmh4eAorICBjb25maWd1cmVfZmlsZSgke1BST0pFQ1RfU09VUkNFX0RJUn0vJHtjfS5oeHguaW4gJHtLV1NZU19IRUFERVJfRElSfS8ke2N9Lmh4eAogICAgICAgICAgICAgICAgICBAT05MWSBJTU1FRElBVEUpCi0gIFNFVChLV1NZU19DWFhfU1JDUyAke0tXU1lTX0NYWF9TUkNTfSAke0tXU1lTX0hFQURFUl9ESVJ9LyR7Y30uaHh4KQorICBzZXQoS1dTWVNfQ1hYX1NSQ1MgJHtLV1NZU19DWFhfU1JDU30gJHtLV1NZU19IRUFERVJfRElSfS8ke2N9Lmh4eCkKIAogICAjIENyZWF0ZSBhbiBpbnN0YWxsIHRhcmdldCBmb3IgdGhlIGhlYWRlci4KLSAgSUYoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUikKLSAgICBJTlNUQUxMKEZJTEVTICR7S1dTWVNfSEVBREVSX0RJUn0vJHtjfS5oeHgKKyAgaWYoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUikKKyAgICBpbnN0YWxsKEZJTEVTICR7S1dTWVNfSEVBREVSX0RJUn0vJHtjfS5oeHgKICAgICAgIERFU1RJTkFUSU9OICR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9CiAgICAgICAke0tXU1lTX0lOU1RBTExfSU5DTFVERV9PUFRJT05TfSkKLSAgRU5ESUYoKQotRU5ERk9SRUFDSCgpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQogCiAjIENvbmZpZ3VyZSBDIGhlYWRlcnMuCi1GT1JFQUNIKGggJHtLV1NZU19IX0ZJTEVTfSkKK2ZvcmVhY2goaCAke0tXU1lTX0hfRklMRVN9KQogICAjIENvbmZpZ3VyZSB0aGUgaGVhZGVyIGludG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4KLSAgQ09ORklHVVJFX0ZJTEUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9LyR7aH0uaC5pbiAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaAorICBjb25maWd1cmVfZmlsZSgke1BST0pFQ1RfU09VUkNFX0RJUn0vJHtofS5oLmluICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oCiAgICAgICAgICAgICAgICAgIEBPTkxZIElNTUVESUFURSkKLSAgU0VUKEtXU1lTX0NfU1JDUyAke0tXU1lTX0NfU1JDU30gJHtLV1NZU19IRUFERVJfRElSfS8ke2h9LmgpCisgIHNldChLV1NZU19DX1NSQ1MgJHtLV1NZU19DX1NSQ1N9ICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oKQogCiAgICMgQ3JlYXRlIGFuIGluc3RhbGwgdGFyZ2V0IGZvciB0aGUgaGVhZGVyLgotICBJRihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICAgIElOU1RBTEwoRklMRVMgJHtLV1NZU19IRUFERVJfRElSfS8ke2h9LmgKKyAgaWYoS1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUikKKyAgICBpbnN0YWxsKEZJTEVTICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oCiAgICAgICBERVNUSU5BVElPTiAke0tXU1lTX0lOU1RBTExfSU5DTFVERV9ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfQogICAgICAgJHtLV1NZU19JTlNUQUxMX0lOQ0xVREVfT1BUSU9OU30pCi0gIEVORElGKCkKLUVOREZPUkVBQ0goKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKIAogIyBDb25maWd1cmUgb3RoZXIgQysrIGhlYWRlcnMuCi1GT1JFQUNIKGggJHtLV1NZU19IWFhfRklMRVN9KQorZm9yZWFjaChoICR7S1dTWVNfSFhYX0ZJTEVTfSkKICAgIyBDb25maWd1cmUgdGhlIGhlYWRlciBpbnRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuCi0gIENPTkZJR1VSRV9GSUxFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS8ke2h9Lmh4eC5pbiAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaHh4CisgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS8ke2h9Lmh4eC5pbiAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaHh4CiAgICAgICAgICAgICAgICAgIEBPTkxZIElNTUVESUFURSkKLSAgU0VUKEtXU1lTX0NYWF9TUkNTICR7S1dTWVNfQ1hYX1NSQ1N9ICR7S1dTWVNfSEVBREVSX0RJUn0vJHtofS5oeHgpCisgIHNldChLV1NZU19DWFhfU1JDUyAke0tXU1lTX0NYWF9TUkNTfSAke0tXU1lTX0hFQURFUl9ESVJ9LyR7aH0uaHh4KQogCiAgICMgQ3JlYXRlIGFuIGluc3RhbGwgdGFyZ2V0IGZvciB0aGUgaGVhZGVyLgotICBJRihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICAgIElOU1RBTEwoRklMRVMgJHtLV1NZU19IRUFERVJfRElSfS8ke2h9Lmh4eAorICBpZihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQorICAgIGluc3RhbGwoRklMRVMgJHtLV1NZU19IRUFERVJfRElSfS8ke2h9Lmh4eAogICAgICAgREVTVElOQVRJT04gJHtLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSfS8ke0tXU1lTX05BTUVTUEFDRX0KICAgICAgICR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX09QVElPTlN9KQotICBFTkRJRigpCi1FTkRGT1JFQUNIKCkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBBZGQgdGhlIGxpYnJhcnkgd2l0aCB0aGUgY29uZmlndXJlZCBuYW1lIGFuZCBsaXN0IG9mIHNvdXJjZXMuCi1JRihLV1NZU19DX1NSQ1MgT1IgS1dTWVNfQ1hYX1NSQ1MpCi0gIElGKEtXU1lTX1NQTElUX09CSkVDVFNfRlJPTV9JTlRFUkZBQ0UpCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9JTlRFUkZBQ0UgJHtLV1NZU19OQU1FU1BBQ0V9KQotICAgIFNFVChLV1NZU19UQVJHRVRfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfV9vYmplY3RzKQotICAgIFNFVChLV1NZU19UQVJHRVRfTElOSyAke0tXU1lTX05BTUVTUEFDRX1fcHJpdmF0ZSkKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0lOU1RBTEwgJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX1RBUkdFVF9MSU5LfSkKLSAgICBTRVQoS1dTWVNfTElOS19ERVBFTkRFTkNZIElOVEVSRkFDRSkKLSAgICBBRERfTElCUkFSWSgke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IE9CSkVDVAoraWYoS1dTWVNfQ19TUkNTIE9SIEtXU1lTX0NYWF9TUkNTKQorICBpZihLV1NZU19TUExJVF9PQkpFQ1RTX0ZST01fSU5URVJGQUNFKQorICAgIHNldChLV1NZU19UQVJHRVRfSU5URVJGQUNFICR7S1dTWVNfTkFNRVNQQUNFfSkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX09CSkVDVCAke0tXU1lTX05BTUVTUEFDRX1fb2JqZWN0cykKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0xJTksgJHtLV1NZU19OQU1FU1BBQ0V9X3ByaXZhdGUpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9JTlNUQUxMICR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19UQVJHRVRfTElOS30pCisgICAgc2V0KEtXU1lTX0xJTktfREVQRU5ERU5DWSBJTlRFUkZBQ0UpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfT0JKRUNUfSBPQkpFQ1QKICAgICAgICR7S1dTWVNfQ19TUkNTfSAke0tXU1lTX0NYWF9TUkNTfSkKLSAgICBJRihLV1NZU19CVUlMRF9TSEFSRUQgT1IgS1dTWVNfQlVJTERfUElDKQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCAke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IFBST1BFUlRZCisgICAgaWYoS1dTWVNfQlVJTERfU0hBUkVEIE9SIEtXU1lTX0JVSUxEX1BJQykKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19UQVJHRVRfT0JKRUNUfSBQUk9QRVJUWQogICAgICAgICBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIFRSVUUpCi0gICAgRU5ESUYoKQotICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gSU5URVJGQUNFKQotICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfVEFSR0VUX0xJTkt9IElOVEVSRkFDRSkKLSAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfTElOS30gSU5URVJGQUNFCisgICAgZW5kaWYoKQorICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gSU5URVJGQUNFKQorICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfVEFSR0VUX0xJTkt9IElOVEVSRkFDRSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfTElOS30gSU5URVJGQUNFCiAgICAgICAke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9KQotICAgIFRBUkdFVF9TT1VSQ0VTKCR7S1dTWVNfVEFSR0VUX0xJTkt9IElOVEVSRkFDRQorICAgIHRhcmdldF9zb3VyY2VzKCR7S1dTWVNfVEFSR0VUX0xJTkt9IElOVEVSRkFDRQogICAgICAgJDxUQVJHRVRfT0JKRUNUUzoke0tXU1lTX1RBUkdFVF9PQkpFQ1R9PikKICAgICB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcygke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IFBSSVZBVEUgJHtLV1NZU19DWFhfQ09NUElMRV9GRUFUVVJFU30pCiAgICAgdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBJTlRFUkZBQ0UgJHtLV1NZU19DWFhfQ09NUElMRV9GRUFUVVJFU30pCi0gIEVMU0UoKQotICAgIFNFVChLV1NZU19UQVJHRVRfSU5URVJGQUNFICR7S1dTWVNfTkFNRVNQQUNFfSkKLSAgICBTRVQoS1dTWVNfVEFSR0VUX09CSkVDVCAke0tXU1lTX05BTUVTUEFDRX0pCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9MSU5LICR7S1dTWVNfTkFNRVNQQUNFfSkKKyAgZWxzZSgpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9JTlRFUkZBQ0UgJHtLV1NZU19OQU1FU1BBQ0V9KQorICAgIHNldChLV1NZU19UQVJHRVRfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfSkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0xJTksgJHtLV1NZU19OQU1FU1BBQ0V9KQogICAgIHNldChLV1NZU19UQVJHRVRfSU5TVEFMTCAke0tXU1lTX1RBUkdFVF9MSU5LfSkKLSAgICBTRVQoS1dTWVNfTElOS19ERVBFTkRFTkNZIFBVQkxJQykKLSAgICBBRERfTElCUkFSWSgke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElCUkFSWV9UWVBFfQorICAgIHNldChLV1NZU19MSU5LX0RFUEVOREVOQ1kgUFVCTElDKQorICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSUJSQVJZX1RZUEV9CiAgICAgICAke0tXU1lTX0NfU1JDU30gJHtLV1NZU19DWFhfU1JDU30pCiAgICAgdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBQVUJMSUMgJHtLV1NZU19DWFhfQ09NUElMRV9GRUFUVVJFU30pCi0gIEVORElGKCkKKyAgZW5kaWYoKQogICBpZiAoS1dTWVNfQUxJQVNfVEFSR0VUKQogICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfQUxJQVNfVEFSR0VUfSBBTElBUyAke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9KQogICBlbmRpZiAoKQotICBTRVRfVEFSR0VUX1BST1BFUlRJRVMoJHtLV1NZU19UQVJHRVRfT0JKRUNUfSBQUk9QRVJUSUVTCisgIHNldF90YXJnZXRfcHJvcGVydGllcygke0tXU1lTX1RBUkdFVF9PQkpFQ1R9IFBST1BFUlRJRVMKICAgICBDX0NMQU5HX1RJRFkgIiIKICAgICBDWFhfQ0xBTkdfVElEWSAiIgogICAgIENfSU5DTFVERV9XSEFUX1lPVV9VU0UgIiIKICAgICBDWFhfSU5DTFVERV9XSEFUX1lPVV9VU0UgIiIKICAgICBMQUJFTFMgIiR7S1dTWVNfTEFCRUxTX0xJQn0iKQotICBJRihLV1NZU19VU0VfRHluYW1pY0xvYWRlcikKLSAgICBJRihVTklYKQotICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CisgIGlmKEtXU1lTX1VTRV9EeW5hbWljTG9hZGVyKQorICAgIGlmKFVOSVgpCisgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0KICAgICAgICAgJHtDTUFLRV9ETF9MSUJTfSkKLSAgICBFTkRJRigpCi0gIEVORElGKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKIAotICBJRihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCi0gICAgSUYoV0lOMzIpCi0gICAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0gd3MyXzMyKQorICBpZihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCisgICAgaWYoV0lOMzIpCisgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0gd3MyXzMyKQogICAgICAgIyBsaW5rIGluIGRiZ2hlbHAuZGxsIGZvciBzeW1ib2wgbG9va3VwIGlmIE1TVkMgMTgwMCBvciBsYXRlcgogICAgICAgIyBOb3RlIHRoYXQgdGhlIGRiZ2hlbHAgcnVudGltZSBpcyBwYXJ0IG9mIE1TIFdpbmRvd3MgT1MKLSAgICAgIElGKE1TVkNfVkVSU0lPTiBBTkQgTk9UIE1TVkNfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTgwMCkKLSAgICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9IGRiZ2hlbHApCi0gICAgICBFTkRJRigpCi0gICAgICBJRihLV1NZU19TWVNfSEFTX1BTQVBJKQotICAgICAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0KLSAgICAgICAgICBQc2FwaSkKLSAgICAgIEVORElGKCkKLSAgICBFTFNFSUYoVU5JWCkKLSAgICAgIElGIChFWEVDSU5GT19MSUIgQU5EIEtXU1lTX0NYWF9IQVNfQkFDS1RSQUNFKQorICAgICAgaWYoTVNWQ19WRVJTSU9OIEFORCBOT1QgTVNWQ19WRVJTSU9OIFZFUlNJT05fTEVTUyAxODAwKQorICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSAke0tXU1lTX0xJTktfREVQRU5ERU5DWX0gZGJnaGVscCkKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmKEtXU1lTX1NZU19IQVNfUFNBUEkpCisgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfQorICAgICAgICAgIHBzYXBpKQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZihVTklYKQorICAgICAgaWYgKEVYRUNJTkZPX0xJQiBBTkQgS1dTWVNfQ1hYX0hBU19CQUNLVFJBQ0UpCiAgICAgICAgICMgYmFja3RyYWNlIG9uIEZyZWVCU0QgaXMgbm90IGluIGxpYmMKLSAgICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CisgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfQogICAgICAgICAgICR7RVhFQ0lORk9fTElCfSkKLSAgICAgIEVORElGKCkKLSAgICAgIElGIChLV1NZU19DWFhfSEFTX0RMQUREUikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGlmIChLV1NZU19DWFhfSEFTX0RMQUREUikKICAgICAgICAgIyBmb3Igc3ltYm9sIGxvb2t1cCB1c2luZyBkbGFkZHIKLSAgICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CisgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9ICR7S1dTWVNfTElOS19ERVBFTkRFTkNZfQogICAgICAgICAgICR7Q01BS0VfRExfTElCU30pCi0gICAgICBFTkRJRigpCi0gICAgICBJRiAoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIlN1bk9TIikKLSAgICAgICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CisgICAgICBlbmRpZigpCisgICAgICBpZiAoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIlN1bk9TIikKKyAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0gJHtLV1NZU19MSU5LX0RFUEVOREVOQ1l9CiAgICAgICAgICAgc29ja2V0KQotICAgICAgRU5ESUYoKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQogCiAgICMgQXBwbHkgdXNlci1kZWZpbmVkIHRhcmdldCBwcm9wZXJ0aWVzIHRvIHRoZSBsaWJyYXJ5LgotICBJRihLV1NZU19QUk9QRVJUSUVTX0NYWCkKLSAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBQUk9QRVJUSUVTCisgIGlmKEtXU1lTX1BST1BFUlRJRVNfQ1hYKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IFBST1BFUlRJRVMKICAgICAgICR7S1dTWVNfUFJPUEVSVElFU19DWFh9KQotICBFTkRJRigpCisgIGVuZGlmKCkKIAogICAjIFNldCB1cCBpbmNsdWRlIHVzYWdlIHJlcXVpcmVtZW50Ci0gIElGKENPTU1BTkQgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMpCi0gICAgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMoJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSBJTlRFUkZBQ0UKKyAgaWYoQ09NTUFORCBUQVJHRVRfSU5DTFVERV9ESVJFQ1RPUklFUykKKyAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IElOVEVSRkFDRQogICAgICAgJDxCVUlMRF9JTlRFUkZBQ0U6JHtLV1NZU19IRUFERVJfUk9PVH0+KQotICAgIElGKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCi0gICAgICBUQVJHRVRfSU5DTFVERV9ESVJFQ1RPUklFUygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IElOVEVSRkFDRQorICAgIGlmKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCisgICAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcygke0tXU1lTX1RBUkdFVF9JTlRFUkZBQ0V9IElOVEVSRkFDRQogICAgICAgICAkPElOU1RBTExfSU5URVJGQUNFOiR7S1dTWVNfSU5TVEFMTF9JTkNMVURFX0RJUn0+KQotICAgIEVORElGKCkKLSAgRU5ESUYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQogCiAgICMgQ3JlYXRlIGFuIGluc3RhbGwgdGFyZ2V0IGZvciB0aGUgbGlicmFyeS4KLSAgSUYoS1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEUpCi0gICAgSU5TVEFMTChUQVJHRVRTICR7S1dTWVNfVEFSR0VUX0lOU1RBTEx9ICR7S1dTWVNfSU5TVEFMTF9MSUJSQVJZX1JVTEV9KQotICBFTkRJRigpCi0gIElGKEtXU1lTX0lOU1RBTExfTkFNRUxJTktfUlVMRSkKLSAgICBJTlNUQUxMKFRBUkdFVFMgJHtLV1NZU19UQVJHRVRfSU5TVEFMTH0gJHtLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEV9KQotICBFTkRJRigpCi1FTkRJRigpCisgIGlmKEtXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFKQorICAgIGluc3RhbGwoVEFSR0VUUyAke0tXU1lTX1RBUkdFVF9JTlNUQUxMfSAke0tXU1lTX0lOU1RBTExfTElCUkFSWV9SVUxFfSkKKyAgZW5kaWYoKQorICBpZihLV1NZU19JTlNUQUxMX05BTUVMSU5LX1JVTEUpCisgICAgaW5zdGFsbChUQVJHRVRTICR7S1dTWVNfVEFSR0VUX0lOU1RBTEx9ICR7S1dTWVNfSU5TVEFMTF9OQU1FTElOS19SVUxFfSkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjIEFkZCBhIEMtb25seSBsaWJyYXJ5IGlmIHJlcXVlc3RlZC4KLUlGKEtXU1lTX0VOQUJMRV9DIEFORCBLV1NZU19DX1NSQ1MpCi0gSUYoS1dTWVNfU1BMSVRfT0JKRUNUU19GUk9NX0lOVEVSRkFDRSkKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFICR7S1dTWVNfTkFNRVNQQUNFfV9jKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19PQkpFQ1QgJHtLV1NZU19OQU1FU1BBQ0V9X2Nfb2JqZWN0cykKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0NfTElOSyAke0tXU1lTX05BTUVTUEFDRX1fY19wcml2YXRlKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19JTlNUQUxMCitpZihLV1NZU19FTkFCTEVfQyBBTkQgS1dTWVNfQ19TUkNTKQorIGlmKEtXU1lTX1NQTElUX09CSkVDVFNfRlJPTV9JTlRFUkZBQ0UpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRSAke0tXU1lTX05BTUVTUEFDRX1fYykKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0NfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfV9jX29iamVjdHMpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9DX0xJTksgJHtLV1NZU19OQU1FU1BBQ0V9X2NfcHJpdmF0ZSkKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0NfSU5TVEFMTAogICAgICAgJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9ICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCi0gICAgU0VUKEtXU1lTX0xJTktfREVQRU5ERU5DWSBJTlRFUkZBQ0UpCi0gICAgQUREX0xJQlJBUlkoJHtLV1NZU19UQVJHRVRfQ19PQkpFQ1R9IE9CSkVDVCAke0tXU1lTX0NfU1JDU30pCi0gICAgSUYoS1dTWVNfQlVJTERfU0hBUkVEIE9SIEtXU1lTX0JVSUxEX1BJQykKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgJHtLV1NZU19UQVJHRVRfQ19PQkpFQ1R9IFBST1BFUlRZCisgICAgc2V0KEtXU1lTX0xJTktfREVQRU5ERU5DWSBJTlRFUkZBQ0UpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfQ19PQkpFQ1R9IE9CSkVDVCAke0tXU1lTX0NfU1JDU30pCisgICAgaWYoS1dTWVNfQlVJTERfU0hBUkVEIE9SIEtXU1lTX0JVSUxEX1BJQykKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19UQVJHRVRfQ19PQkpFQ1R9IFBST1BFUlRZCiAgICAgICAgIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgVFJVRSkKLSAgICBFTkRJRigpCi0gICAgQUREX0xJQlJBUlkoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IElOVEVSRkFDRSkKLSAgICBBRERfTElCUkFSWSgke0tXU1lTX1RBUkdFVF9DX0xJTkt9IElOVEVSRkFDRSkKLSAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19UQVJHRVRfQ19MSU5LfSBJTlRFUkZBQ0UKKyAgICBlbmRpZigpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IElOVEVSRkFDRSkKKyAgICBhZGRfbGlicmFyeSgke0tXU1lTX1RBUkdFVF9DX0xJTkt9IElOVEVSRkFDRSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19UQVJHRVRfQ19MSU5LfSBJTlRFUkZBQ0UKICAgICAgICR7S1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFfSkKLSAgICBUQVJHRVRfU09VUkNFUygke0tXU1lTX1RBUkdFVF9DX0xJTkt9IElOVEVSRkFDRQorICAgIHRhcmdldF9zb3VyY2VzKCR7S1dTWVNfVEFSR0VUX0NfTElOS30gSU5URVJGQUNFCiAgICAgICAkPFRBUkdFVF9PQkpFQ1RTOiR7S1dTWVNfVEFSR0VUX0NfT0JKRUNUfT4pCi0gIEVMU0UoKQotICAgIFNFVChLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0UgJHtLV1NZU19OQU1FU1BBQ0V9X2MpCi0gICAgU0VUKEtXU1lTX1RBUkdFVF9DX09CSkVDVCAke0tXU1lTX05BTUVTUEFDRX1fYykKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0NfTElOSyAke0tXU1lTX05BTUVTUEFDRX1fYykKLSAgICBTRVQoS1dTWVNfVEFSR0VUX0NfSU5TVEFMTCAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQotICAgIFNFVChLV1NZU19MSU5LX0RFUEVOREVOQ1kgUFVCTElDKQotICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFfSAke0tXU1lTX0xJQlJBUllfVFlQRX0KKyAgZWxzZSgpCisgICAgc2V0KEtXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRSAke0tXU1lTX05BTUVTUEFDRX1fYykKKyAgICBzZXQoS1dTWVNfVEFSR0VUX0NfT0JKRUNUICR7S1dTWVNfTkFNRVNQQUNFfV9jKQorICAgIHNldChLV1NZU19UQVJHRVRfQ19MSU5LICR7S1dTWVNfTkFNRVNQQUNFfV9jKQorICAgIHNldChLV1NZU19UQVJHRVRfQ19JTlNUQUxMICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCisgICAgc2V0KEtXU1lTX0xJTktfREVQRU5ERU5DWSBQVUJMSUMpCisgICAgYWRkX2xpYnJhcnkoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9ICR7S1dTWVNfTElCUkFSWV9UWVBFfQogICAgICAgJHtLV1NZU19DX1NSQ1N9KQotICBFTkRJRigpCi0gIFNFVF9UQVJHRVRfUFJPUEVSVElFUygke0tXU1lTX1RBUkdFVF9DX09CSkVDVH0gUFJPUEVSVElFUworICBlbmRpZigpCisgIHNldF90YXJnZXRfcHJvcGVydGllcygke0tXU1lTX1RBUkdFVF9DX09CSkVDVH0gUFJPUEVSVElFUwogICAgIExBQkVMUyAiJHtLV1NZU19MQUJFTFNfTElCfSIpCiAKICAgIyBBcHBseSB1c2VyLWRlZmluZWQgdGFyZ2V0IHByb3BlcnRpZXMgdG8gdGhlIGxpYnJhcnkuCi0gIElGKEtXU1lTX1BST1BFUlRJRVNfQykKLSAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IFBST1BFUlRJRVMKKyAgaWYoS1dTWVNfUFJPUEVSVElFU19DKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gUFJPUEVSVElFUwogICAgICAgJHtLV1NZU19QUk9QRVJUSUVTX0N9KQotICBFTkRJRigpCisgIGVuZGlmKCkKIAogICAjIFNldCB1cCBpbmNsdWRlIHVzYWdlIHJlcXVpcmVtZW50Ci0gIElGKENPTU1BTkQgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMpCi0gICAgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IElOVEVSRkFDRQorICBpZihDT01NQU5EIFRBUkdFVF9JTkNMVURFX0RJUkVDVE9SSUVTKQorICAgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKCR7S1dTWVNfVEFSR0VUX0NfSU5URVJGQUNFfSBJTlRFUkZBQ0UKICAgICAgICQ8QlVJTERfSU5URVJGQUNFOiR7S1dTWVNfSEVBREVSX1JPT1R9PikKLSAgICBJRihLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSKQotICAgICAgVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMoJHtLV1NZU19UQVJHRVRfQ19JTlRFUkZBQ0V9IElOVEVSRkFDRQorICAgIGlmKEtXU1lTX0lOU1RBTExfSU5DTFVERV9ESVIpCisgICAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcygke0tXU1lTX1RBUkdFVF9DX0lOVEVSRkFDRX0gSU5URVJGQUNFCiAgICAgICAgICQ8SU5TVEFMTF9JTlRFUkZBQ0U6JHtLV1NZU19JTlNUQUxMX0lOQ0xVREVfRElSfT4pCi0gICAgRU5ESUYoKQotICBFTkRJRigpCisgICAgZW5kaWYoKQorICBlbmRpZigpCiAKICAgIyBDcmVhdGUgYW4gaW5zdGFsbCB0YXJnZXQgZm9yIHRoZSBsaWJyYXJ5LgotICBJRihLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSkKLSAgICBJTlNUQUxMKFRBUkdFVFMgJHtLV1NZU19UQVJHRVRfQ19JTlNUQUxMfSkKLSAgRU5ESUYoKQotRU5ESUYoKQorICBpZihLV1NZU19JTlNUQUxMX0xJQlJBUllfUlVMRSkKKyAgICBpbnN0YWxsKFRBUkdFVFMgJHtLV1NZU19UQVJHRVRfQ19JTlNUQUxMfSkKKyAgZW5kaWYoKQorZW5kaWYoKQogCiAjIEZvciBidWlsZGluZyBrd3N5cyBpdHNlbGYsIHdlIHVzZSBhIG1hY3JvIGRlZmluZWQgb24gdGhlIGNvbW1hbmQKICMgbGluZSB0byBjb25maWd1cmUgdGhlIG5hbWVzcGFjZSBpbiB0aGUgQyBhbmQgQysrIHNvdXJjZSBmaWxlcy4KLUFERF9ERUZJTklUSU9OUygiLURLV1NZU19OQU1FU1BBQ0U9JHtLV1NZU19OQU1FU1BBQ0V9IikKK2FkZF9kZWZpbml0aW9ucygiLURLV1NZU19OQU1FU1BBQ0U9JHtLV1NZU19OQU1FU1BBQ0V9IikKIAogIyBEaXNhYmxlIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGZvciBzdGFuZGFyZCBDIGZ1bmN0aW9ucy4KLUlGKE1TVkMgT1IgKFdJTjMyIEFORCAoQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiSW50ZWwiIE9SCitpZihNU1ZDIE9SIChXSU4zMiBBTkQgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkludGVsIiBPUgogICAgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNsYW5nIiBBTkQgQ01BS0VfQ1hYX1NJTVVMQVRFX0lEIFNUUkVRVUFMICJNU1ZDIikpKSkKLSAgQUREX0RFRklOSVRJT05TKAorICBhZGRfZGVmaW5pdGlvbnMoCiAgICAgLURfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFCiAgICAgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUKICAgICAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCiAgICAgLURfU0NMX1NFQ1VSRV9OT19ERVBSRUNBVEUKICAgICApCi1FTkRJRigpCitlbmRpZigpCiAKLUlGKFdJTjMyKQoraWYoV0lOMzIpCiAgICMgSGVscCBlbmZvcmNlIHRoZSB1c2Ugb2Ygd2lkZSBXaW5kb3dzIGFwaXMuCi0gIEFERF9ERUZJTklUSU9OUygtRFVOSUNPREUgLURfVU5JQ09ERSkKLUVORElGKCkKKyAgYWRkX2RlZmluaXRpb25zKC1EVU5JQ09ERSAtRF9VTklDT0RFKQorZW5kaWYoKQogCi1JRihLV1NZU19VU0VfU3RyaW5nKQoraWYoS1dTWVNfVVNFX1N0cmluZykKICAgIyBBY3RpdmF0ZSBjb2RlIGluICJTdHJpbmcuYyIuICBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlIHNvdXJjZS4KLSAgU0VUX1NPVVJDRV9GSUxFU19QUk9QRVJUSUVTKFN0cmluZy5jIFBST1BFUlRJRVMKKyAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKFN0cmluZy5jIFBST1BFUlRJRVMKICAgICBDT01QSUxFX0ZMQUdTICItREtXU1lTX1NUUklOR19DIikKLUVORElGKCkKK2VuZGlmKCkKIAotSUYoS1dTWVNfVVNFX0VuY29kaW5nKQoraWYoS1dTWVNfVVNFX0VuY29kaW5nKQogICAjIFNldCBkZWZhdWx0IDggYml0IGVuY29kaW5nIGluICJFbmRjb2RpbmdDLmMiLgotICBTRVRfUFJPUEVSVFkoU09VUkNFIEVuY29kaW5nQy5jIEVuY29kaW5nQ1hYLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUworICBzZXRfcHJvcGVydHkoU09VUkNFIEVuY29kaW5nQy5jIEVuY29kaW5nQ1hYLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUwogICAgIEtXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0U9JHtLV1NZU19FTkNPRElOR19ERUZBVUxUX0NPREVQQUdFfSkKLUVORElGKCkKK2VuZGlmKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFNldHVwIHRlc3RpbmcgaWYgbm90IGJlaW5nIGJ1aWx0IGFzIHBhcnQgb2YgYW5vdGhlciBwcm9qZWN0LgotSUYoS1dTWVNfU1RBTkRBTE9ORSBPUiBDTWFrZV9TT1VSQ0VfRElSKQotICBJRihCVUlMRF9URVNUSU5HKQoraWYoS1dTWVNfU1RBTkRBTE9ORSBPUiBDTWFrZV9TT1VSQ0VfRElSKQorICBpZihCVUlMRF9URVNUSU5HKQogICAgICMgQ29tcHV0ZSB0aGUgbG9jYXRpb24gb2YgZXhlY3V0YWJsZXMuCi0gICAgU0VUKEVYRUNfRElSICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iKQotICAgIElGKEVYRUNVVEFCTEVfT1VUUFVUX1BBVEgpCi0gICAgICBTRVQoRVhFQ19ESVIgIiR7RVhFQ1VUQUJMRV9PVVRQVVRfUEFUSH0iKQotICAgIEVORElGKCkKKyAgICBzZXQoRVhFQ19ESVIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSIpCisgICAgaWYoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZKQorICAgICAgc2V0KEVYRUNfRElSICIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0iKQorICAgIGVuZGlmKCkKIAogICAgICMgQyB0ZXN0cwotICAgIFNFVChLV1NZU19DX1RFU1RTCisgICAgc2V0KEtXU1lTX0NfVEVTVFMKICAgICAgIHRlc3RFbmNvZGUuYwogICAgICAgdGVzdFRlcm1pbmFsLmMKICAgICAgICkKLSAgICBJRihLV1NZU19TVEFOREFMT05FKQotICAgICAgU0VUKEtXU1lTX0NfVEVTVFMgJHtLV1NZU19DX1RFU1RTfSB0ZXN0RmFpbC5jKQotICAgIEVORElGKCkKLSAgICBDUkVBVEVfVEVTVF9TT1VSQ0VMSVNUKAorICAgIGlmKEtXU1lTX1NUQU5EQUxPTkUpCisgICAgICBzZXQoS1dTWVNfQ19URVNUUyAke0tXU1lTX0NfVEVTVFN9IHRlc3RGYWlsLmMpCisgICAgZW5kaWYoKQorICAgIGNyZWF0ZV90ZXN0X3NvdXJjZWxpc3QoCiAgICAgICBLV1NZU19DX1RFU1RfU1JDUyAke0tXU1lTX05BTUVTUEFDRX1UZXN0c0MuYwogICAgICAgJHtLV1NZU19DX1RFU1RTfQogICAgICAgKQotICAgIEFERF9FWEVDVVRBQkxFKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQyAke0tXU1lTX0NfVEVTVF9TUkNTfSkKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQyBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKLSAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCi0gICAgRk9SRUFDSCh0ZXN0ZmlsZSAke0tXU1lTX0NfVEVTVFN9KQorICAgIGFkZF9leGVjdXRhYmxlKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQyAke0tXU1lTX0NfVEVTVF9TUkNTfSkKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQyBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCisgICAgZm9yZWFjaCh0ZXN0ZmlsZSAke0tXU1lTX0NfVEVTVFN9KQogICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0ICIke3Rlc3RmaWxlfSIgTkFNRV9XRSkKLSAgICAgIEFERF9URVNUKGt3c3lzLiR7dGVzdH0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7dGVzdH0gJHtLV1NZU19URVNUX0FSR1NfJHt0ZXN0fX0pCi0gICAgICBTRVRfUFJPUEVSVFkoVEVTVCBrd3N5cy4ke3Rlc3R9IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19URVNUfSkKLSAgICBFTkRGT1JFQUNIKCkKKyAgICAgIGFkZF90ZXN0KGt3c3lzLiR7dGVzdH0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDICR7dGVzdH0gJHtLV1NZU19URVNUX0FSR1NfJHt0ZXN0fX0pCisgICAgICBzZXRfcHJvcGVydHkoVEVTVCBrd3N5cy4ke3Rlc3R9IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19URVNUfSkKKyAgICBlbmRmb3JlYWNoKCkKIAogICAgICMgQysrIHRlc3RzCi0gICAgSUYoTk9UIFdBVENPTSBBTkQgTk9UIENNYWtlX1NPVVJDRV9ESVIpCi0gICAgICBTRVQoS1dTWVNfQ1hYX1RFU1RTCi0gICAgICAgIHRlc3RIYXNoU1RMLmN4eAotICAgICAgICApCi0gICAgRU5ESUYoKQotICAgIFNFVChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9CisgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KICAgICAgIHRlc3RDb25maWd1cmUuY3h4CiAgICAgICB0ZXN0U3lzdGVtVG9vbHMuY3h4CiAgICAgICB0ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMuY3h4CiAgICAgICB0ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMxLmN4eAogICAgICAgdGVzdERpcmVjdG9yeS5jeHgKICAgICAgICkKLSAgICBJRihLV1NZU19TVExfSEFTX1dTVFJJTkcpCi0gICAgICBTRVQoS1dTWVNfQ1hYX1RFU1RTICR7S1dTWVNfQ1hYX1RFU1RTfQorICAgIGlmKEtXU1lTX1NUTF9IQVNfV1NUUklORykKKyAgICAgIHNldChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9CiAgICAgICAgIHRlc3RFbmNvZGluZy5jeHgKICAgICAgICAgKQotICAgIEVORElGKCkKLSAgICBJRihLV1NZU19VU0VfRlN0cmVhbSkKLSAgICAgIFNFVChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9CisgICAgZW5kaWYoKQorICAgIGlmKEtXU1lTX1VTRV9GU3RyZWFtKQorICAgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KICAgICAgICAgdGVzdEZTdHJlYW0uY3h4CiAgICAgICAgICkKLSAgICBFTkRJRigpCi0gICAgSUYoS1dTWVNfVVNFX0NvbnNvbGVCdWYpCi0gICAgICBBRERfRVhFQ1VUQUJMRSh0ZXN0Q29uc29sZUJ1ZkNoaWxkIHRlc3RDb25zb2xlQnVmQ2hpbGQuY3h4KQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENfQ0xBTkdfVElEWSAiIikKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDWFhfQ0xBTkdfVElEWSAiIikKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKLSAgICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKLSAgICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUyh0ZXN0Q29uc29sZUJ1ZkNoaWxkICR7S1dTWVNfVEFSR0VUX0xJTkt9KQotICAgICAgU0VUKEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KKyAgICBlbmRpZigpCisgICAgaWYoS1dTWVNfVVNFX0NvbnNvbGVCdWYpCisgICAgICBhZGRfZXhlY3V0YWJsZSh0ZXN0Q29uc29sZUJ1ZkNoaWxkIHRlc3RDb25zb2xlQnVmQ2hpbGQuY3h4KQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENfQ0xBTkdfVElEWSAiIikKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDWFhfQ0xBTkdfVElEWSAiIikKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBDX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0Q29uc29sZUJ1ZkNoaWxkIFBST1BFUlRZIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKKyAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdENvbnNvbGVCdWZDaGlsZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfRVhFfSkKKyAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0Q29uc29sZUJ1ZkNoaWxkICR7S1dTWVNfVEFSR0VUX0xJTkt9KQorICAgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30KICAgICAgICAgdGVzdENvbnNvbGVCdWYuY3h4CiAgICAgICAgICkKLSAgICAgIElGKENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCAiTVNWQyIgQU5ECisgICAgICBpZihDTUFLRV9DWFhfQ09NUElMRVJfSUQgU1RSRVFVQUwgIk1TVkMiIEFORAogICAgICAgICAgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSICIxOS4wLjIzNTA2IikKICAgICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSB0ZXN0Q29uc29sZUJ1Zi5jeHggdGVzdENvbnNvbGVCdWZDaGlsZC5jeHggUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAvdXRmLTgpCi0gICAgICBFTkRJRigpCi0gICAgICBTRVRfUFJPUEVSVFkoU09VUkNFIHRlc3RDb25zb2xlQnVmLmN4eCBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUworICAgICAgZW5kaWYoKQorICAgICAgc2V0X3Byb3BlcnR5KFNPVVJDRSB0ZXN0Q29uc29sZUJ1Zi5jeHggQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMKICAgICAgICAgS1dTWVNfRU5DT0RJTkdfREVGQVVMVF9DT0RFUEFHRT0ke0tXU1lTX0VOQ09ESU5HX0RFRkFVTFRfQ09ERVBBR0V9KQotICAgIEVORElGKCkKLSAgICBJRihLV1NZU19VU0VfU3lzdGVtSW5mb3JtYXRpb24pCi0gICAgICBTRVQoS1dTWVNfQ1hYX1RFU1RTICR7S1dTWVNfQ1hYX1RFU1RTfSB0ZXN0U3lzdGVtSW5mb3JtYXRpb24uY3h4KQotICAgIEVORElGKCkKLSAgICBJRihLV1NZU19VU0VfRHluYW1pY0xvYWRlcikKLSAgICAgIFNFVChLV1NZU19DWFhfVEVTVFMgJHtLV1NZU19DWFhfVEVTVFN9IHRlc3REeW5hbWljTG9hZGVyLmN4eCkKKyAgICBlbmRpZigpCisgICAgaWYoS1dTWVNfVVNFX1N5c3RlbUluZm9ybWF0aW9uKQorICAgICAgc2V0KEtXU1lTX0NYWF9URVNUUyAke0tXU1lTX0NYWF9URVNUU30gdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eCkKKyAgICBlbmRpZigpCisgICAgaWYoS1dTWVNfVVNFX0R5bmFtaWNMb2FkZXIpCisgICAgICBzZXQoS1dTWVNfQ1hYX1RFU1RTICR7S1dTWVNfQ1hYX1RFU1RTfSB0ZXN0RHluYW1pY0xvYWRlci5jeHgpCiAgICAgICAjIElmIGt3c3lzIGNvbnRhaW5zIHRoZSBEeW5hbWljTG9hZGVyLCBuZWVkIGV4dHJhIGxpYnJhcnkKLSAgICAgIEFERF9MSUJSQVJZKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkIE1PRFVMRSB0ZXN0RHlubG9hZC5jKQotICAgICAgU0VUX1BST1BFUlRZKFRBUkdFVCAke0tXU1lTX05BTUVTUEFDRX1UZXN0RHlubG9hZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfTElCfSkKLSAgICAgIEFERF9ERVBFTkRFTkNJRVMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdER5bmxvYWQgJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSkKKyAgICAgIGFkZF9saWJyYXJ5KCR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkIE1PRFVMRSB0ZXN0RHlubG9hZC5jKQorICAgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke0tXU1lTX05BTUVTUEFDRX1UZXN0RHlubG9hZCBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfTElCfSkKKyAgICAgIGFkZF9kZXBlbmRlbmNpZXMoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdER5bmxvYWQgJHtLV1NZU19UQVJHRVRfSU5URVJGQUNFfSkKIAogICAgICAgaWYgKFdJTjMyKQogICAgICAgICAjIFdpbmRvd3MgdGVzdHMgc3VwcG9ydGVkIGZsYWdzLgpAQCAtMTEzNCwzMyArMTAxOSwzMyBAQAogICAgICAgICBhZGRfZGVwZW5kZW5jaWVzKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkVXNlICR7S1dTWVNfVEFSR0VUX0lOVEVSRkFDRX0pCiAgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke0tXU1lTX05BTUVTUEFDRX1UZXN0RHlubG9hZFVzZSBQUklWQVRFICR7S1dTWVNfTkFNRVNQQUNFfVRlc3REeW5sb2FkSW1wbCkKICAgICAgIGVuZGlmICgpCi0gICAgRU5ESUYoKQotICAgIENSRUFURV9URVNUX1NPVVJDRUxJU1QoCisgICAgZW5kaWYoKQorICAgIGNyZWF0ZV90ZXN0X3NvdXJjZWxpc3QoCiAgICAgICBLV1NZU19DWFhfVEVTVF9TUkNTICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4LmN4eAogICAgICAgJHtLV1NZU19DWFhfVEVTVFN9CiAgICAgICApCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggJHtLV1NZU19DWFhfVEVTVF9TUkNTfSkKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIENfQ0xBTkdfVElEWSAiIikKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIENYWF9DTEFOR19USURZICIiKQotICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ19JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIENYWF9JTkNMVURFX1dIQVRfWU9VX1VTRSAiIikKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19FWEV9KQotICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCAke0tXU1lTX1RBUkdFVF9MSU5LfSkKKyAgICBhZGRfZXhlY3V0YWJsZSgke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCAke0tXU1lTX0NYWF9URVNUX1NSQ1N9KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ19DTEFOR19USURZICIiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ1hYX0NMQU5HX1RJRFkgIiIpCisgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCBQUk9QRVJUWSBDX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgQ1hYX0lOQ0xVREVfV0hBVF9ZT1VfVVNFICIiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RzQ3h4ICR7S1dTWVNfVEFSR0VUX0xJTkt9KQogCi0gICAgU0VUKFRFU1RfU1lTVEVNVE9PTFNfU09VUkNFX0RJUiAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IikKLSAgICBTRVQoVEVTVF9TWVNURU1UT09MU19CSU5BUllfRElSICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iKQotICAgIENPTkZJR1VSRV9GSUxFKAorICAgIHNldChURVNUX1NZU1RFTVRPT0xTX1NPVVJDRV9ESVIgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSIpCisgICAgc2V0KFRFU1RfU1lTVEVNVE9PTFNfQklOQVJZX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IikKKyAgICBjb25maWd1cmVfZmlsZSgKICAgICAgICR7UFJPSkVDVF9TT1VSQ0VfRElSfS90ZXN0U3lzdGVtVG9vbHMuaC5pbgogICAgICAgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L3Rlc3RTeXN0ZW1Ub29scy5oKQotICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQorICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9KQogCi0gICAgSUYoQ1RFU1RfVEVTVF9LV1NZUykKLSAgICAgIENPTkZJR1VSRV9GSUxFKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vRXh0cmFUZXN0LmNtYWtlLmluIgorICAgIGlmKENURVNUX1RFU1RfS1dTWVMpCisgICAgICBjb25maWd1cmVfZmlsZSgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0V4dHJhVGVzdC5jbWFrZS5pbiIKICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9FeHRyYVRlc3QuY21ha2UiKQotICAgICAgU0VUX0RJUkVDVE9SWV9QUk9QRVJUSUVTKFBST1BFUlRJRVMgVEVTVF9JTkNMVURFX0ZJTEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9FeHRyYVRlc3QuY21ha2UiKQotICAgIEVORElGKCkKKyAgICAgIHNldF9kaXJlY3RvcnlfcHJvcGVydGllcyhQUk9QRVJUSUVTIFRFU1RfSU5DTFVERV9GSUxFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vRXh0cmFUZXN0LmNtYWtlIikKKyAgICBlbmRpZigpCiAKLSAgICBTRVQoS1dTWVNfVEVTVF9BUkdTX3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50cworICAgIHNldChLV1NZU19URVNUX0FSR1NfdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzCiAgICAgICAtLWFub3RoZXItYm9vbC12YXJpYWJsZQogICAgICAgLS1sb25nMz1vcHQKICAgICAgIC0tc2V0LWJvb2wtYXJnMQpAQCAtMTE3OSw3ICsxMDY0LDcgQEAKICAgICAgIC1DPXRlc3QKICAgICAgIC0tbG9uZzIgaGVsbG8KICAgICAgICkKLSAgICBTRVQoS1dTWVNfVEVTVF9BUkdTX3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50czEKKyAgICBzZXQoS1dTWVNfVEVTVF9BUkdTX3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50czEKICAgICAgIC0taWdub3JlZAogICAgICAgLW4gMjQKICAgICAgIC0tc2Vjb25kLWlnbm9yZWQKQEAgLTExODgsNzMgKzEwNzMsNzEgQEAKICAgICAgIC1wCiAgICAgICBzb21lIGp1bmsgYXQgdGhlIGVuZAogICAgICAgKQotICAgIEZPUkVBQ0godGVzdGZpbGUgJHtLV1NZU19DWFhfVEVTVFN9KQorICAgIGZvcmVhY2godGVzdGZpbGUgJHtLV1NZU19DWFhfVEVTVFN9KQogICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0ICIke3Rlc3RmaWxlfSIgTkFNRV9XRSkKLSAgICAgIEFERF9URVNUKGt3c3lzLiR7dGVzdH0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdHNDeHggJHt0ZXN0fSAke0tXU1lTX1RFU1RfQVJHU18ke3Rlc3R9fSkKLSAgICAgIFNFVF9QUk9QRVJUWShURVNUIGt3c3lzLiR7dGVzdH0gUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQotICAgIEVOREZPUkVBQ0goKQorICAgICAgYWRkX3Rlc3Qoa3dzeXMuJHt0ZXN0fSAke0VYRUNfRElSfS8ke0tXU1lTX05BTUVTUEFDRX1UZXN0c0N4eCAke3Rlc3R9ICR7S1dTWVNfVEVTVF9BUkdTXyR7dGVzdH19KQorICAgICAgc2V0X3Byb3BlcnR5KFRFU1Qga3dzeXMuJHt0ZXN0fSBQUk9QRVJUWSBMQUJFTFMgJHtLV1NZU19MQUJFTFNfVEVTVH0pCisgICAgZW5kZm9yZWFjaCgpCiAKICAgICAjIFByb2Nlc3MgdGVzdHMuCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFByb2Nlc3MgdGVzdFByb2Nlc3MuYykKLSAgICBTRVRfUFJPUEVSVFkoVEFSR0VUICR7S1dTWVNfTkFNRVNQQUNFfVRlc3RQcm9jZXNzIFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19FWEV9KQotICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0UHJvY2VzcyAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQotICAgIElGKE5PVCBDWUdXSU4pCi0gICAgICBTRVQoS1dTWVNfVEVTVF9QUk9DRVNTXzcgNykKLSAgICBFTkRJRigpCi0gICAgRk9SRUFDSChuIDEgMiAzIDQgNSA2ICR7S1dTWVNfVEVTVF9QUk9DRVNTXzd9IDkgMTApCi0gICAgICBBRERfVEVTVChrd3N5cy50ZXN0UHJvY2Vzcy0ke259ICR7RVhFQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfVRlc3RQcm9jZXNzICR7bn0pCi0gICAgICBTRVRfUFJPUEVSVFkoVEVTVCBrd3N5cy50ZXN0UHJvY2Vzcy0ke259IFBST1BFUlRZIExBQkVMUyAke0tXU1lTX0xBQkVMU19URVNUfSkKLSAgICAgIFNFVF9URVNUU19QUk9QRVJUSUVTKGt3c3lzLnRlc3RQcm9jZXNzLSR7bn0gUFJPUEVSVElFUyBUSU1FT1VUIDEyMCkKLSAgICBFTkRGT1JFQUNIKCkKKyAgICBhZGRfZXhlY3V0YWJsZSgke0tXU1lTX05BTUVTUEFDRX1UZXN0UHJvY2VzcyB0ZXN0UHJvY2Vzcy5jKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFByb2Nlc3MgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7S1dTWVNfTkFNRVNQQUNFfVRlc3RQcm9jZXNzICR7S1dTWVNfVEFSR0VUX0NfTElOS30pCisgICAgI3NldChLV1NZU19URVNUX1BST0NFU1NfNyA3KSAjIHVuY29tbWVudCB0byBydW4gdGltaW5nLXNlbnNpdGl2ZSB0ZXN0IGxvY2FsbHkKKyAgICBmb3JlYWNoKG4gMSAyIDMgNCA1IDYgJHtLV1NZU19URVNUX1BST0NFU1NfN30gOSAxMCkKKyAgICAgIGFkZF90ZXN0KGt3c3lzLnRlc3RQcm9jZXNzLSR7bn0gJHtFWEVDX0RJUn0vJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFByb2Nlc3MgJHtufSkKKyAgICAgIHNldF9wcm9wZXJ0eShURVNUIGt3c3lzLnRlc3RQcm9jZXNzLSR7bn0gUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQorICAgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoa3dzeXMudGVzdFByb2Nlc3MtJHtufSBQUk9QRVJUSUVTIFRJTUVPVVQgMTIwKQorICAgIGVuZGZvcmVhY2goKQogCi0gICAgU0VUKHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiIpCisgICAgc2V0KHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiIpCiAgICAgIyBTb21lIEFwcGxlIGNvbXBpbGVycyBwcm9kdWNlIGJhZCBvcHRpbWl6YXRpb25zIGluIHRoaXMgc291cmNlLgotICAgIElGKEFQUExFIEFORCBDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl4oR05VfExMVk0pJCIpCi0gICAgICBTRVQodGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHUyAiJHt0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTfSAtTzAiKQotICAgIEVMU0VJRihDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJYTCIpCisgICAgaWYoQVBQTEUgQU5EIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXihHTlV8TExWTSkkIikKKyAgICAgIHNldCh0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IC1PMCIpCisgICAgZWxzZWlmKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIlhMIikKICAgICAgICMgVGVsbCBJQk0gWEwgbm90IHRvIHdhcm4gYWJvdXQgb3VyIHRlc3QgaW5maW5pdGUgbG9vcAotICAgICAgSUYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkxpbnV4LipwcGM2NGxlIgorICAgICAgaWYoQ01BS0VfU1lTVEVNIE1BVENIRVMgIkxpbnV4LipwcGM2NGxlIgogICAgICAgICAgQU5EIENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjE2LjEuMCIKICAgICAgICAgIEFORCBOT1QgQ01BS0VfQ19DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiMTMuMS4xIikKICAgICAgICAgIyB2MTMuMS5bMS02XSBvbiBMaW51eCBwcGM2NGxlIGlzIGNsYW5nIGJhc2VkIGFuZCBkb2VzIG5vdCBhY2NlcHQKICAgICAgICAgIyB0aGUgLXFzdXBwcmVzcyBvcHRpb24sIHNvIGp1c3Qgc3VwcHJlc3MgYWxsIHdhcm5pbmdzLgotICAgICAgICBTRVQodGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHUyAiJHt0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTfSAtdyIpCi0gICAgICBFTFNFKCkKLSAgICAgICAgU0VUKHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiR7dGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHU30gLXFzdXBwcmVzcz0xNTAwLTAxMCIpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICAgIElGKENNQUtFX0NfRkxBR1MgTUFUQ0hFUyAiLWZzYW5pdGl6ZT0iKQotICAgICAgU0VUKHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiR7dGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHU30gLURDUkFTSF9VU0lOR19BQk9SVCIpCi0gICAgRU5ESUYoKQotICAgIFNFVF9QUk9QRVJUWShTT1VSQ0UgdGVzdFByb2Nlc3MuYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IikKKyAgICAgICAgc2V0KHRlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1MgIiR7dGVzdFByb2Nlc3NfQ09NUElMRV9GTEFHU30gLXciKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldCh0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IC1xc3VwcHJlc3M9MTUwMC0wMTAiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgICBpZihDTUFLRV9DX0ZMQUdTIE1BVENIRVMgIi1mc2FuaXRpemU9IikKKyAgICAgIHNldCh0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTICIke3Rlc3RQcm9jZXNzX0NPTVBJTEVfRkxBR1N9IC1EQ1JBU0hfVVNJTkdfQUJPUlQiKQorICAgIGVuZGlmKCkKKyAgICBzZXRfcHJvcGVydHkoU09VUkNFIHRlc3RQcm9jZXNzLmMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUyAiJHt0ZXN0UHJvY2Vzc19DT01QSUxFX0ZMQUdTfSIpCiAKICAgICAjIFRlc3QgU2hhcmVkRm9yd2FyZAotICAgIENPTkZJR1VSRV9GSUxFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS90ZXN0U2hhcmVkRm9yd2FyZC5jLmluCisgICAgY29uZmlndXJlX2ZpbGUoJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L3Rlc3RTaGFyZWRGb3J3YXJkLmMuaW4KICAgICAgICAgICAgICAgICAgICAke1BST0pFQ1RfQklOQVJZX0RJUn0vdGVzdFNoYXJlZEZvcndhcmQuYyBAT05MWSBJTU1FRElBVEUpCi0gICAgQUREX0VYRUNVVEFCTEUoJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFNoYXJlZEZvcndhcmQKKyAgICBhZGRfZXhlY3V0YWJsZSgke0tXU1lTX05BTUVTUEFDRX1UZXN0U2hhcmVkRm9yd2FyZAogICAgICAgICAgICAgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS90ZXN0U2hhcmVkRm9yd2FyZC5jKQotICAgIFNFVF9QUk9QRVJUWShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCi0gICAgQUREX0RFUEVOREVOQ0lFUygke0tXU1lTX05BTUVTUEFDRX1UZXN0U2hhcmVkRm9yd2FyZCAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQotICAgIEFERF9URVNUKGt3c3lzLnRlc3RTaGFyZWRGb3J3YXJkICR7RVhFQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfVRlc3RTaGFyZWRGb3J3YXJkIDEpCi0gICAgU0VUX1BST1BFUlRZKFRFU1Qga3dzeXMudGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtLV1NZU19OQU1FU1BBQ0V9VGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX0VYRX0pCisgICAgYWRkX2RlcGVuZGVuY2llcygke0tXU1lTX05BTUVTUEFDRX1UZXN0U2hhcmVkRm9yd2FyZCAke0tXU1lTX1RBUkdFVF9DX0xJTkt9KQorICAgIGFkZF90ZXN0KGt3c3lzLnRlc3RTaGFyZWRGb3J3YXJkICR7RVhFQ19ESVJ9LyR7S1dTWVNfTkFNRVNQQUNFfVRlc3RTaGFyZWRGb3J3YXJkIDEpCisgICAgc2V0X3Byb3BlcnR5KFRFU1Qga3dzeXMudGVzdFNoYXJlZEZvcndhcmQgUFJPUEVSVFkgTEFCRUxTICR7S1dTWVNfTEFCRUxTX1RFU1R9KQogCiAgICAgIyBDb25maWd1cmUgc29tZSB0ZXN0IHByb3BlcnRpZXMuCi0gICAgSUYoS1dTWVNfU1RBTkRBTE9ORSkKKyAgICBpZihLV1NZU19TVEFOREFMT05FKQogICAgICAgIyBXZSBleHBlY3QgdGVzdCB0byBmYWlsCi0gICAgICBTRVRfVEVTVFNfUFJPUEVSVElFUyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIFdJTExfRkFJTCBPTikKLSAgICAgIEdFVF9URVNUX1BST1BFUlRZKGt3c3lzLnRlc3RGYWlsIFdJTExfRkFJTCB3ZnYpCi0gICAgICBTRVRfVEVTVFNfUFJPUEVSVElFUyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIE1FQVNVUkVNRU5UICJTb21lIEtleT1Tb21lIFZhbHVlIikKLSAgICAgIE1FU1NBR0UoU1RBVFVTICJHRVRfVEVTVF9QUk9QRVJUWSByZXR1cm5lZDogJHt3ZnZ9IikKLSAgICBFTkRJRigpCisgICAgICBzZXRfdGVzdHNfcHJvcGVydGllcyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIFdJTExfRkFJTCBPTikKKyAgICAgIGdldF90ZXN0X3Byb3BlcnR5KGt3c3lzLnRlc3RGYWlsIFdJTExfRkFJTCB3ZnYpCisgICAgICBzZXRfdGVzdHNfcHJvcGVydGllcyhrd3N5cy50ZXN0RmFpbCBQUk9QRVJUSUVTIE1FQVNVUkVNRU5UICJTb21lIEtleT1Tb21lIFZhbHVlIikKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJHRVRfVEVTVF9QUk9QRVJUWSByZXR1cm5lZDogJHt3ZnZ9IikKKyAgICBlbmRpZigpCiAKICAgICAjIFNldCB1cCBjdGVzdCBjdXN0b20gY29uZmlndXJhdGlvbiBmaWxlLgotICAgIENPTkZJR1VSRV9GSUxFKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9DVGVzdEN1c3RvbS5jbWFrZS5pbgorICAgIGNvbmZpZ3VyZV9maWxlKCR7UFJPSkVDVF9TT1VSQ0VfRElSfS9DVGVzdEN1c3RvbS5jbWFrZS5pbgogICAgICAgICAgICAgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9DVGVzdEN1c3RvbS5jbWFrZSBAT05MWSkKIAogICAgICMgU3VwcHJlc3Mga25vd24gY29uc2lzdGVudCBmYWlsdXJlcyBvbiBidWdneSBzeXN0ZW1zLgotICAgIElGKEtXU1lTX1RFU1RfQk9HVVNfRkFJTFVSRVMpCi0gICAgICBTRVRfVEVTVFNfUFJPUEVSVElFUygke0tXU1lTX1RFU1RfQk9HVVNfRkFJTFVSRVN9IFBST1BFUlRJRVMgV0lMTF9GQUlMIE9OKQotICAgIEVORElGKCkKKyAgICBpZihLV1NZU19URVNUX0JPR1VTX0ZBSUxVUkVTKQorICAgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoJHtLV1NZU19URVNUX0JPR1VTX0ZBSUxVUkVTfSBQUk9QRVJUSUVTIFdJTExfRkFJTCBPTikKKyAgICBlbmRpZigpCiAKLSAgRU5ESUYoKQotRU5ESUYoKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvQ1Rlc3RDb25maWcuY21ha2UgYi9Tb3VyY2Uva3dzeXMvQ1Rlc3RDb25maWcuY21ha2UKaW5kZXggMzNlYTg0Yy4uMTIzNDdiNiAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL0NUZXN0Q29uZmlnLmNtYWtlCisrKyBiL1NvdXJjZS9rd3N5cy9DVGVzdENvbmZpZy5jbWFrZQpAQCAtMyw3ICszLDkgQEAKIAogc2V0KENURVNUX1BST0pFQ1RfTkFNRSAiS1dTeXMiKQogc2V0KENURVNUX05JR0hUTFlfU1RBUlRfVElNRSAiMjE6MDA6MDAgRURUIikKLXNldChDVEVTVF9EUk9QX01FVEhPRCAiaHR0cCIpCitpZiAoTk9UIENURVNUX0RST1BfTUVUSE9EIFNUUkVRVUFMICJodHRwcyIpCisgIHNldChDVEVTVF9EUk9QX01FVEhPRCAiaHR0cCIpCitlbmRpZiAoKQogc2V0KENURVNUX0RST1BfU0lURSAib3Blbi5jZGFzaC5vcmciKQogc2V0KENURVNUX0RST1BfTE9DQVRJT04gIi9zdWJtaXQucGhwP3Byb2plY3Q9UHVibGljRGFzaGJvYXJkIikKIHNldChDVEVTVF9EUk9QX1NJVEVfQ0RBU0ggVFJVRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9DVGVzdEN1c3RvbS5jbWFrZS5pbiBiL1NvdXJjZS9rd3N5cy9DVGVzdEN1c3RvbS5jbWFrZS5pbgppbmRleCA3NjAyMjFiLi5jMDdmMGYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvQ1Rlc3RDdXN0b20uY21ha2UuaW4KKysrIGIvU291cmNlL2t3c3lzL0NUZXN0Q3VzdG9tLmNtYWtlLmluCkBAIC0xMiwzICsxMiw3IEBACiBsaXN0KEFQUEVORCBDVEVTVF9DVVNUT01fTUVNQ0hFQ0tfSUdOT1JFCiAgIGt3c3lzLnRlc3RQcm9jZXNzLTEwCiAgICkKKworbGlzdChBUFBFTkQgQ1RFU1RfQ1VTVE9NX1dBUk5JTkdfRVhDRVBUSU9OCisgICJMSUNFTlNFIFdBUk5JTkciCisgICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9Db21tYW5kTGluZUFyZ3VtZW50cy5jeHggYi9Tb3VyY2Uva3dzeXMvQ29tbWFuZExpbmVBcmd1bWVudHMuY3h4CmluZGV4IDNmZDE5NTUuLmU0NWRiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9Db21tYW5kTGluZUFyZ3VtZW50cy5jeHgKKysrIGIvU291cmNlL2t3c3lzL0NvbW1hbmRMaW5lQXJndW1lbnRzLmN4eApAQCAtMjAsOSArMjAsOSBAQAogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5nPgogCiAjaWZkZWYgX01TQ19WRVIKICMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0Nzg2KQpAQCAtNjYsMjYgKzY2LDIxIEBACiBjbGFzcyBDb21tYW5kTGluZUFyZ3VtZW50c0ludGVybmFsCiB7CiBwdWJsaWM6Ci0gIENvbW1hbmRMaW5lQXJndW1lbnRzSW50ZXJuYWwoKQotICAgIDogVW5rbm93bkFyZ3VtZW50Q2FsbGJhY2t7IG51bGxwdHIgfQotICAgICwgQ2xpZW50RGF0YXsgbnVsbHB0ciB9Ci0gICAgLCBMYXN0QXJndW1lbnR7IDAgfQotICB7Ci0gIH0KKyAgQ29tbWFuZExpbmVBcmd1bWVudHNJbnRlcm5hbCgpID0gZGVmYXVsdDsKIAotICB0eXBlZGVmIENvbW1hbmRMaW5lQXJndW1lbnRzVmVjdG9yT2ZTdHJpbmdzIFZlY3Rvck9mU3RyaW5nczsKLSAgdHlwZWRlZiBDb21tYW5kTGluZUFyZ3VtZW50c01hcE9mU3RydWNzIENhbGxiYWNrc01hcDsKLSAgdHlwZWRlZiBrd3N5czo6U3RyaW5nIFN0cmluZzsKLSAgdHlwZWRlZiBDb21tYW5kTGluZUFyZ3VtZW50c1NldE9mU3RyaW5ncyBTZXRPZlN0cmluZ3M7CisgIHVzaW5nIFZlY3Rvck9mU3RyaW5ncyA9IENvbW1hbmRMaW5lQXJndW1lbnRzVmVjdG9yT2ZTdHJpbmdzOworICB1c2luZyBDYWxsYmFja3NNYXAgPSBDb21tYW5kTGluZUFyZ3VtZW50c01hcE9mU3RydWNzOworICB1c2luZyBTdHJpbmcgPSBrd3N5czo6U3RyaW5nOworICB1c2luZyBTZXRPZlN0cmluZ3MgPSBDb21tYW5kTGluZUFyZ3VtZW50c1NldE9mU3RyaW5nczsKIAogICBWZWN0b3JPZlN0cmluZ3MgQXJndjsKICAgU3RyaW5nIEFyZ3YwOwogICBDYWxsYmFja3NNYXAgQ2FsbGJhY2tzOwogCi0gIENvbW1hbmRMaW5lQXJndW1lbnRzOjpFcnJvckNhbGxiYWNrVHlwZSBVbmtub3duQXJndW1lbnRDYWxsYmFjazsKLSAgdm9pZCogQ2xpZW50RGF0YTsKKyAgQ29tbWFuZExpbmVBcmd1bWVudHM6OkVycm9yQ2FsbGJhY2tUeXBlIFVua25vd25Bcmd1bWVudENhbGxiYWNreyBudWxscHRyIH07CisgIHZvaWQqIENsaWVudERhdGF7IG51bGxwdHIgfTsKIAotICBWZWN0b3JPZlN0cmluZ3M6OnNpemVfdHlwZSBMYXN0QXJndW1lbnQ7CisgIFZlY3Rvck9mU3RyaW5nczo6c2l6ZV90eXBlIExhc3RBcmd1bWVudHsgMCB9OwogCiAgIFZlY3Rvck9mU3RyaW5ncyBVbnVzZWRBcmd1bWVudHM7CiB9OwpAQCAtNDI0LDggKzQxOSw3IEBACiAKIGNvbnN0IGNoYXIqIENvbW1hbmRMaW5lQXJndW1lbnRzOjpHZXRIZWxwKGNvbnN0IGNoYXIqIGFyZykKIHsKLSAgQ29tbWFuZExpbmVBcmd1bWVudHM6OkludGVybmFsOjpDYWxsYmFja3NNYXA6Oml0ZXJhdG9yIGl0ID0KLSAgICB0aGlzLT5JbnRlcm5hbHMtPkNhbGxiYWNrcy5maW5kKGFyZyk7CisgIGF1dG8gaXQgPSB0aGlzLT5JbnRlcm5hbHMtPkNhbGxiYWNrcy5maW5kKGFyZyk7CiAgIGlmIChpdCA9PSB0aGlzLT5JbnRlcm5hbHMtPkNhbGxiYWNrcy5lbmQoKSkgewogICAgIHJldHVybiBudWxscHRyOwogICB9CkBAIC00MzQsOCArNDI4LDcgQEAKICAgLy8gb25lIHBvaW50IHRvIGlmIHRoaXMgb25lIGlzIHBvaW50aW5nIHRvIGFub3RoZXIgYXJndW1lbnQuCiAgIENvbW1hbmRMaW5lQXJndW1lbnRzQ2FsbGJhY2tTdHJ1Y3R1cmUqIGNzID0gJihpdC0+c2Vjb25kKTsKICAgZm9yICg7OykgewotICAgIENvbW1hbmRMaW5lQXJndW1lbnRzOjpJbnRlcm5hbDo6Q2FsbGJhY2tzTWFwOjppdGVyYXRvciBoaXQgPQotICAgICAgdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuZmluZChjcy0+SGVscCk7CisgICAgYXV0byBoaXQgPSB0aGlzLT5JbnRlcm5hbHMtPkNhbGxiYWNrcy5maW5kKGNzLT5IZWxwKTsKICAgICBpZiAoaGl0ID09IHRoaXMtPkludGVybmFscy0+Q2FsbGJhY2tzLmVuZCgpKSB7CiAgICAgICBicmVhazsKICAgICB9CkBAIC00NzAsOSArNDYzLDggQEAKICAgLy8gQ29sbGFwc2UgYWxsIGFyZ3VtZW50cyBpbnRvIHRoZSBtYXAgb2YgdmVjdG9ycyBvZiBhbGwgYXJndW1lbnRzIHRoYXQgZG8KICAgLy8gdGhlIHNhbWUgdGhpbmcuCiAgIENvbW1hbmRMaW5lQXJndW1lbnRzOjpJbnRlcm5hbDo6Q2FsbGJhY2tzTWFwOjppdGVyYXRvciBpdDsKLSAgdHlwZWRlZiBzdGQ6Om1hcDxDb21tYW5kTGluZUFyZ3VtZW50czo6SW50ZXJuYWw6OlN0cmluZywKLSAgICAgICAgICAgICAgICAgICBDb21tYW5kTGluZUFyZ3VtZW50czo6SW50ZXJuYWw6OlNldE9mU3RyaW5ncz4KLSAgICBNYXBBcmdzOworICB1c2luZyBNYXBBcmdzID0gc3RkOjptYXA8Q29tbWFuZExpbmVBcmd1bWVudHM6OkludGVybmFsOjpTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kTGluZUFyZ3VtZW50czo6SW50ZXJuYWw6OlNldE9mU3RyaW5ncz47CiAgIE1hcEFyZ3MgbXA7CiAgIE1hcEFyZ3M6Oml0ZXJhdG9yIG1waXQsIHNtcGl0OwogICBmb3IgKGl0ID0gdGhpcy0+SW50ZXJuYWxzLT5DYWxsYmFja3MuYmVnaW4oKTsKQEAgLTcwOSw3ICs3MDEsNyBAQAogICBpZiAoY3MtPkNhbGxiYWNrKSB7CiAgICAgaWYgKCFjcy0+Q2FsbGJhY2soY3MtPkFyZ3VtZW50LCB2YWx1ZSwgY3MtPkNhbGxEYXRhKSkgewogICAgICAgdGhpcy0+SW50ZXJuYWxzLT5MYXN0QXJndW1lbnQtLTsKLSAgICAgIHJldHVybiAwOworICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgfQogICBDb21tYW5kTGluZUFyZ3VtZW50c19ERUJVRygiU2V0IGFyZ3VtZW50OiAiIDw8IGNzLT5Bcmd1bWVudCA8PCAiIHRvICIKQEAgLTc1OSwxMCArNzUxLDEwIEBACiAgICAgICAgIHN0ZDo6Y2VyciA8PCAiR290IHVua25vd24gdmFyaWFibGUgdHlwZTogXCIiIDw8IGNzLT5WYXJpYWJsZVR5cGUKICAgICAgICAgICAgICAgICAgIDw8ICJcIiIgPDwgc3RkOjplbmRsOwogICAgICAgICB0aGlzLT5JbnRlcm5hbHMtPkxhc3RBcmd1bWVudC0tOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgfQotICByZXR1cm4gMTsKKyAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEtXU1lTX05BTUVTUEFDRQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0NvbmZpZ3VyZS5oLmluIGIvU291cmNlL2t3c3lzL0NvbmZpZ3VyZS5oLmluCmluZGV4IDUzMjNjNTcuLjhhMjM3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9Db25maWd1cmUuaC5pbgorKysgYi9Tb3VyY2Uva3dzeXMvQ29uZmlndXJlLmguaW4KQEAgLTEzLDkgKzEzLDYgQEAKIAogLyogRGlzYWJsZSBzb21lIHdhcm5pbmdzIGluc2lkZSBrd3N5cyBzb3VyY2UgZmlsZXMuICAqLwogI2lmIGRlZmluZWQoS1dTWVNfTkFNRVNQQUNFKQotIyAgaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0jICAgIHByYWdtYSB3YXJuIC0gODAyNyAvKiBmdW5jdGlvbiBub3QgaW5saW5lZC4gICovCi0jICBlbmRpZgogIyAgaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQogIyAgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogMTU3MikgLyogZmxvYXRpbmctcG9pbnQgZXF1YWxpdHkgdGVzdCAqLwogIyAgZW5kaWYKQEAgLTY4LDExICs2NSw2IEBACiAjICAgIHByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0NzEwKSAvKiBmdW5jdGlvbiBub3QgaW5saW5lZCAqLwogIyAgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDc4NikgLyogaWRlbnRpZmllciB0cnVuY2F0ZWQgaW4gZGVidWcgaW5mbyAqLwogIyAgZW5kaWYKLSMgIGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKLS8qIENvZGUgaGFzIG5vIGVmZmVjdDsgcmFpc2VkIGJ5IHdpbm50LmggaW4gQyAobm90IEMrKykgd2hlbiBpZ25vcmluZyBhbgotICAgdW51c2VkIHBhcmFtZXRlciB1c2luZyAiKHBhcmFtKSIgc3ludGF4IChpLmUuIG5vIGNhc3QgdG8gdm9pZCkuICAqLwotIyAgICBwcmFnbWEgd2FybiAtIDgwMTkKLSMgIGVuZGlmCiAjZW5kaWYKIAogLyogTVNWQyA2LjAgaW4gcmVsZWFzZSBtb2RlIHdpbGwgd2FybiBhYm91dCBjb2RlIGl0IHByb2R1Y2VzIHdpdGggaXRzCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRGlyZWN0b3J5LmN4eCBiL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuY3h4CmluZGV4IGUzNzkxODIuLjBjMjE5MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuY3h4CkBAIC0zNSw2ICszNSwxOCBAQAogICB0aGlzLT5JbnRlcm5hbCA9IG5ldyBEaXJlY3RvcnlJbnRlcm5hbHM7CiB9CiAKK0RpcmVjdG9yeTo6RGlyZWN0b3J5KERpcmVjdG9yeSYmIG90aGVyKQoreworICB0aGlzLT5JbnRlcm5hbCA9IG90aGVyLkludGVybmFsOworICBvdGhlci5JbnRlcm5hbCA9IG51bGxwdHI7Cit9CisKK0RpcmVjdG9yeSYgRGlyZWN0b3J5OjpvcGVyYXRvcj0oRGlyZWN0b3J5JiYgb3RoZXIpCit7CisgIHN0ZDo6c3dhcCh0aGlzLT5JbnRlcm5hbCwgb3RoZXIuSW50ZXJuYWwpOworICByZXR1cm4gKnRoaXM7Cit9CisKIERpcmVjdG9yeTo6fkRpcmVjdG9yeSgpCiB7CiAgIGRlbGV0ZSB0aGlzLT5JbnRlcm5hbDsKQEAgLTgwLDI2ICs5MiwxMiBAQAogIyAgaW5jbHVkZSA8c3lzL3N0YXQuaD4KICMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgogCi0vLyBXaWRlIGZ1bmN0aW9uIG5hbWVzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiBjb21waWxlcjoKLSMgIGlmZGVmIF9fQk9STEFORENfXwotIyAgICBkZWZpbmUgX3dmaW5kZmlyc3RfZnVuYyBfX3dmaW5kZmlyc3QKLSMgICAgZGVmaW5lIF93ZmluZG5leHRfZnVuYyBfX3dmaW5kbmV4dAotIyAgZWxzZQotIyAgICBkZWZpbmUgX3dmaW5kZmlyc3RfZnVuYyBfd2ZpbmRmaXJzdAotIyAgICBkZWZpbmUgX3dmaW5kbmV4dF9mdW5jIF93ZmluZG5leHQKLSMgIGVuZGlmCi0KIG5hbWVzcGFjZSBLV1NZU19OQU1FU1BBQ0UgewogCi1ib29sIERpcmVjdG9yeTo6TG9hZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKK2Jvb2wgRGlyZWN0b3J5OjpMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBzdGQ6OnN0cmluZyogZXJyb3JNZXNzYWdlKQogewogICB0aGlzLT5DbGVhcigpOwotIyAgaWYgKGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTMwMCkgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0gIC8vIE9sZGVyIFZpc3VhbCBDKysgYW5kIEVtYmFyY2FkZXJvIGNvbXBpbGVycy4KLSAgbG9uZyBzcmNoSGFuZGxlOwotIyAgZWxzZSAvLyBOZXdlciBWaXN1YWwgQysrCiAgIGludHB0cl90IHNyY2hIYW5kbGU7Ci0jICBlbmRpZgogICBjaGFyKiBidWY7CiAgIHNpemVfdCBuID0gbmFtZS5zaXplKCk7CiAgIGlmIChuYW1lLmJhY2soKSA9PSAnLycgfHwgbmFtZS5iYWNrKCkgPT0gJ1xcJykgewpAQCAtMTE4LDggKzExNiw4IEBACiAgIHN0cnVjdCBfd2ZpbmRkYXRhX3QgZGF0YTsgLy8gZGF0YSBvZiBjdXJyZW50IGZpbGUKIAogICAvLyBOb3cgcHV0IHRoZW0gaW50byB0aGUgZmlsZSBhcnJheQotICBzcmNoSGFuZGxlID0gX3dmaW5kZmlyc3RfZnVuYygKLSAgICAod2NoYXJfdCopRW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChidWYpLmNfc3RyKCksICZkYXRhKTsKKyAgc3JjaEhhbmRsZSA9CisgICAgX3dmaW5kZmlyc3QoKHdjaGFyX3QqKUVuY29kaW5nOjpUb1dpbmRvd3NFeHRlbmRlZFBhdGgoYnVmKS5jX3N0cigpLCAmZGF0YSk7CiAgIGRlbGV0ZVtdIGJ1ZjsKIAogICBpZiAoc3JjaEhhbmRsZSA9PSAtMSkgewpAQCAtMTI5LDE5ICsxMjcsMTUgQEAKICAgLy8gTG9vcCB0aHJvdWdoIG5hbWVzCiAgIGRvIHsKICAgICB0aGlzLT5JbnRlcm5hbC0+RmlsZXMucHVzaF9iYWNrKEVuY29kaW5nOjpUb05hcnJvdyhkYXRhLm5hbWUpKTsKLSAgfSB3aGlsZSAoX3dmaW5kbmV4dF9mdW5jKHNyY2hIYW5kbGUsICZkYXRhKSAhPSAtMSk7CisgIH0gd2hpbGUgKF93ZmluZG5leHQoc3JjaEhhbmRsZSwgJmRhdGEpICE9IC0xKTsKICAgdGhpcy0+SW50ZXJuYWwtPlBhdGggPSBuYW1lOwogICByZXR1cm4gX2ZpbmRjbG9zZShzcmNoSGFuZGxlKSAhPSAtMTsKIH0KIAotdW5zaWduZWQgbG9uZyBEaXJlY3Rvcnk6OkdldE51bWJlck9mRmlsZXNJbkRpcmVjdG9yeShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKK3Vuc2lnbmVkIGxvbmcgRGlyZWN0b3J5OjpHZXROdW1iZXJPZkZpbGVzSW5EaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7Ci0jICBpZiAoZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxMzAwKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKLSAgLy8gT2xkZXIgVmlzdWFsIEMrKyBhbmQgRW1iYXJjYWRlcm8gY29tcGlsZXJzLgotICBsb25nIHNyY2hIYW5kbGU7Ci0jICBlbHNlIC8vIE5ld2VyIFZpc3VhbCBDKysKICAgaW50cHRyX3Qgc3JjaEhhbmRsZTsKLSMgIGVuZGlmCiAgIGNoYXIqIGJ1ZjsKICAgc2l6ZV90IG4gPSBuYW1lLnNpemUoKTsKICAgaWYgKG5hbWUuYmFjaygpID09ICcvJykgewpAQCAtMTU0LDggKzE0OCw3IEBACiAgIHN0cnVjdCBfd2ZpbmRkYXRhX3QgZGF0YTsgLy8gZGF0YSBvZiBjdXJyZW50IGZpbGUKIAogICAvLyBOb3cgcHV0IHRoZW0gaW50byB0aGUgZmlsZSBhcnJheQotICBzcmNoSGFuZGxlID0KLSAgICBfd2ZpbmRmaXJzdF9mdW5jKCh3Y2hhcl90KilFbmNvZGluZzo6VG9XaWRlKGJ1ZikuY19zdHIoKSwgJmRhdGEpOworICBzcmNoSGFuZGxlID0gX3dmaW5kZmlyc3QoKHdjaGFyX3QqKUVuY29kaW5nOjpUb1dpZGUoYnVmKS5jX3N0cigpLCAmZGF0YSk7CiAgIGRlbGV0ZVtdIGJ1ZjsKIAogICBpZiAoc3JjaEhhbmRsZSA9PSAtMSkgewpAQCAtMTY2LDcgKzE1OSw3IEBACiAgIHVuc2lnbmVkIGxvbmcgY291bnQgPSAwOwogICBkbyB7CiAgICAgY291bnQrKzsKLSAgfSB3aGlsZSAoX3dmaW5kbmV4dF9mdW5jKHNyY2hIYW5kbGUsICZkYXRhKSAhPSAtMSk7CisgIH0gd2hpbGUgKF93ZmluZG5leHQoc3JjaEhhbmRsZSwgJmRhdGEpICE9IC0xKTsKICAgX2ZpbmRjbG9zZShzcmNoSGFuZGxlKTsKICAgcmV0dXJuIGNvdW50OwogfQpAQCAtMTgwLDYgKzE3Myw4IEBACiAjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAogIyAgaW5jbHVkZSA8ZGlyZW50Lmg+CisjICBpbmNsdWRlIDxlcnJuby5oPgorIyAgaW5jbHVkZSA8c3RyaW5nLmg+CiAKIC8vIFBHSSB3aXRoIGdsaWJjIGhhcyB0cm91YmxlIHdpdGggZGlyZW50IGFuZCBsYXJnZSBmaWxlIHN1cHBvcnQ6CiAvLyAgaHR0cDovL3d3dy5wZ3JvdXAuY29tL3VzZXJmb3J1bS92aWV3dG9waWMucGhwPwpAQCAtMTk3LDI5ICsxOTIsNDYgQEAKIAogbmFtZXNwYWNlIEtXU1lTX05BTUVTUEFDRSB7CiAKLWJvb2wgRGlyZWN0b3J5OjpMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQorYm9vbCBEaXJlY3Rvcnk6OkxvYWQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHN0ZDo6c3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7CiAgIHRoaXMtPkNsZWFyKCk7CiAKKyAgZXJybm8gPSAwOwogICBESVIqIGRpciA9IG9wZW5kaXIobmFtZS5jX3N0cigpKTsKIAogICBpZiAoIWRpcikgewotICAgIHJldHVybiAwOworICAgIGlmIChlcnJvck1lc3NhZ2UgIT0gbnVsbHB0cikgeworICAgICAgKmVycm9yTWVzc2FnZSA9IHN0ZDo6c3RyaW5nKHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKICAgfQogCisgIGVycm5vID0gMDsKICAgZm9yIChrd3N5c19kaXJlbnQqIGQgPSByZWFkZGlyKGRpcik7IGQ7IGQgPSByZWFkZGlyKGRpcikpIHsKLSAgICB0aGlzLT5JbnRlcm5hbC0+RmlsZXMucHVzaF9iYWNrKGQtPmRfbmFtZSk7CisgICAgdGhpcy0+SW50ZXJuYWwtPkZpbGVzLmVtcGxhY2VfYmFjayhkLT5kX25hbWUpOwogICB9CisgIGlmIChlcnJubyAhPSAwKSB7CisgICAgaWYgKGVycm9yTWVzc2FnZSAhPSBudWxscHRyKSB7CisgICAgICAqZXJyb3JNZXNzYWdlID0gc3RkOjpzdHJpbmcoc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgdGhpcy0+SW50ZXJuYWwtPlBhdGggPSBuYW1lOwogICBjbG9zZWRpcihkaXIpOwotICByZXR1cm4gMTsKKyAgcmV0dXJuIHRydWU7CiB9CiAKLXVuc2lnbmVkIGxvbmcgRGlyZWN0b3J5OjpHZXROdW1iZXJPZkZpbGVzSW5EaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCit1bnNpZ25lZCBsb25nIERpcmVjdG9yeTo6R2V0TnVtYmVyT2ZGaWxlc0luRGlyZWN0b3J5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3JNZXNzYWdlKQogeworICBlcnJubyA9IDA7CiAgIERJUiogZGlyID0gb3BlbmRpcihuYW1lLmNfc3RyKCkpOwogCiAgIGlmICghZGlyKSB7CisgICAgaWYgKGVycm9yTWVzc2FnZSAhPSBudWxscHRyKSB7CisgICAgICAqZXJyb3JNZXNzYWdlID0gc3RkOjpzdHJpbmcoc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiAgIH0KIApAQCAtMjI3LDYgKzIzOSwxMyBAQAogICBmb3IgKGt3c3lzX2RpcmVudCogZCA9IHJlYWRkaXIoZGlyKTsgZDsgZCA9IHJlYWRkaXIoZGlyKSkgewogICAgIGNvdW50Kys7CiAgIH0KKyAgaWYgKGVycm5vICE9IDApIHsKKyAgICBpZiAoZXJyb3JNZXNzYWdlICE9IG51bGxwdHIpIHsKKyAgICAgICplcnJvck1lc3NhZ2UgPSBzdGQ6OnN0cmluZyhzdHJlcnJvcihlcnJubykpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKwogICBjbG9zZWRpcihkaXIpOwogICByZXR1cm4gY291bnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRGlyZWN0b3J5Lmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuaHh4LmluCmluZGV4IGFkOGM1MWIuLjdiYzlkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuaHh4LmluCisrKyBiL1NvdXJjZS9rd3N5cy9EaXJlY3RvcnkuaHh4LmluCkBAIC0yMyw2ICsyMywxMSBAQAogewogcHVibGljOgogICBEaXJlY3RvcnkoKTsKKyAgRGlyZWN0b3J5KERpcmVjdG9yeSYmIG90aGVyKTsKKyAgRGlyZWN0b3J5KGNvbnN0IERpcmVjdG9yeSYpID0gZGVsZXRlOworICBEaXJlY3RvcnkmIG9wZXJhdG9yPShjb25zdCBEaXJlY3RvcnkmKSA9IGRlbGV0ZTsKKyAgRGlyZWN0b3J5JiBvcGVyYXRvcj0oRGlyZWN0b3J5JiYgb3RoZXIpOworICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGlyZWN0b3J5JikgPSBkZWxldGU7CiAgIH5EaXJlY3RvcnkoKTsKIAogICAvKioKQEAgLTMwLDcgKzM1LDcgQEAKICAgICogaW4gdGhhdCBkaXJlY3RvcnkuIDAgaXMgcmV0dXJuZWQgaWYgdGhlIGRpcmVjdG9yeSBjYW4gbm90IGJlCiAgICAqIG9wZW5lZCwgMSBpZiBpdCBpcyBvcGVuZWQuCiAgICAqLwotICBib29sIExvYWQoY29uc3Qgc3RkOjpzdHJpbmcmKTsKKyAgYm9vbCBMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiwgc3RkOjpzdHJpbmcqIGVycm9yTWVzc2FnZSA9IG51bGxwdHIpOwogCiAgIC8qKgogICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCkBAIC00MSw3ICs0Niw4IEBACiAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LgogICAgKiBBIGhpZ2hlciBwZXJmb3JtYW5jZSBzdGF0aWMgbWV0aG9kLgogICAgKi8KLSAgc3RhdGljIHVuc2lnbmVkIGxvbmcgR2V0TnVtYmVyT2ZGaWxlc0luRGlyZWN0b3J5KGNvbnN0IHN0ZDo6c3RyaW5nJik7CisgIHN0YXRpYyB1bnNpZ25lZCBsb25nIEdldE51bWJlck9mRmlsZXNJbkRpcmVjdG9yeSgKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYsIHN0ZDo6c3RyaW5nKiBlcnJvck1lc3NhZ2UgPSBudWxscHRyKTsKIAogICAvKioKICAgICogUmV0dXJuIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBpbmRleCwgdGhlIGluZGV4aW5nIGlzIDAgYmFzZWQKQEAgLTYyLDEwICs2OCw3IEBACiBwcml2YXRlOgogICAvLyBQcml2YXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCiAgIERpcmVjdG9yeUludGVybmFscyogSW50ZXJuYWw7Ci0KLSAgRGlyZWN0b3J5KGNvbnN0IERpcmVjdG9yeSYpOyAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgRGlyZWN0b3J5Jik7IC8vIE5vdCBpbXBsZW1lbnRlZC4KLX07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZCBDbGFzczogRGlyZWN0b3J5Cit9OyAvLyBFbmQgQ2xhc3M6IERpcmVjdG9yeQogCiB9IC8vIG5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRHluYW1pY0xvYWRlci5jeHggYi9Tb3VyY2Uva3dzeXMvRHluYW1pY0xvYWRlci5jeHgKaW5kZXggYTRiODY0MS4uNjZlZTllYSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL0R5bmFtaWNMb2FkZXIuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy9EeW5hbWljTG9hZGVyLmN4eApAQCAtMjQ2LDE3ICsyNDYsNiBAQAogICAvLyBzaG91bGQgaGF2ZSBhIHRvb2wgdG8gaGVscCBnZXQgdGhlIHN5bWJvbCB3aXRoIHRoZSBkZXNpcmVkCiAgIC8vIGNhbGxpbmcgY29udmVudGlvbi4gIEN1cnJlbnRseSB3ZSBhc3N1bWUgY2RlY2wuCiAgIC8vCi0gIC8vIEJvcmxhbmQ6Ci0gIC8vICAgX19jZGVjbCAgICA9ICJfZnVuYyIgKGRlZmF1bHQpCi0gIC8vICAgX19mYXN0Y2FsbCA9ICJAX2Z1bmMiCi0gIC8vICAgX19zdGRjYWxsICA9ICJmdW5jIgotICAvLwotICAvLyBXYXRjb206Ci0gIC8vICAgX19jZGVjbCAgICA9ICJfZnVuYyIKLSAgLy8gICBfX2Zhc3RjYWxsID0gIkBfZnVuY0BYIgotICAvLyAgIF9fc3RkY2FsbCAgPSAiX2Z1bmNAWCIKLSAgLy8gICBfX3dhdGNhbGwgID0gImZ1bmNfIiAoZGVmYXVsdCkKLSAgLy8KICAgLy8gTVNWQzoKICAgLy8gICBfX2NkZWNsICAgID0gImZ1bmMiIChkZWZhdWx0KQogICAvLyAgIF9fZmFzdGNhbGwgPSAiQF9mdW5jQFgiCkBAIC0yNjUsMjAgKzI1NCw5IEBACiAgIC8vIE5vdGUgdGhhdCB0aGUgIkBYIiBwYXJ0IG9mIHRoZSBuYW1lIGFib3ZlIGlzIHRoZSB0b3RhbCBzaXplIChpbgogICAvLyBieXRlcykgb2YgdGhlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCiAgIHZvaWQqIHJlc3VsdDsKLSMgIGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKQotICAvLyBOZWVkIHRvIHByZXBlbmQgc3ltYm9scyB3aXRoICdfJwotICBzdGQ6OnN0cmluZyBzc3ltID0gJ18nICsgc3ltOwotICBjb25zdCBjaGFyKiByc3ltID0gc3N5bS5jX3N0cigpOwotIyAgZWxzZQogICBjb25zdCBjaGFyKiByc3ltID0gc3ltLmNfc3RyKCk7Ci0jICBlbmRpZgogICByZXN1bHQgPSAodm9pZCopR2V0UHJvY0FkZHJlc3MobGliLCByc3ltKTsKLS8vIEhhY2sgdG8gY2FzdCBwb2ludGVyLXRvLWRhdGEgdG8gcG9pbnRlci10by1mdW5jdGlvbi4KLSMgIGlmZGVmIF9fV0FUQ09NQ19fCi0gIHJldHVybiAqKER5bmFtaWNMb2FkZXI6OlN5bWJvbFBvaW50ZXIqKSgmcmVzdWx0KTsKLSMgIGVsc2UKICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PER5bmFtaWNMb2FkZXI6OlN5bWJvbFBvaW50ZXIqPigmcmVzdWx0KTsKLSMgIGVuZGlmCiB9CiAKICMgIGRlZmluZSBEWU5MT0FEX0VSUk9SX0JVRkZFUl9TSVpFIDEwMjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9FbmNvZGluZy5oeHguaW4gYi9Tb3VyY2Uva3dzeXMvRW5jb2RpbmcuaHh4LmluCmluZGV4IGIwNjc1MjEuLjc1YTJkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9FbmNvZGluZy5oeHguaW4KKysrIGIvU291cmNlL2t3c3lzL0VuY29kaW5nLmh4eC5pbgpAQCAtNjgsNiArNjgsOCBAQAogICAgKiBhYnNvbHV0ZSBwYXRocyB3aXRoIFdpbmRvd3Mtc3R5bGUgYmFja3NsYXNoZXMuCiAgICAqKi8KICAgc3RhdGljIHN0ZDo6d3N0cmluZyBUb1dpbmRvd3NFeHRlbmRlZFBhdGgoc3RkOjpzdHJpbmcgY29uc3QmKTsKKyAgc3RhdGljIHN0ZDo6d3N0cmluZyBUb1dpbmRvd3NFeHRlbmRlZFBhdGgoY29uc3QgY2hhciogc291cmNlKTsKKyAgc3RhdGljIHN0ZDo6d3N0cmluZyBUb1dpbmRvd3NFeHRlbmRlZFBhdGgoc3RkOjp3c3RyaW5nIGNvbnN0JiB3c291cmNlKTsKICMgIGVuZGlmCiAKICNlbmRpZiAvLyBAS1dTWVNfTkFNRVNQQUNFQF9TVExfSEFTX1dTVFJJTkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9FbmNvZGluZ0NYWC5jeHggYi9Tb3VyY2Uva3dzeXMvRW5jb2RpbmdDWFguY3h4CmluZGV4IDQ1OTNjOTIuLmM2OGM3M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9FbmNvZGluZ0NYWC5jeHgKKysrIGIvU291cmNlL2t3c3lzL0VuY29kaW5nQ1hYLmN4eApAQCAtMTcsOCArMTcsOCBAQAogIyAgaW5jbHVkZSAiRW5jb2RpbmcuaHh4LmluIgogI2VuZGlmCiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaWZkZWYgX01TQ19WRVIKQEAgLTIyMSw4ICsyMjEsMTggQEAKIC8vIENvbnZlcnQgbG9jYWwgcGF0aHMgdG8gVU5DIHN0eWxlIHBhdGhzCiBzdGQ6OndzdHJpbmcgRW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgc291cmNlKQogewotICBzdGQ6OndzdHJpbmcgd3NvdXJjZSA9IEVuY29kaW5nOjpUb1dpZGUoc291cmNlKTsKKyAgcmV0dXJuIFRvV2luZG93c0V4dGVuZGVkUGF0aChUb1dpZGUoc291cmNlKSk7Cit9CiAKKy8vIENvbnZlcnQgbG9jYWwgcGF0aHMgdG8gVU5DIHN0eWxlIHBhdGhzCitzdGQ6OndzdHJpbmcgRW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChjb25zdCBjaGFyKiBzb3VyY2UpCit7CisgIHJldHVybiBUb1dpbmRvd3NFeHRlbmRlZFBhdGgoVG9XaWRlKHNvdXJjZSkpOworfQorCisvLyBDb252ZXJ0IGxvY2FsIHBhdGhzIHRvIFVOQyBzdHlsZSBwYXRocworc3RkOjp3c3RyaW5nIEVuY29kaW5nOjpUb1dpbmRvd3NFeHRlbmRlZFBhdGgoc3RkOjp3c3RyaW5nIGNvbnN0JiB3c291cmNlKQorewogICAvLyBSZXNvbHZlIGFueSByZWxhdGl2ZSBwYXRocwogICBEV09SRCB3ZnVsbF9sZW47CiAKQEAgLTI2OSw3ICsyNzksNyBAQAogCiAgIC8vIElmIHRoaXMgY2FzZSBoYXMgYmVlbiByZWFjaGVkLCB0aGVuIHRoZSBwYXRoIGlzIGludmFsaWQuICBMZWF2ZSBpdAogICAvLyB1bmNoYW5nZWQKLSAgcmV0dXJuIEVuY29kaW5nOjpUb1dpZGUoc291cmNlKTsKKyAgcmV0dXJuIHdzb3VyY2U7CiB9CiAjICBlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvRXh0cmFUZXN0LmNtYWtlLmluIGIvU291cmNlL2t3c3lzL0V4dHJhVGVzdC5jbWFrZS5pbgppbmRleCBlOGMwYTFjLi40Y2VjOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRXh0cmFUZXN0LmNtYWtlLmluCisrKyBiL1NvdXJjZS9rd3N5cy9FeHRyYVRlc3QuY21ha2UuaW4KQEAgLTEgKzEgQEAKLU1FU1NBR0UoIioqKiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IG1lc3NhZ2UgaW5zaWRlIGEgZmlsZSB0aGF0IGlzIGluY2x1ZGVkIGluIERhcnRUZXN0ZmlsZS50eHQgKioqIikKK21lc3NhZ2UoIioqKiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGJ5IG1lc3NhZ2UgaW5zaWRlIGEgZmlsZSB0aGF0IGlzIGluY2x1ZGVkIGluIERhcnRUZXN0ZmlsZS50eHQgKioqIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9GU3RyZWFtLmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9GU3RyZWFtLmh4eC5pbgppbmRleCBkNzliYmRmLi5iNDI0NDg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvRlN0cmVhbS5oeHguaW4KKysrIGIvU291cmNlL2t3c3lzL0ZTdHJlYW0uaHh4LmluCkBAIC04Nyw3ICs4Nyw3IEBACiAKICAgYm9vbCBfb3BlbihjaGFyIGNvbnN0KiBmaWxlX25hbWUsIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUpCiAgIHsKLSAgICBpZiAoaXNfb3BlbigpIHx8IGZpbGVfKSB7CisgICAgaWYgKF9pc19vcGVuKCkgfHwgZmlsZV8pIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjICBpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgIH0KIAotICBib29sIGlzX29wZW4oKQorICBib29sIF9pc19vcGVuKCkKICAgewogICAgIGlmICghYnVmXykgewogICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgcmV0dXJuIGJ1Zl8tPmlzX29wZW4oKTsKICAgfQogCi0gIGJvb2wgaXNfb3BlbigpIGNvbnN0CisgIGJvb2wgX2lzX29wZW4oKSBjb25zdAogICB7CiAgICAgaWYgKCFidWZfKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTgsOSArMTk4LDExIEBACiAgICAgdGhpcy0+X3NldF9zdGF0ZSh0aGlzLT5fb3BlbihmaWxlX25hbWUsIG1vZGUpLCB0aGlzLCB0aGlzKTsKICAgfQogCisgIGJvb2wgaXNfb3BlbigpIHsgcmV0dXJuIHRoaXMtPl9pc19vcGVuKCk7IH0KKwogICB2b2lkIGNsb3NlKCkgeyB0aGlzLT5fc2V0X3N0YXRlKHRoaXMtPl9jbG9zZSgpLCB0aGlzLCB0aGlzKTsgfQogCi0gIHVzaW5nIGJhc2ljX2VmaWxlYnVmPENoYXJUeXBlLCBUcmFpdHM+Ojppc19vcGVuOworICB1c2luZyBiYXNpY19lZmlsZWJ1ZjxDaGFyVHlwZSwgVHJhaXRzPjo6X2lzX29wZW47CiAKICAgaW50ZXJuYWxfYnVmZmVyX3R5cGUqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+YnVmXzsgfQogCkBAIC0yMTIsNyArMjE0LDcgQEAKICAgOiBwdWJsaWMgc3RkOjpiYXNpY19vc3RyZWFtPENoYXJUeXBlLCBUcmFpdHM+CiAgICwgcHVibGljIGJhc2ljX2VmaWxlYnVmPENoYXJUeXBlLCBUcmFpdHM+CiB7Ci0gIHVzaW5nIGJhc2ljX2VmaWxlYnVmPENoYXJUeXBlLCBUcmFpdHM+Ojppc19vcGVuOworICB1c2luZyBiYXNpY19lZmlsZWJ1ZjxDaGFyVHlwZSwgVHJhaXRzPjo6X2lzX29wZW47CiAKIHB1YmxpYzoKICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNpY19lZmlsZWJ1ZjxDaGFyVHlwZSwgVHJhaXRzPjo6aW50ZXJuYWxfYnVmZmVyX3R5cGUKQEAgLTI0Miw2ICsyNDQsOCBAQAogCiAgIHZvaWQgY2xvc2UoKSB7IHRoaXMtPl9zZXRfc3RhdGUodGhpcy0+X2Nsb3NlKCksIHRoaXMsIHRoaXMpOyB9CiAKKyAgYm9vbCBpc19vcGVuKCkgeyByZXR1cm4gdGhpcy0+X2lzX29wZW4oKTsgfQorCiAgIGludGVybmFsX2J1ZmZlcl90eXBlKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPmJ1Zl87IH0KIAogICB+YmFzaWNfb2ZzdHJlYW0oKSBAS1dTWVNfTkFNRVNQQUNFQF9GU3RyZWFtX05PRVhDRVBUIHsgY2xvc2UoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0dsb2IuY3h4IGIvU291cmNlL2t3c3lzL0dsb2IuY3h4CmluZGV4IDM0YmIwZDAuLmM2ZDRiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9HbG9iLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvR2xvYi5jeHgKQEAgLTIzLDExICsyMywxMSBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y2N0eXBlPgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RyaW5nPgogbmFtZXNwYWNlIEtXU1lTX05BTUVTUEFDRSB7Ci0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19BUFBMRV9fKQogLy8gT24gV2luZG93cyBhbmQgQXBwbGUsIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBsb3dlciBhbmQgdXBwZXIgY2FzZQogIyAgZGVmaW5lIEtXU1lTX0dMT0JfQ0FTRV9JTkRFUEVOREVOVAogI2VuZGlmCkBAIC0xODIsNyArMTgyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwgR2xvYk1lc3NhZ2VzKiBtZXNzYWdlcykKIHsKICAga3dzeXM6OkRpcmVjdG9yeSBkOwotICBpZiAoIWQuTG9hZChkaXIpKSB7CisgIHN0ZDo6c3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgaWYgKCFkLkxvYWQoZGlyLCAmZXJyb3JNZXNzYWdlKSkgeworICAgIGlmIChtZXNzYWdlcykgeworICAgICAgaWYgKCFlcnJvck1lc3NhZ2UuZW1wdHkoKSkgeworICAgICAgICBtZXNzYWdlcy0+cHVzaF9iYWNrKE1lc3NhZ2UoR2xvYjo6d2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBsaXN0aW5nIGRpcmVjdG9yeSAnIiArIGRpciArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInISBSZWFzb246ICciICsgZXJyb3JNZXNzYWdlICsgIiciKSk7CisgICAgICB9CisgICAgfQogICAgIHJldHVybiB0cnVlOwogICB9CiAgIHVuc2lnbmVkIGxvbmcgY2M7CkBAIC0yNzgsNyArMjg2LDkgQEAKICAgLy8gc3RkOjpjb3V0IDw8ICJQcm9jZXNzRGlyZWN0b3J5OiAiIDw8IGRpciA8PCBzdGQ6OmVuZGw7CiAgIGJvb2wgbGFzdCA9IChzdGFydCA9PSB0aGlzLT5JbnRlcm5hbHMtPkV4cHJlc3Npb25zLnNpemUoKSAtIDEpOwogICBpZiAobGFzdCAmJiB0aGlzLT5SZWN1cnNlKSB7Ci0gICAgdGhpcy0+UmVjdXJzZURpcmVjdG9yeShzdGFydCwgZGlyLCBtZXNzYWdlcyk7CisgICAgaWYgKGt3c3lzOjpTeXN0ZW1Ub29sczo6RmlsZUlzRGlyZWN0b3J5KGRpcikpIHsKKyAgICAgIHRoaXMtPlJlY3Vyc2VEaXJlY3Rvcnkoc3RhcnQsIGRpciwgbWVzc2FnZXMpOworICAgIH0KICAgICByZXR1cm47CiAgIH0KIApAQCAtMzg1LDEwICszOTUsOSBAQAogICB9CiAKICAgaWYgKHNraXAgPiAwKSB7Ci0gICAgZXhwciA9IGV4cHIuc3Vic3RyKHNraXApOworICAgIGV4cHIuZXJhc2UoMCwgc2tpcCk7CiAgIH0KIAotICBjZXhwciA9ICIiOwogICBmb3IgKGNjID0gMDsgY2MgPCBleHByLnNpemUoKTsgY2MrKykgewogICAgIGludCBjaCA9IGV4cHJbY2NdOwogICAgIGlmIChjaCA9PSAnLycpIHsKQEAgLTQxNSw4ICs0MjQsNyBAQAogCiB2b2lkIEdsb2I6OkFkZEV4cHJlc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIGV4cHIpCiB7Ci0gIHRoaXMtPkludGVybmFscy0+RXhwcmVzc2lvbnMucHVzaF9iYWNrKAotICAgIGt3c3lzOjpSZWd1bGFyRXhwcmVzc2lvbih0aGlzLT5QYXR0ZXJuVG9SZWdleChleHByKSkpOworICB0aGlzLT5JbnRlcm5hbHMtPkV4cHJlc3Npb25zLmVtcGxhY2VfYmFjayh0aGlzLT5QYXR0ZXJuVG9SZWdleChleHByKSk7CiB9CiAKIHZvaWQgR2xvYjo6U2V0UmVsYXRpdmUoY29uc3QgY2hhciogZGlyKQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0dsb2IuaHh4LmluIGIvU291cmNlL2t3c3lzL0dsb2IuaHh4LmluCmluZGV4IDE3MDc2NmYuLmU4NDc0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9HbG9iLmh4eC5pbgorKysgYi9Tb3VyY2Uva3dzeXMvR2xvYi5oeHguaW4KQEAgLTI4LDYgKzI4LDcgQEAKICAgZW51bSBNZXNzYWdlVHlwZQogICB7CiAgICAgZXJyb3IsCisgICAgd2FybmluZywKICAgICBjeWNsaWNSZWN1cnNpb24KICAgfTsKIApAQCAtMTI1LDggKzEyNiw4IEBACiAgIGJvb2wgUmVjdXJzZUxpc3REaXJzOwogCiBwcml2YXRlOgotICBHbG9iKGNvbnN0IEdsb2ImKTsgICAgICAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgR2xvYiYpOyAvLyBOb3QgaW1wbGVtZW50ZWQuCisgIEdsb2IoY29uc3QgR2xvYiYpID0gZGVsZXRlOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBHbG9iJikgPSBkZWxldGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQApkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL0lPU3RyZWFtLmN4eCBiL1NvdXJjZS9rd3N5cy9JT1N0cmVhbS5jeHgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMWY4N2QuLjAwMDAwMDAKLS0tIGEvU291cmNlL2t3c3lzL0lPU3RyZWFtLmN4eAorKysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyNrd3N5cyBmb3IgZGV0YWlscy4gICovCi0jaW5jbHVkZSAia3dzeXNQcml2YXRlLmgiCi0jaW5jbHVkZSBLV1NZU19IRUFERVIoQ29uZmlndXJlLmh4eCkKLQotLy8gSW5jbHVkZSB0aGUgc3RyZWFtcyBsaWJyYXJ5LgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgS1dTWVNfSEVBREVSKElPU3RyZWFtLmh4eCkKLQotLy8gV29yay1hcm91bmQgQ01ha2UgZGVwZW5kZW5jeSBzY2FubmluZyBsaW1pdGF0aW9uLiAgVGhpcyBtdXN0Ci0vLyBkdXBsaWNhdGUgdGhlIGFib3ZlIGxpc3Qgb2YgaGVhZGVycy4KLSNpZiAwCi0jICBpbmNsdWRlICJDb25maWd1cmUuaHh4LmluIgotIyAgaW5jbHVkZSAiSU9TdHJlYW0uaHh4LmluIgotI2VuZGlmCi0KLS8vIEltcGxlbWVudCB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgb25seSBpZiBpdCBpcyBuZWVkZWQuCi0jaWYgS1dTWVNfSU9TX05FRURfT1BFUkFUT1JTX0xMCi0KLSMgIGluY2x1ZGUgPHN0ZGlvLmg+ICAvLyBzc2NhbmYsIHNwcmludGYKLSMgIGluY2x1ZGUgPHN0cmluZy5oPiAvLyBtZW1jaHIKLQotIyAgaWYgZGVmaW5lZChfTUFYX0lOVF9ESUcpCi0jICAgIGRlZmluZSBLV1NZU19JT1NfSU5UNjRfTUFYX0RJRyBfTUFYX0lOVF9ESUcKLSMgIGVsc2UKLSMgICAgZGVmaW5lIEtXU1lTX0lPU19JTlQ2NF9NQVhfRElHIDMyCi0jICBlbmRpZgotCi1uYW1lc3BhY2UgS1dTWVNfTkFNRVNQQUNFIHsKLQotLy8gU2NhbiBhbiBpbnB1dCBzdHJlYW0gZm9yIGFuIGludGVnZXIgdmFsdWUuCi1zdGF0aWMgaW50IElPU3RyZWFtU2NhblN0cmVhbShzdGQ6OmlzdHJlYW0mIGlzLCBjaGFyKiBidWZmZXIpCi17Ci0gIC8vIFByZXBhcmUgdG8gd3JpdGUgdG8gYnVmZmVyLgotICBjaGFyKiBvdXQgPSBidWZmZXI7Ci0gIGNoYXIqIGVuZCA9IGJ1ZmZlciArIEtXU1lTX0lPU19JTlQ2NF9NQVhfRElHIC0gMTsKLQotICAvLyBMb29rIGZvciBsZWFkaW5nIHNpZ24uCi0gIGlmIChpcy5wZWVrKCkgPT0gJysnKSB7Ci0gICAgKm91dCsrID0gJysnOwotICAgIGlzLmlnbm9yZSgpOwotICB9IGVsc2UgaWYgKGlzLnBlZWsoKSA9PSAnLScpIHsKLSAgICAqb3V0KysgPSAnLSc7Ci0gICAgaXMuaWdub3JlKCk7Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgdGhlIGJhc2UuICBJZiBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHJlYW0sIHRyeSB0bwotICAvLyBkZXRlY3QgaXQgZnJvbSB0aGUgaW5wdXQuICBBIGxlYWRpbmcgMHggbWVhbnMgaGV4LCBhbmQgYSBsZWFkaW5nCi0gIC8vIDAgYWxvbmUgbWVhbnMgb2N0YWwuCi0gIGludCBiYXNlID0gMDsKLSAgaW50IGZsYWdzID0gaXMuZmxhZ3MoKSAmIHN0ZDo6aW9zX2Jhc2U6OmJhc2VmaWVsZDsKLSAgaWYgKGZsYWdzID09IHN0ZDo6aW9zX2Jhc2U6Om9jdCkgewotICAgIGJhc2UgPSA4OwotICB9IGVsc2UgaWYgKGZsYWdzID09IHN0ZDo6aW9zX2Jhc2U6OmRlYykgewotICAgIGJhc2UgPSAxMDsKLSAgfSBlbHNlIGlmIChmbGFncyA9PSBzdGQ6Omlvc19iYXNlOjpoZXgpIHsKLSAgICBiYXNlID0gMTY7Ci0gIH0KLSAgYm9vbCBmb3VuZERpZ2l0ID0gZmFsc2U7Ci0gIGJvb2wgZm91bmROb25aZXJvID0gZmFsc2U7Ci0gIGlmIChpcy5wZWVrKCkgPT0gJzAnKSB7Ci0gICAgZm91bmREaWdpdCA9IHRydWU7Ci0gICAgaXMuaWdub3JlKCk7Ci0gICAgaWYgKChpcy5wZWVrKCkgPT0gJ3gnIHx8IGlzLnBlZWsoKSA9PSAnWCcpICYmIChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikpIHsKLSAgICAgIGJhc2UgPSAxNjsKLSAgICAgIGZvdW5kRGlnaXQgPSBmYWxzZTsKLSAgICAgIGlzLmlnbm9yZSgpOwotICAgIH0gZWxzZSBpZiAoYmFzZSA9PSAwKSB7Ci0gICAgICBiYXNlID0gODsKLSAgICB9Ci0gIH0KLQotICAvLyBEZXRlcm1pbmUgdGhlIHJhbmdlIG9mIGRpZ2l0cyBhbGxvd2VkIGZvciB0aGlzIG51bWJlci4KLSAgY29uc3QgY2hhciogZGlnaXRzID0gIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYiOwotICBpbnQgbWF4RGlnaXRJbmRleCA9IDEwOwotICBpZiAoYmFzZSA9PSA4KSB7Ci0gICAgbWF4RGlnaXRJbmRleCA9IDg7Ci0gIH0gZWxzZSBpZiAoYmFzZSA9PSAxNikgewotICAgIG1heERpZ2l0SW5kZXggPSAxMCArIDYgKyA2OwotICB9Ci0KLSAgLy8gU2NhbiB1bnRpbCBhbiBpbnZhbGlkIGRpZ2l0IGlzIGZvdW5kLgotICBmb3IgKDsgaXMucGVlaygpICE9IEVPRjsgaXMuaWdub3JlKCkpIHsKLSAgICBpZiAobWVtY2hyKGRpZ2l0cywgKm91dCA9IChjaGFyKWlzLnBlZWsoKSwgbWF4RGlnaXRJbmRleCkgIT0gMCkgewotICAgICAgaWYgKChmb3VuZE5vblplcm8gfHwgKm91dCAhPSAnMCcpICYmIG91dCA8IGVuZCkgewotICAgICAgICArK291dDsKLSAgICAgICAgZm91bmROb25aZXJvID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGZvdW5kRGlnaXQgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvLyBDb3JyZWN0IHRoZSBidWZmZXIgY29udGVudHMgZm9yIGRlZ2VuZXJhdGUgY2FzZXMuCi0gIGlmIChmb3VuZERpZ2l0ICYmICFmb3VuZE5vblplcm8pIHsKLSAgICAqb3V0KysgPSAnMCc7Ci0gIH0gZWxzZSBpZiAoIWZvdW5kRGlnaXQpIHsKLSAgICBvdXQgPSBidWZmZXI7Ci0gIH0KLQotICAvLyBUZXJtaW5hdGUgdGhlIHN0cmluZyBpbiB0aGUgYnVmZmVyLgotICAqb3V0ID0gJ1wwJzsKLQotICByZXR1cm4gYmFzZTsKLX0KLQotLy8gUmVhZCBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gYW4gaW5wdXQgc3RyZWFtLgotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdGQ6OmlzdHJlYW0mIElPU3RyZWFtU2NhblRlbXBsYXRlKHN0ZDo6aXN0cmVhbSYgaXMsIFQmIHZhbHVlLCBjaGFyIHR5cGUpCi17Ci0gIGludCBzdGF0ZSA9IHN0ZDo6aW9zX2Jhc2U6Omdvb2RiaXQ7Ci0KLSAgLy8gU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UuCi0gIHN0ZDo6aXN0cmVhbTo6c2VudHJ5IG9rYXkoaXMpOwotCi0gIGlmIChva2F5KSB7Ci0gICAgdHJ5IHsKLSAgICAgIC8vIENvcHkgdGhlIHN0cmluZyB0byBhIGJ1ZmZlciBhbmQgY29uc3RydWN0IHRoZSBmb3JtYXQgc3RyaW5nLgotICAgICAgY2hhciBidWZmZXJbS1dTWVNfSU9TX0lOVDY0X01BWF9ESUddOwotIyAgaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgIGNoYXIgZm9ybWF0W10gPSAiJUk2NF8iOwotICAgICAgY29uc3QgaW50IHR5cGVJbmRleCA9IDQ7Ci0jICBlbHNlCi0gICAgICBjaGFyIGZvcm1hdFtdID0gIiVsbF8iOwotICAgICAgY29uc3QgaW50IHR5cGVJbmRleCA9IDM7Ci0jICBlbmRpZgotICAgICAgc3dpdGNoIChJT1N0cmVhbVNjYW5TdHJlYW0oaXMsIGJ1ZmZlcikpIHsKLSAgICAgICAgY2FzZSA4OgotICAgICAgICAgIGZvcm1hdFt0eXBlSW5kZXhdID0gJ28nOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDA6IC8vIERlZmF1bHQgdG8gZGVjaW1hbCBpZiBub3QgdG9sZCBvdGhlcndpc2UuCi0gICAgICAgIGNhc2UgMTA6Ci0gICAgICAgICAgZm9ybWF0W3R5cGVJbmRleF0gPSB0eXBlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE2OgotICAgICAgICAgIGZvcm1hdFt0eXBlSW5kZXhdID0gJ3gnOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfTsKLQotICAgICAgLy8gVXNlIHNzY2FuZiB0byBwYXJzZSB0aGUgbnVtYmVyIGZyb20gdGhlIGJ1ZmZlci4KLSAgICAgIFQgcmVzdWx0OwotICAgICAgaW50IHN1Y2Nlc3MgPSAoc3NjYW5mKGJ1ZmZlciwgZm9ybWF0LCAmcmVzdWx0KSA9PSAxKSA/IDEgOiAwOwotCi0gICAgICAvLyBTZXQgZmxhZ3MgZm9yIHJlc3VsdGluZyBzdGF0ZS4KLSAgICAgIGlmIChpcy5wZWVrKCkgPT0gRU9GKSB7Ci0gICAgICAgIHN0YXRlIHw9IHN0ZDo6aW9zX2Jhc2U6OmVvZmJpdDsKLSAgICAgIH0KLSAgICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBzdGF0ZSB8PSBzdGQ6Omlvc19iYXNlOjpmYWlsYml0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFsdWUgPSByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICBzdGF0ZSB8PSBzdGQ6Omlvc19iYXNlOjpiYWRiaXQ7Ci0gICAgfQotICB9Ci0KLSAgaXMuc2V0c3RhdGUoc3RkOjppb3NfYmFzZTo6aW9zdGF0ZShzdGF0ZSkpOwotICByZXR1cm4gaXM7Ci19Ci0KLS8vIFByaW50IGFuIGludGVnZXIgdmFsdWUgdG8gYW4gb3V0cHV0IHN0cmVhbS4KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RkOjpvc3RyZWFtJiBJT1N0cmVhbVByaW50VGVtcGxhdGUoc3RkOjpvc3RyZWFtJiBvcywgVCB2YWx1ZSwgY2hhciB0eXBlKQotewotICBzdGQ6Om9zdHJlYW06OnNlbnRyeSBva2F5KG9zKTsKLSAgaWYgKG9rYXkpIHsKLSAgICB0cnkgewotICAgICAgLy8gQ29uc3RydWN0IHRoZSBmb3JtYXQgc3RyaW5nLgotICAgICAgY2hhciBmb3JtYXRbOF07Ci0gICAgICBjaGFyKiBmID0gZm9ybWF0OwotICAgICAgKmYrKyA9ICclJzsKLSAgICAgIGlmIChvcy5mbGFncygpICYgc3RkOjppb3NfYmFzZTo6c2hvd3BvcykgewotICAgICAgICAqZisrID0gJysnOwotICAgICAgfQotICAgICAgaWYgKG9zLmZsYWdzKCkgJiBzdGQ6Omlvc19iYXNlOjpzaG93YmFzZSkgewotICAgICAgICAqZisrID0gJyMnOwotICAgICAgfQotIyAgaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgICpmKysgPSAnSSc7Ci0gICAgICAqZisrID0gJzYnOwotICAgICAgKmYrKyA9ICc0JzsKLSMgIGVsc2UKLSAgICAgICpmKysgPSAnbCc7Ci0gICAgICAqZisrID0gJ2wnOwotIyAgZW5kaWYKLSAgICAgIGxvbmcgYmZsYWdzID0gb3MuZmxhZ3MoKSAmIHN0ZDo6aW9zX2Jhc2U6OmJhc2VmaWVsZDsKLSAgICAgIGlmIChiZmxhZ3MgPT0gc3RkOjppb3NfYmFzZTo6b2N0KSB7Ci0gICAgICAgICpmKysgPSAnbyc7Ci0gICAgICB9IGVsc2UgaWYgKGJmbGFncyAhPSBzdGQ6Omlvc19iYXNlOjpoZXgpIHsKLSAgICAgICAgKmYrKyA9IHR5cGU7Ci0gICAgICB9IGVsc2UgaWYgKG9zLmZsYWdzKCkgJiBzdGQ6Omlvc19iYXNlOjp1cHBlcmNhc2UpIHsKLSAgICAgICAgKmYrKyA9ICdYJzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpmKysgPSAneCc7Ci0gICAgICB9Ci0gICAgICAqZiA9ICdcMCc7Ci0KLSAgICAgIC8vIFVzZSBzcHJpbnRmIHRvIHByaW50IHRvIGEgYnVmZmVyIGFuZCB0aGVuIHdyaXRlIHRoZQotICAgICAgLy8gYnVmZmVyIHRvIHRoZSBzdHJlYW0uCi0gICAgICBjaGFyIGJ1ZmZlclsyICogS1dTWVNfSU9TX0lOVDY0X01BWF9ESUddOwotICAgICAgc3ByaW50ZihidWZmZXIsIGZvcm1hdCwgdmFsdWUpOwotICAgICAgb3MgPDwgYnVmZmVyOwotICAgIH0gY2F0Y2ggKC4uLikgewotICAgICAgb3MuY2xlYXIob3MucmRzdGF0ZSgpIHwgc3RkOjppb3NfYmFzZTo6YmFkYml0KTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG9zOwotfQotCi0jICBpZiAhS1dTWVNfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9ORwotLy8gSW1wbGVtZW50IGlucHV0IHN0cmVhbSBvcGVyYXRvciBmb3IgSU9TdHJlYW1TTEwuCi1zdGQ6OmlzdHJlYW0mIElPU3RyZWFtU2NhbihzdGQ6OmlzdHJlYW0mIGlzLCBJT1N0cmVhbVNMTCYgdmFsdWUpCi17Ci0gIHJldHVybiBJT1N0cmVhbVNjYW5UZW1wbGF0ZShpcywgdmFsdWUsICdkJyk7Ci19Ci0KLS8vIEltcGxlbWVudCBpbnB1dCBzdHJlYW0gb3BlcmF0b3IgZm9yIElPU3RyZWFtVUxMLgotc3RkOjppc3RyZWFtJiBJT1N0cmVhbVNjYW4oc3RkOjppc3RyZWFtJiBpcywgSU9TdHJlYW1VTEwmIHZhbHVlKQotewotICByZXR1cm4gSU9TdHJlYW1TY2FuVGVtcGxhdGUoaXMsIHZhbHVlLCAndScpOwotfQotIyAgZW5kaWYKLQotIyAgaWYgIUtXU1lTX0lPU19IQVNfT1NUUkVBTV9MT05HX0xPTkcKLS8vIEltcGxlbWVudCBvdXRwdXQgc3RyZWFtIG9wZXJhdG9yIGZvciBJT1N0cmVhbVNMTC4KLXN0ZDo6b3N0cmVhbSYgSU9TdHJlYW1QcmludChzdGQ6Om9zdHJlYW0mIG9zLCBJT1N0cmVhbVNMTCB2YWx1ZSkKLXsKLSAgcmV0dXJuIElPU3RyZWFtUHJpbnRUZW1wbGF0ZShvcywgdmFsdWUsICdkJyk7Ci19Ci0KLS8vIEltcGxlbWVudCBvdXRwdXQgc3RyZWFtIG9wZXJhdG9yIGZvciBJT1N0cmVhbVVMTC4KLXN0ZDo6b3N0cmVhbSYgSU9TdHJlYW1QcmludChzdGQ6Om9zdHJlYW0mIG9zLCBJT1N0cmVhbVVMTCB2YWx1ZSkKLXsKLSAgcmV0dXJuIElPU3RyZWFtUHJpbnRUZW1wbGF0ZShvcywgdmFsdWUsICd1Jyk7Ci19Ci0jICBlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBLV1NZU19OQU1FU1BBQ0UKLQotI2Vsc2UKLQotbmFtZXNwYWNlIEtXU1lTX05BTUVTUEFDRSB7Ci0KLS8vIENyZWF0ZSBvbmUgcHVibGljIHN5bWJvbCBpbiB0aGlzIG9iamVjdCBmaWxlIHRvIGF2b2lkIHdhcm5pbmdzIGZyb20KLS8vIGFyY2hpdmVycy4KLXZvaWQgSU9TdHJlYW1TeW1ib2xUb0F2b2lkV2FybmluZygpOwotdm9pZCBJT1N0cmVhbVN5bWJvbFRvQXZvaWRXYXJuaW5nKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgS1dTWVNfTkFNRVNQQUNFCi0KLSNlbmRpZiAvLyBLV1NZU19JT1NfTkVFRF9PUEVSQVRPUlNfTEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9JT1N0cmVhbS5oeHguaW4gYi9Tb3VyY2Uva3dzeXMvSU9TdHJlYW0uaHh4LmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjhhMjNlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9rd3N5cy9JT1N0cmVhbS5oeHguaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcja3dzeXMgZm9yIGRldGFpbHMuICAqLwotI2lmbmRlZiBAS1dTWVNfTkFNRVNQQUNFQF9JT1N0cmVhbV9oeHgKLSNkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfSU9TdHJlYW1faHh4Ci0KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0KLS8qIERlZmluZSB0aGVzZSBtYWNyb3MgdGVtcG9yYXJpbHkgdG8ga2VlcCB0aGUgY29kZSByZWFkYWJsZS4gICovCi0jaWYgIWRlZmluZWQoS1dTWVNfTkFNRVNQQUNFKSAmJiAhQEtXU1lTX05BTUVTUEFDRUBfTkFNRV9JU19LV1NZUwotIyAgZGVmaW5lIGt3c3lzRVhQT1JUIEBLV1NZU19OQU1FU1BBQ0VAX0VYUE9SVAotI2VuZGlmCi0KLS8qIFdoZXRoZXIgaXN0cmVhbSBzdXBwb3J0cyBsb25nIGxvbmcuICAqLwotI2RlZmluZSBAS1dTWVNfTkFNRVNQQUNFQF9JT1NfSEFTX0lTVFJFQU1fTE9OR19MT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBAS1dTWVNfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9OR0AKLQotLyogV2hldGhlciBvc3RyZWFtIHN1cHBvcnRzIGxvbmcgbG9uZy4gICovCi0jZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19IQVNfT1NUUkVBTV9MT05HX0xPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEBLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HQAotCi0vKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGRlZmluZSB0aGUgc3RyZWFtaW5nIG9wZXJhdG9ycyBmb3IKLSAgIGxvbmcgbG9uZyBvciBfX2ludDY0LiAgKi8KLSNpZiBAS1dTWVNfVVNFX0xPTkdfTE9OR0AKLSMgIGlmICFAS1dTWVNfTkFNRVNQQUNFQF9JT1NfSEFTX0lTVFJFQU1fTE9OR19MT05HIHx8ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAhQEtXU1lTX05BTUVTUEFDRUBfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORwotIyAgICBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfSU9TX05FRURfT1BFUkFUT1JTX0xMIDEKLW5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQCB7Ci10eXBlZGVmIGxvbmcgbG9uZyBJT1N0cmVhbVNMTDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIElPU3RyZWFtVUxMOwotfQotIyAgZW5kaWYKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTMwMAotIyAgZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19ORUVEX09QRVJBVE9SU19MTCAxCi1uYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAgewotdHlwZWRlZiBfX2ludDY0IElPU3RyZWFtU0xMOwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IElPU3RyZWFtVUxMOwotfQotI2VuZGlmCi0jaWYgIWRlZmluZWQoQEtXU1lTX05BTUVTUEFDRUBfSU9TX05FRURfT1BFUkFUT1JTX0xMKQotIyAgZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19ORUVEX09QRVJBVE9SU19MTCAwCi0jZW5kaWYKLQotI2lmIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19ORUVEX09QRVJBVE9SU19MTAotIyAgaWYgIUBLV1NZU19OQU1FU1BBQ0VAX0lPU19IQVNfSVNUUkVBTV9MT05HX0xPTkcKLQotLyogSW5wdXQgc3RyZWFtIG9wZXJhdG9yIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucy4gICovCi1uYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAgewota3dzeXNFWFBPUlQgc3RkOjppc3RyZWFtJiBJT1N0cmVhbVNjYW4oc3RkOjppc3RyZWFtJiwgSU9TdHJlYW1TTEwmKTsKLWt3c3lzRVhQT1JUIHN0ZDo6aXN0cmVhbSYgSU9TdHJlYW1TY2FuKHN0ZDo6aXN0cmVhbSYsIElPU3RyZWFtVUxMJik7Ci19Ci0KLS8qIFByb3ZpZGUgaW5wdXQgc3RyZWFtIG9wZXJhdG9yIGZvciBsb25nIGxvbmcuICAqLwotIyAgICBpZiAhZGVmaW5lZChAS1dTWVNfTkFNRVNQQUNFQF9JT1NfTk9fSVNUUkVBTV9MT05HX0xPTkcpICYmICAgICAgICAgICAgICAgXAotICAgICAgIWRlZmluZWQoS1dTWVNfSU9TX0lTVFJFQU1fTE9OR19MT05HX0RFRklORUQpCi0jICAgICAgZGVmaW5lIEtXU1lTX0lPU19JU1RSRUFNX0xPTkdfTE9OR19ERUZJTkVECi0jICAgICAgZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19JU1RSRUFNX0xPTkdfTE9OR19ERUZJTkVECi1pbmxpbmUgc3RkOjppc3RyZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYgaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBLV1NZU19OQU1FU1BBQ0VAOjpJT1N0cmVhbVNMTCYgdmFsdWUpCi17Ci0gIHJldHVybiBAS1dTWVNfTkFNRVNQQUNFQDo6SU9TdHJlYW1TY2FuKGlzLCB2YWx1ZSk7Ci19Ci0jICAgIGVuZGlmCi0KLS8qIFByb3ZpZGUgaW5wdXQgc3RyZWFtIG9wZXJhdG9yIGZvciB1bnNpZ25lZCBsb25nIGxvbmcuICAqLwotIyAgICBpZiAhZGVmaW5lZChAS1dTWVNfTkFNRVNQQUNFQF9JT1NfTk9fSVNUUkVBTV9VTlNJR05FRF9MT05HX0xPTkcpICYmICAgICAgXAotICAgICAgIWRlZmluZWQoS1dTWVNfSU9TX0lTVFJFQU1fVU5TSUdORURfTE9OR19MT05HX0RFRklORUQpCi0jICAgICAgZGVmaW5lIEtXU1lTX0lPU19JU1RSRUFNX1VOU0lHTkVEX0xPTkdfTE9OR19ERUZJTkVECi0jICAgICAgZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19JU1RSRUFNX1VOU0lHTkVEX0xPTkdfTE9OR19ERUZJTkVECi1pbmxpbmUgc3RkOjppc3RyZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYgaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBLV1NZU19OQU1FU1BBQ0VAOjpJT1N0cmVhbVVMTCYgdmFsdWUpCi17Ci0gIHJldHVybiBAS1dTWVNfTkFNRVNQQUNFQDo6SU9TdHJlYW1TY2FuKGlzLCB2YWx1ZSk7Ci19Ci0jICAgIGVuZGlmCi0jICBlbmRpZiAvKiAhQEtXU1lTX05BTUVTUEFDRUBfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9ORyAqLwotCi0jICBpZiAhQEtXU1lTX05BTUVTUEFDRUBfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORwotCi0vKiBPdXRwdXQgc3RyZWFtIG9wZXJhdG9yIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucy4gICovCi1uYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAgewota3dzeXNFWFBPUlQgc3RkOjpvc3RyZWFtJiBJT1N0cmVhbVByaW50KHN0ZDo6b3N0cmVhbSYsIElPU3RyZWFtU0xMKTsKLWt3c3lzRVhQT1JUIHN0ZDo6b3N0cmVhbSYgSU9TdHJlYW1QcmludChzdGQ6Om9zdHJlYW0mLCBJT1N0cmVhbVVMTCk7Ci19Ci0KLS8qIFByb3ZpZGUgb3V0cHV0IHN0cmVhbSBvcGVyYXRvciBmb3IgbG9uZyBsb25nLiAgKi8KLSMgICAgaWYgIWRlZmluZWQoQEtXU1lTX05BTUVTUEFDRUBfSU9TX05PX09TVFJFQU1fTE9OR19MT05HKSAmJiAgICAgICAgICAgICAgIFwKLSAgICAgICFkZWZpbmVkKEtXU1lTX0lPU19PU1RSRUFNX0xPTkdfTE9OR19ERUZJTkVEKQotIyAgICAgIGRlZmluZSBLV1NZU19JT1NfT1NUUkVBTV9MT05HX0xPTkdfREVGSU5FRAotIyAgICAgIGRlZmluZSBAS1dTWVNfTkFNRVNQQUNFQF9JT1NfT1NUUkVBTV9MT05HX0xPTkdfREVGSU5FRAotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAS1dTWVNfTkFNRVNQQUNFQDo6SU9TdHJlYW1TTEwgdmFsdWUpCi17Ci0gIHJldHVybiBAS1dTWVNfTkFNRVNQQUNFQDo6SU9TdHJlYW1QcmludChvcywgdmFsdWUpOwotfQotIyAgICBlbmRpZgotCi0vKiBQcm92aWRlIG91dHB1dCBzdHJlYW0gb3BlcmF0b3IgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZy4gICovCi0jICAgIGlmICFkZWZpbmVkKEBLV1NZU19OQU1FU1BBQ0VAX0lPU19OT19PU1RSRUFNX1VOU0lHTkVEX0xPTkdfTE9ORykgJiYgICAgICBcCi0gICAgICAhZGVmaW5lZChLV1NZU19JT1NfT1NUUkVBTV9VTlNJR05FRF9MT05HX0xPTkdfREVGSU5FRCkKLSMgICAgICBkZWZpbmUgS1dTWVNfSU9TX09TVFJFQU1fVU5TSUdORURfTE9OR19MT05HX0RFRklORUQKLSMgICAgICBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfSU9TX09TVFJFQU1fVU5TSUdORURfTE9OR19MT05HX0RFRklORUQKLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQEtXU1lTX05BTUVTUEFDRUA6OklPU3RyZWFtVUxMIHZhbHVlKQotewotICByZXR1cm4gQEtXU1lTX05BTUVTUEFDRUA6OklPU3RyZWFtUHJpbnQob3MsIHZhbHVlKTsKLX0KLSMgICAgZW5kaWYKLSMgIGVuZGlmIC8qICFAS1dTWVNfTkFNRVNQQUNFQF9JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HICovCi0jZW5kaWYgICAvKiBAS1dTWVNfTkFNRVNQQUNFQF9JT1NfTkVFRF9PUEVSQVRPUlNfTEwgKi8KLQotLyogVW5kZWZpbmUgdGVtcG9yYXJ5IG1hY3Jvcy4gICovCi0jaWYgIWRlZmluZWQoS1dTWVNfTkFNRVNQQUNFKSAmJiAhQEtXU1lTX05BTUVTUEFDRUBfTkFNRV9JU19LV1NZUwotIyAgdW5kZWYga3dzeXNFWFBPUlQKLSNlbmRpZgotCi0vKiBJZiBidWlsZGluZyBhIEMrKyBmaWxlIGluIGt3c3lzIGl0c2VsZiwgZ2l2ZSB0aGUgc291cmNlIGZpbGUKLSAgIGFjY2VzcyB0byB0aGUgbWFjcm9zIHdpdGhvdXQgYSBjb25maWd1cmVkIG5hbWVzcGFjZS4gICovCi0jaWYgZGVmaW5lZChLV1NZU19OQU1FU1BBQ0UpCi0jICBkZWZpbmUgS1dTWVNfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQEtXU1lTX05BTUVTUEFDRUBfSU9TX0hBU19JU1RSRUFNX0xPTkdfTE9ORwotIyAgZGVmaW5lIEtXU1lTX0lPU19IQVNfT1NUUkVBTV9MT05HX0xPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEBLV1NZU19OQU1FU1BBQ0VAX0lPU19IQVNfT1NUUkVBTV9MT05HX0xPTkcKLSMgIGRlZmluZSBLV1NZU19JT1NfTkVFRF9PUEVSQVRPUlNfTEwgQEtXU1lTX05BTUVTUEFDRUBfSU9TX05FRURfT1BFUkFUT1JTX0xMCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvTUQ1LmMgYi9Tb3VyY2Uva3dzeXMvTUQ1LmMKaW5kZXggOTdjZjliYS4uZmIxOGE1YiAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL01ENS5jCisrKyBiL1NvdXJjZS9rd3N5cy9NRDUuYwpAQCAtMTcxLDggKzE3MSwxMCBAQAogCiBzdGF0aWMgdm9pZCBtZDVfcHJvY2VzcyhtZDVfc3RhdGVfdCogcG1zLCBjb25zdCBtZDVfYnl0ZV90KiBkYXRhIC8qWzY0XSovKQogewotICBtZDVfd29yZF90IGEgPSBwbXMtPmFiY2RbMF0sIGIgPSBwbXMtPmFiY2RbMV0sIGMgPSBwbXMtPmFiY2RbMl0sCi0gICAgICAgICAgICAgZCA9IHBtcy0+YWJjZFszXTsKKyAgbWQ1X3dvcmRfdCBhID0gcG1zLT5hYmNkWzBdOworICBtZDVfd29yZF90IGIgPSBwbXMtPmFiY2RbMV07CisgIG1kNV93b3JkX3QgYyA9IHBtcy0+YWJjZFsyXTsKKyAgbWQ1X3dvcmRfdCBkID0gcG1zLT5hYmNkWzNdOwogICBtZDVfd29yZF90IHQ7CiAjaWYgQllURV9PUkRFUiA+IDAKICAgLyogRGVmaW5lIHN0b3JhZ2Ugb25seSBmb3IgYmlnLWVuZGlhbiBDUFVzLiAqLwpAQCAtMjI3LDkgKzIyOSwxMCBAQAogIyAgZWxzZQogIyAgICBkZWZpbmUgeGJ1ZiBYIC8qIChzdGF0aWMgb25seSkgKi8KICMgIGVuZGlmCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSwgeHAgKz0gNCkKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpLCB4cCArPSA0KSB7CiAgICAgICAgIHhidWZbaV0gPQogICAgICAgICAgIChtZDVfd29yZF90KSh4cFswXSArICh4cFsxXSA8PCA4KSArICh4cFsyXSA8PCAxNikgKyAoeHBbM10gPDwgMjQpKTsKKyAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgfQpAQCAtMzY3LDM0ICszNzAsMzkgQEAKICAgc2l6ZV90IG9mZnNldCA9IChwbXMtPmNvdW50WzBdID4+IDMpICYgNjM7CiAgIG1kNV93b3JkX3QgbmJpdHMgPSAobWQ1X3dvcmRfdCkobmJ5dGVzIDw8IDMpOwogCi0gIGlmIChuYnl0ZXMgPD0gMCkKKyAgaWYgKG5ieXRlcyA8PSAwKSB7CiAgICAgcmV0dXJuOworICB9CiAKICAgLyogVXBkYXRlIHRoZSBtZXNzYWdlIGxlbmd0aC4gKi8KICAgcG1zLT5jb3VudFsxXSArPSAobWQ1X3dvcmRfdCkobmJ5dGVzID4+IDI5KTsKICAgcG1zLT5jb3VudFswXSArPSBuYml0czsKLSAgaWYgKHBtcy0+Y291bnRbMF0gPCBuYml0cykKKyAgaWYgKHBtcy0+Y291bnRbMF0gPCBuYml0cykgewogICAgIHBtcy0+Y291bnRbMV0rKzsKKyAgfQogCiAgIC8qIFByb2Nlc3MgYW4gaW5pdGlhbCBwYXJ0aWFsIGJsb2NrLiAqLwogICBpZiAob2Zmc2V0KSB7CiAgICAgc2l6ZV90IGNvcHkgPSAob2Zmc2V0ICsgbmJ5dGVzID4gNjQgPyA2NCAtIG9mZnNldCA6IG5ieXRlcyk7CiAKICAgICBtZW1jcHkocG1zLT5idWYgKyBvZmZzZXQsIHAsIGNvcHkpOwotICAgIGlmIChvZmZzZXQgKyBjb3B5IDwgNjQpCisgICAgaWYgKG9mZnNldCArIGNvcHkgPCA2NCkgewogICAgICAgcmV0dXJuOworICAgIH0KICAgICBwICs9IGNvcHk7CiAgICAgbGVmdCAtPSBjb3B5OwogICAgIG1kNV9wcm9jZXNzKHBtcywgcG1zLT5idWYpOwogICB9CiAKICAgLyogUHJvY2VzcyBmdWxsIGJsb2Nrcy4gKi8KLSAgZm9yICg7IGxlZnQgPj0gNjQ7IHAgKz0gNjQsIGxlZnQgLT0gNjQpCisgIGZvciAoOyBsZWZ0ID49IDY0OyBwICs9IDY0LCBsZWZ0IC09IDY0KSB7CiAgICAgbWQ1X3Byb2Nlc3MocG1zLCBwKTsKKyAgfQogCiAgIC8qIFByb2Nlc3MgYSBmaW5hbCBwYXJ0aWFsIGJsb2NrLiAqLwotICBpZiAobGVmdCkKKyAgaWYgKGxlZnQpIHsKICAgICBtZW1jcHkocG1zLT5idWYsIHAsIGxlZnQpOworICB9CiB9CiAKIC8qIEZpbmlzaCB0aGUgbWVzc2FnZSBhbmQgcmV0dXJuIHRoZSBkaWdlc3QuICovCkBAIC00MDksMTQgKzQxNywxNiBAQAogICBpbnQgaTsKIAogICAvKiBTYXZlIHRoZSBsZW5ndGggYmVmb3JlIHBhZGRpbmcuICovCi0gIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisgIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKICAgICBkYXRhW2ldID0gKG1kNV9ieXRlX3QpKHBtcy0+Y291bnRbaSA+PiAyXSA+PiAoKGkgJiAzKSA8PCAzKSk7CisgIH0KICAgLyogUGFkIHRvIDU2IGJ5dGVzIG1vZCA2NC4gKi8KICAgbWQ1X2FwcGVuZChwbXMsIHBhZCwgKCg1NSAtIChwbXMtPmNvdW50WzBdID4+IDMpKSAmIDYzKSArIDEpOwogICAvKiBBcHBlbmQgdGhlIGxlbmd0aC4gKi8KICAgbWQ1X2FwcGVuZChwbXMsIGRhdGEsIDgpOwotICBmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkKKyAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHsKICAgICBkaWdlc3RbaV0gPSAobWQ1X2J5dGVfdCkocG1zLT5hYmNkW2kgPj4gMl0gPj4gKChpICYgMykgPDwgMykpOworICB9CiB9CiAKICNpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9Qcm9jZXNzLmguaW4gYi9Tb3VyY2Uva3dzeXMvUHJvY2Vzcy5oLmluCmluZGV4IDczZWE5ZGIuLjlmMjE2MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9Qcm9jZXNzLmguaW4KKysrIGIvU291cmNlL2t3c3lzL1Byb2Nlc3MuaC5pbgpAQCAtMTgwLDggKzE4MCw4IEBACiAgKiB3cml0ZSBlbmQgb2YgdGhlIHBpcGUgd2lsbCBiZSBjbG9zZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIGFuZCB0aGUKICAqIHJlYWQgZW5kIHdpbGwgYmUgY2xvc2VkIGluIHRoZSBjaGlsZCBwcm9jZXNzLgogICovCi1rd3N5c0VYUE9SVCB2b2lkIGt3c3lzUHJvY2Vzc19TZXRQaXBlTmF0aXZlKGt3c3lzUHJvY2VzcyogY3AsIGludCBwaXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NfUGlwZV9IYW5kbGUgcFsyXSk7Citrd3N5c0VYUE9SVCB2b2lkIGt3c3lzUHJvY2Vzc19TZXRQaXBlTmF0aXZlKAorICBrd3N5c1Byb2Nlc3MqIGNwLCBpbnQgcGlwZSwgY29uc3Qga3dzeXNQcm9jZXNzX1BpcGVfSGFuZGxlIHBbMl0pOwogCiAvKioKICAqIEdldC9TZXQgYSBwb3NzaWJseSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpb24uICBQb3NzaWJsZSBvcHRpb25zIGFyZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9Qcm9jZXNzVU5JWC5jIGIvU291cmNlL2t3c3lzL1Byb2Nlc3NVTklYLmMKaW5kZXggZjY1NjkwYi4uZTFlNzcyMSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1Byb2Nlc3NVTklYLmMKKysrIGIvU291cmNlL2t3c3lzL1Byb2Nlc3NVTklYLmMKQEAgLTE1MiwxMCArMTUyLDExIEBACiBzdGF0aWMgdm9pZCBrd3N5c1Byb2Nlc3NEZXN0cm95KGt3c3lzUHJvY2VzcyogY3ApOwogc3RhdGljIGludCBrd3N5c1Byb2Nlc3NTZXR1cE91dHB1dFBpcGVGaWxlKGludCogcCwgY29uc3QgY2hhciogbmFtZSk7CiBzdGF0aWMgaW50IGt3c3lzUHJvY2Vzc1NldHVwT3V0cHV0UGlwZU5hdGl2ZShpbnQqIHAsIGludCBkZXNbMl0pOwotc3RhdGljIGludCBrd3N5c1Byb2Nlc3NHZXRUaW1lb3V0VGltZShrd3N5c1Byb2Nlc3MqIGNwLCBkb3VibGUqIHVzZXJUaW1lb3V0LAorc3RhdGljIGludCBrd3N5c1Byb2Nlc3NHZXRUaW1lb3V0VGltZShrd3N5c1Byb2Nlc3MqIGNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUqIHVzZXJUaW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NUaW1lKiB0aW1lb3V0VGltZSk7CiBzdGF0aWMgaW50IGt3c3lzUHJvY2Vzc0dldFRpbWVvdXRMZWZ0KGt3c3lzUHJvY2Vzc1RpbWUqIHRpbWVvdXRUaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUqIHVzZXJUaW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUqIHVzZXJUaW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NUaW1lTmF0aXZlKiB0aW1lb3V0TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgemVyb0lzRXhwaXJlZCk7CiBzdGF0aWMga3dzeXNQcm9jZXNzVGltZSBrd3N5c1Byb2Nlc3NUaW1lR2V0Q3VycmVudCh2b2lkKTsKQEAgLTQzMSw4ICs0MzIsOCBAQAogICAgIGNoYXIgY29uc3QqIGNvbnN0KiBjID0gY29tbWFuZDsKICAgICBrd3N5c1Byb2Nlc3NfcHRyZGlmZl90IG4gPSAwOwogICAgIGt3c3lzUHJvY2Vzc19wdHJkaWZmX3QgaSA9IDA7Ci0gICAgd2hpbGUgKCpjKyspCi0gICAgICA7CisgICAgd2hpbGUgKCpjKyspIHsKKyAgICB9CiAgICAgbiA9IGMgLSBjb21tYW5kIC0gMTsKICAgICBuZXdDb21tYW5kc1tjcC0+TnVtYmVyT2ZDb21tYW5kc10gPQogICAgICAgKGNoYXIqKiltYWxsb2MoKHNpemVfdCkobiArIDEpICogc2l6ZW9mKGNoYXIqKSk7CkBAIC01NzEsNyArNTcyLDcgQEAKICAgfQogfQogCi12b2lkIGt3c3lzUHJvY2Vzc19TZXRQaXBlTmF0aXZlKGt3c3lzUHJvY2VzcyogY3AsIGludCBwclBpcGUsIGludCBwWzJdKQordm9pZCBrd3N5c1Byb2Nlc3NfU2V0UGlwZU5hdGl2ZShrd3N5c1Byb2Nlc3MqIGNwLCBpbnQgcHJQaXBlLCBjb25zdCBpbnQgcFsyXSkKIHsKICAgaW50KiBwUGlwZU5hdGl2ZSA9IDA7CiAKQEAgLTY4NCw3ICs2ODUsOCBAQAogewogICBpZiAoIWNwKSB7CiAgICAgcmV0dXJuICJQcm9jZXNzIG1hbmFnZW1lbnQgc3RydWN0dXJlIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQiOwotICB9IGVsc2UgaWYgKGNwLT5TdGF0ZSA9PSBrd3N5c1Byb2Nlc3NfU3RhdGVfRXJyb3IpIHsKKyAgfQorICBpZiAoY3AtPlN0YXRlID09IGt3c3lzUHJvY2Vzc19TdGF0ZV9FcnJvcikgewogICAgIHJldHVybiBjcC0+RXJyb3JNZXNzYWdlOwogICB9CiAgIHJldHVybiAiU3VjY2VzcyI7CkBAIC02OTQsNyArNjk2LDggQEAKIHsKICAgaWYgKCEoY3AgJiYgY3AtPlByb2Nlc3NSZXN1bHRzICYmIChjcC0+TnVtYmVyT2ZDb21tYW5kcyA+IDApKSkgewogICAgIHJldHVybiAiR2V0RXhjZXB0aW9uU3RyaW5nIGNhbGxlZCB3aXRoIE5VTEwgcHJvY2VzcyBtYW5hZ2VtZW50IHN0cnVjdHVyZSI7Ci0gIH0gZWxzZSBpZiAoY3AtPlN0YXRlID09IGt3c3lzUHJvY2Vzc19TdGF0ZV9FeGNlcHRpb24pIHsKKyAgfQorICBpZiAoY3AtPlN0YXRlID09IGt3c3lzUHJvY2Vzc19TdGF0ZV9FeGNlcHRpb24pIHsKICAgICByZXR1cm4gY3AtPlByb2Nlc3NSZXN1bHRzW2NwLT5OdW1iZXJPZkNvbW1hbmRzIC0gMV0uRXhpdEV4Y2VwdGlvblN0cmluZzsKICAgfQogICByZXR1cm4gIk5vIGV4Y2VwdGlvbiI7CkBAIC03ODYsOCArNzg5LDggQEAKIAogICAgIC8qIFNvbWUgcGxhdGZvcm1zIHNwZWNpZnkgdGhhdCB0aGUgY2hkaXIgY2FsbCBtYXkgYmUKICAgICAgICBpbnRlcnJ1cHRlZC4gIFJlcGVhdCB0aGUgY2FsbCB1bnRpbCBpdCBmaW5pc2hlcy4gICovCi0gICAgd2hpbGUgKCgociA9IGNoZGlyKGNwLT5Xb3JraW5nRGlyZWN0b3J5KSkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgOworICAgIHdoaWxlICgoKHIgPSBjaGRpcihjcC0+V29ya2luZ0RpcmVjdG9yeSkpIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkgeworICAgIH0KICAgICBpZiAociA8IDApIHsKICAgICAgIGt3c3lzUHJvY2Vzc0NsZWFudXAoY3AsIDEpOwogICAgICAgcmV0dXJuOwpAQCAtMTAxMyw4ICsxMDE2LDggQEAKICAgaWYgKGNwLT5SZWFsV29ya2luZ0RpcmVjdG9yeSkgewogICAgIC8qIFNvbWUgcGxhdGZvcm1zIHNwZWNpZnkgdGhhdCB0aGUgY2hkaXIgY2FsbCBtYXkgYmUKICAgICAgICBpbnRlcnJ1cHRlZC4gIFJlcGVhdCB0aGUgY2FsbCB1bnRpbCBpdCBmaW5pc2hlcy4gICovCi0gICAgd2hpbGUgKChjaGRpcihjcC0+UmVhbFdvcmtpbmdEaXJlY3RvcnkpIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkKLSAgICAgIDsKKyAgICB3aGlsZSAoKGNoZGlyKGNwLT5SZWFsV29ya2luZ0RpcmVjdG9yeSkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgfQogICAgIGZyZWUoY3AtPlJlYWxXb3JraW5nRGlyZWN0b3J5KTsKICAgICBjcC0+UmVhbFdvcmtpbmdEaXJlY3RvcnkgPSAwOwogICB9CkBAIC0xMDk5LDIyICsxMTAyLDIyIEBACiAgIGlmICh3ZC5QaXBlSWQpIHsKICAgICAvKiBEYXRhIGFyZSByZWFkeSBvbiBhIHBpcGUuICAqLwogICAgIHJldHVybiB3ZC5QaXBlSWQ7Ci0gIH0gZWxzZSBpZiAod2QuRXhwaXJlZCkgeworICB9CisgIGlmICh3ZC5FeHBpcmVkKSB7CiAgICAgLyogQSB0aW1lb3V0IGhhcyBleHBpcmVkLiAgKi8KICAgICBpZiAod2QuVXNlcikgewogICAgICAgLyogVGhlIHVzZXIgdGltZW91dCBoYXMgZXhwaXJlZC4gIEl0IGhhcyBubyB0aW1lIGxlZnQuICAqLwogICAgICAgcmV0dXJuIGt3c3lzUHJvY2Vzc19QaXBlX1RpbWVvdXQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIFRoZSBwcm9jZXNzIHRpbWVvdXQgaGFzIGV4cGlyZWQuICBLaWxsIHRoZSBjaGlsZHJlbiBub3cuICAqLwotICAgICAga3dzeXNQcm9jZXNzX0tpbGwoY3ApOwotICAgICAgY3AtPktpbGxlZCA9IDA7Ci0gICAgICBjcC0+VGltZW91dEV4cGlyZWQgPSAxOwotICAgICAgcmV0dXJuIGt3c3lzUHJvY2Vzc19QaXBlX05vbmU7CiAgICAgfQotICB9IGVsc2UgewotICAgIC8qIE5vIHBpcGVzIGFyZSBsZWZ0IG9wZW4uICAqLworCisgICAgLyogVGhlIHByb2Nlc3MgdGltZW91dCBoYXMgZXhwaXJlZC4gIEtpbGwgdGhlIGNoaWxkcmVuIG5vdy4gICovCisgICAga3dzeXNQcm9jZXNzX0tpbGwoY3ApOworICAgIGNwLT5LaWxsZWQgPSAwOworICAgIGNwLT5UaW1lb3V0RXhwaXJlZCA9IDE7CiAgICAgcmV0dXJuIGt3c3lzUHJvY2Vzc19QaXBlX05vbmU7CiAgIH0KKyAgLyogTm8gcGlwZXMgYXJlIGxlZnQgb3Blbi4gICovCisgIHJldHVybiBrd3N5c1Byb2Nlc3NfUGlwZV9Ob25lOwogfQogCiBzdGF0aWMgaW50IGt3c3lzUHJvY2Vzc1dhaXRGb3JQaXBlKGt3c3lzUHJvY2VzcyogY3AsIGNoYXIqKiBkYXRhLCBpbnQqIGxlbmd0aCwKQEAgLTExNDQsOCArMTE0Nyw4IEBACiAgICAgICAgICByZWFkIHVudGlsIHRoZSBvcGVyYXRpb24gaXMgbm90IGludGVycnVwdGVkLiAgKi8KICAgICAgIHdoaWxlICgoKG4gPSByZWFkKGNwLT5QaXBlUmVhZEVuZHNbaV0sIGNwLT5QaXBlQnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgS1dTWVNQRV9QSVBFX0JVRkZFUl9TSVpFKSkgPCAwKSAmJgotICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgIDsKKyAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICB9CiAgICAgICBpZiAobiA+IDApIHsKICAgICAgICAgLyogV2UgaGF2ZSBkYXRhIG9uIHRoaXMgcGlwZS4gICovCiAgICAgICAgIGlmIChpID09IEtXU1lTUEVfUElQRV9TSUdOQUwpIHsKQEAgLTExODMsNyArMTE4Niw3IEBACiAKICAgLyogTWFrZSBzdXJlIHRoZSBzZXQgaXMgZW1wdHkgKGl0IHNob3VsZCBhbHdheXMgYmUgZW1wdHkgaGVyZQogICAgICBhbnl3YXkpLiAgKi8KLSAgRkRfWkVSTygmY3AtPlBpcGVTZXQpOworICBGRF9aRVJPKCZjcC0+UGlwZVNldCk7IC8vIE5PTElOVChyZWFkYWJpbGl0eS1pc29sYXRlLWRlY2xhcmF0aW9uKQogCiAgIC8qIFNldHVwIGEgdGltZW91dCBpZiByZXF1aXJlZC4gICovCiAgIGlmICh3ZC0+VGltZW91dFRpbWUudHZfc2VjIDwgMCkgewpAQCAtMTIxOCwxNSArMTIyMSwxNiBAQAogICAvKiBSdW4gc2VsZWN0IHRvIGJsb2NrIHVudGlsIGRhdGEgYXJlIGF2YWlsYWJsZS4gIFJlcGVhdCBjYWxsCiAgICAgIHVudGlsIGl0IGlzIG5vdCBpbnRlcnJ1cHRlZC4gICovCiAgIHdoaWxlICgoKG51bVJlYWR5ID0gc2VsZWN0KG1heCArIDEsICZjcC0+UGlwZVNldCwgMCwgMCwgdGltZW91dCkpIDwgMCkgJiYKLSAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgOworICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICB9CiAKICAgLyogQ2hlY2sgcmVzdWx0IG9mIHNlbGVjdC4gICovCiAgIGlmIChudW1SZWFkeSA9PSAwKSB7CiAgICAgLyogU2VsZWN0J3MgdGltZW91dCBleHBpcmVkLiAgKi8KICAgICB3ZC0+RXhwaXJlZCA9IDE7CiAgICAgcmV0dXJuIDE7Ci0gIH0gZWxzZSBpZiAobnVtUmVhZHkgPCAwKSB7CisgIH0KKyAgaWYgKG51bVJlYWR5IDwgMCkgewogICAgIC8qIFNlbGVjdCByZXR1cm5lZCBhbiBlcnJvci4gIExlYXZlIHRoZSBlcnJvciBkZXNjcmlwdGlvbiBpbiB0aGUKICAgICAgICBwaXBlIGJ1ZmZlci4gICovCiAgICAgc3RybmNweShjcC0+RXJyb3JNZXNzYWdlLCBzdHJlcnJvcihlcnJubyksIEtXU1lTUEVfUElQRV9CVUZGRVJfU0laRSk7CkBAIC0xMzY2LDExICsxMzcwLDEzIEBACiAgICAgICAgIGNwLT5Qcm9jZXNzUmVzdWx0c1twclBpcGVdLlN0YXRlID0ga3dzeXNQcm9jZXNzX1N0YXRlQnlJbmRleF9FeGl0ZWQ7CiAgICAgICAgIGNwLT5Qcm9jZXNzUmVzdWx0c1twclBpcGVdLkV4aXRFeGNlcHRpb24gPSBrd3N5c1Byb2Nlc3NfRXhjZXB0aW9uX05vbmU7CiAgICAgICAgIGNwLT5Qcm9jZXNzUmVzdWx0c1twclBpcGVdLkV4aXRWYWx1ZSA9CisgICAgICAgICAgLy8gTk9MSU5UTkVYVExJTkUoZ29vZ2xlLXJlYWRhYmlsaXR5LWNhc3RpbmcpCiAgICAgICAgICAgKGludClXRVhJVFNUQVRVUyhjcC0+UHJvY2Vzc1Jlc3VsdHNbcHJQaXBlXS5FeGl0Q29kZSk7CiAgICAgICB9IGVsc2UgaWYgKFdJRlNJR05BTEVEKGNwLT5Qcm9jZXNzUmVzdWx0c1twclBpcGVdLkV4aXRDb2RlKSkgewogICAgICAgICAvKiBUaGUgY2hpbGQgcmVjZWl2ZWQgYW4gdW5oYW5kbGVkIHNpZ25hbC4gICovCiAgICAgICAgIGNwLT5Qcm9jZXNzUmVzdWx0c1twclBpcGVdLlN0YXRlID0ga3dzeXNQcm9jZXNzX1N0YXRlX0V4Y2VwdGlvbjsKICAgICAgICAga3dzeXNQcm9jZXNzU2V0RXhpdEV4Y2VwdGlvbkJ5SW5kZXgoCisgICAgICAgICAgLy8gTk9MSU5UTkVYVExJTkUoZ29vZ2xlLXJlYWRhYmlsaXR5LWNhc3RpbmcpCiAgICAgICAgICAgY3AsIChpbnQpV1RFUk1TSUcoY3AtPlByb2Nlc3NSZXN1bHRzW3ByUGlwZV0uRXhpdENvZGUpLCBwclBpcGUpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgLyogRXJyb3IgZ2V0dGluZyB0aGUgY2hpbGQgcmV0dXJuIGNvZGUuICAqLwpAQCAtMTQ0OSw4ICsxNDU1LDggQEAKIAogICAgICAgLyogUmVhcCB0aGUgY2hpbGQuICBLZWVwIHRyeWluZyB1bnRpbCB0aGUgY2FsbCBpcyBub3QKICAgICAgICAgIGludGVycnVwdGVkLiAgKi8KLSAgICAgIHdoaWxlICgod2FpdHBpZChjcC0+Rm9ya1BJRHNbaV0sICZzdGF0dXMsIDApIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkKLSAgICAgICAgOworICAgICAgd2hpbGUgKCh3YWl0cGlkKGNwLT5Gb3JrUElEc1tpXSwgJnN0YXR1cywgMCkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTE1MDEsNyArMTUwNyw3IEBACiAgIGNwLT5QaXBlc0xlZnQgPSAwOwogICBjcC0+Q29tbWFuZHNMZWZ0ID0gMDsKICNpZiBLV1NZU1BFX1VTRV9TRUxFQ1QKLSAgRkRfWkVSTygmY3AtPlBpcGVTZXQpOworICBGRF9aRVJPKCZjcC0+UGlwZVNldCk7IC8vIE5PTElOVChyZWFkYWJpbGl0eS1pc29sYXRlLWRlY2xhcmF0aW9uKQogI2VuZGlmCiAgIGNwLT5TdGF0ZSA9IGt3c3lzUHJvY2Vzc19TdGF0ZV9TdGFydGluZzsKICAgY3AtPktpbGxlZCA9IDA7CkBAIC0xNTkwLDE2ICsxNTk2LDE2IEBACiAgICAgICAgICAgLyogUmVhcCB0aGUgY2hpbGQuICBLZWVwIHRyeWluZyB1bnRpbCB0aGUgY2FsbCBpcyBub3QKICAgICAgICAgICAgICBpbnRlcnJ1cHRlZC4gICovCiAgICAgICAgICAgd2hpbGUgKCh3YWl0cGlkKGNwLT5Gb3JrUElEc1tpXSwgJnN0YXR1cywgMCkgPCAwKSAmJgotICAgICAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICAgICAgOworICAgICAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCiAgICAgLyogUmVzdG9yZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuICAqLwogICAgIGlmIChjcC0+UmVhbFdvcmtpbmdEaXJlY3RvcnkpIHsKLSAgICAgIHdoaWxlICgoY2hkaXIoY3AtPlJlYWxXb3JraW5nRGlyZWN0b3J5KSA8IDApICYmIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgIDsKKyAgICAgIHdoaWxlICgoY2hkaXIoY3AtPlJlYWxXb3JraW5nRGlyZWN0b3J5KSA8IDApICYmIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICAgIH0KICAgICB9CiAgIH0KIApAQCAtMTYzNSw4ICsxNjQxLDggQEAKICAgaWYgKHBmZCAmJiAqcGZkID4gMikgewogICAgIC8qIEtlZXAgdHJ5aW5nIHRvIGNsb3NlIHVudGlsIGl0IGlzIG5vdCBpbnRlcnJ1cHRlZCBieSBhCiAgICAgICogc2lnbmFsLiAgKi8KLSAgICB3aGlsZSAoKGNsb3NlKCpwZmQpIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkKLSAgICAgIDsKKyAgICB3aGlsZSAoKGNsb3NlKCpwZmQpIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkgeworICAgIH0KICAgICAqcGZkID0gLTE7CiAgIH0KIH0KQEAgLTE2NjEsOCArMTY2Nyw4IEBACiAgICAgICAgICAgIHJlYWQgdW50aWwgdGhlIG9wZXJhdGlvbiBpcyBub3QgaW50ZXJydXB0ZWQuICAqLwogICAgICAgICB3aGlsZSAoKHJlYWQoY3AtPlBpcGVSZWFkRW5kc1tpXSwgY3AtPlBpcGVCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBLV1NZU1BFX1BJUEVfQlVGRkVSX1NJWkUpIDwgMCkgJiYKLSAgICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgICAgOworICAgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgICB9CiAgICAgICB9CiAjZW5kaWYKIApAQCAtMTY4OSw3ICsxNjk1LDggQEAKIHN0YXRpYyBpbnQga3dzeXNQcm9jZXNzQ3JlYXRlKGt3c3lzUHJvY2VzcyogY3AsIGludCBwckluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dzeXNQcm9jZXNzQ3JlYXRlSW5mb3JtYXRpb24qIHNpKQogewotICBzaWdzZXRfdCBtYXNrLCBvbGRfbWFzazsKKyAgc2lnc2V0X3QgbWFzazsKKyAgc2lnc2V0X3Qgb2xkX21hc2s7CiAgIGludCBwZ2lkUGlwZVsyXTsKICAgY2hhciB0bXA7CiAgIHNzaXplX3QgcmVhZFJlczsKQEAgLTE4MTcsOCArMTgyNCw4IEBACiAgIC8qIE1ha2Ugc3VyZSB0aGUgY2hpbGQgaXMgaW4gdGhlIHByb2Nlc3MgZ3JvdXAgYmVmb3JlIHdlIHByb2NlZWQuICBUaGlzCiAgICAgIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgd2l0aCBjYWxscyB0byB0aGUga2lsbCBmdW5jdGlvbiB0aGF0IHdlIG1ha2UgZm9yCiAgICAgIHNpZ25hbGxpbmcgcHJvY2VzcyBncm91cHMuICAqLwotICB3aGlsZSAoKHJlYWRSZXMgPSByZWFkKHBnaWRQaXBlWzBdLCAmdG1wLCAxKSkgPiAwKQotICAgIDsKKyAgd2hpbGUgKChyZWFkUmVzID0gcmVhZChwZ2lkUGlwZVswXSwgJnRtcCwgMSkpID4gMCkgeworICB9CiAgIGlmIChyZWFkUmVzIDwgMCkgewogICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb2xkX21hc2ssIDApOwogICAgIGt3c3lzUHJvY2Vzc0NsZWFudXBEZXNjcmlwdG9yKCZzaS0+RXJyb3JQaXBlWzBdKTsKQEAgLTE4NDYsOCArMTg1Myw4IEBACiAgICAgICAvKiBLZWVwIHRyeWluZyB0byByZWFkIHVudGlsIHRoZSBvcGVyYXRpb24gaXMgbm90IGludGVycnVwdGVkLiAgKi8KICAgICAgIHdoaWxlICgoKG4gPSByZWFkKHNpLT5FcnJvclBpcGVbMF0sIGNwLT5FcnJvck1lc3NhZ2UgKyB0b3RhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpKEtXU1lTUEVfUElQRV9CVUZGRVJfU0laRSAtIHRvdGFsKSkpIDwgMCkgJiYKLSAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICA7CisgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgfQogICAgICAgaWYgKG4gPiAwKSB7CiAgICAgICAgIHRvdGFsICs9IG47CiAgICAgICB9CkBAIC0xODcyLDcgKzE4NzksOCBAQAogICBpbnQgaTsKICAgLyogVGVtcG9yYXJpbHkgZGlzYWJsZSBzaWduYWxzIHRoYXQgYWNjZXNzIEZvcmtQSURzLiAgV2UgZG9uJ3Qgd2FudCB0aGVtIHRvCiAgICAgIHJlYWQgYSByZWFwZWQgUElELCBhbmQgd3JpdGVzIHRvIEZvcmtQSURzIGFyZSBub3QgYXRvbWljLiAgKi8KLSAgc2lnc2V0X3QgbWFzaywgb2xkX21hc2s7CisgIHNpZ3NldF90IG1hc2s7CisgIHNpZ3NldF90IG9sZF9tYXNrOwogICBzaWdlbXB0eXNldCgmbWFzayk7CiAgIHNpZ2FkZHNldCgmbWFzaywgU0lHSU5UKTsKICAgc2lnYWRkc2V0KCZtYXNrLCBTSUdURVJNKTsKQEAgLTE4ODUsOCArMTg5Myw4IEBACiAgICAgICBpbnQgcmVzdWx0OwogICAgICAgd2hpbGUgKCgocmVzdWx0ID0gd2FpdHBpZChjcC0+Rm9ya1BJRHNbaV0sICZjcC0+Q29tbWFuZEV4aXRDb2Rlc1tpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV05PSEFORykpIDwgMCkgJiYKLSAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICA7CisgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgfQogICAgICAgaWYgKHJlc3VsdCA+IDApIHsKICAgICAgICAgLyogVGhpcyBjaGlsZCBoYXMgdGVybWlhbnRlZC4gICovCiAgICAgICAgIGNwLT5Gb3JrUElEc1tpXSA9IDA7CkBAIC0xOTU5LDcgKzE5NjcsOCBAQAogCiAvKiBHZXQgdGhlIHRpbWUgYXQgd2hpY2ggZWl0aGVyIHRoZSBwcm9jZXNzIG9yIHVzZXIgdGltZW91dCB3aWxsCiAgICBleHBpcmUuICBSZXR1cm5zIDEgaWYgdGhlIHVzZXIgdGltZW91dCBpcyBmaXJzdCwgYW5kIDAgb3RoZXJ3aXNlLiAgKi8KLXN0YXRpYyBpbnQga3dzeXNQcm9jZXNzR2V0VGltZW91dFRpbWUoa3dzeXNQcm9jZXNzKiBjcCwgZG91YmxlKiB1c2VyVGltZW91dCwKK3N0YXRpYyBpbnQga3dzeXNQcm9jZXNzR2V0VGltZW91dFRpbWUoa3dzeXNQcm9jZXNzKiBjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlKiB1c2VyVGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dzeXNQcm9jZXNzVGltZSogdGltZW91dFRpbWUpCiB7CiAgIC8qIFRoZSBmaXJzdCB0aW1lIHRoaXMgaXMgY2FsbGVkLCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgdGltZSBhdApAQCAtMTk5MSwzNSArMjAwMCwzMyBAQAogLyogR2V0IHRoZSBsZW5ndGggb2YgdGltZSBiZWZvcmUgdGhlIGdpdmVuIHRpbWVvdXQgdGltZSBhcnJpdmVzLgogICAgUmV0dXJucyAxIGlmIHRoZSB0aW1lIGhhcyBhbHJlYWR5IGFycml2ZWQsIGFuZCAwIG90aGVyd2lzZS4gICovCiBzdGF0aWMgaW50IGt3c3lzUHJvY2Vzc0dldFRpbWVvdXRMZWZ0KGt3c3lzUHJvY2Vzc1RpbWUqIHRpbWVvdXRUaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUqIHVzZXJUaW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUqIHVzZXJUaW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NUaW1lTmF0aXZlKiB0aW1lb3V0TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgemVyb0lzRXhwaXJlZCkKIHsKICAgaWYgKHRpbWVvdXRUaW1lLT50dl9zZWMgPCAwKSB7CiAgICAgLyogTm8gdGltZW91dCB0aW1lIGhhcyBiZWVuIHJlcXVlc3RlZC4gICovCiAgICAgcmV0dXJuIDA7Ci0gIH0gZWxzZSB7Ci0gICAgLyogQ2FsY3VsYXRlIHRoZSByZW1haW5pbmcgdGltZS4gICovCi0gICAga3dzeXNQcm9jZXNzVGltZSBjdXJyZW50VGltZSA9IGt3c3lzUHJvY2Vzc1RpbWVHZXRDdXJyZW50KCk7Ci0gICAga3dzeXNQcm9jZXNzVGltZSB0aW1lTGVmdCA9Ci0gICAgICBrd3N5c1Byb2Nlc3NUaW1lU3VidHJhY3QoKnRpbWVvdXRUaW1lLCBjdXJyZW50VGltZSk7Ci0gICAgaWYgKHRpbWVMZWZ0LnR2X3NlYyA8IDAgJiYgdXNlclRpbWVvdXQgJiYgKnVzZXJUaW1lb3V0IDw9IDApIHsKLSAgICAgIC8qIENhbGxlciBoYXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgYSB6ZXJvIHRpbWVvdXQuICAqLwotICAgICAgdGltZUxlZnQudHZfc2VjID0gMDsKLSAgICAgIHRpbWVMZWZ0LnR2X3VzZWMgPSAwOwotICAgIH0KLQotICAgIGlmICh0aW1lTGVmdC50dl9zZWMgPCAwIHx8Ci0gICAgICAgICh0aW1lTGVmdC50dl9zZWMgPT0gMCAmJiB0aW1lTGVmdC50dl91c2VjID09IDAgJiYgemVyb0lzRXhwaXJlZCkpIHsKLSAgICAgIC8qIFRpbWVvdXQgaGFzIGFscmVhZHkgZXhwaXJlZC4gICovCi0gICAgICByZXR1cm4gMTsKLSAgICB9IGVsc2UgewotICAgICAgLyogVGhlcmUgaXMgc29tZSB0aW1lIGxlZnQuICAqLwotICAgICAgdGltZW91dExlbmd0aC0+dHZfc2VjID0gdGltZUxlZnQudHZfc2VjOwotICAgICAgdGltZW91dExlbmd0aC0+dHZfdXNlYyA9IHRpbWVMZWZ0LnR2X3VzZWM7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9CiAgIH0KKyAgLyogQ2FsY3VsYXRlIHRoZSByZW1haW5pbmcgdGltZS4gICovCisgIGt3c3lzUHJvY2Vzc1RpbWUgY3VycmVudFRpbWUgPSBrd3N5c1Byb2Nlc3NUaW1lR2V0Q3VycmVudCgpOworICBrd3N5c1Byb2Nlc3NUaW1lIHRpbWVMZWZ0ID0KKyAgICBrd3N5c1Byb2Nlc3NUaW1lU3VidHJhY3QoKnRpbWVvdXRUaW1lLCBjdXJyZW50VGltZSk7CisgIGlmICh0aW1lTGVmdC50dl9zZWMgPCAwICYmIHVzZXJUaW1lb3V0ICYmICp1c2VyVGltZW91dCA8PSAwKSB7CisgICAgLyogQ2FsbGVyIGhhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCBhIHplcm8gdGltZW91dC4gICovCisgICAgdGltZUxlZnQudHZfc2VjID0gMDsKKyAgICB0aW1lTGVmdC50dl91c2VjID0gMDsKKyAgfQorCisgIGlmICh0aW1lTGVmdC50dl9zZWMgPCAwIHx8CisgICAgICAodGltZUxlZnQudHZfc2VjID09IDAgJiYgdGltZUxlZnQudHZfdXNlYyA9PSAwICYmIHplcm9Jc0V4cGlyZWQpKSB7CisgICAgLyogVGltZW91dCBoYXMgYWxyZWFkeSBleHBpcmVkLiAgKi8KKyAgICByZXR1cm4gMTsKKyAgfQorICAvKiBUaGVyZSBpcyBzb21lIHRpbWUgbGVmdC4gICovCisgIHRpbWVvdXRMZW5ndGgtPnR2X3NlYyA9IHRpbWVMZWZ0LnR2X3NlYzsKKyAgdGltZW91dExlbmd0aC0+dHZfdXNlYyA9IHRpbWVMZWZ0LnR2X3VzZWM7CisgIHJldHVybiAwOwogfQogCiBzdGF0aWMga3dzeXNQcm9jZXNzVGltZSBrd3N5c1Byb2Nlc3NUaW1lR2V0Q3VycmVudCh2b2lkKQpAQCAtMjEyMSwxNyArMjEyOCwxNyBAQAogI2VuZGlmCiAjaWZkZWYgU0lHQUJSVAogICAgIGNhc2UgU0lHQUJSVDoKLSAgICAgIEtXU1lTUEVfQ0FTRShPdGhlciwgIkNoaWxkIGFib3J0ZWQiKTsKKyAgICAgIEtXU1lTUEVfQ0FTRShPdGhlciwgIlN1YnByb2Nlc3MgYWJvcnRlZCIpOwogICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBTSUdLSUxMCiAgICAgY2FzZSBTSUdLSUxMOgotICAgICAgS1dTWVNQRV9DQVNFKE90aGVyLCAiQ2hpbGQga2lsbGVkIik7CisgICAgICBLV1NZU1BFX0NBU0UoT3RoZXIsICJTdWJwcm9jZXNzIGtpbGxlZCIpOwogICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBTSUdURVJNCiAgICAgY2FzZSBTSUdURVJNOgotICAgICAgS1dTWVNQRV9DQVNFKE90aGVyLCAiQ2hpbGQgdGVybWluYXRlZCIpOworICAgICAgS1dTWVNQRV9DQVNFKE90aGVyLCAiU3VicHJvY2VzcyB0ZXJtaW5hdGVkIik7CiAgICAgICBicmVhazsKICNlbmRpZgogI2lmZGVmIFNJR0hVUApAQCAtMjQyNCw0MSArMjQzMSwzOSBAQAogICAgIGlmIChtaWRkbGVfcGlkIDwgMCkgewogICAgICAgLyogRm9yayBmYWlsZWQuICBSZXR1cm4gYXMgaWYgd2Ugd2VyZSBub3QgZGV0YWNoaW5nLiAgKi8KICAgICAgIHJldHVybiBtaWRkbGVfcGlkOwotICAgIH0gZWxzZSBpZiAobWlkZGxlX3BpZCA9PSAwKSB7CisgICAgfQorICAgIGlmIChtaWRkbGVfcGlkID09IDApIHsKICAgICAgIC8qIFRoaXMgaXMgdGhlIGludGVybWVkaWF0ZSBwcm9jZXNzLiAgQ3JlYXRlIHRoZSByZWFsIGNoaWxkLiAgKi8KICAgICAgIHBpZF90IGNoaWxkX3BpZCA9IGZvcmsoKTsKICAgICAgIGlmIChjaGlsZF9waWQgPT0gMCkgewogICAgICAgICAvKiBUaGlzIGlzIHRoZSByZWFsIGNoaWxkIHByb2Nlc3MuICBUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuICAqLwogICAgICAgICByZXR1cm4gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIFVzZSB0aGUgZXJyb3IgcGlwZSB0byByZXBvcnQgdGhlIHBpZCB0byB0aGUgcmVhbCBwYXJlbnQuICAqLwotICAgICAgICB3aGlsZSAoKHdyaXRlKHNpLT5FcnJvclBpcGVbMV0sICZjaGlsZF9waWQsIHNpemVvZihjaGlsZF9waWQpKSA8IDApICYmCi0gICAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICAgIDsKLQotICAgICAgICAvKiBFeGl0IHdpdGhvdXQgY2xlYW51cC4gIFRoZSBwYXJlbnQgaG9sZHMgYWxsIHJlc291cmNlcy4gICovCi0gICAgICAgIGt3c3lzUHJvY2Vzc0V4aXQoKTsKLSAgICAgICAgcmV0dXJuIDA7IC8qIE5ldmVyIHJlYWNoZWQsIGJ1dCBhdm9pZHMgU3VuQ0Mgd2FybmluZy4gICovCiAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIFRoaXMgaXMgdGhlIG9yaWdpbmFsIHBhcmVudCBwcm9jZXNzLiAgVGhlIGludGVybWVkaWF0ZQotICAgICAgICAgcHJvY2VzcyB3aWxsIHVzZSB0aGUgZXJyb3IgcGlwZSB0byByZXBvcnQgdGhlIHBpZCBvZiB0aGUKLSAgICAgICAgIGRldGFjaGVkIGNoaWxkLiAgKi8KLSAgICAgIHBpZF90IGNoaWxkX3BpZDsKLSAgICAgIGludCBzdGF0dXM7Ci0gICAgICB3aGlsZSAoKHJlYWQoc2ktPkVycm9yUGlwZVswXSwgJmNoaWxkX3BpZCwgc2l6ZW9mKGNoaWxkX3BpZCkpIDwgMCkgJiYKLSAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICA7CisgICAgICAvKiBVc2UgdGhlIGVycm9yIHBpcGUgdG8gcmVwb3J0IHRoZSBwaWQgdG8gdGhlIHJlYWwgcGFyZW50LiAgKi8KKyAgICAgIHdoaWxlICgod3JpdGUoc2ktPkVycm9yUGlwZVsxXSwgJmNoaWxkX3BpZCwgc2l6ZW9mKGNoaWxkX3BpZCkpIDwgMCkgJiYKKyAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICB9CiAKLSAgICAgIC8qIFdhaXQgZm9yIHRoZSBpbnRlcm1lZGlhdGUgcHJvY2VzcyB0byBleGl0IGFuZCBjbGVhbiBpdCB1cC4gICovCi0gICAgICB3aGlsZSAoKHdhaXRwaWQobWlkZGxlX3BpZCwgJnN0YXR1cywgMCkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICA7Ci0gICAgICByZXR1cm4gY2hpbGRfcGlkOworICAgICAgLyogRXhpdCB3aXRob3V0IGNsZWFudXAuICBUaGUgcGFyZW50IGhvbGRzIGFsbCByZXNvdXJjZXMuICAqLworICAgICAga3dzeXNQcm9jZXNzRXhpdCgpOworICAgICAgcmV0dXJuIDA7IC8qIE5ldmVyIHJlYWNoZWQsIGJ1dCBhdm9pZHMgU3VuQ0Mgd2FybmluZy4gICovCiAgICAgfQotICB9IGVsc2UgewotICAgIC8qIE5vdCBjcmVhdGluZyBhIGRldGFjaGVkIHByb2Nlc3MuICBVc2Ugbm9ybWFsIGZvcmsuICAqLwotICAgIHJldHVybiBmb3JrKCk7CisgICAgLyogVGhpcyBpcyB0aGUgb3JpZ2luYWwgcGFyZW50IHByb2Nlc3MuICBUaGUgaW50ZXJtZWRpYXRlCisgICAgICAgIHByb2Nlc3Mgd2lsbCB1c2UgdGhlIGVycm9yIHBpcGUgdG8gcmVwb3J0IHRoZSBwaWQgb2YgdGhlCisgICAgICAgIGRldGFjaGVkIGNoaWxkLiAgKi8KKyAgICBwaWRfdCBjaGlsZF9waWQ7CisgICAgaW50IHN0YXR1czsKKyAgICB3aGlsZSAoKHJlYWQoc2ktPkVycm9yUGlwZVswXSwgJmNoaWxkX3BpZCwgc2l6ZW9mKGNoaWxkX3BpZCkpIDwgMCkgJiYKKyAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgIH0KKworICAgIC8qIFdhaXQgZm9yIHRoZSBpbnRlcm1lZGlhdGUgcHJvY2VzcyB0byBleGl0IGFuZCBjbGVhbiBpdCB1cC4gICovCisgICAgd2hpbGUgKCh3YWl0cGlkKG1pZGRsZV9waWQsICZzdGF0dXMsIDApIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkgeworICAgIH0KKyAgICByZXR1cm4gY2hpbGRfcGlkOwogICB9CisgIC8qIE5vdCBjcmVhdGluZyBhIGRldGFjaGVkIHByb2Nlc3MuICBVc2Ugbm9ybWFsIGZvcmsuICAqLworICByZXR1cm4gZm9yaygpOwogfQogI2VuZGlmCiAKQEAgLTI1NjMsNyArMjU2OCw4IEBACiAgICAgLyogTWFrZSBzdXJlIHRoZSBwcm9jZXNzIHN0YXJ0ZWQgYW5kIHByb3ZpZGVkIGEgdmFsaWQgaGVhZGVyLiAgKi8KICAgICBpZiAocHMgJiYgZnNjYW5mKHBzLCAiJSpbXlxuXVxuIikgIT0gRU9GKSB7CiAgICAgICAvKiBMb29rIGZvciBwcm9jZXNzZXMgd2hvc2UgcGFyZW50IGlzIHRoZSBwcm9jZXNzIGJlaW5nIGtpbGxlZC4gICovCi0gICAgICBpbnQgcGlkLCBwcGlkOworICAgICAgaW50IHBpZDsKKyAgICAgIGludCBwcGlkOwogICAgICAgd2hpbGUgKGZzY2FuZihwcywgS1dTWVNQRV9QU19GT1JNQVQsICZwaWQsICZwcGlkKSA9PSAyKSB7CiAgICAgICAgIGlmIChwcGlkID09IHByb2Nlc3NfaWQpIHsKICAgICAgICAgICAvKiBSZWN1cnNpdmVseSBraWxsIHRoaXMgY2hpbGQgYW5kIGl0cyBjaGlsZHJlbi4gICovCkBAIC0yNzI1LDggKzI3MzEsOCBAQAogICAgICAgc2lnZW1wdHlzZXQoJm5ld1NpZ0FjdGlvbi5zYV9tYXNrKTsKICAgICAgIHdoaWxlICgoc2lnYWN0aW9uKFNJR0NITEQsICZuZXdTaWdBY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAma3dzeXNQcm9jZXNzZXNPbGRTaWdDaGxkQWN0aW9uKSA8IDApICYmCi0gICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkKLSAgICAgICAgOworICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICAgIH0KIAogICAgICAgLyogSW5zdGFsbCBvdXIgaGFuZGxlciBmb3IgU0lHSU5UIC8gU0lHVEVSTS4gIFJlcGVhdCBjYWxsIHVudGlsCiAgICAgICAgICBpdCBpcyBub3QgaW50ZXJydXB0ZWQuICAqLwpAQCAtMjczNCwxNSArMjc0MCwxNSBAQAogICAgICAgc2lnYWRkc2V0KCZuZXdTaWdBY3Rpb24uc2FfbWFzaywgU0lHVEVSTSk7CiAgICAgICB3aGlsZSAoKHNpZ2FjdGlvbihTSUdJTlQsICZuZXdTaWdBY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAma3dzeXNQcm9jZXNzZXNPbGRTaWdJbnRBY3Rpb24pIDwgMCkgJiYKLSAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICA7CisgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgfQogCiAgICAgICBzaWdlbXB0eXNldCgmbmV3U2lnQWN0aW9uLnNhX21hc2spOwogICAgICAgc2lnYWRkc2V0KCZuZXdTaWdBY3Rpb24uc2FfbWFzaywgU0lHSU5UKTsKICAgICAgIHdoaWxlICgoc2lnYWN0aW9uKFNJR1RFUk0sICZuZXdTaWdBY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAma3dzeXNQcm9jZXNzZXNPbGRTaWdJbnRBY3Rpb24pIDwgMCkgJiYKLSAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICA7CisgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0yNzczLDE0ICsyNzc5LDE0IEBACiAgICAgICAgIC8qIFJlc3RvcmUgdGhlIHNpZ25hbCBoYW5kbGVycy4gIFJlcGVhdCBjYWxsIHVudGlsIGl0IGlzIG5vdAogICAgICAgICAgICBpbnRlcnJ1cHRlZC4gICovCiAgICAgICAgIHdoaWxlICgoc2lnYWN0aW9uKFNJR0NITEQsICZrd3N5c1Byb2Nlc3Nlc09sZFNpZ0NobGRBY3Rpb24sIDApIDwgMCkgJiYKLSAgICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpCi0gICAgICAgICAgOworICAgICAgICAgICAgICAgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgICB9CiAgICAgICAgIHdoaWxlICgoc2lnYWN0aW9uKFNJR0lOVCwgJmt3c3lzUHJvY2Vzc2VzT2xkU2lnSW50QWN0aW9uLCAwKSA8IDApICYmCi0gICAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICAgIDsKKyAgICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICAgICAgfQogICAgICAgICB3aGlsZSAoKHNpZ2FjdGlvbihTSUdURVJNLCAma3dzeXNQcm9jZXNzZXNPbGRTaWdUZXJtQWN0aW9uLCAwKSA8IDApICYmCi0gICAgICAgICAgICAgICAoZXJybm8gPT0gRUlOVFIpKQotICAgICAgICAgIDsKKyAgICAgICAgICAgICAgIChlcnJubyA9PSBFSU5UUikpIHsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIEZyZWUgdGhlIHRhYmxlIG9mIHByb2Nlc3MgcG9pbnRlcnMgc2luY2UgaXQgaXMgbm93IGVtcHR5LgogICAgICAgICAgICBUaGlzIGlzIHNhZmUgYmVjYXVzZSB0aGUgc2lnbmFsIGhhbmRsZXIgaGFzIGJlZW4gcmVtb3ZlZC4gICovCkBAIC0yODA2LDcgKzI4MTIsMTAgQEAKICNlbmRpZgogKQogewotICBpbnQgaSwgaiwgcHJvY1N0YXR1cywgb2xkX2Vycm5vID0gZXJybm87CisgIGludCBpOworICBpbnQgajsKKyAgaW50IHByb2NTdGF0dXM7CisgIGludCBvbGRfZXJybm8gPSBlcnJubzsKICNpZiBLV1NZU1BFX1VTRV9TSUdJTkZPCiAgICh2b2lkKWluZm87CiAgICh2b2lkKXVjb250ZXh0OwpAQCAtMjg2Myw4ICsyODcyLDggQEAKICAgICAgICAgbWVtc2V0KCZkZWZTaWdBY3Rpb24sIDAsIHNpemVvZihkZWZTaWdBY3Rpb24pKTsKICAgICAgICAgZGVmU2lnQWN0aW9uLnNhX2hhbmRsZXIgPSBTSUdfREZMOwogICAgICAgICBzaWdlbXB0eXNldCgmZGVmU2lnQWN0aW9uLnNhX21hc2spOwotICAgICAgICB3aGlsZSAoKHNpZ2FjdGlvbihzaWdudW0sICZkZWZTaWdBY3Rpb24sIDApIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkKLSAgICAgICAgICA7CisgICAgICAgIHdoaWxlICgoc2lnYWN0aW9uKHNpZ251bSwgJmRlZlNpZ0FjdGlvbiwgMCkgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICAgIH0KICAgICAgICAgLyogVW5tYXNrIHRoZSBzaWduYWwuICAqLwogICAgICAgICBzaWdlbXB0eXNldCgmdW5ibG9ja1NldCk7CiAgICAgICAgIHNpZ2FkZHNldCgmdW5ibG9ja1NldCwgc2lnbnVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9Qcm9jZXNzV2luMzIuYyBiL1NvdXJjZS9rd3N5cy9Qcm9jZXNzV2luMzIuYwppbmRleCA2OGM1MjE4Li4xMjY3MDc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvUHJvY2Vzc1dpbjMyLmMKKysrIGIvU291cmNlL2t3c3lzL1Byb2Nlc3NXaW4zMi5jCkBAIC0zMSw5ICszMSw2IEBACiAjaW5jbHVkZSA8aW8uaD4gICAgIC8qIF91bmxpbmsgKi8KICNpbmNsdWRlIDxzdGRpby5oPiAgLyogc3ByaW50ZiAqLwogI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBzdHJsZW4sIHN0cmR1cCAqLwotI2lmZGVmIF9fV0FUQ09NQ19fCi0jICBkZWZpbmUgX3VubGluayB1bmxpbmsKLSNlbmRpZgogCiAjaWZuZGVmIF9NQVhfRk5BTUUKICMgIGRlZmluZSBfTUFYX0ZOQU1FIDQwOTYKQEAgLTQ4LDExICs0NSw2IEBACiAjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDcwNikKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0jICBwcmFnbWEgd2FybiAtIDgwMDQgLyogYXNzaWduZWQgYSB2YWx1ZSB0aGF0IGlzIG5ldmVyIHVzZWQgICovCi0jICBwcmFnbWEgd2FybiAtIDgwNjAgLyogQXNzaWdubWVudCBpbnNpZGUgaWYoKSBjb25kaXRpb24uICAqLwotI2VuZGlmCi0KIC8qIFRoZXJlIGFyZSBwaXBlcyBmb3IgdGhlIHByb2Nlc3MgcGlwZWxpbmUncyBzdGRvdXQgYW5kIHN0ZGVyci4gICovCiAjZGVmaW5lIEtXU1lTUEVfUElQRV9DT1VOVCAyCiAjZGVmaW5lIEtXU1lTUEVfUElQRV9TVERPVVQgMApAQCAtNzYxLDcgKzc1Myw3IEBACiAgIH0KIH0KIAotdm9pZCBrd3N5c1Byb2Nlc3NfU2V0UGlwZU5hdGl2ZShrd3N5c1Byb2Nlc3MqIGNwLCBpbnQgcGlwZSwgSEFORExFIHBbMl0pCit2b2lkIGt3c3lzUHJvY2Vzc19TZXRQaXBlTmF0aXZlKGt3c3lzUHJvY2VzcyogY3AsIGludCBwaXBlLCBjb25zdCBIQU5ETEUgcFsyXSkKIHsKICAgSEFORExFKiBwUGlwZU5hdGl2ZSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9SZWd1bGFyRXhwcmVzc2lvbi5jeHggYi9Tb3VyY2Uva3dzeXMvUmVndWxhckV4cHJlc3Npb24uY3h4CmluZGV4IDVlNmY4ZGEuLjRmNzRlYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9SZWd1bGFyRXhwcmVzc2lvbi5jeHgKKysrIGIvU291cmNlL2t3c3lzL1JlZ3VsYXJFeHByZXNzaW9uLmN4eApAQCAtMjgsOCArMjgsOCBAQAogIyAgaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaHh4LmluIgogI2VuZGlmCiAKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RyaW5nPgogCiBuYW1lc3BhY2UgS1dTWVNfTkFNRVNQQUNFIHsKIApAQCAtMzY3LDggKzM2Nyw3IEBACiAKICAgLy8gQWxsb2NhdGUgc3BhY2UuCiAgIC8vI2lmbmRlZiBfV0lOMzIKLSAgaWYgKHRoaXMtPnByb2dyYW0gIT0gbnVsbHB0cikKLSAgICBkZWxldGVbXSB0aGlzLT5wcm9ncmFtOworICBkZWxldGVbXSB0aGlzLT5wcm9ncmFtOwogICAvLyNlbmRpZgogICB0aGlzLT5wcm9ncmFtID0gbmV3IGNoYXJbY29tcC5yZWdzaXplXTsKICAgdGhpcy0+cHJvZ3NpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbXAucmVnc2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvUmVndWxhckV4cHJlc3Npb24uaHh4LmluIGIvU291cmNlL2t3c3lzL1JlZ3VsYXJFeHByZXNzaW9uLmh4eC5pbgppbmRleCBkZjdlYjQ1Li4yNzA5Y2RlIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvUmVndWxhckV4cHJlc3Npb24uaHh4LmluCisrKyBiL1NvdXJjZS9rd3N5cy9SZWd1bGFyRXhwcmVzc2lvbi5oeHguaW4KQEAgLTI2LDEyICsyNiw2IEBACiAKICNpbmNsdWRlIDxzdHJpbmc+CiAKLS8qIERpc2FibGUgdXNlbGVzcyBCb3JsYW5kIHdhcm5pbmdzLiAgS1dTeXMgdHJpZXMgbm90IHRvIGZvcmNlIHRoaW5ncwotICAgb24gaXRzIGluY2x1ZGVycywgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBoZXJlLiAgKi8KLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgIHByYWdtYSB3YXJuIC0gODAyNyAvKiBmdW5jdGlvbiBub3QgaW5saW5lZC4gICovCi0jZW5kaWYKLQogbmFtZXNwYWNlIEBLV1NZU19OQU1FU1BBQ0VAIHsKIAogLy8gRm9yd2FyZCBkZWNsYXJhdGlvbgpAQCAtNjYsMTYgKzYwLDI3IEBACiAgIGNvbnN0IGNoYXIqIHNlYXJjaHN0cmluZzsKIH07CiAKKyNpZmRlZiBfTVNDX1ZFUgorIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgIGlmIF9NU0NfVkVSIDwgMTkwMAorIyAgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDM1MSkgLyogbmV3IGJlaGF2aW9yICovCisjICBlbmRpZgorI2VuZGlmCisKIC8qKgogICogXGJyaWVmIENyZWF0ZXMgYW4gaW52YWxpZCBtYXRjaCBvYmplY3QKICAqLwogaW5saW5lIFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2g6OlJlZ3VsYXJFeHByZXNzaW9uTWF0Y2goKQorICA6IHN0YXJ0cHt9CisgICwgZW5kcHt9CisgICwgc2VhcmNoc3RyaW5ne30KIHsKLSAgc3RhcnRwWzBdID0gbnVsbHB0cjsKLSAgZW5kcFswXSA9IG51bGxwdHI7Ci0gIHNlYXJjaHN0cmluZyA9IG51bGxwdHI7CiB9CiAKKyNpZmRlZiBfTVNDX1ZFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisKIC8qKgogICogXGJyaWVmIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWF0Y2ggcG9pbnRlcnMgYXJlIHZhbGlkCiAgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9TaGFyZWRGb3J3YXJkLmguaW4gYi9Tb3VyY2Uva3dzeXMvU2hhcmVkRm9yd2FyZC5oLmluCmluZGV4IDU3MTZjZDQuLjA5MTMzNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9TaGFyZWRGb3J3YXJkLmguaW4KKysrIGIvU291cmNlL2t3c3lzL1NoYXJlZEZvcndhcmQuaC5pbgpAQCAtNjYsMTIgKzY2LDYgQEAKICMgICAgZW5kaWYKICMgIGVuZGlmCiAKLSMgIGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKLS8qIENvZGUgaGFzIG5vIGVmZmVjdDsgcmFpc2VkIGJ5IHdpbm50LmggaW4gQyAobm90IEMrKykgd2hlbiBpZ25vcmluZyBhbgotICAgdW51c2VkIHBhcmFtZXRlciB1c2luZyAiKHBhcmFtKSIgc3ludGF4IChpLmUuIG5vIGNhc3QgdG8gdm9pZCkuICAqLwotIyAgICBwcmFnbWEgd2FybiAtIDgwMTkKLSMgIGVuZGlmCi0KIC8qIEZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoaXMgZXhlY3V0YWJsZSBpcyBidWlsdC4gIERvCiAgICBub3QgaW5jbHVkZSBhIHRyYWlsaW5nIHNsYXNoLiAgKi8KICMgIGlmICFkZWZpbmVkKEBLV1NZU19OQU1FU1BBQ0VAX1NIQVJFRF9GT1JXQVJEX0RJUl9CVUlMRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9TdHJpbmcuaHh4LmluIGIvU291cmNlL2t3c3lzL1N0cmluZy5oeHguaW4KaW5kZXggZGIxY2YyMi4uYzM2ZjRjZSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1N0cmluZy5oeHguaW4KKysrIGIvU291cmNlL2t3c3lzL1N0cmluZy5oeHguaW4KQEAgLTUyLDE0ICs1Miw2IEBACiAgIH0KIH07IC8vIEVuZCBDbGFzczogU3RyaW5nCiAKLSNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KFN0cmluZyBjb25zdCYgbCwgU3RyaW5nIGNvbnN0JiByKQotewotICByZXR1cm4gKHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nIGNvbnN0Jj4obCkgPAotICAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nIGNvbnN0Jj4ocikpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIEBLV1NZU19OQU1FU1BBQ0VACiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1N5c3RlbS5jIGIvU291cmNlL2t3c3lzL1N5c3RlbS5jCmluZGV4IGQ0M2NjNmYuLmRiZmQyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9TeXN0ZW0uYworKysgYi9Tb3VyY2Uva3dzeXMvU3lzdGVtLmMKQEAgLTIyLDcgKzIyLDcgQEAKIHR5cGVkZWYgaW50IGt3c3lzU3lzdGVtX3B0cmRpZmZfdDsKICNlbmRpZgogCi1zdGF0aWMgaW50IGt3c3lzU3lzdGVtX19BcHBlbmRCeXRlKGNoYXIqIGxvY2FsLCBjaGFyKiogYmVnaW4sIGNoYXIqKiBlbmQsCitzdGF0aWMgaW50IGt3c3lzU3lzdGVtX19BcHBlbmRCeXRlKGNvbnN0IGNoYXIqIGxvY2FsLCBjaGFyKiogYmVnaW4sIGNoYXIqKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc2l6ZSwgY2hhciBjKQogewogICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGNoYXJhY3Rlci4gICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvU3lzdGVtSW5mb3JtYXRpb24uY3h4IGIvU291cmNlL2t3c3lzL1N5c3RlbUluZm9ybWF0aW9uLmN4eAppbmRleCA2ZWM2ZTQ4Li45YzM0YTU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvU3lzdGVtSW5mb3JtYXRpb24uY3h4CisrKyBiL1NvdXJjZS9rd3N5cy9TeXN0ZW1JbmZvcm1hdGlvbi5jeHgKQEAgLTY0LDkgKzY0LDkgQEAKICNlbHNlCiAjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotIyAgaW5jbHVkZSA8ZXJybm8uaD4gLy8gZXh0ZXJuIGludCBlcnJubzsKKyMgIGluY2x1ZGUgPGNlcnJubz4gLy8gZXh0ZXJuIGludCBlcnJubzsKKyMgIGluY2x1ZGUgPGNzaWduYWw+CiAjICBpbmNsdWRlIDxmY250bC5oPgotIyAgaW5jbHVkZSA8c2lnbmFsLmg+CiAjICBpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4gLy8gZ2V0cmxpbWl0CiAjICBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyAgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4gLy8gaW50IHVuYW1lKHN0cnVjdCB1dHNuYW1lICpidWYpOwpAQCAtMTMyLDcgKzEzMiw3IEBACiAjICAgIGVuZGlmCiAjICBlbmRpZgogIyAgaWYgZGVmaW5lZChLV1NZU19DWFhfSEFTX1JMSU1JVDY0KQotdHlwZWRlZiBzdHJ1Y3QgcmxpbWl0NjQgUmVzb3VyY2VMaW1pdFR5cGU7Cit1c2luZyBSZXNvdXJjZUxpbWl0VHlwZSA9IHN0cnVjdCBybGltaXQ2NDsKICMgICAgZGVmaW5lIEdldFJlc291cmNlTGltaXQgZ2V0cmxpbWl0NjQKICMgIGVsc2UKIHR5cGVkZWYgc3RydWN0IHJsaW1pdCBSZXNvdXJjZUxpbWl0VHlwZTsKQEAgLTE2MywzOSArMTYzLDExIEBACiAjICB1bmRlZiBLV1NZU19TWVNURU1JTkZPUk1BVElPTl9IQVNfU1lNQk9MX0xPT0tVUAogI2VuZGlmCiAKLSNpbmNsdWRlIDxjdHlwZS5oPiAvLyBpbnQgaXNkaWdpdChpbnQgYyk7CisjaW5jbHVkZSA8Y2N0eXBlPiAvLyBpbnQgaXNkaWdpdChpbnQgYyk7CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxtZW1vcnkuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgZGVmaW5lZChLV1NZU19VU0VfTE9OR19MT05HKQotIyAgaWYgZGVmaW5lZChLV1NZU19JT1NfSEFTX09TVFJFQU1fTE9OR19MT05HKQotIyAgICBkZWZpbmUgaW9zdHJlYW1Mb25nTG9uZyh4KSAoeCkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIGlvc3RyZWFtTG9uZ0xvbmcoeCkgKChsb25nKSh4KSkKLSMgIGVuZGlmCi0jZWxpZiBkZWZpbmVkKEtXU1lTX1VTRV9fX0lOVDY0KQotIyAgaWYgZGVmaW5lZChLV1NZU19JT1NfSEFTX09TVFJFQU1fX19JTlQ2NCkKLSMgICAgZGVmaW5lIGlvc3RyZWFtTG9uZ0xvbmcoeCkgKHgpCi0jICBlbHNlCi0jICAgIGRlZmluZSBpb3N0cmVhbUxvbmdMb25nKHgpICgobG9uZykoeCkpCi0jICBlbmRpZgotI2Vsc2UKLSMgIGVycm9yICJObyBMb25nIExvbmciCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoS1dTWVNfQ1hYX0hBU19BVE9MTCkKLSMgIGRlZmluZSBhdG9Mb25nTG9uZyBhdG9sbAotI2Vsc2UKLSMgIGlmIGRlZmluZWQoS1dTWVNfQ1hYX0hBU19fQVRPSTY0KQotIyAgICBkZWZpbmUgYXRvTG9uZ0xvbmcgX2F0b2k2NAotIyAgZWxpZiBkZWZpbmVkKEtXU1lTX0NYWF9IQVNfQVRPTCkKLSMgICAgZGVmaW5lIGF0b0xvbmdMb25nIGF0b2wKLSMgIGVsc2UKLSMgICAgZGVmaW5lIGF0b0xvbmdMb25nIGF0b2kKLSMgIGVuZGlmCi0jZW5kaWYKIAogI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxMzAwKSAmJiAhZGVmaW5lZChfV0lONjQpICYmICAgICAgICAgICAgXAogICAhZGVmaW5lZChfX2NsYW5nX18pCkBAIC0yMDQsMTUgKzE3NiwxNSBAQAogIyAgZGVmaW5lIFVTRV9BU01fSU5TVFJVQ1RJT05TIDAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApICYmICFkZWZpbmVkKF9fY2xhbmdfXykKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkgJiYgIWRlZmluZWQoX19jbGFuZ19fKSAmJiAgICAgICAgIFwKKyAgIWRlZmluZWQoX01fQVJNNjQpCiAjICBpbmNsdWRlIDxpbnRyaW4uaD4KICMgIGRlZmluZSBVU0VfQ1BVSURfSU5UUklOU0lDUyAxCiAjZWxzZQogIyAgZGVmaW5lIFVTRV9DUFVJRF9JTlRSSU5TSUNTIDAKICNlbmRpZgogCi0jaWYgVVNFX0FTTV9JTlNUUlVDVElPTlMgfHwgVVNFX0NQVUlEX0lOVFJJTlNJQ1MgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRlZmluZWQoS1dTWVNfQ1hYX0hBU19CT1JMQU5EX0FTTV9DUFVJRCkKKyNpZiBVU0VfQVNNX0lOU1RSVUNUSU9OUyB8fCBVU0VfQ1BVSURfSU5UUklOU0lDUwogIyAgZGVmaW5lIFVTRV9DUFVJRCAxCiAjZWxzZQogIyAgZGVmaW5lIFVTRV9DUFVJRCAwCkBAIC0yNzIsMjEgKzI0NCw2IEBACiAgIH0KIAogICBtZW1jcHkocmVzdWx0LCB0bXAsIHNpemVvZih0bXApKTsKLSMgICAgZWxpZiBkZWZpbmVkKEtXU1lTX0NYWF9IQVNfQk9STEFORF9BU01fQ1BVSUQpCi0gIHVuc2lnbmVkIGludCBhLCBiLCBjLCBkOwotICBfX2FzbSB7Ci0gICAgbW92IEVBWCwgc2VsZWN0OwotICAgIGNwdWlkCi0gICAgbW92IGEsIEVBWDsKLSAgICBtb3YgYiwgRUJYOwotICAgIG1vdiBjLCBFQ1g7Ci0gICAgbW92IGQsIEVEWDsKLSAgfQotCi0gIHJlc3VsdFswXSA9IGE7Ci0gIHJlc3VsdFsxXSA9IGI7Ci0gIHJlc3VsdFsyXSA9IGM7Ci0gIHJlc3VsdFszXSA9IGQ7CiAjICAgIGVuZGlmCiAKICAgLy8gVGhlIGNwdWlkIGluc3RydWN0aW9uIHN1Y2NlZWRlZC4KQEAgLTMwMywzNCArMjYwLDMzIEBACiB9CiAKIGV4dGVybiAiQyIgewotdHlwZWRlZiB2b2lkICgqU2lnQWN0aW9uKShpbnQsIHNpZ2luZm9fdCosIHZvaWQqKTsKK3VzaW5nIFNpZ0FjdGlvbiA9IHZvaWQgKCopKGludCwgc2lnaW5mb190Kiwgdm9pZCopOwogfQogCiAvLyAgRGVmaW5lIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb24gY2xhc3MKLXR5cGVkZWYgdm9pZCAoKkRFTEFZX0ZVTkMpKHVuc2lnbmVkIGludCB1aU1TKTsKK3VzaW5nIERFTEFZX0ZVTkMgPSB2b2lkICgqKSh1bnNpZ25lZCBpbnQpOwogCiBjbGFzcyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uCiB7CiBwdWJsaWM6Ci0gIHR5cGVkZWYgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIExvbmdMb25nOwogICBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uKCk7Ci0gIH5TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uKCk7CisgIH5TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uKCkgPSBkZWZhdWx0OwogCi0gIGNvbnN0IGNoYXIqIEdldFZlbmRvclN0cmluZygpOworICBjb25zdCBjaGFyKiBHZXRWZW5kb3JTdHJpbmcoKSBjb25zdDsKICAgY29uc3QgY2hhciogR2V0VmVuZG9ySUQoKTsKLSAgc3RkOjpzdHJpbmcgR2V0VHlwZUlEKCk7Ci0gIHN0ZDo6c3RyaW5nIEdldEZhbWlseUlEKCk7Ci0gIHN0ZDo6c3RyaW5nIEdldE1vZGVsSUQoKTsKLSAgc3RkOjpzdHJpbmcgR2V0TW9kZWxOYW1lKCk7Ci0gIHN0ZDo6c3RyaW5nIEdldFN0ZXBwaW5nQ29kZSgpOwotICBjb25zdCBjaGFyKiBHZXRFeHRlbmRlZFByb2Nlc3Nvck5hbWUoKTsKLSAgY29uc3QgY2hhciogR2V0UHJvY2Vzc29yU2VyaWFsTnVtYmVyKCk7Ci0gIGludCBHZXRQcm9jZXNzb3JDYWNoZVNpemUoKTsKLSAgdW5zaWduZWQgaW50IEdldExvZ2ljYWxQcm9jZXNzb3JzUGVyUGh5c2ljYWwoKTsKLSAgZmxvYXQgR2V0UHJvY2Vzc29yQ2xvY2tGcmVxdWVuY3koKTsKLSAgaW50IEdldFByb2Nlc3NvckFQSUNJRCgpOwotICBpbnQgR2V0UHJvY2Vzc29yQ2FjaGVYU2l6ZShsb25nIGludCk7Ci0gIGJvb2wgRG9lc0NQVVN1cHBvcnRGZWF0dXJlKGxvbmcgaW50KTsKKyAgc3RkOjpzdHJpbmcgR2V0VHlwZUlEKCkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldEZhbWlseUlEKCkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldE1vZGVsSUQoKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgR2V0TW9kZWxOYW1lKCkgY29uc3Q7CisgIHN0ZDo6c3RyaW5nIEdldFN0ZXBwaW5nQ29kZSgpIGNvbnN0OworICBjb25zdCBjaGFyKiBHZXRFeHRlbmRlZFByb2Nlc3Nvck5hbWUoKSBjb25zdDsKKyAgY29uc3QgY2hhciogR2V0UHJvY2Vzc29yU2VyaWFsTnVtYmVyKCkgY29uc3Q7CisgIGludCBHZXRQcm9jZXNzb3JDYWNoZVNpemUoKSBjb25zdDsKKyAgdW5zaWduZWQgaW50IEdldExvZ2ljYWxQcm9jZXNzb3JzUGVyUGh5c2ljYWwoKSBjb25zdDsKKyAgZmxvYXQgR2V0UHJvY2Vzc29yQ2xvY2tGcmVxdWVuY3koKSBjb25zdDsKKyAgaW50IEdldFByb2Nlc3NvckFQSUNJRCgpIGNvbnN0OworICBpbnQgR2V0UHJvY2Vzc29yQ2FjaGVYU2l6ZShsb25nIGludCkgY29uc3Q7CisgIGJvb2wgRG9lc0NQVVN1cHBvcnRGZWF0dXJlKGxvbmcgaW50KSBjb25zdDsKIAogICBjb25zdCBjaGFyKiBHZXRPU05hbWUoKTsKICAgY29uc3QgY2hhciogR2V0SG9zdG5hbWUoKTsKQEAgLTMzOSwyOSArMjk1LDI5IEBACiAgIGNvbnN0IGNoYXIqIEdldE9TVmVyc2lvbigpOwogICBjb25zdCBjaGFyKiBHZXRPU1BsYXRmb3JtKCk7CiAKLSAgYm9vbCBJczY0Qml0cygpOworICBib29sIElzNjRCaXRzKCkgY29uc3Q7CiAKLSAgdW5zaWduZWQgaW50IEdldE51bWJlck9mTG9naWNhbENQVSgpOyAvLyBwZXIgcGh5c2ljYWwgY3B1Ci0gIHVuc2lnbmVkIGludCBHZXROdW1iZXJPZlBoeXNpY2FsQ1BVKCk7CisgIHVuc2lnbmVkIGludCBHZXROdW1iZXJPZkxvZ2ljYWxDUFUoKSBjb25zdDsgLy8gcGVyIHBoeXNpY2FsIGNwdQorICB1bnNpZ25lZCBpbnQgR2V0TnVtYmVyT2ZQaHlzaWNhbENQVSgpIGNvbnN0OwogCiAgIGJvb2wgRG9lc0NQVVN1cHBvcnRDUFVJRCgpOwogCiAgIC8vIFJldHJpZXZlIG1lbW9yeSBpbmZvcm1hdGlvbiBpbiBNaUIuCi0gIHNpemVfdCBHZXRUb3RhbFZpcnR1YWxNZW1vcnkoKTsKLSAgc2l6ZV90IEdldEF2YWlsYWJsZVZpcnR1YWxNZW1vcnkoKTsKLSAgc2l6ZV90IEdldFRvdGFsUGh5c2ljYWxNZW1vcnkoKTsKLSAgc2l6ZV90IEdldEF2YWlsYWJsZVBoeXNpY2FsTWVtb3J5KCk7CisgIHNpemVfdCBHZXRUb3RhbFZpcnR1YWxNZW1vcnkoKSBjb25zdDsKKyAgc2l6ZV90IEdldEF2YWlsYWJsZVZpcnR1YWxNZW1vcnkoKSBjb25zdDsKKyAgc2l6ZV90IEdldFRvdGFsUGh5c2ljYWxNZW1vcnkoKSBjb25zdDsKKyAgc2l6ZV90IEdldEF2YWlsYWJsZVBoeXNpY2FsTWVtb3J5KCkgY29uc3Q7CiAKLSAgTG9uZ0xvbmcgR2V0UHJvY2Vzc0lkKCk7CisgIGxvbmcgbG9uZyBHZXRQcm9jZXNzSWQoKTsKIAogICAvLyBSZXRyaWV2ZSBtZW1vcnkgaW5mb3JtYXRpb24gaW4gS2lCLgotICBMb25nTG9uZyBHZXRIb3N0TWVtb3J5VG90YWwoKTsKLSAgTG9uZ0xvbmcgR2V0SG9zdE1lbW9yeUF2YWlsYWJsZShjb25zdCBjaGFyKiBlbnZWYXJOYW1lKTsKLSAgTG9uZ0xvbmcgR2V0SG9zdE1lbW9yeVVzZWQoKTsKKyAgbG9uZyBsb25nIEdldEhvc3RNZW1vcnlUb3RhbCgpOworICBsb25nIGxvbmcgR2V0SG9zdE1lbW9yeUF2YWlsYWJsZShjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJOYW1lKTsKKyAgbG9uZyBsb25nIEdldEhvc3RNZW1vcnlVc2VkKCk7CiAKLSAgTG9uZ0xvbmcgR2V0UHJvY01lbW9yeUF2YWlsYWJsZShjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByb2NMaW1pdEVudlZhck5hbWUpOwotICBMb25nTG9uZyBHZXRQcm9jTWVtb3J5VXNlZCgpOworICBsb25nIGxvbmcgR2V0UHJvY01lbW9yeUF2YWlsYWJsZShjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwcm9jTGltaXRFbnZWYXJOYW1lKTsKKyAgbG9uZyBsb25nIEdldFByb2NNZW1vcnlVc2VkKCk7CiAKICAgZG91YmxlIEdldExvYWRBdmVyYWdlKCk7CiAKQEAgLTM3Nyw2MCArMzMzLDEwMyBAQAogICB2b2lkIFJ1bk1lbW9yeUNoZWNrKCk7CiAKIHB1YmxpYzoKLSAgdHlwZWRlZiBzdHJ1Y3QgdGFnSUQKKyAgdXNpbmcgSUQgPSBzdHJ1Y3QgdGFnSUQKKwogICB7CisKICAgICBpbnQgVHlwZTsKKwogICAgIGludCBGYW1pbHk7CisKICAgICBpbnQgTW9kZWw7CisKICAgICBpbnQgUmV2aXNpb247CisKICAgICBpbnQgRXh0ZW5kZWRGYW1pbHk7CisKICAgICBpbnQgRXh0ZW5kZWRNb2RlbDsKKwogICAgIHN0ZDo6c3RyaW5nIFByb2Nlc3Nvck5hbWU7CisKICAgICBzdGQ6OnN0cmluZyBWZW5kb3I7CisKICAgICBzdGQ6OnN0cmluZyBTZXJpYWxOdW1iZXI7CisKICAgICBzdGQ6OnN0cmluZyBNb2RlbE5hbWU7Ci0gIH0gSUQ7CisgIH07CiAKLSAgdHlwZWRlZiBzdHJ1Y3QgdGFnQ1BVUG93ZXJNYW5hZ2VtZW50CisgIHVzaW5nIENQVVBvd2VyTWFuYWdlbWVudCA9IHN0cnVjdCB0YWdDUFVQb3dlck1hbmFnZW1lbnQKKwogICB7CisKICAgICBib29sIEhhc1ZvbHRhZ2VJRDsKKwogICAgIGJvb2wgSGFzRnJlcXVlbmN5SUQ7CisKICAgICBib29sIEhhc1RlbXBTZW5zZURpb2RlOwotICB9IENQVVBvd2VyTWFuYWdlbWVudDsKKyAgfTsKIAotICB0eXBlZGVmIHN0cnVjdCB0YWdDUFVFeHRlbmRlZEZlYXR1cmVzCisgIHVzaW5nIENQVUV4dGVuZGVkRmVhdHVyZXMgPSBzdHJ1Y3QgdGFnQ1BVRXh0ZW5kZWRGZWF0dXJlcworCiAgIHsKKwogICAgIGJvb2wgSGFzM0ROb3c7Ci0gICAgYm9vbCBIYXMzRE5vd1BsdXM7Ci0gICAgYm9vbCBTdXBwb3J0c01QOwotICAgIGJvb2wgSGFzTU1YUGx1czsKLSAgICBib29sIEhhc1NTRU1NWDsKLSAgICB1bnNpZ25lZCBpbnQgTG9naWNhbFByb2Nlc3NvcnNQZXJQaHlzaWNhbDsKLSAgICBpbnQgQVBJQ19JRDsKLSAgICBDUFVQb3dlck1hbmFnZW1lbnQgUG93ZXJNYW5hZ2VtZW50OwotICB9IENQVUV4dGVuZGVkRmVhdHVyZXM7CiAKLSAgdHlwZWRlZiBzdHJ1Y3QgQ1BVdGFnRmVhdHVyZXMKKyAgICBib29sIEhhczNETm93UGx1czsKKworICAgIGJvb2wgU3VwcG9ydHNNUDsKKworICAgIGJvb2wgSGFzTU1YUGx1czsKKworICAgIGJvb2wgSGFzU1NFTU1YOworCisgICAgdW5zaWduZWQgaW50IExvZ2ljYWxQcm9jZXNzb3JzUGVyUGh5c2ljYWw7CisKKyAgICBpbnQgQVBJQ19JRDsKKworICAgIENQVVBvd2VyTWFuYWdlbWVudCBQb3dlck1hbmFnZW1lbnQ7CisgIH07CisKKyAgdXNpbmcgQ1BVRmVhdHVyZXMgPSBzdHJ1Y3QgQ1BVdGFnRmVhdHVyZXMKKwogICB7CisKICAgICBib29sIEhhc0ZQVTsKKwogICAgIGJvb2wgSGFzVFNDOworCiAgICAgYm9vbCBIYXNNTVg7CisKICAgICBib29sIEhhc1NTRTsKKwogICAgIGJvb2wgSGFzU1NFRlA7CisKICAgICBib29sIEhhc1NTRTI7CisKICAgICBib29sIEhhc0lBNjQ7CisKICAgICBib29sIEhhc0FQSUM7CisKICAgICBib29sIEhhc0NNT1Y7CisKICAgICBib29sIEhhc01UUlI7CisKICAgICBib29sIEhhc0FDUEk7CisKICAgICBib29sIEhhc1NlcmlhbDsKKwogICAgIGJvb2wgSGFzVGhlcm1hbDsKKwogICAgIGludCBDUFVTcGVlZDsKKwogICAgIGludCBMMUNhY2hlU2l6ZTsKKwogICAgIGludCBMMkNhY2hlU2l6ZTsKKwogICAgIGludCBMM0NhY2hlU2l6ZTsKKwogICAgIENQVUV4dGVuZGVkRmVhdHVyZXMgRXh0ZW5kZWRGZWF0dXJlczsKLSAgfSBDUFVGZWF0dXJlczsKKyAgfTsKIAogICBlbnVtIE1hbnVmYWN0dXJlcgogICB7CkBAIC00NzYsOCArNDc1LDkgQEAKIAogICB2b2lkIENQVUNvdW50V2luZG93cygpOyAgICAvLyBGb3Igd2luZG93cwogICB1bnNpZ25lZCBjaGFyIEdldEFQSUNJZCgpOyAvLyBGb3Igd2luZG93cwotICBib29sIElzU01UU3VwcG9ydGVkKCk7Ci0gIHN0YXRpYyBMb25nTG9uZyBHZXRDeWNsZXNEaWZmZXJlbmNlKERFTEFZX0ZVTkMsIHVuc2lnbmVkIGludCk7IC8vIEZvciB3aW5kb3dzCisgIGJvb2wgSXNTTVRTdXBwb3J0ZWQoKSBjb25zdDsKKyAgc3RhdGljIGxvbmcgbG9uZyBHZXRDeWNsZXNEaWZmZXJlbmNlKERFTEFZX0ZVTkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQpOyAvLyBGb3Igd2luZG93cwogCiAgIC8vIEZvciBMaW51eCBhbmQgQ3lnd2luLCAvcHJvYy9jcHVpbmZvIGZvcm1hdHMgYXJlIHNsaWdodGx5IGRpZmZlcmVudAogICBib29sIFJldHJlaXZlSW5mb3JtYXRpb25Gcm9tQ3B1SW5mb0ZpbGUoKTsKQEAgLTc2OCw0MiArNzY4LDQxIEBACiAgIGNvbnN0IGNoYXIqIGhvc3RMaW1pdEVudlZhck5hbWUsIGNvbnN0IGNoYXIqIHByb2NMaW1pdEVudlZhck5hbWUpCiB7CiAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7Ci0gIG9zcyA8PCAiSG9zdCBUb3RhbDogIiA8PCBpb3N0cmVhbUxvbmdMb25nKHRoaXMtPkdldEhvc3RNZW1vcnlUb3RhbCgpKQorICBvc3MgPDwgIkhvc3QgVG90YWw6ICIgPDwgdGhpcy0+R2V0SG9zdE1lbW9yeVRvdGFsKCkKICAgICAgIDw8ICIgS2lCLCBIb3N0IEF2YWlsYWJsZTogIgotICAgICAgPDwgaW9zdHJlYW1Mb25nTG9uZyh0aGlzLT5HZXRIb3N0TWVtb3J5QXZhaWxhYmxlKGhvc3RMaW1pdEVudlZhck5hbWUpKQorICAgICAgPDwgdGhpcy0+R2V0SG9zdE1lbW9yeUF2YWlsYWJsZShob3N0TGltaXRFbnZWYXJOYW1lKQogICAgICAgPDwgIiBLaUIsIFByb2Nlc3MgQXZhaWxhYmxlOiAiCi0gICAgICA8PCBpb3N0cmVhbUxvbmdMb25nKHRoaXMtPkdldFByb2NNZW1vcnlBdmFpbGFibGUoaG9zdExpbWl0RW52VmFyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jTGltaXRFbnZWYXJOYW1lKSkKKyAgICAgIDw8IHRoaXMtPkdldFByb2NNZW1vcnlBdmFpbGFibGUoaG9zdExpbWl0RW52VmFyTmFtZSwgcHJvY0xpbWl0RW52VmFyTmFtZSkKICAgICAgIDw8ICIgS2lCIjsKICAgcmV0dXJuIG9zcy5zdHIoKTsKIH0KIAogLy8gaG9zdCBtZW1vcnkgaW5mbyBpbiB1bml0cyBvZiBLaUIuCi1TeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldEhvc3RNZW1vcnlUb3RhbCgpCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldEhvc3RNZW1vcnlUb3RhbCgpCiB7CiAgIHJldHVybiB0aGlzLT5JbXBsZW1lbnRhdGlvbi0+R2V0SG9zdE1lbW9yeVRvdGFsKCk7CiB9CiAKLVN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyBTeXN0ZW1JbmZvcm1hdGlvbjo6R2V0SG9zdE1lbW9yeUF2YWlsYWJsZSgKK2xvbmcgbG9uZyBTeXN0ZW1JbmZvcm1hdGlvbjo6R2V0SG9zdE1lbW9yeUF2YWlsYWJsZSgKICAgY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSkKIHsKICAgcmV0dXJuIHRoaXMtPkltcGxlbWVudGF0aW9uLT5HZXRIb3N0TWVtb3J5QXZhaWxhYmxlKGhvc3RMaW1pdEVudlZhck5hbWUpOwogfQogCi1TeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldEhvc3RNZW1vcnlVc2VkKCkKK2xvbmcgbG9uZyBTeXN0ZW1JbmZvcm1hdGlvbjo6R2V0SG9zdE1lbW9yeVVzZWQoKQogewogICByZXR1cm4gdGhpcy0+SW1wbGVtZW50YXRpb24tPkdldEhvc3RNZW1vcnlVc2VkKCk7CiB9CiAKIC8vIHByb2Nlc3MgbWVtb3J5IGluZm8gaW4gdW5pdHMgb2YgS2lCLgotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIFN5c3RlbUluZm9ybWF0aW9uOjpHZXRQcm9jTWVtb3J5QXZhaWxhYmxlKAorbG9uZyBsb25nIFN5c3RlbUluZm9ybWF0aW9uOjpHZXRQcm9jTWVtb3J5QXZhaWxhYmxlKAogICBjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJOYW1lLCBjb25zdCBjaGFyKiBwcm9jTGltaXRFbnZWYXJOYW1lKQogewogICByZXR1cm4gdGhpcy0+SW1wbGVtZW50YXRpb24tPkdldFByb2NNZW1vcnlBdmFpbGFibGUoaG9zdExpbWl0RW52VmFyTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NMaW1pdEVudlZhck5hbWUpOwogfQogCi1TeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldFByb2NNZW1vcnlVc2VkKCkKK2xvbmcgbG9uZyBTeXN0ZW1JbmZvcm1hdGlvbjo6R2V0UHJvY01lbW9yeVVzZWQoKQogewogICByZXR1cm4gdGhpcy0+SW1wbGVtZW50YXRpb24tPkdldFByb2NNZW1vcnlVc2VkKCk7CiB9CkBAIC04MTMsNyArODEyLDcgQEAKICAgcmV0dXJuIHRoaXMtPkltcGxlbWVudGF0aW9uLT5HZXRMb2FkQXZlcmFnZSgpOwogfQogCi1TeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldFByb2Nlc3NJZCgpCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb246OkdldFByb2Nlc3NJZCgpCiB7CiAgIHJldHVybiB0aGlzLT5JbXBsZW1lbnRhdGlvbi0+R2V0UHJvY2Vzc0lkKCk7CiB9CkBAIC04NjQsNyArODYzLDcgQEAKIC8vIEhpZGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiBhbiBhbm9ueW1vdXMgbmFtZXNwYWNlLgogbmFtZXNwYWNlIHsKIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jaWYgZGVmaW5lZChfX2xpbnV4KSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKF9fbGludXgpIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiBpbnQgTG9hZExpbmVzKEZJTEUqIGZpbGUsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbGluZXMpCiB7CiAgIC8vIExvYWQgZWFjaCBsaW5lIGluIHRoZSBnaXZlbiBmaWxlIGludG8gYSB0aGUgdmVjdG9yLgpAQCAtODg1LDcgKzg4NCw3IEBACiAgICAgICAgICpwQnVmID0gJ1wwJzsKICAgICAgIHBCdWYgKz0gMTsKICAgICB9Ci0gICAgbGluZXMucHVzaF9iYWNrKGJ1Zik7CisgICAgbGluZXMuZW1wbGFjZV9iYWNrKGJ1Zik7CiAgICAgKytuUmVhZDsKICAgfQogICBpZiAoZmVycm9yKGZpbGUpKSB7CkBAIC04OTQsMTIgKzg5MywxMiBAQAogICByZXR1cm4gblJlYWQ7CiB9CiAKLSMgIGlmIGRlZmluZWQoX19saW51eCkKKyMgIGlmIGRlZmluZWQoX19saW51eCkgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIGludCBMb2FkTGluZXMoY29uc3QgY2hhciogZmlsZU5hbWUsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbGluZXMpCiB7CiAgIEZJTEUqIGZpbGUgPSBmb3BlbihmaWxlTmFtZSwgInIiKTsKLSAgaWYgKGZpbGUgPT0gMCkgeworICBpZiAoZmlsZSA9PSBudWxscHRyKSB7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgaW50IG5SZWFkID0gTG9hZExpbmVzKGZpbGUsIGxpbmVzKTsKQEAgLTkyNyw3ICs5MjYsNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fbGludXgpCisjaWYgZGVmaW5lZChfX2xpbnV4KSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGludCBHZXRGaWVsZHNGcm9tRmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSwgY29uc3QgY2hhcioqIGZpZWxkTmFtZXMsIFQqIHZhbHVlcykKQEAgLTEzMjIsOSArMTMyMSw5IEBACiB7CiAgIHN0ZDo6c3RyaW5nIGZpbGUocGF0aCk7CiAgIGlmICghdGhpcy0+UmVwb3J0UGF0aCkgewotICAgIHNpemVfdCBhdCA9IGZpbGUucmZpbmQoIi8iKTsKKyAgICBzaXplX3QgYXQgPSBmaWxlLnJmaW5kKCcvJyk7CiAgICAgaWYgKGF0ICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICBmaWxlID0gZmlsZS5zdWJzdHIoYXQgKyAxKTsKKyAgICAgIGZpbGUuZXJhc2UoMCwgYXQgKyAxKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIGZpbGU7CkBAIC0xNDY0LDEwICsxNDYzLDYgQEAKICAgdGhpcy0+T1NJczY0Qml0ID0gKHNpemVvZih2b2lkKikgPT0gOCk7CiB9CiAKLVN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246On5TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uKCkKLXsKLX0KLQogdm9pZCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpSdW5DUFVDaGVjaygpCiB7CiAjaWZkZWYgX1dJTjMyCkBAIC0xNTY0LDcgKzE1NTksNyBAQAogfQogCiAvKiogR2V0IHRoZSB2ZW5kb3Igc3RyaW5nICovCi1jb25zdCBjaGFyKiBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRWZW5kb3JTdHJpbmcoKQorY29uc3QgY2hhciogU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VmVuZG9yU3RyaW5nKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkNoaXBJRC5WZW5kb3IuY19zdHIoKTsKIH0KQEAgLTE3NjAsNyArMTc1NSw3IEBACiB9CiAKIC8qKiBSZXR1cm4gdGhlIHR5cGUgSUQgb2YgdGhlIENQVSAqLwotc3RkOjpzdHJpbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VHlwZUlEKCkKK3N0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFR5cGVJRCgpIGNvbnN0CiB7CiAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHI7CiAgIHN0ciA8PCB0aGlzLT5DaGlwSUQuVHlwZTsKQEAgLTE3NjgsNyArMTc2Myw3IEBACiB9CiAKIC8qKiBSZXR1cm4gdGhlIGZhbWlseSBvZiB0aGUgQ1BVIHByZXNlbnQgKi8KLXN0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEZhbWlseUlEKCkKK3N0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEZhbWlseUlEKCkgY29uc3QKIHsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cjsKICAgc3RyIDw8IHRoaXMtPkNoaXBJRC5GYW1pbHk7CkBAIC0xNzc2LDcgKzE3NzEsNyBAQAogfQogCiAvLyBSZXR1cm4gdGhlIG1vZGVsIG9mIENQVSBwcmVzZW50ICovCi1zdGQ6OnN0cmluZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRNb2RlbElEKCkKK3N0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE1vZGVsSUQoKSBjb25zdAogewogICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyOwogICBzdHIgPDwgdGhpcy0+Q2hpcElELk1vZGVsOwpAQCAtMTc4NCwxMyArMTc3OSwxMyBAQAogfQogCiAvLyBSZXR1cm4gdGhlIG1vZGVsIG5hbWUgb2YgQ1BVIHByZXNlbnQgKi8KLXN0ZDo6c3RyaW5nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE1vZGVsTmFtZSgpCitzdGQ6OnN0cmluZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRNb2RlbE5hbWUoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+Q2hpcElELk1vZGVsTmFtZTsKIH0KIAogLyoqIFJldHVybiB0aGUgc3RlcHBpbmcgY29kZSBvZiB0aGUgQ1BVIHByZXNlbnQuICovCi1zdGQ6OnN0cmluZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRTdGVwcGluZ0NvZGUoKQorc3RkOjpzdHJpbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0U3RlcHBpbmdDb2RlKCkgY29uc3QKIHsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cjsKICAgc3RyIDw8IHRoaXMtPkNoaXBJRC5SZXZpc2lvbjsKQEAgLTE3OTgsNDQgKzE3OTMsNDYgQEAKIH0KIAogLyoqIFJldHVybiB0aGUgc3RlcHBpbmcgY29kZSBvZiB0aGUgQ1BVIHByZXNlbnQuICovCi1jb25zdCBjaGFyKiBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRFeHRlbmRlZFByb2Nlc3Nvck5hbWUoKQorY29uc3QgY2hhciogU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0RXh0ZW5kZWRQcm9jZXNzb3JOYW1lKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkNoaXBJRC5Qcm9jZXNzb3JOYW1lLmNfc3RyKCk7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIHByb2Nlc3NvcgogICogIGluIGhleGFkZWNpbWFsOiB4eHh4LXh4eHgteHh4eC14eHh4LXh4eHgteHh4eC4gKi8KLWNvbnN0IGNoYXIqIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvclNlcmlhbE51bWJlcigpCitjb25zdCBjaGFyKiBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JTZXJpYWxOdW1iZXIoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+Q2hpcElELlNlcmlhbE51bWJlci5jX3N0cigpOwogfQogCiAvKiogUmV0dXJuIHRoZSBsb2dpY2FsIHByb2Nlc3NvcnMgcGVyIHBoeXNpY2FsICovCiB1bnNpZ25lZCBpbnQgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0TG9naWNhbFByb2Nlc3NvcnNQZXJQaHlzaWNhbCgpCisgIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5GZWF0dXJlcy5FeHRlbmRlZEZlYXR1cmVzLkxvZ2ljYWxQcm9jZXNzb3JzUGVyUGh5c2ljYWw7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIHByb2Nlc3NvciBjbG9jayBmcmVxdWVuY3kuICovCi1mbG9hdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JDbG9ja0ZyZXF1ZW5jeSgpCitmbG9hdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JDbG9ja0ZyZXF1ZW5jeSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5DUFVTcGVlZEluTUh6OwogfQogCiAvKiogIFJldHVybiB0aGUgQVBJQyBJRC4gKi8KLWludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JBUElDSUQoKQoraW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvckFQSUNJRCgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5GZWF0dXJlcy5FeHRlbmRlZEZlYXR1cmVzLkFQSUNfSUQ7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIEwxIGNhY2hlIHNpemUuICovCi1pbnQgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0UHJvY2Vzc29yQ2FjaGVTaXplKCkKK2ludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzb3JDYWNoZVNpemUoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+RmVhdHVyZXMuTDFDYWNoZVNpemU7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIGNob3NlbiBjYWNoZSBzaXplLiAqLwotaW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvckNhY2hlWFNpemUobG9uZyBpbnQgZHdDYWNoZUlEKQoraW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NvckNhY2hlWFNpemUoCisgIGxvbmcgaW50IGR3Q2FjaGVJRCkgY29uc3QKIHsKICAgc3dpdGNoIChkd0NhY2hlSUQpIHsKICAgICBjYXNlIFN5c3RlbUluZm9ybWF0aW9uOjpDUFVfRkVBVFVSRV9MMUNBQ0hFOgpAQCAtMTg0OCw3ICsxODQ1LDggQEAKICAgcmV0dXJuIC0xOwogfQogCi1ib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkRvZXNDUFVTdXBwb3J0RmVhdHVyZShsb25nIGludCBkd0ZlYXR1cmUpCitib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkRvZXNDUFVTdXBwb3J0RmVhdHVyZSgKKyAgbG9uZyBpbnQgZHdGZWF0dXJlKSBjb25zdAogewogICBib29sIGJIYXNGZWF0dXJlID0gZmFsc2U7CiAKQEAgLTIxMjgsNyArMjEyNiw3IEBACiAgICAgdGhpcy0+Q2hpcE1hbnVmYWN0dXJlciA9IEhQOyAvLyBIZXdsZXR0LVBhY2thcmQKICAgZWxzZSBpZiAodGhpcy0+Q2hpcElELlZlbmRvciA9PSAiTW90b3JvbGEiKQogICAgIHRoaXMtPkNoaXBNYW51ZmFjdHVyZXIgPSBNb3Rvcm9sYTsgLy8gTW90b3JvbGEgTWljcm9lbGVjdHJvbmljcwotICBlbHNlIGlmIChmYW1pbHkuc3Vic3RyKDAsIDcpID09ICJQQS1SSVNDIikKKyAgZWxzZSBpZiAoZmFtaWx5LmNvbXBhcmUoMCwgNywgIlBBLVJJU0MiKSA9PSAwKQogICAgIHRoaXMtPkNoaXBNYW51ZmFjdHVyZXIgPSBIUDsgLy8gSGV3bGV0dC1QYWNrYXJkCiAgIGVsc2UKICAgICB0aGlzLT5DaGlwTWFudWZhY3R1cmVyID0gVW5rbm93bk1hbnVmYWN0dXJlcjsgLy8gVW5rbm93biBtYW51ZmFjdHVyZXIKQEAgLTI4NDMsNyArMjg0MSw3IEBACiAgIC8vIHBvc3QtcHJvY2VzcyB0aGUgbmFtZS4KICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSBzdHIuZmluZF9maXJzdF9ub3Rfb2YoIiAiKTsKICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHN0ciA9IHN0ci5zdWJzdHIocG9zKTsKKyAgICBzdHIuZXJhc2UoMCwgcG9zKTsKICAgfQogfQogI2VuZGlmCkBAIC0zMzQ0LDggKzMzNDIsOCBAQAogICBzaXplX3QgcG9zID0gYnVmZmVyLmZpbmQod29yZCwgaW5pdCk7CiAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICB0aGlzLT5DdXJyZW50UG9zaXRpb25JbkZpbGUgPSBwb3M7Ci0gICAgcG9zID0gYnVmZmVyLmZpbmQoIjoiLCBwb3MpOwotICAgIHNpemVfdCBwb3MyID0gYnVmZmVyLmZpbmQoIlxuIiwgcG9zKTsKKyAgICBwb3MgPSBidWZmZXIuZmluZCgnOicsIHBvcyk7CisgICAgc2l6ZV90IHBvczIgPSBidWZmZXIuZmluZCgnXG4nLCBwb3MpOwogICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgcG9zMiAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgICAgLy8gSXQgbWF5IGhhcHBlbiB0aGF0IHRoZSBiZWdpbm5pbmcgbWF0Y2hlcywgYnV0IHRoaXMgaXMgc3RpbGwgbm90IHRoZQogICAgICAgLy8gcmVxdWVzdGVkIGtleS4KQEAgLTMzNTgsNyArMzM1Niw5IEBACiAgICAgICAgICAgcmV0dXJuIHRoaXMtPkV4dHJhY3RWYWx1ZUZyb21DcHVJbmZvRmlsZShidWZmZXIsIHdvcmQsIHBvczIpOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICByZXR1cm4gYnVmZmVyLnN1YnN0cihwb3MgKyAyLCBwb3MyIC0gcG9zIC0gMik7CisgICAgICBidWZmZXIuZXJhc2UoMCwgcG9zICsgMik7CisgICAgICBidWZmZXIucmVzaXplKHBvczIgLSBwb3MgLSAyKTsKKyAgICAgIHJldHVybiBidWZmZXI7CiAgICAgfQogICB9CiAgIHRoaXMtPkN1cnJlbnRQb3NpdGlvbkluRmlsZSA9IHN0ZDo6c3RyaW5nOjpucG9zOwpAQCAtMzM5Myw3ICszMzkzLDcgQEAKICAgICBwb3MgPSBidWZmZXIuZmluZCgicHJvY2Vzc29yXHQiLCBwb3MgKyAxKTsKICAgfQogCi0jaWZkZWYgX19saW51eAorI2lmIGRlZmluZWQoX19saW51eCkgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQogICAvLyBDb3VudCBzb2NrZXRzLgogICBzdGQ6OnNldDxpbnQ+IFBoeXNpY2FsSURzOwogICBzdGQ6OnN0cmluZyBpZGMgPSB0aGlzLT5FeHRyYWN0VmFsdWVGcm9tQ3B1SW5mb0ZpbGUoYnVmZmVyLCAicGh5c2ljYWwgaWQiKTsKQEAgLTM0MDksMTMgKzM0MDksMTMgQEAKICAgLy8gV2Ugd2FudCB0byByZWNvcmQgdGhlIHRvdGFsIG51bWJlciBvZiBjb3JlcyBpbiB0aGlzLT5OdW1iZXJPZlBoeXNpY2FsQ1BVCiAgIC8vIChjaGVja2luZyBvbmx5IHRoZSBmaXJzdCBwcm9jKQogICBzdGQ6OnN0cmluZyBDb3JlcyA9IHRoaXMtPkV4dHJhY3RWYWx1ZUZyb21DcHVJbmZvRmlsZShidWZmZXIsICJjcHUgY29yZXMiKTsKLSAgdW5zaWduZWQgaW50IE51bWJlck9mQ29yZXNQZXJTb2NrZXQgPSAodW5zaWduZWQgaW50KWF0b2koQ29yZXMuY19zdHIoKSk7CisgIGF1dG8gTnVtYmVyT2ZDb3Jlc1BlclNvY2tldCA9ICh1bnNpZ25lZCBpbnQpYXRvaShDb3Jlcy5jX3N0cigpKTsKICAgTnVtYmVyT2ZDb3Jlc1BlclNvY2tldCA9IHN0ZDo6bWF4KE51bWJlck9mQ29yZXNQZXJTb2NrZXQsIDF1KTsKICAgdGhpcy0+TnVtYmVyT2ZQaHlzaWNhbENQVSA9CiAgICAgTnVtYmVyT2ZDb3Jlc1BlclNvY2tldCAqICh1bnNpZ25lZCBpbnQpTnVtYmVyT2ZTb2NrZXRzOwogCi0jZWxzZSAvLyBfX0NZR1dJTl9fCi0gIC8vIGRvZXMgbm90IGhhdmUgInBoeXNpY2FsIGlkIiBlbnRyaWVzLCBuZWl0aGVyICJjcHUgY29yZXMiCisjZWxzZQorICAvLyBGb3Igc3lzdGVtcyB3aGljaCBkbyBub3QgaGF2ZSAicGh5c2ljYWwgaWQiIGVudHJpZXMsIG5laXRoZXIgImNwdSBjb3JlcyIKICAgLy8gdGhpcyBoYXMgdG8gYmUgZml4ZWQgZm9yIGh5cGVyLXRocmVhZGluZy4KICAgc3RkOjpzdHJpbmcgY3B1Y291bnQgPQogICAgIHRoaXMtPkV4dHJhY3RWYWx1ZUZyb21DcHVJbmZvRmlsZShidWZmZXIsICJjcHUgY291bnQiKTsKQEAgLTM0NDEsNyArMzQ0MSw3IEBACiAgICAgLy8gTGludXggU3BhcmM6IENQVSBzcGVlZCBpcyBpbiBIeiBhbmQgZW5jb2RlZCBpbiBoZXhhZGVjaW1hbAogICAgIENQVVNwZWVkID0gdGhpcy0+RXh0cmFjdFZhbHVlRnJvbUNwdUluZm9GaWxlKGJ1ZmZlciwgIkNwdTBDbGtUY2siKTsKICAgICB0aGlzLT5DUFVTcGVlZEluTUh6ID0KLSAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihzdHJ0b3VsbChDUFVTcGVlZC5jX3N0cigpLCAwLCAxNikpIC8gMTAwMDAwMC4wZjsKKyAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihzdHJ0b3VsbChDUFVTcGVlZC5jX3N0cigpLCBudWxscHRyLCAxNikpIC8gMTAwMDAwMC4wZjsKICAgfQogI2VuZGlmCiAKQEAgLTM1MDIsMTMgKzM1MDIsMTIgQEAKICAgY2FjaGVuYW1lLnB1c2hfYmFjaygiRC1jYWNoZSIpOyAgICAvLyBlLmcuIFBBLVJJU0MKIAogICB0aGlzLT5GZWF0dXJlcy5MMUNhY2hlU2l6ZSA9IDA7Ci0gIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBjYWNoZW5hbWUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgc3RkOjpzdHJpbmcgY2FjaGVTaXplID0KLSAgICAgIHRoaXMtPkV4dHJhY3RWYWx1ZUZyb21DcHVJbmZvRmlsZShidWZmZXIsIGNhY2hlbmFtZVtpbmRleF0pOworICBmb3IgKGF1dG8mIGluZGV4IDogY2FjaGVuYW1lKSB7CisgICAgc3RkOjpzdHJpbmcgY2FjaGVTaXplID0gdGhpcy0+RXh0cmFjdFZhbHVlRnJvbUNwdUluZm9GaWxlKGJ1ZmZlciwgaW5kZXgpOwogICAgIGlmICghY2FjaGVTaXplLmVtcHR5KCkpIHsKICAgICAgIHBvcyA9IGNhY2hlU2l6ZS5maW5kKCIgS0IiKTsKICAgICAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgY2FjaGVTaXplID0gY2FjaGVTaXplLnN1YnN0cigwLCBwb3MpOworICAgICAgICBjYWNoZVNpemUucmVzaXplKHBvcyk7CiAgICAgICB9CiAgICAgICB0aGlzLT5GZWF0dXJlcy5MMUNhY2hlU2l6ZSArPSBhdG9pKGNhY2hlU2l6ZS5jX3N0cigpKTsKICAgICB9CkBAIC0zNTg0LDggKzM1ODMsNyBAQAogLyoqCiBHZXQgdG90YWwgc3lzdGVtIFJBTSBpbiB1bml0cyBvZiBLaUIuCiAqLwotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nCi1TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRIb3N0TWVtb3J5VG90YWwoKQorbG9uZyBsb25nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEhvc3RNZW1vcnlUb3RhbCgpCiB7CiAjaWYgZGVmaW5lZChfV0lOMzIpCiAjICBpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDEzMDAKQEAgLTM1OTksOCArMzU5Nyw4IEBACiAgIEdsb2JhbE1lbW9yeVN0YXR1c0V4KCZzdGF0ZXgpOwogICByZXR1cm4gc3RhdGV4LnVsbFRvdGFsUGh5cyAvIDEwMjQ7CiAjICBlbmRpZgotI2VsaWYgZGVmaW5lZChfX2xpbnV4KQotICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcgbWVtVG90YWwgPSAwOworI2VsaWYgZGVmaW5lZChfX2xpbnV4KSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisgIGxvbmcgbG9uZyBtZW1Ub3RhbCA9IDA7CiAgIGludCBpZXJyID0gR2V0RmllbGRGcm9tRmlsZSgiL3Byb2MvbWVtaW5mbyIsICJNZW1Ub3RhbDoiLCBtZW1Ub3RhbCk7CiAgIGlmIChpZXJyKSB7CiAgICAgcmV0dXJuIC0xOwpAQCAtMzYyMywxMSArMzYyMSwxMCBAQAogR2V0IHRvdGFsIHN5c3RlbSBSQU0gaW4gdW5pdHMgb2YgS2lCLiBUaGlzIG1heSBkaWZmZXIgZnJvbSB0aGUKIGhvc3QgdG90YWwgaWYgYSBob3N0LXdpZGUgcmVzb3VyY2UgbGltaXQgaXMgYXBwbGllZC4KICovCi1TeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcKLVN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEhvc3RNZW1vcnlBdmFpbGFibGUoCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0SG9zdE1lbW9yeUF2YWlsYWJsZSgKICAgY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSkKIHsKLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIG1lbVRvdGFsID0gdGhpcy0+R2V0SG9zdE1lbW9yeVRvdGFsKCk7CisgIGxvbmcgbG9uZyBtZW1Ub3RhbCA9IHRoaXMtPkdldEhvc3RNZW1vcnlUb3RhbCgpOwogCiAgIC8vIHRoZSBmb2xsb3dpbmcgbWVjaGFuaXNtIGlzIHByb3ZpZGVkIGZvciBzeXN0ZW1zIHRoYXQKICAgLy8gYXBwbHkgcmVzb3VyY2UgbGltaXRzIGFjcm9zcyBncm91cHMgb2YgcHJvY2Vzc2VzLgpAQCAtMzYzOCw4ICszNjM1LDcgQEAKICAgaWYgKGhvc3RMaW1pdEVudlZhck5hbWUpIHsKICAgICBjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJWYWx1ZSA9IGdldGVudihob3N0TGltaXRFbnZWYXJOYW1lKTsKICAgICBpZiAoaG9zdExpbWl0RW52VmFyVmFsdWUpIHsKLSAgICAgIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyBob3N0TGltaXQgPQotICAgICAgICBhdG9Mb25nTG9uZyhob3N0TGltaXRFbnZWYXJWYWx1ZSk7CisgICAgICBsb25nIGxvbmcgaG9zdExpbWl0ID0gc3RkOjphdG9sbChob3N0TGltaXRFbnZWYXJWYWx1ZSk7CiAgICAgICBpZiAoaG9zdExpbWl0ID4gMCkgewogICAgICAgICBtZW1Ub3RhbCA9IG1pbihob3N0TGltaXQsIG1lbVRvdGFsKTsKICAgICAgIH0KQEAgLTM2NTMsMjAgKzM2NDksMTcgQEAKIEdldCB0b3RhbCBzeXN0ZW0gUkFNIGluIHVuaXRzIG9mIEtpQi4gVGhpcyBtYXkgZGlmZmVyIGZyb20gdGhlCiBob3N0IHRvdGFsIGlmIGEgcGVyLXByb2Nlc3MgcmVzb3VyY2UgbGltaXQgaXMgYXBwbGllZC4KICovCi1TeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcKLVN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2NNZW1vcnlBdmFpbGFibGUoCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0UHJvY01lbW9yeUF2YWlsYWJsZSgKICAgY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSwgY29uc3QgY2hhciogcHJvY0xpbWl0RW52VmFyTmFtZSkKIHsKLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIG1lbUF2YWlsID0KLSAgICB0aGlzLT5HZXRIb3N0TWVtb3J5QXZhaWxhYmxlKGhvc3RMaW1pdEVudlZhck5hbWUpOworICBsb25nIGxvbmcgbWVtQXZhaWwgPSB0aGlzLT5HZXRIb3N0TWVtb3J5QXZhaWxhYmxlKGhvc3RMaW1pdEVudlZhck5hbWUpOwogCiAgIC8vIHRoZSBmb2xsb3dpbmcgbWVjaGFuaXNtIGlzIHByb3ZpZGUgZm9yIHN5c3RlbXMgd2hlcmUgcmxpbWl0cwogICAvLyBhcmUgbm90IGVtcGxveWVkLiBVbml0cyBhcmUgaW4gS2lCLgogICBpZiAocHJvY0xpbWl0RW52VmFyTmFtZSkgewogICAgIGNvbnN0IGNoYXIqIHByb2NMaW1pdEVudlZhclZhbHVlID0gZ2V0ZW52KHByb2NMaW1pdEVudlZhck5hbWUpOwogICAgIGlmIChwcm9jTGltaXRFbnZWYXJWYWx1ZSkgewotICAgICAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIHByb2NMaW1pdCA9Ci0gICAgICAgIGF0b0xvbmdMb25nKHByb2NMaW1pdEVudlZhclZhbHVlKTsKKyAgICAgIGxvbmcgbG9uZyBwcm9jTGltaXQgPSBzdGQ6OmF0b2xsKHByb2NMaW1pdEVudlZhclZhbHVlKTsKICAgICAgIGlmIChwcm9jTGltaXQgPiAwKSB7CiAgICAgICAgIG1lbUF2YWlsID0gbWluKHByb2NMaW1pdCwgbWVtQXZhaWwpOwogICAgICAgfQpAQCAtMzY3OCwyOCArMzY3MSwyNCBAQAogICBSZXNvdXJjZUxpbWl0VHlwZSBybGltOwogICBpZXJyID0gR2V0UmVzb3VyY2VMaW1pdChSTElNSVRfREFUQSwgJnJsaW0pOwogICBpZiAoKGllcnIgPT0gMCkgJiYgKHJsaW0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkpIHsKLSAgICBtZW1BdmFpbCA9Ci0gICAgICBtaW4oKFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZylybGltLnJsaW1fY3VyIC8gMTAyNCwgbWVtQXZhaWwpOworICAgIG1lbUF2YWlsID0gbWluKChsb25nIGxvbmcpcmxpbS5ybGltX2N1ciAvIDEwMjQsIG1lbUF2YWlsKTsKICAgfQogCiAgIGllcnIgPSBHZXRSZXNvdXJjZUxpbWl0KFJMSU1JVF9BUywgJnJsaW0pOwogICBpZiAoKGllcnIgPT0gMCkgJiYgKHJsaW0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkpIHsKLSAgICBtZW1BdmFpbCA9Ci0gICAgICBtaW4oKFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZylybGltLnJsaW1fY3VyIC8gMTAyNCwgbWVtQXZhaWwpOworICAgIG1lbUF2YWlsID0gbWluKChsb25nIGxvbmcpcmxpbS5ybGltX2N1ciAvIDEwMjQsIG1lbUF2YWlsKTsKICAgfQogI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCiAgIHN0cnVjdCBybGltaXQgcmxpbTsKICAgaW50IGllcnI7CiAgIGllcnIgPSBnZXRybGltaXQoUkxJTUlUX0RBVEEsICZybGltKTsKICAgaWYgKChpZXJyID09IDApICYmIChybGltLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpKSB7Ci0gICAgbWVtQXZhaWwgPQotICAgICAgbWluKChTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcpcmxpbS5ybGltX2N1ciAvIDEwMjQsIG1lbUF2YWlsKTsKKyAgICBtZW1BdmFpbCA9IG1pbigobG9uZyBsb25nKXJsaW0ucmxpbV9jdXIgLyAxMDI0LCBtZW1BdmFpbCk7CiAgIH0KIAogICBpZXJyID0gZ2V0cmxpbWl0KFJMSU1JVF9SU1MsICZybGltKTsKICAgaWYgKChpZXJyID09IDApICYmIChybGltLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpKSB7Ci0gICAgbWVtQXZhaWwgPQotICAgICAgbWluKChTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcpcmxpbS5ybGltX2N1ciAvIDEwMjQsIG1lbUF2YWlsKTsKKyAgICBtZW1BdmFpbCA9IG1pbigobG9uZyBsb25nKXJsaW0ucmxpbV9jdXIgLyAxMDI0LCBtZW1BdmFpbCk7CiAgIH0KICNlbmRpZgogCkBAIC0zNzA5LDggKzM2OTgsNyBAQAogLyoqCiBHZXQgUkFNIHVzZWQgYnkgYWxsIHByb2Nlc3NlcyBpbiB0aGUgaG9zdCwgaW4gdW5pdHMgb2YgS2lCLgogKi8KLVN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZwotU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0SG9zdE1lbW9yeVVzZWQoKQorbG9uZyBsb25nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEhvc3RNZW1vcnlVc2VkKCkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMikKICMgIGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTMwMApAQCAtMzcyNCw0MiArMzcxMiw1MSBAQAogICBHbG9iYWxNZW1vcnlTdGF0dXNFeCgmc3RhdGV4KTsKICAgcmV0dXJuIChzdGF0ZXgudWxsVG90YWxQaHlzIC0gc3RhdGV4LnVsbEF2YWlsUGh5cykgLyAxMDI0OwogIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyAgY29uc3QgY2hhciogbmFtZXNbM10gPSB7ICJNZW1Ub3RhbDoiLCAiTWVtRnJlZToiLCBudWxscHRyIH07CisgIGxvbmcgbG9uZyB2YWx1ZXNbMl0gPSB7IDAgfTsKKyAgaW50IGllcnIgPSBHZXRGaWVsZHNGcm9tRmlsZSgiL3Byb2MvbWVtaW5mbyIsIG5hbWVzLCB2YWx1ZXMpOworICBpZiAoaWVycikgeworICAgIHJldHVybiBpZXJyOworICB9CisgIGxvbmcgbG9uZyYgbWVtVG90YWwgPSB2YWx1ZXNbMF07CisgIGxvbmcgbG9uZyYgbWVtRnJlZSA9IHZhbHVlc1sxXTsKKyAgcmV0dXJuIG1lbVRvdGFsIC0gbWVtRnJlZTsKICNlbGlmIGRlZmluZWQoX19saW51eCkKICAgLy8gRmlyc3QgdHJ5IHRvIHVzZSBNZW1BdmFpbGFibGUsIGJ1dCBpdCBvbmx5IHdvcmtzIG9uIG5ld2VyIGtlcm5lbHMKICAgY29uc3QgY2hhciogbmFtZXMyWzNdID0geyAiTWVtVG90YWw6IiwgIk1lbUF2YWlsYWJsZToiLCBudWxscHRyIH07Ci0gIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyB2YWx1ZXMyWzJdID0geyBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcoMCkgfTsKKyAgbG9uZyBsb25nIHZhbHVlczJbMl0gPSB7IDAgfTsKICAgaW50IGllcnIgPSBHZXRGaWVsZHNGcm9tRmlsZSgiL3Byb2MvbWVtaW5mbyIsIG5hbWVzMiwgdmFsdWVzMik7CiAgIGlmIChpZXJyKSB7CiAgICAgY29uc3QgY2hhciogbmFtZXM0WzVdID0geyAiTWVtVG90YWw6IiwgIk1lbUZyZWU6IiwgIkJ1ZmZlcnM6IiwgIkNhY2hlZDoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciB9OwotICAgIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyB2YWx1ZXM0WzRdID0geyBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcoCi0gICAgICAwKSB9OworICAgIGxvbmcgbG9uZyB2YWx1ZXM0WzRdID0geyAwIH07CiAgICAgaWVyciA9IEdldEZpZWxkc0Zyb21GaWxlKCIvcHJvYy9tZW1pbmZvIiwgbmFtZXM0LCB2YWx1ZXM0KTsKICAgICBpZiAoaWVycikgewogICAgICAgcmV0dXJuIGllcnI7CiAgICAgfQotICAgIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyYgbWVtVG90YWwgPSB2YWx1ZXM0WzBdOwotICAgIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyYgbWVtRnJlZSA9IHZhbHVlczRbMV07Ci0gICAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nJiBtZW1CdWZmZXJzID0gdmFsdWVzNFsyXTsKLSAgICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcmIG1lbUNhY2hlZCA9IHZhbHVlczRbM107CisgICAgbG9uZyBsb25nJiBtZW1Ub3RhbCA9IHZhbHVlczRbMF07CisgICAgbG9uZyBsb25nJiBtZW1GcmVlID0gdmFsdWVzNFsxXTsKKyAgICBsb25nIGxvbmcmIG1lbUJ1ZmZlcnMgPSB2YWx1ZXM0WzJdOworICAgIGxvbmcgbG9uZyYgbWVtQ2FjaGVkID0gdmFsdWVzNFszXTsKICAgICByZXR1cm4gbWVtVG90YWwgLSBtZW1GcmVlIC0gbWVtQnVmZmVycyAtIG1lbUNhY2hlZDsKICAgfQotICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcmIG1lbVRvdGFsID0gdmFsdWVzMlswXTsKLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nJiBtZW1BdmFpbCA9IHZhbHVlczJbMV07CisgIGxvbmcgbG9uZyYgbWVtVG90YWwgPSB2YWx1ZXMyWzBdOworICBsb25nIGxvbmcmIG1lbUF2YWlsID0gdmFsdWVzMlsxXTsKICAgcmV0dXJuIG1lbVRvdGFsIC0gbWVtQXZhaWw7CiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIHBzeiA9IGdldHBhZ2VzaXplKCk7CisgIGxvbmcgbG9uZyBwc3ogPSBnZXRwYWdlc2l6ZSgpOwogICBpZiAocHN6IDwgMSkgewogICAgIHJldHVybiAtMTsKICAgfQogICBjb25zdCBjaGFyKiBuYW1lc1szXSA9IHsgIlBhZ2VzIHdpcmVkIGRvd246IiwgIlBhZ2VzIGFjdGl2ZToiLCBudWxscHRyIH07Ci0gIFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyB2YWx1ZXNbMl0gPSB7IFN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZygwKSB9OworICBsb25nIGxvbmcgdmFsdWVzWzJdID0geyAwIH07CiAgIGludCBpZXJyID0gR2V0RmllbGRzRnJvbUNvbW1hbmQoInZtX3N0YXQiLCBuYW1lcywgdmFsdWVzKTsKICAgaWYgKGllcnIpIHsKICAgICByZXR1cm4gLTE7CiAgIH0KLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nJiB2bVdpcmVkID0gdmFsdWVzWzBdOwotICBTeXN0ZW1JbmZvcm1hdGlvbjo6TG9uZ0xvbmcmIHZtQWN0aXZlID0gdmFsdWVzWzFdOworICBsb25nIGxvbmcmIHZtV2lyZWQgPSB2YWx1ZXNbMF07CisgIGxvbmcgbG9uZyYgdm1BY3RpdmUgPSB2YWx1ZXNbMV07CiAgIHJldHVybiAoKHZtQWN0aXZlICsgdm1XaXJlZCkgKiBwc3opIC8gMTAyNDsKICNlbHNlCiAgIHJldHVybiAwOwpAQCAtMzc3MCw4ICszNzY3LDcgQEAKIEdldCBzeXN0ZW0gUkFNIHVzZWQgYnkgdGhlIHByb2Nlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbgogcHJvY2VzcyBpZCBpbiB1bml0cyBvZiBLaUIuCiAqLwotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nCi1TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jTWVtb3J5VXNlZCgpCitsb25nIGxvbmcgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0UHJvY01lbW9yeVVzZWQoKQogewogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKEtXU1lTX1NZU19IQVNfUFNBUEkpCiAgIGxvbmcgcGlkID0gR2V0Q3VycmVudFByb2Nlc3NJZCgpOwpAQCAtMzc4NywxNSArMzc4MywxNSBAQAogICAgIHJldHVybiAtMjsKICAgfQogICByZXR1cm4gcG1jLldvcmtpbmdTZXRTaXplIC8gMTAyNDsKLSNlbGlmIGRlZmluZWQoX19saW51eCkKLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIG1lbVVzZWQgPSAwOworI2VsaWYgZGVmaW5lZChfX2xpbnV4KSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisgIGxvbmcgbG9uZyBtZW1Vc2VkID0gMDsKICAgaW50IGllcnIgPSBHZXRGaWVsZEZyb21GaWxlKCIvcHJvYy9zZWxmL3N0YXR1cyIsICJWbVJTUzoiLCBtZW1Vc2VkKTsKICAgaWYgKGllcnIpIHsKICAgICByZXR1cm4gLTE7CiAgIH0KICAgcmV0dXJuIG1lbVVzZWQ7CiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSAgU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nIG1lbVVzZWQgPSAwOworICBsb25nIGxvbmcgbWVtVXNlZCA9IDA7CiAgIHBpZF90IHBpZCA9IGdldHBpZCgpOwogICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3NzOwogICBvc3MgPDwgInBzIC1vIHJzcz0gLXAgIiA8PCBwaWQ7CkBAIC0zODU5LDEyICszODU1LDEzIEBACiAvKioKIEdldCB0aGUgcHJvY2VzcyBpZCBvZiB0aGUgcnVubmluZyBwcm9jZXNzLgogKi8KLVN5c3RlbUluZm9ybWF0aW9uOjpMb25nTG9uZyBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRQcm9jZXNzSWQoKQorbG9uZyBsb25nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldFByb2Nlc3NJZCgpCiB7CiAjaWYgZGVmaW5lZChfV0lOMzIpCiAgIHJldHVybiBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7CiAjZWxpZiBkZWZpbmVkKF9fbGludXgpIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCAgICAgICBcCi0gIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQorICBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgICAgXAorICBkZWZpbmVkKF9fQ1lHV0lOX18pCiAgIHJldHVybiBnZXRwaWQoKTsKICNlbHNlCiAgIHJldHVybiAtMTsKQEAgLTM4OTMsNyArMzg5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdob2xlUGF0aCkKIHsKICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKLSAgc3RkOjpzdHJpbmcgcHJvZ3JhbVN0YWNrID0gIiI7CisgIHN0ZDo6c3RyaW5nIHByb2dyYW1TdGFjazsKIAogI2lmZGVmIEtXU1lTX1NZU1RFTUlORk9STUFUSU9OX0hBU19EQkdIRUxQCiAgICh2b2lkKXdob2xlUGF0aDsKQEAgLTQyNDksMzkgKzQyNDYsNDQgQEAKIH0KIAogLyoqICovCi1zaXplX3QgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjo6R2V0VG90YWxWaXJ0dWFsTWVtb3J5KCkKK3NpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRUb3RhbFZpcnR1YWxNZW1vcnkoKSBjb25zdAogewogICByZXR1cm4gdGhpcy0+VG90YWxWaXJ0dWFsTWVtb3J5OwogfQogCiAvKiogKi8KLXNpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRBdmFpbGFibGVWaXJ0dWFsTWVtb3J5KCkKK3NpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRBdmFpbGFibGVWaXJ0dWFsTWVtb3J5KCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkF2YWlsYWJsZVZpcnR1YWxNZW1vcnk7CiB9CiAKLXNpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRUb3RhbFBoeXNpY2FsTWVtb3J5KCkKK3NpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRUb3RhbFBoeXNpY2FsTWVtb3J5KCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPlRvdGFsUGh5c2ljYWxNZW1vcnk7CiB9CiAKIC8qKiAqLwotc2l6ZV90IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEF2YWlsYWJsZVBoeXNpY2FsTWVtb3J5KCkKK3NpemVfdCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRBdmFpbGFibGVQaHlzaWNhbE1lbW9yeSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5BdmFpbGFibGVQaHlzaWNhbE1lbW9yeTsKIH0KIAogLyoqIEdldCBDeWNsZSBkaWZmZXJlbmNlcyAqLwotU3lzdGVtSW5mb3JtYXRpb246OkxvbmdMb25nCi1TeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXRDeWNsZXNEaWZmZXJlbmNlKERFTEFZX0ZVTkMgRGVsYXlGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVpUGFyYW1ldGVyKQorbG9uZyBsb25nIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldEN5Y2xlc0RpZmZlcmVuY2UoCisgIERFTEFZX0ZVTkMgRGVsYXlGdW5jdGlvbiwgdW5zaWduZWQgaW50IHVpUGFyYW1ldGVyKQogewogI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQogICB1bnNpZ25lZCBfX2ludDY0IHN0YW1wMSwgc3RhbXAyOwogCisjICBpZmRlZiBfTV9BUk02NAorICBzdGFtcDEgPSBfUmVhZFN0YXR1c1JlZyhBUk02NF9QTUNDTlRSX0VMMCk7CisgIERlbGF5RnVuY3Rpb24odWlQYXJhbWV0ZXIpOworICBzdGFtcDIgPSBfUmVhZFN0YXR1c1JlZyhBUk02NF9QTUNDTlRSX0VMMCk7CisjICBlbHNlCiAgIHN0YW1wMSA9IF9fcmR0c2MoKTsKICAgRGVsYXlGdW5jdGlvbih1aVBhcmFtZXRlcik7CiAgIHN0YW1wMiA9IF9fcmR0c2MoKTsKKyMgIGVuZGlmCiAKICAgcmV0dXJuIHN0YW1wMiAtIHN0YW1wMTsKICNlbGlmIFVTRV9BU01fSU5TVFJVQ1RJT05TCkBAIC00MzUwLDcgKzQzNTIsNyBAQAogfQogCiAvKiogV29ya3Mgb25seSBmb3Igd2luZG93cyAqLwotYm9vbCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpJc1NNVFN1cHBvcnRlZCgpCitib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OklzU01UU3VwcG9ydGVkKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPkZlYXR1cmVzLkV4dGVuZGVkRmVhdHVyZXMuTG9naWNhbFByb2Nlc3NvcnNQZXJQaHlzaWNhbCA+IDE7CiB9CkBAIC00Mzk5LDEyICs0NDAxLDEyIEBACiAgICAgRFdPUkQgTGVuZ3RoID0gMDsKICAgICBEV09SRCByYyA9IHBHZXRMb2dpY2FsUHJvY2Vzc29ySW5mb3JtYXRpb24obnVsbHB0ciwgJkxlbmd0aCk7CiAgICAgYXNzZXJ0KEZBTFNFID09IHJjKTsKLSAgICAodm9pZClyYzsgLy8gU2lsZW5jZSB1bnVzZWQgdmFyaWFibGUgd2FybmluZyBpbiBCb3JsYW5kIEMrKyA1LjgxCisgICAgKHZvaWQpcmM7IC8vIFNpbGVuY2UgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcKICAgICBhc3NlcnQoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUik7CiAgICAgUHJvY0luZm8ucmVzaXplKExlbmd0aCAvIHNpemVvZihTWVNURU1fTE9HSUNBTF9QUk9DRVNTT1JfSU5GT1JNQVRJT04pKTsKICAgICByYyA9IHBHZXRMb2dpY2FsUHJvY2Vzc29ySW5mb3JtYXRpb24oJlByb2NJbmZvWzBdLCAmTGVuZ3RoKTsKICAgICBhc3NlcnQocmMgIT0gRkFMU0UpOwotICAgICh2b2lkKXJjOyAvLyBTaWxlbmNlIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nIGluIEJvcmxhbmQgQysrIDUuODEKKyAgICAodm9pZClyYzsgLy8gU2lsZW5jZSB1bnVzZWQgdmFyaWFibGUgd2FybmluZwogICB9CiAKICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxTWVNURU1fTE9HSUNBTF9QUk9DRVNTT1JfSU5GT1JNQVRJT04+OjppdGVyYXRvcgpAQCAtNDQzMiwxMyArNDQzNCwxMyBAQAogfQogCiAvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgbG9naWNhbCBDUFVzIG9uIHRoZSBzeXN0ZW0gKi8KLXVuc2lnbmVkIGludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXROdW1iZXJPZkxvZ2ljYWxDUFUoKQordW5zaWduZWQgaW50IFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OkdldE51bWJlck9mTG9naWNhbENQVSgpIGNvbnN0CiB7CiAgIHJldHVybiB0aGlzLT5OdW1iZXJPZkxvZ2ljYWxDUFU7CiB9CiAKIC8qKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwaHlzaWNhbCBDUFVzIG9uIHRoZSBzeXN0ZW0gKi8KLXVuc2lnbmVkIGludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXROdW1iZXJPZlBoeXNpY2FsQ1BVKCkKK3Vuc2lnbmVkIGludCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpHZXROdW1iZXJPZlBoeXNpY2FsQ1BVKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPk51bWJlck9mUGh5c2ljYWxDUFU7CiB9CkBAIC00NjM4LDcgKzQ2NDAsNyBAQAogICBzaXplX3QgcG9zID0gdGhpcy0+U3lzQ3RsQnVmZmVyLmZpbmQod29yZCk7CiAgIGlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBwb3MgPSB0aGlzLT5TeXNDdGxCdWZmZXIuZmluZCgiOiAiLCBwb3MpOwotICAgIHNpemVfdCBwb3MyID0gdGhpcy0+U3lzQ3RsQnVmZmVyLmZpbmQoIlxuIiwgcG9zKTsKKyAgICBzaXplX3QgcG9zMiA9IHRoaXMtPlN5c0N0bEJ1ZmZlci5maW5kKCdcbicsIHBvcyk7CiAgICAgaWYgKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBwb3MyICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgICByZXR1cm4gdGhpcy0+U3lzQ3RsQnVmZmVyLnN1YnN0cihwb3MgKyAyLCBwb3MyIC0gcG9zIC0gMik7CiAgICAgfQpAQCAtNDczMywxNCArNDczNSwxNSBAQAogICAgIH0KICAgICBwb3MgPSBjb21tYW5kLmZpbmQoJyAnLCBwb3MgKyAxKTsKICAgfQotICBhcmdzX3N0cmluZy5wdXNoX2JhY2soY29tbWFuZC5zdWJzdHIoc3RhcnQgKyAxLCBjb21tYW5kLnNpemUoKSAtIHN0YXJ0IC0gMSkpOworICBjb21tYW5kLmVyYXNlKDAsIHN0YXJ0ICsgMSk7CisgIGFyZ3Nfc3RyaW5nLnB1c2hfYmFjayhjb21tYW5kKTsKIAogICBzdGQ6OnZlY3Rvcjxjb25zdCBjaGFyKj4gYXJnczsKICAgYXJncy5yZXNlcnZlKDMgKyBhcmdzX3N0cmluZy5zaXplKCkpOwogICBhcmdzLnB1c2hfYmFjaygia3N0YXQiKTsKICAgYXJncy5wdXNoX2JhY2soIi1wIik7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnc19zdHJpbmcuc2l6ZSgpOyArK2kpIHsKLSAgICBhcmdzLnB1c2hfYmFjayhhcmdzX3N0cmluZ1tpXS5jX3N0cigpKTsKKyAgZm9yIChhdXRvJiBpIDogYXJnc19zdHJpbmcpIHsKKyAgICBhcmdzLnB1c2hfYmFjayhpLmNfc3RyKCkpOwogICB9CiAgIGFyZ3MucHVzaF9iYWNrKG51bGxwdHIpOwogCkBAIC00OTIyLDcgKzQ5MjUsOSBAQAogICB3aGlsZSAoYnVmZmVyW3Bvc10gPT0gJyAnKQogICAgIHBvcysrOwogCi0gIHRoaXMtPlRvdGFsUGh5c2ljYWxNZW1vcnkgPSBhdG9pKGJ1ZmZlci5zdWJzdHIocG9zLCBwb3MyIC0gcG9zKS5jX3N0cigpKTsKKyAgYnVmZmVyLmVyYXNlKDAsIHBvcyk7CisgIGJ1ZmZlci5yZXNpemUocG9zMik7CisgIHRoaXMtPlRvdGFsUGh5c2ljYWxNZW1vcnkgPSBhdG9pKGJ1ZmZlci5jX3N0cigpKTsKICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ0NywxOSArNTQ1MiwxOSBAQAogewogICAvLyByZW1vdmUgXHIKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSAwOwotICB3aGlsZSAoKHBvcyA9IG91dHB1dC5maW5kKCJcciIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgIHdoaWxlICgocG9zID0gb3V0cHV0LmZpbmQoJ1xyJywgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBvdXRwdXQuZXJhc2UocG9zKTsKICAgfQogCiAgIC8vIHJlbW92ZSBcbgogICBwb3MgPSAwOwotICB3aGlsZSAoKHBvcyA9IG91dHB1dC5maW5kKCJcbiIsIHBvcykpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgIHdoaWxlICgocG9zID0gb3V0cHV0LmZpbmQoJ1xuJywgcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBvdXRwdXQuZXJhc2UocG9zKTsKICAgfQogfQogCiAvKiogUmV0dXJuIHRydWUgaWYgdGhlIG1hY2hpbmUgaXMgNjQgYml0cyAqLwotYm9vbCBTeXN0ZW1JbmZvcm1hdGlvbkltcGxlbWVudGF0aW9uOjpJczY0Qml0cygpCitib29sIFN5c3RlbUluZm9ybWF0aW9uSW1wbGVtZW50YXRpb246OklzNjRCaXRzKCkgY29uc3QKIHsKICAgcmV0dXJuIHRoaXMtPk9TSXM2NEJpdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9TeXN0ZW1JbmZvcm1hdGlvbi5oeHguaW4gYi9Tb3VyY2Uva3dzeXMvU3lzdGVtSW5mb3JtYXRpb24uaHh4LmluCmluZGV4IGZjNDJlOWQuLmM4ZWZkNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9TeXN0ZW1JbmZvcm1hdGlvbi5oeHguaW4KKysrIGIvU291cmNlL2t3c3lzL1N5c3RlbUluZm9ybWF0aW9uLmh4eC5pbgpAQCAtMTUsMTMgKzE1LDYgQEAKIAogY2xhc3MgQEtXU1lTX05BTUVTUEFDRUBfRVhQT1JUIFN5c3RlbUluZm9ybWF0aW9uCiB7Ci0jaWYgQEtXU1lTX1VTRV9MT05HX0xPTkdACi0gIHR5cGVkZWYgbG9uZyBsb25nIExvbmdMb25nOwotI2VsaWYgQEtXU1lTX1VTRV9fX0lOVDY0QAotICB0eXBlZGVmIF9faW50NjQgTG9uZ0xvbmc7Ci0jZWxzZQotIyAgZXJyb3IgIk5vIExvbmcgTG9uZyIKLSNlbmRpZgogICBmcmllbmQgY2xhc3MgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbjsKICAgU3lzdGVtSW5mb3JtYXRpb25JbXBsZW1lbnRhdGlvbiogSW1wbGVtZW50YXRpb247CiAKQEAgLTEwNCw3ICs5Nyw3IEBACiAgIGJvb2wgRG9lc0NQVVN1cHBvcnRDUFVJRCgpOwogCiAgIC8vIFJldHJpZXZlIGlkIG9mIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2VzcwotICBMb25nTG9uZyBHZXRQcm9jZXNzSWQoKTsKKyAgbG9uZyBsb25nIEdldFByb2Nlc3NJZCgpOwogCiAgIC8vIFJldHJpZXZlIG1lbW9yeSBpbmZvcm1hdGlvbiBpbiBNaUIuCiAgIHNpemVfdCBHZXRUb3RhbFZpcnR1YWxNZW1vcnkoKTsKQEAgLTEyMCw3ICsxMTMsNyBAQAogCiAgIC8vIFJldHJpZXZlIGFtb3VudCBvZiBwaHlzaWNhbCBtZW1vcnkgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0gaW4gS2lCCiAgIC8vIHVuaXRzLgotICBMb25nTG9uZyBHZXRIb3N0TWVtb3J5VG90YWwoKTsKKyAgbG9uZyBsb25nIEdldEhvc3RNZW1vcnlUb3RhbCgpOwogCiAgIC8vIEdldCB0b3RhbCBzeXN0ZW0gUkFNIGluIHVuaXRzIG9mIEtpQiBhdmFpbGFibGUgY29sZWN0aXZsZXkgdG8gYWxsCiAgIC8vIHByb2Nlc3NlcyBpbiBhIHByb2Nlc3MgZ3JvdXAuIEFuIGV4YW1wbGUgb2YgYSBwcm9jZXNzIGdyb3VwCkBAIC0xMjgsNyArMTIxLDcgQEAKICAgLy8gcGFyYWxsZWwuIFRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcG9ydGVkIG1heSBkaWZmZXIgZnJvbSB0aGUgaG9zdAogICAvLyB0b3RhbCBpZiBhIGhvc3Qgd2lkZSByZXNvdXJjZSBsaW1pdCBpcyBhcHBsaWVkLiBTdWNoIHJlb3VyY2UgbGltaXRzCiAgIC8vIGFyZSByZXBvcnRlZCB0byB1cyB2aWEgYW4gYXBwbGljYXRpb24gc3BlY2lmaWVkIGVudmlyb25tZW50IHZhcmlhYmxlLgotICBMb25nTG9uZyBHZXRIb3N0TWVtb3J5QXZhaWxhYmxlKGNvbnN0IGNoYXIqIGhvc3RMaW1pdEVudlZhck5hbWUgPSBudWxscHRyKTsKKyAgbG9uZyBsb25nIEdldEhvc3RNZW1vcnlBdmFpbGFibGUoY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSA9IG51bGxwdHIpOwogCiAgIC8vIEdldCB0b3RhbCBzeXN0ZW0gUkFNIGluIHVuaXRzIG9mIEtpQiBhdmFpbGFibGUgdG8gdGhpcyBwcm9jZXNzLgogICAvLyBUaGlzIG1heSBkaWZmZXIgZnJvbSB0aGUgaG9zdCBhdmFpbGFibGUgaWYgYSBwZXItcHJvY2VzcyByZXNvdXJjZQpAQCAtMTM2LDE0ICsxMjksMTQgQEAKICAgLy8gc3lzdGVtIHZpYSBybGltaXQgQVBJLiBSZXNvdXJjZSBsaW1pdHMgdGhhdCBhcmUgbm90IGltcG9zZWQgdmlhCiAgIC8vIHJsaW1pdCBBUEkgbWF5IGJlIHJlcG9ydGVkIHRvIHVzIHZpYSBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpZWQKICAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUuCi0gIExvbmdMb25nIEdldFByb2NNZW1vcnlBdmFpbGFibGUoY29uc3QgY2hhciogaG9zdExpbWl0RW52VmFyTmFtZSA9IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJvY0xpbWl0RW52VmFyTmFtZSA9IG51bGxwdHIpOworICBsb25nIGxvbmcgR2V0UHJvY01lbW9yeUF2YWlsYWJsZShjb25zdCBjaGFyKiBob3N0TGltaXRFbnZWYXJOYW1lID0gbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJvY0xpbWl0RW52VmFyTmFtZSA9IG51bGxwdHIpOwogCiAgIC8vIEdldCB0aGUgc3lzdGVtIFJBTSB1c2VkIGJ5IGFsbCBwcm9jZXNzZXMgb24gdGhlIGhvc3QsIGluIHVuaXRzIG9mIEtpQi4KLSAgTG9uZ0xvbmcgR2V0SG9zdE1lbW9yeVVzZWQoKTsKKyAgbG9uZyBsb25nIEdldEhvc3RNZW1vcnlVc2VkKCk7CiAKICAgLy8gR2V0IHN5c3RlbSBSQU0gdXNlZCBieSB0aGlzIHByb2Nlc3MgaWQgaW4gdW5pdHMgb2YgS2lCLgotICBMb25nTG9uZyBHZXRQcm9jTWVtb3J5VXNlZCgpOworICBsb25nIGxvbmcgR2V0UHJvY01lbW9yeVVzZWQoKTsKIAogICAvLyBSZXR1cm4gdGhlIGxvYWQgYXZlcmFnZSBvZiB0aGUgbWFjaGluZSBvciAtMC4wIGlmIGl0IGNhbm5vdAogICAvLyBiZSBkZXRlcm1pbmVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmN4eCBiL1NvdXJjZS9rd3N5cy9TeXN0ZW1Ub29scy5jeHgKaW5kZXggY2U0ZDZlZi4uNjE0NGQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvU3lzdGVtVG9vbHMuY3h4CkBAIC02LDkgKzYsNyBAQAogIyAgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgICAgICBcCi0gICBkZWZpbmVkKF9fTUlOR1czMl9fKSkKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgKGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19NSU5HVzMyX18pKQogIyAgZGVmaW5lIEtXU1lTX1dJTkRPV1NfRElSUwogI2Vsc2UKICMgIGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpCkBAIC0yNCw2ICsyMiw3IEBACiAjaW5jbHVkZSBLV1NZU19IRUFERVIoRW5jb2RpbmcuaCkKICNpbmNsdWRlIEtXU1lTX0hFQURFUihFbmNvZGluZy5oeHgpCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8ZnN0cmVhbT4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzZXQ+CkBAIC00OSwyNyArNDgsMjcgQEAKICMgIHByYWdtYSBzZXQgd29mZiAxMzc1IC8qIGJhc2UgY2xhc3MgZGVzdHJ1Y3RvciBub3QgdmlydHVhbCAqLwogI2VuZGlmCiAKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Y2N0eXBlPgorI2luY2x1ZGUgPGNlcnJubz4KICNpZmRlZiBfX1FOWF9fCiAjICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogZm9yIG1hbGxvYy9mcmVlIG9uIFFOWCAqLwogI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxjdGltZT4KIAogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChfX0dOVUNfXykKICMgIGluY2x1ZGUgPHN0cmluZ3MuaD4gLyogZm9yIHN0cmNhc2VjbXAgKi8KICNlbmRpZgogCiAjaWZkZWYgX01TQ19WRVIKLSMgIGRlZmluZSB1bWFzayBfdW1hc2sgLy8gTm90ZSB0aGlzIGlzIHN0aWxsIHVtYXNrIG9uIEJvcmxhbmQKKyMgIGRlZmluZSB1bWFzayBfdW1hc2sKICNlbmRpZgogCiAvLyBzdXBwb3J0IGZvciByZWFscGF0aCBjYWxsCiAjaWZuZGVmIF9XSU4zMgotIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpbmNsdWRlIDxjbGltaXRzPgogIyAgaW5jbHVkZSA8cHdkLmg+CiAjICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CkBAIC04MCw3ICs3OSw3IEBACiAjICAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgogIyAgICBpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjICBlbmRpZgotIyAgaW5jbHVkZSA8c2lnbmFsLmg+IC8qIHNpZ3Byb2NtYXNrICovCisjICBpbmNsdWRlIDxjc2lnbmFsPiAvKiBzaWdwcm9jbWFzayAqLwogI2VuZGlmCiAKICNpZmRlZiBfX2xpbnV4CkBAIC05NywxOSArOTYsMTIgQEAKICMgIGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE4MDAKICMgICAgZGVmaW5lIEtXU1lTX1dJTkRPV1NfREVQUkVDQVRFRF9HZXRWZXJzaW9uRXgKICMgIGVuZGlmCi0jZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCi0jICBpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jICB1bmRlZiBfV0lOMzIKICNlbmRpZgogCiAjaWYgIUtXU1lTX0NYWF9IQVNfRU5WSVJPTl9JTl9TVERMSUJfSAogZXh0ZXJuIGNoYXIqKiBlbnZpcm9uOwogI2VuZGlmCiAKLSNpZmRlZiBfX0NZR1dJTl9fCi0jICBpbmNsdWRlIDxzeXMvY3lnd2luLmg+Ci0jZW5kaWYKLQogLy8gZ2V0cHduYW0gZG9lc24ndCBleGlzdCBvbiBXaW5kb3dzIGFuZCBDcmF5IFh0My9DYXRhbW91bnQKIC8vIHNhbWUgZm9yIFRJT0NHV0lOU1oKICNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0xJQkNBVEFNT1VOVF9fKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEyMyw5ICsxMTUsOSBAQAogCiAjZGVmaW5lIFZUS19VUkxfUFJPVE9DT0xfUkVHRVggIihbYS16QS1aMC05XSopOi8vKC4qKSIKICNkZWZpbmUgVlRLX1VSTF9SRUdFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIihbYS16QS1aMC05XSopOi8vKChbQS1aYS16MC05XSspKDooW146QF0rKSk/QCk/KFteOkAvXSspKDooWzAtOV0rKSk/LyIgICAgIFwKKyAgIihbYS16QS1aMC05XSopOi8vKChbQS1aYS16MC05XSspKDooW146QF0rKSk/QCk/KFteOkAvXSopKDooWzAtOV0rKSk/LyIgICAgIFwKICAgIiguKyk/IgotCisjZGVmaW5lIFZUS19VUkxfQllURV9SRUdFWCAiJVswLTlhLWZBLUZdWzAtOWEtZkEtRl0iCiAjaWZkZWYgX01TQ19WRVIKICMgIGluY2x1ZGUgPHN5cy91dGltZS5oPgogI2Vsc2UKQEAgLTE1Myw5ICsxNDUsNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9XSU4zMikgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCAgICAgIFwKLSAgIGRlZmluZWQoX19NSU5HVzMyX18pKQorI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAoZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX01JTkdXMzJfXykpCiAjICBpbmNsdWRlIDxkaXJlY3QuaD4KICMgIGluY2x1ZGUgPGlvLmg+CiAjICBkZWZpbmUgX3VubGluayB1bmxpbmsKQEAgLTE2OSwxMyArMTU5LDYgQEAKICNlbHNlCiAjICBkZWZpbmUgS1dTWVNfU1lTVEVNVE9PTFNfTUFYUEFUSCAxNjM4NAogI2VuZGlmCi0jaWYgZGVmaW5lZChfX1dBVENPTUNfXykKLSMgIGluY2x1ZGUgPGRpcmVjdC5oPgotIyAgZGVmaW5lIF9ta2RpciBta2RpcgotIyAgZGVmaW5lIF9ybWRpciBybWRpcgotIyAgZGVmaW5lIF9nZXRjd2QgZ2V0Y3dkCi0jICBkZWZpbmUgX2NoZGlyIGNoZGlyCi0jZW5kaWYKIAogI2lmIGRlZmluZWQoX19CRU9TX18pICYmICFkZWZpbmVkKF9fWkVUQV9fKQogIyAgaW5jbHVkZSA8YmUva2VybmVsL09TLmg+CkBAIC0yMjEsMTEgKzIwNCwxNyBAQAogCiAjaWZkZWYgS1dTWVNfV0lORE9XU19ESVJTCiAjICBpbmNsdWRlIDx3Y3R5cGUuaD4KKyMgIGlmZGVmIF9NU0NfVkVSCit0eXBlZGVmIEtXU1lTX05BTUVTUEFDRTo6U3lzdGVtVG9vbHM6Om1vZGVfdCBtb2RlX3Q7CisjICBlbmRpZgogCi1pbmxpbmUgaW50IE1rZGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIpCitpbmxpbmUgaW50IE1rZGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIsIGNvbnN0IG1vZGVfdCogbW9kZSkKIHsKLSAgcmV0dXJuIF93bWtkaXIoCi0gICAgS1dTWVNfTkFNRVNQQUNFOjpFbmNvZGluZzo6VG9XaW5kb3dzRXh0ZW5kZWRQYXRoKGRpcikuY19zdHIoKSk7CisgIGludCByZXQgPQorICAgIF93bWtkaXIoS1dTWVNfTkFNRVNQQUNFOjpFbmNvZGluZzo6VG9XaW5kb3dzRXh0ZW5kZWRQYXRoKGRpcikuY19zdHIoKSk7CisgIGlmIChyZXQgPT0gMCAmJiBtb2RlKQorICAgIEtXU1lTX05BTUVTUEFDRTo6U3lzdGVtVG9vbHM6OlNldFBlcm1pc3Npb25zKGRpciwgKm1vZGUpOworICByZXR1cm4gcmV0OwogfQogaW5saW5lIGludCBSbWRpcihjb25zdCBzdGQ6OnN0cmluZyYgZGlyKQogewpAQCAtMjUyLDExICsyNDEsNyBAQAogfQogaW5saW5lIGludCBDaGRpcihjb25zdCBzdGQ6OnN0cmluZyYgZGlyKQogewotIyAgaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0gIHJldHVybiBjaGRpcihkaXIuY19zdHIoKSk7Ci0jICBlbHNlCiAgIHJldHVybiBfd2NoZGlyKEtXU1lTX05BTUVTUEFDRTo6RW5jb2Rpbmc6OlRvV2lkZShkaXIpLmNfc3RyKCkpOwotIyAgZW5kaWYKIH0KIGlubGluZSB2b2lkIFJlYWxwYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoLCBzdGQ6OnN0cmluZyYgcmVzb2x2ZWRfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKQpAQCAtMjk1LDkgKzI4MCw5IEBACiAKICMgIGluY2x1ZGUgPGZjbnRsLmg+CiAjICBpbmNsdWRlIDx1bmlzdGQuaD4KLWlubGluZSBpbnQgTWtkaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcikKK2lubGluZSBpbnQgTWtkaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwgY29uc3QgbW9kZV90KiBtb2RlKQogewotICByZXR1cm4gbWtkaXIoZGlyLmNfc3RyKCksIDAwNzc3KTsKKyAgcmV0dXJuIG1rZGlyKGRpci5jX3N0cigpLCBtb2RlID8gKm1vZGUgOiAwMDc3Nyk7CiB9CiBpbmxpbmUgaW50IFJtZGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXIpCiB7CkBAIC0zNTAsNyArMzM1LDcgQEAKIAogbmFtZXNwYWNlIEtXU1lTX05BTUVTUEFDRSB7CiAKLWRvdWJsZSBTeXN0ZW1Ub29sczo6R2V0VGltZSh2b2lkKQorZG91YmxlIFN5c3RlbVRvb2xzOjpHZXRUaW1lKCkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICAgRklMRVRJTUUgZnQ7CkBAIC0zNjgsNyArMzUzLDcgQEAKICNpZiBkZWZpbmVkKF9XSU4zMikKIHR5cGVkZWYgd2NoYXJfdCBlbnZjaGFyOwogI2Vsc2UKLXR5cGVkZWYgY2hhciBlbnZjaGFyOwordXNpbmcgZW52Y2hhciA9IGNoYXI7CiAjZW5kaWYKIAogLyogT3JkZXIgYnkgZW52aXJvbm1lbnQga2V5IG9ubHkgKFZBUiBmcm9tIFZBUj1WQUxVRSkuICAqLwpAQCAtNDIxLDcgKzQwNiw3IEBACiAgIGNvbnN0IGVudmNoYXIqIFJlbGVhc2UoY29uc3QgZW52Y2hhciogZW52KQogICB7CiAgICAgY29uc3QgZW52Y2hhciogb2xkID0gbnVsbHB0cjsKLSAgICBpdGVyYXRvciBpID0gdGhpcy0+ZmluZChlbnYpOworICAgIGF1dG8gaSA9IHRoaXMtPmZpbmQoZW52KTsKICAgICBpZiAoaSAhPSB0aGlzLT5lbmQoKSkgewogICAgICAgb2xkID0gKmk7CiAgICAgICB0aGlzLT5lcmFzZShpKTsKQEAgLTQ1Miw3ICs0MzcsNyBAQAogY2xhc3MgU3lzdGVtVG9vbHNTdGF0aWMKIHsKIHB1YmxpYzoKLSAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IFN0cmluZ01hcDsKKyAgdXNpbmcgU3RyaW5nTWFwID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjsKICNpZiBLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQCiAgIC8qKgogICAgKiBQYXRoIHRyYW5zbGF0aW9uIHRhYmxlIGZyb20gZGlyIHRvIHJlZmRpcgpAQCAtNDg4LDEwICs0NzMsMTMgQEAKICAgICovCiAgIHN0YXRpYyBzdGQ6OnN0cmluZyBGaW5kTmFtZSgKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHBhdGggPSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSwKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHVzZXJQYXRocyA9IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpLAogICAgIGJvb2wgbm9fc3lzdGVtX3BhdGggPSBmYWxzZSk7CiB9OwogCisvLyBEbyBOT1QgaW5pdGlhbGl6ZS4gIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gdG8gemVybyBpcyBuZWNlc3NhcnkuCitzdGF0aWMgU3lzdGVtVG9vbHNTdGF0aWMqIFN5c3RlbVRvb2xzU3RhdGljczsKKwogI2lmZGVmIF9XSU4zMgogc3RkOjpzdHJpbmcgU3lzdGVtVG9vbHNTdGF0aWM6OkdldENhc2VQYXRoTmFtZShzdGQ6OnN0cmluZyBjb25zdCYgcGF0aEluKQogewpAQCAtNTY2LDcgKzU1NCw3IEBACiB7CiAgIC8vIENoZWNrIHRvIHNlZSBpZiBhY3R1YWwgY2FzZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZAogICAvLyBmb3IgdGhpcyBwYXRoLCBhbmQgdGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIFBhdGhDYXNlTWFwCi0gIGF1dG8mIHBjbSA9IFN5c3RlbVRvb2xzOjpTdGF0aWNzLT5QYXRoQ2FzZU1hcDsKKyAgYXV0byYgcGNtID0gU3lzdGVtVG9vbHNTdGF0aWNzLT5QYXRoQ2FzZU1hcDsKICAgewogICAgIGF1dG8gaXRyID0gcGNtLmZpbmQocCk7CiAgICAgaWYgKGl0ciAhPSBwY20uZW5kKCkpIHsKQEAgLTYxMyw4ICs2MDEsNyBAQAogICAgICAgZG9uZSA9IHRydWU7CiAgICAgfQogICB9Ci0gIGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OjppdGVyYXRvciBpID0gcGF0aC5iZWdpbigpICsgb2xkX3NpemU7Ci0gICAgICAgaSAhPSBwYXRoLmVuZCgpOyArK2kpIHsKKyAgZm9yIChhdXRvIGkgPSBwYXRoLmJlZ2luKCkgKyBvbGRfc2l6ZTsgaSAhPSBwYXRoLmVuZCgpOyArK2kpIHsKICAgICBTeXN0ZW1Ub29sczo6Q29udmVydFRvVW5peFNsYXNoZXMoKmkpOwogICB9CiB9CkBAIC02MjQsNyArNjExLDcgQEAKIHsKICAgc3RkOjpzdHJpbmcgZW52OwogICBpZiAoU3lzdGVtVG9vbHM6OkdldEVudihrZXksIGVudikpIHsKLSAgICBzdGQ6OnN0cmluZyYgbWVudiA9IFN5c3RlbVRvb2xzOjpTdGF0aWNzLT5FbnZNYXBba2V5XTsKKyAgICBzdGQ6OnN0cmluZyYgbWVudiA9IFN5c3RlbVRvb2xzU3RhdGljcy0+RW52TWFwW2tleV07CiAgICAgaWYgKG1lbnYgIT0gZW52KSB7CiAgICAgICBtZW52ID0gc3RkOjptb3ZlKGVudik7CiAgICAgfQpAQCAtODg0LDggKzg3MSwxMiBAQAogRklMRSogU3lzdGVtVG9vbHM6OkZvcGVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlLCBjb25zdCBjaGFyKiBtb2RlKQogewogI2lmZGVmIF9XSU4zMgorICAvLyBSZW1vdmUgYW55ICdlJywgd2hpY2ggaXMgc3VwcG9ydGVkIG9uIFVOSVgsIGJ1dCBub3QgV2luZG93cy4KKyAgc3RkOjp3c3RyaW5nIHRyaW1tZWRNb2RlID0gRW5jb2Rpbmc6OlRvV2lkZShtb2RlKTsKKyAgdHJpbW1lZE1vZGUuZXJhc2Uoc3RkOjpyZW1vdmUodHJpbW1lZE1vZGUuYmVnaW4oKSwgdHJpbW1lZE1vZGUuZW5kKCksIEwnZScpLAorICAgICAgICAgICAgICAgICAgICB0cmltbWVkTW9kZS5lbmQoKSk7CiAgIHJldHVybiBfd2ZvcGVuKEVuY29kaW5nOjpUb1dpbmRvd3NFeHRlbmRlZFBhdGgoZmlsZSkuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgRW5jb2Rpbmc6OlRvV2lkZShtb2RlKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgdHJpbW1lZE1vZGUuY19zdHIoKSk7CiAjZWxzZQogICByZXR1cm4gZm9wZW4oZmlsZS5jX3N0cigpLCBtb2RlKTsKICNlbmRpZgpAQCAtOTEzLDI5ICs5MDQsMjIgQEAKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSAwOwogICBzdGQ6OnN0cmluZyB0b3BkaXI7CiAgIHdoaWxlICgocG9zID0gZGlyLmZpbmQoJy8nLCBwb3MpKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHRvcGRpciA9IGRpci5zdWJzdHIoMCwgcG9zKTsKKyAgICAvLyBhbGwgdW5kZXJseWluZyBmdW5jdGlvbnMgdXNlIEMgc3RyaW5ncywgc28gdGVtcG9yYXJpbHkKKyAgICAvLyBlbmQgdGhlIHN0cmluZyBoZXJlCisgICAgZGlyW3Bvc10gPSAnXDAnOwogCi0gICAgaWYgKE1rZGlyKHRvcGRpcikgPT0gMCAmJiBtb2RlICE9IG51bGxwdHIpIHsKLSAgICAgIFN5c3RlbVRvb2xzOjpTZXRQZXJtaXNzaW9ucyh0b3BkaXIsICptb2RlKTsKLSAgICB9CisgICAgTWtkaXIoZGlyLCBtb2RlKTsKKyAgICBkaXJbcG9zXSA9ICcvJzsKIAogICAgICsrcG9zOwogICB9CiAgIHRvcGRpciA9IGRpcjsKLSAgaWYgKE1rZGlyKHRvcGRpcikgIT0gMCkgewotICAgIC8vIFRoZXJlIGlzIGEgYnVnIGluIHRoZSBCb3JsYW5kIFJ1biB0aW1lIGxpYnJhcnkgd2hpY2ggbWFrZXMgTUtESVIKLSAgICAvLyByZXR1cm4gRUFDQ0VTIHdoZW4gaXQgc2hvdWxkIHJldHVybiBFRVhJU1RTCisgIGlmIChNa2Rpcih0b3BkaXIsIG1vZGUpICE9IDApIHsKICAgICAvLyBpZiBpdCBpcyBzb21lIG90aGVyIGVycm9yIGJlc2lkZXMgZGlyZWN0b3J5IGV4aXN0cwogICAgIC8vIHRoZW4gcmV0dXJuIGZhbHNlCi0gICAgaWYgKChlcnJubyAhPSBFRVhJU1QpCi0jaWZkZWYgX19CT1JMQU5EQ19fCi0gICAgICAgICYmIChlcnJubyAhPSBFQUNDRVMpCi0jZW5kaWYKLSAgICApIHsKKyAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICB9IGVsc2UgaWYgKG1vZGUgIT0gbnVsbHB0cikgewotICAgIFN5c3RlbVRvb2xzOjpTZXRQZXJtaXNzaW9ucyh0b3BkaXIsICptb2RlKTsKICAgfQogCiAgIHJldHVybiB0cnVlOwpAQCAtMTAxMSwzOCArOTk1LDQwIEBACiAjICAgIGRlZmluZSBLV1NZU19TVF9LRVlfV09XNjRfNjRLRVkgMHgwMTAwCiAjICBlbmRpZgogCi1zdGF0aWMgYm9vbCBTeXN0ZW1Ub29sc1BhcnNlUmVnaXN0cnlLZXkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIS0VZJiBwcmltYXJ5S2V5LCBzdGQ6OnN0cmluZyYgc2Vjb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiB2YWx1ZW5hbWUpCitzdGF0aWMgYm9vbCBoYXNQcmVmaXgoY29uc3Qgc3RkOjpzdHJpbmcmIHMsIGNvbnN0IGNoYXIqIHBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzcG9zKQogewotICBzdGQ6OnN0cmluZyBwcmltYXJ5ID0ga2V5OworICBzaXplX3QgcGxlbiA9IHN0cmxlbihwYXR0ZXJuKTsKKyAgaWYgKHNwb3MgIT0gcGxlbikKKyAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiBzLmNvbXBhcmUoMCwgcGxlbiwgcGF0dGVybikgPT0gMDsKK30KIAotICBzaXplX3Qgc3RhcnQgPSBwcmltYXJ5LmZpbmQoJ1xcJyk7CitzdGF0aWMgYm9vbCBTeXN0ZW1Ub29sc1BhcnNlUmVnaXN0cnlLZXkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIS0VZJiBwcmltYXJ5S2V5LCBzdGQ6OndzdHJpbmcmIHNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogdmFsdWVuYW1lKQoreworICBzaXplX3Qgc3RhcnQgPSBrZXkuZmluZCgnXFwnKTsKICAgaWYgKHN0YXJ0ID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgc2l6ZV90IHZhbHVlbmFtZXBvcyA9IHByaW1hcnkuZmluZCgnOycpOwotICBpZiAodmFsdWVuYW1lcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgdmFsdWVuYW1lID0gcHJpbWFyeS5zdWJzdHIodmFsdWVuYW1lcG9zICsgMSk7CisgIHNpemVfdCB2YWx1ZW5hbWVwb3MgPSBrZXkuZmluZCgnOycpOworICBpZiAodmFsdWVuYW1lcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIHZhbHVlbmFtZSkgeworICAgICp2YWx1ZW5hbWUgPSBrZXkuc3Vic3RyKHZhbHVlbmFtZXBvcyArIDEpOwogICB9CiAKLSAgc2Vjb25kID0gcHJpbWFyeS5zdWJzdHIoc3RhcnQgKyAxLCB2YWx1ZW5hbWVwb3MgLSBzdGFydCAtIDEpOwotICBwcmltYXJ5ID0gcHJpbWFyeS5zdWJzdHIoMCwgc3RhcnQpOworICBzZWNvbmQgPSBFbmNvZGluZzo6VG9XaWRlKGtleS5zdWJzdHIoc3RhcnQgKyAxLCB2YWx1ZW5hbWVwb3MgLSBzdGFydCAtIDEpKTsKIAotICBpZiAocHJpbWFyeSA9PSAiSEtFWV9DVVJSRU5UX1VTRVIiKSB7CisgIGlmIChoYXNQcmVmaXgoa2V5LCAiSEtFWV9DVVJSRU5UX1VTRVIiLCBzdGFydCkpIHsKICAgICBwcmltYXJ5S2V5ID0gSEtFWV9DVVJSRU5UX1VTRVI7Ci0gIH0KLSAgaWYgKHByaW1hcnkgPT0gIkhLRVlfQ1VSUkVOVF9DT05GSUciKSB7CisgIH0gZWxzZSBpZiAoaGFzUHJlZml4KGtleSwgIkhLRVlfQ1VSUkVOVF9DT05GSUciLCBzdGFydCkpIHsKICAgICBwcmltYXJ5S2V5ID0gSEtFWV9DVVJSRU5UX0NPTkZJRzsKLSAgfQotICBpZiAocHJpbWFyeSA9PSAiSEtFWV9DTEFTU0VTX1JPT1QiKSB7CisgIH0gZWxzZSBpZiAoaGFzUHJlZml4KGtleSwgIkhLRVlfQ0xBU1NFU19ST09UIiwgc3RhcnQpKSB7CiAgICAgcHJpbWFyeUtleSA9IEhLRVlfQ0xBU1NFU19ST09UOwotICB9Ci0gIGlmIChwcmltYXJ5ID09ICJIS0VZX0xPQ0FMX01BQ0hJTkUiKSB7CisgIH0gZWxzZSBpZiAoaGFzUHJlZml4KGtleSwgIkhLRVlfTE9DQUxfTUFDSElORSIsIHN0YXJ0KSkgewogICAgIHByaW1hcnlLZXkgPSBIS0VZX0xPQ0FMX01BQ0hJTkU7Ci0gIH0KLSAgaWYgKHByaW1hcnkgPT0gIkhLRVlfVVNFUlMiKSB7CisgIH0gZWxzZSBpZiAoaGFzUHJlZml4KGtleSwgIkhLRVlfVVNFUlMiLCBzdGFydCkpIHsKICAgICBwcmltYXJ5S2V5ID0gSEtFWV9VU0VSUzsKICAgfQogCkBAIC0xMDc0LDE0ICsxMDYwLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5V09XNjQgdmlldykKIHsKICAgSEtFWSBwcmltYXJ5S2V5ID0gSEtFWV9DVVJSRU5UX1VTRVI7Ci0gIHN0ZDo6c3RyaW5nIHNlY29uZDsKLSAgc3RkOjpzdHJpbmcgdmFsdWVuYW1lOwotICBpZiAoIVN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShrZXksIHByaW1hcnlLZXksIHNlY29uZCwgdmFsdWVuYW1lKSkgeworICBzdGQ6OndzdHJpbmcgc2Vjb25kOworICBpZiAoIVN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShrZXksIHByaW1hcnlLZXksIHNlY29uZCwgbnVsbHB0cikpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBIS0VZIGhLZXk7Ci0gIGlmIChSZWdPcGVuS2V5RXhXKHByaW1hcnlLZXksIEVuY29kaW5nOjpUb1dpZGUoc2Vjb25kKS5jX3N0cigpLCAwLAorICBpZiAoUmVnT3BlbktleUV4VyhwcmltYXJ5S2V5LCBzZWNvbmQuY19zdHIoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVG9vbHNNYWtlUmVnaXN0cnlNb2RlKEtFWV9SRUFELCB2aWV3KSwKICAgICAgICAgICAgICAgICAgICAgJmhLZXkpICE9IEVSUk9SX1NVQ0NFU1MpIHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTIxLDE0ICsxMTA2LDE0IEBACiB7CiAgIGJvb2wgdmFsdWVzZXQgPSBmYWxzZTsKICAgSEtFWSBwcmltYXJ5S2V5ID0gSEtFWV9DVVJSRU5UX1VTRVI7Ci0gIHN0ZDo6c3RyaW5nIHNlY29uZDsKKyAgc3RkOjp3c3RyaW5nIHNlY29uZDsKICAgc3RkOjpzdHJpbmcgdmFsdWVuYW1lOwotICBpZiAoIVN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShrZXksIHByaW1hcnlLZXksIHNlY29uZCwgdmFsdWVuYW1lKSkgeworICBpZiAoIVN5c3RlbVRvb2xzUGFyc2VSZWdpc3RyeUtleShrZXksIHByaW1hcnlLZXksIHNlY29uZCwgJnZhbHVlbmFtZSkpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBIS0VZIGhLZXk7Ci0gIGlmIChSZWdPcGVuS2V5RXhXKHByaW1hcnlLZXksIEVuY29kaW5nOjpUb1dpZGUoc2Vjb25kKS5jX3N0cigpLCAwLAorICBpZiAoUmVnT3BlbktleUV4VyhwcmltYXJ5S2V5LCBzZWNvbmQuY19zdHIoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVG9vbHNNYWtlUmVnaXN0cnlNb2RlKEtFWV9SRUFELCB2aWV3KSwKICAgICAgICAgICAgICAgICAgICAgJmhLZXkpICE9IEVSUk9SX1NVQ0NFU1MpIHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTc1LDE2ICsxMTYwLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBLZXlXT1c2NCB2aWV3KQogewogICBIS0VZIHByaW1hcnlLZXkgPSBIS0VZX0NVUlJFTlRfVVNFUjsKLSAgc3RkOjpzdHJpbmcgc2Vjb25kOworICBzdGQ6OndzdHJpbmcgc2Vjb25kOwogICBzdGQ6OnN0cmluZyB2YWx1ZW5hbWU7Ci0gIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCB2YWx1ZW5hbWUpKSB7CisgIGlmICghU3lzdGVtVG9vbHNQYXJzZVJlZ2lzdHJ5S2V5KGtleSwgcHJpbWFyeUtleSwgc2Vjb25kLCAmdmFsdWVuYW1lKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCiAgIEhLRVkgaEtleTsKICAgRFdPUkQgZHdEdW1teTsKICAgd2NoYXJfdCBscENsYXNzW10gPSBMIiI7Ci0gIGlmIChSZWdDcmVhdGVLZXlFeFcocHJpbWFyeUtleSwgRW5jb2Rpbmc6OlRvV2lkZShzZWNvbmQpLmNfc3RyKCksIDAsIGxwQ2xhc3MsCisgIGlmIChSZWdDcmVhdGVLZXlFeFcocHJpbWFyeUtleSwgc2Vjb25kLmNfc3RyKCksIDAsIGxwQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgUkVHX09QVElPTl9OT05fVk9MQVRJTEUsCiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVG9vbHNNYWtlUmVnaXN0cnlNb2RlKEtFWV9XUklURSwgdmlldyksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgJmhLZXksICZkd0R1bW15KSAhPSBFUlJPUl9TVUNDRVNTKSB7CkBAIC0xMjE5LDE0ICsxMjA0LDE0IEBACiBib29sIFN5c3RlbVRvb2xzOjpEZWxldGVSZWdpc3RyeVZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEtleVdPVzY0IHZpZXcpCiB7CiAgIEhLRVkgcHJpbWFyeUtleSA9IEhLRVlfQ1VSUkVOVF9VU0VSOwotICBzdGQ6OnN0cmluZyBzZWNvbmQ7CisgIHN0ZDo6d3N0cmluZyBzZWNvbmQ7CiAgIHN0ZDo6c3RyaW5nIHZhbHVlbmFtZTsKLSAgaWYgKCFTeXN0ZW1Ub29sc1BhcnNlUmVnaXN0cnlLZXkoa2V5LCBwcmltYXJ5S2V5LCBzZWNvbmQsIHZhbHVlbmFtZSkpIHsKKyAgaWYgKCFTeXN0ZW1Ub29sc1BhcnNlUmVnaXN0cnlLZXkoa2V5LCBwcmltYXJ5S2V5LCBzZWNvbmQsICZ2YWx1ZW5hbWUpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKICAgSEtFWSBoS2V5OwotICBpZiAoUmVnT3BlbktleUV4VyhwcmltYXJ5S2V5LCBFbmNvZGluZzo6VG9XaWRlKHNlY29uZCkuY19zdHIoKSwgMCwKKyAgaWYgKFJlZ09wZW5LZXlFeFcocHJpbWFyeUtleSwgc2Vjb25kLmNfc3RyKCksIDAsCiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVRvb2xzTWFrZVJlZ2lzdHJ5TW9kZShLRVlfV1JJVEUsIHZpZXcpLAogICAgICAgICAgICAgICAgICAgICAmaEtleSkgIT0gRVJST1JfU1VDQ0VTUykgewogICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTgsMTUgKzEyODMsNyBAQAogICBpZiAocGF0aC5lbXB0eSgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0jaWYgZGVmaW5lZChfX0NZR1dJTl9fKQotICAvLyBDb252ZXJ0IHBhdGggdG8gbmF0aXZlIHdpbmRvd3MgcGF0aCBpZiBwb3NzaWJsZS4KLSAgY2hhciB3aW5wYXRoW01BWF9QQVRIXTsKLSAgaWYgKFN5c3RlbVRvb2xzOjpQYXRoQ3lnd2luVG9XaW4zMihwYXRoLmNfc3RyKCksIHdpbnBhdGgpKSB7Ci0gICAgcmV0dXJuIChHZXRGaWxlQXR0cmlidXRlc0Eod2lucGF0aCkgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpOwotICB9Ci0gIHN0cnVjdCBzdGF0IHN0OwotICByZXR1cm4gbHN0YXQocGF0aC5jX3N0cigpLCAmc3QpID09IDA7Ci0jZWxpZiBkZWZpbmVkKF9XSU4zMikKKyNpZiBkZWZpbmVkKF9XSU4zMikKICAgcmV0dXJuIChHZXRGaWxlQXR0cmlidXRlc1coRW5jb2Rpbmc6OlRvV2luZG93c0V4dGVuZGVkUGF0aChwYXRoKS5jX3N0cigpKSAhPQogICAgICAgICAgIElOVkFMSURfRklMRV9BVFRSSUJVVEVTKTsKICNlbHNlCkBAIC0xMzI4LDE0ICsxMzA1LDcgQEAKICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCi0gIC8vIENvbnZlcnQgZmlsZW5hbWUgdG8gbmF0aXZlIHdpbmRvd3MgcGF0aCBpZiBwb3NzaWJsZS4KLSAgY2hhciB3aW5wYXRoW01BWF9QQVRIXTsKLSAgaWYgKFN5c3RlbVRvb2xzOjpQYXRoQ3lnd2luVG9XaW4zMihmaWxlbmFtZS5jX3N0cigpLCB3aW5wYXRoKSkgewotICAgIHJldHVybiAoR2V0RmlsZUF0dHJpYnV0ZXNBKHdpbnBhdGgpICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKTsKLSAgfQotICByZXR1cm4gYWNjZXNzKGZpbGVuYW1lLmNfc3RyKCksIFJfT0spID09IDA7Ci0jZWxpZiBkZWZpbmVkKF9XSU4zMikKKyNpZiBkZWZpbmVkKF9XSU4zMikKICAgRFdPUkQgYXR0ciA9CiAgICAgR2V0RmlsZUF0dHJpYnV0ZXNXKEVuY29kaW5nOjpUb1dpbmRvd3NFeHRlbmRlZFBhdGgoZmlsZW5hbWUpLmNfc3RyKCkpOwogICBpZiAoYXR0ciA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgewpAQCAtMTQzNSwzNyArMTQwNSwxNSBAQAogICAvLyBsb25nIHBhdGhzLCBidXQgX3dzdGF0NjQgcmVqZWN0cyBwYXRocyB3aXRoICc/JyBpbiB0aGVtLCB0aGlua2luZwogICAvLyB0aGV5IGFyZSB3aWxkY2FyZHMuCiAgIHN0ZDo6d3N0cmluZyBjb25zdCYgd3BhdGggPSBFbmNvZGluZzo6VG9XaWRlKHBhdGgpOwotIyAgaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0gIHJldHVybiBfd3N0YXRpNjQod3BhdGguY19zdHIoKSwgYnVmKTsKLSMgIGVsc2UKICAgcmV0dXJuIF93c3RhdDY0KHdwYXRoLmNfc3RyKCksIGJ1Zik7Ci0jICBlbmRpZgogI2Vsc2UKICAgcmV0dXJuIHN0YXQocGF0aC5jX3N0cigpLCBidWYpOwogI2VuZGlmCiB9CiAKLSNpZmRlZiBfX0NZR1dJTl9fCi1ib29sIFN5c3RlbVRvb2xzOjpQYXRoQ3lnd2luVG9XaW4zMihjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiB3aW4zMl9wYXRoKQotewotICBhdXRvIGl0ciA9IFN5c3RlbVRvb2xzOjpTdGF0aWNzLT5DeWcyV2luMzJNYXAuZmluZChwYXRoKTsKLSAgaWYgKGl0ciAhPSBTeXN0ZW1Ub29sczo6U3RhdGljcy0+Q3lnMldpbjMyTWFwLmVuZCgpKSB7Ci0gICAgc3RybmNweSh3aW4zMl9wYXRoLCBpdHItPnNlY29uZC5jX3N0cigpLCBNQVhfUEFUSCk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGN5Z3dpbl9jb252X3BhdGgoQ0NQX1BPU0lYX1RPX1dJTl9BLCBwYXRoLCB3aW4zMl9wYXRoLCBNQVhfUEFUSCkgIT0KLSAgICAgICAgMCkgewotICAgICAgd2luMzJfcGF0aFswXSA9IDA7Ci0gICAgfQotICAgIFN5c3RlbVRvb2xzOjpTdGF0aWNzLT5DeWcyV2luMzJNYXAuaW5zZXJ0KAotICAgICAgU3lzdGVtVG9vbHNTdGF0aWM6OlN0cmluZ01hcDo6dmFsdWVfdHlwZShwYXRoLCB3aW4zMl9wYXRoKSk7Ci0gIH0KLSAgcmV0dXJuIHdpbjMyX3BhdGhbMF0gIT0gMDsKLX0KLSNlbmRpZgotCiBib29sIFN5c3RlbVRvb2xzOjpUb3VjaChjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsIGJvb2wgY3JlYXRlKQogewotICBpZiAoIVN5c3RlbVRvb2xzOjpQYXRoRXhpc3RzKGZpbGVuYW1lKSkgeworICBpZiAoIVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKGZpbGVuYW1lKSkgewogICAgIGlmIChjcmVhdGUpIHsKICAgICAgIEZJTEUqIGZpbGUgPSBGb3BlbihmaWxlbmFtZSwgImErYiIpOwogICAgICAgaWYgKGZpbGUpIHsKQEAgLTE4NTgsNyArMTgwNiw3IEBACiAvLyBSZXR1cm4gYSBjcm9wcGVkIHN0cmluZwogc3RkOjpzdHJpbmcgU3lzdGVtVG9vbHM6OkNyb3BTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHMsIHNpemVfdCBtYXhfbGVuKQogewotICBpZiAoIXMuc2l6ZSgpIHx8IG1heF9sZW4gPT0gMCB8fCBtYXhfbGVuID49IHMuc2l6ZSgpKSB7CisgIGlmIChzLmVtcHR5KCkgfHwgbWF4X2xlbiA9PSAwIHx8IG1heF9sZW4gPj0gcy5zaXplKCkpIHsKICAgICByZXR1cm4gczsKICAgfQogCkBAIC0xODY3LDcgKzE4MTUsNyBAQAogCiAgIHNpemVfdCBtaWRkbGUgPSBtYXhfbGVuIC8gMjsKIAotICBuICs9IHMuc3Vic3RyKDAsIG1pZGRsZSk7CisgIG4uYXNzaWduKHMsIDAsIG1pZGRsZSk7CiAgIG4gKz0gcy5zdWJzdHIocy5zaXplKCkgLSAobWF4X2xlbiAtIG1pZGRsZSkpOwogCiAgIGlmIChtYXhfbGVuID4gMikgewpAQCAtMTg5MywxMCArMTg0MSwxMCBAQAogICB9CiAgIGlmIChpc1BhdGggJiYgcGF0aFswXSA9PSAnLycpIHsKICAgICBwYXRoLmVyYXNlKHBhdGguYmVnaW4oKSk7Ci0gICAgcGF0aHMucHVzaF9iYWNrKCIvIik7CisgICAgcGF0aHMuZW1wbGFjZV9iYWNrKCIvIik7CiAgIH0KICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MxID0gMDsKLSAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBwb3MyID0gcGF0aC5maW5kKHNlcCwgcG9zMSArIDEpOworICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvczIgPSBwYXRoLmZpbmQoc2VwLCBwb3MxKTsKICAgd2hpbGUgKHBvczIgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBwYXRocy5wdXNoX2JhY2socGF0aC5zdWJzdHIocG9zMSwgcG9zMiAtIHBvczEpKTsKICAgICBwb3MxID0gcG9zMiArIDE7CkBAIC0yMDY1LDggKzIwMTMsMTAgQEAKICNpZmRlZiBIQVZFX0dFVFBXTkFNCiAgIGVsc2UgaWYgKHBhdGhDU3RyaW5nWzBdID09ICd+JykgewogICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgaWR4ID0gcGF0aC5maW5kX2ZpcnN0X29mKCIvXDAiKTsKLSAgICBzdGQ6OnN0cmluZyB1c2VyID0gcGF0aC5zdWJzdHIoMSwgaWR4IC0gMSk7Ci0gICAgcGFzc3dkKiBwdyA9IGdldHB3bmFtKHVzZXIuY19zdHIoKSk7CisgICAgY2hhciBvbGRjaCA9IHBhdGhbaWR4XTsKKyAgICBwYXRoW2lkeF0gPSAnXDAnOworICAgIHBhc3N3ZCogcHcgPSBnZXRwd25hbShwYXRoLmNfc3RyKCkgKyAxKTsKKyAgICBwYXRoW2lkeF0gPSBvbGRjaDsKICAgICBpZiAocHcpIHsKICAgICAgIHBhdGgucmVwbGFjZSgwLCBpZHgsIHB3LT5wd19kaXIpOwogICAgIH0KQEAgLTIxMDMsNyArMjA1Myw3IEBACiAgICAgcmV0LmVyYXNlKHBvcywgMSk7CiAgIH0KICAgLy8gZXNjYXBlIHNwYWNlcyBhbmQgKCkgaW4gdGhlIHBhdGgKLSAgaWYgKHJldC5maW5kX2ZpcnN0X29mKCIgIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgaWYgKHJldC5maW5kX2ZpcnN0X29mKCcgJykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBzdGQ6OnN0cmluZyByZXN1bHQ7CiAgICAgY2hhciBsYXN0Y2ggPSAxOwogICAgIGZvciAoY29uc3QgY2hhciogY2ggPSByZXQuY19zdHIoKTsgKmNoICE9ICdcMCc7ICsrY2gpIHsKQEAgLTIxODYsMTIgKzIxMzYsMTUgQEAKICAgLy8gRmlsZXNEaWZmZXIgZG9lcyBub3QgaGFuZGxlIGZpbGUgdG8gZGlyZWN0b3J5IGNvbXBhcmUKICAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlSXNEaXJlY3RvcnkoZGVzdGluYXRpb24pKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmV3X2Rlc3RpbmF0aW9uID0gRmlsZUluRGlyKHNvdXJjZSwgZGVzdGluYXRpb24pOwotICAgIHJldHVybiBTeXN0ZW1Ub29sczo6Q29weUZpbGVJZkRpZmZlcmVudChzb3VyY2UsIG5ld19kZXN0aW5hdGlvbik7Ci0gIH0KLSAgLy8gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgZmlsZXMgc28gZG8gYSBjb3B5IGlmIHRoZXkKLSAgLy8gYXJlIGRpZmZlcmVudAotICBpZiAoU3lzdGVtVG9vbHM6OkZpbGVzRGlmZmVyKHNvdXJjZSwgZGVzdGluYXRpb24pKSB7Ci0gICAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb3B5RmlsZUFsd2F5cyhzb3VyY2UsIGRlc3RpbmF0aW9uKTsKKyAgICBpZiAoIVN5c3RlbVRvb2xzOjpDb21wYXJlUGF0aChuZXdfZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uKSkgeworICAgICAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb3B5RmlsZUlmRGlmZmVyZW50KHNvdXJjZSwgbmV3X2Rlc3RpbmF0aW9uKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgLy8gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgZmlsZXMgc28gZG8gYSBjb3B5IGlmIHRoZXkKKyAgICAvLyBhcmUgZGlmZmVyZW50CisgICAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlc0RpZmZlcihzb3VyY2UsIGRlc3RpbmF0aW9uKSkgeworICAgICAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb3B5RmlsZUFsd2F5cyhzb3VyY2UsIGRlc3RpbmF0aW9uKTsKKyAgICB9CiAgIH0KICAgLy8gYXQgdGhpcyBwb2ludCB0aGUgZmlsZXMgbXVzdCBiZSB0aGUgc2FtZSBzbyByZXR1cm4gdHJ1ZQogICByZXR1cm4gdHJ1ZTsKQEAgLTIzMjYsMTQgKzIyNzksOCBAQAogc3RhdGljIGJvb2wgQ29weUZpbGVDb250ZW50QmxvY2t3aXNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc3RpbmF0aW9uKQogewotLy8gT3BlbiBmaWxlcwotI2lmIGRlZmluZWQoX1dJTjMyKQotICBrd3N5czo6aWZzdHJlYW0gZmluKAotICAgIEVuY29kaW5nOjpUb05hcnJvdyhFbmNvZGluZzo6VG9XaW5kb3dzRXh0ZW5kZWRQYXRoKHNvdXJjZSkpLmNfc3RyKCksCi0gICAgc3RkOjppb3M6OmluIHwgc3RkOjppb3M6OmJpbmFyeSk7Ci0jZWxzZQorICAvLyBPcGVuIGZpbGVzCiAgIGt3c3lzOjppZnN0cmVhbSBmaW4oc291cmNlLmNfc3RyKCksIHN0ZDo6aW9zOjppbiB8IHN0ZDo6aW9zOjpiaW5hcnkpOwotI2VuZGlmCiAgIGlmICghZmluKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC0yMzQ0LDE0ICsyMjkxLDggQEAKICAgLy8gdGhhdCBkbyBub3QgYWxsb3cgZmlsZSByZW1vdmFsIGNhbiBiZSBtb2RpZmllZC4KICAgU3lzdGVtVG9vbHM6OlJlbW92ZUZpbGUoZGVzdGluYXRpb24pOwogCi0jaWYgZGVmaW5lZChfV0lOMzIpCi0gIGt3c3lzOjpvZnN0cmVhbSBmb3V0KAotICAgIEVuY29kaW5nOjpUb05hcnJvdyhFbmNvZGluZzo6VG9XaW5kb3dzRXh0ZW5kZWRQYXRoKGRlc3RpbmF0aW9uKSkuY19zdHIoKSwKLSAgICBzdGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6OnRydW5jIHwgc3RkOjppb3M6OmJpbmFyeSk7Ci0jZWxzZQogICBrd3N5czo6b2ZzdHJlYW0gZm91dChkZXN0aW5hdGlvbi5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6OnRydW5jIHwgc3RkOjppb3M6OmJpbmFyeSk7Ci0jZW5kaWYKICAgaWYgKCFmb3V0KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC0yNTEwLDggKzI0NTEsOCBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogICBmb3IgKGZpbGVOdW0gPSAwOyBmaWxlTnVtIDwgZGlyLkdldE51bWJlck9mRmlsZXMoKTsgKytmaWxlTnVtKSB7Ci0gICAgaWYgKHN0cmNtcChkaXIuR2V0RmlsZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihmaWxlTnVtKSksICIuIikgJiYKLSAgICAgICAgc3RyY21wKGRpci5HZXRGaWxlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGZpbGVOdW0pKSwgIi4uIikpIHsKKyAgICBpZiAoc3RyY21wKGRpci5HZXRGaWxlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGZpbGVOdW0pKSwgIi4iKSAhPSAwICYmCisgICAgICAgIHN0cmNtcChkaXIuR2V0RmlsZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihmaWxlTnVtKSksICIuLiIpICE9IDApIHsKICAgICAgIHN0ZDo6c3RyaW5nIGZ1bGxQYXRoID0gc291cmNlOwogICAgICAgZnVsbFBhdGggKz0gIi8iOwogICAgICAgZnVsbFBhdGggKz0gZGlyLkdldEZpbGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZmlsZU51bSkpOwpAQCAtMjY3Myw4ICsyNjE0LDggQEAKICAgZGlyLkxvYWQoc291cmNlKTsKICAgc2l6ZV90IGZpbGVOdW07CiAgIGZvciAoZmlsZU51bSA9IDA7IGZpbGVOdW0gPCBkaXIuR2V0TnVtYmVyT2ZGaWxlcygpOyArK2ZpbGVOdW0pIHsKLSAgICBpZiAoc3RyY21wKGRpci5HZXRGaWxlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGZpbGVOdW0pKSwgIi4iKSAmJgotICAgICAgICBzdHJjbXAoZGlyLkdldEZpbGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZmlsZU51bSkpLCAiLi4iKSkgeworICAgIGlmIChzdHJjbXAoZGlyLkdldEZpbGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZmlsZU51bSkpLCAiLiIpICE9IDAgJiYKKyAgICAgICAgc3RyY21wKGRpci5HZXRGaWxlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGZpbGVOdW0pKSwgIi4uIikgIT0gMCkgewogICAgICAgc3RkOjpzdHJpbmcgZnVsbFBhdGggPSBzb3VyY2U7CiAgICAgICBmdWxsUGF0aCArPSAiLyI7CiAgICAgICBmdWxsUGF0aCArPSBkaXIuR2V0RmlsZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihmaWxlTnVtKSk7CkBAIC0yODA2LDcgKzI3NDcsNyBAQAogICAgIGZvciAoc3RkOjpzdHJpbmcgY29uc3QmIGV4dCA6IGV4dGVuc2lvbnMpIHsKICAgICAgIHRyeVBhdGggPSBuYW1lOwogICAgICAgdHJ5UGF0aCArPSBleHQ7Ci0gICAgICBpZiAoU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHModHJ5UGF0aCwgdHJ1ZSkpIHsKKyAgICAgIGlmIChTeXN0ZW1Ub29sczo6RmlsZUlzRXhlY3V0YWJsZSh0cnlQYXRoKSkgewogICAgICAgICByZXR1cm4gU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgodHJ5UGF0aCk7CiAgICAgICB9CiAgICAgfQpAQCAtMjgxNCw3ICsyNzU1LDcgQEAKICNlbmRpZgogCiAgIC8vIG5vdyB0cnkganVzdCB0aGUgbmFtZQotICBpZiAoU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMobmFtZSwgdHJ1ZSkpIHsKKyAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlSXNFeGVjdXRhYmxlKG5hbWUpKSB7CiAgICAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKG5hbWUpOwogICB9CiAgIC8vIG5vdyBjb25zdHJ1Y3QgdGhlIHBhdGgKQEAgLTI4NDQsNyArMjc4NSw3IEBACiAgICAgICB0cnlQYXRoID0gcDsKICAgICAgIHRyeVBhdGggKz0gbmFtZTsKICAgICAgIHRyeVBhdGggKz0gZXh0OwotICAgICAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRyeVBhdGgsIHRydWUpKSB7CisgICAgICBpZiAoU3lzdGVtVG9vbHM6OkZpbGVJc0V4ZWN1dGFibGUodHJ5UGF0aCkpIHsKICAgICAgICAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHRyeVBhdGgpOwogICAgICAgfQogICAgIH0KQEAgLTI4NTIsNyArMjc5Myw3IEBACiAgICAgLy8gbm93IHRyeSBpdCB3aXRob3V0IHRoZW0KICAgICB0cnlQYXRoID0gcDsKICAgICB0cnlQYXRoICs9IG5hbWU7Ci0gICAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHRyeVBhdGgsIHRydWUpKSB7CisgICAgaWYgKFN5c3RlbVRvb2xzOjpGaWxlSXNFeGVjdXRhYmxlKHRyeVBhdGgpKSB7CiAgICAgICByZXR1cm4gU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgodHJ5UGF0aCk7CiAgICAgfQogICB9CkBAIC0zMDA3LDYgKzI5NDgsMTUgQEAKICAgfQogfQogCitib29sIFN5c3RlbVRvb2xzOjpGaWxlSXNFeGVjdXRhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKQoreworI2lmIGRlZmluZWQoX1dJTjMyKQorICByZXR1cm4gU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMobmFtZSwgdHJ1ZSk7CisjZWxzZQorICByZXR1cm4gIUZpbGVJc0RpcmVjdG9yeShuYW1lKSAmJiBUZXN0RmlsZUFjY2VzcyhuYW1lLCBURVNUX0ZJTEVfRVhFQ1VURSk7CisjZW5kaWYKK30KKwogYm9vbCBTeXN0ZW1Ub29sczo6RmlsZUlzU3ltbGluayhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMikKQEAgLTMxMTYsMTYgKzMwNjYsMTQgQEAKICAgcmV0dXJuIENoZGlyKGRpcik7CiB9CiAKLXN0ZDo6c3RyaW5nIFN5c3RlbVRvb2xzOjpHZXRDdXJyZW50V29ya2luZ0RpcmVjdG9yeShib29sIGNvbGxhcHNlKQorc3RkOjpzdHJpbmcgU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCkKIHsKICAgY2hhciBidWZbMjA0OF07CiAgIGNvbnN0IGNoYXIqIGN3ZCA9IEdldGN3ZChidWYsIDIwNDgpOwogICBzdGQ6OnN0cmluZyBwYXRoOwogICBpZiAoY3dkKSB7CiAgICAgcGF0aCA9IGN3ZDsKLSAgfQotICBpZiAoY29sbGFwc2UpIHsKLSAgICByZXR1cm4gU3lzdGVtVG9vbHM6OkNvbGxhcHNlRnVsbFBhdGgocGF0aCk7CisgICAgU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHBhdGgpOwogICB9CiAgIHJldHVybiBwYXRoOwogfQpAQCAtMzE0MSwxNyArMzA4OSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGlyLCBzdGQ6OnN0cmluZyYgZmlsZSwgYm9vbCkKIHsKICAgZGlyID0gaW5fbmFtZTsKLSAgZmlsZSA9ICIiOworICBmaWxlLmNsZWFyKCk7CiAgIFN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhkaXIpOwogCiAgIGlmICghU3lzdGVtVG9vbHM6OkZpbGVJc0RpcmVjdG9yeShkaXIpKSB7Ci0gICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzbGFzaFBvcyA9IGRpci5yZmluZCgiLyIpOworICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgc2xhc2hQb3MgPSBkaXIucmZpbmQoJy8nKTsKICAgICBpZiAoc2xhc2hQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICAgIGZpbGUgPSBkaXIuc3Vic3RyKHNsYXNoUG9zICsgMSk7Ci0gICAgICBkaXIgPSBkaXIuc3Vic3RyKDAsIHNsYXNoUG9zKTsKKyAgICAgIGRpci5yZXNpemUoc2xhc2hQb3MpOwogICAgIH0gZWxzZSB7CiAgICAgICBmaWxlID0gZGlyOwotICAgICAgZGlyID0gIiI7CisgICAgICBkaXIuY2xlYXIoKTsKICAgICB9CiAgIH0KICAgaWYgKCEoZGlyLmVtcHR5KCkpICYmICFTeXN0ZW1Ub29sczo6RmlsZUlzRGlyZWN0b3J5KGRpcikpIHsKQEAgLTMxNzMsNyArMzEyMSw3IEBACiAgIGZhaWx1cmVzLnB1c2hfYmFjayhzZWxmKTsKICAgU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKHNlbGYpOwogICBzZWxmID0gU3lzdGVtVG9vbHM6OkZpbmRQcm9ncmFtKHNlbGYpOwotICBpZiAoIVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHNlbGYpKSB7CisgIGlmICghU3lzdGVtVG9vbHM6OkZpbGVJc0V4ZWN1dGFibGUoc2VsZikpIHsKICAgICBpZiAoYnVpbGREaXIpIHsKICAgICAgIHN0ZDo6c3RyaW5nIGludGRpciA9ICIuIjsKICNpZmRlZiBDTUFLRV9JTlRESVIKQEAgLTMxODgsMTQgKzMxMzYsMTQgQEAKICAgICB9CiAgIH0KICAgaWYgKGluc3RhbGxQcmVmaXgpIHsKLSAgICBpZiAoIVN5c3RlbVRvb2xzOjpGaWxlRXhpc3RzKHNlbGYpKSB7CisgICAgaWYgKCFTeXN0ZW1Ub29sczo6RmlsZUlzRXhlY3V0YWJsZShzZWxmKSkgewogICAgICAgZmFpbHVyZXMucHVzaF9iYWNrKHNlbGYpOwogICAgICAgc2VsZiA9IGluc3RhbGxQcmVmaXg7CiAgICAgICBzZWxmICs9ICIvYmluLyI7CiAgICAgICBzZWxmICs9IGV4ZU5hbWU7CiAgICAgfQogICB9Ci0gIGlmICghU3lzdGVtVG9vbHM6OkZpbGVFeGlzdHMoc2VsZikpIHsKKyAgaWYgKCFTeXN0ZW1Ub29sczo6RmlsZUlzRXhlY3V0YWJsZShzZWxmKSkgewogICAgIGZhaWx1cmVzLnB1c2hfYmFjayhzZWxmKTsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwogICAgIG1zZyA8PCAiQ2FuIG5vdCBmaW5kIHRoZSBjb21tYW5kIGxpbmUgcHJvZ3JhbSAiOwpAQCAtMzIxNywxMSArMzE2NSw2IEBACiAgIHJldHVybiB0cnVlOwogfQogCi1zdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgaW5fcmVsYXRpdmUpCi17Ci0gIHJldHVybiBTeXN0ZW1Ub29sczo6Q29sbGFwc2VGdWxsUGF0aChpbl9yZWxhdGl2ZSwgbnVsbHB0cik7Ci19Ci0KICNpZiBLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQCiB2b2lkIFN5c3RlbVRvb2xzOjpBZGRUcmFuc2xhdGlvblBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGIpCkBAIC0zMjQ2LDcgKzMxODksNyBAQAogICAgICAgICBwYXRoX2IgKz0gJy8nOwogICAgICAgfQogICAgICAgaWYgKCEocGF0aF9hID09IHBhdGhfYikpIHsKLSAgICAgICAgU3lzdGVtVG9vbHM6OlN0YXRpY3MtPlRyYW5zbGF0aW9uTWFwLmluc2VydCgKKyAgICAgICAgU3lzdGVtVG9vbHNTdGF0aWNzLT5UcmFuc2xhdGlvbk1hcC5pbnNlcnQoCiAgICAgICAgICAgU3lzdGVtVG9vbHNTdGF0aWM6OlN0cmluZ01hcDo6dmFsdWVfdHlwZShzdGQ6Om1vdmUocGF0aF9hKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShwYXRoX2IpKSk7CiAgICAgICB9CkBAIC0zMjc2LDkgKzMyMTksOSBAQAogCiAgIC8vIEluIGNhc2UgYSBmaWxlIHdhcyBzcGVjaWZpZWQgd2Ugc3RpbGwgaGF2ZSB0byBnbyB0aHJvdWdoIHRoaXM6CiAgIC8vIE5vdyBjb252ZXJ0IGFueSBwYXRoIGZvdW5kIGluIHRoZSB0YWJsZSBiYWNrIHRvIHRoZSBvbmUgZGVzaXJlZDoKLSAgZm9yIChhdXRvIGNvbnN0JiBwYWlyIDogU3lzdGVtVG9vbHM6OlN0YXRpY3MtPlRyYW5zbGF0aW9uTWFwKSB7CisgIGZvciAoYXV0byBjb25zdCYgcGFpciA6IFN5c3RlbVRvb2xzU3RhdGljcy0+VHJhbnNsYXRpb25NYXApIHsKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIG9mIHRoZSBwYXRoIGlzIGEgc3Vic3RyaW5nIG9mIHRoZSBvdGhlciBwYXRoCi0gICAgaWYgKHBhdGguZmluZChwYWlyLmZpcnN0KSA9PSAwKSB7CisgICAgaWYgKHBhdGguY29tcGFyZSgwLCBwYWlyLmZpcnN0LnNpemUoKSwgcGFpci5maXJzdCkgPT0gMCkgewogICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgwLCBwYWlyLmZpcnN0LnNpemUoKSwgcGFpci5zZWNvbmQpOwogICAgIH0KICAgfQpAQCAtMzMxMSwyNSArMzI1NCwxMCBAQAogICB9CiB9CiAKLXN0ZDo6c3RyaW5nIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbl9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5fYmFzZSkKLXsKLSAgLy8gVXNlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFzIGEgYmFzZSBwYXRoLgotICBjaGFyIGJ1ZlsyMDQ4XTsKLSAgY29uc3QgY2hhciogcmVzX2luX2Jhc2UgPSBpbl9iYXNlOwotICBpZiAoIXJlc19pbl9iYXNlKSB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGN3ZCA9IEdldGN3ZChidWYsIDIwNDgpKSB7Ci0gICAgICByZXNfaW5fYmFzZSA9IGN3ZDsKLSAgICB9IGVsc2UgewotICAgICAgcmVzX2luX2Jhc2UgPSAiIjsKLSAgICB9Ci0gIH0KK25hbWVzcGFjZSB7CiAKLSAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGluX3BhdGgsIHN0ZDo6c3RyaW5nKHJlc19pbl9iYXNlKSk7Ci19Ci0KLXN0ZDo6c3RyaW5nIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbl9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGluX2Jhc2UpCitzdGQ6OnN0cmluZyBDb2xsYXBzZUZ1bGxQYXRoSW1wbChzdGQ6OnN0cmluZyBjb25zdCYgaW5fcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0KiBpbl9iYXNlKQogewogICAvLyBDb2xsZWN0IHRoZSBvdXRwdXQgcGF0aCBjb21wb25lbnRzLgogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3V0X2NvbXBvbmVudHM7CkBAIC0zMzQyLDggKzMyNzAsMTUgQEAKICAgLy8gSWYgdGhlIGlucHV0IHBhdGggaXMgcmVsYXRpdmUsIHN0YXJ0IHdpdGggYSBiYXNlIHBhdGguCiAgIGlmIChwYXRoX2NvbXBvbmVudHNbMF0uZW1wdHkoKSkgewogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBiYXNlX2NvbXBvbmVudHM7Ci0gICAgLy8gVXNlIHRoZSBnaXZlbiBiYXNlIHBhdGguCi0gICAgU3lzdGVtVG9vbHM6OlNwbGl0UGF0aChpbl9iYXNlLCBiYXNlX2NvbXBvbmVudHMpOworCisgICAgaWYgKGluX2Jhc2UpIHsKKyAgICAgIC8vIFVzZSB0aGUgZ2l2ZW4gYmFzZSBwYXRoLgorICAgICAgU3lzdGVtVG9vbHM6OlNwbGl0UGF0aCgqaW5fYmFzZSwgYmFzZV9jb21wb25lbnRzKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gVXNlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFzIGEgYmFzZSBwYXRoLgorICAgICAgc3RkOjpzdHJpbmcgY3dkID0gU3lzdGVtVG9vbHM6OkdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CisgICAgICBTeXN0ZW1Ub29sczo6U3BsaXRQYXRoKGN3ZCwgYmFzZV9jb21wb25lbnRzKTsKKyAgICB9CiAKICAgICAvLyBBcHBlbmQgYmFzZSBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIG91dHB1dCBwYXRoLgogICAgIG91dF9jb21wb25lbnRzLnB1c2hfYmFjayhiYXNlX2NvbXBvbmVudHNbMF0pOwpAQCAtMzM3NiwxMiArMzMxMSwzNCBAQAogICBTeXN0ZW1Ub29sczo6Q2hlY2tUcmFuc2xhdGlvblBhdGgobmV3UGF0aCk7CiAjZW5kaWYKICNpZmRlZiBfV0lOMzIKLSAgbmV3UGF0aCA9IFN5c3RlbVRvb2xzOjpTdGF0aWNzLT5HZXRBY3R1YWxDYXNlRm9yUGF0aENhY2hlZChuZXdQYXRoKTsKKyAgbmV3UGF0aCA9IFN5c3RlbVRvb2xzU3RhdGljcy0+R2V0QWN0dWFsQ2FzZUZvclBhdGhDYWNoZWQobmV3UGF0aCk7CiAgIFN5c3RlbVRvb2xzOjpDb252ZXJ0VG9Vbml4U2xhc2hlcyhuZXdQYXRoKTsKICNlbmRpZgogICAvLyBSZXR1cm4gdGhlIHJlY29uc3RydWN0ZWQgcGF0aC4KICAgcmV0dXJuIG5ld1BhdGg7CiB9Cit9CisKK3N0ZDo6c3RyaW5nIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbl9wYXRoKQoreworICByZXR1cm4gQ29sbGFwc2VGdWxsUGF0aEltcGwoaW5fcGF0aCwgbnVsbHB0cik7Cit9CisKK3N0ZDo6c3RyaW5nIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbl9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5fYmFzZSkKK3sKKyAgaWYgKCFpbl9iYXNlKSB7CisgICAgcmV0dXJuIENvbGxhcHNlRnVsbFBhdGhJbXBsKGluX3BhdGgsIG51bGxwdHIpOworICB9CisgIHN0ZDo6c3RyaW5nIHRtcF9iYXNlID0gaW5fYmFzZTsKKyAgcmV0dXJuIENvbGxhcHNlRnVsbFBhdGhJbXBsKGluX3BhdGgsICZ0bXBfYmFzZSk7Cit9CisKK3N0ZDo6c3RyaW5nIFN5c3RlbVRvb2xzOjpDb2xsYXBzZUZ1bGxQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbl9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGluX2Jhc2UpCit7CisgIHJldHVybiBDb2xsYXBzZUZ1bGxQYXRoSW1wbChpbl9wYXRoLCAmaW5fYmFzZSk7Cit9CiAKIC8vIGNvbXB1dGUgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSBoZXJlIHRvIHRoZXJlCiBzdGQ6OnN0cmluZyBTeXN0ZW1Ub29sczo6UmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBsb2NhbCwKQEAgLTM1NTAsNyArMzUwNyw3IEBACiAgICAgLy8gRXhwYW5kIGhvbWUgZGlyZWN0b3J5IHJlZmVyZW5jZXMgaWYgcmVxdWVzdGVkLgogICAgIGlmIChleHBhbmRfaG9tZV9kaXIgJiYgIXJvb3QuZW1wdHkoKSAmJiByb290WzBdID09ICd+JykgewogICAgICAgc3RkOjpzdHJpbmcgaG9tZWRpcjsKLSAgICAgIHJvb3QgPSByb290LnN1YnN0cigwLCByb290LnNpemUoKSAtIDEpOworICAgICAgcm9vdC5yZXNpemUocm9vdC5zaXplKCkgLSAxKTsKICAgICAgIGlmIChyb290LnNpemUoKSA9PSAxKSB7CiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAgICAgICAgIGlmICghU3lzdGVtVG9vbHM6OkdldEVudigiVVNFUlBST0ZJTEUiLCBob21lZGlyKSkKQEAgLTM1ODAsMTQgKzM1MzcsMTQgQEAKICAgZm9yICg7ICpsYXN0OyArK2xhc3QpIHsKICAgICBpZiAoKmxhc3QgPT0gJy8nIHx8ICpsYXN0ID09ICdcXCcpIHsKICAgICAgIC8vIEVuZCBvZiBhIGNvbXBvbmVudC4gIFNhdmUgaXQuCi0gICAgICBjb21wb25lbnRzLnB1c2hfYmFjayhzdGQ6OnN0cmluZyhmaXJzdCwgbGFzdCkpOworICAgICAgY29tcG9uZW50cy5lbXBsYWNlX2JhY2soZmlyc3QsIGxhc3QpOwogICAgICAgZmlyc3QgPSBsYXN0ICsgMTsKICAgICB9CiAgIH0KIAogICAvLyBTYXZlIHRoZSBsYXN0IGNvbXBvbmVudCB1bmxlc3MgdGhlcmUgd2VyZSBubyBjb21wb25lbnRzLgogICBpZiAobGFzdCAhPSBjKSB7Ci0gICAgY29tcG9uZW50cy5wdXNoX2JhY2soc3RkOjpzdHJpbmcoZmlyc3QsIGxhc3QpKTsKKyAgICBjb21wb25lbnRzLmVtcGxhY2VfYmFjayhmaXJzdCwgbGFzdCk7CiAgIH0KIH0KIApAQCAtMzYwMyw3ICszNTYwLDcgQEAKICAgLy8gQ29uc3RydWN0IHJlc3VsdCBpbiBhIHNpbmdsZSBzdHJpbmcuCiAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKICAgc2l6ZV90IGxlbiA9IDA7Ci0gIGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpID0gZmlyc3Q7IGkgIT0gbGFzdDsgKytpKSB7CisgIGZvciAoYXV0byBpID0gZmlyc3Q7IGkgIT0gbGFzdDsgKytpKSB7CiAgICAgbGVuICs9IDEgKyBpLT5zaXplKCk7CiAgIH0KICAgcmVzdWx0LnJlc2VydmUobGVuKTsKQEAgLTM2OTQsMTkgKzM2NTEsMjAgQEAKICAgc3RkOjpzdHJpbmcgZm4gPSBmaWxlbmFtZTsKICAgU3lzdGVtVG9vbHM6OkNvbnZlcnRUb1VuaXhTbGFzaGVzKGZuKTsKIAotICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNsYXNoX3BvcyA9IGZuLnJmaW5kKCIvIik7Ci0gIGlmIChzbGFzaF9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICBzdGQ6OnN0cmluZyByZXQgPSBmbi5zdWJzdHIoMCwgc2xhc2hfcG9zKTsKLSAgICBpZiAocmV0LnNpemUoKSA9PSAyICYmIHJldFsxXSA9PSAnOicpIHsKLSAgICAgIHJldHVybiByZXQgKyAnLyc7Ci0gICAgfQotICAgIGlmIChyZXQuZW1wdHkoKSkgewotICAgICAgcmV0dXJuICIvIjsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLSAgfSBlbHNlIHsKKyAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzbGFzaF9wb3MgPSBmbi5yZmluZCgnLycpOworICBpZiAoc2xhc2hfcG9zID09IDApIHsKKyAgICByZXR1cm4gIi8iOworICB9CisgIGlmIChzbGFzaF9wb3MgPT0gMiAmJiBmblsxXSA9PSAnOicpIHsKKyAgICAvLyBrZWVwIHRoZSAvIGFmdGVyIGEgZHJpdmUgbGV0dGVyCisgICAgZm4ucmVzaXplKDMpOworICAgIHJldHVybiBmbjsKKyAgfQorICBpZiAoc2xhc2hfcG9zID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CiAgICAgcmV0dXJuICIiOwogICB9CisgIGZuLnJlc2l6ZShzbGFzaF9wb3MpOworICByZXR1cm4gZm47CiB9CiAKIC8qKgpAQCAtMzczNiw3ICszNjk0LDggQEAKICAgc3RkOjpzdHJpbmcgbmFtZSA9IFN5c3RlbVRvb2xzOjpHZXRGaWxlbmFtZU5hbWUoZmlsZW5hbWUpOwogICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGRvdF9wb3MgPSBuYW1lLmZpbmQoJy4nKTsKICAgaWYgKGRvdF9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICByZXR1cm4gbmFtZS5zdWJzdHIoZG90X3Bvcyk7CisgICAgbmFtZS5lcmFzZSgwLCBkb3RfcG9zKTsKKyAgICByZXR1cm4gbmFtZTsKICAgfSBlbHNlIHsKICAgICByZXR1cm4gIiI7CiAgIH0KQEAgLTM3NTEsNyArMzcxMCw4IEBACiAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZpbGVuYW1lKTsKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBkb3RfcG9zID0gbmFtZS5yZmluZCgnLicpOwogICBpZiAoZG90X3BvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHJldHVybiBuYW1lLnN1YnN0cihkb3RfcG9zKTsKKyAgICBuYW1lLmVyYXNlKDAsIGRvdF9wb3MpOworICAgIHJldHVybiBuYW1lOwogICB9IGVsc2UgewogICAgIHJldHVybiAiIjsKICAgfQpAQCAtMzc2NywxMCArMzcyNyw5IEBACiAgIHN0ZDo6c3RyaW5nIG5hbWUgPSBTeXN0ZW1Ub29sczo6R2V0RmlsZW5hbWVOYW1lKGZpbGVuYW1lKTsKICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBkb3RfcG9zID0gbmFtZS5maW5kKCcuJyk7CiAgIGlmIChkb3RfcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgcmV0dXJuIG5hbWUuc3Vic3RyKDAsIGRvdF9wb3MpOwotICB9IGVsc2UgewotICAgIHJldHVybiBuYW1lOworICAgIG5hbWUucmVzaXplKGRvdF9wb3MpOwogICB9CisgIHJldHVybiBuYW1lOwogfQogCiAvKioKQEAgLTM3ODQsMTAgKzM3NDMsOSBAQAogICBzdGQ6OnN0cmluZyBuYW1lID0gU3lzdGVtVG9vbHM6OkdldEZpbGVuYW1lTmFtZShmaWxlbmFtZSk7CiAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZG90X3BvcyA9IG5hbWUucmZpbmQoJy4nKTsKICAgaWYgKGRvdF9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICByZXR1cm4gbmFtZS5zdWJzdHIoMCwgZG90X3Bvcyk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAgbmFtZS5yZXNpemUoZG90X3Bvcyk7CiAgIH0KKyAgcmV0dXJuIG5hbWU7CiB9CiAKIGJvb2wgU3lzdGVtVG9vbHM6OkZpbGVIYXNTaWduYXR1cmUoY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSwKQEAgLTM4MzcsNyArMzc5NSw3IEBACiAKICAgLy8gQWxsb2NhdGUgYnVmZmVyIGFuZCByZWFkIGJ5dGVzCiAKLSAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gbmV3IHVuc2lnbmVkIGNoYXJbbGVuZ3RoXTsKKyAgYXV0byogYnVmZmVyID0gbmV3IHVuc2lnbmVkIGNoYXJbbGVuZ3RoXTsKICAgc2l6ZV90IHJlYWRfbGVuZ3RoID0gZnJlYWQoYnVmZmVyLCAxLCBsZW5ndGgsIGZwKTsKICAgZmNsb3NlKGZwKTsKICAgaWYgKHJlYWRfbGVuZ3RoID09IDApIHsKQEAgLTQwMDksNyArMzk2Nyw4IEBACiAKICAgLy8gaWYgdGhlIHBhdGggcGFzc2VkIGluIGhhcyBxdW90ZXMgYXJvdW5kIGl0LCBmaXJzdCByZW1vdmUgdGhlIHF1b3RlcwogICBpZiAoIXBhdGguZW1wdHkoKSAmJiBwYXRoWzBdID09ICciJyAmJiBwYXRoLmJhY2soKSA9PSAnIicpIHsKLSAgICB0ZW1wUGF0aCA9IHBhdGguc3Vic3RyKDEsIHBhdGgubGVuZ3RoKCkgLSAyKTsKKyAgICB0ZW1wUGF0aC5yZXNpemUocGF0aC5sZW5ndGgoKSAtIDEpOworICAgIHRlbXBQYXRoLmVyYXNlKDAsIDEpOwogICB9CiAKICAgc3RkOjp3c3RyaW5nIHd0ZW1wUGF0aCA9IEVuY29kaW5nOjpUb1dpZGUodGVtcFBhdGgpOwpAQCAtNDIyOCw4ICs0MTg3LDggQEAKICAgaWYgKHN1YmRpcltleHBlY3RlZFNsYXNoUG9zaXRpb25dICE9ICcvJykgewogICAgIHJldHVybiBmYWxzZTsKICAgfQotICBzdGQ6OnN0cmluZyBzID0gc3ViZGlyLnN1YnN0cigwLCBkaXIuc2l6ZSgpKTsKLSAgcmV0dXJuIFN5c3RlbVRvb2xzOjpDb21wYXJlUGF0aChzLCBkaXIpOworICBzdWJkaXIucmVzaXplKGRpci5zaXplKCkpOworICByZXR1cm4gU3lzdGVtVG9vbHM6OkNvbXBhcmVQYXRoKHN1YmRpciwgZGlyKTsKIH0KIAogdm9pZCBTeXN0ZW1Ub29sczo6RGVsYXkodW5zaWduZWQgaW50IG1zZWMpCkBAIC00NTI1LDcgKzQ0ODQsNyBAQAogCiBib29sIFN5c3RlbVRvb2xzOjpQYXJzZVVSTFByb3RvY29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBVUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBwcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGRhdGFnbG9tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YWdsb20sIGJvb2wgZGVjb2RlKQogewogICAvLyBtYXRjaCAwIGVudGlyZSB1cmwKICAgLy8gbWF0Y2ggMSBwcm90b2NvbApAQCAtNDUzOCwxMyArNDQ5NywxNyBAQAogICBwcm90b2NvbCA9IHVybFJlLm1hdGNoKDEpOwogICBkYXRhZ2xvbSA9IHVybFJlLm1hdGNoKDIpOwogCisgIGlmIChkZWNvZGUpIHsKKyAgICBkYXRhZ2xvbSA9IERlY29kZVVSTChkYXRhZ2xvbSk7CisgIH0KKwogICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTeXN0ZW1Ub29sczo6UGFyc2VVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIFVSTCwgc3RkOjpzdHJpbmcmIHByb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHVzZXJuYW1lLCBzdGQ6OnN0cmluZyYgcGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgaG9zdG5hbWUsIHN0ZDo6c3RyaW5nJiBkYXRhcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkYXRhYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBkYXRhYmFzZSwgYm9vbCBkZWNvZGUpCiB7CiAgIGt3c3lzOjpSZWd1bGFyRXhwcmVzc2lvbiB1cmxSZShWVEtfVVJMX1JFR0VYKTsKICAgaWYgKCF1cmxSZS5maW5kKFVSTCkpCkBAIC00NTY4LDEzICs0NTMxLDM3IEBACiAgIGRhdGFwb3J0ID0gdXJsUmUubWF0Y2goOCk7CiAgIGRhdGFiYXNlID0gdXJsUmUubWF0Y2goOSk7CiAKKyAgaWYgKGRlY29kZSkgeworICAgIHVzZXJuYW1lID0gRGVjb2RlVVJMKHVzZXJuYW1lKTsKKyAgICBwYXNzd29yZCA9IERlY29kZVVSTChwYXNzd29yZCk7CisgICAgaG9zdG5hbWUgPSBEZWNvZGVVUkwoaG9zdG5hbWUpOworICAgIGRhdGFwb3J0ID0gRGVjb2RlVVJMKGRhdGFwb3J0KTsKKyAgICBkYXRhYmFzZSA9IERlY29kZVVSTChkYXRhYmFzZSk7CisgIH0KKwogICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gVGhlc2UgbXVzdCBOT1QgYmUgaW5pdGlhbGl6ZWQuICBEZWZhdWx0IGluaXRpYWxpemF0aW9uIHRvIHplcm8gaXMKLS8vIG5lY2Vzc2FyeS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0ZDo6c3RyaW5nIFN5c3RlbVRvb2xzOjpEZWNvZGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCkKK3sKKyAga3dzeXM6OlJlZ3VsYXJFeHByZXNzaW9uIHVybEJ5dGVSZShWVEtfVVJMX0JZVEVfUkVHRVgpOworICBzdGQ6OnN0cmluZyByZXQ7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJsLmxlbmd0aCgpOyBpKyspIHsKKyAgICBpZiAodXJsQnl0ZVJlLmZpbmQodXJsLnN1YnN0cihpLCAzKSkpIHsKKyAgICAgIGNoYXIgYnl0ZXNbXSA9IHsgdXJsW2kgKyAxXSwgdXJsW2kgKyAyXSwgJ1wwJyB9OworICAgICAgcmV0ICs9IHN0YXRpY19jYXN0PGNoYXI+KHN0cnRvdWwoYnl0ZXMsIG51bGxwdHIsIDE2KSk7CisgICAgICBpICs9IDI7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldCArPSB1cmxbaV07CisgICAgfQorICB9CisgIHJldHVybiByZXQ7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERvIE5PVCBpbml0aWFsaXplLiAgRGVmYXVsdCBpbml0aWFsaXphdGlvbiB0byB6ZXJvIGlzIG5lY2Vzc2FyeS4KIHN0YXRpYyB1bnNpZ25lZCBpbnQgU3lzdGVtVG9vbHNNYW5hZ2VyQ291bnQ7Ci1TeXN0ZW1Ub29sc1N0YXRpYyogU3lzdGVtVG9vbHM6OlN0YXRpY3M7CiAKIC8vIFN5c3RlbVRvb2xzTWFuYWdlciBtYW5hZ2VzIHRoZSBTeXN0ZW1Ub29scyBzaW5nbGV0b24uCiAvLyBTeXN0ZW1Ub29sc01hbmFnZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGFueSB0cmFuc2xhdGlvbiB1bml0CkBAIC00NjE3LDcgKzQ2MDQsNyBAQAogI2VuZGlmCiAKICAgLy8gQ3JlYXRlIHN0YXRpY3Mgc2luZ2xldG9uIGluc3RhbmNlCi0gIFN5c3RlbVRvb2xzOjpTdGF0aWNzID0gbmV3IFN5c3RlbVRvb2xzU3RhdGljOworICBTeXN0ZW1Ub29sc1N0YXRpY3MgPSBuZXcgU3lzdGVtVG9vbHNTdGF0aWM7CiAKICNpZiBLV1NZU19TWVNURU1UT09MU19VU0VfVFJBTlNMQVRJT05fTUFQCiAvLyBBZGQgc29tZSBzcGVjaWFsIHRyYW5zbGF0aW9uIHBhdGhzIGZvciB1bml4LiAgVGhlc2UgYXJlIG5vdCBhZGRlZApAQCAtNDY2Nyw3ICs0NjU0LDcgQEAKIAogdm9pZCBTeXN0ZW1Ub29sczo6Q2xhc3NGaW5hbGl6ZSgpCiB7Ci0gIGRlbGV0ZSBTeXN0ZW1Ub29sczo6U3RhdGljczsKKyAgZGVsZXRlIFN5c3RlbVRvb2xzU3RhdGljczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgS1dTWVNfTkFNRVNQQUNFCkBAIC00Njc4LDggKzQ2NjUsMTIgQEAKICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgogbmFtZXNwYWNlIEtXU1lTX05BTUVTUEFDRSB7CiAKLXN0YXRpYyBpbnQgU3lzdGVtVG9vbHNEZWJ1Z1JlcG9ydChpbnQsIGNoYXIqIG1lc3NhZ2UsIGludCopCitzdGF0aWMgaW50IFN5c3RlbVRvb2xzRGVidWdSZXBvcnQoaW50LCBjaGFyKiBtZXNzYWdlLCBpbnQqIHJldCkKIHsKKyAgaWYgKHJldCkgeworICAgIC8vIFByZXRlbmQgdXNlciBjbGlja2VkIG9uIFJldHJ5IGJ1dHRvbiBpbiBwb3B1cC4KKyAgICAqcmV0ID0gMTsKKyAgfQogICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgbWVzc2FnZSk7CiAgIGZmbHVzaChzdGRlcnIpOwogICByZXR1cm4gMTsgLy8gbm8gZnVydGhlciByZXBvcnRpbmcgcmVxdWlyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy9TeXN0ZW1Ub29scy5oeHguaW4gYi9Tb3VyY2Uva3dzeXMvU3lzdGVtVG9vbHMuaHh4LmluCmluZGV4IGM0YWI5ZDQuLjc0ZGMxNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9TeXN0ZW1Ub29scy5oeHguaW4KKysrIGIvU291cmNlL2t3c3lzL1N5c3RlbVRvb2xzLmh4eC5pbgpAQCAtNjcsNyArNjcsNyBAQAogLy8gY29tYmluZWQgdXNpbmcgdGhlIHwgb3BlcmF0b3IuCiB0eXBlZGVmIGludCBUZXN0RmlsZVBlcm1pc3Npb25zOwogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQotLy8gT24gV2luZG93cyAoVkMgYW5kIEJvcmxhbmQpLCBubyBzeXN0ZW0gaGVhZGVyIGRlZmluZXMgdGhlc2UgY29uc3RhbnRzLi4uCisvLyBPbiBXaW5kb3dzIChWQyksIG5vIHN5c3RlbSBoZWFkZXIgZGVmaW5lcyB0aGVzZSBjb25zdGFudHMuLi4KIHN0YXRpYyBjb25zdCBUZXN0RmlsZVBlcm1pc3Npb25zIFRFU1RfRklMRV9PSyA9IDA7CiBzdGF0aWMgY29uc3QgVGVzdEZpbGVQZXJtaXNzaW9ucyBURVNUX0ZJTEVfUkVBRCA9IDQ7CiBzdGF0aWMgY29uc3QgVGVzdEZpbGVQZXJtaXNzaW9ucyBURVNUX0ZJTEVfV1JJVEUgPSAyOwpAQCAtMzE3LDExICszMTcsNyBAQAogICogQ3Jvc3MgcGxhdGZvcm0gd3JhcHBlciBmb3Igc3RhdCBzdHJ1Y3QKICAqLwogI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQotIyAgaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0gIHR5cGVkZWYgc3RydWN0IHN0YXRpNjQgU3RhdF90OwotIyAgZWxzZQogICB0eXBlZGVmIHN0cnVjdCBfc3RhdDY0IFN0YXRfdDsKLSMgIGVuZGlmCiAjZWxzZQogICB0eXBlZGVmIHN0cnVjdCBzdGF0IFN0YXRfdDsKICNlbmRpZgpAQCAtMzM1LDE1ICszMzEsNiBAQAogICBzdGF0aWMgaW50IFN0YXQoY29uc3QgY2hhciogcGF0aCwgU3RhdF90KiBidWYpOwogICBzdGF0aWMgaW50IFN0YXQoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgsIFN0YXRfdCogYnVmKTsKIAotLyoqCi0gKiBDb252ZXJ0cyBDeWd3aW4gcGF0aCB0byBXaW4zMiBwYXRoLiBVc2VzIGRpY3Rpb25hcnkgY29udGFpbmVyIGZvcgotICogY2FjaGluZyBhbmQgY2FsbHMgdG8gY3lnd2luX2NvbnZfdG9fd2luMzJfcGF0aCBmcm9tIEN5Z3dpbiBkbGwKLSAqIGZvciBhY3R1YWwgdHJhbnNsYXRpb24uICBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZWxzZSBmYWxzZS4KLSAqLwotI2lmZGVmIF9fQ1lHV0lOX18KLSAgc3RhdGljIGJvb2wgUGF0aEN5Z3dpblRvV2luMzIoY29uc3QgY2hhciogcGF0aCwgY2hhciogd2luMzJfcGF0aCk7Ci0jZW5kaWYKLQogICAvKioKICAgICogUmV0dXJuIGZpbGUgbGVuZ3RoCiAgICAqLwpAQCAtNDExLDExICszOTgsMTEgQEAKICAgICogKHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KS4gIFRoZSBmdWxsIHBhdGgKICAgICogaXMgcmV0dXJuZWQuCiAgICAqLwotICBzdGF0aWMgc3RkOjpzdHJpbmcgQ29sbGFwc2VGdWxsUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgaW5fcmVsYXRpdmUpOwotICBzdGF0aWMgc3RkOjpzdHJpbmcgQ29sbGFwc2VGdWxsUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgaW5fcmVsYXRpdmUsCisgIHN0YXRpYyBzdGQ6OnN0cmluZyBDb2xsYXBzZUZ1bGxQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbl9wYXRoKTsKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIENvbGxhcHNlRnVsbFBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGluX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluX2Jhc2UpOwotICBzdGF0aWMgc3RkOjpzdHJpbmcgQ29sbGFwc2VGdWxsUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgaW5fcmVsYXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbl9iYXNlKTsKKyAgc3RhdGljIHN0ZDo6c3RyaW5nIENvbGxhcHNlRnVsbFBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGluX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBpbl9iYXNlKTsKIAogICAvKioKICAgICogR2V0IHRoZSByZWFsIHBhdGggZm9yIGEgZ2l2ZW4gcGF0aCwgcmVtb3ZpbmcgYWxsIHN5bWxpbmtzLiAgSW4KQEAgLTU0OSwxMiArNTM2LDEzIEBACiAgICAqLwogCiAgIC8qKgotICAgKiBPcGVuIGEgZmlsZSBjb25zaWRlcmluZyB1bmljb2RlLgorICAgKiBPcGVuIGEgZmlsZSBjb25zaWRlcmluZyB1bmljb2RlLiBPbiBXaW5kb3dzLCBpZiAnZScgaXMgcHJlc2VudCBpbgorICAgKiBtb2RlIGl0IGlzIGZpcnN0IGRpc2NhcmRlZC4KICAgICovCiAgIHN0YXRpYyBGSUxFKiBGb3Blbihjb25zdCBzdGQ6OnN0cmluZyYgZmlsZSwgY29uc3QgY2hhciogbW9kZSk7CiAKIC8qKgotICogVmlzdWFsIEMrKyBkb2VzIG5vdCBkZWZpbmUgbW9kZV90IChub3RlIHRoYXQgQm9ybGFuZCBkb2VzLCBob3dldmVyKS4KKyAqIFZpc3VhbCBDKysgZG9lcyBub3QgZGVmaW5lIG1vZGVfdC4KICAqLwogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OwpAQCAtNjc3LDYgKzY2NSwxMSBAQAogICBzdGF0aWMgYm9vbCBGaWxlSXNEaXJlY3RvcnkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogCiAgIC8qKgorICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsZSBpcyBhbiBleGVjdXRhYmxlCisgICAqLworICBzdGF0aWMgYm9vbCBGaWxlSXNFeGVjdXRhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKKworICAvKioKICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGZpbGUgaXMgYSBzeW1saW5rCiAgICAqLwogICBzdGF0aWMgYm9vbCBGaWxlSXNTeW1saW5rKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKQEAgLTg2OSw3ICs4NjIsNyBAQAogICAvKioKICAgICogR2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgQ1dECiAgICAqLwotICBzdGF0aWMgc3RkOjpzdHJpbmcgR2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoYm9vbCBjb2xsYXBzZSA9IHRydWUpOworICBzdGF0aWMgc3RkOjpzdHJpbmcgR2V0Q3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKIAogICAvKioKICAgICogQ2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZApAQCAtOTM1LDIyICs5MjgsMzIgQEAKICAgICogUGFyc2UgYSBjaGFyYWN0ZXIgc3RyaW5nIDoKICAgICogICAgICAgcHJvdG9jb2w6Ly9kYXRhZ2xvbQogICAgKiBhbmQgZmlsbCBwcm90b2NvbCBhcyBhcHByb3ByaWF0ZS4KKyAgICogZGVjb2RlIHRoZSBkYXRhZ2xvbSB1c2luZyBEZWNvZGVVUkwgaWYgc2V0IHRvIHRydWUuCiAgICAqIFJldHVybiBmYWxzZSBpZiB0aGUgVVJMIGRvZXMgbm90IGhhdmUgdGhlIHJlcXVpcmVkIGZvcm0sIHRydWUgb3RoZXJ3aXNlLgogICAgKi8KICAgc3RhdGljIGJvb2wgUGFyc2VVUkxQcm90b2NvbChjb25zdCBzdGQ6OnN0cmluZyYgVVJMLCBzdGQ6OnN0cmluZyYgcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGRhdGFnbG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgZGF0YWdsb20sIGJvb2wgZGVjb2RlID0gZmFsc2UpOwogCiAgIC8qKgogICAgKiBQYXJzZSBhIHN0cmluZyAoYSBVUkwgd2l0aG91dCBwcm90b2NvbCBwcmVmaXgpIHdpdGggdGhlIGZvcm06CiAgICAqICBwcm90b2NvbDovL1tbdXNlcm5hbWVbJzoncGFzc3dvcmRdJ0AnXWhvc3RuYW1lWyc6J2RhdGFwb3J0XV0nLydbZGF0YXBhdGhdCiAgICAqIGFuZCBmaWxsIHByb3RvY29sLCB1c2VybmFtZSwgcGFzc3dvcmQsIGhvc3RuYW1lLCBkYXRhcG9ydCwgYW5kIGRhdGFwYXRoCiAgICAqIHdoZW4gdmFsdWVzIGFyZSBmb3VuZC4KKyAgICogZGVjb2RlIGFsbCBzdHJpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCB1c2luZyBEZWNvZGVVcmwgaWYgc2V0IHRvIHRydWUuCiAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUgZm9ybWF0OyBmYWxzZSBvdGhlcndpc2UuCiAgICAqLwogICBzdGF0aWMgYm9vbCBQYXJzZVVSTChjb25zdCBzdGQ6OnN0cmluZyYgVVJMLCBzdGQ6OnN0cmluZyYgcHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiB1c2VybmFtZSwgc3RkOjpzdHJpbmcmIHBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgaG9zdG5hbWUsIHN0ZDo6c3RyaW5nJiBkYXRhcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGRhdGFwYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIGRhdGFwYXRoLCBib29sIGRlY29kZSA9IGZhbHNlKTsKKworICAvKioKKyAgICogRGVjb2RlIHRoZSBwZXJjZW50LWVuY29kZWQgc3RyaW5nIGZyb20gYW4gVVJMIG9yIGFuIFVSSQorICAgKiBpbnRvIHRoZWlyIGNvcnJlY3QgY2hhciB2YWx1ZXMuCisgICAqIERvZXMgbm90IHBlcmZvcm0gYW55IG90aGVyIHNvcnQgb2YgdmFsaWRhdGlvbi4KKyAgICogUmV0dXJuIHRoZSBkZWNvZGVkIHN0cmluZworICAgKi8KKyAgc3RhdGljIHN0ZDo6c3RyaW5nIERlY29kZVVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJsKTsKIAogcHJpdmF0ZToKICAgLyoqCkBAIC05NzEsNyArOTc0LDYgQEAKICAgICByZXR1cm4gJlN5c3RlbVRvb2xzTWFuYWdlckluc3RhbmNlOwogICB9CiAKLSAgc3RhdGljIFN5c3RlbVRvb2xzU3RhdGljKiBTdGF0aWNzOwogICBmcmllbmQgY2xhc3MgU3lzdGVtVG9vbHNTdGF0aWM7CiAgIGZyaWVuZCBjbGFzcyBTeXN0ZW1Ub29sc01hbmFnZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL1Rlcm1pbmFsLmMgYi9Tb3VyY2Uva3dzeXMvVGVybWluYWwuYwppbmRleCA0ZGQyNDYxLi40ZDFiNDZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvVGVybWluYWwuYworKysgYi9Tb3VyY2Uva3dzeXMvVGVybWluYWwuYwpAQCAtMTQ2LDYgKzE0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjcmVlbi1iY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY3JlZW4tdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjcmVlbi5saW51eCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0LTI1NmNvbG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG11eCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRtdXgtMjU2Y29sb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2dDEwMCIsCkBAIC0xNzIsNiArMTczLDE0IEBACiAgICAgfQogICB9CiAKKyAgLyogR05VIG1ha2UgNC4xKyBtYXkgdGVsbCB1cyB0aGF0IGl0cyBvdXRwdXQgaXMgZGVzdGluZWQgZm9yIGEgVFRZLiAqLworICB7CisgICAgY29uc3QgY2hhciogdGVybW91dCA9IGdldGVudigiTUFLRV9URVJNT1VUIik7CisgICAgaWYgKHRlcm1vdXQgJiYgKnRlcm1vdXQgIT0gJ1wwJykgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKICAgLyogSWYgcnVubmluZyBpbnNpZGUgZW1hY3MgdGhlIHRlcm1pbmFsIGlzIG5vdCBWVDEwMC4gIFNvbWUgZW1hY3MKICAgICAgc2VlbSB0byBjbGFpbSB0aGUgVEVSTSBpcyB4dGVybSBldmVuIHRob3VnaCB0aGV5IGRvIG5vdCBzdXBwb3J0CiAgICAgIFZUMTAwIGVzY2FwZXMuICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL2hhc2hfZnVuLmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9oYXNoX2Z1bi5oeHguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MjZjMmEuLjAwMDAwMDAKLS0tIGEvU291cmNlL2t3c3lzL2hhc2hfZnVuLmh4eC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyNrd3N5cyBmb3IgZGV0YWlscy4gICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk2Ci0gKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKLSAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCi0gKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAotICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKLSAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KLSAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KLSAqCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk0Ci0gKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQotICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKLSAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCi0gKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgotICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KLSAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KLSAqCi0gKi8KLSNpZm5kZWYgQEtXU1lTX05BTUVTUEFDRUBfaGFzaF9mdW5faHh4Ci0jZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX2hhc2hfZnVuX2h4eAotCi0jaW5jbHVkZSA8QEtXU1lTX05BTUVTUEFDRUAvQ29uZmlndXJlLmh4eD4KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPiAvLyBzaXplX3QKLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQCB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5Pgotc3RydWN0IGhhc2gKLXsKLX07Ci0KLWlubGluZSBzaXplX3QgX3N0bF9oYXNoX3N0cmluZyhjb25zdCBjaGFyKiBfX3MpCi17Ci0gIHVuc2lnbmVkIGxvbmcgX19oID0gMDsKLSAgZm9yICg7ICpfX3M7ICsrX19zKQotICAgIF9faCA9IDUgKiBfX2ggKyAqX19zOwotCi0gIHJldHVybiBzaXplX3QoX19oKTsKLX0KLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPGNoYXIqPgotewotICBzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBjaGFyKiBfX3MpIGNvbnN0IHsgcmV0dXJuIF9zdGxfaGFzaF9zdHJpbmcoX19zKTsgfQotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPGNvbnN0IGNoYXIqPgotewotICBzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBjaGFyKiBfX3MpIGNvbnN0IHsgcmV0dXJuIF9zdGxfaGFzaF9zdHJpbmcoX19zKTsgfQotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPHN0ZDo6c3RyaW5nPgotewotICBzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnN0cmluZyYgX19zKSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9zdGxfaGFzaF9zdHJpbmcoX19zLmNfc3RyKCkpOwotICB9Ci19OwotCi0jaWYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPGNvbnN0IHN0ZDo6c3RyaW5nPgotewotICBzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnN0cmluZyYgX19zKSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9zdGxfaGFzaF9zdHJpbmcoX19zLmNfc3RyKCkpOwotICB9Ci19OwotI2VuZGlmCi0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDxjaGFyPgotewotICBzaXplX3Qgb3BlcmF0b3IoKShjaGFyIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8dW5zaWduZWQgY2hhcj4KLXsKLSAgc2l6ZV90IG9wZXJhdG9yKCkodW5zaWduZWQgY2hhciBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPHNpZ25lZCBjaGFyPgotewotICBzaXplX3Qgb3BlcmF0b3IoKSh1bnNpZ25lZCBjaGFyIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8c2hvcnQ+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKHNob3J0IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8dW5zaWduZWQgc2hvcnQ+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKHVuc2lnbmVkIHNob3J0IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8aW50PgotewotICBzaXplX3Qgb3BlcmF0b3IoKShpbnQgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDx1bnNpZ25lZCBpbnQ+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPGxvbmc+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKGxvbmcgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDx1bnNpZ25lZCBsb25nPgotewotICBzaXplX3Qgb3BlcmF0b3IoKSh1bnNpZ25lZCBsb25nIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotCi0vLyB1c2UgbG9uZyBsb25nIG9yIF9faW50NjQKLSNpZiBAS1dTWVNfVVNFX0xPTkdfTE9OR0AKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaGFzaDxsb25nIGxvbmc+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKGxvbmcgbG9uZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPHVuc2lnbmVkIGxvbmcgbG9uZz4KLXsKLSAgc2l6ZV90IG9wZXJhdG9yKCkodW5zaWduZWQgbG9uZyBsb25nIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Ci19OwotI2VsaWYgQEtXU1lTX1VTRV9fX0lOVDY0QAotdGVtcGxhdGUgPD4KLXN0cnVjdCBoYXNoPF9faW50NjQ+Ci17Ci0gIHNpemVfdCBvcGVyYXRvcigpKF9faW50NjQgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2g8dW5zaWduZWQgX19pbnQ2ND4KLXsKLSAgc2l6ZV90IG9wZXJhdG9yKCkodW5zaWduZWQgX19pbnQ2NCBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQotfTsKLSNlbmRpZiAvLyB1c2UgbG9uZyBsb25nIG9yIF9faW50NjQKLQotfSAvLyBuYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvaGFzaF9tYXAuaHh4LmluIGIvU291cmNlL2t3c3lzL2hhc2hfbWFwLmh4eC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwNGU5Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uva3dzeXMvaGFzaF9tYXAuaHh4LmluCisrKyAvZGV2L251bGwKQEAgLTEsNDIzICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nI2t3c3lzIGZvciBkZXRhaWxzLiAgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYKLSAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQotICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKLSAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCi0gKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgotICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubwotICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotICoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTQKLSAqIEhld2xldHQtUGFja2FyZCBDb21wYW55Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCi0gKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAotICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKLSAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCi0gKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubwotICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotICoKLSAqLwotI2lmbmRlZiBAS1dTWVNfTkFNRVNQQUNFQF9oYXNoX21hcF9oeHgKLSNkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfaGFzaF9tYXBfaHh4Ci0KLSNpbmNsdWRlIDxAS1dTWVNfTkFNRVNQQUNFQC9oYXNodGFibGUuaHh4PgotCi0jaW5jbHVkZSA8QEtXU1lTX05BTUVTUEFDRUAvaGFzaF9mdW4uaHh4PgotCi0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4gLy8gZXF1YWxfdG8KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jICBwcmFnbWEgd2FybmluZyhwdXNoKQotIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQyODQpCi0jICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDc4NikKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX3NnaSkgJiYgIWRlZmluZWQoX19HTlVDX18pICYmIChfTUlQU19TSU0gIT0gX01JUFNfU0lNX0FCSTMyKQotIyAgcHJhZ21hIHNldCB3b2ZmIDExNzQKLSMgIHByYWdtYSBzZXQgd29mZiAxMzc1Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEBLV1NZU19OQU1FU1BBQ0VAIHsKLQotLy8gc2VsZWN0MXN0IGlzIGFuIGV4dGVuc2lvbjogaXQgaXMgbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkLgotdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KLXN0cnVjdCBoYXNoX3NlbGVjdDFzdAotewotICBjb25zdCBUMSYgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnBhaXI8VDEsIFQyPiYgX194KSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9feC5maXJzdDsKLSAgfQotfTsKLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBlcXVhbGl0eSBvcGVyYXRvcjsgbmVlZGVkIGZvciBmcmllbmQgZGVjbGFyYXRpb24uCi0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRmNuID0gaGFzaDxfS2V5PiwKLSAgICAgICAgICBjbGFzcyBfRXF1YWxLZXkgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAotICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KLWNsYXNzIGhhc2hfbWFwOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuLCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcUtleSwgX0FsbG9jPiYsCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFLZXksIF9BbGxvYz4mKTsKLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotY2xhc3MgaGFzaF9tYXAKLXsKLXByaXZhdGU6Ci0gIHR5cGVkZWYgaGFzaHRhYmxlPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+LCBfS2V5LCBfSGFzaEZjbiwKLSAgICAgICAgICAgICAgICAgICAgaGFzaF9zZWxlY3Qxc3Q8Y29uc3QgX0tleSwgX1RwPiwgX0VxdWFsS2V5LCBfQWxsb2M+Ci0gICAgX0h0OwotICBfSHQgX01faHQ7Ci0KLXB1YmxpYzoKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV90eXBlIGtleV90eXBlOwotICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7Ci0gIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aGFzaGVyIGhhc2hlcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7Ci0KLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnNpemVfdHlwZSBzaXplX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6cG9pbnRlciBwb2ludGVyOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7Ci0KLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0KLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwotCi0gIGhhc2hlciBoYXNoX2Z1bmN0KCkgY29uc3QgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgpOyB9Ci0gIGtleV9lcXVhbCBrZXlfZXEoKSBjb25zdCB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQotICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01faHQuZ2V0X2FsbG9jYXRvcigpOyB9Ci0KLXB1YmxpYzoKLSAgaGFzaF9tYXAoKQotICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBleHBsaWNpdCBoYXNoX21hcChzaXplX3R5cGUgX19uKQotICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBoYXNoX21hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYpCi0gICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gIH0KLSAgaGFzaF9tYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAotICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKLSAgewotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKLSAgICA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKLSAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKLSAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmKQotICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICAgIF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCi0gICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKLSAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCi0gICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsKLSAgfQotCi1wdWJsaWM6Ci0gIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9Ci0gIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KLSAgdm9pZCBzd2FwKGhhc2hfbWFwJiBfX2hzKSB7IF9NX2h0LnN3YXAoX19ocy5fTV9odCk7IH0KLQotICBmcmllbmQgYm9vbCBvcGVyYXRvcj09PD4oY29uc3QgaGFzaF9tYXAmLCBjb25zdCBoYXNoX21hcCYpOwotCi0gIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQotICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9odC5lbmQoKTsgfQotICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KLQotcHVibGljOgotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKLSAgewotICAgIHJldHVybiBfTV9odC5pbnNlcnRfdW5pcXVlKF9fb2JqKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7Ci0gIH0KLSAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiBpbnNlcnRfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCi0gIHsKLSAgICByZXR1cm4gX01faHQuaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShfX29iaik7Ci0gIH0KLQotICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KLSAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01faHQuZmluZChfX2tleSk7Ci0gIH0KLQotICBfVHAmIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9fa2V5KQotICB7Ci0gICAgcmV0dXJuIF9NX2h0LmZpbmRfb3JfaW5zZXJ0KHZhbHVlX3R5cGUoX19rZXksIF9UcCgpKSkuc2Vjb25kOwotICB9Ci0KLSAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QgeyByZXR1cm4gX01faHQuY291bnQoX19rZXkpOyB9Ci0KLSAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQotICB7Ci0gICAgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsKLSAgfQotICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZSgKLSAgICBjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOwotICB9Ci0KLSAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgeyByZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9Ci0gIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19pdCkgeyBfTV9odC5lcmFzZShfX2l0KTsgfQotICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZiwgaXRlcmF0b3IgX19sKSB7IF9NX2h0LmVyYXNlKF9fZiwgX19sKTsgfQotICB2b2lkIGNsZWFyKCkgeyBfTV9odC5jbGVhcigpOyB9Ci0KLSAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9faGludCkgeyBfTV9odC5yZXNpemUoX19oaW50KTsgfQotICBzaXplX3R5cGUgYnVja2V0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gX01faHQuYnVja2V0X2NvdW50KCk7IH0KLSAgc2l6ZV90eXBlIG1heF9idWNrZXRfY291bnQoKSBjb25zdCB7IHJldHVybiBfTV9odC5tYXhfYnVja2V0X2NvdW50KCk7IH0KLSAgc2l6ZV90eXBlIGVsZW1zX2luX2J1Y2tldChzaXplX3R5cGUgX19uKSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9NX2h0LmVsZW1zX2luX2J1Y2tldChfX24pOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGY24sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0xLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGY24sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0yKQotewotICByZXR1cm4gX19obTEuX01faHQgPT0gX19obTIuX01faHQ7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KAotICBjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRmNuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMSwKLSAgY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZjbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTIpCi17Ci0gIHJldHVybiAhKF9faG0xID09IF9faG0yKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcWxLZXksIGNsYXNzIF9BbGxvYz4KLWlubGluZSB2b2lkIHN3YXAoaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZjbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTEsCi0gICAgICAgICAgICAgICAgIGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGY24sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0yKQotewotICBfX2htMS5zd2FwKF9faG0yKTsKLX0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBlcXVhbGl0eSBvcGVyYXRvcjsgbmVlZGVkIGZvciBmcmllbmQgZGVjbGFyYXRpb24uCi0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRmNuID0gaGFzaDxfS2V5PiwKLSAgICAgICAgICBjbGFzcyBfRXF1YWxLZXkgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAotICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KLWNsYXNzIGhhc2hfbXVsdGltYXA7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IRiwgY2xhc3MgX0VxS2V5LCBjbGFzcyBfQWxsb2M+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IRiwgX0VxS2V5LCBfQWxsb2M+JiBfX2htMSwKLSAgICAgICAgICAgICAgICBjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0yKTsKLQotdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotY2xhc3MgaGFzaF9tdWx0aW1hcAotewotcHJpdmF0ZToKLSAgdHlwZWRlZiBoYXNodGFibGU8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4sIF9LZXksIF9IYXNoRmNuLAotICAgICAgICAgICAgICAgICAgICBoYXNoX3NlbGVjdDFzdDxjb25zdCBfS2V5LCBfVHA+LCBfRXF1YWxLZXksIF9BbGxvYz4KLSAgICBfSHQ7Ci0gIF9IdCBfTV9odDsKLQotcHVibGljOgotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7Ci0gIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKLSAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVhbDsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpwb2ludGVyIHBvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7Ci0KLSAgaGFzaGVyIGhhc2hfZnVuY3QoKSBjb25zdCB7IHJldHVybiBfTV9odC5oYXNoX2Z1bmN0KCk7IH0KLSAga2V5X2VxdWFsIGtleV9lcSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9Ci0gIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KLQotcHVibGljOgotICBoYXNoX211bHRpbWFwKCkKLSAgICA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gIH0KLSAgZXhwbGljaXQgaGFzaF9tdWx0aW1hcChzaXplX3R5cGUgX19uKQotICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBoYXNoX211bHRpbWFwKHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBoYXNoX211bHRpbWFwKHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKLSAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKLSAgewotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQotICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgaGFzaF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKLSAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmKQotICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICAgIF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKLSAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKLSAgewotICAgIF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7Ci0gIH0KLQotcHVibGljOgotICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LnNpemUoKTsgfQotICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9odC5tYXhfc2l6ZSgpOyB9Ci0gIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9Ci0gIHZvaWQgc3dhcChoYXNoX211bHRpbWFwJiBfX2hzKSB7IF9NX2h0LnN3YXAoX19ocy5fTV9odCk7IH0KLQotICBmcmllbmQgYm9vbCBvcGVyYXRvcj09PD4oY29uc3QgaGFzaF9tdWx0aW1hcCYsIGNvbnN0IGhhc2hfbXVsdGltYXAmKTsKLQotICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KLSAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KLSAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9Ci0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9Ci0KLXB1YmxpYzoKLSAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotICB7Ci0gICAgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbChfX29iaik7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKLSAgewotICAgIF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7Ci0gIH0KLSAgaXRlcmF0b3IgaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotICB7Ci0gICAgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbF9ub3Jlc2l6ZShfX29iaik7Ci0gIH0KLQotICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KLSAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01faHQuZmluZChfX2tleSk7Ci0gIH0KLQotICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdCB7IHJldHVybiBfTV9odC5jb3VudChfX2tleSk7IH0KLQotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCi0gIHsKLSAgICByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOwotICB9Ci0gIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKAotICAgIGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7Ci0gIH0KLQotICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSB7IHJldHVybiBfTV9odC5lcmFzZShfX2tleSk7IH0KLSAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2l0KSB7IF9NX2h0LmVyYXNlKF9faXQpOyB9Ci0gIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpIHsgX01faHQuZXJhc2UoX19mLCBfX2wpOyB9Ci0gIHZvaWQgY2xlYXIoKSB7IF9NX2h0LmNsZWFyKCk7IH0KLQotcHVibGljOgotICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KSB7IF9NX2h0LnJlc2l6ZShfX2hpbnQpOyB9Ci0gIHNpemVfdHlwZSBidWNrZXRfY291bnQoKSBjb25zdCB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQotICBzaXplX3R5cGUgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQotICBzaXplX3R5cGUgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01faHQuZWxlbXNfaW5fYnVja2V0KF9fbik7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IRiwgY2xhc3MgX0VxS2V5LCBjbGFzcyBfQWxsb2M+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IRiwgX0VxS2V5LCBfQWxsb2M+JiBfX2htMSwKLSAgICAgICAgICAgICAgICBjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0yKQotewotICByZXR1cm4gX19obTEuX01faHQgPT0gX19obTIuX01faHQ7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IRiwgY2xhc3MgX0VxS2V5LCBjbGFzcyBfQWxsb2M+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KAotICBjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0xLAotICBjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0yKQotewotICByZXR1cm4gIShfX2htMSA9PSBfX2htMik7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1pbmxpbmUgdm9pZCBzd2FwKGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZjbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTEsCi0gICAgICAgICAgICAgICAgIGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZjbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTIpCi17Ci0gIF9faG0xLnN3YXAoX19obTIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQAotCi0jaWYgZGVmaW5lZChfX3NnaSkgJiYgIWRlZmluZWQoX19HTlVDX18pICYmIChfTUlQU19TSU0gIT0gX01JUFNfU0lNX0FCSTMyKQotIyAgcHJhZ21hIHJlc2V0IHdvZmYgMTE3NAotIyAgcHJhZ21hIHJlc2V0IHdvZmYgMTM3NQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL2hhc2hfc2V0Lmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9oYXNoX3NldC5oeHguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YTM3ZWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL2t3c3lzL2hhc2hfc2V0Lmh4eC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM5MiArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyNrd3N5cyBmb3IgZGV0YWlscy4gICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk2Ci0gKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKLSAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCi0gKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAotICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKLSAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KLSAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KLSAqCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk0Ci0gKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQotICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKLSAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCi0gKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgotICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KLSAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KLSAqCi0gKi8KLSNpZm5kZWYgQEtXU1lTX05BTUVTUEFDRUBfaGFzaF9zZXRfaHh4Ci0jZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX2hhc2hfc2V0X2h4eAotCi0jaW5jbHVkZSA8QEtXU1lTX05BTUVTUEFDRUAvaGFzaHRhYmxlLmh4eD4KLQotI2luY2x1ZGUgPEBLV1NZU19OQU1FU1BBQ0VAL2hhc2hfZnVuLmh4eD4KLQotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+IC8vIGVxdWFsX3RvCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKLSMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0Mjg0KQotIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ3ODYpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19zZ2kpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAoX01JUFNfU0lNICE9IF9NSVBTX1NJTV9BQkkzMikKLSMgIHByYWdtYSBzZXQgd29mZiAxMTc0Ci0jICBwcmFnbWEgc2V0IHdvZmYgMTM3NQotI2VuZGlmCi0KLW5hbWVzcGFjZSBAS1dTWVNfTkFNRVNQQUNFQCB7Ci0KLS8vIGlkZW50aXR5IGlzIGFuIGV4dGVuc2lvbjogaXQgaXMgbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkLgotdGVtcGxhdGUgPGNsYXNzIF9UcD4KLXN0cnVjdCBfSWRlbnRpdHkKLXsKLSAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KLX07Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgZXF1YWxpdHkgb3BlcmF0b3I7IG5lZWRlZCBmb3IgZnJpZW5kIGRlY2xhcmF0aW9uLgotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiA9IGhhc2g8X1ZhbHVlPiwKLSAgICAgICAgICBjbGFzcyBfRXF1YWxLZXkgPSBzdGQ6OmVxdWFsX3RvPF9WYWx1ZT4sCi0gICAgICAgICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgotY2xhc3MgaGFzaF9zZXQ7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1jbGFzcyBoYXNoX3NldAotewotcHJpdmF0ZToKLSAgdHlwZWRlZiBoYXNodGFibGU8X1ZhbHVlLCBfVmFsdWUsIF9IYXNoRmNuLCBfSWRlbnRpdHk8X1ZhbHVlPiwgX0VxdWFsS2V5LAotICAgICAgICAgICAgICAgICAgICBfQWxsb2M+Ci0gICAgX0h0OwotICBfSHQgX01faHQ7Ci0KLXB1YmxpYzoKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV90eXBlIGtleV90eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aGFzaGVyIGhhc2hlcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7Ci0KLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnNpemVfdHlwZSBzaXplX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcG9pbnRlciBwb2ludGVyOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7Ci0KLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0KLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwotCi0gIGhhc2hlciBoYXNoX2Z1bmN0KCkgY29uc3QgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgpOyB9Ci0gIGtleV9lcXVhbCBrZXlfZXEoKSBjb25zdCB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQotICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01faHQuZ2V0X2FsbG9jYXRvcigpOyB9Ci0KLXB1YmxpYzoKLSAgaGFzaF9zZXQoKQotICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBleHBsaWNpdCBoYXNoX3NldChzaXplX3R5cGUgX19uKQotICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBoYXNoX3NldChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYpCi0gICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gIH0KLSAgaGFzaF9zZXQoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAotICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKLSAgewotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKLSAgICA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKLSAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKLSAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmKQotICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICAgIF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgaGFzaF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCi0gICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKLSAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCi0gICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsKLSAgfQotCi1wdWJsaWM6Ci0gIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9Ci0gIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KLSAgdm9pZCBzd2FwKGhhc2hfc2V0JiBfX2hzKSB7IF9NX2h0LnN3YXAoX19ocy5fTV9odCk7IH0KLQotICBmcmllbmQgYm9vbCBvcGVyYXRvcj09PD4oY29uc3QgaGFzaF9zZXQmLCBjb25zdCBoYXNoX3NldCYpOwotCi0gIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQotICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9odC5lbmQoKTsgfQotCi1wdWJsaWM6Ci0gIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotICB7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Oml0ZXJhdG9yIF9IdF9pdGVyYXRvcjsKLSAgICBzdGQ6OnBhaXI8X0h0X2l0ZXJhdG9yLCBib29sPiBfX3AgPSBfTV9odC5pbnNlcnRfdW5pcXVlKF9fb2JqKTsKLSAgICByZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsKLSAgfQotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKLSAgewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjppdGVyYXRvciBfSHRfaXRlcmF0b3I7Ci0gICAgc3RkOjpwYWlyPF9IdF9pdGVyYXRvciwgYm9vbD4gX19wID0gX01faHQuaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShfX29iaik7Ci0gICAgcmV0dXJuIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4oX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKLSAgfQotCi0gIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdCB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQotCi0gIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmNvdW50KF9fa2V5KTsgfQotCi0gIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7Ci0gIH0KLQotICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSB7IHJldHVybiBfTV9odC5lcmFzZShfX2tleSk7IH0KLSAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2l0KSB7IF9NX2h0LmVyYXNlKF9faXQpOyB9Ci0gIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpIHsgX01faHQuZXJhc2UoX19mLCBfX2wpOyB9Ci0gIHZvaWQgY2xlYXIoKSB7IF9NX2h0LmNsZWFyKCk7IH0KLQotcHVibGljOgotICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KSB7IF9NX2h0LnJlc2l6ZShfX2hpbnQpOyB9Ci0gIHNpemVfdHlwZSBidWNrZXRfY291bnQoKSBjb25zdCB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQotICBzaXplX3R5cGUgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQotICBzaXplX3R5cGUgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01faHQuZWxlbXNfaW5fYnVja2V0KF9fbik7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCi17Ci0gIHJldHVybiBfX2hzMS5fTV9odCA9PSBfX2hzMi5fTV9odDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKLSAgY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKLSAgY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKLXsKLSAgcmV0dXJuICEoX19oczEgPT0gX19oczIpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotaW5saW5lIHZvaWQgc3dhcChoYXNoX3NldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKLSAgICAgICAgICAgICAgICAgaGFzaF9zZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCi17Ci0gIF9faHMxLnN3YXAoX19oczIpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiA9IGhhc2g8X1ZhbHVlPiwKLSAgICAgICAgICBjbGFzcyBfRXF1YWxLZXkgPSBzdGQ6OmVxdWFsX3RvPF9WYWx1ZT4sCi0gICAgICAgICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgotY2xhc3MgaGFzaF9tdWx0aXNldDsKLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1jbGFzcyBoYXNoX211bHRpc2V0Ci17Ci1wcml2YXRlOgotICB0eXBlZGVmIGhhc2h0YWJsZTxfVmFsdWUsIF9WYWx1ZSwgX0hhc2hGY24sIF9JZGVudGl0eTxfVmFsdWU+LCBfRXF1YWxLZXksCi0gICAgICAgICAgICAgICAgICAgIF9BbGxvYz4KLSAgICBfSHQ7Ci0gIF9IdCBfTV9odDsKLQotcHVibGljOgotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVhbDsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIHBvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLQotICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7Ci0KLSAgaGFzaGVyIGhhc2hfZnVuY3QoKSBjb25zdCB7IHJldHVybiBfTV9odC5oYXNoX2Z1bmN0KCk7IH0KLSAga2V5X2VxdWFsIGtleV9lcSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9Ci0gIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KLQotcHVibGljOgotICBoYXNoX211bHRpc2V0KCkKLSAgICA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gIH0KLSAgZXhwbGljaXQgaGFzaF9tdWx0aXNldChzaXplX3R5cGUgX19uKQotICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgfQotICBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKLSAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKLSAgewotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQotICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgaGFzaF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKLSAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQotICB7Ci0gICAgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIGhhc2hfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCi0gICAgICAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmKQotICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKLSAgewotICAgIF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICBoYXNoX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKLSAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKLSAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKLSAgewotICAgIF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7Ci0gIH0KLQotcHVibGljOgotICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LnNpemUoKTsgfQotICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9odC5tYXhfc2l6ZSgpOyB9Ci0gIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9Ci0gIHZvaWQgc3dhcChoYXNoX211bHRpc2V0JiBocykgeyBfTV9odC5zd2FwKGhzLl9NX2h0KTsgfQotCi0gIGZyaWVuZCBib29sIG9wZXJhdG9yPT08Pihjb25zdCBoYXNoX211bHRpc2V0JiwgY29uc3QgaGFzaF9tdWx0aXNldCYpOwotCi0gIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQotICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9odC5lbmQoKTsgfQotCi1wdWJsaWM6Ci0gIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKLSAgewotICAgIHJldHVybiBfTV9odC5pbnNlcnRfZXF1YWwoX19vYmopOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KLSAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCi0gIHsKLSAgICBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOwotICB9Ci0gIGl0ZXJhdG9yIGluc2VydF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKLSAgewotICAgIHJldHVybiBfTV9odC5pbnNlcnRfZXF1YWxfbm9yZXNpemUoX19vYmopOwotICB9Ci0KLSAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9Ci0KLSAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QgeyByZXR1cm4gX01faHQuY291bnQoX19rZXkpOyB9Ci0KLSAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsKLSAgfQotCi0gIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIHsgcmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5KTsgfQotICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9faXQpIHsgX01faHQuZXJhc2UoX19pdCk7IH0KLSAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2YsIGl0ZXJhdG9yIF9fbCkgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KLSAgdm9pZCBjbGVhcigpIHsgX01faHQuY2xlYXIoKTsgfQotCi1wdWJsaWM6Ci0gIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpIHsgX01faHQucmVzaXplKF9faGludCk7IH0KLSAgc2l6ZV90eXBlIGJ1Y2tldF9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9Ci0gIHNpemVfdHlwZSBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9Ci0gIHNpemVfdHlwZSBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCi17Ci0gIHJldHVybiBfX2hzMS5fTV9odCA9PSBfX2hzMi5fTV9odDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oCi0gIGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCi0gIGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCi17Ci0gIHJldHVybiAhKF9faHMxID09IF9faHMyKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLWlubGluZSB2b2lkIHN3YXAoaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKLSAgICAgICAgICAgICAgICAgaGFzaF9tdWx0aXNldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKLXsKLSAgX19oczEuc3dhcChfX2hzMik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEBLV1NZU19OQU1FU1BBQ0VACi0KLSNpZiBkZWZpbmVkKF9fc2dpKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgKF9NSVBTX1NJTSAhPSBfTUlQU19TSU1fQUJJMzIpCi0jICBwcmFnbWEgcmVzZXQgd29mZiAxMTc0Ci0jICBwcmFnbWEgcmVzZXQgd29mZiAxMzc1Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jICBwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvaGFzaHRhYmxlLmh4eC5pbiBiL1NvdXJjZS9rd3N5cy9oYXNodGFibGUuaHh4LmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzRiMDAyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9rd3N5cy9oYXNodGFibGUuaHh4LmluCisrKyAvZGV2L251bGwKQEAgLTEsOTk1ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nI2t3c3lzIGZvciBkZXRhaWxzLiAgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYKLSAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQotICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKLSAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCi0gKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgotICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubwotICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotICoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTQKLSAqIEhld2xldHQtUGFja2FyZCBDb21wYW55Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCi0gKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAotICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKLSAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCi0gKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubwotICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotICoKLSAqLwotI2lmZGVmIF9fQk9STEFORENfXwotIyAgcHJhZ21hIHdhcm4gLSA4MDI3IC8qICdmb3InIG5vdCBpbmxpbmVkLiAgKi8KLSMgIHByYWdtYSB3YXJuIC0gODAyNiAvKiAnZXhjZXB0aW9uJyBub3QgaW5saW5lZC4gICovCi0jZW5kaWYKLQotI2lmbmRlZiBAS1dTWVNfTkFNRVNQQUNFQF9oYXNodGFibGVfaHh4Ci0jICBkZWZpbmUgQEtXU1lTX05BTUVTUEFDRUBfaGFzaHRhYmxlX2h4eAotCi0jICBpbmNsdWRlIDxAS1dTWVNfTkFNRVNQQUNFQC9Db25maWd1cmUuaHh4PgotCi0jICBpbmNsdWRlIDxhbGdvcml0aG0+IC8vIGxvd2VyX2JvdW5kCi0jICBpbmNsdWRlIDxpdGVyYXRvcj4gIC8vIGl0ZXJhdG9yX3RyYWl0cwotIyAgaW5jbHVkZSA8bWVtb3J5PiAgICAvLyBhbGxvY2F0b3IKLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAgLy8gc2l6ZV90Ci0jICBpbmNsdWRlIDx1dGlsaXR5PiAgIC8vIHBhaXIKLSMgIGluY2x1ZGUgPHZlY3Rvcj4gICAgLy8gdmVjdG9yCi0KLSMgIGlmIGRlZmluZWQoX01TQ19WRVIpCi0jICAgIHByYWdtYSB3YXJuaW5nKHB1c2gpCi0jICAgIHByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0Mjg0KQotIyAgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDc4NikKLSMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ1MTIpIC8qIG5vIGFzc2lnbm1lbnQgb3BlcmF0b3IgZm9yIGNsYXNzICovCi0jICBlbmRpZgotIyAgaWYgZGVmaW5lZChfX3NnaSkgJiYgIWRlZmluZWQoX19HTlVDX18pCi0jICAgIHByYWdtYSBzZXQgd29mZiAzOTcwIC8qIHBvaW50ZXIgdG8gaW50IGNvbnZlcnNpb24gKi8gMzMyMSAzOTY4Ci0jICBlbmRpZgotCi0vLyBJbiBDKysxMSwgY2xhbmcgd2lsbCB3YXJuIGFib3V0IHVzaW5nIGR5bmFtaWMgZXhjZXB0aW9uIHNwZWNpZmljYXRpb25zCi0vLyBhcyB0aGV5IGFyZSBkZXByZWNhdGVkLiAgQnV0IGFzIHRoaXMgY2xhc3MgaXMgdHJ5aW5nIHRvIGZhaXRoZnVsbHkKLS8vIG1pbWljIHVub3JkZXJlZF9zZXQgYW5kIHVub3JkZXJlZF9tYXAsIHdlIHdhbnQgdG8ga2VlcCB0aGUgJ3Rocm93KCknCi0vLyBkZWNvcmF0aW9ucyBiZWxvdy4gIFNvIHdlIHN1cHByZXNzIHRoZSB3YXJuaW5nLgotIyAgaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIGRlZmluZWQoX19oYXNfd2FybmluZykKLSMgICAgaWYgX19oYXNfd2FybmluZygiLVdkZXByZWNhdGVkIikKLSMgICAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jICAgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkIgotIyAgICBlbmRpZgotIyAgZW5kaWYKLQotbmFtZXNwYWNlIEBLV1NZU19OQU1FU1BBQ0VAIHsKLQotdGVtcGxhdGUgPGNsYXNzIF9WYWw+Ci1zdHJ1Y3QgX0hhc2h0YWJsZV9ub2RlCi17Ci0gIF9IYXNodGFibGVfbm9kZSogX01fbmV4dDsKLSAgX1ZhbCBfTV92YWw7Ci0gIHZvaWQgcHVibGljX21ldGhvZF90b19xdWlldF93YXJuaW5nX2Fib3V0X2FsbF9tZXRob2RzX3ByaXZhdGUoKTsKLQotcHJpdmF0ZToKLSAgdm9pZCBvcGVyYXRvcj0oX0hhc2h0YWJsZV9ub2RlPF9WYWw+IGNvbnN0JikgPSBkZWxldGU7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FeHRyYWN0S2V5LAotICAgICAgICAgIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgotY2xhc3MgaGFzaHRhYmxlOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FeHRyYWN0S2V5LAotICAgICAgICAgIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgotc3RydWN0IF9IYXNodGFibGVfaXRlcmF0b3I7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0V4dHJhY3RLZXksCi0gICAgICAgICAgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1zdHJ1Y3QgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjsKLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXh0cmFjdEtleSwKLSAgICAgICAgICBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLXN0cnVjdCBfSGFzaHRhYmxlX2l0ZXJhdG9yCi17Ci0gIHR5cGVkZWYgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IYXNoRmNuLCBfRXh0cmFjdEtleSwgX0VxdWFsS2V5LCBfQWxsb2M+Ci0gICAgX0hhc2h0YWJsZTsKLSAgdHlwZWRlZiBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLCBfRXh0cmFjdEtleSwgX0VxdWFsS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jPgotICAgIGl0ZXJhdG9yOwotICB0eXBlZGVmIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hhc2hGY24sIF9FeHRyYWN0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0VxdWFsS2V5LCBfQWxsb2M+Ci0gICAgY29uc3RfaXRlcmF0b3I7Ci0gIHR5cGVkZWYgX0hhc2h0YWJsZV9ub2RlPF9WYWw+IF9Ob2RlOwotCi0gIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKLSAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKLSAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwotICB0eXBlZGVmIF9WYWwmIHJlZmVyZW5jZTsKLSAgdHlwZWRlZiBfVmFsKiBwb2ludGVyOwotCi0gIF9Ob2RlKiBfTV9jdXI7Ci0gIF9IYXNodGFibGUqIF9NX2h0OwotCi0gIF9IYXNodGFibGVfaXRlcmF0b3IoX05vZGUqIF9fbiwgX0hhc2h0YWJsZSogX190YWIpCi0gICAgOiBfTV9jdXIoX19uKQotICAgICwgX01faHQoX190YWIpCi0gIHsKLSAgfQotICBfSGFzaHRhYmxlX2l0ZXJhdG9yKCkge30KLSAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1ci0+X01fdmFsOyB9Ci0gIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9Ci0gIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0gIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KTsKLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSBjb25zdCB7IHJldHVybiBfTV9jdXIgPT0gX19pdC5fTV9jdXI7IH0KLSAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSBjb25zdCB7IHJldHVybiBfTV9jdXIgIT0gX19pdC5fTV9jdXI7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0V4dHJhY3RLZXksCi0gICAgICAgICAgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+Ci1zdHJ1Y3QgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcgotewotICB0eXBlZGVmIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPgotICAgIF9IYXNodGFibGU7Ci0gIHR5cGVkZWYgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvYz4KLSAgICBpdGVyYXRvcjsKLSAgdHlwZWRlZiBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLCBfRXh0cmFjdEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FcXVhbEtleSwgX0FsbG9jPgotICAgIGNvbnN0X2l0ZXJhdG9yOwotICB0eXBlZGVmIF9IYXNodGFibGVfbm9kZTxfVmFsPiBfTm9kZTsKLQotICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0gIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOwotICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKLSAgdHlwZWRlZiBjb25zdCBfVmFsJiByZWZlcmVuY2U7Ci0gIHR5cGVkZWYgY29uc3QgX1ZhbCogcG9pbnRlcjsKLQotICBjb25zdCBfTm9kZSogX01fY3VyOwotICBjb25zdCBfSGFzaHRhYmxlKiBfTV9odDsKLQotICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9Ob2RlKiBfX24sIGNvbnN0IF9IYXNodGFibGUqIF9fdGFiKQotICAgIDogX01fY3VyKF9fbikKLSAgICAsIF9NX2h0KF9fdGFiKQotICB7Ci0gIH0KLSAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcigpIHt9Ci0gIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpCi0gICAgOiBfTV9jdXIoX19pdC5fTV9jdXIpCi0gICAgLCBfTV9odChfX2l0Ll9NX2h0KQotICB7Ci0gIH0KLSAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1ci0+X01fdmFsOyB9Ci0gIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9Ci0gIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0gIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KTsKLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2l0KSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9NX2N1ciA9PSBfX2l0Ll9NX2N1cjsKLSAgfQotICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faXQpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01fY3VyICE9IF9faXQuX01fY3VyOwotICB9Ci19OwotCi0vLyBOb3RlOiBhc3N1bWVzIGxvbmcgaXMgYXQgbGVhc3QgMzIgYml0cy4KLWVudW0KLXsKLSAgX3N0bF9udW1fcHJpbWVzID0gMzEKLX07Ci0KLS8vIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBzdGF0aWMgbG9jYWwgdG8gdGhhdCBmdW5jdGlvbiB0aGF0IHJldHVybnMKLS8vIHRoZSBzdGF0aWMKLXN0YXRpYyBpbmxpbmUgY29uc3QgdW5zaWduZWQgbG9uZyogZ2V0X3N0bF9wcmltZV9saXN0KCkKLXsKLQotICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBfc3RsX3ByaW1lX2xpc3RbX3N0bF9udW1fcHJpbWVzXSA9IHsKLSAgICA1dWwsICAgICAgICAgMTF1bCwgICAgICAgIDIzdWwsICAgICAgICA1M3VsLCAgICAgICAgIDk3dWwsCi0gICAgMTkzdWwsICAgICAgIDM4OXVsLCAgICAgICA3Njl1bCwgICAgICAgMTU0M3VsLCAgICAgICAzMDc5dWwsCi0gICAgNjE1MXVsLCAgICAgIDEyMjg5dWwsICAgICAyNDU5M3VsLCAgICAgNDkxNTd1bCwgICAgICA5ODMxN3VsLAotICAgIDE5NjYxM3VsLCAgICAzOTMyNDF1bCwgICAgNzg2NDMzdWwsICAgIDE1NzI4Njl1bCwgICAgMzE0NTczOXVsLAotICAgIDYyOTE0Njl1bCwgICAxMjU4MjkxN3VsLCAgMjUxNjU4NDN1bCwgIDUwMzMxNjUzdWwsICAgMTAwNjYzMzE5dWwsCi0gICAgMjAxMzI2NjExdWwsIDQwMjY1MzE4OXVsLCA4MDUzMDY0NTd1bCwgMTYxMDYxMjc0MXVsLCAzMjIxMjI1NDczdWwsCi0gICAgNDI5NDk2NzI5MXVsCi0gIH07Ci0KLSAgcmV0dXJuICZfc3RsX3ByaW1lX2xpc3RbMF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IF9zdGxfbmV4dF9wcmltZShzaXplX3QgX19uKQotewotICBjb25zdCB1bnNpZ25lZCBsb25nKiBfX2ZpcnN0ID0gZ2V0X3N0bF9wcmltZV9saXN0KCk7Ci0gIGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fbGFzdCA9IGdldF9zdGxfcHJpbWVfbGlzdCgpICsgKGludClfc3RsX251bV9wcmltZXM7Ci0gIGNvbnN0IHVuc2lnbmVkIGxvbmcqIHBvcyA9IHN0ZDo6bG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX24pOwotICByZXR1cm4gcG9zID09IF9fbGFzdCA/ICooX19sYXN0IC0gMSkgOiAqcG9zOwotfQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIG9wZXJhdG9yPT0uCi0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotY2xhc3MgaGFzaHRhYmxlOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD4mIF9faHQxLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDIpOwotCi0vLyBIYXNodGFibGVzIGhhbmRsZSBhbGxvY2F0b3JzIGEgYml0IGRpZmZlcmVudGx5IHRoYW4gb3RoZXIgY29udGFpbmVycwotLy8gIGRvLiAgSWYgd2UncmUgdXNpbmcgc3RhbmRhcmQtY29uZm9ybWluZyBhbGxvY2F0b3JzLCB0aGVuIGEgaGFzaHRhYmxlCi0vLyAgdW5jb25kaXRpb25hbGx5IGhhcyBhIG1lbWJlciB2YXJpYWJsZSB0byBob2xkIGl0cyBhbGxvY2F0b3IsIGV2ZW4gaWYKLS8vICBpdCBzbyBoYXBwZW5zIHRoYXQgYWxsIGluc3RhbmNlcyBvZiB0aGUgYWxsb2NhdG9yIHR5cGUgYXJlIGlkZW50aWNhbC4KLS8vIFRoaXMgaXMgYmVjYXVzZSwgZm9yIGhhc2h0YWJsZXMsIHRoaXMgZXh0cmEgc3RvcmFnZSBpcyBuZWdsaWdpYmxlLgotLy8gIEFkZGl0aW9uYWxseSwgYSBiYXNlIGNsYXNzIHdvdWxkbid0IHNlcnZlIGFueSBvdGhlciBwdXJwb3NlczsgaXQKLS8vICB3b3VsZG4ndCwgZm9yIGV4YW1wbGUsIHNpbXBsaWZ5IHRoZSBleGNlcHRpb24taGFuZGxpbmcgY29kZS4KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXh0cmFjdEtleSwKLSAgICAgICAgICBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KLWNsYXNzIGhhc2h0YWJsZQotewotcHVibGljOgotICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7Ci0gIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOwotICB0eXBlZGVmIF9IYXNoRmNuIGhhc2hlcjsKLSAgdHlwZWRlZiBfRXF1YWxLZXkga2V5X2VxdWFsOwotCi0gIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKLSAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwotICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7Ci0gIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKLSAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7Ci0gIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwotCi0gIGhhc2hlciBoYXNoX2Z1bmN0KCkgY29uc3QgeyByZXR1cm4gX01faGFzaDsgfQotICBrZXlfZXF1YWwga2V5X2VxKCkgY29uc3QgeyByZXR1cm4gX01fZXF1YWxzOyB9Ci0KLXByaXZhdGU6Ci0gIHR5cGVkZWYgX0hhc2h0YWJsZV9ub2RlPF9WYWw+IF9Ob2RlOwotCi1wdWJsaWM6Ci0gIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1ZhbD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwotICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KLQotcHJpdmF0ZToKLSAgdHlwZWRlZgotICAgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9Ob2RlPjo6b3RoZXIgX01fbm9kZV9hbGxvY2F0b3JfdHlwZTsKLSAgdHlwZWRlZgotICAgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9Ob2RlKj46Om90aGVyIF9NX25vZGVfcHRyX2FsbG9jYXRvcl90eXBlOwotICB0eXBlZGVmIHN0ZDo6dmVjdG9yPF9Ob2RlKiwgX01fbm9kZV9wdHJfYWxsb2NhdG9yX3R5cGU+IF9NX2J1Y2tldHNfdHlwZTsKLQotcHJpdmF0ZToKLSAgX01fbm9kZV9hbGxvY2F0b3JfdHlwZSBfTV9ub2RlX2FsbG9jYXRvcjsKLSAgaGFzaGVyIF9NX2hhc2g7Ci0gIGtleV9lcXVhbCBfTV9lcXVhbHM7Ci0gIF9FeHRyYWN0S2V5IF9NX2dldF9rZXk7Ci0gIF9NX2J1Y2tldHNfdHlwZSBfTV9idWNrZXRzOwotICBzaXplX3R5cGUgX01fbnVtX2VsZW1lbnRzOwotCi0gIF9Ob2RlKiBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9Ci0gIHZvaWQgX01fcHV0X25vZGUoX05vZGUqIF9fcCkgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KLQotcHVibGljOgotICB0eXBlZGVmIF9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hhc2hGY24sIF9FeHRyYWN0S2V5LCBfRXF1YWxLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2M+Ci0gICAgaXRlcmF0b3I7Ci0gIHR5cGVkZWYgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXF1YWxLZXksIF9BbGxvYz4KLSAgICBjb25zdF9pdGVyYXRvcjsKLQotICBmcmllbmQgc3RydWN0IF9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hhc2hGY24sIF9FeHRyYWN0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0VxdWFsS2V5LCBfQWxsb2M+OwotICBmcmllbmQgc3RydWN0IF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hhc2hGY24sIF9FeHRyYWN0S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0VxdWFsS2V5LCBfQWxsb2M+OwotCi1wdWJsaWM6Ci0gIGhhc2h0YWJsZShzaXplX3R5cGUgX19uLCBjb25zdCBfSGFzaEZjbiYgX19oZiwgY29uc3QgX0VxdWFsS2V5JiBfX2VxbCwKLSAgICAgICAgICAgIGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4dCwKLSAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQotICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19hKQotICAgICwgX01faGFzaChfX2hmKQotICAgICwgX01fZXF1YWxzKF9fZXFsKQotICAgICwgX01fZ2V0X2tleShfX2V4dCkKLSAgICAsIF9NX2J1Y2tldHMoX19hKQotICAgICwgX01fbnVtX2VsZW1lbnRzKDApCi0gIHsKLSAgICBfTV9pbml0aWFsaXplX2J1Y2tldHMoX19uKTsKLSAgfQotCi0gIGhhc2h0YWJsZShzaXplX3R5cGUgX19uLCBjb25zdCBfSGFzaEZjbiYgX19oZiwgY29uc3QgX0VxdWFsS2V5JiBfX2VxbCwKLSAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQotICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19hKQotICAgICwgX01faGFzaChfX2hmKQotICAgICwgX01fZXF1YWxzKF9fZXFsKQotICAgICwgX01fZ2V0X2tleShfRXh0cmFjdEtleSgpKQotICAgICwgX01fYnVja2V0cyhfX2EpCi0gICAgLCBfTV9udW1fZWxlbWVudHMoMCkKLSAgewotICAgIF9NX2luaXRpYWxpemVfYnVja2V0cyhfX24pOwotICB9Ci0KLSAgaGFzaHRhYmxlKGNvbnN0IGhhc2h0YWJsZSYgX19odCkKLSAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9faHQuZ2V0X2FsbG9jYXRvcigpKQotICAgICwgX01faGFzaChfX2h0Ll9NX2hhc2gpCi0gICAgLCBfTV9lcXVhbHMoX19odC5fTV9lcXVhbHMpCi0gICAgLCBfTV9nZXRfa2V5KF9faHQuX01fZ2V0X2tleSkKLSAgICAsIF9NX2J1Y2tldHMoX19odC5nZXRfYWxsb2NhdG9yKCkpCi0gICAgLCBfTV9udW1fZWxlbWVudHMoMCkKLSAgewotICAgIF9NX2NvcHlfZnJvbShfX2h0KTsKLSAgfQotCi0gIGhhc2h0YWJsZSYgb3BlcmF0b3I9KGNvbnN0IGhhc2h0YWJsZSYgX19odCkKLSAgewotICAgIGlmICgmX19odCAhPSB0aGlzKSB7Ci0gICAgICBjbGVhcigpOwotICAgICAgX01faGFzaCA9IF9faHQuX01faGFzaDsKLSAgICAgIF9NX2VxdWFscyA9IF9faHQuX01fZXF1YWxzOwotICAgICAgX01fZ2V0X2tleSA9IF9faHQuX01fZ2V0X2tleTsKLSAgICAgIF9NX2NvcHlfZnJvbShfX2h0KTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgfmhhc2h0YWJsZSgpIHsgY2xlYXIoKTsgfQotCi0gIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbnVtX2VsZW1lbnRzOyB9Ci0gIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9Ci0KLSAgdm9pZCBzd2FwKGhhc2h0YWJsZSYgX19odCkKLSAgewotICAgIHN0ZDo6c3dhcChfTV9oYXNoLCBfX2h0Ll9NX2hhc2gpOwotICAgIHN0ZDo6c3dhcChfTV9lcXVhbHMsIF9faHQuX01fZXF1YWxzKTsKLSAgICBzdGQ6OnN3YXAoX01fZ2V0X2tleSwgX19odC5fTV9nZXRfa2V5KTsKLSAgICBfTV9idWNrZXRzLnN3YXAoX19odC5fTV9idWNrZXRzKTsKLSAgICBzdGQ6OnN3YXAoX01fbnVtX2VsZW1lbnRzLCBfX2h0Ll9NX251bV9lbGVtZW50cyk7Ci0gIH0KLQotICBpdGVyYXRvciBiZWdpbigpCi0gIHsKLSAgICBmb3IgKHNpemVfdHlwZSBfX24gPSAwOyBfX24gPCBfTV9idWNrZXRzLnNpemUoKTsgKytfX24pCi0gICAgICBpZiAoX01fYnVja2V0c1tfX25dKQotICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fYnVja2V0c1tfX25dLCB0aGlzKTsKLSAgICByZXR1cm4gZW5kKCk7Ci0gIH0KLQotICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvcihudWxscHRyLCB0aGlzKTsgfQotCi0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKLSAgewotICAgIGZvciAoc2l6ZV90eXBlIF9fbiA9IDA7IF9fbiA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19fbikKLSAgICAgIGlmIChfTV9idWNrZXRzW19fbl0pCi0gICAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9idWNrZXRzW19fbl0sIHRoaXMpOwotICAgIHJldHVybiBlbmQoKTsKLSAgfQotCi0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKG51bGxwdHIsIHRoaXMpOyB9Ci0KLSAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PTw+KGNvbnN0IGhhc2h0YWJsZSYsIGNvbnN0IGhhc2h0YWJsZSYpOwotCi1wdWJsaWM6Ci0gIHNpemVfdHlwZSBidWNrZXRfY291bnQoKSBjb25zdCB7IHJldHVybiBfTV9idWNrZXRzLnNpemUoKTsgfQotCi0gIHNpemVfdHlwZSBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QKLSAgewotICAgIHJldHVybiBnZXRfc3RsX3ByaW1lX2xpc3QoKVsoaW50KV9zdGxfbnVtX3ByaW1lcyAtIDFdOwotICB9Ci0KLSAgc2l6ZV90eXBlIGVsZW1zX2luX2J1Y2tldChzaXplX3R5cGUgX19idWNrZXQpIGNvbnN0Ci0gIHsKLSAgICBzaXplX3R5cGUgX19yZXN1bHQgPSAwOwotICAgIGZvciAoX05vZGUqIF9fY3VyID0gX01fYnVja2V0c1tfX2J1Y2tldF07IF9fY3VyOyBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0KQotICAgICAgX19yZXN1bHQgKz0gMTsKLSAgICByZXR1cm4gX19yZXN1bHQ7Ci0gIH0KLQotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCi0gIHsKLSAgICByZXNpemUoX01fbnVtX2VsZW1lbnRzICsgMSk7Ci0gICAgcmV0dXJuIGluc2VydF91bmlxdWVfbm9yZXNpemUoX19vYmopOwotICB9Ci0KLSAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotICB7Ci0gICAgcmVzaXplKF9NX251bV9lbGVtZW50cyArIDEpOwotICAgIHJldHVybiBpbnNlcnRfZXF1YWxfbm9yZXNpemUoX19vYmopOwotICB9Ci0KLSAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiBpbnNlcnRfdW5pcXVlX25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKTsKLSAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsX25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIHZvaWQgaW5zZXJ0X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKLSAgewotICAgIGluc2VydF91bmlxdWUoCi0gICAgICBfX2YsIF9fbCwKLSAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIHZvaWQgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQotICB7Ci0gICAgaW5zZXJ0X2VxdWFsKAotICAgICAgX19mLCBfX2wsCi0gICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgotICB2b2lkIGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKLSAgewotICAgIGZvciAoOyBfX2YgIT0gX19sOyArK19fZikKLSAgICAgIGluc2VydF91bmlxdWUoKl9fZik7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Ci0gIHZvaWQgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAotICAgICAgICAgICAgICAgICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKLSAgewotICAgIGZvciAoOyBfX2YgIT0gX19sOyArK19fZikKLSAgICAgIGluc2VydF9lcXVhbCgqX19mKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgotICB2b2lkIGluc2VydF91bmlxdWUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX19sLAotICAgICAgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKLSAgewotICAgIHNpemVfdHlwZSBfX24gPSAwOwotICAgIHN0ZDo6ZGlzdGFuY2UoX19mLCBfX2wsIF9fbik7Ci0gICAgcmVzaXplKF9NX251bV9lbGVtZW50cyArIF9fbik7Ci0gICAgZm9yICg7IF9fbiA+IDA7IC0tX19uLCArK19fZikKLSAgICAgIGluc2VydF91bmlxdWVfbm9yZXNpemUoKl9fZik7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KLSAgdm9pZCBpbnNlcnRfZXF1YWwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX19sLAotICAgICAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQotICB7Ci0gICAgc2l6ZV90eXBlIF9fbiA9IDA7Ci0gICAgc3RkOjpkaXN0YW5jZShfX2YsIF9fbCwgX19uKTsKLSAgICByZXNpemUoX01fbnVtX2VsZW1lbnRzICsgX19uKTsKLSAgICBmb3IgKDsgX19uID4gMDsgLS1fX24sICsrX19mKQotICAgICAgaW5zZXJ0X2VxdWFsX25vcmVzaXplKCpfX2YpOwotICB9Ci0KLSAgcmVmZXJlbmNlIGZpbmRfb3JfaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKTsKLQotICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkKLSAgewotICAgIHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7Ci0gICAgX05vZGUqIF9fZmlyc3Q7Ci0gICAgZm9yIChfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOwotICAgICAgICAgX19maXJzdCAmJiAhX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpOwotICAgICAgICAgX19maXJzdCA9IF9fZmlyc3QtPl9NX25leHQpIHsKLSAgICB9Ci0gICAgcmV0dXJuIGl0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpOwotICB9Ci0KLSAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0Ci0gIHsKLSAgICBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOwotICAgIGNvbnN0IF9Ob2RlKiBfX2ZpcnN0OwotICAgIGZvciAoX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKLSAgICAgICAgIF9fZmlyc3QgJiYgIV9NX2VxdWFscyhfTV9nZXRfa2V5KF9fZmlyc3QtPl9NX3ZhbCksIF9fa2V5KTsKLSAgICAgICAgIF9fZmlyc3QgPSBfX2ZpcnN0LT5fTV9uZXh0KSB7Ci0gICAgfQotICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX2ZpcnN0LCB0aGlzKTsKLSAgfQotCi0gIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0Ci0gIHsKLSAgICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOwotICAgIHNpemVfdHlwZSBfX3Jlc3VsdCA9IDA7Ci0KLSAgICBmb3IgKGNvbnN0IF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19uXTsgX19jdXI7IF9fY3VyID0gX19jdXItPl9NX25leHQpCi0gICAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19jdXItPl9NX3ZhbCksIF9fa2V5KSkKLSAgICAgICAgKytfX3Jlc3VsdDsKLSAgICByZXR1cm4gX19yZXN1bHQ7Ci0gIH0KLQotICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpOwotCi0gIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKAotICAgIGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3Q7Ci0KLSAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSk7Ci0gIHZvaWQgZXJhc2UoY29uc3QgaXRlcmF0b3ImIF9faXQpOwotICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7Ci0KLSAgdm9pZCBlcmFzZShjb25zdCBjb25zdF9pdGVyYXRvciYgX19pdCk7Ci0gIHZvaWQgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KTsKLQotICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19udW1fZWxlbWVudHNfaGludCk7Ci0gIHZvaWQgY2xlYXIoKTsKLQotcHJpdmF0ZToKLSAgc2l6ZV90eXBlIF9NX25leHRfc2l6ZShzaXplX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiBfc3RsX25leHRfcHJpbWUoX19uKTsgfQotCi0gIHZvaWQgX01faW5pdGlhbGl6ZV9idWNrZXRzKHNpemVfdHlwZSBfX24pCi0gIHsKLSAgICBjb25zdCBzaXplX3R5cGUgX19uX2J1Y2tldHMgPSBfTV9uZXh0X3NpemUoX19uKTsKLSAgICBfTV9idWNrZXRzLnJlc2VydmUoX19uX2J1Y2tldHMpOwotICAgIF9NX2J1Y2tldHMuaW5zZXJ0KF9NX2J1Y2tldHMuZW5kKCksIF9fbl9idWNrZXRzLCAoX05vZGUqKW51bGxwdHIpOwotICAgIF9NX251bV9lbGVtZW50cyA9IDA7Ci0gIH0KLQotICBzaXplX3R5cGUgX01fYmt0X251bV9rZXkoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9NX2JrdF9udW1fa2V5KF9fa2V5LCBfTV9idWNrZXRzLnNpemUoKSk7Ci0gIH0KLQotICBzaXplX3R5cGUgX01fYmt0X251bShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikgY29uc3QKLSAgewotICAgIHJldHVybiBfTV9ia3RfbnVtX2tleShfTV9nZXRfa2V5KF9fb2JqKSk7Ci0gIH0KLQotICBzaXplX3R5cGUgX01fYmt0X251bV9rZXkoY29uc3Qga2V5X3R5cGUmIF9fa2V5LCBzaXplX3QgX19uKSBjb25zdAotICB7Ci0gICAgcmV0dXJuIF9NX2hhc2goX19rZXkpICUgX19uOwotICB9Ci0KLSAgc2l6ZV90eXBlIF9NX2JrdF9udW0oY29uc3QgdmFsdWVfdHlwZSYgX19vYmosIHNpemVfdCBfX24pIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gX01fYmt0X251bV9rZXkoX01fZ2V0X2tleShfX29iaiksIF9fbik7Ci0gIH0KLQotICB2b2lkIGNvbnN0cnVjdChfVmFsKiBwLCBjb25zdCBfVmFsJiB2KSB7IG5ldyAocCkgX1ZhbCh2KTsgfQotICB2b2lkIGRlc3Ryb3koX1ZhbCogcCkKLSAgewotICAgICh2b2lkKXA7Ci0gICAgcC0+fl9WYWwoKTsKLSAgfQotCi0gIF9Ob2RlKiBfTV9uZXdfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKLSAgewotICAgIF9Ob2RlKiBfX24gPSBfTV9nZXRfbm9kZSgpOwotICAgIF9fbi0+X01fbmV4dCA9IG51bGxwdHI7Ci0gICAgdHJ5IHsKLSAgICAgIGNvbnN0cnVjdCgmX19uLT5fTV92YWwsIF9fb2JqKTsKLSAgICAgIHJldHVybiBfX247Ci0gICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICBfTV9wdXRfbm9kZShfX24pOwotICAgICAgdGhyb3c7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBfTV9kZWxldGVfbm9kZShfTm9kZSogX19uKQotICB7Ci0gICAgZGVzdHJveSgmX19uLT5fTV92YWwpOwotICAgIF9NX3B1dF9ub2RlKF9fbik7Ci0gIH0KLQotICB2b2lkIF9NX2VyYXNlX2J1Y2tldChjb25zdCBzaXplX3R5cGUgX19uLCBfTm9kZSogX19maXJzdCwgX05vZGUqIF9fbGFzdCk7Ci0gIHZvaWQgX01fZXJhc2VfYnVja2V0KGNvbnN0IHNpemVfdHlwZSBfX24sIF9Ob2RlKiBfX2xhc3QpOwotCi0gIHZvaWQgX01fY29weV9mcm9tKGNvbnN0IGhhc2h0YWJsZSYgX19odCk7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXhLLCBjbGFzcyBfRXFLLAotICAgICAgICAgIGNsYXNzIF9BbGw+Ci1fSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD4mCi1fSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD46Om9wZXJhdG9yKysoKQotewotICBjb25zdCBfTm9kZSogX19vbGQgPSBfTV9jdXI7Ci0gIF9NX2N1ciA9IF9NX2N1ci0+X01fbmV4dDsKLSAgaWYgKCFfTV9jdXIpIHsKLSAgICBzaXplX3R5cGUgX19idWNrZXQgPSBfTV9odC0+X01fYmt0X251bShfX29sZC0+X01fdmFsKTsKLSAgICB3aGlsZSAoIV9NX2N1ciAmJiArK19fYnVja2V0IDwgX01faHQtPl9NX2J1Y2tldHMuc2l6ZSgpKQotICAgICAgX01fY3VyID0gX01faHQtPl9NX2J1Y2tldHNbX19idWNrZXRdOwotICB9Ci0gIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4SywgY2xhc3MgX0VxSywKLSAgICAgICAgICBjbGFzcyBfQWxsPgotaW5saW5lIF9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPgotX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSEYsIF9FeEssIF9FcUssIF9BbGw+OjpvcGVyYXRvcisrKGludCkKLXsKLSAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKLSAgKysqdGhpczsKLSAgcmV0dXJuIF9fdG1wOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXhLLCBjbGFzcyBfRXFLLAotICAgICAgICAgIGNsYXNzIF9BbGw+Ci1fSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD4mCi1fSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD46Om9wZXJhdG9yKysoKQotewotICBjb25zdCBfTm9kZSogX19vbGQgPSBfTV9jdXI7Ci0gIF9NX2N1ciA9IF9NX2N1ci0+X01fbmV4dDsKLSAgaWYgKCFfTV9jdXIpIHsKLSAgICBzaXplX3R5cGUgX19idWNrZXQgPSBfTV9odC0+X01fYmt0X251bShfX29sZC0+X01fdmFsKTsKLSAgICB3aGlsZSAoIV9NX2N1ciAmJiArK19fYnVja2V0IDwgX01faHQtPl9NX2J1Y2tldHMuc2l6ZSgpKQotICAgICAgX01fY3VyID0gX01faHQtPl9NX2J1Y2tldHNbX19idWNrZXRdOwotICB9Ci0gIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4SywgY2xhc3MgX0VxSywKLSAgICAgICAgICBjbGFzcyBfQWxsPgotaW5saW5lIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPgotX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSEYsIF9FeEssIF9FcUssIF9BbGw+OjpvcGVyYXRvcisrKGludCkKLXsKLSAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKLSAgKysqdGhpczsKLSAgcmV0dXJuIF9fdG1wOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD4mIF9faHQxLAotICAgICAgICAgICAgICAgIGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDIpCi17Ci0gIHR5cGVkZWYgdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjpfTm9kZSBfTm9kZTsKLSAgaWYgKF9faHQxLl9NX2J1Y2tldHMuc2l6ZSgpICE9IF9faHQyLl9NX2J1Y2tldHMuc2l6ZSgpKQotICAgIHJldHVybiBmYWxzZTsKLSAgZm9yIChpbnQgX19uID0gMDsgX19uIDwgX19odDEuX01fYnVja2V0cy5zaXplKCk7ICsrX19uKSB7Ci0gICAgX05vZGUqIF9fY3VyMSA9IF9faHQxLl9NX2J1Y2tldHNbX19uXTsKLSAgICBfTm9kZSogX19jdXIyID0gX19odDIuX01fYnVja2V0c1tfX25dOwotICAgIGZvciAoOyBfX2N1cjEgJiYgX19jdXIyICYmIF9fY3VyMS0+X01fdmFsID09IF9fY3VyMi0+X01fdmFsOwotICAgICAgICAgX19jdXIxID0gX19jdXIxLT5fTV9uZXh0LCBfX2N1cjIgPSBfX2N1cjItPl9NX25leHQpIHsKLSAgICB9Ci0gICAgaWYgKF9fY3VyMSB8fCBfX2N1cjIpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD4mIF9faHQxLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD4mIF9faHQyKQotewotICByZXR1cm4gIShfX2h0MSA9PSBfX2h0Mik7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeHRyYWN0LCBjbGFzcyBfRXFLZXksCi0gICAgICAgICAgY2xhc3MgX0FsbD4KLWlubGluZSB2b2lkIHN3YXAoaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4dHJhY3QsIF9FcUtleSwgX0FsbD4mIF9faHQxLAotICAgICAgICAgICAgICAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXh0cmFjdCwgX0VxS2V5LCBfQWxsPiYgX19odDIpCi17Ci0gIF9faHQxLnN3YXAoX19odDIpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLXN0ZDo6cGFpcjx0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Oml0ZXJhdG9yLCBib29sPgotaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjppbnNlcnRfdW5pcXVlX25vcmVzaXplKAotICBjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKLXsKLSAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW0oX19vYmopOwotICBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKLQotICBmb3IgKF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3Q7IF9fY3VyOyBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0KQotICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2N1ci0+X01fdmFsKSwgX01fZ2V0X2tleShfX29iaikpKQotICAgICAgcmV0dXJuIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4oaXRlcmF0b3IoX19jdXIsIHRoaXMpLCBmYWxzZSk7Ci0KLSAgX05vZGUqIF9fdG1wID0gX01fbmV3X25vZGUoX19vYmopOwotICBfX3RtcC0+X01fbmV4dCA9IF9fZmlyc3Q7Ci0gIF9NX2J1Y2tldHNbX19uXSA9IF9fdG1wOwotICArK19NX251bV9lbGVtZW50czsKLSAgcmV0dXJuIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4oaXRlcmF0b3IoX190bXAsIHRoaXMpLCB0cnVlKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci10eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Oml0ZXJhdG9yCi1oYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Omluc2VydF9lcXVhbF9ub3Jlc2l6ZSgKLSAgY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCi17Ci0gIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtKF9fb2JqKTsKLSAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07Ci0KLSAgZm9yIChfTm9kZSogX19jdXIgPSBfX2ZpcnN0OyBfX2N1cjsgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKLSAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19jdXItPl9NX3ZhbCksIF9NX2dldF9rZXkoX19vYmopKSkgewotICAgICAgX05vZGUqIF9fdG1wID0gX01fbmV3X25vZGUoX19vYmopOwotICAgICAgX190bXAtPl9NX25leHQgPSBfX2N1ci0+X01fbmV4dDsKLSAgICAgIF9fY3VyLT5fTV9uZXh0ID0gX190bXA7Ci0gICAgICArK19NX251bV9lbGVtZW50czsKLSAgICAgIHJldHVybiBpdGVyYXRvcihfX3RtcCwgdGhpcyk7Ci0gICAgfQotCi0gIF9Ob2RlKiBfX3RtcCA9IF9NX25ld19ub2RlKF9fb2JqKTsKLSAgX190bXAtPl9NX25leHQgPSBfX2ZpcnN0OwotICBfTV9idWNrZXRzW19fbl0gPSBfX3RtcDsKLSAgKytfTV9udW1fZWxlbWVudHM7Ci0gIHJldHVybiBpdGVyYXRvcihfX3RtcCwgdGhpcyk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjpyZWZlcmVuY2UKLWhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6ZmluZF9vcl9pbnNlcnQoCi0gIGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQotewotICByZXNpemUoX01fbnVtX2VsZW1lbnRzICsgMSk7Ci0KLSAgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW0oX19vYmopOwotICBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKLQotICBmb3IgKF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3Q7IF9fY3VyOyBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0KQotICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2N1ci0+X01fdmFsKSwgX01fZ2V0X2tleShfX29iaikpKQotICAgICAgcmV0dXJuIF9fY3VyLT5fTV92YWw7Ci0KLSAgX05vZGUqIF9fdG1wID0gX01fbmV3X25vZGUoX19vYmopOwotICBfX3RtcC0+X01fbmV4dCA9IF9fZmlyc3Q7Ci0gIF9NX2J1Y2tldHNbX19uXSA9IF9fdG1wOwotICArK19NX251bV9lbGVtZW50czsKLSAgcmV0dXJuIF9fdG1wLT5fTV92YWw7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotc3RkOjpwYWlyPHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6aXRlcmF0b3IsCi0gICAgICAgICAgdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjppdGVyYXRvcj4KLWhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQotewotICB0eXBlZGVmIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IF9QaWk7Ci0gIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7Ci0KLSAgZm9yIChfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsgX19maXJzdDsgX19maXJzdCA9IF9fZmlyc3QtPl9NX25leHQpCi0gICAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fZmlyc3QtPl9NX3ZhbCksIF9fa2V5KSkgewotICAgICAgZm9yIChfTm9kZSogX19jdXIgPSBfX2ZpcnN0LT5fTV9uZXh0OyBfX2N1cjsgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKLSAgICAgICAgaWYgKCFfTV9lcXVhbHMoX01fZ2V0X2tleShfX2N1ci0+X01fdmFsKSwgX19rZXkpKQotICAgICAgICAgIHJldHVybiBfUGlpKGl0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLCBpdGVyYXRvcihfX2N1ciwgdGhpcykpOwotICAgICAgZm9yIChzaXplX3R5cGUgX19tID0gX19uICsgMTsgX19tIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19tKQotICAgICAgICBpZiAoX01fYnVja2V0c1tfX21dKQotICAgICAgICAgIHJldHVybiBfUGlpKGl0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2J1Y2tldHNbX19tXSwgdGhpcykpOwotICAgICAgcmV0dXJuIF9QaWkoaXRlcmF0b3IoX19maXJzdCwgdGhpcyksIGVuZCgpKTsKLSAgICB9Ci0gIHJldHVybiBfUGlpKGVuZCgpLCBlbmQoKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotc3RkOjpwYWlyPHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6Y29uc3RfaXRlcmF0b3IsCi0gICAgICAgICAgdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+Ojpjb25zdF9pdGVyYXRvcj4KLWhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6ZXF1YWxfcmFuZ2UoCi0gIGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKLXsKLSAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfUGlpOwotICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOwotCi0gIGZvciAoY29uc3QgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07IF9fZmlyc3Q7Ci0gICAgICAgX19maXJzdCA9IF9fZmlyc3QtPl9NX25leHQpIHsKLSAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpKSB7Ci0gICAgICBmb3IgKGNvbnN0IF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3QtPl9NX25leHQ7IF9fY3VyOwotICAgICAgICAgICBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0KQotICAgICAgICBpZiAoIV9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3VyLT5fTV92YWwpLCBfX2tleSkpCi0gICAgICAgICAgcmV0dXJuIF9QaWkoY29uc3RfaXRlcmF0b3IoX19maXJzdCwgdGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IoX19jdXIsIHRoaXMpKTsKLSAgICAgIGZvciAoc2l6ZV90eXBlIF9fbSA9IF9fbiArIDE7IF9fbSA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19fbSkKLSAgICAgICAgaWYgKF9NX2J1Y2tldHNbX19tXSkKLSAgICAgICAgICByZXR1cm4gX1BpaShjb25zdF9pdGVyYXRvcihfX2ZpcnN0LCB0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcihfTV9idWNrZXRzW19fbV0sIHRoaXMpKTsKLSAgICAgIHJldHVybiBfUGlpKGNvbnN0X2l0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLCBlbmQoKSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBfUGlpKGVuZCgpLCBlbmQoKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjpzaXplX3R5cGUKLWhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6ZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQotewotICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOwotICBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKLSAgc2l6ZV90eXBlIF9fZXJhc2VkID0gMDsKLQotICBpZiAoX19maXJzdCkgewotICAgIF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3Q7Ci0gICAgX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwotICAgIHdoaWxlIChfX25leHQpIHsKLSAgICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX25leHQtPl9NX3ZhbCksIF9fa2V5KSkgewotICAgICAgICBfX2N1ci0+X01fbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKLSAgICAgICAgX01fZGVsZXRlX25vZGUoX19uZXh0KTsKLSAgICAgICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7Ci0gICAgICAgICsrX19lcmFzZWQ7Ci0gICAgICAgIC0tX01fbnVtX2VsZW1lbnRzOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgX19jdXIgPSBfX25leHQ7Ci0gICAgICAgIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwotICAgICAgfQotICAgIH0KLSAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpKSB7Ci0gICAgICBfTV9idWNrZXRzW19fbl0gPSBfX2ZpcnN0LT5fTV9uZXh0OwotICAgICAgX01fZGVsZXRlX25vZGUoX19maXJzdCk7Ci0gICAgICArK19fZXJhc2VkOwotICAgICAgLS1fTV9udW1fZWxlbWVudHM7Ci0gICAgfQotICB9Ci0gIHJldHVybiBfX2VyYXNlZDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci12b2lkIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6ZXJhc2UoY29uc3QgaXRlcmF0b3ImIF9faXQpCi17Ci0gIF9Ob2RlKiBfX3AgPSBfX2l0Ll9NX2N1cjsKLSAgaWYgKF9fcCkgewotICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtKF9fcC0+X01fdmFsKTsKLSAgICBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19fbl07Ci0KLSAgICBpZiAoX19jdXIgPT0gX19wKSB7Ci0gICAgICBfTV9idWNrZXRzW19fbl0gPSBfX2N1ci0+X01fbmV4dDsKLSAgICAgIF9NX2RlbGV0ZV9ub2RlKF9fY3VyKTsKLSAgICAgIC0tX01fbnVtX2VsZW1lbnRzOwotICAgIH0gZWxzZSB7Ci0gICAgICBfTm9kZSogX19uZXh0ID0gX19jdXItPl9NX25leHQ7Ci0gICAgICB3aGlsZSAoX19uZXh0KSB7Ci0gICAgICAgIGlmIChfX25leHQgPT0gX19wKSB7Ci0gICAgICAgICAgX19jdXItPl9NX25leHQgPSBfX25leHQtPl9NX25leHQ7Ci0gICAgICAgICAgX01fZGVsZXRlX25vZGUoX19uZXh0KTsKLSAgICAgICAgICAtLV9NX251bV9lbGVtZW50czsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBfX2N1ciA9IF9fbmV4dDsKLSAgICAgICAgICBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLXZvaWQgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIF9fbGFzdCkKLXsKLSAgc2l6ZV90eXBlIF9fZl9idWNrZXQgPQotICAgIF9fZmlyc3QuX01fY3VyID8gX01fYmt0X251bShfX2ZpcnN0Ll9NX2N1ci0+X01fdmFsKSA6IF9NX2J1Y2tldHMuc2l6ZSgpOwotICBzaXplX3R5cGUgX19sX2J1Y2tldCA9Ci0gICAgX19sYXN0Ll9NX2N1ciA/IF9NX2JrdF9udW0oX19sYXN0Ll9NX2N1ci0+X01fdmFsKSA6IF9NX2J1Y2tldHMuc2l6ZSgpOwotCi0gIGlmIChfX2ZpcnN0Ll9NX2N1ciA9PSBfX2xhc3QuX01fY3VyKQotICAgIHJldHVybjsKLSAgZWxzZSBpZiAoX19mX2J1Y2tldCA9PSBfX2xfYnVja2V0KQotICAgIF9NX2VyYXNlX2J1Y2tldChfX2ZfYnVja2V0LCBfX2ZpcnN0Ll9NX2N1ciwgX19sYXN0Ll9NX2N1cik7Ci0gIGVsc2UgewotICAgIF9NX2VyYXNlX2J1Y2tldChfX2ZfYnVja2V0LCBfX2ZpcnN0Ll9NX2N1ciwgbnVsbHB0cik7Ci0gICAgZm9yIChzaXplX3R5cGUgX19uID0gX19mX2J1Y2tldCArIDE7IF9fbiA8IF9fbF9idWNrZXQ7ICsrX19uKQotICAgICAgX01fZXJhc2VfYnVja2V0KF9fbiwgbnVsbHB0cik7Ci0gICAgaWYgKF9fbF9idWNrZXQgIT0gX01fYnVja2V0cy5zaXplKCkpCi0gICAgICBfTV9lcmFzZV9idWNrZXQoX19sX2J1Y2tldCwgX19sYXN0Ll9NX2N1cik7Ci0gIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci1pbmxpbmUgdm9pZCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OmVyYXNlKAotICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCi17Ci0gIGVyYXNlKGl0ZXJhdG9yKGNvbnN0X2Nhc3Q8X05vZGUqPihfX2ZpcnN0Ll9NX2N1ciksCi0gICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8aGFzaHRhYmxlKj4oX19maXJzdC5fTV9odCkpLAotICAgICAgICBpdGVyYXRvcihjb25zdF9jYXN0PF9Ob2RlKj4oX19sYXN0Ll9NX2N1ciksCi0gICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8aGFzaHRhYmxlKj4oX19sYXN0Ll9NX2h0KSkpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLWlubGluZSB2b2lkIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6ZXJhc2UoCi0gIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2l0KQotewotICBlcmFzZShpdGVyYXRvcihjb25zdF9jYXN0PF9Ob2RlKj4oX19pdC5fTV9jdXIpLAotICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGhhc2h0YWJsZSo+KF9faXQuX01faHQpKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotdm9pZCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OnJlc2l6ZSgKLSAgc2l6ZV90eXBlIF9fbnVtX2VsZW1lbnRzX2hpbnQpCi17Ci0gIGNvbnN0IHNpemVfdHlwZSBfX29sZF9uID0gX01fYnVja2V0cy5zaXplKCk7Ci0gIGlmIChfX251bV9lbGVtZW50c19oaW50ID4gX19vbGRfbikgewotICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9uZXh0X3NpemUoX19udW1fZWxlbWVudHNfaGludCk7Ci0gICAgaWYgKF9fbiA+IF9fb2xkX24pIHsKLSAgICAgIF9NX2J1Y2tldHNfdHlwZSBfX3RtcChfX24sIChfTm9kZSopKG51bGxwdHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2J1Y2tldHMuZ2V0X2FsbG9jYXRvcigpKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGZvciAoc2l6ZV90eXBlIF9fYnVja2V0ID0gMDsgX19idWNrZXQgPCBfX29sZF9uOyArK19fYnVja2V0KSB7Ci0gICAgICAgICAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fYnVja2V0XTsKLSAgICAgICAgICB3aGlsZSAoX19maXJzdCkgewotICAgICAgICAgICAgc2l6ZV90eXBlIF9fbmV3X2J1Y2tldCA9IF9NX2JrdF9udW0oX19maXJzdC0+X01fdmFsLCBfX24pOwotICAgICAgICAgICAgX01fYnVja2V0c1tfX2J1Y2tldF0gPSBfX2ZpcnN0LT5fTV9uZXh0OwotICAgICAgICAgICAgX19maXJzdC0+X01fbmV4dCA9IF9fdG1wW19fbmV3X2J1Y2tldF07Ci0gICAgICAgICAgICBfX3RtcFtfX25ld19idWNrZXRdID0gX19maXJzdDsKLSAgICAgICAgICAgIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fYnVja2V0XTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgX01fYnVja2V0cy5zd2FwKF9fdG1wKTsKLSAgICAgIH0gY2F0Y2ggKC4uLikgewotICAgICAgICBmb3IgKHNpemVfdHlwZSBfX2J1Y2tldCA9IDA7IF9fYnVja2V0IDwgX190bXAuc2l6ZSgpOyArK19fYnVja2V0KSB7Ci0gICAgICAgICAgd2hpbGUgKF9fdG1wW19fYnVja2V0XSkgewotICAgICAgICAgICAgX05vZGUqIF9fbmV4dCA9IF9fdG1wW19fYnVja2V0XS0+X01fbmV4dDsKLSAgICAgICAgICAgIF9NX2RlbGV0ZV9ub2RlKF9fdG1wW19fYnVja2V0XSk7Ci0gICAgICAgICAgICBfX3RtcFtfX2J1Y2tldF0gPSBfX25leHQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRocm93OwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLXZvaWQgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjpfTV9lcmFzZV9idWNrZXQoCi0gIGNvbnN0IHNpemVfdHlwZSBfX24sIF9Ob2RlKiBfX2ZpcnN0LCBfTm9kZSogX19sYXN0KQotewotICBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19fbl07Ci0gIGlmIChfX2N1ciA9PSBfX2ZpcnN0KQotICAgIF9NX2VyYXNlX2J1Y2tldChfX24sIF9fbGFzdCk7Ci0gIGVsc2UgewotICAgIF9Ob2RlKiBfX25leHQ7Ci0gICAgZm9yIChfX25leHQgPSBfX2N1ci0+X01fbmV4dDsgX19uZXh0ICE9IF9fZmlyc3Q7Ci0gICAgICAgICBfX2N1ciA9IF9fbmV4dCwgX19uZXh0ID0gX19jdXItPl9NX25leHQpCi0gICAgICA7Ci0gICAgd2hpbGUgKF9fbmV4dCAhPSBfX2xhc3QpIHsKLSAgICAgIF9fY3VyLT5fTV9uZXh0ID0gX19uZXh0LT5fTV9uZXh0OwotICAgICAgX01fZGVsZXRlX25vZGUoX19uZXh0KTsKLSAgICAgIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwotICAgICAgLS1fTV9udW1fZWxlbWVudHM7Ci0gICAgfQotICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgotdm9pZCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Ol9NX2VyYXNlX2J1Y2tldCgKLSAgY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUqIF9fbGFzdCkKLXsKLSAgX05vZGUqIF9fY3VyID0gX01fYnVja2V0c1tfX25dOwotICB3aGlsZSAoX19jdXIgIT0gX19sYXN0KSB7Ci0gICAgX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwotICAgIF9NX2RlbGV0ZV9ub2RlKF9fY3VyKTsKLSAgICBfX2N1ciA9IF9fbmV4dDsKLSAgICBfTV9idWNrZXRzW19fbl0gPSBfX2N1cjsKLSAgICAtLV9NX251bV9lbGVtZW50czsKLSAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KLXZvaWQgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjpjbGVhcigpCi17Ci0gIGZvciAoc2l6ZV90eXBlIF9faSA9IDA7IF9faSA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19faSkgewotICAgIF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19pXTsKLSAgICB3aGlsZSAoX19jdXIgIT0gbnVsbHB0cikgewotICAgICAgX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwotICAgICAgX01fZGVsZXRlX25vZGUoX19jdXIpOwotICAgICAgX19jdXIgPSBfX25leHQ7Ci0gICAgfQotICAgIF9NX2J1Y2tldHNbX19pXSA9IG51bGxwdHI7Ci0gIH0KLSAgX01fbnVtX2VsZW1lbnRzID0gMDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+Ci12b2lkIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6X01fY29weV9mcm9tKAotICBjb25zdCBoYXNodGFibGUmIF9faHQpCi17Ci0gIF9NX2J1Y2tldHMuY2xlYXIoKTsKLSAgX01fYnVja2V0cy5yZXNlcnZlKF9faHQuX01fYnVja2V0cy5zaXplKCkpOwotICBfTV9idWNrZXRzLmluc2VydChfTV9idWNrZXRzLmVuZCgpLCBfX2h0Ll9NX2J1Y2tldHMuc2l6ZSgpLCAoX05vZGUqKW51bGxwdHIpOwotICB0cnkgewotICAgIGZvciAoc2l6ZV90eXBlIF9faSA9IDA7IF9faSA8IF9faHQuX01fYnVja2V0cy5zaXplKCk7ICsrX19pKSB7Ci0gICAgICBjb25zdCBfTm9kZSogX19jdXIgPSBfX2h0Ll9NX2J1Y2tldHNbX19pXTsKLSAgICAgIGlmIChfX2N1cikgewotICAgICAgICBfTm9kZSogX19jb3B5ID0gX01fbmV3X25vZGUoX19jdXItPl9NX3ZhbCk7Ci0gICAgICAgIF9NX2J1Y2tldHNbX19pXSA9IF9fY29weTsKLQotICAgICAgICBmb3IgKF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsgX19uZXh0OwotICAgICAgICAgICAgIF9fY3VyID0gX19uZXh0LCBfX25leHQgPSBfX2N1ci0+X01fbmV4dCkgewotICAgICAgICAgIF9fY29weS0+X01fbmV4dCA9IF9NX25ld19ub2RlKF9fbmV4dC0+X01fdmFsKTsKLSAgICAgICAgICBfX2NvcHkgPSBfX2NvcHktPl9NX25leHQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgX01fbnVtX2VsZW1lbnRzID0gX19odC5fTV9udW1fZWxlbWVudHM7Ci0gIH0gY2F0Y2ggKC4uLikgewotICAgIGNsZWFyKCk7Ci0gICAgdGhyb3c7Ci0gIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgQEtXU1lTX05BTUVTUEFDRUAKLQotLy8gVW5kbyB3YXJuaW5nIHN1cHByZXNzaW9uLgotIyAgaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIGRlZmluZWQoX19oYXNfd2FybmluZykKLSMgICAgaWYgX19oYXNfd2FybmluZygiLVdkZXByZWNhdGVkIikKLSMgICAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0KLSMgIGlmIGRlZmluZWQoX01TQ19WRVIpCi0jICAgIHByYWdtYSB3YXJuaW5nKHBvcCkKLSMgIGVuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZSBiL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHMuY21ha2UKaW5kZXggMjhkM2Y2OC4uODliZTRiOCAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL2t3c3lzUGxhdGZvcm1UZXN0cy5jbWFrZQorKysgYi9Tb3VyY2Uva3dzeXMva3dzeXNQbGF0Zm9ybVRlc3RzLmNtYWtlCkBAIC0xLDE4NSArMSwxODUgQEAKICMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKICMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyNrd3N5cyBmb3IgZGV0YWlscy4KIAotU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRklMRV9DIGt3c3lzUGxhdGZvcm1UZXN0c0MuYykKLVNFVChLV1NZU19QTEFURk9STV9URVNUX0ZJTEVfQ1hYIGt3c3lzUGxhdGZvcm1UZXN0c0NYWC5jeHgpCitzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9GSUxFX0Mga3dzeXNQbGF0Zm9ybVRlc3RzQy5jKQorc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRklMRV9DWFgga3dzeXNQbGF0Zm9ybVRlc3RzQ1hYLmN4eCkKIAotTUFDUk8oS1dTWVNfUExBVEZPUk1fVEVTVCBsYW5nIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCi0gIElGKE5PVCBERUZJTkVEICR7dmFyfV9DT01QSUxFRCkKLSAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0iKQorbWFjcm8oS1dTWVNfUExBVEZPUk1fVEVTVCBsYW5nIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCisgIGlmKE5PVCBERUZJTkVEICR7dmFyfV9DT01QSUxFRCkKKyAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0iKQogICAgIHNldChtYXliZV9jeHhfc3RhbmRhcmQgIiIpCiAgICAgaWYoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy44IEFORCBDTUFLRV9DWFhfU1RBTkRBUkQpCiAgICAgICBzZXQobWF5YmVfY3h4X3N0YW5kYXJkICItRENNQUtFX0NYWF9TVEFOREFSRD0ke0NNQUtFX0NYWF9TVEFOREFSRH0iKQogICAgIGVuZGlmKCkKLSAgICBUUllfQ09NUElMRSgke3Zhcn1fQ09NUElMRUQKKyAgICB0cnlfY29tcGlsZSgke3Zhcn1fQ09NUElMRUQKICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQogICAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7S1dTWVNfUExBVEZPUk1fVEVTVF9GSUxFXyR7bGFuZ319CiAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIC1EVEVTVF8ke3Zhcn0gJHtLV1NZU19QTEFURk9STV9URVNUX0RFRklORVN9ICR7S1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHU30KICAgICAgIENNQUtFX0ZMQUdTICItRExJTktfTElCUkFSSUVTOlNUUklORz0ke0tXU1lTX1BMQVRGT1JNX1RFU1RfTElOS19MSUJSQVJJRVN9IgogICAgICAgICAgICAgICAgICAgJHttYXliZV9jeHhfc3RhbmRhcmR9CiAgICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUKQotICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgIEZJTEUoQVBQRU5ECisgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgZmlsZShBUFBFTkQKICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgIiR7ZGVzY3JpcHRpb259IGNvbXBpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKLSAgICBFTFNFKCkKLSAgICAgIEZJTEUoQVBQRU5ECisgICAgZWxzZSgpCisgICAgICBmaWxlKEFQUEVORAogICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICIke2Rlc2NyaXB0aW9ufSBmYWlsZWQgdG8gY29tcGlsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gICAgRU5ESUYoKQotICAgIElGKCR7aW52ZXJ0fSBNQVRDSEVTIElOVkVSVCkKLSAgICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gbm8iKQotICAgICAgRUxTRSgpCi0gICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIHllcyIpCi0gICAgICBFTkRJRigpCi0gICAgRUxTRSgpCi0gICAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIHllcyIpCi0gICAgICBFTFNFKCkKLSAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gbm8iKQotICAgICAgRU5ESUYoKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotICBJRigke2ludmVydH0gTUFUQ0hFUyBJTlZFUlQpCi0gICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgU0VUKCR7dmFyfSAwKQotICAgIEVMU0UoKQotICAgICAgU0VUKCR7dmFyfSAxKQotICAgIEVORElGKCkKLSAgRUxTRSgpCi0gICAgSUYoJHt2YXJ9X0NPTVBJTEVEKQotICAgICAgU0VUKCR7dmFyfSAxKQotICAgIEVMU0UoKQotICAgICAgU0VUKCR7dmFyfSAwKQotICAgIEVORElGKCkKLSAgRU5ESUYoKQotRU5ETUFDUk8oKQorICAgIGVuZGlmKCkKKyAgICBpZigke2ludmVydH0gTUFUQ0hFUyBJTlZFUlQpCisgICAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIG5vIikKKyAgICAgIGVsc2UoKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSB5ZXMiKQorICAgICAgZW5kaWYoKQorICAgIGVsc2UoKQorICAgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSB5ZXMiKQorICAgICAgZWxzZSgpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIG5vIikKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKyAgaWYoJHtpbnZlcnR9IE1BVENIRVMgSU5WRVJUKQorICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgIHNldCgke3Zhcn0gMCkKKyAgICBlbHNlKCkKKyAgICAgIHNldCgke3Zhcn0gMSkKKyAgICBlbmRpZigpCisgIGVsc2UoKQorICAgIGlmKCR7dmFyfV9DT01QSUxFRCkKKyAgICAgIHNldCgke3Zhcn0gMSkKKyAgICBlbHNlKCkKKyAgICAgIHNldCgke3Zhcn0gMCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKIAotTUFDUk8oS1dTWVNfUExBVEZPUk1fVEVTVF9SVU4gbGFuZyB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQotICBJRihOT1QgREVGSU5FRCAke3Zhcn0pCi0gICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IikKLSAgICBUUllfUlVOKCR7dmFyfSAke3Zhcn1fQ09NUElMRUQKK21hY3JvKEtXU1lTX1BMQVRGT1JNX1RFU1RfUlVOIGxhbmcgdmFyIGRlc2NyaXB0aW9uIGludmVydCkKKyAgaWYoTk9UIERFRklORUQgJHt2YXJ9KQorICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSIpCisgICAgdHJ5X3J1bigke3Zhcn0gJHt2YXJ9X0NPTVBJTEVECiAgICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke0tXU1lTX1BMQVRGT1JNX1RFU1RfRklMRV8ke2xhbmd9fQogICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyAtRFRFU1RfJHt2YXJ9ICR7S1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTfSAke0tXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1N9CiAgICAgICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUKQogCiAgICAgIyBOb3RlIHRoYXQgJHt2YXJ9IHdpbGwgYmUgYSAwIHJldHVybiB2YWx1ZSBvbiBzdWNjZXNzLgotICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgIElGKCR7dmFyfSkKLSAgICAgICAgRklMRShBUFBFTkQKKyAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICBpZigke3Zhcn0pCisgICAgICAgIGZpbGUoQVBQRU5ECiAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZwogICAgICAgICAgICIke2Rlc2NyaXB0aW9ufSBjb21waWxlZCBidXQgZmFpbGVkIHRvIHJ1biB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuJHtPVVRQVVR9XG5cbiIpCi0gICAgICBFTFNFKCkKLSAgICAgICAgRklMRShBUFBFTkQKKyAgICAgIGVsc2UoKQorICAgICAgICBmaWxlKEFQUEVORAogICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nCiAgICAgICAgICAgIiR7ZGVzY3JpcHRpb259IGNvbXBpbGVkIGFuZCByYW4gd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICAgICAgRU5ESUYoKQotICAgIEVMU0UoKQotICAgICAgRklMRShBUFBFTkQKKyAgICAgIGVuZGlmKCkKKyAgICBlbHNlKCkKKyAgICAgIGZpbGUoQVBQRU5ECiAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKICAgICAgICAgIiR7ZGVzY3JpcHRpb259IGZhaWxlZCB0byBjb21waWxlIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKLSAgICAgIFNFVCgke3Zhcn0gLTEgQ0FDSEUgSU5URVJOQUwgIiR7ZGVzY3JpcHRpb259IGZhaWxlZCB0byBjb21waWxlLiIpCi0gICAgRU5ESUYoKQorICAgICAgc2V0KCR7dmFyfSAtMSBDQUNIRSBJTlRFUk5BTCAiJHtkZXNjcmlwdGlvbn0gZmFpbGVkIHRvIGNvbXBpbGUuIikKKyAgICBlbmRpZigpCiAKLSAgICBJRigke2ludmVydH0gTUFUQ0hFUyBJTlZFUlQpCi0gICAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICAgIElGKCR7dmFyfSkKLSAgICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSB5ZXMiKQotICAgICAgICBFTFNFKCkKLSAgICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBubyIpCi0gICAgICAgIEVORElGKCkKLSAgICAgIEVMU0UoKQotICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBmYWlsZWQgdG8gY29tcGlsZSIpCi0gICAgICBFTkRJRigpCi0gICAgRUxTRSgpCi0gICAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICAgIElGKCR7dmFyfSkKLSAgICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBubyIpCi0gICAgICAgIEVMU0UoKQotICAgICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIHllcyIpCi0gICAgICAgIEVORElGKCkKLSAgICAgIEVMU0UoKQotICAgICAgICBNRVNTQUdFKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBmYWlsZWQgdG8gY29tcGlsZSIpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQotICBFTkRJRigpCisgICAgaWYoJHtpbnZlcnR9IE1BVENIRVMgSU5WRVJUKQorICAgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgICBpZigke3Zhcn0pCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0geWVzIikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gbm8iKQorICAgICAgICBlbmRpZigpCisgICAgICBlbHNlKCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gZmFpbGVkIHRvIGNvbXBpbGUiKQorICAgICAgZW5kaWYoKQorICAgIGVsc2UoKQorICAgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgICBpZigke3Zhcn0pCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gbm8iKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSB5ZXMiKQorICAgICAgICBlbmRpZigpCisgICAgICBlbHNlKCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gZmFpbGVkIHRvIGNvbXBpbGUiKQorICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQogCi0gIElGKCR7aW52ZXJ0fSBNQVRDSEVTIElOVkVSVCkKLSAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICBJRigke3Zhcn0pCi0gICAgICAgIFNFVCgke3Zhcn0gMSkKLSAgICAgIEVMU0UoKQotICAgICAgICBTRVQoJHt2YXJ9IDApCi0gICAgICBFTkRJRigpCi0gICAgRUxTRSgpCi0gICAgICBTRVQoJHt2YXJ9IDEpCi0gICAgRU5ESUYoKQotICBFTFNFKCkKLSAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICBJRigke3Zhcn0pCi0gICAgICAgIFNFVCgke3Zhcn0gMCkKLSAgICAgIEVMU0UoKQotICAgICAgICBTRVQoJHt2YXJ9IDEpCi0gICAgICBFTkRJRigpCi0gICAgRUxTRSgpCi0gICAgICBTRVQoJHt2YXJ9IDApCi0gICAgRU5ESUYoKQotICBFTkRJRigpCi1FTkRNQUNSTygpCisgIGlmKCR7aW52ZXJ0fSBNQVRDSEVTIElOVkVSVCkKKyAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICBpZigke3Zhcn0pCisgICAgICAgIHNldCgke3Zhcn0gMSkKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQoJHt2YXJ9IDApCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBzZXQoJHt2YXJ9IDEpCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICBpZigke3Zhcn0pCisgICAgICAgIHNldCgke3Zhcn0gMCkKKyAgICAgIGVsc2UoKQorICAgICAgICBzZXQoJHt2YXJ9IDEpCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBzZXQoJHt2YXJ9IDApCisgICAgZW5kaWYoKQorICBlbmRpZigpCitlbmRtYWNybygpCiAKLU1BQ1JPKEtXU1lTX1BMQVRGT1JNX0NfVEVTVCB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTICR7S1dTWVNfUExBVEZPUk1fQ19URVNUX0RFRklORVN9KQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUyAke0tXU1lTX1BMQVRGT1JNX0NfVEVTVF9FWFRSQV9GTEFHU30pCittYWNybyhLV1NZU19QTEFURk9STV9DX1RFU1QgdmFyIGRlc2NyaXB0aW9uIGludmVydCkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUyAke0tXU1lTX1BMQVRGT1JNX0NfVEVTVF9ERUZJTkVTfSkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MgJHtLV1NZU19QTEFURk9STV9DX1RFU1RfRVhUUkFfRkxBR1N9KQogICBLV1NZU19QTEFURk9STV9URVNUKEMgIiR7dmFyfSIgIiR7ZGVzY3JpcHRpb259IiAiJHtpbnZlcnR9IikKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUykKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MpCi1FTkRNQUNSTygpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTKQorZW5kbWFjcm8oKQogCi1NQUNSTyhLV1NZU19QTEFURk9STV9DX1RFU1RfUlVOIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMgJHtLV1NZU19QTEFURk9STV9DX1RFU1RfREVGSU5FU30pCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTICR7S1dTWVNfUExBVEZPUk1fQ19URVNUX0VYVFJBX0ZMQUdTfSkKK21hY3JvKEtXU1lTX1BMQVRGT1JNX0NfVEVTVF9SVU4gdmFyIGRlc2NyaXB0aW9uIGludmVydCkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUyAke0tXU1lTX1BMQVRGT1JNX0NfVEVTVF9ERUZJTkVTfSkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MgJHtLV1NZU19QTEFURk9STV9DX1RFU1RfRVhUUkFfRkxBR1N9KQogICBLV1NZU19QTEFURk9STV9URVNUX1JVTihDICIke3Zhcn0iICIke2Rlc2NyaXB0aW9ufSIgIiR7aW52ZXJ0fSIpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTKQotRU5ETUFDUk8oKQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTKQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUykKK2VuZG1hY3JvKCkKIAotTUFDUk8oS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1QgdmFyIGRlc2NyaXB0aW9uIGludmVydCkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0RFRklORVN9KQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0VYVFJBX0ZMQUdTfSkKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfTElOS19MSUJSQVJJRVMgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9MSU5LX0xJQlJBUklFU30pCittYWNybyhLV1NZU19QTEFURk9STV9DWFhfVEVTVCB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfREVGSU5FU30pCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfRVhUUkFfRkxBR1N9KQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9MSU5LX0xJQlJBUklFUyAke0tXU1lTX1BMQVRGT1JNX0NYWF9URVNUX0xJTktfTElCUkFSSUVTfSkKICAgS1dTWVNfUExBVEZPUk1fVEVTVChDWFggIiR7dmFyfSIgIiR7ZGVzY3JpcHRpb259IiAiJHtpbnZlcnR9IikKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUykKLSAgU0VUKEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MpCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0xJTktfTElCUkFSSUVTKQotRU5ETUFDUk8oKQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTKQorICBzZXQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUykKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfTElOS19MSUJSQVJJRVMpCitlbmRtYWNybygpCiAKLU1BQ1JPKEtXU1lTX1BMQVRGT1JNX0NYWF9URVNUX1JVTiB2YXIgZGVzY3JpcHRpb24gaW52ZXJ0KQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfREVGSU5FU30pCi0gIFNFVChLV1NZU19QTEFURk9STV9URVNUX0VYVFJBX0ZMQUdTICR7S1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfRVhUUkFfRkxBR1N9KQorbWFjcm8oS1dTWVNfUExBVEZPUk1fQ1hYX1RFU1RfUlVOIHZhciBkZXNjcmlwdGlvbiBpbnZlcnQpCisgIHNldChLV1NZU19QTEFURk9STV9URVNUX0RFRklORVMgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9ERUZJTkVTfSkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MgJHtLV1NZU19QTEFURk9STV9DWFhfVEVTVF9FWFRSQV9GTEFHU30pCiAgIEtXU1lTX1BMQVRGT1JNX1RFU1RfUlVOKENYWCAiJHt2YXJ9IiAiJHtkZXNjcmlwdGlvbn0iICIke2ludmVydH0iKQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9ERUZJTkVTKQotICBTRVQoS1dTWVNfUExBVEZPUk1fVEVTVF9FWFRSQV9GTEFHUykKLUVORE1BQ1JPKCkKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfREVGSU5FUykKKyAgc2V0KEtXU1lTX1BMQVRGT1JNX1RFU1RfRVhUUkFfRkxBR1MpCitlbmRtYWNybygpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBLV1NZU19QTEFURk9STV9JTkZPX1RFU1QobGFuZyB2YXIgZGVzY3JpcHRpb24pCiAjCiAjIENvbXBpbGUgdGVzdCBuYW1lZCBieSAke3Zhcn0gYW5kIHN0b3JlIElORk8gc3RyaW5ncyBleHRyYWN0ZWQgZnJvbSBiaW5hcnkuCi1NQUNSTyhLV1NZU19QTEFURk9STV9JTkZPX1RFU1QgbGFuZyB2YXIgZGVzY3JpcHRpb24pCittYWNybyhLV1NZU19QTEFURk9STV9JTkZPX1RFU1QgbGFuZyB2YXIgZGVzY3JpcHRpb24pCiAgICMgV2UgY2FuIGltcGxlbWVudCB0aGlzIG1hY3JvIG9uIENNYWtlIDIuNiBhbmQgYWJvdmUuCi0gIElGKCIke0NNQUtFX01BSk9SX1ZFUlNJT059LiR7Q01BS0VfTUlOT1JfVkVSU0lPTn0iIExFU1MgMi42KQotICAgIFNFVCgke3Zhcn0gIiIpCi0gIEVMU0UoKQorICBpZigiJHtDTUFLRV9NQUpPUl9WRVJTSU9OfS4ke0NNQUtFX01JTk9SX1ZFUlNJT059IiBMRVNTIDIuNikKKyAgICBzZXQoJHt2YXJ9ICIiKQorICBlbHNlKCkKICAgICAjIENob29zZSBhIGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0IGJpbmFyeS4KLSAgICBTRVQoS1dTWVNfUExBVEZPUk1fSU5GT19GSUxFCisgICAgc2V0KEtXU1lTX1BMQVRGT1JNX0lORk9fRklMRQogICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS8ke3Zhcn0uYmluKQogCiAgICAgIyBDb21waWxlIHRoZSB0ZXN0IGJpbmFyeS4KLSAgICBJRihOT1QgRVhJU1RTICR7S1dTWVNfUExBVEZPUk1fSU5GT19GSUxFfSkKLSAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSIpCi0gICAgICBUUllfQ09NUElMRSgke3Zhcn1fQ09NUElMRUQKKyAgICBpZihOT1QgRVhJU1RTICR7S1dTWVNfUExBVEZPUk1fSU5GT19GSUxFfSkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSIpCisgICAgICB0cnlfY29tcGlsZSgke3Zhcn1fQ09NUElMRUQKICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CiAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke0tXU1lTX1BMQVRGT1JNX1RFU1RfRklMRV8ke2xhbmd9fQogICAgICAgICBDT01QSUxFX0RFRklOSVRJT05TIC1EVEVTVF8ke3Zhcn0KQEAgLTE4OCwyOSArMTg4LDI5IEBACiAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQKICAgICAgICAgQ09QWV9GSUxFICR7S1dTWVNfUExBVEZPUk1fSU5GT19GSUxFfQogICAgICAgICApCi0gICAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICAgIEZJTEUoQVBQRU5ECisgICAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICAgIGZpbGUoQVBQRU5ECiAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZU91dHB1dC5sb2cKICAgICAgICAgICAiJHtkZXNjcmlwdGlvbn0gY29tcGlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG91dHB1dDpcbiR7T1VUUFVUfVxuXG4iKQotICAgICAgRUxTRSgpCi0gICAgICAgIEZJTEUoQVBQRU5ECisgICAgICBlbHNlKCkKKyAgICAgICAgZmlsZShBUFBFTkQKICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nCiAgICAgICAgICAgIiR7ZGVzY3JpcHRpb259IGZhaWxlZCB0byBjb21waWxlIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4ke09VVFBVVH1cblxuIikKLSAgICAgIEVORElGKCkKLSAgICAgIElGKCR7dmFyfV9DT01QSUxFRCkKLSAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gY29tcGlsZWQiKQotICAgICAgRUxTRSgpCi0gICAgICAgIE1FU1NBR0UoU1RBVFVTICIke2Rlc2NyaXB0aW9ufSAtIGZhaWxlZCIpCi0gICAgICBFTkRJRigpCi0gICAgRU5ESUYoKQorICAgICAgZW5kaWYoKQorICAgICAgaWYoJHt2YXJ9X0NPTVBJTEVEKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtkZXNjcmlwdGlvbn0gLSBjb21waWxlZCIpCisgICAgICBlbHNlKCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7ZGVzY3JpcHRpb259IC0gZmFpbGVkIikKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCiAKICAgICAjIFBhcnNlIGluZm8gc3RyaW5ncyBvdXQgb2YgdGhlIGNvbXBpbGVkIGJpbmFyeS4KLSAgICBJRigke3Zhcn1fQ09NUElMRUQpCi0gICAgICBGSUxFKFNUUklOR1MgJHtLV1NZU19QTEFURk9STV9JTkZPX0ZJTEV9ICR7dmFyfSBSRUdFWCAiSU5GTzpbQS1aYS16MC05XStcXFtbXl1dKlxcXSIpCi0gICAgRUxTRSgpCi0gICAgICBTRVQoJHt2YXJ9ICIiKQotICAgIEVORElGKCkKKyAgICBpZigke3Zhcn1fQ09NUElMRUQpCisgICAgICBmaWxlKFNUUklOR1MgJHtLV1NZU19QTEFURk9STV9JTkZPX0ZJTEV9ICR7dmFyfSBSRUdFWCAiSU5GTzpbQS1aYS16MC05XStcXFtbXl1dKlxcXSIpCisgICAgZWxzZSgpCisgICAgICBzZXQoJHt2YXJ9ICIiKQorICAgIGVuZGlmKCkKIAotICAgIFNFVChLV1NZU19QTEFURk9STV9JTkZPX0ZJTEUpCi0gIEVORElGKCkKLUVORE1BQ1JPKCkKKyAgICBzZXQoS1dTWVNfUExBVEZPUk1fSU5GT19GSUxFKQorICBlbmRpZigpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMva3dzeXNQbGF0Zm9ybVRlc3RzQy5jIGIvU291cmNlL2t3c3lzL2t3c3lzUGxhdGZvcm1UZXN0c0MuYwppbmRleCBiMGNmN2FkLi5kNDRmN2ViIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMva3dzeXNQbGF0Zm9ybVRlc3RzQy5jCisrKyBiL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHNDLmMKQEAgLTY5LDQwICs2OSwzIEBACiAgIHJldHVybiBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzKTsKIH0KICNlbmRpZgotCi0jaWZkZWYgVEVTVF9LV1NZU19DX1RZUEVfTUFDUk9TCi1jaGFyKiBpbmZvX21hY3JvcyA9Ci0jICBpZiBkZWZpbmVkKF9fU0laRU9GX1NIT1JUX18pCi0gICJJTkZPOm1hY3JvW19fU0laRU9GX1NIT1JUX19dXG4iCi0jICBlbmRpZgotIyAgaWYgZGVmaW5lZChfX1NJWkVPRl9JTlRfXykKLSAgIklORk86bWFjcm9bX19TSVpFT0ZfSU5UX19dXG4iCi0jICBlbmRpZgotIyAgaWYgZGVmaW5lZChfX1NJWkVPRl9MT05HX18pCi0gICJJTkZPOm1hY3JvW19fU0laRU9GX0xPTkdfX11cbiIKLSMgIGVuZGlmCi0jICBpZiBkZWZpbmVkKF9fU0laRU9GX0xPTkdfTE9OR19fKQotICAiSU5GTzptYWNyb1tfX1NJWkVPRl9MT05HX0xPTkdfX11cbiIKLSMgIGVuZGlmCi0jICBpZiBkZWZpbmVkKF9fU0hPUlRfTUFYX18pCi0gICJJTkZPOm1hY3JvW19fU0hPUlRfTUFYX19dXG4iCi0jICBlbmRpZgotIyAgaWYgZGVmaW5lZChfX0lOVF9NQVhfXykKLSAgIklORk86bWFjcm9bX19JTlRfTUFYX19dXG4iCi0jICBlbmRpZgotIyAgaWYgZGVmaW5lZChfX0xPTkdfTUFYX18pCi0gICJJTkZPOm1hY3JvW19fTE9OR19NQVhfX11cbiIKLSMgIGVuZGlmCi0jICBpZiBkZWZpbmVkKF9fTE9OR19MT05HX01BWF9fKQotICAiSU5GTzptYWNyb1tfX0xPTkdfTE9OR19NQVhfX11cbiIKLSMgIGVuZGlmCi0gICIiOwotCi1pbnQgS1dTWVNfUExBVEZPUk1fVEVTVF9DX01BSU5fQVJHUyhhcmdjLCBhcmd2KQotewotICBpbnQgcmVxdWlyZSA9IDA7Ci0gIHJlcXVpcmUgKz0gaW5mb19tYWNyb3NbYXJnY107Ci0gICh2b2lkKWFyZ3Y7Ci0gIHJldHVybiByZXF1aXJlOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMva3dzeXNQbGF0Zm9ybVRlc3RzQ1hYLmN4eCBiL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHNDWFguY3h4CmluZGV4IGNmZDU2NjYuLjBiZmEyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHNDWFguY3h4CisrKyBiL1NvdXJjZS9rd3N5cy9rd3N5c1BsYXRmb3JtVGVzdHNDWFguY3h4CkBAIC0xLDM2ICsxLDUgQEAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nI2t3c3lzIGZvciBkZXRhaWxzLiAgKi8KLSNpZmRlZiBURVNUX0tXU1lTX0NYWF9IQVNfQ1NURElPCi0jICBpbmNsdWRlIDxjc3RkaW8+Ci1pbnQgbWFpbigpCi17Ci0gIHJldHVybiAwOwotfQotI2VuZGlmCi0KLSNpZmRlZiBURVNUX0tXU1lTX0NYWF9IQVNfTE9OR19MT05HCi1sb25nIGxvbmcgZihsb25nIGxvbmcgbikKLXsKLSAgcmV0dXJuIG47Ci19Ci1pbnQgbWFpbigpCi17Ci0gIGxvbmcgbG9uZyBuID0gMDsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZihuKSk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX0hBU19fX0lOVDY0Ci1fX2ludDY0IGYoX19pbnQ2NCBuKQotewotICByZXR1cm4gbjsKLX0KLWludCBtYWluKCkKLXsKLSAgX19pbnQ2NCBuID0gMDsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZihuKSk7Ci19Ci0jZW5kaWYKIAogI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX1NUQVRfSEFTX1NUX01USU0KICMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtNjAsODIgKzI5LDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgVEVTVF9LV1NZU19DWFhfU0FNRV9MT05HX0FORF9fX0lOVDY0Ci12b2lkIGZ1bmN0aW9uKGxvbmcqKikKLXsKLX0KLWludCBtYWluKCkKLXsKLSAgX19pbnQ2NCoqIHAgPSAwOwotICBmdW5jdGlvbihwKTsKLSAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX1NBTUVfTE9OR19MT05HX0FORF9fX0lOVDY0Ci12b2lkIGZ1bmN0aW9uKGxvbmcgbG9uZyoqKQotewotfQotaW50IG1haW4oKQotewotICBfX2ludDY0KiogcCA9IDA7Ci0gIGZ1bmN0aW9uKHApOwotICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgVEVTVF9LV1NZU19JT1NfSEFTX0lTVFJFQU1fTE9OR19MT05HCi0jICBpbmNsdWRlIDxpb3N0cmVhbT4KLWludCB0ZXN0X2lzdHJlYW0oc3RkOjppc3RyZWFtJiBpcywgbG9uZyBsb25nJiB4KQotewotICByZXR1cm4gKGlzID4+IHgpID8gMSA6IDA7Ci19Ci1pbnQgbWFpbigpCi17Ci0gIGxvbmcgbG9uZyB4ID0gMDsKLSAgcmV0dXJuIHRlc3RfaXN0cmVhbShzdGQ6OmNpbiwgeCk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfS1dTWVNfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORwotIyAgaW5jbHVkZSA8aW9zdHJlYW0+Ci1pbnQgdGVzdF9vc3RyZWFtKHN0ZDo6b3N0cmVhbSYgb3MsIGxvbmcgbG9uZyB4KQotewotICByZXR1cm4gKG9zIDw8IHgpID8gMSA6IDA7Ci19Ci1pbnQgbWFpbigpCi17Ci0gIGxvbmcgbG9uZyB4ID0gMDsKLSAgcmV0dXJuIHRlc3Rfb3N0cmVhbShzdGQ6OmNvdXQsIHgpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBURVNUX0tXU1lTX0lPU19IQVNfSVNUUkVBTV9fX0lOVDY0Ci0jICBpbmNsdWRlIDxpb3N0cmVhbT4KLWludCB0ZXN0X2lzdHJlYW0oc3RkOjppc3RyZWFtJiBpcywgX19pbnQ2NCYgeCkKLXsKLSAgcmV0dXJuIChpcyA+PiB4KSA/IDEgOiAwOwotfQotaW50IG1haW4oKQotewotICBfX2ludDY0IHggPSAwOwotICByZXR1cm4gdGVzdF9pc3RyZWFtKHN0ZDo6Y2luLCB4KTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgVEVTVF9LV1NZU19JT1NfSEFTX09TVFJFQU1fX19JTlQ2NAotIyAgaW5jbHVkZSA8aW9zdHJlYW0+Ci1pbnQgdGVzdF9vc3RyZWFtKHN0ZDo6b3N0cmVhbSYgb3MsIF9faW50NjQgeCkKLXsKLSAgcmV0dXJuIChvcyA8PCB4KSA/IDEgOiAwOwotfQotaW50IG1haW4oKQotewotICBfX2ludDY0IHggPSAwOwotICByZXR1cm4gdGVzdF9vc3RyZWFtKHN0ZDo6Y291dCwgeCk7Ci19Ci0jZW5kaWYKLQogI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX0hBU19TRVRFTlYKICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgogaW50IG1haW4oKQpAQCAtMTg0LDMzICs3Nyw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX0hBU19BVE9MTAotIyAgaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQgbWFpbigpCi17Ci0gIGNvbnN0IGNoYXIqIHN0ciA9ICIxMDI0IjsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYXRvbGwoc3RyKSk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX0hBU19BVE9MCi0jICBpbmNsdWRlIDxzdGRsaWIuaD4KLWludCBtYWluKCkKLXsKLSAgY29uc3QgY2hhciogc3RyID0gIjEwMjQiOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihhdG9sKHN0cikpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBURVNUX0tXU1lTX0NYWF9IQVNfX0FUT0k2NAotIyAgaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQgbWFpbigpCi17Ci0gIGNvbnN0IGNoYXIqIHN0ciA9ICIxMDI0IjsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oX2F0b2k2NChzdHIpKTsKLX0KLSNlbmRpZgotCiAjaWZkZWYgVEVTVF9LV1NZU19DWFhfSEFTX1VUSU1FUwogIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KIGludCBtYWluKCkKQEAgLTI4OCwzMyArMTU0LDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgVEVTVF9LV1NZU19DWFhfSEFTX0JPUkxBTkRfQVNNCi1pbnQgbWFpbigpCi17Ci0gIGludCBhID0gMTsKLSAgX19hc20gewotICAgIHhvciBFQlgsIEVCWDsKLSAgICBtb3YgYSwgRUJYOwotICB9Ci0KLSAgcmV0dXJuIGE7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFRFU1RfS1dTWVNfQ1hYX0hBU19CT1JMQU5EX0FTTV9DUFVJRAotaW50IG1haW4oKQotewotICBpbnQgYSA9IDA7Ci0gIF9fYXNtIHsKLSAgICB4b3IgRUFYLCBFQVg7Ci0gICAgY3B1aWQ7Ci0gICAgbW92IGEsIEVBWDsKLSAgfQotCi0gIHJldHVybiBhOwotfQotI2VuZGlmCi0KICNpZmRlZiBURVNUX0tXU1lTX1NUTF9IQVNfV1NUUklORwogIyAgaW5jbHVkZSA8c3RyaW5nPgogdm9pZCBmKHN0ZDo6d3N0cmluZyopCmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzLmN4eCBiL1NvdXJjZS9rd3N5cy90ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMuY3h4CmluZGV4IDE3NzhhOWIuLjA3ODY3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy90ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMuY3h4CkBAIC0xMiw4ICsxMiw4IEBACiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSA8c3RkZGVmLmg+IC8qIHNpemVfdCAqLwotI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBzdHJjbXAgKi8KKyNpbmNsdWRlIDxjc3RkZGVmPiAvKiBzaXplX3QgKi8KKyNpbmNsdWRlIDxjc3RyaW5nPiAvKiBzdHJjbXAgKi8KIAogc3RhdGljIHZvaWQqIHJhbmRvbV9wdHIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigweDEyMyk7CiAKQEAgLTk4LDcgKzk4LDcgQEAKICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHN0bF9zdHJpbmdzX2FyZ3VtZW50OwogICBzdGQ6OnN0cmluZyB2YWxpZF9zdGxfc3RyaW5nc1tdID0geyAia2VuIiwgImJyYWQiLCAiYmlsbCIsICJhbmR5IiB9OwogCi0gIHR5cGVkZWYga3dzeXM6OkNvbW1hbmRMaW5lQXJndW1lbnRzIGFyZ1Q7CisgIHVzaW5nIGFyZ1QgPSBrd3N5czo6Q29tbWFuZExpbmVBcmd1bWVudHM7CiAKICAgYXJnLkFkZEFyZ3VtZW50KCItLXNvbWUtaW50LXZhcmlhYmxlIiwgYXJnVDo6U1BBQ0VfQVJHVU1FTlQsCiAgICAgICAgICAgICAgICAgICAmc29tZV9pbnRfdmFyaWFibGUsICJTZXQgc29tZSByYW5kb20gaW50IHZhcmlhYmxlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzMS5jeHggYi9Tb3VyY2Uva3dzeXMvdGVzdENvbW1hbmRMaW5lQXJndW1lbnRzMS5jeHgKaW5kZXggNjQ1NjFiMS4uMmY2YjczNSAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3RDb21tYW5kTGluZUFyZ3VtZW50czEuY3h4CisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMxLmN4eApAQCAtMTIsOCArMTIsOCBAQAogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgPGFzc2VydC5oPiAvKiBhc3NlcnQgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4gLyogc3RyY21wICovCisjaW5jbHVkZSA8Y2Fzc2VydD4gLyogYXNzZXJ0ICovCisjaW5jbHVkZSA8Y3N0cmluZz4gLyogc3RyY21wICovCiAKIGludCB0ZXN0Q29tbWFuZExpbmVBcmd1bWVudHMxKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiB7CkBAIC0yNSw3ICsyNSw3IEBACiAgIHN0ZDo6c3RyaW5nIHA7CiAgIGludCByZXMgPSAwOwogCi0gIHR5cGVkZWYga3dzeXM6OkNvbW1hbmRMaW5lQXJndW1lbnRzIGFyZ1Q7CisgIHVzaW5nIGFyZ1QgPSBrd3N5czo6Q29tbWFuZExpbmVBcmd1bWVudHM7CiAgIGFyZy5BZGRBcmd1bWVudCgiLW4iLCBhcmdUOjpTUEFDRV9BUkdVTUVOVCwgJm4sICJBcmd1bWVudCBOIik7CiAgIGFyZy5BZGRBcmd1bWVudCgiLW0iLCBhcmdUOjpFUVVBTF9BUkdVTUVOVCwgJm0sICJBcmd1bWVudCBNIik7CiAgIGFyZy5BZGRCb29sZWFuQXJndW1lbnQoIi1wIiwgJnAsICJBcmd1bWVudCBQIik7CkBAIC01MSw5ICs1MSw3IEBACiAgIHN0ZDo6Y291dCA8PCAiVmFsdWUgb2YgTjogIiA8PCBuIDw8IHN0ZDo6ZW5kbDsKICAgc3RkOjpjb3V0IDw8ICJWYWx1ZSBvZiBNOiAiIDw8IG0gPDwgc3RkOjplbmRsOwogICBzdGQ6OmNvdXQgPDwgIlZhbHVlIG9mIFA6ICIgPDwgcCA8PCBzdGQ6OmVuZGw7Ci0gIGlmIChtKSB7Ci0gICAgZGVsZXRlW10gbTsKLSAgfQorICBkZWxldGVbXSBtOwogCiAgIGNoYXIqKiBuZXdBcmd2ID0gbnVsbHB0cjsKICAgaW50IG5ld0FyZ2MgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3REaXJlY3RvcnkuY3h4IGIvU291cmNlL2t3c3lzL3Rlc3REaXJlY3RvcnkuY3h4CmluZGV4IGIxYWIwYzguLmViM2NhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy90ZXN0RGlyZWN0b3J5LmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvdGVzdERpcmVjdG9yeS5jeHgKQEAgLTU3LDcgKzU3LDExIEBACiAKICAgICBEaXJlY3RvcnkgdGVzdGRpcjsKICAgICAvLyBTZXQgcmVzIHRvIGZhaWx1cmUgaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGxvYWQKLSAgICByZXMgKz0gIXRlc3RkaXIuTG9hZCh0ZXN0ZGlycGF0aCk7CisgICAgc3RkOjpzdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7CisgICAgcmVzICs9ICF0ZXN0ZGlyLkxvYWQodGVzdGRpcnBhdGgsICZlcnJvck1lc3NhZ2UpOworICAgIGlmIChlcnJvck1lc3NhZ2UgIT0gIiIpIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIGxpc3QgZGlyZWN0b3J5OiAiIDw8IGVycm9yTWVzc2FnZSA8PCBzdGQ6OmVuZGw7CisgICAgfQogICAgIC8vIEluY3JlbWVudCByZXMgZmFpbHVyZSBpZiB0aGUgZGlyZWN0b3J5IGFwcGVhcnMgZW1wdHkKICAgICByZXMgKz0gdGVzdGRpci5HZXROdW1iZXJPZkZpbGVzKCkgPT0gMDsKICAgICAvLyBJbmNyZW1lbnQgcmVzIGZhaWx1cmVzIGlmIHRoZSBwYXRoIGhhcyBjaGFuZ2VkIGZyb20KQEAgLTczLDYgKzc3LDM0IEBACiAgIHJldHVybiByZXM7CiB9CiAKK2ludCBfbm9uRXhpc3RlbnREaXJlY3RvcnlUZXN0KCkKK3sKKyAgdXNpbmcgbmFtZXNwYWNlIGt3c3lzOworICBpbnQgcmVzID0gMDsKKyAgc3RkOjpzdHJpbmcgdGVzdGRpcnBhdGgoVEVTVF9TWVNURU1UT09MU19CSU5BUllfRElSCisgICAgICAgICAgICAgICAgICAgICAgICAgICIvZGlyZWN0b3J5X3Rlc3RpbmcvZG9lc250X2V4aXN0LyIpOworICBzdGQ6OnN0cmluZyBlcnJvck1lc3NhZ2U7CisgIERpcmVjdG9yeSB0ZXN0ZGlyOworCisgIGVycm9yTWVzc2FnZSA9ICJmb28iOworICAvLyBJbmNyZW1lbnQgcmVzIGZhaWx1cmUgaWYgZGlyZWN0b3J5IGxpc3RzCisgIHJlcyArPSB0ZXN0ZGlyLkxvYWQodGVzdGRpcnBhdGgsICZlcnJvck1lc3NhZ2UpOworI2lmICFkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorICAvLyBJbmNyZW1lbnQgcmVzIGZhaWx1cmUgaWYgZXJyb3JNZXNzYWdlIGlzIHVubW9kaWZpZWQKKyAgcmVzICs9IChlcnJvck1lc3NhZ2UgPT0gImZvbyIpOworI2VuZGlmCisKKyAgZXJyb3JNZXNzYWdlID0gImZvbyI7CisgIC8vIEluY3JlbWVudCByZXMgZmFpbHVyZSBpZiBkaXJlY3RvcnkgaGFzIGZpbGVzCisgIHJlcyArPSAodGVzdGRpci5HZXROdW1iZXJPZkZpbGVzSW5EaXJlY3RvcnkodGVzdGRpcnBhdGgsICZlcnJvck1lc3NhZ2UpID4gMCk7CisjaWYgIWRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisgIC8vIEluY3JlbWVudCByZXMgZmFpbHVyZSBpZiBlcnJvck1lc3NhZ2UgaXMgdW5tb2RpZmllZAorICByZXMgKz0gKGVycm9yTWVzc2FnZSA9PSAiZm9vIik7CisjZW5kaWYKKworICByZXR1cm4gcmVzOworfQorCiBpbnQgX2NvcHlEaXJlY3RvcnlUZXN0KCkKIHsKICAgdXNpbmcgbmFtZXNwYWNlIGt3c3lzOwpAQCAtMTA2LDUgKzEzOCw2IEBACiAKIGludCB0ZXN0RGlyZWN0b3J5KGludCwgY2hhciogW10pCiB7Ci0gIHJldHVybiBfZG9Mb25nUGF0aFRlc3QoKSArIF9jb3B5RGlyZWN0b3J5VGVzdCgpOworICByZXR1cm4gX2RvTG9uZ1BhdGhUZXN0KCkgKyBfbm9uRXhpc3RlbnREaXJlY3RvcnlUZXN0KCkgKworICAgIF9jb3B5RGlyZWN0b3J5VGVzdCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3REeW5hbWljTG9hZGVyLmN4eCBiL1NvdXJjZS9rd3N5cy90ZXN0RHluYW1pY0xvYWRlci5jeHgKaW5kZXggMjQyMWFjMC4uNzAzYWQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3REeW5hbWljTG9hZGVyLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvdGVzdER5bmFtaWNMb2FkZXIuY3h4CkBAIC0yNSw3ICsyNSw3IEBACiB7CiAgIC8vIENvbnN0cnVjdCBwcm9wZXIgbmFtZSBvZiBsaWIKICAgc3RkOjpzdHJpbmcgc2xuYW1lOwotICBzbG5hbWUgPSBFWEVDVVRBQkxFX09VVFBVVF9QQVRIOworICBzbG5hbWUgPSBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlk7CiAgIGlmIChzdWJkaXIpIHsKICAgICBzbG5hbWUgKz0gIi8iOwogICAgIHNsbmFtZSArPSBzdWJkaXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uva3dzeXMvdGVzdER5bmxvYWQuYyBiL1NvdXJjZS9rd3N5cy90ZXN0RHlubG9hZC5jCmluZGV4IGM0OWY3NDcuLjMzYTQzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy90ZXN0RHlubG9hZC5jCisrKyBiL1NvdXJjZS9rd3N5cy90ZXN0RHlubG9hZC5jCkBAIC04LDYgKzgsNiBAQAogCiBETF9FWFBPUlQgaW50IFRlc3REeW5hbWljTG9hZGVyRGF0YSA9IDA7CiAKLURMX0VYUE9SVCB2b2lkIFRlc3REeW5hbWljTG9hZGVyU3ltYm9sUG9pbnRlcigpCitETF9FWFBPUlQgdm9pZCBUZXN0RHluYW1pY0xvYWRlclN5bWJvbFBvaW50ZXIodm9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy90ZXN0RW5jb2RpbmcuY3h4IGIvU291cmNlL2t3c3lzL3Rlc3RFbmNvZGluZy5jeHgKaW5kZXggOTg4Njk3Yi4uZWU5M2U4ZCAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3RFbmNvZGluZy5jeHgKKysrIGIvU291cmNlL2t3c3lzL3Rlc3RFbmNvZGluZy5jeHgKQEAgLTEwLDEwICsxMCwxMCBAQAogI2luY2x1ZGUgS1dTWVNfSEVBREVSKEVuY29kaW5nLmgpCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2xvY2FsZT4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CiAKIC8vIFdvcmstYXJvdW5kIENNYWtlIGRlcGVuZGVuY3kgc2Nhbm5pbmcgbGltaXRhdGlvbi4gIFRoaXMgbXVzdAogLy8gZHVwbGljYXRlIHRoZSBhYm92ZSBsaXN0IG9mIGhlYWRlcnMuCkBAIC01OSw3ICs1OSw3IEBACiAgICAgc3RkOjpzdHJpbmcgc3RyMiA9IGt3c3lzOjpFbmNvZGluZzo6VG9OYXJyb3cod3N0cik7CiAgICAgd2NoYXJfdCogY193c3RyID0ga3dzeXNFbmNvZGluZ19EdXBUb1dpZGUoc3RyLmNfc3RyKCkpOwogICAgIGNoYXIqIGNfc3RyMiA9IGt3c3lzRW5jb2RpbmdfRHVwVG9OYXJyb3coY193c3RyKTsKLSAgICBpZiAoIXdzdHIuZW1wdHkoKSAmJiAoc3RyICE9IHN0cjIgfHwgc3RyY21wKGNfc3RyMiwgc3RyLmNfc3RyKCkpKSkgeworICAgIGlmICghd3N0ci5lbXB0eSgpICYmIChzdHIgIT0gc3RyMiB8fCBzdHJjbXAoY19zdHIyLCBzdHIuY19zdHIoKSkgIT0gMCkpIHsKICAgICAgIHN0ZDo6Y291dCA8PCAiY29udmVydGVkIHN0cmluZyB3YXMgZGlmZmVyZW50OiAiIDw8IHN0cjIgPDwgc3RkOjplbmRsOwogICAgICAgc3RkOjpjb3V0IDw8ICJjb252ZXJ0ZWQgc3RyaW5nIHdhcyBkaWZmZXJlbnQ6ICIgPDwgY19zdHIyIDw8IHN0ZDo6ZW5kbDsKICAgICAgIHJldCsrOwpAQCAtODUsNyArODUsNyBAQAogICBzdGQ6OndzdHJpbmcgd3N0ciA9IGt3c3lzOjpFbmNvZGluZzo6VG9XaWRlKGNzdHIpOwogCiAgIHdzdHIgPSBrd3N5czo6RW5jb2Rpbmc6OlRvV2lkZShudWxscHRyKTsKLSAgaWYgKHdzdHIgIT0gTCIiKSB7CisgIGlmICghd3N0ci5lbXB0eSgpKSB7CiAgICAgY29uc3Qgd2NoYXJfdCogd2NzdHIgPSB3c3RyLmNfc3RyKCk7CiAgICAgc3RkOjpjb3V0IDw8ICJUb1dpZGUoTlVMTCkgcmV0dXJuZWQiOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd3N0ci5zaXplKCk7IGkrKykgewpAQCAtOTUsNyArOTUsNyBAQAogICAgIHJldCsrOwogICB9CiAgIHdzdHIgPSBrd3N5czo6RW5jb2Rpbmc6OlRvV2lkZSgiIik7Ci0gIGlmICh3c3RyICE9IEwiIikgeworICBpZiAoIXdzdHIuZW1wdHkoKSkgewogICAgIGNvbnN0IHdjaGFyX3QqIHdjc3RyID0gd3N0ci5jX3N0cigpOwogICAgIHN0ZDo6Y291dCA8PCAiVG9XaWRlKFwiXCIpIHJldHVybmVkIjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdzdHIuc2l6ZSgpOyBpKyspIHsKQEAgLTExMywxMyArMTEzLDEzIEBACiAjZW5kaWYKIAogICBzdGQ6OnN0cmluZyBzdHIgPSBrd3N5czo6RW5jb2Rpbmc6OlRvTmFycm93KG51bGxwdHIpOwotICBpZiAoc3RyICE9ICIiKSB7CisgIGlmICghc3RyLmVtcHR5KCkpIHsKICAgICBzdGQ6OmNvdXQgPDwgIlRvTmFycm93KE5VTEwpIHJldHVybmVkICIgPDwgc3RyIDw8IHN0ZDo6ZW5kbDsKICAgICByZXQrKzsKICAgfQogCiAgIHN0ciA9IGt3c3lzOjpFbmNvZGluZzo6VG9OYXJyb3coTCIiKTsKLSAgaWYgKHdzdHIgIT0gTCIiKSB7CisgIGlmICghd3N0ci5lbXB0eSgpKSB7CiAgICAgc3RkOjpjb3V0IDw8ICJUb05hcnJvdyhcIlwiKSByZXR1cm5lZCAiIDw8IHN0ciA8PCBzdGQ6OmVuZGw7CiAgICAgcmV0Kys7CiAgIH0KQEAgLTE0MCwxNCArMTQwLDEzIEBACiAgIHN0cmluZ3MucHVzaF9iYWNrKHN0ZDo6c3RyaW5nKCJrIikgKyAnXDAnICsgJ1wwJyk7CiAgIHN0cmluZ3MucHVzaF9iYWNrKHN0ZDo6c3RyaW5nKCJcMFwwXDBcMCIsIDQpICsgImxtbiIgKwogICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZygiXDBcMFwwXDAiLCA0KSk7Ci0gIGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OjppdGVyYXRvciBpdCA9IHN0cmluZ3MuYmVnaW4oKTsKLSAgICAgICBpdCAhPSBzdHJpbmdzLmVuZCgpOyArK2l0KSB7Ci0gICAgc3RkOjp3c3RyaW5nIHdzdHIgPSBrd3N5czo6RW5jb2Rpbmc6OlRvV2lkZSgqaXQpOworICBmb3IgKGF1dG8mIHN0cmluZyA6IHN0cmluZ3MpIHsKKyAgICBzdGQ6OndzdHJpbmcgd3N0ciA9IGt3c3lzOjpFbmNvZGluZzo6VG9XaWRlKHN0cmluZyk7CiAgICAgc3RkOjpzdHJpbmcgc3RyID0ga3dzeXM6OkVuY29kaW5nOjpUb05hcnJvdyh3c3RyKTsKLSAgICBzdGQ6OnN0cmluZyBzKCppdCk7CisgICAgc3RkOjpzdHJpbmcgcyhzdHJpbmcpOwogICAgIHN0ZDo6cmVwbGFjZShzLmJlZ2luKCksIHMuZW5kKCksICdcMCcsICcgJyk7Ci0gICAgc3RkOjpjb3V0IDw8ICInIiA8PCBzIDw8ICInICgiIDw8IGl0LT5zaXplKCkgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKLSAgICBpZiAoc3RyICE9ICppdCkgeworICAgIHN0ZDo6Y291dCA8PCAiJyIgPDwgcyA8PCAiJyAoIiA8PCBzdHJpbmcuc2l6ZSgpIDw8ICIpIiA8PCBzdGQ6OmVuZGw7CisgICAgaWYgKHN0ciAhPSBzdHJpbmcpIHsKICAgICAgIHN0ZDo6cmVwbGFjZShzdHIuYmVnaW4oKSwgc3RyLmVuZCgpLCAnXDAnLCAnICcpOwogICAgICAgc3RkOjpjb3V0IDw8ICJzdHJpbmcgd2l0aCBudWxsIHdhcyBkaWZmZXJlbnQ6ICciIDw8IHN0ciA8PCAiJyAoIgogICAgICAgICAgICAgICAgIDw8IHN0ci5zaXplKCkgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy90ZXN0RlN0cmVhbS5jeHggYi9Tb3VyY2Uva3dzeXMvdGVzdEZTdHJlYW0uY3h4CmluZGV4IDUwMDllOTguLmFmYmE5NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy90ZXN0RlN0cmVhbS5jeHgKKysrIGIvU291cmNlL2t3c3lzL3Rlc3RGU3RyZWFtLmN4eApAQCAtNywxMCArNyw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgS1dTWVNfSEVBREVSKEZTdHJlYW0uaHh4KQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmZGVmIF9fQk9STEFORENfXwotIyAgaW5jbHVkZSA8bWVtLmg+IC8qIG1lbWNtcCAqLwotI2VuZGlmCisjaW5jbHVkZSA8Y3N0cmluZz4KIAogLy8gV29yay1hcm91bmQgQ01ha2UgZGVwZW5kZW5jeSBzY2FubmluZyBsaW1pdGF0aW9uLiAgVGhpcyBtdXN0CiAvLyBkdXBsaWNhdGUgdGhlIGFib3ZlIGxpc3Qgb2YgaGVhZGVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy90ZXN0SGFzaFNUTC5jeHggYi9Tb3VyY2Uva3dzeXMvdGVzdEhhc2hTVEwuY3h4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWQyZjg5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9rd3N5cy90ZXN0SGFzaFNUTC5jeHgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyNrd3N5cyBmb3IgZGV0YWlscy4gICovCi0jaW5jbHVkZSAia3dzeXNQcml2YXRlLmgiCi0jaW5jbHVkZSBLV1NZU19IRUFERVIoaGFzaF9tYXAuaHh4KQotI2luY2x1ZGUgS1dTWVNfSEVBREVSKGhhc2hfc2V0Lmh4eCkKLQotLy8gV29yay1hcm91bmQgQ01ha2UgZGVwZW5kZW5jeSBzY2FubmluZyBsaW1pdGF0aW9uLiAgVGhpcyBtdXN0Ci0vLyBkdXBsaWNhdGUgdGhlIGFib3ZlIGxpc3Qgb2YgaGVhZGVycy4KLSNpZiAwCi0jICBpbmNsdWRlICJoYXNoX21hcC5oeHguaW4iCi0jICBpbmNsdWRlICJoYXNoX3NldC5oeHguaW4iCi0jZW5kaWYKLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0Nzg2KQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fc2dpKSAmJiAhZGVmaW5lZChfX0dOVUNfXykKLSMgIHByYWdtYSBzZXQgd29mZiAxNDY4IC8qIGlubGluZSBmdW5jdGlvbiBjYW5ub3QgYmUgZXhwbGljaXRseSBpbnN0YW50aWF0ZWQgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2VuZGlmCi0KLXRlbXBsYXRlIGNsYXNzIGt3c3lzOjpoYXNoX21hcDxjb25zdCBjaGFyKiwgaW50PjsKLXRlbXBsYXRlIGNsYXNzIGt3c3lzOjpoYXNoX3NldDxpbnQ+OwotCi1zdGF0aWMgYm9vbCB0ZXN0X2hhc2hfbWFwKCkKLXsKLSAgdHlwZWRlZiBrd3N5czo6aGFzaF9tYXA8Y29uc3QgY2hhciosIGludD4gbXR5cGU7Ci0gIG10eXBlIG07Ci0gIGNvbnN0IGNoYXIqIGtleXNbXSA9IHsgImhlbGxvIiwgIndvcmxkIiB9OwotICBtW2tleXNbMF1dID0gMTsKLSAgbS5pbnNlcnQobXR5cGU6OnZhbHVlX3R5cGUoa2V5c1sxXSwgMikpOwotICBpbnQgc3VtID0gMDsKLSAgZm9yIChtdHlwZTo6aXRlcmF0b3IgbWkgPSBtLmJlZ2luKCk7IG1pICE9IG0uZW5kKCk7ICsrbWkpIHsKLSAgICBzdGQ6OmNvdXQgPDwgIkZvdW5kIGVudHJ5IFsiIDw8IG1pLT5maXJzdCA8PCAiLCIgPDwgbWktPnNlY29uZCA8PCAiXSIKLSAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwotICAgIHN1bSArPSBtaS0+c2Vjb25kOwotICB9Ci0gIHJldHVybiBzdW0gPT0gMzsKLX0KLQotc3RhdGljIGJvb2wgdGVzdF9oYXNoX3NldCgpCi17Ci0gIHR5cGVkZWYga3dzeXM6Omhhc2hfc2V0PGludD4gc3R5cGU7Ci0gIHN0eXBlIHM7Ci0gIHMuaW5zZXJ0KDEpOwotICBzLmluc2VydCgyKTsKLSAgaW50IHN1bSA9IDA7Ci0gIGZvciAoc3R5cGU6Oml0ZXJhdG9yIHNpID0gcy5iZWdpbigpOyBzaSAhPSBzLmVuZCgpOyArK3NpKSB7Ci0gICAgc3RkOjpjb3V0IDw8ICJGb3VuZCBlbnRyeSBbIiA8PCAqc2kgPDwgIl0iIDw8IHN0ZDo6ZW5kbDsKLSAgICBzdW0gKz0gKnNpOwotICB9Ci0gIHJldHVybiBzdW0gPT0gMzsKLX0KLQotaW50IHRlc3RIYXNoU1RMKGludCwgY2hhciogW10pCi17Ci0gIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAgcmVzdWx0ID0gdGVzdF9oYXNoX21hcCgpICYmIHJlc3VsdDsKLSAgcmVzdWx0ID0gdGVzdF9oYXNoX3NldCgpICYmIHJlc3VsdDsKLSAgcmV0dXJuIHJlc3VsdCA/IDAgOiAxOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3RQcm9jZXNzLmMgYi9Tb3VyY2Uva3dzeXMvdGVzdFByb2Nlc3MuYwppbmRleCAzOWFhYTIzLi5lZWQ3NzBjIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdFByb2Nlc3MuYworKysgYi9Tb3VyY2Uva3dzeXMvdGVzdFByb2Nlc3MuYwpAQCAtMjQsMTAgKzI0LDYgQEAKICMgIGluY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgIHByYWdtYSB3YXJuIC0gODA2MCAvKiBwb3NzaWJseSBpbmNvcnJlY3QgYXNzaWdubWVudCAqLwotI2VuZGlmCi0KIC8qIFBsYXRmb3JtLXNwZWNpZmljIHNsZWVwIGZ1bmN0aW9ucy4gKi8KIAogI2lmIGRlZmluZWQoX19CRU9TX18pICYmICFkZWZpbmVkKF9fWkVUQV9fKQpAQCAtNDU0LDI0ICs0NTAsMjUgQEAKICAgICAgIHByaW50ZigiVGhlIHByb2Nlc3MgaXMgc3RpbGwgZXhlY3V0aW5nLlxuIik7CiAgICAgICBicmVhazsKICAgICBjYXNlIGt3c3lzUHJvY2Vzc19TdGF0ZV9FeHBpcmVkOgotICAgICAgcHJpbnRmKCJDaGlsZCB3YXMga2lsbGVkIHdoZW4gdGltZW91dCBleHBpcmVkLlxuIik7CisgICAgICBwcmludGYoIlN1YnByb2Nlc3Mgd2FzIGtpbGxlZCB3aGVuIHRpbWVvdXQgZXhwaXJlZC5cbiIpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBrd3N5c1Byb2Nlc3NfU3RhdGVfRXhpdGVkOgotICAgICAgcHJpbnRmKCJDaGlsZCBleGl0ZWQgd2l0aCB2YWx1ZSA9ICVkXG4iLCBrd3N5c1Byb2Nlc3NfR2V0RXhpdFZhbHVlKGtwKSk7CisgICAgICBwcmludGYoIlN1YnByb2Nlc3MgZXhpdGVkIHdpdGggdmFsdWUgPSAlZFxuIiwKKyAgICAgICAgICAgICBrd3N5c1Byb2Nlc3NfR2V0RXhpdFZhbHVlKGtwKSk7CiAgICAgICByZXN1bHQgPSAoKGV4Y2VwdGlvbiAhPSBrd3N5c1Byb2Nlc3NfR2V0RXhpdEV4Y2VwdGlvbihrcCkpIHx8CiAgICAgICAgICAgICAgICAgKHZhbHVlICE9IGt3c3lzUHJvY2Vzc19HZXRFeGl0VmFsdWUoa3ApKSk7CiAgICAgICBicmVhazsKICAgICBjYXNlIGt3c3lzUHJvY2Vzc19TdGF0ZV9LaWxsZWQ6Ci0gICAgICBwcmludGYoIkNoaWxkIHdhcyBraWxsZWQgYnkgcGFyZW50LlxuIik7CisgICAgICBwcmludGYoIlN1YnByb2Nlc3Mgd2FzIGtpbGxlZCBieSBwYXJlbnQuXG4iKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2Uga3dzeXNQcm9jZXNzX1N0YXRlX0V4Y2VwdGlvbjoKLSAgICAgIHByaW50ZigiQ2hpbGQgdGVybWluYXRlZCBhYm5vcm1hbGx5OiAlc1xuIiwKKyAgICAgIHByaW50ZigiU3VicHJvY2VzcyB0ZXJtaW5hdGVkIGFibm9ybWFsbHk6ICVzXG4iLAogICAgICAgICAgICAgIGt3c3lzUHJvY2Vzc19HZXRFeGNlcHRpb25TdHJpbmcoa3ApKTsKICAgICAgIHJlc3VsdCA9ICgoZXhjZXB0aW9uICE9IGt3c3lzUHJvY2Vzc19HZXRFeGl0RXhjZXB0aW9uKGtwKSkgfHwKICAgICAgICAgICAgICAgICAodmFsdWUgIT0ga3dzeXNQcm9jZXNzX0dldEV4aXRWYWx1ZShrcCkpKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2Uga3dzeXNQcm9jZXNzX1N0YXRlX0Rpc293bmVkOgotICAgICAgcHJpbnRmKCJDaGlsZCB3YXMgZGlzb3duZWQuXG4iKTsKKyAgICAgIHByaW50ZigiU3VicHJvY2VzcyB3YXMgZGlzb3duZWQuXG4iKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2Uga3dzeXNQcm9jZXNzX1N0YXRlX0Vycm9yOgogICAgICAgcHJpbnRmKCJFcnJvciBpbiBhZG1pbmlzdHJhdGluZyBjaGlsZCBwcm9jZXNzOiBbJXNdXG4iLApAQCAtNjMxLDcgKzYyOCw4IEBACiAgICAgfQogICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB0ZXN0IG51bWJlciAlZC5cbiIsIG4pOwogICAgIHJldHVybiAxOwotICB9IGVsc2UgaWYgKG4gPj0gMSAmJiBuIDw9IDEwKSB7CisgIH0KKyAgaWYgKG4gPj0gMSAmJiBuIDw9IDEwKSB7CiAgICAgLyogVGhpcyBpcyB0aGUgcGFyZW50IHByb2Nlc3MgZm9yIGEgcmVxdWVzdGVkIHRlc3QgbnVtYmVyLiAgKi8KICAgICBpbnQgc3RhdGVzWzEwXSA9IHsKICAgICAgIGt3c3lzUHJvY2Vzc19TdGF0ZV9FeGl0ZWQsICAga3dzeXNQcm9jZXNzX1N0YXRlX0V4aXRlZCwKQEAgLTcwOSw3ICs3MDcsOCBAQAogICAgIGZyZWUoYXJndjApOwogI2VuZGlmCiAgICAgcmV0dXJuIHI7Ci0gIH0gZWxzZSBpZiAoYXJnYyA+IDIgJiYgc3RyY21wKGFyZ3ZbMV0sICIwIikgPT0gMCkgeworICB9CisgIGlmIChhcmdjID4gMiAmJiBzdHJjbXAoYXJndlsxXSwgIjAiKSA9PSAwKSB7CiAgICAgLyogVGhpcyBpcyB0aGUgc3BlY2lhbCBkZWJ1Z2dpbmcgdGVzdCB0byBydW4gYSBnaXZlbiBjb21tYW5kCiAgICAgICAgbGluZS4gICovCiAgICAgY29uc3QgY2hhcioqIGNtZCA9IGFyZ3YgKyAyOwpAQCAtNzIwLDkgKzcxOSw4IEBACiAgICAgaW50IHIgPQogICAgICAgcnVuQ2hpbGQoY21kLCBzdGF0ZSwgZXhjZXB0aW9uLCB2YWx1ZSwgMCwgMSwgMCwgdGltZW91dCwgMCwgMSwgMCwgMCwgMCk7CiAgICAgcmV0dXJuIHI7Ci0gIH0gZWxzZSB7Ci0gICAgLyogSW1wcm9wZXIgdXNhZ2UuICAqLwotICAgIGZwcmludGYoc3Rkb3V0LCAiVXNhZ2U6ICVzIDx0ZXN0IG51bWJlcj5cbiIsIGFyZ3ZbMF0pOwotICAgIHJldHVybiAxOwogICB9CisgIC8qIEltcHJvcGVyIHVzYWdlLiAgKi8KKyAgZnByaW50ZihzdGRvdXQsICJVc2FnZTogJXMgPHRlc3QgbnVtYmVyPlxuIiwgYXJndlswXSk7CisgIHJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3RTeXN0ZW1JbmZvcm1hdGlvbi5jeHggYi9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eAppbmRleCAxNTQ1MTdlLi40ZjBjNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eAorKysgYi9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbUluZm9ybWF0aW9uLmN4eApAQCAtMTEsMjkgKzExLDEzIEBACiAKICNpbmNsdWRlIDxpb3N0cmVhbT4KIAotI2lmIGRlZmluZWQoS1dTWVNfVVNFX0xPTkdfTE9ORykKLSMgIGlmIGRlZmluZWQoS1dTWVNfSU9TX0hBU19PU1RSRUFNX0xPTkdfTE9ORykKLSMgICAgZGVmaW5lIGlvc3RyZWFtTG9uZ0xvbmcoeCkgKHgpCi0jICBlbHNlCi0jICAgIGRlZmluZSBpb3N0cmVhbUxvbmdMb25nKHgpICgobG9uZyl4KQotIyAgZW5kaWYKLSNlbGlmIGRlZmluZWQoS1dTWVNfVVNFX19fSU5UNjQpCi0jICBpZiBkZWZpbmVkKEtXU1lTX0lPU19IQVNfT1NUUkVBTV9fX0lOVDY0KQotIyAgICBkZWZpbmUgaW9zdHJlYW1Mb25nTG9uZyh4KSAoeCkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIGlvc3RyZWFtTG9uZ0xvbmcoeCkgKChsb25nKXgpCi0jICBlbmRpZgotI2Vsc2UKLSMgIGVycm9yICJObyBMb25nIExvbmciCi0jZW5kaWYKLQogI2RlZmluZSBwcmludE1ldGhvZChpbmZvLCBtKSBzdGQ6OmNvdXQgPDwgI20gPDwgIjogIiA8PCBpbmZvLm0oKSA8PCAiXG4iCiAKICNkZWZpbmUgcHJpbnRNZXRob2QyKGluZm8sIG0sIHVuaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgc3RkOjpjb3V0IDw8ICNtIDw8ICI6ICIgPDwgaW5mby5tKCkgPDwgIiAiIDw8IHVuaXQgPDwgIlxuIgogCiAjZGVmaW5lIHByaW50TWV0aG9kMyhpbmZvLCBtLCB1bml0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0ZDo6Y291dCA8PCAjbSA8PCAiOiAiIDw8IGlvc3RyZWFtTG9uZ0xvbmcoaW5mby5tKSA8PCAiICIgPDwgdW5pdCA8PCAiXG4iCisgIHN0ZDo6Y291dCA8PCAjbSA8PCAiOiAiIDw8IGluZm8ubSA8PCAiICIgPDwgdW5pdCA8PCAiXG4iCiAKIGludCB0ZXN0U3lzdGVtSW5mb3JtYXRpb24oaW50LCBjaGFyKiBbXSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtVG9vbHMuY3h4IGIvU291cmNlL2t3c3lzL3Rlc3RTeXN0ZW1Ub29scy5jeHgKaW5kZXggMWYzYTE1Yi4uY2ZhNDIwZCAxMDA2NDQKLS0tIGEvU291cmNlL2t3c3lzL3Rlc3RTeXN0ZW1Ub29scy5jeHgKKysrIGIvU291cmNlL2t3c3lzL3Rlc3RTeXN0ZW1Ub29scy5jeHgKQEAgLTIwLDE4ICsyMCwxOCBAQAogLy8gbGVmdCBvbiBkaXNrLgogI2luY2x1ZGUgPHRlc3RTeXN0ZW1Ub29scy5oPgogCisjaW5jbHVkZSA8Y3N0ZGxpYj4gLyogZnJlZSAqLworI2luY2x1ZGUgPGNzdHJpbmc+IC8qIHN0cmNtcCAqLwogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3RkbGliLmg+IC8qIGZyZWUgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4gLyogc3RyY21wICovCiAjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCi0jICBpbmNsdWRlIDxpby5oPiAvKiBfdW1hc2sgKE1TVkMpIC8gdW1hc2sgKEJvcmxhbmQpICovCisjICBpbmNsdWRlIDxpby5oPiAvKiBfdW1hc2sgKE1TVkMpICovCiAjICBpZmRlZiBfTVNDX1ZFUgotIyAgICBkZWZpbmUgdW1hc2sgX3VtYXNrIC8vIE5vdGUgdGhpcyBpcyBzdGlsbCB1bWFzayBvbiBCb3JsYW5kCisjICAgIGRlZmluZSB1bWFzayBfdW1hc2sKICMgIGVuZGlmCiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvc3RhdC5oPiAvKiB1bWFzayAoUE9TSVgpLCBfU19JKiBjb25zdGFudHMgKFdpbmRvd3MpICovCi0vLyBWaXN1YWwgQysrIGRvZXMgbm90IGRlZmluZSBtb2RlX3QgKG5vdGUgdGhhdCBCb3JsYW5kIGRvZXMsIGhvd2V2ZXIpLgorLy8gVmlzdWFsIEMrKyBkb2VzIG5vdCBkZWZpbmUgbW9kZV90LgogI2lmIGRlZmluZWQoX01TQ19WRVIpCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKICNlbmRpZgpAQCAtMzI4LDcgKzMyOCwxNCBAQAogICB9CiAKICAgLy8gV2hpbGUgd2UncmUgYXQgaXQsIGNoZWNrIHByb3BlciBUZXN0RmlsZUFjY2VzcyBmdW5jdGlvbmFsaXR5LgotICBpZiAoa3dzeXM6OlN5c3RlbVRvb2xzOjpUZXN0RmlsZUFjY2Vzcyh0ZXN0TmV3RmlsZSwKKyAgYm9vbCBkb193cml0ZV90ZXN0ID0gdHJ1ZTsKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyAgLy8gSWYgd2UgYXJlIHJ1bm5pbmcgYXMgcm9vdCBvbiBsaW51eCBpZ25vcmUgdGhpcyBjaGVjaywgYXMKKyAgLy8gcm9vdCBjYW4gYWx3YXlzIHdyaXRlIHRvIGZpbGVzCisgIGRvX3dyaXRlX3Rlc3QgPSAoZ2V0dWlkKCkgIT0gMCk7CisjZW5kaWYKKyAgaWYgKGRvX3dyaXRlX3Rlc3QgJiYKKyAgICAgIGt3c3lzOjpTeXN0ZW1Ub29sczo6VGVzdEZpbGVBY2Nlc3ModGVzdE5ld0ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3c3lzOjpURVNUX0ZJTEVfV1JJVEUpKSB7CiAgICAgc3RkOjpjZXJyCiAgICAgICA8PCAiVGVzdEZpbGVBY2Nlc3MgaW5jb3JyZWN0bHkgaW5kaWNhdGVkIHRoYXQgdGhpcyBpcyBhIHdyaXRhYmxlIGZpbGU6IgpAQCAtNDE1LDYgKzQyMiwyOCBAQAogICAgIHJlcyA9IGZhbHNlOwogICB9CiAKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisgIHN0ZDo6c3RyaW5nIGNvbnN0IHRlc3RCYWRTeW1saW5rKHRlc3ROZXdEaXIgKyAiL2JhZFN5bWxpbmsudHh0Iik7CisgIHN0ZDo6c3RyaW5nIGNvbnN0IHRlc3RCYWRTeW1saW5rVGd0KHRlc3ROZXdEaXIgKyAiL21pc3Npbmcvc3ltbGlua1RndC50eHQiKTsKKyAgaWYgKCFrd3N5czo6U3lzdGVtVG9vbHM6OkNyZWF0ZVN5bWxpbmsodGVzdEJhZFN5bWxpbmtUZ3QsIHRlc3RCYWRTeW1saW5rKSkgeworICAgIHN0ZDo6Y2VyciA8PCAiUHJvYmxlbSB3aXRoIENyZWF0ZVN5bWxpbmsgZm9yOiAiIDw8IHRlc3RCYWRTeW1saW5rIDw8ICIgLT4gIgorICAgICAgICAgICAgICA8PCB0ZXN0QmFkU3ltbGlua1RndCA8PCBzdGQ6OmVuZGw7CisgICAgcmVzID0gZmFsc2U7CisgIH0KKworICBpZiAoIWt3c3lzOjpTeXN0ZW1Ub29sczo6VG91Y2godGVzdEJhZFN5bWxpbmssIGZhbHNlKSkgeworICAgIHN0ZDo6Y2VyciA8PCAiUHJvYmxlbSB3aXRoIFRvdWNoIChubyBjcmVhdGUpIGZvcjogIiA8PCB0ZXN0QmFkU3ltbGluaworICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgcmVzID0gZmFsc2U7CisgIH0KKyNlbmRpZgorCisgIGlmICgha3dzeXM6OlN5c3RlbVRvb2xzOjpUb3VjaCh0ZXN0TmV3RGlyLCBmYWxzZSkpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBUb3VjaCAobm8gY3JlYXRlKSBmb3I6ICIgPDwgdGVzdE5ld0RpcgorICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgcmVzID0gZmFsc2U7CisgIH0KKwogICBrd3N5czo6U3lzdGVtVG9vbHM6OlRvdWNoKHRlc3ROZXdGaWxlLCB0cnVlKTsKICAgaWYgKCFrd3N5czo6U3lzdGVtVG9vbHM6OlJlbW92ZUFEaXJlY3RvcnkodGVzdE5ld0RpcikpIHsKICAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBSZW1vdmVBRGlyZWN0b3J5IGZvcjogIiA8PCB0ZXN0TmV3RGlyCkBAIC01MDAsNyArNTI5LDcgQEAKIAogICBjaGFyKiBjcmVzID0KICAgICBrd3N5czo6U3lzdGVtVG9vbHM6OkFwcGVuZFN0cmluZ3MoIk1hcnkgSGFkIEEiLCAiIExpdHRsZSBMYW1iLiIpOwotICBpZiAoc3RyY21wKGNyZXMsICJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLiIpKSB7CisgIGlmIChzdHJjbXAoY3JlcywgIk1hcnkgSGFkIEEgTGl0dGxlIExhbWIuIikgIT0gMCkgewogICAgIHN0ZDo6Y2VyciA8PCAiUHJvYmxlbSB3aXRoIEFwcGVuZFN0cmluZ3MgIgogICAgICAgICAgICAgICA8PCAiXCJNYXJ5IEhhZCBBXCIgXCIgTGl0dGxlIExhbWIuXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICByZXMgPSBmYWxzZTsKQEAgLTUwOCw3ICs1MzcsNyBAQAogICBkZWxldGVbXSBjcmVzOwogCiAgIGNyZXMgPSBrd3N5czo6U3lzdGVtVG9vbHM6OkFwcGVuZFN0cmluZ3MoIk1hcnkgSGFkIiwgIiBBICIsICJMaXR0bGUgTGFtYi4iKTsKLSAgaWYgKHN0cmNtcChjcmVzLCAiTWFyeSBIYWQgQSBMaXR0bGUgTGFtYi4iKSkgeworICBpZiAoc3RyY21wKGNyZXMsICJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLiIpICE9IDApIHsKICAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBBcHBlbmRTdHJpbmdzICIKICAgICAgICAgICAgICAgPDwgIlwiTWFyeSBIYWRcIiBcIiBBIFwiIFwiTGl0dGxlIExhbWIuXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICByZXMgPSBmYWxzZTsKQEAgLTUyMiw3ICs1NTEsNyBAQAogICB9CiAKICAgY3JlcyA9IGt3c3lzOjpTeXN0ZW1Ub29sczo6UmVtb3ZlQ2hhcnMoIk1hcnkgSGFkIEEgTGl0dGxlIExhbWIuIiwgImFlaW91Iik7Ci0gIGlmIChzdHJjbXAoY3JlcywgIk1yeSBIZCBBIEx0dGwgTG1iLiIpKSB7CisgIGlmIChzdHJjbXAoY3JlcywgIk1yeSBIZCBBIEx0dGwgTG1iLiIpICE9IDApIHsKICAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBSZW1vdmVDaGFycyAiCiAgICAgICAgICAgICAgIDw8ICJcIk1hcnkgSGFkIEEgTGl0dGxlIExhbWIuXCIiIDw8IHN0ZDo6ZW5kbDsKICAgICByZXMgPSBmYWxzZTsKQEAgLTUzMCw3ICs1NTksNyBAQAogICBkZWxldGVbXSBjcmVzOwogCiAgIGNyZXMgPSBrd3N5czo6U3lzdGVtVG9vbHM6OlJlbW92ZUNoYXJzQnV0VXBwZXJIZXgoIk1hcnkgSGFkIEEgTGl0dGxlIExhbWIuIik7Ci0gIGlmIChzdHJjbXAoY3JlcywgIkEiKSkgeworICBpZiAoc3RyY21wKGNyZXMsICJBIikgIT0gMCkgewogICAgIHN0ZDo6Y2VyciA8PCAiUHJvYmxlbSB3aXRoIFJlbW92ZUNoYXJzQnV0VXBwZXJIZXggIgogICAgICAgICAgICAgICA8PCAiXCJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLlwiIiA8PCBzdGQ6OmVuZGw7CiAgICAgcmVzID0gZmFsc2U7CkBAIC01MzksNyArNTY4LDcgQEAKIAogICBjaGFyKiBjcmVzMiA9IHN0cmR1cCgiTWFyeSBIYWQgQSBMaXR0bGUgTGFtYi4iKTsKICAga3dzeXM6OlN5c3RlbVRvb2xzOjpSZXBsYWNlQ2hhcnMoY3JlczIsICJhZWlvdSIsICdYJyk7Ci0gIGlmIChzdHJjbXAoY3JlczIsICJNWHJ5IEhYZCBBIExYdHRsWCBMWG1iLiIpKSB7CisgIGlmIChzdHJjbXAoY3JlczIsICJNWHJ5IEhYZCBBIExYdHRsWCBMWG1iLiIpICE9IDApIHsKICAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBSZXBsYWNlQ2hhcnMgIgogICAgICAgICAgICAgICA8PCAiXCJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLlwiIiA8PCBzdGQ6OmVuZGw7CiAgICAgcmVzID0gZmFsc2U7CkBAIC01NjEsNyArNTkwLDcgQEAKICAgfQogCiAgIGNyZXMgPSBrd3N5czo6U3lzdGVtVG9vbHM6OkR1cGxpY2F0ZVN0cmluZygiTWFyeSBIYWQgQSBMaXR0bGUgTGFtYi4iKTsKLSAgaWYgKHN0cmNtcChjcmVzLCAiTWFyeSBIYWQgQSBMaXR0bGUgTGFtYi4iKSkgeworICBpZiAoc3RyY21wKGNyZXMsICJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLiIpICE9IDApIHsKICAgICBzdGQ6OmNlcnIgPDwgIlByb2JsZW0gd2l0aCBEdXBsaWNhdGVTdHJpbmcgIgogICAgICAgICAgICAgICA8PCAiXCJNYXJ5IEhhZCBBIExpdHRsZSBMYW1iLlwiIiA8PCBzdGQ6OmVuZGw7CiAgICAgcmVzID0gZmFsc2U7CkBAIC03MjEsOCArNzUwLDcgQEAKIHsKICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CiAgIHNzIDw8ICJ2ZWN0b3IoIjsKLSAgZm9yIChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGkgPSB2ZWMuYmVnaW4oKTsKLSAgICAgICBpICE9IHZlYy5lbmQoKTsgKytpKSB7CisgIGZvciAoYXV0byBpID0gdmVjLmJlZ2luKCk7IGkgIT0gdmVjLmVuZCgpOyArK2kpIHsKICAgICBpZiAoaSAhPSB2ZWMuYmVnaW4oKSkgewogICAgICAgc3MgPDwgIiwgIjsKICAgICB9CkBAIC03NDMsMTYgKzc3MSwxNiBAQAogICBjb25zdCBjaGFyKiByZWdpc3RyeVBhdGggPSAiW0hLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXE15QXBwOyBNeUtleV0iOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvcmlnaW5hbFBhdGhzOwotICBvcmlnaW5hbFBhdGhzLnB1c2hfYmFjayhyZWdpc3RyeVBhdGgpOworICBvcmlnaW5hbFBhdGhzLmVtcGxhY2VfYmFjayhyZWdpc3RyeVBhdGgpOwogCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleHBlY3RlZFBhdGhzOwotICBleHBlY3RlZFBhdGhzLnB1c2hfYmFjayhyZWdpc3RyeVBhdGgpOworICBleHBlY3RlZFBhdGhzLmVtcGxhY2VfYmFjayhyZWdpc3RyeVBhdGgpOwogI2lmZGVmIF9XSU4zMgogICBleHBlY3RlZFBhdGhzLnB1c2hfYmFjaygiQzovU29tZXdoZXJlL3NvbWV0aGluZyIpOwogICBleHBlY3RlZFBhdGhzLnB1c2hfYmFjaygiRDovVGVtcCIpOwogI2Vsc2UKLSAgZXhwZWN0ZWRQYXRocy5wdXNoX2JhY2soIi9Tb21ld2hlcmUvc29tZXRoaW5nIik7Ci0gIGV4cGVjdGVkUGF0aHMucHVzaF9iYWNrKCIvdG1wIik7CisgIGV4cGVjdGVkUGF0aHMuZW1wbGFjZV9iYWNrKCIvU29tZXdoZXJlL3NvbWV0aGluZyIpOworICBleHBlY3RlZFBhdGhzLmVtcGxhY2VfYmFjaygiL3RtcCIpOwogI2VuZGlmCiAKICAgYm9vbCByZXMgPSB0cnVlOwpAQCAtODE3LDcgKzg0NSw3IEBACiAgIH0KIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2VhcmNoUGF0aHM7Ci0gIHNlYXJjaFBhdGhzLnB1c2hfYmFjayhURVNUX1NZU1RFTVRPT0xTX0JJTkFSWV9ESVIpOworICBzZWFyY2hQYXRocy5lbXBsYWNlX2JhY2soVEVTVF9TWVNURU1UT09MU19CSU5BUllfRElSKTsKICAgaWYgKGt3c3lzOjpTeXN0ZW1Ub29sczo6RmluZEZpbGUodGVzdEZpbmRGaWxlTmFtZSwgc2VhcmNoUGF0aHMsIHRydWUpCiAgICAgICAgIC5lbXB0eSgpKSB7CiAgICAgc3RkOjpjZXJyIDw8ICJQcm9ibGVtIHdpdGggRmluZEZpbGUgd2l0aG91dCBzeXN0ZW0gcGF0aHMgZm9yOiAiCkBAIC0xMDc0LDYgKzExMDIsNzkgQEAKICAgICB9CiAgIH0KIAorICBpZiAoIWt3c3lzOjpTeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeSgiZGlyX2EiKSB8fAorICAgICAgIWt3c3lzOjpTeXN0ZW1Ub29sczo6TWFrZURpcmVjdG9yeSgiZGlyX2IiKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGlmICgha3dzeXM6OlN5c3RlbVRvb2xzOjpDb3B5RmlsZUlmRGlmZmVyZW50KCJkaXJfYS8iLCAiZGlyX2IiKSkgeworICAgIHJldCA9IGZhbHNlOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgQ2hlY2tVUkxQYXJzaW5nKCkKK3sKKyAgYm9vbCByZXQgPSB0cnVlOworICBzdGQ6OnN0cmluZyB1cmwgPSAiaHR0cDovL3VzZXI6cHdAaG9zdG5hbWU6NDIvZnVsbC91cmwuY29tIjsKKworICBzdGQ6OnN0cmluZyBwcm90b2NvbCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBob3N0bmFtZSwgZGF0YXBvcnQsIGRhdGFiYXNlOworICBrd3N5czo6U3lzdGVtVG9vbHM6OlBhcnNlVVJMKHVybCwgcHJvdG9jb2wsIHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXBvcnQsIGRhdGFiYXNlKTsKKyAgaWYgKHByb3RvY29sICE9ICJodHRwIiB8fCB1c2VybmFtZSAhPSAidXNlciIgfHwgcGFzc3dvcmQgIT0gInB3IiB8fAorICAgICAgaG9zdG5hbWUgIT0gImhvc3RuYW1lIiB8fCBkYXRhcG9ydCAhPSAiNDIiIHx8CisgICAgICBkYXRhYmFzZSAhPSAiZnVsbC91cmwuY29tIikgeworICAgIHN0ZDo6Y2VyciA8PCAiSW5jb3JyZWN0IFVSTCBwYXJzaW5nIiA8PCBzdGQ6OmVuZGw7CisgICAgcmV0ID0gZmFsc2U7CisgIH0KKworICBzdGQ6OnN0cmluZyB1cmkgPQorICAgICJmaWxlOi8vaG9zdG5hbWUvcGF0aC90by8iCisgICAgImElMjBmaWxlJTIwd2l0aCUyMHN0ciVDMyVBMG5nJUMzJUE4JTIwY2glNDByJTIwYW5kJTIwcyVDMiVCNWFjZXMiOworICBrd3N5czo6U3lzdGVtVG9vbHM6OlBhcnNlVVJMKHVyaSwgcHJvdG9jb2wsIHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXBvcnQsIGRhdGFiYXNlLCB0cnVlKTsKKyAgaWYgKHByb3RvY29sICE9ICJmaWxlIiB8fCBob3N0bmFtZSAhPSAiaG9zdG5hbWUiIHx8CisgICAgICBkYXRhYmFzZSAhPSAicGF0aC90by9hIGZpbGUgd2l0aCBzdHLDoG5nw6ggY2hAciBhbmQgc8K1YWNlcyIpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkluY29ycmVjdCBVUkwgcGFyc2luZyBvciBkZWNvZGluZyIgPDwgc3RkOjplbmRsOworICAgIHJldCA9IGZhbHNlOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIENoZWNrU3BsaXRTdHJpbmcoKQoreworICBib29sIHJldCA9IHRydWU7CisKKyAgYXV0byBjaGVja19zcGxpdCA9IFtdKHN0ZDo6c3RyaW5nIGNvbnN0JiBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gZXhwZWN0ZWQpIC0+IGJvb2wgeworICAgIGF1dG8gY29uc3QgY29tcG9uZW50cyA9IGt3c3lzOjpTeXN0ZW1Ub29sczo6U3BsaXRTdHJpbmcoaW5wdXQsICcvJyk7CisgICAgaWYgKGNvbXBvbmVudHMuc2l6ZSgpICE9IGV4cGVjdGVkLnNpemUoKSkgeworICAgICAgc3RkOjpjZXJyIDw8ICJJbmNvcnJlY3Qgc3BsaXQgY291bnQgZm9yICIgPDwgaW5wdXQgPDwgIjogIgorICAgICAgICAgICAgICAgIDw8IGNvbXBvbmVudHMuc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGV4cGVjdGVkKSB7CisgICAgICBpZiAoY29tcG9uZW50c1tpXSAhPSBwYXJ0KSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiSW5jb3JyZWN0IHNwbGl0IGNvbXBvbmVudCAiIDw8IGkgPDwgIiBmb3IgIiA8PCBpbnB1dAorICAgICAgICAgICAgICAgICAgPDwgIjogIiA8PCBjb21wb25lbnRzW2ldIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgKytpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsKKworICAvLyBObyBzZXBhcmF0b3JzCisgIHJldCAmPSBjaGVja19zcGxpdCgibm9zZXAiLCB7ICJub3NlcCIgfSk7CisgIC8vIFNpbXBsZQorICByZXQgJj0gY2hlY2tfc3BsaXQoImZpcnN0L3NlY29uZCIsIHsgImZpcnN0IiwgInNlY29uZCIgfSk7CisgIC8vIFNlcGFyYXRvciBhdCBiZWdpbm5pbmcKKyAgcmV0ICY9IGNoZWNrX3NwbGl0KCIvc3RhcnRzL3NlcCIsIHsgIiIsICJzdGFydHMiLCAic2VwIiB9KTsKKyAgLy8gU2VwYXJhdG9yIGF0IGVuZAorICByZXQgJj0gY2hlY2tfc3BsaXQoImVuZHMvc2VwLyIsIHsgImVuZHMiLCAic2VwIiwgIiIgfSk7CisKICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTEyNCw1ICsxMjI1LDkgQEAKIAogICByZXMgJj0gQ2hlY2tDb3B5RmlsZUlmRGlmZmVyZW50KCk7CiAKKyAgcmVzICY9IENoZWNrVVJMUGFyc2luZygpOworCisgIHJlcyAmPSBDaGVja1NwbGl0U3RyaW5nKCk7CisKICAgcmV0dXJuIHJlcyA/IDAgOiAxOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2t3c3lzL3Rlc3RTeXN0ZW1Ub29scy5oLmluIGIvU291cmNlL2t3c3lzL3Rlc3RTeXN0ZW1Ub29scy5oLmluCmluZGV4IDAyMmUzNmUuLmU0Yjg5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9rd3N5cy90ZXN0U3lzdGVtVG9vbHMuaC5pbgorKysgYi9Tb3VyY2Uva3dzeXMvdGVzdFN5c3RlbVRvb2xzLmguaW4KQEAgLTMsNyArMyw3IEBACiAjaWZuZGVmIEBLV1NZU19OQU1FU1BBQ0VAX3Rlc3RTeXN0ZW10b29sc19oCiAjZGVmaW5lIEBLV1NZU19OQU1FU1BBQ0VAX3Rlc3RTeXN0ZW10b29sc19oCiAKLSNkZWZpbmUgRVhFQ1VUQUJMRV9PVVRQVVRfUEFUSCAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkAiCisjZGVmaW5lIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkAiCiAKICNkZWZpbmUgVEVTVF9TWVNURU1UT09MU19TT1VSQ0VfRElSICJAVEVTVF9TWVNURU1UT09MU19TT1VSQ0VfRElSQCIKICNkZWZpbmUgVEVTVF9TWVNURU1UT09MU19CSU5BUllfRElSICJAVEVTVF9TWVNURU1UT09MU19CSU5BUllfRElSQCIKZGlmZiAtLWdpdCBhL1RlbXBsYXRlcy9NU0J1aWxkL0ZsYWdUYWJsZXMvdjEwX0N1ZGEuanNvbiBiL1RlbXBsYXRlcy9NU0J1aWxkL0ZsYWdUYWJsZXMvdjEwX0N1ZGEuanNvbgppbmRleCAxODMxYjhhLi5iMzIzMGFjIDEwMDY0NAotLS0gYS9UZW1wbGF0ZXMvTVNCdWlsZC9GbGFnVGFibGVzL3YxMF9DdWRhLmpzb24KKysrIGIvVGVtcGxhdGVzL01TQnVpbGQvRmxhZ1RhYmxlcy92MTBfQ3VkYS5qc29uCkBAIC0yMCw2ICsyMCwyNiBAQAogICAgIF0KICAgfSwKICAgeworICAgICJuYW1lIjogICJBZGRpdGlvbmFsQ29tcGlsZXJPcHRpb25zIiwKKyAgICAic3dpdGNoIjogIi1jb21waWxlci1vcHRpb25zPSIsCisgICAgImNvbW1lbnQiOiAiSG9zdCBjb21waWxlciBvcHRpb25zIiwKKyAgICAidmFsdWUiOiAiIiwKKyAgICAiZmxhZ3MiOiBbCisgICAgICAiVXNlclZhbHVlIiwKKyAgICAgICJTcGFjZUFwcGVuZGFibGUiCisgICAgXQorICB9LAorICB7CisgICAgIm5hbWUiOiAgIkFkZGl0aW9uYWxDb21waWxlck9wdGlvbnMiLAorICAgICJzd2l0Y2giOiAiLWNvbXBpbGVyLW9wdGlvbnMiLAorICAgICJjb21tZW50IjogIkhvc3QgY29tcGlsZXIgb3B0aW9ucyIsCisgICAgInZhbHVlIjogIiIsCisgICAgImZsYWdzIjogWworICAgICAgIlVzZXJGb2xsb3dpbmciLAorICAgICAgIlNwYWNlQXBwZW5kYWJsZSIKKyAgICBdCisgIH0sCisgIHsKICAgICAibmFtZSI6ICAiQ3VkYVJ1bnRpbWUiLAogICAgICJzd2l0Y2giOiAiY3VkYXJ0PW5vbmUiLAogICAgICJjb21tZW50IjogIk5vIENVREEgcnVudGltZSBsaWJyYXJ5IiwKZGlmZiAtLWdpdCBhL1RlbXBsYXRlcy9UZXN0RHJpdmVyLmN4eC5pbiBiL1RlbXBsYXRlcy9UZXN0RHJpdmVyLmN4eC5pbgppbmRleCA4NDZhODI4Li4wNTNmMWVlIDEwMDY0NAotLS0gYS9UZW1wbGF0ZXMvVGVzdERyaXZlci5jeHguaW4KKysrIGIvVGVtcGxhdGVzL1Rlc3REcml2ZXIuY3h4LmluCkBAIC00NSw3ICs0NSw4IEBACiAgICAobm90ZSB0aGF0IGl0IGhhcyB0byBiZSBmcmVlJ2QgbWFudWFsbHkpICovCiBzdGF0aWMgY2hhciogbG93ZXJjYXNlKGNvbnN0IGNoYXIqIHN0cmluZykKIHsKLSAgY2hhciAqbmV3X3N0cmluZywgKnA7CisgIGNoYXIgKm5ld19zdHJpbmc7CisgIGNoYXIgKnA7CiAgIHNpemVfdCBzdHJpbmdTaXplOwogCiAgIHN0cmluZ1NpemUgPSBDTV9DQVNUKHNpemVfdCwgc3RybGVuKHN0cmluZykgKyAxKTsKQEAgLTYzLDcgKzY0LDkgQEAKIAogaW50IG1haW4oaW50IGFjLCBjaGFyKiBhdltdKQogewotICBpbnQgaSwgdGVzdE51bSA9IDAsIHBhcnRpYWxfbWF0Y2g7CisgIGludCBpOworICBpbnQgdGVzdE51bSA9IDA7CisgIGludCBwYXJ0aWFsX21hdGNoOwogICBjaGFyICphcmc7CiAgIGludCB0ZXN0VG9SdW4gPSAtMTsKIApkaWZmIC0tZ2l0IGEvVGVzdHMvQXNzZW1ibGVyL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQXNzZW1ibGVyL0NNYWtlTGlzdHMudHh0CmluZGV4IDIxYjI2NWMuLmEzYzk5NDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0Fzc2VtYmxlci9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Bc3NlbWJsZXIvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkIChWRVJTSU9OIDIuNikKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQgKFZFUlNJT04gMy44KQogcHJvamVjdChBc3NlbWJsZXIgQykKIG1lc3NhZ2UoIkNURVNUX0ZVTExfT1VUUFVUICIpCiBzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSAxKQpAQCAtMjIsNyArMjIsMTEgQEAKICAgICBzZXQoU1JDUyBtYWluLnMpCiAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgT1VUUFVUIG1haW4ucwotICAgICAgQ09NTUFORCAke0NNQUtFX0NfQ09NUElMRVJ9ICR7Q19GTEFHU30gLVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L21haW4uYyAtbyBtYWluLnMKKyAgICAgIENPTU1BTkQgJHtDTUFLRV9DX0NPTVBJTEVSfSAke0NfRkxBR1N9CisgICAgICAgICIkPCQ8Q09ORklHOkRlYnVnPjoke0NNQUtFX0NfQ09NUElMRV9PUFRJT05TX01TVkNfUlVOVElNRV9MSUJSQVJZX011bHRpVGhyZWFkZWREZWJ1Z0RMTH0+IgorICAgICAgICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OiR7Q01BS0VfQ19DT01QSUxFX09QVElPTlNfTVNWQ19SVU5USU1FX0xJQlJBUllfTXVsdGlUaHJlYWRlZERMTH0+IgorICAgICAgICAtUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFpbi5jIC1vIG1haW4ucworICAgICAgQ09NTUFORF9FWFBBTkRfTElTVFMKICAgICAgIERFUEVORFMgbWFpbi5jCiAgICAgICBWRVJCQVRJTQogICAgICAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQnVpbGREZXBlbmRzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQnVpbGREZXBlbmRzL0NNYWtlTGlzdHMudHh0CmluZGV4IGMxYWQxN2MuLjVkZGFlODMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0J1aWxkRGVwZW5kcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9CdWlsZERlcGVuZHMvQ01ha2VMaXN0cy50eHQKQEAgLTM2OCw2ICszNjgsMjggQEAKICAgJHtURVNUX0xJTktfREVQRU5EU30KICIpCiAgIGVuZGlmKCkKKworICBzZXQobGlua2RlcDMgJHtCdWlsZERlcGVuZHNfQklOQVJZX0RJUn0vUHJvamVjdC9saW5rZGVwMyR7Q01BS0VfRVhFQ1VUQUJMRV9TVUZGSVh9KQorICBpZigke2xpbmtkZXAzfSBJU19ORVdFUl9USEFOICR7VEVTVF9MSU5LX0RFUEVORFN9KQorICAgIG1lc3NhZ2UoIiQ8TElOS19MQU5HVUFHRT4gaW4gTElOS19ERVBFTkRTIHdvcmtlZCIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiJDxMSU5LX0xBTkdVQUdFPiBpbiBMSU5LX0RFUEVORFMgZmFpbGVkLiAgRXhlY3V0YWJsZQorICAke2xpbmtkZXAzfQoraXMgbm90IG5ld2VyIHRoYW4gZGVwZW5kZW5jeQorICAke1RFU1RfTElOS19ERVBFTkRTfQorIikKKyAgZW5kaWYoKQorCisgIHNldChsaW5rZGVwNCAke0J1aWxkRGVwZW5kc19CSU5BUllfRElSfS9Qcm9qZWN0L2xpbmtkZXA0JHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0pCisgIGlmKCR7bGlua2RlcDR9IElTX05FV0VSX1RIQU4gJHtURVNUX0xJTktfREVQRU5EU30pCisgICAgbWVzc2FnZSgiJDxMSU5LX0xBTkdVQUdFPiBpbiBJTlRFUkZBQ0VfTElOS19ERVBFTkRTIHdvcmtlZCIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiJDxMSU5LX0xBTkdVQUdFPiBpbiBJTlRFUkZBQ0VfTElOS19ERVBFTkRTIGZhaWxlZC4gIEV4ZWN1dGFibGUKKyAgJHtsaW5rZGVwNH0KK2lzIG5vdCBuZXdlciB0aGFuIGRlcGVuZGVuY3kKKyAgJHtURVNUX0xJTktfREVQRU5EU30KKyIpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogaWYoRVhJU1RTICIke2xpbmtfZGVwZW5kc19ub19zaGFyZWRfY2hlY2tfdHh0fSIpCmRpZmYgLS1naXQgYS9UZXN0cy9CdWlsZERlcGVuZHMvUHJvamVjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0J1aWxkRGVwZW5kcy9Qcm9qZWN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDgzMzg4MDAuLjgzNTgzYzkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0J1aWxkRGVwZW5kcy9Qcm9qZWN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0J1aWxkRGVwZW5kcy9Qcm9qZWN0L0NNYWtlTGlzdHMudHh0CkBAIC0xMTgsNiArMTE4LDE0IEBACiAgIHNldF9wcm9wZXJ0eShUQVJHRVQgZm9vX2ludGVyZmFjZSBQUk9QRVJUWSBJTlRFUkZBQ0VfTElOS19ERVBFTkRTICQ8MToke1RFU1RfTElOS19ERVBFTkRTfT4pCiAgIGFkZF9leGVjdXRhYmxlKGxpbmtkZXAyIGxpbmtkZXAuY3h4KQogICB0YXJnZXRfbGlua19saWJyYXJpZXMobGlua2RlcDIgUFJJVkFURSBmb29faW50ZXJmYWNlKQorCisgIGFkZF9leGVjdXRhYmxlKGxpbmtkZXAzIGxpbmtkZXAuY3h4KQorICBzZXRfcHJvcGVydHkoVEFSR0VUIGxpbmtkZXAzIFBST1BFUlRZIExJTktfREVQRU5EUyAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7VEVTVF9MSU5LX0RFUEVORFN9PikKKworICBhZGRfbGlicmFyeShmb29faW50ZXJmYWNlMiBJTlRFUkZBQ0UpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgZm9vX2ludGVyZmFjZTIgUFJPUEVSVFkgSU5URVJGQUNFX0xJTktfREVQRU5EUyAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7VEVTVF9MSU5LX0RFUEVORFN9PikKKyAgYWRkX2V4ZWN1dGFibGUobGlua2RlcDQgbGlua2RlcC5jeHgpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhsaW5rZGVwNCBQUklWQVRFIGZvb19pbnRlcmZhY2UyKQogZW5kaWYoKQogCiBhZGRfbGlicmFyeShsaW5rX2RlcGVuZHNfbm9fc2hhcmVkX2xpYiBTSEFSRUQgbGlua19kZXBlbmRzX25vX3NoYXJlZF9saWIuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvQ0ZCdW5kbGVUZXN0L1ZlcmlmeVJlc3VsdC5jbWFrZSBiL1Rlc3RzL0NGQnVuZGxlVGVzdC9WZXJpZnlSZXN1bHQuY21ha2UKaW5kZXggZTYzN2JiMS4uYWMxNGU1ZCAxMDA2NDQKLS0tIGEvVGVzdHMvQ0ZCdW5kbGVUZXN0L1ZlcmlmeVJlc3VsdC5jbWFrZQorKysgYi9UZXN0cy9DRkJ1bmRsZVRlc3QvVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC0xNCw3ICsxNCw3IEBACiBtZXNzYWdlKFNUQVRVUyAiZGlyPScke2Rpcn0nIikKIG1lc3NhZ2UoU1RBVFVTICJnZW49JyR7Z2VufSciKQogCi1pZihnZW4gU1RSRVFVQUwgIlhjb2RlIikKK2lmKGdlbiBNQVRDSEVTICJeKFhjb2RlJHxOaW5qYSBNdWx0aS1Db25maWckKSIpCiAgIHNldChleHBlY3RlZF9maWxlbmFtZSAiJHtkaXJ9LyR7Q1RFU1RfQ09ORklHVVJBVElPTl9UWVBFfS9DRkJ1bmRsZVRlc3QucGx1Z2luL0NvbnRlbnRzL01hY09TL0NGQnVuZGxlVGVzdCIpCiBlbHNlKCkKICAgc2V0KGV4cGVjdGVkX2ZpbGVuYW1lICIke2Rpcn0vQ0ZCdW5kbGVUZXN0LnBsdWdpbi9Db250ZW50cy9NYWNPUy9DRkJ1bmRsZVRlc3QiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VDb21tYW5kcy90YXJnZXRfbGlua19saWJyYXJpZXMvU3ViRGlyQi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlQ29tbWFuZHMvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1N1YkRpckIvQ01ha2VMaXN0cy50eHQKaW5kZXggN2M5MThlNi4uMDZkMTExMSAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VDb21tYW5kcy90YXJnZXRfbGlua19saWJyYXJpZXMvU3ViRGlyQi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DTWFrZUNvbW1hbmRzL3RhcmdldF9saW5rX2xpYnJhcmllcy9TdWJEaXJCL0NNYWtlTGlzdHMudHh0CkBAIC0yLDcgKzIsMTEgQEAKIAogIyBMaW5rIHRvIGEgdGFyZ2V0IGltcG9ydGVkIGluIHRoaXMgZGlyZWN0b3J5IHRoYXQgd291bGQgbm90IG5vcm1hbGx5CiAjIGJlIHZpc2libGUgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBUb3BEaXIgaXMgZGVmaW5lZC4KLXRhcmdldF9saW5rX2xpYnJhcmllcyhUb3BEaXIgUFVCTElDIFNhbWVOYW1lSW1wb3J0ZWQpCit0YXJnZXRfbGlua19saWJyYXJpZXMoVG9wRGlyIFBVQkxJQyBkZWJ1ZyBTYW1lTmFtZUltcG9ydGVkIG9wdGltaXplZCBTYW1lTmFtZUltcG9ydGVkKQorCisjIExpbmsgdG8gYSBsaXN0IG9mIHRhcmdldHMgaW1wb3J0ZWQgaW4gdGhpcyBkaXJlY3RvcnkgdGhhdCB3b3VsZCBub3QKKyMgbm9ybWFsbHkgYmUgdmlzaWJsZSB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIFRvcERpciBpcyBkZWZpbmVkLgordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRvcERpciBQVUJMSUMgIiQ8MTpTYW1lTmFtZUltcG9ydGVkO1NhbWVOYW1lSW1wb3J0ZWQ+IikKIAogIyBMaW5rIFN1YkRpckEgdG8gYSB0YXJnZXQgaW1wb3J0ZWQgaW4gdGhpcyBkaXJlY3RvcnkgdGhhdCBoYXMgdGhlIHNhbWUKICMgbmFtZSBhcyBhIHRhcmdldCBpbXBvcnRlZCBpbiBTdWJEaXJBJ3MgZGlyZWN0b3J5LiAgV2UgdmVyaWZ5IHdoZW4KZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VMaWIvQ01ha2VMaXN0cy50eHQKaW5kZXggODQwYWZjMS4uMGIyYzhmNiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ01ha2VMaWIvQ01ha2VMaXN0cy50eHQKQEAgLTExLDYgKzExLDcgQEAKICAgdGVzdENUZXN0UmVzb3VyY2VBbGxvY2F0b3IuY3h4CiAgIHRlc3RDVGVzdFJlc291cmNlU3BlYy5jeHgKICAgdGVzdENUZXN0UmVzb3VyY2VHcm91cHMuY3h4CisgIHRlc3RHY2NEZXBmaWxlUmVhZGVyLmN4eAogICB0ZXN0R2VuZXJhdGVkRmlsZVN0cmVhbS5jeHgKICAgdGVzdFJTVC5jeHgKICAgdGVzdFJhbmdlLmN4eApAQCAtMjUsNyArMjYsMTIgQEAKICAgdGVzdFVWUHJvY2Vzc0NoYWluLmN4eAogICB0ZXN0VVZSQUlJLmN4eAogICB0ZXN0VVZTdHJlYW1idWYuY3h4CisgIHRlc3RDTUV4dE1lbW9yeS5jeHgKKyAgdGVzdENNRXh0QWxnb3JpdGhtLmN4eAogICApCitpZiAoQ01ha2VfVEVTVF9GSUxFU1lTVEVNX1BBVEggT1IgTk9UIENNYWtlX0hBVkVfQ1hYX0ZJTEVTWVNURU0pCisgIGxpc3QoQVBQRU5EIENNYWtlTGliX1RFU1RTIHRlc3RDTUZpbGVzeXN0ZW1QYXRoLmN4eCkKK2VuZGlmKCkKIAogYWRkX2V4ZWN1dGFibGUodGVzdFVWUHJvY2Vzc0NoYWluSGVscGVyIHRlc3RVVlByb2Nlc3NDaGFpbkhlbHBlci5jeHgpCiAKQEAgLTMzLDYgKzM5LDcgQEAKIHNldCh0ZXN0VVZQcm9jZXNzQ2hhaW5fQVJHUyAkPFRBUkdFVF9GSUxFOnRlc3RVVlByb2Nlc3NDaGFpbkhlbHBlcj4pCiBzZXQodGVzdFVWU3RyZWFtYnVmX0FSR1MgJDxUQVJHRVRfRklMRTpjbWFrZT4pCiBzZXQodGVzdENUZXN0UmVzb3VyY2VTcGVjX0FSR1MgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQorc2V0KHRlc3RHY2NEZXBmaWxlUmVhZGVyX0FSR1MgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQogCiBpZihXSU4zMikKICAgbGlzdChBUFBFTkQgQ01ha2VMaWJfVEVTVFMKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL1BzZXVkb01lbWNoZWNrL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VMaWIvUHNldWRvTWVtY2hlY2svQ01ha2VMaXN0cy50eHQKaW5kZXggN2M4NGVlMS4uNGJlZjZjNSAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvUHNldWRvTWVtY2hlY2svQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ01ha2VMaWIvUHNldWRvTWVtY2hlY2svQ01ha2VMaXN0cy50eHQKQEAgLTE1LDYgKzE1LDkgQEAKIGFkZF9leGVjdXRhYmxlKHBzZXVkb19CQyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3JldDAuY3h4IikKIHNldF90YXJnZXRfcHJvcGVydGllcyhwc2V1ZG9fQkMgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBCQykKIHRhcmdldF9saW5rX2xpYnJhcmllcyhwc2V1ZG9fQkMgQ01ha2VMaWIpCithZGRfZXhlY3V0YWJsZShwc2V1ZG9fY3VkYS1tZW1jaGVjayAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3JldDAuY3h4IikKK3NldF90YXJnZXRfcHJvcGVydGllcyhwc2V1ZG9fY3VkYS1tZW1jaGVjayBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIGN1ZGEtbWVtY2hlY2spCit0YXJnZXRfbGlua19saWJyYXJpZXMocHNldWRvX2N1ZGEtbWVtY2hlY2sgQ01ha2VMaWIpCiAKICMgYmluYXJ5IHRvIGJlIHVzZWQgYXMgcHJlLSBhbmQgcG9zdC1tZW1jaGVjayBjb21tYW5kIHRoYXQgZmFpbHMKIGFkZF9leGVjdXRhYmxlKG1lbWNoZWNrX2ZhaWwgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9yZXQxLmN4eCIpCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi9Qc2V1ZG9NZW1jaGVjay9tZW10ZXN0ZXIuY3h4LmluIGIvVGVzdHMvQ01ha2VMaWIvUHNldWRvTWVtY2hlY2svbWVtdGVzdGVyLmN4eC5pbgppbmRleCAzMTgzYmMwLi5mMzdhZDU5IDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZUxpYi9Qc2V1ZG9NZW1jaGVjay9tZW10ZXN0ZXIuY3h4LmluCisrKyBiL1Rlc3RzL0NNYWtlTGliL1BzZXVkb01lbWNoZWNrL21lbXRlc3Rlci5jeHguaW4KQEAgLTEsOCArMSwxNCBAQAotI2luY2x1ZGUgPGNtU3lzdGVtVG9vbHMuaD4KLSNpbmNsdWRlICJjbXN5cy9FbmNvZGluZy5oeHgiCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgImNtc3lzL0VuY29kaW5nLmh4eCIKKworI2luY2x1ZGUgPGNtU3lzdGVtVG9vbHMuaD4KKworLy8gY2xhbmctZm9ybWF0IG9mZgogI2RlZmluZSBSRVRWQUwgQF9yZXR2YWxACisjZGVmaW5lIENNQUtFX0NPTU1BTkQgIkBDTUFLRV9DT01NQU5EQCIKKy8vIGNsYW5nLWZvcm1hdCBvbgogCiBpbnQgbWFpbihpbnQgYWMsIGNoYXIqKiBhdikKIHsKQEAgLTE0LDYgKzIwLDkgQEAKICAgc3RkOjpzdHJpbmcgZXhlbmFtZSA9IGFyZ3ZbMF07CiAgIHN0ZDo6c3RyaW5nIGxvZ2FyZzsKICAgYm9vbCBuZXh0YXJnID0gZmFsc2U7CisgIC8vIGV4ZWN1dGUgdGhlIHBhcnQgYWZ0ZXIgdGhlIGxhc3QgYXJndW1lbnQ/CisgIC8vIHRoZSBsb2dmaWxlIHBhdGggZ2V0cyBwYXNzZWQgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUgUFNFVURPX0xPR0ZJTEUKKyAgYm9vbCBleGVjID0gZmFsc2U7CiAKICAgaWYgKGV4ZW5hbWUuZmluZCgidmFsZ3JpbmQiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIGxvZ2FyZyA9ICItLWxvZy1maWxlPSI7CkBAIC0yNiw2ICszNSwxMCBAQAogICB9IGVsc2UgaWYgKGV4ZW5hbWUuZmluZCgiQkMiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewogICAgIG5leHRhcmcgPSB0cnVlOwogICAgIGxvZ2FyZyA9ICIvWCI7CisgIH0gZWxzZSBpZiAoZXhlbmFtZS5maW5kKCJjdWRhLW1lbWNoZWNrIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBuZXh0YXJnID0gdHJ1ZTsKKyAgICBleGVjID0gdHJ1ZTsKKyAgICBsb2dhcmcgPSAiLS1sb2ctZmlsZSI7CiAgIH0KIAogICBpZiAoIWxvZ2FyZy5lbXB0eSgpKSB7CkBAIC00NSw4ICs1OCwyNSBAQAogICAgICAgfQogICAgIH0KIAorICAgIC8vIGZpbmQgdGhlIGxhc3QgYXJndW1lbnQgcG9zaXRpb24KKyAgICBpbnQgbGFzdGFyZ19wb3MgPSAxOworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICBzdGQ6OnN0cmluZyBhcmcgPSBhcmd2W2ldOworICAgICAgaWYgKGFyZy5maW5kKCItLSIpID09IDApIHsKKyAgICAgICAgbGFzdGFyZ19wb3MgPSBpOworICAgICAgfQorICAgIH0KKwogICAgIGlmICghbG9nZmlsZS5lbXB0eSgpKSB7CiAgICAgICBjbVN5c3RlbVRvb2xzOjpUb3VjaChsb2dmaWxlLCB0cnVlKTsKKyAgICAgIC8vIGV4ZWN1dGUgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBhcmd1bWVudCB3aXRoIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQKKyAgICAgIGludCBjYWxsYXJnX3BvcyA9IGxhc3RhcmdfcG9zICsgKG5leHRhcmcgPyAyIDogMSk7CisgICAgICBpZiAoZXhlYyAmJiBjYWxsYXJnX3BvcyA8IGFyZ2MpIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNhbGxhcmdzeyBDTUFLRV9DT01NQU5ELCAiLUUiLCAiZW52IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUFNFVURPX0xPR0ZJTEU9IiArIGxvZ2ZpbGUgfTsKKyAgICAgICAgY2FsbGFyZ3MuaW5zZXJ0KGNhbGxhcmdzLmVuZCgpLCAmYXJndltjYWxsYXJnX3Bvc10sICZhcmd2W2FyZ2NdKTsKKyAgICAgICAgY21TeXN0ZW1Ub29sczo6UnVuU2luZ2xlQ29tbWFuZChjYWxsYXJncyk7CisgICAgICB9CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RBcmd1bWVudFBhcnNlci5jeHggYi9UZXN0cy9DTWFrZUxpYi90ZXN0QXJndW1lbnRQYXJzZXIuY3h4CmluZGV4IDIwZjk4YzIuLjk2NTY5MGMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RBcmd1bWVudFBhcnNlci5jeHgKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEFyZ3VtZW50UGFyc2VyLmN4eApAQCAtNyw4ICs3LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KLQotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbUFyZ3VtZW50UGFyc2VyLmgiCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RDTUV4dEFsZ29yaXRobS5jeHggYi9UZXN0cy9DTWFrZUxpYi90ZXN0Q01FeHRBbGdvcml0aG0uY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MzE5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0Q01FeHRBbGdvcml0aG0uY3h4CkBAIC0wLDAgKzEsMTE4IEBACisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8Y21leHQvYWxnb3JpdGhtPgorCituYW1lc3BhY2UgeworCitpbnQgZmFpbGVkID0gMDsKKwordm9pZCB0ZXN0QXBwZW5kKCkKK3sKKyAgc3RkOjpjb3V0IDw8ICJ0ZXN0QXBwZW5kKCkiIDw8IHN0ZDo6ZW5kbDsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGNtOjphcHBlbmQoVmVjdG9yLCBJdGVyYXRvciwgSXRlcmF0b3IpCisgIHsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYxeyAxLCAyLCAzIH07CisgICAgc3RkOjp2ZWN0b3I8aW50PiB2MV9yZWZ7IDEsIDIsIDMsIDQsIDUsIDYgfTsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYyeyA0LCA1LCA2IH07CisgICAgc3RkOjp2ZWN0b3I8aW50PiB2Ml9yZWZ7IDQsIDUsIDYgfTsKKworICAgIGNtOjphcHBlbmQodjEsIHYyLmJlZ2luKCksIHYyLmVuZCgpKTsKKworICAgIGlmICh2MSAhPSB2MV9yZWYgfHwgdjIgIT0gdjJfcmVmKSB7CisgICAgICArK2ZhaWxlZDsKKyAgICB9CisgIH0KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGNtOjphcHBlbmQoVmVjdG9yLCBSYW5nZSkKKyAgeworICAgIHN0ZDo6dmVjdG9yPGludD4gdjF7IDEsIDIsIDMgfTsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYxX3JlZnsgMSwgMiwgMywgNCwgNSwgNiB9OworICAgIHN0ZDo6dmVjdG9yPGludD4gdjJ7IDQsIDUsIDYgfTsKKyAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYyX3JlZnsgNCwgNSwgNiB9OworCisgICAgY206OmFwcGVuZCh2MSwgdjIpOworCisgICAgaWYgKHYxICE9IHYxX3JlZiB8fCB2MiAhPSB2Ml9yZWYpIHsKKyAgICAgICsrZmFpbGVkOworICAgIH0KKyAgfQorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gY206OmFwcGVuZChWZWN0b3I8Kj4sIFZlY3Rvcjx1bmlxdWVfcHRyPikKKyAgeworICAgIHN0ZDo6dmVjdG9yPGludCo+IHYxeyBuZXcgaW50KDEpLCBuZXcgaW50KDIpLCBuZXcgaW50KDMpIH07CisgICAgc3RkOjp2ZWN0b3I8aW50Kj4gdjFfcmVmID0gdjE7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGludD4+IHYyOworCisgICAgdjIuZW1wbGFjZV9iYWNrKG5ldyBpbnQoNCkpOworICAgIHYyLmVtcGxhY2VfYmFjayhuZXcgaW50KDUpKTsKKyAgICB2Mi5lbXBsYWNlX2JhY2sobmV3IGludCg2KSk7CisKKyAgICBjbTo6YXBwZW5kKHYxLCB2Mik7CisKKyAgICBpZiAodjEuc2l6ZSgpID09IDYgJiYgdjIuc2l6ZSgpID09IDMpIHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgIGlmICh2MVtpXSAhPSB2MV9yZWZbaV0pIHsKKyAgICAgICAgICArK2ZhaWxlZDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgaWYgKHYxW2kgKyAzXSAhPSB2MltpXS5nZXQoKSkgeworICAgICAgICAgICsrZmFpbGVkOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICsrZmFpbGVkOworICAgIH0KKworICAgIC8vIGZyZWUgbWVtb3J5IHRvIHBsZWFzZSBtZW1vcnkgc2FuaXRpemVyCisgICAgZGVsZXRlIHYxWzBdOworICAgIGRlbGV0ZSB2MVsxXTsKKyAgICBkZWxldGUgdjFbMl07CisgIH0KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGNtOjphcHBlbmQoVmVjdG9yPHVuaXF1ZV9wdHI+LCBWZWN0b3I8dW5pcXVlX3B0cj4pCisgIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4gdjE7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGludD4+IHYyOworCisgICAgdjEuZW1wbGFjZV9iYWNrKG5ldyBpbnQoMSkpOworICAgIHYxLmVtcGxhY2VfYmFjayhuZXcgaW50KDIpKTsKKyAgICB2MS5lbXBsYWNlX2JhY2sobmV3IGludCgzKSk7CisKKyAgICB2Mi5lbXBsYWNlX2JhY2sobmV3IGludCg0KSk7CisgICAgdjIuZW1wbGFjZV9iYWNrKG5ldyBpbnQoNSkpOworICAgIHYyLmVtcGxhY2VfYmFjayhuZXcgaW50KDYpKTsKKworICAgIGNtOjphcHBlbmQodjEsIHN0ZDo6bW92ZSh2MikpOworCisgICAgaWYgKHYxLnNpemUoKSA9PSA2ICYmIHYyLmVtcHR5KCkpIHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7CisgICAgICAgIGlmICgqdjFbaV0gIT0gaSArIDEpIHsKKyAgICAgICAgICArK2ZhaWxlZDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICArK2ZhaWxlZDsKKyAgICB9CisgIH0KK30KK30KKworaW50IHRlc3RDTUV4dEFsZ29yaXRobShpbnQgLyp1bnVzZWQqLywgY2hhciogLyp1bnVzZWQqLyBbXSkKK3sKKyAgdGVzdEFwcGVuZCgpOworCisgIHJldHVybiBmYWlsZWQ7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0Q01FeHRNZW1vcnkuY3h4IGIvVGVzdHMvQ01ha2VMaWIvdGVzdENNRXh0TWVtb3J5LmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWVhZjdmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdENNRXh0TWVtb3J5LmN4eApAQCAtMCwwICsxLDY1IEBACisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8bWVtb3J5PgorCisjaW5jbHVkZSA8Y21leHQvbWVtb3J5PgorCituYW1lc3BhY2UgeworY2xhc3MgQmFzZQoreworcHVibGljOgorICB2aXJ0dWFsIH5CYXNlKCkgPSBkZWZhdWx0OworfTsKKworY2xhc3MgRGVyaXZlZCA6IHB1YmxpYyBCYXNlCit7CitwdWJsaWM6CisgIH5EZXJpdmVkKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OworCisgIHZvaWQgbWV0aG9kKCkge30KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV3JhcHBlcgoreworcHVibGljOgorICBXcmFwcGVyKFQqIHYpCisgICAgOiB2YWx1ZSh2KQorICB7CisgIH0KKyAgfldyYXBwZXIoKSB7IGRlbGV0ZSB2YWx1ZTsgfQorCisgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlOyB9CisKK3ByaXZhdGU6CisgIFQqIHZhbHVlOworfTsKKworYm9vbCB0ZXN0UmVmZXJlbmNlQ2FzdCgpCit7CisgIHN0ZDo6Y291dCA8PCAidGVzdFJlZmVyZW5jZUNhc3QoKSIgPDwgc3RkOjplbmRsOworCisgIHN0ZDo6dW5pcXVlX3B0cjxCYXNlPiB1KG5ldyBEZXJpdmVkKTsKKyAgY206OnN0YXRpY19yZWZlcmVuY2VfY2FzdDxEZXJpdmVkPih1KS5tZXRob2QoKTsKKyAgY206OmR5bmFtaWNfcmVmZXJlbmNlX2Nhc3Q8RGVyaXZlZD4odSkubWV0aG9kKCk7CisKKyAgc3RkOjpzaGFyZWRfcHRyPEJhc2U+IHMobmV3IERlcml2ZWQpOworICBjbTo6c3RhdGljX3JlZmVyZW5jZV9jYXN0PERlcml2ZWQ+KHMpLm1ldGhvZCgpOworICBjbTo6ZHluYW1pY19yZWZlcmVuY2VfY2FzdDxEZXJpdmVkPihzKS5tZXRob2QoKTsKKworICAvLyBjYW4gYWxzbyBiZSB1c2VkIHdpdGggY3VzdG9tIHdyYXBwZXJzCisgIFdyYXBwZXI8QmFzZT4gdyhuZXcgRGVyaXZlZCk7CisgIGNtOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RGVyaXZlZD4odykubWV0aG9kKCk7CisgIGNtOjpkeW5hbWljX3JlZmVyZW5jZV9jYXN0PERlcml2ZWQ+KHcpLm1ldGhvZCgpOworCisgIHJldHVybiB0cnVlOworfQorfQorCitpbnQgdGVzdENNRXh0TWVtb3J5KGludCAvKnVudXNlZCovLCBjaGFyKiAvKnVudXNlZCovIFtdKQoreworICBpZiAoIXRlc3RSZWZlcmVuY2VDYXN0KCkpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdENNRmlsZXN5c3RlbVBhdGguY3h4IGIvVGVzdHMvQ01ha2VMaWIvdGVzdENNRmlsZXN5c3RlbVBhdGguY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODQ1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0Q01GaWxlc3lzdGVtUGF0aC5jeHgKQEAgLTAsMCArMSwxMDA2IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8Y20vZmlsZXN5c3RlbT4KKyNpbmNsdWRlIDxjbS9pb21hbmlwPgorCituYW1lc3BhY2UgeworCituYW1lc3BhY2UgZnMgPSBjbTo6ZmlsZXN5c3RlbTsKKwordm9pZCBjaGVja1Jlc3VsdChib29sIHN1Y2Nlc3MpCit7CisgIGlmICghc3VjY2VzcykgeworICAgIHN0ZDo6Y291dCA8PCAiID0+IGZhaWxlZCI7CisgIH0KKyAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKK30KKworYm9vbCB0ZXN0Q29uc3RydWN0b3JzKCkKK3sKKyAgc3RkOjpjb3V0IDw8ICJ0ZXN0Q29uc3RydWN0b3JzKCkiOworCisgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKworICB7CisgICAgZnM6OnBhdGggcDsKKyAgICBpZiAocCAhPSBmczo6cGF0aCgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgeworICAgIGZzOjpwYXRoIHAxKCIvYS9iL2MiKTsKKyAgICBmczo6cGF0aCBwMigiL2EvYi9jIik7CisgICAgaWYgKHAxICE9IHAyKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHAxLnN0cmluZygpICE9IHAyLnN0cmluZygpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHAxLnN0cmluZygpICE9ICIvYS9iL2MiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgeworICAgIHN0ZDo6c3RyaW5nIHMoIi9hL2IvYyIpOworICAgIGZzOjpwYXRoIHAxKHMpOworICAgIGZzOjpwYXRoIHAyKHMuYmVnaW4oKSwgcy5lbmQoKSk7CisgICAgaWYgKHAxICE9IHAyKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHAxLnN0cmluZygpICE9IHMgfHwgcDIuc3RyaW5nKCkgIT0gcykgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2lmIENNX0ZJTEVTWVNURU1fU09VUkNFX1RSQUlUU19JVEVSQVRPUgorICAgIHN0ZDo6c3RyaW5nIHMyKHMpOworICAgIHMyICs9ICdcMCc7CisgICAgZnM6OnBhdGggcDMoczIuYmVnaW4oKSk7CisgICAgaWYgKHAxICE9IHAzIHx8IHAzLnN0cmluZygpICE9IHMpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIHsKKyAgICBzdGQ6OndzdHJpbmcgcyhMIi9hL2IvYyIpOworICAgIGZzOjpwYXRoIHAxKHMpOworICAgIGZzOjpwYXRoIHAyKHMuYmVnaW4oKSwgcy5lbmQoKSk7CisgICAgaWYgKHAxICE9IHAyKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHAxLndzdHJpbmcoKSAhPSBzIHx8IHAyLndzdHJpbmcoKSAhPSBzKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjaWYgQ01fRklMRVNZU1RFTV9TT1VSQ0VfVFJBSVRTX0lURVJBVE9SCisgICAgc3RkOjp3c3RyaW5nIHMyKHMpOworICAgIHMyICs9IEwnXDAnOworICAgIGZzOjpwYXRoIHAzKHMyLmJlZ2luKCkpOworICAgIGlmIChwMSAhPSBwMyB8fCBwMy53c3RyaW5nKCkgIT0gcykgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgIH0KKyAgeworICAgIHN0ZDo6c3RyaW5nIHMoIi9hL2IvYyIpOworICAgIGZzOjpwYXRoOjpzdHJpbmdfdHlwZSB3czsKKyAgICBmb3IgKGF1dG8gYyA6IHMpIHsKKyAgICAgIHdzICs9IGZzOjpwYXRoOjp2YWx1ZV90eXBlKGMpOworICAgIH0KKyAgICBmczo6cGF0aCBwMSh3cyk7CisgICAgZnM6OnBhdGggcDIod3MuYmVnaW4oKSwgd3MuZW5kKCkpOworICAgIGlmIChwMSAhPSBwMikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChwMS5uYXRpdmUoKSAhPSB3cyB8fCBwMi5uYXRpdmUoKSAhPSB3cykgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2lmIENNX0ZJTEVTWVNURU1fU09VUkNFX1RSQUlUU19JVEVSQVRPUgorICAgIGZzOjpwYXRoOjpzdHJpbmdfdHlwZSB3czIod3MpOworICAgIHdzMiArPSBmczo6cGF0aDo6dmFsdWVfdHlwZSgnXDAnKTsKKyAgICBmczo6cGF0aCBwMyh3czIuYmVnaW4oKSk7CisgICAgaWYgKHAxICE9IHAzIHx8IHAzLm5hdGl2ZSgpICE9IHdzKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgfQorCisgIGNoZWNrUmVzdWx0KHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCB0ZXN0Q29uY2F0ZW5hdGlvbigpCit7CisgIHN0ZDo6Y291dCA8PCAidGVzdENvbmNhdGVuYXRpb24oKSI7CisKKyAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgIHsKKyAgICBmczo6cGF0aCBwKCIvYS9iIik7CisgICAgcCAvPSAiYyI7CisgICAgaWYgKCEocC5zdHJpbmcoKSA9PSAiL2EvYi9jIiB8fCBwLnN0cmluZygpID09ICIvYS9iXFxjIikpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwICs9ICJkIjsKKyAgICBpZiAoIShwLnN0cmluZygpID09ICIvYS9iL2NkIiB8fCBwLnN0cmluZygpID09ICIvYS9iXFxjZCIpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgZnM6OnBhdGggcDIoIngveSIpOworICAgIHAgLz0gcDI7CisgICAgaWYgKCEocC5zdHJpbmcoKSA9PSAiL2EvYi9jZC94L3kiIHx8IHAuc3RyaW5nKCkgPT0gIi9hL2JcXGNkXFx4L3kiKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSBwIC8gcDI7CisgICAgaWYgKCEocC5zdHJpbmcoKSA9PSAiL2EvYi9jZC94L3kveC95IiB8fAorICAgICAgICAgIHAuc3RyaW5nKCkgPT0gIi9hL2JcXGNkXFx4L3lcXHgveSIpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgeworICAgIGZzOjpwYXRoIHAoImEiKTsKKyAgICBwIC89ICIiOworICAgIGlmICghKHAuc3RyaW5nKCkgPT0gImEvIiB8fCBwLnN0cmluZygpID09ICJhXFwiKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgLz0gIi9iIjsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSAiL2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgeworICAgIGZzOjpwYXRoIHAoImEiKTsKKyAgICBwIC89ICJjOi9iIjsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSAiYzovYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gZnM6OnBhdGgoImEiKSAvICJjOiI7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gImM6IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSBmczo6cGF0aCgiYzoiKSAvICIiOworICAgIGlmIChwLnN0cmluZygpICE9ICJjOiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gZnM6OnBhdGgoImM6YSIpIC8gIi9iIjsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSAiYzovYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gZnM6OnBhdGgoImM6YSIpIC8gImM6YiI7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gImM6YVxcYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gZnM6OnBhdGgoIi8vaG9zdCIpIC8gImIiOworICAgIGlmIChwLnN0cmluZygpICE9ICIvL2hvc3RcXGIiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9IGZzOjpwYXRoKCIvL2hvc3QvIikgLyAiYiI7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gIi8vaG9zdC9iIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisjZW5kaWYKKworICBjaGVja1Jlc3VsdChyZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgdGVzdE1vZGlmaWVycygpCit7CisgIHN0ZDo6Y291dCA8PCAidGVzdE1vZGlmaWVycygpIjsKKworICBib29sIHJlc3VsdCA9IHRydWU7CisKKyAgeworICAgIHN0ZDo6c3RyaW5nIHMoImEvLy9iLyIpOworICAgIGZzOjpwYXRoIHAocyk7CisgICAgc3RkOjpyZXBsYWNlKAorICAgICAgcy5iZWdpbigpLCBzLmVuZCgpLCAnLycsCisgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZzo6dmFsdWVfdHlwZT4oZnM6OnBhdGg6OnByZWZlcnJlZF9zZXBhcmF0b3IpKTsKKyAgICBwLm1ha2VfcHJlZmVycmVkKCk7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gcykgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICBmczo6cGF0aCBwKCJhL2IvYy5lLmYiKTsKKyAgICBwLnJlbW92ZV9maWxlbmFtZSgpOworICAgIGlmIChwLnN0cmluZygpICE9ICJhL2IvIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAucmVtb3ZlX2ZpbGVuYW1lKCk7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gImEvYi8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgeworICAgIGZzOjpwYXRoIHAoImEvYi9jLmUuZiIpOworICAgIHAucmVwbGFjZV9maWxlbmFtZSgieC55Iik7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gImEvYi94LnkiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgeworICAgIGZzOjpwYXRoIHAoImEvYi9jLmUuZiIpOworICAgIHAucmVwbGFjZV9leHRlbnNpb24oIi54Iik7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gImEvYi9jLmUueCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwLnJlcGxhY2VfZXh0ZW5zaW9uKCIueSIpOworICAgIGlmIChwLnN0cmluZygpICE9ICJhL2IvYy5lLnkiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcC5yZXBsYWNlX2V4dGVuc2lvbigpOworICAgIGlmIChwLnN0cmluZygpICE9ICJhL2IvYy5lIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSAiL2EvYiI7CisgICAgcC5yZXBsYWNlX2V4dGVuc2lvbigiLngiKTsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSAiL2EvYi54IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSAiL2EvYi8iOworICAgIHAucmVwbGFjZV9leHRlbnNpb24oIi54Iik7CisgICAgaWYgKHAuc3RyaW5nKCkgIT0gIi9hL2IvLngiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKworICBjaGVja1Jlc3VsdChyZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgdGVzdE9ic2VydmVycygpCit7CisgIHN0ZDo6Y291dCA8PCAidGVzdE9ic2VydmVycygpIjsKKworICBib29sIHJlc3VsdCA9IHRydWU7CisKKyAgeworICAgIHN0ZDo6c3RyaW5nIHMoImEvYi9jIik7CisgICAgZnM6OnBhdGggcChzKTsKKyAgICBmczo6cGF0aDo6c3RyaW5nX3R5cGUgc3Q7CisgICAgZm9yIChhdXRvIGMgOiBzKSB7CisgICAgICBzdCArPSBzdGF0aWNfY2FzdDxmczo6cGF0aDo6dmFsdWVfdHlwZT4oYyk7CisgICAgfQorICAgIGlmIChwLm5hdGl2ZSgpICE9IHN0IHx8IHN0YXRpY19jYXN0PGZzOjpwYXRoOjpzdHJpbmdfdHlwZT4ocCkgIT0gc3QgfHwKKyAgICAgICAgcC5jX3N0cigpICE9IHN0KSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgeworICAgIHN0ZDo6c3RyaW5nIHMoImEvL2IvL2MiKTsKKyAgICBzdGQ6OndzdHJpbmcgd3MoTCJhLy9iLy9jIik7CisgICAgZnM6OnBhdGggcChzKTsKKyAgICBpZiAocC5zdHJpbmcoKSAhPSBzIHx8IHAud3N0cmluZygpICE9IHdzKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgeworICAgIHN0ZDo6c3RyaW5nIHMoImEvYi9jIik7CisgICAgc3RkOjp3c3RyaW5nIHdzOworICAgIGZvciAoYXV0byBjIDogcykgeworICAgICAgd3MgKz0gc3RhdGljX2Nhc3Q8c3RkOjp3c3RyaW5nOjp2YWx1ZV90eXBlPihjKTsKKyAgICB9CisgICAgc3RkOjpzdHJpbmcgbnMocyk7CisgICAgc3RkOjpyZXBsYWNlKAorICAgICAgbnMuYmVnaW4oKSwgbnMuZW5kKCksICcvJywKKyAgICAgIHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nOjp2YWx1ZV90eXBlPihmczo6cGF0aDo6cHJlZmVycmVkX3NlcGFyYXRvcikpOworICAgIGZzOjpwYXRoIHAobnMpOworICAgIGlmIChwLmdlbmVyaWNfc3RyaW5nKCkgIT0gcyB8fCBwLmdlbmVyaWNfd3N0cmluZygpICE9IHdzKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKworICBjaGVja1Jlc3VsdChyZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgdGVzdENvbXBhcmUoKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3RDb21wYXJlKCkiOworCisgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKworICB7CisgICAgc3RkOjpzdHJpbmcgcygiYS9iL2MiKTsKKyAgICBmczo6cGF0aCBwMShzKTsKKyAgICBmczo6cGF0aCBwMihzKTsKKyAgICBpZiAocDEuY29tcGFyZShwMikgIT0gMCkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAyID0gImEvYiI7CisgICAgaWYgKHAxLmNvbXBhcmUocDIpIDw9IDApIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwMiA9ICJhL2QiOworICAgIGlmIChwMS5jb21wYXJlKHAyKSA+PSAwKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcDIgPSAiYS9iL2QiOworICAgIGlmIChwMS5jb21wYXJlKHAyKSA+PSAwKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcDIgPSAiYS9iL2EiOworICAgIGlmIChwMS5jb21wYXJlKHAyKSA8PSAwKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcDIgPSAiYS9iL2MvZCI7CisgICAgaWYgKHAxLmNvbXBhcmUocDIpID49IDApIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwMSA9ICJhIjsKKyAgICBwMiA9ICJiIjsKKyAgICBpZiAocDEuY29tcGFyZShwMikgPT0gMCkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICAvLyBMV0cgMzA5NiAoaHR0cHM6Ly9jcGx1c3BsdXMuZ2l0aHViLmlvL0xXRy9pc3N1ZTMwOTYpCisgICAgLy8gZnM6OnBhdGggcDEoIi9hLyIpOworICAgIC8vIGZzOjpwYXRoIHAyKCIvYS8uIik7CisgICAgLy8gaWYgKHAxLmNvbXBhcmUocDIpICE9IDApIHsKKyAgICAvLyAgIHJlc3VsdCA9IGZhbHNlOworICAgIC8vIH0KKyAgfQorCisgIGNoZWNrUmVzdWx0KHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCB0ZXN0R2VuZXJhdGlvbigpCit7CisgIHN0ZDo6Y291dCA8PCAidGVzdEdlbmVyYXRpb24oKSI7CisKKyAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgIHsKKyAgICBmczo6cGF0aCBwKCJhLy4vYi8uLiIpOworICAgIGlmIChwLmxleGljYWxseV9ub3JtYWwoKS5nZW5lcmljX3N0cmluZygpICE9ICJhLyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gImEvLi8vL2IvLi4vIjsKKyAgICBpZiAocC5sZXhpY2FsbHlfbm9ybWFsKCkuZ2VuZXJpY19zdHJpbmcoKSAhPSAiYS8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgeworICAgIGZzOjpwYXRoIHAoIi8vaG9zdC8uL2IvLi4iKTsKKyAgICBpZiAocC5sZXhpY2FsbHlfbm9ybWFsKCkuc3RyaW5nKCkgIT0gIlxcXFxob3N0XFwiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9ICIvL2hvc3QvLi8vL2IvLi4vIjsKKyAgICBpZiAocC5sZXhpY2FsbHlfbm9ybWFsKCkuc3RyaW5nKCkgIT0gIlxcXFxob3N0XFwiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgcCA9ICJjOi8vYS8uLy8vYi8uLi8iOworICAgIGlmIChwLmxleGljYWxseV9ub3JtYWwoKS5zdHJpbmcoKSAhPSAiYzpcXGFcXCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorI2VuZGlmCisKKyAgeworICAgIGlmIChmczo6cGF0aCgiL2EvL2QiKS5sZXhpY2FsbHlfcmVsYXRpdmUoIi9hL2IvYyIpICE9ICIuLi8uLi9kIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvL2IvLy9jIikubGV4aWNhbGx5X3JlbGF0aXZlKCIvYS9kIikgIT0gIi4uL2IvYyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImEvYi9jIikubGV4aWNhbGx5X3JlbGF0aXZlKCJhIikgIT0gImIvYyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImEvYi9jIikubGV4aWNhbGx5X3JlbGF0aXZlKCJhL2IvYy94L3kiKSAhPSAiLi4vLi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJhL2IvYyIpLmxleGljYWxseV9yZWxhdGl2ZSgiYS9iL2MiKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImEvYiIpLmxleGljYWxseV9yZWxhdGl2ZSgiYy9kIikgIT0gIi4uLy4uL2EvYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorICB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgaWYgKGZzOjpwYXRoKCIvYS9kIikubGV4aWNhbGx5X3JlbGF0aXZlKCJlL2QvYyIpICE9ICIvYS9kIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoImM6L2EvZCIpLmxleGljYWxseV9yZWxhdGl2ZSgiZS9kL2MiKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjZWxzZQorICAgIGlmICghZnM6OnBhdGgoIi9hL2QiKS5sZXhpY2FsbHlfcmVsYXRpdmUoImUvZC9jIikuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgIH0KKyAgeworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIGlmIChmczo6cGF0aCgiYzovYS9kIikubGV4aWNhbGx5X3Byb3hpbWF0ZSgiZS9kL2MiKSAhPSAiYzovYS9kIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZnM6OnBhdGgoIi9hL2QiKS5sZXhpY2FsbHlfcHJveGltYXRlKCJlL2QvYyIpICE9ICIvYS9kIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgICAgaWYgKGZzOjpwYXRoKCIvYS9kIikubGV4aWNhbGx5X3Byb3hpbWF0ZSgiL2EvYi9jIikgIT0gIi4uLy4uL2QiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgLy8gTFdHIDMwNzAKKyAgeworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIGlmICghZnM6OnBhdGgoIi9hOi9iOiIpLmxleGljYWxseV9yZWxhdGl2ZSgiL2E6L2M6IikuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYzovYS9iIikubGV4aWNhbGx5X3JlbGF0aXZlKCJjOi9hL2QiKSAhPSAiLi4vYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCJjOi9hL2I6IikubGV4aWNhbGx5X3JlbGF0aXZlKCJjOi9hL2QiKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiYzovYS9iIikubGV4aWNhbGx5X3JlbGF0aXZlKCJjOi9hL2Q6IikuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZnM6OnBhdGgoIi9hOi9iOiIpLmxleGljYWxseV9yZWxhdGl2ZSgiL2E6L2M6IikgIT0gIi4uL2I6IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgIH0KKyAgLy8gTFdHIDMwOTYKKyAgeworICAgIGlmIChmczo6cGF0aCgiL2EiKS5sZXhpY2FsbHlfcmVsYXRpdmUoIi9hLy4iKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hIikubGV4aWNhbGx5X3JlbGF0aXZlKCIvYS8iKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImEvYi9jIikubGV4aWNhbGx5X3JlbGF0aXZlKCJhL2IvYyIpICE9ICIuIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYS9iL2MiKS5sZXhpY2FsbHlfcmVsYXRpdmUoImEvYi9jLyIpICE9ICIuIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYS9iL2MiKS5sZXhpY2FsbHlfcmVsYXRpdmUoImEvYi9jLy4iKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImEvYi9jLyIpLmxleGljYWxseV9yZWxhdGl2ZSgiYS9iL2MiKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImEvYi9jLy4iKS5sZXhpY2FsbHlfcmVsYXRpdmUoImEvYi9jIikgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJhL2IvYy8uIikubGV4aWNhbGx5X3JlbGF0aXZlKCJhL2IvYy8iKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorCisgIGNoZWNrUmVzdWx0KHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCB0ZXN0RGVjb21wb3NpdGlvbigpCit7CisgIHN0ZDo6Y291dCA8PCAidGVzdERlY29tcG9zaXRpb24oKSI7CisKKyAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgIHsKKyAgICBpZiAoIWZzOjpwYXRoKCIvYS9iIikucm9vdF9uYW1lKCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIGlmIChmczo6cGF0aCgiYzovYS9iIikucm9vdF9uYW1lKCkgIT0gImM6IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYzphL2IiKS5yb290X25hbWUoKSAhPSAiYzoiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJjOiIpLnJvb3RfbmFtZSgpICE9ICJjOiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi8vaG9zdC9iIikucm9vdF9uYW1lKCkgIT0gIi8vaG9zdCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi8vaG9zdCIpLnJvb3RfbmFtZSgpICE9ICIvL2hvc3QiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgfQorICB7CisgICAgaWYgKCFmczo6cGF0aCgiYS9iIikucm9vdF9kaXJlY3RvcnkoKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iIikucm9vdF9kaXJlY3RvcnkoKSAhPSAiLyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBpZiAoIWZzOjpwYXRoKCJjOmEvYiIpLnJvb3RfZGlyZWN0b3J5KCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvYiIpLnJvb3RfZGlyZWN0b3J5KCkgIT0gIi8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJjOi9hL2IiKS5yb290X2RpcmVjdG9yeSgpICE9ICIvIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiLy9ob3N0L2IiKS5yb290X2RpcmVjdG9yeSgpICE9ICIvIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgIH0KKyAgeworICAgIGlmICghZnM6OnBhdGgoImEvYiIpLnJvb3RfcGF0aCgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IiKS5yb290X3BhdGgoKSAhPSAiLyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBpZiAoZnM6OnBhdGgoImM6YS9iIikucm9vdF9wYXRoKCkgIT0gImM6IikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvYiIpLnJvb3RfcGF0aCgpICE9ICIvIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYzovYS9iIikucm9vdF9wYXRoKCkgIT0gImM6LyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi8vaG9zdC9iIikucm9vdF9wYXRoKCkgIT0gIi8vaG9zdC8iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgfQorICB7CisgICAgaWYgKCFmczo6cGF0aCgiLyIpLnJlbGF0aXZlX3BhdGgoKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJhL2IiKS5yZWxhdGl2ZV9wYXRoKCkgIT0gImEvYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IiKS5yZWxhdGl2ZV9wYXRoKCkgIT0gImEvYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBpZiAoZnM6OnBhdGgoImM6YS9iIikucmVsYXRpdmVfcGF0aCgpICE9ICJhL2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS9iIikucmVsYXRpdmVfcGF0aCgpICE9ICJhL2IiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCJjOi9hL2IiKS5yZWxhdGl2ZV9wYXRoKCkgIT0gImEvYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi8vaG9zdC9iIikucmVsYXRpdmVfcGF0aCgpICE9ICJiIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgIH0KKyAgeworICAgIGlmIChmczo6cGF0aCgiL2EvYiIpLnBhcmVudF9wYXRoKCkgIT0gIi9hIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvYi8iKS5wYXJlbnRfcGF0aCgpICE9ICIvYS9iIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvYi8uIikucGFyZW50X3BhdGgoKSAhPSAiL2EvYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi8iKS5wYXJlbnRfcGF0aCgpICE9ICIvIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIGlmIChmczo6cGF0aCgiYzovYS9iIikucGFyZW50X3BhdGgoKSAhPSAiYzovYSIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImM6LyIpLnBhcmVudF9wYXRoKCkgIT0gImM6LyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoImM6IikucGFyZW50X3BhdGgoKSAhPSAiYzoiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvL2hvc3QvIikucGFyZW50X3BhdGgoKSAhPSAiLy9ob3N0LyIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi8vaG9zdCIpLnBhcmVudF9wYXRoKCkgIT0gIi8vaG9zdCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIHsKKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IudHh0IikuZmlsZW5hbWUoKSAhPSAiYi50eHQiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZzOjpwYXRoKCIvYS8uYiIpLmZpbGVuYW1lKCkgIT0gIi5iIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2Zvby9iYXIvIikuZmlsZW5hbWUoKSAhPSAiIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2Zvby8uIikuZmlsZW5hbWUoKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9mb28vLi4iKS5maWxlbmFtZSgpICE9ICIuLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi4iKS5maWxlbmFtZSgpICE9ICIuIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiLi4iKS5maWxlbmFtZSgpICE9ICIuLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvIikuZmlsZW5hbWUoKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgaWYgKGZzOjpwYXRoKCJjOmEiKS5maWxlbmFtZSgpICE9ICJhIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiYzovYSIpLmZpbGVuYW1lKCkgIT0gImEiKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiYzoiKS5maWxlbmFtZSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCJjOi8iKS5maWxlbmFtZSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvL2hvc3QiKS5maWxlbmFtZSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIHsKKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IudHh0Iikuc3RlbSgpICE9ICJiIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvYi5jLnR4dCIpLnN0ZW0oKSAhPSAiYi5jIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvLmIiKS5zdGVtKCkgIT0gIi5iIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvYiIpLnN0ZW0oKSAhPSAiYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IvLiIpLnN0ZW0oKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IvLi4iKS5zdGVtKCkgIT0gIi4uIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hL2IvIikuc3RlbSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBpZiAoIWZzOjpwYXRoKCJjOi9hL2IvIikuc3RlbSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCJjOi8iKS5zdGVtKCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoImM6Iikuc3RlbSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvL2hvc3QvIikuc3RlbSgpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvL2hvc3QiKS5zdGVtKCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgIH0KKyAgeworICAgIGlmIChmczo6cGF0aCgiL2EvYi50eHQiKS5leHRlbnNpb24oKSAhPSAiLnR4dCIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IuIikuZXh0ZW5zaW9uKCkgIT0gIi4iKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiL2EvYiIpLmV4dGVuc2lvbigpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IudHh0L2IuY2MiKS5leHRlbnNpb24oKSAhPSAiLmNjIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmczo6cGF0aCgiL2EvYi50eHQvYi4iKS5leHRlbnNpb24oKSAhPSAiLiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvYS9iLnR4dC9iIikuZXh0ZW5zaW9uKCkuZW1wdHkoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hLy4iKS5leHRlbnNpb24oKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiL2EvLi4iKS5leHRlbnNpb24oKS5lbXB0eSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiL2EvLmhpZGRlbiIpLmV4dGVuc2lvbigpLmVtcHR5KCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnM6OnBhdGgoIi9hLy4uYiIpLmV4dGVuc2lvbigpICE9ICIuYiIpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorCisgIGNoZWNrUmVzdWx0KHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCB0ZXN0UXVlcmllcygpCit7CisgIHN0ZDo6Y291dCA8PCAidGVzdFF1ZXJpZXMoKSI7CisKKyAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgIHsKKyAgICBpZiAoZnM6OnBhdGgoIi9hL2IiKS5oYXNfcm9vdF9uYW1lKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBmczo6cGF0aCBwKCIvYS9iIik7CisgICAgaWYgKCFwLmhhc19yb290X2RpcmVjdG9yeSgpIHx8ICFwLmhhc19yb290X3BhdGgoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hL2IiKS5oYXNfcm9vdF9wYXRoKCkgfHwgZnM6OnBhdGgoImEvYiIpLmhhc19yb290X3BhdGgoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hL2IiKS5oYXNfcmVsYXRpdmVfcGF0aCgpIHx8CisgICAgICAgIGZzOjpwYXRoKCIvIikuaGFzX3JlbGF0aXZlX3BhdGgoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hL2IiKS5oYXNfcGFyZW50X3BhdGgoKSB8fAorICAgICAgICAhZnM6OnBhdGgoIi8iKS5oYXNfcGFyZW50X3BhdGgoKSB8fCBmczo6cGF0aCgiYSIpLmhhc19wYXJlbnRfcGF0aCgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiL2EvYiIpLmhhc19maWxlbmFtZSgpIHx8ICFmczo6cGF0aCgiYS5iIikuaGFzX2ZpbGVuYW1lKCkgfHwKKyAgICAgICAgZnM6OnBhdGgoIi9hLyIpLmhhc19maWxlbmFtZSgpIHx8IGZzOjpwYXRoKCIvIikuaGFzX2ZpbGVuYW1lKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZzOjpwYXRoKCIvYS9iIikuaGFzX3N0ZW0oKSB8fCAhZnM6OnBhdGgoImEuYiIpLmhhc19zdGVtKCkgfHwKKyAgICAgICAgIWZzOjpwYXRoKCIvLmEiKS5oYXNfc3RlbSgpIHx8IGZzOjpwYXRoKCIvYS8iKS5oYXNfc3RlbSgpIHx8CisgICAgICAgIGZzOjpwYXRoKCIvIikuaGFzX3N0ZW0oKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoIi9hL2IuYyIpLmhhc19leHRlbnNpb24oKSB8fAorICAgICAgICAhZnM6OnBhdGgoImEuYiIpLmhhc19leHRlbnNpb24oKSB8fCBmczo6cGF0aCgiLy5hIikuaGFzX2V4dGVuc2lvbigpIHx8CisgICAgICAgIGZzOjpwYXRoKCIvYS8iKS5oYXNfZXh0ZW5zaW9uKCkgfHwgZnM6OnBhdGgoIi8iKS5oYXNfZXh0ZW5zaW9uKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBwID0gImM6L2EvYiI7CisgICAgaWYgKCFmczo6cGF0aCgiYzovYS9iIikuaGFzX3Jvb3RfbmFtZSgpIHx8ICFwLmhhc19yb290X2RpcmVjdG9yeSgpIHx8CisgICAgICAgICFwLmhhc19yb290X3BhdGgoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSAiYzphL2IiOworICAgIGlmICghcC5oYXNfcm9vdF9uYW1lKCkgfHwgcC5oYXNfcm9vdF9kaXJlY3RvcnkoKSB8fCAhcC5oYXNfcm9vdF9wYXRoKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gIi8vaG9zdC9iIjsKKyAgICBpZiAoIXAuaGFzX3Jvb3RfbmFtZSgpIHx8ICFwLmhhc19yb290X2RpcmVjdG9yeSgpIHx8ICFwLmhhc19yb290X3BhdGgoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSAiLy9ob3N0IjsKKyAgICBpZiAoIXAuaGFzX3Jvb3RfbmFtZSgpIHx8IHAuaGFzX3Jvb3RfZGlyZWN0b3J5KCkgfHwgIXAuaGFzX3Jvb3RfcGF0aCgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmczo6cGF0aCgiYzovYS9iIikuaGFzX3JlbGF0aXZlX3BhdGgoKSB8fAorICAgICAgICAhZnM6OnBhdGgoImM6YS9iIikuaGFzX3JlbGF0aXZlX3BhdGgoKSB8fAorICAgICAgICAhZnM6OnBhdGgoIi8vaG9zdC9iIikuaGFzX3JlbGF0aXZlX3BhdGgoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnM6OnBhdGgoImM6L2EvYiIpLmhhc19wYXJlbnRfcGF0aCgpIHx8CisgICAgICAgICFmczo6cGF0aCgiYzovIikuaGFzX3BhcmVudF9wYXRoKCkgfHwKKyAgICAgICAgIWZzOjpwYXRoKCJjOiIpLmhhc19wYXJlbnRfcGF0aCgpIHx8CisgICAgICAgICFmczo6cGF0aCgiLy9ob3N0LyIpLmhhc19wYXJlbnRfcGF0aCgpIHx8CisgICAgICAgICFmczo6cGF0aCgiLy9ob3N0IikuaGFzX3BhcmVudF9wYXRoKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisgIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBmczo6cGF0aCBwKCJjOi9hIik7CisjZWxzZQorICAgIGZzOjpwYXRoIHAoIi9hIik7CisjZW5kaWYKKyAgICBpZiAoIXAuaXNfYWJzb2x1dGUoKSB8fCBwLmlzX3JlbGF0aXZlKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBwID0gImEvYiI7CisgICAgaWYgKHAuaXNfYWJzb2x1dGUoKSB8fCAhcC5pc19yZWxhdGl2ZSgpKSB7CisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgcCA9ICJjOi9hL2IiOworICAgIGlmICghcC5pc19hYnNvbHV0ZSgpIHx8IHAuaXNfcmVsYXRpdmUoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSAiLy9ob3N0L2IiOworICAgIGlmICghcC5pc19hYnNvbHV0ZSgpIHx8IHAuaXNfcmVsYXRpdmUoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSAiL2EiOworICAgIGlmIChwLmlzX2Fic29sdXRlKCkgfHwgIXAuaXNfcmVsYXRpdmUoKSkgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHAgPSAiYzphIjsKKyAgICBpZiAocC5pc19hYnNvbHV0ZSgpIHx8ICFwLmlzX3JlbGF0aXZlKCkpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICB9CisKKyAgY2hlY2tSZXN1bHQocmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitib29sIHRlc3RJdGVyYXRvcnMoKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3RJdGVyYXRvcnMoKSI7CisKKyAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgIHsKKyAgICBmczo6cGF0aCBwKCIvYS9iLyIpOworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIHN0ZDo6dmVjdG9yPGZzOjpwYXRoOjpzdHJpbmdfdHlwZT4gcmVmeyBMIi8iLCBMImEiLCBMImIiLCBMIiIgfTsKKyNlbHNlCisgICAgc3RkOjp2ZWN0b3I8ZnM6OnBhdGg6OnN0cmluZ190eXBlPiByZWZ7ICIvIiwgImEiLCAiYiIsICIiIH07CisjZW5kaWYKKyAgICBzdGQ6OnZlY3Rvcjxmczo6cGF0aDo6c3RyaW5nX3R5cGU+IHJlczsKKyAgICBmb3IgKGF1dG8gaSA9IHAuYmVnaW4oKSwgZSA9IHAuZW5kKCk7IGkgIT0gZTsgKytpKSB7CisgICAgICByZXMucHVzaF9iYWNrKCppKTsKKyAgICB9CisgICAgaWYgKHJlcyAhPSByZWYpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICByZXMuY2xlYXIoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGUgOiBwKSB7CisgICAgICByZXMucHVzaF9iYWNrKGUpOworICAgIH0KKyAgICBpZiAocmVzICE9IHJlZikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisgIHsKKyAgICBmczo6cGF0aCBwKCIvYS9iLyIpOworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIHN0ZDo6dmVjdG9yPGZzOjpwYXRoOjpzdHJpbmdfdHlwZT4gcmVmeyBMIiIsIEwiYiIsIEwiYSIsIEwiLyIgfTsKKyNlbHNlCisgICAgc3RkOjp2ZWN0b3I8ZnM6OnBhdGg6OnN0cmluZ190eXBlPiByZWZ7ICIiLCAiYiIsICJhIiwgIi8iIH07CisjZW5kaWYKKyAgICBzdGQ6OnZlY3Rvcjxmczo6cGF0aDo6c3RyaW5nX3R5cGU+IHJlczsKKyAgICBhdXRvIGkgPSBwLmVuZCgpLCBiID0gcC5iZWdpbigpOworICAgIGRvIHsKKyAgICAgIHJlcy5wdXNoX2JhY2soKi0taSk7CisgICAgfSB3aGlsZSAoaSAhPSBiKTsKKyAgICBpZiAocmVzICE9IHJlZikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICB9CisKKyAgY2hlY2tSZXN1bHQocmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitib29sIHRlc3ROb25NZW1iZXJGdW5jdGlvbnMoKQoreworICBzdGQ6OmNvdXQgPDwgInRlc3ROb25NZW1iZXJGdW5jdGlvbnMoKSI7CisKKyAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgIHsKKyAgICBmczo6cGF0aCBwMSgiL2EvYi8iKTsKKyAgICBmczo6cGF0aCBwMigiL2MvZCIpOworICAgIGZzOjpzd2FwKHAxLCBwMik7CisgICAgaWYgKHAxLnN0cmluZygpICE9ICIvYy9kIiB8fCBwMi5zdHJpbmcoKSAhPSAiL2EvYi8iKQorICAgICAgcmVzdWx0ID0gZmFsc2U7CisgIH0KKyAgeworICAgIGF1dG8gaDEgPSBmczo6aGFzaF92YWx1ZShmczo6cGF0aCgiL2EvL2IvLyIpKTsKKyAgICBhdXRvIGgyID0gZnM6Omhhc2hfdmFsdWUoZnM6OnBhdGgoIi9hL2IvIikpOworICAgIGlmIChoMSAhPSBoMikKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICB9CisgIHsKKyAgICBmczo6cGF0aCBwMSgiL2EvYi8iKTsKKyAgICBmczo6cGF0aCBwMigiL2MvZCIpOworICAgIGlmIChwMSA9PSBwMikKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIHAxID0gIi9hLy9iLy8iOworICAgIHAyID0gIi9hL2IvIjsKKyAgICBpZiAocDEgIT0gcDIpCisgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgfQorICB7CisgICAgZnM6OnBhdGggcCA9ICIvYSI7CisgICAgcCA9IHAgLyAiYiIgLyAiYyI7CisgICAgaWYgKHAuZ2VuZXJpY19zdHJpbmcoKSAhPSAiL2EvYi9jIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGZzOjpwYXRoOjpzdHJpbmdfdHlwZSByZWY7CisgICAgcmVmICs9IGZzOjpwYXRoOjp2YWx1ZV90eXBlKCcvJyk7CisgICAgcmVmICs9IGZzOjpwYXRoOjp2YWx1ZV90eXBlKCdhJyk7CisgICAgcmVmICs9IGZzOjpwYXRoOjpwcmVmZXJyZWRfc2VwYXJhdG9yOworICAgIHJlZiArPSBmczo6cGF0aDo6dmFsdWVfdHlwZSgnYicpOworICAgIHJlZiArPSBmczo6cGF0aDo6cHJlZmVycmVkX3NlcGFyYXRvcjsKKyAgICByZWYgKz0gZnM6OnBhdGg6OnZhbHVlX3R5cGUoJ2MnKTsKKyAgICBpZiAocC5uYXRpdmUoKSAhPSByZWYpIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorICB7CisgICAgZnM6OnBhdGggcCgiL2EgYlxcYy8iKTsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3NzOworICAgIG9zcyA8PCBwOworICAgIGlmIChvc3Muc3RyKCkgIT0gIlwiL2EgYlxcXFxjL1wiIikgeworICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIHN0ZDo6aXN0cmluZ3N0cmVhbSBpc3Mob3NzLnN0cigpKTsKKyAgICBmczo6cGF0aCBwMjsKKyAgICBpc3MgPj4gcDI7CisgICAgaWYgKHAyICE9IHApIHsKKyAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgfQorCisgIGNoZWNrUmVzdWx0KHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KK30KKworaW50IHRlc3RDTUZpbGVzeXN0ZW1QYXRoKGludCAvKnVudXNlZCovLCBjaGFyKiAvKnVudXNlZCovIFtdKQoreworICBpbnQgcmVzdWx0ID0gMDsKKworICBpZiAoIXRlc3RDb25zdHJ1Y3RvcnMoKSkgeworICAgIHJlc3VsdCA9IDE7CisgIH0KKyAgaWYgKCF0ZXN0Q29uY2F0ZW5hdGlvbigpKSB7CisgICAgcmVzdWx0ID0gMTsKKyAgfQorICBpZiAoIXRlc3RNb2RpZmllcnMoKSkgeworICAgIHJlc3VsdCA9IDE7CisgIH0KKyAgaWYgKCF0ZXN0T2JzZXJ2ZXJzKCkpIHsKKyAgICByZXN1bHQgPSAxOworICB9CisgIGlmICghdGVzdENvbXBhcmUoKSkgeworICAgIHJlc3VsdCA9IDE7CisgIH0KKyAgaWYgKCF0ZXN0R2VuZXJhdGlvbigpKSB7CisgICAgcmVzdWx0ID0gMTsKKyAgfQorICBpZiAoIXRlc3REZWNvbXBvc2l0aW9uKCkpIHsKKyAgICByZXN1bHQgPSAxOworICB9CisgIGlmICghdGVzdFF1ZXJpZXMoKSkgeworICAgIHJlc3VsdCA9IDE7CisgIH0KKyAgaWYgKCF0ZXN0SXRlcmF0b3JzKCkpIHsKKyAgICByZXN1bHQgPSAxOworICB9CisgIGlmICghdGVzdE5vbk1lbWJlckZ1bmN0aW9ucygpKSB7CisgICAgcmVzdWx0ID0gMTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0Q1Rlc3RCaW5QYWNrZXIuY3h4IGIvVGVzdHMvQ01ha2VMaWIvdGVzdENUZXN0QmluUGFja2VyLmN4eAppbmRleCA2ZjA5YWYyLi5hYmRiZWZiIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZUxpYi90ZXN0Q1Rlc3RCaW5QYWNrZXIuY3h4CisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RDVGVzdEJpblBhY2tlci5jeHgKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBJV1lVIHByYWdtYToga2VlcAogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlci5jeHggYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlci5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5ZjA0NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyLmN4eApAQCAtMCwwICsxLDEzMSBAQAorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImNtc3lzL0ZTdHJlYW0uaHh4IgorCisjaW5jbHVkZSAiY21HY2NEZXBmaWxlUmVhZGVyLmgiCisjaW5jbHVkZSAiY21HY2NEZXBmaWxlUmVhZGVyVHlwZXMuaCIgLy8gZm9yIGNtR2NjRGVwZmlsZUNvbnRlbnQsIGNtR2NjU3R5bGUuLi4KKyNpbmNsdWRlICJjbVN5c3RlbVRvb2xzLmgiCisKK25hbWVzcGFjZSB7CisKK2NtR2NjRGVwZmlsZUNvbnRlbnQgcmVhZFBsYWluRGVwZmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCkKK3sKKyAgY21HY2NEZXBmaWxlQ29udGVudCByZXN1bHQ7CisgIGNtc3lzOjppZnN0cmVhbSBpcyhmaWxlUGF0aCk7CisgIGlmICghaXMuaXNfb3BlbigpKQorICAgIHJldHVybiByZXN1bHQ7CisgIHN0ZDo6c3RyaW5nIGxpbmU7CisKKyAgY21HY2NTdHlsZURlcGVuZGVuY3kgZGVwOworICBib29sIHJlYWRpbmdSdWxlcyA9IHRydWU7CisgIHdoaWxlIChjbVN5c3RlbVRvb2xzOjpHZXRMaW5lRnJvbVN0cmVhbShpcywgbGluZSkpIHsKKyAgICBpZiAobGluZSA9PSAiLS1SVUxFUy0tIikgeworICAgICAgaWYgKCFkZXAucnVsZXMuZW1wdHkoKSkgeworICAgICAgICByZXN1bHQucHVzaF9iYWNrKHN0ZDo6bW92ZShkZXApKTsKKyAgICAgICAgZGVwID0gY21HY2NTdHlsZURlcGVuZGVuY3koKTsKKyAgICAgIH0KKyAgICAgIHJlYWRpbmdSdWxlcyA9IHRydWU7CisgICAgfSBlbHNlIGlmIChsaW5lID09ICItLURFUEVOREVOQ0lFUy0tIikgeworICAgICAgcmVhZGluZ1J1bGVzID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZHN0ID0gcmVhZGluZ1J1bGVzID8gZGVwLnJ1bGVzIDogZGVwLnBhdGhzOworICAgICAgZHN0LnB1c2hfYmFjayhzdGQ6Om1vdmUobGluZSkpOworICAgICAgbGluZSA9IHN0ZDo6c3RyaW5nKCk7CisgICAgfQorICB9CisKKyAgaWYgKCFkZXAucnVsZXMuZW1wdHkoKSkgeworICAgIHJlc3VsdC5wdXNoX2JhY2soc3RkOjptb3ZlKGRlcCkpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBjb21wYXJlKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgYWN0dWFsLAorICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZXhwZWN0ZWQsIGNvbnN0IGNoYXIqIG1zZykKK3sKKyAgaWYgKGFjdHVhbC5zaXplKCkgIT0gZXhwZWN0ZWQuc2l6ZSgpKSB7CisgICAgc3RkOjpjZXJyIDw8IG1zZyA8PCAiZXhwZWN0ZWQgIiA8PCBleHBlY3RlZC5zaXplKCkgPDwgIiBlbnRyaWVzLiIKKyAgICAgICAgICAgICAgPDwgc3RkOjplbmRsCisgICAgICAgICAgICAgIDw8ICJBY3R1YWwgbnVtYmVyIG9mIGVudHJpZXM6ICIgPDwgYWN0dWFsLnNpemUoKSA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBhY3R1YWwuc2l6ZSgpOyArK2kpIHsKKyAgICBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKSB7CisgICAgICBzdGQ6OmNlcnIgPDwgbXNnIDw8IHN0ZDo6ZW5kbAorICAgICAgICAgICAgICAgIDw8ICJleHBlY3RlZDogIiA8PCBleHBlY3RlZFtpXSA8PCBzdGQ6OmVuZGwKKyAgICAgICAgICAgICAgICA8PCAiYWN0dWFsOiAiIDw8IGFjdHVhbFtpXSA8PCBzdGQ6OmVuZGw7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisgIHJldHVybiB0cnVlOworfQorCitib29sIGNvbXBhcmUoY29uc3QgY21HY2NEZXBmaWxlQ29udGVudCYgYWN0dWFsLAorICAgICAgICAgICAgIGNvbnN0IGNtR2NjRGVwZmlsZUNvbnRlbnQmIGV4cGVjdGVkKQoreworICBpZiAoYWN0dWFsLnNpemUoKSAhPSBleHBlY3RlZC5zaXplKCkpIHsKKyAgICBzdGQ6OmNlcnIgPDwgIkV4cGVjdGVkICIgPDwgZXhwZWN0ZWQuc2l6ZSgpIDw8ICIgZW50cmllcy4iIDw8IHN0ZDo6ZW5kbAorICAgICAgICAgICAgICA8PCAiQWN0dWFsIG51bWJlciBvZiBlbnRyaWVzOiAiIDw8IGFjdHVhbC5zaXplKCkgPDwgc3RkOjplbmRsOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgYWN0dWFsLnNpemUoKTsgKytpKSB7CisgICAgaWYgKCFjb21wYXJlKGFjdHVhbFtpXS5ydWxlcywgZXhwZWN0ZWRbaV0ucnVsZXMsICJSdWxlcyBkaWZmZXI6ICIpIHx8CisgICAgICAgICFjb21wYXJlKGFjdHVhbFtpXS5wYXRocywgZXhwZWN0ZWRbaV0ucGF0aHMsICJQYXRocyBkaWZmZXI6ICIpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisgIHJldHVybiB0cnVlOworfQorCit2b2lkIGR1bXAoY29uc3QgY2hhciogbGFiZWwsIGNvbnN0IGNtR2NjRGVwZmlsZUNvbnRlbnQmIGRmYykKK3sKKyAgc3RkOjpjZXJyIDw8IGxhYmVsIDw8IHN0ZDo6ZW5kbDsKKyAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGRmYykgeworICAgIGF1dG8gcml0ID0gZW50cnkucnVsZXMuY2JlZ2luKCk7CisgICAgaWYgKHJpdCAhPSBlbnRyeS5ydWxlcy5jZW5kKCkpIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAqcml0OworICAgICAgZm9yICgrK3JpdDsgcml0ICE9IGVudHJ5LnJ1bGVzLmNlbmQoKTsgKytyaXQpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgICIgPDwgKnJpdDsKKyAgICAgIH0KKyAgICAgIHN0ZDo6Y2VyciA8PCAiOiAiIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogZW50cnkucGF0aHMpIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwgcGF0aCA8PCBzdGQ6OmVuZGw7CisgICAgfQorICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitpbnQgdGVzdEdjY0RlcGZpbGVSZWFkZXIoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgaWYgKGFyZ2MgPCAyKSB7CisgICAgc3RkOjpjb3V0IDw8ICJJbnZhbGlkIGFyZ3VtZW50cy5cbiI7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgc3RkOjpzdHJpbmcgZGF0YURpclBhdGggPSBhcmd2WzFdOworICBkYXRhRGlyUGF0aCArPSAiL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEiOworICBjb25zdCBpbnQgbnVtYmVyT2ZUZXN0RmlsZXMgPSAzOworICBmb3IgKGludCBpID0gMTsgaSA8PSBudW1iZXJPZlRlc3RGaWxlczsgKytpKSB7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgYmFzZSA9IGRhdGFEaXJQYXRoICsgIi9kZXBzIiArIHN0ZDo6dG9fc3RyaW5nKGkpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGRlcGZpbGUgPSBiYXNlICsgIi5kIjsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBwbGFpbkRlcGZpbGUgPSBiYXNlICsgIi50eHQiOworICAgIHN0ZDo6Y291dCA8PCAiQ29tcGFyaW5nICIgPDwgYmFzZSA8PCAiIHdpdGggIiA8PCBwbGFpbkRlcGZpbGUgPDwgc3RkOjplbmRsOworICAgIGNvbnN0IGF1dG8gYWN0dWFsID0gY21SZWFkR2NjRGVwZmlsZShkZXBmaWxlLmNfc3RyKCkpOworICAgIGNvbnN0IGF1dG8gZXhwZWN0ZWQgPSByZWFkUGxhaW5EZXBmaWxlKHBsYWluRGVwZmlsZS5jX3N0cigpKTsKKyAgICBpZiAoIWNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkpIHsKKyAgICAgIGR1bXAoImFjdHVhbCIsIGFjdHVhbCk7CisgICAgICBkdW1wKCJleHBlY3RlZCIsIGV4cGVjdGVkKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMS5kIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMzQ4NjMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMxLmQKQEAgLTAsMCArMSwyMCBAQAorbWFpbi5vOiBtYWluLmNwcCAvdXNyL2luY2x1ZGUvc3RkYy1wcmVkZWYuaCAvdXNyL2luY2x1ZGUvc3RkaW8uaCBcCisgL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy9saWJjLWhlYWRlci1zdGFydC5oIFwKKyAvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9zeXMvY2RlZnMuaCBcCisgL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy93b3Jkc2l6ZS5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL2xvbmctZG91YmxlLmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2dudS9zdHVicy5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9nbnUvc3R1YnMtNjQuaCBcCisgL3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvOC9pbmNsdWRlL3N0ZGRlZi5oIFwKKyAvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS84L2luY2x1ZGUvc3RkYXJnLmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMuaCBcCisgL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlc2l6ZXMuaCBcCisgL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlcy9fX2Zwb3NfdC5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL19fbWJzdGF0ZV90LmggXAorIC91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvX19mcG9zNjRfdC5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL19fRklMRS5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL0ZJTEUuaCBcCisgL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlcy9zdHJ1Y3RfRklMRS5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL2Nvb2tpZV9pb19mdW5jdGlvbnNfdC5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3N0ZGlvX2xpbS5oIFwKKyAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3N5c19lcnJsaXN0LmgKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczEudHh0IGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyNjc5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczEudHh0CkBAIC0wLDAgKzEsMjYgQEAKKy0tUlVMRVMtLQorbWFpbi5vCistLURFUEVOREVOQ0lFUy0tCittYWluLmNwcAorL3Vzci9pbmNsdWRlL3N0ZGMtcHJlZGVmLmgKKy91c3IvaW5jbHVkZS9zdGRpby5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL2xpYmMtaGVhZGVyLXN0YXJ0LmgKKy91c3IvaW5jbHVkZS9mZWF0dXJlcy5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9zeXMvY2RlZnMuaAorL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy93b3Jkc2l6ZS5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL2xvbmctZG91YmxlLmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2dudS9zdHVicy5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9nbnUvc3R1YnMtNjQuaAorL3Vzci9saWIvZ2NjL3g4Nl82NC1saW51eC1nbnUvOC9pbmNsdWRlL3N0ZGRlZi5oCisvdXNyL2xpYi9nY2MveDg2XzY0LWxpbnV4LWdudS84L2luY2x1ZGUvc3RkYXJnLmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMuaAorL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlc2l6ZXMuaAorL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlcy9fX2Zwb3NfdC5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL19fbWJzdGF0ZV90LmgKKy91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251L2JpdHMvdHlwZXMvX19mcG9zNjRfdC5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL19fRklMRS5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL0ZJTEUuaAorL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlcy9zdHJ1Y3RfRklMRS5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3R5cGVzL2Nvb2tpZV9pb19mdW5jdGlvbnNfdC5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3N0ZGlvX2xpbS5oCisvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzL3N5c19lcnJsaXN0LmgKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczIuZCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczIuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWYwZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMi5kCkBAIC0wLDAgKzEgQEAKK2Zvby5vIGJhci5vOiBmb29iYXIuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMi50eHQgYi9UZXN0cy9DTWFrZUxpYi90ZXN0R2NjRGVwZmlsZVJlYWRlcl9kYXRhL2RlcHMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmFmNzhlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMi50eHQKQEAgLTAsMCArMSw1IEBACistLVJVTEVTLS0KK2Zvby5vCitiYXIubworLS1ERVBFTkRFTkNJRVMtLQorZm9vYmFyLmMKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczMuZCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczMuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzVjZWVkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMy5kCkBAIC0wLDAgKzEsMiBAQAorbWFpbi5vOiBtYWluLmNwcCBmb29cI2Jhci5oIGZvb1xcI2Jhci5oIGZvb1wgYmFyLmggXAorIGZvb1xcXCBiYXIuaCBmb29cXFxcXCBiYXIuaCBmb29cXFxcIGZvbyQkYmFyLmgKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczMudHh0IGIvVGVzdHMvQ01ha2VMaWIvdGVzdEdjY0RlcGZpbGVSZWFkZXJfZGF0YS9kZXBzMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4ZjY5YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RHY2NEZXBmaWxlUmVhZGVyX2RhdGEvZGVwczMudHh0CkBAIC0wLDAgKzEsMTEgQEAKKy0tUlVMRVMtLQorbWFpbi5vCistLURFUEVOREVOQ0lFUy0tCittYWluLmNwcAorZm9vI2Jhci5oCitmb29cI2Jhci5oCitmb28gYmFyLmgKK2Zvb1wgYmFyLmgKK2Zvb1xcIGJhci5oCitmb29cXFxcCitmb28kYmFyLmgKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RSU1QuZXhwZWN0IGIvVGVzdHMvQ01ha2VMaWIvdGVzdFJTVC5leHBlY3QKaW5kZXggYzE5ZWU5NC4uOTcwYWRhYSAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvdGVzdFJTVC5leHBlY3QKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdFJTVC5leHBlY3QKQEAgLTUsNyArNSw3IEBACiBDb21tYW5kIGBgc29tZV9jbWQoKWBgIHdpdGhvdXQgdGFyZ2V0LgogQ29tbWFuZCBgYHNvbWVfY21kYGAgd2l0aCB0YXJnZXQuCiBDb21tYW5kIGBgc29tZV9jbWRfPGNtZD4oKWBgIHBsYWNlaG9sZGVyIHdpdGhvdXQgdGFyZ2V0LgotQ29tbWFuZCBgYHNvbWVfY21kXzxjbWQ+YGAgcGxhY2hvbGRlciB3aXRoIHRhcmdldC4KK0NvbW1hbmQgYGBzb21lX2NtZF88Y21kPmBgIHBsYWNlaG9sZGVyIHdpdGggdGFyZ2V0LgogQ29tbWFuZCBgYHNvbWVfY21kKClgYCB3aXRoIHBhcmVucy4KIENvbW1hbmQgYGBzb21lX2NtZChTVUIpYGAgd2l0aCBzdWJjb21tYW5kLgogQ29tbWFuZCBgYHNvbWVfY21kKFNVQilgYCB3aXRoIHN1YmNvbW1hbmQgYW5kIHRhcmdldC4KZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RSU1QucnN0IGIvVGVzdHMvQ01ha2VMaWIvdGVzdFJTVC5yc3QKaW5kZXggZDJkMTE0MC4uNjQ2MmYxYiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvdGVzdFJTVC5yc3QKKysrIGIvVGVzdHMvQ01ha2VMaWIvdGVzdFJTVC5yc3QKQEAgLTEyLDcgKzEyLDcgQEAKIENvbW1hbmQgOmNvbW1hbmQ6YHNvbWVfY21kYCB3aXRob3V0IHRhcmdldC4KIENvbW1hbmQgOmNvbW1hbmQ6YHNvbWVfY21kIDxzb21lX2NtZD5gIHdpdGggdGFyZ2V0LgogQ29tbWFuZCA6Y29tbWFuZDpgc29tZV9jbWRfPGNtZD5gIHBsYWNlaG9sZGVyIHdpdGhvdXQgdGFyZ2V0LgotQ29tbWFuZCA6Y29tbWFuZDpgc29tZV9jbWRfPGNtZD4gPHNvbWVfY21kPmAgcGxhY2hvbGRlciB3aXRoIHRhcmdldC4KK0NvbW1hbmQgOmNvbW1hbmQ6YHNvbWVfY21kXzxjbWQ+IDxzb21lX2NtZD5gIHBsYWNlaG9sZGVyIHdpdGggdGFyZ2V0LgogQ29tbWFuZCA6Y29tbWFuZDpgc29tZV9jbWQoKWAgd2l0aCBwYXJlbnMuCiBDb21tYW5kIDpjb21tYW5kOmBzb21lX2NtZChTVUIpYCB3aXRoIHN1YmNvbW1hbmQuCiBDb21tYW5kIDpjb21tYW5kOmBzb21lX2NtZChTVUIpIDxzb21lX2NtZD5gIHdpdGggc3ViY29tbWFuZCBhbmQgdGFyZ2V0LgpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdFN0cmluZy5jeHggYi9UZXN0cy9DTWFrZUxpYi90ZXN0U3RyaW5nLmN4eAppbmRleCBkN2IzMjAwLi5hZDgwMGNmIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZUxpYi90ZXN0U3RyaW5nLmN4eAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0U3RyaW5nLmN4eApAQCAtMSw3ICsxLDcgQEAKIC8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCiAgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KIAotI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gSVdZVSBwcmFnbWE6IGtlZXAKICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPGl0ZXJhdG9yPgpAQCAtMTIsOCArMTIsNyBAQAogI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KLQotI2luY2x1ZGUgImNtX3N0YXRpY19zdHJpbmdfdmlldy5oeHgiCisjaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CiAKICNpbmNsdWRlICJjbVN0cmluZy5oeHgiCiAKQEAgLTE5MSw3ICsxOTAsNyBAQAogewogICBzdGQ6OmNvdXQgPDwgInRlc3RDb25zdHJ1Y3RGcm9tVmlldygpXG4iOwogICBjbTo6c3RyaW5nX3ZpZXcgdmlldyA9IGNzdHI7Ci0gIHJldHVybiB0ZXN0RnJvbUNTdHIodmlldyk7CisgIHJldHVybiB0ZXN0RnJvbUNTdHIoY206OlN0cmluZyh2aWV3KSk7CiB9CiAKIHN0YXRpYyBib29sIHRlc3RBc3NpZ25Gcm9tVmlldygpCkBAIC0yOTcsNyArMjk2LDcgQEAKIHN0YXRpYyBib29sIHRlc3RDb25zdHJ1Y3RGcm9tU3RhdGljU3RyaW5nVmlldygpCiB7CiAgIHN0ZDo6Y291dCA8PCAidGVzdENvbnN0cnVjdEZyb21TdGF0aWNTdHJpbmdWaWV3KClcbiI7Ci0gIHJldHVybiB0ZXN0RnJvbVN0YXRpY1N0cmluZ1ZpZXcoc3RhdGljU3RyaW5nVmlldyk7CisgIHJldHVybiB0ZXN0RnJvbVN0YXRpY1N0cmluZ1ZpZXcoY206OlN0cmluZyhzdGF0aWNTdHJpbmdWaWV3KSk7CiB9CiAKIHN0YXRpYyBib29sIHRlc3RBc3NpZ25Gcm9tU3RhdGljU3RyaW5nVmlldygpCkBAIC03OTYsNyArNzk1LDcgQEAKIHN0YXRpYyBib29sIHRlc3RNZXRob2Rfc3Vic3RyX0F0RW5kQm9ycm93ZWQoKQogewogICBzdGQ6OmNvdXQgPDwgInRlc3RNZXRob2Rfc3Vic3RyX0F0RW5kQm9ycm93ZWQoKVxuIjsKLSAgcmV0dXJuIHRlc3RNZXRob2Rfc3Vic3RyX0F0RW5kKCJhYmMiX3MpOworICByZXR1cm4gdGVzdE1ldGhvZF9zdWJzdHJfQXRFbmQoY206OlN0cmluZygiYWJjIl9zKSk7CiB9CiAKIHN0YXRpYyBib29sIHRlc3RNZXRob2Rfc3Vic3RyX0F0RW5kT3duZWQoKQpAQCAtODU1LDcgKzg1NCw3IEBACiBzdGF0aWMgYm9vbCB0ZXN0TWV0aG9kX3N1YnN0cl9BdFN0YXJ0Qm9ycm93ZWQoKQogewogICBzdGQ6OmNvdXQgPDwgInRlc3RNZXRob2Rfc3Vic3RyX0F0U3RhcnRCb3Jyb3dlZCgpXG4iOwotICByZXR1cm4gdGVzdE1ldGhvZF9zdWJzdHJfQXRTdGFydCgiYWJjIl9zKTsKKyAgcmV0dXJuIHRlc3RNZXRob2Rfc3Vic3RyX0F0U3RhcnQoY206OlN0cmluZygiYWJjIl9zKSk7CiB9CiAKIHN0YXRpYyBib29sIHRlc3RNZXRob2Rfc3Vic3RyX0F0U3RhcnRPd25lZCgpCkBAIC0xMTQ2LDcgKzExNDUsNyBAQAogc3RhdGljIGJvb2wgdGVzdFN0YWJpbGl0eSgpCiB7CiAgIHN0ZDo6Y291dCA8PCAidGVzdFN0YWJpbGl0eSgpXG4iOwotICBjbTo6U3RyaW5nIHN0ciA9ICJhYmMiX3M7CisgIGNtOjpTdHJpbmcgc3RyKCJhYmMiX3MpOwogICBBU1NFUlRfVFJVRSghc3RyLmlzX3N0YWJsZSgpKTsKICAgQVNTRVJUX1RSVUUoc3RyLnN0cl9pZl9zdGFibGUoKSA9PSBudWxscHRyKTsKICAgc3RyLnN0YWJpbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdFVURjguY3h4IGIvVGVzdHMvQ01ha2VMaWIvdGVzdFVURjguY3h4CmluZGV4IDk4NmY1OTUuLjFiZjg4Y2YgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlTGliL3Rlc3RVVEY4LmN4eAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0VVRGOC5jeHgKQEAgLTksOSArOSwxMSBAQAogc3RhdGljIHZvaWQgdGVzdF91dGY4X2NoYXJfcHJpbnQodGVzdF91dGY4X2NoYXIgY29uc3QgYykKIHsKICAgdW5zaWduZWQgY2hhciBjb25zdCogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciBjb25zdCo+KGMpOworI2lmbmRlZiBfX2NsYW5nX2FuYWx5emVyX18gLy8gc29tZWhvdyB0aGlua3MgYXJndW1lbnRzIGFyZSBub3QgaW5pdGlhbGl6ZWQKICAgcHJpbnRmKCJbMHglMDJYLDB4JTAyWCwweCUwMlgsMHglMDJYXSIsIHN0YXRpY19jYXN0PGludD4oZFswXSksCiAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGRbMV0pLCBzdGF0aWNfY2FzdDxpbnQ+KGRbMl0pLAogICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihkWzNdKSk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgYnl0ZV9hcnJheV9wcmludChjaGFyIGNvbnN0KiBzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdFVWUHJvY2Vzc0NoYWluLmN4eCBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RVVlByb2Nlc3NDaGFpbi5jeHgKaW5kZXggNzFhMTc2NC4uNjFhNzdjZiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VMaWIvdGVzdFVWUHJvY2Vzc0NoYWluLmN4eAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0VVZQcm9jZXNzQ2hhaW4uY3h4CkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8Y20vbWVtb3J5PgogCi0jaW5jbHVkZSAiY21fdXYuaCIKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAKICNpbmNsdWRlICJjbUdldFBpcGVzLmgiCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VMaWIvdGVzdFVWUkFJSS5jeHggYi9UZXN0cy9DTWFrZUxpYi90ZXN0VVZSQUlJLmN4eAppbmRleCBjYjA1YWNlLi4wNjA3ZjQ0IDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZUxpYi90ZXN0VVZSQUlJLmN4eAorKysgYi9UZXN0cy9DTWFrZUxpYi90ZXN0VVZSQUlJLmN4eApAQCAtMyw3ICszLDcgQEAKICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5jbHVkZSA8dXRpbGl0eT4KIAotI2luY2x1ZGUgImNtX3V2LmgiCisjaW5jbHVkZSA8Y20zcC91di5oPgogCiAjaW5jbHVkZSAiY21VVkhhbmRsZVB0ci5oIgogCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpYi90ZXN0VVZTdHJlYW1idWYuY3h4IGIvVGVzdHMvQ01ha2VMaWIvdGVzdFVWU3RyZWFtYnVmLmN4eAppbmRleCBjZDljOWQ0Li5iODZlZDc2IDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZUxpYi90ZXN0VVZTdHJlYW1idWYuY3h4CisrKyBiL1Rlc3RzL0NNYWtlTGliL3Rlc3RVVlN0cmVhbWJ1Zi5jeHgKQEAgLTMsMTAgKzMsOSBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxjbTNwL3V2Lmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKLSNpbmNsdWRlICJjbV91di5oIgotCiAjaW5jbHVkZSAiY21HZXRQaXBlcy5oIgogI2luY2x1ZGUgImNtVVZIYW5kbGVQdHIuaCIKICNpbmNsdWRlICJjbVVWU3RyZWFtYnVmLmgiCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlTGlzdHMudHh0CmluZGV4IDU3ZmE3ZmMuLjRhNzc0ZGQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NNYWtlTGlzdHMudHh0CkBAIC0yMDYsMTEgKzIwNiwzOCBAQAogICAgICAgICBzZXQoJHtyZWd9IDApCiAgICAgICBlbmRpZigpCiAgICAgZW5kZm9yZWFjaCgpCisgICAgaWYoQ09NTUFORCBjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbikKKyAgICAgIHNldChpbmZvX3ZzMTUgIlZTXzE1X0RJUiIpCisgICAgICBzZXQoaW5mb192czE2ICJWU18xNl9ESVIiKQorICAgICAgc2V0KHZzX3ZlcnNpb25zKQorICAgICAgaWYoV0lOMzIpCisgICAgICAgIGlmKE5PVCBDTUFLRV9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjE0KQorICAgICAgICAgIHNldCh2c192ZXJzaW9ucyB2czE1IHZzMTYpCisgICAgICAgIGVsc2VpZihOT1QgQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy44KQorICAgICAgICAgIHNldCh2c192ZXJzaW9ucyB2czE1KQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCisgICAgICBmb3JlYWNoKGluZm8gJHt2c192ZXJzaW9uc30pCisgICAgICAgIGNtYWtlX2hvc3Rfc3lzdGVtX2luZm9ybWF0aW9uKFJFU1VMVCBmb3VuZCBRVUVSWSAiJHtpbmZvXyR7aW5mb319IikKKyAgICAgICAgaWYoZm91bmQpCisgICAgICAgICAgc2V0KCR7aW5mb30gMSkKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgc2V0KCR7aW5mb30gMCkKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kZm9yZWFjaCgpCisgICAgZW5kaWYoKQogICBlbmRpZigpCiAKICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAjIEFkZCB0ZXN0cyBiZWxvdyBoZXJlLgogCisgIGlmKE5PVCBERUZJTkVEIENNYWtlX1RFU1RfUXQ1KQorICAgIHNldChDTWFrZV9URVNUX1F0NSAxKQorICBlbmRpZigpCisgIGlmKENNYWtlX1RFU1RfUXQ1KQorICAgIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUIE5PX01PRFVMRSkKKyAgZW5kaWYoKQorCiAgIGlmKE5PVCBDTWFrZV9URVNUX0VYVEVSTkFMX0NNQUtFKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoQ01ha2VMaWIpCiAKQEAgLTM0Miw3ICszNjksNiBAQAogICAjIGFkZCBhIGJ1bmNoIG9mIHN0YW5kYXJkIGJ1aWxkLWFuZC10ZXN0IHN0eWxlIHRlc3RzCiAgIEFERF9URVNUX01BQ1JPKENvbW1hbmRMaW5lVGVzdCBDb21tYW5kTGluZVRlc3QpCiAgIEFERF9URVNUX01BQ1JPKEZpbmRQYWNrYWdlVGVzdCBGaW5kUGFja2FnZVRlc3QpCi0gIEFERF9URVNUX01BQ1JPKEZpbmRNb2R1bGVzRXhlY3V0ZUFsbCBGaW5kTW9kdWxlc0V4ZWN1dGVBbGwpCiAgIEFERF9URVNUX01BQ1JPKFN0cmluZ0ZpbGVUZXN0IFN0cmluZ0ZpbGVUZXN0KQogICBBRERfVEVTVF9NQUNSTyhUcnlDb21waWxlIFRyeUNvbXBpbGUpCiAgIEFERF9URVNUX01BQ1JPKFN5c3RlbUluZm9ybWF0aW9uIFN5c3RlbUluZm9ybWF0aW9uKQpAQCAtMzU2LDcgKzM4MiwxMCBAQAogICAgICAgYWRkX3Rlc3RfbWFjcm8oVlNSZXNvdXJjZU5pbmphRm9yY2VSU1AgVlNSZXNvdXJjZU5pbmphRm9yY2VSU1ApCiAgICAgZW5kaWYgKCkKICAgZW5kaWYoKQotICBBRERfVEVTVF9NQUNSTyhNU01hbmlmZXN0IE1TTWFuaWZlc3QpCisgIGlmKF9pc011bHRpQ29uZmlnKQorICAgIHNldChNU01hbmlmZXN0X0NURVNUX09QVElPTlMgLUMgJDxDT05GSUdVUkFUSU9OPikKKyAgZW5kaWYoKQorICBBRERfVEVTVF9NQUNSTyhNU01hbmlmZXN0ICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPikKICAgQUREX1RFU1RfTUFDUk8oU2ltcGxlIFNpbXBsZSkKICAgQUREX1RFU1RfTUFDUk8oUHJlT3JkZXIgUHJlT3JkZXIpCiAgIEFERF9URVNUX01BQ1JPKE1pc3NpbmdTb3VyY2VGaWxlIE1pc3NpbmdTb3VyY2VGaWxlKQpAQCAtNDM2LDggKzQ2NSwxMiBAQAogICBBRERfVEVTVF9NQUNSTyhBc3NlbWJsZXIgSGVsbG9Bc20pCiAgIEFERF9URVNUX01BQ1JPKFNvdXJjZUdyb3VwcyBTb3VyY2VHcm91cHMpCiAgIEFERF9URVNUX01BQ1JPKFByZXByb2Nlc3MgUHJlcHJvY2VzcykKLSAgc2V0KEV4cG9ydEltcG9ydF9CVUlMRF9PUFRJT05TIC1EQ01ha2VfVEVTVF9ORVNURURfTUFLRV9QUk9HUkFNOkZJTEVQQVRIPSR7Q01ha2VfVEVTVF9FWFBMSUNJVF9NQUtFX1BST0dSQU19KQorICBzZXQoRXhwb3J0SW1wb3J0X0JVSUxEX09QVElPTlMgLURDTWFrZV9URVNUX05FU1RFRF9NQUtFX1BST0dSQU06RklMRVBBVEg9JHtDTWFrZV9URVNUX0VYUExJQ0lUX01BS0VfUFJPR1JBTX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EQ01ha2VfVEVTVF9DVURBOkJPT0w9JHtDTWFrZV9URVNUX0NVREF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgIEFERF9URVNUX01BQ1JPKEV4cG9ydEltcG9ydCBFeHBvcnRJbXBvcnQpCisgIHNldF9wcm9wZXJ0eShURVNUIEV4cG9ydEltcG9ydCBBUFBFTkQKKyAgICBQUk9QRVJUWSBMQUJFTFMgIkNVREEiKQogICBBRERfVEVTVF9NQUNSTyhVbnNldCBVbnNldCkKICAgQUREX1RFU1RfTUFDUk8oUG9saWN5U2NvcGUgUG9saWN5U2NvcGUpCiAgIEFERF9URVNUX01BQ1JPKEVtcHR5TGlicmFyeSBFbXB0eUxpYnJhcnkpCkBAIC00NTEsOCArNDg0LDEyIEBACiAgIEFERF9URVNUX01BQ1JPKFN0YWdpbmdQcmVmaXggU3RhZ2luZ1ByZWZpeCkKICAgQUREX1RFU1RfTUFDUk8oSW1wb3J0ZWRTYW1lTmFtZSBJbXBvcnRlZFNhbWVOYW1lKQogICBBRERfVEVTVF9NQUNSTyhJbnRlcmZhY2VMaWJyYXJ5IEludGVyZmFjZUxpYnJhcnkpCi0gIGlmKE5PVCBfaXNNdWx0aUNvbmZpZykKLSAgICBzZXQoQ29uZmlnU291cmNlc19CVUlMRF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT0kPENPTkZJR1VSQVRJT04+KQorICBpZihOT1QgQ01BS0VfR0VORVJBVE9SIFNUUkVRVUFMICJYY29kZSIpCisgICAgaWYoX2lzTXVsdGlDb25maWcpCisgICAgICBzZXQoQ29uZmlnU291cmNlc19DVEVTVF9PUFRJT05TIC0tYnVpbGQtY29uZmlnICQ8Q09ORklHVVJBVElPTj4pCisgICAgZWxzZSgpCisgICAgICBzZXQoQ29uZmlnU291cmNlc19CVUlMRF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT0kPENPTkZJR1VSQVRJT04+KQorICAgIGVuZGlmKCkKICAgICBBRERfVEVTVF9NQUNSTyhDb25maWdTb3VyY2VzIENvbmZpZ1NvdXJjZXMpCiAgIGVuZGlmKCkKICAgQUREX1RFU1RfTUFDUk8oU291cmNlc1Byb3BlcnR5IFNvdXJjZXNQcm9wZXJ0eSkKQEAgLTY4MCwzOCArNzE3LDI4IEBACiAgICMgYnVpbGQgdGhlICJTaW1wbGUiIHRlc3Qgd2l0aCB0aGUgRXh0cmFHZW5lcmF0b3JzLCBpZiBhdmFpbGFibGUKICAgIyBUaGlzIGRvZXNuJ3QgdGVzdCB3aGV0aGVyIHRoZSBnZW5lcmF0ZWQgcHJvamVjdCBmaWxlcyB3b3JrICh1bmZvcnR1bmF0ZWx5KSwKICAgIyBtYWlubHkgaXQgdGVzdHMgdGhhdCBjbWFrZSBkb2Vzbid0IGNyYXNoIHdoZW4gZ2VuZXJhdGluZyB0aGVzZSBwcm9qZWN0IGZpbGVzLgotICBpZigke0NNQUtFX0dFTkVSQVRPUn0gTUFUQ0hFUyAiVW5peCBNYWtlZmlsZXMiIE9SICR7Q01BS0VfR0VORVJBVE9SfSBNQVRDSEVTICJOaW5qYSIpCi0KLSAgICAjIGNoZWNrIHdoaWNoIGdlbmVyYXRvcnMgd2UgaGF2ZQotICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ01BS0VfQ09NTUFORH0gLS1oZWxwCi0gICAgICBPVVRQVVRfVkFSSUFCTEUgY21ha2VPdXRwdXQgRVJST1JfVkFSSUFCTEUgY21ha2VPdXRwdXQpCi0KLSAgICBzZXQoZXh0cmFHZW5lcmF0b3JzCi0gICAgICAiQ29kZUJsb2NrcyIKLSAgICAgICJDb2RlTGl0ZSIKLSAgICAgICJFY2xpcHNlIENEVDQiCi0gICAgICAiS2F0ZSIKLSAgICAgICJTdWJsaW1lIFRleHQgMiIpCi0KLSAgICBmb3JlYWNoKGV4dHJhR2VuZXJhdG9yICR7ZXh0cmFHZW5lcmF0b3JzfSkKLSAgICAgIGlmICgiJHtjbWFrZU91dHB1dH0iIE1BVENIRVMgIiR7ZXh0cmFHZW5lcmF0b3J9IC0gJHtDTUFLRV9HRU5FUkFUT1J9IikKLSAgICAgICAgc2V0KGV4dHJhR2VuZXJhdG9yVGVzdE5hbWUgIlNpbXBsZV8ke2V4dHJhR2VuZXJhdG9yfUdlbmVyYXRvciIpCi0gICAgICAgIHN0cmluZyhSRVBMQUNFICIgIiAiIiBleHRyYUdlbmVyYXRvclRlc3ROYW1lICR7ZXh0cmFHZW5lcmF0b3JUZXN0TmFtZX0pCi0KLSAgICAgICAgYWRkX3Rlc3QoJHtleHRyYUdlbmVyYXRvclRlc3ROYW1lfSAke0NNQUtFX0NURVNUX0NPTU1BTkR9Ci0gICAgICAgICAgLS1idWlsZC1hbmQtdGVzdAotICAgICAgICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL1NpbXBsZSIKLSAgICAgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy8ke2V4dHJhR2VuZXJhdG9yVGVzdE5hbWV9IgotICAgICAgICAgIC0tYnVpbGQtdHdvLWNvbmZpZwotICAgICAgICAgIC0tYnVpbGQtZ2VuZXJhdG9yICIke2V4dHJhR2VuZXJhdG9yfSAtICR7Q01BS0VfR0VORVJBVE9SfSIKLSAgICAgICAgICAtLWJ1aWxkLWdlbmVyYXRvci1wbGF0Zm9ybSAiJHtDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk19IgotICAgICAgICAgIC0tYnVpbGQtZ2VuZXJhdG9yLXRvb2xzZXQgIiR7Q01BS0VfR0VORVJBVE9SX1RPT0xTRVR9IgotICAgICAgICAgIC0tYnVpbGQtcHJvamVjdCBTaW1wbGUKLSAgICAgICAgICAtLXRlc3QtY29tbWFuZCBTaW1wbGUpCi0gICAgICAgIGxpc3QoQVBQRU5EIFRFU1RfQlVJTERfRElSUyAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy8ke2V4dHJhR2VuZXJhdG9yVGVzdE5hbWV9IikKLSAgICAgIGVuZGlmICgpCi0gICAgZW5kZm9yZWFjaChleHRyYUdlbmVyYXRvcikKLQorICBpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiXihVbml4IE1ha2VmaWxlc3xOaW5qYSkkIgorICAgICAgQU5EIE5PVCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IiBTVFJFUVVBTCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IikKKyAgICBmb3JlYWNoKGV4dHJhR2VuZXJhdG9yCisgICAgICAgICJDb2RlQmxvY2tzIgorICAgICAgICAiQ29kZUxpdGUiCisgICAgICAgICJFY2xpcHNlIENEVDQiCisgICAgICAgICJLYXRlIgorICAgICAgICAiU3VibGltZSBUZXh0IDIiCisgICAgICAgICkKKyAgICAgIHN0cmluZyhSRVBMQUNFICIgIiAiIiBleHRyYUdlbmVyYXRvclRlc3ROYW1lICJTaW1wbGVfJHtleHRyYUdlbmVyYXRvcn1HZW5lcmF0b3IiKQorICAgICAgYWRkX3Rlc3QoJHtleHRyYUdlbmVyYXRvclRlc3ROYW1lfSAke0NNQUtFX0NURVNUX0NPTU1BTkR9CisgICAgICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvU2ltcGxlIgorICAgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy8ke2V4dHJhR2VuZXJhdG9yVGVzdE5hbWV9IgorICAgICAgICAtLWJ1aWxkLXR3by1jb25maWcKKyAgICAgICAgLS1idWlsZC1nZW5lcmF0b3IgIiR7ZXh0cmFHZW5lcmF0b3J9IC0gJHtDTUFLRV9HRU5FUkFUT1J9IgorICAgICAgICAtLWJ1aWxkLWdlbmVyYXRvci1wbGF0Zm9ybSAiJHtDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk19IgorICAgICAgICAtLWJ1aWxkLWdlbmVyYXRvci10b29sc2V0ICIke0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUfSIKKyAgICAgICAgLS1idWlsZC1wcm9qZWN0IFNpbXBsZQorICAgICAgICAtLXRlc3QtY29tbWFuZCBTaW1wbGUpCisgICAgICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvJHtleHRyYUdlbmVyYXRvclRlc3ROYW1lfSIpCisgICAgZW5kZm9yZWFjaCgpCiAgIGVuZGlmKCkKIAogICAjIHRlc3QgZm9yIGNvcnJlY3Qgc3ViLXByb2plY3QgZ2VuZXJhdGlvbgpAQCAtNzc0LDEzICs4MDEsOCBAQAogICAgIGVuZGlmKCkKICAgZW5kbWFjcm8oKQogICBpZihDTWFrZV9CVUlMRF9OSUdIVExZX1JFTEVBU0VTKQotICAgIEFERF9OSUdIVExZX0JVSUxEX1RFU1QoQ01ha2VOaWdodGx5V2luMzIKLSAgICAgIHdpbjMyX3JlbGVhc2UuY21ha2UpCi0gICAgQUREX05JR0hUTFlfQlVJTERfVEVTVChDTWFrZU5pZ2h0bHlXaW42NAotICAgICAgd2luNjRfcmVsZWFzZS5jbWFrZSkKICAgICBBRERfTklHSFRMWV9CVUlMRF9URVNUKENNYWtlTmlnaHRseU9TWAogICAgICAgb3N4X3JlbGVhc2UuY21ha2UpCi0gICAgc2V0X3Byb3BlcnR5KFRFU1QgQ01ha2VOaWdodGx5V2luNjQgUFJPUEVSVFkgREVQRU5EUyBDTWFrZU5pZ2h0bHlXaW4zMikKICAgZW5kaWYoKQogCiAgICMgYWRkIHRlc3RzIHdpdGggbW9yZSBjb21wbGV4IGludm9jYXRpb25zCkBAIC05NjcsNiArOTg5LDcgQEAKICAgICAgICAgLS1idWlsZC1vcHRpb25zCiAgICAgICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ01BS0VfQ09NTUFORH0KICAgICAgICAgICAiLURDUGFja1dpWEdlbmVyYXRvcl9CSU5BUllfRElSOlBBVEg9JHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9DUGFja1dpWEdlbmVyYXRvciIKKyAgICAgICAgICAiLURub192ZXJpZnk6Qk9PTD0ke0NNYWtlX1RFU1RfV0lYX05PX1ZFUklGWX0iCiAgICAgICAgICAgIi1EY29uZmlnPVwke0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRX0iCiAgICAgICAgICAgLVAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UiKQogCkBAIC05NzYsNiArOTk5LDI3IEBACiAgICAgZW5kaWYoKQogICBlbmRpZigpCiAKKyAgIyBPbiBXaW5kb3dzIHJ1biB0aGUgQ1BhY2tOU0lTR2VuZXJhdG9yIHRlc3QKKyAgIyBpZiB0aGUgbnNpcyBpcyBhdmFpbGFibGUKKyAgaWYoV0lOMzIgQU5EIE5TSVNfTUFLRU5TSVNfRVhFQ1VUQUJMRSkKKyAgICBhZGRfdGVzdChDUGFja05TSVNHZW5lcmF0b3IgJHtDTUFLRV9DVEVTVF9DT01NQU5EfQorICAgICAgLUMgXCR7Q1RFU1RfQ09ORklHVVJBVElPTl9UWVBFfQorICAgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yIgorICAgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yIgorICAgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAgIC0tYnVpbGQtcHJvamVjdCBDUGFja05TSVNHZW5lcmF0b3IKKyAgICAgIC0tYnVpbGQtb3B0aW9ucworICAgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DTUFLRV9DT01NQU5EfQorICAgICAgICAiLURDUGFja05TSVNHZW5lcmF0b3JfQklOQVJZX0RJUjpQQVRIPSR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yIgorICAgICAgICAiLURjb25maWc9XCR7Q1RFU1RfQ09ORklHVVJBVElPTl9UWVBFfSIKKyAgICAgICAgLVAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlIikKKworICAgIHNldF9wcm9wZXJ0eShURVNUIENQYWNrTlNJU0dlbmVyYXRvciBQUk9QRVJUWQorICAgICAgQVRUQUNIRURfRklMRVNfT05fRkFJTAorICAgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL19DUGFja19QYWNrYWdlcy93aW4zMi9OU0lTL05TSVNPdXRwdXQubG9nIikKKyAgZW5kaWYoKQorCiAgIGlmKENURVNUX1RFU1RfQ1BBQ0spCiAgICAgYWRkX3Rlc3QoQ1BhY2tVc2VEZWZhdWx0VmVyc2lvbiAke0NNQUtFX0NURVNUX0NPTU1BTkR9CiAgICAgICAtLWJ1aWxkLWFuZC10ZXN0CkBAIC0xMTI4LDggKzExNzIsOCBAQAogCiAgICAgICBmb3JlYWNoKENQYWNrREVCQ29uZmlndXJhdGlvbiBJTiBMSVNUUyBERUJfQ09ORklHVVJBVElPTlNfVE9fVEVTVCkKICAgICAgICAgc2V0KENQYWNrUnVuX0NQYWNrREVCQ29uZmlndXJhdGlvbiAiLURDUGFja0RFQkNvbmZpZ3VyYXRpb249JHtDUGFja0RFQkNvbmZpZ3VyYXRpb259IikKLSAgICAgICAgYWRkX3Rlc3QoJHtERUJfVEVTVF9OQU1FU30tJHtDUGFja0RFQkNvbmZpZ3VyYXRpb259Ci0gICAgICAgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBcJHtDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEV9CisgICAgICAgIGFkZF90ZXN0KE5BTUUgJHtERUJfVEVTVF9OQU1FU30tJHtDUGFja0RFQkNvbmZpZ3VyYXRpb259IENPTU1BTkQKKyAgICAgICAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHPgogICAgICAgICAgIC0tYnVpbGQtYW5kLXRlc3QKICAgICAgICAgICAgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvJHtERUJfVEVTVF9OQU1FU30iCiAgICAgICAgICAgICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzLyR7REVCX1RFU1RfTkFNRVN9L2J1aWxkJHtDUGFja0dlbn0tJHtDUGFja0RFQkNvbmZpZ3VyYXRpb259IgpAQCAtMTE0Niw2ICsxMTkwLDcgQEAKICAgICAgICAgICAgICAgIi1EJHtERUJfVEVTVF9OQU1FU31fQklOQVJZX0RJUjpQQVRIPSR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvJHtERUJfVEVTVF9OQU1FU30vYnVpbGQke0NQYWNrR2VufS0ke0NQYWNrREVCQ29uZmlndXJhdGlvbn0iCiAgICAgICAgICAgICAgICIke0NQYWNrUnVuX0NQYWNrR2VufSIKICAgICAgICAgICAgICAgIiR7Q1BhY2tSdW5fQ1BhY2tERUJDb25maWd1cmF0aW9ufSIKKyAgICAgICAgICAgICAgIi1EQ09ORklHPSQ8Q09ORklHPiIKICAgICAgICAgICAgICAgLVAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvJHtERUJfVEVTVF9OQU1FU30vUnVuQ1BhY2tWZXJpZnlSZXN1bHQtJHtDUGFja0RFQkNvbmZpZ3VyYXRpb259LmNtYWtlIikKICAgICAgICAgICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvJHtERUJfVEVTVF9OQU1FU30vYnVpbGQke0NQYWNrR2VufS0ke0NQYWNrREVCQ29uZmlndXJhdGlvbn0iKQogICAgICAgZW5kZm9yZWFjaCgpCkBAIC0xMzI1LDEyICsxMzcwLDYgQEAKICAgICApCiAgIGxpc3QoQVBQRU5EIFRFU1RfQlVJTERfRElSUyAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9RdEF1dG9tb2NOb1F0IikKIAotICBpZihOT1QgREVGSU5FRCBDTWFrZV9URVNUX1F0NSkKLSAgICBzZXQoQ01ha2VfVEVTVF9RdDUgMSkKLSAgZW5kaWYoKQotICBpZihDTWFrZV9URVNUX1F0NSkKLSAgICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCBOT19NT0RVTEUpCi0gIGVuZGlmKCkKICAgaWYoQ01ha2VfVEVTVF9RdDUgQU5EIFF0NVdpZGdldHNfRk9VTkQpCiAgICAgYWRkX3N1YmRpcmVjdG9yeShRdDVBdXRvZ2VuKQogICBlbmRpZigpCkBAIC0xMzgyLDYgKzE0MjEsNyBAQAogICBmb3JlYWNoKF9tb2QgSU4gSVRFTVMKICAgICAgICAgICAgIEFMU0EKICAgICAgICAgICAgIEJvb3N0CisgICAgICAgICAgICBCTEFTCiAgICAgICAgICAgICBCWmlwMgogICAgICAgICAgICAgQ1VSTAogICAgICAgICAgICAgQ3VwcwpAQCAtMTQwMSwxMSArMTQ0MSwxNCBAQAogICAgICAgICAgICAgSUNVCiAgICAgICAgICAgICBKUEVHCiAgICAgICAgICAgICBKc29uQ3BwCisgICAgICAgICAgICBMQVBBQ0sKKyAgICAgICAgICAgIExpYkFyY2hpdmUKICAgICAgICAgICAgIExpYkxaTUEKICAgICAgICAgICAgIExpYlJIYXNoCiAgICAgICAgICAgICBMaWJpbnB1dAogICAgICAgICAgICAgTGliVVYKICAgICAgICAgICAgIExpYlhtbDIKKyAgICAgICAgICAgIExpYlhzbHQKICAgICAgICAgICAgIExUVG5nVVNUCiAgICAgICAgICAgICBPREJDCiAgICAgICAgICAgICBPcGVuQUNDCkBAIC0xNDE4LDYgKzE0NjEsNyBAQAogICAgICAgICAgICAgUGF0Y2gKICAgICAgICAgICAgIFBvc3RncmVTUUwKICAgICAgICAgICAgIFByb3RvYnVmCisgICAgICAgICAgICBTREwKICAgICAgICAgICAgIFNRTGl0ZTMKICAgICAgICAgICAgIFRJRkYKICAgICAgICAgICAgIFZ1bGthbgpAQCAtMTQ0MCw3ICsxNDg0LDggQEAKICAgICBhZGRfc3ViZGlyZWN0b3J5KEdvb2dsZVRlc3QpCiAgIGVuZGlmKCkKIAotICBpZihDTWFrZV9URVNUX0ZpbmRQeXRob24gT1IgQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5KQorICBpZihDTWFrZV9URVNUX0ZpbmRQeXRob24gT1IgQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5CisgICAgICBPUiBDTWFrZV9URVNUX0ZpbmRQeXRob25fQ29uZGEgT1IgQ01ha2VfVEVTVF9GaW5kUHl0aG9uX0lyb25QeXRob24gT1IgQ01ha2VfVEVTVF9GaW5kUHl0aG9uX1B5UHkpCiAgICAgYWRkX3N1YmRpcmVjdG9yeShGaW5kUHl0aG9uKQogICBlbmRpZigpCiAKQEAgLTE0NDgsNiArMTQ5MywxMCBAQAogICAgIGFkZF9zdWJkaXJlY3RvcnkoVXNlU1dJRykKICAgZW5kaWYoKQogCisgIGlmKENNYWtlX1RFU1RfRmluZFJ1YnkpCisgICAgYWRkX3N1YmRpcmVjdG9yeShGaW5kUnVieSkKKyAgZW5kaWYoKQorCiAgIGFkZF9zdWJkaXJlY3RvcnkoRmluZFRocmVhZHMpCiAKICAgIyBNYXRsYWIgbW9kdWxlCkBAIC0xNTc1LDcgKzE2MjQsNyBAQAogICAgIERFUEVORFMgRXh0ZXJuYWxQcm9qZWN0VXBkYXRlU2V0dXAgKQogCiAgICMgZG8gZWFjaCBvZiB0aGUgdHV0b3JpYWwgc3RlcHMKLSAgZnVuY3Rpb24oYWRkX3R1dG9yaWFsX3Rlc3Qgc3RlcF9uYW1lIHVzZV9teW1hdGgpCisgIGZ1bmN0aW9uKGFkZF90dXRvcmlhbF90ZXN0IHN0ZXBfbmFtZSB1c2VfbXltYXRoIHR1dG9yaWFsX2FyZyBwYXNzX3JlZ2V4KQogICAgIHNldCh0dXRvcmlhbF90ZXN0X25hbWUgVHV0b3JpYWwke3N0ZXBfbmFtZX0pCiAgICAgc2V0KHR1dG9yaWFsX2J1aWxkX2RpciAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9UdXRvcmlhbC8ke3N0ZXBfbmFtZX0iKQogICAgIGlmICh1c2VfbXltYXRoKQpAQCAtMTU4NiwyNSArMTYzNSwzNSBAQAogICAgICAgc2V0KHR1dG9yaWFsX2J1aWxkX29wdGlvbnMgLURVU0VfTVlNQVRIOkJPT0w9T0ZGKQogICAgIGVuZGlmKCkKICAgICBhZGRfdGVzdCgke3R1dG9yaWFsX3Rlc3RfbmFtZX0gJHtDTUFLRV9DVEVTVF9DT01NQU5EfQorICAgICAgLUMgIlJlbGVhc2UiCiAgICAgICAtLWJ1aWxkLWFuZC10ZXN0CiAgICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9IZWxwL2d1aWRlL3R1dG9yaWFsLyR7c3RlcF9uYW1lfSIKICAgICAgICR7dHV0b3JpYWxfYnVpbGRfZGlyfV9CdWlsZAogICAgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KICAgICAgIC0tYnVpbGQtcHJvamVjdCBUdXRvcmlhbAogICAgICAgLS1idWlsZC1vcHRpb25zICR7dHV0b3JpYWxfYnVpbGRfb3B0aW9uc30KLSAgICAgIC0tdGVzdC1jb21tYW5kIFR1dG9yaWFsIDI1LjApCisgICAgICAtLXRlc3QtY29tbWFuZCBUdXRvcmlhbCAke3R1dG9yaWFsX2FyZ30pCisgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoJHt0dXRvcmlhbF90ZXN0X25hbWV9IFBST1BFUlRJRVMKKyAgICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICR7cGFzc19yZWdleH0pCisKICAgICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vJHt0dXRvcmlhbF9idWlsZF9kaXJ9X0J1aWxkIikKICAgZW5kZnVuY3Rpb24oKQogCiAgIGlmKE5PVCBDTWFrZV9URVNUX0VYVEVSTkFMX0NNQUtFKQotICAgIGZvcmVhY2goU1RQIFJBTkdFIDIgMTEpCi0gICAgICBhZGRfdHV0b3JpYWxfdGVzdChTdGVwJHtTVFB9IFRSVUUpCisgICAgZm9yZWFjaChTVFAgUkFOR0UgMiAxMikKKyAgICAgIGlmIChTVFAgRVFVQUwgNikKKyAgICAgICAgc2V0KHBhc3NfcmVnZXggIi4qdXNpbmcgbG9nIGFuZCBleHAiKQorICAgICAgZWxzZSgpCisgICAgICAgIHNldChwYXNzX3JlZ2V4ICJUaGUgc3F1YXJlIHJvb3Qgb2YgMjUgaXMgNSIpCisgICAgICBlbmRpZigpCisgICAgICBhZGRfdHV0b3JpYWxfdGVzdChTdGVwJHtTVFB9IFRSVUUgMjUgJHtwYXNzX3JlZ2V4fSkKICAgICBlbmRmb3JlYWNoKCkKLSAgICBhZGRfdHV0b3JpYWxfdGVzdChDb21wbGV0ZSBUUlVFKQotICAgIGZvcmVhY2goU1RQIFJBTkdFIDMgMTEpCi0gICAgICBhZGRfdHV0b3JpYWxfdGVzdChTdGVwJHtTVFB9IEZBTFNFKQorICAgIHNldChwYXNzX3JlZ2V4ICJUaGUgc3F1YXJlIHJvb3Qgb2YgMjUgaXMgNSIpCisgICAgYWRkX3R1dG9yaWFsX3Rlc3QoQ29tcGxldGUgVFJVRSAyNSAke3Bhc3NfcmVnZXh9KQorICAgIGZvcmVhY2goU1RQIFJBTkdFIDMgMTIpCisgICAgICBhZGRfdHV0b3JpYWxfdGVzdChTdGVwJHtTVFB9IEZBTFNFIDI1ICR7cGFzc19yZWdleH0pCiAgICAgZW5kZm9yZWFjaCgpCi0gICAgYWRkX3R1dG9yaWFsX3Rlc3QoQ29tcGxldGUgRkFMU0UpCisgICAgYWRkX3R1dG9yaWFsX3Rlc3QoQ29tcGxldGUgRkFMU0UgMjUgJHtwYXNzX3JlZ2V4fSkKICAgZW5kaWYoKQogCiAgIGFkZF90ZXN0KHRlc3RpbmcgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBcJHtDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEV9CkBAIC0xODQ5LDYgKzE5MDgsOCBAQAogICAgIGVuZGlmKCkKICAgICBzZXQoTVNWQ1J1bnRpbWVMaWJyYXJ5X0JVSUxEX09QVElPTlMgLURDTWFrZV9URVNUX0NVREE9JHtDTWFrZV9URVNUX0NVREF9KQogICAgIEFERF9URVNUX01BQ1JPKE1TVkNSdW50aW1lTGlicmFyeSkKKyAgICBzZXRfcHJvcGVydHkoVEVTVCBNU1ZDUnVudGltZUxpYnJhcnkgQVBQRU5ECisgICAgICBQUk9QRVJUWSBMQUJFTFMgIkNVREEiKQogICAgIGlmKENNQUtFX0ZvcnRyYW5fQ09NUElMRVIpCiAgICAgICBBRERfVEVTVF9NQUNSTyhNU1ZDUnVudGltZUxpYnJhcnkuRm9ydHJhbikKICAgICBlbmRpZigpCkBAIC0xODYxLDcgKzE5MjIsNyBAQAogICBBRERfVEVTVF9NQUNSTyhDaGVja0NvbXBpbGVyUmVsYXRlZFZhcmlhYmxlcyBDaGVja0NvbXBpbGVyUmVsYXRlZFZhcmlhYmxlcykKIAogICBpZigiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJNYWtlZmlsZSIgT1IKLSAgICAgIiR7Q01BS0VfR0VORVJBVE9SfSIgTUFUQ0hFUyAiTmluamEiKQorICAgICAiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJeTmluamEkIikKICAgICBhZGRfdGVzdChNYWtlQ2xlYW4gJHtDTUFLRV9DVEVTVF9DT01NQU5EfQogICAgICAgLS1idWlsZC1hbmQtdGVzdAogICAgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvTWFrZUNsZWFuIgpAQCAtMjI2NSwzMiArMjMyNiw0MSBAQAogICAgIGVuZGZvcmVhY2goKQogICBlbmRpZigpCiAKKyAgbWFjcm8oYWRkX3Rlc3RfVlNBbmRyb2lkIG5hbWUgZ2VuZXJhdG9yIHBsYXRmb3JtKQorICAgIGFkZF90ZXN0KE5BTUUgIlZTQW5kcm9pZC4ke25hbWV9LiR7cGxhdGZvcm19IiBDT01NQU5EICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KKyAgICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL1ZTQW5kcm9pZCIKKyAgICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL1ZTQW5kcm9pZC8ke25hbWV9LyR7cGxhdGZvcm19IgorICAgICAgLS1idWlsZC1nZW5lcmF0b3IgIiR7Z2VuZXJhdG9yfSIKKyAgICAgIC0tYnVpbGQtcHJvamVjdCBWU0FuZHJvaWQKKyAgICAgIC0tYnVpbGQtY29uZmlnICQ8Q09ORklHVVJBVElPTj4KKyAgICAgIC0tYnVpbGQtb3B0aW9ucyAtRENNQUtFX1NZU1RFTV9OQU1FPUFuZHJvaWQgIi1BJHtwbGF0Zm9ybX0iCisgICAgICApCisgICAgbGlzdChBUFBFTkQgVEVTVF9CVUlMRF9ESVJTICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL1ZTQW5kcm9pZC8ke25hbWV9IikKKyAgZW5kbWFjcm8oKQogICBpZih0ZWdyYSBBTkQgTk9UICIke0NNYWtlX1NPVVJDRV9ESVJ9OyR7Q01ha2VfQklOQVJZX0RJUn0iIE1BVENIRVMgIiAiKQotICAgIG1hY3JvKGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEgbmFtZSBnZW5lcmF0b3IpCi0gICAgICBhZGRfdGVzdChOQU1FIFZTTnNpZ2h0VGVncmEuJHtuYW1lfSBDT01NQU5EICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KLSAgICAgICAgLS1idWlsZC1hbmQtdGVzdAotICAgICAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9WU05zaWdodFRlZ3JhIgotICAgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9WU05zaWdodFRlZ3JhLyR7bmFtZX0iCi0gICAgICAgIC0tYnVpbGQtZ2VuZXJhdG9yICIke2dlbmVyYXRvcn0iCi0gICAgICAgIC0tYnVpbGQtcHJvamVjdCBWU05zaWdodFRlZ3JhCi0gICAgICAgIC0tYnVpbGQtY29uZmlnICQ8Q09ORklHVVJBVElPTj4KLSAgICAgICAgLS1idWlsZC1vcHRpb25zIC1EQ01BS0VfU1lTVEVNX05BTUU9QW5kcm9pZAotICAgICAgICApCi0gICAgICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvVlNOc2lnaHRUZWdyYS8ke25hbWV9IikKLSAgICBlbmRtYWNybygpCiAgICAgaWYodnMxMCkKLSAgICAgIGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEodnMxMCAiVmlzdWFsIFN0dWRpbyAxMCAyMDEwIikKKyAgICAgIGFkZF90ZXN0X1ZTQW5kcm9pZCh2czEwICJWaXN1YWwgU3R1ZGlvIDEwIDIwMTAiICJUZWdyYS1BbmRyb2lkIikKICAgICBlbmRpZigpCiAgICAgaWYodnMxMSkKLSAgICAgIGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEodnMxMSAiVmlzdWFsIFN0dWRpbyAxMSAyMDEyIikKKyAgICAgIGFkZF90ZXN0X1ZTQW5kcm9pZCh2czExICJWaXN1YWwgU3R1ZGlvIDExIDIwMTIiICJUZWdyYS1BbmRyb2lkIikKICAgICBlbmRpZigpCiAgICAgaWYodnMxMikKLSAgICAgIGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEodnMxMiAiVmlzdWFsIFN0dWRpbyAxMiAyMDEzIikKKyAgICAgIGFkZF90ZXN0X1ZTQW5kcm9pZCh2czEyICJWaXN1YWwgU3R1ZGlvIDEyIDIwMTMiICJUZWdyYS1BbmRyb2lkIikKICAgICBlbmRpZigpCiAgICAgaWYodnMxNCkKLSAgICAgIGFkZF90ZXN0X1ZTTnNpZ2h0VGVncmEodnMxNCAiVmlzdWFsIFN0dWRpbyAxNCAyMDE1IikKKyAgICAgIGFkZF90ZXN0X1ZTQW5kcm9pZCh2czE0ICJWaXN1YWwgU3R1ZGlvIDE0IDIwMTUiICJUZWdyYS1BbmRyb2lkIikKICAgICBlbmRpZigpCiAgIGVuZGlmKCkKKyAgaWYodnMxNCBBTkQgQ01ha2VfVEVTVF9BTkRST0lEX1ZTMTQpCisgICAgYWRkX3Rlc3RfVlNBbmRyb2lkKHZzMTQgIlZpc3VhbCBTdHVkaW8gMTQgMjAxNSIgIkFSTSIpCisgIGVuZGlmKCkKKyAgaWYodnMxNSBBTkQgQ01ha2VfVEVTVF9BTkRST0lEX1ZTMTUpCisgICAgYWRkX3Rlc3RfVlNBbmRyb2lkKHZzMTUgIlZpc3VhbCBTdHVkaW8gMTUgMjAxNyIgIkFSTSIpCisgIGVuZGlmKCkKKyAgaWYodnMxNiBBTkQgQ01ha2VfVEVTVF9BTkRST0lEX1ZTMTYpCisgICAgYWRkX3Rlc3RfVlNBbmRyb2lkKHZzMTYgIlZpc3VhbCBTdHVkaW8gMTYgMjAxOSIgIkFSTSIpCisgIGVuZGlmKCkKIAogICBpZiAoQVBQTEUpCiAgICAgaWYgKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNYWCBPUiAiJHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9IiBNQVRDSEVTICJDbGFuZyIpCkBAIC0yMzQ3LDM2ICsyNDE3LDYgQEAKICAgICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvQnVuZGxlR2VuZXJhdG9yVGVzdCIpCiAgIGVuZGlmKCkKIAotICBhZGRfdGVzdChXYXJuVW51c2VkVW51c2VkVmlhU2V0ICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KLSAgICAtLWJ1aWxkLWFuZC10ZXN0Ci0gICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFTZXQiCi0gICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvV2FyblVudXNlZFVudXNlZFZpYVNldCIKLSAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQotICAgIC0tYnVpbGQtbm9jbGVhbgotICAgIC0tYnVpbGQtcHJvamVjdCBXYXJuVW51c2VkVW51c2VkVmlhU2V0Ci0gICAgLS1idWlsZC1vcHRpb25zCi0gICAgICAiLS13YXJuLXVudXNlZC12YXJzIikKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoV2FyblVudXNlZFVudXNlZFZpYVNldCBQUk9QRVJUSUVTCi0gICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gInVudXNlZCB2YXJpYWJsZSBcXChjaGFuZ2luZyBkZWZpbml0aW9uXFwpICdVTlVTRURfVkFSSUFCTEUnIikKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoV2FyblVudXNlZFVudXNlZFZpYVNldCBQUk9QRVJUSUVTCi0gICAgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gInVudXNlZCB2YXJpYWJsZSBcXCh1bnNldHRpbmdcXCkgJ1VOVVNFRF9WQVJJQUJMRSciKQotICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvV2FyblVudXNlZFVudXNlZFZpYVNldCIpCi0KLSAgYWRkX3Rlc3QoV2FyblVudXNlZFVudXNlZFZpYVVuc2V0ICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KLSAgICAtLWJ1aWxkLWFuZC10ZXN0Ci0gICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFVbnNldCIKLSAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9XYXJuVW51c2VkVW51c2VkVmlhVW5zZXQiCi0gICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KLSAgICAtLWJ1aWxkLW5vY2xlYW4KLSAgICAtLWJ1aWxkLXByb2plY3QgV2FyblVudXNlZFVudXNlZFZpYVVuc2V0Ci0gICAgLS1idWlsZC1vcHRpb25zCi0gICAgICAiLS13YXJuLXVudXNlZC12YXJzIikKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoV2FyblVudXNlZFVudXNlZFZpYVVuc2V0IFBST1BFUlRJRVMKLSAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiQ01ha2UgV2FybmluZyBcXChkZXZcXCkgYXQgQ01ha2VMaXN0cy50eHQ6NyBcXChzZXRcXCk6IikKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoV2FyblVudXNlZFVudXNlZFZpYVVuc2V0IFBST1BFUlRJRVMKLSAgICBGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiAiQ01ha2VMaXN0cy50eHQ6NSBcXChzZXRcXCk6IikKLSAgbGlzdChBUFBFTkQgVEVTVF9CVUlMRF9ESVJTICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL1dhcm5VbnVzZWRVbnVzZWRWaWFVbnNldCIpCi0KICAgYWRkX3Rlc3QoV2FyblVudXNlZENsaVVudXNlZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9CiAgICAgLS1idWlsZC1hbmQtdGVzdAogICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL1dhcm5VbnVzZWRDbGlVbnVzZWQiCkBAIC0yNjQ0LDkgKzI2ODQsNiBAQAogICAgIC1TICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi90ZXN0LmNtYWtlIiAtVlYKICAgICAtLW91dHB1dC1sb2cgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL3Rlc3RPdXQubG9nIgogICAgICkKLSAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WIFBST1BFUlRJRVMKLSAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTgotICAgICJQQVNTRUQgd2l0aCBjb3JyZWN0IG91dHB1dC4qVGVzdGluZy9Db3ZlcmFnZUluZm8vbWFpbi5jcHAuZ2NvdiIpCiAgIHNldF9wcm9wZXJ0eShURVNUIENUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPViBQUk9QRVJUWSBFTlZJUk9OTUVOVCBDVEVTVF9QQVJBTExFTF9MRVZFTD0pCiAKICAgY29uZmlndXJlX2ZpbGUoCkBAIC0yODY5LDcgKzI5MDYsNyBAQAogICAgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIkZhaWxlZCIpCiAgIGVsc2UoKQogICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKENUZXN0VGVzdENyYXNoIFBST1BFUlRJRVMKLSAgICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICIoSWxsZWdhbHxTZWdGYXVsdHxDaGlsZCBhYm9ydGVkKSIpCisgICAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiKElsbGVnYWx8U2VnRmF1bHR8U3VicHJvY2VzcyBhYm9ydGVkKSIpCiAgIGVuZGlmKCkKIAogICBjb25maWd1cmVfZmlsZSgKQEAgLTMzOTIsMTcgKzM0MjksNiBAQAogICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzICggS0RFTGlic0FscGhhMSBQUk9QRVJUSUVTIFRJTUVPVVQgNTQwMCkKICAgZW5kaWYoKQogCi0gICMgSWYgdGhpcyBpcyBub3QgYW4gaW4tc291cmNlIGJ1aWxkLCBwcm92aWRlIGEgdGFyZ2V0IHRvIHdpcGUgb3V0Ci0gICMgYWxsIHRoZSB0ZXN0IGJ1aWxkIGRpcmVjdG9yaWVzLgotICBpZihOT1QgRVhJU1RTICIke0NNYWtlX0JJTkFSWV9ESVJ9L0NNYWtlTGlzdHMudHh0IikKLSAgICBjb25maWd1cmVfZmlsZSgke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL3Rlc3RfY2xlYW4uY21ha2UuaW4KLSAgICAgICAgICAgICAgICAgICAke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL3Rlc3RfY2xlYW4uY21ha2UgQE9OTFkpCi0gICAgYWRkX2N1c3RvbV90YXJnZXQodGVzdF9jbGVhbgotICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1QICR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvdGVzdF9jbGVhbi5jbWFrZQotICAgICAgQ09NTUVOVCAiUmVtb3ZpbmcgdGVzdCBidWlsZCBkaXJlY3Rvcmllcy4iCi0gICAgICApCi0gIGVuZGlmKCkKLQogICAjIERlZmluZSBhIHNldCBvZiAiY29udHJhY3QiIHRlc3RzLCBlYWNoIGFjdGl2YXRlZCBieSBhIGNhY2hlIGVudHJ5CiAgICMgbmFtZWQgIkNNYWtlX1RFU1RfQ09OVFJBQ1RfPHByb2plY3Q+Ii4gIEZvciBlYWNoIENvbnRyYWN0IHRlc3QsCiAgICMgdGhlIHByb2plY3Qgc2hvdWxkIHByb3ZpZGUgYSBkaXJlY3Rvcnkgd2l0aCBhIENNYWtlTGlzdHMudHh0IGZpbGUKQEAgLTM0NDQsNiArMzQ3MCw4IEBACiAgICAgLS1idWlsZC10d28tY29uZmlnCiAgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KICAgICAtLWJ1aWxkLXByb2plY3QgSW5jbHVkZURpcmVjdG9yaWVzCisgICAgLS1idWlsZC1vcHRpb25zCisgICAgICAtRE1BS0VfU1VQUE9SVFNfU1BBQ0VTPSR7TUFLRV9TVVBQT1JUU19TUEFDRVN9CiAgICAgLS10ZXN0LWNvbW1hbmQgSW5jbHVkZURpcmVjdG9yaWVzKQogICBsaXN0KEFQUEVORCBURVNUX0JVSUxEX0RJUlMgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvSW5jbHVkZURpcmVjdG9yaWVzIikKIApAQCAtMzQ3Nyw0ICszNTA1LDE2IEBACiAgIGlmKE5PVCBDTWFrZV9URVNUX0VYVEVSTkFMX0NNQUtFKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoQ01ha2VUZXN0cykKICAgZW5kaWYoKQorCisgICMgSWYgdGhpcyBpcyBub3QgYW4gaW4tc291cmNlIGJ1aWxkLCBwcm92aWRlIGEgdGFyZ2V0IHRvIHdpcGUgb3V0CisgICMgYWxsIHRoZSB0ZXN0IGJ1aWxkIGRpcmVjdG9yaWVzLiBUaGlzIG11c3QgY29tZSBhdCB0aGUgZW5kIGFmdGVyCisgICMgYWxsIHRoZSBhYm92ZSBsb2dpYyBoYXMgZmluaXNoZWQgYWRkaW5nIHRvIFRFU1RfQlVJTERfRElSUworICBpZihOT1QgRVhJU1RTICIke0NNYWtlX0JJTkFSWV9ESVJ9L0NNYWtlTGlzdHMudHh0IikKKyAgICBjb25maWd1cmVfZmlsZSgke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL3Rlc3RfY2xlYW4uY21ha2UuaW4KKyAgICAgICAgICAgICAgICAgICAke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL3Rlc3RfY2xlYW4uY21ha2UgQE9OTFkpCisgICAgYWRkX2N1c3RvbV90YXJnZXQodGVzdF9jbGVhbgorICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1QICR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvdGVzdF9jbGVhbi5jbWFrZQorICAgICAgQ09NTUVOVCAiUmVtb3ZpbmcgdGVzdCBidWlsZCBkaXJlY3Rvcmllcy4iCisgICAgICApCisgIGVuZGlmKCkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlT25seS9BbGxGaW5kTW9kdWxlcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlT25seS9BbGxGaW5kTW9kdWxlcy9DTWFrZUxpc3RzLnR4dAppbmRleCBhNTNlNDQxLi40OWE0MDQxIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZU9ubHkvQWxsRmluZE1vZHVsZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ01ha2VPbmx5L0FsbEZpbmRNb2R1bGVzL0NNYWtlTGlzdHMudHh0CkBAIC04Niw3ICs4Niw3IEBACiBlbmRmb3JlYWNoKCkKIAogZm9yZWFjaChWVEVTVCBCSVNPTiBCb29zdCBDVURBIERPWFlHRU4gRkxFWCBHSUYgR1RLMgotICAgICAgICBIREY1IEpQRUcgTGliQXJjaGl2ZSBPUEVOU0NFTkVHUkFQSCBSVUJZIFNXSUcgUHJvdG9idWYpCisgICAgICAgIEhERjUgSlBFRyBMaWJBcmNoaXZlIE9QRU5TQ0VORUdSQVBIIFJ1YnkgUlVCWSBTV0lHIFByb3RvYnVmKQogICAgIGNoZWNrX3ZlcnNpb25fc3RyaW5nKCR7VlRFU1R9ICR7VlRFU1R9X1ZFUlNJT04pCiBlbmRmb3JlYWNoKCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VPbmx5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ01ha2VPbmx5L0NNYWtlTGlzdHMudHh0CmluZGV4IDAzYmFiZDIuLjM2MWNmNWYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlT25seS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DTWFrZU9ubHkvQ01ha2VMaXN0cy50eHQKQEAgLTMxLDEyICszMSw5IEBACiBhZGRfQ01ha2VPbmx5X3Rlc3QoQ29tcGlsZXJJZEMpCiBhZGRfQ01ha2VPbmx5X3Rlc3QoQ29tcGlsZXJJZENYWCkKIAotaWYoQ01BS0VfT0JKQ19DT01QSUxFUikKK2lmIChBUFBMRSBBTkQgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJDbGFuZ3xHTlUiKQogICBhZGRfQ01ha2VPbmx5X3Rlc3QoQ29tcGlsZXJJZE9CSkMpCiAgIGFkZF9DTWFrZU9ubHlfdGVzdChDaGVja09CSkNDb21waWxlckZsYWcpCi1lbmRpZigpCi0KLWlmKENNQUtFX09CSkNYWF9DT01QSUxFUikKICAgYWRkX0NNYWtlT25seV90ZXN0KENvbXBpbGVySWRPQkpDWFgpCiAgIGFkZF9DTWFrZU9ubHlfdGVzdChDaGVja09CSkNYWENvbXBpbGVyRmxhZykKIGVuZGlmKCkKQEAgLTc1LDYgKzcyLDEyIEBACiAKIGFkZF90ZXN0KENNYWtlT25seS5Qcm9qZWN0SW5jbHVkZUJlZm9yZSAke0NNQUtFX0NNQUtFX0NPTU1BTkR9CiAgIC1EVEVTVD1Qcm9qZWN0SW5jbHVkZUJlZm9yZQorICAtRENNQUtFX0FSR1M9LURDTUFLRV9QUk9KRUNUX1Byb2plY3RJbmNsdWRlX0lOQ0xVREVfQkVGT1JFPSR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9Qcm9qZWN0SW5jbHVkZUJlZm9yZS9pbmNsdWRlLmNtYWtlCisgIC1QICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9UZXN0LmNtYWtlCisgICkKKworYWRkX3Rlc3QoQ01ha2VPbmx5LlByb2plY3RJbmNsdWRlQmVmb3JlQW55ICR7Q01BS0VfQ01BS0VfQ09NTUFORH0KKyAgLURURVNUPVByb2plY3RJbmNsdWRlQmVmb3JlQW55CiAgIC1EQ01BS0VfQVJHUz0tRENNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkU9JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1Byb2plY3RJbmNsdWRlQmVmb3JlL2luY2x1ZGUuY21ha2UKICAgLVAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1Rlc3QuY21ha2UKICAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VPbmx5L0NoZWNrT0JKQ0NvbXBpbGVyRmxhZy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlT25seS9DaGVja09CSkNDb21waWxlckZsYWcvQ01ha2VMaXN0cy50eHQKaW5kZXggYTlhOTZlZS4uYTcxNGI3MyAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VPbmx5L0NoZWNrT0JKQ0NvbXBpbGVyRmxhZy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DTWFrZU9ubHkvQ2hlY2tPQkpDQ29tcGlsZXJGbGFnL0NNYWtlTGlzdHMudHh0CkBAIC0xLDE3ICsxLDcgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCi0KLXByb2plY3QoQ2hlY2tPQkpDQ29tcGlsZXJGbGFnKQotCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoQ2hlY2tPQkpDQ29tcGlsZXJGbGFnIE9CSkMpCiBpbmNsdWRlKENoZWNrT0JKQ0NvbXBpbGVyRmxhZykKLQotaWYoQ01BS0VfQ09NUElMRVJfSVNfR05VT0JKQykKLSAgc2V0KENPTVBJTEVSX0ZMQUcgLWZvYmpjLWRpcmVjdC1kaXNwYXRjaCkKLWVsc2UoKQotICBzZXQoQ09NUElMRVJfRkxBRyAtZm9iamMtZ2MpCi1lbmRpZigpCi0KLUNIRUNLX09CSkNfQ09NUElMRVJfRkxBR1MoJHtDT01QSUxFUl9GTEFHfSBIQVNfQ09NUElMRVJfRkxBRykKLQorY2hlY2tfb2JqY19jb21waWxlcl9mbGFnKC1ERk9PIEhBU19DT01QSUxFUl9GTEFHKQogaWYoTk9UIEhBU19DT01QSUxFUl9GTEFHKQogICBtZXNzYWdlKFNFTkRfRVJST1IgIlRlc3QgZmFpbDogSEFTX0NPTVBJTEVSX0ZMQUc6ICR7Q09NUElMRVJfRkxBR30iKQotZW5kaWYKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlT25seS9DaGVja09CSkNYWENvbXBpbGVyRmxhZy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlT25seS9DaGVja09CSkNYWENvbXBpbGVyRmxhZy9DTWFrZUxpc3RzLnR4dAppbmRleCBmODNiNzM4Li5kMDlmMGI5IDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZU9ubHkvQ2hlY2tPQkpDWFhDb21waWxlckZsYWcvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ01ha2VPbmx5L0NoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnL0NNYWtlTGlzdHMudHh0CkBAIC0xLDE3ICsxLDcgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCi0KLXByb2plY3QoQ2hlY2tPQkpDWFhDb21waWxlckZsYWcpCi0KK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KQorcHJvamVjdChDaGVja09CSkNYWENvbXBpbGVyRmxhZyBPQkpDWFgpCiBpbmNsdWRlKENoZWNrT0JKQ1hYQ29tcGlsZXJGbGFnKQotCi1pZihDTUFLRV9DT01QSUxFUl9JU19HTlVPQkpDWFgpCi0gIHNldChDT01QSUxFUl9GTEFHIC1mb2JqYy1kaXJlY3QtZGlzcGF0Y2gpCi1lbHNlKCkKLSAgc2V0KENPTVBJTEVSX0ZMQUcgLWZvYmpjLWdjKQotZW5kaWYoKQotCi1DSEVDS19PQkpDWFhfQ09NUElMRVJfRkxBR1MoJHtDT01QSUxFUl9GTEFHfSBIQVNfQ09NUElMRVJfRkxBRykKLQorY2hlY2tfb2JqY3h4X2NvbXBpbGVyX2ZsYWcoLURGT08gSEFTX0NPTVBJTEVSX0ZMQUcpCiBpZihOT1QgSEFTX0NPTVBJTEVSX0ZMQUcpCiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiVGVzdCBmYWlsOiBIQVNfQ09NUElMRVJfRkxBRzogJHtDT01QSUxFUl9GTEFHfSIpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZU9ubHkvQ2hlY2tTdHJ1Y3RIYXNNZW1iZXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DTWFrZU9ubHkvQ2hlY2tTdHJ1Y3RIYXNNZW1iZXIvQ01ha2VMaXN0cy50eHQKaW5kZXggYTU4NDUwNS4uODU5ZWM0MSAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VPbmx5L0NoZWNrU3RydWN0SGFzTWVtYmVyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NNYWtlT25seS9DaGVja1N0cnVjdEhhc01lbWJlci9DTWFrZUxpc3RzLnR4dApAQCAtNiw3ICs2LDcgQEAKIAogaW5jbHVkZShDaGVja1N0cnVjdEhhc01lbWJlcikKIAotZm9yZWFjaChfY29uZmlnX3R5cGUgUmVsZWFzZSBSZWxXaXRoRGViSW5mbyBNaW5TaXplUmVsIERlYnVnKQorZm9yZWFjaChfY29uZmlnX3R5cGUgUmVsZWFzZSBSZWxXaXRoRGViSW5mbyBEZWJ1ZykKICAgICBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfQ09ORklHVVJBVElPTiAke19jb25maWdfdHlwZX0pCiAgICAgdW5zZXQoQ1NITV9SRVNVTFRfUzFfJHtfY29uZmlnX3R5cGV9IENBQ0hFKQogICAgIHVuc2V0KENTSE1fUkVTVUxUX1MyXyR7X2NvbmZpZ190eXBlfSBDQUNIRSkKQEAgLTI2LDcgKzI2LDcgQEAKICAgICBlbmRpZigpCiBlbmRmb3JlYWNoKCkKIAotZm9yZWFjaChfY29uZmlnX3R5cGUgUmVsZWFzZSBSZWxXaXRoRGViSW5mbyBNaW5TaXplUmVsIERlYnVnKQorZm9yZWFjaChfY29uZmlnX3R5cGUgUmVsZWFzZSBSZWxXaXRoRGViSW5mbyBEZWJ1ZykKICAgICBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfQ09ORklHVVJBVElPTiAke19jb25maWdfdHlwZX0pCiAgICAgdW5zZXQoQ1NITV9SRVNVTFRfUzFfJHtfY29uZmlnX3R5cGV9X0MgQ0FDSEUpCiAgICAgdW5zZXQoQ1NITV9SRVNVTFRfUzJfJHtfY29uZmlnX3R5cGV9X0MgQ0FDSEUpCkBAIC00Niw3ICs0Niw3IEBACiAgICAgZW5kaWYoKQogZW5kZm9yZWFjaCgpCiAKLWZvcmVhY2goX2NvbmZpZ190eXBlIFJlbGVhc2UgUmVsV2l0aERlYkluZm8gTWluU2l6ZVJlbCBEZWJ1ZykKK2ZvcmVhY2goX2NvbmZpZ190eXBlIFJlbGVhc2UgUmVsV2l0aERlYkluZm8gRGVidWcpCiAgICAgc2V0KENNQUtFX1RSWV9DT01QSUxFX0NPTkZJR1VSQVRJT04gJHtfY29uZmlnX3R5cGV9KQogICAgIHVuc2V0KENTSE1fUkVTVUxUX1MxXyR7X2NvbmZpZ190eXBlfV9DWFggQ0FDSEUpCiAgICAgdW5zZXQoQ1NITV9SRVNVTFRfUzJfJHtfY29uZmlnX3R5cGV9X0NYWCBDQUNIRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlT25seS9Qcm9qZWN0SW5jbHVkZUJlZm9yZUFueS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlT25seS9Qcm9qZWN0SW5jbHVkZUJlZm9yZUFueS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Q5Y2JhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VPbmx5L1Byb2plY3RJbmNsdWRlQmVmb3JlQW55L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNSBAQAorc2V0KEZPTyBUUlVFKQorcHJvamVjdChQcm9qZWN0SW5jbHVkZSBMQU5HVUFHRVMgTk9ORSkKK2lmKE5PVCBBVVRPX0lOQ0xVREUpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImluY2x1ZGUgZmlsZSBub3QgZm91bmQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VPbmx5L1Byb2plY3RJbmNsdWRlQmVmb3JlQW55L2luY2x1ZGUuY21ha2UgYi9UZXN0cy9DTWFrZU9ubHkvUHJvamVjdEluY2x1ZGVCZWZvcmVBbnkvaW5jbHVkZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTQ3OTlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ01ha2VPbmx5L1Byb2plY3RJbmNsdWRlQmVmb3JlQW55L2luY2x1ZGUuY21ha2UKQEAgLTAsMCArMSw5IEBACitpZihOT1QgRk9PKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGT08gaXMgbm90IHNldCIpCitlbmRpZigpCisKK2lmKE5PVCAiJHtQUk9KRUNUX05BTUV9IiBTVFJFUVVBTCAiIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUFJPSkVDVF9OQU1FIHNob3VsZCBiZSBlbXB0eSIpCitlbmRpZigpCisKK3NldChBVVRPX0lOQ0xVREUgVFJVRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlT25seS9UZXN0LmNtYWtlLmluIGIvVGVzdHMvQ01ha2VPbmx5L1Rlc3QuY21ha2UuaW4KaW5kZXggMGFlOGFmMS4uYzUzMWU4YiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VPbmx5L1Rlc3QuY21ha2UuaW4KKysrIGIvVGVzdHMvQ01ha2VPbmx5L1Rlc3QuY21ha2UuaW4KQEAgLTcsNiArNywxMyBAQAogICBzZXQobWF5YmVfbWFrZV9wcm9ncmFtICItRENNQUtFX01BS0VfUFJPR1JBTT0ke21ha2VfcHJvZ3JhbX0iKQogZW5kaWYoKQogCitzZXQoX2lzTXVsdGlDb25maWcgIkBfaXNNdWx0aUNvbmZpZ0AiKQoraWYoX2lzTXVsdGlDb25maWcpCisgIHNldChjZmdfb3B0cyAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZVxcO1JlbFdpdGhEZWJJbmZvIikKK2Vsc2UoKQorICBzZXQoY2ZnX29wdHMpCitlbmRpZigpCisKIHNldChzb3VyY2VfZGlyICJAQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSQC8ke1RFU1RfU09VUkNFfSIpCiBzZXQoYmluYXJ5X2RpciAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkAvJHtURVNUfS1idWlsZCIpCiBmaWxlKFJFTU9WRV9SRUNVUlNFICIke2JpbmFyeV9kaXJ9IikKQEAgLTE2LDYgKzIzLDcgQEAKICAgIiR7c291cmNlX2Rpcn0iIC1HICJAQ01BS0VfR0VORVJBVE9SQCIKICAgLUEgIkBDTUFLRV9HRU5FUkFUT1JfUExBVEZPUk1AIgogICAtVCAiQENNQUtFX0dFTkVSQVRPUl9UT09MU0VUQCIKKyAgJHtjZmdfb3B0c30KICAgJHttYXliZV9tYWtlX3Byb2dyYW19CiAgIFdPUktJTkdfRElSRUNUT1JZICIke2JpbmFyeV9kaXJ9IgogICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZVRlc3RNdWx0aXBsZUNvbmZpZ3VyZXMvUnVuQ01ha2UuY21ha2UgYi9UZXN0cy9DTWFrZVRlc3RNdWx0aXBsZUNvbmZpZ3VyZXMvUnVuQ01ha2UuY21ha2UKaW5kZXggOTYzMjY2NC4uYTc5YmZjYiAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VUZXN0TXVsdGlwbGVDb25maWd1cmVzL1J1bkNNYWtlLmNtYWtlCisrKyBiL1Rlc3RzL0NNYWtlVGVzdE11bHRpcGxlQ29uZmlndXJlcy9SdW5DTWFrZS5jbWFrZQpAQCAtMjEsMTEgKzIxLDExIEBACiAKICMgRmlyc3Qgc2V0dXAgc291cmNlIGFuZCBiaW5hcnkgdHJlZXM6CiAjCi1leGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZV9kaXJlY3RvcnkKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmCiAgICR7ZGlyfS9Tb3VyY2UKICkKIAotZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5CitleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZgogICAke2Rpcn0vQnVpbGQKICkKIApAQCAtNjksNyArNjksNyBAQAogCiAgICMgU2F2ZSB0aGlzIGl0ZXJhdGlvbiBvZiB0aGUgQnVpbGQgZGlyZWN0b3J5OgogICAjCi0gIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZgogICAgICR7ZGlyfS9iJHtpfQogICAgICkKICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5X2RpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ01ha2VUZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NNYWtlVGVzdHMvQ01ha2VMaXN0cy50eHQKaW5kZXggMTYxOTA4MS4uMzQ4ZTZkMCAxMDA2NDQKLS0tIGEvVGVzdHMvQ01ha2VUZXN0cy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DTWFrZVRlc3RzL0NNYWtlTGlzdHMudHh0CkBAIC0zMyw4ICszMyw5IEBACiBBZGRDTWFrZVRlc3QoQ01ha2VIb3N0U3lzdGVtSW5mb3JtYXRpb24gIiIpCiAKIEFkZENNYWtlVGVzdChGaWxlRG93bmxvYWQgIiIpCi1zZXRfcHJvcGVydHkoVEVTVCBDTWFrZS5GaWxlRG93bmxvYWQgUFJPUEVSVFkKK3NldF90ZXN0c19wcm9wZXJ0aWVzKENNYWtlLkZpbGVEb3dubG9hZCBQUk9QRVJUSUVTCiAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJmaWxlIGFscmVhZHkgZXhpc3RzIHdpdGggZXhwZWN0ZWQgTUQ1IHN1bSIKKyAgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gIlVuZXhwZWN0ZWQgc3RhdHVzfGluY29ycmVjdGx5IGludGVycHJldGVkIgogICApCiBBZGRDTWFrZVRlc3QoRmlsZURvd25sb2FkQmFkSGFzaCAiIikKIHNldF9wcm9wZXJ0eShURVNUIENNYWtlLkZpbGVEb3dubG9hZEJhZEhhc2ggUFJPUEVSVFkKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlVGVzdHMvRmlsZURvd25sb2FkVGVzdC5jbWFrZS5pbiBiL1Rlc3RzL0NNYWtlVGVzdHMvRmlsZURvd25sb2FkVGVzdC5jbWFrZS5pbgppbmRleCAzOTM1NDQ5Li42OWQ5YTE0IDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZVRlc3RzL0ZpbGVEb3dubG9hZFRlc3QuY21ha2UuaW4KKysrIGIvVGVzdHMvQ01ha2VUZXN0cy9GaWxlRG93bmxvYWRUZXN0LmNtYWtlLmluCkBAIC0xLDIzICsxLDUwIEBACisjIFdlIGRvIG5vdCBjb250YWN0IGFueSByZWFsIFVSTHMsIGJ1dCBkbyB0cnkgYSBib2d1cyBvbmUuCisjIFJlbW92ZSBhbnkgcHJveHkgY29uZmlndXJhdGlvbiB0aGF0IG1heSBjaGFuZ2UgYmVoYXZpb3IuCit1bnNldChFTlZ7aHR0cF9wcm94eX0pCit1bnNldChFTlZ7aHR0cHNfcHJveHl9KQorCitzZXQodGltZW91dCA0KQorCiBpZihOT1QgIkBDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJAIiBNQVRDSEVTICJeLyIpCiAgIHNldChzbGFzaCAvKQogZW5kaWYoKQogc2V0KHVybCAiZmlsZTovLyR7c2xhc2h9QENNQUtFX0NVUlJFTlRfU09VUkNFX0RJUkAvRmlsZURvd25sb2FkSW5wdXQucG5nIikKIHNldChkaXIgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAL2Rvd25sb2FkcyIpCiAKKyMgQmV3YXJlIFdpbmRvd3MgYXN5bmNocm9ub3VzIGZpbGUvZGlyZWN0b3J5IHJlbW92YWwsIHJlbmFtZSBhbmQgdGhlbgorIyByZW1vdmUgdGhlIHJlbmFtZWQgZGlyIHNvIHdlIGNhbiBiZSBjZXJ0YWluIHRoZSBkaXIgaXNuJ3QgdGhlcmUgd2hlbgorIyB3ZSBnZXQgdG8gdGhlIGZpbGUoKSBjb21tYW5kcyBiZWxvdworaWYoRVhJU1RTICIke2Rpcn0iKQorICBmaWxlKFJFTkFNRSAke2Rpcn0gIiR7ZGlyfV9iZWluZ1JlbW92ZWQiKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke2Rpcn1fYmVpbmdSZW1vdmVkIikKK2VuZGlmKCkKKworZnVuY3Rpb24oX19yZXBvcnRJZldyb25nU3RhdHVzIHN0YXR1c1BhaXIgZXhwZWN0ZWRTdGF0dXNDb2RlKQorICBsaXN0KEdFVCBzdGF0dXNQYWlyIDAgc3RhdHVzQ29kZSkKKyAgaWYoTk9UIHN0YXR1c0NvZGUgRVFVQUwgZXhwZWN0ZWRTdGF0dXNDb2RlKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUgorICAgICAgICAgICAgIlVuZXhwZWN0ZWQgc3RhdHVzOiAke3N0YXR1c0NvZGV9LCBleHBlY3RlZDogJHtleHBlY3RlZFN0YXR1c0NvZGV9IikKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCiBtZXNzYWdlKFNUQVRVUyAiRmlsZURvd25sb2FkOjEiKQogZmlsZShET1dOTE9BRAogICAke3VybH0KICAgJHtkaXJ9L2ZpbGUxLnBuZwotICBUSU1FT1VUIDIKKyAgVElNRU9VVCAke3RpbWVvdXR9CisgIFNUQVRVUyBzdGF0dXMKICAgKQorX19yZXBvcnRJZldyb25nU3RhdHVzKCIke3N0YXR1c30iIDApCiAKIG1lc3NhZ2UoU1RBVFVTICJGaWxlRG93bmxvYWQ6MiIpCiBmaWxlKERPV05MT0FECiAgICR7dXJsfQogICAke2Rpcn0vZmlsZTIucG5nCi0gIFRJTUVPVVQgMgorICBUSU1FT1VUICR7dGltZW91dH0KKyAgU1RBVFVTIHN0YXR1cwogICBTSE9XX1BST0dSRVNTCiAgICkKK19fcmVwb3J0SWZXcm9uZ1N0YXR1cygiJHtzdGF0dXN9IiAwKQogCiAjIFR3byBjYWxscyBpbiBhIHJvdywgZXhhY3RseSB0aGUgc2FtZSBhcmd1bWVudHMuCiAjIFNpbmNlIGRvd25sb2FkZWQgZmlsZSBzaG91bGQgZXhpc3QgYWxyZWFkeSBmb3IgMm5kIGNhbGwsCkBAIC0zMSw4MiArNTgsMTIxIEBACiBmaWxlKERPV05MT0FECiAgICR7dXJsfQogICAke2Rpcn0vZmlsZTMucG5nCi0gIFRJTUVPVVQgMgorICBUSU1FT1VUICR7dGltZW91dH0KKyAgU1RBVFVTIHN0YXR1cwogICBFWFBFQ1RFRF9NRDUgZGJkMzMwZDUyZjRkYmQ2MDExNWQ0MTkxOTA0ZGVkOTIKICAgKQorX19yZXBvcnRJZldyb25nU3RhdHVzKCIke3N0YXR1c30iIDApCiAKIG1lc3NhZ2UoU1RBVFVTICJGaWxlRG93bmxvYWQ6NCIpCiBmaWxlKERPV05MT0FECiAgICR7dXJsfQogICAke2Rpcn0vZmlsZTMucG5nCi0gIFRJTUVPVVQgMgorICBUSU1FT1VUICR7dGltZW91dH0KICAgU1RBVFVTIHN0YXR1cwogICBFWFBFQ1RFRF9IQVNIIFNIQTE9NjdlZWUxN2Y3OWQ5YWM1NTcyODRmYzBiOGFkMTlmMjU3MjNmYjU3OAogICApCitfX3JlcG9ydElmV3JvbmdTdGF0dXMoIiR7c3RhdHVzfSIgMCkKIAogbWVzc2FnZShTVEFUVVMgIkZpbGVEb3dubG9hZDo1IikKIGZpbGUoRE9XTkxPQUQKICAgJHt1cmx9CiAgICR7ZGlyfS9maWxlMy5wbmcKLSAgVElNRU9VVCAyCisgIFRJTUVPVVQgJHt0aW1lb3V0fQogICBTVEFUVVMgc3RhdHVzCiAgIEVYUEVDVEVEX0hBU0ggU0hBMjI0PWJhMjgzNzI2YmJiNjAyNzc2ODE4YjQ2Mzk0MzE4OWFmZDkxODM2Y2I3ZWU1ZGQ2ZTJjN2I1YWU0CiAgICkKK19fcmVwb3J0SWZXcm9uZ1N0YXR1cygiJHtzdGF0dXN9IiAwKQogCiBtZXNzYWdlKFNUQVRVUyAiRmlsZURvd25sb2FkOjYiKQogZmlsZShET1dOTE9BRAogICAke3VybH0KICAgJHtkaXJ9L2ZpbGUzLnBuZwotICBUSU1FT1VUIDIKKyAgVElNRU9VVCAke3RpbWVvdXR9CiAgIFNUQVRVUyBzdGF0dXMKICAgRVhQRUNURURfSEFTSCBTSEEyNTY9Y2YzMzM0YjEyNzUwNzFlMWRhNmU4YzM5NmNjYjcyY2YxYjIzODhkOGM5Mzc1MjZmM2FmMjYyMzBhZmZiOTQyMwogICApCitfX3JlcG9ydElmV3JvbmdTdGF0dXMoIiR7c3RhdHVzfSIgMCkKIAogbWVzc2FnZShTVEFUVVMgIkZpbGVEb3dubG9hZDo3IikKIGZpbGUoRE9XTkxPQUQKICAgJHt1cmx9CiAgICR7ZGlyfS9maWxlMy5wbmcKLSAgVElNRU9VVCAyCisgIFRJTUVPVVQgJHt0aW1lb3V0fQogICBTVEFUVVMgc3RhdHVzCiAgIEVYUEVDVEVEX0hBU0ggU0hBMzg0PTQzYTVkMTM5NzhkOTdjNjYwZGI0NDQ4MWFlZTA2MDRjYjRmZjZjYTA3NzVjZDVjMmNkNjhjZDgwMDBlMTA3ZTUwN2M0Y2FmNmMyMjg5NDEyMzEwNDFlMjgyZmZiODk1MAogICApCitfX3JlcG9ydElmV3JvbmdTdGF0dXMoIiR7c3RhdHVzfSIgMCkKIAogbWVzc2FnZShTVEFUVVMgIkZpbGVEb3dubG9hZDo4IikKIGZpbGUoRE9XTkxPQUQKICAgJHt1cmx9CiAgICR7ZGlyfS9maWxlMy5wbmcKLSAgVElNRU9VVCAyCisgIFRJTUVPVVQgJHt0aW1lb3V0fQogICBTVEFUVVMgc3RhdHVzCiAgIEVYUEVDVEVEX0hBU0ggU0hBNTEyPTY5ODRlMDkwOWExMDE4MDMwY2NhYTQxOGUzYmUxNjU0MjIzY2RjY2ZmMGZlNmFkYzc0NWY5YWVhN2UzNzdmMTc4YmU1M2I5ZmM3ZDU0YTZmODFjMmI2MmVmOWRkY2QzOGJhMTk3OGZlZGY0YzVlNzEzOWJhYWYzNTVlZWZhZDViCiAgICkKK19fcmVwb3J0SWZXcm9uZ1N0YXR1cygiJHtzdGF0dXN9IiAwKQorCiBtZXNzYWdlKFNUQVRVUyAiRmlsZURvd25sb2FkOjkiKQogZmlsZShET1dOTE9BRAogICAke3VybH0KICAgJHtkaXJ9L2ZpbGUzLnBuZwotICBUSU1FT1VUIDIKKyAgVElNRU9VVCAke3RpbWVvdXR9CiAgIFNUQVRVUyBzdGF0dXMKICAgRVhQRUNURURfSEFTSCBNRDU9ZGJkMzMwZDUyZjRkYmQ2MDExNWQ0MTkxOTA0ZGVkOTIKICAgKQorX19yZXBvcnRJZldyb25nU3RhdHVzKCIke3N0YXR1c30iIDApCiAKIG1lc3NhZ2UoU1RBVFVTICJGaWxlRG93bmxvYWQ6MTAiKQogZmlsZShET1dOTE9BRAogICAke3VybH0KICAgJHtkaXJ9L2ZpbGUzLnBuZwotICBUSU1FT1VUIDIKKyAgVElNRU9VVCAke3RpbWVvdXR9CiAgIFNUQVRVUyBzdGF0dXMKICAgRVhQRUNURURfTUQ1IGRiZDMzMGQ1MmY0ZGJkNjAxMTVkNDE5MTkwNGRlZDkyCiAgICkKK19fcmVwb3J0SWZXcm9uZ1N0YXR1cygiJHtzdGF0dXN9IiAwKQorIyBQcmludCBzdGF0dXMgYmVjYXVzZSB3ZSBjaGVjayBpdHMgbWVzc2FnZSB0b28KIG1lc3NhZ2UoU1RBVFVTICIke3N0YXR1c30iKQogCiBtZXNzYWdlKFNUQVRVUyAiRmlsZURvd25sb2FkOjExIikKIGZpbGUoRE9XTkxPQUQKLSAgYmFkaG9zdG5hbWUucG5nCisgIGJhZGhvc3RuYW1lLmludmFsaWQKICAgJHtkaXJ9L2ZpbGUxMS5wbmcKLSAgVElNRU9VVCAyCisgIFRJTUVPVVQgMzAKICAgU1RBVFVTIHN0YXR1cwogICApCiBtZXNzYWdlKFNUQVRVUyAiJHtzdGF0dXN9IikKLWxpc3QoR0VUIHN0YXR1cyAwIHN0YXR1c19jb2RlKQotaWYoTk9UICR7c3RhdHVzX2NvZGV9IEVRVUFMIDYpCi0gIG1lc3NhZ2UoU0VORF9FUlJPUiAiZXJyb3I6IGV4cGVjdGVkIHN0YXR1cyBjb2RlIDYgZm9yIGJhZCBob3N0IG5hbWUsIGdvdDogJHtzdGF0dXNfY29kZX0iKQorX19yZXBvcnRJZldyb25nU3RhdHVzKCIke3N0YXR1c30iIDYpICMgNiBjb3JyZXNwb25kcyB0byBhbiB1bnJlc29sdmFibGUgaG9zdCBuYW1lCisKK21lc3NhZ2UoU1RBVFVTICJGaWxlRG93bmxvYWQ6MTIiKQorc2V0KGFic0ZpbGUgIkBDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJAL2ZpbGUxMi5wbmciKQoraWYoRVhJU1RTICIke2Fic0ZpbGV9IikKKyAgZmlsZShSRU5BTUUgJHthYnNGaWxlfSAiJHthYnNGaWxlfV9iZWluZ1JlbW92ZWQiKQorICBmaWxlKFJFTU9WRSAiJHthYnNGaWxlfV9iZWluZ1JlbW92ZWQiKQogZW5kaWYoKQorZmlsZShET1dOTE9BRAorICAke3VybH0KKyAgZmlsZTEyLnBuZworICBUSU1FT1VUICR7dGltZW91dH0KKyAgRVhQRUNURURfTUQ1IGRiZDMzMGQ1MmY0ZGJkNjAxMTVkNDE5MTkwNGRlZDkyCisgIFNUQVRVUyBzdGF0dXMKKyAgKQorX19yZXBvcnRJZldyb25nU3RhdHVzKCIke3N0YXR1c30iIDApCitpZihOT1QgRVhJU1RTIGZpbGUxMi5wbmcpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiZmlsZTEyLnBuZyBub3QgZG93bmxvYWRlZDogJHtzdGF0dXN9IikKK2VuZGlmKCkKKworbWVzc2FnZShTVEFUVVMgIkZpbGVEb3dubG9hZDoxMyIpCitmaWxlKERPV05MT0FECisgICR7dXJsfQorICBUSU1FT1VUICR7dGltZW91dH0KKyAgU1RBVFVTIHN0YXR1cworICApCitfX3JlcG9ydElmV3JvbmdTdGF0dXMoIiR7c3RhdHVzfSIgMCkKK2lmKEVYSVNUUyBUSU1FT1VUKQorICBmaWxlKFJFTU9WRSBUSU1FT1VUKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlRJTUVPVVQgYXJndW1lbnQgd2FzIGluY29ycmVjdGx5IGludGVycHJldGVkIGFzIGEgZmlsZW5hbWUiKQorZW5kaWYoKQorbWVzc2FnZShTVEFUVVMgIiR7c3RhdHVzfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9DTWFrZVRlc3RzL0ZpbGVUZXN0U2NyaXB0LmNtYWtlIGIvVGVzdHMvQ01ha2VUZXN0cy9GaWxlVGVzdFNjcmlwdC5jbWFrZQppbmRleCA5YTQzNTY5Li5mYzNjMjhhIDEwMDY0NAotLS0gYS9UZXN0cy9DTWFrZVRlc3RzL0ZpbGVUZXN0U2NyaXB0LmNtYWtlCisrKyBiL1Rlc3RzL0NNYWtlVGVzdHMvRmlsZVRlc3RTY3JpcHQuY21ha2UKQEAgLTEwLDcgKzEwLDcgQEAKICAgZmlsZShESUZGRVJFTlQgZmZmZikKIAogZWxzZWlmKHRlc3RuYW1lIFNUUkVRVUFMIGRvd25sb2FkX25vdF9lbm91Z2hfYXJncykgIyBmYWlsCi0gIGZpbGUoRE9XTkxPQUQgZmZmZikKKyAgZmlsZShET1dOTE9BRCkKIAogZWxzZWlmKHRlc3RuYW1lIFNUUkVRVUFMIHJlYWRfbm90X2Vub3VnaF9hcmdzKSAjIGZhaWwKICAgZmlsZShSRUFEIGZmZmYpCkBAIC0xODEsOSArMTgxLDkgQEAKICAgbWVzc2FnZSgidj0nJHt2fSciKQogCiBlbHNlaWYodGVzdG5hbWUgU1RSRVFVQUwgZG93bmxvYWRfd3JvbmdfbnVtYmVyX29mX2FyZ3MpICMgZmFpbAotICBmaWxlKERPV05MT0FEIHp6eno6Ly9ib2d1cy9mZmZmKQorICBmaWxlKERPV05MT0FEKQogCi1lbHNlaWYodGVzdG5hbWUgU1RSRVFVQUwgZG93bmxvYWRfZmlsZV93aXRoX25vX3BhdGgpICMgZmFpbAorZWxzZWlmKHRlc3RuYW1lIFNUUkVRVUFMIGRvd25sb2FkX2ZpbGVfd2l0aF9ub19wYXRoKSAjIHBhc3MKICAgZmlsZShET1dOTE9BRCB6enp6Oi8vYm9ndXMvZmZmZiBmZmZmKQogCiBlbHNlaWYodGVzdG5hbWUgU1RSRVFVQUwgZG93bmxvYWRfbWlzc2luZ190aW1lKSAjIGZhaWwKZGlmZiAtLWdpdCBhL1Rlc3RzL0NNYWtlVGVzdHMvTGlzdFRlc3QuY21ha2UuaW4gYi9UZXN0cy9DTWFrZVRlc3RzL0xpc3RUZXN0LmNtYWtlLmluCmluZGV4IGY1MTdlNjQuLjc4NWY0MWQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NNYWtlVGVzdHMvTGlzdFRlc3QuY21ha2UuaW4KKysrIGIvVGVzdHMvQ01ha2VUZXN0cy9MaXN0VGVzdC5jbWFrZS5pbgpAQCAtODUsNiArODUsOSBAQAogbGlzdChTT1JUIHJlc3VsdCkKIFRFU1QoIlNPUlQgcmVzdWx0IiAiYW5keTtiaWxsO2JyYWQ7a2VuIikKIAorbGlzdChTT1JUIHJlc3VsdCBDT01QQVJFIE5BVFVSQUwpCitURVNUKCJTT1JUIHJlc3VsdCBDT01QQVJFIE5BVFVSQUwiICJhbmR5O2JpbGw7YnJhZDtrZW4iKQorCiBzZXQocmVzdWx0IGFuZHkgYmlsbCBicmFkIGtlbikKIGxpc3QoUkVWRVJTRSByZXN1bHQpCiBURVNUKCJSRVZFUlNFIHJlc3VsdCIgImtlbjticmFkO2JpbGw7YW5keSIpCkBAIC0xMDQsNiArMTA3LDI2IEBACiBsaXN0KFNPUlQgcmVzdWx0KQogVEVTVCgiU09SVCBlbXB0eSByZXN1bHQiICIiKQogCitsaXN0KFNPUlQgcmVzdWx0IENPTVBBUkUgTkFUVVJBTCkKK1RFU1QoIlNPUlQgcmVzdWx0IENPTVBBUkUgTkFUVVJBTCIgIiIpCisKK3NldChyZXN1bHQgMS4xIDEwLjAgMTEuMCAxMi4wIDEyLjEgMi4wIDIuMSAzLjAgMy4xIDMuMiA4LjAgOS4wKQorCitsaXN0KFNPUlQgcmVzdWx0IENPTVBBUkUgTkFUVVJBTCkKK1RFU1QoIlNPUlQgcmVzdWx0IENPTVBBUkUgTkFUVVJBTCIgIjEuMTsyLjA7Mi4xOzMuMDszLjE7My4yOzguMDs5LjA7MTAuMDsxMS4wOzEyLjA7MTIuMSIpCisKK2xpc3QoU09SVCByZXN1bHQpCitURVNUKCJTT1JUIHJlc3VsdCIgIjEuMTsxMC4wOzExLjA7MTIuMDsxMi4xOzIuMDsyLjE7My4wOzMuMTszLjI7OC4wOzkuMCIpCisKK2xpc3QoU09SVCByZXN1bHQgQ09NUEFSRSBOQVRVUkFMIE9SREVSIERFU0NFTkRJTkcpCitURVNUKCJTT1JUIHJlc3VsdCBDT01QQVJFIE5BVFVSQUwgT1JERVIgREVTQ0VORElORyIgIjEyLjE7MTIuMDsxMS4wOzEwLjA7OS4wOzguMDszLjI7My4xOzMuMDsyLjE7Mi4wOzEuMSIpCisKK3NldChyZXN1bHQgYi0xLjEgYS0xMC4wIGMtMi4wIGQgMSAwMCAwKQorCitsaXN0KFNPUlQgcmVzdWx0IENPTVBBUkUgTkFUVVJBTCkKK1RFU1QoIlNPUlQgcmVzdWx0IENPTVBBUkUgTkFUVVJBTCIgIjAwOzA7MTthLTEwLjA7Yi0xLjE7Yy0yLjA7ZCIpCisKKwogIyB0aGVzZSB0cmlnZ2VyIHRvcC1sZXZlbCBjb25kaXRpb24KIGZvcmVhY2goY21kIElOIElURU1TIEFwcGVuZCBGaW5kIEdldCBJbnNlcnQgTGVuZ3RoIFJldmVyc2UgUmVtb3ZlX0F0IFJlbW92ZV9EdXBsaWNhdGVzIFJlbW92ZV9JdGVtIFNvcnQpCiAgIHNldCgke2NtZH0tTm8tQXJndW1lbnRzLVJFU1VMVCAxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ09ubHkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DT25seS9DTWFrZUxpc3RzLnR4dAppbmRleCAyMDYxNWZlLi4xYzI0MDE3IDEwMDY0NAotLS0gYS9UZXN0cy9DT25seS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DT25seS9DTWFrZUxpc3RzLnR4dApAQCAtMSw1ICsxLDUgQEAKICMgYSBzaW1wbGUgQyBvbmx5IHRlc3QgY2FzZQotY21ha2VfbWluaW11bV9yZXF1aXJlZCAoVkVSU0lPTiAyLjYpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCAoQ09ubHkgQykKIAogc2V0KENNQUtFX0RFQlVHX1BPU1RGSVggIl90ZXN0X2RlYnVnX3Bvc3RmaXgiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tDb21wb25lbnRzL0lzc3VlIDc0NzAuaHRtbCBiL1Rlc3RzL0NQYWNrQ29tcG9uZW50cy9Jc3N1ZSA3NDcwLmh0bWwKaW5kZXggYzJhMTY4OC4uNTlmYmVlNyAxMDA2NDQKLS0tIGEvVGVzdHMvQ1BhY2tDb21wb25lbnRzL0lzc3VlIDc0NzAuaHRtbAorKysgYi9UZXN0cy9DUGFja0NvbXBvbmVudHMvSXNzdWUgNzQ3MC5odG1sCkBAIC0zLDcgKzMsNyBAQAogVGhlIGluc3RhbGwgcnVsZSBmb3IgdGhpcyBmaWxlIGRlbW9uc3RyYXRlcyB0aGUgcHJvYmxlbSBkZXNjcmliZWQgaW48YnIvPgogQ01ha2UgaXNzdWUgIzc0NzA6PGJyLz4KIDxici8+Ci08YSBocmVmPSJodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvNzQ3MCI+Ci1odHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS9pc3N1ZXMvNzQ3MDwvYT48YnIvPgorPGEgaHJlZj0iaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvLS9pc3N1ZXMvNzQ3MCI+CitodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy83NDcwPC9hPjxici8+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja0NvbXBvbmVudHNERUIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DUGFja0NvbXBvbmVudHNERUIvQ01ha2VMaXN0cy50eHQKaW5kZXggYmM1YjZhOS4uNDM2M2YxYiAxMDA2NDQKLS0tIGEvVGVzdHMvQ1BhY2tDb21wb25lbnRzREVCL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NQYWNrQ29tcG9uZW50c0RFQi9DTWFrZUxpc3RzLnR4dApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgIENPTVBPTkVOVCBhcHBsaWNhdGlvbnMpCiAKIGlmKEVYSVNUUyAiLi9kaXJ0ZXN0IikKLSAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5IC4vZGlydGVzdCkKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtcmYgLi9kaXJ0ZXN0KQogZW5kaWYoKQogIyBOT1RFOiBkaXJlY3RvcnkgbGVmdCBlbXB0eSBvbiBwdXJwb3NlCiBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIG1ha2VfZGlyZWN0b3J5IC4vZGlydGVzdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0NQYWNrQ29tcG9uZW50c0RFQi9NeUxpYkNQYWNrQ29uZmlnLWNvbXBvbmVudHMtZGVzY3JpcHRpb24xLmNtYWtlLmluIGIvVGVzdHMvQ1BhY2tDb21wb25lbnRzREVCL015TGliQ1BhY2tDb25maWctY29tcG9uZW50cy1kZXNjcmlwdGlvbjEuY21ha2UuaW4KaW5kZXggNjdiMTA4Yi4uZmI5NzNhZCAxMDA2NDQKLS0tIGEvVGVzdHMvQ1BhY2tDb21wb25lbnRzREVCL015TGliQ1BhY2tDb25maWctY29tcG9uZW50cy1kZXNjcmlwdGlvbjEuY21ha2UuaW4KKysrIGIvVGVzdHMvQ1BhY2tDb21wb25lbnRzREVCL015TGliQ1BhY2tDb25maWctY29tcG9uZW50cy1kZXNjcmlwdGlvbjEuY21ha2UuaW4KQEAgLTE2LDcgKzE2LDcgQEAKIAogIyBvdmVycmlkaW5nIHByZXZpb3VzIGRlc2NyaXB0aW9ucwogc2V0KENQQUNLX1BBQ0tBR0VfREVTQ1JJUFRJT05fU1VNTUFSWSAibWFpbiBkZXNjcmlwdGlvbiIpICMgVGhpcyBiZWNvbWUgYSBzdW1tYXJ5IGxpbmUgKHRoZSBmaXJzdCBvbmUpIG9mIGFsbCBkZXNjcmlwdGlvbnMKLXNldChDUEFDS19DT01QT05FTlRfQVBQTElDQVRJT05TX0RFU0NSSVBUSU9OICJhcHBsaWNhdGlvbnNfZGVzY3JpcHRpb24iKQorc2V0KENQQUNLX0NPTVBPTkVOVF9BUFBMSUNBVElPTlNfREVTQ1JJUFRJT04gImFwcGxpY2F0aW9uc19kZXNjcmlwdGlvblxuIikKIHNldChDUEFDS19DT01QT05FTlRfSEVBREVSU19ERVNDUklQVElPTiAiaGVhZGVyc19kZXNjcmlwdGlvbiIpCiAjIGxpYnJhcmllcyBkb2VzIG5vdCBoYXZlIGFueSBkZXNjcmlwdGlvbiBhbmQgc2hvdWxkIGluaGVyaXQgZnJvbSBDUEFDS19QQUNLQUdFX0RFU0NSSVBUSU9OX1NVTU1BUlkKICMgcGx1cyBjb250ZW50IG9mIHRoZSBgQ1BBQ0tfUEFDS0FHRV9ERVNDUklQVElPTl9GSUxFYC4KZGlmZiAtLWdpdCBhL1Rlc3RzL0NQYWNrQ29tcG9uZW50c0RFQi9SdW5DUGFja1ZlcmlmeVJlc3VsdC5jbWFrZSBiL1Rlc3RzL0NQYWNrQ29tcG9uZW50c0RFQi9SdW5DUGFja1ZlcmlmeVJlc3VsdC5jbWFrZQppbmRleCBiMTcyZGEyLi4zYmM4ZDJhIDEwMDY0NAotLS0gYS9UZXN0cy9DUGFja0NvbXBvbmVudHNERUIvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKKysrIGIvVGVzdHMvQ1BhY2tDb21wb25lbnRzREVCL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC00NSw3ICs0NSw3IEBACiAKICAgbWVzc2FnZSgiY29uZmlnX2FyZ3MgPSAke3J1bl9jcGFja19kZWJfQ09ORklHX0FSR1N9IikKICAgbWVzc2FnZSgiY29uZmlnX3ZlcmJvc2UgPSAke3J1bl9jcGFja19kZWJfQ09ORklHX1ZFUkJPU0V9IikKLSAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DUEFDS19DT01NQU5EfSAke3J1bl9jcGFja19kZWJfQ09ORklHX1ZFUkJPU0V9IC1HICR7Q1BhY2tHZW59ICR7cnVuX2NwYWNrX2RlYl9DT05GSUdfQVJHU30KKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DUEFDS19DT01NQU5EfSAke3J1bl9jcGFja19kZWJfQ09ORklHX1ZFUkJPU0V9IC1HICR7Q1BhY2tHZW59IC1DICIke0NPTkZJR30iICR7cnVuX2NwYWNrX2RlYl9DT05GSUdfQVJHU30KICAgICAgIFJFU1VMVF9WQVJJQUJMRSBDUGFja19yZXN1bHQKICAgICAgIE9VVFBVVF9WQVJJQUJMRSBDUGFja19vdXRwdXQKICAgICAgIEVSUk9SX1ZBUklBQkxFIENQYWNrX2Vycm9yCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja0NvbXBvbmVudHNGb3JBbGwvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UgYi9UZXN0cy9DUGFja0NvbXBvbmVudHNGb3JBbGwvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKaW5kZXggMjUzZDEyOC4uZjNkM2FkMCAxMDA2NDQKLS0tIGEvVGVzdHMvQ1BhY2tDb21wb25lbnRzRm9yQWxsL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlCisrKyBiL1Rlc3RzL0NQYWNrQ29tcG9uZW50c0ZvckFsbC9SdW5DUGFja1ZlcmlmeVJlc3VsdC5jbWFrZQpAQCAtODgsMTIgKzg4LDE0IEBACiAgICAgc2V0KGV4cGVjdGVkX2ZpbGVfbWFzayAiJHtDUGFja0NvbXBvbmVudHNGb3JBbGxfQklOQVJZX0RJUn0vTXlMaWItKi5kbWciKQogICAgIGlmKCR7Q1BhY2tDb21wb25lbnRXYXl9IFNUUkVRVUFMICJkZWZhdWx0IikKICAgICAgICAgc2V0KGV4cGVjdGVkX2NvdW50IDEpCisgICAgICAgIHNldChleHBlY3RfZG1nX3NsYSAxKQogICAgIGVsc2VpZigke0NQYWNrQ29tcG9uZW50V2F5fSBTVFJFUVVBTCAiT25lUGFja1Blckdyb3VwIikKICAgICAgICAgc2V0KGV4cGVjdGVkX2NvdW50IDMpCiAgICAgZWxzZWlmKCR7Q1BhY2tDb21wb25lbnRXYXl9IFNUUkVRVUFMICJJZ25vcmVHcm91cCIpCiAgICAgICAgIHNldChleHBlY3RlZF9jb3VudCA0KQogICAgIGVsc2VpZigke0NQYWNrQ29tcG9uZW50V2F5fSBTVFJFUVVBTCAiQWxsSW5PbmUiKQogICAgICAgICBzZXQoZXhwZWN0ZWRfY291bnQgMSkKKyAgICAgICAgc2V0KGV4cGVjdF9kbWdfc2xhIDEpCiAgICAgZW5kaWYoKQogZW5kaWYoKQogCkBAIC0xMzgsNiArMTQwLDM2IEBACiAgIGlmKE5PVCBhY3R1YWxfY291bnQgRVFVQUwgZXhwZWN0ZWRfY291bnQpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXJyb3I6IGV4cGVjdGVkX2NvdW50PSR7ZXhwZWN0ZWRfY291bnR9IGRvZXMgbm90IG1hdGNoIGFjdHVhbF9jb3VudD0ke2FjdHVhbF9jb3VudH06IENQYWNrQ29tcG9uZW50cyB0ZXN0IGZhaWxzLiAoQ1BhY2tfb3V0cHV0PSR7Q1BhY2tfb3V0cHV0fSwgQ1BhY2tfZXJyb3I9JHtDUGFja19lcnJvcn0pIikKICAgZW5kaWYoKQorCisgIGlmKGV4cGVjdF9kbWdfc2xhKQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EIGhkaXV0aWwgdWRpZmRlcmV6IC14bWwgIiR7ZXhwZWN0ZWRfZmlsZX0iIE9VVFBVVF9WQVJJQUJMRSBvdXQgRVJST1JfVkFSSUFCTEUgZXJyIFJFU1VMVF9WQVJJQUJMRSByZXMpCisgICAgaWYoTk9UIHJlcyBFUVVBTCAwKQorICAgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgZXJyICIgICR7ZXJyfSIpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJlcnJvcjogcnVubmluZyAnaGRpdXRpbCB1ZGlmZGVyZXogLXhtbCcgb25cbiAgJHtleHBlY3RlZF9maWxlfVxuZmFpbGVkIHdpdGg6XG4ke2Vycn0iKQorICAgIGVuZGlmKCkKKyAgICBmb3JlYWNoKGtleSAiTFBpYyIgIlNUUiMiICJURVhUIikKKyAgICAgIGlmKE5PVCBvdXQgTUFUQ0hFUyAiPGtleT4ke2tleX08L2tleT4iKQorICAgICAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBvdXQgIiAgJHtvdXR9IikKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXJyb3I6IHJ1bm5pbmcgJ2hkaXV0aWwgdWRpZmRlcmV6IC14bWwnIG9uXG4gICR7ZXhwZWN0ZWRfZmlsZX1cbmRpZCBub3Qgc2hvdyAnJHtrZXl9JyBrZXk6XG4ke291dH0iKQorICAgICAgZW5kaWYoKQorICAgIGVuZGZvcmVhY2goKQorICAgIGZvcmVhY2gobGluZQorICAgICAgICAjIExQaWMgZmlyc3QgYW5kIGxhc3QgYmFzZTY0IGxpbmVzCisgICAgICAgICJcdEFBSUFFUUFEQUFFQUFBQUFBQUlBQUFBSUFBTUFBQUFCQUFRQUFBQUVBQVVBQUFBT0FBWUFcbiIKKyAgICAgICAgIlx0QUEwQUFBQmJBQVFBQUFBekFBOEFBUUFNQUJBQUFBQUxBQTRBQUE9PVxuIgorICAgICAgICAjIFNUUiMgZmlyc3QgYW5kIGxhc3QgYmFzZTY0IGxpbmVzCisgICAgICAgICJcdEFBa0hSVzVuYkdsemFBVkJaM0psWlFoRWFYTmhaM0psWlFWUWNtbHVkQWRUWVhabExpNHVcbiIKKyAgICAgICAgIlx0ZEdWa0lHRWdjSEpwYm5SbGNpND1cbiIKKyAgICAgICAgIyBURVhUIGZpcnN0IGFuZCBsYXN0IGJhc2U2NCBsaW5lcworICAgICAgICAiXHRURWxEUlU1VFJRMHRMUzB0TFMwdERWUm9hWE1nYVhNZ1lXNGdhVzV6ZEdGc2JHVnlJR055XG4iCisgICAgICAgICJcdFRtOGdiR2xqWlc1elpTQndjbTkyYVdSbFpDNE5EUT09XG4iCisgICAgICAgICkKKyAgICAgIGlmKE5PVCBvdXQgTUFUQ0hFUyAiJHtsaW5lfSIpCisgICAgICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIG91dCAiICAke291dH0iKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJlcnJvcjogcnVubmluZyAnaGRpdXRpbCB1ZGlmZGVyZXogLXhtbCcgb25cbiAgJHtleHBlY3RlZF9maWxlfVxuZGlkIG5vdCBzaG93ICcke2xpbmV9JzpcbiR7b3V0fSIpCisgICAgICBlbmRpZigpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogIyBWYWxpZGF0ZSBjb250ZW50CmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkNGQ1OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDIxIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKKworcHJvamVjdChDUGFja05TSVNHZW5lcmF0b3IpCisKK2FkZF9leGVjdXRhYmxlKGhlbGxvIG1haW4uY3BwKQorCitpbnN0YWxsKFRBUkdFVFMgaGVsbG8KKyAgQVJDSElWRSBERVNUSU5BVElPTiAuCisgIFJVTlRJTUUgREVTVElOQVRJT04gLgorICBMSUJSQVJZIERFU1RJTkFUSU9OIC4KKyAgQlVORExFIERFU1RJTkFUSU9OIC4pCisKK3NldChDUEFDS19OU0lTX01VSV9IRUFERVJJTUFHRSAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9XFxcXGhlYWRlci1pbWFnZS5ibXAiKQorc2V0KENQQUNLX1BBQ0tBR0VfSUNPTiAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9XFxcXGhlYWRlci1pY29uLmJtcCIpCitzZXQoQ1BBQ0tfTlNJU19NVUlfSUNPTiAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9XFxcXGluc3RhbGwuaWNvIikKK3NldChDUEFDS19OU0lTX01VSV9VTklJQ09OICIke1BST0pFQ1RfU09VUkNFX0RJUn1cXFxcdW5pbnN0YWxsLmljbyIpCitzZXQoQ1BBQ0tfR0VORVJBVE9SICJOU0lTIikKK3NldChDUEFDS19OU0lTX0VOQUJMRV9VTklOU1RBTExfQkVGT1JFX0lOU1RBTEwgT04pCitzZXQoQ1BBQ0tfTlNJU19NQU5JRkVTVF9EUElfQVdBUkUgT04pCisKK2luY2x1ZGUoQ1BhY2spCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvUnVuQ1BhY2tWZXJpZnlSZXN1bHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiY2Y5YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9SdW5DUGFja1ZlcmlmeVJlc3VsdC5jbWFrZQpAQCAtMCwwICsxLDU0IEBACittZXNzYWdlKFNUQVRVUyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIpCittZXNzYWdlKFNUQVRVUyAiQ1RFU1RfRlVMTF9PVVRQVVQgKEF2b2lkIGN0ZXN0IHRydW5jYXRpb24gb2Ygb3V0cHV0KSIpCittZXNzYWdlKFNUQVRVUyAiIikKKworaWYoTk9UIENQYWNrTlNJU0dlbmVyYXRvcl9CSU5BUllfRElSKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDUGFja05TSVNHZW5lcmF0b3JfQklOQVJZX0RJUiBub3Qgc2V0IikKK2VuZGlmKCkKKworbWVzc2FnZShTVEFUVVMgIkNNQUtFX0NPTU1BTkQ6ICR7Q01BS0VfQ09NTUFORH0iKQorbWVzc2FnZShTVEFUVVMgIkNNQUtFX0NQQUNLX0NPTU1BTkQ6ICR7Q01BS0VfQ1BBQ0tfQ09NTUFORH0iKQorbWVzc2FnZShTVEFUVVMgIkNQYWNrTlNJU0dlbmVyYXRvcl9CSU5BUllfRElSOiAke0NQYWNrTlNJU0dlbmVyYXRvcl9CSU5BUllfRElSfSIpCisKK2lmKGNvbmZpZykKKyAgc2V0KF9DX2NvbmZpZyAtQyAke2NvbmZpZ30pCitlbmRpZigpCisKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICIke0NNQUtFX0NQQUNLX0NPTU1BTkR9IgorICAgICAgICAgICAgICAgICAgICAgICAgJHtfQ19jb25maWd9CisgIFJFU1VMVF9WQVJJQUJMRSBDUGFja19yZXN1bHQKKyAgT1VUUFVUX1ZBUklBQkxFIENQYWNrX291dHB1dAorICBFUlJPUl9WQVJJQUJMRSBDUGFja19lcnJvcgorICBXT1JLSU5HX0RJUkVDVE9SWSAiJHtDUGFja05TSVNHZW5lcmF0b3JfQklOQVJZX0RJUn0iKQorCitpZihDUGFja19yZXN1bHQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNQYWNrIGV4ZWN1dGlvbiB3ZW50IHdyb25nISwgQ1BhY2tfb3V0cHV0PSR7Q1BhY2tfb3V0cHV0fSwgQ1BhY2tfZXJyb3I9JHtDUGFja19lcnJvcn0iKQorZWxzZSAoKQorICBtZXNzYWdlKFNUQVRVUyAiQ1BhY2tfb3V0cHV0PSR7Q1BhY2tfb3V0cHV0fSIpCitlbmRpZigpCisKK3NldChleHBlY3RlZF9maWxlX21hc2sgIiR7Q1BhY2tOU0lTR2VuZXJhdG9yX0JJTkFSWV9ESVJ9L19DUGFja19QYWNrYWdlcy8qL05TSVMvKi5uc2kiKQorZmlsZShHTE9CIHByb2plY3RfZmlsZSAiJHtleHBlY3RlZF9maWxlX21hc2t9IikKKworbWVzc2FnZShTVEFUVVMgInByb2plY3RfZmlsZT0nJHtwcm9qZWN0X2ZpbGV9JyIpCittZXNzYWdlKFNUQVRVUyAiZXhwZWN0ZWRfZmlsZV9tYXNrPScke2V4cGVjdGVkX2ZpbGVfbWFza30nIikKKworaWYoTk9UIHByb2plY3RfZmlsZSkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAicHJvamVjdF9maWxlIGRvZXMgbm90IGV4aXN0LiIpCitlbmRpZigpCisKKyMgc2hvdWxkIG1hdGNoICFkZWZpbmUgTVVJX0hFQURFUklNQUdFX0JJVE1BUCAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9XGhlYWRlci1pbWFnZS5ibXAiCitmaWxlKFNUUklOR1MgIiR7cHJvamVjdF9maWxlfSIgbGluZSBSRUdFWCAiXiFkZWZpbmUgTVVJX0hFQURFUklNQUdFX0JJVE1BUCIpCitzdHJpbmcoRklORCAiJHtsaW5lfSIgImhlYWRlci1pbWFnZS5ibXAiIG91dHB1dF9pbmRleCkKK21lc3NhZ2UoU1RBVFVTICJGb3VuZCB0aGUgYml0bWFwIGF0IGluZGV4ICR7b3V0cHV0X2luZGV4fSIpCitpZigiJHtvdXRwdXRfaW5kZXh9IiBFUVVBTCAiLTEiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJNVUlfSEVBREVSSU1BR0VfQklUTUFQIG5vdCBmb3VuZCBpbiB0aGUgcHJvamVjdCIpCitlbmRpZigpCisKK2ZpbGUoU1RSSU5HUyAiJHtwcm9qZWN0X2ZpbGV9IiBsaW5lIFJFR0VYICJeTWFuaWZlc3REUElBd2FyZSB0cnVlIikKK3N0cmluZyhGSU5EICIke2xpbmV9IiAidHJ1ZSIgb3V0cHV0X2luZGV4KQoraWYoIiR7b3V0cHV0X2luZGV4fSIgRVFVQUwgIi0xIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTWFuaWZlc3REUElBd2FyZSB0cnVlIG5vdCBmb3VuZCBpbiB0aGUgcHJvamVjdCIpCitlbHNlKCkKKyAgbWVzc2FnZShTVEFUVVMgIkZvdW5kIERQSS1hd2FyZSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvaGVhZGVyLWljb24uYm1wIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL2hlYWRlci1pY29uLmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjZhNjU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL2hlYWRlci1pY29uLmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvaGVhZGVyLWltYWdlLmJtcCBiL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9oZWFkZXItaW1hZ2UuYm1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YjE3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvaGVhZGVyLWltYWdlLmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvaW5zdGFsbC5pY28gYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvaW5zdGFsbC5pY28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxZTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9pbnN0YWxsLmljbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvbWFpbi5jcHAgYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2ZjM0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NQYWNrTlNJU0dlbmVyYXRvci9tYWluLmNwcApAQCAtMCwwICsxLDQgQEAKK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIDQyOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL3VuaW5zdGFsbC5pY28gYi9UZXN0cy9DUGFja05TSVNHZW5lcmF0b3IvdW5pbnN0YWxsLmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY2MzE2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ1BhY2tOU0lTR2VuZXJhdG9yL3VuaW5zdGFsbC5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DUGFja1dpWEdlbmVyYXRvci9DTWFrZUxpc3RzLnR4dAppbmRleCA3M2VhZjRmLi45NDBlODQ5IDEwMDY0NAotLS0gYS9UZXN0cy9DUGFja1dpWEdlbmVyYXRvci9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DUGFja1dpWEdlbmVyYXRvci9DTWFrZUxpc3RzLnR4dApAQCAtNDksNiArNDksOSBAQAogc2V0KENQQUNLX1dJWF9VUEdSQURFX0dVSUQgIkJGMjBDRTVFLTdGN0MtNDAxRC04RjdDLUFCNDVFOEQxNzBFNiIpCiBzZXQoQ1BBQ0tfV0lYX1VOSU5TVEFMTCAiMSIpCiAKKyMgU3VwcG9ydCBub24taW50ZXJhY3RpdmUgc2Vzc2lvbnMgKGxpa2UgQ0kpLgorc2V0KENQQUNLX1dJWF9MSUdIVF9FWFRSQV9GTEFHUyAiLXN2YWwiKQorCiBzZXQoQ1BBQ0tfUEFDS0FHRV9FWEVDVVRBQkxFUwogICAibXktbGliYXBwIiAiQ1BhY2sgV2lYIFRlc3QiCiAgICJteS1vdGhlci1hcHAiICJTZWNvbmQgQ1BhY2sgV2lYIFRlc3QiCmRpZmYgLS1naXQgYS9UZXN0cy9DUGFja1dpWEdlbmVyYXRvci9SdW5DUGFja1ZlcmlmeVJlc3VsdC5jbWFrZSBiL1Rlc3RzL0NQYWNrV2lYR2VuZXJhdG9yL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlCmluZGV4IGNhOWZkOTAuLmM1NDllNjEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NQYWNrV2lYR2VuZXJhdG9yL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlCisrKyBiL1Rlc3RzL0NQYWNrV2lYR2VuZXJhdG9yL1J1bkNQYWNrVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC03NCw0ICs3NCw2IEBACiAjIGVycm9yIFNNT0sxMDc2IDogSUNFNjE6IFRoaXMgcHJvZHVjdCBzaG91bGQgcmVtb3ZlIG9ubHkgb2xkZXIKICMgdmVyc2lvbnMgb2YgaXRzZWxmLiBUaGUgTWF4aW11bSB2ZXJzaW9uIGlzIG5vdCBsZXNzCiAjIHRoYW4gdGhlIGN1cnJlbnQgcHJvZHVjdC4gKDEuMC4wIDEuMC4wKQotcnVuX3dpeF9jb21tYW5kKHNtb2tlIC1ub2xvZ28gLXd4IC1zdzEwNzYgIiR7aW5zdGFsbGVyX2ZpbGV9IikKK2lmIChOT1Qgbm9fdmVyaWZ5KQorICBydW5fd2l4X2NvbW1hbmQoc21va2UgLW5vbG9nbyAtd3ggLXN3MTA3NiAiJHtpbnN0YWxsZXJfZmlsZX0iKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0NQYWNrV2lYR2VuZXJhdG9yL215b3RoZXJhcHAuY3BwIGIvVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvbXlvdGhlcmFwcC5jcHAKaW5kZXggMGVlZmMxYy4uNTA0N2EzNCAxMDA2NDQKLS0tIGEvVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvbXlvdGhlcmFwcC5jcHAKKysrIGIvVGVzdHMvQ1BhY2tXaVhHZW5lcmF0b3IvbXlvdGhlcmFwcC5jcHAKQEAgLTEsMyArMSwzIEBACiBpbnQgbWFpbigpCiB7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1NoYXJwT25seS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NTaGFycE9ubHkvQ01ha2VMaXN0cy50eHQKaW5kZXggODIwNDljNy4uMTk1YWYwNSAxMDA2NDQKLS0tIGEvVGVzdHMvQ1NoYXJwT25seS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DU2hhcnBPbmx5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDggKzEsMTEgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiAjIGEgc2ltcGxlIENTaGFycCBvbmx5IHRlc3QgY2FzZQogcHJvamVjdCAoQ1NoYXJwT25seSBDU2hhcnApCiAKICMgQyMgZG9lcyBub3QgbWFrZSBhbnkgZGlmZmVyZW5jZSBiZXR3ZWVuIFNUQVRJQyBhbmQgU0hBUkVEIGxpYnMKLWFkZF9saWJyYXJ5KGxpYjEgU1RBVElDIGxpYjEuY3MpCithZGRfbGlicmFyeShsaWIxIFNUQVRJQyBsaWIxLmNzIG5lc3RlZC9saWIxLmNzKQorI3dpdGhvdXQgdGhlIHNvdXJjZSBncm91cCB0aGlzIHRlc3Qgd2lsbCBmYWlsIHRvIGNvbXBpbGUKK3NvdXJjZV9ncm91cChuZXN0ZWQgRklMRVMgbmVzdGVkL2xpYjEuY3MpCiBhZGRfbGlicmFyeShsaWIyIFNIQVJFRCBsaWIyLmNzKQogCiBhZGRfZXhlY3V0YWJsZShDU2hhcnBPbmx5IGNzaGFycG9ubHkuY3MpCmRpZmYgLS1naXQgYS9UZXN0cy9DU2hhcnBPbmx5L2NzaGFycG9ubHkuY3MgYi9UZXN0cy9DU2hhcnBPbmx5L2NzaGFycG9ubHkuY3MKaW5kZXggYWQ0NjQxYS4uMzg5MGM4MiAxMDA2NDQKLS0tIGEvVGVzdHMvQ1NoYXJwT25seS9jc2hhcnBvbmx5LmNzCisrKyBiL1Rlc3RzL0NTaGFycE9ubHkvY3NoYXJwb25seS5jcwpAQCAtNSwxMCArNSw4IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludCB2YWwgPSBMaWIxLmdldFJlc3VsdCgpOwotCiAgICAgICAgICAgICBMaWIyIGwgPSBuZXcgTGliMigpOwotICAgICAgICAgICAgdmFsID0gbC5teVZhbDsKLQorICAgICAgICAgICAgdmFsID0gdmFsICsgIGwubXlWYWwgKyBuZXN0ZWQuTGliMS5nZXRSZXN1bHQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL0NTaGFycE9ubHkvbmVzdGVkL2xpYjEuY3MgYi9UZXN0cy9DU2hhcnBPbmx5L25lc3RlZC9saWIxLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZmRlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DU2hhcnBPbmx5L25lc3RlZC9saWIxLmNzCkBAIC0wLDAgKzEsMTMgQEAKK25hbWVzcGFjZSBDU2hhcnBPbmx5Cit7CisgICAgbmFtZXNwYWNlIG5lc3RlZAorICAgIHsKKyAgICAgICAgcHVibGljIGNsYXNzIExpYjEKKyAgICAgICAgeworICAgICAgICAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0UmVzdWx0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DVGVzdENvbmZpZy9kYXNoYm9hcmQuY21ha2UuaW4gYi9UZXN0cy9DVGVzdENvbmZpZy9kYXNoYm9hcmQuY21ha2UuaW4KaW5kZXggNGJiMTI2Mi4uMzQ4MjRlMyAxMDA2NDQKLS0tIGEvVGVzdHMvQ1Rlc3RDb25maWcvZGFzaGJvYXJkLmNtYWtlLmluCisrKyBiL1Rlc3RzL0NUZXN0Q29uZmlnL2Rhc2hib2FyZC5jbWFrZS5pbgpAQCAtMTMsNiArMTMsOCBAQAogc2V0KGFyZyAiIikKIGlmKE5PVCBfaXNNdWx0aUNvbmZpZykKICAgc2V0KGFyZyAiLURDTUFLRV9CVUlMRF9UWVBFOlNUUklORz1AY2ZnQCIpCitlbHNlKCkKKyAgc2V0KGFyZyAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZVxcO01pblNpemVSZWxcXDtSZWxXaXRoRGViSW5mbyIpCiBlbmRpZigpCiAKIG1lc3NhZ2UoImNtYWtlIGluaXRpYWwgY29uZmlndXJlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0NUZXN0Q29uZmlnL3NjcmlwdC5jbWFrZS5pbiBiL1Rlc3RzL0NUZXN0Q29uZmlnL3NjcmlwdC5jbWFrZS5pbgppbmRleCA5NzNjN2I4Li41OWM1ODViIDEwMDY0NAotLS0gYS9UZXN0cy9DVGVzdENvbmZpZy9zY3JpcHQuY21ha2UuaW4KKysrIGIvVGVzdHMvQ1Rlc3RDb25maWcvc2NyaXB0LmNtYWtlLmluCkBAIC02LDcgKzYsMTQgQEAKIAogY3Rlc3Rfc3RhcnQoRXhwZXJpbWVudGFsKQogCi1jdGVzdF9jb25maWd1cmUoQlVJTEQgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0iIFJFVFVSTl9WQUxVRSBydikKK3NldChfaXNNdWx0aUNvbmZpZyAiQF9pc011bHRpQ29uZmlnQCIpCitpZihfaXNNdWx0aUNvbmZpZykKKyAgc2V0KGNmZ19vcHRzICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlXFw7TWluU2l6ZVJlbFxcO1JlbFdpdGhEZWJJbmZvIikKK2Vsc2UoKQorICBzZXQoY2ZnX29wdHMpCitlbmRpZigpCisKK2N0ZXN0X2NvbmZpZ3VyZShCVUlMRCAiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSIgT1BUSU9OUyAiJHtjZmdfb3B0c30iIFJFVFVSTl9WQUxVRSBydikKIGlmKE5PVCBydiBTVFJFUVVBTCAwKQogICBtZXNzYWdlKEZBVEFMX0VSUk9SICIqKiogZXJyb3IgaW4gY3Rlc3RfY29uZmlndXJlICoqKiIpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YvdGVzdC5jbWFrZS5pbiBiL1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi90ZXN0LmNtYWtlLmluCmluZGV4IDJjOTg4NzYuLjE4MTg4ODggMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi90ZXN0LmNtYWtlLmluCisrKyBiL1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi90ZXN0LmNtYWtlLmluCkBAIC0zLDEzICszLDE1IEBACiBzZXQoQ1RFU1RfQklOQVJZX0RJUkVDVE9SWSAiQENNYWtlX0JJTkFSWV9ESVJAL1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi9UZXN0UHJvamVjdCIpCiBzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SICJAQ01BS0VfR0VORVJBVE9SQCIpCiAKLWN0ZXN0X2VtcHR5X2JpbmFyeV9kaXJlY3RvcnkoJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSkKLQogY3Rlc3Rfc3RhcnQoRXhwZXJpbWVudGFsKQogY3Rlc3RfY29uZmlndXJlKCkKIGN0ZXN0X2J1aWxkKCkKIGN0ZXN0X3Rlc3QoKQogCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworIyBDb21tb24gc2V0dXAgZm9yIGFsbCB0ZXN0cy4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisKIGxpc3QoQVBQRU5EIENURVNUX0NVU1RPTV9DT1ZFUkFHRV9FWENMVURFCiAgICIvZm9vL3NvbWV0aGluZyIKICAgIi8zcmRwYXJ0eS8iCkBAIC0xNywxNSArMTksMjggQEAKICAgIi9DTWFrZUZpbGVzLyIKICkKIGxpc3QoQVBQRU5EIENURVNUX0VYVFJBX0NPVkVSQUdFX0dMT0IgIiouY3BwIikKLQogaW5jbHVkZShDVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YpCi1zZXQodGFyX2ZpbGUgJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfS9nY292LnRhcikKK3NldChleHBlY3RlZF9vdXQKKyAgQ01ha2VGaWxlcy9teWV4ZWN1dGFibGUuZGlyL0xhYmVscy5qc29uCisgIFRlc3RpbmcvQ292ZXJhZ2VJbmZvL2RhdGEuanNvbgorICBUZXN0aW5nL0NvdmVyYWdlSW5mby9leHRyYS5jcHAuZ2NvdgorICBUZXN0aW5nL0NvdmVyYWdlSW5mby9tYWluLmNwcC5nY292CisgIHVuY292ZXJlZC9leHRyYS91bmNvdmVyZWQxLmNwcAorICB1bmNvdmVyZWQvdW5jb3ZlcmVkMi5jcHAKKykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyMgVGVzdCAxOiB3aXRoIHN0YW5kYXJkIGFyZ3VtZW50cworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKworc2V0KHRhcl9maWxlICR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0vZ2Nvdi50YnopCiBjdGVzdF9jb3ZlcmFnZV9jb2xsZWN0X2djb3YoCiAgIFRBUkJBTEwgIiR7dGFyX2ZpbGV9IgogICBTT1VSQ0UgIiR7Q1RFU1RfU09VUkNFX0RJUkVDVE9SWX0iCiAgIEJVSUxEICIke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9IgogICBHQ09WX0NPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iCiAgIEdDT1ZfT1BUSU9OUyAtUCAiQENNYWtlX1NPVVJDRV9ESVJAL1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi9mYWtlZ2Nvdi5jbWFrZSIpCitmaWxlKFJFTU9WRV9SRUNVUlNFICIke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9L3VuY292ZXJlZCIpCiAKIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5ECiAgICR7Q01BS0VfQ09NTUFORH0gLUUgdGFyIHRmICR7dGFyX2ZpbGV9CkBAIC0zNywxNSArNTIsMTI2IEBACiBzdHJpbmcoUkVQTEFDRSAiXG4iICI7IiBvdXQgIiR7b3V0fSIpCiBsaXN0KFNPUlQgb3V0KQogCi1zZXQoZXhwZWN0ZWRfb3V0Ci0gIENNYWtlRmlsZXMvbXlleGVjdXRhYmxlLmRpci9MYWJlbHMuanNvbgotICBUZXN0aW5nL0NvdmVyYWdlSW5mby9kYXRhLmpzb24KLSAgVGVzdGluZy9Db3ZlcmFnZUluZm8vZXh0cmEuY3BwLmdjb3YKLSAgVGVzdGluZy9Db3ZlcmFnZUluZm8vbWFpbi5jcHAuZ2NvdgotICB1bmNvdmVyZWQvZXh0cmEvdW5jb3ZlcmVkMS5jcHAKLSAgdW5jb3ZlcmVkL3VuY292ZXJlZDIuY3BwCitpZigiJHtvdXR9IiBTVFJFUVVBTCAiJHtleHBlY3RlZF9vdXR9IikKKyAgbWVzc2FnZSgiUEFTU0VEIHdpdGggY29ycmVjdCBvdXRwdXQ6ICR7b3V0fSIpCitlbHNlKCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRkFJTEVEOiBleHBlY3RlZDpcbiR7ZXhwZWN0ZWRfb3V0fVxuR290OlxuJHtvdXR9IikKK2VuZGlmKCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyMgVGVzdCAyOiB3aXRoIG9wdGlvbmFsIGFyZ3VtZW50OiBUQVJCQUxMX0NPTVBSRVNTSU9OICJHWklQIgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKworc2V0KHRhcl9maWxlICR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0vZ2Nvdi50Z3opCitjdGVzdF9jb3ZlcmFnZV9jb2xsZWN0X2djb3YoCisgIFRBUkJBTEwgIiR7dGFyX2ZpbGV9IgorICBUQVJCQUxMX0NPTVBSRVNTSU9OICJHWklQIgorICBTT1VSQ0UgIiR7Q1RFU1RfU09VUkNFX0RJUkVDVE9SWX0iCisgIEJVSUxEICIke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9IgorICBHQ09WX0NPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iCisgIEdDT1ZfT1BUSU9OUyAtUCAiQENNYWtlX1NPVVJDRV9ESVJAL1Rlc3RzL0NUZXN0Q292ZXJhZ2VDb2xsZWN0R0NPVi9mYWtlZ2Nvdi5jbWFrZSIpCitmaWxlKFJFTU9WRV9SRUNVUlNFICIke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9L3VuY292ZXJlZCIpCisKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5ECisgICR7Q01BS0VfQ09NTUFORH0gLUUgdGFyIHRmICR7dGFyX2ZpbGV9CisgIE9VVFBVVF9WQVJJQUJMRSBvdXQKKyAgV09SS0lOR19ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfQorICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQogKQogCitzdHJpbmcoUkVQTEFDRSAiXG4iICI7IiBvdXQgIiR7b3V0fSIpCitsaXN0KFNPUlQgb3V0KQorCitpZigiJHtvdXR9IiBTVFJFUVVBTCAiJHtleHBlY3RlZF9vdXR9IikKKyAgbWVzc2FnZSgiUEFTU0VEIHdpdGggY29ycmVjdCBvdXRwdXQ6ICR7b3V0fSIpCitlbHNlKCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRkFJTEVEOiBleHBlY3RlZDpcbiR7ZXhwZWN0ZWRfb3V0fVxuR290OlxuJHtvdXR9IikKK2VuZGlmKCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyMgVGVzdCAzOiB3aXRoIG9wdGlvbmFsIGFyZ3VtZW50OiBUQVJCQUxMX0NPTVBSRVNTSU9OICJGUk9NX0VYVCIKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisKK3NldCh0YXJfZmlsZSAke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9L2djb3YudHh6KQorY3Rlc3RfY292ZXJhZ2VfY29sbGVjdF9nY292KAorICBUQVJCQUxMICIke3Rhcl9maWxlfSIKKyAgVEFSQkFMTF9DT01QUkVTU0lPTiAiRlJPTV9FWFQiCisgIFNPVVJDRSAiJHtDVEVTVF9TT1VSQ0VfRElSRUNUT1JZfSIKKyAgQlVJTEQgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0iCisgIEdDT1ZfQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIKKyAgR0NPVl9PUFRJT05TIC1QICJAQ01ha2VfU09VUkNFX0RJUkAvVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL2Zha2VnY292LmNtYWtlIikKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0vdW5jb3ZlcmVkIikKKworZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSB0YXIgdGYgJHt0YXJfZmlsZX0KKyAgT1VUUFVUX1ZBUklBQkxFIG91dAorICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9CisgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCispCisKK3N0cmluZyhSRVBMQUNFICJcbiIgIjsiIG91dCAiJHtvdXR9IikKK2xpc3QoU09SVCBvdXQpCisKK2lmKCIke291dH0iIFNUUkVRVUFMICIke2V4cGVjdGVkX291dH0iKQorICBtZXNzYWdlKCJQQVNTRUQgd2l0aCBjb3JyZWN0IG91dHB1dDogJHtvdXR9IikKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGQUlMRUQ6IGV4cGVjdGVkOlxuJHtleHBlY3RlZF9vdXR9XG5Hb3Q6XG4ke291dH0iKQorZW5kaWYoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworIyBUZXN0IDQ6IHdpdGggb3B0aW9uYWwgYXJndW1lbnQ6IFRBUkJBTExfQ09NUFJFU1NJT04gIkZBTFNFIgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKworc2V0KHRhcl9maWxlICR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0vZ2Nvdi50YXIpCitjdGVzdF9jb3ZlcmFnZV9jb2xsZWN0X2djb3YoCisgIFRBUkJBTEwgIiR7dGFyX2ZpbGV9IgorICBUQVJCQUxMX0NPTVBSRVNTSU9OICJGQUxTRSIKKyAgU09VUkNFICIke0NURVNUX1NPVVJDRV9ESVJFQ1RPUll9IgorICBCVUlMRCAiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSIKKyAgR0NPVl9DT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IgorICBHQ09WX09QVElPTlMgLVAgIkBDTWFrZV9TT1VSQ0VfRElSQC9UZXN0cy9DVGVzdENvdmVyYWdlQ29sbGVjdEdDT1YvZmFrZWdjb3YuY21ha2UiKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfS91bmNvdmVyZWQiKQorCitleGVjdXRlX3Byb2Nlc3MoQ09NTUFORAorICAke0NNQUtFX0NPTU1BTkR9IC1FIHRhciB0ZiAke3Rhcl9maWxlfQorICBPVVRQVVRfVkFSSUFCTEUgb3V0CisgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0KKyAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKykKKworc3RyaW5nKFJFUExBQ0UgIlxuIiAiOyIgb3V0ICIke291dH0iKQorbGlzdChTT1JUIG91dCkKKworaWYoIiR7b3V0fSIgU1RSRVFVQUwgIiR7ZXhwZWN0ZWRfb3V0fSIpCisgIG1lc3NhZ2UoIlBBU1NFRCB3aXRoIGNvcnJlY3Qgb3V0cHV0OiAke291dH0iKQorZWxzZSgpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZBSUxFRDogZXhwZWN0ZWQ6XG4ke2V4cGVjdGVkX291dH1cbkdvdDpcbiR7b3V0fSIpCitlbmRpZigpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisjIFRlc3QgNTogd2l0aCBvcHRpb25hbCBhcmd1bWVudDogVEFSQkFMTF9DT01QUkVTU0lPTiAiWlNURCIKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisKK3NldCh0YXJfZmlsZSAke0NURVNUX0JJTkFSWV9ESVJFQ1RPUll9L2djb3YuenN0ZCkKK2N0ZXN0X2NvdmVyYWdlX2NvbGxlY3RfZ2NvdigKKyAgVEFSQkFMTCAiJHt0YXJfZmlsZX0iCisgIFRBUkJBTExfQ09NUFJFU1NJT04gIlpTVEQiCisgIFNPVVJDRSAiJHtDVEVTVF9TT1VSQ0VfRElSRUNUT1JZfSIKKyAgQlVJTEQgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0iCisgIEdDT1ZfQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIKKyAgR0NPVl9PUFRJT05TIC1QICJAQ01ha2VfU09VUkNFX0RJUkAvVGVzdHMvQ1Rlc3RDb3ZlcmFnZUNvbGxlY3RHQ09WL2Zha2VnY292LmNtYWtlIikKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7Q1RFU1RfQklOQVJZX0RJUkVDVE9SWX0vdW5jb3ZlcmVkIikKKworZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSB0YXIgdGYgJHt0YXJfZmlsZX0KKyAgT1VUUFVUX1ZBUklBQkxFIG91dAorICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9CisgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCispCisKK3N0cmluZyhSRVBMQUNFICJcbiIgIjsiIG91dCAiJHtvdXR9IikKK2xpc3QoU09SVCBvdXQpCisKIGlmKCIke291dH0iIFNUUkVRVUFMICIke2V4cGVjdGVkX291dH0iKQogICBtZXNzYWdlKCJQQVNTRUQgd2l0aCBjb3JyZWN0IG91dHB1dDogJHtvdXR9IikKIGVsc2UoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ1Rlc3RMaW1pdERhc2hKL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ1Rlc3RMaW1pdERhc2hKL0NNYWtlTGlzdHMudHh0CmluZGV4IDkyZDc0M2YuLjUyMDhkMmQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NUZXN0TGltaXREYXNoSi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DVGVzdExpbWl0RGFzaEovQ01ha2VMaXN0cy50eHQKQEAgLTEsNyArMSw3IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44KQogcHJvamVjdChDVGVzdExpbWl0RGFzaEogTk9ORSkKIAotIyBUaGlzIGZpbGUgZGVtb25zdHJhdGVzIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8xMjkwNAorIyBUaGlzIGZpbGUgZGVtb25zdHJhdGVzIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzEyOTA0CiAjIHdoZW4gY29uZmlndXJlZCB3aXRoIENNYWtlIDIuOC4xMC4yIGFuZCBlYXJsaWVyLCBhbmQgd2hlbiBydW5uaW5nCiAjICJjdGVzdCAtaiA0IiBpbiB0aGUgcmVzdWx0aW5nIGJ1aWxkIHRyZWUuIFRoaXMgZXhhbXBsZSBpcyBoYXJkLWNvZGVkCiAjIHRvIGFzc3VtZSAtaiA0IGp1c3QgdG8gcmVwcm9kdWNlIHRoZSBpc3N1ZSBlYXNpbHkuIEFkanVzdCB0aGUKZGlmZiAtLWdpdCBhL1Rlc3RzL0NoZWNrRm9ydHJhbi5jbWFrZSBiL1Rlc3RzL0NoZWNrRm9ydHJhbi5jbWFrZQppbmRleCAxNmE4ZWQyLi4zM2UxYmZiIDEwMDY0NAotLS0gYS9UZXN0cy9DaGVja0ZvcnRyYW4uY21ha2UKKysrIGIvVGVzdHMvQ2hlY2tGb3J0cmFuLmNtYWtlCkBAIC0xMSw2ICsxMSw3IEBACiBwcm9qZWN0KENoZWNrRm9ydHJhbiBGb3J0cmFuKQogZmlsZShXUklURSBcIlwke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcmVzdWx0LmNtYWtlXCIKICAgXCJzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUiBcXFwiXCR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn1cXFwiKVxcblwiCisgIFwic2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgXFxcIlwke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUR9XFxcIilcXG5cIgogICBcInNldChDTUFLRV9Gb3J0cmFuX0ZMQUdTIFxcXCJcJHtDTUFLRV9Gb3J0cmFuX0ZMQUdTfVxcXCIpXFxuXCIKICAgXCJzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgXFxcIlwke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfU1VQUE9SVFNfRjkwfVxcXCIpXFxuXCIKICAgKQpAQCAtNDUsNiArNDYsOCBAQAogICBtZXNzYWdlKFNUQVRVUyAiJHtfZGVzY30gLSAke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJ9IikKICAgc2V0KENNQUtFX0ZvcnRyYW5fQ09NUElMRVIgIiR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUn0iIENBQ0hFIEZJTEVQQVRIICJGb3J0cmFuIGNvbXBpbGVyIikKICAgbWFya19hc19hZHZhbmNlZChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSKQorICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRCAiJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEfSIgQ0FDSEUgU1RSSU5HICJGb3J0cmFuIGNvbXBpbGVyIElkIikKKyAgbWFya19hc19hZHZhbmNlZChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEKQogICBzZXQoQ01BS0VfRm9ydHJhbl9GTEFHUyAiJHtDTUFLRV9Gb3J0cmFuX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJGb3J0cmFuIGZsYWdzIikKICAgbWFya19hc19hZHZhbmNlZChDTUFLRV9Gb3J0cmFuX0ZMQUdTKQogICBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTAgIiR7Q01BS0VfRm9ydHJhbl9DT01QSUxFUl9TVVBQT1JUU19GOTB9IiBDQUNIRSBCT09MICJGb3J0cmFuIGNvbXBpbGVyIHN1cHBvcnRzIEY5MCIpCmRpZmYgLS1naXQgYS9UZXN0cy9Db21wbGV4L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ29tcGxleC9DTWFrZUxpc3RzLnR4dAppbmRleCAyZTQxNzU0Li45ZmQ4NWJlIDEwMDY0NAotLS0gYS9UZXN0cy9Db21wbGV4L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0NvbXBsZXgvQ01ha2VMaXN0cy50eHQKQEAgLTMyNCw3ICszMjQsNyBAQAogICAgICAgJHtmaWxlfQogICAgICAgIlske2hrZXl9XSIgRE9DICJSZWdpc3RyeV9UZXN0X1BhdGgiKQogICAgIGV4ZWNfcHJvZ3JhbSgke0NNQUtFX0NPTU1BTkR9IEFSR1MgIi1FIGRlbGV0ZV9yZWd2IFwiJHtoa2V5fVwiIikKLSAgICBleGVjX3Byb2dyYW0oJHtDTUFLRV9DT01NQU5EfSBBUkdTICItRSByZW1vdmUgXCIke2Rpcn0vJHtmaWxlfVwiIikKKyAgICBleGVjX3Byb2dyYW0oJHtDTUFLRV9DT01NQU5EfSBBUkdTICItRSBybSAtZiBcIiR7ZGlyfS8ke2ZpbGV9XCIiKQogICBlbmRpZiAoKQogZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvQ29tcGxleC9MaWJyYXJ5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ29tcGxleC9MaWJyYXJ5L0NNYWtlTGlzdHMudHh0CmluZGV4IDY0ZjZkYzguLmRmODc0ZWYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NvbXBsZXgvTGlicmFyeS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Db21wbGV4L0xpYnJhcnkvQ01ha2VMaXN0cy50eHQKQEAgLTEzMSw3ICsxMzEsNyBAQAogCiAgICAgIyBDdXN0b20gdGFyZ2V0IHRvIHRyeSBwcmVwcm9jZXNzaW5nIGludm9jYXRpb24uCiAgICAgYWRkX2N1c3RvbV90YXJnZXQodGVzdF9wcmVwcm9jZXNzICR7TUFZQkVfQUxMfQotICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZSBDTWFrZUZpbGVzL2NyZWF0ZV9maWxlLmRpci9jcmVhdGVfZmlsZS5pCisgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLWYgQ01ha2VGaWxlcy9jcmVhdGVfZmlsZS5kaXIvY3JlYXRlX2ZpbGUuaQogICAgICAgQ09NTUFORCAke0NNQUtFX01BS0VfUFJPR1JBTX0gY3JlYXRlX2ZpbGUuaQogICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1QICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90ZXN0X3ByZXByb2Nlc3MuY21ha2UKICAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ29tcGxleE9uZUNvbmZpZy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NvbXBsZXhPbmVDb25maWcvQ01ha2VMaXN0cy50eHQKaW5kZXggNjI4Y2Q0ZS4uMjhiNzNhZiAxMDA2NDQKLS0tIGEvVGVzdHMvQ29tcGxleE9uZUNvbmZpZy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Db21wbGV4T25lQ29uZmlnL0NNYWtlTGlzdHMudHh0CkBAIC0yODEsNyArMjgxLDcgQEAKICAgICAgICR7ZmlsZX0KICAgICAgICJbJHtoa2V5fV0iIERPQyAiUmVnaXN0cnlfVGVzdF9QYXRoIikKICAgICBleGVjX3Byb2dyYW0oJHtDTUFLRV9DT01NQU5EfSBBUkdTICItRSBkZWxldGVfcmVndiBcIiR7aGtleX1cIiIpCi0gICAgZXhlY19wcm9ncmFtKCR7Q01BS0VfQ09NTUFORH0gQVJHUyAiLUUgcmVtb3ZlIFwiJHtkaXJ9LyR7ZmlsZX1cIiIpCisgICAgZXhlY19wcm9ncmFtKCR7Q01BS0VfQ09NTUFORH0gQVJHUyAiLUUgcm0gLWYgXCIke2Rpcn0vJHtmaWxlfVwiIikKICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0NvbXBsZXhPbmVDb25maWcvTGlicmFyeS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0NvbXBsZXhPbmVDb25maWcvTGlicmFyeS9DTWFrZUxpc3RzLnR4dAppbmRleCA2NGY2ZGM4Li5kZjg3NGVmIDEwMDY0NAotLS0gYS9UZXN0cy9Db21wbGV4T25lQ29uZmlnL0xpYnJhcnkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ29tcGxleE9uZUNvbmZpZy9MaWJyYXJ5L0NNYWtlTGlzdHMudHh0CkBAIC0xMzEsNyArMTMxLDcgQEAKIAogICAgICMgQ3VzdG9tIHRhcmdldCB0byB0cnkgcHJlcHJvY2Vzc2luZyBpbnZvY2F0aW9uLgogICAgIGFkZF9jdXN0b21fdGFyZ2V0KHRlc3RfcHJlcHJvY2VzcyAke01BWUJFX0FMTH0KLSAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmUgQ01ha2VGaWxlcy9jcmVhdGVfZmlsZS5kaXIvY3JlYXRlX2ZpbGUuaQorICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1mIENNYWtlRmlsZXMvY3JlYXRlX2ZpbGUuZGlyL2NyZWF0ZV9maWxlLmkKICAgICAgIENPTU1BTkQgJHtDTUFLRV9NQUtFX1BST0dSQU19IGNyZWF0ZV9maWxlLmkKICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtUCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGVzdF9wcmVwcm9jZXNzLmNtYWtlCiAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KZGlmZiAtLWdpdCBhL1Rlc3RzL0NvbmZpZ1NvdXJjZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Db25maWdTb3VyY2VzL0NNYWtlTGlzdHMudHh0CmluZGV4IGY1ZGQyNzYuLjZlNjllOGIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NvbmZpZ1NvdXJjZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ29uZmlnU291cmNlcy9DTWFrZUxpc3RzLnR4dApAQCAtMSw2ICsxLDE3IEBACiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4wKQorZ2V0X3Byb3BlcnR5KF9pc011bHRpQ29uZmlnIEdMT0JBTCBQUk9QRVJUWSBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQoraWYoTk9UIF9pc011bHRpQ29uZmlnIEFORCBOT1QgQ01BS0VfQlVJTERfVFlQRSkKKyAgc2V0KENNQUtFX0JVSUxEX1RZUEUgRGVidWcgQ0FDSEUgU1RSSU5HICJDaG9vc2UgdGhlIHR5cGUgb2YgYnVpbGQiKQorZW5kaWYoKQogcHJvamVjdChDb25maWdTb3VyY2VzIENYWCkKIAorIyBTb3VyY2UgZmlsZShzKSBuYW1lZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uKHMpLgorZmlsZShHRU5FUkFURQorICBPVVRQVVQgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jb25maWdfJDxDT05GSUc+LmNwcCIKKyAgQ09OVEVOVCAidm9pZCBjb25maWdfJDxDT05GSUc+KCkge31cbiIKKyAgKQorCisjIFBlci1jb25maWcgc291cmNlcyB2aWEgSU5URVJGQUNFX1NPVVJDRVMuCiBhZGRfbGlicmFyeShpZmFjZSBJTlRFUkZBQ0UpCiB0YXJnZXRfc291cmNlcyhpZmFjZSBJTlRFUkZBQ0UKICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pZmFjZV9zcmMuY3BwIgpAQCAtMTIsMTAgKzIzLDU2IEBACiAgICIkPCQ8Q09ORklHOkRlYnVnPjpDRkdfREVCVUc+IgogICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OkNGR19PVEhFUj4iCiAgICkKLQogYWRkX2V4ZWN1dGFibGUoQ29uZmlnU291cmNlcwogICAkPCQ8Q09ORklHOkRlYnVnPjptYWluX2RlYnVnLmNwcD4KICAgJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+Om1haW5fb3RoZXIuY3BwPgogICAkPCQ8Q09ORklHOk5vdEFDb25maWc+OmRvZXNfbm90X2V4aXN0LmNwcD4KKyAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NvbmZpZ18kPENPTkZJRz4uY3BwCiAgICkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhDb25maWdTb3VyY2VzIGlmYWNlKQorCisjIFBlci1jb25maWcgc291cmNlcyB2aWEgTElOS19MSUJSQVJJRVMuCithZGRfbGlicmFyeShpZmFjZV9kZWJ1ZyBJTlRFUkZBQ0UpCit0YXJnZXRfc291cmNlcyhpZmFjZV9kZWJ1ZyBJTlRFUkZBQ0UKKyAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pZmFjZV9zcmMuY3BwIgorICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2lmYWNlX2RlYnVnX3NyYy5jcHAiCisgICkKK2FkZF9saWJyYXJ5KGlmYWNlX290aGVyIElOVEVSRkFDRSkKK3RhcmdldF9zb3VyY2VzKGlmYWNlX290aGVyIElOVEVSRkFDRQorICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2lmYWNlX3NyYy5jcHAiCisgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vaWZhY2Vfb3RoZXJfc3JjLmNwcCIKKyAgKQorYWRkX2V4ZWN1dGFibGUoQ29uZmlnU291cmNlc0xpbmsgbWFpbi5jcHApCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhDb25maWdTb3VyY2VzTGluayBQUklWQVRFCisgICIkPCQ8Q09ORklHOkRlYnVnPjpDRkdfREVCVUc+IgorICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OkNGR19PVEhFUj4iCisgICkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb25maWdTb3VyY2VzTGluayBQUklWQVRFCisgICIkPCQ8Q09ORklHOkRlYnVnPjppZmFjZV9kZWJ1Zz4iCisgICIkPCQ8Tk9UOiQ8Q09ORklHOkRlYnVnPj46aWZhY2Vfb3RoZXI+IgorICAiJDwkPENPTkZJRzpOb3RBQ29uZmlnPjppZmFjZV9kb2VzX25vdF9leGlzdD4iCisgICkKKworIyBQZXItY29uZmlnIHNvdXJjZXMgdmlhIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUy4KK2FkZF9saWJyYXJ5KENvbmZpZ1NvdXJjZXNJZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19saWJyYXJpZXMoQ29uZmlnU291cmNlc0lmYWNlIElOVEVSRkFDRQorICAiJDwkPENPTkZJRzpEZWJ1Zz46aWZhY2VfZGVidWc+IgorICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OmlmYWNlX290aGVyPiIKKyAgIiQ8JDxDT05GSUc6Tm90QUNvbmZpZz46aWZhY2VfZG9lc19ub3RfZXhpc3Q+IgorICApCithZGRfZXhlY3V0YWJsZShDb25maWdTb3VyY2VzTGlua0lmYWNlIG1haW4uY3BwKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoQ29uZmlnU291cmNlc0xpbmtJZmFjZSBQUklWQVRFCisgICIkPCQ8Q09ORklHOkRlYnVnPjpDRkdfREVCVUc+IgorICAiJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OkNGR19PVEhFUj4iCisgICkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb25maWdTb3VyY2VzTGlua0lmYWNlIENvbmZpZ1NvdXJjZXNJZmFjZSkKKworIyBBIHRhcmdldCB3aXRoIHNvdXJjZXMgaW4gb25seSBvbmUgY29uZmlndXJhdGlvbiB0aGF0IGlzIG5vdCB0aGUKKyMgZmlyc3QgaW4gQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUy4KK2lmKENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMgTUFUQ0hFUyAiOyhbXjtdKykiKQorICBzZXQob25lX2NvbmZpZyAiJHtDTUFLRV9NQVRDSF8xfSIpCitlbHNlKCkKKyAgc2V0KG9uZV9jb25maWcgIiR7Q01BS0VfQlVJTERfVFlQRX0iKQorZW5kaWYoKQorYWRkX2xpYnJhcnkoT25lQ29uZmlnT25seSBPQkpFQ1QgIiQ8JDxDT05GSUc6JHtvbmVfY29uZmlnfT46JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2lmYWNlX3NyYy5jcHA+IikKK3NldF9wcm9wZXJ0eShUQVJHRVQgT25lQ29uZmlnT25seSBQUk9QRVJUWSBMSU5LRVJfTEFOR1VBR0UgQ1hYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ29uZmlnU291cmNlcy9tYWluLmNwcCBiL1Rlc3RzL0NvbmZpZ1NvdXJjZXMvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjZDNiMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0NvbmZpZ1NvdXJjZXMvbWFpbi5jcHAKQEAgLTAsMCArMSw5IEBACisjaWYgIWRlZmluZWQoQ0ZHX0RFQlVHKSAmJiAhZGVmaW5lZChDRkdfT1RIRVIpCisjICBlcnJvciAiTmVpdGhlciBDRkdfREVCVUcgb3IgQ0ZHX09USEVSIGlzIGRlZmluZWQuIgorI2VuZGlmCisjaWZkZWYgQ0ZHX0RFQlVHCisjICBpbmNsdWRlICJtYWluX2RlYnVnLmNwcCIKKyNlbmRpZgorI2lmZGVmIENGR19PVEhFUgorIyAgaW5jbHVkZSAibWFpbl9vdGhlci5jcHAiCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rlc3RzL0NvbnRyYWN0cy9WVEsvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Db250cmFjdHMvVlRLL0NNYWtlTGlzdHMudHh0CmluZGV4IGM5NDY0OTkuLjZhZTI3MzIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0NvbnRyYWN0cy9WVEsvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ29udHJhY3RzL1ZUSy9DTWFrZUxpc3RzLnR4dApAQCAtMjEsNyArMjEsNyBAQAogCiAjIGJ1aWxkICYgdGVzdCBWVEsncyByZWxlYXNlIGJyYW5jaAogRXh0ZXJuYWxQcm9qZWN0X0FkZCgke1BST0pFQ1RfTkFNRX0KLSAgR0lUX1JFUE9TSVRPUlkgImdpdDovL3Z0ay5vcmcvVlRLLmdpdCIKKyAgR0lUX1JFUE9TSVRPUlkgImh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL3Z0ay92dGsuZ2l0IgogICBHSVRfVEFHICJyZWxlYXNlIgogICBQUkVGSVggJHtiYXNlX2Rpcn0KICAgQ09ORklHVVJFX0NPTU1BTkQgIiIKZGlmZiAtLWdpdCBhL1Rlc3RzL0NvbnRyYWN0cy9WVEsvRGFzaGJvYXJkLmNtYWtlLmluIGIvVGVzdHMvQ29udHJhY3RzL1ZUSy9EYXNoYm9hcmQuY21ha2UuaW4KaW5kZXggYzNkMTBmNC4uYWU3NjBiYyAxMDA2NDQKLS0tIGEvVGVzdHMvQ29udHJhY3RzL1ZUSy9EYXNoYm9hcmQuY21ha2UuaW4KKysrIGIvVGVzdHMvQ29udHJhY3RzL1ZUSy9EYXNoYm9hcmQuY21ha2UuaW4KQEAgLTI0LDggKzI0LDggQEAKIGN0ZXN0X2VtcHR5X2JpbmFyeV9kaXJlY3RvcnkoJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfSkKIAogZmlsZShXUklURSAiJHtDVEVTVF9CSU5BUllfRElSRUNUT1JZfS9DTWFrZUNhY2hlLnR4dCIgIgotICBCVUlMRF9FWEFNUExFUzpCT09MPU9OCi0gIEJVSUxEX1RFU1RJTkc6Qk9PTD1PTgorICBWVEtfQlVJTERfRVhBTVBMRVM6Qk9PTD1PTgorICBWVEtfQlVJTERfVEVTVElORzpTVFJJTkc9V0FOVAogICBWVEtfV1JBUF9QWVRIT046Qk9PTD1PTgogICBFeHRlcm5hbERhdGFfT0JKRUNUX1NUT1JFUzpGSUxFUEFUSD1AYmFzZV9kaXJAL0V4dGVybmFsRGF0YQogIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL0NNYWtlTGlzdHMudHh0CmluZGV4IDQ0YzYwMDUuLjM1Y2ViMzMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGEvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VkYS9DTWFrZUxpc3RzLnR4dApAQCAtMSwxMSArMSwzNSBAQAorbWFjcm8gKGFkZF9jdWRhX3Rlc3RfbWFjcm8gbmFtZSkKKyAgYWRkX3Rlc3RfbWFjcm8oIiR7bmFtZX0iICR7QVJHTn0pCisgIHNldF9wcm9wZXJ0eShURVNUICIke25hbWV9IiBBUFBFTkQKKyAgICBQUk9QRVJUWSBMQUJFTFMgIkNVREEiKQorZW5kbWFjcm8gKCkKIAotQUREX1RFU1RfTUFDUk8oQ3VkYS5Db21wbGV4IEN1ZGFDb21wbGV4KQotQUREX1RFU1RfTUFDUk8oQ3VkYS5Db25zdW1lQ29tcGlsZUZlYXR1cmVzIEN1ZGFDb25zdW1lQ29tcGlsZUZlYXR1cmVzKQotQUREX1RFU1RfTUFDUk8oQ3VkYS5PYmplY3RMaWJyYXJ5IEN1ZGFPYmplY3RMaWJyYXJ5KQotQUREX1RFU1RfTUFDUk8oQ3VkYS5NaXhlZFN0YW5kYXJkTGV2ZWxzIE1peGVkU3RhbmRhcmRMZXZlbHMpCi1BRERfVEVTVF9NQUNSTyhDdWRhLk5vdEVuYWJsZWQgQ3VkYU5vdEVuYWJsZWQpCi1BRERfVEVTVF9NQUNSTyhDdWRhLlNlcGFyYWJsZUNvbXBDWFhPbmx5IFNlcGFyYWJsZUNvbXBDWFhPbmx5KQotQUREX1RFU1RfTUFDUk8oQ3VkYS5Ub29sa2l0SW5jbHVkZSBDdWRhVG9vbGtpdEluY2x1ZGUpCi1BRERfVEVTVF9NQUNSTyhDdWRhLlByb3BlckRldmljZUxpYnJhcmllcyBQcm9wZXJEZXZpY2VMaWJyYXJpZXMpCi1BRERfVEVTVF9NQUNSTyhDdWRhLlByb3BlckxpbmtGbGFncyBQcm9wZXJMaW5rRmxhZ3MpCi1BRERfVEVTVF9NQUNSTyhDdWRhLldpdGhDIEN1ZGFXaXRoQykKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5Db25zdW1lQ29tcGlsZUZlYXR1cmVzIEN1ZGFDb25zdW1lQ29tcGlsZUZlYXR1cmVzKQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLkNYWFN0YW5kYXJkU2V0VHdpY2UgQ1hYU3RhbmRhcmRTZXRUd2ljZSkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5PYmplY3RMaWJyYXJ5IEN1ZGFPYmplY3RMaWJyYXJ5KQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHMxIE1peGVkU3RhbmRhcmRMZXZlbHMxKQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHMyIE1peGVkU3RhbmRhcmRMZXZlbHMyKQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHMzIE1peGVkU3RhbmRhcmRMZXZlbHMzKQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHM0IE1peGVkU3RhbmRhcmRMZXZlbHM0KQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLk1peGVkU3RhbmRhcmRMZXZlbHM1IE1peGVkU3RhbmRhcmRMZXZlbHM1KQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLk5vdEVuYWJsZWQgQ3VkYU5vdEVuYWJsZWQpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGEuU2VwYXJhYmxlQ29tcENYWE9ubHkgU2VwYXJhYmxlQ29tcENYWE9ubHkpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGEuVG9vbGtpdCBUb29sa2l0KQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLkluY2x1ZGVQYXRoTm9Ub29sa2l0IEluY2x1ZGVQYXRoTm9Ub29sa2l0KQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLlNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBTaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQpCisKKyMgU2VwYXJhYmxlIGNvbXBpbGF0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBvbiBOVkNDLiBEaXNhYmxlIHRlc3RzCisjIHVzaW5nIGl0IGZvciBvdGhlciBjb21waWxlcnMuCitpZihDTWFrZV9URVNUX0NVREEgQU5EIE5PVCBDTWFrZV9URVNUX0NVREEgU1RSRVFVQUwgIkNsYW5nIikKKyAgYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLkNvbXBsZXggQ3VkYUNvbXBsZXgpCisgIGFkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYS5Qcm9wZXJEZXZpY2VMaWJyYXJpZXMgUHJvcGVyRGV2aWNlTGlicmFyaWVzKQorICBhZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGEuUHJvcGVyTGlua0ZsYWdzIFByb3BlckxpbmtGbGFncykKK2VuZGlmKCkKKworIyBUaGUgQ1VEQSBvbmx5IHNoaXBzIHRoZSBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgdG9vbGtpdCBsaWJyYXJpZXMKKyMgb24gd2luZG93cworaWYoTk9UIFdJTjMyKQorICBhZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGEuU3RhdGljUnVudGltZVBsdXNUb29sa2l0IFN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCkKK2VuZGlmKCkKKworYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhLldpdGhDIEN1ZGFXaXRoQykKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvQ1hYU3RhbmRhcmRTZXRUd2ljZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvQ1hYU3RhbmRhcmRTZXRUd2ljZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGFkODNhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9DWFhTdGFuZGFyZFNldFR3aWNlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjcpCitwcm9qZWN0KENYWFN0YW5kYXJkU2V0VHdpY2UgQ1hYIENVREEpCisKK3NldChDTUFLRV9DWFhfU1RBTkRBUkQgMTEpCitzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIDMwKQorCithZGRfZXhlY3V0YWJsZShDWFhTdGFuZGFyZFNldFR3aWNlIG1haW4uY3UpCit0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyhDWFhTdGFuZGFyZFNldFR3aWNlIFBVQkxJQyBjeHhfc3RkXzExKQorCitpZihBUFBMRSkKKyAgIyBIZWxwIHRoZSBzdGF0aWMgY3VkYSBydW50aW1lIGZpbmQgdGhlIGRyaXZlciAobGliY3VkYS5keWxsaWIpIGF0IHJ1bnRpbWUuCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgQ1hYU3RhbmRhcmRTZXRUd2ljZSBQUk9QRVJUWSBCVUlMRF9SUEFUSCAke0NNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30pCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMvbWFpbi5jdSBiL1Rlc3RzL0N1ZGEvQ1hYU3RhbmRhcmRTZXRUd2ljZS9tYWluLmN1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMvbWFpbi5jdQpyZW5hbWUgdG8gVGVzdHMvQ3VkYS9DWFhTdGFuZGFyZFNldFR3aWNlL21haW4uY3UKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvQ29tcGxleC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvQ29tcGxleC9DTWFrZUxpc3RzLnR4dAppbmRleCBkM2Q0YjdjLi4yNjViZDg1IDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL0NvbXBsZXgvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VkYS9Db21wbGV4L0NNYWtlTGlzdHMudHh0CkBAIC0xNSwyNSArMTUsMTggQEAKICNhbmQgYWxzbyBidWlsZGluZyBjcHAgdGFyZ2V0cyB0aGF0IG5lZWQgY3VkYSBpbXBsaWNpdCBsaWJyYXJpZXMKIAogI3ZlcmlmeSB0aGF0IHdlIGNhbiBwYXNzIGV4cGxpY2l0IGN1ZGEgYXJjaCBmbGFncwotc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLWdlbmNvZGUgYXJjaD1jb21wdXRlXzMwLGNvZGU9Y29tcHV0ZV8zMCIpCitzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIDMwKQogc2V0KENNQUtFX0NVREFfU1RBTkRBUkQgMTEpCiBzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEIDExKQogc2V0KENNQUtFX0NVREFfU1RBTkRBUkRfUkVRVUlSRUQgVFJVRSkKIHNldChDTUFLRV9DWFhfU1RBTkRBUkRfUkVRVUlSRUQgVFJVRSkKIAogYWRkX2xpYnJhcnkoQ3VkYUNvbXBsZXhDcHBCYXNlIFNIQVJFRCBkeW5hbWljLmNwcCkKLWFkZF9saWJyYXJ5KEN1ZGFDb21wbGV4U2VwZXJhYmxlTGliIFNUQVRJQyBmaWxlMS5jdSBmaWxlMi5jdSBmaWxlMy5jdSkKLXNldF90YXJnZXRfcHJvcGVydGllcyhDdWRhQ29tcGxleFNlcGVyYWJsZUxpYgotICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIENVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OIE9OKQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCBDdWRhQ29tcGxleFNlcGVyYWJsZUxpYgotICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgT04pCi0KIGFkZF9saWJyYXJ5KEN1ZGFDb21wbGV4U2hhcmVkTGliIFNIQVJFRCBkeW5hbWljLmN1KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN1ZGFDb21wbGV4U2hhcmVkTGliIFBVQkxJQyBDdWRhQ29tcGxleENwcEJhc2UpCiAKK2FkZF9saWJyYXJ5KEN1ZGFDb21wbGV4U2VwZXJhYmxlTGliIFNUQVRJQyBmaWxlMS5jdSBmaWxlMi5jdSBmaWxlMy5jdSkKIGFkZF9saWJyYXJ5KEN1ZGFDb21wbGV4TWl4ZWRMaWIgU0hBUkVEIG1peGVkLmNwcCBtaXhlZC5jdSkKLXNldF90YXJnZXRfcHJvcGVydGllcyhDdWRhQ29tcGxleE1peGVkTGliCi0gICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04gT04pCiB0YXJnZXRfbGlua19saWJyYXJpZXMoQ3VkYUNvbXBsZXhNaXhlZExpYgogICAgICAgICAgICAgICAgICAgICAgIFBVQkxJQyBDdWRhQ29tcGxleFNoYXJlZExpYgogICAgICAgICAgICAgICAgICAgICAgIFBSSVZBVEUgQ3VkYUNvbXBsZXhTZXBlcmFibGVMaWIpCkBAIC00MSw3ICszNCwyNyBAQAogYWRkX2V4ZWN1dGFibGUoQ3VkYUNvbXBsZXggbWFpbi5jcHApCiB0YXJnZXRfbGlua19saWJyYXJpZXMoQ3VkYUNvbXBsZXggUFVCTElDIEN1ZGFDb21wbGV4TWl4ZWRMaWIpCiAKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEN1ZGFDb21wbGV4TWl4ZWRMaWIKKyAgICAgICAgICAgICAgICAgICAgICBDdWRhQ29tcGxleFNlcGVyYWJsZUxpYgorICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMKKyAgICAgICAgICAgICAgICAgICAgICAgIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgIE9OCisgICAgICAgICAgICAgICAgICAgICAgICBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTgorICAgICAgICAgICAgICAgICAgICAgICkKK3NldF90YXJnZXRfcHJvcGVydGllcyhDdWRhQ29tcGxleE1peGVkTGliCisgICAgICAgICAgICAgICAgICAgICAgQ3VkYUNvbXBsZXhTaGFyZWRMaWIKKyAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTCisgICAgICAgICAgICAgICAgICAgICAgICBDVURBX1JVTlRJTUVfTElCUkFSWSBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgICApCisKKwogaWYoQVBQTEUpCiAgICMgSGVscCB0aGUgc3RhdGljIGN1ZGEgcnVudGltZSBmaW5kIHRoZSBkcml2ZXIgKGxpYmN1ZGEuZHlsbGliKSBhdCBydW50aW1lLgogICBzZXRfcHJvcGVydHkoVEFSR0VUIEN1ZGFDb21wbGV4IFBST1BFUlRZIEJVSUxEX1JQQVRIICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKIGVuZGlmKCkKKworaWYoVU5JWCkKKyAgIyBIZWxwIHRoZSBzaGFyZWQgY3VkYSBydW50aW1lIGZpbmQgbGliY3VkYXJ0IGFzIGl0IGlzIG5vdCBsb2NhdGVkCisgICMgaW4gYSBkZWZhdWx0IHN5c3RlbSBzZWFyY2hlZCBsb2NhdGlvbgorICBzZXRfcHJvcGVydHkoVEFSR0VUIEN1ZGFDb21wbGV4TWl4ZWRMaWIgUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9Db21wbGV4L2R5bmFtaWMuY3UgYi9UZXN0cy9DdWRhL0NvbXBsZXgvZHluYW1pYy5jdQppbmRleCA5ZGE4ODUzLi43ZjJmMmI1IDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL0NvbXBsZXgvZHluYW1pYy5jdQorKysgYi9UZXN0cy9DdWRhL0NvbXBsZXgvZHluYW1pYy5jdQpAQCAtNTQsMTcgKzU0LDIwIEBACiAgIHJldHVybiAxOwogfQogCi1FWFBPUlQgdm9pZCBjdWRhX2R5bmFtaWNfbGliX2Z1bmMoKQorRVhQT1JUIGJvb2wgY3VkYV9keW5hbWljX2xpYl9mdW5jKCkKIHsKLSAgRGV0ZXJtaW5lSWZWYWxpZEN1ZGFEZXZpY2U8PDwxLCAxPj4+KCk7CiAgIGN1ZGFFcnJvcl90IGVyciA9IGN1ZGFHZXRMYXN0RXJyb3IoKTsKICAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgewotICAgIHN0ZDo6Y2VyciA8PCAiRGV0ZXJtaW5lSWZWYWxpZEN1ZGFEZXZpY2UgW1NZTkNdIGZhaWxlZDogIgorICAgIHN0ZDo6Y2VyciA8PCAiRGV0ZXJtaW5lSWZWYWxpZEN1ZGFEZXZpY2UgW1BlciBMYXVuY2hdIGZhaWxlZDogIgogICAgICAgICAgICAgICA8PCBjdWRhR2V0RXJyb3JTdHJpbmcoZXJyKSA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIGZhbHNlOwogICB9CisgIERldGVybWluZUlmVmFsaWRDdWRhRGV2aWNlPDw8MSwgMT4+PigpOwogICBlcnIgPSBjdWRhRGV2aWNlU3luY2hyb25pemUoKTsKICAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgewotICAgIHN0ZDo6Y2VyciA8PCAiRGV0ZXJtaW5lSWZWYWxpZEN1ZGFEZXZpY2UgW0FTWU5DXSBmYWlsZWQ6ICIKKyAgICBzdGQ6OmNlcnIgPDwgIkRldGVybWluZUlmVmFsaWRDdWRhRGV2aWNlIFtTWU5DXSBmYWlsZWQ6ICIKICAgICAgICAgICAgICAgPDwgY3VkYUdldEVycm9yU3RyaW5nKGN1ZGFHZXRMYXN0RXJyb3IoKSkgPDwgc3RkOjplbmRsOworICAgIHJldHVybiBmYWxzZTsKICAgfQorICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvQ29tcGxleC9tYWluLmNwcCBiL1Rlc3RzL0N1ZGEvQ29tcGxleC9tYWluLmNwcAppbmRleCA2Y2E1OTUyLi5kYTA5YjQ0IDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL0NvbXBsZXgvbWFpbi5jcHAKKysrIGIvVGVzdHMvQ3VkYS9Db21wbGV4L21haW4uY3BwCkBAIC0yMiw1ICsyMiw2IEBACiAKICAgaW50IHIxID0gY2FsbF9jdWRhX3NlcGVyYWJsZV9jb2RlKDQyKTsKICAgaW50IHIyID0gbWl4ZWRfbGF1bmNoX2tlcm5lbCg0Mik7CisKICAgcmV0dXJuIChyMSA9PSA0MiB8fCByMiA9PSA0MikgPyAxIDogMDsKIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvQ29tcGxleC9taXhlZC5jdSBiL1Rlc3RzL0N1ZGEvQ29tcGxleC9taXhlZC5jdQppbmRleCA1Yjg1YWVjLi43NjExOWFkIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL0NvbXBsZXgvbWl4ZWQuY3UKKysrIGIvVGVzdHMvQ3VkYS9Db21wbGV4L21peGVkLmN1CkBAIC0xNSw3ICsxNSw3IEBACiByZXN1bHRfdHlwZSBfX2RldmljZV9fIGZpbGUxX2Z1bmMoaW50IHgpOwogcmVzdWx0X3R5cGVfZHluYW1pYyBfX2RldmljZV9fIGZpbGUyX2Z1bmMoaW50IHgpOwogCi1JTVBPUlQgdm9pZCBfX2hvc3RfXyBjdWRhX2R5bmFtaWNfbGliX2Z1bmMoKTsKK0lNUE9SVCBib29sIF9faG9zdF9fIGN1ZGFfZHluYW1pY19saWJfZnVuYygpOwogCiBzdGF0aWMgX19nbG9iYWxfXyB2b2lkIG1peGVkX2tlcm5lbChyZXN1bHRfdHlwZSogciwgaW50IHgpCiB7CkBAIC0yNSw3ICsyNSw5IEBACiAKIEVYUE9SVCBpbnQgbWl4ZWRfbGF1bmNoX2tlcm5lbChpbnQgeCkKIHsKLSAgY3VkYV9keW5hbWljX2xpYl9mdW5jKCk7CisgIGlmICghY3VkYV9keW5hbWljX2xpYl9mdW5jKCkpIHsKKyAgICByZXR1cm4geDsKKyAgfQogCiAgIHJlc3VsdF90eXBlKiByOwogICBjdWRhRXJyb3JfdCBlcnIgPSBjdWRhTWFsbG9jTWFuYWdlZCgmciwgc2l6ZW9mKHJlc3VsdF90eXBlKSk7CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL0luY2x1ZGVQYXRoTm9Ub29sa2l0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9JbmNsdWRlUGF0aE5vVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmUxNTYxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9JbmNsdWRlUGF0aE5vVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDExIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy44KQorcHJvamVjdCAoSW5jbHVkZVBhdGhOb1Rvb2xraXQgQ1hYIENVREEpCisKKyNHb2FsIGZvciB0aGlzIGV4YW1wbGU6CisjIFZhbGlkYXRlIHRoYXQgYmV0d2VlbiB0aGUgQ1hYIGltcGxpY2l0IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIHRoZQorIyBDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUyBkaXJlY3RvcmllcyB3ZSBjYW4gZmluZAorIyB0aGUgY3VkYSBydW50aW1lIGhlYWRlcnMKKworYWRkX2V4ZWN1dGFibGUoSW5jbHVkZVBhdGhOb1Rvb2xraXQgbWFpbi5jcHApCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhJbmNsdWRlUGF0aE5vVG9vbGtpdCBQUklWQVRFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0NVREFfVE9PTEtJVF9JTkNMVURFX0RJUkVDVE9SSUVTfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvVG9vbGtpdEluY2x1ZGUvbWFpbi5jcHAgYi9UZXN0cy9DdWRhL0luY2x1ZGVQYXRoTm9Ub29sa2l0L21haW4uY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvQ3VkYS9Ub29sa2l0SW5jbHVkZS9tYWluLmNwcApjb3B5IHRvIFRlc3RzL0N1ZGEvSW5jbHVkZVBhdGhOb1Rvb2xraXQvbWFpbi5jcHAKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVscy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVscy9DTWFrZUxpc3RzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM5OTY2Mi4uMDAwMDAwMAotLS0gYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMvQ01ha2VMaXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQotcHJvamVjdChNaXhlZFN0YW5kYXJkTGV2ZWxzIENYWCBDVURBKQotCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKLQotc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKLQotYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVscyBtYWluLmN1KQotdGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoTWl4ZWRTdGFuZGFyZExldmVscyBQVUJMSUMgY3h4X3N0ZF8xMSkKLQotaWYoQVBQTEUpCi0gICMgSGVscCB0aGUgc3RhdGljIGN1ZGEgcnVudGltZSBmaW5kIHRoZSBkcml2ZXIgKGxpYmN1ZGEuZHlsbGliKSBhdCBydW50aW1lLgotICBzZXRfcHJvcGVydHkoVEFSR0VUIE1peGVkU3RhbmRhcmRMZXZlbHMgUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQotZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczEvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwZmZhNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczEvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKK3Byb2plY3QoTWl4ZWRTdGFuZGFyZExldmVsczEgQ1hYIENVREEpCisKK3NldChDTUFLRV9DWFhfU1RBTkRBUkQgMTQpCitzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRCAxMSkKK3NldChDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgMzApCisKK2FkZF9leGVjdXRhYmxlKE1peGVkU3RhbmRhcmRMZXZlbHMxIG1haW4uY3UgbGliLmNwcCkKKworaWYoQVBQTEUpCisgICMgSGVscCB0aGUgc3RhdGljIGN1ZGEgcnVudGltZSBmaW5kIHRoZSBkcml2ZXIgKGxpYmN1ZGEuZHlsbGliKSBhdCBydW50aW1lLgorICBzZXRfcHJvcGVydHkoVEFSR0VUIE1peGVkU3RhbmRhcmRMZXZlbHMxIFBST1BFUlRZIEJVSUxEX1JQQVRIICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczEvbGliLmNwcCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczEvbGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWJiYWNiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMS9saWIuY3BwCkBAIC0wLDAgKzEsNyBAQAorCitpbnQgZnVuYyhpbnQgQSwgaW50IEIpCit7CisgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgYysrMTQKKyAgYXV0byBtdWx0X2Z1bmMgPSBbXShhdXRvIGEsIGF1dG8gYikgeyByZXR1cm4gYSAqIGI7IH07CisgIHJldHVybiBtdWx0X2Z1bmMoQSwgQik7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMxL21haW4uY3UgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMxL21haW4uY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwMmM2ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczEvbWFpbi5jdQpAQCAtMCwwICsxLDkgQEAKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgYysrMTEKKyAgdXNpbmcgcmV0dXJudiA9IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8aW50LCAwPjsKKyAgcmV0dXJuIHJldHVybnY6OnZhbHVlOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmODA4MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKK3Byb2plY3QoTWl4ZWRTdGFuZGFyZExldmVsczIgQ1hYIENVREEpCisKK3NldChDTUFLRV9DWFhfU1RBTkRBUkQgMTcpICN0aGlzIGNhbiBkZWNheQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKKworYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVsczIgbWFpbi5jdSBsaWIuY3BwKQordGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoTWl4ZWRTdGFuZGFyZExldmVsczIgUFVCTElDIGN1ZGFfc3RkXzExKQorCitpZihBUFBMRSkKKyAgIyBIZWxwIHRoZSBzdGF0aWMgY3VkYSBydW50aW1lIGZpbmQgdGhlIGRyaXZlciAobGliY3VkYS5keWxsaWIpIGF0IHJ1bnRpbWUuCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgTWl4ZWRTdGFuZGFyZExldmVsczIgUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMi9saWIuY3BwIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMi9saWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYmJhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMyL2xpYi5jcHAKQEAgLTAsMCArMSw3IEBACisKK2ludCBmdW5jKGludCBBLCBpbnQgQikKK3sKKyAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBjKysxNAorICBhdXRvIG11bHRfZnVuYyA9IFtdKGF1dG8gYSwgYXV0byBiKSB7IHJldHVybiBhICogYjsgfTsKKyAgcmV0dXJuIG11bHRfZnVuYyhBLCBCKTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczIvbWFpbi5jdSBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczIvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTdhNDFlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMi9tYWluLmN1CkBAIC0wLDAgKzEsMTEgQEAKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTCAmJiAhZGVmaW5lZChfTVNDX1ZFUikKKyMgIGVycm9yICJpbnZhbGlkIHN0YW5kYXJkIHZhbHVlIgorI2VuZGlmCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgdXNpbmcgcmV0dXJudiA9IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8aW50LCAwPjsKKyAgcmV0dXJuIHJldHVybnY6OnZhbHVlOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0MjAwMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczMvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMiBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKK3Byb2plY3QoTWl4ZWRTdGFuZGFyZExldmVsczMgQ1hYIENVREEpCisKK3NldChDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgMzApCisKK2FkZF9leGVjdXRhYmxlKE1peGVkU3RhbmRhcmRMZXZlbHMzIG1haW4uY3UgbGliLmNwcCkKK3RhcmdldF9jb21waWxlX2ZlYXR1cmVzKE1peGVkU3RhbmRhcmRMZXZlbHMzIFBVQkxJQyBjdWRhX3N0ZF8wMyBjeHhfc3RkXzE0KQorCitpZihBUFBMRSkKKyAgIyBIZWxwIHRoZSBzdGF0aWMgY3VkYSBydW50aW1lIGZpbmQgdGhlIGRyaXZlciAobGliY3VkYS5keWxsaWIpIGF0IHJ1bnRpbWUuCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgTWl4ZWRTdGFuZGFyZExldmVsczMgUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMy9saWIuY3BwIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMy9saWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYmJhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHMzL2xpYi5jcHAKQEAgLTAsMCArMSw3IEBACisKK2ludCBmdW5jKGludCBBLCBpbnQgQikKK3sKKyAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBjKysxNAorICBhdXRvIG11bHRfZnVuYyA9IFtdKGF1dG8gYSwgYXV0byBiKSB7IHJldHVybiBhICogYjsgfTsKKyAgcmV0dXJuIG11bHRfZnVuYyhBLCBCKTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczMvbWFpbi5jdSBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczMvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzE5ZThkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzMy9tYWluLmN1CkBAIC0wLDAgKzEsNSBAQAorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwMjMwZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKK3Byb2plY3QoTWl4ZWRTdGFuZGFyZExldmVsczQgQ1hYIENVREEpCisKK3NldChDTUFLRV9DVURBX1NUQU5EQVJEIDAzKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKKworYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVsczQgbWFpbi5jdSBsaWIuY3BwKQordGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoTWl4ZWRTdGFuZGFyZExldmVsczQgUFVCTElDIGN4eF9zdGRfMTQpCisKK2lmKEFQUExFKQorICAjIEhlbHAgdGhlIHN0YXRpYyBjdWRhIHJ1bnRpbWUgZmluZCB0aGUgZHJpdmVyIChsaWJjdWRhLmR5bGxpYikgYXQgcnVudGltZS4KKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBNaXhlZFN0YW5kYXJkTGV2ZWxzNCBQUk9QRVJUWSBCVUlMRF9SUEFUSCAke0NNQUtFX0NVREFfSU1QTElDSVRfTElOS19ESVJFQ1RPUklFU30pCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM0L2xpYi5jcHAgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM0L2xpYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2NWM3NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczQvbGliLmNwcApAQCAtMCwwICsxLDE2IEBACisKKworY29uc3RleHByIGludCBmdW5jKGludCBBLCBpbnQgQikKK3sKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE5MTMKKyAgLy8gbm8gc3VwcG9ydCBmb3IgZXh0ZW5kZWQgY29uc3RleHByCisgIHJldHVybiBCICogQTsKKyNlbHNlCisgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgYysrMTQKKyAgaWYgKEEgPCBCKSB7CisgICAgcmV0dXJuIEEgKyBCOworICB9IGVsc2UgeworICAgIHJldHVybiBCICogQTsKKyAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM0L21haW4uY3UgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM0L21haW4uY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxOWU4ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczQvbWFpbi5jdQpAQCAtMCwwICsxLDUgQEAKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNWVlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTIgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjcpCitwcm9qZWN0KE1peGVkU3RhbmRhcmRMZXZlbHM1IENYWCBDVURBKQorCitzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEIDk4KQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKKworYWRkX2V4ZWN1dGFibGUoTWl4ZWRTdGFuZGFyZExldmVsczUgbWFpbi5jdSBsaWIuY3BwKQorCitpZihBUFBMRSkKKyAgIyBIZWxwIHRoZSBzdGF0aWMgY3VkYSBydW50aW1lIGZpbmQgdGhlIGRyaXZlciAobGliY3VkYS5keWxsaWIpIGF0IHJ1bnRpbWUuCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgTWl4ZWRTdGFuZGFyZExldmVsczUgUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNS9saWIuY3BwIGIvVGVzdHMvQ3VkYS9NaXhlZFN0YW5kYXJkTGV2ZWxzNS9saWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkN2IzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L2xpYi5jcHAKQEAgLTAsMCArMSwxMyBAQAorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorIyAgZXJyb3IgImludmFsaWQgc3RhbmRhcmQgdmFsdWUiCisjZW5kaWYKK2ludCBmdW5jKGludCBBLCBpbnQgQikKK3sKKyAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBjKysxNAorICBpZiAoQSA8IEIpIHsKKyAgICByZXR1cm4gQSArIEI7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIEIgKiBBOworICB9Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L21haW4uY3UgYi9UZXN0cy9DdWRhL01peGVkU3RhbmRhcmRMZXZlbHM1L21haW4uY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5YWZkNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvTWl4ZWRTdGFuZGFyZExldmVsczUvbWFpbi5jdQpAQCAtMCwwICsxLDggQEAKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgIGVycm9yICJpbnZhbGlkIHN0YW5kYXJkIHZhbHVlIgorI2VuZGlmCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9Qcm9wZXJEZXZpY2VMaWJyYXJpZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL1Byb3BlckRldmljZUxpYnJhcmllcy9DTWFrZUxpc3RzLnR4dAppbmRleCBjYjQ3YjA5Li5mZTI4YzNlIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhL1Byb3BlckRldmljZUxpYnJhcmllcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhL1Byb3BlckRldmljZUxpYnJhcmllcy9DTWFrZUxpc3RzLnR4dApAQCAtMSw4ICsxLDggQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEzKQogcHJvamVjdChQcm9wZXJEZXZpY2VMaWJyYXJpZXMgQ1hYIENVREEpCiAKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zNSxjb2RlPWNvbXB1dGVfMzUgLWdlbmNvZGUgYXJjaD1jb21wdXRlXzM1LGNvZGU9c21fMzUiKQogc2V0KENNQUtFX0NVREFfU1RBTkRBUkQgMTEpCitzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIDM1KQogCiBzZXQoVEhSRUFEU19QUkVGRVJfUFRIUkVBRF9GTEFHIE9OKQogZmluZF9wYWNrYWdlKFRocmVhZHMpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1Byb3BlckxpbmtGbGFncy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvUHJvcGVyTGlua0ZsYWdzL0NNYWtlTGlzdHMudHh0CmluZGV4IGI2ZTBlMzkuLmQzOGRhNmQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGEvUHJvcGVyTGlua0ZsYWdzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGEvUHJvcGVyTGlua0ZsYWdzL0NNYWtlTGlzdHMudHh0CkBAIC05LDExICs5LDE3IEBACiAKICNTcGVjaWZ5IGEgc2V0IG9mIHZhbGlkIENVREEgZmxhZ3MgYW5kIGFuIGludmFsaWQgc2V0IG9mIENYWCBmbGFncyAoIGZvciBDVURBICkKICN0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBDWFggZmxhZ3Mgd2hlbiBsaW5raW5nIENVREEgZXhlY3V0YWJsZXMKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1hcmNoPXNtXzM1IC0tdXNlX2Zhc3RfbWF0aCIpCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIi0tdXNlX2Zhc3RfbWF0aCIpCitlbHNlaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiQ2xhbmciKQorICBzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIi1mZmFzdC1tYXRoIikKK2VuZGlmKCkKKwogc2V0KENNQUtFX0NYWF9GTEFHUyAiLVdhbGwiKQogCiBzZXQoQ01BS0VfQ1hYX1NUQU5EQVJEIDExKQogc2V0KENNQUtFX0NVREFfU1RBTkRBUkQgMTEpCitzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIDM1KQogYWRkX2V4ZWN1dGFibGUoUHJvcGVyTGlua0ZsYWdzIGZpbGUxLmN1IG1haW4uY3h4KQogCiBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoIFByb3BlckxpbmtGbGFncwpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGRmNTU4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzNSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCitwcm9qZWN0KFNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBDWFgpCisKKyNHb2FsIGZvciB0aGlzIGV4YW1wbGU6CisjIFZhbGlkYXRlIHRoYXQgd2l0aCBjKysgd2UgY2FuIHVzZSBzb21lIGNvbXBvbmVudHMgb2YgdGhlIENVREEgdG9vbGtpdCwgYW5kCisjIHNwZWNpZnkgdGhlIGN1ZGEgcnVudGltZQorZmluZF9wYWNrYWdlKENVREFUb29sa2l0IFJFUVVJUkVEKQorCithZGRfbGlicmFyeShDb21tb24gT0JKRUNUIGN1cmFuZC5jcHAgbnBwaWYuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKENvbW1vbiBQUklWQVRFIENVREE6OnRvb2xraXQpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ29tbW9uIFBST1BFUlRJRVMgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBPTikKKworI3NoYXJlZCBydW50aW1lIHdpdGggc2hhcmVkIHRvb2xraXQgbGlicmFyaWVzCithZGRfbGlicmFyeShTaGFyZWRUb29sa2l0IFNIQVJFRCBzaGFyZWQuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFRvb2xraXQgUFJJVkFURSBDb21tb24gUFVCTElDIENVREE6OmN1cmFuZCBDVURBOjpucHBpZikKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTaGFyZWRUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnQpCisKKyMgVGhlIENVREEgb25seSBzaGlwcyB0aGUgc2hhcmVkIHZlcnNpb24gb2YgdGhlIHRvb2xraXQgbGlicmFyaWVzCisjIG9uIHdpbmRvd3MKK2lmKE5PVCBXSU4zMikKKyAgI3NoYXJlZCBydW50aW1lIHdpdGggc3RhdGljIHRvb2xraXQgbGlicmFyaWVzCisgIGFkZF9saWJyYXJ5KFN0YXRpY1Rvb2xraXQgU0hBUkVEIHN0YXRpYy5jcHApCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhTdGF0aWNUb29sa2l0IFBSSVZBVEUgQ29tbW9uIENVREE6OmN1cmFuZF9zdGF0aWMgQ1VEQTo6bnBwaWZfc3RhdGljKQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoU3RhdGljVG9vbGtpdCBQVUJMSUMgQ1VEQTo6Y3VkYXJ0KQorCisgICNzdGF0aWMgcnVudGltZSB3aXRoIG1peGVkIHRvb2xraXQgbGlicmFyaWVzCisgIGFkZF9saWJyYXJ5KE1peGVkVG9vbGtpdCBTSEFSRUQgbWl4ZWQuY3BwKQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoTWl4ZWRUb29sa2l0IFBSSVZBVEUgQ29tbW9uIENVREE6OmN1cmFuZF9zdGF0aWMgQ1VEQTo6bnBwaWYpCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhNaXhlZFRvb2xraXQgUFVCTElDIENVREE6OmN1ZGFydCkKK2VuZGlmKCkKKworYWRkX2V4ZWN1dGFibGUoU2hhcmVkUnVudGltZVBsdXNUb29sa2l0IG1haW4uY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBQUklWQVRFIFNoYXJlZFRvb2xraXQKKyAgICAgICAgICAgICAgICAgICAgICAkPFRBUkdFVF9OQU1FX0lGX0VYSVNUUzpTdGF0aWNUb29sa2l0PgorICAgICAgICAgICAgICAgICAgICAgICQ8VEFSR0VUX05BTUVfSUZfRVhJU1RTOk1peGVkVG9vbGtpdD4pCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9jdXJhbmQuY3BwIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvY3VyYW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ3YjUzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvY3VyYW5kLmNwcApAQCAtMCwwICsxLDY1IEBACisvLyBDb21lcyBmcm9tOgorLy8gaHR0cHM6Ly9kb2NzLm52aWRpYS5jb20vY3VkYS9jdXJhbmQvaG9zdC1hcGktb3ZlcnZpZXcuaHRtbCNob3N0LWFwaS1leGFtcGxlCisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKKy8qCisgKiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgaG9zdCBDVVJBTkQgQVBJIHRvIGdlbmVyYXRlIDEwMAorICogcHNldWRvcmFuZG9tIGZsb2F0cy4KKyAqLworI2luY2x1ZGUgPGN1ZGEuaD4KKyNpbmNsdWRlIDxjdXJhbmQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIENVREFfQ0FMTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCh4KSAhPSBjdWRhU3VjY2VzcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIkVycm9yIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIENVUkFORF9DQUxMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCh4KSAhPSBDVVJBTkRfU1RBVFVTX1NVQ0NFU1MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIkVycm9yIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK0VYUE9SVCBpbnQgY3VyYW5kX21haW4oKQoreworICBzaXplX3QgbiA9IDEwMDsKKyAgc2l6ZV90IGk7CisgIGN1cmFuZEdlbmVyYXRvcl90IGdlbjsKKyAgZmxvYXQgKmRldkRhdGEsICpob3N0RGF0YTsKKworICAvKiBBbGxvY2F0ZSBuIGZsb2F0cyBvbiBob3N0ICovCisgIGhvc3REYXRhID0gKGZsb2F0KiljYWxsb2Mobiwgc2l6ZW9mKGZsb2F0KSk7CisKKyAgLyogQWxsb2NhdGUgbiBmbG9hdHMgb24gZGV2aWNlICovCisgIENVREFfQ0FMTChjdWRhTWFsbG9jKCh2b2lkKiopJmRldkRhdGEsIG4gKiBzaXplb2YoZmxvYXQpKSk7CisKKyAgLyogQ3JlYXRlIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworICBDVVJBTkRfQ0FMTChjdXJhbmRDcmVhdGVHZW5lcmF0b3IoJmdlbiwgQ1VSQU5EX1JOR19QU0VVRE9fREVGQVVMVCkpOworCisgIC8qIFNldCBzZWVkICovCisgIENVUkFORF9DQUxMKGN1cmFuZFNldFBzZXVkb1JhbmRvbUdlbmVyYXRvclNlZWQoZ2VuLCAxMjM0VUxMKSk7CisKKyAgLyogR2VuZXJhdGUgbiBmbG9hdHMgb24gZGV2aWNlICovCisgIENVUkFORF9DQUxMKGN1cmFuZEdlbmVyYXRlVW5pZm9ybShnZW4sIGRldkRhdGEsIG4pKTsKKworICAvKiBDb3B5IGRldmljZSBtZW1vcnkgdG8gaG9zdCAqLworICBDVURBX0NBTEwoCisgICAgY3VkYU1lbWNweShob3N0RGF0YSwgZGV2RGF0YSwgbiAqIHNpemVvZihmbG9hdCksIGN1ZGFNZW1jcHlEZXZpY2VUb0hvc3QpKTsKKworICAvKiBDbGVhbnVwICovCisgIENVUkFORF9DQUxMKGN1cmFuZERlc3Ryb3lHZW5lcmF0b3IoZ2VuKSk7CisgIENVREFfQ0FMTChjdWRhRnJlZShkZXZEYXRhKSk7CisgIGZyZWUoaG9zdERhdGEpOworICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jcHAgYi9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRkYTIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jcHAKQEAgLTAsMCArMSwyMyBAQAorCisjaWZkZWYgX1dJTjMyCisjICBkZWZpbmUgSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorSU1QT1JUIGludCBzaGFyZWRfdmVyc2lvbigpOworaW50IHN0YXRpY192ZXJzaW9uKCkKK3sKKyAgcmV0dXJuIDA7Cit9CitpbnQgbWl4ZWRfdmVyc2lvbigpCit7CisgIHJldHVybiAwOworfQorI2Vsc2UKK2ludCBzaGFyZWRfdmVyc2lvbigpOworaW50IHN0YXRpY192ZXJzaW9uKCk7CitpbnQgbWl4ZWRfdmVyc2lvbigpOworI2VuZGlmCisKK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIG1peGVkX3ZlcnNpb24oKSA9PSAwICYmIHNoYXJlZF92ZXJzaW9uKCkgPT0gMCAmJgorICAgIHN0YXRpY192ZXJzaW9uKCkgPT0gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L21peGVkLmNwcCBiL1Rlc3RzL0N1ZGEvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L21peGVkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGU2ODg2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWl4ZWQuY3BwCkBAIC0wLDAgKzEsMTYgQEAKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIElNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIElNUE9SVAorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKK0lNUE9SVCBpbnQgY3VyYW5kX21haW4oKTsKK0lNUE9SVCBpbnQgbnBwaWZfbWFpbigpOworCitFWFBPUlQgaW50IG1peGVkX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3BwIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNTM0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9ucHBpZi5jcHAKQEAgLTAsMCArMSw5MiBAQAorLy8gQ29tZXMgZnJvbQorLy8gaHR0cHM6Ly9kZXZ0YWxrLm52aWRpYS5jb20vZGVmYXVsdC90b3BpYy8xMDM3NDgyL2dwdS1hY2NlbGVyYXRlZC1saWJyYXJpZXMvaGVscC1tZS1oZWxwLXlvdS13aXRoLW1vZGVybi1jbWFrZS1hbmQtY3VkYS1td2UtZm9yLW5wcC9wb3N0LzUyNzEwNjYvIzUyNzEwNjYKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICBkZWZpbmUgRVhQT1JUCisjZW5kaWYKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN1ZGFfcnVudGltZV9hcGkuaD4KKyNpbmNsdWRlIDxucHBpX2ZpbHRlcmluZ19mdW5jdGlvbnMuaD4KKworRVhQT1JUIGludCBucHBpZl9tYWluKCkKK3sKKyAgLyoqCisgICAqIDgtYml0IHVuc2lnbmVkIHNpbmdsZS1jaGFubmVsIDFEIHJvdyBjb252b2x1dGlvbi4KKyAgICovCisgIGNvbnN0IGludCBzaW1ncm93cyA9IDMyOworICBjb25zdCBpbnQgc2ltZ2NvbHMgPSAzMjsKKyAgTnBwOHUgKmRfcFNyYywgKmRfcERzdDsKKyAgY29uc3QgaW50IG5NYXNrU2l6ZSA9IDM7CisgIE5wcGlTaXplIG9ST0k7CisgIG9ST0kud2lkdGggPSBzaW1nY29scyAtIG5NYXNrU2l6ZTsKKyAgb1JPSS5oZWlnaHQgPSBzaW1ncm93czsKKyAgY29uc3QgaW50IHNpbWdzaXplID0gc2ltZ3Jvd3MgKiBzaW1nY29scyAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgZGltZ3NpemUgPSBvUk9JLndpZHRoICogb1JPSS5oZWlnaHQgKiBzaXplb2YoZF9wU3JjWzBdKTsKKyAgY29uc3QgaW50IHNpbWdwaXggPSBzaW1ncm93cyAqIHNpbWdjb2xzOworICBjb25zdCBpbnQgZGltZ3BpeCA9IG9ST0kud2lkdGggKiBvUk9JLmhlaWdodDsKKyAgY29uc3QgaW50IG5TcmNTdGVwID0gc2ltZ2NvbHMgKiBzaXplb2YoZF9wU3JjWzBdKTsKKyAgY29uc3QgaW50IG5Ec3RTdGVwID0gb1JPSS53aWR0aCAqIHNpemVvZihkX3BEc3RbMF0pOworICBjb25zdCBpbnQgcGl4dmFsID0gMTsKKyAgY29uc3QgaW50IG5EaXZpc29yID0gMTsKKyAgY29uc3QgTnBwMzJzIGhfcEtlcm5lbFtuTWFza1NpemVdID0geyBwaXh2YWwsIHBpeHZhbCwgcGl4dmFsIH07CisgIE5wcDMycyogZF9wS2VybmVsOworICBjb25zdCBOcHAzMnMgbkFuY2hvciA9IDI7CisgIGN1ZGFFcnJvcl90IGVyciA9IGN1ZGFNYWxsb2MoKHZvaWQqKikmZF9wU3JjLCBzaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWFsbG9jKCh2b2lkKiopJmRfcERzdCwgZGltZ3NpemUpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZXJyID0gY3VkYU1hbGxvYygodm9pZCoqKSZkX3BLZXJuZWwsIG5NYXNrU2l6ZSAqIHNpemVvZihkX3BLZXJuZWxbMF0pKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIHNldCBpbWFnZSB0byBwaXh2YWwgaW5pdGlhbGx5CisgIGVyciA9IGN1ZGFNZW1zZXQoZF9wU3JjLCBwaXh2YWwsIHNpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNZW1zZXQoZF9wRHN0LCAwLCBkaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWVtY3B5KGRfcEtlcm5lbCwgaF9wS2VybmVsLCBuTWFza1NpemUgKiBzaXplb2YoZF9wS2VybmVsWzBdKSwKKyAgICAgICAgICAgICAgICAgICBjdWRhTWVtY3B5SG9zdFRvRGV2aWNlKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIGNvcHkgc3JjIHRvIGRzdAorICBOcHBTdGF0dXMgcmV0ID0KKyAgICBucHBpRmlsdGVyUm93Xzh1X0MxUihkX3BTcmMsIG5TcmNTdGVwLCBkX3BEc3QsIG5Ec3RTdGVwLCBvUk9JLCBkX3BLZXJuZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgbk1hc2tTaXplLCBuQW5jaG9yLCBuRGl2aXNvcik7CisgIGFzc2VydChyZXQgPT0gTlBQX05PX0VSUk9SKTsKKyAgTnBwOHUqIGhfaW1ncmVzID0gbmV3IE5wcDh1W2RpbWdwaXhdOworICBlcnIgPSBjdWRhTWVtY3B5KGhfaW1ncmVzLCBkX3BEc3QsIGRpbWdzaXplLCBjdWRhTWVtY3B5RGV2aWNlVG9Ib3N0KTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIC8vIHRlc3QgZm9yIGZpbHRlcmluZworICBmb3IgKGludCBpID0gMDsgaSA8IGRpbWdwaXg7IGkrKykgeworICAgIGlmIChoX2ltZ3Jlc1tpXSAhPSAocGl4dmFsICogcGl4dmFsICogbk1hc2tTaXplKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJoX2ltZ3JlcyBhdCBpbmRleCAlZCBmYWlsZWQgdG8gbWF0Y2hcbiIsIGkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9zaGFyZWQuY3BwIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc2hhcmVkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2MzZGJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc2hhcmVkLmNwcApAQCAtMCwwICsxLDE2IEBACisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBJTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICBkZWZpbmUgRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyMgIGRlZmluZSBJTVBPUlQKKyMgIGRlZmluZSBFWFBPUlQKKyNlbmRpZgorCitpbnQgY3VyYW5kX21haW4oKTsKK2ludCBucHBpZl9tYWluKCk7CisKK0VYUE9SVCBpbnQgc2hhcmVkX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc3RhdGljLmNwcCBiL1Rlc3RzL0N1ZGEvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L3N0YXRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzMmZhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L3N0YXRpYy5jcHAKQEAgLTAsMCArMSwxNiBAQAorCisjaWZkZWYgX1dJTjMyCisjICBkZWZpbmUgSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgZGVmaW5lIEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICBkZWZpbmUgSU1QT1JUCisjICBkZWZpbmUgRVhQT1JUCisjZW5kaWYKKworSU1QT1JUIGludCBjdXJhbmRfbWFpbigpOworSU1QT1JUIGludCBucHBpZl9tYWluKCk7CisKK0VYUE9SVCBpbnQgc3RhdGljX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjZjMzkyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyOSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCitwcm9qZWN0KFN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCBDWFgpCisKKyNHb2FsIGZvciB0aGlzIGV4YW1wbGU6CisjIFZhbGlkYXRlIHRoYXQgd2l0aCBjKysgd2UgY2FuIHVzZSBzb21lIGNvbXBvbmVudHMgb2YgdGhlIENVREEgdG9vbGtpdCwgYW5kCisjIHNwZWNpZnkgdGhlIGN1ZGEgcnVudGltZQorZmluZF9wYWNrYWdlKENVREFUb29sa2l0IFJFUVVJUkVEKQorCithZGRfbGlicmFyeShDb21tb24gT0JKRUNUIGN1cmFuZC5jcHAgbnBwaWYuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKENvbW1vbiBQUklWQVRFIENVREE6OnRvb2xraXQpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ29tbW9uIFBST1BFUlRJRVMgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBPTikKKworI3N0YXRpYyBydW50aW1lIHdpdGggc2hhcmVkIHRvb2xraXQgbGlicmFyaWVzCithZGRfbGlicmFyeShTaGFyZWRUb29sa2l0IFNIQVJFRCBzaGFyZWQuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFRvb2xraXQgUFJJVkFURSBDb21tb24gUFVCTElDIENVREE6OmN1cmFuZCBDVURBOjpucHBpZikKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTaGFyZWRUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnRfc3RhdGljKQorCisjc3RhdGljIHJ1bnRpbWUgd2l0aCBzdGF0aWMgdG9vbGtpdCBsaWJyYXJpZXMKK2FkZF9saWJyYXJ5KFN0YXRpY1Rvb2xraXQgU0hBUkVEIHN0YXRpYy5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoU3RhdGljVG9vbGtpdCBQUklWQVRFIENvbW1vbiBDVURBOjpjdXJhbmRfc3RhdGljIENVREE6Om5wcGlmX3N0YXRpYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTdGF0aWNUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnRfc3RhdGljKQorCisjc3RhdGljIHJ1bnRpbWUgd2l0aCBtaXhlZCB0b29sa2l0IGxpYnJhcmllcworYWRkX2xpYnJhcnkoTWl4ZWRUb29sa2l0IFNIQVJFRCBtaXhlZC5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoTWl4ZWRUb29sa2l0IFBSSVZBVEUgQ29tbW9uIENVREE6OmN1cmFuZCBDVURBOjpucHBpZl9zdGF0aWMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoTWl4ZWRUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnRfc3RhdGljKQorCithZGRfZXhlY3V0YWJsZShTdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQgbWFpbi5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoU3RhdGljUnVudGltZVBsdXNUb29sa2l0IFBSSVZBVEUgU2hhcmVkVG9vbGtpdCBTdGF0aWNUb29sa2l0IE1peGVkVG9vbGtpdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L2N1cmFuZC5jcHAgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9jdXJhbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODcyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9jdXJhbmQuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8vIENvbWVzIGZyb206CisvLyBodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL2N1cmFuZC9ob3N0LWFwaS1vdmVydmlldy5odG1sI2hvc3QtYXBpLWV4YW1wbGUKKworLyoKKyAqIFRoaXMgcHJvZ3JhbSB1c2VzIHRoZSBob3N0IENVUkFORCBBUEkgdG8gZ2VuZXJhdGUgMTAwCisgKiBwc2V1ZG9yYW5kb20gZmxvYXRzLgorICovCisjaW5jbHVkZSA8Y3VkYS5oPgorI2luY2x1ZGUgPGN1cmFuZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgQ1VEQV9DQUxMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKHgpICE9IGN1ZGFTdWNjZXNzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50ZigiRXJyb3IgYXQgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1VSQU5EX0NBTEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKHgpICE9IENVUkFORF9TVEFUVVNfU1VDQ0VTUykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50ZigiRXJyb3IgYXQgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworaW50IGN1cmFuZF9tYWluKCkKK3sKKyAgc2l6ZV90IG4gPSAxMDA7CisgIHNpemVfdCBpOworICBjdXJhbmRHZW5lcmF0b3JfdCBnZW47CisgIGZsb2F0ICpkZXZEYXRhLCAqaG9zdERhdGE7CisKKyAgLyogQWxsb2NhdGUgbiBmbG9hdHMgb24gaG9zdCAqLworICBob3N0RGF0YSA9IChmbG9hdCopY2FsbG9jKG4sIHNpemVvZihmbG9hdCkpOworCisgIC8qIEFsbG9jYXRlIG4gZmxvYXRzIG9uIGRldmljZSAqLworICBDVURBX0NBTEwoY3VkYU1hbGxvYygodm9pZCoqKSZkZXZEYXRhLCBuICogc2l6ZW9mKGZsb2F0KSkpOworCisgIC8qIENyZWF0ZSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyAgQ1VSQU5EX0NBTEwoY3VyYW5kQ3JlYXRlR2VuZXJhdG9yKCZnZW4sIENVUkFORF9STkdfUFNFVURPX0RFRkFVTFQpKTsKKworICAvKiBTZXQgc2VlZCAqLworICBDVVJBTkRfQ0FMTChjdXJhbmRTZXRQc2V1ZG9SYW5kb21HZW5lcmF0b3JTZWVkKGdlbiwgMTIzNFVMTCkpOworCisgIC8qIEdlbmVyYXRlIG4gZmxvYXRzIG9uIGRldmljZSAqLworICBDVVJBTkRfQ0FMTChjdXJhbmRHZW5lcmF0ZVVuaWZvcm0oZ2VuLCBkZXZEYXRhLCBuKSk7CisKKyAgLyogQ29weSBkZXZpY2UgbWVtb3J5IHRvIGhvc3QgKi8KKyAgQ1VEQV9DQUxMKAorICAgIGN1ZGFNZW1jcHkoaG9zdERhdGEsIGRldkRhdGEsIG4gKiBzaXplb2YoZmxvYXQpLCBjdWRhTWVtY3B5RGV2aWNlVG9Ib3N0KSk7CisKKyAgLyogQ2xlYW51cCAqLworICBDVVJBTkRfQ0FMTChjdXJhbmREZXN0cm95R2VuZXJhdG9yKGdlbikpOworICBDVURBX0NBTEwoY3VkYUZyZWUoZGV2RGF0YSkpOworICBmcmVlKGhvc3REYXRhKTsKKyAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L21haW4uY3BwIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwOWY4ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGEvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L21haW4uY3BwCkBAIC0wLDAgKzEsMTEgQEAKKworCitpbnQgc2hhcmVkX3ZlcnNpb24oKTsKK2ludCBzdGF0aWNfdmVyc2lvbigpOworaW50IG1peGVkX3ZlcnNpb24oKTsKKworaW50IG1haW4oKQoreworICByZXR1cm4gbWl4ZWRfdmVyc2lvbigpID09IDAgJiYgc2hhcmVkX3ZlcnNpb24oKSA9PSAwICYmCisgICAgc3RhdGljX3ZlcnNpb24oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWl4ZWQuY3BwIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWl4ZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNTE0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9taXhlZC5jcHAKQEAgLTAsMCArMSw4IEBACisKK2ludCBjdXJhbmRfbWFpbigpOworaW50IG5wcGlmX21haW4oKTsKKworaW50IG1peGVkX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3BwIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzEwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9ucHBpZi5jcHAKQEAgLTAsMCArMSw4NiBAQAorLy8gQ29tZXMgZnJvbQorLy8gaHR0cHM6Ly9kZXZ0YWxrLm52aWRpYS5jb20vZGVmYXVsdC90b3BpYy8xMDM3NDgyL2dwdS1hY2NlbGVyYXRlZC1saWJyYXJpZXMvaGVscC1tZS1oZWxwLXlvdS13aXRoLW1vZGVybi1jbWFrZS1hbmQtY3VkYS1td2UtZm9yLW5wcC9wb3N0LzUyNzEwNjYvIzUyNzEwNjYKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN1ZGFfcnVudGltZV9hcGkuaD4KKyNpbmNsdWRlIDxucHBpX2ZpbHRlcmluZ19mdW5jdGlvbnMuaD4KKworaW50IG5wcGlmX21haW4oKQoreworICAvKioKKyAgICogOC1iaXQgdW5zaWduZWQgc2luZ2xlLWNoYW5uZWwgMUQgcm93IGNvbnZvbHV0aW9uLgorICAgKi8KKyAgY29uc3QgaW50IHNpbWdyb3dzID0gMzI7CisgIGNvbnN0IGludCBzaW1nY29scyA9IDMyOworICBOcHA4dSAqZF9wU3JjLCAqZF9wRHN0OworICBjb25zdCBpbnQgbk1hc2tTaXplID0gMzsKKyAgTnBwaVNpemUgb1JPSTsKKyAgb1JPSS53aWR0aCA9IHNpbWdjb2xzIC0gbk1hc2tTaXplOworICBvUk9JLmhlaWdodCA9IHNpbWdyb3dzOworICBjb25zdCBpbnQgc2ltZ3NpemUgPSBzaW1ncm93cyAqIHNpbWdjb2xzICogc2l6ZW9mKGRfcFNyY1swXSk7CisgIGNvbnN0IGludCBkaW1nc2l6ZSA9IG9ST0kud2lkdGggKiBvUk9JLmhlaWdodCAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgc2ltZ3BpeCA9IHNpbWdyb3dzICogc2ltZ2NvbHM7CisgIGNvbnN0IGludCBkaW1ncGl4ID0gb1JPSS53aWR0aCAqIG9ST0kuaGVpZ2h0OworICBjb25zdCBpbnQgblNyY1N0ZXAgPSBzaW1nY29scyAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgbkRzdFN0ZXAgPSBvUk9JLndpZHRoICogc2l6ZW9mKGRfcERzdFswXSk7CisgIGNvbnN0IGludCBwaXh2YWwgPSAxOworICBjb25zdCBpbnQgbkRpdmlzb3IgPSAxOworICBjb25zdCBOcHAzMnMgaF9wS2VybmVsW25NYXNrU2l6ZV0gPSB7IHBpeHZhbCwgcGl4dmFsLCBwaXh2YWwgfTsKKyAgTnBwMzJzKiBkX3BLZXJuZWw7CisgIGNvbnN0IE5wcDMycyBuQW5jaG9yID0gMjsKKyAgY3VkYUVycm9yX3QgZXJyID0gY3VkYU1hbGxvYygodm9pZCoqKSZkX3BTcmMsIHNpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNYWxsb2MoKHZvaWQqKikmZF9wRHN0LCBkaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWFsbG9jKCh2b2lkKiopJmRfcEtlcm5lbCwgbk1hc2tTaXplICogc2l6ZW9mKGRfcEtlcm5lbFswXSkpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gc2V0IGltYWdlIHRvIHBpeHZhbCBpbml0aWFsbHkKKyAgZXJyID0gY3VkYU1lbXNldChkX3BTcmMsIHBpeHZhbCwgc2ltZ3NpemUpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZXJyID0gY3VkYU1lbXNldChkX3BEc3QsIDAsIGRpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNZW1jcHkoZF9wS2VybmVsLCBoX3BLZXJuZWwsIG5NYXNrU2l6ZSAqIHNpemVvZihkX3BLZXJuZWxbMF0pLAorICAgICAgICAgICAgICAgICAgIGN1ZGFNZW1jcHlIb3N0VG9EZXZpY2UpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gY29weSBzcmMgdG8gZHN0CisgIE5wcFN0YXR1cyByZXQgPQorICAgIG5wcGlGaWx0ZXJSb3dfOHVfQzFSKGRfcFNyYywgblNyY1N0ZXAsIGRfcERzdCwgbkRzdFN0ZXAsIG9ST0ksIGRfcEtlcm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuTWFza1NpemUsIG5BbmNob3IsIG5EaXZpc29yKTsKKyAgYXNzZXJ0KHJldCA9PSBOUFBfTk9fRVJST1IpOworICBOcHA4dSogaF9pbWdyZXMgPSBuZXcgTnBwOHVbZGltZ3BpeF07CisgIGVyciA9IGN1ZGFNZW1jcHkoaF9pbWdyZXMsIGRfcERzdCwgZGltZ3NpemUsIGN1ZGFNZW1jcHlEZXZpY2VUb0hvc3QpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gdGVzdCBmb3IgZmlsdGVyaW5nCisgIGZvciAoaW50IGkgPSAwOyBpIDwgZGltZ3BpeDsgaSsrKSB7CisgICAgaWYgKGhfaW1ncmVzW2ldICE9IChwaXh2YWwgKiBwaXh2YWwgKiBuTWFza1NpemUpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImhfaW1ncmVzIGF0IGluZGV4ICVkIGZhaWxlZCB0byBtYXRjaFxuIiwgaSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L3NoYXJlZC5jcHAgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zaGFyZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NjdiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zaGFyZWQuY3BwCkBAIC0wLDAgKzEsOCBAQAorCitpbnQgY3VyYW5kX21haW4oKTsKK2ludCBucHBpZl9tYWluKCk7CisKK2ludCBzaGFyZWRfdmVyc2lvbigpCit7CisgIHJldHVybiBjdXJhbmRfbWFpbigpID09IDAgJiYgbnBwaWZfbWFpbigpID09IDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zdGF0aWMuY3BwIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvc3RhdGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTdlYjRjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvc3RhdGljLmNwcApAQCAtMCwwICsxLDggQEAKKworaW50IGN1cmFuZF9tYWluKCk7CitpbnQgbnBwaWZfbWFpbigpOworCitpbnQgc3RhdGljX3ZlcnNpb24oKQoreworICByZXR1cm4gY3VyYW5kX21haW4oKSA9PSAwICYmIG5wcGlmX21haW4oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9Ub29sa2l0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYS9Ub29sa2l0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMTI1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhL1Rvb2xraXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw1MiBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCitwcm9qZWN0KFRvb2xraXQgQ1hYKQorCisjR29hbCBmb3IgdGhpcyBleGFtcGxlOgorIyBWYWxpZGF0ZSB0aGF0IHdlIGNhbiB1c2UgQ1VEQVRvb2xraXQgdG8gZmluZCBjdWRhIGluY2x1ZGUgcGF0aHMKK2ZpbmRfcGFja2FnZShDVURBVG9vbGtpdCBSRVFVSVJFRCkKKworbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT046ICR7Q1VEQVRvb2xraXRfVkVSU0lPTn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT05fTUFKT1I6ICR7Q1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT05fTUlOT1I6ICR7Q1VEQVRvb2xraXRfVkVSU0lPTl9NSU5PUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X1ZFUlNJT05fUEFUQ0g6ICR7Q1VEQVRvb2xraXRfVkVSU0lPTl9QQVRDSH0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X0JJTl9ESVI6ICR7Q1VEQVRvb2xraXRfQklOX0RJUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X0lOQ0xVREVfRElSUzogJHtDVURBVG9vbGtpdF9JTkNMVURFX0RJUlN9IikKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9MSUJSQVJZX0RJUjogJHtDVURBVG9vbGtpdF9MSUJSQVJZX0RJUn0iKQorbWVzc2FnZShTVEFUVVMgIkNVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRSAke0NVREFUb29sa2l0X05WQ0NfRVhFQ1VUQUJMRX0iKQorCitzZXQoY3VkYV9saWJzIGN1ZGFydCBjdWRhX2RyaXZlciBjdWJsYXMgY3VmZnQgY3VmZnR3IGN1cmFuZCBjdXNvbHZlciBjdXNwYXJzZSkKK2lmKENVREFUb29sa2l0X1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEwLjEpCisgIGxpc3QoQVBQRU5EIGN1ZGFfbGlicyBjdWJsYXNMdCkKK2VuZGlmKCkKK2lmKENVREFUb29sa2l0X1ZFUlNJT05fTUFKT1IgVkVSU0lPTl9MRVNTIDExKQorICBsaXN0KEFQUEVORCBjdWRhX2xpYnMgbnZncmFwaCkKK2VuZGlmKCkKKworIyBWZXJpZnkgdGhhdCBhbGwgdGhlIENVREE6OiB0YXJnZXRzIGV4aXN0IGV2ZW4gd2hlbiB0aGUgQ1VEQSBsYW5ndWFnZSBpc24ndCBlbmFibGVkCitmb3JlYWNoIChjdWRhX2xpYiBJTiBMSVNUUyBjdWRhX2xpYnMpCisgIGlmKE5PVCBDVURBXyR7Y3VkYV9saWJ9X0xJQlJBUlkpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXhwZWN0ZWQgQ1VEQVRvb2xraXQgdmFyaWFibGUgQ1VEQV8ke2N1ZGFfbGlifV9MSUJSQVJZIG5vdCBmb3VuZCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIFRBUkdFVCBDVURBOjoke2N1ZGFfbGlifSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJleHBlY3RlZCBDVURBVG9vbGtpdCB0YXJnZXQgQ1VEQTo6JHtjdWRhX2xpYn0gbm90IGZvdW5kIikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK3NldChucHBfbGlicyBucHBjIG5wcGlhbCBucHBpY2MgbnBwaWRlaSBucHBpZiBucHBpZyBucHBpbSBucHBpc3QgbnBwaXRjIG5wcHMgbnBwaXN1KQoraWYoQ1VEQVRvb2xraXRfVkVSU0lPTl9NQUpPUiBWRVJTSU9OX0xFU1MgMTEpCisgIGxpc3QoQVBQRU5EIG5wcF9saWJzIG5wcGljb20pCitlbmRpZigpCitmb3JlYWNoIChjdWRhX2xpYiBJTiBMSVNUUyBucHBfbGlicykKKyAgaWYoTk9UIFRBUkdFVCBDVURBOjoke2N1ZGFfbGlifSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgQ1VEQTo6JHtjdWRhX2xpYn0gdGFyZ2V0IHdhcyBleHBlY3RlZCBidXQgY291bGRuJ3QgYmUgZm91bmQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaCAoY3VkYV9saWIgbnZydGMgbnZUb29sc0V4dCBPcGVuQ0wpCisgIGlmKE5PVCBUQVJHRVQgQ1VEQTo6JHtjdWRhX2xpYn0pCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGhlIENVREE6OiR7Y3VkYV9saWJ9IHRhcmdldCB3YXMgZXhwZWN0ZWQgYnV0IGNvdWxkbid0IGJlIGZvdW5kIikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK2FkZF9leGVjdXRhYmxlKFRvb2xraXQgbWFpbi5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoVG9vbGtpdCBQUklWQVRFIENVREE6OnRvb2xraXQpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhL1Rvb2xraXRJbmNsdWRlL21haW4uY3BwIGIvVGVzdHMvQ3VkYS9Ub29sa2l0L21haW4uY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9DdWRhL1Rvb2xraXRJbmNsdWRlL21haW4uY3BwCnJlbmFtZSB0byBUZXN0cy9DdWRhL1Rvb2xraXQvbWFpbi5jcHAKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGEvVG9vbGtpdEluY2x1ZGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhL1Rvb2xraXRJbmNsdWRlL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ2YjU0Li4wMDAwMDAwCi0tLSBhL1Rlc3RzL0N1ZGEvVG9vbGtpdEluY2x1ZGUvQ01ha2VMaXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy44KQotcHJvamVjdCAoVG9vbGtpdEluY2x1ZGUgQ1hYIENVREEpCi0KLSNHb2FsIGZvciB0aGlzIGV4YW1wbGU6Ci0jIFZhbGlkYXRlIHRoYXQgYmV0d2VlbiB0aGUgQ1hYIGltcGxpY2l0IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIHRoZQotIyBDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUyBkaXJlY3RvcmllcyB3ZSBjYW4gZmluZAotIyB0aGUgY3VkYSBydW50aW1lIGhlYWRlcnMKLQotYWRkX2V4ZWN1dGFibGUoQ3VkYVRvb2xraXRJbmNsdWRlIG1haW4uY3BwKQotdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoQ3VkYVRvb2xraXRJbmNsdWRlIFBSSVZBVEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VEQV9UT09MS0lUX0lOQ0xVREVfRElSRUNUT1JJRVN9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYS9XaXRoQy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGEvV2l0aEMvQ01ha2VMaXN0cy50eHQKaW5kZXggNjlhYTNmOS4uMDQ5Y2JjZSAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYS9XaXRoQy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhL1dpdGhDL0NNYWtlTGlzdHMudHh0CkBAIC0xLDcgKzEsNyBAQAogY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNykKIHByb2plY3QoV2l0aEMgQ1VEQSBDKQogCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKK3NldChDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgMzApCiAKIGFkZF9leGVjdXRhYmxlKEN1ZGFXaXRoQyBtYWluLmMgY3VkYS5jdSkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvQXJjaGl0ZWN0dXJlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvQXJjaGl0ZWN0dXJlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTk3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9BcmNoaXRlY3R1cmUvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxNSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTgpCitwcm9qZWN0KEFyY2hpdGVjdHVyZSBDVURBKQorCithZGRfZXhlY3V0YWJsZShBcmNoaXRlY3R1cmUgbWFpbi5jdSkKK3NldF9wcm9wZXJ0eShUQVJHRVQgQXJjaGl0ZWN0dXJlIFBST1BFUlRZIENVREFfQVJDSElURUNUVVJFUyA1MikKKworIyBNYWtlIHN1cmUgQ01ha2UgZG9lc24ndCBwYXNzIGFyY2hpdGVjdHVyZXMgaWYgQ1VEQV9BUkNISVRFQ1RVUkVTIGlzIE9GRi4KK2lmKENNQUtFX0NVREFfQ09NUElMRVJfSUQgU1RSRVFVQUwgIk5WSURJQSIpCisgIHNldChDTUFLRV9DVURBX0ZMQUdTICIke0NNQUtFX0NVREFfRkxBR1N9IC1hcmNoPXNtXzUyIikKK2Vsc2VpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJDbGFuZyIpCisgIHNldChDTUFLRV9DVURBX0ZMQUdTICIke0NNQUtFX0NVREFfRkxBR1N9IC0tY3VkYS1ncHUtYXJjaD1zbV81MiIpCitlbmRpZigpCisKK2FkZF9leGVjdXRhYmxlKEFyY2hpdGVjdHVyZU9mZiBtYWluLmN1KQorc2V0X3Byb3BlcnR5KFRBUkdFVCBBcmNoaXRlY3R1cmVPZmYgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIE9GRikKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L0FyY2hpdGVjdHVyZS9tYWluLmN1IGIvVGVzdHMvQ3VkYU9ubHkvQXJjaGl0ZWN0dXJlL21haW4uY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4MTdkNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L0FyY2hpdGVjdHVyZS9tYWluLmN1CkBAIC0wLDAgKzEsOSBAQAorI2lmZGVmIF9fQ1VEQV9BUkNIX18KKyMgIGlmIF9fQ1VEQV9BUkNIX18gIT0gNTIwCisjICAgIGVycm9yICJQYXNzZWQgYXJjaGl0ZWN0dXJlIDUyLCBidXQgZ290IHNvbWV0aGluZyBlbHNlLiIKKyMgIGVuZGlmCisjZW5kaWYKKworaW50IG1haW4oKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9DTWFrZUxpc3RzLnR4dAppbmRleCBmMWZkMzQ0Li43Mzc2YTczIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9DTWFrZUxpc3RzLnR4dApAQCAtMSwyMyArMSw2NCBAQAorbWFjcm8gKGFkZF9jdWRhX3Rlc3RfbWFjcm8gbmFtZSkKKyAgYWRkX3Rlc3RfbWFjcm8oIiR7bmFtZX0iICR7QVJHTn0pCisgIHNldF9wcm9wZXJ0eShURVNUICIke25hbWV9IiBBUFBFTkQKKyAgICBQUk9QRVJUWSBMQUJFTFMgIkNVREEiKQorZW5kbWFjcm8gKCkKIAotQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuQ2lyY3VsYXJMaW5rTGluZSBDdWRhT25seUNpcmN1bGFyTGlua0xpbmUpCi1BRERfVEVTVF9NQUNSTyhDdWRhT25seS5FbmFibGVTdGFuZGFyZCBDdWRhT25seUVuYWJsZVN0YW5kYXJkKQotQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuRXhwb3J0UFRYIEN1ZGFPbmx5RXhwb3J0UFRYKQotQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuR1BVRGVidWdGbGFnIEN1ZGFPbmx5R1BVRGVidWdGbGFnKQotQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuUmVzb2x2ZURldmljZVN5bWJvbHMgQ3VkYU9ubHlSZXNvbHZlRGV2aWNlU3ltYm9scykKLUFERF9URVNUX01BQ1JPKEN1ZGFPbmx5LlNlcGFyYXRlQ29tcGlsYXRpb24gQ3VkYU9ubHlTZXBhcmF0ZUNvbXBpbGF0aW9uKQotQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuV2l0aERlZnMgQ3VkYU9ubHlXaXRoRGVmcykKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYU9ubHkuQXJjaGl0ZWN0dXJlIEFyY2hpdGVjdHVyZSkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYU9ubHkuQ29tcGlsZUZsYWdzIEN1ZGFPbmx5Q29tcGlsZUZsYWdzKQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5FbmFibGVTdGFuZGFyZCBDdWRhT25seUVuYWJsZVN0YW5kYXJkKQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5FeHBvcnRQVFggQ3VkYU9ubHlFeHBvcnRQVFgpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGFPbmx5LlNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBDdWRhT25seVNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCkKK2FkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYU9ubHkuU3RhbmRhcmQ5OCBDdWRhT25seVN0YW5kYXJkOTgpCithZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGFPbmx5LlRvb2xraXQgQ3VkYU9ubHlUb29sa2l0KQorYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5XaXRoRGVmcyBDdWRhT25seVdpdGhEZWZzKQogCi1hZGRfdGVzdChOQU1FIEN1ZGFPbmx5LkRvbnRSZXNvbHZlRGV2aWNlU3ltYm9scyBDT01NQU5ECitpZihDTWFrZV9URVNUX0NVREEgQU5EIE5PVCBDTWFrZV9URVNUX0NVREEgU1RSRVFVQUwgIkNsYW5nIikKKyAgYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5TaGFyZWRSdW50aW1lVmlhQ1VEQUZsYWdzIEN1ZGFPbmx5U2hhcmVkUnVudGltZVZpYUNVREFGbGFncykKKworICAjIFNlcGFyYWJsZSBjb21waWxhdGlvbiBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgb24gTlZDQy4gRGlzYWJsZSB0ZXN0cworICAjIHVzaW5nIGl0IGZvciBvdGhlciBjb21waWxlcnMuCisgIGFkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYU9ubHkuQ2lyY3VsYXJMaW5rTGluZSBDdWRhT25seUNpcmN1bGFyTGlua0xpbmUpCisgIGFkZF9jdWRhX3Rlc3RfbWFjcm8oQ3VkYU9ubHkuUmVzb2x2ZURldmljZVN5bWJvbHMgQ3VkYU9ubHlSZXNvbHZlRGV2aWNlU3ltYm9scykKKyAgYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5TZXBhcmF0ZUNvbXBpbGF0aW9uIEN1ZGFPbmx5U2VwYXJhdGVDb21waWxhdGlvbikKKworICBhZGRfdGVzdChOQU1FIEN1ZGFPbmx5LkRvbnRSZXNvbHZlRGV2aWNlU3ltYm9scyBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzLyIKKyAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0RvbnRSZXNvbHZlRGV2aWNlU3ltYm9scy8iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgKQorICBzZXRfcHJvcGVydHkoVEVTVCAiQ3VkYU9ubHkuRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzIiBBUFBFTkQKKyAgICBQUk9QRVJUWSBMQUJFTFMgIkNVREEiKQorCisgICMgT25seSBOVkNDIGRlZmluZXMgX19DVURBQ0NfREVCVUdfXyB3aGVuIGNvbXBpbGluZyBpbiBkZWJ1ZyBtb2RlLgorICBhZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGFPbmx5LkdQVURlYnVnRmxhZyBDdWRhT25seUdQVURlYnVnRmxhZykKK2VuZGlmKCkKKworIyBUaGUgQ1VEQSBvbmx5IHNoaXBzIHRoZSBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgdG9vbGtpdCBsaWJyYXJpZXMKKyMgb24gd2luZG93cworaWYoTk9UIFdJTjMyKQorICBhZGRfY3VkYV90ZXN0X21hY3JvKEN1ZGFPbmx5LlN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCBDdWRhT25seVN0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdCkKK2VuZGlmKCkKKworaWYoTVNWQykKKyAgYWRkX2N1ZGFfdGVzdF9tYWNybyhDdWRhT25seS5QREIgQ3VkYU9ubHlQREIpCitlbmRpZigpCisKK2FkZF90ZXN0KE5BTUUgQ3VkYU9ubHkuUnVudGltZUNvbnRyb2xzIENPTU1BTkQKICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CiAgIC0tYnVpbGQtYW5kLXRlc3QKLSAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9Eb250UmVzb2x2ZURldmljZVN5bWJvbHMvIgotICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0RvbnRSZXNvbHZlRGV2aWNlU3ltYm9scy8iCi0gICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9Ci0gIC0tYnVpbGQtcHJvamVjdCBEb250UmVzb2x2ZURldmljZVN5bWJvbHMKKyAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9SdW50aW1lQ29udHJvbHMvIgorICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1J1bnRpbWVDb250cm9scy8iCisgIC0tYnVpbGQtdHdvLWNvbmZpZworICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgIC0tYnVpbGQtcHJvamVjdCBSdW50aW1lQ29udHJvbHMKICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CiAgICkKLQotaWYoTVNWQykKLSAgQUREX1RFU1RfTUFDUk8oQ3VkYU9ubHkuUERCIEN1ZGFPbmx5UERCKQotZW5kaWYoKQorc2V0X3Byb3BlcnR5KFRFU1QgIkN1ZGFPbmx5LlJ1bnRpbWVDb250cm9scyIgQVBQRU5ECisgIFBST1BFUlRZIExBQkVMUyAiQ1VEQSIpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9DaXJjdWxhckxpbmtMaW5lL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvQ2lyY3VsYXJMaW5rTGluZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1ZTZmN2FiLi5lMTBhMzQ4IDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9DaXJjdWxhckxpbmtMaW5lL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGFPbmx5L0NpcmN1bGFyTGlua0xpbmUvQ01ha2VMaXN0cy50eHQKQEAgLTUsOSArNSw5IEBACiAjIFZlcmlmeSB0aGF0IHdlIGRlLWR1cGxpY2F0ZSB0aGUgZGV2aWNlIGxpbmsgbGluZQogIyBWZXJpZnkgdGhhdCBhIGRlLWR1cGxpY2F0ZWQgbGluayBsaW5lIHN0aWxsIHdvcmtzIHdpdGggY2lyY3VsYXIgc3RhdGljIGxpYnJhcmllcwogCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1bY29tcHV0ZV8zMF0iKQogc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKIAogYWRkX2xpYnJhcnkoQ1VEQUNpcmN1bGFyRGV2aWNlTGlua2luZzEgU1RBVElDIGZpbGUxLmN1KQogYWRkX2xpYnJhcnkoQ1VEQUNpcmN1bGFyRGV2aWNlTGlua2luZzIgU1RBVElDIGZpbGUyLmN1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvQ29tcGlsZUZsYWdzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvQ29tcGlsZUZsYWdzL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOGE4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9Db21waWxlRmxhZ3MvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxNSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTcpCitwcm9qZWN0KENvbXBpbGVGbGFncyBDVURBKQorCithZGRfZXhlY3V0YWJsZShDdWRhT25seUNvbXBpbGVGbGFncyBtYWluLmN1KQorCisjIFRyeSBwYXNzaW5nIENVREEgYXJjaGl0ZWN0dXJlIGZsYWdzIGV4cGxpY2l0bHkuCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICB0YXJnZXRfY29tcGlsZV9vcHRpb25zKEN1ZGFPbmx5Q29tcGlsZUZsYWdzIFBSSVZBVEUKKyAgICAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfNTAsY29kZT1jb21wdXRlXzUwCisgICkKK2Vsc2UoKQorICBzZXRfcHJvcGVydHkoVEFSR0VUIEN1ZGFPbmx5Q29tcGlsZUZsYWdzIFBST1BFUlRZIENVREFfQVJDSElURUNUVVJFUyA1MC1yZWFsKQorZW5kaWYoKQorCit0YXJnZXRfY29tcGlsZV9vcHRpb25zKEN1ZGFPbmx5Q29tcGlsZUZsYWdzIFBSSVZBVEUgLURBTFdBWVNfREVGSU5FKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvQ29tcGlsZUZsYWdzL21haW4uY3UgYi9UZXN0cy9DdWRhT25seS9Db21waWxlRmxhZ3MvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTljMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvQ29tcGlsZUZsYWdzL21haW4uY3UKQEAgLTAsMCArMSwxMyBAQAorI2lmZGVmIF9fQ1VEQV9BUkNIX18KKyMgIGlmIF9fQ1VEQV9BUkNIX18gIT0gNTAwCisjICAgIGVycm9yICJQYXNzZWQgYXJjaGl0ZWN0dXJlIDUwLCBidXQgZ290IHNvbWV0aGluZyBlbHNlLiIKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBBTFdBWVNfREVGSU5FCisjICBlcnJvciAiQUxXQVlTX0RFRklORSBub3QgZGVmaW5lZCEiCisjZW5kaWYKKworaW50IG1haW4oKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzL0NNYWtlTGlzdHMudHh0CmluZGV4IDZlMzY5N2YuLjEyNjU2NjAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGFPbmx5L0RvbnRSZXNvbHZlRGV2aWNlU3ltYm9scy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9Eb250UmVzb2x2ZURldmljZVN5bWJvbHMvQ01ha2VMaXN0cy50eHQKQEAgLTI0LDkgKzI0LDkgQEAKICMgRG9uJ3QgcmVzb2x2ZSB0aGUgZGV2aWNlIHN5bWJvbHMgaW4gdGhlIHN0YXRpYyBsaWJyYXJ5CiAjIERvbid0IHJlc29sdmUgdGhlIGRldmljZSBzeW1ib2xzIGluIHRoZSBleGVjdXRhYmxlIGxpYnJhcnkKICMgVmVyaWZ5IHRoYXQgd2UgY2FuJ3QgdXNlIHRob3NlIGRldmljZSBzeW1ib2xzIGZyb20gYW55dGhpbmcKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV8zMCxjb2RlPVtjb21wdXRlXzMwXSAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfNTAsY29kZT1cXFwiY29tcHV0ZV81MFxcXCIiKQogc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKIHNldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCA1MCkKIHNldChDTUFLRV9DVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFMgT0ZGKQogCiBhZGRfbGlicmFyeShDVURBTm9EZXZpY2VSZXNvbHZlIFNIQVJFRCBmaWxlMS5jdSkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L0RvbnRSZXNvbHZlRGV2aWNlU3ltYm9scy9maWxlMS5jdSBiL1Rlc3RzL0N1ZGFPbmx5L0RvbnRSZXNvbHZlRGV2aWNlU3ltYm9scy9maWxlMS5jdQppbmRleCAzOTI0ZjY3Li45MGM3MGUyIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9Eb250UmVzb2x2ZURldmljZVN5bWJvbHMvZmlsZTEuY3UKKysrIGIvVGVzdHMvQ3VkYU9ubHkvRG9udFJlc29sdmVEZXZpY2VTeW1ib2xzL2ZpbGUxLmN1CkBAIC02MSw3ICs2MSw3IEBACiAgIGVyciA9IGN1ZGFHZXRMYXN0RXJyb3IoKTsKICAgc3RkOjpjb3V0IDw8IGVyciA8PCAiICIgPDwgY3VkYUdldEVycm9yU3RyaW5nKGVycikgPDwgc3RkOjplbmRsOwogICBpZiAoZXJyID09IGN1ZGFTdWNjZXNzKSB7Ci0gICAgLy8gVGhpcyBrZXJuZWwgbGF1bmNoIHNob3VsZCBmYWlsZWQgYXMgdGhlIGRldmljZSBsaW5raW5nIG5ldmVyIG9jY3VyZWQKKyAgICAvLyBUaGlzIGtlcm5lbCBsYXVuY2ggc2hvdWxkIGZhaWxlZCBhcyB0aGUgZGV2aWNlIGxpbmtpbmcgbmV2ZXIgb2NjdXJyZWQKICAgICBzdGQ6OmNlcnIgPDwgImZpbGUxX2tlcm5lbDoga2VybmVsIGxhdW5jaCBzaG91bGQgaGF2ZSBmYWlsZWQiIDw8IHN0ZDo6ZW5kbDsKICAgICByZXR1cm4gMTsKICAgfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvRW5hYmxlU3RhbmRhcmQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9FbmFibGVTdGFuZGFyZC9DTWFrZUxpc3RzLnR4dAppbmRleCA1NGUyYzE0Li5kZmNiOGRhIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9FbmFibGVTdGFuZGFyZC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9FbmFibGVTdGFuZGFyZC9DTWFrZUxpc3RzLnR4dApAQCAtMTEsOCArMTEsOSBAQAogYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlFbmFibGVTdGFuZGFyZCBtYWluLmN1KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN1ZGFPbmx5RW5hYmxlU3RhbmRhcmQgUFJJVkFURSBDVURBU3RhdGljMTEgQ1VEQUR5bmFtaWMxMSkKIAotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKENVREFTdGF0aWMxMSBDVURBRHluYW1pYzExIFBST1BFUlRJRVMgQ1VEQV9TVEFOREFSRCAxMSkKLXNldF90YXJnZXRfcHJvcGVydGllcyhDVURBU3RhdGljMTEgQ1VEQUR5bmFtaWMxMSBQUk9QRVJUSUVTIENVREFfU1RBTkRBUkRfUkVRVUlSRUQgVFJVRSkKK3RhcmdldF9jb21waWxlX2ZlYXR1cmVzKENVREFEeW5hbWljMTEgUFJJVkFURSBjdWRhX3N0ZF8xMSkKK3NldF90YXJnZXRfcHJvcGVydGllcyhDVURBU3RhdGljMTEgUFJPUEVSVElFUyBDVURBX1NUQU5EQVJEIDExKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKENVREFTdGF0aWMxMSBQUk9QRVJUSUVTIENVREFfU1RBTkRBUkRfUkVRVUlSRUQgVFJVRSkKIAogI1ZlcmlmeSBDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFUwogZm9yZWFjaChkaXIgJHtDTUFLRV9DVURBX1RPT0xLSVRfSU5DTFVERV9ESVJFQ1RPUklFU30pCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9FeHBvcnRQVFgvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9FeHBvcnRQVFgvQ01ha2VMaXN0cy50eHQKaW5kZXggZmY2ZTc3Yy4uZWU1ZjU0ZCAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYU9ubHkvRXhwb3J0UFRYL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1ZGFPbmx5L0V4cG9ydFBUWC9DTWFrZUxpc3RzLnR4dApAQCAtMzQsMTYgKzM0LDE1IEBACiAjIG5lZWQgdG8gYWxzbyBwYXNzIHRoZSAtLW5hbWUgb3B0aW9uCiBzZXQob3V0cHV0X2ZpbGUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2VtYmVkZGVkX29ianMuaCkKIAotZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChjdWRhX2NvbXBpbGVyX2JpbiAiJHtDTUFLRV9DVURBX0NPTVBJTEVSfSIgRElSRUNUT1JZKQorZmluZF9wYWNrYWdlKENVREFUb29sa2l0IFJFUVVJUkVEKQogZmluZF9wcm9ncmFtKGJpbl90b19jCiAgIE5BTUVTIGJpbjJjCi0gIFBBVEhTICR7Y3VkYV9jb21waWxlcl9iaW59CisgIFBBVEhTICR7Q1VEQVRvb2xraXRfQklOX0RJUn0KICAgKQogaWYoTk9UIGJpbl90b19jKQogICBtZXNzYWdlKEZBVEFMX0VSUk9SCiAgICAgImJpbjJjIG5vdCBmb3VuZDpcbiIKLSAgICAiICBDTUFLRV9DVURBX0NPTVBJTEVSPScke0NNQUtFX0NVREFfQ09NUElMRVJ9J1xuIgotICAgICIgIGN1ZGFfY29tcGlsZXJfYmluPScke2N1ZGFfY29tcGlsZXJfYmlufSdcbiIKKyAgICAiICBDVURBVG9vbGtpdF9CSU5fRElSPScke0NVREFUb29sa2l0X0JJTl9ESVJ9J1xuIgogICAgICkKIGVuZGlmKCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvR1BVRGVidWdGbGFnL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvR1BVRGVidWdGbGFnL0NNYWtlTGlzdHMudHh0CmluZGV4IGZiZWYxNWYuLjY2NzU2NTUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1ZGFPbmx5L0dQVURlYnVnRmxhZy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9HUFVEZWJ1Z0ZsYWcvQ01ha2VMaXN0cy50eHQKQEAgLTIsMTggKzIsMTkgQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjcpCiBwcm9qZWN0IChHUFVEZWJ1Z0ZsYWcgQ1VEQSkKIAotI0dvYWwgZm9yIHRoaXMgZXhhbXBsZToKLSN2ZXJpZnkgdGhhdCAtRyBlbmFibGVzIGdwdSBkZWJ1ZyBmbGFncwotc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLWdlbmNvZGU9YXJjaD1jb21wdXRlXzMwLGNvZGU9Y29tcHV0ZV8zMCIpCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtRyIpCiBzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRCAxMSkKK3NldChDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgMzApCisKKyMgR29hbCBmb3IgdGhpcyBleGFtcGxlOgorIyBWZXJpZnkgdGhhdCBlbmFibGluZyBkZXZpY2UgZGVidWcgd29ya3MuCitzdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtRyIpCiAKIGFkZF9leGVjdXRhYmxlKEN1ZGFPbmx5R1BVRGVidWdGbGFnIG1haW4uY3UpCiAKKyNDVURBJ3MgX19DVURBQ0NfREVCVUdfXyBkZWZpbmUgd2FzIGFkZGVkIGluIE5WQ0MgOS4wCisjc28gaWYgd2UgYXJlIGJlbG93IDkuMC4wIHdlIHdpbGwgbWFudWFsbHkgYWRkIHRoZSBkZWZpbmUgc28gdGhhdCB0aGUgdGVzdAorI3Bhc3NlcwogaWYoQ01BS0VfQ1VEQV9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyA5LjAuMCkKLSAgI0NVREEncyBfX0NVREFDQ19ERUJVR19fIGRlZmluZSB3YXMgYWRkZWQgaW4gOS4wCi0gICNzbyBpZiB3ZSBhcmUgYmVsb3cgOS4wLjAgd2Ugd2lsbCBtYW51YWxseSBhZGQgdGhlIGRlZmluZSBzbyB0aGF0IHRoZSB0ZXN0Ci0gICNwYXNzZXMKICAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoQ3VkYU9ubHlHUFVEZWJ1Z0ZsYWcgUFJJVkFURSAiX19DVURBQ0NfREVCVUdfXyIpCiBlbmRpZigpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1Jlc29sdmVEZXZpY2VTeW1ib2xzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvUmVzb2x2ZURldmljZVN5bWJvbHMvQ01ha2VMaXN0cy50eHQKaW5kZXggNjQ4NDVjNS4uYmQ5NGVjOCAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYU9ubHkvUmVzb2x2ZURldmljZVN5bWJvbHMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VkYU9ubHkvUmVzb2x2ZURldmljZVN5bWJvbHMvQ01ha2VMaXN0cy50eHQKQEAgLTIxLDEyICsyMSwxMiBAQAogIyBjb25maXJtaW5nIHRoYXQgdGhlIGZpcnN0IHN0YXRpYyBsaWJyYXJ5IGlzIG9uIHRoZSBkZXZpY2UgbGluayBsaW5lCiAjIDMuIFZlcmlmeSB0aGF0IHdlIGNhbid0IHVzZSB0aG9zZSBkZXZpY2Ugc3ltYm9scyBmcm9tIGFueXRoaW5nIHRoYXQgbGlua3MKICMgdG8gdGhlIHN0YXRpYyBsaWJyYXJ5Ci1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1bc21fMzBdIC1nZW5jb2RlIGFyY2g9Y29tcHV0ZV81MCxjb2RlPVxcXCJjb21wdXRlXzUwXFxcIiIpCi1zZXQoQ01BS0VfQ1hYX1NUQU5EQVJEIDExKQotc2V0KENNQUtFX0NVREFfU1RBTkRBUkQgMTEpCitzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIDMwIDUwKQogCiBhZGRfbGlicmFyeShDVURBUmVzb2x2ZURldmljZURlcHNBIFNUQVRJQyBmaWxlMS5jdSkKIGFkZF9saWJyYXJ5KENVREFSZXNvbHZlRGV2aWNlRGVwc0IgU1RBVElDIGZpbGUyLmN1KQordGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoQ1VEQVJlc29sdmVEZXZpY2VEZXBzQSBQVUJMSUMgY3VkYV9zdGRfMTEpCit0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyhDVURBUmVzb2x2ZURldmljZURlcHNCIFBVQkxJQyBjdWRhX3N0ZF8xMSkKIHNldF90YXJnZXRfcHJvcGVydGllcyhDVURBUmVzb2x2ZURldmljZURlcHNBIENVREFSZXNvbHZlRGV2aWNlRGVwc0IKICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTCiAgICAgICAgICAgICAgICAgICAgICAgQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04gT04KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGE1NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNTkgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjcpCitwcm9qZWN0IChSdW50aW1lQ29udHJvbHMgQ1VEQSkKKworIyBGaW5kIG5tIGFuZCBkdW1wYmluCitpZihDTUFLRV9OTSkKKyAgc2V0KGR1bXBfY29tbWFuZCAke0NNQUtFX05NfSkKKyAgc2V0KGR1bXBfYXJncyAtZykKK2Vsc2UoKQorICBpbmNsdWRlKEdldFByZXJlcXVpc2l0ZXMpCisgIG1lc3NhZ2UoU1RBVFVTICJjYWxsaW5nIGxpc3RfcHJlcmVxdWlzaXRlcyB0byBmaW5kIGR1bXBiaW4iKQorICBsaXN0X3ByZXJlcXVpc2l0ZXMoIiR7Q01BS0VfQ09NTUFORH0iIDAgMCAwKQorICBpZihncF9kdW1wYmluKQorICAgIHNldChkdW1wX2NvbW1hbmQgJHtncF9kdW1wYmlufSkKKyAgICBzZXQoZHVtcF9hcmdzIC9BUkNISVZFTUVNQkVSUykKKyAgZW5kaWYoKQorZW5kaWYoKQorCitzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRCAxMSkKK3NldChDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgMzApCitzZXQoQ01BS0VfQ1VEQV9SVU5USU1FX0xJQlJBUlkgc3RhdGljKQorCitpZihOT1QgIngke0NNQUtFX0NVREFfU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQorICBhZGRfbGlicmFyeShVc2VzTm9DdWRhUlQgU0hBUkVEIGZpbGUxLmN1KQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVXNlc05vQ3VkYVJUIFBST1BFUlRJRVMgQ1VEQV9SVU5USU1FX0xJQlJBUlkgbm9uZSkKK2VuZGlmKCkKKworYWRkX2xpYnJhcnkoVXNlc1N0YXRpY0N1ZGFSVCBTSEFSRUQgZmlsZTIuY3UpCisKK2FkZF9leGVjdXRhYmxlKEN1ZGFPbmx5UnVudGltZUNvbnRyb2xzIG1haW4uY3UpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ3VkYU9ubHlSdW50aW1lQ29udHJvbHMgUFJPUEVSVElFUyBDVURBX1JVTlRJTUVfTElCUkFSWSBzaGFyZWQpCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDdWRhT25seVJ1bnRpbWVDb250cm9scyBQUklWQVRFICQ8VEFSR0VUX05BTUVfSUZfRVhJU1RTOlVzZXNOb0N1ZGFSVD4gVXNlc1N0YXRpY0N1ZGFSVCkKKworCitpZihkdW1wX2NvbW1hbmQpCisgIGlmKFRBUkdFVCBVc2VzTm9DdWRhUlQpCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBVc2VzTm9DdWRhUlQgUE9TVF9CVUlMRAorICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQorICAgIC1ERFVNUF9DT01NQU5EPSR7ZHVtcF9jb21tYW5kfQorICAgIC1ERFVNUF9BUkdTPSR7ZHVtcF9hcmdzfQorICAgIC1EVEVTVF9MSUJSQVJZX1BBVEg9JDxUQVJHRVRfRklMRTpVc2VzTm9DdWRhUlQ+CisgICAgLVAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L25vX3J1bnRpbWUuY21ha2UKKyAgICApCisgIGVuZGlmKCkKKyAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBVc2VzU3RhdGljQ3VkYVJUIFBPU1RfQlVJTEQKKyAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0KKyAgICAtRERVTVBfQ09NTUFORD0ke2R1bXBfY29tbWFuZH0KKyAgICAtRERVTVBfQVJHUz0ke2R1bXBfYXJnc30KKyAgICAtRFRFU1RfTElCUkFSWV9QQVRIPSQ8VEFSR0VUX0ZJTEU6VXNlc1N0YXRpY0N1ZGFSVD4KKyAgICAtUCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdXNlc19zdGF0aWNfcnVudGltZS5jbWFrZQorICApCisgIHN0cmluZyhSRVBMQUNFICI7IiAifCIgZGlycyAiJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9IikKKyAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBDdWRhT25seVJ1bnRpbWVDb250cm9scyBQT1NUX0JVSUxECisgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9CisgICAgLURFWEVDX1BBVEg9JDxUQVJHRVRfRklMRTpDdWRhT25seVJ1bnRpbWVDb250cm9scz4KKyAgICAtREVYVFJBX0xJQl9ESVJTPSIke2RpcnN9IgorICAgIC1QICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS92ZXJpZnlfcnVudGltZS5jbWFrZQorICApCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvZmlsZTEuY3UgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvZmlsZTEuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiZWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9maWxlMS5jdQpAQCAtMCwwICsxLDE4IEBACisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKK3ZvaWQgX19nbG9iYWxfXyBmaWxlMV9rZXJuZWwoaW50IHgsIGludCYgcikKK3sKKyAgciA9IC14OworfQorCitFWFBPUlQgaW50IGZpbGUxX2xhdW5jaF9rZXJuZWwoaW50IHgpCit7CisgIGludCByID0gMDsKKyAgZmlsZTFfa2VybmVsPDw8MSwgMT4+Pih4LCByKTsKKyAgcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvZmlsZTIuY3UgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvZmlsZTIuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2OGE3MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9maWxlMi5jdQpAQCAtMCwwICsxLDE4IEBACisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKK3ZvaWQgX19nbG9iYWxfXyBmaWxlMl9rZXJuZWwoaW50IHgsIGludCYgcikKK3sKKyAgciA9IC14OworfQorCitFWFBPUlQgaW50IGZpbGUyX2xhdW5jaF9rZXJuZWwoaW50IHgpCit7CisgIGludCByID0gMDsKKyAgZmlsZTJfa2VybmVsPDw8MSwgMT4+Pih4LCByKTsKKyAgcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvbWFpbi5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTIyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvbWFpbi5jdQpAQCAtMCwwICsxLDgxIEBACisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgImN1ZGEuaCIKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIElNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbHNlCisjICBkZWZpbmUgSU1QT1JUCisjZW5kaWYKKworI2lmbmRlZiBfV0lOMzIKK0lNUE9SVCBpbnQgZmlsZTFfbGF1bmNoX2tlcm5lbChpbnQgeCk7CisjZW5kaWYKKworSU1QT1JUIGludCBmaWxlMl9sYXVuY2hfa2VybmVsKGludCB4KTsKKworaW50IGNob29zZV9jdWRhX2RldmljZSgpCit7CisgIGludCBuRGV2aWNlcyA9IDA7CisgIGN1ZGFFcnJvcl90IGVyciA9IGN1ZGFHZXREZXZpY2VDb3VudCgmbkRldmljZXMpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgc3RkOjpjZXJyIDw8ICJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIG51bWJlciBvZiBDVURBIGVuYWJsZWQgZGV2aWNlcyIKKyAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOworICAgIHJldHVybiAxOworICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbkRldmljZXM7ICsraSkgeworICAgIGN1ZGFEZXZpY2VQcm9wIHByb3A7CisgICAgY3VkYUVycm9yX3QgZXJyID0gY3VkYUdldERldmljZVByb3BlcnRpZXMoJnByb3AsIGkpOworICAgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiQ291bGQgbm90IHJldHJpZXZlIHByb3BlcnRpZXMgZnJvbSBDVURBIGRldmljZSAiIDw8IGkKKyAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgc3RkOjpjb3V0IDw8ICJwcm9wLm1ham9yOiAiIDw8IHByb3AubWFqb3IgPDwgc3RkOjplbmRsOworICAgIGlmIChwcm9wLm1ham9yID49IDMpIHsKKyAgICAgIGVyciA9IGN1ZGFTZXREZXZpY2UoaSk7CisgICAgICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgICAgIHN0ZDo6Y291dCA8PCAiQ291bGQgbm90IHNlbGVjdCBDVURBIGRldmljZSAiIDw8IGkgPDwgc3RkOjplbmRsOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgc3RkOjpjb3V0IDw8ICJDb3VsZCBub3QgZmluZCBhIENVREEgZW5hYmxlZCBjYXJkIHN1cHBvcnRpbmcgY29tcHV0ZSA+PTMuMCIKKyAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKworICByZXR1cm4gMTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICBpbnQgcmV0ID0gY2hvb3NlX2N1ZGFfZGV2aWNlKCk7CisgIGlmIChyZXQpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGN1ZGFFcnJvcl90IGVycjsKKyNpZm5kZWYgX1dJTjMyCisgIGZpbGUxX2xhdW5jaF9rZXJuZWwoMSk7CisgIGVyciA9IGN1ZGFHZXRMYXN0RXJyb3IoKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIHN0ZDo6Y2VyciA8PCAiZmlsZTFfbGF1bmNoX2tlcm5lbDoga2VybmVsIGxhdW5jaCBzaG91bGQgaGF2ZSBwYXNzZWQuXG4gIgorICAgICAgICAgICAgICAgICAiRXJyb3IgbWVzc2FnZTogIgorICAgICAgICAgICAgICA8PCBjdWRhR2V0RXJyb3JTdHJpbmcoZXJyKSA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIDE7CisgIH0KKyNlbmRpZgorCisgIGZpbGUyX2xhdW5jaF9rZXJuZWwoMSk7CisgIGVyciA9IGN1ZGFHZXRMYXN0RXJyb3IoKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIHN0ZDo6Y2VyciA8PCAiZmlsZTJfbGF1bmNoX2tlcm5lbDoga2VybmVsIGxhdW5jaCBzaG91bGQgaGF2ZSBwYXNzZWQuXG4gIgorICAgICAgICAgICAgICAgICAiRXJyb3IgbWVzc2FnZTogIgorICAgICAgICAgICAgICA8PCBjdWRhR2V0RXJyb3JTdHJpbmcoZXJyKSA8PCBzdGQ6OmVuZGw7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9ub19ydW50aW1lLmNtYWtlIGIvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL25vX3J1bnRpbWUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmMjhjYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy9ub19ydW50aW1lLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7RFVNUF9DT01NQU5EfSAke0RVTVBfQVJHU30gJHtURVNUX0xJQlJBUllfUEFUSH0KKyAgUkVTVUxUX1ZBUklBQkxFIFJFU1VMVAorICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUCisgIEVSUk9SX1ZBUklBQkxFIEVSUk9SCispCisKK2lmKE5PVCAiJHtSRVNVTFR9IiBTVFJFUVVBTCAiMCIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7RFVNUF9DT01NQU5EfSBmYWlsZWQgWyR7UkVTVUxUfV0gWyR7T1VUUFVUfV0gWyR7RVJST1J9XSIpCitlbmRpZigpCisKK2lmKE5PVCAiJHtPVVRQVVR9IiBNQVRDSEVTICIoX19jdWRhKSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgIm5vdCBtaXNzaW5nIGN1ZGEgZGV2aWNlIHN5bWJvbHMsIHN0YXRpYyBydW50aW1lIGxpbmtpbmcgd2FzIHVzZWQuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy91c2VzX3N0YXRpY19ydW50aW1lLmNtYWtlIGIvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL3VzZXNfc3RhdGljX3J1bnRpbWUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3MmZlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1J1bnRpbWVDb250cm9scy91c2VzX3N0YXRpY19ydW50aW1lLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7RFVNUF9DT01NQU5EfSAke0RVTVBfQVJHU30gJHtURVNUX0xJQlJBUllfUEFUSH0KKyAgUkVTVUxUX1ZBUklBQkxFIFJFU1VMVAorICBPVVRQVVRfVkFSSUFCTEUgT1VUUFVUCisgIEVSUk9SX1ZBUklBQkxFIEVSUk9SCispCisKK2lmKE5PVCAiJHtSRVNVTFR9IiBTVFJFUVVBTCAiMCIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7RFVNUF9DT01NQU5EfSBmYWlsZWQgWyR7UkVTVUxUfV0gWyR7T1VUUFVUfV0gWyR7RVJST1J9XSIpCitlbmRpZigpCisKK2lmKCIke09VVFBVVH0iIE1BVENIRVMgIl9fY3VkYSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAibWlzc2luZyBjdWRhIGRldmljZSBzeW1ib2xzLCBzdGF0aWMgcnVudGltZSBsaW5raW5nIHdhcyBub3QgdXNlZC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL3ZlcmlmeV9ydW50aW1lLmNtYWtlIGIvVGVzdHMvQ3VkYU9ubHkvUnVudGltZUNvbnRyb2xzL3ZlcmlmeV9ydW50aW1lLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTNkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9SdW50aW1lQ29udHJvbHMvdmVyaWZ5X3J1bnRpbWUuY21ha2UKQEAgLTAsMCArMSwxNiBAQAorCitzdHJpbmcoUkVQTEFDRSAifCIgIjsiIGRpcnMgIiR7RVhUUkFfTElCX0RJUlN9IikKK2ZpbGUoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCisgIFJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgcmVzb2x2ZWRfbGlicworICBVTlJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgdW5yZXNvbHZlZF9saWJzCisgIERJUkVDVE9SSUVTICR7ZGlyc30KKyAgRVhFQ1VUQUJMRVMgJHtFWEVDX1BBVEh9CisgICkKKworbGlzdChGSUxURVIgcmVzb2x2ZWRfbGlicyBJTkNMVURFIFJFR0VYICIuKmN1ZGFydC4qIikKK2xpc3QoTEVOR1RIIHJlc29sdmVkX2xpYnMgaGFzX2N1ZGFydCkKKworaWYoaGFzX2N1ZGFydCBFUVVBTCAwKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIm1pc3NpbmcgY3VkYXJ0IHNoYXJlZCBsaWJyYXJ5IGZyb20gcnVudGltZSBkZXBlbmRlbmN5IG91dHB1dC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU2VwYXJhdGVDb21waWxhdGlvbi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1NlcGFyYXRlQ29tcGlsYXRpb24vQ01ha2VMaXN0cy50eHQKaW5kZXggMWU1NzRkNi4uNTg2YmU4MSAxMDA2NDQKLS0tIGEvVGVzdHMvQ3VkYU9ubHkvU2VwYXJhdGVDb21waWxhdGlvbi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9TZXBhcmF0ZUNvbXBpbGF0aW9uL0NNYWtlTGlzdHMudHh0CkBAIC05LDEzICs5LDEwIEBACiAjYW5kIGV4ZWN1dGFibGVzLgogI1dlIGNvbXBsaWNhdGUgdGhlIG1hdHRlciBieSBhbHNvIHRlc3RpbmcgdGhhdCBtdWx0aXBsZSBzdGF0aWMgbGlicmFyaWVzCiAjYWxsIGNvbnRhaW5pbmcgY3VkYSBzZXBhcmFibGUgY29tcGlsYXRpb24gY29kZSBsaW5rcyBwcm9wZXJseQotc3RyaW5nKEFQUEVORCBDTUFLRV9DVURBX0ZMQUdTICIgLWdlbmNvZGUgYXJjaD1jb21wdXRlXzMwLGNvZGU9XFxcImNvbXB1dGVfMzAsc21fMzAsc21fMzVcXFwiIikKLXN0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiIC0tZ2VuZXJhdGUtY29kZT1hcmNoPWNvbXB1dGVfNTAsY29kZT1bY29tcHV0ZV81MCxzbV81MCxzbV81Ml0iKQotc2V0KENNQUtFX0NYWF9TVEFOREFSRCAxMSkKLXNldChDTUFLRV9DVURBX1NUQU5EQVJEIDExKQotCitzZXQoQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIDMwIDM1IDUwIDUyKQogc2V0KENNQUtFX0NVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OIE9OKQogYWRkX2xpYnJhcnkoQ1VEQVNlcGFyYXRlTGliQSBTVEFUSUMgZmlsZTEuY3UgZmlsZTIuY3UgZmlsZTMuY3UpCit0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyhDVURBU2VwYXJhdGVMaWJBIFBSSVZBVEUgY3VkYV9zdGRfMTEpCiBnZXRfcHJvcGVydHkoc2VwX2NvbXAgVEFSR0VUIENVREFTZXBhcmF0ZUxpYkEgUFJPUEVSVFkgQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04pCiBpZihOT1Qgc2VwX2NvbXApCiAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNVREFfU0VQQVJBQkxFX0NPTVBJTEFUSU9OIG5vdCBpbml0aWFsaXplZCIpCkBAIC0zNiwxMSArMzMsMTQgQEAKICNjYXVzZSBhIHNlZ3Ygd2hlbiB0cnlpbmcgdG8gcnVuIHRoZSBleGVjdXRhYmxlCiAjCiBhZGRfbGlicmFyeShDVURBU2VwYXJhdGVMaWJCIFNUQVRJQyBmaWxlNC5jdSBmaWxlNS5jdSkKK3RhcmdldF9jb21waWxlX2ZlYXR1cmVzKENVREFTZXBhcmF0ZUxpYkIgUFJJVkFURSBjdWRhX3N0ZF8xMSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhDVURBU2VwYXJhdGVMaWJCIFBSSVZBVEUgQ1VEQVNlcGFyYXRlTGliQSkKIAogYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlTZXBhcmF0ZUNvbXBpbGF0aW9uIG1haW4uY3UpCiB0YXJnZXRfbGlua19saWJyYXJpZXMoQ3VkYU9ubHlTZXBhcmF0ZUNvbXBpbGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgUFJJVkFURSBDVURBU2VwYXJhdGVMaWJCKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKEN1ZGFPbmx5U2VwYXJhdGVDb21waWxhdGlvbiBQUk9QRVJUSUVTIENVREFfU1RBTkRBUkQgMTEpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ3VkYU9ubHlTZXBhcmF0ZUNvbXBpbGF0aW9uIFBST1BFUlRJRVMgQ1VEQV9TVEFOREFSRF9SRVFVSVJFRCBUUlVFKQogCiBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ1VEQVNlcGFyYXRlTGliQQogICAgICAgICAgICAgICAgICAgICAgIENVREFTZXBhcmF0ZUxpYkIKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2ZiYTIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNDIgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE1KQorcHJvamVjdChTaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQgQ1VEQSkKKworI0dvYWwgZm9yIHRoaXMgZXhhbXBsZToKKyMgVmFsaWRhdGUgdGhhdCB3aXRoIGMrKyB3ZSBjYW4gdXNlIHNvbWUgY29tcG9uZW50cyBvZiB0aGUgQ1VEQSB0b29sa2l0LCBhbmQKKyMgc3BlY2lmeSB0aGUgY3VkYSBydW50aW1lCitmaW5kX3BhY2thZ2UoQ1VEQVRvb2xraXQgUkVRVUlSRUQpCisKK2FkZF9saWJyYXJ5KENvbW1vbiBPQkpFQ1QgY3VyYW5kLmN1IG5wcGlmLmN1KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKENvbW1vbiBQUklWQVRFIENVREE6OnRvb2xraXQpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoQ29tbW9uIFBST1BFUlRJRVMgUE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERSBPTikKKworI3NoYXJlZCBydW50aW1lIHdpdGggc2hhcmVkIHRvb2xraXQgbGlicmFyaWVzCithZGRfbGlicmFyeShTaGFyZWRUb29sa2l0IFNIQVJFRCBzaGFyZWQuY3UpCit0YXJnZXRfbGlua19saWJyYXJpZXMoU2hhcmVkVG9vbGtpdCBQUklWQVRFIENvbW1vbiBQVUJMSUMgQ1VEQTo6Y3VyYW5kIENVREE6Om5wcGlmKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFNoYXJlZFRvb2xraXQgUFJPUEVSVElFUyBDVURBX1JVTlRJTUVfTElCUkFSWSBub25lKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFRvb2xraXQgUFVCTElDIENVREE6OmN1ZGFydCkKKworIyBUaGUgQ1VEQSBvbmx5IHNoaXBzIHRoZSBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgdG9vbGtpdCBsaWJyYXJpZXMKKyMgb24gd2luZG93cworaWYoTk9UIFdJTjMyKQorICAjc2hhcmVkIHJ1bnRpbWUgd2l0aCBzdGF0aWMgdG9vbGtpdCBsaWJyYXJpZXMKKyAgYWRkX2xpYnJhcnkoU3RhdGljVG9vbGtpdCBTSEFSRUQgc3RhdGljLmN1KQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoU3RhdGljVG9vbGtpdCBQUklWQVRFIENvbW1vbiBDVURBOjpjdXJhbmRfc3RhdGljIENVREE6Om5wcGlmX3N0YXRpYykKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFN0YXRpY1Rvb2xraXQgUFJPUEVSVElFUyBDVURBX1JVTlRJTUVfTElCUkFSWSBTaGFyZWQpCisKKyAgI3N0YXRpYyBydW50aW1lIHdpdGggbWl4ZWQgdG9vbGtpdCBsaWJyYXJpZXMKKyAgYWRkX2xpYnJhcnkoTWl4ZWRUb29sa2l0IFNIQVJFRCBtaXhlZC5jdSkKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKE1peGVkVG9vbGtpdCBQUklWQVRFIENvbW1vbiBDVURBOjpjdXJhbmRfc3RhdGljIENVREE6Om5wcGlmKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTWl4ZWRUb29sa2l0IFBST1BFUlRJRVMgQ1VEQV9SVU5USU1FX0xJQlJBUlkgU2hhcmVkKQorZW5kaWYoKQorCithZGRfZXhlY3V0YWJsZShDdWRhT25seVNoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdCBtYWluLmN1KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN1ZGFPbmx5U2hhcmVkUnVudGltZVBsdXNUb29sa2l0IFBSSVZBVEUgU2hhcmVkVG9vbGtpdAorICAgICAgICAgICAgICAgICAgICAgICQ8VEFSR0VUX05BTUVfSUZfRVhJU1RTOlN0YXRpY1Rvb2xraXQ+CisgICAgICAgICAgICAgICAgICAgICAgJDxUQVJHRVRfTkFNRV9JRl9FWElTVFM6TWl4ZWRUb29sa2l0PikKKworaWYoVU5JWCkKKyAgIyBIZWxwIHRoZSBzaGFyZWQgY3VkYSBydW50aW1lIGZpbmQgbGliY3VkYXJ0IGFzIGl0IGlzIG5vdCBsb2NhdGVkCisgICMgaW4gYSBkZWZhdWx0IHN5c3RlbSBzZWFyY2hlZCBsb2NhdGlvbgorICBzZXRfcHJvcGVydHkoVEFSR0VUIEN1ZGFPbmx5U2hhcmVkUnVudGltZVBsdXNUb29sa2l0IFBST1BFUlRZIEJVSUxEX1JQQVRIICR7Q01BS0VfQ1VEQV9JTVBMSUNJVF9MSU5LX0RJUkVDVE9SSUVTfSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9jdXJhbmQuY3UgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvY3VyYW5kLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZDdiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvY3VyYW5kLmN1CkBAIC0wLDAgKzEsNjUgQEAKKy8vIENvbWVzIGZyb206CisvLyBodHRwczovL2RvY3MubnZpZGlhLmNvbS9jdWRhL2N1cmFuZC9ob3N0LWFwaS1vdmVydmlldy5odG1sI2hvc3QtYXBpLWV4YW1wbGUKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICBkZWZpbmUgRVhQT1JUCisjZW5kaWYKKworLyoKKyAqIFRoaXMgcHJvZ3JhbSB1c2VzIHRoZSBob3N0IENVUkFORCBBUEkgdG8gZ2VuZXJhdGUgMTAwCisgKiBwc2V1ZG9yYW5kb20gZmxvYXRzLgorICovCisjaW5jbHVkZSA8Y3VkYS5oPgorI2luY2x1ZGUgPGN1cmFuZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgQ1VEQV9DQUxMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKHgpICE9IGN1ZGFTdWNjZXNzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50ZigiRXJyb3IgYXQgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1VSQU5EX0NBTEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKHgpICE9IENVUkFORF9TVEFUVVNfU1VDQ0VTUykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50ZigiRXJyb3IgYXQgJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworRVhQT1JUIGludCBjdXJhbmRfbWFpbigpCit7CisgIHNpemVfdCBuID0gMTAwOworICBzaXplX3QgaTsKKyAgY3VyYW5kR2VuZXJhdG9yX3QgZ2VuOworICBmbG9hdCAqZGV2RGF0YSwgKmhvc3REYXRhOworCisgIC8qIEFsbG9jYXRlIG4gZmxvYXRzIG9uIGhvc3QgKi8KKyAgaG9zdERhdGEgPSAoZmxvYXQqKWNhbGxvYyhuLCBzaXplb2YoZmxvYXQpKTsKKworICAvKiBBbGxvY2F0ZSBuIGZsb2F0cyBvbiBkZXZpY2UgKi8KKyAgQ1VEQV9DQUxMKGN1ZGFNYWxsb2MoKHZvaWQqKikmZGV2RGF0YSwgbiAqIHNpemVvZihmbG9hdCkpKTsKKworICAvKiBDcmVhdGUgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisgIENVUkFORF9DQUxMKGN1cmFuZENyZWF0ZUdlbmVyYXRvcigmZ2VuLCBDVVJBTkRfUk5HX1BTRVVET19ERUZBVUxUKSk7CisKKyAgLyogU2V0IHNlZWQgKi8KKyAgQ1VSQU5EX0NBTEwoY3VyYW5kU2V0UHNldWRvUmFuZG9tR2VuZXJhdG9yU2VlZChnZW4sIDEyMzRVTEwpKTsKKworICAvKiBHZW5lcmF0ZSBuIGZsb2F0cyBvbiBkZXZpY2UgKi8KKyAgQ1VSQU5EX0NBTEwoY3VyYW5kR2VuZXJhdGVVbmlmb3JtKGdlbiwgZGV2RGF0YSwgbikpOworCisgIC8qIENvcHkgZGV2aWNlIG1lbW9yeSB0byBob3N0ICovCisgIENVREFfQ0FMTCgKKyAgICBjdWRhTWVtY3B5KGhvc3REYXRhLCBkZXZEYXRhLCBuICogc2l6ZW9mKGZsb2F0KSwgY3VkYU1lbWNweURldmljZVRvSG9zdCkpOworCisgIC8qIENsZWFudXAgKi8KKyAgQ1VSQU5EX0NBTEwoY3VyYW5kRGVzdHJveUdlbmVyYXRvcihnZW4pKTsKKyAgQ1VEQV9DQUxMKGN1ZGFGcmVlKGRldkRhdGEpKTsKKyAgZnJlZShob3N0RGF0YSk7CisgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNGRhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jdQpAQCAtMCwwICsxLDIzIEBACisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBJTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCitJTVBPUlQgaW50IHNoYXJlZF92ZXJzaW9uKCk7CitpbnQgc3RhdGljX3ZlcnNpb24oKQoreworICByZXR1cm4gMDsKK30KK2ludCBtaXhlZF92ZXJzaW9uKCkKK3sKKyAgcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IHNoYXJlZF92ZXJzaW9uKCk7CitpbnQgc3RhdGljX3ZlcnNpb24oKTsKK2ludCBtaXhlZF92ZXJzaW9uKCk7CisjZW5kaWYKKworaW50IG1haW4oKQoreworICByZXR1cm4gbWl4ZWRfdmVyc2lvbigpID09IDAgJiYgc2hhcmVkX3ZlcnNpb24oKSA9PSAwICYmCisgICAgc3RhdGljX3ZlcnNpb24oKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L21peGVkLmN1IGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L21peGVkLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZTY4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbWl4ZWQuY3UKQEAgLTAsMCArMSwxNiBAQAorCisjaWZkZWYgX1dJTjMyCisjICBkZWZpbmUgSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgZGVmaW5lIEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjICBkZWZpbmUgSU1QT1JUCisjICBkZWZpbmUgRVhQT1JUCisjZW5kaWYKKworSU1QT1JUIGludCBjdXJhbmRfbWFpbigpOworSU1QT1JUIGludCBucHBpZl9tYWluKCk7CisKK0VYUE9SVCBpbnQgbWl4ZWRfdmVyc2lvbigpCit7CisgIHJldHVybiBjdXJhbmRfbWFpbigpID09IDAgJiYgbnBwaWZfbWFpbigpID09IDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3UgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1MzQxYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9ucHBpZi5jdQpAQCAtMCwwICsxLDkyIEBACisvLyBDb21lcyBmcm9tCisvLyBodHRwczovL2RldnRhbGsubnZpZGlhLmNvbS9kZWZhdWx0L3RvcGljLzEwMzc0ODIvZ3B1LWFjY2VsZXJhdGVkLWxpYnJhcmllcy9oZWxwLW1lLWhlbHAteW91LXdpdGgtbW9kZXJuLWNtYWtlLWFuZC1jdWRhLW13ZS1mb3ItbnBwL3Bvc3QvNTI3MTA2Ni8jNTI3MTA2NgorCisjaWZkZWYgX1dJTjMyCisjICBkZWZpbmUgRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyMgIGRlZmluZSBFWFBPUlQKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3VkYV9ydW50aW1lX2FwaS5oPgorI2luY2x1ZGUgPG5wcGlfZmlsdGVyaW5nX2Z1bmN0aW9ucy5oPgorCitFWFBPUlQgaW50IG5wcGlmX21haW4oKQoreworICAvKioKKyAgICogOC1iaXQgdW5zaWduZWQgc2luZ2xlLWNoYW5uZWwgMUQgcm93IGNvbnZvbHV0aW9uLgorICAgKi8KKyAgY29uc3QgaW50IHNpbWdyb3dzID0gMzI7CisgIGNvbnN0IGludCBzaW1nY29scyA9IDMyOworICBOcHA4dSAqZF9wU3JjLCAqZF9wRHN0OworICBjb25zdCBpbnQgbk1hc2tTaXplID0gMzsKKyAgTnBwaVNpemUgb1JPSTsKKyAgb1JPSS53aWR0aCA9IHNpbWdjb2xzIC0gbk1hc2tTaXplOworICBvUk9JLmhlaWdodCA9IHNpbWdyb3dzOworICBjb25zdCBpbnQgc2ltZ3NpemUgPSBzaW1ncm93cyAqIHNpbWdjb2xzICogc2l6ZW9mKGRfcFNyY1swXSk7CisgIGNvbnN0IGludCBkaW1nc2l6ZSA9IG9ST0kud2lkdGggKiBvUk9JLmhlaWdodCAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgc2ltZ3BpeCA9IHNpbWdyb3dzICogc2ltZ2NvbHM7CisgIGNvbnN0IGludCBkaW1ncGl4ID0gb1JPSS53aWR0aCAqIG9ST0kuaGVpZ2h0OworICBjb25zdCBpbnQgblNyY1N0ZXAgPSBzaW1nY29scyAqIHNpemVvZihkX3BTcmNbMF0pOworICBjb25zdCBpbnQgbkRzdFN0ZXAgPSBvUk9JLndpZHRoICogc2l6ZW9mKGRfcERzdFswXSk7CisgIGNvbnN0IGludCBwaXh2YWwgPSAxOworICBjb25zdCBpbnQgbkRpdmlzb3IgPSAxOworICBjb25zdCBOcHAzMnMgaF9wS2VybmVsW25NYXNrU2l6ZV0gPSB7IHBpeHZhbCwgcGl4dmFsLCBwaXh2YWwgfTsKKyAgTnBwMzJzKiBkX3BLZXJuZWw7CisgIGNvbnN0IE5wcDMycyBuQW5jaG9yID0gMjsKKyAgY3VkYUVycm9yX3QgZXJyID0gY3VkYU1hbGxvYygodm9pZCoqKSZkX3BTcmMsIHNpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNYWxsb2MoKHZvaWQqKikmZF9wRHN0LCBkaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWFsbG9jKCh2b2lkKiopJmRfcEtlcm5lbCwgbk1hc2tTaXplICogc2l6ZW9mKGRfcEtlcm5lbFswXSkpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gc2V0IGltYWdlIHRvIHBpeHZhbCBpbml0aWFsbHkKKyAgZXJyID0gY3VkYU1lbXNldChkX3BTcmMsIHBpeHZhbCwgc2ltZ3NpemUpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZXJyID0gY3VkYU1lbXNldChkX3BEc3QsIDAsIGRpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNZW1jcHkoZF9wS2VybmVsLCBoX3BLZXJuZWwsIG5NYXNrU2l6ZSAqIHNpemVvZihkX3BLZXJuZWxbMF0pLAorICAgICAgICAgICAgICAgICAgIGN1ZGFNZW1jcHlIb3N0VG9EZXZpY2UpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gY29weSBzcmMgdG8gZHN0CisgIE5wcFN0YXR1cyByZXQgPQorICAgIG5wcGlGaWx0ZXJSb3dfOHVfQzFSKGRfcFNyYywgblNyY1N0ZXAsIGRfcERzdCwgbkRzdFN0ZXAsIG9ST0ksIGRfcEtlcm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuTWFza1NpemUsIG5BbmNob3IsIG5EaXZpc29yKTsKKyAgYXNzZXJ0KHJldCA9PSBOUFBfTk9fRVJST1IpOworICBOcHA4dSogaF9pbWdyZXMgPSBuZXcgTnBwOHVbZGltZ3BpeF07CisgIGVyciA9IGN1ZGFNZW1jcHkoaF9pbWdyZXMsIGRfcERzdCwgZGltZ3NpemUsIGN1ZGFNZW1jcHlEZXZpY2VUb0hvc3QpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gdGVzdCBmb3IgZmlsdGVyaW5nCisgIGZvciAoaW50IGkgPSAwOyBpIDwgZGltZ3BpeDsgaSsrKSB7CisgICAgaWYgKGhfaW1ncmVzW2ldICE9IChwaXh2YWwgKiBwaXh2YWwgKiBuTWFza1NpemUpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImhfaW1ncmVzIGF0IGluZGV4ICVkIGZhaWxlZCB0byBtYXRjaFxuIiwgaSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1NoYXJlZFJ1bnRpbWVQbHVzVG9vbGtpdC9zaGFyZWQuY3UgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc2hhcmVkLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYzNkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc2hhcmVkLmN1CkBAIC0wLDAgKzEsMTYgQEAKKworI2lmZGVmIF9XSU4zMgorIyAgZGVmaW5lIElNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGRlZmluZSBFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyAgZGVmaW5lIElNUE9SVAorIyAgZGVmaW5lIEVYUE9SVAorI2VuZGlmCisKK2ludCBjdXJhbmRfbWFpbigpOworaW50IG5wcGlmX21haW4oKTsKKworRVhQT1JUIGludCBzaGFyZWRfdmVyc2lvbigpCit7CisgIHJldHVybiBjdXJhbmRfbWFpbigpID09IDAgJiYgbnBwaWZfbWFpbigpID09IDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lUGx1c1Rvb2xraXQvc3RhdGljLmN1IGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L3N0YXRpYy5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTMyZmEzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVBsdXNUb29sa2l0L3N0YXRpYy5jdQpAQCAtMCwwICsxLDE2IEBACisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBJTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICBkZWZpbmUgRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyMgIGRlZmluZSBJTVBPUlQKKyMgIGRlZmluZSBFWFBPUlQKKyNlbmRpZgorCitJTVBPUlQgaW50IGN1cmFuZF9tYWluKCk7CitJTVBPUlQgaW50IG5wcGlmX21haW4oKTsKKworRVhQT1JUIGludCBzdGF0aWNfdmVyc2lvbigpCit7CisgIHJldHVybiBjdXJhbmRfbWFpbigpID09IDAgJiYgbnBwaWZfbWFpbigpID09IDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lVmlhQ1VEQUZsYWdzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVZpYUNVREFGbGFncy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGZmNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVZpYUNVREFGbGFncy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE1IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNykKK3Byb2plY3QoU2hhcmVkUnVudGltZVZpYUNVREFGbGFncyBOT05FKQorCitzZXQoQ01BS0VfQ1VEQV9GTEFHUyAiIikKK3N0cmluZyhBUFBFTkQgQ01BS0VfQ1VEQV9GTEFHUyAiLWN1ZGFydCBzaGFyZWQiKQorCitlbmFibGVfbGFuZ3VhZ2UoQ1VEQSkKKworYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlTaGFyZWRSdW50aW1lVmlhQ1VEQUZsYWdzIG1haW4uY3UpCisKK2lmKFVOSVgpCisgICMgSGVscCB0aGUgc2hhcmVkIGN1ZGEgcnVudGltZSBmaW5kIGxpYmN1ZGFydCBhcyBpdCBpcyBub3QgbG9jYXRlZAorICAjIGluIGEgZGVmYXVsdCBzeXN0ZW0gc2VhcmNoZWQgbG9jYXRpb24KKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBDdWRhT25seVNoYXJlZFJ1bnRpbWVWaWFDVURBRmxhZ3MgUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVZpYUNVREFGbGFncy9tYWluLmN1IGIvVGVzdHMvQ3VkYU9ubHkvU2hhcmVkUnVudGltZVZpYUNVREFGbGFncy9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NmI3NzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TaGFyZWRSdW50aW1lVmlhQ1VEQUZsYWdzL21haW4uY3UKQEAgLTAsMCArMSw1IEBACisKK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TdGFuZGFyZDk4L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvU3RhbmRhcmQ5OC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmEwMzYwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU3RhbmRhcmQ5OC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE1IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy43KQorcHJvamVjdChDdWRhT25seVN0YW5kYXJkOTggQ1VEQSkKKworc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKKworIyBTdXBwb3J0IHNldHRpbmcgQ1VEQSBTdGFuZGFyZCB0byA5OCB3aGljaCBpbnRlcm5hbGx5IGdldHMgdHJhbnNmb3JtZWQgdG8KKyMgQ1VEQTAzCitzZXQoQ01BS0VfQ1VEQV9TVEFOREFSRCA5OCkKKworYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlTdGFuZGFyZDk4IG1haW4uY3UpCisKK2lmKEFQUExFKQorICAjIEhlbHAgdGhlIHN0YXRpYyBjdWRhIHJ1bnRpbWUgZmluZCB0aGUgZHJpdmVyIChsaWJjdWRhLmR5bGxpYikgYXQgcnVudGltZS4KKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBDdWRhT25seVN0YW5kYXJkOTggUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU3RhbmRhcmQ5OC9tYWluLmN1IGIvVGVzdHMvQ3VkYU9ubHkvU3RhbmRhcmQ5OC9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OWFmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TdGFuZGFyZDk4L21haW4uY3UKQEAgLTAsMCArMSw4IEBACisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjICBlcnJvciAiaW52YWxpZCBzdGFuZGFyZCB2YWx1ZSIKKyNlbmRpZgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhhMzUyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMzUgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE1KQorcHJvamVjdChTdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQgQ1VEQSkKKworI0dvYWwgZm9yIHRoaXMgZXhhbXBsZToKKyMgVmFsaWRhdGUgdGhhdCB3aXRoIGN1ZGEgd2UgY2FuIHVzZSBzb21lIGNvbXBvbmVudHMgb2YgdGhlIENVREEgdG9vbGtpdCwgYW5kCisjIHNwZWNpZnkgdGhlIGN1ZGEgcnVudGltZQorZmluZF9wYWNrYWdlKENVREFUb29sa2l0IFJFUVVJUkVEKQorCithZGRfbGlicmFyeShDb21tb24gT0JKRUNUIGN1cmFuZC5jdSBucHBpZi5jdSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb21tb24gUFJJVkFURSBDVURBOjp0b29sa2l0KQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKENvbW1vbiBQUk9QRVJUSUVTIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgT04pCisKKyNzdGF0aWMgcnVudGltZSB3aXRoIHNoYXJlZCB0b29sa2l0IGxpYnJhcmllcworYWRkX2xpYnJhcnkoU2hhcmVkVG9vbGtpdCBTSEFSRUQgc2hhcmVkLmN1KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNoYXJlZFRvb2xraXQgUFJJVkFURSBDb21tb24gQ1VEQTo6Y3VyYW5kIENVREE6Om5wcGlmICkKK3NldF90YXJnZXRfcHJvcGVydGllcyhTaGFyZWRUb29sa2l0IFBST1BFUlRJRVMgQ1VEQV9SVU5USU1FX0xJQlJBUlkgbm9uZSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTaGFyZWRUb29sa2l0IFBVQkxJQyBDVURBOjpjdWRhcnRfc3RhdGljKQorCisjc3RhdGljIHJ1bnRpbWUgd2l0aCBzdGF0aWMgdG9vbGtpdCBsaWJyYXJpZXMKK2FkZF9saWJyYXJ5KFN0YXRpY1Rvb2xraXQgU0hBUkVEIHN0YXRpYy5jdSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTdGF0aWNUb29sa2l0IFBSSVZBVEUgQ29tbW9uIENVREE6OmN1cmFuZF9zdGF0aWMgQ1VEQTo6bnBwaWZfc3RhdGljKQorCisjc3RhdGljIHJ1bnRpbWUgd2l0aCBtaXhlZCB0b29sa2l0IGxpYnJhcmllcworYWRkX2xpYnJhcnkoTWl4ZWRUb29sa2l0IFNIQVJFRCBtaXhlZC5jdSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhNaXhlZFRvb2xraXQgUFJJVkFURSBDb21tb24gQ1VEQTo6Y3VyYW5kIENVREE6Om5wcGlmX3N0YXRpYykKK3NldF90YXJnZXRfcHJvcGVydGllcyhNaXhlZFRvb2xraXQgUFJPUEVSVElFUyBDVURBX1JVTlRJTUVfTElCUkFSWSBTdGF0aWMpCisKK2FkZF9leGVjdXRhYmxlKEN1ZGFPbmx5U3RhdGljUnVudGltZVBsdXNUb29sa2l0IG1haW4uY3UpCit0YXJnZXRfbGlua19saWJyYXJpZXMoQ3VkYU9ubHlTdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQgUFJJVkFURSBTaGFyZWRUb29sa2l0IFN0YXRpY1Rvb2xraXQgTWl4ZWRUb29sa2l0KQorCitpZihVTklYKQorICAjIEhlbHAgdGhlIHNoYXJlZCBjdWRhIHJ1bnRpbWUgZmluZCBsaWJjdXJhbmQgYW5kIGxpYm5wcGlmIHdoZW4gdGhleSBhcmUgbm90IGxvY2F0ZWQKKyAgIyBpbiBhIGRlZmF1bHQgc3lzdGVtIHNlYXJjaGVkIGxvY2F0aW9uCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgQ3VkYU9ubHlTdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQgUFJPUEVSVFkgQlVJTERfUlBBVEggJHtDTUFLRV9DVURBX0lNUExJQ0lUX0xJTktfRElSRUNUT1JJRVN9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L2N1cmFuZC5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9jdXJhbmQuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4NzJmMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9jdXJhbmQuY3UKQEAgLTAsMCArMSw1OSBAQAorLy8gQ29tZXMgZnJvbToKKy8vIGh0dHBzOi8vZG9jcy5udmlkaWEuY29tL2N1ZGEvY3VyYW5kL2hvc3QtYXBpLW92ZXJ2aWV3Lmh0bWwjaG9zdC1hcGktZXhhbXBsZQorCisvKgorICogVGhpcyBwcm9ncmFtIHVzZXMgdGhlIGhvc3QgQ1VSQU5EIEFQSSB0byBnZW5lcmF0ZSAxMDAKKyAqIHBzZXVkb3JhbmRvbSBmbG9hdHMuCisgKi8KKyNpbmNsdWRlIDxjdWRhLmg+CisjaW5jbHVkZSA8Y3VyYW5kLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBDVURBX0NBTEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoeCkgIT0gY3VkYVN1Y2Nlc3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcHJpbnRmKCJFcnJvciBhdCAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBDVVJBTkRfQ0FMTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoeCkgIT0gQ1VSQU5EX1NUQVRVU19TVUNDRVNTKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcHJpbnRmKCJFcnJvciBhdCAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCitpbnQgY3VyYW5kX21haW4oKQoreworICBzaXplX3QgbiA9IDEwMDsKKyAgc2l6ZV90IGk7CisgIGN1cmFuZEdlbmVyYXRvcl90IGdlbjsKKyAgZmxvYXQgKmRldkRhdGEsICpob3N0RGF0YTsKKworICAvKiBBbGxvY2F0ZSBuIGZsb2F0cyBvbiBob3N0ICovCisgIGhvc3REYXRhID0gKGZsb2F0KiljYWxsb2Mobiwgc2l6ZW9mKGZsb2F0KSk7CisKKyAgLyogQWxsb2NhdGUgbiBmbG9hdHMgb24gZGV2aWNlICovCisgIENVREFfQ0FMTChjdWRhTWFsbG9jKCh2b2lkKiopJmRldkRhdGEsIG4gKiBzaXplb2YoZmxvYXQpKSk7CisKKyAgLyogQ3JlYXRlIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworICBDVVJBTkRfQ0FMTChjdXJhbmRDcmVhdGVHZW5lcmF0b3IoJmdlbiwgQ1VSQU5EX1JOR19QU0VVRE9fREVGQVVMVCkpOworCisgIC8qIFNldCBzZWVkICovCisgIENVUkFORF9DQUxMKGN1cmFuZFNldFBzZXVkb1JhbmRvbUdlbmVyYXRvclNlZWQoZ2VuLCAxMjM0VUxMKSk7CisKKyAgLyogR2VuZXJhdGUgbiBmbG9hdHMgb24gZGV2aWNlICovCisgIENVUkFORF9DQUxMKGN1cmFuZEdlbmVyYXRlVW5pZm9ybShnZW4sIGRldkRhdGEsIG4pKTsKKworICAvKiBDb3B5IGRldmljZSBtZW1vcnkgdG8gaG9zdCAqLworICBDVURBX0NBTEwoCisgICAgY3VkYU1lbWNweShob3N0RGF0YSwgZGV2RGF0YSwgbiAqIHNpemVvZihmbG9hdCksIGN1ZGFNZW1jcHlEZXZpY2VUb0hvc3QpKTsKKworICAvKiBDbGVhbnVwICovCisgIENVUkFORF9DQUxMKGN1cmFuZERlc3Ryb3lHZW5lcmF0b3IoZ2VuKSk7CisgIENVREFfQ0FMTChjdWRhRnJlZShkZXZEYXRhKSk7CisgIGZyZWUoaG9zdERhdGEpOworICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L21haW4uY3UgYi9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTA5ZjhlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L21haW4uY3UKQEAgLTAsMCArMSwxMSBAQAorCisKK2ludCBzaGFyZWRfdmVyc2lvbigpOworaW50IHN0YXRpY192ZXJzaW9uKCk7CitpbnQgbWl4ZWRfdmVyc2lvbigpOworCitpbnQgbWFpbigpCit7CisgIHJldHVybiBtaXhlZF92ZXJzaW9uKCkgPT0gMCAmJiBzaGFyZWRfdmVyc2lvbigpID09IDAgJiYKKyAgICBzdGF0aWNfdmVyc2lvbigpID09IDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWl4ZWQuY3UgYi9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbWl4ZWQuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1MTQwZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9taXhlZC5jdQpAQCAtMCwwICsxLDggQEAKKworaW50IGN1cmFuZF9tYWluKCk7CitpbnQgbnBwaWZfbWFpbigpOworCitpbnQgbWl4ZWRfdmVyc2lvbigpCit7CisgIHJldHVybiBjdXJhbmRfbWFpbigpID09IDAgJiYgbnBwaWZfbWFpbigpID09IDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3UgYi9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvbnBwaWYuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3MTA5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9ucHBpZi5jdQpAQCAtMCwwICsxLDg2IEBACisvLyBDb21lcyBmcm9tCisvLyBodHRwczovL2RldnRhbGsubnZpZGlhLmNvbS9kZWZhdWx0L3RvcGljLzEwMzc0ODIvZ3B1LWFjY2VsZXJhdGVkLWxpYnJhcmllcy9oZWxwLW1lLWhlbHAteW91LXdpdGgtbW9kZXJuLWNtYWtlLWFuZC1jdWRhLW13ZS1mb3ItbnBwL3Bvc3QvNTI3MTA2Ni8jNTI3MTA2NgorCisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3VkYV9ydW50aW1lX2FwaS5oPgorI2luY2x1ZGUgPG5wcGlfZmlsdGVyaW5nX2Z1bmN0aW9ucy5oPgorCitpbnQgbnBwaWZfbWFpbigpCit7CisgIC8qKgorICAgKiA4LWJpdCB1bnNpZ25lZCBzaW5nbGUtY2hhbm5lbCAxRCByb3cgY29udm9sdXRpb24uCisgICAqLworICBjb25zdCBpbnQgc2ltZ3Jvd3MgPSAzMjsKKyAgY29uc3QgaW50IHNpbWdjb2xzID0gMzI7CisgIE5wcDh1ICpkX3BTcmMsICpkX3BEc3Q7CisgIGNvbnN0IGludCBuTWFza1NpemUgPSAzOworICBOcHBpU2l6ZSBvUk9JOworICBvUk9JLndpZHRoID0gc2ltZ2NvbHMgLSBuTWFza1NpemU7CisgIG9ST0kuaGVpZ2h0ID0gc2ltZ3Jvd3M7CisgIGNvbnN0IGludCBzaW1nc2l6ZSA9IHNpbWdyb3dzICogc2ltZ2NvbHMgKiBzaXplb2YoZF9wU3JjWzBdKTsKKyAgY29uc3QgaW50IGRpbWdzaXplID0gb1JPSS53aWR0aCAqIG9ST0kuaGVpZ2h0ICogc2l6ZW9mKGRfcFNyY1swXSk7CisgIGNvbnN0IGludCBzaW1ncGl4ID0gc2ltZ3Jvd3MgKiBzaW1nY29sczsKKyAgY29uc3QgaW50IGRpbWdwaXggPSBvUk9JLndpZHRoICogb1JPSS5oZWlnaHQ7CisgIGNvbnN0IGludCBuU3JjU3RlcCA9IHNpbWdjb2xzICogc2l6ZW9mKGRfcFNyY1swXSk7CisgIGNvbnN0IGludCBuRHN0U3RlcCA9IG9ST0kud2lkdGggKiBzaXplb2YoZF9wRHN0WzBdKTsKKyAgY29uc3QgaW50IHBpeHZhbCA9IDE7CisgIGNvbnN0IGludCBuRGl2aXNvciA9IDE7CisgIGNvbnN0IE5wcDMycyBoX3BLZXJuZWxbbk1hc2tTaXplXSA9IHsgcGl4dmFsLCBwaXh2YWwsIHBpeHZhbCB9OworICBOcHAzMnMqIGRfcEtlcm5lbDsKKyAgY29uc3QgTnBwMzJzIG5BbmNob3IgPSAyOworICBjdWRhRXJyb3JfdCBlcnIgPSBjdWRhTWFsbG9jKCh2b2lkKiopJmRfcFNyYywgc2ltZ3NpemUpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZXJyID0gY3VkYU1hbGxvYygodm9pZCoqKSZkX3BEc3QsIGRpbWdzaXplKTsKKyAgaWYgKGVyciAhPSBjdWRhU3VjY2VzcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VkYSBlcnJvciAlZFxuIiwgX19MSU5FX18pOworICAgIHJldHVybiAxOworICB9CisgIGVyciA9IGN1ZGFNYWxsb2MoKHZvaWQqKikmZF9wS2VybmVsLCBuTWFza1NpemUgKiBzaXplb2YoZF9wS2VybmVsWzBdKSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICAvLyBzZXQgaW1hZ2UgdG8gcGl4dmFsIGluaXRpYWxseQorICBlcnIgPSBjdWRhTWVtc2V0KGRfcFNyYywgcGl4dmFsLCBzaW1nc2l6ZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlcnIgPSBjdWRhTWVtc2V0KGRfcERzdCwgMCwgZGltZ3NpemUpOworICBpZiAoZXJyICE9IGN1ZGFTdWNjZXNzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdWRhIGVycm9yICVkXG4iLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZXJyID0gY3VkYU1lbWNweShkX3BLZXJuZWwsIGhfcEtlcm5lbCwgbk1hc2tTaXplICogc2l6ZW9mKGRfcEtlcm5lbFswXSksCisgICAgICAgICAgICAgICAgICAgY3VkYU1lbWNweUhvc3RUb0RldmljZSk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICAvLyBjb3B5IHNyYyB0byBkc3QKKyAgTnBwU3RhdHVzIHJldCA9CisgICAgbnBwaUZpbHRlclJvd184dV9DMVIoZF9wU3JjLCBuU3JjU3RlcCwgZF9wRHN0LCBuRHN0U3RlcCwgb1JPSSwgZF9wS2VybmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5NYXNrU2l6ZSwgbkFuY2hvciwgbkRpdmlzb3IpOworICBhc3NlcnQocmV0ID09IE5QUF9OT19FUlJPUik7CisgIE5wcDh1KiBoX2ltZ3JlcyA9IG5ldyBOcHA4dVtkaW1ncGl4XTsKKyAgZXJyID0gY3VkYU1lbWNweShoX2ltZ3JlcywgZF9wRHN0LCBkaW1nc2l6ZSwgY3VkYU1lbWNweURldmljZVRvSG9zdCk7CisgIGlmIChlcnIgIT0gY3VkYVN1Y2Nlc3MpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkN1ZGEgZXJyb3IgJWRcbiIsIF9fTElORV9fKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICAvLyB0ZXN0IGZvciBmaWx0ZXJpbmcKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaW1ncGl4OyBpKyspIHsKKyAgICBpZiAoaF9pbWdyZXNbaV0gIT0gKHBpeHZhbCAqIHBpeHZhbCAqIG5NYXNrU2l6ZSkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiaF9pbWdyZXMgYXQgaW5kZXggJWQgZmFpbGVkIHRvIG1hdGNoXG4iLCBpKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvU3RhdGljUnVudGltZVBsdXNUb29sa2l0L3NoYXJlZC5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zaGFyZWQuY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2N2I2NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zaGFyZWQuY3UKQEAgLTAsMCArMSw4IEBACisKK2ludCBjdXJhbmRfbWFpbigpOworaW50IG5wcGlmX21haW4oKTsKKworaW50IHNoYXJlZF92ZXJzaW9uKCkKK3sKKyAgcmV0dXJuIGN1cmFuZF9tYWluKCkgPT0gMCAmJiBucHBpZl9tYWluKCkgPT0gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1N0YXRpY1J1bnRpbWVQbHVzVG9vbGtpdC9zdGF0aWMuY3UgYi9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvc3RhdGljLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhN2ViNGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9DdWRhT25seS9TdGF0aWNSdW50aW1lUGx1c1Rvb2xraXQvc3RhdGljLmN1CkBAIC0wLDAgKzEsOCBAQAorCitpbnQgY3VyYW5kX21haW4oKTsKK2ludCBucHBpZl9tYWluKCk7CisKK2ludCBzdGF0aWNfdmVyc2lvbigpCit7CisgIHJldHVybiBjdXJhbmRfbWFpbigpID09IDAgJiYgbnBwaWZfbWFpbigpID09IDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9Ub29sa2l0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VkYU9ubHkvVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjA2YmE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvVG9vbGtpdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDU3IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNSkKK3Byb2plY3QoQ3VkYU9ubHlUb29sa2l0IENVREEpCitmaW5kX3BhY2thZ2UoQ1VEQVRvb2xraXQgUkVRVUlSRUQpCisKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9WRVJTSU9OOiAke0NVREFUb29sa2l0X1ZFUlNJT059IikKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9WRVJTSU9OX01BSk9SOiAke0NVREFUb29sa2l0X1ZFUlNJT05fTUFKT1J9IikKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9WRVJTSU9OX01JTk9SOiAke0NVREFUb29sa2l0X1ZFUlNJT05fTUlOT1J9IikKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9WRVJTSU9OX1BBVENIOiAke0NVREFUb29sa2l0X1ZFUlNJT05fUEFUQ0h9IikKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9CSU5fRElSOiAke0NVREFUb29sa2l0X0JJTl9ESVJ9IikKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9JTkNMVURFX0RJUlM6ICR7Q1VEQVRvb2xraXRfSU5DTFVERV9ESVJTfSIpCittZXNzYWdlKFNUQVRVUyAiQ1VEQVRvb2xraXRfTElCUkFSWV9ESVI6ICR7Q1VEQVRvb2xraXRfTElCUkFSWV9ESVJ9IikKK21lc3NhZ2UoU1RBVFVTICJDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEUgJHtDVURBVG9vbGtpdF9OVkNDX0VYRUNVVEFCTEV9IikKKworCitzZXQoY3VkYV9saWJzIGN1ZGFydCBjdWRhX2RyaXZlciBjdWJsYXMgY3VmZnQgY3VmZnR3IGN1cmFuZCBjdXNvbHZlciBjdXNwYXJzZSkKK2lmKENVREFUb29sa2l0X1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDEwLjEpCisgIGxpc3QoQVBQRU5EIGN1ZGFfbGlicyBjdWJsYXNMdCkKK2VuZGlmKCkKK2lmKENVREFUb29sa2l0X1ZFUlNJT05fTUFKT1IgVkVSU0lPTl9MRVNTIDExKQorICBsaXN0KEFQUEVORCBjdWRhX2xpYnMgbnZncmFwaCkKK2VuZGlmKCkKKworIyBWZXJpZnkgdGhhdCBhbGwgdGhlIENVREE6OiB0YXJnZXRzIGFuZCB2YXJpYWJsZXMgZXhpc3QKK2ZvcmVhY2ggKGN1ZGFfbGliIElOIExJU1RTIGN1ZGFfbGlicykKKyAgaWYoTk9UIENVREFfJHtjdWRhX2xpYn1fTElCUkFSWSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJleHBlY3RlZCBDVURBVG9vbGtpdCB2YXJpYWJsZSBDVURBXyR7Y3VkYV9saWJ9X0xJQlJBUlkgbm90IGZvdW5kIikKKyAgZW5kaWYoKQorICBpZihOT1QgVEFSR0VUIENVREE6OiR7Y3VkYV9saWJ9KQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImV4cGVjdGVkIENVREFUb29sa2l0IHRhcmdldCBDVURBOjoke2N1ZGFfbGlifSBub3QgZm91bmQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworc2V0KG5wcF9saWJzIG5wcGMgbnBwaWFsIG5wcGljYyBucHBpZGVpIG5wcGlmIG5wcGlnIG5wcGltIG5wcGlzdCBucHBpdGMgbnBwcyBucHBpc3UpCitpZihDVURBVG9vbGtpdF9WRVJTSU9OX01BSk9SIFZFUlNJT05fTEVTUyAxMSkKKyAgbGlzdChBUFBFTkQgbnBwX2xpYnMgbnBwaWNvbSkKK2VuZGlmKCkKK2ZvcmVhY2ggKGN1ZGFfbGliICkKKyAgaWYoTk9UIENVREFfJHtjdWRhX2xpYn1fTElCUkFSWSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJleHBlY3RlZCBDVURBVG9vbGtpdCB2YXJpYWJsZSBDVURBXyR7Y3VkYV9saWJ9X0xJQlJBUlkgbm90IGZvdW5kIikKKyAgZW5kaWYoKQorICBpZihOT1QgVEFSR0VUIENVREE6OiR7Y3VkYV9saWJ9KQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImV4cGVjdGVkIENVREFUb29sa2l0IHRhcmdldCBDVURBOjoke2N1ZGFfbGlifSBub3QgZm91bmQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaCAoY3VkYV9saWIgbnZydGMgbnZUb29sc0V4dCBPcGVuQ0wpCisgIGlmKE5PVCBDVURBXyR7Y3VkYV9saWJ9X0xJQlJBUlkpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXhwZWN0ZWQgQ1VEQVRvb2xraXQgdmFyaWFibGUgQ1VEQV8ke2N1ZGFfbGlifV9MSUJSQVJZIG5vdCBmb3VuZCIpCisgIGVuZGlmKCkKKworICBpZihOT1QgVEFSR0VUIENVREE6OiR7Y3VkYV9saWJ9KQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImV4cGVjdGVkIENVREFUb29sa2l0IHRhcmdldCBDVURBOjoke2N1ZGFfbGlifSBub3QgZm91bmQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworYWRkX2V4ZWN1dGFibGUoQ3VkYU9ubHlUb29sa2l0IG1haW4uY3UpCit0YXJnZXRfbGlua19saWJyYXJpZXMoQ3VkYU9ubHlUb29sa2l0IFBSSVZBVEUgQ1VEQTo6dG9vbGtpdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1ZGFPbmx5L1Rvb2xraXQvbWFpbi5jdSBiL1Rlc3RzL0N1ZGFPbmx5L1Rvb2xraXQvbWFpbi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjNjY2RjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvQ3VkYU9ubHkvVG9vbGtpdC9tYWluLmN1CkBAIC0wLDAgKzEsOCBAQAorLy8gT25seSB0aGluZyB3ZSBjYXJlIGFib3V0IGlzIHRoYXQgdGhlc2UgaGVhZGVycyBhcmUgZm91bmQKKyNpbmNsdWRlIDxjdWRhLmg+CisjaW5jbHVkZSA8Y3VkYV9ydW50aW1lX2FwaS5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VkYU9ubHkvV2l0aERlZnMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9DTWFrZUxpc3RzLnR4dAppbmRleCAwMGZkN2QyLi4wZWQ4MWQ4IDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9DTWFrZUxpc3RzLnR4dApAQCAtMywxNyArMyw3IEBACiBwcm9qZWN0IChXaXRoRGVmcyBDVURBKQogCiAjdmVyaWZ5IHRoYXQgd2UgY2FuIHBhc3MgZXhwbGljaXQgY3VkYSBhcmNoIGZsYWdzCi1zdHJpbmcoQVBQRU5EIENNQUtFX0NVREFfRkxBR1MgIiAtZ2VuY29kZSBhcmNoPWNvbXB1dGVfMzAsY29kZT1jb21wdXRlXzMwIikKLWlmKENNQUtFX0NVREFfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgOSkKLSAgc2V0KGRlYnVnX2NvbXBpbGVfZmxhZ3MgLS1nZW5lcmF0ZS1jb2RlIGFyY2g9Y29tcHV0ZV8zMixjb2RlPXNtXzMyKQotZWxzZSgpCi0gIHNldChkZWJ1Z19jb21waWxlX2ZsYWdzIC0tZ2VuZXJhdGUtY29kZSBhcmNoPWNvbXB1dGVfMjAsY29kZT1zbV8yMCkKLWVuZGlmKCkKLWlmKENNQUtFX0NVREFfU0lNVUxBVEVfSUQgU1RSRVFVQUwgIk1TVkMiKQotICBsaXN0KEFQUEVORCBkZWJ1Z19jb21waWxlX2ZsYWdzIC1YY29tcGlsZXI9LVdYKQotZWxzZSgpCi0gIGxpc3QoQVBQRU5EIGRlYnVnX2NvbXBpbGVfZmxhZ3MgLVhjb21waWxlcj0tV2Vycm9yKQotZW5kaWYoKQorc2V0KENNQUtFX0NVREFfQVJDSElURUNUVVJFUyAzMCkKIHNldChyZWxlYXNlX2NvbXBpbGVfZGVmcyBERUZSRUwpCiAKICNHb2FsIGZvciB0aGlzIGV4YW1wbGU6CkBAIC0yOCw4ICsxOCw3IEBACiAgIFBSSVZBVEUKICAgICAtREZMQUdfQ09NUElMRV9MQU5HXyQ8Q09NUElMRV9MQU5HVUFHRT4KICAgICAtREZMQUdfTEFOR19JU19DVURBPSQ8Q09NUElMRV9MQU5HVUFHRTpDVURBPgotICAgIC1YY29tcGlsZXI9LURIT1NUX0RFRklORQotICAgICQ8JDxDT05GSUc6REVCVUc+OiQ8QlVJTERfSU5URVJGQUNFOiR7ZGVidWdfY29tcGlsZV9mbGFnc30+PgorICAgICQ8JDxDVURBX0NPTVBJTEVSX0lEOk5WSURJQT46LS1jb21waWxlci1vcHRpb25zPS1ESE9TVF9ERUZJTkU+ICMgSG9zdC1vbmx5IGRlZmluZXMgYXJlIHBvc3NpYmxlIG9ubHkgb24gTlZDQy4KICAgKQogCiB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhDdWRhT25seVdpdGhEZWZzCmRpZmYgLS1naXQgYS9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9tYWluLm5vdGN1IGIvVGVzdHMvQ3VkYU9ubHkvV2l0aERlZnMvbWFpbi5ub3RjdQppbmRleCBhNWY0ZWQ2Li45MTE5ZWJhIDEwMDY0NAotLS0gYS9UZXN0cy9DdWRhT25seS9XaXRoRGVmcy9tYWluLm5vdGN1CisrKyBiL1Rlc3RzL0N1ZGFPbmx5L1dpdGhEZWZzL21haW4ubm90Y3UKQEAgLTcsOCArNywxMCBAQAogIyAgZXJyb3IgIklOQ19DVURBIG5vdCBkZWZpbmVkISIKICNlbmRpZgogCi0jaWZuZGVmIEhPU1RfREVGSU5FCi0jICBlcnJvciAiSE9TVF9ERUZJTkUgbm90IGRlZmluZWQhIgorI2lmZGVmIF9fTlZDQ19fCisjICBpZm5kZWYgSE9TVF9ERUZJTkUKKyMgICAgZXJyb3IgIkhPU1RfREVGSU5FIG5vdCBkZWZpbmVkISIKKyMgIGVuZGlmCiAjZW5kaWYKIAogI2lmbmRlZiBQQUNLRURfREVGSU5FCmRpZmYgLS1naXQgYS9UZXN0cy9DdXN0Q29tRGVwZW5kL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvQ3VzdENvbURlcGVuZC9DTWFrZUxpc3RzLnR4dAppbmRleCA0NjI3NmIyLi43NzdjZGNjIDEwMDY0NAotLS0gYS9UZXN0cy9DdXN0Q29tRGVwZW5kL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0N1c3RDb21EZXBlbmQvQ01ha2VMaXN0cy50eHQKQEAgLTYsOSArNiw5IEBACiBhZGRfZXhlY3V0YWJsZShmb28gZm9vLmN4eCkKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgT1VUUFVUICR7Q3VzdENvbURlcGVuZF9CSU5BUllfRElSfS9iYXIuYwotICBDT01NQU5EICR7Q3VzdENvbURlcGVuZF9CSU5BUllfRElSfS9iaW4vJHtDTUFLRV9DRkdfSU5URElSfS9mb28KKyAgQ09NTUFORCAkPFRBUkdFVF9GSUxFOmZvbz4KICAgJHtDdXN0Q29tRGVwZW5kX0JJTkFSWV9ESVJ9L2Jhci5jCi0gIERFUEVORFMgJHtDdXN0Q29tRGVwZW5kX0JJTkFSWV9ESVJ9L2Jpbi8ke0NNQUtFX0NGR19JTlRESVJ9L2ZvbworICBERVBFTkRTICQ8VEFSR0VUX0ZJTEU6Zm9vPgogKQogCiBhZGRfbGlicmFyeShiYXIgU0hBUkVEICR7Q3VzdENvbURlcGVuZF9CSU5BUllfRElSfS9iYXIuYykKZGlmZiAtLWdpdCBhL1Rlc3RzL0N1c3RvbUNvbW1hbmQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9DdXN0b21Db21tYW5kL0NNYWtlTGlzdHMudHh0CmluZGV4IGU5YTlmNTIuLjUzZDU2YmYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0N1c3RvbUNvbW1hbmQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvQ3VzdG9tQ29tbWFuZC9DTWFrZUxpc3RzLnR4dApAQCAtNzAsNyArNzAsNyBAQAogICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSAke1BST0pFQ1RfQklOQVJZX0RJUn0vZG9jMXRlbXAuaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1BST0pFQ1RfQklOQVJZX0RJUn0vZG9jMS5oCiAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICIgUmVtb3ZpbmcgZG9jMXRlbXAuaC4iCi0gIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmUgLWYgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2RvYzF0ZW1wLmgKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1mICR7UFJPSkVDVF9CSU5BUllfRElSfS9kb2MxdGVtcC5oCiAgICkKIAogIyBBZGQgY3VzdG9tIGNvbW1hbmQgdG8gZ2VuZXJhdGUgZm9vLmguCkBAIC00MTIsNyArNDEyLDcgQEAKIGFkZF9kZXBlbmRlbmNpZXMoZG9fY2hlY2tfY29tbWFuZF9saW5lIGNoZWNrX2NvbW1hbmRfbGluZSkKIAogYWRkX2N1c3RvbV90YXJnZXQocHJlX2NoZWNrX2NvbW1hbmRfbGluZQotICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jaGVja19tYXJrLnR4dAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLWYgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NoZWNrX21hcmsudHh0CiAgICkKIGFkZF9kZXBlbmRlbmNpZXMoZG9fY2hlY2tfY29tbWFuZF9saW5lIHByZV9jaGVja19jb21tYW5kX2xpbmUpCiAKQEAgLTUzNCwzICs1MzQsNDMgQEAKIHNldF9wcm9wZXJ0eShTT1VSQ0UgIiR7Z2VuX2ZpbGV9IiBQUk9QRVJUWSBTWU1CT0xJQyBPTikKIGFkZF9jdXN0b21fdGFyZ2V0KGNvbW1hbmRfZXhwYW5kX2xpc3RzIEFMTCBERVBFTkRTICIke2dlbl9maWxlfSIpCiBzZXRfcHJvcGVydHkoVEFSR0VUIGNvbW1hbmRfZXhwYW5kX2xpc3RzIFBST1BFUlRZIENNUEFSR1MgIiR7Y21wX2FyZ3N9IikKKworIyBUaGlzIGFsc28gdGVzdHMgdGhhdCBgLi9gIGlzIHNxdWVlemVkIG91dCBvZiB0aGUgcmVzdWx0aW5nIHBhdGguCitzZXQoZGVwZW5kc19wYXRoICIuL2RlcGVuZGVkX3Vwb25fcGF0aC50eHQiKQorCithZGRfY3VzdG9tX2NvbW1hbmQoCisgIE9VVFBVVCAke2RlcGVuZHNfcGF0aH0KKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHRvdWNoICR7ZGVwZW5kc19wYXRofQorKQorCithZGRfY3VzdG9tX2NvbW1hbmQoCisgIE9VVFBVVCAiZGVwZW5kc19vbl9wYXRoLnR4dCIKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHRvdWNoICJkZXBlbmRzX29uX3BhdGgudHh0IgorICBERVBFTkRTICR7ZGVwZW5kc19wYXRofQorKQorCithZGRfY3VzdG9tX3RhcmdldChkZXBlbmRzX29uX3BhdGggQUxMIERFUEVORFMgImRlcGVuZHNfb25fcGF0aC50eHQiKQorCithZGRfY3VzdG9tX2NvbW1hbmQoCisgIE9VVFBVVCAiZGVwZW5kc19vbl9pbl9zb3VyY2VfcGF0aC50eHQiCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFpbi5jeHgiIGRlcGVuZHNfb25faW5fc291cmNlX3BhdGgudHh0CisgIERFUEVORFMgbWFpbi5jeHgKKykKKworYWRkX2N1c3RvbV90YXJnZXQoZGVwZW5kc19vbl9pbl9zb3VyY2VfcGF0aCBBTEwgREVQRU5EUyAiZGVwZW5kc19vbl9pbl9zb3VyY2VfcGF0aC50eHQiKQorCithZGRfY3VzdG9tX2NvbW1hbmQoCisgIE9VVFBVVCAiZGVwZW5kc19vbl9pbl9yZWxfc291cmNlX3BhdGgudHh0IgorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L21haW4uY3h4IiBkZXBlbmRzX29uX2luX3JlbF9zb3VyY2VfcGF0aC50eHQKKyAgREVQRU5EUyAuL21haW4uY3h4CispCisKK2FkZF9jdXN0b21fdGFyZ2V0KGRlcGVuZHNfb25faW5fcmVsX3NvdXJjZV9wYXRoIEFMTCBERVBFTkRTICJkZXBlbmRzX29uX2luX3JlbF9zb3VyY2VfcGF0aC50eHQiKQorCithZGRfbGlicmFyeShtYWNfZncgU0hBUkVEIG1hY19mdy5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKG1hY19mdyBQUk9QRVJUSUVTCisgIEZSQU1FV09SSyAxCisgIExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliCisgICkKK2FkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgbWFjX2Z3LnR4dCBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgdG91Y2ggbWFjX2Z3LnR4dCBERVBFTkRTIG1hY19mdykKK2FkZF9jdXN0b21fdGFyZ2V0KGRyaXZlX21hY19mdyBBTEwgREVQRU5EUyBtYWNfZncudHh0KQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3VzdG9tQ29tbWFuZC9tYWNfZncuYyBiL1Rlc3RzL0N1c3RvbUNvbW1hbmQvbWFjX2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzNWI0NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N1c3RvbUNvbW1hbmQvbWFjX2Z3LmMKQEAgLTAsMCArMSw0IEBACitpbnQgbWFjX2Z3KHZvaWQpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvQ3h4T25seS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0N4eE9ubHkvQ01ha2VMaXN0cy50eHQKaW5kZXggZTYyZjNjNy4uMDk2ODljYiAxMDA2NDQKLS0tIGEvVGVzdHMvQ3h4T25seS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9DeHhPbmx5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDExICsxLDEyIEBACiAjIGEgc2ltcGxlIENYWCBvbmx5IHRlc3QgY2FzZQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QgKEN4eE9ubHkgQ1hYKQogCiBzZXQoQ01BS0VfREVCVUdfUE9TVEZJWCAiX3Rlc3RfZGVidWdfcG9zdGZpeCIpCiBpZihXSU4zMikKICAgc2V0KEVYVFJBX1NSQ1MgdGVzdC5DUFApCiBlbmRpZigpCi1hZGRfbGlicmFyeSh0ZXN0Y3h4MS5teSBTVEFUSUMgbGliY3h4MS5jeHggJHtFWFRSQV9TUkNTfSkKK2FkZF9saWJyYXJ5KHRlc3RjeHgxLm15IFNUQVRJQyBsaWJjeHgxLmN4eCB0ZXN0LkMgJHtFWFRSQV9TUkNTfSkKIGFkZF9saWJyYXJ5KHRlc3RjeHgyIFNIQVJFRCBsaWJjeHgyLmN4eCkKIGFkZF9leGVjdXRhYmxlIChDeHhPbmx5IGN4eG9ubHkuY3h4KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKEN4eE9ubHkgdGVzdGN4eDEubXkgdGVzdGN4eDIpCmRpZmYgLS1naXQgYS9UZXN0cy9DeHhPbmx5L2N4eG9ubHkuY3h4IGIvVGVzdHMvQ3h4T25seS9jeHhvbmx5LmN4eAppbmRleCAwOTExYTA3Li44YmQxNjM3IDEwMDY0NAotLS0gYS9UZXN0cy9DeHhPbmx5L2N4eG9ubHkuY3h4CisrKyBiL1Rlc3RzL0N4eE9ubHkvY3h4b25seS5jeHgKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAibGliY3h4MS5oIgogI2luY2x1ZGUgImxpYmN4eDIuaCIKK2V4dGVybiBpbnQgdGVzdEM7CiAjaWZkZWYgX01TQ19WRVIKIGV4dGVybiBpbnQgdGVzdENQUDsKICNlbmRpZgpAQCAtOCw2ICs5LDcgQEAKIAogaW50IG1haW4oKQogeworICB0ZXN0QyA9IDE7CiAjaWZkZWYgX01TQ19WRVIKICAgdGVzdENQUCA9IDE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rlc3RzL0N4eE9ubHkvdGVzdC5DIGIvVGVzdHMvQ3h4T25seS90ZXN0LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3ZTZjMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0N4eE9ubHkvdGVzdC5DCkBAIC0wLDAgKzEgQEAKK2ludCB0ZXN0QzsKZGlmZiAtLWdpdCBhL1Rlc3RzL0VuZm9yY2VDb25maWcuY21ha2UuaW4gYi9UZXN0cy9FbmZvcmNlQ29uZmlnLmNtYWtlLmluCmluZGV4IGI3NTg3YWEuLjc3ODFkZWQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0VuZm9yY2VDb25maWcuY21ha2UuaW4KKysrIGIvVGVzdHMvRW5mb3JjZUNvbmZpZy5jbWFrZS5pbgpAQCAtMzMsNSArMzMsNiBAQAogdW5zZXQoRU5We0NNQUtFX0dFTkVSQVRPUl9JTlNUQU5DRX0pCiB1bnNldChFTlZ7Q01BS0VfR0VORVJBVE9SX1BMQVRGT1JNfSkKIHVuc2V0KEVOVntDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVH0pCit1bnNldChFTlZ7Q01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFN9KQogCiBAVEVTVF9IT01FX0VOVl9DT0RFQApkaWZmIC0tZ2l0IGEvVGVzdHMvRXhwb3J0SW1wb3J0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRXhwb3J0SW1wb3J0L0NNYWtlTGlzdHMudHh0CmluZGV4IGRjNjIxZWIuLmQ4OGViMTEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0V4cG9ydEltcG9ydC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9FeHBvcnRJbXBvcnQvQ01ha2VMaXN0cy50eHQKQEAgLTcsNyArNyw3IEBACiAjIFdpcGUgb3V0IHRoZSBpbnN0YWxsIHRyZWUgdG8gbWFrZSBzdXJlIHRoZSBleHBvcnRlciB3b3Jrcy4KIGFkZF9jdXN0b21fY29tbWFuZCgKICAgT1VUUFVUICR7RXhwb3J0SW1wb3J0X0JJTkFSWV9ESVJ9L0NsZWFudXBQcm9qZWN0Ci0gIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5ICR7RXhwb3J0SW1wb3J0X0JJTkFSWV9ESVJ9L1Jvb3QKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZiAke0V4cG9ydEltcG9ydF9CSU5BUllfRElSfS9Sb290CiAgICkKIGFkZF9jdXN0b21fdGFyZ2V0KENsZWFudXBUYXJnZXQgQUxMIERFUEVORFMgJHtFeHBvcnRJbXBvcnRfQklOQVJZX0RJUn0vQ2xlYW51cFByb2plY3QpCiBzZXRfcHJvcGVydHkoCmRpZmYgLS1naXQgYS9UZXN0cy9FeHBvcnRJbXBvcnQvRXhwb3J0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRXhwb3J0SW1wb3J0L0V4cG9ydC9DTWFrZUxpc3RzLnR4dAppbmRleCA5ZDhhMjQ4Li4zODdmZTZiIDEwMDY0NAotLS0gYS9UZXN0cy9FeHBvcnRJbXBvcnQvRXhwb3J0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0V4cG9ydEltcG9ydC9FeHBvcnQvQ01ha2VMaXN0cy50eHQKQEAgLTE1Niw2ICsxNTYsNyBAQAogY21ha2VfcG9saWN5KFBPUCkKIAogY21ha2VfcG9saWN5KFBVU0gpCitjbWFrZV9wb2xpY3koU0VUIENNUDAwMjIgTkVXKQogY21ha2VfcG9saWN5KFNFVCBDTVAwMDc5IE5FVykKIGFkZF9saWJyYXJ5KFRvcERpckxpYiBTVEFUSUMgdGVzdFRvcERpckxpYi5jKQogYWRkX3N1YmRpcmVjdG9yeShTdWJEaXJMaW5rQSkKQEAgLTI0MCw2ICsyNDEsMTAgQEAKICkKIGluY2x1ZGUoR2VuZXJhdGVFeHBvcnRIZWFkZXIpCiAKKyMgVGVzdCBkZXByZWNhdGlvbiBvZiBpbXBvcnRlZCBsaWJyYXJ5CithZGRfbGlicmFyeSh0ZXN0TGliRGVwcmVjYXRpb24gU1RBVElDIHRlc3RMaWIxLmMpCitzZXRfcHJvcGVydHkoVEFSR0VUIHRlc3RMaWJEZXByZWNhdGlvbiBQUk9QRVJUWSBERVBSRUNBVElPTiAiRGVwcmVjYXRlZCB2ZXJzaW9uLiBQbGVhc2UgdXNlIGxhdGVzdCB2ZXJzaW9uIikKKwogYWRkX3N1YmRpcmVjdG9yeShyZW5hbWVkKQogCiBhZGRfbGlicmFyeSh0ZXN0U2hhcmVkTGliUmVxdWlyZWQgU0hBUkVEIHRlc3RTaGFyZWRMaWJSZXF1aXJlZC5jcHApCkBAIC01MTUsNiArNTIwLDcgQEAKICAgdGVzdEV4ZTJsaWIgdGVzdExpYjRsaWIgdGVzdExpYjRsaWJkYmcgdGVzdExpYjRsaWJvcHQKICAgdGVzdExpYjYgdGVzdExpYjcgdGVzdExpYjgKICAgdGVzdExpYjkKKyAgdGVzdExpYkRlcHJlY2F0aW9uCiAgIHRlc3RMaWJDeWNsZUEgdGVzdExpYkN5Y2xlQgogICB0ZXN0TGliTm9TT05BTUUKICAgY21wMDAyMk5FVyBjbXAwMDIyT0xECkBAIC01ODUsNiArNTkxLDcgQEAKIGV4cG9ydChUQVJHRVRTIHRlc3RFeGUyIHRlc3RMaWI0IHRlc3RMaWI1IHRlc3RMaWI2IHRlc3RMaWI3IHRlc3RFeGUzIHRlc3RFeGU0IHRlc3RFeGUybGliCiAgIHRlc3RMaWI4CiAgIHRlc3RMaWI5IHRlc3RMaWI5T2JqUHViIHRlc3RMaWI5T2JqUHJpdiB0ZXN0TGliOU9iaklmYWNlCisgIHRlc3RMaWJEZXByZWNhdGlvbgogICB0ZXN0TGliNGxpYiB0ZXN0TGliNGxpYmRiZyB0ZXN0TGliNGxpYm9wdAogICB0ZXN0TGliQ3ljbGVBIHRlc3RMaWJDeWNsZUIKICAgdGVzdExpYk5vU09OQU1FCkBAIC02NDYsNiArNjUzLDE4IEBACiAgIGV4cG9ydChUQVJHRVRTIHRlc3RMaW5rRGVwZW5kcyBOQU1FU1BBQ0UgYmxkXyBBUFBFTkQgRklMRSBFeHBvcnRCdWlsZFRyZWUuY21ha2UpCiBlbmRpZigpCiAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdGVzdCBleHBvcnQgb2YgQ1VEQSBsYW5ndWFnZQoraWYoQ01ha2VfVEVTVF9DVURBKQorICBlbmFibGVfbGFuZ3VhZ2UoQ1VEQSkKKyAgYWRkX2xpYnJhcnkoY3VkYUludGVyZmFjZUxpYiBJTlRFUkZBQ0UpCisgIHRhcmdldF9jb21waWxlX2ZlYXR1cmVzKGN1ZGFJbnRlcmZhY2VMaWIgSU5URVJGQUNFICQ8QlVJTERfSU5URVJGQUNFOmN1ZGFfc3RkXzExPiAkPElOU1RBTExfSU5URVJGQUNFOmN1ZGFfc3RkXzE0PikKKworICBpbnN0YWxsKFRBUkdFVFMgY3VkYUludGVyZmFjZUxpYgorICAgIEVYUE9SVCBSZXF1aXJlZEV4cCBERVNUSU5BVElPTiBsaWIpCisgIGV4cG9ydChUQVJHRVRTIGN1ZGFJbnRlcmZhY2VMaWIgTkFNRVNQQUNFIGJsZF8gQVBQRU5EIEZJTEUgRXhwb3J0QnVpbGRUcmVlLmNtYWtlKQorZW5kaWYoKQorCiAjIFRlc3QgdGhlIHByZXNlbmNlIG9mIHRhcmdldHMgbmFtZWQgdGhlIHNhbWUgYXMgbGFuZ3VhZ2VzLgogIyBJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MQU5HVUFHRVMgZW50cmllcyBzaG91bGQgbm90IGJlIHRhcmdldHMuCiBhZGRfbGlicmFyeShDIElOVEVSRkFDRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL0V4cG9ydEltcG9ydC9FeHBvcnQvU3ViRGlyTGlua0EvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9FeHBvcnRJbXBvcnQvRXhwb3J0L1N1YkRpckxpbmtBL0NNYWtlTGlzdHMudHh0CmluZGV4IDFjM2M5ZGMuLjFhYTQxZDIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0V4cG9ydEltcG9ydC9FeHBvcnQvU3ViRGlyTGlua0EvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRXhwb3J0SW1wb3J0L0V4cG9ydC9TdWJEaXJMaW5rQS9DTWFrZUxpc3RzLnR4dApAQCAtMSw2ICsxLDYgQEAKIGFkZF9saWJyYXJ5KFN1YkRpckxpbmtBSW1wb3J0ZWQgSU1QT1JURUQgSU5URVJGQUNFKQogdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoU3ViRGlyTGlua0FJbXBvcnRlZCBJTlRFUkZBQ0UgREVGX1N1YkRpckxpbmtBSW1wb3J0ZWRGb3JFeHBvcnQpCiAKLXRhcmdldF9saW5rX2xpYnJhcmllcyhUb3BEaXJMaWIgUFVCTElDIFN1YkRpckxpbmtBSW1wb3J0ZWQpCit0YXJnZXRfbGlua19saWJyYXJpZXMoVG9wRGlyTGliIFBVQkxJQyBkZWJ1ZyAiJDwxOlN1YkRpckxpbmtBSW1wb3J0ZWQ7U3ViRGlyTGlua0FJbXBvcnRlZD4iIG9wdGltaXplZCAiJDwxOlN1YkRpckxpbmtBSW1wb3J0ZWQ7U3ViRGlyTGlua0FJbXBvcnRlZD4iKQogCiBhZGRfbGlicmFyeShTdWJEaXJMaW5rQSBTVEFUSUMgU3ViRGlyTGlua0EuYykKZGlmZiAtLWdpdCBhL1Rlc3RzL0V4cG9ydEltcG9ydC9JbXBvcnQvQS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0V4cG9ydEltcG9ydC9JbXBvcnQvQS9DTWFrZUxpc3RzLnR4dAppbmRleCBiNWRmOTYxLi4zY2IzODMzIDEwMDY0NAotLS0gYS9UZXN0cy9FeHBvcnRJbXBvcnQvSW1wb3J0L0EvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRXhwb3J0SW1wb3J0L0ltcG9ydC9BL0NNYWtlTGlzdHMudHh0CkBAIC01MSw2ICs1MSwxMiBAQAogY2hlY2tGb3JQcm9wZXJ0eShleHBfdGVzdExpYjQgIkVYUE9SVEVEX1BST1BFUlRZMiIgICJFWFBPUlRJTkdfVEVTVExJQjRfMSIpCiBjaGVja0ZvclByb3BlcnR5KGJsZF90ZXN0TGliNCAiRVhQT1JURURfUFJPUEVSVFkzIiAgIkVYUE9SVElOR19URVNUTElCNF8yIikKIGNoZWNrRm9yUHJvcGVydHkoZXhwX3Rlc3RMaWI0ICJFWFBPUlRFRF9QUk9QRVJUWTMiICAiRVhQT1JUSU5HX1RFU1RMSUI0XzIiKQorY2hlY2tGb3JQcm9wZXJ0eShibGRfdGVzdExpYkRlcHJlY2F0aW9uICJERVBSRUNBVElPTiIgICJEZXByZWNhdGVkIHZlcnNpb24uIFBsZWFzZSB1c2UgbGF0ZXN0IHZlcnNpb24iKQorY2hlY2tGb3JQcm9wZXJ0eShleHBfdGVzdExpYkRlcHJlY2F0aW9uICJERVBSRUNBVElPTiIgICJEZXByZWNhdGVkIHZlcnNpb24uIFBsZWFzZSB1c2UgbGF0ZXN0IHZlcnNpb24iKQorCisjIFRyeSBsaW5raW5nIHRvIGEgZGVwcmVjYXRlZCBsaWJyYXJ5Cit0YXJnZXRfbGlua19saWJyYXJpZXMoaW1wX3Rlc3RFeGUxIGV4cF90ZXN0TGliRGVwcmVjYXRpb24pCisKIAogIyBUcnkgbGlua2luZyB0byBhIGxpYnJhcnkgaW1wb3J0ZWQgZnJvbSB0aGUgaW5zdGFsbCB0cmVlLgogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGltcF90ZXN0RXhlMQpAQCAtNDk5LDMgKzUwNSwxMCBAQAogICBjaGVja0ZvclByb3BlcnR5KGJsZF90ZXN0TGlua0RlcGVuZHMgIklOVEVSRkFDRV9MSU5LX0RFUEVORFMiICJCVUlMRF9MSU5LX0RFUEVORFMiKQogICBjaGVja0ZvclByb3BlcnR5KFJlcTo6dGVzdExpbmtEZXBlbmRzICJJTlRFUkZBQ0VfTElOS19ERVBFTkRTIiAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vSU5TVEFMTF9MSU5LX0RFUEVORFMiKQogZW5kaWYoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3QgaW1wb3J0IG9mIENVREEgbGFuZ3VhZ2UgbGV2ZWwKK2lmKENNYWtlX1RFU1RfQ1VEQSkKKyAgY2hlY2tGb3JQcm9wZXJ0eShibGRfY3VkYUludGVyZmFjZUxpYiAiSU5URVJGQUNFX0NPTVBJTEVfRkVBVFVSRVMiICJjdWRhX3N0ZF8xMSIpCisgIGNoZWNrRm9yUHJvcGVydHkoUmVxOjpjdWRhSW50ZXJmYWNlTGliICJJTlRFUkZBQ0VfQ09NUElMRV9GRUFUVVJFUyIgImN1ZGFfc3RkXzE0IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0V4cG9ydEltcG9ydC9Jbml0aWFsQ2FjaGUuY21ha2UuaW4gYi9UZXN0cy9FeHBvcnRJbXBvcnQvSW5pdGlhbENhY2hlLmNtYWtlLmluCmluZGV4IGY2MDBkOTAuLjQ0Y2QxNzkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0V4cG9ydEltcG9ydC9Jbml0aWFsQ2FjaGUuY21ha2UuaW4KKysrIGIvVGVzdHMvRXhwb3J0SW1wb3J0L0luaXRpYWxDYWNoZS5jbWFrZS5pbgpAQCAtMTQsMyArMTQsNCBAQAogc2V0KENNQUtFX0lOU1RBTExfUFJFRklYICJARXhwb3J0SW1wb3J0X0JJTkFSWV9ESVJAL1Jvb3QiIENBQ0hFIFNUUklORyAiSW5zdGFsbGF0aW9uIFByZWZpeCIpCiBzZXQoQ01BS0VfU0tJUF9SUEFUSCBPTiBDQUNIRSBCT09MICJObyBSUEFUSCIpCiBzZXQoQ01BS0VfR05VdG9NUyAiQEV4cG9ydEltcG9ydF9HTlV0b01TQCIgQ0FDSEUgQk9PTCAiQ01BS0VfR05VdG9NUyIpCitzZXQoQ01ha2VfVEVTVF9DVURBICJAQ01ha2VfVEVTVF9DVURBQCIgQ0FDSEUgQk9PTCAiQ01ha2VfVEVTVF9DVURBIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0V4dGVybmFsUHJvamVjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0V4dGVybmFsUHJvamVjdC9DTWFrZUxpc3RzLnR4dAppbmRleCAwOTMzOTFlLi5jODg1MGVhIDEwMDY0NAotLS0gYS9UZXN0cy9FeHRlcm5hbFByb2plY3QvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRXh0ZXJuYWxQcm9qZWN0L0NNYWtlTGlzdHMudHh0CkBAIC0xMDAsNiArMTAwLDE1IEBACiAgIElOU1RBTExfQ09NTUFORCAiIgogKQogCitzZXQocHJvaiBOb0V4dHJhY3RCb29sKQorRXh0ZXJuYWxQcm9qZWN0X0FkZCgke3Byb2p9CisgIFVSTCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZ2l0cmVwby50Z3oKKyAgRE9XTkxPQURfTk9fRVhUUkFDVCAwCisgIExPR19ET1dOTE9BRCAxCisgIEJVSUxEX0NPTU1BTkQgIiIKKyAgQ09ORklHVVJFX0NPTU1BTkQgIiIKKyAgSU5TVEFMTF9DT01NQU5EICIiCispCiAKICMgQ1ZTLWJhc2VkIHRlc3RzOgogIwpAQCAtMzgwLDcgKzM4OSw5IEBACiAgICAgc2V0KHByb2ogVHV0b3JpYWxTdGVwMS1HSVQtY29uZmlnKQogICAgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQogICAgICAgR0lUX1JFUE9TSVRPUlkgIiR7bG9jYWxfZ2l0X3JlcG99IgotICAgICAgR0lUX0NPTkZJRyBjb3JlLmVvbD1sZiBjb3JlLmF1dG9jcmxmPWlucHV0CisgICAgICBHSVRfQ09ORklHIGNvcmUuZW9sPWxmCisgICAgICAgICAgICAgICAgIGNvcmUuYXV0b2NybGY9aW5wdXQKKyAgICAgICAgICAgICAgICAgImh0dHAuZXh0cmFoZWFkZXI9QVVUSE9SSVpBVElPTjogYmVhcmVyIC0tdW5zdXBwb3J0ZWRPcHRpb24iCiAgICAgICBDTUFLRV9HRU5FUkFUT1IgIiR7Q01BS0VfR0VORVJBVE9SfSIKICAgICAgIENNQUtFX0FSR1MgLURDTUFLRV9JTlNUQUxMX1BSRUZJWDpQQVRIPTxJTlNUQUxMX0RJUj4KICAgICAgIElOU1RBTExfQ09NTUFORCAiIgpAQCAtNDgyLDYgKzQ5Myw2NiBAQAogICApCiAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtwcm9qfSBQUk9QRVJUWSBGT0xERVIgIkdJVCIpCiAKKyAgIyBVbnppcC91bnRhciB0aGUgZ2l0IHJlcG9zaXRvcnkgaW4gb3VyIHNvdXJjZSBmb2xkZXIgc28gdGhhdCBvdGhlcgorICAjIHByb2plY3RzIGJlbG93IG1heSB1c2UgaXQgdG8gdGVzdCBnaXQgYXJncyBvZiBFeHRlcm5hbFByb2plY3RfQWRkCisgICMKKyAgc2V0KHByb2ogU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnlXaXRoUmVjdXJzaXZlU3VibW9kdWxlcykKKyAgRXh0ZXJuYWxQcm9qZWN0X0FkZCgke3Byb2p9CisgICAgICAgICAgU09VUkNFX0RJUiAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTG9jYWxSZXBvc2l0b3JpZXMvR0lULXdpdGgtcmVjdXJzaXZlLXN1Ym1vZHVsZXMKKyAgICAgICAgICBVUkwgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2dpdHJlcG8tc3ViLXJlYy50Z3oKKyAgICAgICAgICBCVUlMRF9DT01NQU5EICIiCisgICAgICAgICAgQ09ORklHVVJFX0NPTU1BTkQgIiR7R0lUX0VYRUNVVEFCTEV9IiAtLXZlcnNpb24KKyAgICAgICAgICBJTlNUQUxMX0NPTU1BTkQgIiIKKyAgICAgICAgICApCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtwcm9qfQorICAgICAgICAgIFBST1BFUlRZIEZPTERFUiAiU2V0dXBSZXBvcy9Mb2NhbC9EZWVwbHkvTmVzdGVkL0Zvci9UZXN0aW5nIikKKworICBzZXQobG9jYWxfZ2l0X3JlcG8gIi4uLy4uL0xvY2FsUmVwb3NpdG9yaWVzL0dJVC13aXRoLXJlY3Vyc2l2ZS1zdWJtb2R1bGVzIikKKworICBzZXQocHJvaiBUUzEtR0lULVJFQ1VSU0lWRV9TVUJNT0RVTEVTLWRlZmF1bHQpCisgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQorICAgICAgICAgIEdJVF9SRVBPU0lUT1JZICIke2xvY2FsX2dpdF9yZXBvfSIKKyAgICAgICAgICBDTUFLRV9HRU5FUkFUT1IgIiR7Q01BS0VfR0VORVJBVE9SfSIKKyAgICAgICAgICBDTUFLRV9BUkdTIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg6UEFUSD08SU5TVEFMTF9ESVI+CisgICAgICAgICAgICAgICAgICAgICAtRFdJVEhfUkVDVVJTSVZFOkJPT0w9T04KKyAgICAgICAgICBCVUlMRF9DT01NQU5EICAiIgorICAgICAgICAgIElOU1RBTExfQ09NTUFORCAiIgorICAgICAgICAgIERFUEVORFMgIlNldHVwTG9jYWxHSVRSZXBvc2l0b3J5IgorICAgICAgICAgICAgICAgICAgIlNldHVwTG9jYWxHSVRSZXBvc2l0b3J5V2l0aFN1Ym1vZHVsZXMiCisgICAgICAgICAgICAgICAgICAiU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnlXaXRoUmVjdXJzaXZlU3VibW9kdWxlcyIKKyAgICAgICAgICApCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtwcm9qfSBQUk9QRVJUWSBGT0xERVIgIkdJVCIpCisKKyAgc2V0KHByb2ogVFMxLUdJVC1SRUNVUlNJVkVfU1VCTU9EVUxFUy1leGNsdXNpdmUpCisgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQorICAgICAgICAgIEdJVF9SRVBPU0lUT1JZICIke2xvY2FsX2dpdF9yZXBvfSIKKyAgICAgICAgICBHSVRfU1VCTU9EVUxFU19SRUNVUlNFIFRSVUUKKyAgICAgICAgICBDTUFLRV9HRU5FUkFUT1IgIiR7Q01BS0VfR0VORVJBVE9SfSIKKyAgICAgICAgICBDTUFLRV9BUkdTIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg6UEFUSD08SU5TVEFMTF9ESVI+CisgICAgICAgICAgICAgICAgICAgICAtRFdJVEhfUkVDVVJTSVZFOkJPT0w9T04KKyAgICAgICAgICBCVUlMRF9DT01NQU5EICAiIgorICAgICAgICAgIElOU1RBTExfQ09NTUFORCAiIgorICAgICAgICAgIERFUEVORFMgIlNldHVwTG9jYWxHSVRSZXBvc2l0b3J5IgorICAgICAgICAgICAgICAgICAgIlNldHVwTG9jYWxHSVRSZXBvc2l0b3J5V2l0aFN1Ym1vZHVsZXMiCisgICAgICAgICAgICAgICAgICAiU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnlXaXRoUmVjdXJzaXZlU3VibW9kdWxlcyIKKyAgICAgICAgICApCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtwcm9qfSBQUk9QRVJUWSBGT0xERVIgIkdJVCIpCisKKyAgc2V0KHByb2ogVFMxLUdJVC1SRUNVUlNJVkVfU1VCTU9EVUxFUy1vZmYpCisgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQorICAgICAgICAgIEdJVF9SRVBPU0lUT1JZICIke2xvY2FsX2dpdF9yZXBvfSIKKyAgICAgICAgICBHSVRfU1VCTU9EVUxFU19SRUNVUlNFIEZBTFNFCisgICAgICAgICAgQ01BS0VfR0VORVJBVE9SICIke0NNQUtFX0dFTkVSQVRPUn0iCisgICAgICAgICAgQ01BS0VfQVJHUyAtRENNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9PElOU1RBTExfRElSPgorICAgICAgICAgICAgICAgICAgICAgLURXSVRIX1JFQ1VSU0lWRTpCT09MPU9GRgorICAgICAgICAgIEJVSUxEX0NPTU1BTkQgICIiCisgICAgICAgICAgSU5TVEFMTF9DT01NQU5EICIiCisgICAgICAgICAgREVQRU5EUyAiU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnkiCisgICAgICAgICAgICAgICAgICAiU2V0dXBMb2NhbEdJVFJlcG9zaXRvcnlXaXRoU3VibW9kdWxlcyIKKyAgICAgICAgICAgICAgICAgICJTZXR1cExvY2FsR0lUUmVwb3NpdG9yeVdpdGhSZWN1cnNpdmVTdWJtb2R1bGVzIgorICAgICAgICAgICkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke3Byb2p9IFBST1BFUlRZIEZPTERFUiAiR0lUIikKKwogZW5kaWYoKQogCiBzZXQoZG9faGdfdGVzdHMgMCkKQEAgLTYwMSwxMSArNjcyLDE5IEBACiAgIGFkZF90ZXN0KFR1dG9yaWFsU3RlcDEtR0lULWJ5dGFnCiAgICAgIiR7YmluYXJ5X2Jhc2V9L1R1dG9yaWFsU3RlcDEtR0lULWJ5dGFnL1R1dG9yaWFsIiA5OSkKIAorICBhZGRfdGVzdChUdXRvcmlhbFN0ZXAxLUdJVC1ieXRhZy13aXRoc3VibW9kdWxlcworICAgICIke2JpbmFyeV9iYXNlfS9UdXRvcmlhbFN0ZXAxLUdJVC1ieXRhZy13aXRoc3VibW9kdWxlcy9UdXRvcmlhbCIgOTkpCisKICAgYWRkX3Rlc3QoVHV0b3JpYWxTdGVwMS1HSVQtc2hhbGxvdy1tYXN0ZXIKICAgICAiJHtiaW5hcnlfYmFzZX0vVHV0b3JpYWxTdGVwMS1HSVQtc2hhbGxvdy1tYXN0ZXIvVHV0b3JpYWwiIDk4KQogCiAgIGFkZF90ZXN0KFR1dG9yaWFsU3RlcDEtR0lULW1hc3RlcgogICAgICIke2JpbmFyeV9iYXNlfS9UdXRvcmlhbFN0ZXAxLUdJVC1tYXN0ZXIvVHV0b3JpYWwiIDk4KQorCisgIGlmKE5PVCBnaXRfdmVyc2lvbiBWRVJTSU9OX0xFU1MgMS43LjcpCisgICAgYWRkX3Rlc3QoVHV0b3JpYWxTdGVwMS1HSVQtY29uZmlnCisgICAgICAiJHtiaW5hcnlfYmFzZX0vVHV0b3JpYWxTdGVwMS1HSVQtY29uZmlnL1R1dG9yaWFsIiA5OCkKKyAgZW5kaWYoKQogZW5kaWYoKQogCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL0V4dGVybmFsUHJvamVjdC9naXRyZXBvLXN1Yi1yZWMudGd6IGIvVGVzdHMvRXh0ZXJuYWxQcm9qZWN0L2dpdHJlcG8tc3ViLXJlYy50Z3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmM2YxOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0V4dGVybmFsUHJvamVjdC9naXRyZXBvLXN1Yi1yZWMudGd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1Rlc3RzL0V4dGVybmFsUHJvamVjdFVwZGF0ZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0V4dGVybmFsUHJvamVjdFVwZGF0ZS9DTWFrZUxpc3RzLnR4dAppbmRleCBkYmYyNmM4Li45ZGRkYWUyIDEwMDY0NAotLS0gYS9UZXN0cy9FeHRlcm5hbFByb2plY3RVcGRhdGUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlL0NNYWtlTGlzdHMudHh0CkBAIC03OCw2ICs3OCw4IEBACiAgIEV4dGVybmFsUHJvamVjdF9BZGQoJHtwcm9qfQogICAgIEdJVF9SRVBPU0lUT1JZICIke2xvY2FsX2dpdF9yZXBvfSIKICAgICBHSVRfVEFHICR7VEVTVF9HSVRfVEFHfQorICAgIEdJVF9DT05GSUcgInVzZXIuZW1haWw9dGVzdGF1dGhvckBjbWFrZS5vcmciCisgICAgICAgICAgICAgICAidXNlci5uYW1lPXRlc3RhdXRob3IiCiAgICAgQ01BS0VfR0VORVJBVE9SICIke0NNQUtFX0dFTkVSQVRPUn0iCiAgICAgQ01BS0VfQVJHUyAtRENNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9PElOU1RBTExfRElSPgogICAgIElOU1RBTExfQ09NTUFORCAiIgpkaWZmIC0tZ2l0IGEvVGVzdHMvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlL0V4dGVybmFsUHJvamVjdFVwZGF0ZVRlc3QuY21ha2UgYi9UZXN0cy9FeHRlcm5hbFByb2plY3RVcGRhdGUvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlVGVzdC5jbWFrZQppbmRleCA4ZWE0NDUyLi5kZGM1MTNmIDEwMDY0NAotLS0gYS9UZXN0cy9FeHRlcm5hbFByb2plY3RVcGRhdGUvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9FeHRlcm5hbFByb2plY3RVcGRhdGUvRXh0ZXJuYWxQcm9qZWN0VXBkYXRlVGVzdC5jbWFrZQpAQCAtMiw3ICsyLDcgQEAKICMgcmVzdWx0aW5nIGNoZWNrZWQgb3V0IHZlcnNpb24gaXMgcmVzdWx0aW5nX3NoYSBhbmQgcmVidWlsZC4KICMgVGhpcyBjaGVjaydzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSBFeHRlcm5hbFByb2plY3QgVVBEQVRFX0NPTU1BTkQuCiAjIEFsc28gdmVyaWZ5IHRoYXQgYSBmZXRjaCBvbmx5IG9jY3VycyB3aGVuIGZldGNoX2V4cGVjdGVkIGlzIDEuCi1tYWNybyhjaGVja19hX3RhZyBkZXNpcmVkX3RhZyByZXN1bHRpbmdfc2hhIGZldGNoX2V4cGVjdGVkKQorbWFjcm8oY2hlY2tfYV90YWcgZGVzaXJlZF90YWcgcmVzdWx0aW5nX3NoYSBmZXRjaF9leHBlY3RlZCB1cGRhdGVfc3RyYXRlZ3kpCiAgIG1lc3NhZ2UoIFNUQVRVUyAiQ2hlY2tpbmcgRXh0ZXJuYWxQcm9qZWN0VXBkYXRlIHRvIHRhZzogJHtkZXNpcmVkX3RhZ30iICkKIAogICAjIFJlbW92ZSB0aGUgRkVUQ0hfSEVBRCBmaWxlLCBzbyB3ZSBjYW4gY2hlY2sgaWYgaXQgZ2V0cyByZXBsYWNlZCB3aXRoIGEgJ2dpdApAQCAtMTAsMTEgKzEwLDE2IEBACiAgIHNldCggRkVUQ0hfSEVBRF9maWxlICR7RXh0ZXJuYWxQcm9qZWN0VXBkYXRlX0JJTkFSWV9ESVJ9L0NNYWtlRXh0ZXJuYWxzL1NvdXJjZS9UdXRvcmlhbFN0ZXAxLUdJVC8uZ2l0L0ZFVENIX0hFQUQgKQogICBmaWxlKCBSRU1PVkUgJHtGRVRDSF9IRUFEX2ZpbGV9ICkKIAorICAjIEdpdmUgb3Vyc2VsdmVzIGEgbWFya2VyIGluIHRoZSBvdXRwdXQuIEl0IGlzIGRpZmZpY3VsdCB0byB0ZWxsIHdoZXJlIHdlCisgICMgYXJlIHVwIHRvIHdpdGhvdXQgdGhpcworICBtZXNzYWdlKFNUQVRVUyAiPT09PiBjaGVja19hX3RhZyAke2Rlc2lyZWRfdGFnfSAke3Jlc3VsdGluZ19zaGF9ICR7ZmV0Y2hfZXhwZWN0ZWR9ICR7dXBkYXRlX3N0cmF0ZWd5fSIpCisKICAgIyBDb25maWd1cmUKICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQogICAgIC1HICR7Q01BS0VfR0VORVJBVE9SfSAtVCAiJHtDTUFLRV9HRU5FUkFUT1JfVE9PTFNFVH0iCiAgICAgLUEgIiR7Q01BS0VfR0VORVJBVE9SX1BMQVRGT1JNfSIKICAgICAtRFRFU1RfR0lUX1RBRzpTVFJJTkc9JHtkZXNpcmVkX3RhZ30KKyAgICAtRENNQUtFX0VQX0dJVF9SRU1PVEVfVVBEQVRFX1NUUkFURUdZOlNUUklORz0ke3VwZGF0ZV9zdHJhdGVneX0KICAgICAke0V4dGVybmFsUHJvamVjdFVwZGF0ZV9TT1VSQ0VfRElSfQogICAgIFdPUktJTkdfRElSRUNUT1JZICR7RXh0ZXJuYWxQcm9qZWN0VXBkYXRlX0JJTkFSWV9ESVJ9CiAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKQEAgLTE3NiwxNiArMTgxLDU1IEBACiAgIGVuZGlmKCkKIGVuZGlmKCkKIAorIyBXaGVuIHJlLXJ1bm5pbmcgdGVzdHMgbG9jYWxseSwgdGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBzdGFydCBhZnJlc2gKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgJHtFeHRlcm5hbFByb2plY3RVcGRhdGVfQklOQVJZX0RJUn0vQ01ha2VFeHRlcm5hbHMpCisKIGlmKGRvX2dpdF90ZXN0cykKLSAgY2hlY2tfYV90YWcob3JpZ2luL21hc3RlciA1ODQyYjUwM2JhNDExMzk3NmQ5YmIyOGQ1N2I1YWVlMWFkMjczNmI3IDEpCi0gIGNoZWNrX2FfdGFnKHRhZzEgICAgICAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAxKQorICBjaGVja19hX3RhZyhvcmlnaW4vbWFzdGVyIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSBSRUJBU0UpCisgIGNoZWNrX2FfdGFnKHRhZzEgICAgICAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAxIFJFQkFTRSkKICAgIyBXaXRoIHRoZSBHaXQgVVBEQVRFX0NPTU1BTkQgcGVyZm9ybWFuY2UgcGF0Y2gsIHRoaXMgd2lsbCBub3QgcmVxdWlyZWQgYQogICAjICdnaXQgZmV0Y2gnCi0gIGNoZWNrX2FfdGFnKHRhZzEgICAgICAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAwKQotICBjaGVja19hX3RhZyh0YWcyICAgICAgICAgIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSkKLSAgY2hlY2tfYV90YWcoZDE5NzA3MzAzICAgICBkMTk3MDczMDMxMGZlOGJjMDdlNzNmMTVkYzU3MDA3MWY5Zjk2NTRhIDEpCi0gIGNoZWNrX2FfdGFnKGQxOTcwNzMwMyAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAwKQotICBjaGVja19hX3RhZyhvcmlnaW4vbWFzdGVyIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSkKKyAgY2hlY2tfYV90YWcodGFnMSAgICAgICAgICBkMTk3MDczMDMxMGZlOGJjMDdlNzNmMTVkYzU3MDA3MWY5Zjk2NTRhIDAgUkVCQVNFKQorICBjaGVja19hX3RhZyh0YWcyICAgICAgICAgIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSBSRUJBU0UpCisgIGNoZWNrX2FfdGFnKGQxOTcwNzMwMyAgICAgZDE5NzA3MzAzMTBmZThiYzA3ZTczZjE1ZGM1NzAwNzFmOWY5NjU0YSAxIFJFQkFTRSkKKyAgY2hlY2tfYV90YWcoZDE5NzA3MzAzICAgICBkMTk3MDczMDMxMGZlOGJjMDdlNzNmMTVkYzU3MDA3MWY5Zjk2NTRhIDAgUkVCQVNFKQorICBjaGVja19hX3RhZyhvcmlnaW4vbWFzdGVyIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSBSRUJBU0UpCiAgICMgVGhpcyBpcyBhIHJlbW90ZSBzeW1ib2xpYyByZWYsIHNvIGl0IHdpbGwgYWx3YXlzIHRyaWdnZXIgYSAnZ2l0IGZldGNoJwotICBjaGVja19hX3RhZyhvcmlnaW4vbWFzdGVyIDU4NDJiNTAzYmE0MTEzOTc2ZDliYjI4ZDU3YjVhZWUxYWQyNzM2YjcgMSkKKyAgY2hlY2tfYV90YWcob3JpZ2luL21hc3RlciA1ODQyYjUwM2JhNDExMzk3NmQ5YmIyOGQ1N2I1YWVlMWFkMjczNmI3IDEgUkVCQVNFKQorCisgIGZvcmVhY2goc3RyYXRlZ3kgSU4gSVRFTVMgQ0hFQ0tPVVQgUkVCQVNFX0NIRUNLT1VUKQorICAgICMgTW92ZSBsb2NhbCBtYXN0ZXIgYmFjaywgdGhlbiBhcHBseSBhIGNoYW5nZSB0aGF0IHdpbGwgY2F1c2UgYSBjb25mbGljdAorICAgICMgZHVyaW5nIHJlYmFzZQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7R0lUX0VYRUNVVEFCTEV9IGNoZWNrb3V0IG1hc3RlcgorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtFeHRlcm5hbFByb2plY3RVcGRhdGVfQklOQVJZX0RJUn0vQ01ha2VFeHRlcm5hbHMvU291cmNlL1R1dG9yaWFsU3RlcDEtR0lUCisgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgKQorICAgIGlmKGVycm9yX2NvZGUpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgcmVzZXQgbG9jYWwgbWFzdGVyIGJhY2sgdG8gdGFnMS4iKQorICAgIGVuZGlmKCkKKyAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0dJVF9FWEVDVVRBQkxFfSByZXNldCAtLWhhcmQgdGFnMQorICAgICAgV09SS0lOR19ESVJFQ1RPUlkgJHtFeHRlcm5hbFByb2plY3RVcGRhdGVfQklOQVJZX0RJUn0vQ01ha2VFeHRlcm5hbHMvU291cmNlL1R1dG9yaWFsU3RlcDEtR0lUCisgICAgICBSRVNVTFRfVkFSSUFCTEUgZXJyb3JfY29kZQorICAgICAgKQorICAgIGlmKGVycm9yX2NvZGUpCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDb3VsZCBub3QgcmVzZXQgbG9jYWwgbWFzdGVyIGJhY2sgdG8gdGFnMS4iKQorICAgIGVuZGlmKCkKKworICAgIHNldChjbWxGaWxlICR7RXh0ZXJuYWxQcm9qZWN0VXBkYXRlX0JJTkFSWV9ESVJ9L0NNYWtlRXh0ZXJuYWxzL1NvdXJjZS9UdXRvcmlhbFN0ZXAxLUdJVC9DTWFrZUxpc3RzLnR4dCkKKyAgICBmaWxlKFJFQUQgJHtjbWxGaWxlfSBjb250ZW50cykKKyAgICBzdHJpbmcoUkVQTEFDRSAiZmluZCBUdXRvcmlhbENvbmZpZy5oIiAiZmluZCBUdXRvcmlhbENvbmZpZy5oIChjb25mbGljdCBoZXJlKSIKKyAgICAgIGNvbmZsaWN0aW5nQ29udGVudCAiJHtjb250ZW50c30iCisgICAgICApCisgICAgZmlsZShXUklURSAke2NtbEZpbGV9ICIke2NvbmZsaWN0aW5nQ29udGVudH0iKQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7R0lUX0VYRUNVVEFCTEV9IGNvbW1pdCAtYSAtbSAiVGhpcyBzaG91bGQgY2F1c2UgYSBjb25mbGljdCIKKyAgICAgIFdPUktJTkdfRElSRUNUT1JZICR7RXh0ZXJuYWxQcm9qZWN0VXBkYXRlX0JJTkFSWV9ESVJ9L0NNYWtlRXh0ZXJuYWxzL1NvdXJjZS9UdXRvcmlhbFN0ZXAxLUdJVAorICAgICAgUkVTVUxUX1ZBUklBQkxFIGVycm9yX2NvZGUKKyAgICAgICkKKyAgICBpZihlcnJvcl9jb2RlKQorICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ291bGQgbm90IGNvbW1pdCBjb25mbGljdGluZyBjaGFuZ2UuIikKKyAgICBlbmRpZigpCisgICAgIyBUaGlzIHNob3VsZCBkaXNjYXJkIG91ciBjb21taXQgYnV0IGxlYXZlIGJlaGluZCBhbiBhbm5vdGF0ZWQgdGFnCisgICAgY2hlY2tfYV90YWcob3JpZ2luL21hc3RlciA1ODQyYjUwM2JhNDExMzk3NmQ5YmIyOGQ1N2I1YWVlMWFkMjczNmI3IDEgJHtzdHJhdGVneX0pCisgIGVuZGZvcmVhY2goKQorCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kQkxBUy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRCTEFTL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzE5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kQkxBUy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEwIEBACithZGRfdGVzdChOQU1FIEZpbmRCTEFTLlRlc3QgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kQkxBUy9UZXN0IgorICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kQkxBUy9UZXN0IgorICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAtLWJ1aWxkLXByb2plY3QgVGVzdEZpbmRCTEFTCisgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICApCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kQkxBUy9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZEJMQVMvVGVzdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQxOGYzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZEJMQVMvVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy40KQorcHJvamVjdChUZXN0RmluZEJMQVMgQykKK2luY2x1ZGUoQ1Rlc3QpCisKK2ZpbmRfcGFja2FnZShCTEFTIFJFUVVJUkVEKQorCithZGRfZXhlY3V0YWJsZSh0ZXN0X3RndCBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF90Z3QgQkxBUzo6QkxBUykKK2FkZF90ZXN0KE5BTUUgdGVzdF90Z3QgQ09NTUFORCB0ZXN0X3RndCkKKworYWRkX2V4ZWN1dGFibGUodGVzdF92YXIgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfdmFyIFBSSVZBVEUgJHtCTEFTX0xJQlJBUklFU30pCithZGRfdGVzdChOQU1FIHRlc3RfdmFyIENPTU1BTkQgdGVzdF92YXIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kQkxBUy9UZXN0L21haW4uYyBiL1Rlc3RzL0ZpbmRCTEFTL1Rlc3QvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNjBkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kQkxBUy9UZXN0L21haW4uYwpAQCAtMCwwICsxLDE0IEBACisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8vIGRlY2xhcmUgd2hhdCBwYXJ0cyBvZiB0aGUgYmxhcyBDLUFQSSB3ZSBuZWVkCit2b2lkIGNibGFzX2Rzd2FwKGNvbnN0IGludCBOLCBkb3VibGUqIFgsIGNvbnN0IGludCBpbmNYLCBkb3VibGUqIFksCisgICAgICAgICAgICAgICAgIGNvbnN0IGludCBpbmNZKTsKKworaW50IG1haW4oKQoreworICBkb3VibGUgeFs0XSA9IHsgMSwgMiwgMywgNCB9OworICBkb3VibGUgeVs0XSA9IHsgOCwgNywgNywgNiB9OworICBjYmxhc19kc3dhcCg0LCB4LCAxLCB5LCAxKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kRG94eWdlbi9TaW1wbGVUZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZERveHlnZW4vU2ltcGxlVGVzdC9DTWFrZUxpc3RzLnR4dAppbmRleCAzMzJjZWNjLi5kZWVjNGZkIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kRG94eWdlbi9TaW1wbGVUZXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmREb3h5Z2VuL1NpbXBsZVRlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTIyLDYgKzIyLDcgQEAKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJJbXBvcnQgdGFyZ2V0IERveHlnZW46OmRveHlnZW4gbm90IGRlZmluZWQiKQogZW5kaWYoKQogCitzZXQoRE9YWUdFTl9PVVRQVVRfRElSRUNUT1JZIG5vQXJncykKIGRveHlnZW5fYWRkX2RvY3MoZG9jc05vQXJncykKIGlmKE5PVCBFWElTVFMgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9Eb3h5ZmlsZS5kb2NzTm9BcmdzIikKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJNaXNzaW5nIGdlbmVyYXRlZCBmaWxlOiBEb3h5ZmlsZS5kb2NzTm9BcmdzIikKQEAgLTMwLDYgKzMxLDcgQEAKICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUYXJnZXQgZG9jc05vQXJncyBub3QgY3JlYXRlZCIpCiBlbmRpZigpCiAKK3NldChET1hZR0VOX09VVFBVVF9ESVJFQ1RPUlkgd2l0aEFyZ3MpCiBjb25maWd1cmVfZmlsZShzcGFjZXNfaW5fbmFtZS5jcHAuaW4gInNwYWNlcyBpbiBuYW1lLmNwcCIgQ09QWU9OTFkpCiBkb3h5Z2VuX2FkZF9kb2NzKGRvY3NXaXRoQXJncwogICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vc3BhY2VzIGluIG5hbWUuY3BwIgpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZERveHlnZW4vU3RhbXBGaWxlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZERveHlnZW4vU3RhbXBGaWxlL0NNYWtlTGlzdHMudHh0CmluZGV4IDJkMDY1NDAuLmVkMmJmYmIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmREb3h5Z2VuL1N0YW1wRmlsZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kRG94eWdlbi9TdGFtcEZpbGUvQ01ha2VMaXN0cy50eHQKQEAgLTMsMjIgKzMsNDEgQEAKIAogZmluZF9wYWNrYWdlKERveHlnZW4gUkVRVUlSRUQpCiAKK3NldChET1hZR0VOX09VVFBVVF9ESVJFQ1RPUlkgbm9GaWxlcykKIGRveHlnZW5fYWRkX2RvY3MoZG9jc1dpdGhvdXRGaWxlc1dpdGhTdGFtcCBVU0VfU1RBTVBfRklMRSkKIGlmKE5PVCBFWElTVFMgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9Eb3h5ZmlsZS5kb2NzV2l0aG91dEZpbGVzV2l0aFN0YW1wIikKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJNaXNzaW5nIGdlbmVyYXRlZCBmaWxlOiBEb3h5ZmlsZS5kb2NzV2l0aG91dEZpbGVzV2l0aFN0YW1wIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTWlzc2luZyBnZW5lcmF0ZWQgZmlsZTogRG94eWZpbGUuZG9jc1dpdGhvdXRGaWxlc1dpdGhTdGFtcCIpCiBlbmRpZigpCiBpZihOT1QgVEFSR0VUIGRvY3NXaXRob3V0RmlsZXNXaXRoU3RhbXApCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGFyZ2V0IGRvY3NXaXRob3V0RmlsZXNXaXRoU3RhbXAgbm90IGNyZWF0ZWQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUYXJnZXQgZG9jc1dpdGhvdXRGaWxlc1dpdGhTdGFtcCBub3QgY3JlYXRlZCIpCiBlbmRpZigpCiAKK3NldChET1hZR0VOX09VVFBVVF9ESVJFQ1RPUlkgd2l0aEZpbGVzKQogZG94eWdlbl9hZGRfZG9jcyhkb2NzV2l0aEZpbGVzV2l0aFN0YW1wIG1haW4uY3BwIG1haW4yLmNwcCBVU0VfU1RBTVBfRklMRSkKIGlmKE5PVCBFWElTVFMgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9Eb3h5ZmlsZS5kb2NzV2l0aEZpbGVzV2l0aFN0YW1wIikKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJNaXNzaW5nIGdlbmVyYXRlZCBmaWxlOiBEb3h5ZmlsZS5kb2NzV2l0aEZpbGVzV2l0aFN0YW1wIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTWlzc2luZyBnZW5lcmF0ZWQgZmlsZTogRG94eWZpbGUuZG9jc1dpdGhGaWxlc1dpdGhTdGFtcCIpCiBlbmRpZigpCiBpZihOT1QgVEFSR0VUIGRvY3NXaXRoRmlsZXNXaXRoU3RhbXApCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGFyZ2V0IGRvY3NXaXRoRmlsZXNXaXRoU3RhbXAgbm90IGNyZWF0ZWQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUYXJnZXQgZG9jc1dpdGhGaWxlc1dpdGhTdGFtcCBub3QgY3JlYXRlZCIpCiBlbmRpZigpCiAKKyMgQ29uZmlybSB0aGF0IGRveHlnZW5fYWRkX2RvY3MoKSBkb2Vzbid0IGNhdXNlIGEgZmF0YWwgZXJyb3IgaWYgZ2l2ZW4gYQorIyBzb3VyY2UgZmlsZSB0aGF0IGlzIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lCitmaWxlKFJFTU9WRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZ2VuRG94LmNwcCkKK2FkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgZ2VuRG94LmNwcAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFpbjIuY3BwIGdlbkRveC5jcHAKKyAgREVQRU5EUyBtYWluMi5jcHAKKykKK3NldChET1hZR0VOX09VVFBVVF9ESVJFQ1RPUlkgd2l0aEdlbkZpbGVzKQorZG94eWdlbl9hZGRfZG9jcyhkb2NzV2l0aEdlbkZpbGVzV2l0aFN0YW1wCisgIG1haW4uY3BwCisgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9nZW5Eb3guY3BwCisgIFVTRV9TVEFNUF9GSUxFCispCiAKIGFkZF9jdXN0b21fdGFyZ2V0KGFsbERvY1RhcmdldHMpCi1hZGRfZGVwZW5kZW5jaWVzKGFsbERvY1RhcmdldHMgZG9jc1dpdGhvdXRGaWxlc1dpdGhTdGFtcCBkb2NzV2l0aEZpbGVzV2l0aFN0YW1wKQorYWRkX2RlcGVuZGVuY2llcyhhbGxEb2NUYXJnZXRzCisgIGRvY3NXaXRob3V0RmlsZXNXaXRoU3RhbXAKKyAgZG9jc1dpdGhGaWxlc1dpdGhTdGFtcAorICBkb2NzV2l0aEdlbkZpbGVzV2l0aFN0YW1wCispCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kR1Rlc3QvVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRHVGVzdC9UZXN0L0NNYWtlTGlzdHMudHh0CmluZGV4IGI2NWI5ZDIuLjY1MzcyMzggMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRHVGVzdC9UZXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRHVGVzdC9UZXN0L0NNYWtlTGlzdHMudHh0CkBAIC04LDYgKzgsMTAgQEAKIHRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X2d0ZXN0X3RndCBHVGVzdDo6TWFpbikKIGFkZF90ZXN0KE5BTUUgdGVzdF9ndGVzdF90Z3QgQ09NTUFORCB0ZXN0X2d0ZXN0X3RndCkKIAorYWRkX2V4ZWN1dGFibGUodGVzdF9ndGVzdF90Z3RfdXBzdHJlYW0gbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF9ndGVzdF90Z3RfdXBzdHJlYW0gR1Rlc3Q6Omd0ZXN0X21haW4pCithZGRfdGVzdChOQU1FIHRlc3RfZ3Rlc3RfdGd0X3Vwc3RyZWFtIENPTU1BTkQgdGVzdF9ndGVzdF90Z3RfdXBzdHJlYW0pCisKIGFkZF9leGVjdXRhYmxlKHRlc3RfZ3Rlc3RfdmFyIG1haW4uY3h4KQogdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXModGVzdF9ndGVzdF92YXIgUFJJVkFURSAke0dURVNUX0lOQ0xVREVfRElSU30pCiB0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF9ndGVzdF92YXIgUFJJVkFURSAke0dURVNUX0JPVEhfTElCUkFSSUVTfSAke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZExBUEFDSy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRMQVBBQ0svQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4MWQ1OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRMQVBBQ0svQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMCBAQAorYWRkX3Rlc3QoTkFNRSBGaW5kTEFQQUNLLlRlc3QgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kTEFQQUNLL1Rlc3QiCisgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRMQVBBQ0svVGVzdCIKKyAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgLS1idWlsZC1wcm9qZWN0IFRlc3RGaW5kTEFQQUNLCisgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICApCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTEFQQUNLL1Rlc3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kTEFQQUNLL1Rlc3QvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmYTM2YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRMQVBBQ0svVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy40KQorcHJvamVjdChUZXN0RmluZExBUEFDSyBDKQoraW5jbHVkZShDVGVzdCkKKworZmluZF9wYWNrYWdlKExBUEFDSyBSRVFVSVJFRCkKKworYWRkX2V4ZWN1dGFibGUodGVzdF90Z3QgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfdGd0IExBUEFDSzo6TEFQQUNLKQorYWRkX3Rlc3QoTkFNRSB0ZXN0X3RndCBDT01NQU5EIHRlc3RfdGd0KQorCithZGRfZXhlY3V0YWJsZSh0ZXN0X3ZhciBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF92YXIgUFJJVkFURSAke0xBUEFDS19MSUJSQVJJRVN9KQorYWRkX3Rlc3QoTkFNRSB0ZXN0X3ZhciBDT01NQU5EIHRlc3RfdmFyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZExBUEFDSy9UZXN0L21haW4uYyBiL1Rlc3RzL0ZpbmRMQVBBQ0svVGVzdC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3M2U3YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRMQVBBQ0svVGVzdC9tYWluLmMKQEAgLTAsMCArMSwyMCBAQAorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvLyBkZWNsYXJlIHdoYXQgcGFydHMgb2YgdGhlIGxhcGFjayBDLUFQSSB3ZSBuZWVkCit2b2lkIGRnZXN2XyhpbnQqLCBpbnQqLCBkb3VibGUqLCBpbnQqLCBpbnQqLCBkb3VibGUqLCBpbnQqLCBpbnQqKTsKKworaW50IG1haW4oKQoreworICBkb3VibGUgQVs4XSA9IHsKKyAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAorICB9OworICBkb3VibGUgQlsyXSA9IHsgMCwgNSB9OworICBpbnQgaXBpdlsyXSA9IHsgMCwgMCB9OworICBpbnQgaW5mbyA9IDA7CisKKyAgaW50IGRpbSA9IDI7CisgIGludCBudW1Db2xzID0gMTsKKyAgZGdlc3ZfKCZkaW0sICZudW1Db2xzLCBBLCAmZGltLCBpcGl2LCBCLCAmZGltLCAmaW5mbyk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZExpYkFyY2hpdmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kTGliQXJjaGl2ZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMyZWYyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZExpYkFyY2hpdmUvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMCBAQAorYWRkX3Rlc3QoTkFNRSBGaW5kTGliQXJjaGl2ZS5UZXN0IENPTU1BTkQKKyAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgIC0tYnVpbGQtYW5kLXRlc3QKKyAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZExpYkFyY2hpdmUvVGVzdCIKKyAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZExpYkFyY2hpdmUvVGVzdCIKKyAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgLS1idWlsZC1wcm9qZWN0IFRlc3RGaW5kTGliQXJjaGl2ZQorICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfQorICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZExpYkFyY2hpdmUvVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRMaWJBcmNoaXZlL1Rlc3QvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4NDNiYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRMaWJBcmNoaXZlL1Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxNCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTIpCitwcm9qZWN0KFRlc3RGaW5kTGliQXJjaGl2ZSBDKQoraW5jbHVkZShDVGVzdCkKKworZmluZF9wYWNrYWdlKExpYkFyY2hpdmUgUkVRVUlSRUQpCisKK2FkZF9leGVjdXRhYmxlKHRlc3RfbGliYXJjaGl2ZV90Z3QgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfbGliYXJjaGl2ZV90Z3QgTGliQXJjaGl2ZTo6TGliQXJjaGl2ZSkKK2FkZF90ZXN0KE5BTUUgdGVzdF9saWJhcmNoaXZlX3RndCBDT01NQU5EIHRlc3RfbGliYXJjaGl2ZV90Z3QpCisKK2FkZF9leGVjdXRhYmxlKHRlc3RfbGliYXJjaGl2ZV92YXIgbWFpbi5jKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXModGVzdF9saWJhcmNoaXZlX3ZhciBQUklWQVRFICR7TGliQXJjaGl2ZV9JTkNMVURFX0RJUlN9KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfbGliYXJjaGl2ZV92YXIgUFJJVkFURSAke0xpYkFyY2hpdmVfTElCUkFSSUVTfSkKK2FkZF90ZXN0KE5BTUUgdGVzdF9saWJhcmNoaXZlX3ZhciBDT01NQU5EIHRlc3RfbGliYXJjaGl2ZV92YXIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTGliQXJjaGl2ZS9UZXN0L21haW4uYyBiL1Rlc3RzL0ZpbmRMaWJBcmNoaXZlL1Rlc3QvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTdlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kTGliQXJjaGl2ZS9UZXN0L21haW4uYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlIDxhcmNoaXZlLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisgIGFyY2hpdmVfcmVhZF9mcmVlKGFyY2hpdmVfcmVhZF9uZXcoKSk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZExpYlhtbDIvVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRMaWJYbWwyL1Rlc3QvQ01ha2VMaXN0cy50eHQKaW5kZXggZGY1ZDhjMy4uMDQxY2MxMyAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZExpYlhtbDIvVGVzdC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kTGliWG1sMi9UZXN0L0NNYWtlTGlzdHMudHh0CkBAIC0xNCwzICsxNCw3IEBACiB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyh0ZXN0X3ZhciBQUklWQVRFICR7TElCWE1MMl9JTkNMVURFX0RJUlN9KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfdmFyIFBSSVZBVEUgJHtMSUJYTUwyX0xJQlJBUklFU30pCiBhZGRfdGVzdChOQU1FIHRlc3RfdmFyIENPTU1BTkQgdGVzdF92YXIpCisKK2FkZF90ZXN0KE5BTUUgeG1sbGludF90Z3QgQ09NTUFORCBMaWJYbWwyOjp4bWxsaW50IC0tdmVyc2lvbikKKworYWRkX3Rlc3QoTkFNRSB4bWxsaW50X3ZhciBDT01NQU5EICR7TElCWE1MMl9YTUxMSU5UX0VYRUNVVEFCTEV9IC0tdmVyc2lvbikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRMaWJYc2x0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZExpYlhzbHQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1NTBiMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRMaWJYc2x0L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTAgQEAKK2FkZF90ZXN0KE5BTUUgRmluZExpYlhzbHQuVGVzdCBDT01NQU5ECisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAtLWJ1aWxkLWFuZC10ZXN0CisgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRMaWJYc2x0L1Rlc3QiCisgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRMaWJYc2x0L1Rlc3QiCisgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgIC0tYnVpbGQtcHJvamVjdCBUZXN0RmluZExpYlhzbHQKKyAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CispCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kTGliWHNsdC9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZExpYlhzbHQvVGVzdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTMyNjYxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZExpYlhzbHQvVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDQ1IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy40KQorcHJvamVjdChUZXN0RmluZExpYlhzbHQgQykKK2luY2x1ZGUoQ1Rlc3QpCisKK2ZpbmRfcGFja2FnZShJY29udikKK2ZpbmRfcGFja2FnZShMaWJYbWwyIFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKExpYlhzbHQgUkVRVUlSRUQpCisKK2FkZF9kZWZpbml0aW9ucygtRENNQUtFX0VYUEVDVEVEX0xpYlhzbHRfVkVSU0lPTj0iJHtMSUJYU0xUX1ZFUlNJT05fU1RSSU5HfSIpCisKK2FkZF9leGVjdXRhYmxlKGxpYnhzbHRfdGd0IGxpYnhzbHQuYykKK2lmKEljb252X0ZPVU5EKQorICB0YXJnZXRfbGlua19saWJyYXJpZXMobGlieHNsdF90Z3QgSWNvbnY6Okljb252KQorZW5kaWYoKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxpYnhzbHRfdGd0IExpYlhtbDI6OkxpYlhtbDIgTGliWHNsdDo6TGliWHNsdCkKK2FkZF90ZXN0KE5BTUUgbGlieHNsdF90Z3QgQ09NTUFORCBsaWJ4c2x0X3RndCkKKworYWRkX2V4ZWN1dGFibGUobGlieHNsdF92YXIgbGlieHNsdC5jKQoraWYoSWNvbnZfRk9VTkQpCisgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGxpYnhzbHRfdmFyIFBSSVZBVEUgJHtJY29udl9JTkNMVURFX0RJUlN9KQorICB0YXJnZXRfbGlua19saWJyYXJpZXMobGlieHNsdF92YXIgUFJJVkFURSAke0ljb252X0xJQlJBUklFU30pCitlbmRpZigpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhsaWJ4c2x0X3ZhciBQUklWQVRFICR7TElCWE1MMl9JTkNMVURFX0RJUlN9ICR7TElCWFNMVF9JTkNMVURFX0RJUn0pCit0YXJnZXRfbGlua19saWJyYXJpZXMobGlieHNsdF92YXIgUFJJVkFURSAke0xJQlhNTDJfTElCUkFSSUVTfSAke0xJQlhTTFRfTElCUkFSSUVTfSkKK2FkZF90ZXN0KE5BTUUgbGlieHNsdF92YXIgQ09NTUFORCBsaWJ4c2x0X3ZhcikKKworYWRkX2V4ZWN1dGFibGUobGliZXhzbHRfdGd0IGxpYmV4c2x0LmMpCitpZihJY29udl9GT1VORCkKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxpYmV4c2x0X3RndCBJY29udjo6SWNvbnYpCitlbmRpZigpCit0YXJnZXRfbGlua19saWJyYXJpZXMobGliZXhzbHRfdGd0IExpYlhtbDI6OkxpYlhtbDIgTGliWHNsdDo6TGliWHNsdCBMaWJYc2x0OjpMaWJFeHNsdCkKK2FkZF90ZXN0KE5BTUUgbGliZXhzbHRfdGd0IENPTU1BTkQgbGliZXhzbHRfdGd0KQorCithZGRfZXhlY3V0YWJsZShsaWJleHNsdF92YXIgbGliZXhzbHQuYykKK2lmKEljb252X0ZPVU5EKQorICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhsaWJleHNsdF92YXIgUFJJVkFURSAke0ljb252X0lOQ0xVREVfRElSU30pCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhsaWJleHNsdF92YXIgUFJJVkFURSAke0ljb252X0xJQlJBUklFU30pCitlbmRpZigpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhsaWJleHNsdF92YXIgUFJJVkFURSAke0xJQlhNTDJfSU5DTFVERV9ESVJTfSAke0xJQlhTTFRfSU5DTFVERV9ESVJ9ICR7TElCWFNMVF9FWFNMVF9JTkNMVURFX0RJUn0pCit0YXJnZXRfbGlua19saWJyYXJpZXMobGliZXhzbHRfdmFyIFBSSVZBVEUgJHtMSUJYTUwyX0xJQlJBUklFU30gJHtMSUJYU0xUX0xJQlJBUklFU30gJHtMSUJYU0xUX0VYU0xUX0xJQlJBUklFU30pCithZGRfdGVzdChOQU1FIGxpYmV4c2x0X3ZhciBDT01NQU5EIGxpYmV4c2x0X3ZhcikKKworYWRkX3Rlc3QoTkFNRSB4c2x0cHJvY190Z3QgQ09NTUFORCBMaWJYc2x0Ojp4c2x0cHJvYyAtLXZlcnNpb24pCisKK2FkZF90ZXN0KE5BTUUgeHNsdHByb2NfdmFyIENPTU1BTkQgJHtMSUJYU0xUX1hTTFRQUk9DX0VYRUNVVEFCTEV9IC0tdmVyc2lvbikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRMaWJYc2x0L1Rlc3QvbGliZXhzbHQuYyBiL1Rlc3RzL0ZpbmRMaWJYc2x0L1Rlc3QvbGliZXhzbHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTZlYjNkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZExpYlhzbHQvVGVzdC9saWJleHNsdC5jCkBAIC0wLDAgKzEsMTYgQEAKKyNpbmNsdWRlIDxsaWJleHNsdC9leHNsdC5oPgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5oPgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdEludGVybmFscy5oPgorCitpbnQgbWFpbigpCit7CisgIHhzbHRJbml0KCk7CisKKyAgeHNsdFN0eWxlc2hlZXQqIHN0eWxlID0geHNsdE5ld1N0eWxlc2hlZXQoKTsKKyAgZXhzbHRSZWdpc3RlckFsbCgpOworICB4c2x0RnJlZVN0eWxlc2hlZXQoc3R5bGUpOworCisgIHhzbHRDbGVhbnVwR2xvYmFscygpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZExpYlhzbHQvVGVzdC9saWJ4c2x0LmMgYi9UZXN0cy9GaW5kTGliWHNsdC9UZXN0L2xpYnhzbHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjNkNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZExpYlhzbHQvVGVzdC9saWJ4c2x0LmMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5oPgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdEludGVybmFscy5oPgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdGNvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludCBtYWluKCkKK3sKKyAgeHNsdEluaXQoKTsKKworICB4c2x0U3R5bGVzaGVldCogc3R5bGUgPSB4c2x0TmV3U3R5bGVzaGVldCgpOworICB4c2x0RnJlZVN0eWxlc2hlZXQoc3R5bGUpOworCisgIGlmICgwICE9IHN0cmNtcChDTUFLRV9FWFBFQ1RFRF9MaWJYc2x0X1ZFUlNJT04sIExJQlhTTFRfRE9UVEVEX1ZFUlNJT04pKSB7CisgICAgcHJpbnRmKCJDTUFLRV9FWFBFQ1RFRF9MaWJYc2x0X1ZFUlNJT046ICclcydcbiIsCisgICAgICAgICAgIENNQUtFX0VYUEVDVEVEX0xpYlhzbHRfVkVSU0lPTik7CisgICAgcHJpbnRmKCJMSUJYU0xUX0RPVFRFRF9WRVJTSU9OOiAnJXMnXG4iLCBMSUJYU0xUX0RPVFRFRF9WRVJTSU9OKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHhzbHRDbGVhbnVwR2xvYmFscygpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZE1vZHVsZXNFeGVjdXRlQWxsL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZE1vZHVsZXNFeGVjdXRlQWxsL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODkzYmIzLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL0ZpbmRNb2R1bGVzRXhlY3V0ZUFsbC9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgVGhpcyBmaWxlIGluY2x1ZGVzIGFsbCBGaW5kWFhYLmNtYWtlIG1vZHVsZXMsIHNvIHRoZXkgYXJlIGFsbCBleGVjdXRlZC4KLSMgQXMgaXQgaXMgaXQgZG9lc24ndCB0ZXN0IGEgbG90LgotIyBJdCBtYWtlcyBzdXJlIHRoYXQgdGhlIG1vZHVsZXMgZG9uJ3QgY29udGFpbiBiYXNpYyBzeW50YXggZXJyb3JzLgotIyBJdCBhbHNvIG1ha2VzIHN1cmUgdGhhdCBtb2R1bGVzIGRvbid0IGZhaWwgd2l0aCBhbiBlcnJvciBpZiBzb21ldGhpbmcKLSMgd2Fzbid0IGZvdW5kIGJ1dCBSRVFVSVJFRCB3YXMgbm90IGdpdmVuLgotIwotIyBJIGd1ZXNzIG1vcmUgdGhpbmdzIGNvdWxkIGJlIGFkZGVkLCBsaWtlIGNoZWNraW5nIHdoZXRoZXIgdmFyaWFibGVzIGFyZQotIyBkZWZpbmVkIGFmdGVyIHJ1bm5pbmcgdGhlIG1vZHVsZXMgKGUuZy4gRk9PX0ZPVU5EIGV0Yy4pLgotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KSAjIG5ldyBlbm91Z2ggZm9yIENNUDAwMTcKLXByb2plY3QoRmluZE1vZHVsZXNFeGVjdXRlQWxsKQotCi1maWxlKEdMT0IgYWxsX21vZHVsZXMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi8uLi9Nb2R1bGVzL0ZpbmQqY21ha2UiKQotCi1mb3JlYWNoKG1vZHVsZSAke2FsbF9tb2R1bGVzfSkKLSAgbWVzc2FnZShTVEFUVVMgIm1vZHVsZTogJHttb2R1bGV9IikKLSAgaW5jbHVkZSgiJHttb2R1bGV9IikKLQotICAjIGdldCB0aGUgImJhc2VuYW1lIiBvZiB0aGUgcGFja2FnZSwgc28gdGhlIGV4aXN0ZW5jZSBvZiB2YXJpYWJsZXMgbGlrZQotICAjIEZPT19GT1VORCBjb3VsZCBiZSB0ZXN0ZWQgbGF0ZXIgb24sIEFsZXgKLSAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4rRmluZChbXlxcLl0rKVxcLmNtYWtlIiAiXFwxIiBwYWNrYWdlTmFtZSAiJHttb2R1bGV9IikKLSAgc3RyaW5nKFRPVVBQRVIgIiR7cGFja2FnZU5hbWV9IiBwYWNrYWdlTmFtZVVwcGVyKQotCi0jIGRpc2FibGVkIGZvciBub3csIHNpbmNlIHRvbyBtYW55IG1vZHVsZXMgYnJlYWs6Ci0jICBpZihOT1QgREVGSU5FRCAke3BhY2thZ2VOYW1lVXBwZXJ9X0ZPVU5EKQotIyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIiR7cGFja2FnZU5hbWVVcHBlcn1fRk9VTkQgbm90IGRlZmluZWQgISIpCi0jICBlbmRpZigpCi0KLWVuZGZvcmVhY2goKQotCi1hZGRfZXhlY3V0YWJsZShGaW5kTW9kdWxlc0V4ZWN1dGVBbGwgbWFpbi5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFBhY2thZ2VNb2RlTWFrZWZpbGVUZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFBhY2thZ2VNb2RlTWFrZWZpbGVUZXN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDIzODMyZGEuLjhhODdhOGMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRQYWNrYWdlTW9kZU1ha2VmaWxlVGVzdC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kUGFja2FnZU1vZGVNYWtlZmlsZVRlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTE5LDYgKzE5LDE0IEBACiAgICAgIyBjb25maWd1cmUgYSBGaW5kRm9vLmNtYWtlIHNvIGl0IGtub3dzIHdoZXJlIHRoZSBsaWJyYXJ5IGNhbiBiZSBmb3VuZAogICAgIGNvbmZpZ3VyZV9maWxlKEZpbmRGb28uY21ha2UuaW4gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0ZpbmRGb28uY21ha2UgQE9OTFkpCiAKKyAgICAjIE5lZWQgdGhlIC1pc3lzcm9vdCBmbGFnIG9uIHJlY2VudGlzaCBtYWNPUyBhZnRlciBjb21tYW5kIGxpbmUgdG9vbHMKKyAgICAjIG5vIGxvbmdlciBwcm92aWRlIGhlYWRlcnMgaW4gL3Vzci9pbmNsdWRlCisgICAgaWYoQVBQTEUgQU5EIENNQUtFX09TWF9TWVNST09UKQorICAgICAgc2V0KF9fRVhUUkFfT1NYX1NZU1JPT1RfRkxBR1MgIi1pc3lzcm9vdCAke0NNQUtFX09TWF9TWVNST09UfSIpCisgICAgZWxzZSgpCisgICAgICBzZXQoX19FWFRSQV9PU1hfU1lTUk9PVF9GTEFHUyAiIikKKyAgICBlbmRpZigpCisKICAgICAjIG5vdyBzZXQgdXAgdGhlIHRlc3Q6CiAgICAgZmlsZShHRU5FUkFURSBPVVRQVVQgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jbWFrZUV4ZWN1dGFibGUubWsiCiAgICAgICBDT05URU5UICJDTUFLRSA9IFwiJDxUQVJHRVRfRklMRTpjbWFrZT5cIlxuIgpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFBhY2thZ2VNb2RlTWFrZWZpbGVUZXN0L01ha2VmaWxlLmluIGIvVGVzdHMvRmluZFBhY2thZ2VNb2RlTWFrZWZpbGVUZXN0L01ha2VmaWxlLmluCmluZGV4IDhlN2ZmNzIuLmFmOWZhOTYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRQYWNrYWdlTW9kZU1ha2VmaWxlVGVzdC9NYWtlZmlsZS5pbgorKysgYi9UZXN0cy9GaW5kUGFja2FnZU1vZGVNYWtlZmlsZVRlc3QvTWFrZWZpbGUuaW4KQEAgLTUsNiArNSw3IEBACiBDTUFLRV9DWFhfQ09NUElMRVIgPSAiQENNQUtFX0NYWF9DT01QSUxFUkAiCiBDTUFLRV9DWFhfQ09NUElMRVJfSUQgPSAiQENNQUtFX0NYWF9DT01QSUxFUl9JREAiCiBDTUFLRV9DWFhfRkxBR1MgPSBAQ01BS0VfQ1hYX0ZMQUdTQAorX19FWFRSQV9PU1hfU1lTUk9PVF9GTEFHUyA9IEBfX0VYVFJBX09TWF9TWVNST09UX0ZMQUdTQAogCiBDTUFLRV9GT08gPSAkKENNQUtFKSAtLWZpbmQtcGFja2FnZSAtRENNQUtFX01PRFVMRV9QQVRIPSQoQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSKSAtRE5BTUU9Rm9vIC1ETEFOR1VBR0U9Q1hYIC1EQ09NUElMRVJfSUQ9JChDTUFLRV9DWFhfQ09NUElMRVJfSUQpCiAKQEAgLTE1LDcgKzE2LDcgQEAKIG1haW4ubzogY2xlYW4gbWFpbi5jcHAKIAlAJChDTUFLRV9GT08pIC1ETU9ERT1DT01QSUxFID4kKHRtcCkKIAlAZm9vPSJgY2F0ICQodG1wKWAiOyBcCi0JIHByaW50ZiAnIiVzIiAlcyAlcyAtYyBtYWluLmNwcFxuJyAkKENNQUtFX0NYWF9DT01QSUxFUikgIiQoQ01BS0VfQ1hYX0ZMQUdTKSIgIiQkZm9vIiA+JCh0bXApCisJIHByaW50ZiAnIiVzIiAlcyAlcyAlcyAtYyBtYWluLmNwcFxuJyAkKENNQUtFX0NYWF9DT01QSUxFUikgIiQoQ01BS0VfQ1hYX0ZMQUdTKSIgIiQoX19FWFRSQV9PU1hfU1lTUk9PVF9GTEFHUykiICIkJGZvbyIgPiQodG1wKQogCUBjYXQgJCh0bXApCiAJQHNoICQodG1wKQogCUBybSAtZiAkKHRtcCkKQEAgLTIzLDcgKzI0LDcgQEAKIHBuZ3Rlc3Q6IG1haW4ubwogCUAkKENNQUtFX0ZPTykgLURNT0RFPUxJTksgPiQodG1wKQogCUBmb289ImBjYXQgJCh0bXApYCI7IFwKLQkgcHJpbnRmICciJXMiICVzICVzIC1vIHBuZ3Rlc3QgbWFpbi5vICVzXG4nICQoQ01BS0VfQ1hYX0NPTVBJTEVSKSAiJChDTUFLRV9DWFhfRkxBR1MpIiAiJChMREZMQUdTKSIgIiQkZm9vIiA+JCh0bXApCisJIHByaW50ZiAnIiVzIiAlcyAlcyAlcyAtbyBwbmd0ZXN0IG1haW4ubyAlc1xuJyAkKENNQUtFX0NYWF9DT01QSUxFUikgIiQoQ01BS0VfQ1hYX0ZMQUdTKSIgIiQoX19FWFRSQV9PU1hfU1lTUk9PVF9GTEFHUykiICIkKExERkxBR1MpIiAiJCRmb28iID4kKHRtcCkKIAlAY2F0ICQodG1wKQogCUBzaCAkKHRtcCkKIAlAcm0gLWYgJCh0bXApCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL0FydGlmYWN0c0ludGVyYWN0aXZlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9BcnRpZmFjdHNJbnRlcmFjdGl2ZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjRiZTkyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9BcnRpZmFjdHNJbnRlcmFjdGl2ZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDI0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorCitwcm9qZWN0KFRlc3RBcnRpZmFjdHNJbnRlcmFjdGl2ZSBMQU5HVUFHRVMgQykKKworc2V0IChjb21wb25lbnRzIEludGVycHJldGVyIERldmVsb3BtZW50KQoraWYgKENNYWtlX1RFU1RfRmluZFB5dGhvbl9OdW1QeSkKKyAgbGlzdCAoQVBQRU5EIGNvbXBvbmVudHMgTnVtUHkpCitlbmRpZigpCisKK2ZpbmRfcGFja2FnZShQeXRob24zIFJFUVVJUkVEIENPTVBPTkVOVFMgJHtjb21wb25lbnRzfSkKKworaWYgKFB5dGhvbjNfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFKQorICBpZiAoTk9UIERFRklORUQgQ0FDSEV7UHl0aG9uM19FWEVDVVRBQkxFfQorICAgICAgT1IgTk9UIERFRklORUQgQ0FDSEV7UHl0aG9uM19MSUJSQVJZfSBPUiBOT1QgREVGSU5FRCBDQUNIRXtQeXRob24zX0lOQ0xVREVfRElSfQorICAgICAgT1IgKENNYWtlX1RFU1RfRmluZFB5dGhvbl9OdW1QeSBBTkQgTk9UIERFRklORUQgQ0FDSEV7UHl0aG9uM19OdW1QeV9JTkNMVURFX0RJUn0pKQorICAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24zX0FSVElGQUNUU19JTlRFUkFDVElWRT1PTiBGYWlsZWQuIikKKyAgZW5kaWYoKQorZWxzZSgpCisgIGlmIChERUZJTkVEIENBQ0hFe1B5dGhvbjNfRVhFQ1VUQUJMRX0KKyAgICAgIE9SIERFRklORUQgQ0FDSEV7UHl0aG9uM19MSUJSQVJZfSBPUiBERUZJTkVEIENBQ0hFe1B5dGhvbjNfSU5DTFVERV9ESVJ9CisgICAgICBPUiAoQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5IEFORCBERUZJTkVEIENBQ0hFe1B5dGhvbjNfTnVtUHlfSU5DTFVERV9ESVJ9KSkKKyAgICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uM19BUlRJRkFDVFNfSU5URVJBQ1RJVkU9T0ZGIEZhaWxlZC4iKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9DTWFrZUxpc3RzLnR4dAppbmRleCA4NjhjZmUwLi5mZGZhMzZlIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kUHl0aG9uL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vQ01ha2VMaXN0cy50eHQKQEAgLTIwLDYgKzIwLDE3IEBACiAgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CiAgICAgKQogCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeXRob24yLkRldmVsb3BtZW50Lk1vZHVsZSBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMk1vZHVsZSIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjJNb2R1bGUiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5dGhvbjJNb2R1bGUKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfQorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKwogICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHl0aG9uMkZhaWwgQ09NTUFORAogICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgogICAgIC0tYnVpbGQtYW5kLXRlc3QKQEAgLTU0LDYgKzY1LDE3IEBACiAgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CiAgICAgKQogCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeXRob24zLkRldmVsb3BtZW50Lk1vZHVsZSBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uM01vZHVsZSIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjNNb2R1bGUiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5dGhvbjNNb2R1bGUKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfQorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKwogICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHl0aG9uM0ZhaWwgQ09NTUFORAogICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgogICAgIC0tYnVpbGQtYW5kLXRlc3QKQEAgLTY3LDE0ICs4OSwxNTcgQEAKICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoRmluZFB5dGhvbi5QeXRob24zRmFpbCBQUk9QRVJUSUVTCiAgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIkNvdWxkIE5PVCBmaW5kIFB5dGhvbjMgXFwobWlzc2luZzogZm9vYmFyXFwpIikKIAotICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHl0aG9uIENPTU1BTkQKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbi5MT0NBVElPTiBDT01NQU5ECiAgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CiAgICAgLS1idWlsZC1hbmQtdGVzdAogICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uIgotICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uLkxPQ0FUSU9OIgogICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CiAgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RQeXRob24KLSAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfQorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeXRob24uVkVSU0lPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5dGhvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbi5WMi5MT0NBVElPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uLlYyLkxPQ0FUSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RQeXRob24KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0yIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeXRob24uVjIuVkVSU0lPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uLlYyLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5dGhvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTIgLURQeXRob25fRklORF9TVFJBVEVHWT1WRVJTSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHl0aG9uLlYzLkxPQ0FUSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeXRob24iCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeXRob24uVjMuTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5dGhvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTMgLURQeXRob25fRklORF9TVFJBVEVHWT1MT0NBVElPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbi5WMy5WRVJTSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeXRob24iCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeXRob24uVjMuVkVSU0lPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHl0aG9uCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fUkVRVUVTVEVEX1ZFUlNJT049MyAtRFB5dGhvbl9GSU5EX1NUUkFURUdZPVZFUlNJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbjIuRXhhY3RWZXJzaW9uLkxPQ0FUSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9FeGFjdFZlcnNpb24iCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeXRob24yLkV4YWN0VmVyc2lvbi5MT0NBVElPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0RXhhY3RWZXJzaW9uCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fTUFKT1JfVkVSU0lPTj0yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURQeXRob25fUkVRVUVTVEVEX1ZFUlNJT049Mi4xLjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRFB5dGhvbjJfRklORF9TVFJBVEVHWT1MT0NBVElPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbjIuRXhhY3RWZXJzaW9uLlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0V4YWN0VmVyc2lvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjIuRXhhY3RWZXJzaW9uLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEV4YWN0VmVyc2lvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX01BSk9SX1ZFUlNJT049MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTIuMS4yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURQeXRob24yX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbjMuRXhhY3RWZXJzaW9uLkxPQ0FUSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9FeGFjdFZlcnNpb24iCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeXRob24zLkV4YWN0VmVyc2lvbi5MT0NBVElPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0RXhhY3RWZXJzaW9uCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fTUFKT1JfVkVSU0lPTj0zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURQeXRob25fUkVRVUVTVEVEX1ZFUlNJT049My4xLjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRFB5dGhvbjNfRklORF9TVFJBVEVHWT1MT0NBVElPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbjMuRXhhY3RWZXJzaW9uLlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0V4YWN0VmVyc2lvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjMuRXhhY3RWZXJzaW9uLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEV4YWN0VmVyc2lvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX01BSk9SX1ZFUlNJT049MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTMuMS4yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURQeXRob24zX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbi5WMi5FeGFjdFZlcnNpb24uTE9DQVRJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0V4YWN0VmVyc2lvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbi5WMi5FeGFjdFZlcnNpb24uTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEV4YWN0VmVyc2lvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTIuMS4yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURQeXRob25fRklORF9TVFJBVEVHWT1MT0NBVElPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbi5WMi5FeGFjdFZlcnNpb24uVkVSU0lPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vRXhhY3RWZXJzaW9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uLlYyLkV4YWN0VmVyc2lvbi5WRVJTSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RFeGFjdFZlcnNpb24KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0yLjEuMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbi5WMy5FeGFjdFZlcnNpb24uTE9DQVRJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0V4YWN0VmVyc2lvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbi5WMy5FeGFjdFZlcnNpb24uTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEV4YWN0VmVyc2lvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTMuMS4yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURQeXRob25fRklORF9TVFJBVEVHWT1MT0NBVElPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5dGhvbi5WMy5FeGFjdFZlcnNpb24uVkVSU0lPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vRXhhY3RWZXJzaW9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uLlYzLkV4YWN0VmVyc2lvbi5WRVJTSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RFeGFjdFZlcnNpb24KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0zLjEuMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgogICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgogICAgICkKIApAQCAtMTM0LDYgKzI5OSw3NyBAQAogICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgogICAgICkKIAorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uQXJ0aWZhY3RzSW50ZXJhY3RpdmUuT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0FydGlmYWN0c0ludGVyYWN0aXZlIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQXJ0aWZhY3RzSW50ZXJhY3RpdmUuT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEFydGlmYWN0c1Njb3BlCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gIi1EYnVpbGRfZ2VuZXJhdG9yX2FyZ3M9JHtidWlsZF9nZW5lcmF0b3JfYXJnc30iCisgICAgIi1EQ01ha2VfU09VUkNFX0RJUj0ke0NNYWtlX1NPVVJDRV9ESVJ9IgorICAgICItRENNYWtlX0JJTkFSWV9ESVI9JHtDTWFrZV9CSU5BUllfRElSfSIKKyAgICAiLURDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHk9JHtDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHl9IgorICAgICItRFB5dGhvbjNfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFPU9OIgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkFydGlmYWN0c0ludGVyYWN0aXZlLk9GRiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vQXJ0aWZhY3RzSW50ZXJhY3RpdmUiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9BcnRpZmFjdHNJbnRlcmFjdGl2ZS5PRkYiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEFydGlmYWN0c1Njb3BlCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gIi1EYnVpbGRfZ2VuZXJhdG9yX2FyZ3M9JHtidWlsZF9nZW5lcmF0b3JfYXJnc30iCisgICAgIi1EQ01ha2VfU09VUkNFX0RJUj0ke0NNYWtlX1NPVVJDRV9ESVJ9IgorICAgICItRENNYWtlX0JJTkFSWV9ESVI9JHtDTWFrZV9CSU5BUllfRElSfSIKKyAgICAiLURDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHk9JHtDTWFrZV9URVNUX0ZpbmRQeXRob25fTnVtUHl9IgorICAgICItRFB5dGhvbjNfQVJUSUZBQ1RTX0lOVEVSQUNUSVZFPU9GRiIKKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkN1c3RvbUZhaWx1cmVNZXNzYWdlIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9DdXN0b21GYWlsdXJlTWVzc2FnZSIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RDdXN0b21GYWlsdXJlTWVzc2FnZQorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9ICItRGJ1aWxkX2dlbmVyYXRvcl9hcmdzPSR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9IgorICAgICItRENNYWtlX1NPVVJDRV9ESVI9JHtDTWFrZV9TT1VSQ0VfRElSfSIKKyAgICAiLURDTWFrZV9CSU5BUllfRElSPSR7Q01ha2VfQklOQVJZX0RJUn0iCisgICAgIi1EQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5PSR7Q01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5fSIKKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisKKyAgaWYgKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIkxpbnV4fERhcndpbiIpCisgICAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkludGVycHJldGVyLlNPQUJJIENPTU1BTkQKKyAgICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9TT0FCSSIKKyAgICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vU09BQkkuSW50ZXJwcmV0ZXIiCisgICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RTT0FCSQorICAgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gIi1EYnVpbGRfZ2VuZXJhdG9yX2FyZ3M9JHtidWlsZF9nZW5lcmF0b3JfYXJnc30iCisgICAgICAiLURDTWFrZV9TT1VSQ0VfRElSPSR7Q01ha2VfU09VUkNFX0RJUn0iCisgICAgICAiLURDTWFrZV9CSU5BUllfRElSPSR7Q01ha2VfQklOQVJZX0RJUn0iCisgICAgICAiLURDTWFrZV9URVNUX0ZpbmRQeXRob25fQ09NUE9ORU5UPUludGVycHJldGVyIgorICAgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgICApCisgICAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkRldmVsb3BtZW50LlNPQUJJIENPTU1BTkQKKyAgICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9TT0FCSSIKKyAgICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vU09BQkkuRGV2ZWxvcG1lbnQiCisgICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RTT0FCSQorICAgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gIi1EYnVpbGRfZ2VuZXJhdG9yX2FyZ3M9JHtidWlsZF9nZW5lcmF0b3JfYXJnc30iCisgICAgICAiLURDTWFrZV9TT1VSQ0VfRElSPSR7Q01ha2VfU09VUkNFX0RJUn0iCisgICAgICAiLURDTWFrZV9CSU5BUllfRElSPSR7Q01ha2VfQklOQVJZX0RJUn0iCisgICAgICAiLURDTWFrZV9URVNUX0ZpbmRQeXRob25fQ09NUE9ORU5UPURldmVsb3BtZW50IgorICAgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgICApCisgIGVuZGlmKCkKIGVuZGlmKCkKIAogaWYoQ01ha2VfVEVTVF9GaW5kUHl0aG9uX051bVB5KQpAQCAtMTU1LDYgKzM5MSwyMTAgQEAKICAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQogICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0TnVtUHlPbmx5CiAgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KLSAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KICAgKQotIGVuZGlmKCkKK2VuZGlmKCkKKworaWYoQ01ha2VfVEVTVF9GaW5kUHl0aG9uX0NvbmRhKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uVmlydHVhbEVudkNvbmRhIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52Q29uZGEiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52Q29uZGEiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFZpcnR1YWxFbnZDb25kYQorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorZW5kaWYoKQorCitpZiAoQ01ha2VfVEVTVF9GaW5kUHl0aG9uIEFORCBDTWFrZV9URVNUX0ZpbmRQeXRob25fSXJvblB5dGhvbikKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkltcGxlbWVudGF0aW9uLkNQeXRob24gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0ltcGxlbWVudGF0aW9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vSW1wbGVtZW50YXRpb24uQ1B5dGhvbiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0SW1wbGVtZW50YXRpb25DUHl0aG9uCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fUkVRVUVTVEVEX1ZFUlNJT049MiAtRFB5dGhvbl9SRVFVRVNURURfSU1QTEVNRU5UQVRJT05TPUNQeXRob24KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5JbXBsZW1lbnRhdGlvbi5Jcm9uUHl0aG9uIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9JbXBsZW1lbnRhdGlvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0ltcGxlbWVudGF0aW9uLklyb25QeXRob24iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEltcGxlbWVudGF0aW9uSXJvblB5dGhvbgorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTIgLURQeXRob25fUkVRVUVTVEVEX0lNUExFTUVOVEFUSU9OPUlyb25QeXRob24KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCitlbmRpZigpCisKK2lmKENNYWtlX1RFU1RfRmluZFB5dGhvbl9Jcm9uUHl0aG9uKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uSXJvblB5dGhvbjIuTE9DQVRJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24yIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vSXJvblB5dGhvbjIuTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdElyb25QeXRob24yCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob24yX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5Jcm9uUHl0aG9uMi5WRVJTSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9Jcm9uUHl0aG9uMiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24yLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdElyb25QeXRob24yCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob24yX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKworICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uSXJvblB5dGhvbi5MT0NBVElPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vSXJvblB5dGhvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24uTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdElyb25QeXRob24KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9GSU5EX1NUUkFURUdZPUxPQ0FUSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uSXJvblB5dGhvbi5WRVJTSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9Jcm9uUHl0aG9uIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vSXJvblB5dGhvbi5WRVJTSU9OIgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RJcm9uUHl0aG9uCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30gLURQeXRob25fRklORF9TVFJBVEVHWT1WRVJTSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uSXJvblB5dGhvbi5WMi5MT0NBVElPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vSXJvblB5dGhvbiIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24uVjIuTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdElyb25QeXRob24KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0yIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5Jcm9uUHl0aG9uLlYyLlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24iCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9Jcm9uUHl0aG9uLlYyLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdElyb25QeXRob24KKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0yIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKK2VuZGlmKCkKKworaWYoQ01ha2VfVEVTVF9GaW5kUHl0aG9uX1B5UHkpCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeVB5Mi5MT0NBVElPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeTIiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5Mi5MT0NBVElPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHlQeTIKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbjJfRklORF9TVFJBVEVHWT1MT0NBVElPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5UHkyLlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkyIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeTIuVkVSU0lPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHlQeTIKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbjJfRklORF9TVFJBVEVHWT1WRVJTSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeVB5My5MT0NBVElPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeTMiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5My5MT0NBVElPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHlQeTMKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbjNfRklORF9TVFJBVEVHWT1MT0NBVElPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5UHkzLlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkzIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeTMuVkVSU0lPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHlQeTMKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbjNfRklORF9TVFJBVEVHWT1WRVJTSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeVB5LkxPQ0FUSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5IgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeS5MT0NBVElPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHlQeQorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeVB5LlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5LlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9GSU5EX1NUUkFURUdZPVZFUlNJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeVB5LlYyLkxPQ0FUSU9OIENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5IgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeS5WMi5MT0NBVElPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHlQeQorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTIgLURQeXRob25fRklORF9TVFJBVEVHWT1MT0NBVElPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLlB5UHkuVjIuVkVSU0lPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeSIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkuVjIuVkVSU0lPTiIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UHlQeQorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9IC1EUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OPTIgLURQeXRob25fRklORF9TVFJBVEVHWT1WRVJTSU9OCisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24uUHlQeS5WMy5MT0NBVElPTiBDT01NQU5ECisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRQeXRob24vUHlQeSIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkuVjMuTE9DQVRJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0zIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9TE9DQVRJT04KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbi5QeVB5LlYzLlZFUlNJT04gQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkiCisgICAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9QeVB5LlYzLlZFUlNJT04iCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFB5UHkKKyAgICAtLWJ1aWxkLW9wdGlvbnMgJHtidWlsZF9vcHRpb25zfSAtRFB5dGhvbl9SRVFVRVNURURfVkVSU0lPTj0zIC1EUHl0aG9uX0ZJTkRfU1RSQVRFR1k9VkVSU0lPTgorICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDhlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNzkgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3Byb2plY3QoVGVzdEN1c3RvbUZhaWx1cmVNZXNzYWdlIExBTkdVQUdFUyBOT05FKQorCitpbmNsdWRlKENUZXN0KQorCithZGRfdGVzdChOQU1FIEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UuSW50ZXJwcmV0ZXIgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0NoZWNrIgorICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0ludGVycHJldGVyIgorICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAtLWJ1aWxkLXByb2plY3QgVGVzdEN1c3RvbUZhaWx1cmVNZXNzYWdlLkNoZWNrCisgIC0tYnVpbGQtb3B0aW9ucyAiLURDSEVDS19DT01QT05FTlRTPUludGVycHJldGVyIgorICAgICAgICAgICAgICAgICAgIi1EUHl0aG9uM19FWEVDVVRBQkxFPS9ub3QvZm91bmQvaW50ZXJwcmV0ZXIiCisgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICApCitzZXRfdGVzdHNfcHJvcGVydGllcyhGaW5kUHl0aG9uLkN1c3RvbUZhaWx1cmVNZXNzYWdlLkludGVycHJldGVyIFBST1BFUlRJRVMKKyAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlJlYXNvbiBnaXZlbiBieSBwYWNrYWdlOi4rSW50ZXJwcmV0ZXI6IENhbm5vdCBydW4gdGhlIGludGVycHJldGVyIikKKworYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkN1c3RvbUZhaWx1cmVNZXNzYWdlLkxpYnJhcnkgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0NoZWNrIgorICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0xpYnJhcnkiCisgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgIC0tYnVpbGQtcHJvamVjdCBUZXN0Q3VzdG9tRmFpbHVyZU1lc3NhZ2UuQ2hlY2sKKyAgLS1idWlsZC1vcHRpb25zICItRENIRUNLX0NPTVBPTkVOVFM9RGV2ZWxvcG1lbnQiCisgICAgICAgICAgICAgICAgICAiLURQeXRob24zX0xJQlJBUlk9L25vdC9mb3VuZC9saWJyYXJ5IgorICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoRmluZFB5dGhvbi5DdXN0b21GYWlsdXJlTWVzc2FnZS5MaWJyYXJ5IFBST1BFUlRJRVMKKyAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlJlYXNvbiBnaXZlbiBieSBwYWNrYWdlOi4rRGV2ZWxvcG1lbnQ6IENhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IikKKworYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkN1c3RvbUZhaWx1cmVNZXNzYWdlLkluY2x1ZGUgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0NoZWNrIgorICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0luY2x1ZGUiCisgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgIC0tYnVpbGQtcHJvamVjdCBUZXN0Q3VzdG9tRmFpbHVyZU1lc3NhZ2UuQ2hlY2sKKyAgLS1idWlsZC1vcHRpb25zICItRENIRUNLX0NPTVBPTkVOVFM9RGV2ZWxvcG1lbnQiCisgICAgICAgICAgICAgICAgICAiLURQeXRob24zX0lOQ0xVREVfRElSPS9ub3QvZm91bmQvaW5jbHVkZSIKKyAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICkKK3NldF90ZXN0c19wcm9wZXJ0aWVzKEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UuSW5jbHVkZSBQUk9QRVJUSUVTCisgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJSZWFzb24gZ2l2ZW4gYnkgcGFja2FnZTouK0RldmVsb3BtZW50OiBDYW5ub3QgZmluZCB0aGUgZGlyZWN0b3J5IikKKworYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkN1c3RvbUZhaWx1cmVNZXNzYWdlLk11bHRpcGxlIENPTU1BTkQKKyAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyAkPENPTkZJR1VSQVRJT04+CisgIC0tYnVpbGQtYW5kLXRlc3QKKyAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9DdXN0b21GYWlsdXJlTWVzc2FnZS9DaGVjayIKKyAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9DdXN0b21GYWlsdXJlTWVzc2FnZS9NdWx0aXBsZSIKKyAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgLS1idWlsZC1wcm9qZWN0IFRlc3RDdXN0b21GYWlsdXJlTWVzc2FnZS5DaGVjaworICAtLWJ1aWxkLW9wdGlvbnMgIi1EQ0hFQ0tfQ09NUE9ORU5UUz1JbnRlcnByZXRlcjtEZXZlbG9wbWVudCIKKyAgICAgICAgICAgICAgICAgICItRFB5dGhvbjNfRVhFQ1VUQUJMRT0vbm90L2ZvdW5kL2ludGVycHJldGVyIgorICAgICAgICAgICAgICAgICAgIi1EUHl0aG9uM19MSUJSQVJZPS9ub3QvZm91bmQvbGlicmFyeSIKKyAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICkKK3NldF90ZXN0c19wcm9wZXJ0aWVzKEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UuTXVsdGlwbGUgUFJPUEVSVElFUworICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiUmVhc29uIGdpdmVuIGJ5IHBhY2thZ2U6LitJbnRlcnByZXRlcjogQ2Fubm90IHJ1biB0aGUgaW50ZXJwcmV0ZXIuK0RldmVsb3BtZW50OiBDYW5ub3QgZmluZCB0aGUgbGlicmFyeSIpCisKKworaWYgKENNYWtlX1RFU1RfRmluZFB5dGhvbl9OdW1QeSkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uLkN1c3RvbUZhaWx1cmVNZXNzYWdlLk51bVB5IENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFB5dGhvbi9DdXN0b21GYWlsdXJlTWVzc2FnZS9DaGVjayIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL051bVB5IgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RDdXN0b21GYWlsdXJlTWVzc2FnZS5DaGVjaworICAgIC0tYnVpbGQtb3B0aW9ucyAiLURDSEVDS19DT01QT05FTlRTPUludGVycHJldGVyO0RldmVsb3BtZW50O051bVB5IgorICAgICAgICAgICAgICAgICAgICAiLURQeXRob24zX051bVB5X0lOQ0xVREVfRElSPS9ub3QvZm91bmQvbnVtcHkvaW5jbHVkZSIKKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIHNldF90ZXN0c19wcm9wZXJ0aWVzKEZpbmRQeXRob24uQ3VzdG9tRmFpbHVyZU1lc3NhZ2UuTnVtUHkgUFJPUEVSVElFUworICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJSZWFzb24gZ2l2ZW4gYnkgcGFja2FnZTouK051bVB5OiBDYW5ub3QgZmluZCB0aGUgZGlyZWN0b3J5IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vQ3VzdG9tRmFpbHVyZU1lc3NhZ2UvQ2hlY2svQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0NoZWNrL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDk2M2UKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL0N1c3RvbUZhaWx1cmVNZXNzYWdlL0NoZWNrL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworcHJvamVjdChUZXN0Q3VzdG9tRmFpbHVyZU1lc3NhZ2UuQ2hlY2sgTEFOR1VBR0VTIEMpCisKK2ZpbmRfcGFja2FnZSAoUHl0aG9uMyBSRVFVSVJFRCBDT01QT05FTlRTICR7Q0hFQ0tfQ09NUE9ORU5UU30pCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL0V4YWN0VmVyc2lvbi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vRXhhY3RWZXJzaW9uL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOWY3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL0V4YWN0VmVyc2lvbi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDU2IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorCitwcm9qZWN0KFRlc3RFeGFjdFZlcnNpb24gQykKKworZmluZF9wYWNrYWdlKFB5dGhvbiR7UHl0aG9uX01BSk9SX1ZFUlNJT059ICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSBDT01QT05FTlRTIEludGVycHJldGVyIERldmVsb3BtZW50KQoraWYgKE5PVCBQeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfV9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbiR7UHl0aG9uX01BSk9SX1ZFUlNJT059X0ludGVycHJldGVyX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IEludGVycHJldGVyIikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uJHtQeXRob25fTUFKT1JfVkVSU0lPTn1fRGV2ZWxvcG1lbnRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0gRGV2ZWxvcG1lbnQiKQorZW5kaWYoKQorCitpZihOT1QgVEFSR0VUIFB5dGhvbiR7UHl0aG9uX01BSk9SX1ZFUlNJT059OjpJbnRlcnByZXRlcikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfTo6SW50ZXJwcmV0ZXIgbm90IGZvdW5kIikKK2VuZGlmKCkKKworaWYoTk9UIFRBUkdFVCBQeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfTo6UHl0aG9uKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbiR7UHl0aG9uX01BSk9SX1ZFUlNJT059OjpQeXRob24gbm90IGZvdW5kIikKK2VuZGlmKCkKK2lmKE5PVCBUQVJHRVQgUHl0aG9uJHtQeXRob25fTUFKT1JfVkVSU0lPTn06Ok1vZHVsZSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfTo6TW9kdWxlIG5vdCBmb3VuZCIpCitlbmRpZigpCisKKworIyByZXNldCBhcnRpZmFjdHMgYW5kIHNlY29uZCBzZWFyY2ggd2l0aCBleGFjdCB2ZXJzaW9uIGFscmVhZHkgZm91bmRlZAordW5zZXQgKFB5dGhvbiR7UHl0aG9uX01BSk9SX1ZFUlNJT059X0VYRUNVVEFCTEUpCit1bnNldCAoX1B5dGhvbiR7UHl0aG9uX01BSk9SX1ZFUlNJT059X0VYRUNVVEFCTEUgQ0FDSEUpCisKK3Vuc2V0IChfUHl0aG9uJHtQeXRob25fTUFKT1JfVkVSU0lPTn1fTElCUkFSWV9SRUxFQVNFIENBQ0hFKQordW5zZXQgKF9QeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfV9JTkNMVURFX0RJUiBDQUNIRSkKKworc2V0IChQeXRob25fUkVRVUVTVEVEX1ZFUlNJT04gJHtQeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfV9WRVJTSU9OfSkKK2ZpbmRfcGFja2FnZShQeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfSAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0gRVhBQ1QgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBEZXZlbG9wbWVudCkKK2lmIChOT1QgUHl0aG9uJHtQeXRob25fTUFKT1JfVkVSU0lPTn1fRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0iKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfV9JbnRlcnByZXRlcl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSBJbnRlcnByZXRlciIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbiR7UHl0aG9uX01BSk9SX1ZFUlNJT059X0RldmVsb3BtZW50X0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IERldmVsb3BtZW50IikKK2VuZGlmKCkKKworaWYoTk9UIFRBUkdFVCBQeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfTo6SW50ZXJwcmV0ZXIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uJHtQeXRob25fTUFKT1JfVkVSU0lPTn06OkludGVycHJldGVyIG5vdCBmb3VuZCIpCitlbmRpZigpCisKK2lmKE5PVCBUQVJHRVQgUHl0aG9uJHtQeXRob25fTUFKT1JfVkVSU0lPTn06OlB5dGhvbikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24ke1B5dGhvbl9NQUpPUl9WRVJTSU9OfTo6UHl0aG9uIG5vdCBmb3VuZCIpCitlbmRpZigpCitpZihOT1QgVEFSR0VUIFB5dGhvbiR7UHl0aG9uX01BSk9SX1ZFUlNJT059OjpNb2R1bGUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uJHtQeXRob25fTUFKT1JfVkVSU0lPTn06Ok1vZHVsZSBub3QgZm91bmQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9JbXBsZW1lbnRhdGlvbi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vSW1wbGVtZW50YXRpb24vQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0ZmExZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vSW1wbGVtZW50YXRpb24vQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzNyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworcHJvamVjdChUZXN0SW1wbGVtZW50YXRpb24ke1B5dGhvbl9SRVFVRVNURURfSU1QTEVNRU5UQVRJT059IEMpCisKKworc2V0IChQeXRob24ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn1fRklORF9JTVBMRU1FTlRBVElPTlMgJHtQeXRob25fUkVRVUVTVEVEX0lNUExFTUVOVEFUSU9OfSkKKworZmluZF9wYWNrYWdlKFB5dGhvbiR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSBDT01QT05FTlRTIEludGVycHJldGVyKQoraWYgKE5PVCBQeXRob24ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn1fRk9VTkQgT1IgTk9UIFB5dGhvbiR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfV9JbnRlcnByZXRlcl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IikKK2VuZGlmKCkKKworaWYgKFB5dGhvbl9SRVFVRVNURURfSU1QTEVNRU5UQVRJT04gU1RSRVFVQUwgIklyb25QeXRob24iCisgICAgQU5EIE5PVCBQeXRob24ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn1fSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIklyb25QeXRob24iKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbiR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfV9JTlRFUlBSRVRFUl9JRH0pIikKK2VuZGlmKCkKK2lmIChQeXRob25fUkVRVUVTVEVEX0lNUExFTUVOVEFUSU9OIFNUUkVRVUFMICJDUHl0aG9uIgorICAgIEFORCBQeXRob24ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn1fSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIklyb25QeXRob24iKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbiR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfV9JTlRFUlBSRVRFUl9JRH0pIikKK2VuZGlmKCkKKworCitzZXQgKFB5dGhvbl9GSU5EX0lNUExFTUVOVEFUSU9OUyAke1B5dGhvbl9SRVFVRVNURURfSU1QTEVNRU5UQVRJT059KQorCitmaW5kX3BhY2thZ2UoUHl0aG9uICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSBSRVFVSVJFRCBDT01QT05FTlRTIEludGVycHJldGVyKQoraWYgKE5PVCBQeXRob25fRk9VTkQgT1IgTk9UIFB5dGhvbl9JbnRlcnByZXRlcl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSIpCitlbmRpZigpCisKK2lmIChQeXRob25fUkVRVUVTVEVEX0lNUExFTUVOVEFUSU9OIFNUUkVRVUFMICJJcm9uUHl0aG9uIgorICAgIEFORCBOT1QgUHl0aG9uX0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJJcm9uUHl0aG9uIikKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkVycm9uZW91cyBpbnRlcnByZXRlciBJRCAoJHtQeXRob25fSU5URVJQUkVURVJfSUR9KSIpCitlbmRpZigpCitpZiAoUHl0aG9uX1JFUVVFU1RFRF9JTVBMRU1FTlRBVElPTiBTVFJFUVVBTCAiQ1B5dGhvbiIKKyAgICBBTkQgUHl0aG9uX0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJJcm9uUHl0aG9uIikKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkVycm9uZW91cyBpbnRlcnByZXRlciBJRCAoJHtQeXRob25fSU5URVJQUkVURVJfSUR9KSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24vQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ5M2MyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vSXJvblB5dGhvbi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMxIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorCitwcm9qZWN0KFRlc3RJcm9uUHl0aG9uIEMpCisKK3NldCAoUHl0aG9uX0ZJTkRfSU1QTEVNRU5UQVRJT05TIElyb25QeXRob24pCisKK2ZpbmRfcGFja2FnZShQeXRob24gJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgQ29tcGlsZXIpCitpZiAoTk9UIFB5dGhvbl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uICR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfSIpCitlbmRpZigpCisKK2lmIChOT1QgUHl0aG9uX0ludGVycHJldGVyX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gSW50ZXJwcmV0ZXIiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob25fSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIklyb25QeXRob24iKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbl9JTlRFUlBSRVRFUl9JRH0pIikKK2VuZGlmKCkKKworaWYgKE5PVCBQeXRob25fQ29tcGlsZXJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBDb21waWxlciIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbl9DT01QSUxFUl9JRCBTVFJFUVVBTCAiSXJvblB5dGhvbiIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJFcnJvbmVvdXMgY29tcGlsZXIgSUQgKCR7UHl0aG9uX0NPTVBJTEVSX0lEfSkiKQorZW5kaWYoKQorCitpZihOT1QgVEFSR0VUIFB5dGhvbjo6SW50ZXJwcmV0ZXIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uOjpJbnRlcnByZXRlciBub3QgZm91bmQiKQorZW5kaWYoKQoraWYoTk9UIFRBUkdFVCBQeXRob246OkNvbXBpbGVyKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjo6SW50ZXJwcmV0ZXIgbm90IGZvdW5kIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vSXJvblB5dGhvbjIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24yL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYjc5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL0lyb25QeXRob24yL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMzEgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3Byb2plY3QoVGVzdElyb25QeXRob24yIEMpCisKK3NldCAoUHl0aG9uMl9GSU5EX0lNUExFTUVOVEFUSU9OUyAiSXJvblB5dGhvbiIpCisKK2ZpbmRfcGFja2FnZShQeXRob24yIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgQ29tcGlsZXIpCitpZiAoTk9UIFB5dGhvbjJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAyIikKK2VuZGlmKCkKKworaWYgKE5PVCBQeXRob24yX0ludGVycHJldGVyX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMiBJbnRlcnByZXRlciIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjJfSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIklyb25QeXRob24iKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbjJfSU5URVJQUkVURVJfSUR9KSIpCitlbmRpZigpCisKK2lmIChOT1QgUHl0aG9uMl9Db21waWxlcl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIDIgQ29tcGlsZXIiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24yX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJJcm9uUHl0aG9uIikKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkVycm9uZW91cyBjb21waWxlciBJRCAoJHtQeXRob24yX0NPTVBJTEVSX0lEfSkiKQorZW5kaWYoKQorCitpZihOT1QgVEFSR0VUIFB5dGhvbjI6OkludGVycHJldGVyKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6OkludGVycHJldGVyIG5vdCBmb3VuZCIpCitlbmRpZigpCitpZihOT1QgVEFSR0VUIFB5dGhvbjI6OkNvbXBpbGVyKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6OkNvbXBpbGVyIG5vdCBmb3VuZCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1B5UHkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5UHkvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhZGU4YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vUHlQeS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDM3IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorCitwcm9qZWN0KFRlc3RQeVB5IEMpCisKK3NldCAoUHl0aG9uX0ZJTkRfSU1QTEVNRU5UQVRJT05TIFB5UHkpCisKK2ZpbmRfcGFja2FnZShQeXRob24gJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQpCitpZiAoTk9UIFB5dGhvbl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IikKK2VuZGlmKCkKKworaWYgKE5PVCBQeXRob25fSW50ZXJwcmV0ZXJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IEludGVycHJldGVyIikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uX0lOVEVSUFJFVEVSX0lEIFNUUkVRVUFMICJQeVB5IikKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkVycm9uZW91cyBpbnRlcnByZXRlciBJRCAoJHtQeXRob25fSU5URVJQUkVURVJfSUR9KSIpCitlbmRpZigpCisKK2lmIChOT1QgUHl0aG9uX0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IERldmVsb3BtZW50Lk1vZHVsZSIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbl9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059IERldmVsb3BtZW50LkVtYmVkIikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uX0RldmVsb3BtZW50X0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gUHlQeSAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0gRGV2ZWxvcG1lbnQiKQorZW5kaWYoKQorCitpZihOT1QgVEFSR0VUIFB5dGhvbjo6SW50ZXJwcmV0ZXIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uOjpJbnRlcnByZXRlciBub3QgZm91bmQiKQorZW5kaWYoKQoraWYoTk9UIFRBUkdFVCBQeXRob246Ok1vZHVsZSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob246Ok1vZHVsZSBub3QgZm91bmQiKQorZW5kaWYoKQoraWYoTk9UIFRBUkdFVCBQeXRob246OlB5dGhvbikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob246OlB5dGhvbiBub3QgZm91bmQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9QeVB5Mi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vUHlQeTIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwZGRjOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vUHlQeTIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzNyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworcHJvamVjdChUZXN0UHlQeTIgQykKKworc2V0IChQeXRob24yX0ZJTkRfSU1QTEVNRU5UQVRJT05TICJQeVB5IikKKworZmluZF9wYWNrYWdlKFB5dGhvbjIgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBEZXZlbG9wbWVudCkKK2lmIChOT1QgUHl0aG9uMl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgMiIpCitlbmRpZigpCisKK2lmIChOT1QgUHl0aG9uMl9JbnRlcnByZXRlcl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgMiBJbnRlcnByZXRlciIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjJfSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIlB5UHkiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbjJfSU5URVJQUkVURVJfSUR9KSIpCitlbmRpZigpCisKK2lmIChOT1QgUHl0aG9uMl9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDIgRGV2ZWxvcG1lbnQuTW9kdWxlIikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uMl9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgMiBEZXZlbG9wbWVudC5FbWJlZCIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjJfRGV2ZWxvcG1lbnRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDIgRGV2ZWxvcG1lbnQiKQorZW5kaWYoKQorCitpZihOT1QgVEFSR0VUIFB5dGhvbjI6OkludGVycHJldGVyKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6OkludGVycHJldGVyIG5vdCBmb3VuZCIpCitlbmRpZigpCitpZihOT1QgVEFSR0VUIFB5dGhvbjI6Ok1vZHVsZSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpNb2R1bGUgbm90IGZvdW5kIikKK2VuZGlmKCkKK2lmKE5PVCBUQVJHRVQgUHl0aG9uMjo6UHl0aG9uKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6OlB5dGhvbiBub3QgZm91bmQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9QeVB5My9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vUHlQeTMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2MmQ1NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vUHlQeTMvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzNyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworcHJvamVjdChUZXN0UHlQeTMgQykKKworc2V0IChQeXRob24zX0ZJTkRfSU1QTEVNRU5UQVRJT05TICJQeVB5IikKKworZmluZF9wYWNrYWdlKFB5dGhvbjMgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBEZXZlbG9wbWVudCkKK2lmIChOT1QgUHl0aG9uM19GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgMyIpCitlbmRpZigpCisKK2lmIChOT1QgUHl0aG9uM19JbnRlcnByZXRlcl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgMyBJbnRlcnByZXRlciIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjNfSU5URVJQUkVURVJfSUQgU1RSRVFVQUwgIlB5UHkiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRXJyb25lb3VzIGludGVycHJldGVyIElEICgke1B5dGhvbjNfSU5URVJQUkVURVJfSUR9KSIpCitlbmRpZigpCisKK2lmIChOT1QgUHl0aG9uM19EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDMgRGV2ZWxvcG1lbnQuTW9kdWxlIikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uM19EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIFB5UHkgMyBEZXZlbG9wbWVudC5FbWJlZCIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjNfRGV2ZWxvcG1lbnRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiBQeVB5IDMgRGV2ZWxvcG1lbnQiKQorZW5kaWYoKQorCitpZihOT1QgVEFSR0VUIFB5dGhvbjM6OkludGVycHJldGVyKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjM6OkludGVycHJldGVyIG5vdCBmb3VuZCIpCitlbmRpZigpCitpZihOT1QgVEFSR0VUIFB5dGhvbjM6Ok1vZHVsZSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24zOjpNb2R1bGUgbm90IGZvdW5kIikKK2VuZGlmKCkKK2lmKE5PVCBUQVJHRVQgUHl0aG9uMzo6UHl0aG9uKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjM6OlB5dGhvbiBub3QgZm91bmQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbi9DTWFrZUxpc3RzLnR4dAppbmRleCA2MmM4MDVlLi5lODgyOGEyIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbi9DTWFrZUxpc3RzLnR4dApAQCAtNCw5ICs0LDE1IEBACiAKIGluY2x1ZGUoQ1Rlc3QpCiAKLWZpbmRfcGFja2FnZShQeXRob24gMyBSRVFVSVJFRCBDT01QT05FTlRTIEludGVycHJldGVyIERldmVsb3BtZW50KQorZmluZF9wYWNrYWdlKFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0gUkVRVUlSRUQgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBEZXZlbG9wbWVudCkKIGlmIChOT1QgUHl0aG9uX0ZPVU5EKQotICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMyIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0iKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob25fRGV2ZWxvcG1lbnQuTW9kdWxlX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gJHtQeXRob25fUkVRVUVTVEVEX1ZFUlNJT059LCBDT01QT05FTlQgJ0RldmVsb3BtZW50Lk1vZHVsZSciKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob25fRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0sIENPTVBPRU5FTlQgJ0RldmVsb3BtZW50LkVtYmVkJyIpCiBlbmRpZigpCiAKIGlmKE5PVCBUQVJHRVQgUHl0aG9uOjpJbnRlcnByZXRlcikKQEAgLTIwLDEzICsyNiwxNSBAQAogICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjo6TW9kdWxlIG5vdCBmb3VuZCIpCiBlbmRpZigpCiAKLVB5dGhvbl9hZGRfbGlicmFyeSAoc3BhbTMgTU9EVUxFIC4uL3NwYW0uYykKLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zIChzcGFtMyBQUklWQVRFIFBZVEhPTjMpCitpZiAoUHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OKQorICBQeXRob25fYWRkX2xpYnJhcnkgKHNwYW0ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0gTU9EVUxFIC4uL3NwYW0uYykKKyAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMgKHNwYW0ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0gUFJJVkFURSBQWVRIT04ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0pCiAKLWFkZF90ZXN0IChOQU1FIHB5dGhvbl9zcGFtMwotICAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAiUFlUSE9OUEFUSD0kPFRBUkdFVF9GSUxFX0RJUjpzcGFtMz4iCi0gICAgICAgICAgIiR7UHl0aG9uX0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHNwYW0zOyBzcGFtMy5zeXN0ZW0oXCJjZFwiKSIpCi0KLWFkZF90ZXN0KE5BTUUgZmluZHB5dGhvbl9zY3JpcHQKLSAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1EUFlUSE9OX1BBQ0tBR0VfTkFNRT1QeXRob24KLSAgICAgICAgIC1QICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9Ly4uL0ZpbmRQeXRob25TY3JpcHQuY21ha2UiKQorICBhZGRfdGVzdCAoTkFNRSBweXRob25fc3BhbSR7UHl0aG9uX1JFUVVFU1RFRF9WRVJTSU9OfQorICAgICAgICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52ICJQWVRIT05QQVRIPSQ8VEFSR0VUX0ZJTEVfRElSOnNwYW0ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0+IgorICAgICAgICAgICAgIiR7UHl0aG9uX0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHNwYW0ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn07IHNwYW0ke1B5dGhvbl9SRVFVRVNURURfVkVSU0lPTn0uc3lzdGVtKFwiY2RcIikiKQorZWxzZSgpCisgIGFkZF90ZXN0KE5BTUUgZmluZHB5dGhvbl9zY3JpcHQKKyAgICAgICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLURQWVRIT05fUEFDS0FHRV9OQU1FPVB5dGhvbgorICAgICAgICAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS8uLi9GaW5kUHl0aG9uU2NyaXB0LmNtYWtlIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMi9DTWFrZUxpc3RzLnR4dAppbmRleCBjZjc3Y2EyLi42MDlkODBmIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjIvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24yL0NNYWtlTGlzdHMudHh0CkBAIC0xMyw2ICsxMywxNSBAQAogaWYgKE5PVCBQeXRob24yX0ZPVU5EKQogICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMiIpCiBlbmRpZigpCitpZiAoTk9UIFB5dGhvbjJfRGV2ZWxvcG1lbnRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAyICdEZXZlbG9wbWVudCcgY29tcG9uZW50IikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uMl9EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAyICdEZXZlbG9wbWVudC5Nb2R1bGUnIGNvbXBvbmVudCIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjJfRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAyICdEZXZlbG9wbWVudC5FbWJlZCcgY29tcG9uZW50IikKK2VuZGlmKCkKIAogaWYoTk9UIFRBUkdFVCBQeXRob24yOjpJbnRlcnByZXRlcikKICAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpJbnRlcnByZXRlciBub3QgZm91bmQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24yRW1iZWRkZWQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjJFbWJlZGRlZC9DTWFrZUxpc3RzLnR4dAppbmRleCAwMTE1ZGVhLi4xY2Y2MDM0IDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjJFbWJlZGRlZC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjJFbWJlZGRlZC9DTWFrZUxpc3RzLnR4dApAQCAtNCwxMCArNCwyMyBAQAogCiBpbmNsdWRlKENUZXN0KQogCi1maW5kX3BhY2thZ2UoUHl0aG9uMiBSRVFVSVJFRCBDT01QT05FTlRTIERldmVsb3BtZW50KQorZmluZF9wYWNrYWdlKFB5dGhvbjIgUkVRVUlSRUQgQ09NUE9ORU5UUyBEZXZlbG9wbWVudC5FbWJlZCkKIGlmIChOT1QgUHl0aG9uMl9GT1VORCkKICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIDIiKQogZW5kaWYoKQoraWYgKFB5dGhvbjJfRGV2ZWxvcG1lbnRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMiwgQ09NUE9ORU5UICdEZXZlbG9wbWVudCcgdW5leHBlY3RlZGx5IGZvdW5kIikKK2VuZGlmKCkKK2lmIChQeXRob24yX0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlB5dGhvbiAyLCBDT01QT05FTlQgJ0RldmVsb3BtZW50Lk1vZHVsZScgdW5leHBlY3RlZGx5IGZvdW5kIikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uMl9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlB5dGhvbiAyLCBDT01QT05FTlQgJ0RldmVsb3BtZW50LkVtYmVkJyBub3QgZm91bmQiKQorZW5kaWYoKQorCitpZihUQVJHRVQgUHl0aG9uMjo6TW9kdWxlKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6Ok1vZHVsZSB1bmV4cGVjdGVkbHkgZm91bmQiKQorZW5kaWYoKQogCiBpZihOT1QgVEFSR0VUIFB5dGhvbjI6OlB5dGhvbikKICAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpQeXRob24gbm90IGZvdW5kIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMk1vZHVsZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMk1vZHVsZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmMzMzkwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24yTW9kdWxlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMzcgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3Byb2plY3QoVGVzdFB5dGhvbjJNb2R1bGUgQykKKworaW5jbHVkZShDVGVzdCkKKworZmluZF9wYWNrYWdlKFB5dGhvbjIgUkVRVUlSRUQgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBEZXZlbG9wbWVudC5Nb2R1bGUpCitpZiAoTk9UIFB5dGhvbjJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAyIikKK2VuZGlmKCkKK2lmIChQeXRob24yX0RldmVsb3BtZW50X0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uIDIsIENPTVBPTkVOVCAnRGV2ZWxvcG1lbnQnIHVuZXhwZWN0ZWRseSBmb3VuZCIpCitlbmRpZigpCitpZiAoUHl0aG9uMl9EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlB5dGhvbiAyLCBDT01QT05FTlQgJ0RldmVsb3BtZW50LkVtYmVkJyB1bmV4cGVjdGVkbHkgZm91bmQiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24yX0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlB5dGhvbiAyLCBDT01QT05FTlQgJ0RldmVsb3BtZW50Lk1vZHVsZScgbm90IGZvdW5kIikKK2VuZGlmKCkKKworaWYoTk9UIFRBUkdFVCBQeXRob24yOjpJbnRlcnByZXRlcikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpJbnRlcnByZXRlciBub3QgZm91bmQiKQorZW5kaWYoKQorCitpZihUQVJHRVQgUHl0aG9uMjo6UHl0aG9uKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6OlB5dGhvbiB1bmV4cGVjdGVkbHkgZm91bmQiKQorZW5kaWYoKQoraWYoTk9UIFRBUkdFVCBQeXRob24yOjpNb2R1bGUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMjo6TW9kdWxlIG5vdCBmb3VuZCIpCitlbmRpZigpCisKK1B5dGhvbjJfYWRkX2xpYnJhcnkgKHNwYW0yIE1PRFVMRSAuLi9zcGFtLmMpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyAoc3BhbTIgUFJJVkFURSBQWVRIT04yKQorCithZGRfdGVzdCAoTkFNRSBweXRob24yX3NwYW0yCisgICAgICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52ICJQWVRIT05QQVRIPSQ8VEFSR0VUX0ZJTEVfRElSOnNwYW0yPiIKKyAgICAgICAgICAiJHtQeXRob24yX0VYRUNVVEFCTEV9IiAtYyAiaW1wb3J0IHNwYW0yOyBzcGFtMi5zeXN0ZW0oXCJjZFwiKSIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjMvQ01ha2VMaXN0cy50eHQKaW5kZXggNjY5MWE0OC4uZDZlNWZkYiAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24zL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uMy9DTWFrZUxpc3RzLnR4dApAQCAtMTMsMTYgKzEzLDI1IEBACiBpZiAoTk9UIFB5dGhvbjNfRk9VTkQpCiAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAzIikKIGVuZGlmKCkKK2lmIChOT1QgUHl0aG9uM19EZXZlbG9wbWVudF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIDMgJ0RldmVsb3BtZW50JyBjb21wb25lbnQiKQorZW5kaWYoKQoraWYgKE5PVCBQeXRob24zX0RldmVsb3BtZW50Lk1vZHVsZV9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIDMgJ0RldmVsb3BtZW50Lk1vZHVsZScgY29tcG9uZW50IikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uM19EZXZlbG9wbWVudC5FbWJlZF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgUHl0aG9uIDMgJ0RldmVsb3BtZW50LkVtYmVkJyBjb21wb25lbnQiKQorZW5kaWYoKQogCiBpZihOT1QgVEFSR0VUIFB5dGhvbjM6OkludGVycHJldGVyKQotICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjI6OkludGVycHJldGVyIG5vdCBmb3VuZCIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMzo6SW50ZXJwcmV0ZXIgbm90IGZvdW5kIikKIGVuZGlmKCkKIAogaWYoTk9UIFRBUkdFVCBQeXRob24zOjpQeXRob24pCi0gIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMjo6UHl0aG9uIG5vdCBmb3VuZCIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMzo6UHl0aG9uIG5vdCBmb3VuZCIpCiBlbmRpZigpCiBpZihOT1QgVEFSR0VUIFB5dGhvbjM6Ok1vZHVsZSkKLSAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24yOjpNb2R1bGUgbm90IGZvdW5kIikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24zOjpNb2R1bGUgbm90IGZvdW5kIikKIGVuZGlmKCkKIAogUHl0aG9uM19hZGRfbGlicmFyeSAoc3BhbTMgTU9EVUxFIC4uL3NwYW0uYykKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uM0VtYmVkZGVkL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24zRW1iZWRkZWQvQ01ha2VMaXN0cy50eHQKaW5kZXggNGViN2ViYy4uMTg0YzBiNCAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFB5dGhvbi9QeXRob24zRW1iZWRkZWQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9QeXRob24zRW1iZWRkZWQvQ01ha2VMaXN0cy50eHQKQEAgLTQsMTAgKzQsMjMgQEAKIAogaW5jbHVkZShDVGVzdCkKIAotZmluZF9wYWNrYWdlKFB5dGhvbjMgUkVRVUlSRUQgQ09NUE9ORU5UUyBEZXZlbG9wbWVudCkKK2ZpbmRfcGFja2FnZShQeXRob24zIFJFUVVJUkVEIENPTVBPTkVOVFMgRGV2ZWxvcG1lbnQuRW1iZWQpCiBpZiAoTk9UIFB5dGhvbjNfRk9VTkQpCiAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsIHRvIGZvdW5kIFB5dGhvbiAzIikKIGVuZGlmKCkKK2lmIChQeXRob24zX0RldmVsb3BtZW50X0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uIDMsIENPTVBPTkVOVCAnRGV2ZWxvcG1lbnQnIHVuZXhwZWN0ZWRseSBmb3VuZCIpCitlbmRpZigpCitpZiAoUHl0aG9uM19EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMywgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5Nb2R1bGUnIHVuZXhwZWN0ZWRseSBmb3VuZCIpCitlbmRpZigpCitpZiAoTk9UIFB5dGhvbjNfRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMywgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5FbWJlZCcgbm90IGZvdW5kIikKK2VuZGlmKCkKKworaWYoVEFSR0VUIFB5dGhvbjM6Ok1vZHVsZSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24zOjpNb2R1bGUgdW5leHBlY3RlZGx5IGZvdW5kIikKK2VuZGlmKCkKIAogaWYoTk9UIFRBUkdFVCBQeXRob24zOjpQeXRob24pCiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMzo6UHl0aG9uIG5vdCBmb3VuZCIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjNNb2R1bGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUHl0aG9uL1B5dGhvbjNNb2R1bGUvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2ZjRjOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vUHl0aG9uM01vZHVsZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDM3IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorCitwcm9qZWN0KFRlc3RQeXRob24zTW9kdWxlIEMpCisKK2luY2x1ZGUoQ1Rlc3QpCisKK2ZpbmRfcGFja2FnZShQeXRob24zIFJFUVVJUkVEIENPTVBPTkVOVFMgSW50ZXJwcmV0ZXIgRGV2ZWxvcG1lbnQuTW9kdWxlKQoraWYgKE5PVCBQeXRob24zX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMyIpCitlbmRpZigpCitpZiAoUHl0aG9uM19EZXZlbG9wbWVudF9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlB5dGhvbiAzLCBDT01QT05FTlQgJ0RldmVsb3BtZW50JyB1bmV4cGVjdGVkbHkgZm91bmQiKQorZW5kaWYoKQoraWYgKFB5dGhvbjNfRGV2ZWxvcG1lbnQuRW1iZWRfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMywgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5FbWJlZCcgdW5leHBlY3RlZGx5IGZvdW5kIikKK2VuZGlmKCkKK2lmIChOT1QgUHl0aG9uM19EZXZlbG9wbWVudC5Nb2R1bGVfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24gMywgQ09NUE9ORU5UICdEZXZlbG9wbWVudC5Nb2R1bGUnIG5vdCBmb3VuZCIpCitlbmRpZigpCisKK2lmKE5PVCBUQVJHRVQgUHl0aG9uMzo6SW50ZXJwcmV0ZXIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHl0aG9uMzo6SW50ZXJwcmV0ZXIgbm90IGZvdW5kIikKK2VuZGlmKCkKKworaWYoVEFSR0VUIFB5dGhvbjM6OlB5dGhvbikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQeXRob24zOjpQeXRob24gdW5leHBlY3RlZGx5IGZvdW5kIikKK2VuZGlmKCkKK2lmKE5PVCBUQVJHRVQgUHl0aG9uMzo6TW9kdWxlKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlB5dGhvbjM6Ok1vZHVsZSBub3QgZm91bmQiKQorZW5kaWYoKQorCitQeXRob24zX2FkZF9saWJyYXJ5IChzcGFtMyBNT0RVTEUgLi4vc3BhbS5jKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMgKHNwYW0zIFBSSVZBVEUgUFlUSE9OMykKKworYWRkX3Rlc3QgKE5BTUUgcHl0aG9uM19zcGFtMworICAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAiUFlUSE9OUEFUSD0kPFRBUkdFVF9GSUxFX0RJUjpzcGFtMz4iCisgICAgICAgICAgIiR7UHl0aG9uM19FWEVDVVRBQkxFfSIgLWMgImltcG9ydCBzcGFtMzsgc3BhbTMuc3lzdGVtKFwiY2RcIikiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9TT0FCSS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vU09BQkkvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE2YWVhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vU09BQkkvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyMiBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworcHJvamVjdChUZXN0U09BQkkgQykKKworZmluZF9wYWNrYWdlKFB5dGhvbjMgQ09NUE9ORU5UUyAke0NNYWtlX1RFU1RfRmluZFB5dGhvbl9DT01QT05FTlR9KQoraWYgKE5PVCBQeXRob24zX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byBmb3VuZCBQeXRob24gMyIpCitlbmRpZigpCisKK2lmKE5PVCBERUZJTkVEIFB5dGhvbjNfU09BQkkpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlB5dGhvbjNfU09BQkkgZm9yICR7Q01ha2VfVEVTVF9GaW5kUHl0aG9uX0NPTVBPTkVOVH0gbm90IGZvdW5kIikKK2VuZGlmKCkKKworaWYgKFB5dGhvbjNfRGV2ZWxvcG1lbnRfRk9VTkQgQU5EIFB5dGhvbjNfU09BQkkpCisgIFB5dGhvbjNfYWRkX2xpYnJhcnkgKHNwYW0zIE1PRFVMRSBXSVRIX1NPQUJJIC4uL3NwYW0uYykKKyAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMgKHNwYW0zIFBSSVZBVEUgUFlUSE9OMykKKworICBnZXRfcHJvcGVydHkgKHN1ZmZpeCBUQVJHRVQgc3BhbTMgUFJPUEVSVFkgU1VGRklYKQorICBpZiAoTk9UIHN1ZmZpeCBNQVRDSEVTICJeLiR7UHl0aG9uM19TT0FCSX0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIk1vZHVsZSBzdWZmaXggZG8gbm90IGluY2x1ZGUgUHl0aG9uM19TT0FCSSIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudi9DTWFrZUxpc3RzLnR4dAppbmRleCA2NGJhMjAxLi4wNDVhM2YyIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnYvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52L0NNYWtlTGlzdHMudHh0CkBAIC0xMCw2ICsxMCw3IEBACiBlbmRpZigpCiAKIHNldCAoUHl0aG9uM19WSVJUVUFMX0VOViAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3B5M3ZlbnYiKQorZmlsZSAoUkVNT1ZFX1JFQ1VSU0UgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9weTN2ZW52IikKIAogZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke1B5dGhvbjNfRVhFQ1VUQUJMRX0iIC1tIHZlbnYgIiR7UHl0aG9uM19WSVJUVUFMX0VOVn0iCiAgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKQEAgLTIxLDIyICsyMiwyNiBAQAogCiBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24zLlZpcnR1YWxFbnZEZWZhdWx0CiAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1DT05EQV9QUkVGSVgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFBZVEhPTjNfVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vVmlydHVhbEVudkRlZmF1bHQuY21ha2UiKQogCiBhZGRfdGVzdChOQU1FIEZpbmRQeXRob24zLlZpcnR1YWxFbnZPbmx5CiAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1DT05EQV9QUkVGSVgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFBZVEhPTjNfVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vVmlydHVhbEVudk9ubHkuY21ha2UiKQogYWRkX3Rlc3QoTkFNRSBGaW5kUHl0aG9uMy5VbnNldFZpcnR1YWxFbnZPbmx5CiAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1WSVJUVUFMX0VOVgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdW5zZXQ9Q09OREFfUFJFRklYCiAgICAgICAgICAgICAgICAgICIke0NNQUtFX0NPTU1BTkR9IiAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9WaXJ0dWFsRW52T25seS5jbWFrZSIpCiAKIGFkZF90ZXN0KE5BTUUgRmluZFB5dGhvbjMuVmlydHVhbEVudlN0YW5kYXJkCiAgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1DT05EQV9QUkVGSVgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFBZVEhPTjNfVklSVFVBTF9FTlY9JHtQeXRob24zX1ZJUlRVQUxfRU5WfSIKICAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vVmlydHVhbEVudlN0YW5kYXJkLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudkNvbmRhL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52Q29uZGEvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY1MDk1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudkNvbmRhL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNDYgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisKK3Byb2plY3QoVGVzdFZpcnR1YWxFbnZDb25kYSBMQU5HVUFHRVMgTk9ORSkKKworaW5jbHVkZShDVGVzdCkKKworZmluZF9wcm9ncmFtKENPTkRBX0VYRUNVVEFCTEUgY29uZGEpCitpZiAoQ09OREFfRVhFQ1VUQUJMRSBFUVVBTCBOT1RGT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZm91bmQgQ29uZGEiKQorZW5kaWYoKQorCitzZXQgKFB5dGhvbjNfVklSVFVBTF9FTlYgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jb25kYWVudiIpCisKK2V4ZWN1dGVfcHJvY2VzcyAoQ09NTUFORCAiJHtDT05EQV9FWEVDVVRBQkxFfSIgY3JlYXRlIC0tbm8tZGVmYXVsdC1wYWNrYWdlcyAtLXByZWZpeCAiJHtQeXRob24zX1ZJUlRVQUxfRU5WfSIgLS15ZXMgcHl0aG9uPTMKKyAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgb3V0cHV0cworICAgICAgICAgICAgICAgICBFUlJPUl9WQVJJQUJMRSBvdXRwdXRzKQoraWYgKHJlc3VsdCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gY3JlYXRlIHZpcnR1YWwgZW52aXJvbm1lbnQ6ICR7b3V0cHV0c30iKQorZW5kaWYoKQorCithZGRfdGVzdChOQU1FIEZpbmRQeXRob24zLlZpcnR1YWxFbnZEZWZhdWx0Q29uZGEKKyAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAtLXVuc2V0PVBZVEhPTkhPTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVuc2V0PVZJUlRVQUxfRU5WCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTkRBX1BSRUZJWD0ke1B5dGhvbjNfVklSVFVBTF9FTlZ9IgorICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUFlUSE9OM19WSVJUVUFMX0VOVj0ke1B5dGhvbjNfVklSVFVBTF9FTlZ9IgorICAgICAgICAgICAgICAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9WaXJ0dWFsRW52RGVmYXVsdC5jbWFrZSIpCisKK2FkZF90ZXN0KE5BTUUgRmluZFB5dGhvbjMuVmlydHVhbEVudk9ubHlDb25kYQorICAgICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52IC0tdW5zZXQ9UFlUSE9OSE9NRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdW5zZXQ9VklSVFVBTF9FTlYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ09OREFfUFJFRklYPSR7UHl0aG9uM19WSVJUVUFMX0VOVn0iCisgICAgICAgICAgICAgICAgICIke0NNQUtFX0NPTU1BTkR9IiAiLURQWVRIT04zX1ZJUlRVQUxfRU5WPSR7UHl0aG9uM19WSVJUVUFMX0VOVn0iCisgICAgICAgICAgICAgICAgIC1QICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1ZpcnR1YWxFbnZPbmx5LmNtYWtlIikKK2FkZF90ZXN0KE5BTUUgRmluZFB5dGhvbjMuVW5zZXRWaXJ0dWFsRW52T25seUNvbmRhCisgICAgICAgICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QWVRIT05IT01FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11bnNldD1DT05EQV9QUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVuc2V0PVZJUlRVQUxfRU5WCisgICAgICAgICAgICAgICAgICIke0NNQUtFX0NPTU1BTkR9IiAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9WaXJ0dWFsRW52T25seS5jbWFrZSIpCisKK2FkZF90ZXN0KE5BTUUgRmluZFB5dGhvbjMuVmlydHVhbEVudlN0YW5kYXJkQ29uZGEKKyAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAtLXVuc2V0PVBZVEhPTkhPTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVuc2V0PVZJUlRVQUxfRU5WCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTkRBX1BSRUZJWD0ke1B5dGhvbjNfVklSVFVBTF9FTlZ9IgorICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUFlUSE9OM19WSVJUVUFMX0VOVj0ke1B5dGhvbjNfVklSVFVBTF9FTlZ9IgorICAgICAgICAgICAgICAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9WaXJ0dWFsRW52U3RhbmRhcmQuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52Q29uZGEvVmlydHVhbEVudkRlZmF1bHQuY21ha2UgYi9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52RGVmYXVsdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjBlY2FjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFB5dGhvbi9WaXJ0dWFsRW52Q29uZGEvVmlydHVhbEVudkRlZmF1bHQuY21ha2UKQEAgLTAsMCArMSw2IEBACisKK2ZpbmRfcGFja2FnZSAoUHl0aG9uMyBSRVFVSVJFRCkKKworaWYgKE5PVCBQeXRob24zX0VYRUNVVEFCTEUgTUFUQ0hFUyAiXiR7UFlUSE9OM19WSVJUVUFMX0VOVn0vLisiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbCB0byB1c2UgdmlydHVhbCBlbnZpcm9ubWVudCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52T25seS5jbWFrZSBiL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudkNvbmRhL1ZpcnR1YWxFbnZPbmx5LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YTQ5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52T25seS5jbWFrZQpAQCAtMCwwICsxLDE2IEBACisKKyMKKyMgVmlydHVhbCBlbnZpcm9ubWVudCBpcyBkZWZpbmVkIGZvciBweXRob24zCisjIFRyeWluZyB0byBmaW5kIGEgcHl0aG9uMiB1c2luZyBvbmx5IHZpcnR1YWwgZW52aXJvbm1lbnQKKyMgSXQgaXMgZXhwZWN0aW5nIHRvIGZhaWwgaWYgYSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGFjdGl2ZSBhbmQgdG8gc3VjY2VzcyBvdGhlcndpc2UuCisjCitzZXQgKFB5dGhvbjJfRklORF9WSVJUVUFMRU5WIE9OTFkpCitmaW5kX3BhY2thZ2UgKFB5dGhvbjIgUVVJRVQpCisKK2lmIChQWVRIT04zX1ZJUlRVQUxfRU5WIEFORCBQeXRob24yX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiUHl0aG9uMiB1bmV4cGVjdGVkbHkgZm91bmQuIikKK2VuZGlmKCkKKworaWYgKE5PVCBQWVRIT04zX1ZJUlRVQUxfRU5WIEFORCBOT1QgUHl0aG9uMl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWwgdG8gZmluZCBQeXRob24yLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52U3RhbmRhcmQuY21ha2UgYi9UZXN0cy9GaW5kUHl0aG9uL1ZpcnR1YWxFbnZDb25kYS9WaXJ0dWFsRW52U3RhbmRhcmQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmMjdkOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRQeXRob24vVmlydHVhbEVudkNvbmRhL1ZpcnR1YWxFbnZTdGFuZGFyZC5jbWFrZQpAQCAtMCwwICsxLDcgQEAKKworc2V0IChQeXRob24zX0ZJTkRfVklSVFVBTEVOViBTVEFOREFSRCkKK2ZpbmRfcGFja2FnZSAoUHl0aG9uMyBSRVFVSVJFRCkKKworaWYgKFB5dGhvbjNfRVhFQ1VUQUJMRSBNQVRDSEVTICJeJHtQWVRIT04zX1ZJUlRVQUxfRU5WfS8uKyIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJQeXRob24zIHZpcnR1YWwgZW52IHVuZXhwZWN0ZWRseSBmb3VuZC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kUnVieS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjQ4MDdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw1NyBAQAoraWYoQ01ha2VfVEVTVF9GaW5kUnVieSkKKworICAjIExvb2tzIGZvciBydWJ5ID49MS45LjksIHdoaWNoIGlzIHRydWUgb24gYW55IFVidW50dSAodGhhdCBpbnN0YWxscyBpdCkgb3IgbWFjT1MgKD4gMTAuOSkKKyAgYWRkX3Rlc3QoTkFNRSBGaW5kUnVieS5UZXN0IENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFJ1YnkvVGVzdCIKKyAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9GaW5kUnVieS9UZXN0IgorICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgLS1idWlsZC1wcm9qZWN0IFRlc3RSdWJ5CisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisKKyAgIyBMb29rcyBmb3IgcnVieSA+PSA1MC4xLjAsIHdoaWNoIHNob3VsZCBsb2dpY2FsbHkgZmFpbAorICBhZGRfdGVzdChOQU1FIEZpbmRSdWJ5LkZhaWwgQ09NTUFORAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9GaW5kUnVieS9GYWlsIgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L0ZhaWwiCisgICAgJHtidWlsZF9nZW5lcmF0b3JfYXJnc30KKyAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFJ1YnlGYWlsCisgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAtLXRlc3QtY29tbWFuZCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1WIC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICApCisgIHNldF90ZXN0c19wcm9wZXJ0aWVzKEZpbmRSdWJ5LkZhaWwgUFJPUEVSVElFUworICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJDb3VsZCBOT1QgZmluZCBSdWJ5LiooUmVxdWlyZWQgaXMgYXQgbGVhc3QgdmVyc2lvbiBcIlswLTldK1xcLlswLTldK1xcLlswLTldK1wiKSIpCisKKyAgIyBMb29rcyBmb3IgMS45LjkgRVhBQ1RMWSwgd2hpY2ggdW5saWtlIHRoZSAiRmluZFJ1YnkiIHRlc3QgYWJvdmUgd2lsbCBmYWlsIG9uIGV2ZXJ5IG1hY2hpbmUKKyAgIyBzaW5jZSB0aGlzIHZlcnNpb24gZG9lc24ndCBleGlzdCAocnVieSBnb2VzIGZyb20gMS45LjMgdG8gMi4wLjApCisgIGFkZF90ZXN0KE5BTUUgRmluZFJ1YnkuRmFpbEV4YWN0IENPTU1BTkQKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAtLWJ1aWxkLWFuZC10ZXN0CisgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvRmluZFJ1YnkvRmFpbEV4YWN0IgorICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L0ZhaWxFeGFjdCIKKyAgICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAgIC0tYnVpbGQtcHJvamVjdCBUZXN0UnVieUZhaWxFeGFjdAorICAgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICAgKQorICBzZXRfdGVzdHNfcHJvcGVydGllcyhGaW5kUnVieS5GYWlsRXhhY3QgUFJPUEVSVElFUworICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJDb3VsZCBOT1QgZmluZCBSdWJ5OiBGb3VuZCB1bnN1aXRhYmxlIHZlcnNpb24gXCIuKlwiLCBidXQgcmVxdWlyZWQgaXMuKmV4YWN0IHZlcnNpb24gXCJbMC05XStcXC5bMC05XStcXC5bMC05XStcIiBcXChmb3VuZCAuKlxcKSIpCisKKyAgIyBSVk0gc3BlY2lmaWMgdGVzdAorICBpZihDTWFrZV9URVNUX0ZpbmRSdWJ5X1JWTSkKKyAgICBhZGRfdGVzdChOQU1FIEZpbmRSdWJ5LlJ2bSBDT01NQU5ECisgICAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgICAgIC0tYnVpbGQtYW5kLXRlc3QKKyAgICAgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L1J2bSIKKyAgICAgICIke0NNYWtlX0JJTkFSWV9ESVJ9L1Rlc3RzL0ZpbmRSdWJ5L1J2bSIKKyAgICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgICAtLWJ1aWxkLXByb2plY3QgVGVzdFJWTQorICAgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICAgKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUnVieS9GYWlsL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFJ1YnkvRmFpbC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTg1YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvRmFpbC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDUgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorcHJvamVjdChUZXN0UnVieUZhaWwgTEFOR1VBR0VTIE5PTkUpCisKKyMgU2hvdWxkIGFsd2F5cyBmYWlsIHNpbmNlIHRoZXJlIGlzIE5PIHJ1YnkgNTAuMS4wIHlldC4KK2ZpbmRfcGFja2FnZShSdWJ5IDUwLjEuMCBSRVFVSVJFRCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRSdWJ5L0ZhaWxFeGFjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRSdWJ5L0ZhaWxFeGFjdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWJjMGFlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvRmFpbEV4YWN0L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsOCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTcpCitwcm9qZWN0KFRlc3RSdWJ5RmFpbEV4YWN0IExBTkdVQUdFUyBOT05FKQorCisjIFNob3VsZCBhbHdheXMgZmFpbCBzaW5jZSB0aGVyZSBpcyBOTyBydWJ5IDEuOS45IChnb2VzIGZyb20gMS45LjMgdG8gMi4wLjApCitmaW5kX3BhY2thZ2UoUnVieSAxLjkuOSBFWEFDVCBSRVFVSVJFRCkKK2lmIChOT1QgUnVieV9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBmaW5kIFJ1YnkgMS45LjkiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvUnZtL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFJ1YnkvUnZtL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWZjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUnVieS9Sdm0vQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw3NSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTcpCitwcm9qZWN0KFRlc3RSVk0gTEFOR1VBR0VTIE5PTkUpCisKK2luY2x1ZGUoQ1Rlc3QpCisKKyMgVG8gcnVuIHRoaXMgdGVzdCwgeW91IG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgUlZNIHJ1YnkgaW5zdGFsbGVkCisjIGFuZCB0byBlbnN1cmUgdGhhdCB0aGUgZW52IHZhcmlhYmxlICdNWV9SVUJZX0hPTUUnIGlzIHNldCB0byBhIHZhbGlkIFJWTSBydWJ5IHdoZW4geW91IHJ1biB0aGUgdGVzdAorIyAod2hpY2ggaXMgdGhlIGNhc2UgaWYgeW91IGhhdmUgZG9uZSBgcnZtIHVzZSB4LnkuemAsIGJ1dCBjb3VsZCBiZSBtYW51YWxseSBzZXQgdG9vKQorCisjIFByb3Blcmx5IHVzaW5nIHJ2bSB3b3VsZCByZXF1aXJlIHNvdXJjaW5nIGEgc2hlbGwgc2NyaXB0LCBlZyBgc291cmNlICIkSE9NRS8ucnZtL3NjcmlwdHMvcnZtImAKKyMgSW5zdGVhZCwgSSdsbCBqdXN0IHJlbHkgb24gdGhlIGVudiB2YXJpYWJsZSBNWV9SVUJZX0hPTUUKK3NldChNWV9SVUJZX0hPTUUgIiRFTlZ7TVlfUlVCWV9IT01FfSIpCitpZihOT1QgTVlfUlVCWV9IT01FKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJFbnYgdmFyaWFibGUgTVlfUlVCWV9IT01FIHNob3VsZCBiZSBzZXQgdG8gYSB2YWxpZCBSVk0gcnVieSBsb2NhdGlvbiwgb3IgeW91IHNob3VsZCBjYWxsIGBydm0gdXNlIHgueS56YCBiZWZvcmUiKQorZW5kaWYoKQorZXhlY3V0ZV9wcm9jZXNzIChDT01NQU5EICIke01ZX1JVQllfSE9NRX0vYmluL3J1YnkiIC1lICJwdXRzIFJVQllfVkVSU0lPTiIKKyAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgUlZNX1JVQllfVkVSU0lPTgorICAgICAgICAgICAgICAgICBFUlJPUl9RVUlFVAorICAgICAgICAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKworaWYgKHJlc3VsdCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlVuYWJsZSB0byBkZXRlY3QgUlZNIHJ1YnkgdmVyc2lvbiBmcm9tIGAke01ZX1JVQllfSE9NRX0vYmluL3J1YnlgOiAke1JWTV9SVUJZX1ZFUlNJT059IikKK2VuZGlmKCkKKworZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAtLXVuc2V0PU1ZX1JVQllfSE9NRSAtLXVuc2V0PVBBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3aGljaCIgInJ1YnkiCisgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKKyAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIFNZU1RFTV9SVUJZCisgICAgICAgICAgICAgICAgIEVSUk9SX1FVSUVUCisgICAgICAgICAgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorCitpZiAoU1lTVEVNX1JVQlkgTUFUQ0hFUyAiXiR7TVlfUlVCWV9IT01FfS8uKyIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlVuYWJsZSB0byBmaW5kIHN5c3RlbSBydWJ5LCBmb3VuZCAke1NZU1RFTV9SVUJZfSB3aGljaCBpcyBwYXJ0IG9mIE1ZX1JVQllfSE9NRT0ke01ZX1JVQllfSE9NRX0iKQorZW5kaWYoKQorCisjIENoZWNrIHZlcnNpb24gb2YgdGhlIHN5c3RlbSBydWJ5IGV4ZWN1dGFibGUuCitleGVjdXRlX3Byb2Nlc3MgKENPTU1BTkQgIiR7U1lTVEVNX1JVQll9IiAtZSAicHV0cyBSVUJZX1ZFUlNJT04iCisgICAgICAgICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSByZXN1bHQKKyAgICAgICAgICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIFNZU1RFTV9SVUJZX1ZFUlNJT04KKyAgICAgICAgICAgICAgICAgRVJST1JfUVVJRVQKKyAgICAgICAgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UpCisKK2lmIChyZXN1bHQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJVbmFibGUgdG8gZGV0ZWN0IHN5c3RlbSBydWJ5IHZlcnNpb24gZnJvbSAnJHtTWVNURU1fUlVCWX0nOiAke1NZU1RFTV9SVUJZX1ZFUlNJT059IikKK2VuZGlmKCkKKworaWYoU1lTVEVNX1JVQllfVkVSU0lPTiBWRVJTSU9OX0VRVUFMIFJWTV9SVUJZX1ZFUlNJT04pCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIllvdXIgUlZNIFJ1YnkgVmVyc2lvbiBhbmQgeW91ciBTeXN0ZW0gcnVieSB2ZXJzaW9uIGFyZSB0aGUgc2FtZSAoJHtSVk1fUlVCWV9WRVJTSU9OfSkuIikKK2VuZGlmKCkKKworbWVzc2FnZSgiRm91bmQgU3lzdGVtIFJ1YnkgKCR7U1lTVEVNX1JVQllfVkVSU0lPTn0pOiAke1NZU1RFTV9SVUJZfSIpCittZXNzYWdlKCJGb3VuZCAgUlZNICAgUnVieSAoJHtSVk1fUlVCWV9WRVJTSU9OfSk6ICR7TVlfUlVCWV9IT01FfS9iaW4vcnVieSIpCisKK2FkZF90ZXN0KE5BTUUgRmluZFJ1YnkuUnZtRGVmYXVsdAorICAgICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52ICJNWV9SVUJZX0hPTUU9JHtNWV9SVUJZX0hPTUV9IgorICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vUnZtRGVmYXVsdC5jbWFrZSIpCisKK2FkZF90ZXN0KE5BTUUgRmluZFJ1YnkuUnZtT25seQorICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBlbnYgLS11bnNldD1QQVRICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTVlfUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAgICAgICAgIi1EUlZNX1JVQllfVkVSU0lPTj0ke1JWTV9SVUJZX1ZFUlNJT059IiAiLURTWVNURU1fUlVCWV9WRVJTSU9OPSR7U1lTVEVNX1JVQllfVkVSU0lPTn0iCisgICAgICAgICAgICAgICAgIC1QICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L1J2bU9ubHkuY21ha2UiKQorYWRkX3Rlc3QoTkFNRSBGaW5kUnVieS5VbnNldFJ2bU9ubHkKKyAgICAgICAgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIGVudiAtLXVuc2V0PU1ZX1JVQllfSE9NRSAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lczovdXNyL2xvY2FsL2dhbWVzOi9zbmFwL2JpbiIKKyAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ09NTUFORH0iICItRFJWTV9SVUJZX1ZFUlNJT049JHtSVk1fUlVCWV9WRVJTSU9OfSIgIi1EU1lTVEVNX1JVQllfVkVSU0lPTj0ke1NZU1RFTV9SVUJZX1ZFUlNJT059IgorICAgICAgICAgICAgICAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9Sdm1Pbmx5LmNtYWtlIikKKworYWRkX3Rlc3QoTkFNRSBGaW5kUnVieS5Sdm1TdGFuZGFyZAorICAgICAgICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgZW52ICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6L3NuYXAvYmluIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNWV9SVUJZX0hPTUU9JHtNWV9SVUJZX0hPTUV9IgorICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DT01NQU5EfSIgIi1EUlVCWV9IT01FPSR7TVlfUlVCWV9IT01FfSIKKyAgICAgICAgICAgICAgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vUnZtU3RhbmRhcmQuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bURlZmF1bHQuY21ha2UgYi9UZXN0cy9GaW5kUnVieS9Sdm0vUnZtRGVmYXVsdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZiOTExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bURlZmF1bHQuY21ha2UKQEAgLTAsMCArMSwxNyBAQAorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9QUkVGSVhFUyAiIikKK3NldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgIiIpCisKK2ZpbmRfcGFja2FnZSAoUnVieSAyLjEuMSBSRVFVSVJFRCkKK2lmIChOT1QgUlVCWV9FWEVDVVRBQkxFIE1BVENIRVMgIl4ke1JVQllfSE9NRX0vLisiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIHVzZSBSVk0gZW52aXJvbm1lbnQ6ICR7UlVCWV9FWEVDVVRBQkxFfSwgJHtSVUJZX0hPTUV9IikKK2VuZGlmKCkKKworZmluZF9wYWNrYWdlIChSdWJ5IDIuMSBSRVFVSVJFRCkKK2lmIChOT1QgUlVCWV9FWEVDVVRBQkxFIE1BVENIRVMgIl4ke1JVQllfSE9NRX0vLisiKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAiRmFpbGVkIHRvIHVzZSBSVk0gZW52aXJvbm1lbnQ6ICR7UlVCWV9FWEVDVVRBQkxFfSwgJHtSVUJZX0hPTUV9IikKK2VuZGlmKCkKKworZmluZF9wYWNrYWdlIChSdWJ5IFJFUVVJUkVEKQoraWYgKE5PVCBSVUJZX0VYRUNVVEFCTEUgTUFUQ0hFUyAiXiR7UlVCWV9IT01FfS8uKyIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gdXNlIFJWTSBlbnZpcm9ubWVudDogJHtSVUJZX0VYRUNVVEFCTEV9LCAke1JVQllfSE9NRX0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bU9ubHkuY21ha2UgYi9UZXN0cy9GaW5kUnVieS9Sdm0vUnZtT25seS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODUxYTdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bU9ubHkuY21ha2UKQEAgLTAsMCArMSw0MSBAQAorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9QUkVGSVhFUyAiIikKK3NldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgIiIpCisKK3NldChSdWJ5X0ZJTkRfVklSVFVBTEVOViBPTkxZKQorCisjIFRlc3Q6IEZpbmRSdWJ5LlJ2bU9ubHkKK2lmIChSVUJZX0hPTUUpCisgICMgPT4gVHJ5aW5nIHRvIGZpbmQgZXhhY3RseSBzeXN0ZW0gcnVieSB1c2luZyBPTkxZIHZpcnR1YWwgZW52aXJvbm1lbnQgc2hvdWxkIGZhaWwKKyAgZmluZF9wYWNrYWdlIChSdWJ5ICR7U1lTVEVNX1JVQllfVkVSU0lPTn0gRVhBQ1QgUVVJRVQpCisgIGlmKFJ1YnlfRk9VTkQpCisgICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlJ1YnkgdW5leHBlY3RlZGx5IGZvdW5kLiIpCisgIGVuZGlmKCkKKyAgIyBBbmQgc2hvdWxkIHdvcmsgdG8gZmluZCB0aGUgcnZtIHZlcnNpb24KKyAgZmluZF9wYWNrYWdlIChSdWJ5ICR7UlZNX1JVQllfVkVSU0lPTn0gRVhBQ1QgUVVJRVQpCisgIGlmKFJ1YnlfRk9VTkQpCisgICAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIlJ1YnkgdW5leHBlY3RlZGx5IGZvdW5kLiIpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworCisjIFRlc3Q6IEZpbmRSdWJ5LlVuc2V0UnZtT25seQoraWYgKE5PVCBSVUJZX0hPTUUpCisKKyAgIyBJZiBFTlZ7TVlfUlVCWV9IT01FfSBpc24ndCBkZWZpbmVkLCBpdCBzaG91bGQgZGVmYXVsdCBiYWNrIHRvICJTVEFOREFSRCIKKyAgIyBBdCB3aGljaCBwb2ludDoKKworICAjIEl0IHNob3VsZG4ndCBmaW5kIHRoZSBSVk0gcnVieQorICBmaW5kX3BhY2thZ2UgKFJ1YnkgJHtSVk1fUlVCWV9WRVJTSU9OfSBFWEFDVCBRVUlFVCkKKyAgaWYoUnVieV9GT1VORCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGb3VuZCBSVk0gcnVieSB3aGVuIGV4cGVjdGluZyBzeXN0ZW0iKQorICBlbmRpZigpCisKKyAgIyBpdCBzaG91bGQgZmluZCB0aGUgc3lzdGVtIHJ1YnkKKyAgZmluZF9wYWNrYWdlIChSdWJ5ICR7U1lTVEVNX1JVQllfVkVSU0lPTn0gRVhBQ1QgUVVJRVQpCisgIGlmKE5PVCBSdWJ5X0ZPVU5EKQorICAgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJSdWJ5IG5vdCBmb3VuZC4iKQorICBlbmRpZigpCisgIGlmIChSdWJ5X0ZPVU5EIE1BVENIRVMgIl4ke1JVQllfSE9NRX0vLisiKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBmaW5kIHN5c3RlbSBydWJ5IikKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bVN0YW5kYXJkLmNtYWtlIGIvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bVN0YW5kYXJkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YmVmZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvUnZtL1J2bVN0YW5kYXJkLmNtYWtlCkBAIC0wLDAgKzEsOSBAQAorc2V0KENNQUtFX0ZJTkRfTElCUkFSWV9QUkVGSVhFUyAiIikKK3NldChDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgIiIpCisKK3NldCAoUnVieV9GSU5EX1ZJUlRVQUxFTlYgU1RBTkRBUkQpCitmaW5kX3BhY2thZ2UgKFJ1YnkgUkVRVUlSRUQpCisKK2lmIChSVUJZX0VYRUNVVEFCTEUgTUFUQ0hFUyAiXiR7UlVCWV9IT01FfS8uKyIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJSVk0gcnVieSB1bmV4cGVjdGVkbHkgZm91bmQgYXQgJHtSVUJZX0VYRUNVVEFCTEV9LCBtYXRjaGVzICR7UlVCWV9IT01FfSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kUnVieS9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFJ1YnkvVGVzdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2YzZWMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFJ1YnkvVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNykKK3Byb2plY3QoVGVzdFJ1YnkgTEFOR1VBR0VTIEMpCitpbmNsdWRlKENUZXN0KQorCitmaW5kX3BhY2thZ2UoUnVieSAxLjkuOSBSRVFVSVJFRCkKK2lmIChOT1QgUnVieV9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgIkZhaWxlZCB0byBmaW5kIFJ1YnkgPj0xLjkuOSIpCitlbmRpZigpCisKK2FkZF9leGVjdXRhYmxlKHJ1YnlfdmVyc2lvbiBydWJ5X3ZlcnNpb24uYykKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHJ1YnlfdmVyc2lvbiBQUklWQVRFICR7UnVieV9JTkNMVURFX0RJUlN9KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHJ1YnlfdmVyc2lvbiBQUklWQVRFICR7UnVieV9MSUJSQVJJRVN9KQorCithZGRfdGVzdChOQU1FIHJ1YnlfdmVyc2lvbiBDT01NQU5EIHJ1YnlfdmVyc2lvbikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRSdWJ5L1Rlc3QvcnVieV92ZXJzaW9uLmMgYi9UZXN0cy9GaW5kUnVieS9UZXN0L3J1YnlfdmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDA0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9GaW5kUnVieS9UZXN0L3J1YnlfdmVyc2lvbi5jCkBAIC0wLDAgKzEsNyBAQAorI2luY2x1ZGUgInJ1YnkuaCIKKworaW50IG1haW4odm9pZCkKK3sKKyAgcnVieV9zaG93X3ZlcnNpb24oKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kU0RML0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFNETC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzg2MjA0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFNETC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEwIEBACithZGRfdGVzdChOQU1FIEZpbmRTREwuVGVzdCBDT01NQU5ECisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAtLWJ1aWxkLWFuZC10ZXN0CisgICIke0NNYWtlX1NPVVJDRV9ESVJ9L1Rlc3RzL0ZpbmRTREwvVGVzdCIKKyAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvRmluZFNETC9UZXN0IgorICAke2J1aWxkX2dlbmVyYXRvcl9hcmdzfQorICAtLWJ1aWxkLXByb2plY3QgVGVzdEZpbmRTREwKKyAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRTREwvVGVzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZpbmRTREwvVGVzdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWQ0ZjRiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFNETC9UZXN0L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTkgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCitwcm9qZWN0KFRlc3RGaW5kU0RMIEMpCitpbmNsdWRlKENUZXN0KQorCitmaW5kX3BhY2thZ2UoU0RMKQorCithZGRfZGVmaW5pdGlvbnMoCisgIC1EQ01BS0VfRVhQRUNURURfU0RMX1ZFUlNJT05fTUFKT1I9JHtTRExfVkVSU0lPTl9NQUpPUn0KKyAgLURDTUFLRV9FWFBFQ1RFRF9TRExfVkVSU0lPTl9NSU5PUj0ke1NETF9WRVJTSU9OX01JTk9SfQorICAtRENNQUtFX0VYUEVDVEVEX1NETF9WRVJTSU9OX1BBVENIPSR7U0RMX1ZFUlNJT05fUEFUQ0h9KQorCithZGRfZXhlY3V0YWJsZSh0ZXN0X3NkbF90Z3QgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3Rfc2RsX3RndCBTREw6OlNETCkKK2FkZF90ZXN0KE5BTUUgdGVzdF9zZGxfdGd0IENPTU1BTkQgdGVzdF9zZGxfdGd0KQorCithZGRfZXhlY3V0YWJsZSh0ZXN0X3NkbF92YXIgbWFpbi5jKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXModGVzdF9zZGxfdmFyIFBSSVZBVEUgJHtTRExfSU5DTFVERV9ESVJTfSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3NkbF92YXIgUFJJVkFURSAke1NETF9MSUJSQVJJRVN9KQorYWRkX3Rlc3QoTkFNRSB0ZXN0X3NkbF92YXIgQ09NTUFORCB0ZXN0X3NkbF92YXIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kU0RML1Rlc3QvbWFpbi5jIGIvVGVzdHMvRmluZFNETC9UZXN0L21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTcyODljCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFNETC9UZXN0L21haW4uYwpAQCAtMCwwICsxLDE4IEBACisjaW5jbHVkZSA8U0RMLmg+CisKK2ludCBtYWluKCkKK3sKKyAgLy8gVGVzdCAxIHJlcXVpcmVzIGhlYWRlcnMgb25seS4KKyAgU0RMX3ZlcnNpb24gY29tcGlsZWQ7CisgIFNETF9WRVJTSU9OKCZjb21waWxlZCk7CisgIGlmIChjb21waWxlZC5tYWpvciAhPSBDTUFLRV9FWFBFQ1RFRF9TRExfVkVSU0lPTl9NQUpPUiB8fAorICAgICAgY29tcGlsZWQubWlub3IgIT0gQ01BS0VfRVhQRUNURURfU0RMX1ZFUlNJT05fTUlOT1IgfHwKKyAgICAgIGNvbXBpbGVkLnBhdGNoICE9IENNQUtFX0VYUEVDVEVEX1NETF9WRVJTSU9OX1BBVENIKQorICAgIHJldHVybiAxOworCisgIC8vIFRlc3QgMiByZXF1aXJlcyB0byBsaW5rIHRvIHRoZSBsaWJyYXJ5LgorICBpZiAoU0RMX1dhc0luaXQoU0RMX0lOSVRfVklERU8gfCBTRExfSU5JVF9BVURJTykgIT0gMCkKKyAgICByZXR1cm4gMjsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRUSUZGL1Rlc3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kVElGRi9UZXN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDg1NDUzZWQuLmUyMzVkYjMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRUSUZGL1Rlc3QvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvRmluZFRJRkYvVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMSwxNCArMSwyMyBAQAogY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKLXByb2plY3QoVGVzdEZpbmRUSUZGIEMpCitwcm9qZWN0KFRlc3RGaW5kVElGRikKIGluY2x1ZGUoQ1Rlc3QpCiAKLWZpbmRfcGFja2FnZShUSUZGIFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKFRJRkYgUkVRVUlSRUQgQ09NUE9ORU5UUyBDWFgpCiAKIGFkZF9leGVjdXRhYmxlKHRlc3RfdGlmZl90Z3QgbWFpbi5jKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfdGlmZl90Z3QgVElGRjo6VElGRikKIGFkZF90ZXN0KE5BTUUgdGVzdF90aWZmX3RndCBDT01NQU5EIHRlc3RfdGlmZl90Z3QpCiAKK2FkZF9leGVjdXRhYmxlKHRlc3RfdGlmZnh4X3RndCBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3RpZmZ4eF90Z3QgVElGRjo6Q1hYKQorYWRkX3Rlc3QoTkFNRSB0ZXN0X3RpZmZ4eF90Z3QgQ09NTUFORCB0ZXN0X3RpZmZ4eF90Z3QpCisKIGFkZF9leGVjdXRhYmxlKHRlc3RfdGlmZl92YXIgbWFpbi5jKQogdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXModGVzdF90aWZmX3ZhciBQUklWQVRFICR7VElGRl9JTkNMVURFX0RJUlN9KQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfdGlmZl92YXIgUFJJVkFURSAke1RJRkZfTElCUkFSSUVTfSkKIGFkZF90ZXN0KE5BTUUgdGVzdF90aWZmX3ZhciBDT01NQU5EIHRlc3RfdGlmZl92YXIpCisKK2FkZF9leGVjdXRhYmxlKHRlc3RfdGlmZnh4X3ZhciBtYWluLmN4eCkKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHRlc3RfdGlmZnh4X3ZhciBQUklWQVRFICR7VElGRl9JTkNMVURFX0RJUlN9KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfdGlmZnh4X3ZhciBQUklWQVRFICR7VElGRl9MSUJSQVJJRVN9KQorYWRkX3Rlc3QoTkFNRSB0ZXN0X3RpZmZ4eF92YXIgQ09NTUFORCB0ZXN0X3RpZmZ4eF92YXIpCmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kVElGRi9UZXN0L21haW4uY3h4IGIvVGVzdHMvRmluZFRJRkYvVGVzdC9tYWluLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODBhMzFmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRmluZFRJRkYvVGVzdC9tYWluLmN4eApAQCAtMCwwICsxLDE2IEBACisjaW5jbHVkZSA8ZnN0cmVhbT4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHRpZmZpby5oeHg+CisKK2ludCBtYWluKCkKK3sKKyAgLyogV2l0aG91dCBhbnkgVElGRiBmaWxlIHRvIG9wZW4sIHRlc3QgdGhhdCB0aGUgY2FsbCBmYWlscyBhcworICAgICBleHBlY3RlZC4gIFRoaXMgdGVzdHMgdGhhdCBsaW5raW5nIHdvcmtlZC4gKi8KKyAgVElGRiogdGlmZiA9IFRJRkZPcGVuKCJpbnZhbGlkLnRpZmYiLCAiciIpOworICBhc3NlcnQoIXRpZmYpOworCisgIHN0ZDo6aWZzdHJlYW0gczsKKyAgVElGRiogdGlmZnh4ID0gVElGRlN0cmVhbU9wZW4oImludmFsaWQudGlmZiIsICZzKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kVnVsa2FuL1Rlc3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9GaW5kVnVsa2FuL1Rlc3QvQ01ha2VMaXN0cy50eHQKaW5kZXggMGIxM2Q1My4uOWQzNmEwZCAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFZ1bGthbi9UZXN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZpbmRWdWxrYW4vVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMTMsMyArMTMsMTIgQEAKIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHRlc3RfdmFyIFBSSVZBVEUgJHtWdWxrYW5fSU5DTFVERV9ESVJTfSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3ZhciBQUklWQVRFICR7VnVsa2FuX0xJQlJBUklFU30pCiBhZGRfdGVzdChOQU1FIHRlc3RfdmFyIENPTU1BTkQgdGVzdF92YXIpCisKK2lmKFZ1bGthbl9HTFNMQ19FWEVDVVRBQkxFKQorICBhZGRfdGVzdChOQU1FIHRlc3RfZ2xzbGMKKyAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0KKyAgICAiLURWVUxLQU5fR0xTTENfRVhFQ1VUQUJMRT0ke1Z1bGthbl9HTFNMQ19FWEVDVVRBQkxFfSIKKyAgICAiLURWVUxLQU5fR0xTTENfRVhFQ1VUQUJMRV9UQVJHRVQ9JDxUQVJHRVRfRklMRTpWdWxrYW46Omdsc2xjPiIKKyAgICAtUCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9SdW4tZ2xzbGMuY21ha2UiCisgICAgKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFZ1bGthbi9UZXN0L1J1bi1nbHNsYy5jbWFrZSBiL1Rlc3RzL0ZpbmRWdWxrYW4vVGVzdC9SdW4tZ2xzbGMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2ZWI5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZpbmRWdWxrYW4vVGVzdC9SdW4tZ2xzbGMuY21ha2UKQEAgLTAsMCArMSwyMCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTIpCisKK2Z1bmN0aW9uKHJ1bl9nbHNsYyBleGUgZXhlX2Rpc3BsYXkpCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7ZXhlfSAtLWhlbHAKKyAgICBPVVRQVVRfVkFSSUFCTEUgb3V0cHV0CisgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKKyAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CisgICAgKQorCisgIGlmKE5PVCByZXN1bHQgRVFVQUwgMCkKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIlJlc3VsdCBvZiAke2V4ZV9kaXNwbGF5fSAtLWhlbHAgaXMgJHtyZXN1bHR9LCBzaG91bGQgYmUgMCIpCisgIGVuZGlmKCkKKworICBpZihOT1Qgb3V0cHV0IE1BVENIRVMgIl5nbHNsYyAtIENvbXBpbGUgc2hhZGVycyBpbnRvIFNQSVItViIpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJPdXRwdXQgb2YgJHtleGVfZGlzcGxheX0gLS1oZWxwIGlzIFwiJHtvdXRwdXR9XCIsIHNob3VsZCBiZWdpbiB3aXRoIFwiZ2xzbGMgLSBDb21waWxlIHNoYWRlcnMgaW50byBTUElSLVZcIiIpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKworcnVuX2dsc2xjKCIke1ZVTEtBTl9HTFNMQ19FWEVDVVRBQkxFfSIgIlwke1ZVTEtBTl9HTFNMQ19FWEVDVVRBQkxFfSIpCitydW5fZ2xzbGMoIiR7VlVMS0FOX0dMU0xDX0VYRUNVVEFCTEVfVEFSR0VUfSIgIlZ1bGthbjo6Z2xzbGMiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFZ1bGthbi9UZXN0L21haW4uYyBiL1Rlc3RzL0ZpbmRWdWxrYW4vVGVzdC9tYWluLmMKaW5kZXggYjI5YzllYy4uMWJmZjY1MSAxMDA2NDQKLS0tIGEvVGVzdHMvRmluZFZ1bGthbi9UZXN0L21haW4uYworKysgYi9UZXN0cy9GaW5kVnVsa2FuL1Rlc3QvbWFpbi5jCkBAIC0yLDEwICsyLDEwIEBACiAKIGludCBtYWluKCkKIHsKLSAgVmtJbnN0YW5jZUNyZWF0ZUluZm8gaW5zdGFuY2VDcmVhdGVJbmZvID0ge307CisgIFZrSW5zdGFuY2VDcmVhdGVJbmZvIGluc3RhbmNlQ3JlYXRlSW5mbyA9IHsgMCB9OwogICBpbnN0YW5jZUNyZWF0ZUluZm8uc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9JTlNUQU5DRV9DUkVBVEVfSU5GTzsKIAotICBWa0FwcGxpY2F0aW9uSW5mbyBhcHBsaWNhdGlvbkluZm8gPSB7fTsKKyAgVmtBcHBsaWNhdGlvbkluZm8gYXBwbGljYXRpb25JbmZvID0geyAwIH07CiAgIGFwcGxpY2F0aW9uSW5mby5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0FQUExJQ0FUSU9OX0lORk87CiAgIGFwcGxpY2F0aW9uSW5mby5hcGlWZXJzaW9uID0gVktfQVBJX1ZFUlNJT05fMV8wOwogICBhcHBsaWNhdGlvbkluZm8uYXBwbGljYXRpb25WZXJzaW9uID0gVktfTUFLRV9WRVJTSU9OKDEsIDAsIDApOwpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZFgxMS9UZXN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvRmluZFgxMS9UZXN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDc2OTI3MWYuLjczMjViMzIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZpbmRYMTEvVGVzdC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9GaW5kWDExL1Rlc3QvQ01ha2VMaXN0cy50eHQKQEAgLTI5LDYgKzI5LDExIEBACiBzZXQoWDExX1gxMV9GT1VORCAke1gxMV9GT1VORH0pCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWDExKQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFhhdSkKK3Rlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyBYYXcpCit0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgeGNiKQordGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFgxMV94Y2IpCit0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgeGNiX2ljY2NtKQordGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIHhjYl94a2IpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGNvbXBvc2l0ZSkKIHRlc3RfeDExX2NvbXBvbmVudCh4MTFfY29tcG9uZW50cyBYZGFtYWdlKQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIFhkbWNwKQpAQCAtNDEsNiArNDYsOCBAQAogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzX2lnbm9yZSBYZnQpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGkpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGluZXJhbWEpCit0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgeGtiY29tbW9uKQordGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIHhrYmNvbW1vbl9YMTEpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWGtiKQogdGVzdF94MTFfY29tcG9uZW50KHgxMV9jb21wb25lbnRzIHhrYmZpbGUpCiB0ZXN0X3gxMV9jb21wb25lbnQoeDExX2NvbXBvbmVudHMgWG11KQpAQCAtNjEsNiArNjgsMTAgQEAKICMgTm90IGluY2x1ZGVkIGluIFgxMV9MSUJSQVJJRVMuCiBmb3JlYWNoKGxpYgogICAgIFhhdQorICAgIFhhdworICAgIHhjYgorICAgIFgxMV94Y2IKKyAgICB4Y2JfaWNjY20KICAgICBYY29tcG9zaXRlCiAgICAgWGRhbWFnZQogICAgIFhkbWNwCkBAIC02OSw2ICs4MCw4IEBACiAgICAgWGZpeGVzCiAgICAgWGkKICAgICBYaW5lcmFtYQorICAgIHhrYmNvbW1vbgorICAgIHhrYmNvbW1vbl9YMTEKICAgICBYa2IKICAgICB4a2JmaWxlCiAgICAgWG11CmRpZmYgLS1naXQgYS9UZXN0cy9GaW5kWDExL1Rlc3QvbWFpbi5jIGIvVGVzdHMvRmluZFgxMS9UZXN0L21haW4uYwppbmRleCBjODE0NGUwLi5mOGM3MjNjIDEwMDY0NAotLS0gYS9UZXN0cy9GaW5kWDExL1Rlc3QvbWFpbi5jCisrKyBiL1Rlc3RzL0ZpbmRYMTEvVGVzdC9tYWluLmMKQEAgLTMwOCw2ICszMDgsMjQgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgSEFWRV9YMTFfWGF3CisjICBpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjICBpbmNsdWRlIDxYMTEvWGF3L0JveC5oPgorCitzdGF0aWMgdm9pZCB0ZXN0X1hhdyh2b2lkKQoreworICBYcm1PcHRpb25EZXNjUmVjIG9wdF90YWJsZVtdID0geyB7IE5VTEwgfSB9OworCisgIFdpZGdldCB0b3BsZXZlbDsKKyAgdG9wbGV2ZWwgPQorICAgIFh0SW5pdGlhbGl6ZSgidGVzdCIsICJ0ZXN0Iiwgb3B0X3RhYmxlLCBYdE51bWJlcihvcHRfdGFibGUpLCBOVUxMLCBOVUxMKTsKKyAgV2lkZ2V0IGJveCA9CisgICAgWHRDcmVhdGVNYW5hZ2VkV2lkZ2V0KCJ0ZXN0Ym94IiwgYm94V2lkZ2V0Q2xhc3MsIHRvcGxldmVsLCBOVUxMLCAwKTsKKyAgcmV0dXJuOworfQorCisjZW5kaWYKKwogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQpAQCAtMzkyLDYgKzQxMCw5IEBACiAjaWZkZWYgSEFWRV9YMTFfWHYKICAgICB0ZXN0X1h2LAogI2VuZGlmCisjaWZkZWYgSEFWRV9YMTFfWGF3CisgICAgdGVzdF9YYXcsCisjZW5kaWYKICAgICBOVUxMLAogICB9OwogCmRpZmYgLS1naXQgYS9UZXN0cy9Gb3J0cmFuTW9kdWxlcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZvcnRyYW5Nb2R1bGVzL0NNYWtlTGlzdHMudHh0CmluZGV4IGQwNTZiNDMuLmI3YTZmNjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZvcnRyYW5Nb2R1bGVzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZvcnRyYW5Nb2R1bGVzL0NNYWtlTGlzdHMudHh0CkBAIC0yMSw3ICsyMSw3IEBACiBzdWJtb2R1bGUgKCBwYXJlbnQgKSBjaGlsZAogY29udGFpbnMKICAgbW9kdWxlIHByb2NlZHVyZSBpZAotICAgIGYgPSB4CisgICAgaWQgPSB4CiAgIGVuZCBwcm9jZWR1cmUgaWQKIGVuZCBzdWJtb2R1bGUgY2hpbGQKIHByb2dyYW0gbWFpbgpkaWZmIC0tZ2l0IGEvVGVzdHMvRm9ydHJhbk1vZHVsZXMvRXhlY3V0YWJsZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZvcnRyYW5Nb2R1bGVzL0V4ZWN1dGFibGUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGUwOGQ4Ni4uZjMxYTNlNiAxMDA2NDQKLS0tIGEvVGVzdHMvRm9ydHJhbk1vZHVsZXMvRXhlY3V0YWJsZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Gb3J0cmFuTW9kdWxlcy9FeGVjdXRhYmxlL0NNYWtlTGlzdHMudHh0CkBAIC0xLDYgKzEsNiBAQAogaW5jbHVkZV9kaXJlY3Rvcmllcygke0xpYnJhcnlfTU9ERElSfSkKIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtFeHRlcm5hbF9CSU5BUllfRElSfSkKLWxpbmtfZGlyZWN0b3JpZXMoJHtFeHRlcm5hbF9CSU5BUllfRElSfSkKK2xpbmtfZGlyZWN0b3JpZXMoJHtFeHRlcm5hbF9CSU5BUllfRElSfS8ke0NNQUtFX0NGR19JTlRESVJ9KQogCiBhZGRfZXhlY3V0YWJsZShzdWJkaXJfZXhlMiBtYWluLmY5MCkKIHRhcmdldF9saW5rX2xpYnJhcmllcyhzdWJkaXJfZXhlMiBzdWJkaXJfbW9kcyBzdWJkaXJfbW9kczIpCmRpZmYgLS1naXQgYS9UZXN0cy9Gb3J0cmFuT25seS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L0NNYWtlTGlzdHMudHh0CmluZGV4IGRlODg3ZmEuLjYzN2Y1ODEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0ZvcnRyYW5Pbmx5L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDQgKzEsNCBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZCAoVkVSU0lPTiAyLjgpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdChGb3J0cmFuT25seSBGb3J0cmFuKQogbWVzc2FnZSgiQ1RFU1RfRlVMTF9PVVRQVVQgIikKIApAQCAtNTEsNDAgKzUxLDM2IEBACiAgICkKIGFkZF9kZXBlbmRlbmNpZXMoY2hlY2tzYXloZWxsbyBzYXloZWxsbykKIAotIyBFeGNsdWRlIHRoaXMgdGVzdCBvbiBJQk0gWEwgZm9yIG5vdyBiZWNhdXNlIHRoZSBjaGVjayBzdHJhbmdlbHkKLSMgZmFpbHMgd2l0aCAnbGQ6IDA3MDYtMDI5IFVzZSBhIG51bWJlciB3aXRoIHRoZSAtSCBmbGFnJy4KLWlmKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMIFhMKQotICBzZXQoZXJyX2xvZyAke0NNQUtFX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvQ01ha2VFcnJvci5sb2cpCi0gIGZpbGUoUkVNT1ZFICIke2Vycl9sb2d9IikKLSAgaW5jbHVkZShDaGVja0ZvcnRyYW5Tb3VyY2VDb21waWxlcykKLSAgdW5zZXQoSEFWRV9QUklOVCBDQUNIRSkKLSAgQ0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVMoW1sKK3NldChlcnJfbG9nICR7Q01BS0VfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9DTWFrZUVycm9yLmxvZykKK2ZpbGUoUkVNT1ZFICIke2Vycl9sb2d9IikKK2luY2x1ZGUoQ2hlY2tGb3J0cmFuU291cmNlQ29tcGlsZXMpCit1bnNldChIQVZFX1BSSU5UIENBQ0hFKQorQ0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVMoW1sKICAgICAgIFBST0dSQU0gVEVTVF9IQVZFX1BSSU5UCiAgICAgICAgIFBSSU5UICosICdIZWxsbycKICAgICAgIEVORAogXV0gSEFWRV9QUklOVCkKLSAgaWYoTk9UIEhBVkVfUFJJTlQpCi0gICAgaWYoRVhJU1RTICIke2Vycl9sb2d9IikKLSAgICAgIGZpbGUoUkVBRCAiJHtlcnJfbG9nfSIgZXJyKQotICAgIGVuZGlmKCkKLSAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBlcnIgIiAgJHtlcnJ9IikKLSAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkNIRUNLX0ZvcnRyYW5fU09VUkNFX0NPTVBJTEVTIGZvciBIQVZFX1BSSU5UIGZhaWxlZDpcbiIKLSAgICAgICIke2Vycn0iKQoraWYoTk9UIEhBVkVfUFJJTlQpCisgIGlmKEVYSVNUUyAiJHtlcnJfbG9nfSIpCisgICAgZmlsZShSRUFEICIke2Vycl9sb2d9IiBlcnIpCiAgIGVuZGlmKCkKKyAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgZXJyICIgICR7ZXJyfSIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ0hFQ0tfRm9ydHJhbl9TT1VSQ0VfQ09NUElMRVMgZm9yIEhBVkVfUFJJTlQgZmFpbGVkOlxuIgorICAgICIke2Vycn0iKQorZW5kaWYoKQogCi0gIHVuc2V0KEZvcnRyYW5fQk9HVVNfRkxBRyBDQUNIRSkKLSAgaW5jbHVkZShDaGVja0ZvcnRyYW5Db21waWxlckZsYWcpCi0gIENIRUNLX0ZvcnRyYW5fQ09NUElMRVJfRkxBRygtX3RoaXNfaXNfbm90X2FfZmxhZ18gRm9ydHJhbl9CT0dVU19GTEFHKQotICBpZiAoRm9ydHJhbl9CT0dVU19GTEFHKQotICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ0hFQ0tfRm9ydHJhbl9DT01QSUxFUl9GTEFHKCkgc3VjY2VlZGVkLCBidXQgc2hvdWxkIGhhdmUgZmFpbGVkIikKLSAgZW5kaWYoKQordW5zZXQoRm9ydHJhbl9CT0dVU19GTEFHIENBQ0hFKQoraW5jbHVkZShDaGVja0ZvcnRyYW5Db21waWxlckZsYWcpCitDSEVDS19Gb3J0cmFuX0NPTVBJTEVSX0ZMQUcoLV90aGlzX2lzX25vdF9hX2ZsYWdfIEZvcnRyYW5fQk9HVVNfRkxBRykKK2lmIChGb3J0cmFuX0JPR1VTX0ZMQUcpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ0hFQ0tfRm9ydHJhbl9DT01QSUxFUl9GTEFHKCkgc3VjY2VlZGVkLCBidXQgc2hvdWxkIGhhdmUgZmFpbGVkIikKK2VuZGlmKCkKIAotICB1bnNldChGb3J0cmFuX1JVTl9GTEFHIENBQ0hFKQotICBpbmNsdWRlKENoZWNrRm9ydHJhblNvdXJjZVJ1bnMpCi0gIGNoZWNrX2ZvcnRyYW5fc291cmNlX3J1bnMoInByb2dyYW0gYTsgZW5kIHByb2dyYW0iIEZvcnRyYW5fUlVOX0ZMQUcgU1JDX0VYVCBGOTApCi0gIGlmKE5PVCBGb3J0cmFuX1JVTl9GTEFHKQotICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ0hFQ0tfRm9ydHJhbl9TT1VSQ0VfUlVOUygpIGZhaWxlZCIpCi0gIGVuZGlmKCkKK3Vuc2V0KEZvcnRyYW5fUlVOX0ZMQUcgQ0FDSEUpCitpbmNsdWRlKENoZWNrRm9ydHJhblNvdXJjZVJ1bnMpCitjaGVja19mb3J0cmFuX3NvdXJjZV9ydW5zKCJwcm9ncmFtIGE7IGVuZCBwcm9ncmFtIiBGb3J0cmFuX1JVTl9GTEFHIFNSQ19FWFQgRjkwKQoraWYoTk9UIEZvcnRyYW5fUlVOX0ZMQUcpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ0hFQ0tfRm9ydHJhbl9TT1VSQ0VfUlVOUygpIGZhaWxlZCIpCiBlbmRpZigpCiAKICMgVGVzdCBnZW5lcmF0aW9uIG9mIHByZXByb2Nlc3NlZCBzb3VyY2VzLgpAQCAtMTAzLDExICs5OSwxMSBAQAogCiAgICAgIyBDdXN0b20gdGFyZ2V0IHRvIHRyeSBwcmVwcm9jZXNzaW5nIGludm9jYXRpb24uCiAgICAgYWRkX2N1c3RvbV90YXJnZXQodGVzdF9wcmVwcm9jZXNzICR7TUFZQkVfQUxMfQotICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZSBDTWFrZUZpbGVzL3ByZXByb2Nlc3MuZGlyL3ByZXByb2Nlc3MuRi5pCisgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLWYgQ01ha2VGaWxlcy9wcmVwcm9jZXNzLmRpci9wcmVwcm9jZXNzLkYuaQogICAgICAgQ09NTUFORCAke0NNQUtFX01BS0VfUFJPR1JBTX0gcHJlcHJvY2Vzcy5pCiAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLVAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3Rlc3RfcHJlcHJvY2Vzcy5jbWFrZQogICAgICAgIyBSZW1vdmUgYm9ndXMgZmlsZSBzb21lIGNvbXBpbGVycyBsZWF2ZSBiZWhpbmQuCi0gICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wcmVwcm9jZXNzLnMKKyAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtZiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcHJlcHJvY2Vzcy5zCiAgICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KICAgICAgICkKICAgZW5kaWYoKQpAQCAtMTIwLDMgKzExNiw0NiBAQAogICBzZXRfcHJvcGVydHkoVEFSR0VUIEludGVsSWZEZWYgUFJPUEVSVFkgRm9ydHJhbl9GT1JNQVQgRklYRUQpCiAgIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKEludGVsSWZEZWYgUFJJVkFURSBTT01FX0RFRikKIGVuZGlmKCkKKworIyBTa2lwIHRoZXNlIHRlc3RzIGlmIGNvbXBpbGVyL3ZlcnNpb24gZG9lc24ndCBoYXZlIHByZXByb2Nlc3NpbmcgZmxhZ3MKK2lmKChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiIEFORCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDQuNCkKKyAgT1IgKENNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUQgU1RSRVFVQUwgIlhMIiBBTkQgQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAxNS4xLjYpKQorICBzZXQodGVzdF9wcF9mbGFncyAwKQorZWxzZSgpCisgIHNldCh0ZXN0X3BwX2ZsYWdzIDEpCitlbmRpZigpCisKK2lmKHRlc3RfcHBfZmxhZ3MpCisgICMgVGVzdCB0aGF0IHdlIGNhbiBhbHdheXMgcHJlcHJvY2VzcyBhIHRhcmdldAorICBhZGRfZXhlY3V0YWJsZShwcmVwcm9jZXNzX3RhcmdldCBwcmVwcm9jZXNzMi5mKQorICBzZXRfcHJvcGVydHkoVEFSR0VUIHByZXByb2Nlc3NfdGFyZ2V0IFBST1BFUlRZIEZvcnRyYW5fUFJFUFJPQ0VTUyBPTikKKworICAjIFRlc3QgdGhhdCB3ZSBjYW4gcHJlcHJvY2VzcyBhIHNpbmdsZSBzb3VyY2UgZmlsZQorICBhZGRfZXhlY3V0YWJsZShwcmVwcm9jZXNzX3NvdXJjZSBwcmVwcm9jZXNzMy5mKQorICBzZXRfcHJvcGVydHkoU09VUkNFIHByZXByb2Nlc3MzLmYgUFJPUEVSVFkgRm9ydHJhbl9QUkVQUk9DRVNTIE9OKQorZW5kaWYoKQorCisjIFRlc3QgdGhhdCBuZWl0aGVyIHRoZSBjb21waWxlciBub3IgQ01ha2UgcGVyZm9ybXMgdW5uZWNlc3NhcnkgcHJlcHJvY2Vzc2luZy4KK2FkZF9saWJyYXJ5KG5vX3ByZXByb2Nlc3NfdGFyZ2V0X2xvd2VyIFNUQVRJQyBub19wcmVwcm9jZXNzX3RhcmdldF9sb3dlci5mKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhub19wcmVwcm9jZXNzX3RhcmdldF9sb3dlciBQUklWQVRFIC1ESU5URUdFUj1ub25zZW5zZSkKK3NldF9wcm9wZXJ0eShUQVJHRVQgbm9fcHJlcHJvY2Vzc190YXJnZXRfbG93ZXIgUFJPUEVSVFkgRm9ydHJhbl9QUkVQUk9DRVNTIE9GRikKK2FkZF9saWJyYXJ5KG5vX3ByZXByb2Nlc3Nfc291cmNlX2xvd2VyIFNUQVRJQyBub19wcmVwcm9jZXNzX3NvdXJjZV9sb3dlci5mKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhub19wcmVwcm9jZXNzX3NvdXJjZV9sb3dlciBQUklWQVRFIC1ESU5URUdFUj1ub25zZW5zZSkKK3NldF9wcm9wZXJ0eShTT1VSQ0Ugbm9fcHJlcHJvY2Vzc19zb3VyY2VfbG93ZXIuZiBQUk9QRVJUWSBGb3J0cmFuX1BSRVBST0NFU1MgT0ZGKQorCisjIFRlc3QgdGhhdCB3ZSBjYW4gZXhwbGljaXRseSBub3QgcHJlcHJvY2VzcyBhIHRhcmdldCBvciBzb3VyY2UuCisjIFRoaXMgd2lsbCBub3Qgd29yayBvbiBjZXJ0YWluIGNvbXBpbGVycyBkdWUgdG8gZWl0aGVyIG1pc3NpbmcgYQorIyAiZG9uJ3QgcHJlcHJvY2VzcyIgZmxhZywgb3IgZHVlIHRvIGNob2ljZSBvZiBmaWxlIGV4dGVuc2lvbi4KK2lmKHRlc3RfcHBfZmxhZ3MgQU5EIE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIE1BVENIRVMgIihGbGFuZ3xOQUd8UEdJfFN1blByb3xYTCkiKQorICBhZGRfbGlicmFyeShub19wcmVwcm9jZXNzX3RhcmdldCBTVEFUSUMgbm9fcHJlcHJvY2Vzc190YXJnZXRfdXBwZXIuRikKKyAgdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhub19wcmVwcm9jZXNzX3RhcmdldCBQUklWQVRFIC1ESU5URUdFUj1ub25zZW5zZSkKKyAgYWRkX2xpYnJhcnkobm9fcHJlcHJvY2Vzc19zb3VyY2UgU1RBVElDIG5vX3ByZXByb2Nlc3Nfc291cmNlX3VwcGVyLkYpCisgIHRhcmdldF9jb21waWxlX29wdGlvbnMobm9fcHJlcHJvY2Vzc19zb3VyY2UgUFJJVkFURSAtRElOVEVHRVI9bm9uc2Vuc2UpCisgIGlmKE5PVCBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJDcmF5IgorICAgICAgQU5EIE5PVCAiJHtDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEfTske0NNQUtFX0ZvcnRyYW5fU0lNVUxBVEVfSUR9IiBTVFJFUVVBTCAiSW50ZWw7TVNWQyIpCisgICAgdGFyZ2V0X3NvdXJjZXMobm9fcHJlcHJvY2Vzc190YXJnZXQgUFJJVkFURSBub19wcmVwcm9jZXNzX3RhcmdldF9mcHAuZnBwKQorICAgIHRhcmdldF9zb3VyY2VzKG5vX3ByZXByb2Nlc3Nfc291cmNlIFBSSVZBVEUgbm9fcHJlcHJvY2Vzc19zb3VyY2VfZnBwLmZwcCkKKyAgZW5kaWYoKQorICBzZXRfcHJvcGVydHkoVEFSR0VUIG5vX3ByZXByb2Nlc3NfdGFyZ2V0IFBST1BFUlRZIEZvcnRyYW5fUFJFUFJPQ0VTUyBPRkYpCisgIHNldF9wcm9wZXJ0eShTT1VSQ0Ugbm9fcHJlcHJvY2Vzc19zb3VyY2VfdXBwZXIuRiBub19wcmVwcm9jZXNzX3NvdXJjZV9mcHAuZnBwIFBST1BFUlRZIEZvcnRyYW5fUFJFUFJPQ0VTUyBPRkYpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3NvdXJjZV9mcHAuZnBwIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc19zb3VyY2VfZnBwLmZwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ4OTAyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc19zb3VyY2VfZnBwLmZwcApAQCAtMCwwICsxLDMgQEAKKyAgICAgIFNVQlJPVVRJTkUgTk9QUkVQUk9DRVNTX1NPVVJDRV9GUFAKKyAgICAgIElOVEVHRVIgRgorICAgICAgRU5ECmRpZmYgLS1naXQgYS9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3NvdXJjZV9sb3dlci5mIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc19zb3VyY2VfbG93ZXIuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjA4NzgyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc19zb3VyY2VfbG93ZXIuZgpAQCAtMCwwICsxLDMgQEAKKyAgICAgIFNVQlJPVVRJTkUgTk9QUkVQUk9DRVNTX1NPVVJDRV9MT1dFUgorICAgICAgSU5URUdFUiBGCisgICAgICBFTkQKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3Nfc291cmNlX3VwcGVyLkYgYi9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3NvdXJjZV91cHBlci5GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDg1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3NvdXJjZV91cHBlci5GCkBAIC0wLDAgKzEsMyBAQAorICAgICAgU1VCUk9VVElORSBOT1BSRVBST0NFU1NfU09VUkNFX1VQUEVSCisgICAgICBJTlRFR0VSIEYKKyAgICAgIEVORApkaWZmIC0tZ2l0IGEvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc190YXJnZXRfZnBwLmZwcCBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3NfdGFyZ2V0X2ZwcC5mcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllNmUzYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3NfdGFyZ2V0X2ZwcC5mcHAKQEAgLTAsMCArMSwzIEBACisgICAgICBTVUJST1VUSU5FIE5PUFJFUFJPQ0VTU19UQVJHRVRfRlBQCisgICAgICBJTlRFR0VSIEYKKyAgICAgIEVORApkaWZmIC0tZ2l0IGEvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc190YXJnZXRfbG93ZXIuZiBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3NfdGFyZ2V0X2xvd2VyLmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyM2E3MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL0ZvcnRyYW5Pbmx5L25vX3ByZXByb2Nlc3NfdGFyZ2V0X2xvd2VyLmYKQEAgLTAsMCArMSwzIEBACisgICAgICBTVUJST1VUSU5FIE5PUFJFUFJPQ0VTU19UQVJHRVRfTE9XRVIKKyAgICAgIElOVEVHRVIgRgorICAgICAgRU5ECmRpZmYgLS1naXQgYS9UZXN0cy9Gb3J0cmFuT25seS9ub19wcmVwcm9jZXNzX3RhcmdldF91cHBlci5GIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc190YXJnZXRfdXBwZXIuRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGVlMDRkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvRm9ydHJhbk9ubHkvbm9fcHJlcHJvY2Vzc190YXJnZXRfdXBwZXIuRgpAQCAtMCwwICsxLDMgQEAKKyAgICAgIFNVQlJPVVRJTkUgTk9QUkVQUk9DRVNTX1RBUkdFVF9VUFBFUgorICAgICAgSU5URUdFUiBGCisgICAgICBFTkQKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZvcnRyYW5Pbmx5L3ByZXByb2Nlc3MyLmYgYi9UZXN0cy9Gb3J0cmFuT25seS9wcmVwcm9jZXNzMi5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OTVkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Gb3J0cmFuT25seS9wcmVwcm9jZXNzMi5mCkBAIC0wLDAgKzEsNCBAQAorI2RlZmluZSBpbnQgSU5URUdFUgorICAgICAgIFBST0dSQU0gUFJFUFJPCisgICAgICAgaW50IGYKKyAgICAgICBFTkQKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZvcnRyYW5Pbmx5L3ByZXByb2Nlc3MzLmYgYi9UZXN0cy9Gb3J0cmFuT25seS9wcmVwcm9jZXNzMy5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OTVkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Gb3J0cmFuT25seS9wcmVwcm9jZXNzMy5mCkBAIC0wLDAgKzEsNCBAQAorI2RlZmluZSBpbnQgSU5URUdFUgorICAgICAgIFBST0dSQU0gUFJFUFJPCisgICAgICAgaW50IGYKKyAgICAgICBFTkQKZGlmZiAtLWdpdCBhL1Rlc3RzL0dlbmVyYXRvckV4cHJlc3Npb24vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9HZW5lcmF0b3JFeHByZXNzaW9uL0NNYWtlTGlzdHMudHh0CmluZGV4IDlkNTEzNDIuLmViYmUyODggMTAwNjQ0Ci0tLSBhL1Rlc3RzL0dlbmVyYXRvckV4cHJlc3Npb24vQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvR2VuZXJhdG9yRXhwcmVzc2lvbi9DTWFrZUxpc3RzLnR4dApAQCAtNDAsOSArNDAsOSBAQAogICAgIC1EdGVzdF9hbmRfMF9pbnZhbGlkY29udGVudD0kPEFORDowLGludmFsaWRjb250ZW50PgogICAgIC1EdGVzdF9jb25maWdfMD0kPENPTkZJRzokPENPTkZJR1VSQVRJT04+eD4KICAgICAtRHRlc3RfY29uZmlnXzE9JDxDT05GSUc6JDxDT05GSUdVUkFUSU9OPj4KLSAgICAtRHRlc3RfY29uZmlnX2RlYnVnPSQ8Q09ORklHOkRlYnVnPiQ8Q09ORklHOkRFQlVHPiQ8Q09ORklHOkRlQnVHPgotICAgIC1EdGVzdF9jb25maWdfcmVsZWFzZT0kPENPTkZJRzpSZWxlYXNlPiQ8Q09ORklHOlJFTEVBU0U+JDxDT05GSUc6UmVMZUFzRT4KLSAgICAtRHRlc3RfY29uZmlnX3JlbHdpdGhkZWJpbmZvPSQ8Q09ORklHOlJlbFdpdGhEZWJJbmZvPiQ8Q09ORklHOlJFTFdJVEhERUJJTkZPPiQ8Q09ORklHOnJlbHdpdGhkZWJpbmZvPgorICAgIC1EdGVzdF9jb25maWdfZGVidWc9JDxDT05GSUc6RGVidWcsREVCVUcsRGVCdUc+CisgICAgLUR0ZXN0X2NvbmZpZ19yZWxlYXNlPSQ8Q09ORklHOlJlbGVhc2U+JDxDT05GSUc6UkVMRUFTRSxSZUxlQXNFPgorICAgIC1EdGVzdF9jb25maWdfcmVsd2l0aGRlYmluZm89JDxDT05GSUc6UmVsV2l0aERlYkluZm8sUkVMV0lUSERFQklORk8+JDxDT05GSUc6cmVsd2l0aGRlYmluZm8+CiAgICAgLUR0ZXN0X2NvbmZpZ19taW5zaXplcmVsPSQ8Q09ORklHOk1pblNpemVSZWw+JDxDT05GSUc6TUlOU0laRVJFTD4kPENPTkZJRzptaW5zaXplcmVsPgogICAgIC1EdGVzdF9ub3RfMD0kPE5PVDowPgogICAgIC1EdGVzdF9ub3RfMT0kPE5PVDoxPgpAQCAtMTgwLDkgKzE4MCw3IEBACiBzZXRfcHJvcGVydHkoVEFSR0VUIGltcG9ydGVkMyBBUFBFTkQgUFJPUEVSVFkKICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgJDwkPENPTkZJRzpERUJVRz46JDxUQVJHRVRfUFJPUEVSVFk6aW1wb3J0ZWQxLElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTPj4pCiBzZXRfcHJvcGVydHkoVEFSR0VUIGltcG9ydGVkMyBBUFBFTkQgUFJPUEVSVFkKLSAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgJDwkPENPTkZJRzpSRUxFQVNFPjokPFRBUkdFVF9QUk9QRVJUWTppbXBvcnRlZDIsSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVM+PikKLXNldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0ZWQzIEFQUEVORCBQUk9QRVJUWQotICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAkPCQ8Q09ORklHOlJFTFdJVEhERUJJTkZPPjokPFRBUkdFVF9QUk9QRVJUWTppbXBvcnRlZDIsSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVM+PikKKyAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgJDwkPENPTkZJRzpSRUxFQVNFLFJFTFdJVEhERUJJTkZPPjokPFRBUkdFVF9QUk9QRVJUWTppbXBvcnRlZDIsSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVM+PikKIHNldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0ZWQzIEFQUEVORCBQUk9QRVJUWQogICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAkPCQ8Q09ORklHOk1JTlNJWkVSRUw+OiQ8VEFSR0VUX1BST1BFUlRZOmltcG9ydGVkMixJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUz4+KQogCmRpZmYgLS1naXQgYS9UZXN0cy9HZW5lcmF0b3JFeHByZXNzaW9uL2NoZWNrLXBhcnQzLmNtYWtlIGIvVGVzdHMvR2VuZXJhdG9yRXhwcmVzc2lvbi9jaGVjay1wYXJ0My5jbWFrZQppbmRleCA0ZmI3MzA4Li41NTcxYzNkIDEwMDY0NAotLS0gYS9UZXN0cy9HZW5lcmF0b3JFeHByZXNzaW9uL2NoZWNrLXBhcnQzLmNtYWtlCisrKyBiL1Rlc3RzL0dlbmVyYXRvckV4cHJlc3Npb24vY2hlY2stcGFydDMuY21ha2UKQEAgLTksMTEgKzksMTEgQEAKIGNoZWNrKHRlc3RfdmVyc2lvbl9lcXVhbF8yICIxIikKIAogaWYoY29uZmlnIEFORCBOT1QgY29uZmlnIFNUUkVRVUFMIE5vQ29uZmlnKQotICBpZihOT1QgIiR7dGVzdF9pbXBvcnRlZF9pbmNsdWRlc30iIE1BVENIRVMgIl47Ki9pbXBvcnRlZFsxMl0vaW5jbHVkZS93aXRoIHNwYWNlOyokIikKKyAgaWYoTk9UICIke3Rlc3RfaW1wb3J0ZWRfaW5jbHVkZXN9IiBNQVRDSEVTICJeW147XSovaW1wb3J0ZWRbMTJdL2luY2x1ZGUvd2l0aCBzcGFjZSQiKQogICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAidGVzdF9pbXBvcnRlZF9pbmNsdWRlcyBpcyBub3QgY29ycmVjdDogJHt0ZXN0X2ltcG9ydGVkX2luY2x1ZGVzfSIpCiAgIGVuZGlmKCkKIGVsc2UoKQotICBpZihOT1QgIiR7dGVzdF9pbXBvcnRlZF9pbmNsdWRlc30iIE1BVENIRVMgIl47OzskIikKKyAgaWYoTk9UICIke3Rlc3RfaW1wb3J0ZWRfaW5jbHVkZXN9IiBNQVRDSEVTICJeJCIpCiAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJ0ZXN0X2ltcG9ydGVkX2luY2x1ZGVzIGlzIG5vdCBhbiBlbXB0eSBsaXN0OiAke3Rlc3RfaW1wb3J0ZWRfaW5jbHVkZXN9IikKICAgZW5kaWYoKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvR2hzTXVsdGkvR2hzTXVsdGlTcmNHcm91cHMvc3RhbmRhcmQuaCBiL1Rlc3RzL0doc011bHRpL0doc011bHRpU3JjR3JvdXBzL3N0YW5kYXJkLmgKaW5kZXggMjc3M2E1NS4uNjY1MjJkNSAxMDA2NDQKLS0tIGEvVGVzdHMvR2hzTXVsdGkvR2hzTXVsdGlTcmNHcm91cHMvc3RhbmRhcmQuaAorKysgYi9UZXN0cy9HaHNNdWx0aS9HaHNNdWx0aVNyY0dyb3Vwcy9zdGFuZGFyZC5oCkBAIC0xICsxIEBACi0jZGVmaW5lIHNvbXRoaW5nCisjZGVmaW5lIHNvbWV0aGluZwpkaWZmIC0tZ2l0IGEvVGVzdHMvR2hzTXVsdGkvR2hzTXVsdGlTcmNHcm91cHMvdGVzdDMuaCBiL1Rlc3RzL0doc011bHRpL0doc011bHRpU3JjR3JvdXBzL3Rlc3QzLmgKaW5kZXggMjc3M2E1NS4uNjY1MjJkNSAxMDA2NDQKLS0tIGEvVGVzdHMvR2hzTXVsdGkvR2hzTXVsdGlTcmNHcm91cHMvdGVzdDMuaAorKysgYi9UZXN0cy9HaHNNdWx0aS9HaHNNdWx0aVNyY0dyb3Vwcy90ZXN0My5oCkBAIC0xICsxIEBACi0jZGVmaW5lIHNvbXRoaW5nCisjZGVmaW5lIHNvbWV0aGluZwpkaWZmIC0tZ2l0IGEvVGVzdHMvSW5jbHVkZURpcmVjdG9yaWVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvSW5jbHVkZURpcmVjdG9yaWVzL0NNYWtlTGlzdHMudHh0CmluZGV4IDc2MWM0MDUuLmViMDg2NzYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0luY2x1ZGVEaXJlY3Rvcmllcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9JbmNsdWRlRGlyZWN0b3JpZXMvQ01ha2VMaXN0cy50eHQKQEAgLTY1LDYgKzY1LDM5IEBACiAgICAgUFJPUEVSVElFUyBDT01QSUxFX0ZMQUdTICItSVRhclByb3AiKQogZW5kaWYoKQogCisjIFRlc3QgZXNjYXBpbmcgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGluY2x1ZGUgZGlyZWN0b3J5IHBhdGhzLgorc2V0KHNwZWNpYWxfY2hhcnMgIn5AJSZ7fSgpISciKQoraWYoTk9UIENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCAiV2F0Y29tIFdNYWtlIikKKyAgIyBXYXRjb20gc2VlbXMgdG8gaGF2ZSBubyB3YXkgdG8gZW5jb2RlIHRoZXNlIGNoYXJhY3RlcnMuCisgIHN0cmluZyhBUFBFTkQgc3BlY2lhbF9jaGFycyAiIz1bXSIpCitlbmRpZigpCitpZihOT1QgKE1JTkdXIEFORCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiKFVuaXh8TVNZUykgTWFrZWZpbGVzIikpCisgICMgRklYTUU6IERlcGVuZGVuY2llcyB3b3JrIGJ1dCBjb21tYW5kLWxpbmUgZ2VuZXJhdGlvbiBkb2VzIG5vdCBoYW5kbGUgJyQnLgorICBzdHJpbmcoQVBQRU5EIHNwZWNpYWxfY2hhcnMgIiQiKQorZW5kaWYoKQoraWYoTk9UIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICIoQm9ybGFuZHxOTWFrZSkgTWFrZWZpbGVzIikKKyAgIyBOTWFrZSBhbmQgQm9ybGFuZCBzZWVtIHRvIGhhdmUgbm8gd2F5IHRvIGVuY29kZSBhIHNpbmdsZSAnXicuCisgIHN0cmluZyhBUFBFTkQgc3BlY2lhbF9jaGFycyAiXiIpCitlbmRpZigpCitpZihOT1QgQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8gOSAyMDA4fFdhdGNvbSBXTWFrZSIpCisgICMgVGhlIHZjcHJvaiBmb3JtYXQgc2VwYXJhdGVzIHZhbHVlcyB3aXRoICcsJy4KKyAgc3RyaW5nKEFQUEVORCBzcGVjaWFsX2NoYXJzICIsIikKK2VuZGlmKCkKK2lmKE5PVCBXSU4zMiBBTkQgTk9UIENZR1dJTikKKyAgc3RyaW5nKEFQUEVORCBzcGVjaWFsX2NoYXJzICIqPzw+IikKK2VuZGlmKCkKK3NldChzcGVjaWFsX2RpciAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3NwZWNpYWwtJHtzcGVjaWFsX2NoYXJzfS1pbmNsdWRlIikKK2ZpbGUoV1JJVEUgIiR7c3BlY2lhbF9kaXJ9L1NwZWNpYWxEaXIuaCIgIiNkZWZpbmUgU1BFQ0lBTF9ESVJfSFxuIikKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKEluY2x1ZGVEaXJlY3RvcmllcyBQUklWQVRFICIke3NwZWNpYWxfZGlyfSIpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhJbmNsdWRlRGlyZWN0b3JpZXMgUFJJVkFURSBJTkNMVURFX1NQRUNJQUxfRElSKQorCitpZihNQUtFX1NVUFBPUlRTX1NQQUNFUykKKyAgc2V0KHNwZWNpYWxfc3BhY2VfZGlyICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vc3BlY2lhbC1zcGFjZSAke3NwZWNpYWxfY2hhcnN9LWluY2x1ZGUiKQorICBmaWxlKFdSSVRFICIke3NwZWNpYWxfc3BhY2VfZGlyfS9TcGVjaWFsU3BhY2VEaXIuaCIgIiNkZWZpbmUgU1BFQ0lBTF9TUEFDRV9ESVJfSFxuIikKKyAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoSW5jbHVkZURpcmVjdG9yaWVzIFBSSVZBVEUgIiR7c3BlY2lhbF9zcGFjZV9kaXJ9IikKKyAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoSW5jbHVkZURpcmVjdG9yaWVzIFBSSVZBVEUgSU5DTFVERV9TUEVDSUFMX1NQQUNFX0RJUikKK2VuZGlmKCkKKwogYWRkX2xpYnJhcnkob3JkZXJ0ZXN0IG9yZGVydGVzdC5jcHApCiB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhvcmRlcnRlc3QgU1lTVEVNIFBVQkxJQyBTeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMvc3lzdGVtbGliKQogdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMob3JkZXJ0ZXN0IFBVQkxJQyBTeXN0ZW1JbmNsdWRlRGlyZWN0b3JpZXMvdXNlcmxpYikKQEAgLTk0LDYgKzEyNyw2IEBACiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiRW1wdHkgaW5jbHVkZV9kaXJlY3RvcmllcyBlbnRyeSB3YXMgbm90IGlnbm9yZWQuIikKIGVuZGlmKCkKIAotaWYoTk9UIENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCBYY29kZSBBTkQgTk9UIENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCBOaW5qYSkKK2lmKE5PVCBDTUFLRV9HRU5FUkFUT1IgU1RSRVFVQUwgIlhjb2RlIiBBTkQgTk9UIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJOaW5qYSIpCiAgIGFkZF9zdWJkaXJlY3RvcnkoQ01QMDAyMSkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL0luY2x1ZGVEaXJlY3Rvcmllcy9tYWluLmNwcCBiL1Rlc3RzL0luY2x1ZGVEaXJlY3Rvcmllcy9tYWluLmNwcAppbmRleCBhNTlkMjdjLi42ZGM4OGUyIDEwMDY0NAotLS0gYS9UZXN0cy9JbmNsdWRlRGlyZWN0b3JpZXMvbWFpbi5jcHAKKysrIGIvVGVzdHMvSW5jbHVkZURpcmVjdG9yaWVzL21haW4uY3BwCkBAIC0zLDYgKzMsMjAgQEAKICNpbmNsdWRlICJTcmNQcm9wLmgiCiAjaW5jbHVkZSAiVGFyUHJvcC5oIgogCisjaWZkZWYgSU5DTFVERV9TUEVDSUFMX0RJUgorIyAgaW5jbHVkZSAiU3BlY2lhbERpci5oIgorIyAgaWZuZGVmIFNQRUNJQUxfRElSX0gKKyMgICAgZXJyb3IgIlNQRUNJQUxfRElSX0ggbm90IGRlZmluZWQiCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBJTkNMVURFX1NQRUNJQUxfU1BBQ0VfRElSCisjICBpbmNsdWRlICJTcGVjaWFsU3BhY2VEaXIuaCIKKyMgIGlmbmRlZiBTUEVDSUFMX1NQQUNFX0RJUl9ICisjICAgIGVycm9yICJTUEVDSUFMX1NQQUNFX0RJUl9IIG5vdCBkZWZpbmVkIgorIyAgZW5kaWYKKyNlbmRpZgorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvVGVzdHMvSW50ZXJmYWNlTGlicmFyeS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0ludGVyZmFjZUxpYnJhcnkvQ01ha2VMaXN0cy50eHQKaW5kZXggOTU0YzAyZC4uMzExY2EyYSAxMDA2NDQKLS0tIGEvVGVzdHMvSW50ZXJmYWNlTGlicmFyeS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9JbnRlcmZhY2VMaWJyYXJ5L0NNYWtlTGlzdHMudHh0CkBAIC0zLDYgKzMsMTIgQEAKIAogcHJvamVjdChJbnRlcmZhY2VMaWJyYXJ5KQogCitzZXQoY2ZnX2RpcikKK2dldF9wcm9wZXJ0eShfaXNNdWx0aUNvbmZpZyBHTE9CQUwgUFJPUEVSVFkgR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKK2lmKF9pc011bHRpQ29uZmlnKQorICBzZXQoY2ZnX2RpciAvJDxDT05GSUc+KQorZW5kaWYoKQorCiBhZGRfbGlicmFyeShpZmFjZV9ub2RlcGVuZHMgSU5URVJGQUNFKQogdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoaWZhY2Vfbm9kZXBlbmRzIElOVEVSRkFDRSBJRkFDRV9ERUZJTkUpCiAKQEAgLTMyLDcgKzM4LDcgQEAKIHNldF9wcm9wZXJ0eShUQVJHRVQgaXRlbV9pZmFjZSBQUk9QRVJUWSBJTVBPUlRFRF9MSUJOQU1FIGl0ZW1fcmVhbCkKIGFkZF9kZXBlbmRlbmNpZXMoaXRlbV9pZmFjZSBpdGVtX3JlYWwpCiBnZXRfcHJvcGVydHkoaXRlbV9pZmFjZV9kZXBlbmRlbmNpZXMgVEFSR0VUIGl0ZW1faWZhY2UgUFJPUEVSVFkgTUFOVUFMTFlfQURERURfREVQRU5ERU5DSUVTKQotbGlua19kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0pCitsaW5rX2RpcmVjdG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSR7Y2ZnX2Rpcn0pCiAKIGFkZF9leGVjdXRhYmxlKEludGVyZmFjZUxpYnJhcnkgZGVmaW5ldGVzdGV4ZS5jcHApCiB0YXJnZXRfbGlua19saWJyYXJpZXMoSW50ZXJmYWNlTGlicmFyeQpkaWZmIC0tZ2l0IGEvVGVzdHMvSmF2YUV4cG9ydEltcG9ydC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL0phdmFFeHBvcnRJbXBvcnQvQ01ha2VMaXN0cy50eHQKaW5kZXggYzcwNzA0YS4uN2EyZDAyMCAxMDA2NDQKLS0tIGEvVGVzdHMvSmF2YUV4cG9ydEltcG9ydC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9KYXZhRXhwb3J0SW1wb3J0L0NNYWtlTGlzdHMudHh0CkBAIC05LDcgKzksNyBAQAogIyBXaXBlIG91dCB0aGUgaW5zdGFsbCB0cmVlIHRvIG1ha2Ugc3VyZSB0aGUgZXhwb3J0ZXIgd29ya3MuCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgIE9VVFBVVCAke0phdmFFeHBvcnRJbXBvcnRfQklOQVJZX0RJUn0vQ2xlYW51cFByb2plY3QKLSAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZV9kaXJlY3RvcnkgJHtKYXZhRXhwb3J0SW1wb3J0X0JJTkFSWV9ESVJ9L1Jvb3QKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZiAke0phdmFFeHBvcnRJbXBvcnRfQklOQVJZX0RJUn0vUm9vdAogICApCiBhZGRfY3VzdG9tX3RhcmdldChDbGVhbnVwVGFyZ2V0IEFMTCBERVBFTkRTICR7SmF2YUV4cG9ydEltcG9ydF9CSU5BUllfRElSfS9DbGVhbnVwUHJvamVjdCkKIHNldF9wcm9wZXJ0eSgKZGlmZiAtLWdpdCBhL1Rlc3RzL0xpbmtEaXJlY3RvcnkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9MaW5rRGlyZWN0b3J5L0NNYWtlTGlzdHMudHh0CmluZGV4IGM2MGRlODQuLmM3YTI3MDAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL0xpbmtEaXJlY3RvcnkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvTGlua0RpcmVjdG9yeS9DTWFrZUxpc3RzLnR4dApAQCAtMzMsNyArMzMsNyBAQAogIyBkaXJlY3RseSBiZWNhdXNlIGl0IGRvZXMgbm90IGtub3cgdGhlIGZ1bGwgcGF0aHMgdG8gdGhlIGxpYnJhcmllcy4KICMgKFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byBjaGVjayB0aGF0IGxpbmtfZGlyZWN0b3JpZXMgd29ya3MuKQogRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwKEV4dGVybmFsVGFyZ2V0IGNsZWFudXAKLSAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZV9kaXJlY3RvcnkgJHtMaW5rRGlyZWN0b3J5X0JJTkFSWV9ESVJ9L2JpbgorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmICR7TGlua0RpcmVjdG9yeV9CSU5BUllfRElSfS9iaW4KICAgREVQRU5ERUVTIGRvd25sb2FkCiAgIERFUEVOREVSUyBjb25maWd1cmUKICAgREVQRU5EUyBteWxpYkEgbXlsaWJCCmRpZmYgLS1naXQgYS9UZXN0cy9MaW5rRGlyZWN0b3J5L0V4dGVybmFsL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvTGlua0RpcmVjdG9yeS9FeHRlcm5hbC9DTWFrZUxpc3RzLnR4dAppbmRleCBkMmExZjlmLi5jODc3OTEzIDEwMDY0NAotLS0gYS9UZXN0cy9MaW5rRGlyZWN0b3J5L0V4dGVybmFsL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL0xpbmtEaXJlY3RvcnkvRXh0ZXJuYWwvQ01ha2VMaXN0cy50eHQKQEAgLTIsMTMgKzIsMTkgQEAKIHByb2plY3QoTGlua0RpcmVjdG9yeUV4dGVybmFsIEMpCiAKIAorc2V0KGNmZ19kaXIpCitnZXRfcHJvcGVydHkoX2lzTXVsdGlDb25maWcgR0xPQkFMIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCitpZihfaXNNdWx0aUNvbmZpZykKKyAgc2V0KGNmZ19kaXIgLyQ8Q09ORklHPikKK2VuZGlmKCkKKwogYWRkX2V4ZWN1dGFibGUobXlleGUyIG15ZXhlLmMpCiBzZXRfcHJvcGVydHkoVEFSR0VUIG15ZXhlMiBQUk9QRVJUWSBPVVRQVVRfTkFNRSBMaW5rRGlyZWN0b3J5MikKLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzKG15ZXhlMiBQUklWQVRFIGxpYiAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uL2xpYiIpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyhteWV4ZTIgUFJJVkFURSBsaWIke2NmZ19kaXJ9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vbGliJHtjZmdfZGlyfSIpCiB0YXJnZXRfbGlua19saWJyYXJpZXMobXlleGUyIFBSSVZBVEUgbXlsaWJBIG15bGliQikKIAogYWRkX2xpYnJhcnkgKG15bGlicyBJTlRFUkZBQ0UpCi10YXJnZXRfbGlua19kaXJlY3RvcmllcyhteWxpYnMgSU5URVJGQUNFIGxpYiAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uL2xpYiIpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyhteWxpYnMgSU5URVJGQUNFIGxpYiR7Y2ZnX2Rpcn0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi9saWIke2NmZ19kaXJ9IikKIHRhcmdldF9saW5rX2xpYnJhcmllcyhteWxpYnMgSU5URVJGQUNFIG15bGliQSBteWxpYkIpCiBhZGRfZXhlY3V0YWJsZShteWV4ZTMgbXlleGUuYykKIHNldF9wcm9wZXJ0eShUQVJHRVQgbXlleGUzIFBST1BFUlRZIE9VVFBVVF9OQU1FIExpbmtEaXJlY3RvcnkzKQpAQCAtMTcsMTEgKzIzLDExIEBACiAKICMgVGVzdCBDTVAwMDE1IE9MRCBiZWhhdmlvcjogLUwuLi9saWIKIGNtYWtlX3BvbGljeShTRVQgQ01QMDAxNSBPTEQpCi1saW5rX2RpcmVjdG9yaWVzKC4uL2xpYikKK2xpbmtfZGlyZWN0b3JpZXMoLi4vbGliJHtjZmdfZGlyfSkKIAogIyBUZXN0IENNUDAwMTUgTkVXIGJlaGF2aW9yOiAtTCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9saWIKIGNtYWtlX3BvbGljeShTRVQgQ01QMDAxNSBORVcpCi1saW5rX2RpcmVjdG9yaWVzKGxpYikKK2xpbmtfZGlyZWN0b3JpZXMobGliJHtjZmdfZGlyfSkKIAogYWRkX2V4ZWN1dGFibGUobXlleGUgbXlleGUuYykKIHNldF9wcm9wZXJ0eShUQVJHRVQgbXlleGUgUFJPUEVSVFkgT1VUUFVUX05BTUUgTGlua0RpcmVjdG9yeSkKZGlmZiAtLWdpdCBhL1Rlc3RzL0xvYWRDb21tYW5kL0NNYWtlQ29tbWFuZHMvY21UZXN0Q29tbWFuZC5jIGIvVGVzdHMvTG9hZENvbW1hbmQvQ01ha2VDb21tYW5kcy9jbVRlc3RDb21tYW5kLmMKaW5kZXggOTlmMGRlOS4uYWY3YjA5MiAxMDA2NDQKLS0tIGEvVGVzdHMvTG9hZENvbW1hbmQvQ01ha2VDb21tYW5kcy9jbVRlc3RDb21tYW5kLmMKKysrIGIvVGVzdHMvTG9hZENvbW1hbmQvQ01ha2VDb21tYW5kcy9jbVRlc3RDb21tYW5kLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAogICBzb3VyY2VfZmlsZSA9IGluZm8tPkNBUEktPkNyZWF0ZU5ld1NvdXJjZUZpbGUobWYpOwogICBjc3RyID0gaW5mby0+Q0FQSS0+U291cmNlRmlsZUdldFNvdXJjZU5hbWUoc291cmNlX2ZpbGUpOwotICBzcHJpbnRmKGJ1ZmZlciwgIlNob2xkIGJlIGVtcHR5IChzb3VyY2UgZmlsZSBuYW1lKTogWyVzXSIsIGNzdHIpOworICBzcHJpbnRmKGJ1ZmZlciwgIlNob3VsZCBiZSBlbXB0eSAoc291cmNlIGZpbGUgbmFtZSk6IFslc10iLCBjc3RyKTsKICAgaW5mby0+Q0FQSS0+RGlzcGxheVNhdHVzKG1mLCBidWZmZXIpOwogICBjc3RyID0gaW5mby0+Q0FQSS0+U291cmNlRmlsZUdldEZ1bGxQYXRoKHNvdXJjZV9maWxlKTsKICAgc3ByaW50ZihidWZmZXIsICJTaG91bGQgYmUgZW1wdHkgKHNvdXJjZSBmaWxlIGZ1bGwgcGF0aCk6IFslc10iLCBjc3RyKTsKZGlmZiAtLWdpdCBhL1Rlc3RzL0xvYWRDb21tYW5kT25lQ29uZmlnL0NNYWtlQ29tbWFuZHMvY21UZXN0Q29tbWFuZC5jIGIvVGVzdHMvTG9hZENvbW1hbmRPbmVDb25maWcvQ01ha2VDb21tYW5kcy9jbVRlc3RDb21tYW5kLmMKaW5kZXggOTlmMGRlOS4uYWY3YjA5MiAxMDA2NDQKLS0tIGEvVGVzdHMvTG9hZENvbW1hbmRPbmVDb25maWcvQ01ha2VDb21tYW5kcy9jbVRlc3RDb21tYW5kLmMKKysrIGIvVGVzdHMvTG9hZENvbW1hbmRPbmVDb25maWcvQ01ha2VDb21tYW5kcy9jbVRlc3RDb21tYW5kLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAogICBzb3VyY2VfZmlsZSA9IGluZm8tPkNBUEktPkNyZWF0ZU5ld1NvdXJjZUZpbGUobWYpOwogICBjc3RyID0gaW5mby0+Q0FQSS0+U291cmNlRmlsZUdldFNvdXJjZU5hbWUoc291cmNlX2ZpbGUpOwotICBzcHJpbnRmKGJ1ZmZlciwgIlNob2xkIGJlIGVtcHR5IChzb3VyY2UgZmlsZSBuYW1lKTogWyVzXSIsIGNzdHIpOworICBzcHJpbnRmKGJ1ZmZlciwgIlNob3VsZCBiZSBlbXB0eSAoc291cmNlIGZpbGUgbmFtZSk6IFslc10iLCBjc3RyKTsKICAgaW5mby0+Q0FQSS0+RGlzcGxheVNhdHVzKG1mLCBidWZmZXIpOwogICBjc3RyID0gaW5mby0+Q0FQSS0+U291cmNlRmlsZUdldEZ1bGxQYXRoKHNvdXJjZV9maWxlKTsKICAgc3ByaW50ZihidWZmZXIsICJTaG91bGQgYmUgZW1wdHkgKHNvdXJjZSBmaWxlIGZ1bGwgcGF0aCk6IFslc10iLCBjc3RyKTsKZGlmZiAtLWdpdCBhL1Rlc3RzL01TTWFuaWZlc3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9NU01hbmlmZXN0L0NNYWtlTGlzdHMudHh0CmluZGV4IDMwMGNmYTYuLjYzMWM1OTggMTAwNjQ0Ci0tLSBhL1Rlc3RzL01TTWFuaWZlc3QvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvTVNNYW5pZmVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMSw1ICsxLDggQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KE1TTWFuaWZlc3QgQykKIAoraW5jbHVkZShDVGVzdCkKKwogc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0pCiBhZGRfc3ViZGlyZWN0b3J5KFN1YmRpcikKK2FkZF9zdWJkaXJlY3RvcnkoU3ViZGlyMikKZGlmZiAtLWdpdCBhL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIvQ01ha2VMaXN0cy50eHQKaW5kZXggMTEyNzJiYi4uODY2NDU3MiAxMDA2NDQKLS0tIGEvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIvQ01ha2VMaXN0cy50eHQKQEAgLTIsMTAgKzIsOSBAQAogYWRkX2V4ZWN1dGFibGUoTVNNYW5pZmVzdCBtYWluLmMgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Rlc3QubWFuaWZlc3QpCiAKIGlmKE1TVkMgQU5EIE5PVCBNU1ZDX1ZFUlNJT04gTEVTUyAxNDAwKQotICBhZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIE1TTWFuaWZlc3QgUE9TVF9CVUlMRCBWRVJCQVRJTQotICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRGV4ZT0kPFRBUkdFVF9GSUxFOk1TTWFuaWZlc3Q+Ci0gICAgICAgICAgICAtUCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vY2hlY2suY21ha2UKLSAgICApCisgIGFkZF90ZXN0KE5BTUUgTVNNYW5pZmVzdC5TaW5nbGUgQ09NTUFORAorICAgICR7Q01BS0VfQ09NTUFORH0gLURleGU9JDxUQVJHRVRfRklMRTpNU01hbmlmZXN0PgorICAgIC1QICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jaGVjay5jbWFrZSkKICAgYWRkX2V4ZWN1dGFibGUoTVNNYW5pZmVzdE5vbmUgbWFpbi5jKQogICBzZXRfcHJvcGVydHkoVEFSR0VUIE1TTWFuaWZlc3ROb25lIFBST1BFUlRZIExJTktfRkxBR1MgIi9NQU5JRkVTVDpOTyIpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkOGRlNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEzIEBACitjb25maWd1cmVfZmlsZSh0ZXN0X21hbmlmZXN0MS5pbiB0ZXN0X21hbmlmZXN0MS5tYW5pZmVzdCkKK2NvbmZpZ3VyZV9maWxlKHRlc3RfbWFuaWZlc3QyLmluIHRlc3RfbWFuaWZlc3QyLm1hbmlmZXN0KQorY29uZmlndXJlX2ZpbGUodGVzdF9tYW5pZmVzdDMuaW4gdGVzdF9tYW5pZmVzdDMubWFuaWZlc3QpCithZGRfZXhlY3V0YWJsZShNU011bHRpcGxlTWFuaWZlc3QgbWFpbi5jCisgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Rlc3RfbWFuaWZlc3QxLm1hbmlmZXN0CisgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Rlc3RfbWFuaWZlc3QyLm1hbmlmZXN0CisgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Rlc3RfbWFuaWZlc3QzLm1hbmlmZXN0KQorCitpZihNU1ZDIEFORCBOT1QgTVNWQ19WRVJTSU9OIExFU1MgMTQwMCkKKyAgYWRkX3Rlc3QoTkFNRSBNU01hbmlmZXN0Lk11bHRpcGxlIENPTU1BTkQKKyAgICAke0NNQUtFX0NPTU1BTkR9IC1EZXhlPSQ8VEFSR0VUX0ZJTEU6TVNNdWx0aXBsZU1hbmlmZXN0PgorICAgIC1QICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jaGVjay5jbWFrZSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi9jaGVjay5jbWFrZSBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi9jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTE3MDViCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL2NoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjIgQEAKK2ZpbGUoU1RSSU5HUyAiJHtleGV9IiBtYW5pZmVzdF9jb250ZW50MSBSRUdFWCAibmFtZT1cIktpdHdhcmUuQ01ha2UuTVNNdWx0aXBsZU1hbmlmZXN0XCIiKQoraWYobWFuaWZlc3RfY29udGVudDEpCisgIG1lc3NhZ2UoU1RBVFVTICJFeHBlY3RlZCBtYW5pZmVzdCBjb250ZW50IGZvdW5kOlxuICR7bWFuaWZlc3RfY29udGVudDF9IikKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJFeHBlY3RlZCBtYW5pZmVzdCBjb250ZW50IG5vdCBmb3VuZCBpblxuICR7ZXhlfSIpCitlbmRpZigpCisKKyMgVmVyaWZ5IFNlY29uZCBNYW5pZmVzdCBDb250ZW50IGlzIGluc2lkZSBFeGVjdXRhYmxlLgorZmlsZShTVFJJTkdTICIke2V4ZX0iIG1hbmlmZXN0X2NvbnRlbnQyIFJFR0VYICI4ZTBmN2ExMi1iZmIzLTRmZTgtYjlhNS00OGZkNTBhMTVhOWEiKQoraWYobWFuaWZlc3RfY29udGVudDIpCisgIG1lc3NhZ2UoU1RBVFVTICJFeHBlY3RlZCBtYW5pZmVzdCBjb250ZW50IGZvdW5kOlxuICR7bWFuaWZlc3RfY29udGVudDJ9IikKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJFeHBlY3RlZCBtYW5pZmVzdCBjb250ZW50IG5vdCBmb3VuZCBpblxuICR7ZXhlfSIpCitlbmRpZigpCisKKyMgVmVyaWZ5IFRoaXJkIE1hbmlmZXN0IENvbnRlbnQgaXMgaW5zaWRlIEV4ZWN1dGFibGUuCitmaWxlKFNUUklOR1MgIiR7ZXhlfSIgbWFuaWZlc3RfY29udGVudDMgUkVHRVggIjxkcGlBd2FyZT50cnVlPC9kcGlBd2FyZT4iKQoraWYobWFuaWZlc3RfY29udGVudDMpCisgIG1lc3NhZ2UoU1RBVFVTICJFeHBlY3RlZCBtYW5pZmVzdCBjb250ZW50IGZvdW5kOlxuICR7bWFuaWZlc3RfY29udGVudDN9IikKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJFeHBlY3RlZCBtYW5pZmVzdCBjb250ZW50IG5vdCBmb3VuZCBpblxuICR7ZXhlfSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvbWFpbi5jIGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDg4ZjRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL21haW4uYwpAQCAtMCwwICsxLDQgQEAKK2ludCBtYWluKHZvaWQpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL3Rlc3RfbWFuaWZlc3QxLmluIGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL3Rlc3RfbWFuaWZlc3QxLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNmVlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvdGVzdF9tYW5pZmVzdDEuaW4KQEAgLTAsMCArMSw1IEBACis8YXNzZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIiBtYW5pZmVzdFZlcnNpb249IjEuMCI+CisgIDxhc3NlbWJseUlkZW50aXR5IHR5cGU9IndpbjMyIiB2ZXJzaW9uPSIxLjAuMC4wIgorICAgICAgICAgICAgICAgICAgICBuYW1lPSJLaXR3YXJlLkNNYWtlLk1TTXVsdGlwbGVNYW5pZmVzdCIvPgorCTxkZXNjcmlwdGlvbj5DTWFrZSBNdWx0aXBsZSBNYW5pZmVzdCBUZXN0IEFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KKzwvYXNzZW1ibHk+CmRpZmYgLS1naXQgYS9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvdGVzdF9tYW5pZmVzdDIuaW4gYi9UZXN0cy9NU01hbmlmZXN0L1N1YmRpcjIvdGVzdF9tYW5pZmVzdDIuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5NmYxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi90ZXN0X21hbmlmZXN0Mi5pbgpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+Cis8YXNzZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIiBtYW5pZmVzdFZlcnNpb249IjEuMCIgeG1sbnM6YXNtdjM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYzIj4KKwk8Y29tcGF0aWJpbGl0eSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpjb21wYXRpYmlsaXR5LnYxIj4KKwkJPGFwcGxpY2F0aW9uPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7OGUwZjdhMTItYmZiMy00ZmU4LWI5YTUtNDhmZDUwYTE1YTlhfSI+PC9zdXBwb3J0ZWRPUz4KKwkJCTxzdXBwb3J0ZWRPUyBJZD0iezFmNjc2Yzc2LTgwZTEtNDIzOS05NWJiLTgzZDBmNmQwZGE3OH0iPjwvc3VwcG9ydGVkT1M+CisJCQk8c3VwcG9ydGVkT1MgSWQ9Ins0YTJmMjhlMy01M2I5LTQ0NDEtYmE5Yy1kNjlkNGE0YTZlMzh9Ij48L3N1cHBvcnRlZE9TPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7MzUxMzhiOWEtNWQ5Ni00ZmJkLThlMmQtYTI0NDAyMjVmOTNhfSI+PC9zdXBwb3J0ZWRPUz4KKwkJCTxzdXBwb3J0ZWRPUyBJZD0ie2UyMDExNDU3LTE1NDYtNDNjNS1hNWZlLTAwOGRlZWUzZDNmMH0iPjwvc3VwcG9ydGVkT1M+CisJCTwvYXBwbGljYXRpb24+CisJPC9jb21wYXRpYmlsaXR5PgorPC9hc3NlbWJseT4KZGlmZiAtLWdpdCBhL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi90ZXN0X21hbmlmZXN0My5pbiBiL1Rlc3RzL01TTWFuaWZlc3QvU3ViZGlyMi90ZXN0X21hbmlmZXN0My5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzcwZTExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvTVNNYW5pZmVzdC9TdWJkaXIyL3Rlc3RfbWFuaWZlc3QzLmluCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorPGFzc2VtYmx5IHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MSIgbWFuaWZlc3RWZXJzaW9uPSIxLjAiIHhtbG5zOmFzbXYzPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MyIgPgorICA8YXNtdjM6YXBwbGljYXRpb24+CisgICAgPGFzbXYzOndpbmRvd3NTZXR0aW5ncyB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9TTUkvMjAwNS9XaW5kb3dzU2V0dGluZ3MiPgorICAgICAgPGRwaUF3YXJlPnRydWU8L2RwaUF3YXJlPgorICAgICAgPGRwaUF3YXJlbmVzcyB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9TTUkvMjAxNi9XaW5kb3dzU2V0dGluZ3MiPlBlck1vbml0b3JWMjwvZHBpQXdhcmVuZXNzPgorICAgIDwvYXNtdjM6d2luZG93c1NldHRpbmdzPgorICA8L2FzbXYzOmFwcGxpY2F0aW9uPgorPC9hc3NlbWJseT4KZGlmZiAtLWdpdCBhL1Rlc3RzL01hY1J1bnRpbWVQYXRoL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvTWFjUnVudGltZVBhdGgvQ01ha2VMaXN0cy50eHQKaW5kZXggYTNjNmZkOS4uOWYxYmYxYSAxMDA2NDQKLS0tIGEvVGVzdHMvTWFjUnVudGltZVBhdGgvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvTWFjUnVudGltZVBhdGgvQ01ha2VMaXN0cy50eHQKQEAgLTcsNyArNyw3IEBACiAjIFdpcGUgb3V0IHRoZSBpbnN0YWxsIHRyZWUgdG8gbWFrZSBzdXJlIHRoZSBleHBvcnRlciB3b3Jrcy4KIGFkZF9jdXN0b21fY29tbWFuZCgKICAgT1VUUFVUICR7TWFjUnVudGltZVBhdGhfQklOQVJZX0RJUn0vQ2xlYW51cFByb2plY3QKLSAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZV9kaXJlY3RvcnkgJHtNYWNSdW50aW1lUGF0aF9CSU5BUllfRElSfS9Sb290CisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtcmYgJHtNYWNSdW50aW1lUGF0aF9CSU5BUllfRElSfS9Sb290CiAgICkKIGFkZF9jdXN0b21fdGFyZ2V0KENsZWFudXBUYXJnZXQgQUxMIERFUEVORFMgJHtNYWNSdW50aW1lUGF0aF9CSU5BUllfRElSfS9DbGVhbnVwUHJvamVjdCkKIHNldF9wcm9wZXJ0eSgKZGlmZiAtLWdpdCBhL1Rlc3RzL01vZHVsZS9DaGVja1R5cGVTaXplL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvTW9kdWxlL0NoZWNrVHlwZVNpemUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTY5ODlmZTIuLjEwMmNmMGMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL01vZHVsZS9DaGVja1R5cGVTaXplL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL01vZHVsZS9DaGVja1R5cGVTaXplL0NNYWtlTGlzdHMudHh0CkBAIC0yMSw2ICsyMSw4IEBACiAKICMgQ2hlY2sgQ1hYIHR5cGVzCiBjaGVja190eXBlX3NpemUoYm9vbCAgICAgICAgU0laRU9GX0JPT0wgTEFOR1VBR0UgQ1hYKQorY2hlY2tfdHlwZV9zaXplKHVpbnQ4X3QgICAgIFNJWkVPRl9VSU5UOF9UIExBTkdVQUdFIENYWCkKK2NoZWNrX3R5cGVfc2l6ZShzdGQ6OnVpbnQ4X3QgU0laRU9GX1NURF9VSU5UOF9UIExBTkdVQUdFIENYWCkKIAogc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMgc29tZWNsYXNzLmh4eCkKIGNoZWNrX3R5cGVfc2l6ZSgiKChuczo6c29tZWNsYXNzKikwKS0+c29tZWludCIgU0laRU9GX05TX0NMQVNTTUVNQkVSX0lOVCBMQU5HVUFHRSBDWFgpCmRpZmYgLS1naXQgYS9UZXN0cy9Nb2R1bGUvQ2hlY2tUeXBlU2l6ZS9DaGVja1R5cGVTaXplLmN4eCBiL1Rlc3RzL01vZHVsZS9DaGVja1R5cGVTaXplL0NoZWNrVHlwZVNpemUuY3h4CmluZGV4IDE1ZGM4OTAuLjQ1Y2QzOTMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL01vZHVsZS9DaGVja1R5cGVTaXplL0NoZWNrVHlwZVNpemUuY3h4CisrKyBiL1Rlc3RzL01vZHVsZS9DaGVja1R5cGVTaXplL0NoZWNrVHlwZVNpemUuY3h4CkBAIC0xMSw2ICsxMSwxMiBAQAogI2lmZGVmIEhBVkVfU1REREVGX0gKICMgIGluY2x1ZGUgPHN0ZGRlZi5oPgogI2VuZGlmCisjaWZkZWYgSEFWRV9DU1RESU5UCisjICBpbmNsdWRlIDxjc3RkaW50PgorI2VuZGlmCisjaWZkZWYgSEFWRV9DU1REREVGCisjICBpbmNsdWRlIDxjc3RkZGVmPgorI2VuZGlmCiAKICNpbmNsdWRlIDxzdGRpby5oPgogCkBAIC0xMjIsNiArMTI4LDI2IEBACiAgIE5PREVGKFNJWkVPRl9TU0laRV9UKTsKICNlbmRpZgogCisvKiB1aW50OF90ICovCisjaWYgZGVmaW5lZChTSVpFT0ZfVUlOVDhfVCkKKyAgQ0hFQ0sodWludDhfdCwgU0laRU9GX1VJTlQ4X1QpOworIyAgaWYgIWRlZmluZWQoSEFWRV9TSVpFT0ZfVUlOVDhfVCkKKyAgTk9ERUYoSEFWRV9TSVpFT0ZfVUlOVDhfVCk7CisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChIQVZFX1NJWkVPRl9VSU5UOF9UKQorICBOT0RFRihTSVpFT0ZfVUlOVDhfVCk7CisjZW5kaWYKKworLyogc3RkOjp1aW50OF90ICovCisjaWYgZGVmaW5lZChTSVpFT0ZfU1REX1VJTlQ4X1QpCisgIENIRUNLKHN0ZDo6dWludDhfdCwgU0laRU9GX1NURF9VSU5UOF9UKTsKKyMgIGlmICFkZWZpbmVkKEhBVkVfU0laRU9GX1NURF9VSU5UOF9UKQorICBOT0RFRihIQVZFX1NJWkVPRl9TVERfVUlOVDhfVCk7CisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChIQVZFX1NJWkVPRl9TVERfVUlOVDhfVCkKKyAgTk9ERUYoU0laRU9GX1NURF9VSU5UOF9UKTsKKyNlbmRpZgorCiAvKiBuczo6c29tZWNsYXNzOjpzb21laW50ICovCiAjaWYgZGVmaW5lZChTSVpFT0ZfTlNfQ0xBU1NNRU1CRVJfSU5UKQogICBDSEVDSyh5LnNvbWVpbnQsIFNJWkVPRl9OU19DTEFTU01FTUJFUl9JTlQpOwpkaWZmIC0tZ2l0IGEvVGVzdHMvTW9kdWxlL0NoZWNrVHlwZVNpemUvY29uZmlnLmh4eC5pbiBiL1Rlc3RzL01vZHVsZS9DaGVja1R5cGVTaXplL2NvbmZpZy5oeHguaW4KaW5kZXggOGM2NmFkZS4uOWE4MDY4OSAxMDA2NDQKLS0tIGEvVGVzdHMvTW9kdWxlL0NoZWNrVHlwZVNpemUvY29uZmlnLmh4eC5pbgorKysgYi9UZXN0cy9Nb2R1bGUvQ2hlY2tUeXBlU2l6ZS9jb25maWcuaHh4LmluCkBAIC0xLDExICsxLDIxIEBACiAjY21ha2VkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSAogI2NtYWtlZGVmaW5lIEhBVkVfU1RESU5UX0gKICNjbWFrZWRlZmluZSBIQVZFX1NURERFRl9ICisjY21ha2VkZWZpbmUgSEFWRV9DU1RESU5UCisjY21ha2VkZWZpbmUgSEFWRV9DU1REREVGCiAKIC8qIGJvb2wgKi8KICNjbWFrZWRlZmluZSBIQVZFX1NJWkVPRl9CT09MCiBAU0laRU9GX0JPT0xfQ09ERUAKIAorLyogdWludDhfdCAqLworI2NtYWtlZGVmaW5lIEhBVkVfU0laRU9GX1VJTlQ4X1QKK0BTSVpFT0ZfVUlOVDhfVF9DT0RFQAorCisvKiBzdGQ6OnVpbnQ4X3QgKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NJWkVPRl9TVERfVUlOVDhfVAorQFNJWkVPRl9TVERfVUlOVDhfVF9DT0RFQAorCiAvKiBzdHJ1Y3QgbnM6OnNvbWVzdHJ1Y3Q6OnNvbWVpbnQgKi8KICNjbWFrZWRlZmluZSBIQVZFX1NJWkVPRl9OU19TVFJVQ1RNRU1CRVJfSU5UCiBAU0laRU9GX05TX1NUUlVDVE1FTUJFUl9JTlRfQ09ERUAKZGlmZiAtLWdpdCBhL1Rlc3RzL09iamVjdExpYnJhcnkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9PYmplY3RMaWJyYXJ5L0NNYWtlTGlzdHMudHh0CmluZGV4IDc4OTdhYjkuLmZjYTVmNDEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL09iamVjdExpYnJhcnkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvT2JqZWN0TGlicmFyeS9DTWFrZUxpc3RzLnR4dApAQCAtNzMsMyArNzMsNSBAQAogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKFVzZUFCc3RhdGljT2JqcyBBQnN0YXRpYykKIAogYWRkX3N1YmRpcmVjdG9yeShFeHBvcnRMYW5ndWFnZXMpCisKK2FkZF9zdWJkaXJlY3RvcnkoVHJhbnNpdGl2ZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjE2Y2RhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvT2JqZWN0TGlicmFyeS9UcmFuc2l0aXZlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTIgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDAyMiBORVcpCithZGRfbGlicmFyeShGb29TdGF0aWMgU1RBVElDIEZvb1N0YXRpYy5jKQorCithZGRfbGlicmFyeShGb29PYmplY3QxIE9CSkVDVCBGb29PYmplY3QuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhGb29PYmplY3QxIFBSSVZBVEUgRm9vU3RhdGljKQorYWRkX2V4ZWN1dGFibGUoVHJhbnNpdGl2ZTEgVHJhbnNpdGl2ZS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRyYW5zaXRpdmUxIFBSSVZBVEUgRm9vT2JqZWN0MSkKKworYWRkX2xpYnJhcnkoRm9vT2JqZWN0MiBPQkpFQ1QgRm9vT2JqZWN0LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoRm9vT2JqZWN0MiBJTlRFUkZBQ0UgRm9vU3RhdGljKQorYWRkX2V4ZWN1dGFibGUoVHJhbnNpdGl2ZTIgVHJhbnNpdGl2ZS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRyYW5zaXRpdmUyIFBSSVZBVEUgRm9vT2JqZWN0MikKZGlmZiAtLWdpdCBhL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9Gb29PYmplY3QuYyBiL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9Gb29PYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGMxZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvT2JqZWN0TGlicmFyeS9UcmFuc2l0aXZlL0Zvb09iamVjdC5jCkBAIC0wLDAgKzEsNCBAQAoraW50IEZvb09iamVjdCh2b2lkKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9Gb29TdGF0aWMuYyBiL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9Gb29TdGF0aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDY0OWM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvT2JqZWN0TGlicmFyeS9UcmFuc2l0aXZlL0Zvb1N0YXRpYy5jCkBAIC0wLDAgKzEsNCBAQAoraW50IEZvb1N0YXRpYyh2b2lkKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL09iamVjdExpYnJhcnkvVHJhbnNpdGl2ZS9UcmFuc2l0aXZlLmMgYi9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvVHJhbnNpdGl2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMDg5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9PYmplY3RMaWJyYXJ5L1RyYW5zaXRpdmUvVHJhbnNpdGl2ZS5jCkBAIC0wLDAgKzEsNyBAQAorZXh0ZXJuIGludCBGb29PYmplY3Qodm9pZCk7CitleHRlcm4gaW50IEZvb1N0YXRpYyh2b2lkKTsKKworaW50IG1haW4odm9pZCkKK3sKKyAgcmV0dXJuIEZvb09iamVjdCgpICsgRm9vU3RhdGljKCk7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9PdXREaXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9PdXREaXIvQ01ha2VMaXN0cy50eHQKaW5kZXggODIzYWIwOC4uOGFmZTAzNiAxMDA2NDQKLS0tIGEvVGVzdHMvT3V0RGlyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL091dERpci9DTWFrZUxpc3RzLnR4dApAQCAtMjAsNyArMjAsNyBAQAogZm9yZWFjaChjb25maWcgJHtjb25maWdzfSkKICAgZm9yZWFjaCh0eXBlIGFyY2hpdmUgcnVudGltZSBsaWJyYXJ5KQogICAgIHN0cmluZyhUT1VQUEVSICIke3R5cGV9IiBUWVBFKQotICAgIHNldChDTUFLRV8ke1RZUEV9X09VVFBVVF9ESVJFQ1RPUllfJHtjb25maWd9ICIke3RvcH0vJHt0eXBlfSIpCisgICAgc2V0KENNQUtFXyR7VFlQRX1fT1VUUFVUX0RJUkVDVE9SWV8ke2NvbmZpZ30gIiR7dG9wfS8ke3R5cGV9LyQ8Q09ORklHPiIpCiAgICAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHt0b3B9LyR7dHlwZX0iKQogICBlbmRmb3JlYWNoKCkKIGVuZGZvcmVhY2goKQpAQCAtMjksNyArMjksNyBAQAogCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgIE9VVFBVVCBPdXREaXIuaAotICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUR0b3A9JHt0b3B9IC1QICR7T3V0RGlyX1NPVVJDRV9ESVJ9L091dERpci5jbWFrZQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUR0b3A9JHt0b3B9IC1EY2ZnX2Rpcj0kPENPTkZJRz4gLVAgJHtPdXREaXJfU09VUkNFX0RJUn0vT3V0RGlyLmNtYWtlCiAgIERFUEVORFMgQ09ubHkgJHtPdXREaXJfU09VUkNFX0RJUn0vT3V0RGlyLmNtYWtlCiAgICkKIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHt0b3B9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvT3V0RGlyL091dERpci5jbWFrZSBiL1Rlc3RzL091dERpci9PdXREaXIuY21ha2UKaW5kZXggYTFmMTNlNy4uMmEwMDNiOCAxMDA2NDQKLS0tIGEvVGVzdHMvT3V0RGlyL091dERpci5jbWFrZQorKysgYi9UZXN0cy9PdXREaXIvT3V0RGlyLmNtYWtlCkBAIC0zLDE3ICszLDE3IEBACiAKIGZpbmRfbGlicmFyeShURVNUQzFfTElCCiAgIE5BTUVTIHRlc3RjMSB0ZXN0YzFfdGVzdF9kZWJ1Z19wb3N0Zml4Ci0gIFBBVEhTICR7dG9wfS9hcmNoaXZlCisgIFBBVEhTICR7dG9wfS9hcmNoaXZlLyR7Y2ZnX2Rpcn0KICAgTk9fREVGQVVMVF9QQVRIKQogCiBmaW5kX2xpYnJhcnkoVEVTVEMyX0xJQgogICBOQU1FUyB0ZXN0YzIgdGVzdGMyX3Rlc3RfZGVidWdfcG9zdGZpeAotICBQQVRIUyAke3RvcH0vYXJjaGl2ZSAke3RvcH0vbGlicmFyeQorICBQQVRIUyAke3RvcH0vYXJjaGl2ZS8ke2NmZ19kaXJ9ICR7dG9wfS9saWJyYXJ5LyR7Y2ZnX2Rpcn0KICAgTk9fREVGQVVMVF9QQVRIKQogCiBmaW5kX3Byb2dyYW0oQ09OTFlfRVhFCiAgIE5BTUVTIENPbmx5Ci0gIFBBVEhTICR7dG9wfS9ydW50aW1lCisgIFBBVEhTICR7dG9wfS9ydW50aW1lLyR7Y2ZnX2Rpcn0KICAgTk9fREVGQVVMVF9QQVRIKQogCiBmaWxlKFJFTEFUSVZFX1BBVEggVEVTVEMxX0xJQl9GSUxFICIke3RvcH0iICIke1RFU1RDMV9MSUJ9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1ByZXByb2Nlc3MvcHJlcHJvY2Vzcy5jIGIvVGVzdHMvUHJlcHJvY2Vzcy9wcmVwcm9jZXNzLmMKaW5kZXggOTU4Yzc3ZS4uYjMxMTdkYSAxMDA2NDQKLS0tIGEvVGVzdHMvUHJlcHJvY2Vzcy9wcmVwcm9jZXNzLmMKKysrIGIvVGVzdHMvUHJlcHJvY2Vzcy9wcmVwcm9jZXNzLmMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIHJlc3VsdCA9IDA7CiAgIH0KICAgaWYgKHN0cmNtcChUQVJHRVRfU1RSSU5HLCBTVFJJTkdfVkFMVUUpICE9IDApIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRBUkdFVF9TVFJJTkcgaGFzIHdyb25nIHZhbHVlIGluIEMgWyVzXVxuIiwKLSAgICAgICAgICAgIFRBUkdFVF9TVFJJTkcpOworICAgIGZwcmludGYoc3RkZXJyLCAiVEFSR0VUX1NUUklORyBoYXMgd3JvbmcgdmFsdWUgaW4gQyBbJXNdIHZzIFslc11cbiIsCisgICAgICAgICAgICBUQVJHRVRfU1RSSU5HLCBTVFJJTkdfVkFMVUUpOwogICAgIHJlc3VsdCA9IDA7CiAgIH0KICAgewogICAgIGludCB4ID0gMjsKICAgICBpbnQgeSA9IDM7CiAgICAgaWYgKChGSUxFX0VYUFIpICE9IChFWFBSKSkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJGSUxFX0VYUFIgZGlkIG5vdCB3b3JrIGluIEMgWyVzXVxuIiwKLSAgICAgICAgICAgICAgVE9fU1RSSU5HKEZJTEVfRVhQUikpOworICAgICAgZnByaW50ZihzdGRlcnIsICJGSUxFX0VYUFIgZGlkIG5vdCB3b3JrIGluIEMgWyVzXSB2cyBbJXNdXG4iLAorICAgICAgICAgICAgICBUT19TVFJJTkcoRklMRV9FWFBSKSwgVE9fU1RSSU5HKEVYUFIpKTsKICAgICAgIHJlc3VsdCA9IDA7CiAgICAgfQogICAgIGlmICgoVEFSR0VUX0VYUFIpICE9IChFWFBSKSkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJUQVJHRVRfRVhQUiBkaWQgbm90IHdvcmsgaW4gQyBbJXNdXG4iLAotICAgICAgICAgICAgICBUT19TVFJJTkcoRklMRV9FWFBSKSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRBUkdFVF9FWFBSIGRpZCBub3Qgd29yayBpbiBDIFslc10gdnMgWyVzXVxuIiwKKyAgICAgICAgICAgICAgVE9fU1RSSU5HKFRBUkdFVF9FWFBSKSwgVE9fU1RSSU5HKEVYUFIpKTsKICAgICAgIHJlc3VsdCA9IDA7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9UZXN0cy9QcmVwcm9jZXNzL3ByZXByb2Nlc3MuY3h4IGIvVGVzdHMvUHJlcHJvY2Vzcy9wcmVwcm9jZXNzLmN4eAppbmRleCAzNGE2OWM2Li5mMmZmZmVmIDEwMDY0NAotLS0gYS9UZXN0cy9QcmVwcm9jZXNzL3ByZXByb2Nlc3MuY3h4CisrKyBiL1Rlc3RzL1ByZXByb2Nlc3MvcHJlcHJvY2Vzcy5jeHgKQEAgLTEyLDI1ICsxMiwyNiBAQAogewogICBpbnQgcmVzdWx0ID0gMTsKICAgaWYgKHN0cmNtcChGSUxFX1NUUklORywgU1RSSU5HX1ZBTFVFKSAhPSAwKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJGSUxFX1NUUklORyBoYXMgd3JvbmcgdmFsdWUgaW4gQ1hYIFslc11cbiIsIEZJTEVfU1RSSU5HKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZJTEVfU1RSSU5HIGhhcyB3cm9uZyB2YWx1ZSBpbiBDWFggWyVzXSB2cyBbJXNdXG4iLAorICAgICAgICAgICAgRklMRV9TVFJJTkcsIFNUUklOR19WQUxVRSk7CiAgICAgcmVzdWx0ID0gMDsKICAgfQogICBpZiAoc3RyY21wKFRBUkdFVF9TVFJJTkcsIFNUUklOR19WQUxVRSkgIT0gMCkgewotICAgIGZwcmludGYoc3RkZXJyLCAiVEFSR0VUX1NUUklORyBoYXMgd3JvbmcgdmFsdWUgaW4gQ1hYIFslc11cbiIsCi0gICAgICAgICAgICBUQVJHRVRfU1RSSU5HKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlRBUkdFVF9TVFJJTkcgaGFzIHdyb25nIHZhbHVlIGluIENYWCBbJXNdIHZzIFslc11cbiIsCisgICAgICAgICAgICBUQVJHRVRfU1RSSU5HLCBTVFJJTkdfVkFMVUUpOwogICAgIHJlc3VsdCA9IDA7CiAgIH0KICAgewogICAgIGludCB4ID0gMjsKICAgICBpbnQgeSA9IDM7CiAgICAgaWYgKChGSUxFX0VYUFIpICE9IChFWFBSKSkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJGSUxFX0VYUFIgZGlkIG5vdCB3b3JrIGluIENYWCBbJXNdXG4iLAotICAgICAgICAgICAgICBUT19TVFJJTkcoRklMRV9FWFBSKSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZJTEVfRVhQUiBkaWQgbm90IHdvcmsgaW4gQ1hYIFslc10gdnMgWyVzXVxuIiwKKyAgICAgICAgICAgICAgVE9fU1RSSU5HKEZJTEVfRVhQUiksIFRPX1NUUklORyhFWFBSKSk7CiAgICAgICByZXN1bHQgPSAwOwogICAgIH0KICAgICBpZiAoKFRBUkdFVF9FWFBSKSAhPSAoRVhQUikpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiVEFSR0VUX0VYUFIgZGlkIG5vdCB3b3JrIGluIENYWCBbJXNdXG4iLAotICAgICAgICAgICAgICBUT19TVFJJTkcoRklMRV9FWFBSKSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRBUkdFVF9FWFBSIGRpZCBub3Qgd29yayBpbiBDWFggWyVzXSB2cyBbJXNdXG4iLAorICAgICAgICAgICAgICBUT19TVFJJTkcoVEFSR0VUX0VYUFIpLCBUT19TVFJJTkcoRVhQUikpOwogICAgICAgcmVzdWx0ID0gMDsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1Byb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Qcm9wZXJ0aWVzL0NNYWtlTGlzdHMudHh0CmluZGV4IGEyNjMwNjEuLjE2MmExNzggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1Byb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUHJvcGVydGllcy9DTWFrZUxpc3RzLnR4dApAQCAtMTQ0LDQgKzE0NCwxODIgQEAKIHNldF9wcm9wZXJ0eShDQUNIRSBTT01FX0VOVFJZIFBST1BFUlRZIFNUUklOR1MgIiR7ZXhwZWN0X1NUUklOR1N9IikKIGNoZWNrX2NhY2hlX3Byb3BzKCkKIAorZnVuY3Rpb24oZ2VuZXJhdGVfZmlsZV9mb3Jfc2V0X3Byb3BlcnR5X3Rlc3QgaSB0YXJnZXRfbmFtZSkKKyAgICBzZXQoc3JjX3BhdGggIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zcmMke2l9LmNwcCIpCisgICAgZmlsZShDT05GSUdVUkUgT1VUUFVUICIke3NyY19wYXRofSIgQ09OVEVOVAorICAgICAgICAiI2lmbmRlZiBkZWYke2l9XG5cCisgICAgICAgICNlcnJvciBFeHBlY3RlZCBkZWYke2l9XG5cCisgICAgICAgICNlbmRpZlxuXAorICAgICAgICAjaWZkZWYgX1dJTjMyXG5cCisgICAgICAgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KVxuXAorICAgICAgICAjZW5kaWZcblwKKyAgICAgICAgdm9pZCBkdW1teV9zeW1ib2wke2l9KCkge31cbiIKKyAgICAgICAgTkVXTElORV9TVFlMRSBVTklYKQorICAgIHRhcmdldF9zb3VyY2VzKCR7dGFyZ2V0X25hbWV9IFBSSVZBVEUgIiR7c3JjX3BhdGh9IikKK2VuZGZ1bmN0aW9uKCkKKworYWRkX2xpYnJhcnkobWFpbmRpcnRlc3QgU0hBUkVEKQorCisjIEdlbmVyYXRlIGZpbGUgdG8gYmUgdXNlZCB3aXRoIGJvdGggRElSRUNUT1JZIGFuZCBUQVJHRVRfRElSRUNUT1JZIG9wdGlvbnMgaW4KKyMgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIGFuZCBzZXRfcHJvcGVydHkoKS4KK2dlbmVyYXRlX2ZpbGVfZm9yX3NldF9wcm9wZXJ0eV90ZXN0KDMyIG1haW5kaXJ0ZXN0KQorZ2VuZXJhdGVfZmlsZV9mb3Jfc2V0X3Byb3BlcnR5X3Rlc3QoMzMgbWFpbmRpcnRlc3QpCisKIGFkZF9zdWJkaXJlY3RvcnkoU3ViRGlyMikKKworc2V0KHNyY19wcmVmaXggIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9TdWJEaXIyLyIpCisKKyMgU2V0IHByb3BlcnR5ICsgdGFyZ2V0IGRpcmVjdG9yeQorc2V0X3Byb3BlcnR5KFNPVVJDRSAiJHtzcmNfcHJlZml4fS9zcmMxLmNwcCIKKyAgICAgICAgICAgICBUQVJHRVRfRElSRUNUT1JZIHNldF9wcm9wX2xpYl8xCisgICAgICAgICAgICAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyBkZWYxKQorCisjIEFwcGVuZCBwcm9wZXJ0eSArIHRhcmdldCBkaXJlY3RvcnkKK3NldF9wcm9wZXJ0eShTT1VSQ0UgIiR7c3JjX3ByZWZpeH0vc3JjMi5jcHAiCisgICAgICAgICAgICAgVEFSR0VUX0RJUkVDVE9SWSBzZXRfcHJvcF9saWJfMQorICAgICAgICAgICAgIEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIGRlZjIpCisKKyMgU2V0IHByb3BlcnR5ICsgcmVsYXRpdmUgZGlyZWN0b3J5IHBhdGgKK3NldF9wcm9wZXJ0eShTT1VSQ0UgIiR7c3JjX3ByZWZpeH0vc3JjMy5jcHAiCisgICAgICAgICAgICAgRElSRUNUT1JZIFN1YkRpcjIKKyAgICAgICAgICAgICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIGRlZjMpCisKKyMgU2V0IHByb3BlcnR5ICsgYWJzb2x1dGUgZGlyZWN0b3J5IHBhdGgKK3NldF9wcm9wZXJ0eShTT1VSQ0UgIiR7c3JjX3ByZWZpeH0vc3JjNC5jcHAiCisgICAgICAgICAgICAgRElSRUNUT1JZICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU3ViRGlyMiIKKyAgICAgICAgICAgICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIGRlZjQpCisKKyMgQXBwZW5kIHByb3BlcnR5ICsgcmVsYXRpdmUgZGlyZWN0b3J5IHBhdGgKK3NldF9wcm9wZXJ0eShTT1VSQ0UgIiR7c3JjX3ByZWZpeH0vc3JjNS5jcHAiCisgICAgICAgICAgICAgRElSRUNUT1JZIFN1YkRpcjIKKyAgICAgICAgICAgICBBUFBFTkQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyBkZWY1KQorCisjIEFwcGVuZCBwcm9wZXJ0eSArIGFic29sdXRlIGRpcmVjdG9yeSBwYXRoCitzZXRfcHJvcGVydHkoU09VUkNFICIke3NyY19wcmVmaXh9L3NyYzYuY3BwIgorICAgICAgICAgICAgIERJUkVDVE9SWSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1N1YkRpcjIiCisgICAgICAgICAgICAgQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgZGVmNikKKworCisjIFRhcmdldCBkaXJlY3RvcnkKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1N1YkRpcjIvc3JjMTAuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQVJHRVRfRElSRUNUT1JZIHNldF9wcm9wX2xpYl8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyBkZWYxMCkKKworIyBSZWxhdGl2ZSBkaXJlY3RvcnkgcGF0aAorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vU3ViRGlyMi9zcmMxMS5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSRUNUT1JZIFN1YkRpcjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgZGVmMTEpCisKKyMgQWJzb2x1dGUgZGlyZWN0b3J5IHBhdGgKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1N1YkRpcjIvc3JjMTIuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUkVDVE9SWSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1N1YkRpcjIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TIGRlZjEyKQorCisKKyMgTXVsdGlwbGUgZmlsZXMgKyBhYnNvbHV0ZSBkaXJlY3RvcnkgcGF0aAorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vU3ViRGlyMi9zcmMyMC5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9TdWJEaXIyL3NyYzIxLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBESVJFQ1RPUlkgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9TdWJEaXIyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmMjA7ZGVmMjEiKQorCisjIE11bHRpcGxlIGZpbGVzICsgbXVsdGlwbGUgdGFyZ2V0IGRpcmVjdG9yaWVzCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9TdWJEaXIyL3NyYzIyLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1N1YkRpcjIvc3JjMjMuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9ESVJFQ1RPUlkgc2V0X3Byb3BfbGliXzIgc2V0X3Byb3BfbGliXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgImRlZjIyO2RlZjIzIikKKworCisjIE11bHRpcGxlIGZpbGVzIGluIG11bHRpcGxlIHJlbGF0aXZlIGRpcmVjdG9yaWVzCitnZW5lcmF0ZV9maWxlX2Zvcl9zZXRfcHJvcGVydHlfdGVzdCgzMCBtYWluZGlydGVzdCkKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3NyYzMwLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1N1YkRpcjIvc3JjMzEuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUkVDVE9SWSAuIFN1YkRpcjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgImRlZjMwO2RlZjMxIikKKworIyBDaGVjayB0aGF0IHNwZWNpZnlpbmcgZmlsZXMgd2l0aG91dCBhbnkgcHJvcGVydGllcyBkb2Vzbid0IGNyYXNoLgorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vc3JjMzAuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vU3ViRGlyMi9zcmMzMS5jcHAiKQorCisKKyMgQ2hlY2sgdGhhdCBzcGVjaWZ5aW5nIGJvdGggRElSRUNUT1JZIGFuZCBUQVJHRVRfRElSRUNUT1JZIHdvcmtzLgorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vc3JjMzIuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUkVDVE9SWSAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFSR0VUX0RJUkVDVE9SWSBzZXRfcHJvcF9saWJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmMzIiKQorCitzZXRfcHJvcGVydHkoU09VUkNFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vc3JjMzMuY3BwIgorICAgICAgICAgICAgIERJUkVDVE9SWSBTdWJEaXIyCisgICAgICAgICAgICAgVEFSR0VUX0RJUkVDVE9SWSBtYWluZGlydGVzdAorICAgICAgICAgICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgImRlZjMzIikKKworCitmdW5jdGlvbihjaGVja19nZXRfcHJvcGVydHlfdmFsdWUgZXhwZWN0ZWQpCisgICAgaWYoTk9UIGFjdHVhbCBTVFJFUVVBTCBleHBlY3RlZCkKKyAgICAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJFcnJvcjogZ2V0X3Byb3BlcnR5IHJldHVybmVkIHVuZXhwZWN0ZWQgdmFsdWVcbiIKKyAgICAgICAgICAgICAgICAiYWN0dWFsOiAke2FjdHVhbH1cbiIKKyAgICAgICAgICAgICAgICAiZXhwZWN0ZWQ6ICR7ZXhwZWN0ZWR9IikKKyAgICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKKyMgQ2hlY2sgdGhhdCBzb3VyY2UgZmlsZSBkaXJlY3Rvcnkgc2NvcGVzIGFyZSBkZWR1cGxpY2F0ZWQuCitzZXRfcHJvcGVydHkoU09VUkNFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vc3JjMzIuY3BwIgorICAgIERJUkVDVE9SWSBTdWJEaXIyIFN1YkRpcjIgU3ViRGlyMgorICAgIFRBUkdFVF9ESVJFQ1RPUlkgc2V0X3Byb3BfbGliXzMgc2V0X3Byb3BfbGliXzMgc2V0X3Byb3BfbGliXzMKKyAgICBBUFBFTkQKKyAgICBQUk9QRVJUWSBOT05fRFVQTElDQVRFRF9DVVNUT01fUFJPUCAxCispCisKK2dldF9wcm9wZXJ0eShhY3R1YWwKKyAgICAgICAgICAgICBTT1VSQ0UgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zcmMzMi5jcHAiCisgICAgICAgICAgICAgRElSRUNUT1JZIFN1YkRpcjIKKyAgICAgICAgICAgICBQUk9QRVJUWSBOT05fRFVQTElDQVRFRF9DVVNUT01fUFJPUCkKK2NoZWNrX2dldF9wcm9wZXJ0eV92YWx1ZSgiMSIpCisKK2dldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eShhY3R1YWwgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zcmMzMi5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgVEFSR0VUX0RJUkVDVE9SWSBzZXRfcHJvcF9saWJfMworICAgICAgICAgICAgICAgICAgICAgICAgIE5PTl9EVVBMSUNBVEVEX0NVU1RPTV9QUk9QKQorY2hlY2tfZ2V0X3Byb3BlcnR5X3ZhbHVlKCIxIikKKworIyBHZXQgcHJvcGVydHkgKyB0YXJnZXQgZGlyZWN0b3J5CitnZXRfcHJvcGVydHkoYWN0dWFsCisgICAgICAgICAgICAgU09VUkNFICIke3NyY19wcmVmaXh9L3NyYzEuY3BwIgorICAgICAgICAgICAgIFRBUkdFVF9ESVJFQ1RPUlkgc2V0X3Byb3BfbGliXzEKKyAgICAgICAgICAgICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TKQorY2hlY2tfZ2V0X3Byb3BlcnR5X3ZhbHVlKCJkZWYxIikKKworIyBHZXQgcHJvcGVydHkgKyByZWxhdGl2ZSBkaXJlY3RvcnkgcGF0aAorZ2V0X3Byb3BlcnR5KGFjdHVhbAorICAgICAgICAgICAgIFNPVVJDRSAiJHtzcmNfcHJlZml4fS9zcmMzLmNwcCIKKyAgICAgICAgICAgICBESVJFQ1RPUlkgU3ViRGlyMgorICAgICAgICAgICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMpCitjaGVja19nZXRfcHJvcGVydHlfdmFsdWUoImRlZjMiKQorCisjIEdldCBwcm9wZXJ0eSArIGFic29sdXRlIGRpcmVjdG9yeSBwYXRoCitnZXRfcHJvcGVydHkoYWN0dWFsCisgICAgICAgICAgICAgU09VUkNFICIke3NyY19wcmVmaXh9L3NyYzQuY3BwIgorICAgICAgICAgICAgIERJUkVDVE9SWSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1N1YkRpcjIiCisgICAgICAgICAgICAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUykKK2NoZWNrX2dldF9wcm9wZXJ0eV92YWx1ZSgiZGVmNCIpCisKKworIyBHZXQgcHJvcGVydHkgKyB0YXJnZXQgZGlyZWN0b3J5Cit1bnNldChhY3R1YWwpCitnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkoYWN0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9TdWJEaXIyL3NyYzEwLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICBUQVJHRVRfRElSRUNUT1JZIHNldF9wcm9wX2xpYl8xCisgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRV9ERUZJTklUSU9OUykKK2NoZWNrX2dldF9wcm9wZXJ0eV92YWx1ZSgiZGVmMTAiKQorCisjIEdldCBwcm9wZXJ0eSArIHJlbGF0aXZlIGRpcmVjdG9yeSBwYXRoCitnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkoYWN0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9TdWJEaXIyL3NyYzExLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICBESVJFQ1RPUlkgU3ViRGlyMgorICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMpCitjaGVja19nZXRfcHJvcGVydHlfdmFsdWUoImRlZjExIikKKworIyBHZXQgcHJvcGVydHkgKyBhYnNvbHV0ZSBkaXJlY3RvcnkgcGF0aAorZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5KGFjdHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vU3ViRGlyMi9zcmMxMi5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgRElSRUNUT1JZICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU3ViRGlyMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0RFRklOSVRJT05TKQorY2hlY2tfZ2V0X3Byb3BlcnR5X3ZhbHVlKCJkZWYxMiIpCmRpZmYgLS1naXQgYS9UZXN0cy9Qcm9wZXJ0aWVzL1N1YkRpcjIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9Qcm9wZXJ0aWVzL1N1YkRpcjIvQ01ha2VMaXN0cy50eHQKaW5kZXggMzc3ZGM4My4uODhlNTUzMSAxMDA2NDQKLS0tIGEvVGVzdHMvUHJvcGVydGllcy9TdWJEaXIyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1Byb3BlcnRpZXMvU3ViRGlyMi9DTWFrZUxpc3RzLnR4dApAQCAtMywzICszLDMyIEBACiAgIFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyBTVUJESVJfVEVTVCkKIAogYWRkX2V4ZWN1dGFibGUoc3ViZGlydGVzdCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uL3N1YmRpcnRlc3QuY3h4IikKKworIyBGb3Igc2V0X3Byb3BlcnR5CithZGRfbGlicmFyeShzZXRfcHJvcF9saWJfMSBTSEFSRUQpCitmb3JlYWNoKGkgUkFOR0UgMSA2KQorICAgIGdlbmVyYXRlX2ZpbGVfZm9yX3NldF9wcm9wZXJ0eV90ZXN0KCR7aX0gc2V0X3Byb3BfbGliXzEpCitlbmRmb3JlYWNoKCkKKworIyBGb3Igc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzCitmb3JlYWNoKGkgUkFOR0UgMTAgMTIpCisgICAgZ2VuZXJhdGVfZmlsZV9mb3Jfc2V0X3Byb3BlcnR5X3Rlc3QoJHtpfSBzZXRfcHJvcF9saWJfMSkKK2VuZGZvcmVhY2goKQorCisjIEZvciBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMgKyBtdWx0aXBsZSBmaWxlcyArIGFic29sdXRlIGRpcmVjdG9yeSBwYXRoCithZGRfbGlicmFyeShzZXRfcHJvcF9saWJfMiBTSEFSRUQpCitmb3JlYWNoKGkgUkFOR0UgMjAgMjEpCisgICAgZ2VuZXJhdGVfZmlsZV9mb3Jfc2V0X3Byb3BlcnR5X3Rlc3QoJHtpfSBzZXRfcHJvcF9saWJfMSkKK2VuZGZvcmVhY2goKQorCisjIEZvciBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMgKyBtdWx0aXBsZSBmaWxlcyArIG11bHRpcGxlIHRhcmdldCBkaXJlY3RvcmllcworYWRkX2xpYnJhcnkoc2V0X3Byb3BfbGliXzMgU0hBUkVEKQorZ2VuZXJhdGVfZmlsZV9mb3Jfc2V0X3Byb3BlcnR5X3Rlc3QoMjIgc2V0X3Byb3BfbGliXzIpCitnZW5lcmF0ZV9maWxlX2Zvcl9zZXRfcHJvcGVydHlfdGVzdCgyMyBzZXRfcHJvcF9saWJfMykKKworIyBGb3Igc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzICsgbXVsdGlwbGUgZmlsZXMgaW4gbXVsdGlwbGUgZGlyZWN0b3JpZXMKK2dlbmVyYXRlX2ZpbGVfZm9yX3NldF9wcm9wZXJ0eV90ZXN0KDMxIHNldF9wcm9wX2xpYl8zKQorCisjIEZvciBzcGVjaWZ5aW5nIGJvdGggRElSRUNUT1JZIGFuZCBUQVJHRVRfRElSRUNUT1JZCit0YXJnZXRfc291cmNlcyhzZXRfcHJvcF9saWJfMyBQUklWQVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vLi4vc3JjMzIuY3BwIikKK3RhcmdldF9zb3VyY2VzKHNldF9wcm9wX2xpYl8zIFBSSVZBVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8uLi9zcmMzMy5jcHAiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUXQ0QXV0b2dlbi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1F0NEF1dG9nZW4vQ01ha2VMaXN0cy50eHQKaW5kZXggNjhiODg1Yi4uZTdmMWFlMyAxMDA2NDQKLS0tIGEvVGVzdHMvUXQ0QXV0b2dlbi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9RdDRBdXRvZ2VuL0NNYWtlTGlzdHMudHh0CkBAIC03LDMgKzcsNSBAQAogCiAjIENvbW1vbiB0ZXN0cwogaW5jbHVkZSgiLi4vUXRBdXRvZ2VuL1Rlc3RzLmNtYWtlIikKKworc2V0KFRFU1RfQlVJTERfRElSUyAiJHtURVNUX0JVSUxEX0RJUlN9IiBQQVJFTlRfU0NPUEUpCmRpZmYgLS1naXQgYS9UZXN0cy9RdDVBdXRvZ2VuL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUXQ1QXV0b2dlbi9DTWFrZUxpc3RzLnR4dAppbmRleCA0OWQzM2NjLi5kZjQ5MjdhIDEwMDY0NAotLS0gYS9UZXN0cy9RdDVBdXRvZ2VuL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1F0NUF1dG9nZW4vQ01ha2VMaXN0cy50eHQKQEAgLTQsMyArNCw1IEBACiAKICMgQ29tbW9uIHRlc3RzCiBpbmNsdWRlKCIuLi9RdEF1dG9nZW4vVGVzdHMuY21ha2UiKQorCitzZXQoVEVTVF9CVUlMRF9ESVJTICIke1RFU1RfQlVJTERfRElSU30iIFBBUkVOVF9TQ09QRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9Db21wbGV4L2NvZGVlZGl0b3IuY3BwIGIvVGVzdHMvUXRBdXRvZ2VuL0NvbXBsZXgvY29kZWVkaXRvci5jcHAKaW5kZXggYmI2ZjQwNS4uODBkNmE1NSAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL0NvbXBsZXgvY29kZWVkaXRvci5jcHAKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL0NvbXBsZXgvY29kZWVkaXRvci5jcHAKQEAgLTQwLDcgKzQwLDEwIEBACiAKICNpbmNsdWRlICJjb2RlZWRpdG9yLmgiCiAKLSNpbmNsdWRlIDxRdEd1aT4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRU2l6ZT4KKyNpbmNsdWRlIDxRVGV4dEJsb2NrPgorI2luY2x1ZGUgPFFXaWRnZXQ+CiAKIENvZGVFZGl0b3I6OkNvZGVFZGl0b3IoUVdpZGdldCogcGFyZW50KQogICA6IFFQbGFpblRleHRFZGl0KHBhcmVudCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5Y2ZmZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsOSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTApCitwcm9qZWN0KE1vY0NNUDAxMDApCitpbmNsdWRlKCIuLi9BdXRvZ2VuQ29yZVRlc3QuY21ha2UiKQorCitzZXQoQ01BS0VfQVVUT01PQyBPTikKK3NldChDU0QgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQorCithZGRfc3ViZGlyZWN0b3J5KE9MRCkKK2FkZF9zdWJkaXJlY3RvcnkoTkVXKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvTkVXL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvTkVXL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NGIzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9ORVcvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCitjbWFrZV9wb2xpY3koU0VUIENNUDAxMDAgTkVXKQorCithZGRfZXhlY3V0YWJsZShtb2NDTVAwMTAwTmV3CisgICR7Q1NEfS9tYWluLmNwcAorICAke0NTRH0vT2JqLmhoICMgTWFudWFsbHkgaW5jbHVkZSBPYmouaGgKKyAgJHtDU0R9L09iai5jcHAKKyAgJHtDU0R9L09iajIuY3BwICMgTGV0IEFVVE9NT0MgZGV0ZWN0IE9iajIuaGgKKykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhtb2NDTVAwMTAwTmV3ICR7UVRfTElCUkFSSUVTfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL09MRC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL09MRC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmUwNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT0xEL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMzEgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KQorY21ha2VfcG9saWN5KFNFVCBDTVAwMTAwIE9MRCkKKworIyBHZW5lcmF0ZSBtb2MgZmlsZXMgZXh0ZXJuYWxseS4KKyMgSWYgQVVUT01PQyBnZW5lcmF0ZXMgdGhlIGhlYWRlciBtb2MgZmlsZXMgYXMgd2VsbAorIyAoaXQgc2hvdWxkIG5vdCBpbiBPTEQgYmVoYXZpb3IpLCB0aGUgdGVzdCB3aWxsIGZhaWwgd2l0aCBhCisjIG11bHRpcGxlIGRlZmluaXRpb24gZXJyb3Igd2hlbiBsaW5raW5nIHRoZSBleGVjdXRhYmxlLgorcXR4X3dyYXBfY3BwKG1vY0NNUDAxMDBPbGRNb2MgJHtDU0R9L09iai5oaCAke0NTRH0vT2JqMi5oaCkKK3F0eF9nZW5lcmF0ZV9tb2MoJHtDQkR9L09iai5jcHAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L09iai5tb2MpCitxdHhfZ2VuZXJhdGVfbW9jKCR7Q0JEfS9PYmoyLmNwcCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vT2JqMi5tb2MpCisKKyMgTWFrZSBzdXJlIEFVVE9HRU4gZmlsZSBza2lwcGluZyBpcyBkaXNhYmxlZAorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKAorICAke0NTRH0vT2JqLmhoCisgICR7Q0JEfS9PYmouY3BwCisgICR7Q1NEfS9PYmoyLmhoCisgICR7Q0JEfS9PYmoyLmNwcAorICBQUk9QRVJUSUVTCisgIFNLSVBfQVVUT0dFTiBPRkYKKyAgU0tJUF9BVVRPTU9DIE9GRgorKQorCithZGRfZXhlY3V0YWJsZShtb2NDTVAwMTAwT2xkCisgICR7Q1NEfS9tYWluLmNwcAorICAke0NTRH0vT2JqLmhoICMgTWFudWFsbHkgaW5jbHVkZSBPYmouaGgKKyAgJHtDU0R9L09iai5jcHAKKyAgJHtDU0R9L09iajIuY3BwICMgTGV0IEFVVE9NT0MgZGV0ZWN0IE9iajIuaGgKKyAgJHttb2NDTVAwMTAwT2xkTW9jfQorKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1vY0NNUDAxMDBPbGQgJHtRVF9MSUJSQVJJRVN9KQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMobW9jQ01QMDEwME9sZCBQUklWQVRFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL09iai5jcHAgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmQwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PYmouY3BwCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlICJPYmouaGgiCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBPYmpQcml2YXRlIDogcHVibGljIFFPYmplY3QKK3sKKyAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgT2JqUHJpdmF0ZSgpOworICB+T2JqUHJpdmF0ZSgpOworfTsKKworT2JqUHJpdmF0ZTo6T2JqUHJpdmF0ZSgpCit7Cit9CisKK09ialByaXZhdGU6On5PYmpQcml2YXRlKCkKK3sKK30KKworT2JqOjpPYmooKQorICA6IGQobmV3IE9ialByaXZhdGUpCit7Cit9CisKK09iajo6fk9iaigpCit7CisgIGRlbGV0ZSBkOworfQorCisjaW5jbHVkZSAiT2JqLm1vYyIKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL09iai5oaCBiL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL09iai5oaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDBiZmMyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT2JqLmhoCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgT0JKX0hICisjZGVmaW5lIE9CSl9ISAorCisjaW5jbHVkZSA8UU9iamVjdD4KKworLy8gUXQgZW5hYmxlZCBwcml2YXRlIGNsYXNzCitjbGFzcyBPYmpQcml2YXRlOworLy8gUXQgZW5hYmxlZCBjbGFzcworY2xhc3MgT2JqIDogcHVibGljIFFPYmplY3QKK3sKKyAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgT2JqKCk7CisgIH5PYmooKTsKKworcHJpdmF0ZToKKyAgT2JqUHJpdmF0ZSogY29uc3QgZDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT2JqMi5jcHAgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PYmoyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTM1OWFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT2JqMi5jcHAKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1ZGUgIk9iajIuaGgiCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBPYmoyUHJpdmF0ZSA6IHB1YmxpYyBRT2JqZWN0Cit7CisgIFFfT0JKRUNUCitwdWJsaWM6CisgIE9iajJQcml2YXRlKCk7CisgIH5PYmoyUHJpdmF0ZSgpOworfTsKKworT2JqMlByaXZhdGU6Ok9iajJQcml2YXRlKCkKK3sKK30KKworT2JqMlByaXZhdGU6On5PYmoyUHJpdmF0ZSgpCit7Cit9CisKK09iajI6Ok9iajIoKQorICA6IGQobmV3IE9iajJQcml2YXRlKQoreworfQorCitPYmoyOjp+T2JqMigpCit7CisgIGRlbGV0ZSBkOworfQorCisjaW5jbHVkZSAiT2JqMi5tb2MiCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9PYmoyLmhoIGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT2JqMi5oaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzc0Y2RkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL01vY0NNUDAxMDAvT2JqMi5oaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIE9CSjJfSEgKKyNkZWZpbmUgT0JKMl9ISAorCisjaW5jbHVkZSA8UU9iamVjdD4KKworLy8gUXQgZW5hYmxlZCBwcml2YXRlIGNsYXNzCitjbGFzcyBPYmoyUHJpdmF0ZTsKKy8vIFF0IGVuYWJsZWQgY2xhc3MKK2NsYXNzIE9iajIgOiBwdWJsaWMgUU9iamVjdAoreworICBRX09CSkVDVAorcHVibGljOgorICBPYmoyKCk7CisgIH5PYmoyKCk7CisKK3ByaXZhdGU6CisgIE9iajJQcml2YXRlKiBjb25zdCBkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9tYWluLmNwcCBiL1Rlc3RzL1F0QXV0b2dlbi9Nb2NDTVAwMTAwL21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDYxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9RdEF1dG9nZW4vTW9jQ01QMDEwMC9tYWluLmNwcApAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlICJPYmouaGgiCisjaW5jbHVkZSAiT2JqMi5oaCIKKworaW50IG1haW4oaW50IGFyZ3YsIGNoYXIqKiBhcmdzKQoreworICBPYmogb2JqOworICBPYmoyIG9iajI7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL0NNYWtlTGlzdHMudHh0CmluZGV4IGUxOTUxZjEuLmE3ZmIyZDcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vQ01ha2VMaXN0cy50eHQKQEAgLTEwNCw3ICsxMDQsNyBAQAogcmVxdWlyZV9jaGFuZ2UoQykKIHJlcXVpcmVfY2hhbmdlKEQpCiAjIFRoZXJlJ3MgYSBidWcgaW4gTmluamEgb24gV2luZG93czoKLSMgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzE2Nzc2CisjIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzE2Nzc2CiBpZihOT1QgKCIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIk5pbmphIikpCiAgIHJlcXVpcmVfY2hhbmdlKEUpCiBlbmRpZigpCkBAIC0xMjgsNyArMTI4LDcgQEAKIHJlcXVpcmVfY2hhbmdlKEMpCiByZXF1aXJlX2NoYW5nZShEKQogIyBUaGVyZSdzIGEgYnVnIGluIE5pbmphIG9uIFdpbmRvd3MKLSMgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzE2Nzc2CisjIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzE2Nzc2CiBpZihOT1QgKCIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIk5pbmphIikpCiAgIHJlcXVpcmVfY2hhbmdlKEUpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQS5ocHAgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQS5ocHAKaW5kZXggZTFmZGYwYi4uMTk4YWU5OCAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUEuaHBwCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVBLmhwcApAQCAtMTAsNyArMTAsNyBAQAogICBRX09CSkVDVAogICAvLyBKc29uIGZpbGUgaW4gc291cmNlIGxvY2FsIGRpcmVjdG9yeQogICBRX1BMVUdJTl9NRVRBREFUQShJSUQgIm9yZy5zdHlsZXMuQSIgRklMRSAiU3R5bGVBLmpzb24iKQotICBBX0NVU1RPTV9NQUNSTyhTb21lQXJnLCAiU3R5bGVBX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKKyAgQV9DVVNUT01fTUFDUk8ob3JnLnN0eWxlcy5BLCAiU3R5bGVBX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKIHB1YmxpYzoKICAgUVN0eWxlKiBjcmVhdGUoY29uc3QgUVN0cmluZyYga2V5KTsKIH07CmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQi5ocHAgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQi5ocHAKaW5kZXggNzU1MGQwYy4uOGNlOGQ3NyAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUIuaHBwCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVCLmhwcApAQCAtMTAsNyArMTAsNyBAQAogICBRX09CSkVDVAogICAvLyBKc29uIGZpbGUgaW4gc291cmNlIGxvY2FsIHN1YmRpcmVjdG9yeQogICBRX1BMVUdJTl9NRVRBREFUQShJSUQgIm9yZy5zdHlsZXMuQiIgRklMRSAianNvbkluL1N0eWxlQi5qc29uIikKLSAgQV9DVVNUT01fTUFDUk8oU29tZUFyZywgImpzb25Jbi9TdHlsZUJfQ3VzdG9tLmpzb24iLCBBbm90aGVyQXJnKQorICBBX0NVU1RPTV9NQUNSTyhvcmcuc3R5bGVzLkIsICJqc29uSW4vU3R5bGVCX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKIHB1YmxpYzoKICAgUVN0eWxlKiBjcmVhdGUoY29uc3QgUVN0cmluZyYga2V5KTsKIH07CmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQy5ocHAgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlQy5ocHAKaW5kZXggZWM3MWJlYy4uNTMxNzFlMyAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUMuaHBwCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVDLmhwcApAQCAtMTAsNyArMTAsNyBAQAogICBRX09CSkVDVAogICAvLyBKc29uIGZpbGUgaW4gZ2xvYmFsIHJvb3QgZGlyZWN0b3J5CiAgIFFfUExVR0lOX01FVEFEQVRBKElJRCAib3JnLnN0eWxlcy5DIiBGSUxFICJTdHlsZUMuanNvbiIpCi0gIEFfQ1VTVE9NX01BQ1JPKFNvbWVBcmcsICJTdHlsZUNfQ3VzdG9tLmpzb24iLCBBbm90aGVyQXJnKQorICBBX0NVU1RPTV9NQUNSTyhvcmcuc3R5bGVzLkMsICJTdHlsZUNfQ3VzdG9tLmpzb24iLCBBbm90aGVyQXJnKQogcHVibGljOgogICBRU3R5bGUqIGNyZWF0ZShjb25zdCBRU3RyaW5nJiBrZXkpOwogfTsKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVELmhwcCBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVELmhwcAppbmRleCAzYzA5M2I5Li4yOTY3NGY5IDEwMDY0NAotLS0gYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlRC5ocHAKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUQuaHBwCkBAIC0xMCw3ICsxMCw3IEBACiAgIFFfT0JKRUNUCiAgIC8vIEpzb24gZmlsZSBpbiBnbG9iYWwgc3ViIGRpcmVjdG9yCiAgIFFfUExVR0lOX01FVEFEQVRBKElJRCAib3JnLnN0eWxlcy5EIiBGSUxFICJzdWIvU3R5bGVELmpzb24iKQotICBBX0NVU1RPTV9NQUNSTyhTb21lQXJnLCAic3ViL1N0eWxlRF9DdXN0b20uanNvbiIsIEFub3RoZXJBcmcpCisgIEFfQ1VTVE9NX01BQ1JPKG9yZy5zdHlsZXMuRCwgInN1Yi9TdHlsZURfQ3VzdG9tLmpzb24iLCBBbm90aGVyQXJnKQogcHVibGljOgogICBRU3R5bGUqIGNyZWF0ZShjb25zdCBRU3RyaW5nJiBrZXkpOwogfTsKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVFSW5jbHVkZS5ocHAgYi9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1N0eWxlRUluY2x1ZGUuaHBwCmluZGV4IDVmMTBmYjQuLjczMTgyMjAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vU3R5bGVFSW5jbHVkZS5ocHAKKysrIGIvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9TdHlsZUVJbmNsdWRlLmhwcApAQCAtMTAsNyArMTAsNyBAQAogICBRX09CSkVDVAogICAvLyBKc29uIGZpbGVzIGluIGdsb2JhbCByb290IGRpcmVjdG9yeQogICBRX1BMVUdJTl9NRVRBREFUQShJSUQgIm9yZy5zdHlsZXMuRSIgRklMRSAiU3R5bGVFLmpzb24iKQotICBBX0NVU1RPTV9NQUNSTyhTb21lQXJnLCAiU3R5bGVFX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKKyAgQV9DVVNUT01fTUFDUk8ob3JnLnN0eWxlcy5FLCAiU3R5bGVFX0N1c3RvbS5qc29uIiwgQW5vdGhlckFyZykKIHB1YmxpYzoKICAgUVN0eWxlKiBjcmVhdGUoY29uc3QgUVN0cmluZyYga2V5KTsKIH07CmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1V0aWxpdHlNYWNyb3MuaHBwIGIvVGVzdHMvUXRBdXRvZ2VuL1JlcnVuTW9jUGx1Z2luL01vY1BsdWdpbi9VdGlsaXR5TWFjcm9zLmhwcAppbmRleCA1M2E0Mjg0Li4yZjU1OGE4IDEwMDY0NAotLS0gYS9UZXN0cy9RdEF1dG9nZW4vUmVydW5Nb2NQbHVnaW4vTW9jUGx1Z2luL1V0aWxpdHlNYWNyb3MuaHBwCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9SZXJ1bk1vY1BsdWdpbi9Nb2NQbHVnaW4vVXRpbGl0eU1hY3Jvcy5ocHAKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIFVUSUxJVFlNQUNST1NfSFBQCiAjZGVmaW5lIFVUSUxJVFlNQUNST1NfSFBQCiAKLS8vIEVtcHR5IHRlc3QgbWFjcm8gZGVmaW5pdGlvbgotI2RlZmluZSBBX0NVU1RPTV9NQUNSTyhuYW1lLCBqc29uRmlsZSwgcGx1Z2luUmVnaXN0cmF0aW9ucykKKyNkZWZpbmUgQV9DVVNUT01fTUFDUk8odXJsLCBqc29uRmlsZSwgcGx1Z2luUmVnaXN0cmF0aW9ucykgICAgICAgICAgICAgICAgICAgIFwKKyAgUV9QTFVHSU5fTUVUQURBVEEoSUlEICN1cmwgRklMRSBqc29uRmlsZSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvQ01ha2VMaXN0cy50eHQKaW5kZXggY2QyOWEyYS4uNGNlOGRiZCAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1NhbWVOYW1lL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9TYW1lTmFtZS9DTWFrZUxpc3RzLnR4dApAQCAtMSw3ICsxLDEwIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2LjApCiBwcm9qZWN0KFNhbWVOYW1lKQogaW5jbHVkZSgiLi4vQXV0b2dlbkd1aVRlc3QuY21ha2UiKQogCisjIFByb2Nlc3MgLmhoIGhlYWRlcnMgaW4gQVVUT01PQworY21ha2VfcG9saWN5KFNFVCBDTVAwMTAwIE5FVykKKwogIyBUZXN0IEFVVE9NT0MgYW5kIEFVVE9SQ0Mgb24gc291cmNlIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZQogIyBidXQgaW4gZGlmZmVyZW50IHN1YmRpcmVjdG9yaWVzCiAKQEAgLTE4LDYgKzIxLDcgQEAKICAgY2NjL2RhdGEucXJjCiAgIGl0ZW0uY3BwCiAgIG9iamVjdC5oCisgIG9iamVjdC5oaAogICBvYmplY3QuaCsrCiAgIG9iamVjdC5ocHAKICAgb2JqZWN0Lmh4eApkaWZmIC0tZ2l0IGEvVGVzdHMvUXRBdXRvZ2VuL1NhbWVOYW1lL21haW4uY3BwIGIvVGVzdHMvUXRBdXRvZ2VuL1NhbWVOYW1lL21haW4uY3BwCmluZGV4IDE5YTZmNmQuLjcyNWY0Y2QgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1F0QXV0b2dlbi9TYW1lTmFtZS9tYWluLmNwcAorKysgYi9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvbWFpbi5jcHAKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiaXRlbS5ocHAiCiAjaW5jbHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAib2JqZWN0LmgrKyIKKyNpbmNsdWRlICJvYmplY3QuaGgiCiAjaW5jbHVkZSAib2JqZWN0LmhwcCIKICNpbmNsdWRlICJvYmplY3QuaHh4IgogI2luY2x1ZGUgIm9iamVjdF91cHBlcl9leHQuSCIKQEAgLTIxLDYgKzIyLDcgQEAKICAgOjpjY2M6Okl0ZW0gY2NjX2l0ZW07CiAgIC8vIE9iamVjdCBpbnN0YW5jZXMKICAgOjpPYmplY3RfaCBvYmpfaDsKKyAgOjpPYmplY3RfaGggb2JqX2hoOwogICA6Ok9iamVjdF9ocGxwbCBvYmpfaHBscGw7CiAgIDo6T2JqZWN0X2hwcCBvYmpfaHBwOwogICA6Ok9iamVjdF9oeHggb2JqX2h4eDsKZGlmZiAtLWdpdCBhL1Rlc3RzL1F0QXV0b2dlbi9TYW1lTmFtZS9vYmplY3QuaGggYi9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvb2JqZWN0LmhoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTZmODMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9RdEF1dG9nZW4vU2FtZU5hbWUvb2JqZWN0LmhoCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgT0JKRUNUX0hICisjZGVmaW5lIE9CSkVDVF9ISAorCisjaW5jbHVkZSA8UU9iamVjdD4KKworY2xhc3MgT2JqZWN0X2hoIDogcHVibGljIFFPYmplY3QKK3sKKyAgUV9PQkpFQ1QKKyAgUV9TTE9UCisgIHZvaWQgZ28oKXt9OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vVGVzdHMuY21ha2UgYi9UZXN0cy9RdEF1dG9nZW4vVGVzdHMuY21ha2UKaW5kZXggMmIwMDFkNC4uZGZhNWVhMCAxMDA2NDQKLS0tIGEvVGVzdHMvUXRBdXRvZ2VuL1Rlc3RzLmNtYWtlCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9UZXN0cy5jbWFrZQpAQCAtMjksOSArMjksMTEgQEAKIEFERF9BVVRPR0VOX1RFU1QoVWljTm9HdWkgdWljTm9HdWkpCiBBRERfQVVUT0dFTl9URVNUKFVpY09ubHkgdWljT25seSkKIEFERF9BVVRPR0VOX1RFU1QoVWljU2tpcFNvdXJjZSkKK0FERF9BVVRPR0VOX1RFU1QoVW5pdHlNb2NTb3VyY2UpCiAKIGlmKFFUX1RFU1RfQUxMT1dfUVRfTUFDUk9TKQogICBBRERfQVVUT0dFTl9URVNUKE1vY0NNUDAwNzEpCisgIEFERF9BVVRPR0VOX1RFU1QoTW9jQ01QMDEwMCkKICAgQUREX0FVVE9HRU5fVEVTVChNb2NJbmNsdWRlKQogICBBRERfQVVUT0dFTl9URVNUKE1vY0luY2x1ZGVTeW1saW5rKQogICBBRERfQVVUT0dFTl9URVNUKE1vY1NraXBTb3VyY2UpCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vVW5pdHlNb2NTb3VyY2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9RdEF1dG9nZW4vVW5pdHlNb2NTb3VyY2UvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3MjMxOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9Vbml0eU1vY1NvdXJjZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDEyIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoVW5pdHlNb2NTb3VyY2UpCitpbmNsdWRlKCIuLi9BdXRvZ2VuR3VpVGVzdC5jbWFrZSIpCisKK3NldChDTUFLRV9BVVRPTU9DIE9OKQorc2V0KENNQUtFX1VOSVRZX0JVSUxEIE9OKQorCithZGRfbGlicmFyeShsaWJyYXJ5IGxpYnJhcnkuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxpYnJhcnkgJHtRVF9MSUJSQVJJRVN9KQorCithZGRfZXhlY3V0YWJsZSh1bml0eU1vY1NvdXJjZSBtYWluLmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh1bml0eU1vY1NvdXJjZSBQUklWQVRFIGxpYnJhcnkpCmRpZmYgLS1naXQgYS9UZXN0cy9RdEF1dG9nZW4vVW5pdHlNb2NTb3VyY2UvbGlicmFyeS5jcHAgYi9UZXN0cy9RdEF1dG9nZW4vVW5pdHlNb2NTb3VyY2UvbGlicmFyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzMGQ0YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1F0QXV0b2dlbi9Vbml0eU1vY1NvdXJjZS9saWJyYXJ5LmNwcApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxRT2JqZWN0PgorY2xhc3MgVGVzdCA6IHB1YmxpYyBRT2JqZWN0Cit7CisgIFFfT0JKRUNUCit9OworI2luY2x1ZGUgImxpYnJhcnkubW9jIgpkaWZmIC0tZ2l0IGEvVGVzdHMvRmluZE1vZHVsZXNFeGVjdXRlQWxsL21haW4uYyBiL1Rlc3RzL1F0QXV0b2dlbi9Vbml0eU1vY1NvdXJjZS9tYWluLmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL0ZpbmRNb2R1bGVzRXhlY3V0ZUFsbC9tYWluLmMKY29weSB0byBUZXN0cy9RdEF1dG9nZW4vVW5pdHlNb2NTb3VyY2UvbWFpbi5jcHAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNDU3OThjZS4uODFkZDA5MCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTE4LDE1ICsxOCwzMyBAQAogICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQogICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQogICBydW5fY21ha2UoJHtjYXNlfSkKLSAgcnVuX2NtYWtlX2NvbW1hbmQoJHtjYXNlfS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKKyAgc2V0KGNvbmZpZ3MgIi4iKQorICBpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgIHNldChjb25maWdzIFJlbGVhc2UgRGVidWcpCisgIGVuZGlmKCkKKyAgZm9yZWFjaChjb25maWcgSU4gTElTVFMgY29uZmlncykKKyAgICBzZXQoYnVpbGRfc3VmZml4KQorICAgIHNldChjb25maWdfYXJnKQorICAgIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgICAgICBzZXQoYnVpbGRfc3VmZml4ICItJHtjb25maWd9IikKKyAgICAgIHNldChjb25maWdfYXJnIC0tY29uZmlnICIke2NvbmZpZ30iKQorICAgIGVuZGlmKCkKKyAgICBydW5fY21ha2VfY29tbWFuZCgke2Nhc2V9LWJ1aWxkJHtidWlsZF9zdWZmaXh9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuICR7Y29uZmlnX2FyZ30pCisgIGVuZGZvcmVhY2goKQogZW5kZnVuY3Rpb24oKQogCitzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNX09MRCAiJHtSdW5DTWFrZV9HRU5FUkFUT1JfUExBVEZPUk19IikKKworaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICBzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNICJBUk0iKQorZW5kaWYoKQogc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAtRENNQUtFX1NZU1RFTV9OQU1FPUFuZHJvaWQKICAgLURDTUFLRV9TWVNST09UPSR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfQogICApCiBydW5fY21ha2UoQmFkU1lTUk9PVCkKIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKK3NldChSdW5DTWFrZV9HRU5FUkFUT1JfUExBVEZPUk0gIiR7UnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNX09MRH0iKQogCiBmb3JlYWNoKG5kayBJTiBMSVNUUyBURVNUX0FORFJPSURfTkRLKQogICAjIExvYWQgYXZhaWxhYmxlIHRvb2xjaGFpbiB2ZXJzaW9ucyBhbmQgYWJpcy4KQEAgLTcwLDYgKzg4LDkgQEAKICAgaWYoX3ZlcnNpb25zIE1BVENIRVMgImNsYW5nIikKICAgICBzZXQoX3ZlcnNpb25zICJjbGFuZyIgJHtfdmVyc2lvbnN9KQogICBlbmRpZigpCisgIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgICBzZXQoX3ZlcnNpb25zICJjbGFuZyIpCisgIGVuZGlmKCkKICAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfdmVyc2lvbnMpCiAgIGxpc3QoU09SVCBfdmVyc2lvbnMpCiAgIHNldChfdmVyc2lvbnMgIjske192ZXJzaW9uc30iKQpAQCAtNzcsNDQgKzk4LDU4IEBACiAgICAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfYWJpc18ke3ZlcnN9KQogICBlbmRmb3JlYWNoKCkKIAorICBzZXQobmRrX2FyZyAtRENNQUtFX0FORFJPSURfTkRLPSR7bmRrfSkKKyAgaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICAgIHNldChuZGtfYXJnKQorICBlbmRpZigpCisKICAgIyBUZXN0IGZhaWx1cmUgY2FzZXMuCiAgIG1lc3NhZ2UoU1RBVFVTICJuZGs9JyR7bmRrfSciKQorICBpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCisgICAgc2V0KFJ1bkNNYWtlX0dFTkVSQVRPUl9QTEFURk9STSAiQVJNIikKKyAgZW5kaWYoKQogICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TCiAgICAgLURDTUFLRV9TWVNURU1fTkFNRT1BbmRyb2lkCi0gICAgLURDTUFLRV9BTkRST0lEX05ESz0ke25ka30KKyAgICAke25ka19hcmd9CiAgICAgLURDTUFLRV9BTkRST0lEX0FSQ0hfQUJJPWJhZGFiaQogICAgICkKICAgcnVuX2NtYWtlKG5kay1iYWRhYmkpCisgIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgICBzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNICJ4ODYiKQorICBlbmRpZigpCiAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMKICAgICAtRENNQUtFX1NZU1RFTV9OQU1FPUFuZHJvaWQKLSAgICAtRENNQUtFX0FORFJPSURfTkRLPSR7bmRrfQorICAgICR7bmRrX2FyZ30KICAgICAtRENNQUtFX0FORFJPSURfQVJDSF9BQkk9eDg2CiAgICAgLURDTUFLRV9BTkRST0lEX0FSTV9NT0RFPTAKICAgICApCiAgIHJ1bl9jbWFrZShuZGstYmFkYXJtKQorICBpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCisgICAgc2V0KFJ1bkNNYWtlX0dFTkVSQVRPUl9QTEFURk9STSAiQVJNIikKKyAgZW5kaWYoKQogICBpZigiYXJtZWFiaSIgSU5fTElTVCBfYWJpc18pCiAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAgICAgLURDTUFLRV9TWVNURU1fTkFNRT1BbmRyb2lkCi0gICAgICAtRENNQUtFX0FORFJPSURfTkRLPSR7bmRrfQorICAgICAgJHtuZGtfYXJnfQogICAgICAgLURDTUFLRV9BTkRST0lEX0FSTV9ORU9OPTAKICAgICAgICkKICAgICBydW5fY21ha2UobmRrLWJhZG5lb24pCiAgIGVuZGlmKCkKICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAgIC1EQ01BS0VfU1lTVEVNX05BTUU9QW5kcm9pZAotICAgIC1EQ01BS0VfQU5EUk9JRF9OREs9JHtuZGt9CisgICAgJHtuZGtfYXJnfQogICAgIC1EQ01BS0VfQU5EUk9JRF9OREtfVE9PTENIQUlOX1ZFUlNJT049YmFkdmVyCiAgICAgKQogICBydW5fY21ha2UobmRrLWJhZHZlcikKICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAgIC1EQ01BS0VfU1lTVEVNX05BTUU9QW5kcm9pZAotICAgIC1EQ01BS0VfQU5EUk9JRF9OREs9JHtuZGt9CisgICAgJHtuZGtfYXJnfQogICAgIC1EQ01BS0VfQU5EUk9JRF9OREtfVE9PTENIQUlOX1ZFUlNJT049MS4wCiAgICAgKQogICBydW5fY21ha2UobmRrLWJhZHZlcm51bSkKICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwogICAgIC1EQ01BS0VfU1lTVEVNX05BTUU9QW5kcm9pZAotICAgIC1EQ01BS0VfQU5EUk9JRF9OREs9JHtuZGt9CisgICAgJHtuZGtfYXJnfQogICAgIC1EQ01BS0VfQU5EUk9JRF9TVExfVFlQRT1iYWRzdGwKICAgICApCiAgIHJ1bl9jbWFrZShuZGstYmFkc3RsKQpAQCAtMTMxLDYgKzE2Niw3IEBACiAgICAgcnVuX2NtYWtlKG5kay1zeXNyb290LWFybWVhYmkpCiAgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQogICBlbmRpZigpCisgIHNldChSdW5DTWFrZV9HRU5FUkFUT1JfUExBVEZPUk0gIiR7UnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNX09MRH0iKQogCiAgICMgRmluZCBhdmFpbGFibGUgU1RMcy4KICAgc2V0KHN0bF90eXBlcwpAQCAtMTU3LDIzICsxOTMsNDEgQEAKICAgICBhcm1lYWJpLXY2CiAgICAgYXJtZWFiaS12N2EKICAgICBhcm02NC12OGEKLSAgICBtaXBzCi0gICAgbWlwczY0CiAgICAgeDg2CiAgICAgeDg2XzY0CiAgICAgKQorICBpZihOT1QgUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICAgIGxpc3QoQVBQRU5EIGFiaV9uYW1lcyBtaXBzIG1pcHM2NCkKKyAgZW5kaWYoKQorICBzZXQoYWJpX3RvX2FyY2hfYXJtZWFiaSBBUk0pCisgIHNldChhYmlfdG9fYXJjaF9hcm1lYWJpLXY2IEFSTSkKKyAgc2V0KGFiaV90b19hcmNoX2FybWVhYmktdjdhIEFSTSkKKyAgc2V0KGFiaV90b19hcmNoX2FybTY0LXY4YSBBUk02NCkKKyAgc2V0KGFiaV90b19hcmNoX3g4NiB4ODYpCisgIHNldChhYmlfdG9fYXJjaF94ODZfNjQgeDY0KQogCiAgICMgVGVzdCBhbGwgY29tYmluYXRpb25zLgogICBmb3JlYWNoKHZlcnMgSU4gTElTVFMgX3ZlcnNpb25zKQogICAgIGZvcmVhY2goc3RsIElOIExJU1RTIHN0bF90eXBlcykKLSAgICAgIGZvcmVhY2goY29uZmlnIFJlbGVhc2UgRGVidWcpCisgICAgICBzZXQoY29uZmlncyBSZWxlYXNlIERlYnVnKQorICAgICAgc2V0KGZvcmVhY2hfbGlzdCAiJHtjb25maWdzfSIpCisgICAgICBpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgICAgICBzZXQoZm9yZWFjaF9saXN0ICIuIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGZvcmVhY2goY29uZmlnIElOIExJU1RTIGZvcmVhY2hfbGlzdCkKICAgICAgICAgIyBUZXN0IHRoaXMgY29tYmluYXRpb24gZm9yIGFsbCBhdmFpbGFibGUgYWJpcy4KLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIm5kaz0nJHtuZGt9JyB2ZXJzPScke3ZlcnN9JyBzdGw9JyR7c3RsfScgY29uZmlnPScke2NvbmZpZ30nIikKKyAgICAgICAgc2V0KGNvbmZpZ19zdGF0dXMgIiBjb25maWc9JyR7Y29uZmlnfSciKQorICAgICAgICBzZXQoYnVpbGRfdHlwZV9hcmcgIi1EQ01BS0VfQlVJTERfVFlQRT0ke2NvbmZpZ30iKQorICAgICAgICBpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICAgICAgICAgIHNldChjb25maWdfc3RhdHVzKQorICAgICAgICAgIHN0cmluZyhSRVBMQUNFICI7IiAiXFxcXDsiIGJ1aWxkX3R5cGVfYXJnICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9JHtjb25maWdzfSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIm5kaz0nJHtuZGt9JyB2ZXJzPScke3ZlcnN9JyBzdGw9JyR7c3RsfScke2NvbmZpZ19zdGF0dXN9IikKICAgICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUwotICAgICAgICAgIC1EQ01BS0VfQU5EUk9JRF9OREs9JHtuZGt9CisgICAgICAgICAgJHtuZGtfYXJnfQogICAgICAgICAgIC1EQ01BS0VfQU5EUk9JRF9OREtfVE9PTENIQUlOX1ZFUlNJT049JHt2ZXJzfQogICAgICAgICAgIC1EQ01BS0VfQU5EUk9JRF9TVExfVFlQRT0ke3N0bH0KLSAgICAgICAgICAtRENNQUtFX0JVSUxEX1RZUEU9JHtjb25maWd9CisgICAgICAgICAgIiR7YnVpbGRfdHlwZV9hcmd9IgogICAgICAgICAgICkKICAgICAgICAgZm9yZWFjaChhYmkgSU4gTElTVFMgYWJpX25hbWVzKQogICAgICAgICAgICMgU2tpcCBBQklzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21waWxlci4KQEAgLTE4Miw2ICsyMzYsOSBAQAogICAgICAgICAgIGVuZGlmKCkKIAogICAgICAgICAgICMgUnVuIHRoZSB0ZXN0cyBmb3IgdGhpcyBjb21iaW5hdGlvbi4KKyAgICAgICAgICBpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyIpCisgICAgICAgICAgICBzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNICIke2FiaV90b19hcmNoXyR7YWJpfX0iKQorICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgICBpZigiJHthYml9IiBTVFJFUVVBTCAiYXJtZWFiaSIpCiAgICAgICAgICAgICBydW5fQW5kcm9pZChuZGstYXJtZWFiaS10aHVtYikgIyBkZWZhdWx0OiAtRENNQUtFX0FORFJPSURfQVJDSF9BQkk9YXJtZWFiaSAtRENNQUtFX0FORFJPSURfQVJNX01PREU9MAogICAgICAgICAgICAgcnVuX0FuZHJvaWQobmRrLWFybWVhYmktYXJtIC1EQ01BS0VfQU5EUk9JRF9BUk1fTU9ERT0xKSAjIGRlZmF1bHQ6IC1EQ01BS0VfQU5EUk9JRF9BUkNIX0FCST1hcm1lYWJpCkBAIC0xOTEsNiArMjQ4LDcgQEAKICAgICAgICAgICAgICAgcnVuX0FuZHJvaWQobmRrLSR7YWJpfS1uZW9uIC1EQ01BS0VfQU5EUk9JRF9BUkNIX0FCST0ke2FiaX0gLURDTUFLRV9BTkRST0lEX0FSTV9ORU9OPTEpCiAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgIHNldChSdW5DTWFrZV9HRU5FUkFUT1JfUExBVEZPUk0gIiR7UnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNX09MRH0iKQogICAgICAgICBlbmRmb3JlYWNoKCkKICAgICAgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQogICAgICAgZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL2NvbW1vbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvY29tbW9uLmNtYWtlCmluZGV4IGQ5NmFiODYuLjMyNDEyYWEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvY29tbW9uLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvY29tbW9uLmNtYWtlCkBAIC05Niw3ICs5Niw3IEBACiBhZGRfZXhlY3V0YWJsZShhbmRyb2lkX2N4eCBhbmRyb2lkLmN4eCkKIGFkZF9saWJyYXJ5KGFuZHJvaWRfY3h4X2xpYiBTSEFSRUQgYW5kcm9pZF9saWIuY3h4KQogCi1zZXQob2JqZHVtcCAiJHtDTUFLRV9DWFhfQU5EUk9JRF9UT09MQ0hBSU5fUFJFRklYfW9iamR1bXAiKQorc2V0KG9iamR1bXAgIiR7Q01BS0VfQ1hYX0FORFJPSURfVE9PTENIQUlOX1BSRUZJWH1vYmpkdW1wJHtDTUFLRV9DWFhfQU5EUk9JRF9UT09MQ0hBSU5fU1VGRklYfSIpCiBpZihOT1QgRVhJU1RTICIke29iamR1bXB9IikKICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRXhwZWN0ZWQgdG9vbCBtaXNzaW5nOlxuICAke29iamR1bXB9IikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybTY0LXY4YS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGstYXJtNjQtdjhhLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiMzYzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybTY0LXY4YS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktYXJtLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL25kay1hcm1lYWJpLWFybS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjM2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL25kay1hcm1lYWJpLWFybS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdGh1bWItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdGh1bWItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2IzNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGstYXJtZWFiaS10aHVtYi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdjdhLW5lb24tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdjdhLW5lb24tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2IzNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGstYXJtZWFiaS12N2EtbmVvbi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLWFybWVhYmktdjdhLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL25kay1hcm1lYWJpLXY3YS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjM2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BbmRyb2lkL25kay1hcm1lYWJpLXY3YS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLXg4Ni1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGsteDg2LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiMzYzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLXg4Ni1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLXg4Nl82NC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQW5kcm9pZC9uZGsteDg2XzY0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiMzYzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0FuZHJvaWQvbmRrLXg4Nl82NC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXihDTWFrZSBXYXJuaW5nOgorICBZb3UgYXJlIHVzaW5nIFZpc3VhbCBTdHVkaW8gdG9vbHMgZm9yIEFuZHJvaWQsIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQKKyAgc3RhbmRhbG9uZSBleGVjdXRhYmxlc1wuICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGV4ZWN1dGFibGUgdGFyZ2V0cyBkbyBub3QKKyAgaGF2ZSB0aGUgQU5EUk9JRF9HVUkgcHJvcGVydHkgc2V0LCBhbmQgdGh1cyB3aWxsIG5vdCBiZSBidWlsdCBhcyBleHBlY3RlZFwuCisgIFRoZXkgd2lsbCBiZSBidWlsdCBhcyBzaGFyZWQgbGlicmFyaWVzIHdpdGggZXhlY3V0YWJsZSBmaWxlbmFtZXM6CisKKyAgICBhbmRyb2lkX2MsIGFuZHJvaWRfY3h4LCBhbmRyb2lkX3N5c2luY19jLCBhbmRyb2lkX3N5c2luY19jeHgpPyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdC1idWlsZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0LWJ1aWxkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXQtYnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXQtYnVpbGQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjBiYTNjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdC1idWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBVbmRlZmluZWQgc3ltYm9sOiAuQUlYTm90RXhwb3J0ZWQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyM2IxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0LmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldChDTUFLRV9BSVhfRVhQT1JUX0FMTF9TWU1CT0xTIE9GRikKK2FkZF9saWJyYXJ5KEFJWEV4cG9ydEV4cGxpY2l0TGliIFNIQVJFRCBBSVhFeHBvcnRFeHBsaWNpdExpYi5jKQorYWRkX2V4ZWN1dGFibGUoQUlYRXhwb3J0RXhwbGljaXRNYWluIEFJWEV4cG9ydEV4cGxpY2l0TWFpbi5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyhBSVhFeHBvcnRFeHBsaWNpdExpYiBQUklWQVRFIExJTktFUjotYkU6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0FJWEV4cG9ydEV4cGxpY2l0TGliLmV4cCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhBSVhFeHBvcnRFeHBsaWNpdE1haW4gUFJJVkFURSBBSVhFeHBvcnRFeHBsaWNpdExpYikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXRMaWIuYyBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXRMaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGZkNWFjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdExpYi5jCkBAIC0wLDAgKzEsOCBAQAoraW50IEFJWE5vdEV4cG9ydGVkKHZvaWQpCit7CisgIHJldHVybiAwOworfQoraW50IEFJWEV4cG9ydGVkU3ltYm9sKHZvaWQpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdExpYi5leHAgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0TGliLmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWI3YmY4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BSVhFeHBvcnRFeHBsaWNpdExpYi5leHAKQEAgLTAsMCArMSBAQAorQUlYRXhwb3J0ZWRTeW1ib2wKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQUlYRXhwb3J0RXhwbGljaXRNYWluLmMgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0TWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOWM4ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0FJWEV4cG9ydEV4cGxpY2l0TWFpbi5jCkBAIC0wLDAgKzEsNyBAQAorZXh0ZXJuIGludCBBSVhOb3RFeHBvcnRlZCh2b2lkKTsKK2V4dGVybiBpbnQgQUlYRXhwb3J0ZWRTeW1ib2wodm9pZCk7CisKK2ludCBtYWluKHZvaWQpCit7CisgIHJldHVybiBBSVhOb3RFeHBvcnRlZCgpICsgQUlYRXhwb3J0ZWRTeW1ib2woKTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQXV0b0V4cG9ydC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvQXV0b0V4cG9ydC5jbWFrZQppbmRleCBhNTUwMDA1Li44NWVmZjdlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL0F1dG9FeHBvcnQuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9BdXRvRXhwb3J0LmNtYWtlCkBAIC01LDYgKzUsMTAgQEAKIGFkZF9saWJyYXJ5KG9iamxpYiBPQkpFQ1Qgb2JqbGliLmMpCiBzZXRfcHJvcGVydHkoVEFSR0VUIG9iamxpYiBQUk9QRVJUWSBQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIDEpCiBhZGRfbGlicmFyeShhdXRvZXhwb3J0IFNIQVJFRCBoZWxsby5jeHggd29ybGQuY3h4IGZvby5jICQ8VEFSR0VUX09CSkVDVFM6b2JqbGliPikKK2FkZF9saWJyYXJ5KGF1dG9leHBvcnQzIFNIQVJFRCBjcHBDTEkuY3h4KQoraWYoTVNWQyBBTkQgTk9UIE1TVkNfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTYwMCkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBhdXRvZXhwb3J0MyBQUk9QRVJUWSBDT01NT05fTEFOR1VBR0VfUlVOVElNRSAiIikKK2VuZGlmKCkKIAogYWRkX2V4ZWN1dGFibGUoc2F5IHNheS5jeHgpCiBpZihNU1ZDKQpAQCAtMTgsNCArMjIsNCBAQAogICAgIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKHNheSBQUklWQVRFIEhBU19KVVNUTk9QKQogICBlbmRpZigpCiBlbmRpZigpCi10YXJnZXRfbGlua19saWJyYXJpZXMoc2F5IGF1dG9leHBvcnQgYXV0b2V4cG9ydDIpCit0YXJnZXRfbGlua19saWJyYXJpZXMoc2F5IGF1dG9leHBvcnQgYXV0b2V4cG9ydDIgYXV0b2V4cG9ydDMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDZjOWJlNGIuLjc1MTMwZjIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC01NSwzICs1NSwxNCBAQAogICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiXCIke0VYUE9SVFNfREVGfVwiIGhhcyBiZWVuIHVwZGF0ZWQuIikKICAgZW5kaWYoKQogZW5kaWYoKQorCitmdW5jdGlvbihydW5fQUlYRXhwb3J0RXhwbGljaXQpCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQUlYRXhwb3RFeHBsaWNpdC1idWlsZCIpCisgIHJ1bl9jbWFrZShBSVhFeHBvcnRFeHBsaWNpdCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIFRSVUUpCisgIHJ1bl9jbWFrZV9jb21tYW5kKEFJWEV4cG9ydEV4cGxpY2l0LWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIERlYnVnKQorZW5kZnVuY3Rpb24oKQoraWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkFJWCIpCisgIHJ1bl9BSVhFeHBvcnRFeHBsaWNpdCgpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL2NwcENMSS5jeHggYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL2NwcENMSS5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2YmI2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvY3BwQ0xJLmN4eApAQCAtMCwwICsxLDIyIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzX2NsaQorIyAgaW5jbHVkZSA8bXNjbHJcbWFyc2hhbF9jcHBzdGQuaD4KKwordm9pZCBjbGlGdW5jdGlvbigpCit7CisgIFN5c3RlbTo6U3RyaW5nIF4gcmVzdWx0ID0gImNsaUZ1bmN0aW9uIjsKKyAgcmVzdWx0ID0gcmVzdWx0LT5UcmltKCk7CisgIHByaW50Zihtc2Nscjo6aW50ZXJvcDo6bWFyc2hhbF9hczxzdGQ6OnN0cmluZz4ocmVzdWx0KS5jX3N0cigpKTsKK30KKyNlbHNlCit2b2lkIGNsaUZ1bmN0aW9uKCkKK3sKKyAgcHJpbnRmKCJjbGlGdW5jdGlvbiAoYnV0IC9jbGkgd2FzIG5vdCBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyKSIpOworfQorI2VuZGlmCisKK3ZvaWQgbm9uQ2xpRnVuY3Rpb24oKQoreworICBwcmludGYoIm5vbkNsaUZ1bmN0aW9uIik7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL3NheS5jeHggYi9UZXN0cy9SdW5DTWFrZS9BdXRvRXhwb3J0RGxsL3NheS5jeHgKaW5kZXggNjU0YjVlMC4uOGZjNzY4YSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQXV0b0V4cG9ydERsbC9zYXkuY3h4CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0F1dG9FeHBvcnREbGwvc2F5LmN4eApAQCAtMTcsOSArMTcsMTEgQEAKIH0KIAogLy8gdGVzdCBjKysgZnVuY3Rpb25zCi0vLyBmb3J3YXJkIGRlY2xhcmUgaGVsbG8gYW5kIHdvcmxkCisvLyBmb3J3YXJkIGRlY2xhcmUgaGVsbG8sIHdvcmxkLCBjbGlGdW5jdGlvbiBhbmQgbm9uQ2xpRnVuY3Rpb24KIHZvaWQgaGVsbG8oKTsKIHZvaWQgd29ybGQoKTsKK3ZvaWQgY2xpRnVuY3Rpb24oKTsKK3ZvaWQgbm9uQ2xpRnVuY3Rpb24oKTsKIAogLy8gdGVzdCBleHBvcnRzIGZvciBleGVjdXRhYmxlIHRhcmdldAogZXh0ZXJuICJDIiB7CkBAIC00NCw2ICs0NiwxMCBAQAogICBiYXIoKTsKICAgb2JqbGliKCk7CiAgIHByaW50ZigiXG4iKTsKKyAgY2xpRnVuY3Rpb24oKTsKKyAgcHJpbnRmKCJcbiIpOworICBub25DbGlGdW5jdGlvbigpOworICBwcmludGYoIlxuIik7CiAjaWZkZWYgSEFTX0pVU1ROT1AKICAganVzdG5vcCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvRXh0ZXJuYWxQcm9qZWN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0V4dGVybmFsUHJvamVjdC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2EwZjZlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0V4dGVybmFsUHJvamVjdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMikKK3Byb2plY3QoRXh0ZXJuYWwgTk9ORSkKKworaWYgKERFRklORUQgY2FjaGVfYXJnKQorICBtZXNzYWdlKCJjb25maWd1cmVkIHdpdGg6ICR7Y2FjaGVfYXJnfSIpCitlbHNlICgpCisgIG1lc3NhZ2UoImNhY2hlX2FyZyBpcyB1bmRlZmluZWQiKQorZW5kaWYgKCkKKworaWYgKERFRklORUQgc2Vjb25kX2NhY2hlX2FyZykKKyAgbWVzc2FnZSgiY29uZmlndXJlZCBhZ2FpbiB3aXRoOiAke3NlY29uZF9jYWNoZV9hcmd9IikKK2Vsc2UgKCkKKyAgbWVzc2FnZSgic2Vjb25kX2NhY2hlX2FyZyBpcyB1bmRlZmluZWQiKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9FeHRlcm5hbFByb2plY3RDYWNoZUFyZ3MtYnVpbGQxLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvRXh0ZXJuYWxQcm9qZWN0Q2FjaGVBcmdzLWJ1aWxkMS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTdmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvRXh0ZXJuYWxQcm9qZWN0Q2FjaGVBcmdzLWJ1aWxkMS1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMiBAQAorLipjb25maWd1cmVkIHdpdGg6IGZpcnN0CisuKnNlY29uZF9jYWNoZV9hcmcgaXMgdW5kZWZpbmVkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvRXh0ZXJuYWxQcm9qZWN0Q2FjaGVBcmdzLWJ1aWxkMi1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0V4dGVybmFsUHJvamVjdENhY2hlQXJncy1idWlsZDItc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTllNzQzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0V4dGVybmFsUHJvamVjdENhY2hlQXJncy1idWlsZDItc3Rkb3V0LnR4dApAQCAtMCwwICsxLDIgQEAKKy4qY29uZmlndXJlZCB3aXRoOiBmaXJzdAorLipjb25maWd1cmVkIGFnYWluIHdpdGg6IHNlY29uZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0V4dGVybmFsUHJvamVjdENhY2hlQXJncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9FeHRlcm5hbFByb2plY3RDYWNoZUFyZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2OTQyNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9FeHRlcm5hbFByb2plY3RDYWNoZUFyZ3MuY21ha2UKQEAgLTAsMCArMSwxOSBAQAoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2RhdGEuY21ha2UiKQorCitpbmNsdWRlKEV4dGVybmFsUHJvamVjdCkKK0V4dGVybmFsUHJvamVjdF9hZGQoZXh0ZXJuYWwKKyAgU09VUkNFX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9FeHRlcm5hbFByb2plY3QiCisgIENNQUtFX0NBQ0hFX0FSR1MKKyAgICAke2NhY2hlX2FyZ3N9CisgIEJVSUxEX0NPTU1BTkQgIiIKKyAgSU5TVEFMTF9DT01NQU5EICIiKQorCitzZXQoY2FjaGVfYXJnc19wYXRoICI8VE1QX0RJUj4vZXh0ZXJuYWwtY2FjaGUtJDxDT05GSUc+LmNtYWtlIikKK3NldChjbWFrZV9jYWNoZV9wYXRoICI8QklOQVJZX0RJUj4vQ01ha2VDYWNoZS50eHQiKQorX2VwX3JlcGxhY2VfbG9jYXRpb25fdGFncyhleHRlcm5hbCBjYWNoZV9hcmdzX3BhdGggY21ha2VfY2FjaGVfcGF0aCkKKworZmlsZShHRU5FUkFURSBPVVRQVVQgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jaGVjay0kPExPV0VSX0NBU0U6JDxDT05GSUc+Pi5jbWFrZSIgQ09OVEVOVCAiCitzZXQoY2hlY2tfcGFpcnMKKyAgXCIke2NtYWtlX2NhY2hlX3BhdGh9fCR7Y2FjaGVfYXJnc19wYXRofVwiCispCisiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0V4dGVybmFsUHJvamVjdENhY2hlQXJncy5zdGVwMS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9FeHRlcm5hbFByb2plY3RDYWNoZUFyZ3Muc3RlcDEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjN2FiNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9FeHRlcm5hbFByb2plY3RDYWNoZUFyZ3Muc3RlcDEuY21ha2UKQEAgLTAsMCArMSwzIEBACitmaWxlKFdSSVRFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZGF0YS5jbWFrZSIKKyAgInNldChjYWNoZV9hcmdzIC1EY2FjaGVfYXJnOlNUUklORz1maXJzdCkKKyIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvRXh0ZXJuYWxQcm9qZWN0Q2FjaGVBcmdzLnN0ZXAyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0V4dGVybmFsUHJvamVjdENhY2hlQXJncy5zdGVwMi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmI3OWUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0V4dGVybmFsUHJvamVjdENhY2hlQXJncy5zdGVwMi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2ZpbGUoV1JJVEUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9kYXRhLmNtYWtlIgorICAic2V0KGNhY2hlX2FyZ3MgLURzZWNvbmRfY2FjaGVfYXJnOlNUUklORz1zZWNvbmQpCisiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0dOVS1BUy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL0dOVS1BUy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzI2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLXN0ZG91dC50eHQKQEAgLTAsMCArMSw0IEBACistLSBUaGUgQVNNIGNvbXBpbGVyIGlkZW50aWZpY2F0aW9uIGlzIEdOVQorLS0gRm91bmQgYXNzZW1ibGVyOiBbXgorXSovYXMoXC5leGUpPworLS0gQ01BS0VfQVNNX0NPTVBJTEVSX0lEX1ZFTkRPUl9NQVRDSD0nR05VIGFzc2VtYmxlcicKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNzI0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK2VuYWJsZV9sYW5ndWFnZShBU00pCisKKyMgVmFsaWRhdGUgdW5kb2N1bWVudGVkIGltcGxlbWVudGF0aW9uIGRldGFpbC4KK21lc3NhZ2UoU1RBVFVTICJDTUFLRV9BU00ke0FTTV9ESUFMRUNUfV9DT01QSUxFUl9JRF9WRU5ET1JfTUFUQ0g9JyR7Q01BS0VfQVNNJHtBU01fRElBTEVDVH1fQ09NUElMRVJfSURfVkVORE9SX01BVENIfSciKQorCithZGRfbGlicmFyeShnbnVfYXMgU1RBVElDIGdudV9hcy5zKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoZ251X2FzIFBSSVZBVEUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9KQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoZ251X2FzIFBSSVZBVEUgIlRFU1RfREVGPUhlbGxvIikKKworZmlsZShHRU5FUkFURSBPVVRQVVQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NoZWNrLSQ8TE9XRVJfQ0FTRTokPENPTkZJRz4+LmNtYWtlIENPTlRFTlQgIgorc2V0KGNoZWNrX3BhaXJzCisgIFwiJDxUQVJHRVRfRklMRTpnbnVfYXM+fCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9nbnVfYXMuaW5jXCIKKyAgKQorIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuc3RlcDEuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLnN0ZXAxLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTVlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLnN0ZXAxLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoV1JJVEUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nbnVfYXMuaW5jIiAiIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9HTlUtQVMuc3RlcDIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLnN0ZXAyLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTVlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvR05VLUFTLnN0ZXAyLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoV1JJVEUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nbnVfYXMuaW5jIiAiIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDE0YWUyNDMuLjdhNjhjNGIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0J1aWxkRGVwZW5kcy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNDYsNiArNDYsMTEgQEAKIHJ1bl9CdWlsZERlcGVuZHMoQ3VzdG9tLVN5bWJvbGljLWFuZC1CeXByb2R1Y3QpCiBydW5fQnVpbGREZXBlbmRzKEN1c3RvbS1BbHdheXMpCiAKK3NldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRV9zYXZlICIke1J1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFfSIpCitzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgMSkKK3J1bl9CdWlsZERlcGVuZHMoRXh0ZXJuYWxQcm9qZWN0Q2FjaGVBcmdzKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFICIke1J1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFX3NhdmV9IikKKwogIyBUZXN0IGhlYWRlciBkZXBlbmRlbmNpZXMgd2l0aCBhIGJ1aWxkIHRyZWUgdW5kZXJuZWF0aCBhIHNvdXJjZSB0cmVlLgogc2V0KFJ1bkNNYWtlX1RFU1RfU09VUkNFX0RJUiAiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9CdWlsZFVuZGVyU291cmNlIikKIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQnVpbGRVbmRlclNvdXJjZS9idWlsZCIpCkBAIC0xMDMsMyArMTA4LDggQEAKIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBTVFJFUVVBTCAiWGNvZGUiKQogICBydW5fUmVHZW5lcmF0aW9uKHJlZ2VuZXJhdGUtcHJvamVjdCkKIGVuZGlmKCkKKworaWYoQ01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTKQorICBzZXQoRU5We0FTTX0gIiR7Q01ha2VfVEVTVF9CdWlsZERlcGVuZHNfR05VX0FTfSIpCisgIHJ1bl9CdWlsZERlcGVuZHMoR05VLUFTKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL2dudV9hcy5zIGIvVGVzdHMvUnVuQ01ha2UvQnVpbGREZXBlbmRzL2dudV9hcy5zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTdkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9CdWlsZERlcGVuZHMvZ251X2FzLnMKQEAgLTAsMCArMSBAQAorLmluY2x1ZGUgImdudV9hcy5pbmMiCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9CdW5kbGVVdGlsaXRpZXMvRXhlY3V0YWJsZVNjcmlwdHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdW5kbGVVdGlsaXRpZXMvRXhlY3V0YWJsZVNjcmlwdHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhOWI2NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0J1bmRsZVV0aWxpdGllcy9FeGVjdXRhYmxlU2NyaXB0cy5jbWFrZQpAQCAtMCwwICsxLDE4IEBACitpbmNsdWRlKEJ1bmRsZVV0aWxpdGllcykKKworc2V0KEJVX0NITU9EX0JVTkRMRV9JVEVNUyBPTikKKworZnVuY3Rpb24oY2hlY2tfc2NyaXB0IHNjcmlwdCkKKyAgZml4dXBfYnVuZGxlX2l0ZW0oJHtzY3JpcHR9ICR7c2NyaXB0fSAiIiAiIikKK2VuZGZ1bmN0aW9uKCkKKworIyBTaG91bGQgbm90IHRocm93IGFueSBlcnJvcnMKKyMgU2hlbGwgc2NyaXB0CitzZXQoc2NyaXB0X3NoX0VNQkVEREVEX0lURU0gJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS90ZXN0LmFwcC9zY3JpcHQuc2gpCitjaGVja19zY3JpcHQoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS90ZXN0LmFwcC9zY3JpcHQuc2gpCisjIEJhdGNoIHNjcmlwdAorc2V0KHNjcmlwdF9iYXRfRU1CRURERURfSVRFTSAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3Rlc3QuYXBwL3NjcmlwdC5iYXQpCitjaGVja19zY3JpcHQoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS90ZXN0LmFwcC9zY3JpcHQuYmF0KQorIyBTaGVsbCBzY3JpcHQgd2l0aG91dCBleHRlbnNpb24KK3NldChzY3JpcHRfRU1CRURERURfSVRFTSAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3Rlc3QuYXBwL3NjcmlwdCkKK2NoZWNrX3NjcmlwdCgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3Rlc3QuYXBwL3NjcmlwdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0J1bmRsZVV0aWxpdGllcy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9CdW5kbGVVdGlsaXRpZXMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDE0YWFmZjEuLmRmMjgxMDIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0J1bmRsZVV0aWxpdGllcy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVuZGxlVXRpbGl0aWVzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtOSwzICs5LDQgQEAKIHJ1bl9jbWFrZV9jb21tYW5kKENNUDAwODAtQ09NTUFORC1PTEQgJHtDTUFLRV9DT01NQU5EfSAtRENNUDAwODBfVkFMVUU6U1RSSU5HPU9MRCAtUCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L0NNUDAwODAtQ09NTUFORC5jbWFrZSkKIHJ1bl9jbWFrZV9jb21tYW5kKENNUDAwODAtQ09NTUFORC1ORVcgJHtDTUFLRV9DT01NQU5EfSAtRENNUDAwODBfVkFMVUU6U1RSSU5HPU5FVyAtUCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L0NNUDAwODAtQ09NTUFORC5jbWFrZSkKIHJ1bl9jbWFrZV9jb21tYW5kKENNUDAwODAtQ09NTUFORC1XQVJOICR7Q01BS0VfQ09NTUFORH0gLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9DTVAwMDgwLUNPTU1BTkQuY21ha2UpCitydW5fY21ha2VfY29tbWFuZChFeGVjdXRhYmxlU2NyaXB0cyAke0NNQUtFX0NPTU1BTkR9IC1QICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vRXhlY3V0YWJsZVNjcmlwdHMuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9CdW5kbGVVdGlsaXRpZXMvdGVzdC5hcHAvc2NyaXB0IGIvVGVzdHMvUnVuQ01ha2UvQnVuZGxlVXRpbGl0aWVzL3Rlc3QuYXBwL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yM2JmNDdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVuZGxlVXRpbGl0aWVzL3Rlc3QuYXBwL3NjcmlwdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9iYXNoCisKK2VjaG8gIkhlbGxvIFdvcmxkIgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQnVuZGxlVXRpbGl0aWVzL3Rlc3QuYXBwL3NjcmlwdC5iYXQgYi9UZXN0cy9SdW5DTWFrZS9CdW5kbGVVdGlsaXRpZXMvdGVzdC5hcHAvc2NyaXB0LmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYmIwZWMyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVuZGxlVXRpbGl0aWVzL3Rlc3QuYXBwL3NjcmlwdC5iYXQKQEAgLTAsMCArMSwzIEBACitAZWNobyBvZmYKKworZWNobyAiSGVsbG8gd29ybGQiCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9CdW5kbGVVdGlsaXRpZXMvdGVzdC5hcHAvc2NyaXB0LnNoIGIvVGVzdHMvUnVuQ01ha2UvQnVuZGxlVXRpbGl0aWVzL3Rlc3QuYXBwL3NjcmlwdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yM2JmNDdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQnVuZGxlVXRpbGl0aWVzL3Rlc3QuYXBwL3NjcmlwdC5zaApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9iYXNoCisKK2VjaG8gIkhlbGxvIFdvcmxkIgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LU5FVy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LU5FVy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTU4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDE5L0NNUDAwMTktTkVXLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTWFrZUxpc3RzLnR4dDoxIFwoY21ha2VfbWluaW11bV9yZXF1aXJlZFwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDE5L0NNUDAwMTktT0xELXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDE5L0NNUDAwMTktT0xELXN0ZGVyci50eHQKaW5kZXggMDQ4NzYyZC4uYTQ0NjIxMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LU9MRC1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMTkvQ01QMDAxOS1PTEQtc3RkZXJyLnR4dApAQCAtMSw0ICsxLDExIEBACi1eQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTVAwMDE5LU9MRC5jbWFrZTpbMC05XSsgXChjbWFrZV9wb2xpY3lcKToKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorKworQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTVAwMDE5LU9MRC5jbWFrZTpbMC05XSsgXChjbWFrZV9wb2xpY3lcKToKICAgVGhlIE9MRCBiZWhhdmlvciBmb3IgcG9saWN5IENNUDAwMTkgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbgogICBvZiBDTWFrZS4KIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMTkvQ01QMDAxOS1XQVJOLXN0ZGVyci50eHQKaW5kZXggMWU0YjQ3ZC4uZjdiOWMwZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAxOS9DTVAwMDE5LVdBUk4tc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDE5L0NNUDAwMTktV0FSTi1zdGRlcnIudHh0CkBAIC0xLDMgKzEsMTAgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorKwogQ01ha2UgV2FybmluZyBcKGRldlwpIGluIENNYWtlTGlzdHMudHh0OgogICBQb2xpY3kgQ01QMDAxOSBpcyBub3Qgc2V0OiBEbyBub3QgcmUtZXhwYW5kIHZhcmlhYmxlcyBpbiBpbmNsdWRlIGFuZCBsaW5rCiAgIGluZm9ybWF0aW9uLiAgUnVuICJjbWFrZSAtLWhlbHAtcG9saWN5IENNUDAwMTkiIGZvciBwb2xpY3kgZGV0YWlscy4gIFVzZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1leGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tZXhlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNThmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tZXhlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTWFrZUxpc3RzLnR4dDoxIFwoY21ha2VfbWluaW11bV9yZXF1aXJlZFwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDIyL0NNUDAwMjItTk9XQVJOLXNoYXJlZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zaGFyZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE1OGZiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zaGFyZWQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tc3RhdGljLU5FVy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zdGF0aWMtTkVXLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNThmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tc3RhdGljLU5FVy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNiBAQAorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQ01ha2VMaXN0cy50eHQ6MSBcKGNtYWtlX21pbmltdW1fcmVxdWlyZWRcKToKKyAgQ29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDwgMi44LjEyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24gb2YKKyAgQ01ha2UuCisKKyAgVXBkYXRlIHRoZSBWRVJTSU9OIGFyZ3VtZW50IDxtaW4+IHZhbHVlIG9yIHVzZSBhIC4uLjxtYXg+IHN1ZmZpeCB0byB0ZWxsCisgIENNYWtlIHRoYXQgdGhlIHByb2plY3QgZG9lcyBub3QgbmVlZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zdGF0aWMtbGlua19saWJyYXJpZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tc3RhdGljLWxpbmtfbGlicmFyaWVzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNThmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1OT1dBUk4tc3RhdGljLWxpbmtfbGlicmFyaWVzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTWFrZUxpc3RzLnR4dDoxIFwoY21ha2VfbWluaW11bV9yZXF1aXJlZFwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDIyL0NNUDAwMjItTk9XQVJOLXN0YXRpYy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zdGF0aWMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE1OGZiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLU5PV0FSTi1zdGF0aWMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1XQVJOLWVtcHR5LW9sZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLVdBUk4tZW1wdHktb2xkLXN0ZGVyci50eHQKaW5kZXggNmE2YTBjNy4uODc0MDRkMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLVdBUk4tZW1wdHktb2xkLXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLVdBUk4tZW1wdHktb2xkLXN0ZGVyci50eHQKQEAgLTEsMyArMSwxMCBAQAorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQ01ha2VMaXN0cy50eHQ6MSBcKGNtYWtlX21pbmltdW1fcmVxdWlyZWRcKToKKyAgQ29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDwgMi44LjEyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24gb2YKKyAgQ01ha2UuCisKKyAgVXBkYXRlIHRoZSBWRVJTSU9OIGFyZ3VtZW50IDxtaW4+IHZhbHVlIG9yIHVzZSBhIC4uLjxtYXg+IHN1ZmZpeCB0byB0ZWxsCisgIENNYWtlIHRoYXQgdGhlIHByb2plY3QgZG9lcyBub3QgbmVlZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuCisrCiBDTWFrZSBXYXJuaW5nIFwoZGV2XCkgaW4gQ01ha2VMaXN0cy50eHQ6CiAgIFBvbGljeSBDTVAwMDIyIGlzIG5vdCBzZXQ6IElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyBkZWZpbmVzIHRoZSBsaW5rCiAgIGludGVyZmFjZS4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMDIyIiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UgdGhlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDIyL0NNUDAwMjItV0FSTi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLVdBUk4tc3RkZXJyLnR4dAppbmRleCAyZjdkZmJmLi41ZDc1NzIwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDIyL0NNUDAwMjItV0FSTi1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1XQVJOLXN0ZGVyci50eHQKQEAgLTEsNCArMSwxMSBAQAotXkNNYWtlIFdhcm5pbmcgXChkZXZcKSBpbiBDTWFrZUxpc3RzLnR4dDoKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNYWtlTGlzdHMudHh0OjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorKworQ01ha2UgV2FybmluZyBcKGRldlwpIGluIENNYWtlTGlzdHMudHh0OgogICBQb2xpY3kgQ01QMDAyMiBpcyBub3Qgc2V0OiBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMgZGVmaW5lcyB0aGUgbGluawogICBpbnRlcmZhY2UuICBSdW4gImNtYWtlIC0taGVscC1wb2xpY3kgQ01QMDAyMiIgZm9yIHBvbGljeSBkZXRhaWxzLiAgVXNlIHRoZQogICBjbWFrZV9wb2xpY3kgY29tbWFuZCB0byBzZXQgdGhlIHBvbGljeSBhbmQgc3VwcHJlc3MgdGhpcyB3YXJuaW5nLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAyMi9DTVAwMDIyLWV4cG9ydC1leGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1leHBvcnQtZXhlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhNThmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjIvQ01QMDAyMi1leHBvcnQtZXhlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTWFrZUxpc3RzLnR4dDoxIFwoY21ha2VfbWluaW11bV9yZXF1aXJlZFwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI2L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyNi9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li40YjNkZTg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI2L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjYvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI3L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyNy9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li40YjNkZTg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI3L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjcvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI4L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDAyOC9DTWFrZUxpc3RzLnR4dAppbmRleCAxNDRjZGI0Li40Zjg2N2RmIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDI4L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMjgvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IENYWCkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSBOT19QT0xJQ1lfU0NPUEUpICMgcG9saWN5IHVzZWQgYXQgZW5kIG9mIGRpcgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAzNy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwMzcvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNGIzZGU4NCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAzNy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDM3L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDAzNy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDM3L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA5ODI3NGYwLi41OTUyMjc5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDM3L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDM3L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMSw1ICsxLDI0IEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogCitpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiXk5pbmphIikKKyAgIyBEZXRlY3QgbmluamEgdmVyc2lvbiBzbyB3ZSBrbm93IHdoYXQgdGVzdHMgY2FuIGJlIHN1cHBvcnRlZC4KKyAgZXhlY3V0ZV9wcm9jZXNzKAorICAgIENPTU1BTkQgIiR7UnVuQ01ha2VfTUFLRV9QUk9HUkFNfSIgLS12ZXJzaW9uCisgICAgT1VUUFVUX1ZBUklBQkxFIG5pbmphX291dAorICAgIEVSUk9SX1ZBUklBQkxFIG5pbmphX291dAorICAgIFJFU1VMVF9WQVJJQUJMRSBuaW5qYV9yZXMKKyAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRQorICAgICkKKyAgaWYobmluamFfcmVzIEVRVUFMIDAgQU5EICJ4JHtuaW5qYV9vdXR9IiBNQVRDSEVTICJeeFswLTldK1xcLlswLTldKyIpCisgICAgc2V0KG5pbmphX3ZlcnNpb24gIiR7bmluamFfb3V0fSIpCisgICAgbWVzc2FnZShTVEFUVVMgIm5pbmphIHZlcnNpb246ICR7bmluamFfdmVyc2lvbn0iKQorICBlbHNlKCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICInbmluamEgLS12ZXJzaW9uJyByZXBvcnRlZDpcbiR7bmluamFfb3V0fSIpCisgIGVuZGlmKCkKK2Vsc2UoKQorICBzZXQobmluamFfdmVyc2lvbiAiIikKK2VuZGlmKCkKKwogcnVuX2NtYWtlKENNUDAwMzctT0xELXNwYWNlKQogcnVuX2NtYWtlKENNUDAwMzctTkVXLXNwYWNlKQogcnVuX2NtYWtlKENNUDAwMzctV0FSTi1zcGFjZSkKQEAgLTksOCArMjgsMTAgQEAKICAgcnVuX2NtYWtlKENNUDAwMzctV0FSTi1jb2xvbikKIGVuZGlmKCkKIAotcnVuX2NtYWtlKENNUDAwMzctV0FSTi1yZXNlcnZlZCkKLXJ1bl9jbWFrZShDTVAwMDM3LU9MRC1yZXNlcnZlZCkKK2lmKE5PVCBuaW5qYV92ZXJzaW9uIFZFUlNJT05fR1JFQVRFUl9FUVVBTCAxLjEwKQorICBydW5fY21ha2UoQ01QMDAzNy1XQVJOLXJlc2VydmVkKQorICBydW5fY21ha2UoQ01QMDAzNy1PTEQtcmVzZXJ2ZWQpCitlbmRpZigpCiBydW5fY21ha2UoQ01QMDAzNy1ORVctcmVzZXJ2ZWQpCiAKIHJ1bl9jbWFrZShORVctY29uZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDEvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDQxL0NNYWtlTGlzdHMudHh0CmluZGV4IGY0NTJkYjEuLmEwNjU5MWMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDEvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDA0MS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gQ1hYKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDA0Mi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDIvQ01ha2VMaXN0cy50eHQKaW5kZXggZjQ1MmRiMS4uYTA2NTkxYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01QMDA0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDQyL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBDWFgpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDQzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDA0My9DTWFrZUxpc3RzLnR4dAppbmRleCBkMDI3ZjNlLi5jYzhhNmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDQzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDMvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IENYWCkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSBOT19QT0xJQ1lfU0NPUEUpICMgcG9saWN5IHVzZWQgYXQgZW5kIG9mIGRpcgogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDQ1L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDA0NS9DTWFrZUxpc3RzLnR4dAppbmRleCBmNDUyZGIxLi5hMDY1OTFjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDQ1L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNDUvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IENYWCkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNjgvQ01QMDA2OC1PTEQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNjgvQ01QMDA2OC1PTEQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzM2MTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDA2OC9DTVAwMDY4LU9MRC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTAgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNUDAwNjgtT0xELmNtYWtlOlswLTldKyBcKGNtYWtlX3BvbGljeVwpOgorICBUaGUgT0xEIGJlaGF2aW9yIGZvciBwb2xpY3kgQ01QMDA2OCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uCisgIG9mIENNYWtlLgorCisgIFRoZSBjbWFrZS1wb2xpY2llc1woN1wpIG1hbnVhbCBleHBsYWlucyB0aGF0IHRoZSBPTEQgYmVoYXZpb3JzIG9mIGFsbAorICBwb2xpY2llcyBhcmUgZGVwcmVjYXRlZCBhbmQgdGhhdCBhIHBvbGljeSBzaG91bGQgYmUgc2V0IHRvIE9MRCBvbmx5IHVuZGVyCisgIHNwZWNpZmljIHNob3J0LXRlcm0gY2lyY3Vtc3RhbmNlcy4gIFByb2plY3RzIHNob3VsZCBiZSBwb3J0ZWQgdG8gdGhlIE5FVworICBiZWhhdmlvciBhbmQgbm90IHJlbHkgb24gc2V0dGluZyBhIHBvbGljeSB0byBPTEQuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMDY5L0NNUDAwNjktT0xELXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMDY5L0NNUDAwNjktT0xELXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUxYTZmNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAwNjkvQ01QMDA2OS1PTEQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDEwIEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBDTVAwMDY5LU9MRC5jbWFrZTpbMC05XSsgXChjbWFrZV9wb2xpY3lcKToKKyAgVGhlIE9MRCBiZWhhdmlvciBmb3IgcG9saWN5IENNUDAwNjkgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbgorICBvZiBDTWFrZS4KKworICBUaGUgY21ha2UtcG9saWNpZXNcKDdcKSBtYW51YWwgZXhwbGFpbnMgdGhhdCB0aGUgT0xEIGJlaGF2aW9ycyBvZiBhbGwKKyAgcG9saWNpZXMgYXJlIGRlcHJlY2F0ZWQgYW5kIHRoYXQgYSBwb2xpY3kgc2hvdWxkIGJlIHNldCB0byBPTEQgb25seSB1bmRlcgorICBzcGVjaWZpYyBzaG9ydC10ZXJtIGNpcmN1bXN0YW5jZXMuICBQcm9qZWN0cyBzaG91bGQgYmUgcG9ydGVkIHRvIHRoZSBORVcKKyAgYmVoYXZpb3IgYW5kIG5vdCByZWx5IG9uIHNldHRpbmcgYSBwb2xpY3kgdG8gT0xELgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLUNvbW1vbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1Db21tb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmZGFkNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1Db21tb24uY21ha2UKQEAgLTAsMCArMSwyIEBACisKK21hcmtfYXNfYWR2YW5jZWQoQ01QMDEwMl9URVNUX1ZBUklBQkxFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLU5FVy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1ORVcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmNzY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1ORVcuY21ha2UKQEAgLTAsMCArMSwxMyBAQAorCitjbWFrZV9wb2xpY3koU0VUIENNUDAxMDIgTkVXKQorCitpbmNsdWRlIChDTVAwMTAyLUNvbW1vbi5jbWFrZSkKK2dldF9wcm9wZXJ0eShpc190eXBlX3NldCBDQUNIRSBDTVAwMTAyX1RFU1RfVkFSSUFCTEUKKyAgUFJPUEVSVFkgVFlQRSBTRVQpCitpZiAoaXNfdHlwZV9zZXQpCisgIGdldF9wcm9wZXJ0eSh0eXBlIENBQ0hFIENNUDAxMDJfVEVTVF9WQVJJQUJMRQorICAgIFBST1BFUlRZIFRZUEUpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhlcmUgaXMgYSBjYWNoZSBlbnRyeSBmb3IgYW4gdW5kZWZpbmVkIHZhcmlhYmxlIGFmdGVyICIKKyAgICAiYG1hcmtfYXNfYWR2YW5jZWRgLiIpCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLU9MRC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1PTEQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyMGRkMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1PTEQuY21ha2UKQEAgLTAsMCArMSwxOCBAQAorCitjbWFrZV9wb2xpY3koU0VUIENNUDAxMDIgT0xEKQorCitpbmNsdWRlIChDTVAwMTAyLUNvbW1vbi5jbWFrZSkKK2dldF9wcm9wZXJ0eShpc190eXBlX3NldCBDQUNIRSBDTVAwMTAyX1RFU1RfVkFSSUFCTEUKKyAgUFJPUEVSVFkgVFlQRSBTRVQpCitpZiAoTk9UIGlzX3R5cGVfc2V0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlRoZXJlIGlzIGEgY2FjaGUgZW50cnkgZm9yIGFuIHVuZGVmaW5lZCB2YXJpYWJsZSBhZnRlciAiCisgICAgImBtYXJrX2FzX2FkdmFuY2VkYC4iKQorZW5kaWYgKCkKK2dldF9wcm9wZXJ0eSh0eXBlIENBQ0hFIENNUDAxMDJfVEVTVF9WQVJJQUJMRQorICBQUk9QRVJUWSBUWVBFKQoraWYgKE5PVCB0eXBlIFNUUkVRVUFMICJVTklOSVRJQUxJWkVEIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJUaGUgY2FjaGUgdHlwZSBmb3IgQ01QMDEwMl9URVNUX1ZBUklBQkxFIGlzIG5vdCAiCisgICAgIlVOSU5JVElBTElaRUQiKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01QMDEwMi1XQVJOLURlZmF1bHQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItV0FSTi1EZWZhdWx0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZWJlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItV0FSTi1EZWZhdWx0LmNtYWtlCkBAIC0wLDAgKzEsMTYgQEAKKworaW5jbHVkZSAoQ01QMDEwMi1Db21tb24uY21ha2UpCitnZXRfcHJvcGVydHkoaXNfdHlwZV9zZXQgQ0FDSEUgQ01QMDEwMl9URVNUX1ZBUklBQkxFCisgIFBST1BFUlRZIFRZUEUgU0VUKQoraWYgKE5PVCBpc190eXBlX3NldCkKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJUaGVyZSBpcyBhIGNhY2hlIGVudHJ5IGZvciBhbiB1bmRlZmluZWQgdmFyaWFibGUgYWZ0ZXIgIgorICAgICJgbWFya19hc19hZHZhbmNlZGAuIikKK2VuZGlmICgpCitnZXRfcHJvcGVydHkodHlwZSBDQUNIRSBDTVAwMTAyX1RFU1RfVkFSSUFCTEUKKyAgUFJPUEVSVFkgVFlQRSkKK2lmIChOT1QgdHlwZSBTVFJFUVVBTCAiVU5JTklUSUFMSVpFRCIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhlIGNhY2hlIHR5cGUgZm9yIENNUDAxMDJfVEVTVF9WQVJJQUJMRSBpcyBub3QgIgorICAgICJVTklOSVRJQUxJWkVEIikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItV0FSTi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLVdBUk4tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjU2ZWMyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLVdBUk4tc3RkZXJyLnR4dApAQCAtMCwwICsxLDEwIEBACitDTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgQ01QMDEwMi1Db21tb24uY21ha2U6MiBcKG1hcmtfYXNfYWR2YW5jZWRcKToKKyAgUG9saWN5IENNUDAxMDIgaXMgbm90IHNldDogVGhlIHZhcmlhYmxlIG5hbWVkICJDTVAwMTAyX1RFU1RfVkFSSUFCTEUiIGlzCisgIG5vdCBpbiB0aGUgY2FjaGUuICBUaGlzIHJlc3VsdHMgaW4gYW4gZW1wdHkgY2FjaGUgZW50cnkgd2hpY2ggaXMgbm8gbG9uZ2VyCisgIGNyZWF0ZWQgd2hlbiBwb2xpY3kgQ01QMDEwMiBpcyBzZXQgdG8gTkVXLiAgUnVuICJjbWFrZSAtLWhlbHAtcG9saWN5CisgIENNUDAxMDIiIGZvciBwb2xpY3kgZGV0YWlscy4gIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8gc2V0IHRoZQorICBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNUDAxMDItV0FSTi5jbWFrZTo0IFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLVdBUk4uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNUDAxMDItV0FSTi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWE0NWYxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9DTVAwMTAyLVdBUk4uY21ha2UKQEAgLTAsMCArMSwxOCBAQAorCitzZXQoQ01BS0VfUE9MSUNZX1dBUk5JTkdfQ01QMDEwMiAxKQorCitpbmNsdWRlIChDTVAwMTAyLUNvbW1vbi5jbWFrZSkKK2dldF9wcm9wZXJ0eShpc190eXBlX3NldCBDQUNIRSBDTVAwMTAyX1RFU1RfVkFSSUFCTEUKKyAgUFJPUEVSVFkgVFlQRSBTRVQpCitpZiAoTk9UIGlzX3R5cGVfc2V0KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIlRoZXJlIGlzIGEgY2FjaGUgZW50cnkgZm9yIGFuIHVuZGVmaW5lZCB2YXJpYWJsZSBhZnRlciAiCisgICAgImBtYXJrX2FzX2FkdmFuY2VkYC4iKQorZW5kaWYgKCkKK2dldF9wcm9wZXJ0eSh0eXBlIENBQ0hFIENNUDAxMDJfVEVTVF9WQVJJQUJMRQorICBQUk9QRVJUWSBUWVBFKQoraWYgKE5PVCB0eXBlIFNUUkVRVUFMICJVTklOSVRJQUxJWkVEIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUgorICAgICJUaGUgY2FjaGUgdHlwZSBmb3IgQ01QMDEwMl9URVNUX1ZBUklBQkxFIGlzIG5vdCAiCisgICAgIlVOSU5JVElBTElaRUQiKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjE2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTAyL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjVkZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwMi9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw2IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoQ01QMDEwMi1PTEQpCitydW5fY21ha2UoQ01QMDEwMi1ORVcpCitydW5fY21ha2UoQ01QMDEwMi1XQVJOKQorcnVuX2NtYWtlKENNUDAxMDItV0FSTi1EZWZhdWx0KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9DTVAwMTA0LUNvbW1vbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1Db21tb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1NjhmMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1Db21tb24uY21ha2UKQEAgLTAsMCArMSwyIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1VEQSkKK2FkZF9saWJyYXJ5KGN1ZGEgbWFpbi5jdSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1ORVcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtTkVXLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMmFiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtTkVXLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTA0IE5FVykKK2luY2x1ZGUoQ01QMDEwNC1Db21tb24uY21ha2UpCisKK2lmKE5PVCBDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNNQUtFX0NVREFfQVJDSElURUNUVVJFUyBpcyBlbXB0eSB3aXRoIENNUDAxMDQgZW5hYmxlZC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9DTVAwMTA0LU9GRi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1PRkYuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNjY4MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1PRkYuY21ha2UKQEAgLTAsMCArMSwzIEBACitpbmNsdWRlKENNUDAxMDQtQ29tbW9uLmNtYWtlKQorCitzZXRfcHJvcGVydHkoVEFSR0VUIGN1ZGEgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTIE9GRikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1PTEQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtT0xELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWVlY2MKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtT0xELmNtYWtlCkBAIC0wLDAgKzEsMTIgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwNCBPTEQpCitpbmNsdWRlKENNUDAxMDQtQ29tbW9uLmNtYWtlKQorCitpZihDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJOVklESUEiKQorICBpZihDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ01BS0VfQ1VEQV9BUkNISVRFQ1RVUkVTIGlzbid0IGVtcHR5IGZvciBOVklESUEgd2l0aCBDTVAwMTA0IE9MRC4iKQorICBlbmRpZigpCitlbHNlKE5PVCBDTUFLRV9DVURBX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJVbmtub3duIikKKyAgaWYoTk9UIENNQUtFX0NVREFfQVJDSElURUNUVVJFUykKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDTUFLRV9DVURBX0FSQ0hJVEVDVFVSRVMgaXNuJ3Qgbm9uLWVtcHR5IGZvciBub24tTlZJRElBIHdpdGggQ01QMDEwNCBPTEQuIikKKyAgZW5kaWYoKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9DTVAwMTA0LVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1XQVJOLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM5YjdkNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1XQVJOLXN0ZGVyci50eHQKQEAgLTAsMCArMSw4IEBACitDTWFrZSBXYXJuaW5nIFwoZGV2XCkgaW4gQ01ha2VMaXN0cy50eHQ6CisgIFBvbGljeSBDTVAwMTA0IGlzIG5vdCBzZXQ6IENNQUtFX0NVREFfQVJDSElURUNUVVJFUyBub3cgZGV0ZWN0ZWQgZm9yIE5WQ0MsCisgIGVtcHR5IENVREFfQVJDSElURUNUVVJFUyBub3QgYWxsb3dlZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTA0IgorICBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZAorICBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgQ1VEQV9BUkNISVRFQ1RVUkVTIGlzIGVtcHR5IGZvciB0YXJnZXQgImN1ZGEiLgorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtV0FSTi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01QMDEwNC1XQVJOLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNGE4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L0NNUDAxMDQtV0FSTi5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2luY2x1ZGUoQ01QMDEwNC1Db21tb24uY21ha2UpCitzZXRfcHJvcGVydHkoVEFSR0VUIGN1ZGEgUFJPUEVSVFkgQ1VEQV9BUkNISVRFQ1RVUkVTKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMmZmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjZmNzJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw2IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoQ01QMDEwNC1PTEQpCitydW5fY21ha2UoQ01QMDEwNC1ORVcpCitydW5fY21ha2UoQ01QMDEwNC1PRkYpCitydW5fY21ha2UoQ01QMDEwNC1XQVJOKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9tYWluLmN1IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNC9tYWluLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDdhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA0L21haW4uY3UKQEAgLTAsMCArMSwzIEBACitpbnQgbWFpbigpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtQ29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LUNvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWY3OTA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LUNvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlKERvY3VtZW50YXRpb24gT1BUSU9OQUwgUkVTVUxUX1ZBUklBQkxFIGZvdW5kKQoraWYgKE5PVCBzaG91bGRfZmluZCBBTkQgZm91bmQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhlIERvY3VtZW50YXRpb24gbW9kdWxlIHNob3VsZCBub3QgaGF2ZSBiZWVuIGZvdW5kLCBidXQgaXQgd2FzLiIpCitlbmRpZiAoKQoraWYgKHNob3VsZF9maW5kIEFORCBOT1QgZm91bmQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAiVGhlIERvY3VtZW50YXRpb24gbW9kdWxlIHNob3VsZCBoYXZlIGJlZW4gZm91bmQsIGJ1dCBpdCB3YXMgbm90LiIpCitlbmRpZiAoKQoraW5jbHVkZSgke0NNQUtFX1JPT1R9L01vZHVsZXMvRG9jdW1lbnRhdGlvbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3doaXRlbGlzdC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LU5FVy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtTkVXLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1ORVctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1ORVctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQ3NzRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LU5FVy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgLiovTW9kdWxlcy9Eb2N1bWVudGF0aW9uLmNtYWtlOjE1IFwobWVzc2FnZVwpOgorICBEb2N1bWVudGF0aW9uLmNtYWtlIGlzIFZUSy1zcGVjaWZpYyBjb2RlIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbm9uLVZUSworICBwcm9qZWN0cy4gIFRoaXMgbG9naWMgaW4gdGhpcyBtb2R1bGUgaXMgYmVzdCBzaGlwcGVkIHdpdGggdGhlIHByb2plY3QgdXNpbmcKKyAgaXQgcmF0aGVyIHRoYW4gd2l0aCBDTWFrZS4gIFRoaXMgaXMgbm93IGFuIGVycm9yIGFjY29yZGluZyB0byBwb2xpY3kKKyAgQ01QMDEwNi4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNUDAxMDYtQ29tbW9uLmNtYWtlOjEwIFwoaW5jbHVkZVwpCisgIENNUDAxMDYtTkVXLmNtYWtlOjQgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6NyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LU5FVy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1ORVcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkNWJkMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1ORVcuY21ha2UKQEAgLTAsMCArMSw0IEBACitjbWFrZV9wb2xpY3koU0VUIENNUDAxMDYgTkVXKQorCitzZXQoc2hvdWxkX2ZpbmQgT0ZGKQoraW5jbHVkZShDTVAwMTA2LUNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1PTEQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtT0xELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMGU4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtT0xELmNtYWtlCkBAIC0wLDAgKzEsOSBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTA2IE9MRCkKKworc2V0KHNob3VsZF9maW5kIE9OKQoraW5jbHVkZShDTVAwMTA2LUNvbW1vbi5jbWFrZSkKK2lmIChOT1QgREVGSU5FRCBCVUlMRF9ET0NVTUVOVEFUSU9OKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgIkNhY2hlIHZhcmlhYmxlcyBzZWVtIHRvIGhhdmUgbm90IGJlZW4gbWFkZSB3aXRoIGEgYE9MRGAgcG9saWN5ICIKKyAgICAic2V0dGluZy4iKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLVBhcmFWaWV3LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi1QYXJhVmlldy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MTg4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi1QYXJhVmlldy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOCBAQAorQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IENNUDAxMDYtQ29tbW9uLmNtYWtlOjEgXChpbmNsdWRlXCk6CisgIFBvbGljeSBDTVAwMTA2IGlzIG5vdCBzZXQ6IFRoZSBEb2N1bWVudGF0aW9uIG1vZHVsZSBpcyByZW1vdmVkLiAgUnVuICJjbWFrZQorICAtLWhlbHAtcG9saWN5IENNUDAxMDYiIGZvciBwb2xpY3kgZGV0YWlscy4gIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8KKyAgc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KKworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgc3ViZGlyL0NNYWtlTGlzdHMudHh0OjIgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tUGFyYVZpZXcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi1QYXJhVmlldy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDlhYmNjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tUGFyYVZpZXcuY21ha2UKQEAgLTAsMCArMSwyIEBACitzZXQoc2hvdWxkX2ZpbmQgT04pCithZGRfc3ViZGlyZWN0b3J5KHN1YmRpcikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLVZUSy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tVlRLLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhNzU0ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLVZUSy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IENNUDAxMDYtQ29tbW9uLmNtYWtlOjEgXChpbmNsdWRlXCk6CisgIFBvbGljeSBDTVAwMTA2IGlzIG5vdCBzZXQ6IFRoZSBEb2N1bWVudGF0aW9uIG1vZHVsZSBpcyByZW1vdmVkLiAgUnVuICJjbWFrZQorICAtLWhlbHAtcG9saWN5IENNUDAxMDYiIGZvciBwb2xpY3kgZGV0YWlscy4gIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8KKyAgc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KKworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01QMDEwNi1XQVJOLVZUSy5jbWFrZToyIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjcgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tVlRLLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tVlRLLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjZjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi1WVEsuY21ha2UKQEAgLTAsMCArMSwyIEBACitzZXQoc2hvdWxkX2ZpbmQgT04pCitpbmNsdWRlKENNUDAxMDYtQ29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkNDhkMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01QMDEwNi1XQVJOLXN0ZGVyci50eHQKQEAgLTAsMCArMSwzNyBAQAorQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IENNUDAxMDYtQ29tbW9uLmNtYWtlOjEgXChpbmNsdWRlXCk6CisgIFBvbGljeSBDTVAwMTA2IGlzIG5vdCBzZXQ6IFRoZSBEb2N1bWVudGF0aW9uIG1vZHVsZSBpcyByZW1vdmVkLiAgUnVuICJjbWFrZQorICAtLWhlbHAtcG9saWN5IENNUDAxMDYiIGZvciBwb2xpY3kgZGV0YWlscy4gIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8KKyAgc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KKworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01QMDEwNi1XQVJOLmNtYWtlOjIgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6NyBcKGluY2x1ZGVcKQorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCisKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCAuKi9Nb2R1bGVzL0RvY3VtZW50YXRpb24uY21ha2U6MjcgXChtZXNzYWdlXCk6CisgIFBvbGljeSBDTVAwMTA2IGlzIG5vdCBzZXQ6IFRoZSBEb2N1bWVudGF0aW9uIG1vZHVsZSBpcyByZW1vdmVkLiAgUnVuICJjbWFrZQorICAtLWhlbHAtcG9saWN5IENNUDAxMDYiIGZvciBwb2xpY3kgZGV0YWlscy4gIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8KKyAgc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KKworICBEb2N1bWVudGF0aW9uLmNtYWtlIGlzIFZUSy1zcGVjaWZpYyBjb2RlIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbm9uLVZUSworICBwcm9qZWN0cy4gIFRoaXMgbG9naWMgaW4gdGhpcyBtb2R1bGUgaXMgYmVzdCBzaGlwcGVkIHdpdGggdGhlIHByb2plY3QgdXNpbmcKKyAgaXQgcmF0aGVyIHRoYW4gd2l0aCBDTWFrZS4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNUDAxMDYtQ29tbW9uLmNtYWtlOjEgXChpbmNsdWRlXCkKKyAgQ01QMDEwNi1XQVJOLmNtYWtlOjIgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6NyBcKGluY2x1ZGVcKQorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCisKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCAuKi9Nb2R1bGVzL0RvY3VtZW50YXRpb24uY21ha2U6MjcgXChtZXNzYWdlXCk6CisgIFBvbGljeSBDTVAwMTA2IGlzIG5vdCBzZXQ6IFRoZSBEb2N1bWVudGF0aW9uIG1vZHVsZSBpcyByZW1vdmVkLiAgUnVuICJjbWFrZQorICAtLWhlbHAtcG9saWN5IENNUDAxMDYiIGZvciBwb2xpY3kgZGV0YWlscy4gIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8KKyAgc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KKworICBEb2N1bWVudGF0aW9uLmNtYWtlIGlzIFZUSy1zcGVjaWZpYyBjb2RlIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbm9uLVZUSworICBwcm9qZWN0cy4gIFRoaXMgbG9naWMgaW4gdGhpcyBtb2R1bGUgaXMgYmVzdCBzaGlwcGVkIHdpdGggdGhlIHByb2plY3QgdXNpbmcKKyAgaXQgcmF0aGVyIHRoYW4gd2l0aCBDTWFrZS4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNUDAxMDYtQ29tbW9uLmNtYWtlOjEwIFwoaW5jbHVkZVwpCisgIENNUDAxMDYtV0FSTi5jbWFrZToyIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjcgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L0NNUDAxMDYtV0FSTi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWY2YzM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTVAwMTA2LVdBUk4uY21ha2UKQEAgLTAsMCArMSwyIEBACitzZXQoc2hvdWxkX2ZpbmQgT04pCitpbmNsdWRlKENNUDAxMDYtQ29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ01QMDEwNi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmYTY0MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw3IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQoraWYgKFJ1bkNNYWtlX1RFU1QgU1RSRVFVQUwgIkNNUDAxMDYtV0FSTi1WVEsiKQorICBwcm9qZWN0KFZUSyBOT05FKQorZWxzZSAoKQorICBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2VuZGlmICgpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZWMwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShDTVAwMTA2LU9MRCkKK3J1bl9jbWFrZShDTVAwMTA2LU5FVykKK3J1bl9jbWFrZShDTVAwMTA2LVdBUk4pCitydW5fY21ha2UoQ01QMDEwNi1XQVJOLVZUSykKK3J1bl9jbWFrZShDTVAwMTA2LVdBUk4tUGFyYVZpZXcpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L3N1YmRpci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NNUDAxMDYvc3ViZGlyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMWRkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DTVAwMTA2L3N1YmRpci9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDIgQEAKK3Byb2plY3QoVlRLIE5PTkUpCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi9DTVAwMTA2LUNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ01ha2VMaXN0cy50eHQKaW5kZXggNTgxYTM5ZS4uZTA4YjMwYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ01ha2VMaXN0cy50eHQKQEAgLTgxLDcgKzgxLDkgQEAKICMgVGVzdCBNU1ZDIGZvciBvbGRlciBob3N0IENNYWtlIHZlcnNpb25zLCBhbmQgdGVzdAogIyBXSU4zMi9DTUFLRV9DX0NPTVBJTEVSX0lEIHRvIGZpeCBjaGVjayBvbiBJbnRlbCBmb3IgV2luZG93cy4KIGlmKE1TVkMgT1IgKFdJTjMyIEFORCBDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIk1TVkN8SW50ZWwiKSkKLSAgc2V0KEdlbmVyYXRvckV4cHJlc3Npb25fQVJHUyAtRExJTktFUl9TVVBQT1JUU19QREI9MSkKKyAgc2V0KExJTktFUl9TVVBQT1JUU19QREIgMSkKK2Vsc2UoKQorICBzZXQoTElOS0VSX1NVUFBPUlRTX1BEQiAwKQogZW5kaWYoKQogCiBhZGRfUnVuQ01ha2VfdGVzdChDTVAwMDE5KQpAQCAtMTE1LDYgKzExNywxMyBAQAogZW5kaWYoKQogYWRkX1J1bkNNYWtlX3Rlc3QoQ01QMDA2OSkKIGFkZF9SdW5DTWFrZV90ZXN0KENNUDAwODEpCithZGRfUnVuQ01ha2VfdGVzdChDTVAwMTAyKQoraWYoQ01ha2VfVEVTVF9DVURBKQorICBhZGRfUnVuQ01ha2VfdGVzdChDTVAwMTA0KQorICBzZXRfcHJvcGVydHkoVEVTVCBSdW5DTWFrZS5DTVAwMTA0IEFQUEVORAorICAgIFBST1BFUlRZIExBQkVMUyAiQ1VEQSIpCitlbmRpZigpCithZGRfUnVuQ01ha2VfdGVzdChDTVAwMTA2KQogCiAjIFRoZSB0ZXN0IGZvciBQb2xpY3kgNjUgcmVxdWlyZXMgdGhlIHVzZSBvZiB0aGUKICMgQ01BS0VfU0hBUkVEX0xJQlJBUllfTElOS19DWFhfRkxBR1MgdmFyaWFibGUsIHdoaWNoIGJvdGggdGhlIFZTIGFuZCBYY29kZQpAQCAtMTI1LDcgKzEzNCw3IEBACiBpZihDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiTWFrZSIpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KE1ha2UgLURNQUtFX0lTX0dOVT0ke01BS0VfSVNfR05VfSkKIGVuZGlmKCkKLWlmKENNQUtFX0dFTkVSQVRPUiBTVFJFUVVBTCAiTmluamEiKQoraWYoQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIk5pbmphIikKICAgc2V0KE5pbmphX0FSR1MKICAgICAtRENNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTj0ke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0KICAgICAtRENNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWD0ke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1BSRUZJWH0KQEAgLTEzMyw3ICsxNDIsMjIgQEAKICAgaWYoQ01BS0VfRm9ydHJhbl9DT01QSUxFUikKICAgICBsaXN0KEFQUEVORCBOaW5qYV9BUkdTIC1EVEVTVF9Gb3J0cmFuPTEpCiAgIGVuZGlmKCkKKyAgaWYoQ01ha2VfVEVTVF9RdDUgQU5EIFF0NUNvcmVfRk9VTkQpCisgICAgbGlzdChBUFBFTkQgTmluamFfQVJHUyAtRENNYWtlX1RFU1RfUXQ1PTEgLURDTUFLRV9URVNUX1F0NUNvcmVfVmVyc2lvbj0ke1F0NUNvcmVfVkVSU0lPTn0pCisgIGVuZGlmKCkKICAgYWRkX1J1bkNNYWtlX3Rlc3QoTmluamEpCisgIHNldChOaW5qYU11bHRpQ29uZmlnX0FSR1MKKyAgICAtRENZR1dJTj0ke0NZR1dJTn0KKyAgICApCisgIGlmKENNYWtlX1RFU1RfUXQ1IEFORCBRdDVDb3JlX0ZPVU5EKQorICAgIGxpc3QoQVBQRU5EIE5pbmphTXVsdGlDb25maWdfQVJHUyAtRENNYWtlX1RFU1RfUXQ1PTEpCisgIGVuZGlmKCkKKyAgaWYoREVGSU5FRCBDTWFrZV9URVNUX0NVREEpCisgICAgbGlzdChBUFBFTkQgTmluamFNdWx0aUNvbmZpZ19BUkdTIC1EQ01ha2VfVEVTVF9DVURBPSR7Q01ha2VfVEVTVF9DVURBfSkKKyAgZW5kaWYoKQorICBhZGRfUnVuQ01ha2VfdGVzdChOaW5qYU11bHRpQ29uZmlnKQorICBzZXRfcHJvcGVydHkoVEVTVCBSdW5DTWFrZS5OaW5qYU11bHRpQ29uZmlnIEFQUEVORAorICAgIFBST1BFUlRZIExBQkVMUyAiQ1VEQSIpCiBlbmRpZigpCiBhZGRfUnVuQ01ha2VfdGVzdChDVGVzdCkKIApAQCAtMTQyLDYgKzE2Niw3IEBACiAgICAgLURQU0VVRE9fQkM9JDxUQVJHRVRfRklMRTpwc2V1ZG9fQkM+CiAgICAgLURQU0VVRE9fUFVSSUZZPSQ8VEFSR0VUX0ZJTEU6cHNldWRvX3B1cmlmeT4KICAgICAtRFBTRVVET19WQUxHUklORD0kPFRBUkdFVF9GSUxFOnBzZXVkb192YWxncmluZD4KKyAgICAtRFBTRVVET19DVURBX01FTUNIRUNLPSQ8VEFSR0VUX0ZJTEU6cHNldWRvX2N1ZGEtbWVtY2hlY2s+CiAgICAgLURQU0VVRE9fQkNfTk9MT0c9JDxUQVJHRVRfRklMRTpwc2V1ZG9ubF9CQz4KICAgICAtRFBTRVVET19QVVJJRllfTk9MT0c9JDxUQVJHRVRfRklMRTpwc2V1ZG9ubF9wdXJpZnk+CiAgICAgLURQU0VVRE9fVkFMR1JJTkRfTk9MT0c9JDxUQVJHRVRfRklMRTpwc2V1ZG9ubF92YWxncmluZD4KQEAgLTE1OCw3ICsxODMsMjAgQEAKICAgc2V0KGF1dG9nZW5fd2l0aF9xdDUgVFJVRSkKIGVuZGlmICgpCiBhZGRfUnVuQ01ha2VfdGVzdChBdXRvZ2VuIC1Ed2l0aF9xdDU9JHthdXRvZ2VuX3dpdGhfcXQ1fSkKLWFkZF9SdW5DTWFrZV90ZXN0KEJ1aWxkRGVwZW5kcykKK2lmKE5PVCBERUZJTkVEIENNYWtlX1RFU1RfQnVpbGREZXBlbmRzX0dOVV9BUworICAgIEFORCBDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiCisgICAgQU5EIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJeTmluamEiCisgICAgKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAiJHtDTUFLRV9DX0NPTVBJTEVSfSIgLXByaW50LXByb2ctbmFtZT1hcworICAgIFJFU1VMVF9WQVJJQUJMRSBfZ251X3JlcworICAgIE9VVFBVVF9WQVJJQUJMRSBfZ251X2FzIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFIEVSUk9SX1FVSUVUKQorICBpZihfZ251X3JlcyBFUVVBTCAwIEFORCBfZ251X2FzKQorICAgIHNldChDTWFrZV9URVNUX0J1aWxkRGVwZW5kc19HTlVfQVMgIiR7X2dudV9hc30iKQorICBlbmRpZigpCitlbmRpZigpCithZGRfUnVuQ01ha2VfdGVzdChCdWlsZERlcGVuZHMKKyAgLURDTWFrZV9URVNUX0J1aWxkRGVwZW5kc19HTlVfQVM9JHtDTWFrZV9URVNUX0J1aWxkRGVwZW5kc19HTlVfQVN9CisgICkKIGlmKFVOSVggQU5EICIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIlVuaXggTWFrZWZpbGVzfE5pbmphIikKICAgYWRkX1J1bkNNYWtlX3Rlc3QoQnlwcm9kdWN0cykKIGVuZGlmKCkKQEAgLTE2OSwxOSArMjA3LDMzIEBACiBhZGRfUnVuQ01ha2VfdGVzdChDb21waWxlck5vdEZvdW5kKQogYWRkX1J1bkNNYWtlX3Rlc3QoQ29uZmlndXJlIC1ETVNWQ19JREU9JHtNU1ZDX0lERX0pCiBhZGRfUnVuQ01ha2VfdGVzdChEaXNhbGxvd2VkQ29tbWFuZHMpCitpZigiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJVbml4IE1ha2VmaWxlc3xOaW5qYSIpCisgIGFkZF9SdW5DTWFrZV90ZXN0KEV4cG9ydENvbXBpbGVDb21tYW5kcykKK2VuZGlmKCkKK2FkZF9SdW5DTWFrZV90ZXN0KEV4Y2x1ZGVGcm9tQWxsKQogYWRkX1J1bkNNYWtlX3Rlc3QoRXh0ZXJuYWxEYXRhKQogYWRkX1J1bkNNYWtlX3Rlc3QoRmVhdHVyZVN1bW1hcnkpCiBhZGRfUnVuQ01ha2VfdGVzdChGUEhTQSkKLWFkZF9SdW5DTWFrZV90ZXN0KEZpbGVBUEkgLURQWVRIT05fRVhFQ1VUQUJMRT0ke1BZVEhPTl9FWEVDVVRBQkxFfSkKK2FkZF9SdW5DTWFrZV90ZXN0KEZpbGVBUEkgLURQWVRIT05fRVhFQ1VUQUJMRT0ke1BZVEhPTl9FWEVDVVRBQkxFfQorICAgICAgICAgICAgICAgICAgICAgICAgICAtRENNQUtFX0NYWF9DT01QSUxFUl9JRD0ke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0pCiBhZGRfUnVuQ01ha2VfdGVzdChGaW5kQm9vc3QpCiBhZGRfUnVuQ01ha2VfdGVzdChGaW5kTHVhKQogYWRkX1J1bkNNYWtlX3Rlc3QoRmluZE9wZW5HTCkKIGlmKENNYWtlX1RFU1RfVXNlU1dJRykKKyAgYWRkX1J1bkNNYWtlX3Rlc3QoRmluZFNXSUcpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KFVzZVNXSUcgLURDTWFrZV9URVNUX0ZpbmRQeXRob249JHtDTWFrZV9URVNUX0ZpbmRQeXRob259KQogZW5kaWYoKQogaWYoTk9UIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiV2F0Y29tIikKICAgYWRkX1J1bkNNYWtlX3Rlc3QoR2VuZXJhdGVFeHBvcnRIZWFkZXIpCiBlbmRpZigpCithZGRfUnVuQ01ha2VfdGVzdChHZW5FeC1DT01QSUxFX0xBTkdVQUdFKQorYWRkX1J1bkNNYWtlX3Rlc3QoR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRCkKK2FkZF9SdW5DTWFrZV90ZXN0KEdlbkV4LUxJTktfTEFOR1VBR0UpCithZGRfUnVuQ01ha2VfdGVzdChHZW5FeC1MSU5LX0xBTkdfQU5EX0lEKQorYWRkX1J1bkNNYWtlX3Rlc3QoR2VuRXgtSE9TVF9MSU5LKQorYWRkX1J1bkNNYWtlX3Rlc3QoR2VuRXgtREVWSUNFX0xJTkspCithZGRfUnVuQ01ha2VfdGVzdChHZW5FeC1UQVJHRVRfRklMRSAtRExJTktFUl9TVVBQT1JUU19QREI9JHtMSU5LRVJfU1VQUE9SVFNfUERCfSkKK2FkZF9SdW5DTWFrZV90ZXN0KEdlbkV4LUdFTkVYX0VWQUwpCiBhZGRfUnVuQ01ha2VfdGVzdChHZW5lcmF0b3JFeHByZXNzaW9uKQogYWRkX1J1bkNNYWtlX3Rlc3QoR2VuZXJhdG9ySW5zdGFuY2UpCiBhZGRfUnVuQ01ha2VfdGVzdChHZW5lcmF0b3JQbGF0Zm9ybSkKQEAgLTE4OSw2ICsyNDEsNyBAQAogYWRkX1J1bkNNYWtlX3Rlc3QoR2V0UHJlcmVxdWlzaXRlcykKIGFkZF9SdW5DTWFrZV90ZXN0KEdOVUluc3RhbGxEaXJzIC1EU1lTVEVNX05BTUU9JHtDTUFLRV9TWVNURU1fTkFNRX0pCiBhZGRfUnVuQ01ha2VfdGVzdChHb29nbGVUZXN0KSAjIE5vdGU6IGRvZXMgbm90IGFjdHVhbGx5IGRlcGVuZCBvbiBHb29nbGUgVGVzdAorYWRkX1J1bkNNYWtlX3Rlc3QoR3JhcGh2aXopCiBhZGRfUnVuQ01ha2VfdGVzdChUYXJnZXRQcm9wZXJ0eUdlbmVyYXRvckV4cHJlc3Npb25zKQogYWRkX1J1bkNNYWtlX3Rlc3QoTGFuZ3VhZ2VzKQogYWRkX1J1bkNNYWtlX3Rlc3QoTGlua1N0YXRpYykKQEAgLTIwOSw2ICsyNjIsNyBAQAogYWRkX1J1bkNNYWtlX3Rlc3QoU3dpZnQgLURDTUFLRV9Td2lmdF9DT01QSUxFUj0ke0NNQUtFX1N3aWZ0X0NPTVBJTEVSfSkKIGFkZF9SdW5DTWFrZV90ZXN0KFRhcmdldE9iamVjdHMpCiBhZGRfUnVuQ01ha2VfdGVzdChUYXJnZXRTb3VyY2VzKQorYWRkX1J1bkNNYWtlX3Rlc3QoVGFyZ2V0UHJvcGVydGllcykKIGFkZF9SdW5DTWFrZV90ZXN0KFRvb2xjaGFpbkZpbGUpCiBhZGRfUnVuQ01ha2VfdGVzdChmaW5kX2RlcGVuZGVuY3kpCiBhZGRfUnVuQ01ha2VfdGVzdChDb21waWxlRGVmaW5pdGlvbnMpCkBAIC0yNDYsNiArMzAwLDcgQEAKIGVuZGlmKCkKIGFkZF9SdW5DTWFrZV90ZXN0KGV4ZWN1dGVfcHJvY2VzcykKIGFkZF9SdW5DTWFrZV90ZXN0KGV4cG9ydCkKK2FkZF9SdW5DTWFrZV90ZXN0KGNtYWtlX2xhbmd1YWdlKQogYWRkX1J1bkNNYWtlX3Rlc3QoY21ha2VfbWluaW11bV9yZXF1aXJlZCkKIGFkZF9SdW5DTWFrZV90ZXN0KGNtYWtlX3BhcnNlX2FyZ3VtZW50cykKIGFkZF9SdW5DTWFrZV90ZXN0KGNvbnRpbnVlKQpAQCAtMjY2LDExICszMjEsMTIgQEAKIGFkZF9SdW5DTWFrZV90ZXN0KGN0ZXN0X2ZpeHR1cmVzKQogYWRkX1J1bkNNYWtlX3Rlc3QoZmlsZSkKIGFkZF9SdW5DTWFrZV90ZXN0KGZpbmRfZmlsZSkKLWFkZF9SdW5DTWFrZV90ZXN0KGZpbmRfbGlicmFyeSkKK2FkZF9SdW5DTWFrZV90ZXN0KGZpbmRfbGlicmFyeSAtRENZR1dJTj0ke0NZR1dJTn0pCiBhZGRfUnVuQ01ha2VfdGVzdChmaW5kX3BhY2thZ2UpCiBhZGRfUnVuQ01ha2VfdGVzdChmaW5kX3BhdGgpCiBhZGRfUnVuQ01ha2VfdGVzdChmaW5kX3Byb2dyYW0gLURDTUFLRV9TWVNURU1fTkFNRT0ke0NNQUtFX1NZU1RFTV9OQU1FfSkKIGFkZF9SdW5DTWFrZV90ZXN0KGZvcmVhY2gpCithZGRfUnVuQ01ha2VfdGVzdChmdW5jdGlvbikKIGFkZF9SdW5DTWFrZV90ZXN0KGdldF9maWxlbmFtZV9jb21wb25lbnQpCiBhZGRfUnVuQ01ha2VfdGVzdChnZXRfcHJvcGVydHkpCiBhZGRfUnVuQ01ha2VfdGVzdChpZikKQEAgLTI3OCw2ICszMzQsNyBAQAogYWRkX1J1bkNNYWtlX3Rlc3QoaW5jbHVkZV9kaXJlY3RvcmllcykKIGFkZF9SdW5DTWFrZV90ZXN0KGluY2x1ZGVfZ3VhcmQpCiBhZGRfUnVuQ01ha2VfdGVzdChsaXN0KQorYWRkX1J1bkNNYWtlX3Rlc3QobG9hZF9jYWNoZSkKIGFkZF9SdW5DTWFrZV90ZXN0KG1hdGgpCiBhZGRfUnVuQ01ha2VfdGVzdChtZXNzYWdlKQogYWRkX1J1bkNNYWtlX3Rlc3Qob3B0aW9uKQpAQCAtMjg5LDYgKzM0NiwxMCBAQAogYWRkX1J1bkNNYWtlX3Rlc3Qoc3RyaW5nKQogYWRkX1J1bkNNYWtlX3Rlc3QodGVzdF9pbmNsdWRlX2RpcnMpCiBhZGRfUnVuQ01ha2VfdGVzdChCdW5kbGVVdGlsaXRpZXMpCitpZihBUFBMRSkKKyAgYWRkX1J1bkNNYWtlX3Rlc3QoSU5TVEFMTF9OQU1FX0RJUikKKyAgYWRkX1J1bkNNYWtlX3Rlc3QoTWFjT1NWZXJzaW9ucykKK2VuZGlmKCkKIAogZnVuY3Rpb24oYWRkX1J1bkNNYWtlX3Rlc3RfdHJ5X2NvbXBpbGUpCiAgIGlmKENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuOS4yMDE3MDkwNyBBTkQgIngke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0iIFNUUkVRVUFMICJ4TVNWQyIpCkBAIC0zMTMsNiArMzc0LDcgQEAKICAgICAgIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OCiAgICAgICBDTUFLRV9DWFhfU1RBTkRBUkRfREVGQVVMVAogICAgICAgQ01ha2VfVEVTVF9DVURBCisgICAgICBDTWFrZV9URVNUX0ZJTEVTWVNURU1fMVMKICAgICAgIENNQUtFX09CSkNfU1RBTkRBUkRfREVGQVVMVAogICAgICAgQ01BS0VfT0JKQ1hYX1NUQU5EQVJEX0RFRkFVTFQKICAgICAgICkKQEAgLTMyMSw2ICszODMsOCBAQAogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KHRyeV9jb21waWxlKQorICBzZXRfcHJvcGVydHkoVEVTVCBSdW5DTWFrZS50cnlfY29tcGlsZSBBUFBFTkQKKyAgICBQUk9QRVJUWSBMQUJFTFMgIkNVREEiKQogZW5kZnVuY3Rpb24oKQogYWRkX1J1bkNNYWtlX3Rlc3RfdHJ5X2NvbXBpbGUoKQogCkBAIC0zMzIsOSArMzk2LDEwIEBACiBhZGRfUnVuQ01ha2VfdGVzdChDTVAwMDA0KQogYWRkX1J1bkNNYWtlX3Rlc3QoVGFyZ2V0UG9saWNpZXMpCiBhZGRfUnVuQ01ha2VfdGVzdChhbGlhc190YXJnZXRzKQotYWRkX1J1bkNNYWtlX3Rlc3QoaW50ZXJmYWNlX2xpYnJhcnkpCithZGRfUnVuQ01ha2VfdGVzdChJbnRlcmZhY2VMaWJyYXJ5KQogYWRkX1J1bkNNYWtlX3Rlc3Qobm9faW5zdGFsbF9wcmVmaXgpCiBhZGRfUnVuQ01ha2VfdGVzdChjb25maWd1cmVfZmlsZSkKK2FkZF9SdW5DTWFrZV90ZXN0KENUZXN0VGltZW91dCAtRFRJTUVPVVQ9JHtDVGVzdFRlc3RUaW1lb3V0X1RJTUV9KQogYWRkX1J1bkNNYWtlX3Rlc3QoQ1Rlc3RUaW1lb3V0QWZ0ZXJNYXRjaCkKIAogIyBjdHJlc2FsbG9jIGxpbmtzIGFnYWluc3QgQ01ha2VMaWIgYW5kIENUZXN0TGliLCB3aGljaCBtZWFucyBpdCBjYW4ndCBiZSBidWlsdApAQCAtMzcyLDkgKzQzNywxMyBAQAogaWYoVEFSR0VUIGN0cmVzYWxsb2MpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KENUZXN0UmVzb3VyY2VBbGxvY2F0aW9uIC1EQ1RSRVNBTExPQ19DT01NQU5EPSQ8VEFSR0VUX0ZJTEU6Y3RyZXNhbGxvYz4pCiBlbHNlKCkKLSAgbWVzc2FnZShXQVJOSU5HICJDb3VsZCBub3QgZmluZCBvciBidWlsZCBjdHJlc2FsbG9jIikKKyAgbWVzc2FnZShTVEFUVVMgIkNvdWxkIG5vdCBmaW5kIGN0cmVzYWxsb2MiKQogZW5kaWYoKQogCitpZihOT1QgV0lOMzIpCisgIGFkZF9SdW5DTWFrZV90ZXN0KFN5bWxpbmtUcmVlcykKK2VuZGlmICgpCisKIGZpbmRfcGFja2FnZShRdDQgUVVJRVQpCiBmaW5kX3BhY2thZ2UoUXQ1Q29yZSBRVUlFVCkKIGlmIChRVDRfRk9VTkQgQU5EIFF0NUNvcmVfRk9VTkQgQU5EIE5PVCBRdDVDb3JlX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDUuMS4wKQpAQCAtNDI3LDIxICs0OTYsMzUgQEAKICAgYWRkX1J1bkNNYWtlX3Rlc3QoRnJhbWV3b3JrKQogZW5kaWYoKQogCithZGRfUnVuQ01ha2VfdGVzdChGaWxlX0FyY2hpdmUpCithZGRfUnVuQ01ha2VfdGVzdChGaWxlX0NvbmZpZ3VyZSkKIGFkZF9SdW5DTWFrZV90ZXN0KEZpbGVfR2VuZXJhdGUpCiBhZGRfUnVuQ01ha2VfdGVzdChFeHBvcnRXaXRob3V0TGFuZ3VhZ2UpCiBhZGRfUnVuQ01ha2VfdGVzdCh0YXJnZXRfbGlua19kaXJlY3RvcmllcykKIGFkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9saW5rX2xpYnJhcmllcykKK2FkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUykKK2FkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFKQorYWRkX1J1bkNNYWtlX3Rlc3QodGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQpCiBhZGRfUnVuQ01ha2VfdGVzdChhZGRfbGlua19vcHRpb25zIC1EQ01BS0VfQ19DT01QSUxFUl9JRD0ke0NNQUtFX0NfQ09NUElMRVJfSUR9KQotYWRkX1J1bkNNYWtlX3Rlc3QodGFyZ2V0X2xpbmtfb3B0aW9ucyAtRENNQUtFX0NfQ09NUElMRVJfSUQ9JHtDTUFLRV9DX0NPTVBJTEVSX0lEfSkKK2FkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9saW5rX29wdGlvbnMgLURDTUFLRV9DX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ19DT01QSUxFUl9JRH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURDTWFrZV9URVNUX0NVREE9JHtDTWFrZV9URVNUX0NVREF9KQorc2V0X3Byb3BlcnR5KFRFU1QgUnVuQ01ha2UudGFyZ2V0X2xpbmtfb3B0aW9ucyBBUFBFTkQKKyAgUFJPUEVSVFkgTEFCRUxTICJDVURBIikKIAogYWRkX1J1bkNNYWtlX3Rlc3QodGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMpCiBhZGRfUnVuQ01ha2VfdGVzdCh0YXJnZXRfY29tcGlsZV9mZWF0dXJlcykKLWFkZF9SdW5DTWFrZV90ZXN0KHRhcmdldF9jb21waWxlX29wdGlvbnMpCithZGRfUnVuQ01ha2VfdGVzdCh0YXJnZXRfY29tcGlsZV9vcHRpb25zIC1EQ01BS0VfQ19DT01QSUxFUl9JRD0ke0NNQUtFX0NfQ09NUElMRVJfSUR9KQogYWRkX1J1bkNNYWtlX3Rlc3QodGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMpCiBhZGRfUnVuQ01ha2VfdGVzdCh0YXJnZXRfc291cmNlcykKIGFkZF9SdW5DTWFrZV90ZXN0KENoZWNrTW9kdWxlcykKIGFkZF9SdW5DTWFrZV90ZXN0KENoZWNrSVBPU3VwcG9ydGVkKQotYWRkX1J1bkNNYWtlX3Rlc3QoQ29tbWFuZExpbmUgLURDTUFLRV9TWVNURU1fTkFNRT0ke0NNQUtFX1NZU1RFTV9OQU1FfSkKK2lmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICIoTGludXh8RGFyd2luKSIKKyAgICBBTkQgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiQ2xhbmd8R05VIiBPUiBDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVSIpKQorICBhZGRfUnVuQ01ha2VfdGVzdChDaGVja0xpbmtlckZsYWcgLURDTUFLRV9DX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ19DT01QSUxFUl9JRH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9JRD0ke0NNQUtFX0ZvcnRyYW5fQ09NUElMRVJfSUR9KQorZW5kaWYoKQorCithZGRfUnVuQ01ha2VfdGVzdChDb21tYW5kTGluZSAtRENNQUtFX1NZU1RFTV9OQU1FPSR7Q01BS0VfU1lTVEVNX05BTUV9IC1EQ1lHV0lOPSR7Q1lHV0lOfSAtRFBZVEhPTl9FWEVDVVRBQkxFPSR7UFlUSE9OX0VYRUNVVEFCTEV9KQogYWRkX1J1bkNNYWtlX3Rlc3QoQ29tbWFuZExpbmVUYXIpCiAKIGlmKENNQUtFX1BMQVRGT1JNX05PX1ZFUlNJT05FRF9TT05BTUUgT1IgKE5PVCBDTUFLRV9TSEFSRURfTElCUkFSWV9TT05BTUVfRkxBRyBBTkQgTk9UIENNQUtFX1NIQVJFRF9MSUJSQVJZX1NPTkFNRV9DX0ZMQUcpKQpAQCAtNDUwLDExICs1MzMsMTcgQEAKICAgc2V0KE5PX05BTUVMSU5LIDApCiBlbmRpZigpCiAKLWFkZF9SdW5DTWFrZV90ZXN0KGluc3RhbGwgLUROT19OQU1FTElOSz0ke05PX05BTUVMSU5LfSAtRENZR1dJTj0ke0NZR1dJTn0gLURDTUFLRV9DX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ19DT01QSUxFUl9JRH0KK2FkZF9SdW5DTWFrZV90ZXN0KGluc3RhbGwgLUROT19OQU1FTElOSz0ke05PX05BTUVMSU5LfSAtRENZR1dJTj0ke0NZR1dJTn0KICAgLURDTUFLRV9TSEFSRURfTElCUkFSWV9SUEFUSF9PUklHSU5fVE9LRU49JHtDTUFLRV9TSEFSRURfTElCUkFSWV9SUEFUSF9PUklHSU5fVE9LRU59CiAgIC1EQ01BS0VfU1lTVEVNX05BTUU9JHtDTUFLRV9TWVNURU1fTkFNRX0KICAgLURDTUFLRV9TSEFSRURfTElCUkFSWV9SVU5USU1FX0NfRkxBRz0ke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1JVTlRJTUVfQ19GTEFHfQotICAtRENNQUtFX0VYRUNVVEFCTEVfRk9STUFUPSR7Q01BS0VfRVhFQ1VUQUJMRV9GT1JNQVR9KQorICAtRENNQUtFX0VYRUNVVEFCTEVfRk9STUFUPSR7Q01BS0VfRVhFQ1VUQUJMRV9GT1JNQVR9CisgICkKKworYWRkX1J1bkNNYWtlX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMKKyAgLURDTUFLRV9DX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ19DT01QSUxFUl9JRH0KKyAgLURDTWFrZV9JTlNUQUxMX05BTUVfVE9PTF9CVUc9JHtDTWFrZV9JTlNUQUxMX05BTUVfVE9PTF9CVUd9CisgICkKIAogYWRkX1J1bkNNYWtlX3Rlc3QoQ1BhY2tDb21tYW5kTGluZSkKIGFkZF9SdW5DTWFrZV90ZXN0KENQYWNrQ29uZmlnKQpAQCAtNTM0LDcgKzYyMywxMCBAQAogICAgIGxpc3QoQVBQRU5EIENvbXBpbGVyTGF1bmNoZXJfQVJHUyAtRENNYWtlX1RFU1RfT0JKQz0xKQogICBlbmRpZigpCiAgIGFkZF9SdW5DTWFrZV90ZXN0KENvbXBpbGVyTGF1bmNoZXIpCisgIHNldF9wcm9wZXJ0eShURVNUIFJ1bkNNYWtlLkNvbXBpbGVyTGF1bmNoZXIgQVBQRU5ECisgICAgUFJPUEVSVFkgTEFCRUxTICJDVURBIikKICAgYWRkX1J1bkNNYWtlX3Rlc3QoY3Rlc3RfbGFiZWxzX2Zvcl9zdWJwcm9qZWN0cykKKyAgYWRkX1J1bkNNYWtlX3Rlc3QoQ29tcGlsZXJBcmdzKQogZW5kaWYoKQogCiBzZXQoY3BhY2tfdGVzdHMKQEAgLTU1NCw2ICs2NDYsNyBAQAogICBERUIuTUQ1U1VNUwogICBERUIuREVCX1BBQ0tBR0VfVkVSU0lPTl9CQUNLX0NPTVBBVElCSUxJVFkKICAgREVCLkRFQl9ERVNDUklQVElPTgorICBERUIuUFJPSkVDVF9NRVRBCiAKICAgUlBNLkNVU1RPTV9CSU5BUllfU1BFQ19GSUxFCiAgIFJQTS5DVVNUT01fTkFNRVMKQEAgLTU3NCw2ICs2NjcsNyBAQAogICBSUE0uU1VHR0VTVFMKICAgUlBNLlNZTUxJTktTCiAgIFJQTS5VU0VSX0ZJTEVMSVNUCisgIFJQTS5QUk9KRUNUX01FVEEKIAogICA3WgogICBUQloyCkBAIC01ODQsMTYgKzY3OCwyMiBAQAogICBTVEdaCiAgIEV4dGVybmFsCiAgICkKK2lmKEFQUExFKQorICBsaXN0KEFQUEVORCBjcGFja190ZXN0cyBEcmFnTkRyb3ApCitlbmRpZigpCiBhZGRfUnVuQ01ha2VfdGVzdF9ncm91cChDUGFjayAiJHtjcGFja190ZXN0c30iKQogIyBhZGQgYSB0ZXN0IHRvIG1ha2Ugc3VyZSBzeW1ib2xzIGFyZSBleHBvcnRlZCBmcm9tIGEgc2hhcmVkIGxpYnJhcnkKICMgZm9yIE1TVkMgY29tcGlsZXJzIENNQUtFX1dJTkRPV1NfRVhQT1JUX0FMTF9TWU1CT0xTIHByb3BlcnR5IGlzIHVzZWQKLWFkZF9SdW5DTWFrZV90ZXN0KEF1dG9FeHBvcnREbGwgLURDTUFLRV9DWFhfQ09NUElMRVJfSUQ9JHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9KQorYWRkX1J1bkNNYWtlX3Rlc3QoQXV0b0V4cG9ydERsbAorICAtRENNQUtFX1NZU1RFTV9OQU1FPSR7Q01BS0VfU1lTVEVNX05BTUV9CisgIC1EQ01BS0VfQ1hYX0NPTVBJTEVSX0lEPSR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfQorICApCiAKIGFkZF9SdW5DTWFrZV90ZXN0KEFuZHJvaWRNSykKIAogaWYoQ01ha2VfVEVTVF9BTkRST0lEX05ESyBPUiBDTWFrZV9URVNUX0FORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU4pCi0gIGlmKE5PVCAiJHtDTUFLRV9HRU5FUkFUT1J9IiBNQVRDSEVTICJNYWtlfE5pbmphIikKLSAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJBbmRyb2lkIHRlc3RzIHN1cHBvcnRlZCBvbmx5IGJ5IE1ha2VmaWxlIGFuZCBOaW5qYSBnZW5lcmF0b3JzIikKKyAgaWYoTk9UICIke0NNQUtFX0dFTkVSQVRPUn0iIE1BVENIRVMgIk1ha2V8TmluamF8VmlzdWFsIFN0dWRpbyAxWzQ1Nl0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkFuZHJvaWQgdGVzdHMgc3VwcG9ydGVkIG9ubHkgYnkgTWFrZWZpbGUsIE5pbmphLCBhbmQgVmlzdWFsIFN0dWRpbyA+PSAxNCBnZW5lcmF0b3JzIikKICAgZW5kaWYoKQogICBmb3JlYWNoKHYgVEVTVF9BTkRST0lEX05ESyBURVNUX0FORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU4pCiAgICAgaWYoQ01ha2VfJHt2fSkKQEAgLTYxOSw1ICs3MTksNSBAQAogCiBhZGRfUnVuQ01ha2VfdGVzdCgiQ1Rlc3RDb21tYW5kRXhwYW5kTGlzdHMiKQogCi1hZGRfUnVuQ01ha2VfdGVzdChQcmVjb21waWxlSGVhZGVycykKK2FkZF9SdW5DTWFrZV90ZXN0KFByZWNvbXBpbGVIZWFkZXJzIC1EQ01BS0VfQ19DT01QSUxFUl9JRD0ke0NNQUtFX0NfQ09NUElMRVJfSUR9KQogYWRkX1J1bkNNYWtlX3Rlc3QoIlVuaXR5QnVpbGQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svQ1BhY2tUZXN0SGVscGVycy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0NQYWNrVGVzdEhlbHBlcnMuY21ha2UKaW5kZXggZjY1Y2I5ZC4uMjRmNTRjNiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svQ1BhY2tUZXN0SGVscGVycy5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9DUGFja1Rlc3RIZWxwZXJzLmNtYWtlCkBAIC03NSw3ICs3NSw3IEBACiAgICAgaWYocGFja2FnZV90YXJnZXQpCiAgICAgICBzZXQoY3BhY2tfY29tbWFuZF8gJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iIC0tdGFyZ2V0IHBhY2thZ2UpCiAgICAgZWxzZSgpCi0gICAgICBzZXQoY3BhY2tfY29tbWFuZF8gJHtDTUFLRV9DUEFDS19DT01NQU5EfSAke3BhY2tfcGFyYW1zX30pCisgICAgICBzZXQoY3BhY2tfY29tbWFuZF8gJHtDTUFLRV9DUEFDS19DT01NQU5EfSAke3BhY2tfcGFyYW1zX30gLUMgRGVidWcpCiAgICAgZW5kaWYoKQogCiAgICAgIyBleGVjdXRlIGNwYWNrCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvQWNjZXB0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9BY2NlcHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWZiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvQWNjZXB0LnR4dApAQCAtMCwwICsxIEBACit5CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvSGVscGVycy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9IZWxwZXJzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NmZiYTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvSGVscGVycy5jbWFrZQpAQCAtMCwwICsxLDU1IEBACitzZXQoQUxMX0ZJTEVTX0dMT0IgIiouZG1nIikKKworZnVuY3Rpb24oZ2V0UGFja2FnZUNvbnRlbnQgRklMRSBSRVNVTFRfVkFSKQorICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHBhdGhfICIke0ZJTEV9IiBESVJFQ1RPUlkpCisgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7cGF0aF99L2NvbnRlbnQiKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke3BhdGhffS9jb250ZW50IikKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtIRElVVElMX0VYRUNVVEFCTEV9IGF0dGFjaCAtbW91bnRyb290ICR7cGF0aF99L2NvbnRlbnQgLW5vYnJvd3NlICR7RklMRX0KKyAgICAgICAgICBJTlBVVF9GSUxFICIke3NyY19kaXJ9L0RyYWdORHJvcC9BY2NlcHQudHh0IgorICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBhdHRhY2hfcmVzdWx0XworICAgICAgICAgIEVSUk9SX1ZBUklBQkxFIGF0dGFjaF9lcnJvcl8KKyAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKworICBpZihhdHRhY2hfcmVzdWx0XykKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gYXR0YWNoIERNRzogJyR7YXR0YWNoX3Jlc3VsdF99JzsiCisgICAgICAgICAgIiAnJHthdHRhY2hfZXJyb3JffScuIikKKyAgZW5kaWYoKQorCisgIGZpbGUoR0xPQl9SRUNVUlNFIHBhY2thZ2VfY29udGVudF8gTElTVF9ESVJFQ1RPUklFUyB0cnVlIFJFTEFUSVZFCisgICAgICAiJHtwYXRoX30vY29udGVudCIgIiR7cGF0aF99L2NvbnRlbnQvKiIpCisgICMgU29tZSB2ZXJzaW9ucyBvZiBtYWNPUyBoYXZlIC5UcmFzaGVzLCBvdGhlcnMgZG8gbm90LgorICBsaXN0KEZJTFRFUiBwYWNrYWdlX2NvbnRlbnRfIEVYQ0xVREUgUkVHRVggIi8uVHJhc2hlcyQiKQorICBzZXQoJHtSRVNVTFRfVkFSfSAiJHtwYWNrYWdlX2NvbnRlbnRffSIgUEFSRU5UX1NDT1BFKQorCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7SERJVVRJTF9FWEVDVVRBQkxFfSBkZXRhY2ggJHtwYXRoX30vY29udGVudC92b2x1bWUtbmFtZQorICAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBkZXRhY2hfcmVzdWx0XworICAgICAgICAgIEVSUk9SX1ZBUklBQkxFIGRldGFjaF9lcnJvcl8KKyAgICAgICAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKworICBpZihkZXRhY2hfcmVzdWx0XykKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGYWlsZWQgdG8gZGV0YWNoIERNRzogJyR7ZGV0YWNoX3Jlc3VsdF99JzsiCisgICAgICAgICAgIiAnJHtkZXRhY2hfZXJyb3JffScuIikKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihnZXRQYWNrYWdlTmFtZUdsb2JleHByIE5BTUUgQ09NUE9ORU5UIFZFUlNJT04gUkVWSVNJT04gRklMRV9OTyBSRVNVTFRfVkFSKQorICBpZihDT01QT05FTlQpCisgICAgc2V0KENPTVBPTkVOVCAiLSR7Q09NUE9ORU5UfSIpCisgIGVuZGlmKCkKKworICBzZXQoJHtSRVNVTFRfVkFSfSAiJHtOQU1FfS0ke1ZFUlNJT059LURhcndpbiR7Q09NUE9ORU5UfS5kbWciIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oZ2V0UGFja2FnZUNvbnRlbnRMaXN0IEZJTEUgUkVTVUxUX1ZBUikKKyAgZ2V0UGFja2FnZUNvbnRlbnQoIiR7RklMRX0iIHBhY2thZ2VfY29udGVudF8pCisKKyAgc2V0KCR7UkVTVUxUX1ZBUn0gIiR7cGFja2FnZV9jb250ZW50X30iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24odG9FeHBlY3RlZENvbnRlbnRMaXN0IEZJTEVfTk8gQ09OVEVOVF9WQVIpCisgIHNldChwcmVmaXhfICJ2b2x1bWUtbmFtZSIpCisgIGxpc3QoVFJBTlNGT1JNICR7Q09OVEVOVF9WQVJ9IFBSRVBFTkQgIiR7cHJlZml4X30iIE9VVFBVVF9WQVJJQUJMRSBwcmVwYXJlZF8pCisgIGxpc3QoQVBQRU5EIHByZXBhcmVkXyAiJHtwcmVmaXhffSIpCisKKyAgc2V0KCR7Q09OVEVOVF9WQVJ9ICIke3ByZXBhcmVkX30iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9QcmVyZXF1aXJlbWVudHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvUHJlcmVxdWlyZW1lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYWFmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvUHJlcmVxdWlyZW1lbnRzLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorZnVuY3Rpb24oZ2V0X3Rlc3RfcHJlcmVxdWlyZW1lbnRzIGZvdW5kX3ZhciBjb25maWdfZmlsZSkKKyAgZmluZF9wcm9ncmFtKEhESVVUSUxfRVhFQ1VUQUJMRSBoZGl1dGlsKQorCisgIGlmKEhESVVUSUxfRVhFQ1VUQUJMRSkKKyAgICBmaWxlKFdSSVRFICIke2NvbmZpZ19maWxlfSIgInNldChIRElVVElMX0VYRUNVVEFCTEUgXCIke0hESVVUSUxfRVhFQ1VUQUJMRX1cIikiKQorICAgIHNldCgke2ZvdW5kX3Zhcn0gdHJ1ZSBQQVJFTlRfU0NPUEUpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9wYWNrYWdpbmdfQ09NUE9ORU5UX2RlZmF1bHQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvcGFja2FnaW5nX0NPTVBPTkVOVF9kZWZhdWx0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNmM4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvcGFja2FnaW5nX0NPTVBPTkVOVF9kZWZhdWx0LmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KENQQUNLX0NPTVBPTkVOVFNfR1JPVVBJTkcgIklHTk9SRSIpCitzZXQoQ1BBQ0tfRE1HX0RJU0FCTEVfQVBQTElDQVRJT05TX1NZTUxJTksgT04pCitzZXQoQ1BBQ0tfRE1HX1ZPTFVNRV9OQU1FICJ2b2x1bWUtbmFtZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvcGFja2FnaW5nX01PTk9MSVRISUNfZGVmYXVsdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL0RyYWdORHJvcC9wYWNrYWdpbmdfTU9OT0xJVEhJQ19kZWZhdWx0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjc4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay9EcmFnTkRyb3AvcGFja2FnaW5nX01PTk9MSVRISUNfZGVmYXVsdC5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldChDUEFDS19ETUdfRElTQUJMRV9BUFBMSUNBVElPTlNfU1lNTElOSyBPTikKK3NldChDUEFDS19ETUdfVk9MVU1FX05BTUUgInZvbHVtZS1uYW1lIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBjMjM4MmIwLi41MzBiY2RmIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DUGFjay9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC01LDExICs1LDEyIEBACiAKICMgcnVuX2NwYWNrX3Rlc3QgYXJnczogVEVTVF9OQU1FICJHRU5FUkFUT1JTIiBSVU5fQ01BS0VfQlVJTERfU1RFUCAiUEFDS0FHSU5HX1RZUEVTIgogcnVuX2NwYWNrX3Rlc3QoQ1VTVE9NX0JJTkFSWV9TUEVDX0ZJTEUgIlJQTS5DVVNUT01fQklOQVJZX1NQRUNfRklMRSIgZmFsc2UgIk1PTk9MSVRISUM7Q09NUE9ORU5UIikKLXJ1bl9jcGFja190ZXN0KENVU1RPTV9OQU1FUyAiUlBNLkNVU1RPTV9OQU1FUztERUIuQ1VTVE9NX05BTUVTO1RHWiIgdHJ1ZSAiQ09NUE9ORU5UIikKK3J1bl9jcGFja190ZXN0KENVU1RPTV9OQU1FUyAiUlBNLkNVU1RPTV9OQU1FUztERUIuQ1VTVE9NX05BTUVTO1RHWjtEcmFnTkRyb3AiIHRydWUgIkNPTVBPTkVOVCIpCiBydW5fY3BhY2tfdGVzdChERUJVR0lORk8gIlJQTS5ERUJVR0lORk87REVCLkRFQlVHSU5GTyIgdHJ1ZSAiQ09NUE9ORU5UIikKIHJ1bl9jcGFja190ZXN0X3N1YnRlc3RzKERFRkFVTFRfUEVSTUlTU0lPTlMgIkNNQUtFX3Zhcl9zZXQ7Q1BBQ0tfdmFyX3NldDtib3RoX3NldDtpbnZhbGlkX0NNQUtFX3ZhcjtpbnZhbGlkX0NQQUNLX3ZhciIgIlJQTS5ERUZBVUxUX1BFUk1JU1NJT05TO0RFQi5ERUZBVUxUX1BFUk1JU1NJT05TIiBmYWxzZSAiTU9OT0xJVEhJQztDT01QT05FTlQiKQogcnVuX2NwYWNrX3Rlc3QoREVQRU5ERU5DSUVTICJSUE0uREVQRU5ERU5DSUVTO0RFQi5ERVBFTkRFTkNJRVMiIHRydWUgIkNPTVBPTkVOVCIpCiBydW5fY3BhY2tfdGVzdChESVNUICJSUE0uRElTVCIgZmFsc2UgIk1PTk9MSVRISUMiKQorcnVuX2NwYWNrX3Rlc3QoRE1HX1NMQSAiRHJhZ05Ecm9wIiBmYWxzZSAiTU9OT0xJVEhJQyIpCiBydW5fY3BhY2tfdGVzdChFTVBUWV9ESVIgIlJQTS5FTVBUWV9ESVI7REVCLkVNUFRZX0RJUjtUR1oiIHRydWUgIk1PTk9MSVRISUM7Q09NUE9ORU5UIikKIHJ1bl9jcGFja190ZXN0KFZFUlNJT04gIlJQTS5WRVJTSU9OO0RFQi5WRVJTSU9OIiBmYWxzZSAiTU9OT0xJVEhJQztDT01QT05FTlQiKQogcnVuX2NwYWNrX3Rlc3QoRVhUUkEgIkRFQi5FWFRSQSIgZmFsc2UgIkNPTVBPTkVOVCIpCkBAIC0yMCw2ICsyMSw4IEBACiBydW5fY3BhY2tfdGVzdF9zdWJ0ZXN0cyhNQUlOX0NPTVBPTkVOVCAiaW52YWxpZDtmb3VuZCIgIlJQTS5NQUlOX0NPTVBPTkVOVCIgZmFsc2UgIkNPTVBPTkVOVCIpCiBydW5fY3BhY2tfdGVzdChNSU5JTUFMICJSUE0uTUlOSU1BTDtERUIuTUlOSU1BTDs3WjtUQloyO1RHWjtUWFo7VFo7WklQO1NUR1o7RXh0ZXJuYWwiIGZhbHNlICJNT05PTElUSElDO0NPTVBPTkVOVCIpCiBydW5fY3BhY2tfdGVzdF9wYWNrYWdlX3RhcmdldChNSU5JTUFMICJSUE0uTUlOSU1BTDtERUIuTUlOSU1BTDs3WjtUQloyO1RHWjtUWFo7VFo7WklQO1NUR1o7RXh0ZXJuYWwiIGZhbHNlICJNT05PTElUSElDO0NPTVBPTkVOVCIpCitydW5fY3BhY2tfdGVzdF9wYWNrYWdlX3RhcmdldChUSFJFQURFRF9BTEwgIlRYWiIgZmFsc2UgIk1PTk9MSVRISUM7Q09NUE9ORU5UIikKK3J1bl9jcGFja190ZXN0X3BhY2thZ2VfdGFyZ2V0KFRIUkVBREVEICJUWFoiIGZhbHNlICJNT05PTElUSElDO0NPTVBPTkVOVCIpCiBydW5fY3BhY2tfdGVzdF9zdWJ0ZXN0cyhQQUNLQUdFX0NIRUNLU1VNICJpbnZhbGlkO01ENTtTSEExO1NIQTIyNDtTSEEyNTY7U0hBMzg0O1NIQTUxMiIgIlRHWiIgZmFsc2UgIk1PTk9MSVRISUMiKQogcnVuX2NwYWNrX3Rlc3QoUEFSVElBTExZX1JFTE9DQVRBQkxFX1dBUk5JTkcgIlJQTS5QQVJUSUFMTFlfUkVMT0NBVEFCTEVfV0FSTklORyIgZmFsc2UgIkNPTVBPTkVOVCIpCiBydW5fY3BhY2tfdGVzdChQRVJfQ09NUE9ORU5UX0ZJRUxEUyAiUlBNLlBFUl9DT01QT05FTlRfRklFTERTO0RFQi5QRVJfQ09NUE9ORU5UX0ZJRUxEUyIgZmFsc2UgIkNPTVBPTkVOVCIpCkBAIC00MywzICs0Niw1IEBACiAgIGZhbHNlCiAgICJNT05PTElUSElDO0NPTVBPTkVOVCIKICkKK3J1bl9jcGFja190ZXN0KFBST0pFQ1RfTUVUQSAiUlBNLlBST0pFQ1RfTUVUQTtERUIuUFJPSkVDVF9NRVRBIiBmYWxzZSAiTU9OT0xJVEhJQztDT01QT05FTlQiKQorcnVuX2NwYWNrX3Rlc3RfcGFja2FnZV90YXJnZXQoUFJFX1BPU1RfU0NSSVBUUyAiWklQIiBmYWxzZSAiTU9OT0xJVEhJQztDT01QT05FTlQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvQ1VTVE9NX05BTUVTL0V4cGVjdGVkRmlsZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9DVVNUT01fTkFNRVMvRXhwZWN0ZWRGaWxlcy5jbWFrZQppbmRleCAwNzIyNmRmLi45YWMxOWUyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9DVVNUT01fTkFNRVMvRXhwZWN0ZWRGaWxlcy5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9DVVNUT01fTkFNRVMvRXhwZWN0ZWRGaWxlcy5jbWFrZQpAQCAtMTIsNCArMTIsNyBAQAogZWxzZWlmKEdFTkVSQVRPUl9UWVBFIFNUUkVRVUFMICJUR1oiKQogICBzZXQoRVhQRUNURURfRklMRV8yICJzZWNvbmQudGFyLmd6IikKICAgc2V0KEVYUEVDVEVEX0ZJTEVfMyAicGtnXzNfYWJjLnRhci5neiIpCitlbHNlaWYoR0VORVJBVE9SX1RZUEUgU1RSRVFVQUwgIkRyYWdORHJvcCIpCisgIHNldChFWFBFQ1RFRF9GSUxFXzIgInNlY29uZC5kbWciKQorICBzZXQoRVhQRUNURURfRklMRV8zICJwa2dfM19hYmMuZG1nIikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0NVU1RPTV9OQU1FUy90ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvQ1VTVE9NX05BTUVTL3Rlc3QuY21ha2UKaW5kZXggNGMyMGU0MS4uODk5MjU4ZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvQ1VTVE9NX05BTUVTL3Rlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvQ1VTVE9NX05BTUVTL3Rlc3QuY21ha2UKQEAgLTEwLDYgKzEwLDkgQEAKIGVsc2VpZihHRU5FUkFUT1JfVFlQRSBTVFJFUVVBTCAiVEdaIikKICAgc2V0KENQQUNLX0FSQ0hJVkVfUEtHXzJfRklMRV9OQU1FICJzZWNvbmQiKQogICBzZXQoQ1BBQ0tfQVJDSElWRV9QS0dfM19GSUxFX05BTUUgInBrZ18zX2FiYyIpCitlbHNlaWYoR0VORVJBVE9SX1RZUEUgU1RSRVFVQUwgIkRyYWdORHJvcCIpCisgIHNldChDUEFDS19ETUdfUEtHXzJfRklMRV9OQU1FICJzZWNvbmQiKQorICBzZXQoQ1BBQ0tfRE1HX1BLR18zX0ZJTEVfTkFNRSAicGtnXzNfYWJjIikKIGVuZGlmKCkKIAogaW5zdGFsbChGSUxFUyBDTWFrZUxpc3RzLnR4dCBERVNUSU5BVElPTiBmb28gQ09NUE9ORU5UIHBrZ18xKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvREVCX0RFU0NSSVBUSU9OL1ZlcmlmeVJlc3VsdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RFQl9ERVNDUklQVElPTi9WZXJpZnlSZXN1bHQuY21ha2UKaW5kZXggYmZlMjA1OS4uNmU4NDFmYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvREVCX0RFU0NSSVBUSU9OL1ZlcmlmeVJlc3VsdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9ERUJfREVTQ1JJUFRJT04vVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC0zNCw3ICszNCw3IEBACiAgIFRoaXMgaXMgdGhlIERlYmlhbiBwYWNrYWdlIG11bHRpbGluZSBkZXNjcmlwdGlvbi4KICAgLgogICBJdCBtdXN0IGJlIGZvcm1hdHRlZCBwcm9wZXJseSEgT3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGAqLmRlYmAKLSAgcGFja2FnZSBiZWNvbWUgYnJva2VuIGFuZCBjYW50IGJlIGluc3RhbGxlZCEKKyAgcGFja2FnZSBiZWNvbWUgYnJva2VuIGFuZCBjYW5ub3QgYmUgaW5zdGFsbGVkIQogICAuCiAgIEl0IG1heSBjb250YWlucyBgO2AgY2hhcmFjdGVycyAoZXZlbiBsaWtlIHRoaXMgYDs7OztgKS4gRXhhbXBsZToKICAgLgpAQCAtNDYsMTcgKzQ2LDcgQEAKICAgLgogICBTZWUgYWxzbzogaHR0cHM6Ly93d3cuZGViaWFuLm9yZy9kb2MvZGViaWFuLXBvbGljeS9jaC1jb250cm9sZmllbGRzLmh0bWwjZGVzY3JpcHRpb25dXSkKIAotIyBBVFRFTlRJT04gVGhlIGNvZGUgaW4gYGNtQ1BhY2tHZW5lcmF0b3IuY3h4YCB0byByZWFkIGBDUEFDS19QQUNLQUdFX0RFU0NSSVBUSU9OX0ZJTEVgCi0jIGhhcyBhIEJVRzogaXQgYXBwZW5kcyB0aGUgYFxuYCBjaGFyYWN0ZXIgdG8gZXZlcnkgbGluZSBvZiB0aGUKLSMgaW5wdXQsIGV2ZW4gaWYgdGhlcmUgd2FzIG5vIEVPTCAoZS5nLiBhdCB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWxlKS4KLSMgVGhhdCBpcyBXSFkgZm9yIHRoaXMgc3ViLXRlc3QgdGhlIG9uZSBtb3JlIHByZS1mb3JtYXR0ZWQgImVtcHR5IgotIyBsaW5lIHJlcXVpcmVkIQotIyBOT1RFIEZvciBjb21wb25lbnQgYmFzZWQgaW5zdGFsbGVycyBjb250ZW50IG9mIHRoZSBmaWxlIGdvbm5hIHJlYWQgYnkKLSMgYENQYWNrRGViYCBtb2R1bGUgYW5kIHRoZSBgZmlsZShSRUFELi4uKWAgY29tbWFuZCBzbyBubyB0aGUgbWVudGlvbmVkCi0jIHdvcmthcm91bmQgcmVxdWlyZWQhCi1pZihSdW5DTWFrZV9TVUJURVNUX1NVRkZJWCBTVFJFUVVBTCAiQ1BBQ0tfUEFDS0FHRV9ERVNDUklQVElPTl9GSUxFIiBBTkQgUEFDS0FHSU5HX1RZUEUgU1RSRVFVQUwgIk1PTk9MSVRISUMiKQotICBzdHJpbmcoQVBQRU5EIF9leHBlY3RlZF9kZXNjcmlwdGlvbiAiXG4gIC4iICkKLWVsc2VpZihSdW5DTWFrZV9TVUJURVNUX1NVRkZJWCBTVFJFUVVBTCAiQ1BBQ0tfTk9fUEFDS0FHRV9ERVNDUklQVElPTiIpCitpZihSdW5DTWFrZV9TVUJURVNUX1NVRkZJWCBTVFJFUVVBTCAiQ1BBQ0tfTk9fUEFDS0FHRV9ERVNDUklQVElPTiIpCiAgIHNldChfZXhwZWN0ZWRfZGVzY3JpcHRpb24gW1sgRGVzY3JpcHRpb246IFRoaXMgaXMgdGhlIHN1bW1hcnkgbGluZV1dKQogZWxzZWlmKFJ1bkNNYWtlX1NVQlRFU1RfU1VGRklYIFNUUkVRVUFMICJDUEFDS19DT01QT05FTlRfQ09NUF9ERVNDUklQVElPTiIpCiAgIHNldChfZXhwZWN0ZWRfZGVzY3JpcHRpb24gW1sgRGVzY3JpcHRpb246IE9uZSBsaW5lIGRlc2NyaXB0aW9uXV0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9ERUJfREVTQ1JJUFRJT04vdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RFQl9ERVNDUklQVElPTi90ZXN0LmNtYWtlCmluZGV4IDg5M2ViMDEuLjJhMjdiNDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RFQl9ERVNDUklQVElPTi90ZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RFQl9ERVNDUklQVElPTi90ZXN0LmNtYWtlCkBAIC01LDcgKzUsNyBAQAogc2V0KF9kZXNjcmlwdGlvbiBbW1RoaXMgaXMgdGhlIERlYmlhbiBwYWNrYWdlIG11bHRpbGluZSBkZXNjcmlwdGlvbi4KIAogSXQgbXVzdCBiZSBmb3JtYXR0ZWQgcHJvcGVybHkhIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBgKi5kZWJgCi1wYWNrYWdlIGJlY29tZSBicm9rZW4gYW5kIGNhbnQgYmUgaW5zdGFsbGVkIQorcGFja2FnZSBiZWNvbWUgYnJva2VuIGFuZCBjYW5ub3QgYmUgaW5zdGFsbGVkIQogCiBJdCBtYXkgY29udGFpbnMgYDtgIGNoYXJhY3RlcnMgKGV2ZW4gbGlrZSB0aGlzIGA7Ozs7YCkuIEV4YW1wbGU6CiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRW5nbGlzaC5saWNlbnNlLnJ0ZiBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRW5nbGlzaC5saWNlbnNlLnJ0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWRhNzExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9FbmdsaXNoLmxpY2Vuc2UucnRmCkBAIC0wLDAgKzEsNyBAQAore1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzM3tcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQore1xjb2xvcnRibCA7XHJlZDBcZ3JlZW4wXGJsdWUyNTU7fQore1wqXGdlbmVyYXRvciBSaWNoZWQyMCAxMC4wLjE4MzYyfVx2aWV3a2luZDRcdWMxCitccGFyZFxzYTIwMFxzbDI3NlxzbG11bHQxXGJcZjBcZnMyMlxsYW5nOSBMSUNFTlNFXGIwXHBhcgorVGhpcyBpcyBhbiBpbnN0YWxsZXIgY3JlYXRlZCB1c2luZyBDUGFjayAoe3tcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgaHR0cHM6Ly9jbWFrZS5vcmcgfX17XGZsZHJzbHR7aHR0cHM6Ly9jbWFrZS5vcmdcdWwwXGNmMH19fX1cZjBcZnMyMiApLiBObyBsaWNlbnNlIHByb3ZpZGVkLlxwYXIKK1xwYXIKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRW5nbGlzaC5tZW51LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRW5nbGlzaC5tZW51LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmNiYzI1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9FbmdsaXNoLm1lbnUudHh0CkBAIC0wLDAgKzEsOSBAQAorRW5nbGlzaAorQWdyZWUKK0Rpc2FncmVlCitQcmludAorU2F2ZS4uLgorWW91IGFncmVlIHRvIHRoZSBMaWNlbnNlIEFncmVlbWVudCB0ZXJtcyB3aGVuIHlvdSBjbGljayB0aGUgIkFncmVlIiBidXR0b24uCitTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudAorVGhpcyB0ZXh0IGNhbm5vdCBiZSBzYXZlZC4gVGhpcyBkaXNrIG1heSBiZSBmdWxsIG9yIGxvY2tlZCBvciB0aGUgZmlsZSBtYXkgYmUgbG9ja2VkLgorVW5hYmxlIHRvIHByaW50LiAgTWFrZSBzdXJlIHlvdSBoYXZlIHNlbGVjdGVkIGEgcHJpbnRlci4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRXhwZWN0ZWRGaWxlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvRXhwZWN0ZWRGaWxlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWEzYTVmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9FeHBlY3RlZEZpbGVzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0KEVYUEVDVEVEX0ZJTEVTX0NPVU5UICIxIikKK3NldChFWFBFQ1RFRF9GSUxFX0NPTlRFTlRfMV9MSVNUICIvZm9vOy9mb28vQ01ha2VMaXN0cy50eHQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9HZXJtYW4ubGljZW5zZS50eHQgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9ETUdfU0xBL0dlcm1hbi5saWNlbnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWRkMWYyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9HZXJtYW4ubGljZW5zZS50eHQKQEAgLTAsMCArMSwzIEBACitMSVpFTloKKy0tLS0tLQorRGllcyBpc3QgZWluIEluc3RhbGxhdGlvbnNwcm9ncmFtbSwgZGFzIG1pdCBlcnN0ZWxsdCB3dXJkZSBDUGFjayAoaHR0cHM6Ly9jbWFrZS5vcmcpLiBLZWluZSBMaXplbnogYW5nZWdlYmVuLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9HZXJtYW4ubWVudS50eHQgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9ETUdfU0xBL0dlcm1hbi5tZW51LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI0ODE4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9HZXJtYW4ubWVudS50eHQKQEAgLTAsMCArMSw5IEBACitHZXJtYW4KK0FremVwdGllcmVuCitBYmxlaG5lbgorRHJ1Y2tlbgorU3BlaWNoZXJuLi4uCitLbGlja2VuIFNpZSBhdWYgIkFremVwdGllcmVuIiwgd2VubiBTaWUgbWl0IGRlbiBCZXN0aW1tdW5nZW4gZGVzIFNvZnR3YXJlLUxpemVuenZlcnRyYWdlcyBlaW52ZXJzdGFuZGVuIHNpbmQuCitTb2Z0d2FyZS1MaXplbnp2ZXJ0cmFnCitEaWVzZXIgVGV4dCBrYW5uIG5pY2h0IGdlc2ljaGVydCB3ZXJkZW4uIERpZXNlIEZlc3RwbGF0dGUgaXN0IG3CmmdsaWNoZXJ3ZWlzZSB2b2xsIG9kZXIgZ2VzY2jCn3R6dCBvZGVyIGRlciBPcmRuZXIgaXN0IGdlc2Nowp90enQuCitFcyBrYW5uIG5pY2h0IGdlZHJ1Y2t0IHdlcmRlbi4gQml0dGUgc3RlbGxlbiBTaWUgc2ljaGVyLCBkYXNzIGVpbiBEcnVja2VyIGF1c2dld8KKaGx0IGlzdC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvVmVyaWZ5UmVzdWx0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS9WZXJpZnlSZXN1bHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwZTE0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0RNR19TTEEvVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC0wLDAgKzEsMzMgQEAKK3NldChkbWcgIiR7YmluX2Rpcn0vJHtGT1VORF9GSUxFXzF9IikKK2V4ZWN1dGVfcHJvY2VzcyhDT01NQU5EIGhkaXV0aWwgdWRpZmRlcmV6IC14bWwgIiR7ZG1nfSIgT1VUUFVUX1ZBUklBQkxFIG91dCBFUlJPUl9WQVJJQUJMRSBlcnIgUkVTVUxUX1ZBUklBQkxFIHJlcykKK2lmKE5PVCByZXMgRVFVQUwgMCkKKyAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgZXJyICIgICR7ZXJyfSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlJ1bm5pbmcgJ2hkaXV0aWwgdWRpZmRlcmV6IC14bWwnIG9uXG4gICR7ZG1nfVxuZmFpbGVkIHdpdGg6XG4ke2Vycn0iKQorZW5kaWYoKQorZm9yZWFjaChrZXkgIkxQaWMiICJTVFIjIiAiVEVYVCIgIlJURiAiKQorICBpZihOT1Qgb3V0IE1BVENIRVMgIjxrZXk+JHtrZXl9PC9rZXk+IikKKyAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBvdXQgIiAgJHtvdXR9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJlcnJvcjogcnVubmluZyAnaGRpdXRpbCB1ZGlmZGVyZXogLXhtbCcgb25cbiAgJHtkbWd9XG5kaWQgbm90IHNob3cgJyR7a2V5fScga2V5OlxuJHtvdXR9IikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCitmb3JlYWNoKGxpbmUKKyAgICAjIExQaWMKKyAgICAiXHRBQUFBQWdBQUFBQUFBQUFEQUFFQUFBPT1cbiIKKyAgICAjIFNUUiMgRW5nbGlzaCBmaXJzdCBhbmQgbGFzdCBiYXNlNjQgbGluZXMKKyAgICAiXHRBQWtIUlc1bmJHbHphQVZCWjNKbFpRaEVhWE5oWjNKbFpRVlFjbWx1ZEFkVFlYWmxMaTR1XG4iCisgICAgIlx0WkNCaElIQnlhVzUwWlhJdVxuIgorICAgICMgU1RSIyBHZXJtYW4gZmlyc3QgYW5kIGxhc3QgYmFzZTY0IGxpbmVzCisgICAgIlx0QUFrR1IyVnliV0Z1QzBGcmVtVndkR2xsY21WdUNFRmliR1ZvYm1WdUIwUnlkV05yWlc0TVxuIgorICAgICJcdFlYVnpaMlYzd29wb2JIUWdhWE4wTGc9PVxuIgorICAgICMgUlRGIEVuZ2xpc2ggZmlyc3QgYW5kIGxhc3QgYmFzZTY0IGxpbmVzCisgICAgIlx0ZTF4eWRHWXhYR0Z1YzJsY1lXNXphV053WnpFeU5USmNaR1ZtWmpCY2JtOTFhV052YlhCaFxuIgorICAgICJcdGRtbGtaV1F1WEhCaGNnMWNjR0Z5RFgwTkRRPT1cbiIKKyAgICAjIFRFWFQgR2VybWFuIGZpcnN0IGFuZCBsYXN0IGJhc2U2NCBsaW5lcworICAgICJcdFRFbGFSVTVhRFMwdExTMHRMUTFFYVdWeklHbHpkQ0JsYVc0Z1NXNXpkR0ZzYkdGMGFXOXVcbiIKKyAgICAiXHRaMlZpWlc0dURRMD1cbiIKKyAgICApCisgIGlmKE5PVCBvdXQgTUFUQ0hFUyAiJHtsaW5lfSIpCisgICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgb3V0ICIgICR7b3V0fSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZXJyb3I6IHJ1bm5pbmcgJ2hkaXV0aWwgdWRpZmRlcmV6IC14bWwnIG9uXG4gICR7ZG1nfVxuZGlkIG5vdCBzaG93ICcke2xpbmV9JzpcbiR7b3V0fSIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS90ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRE1HX1NMQS90ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MDRiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9ETUdfU0xBL3Rlc3QuY21ha2UKQEAgLTAsMCArMSwzIEBACitpbnN0YWxsKEZJTEVTIENNYWtlTGlzdHMudHh0IERFU1RJTkFUSU9OIGZvbykKK3NldChDUEFDS19ETUdfU0xBX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIpCitzZXQoQ1BBQ0tfRE1HX1NMQV9MQU5HVUFHRVMgRW5nbGlzaCBHZXJtYW4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9FWFRFUk5BTC9jcmVhdGVfcGFja2FnZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML2NyZWF0ZV9wYWNrYWdlLmNtYWtlCmluZGV4IDZmN2M0YzIuLjNkYjgwMTQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML2NyZWF0ZV9wYWNrYWdlLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML2NyZWF0ZV9wYWNrYWdlLmNtYWtlCkBAIC0yOSwzICsyOSwxMSBAQAogZXhwZWN0X2ZpbGUoJHtDUEFDS19URU1QT1JBUllfRElSRUNUT1JZfS9mNC9zaGFyZS9jcGFjay10ZXN0L2Y0LnR4dCkKIAogbWVzc2FnZShTVEFUVVMgIlRoaXMgc3RhdHVzIG1lc3NhZ2UgaXMgZXhwZWN0ZWQgdG8gYmUgdmlzaWJsZSIpCisKK3NldCgKKyAgICBDUEFDS19FWFRFUk5BTF9CVUlMVF9QQUNLQUdFUworICAgICR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0vZjEvc2hhcmUvY3BhY2stdGVzdC9mMS50eHQKKyAgICAke0NQQUNLX1RFTVBPUkFSWV9ESVJFQ1RPUll9L2YyL3NoYXJlL2NwYWNrLXRlc3QvZjIudHh0CisgICAgJHtDUEFDS19URU1QT1JBUllfRElSRUNUT1JZfS9mMy9zaGFyZS9jcGFjay10ZXN0L2YzLnR4dAorICAgICR7Q1BBQ0tfVEVNUE9SQVJZX0RJUkVDVE9SWX0vZjQvc2hhcmUvY3BhY2stdGVzdC9mNC50eHQKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvZXhwZWN0ZWQtanNvbi0xLjAudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvZXhwZWN0ZWQtanNvbi0xLjAudHh0CmluZGV4IDE4YmY2MTcuLmNhMjViMWUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML2V4cGVjdGVkLWpzb24tMS4wLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9FWFRFUk5BTC9leHBlY3RlZC1qc29uLTEuMC50eHQKQEAgLTEsNSArMSw2IEBACiBeXHsKLSAgImNvbXBvbmVudEdyb3VwcyIgOlsgXQorICAoImJ1aWxkQ29uZmlnIiA6ICJEZWJ1ZyIsCispPyAgImNvbXBvbmVudEdyb3VwcyIgOlsgXQogICBcewogICAgICJmMTIiIDpbIF0KICAgICBcewpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvc3RhZ2VfYW5kX3BhY2thZ2Utc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML3N0YWdlX2FuZF9wYWNrYWdlLXN0ZG91dC50eHQKaW5kZXggMzdkNjM1Zi4uNTg3YjJlOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvc3RhZ2VfYW5kX3BhY2thZ2Utc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9FWFRFUk5BTC9zdGFnZV9hbmRfcGFja2FnZS1zdGRvdXQudHh0CkBAIC0xICsxLDExIEBACiAtLSBUaGlzIHN0YXR1cyBtZXNzYWdlIGlzIGV4cGVjdGVkIHRvIGJlIHZpc2libGUKK0NQYWNrOiAtIHBhY2thZ2U6IC4qL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsL0NQYWNrL0VYVEVSTkFMLWJ1aWxkLXN0YWdlX2FuZF9wYWNrYWdlLXN1YnRlc3QvZXh0ZXJuYWwtMFwuMVwuMS0uKlwuanNvbiBnZW5lcmF0ZWRcLgorQ1BhY2s6IC0gY2hlY2tzdW0gZmlsZTogLiovVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWwvQ1BhY2svRVhURVJOQUwtYnVpbGQtc3RhZ2VfYW5kX3BhY2thZ2Utc3VidGVzdC9leHRlcm5hbC0wXC4xXC4xLS4qXC5qc29uXC5zaGExIGdlbmVyYXRlZFwuCitDUGFjazogLSBwYWNrYWdlOiAuKi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbC9DUGFjay9FWFRFUk5BTC1idWlsZC1zdGFnZV9hbmRfcGFja2FnZS1zdWJ0ZXN0L2YxXC50eHQgZ2VuZXJhdGVkXC4KK0NQYWNrOiAtIGNoZWNrc3VtIGZpbGU6IC4qL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsL0NQYWNrL0VYVEVSTkFMLWJ1aWxkLXN0YWdlX2FuZF9wYWNrYWdlLXN1YnRlc3QvZjFcLnR4dFwuc2hhMSBnZW5lcmF0ZWRcLgorQ1BhY2s6IC0gcGFja2FnZTogLiovVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWwvQ1BhY2svRVhURVJOQUwtYnVpbGQtc3RhZ2VfYW5kX3BhY2thZ2Utc3VidGVzdC9mMlwudHh0IGdlbmVyYXRlZFwuCitDUGFjazogLSBjaGVja3N1bSBmaWxlOiAuKi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbC9DUGFjay9FWFRFUk5BTC1idWlsZC1zdGFnZV9hbmRfcGFja2FnZS1zdWJ0ZXN0L2YyXC50eHRcLnNoYTEgZ2VuZXJhdGVkXC4KK0NQYWNrOiAtIHBhY2thZ2U6IC4qL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsL0NQYWNrL0VYVEVSTkFMLWJ1aWxkLXN0YWdlX2FuZF9wYWNrYWdlLXN1YnRlc3QvZjNcLnR4dCBnZW5lcmF0ZWRcLgorQ1BhY2s6IC0gY2hlY2tzdW0gZmlsZTogLiovVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWwvQ1BhY2svRVhURVJOQUwtYnVpbGQtc3RhZ2VfYW5kX3BhY2thZ2Utc3VidGVzdC9mM1wudHh0XC5zaGExIGdlbmVyYXRlZFwuCitDUGFjazogLSBwYWNrYWdlOiAuKi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbC9DUGFjay9FWFRFUk5BTC1idWlsZC1zdGFnZV9hbmRfcGFja2FnZS1zdWJ0ZXN0L2Y0XC50eHQgZ2VuZXJhdGVkXC4KK0NQYWNrOiAtIGNoZWNrc3VtIGZpbGU6IC4qL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsL0NQYWNrL0VYVEVSTkFMLWJ1aWxkLXN0YWdlX2FuZF9wYWNrYWdlLXN1YnRlc3QvZjRcLnR4dFwuc2hhMSBnZW5lcmF0ZWRcLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0VYVEVSTkFML3Rlc3QuY21ha2UKaW5kZXggYmM5NzY2Yi4uZDQ3ODFiYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvRVhURVJOQUwvdGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9FWFRFUk5BTC90ZXN0LmNtYWtlCkBAIC0xNyw2ICsxNyw3IEBACiBlbHNlaWYoUnVuQ01ha2VfU1VCVEVTVF9TVUZGSVggU1RSRVFVQUwgInN0YWdlX2FuZF9wYWNrYWdlIikKICAgc2V0KENQQUNLX0VYVEVSTkFMX0VOQUJMRV9TVEFHSU5HIDEpCiAgIHNldChDUEFDS19FWFRFUk5BTF9QQUNLQUdFX1NDUklQVCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jcmVhdGVfcGFja2FnZS5jbWFrZSIpCisgIHNldChDUEFDS19QQUNLQUdFX0NIRUNLU1VNIFNIQTEpCiBlbmRpZigpCiAKIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9mMS50eHQiIHRlc3QxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvSU5TVEFMTF9TQ1JJUFRTL1ZlcmlmeVJlc3VsdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL0lOU1RBTExfU0NSSVBUUy9WZXJpZnlSZXN1bHQuY21ha2UKaW5kZXggZDdkODJmMi4uMWExZTk4MyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvSU5TVEFMTF9TQ1JJUFRTL1ZlcmlmeVJlc3VsdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvVmVyaWZ5UmVzdWx0LmNtYWtlCkBAIC0yNSw1ICsyNSw1IEBACiAgIGVuZGZvcmVhY2goKQogZW5kZnVuY3Rpb24oKQogCi1jaGVja1NjcmlwdHNfKCIke0ZPVU5EX0ZJTEVfMX0iICJlY2hvIFwicHJlIGluc3RhbGwgZm9vXCI7ZWNobyBcInBvc3QgaW5zdGFsbCBmb29cIjtlY2hvIFwicHJlIHVuaW5zdGFsbCBmb29cIjtlY2hvIFwicG9zdCB1bmluc3RhbGwgZm9vXCIiKQotY2hlY2tTY3JpcHRzXygiJHtGT1VORF9GSUxFXzJ9IiAiZWNobyBcInByZSBpbnN0YWxsXCI7ZWNobyBcInBvc3QgaW5zdGFsbFwiO2VjaG8gXCJwcmUgdW5pbnN0YWxsXCI7ZWNobyBcInBvc3QgdW5pbnN0YWxsXCIiKQorY2hlY2tTY3JpcHRzXygiJHtGT1VORF9GSUxFXzF9IiAiZWNobyBcInByZSBpbnN0YWxsIGZvb1wiO2VjaG8gXCJwb3N0IGluc3RhbGwgZm9vXCI7ZWNobyBcInByZSB1bmluc3RhbGwgZm9vXCI7ZWNobyBcInBvc3QgdW5pbnN0YWxsIGZvb1wiO2VjaG8gXCJwcmUgdHJhbnMgZm9vXCI7ZWNobyBcInBvc3QgdHJhbnMgZm9vXCIiKQorY2hlY2tTY3JpcHRzXygiJHtGT1VORF9GSUxFXzJ9IiAiZWNobyBcInByZSBpbnN0YWxsXCI7ZWNobyBcInBvc3QgaW5zdGFsbFwiO2VjaG8gXCJwcmUgdW5pbnN0YWxsXCI7ZWNobyBcInBvc3QgdW5pbnN0YWxsXCI7ZWNobyBcInByZSB0cmFuc1wiO2VjaG8gXCJwb3N0IHRyYW5zXCIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvSU5TVEFMTF9TQ1JJUFRTL3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvdGVzdC5jbWFrZQppbmRleCBmYjFiOGRlLi5jMjAwZmE1IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvdGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9JTlNUQUxMX1NDUklQVFMvdGVzdC5jbWFrZQpAQCAtNyw2ICs3LDEwIEBACiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfdW5pbnN0YWxsLnNoIikKICAgc2V0KENQQUNLX1JQTV9QT1NUX1VOSU5TVEFMTF9TQ1JJUFRfRklMRQogICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcG9zdF91bmluc3RhbGwuc2giKQorICBzZXQoQ1BBQ0tfUlBNX1BSRV9UUkFOU19TQ1JJUFRfRklMRQorICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcHJlX3RyYW5zLnNoIikKKyAgc2V0KENQQUNLX1JQTV9QT1NUX1RSQU5TX1NDUklQVF9GSUxFCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3RyYW5zLnNoIikKIAogICBzZXQoQ1BBQ0tfUlBNX2Zvb19QUkVfSU5TVEFMTF9TQ1JJUFRfRklMRQogICAgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcHJlX2luc3RhbGxfZm9vLnNoIikKQEAgLTE2LDYgKzIwLDEwIEBACiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfdW5pbnN0YWxsX2Zvby5zaCIpCiAgIHNldChDUEFDS19SUE1fZm9vX1BPU1RfVU5JTlNUQUxMX1NDUklQVF9GSUxFCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3VuaW5zdGFsbF9mb28uc2giKQorICBzZXQoQ1BBQ0tfUlBNX2Zvb19QUkVfVFJBTlNfU0NSSVBUX0ZJTEUKKyAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ByZV90cmFuc19mb28uc2giKQorICBzZXQoQ1BBQ0tfUlBNX2Zvb19QT1NUX1RSQU5TX1NDUklQVF9GSUxFCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3RyYW5zX2Zvby5zaCIpCiBlbmRpZigpCiAKIHNldChDTUFLRV9CVUlMRF9XSVRIX0lOU1RBTExfUlBBVEggMSkKQEAgLTI5LDYgKzM3LDEwIEBACiAgICAgImVjaG8gXCJwcmUgdW5pbnN0YWxsXCJcbiIpCiBmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcG9zdF91bmluc3RhbGwuc2giCiAgICAgImVjaG8gXCJwb3N0IHVuaW5zdGFsbFwiXG4iKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3ByZV90cmFucy5zaCIKKyAgICAiZWNobyBcInByZSB0cmFuc1wiXG4iKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Bvc3RfdHJhbnMuc2giCisgICAgImVjaG8gXCJwb3N0IHRyYW5zXCJcbiIpCiAKICMgc3BlY2lmaWMKIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfaW5zdGFsbF9mb28uc2giCkBAIC0zOSw2ICs1MSwxMCBAQAogICAgICJlY2hvIFwicHJlIHVuaW5zdGFsbCBmb29cIlxuIikKIGZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wb3N0X3VuaW5zdGFsbF9mb28uc2giCiAgICAgImVjaG8gXCJwb3N0IHVuaW5zdGFsbCBmb29cIlxuIikKK2ZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9wcmVfdHJhbnNfZm9vLnNoIgorICAgICJlY2hvIFwicHJlIHRyYW5zIGZvb1wiXG4iKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Bvc3RfdHJhbnNfZm9vLnNoIgorICAgICJlY2hvIFwicG9zdCB0cmFucyBmb29cIlxuIikKIAogaW5zdGFsbChGSUxFUyBDTWFrZUxpc3RzLnR4dCBERVNUSU5BVElPTiBmb28gQ09NUE9ORU5UIGZvbykKIGluc3RhbGwoRklMRVMgQ01ha2VMaXN0cy50eHQgREVTVElOQVRJT04gYmFyIENPTVBPTkVOVCBiYXIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUkVfUE9TVF9TQ1JJUFRTL0V4cGVjdGVkRmlsZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUkVfUE9TVF9TQ1JJUFRTL0V4cGVjdGVkRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhMzZhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvRXhwZWN0ZWRGaWxlcy5jbWFrZQpAQCAtMCwwICsxLDE5IEBACitzZXQoU0FUVSAiL3NhdHU7L3NhdHUvQ01ha2VMaXN0cy50eHQiKQorc2V0KERVQSAiL2R1YTsvZHVhL0NNYWtlTGlzdHMudHh0IikKKworaWYoR0VORVJBVE9SX1RZUEUgU1RSRVFVQUwgWklQKQorICAgIHNldChfZXh0ICJ6aXAiKQorZWxzZWlmKEdFTkVSQVRPUl9UWVBFIFNUUkVRVUFMIFRHWikKKyAgICBzZXQoX2V4dCAidGFyLmd6IikKK2VuZGlmKCkKKworaWYoUEFDS0FHSU5HX1RZUEUgU1RSRVFVQUwgIkNPTVBPTkVOVCIpCisgICAgc2V0KEVYUEVDVEVEX0ZJTEVTX0NPVU5UICIyIikKKyAgICBzZXQoRVhQRUNURURfRklMRV8xICIqLXNhdHUuJHtfZXh0fSIpCisgICAgc2V0KEVYUEVDVEVEX0ZJTEVfQ09OVEVOVF8xX0xJU1QgJHtTQVRVfSkKKyAgICBzZXQoRVhQRUNURURfRklMRV8yICIqLWR1YS4ke19leHR9IikKKyAgICBzZXQoRVhQRUNURURfRklMRV9DT05URU5UXzJfTElTVCAke0RVQX0pCitlbHNlKCkKKyAgICBzZXQoRVhQRUNURURfRklMRVNfQ09VTlQgIjEiKQorICAgIHNldChFWFBFQ1RFRF9GSUxFX0NPTlRFTlRfMV9MSVNUICR7U0FUVX0gJHtEVUF9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9aSVBfQ09NUE9ORU5ULXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUkVfUE9TVF9TQ1JJUFRTL1pJUF9DT01QT05FTlQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTlkMGRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9aSVBfQ09NUE9ORU5ULXN0ZG91dC50eHQKQEAgLTAsMCArMSw0IEBACistLSBUaGUgbWVzc2FnZSBmcm9tIC4qL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcHJlXC5jbWFrZSBhbmQgZ2VuZXJhdG9yIFpJUAorLioKKy0tIFRoZSBtZXNzYWdlIGZyb20gLiovVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9wb3N0XC5jbWFrZSBhbmQgZ2VuZXJhdG9yIFpJUAorLS0gQnVpbHQgcGFja2FnZXM6IC4qL19DUGFja19QYWNrYWdlcy8uKi9wcmVfcG9zdF9zY3JpcHRzLS4qLWR1YS56aXA7LiovX0NQYWNrX1BhY2thZ2VzLy4qL3ByZV9wb3N0X3NjcmlwdHMtLiotc2F0dS56aXAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvWklQX01PTk9MSVRISUMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvWklQX01PTk9MSVRISUMtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzJjNGQxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9aSVBfTU9OT0xJVEhJQy1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNCBAQAorLS0gVGhlIG1lc3NhZ2UgZnJvbSAuKi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUkVfUE9TVF9TQ1JJUFRTL3ByZVwuY21ha2UgYW5kIGdlbmVyYXRvciBaSVAKKy4qCistLSBUaGUgbWVzc2FnZSBmcm9tIC4qL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcG9zdFwuY21ha2UgYW5kIGdlbmVyYXRvciBaSVAKKy0tIEJ1aWx0IHBhY2thZ2VzOiAuKi9fQ1BhY2tfUGFja2FnZXMvLiovcHJlX3Bvc3Rfc2NyaXB0cy0wXC4xXC4xLS4qXC56aXAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcG9zdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcG9zdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjBiMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9wb3N0LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorbWVzc2FnZShTVEFUVVMgIlRoZSBtZXNzYWdlIGZyb20gJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0gYW5kIGdlbmVyYXRvciAke0NQQUNLX0dFTkVSQVRPUn0iKQorbWVzc2FnZShTVEFUVVMgIkJ1aWx0IHBhY2thZ2VzOiAke0NQQUNLX1BBQ0tBR0VfRklMRVN9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcHJlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy9wcmUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0YWE2YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvcHJlLmNtYWtlCkBAIC0wLDAgKzEgQEAKK21lc3NhZ2UoU1RBVFVTICJUaGUgbWVzc2FnZSBmcm9tICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IGFuZCBnZW5lcmF0b3IgJHtDUEFDS19HRU5FUkFUT1J9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1BSRV9QT1NUX1NDUklQVFMvdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWI2ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJFX1BPU1RfU0NSSVBUUy90ZXN0LmNtYWtlCkBAIC0wLDAgKzEsOSBAQAoraW5zdGFsbChGSUxFUyBDTWFrZUxpc3RzLnR4dCBERVNUSU5BVElPTiBzYXR1IENPTVBPTkVOVCBzYXR1KQoraW5zdGFsbChGSUxFUyBDTWFrZUxpc3RzLnR4dCBERVNUSU5BVElPTiBkdWEgQ09NUE9ORU5UIGR1YSkKKworc2V0KENQQUNLX1BSRV9CVUlMRF9TQ1JJUFRTICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3ByZS5jbWFrZSIpCitzZXQoQ1BBQ0tfUE9TVF9CVUlMRF9TQ1JJUFRTICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3Bvc3QuY21ha2UiKQorCitpZihQQUNLQUdJTkdfVFlQRSBTVFJFUVVBTCAiQ09NUE9ORU5UIikKKyAgc2V0KENQQUNLX0NPTVBPTkVOVFNfQUxMIHNhdHUgZHVhKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL0V4cGVjdGVkRmlsZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUk9KRUNUX01FVEEvRXhwZWN0ZWRGaWxlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDhlZDJiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL0V4cGVjdGVkRmlsZXMuY21ha2UKQEAgLTAsMCArMSw5IEBACitpZihHRU5FUkFUT1JfVFlQRSBTVFJFUVVBTCBERUIpCisgIHNldChFWFBFQ1RFRF9GSUxFXzEgInByb2plY3RfbWV0YS0xLjIuMyouZGViIikKK2Vsc2VpZihHRU5FUkFUT1JfVFlQRSBTVFJFUVVBTCBSUE0pCisgIHNldChFWFBFQ1RFRF9GSUxFXzEgInByb2plY3RfbWV0YS0xLjIuMyoucnBtIikKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmV4cGVjdGVkIENQYWNrIGdlbmVyYXRvciIpCitlbmRpZigpCitzZXQoRVhQRUNURURfRklMRVNfQ09VTlQgIjEiKQorc2V0KEVYUEVDVEVEX0ZJTEVfQ09OVEVOVF8xX0xJU1QgIi9mb287L2Zvby9DTWFrZUxpc3RzLnR4dCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUk9KRUNUX01FVEEvVmVyaWZ5UmVzdWx0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL1ZlcmlmeVJlc3VsdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWE5M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL1ZlcmlmeVJlc3VsdC5jbWFrZQpAQCAtMCwwICsxLDMwIEBACitmdW5jdGlvbihjaGVja1BhY2thZ2VVUkwgRklMRSBUQUcgRVhQRUNURURfVVJMKQorICBnZXRQYWNrYWdlSW5mbygiJHtGSUxFfSIgIl9maWxlX2luZm8iKQorICBzdHJpbmcoUkVQTEFDRSAiXG4iICI7IiBfZmlsZV9pbmZvICIke19maWxlX2luZm99IikKKworICBzZXQoX3NlZW5fdXJsIEZBTFNFKQorICBmb3JlYWNoKF9saW5lIElOIExJU1RTIF9maWxlX2luZm8pCisgICAgaWYoX2xpbmUgTUFUQ0hFUyAiJHtUQUd9OiAoLiopIikKKyAgICAgIHNldChfc2Vlbl91cmwgVFJVRSkKKyAgICAgIGlmKE5PVCBDTUFLRV9NQVRDSF8xIFNUUkVRVUFMIEVYUEVDVEVEX1VSTCkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVW5leHBlY3RlZCBgSG9tZXBhZ2VgIFVSTDogYCR7Q01BS0VfTUFUQ0hfMX1gICE9IGAke0VYUEVDVEVEX1VSTH1gIikKKyAgICAgIGVuZGlmKCkKKyAgICAgIGJyZWFrKCkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorICBpZihOT1QgX3NlZW5fdXJsKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlRoZSBwYWNrYWdlIGAke0ZJTEV9YCBkbyBub3QgaGF2ZSBVUkwgYXMgZXhwZWN0ZWQiKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKK2lmKEdFTkVSQVRPUl9UWVBFIFNUUkVRVUFMIERFQikKKyAgc2V0KF90YWcgIiBIb21lcGFnZSIpICMgTk9URSBUaGUgbGVhZGluZyBzcGFjZQorZWxzZWlmKEdFTkVSQVRPUl9UWVBFIFNUUkVRVUFMIFJQTSkKKyAgc2V0KF90YWcgIlVSTC4qIikKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmV4cGVjdGVkIENQYWNrIGdlbmVyYXRvciIpCitlbmRpZigpCisKK2NoZWNrUGFja2FnZVVSTCgiJHtGT1VORF9GSUxFXzF9IiAiJHtfdGFnfSIgImh0dHBzOi8vbWV0YS50ZXN0LmluZm8iKQorCisjIGthdGU6IGluZGVudC13aWR0aCAyOwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9QUk9KRUNUX01FVEEvdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzUyNjZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvUFJPSkVDVF9NRVRBL3Rlc3QuY21ha2UKQEAgLTAsMCArMSwxMSBAQAorcHJvamVjdCgKKyAgTWV0YUluZm9UZXN0CisgIFZFUlNJT04gMS4yLjMKKyAgREVTQ1JJUFRJT04gIlRoaXMgaXMgZ29pbmcgdG8gYmUgYSBzdW1tYXJ5IgorICBIT01FUEFHRV9VUkwgImh0dHBzOi8vbWV0YS50ZXN0LmluZm8iCispCitpbnN0YWxsKEZJTEVTIENNYWtlTGlzdHMudHh0IERFU1RJTkFUSU9OIGZvbyBDT01QT05FTlQgdGVzdCkKKworaWYoUEFDS0FHSU5HX1RZUEUgU1RSRVFVQUwgIkNPTVBPTkVOVCIpCisgIHNldChDUEFDS19DT01QT05FTlRTX0FMTCB0ZXN0KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERUQvRXhwZWN0ZWRGaWxlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1RIUkVBREVEL0V4cGVjdGVkRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhM2E1ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1RIUkVBREVEL0V4cGVjdGVkRmlsZXMuY21ha2UKQEAgLTAsMCArMSwyIEBACitzZXQoRVhQRUNURURfRklMRVNfQ09VTlQgIjEiKQorc2V0KEVYUEVDVEVEX0ZJTEVfQ09OVEVOVF8xX0xJU1QgIi9mb287L2Zvby9DTWFrZUxpc3RzLnR4dCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9USFJFQURFRC90ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERUQvdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGZjOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERUQvdGVzdC5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK2luc3RhbGwoRklMRVMgQ01ha2VMaXN0cy50eHQgREVTVElOQVRJT04gZm9vIENPTVBPTkVOVCB0ZXN0KQorCitzZXQoQ1BBQ0tfQVJDSElWRV9USFJFQURTIDIpCisKK2lmKFBBQ0tBR0lOR19UWVBFIFNUUkVRVUFMICJDT01QT05FTlQiKQorICBzZXQoQ1BBQ0tfQ09NUE9ORU5UU19BTEwgdGVzdCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1RIUkVBREVEX0FMTC9FeHBlY3RlZEZpbGVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERURfQUxML0V4cGVjdGVkRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhM2E1ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NQYWNrL3Rlc3RzL1RIUkVBREVEX0FMTC9FeHBlY3RlZEZpbGVzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorc2V0KEVYUEVDVEVEX0ZJTEVTX0NPVU5UICIxIikKK3NldChFWFBFQ1RFRF9GSUxFX0NPTlRFTlRfMV9MSVNUICIvZm9vOy9mb28vQ01ha2VMaXN0cy50eHQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERURfQUxML3Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DUGFjay90ZXN0cy9USFJFQURFRF9BTEwvdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA1MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1BhY2svdGVzdHMvVEhSRUFERURfQUxML3Rlc3QuY21ha2UKQEAgLTAsMCArMSw3IEBACitpbnN0YWxsKEZJTEVTIENNYWtlTGlzdHMudHh0IERFU1RJTkFUSU9OIGZvbyBDT01QT05FTlQgdGVzdCkKKworc2V0KENQQUNLX0FSQ0hJVkVfVEhSRUFEUyAwKQorCitpZihQQUNLQUdJTkdfVFlQRSBTVFJFUVVBTCAiQ09NUE9ORU5UIikKKyAgc2V0KENQQUNLX0NPTVBPTkVOVFNfQUxMIHRlc3QpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUNUZXN0QXJndW1lbnRzLXRlc3QtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUNUZXN0QXJndW1lbnRzLXRlc3QtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwNTk1MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0L0NNYWtlQ1Rlc3RBcmd1bWVudHMtdGVzdC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3NldChsb2cgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9vdXRwdXQtbG9nLnR4dCIpCitpZihOT1QgRVhJU1RTICIke2xvZ30iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlRoZSBleHBlY3RlZCBvdXRwdXQgbG9nIGZpbGUgaXMgbWlzc2luZzpcbiAgJHtsb2d9IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0L0NNYWtlQ1Rlc3RBcmd1bWVudHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUNUZXN0QXJndW1lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjI5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUNUZXN0QXJndW1lbnRzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAoraW5jbHVkZShDVGVzdCkKK2FkZF90ZXN0KE5BTUUgQ01ha2VDVGVzdEFyZ3VtZW50cyBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyBDTWFrZUNUZXN0QXJndW1lbnRzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUxpc3RzLnR4dAppbmRleCA3M2U2YTc4Li5mMWE4M2U4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdC9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBpZihOT1QgTm9Qcm9qZWN0KQogICBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAxMzkyMjQwLi43NjEyMjRhIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3QvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC01LDMgKzUsMTYgQEAKIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKIAogcnVuX2NtYWtlKE5vdE9uKQorCitmdW5jdGlvbihydW5fQ01ha2VDVGVzdEFyZ3VtZW50cykKKyAgcnVuX2NtYWtlX3dpdGhfb3B0aW9ucyhDTWFrZUNUZXN0QXJndW1lbnRzICItRENNQUtFX0NURVNUX0FSR1VNRU5UUz0tLXF1aWV0XFw7LS1vdXRwdXQtbG9nXFw7b3V0cHV0LWxvZy50eHQiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQ01ha2VDVGVzdEFyZ3VtZW50cy1idWlsZCkKKyAgaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIk1ha2V8TmluamEiKQorICAgIHNldCh0ZXN0ICJ0ZXN0IikKKyAgZWxzZSgpCisgICAgc2V0KHRlc3QgIlJVTl9URVNUUyIpCisgIGVuZGlmKCkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoQ01ha2VDVGVzdEFyZ3VtZW50cy10ZXN0ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIERlYnVnIC0tdGFyZ2V0ICIke3Rlc3R9IikKK2VuZGZ1bmN0aW9uKCkKK3J1bl9DTWFrZUNUZXN0QXJndW1lbnRzKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvQ01ha2VMaXN0cy50eHQuaW4gYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL0NNYWtlTGlzdHMudHh0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Mzc4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL0NNYWtlTGlzdHMudHh0LmluCkBAIC0wLDAgKzEsNCBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKK3Byb2plY3QoQ1Rlc3RDb21tYW5kTGluZUBDQVNFX05BTUVAIE5PTkUpCitpbmNsdWRlKENUZXN0KQorYWRkX3Rlc3QoTkFNRSBSdW5DTWFrZVZlcnNpb24gQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLS12ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9NZW1DaGVja1Nhbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvTWVtQ2hlY2tTYW4uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyYzMwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvTWVtQ2hlY2tTYW4uY21ha2UKQEAgLTAsMCArMSw3IEBACitzZXQoTUVNT1JZQ0hFQ0tfQ09NTUFORCAiIikKK2luY2x1ZGUoQ1Rlc3QpCithZGRfdGVzdCgKKyAgTkFNRSBUZXN0U2FuCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQorICAgIC1QICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vLi4vY3Rlc3RfbWVtY2hlY2svdGVzdCR7TUVNT1JZQ0hFQ0tfVFlQRX0uY21ha2UKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA2YjIzMTYyLi5lMDVhZDc5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMSw5ICsxLDMzIEBACiBpbmNsdWRlKFJ1bkNNYWtlKQoraW5jbHVkZShSdW5DVGVzdCkKKwogc2V0KFJ1bkNNYWtlX1RFU1RfVElNRU9VVCA2MCkKIAogdW5zZXQoRU5We0NURVNUX1BBUkFMTEVMX0xFVkVMfSkKIHVuc2V0KEVOVntDVEVTVF9PVVRQVVRfT05fRkFJTFVSRX0pCiAKK3J1bl9jbWFrZV9jb21tYW5kKHJlcGVhdC1vcHQtYmFkMQorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tcmVwZWF0IHVudGlsLXBhc3MKKyAgKQorcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LW9wdC1iYWQyCisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1yZXBlYXQgdW50aWwtcGFzczpmb28KKyAgKQorcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LW9wdC1iYWQzCisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1yZXBlYXQgdW50aWwtZmFpbDoyIC0tcmVwZWF0LXVudGlsLWZhaWwgMgorICApCitydW5fY21ha2VfY29tbWFuZChyZXBlYXQtb3B0LWJhZDQKKyAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtLXJlcGVhdC11bnRpbC1mYWlsIDIgLS1yZXBlYXQgdW50aWwtZmFpbDoyCisgICkKK3J1bl9jbWFrZV9jb21tYW5kKHJlcGVhdC1vcHQtdW50aWwtcGFzcworICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tcmVwZWF0IHVudGlsLXBhc3M6MgorICApCitydW5fY21ha2VfY29tbWFuZChyZXBlYXQtb3B0LXVudGlsLWZhaWwKKyAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtLXJlcGVhdCB1bnRpbC1mYWlsOjIKKyAgKQorcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LW9wdC1hZnRlci10aW1lb3V0CisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1yZXBlYXQgYWZ0ZXItdGltZW91dDoyCisgICkKKwogcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LXVudGlsLWZhaWwtYmFkMQogICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tcmVwZWF0LXVudGlsLWZhaWwKICAgKQpAQCAtMTQsMTkgKzM4LDM5IEBACiAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1yZXBlYXQtdW50aWwtZmFpbCAyCiAgICkKIAorZnVuY3Rpb24ocnVuX3JlcGVhdF91bnRpbF9wYXNzX3Rlc3RzKQorICAjIFVzZSBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciBhIGZldyB0ZXN0cyB3aXRob3V0IGNsZWFuaW5nLgorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vcmVwZWF0LXVudGlsLXBhc3MtYnVpbGQpCisgIHJ1bl9jbWFrZShyZXBlYXQtdW50aWwtcGFzcy1jbWFrZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQocmVwZWF0LXVudGlsLXBhc3MtY3Rlc3QKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DIERlYnVnIC0tcmVwZWF0IHVudGlsLXBhc3M6MworICAgICkKK2VuZGZ1bmN0aW9uKCkKK3J1bl9yZXBlYXRfdW50aWxfcGFzc190ZXN0cygpCisKK2Z1bmN0aW9uKHJ1bl9yZXBlYXRfYWZ0ZXJfdGltZW91dF90ZXN0cykKKyAgIyBVc2UgYSBzaW5nbGUgYnVpbGQgdHJlZSBmb3IgYSBmZXcgdGVzdHMgd2l0aG91dCBjbGVhbmluZy4KKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L3JlcGVhdC1hZnRlci10aW1lb3V0LWJ1aWxkKQorICBydW5fY21ha2UocmVwZWF0LWFmdGVyLXRpbWVvdXQtY21ha2UpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHJ1bl9jbWFrZV9jb21tYW5kKHJlcGVhdC1hZnRlci10aW1lb3V0LWN0ZXN0CisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBEZWJ1ZyAtLXJlcGVhdCBhZnRlci10aW1lb3V0OjMKKyAgICApCitlbmRmdW5jdGlvbigpCitydW5fcmVwZWF0X2FmdGVyX3RpbWVvdXRfdGVzdHMoKQorCiBmdW5jdGlvbihydW5fcmVwZWF0X3VudGlsX2ZhaWxfdGVzdHMpCiAgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCiAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9yZXBlYXQtdW50aWwtZmFpbC1idWlsZCkKLSAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKLSAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKLSAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKLQogICBydW5fY21ha2UocmVwZWF0LXVudGlsLWZhaWwtY21ha2UpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCiAgIHJ1bl9jbWFrZV9jb21tYW5kKHJlcGVhdC11bnRpbC1mYWlsLWN0ZXN0Ci0gICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBEZWJ1ZyAtLXJlcGVhdC11bnRpbC1mYWlsIDMKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DIERlYnVnICR7QVJHTn0KICAgICApCiBlbmRmdW5jdGlvbigpCi1ydW5fcmVwZWF0X3VudGlsX2ZhaWxfdGVzdHMoKQorcnVuX3JlcGVhdF91bnRpbF9mYWlsX3Rlc3RzKC0tcmVwZWF0LXVudGlsLWZhaWwgMykKK3J1bl9yZXBlYXRfdW50aWxfZmFpbF90ZXN0cygtLXJlcGVhdCB1bnRpbC1mYWlsOjMpCiAKIGZ1bmN0aW9uKHJ1bl9CYWRDVGVzdFRlc3RmaWxlKQogICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQmFkQ1Rlc3RUZXN0ZmlsZSkKQEAgLTE5OCw2ICsyNDIsMjAgQEAKIGVuZGZ1bmN0aW9uKCkKIHJ1bl9UZXN0T3V0cHV0U2l6ZSgpCiAKKyMgVGVzdCAtLXN0b3Atb24tZmFpbHVyZQorZnVuY3Rpb24ocnVuX3N0b3Bfb25fZmFpbHVyZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L3N0b3Atb24tZmFpbHVyZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgZmlsZShXUklURSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NUZXN0VGVzdGZpbGUuY21ha2UiICIKK2FkZF90ZXN0KHRlc3QxIFwiJHtDTUFLRV9DT01NQU5EfVwiIC1FIGZhbHNlKQorYWRkX3Rlc3QodGVzdDIgXCIke0NNQUtFX0NPTU1BTkR9XCIgLUUgZWNobyBcIm5vdCBydW5uaW5nXCIpCisiKQorICBydW5fY21ha2VfY29tbWFuZChzdG9wLW9uLWZhaWx1cmUgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtLXN0b3Atb24tZmFpbHVyZSkKK2VuZGZ1bmN0aW9uKCkKK3J1bl9zdG9wX29uX2ZhaWx1cmUoKQorCiBmdW5jdGlvbihydW5fVGVzdEFmZmluaXR5KQogICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vVGVzdEFmZmluaXR5KQogICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQpAQCAtMjY5LDMgKzMyNyw1NiBAQAogICBydW5fY21ha2VfY29tbWFuZChzaG93LW9ubHlfanNvbi12MSAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tc2hvdy1vbmx5PWpzb24tdjEpCiBlbmRmdW5jdGlvbigpCiBydW5fU2hvd09ubHkoKQorCitmdW5jdGlvbihydW5fTm9UZXN0cykKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L05vVGVzdHMpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIGZpbGUoV1JJVEUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DVGVzdFRlc3RmaWxlLmNtYWtlIiAiIikKKyAgcnVuX2NtYWtlX2NvbW1hbmQobm8tdGVzdHNfaWdub3JlICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1uby10ZXN0cz1pZ25vcmUpCisgIHJ1bl9jbWFrZV9jb21tYW5kKG5vLXRlc3RzX2Vycm9yICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1uby10ZXN0cz1lcnJvcikKKyAgcnVuX2NtYWtlX2NvbW1hbmQobm8tdGVzdHNfYmFkICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1uby10ZXN0cz1iYWQpCisgIHJ1bl9jbWFrZV9jb21tYW5kKG5vLXRlc3RzX2xlZ2FjeSAke0NNQUtFX0NURVNUX0NPTU1BTkR9KQorICBmaWxlKFdSSVRFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vTm9UZXN0c1NjcmlwdC5jbWFrZSIgIgorICAgIHNldChDVEVTVF9DT01NQU5EIFwiJHtDTUFLRV9DVEVTVF9DT01NQU5EfVwiKQorICAgIHNldChDVEVTVF9TT1VSQ0VfRElSRUNUT1JZIFwiJHtSdW5DTWFrZV9TT1VSQ0VfRElSfVwiKQorICAgIHNldChDVEVTVF9CSU5BUllfRElSRUNUT1JZIFwiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9XCIpCisgICAgY3Rlc3Rfc3RhcnQoRXhwZXJpbWVudGFsKQorICAgIGN0ZXN0X3Rlc3QoKQorIikKKyAgcnVuX2NtYWtlX2NvbW1hbmQoCisgICAgbm8tdGVzdHMtc2NyaXB0X2lnbm9yZSAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC0tbm8tdGVzdHM9aWdub3JlCisgICAgLVMgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9Ob1Rlc3RzU2NyaXB0LmNtYWtlIikKKyAgcnVuX2NtYWtlX2NvbW1hbmQoCisgICAgbm8tdGVzdHMtc2NyaXB0X2Vycm9yICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLS1uby10ZXN0cz1lcnJvcgorICAgIC1TICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vTm9UZXN0c1NjcmlwdC5jbWFrZSIpCisgIHJ1bl9jbWFrZV9jb21tYW5kKAorICAgIG5vLXRlc3RzLXNjcmlwdF9sZWdhY3kgJHtDTUFLRV9DVEVTVF9DT01NQU5EfQorICAgIC1TICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vTm9UZXN0c1NjcmlwdC5jbWFrZSIpCitlbmRmdW5jdGlvbigpCitydW5fTm9UZXN0cygpCisKKyMgQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdHlwZSB2YXJpYWJsZSBpcyBwYXNzZWQKK3J1bl9jdGVzdChjaGVjay1jb25maWd1cmF0aW9uLXR5cGUpCisKK2Z1bmN0aW9uKHJ1bl9NZW1DaGVja1NhbiBjYXNlIG9wdHMpCisgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9NZW1DaGVja1NhbiR7Y2FzZX0tYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMKKyAgICAiLURNRU1PUllDSEVDS19UWVBFPSR7Y2FzZX1TYW5pdGl6ZXIiCisgICAgIi1ETUVNT1JZQ0hFQ0tfU0FOSVRJWkVSX09QVElPTlM9JHtvcHRzfSIKKyAgICApCisgIHJ1bl9jbWFrZShNZW1DaGVja1NhbikKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBzZXQoUnVuQ01ha2Utc3Rkb3V0LWZpbGUgIi4uL2N0ZXN0X21lbWNoZWNrL0R1bW15JHtjYXNlfVNhbml0aXplci1zdGRvdXQudHh0IikKKyAgcnVuX2NtYWtlX2NvbW1hbmQoTWVtQ2hlY2tTYW4ke2Nhc2V9LWN0ZXN0CisgICAgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtQyBEZWJ1ZyAtTSBFeHBlcmltZW50YWwgLVQgTWVtQ2hlY2sgLVYKKyAgICApCitlbmRmdW5jdGlvbigpCitydW5fTWVtQ2hlY2tTYW4oQWRkcmVzcyAic2ltdWxhdGVfc2FuaXRpemVyPTE6cmVwb3J0X2J1Z3M9MTpoaXN0b3J5X3NpemU9NTpleGl0Y29kZT01NSIpCitydW5fTWVtQ2hlY2tTYW4oTGVhayAic2ltdWxhdGVfc2FuaXRpemVyPTE6cmVwb3J0X2J1Z3M9MTpoaXN0b3J5X3NpemU9NTpleGl0Y29kZT01NSIpCitydW5fTWVtQ2hlY2tTYW4oTWVtb3J5ICJzaW11bGF0ZV9zYW5pdGl6ZXI9MTpyZXBvcnRfYnVncz0xOmhpc3Rvcnlfc2l6ZT01OmV4aXRjb2RlPTU1IikKK3J1bl9NZW1DaGVja1NhbihUaHJlYWQgInJlcG9ydF9idWdzPTE6aGlzdG9yeV9zaXplPTU6ZXhpdGNvZGU9NTUiKQorcnVuX01lbUNoZWNrU2FuKFVuZGVmaW5lZEJlaGF2aW9yICJzaW11bGF0ZV9zYW5pdGl6ZXI9MSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL2NoZWNrLWNvbmZpZ3VyYXRpb24tdHlwZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9jaGVjay1jb25maWd1cmF0aW9uLXR5cGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmMxYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9jaGVjay1jb25maWd1cmF0aW9uLXR5cGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NvbW1hbmQgbGluZSBDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEU9RGVidWcKK3NldCBDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEU9UmVsZWFzZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0cy1zY3JpcHRfZXJyb3ItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHMtc2NyaXB0X2Vycm9yLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHMtc2NyaXB0X2Vycm9yLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorKC0xfDI1NSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHMtc2NyaXB0X2Vycm9yLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzLXNjcmlwdF9lcnJvci1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzRiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzLXNjcmlwdF9lcnJvci1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15ObyB0ZXN0cyB3ZXJlIGZvdW5kISEhJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0cy1zY3JpcHRfbGVnYWN5LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzLXNjcmlwdF9sZWdhY3ktcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0cy1zY3JpcHRfbGVnYWN5LXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorKC0xfDI1NSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHMtc2NyaXB0X2xlZ2FjeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0cy1zY3JpcHRfbGVnYWN5LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjNGIxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHMtc2NyaXB0X2xlZ2FjeS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15ObyB0ZXN0cyB3ZXJlIGZvdW5kISEhJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9uYW1lLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2JhZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9uYW1lLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2JhZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2JhZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0c19iYWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzAzNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0c19iYWQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6ICctLW5vLXRlc3RzPScgZ2l2ZW4gdW5rbm93biB2YWx1ZSAnYmFkJyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHNfZXJyb3ItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHNfZXJyb3ItcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE0ZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0c19lcnJvci1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzgKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHNfZXJyb3Itc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHNfZXJyb3Itc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWZiYTFjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9uby10ZXN0c19lcnJvci1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK05vIHRlc3RzIHdlcmUgZm91bmQhISEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvbm8tdGVzdHNfbGVnYWN5LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2xlZ2FjeS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzRiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL25vLXRlc3RzX2xlZ2FjeS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15ObyB0ZXN0cyB3ZXJlIGZvdW5kISEhJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtYWZ0ZXItdGltZW91dC1jbWFrZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LWFmdGVyLXRpbWVvdXQtY21ha2UuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczYzBiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LWFmdGVyLXRpbWVvdXQtY21ha2UuY21ha2UKQEAgLTAsMCArMSwxNSBAQAorZW5hYmxlX3Rlc3RpbmcoKQorCitzZXQoVEVTVF9PVVRQVVRfRklMRSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Rlc3Rfb3V0cHV0LnR4dCIpCithZGRfdGVzdChOQU1FIGluaXRpYWxpemF0aW9uCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQorICAiLURURVNUX09VVFBVVF9GSUxFPSR7VEVTVF9PVVRQVVRfRklMRX0iCisgIC1QICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vaW5pdC5jbWFrZSIpCithZGRfdGVzdChOQU1FIHRlc3QxCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfQorICAiLURURVNUX09VVFBVVF9GSUxFPSR7VEVTVF9PVVRQVVRfRklMRX0iCisgIC1QICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGVzdDEtdGltZW91dC5jbWFrZSIpCitzZXRfdGVzdHNfcHJvcGVydGllcyh0ZXN0MSBQUk9QRVJUSUVTIERFUEVORFMgImluaXRpYWxpemF0aW9uIiBUSU1FT1VUIDUpCisKK2FkZF90ZXN0KGhlbGxvICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyBoZWxsbykKK2FkZF90ZXN0KGdvb2RieWUgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvIGdvb2RieWUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1hZnRlci10aW1lb3V0LWN0ZXN0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1hZnRlci10aW1lb3V0LWN0ZXN0LXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhNTQ4NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LWFmdGVyLXRpbWVvdXQtY3Rlc3Qtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDE1IEBACiteVGVzdCBwcm9qZWN0IC4qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LWFmdGVyLXRpbWVvdXQtYnVpbGQKKyAgICBTdGFydCAxOiBpbml0aWFsaXphdGlvbgorMS80IFRlc3QgIzE6IGluaXRpYWxpemF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4gICBQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgU3RhcnQgMjogdGVzdDEKKzIvNCBUZXN0ICMyOiB0ZXN0MSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXCpcKlwqVGltZW91dCArWzAtOS5dKyBzZWMKKyAgICBTdGFydCAyOiB0ZXN0MQorICAgIFRlc3QgIzI6IHRlc3QxIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICBQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgU3RhcnQgMzogaGVsbG8KKzMvNCBUZXN0ICMzOiBoZWxsbyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgUGFzc2VkICtbMC05Ll0rIHNlYworICAgIFN0YXJ0IDQ6IGdvb2RieWUKKzQvNCBUZXN0ICM0OiBnb29kYnllIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgUGFzc2VkICtbMC05Ll0rIHNlYworCisxMDAlIHRlc3RzIHBhc3NlZCwgMCB0ZXN0cyBmYWlsZWQgb3V0IG9mIDQKKworVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gK1swLTkuXSsgc2VjJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWFmdGVyLXRpbWVvdXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1hZnRlci10aW1lb3V0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjNGIxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1hZnRlci10aW1lb3V0LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXk5vIHRlc3RzIHdlcmUgZm91bmQhISEkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDEtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDEtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmYzMjQxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDEtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6ICctLXJlcGVhdCcgZ2l2ZW4gaW52YWxpZCB2YWx1ZSAndW50aWwtcGFzcyckCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtYmFkMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjlmMzJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDItc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6ICctLXJlcGVhdCcgZ2l2ZW4gaW52YWxpZCB2YWx1ZSAndW50aWwtcGFzczpmb28nJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0ZTExYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQzLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkNNYWtlIEVycm9yOiBBdCBtb3N0IG9uZSAnLS1yZXBlYXQnIG9wdGlvbiBtYXkgYmUgdXNlZFwuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQ0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LWJhZDQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQ0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0ZTExYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC1iYWQ0LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkNNYWtlIEVycm9yOiBBdCBtb3N0IG9uZSAnLS1yZXBlYXQnIG9wdGlvbiBtYXkgYmUgdXNlZFwuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LXVudGlsLWZhaWwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC11bnRpbC1mYWlsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjNGIxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LW9wdC11bnRpbC1mYWlsLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXk5vIHRlc3RzIHdlcmUgZm91bmQhISEkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC1vcHQtdW50aWwtcGFzcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LXVudGlsLXBhc3Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2M0YjExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9yZXBlYXQtb3B0LXVudGlsLXBhc3Mtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteTm8gdGVzdHMgd2VyZSBmb3VuZCEhISQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LXVudGlsLXBhc3MtY21ha2UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC11bnRpbC1wYXNzLWNtYWtlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMDk1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC11bnRpbC1wYXNzLWNtYWtlLmNtYWtlCkBAIC0wLDAgKzEsMTUgQEAKK2VuYWJsZV90ZXN0aW5nKCkKKworc2V0KFRFU1RfT1VUUFVUX0ZJTEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90ZXN0X291dHB1dC50eHQiKQorYWRkX3Rlc3QoTkFNRSBpbml0aWFsaXphdGlvbgorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0KKyAgIi1EVEVTVF9PVVRQVVRfRklMRT0ke1RFU1RfT1VUUFVUX0ZJTEV9IgorICAtUCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2luaXQuY21ha2UiKQorYWRkX3Rlc3QoTkFNRSB0ZXN0MQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0KKyAgIi1EVEVTVF9PVVRQVVRfRklMRT0ke1RFU1RfT1VUUFVUX0ZJTEV9IgorICAtUCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3Rlc3QxLXBhc3MuY21ha2UiKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXModGVzdDEgUFJPUEVSVElFUyBERVBFTkRTICJpbml0aWFsaXphdGlvbiIpCisKK2FkZF90ZXN0KGhlbGxvICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyBoZWxsbykKK2FkZF90ZXN0KGdvb2RieWUgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvIGdvb2RieWUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC11bnRpbC1wYXNzLWN0ZXN0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3JlcGVhdC11bnRpbC1wYXNzLWN0ZXN0LXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0NWRjMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LXVudGlsLXBhc3MtY3Rlc3Qtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDE1IEBACiteVGVzdCBwcm9qZWN0IC4qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvcmVwZWF0LXVudGlsLXBhc3MtYnVpbGQKKyAgICBTdGFydCAxOiBpbml0aWFsaXphdGlvbgorMS80IFRlc3QgIzE6IGluaXRpYWxpemF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4gICBQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgU3RhcnQgMjogdGVzdDEKKzIvNCBUZXN0ICMyOiB0ZXN0MSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXCpcKlwqRmFpbGVkICtbMC05Ll0rIHNlYworICAgIFN0YXJ0IDI6IHRlc3QxCisgICAgVGVzdCAjMjogdGVzdDEgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIFBhc3NlZCArWzAtOS5dKyBzZWMKKyAgICBTdGFydCAzOiBoZWxsbworMy80IFRlc3QgIzM6IGhlbGxvIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICBQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgU3RhcnQgNDogZ29vZGJ5ZQorNC80IFRlc3QgIzQ6IGdvb2RieWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICBQYXNzZWQgK1swLTkuXSsgc2VjCisKKzEwMCUgdGVzdHMgcGFzc2VkLCAwIHRlc3RzIGZhaWxlZCBvdXQgb2YgNAorCitUb3RhbCBUZXN0IHRpbWUgXChyZWFsXCkgPSArWzAtOS5dKyBzZWMkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3N0b3Atb24tZmFpbHVyZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE0ZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACis4CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3N0b3Atb24tZmFpbHVyZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQyMzVkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitFcnJvcnMgd2hpbGUgcnVubmluZyBDVGVzdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS9zdG9wLW9uLWZhaWx1cmUtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvc3RvcC1vbi1mYWlsdXJlLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjNzdkMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvc3RvcC1vbi1mYWlsdXJlLXN0ZG91dC50eHQKQEAgLTAsMCArMSwxMCBAQAorXlRlc3QgcHJvamVjdCAuKi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3N0b3Atb24tZmFpbHVyZQorICAgIFN0YXJ0IDE6IHRlc3QxCisxLzIgVGVzdCAjMTogdGVzdDEgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlwqXCpcKkZhaWxlZCArWzAtOS5dKyBzZWMKKysKKzAlIHRlc3RzIHBhc3NlZCwgMSB0ZXN0cyBmYWlsZWQgb3V0IG9mIDEKKysKK1RvdGFsIFRlc3QgdGltZSBcKHJlYWxcKSA9ICtbMC05Ll0rIHNlYworKworVGhlIGZvbGxvd2luZyB0ZXN0cyBGQUlMRUQ6CitbCSBdKzEgLSB0ZXN0MSBcKEZhaWxlZFwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS90ZXN0LmNtYWtlLmluIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS90ZXN0LmNtYWtlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Mjk2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3Rlc3QuY21ha2UuaW4KQEAgLTAsMCArMSwxOSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKworc2V0KENURVNUX1NJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0LXNpdGUiKQorc2V0KENURVNUX0JVSUxEX05BTUUgICAgICAgICAgICAgICAgICAgICJ0ZXN0LWJ1aWxkLW5hbWUiKQorc2V0KENURVNUX1NPVVJDRV9ESVJFQ1RPUlkgICAgICAgICAgICAgICJAUnVuQ01ha2VfQklOQVJZX0RJUkAvQENBU0VfTkFNRUAiKQorc2V0KENURVNUX0JJTkFSWV9ESVJFQ1RPUlkgICAgICAgICAgICAgICJAUnVuQ01ha2VfQklOQVJZX0RJUkAvQENBU0VfTkFNRUAtYnVpbGQiKQorc2V0KENURVNUX0NNQUtFX0dFTkVSQVRPUiAgICAgICAgICAgICAgICJAUnVuQ01ha2VfR0VORVJBVE9SQCIpCitzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SX1BMQVRGT1JNICAgICAgIkBSdW5DTWFrZV9HRU5FUkFUT1JfUExBVEZPUk1AIikKK3NldChDVEVTVF9DTUFLRV9HRU5FUkFUT1JfVE9PTFNFVCAgICAgICAiQFJ1bkNNYWtlX0dFTkVSQVRPUl9UT09MU0VUQCIpCitzZXQoQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FICAgICAgICAgICAgIjAxOjAwOjAwIFVUQyIpCitzZXQoQ1RFU1RfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAgIkBDTUFLRV9DVEVTVF9DT01NQU5EQCIpCisKK2lmKCJAQ0FTRV9OQU1FQCIgTUFUQ0hFUyAiXmNoZWNrLWNvbmZpZ3VyYXRpb24tdHlwZSIpCisgIG1lc3NhZ2UoIkNvbW1hbmQgbGluZSBDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEU9IiAke0NURVNUX0NPTkZJR1VSQVRJT05fVFlQRX0pCisgIHNldChDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEUgIlJlbGVhc2UiKQorICBtZXNzYWdlKCJzZXQgQ1RFU1RfQ09ORklHVVJBVElPTl9UWVBFPSIgJHtDVEVTVF9DT05GSUdVUkFUSU9OX1RZUEV9KQorCisgIGN0ZXN0X3N0YXJ0KEV4cGVyaW1lbnRhbCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvdGVzdDEtcGFzcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0Q29tbWFuZExpbmUvdGVzdDEtcGFzcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE4ZGVhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS90ZXN0MS1wYXNzLmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKKyMgVGhpcyBpcyBydW4gYnkgdGVzdCB0ZXN0MSBpbiByZXBlYXQtdW50aWwtcGFzcy1jbWFrZS5jbWFrZSB3aXRoIGNtYWtlIC1QLgorIyBJdCByZWFkcyB0aGUgZmlsZSBURVNUX09VVFBVVF9GSUxFIGFuZCBpbmNyZW1lbnRzIHRoZSBudW1iZXIKKyMgZm91bmQgaW4gdGhlIGZpbGUgYnkgMS4gIFVubGVzcyB0aGUgbnVtYmVyIGlzIDIsIHRoZW4gdGhlCisjIGNvZGUgc2VuZHMgb3V0IGEgY21ha2UgZXJyb3IgY2F1c2luZyB0aGUgdGVzdCB0byBwYXNzIG9ubHkgb24KKyMgdGhlIHNlY29uZCB0aW1lIGl0IGlzIHJ1bi4KK21lc3NhZ2UoIlRFU1RfT1VUUFVUX0ZJTEUgPSAke1RFU1RfT1VUUFVUX0ZJTEV9IikKK2ZpbGUoUkVBRCAiJHtURVNUX09VVFBVVF9GSUxFfSIgQ09VTlQpCittZXNzYWdlKCJDT1VOVD0gJHtDT1VOVH0iKQorbWF0aChFWFBSIENPVU5UICIke0NPVU5UfSArIDEiKQorZmlsZShXUklURSAiJHtURVNUX09VVFBVVF9GSUxFfSIgIiR7Q09VTlR9IikKK2lmKE5PVCBDT1VOVCBFUVVBTCAyKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJ0aGlzIHRlc3QgcGFzc2VzIG9ubHkgb24gdGhlIDJuZCBydW4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS90ZXN0MS10aW1lb3V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RDb21tYW5kTGluZS90ZXN0MS10aW1lb3V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjJjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdENvbW1hbmRMaW5lL3Rlc3QxLXRpbWVvdXQuY21ha2UKQEAgLTAsMCArMSwxNCBAQAorIyBUaGlzIGlzIHJ1biBieSB0ZXN0IHRlc3QxIGluIHJlcGVhdC1hZnRlci10aW1lb3V0LWNtYWtlLmNtYWtlIHdpdGggY21ha2UgLVAuCisjIEl0IHJlYWRzIHRoZSBmaWxlIFRFU1RfT1VUUFVUX0ZJTEUgYW5kIGluY3JlbWVudHMgdGhlIG51bWJlcgorIyBmb3VuZCBpbiB0aGUgZmlsZSBieSAxLiAgVW5sZXNzIHRoZSBudW1iZXIgaXMgMiwgdGhlbiB0aGUKKyMgY29kZSBzZW5kcyBvdXQgYSBjbWFrZSBlcnJvciBjYXVzaW5nIHRoZSB0ZXN0IHRvIG5vdCB0aW1lb3V0IG9ubHkgb24KKyMgdGhlIHNlY29uZCB0aW1lIGl0IGlzIHJ1bi4KK21lc3NhZ2UoIlRFU1RfT1VUUFVUX0ZJTEUgPSAke1RFU1RfT1VUUFVUX0ZJTEV9IikKK2ZpbGUoUkVBRCAiJHtURVNUX09VVFBVVF9GSUxFfSIgQ09VTlQpCittZXNzYWdlKCJDT1VOVD0gJHtDT1VOVH0iKQorbWF0aChFWFBSIENPVU5UICIke0NPVU5UfSArIDEiKQorZmlsZShXUklURSAiJHtURVNUX09VVFBVVF9GSUxFfSIgIiR7Q09VTlR9IikKK2lmKE5PVCBDT1VOVCBFUVVBTCAyKQorICBtZXNzYWdlKCJ0aGlzIHRlc3QgdGltZXMgb3V0IGV4Y2VwdCBvbiB0aGUgMm5kIHJ1biIpCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgc2xlZXAgMTApCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9SZXNvdXJjZUNvbW1vbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL1Jlc291cmNlQ29tbW9uLmNtYWtlCmluZGV4IDdkNjMyOTkuLmVmNzlkY2UgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL1Jlc291cmNlQ29tbW9uLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL1Jlc291cmNlQ29tbW9uLmNtYWtlCkBAIC0xLDYgKzEsNiBAQAogZnVuY3Rpb24oc2V0dXBfcmVzb3VyY2VfdGVzdHMpCiAgIGlmKENURVNUX1JFU09VUkNFX0FMTE9DX0VOQUJMRUQpCi0gICAgYWRkX3Rlc3QoTkFNRSBSZXNvdXJjZVNldHVwIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIHJlbW92ZSAtZiAiJHtDTUFLRV9CSU5BUllfRElSfS9jdHJlc2FsbG9jLmxvZyIpCisgICAgYWRkX3Rlc3QoTkFNRSBSZXNvdXJjZVNldHVwIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1FIHJtIC1mICIke0NNQUtFX0JJTkFSWV9ESVJ9L2N0cmVzYWxsb2MubG9nIikKICAgZW5kaWYoKQogZW5kZnVuY3Rpb24oKQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggODU4NDc4Ni4uZjVmMDY5OSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMzgsNiArMzgsMTMgQEAKICAgcnVuX2NtYWtlX2NvbW1hbmQoJHtuYW1lfSAiJHtDVFJFU0FMTE9DX0NPTU1BTkR9IiB2ZXJpZnkgIiR7UnVuQ01ha2VfU09VUkNFX0RJUn0vJHtuYW1lfS5sb2ciICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3Jlc3NwZWMuanNvbiIgIiR7dGVzdHN9IikKIGVuZGZ1bmN0aW9uKCkKIAorZnVuY3Rpb24ocmVhZF90ZXN0aW5nX2ZpbGUgZmlsZW5hbWUgdmFyaWFibGUpCisgIGZpbGUoUkVBRCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L1Rlc3RpbmcvVEFHIiBfdGFnKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXihbXlxuXSopXG4uKiQiICJcXDEiIF9kYXRlICIke190YWd9IikKKyAgZmlsZShSRUFEICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vVGVzdGluZy8ke19kYXRlfS8ke2ZpbGVuYW1lfSIgX2NvbnRlbnRzKQorICBzZXQoIiR7dmFyaWFibGV9IiAiJHtfY29udGVudHN9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKIHVuc2V0KEVOVntDVEVTVF9SRVNPVVJDRV9HUk9VUF9DT1VOVH0pCiBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQogZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9jdHJlc2FsbG9jLXdyaXRlLXByb2MtZ29vZDEtYnVpbGQiKQpAQCAtMTQwLDkgKzE0NywxNCBAQAogIyBOb3cgdGVzdCB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBmZWF0dXJlIG9mIENUZXN0CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLWZ1bmN0aW9uKHJ1bl9jdGVzdF9yZXNvdXJjZSBuYW1lIHBhcmFsbGVsIHJhbmRvbSkKLSAgcnVuX2N0ZXN0KCIke25hbWV9LWN0ZXN0LXMtcmVzIiAiLURDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEPTEiICItRENUUkVTQUxMT0NfQ09NTUFORD0ke0NUUkVTQUxMT0NfQ09NTUFORH0iICItRENURVNUX1BBUkFMTEVMPSR7cGFyYWxsZWx9IiAiLURDVEVTVF9SQU5ET009JHtyYW5kb219IikKLSAgcnVuX2N0ZXN0KCIke25hbWV9LWN0ZXN0LXMtbm9yZXMiICItRENURVNUX1JFU09VUkNFX0FMTE9DX0VOQUJMRUQ9MCIgIi1EQ1RSRVNBTExPQ19DT01NQU5EPSR7Q1RSRVNBTExPQ19DT01NQU5EfSIgIi1EQ1RFU1RfUEFSQUxMRUw9JHtwYXJhbGxlbH0iICItRENURVNUX1JBTkRPTT0ke3JhbmRvbX0iKQorZnVuY3Rpb24ocnVuX2N0ZXN0X3Jlc291cmNlIG5hbWUgcGFyYWxsZWwgcmFuZG9tIGV4dHJhKQorICBydW5fY3Rlc3QoIiR7bmFtZX0tY3Rlc3Qtcy1yZXMiICItRENURVNUX1JFU09VUkNFX0FMTE9DX0VOQUJMRUQ9MSIgIi1EQ1RFU1RfUkVTT1VSQ0VfU1BFQ19TT1VSQ0U9QVJHIiAiLURDVFJFU0FMTE9DX0NPTU1BTkQ9JHtDVFJFU0FMTE9DX0NPTU1BTkR9IiAiLURDVEVTVF9QQVJBTExFTD0ke3BhcmFsbGVsfSIgIi1EQ1RFU1RfUkFORE9NPSR7cmFuZG9tfSIpCisgIHJ1bl9jdGVzdCgiJHtuYW1lfS1jdGVzdC1zLW5vcmVzIiAiLURDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEPTAiICItRENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFPU5PTkUiICItRENUUkVTQUxMT0NfQ09NTUFORD0ke0NUUkVTQUxMT0NfQ09NTUFORH0iICItRENURVNUX1BBUkFMTEVMPSR7cGFyYWxsZWx9IiAiLURDVEVTVF9SQU5ET009JHtyYW5kb219IikKKyAgaWYoZXh0cmEpCisgICAgcnVuX2N0ZXN0KCIke25hbWV9LWN0ZXN0LXMtcmVzLXZhcmlhYmxlIiAiLURDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEPTEiICItRENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFPVZBUklBQkxFIiAiLURDVFJFU0FMTE9DX0NPTU1BTkQ9JHtDVFJFU0FMTE9DX0NPTU1BTkR9IiAiLURDVEVTVF9QQVJBTExFTD0ke3BhcmFsbGVsfSIgIi1EQ1RFU1RfUkFORE9NPSR7cmFuZG9tfSIpCisgICAgcnVuX2N0ZXN0KCIke25hbWV9LWN0ZXN0LXMtcmVzLWNhY2hlIiAiLURDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEPTEiICItRENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFPUNBQ0hFIiAiLURDVFJFU0FMTE9DX0NPTU1BTkQ9JHtDVFJFU0FMTE9DX0NPTU1BTkR9IiAiLURDVEVTVF9QQVJBTExFTD0ke3BhcmFsbGVsfSIgIi1EQ1RFU1RfUkFORE9NPSR7cmFuZG9tfSIpCisgICAgcnVuX2N0ZXN0KCIke25hbWV9LWN0ZXN0LXMtcmVzLWNtZGxpbmUiICItRENURVNUX1JFU09VUkNFX0FMTE9DX0VOQUJMRUQ9MSIgIi1EQ1RFU1RfUkVTT1VSQ0VfU1BFQ19TT1VSQ0U9Q01ETElORSIgIi1EQ1RSRVNBTExPQ19DT01NQU5EPSR7Q1RSRVNBTExPQ19DT01NQU5EfSIgIi1EQ1RFU1RfUEFSQUxMRUw9JHtwYXJhbGxlbH0iICItRENURVNUX1JBTkRPTT0ke3JhbmRvbX0iIC0tcmVzb3VyY2Utc3BlYy1maWxlICIke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L3Jlc3NwZWMuanNvbiIpCisgIGVuZGlmKCkKIGVuZGZ1bmN0aW9uKCkKIAogZnVuY3Rpb24odmVyaWZ5X2N0ZXN0X3Jlc291cmNlcykKQEAgLTE1NSwxNSArMTY3LDE1IEBACiAgIGVuZGlmKCkKIGVuZGZ1bmN0aW9uKCkKIAotcnVuX2N0ZXN0X3Jlc291cmNlKGxvdHNvZnRlc3RzIDEwIDEpCi1ydW5fY3Rlc3RfcmVzb3VyY2UoY2hlY2tmcmVlMSAyIDApCi1ydW5fY3Rlc3RfcmVzb3VyY2UoY2hlY2tmcmVlMiAxIDApCi1ydW5fY3Rlc3RfcmVzb3VyY2Uobm90ZW5vdWdoMSAxIDApCi1ydW5fY3Rlc3RfcmVzb3VyY2Uobm90ZW5vdWdoMiAxIDApCi1ydW5fY3Rlc3RfcmVzb3VyY2Uobm90ZW5vdWdoMyAxIDApCi1ydW5fY3Rlc3RfcmVzb3VyY2UoY29tYmluZSAxIDApCi1ydW5fY3Rlc3RfcmVzb3VyY2UoZW5zdXJlX3BhcmFsbGVsIDIgMCkKK3J1bl9jdGVzdF9yZXNvdXJjZShsb3Rzb2Z0ZXN0cyAxMCAxIDApCitydW5fY3Rlc3RfcmVzb3VyY2UoY2hlY2tmcmVlMSAyIDAgMSkKK3J1bl9jdGVzdF9yZXNvdXJjZShjaGVja2ZyZWUyIDEgMCAwKQorcnVuX2N0ZXN0X3Jlc291cmNlKG5vdGVub3VnaDEgMSAwIDEpCitydW5fY3Rlc3RfcmVzb3VyY2Uobm90ZW5vdWdoMiAxIDAgMCkKK3J1bl9jdGVzdF9yZXNvdXJjZShub3Rlbm91Z2gzIDEgMCAwKQorcnVuX2N0ZXN0X3Jlc291cmNlKGNvbWJpbmUgMSAwIDApCitydW5fY3Rlc3RfcmVzb3VyY2UoZW5zdXJlX3BhcmFsbGVsIDIgMCAwKQogCiBzZXQoRU5We0NURVNUX1JFU09VUkNFX0dST1VQX0NPVU5UfSAyKQotcnVuX2N0ZXN0X3Jlc291cmNlKHByb2Nlc3NfY291bnQgMSAwKQorcnVuX2N0ZXN0X3Jlc291cmNlKHByb2Nlc3NfY291bnQgMSAwIDApCiB1bnNldChFTlZ7Q1RFU1RfUkVTT1VSQ0VfR1JPVVBfQ09VTlR9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vY2hlY2tmcmVlMS1jdGVzdC1zLXJlcy1jYWNoZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL2NoZWNrZnJlZTEtY3Rlc3Qtcy1yZXMtY2FjaGUtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkYTcyZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL2NoZWNrZnJlZTEtY3Rlc3Qtcy1yZXMtY2FjaGUtY2hlY2suY21ha2UKQEAgLTAsMCArMSBAQAordmVyaWZ5X2N0ZXN0X3Jlc291cmNlcygpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jaGVja2ZyZWUxLWN0ZXN0LXMtcmVzLWNtZGxpbmUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jaGVja2ZyZWUxLWN0ZXN0LXMtcmVzLWNtZGxpbmUtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkYTcyZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL2NoZWNrZnJlZTEtY3Rlc3Qtcy1yZXMtY21kbGluZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxIEBACit2ZXJpZnlfY3Rlc3RfcmVzb3VyY2VzKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL2NoZWNrZnJlZTEtY3Rlc3Qtcy1yZXMtdmFyaWFibGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jaGVja2ZyZWUxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGE3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jaGVja2ZyZWUxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEgQEAKK3ZlcmlmeV9jdGVzdF9yZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vY3RyZXNhbGxvYy5jeHggYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jdHJlc2FsbG9jLmN4eAppbmRleCA4MGRiMDVlLi5kYWY4YTJkIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jdHJlc2FsbG9jLmN4eAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9jdHJlc2FsbG9jLmN4eApAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGNocm9ubz4KLSNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIElXWVUgcHJhZ21hOiBrZWVwCiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxtYXA+CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNhY2hlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jYWNoZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjFlOWEyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jYWNoZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKEVYSVNUUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2N0cmVzYWxsb2MubG9nIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJjdHJlc2FsbG9jLmxvZyBzaG91bGQgbm90IGV4aXN0IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY2FjaGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY2FjaGUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jYWNoZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNhY2hlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNhY2hlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxYTM0YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY2FjaGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDE0IEBACiteSW5zdWZmaWNpZW50IHJlc291cmNlcyBmb3IgdGVzdCBUZXN0MToKKworICBUZXN0IHJlcXVlc3RlZCByZXNvdXJjZXMgb2YgdHlwZSAnZmx1eGNhcGFjaXRvcnMnIGluIHRoZSBmb2xsb3dpbmcgYW1vdW50czoKKyAgICAyMDAgc2xvdHMKKyAgYnV0IG9ubHkgdGhlIGZvbGxvd2luZyB1bml0cyB3ZXJlIGF2YWlsYWJsZToKKyAgICAnb3V0YXRpbWUnOiAxMjEgc2xvdHMKKworUmVzb3VyY2Ugc3BlYyBmaWxlOgorCisgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9yZXNzcGVjLmpzb24KK0NNYWtlIEVycm9yIGF0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNhY2hlL3Rlc3RcLmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKKyAgVGVzdHMgZGlkIG5vdCBwYXNzJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jbWRsaW5lLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jbWRsaW5lLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMWU5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNtZGxpbmUtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihFWElTVFMgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9jdHJlc2FsbG9jLmxvZyIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiY3RyZXNhbGxvYy5sb2cgc2hvdWxkIG5vdCBleGlzdCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNtZGxpbmUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtY21kbGluZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1N2UyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNtZGxpbmUtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisoLTF8MjU1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jbWRsaW5lLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLWNtZGxpbmUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmY5Y2ZjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jbWRsaW5lLXN0ZGVyci50eHQKQEAgLTAsMCArMSwxNCBAQAorXkluc3VmZmljaWVudCByZXNvdXJjZXMgZm9yIHRlc3QgVGVzdDE6CisKKyAgVGVzdCByZXF1ZXN0ZWQgcmVzb3VyY2VzIG9mIHR5cGUgJ2ZsdXhjYXBhY2l0b3JzJyBpbiB0aGUgZm9sbG93aW5nIGFtb3VudHM6CisgICAgMjAwIHNsb3RzCisgIGJ1dCBvbmx5IHRoZSBmb2xsb3dpbmcgdW5pdHMgd2VyZSBhdmFpbGFibGU6CisgICAgJ291dGF0aW1lJzogMTIxIHNsb3RzCisKK1Jlc291cmNlIHNwZWMgZmlsZToKKworICBbXgorXSovVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vcmVzc3BlYy5qc29uCitDTWFrZSBFcnJvciBhdCBbXgorXSovVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1jbWRsaW5lL3Rlc3RcLmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKKyAgVGVzdHMgZGlkIG5vdCBwYXNzJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy1zdGRlcnIudHh0CmluZGV4IDQxZGY1YWYuLjkxZDdlZjkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLXN0ZGVyci50eHQKQEAgLTEsNCArMSwxNCBAQAotXkluc3VmZmljaWVudCByZXNvdXJjZXMKK15JbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGZvciB0ZXN0IFRlc3QxOgorCisgIFRlc3QgcmVxdWVzdGVkIHJlc291cmNlcyBvZiB0eXBlICdmbHV4Y2FwYWNpdG9ycycgaW4gdGhlIGZvbGxvd2luZyBhbW91bnRzOgorICAgIDIwMCBzbG90cworICBidXQgb25seSB0aGUgZm9sbG93aW5nIHVuaXRzIHdlcmUgYXZhaWxhYmxlOgorICAgICdvdXRhdGltZSc6IDEyMSBzbG90cworCitSZXNvdXJjZSBzcGVjIGZpbGU6CisKKyAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Jlc3NwZWMuanNvbgogQ01ha2UgRXJyb3IgYXQgW14KIF0qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMvdGVzdFwuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgogICBUZXN0cyBkaWQgbm90IHBhc3MkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy12YXJpYWJsZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjFlOWEyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy12YXJpYWJsZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKEVYSVNUUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2N0cmVzYWxsb2MubG9nIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJjdHJlc2FsbG9jLmxvZyBzaG91bGQgbm90IGV4aXN0IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtdmFyaWFibGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtdmFyaWFibGUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMS1jdGVzdC1zLXJlcy12YXJpYWJsZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmMTNlMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDEtY3Rlc3Qtcy1yZXMtdmFyaWFibGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDE0IEBACiteSW5zdWZmaWNpZW50IHJlc291cmNlcyBmb3IgdGVzdCBUZXN0MToKKworICBUZXN0IHJlcXVlc3RlZCByZXNvdXJjZXMgb2YgdHlwZSAnZmx1eGNhcGFjaXRvcnMnIGluIHRoZSBmb2xsb3dpbmcgYW1vdW50czoKKyAgICAyMDAgc2xvdHMKKyAgYnV0IG9ubHkgdGhlIGZvbGxvd2luZyB1bml0cyB3ZXJlIGF2YWlsYWJsZToKKyAgICAnb3V0YXRpbWUnOiAxMjEgc2xvdHMKKworUmVzb3VyY2Ugc3BlYyBmaWxlOgorCisgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9yZXNzcGVjLmpzb24KK0NNYWtlIEVycm9yIGF0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gxLWN0ZXN0LXMtcmVzLXZhcmlhYmxlL3Rlc3RcLmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKKyAgVGVzdHMgZGlkIG5vdCBwYXNzJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMi1jdGVzdC1zLXJlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMi1jdGVzdC1zLXJlcy1zdGRlcnIudHh0CmluZGV4IDZjMmY1NTQuLjVjNzVhM2QgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDItY3Rlc3Qtcy1yZXMtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gyLWN0ZXN0LXMtcmVzLXN0ZGVyci50eHQKQEAgLTEsNCArMSwxMSBAQAotXkluc3VmZmljaWVudCByZXNvdXJjZXMKK15JbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGZvciB0ZXN0IFRlc3QxOgorCisgIFRlc3QgcmVxdWVzdGVkIHJlc291cmNlcyBvZiB0eXBlICd0ZXJtaW5hdG9ycycgd2hpY2ggZG9lcyBub3QgZXhpc3QKKworUmVzb3VyY2Ugc3BlYyBmaWxlOgorCisgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9yZXNzcGVjLmpzb24KIENNYWtlIEVycm9yIGF0IFteCiBdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gyLWN0ZXN0LXMtcmVzL3Rlc3RcLmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKICAgVGVzdHMgZGlkIG5vdCBwYXNzJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMy1jdGVzdC1zLXJlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vbm90ZW5vdWdoMy1jdGVzdC1zLXJlcy1zdGRlcnIudHh0CmluZGV4IDgyZGZkZWYuLjQ5MDJhMTkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDMtY3Rlc3Qtcy1yZXMtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9ub3Rlbm91Z2gzLWN0ZXN0LXMtcmVzLXN0ZGVyci50eHQKQEAgLTEsNCArMSwyMSBAQAotXkluc3VmZmljaWVudCByZXNvdXJjZXMKK15JbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGZvciB0ZXN0IFRlc3QxOgorCisgIFRlc3QgcmVxdWVzdGVkIHJlc291cmNlcyBvZiB0eXBlICd3aWRnZXRzJyBpbiB0aGUgZm9sbG93aW5nIGFtb3VudHM6CisgICAgMTIgc2xvdHMKKyAgYnV0IG9ubHkgdGhlIGZvbGxvd2luZyB1bml0cyB3ZXJlIGF2YWlsYWJsZToKKyAgICAnMCc6IDQgc2xvdHMKKyAgICAnMSc6IDIgc2xvdHMKKyAgICAnMic6IDQgc2xvdHMKKyAgICAnMyc6IDggc2xvdHMKKyAgICAnNCc6IDEgc2xvdAorICAgICc1JzogMSBzbG90CisgICAgJzYnOiAxIHNsb3QKKyAgICAnNyc6IDEgc2xvdAorCitSZXNvdXJjZSBzcGVjIGZpbGU6CisKKyAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Jlc3NwZWMuanNvbgogQ01ha2UgRXJyb3IgYXQgW14KIF0qL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL25vdGVub3VnaDMtY3Rlc3Qtcy1yZXMvdGVzdFwuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgogICBUZXN0cyBkaWQgbm90IHBhc3MkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9wcm9jZXNzX2NvdW50LWN0ZXN0LXMtbm9yZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9wcm9jZXNzX2NvdW50LWN0ZXN0LXMtbm9yZXMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlNzJiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Byb2Nlc3NfY291bnQtY3Rlc3Qtcy1ub3Jlcy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3JlYWRfdGVzdGluZ19maWxlKCJUZXN0LnhtbCIgX3Rlc3RfY29udGVudHMpCitpZihOT1QgX3Rlc3RfY29udGVudHMgTUFUQ0hFUyAiI0NURVNUX1JFU09VUkNFX0dST1VQX0NPVU5UPSIpCisgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkNvdWxkIG5vdCBmaW5kIHVuc2V0IHZhcmlhYmxlIENURVNUX1JFU09VUkNFX0dST1VQX0NPVU5UIGluIHRlc3QgbWVhc3VyZW1lbnRzXG4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vcHJvY2Vzc19jb3VudC1jdGVzdC1zLXJlcy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Byb2Nlc3NfY291bnQtY3Rlc3Qtcy1yZXMtY2hlY2suY21ha2UKaW5kZXggY2VkYTcyZS4uNTg1YzM2YiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vcHJvY2Vzc19jb3VudC1jdGVzdC1zLXJlcy1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi9wcm9jZXNzX2NvdW50LWN0ZXN0LXMtcmVzLWNoZWNrLmNtYWtlCkBAIC0xICsxLDkgQEAKIHZlcmlmeV9jdGVzdF9yZXNvdXJjZXMoKQorCityZWFkX3Rlc3RpbmdfZmlsZSgiVGVzdC54bWwiIF90ZXN0X2NvbnRlbnRzKQoraWYoTk9UIF90ZXN0X2NvbnRlbnRzIE1BVENIRVMgIlxuQ1RFU1RfUkVTT1VSQ0VfR1JPVVBfMD13aWRnZXRzIikKKyAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiQ291bGQgbm90IGZpbmQgdmFyaWFibGUgQ1RFU1RfUkVTT1VSQ0VfR1JPVVBfMCBpbiB0ZXN0IG1lYXN1cmVtZW50c1xuIikKK2VuZGlmKCkKK2lmKE5PVCBfdGVzdF9jb250ZW50cyBNQVRDSEVTICJcbkNURVNUX1JFU09VUkNFX0dST1VQXzBfV0lER0VUUz1pZDoiKQorICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJDb3VsZCBub3QgZmluZCB2YXJpYWJsZSBDVEVTVF9SRVNPVVJDRV9HUk9VUF8wX1dJREdFVFMgaW4gdGVzdCBtZWFzdXJlbWVudHNcbiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi90ZXN0LmNtYWtlLmluIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RSZXNvdXJjZUFsbG9jYXRpb24vdGVzdC5jbWFrZS5pbgppbmRleCA0YjQyNmYxLi45YWQ5YWM4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFJlc291cmNlQWxsb2NhdGlvbi90ZXN0LmNtYWtlLmluCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0UmVzb3VyY2VBbGxvY2F0aW9uL3Rlc3QuY21ha2UuaW4KQEAgLTgsMTUgKzgsMjYgQEAKIHNldChDVEVTVF9CVUlMRF9DT05GSUdVUkFUSU9OICIkRU5We0NNQUtFX0NPTkZJR19UWVBFfSIpCiBzZXQoQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FICIwMTowMDowMCBVVEMiKQogCi1jdGVzdF9zdGFydChFeHBlcmltZW50YWwgUVVJRVQpCi1jdGVzdF9jb25maWd1cmUoT1BUSU9OUworc2V0KGNvbmZpZ19vcHRpb25zCiAgICItRENURVNUX1JFU09VUkNFX0FMTE9DX0VOQUJMRUQ9JHtDVEVTVF9SRVNPVVJDRV9BTExPQ19FTkFCTEVEfTstRENUUkVTQUxMT0NfQ09NTUFORD0ke0NUUkVTQUxMT0NfQ09NTUFORH0iCiAgICkKLWN0ZXN0X2J1aWxkKCkKIAotaWYoQ1RFU1RfUkVTT1VSQ0VfQUxMT0NfRU5BQkxFRCkKK2lmKENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFIFNUUkVRVUFMICJDTURMSU5FIikKKyAgbGlzdChBUFBFTkQgY29uZmlnX29wdGlvbnMgIi1EQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFPUBSdW5DTWFrZV9TT1VSQ0VfRElSQC9ub2V4aXN0Lmpzb24iKQorZWxzZWlmKENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFIFNUUkVRVUFMICJBUkciKQogICBzZXQocmVzc3BlYyBSRVNPVVJDRV9TUEVDX0ZJTEUgIkBSdW5DTWFrZV9TT1VSQ0VfRElSQC9yZXNzcGVjLmpzb24iKQorICBzZXQoQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFICJAUnVuQ01ha2VfU09VUkNFX0RJUkAvbm9leGlzdC5qc29uIikKKyAgbGlzdChBUFBFTkQgY29uZmlnX29wdGlvbnMgIi1EQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFPUBSdW5DTWFrZV9TT1VSQ0VfRElSQC9ub2V4aXN0Lmpzb24iKQorZWxzZWlmKENURVNUX1JFU09VUkNFX1NQRUNfU09VUkNFIFNUUkVRVUFMICJWQVJJQUJMRSIpCisgIHNldChDVEVTVF9SRVNPVVJDRV9TUEVDX0ZJTEUgIkBSdW5DTWFrZV9TT1VSQ0VfRElSQC9yZXNzcGVjLmpzb24iKQorICBsaXN0KEFQUEVORCBjb25maWdfb3B0aW9ucyAiLURDVEVTVF9SRVNPVVJDRV9TUEVDX0ZJTEU9QFJ1bkNNYWtlX1NPVVJDRV9ESVJAL25vZXhpc3QuanNvbiIpCitlbHNlaWYoQ1RFU1RfUkVTT1VSQ0VfU1BFQ19TT1VSQ0UgU1RSRVFVQUwgIkNBQ0hFIikKKyAgbGlzdChBUFBFTkQgY29uZmlnX29wdGlvbnMgIi1EQ1RFU1RfUkVTT1VSQ0VfU1BFQ19GSUxFPUBSdW5DTWFrZV9TT1VSQ0VfRElSQC9yZXNzcGVjLmpzb24iKQogZW5kaWYoKQorCitjdGVzdF9zdGFydChFeHBlcmltZW50YWwgUVVJRVQpCitjdGVzdF9jb25maWd1cmUoT1BUSU9OUyAiJHtjb25maWdfb3B0aW9uc30iKQorY3Rlc3RfYnVpbGQoKQogY3Rlc3RfdGVzdCgke3Jlc3NwZWN9IFJFVFVSTl9WQUxVRSByZXR2YWwgUEFSQUxMRUxfTEVWRUwgJHtDVEVTVF9QQVJBTExFTH0gU0NIRURVTEVfUkFORE9NICR7Q1RFU1RfUkFORE9NfSkKIGlmKHJldHZhbCkKICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVGVzdHMgZGlkIG5vdCBwYXNzIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9CYXNpYy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RUaW1lb3V0L0Jhc2ljLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1OWRiZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9CYXNpYy1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNiBAQAorVGVzdCBwcm9qZWN0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvQmFzaWMtYnVpbGQKKyAgICBTdGFydCAxOiBUZXN0VGltZW91dAorMS8xIFRlc3QgIzE6IFRlc3RUaW1lb3V0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cKlwqXCpUaW1lb3V0ICtbMS05XVswLTkuXSogc2VjCisrCiswJSB0ZXN0cyBwYXNzZWQsIDEgdGVzdHMgZmFpbGVkIG91dCBvZiAxCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvQ01ha2VMaXN0cy50eHQuaW4gYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvQ01ha2VMaXN0cy50eHQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYWE5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9DTWFrZUxpc3RzLnR4dC5pbgpAQCAtMCwwICsxLDE1IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoQ1Rlc3RUZXN0QENBU0VfTkFNRUAgQykKK2luY2x1ZGUoQ1Rlc3QpCisKK2FkZF9leGVjdXRhYmxlKFRlc3RUaW1lb3V0IFRlc3RUaW1lb3V0LmMpCisKK2lmKE5PVCBUSU1FT1VUKQorICBzZXQoVElNRU9VVCA0KQorZW5kaWYoKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoVGVzdFRpbWVvdXQgUFJJVkFURSBUSU1FT1VUPSR7VElNRU9VVH0pCisKK2FkZF90ZXN0KE5BTUUgVGVzdFRpbWVvdXQgQ09NTUFORCBUZXN0VGltZW91dCkKK3NldF9wcm9wZXJ0eShURVNUIFRlc3RUaW1lb3V0IFBST1BFUlRZIFRJTUVPVVQgJHtUSU1FT1VUfSkKKworQENBU0VfQ01BS0VMSVNUU19TVUZGSVhfQ09ERUAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9Gb3JrLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvRm9yay1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzhkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvRm9yay1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNiBAQAorVGVzdCBwcm9qZWN0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvRm9yay1idWlsZAorICAgIFN0YXJ0IDE6IFRlc3RUaW1lb3V0CisxLzEgVGVzdCAjMTogVGVzdFRpbWVvdXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlwqXCpcKlRpbWVvdXQgK1sxLTldWzAtOS5dKiBzZWMKKysKKzAlIHRlc3RzIHBhc3NlZCwgMSB0ZXN0cyBmYWlsZWQgb3V0IG9mIDEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOTZiNmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMjIgQEAKK2luY2x1ZGUoUnVuQ1Rlc3QpCisKK2lmKE5PVCBUSU1FT1VUKQorICAjIEdpdmUgdGhlIHByb2Nlc3MgdGltZSB0byBsb2FkIGFuZCBzdGFydCBydW5uaW5nLgorICBzZXQoVElNRU9VVCA0KQorZW5kaWYoKQorCitmdW5jdGlvbihydW5fY3Rlc3RfdGltZW91dCBDQVNFX05BTUUpCisgIGNvbmZpZ3VyZV9maWxlKCR7UnVuQ01ha2VfU09VUkNFX0RJUn0vVGVzdFRpbWVvdXQuYworICAgICAgICAgICAgICAgICAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7Q0FTRV9OQU1FfS9UZXN0VGltZW91dC5jIENPUFlPTkxZKQorICBydW5fY3Rlc3QoJHtDQVNFX05BTUV9KQorZW5kZnVuY3Rpb24oKQorCitydW5fY3Rlc3RfdGltZW91dChCYXNpYykKKworaWYoVU5JWCkKKyAgc3RyaW5nKENPTkNBVCBDQVNFX0NNQUtFTElTVFNfU1VGRklYX0NPREUgW1sKKyAgICB0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhUZXN0VGltZW91dCBQUklWQVRFIEZPUkspCitdXSkKKyAgcnVuX2N0ZXN0X3RpbWVvdXQoRm9yaykKKyAgdW5zZXQoQ0FTRV9DTUFLRUxJU1RTX1NVRkZJWF9DT0RFKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RUaW1lb3V0L1Rlc3RUaW1lb3V0LmMgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvVGVzdFRpbWVvdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTAwOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ1Rlc3RUaW1lb3V0L1Rlc3RUaW1lb3V0LmMKQEAgLTAsMCArMSwyNCBAQAorI2lmIGRlZmluZWQoX1dJTjMyKQorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbih2b2lkKQoreworI2lmZGVmIEZPUksKKyAgcGlkX3QgcGlkID0gZm9yaygpOworICBpZiAocGlkICE9IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgU2xlZXAoKFRJTUVPVVQgKyA0KSAqIDEwMDApOworI2Vsc2UKKyAgc2xlZXAoKFRJTUVPVVQgKyA0KSk7CisjZW5kaWYKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvdGVzdC5jbWFrZS5pbiBiL1Rlc3RzL1J1bkNNYWtlL0NUZXN0VGltZW91dC90ZXN0LmNtYWtlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjYyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DVGVzdFRpbWVvdXQvdGVzdC5jbWFrZS5pbgpAQCAtMCwwICsxLDE2IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK0BDQVNFX1RFU1RfUFJFRklYX0NPREVACisKK3NldChDVEVTVF9TSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdC1zaXRlIikKK3NldChDVEVTVF9CVUlMRF9OQU1FICAgICAgICAgICAgICAgICAgICAidGVzdC1idWlsZC1uYW1lIikKK3NldChDVEVTVF9TT1VSQ0VfRElSRUNUT1JZICAgICAgICAgICAgICAiQFJ1bkNNYWtlX0JJTkFSWV9ESVJAL0BDQVNFX05BTUVAIikKK3NldChDVEVTVF9CSU5BUllfRElSRUNUT1JZICAgICAgICAgICAgICAiQFJ1bkNNYWtlX0JJTkFSWV9ESVJAL0BDQVNFX05BTUVALWJ1aWxkIikKK3NldChDVEVTVF9DTUFLRV9HRU5FUkFUT1IgICAgICAgICAgICAgICAiQFJ1bkNNYWtlX0dFTkVSQVRPUkAiKQorc2V0KENURVNUX0NNQUtFX0dFTkVSQVRPUl9QTEFURk9STSAgICAgICJAUnVuQ01ha2VfR0VORVJBVE9SX1BMQVRGT1JNQCIpCitzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQgICAgICAgIkBSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVEAiKQorc2V0KENURVNUX0JVSUxEX0NPTkZJR1VSQVRJT04gICAgICAgICAgICIkRU5We0NNQUtFX0NPTkZJR19UWVBFfSIpCisKK2N0ZXN0X3N0YXJ0KEV4cGVyaW1lbnRhbCkKK2N0ZXN0X2NvbmZpZ3VyZShPUFRJT05TICItRFRJTUVPVVQ9QFRJTUVPVVRAIikKK2N0ZXN0X2J1aWxkKCkKK2N0ZXN0X3Rlc3QoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tJUE9TdXBwb3J0ZWQvY21wMDA2OS1pcy1vbGQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrSVBPU3VwcG9ydGVkL2NtcDAwNjktaXMtb2xkLXN0ZGVyci50eHQKaW5kZXggZjE4MzU5NC4uMWJhYTYzYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tJUE9TdXBwb3J0ZWQvY21wMDA2OS1pcy1vbGQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0lQT1N1cHBvcnRlZC9jbXAwMDY5LWlzLW9sZC1zdGRlcnIudHh0CkBAIC0xLDQgKzEsMTUgQEAKLV5DTWFrZSBFcnJvciBhdCAuKi9Nb2R1bGVzL0NoZWNrSVBPU3VwcG9ydGVkXC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBjbXAwMDY5LWlzLW9sZC5jbWFrZTpbMC05XSsgXChjbWFrZV9wb2xpY3lcKToKKyAgVGhlIE9MRCBiZWhhdmlvciBmb3IgcG9saWN5IENNUDAwNjkgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbgorICBvZiBDTWFrZS4KKworICBUaGUgY21ha2UtcG9saWNpZXNcKDdcKSBtYW51YWwgZXhwbGFpbnMgdGhhdCB0aGUgT0xEIGJlaGF2aW9ycyBvZiBhbGwKKyAgcG9saWNpZXMgYXJlIGRlcHJlY2F0ZWQgYW5kIHRoYXQgYSBwb2xpY3kgc2hvdWxkIGJlIHNldCB0byBPTEQgb25seSB1bmRlcgorICBzcGVjaWZpYyBzaG9ydC10ZXJtIGNpcmN1bXN0YW5jZXMuICBQcm9qZWN0cyBzaG91bGQgYmUgcG9ydGVkIHRvIHRoZSBORVcKKyAgYmVoYXZpb3IgYW5kIG5vdCByZWx5IG9uIHNldHRpbmcgYSBwb2xpY3kgdG8gT0xELgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCAuKi9Nb2R1bGVzL0NoZWNrSVBPU3VwcG9ydGVkXC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CiAgIFBvbGljeSBDTVAwMDY5IHNldCB0byBPTEQKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIGNtcDAwNjktaXMtb2xkXC5jbWFrZTpbMC05XSsgXChjaGVja19pcG9fc3VwcG9ydGVkXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIxZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTMpCisKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBMQU5HVUFHRVMgTk9ORSkKKworaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrQ0xpbmtlckZsYWcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tDTGlua2VyRmxhZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGU4N2E0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrQ0xpbmtlckZsYWcuY21ha2UKQEAgLTAsMCArMSwzIEBACisKK3NldCAoQ0hFQ0tfTEFOR1VBR0UgQykKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ2hlY2tMaW5rZXJGbGFnLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja0NYWExpbmtlckZsYWcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tDWFhMaW5rZXJGbGFnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMjk5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tDWFhMaW5rZXJGbGFnLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorCitzZXQgKENIRUNLX0xBTkdVQUdFIENYWCkKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ2hlY2tMaW5rZXJGbGFnLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja0ZvcnRyYW5MaW5rZXJGbGFnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrRm9ydHJhbkxpbmtlckZsYWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhMjg4ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja0ZvcnRyYW5MaW5rZXJGbGFnLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorCitzZXQgKENIRUNLX0xBTkdVQUdFIEZvcnRyYW4pCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NoZWNrTGlua2VyRmxhZy5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tMaW5rZXJGbGFnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrTGlua2VyRmxhZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JkNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrTGlua2VyRmxhZy5jbWFrZQpAQCAtMCwwICsxLDE0IEBACisKK2VuYWJsZV9sYW5ndWFnZSAoJHtDSEVDS19MQU5HVUFHRX0pCisKK2luY2x1ZGUoQ2hlY2tMaW5rZXJGbGFnKQorCitjaGVja19saW5rZXJfZmxhZygke0NIRUNLX0xBTkdVQUdFfSAiTElOS0VSOi1MLC9kaXIiIFZBTElEX0xJTktFUl9GTEFHKQoraWYoTk9UIFZBTElEX0xJTktFUl9GTEFHKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIlRlc3QgZmFpbCBmb3IgdmFsaWQgbGlua2VyIGZsYWcuIikKK2VuZGlmKCkKKworY2hlY2tfbGlua2VyX2ZsYWcoJHtDSEVDS19MQU5HVUFHRX0gIkxJTktFUjotRCIgSU5WQUxJRF9MSU5LRVJfRkxBRykKK2lmKElOVkFMSURfTElOS0VSX0ZMQUcpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiVGVzdCBmYWlsIGZvciBpbnZhbGlkIGxpbmtlciBmbGFnLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tPQkpDTGlua2VyRmxhZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja09CSkNMaW5rZXJGbGFnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMWQxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9DaGVja0xpbmtlckZsYWcvQ2hlY2tPQkpDTGlua2VyRmxhZy5jbWFrZQpAQCAtMCwwICsxLDMgQEAKKworc2V0IChDSEVDS19MQU5HVUFHRSBPQkpDKQoraW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DaGVja0xpbmtlckZsYWcuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL0NoZWNrT0JKQ1hYTGlua2VyRmxhZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja09CSkNYWExpbmtlckZsYWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0ZWZiOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9DaGVja09CSkNYWExpbmtlckZsYWcuY21ha2UKQEAgLTAsMCArMSwzIEBACisKK3NldCAoQ0hFQ0tfTEFOR1VBR0UgT0JKQ1hYKQoraW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DaGVja0xpbmtlckZsYWcuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tMaW5rZXJGbGFnL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI0YTJhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTGlua2VyRmxhZy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwxNCBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworaWYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiQ2xhbmd8R05VIikKKyAgcnVuX2NtYWtlKENoZWNrQ0xpbmtlckZsYWcpCisgIHJ1bl9jbWFrZShDaGVja0NYWExpbmtlckZsYWcpCisgIGlmIChBUFBMRSkKKyAgICBydW5fY21ha2UoQ2hlY2tPQkpDTGlua2VyRmxhZykKKyAgICBydW5fY21ha2UoQ2hlY2tPQkpDWFhMaW5rZXJGbGFnKQorICBlbmRpZigpCitlbmRpZigpCisKK2lmIChDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVSIpCisgIHJ1bl9jbWFrZShDaGVja0ZvcnRyYW5MaW5rZXJGbGFnKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ2hlY2tNb2R1bGVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ2hlY2tNb2R1bGVzL0NNYWtlTGlzdHMudHh0CmluZGV4IDk4NzJkZjIuLjg0MmM1Y2YgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NoZWNrTW9kdWxlcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9DaGVja01vZHVsZXMvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjExKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIGNtYWtlX3BvbGljeShTRVQgQ01QMDA1NCBORVcpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvQnVpbGREaXItLWJ1aWxkLW11bHRpcGxlLXRhcmdldHMtZmFpbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9CdWlsZERpci0tYnVpbGQtbXVsdGlwbGUtdGFyZ2V0cy1mYWlsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyLS1idWlsZC1tdWx0aXBsZS10YXJnZXRzLWZhaWwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyLS1idWlsZC1tdWx0aXBsZS10YXJnZXRzLWZhaWwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvQnVpbGREaXItLWJ1aWxkLW11bHRpcGxlLXRhcmdldHMtZmFpbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9CdWlsZERpci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyL0NNYWtlTGlzdHMudHh0CmluZGV4IGQyYTI4MzEuLmNmMmMwODcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0J1aWxkRGlyL0NNYWtlTGlzdHMudHh0CkBAIC01LDMgKzUsNCBAQAogYWRkX2N1c3RvbV90YXJnZXQoQ3VzdG9tVGFyZ2V0IEFMTCBERVBFTkRTIG91dHB1dC50eHQpCiBhZGRfY3VzdG9tX3RhcmdldChDdXN0b21UYXJnZXQyIEFMTCBERVBFTkRTIG91dHB1dC50eHQpCiBhZGRfY3VzdG9tX3RhcmdldChDdXN0b21UYXJnZXQzIEFMTCBERVBFTkRTIG91dHB1dC50eHQpCithZGRfY3VzdG9tX3RhcmdldChDdXN0b21UYXJnZXRGYWlsIENPTU1BTkQgRG9lc05vdEV4aXN0KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXBhYmlsaXRpZXMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2FwYWJpbGl0aWVzLXN0ZG91dC50eHQKaW5kZXggYjRiMTcwZS4uZTI0ZTEzMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXBhYmlsaXRpZXMtc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhcGFiaWxpdGllcy1zdGRvdXQudHh0CkBAIC0xICsxIEBACi1eeyJmaWxlQXBpIjp7InJlcXVlc3RzIjpcW3sia2luZCI6ImNvZGVtb2RlbCIsInZlcnNpb24iOlxbeyJtYWpvciI6MiwibWlub3IiOjB9XX0seyJraW5kIjoiY2FjaGUiLCJ2ZXJzaW9uIjpcW3sibWFqb3IiOjIsIm1pbm9yIjowfV19LHsia2luZCI6ImNtYWtlRmlsZXMiLCJ2ZXJzaW9uIjpcW3sibWFqb3IiOjEsIm1pbm9yIjowfV19XX0sImdlbmVyYXRvcnMiOlxbLipcXSwic2VydmVyTW9kZSI6dHJ1ZSwidmVyc2lvbiI6ey4qfX0kCiteeyJmaWxlQXBpIjp7InJlcXVlc3RzIjpcW3sia2luZCI6ImNvZGVtb2RlbCIsInZlcnNpb24iOlxbeyJtYWpvciI6MiwibWlub3IiOjJ9XX0seyJraW5kIjoiY2FjaGUiLCJ2ZXJzaW9uIjpcW3sibWFqb3IiOjIsIm1pbm9yIjowfV19LHsia2luZCI6ImNtYWtlRmlsZXMiLCJ2ZXJzaW9uIjpcW3sibWFqb3IiOjEsIm1pbm9yIjowfV19XX0sImdlbmVyYXRvcnMiOlxbLipcXSwic2VydmVyTW9kZSI6dHJ1ZSwidmVyc2lvbiI6ey4qfX0kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfZGlyZWN0b3J5LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfZGlyZWN0b3J5LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X2RpcmVjdG9yeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfZGlyZWN0b3J5LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkMGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X2RpcmVjdG9yeS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogLiogaXMgYSBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X2dvb2RfY2F0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9nb29kX2NhdC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZTkwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9nb29kX2NhdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMyBAQAorZmlyc3QgZmlsZSB0byBhcHBlbmQKK3NlY29uZCBmaWxlIHRvIGFwcGVuZAorw6DDqcO5w6cgLSDtlZzqta3slrQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fZXhpc3RpbmdfZmlsZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X25vbl9leGlzdGluZ19maWxlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY2F0X25vbl9leGlzdGluZ19maWxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fZXhpc3RpbmdfZmlsZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOGZjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fZXhpc3RpbmdfZmlsZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogLio6IG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgXChpZ25vcmluZ1wpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfbm9uX3JlYWRhYmxlX2ZpbGUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fcmVhZGFibGVfZmlsZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9ub25fcmVhZGFibGVfZmlsZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfbm9uX3JlYWRhYmxlX2ZpbGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2VjODIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfbm9uX3JlYWRhYmxlX2ZpbGUtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6IC4qOiBwZXJtaXNzaW9uIGRlbmllZCBcKGlnbm9yaW5nXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9vcHRpb25fbm90X2hhbmRsZWQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9vcHRpb25fbm90X2hhbmRsZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfb3B0aW9uX25vdF9oYW5kbGVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NhdF9vcHRpb25fbm90X2hhbmRsZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY3YWNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jYXRfb3B0aW9uX25vdF9oYW5kbGVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkNNYWtlIEVycm9yOiAtZjogb3B0aW9uIG5vdCBoYW5kbGVkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NvbXBhcmVfZmlsZXMtZGlmZmVyZW50LWVvbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jb21wYXJlX2ZpbGVzLWRpZmZlcmVudC1lb2wtc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcyOWNjYi4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NvbXBhcmVfZmlsZXMtZGlmZmVyZW50LWVvbC1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotXkZpbGVzICIuKi9jb21wYXJlX2ZpbGVzL2xmIiB0byAiLiovY29tcGFyZV9maWxlcy9jcmxmIiBhcmUgZGlmZmVyZW50LiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pZ25vcmUtZW9sLW5vbmV4aXN0ZW50LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NvbXBhcmVfZmlsZXMtaWdub3JlLWVvbC1ub25leGlzdGVudC1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTljYTgxLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pZ25vcmUtZW9sLW5vbmV4aXN0ZW50LXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1eRmlsZXMgIm5vbmV4aXN0ZW50X2EiIHRvICJub25leGlzdGVudF9iIiBhcmUgZGlmZmVyZW50LiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pbnZhbGlkLWFyZ3VtZW50cy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jb21wYXJlX2ZpbGVzLWludmFsaWQtYXJndW1lbnRzLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmYmYwOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pbnZhbGlkLWFyZ3VtZW50cy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKzIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pbnZhbGlkLWFyZ3VtZW50cy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jb21wYXJlX2ZpbGVzLWludmFsaWQtYXJndW1lbnRzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY29tcGFyZV9maWxlcy1pbnZhbGlkLWFyZ3VtZW50cy1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tYXJnLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tYXJnLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vLWFyZy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tYXJnLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkOWIwMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vLWFyZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMyBAQAorXkNNYWtlIEVycm9yOiBjbWFrZSB2ZXJzaW9uIC4qCitVc2FnZTogLiogLUUgPGNvbW1hbmQ+IFxbYXJndW1lbnRzXC5cLlwuXF0KK0F2YWlsYWJsZSBjb21tYW5kczoKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay1uby1kaXJlY3RvcnktcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay1uby1kaXJlY3RvcnktcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tZGlyZWN0b3J5LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay1uby1kaXJlY3Rvcnktc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWU2MGVlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm8tZGlyZWN0b3J5LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkNNYWtlIEVycm9yOiBmYWlsZWQgdG8gY3JlYXRlIGxpbmsgLiogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vbi1leGlzdGVudC1zb3VyY2UtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay1ub24tZXhpc3RlbnQtc291cmNlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vbi1leGlzdGVudC1zb3VyY2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLW5vbi1leGlzdGVudC1zb3VyY2Utc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM0NTcxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstbm9uLWV4aXN0ZW50LXNvdXJjZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15mYWlsZWQgdG8gY3JlYXRlIGhhcmQgbGluayBiZWNhdXNlIHNvdXJjZSBwYXRoIC4qIGRvZXMgbm90IGV4aXN0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay11bnJlc29sdmVkLXN5bWxpbmstcHJlcmVxLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstdW5yZXNvbHZlZC1zeW1saW5rLXByZXJlcS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjk3YWVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9jcmVhdGVfaGFyZGxpbmstdW5yZXNvbHZlZC1zeW1saW5rLXByZXJlcS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKCR7YWN0dWFsX3N0ZGVycl92YXJ9IE1BVENIRVMgIm9wZXJhdGlvbiBub3QgcGVybWl0dGVkIikKKyAgdW5zZXQobXNnKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLXVucmVzb2x2ZWQtc3ltbGluay1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLXVucmVzb2x2ZWQtc3ltbGluay1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay11bnJlc29sdmVkLXN5bWxpbmstc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0VfY3JlYXRlX2hhcmRsaW5rLXVucmVzb2x2ZWQtc3ltbGluay1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzQ1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX2NyZWF0ZV9oYXJkbGluay11bnJlc29sdmVkLXN5bWxpbmstc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteZmFpbGVkIHRvIGNyZWF0ZSBoYXJkIGxpbmsgYmVjYXVzZSBzb3VyY2UgcGF0aCAuKiBkb2VzIG5vdCBleGlzdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fYmFkX2FyZ3VtZW50LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9iYWRfYXJndW1lbnQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9iYWRfYXJndW1lbnQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fYmFkX2FyZ3VtZW50LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiOTYzYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fYmFkX2FyZ3VtZW50LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkNNYWtlIEVycm9yOiBVbmtub3duIC1FIHJtIGFyZ3VtZW50OiAtcmQkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2RpcmVjdG9yeV9saW5rX2V4aXN0aW5nLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWEyOWEyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKE5PVCBFWElTVFMgJHtvdXR9L2Rpci9leGlzdGluZy50eHQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2Rpci9leGlzdGluZy50eHQgc2hvdWxkIGV4aXN0ICh3ZSBvbmx5IHJlbW92ZWQgdGhlIGxpbmsgdG8gZGlyIGZvbGRlcikiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2VtcHR5X2ZpbGVfc3BlY2lmaWVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2VtcHR5X2ZpbGVfc3BlY2lmaWVkLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjN2RiYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZW1wdHlfZmlsZV9zcGVjaWZpZWQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteQ01ha2UgRXJyb3I6IE1pc3NpbmcgZmlsZS9kaXJlY3RvcnkgdG8gcmVtb3ZlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9lbXB0eV9maWxlX3NwZWNpZmllZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZW1wdHlfZmlsZV9zcGVjaWZpZWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkNGVkZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZW1wdHlfZmlsZV9zcGVjaWZpZWQuY21ha2UKQEAgLTAsMCArMSw4IEBACitleGVjdXRlX3Byb2Nlc3MoCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAiIgorICBSRVNVTFRfVkFSSUFCTEUgYWN0dWFsX3Jlc3VsdAorICApCisKK2lmKE5PVCAiJHthY3R1YWxfcmVzdWx0fSIgRVFVQUwgIjEiKQorICBtZXNzYWdlKFNFTkRfRVJST1IgImNtYWtlIC1FIHJtIFwiXCIgc2hvdWxkIGhhdmUgcmV0dXJuZWQgMSwgZ290ICR7YWN0dWFsX3Jlc3VsdH0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2ZvcmNlX2V4aXN0aW5nLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2ZvcmNlX2V4aXN0aW5nLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGIxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfZm9yY2VfZXhpc3RpbmctY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihFWElTVFMgJHtvdXR9L2V4aXN0aW5nLnR4dCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke291dH0vZXhpc3RpbmcudHh0IG5vdCByZW1vdmVkIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9mb3JjZV9leGlzdGluZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2ZvcmNlX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9mb3JjZV9ub25fZXhpc3RpbmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9mb3JjZV9ub25fZXhpc3RpbmctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2xpbmtfZXhpc3RpbmctY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbGlua19leGlzdGluZy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE5YjIwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2xpbmtfZXhpc3RpbmctY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihOT1QgRVhJU1RTICR7b3V0fS9leGlzdGluZy50eHQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2V4aXN0aW5nLnR4dCBzaG91bGQgZXhpc3QgKHdlIG9ubHkgcmVtb3ZlZCB0aGUgbGluaykiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2xpbmtfZXhpc3RpbmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9saW5rX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9saW5rX25vbl9leGlzdGluZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9maWxlX2xpbmtfbm9uX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9ub25fZm9yY2VfZXhpc3RpbmctY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX2V4aXN0aW5nLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGIxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX2V4aXN0aW5nLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoRVhJU1RTICR7b3V0fS9leGlzdGluZy50eHQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2V4aXN0aW5nLnR4dCBub3QgcmVtb3ZlZCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX2V4aXN0aW5nLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX25vbl9leGlzdGluZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9ub25fZm9yY2Vfbm9uX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9ub25fZm9yY2Vfbm9uX2V4aXN0aW5nLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX25vbl9leGlzdGluZy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZGY4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfbm9uX2ZvcmNlX25vbl9leGlzdGluZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogRmlsZSB0byByZW1vdmUgZG9lcyBub3QgZXhpc3QgYW5kIGZvcmNlIGlzIG5vdCBzZXQ6IC4qL3JtX3Rlc3RzL25vdF9leGlzdGluZy50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9yZWN1cnNpdmVfZXhpc3RpbmctY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX2V4aXN0aW5nLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGIxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX2V4aXN0aW5nLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoRVhJU1RTICR7b3V0fS9leGlzdGluZy50eHQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2V4aXN0aW5nLnR4dCBub3QgcmVtb3ZlZCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX2V4aXN0aW5nLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX25vbl9leGlzdGluZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9yZWN1cnNpdmVfbm9uX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZmlsZV9yZWN1cnNpdmVfbm9uX2V4aXN0aW5nLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX25vbl9leGlzdGluZy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZGY4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZpbGVfcmVjdXJzaXZlX25vbl9leGlzdGluZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15DTWFrZSBFcnJvcjogRmlsZSB0byByZW1vdmUgZG9lcyBub3QgZXhpc3QgYW5kIGZvcmNlIGlzIG5vdCBzZXQ6IC4qL3JtX3Rlc3RzL25vdF9leGlzdGluZy50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZm9yY2VfcmVjdXJzaXZlX2RpcmVjdG9yeV93aXRoX2ZpbGVzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9mb3JjZV9yZWN1cnNpdmVfZGlyZWN0b3J5X3dpdGhfZmlsZXMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5NzZjYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZm9yY2VfcmVjdXJzaXZlX2RpcmVjdG9yeV93aXRoX2ZpbGVzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoRVhJU1RTICR7b3V0fSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke291dH0gbm90IHJlbW92ZWQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9mb3JjZV9yZWN1cnNpdmVfZGlyZWN0b3J5X3dpdGhfZmlsZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZm9yY2VfcmVjdXJzaXZlX2RpcmVjdG9yeV93aXRoX2ZpbGVzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fZm9yY2VfcmVjdXJzaXZlX25vbl9leGlzdGluZ19maWxlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX2ZvcmNlX3JlY3Vyc2l2ZV9ub25fZXhpc3RpbmdfZmlsZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9ub19maWxlX3NwZWNpZmllZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fbm9fZmlsZV9zcGVjaWZpZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9ub19maWxlX3NwZWNpZmllZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9ub19maWxlX3NwZWNpZmllZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzdkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX25vX2ZpbGVfc3BlY2lmaWVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkNNYWtlIEVycm9yOiBNaXNzaW5nIGZpbGUvZGlyZWN0b3J5IHRvIHJlbW92ZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fbm9uX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9ub25fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5MjcxZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fbm9uX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoTk9UIEVYSVNUUyAke291dH0vZDEgT1IgTk9UIEVYSVNUUyAke291dH0vZDIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2QxIG9yICR7b3V0fS9kMiBpcyByZW1vdmVkIGJ1dCBzaG91bGQgbm90IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX25vbl9yZWN1cnNpdmVfZGlyZWN0b3J5LXR3by1kaXJlY3Rvcmllcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fbm9uX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fbm9uX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX25vbl9yZWN1cnNpdmVfZGlyZWN0b3J5LXR3by1kaXJlY3Rvcmllcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZWEyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX25vbl9yZWN1cnNpdmVfZGlyZWN0b3J5LXR3by1kaXJlY3Rvcmllcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMiBAQAorXkVycm9yIHJlbW92aW5nIGRpcmVjdG9yeSAiLiovcm1fdGVzdHMvZDEiIHdpdGhvdXQgcmVjdXJzaXZlIG9wdGlvblwuCitFcnJvciByZW1vdmluZyBkaXJlY3RvcnkgIi4qL3JtX3Rlc3RzL2QyIiB3aXRob3V0IHJlY3Vyc2l2ZSBvcHRpb25cLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyODJkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnktdHdvLWRpcmVjdG9yaWVzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoRVhJU1RTICR7b3V0fS9kMSBPUiBFWElTVFMgJHtvdXR9L2QyKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7b3V0fS9kMSBvciAke291dH0vZDIgc2hvdWxkIGJlIHJlbW92ZWQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZGlyZWN0b3J5LXR3by1kaXJlY3Rvcmllcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZGlyZWN0b3J5LXR3by1kaXJlY3Rvcmllcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeV9saW5rX2V4aXN0aW5nLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTI5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9FX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnlfbGlua19leGlzdGluZy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmKE5PVCBFWElTVFMgJHtvdXR9L2Rpci9leGlzdGluZy50eHQpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtvdXR9L2Rpci9leGlzdGluZy50eHQgc2hvdWxkIGV4aXN0ICh3ZSBvbmx5IHJlbW92ZWQgdGhlIGxpbmsgdG8gZGlyIGZvbGRlcikiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZGlyZWN0b3J5X2xpbmtfZXhpc3RpbmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeV9saW5rX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2ZpbGVfbGlua19leGlzdGluZy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2ZpbGVfbGlua19leGlzdGluZy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE5YjIwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZmlsZV9saW5rX2V4aXN0aW5nLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoTk9UIEVYSVNUUyAke291dH0vZXhpc3RpbmcudHh0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7b3V0fS9leGlzdGluZy50eHQgc2hvdWxkIGV4aXN0ICh3ZSBvbmx5IHJlbW92ZWQgdGhlIGxpbmspIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2ZpbGVfbGlua19leGlzdGluZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvRV9ybV9yZWN1cnNpdmVfZmlsZV9saW5rX2V4aXN0aW5nLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2ZpbGVfbGlua19ub25fZXhpc3RpbmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL0Vfcm1fcmVjdXJzaXZlX2ZpbGVfbGlua19ub25fZXhpc3RpbmctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUF9hcmJpdHJhcnlfYXJncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1BfYXJiaXRyYXJ5X2FyZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmYWFlMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1BfYXJiaXRyYXJ5X2FyZ3MuY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihOT1QgKCIke0NNQUtFX0FSR1YzfSIgU1RSRVFVQUwgIi0tIiBBTkQgIiR7Q01BS0VfQVJHVjR9IiBTVFJFUVVBTCAiLURGT08iKSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJgLURGT09gIHNob3VsZG4ndCB0cmlnZ2VyIGFuIGVycm9yIGFmdGVyIGAtLWAiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUHJvZmlsaW5nVGVzdC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4ZWFjMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAoraWYgKE5PVCBFWElTVFMgJHtQcm9maWxpbmdUZXN0T3V0cHV0fSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJFeHBlY3RlZCAke1Byb2ZpbGluZ1Rlc3RPdXRwdXR9IHRvIGV4aXN0cyIpCitlbmRpZigpCisKK2ZpbGUoUkVBRCAiJHtQcm9maWxpbmdUZXN0T3V0cHV0fSIgSlNPTl9IRUFERVIgTElNSVQgMikKK2lmIChOT1QgSlNPTl9IRUFERVIgTUFUQ0hFUyAiXlxcW3siKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkV4cGVjdGVkIHZhbGlkIEpTT04gc3RhcnQiKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmaWxlKFNJWkUgIiR7UHJvZmlsaW5nVGVzdE91dHB1dH0iIE9VVFBVVF9TSVpFKQorbWF0aChFWFBSIEVORF9PRkZTRVQgIiR7T1VUUFVUX1NJWkV9IC0yICIpCisKK2ZpbGUoUkVBRCAiJHtQcm9maWxpbmdUZXN0T3V0cHV0fSIgSlNPTl9UUkFJTEVSIE9GRlNFVCAke0VORF9PRkZTRVR9KQoraWYgKE5PVCBKU09OX1RSQUlMRVIgTUFUQ0hFUyAiXn1dJCIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRXhwZWN0ZWQgdmFsaWQgSlNPTiBlbmQiKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmaWxlKFNUUklOR1MgJHtQcm9maWxpbmdUZXN0T3V0cHV0fSB1cHBlckNhc2VDb21tYW5kCisgIFJFR0VYIFtbIm5hbWUiWyBdKjpbIF0qIl9fVEVTVElOR19DT01NQU5EX0NBU0UiXV0pCitpZiAoTk9UICIke3VwcGVyQ2FzZUNvbW1hbmR9IiBTVFJFUVVBTCAiIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJDb21tYW5kIG5hbWUgbm90IHN0b3JlZCBpbiBsb3dlcmNhc2UiKQorZW5kaWYoKQorZmlsZShTVFJJTkdTICR7UHJvZmlsaW5nVGVzdE91dHB1dH0gbG93ZXJDYXNlQ29tbWFuZAorICBSRUdFWCBbWyJuYW1lIlsgXSo6WyBdKiJfX3Rlc3RpbmdfY29tbWFuZF9jYXNlIl1dKQorbGlzdChMRU5HVEggbG93ZXJDYXNlQ29tbWFuZCBudW1JbnZvY2F0aW9ucykKK2lmIChOT1QgbnVtSW52b2NhdGlvbnMgRVFVQUwgMSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVECisgICAgICAiVW5leHBlY3RlZCBudW1iZXIgb2YgbG93ZXJjYXNlIGNvbW1hbmQgbmFtZXM6ICR7bnVtSW52b2NhdGlvbnN9IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1Byb2ZpbGluZ1Rlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9Qcm9maWxpbmdUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjBjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9Qcm9maWxpbmdUZXN0LmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorZnVuY3Rpb24oX190ZXN0aW5nX2NvbW1hbmRfY2FzZSkKK2VuZGZ1bmN0aW9uKCkKKworIyBUaGlzIG11c3Qgbm90IGFwcGVhciBpbiB0aGUgcHJvZmlsaW5nIG91dHB1dCBhcyB1cHBlcmNhc2UKK19fVEVTVElOR19DT01NQU5EX0NBU0UoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGI2MDhkMzMuLmIyMGU2ODMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTIyLDYgKzIyLDcgQEAKIHJ1bl9jbWFrZV9jb21tYW5kKEVfY29tcGFyZV9maWxlcy1pZ25vcmUtZW9sLXNhbWUgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzIC0taWdub3JlLWVvbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2NvbXBhcmVfZmlsZXMvbGYgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9jb21wYXJlX2ZpbGVzL2NybGYpCiBydW5fY21ha2VfY29tbWFuZChFX2NvbXBhcmVfZmlsZXMtaWdub3JlLWVvbC1lbXB0eSAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgLS1pZ25vcmUtZW9sICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vY29tcGFyZV9maWxlcy9lbXB0eTEgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9jb21wYXJlX2ZpbGVzL2VtcHR5MikKIHJ1bl9jbWFrZV9jb21tYW5kKEVfY29tcGFyZV9maWxlcy1pZ25vcmUtZW9sLW5vbmV4aXN0ZW50ICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAtLWlnbm9yZS1lb2wgbm9uZXhpc3RlbnRfYSBub25leGlzdGVudF9iKQorcnVuX2NtYWtlX2NvbW1hbmQoRV9jb21wYXJlX2ZpbGVzLWludmFsaWQtYXJndW1lbnRzICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyBmaWxlMS50eHQgZmlsZTIudHh0IGZpbGUzLnR4dCkKIHJ1bl9jbWFrZV9jb21tYW5kKEVfZWNob19hcHBlbmQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvX2FwcGVuZCkKIHJ1bl9jbWFrZV9jb21tYW5kKEVfcmVuYW1lLW5vLWFyZyAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbmFtZSkKIHJ1bl9jbWFrZV9jb21tYW5kKEVfc2VydmVyLWFyZyAke0NNQUtFX0NPTU1BTkR9IC1FIHNlcnZlciAtLWV4dHJhLWFyZykKQEAgLTQ2LDYgKzQ3LDcgQEAKIHJ1bl9jbWFrZV9jb21tYW5kKEdfYmFkLWFyZyAke0NNQUtFX0NPTU1BTkR9IC1CIER1bW15QnVpbGREaXIgLUcgTm9TdWNoR2VuZXJhdG9yKQogcnVuX2NtYWtlX2NvbW1hbmQoUF9uby1hcmcgJHtDTUFLRV9DT01NQU5EfSAtUCkKIHJ1bl9jbWFrZV9jb21tYW5kKFBfbm8tZmlsZSAke0NNQUtFX0NPTU1BTkR9IC1QIG5vc3VjaHNjcmlwdGZpbGUuY21ha2UpCitydW5fY21ha2VfY29tbWFuZChQX2FyYml0cmFyeV9hcmdzICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7UnVuQ01ha2VfU09VUkNFX0RJUn0vUF9hcmJpdHJhcnlfYXJncy5jbWFrZSIgLS0gLURGT08pCiAKIHJ1bl9jbWFrZV9jb21tYW5kKGJ1aWxkLW5vLWRpcgogICAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQpCkBAIC02NSw2ICs2NywzMiBAQAogcnVuX2NtYWtlX2NvbW1hbmQoaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMKICAgJHtDTUFLRV9DT01NQU5EfSAtLWluc3RhbGwgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9kaXItaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMKICAgLS1zdHJpcCAtLXByZWZpeCAvdmFyL3Rlc3QgLS1jb25maWcgc2FtcGxlIC0tY29tcG9uZW50IHBhY2spCitydW5fY21ha2VfY29tbWFuZChpbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFsbAorICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4LGc9cngsbz1yeCkKK3J1bl9jbWFrZV9jb21tYW5kKGluc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYWZldworICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4LGc9cngpCitydW5fY21ha2VfY29tbWFuZChpbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLW5vbmUKKyAgJHtDTUFLRV9DT01NQU5EfSAtLWluc3RhbGwgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9kaXItcGVybWlzc2lvbnMtaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMpCitydW5fY21ha2VfY29tbWFuZChpbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWExCisgICR7Q01BS0VfQ09NTUFORH0gLS1pbnN0YWxsICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vZGlyLXBlcm1pc3Npb25zLWluc3RhbGwtb3B0aW9ucy10by12YXJzCisgIC0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgdT1yd3hnPSx4KQorcnVuX2NtYWtlX2NvbW1hbmQoaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWNvbW1hMgorICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4Zyw9eCkKK3J1bl9jbWFrZV9jb21tYW5kKGluc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtY29tbWEtYXQtdGhlLWVuZAorICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4LCkKK3J1bl9jbWFrZV9jb21tYW5kKGluc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1hc3NpZ25tZW50CisgICR7Q01BS0VfQ09NTUFORH0gLS1pbnN0YWxsICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vZGlyLXBlcm1pc3Npb25zLWluc3RhbGwtb3B0aW9ucy10by12YXJzCisgIC0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgdT1yd3gsPXgpCitydW5fY21ha2VfY29tbWFuZChpbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFzc2lnbm1lbnQtYXQtdGhlLWVuZAorICAke0NNQUtFX0NPTU1BTkR9IC0taW5zdGFsbCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Rpci1wZXJtaXNzaW9ucy1pbnN0YWxsLW9wdGlvbnMtdG8tdmFycworICAtLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIHU9cnd4LGc9KQorcnVuX2NtYWtlX2NvbW1hbmQoaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hc3NpZ25tZW50LWF0LXRoZS1iZWdpbm5pbmcKKyAgJHtDTUFLRV9DT01NQU5EfSAtLWluc3RhbGwgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9kaXItcGVybWlzc2lvbnMtaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMKKyAgLS1kZWZhdWx0LWRpcmVjdG9yeS1wZXJtaXNzaW9ucyA9dT1yd3gsZz1yeCkKIAogcnVuX2NtYWtlX2NvbW1hbmQoY2FjaGUtYmFkLWVudHJ5CiAgICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2NhY2hlLWJhZC1lbnRyeS8pCkBAIC0xMzMsNiArMTYxLDggQEAKICAgICAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgQnVpbGREaXItYnVpbGQgLS10YXJnZXQgQ3VzdG9tVGFyZ2V0KQogICBydW5fY21ha2VfY29tbWFuZChCdWlsZERpci0tYnVpbGQtbXVsdGlwbGUtdGFyZ2V0cyAke0NNQUtFX0NPTU1BTkR9IC1FIGNoZGlyIC4uCiAgICAgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIEJ1aWxkRGlyLWJ1aWxkIC10IEN1c3RvbVRhcmdldDIgLS10YXJnZXQgQ3VzdG9tVGFyZ2V0MykKKyAgcnVuX2NtYWtlX2NvbW1hbmQoQnVpbGREaXItLWJ1aWxkLW11bHRpcGxlLXRhcmdldHMtZmFpbCAke0NNQUtFX0NPTU1BTkR9IC1FIGNoZGlyIC4uCisgICAgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIEJ1aWxkRGlyLWJ1aWxkIC10IEN1c3RvbVRhcmdldEZhaWwgLS10YXJnZXQgQ3VzdG9tVGFyZ2V0MykKICAgcnVuX2NtYWtlX2NvbW1hbmQoQnVpbGREaXItLWJ1aWxkLW11bHRpcGxlLXRhcmdldHMtam9icyAke0NNQUtFX0NPTU1BTkR9IC1FIGNoZGlyIC4uCiAgICAgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIEJ1aWxkRGlyLWJ1aWxkIC0tdGFyZ2V0IEN1c3RvbVRhcmdldCBDdXN0b21UYXJnZXQyIC1qMiAtLXRhcmdldCBDdXN0b21UYXJnZXQzKQogICBydW5fY21ha2VfY29tbWFuZChCdWlsZERpci0tYnVpbGQtbXVsdGlwbGUtdGFyZ2V0cy13aXRoLWNsZWFuLWZpcnN0ICR7Q01BS0VfQ09NTUFORH0gLUUgY2hkaXIgLi4KQEAgLTI1NCw2ICsyODQsMjQgQEAKIGVuZGZ1bmN0aW9uKCkKIHJ1bl9FbnZpcm9ubWVudEdlbmVyYXRvcigpCiAKK2Z1bmN0aW9uKHJ1bl9FbnZpcm9ubWVudEV4cG9ydENvbXBpbGVDb21tYW5kcykKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfU09VUkNFX0RJUiAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L2Vudi1leHBvcnQtY29tcGlsZS1jb21tYW5kcykKKworICBydW5fY21ha2UoZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLXVuc2V0KQorCisgIHNldChFTlZ7Q01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFN9IE9OKQorICBydW5fY21ha2UoZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLXNldCkKKworICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFM9T0ZGKQorICBydW5fY21ha2UoZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLW92ZXJyaWRlKQorCisgIHVuc2V0KEVOVntDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EU30pCitlbmRmdW5jdGlvbihydW5fRW52aXJvbm1lbnRFeHBvcnRDb21waWxlQ29tbWFuZHMpCisKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJVbml4IE1ha2VmaWxlcyIgT1IgUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIk5pbmphIikKKyAgcnVuX0Vudmlyb25tZW50RXhwb3J0Q29tcGlsZUNvbW1hbmRzKCkKK2VuZGlmKCkKKwogaWYoUnVuQ01ha2VfR0VORVJBVE9SIFNUUkVRVUFMICJOaW5qYSIpCiAgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCiAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9CdWlsZC1idWlsZCkKQEAgLTMwMCw2ICszNDgsNDIgQEAKICAgJHtDTUFLRV9DT01NQU5EfSAtRSBjcmVhdGVfc3ltbGluayBUIC4KICAgKQogCisjY3JlYXRlIGhhcmQgbGluayB0ZXN0cworcnVuX2NtYWtlX2NvbW1hbmQoRV9jcmVhdGVfaGFyZGxpbmstbm8tYXJnCisgICR7Q01BS0VfQ09NTUFORH0gLUUgY3JlYXRlX2hhcmRsaW5rCisgICkKKworc2V0KGRpciAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L2hhcmRsaW5rX3Rlc3RzKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtkaXJ9IikKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtkaXJ9KQorCitydW5fY21ha2VfY29tbWFuZChFX2NyZWF0ZV9oYXJkbGluay1ub24tZXhpc3RlbnQtc291cmNlCisgICR7Q01BS0VfQ09NTUFORH0gLUUgY3JlYXRlX2hhcmRsaW5rICR7ZGlyfS9JX2RvbnRfZXhpc3QgJHtkaXJ9L2xpbmsKKyAgKQorCitmaWxlKFRPVUNIICR7ZGlyfS8xKQorCitydW5fY21ha2VfY29tbWFuZChFX2NyZWF0ZV9oYXJkbGluay1vaworICAke0NNQUtFX0NPTU1BTkR9IC1FIGNyZWF0ZV9oYXJkbGluayAke2Rpcn0vMSAke2Rpcn0vMS1saW5rCisgICkKKworcnVuX2NtYWtlX2NvbW1hbmQoRV9jcmVhdGVfaGFyZGxpbmstbm8tZGlyZWN0b3J5CisgICR7Q01BS0VfQ09NTUFORH0gLUUgY3JlYXRlX2hhcmRsaW5rICR7ZGlyfS8xICR7ZGlyfS9hLzEtbGluaworICApCisKKyNPbiBXaW5kb3dzLCBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHN1ZmZpY2llbnQgcHJpdmlsZWdlcworI2Rvbid0IGZhaWwgdGhpcyB0ZXN0CitzZXQoUnVuQ01ha2VfREVGQVVMVF9zdGRlcnIgIihvcGVyYXRpb24gbm90IHBlcm1pdHRlZCk/IikKK3J1bl9jbWFrZV9jb21tYW5kKEVfY3JlYXRlX2hhcmRsaW5rLXVucmVzb2x2ZWQtc3ltbGluay1wcmVyZXEKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBjcmVhdGVfc3ltbGluayAke2Rpcn0vMSAke2Rpcn0vMS1zeW1saW5rCisgICkKK2ZpbGUoUkVNT1ZFICR7ZGlyfS8xKQorCitydW5fY21ha2VfY29tbWFuZChFX2NyZWF0ZV9oYXJkbGluay11bnJlc29sdmVkLXN5bWxpbmsKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBjcmVhdGVfaGFyZGxpbmsgJHtkaXJ9LzEtc3ltbGluayAke2Rpcn0vMXMtbGluaworICApCit1bnNldChSdW5DTWFrZV9ERUZBVUxUX3N0ZGVycikKKwogc2V0KGluICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vY29weV9pbnB1dCkKIHNldChvdXQgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9jb3B5X291dHB1dCkKIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7b3V0fSIpCkBAIC0zNzAsNiArNDU0LDExNCBAQAogdW5zZXQob3V0KQogdW5zZXQob3V0ZmlsZSkKIAorc2V0KG91dCAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L3JtX3Rlc3RzKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtvdXR9IikKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtvdXR9KQorZmlsZShUT1VDSCAke291dH0vZXhpc3RpbmcudHh0KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9maWxlX2ZvcmNlX2V4aXN0aW5nCisgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLWYgJHtvdXR9L2V4aXN0aW5nLnR4dCkKK2ZpbGUoVE9VQ0ggJHtvdXR9L2V4aXN0aW5nLnR4dCkKK3J1bl9jbWFrZV9jb21tYW5kKEVfcm1fZmlsZV9ub25fZm9yY2VfZXhpc3RpbmcKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAke291dH0vZXhpc3RpbmcudHh0KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9maWxlX2ZvcmNlX25vbl9leGlzdGluZworICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1mICR7b3V0fS9ub3RfZXhpc3RpbmcudHh0KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9maWxlX25vbl9mb3JjZV9ub25fZXhpc3RpbmcKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAke291dH0vbm90X2V4aXN0aW5nLnR4dCkKKworZmlsZShUT1VDSCAke291dH0vZXhpc3RpbmcudHh0KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9maWxlX3JlY3Vyc2l2ZV9leGlzdGluZworICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yICR7b3V0fS9leGlzdGluZy50eHQpCitydW5fY21ha2VfY29tbWFuZChFX3JtX2ZpbGVfcmVjdXJzaXZlX25vbl9leGlzdGluZworICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yICR7b3V0fS9ub3RfZXhpc3RpbmcudHh0KQorCitmaWxlKE1BS0VfRElSRUNUT1JZICR7b3V0fS9kMSAke291dH0vZDIpCitydW5fY21ha2VfY29tbWFuZChFX3JtX25vbl9yZWN1cnNpdmVfZGlyZWN0b3J5LXR3by1kaXJlY3RvcmllcworICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtICR7b3V0fS9kMSAke291dH0vZDIpCisKK3J1bl9jbWFrZV9jb21tYW5kKEVfcm1fcmVjdXJzaXZlX2RpcmVjdG9yeS10d28tZGlyZWN0b3JpZXMKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtUiAke291dH0vZDEgJHtvdXR9L2QyKQorCitydW5fY21ha2VfY29tbWFuZChFX3JtX25vX2ZpbGVfc3BlY2lmaWVkCisgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmKQorCitydW5fY21ha2VfY29tbWFuZChFX3JtX2VtcHR5X2ZpbGVfc3BlY2lmaWVkCisgICR7Q01BS0VfQ09NTUFORH0gLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9FX3JtX2VtcHR5X2ZpbGVfc3BlY2lmaWVkLmNtYWtlKQorCitydW5fY21ha2VfY29tbWFuZChFX3JtX2JhZF9hcmd1bWVudAorICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZCAke291dH0vZDEgJHtvdXR9L2QyKQorCitmaWxlKE1BS0VfRElSRUNUT1JZICR7b3V0fS9kMSAke291dH0vZDIpCitmaWxlKFdSSVRFICR7b3V0fS90ZXN0LnR4dCAiIikKK3J1bl9jbWFrZV9jb21tYW5kKEVfcm1fZm9yY2VfcmVjdXJzaXZlX2RpcmVjdG9yeV93aXRoX2ZpbGVzCisgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmICR7b3V0fS8pCisKK3J1bl9jbWFrZV9jb21tYW5kKEVfcm1fZm9yY2VfcmVjdXJzaXZlX25vbl9leGlzdGluZ19maWxlCisgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLVJmICR7b3V0fS90ZXN0LnR4dCkKKworaWYoTk9UIFdJTjMyIEFORCBOT1QgQ1lHV0lOKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICR7b3V0fSkKKyAgZmlsZShUT1VDSCAke291dH0vZXhpc3RpbmcudHh0KQorICBmaWxlKE1BS0VfRElSRUNUT1JZICR7b3V0fS9kaXIpCisgIGZpbGUoVE9VQ0ggJHtvdXR9L2Rpci9leGlzdGluZy50eHQpICMgYWRkIGEgZmlsZSBpbiB0aGUgZm9sZGVyCisgIGZpbGUoQ1JFQVRFX0xJTksgJHtvdXR9L2RpciAke291dH0vbGlua19kaXIgU1lNQk9MSUMpCisgIGZpbGUoQ1JFQVRFX0xJTksgJHtvdXR9L2V4aXN0aW5nLnR4dCAke291dH0vZXhpc3RpbmdfZmlsZV9saW5rLnR4dCBTWU1CT0xJQykKKyAgZmlsZShDUkVBVEVfTElOSyAke291dH0vbm9uX2V4aXN0aW5nLnR4dCAke291dH0vbm9uX2V4aXN0aW5nX2ZpbGVfbGluay50eHQgU1lNQk9MSUMpCisgIHJ1bl9jbWFrZV9jb21tYW5kKEVfcm1fZmlsZV9saW5rX2V4aXN0aW5nCisgICAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAke291dH0vZXhpc3RpbmdfZmlsZV9saW5rLnR4dCkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoRV9ybV9kaXJlY3RvcnlfbGlua19leGlzdGluZworICAgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gJHtvdXR9L2xpbmtfZGlyKQorICBydW5fY21ha2VfY29tbWFuZChFX3JtX2ZpbGVfbGlua19ub25fZXhpc3RpbmcKKyAgICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtICR7b3V0fS9ub25fZXhpc3RpbmdfZmlsZV9saW5rLnR4dCkKKworICBmaWxlKENSRUFURV9MSU5LICR7b3V0fS9kaXIgJHtvdXR9L2xpbmtfZGlyIFNZTUJPTElDKQorICBmaWxlKENSRUFURV9MSU5LICR7b3V0fS9leGlzdGluZy50eHQgJHtvdXR9L2V4aXN0aW5nX2ZpbGVfbGluay50eHQgU1lNQk9MSUMpCisgIGZpbGUoQ1JFQVRFX0xJTksgJHtvdXR9L25vbl9leGlzdGluZy50eHQgJHtvdXR9L25vbl9leGlzdGluZ19maWxlX2xpbmsudHh0IFNZTUJPTElDKQorICBydW5fY21ha2VfY29tbWFuZChFX3JtX3JlY3Vyc2l2ZV9maWxlX2xpbmtfZXhpc3RpbmcKKyAgICAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1SICR7b3V0fS9leGlzdGluZ19maWxlX2xpbmsudHh0KQorICBydW5fY21ha2VfY29tbWFuZChFX3JtX3JlY3Vyc2l2ZV9kaXJlY3RvcnlfbGlua19leGlzdGluZworICAgICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXIgJHtvdXR9L2xpbmtfZGlyKQorICBydW5fY21ha2VfY29tbWFuZChFX3JtX3JlY3Vyc2l2ZV9maWxlX2xpbmtfbm9uX2V4aXN0aW5nCisgICAgJHtDTUFLRV9DT01NQU5EfSAtRSBybSAtciAke291dH0vbm9uX2V4aXN0aW5nX2ZpbGVfbGluay50eHQpCitlbmRpZigpCit1bnNldChvdXQpCisKKyMgY2F0IHRlc3RzCitzZXQob3V0ICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vY2F0X3Rlc3RzKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtvdXR9IikKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtvdXR9KQorcnVuX2NtYWtlX2NvbW1hbmQoRV9jYXRfbm9uX2V4aXN0aW5nX2ZpbGUKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBjYXQgJHtvdXR9L25vbi1leGlzdGluZy1maWxlLnR4dCkKKworaWYoVU5JWCkKKyAgIyB0ZXN0IG5vbiByZWFkYWJsZSBmaWxlIG9ubHkgaWYgbm90IHJvb3QKKyAgZXhlY3V0ZV9wcm9jZXNzKAorICAgIENPTU1BTkQgaWQgLXUgJEVOVntVU0VSfQorICAgIE9VVFBVVF9WQVJJQUJMRSB1aWQKKyAgICBPVVRQVVRfU1RSSVBfVFJBSUxJTkdfV0hJVEVTUEFDRSkKKworICBpZihOT1QgIiR7dWlkfSIgU1RSRVFVQUwgIjAiKQorICAgICMgQ3JlYXRlIG5vbiByZWFkYWJsZSBmaWxlCisgICAgc2V0KGluc2lkZV9mb2xkZXIgIiR7b3V0fS9pbiIpCisgICAgZmlsZShNQUtFX0RJUkVDVE9SWSAke2luc2lkZV9mb2xkZXJ9KQorICAgIGZpbGUoV1JJVEUgIiR7aW5zaWRlX2ZvbGRlcn0vbm9uX3JlYWRhYmxlX2ZpbGUudHh0IiAiZmlyc3QgZmlsZSB0byBhcHBlbmRcbiIpCisgICAgZmlsZShDT1BZICIke2luc2lkZV9mb2xkZXJ9L25vbl9yZWFkYWJsZV9maWxlLnR4dCIgREVTVElOQVRJT04gIiR7b3V0fSIgRklMRV9QRVJNSVNTSU9OUyBPV05FUl9XUklURSkKKyAgICBydW5fY21ha2VfY29tbWFuZChFX2NhdF9ub25fcmVhZGFibGVfZmlsZQorICAgICAgJHtDTUFLRV9DT01NQU5EfSAtRSBjYXQgIiR7b3V0fS9ub25fcmVhZGFibGVfZmlsZS50eHQiKQorICBlbmRpZigpCitlbmRpZigpCisKK3J1bl9jbWFrZV9jb21tYW5kKEVfY2F0X29wdGlvbl9ub3RfaGFuZGxlZAorICAke0NNQUtFX0NPTU1BTkR9IC1FIGNhdCAtZikKKworcnVuX2NtYWtlX2NvbW1hbmQoRV9jYXRfZGlyZWN0b3J5CisgICR7Q01BS0VfQ09NTUFORH0gLUUgY2F0ICR7b3V0fSkKKworZmlsZShXUklURSAiJHtvdXR9L2ZpcnN0X2ZpbGUudHh0IiAiZmlyc3QgZmlsZSB0byBhcHBlbmRcbiIpCitmaWxlKFdSSVRFICIke291dH0vc2Vjb25kX2ZpbGUudHh0IiAic2Vjb25kIGZpbGUgdG8gYXBwZW5kXG4iKQorZmlsZShXUklURSAiJHtvdXR9L3VuaWNvZGVfZmlsZS50eHQiICLDoMOpw7nDpyAtIO2VnOq1reyWtCIpICMgS29yZWFuIGluIEtvcmVhbgorcnVuX2NtYWtlX2NvbW1hbmQoRV9jYXRfZ29vZF9jYXQKKyAgJHtDTUFLRV9DT01NQU5EfSAtRSBjYXQgIiR7b3V0fS9maXJzdF9maWxlLnR4dCIgIiR7b3V0fS9zZWNvbmRfZmlsZS50eHQiICIke291dH0vdW5pY29kZV9maWxlLnR4dCIpCit1bnNldChvdXQpCiAKIHJ1bl9jbWFrZV9jb21tYW5kKEVfZW52LW5vLWNvbW1hbmQwICR7Q01BS0VfQ09NTUFORH0gLUUgZW52KQogcnVuX2NtYWtlX2NvbW1hbmQoRV9lbnYtbm8tY29tbWFuZDEgJHtDTUFLRV9DT01NQU5EfSAtRSBlbnYgVEVTVF9FTlY9MSkKQEAgLTUxOSw2ICs3MTEsMTQgQEAKIHJ1bl9jbWFrZSh0cmFjZS1yZWRpcmVjdC1ub2ZpbGUpCiB1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCiAKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgLS10cmFjZSAgICAgICAgLS10cmFjZS1mb3JtYXQ9anNvbi12MSAtLXRyYWNlLXJlZGlyZWN0PSR7UnVuQ01ha2VfQklOQVJZX0RJUn0vanNvbi12MS50cmFjZSkKK3J1bl9jbWFrZSh0cmFjZS1qc29uLXYxKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC0tdHJhY2UtZXhwYW5kIC0tdHJhY2UtZm9ybWF0PWpzb24tdjEgLS10cmFjZS1yZWRpcmVjdD0ke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L2pzb24tdjEtZXhwYW5kLnRyYWNlKQorcnVuX2NtYWtlKHRyYWNlLWpzb24tdjEtZXhwYW5kKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCiBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1Xbm8tZGVwcmVjYXRlZCAtLXdhcm4tdW5pbml0aWFsaXplZCkKIHJ1bl9jbWFrZSh3YXJuLXVuaW5pdGlhbGl6ZWQpCiB1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCkBAIC01NzEsMyArNzcxLDU0IEBACiAgIHJ1bl9jbWFrZV9jb21tYW5kKGNsb3NlZF9zdGRlcnIgc2ggLWMgIlwiJHtDTUFLRV9DT01NQU5EfVwiIC0tdmVyc2lvbiAyPiYtIikKICAgcnVuX2NtYWtlX2NvbW1hbmQoY2xvc2VkX3N0ZGFsbCBzaCAtYyAiXCIke0NNQUtFX0NPTU1BTkR9XCIgLS12ZXJzaW9uIDwmLSA+Ji0gMj4mLSIpCiBlbmRpZigpCisKK2Z1bmN0aW9uKHJ1bl9sbHZtX3JjKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L2xsdm1fcmMtYnVpbGQiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBydW5fY21ha2VfY29tbWFuZChsbHZtX3JjX25vX2FyZ3MgJHtDTUFLRV9DT01NQU5EfSAtRSBjbWFrZV9sbHZtX3JjKQorICBydW5fY21ha2VfY29tbWFuZChsbHZtX3JjX25vXy0tICR7Q01BS0VfQ09NTUFORH0gLUUgY21ha2VfbGx2bV9yYyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vc291cmNlX2ZpbGUgdGVzdC50bXAgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICJUaGlzIGlzIGEgdGVzdCIpCisgIHJ1bl9jbWFrZV9jb21tYW5kKGxsdm1fcmNfZW1wdHlfcHJlcHJvY2Vzc29yICR7Q01BS0VfQ09NTUFORH0gLUUgY21ha2VfbGx2bV9yYyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vc291cmNlX2ZpbGUgdGVzdC50bXAgLS0gJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICJUaGlzIGlzIGEgdGVzdCIpCisgIHJ1bl9jbWFrZV9jb21tYW5kKGxsdm1fcmNfZmFpbGluZ19maXJzdF9jb21tYW5kICR7Q01BS0VfQ09NTUFORH0gLUUgY21ha2VfbGx2bV9yYyAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vc291cmNlX2ZpbGUgdGVzdC50bXAgJHtDTUFLRV9DT01NQU5EfSAtUCBGYWlsZWRQcm9ncmFtLmNtYWtlIC0tICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAiVGhpcyBpcyBhIHRlc3QiKQorICBydW5fY21ha2VfY29tbWFuZChsbHZtX3JjX2ZhaWxpbmdfc2Vjb25kX2NvbW1hbmQgJHtDTUFLRV9DT01NQU5EfSAtRSBjbWFrZV9sbHZtX3JjICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9zb3VyY2VfZmlsZSB0ZXN0LnRtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gIlRoaXMgaXMgYSB0ZXN0IiAtLSAke0NNQUtFX0NPTU1BTkR9IC1QIEZhaWxlZFByb2dyYW0uY21ha2UgKQorICBpZihFWElTVFMgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3Rlc3QudG1wKQorICAgICAgbWVzc2FnZShTRU5EX0VSUk9SICIke3Rlc3R9IC0gRkFJTEVEOlxuIgorICAgICAgICAidGVzdC50bXAgd2FzIG5vdCBkZWxldGVkIikKKyAgZW5kaWYoKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vRXhwYW5kU291cmNlRGlyIikKKyAgcnVuX2NtYWtlX2NvbW1hbmQobGx2bV9yY19mdWxsX3J1biAke0NNQUtFX0NPTU1BTkR9IC1FIGNtYWtlX2xsdm1fcmMgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0V4cGFuZFNvdXJjZURpci9zb3VyY2VfZmlsZSB0ZXN0LnRtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gIlRoaXMgaXMgYSB0ZXN0IiAtLSAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkgdGVzdC50bXAgU09VUkNFX0RJUi9sbHZtcmMucmVzdWx0ICkKKyAgaWYoRVhJU1RTICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9FeHBhbmRTb3VyY2VEaXIvdGVzdC50bXApCisgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgIiR7dGVzdH0gLSBGQUlMRUQ6XG4iCisgICAgICAgICJ0ZXN0LnRtcCB3YXMgbm90IGRlbGV0ZWQiKQorICBlbmRpZigpCisgIGZpbGUoUkVBRCAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vRXhwYW5kU291cmNlRGlyL2xsdm1yYy5yZXN1bHQgTExWTVJDX1JFU1VMVCkKKyAgaWYoTk9UICIke0xMVk1SQ19SRVNVTFR9IiBTVFJFUVVBTCAiVGhpcyBpcyBhIHRlc3RcbiIpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICIke3Rlc3R9IC0gRkFJTEVEOlxuIgorICAgICAgICAibGx2bXJjLnJlc3VsdCB3YXMgbm90IGNyZWF0ZWQiKQorICBlbmRpZigpCisgIHVuc2V0KExMVk1SQ19SRVNVTFQpCitlbmRmdW5jdGlvbigpCitydW5fbGx2bV9yYygpCisKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgLS1wcm9maWxpbmctb3V0cHV0PS9uby9zdWNoL2ZpbGUudHh0IC0tcHJvZmlsaW5nLWZvcm1hdD1nb29nbGUtdHJhY2UpCitydW5fY21ha2UocHJvZmlsaW5nLWFsbC1wYXJhbXMpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCisKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgLS1wcm9maWxpbmctb3V0cHV0PS9uby9zdWNoL2ZpbGUudHh0IC0tcHJvZmlsaW5nLWZvcm1hdD1pbnZhbGlkLWZvcm1hdCkKK3J1bl9jbWFrZShwcm9maWxpbmctaW52YWxpZC1mb3JtYXQpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCisKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgLS1wcm9maWxpbmctb3V0cHV0PS9uby9zdWNoL2ZpbGUudHh0KQorcnVuX2NtYWtlKHByb2ZpbGluZy1taXNzaW5nLWZvcm1hdCkKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtLXByb2ZpbGluZy1mb3JtYXQ9Z29vZ2xlLXRyYWNlKQorcnVuX2NtYWtlKHByb2ZpbGluZy1taXNzaW5nLW91dHB1dCkKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9wcm9maWxpbmctdGVzdCIpCitzZXQoUHJvZmlsaW5nVGVzdE91dHB1dCAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vb3V0cHV0Lmpzb24pCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC0tcHJvZmlsaW5nLWZvcm1hdD1nb29nbGUtdHJhY2UgLS1wcm9maWxpbmctb3V0cHV0PSR7UHJvZmlsaW5nVGVzdE91dHB1dH0pCitydW5fY21ha2UoUHJvZmlsaW5nVGVzdCkKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2NtYWtlX2RlcGVuZHMvdGVzdF9VVEYtMTZMRS5oIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvY21ha2VfZGVwZW5kcy90ZXN0X1VURi0xNkxFLmgKaW5kZXggYmY1NmVjNi4uMmQzOTE3OCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvY21ha2VfZGVwZW5kcy90ZXN0X1VURi0xNkxFLmgKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvY21ha2VfZGVwZW5kcy90ZXN0X1VURi0xNkxFLmgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZGlyLXBlcm1pc3Npb25zLWluc3RhbGwtb3B0aW9ucy10by12YXJzL2NtYWtlX2luc3RhbGwuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9kaXItcGVybWlzc2lvbnMtaW5zdGFsbC1vcHRpb25zLXRvLXZhcnMvY21ha2VfaW5zdGFsbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmVmNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZGlyLXBlcm1pc3Npb25zLWluc3RhbGwtb3B0aW9ucy10by12YXJzL2NtYWtlX2luc3RhbGwuY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TKQorICBtZXNzYWdlKCJDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TIGlzICR7Q01BS0VfSU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OU30iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLW92ZXJyaWRlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLW92ZXJyaWRlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMmExYWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtb3ZlcnJpZGUtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihFWElTVFMgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9jb21waWxlX2NvbW1hbmRzLmpzb24iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImNvbXBpbGVfY29tbWFuZHMuanNvbiBnZW5lcmF0ZWQgd2l0aCBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyBvdmVycmlkZGVuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2Vudi1leHBvcnQtY29tcGlsZS1jb21tYW5kcy1zZXQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtc2V0LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NDlhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtc2V0LWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAoraWYoTk9UIEVYSVNUUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2NvbXBpbGVfY29tbWFuZHMuanNvbiIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiY29tcGlsZV9jb21tYW5kcy5qc29uIG5vdCBnZW5lcmF0ZWQgd2l0aCBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyBzZXQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLXVuc2V0LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzLXVuc2V0LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODc4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMtdW5zZXQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitpZihFWElTVFMgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9jb21waWxlX2NvbW1hbmRzLmpzb24iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImNvbXBpbGVfY29tbWFuZHMuanNvbiBnZW5lcmF0ZWQgd2l0aCBDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyB1bnNldCIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9lbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2ZmJmZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2Vudi1leHBvcnQtY29tcGlsZS1jb21tYW5kcy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDcgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE0KQorcHJvamVjdChlbnYtZXhwb3J0LWNvbXBpbGUtY29tbWFuZHMgQykKKworIyBBZGQgdGFyZ2V0IHdpdGggYSBzb3VyY2UgZmlsZSB0byBtYWtlIHN1cmUgY29tcGlsZV9jb21tYW5kcy5qc29uIGdldHMKKyMgZ2VuZXJhdGVkLgorZmlsZShUT1VDSCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbWFpbi5jKQorYWRkX2V4ZWN1dGFibGUoZW52LWV4cG9ydC1jb21waWxlLWNvbW1hbmRzICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9tYWluLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFmZXctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYWZldy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFmZXctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYWZldy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjRiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFmZXctc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TIGlzIE9XTkVSX1JFQUQ7T1dORVJfV1JJVEU7T1dORVJfRVhFQ1VURTtHUk9VUF9SRUFEO0dST1VQX0VYRUNVVEUKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYWxsLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hbGwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTNkOWMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TIGlzIE9XTkVSX1JFQUQ7T1dORVJfV1JJVEU7T1dORVJfRVhFQ1VURTtHUk9VUF9SRUFEO0dST1VQX0VYRUNVVEU7V09STERfUkVBRDtXT1JMRF9FWEVDVVRFCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hc3NpZ25tZW50LWF0LXRoZS1iZWdpbm5pbmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFzc2lnbm1lbnQtYXQtdGhlLWJlZ2lubmluZy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFzc2lnbm1lbnQtYXQtdGhlLWJlZ2lubmluZy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hc3NpZ25tZW50LWF0LXRoZS1iZWdpbm5pbmctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjgwOTUyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hc3NpZ25tZW50LWF0LXRoZS1iZWdpbm5pbmctc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACistLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIGlzIGluIGluY29ycmVjdCBmb3JtYXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtYXNzaWdubWVudC1hdC10aGUtZW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFzc2lnbm1lbnQtYXQtdGhlLWVuZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWFzc2lnbm1lbnQtYXQtdGhlLWVuZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hc3NpZ25tZW50LWF0LXRoZS1lbmQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjgwOTMyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1hc3NpZ25tZW50LWF0LXRoZS1lbmQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitDTUFLRV9JTlNUQUxMX0RFRkFVTFRfRElSRUNUT1JZX1BFUk1JU1NJT05TIGlzIE9XTkVSX1JFQUQ7T1dORVJfV1JJVEU7T1dORVJfRVhFQ1VURQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy11bnN1cHBvcnRlZC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1jb21tYS1hdC10aGUtZW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtdW5zdXBwb3J0ZWQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1jb21tYS1hdC10aGUtZW5kLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtY29tbWEtYXQtdGhlLWVuZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1jb21tYS1hdC10aGUtZW5kLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4MDk1MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtY29tbWEtYXQtdGhlLWVuZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKKy0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgaXMgaW4gaW5jb3JyZWN0IGZvcm1hdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1hc3NpZ25tZW50LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWFzc2lnbm1lbnQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWFzc2lnbm1lbnQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1hc3NpZ25tZW50LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4MDk1MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1hc3NpZ25tZW50LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorLS1kZWZhdWx0LWRpcmVjdG9yeS1wZXJtaXNzaW9ucyBpcyBpbiBpbmNvcnJlY3QgZm9ybWF0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWExLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWExLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1jb21tYTEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1jb21tYTEtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjgwOTUyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWNvbW1hMS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKKy0tZGVmYXVsdC1kaXJlY3RvcnktcGVybWlzc2lvbnMgaXMgaW4gaW5jb3JyZWN0IGZvcm1hdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWNvbW1hMi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMi1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1pbnZhbGlkLWNvbW1hMi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWEyLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9pbnN0YWxsLWRlZmF1bHQtZGlyLXBlcm1pc3Npb25zLWludmFsaWQtY29tbWEyLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4MDk1MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtaW52YWxpZC1jb21tYTItc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACistLWRlZmF1bHQtZGlyZWN0b3J5LXBlcm1pc3Npb25zIGlzIGluIGluY29ycmVjdCBmb3JtYXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtbm9uZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1ub25lLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtbm9uZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvaW5zdGFsbC1kZWZhdWx0LWRpci1wZXJtaXNzaW9ucy1ub25lLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmMzI5MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2luc3RhbGwtZGVmYXVsdC1kaXItcGVybWlzc2lvbnMtbm9uZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK14kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19lbXB0eV9wcmVwcm9jZXNzb3ItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2VtcHR5X3ByZXByb2Nlc3Nvci1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2VtcHR5X3ByZXByb2Nlc3Nvci1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19lbXB0eV9wcmVwcm9jZXNzb3Itc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjY5MzY2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19lbXB0eV9wcmVwcm9jZXNzb3Itc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitFbXB0eSBwcmVwcm9jZXNzaW5nIGNvbW1hbmQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfZmFpbGluZ19maXJzdF9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2ZhaWxpbmdfZmlyc3RfY29tbWFuZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2ZhaWxpbmdfZmlyc3RfY29tbWFuZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19mYWlsaW5nX2ZpcnN0X2NvbW1hbmQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjViNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19mYWlsaW5nX2ZpcnN0X2NvbW1hbmQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitDTWFrZSBFcnJvcgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19mYWlsaW5nX3NlY29uZF9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2ZhaWxpbmdfc2Vjb25kX2NvbW1hbmQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19mYWlsaW5nX3NlY29uZF9jb21tYW5kLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX2ZhaWxpbmdfc2Vjb25kX2NvbW1hbmQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjViNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19mYWlsaW5nX3NlY29uZF9jb21tYW5kLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorQ01ha2UgRXJyb3IKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX25vXy0tLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19ub18tLS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX25vXy0tLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX25vXy0tLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMxNDBiNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfbm9fLS0tc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitFbXB0eSByZXNvdXJjZSBjb21waWxhdGlvbiBjb21tYW5kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS90YXJnZXRfY29tbWFuZHMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL2xsdm1fcmNfbm9fYXJncy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX25vX2FyZ3MtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19ub19hcmdzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9sbHZtX3JjX25vX2FyZ3Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjZiNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvbGx2bV9yY19ub19hcmdzLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorSW52YWxpZCBjbWFrZV9sbHZtX3JjIGFyZ3VtZW50cwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1hbGwtcGFyYW1zLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWFsbC1wYXJhbXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLWFsbC1wYXJhbXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1hbGwtcGFyYW1zLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1YzM3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1hbGwtcGFyYW1zLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXi4qQ291bGQgbm90IHN0YXJ0IHByb2ZpbGluZzogVW5hYmxlIHRvIG9wZW46IC9uby9zdWNoL2ZpbGUudHh0JApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1pbnZhbGlkLWZvcm1hdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1pbnZhbGlkLWZvcm1hdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctaW52YWxpZC1mb3JtYXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1pbnZhbGlkLWZvcm1hdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OWJjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctaW52YWxpZC1mb3JtYXQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACiteLipJbnZhbGlkIGZvcm1hdCBzcGVjaWZpZWQgZm9yIC0tcHJvZmlsaW5nLWZvcm1hdCQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1mb3JtYXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1mb3JtYXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLW1pc3NpbmctZm9ybWF0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS9wcm9maWxpbmctbWlzc2luZy1mb3JtYXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTliYzNhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLW1pc3NpbmctZm9ybWF0LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXi4qSW52YWxpZCBmb3JtYXQgc3BlY2lmaWVkIGZvciAtLXByb2ZpbGluZy1mb3JtYXQkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLW1pc3Npbmctb3V0cHV0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLW1pc3Npbmctb3V0cHV0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1taXNzaW5nLW91dHB1dC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvcHJvZmlsaW5nLW1pc3Npbmctb3V0cHV0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiMGM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3Byb2ZpbGluZy1taXNzaW5nLW91dHB1dC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK14uKi0tcHJvZmlsaW5nLWZvcm1hdCBzcGVjaWZpZWQgYnV0IG5vIC0tcHJvZmlsaW5nLW91dHB1dCEkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvdHJhY2UtanNvbi12MS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmFmMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvdHJhY2UtanNvbi12MS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDExIEBACitpZihQWVRIT05fRVhFQ1VUQUJMRSkKKyAgZXhlY3V0ZV9wcm9jZXNzKAorICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gIiR7UnVuQ01ha2VfU09VUkNFX0RJUn0vdHJhY2UtanNvbi12MS1jaGVjay5weSIgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vanNvbi12MS50cmFjZSIKKyAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CisgICAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAorICAgIEVSUk9SX1ZBUklBQkxFIG91dHB1dAorICAgICkKKyAgaWYoTk9UIHJlc3VsdCBFUVVBTCAwKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiSlNPTiB0cmFjZSB2YWxpZGF0aW9uIGZhaWxlZDpcbiR7b3V0cHV0fSIpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtY2hlY2sucHkgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLWNoZWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2MTdiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLWNoZWNrLnB5CkBAIC0wLDAgKzEsNzYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDM6CisgICAgdW5pY29kZSA9IHN0cgorCit0cmFjZV9maWxlID0gTm9uZQorZXhwYW5kID0gRmFsc2UKKworZm9yIGkgaW4gc3lzLmFyZ3ZbMTpdOgorICAgIGlmIHRyYWNlX2ZpbGUgaXMgTm9uZSBhbmQgbm90IGkuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICB0cmFjZV9maWxlID0gaQorICAgICAgICBjb250aW51ZQorCisgICAgaWYgaSBpbiBbJy1lJywgJy0tZXhwYW5kJ106CisgICAgICAgIGV4cGFuZCA9IFRydWUKKworYXNzZXJ0IHRyYWNlX2ZpbGUgaXMgbm90IE5vbmUKK2Fzc2VydCBvcy5wYXRoLmV4aXN0cyh0cmFjZV9maWxlKQorCitpZiBleHBhbmQ6CisgICAgbXNnX2FyZ3MgPSBbJ1NUQVRVUycsICdmZmYnLCAnZmZmO3NzczsgIFNQQUNFUyAhISEgICcsICcgNDIgIHNwYWNlIGluIHN0cmluZyEnLCAnICBTUEFDRVMgISEhICAnXQorZWxzZToKKyAgICBtc2dfYXJncyA9IFsnU1RBVFVTJywgJ2ZmZicsICcke0FTREZ9JywgJyAke0ZPT30gJHtCQVJ9JywgJyAgU1BBQ0VTICEhISAgJ10KKworcmVxdWlyZWRfdHJhY2VzID0gWworICAgIHsKKyAgICAgICAgJ2FyZ3MnOiBbJ1NUQVRVUycsICdKU09OLVYxIHN0cicsICdzcGFjZXMnXSwKKyAgICAgICAgJ2NtZCc6ICdtZXNzYWdlJywKKyAgICB9LAorICAgIHsKKyAgICAgICAgJ2FyZ3MnOiBbJ0FTREYnLCAnZmZmJywgJ3NzcycsICcgIFNQQUNFUyAhISEgICddLAorICAgICAgICAnY21kJzogJ3NldCcsCisgICAgfSwKKyAgICB7CisgICAgICAgICdhcmdzJzogWydGT08nLCAnNDInXSwKKyAgICAgICAgJ2NtZCc6ICdzZXQnLAorICAgIH0sCisgICAgeworICAgICAgICAnYXJncyc6IFsnQkFSJywgJyBzcGFjZSBpbiBzdHJpbmchJ10sCisgICAgICAgICdjbWQnOiAnc2V0JywKKyAgICB9LAorICAgIHsKKyAgICAgICAgJ2FyZ3MnOiBtc2dfYXJncywKKyAgICAgICAgJ2NtZCc6ICdtZXNzYWdlJywKKyAgICAgICAgJ2ZyYW1lJzogMyBpZiBleHBhbmQgZWxzZSAyCisgICAgfSwKK10KKword2l0aCBvcGVuKHRyYWNlX2ZpbGUsICdyJykgYXMgZnA6CisgICAgIyBDaGVjayBmb3IgdmVyc2lvbiAobXVzdCBiZSB0aGUgZmlyc3QgZG9jdW1lbnQpCisgICAgdmVycyA9IGpzb24ubG9hZHMoZnAucmVhZGxpbmUoKSkKKyAgICBhc3NlcnQgc29ydGVkKHZlcnMua2V5cygpKSA9PSBbJ3ZlcnNpb24nXQorICAgIGFzc2VydCBzb3J0ZWQodmVyc1sndmVyc2lvbiddLmtleXMoKSkgPT0gWydtYWpvcicsICdtaW5vciddCisgICAgYXNzZXJ0IHZlcnNbJ3ZlcnNpb24nXVsnbWFqb3InXSA9PSAxCisgICAgYXNzZXJ0IHZlcnNbJ3ZlcnNpb24nXVsnbWlub3InXSA9PSAwCisKKyAgICBmb3IgaSBpbiBmcC5yZWFkbGluZXMoKToKKyAgICAgICAgbGluZSA9IGpzb24ubG9hZHMoaSkKKyAgICAgICAgYXNzZXJ0IHNvcnRlZChsaW5lLmtleXMoKSkgPT0gWydhcmdzJywgJ2NtZCcsICdmaWxlJywgJ2ZyYW1lJywgJ2xpbmUnLCAndGltZSddCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGxpbmVbJ2FyZ3MnXSwgbGlzdCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobGluZVsnY21kJ10sIHVuaWNvZGUpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGxpbmVbJ2ZpbGUnXSwgdW5pY29kZSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobGluZVsnZnJhbWUnXSwgaW50KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsaW5lWydsaW5lJ10sIGludCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobGluZVsndGltZSddLCBmbG9hdCkKKworICAgICAgICBmb3IgaiBpbiByZXF1aXJlZF90cmFjZXM6CisgICAgICAgICAgICAjIENvbXBhcmUgdGhlIHN1YnNldCBvZiByZXF1aXJlZCBrZXlzIHdpdGggbGluZQorICAgICAgICAgICAgaWYge2s6IGxpbmVba10gZm9yIGsgaW4gan0gPT0gajoKKyAgICAgICAgICAgICAgICByZXF1aXJlZF90cmFjZXMucmVtb3ZlKGopCisKK2Fzc2VydCBub3QgcmVxdWlyZWRfdHJhY2VzCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLWV4cGFuZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtZXhwYW5kLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MTZkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLWV4cGFuZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDExIEBACitpZihQWVRIT05fRVhFQ1VUQUJMRSkKKyAgZXhlY3V0ZV9wcm9jZXNzKAorICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gIiR7UnVuQ01ha2VfU09VUkNFX0RJUn0vdHJhY2UtanNvbi12MS1jaGVjay5weSIgLS1leHBhbmQgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vanNvbi12MS1leHBhbmQudHJhY2UiCisgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdAorICAgIE9VVFBVVF9WQVJJQUJMRSBvdXRwdXQKKyAgICBFUlJPUl9WQVJJQUJMRSBvdXRwdXQKKyAgICApCisgIGlmKE5PVCByZXN1bHQgRVFVQUwgMCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkpTT04gdHJhY2UgdmFsaWRhdGlvbiBmYWlsZWQ6XG4ke291dHB1dH0iKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLWV4cGFuZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbW1hbmRMaW5lL3RyYWNlLWpzb24tdjEtZXhwYW5kLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTkwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLWV4cGFuZC5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKHRyYWNlLWpzb24tdjEuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21tYW5kTGluZS90cmFjZS1qc29uLXYxLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvdHJhY2UtanNvbi12MS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBhMGY5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tbWFuZExpbmUvdHJhY2UtanNvbi12MS5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK21lc3NhZ2UoU1RBVFVTICJKU09OLVYxIHN0ciIgInNwYWNlcyIpCitzZXQoQVNERiBmZmYgc3NzICIgIFNQQUNFUyAhISEgICIpCitzZXQoRk9PIDQyKQorc2V0KEJBUiAiIHNwYWNlIGluIHN0cmluZyEiKQorbWVzc2FnZShTVEFUVVMgZmZmICR7QVNERn0gIiAke0ZPT30gJHtCQVJ9IiAiICBTUEFDRVMgISEhICAiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGF0aWJsZUludGVyZmFjZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBhdGlibGVJbnRlcmZhY2UvQ01ha2VMaXN0cy50eHQKaW5kZXggZjQ1MmRiMS4uZWJhYjdhMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tcGF0aWJsZUludGVyZmFjZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21wYXRpYmxlSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBDWFgpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21wYXRpYmxlSW50ZXJmYWNlL0RlYnVnUHJvcGVydGllcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBhdGlibGVJbnRlcmZhY2UvRGVidWdQcm9wZXJ0aWVzLmNtYWtlCmluZGV4IDAxOTY2MTEuLjY0YjUyZDkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBhdGlibGVJbnRlcmZhY2UvRGVidWdQcm9wZXJ0aWVzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBhdGlibGVJbnRlcmZhY2UvRGVidWdQcm9wZXJ0aWVzLmNtYWtlCkBAIC0xLDUgKzEsNSBAQAogCi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIAogcHJvamVjdChDb21wYXRpYmxlSW50ZXJmYWNlKQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21wYXRpYmxlSW50ZXJmYWNlL0ludGVyZmFjZVN0cmluZy1idWlsdGluLXByb3AuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21wYXRpYmxlSW50ZXJmYWNlL0ludGVyZmFjZVN0cmluZy1idWlsdGluLXByb3AuY21ha2UKaW5kZXggNTc3Mjg1Ni4uZjA3MmViMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tcGF0aWJsZUludGVyZmFjZS9JbnRlcmZhY2VTdHJpbmctYnVpbHRpbi1wcm9wLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBhdGlibGVJbnRlcmZhY2UvSW50ZXJmYWNlU3RyaW5nLWJ1aWx0aW4tcHJvcC5jbWFrZQpAQCAtNSw1ICs1LDUgQEAKIHNldF9wcm9wZXJ0eShUQVJHRVQgZm9vIEFQUEVORCBQUk9QRVJUWSBDT01QQVRJQkxFX0lOVEVSRkFDRV9TVFJJTkcgSU5DTFVERV9ESVJFQ1RPUklFUykKIAogYWRkX2V4ZWN1dGFibGUodXNlciBtYWluLmNwcCkKLXNldF9wcm9wZXJ0eShUQVJHRVQgdXNlciBQUk9QRVJUWSBJTkNMVURFX0RJUkVDVE9SSUVTIGJhcl9pbmMpCitzZXRfcHJvcGVydHkoVEFSR0VUIHVzZXIgUFJPUEVSVFkgSU5DTFVERV9ESVJFQ1RPUklFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vYmFyX2luYykKIHRhcmdldF9saW5rX2xpYnJhcmllcyh1c2VyIGZvbyBiYXIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvQy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyQXJncy9DLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjAwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvQy5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK2FkZF9leGVjdXRhYmxlKG1haW4gbWFpbi5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZGZkMjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4yKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvQ1hYLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL0NYWC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDJlZTAwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL0NYWC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDWFgpCitzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQorYWRkX2V4ZWN1dGFibGUobWFpbiBtYWluLmN4eCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyQXJncy9GaW5kQ0NvbXBpbGVyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL0ZpbmRDQ29tcGlsZXIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhYWY3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyQXJncy9GaW5kQ0NvbXBpbGVyLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCitmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ19jb21wLmNtYWtlIiAic2V0KHRlbXBfQ01BS0VfQ19DT01QSUxFUiBcIiR7Q01BS0VfQ19DT01QSUxFUn1cIilcbiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvRmluZENYWENvbXBpbGVyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL0ZpbmRDWFhDb21waWxlci5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjNhYzgzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL0ZpbmRDWFhDb21waWxlci5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2VuYWJsZV9sYW5ndWFnZShDWFgpCitmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ1hYX2NvbXAuY21ha2UiICJzZXQodGVtcF9DTUFLRV9DWFhfQ09NUElMRVIgXCIke0NNQUtFX0NYWF9DT01QSUxFUn1cIilcbiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTVhMThhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDU4IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitmdW5jdGlvbihmaW5kX2NvbXBpbGVyIGxhbmcpCisgICMgRGV0ZWN0IHRoZSBjb21waWxlciBpbiB1c2UgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCisgIHJ1bl9jbWFrZShGaW5kJHtsYW5nfUNvbXBpbGVyKQorICAjIFVzZSB0aGUgZGV0ZWN0ZWQgY29tcGlsZXIKKyAgaW5jbHVkZSgke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0ZpbmQke2xhbmd9Q29tcGlsZXItYnVpbGQvJHtsYW5nfV9jb21wLmNtYWtlKQorICBpZihOT1QgdGVtcF9DTUFLRV8ke2xhbmd9X0NPTVBJTEVSKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkZpbmRDb21waWxlciBwcm92aWRlZCBubyBjb21waWxlciEiKQorICBlbmRpZigpCisgICMgQ3JlYXRlIGEgdG9vbGNoYWluIGZpbGUKKyAgc2V0KF9fdGVzdF9jb21waWxlcl92YXIgQ01BS0VfJHtsYW5nfV9DT01QSUxFUikKKyAgc2V0KF9fdGVzdF9jb21waWxlciAiJHt0ZW1wX0NNQUtFXyR7bGFuZ31fQ09NUElMRVJ9IikKKyAgY29uZmlndXJlX2ZpbGUoJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS90b29sY2hhaW4uY21ha2UuaW4KKyAgICAgICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vRmluZCR7bGFuZ31Db21waWxlci1idWlsZC90b29sY2hhaW5fJHtsYW5nfV9jb21wLmNtYWtlIEBPTkxZKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihydW5fY29tcGlsZXJfZW52IGxhbmcpCisgICMgVXNlIHRoZSBjb3JyZWN0IGNvbXBpbGVyCisgIGluY2x1ZGUoJHtSdW5DTWFrZV9CSU5BUllfRElSfS9GaW5kJHtsYW5nfUNvbXBpbGVyLWJ1aWxkLyR7bGFuZ31fY29tcC5jbWFrZSkKKworICAjIFVzZSBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciB0ZXN0cyB3aXRob3V0IGNsZWFuaW5nLgorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHtsYW5nfS1lbnYtYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisKKyAgIyBTZXQgdGhlIGNvbXBpbGVyCisgIGlmKGxhbmcgU1RSRVFVQUwgIkMiKQorICAgIHNldChFTlZ7Q0N9ICInJHt0ZW1wX0NNQUtFXyR7bGFuZ31fQ09NUElMRVJ9JyAtREZPTzEgLURGT08yIikKKyAgZWxzZSgpCisgICAgc2V0KEVOVnske2xhbmd9fSAiJyR7dGVtcF9DTUFLRV8ke2xhbmd9X0NPTVBJTEVSfScgLURGT08xIC1ERk9PMiIpCisgIGVuZGlmKCkKKworICBydW5fY21ha2UoJHtsYW5nfSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHtsYW5nfS1CdWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAke3ZlcmJvc2VfYXJnc30pCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKHJ1bl9jb21waWxlcl90YyBsYW5nKQorICAjIFVzZSBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciB0ZXN0cyB3aXRob3V0IGNsZWFuaW5nLgorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHtsYW5nfS10Yy1idWlsZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKworICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TCisgICAgICAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPSR7UnVuQ01ha2VfQklOQVJZX0RJUn0vRmluZCR7bGFuZ31Db21waWxlci1idWlsZC90b29sY2hhaW5fJHtsYW5nfV9jb21wLmNtYWtlKQorICBydW5fY21ha2UoJHtsYW5nfSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHtsYW5nfS1CdWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAke3ZlcmJvc2VfYXJnc30pCitlbmRmdW5jdGlvbigpCisKK3NldChsYW5ncyBDIENYWCkKKworZm9yZWFjaChsYW5nICR7bGFuZ3N9KQorICBmaW5kX2NvbXBpbGVyKCR7bGFuZ30pCisgIHJ1bl9jb21waWxlcl9lbnYoJHtsYW5nfSkKKyAgcnVuX2NvbXBpbGVyX3RjKCR7bGFuZ30pCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyQXJncy9tYWluLmMgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MjYxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvbWFpbi5jCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgRk9PMQorIyAgZXJyb3IgTWlzc2luZyBGT08xCisjZW5kaWYKKyNpZm5kZWYgRk9PMgorIyAgZXJyb3IgTWlzc2luZyBGT08yCisjZW5kaWYKK2ludCBtYWluKHZvaWQpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL21haW4uY3h4IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJBcmdzL21haW4uY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTBlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvbWFpbi5jeHgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBGT08xCisjICBlcnJvciBNaXNzaW5nIEZPTzEKKyNlbmRpZgorI2lmbmRlZiBGT08yCisjICBlcnJvciBNaXNzaW5nIEZPTzIKKyNlbmRpZgoraW50IG1haW4oKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyQXJncy90b29sY2hhaW4uY21ha2UuaW4gYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvdG9vbGNoYWluLmNtYWtlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzc2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckFyZ3MvdG9vbGNoYWluLmNtYWtlLmluCkBAIC0wLDAgKzEgQEAKK3NldChAX190ZXN0X2NvbXBpbGVyX3ZhckAgIkBfX3Rlc3RfY29tcGlsZXJAIiAtREZPTzEgLURGT08yKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJDaGFuZ2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckNoYW5nZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiNGIzMDE2Li4xNGM0N2FkIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckNoYW5nZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckNoYW5nZS9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBpZihOT1QgUnVuQ01ha2VfVEVTVCkKICAgc2V0KFJ1bkNNYWtlX1RFU1QgIiRFTlZ7UnVuQ01ha2VfVEVTVH0iKSAjIG5lZWRlZCB3aGVuIGNhY2hlIGlzIGRlbGV0ZWQKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy1jb21tb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtY29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjAwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtY29tbW9uLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCitzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQorYWRkX2V4ZWN1dGFibGUobWFpbiBtYWluLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtZW52LUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtZW52LUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy1lbnYtQnVpbGQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACisuKi1FIGVudiBVU0VEX0xBVU5DSEVSPTEuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLWVudi1sYXVuY2gtQnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjUxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtZW52LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoQy1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtbGF1bmNoLWVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy1sYXVuY2gtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWJjYjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MtbGF1bmNoLWVudi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldChDVEVTVF9VU0VfTEFVTkNIRVJTIDEpCitpbmNsdWRlKENUZXN0VXNlTGF1bmNoZXJzKQoraW5jbHVkZShDLWVudi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQy5jbWFrZQppbmRleCA2N2JmN2M0Li40ODFlNzRkIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0MuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DLmNtYWtlCkBAIC0xLDQgKzEsMiBAQAotZW5hYmxlX2xhbmd1YWdlKEMpCiBzZXQoQ01BS0VfQ19DT01QSUxFUl9MQVVOQ0hFUiAiJHtDTUFLRV9DT01NQU5EfTstRTtlbnY7VVNFRF9MQVVOQ0hFUj0xIikKLXNldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCi1hZGRfZXhlY3V0YWJsZShtYWluIG1haW4uYykKK2luY2x1ZGUoQy1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtY29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DVURBLWNvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTI1YjJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DVURBLWNvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwNCBORVcpCitlbmFibGVfbGFuZ3VhZ2UoQ1VEQSkKK3NldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCithZGRfZXhlY3V0YWJsZShtYWluIG1haW4uY3UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtZW52LUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtZW52LUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1lbnYtQnVpbGQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACisuKi1FIGVudiBVU0VEX0xBVU5DSEVSPTEuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DVURBLWVudi1sYXVuY2gtQnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZmJlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtZW52LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoQ1VEQS1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtbGF1bmNoLWVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS1sYXVuY2gtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDc3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEtbGF1bmNoLWVudi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldChDVEVTVF9VU0VfTEFVTkNIRVJTIDEpCitpbmNsdWRlKENUZXN0VXNlTGF1bmNoZXJzKQoraW5jbHVkZShDVURBLWVudi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1VEQS5jbWFrZQppbmRleCBmZTU1NjBiLi43ZjE2NTJiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NVREEuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DVURBLmNtYWtlCkBAIC0xLDQgKzEsMiBAQAotZW5hYmxlX2xhbmd1YWdlKENVREEpCiBzZXQoQ01BS0VfQ1VEQV9DT01QSUxFUl9MQVVOQ0hFUiAiJHtDTUFLRV9DT01NQU5EfTstRTtlbnY7VVNFRF9MQVVOQ0hFUj0xIikKLXNldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCi1hZGRfZXhlY3V0YWJsZShtYWluIG1haW4uY3UpCitpbmNsdWRlKENVREEtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtY29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtY29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMmVlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1jb21tb24uY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK2FkZF9leGVjdXRhYmxlKG1haW4gbWFpbi5jeHgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1lbnYtQnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLWVudi1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1lbnYtQnVpbGQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACisuKi1FIGVudiBVU0VEX0xBVU5DSEVSPTEuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLWVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLWVudi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjM2OTU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9DWFgtZW52LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoQ1hYLWNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLWxhdW5jaC1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1sYXVuY2gtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NWNjODkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC1sYXVuY2gtZW52LmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0KENURVNUX1VTRV9MQVVOQ0hFUlMgMSkKK2luY2x1ZGUoQ1Rlc3RVc2VMYXVuY2hlcnMpCitpbmNsdWRlKENYWC1lbnYuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0NYWC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLmNtYWtlCmluZGV4IGNkZDM0NzguLjFmOWExMmIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvQ1hYLmNtYWtlCkBAIC0xLDQgKzEsMiBAQAotZW5hYmxlX2xhbmd1YWdlKENYWCkKIHNldChDTUFLRV9DWFhfQ09NUElMRVJfTEFVTkNIRVIgIiR7Q01BS0VfQ09NTUFORH07LUU7ZW52O1VTRURfTEFVTkNIRVI9MSIpCi1zZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQotYWRkX2V4ZWN1dGFibGUobWFpbiBtYWluLmN4eCkKK2luY2x1ZGUoQ1hYLWNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1jb21tb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tY29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzM2MyY2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tY29tbW9uLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorZW5hYmxlX2xhbmd1YWdlKEZvcnRyYW4pCitzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQorYWRkX2V4ZWN1dGFibGUobWFpbiBtYWluLkYpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tZW52LUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tZW52LUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1lbnYtQnVpbGQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACisuKi1FIGVudiBVU0VEX0xBVU5DSEVSPTEuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9Gb3J0cmFuLWVudi1sYXVuY2gtQnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzI3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tZW52LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoRm9ydHJhbi1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tbGF1bmNoLWVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi1sYXVuY2gtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTE5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4tbGF1bmNoLWVudi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldChDVEVTVF9VU0VfTEFVTkNIRVJTIDEpCitpbmNsdWRlKENUZXN0VXNlTGF1bmNoZXJzKQoraW5jbHVkZShGb3J0cmFuLWVudi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvRm9ydHJhbi5jbWFrZQppbmRleCA3MmNjMDNlLi5kYzQ2MTczIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL0ZvcnRyYW4uY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9Gb3J0cmFuLmNtYWtlCkBAIC0xLDQgKzEsMiBAQAotZW5hYmxlX2xhbmd1YWdlKEZvcnRyYW4pCiBzZXQoQ01BS0VfRm9ydHJhbl9DT01QSUxFUl9MQVVOQ0hFUiAiJHtDTUFLRV9DT01NQU5EfTstRTtlbnY7VVNFRF9MQVVOQ0hFUj0xIikKLXNldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCi1hZGRfZXhlY3V0YWJsZShtYWluIG1haW4uRikKK2luY2x1ZGUoRm9ydHJhbi1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtY29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWNvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjU2NWY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWNvbW1vbi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShPQkpDKQorc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK2FkZF9leGVjdXRhYmxlKG1haW4gbWFpbi5tKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWVudi1CdWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWVudi1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtZW52LUJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLiotRSBlbnYgVVNFRF9MQVVOQ0hFUj0xLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQy1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtZW52LWxhdW5jaC1CdWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy4qLUUgZW52IFVTRURfTEFVTkNIRVI9MS4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtZW52LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWVudi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDllODhkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWVudi5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKE9CSkMtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWxhdW5jaC1lbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMtbGF1bmNoLWVudi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2YxM2QzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLWxhdW5jaC1lbnYuY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoQ1RFU1RfVVNFX0xBVU5DSEVSUyAxKQoraW5jbHVkZShDVGVzdFVzZUxhdW5jaGVycykKK2luY2x1ZGUoT0JKQy1lbnYuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkMuY21ha2UKaW5kZXggNTVjNDQ5My4uMzM3NGU4MiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQy5jbWFrZQpAQCAtMSw0ICsxLDIgQEAKLWVuYWJsZV9sYW5ndWFnZShPQkpDKQogc2V0KENNQUtFX09CSkNfQ09NUElMRVJfTEFVTkNIRVIgIiR7Q01BS0VfQ09NTUFORH07LUU7ZW52O1VTRURfTEFVTkNIRVI9MSIpCi1zZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQotYWRkX2V4ZWN1dGFibGUobWFpbiBtYWluLm0pCitpbmNsdWRlKE9CSkMtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtY29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtY29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZWU0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkNYWC1jb21tb24uY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoT0JKQ1hYKQorc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK2FkZF9leGVjdXRhYmxlKG1haW4gbWFpbi5tbSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWVudi1CdWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtZW52LUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWVudi1CdWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy4qLUUgZW52IFVTRURfTEFVTkNIRVI9MS4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkNYWC1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkNYWC1lbnYtbGF1bmNoLUJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxM2UzMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWVudi1sYXVuY2gtQnVpbGQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACisuKi1FIGVudiBVU0VEX0xBVU5DSEVSPTEuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtZW52LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtZW52LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDk2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL09CSkNYWC1lbnYuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShPQkpDWFgtY29tbW9uLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFgtbGF1bmNoLWVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWxhdW5jaC1lbnYuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjOTE2YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLWxhdW5jaC1lbnYuY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoQ1RFU1RfVVNFX0xBVU5DSEVSUyAxKQoraW5jbHVkZShDVGVzdFVzZUxhdW5jaGVycykKK2luY2x1ZGUoT0JKQ1hYLWVudi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvT0JKQ1hYLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFguY21ha2UKaW5kZXggZTYyOTYwMy4uOTkzZWM5MCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFguY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJMYXVuY2hlci9PQkpDWFguY21ha2UKQEAgLTEsNCArMSwyIEBACi1lbmFibGVfbGFuZ3VhZ2UoT0JKQ1hYKQogc2V0KENNQUtFX09CSkNYWF9DT01QSUxFUl9MQVVOQ0hFUiAiJHtDTUFLRV9DT01NQU5EfTstRTtlbnY7VVNFRF9MQVVOQ0hFUj0xIikKLXNldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCi1hZGRfZXhlY3V0YWJsZShtYWluIG1haW4ubW0pCitpbmNsdWRlKE9CSkNYWC1jb21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db21waWxlckxhdW5jaGVyL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDQ0MjAyNjAuLjY5ZmZmMjAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTGF1bmNoZXIvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC05LDEyICs5LDE5IEBACiAgIHJ1bl9jbWFrZSgke2xhbmd9KQogCiAgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAxKQotICBpZigiJHtSdW5DTWFrZV9HRU5FUkFUT1J9IiBTVFJFUVVBTCAiTmluamEiKQorICBpZigiJHtSdW5DTWFrZV9HRU5FUkFUT1J9IiBNQVRDSEVTICJOaW5qYSIpCiAgICAgc2V0KHZlcmJvc2VfYXJncyAtLSAtdikKICAgZW5kaWYoKQogICBydW5fY21ha2VfY29tbWFuZCgke2xhbmd9LUJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuICR7dmVyYm9zZV9hcmdzfSkKIGVuZGZ1bmN0aW9uKCkKIAorZnVuY3Rpb24ocnVuX2NvbXBpbGVyX2xhdW5jaGVyX2VudiBsYW5nKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiLS4qIiAiIiBjb3JlX2xhbmcgIiR7bGFuZ30iKQorICBzZXQoRU5We0NNQUtFXyR7Y29yZV9sYW5nfV9DT01QSUxFUl9MQVVOQ0hFUn0gIiR7Q01BS0VfQ09NTUFORH07LUU7ZW52O1VTRURfTEFVTkNIRVI9MSIpCisgIHJ1bl9jb21waWxlcl9sYXVuY2hlcigke2xhbmd9KQorICB1bnNldChFTlZ7Q01BS0VfJHtjb3JlX2xhbmd9X0NPTVBJTEVSX0xBVU5DSEVSfSkKK2VuZGZ1bmN0aW9uKCkKKwogc2V0KGxhbmdzIEMgQ1hYKQogaWYoQ01ha2VfVEVTVF9DVURBKQogICBsaXN0KEFQUEVORCBsYW5ncyBDVURBKQpAQCAtMjgsNyArMzUsOSBAQAogCiBmb3JlYWNoKGxhbmcgJHtsYW5nc30pCiAgIHJ1bl9jb21waWxlcl9sYXVuY2hlcigke2xhbmd9KQorICBydW5fY29tcGlsZXJfbGF1bmNoZXJfZW52KCR7bGFuZ30tZW52KQogICBpZiAoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUiBTVFJFUVVBTCAiV2F0Y29tIFdNYWtlIikKICAgICBydW5fY29tcGlsZXJfbGF1bmNoZXIoJHtsYW5nfS1sYXVuY2gpCisgICAgcnVuX2NvbXBpbGVyX2xhdW5jaGVyX2Vudigke2xhbmd9LWxhdW5jaC1lbnYpCiAgIGVuZGlmKCkKIGVuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJOb3RGb3VuZC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0NvbXBpbGVyTm90Rm91bmQvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29tcGlsZXJOb3RGb3VuZC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db21waWxlck5vdEZvdW5kL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfQ1JPU1NfQ09ORklHUy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0NST1NTX0NPTkZJR1MtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfQ1JPU1NfQ09ORklHUy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfQ1JPU1NfQ09ORklHUy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZDE0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9DUk9TU19DT05GSUdTLXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMSBAQAorXkNNYWtlIEVycm9yOgorICBHZW5lcmF0b3IKKworICAgIFteCitdKgorCisgIGRvZXMgbm90IHN1cHBvcnQgdmFyaWFibGUKKworICAgIENNQUtFX0NST1NTX0NPTkZJR1MKKworICBidXQgaXQgaGFzIGJlZW4gc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfQ1JPU1NfQ09ORklHUy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0NST1NTX0NPTkZJR1MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkMGM0NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0NST1NTX0NPTkZJR1MuY21ha2UKQEAgLTAsMCArMSBAQAorc2V0KENNQUtFX0NST1NTX0NPTkZJR1MgIiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhM2VkMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTEgQEAKK15DTWFrZSBFcnJvcjoKKyAgR2VuZXJhdG9yCisKKyAgICBbXgorXSoKKworICBkb2VzIG5vdCBzdXBwb3J0IHZhcmlhYmxlCisKKyAgICBDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUKKworICBidXQgaXQgaGFzIGJlZW4gc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YzdmZWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUuY21ha2UKQEAgLTAsMCArMSBAQAorc2V0KENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRSAiIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9ERUZBVUxUX0NPTkZJR1MtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9ERUZBVUxUX0NPTkZJR1MtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9DT05GSUdTLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9ERUZBVUxUX0NPTkZJR1Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDBiZjRkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL05vQ01BS0VfREVGQVVMVF9DT05GSUdTLXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMSBAQAorXkNNYWtlIEVycm9yOgorICBHZW5lcmF0b3IKKworICAgIFteCitdKgorCisgIGRvZXMgbm90IHN1cHBvcnQgdmFyaWFibGUKKworICAgIENNQUtFX0RFRkFVTFRfQ09ORklHUworCisgIGJ1dCBpdCBoYXMgYmVlbiBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9ERUZBVUxUX0NPTkZJR1MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvTm9DTUFLRV9ERUZBVUxUX0NPTkZJR1MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2NTE3MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9Ob0NNQUtFX0RFRkFVTFRfQ09ORklHUy5jbWFrZQpAQCAtMCwwICsxIEBACitzZXQoQ01BS0VfREVGQVVMVF9DT05GSUdTICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0NvbmZpZ3VyZS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNzZkODQzYy4uOWZkNDQ5OSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvQ29uZmlndXJlL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9Db25maWd1cmUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC01MCwzICs1MCw5IEBACiBydW5fY21ha2UoUmVtb3ZlQ2FjaGUpCiBmaWxlKFJFTU9WRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlQ2FjaGUudHh0IikKIHJ1bl9jbWFrZShSZW1vdmVDYWNoZSkKKworaWYoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJeTmluamEgTXVsdGktQ29uZmlnJCIpCisgIHJ1bl9jbWFrZShOb0NNQUtFX0NST1NTX0NPTkZJR1MpCisgIHJ1bl9jbWFrZShOb0NNQUtFX0RFRkFVTFRfQlVJTERfVFlQRSkKKyAgcnVuX2NtYWtlKE5vQ01BS0VfREVGQVVMVF9DT05GSUdTKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRGlzYWxsb3dlZENvbW1hbmRzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvRGlzYWxsb3dlZENvbW1hbmRzL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjRiM2RlODQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0Rpc2FsbG93ZWRDb21tYW5kcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9EaXNhbGxvd2VkQ29tbWFuZHMvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeGNsdWRlRnJvbUFsbC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0V4Y2x1ZGVGcm9tQWxsL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YjNmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeGNsdWRlRnJvbUFsbC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0V4Y2x1ZGVGcm9tQWxsL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0V4Y2x1ZGVGcm9tQWxsL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjRmYzg5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXhjbHVkZUZyb21BbGwvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMjYgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Z1bmN0aW9uKHJ1bl9zaW5nbGVfY29uZmlnX3Rlc3QgbGFiZWwgY29uZmlnIGV4Y2x1ZGVfZnJvbV9hbGxfdmFsdWUgZXhwZWN0YXRpb24pCisgICAgc2V0KGNhc2Ugc2luZ2xlLWNvbmZpZykKKyAgICBtZXNzYWdlKCItLSBTdGFydGluZyAke2Nhc2V9IHRlc3Q6ICR7bGFiZWx9IikKKyAgICBzZXQoZnVsbF9jYXNlX25hbWUgIiR7Y2FzZX0tYnVpbGQtJHtjb25maWd9IikKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7ZnVsbF9jYXNlX25hbWV9LyIpCisgICAgcnVuX2NtYWtlX3dpdGhfb3B0aW9ucygke2Nhc2V9CisgICAgICAgIC1EQ01BS0VfQlVJTERfVFlQRT0ke2NvbmZpZ30KKyAgICAgICAgLURUT09MX0VYQ0xVREVfRlJPTV9BTEw9JHtleGNsdWRlX2Zyb21fYWxsX3ZhbHVlfSkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICAgIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlc18ke2NvbmZpZ30uY21ha2UpCisgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHtjYXNlfS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyAke2NvbmZpZ30pCitlbmRmdW5jdGlvbigpCisKK3J1bl9zaW5nbGVfY29uZmlnX3Rlc3QoImV4cGxpY3RseSBub3QgZXhjbHVkZWQiIERlYnVnIDAgInNob3VsZF9leGlzdCIpCitydW5fc2luZ2xlX2NvbmZpZ190ZXN0KCJleGNsdWRlZCIgRGVidWcgMSAic2hvdWxkX25vdF9leGlzdCIpCisKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJeKFhjb2RlfFZpc3VhbCBTdHVkaW8pIikKKyAgICBydW5fY21ha2UoZXJyb3Itb24tbWl4ZWQtY29uZmlnKQorZWxzZSgpCisgICAgcnVuX3NpbmdsZV9jb25maWdfdGVzdCgiZXhwbGljaXRseSBub3QgZXhjbHVkZWQgd2l0aCBnZW5leCIKKyAgICAgICAgUmVsZWFzZSAkPENPTkZJRzpEZWJ1Zz4gInNob3VsZF9leGlzdCIpCisgICAgcnVuX3NpbmdsZV9jb25maWdfdGVzdCgiZXhjbHVkZWQgd2l0aCBnZW5leCIKKyAgICAgICAgRGVidWcgJDxDT05GSUc6RGVidWc+ICJzaG91bGRfbm90X2V4aXN0IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9FeGNsdWRlRnJvbUFsbC9lcnJvci1vbi1taXhlZC1jb25maWctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9FeGNsdWRlRnJvbUFsbC9lcnJvci1vbi1taXhlZC1jb25maWctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXhjbHVkZUZyb21BbGwvZXJyb3Itb24tbWl4ZWQtY29uZmlnLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9FeGNsdWRlRnJvbUFsbC9lcnJvci1vbi1taXhlZC1jb25maWctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGM3ODVmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXhjbHVkZUZyb21BbGwvZXJyb3Itb24tbWl4ZWQtY29uZmlnLXN0ZGVyci50eHQKQEAgLTAsMCArMSwzIEBACitDTWFrZSBFcnJvciBpbiBDTWFrZUxpc3RzLnR4dDoKKyAgVGhlIEVYQ0xVREVfRlJPTV9BTEwgcHJvcGVydHkgb2YgdGFyZ2V0ICJyZWxlYXNlX29ubHlfdG9vbCIgdmFyaWVzIGJ5CisgIGNvbmZpZ3VyYXRpb24uICBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJbXiJdKyIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0V4Y2x1ZGVGcm9tQWxsL2Vycm9yLW9uLW1peGVkLWNvbmZpZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0V4Y2x1ZGVGcm9tQWxsL2Vycm9yLW9uLW1peGVkLWNvbmZpZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzBlZDFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXhjbHVkZUZyb21BbGwvZXJyb3Itb24tbWl4ZWQtY29uZmlnLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldChDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTICJSZWxlYXNlO0RlYnVnIiBDQUNIRSBTVFJJTkcgIiIpCisKK2FkZF9leGVjdXRhYmxlKHJlbGVhc2Vfb25seV90b29sIG1haW4uYykKK3NldF9wcm9wZXJ0eShUQVJHRVQgcmVsZWFzZV9vbmx5X3Rvb2wgUFJPUEVSVFkgRVhDTFVERV9GUk9NX0FMTCAiJDxOT1Q6JDxDT05GSUc6UmVsZWFzZT4+IikKZGlmZiAtLWdpdCBhL1Rlc3RzL0ZpbmRNb2R1bGVzRXhlY3V0ZUFsbC9tYWluLmMgYi9UZXN0cy9SdW5DTWFrZS9FeGNsdWRlRnJvbUFsbC9tYWluLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL0ZpbmRNb2R1bGVzRXhlY3V0ZUFsbC9tYWluLmMKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0V4Y2x1ZGVGcm9tQWxsL21haW4uYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXhjbHVkZUZyb21BbGwvc2luZ2xlLWNvbmZpZy1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0V4Y2x1ZGVGcm9tQWxsL3NpbmdsZS1jb25maWctYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0NTVmMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4Y2x1ZGVGcm9tQWxsL3NpbmdsZS1jb25maWctYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxNyBAQAoraWYoZXhwZWN0YXRpb24gU1RSRVFVQUwgInNob3VsZF9ub3RfZXhpc3QiKQorICAgIHNldChzaG91bGRfZXhpc3QgRkFMU0UpCitlbHNlaWYoZXhwZWN0YXRpb24gU1RSRVFVQUwgInNob3VsZF9leGlzdCIpCisgICAgc2V0KHNob3VsZF9leGlzdCBUUlVFKQorZWxzZSgpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRW5jb3VudGVyZWQgdW5rbm93biBleHBlY3RhdGlvbjogJHtleHBlY3RhdGlvbn0iKQorZW5kaWYoKQorCitpZihFWElTVFMgIiR7VEFSR0VUX0ZJTEVfdG9vbF8ke2NvbmZpZ319IikKKyAgICBpZihOT1Qgc2hvdWxkX2V4aXN0KQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICIke1RBUkdFVF9GSUxFX3Rvb2xfJHtjb25maWd9fSBzaG91bGQgbm90IGV4aXN0LiIpCisgICAgZW5kaWYoKQorZWxzZSgpCisgICAgaWYoc2hvdWxkX2V4aXN0KQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICIke1RBUkdFVF9GSUxFX3Rvb2xfJHtjb25maWd9fSBzaG91bGQgZXhpc3QuIikKKyAgICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeGNsdWRlRnJvbUFsbC9zaW5nbGUtY29uZmlnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRXhjbHVkZUZyb21BbGwvc2luZ2xlLWNvbmZpZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTQ5YzIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXhjbHVkZUZyb21BbGwvc2luZ2xlLWNvbmZpZy5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUodG9vbCBtYWluLmMpCitzZXRfcHJvcGVydHkoVEFSR0VUIHRvb2wgUFJPUEVSVFkgRVhDTFVERV9GUk9NX0FMTCAiJHtUT09MX0VYQ0xVREVfRlJPTV9BTEx9IikKKworZmlsZShHRU5FUkFURSBPVVRQVVQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzXyQ8Q09ORklHPi5jbWFrZSIgQ09OVEVOVCBbWworc2V0KFRBUkdFVF9GSUxFX3Rvb2xfJDxDT05GSUc+IFs9PVskPFRBUkdFVF9GSUxFOnRvb2w+XT09XSkKK11dKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL0JlZm9yZVByb2plY3QtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzA1OGUyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL0JlZm9yZVByb2plY3QtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACitpZihOT1QgRVhJU1RTICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vY29tcGlsZV9jb21tYW5kcy5qc29uIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJjb21waWxlX2NvbW1hbmRzLmpzb24gbm90IGdlbmVyYXRlZCIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9CZWZvcmVQcm9qZWN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Y2JkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2xpYnJhcnkoZW1wdHkgU1RBVElDIGVtcHR5LmMpCittZXNzYWdlKFNUQVRVUyAiQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFM9JyR7Q01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFN9JyIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdEJFRk9SRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9CZWZvcmVQcm9qZWN0QkVGT1JFLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZjljODcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQmVmb3JlUHJvamVjdEJFRk9SRS5jbWFrZQpAQCAtMCwwICsxIEBACitzZXQoQ01BS0VfRVhQT1JUX0NPTVBJTEVfQ09NTUFORFMgT04pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxMTdiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRDb21waWxlQ29tbWFuZHMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQwYTA0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZV93aXRoX29wdGlvbnMoQmVmb3JlUHJvamVjdCAtRENNQUtFX1BST0pFQ1RfSU5DTFVERV9CRUZPUkU9QmVmb3JlUHJvamVjdEJFRk9SRS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvRXhwb3J0Q29tcGlsZUNvbW1hbmRzL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydENvbXBpbGVDb21tYW5kcy9lbXB0eS5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHBvcnRXaXRob3V0TGFuZ3VhZ2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9FeHBvcnRXaXRob3V0TGFuZ3VhZ2UvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRXhwb3J0V2l0aG91dExhbmd1YWdlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4cG9ydFdpdGhvdXRMYW5ndWFnZS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsRGF0YS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsRGF0YS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbERhdGEvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxEYXRhL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L0FkZF9TdGVwRGVwZW5kZW5jaWVzX2lmYWNlX3N0ZXAtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9BZGRfU3RlcERlcGVuZGVuY2llc19pZmFjZV9zdGVwLXN0ZGVyci50eHQKaW5kZXggMjJlMTNiZi4uNWZhNzVlOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L0FkZF9TdGVwRGVwZW5kZW5jaWVzX2lmYWNlX3N0ZXAtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvQWRkX1N0ZXBEZXBlbmRlbmNpZXNfaWZhY2Vfc3RlcC1zdGRlcnIudHh0CkBAIC0xLDUgKzEsNSBAQAogXkNNYWtlIEVycm9yIGF0IC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKLSAgVGFyZ2V0ICJNeVByb2otSUZhY2UiIHdhcyBub3QgZ2VuZXJhdGVkIGJ5IEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcFRhcmdldHMuCisgIEV4dGVybmFsIHByb2plY3QgIk15UHJvaiIgZG9lcyBub3QgaGF2ZSBhIHN0ZXAgIklGYWNlIi4KIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIEFkZF9TdGVwRGVwZW5kZW5jaWVzX2lmYWNlX3N0ZXAuY21ha2U6WzAtOV0rIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwRGVwZW5kZW5jaWVzXCkKICAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L05PX0RFUEVORFMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9OT19ERVBFTkRTLXN0ZGVyci50eHQKaW5kZXggNGNiMDUxZC4uOTI4ZDg4YSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L05PX0RFUEVORFMtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvTk9fREVQRU5EUy1zdGRlcnIudHh0CkBAIC0yLDcgKzIsNyBAQAogICBVc2luZyBOT19ERVBFTkRTIGZvciAiY29uZmlndXJlIiBzdGVwIG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcwogQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKICAgLiovTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2U6WzAtOV0rIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwVGFyZ2V0c1wpCi0gIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKyBcKEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcFwpCisgIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKzpFVkFMOjIgXChFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXBcKQogICAuKi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZTpbMC05XSsgXChfZXBfYWRkX2NvbmZpZ3VyZV9jb21tYW5kXCkKICAgTk9fREVQRU5EUy5jbWFrZTpbMC05XSsgXChFeHRlcm5hbFByb2plY3RfQWRkXCkKICAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCkBAIC0xMiw3ICsxMiw3IEBACiAgIFVzaW5nIE5PX0RFUEVORFMgZm9yICJidWlsZCIgc3RlcCBtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKyBcKEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcFRhcmdldHNcKQotICAuKi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZTpbMC05XSsgXChFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXBcKQorICAuKi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZTpbMC05XSs6RVZBTDoyIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwXCkKICAgLiovTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2U6WzAtOV0rIFwoX2VwX2FkZF9idWlsZF9jb21tYW5kXCkKICAgTk9fREVQRU5EUy5jbWFrZTpbMC05XSsgXChFeHRlcm5hbFByb2plY3RfQWRkXCkKICAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCkBAIC0yMiw3ICsyMiw3IEBACiAgIFVzaW5nIE5PX0RFUEVORFMgZm9yICJpbnN0YWxsIiBzdGVwIG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcwogQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKICAgLiovTW9kdWxlcy9FeHRlcm5hbFByb2plY3QuY21ha2U6WzAtOV0rIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZF9TdGVwVGFyZ2V0c1wpCi0gIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKyBcKEV4dGVybmFsUHJvamVjdF9BZGRfU3RlcFwpCisgIC4qL01vZHVsZXMvRXh0ZXJuYWxQcm9qZWN0LmNtYWtlOlswLTldKzpFVkFMOjIgXChFeHRlcm5hbFByb2plY3RfQWRkX1N0ZXBcKQogICAuKi9Nb2R1bGVzL0V4dGVybmFsUHJvamVjdC5jbWFrZTpbMC05XSsgXChfZXBfYWRkX2luc3RhbGxfY29tbWFuZFwpCiAgIE5PX0RFUEVORFMuY21ha2U6WzAtOV0rIFwoRXh0ZXJuYWxQcm9qZWN0X0FkZFwpCiAgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L1ByZXNlcnZlRW1wdHlBcmdzLWJ1aWxkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUHJlc2VydmVFbXB0eUFyZ3MtYnVpbGQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTIxYjhmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L1ByZXNlcnZlRW1wdHlBcmdzLWJ1aWxkLXN0ZG91dC50eHQKQEAgLTAsMCArMSwyMSBAQAorLiotLSBOdW1iZXIgb2YgYXJndW1lbnRzIGZvciBkb3dubG9hZDogNgorLiotLSBkb3dubG9hZCBhcmd1bWVudCA0OiAnJworLiotLSBkb3dubG9hZCBhcmd1bWVudCA1OiAnYWZ0ZXInCisuKi0tIE51bWJlciBvZiBhcmd1bWVudHMgZm9yIHVwZGF0ZTogNgorLiotLSB1cGRhdGUgYXJndW1lbnQgNDogJycKKy4qLS0gdXBkYXRlIGFyZ3VtZW50IDU6ICdhZnRlcicKKy4qLS0gTnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgcGF0Y2g6IDYKKy4qLS0gcGF0Y2ggYXJndW1lbnQgNDogJycKKy4qLS0gcGF0Y2ggYXJndW1lbnQgNTogJ2FmdGVyJworLiotLSBOdW1iZXIgb2YgYXJndW1lbnRzIGZvciBjb25maWd1cmU6IDYKKy4qLS0gY29uZmlndXJlIGFyZ3VtZW50IDQ6ICcnCisuKi0tIGNvbmZpZ3VyZSBhcmd1bWVudCA1OiAnYWZ0ZXInCisuKi0tIE51bWJlciBvZiBhcmd1bWVudHMgZm9yIGJ1aWxkOiA2CisuKi0tIGJ1aWxkIGFyZ3VtZW50IDQ6ICcnCisuKi0tIGJ1aWxkIGFyZ3VtZW50IDU6ICdhZnRlcicKKy4qLS0gTnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgaW5zdGFsbDogNgorLiotLSBpbnN0YWxsIGFyZ3VtZW50IDQ6ICcnCisuKi0tIGluc3RhbGwgYXJndW1lbnQgNTogJ2FmdGVyJworLiotLSBOdW1iZXIgb2YgYXJndW1lbnRzIGZvciB0ZXN0OiA2CisuKi0tIHRlc3QgYXJndW1lbnQgNDogJycKKy4qLS0gdGVzdCBhcmd1bWVudCA1OiAnYWZ0ZXInCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUHJlc2VydmVFbXB0eUFyZ3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUHJlc2VydmVFbXB0eUFyZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkMTAwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9QcmVzZXJ2ZUVtcHR5QXJncy5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitpbmNsdWRlKEV4dGVybmFsUHJvamVjdCkKKworc2V0KHNjcmlwdCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9jb3VudEFyZ3MuY21ha2UiKQorRXh0ZXJuYWxQcm9qZWN0X0FkZCgKKyAgYmxhbmtDaGVja2VyCisgIERPV05MT0FEX0NPTU1BTkQgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgZG93bmxvYWQgICIiIGFmdGVyCisgIFVQREFURV9DT01NQU5EICAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgdXBkYXRlICAgICIiIGFmdGVyCisgIFBBVENIX0NPTU1BTkQgICAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgcGF0Y2ggICAgICIiIGFmdGVyCisgIENPTkZJR1VSRV9DT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgY29uZmlndXJlICIiIGFmdGVyCisgIEJVSUxEX0NPTU1BTkQgICAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgYnVpbGQgICAgICIiIGFmdGVyCisgIElOU1RBTExfQ09NTUFORCAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgaW5zdGFsbCAgICIiIGFmdGVyCisgIFRFU1RfQ09NTUFORCAgICAgICR7Q01BS0VfQ09NTUFORH0gLVAgIiR7c2NyaXB0fSIgdGVzdCAgICAgICIiIGFmdGVyCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRXh0ZXJuYWxQcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBjYWFmMGQyLi4wZDFkYTI2IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTI5LDYgKzI5LDEwIEBACiAKIF9fZXBfdGVzdF93aXRoX2J1aWxkKE11bHRpQ29tbWFuZCkKIAorc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIDEpCitfX2VwX3Rlc3Rfd2l0aF9idWlsZChQcmVzZXJ2ZUVtcHR5QXJncykKK3NldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAwKQorCiAjIE91dHB1dCBpcyBub3QgcHJlZGljdGFibGUgZW5vdWdoIHRvIGJlIGFibGUgdG8gdmVyaWZ5IGl0IHJlbGlhYmx5CiAjIHdoZW4gdXNpbmcgdGhlIHZhcmlvdXMgZGlmZmVyZW50IFZpc3VhbCBTdHVkaW8gZ2VuZXJhdG9ycwogaWYoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0V4dGVybmFsUHJvamVjdC9jb3VudEFyZ3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvY291bnRBcmdzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjQyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9FeHRlcm5hbFByb2plY3QvY291bnRBcmdzLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorbWVzc2FnZShTVEFUVVMgIk51bWJlciBvZiBhcmd1bWVudHMgZm9yICR7Q01BS0VfQVJHVjN9OiAke0NNQUtFX0FSR0N9IikKK21hdGgoRVhQUiBsYXN0ICIke0NNQUtFX0FSR0N9IC0gMSIpCitmb3JlYWNoKG4gUkFOR0UgNCAke2xhc3R9KQorICBtZXNzYWdlKFNUQVRVUyAiJHtDTUFLRV9BUkdWM30gYXJndW1lbnQgJHtufTogJyR7Q01BS0VfQVJHViR7bn19JyIpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBhYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3NldCgiJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fTU9EVUxFIiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iKQoraW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhOQU1FTUlTTUFUQ0ggUkVRVUlSRURfVkFSUyAiJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fTU9EVUxFIikKK3NldCgiJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fRk9VTkQiIDEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoT2xkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaE9sZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTU1ZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaE9sZC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3NldCgiJHtDTUFLRV9GSU5EX1BBQ0tBR0VfTkFNRX1fTU9EVUxFIiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iKQoraW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhOQU1FTUlTTUFUQ0ggIm9sZCBzaWduYXR1cmUiICIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9NT0RVTEUiKQorc2V0KCIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9GT1VORCIgMSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmROYW1lTWlzbWF0Y2hTdXBwcmVzc2VkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaFN1cHByZXNzZWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyYTU5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmROYW1lTWlzbWF0Y2hTdXBwcmVzc2VkLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorc2V0KCIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9NT0RVTEUiICIke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfSIpCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorc2V0KEZQSFNBX05BTUVfTUlTTUFUQ0hFRCAxKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE5BTUVNSVNNQVRDSCAib2xkIHNpZ25hdHVyZSIgIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X01PRFVMRSIpCit1bnNldChGUEhTQV9OQU1FX01JU01BVENIRUQpCitzZXQoIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X0ZPVU5EIiAxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaFN1cHByZXNzZWRBcmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9GaW5kTmFtZU1pc21hdGNoU3VwcHJlc3NlZEFyZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTBlOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaFN1cHByZXNzZWRBcmcuY21ha2UKQEAgLTAsMCArMSw0IEBACitzZXQoIiR7Q01BS0VfRklORF9QQUNLQUdFX05BTUV9X01PRFVMRSIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IikKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTkFNRU1JU01BVENIIE5BTUVfTUlTTUFUQ0hFRCBSRVFVSVJFRF9WQVJTICIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9NT0RVTEUiKQorc2V0KCIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9GT1VORCIgMSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmROYW1lTWlzbWF0Y2hTdXBwcmVzc2VkQ29tcGF0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZE5hbWVNaXNtYXRjaFN1cHByZXNzZWRDb21wYXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxY2ZlZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmROYW1lTWlzbWF0Y2hTdXBwcmVzc2VkQ29tcGF0LmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorc2V0KCIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9NT0RVTEUiICIke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfSIpCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorc2V0KEZQSFNBX05BTUVfTUlTTUFUQ0hFRCAxKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE5BTUVNSVNNQVRDSCBSRVFVSVJFRF9WQVJTICIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9NT0RVTEUiKQordW5zZXQoRlBIU0FfTkFNRV9NSVNNQVRDSEVEKQorc2V0KCIke0NNQUtFX0ZJTkRfUEFDS0FHRV9OQU1FfV9GT1VORCIgMSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmRVc2VDb21wb25lbnRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvRmluZFVzZUNvbXBvbmVudHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2OGYxZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL0ZpbmRVc2VDb21wb25lbnRzLmNtYWtlCkBAIC0wLDAgKzEsMTUgQEAKKyMgcHNldWRvIGZpbmRfbW9kdWxlCisKK2lmIChVc2VDb21wb25lbnRzX1JFUVVJUkVfVkFSUykKKyAgc2V0KEZPT0JBUiBUUlVFKQorICBzZXQoUkVRVUlSRURfVkFSUyBSRVFVSVJFRF9WQVJTICBGT09CQVIpCitlbmRpZigpCisKK3NldCAoVXNlQ29tcG9uZW50c19Db21wMV9GT1VORCBUUlVFKQorc2V0IChVc2VDb21wb25lbnRzX0NvbXAyX0ZPVU5EIFRSVUUpCitzZXQgKFVzZUNvbXBvbmVudHNfQ29tcDNfRk9VTkQgRkFMU0UpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoVXNlQ29tcG9uZW50cyAke1JFUVVJUkVEX1ZBUlN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX1ZBUiBQc2V1ZG9fVkVSU0lPTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFX0NPTVBPTkVOVFMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9OYW1lTWlzbWF0Y2gtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL05hbWVNaXNtYXRjaC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMmI1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9OYW1lTWlzbWF0Y2gtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIzIEBACitDTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgLiovTW9kdWxlcy9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisgIFRoZSBwYWNrYWdlIG5hbWUgcGFzc2VkIHRvIGBmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3NgCisgIFwoTkFNRU1JU01BVENIXCkgZG9lcyBub3QgbWF0Y2ggdGhlIG5hbWUgb2YgdGhlIGNhbGxpbmcgcGFja2FnZQorICBcKE5hbWVNaXNtYXRjaFwpLiAgVGhpcyBjYW4gbGVhZCB0byBwcm9ibGVtcyBpbiBjYWxsaW5nIGNvZGUgdGhhdCBleHBlY3RzCisgIGBmaW5kX3BhY2thZ2VgIHJlc3VsdCB2YXJpYWJsZXMgXChlLmcuLCBgX0ZPVU5EYFwpIHRvIGZvbGxvdyBhIGNlcnRhaW4KKyAgcGF0dGVybi4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIEZpbmROYW1lTWlzbWF0Y2guY21ha2U6MyBcKGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJnc1wpCisgIE5hbWVNaXNtYXRjaC5jbWFrZTozIFwoZmluZF9wYWNrYWdlXCkKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCisKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCAuKi9Nb2R1bGVzL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKKyAgVGhlIHBhY2thZ2UgbmFtZSBwYXNzZWQgdG8gYGZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJnc2AKKyAgXChOQU1FTUlTTUFUQ0hcKSBkb2VzIG5vdCBtYXRjaCB0aGUgbmFtZSBvZiB0aGUgY2FsbGluZyBwYWNrYWdlCisgIFwoTmFtZU1pc21hdGNoT2xkXCkuICBUaGlzIGNhbiBsZWFkIHRvIHByb2JsZW1zIGluIGNhbGxpbmcgY29kZSB0aGF0IGV4cGVjdHMKKyAgYGZpbmRfcGFja2FnZWAgcmVzdWx0IHZhcmlhYmxlcyBcKGUuZy4sIGBfRk9VTkRgXCkgdG8gZm9sbG93IGEgY2VydGFpbgorICBwYXR0ZXJuLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgRmluZE5hbWVNaXNtYXRjaE9sZC5jbWFrZTozIFwoZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzXCkKKyAgTmFtZU1pc21hdGNoLmNtYWtlOjQgXChmaW5kX3BhY2thZ2VcKQorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL05hbWVNaXNtYXRjaC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL05hbWVNaXNtYXRjaC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2EzY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvTmFtZU1pc21hdGNoLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorc2V0KENNQUtFX01PRFVMRV9QQVRIICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0iKQorCitmaW5kX3BhY2thZ2UoTmFtZU1pc21hdGNoIFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKE5hbWVNaXNtYXRjaE9sZCBSRVFVSVJFRCkKK2ZpbmRfcGFja2FnZShOYW1lTWlzbWF0Y2hTdXBwcmVzc2VkIFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKE5hbWVNaXNtYXRjaFN1cHByZXNzZWRDb21wYXQgUkVRVUlSRUQpCitmaW5kX3BhY2thZ2UoTmFtZU1pc21hdGNoU3VwcHJlc3NlZEFyZyBSRVFVSVJFRCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBmM2U2YzNlLi44ZTM5MDkwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDYgKzEsNyBAQAogaW5jbHVkZShSdW5DTWFrZSkKIAogcnVuX2NtYWtlKEJhZEZvdW5kVmFyKQorcnVuX2NtYWtlKE5hbWVNaXNtYXRjaCkKIAogIyBUaGUgcHNldWRvIG1vZHVsZSB3aWxsICJmaW5kIiBhIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gdmVyc2lvbi4gQ2hlY2sgaWYgdGhlCiAjIHZlcnNpb24gc2VsZWN0aW9uIGNvZGUgaW4gRlBIU0Egd29ya3MgY29ycmVjdGx5LgpAQCAtNDYsMyArNDcsMTEgQEAKIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfTU9EVUxFX1BBVEg9JHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIgIi1EQ09ORklHX01PREU9VFJVRSIpCiBydW5fY21ha2UoY3VzdG9tX21lc3NhZ2VfMikKIHJ1bl9jbWFrZShjdXN0b21fbWVzc2FnZV8zKQorCisjIGNoZWNrIGhhbmRsaW5nIG9mIGNvbXBvbmVudHMKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfTU9EVUxFX1BBVEg9JHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIgIi1EVXNlQ29tcG9uZW50c19WRVJTSU9OPTEuMi4zLjQiKQorcnVuX2NtYWtlKHJlcXVpcmVkX2NvbXBvbmVudHMpCitydW5fY21ha2UocmVxdWlyZWRfYW5kX29wdGlvbmFsX2NvbXBvbmVudHMpCitydW5fY21ha2UoYWxsX29wdGlvbmFsX2NvbXBvbmVudHMpCitsaXN0KEFQUEVORCBSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EVXNlQ29tcG9uZW50c19SRVFVSVJFX1ZBUlM9VFJVRSIpCitydW5fY21ha2UocmVxdWlyZWRfY29tcG9uZW50c193aXRoX3ZhcnMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9hbGxfb3B0aW9uYWxfY29tcG9uZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL2FsbF9vcHRpb25hbF9jb21wb25lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDhiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9hbGxfb3B0aW9uYWxfY29tcG9uZW50cy5jbWFrZQpAQCAtMCwwICsxLDE0IEBACitmaW5kX3BhY2thZ2UoVXNlQ29tcG9uZW50cyBPUFRJT05BTF9DT01QT05FTlRTIENvbXAxIENvbXAyIENvbXAzKQorCitpZiAoTk9UIFVzZUNvbXBvbmVudHNfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJwYWNrYWdlIFVzZUNvbXBvbmVudHMgTm90IEZvdW5kLiIpCitlbmRpZigpCitpZiAoTk9UIFVzZUNvbXBvbmVudHNfQ29tcDFfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJwYWNrYWdlIFVzZUNvbXBvbmVudHMsIGNvbXBvbmVudCBDb21wMSBub3QgZm91bmQuIikKK2VuZGlmKCkKK2lmIChOT1QgVXNlQ29tcG9uZW50c19Db21wMl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgInBhY2thZ2UgVXNlQ29tcG9uZW50cywgY29tcG9uZW50IENvbXAyIG5vdCBmb3VuZC4iKQorZW5kaWYoKQoraWYgKFVzZUNvbXBvbmVudHNfQ29tcDNfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJwYWNrYWdlIFVzZUNvbXBvbmVudHMsIGNvbXBvbmVudCBDb21wMiB1bmV4cGVjdGVkbHkgZm91bmQuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL3JlcXVpcmVkX2FuZF9vcHRpb25hbF9jb21wb25lbnRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvcmVxdWlyZWRfYW5kX29wdGlvbmFsX2NvbXBvbmVudHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2ZGNhYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZQSFNBL3JlcXVpcmVkX2FuZF9vcHRpb25hbF9jb21wb25lbnRzLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK2ZpbmRfcGFja2FnZShVc2VDb21wb25lbnRzIENPTVBPTkVOVFMgQ29tcDEgQ29tcDIgT1BUSU9OQUxfQ09NUE9ORU5UUyBDb21wMykKKworaWYgKE5PVCBVc2VDb21wb25lbnRzX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAicGFja2FnZSBVc2VDb21wb25lbnRzIE5vdCBGb3VuZC4iKQorZW5kaWYoKQoraWYgKE5PVCBVc2VDb21wb25lbnRzX0NvbXAxX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAicGFja2FnZSBVc2VDb21wb25lbnRzLCBjb21wb25lbnQgQ29tcDEgbm90IGZvdW5kLiIpCitlbmRpZigpCitpZiAoTk9UIFVzZUNvbXBvbmVudHNfQ29tcDJfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJwYWNrYWdlIFVzZUNvbXBvbmVudHMsIGNvbXBvbmVudCBDb21wMiBub3QgZm91bmQuIikKK2VuZGlmKCkKK2lmIChVc2VDb21wb25lbnRzX0NvbXAzX0ZPVU5EKQorICBtZXNzYWdlIChGQVRBTF9FUlJPUiAicGFja2FnZSBVc2VDb21wb25lbnRzLCBjb21wb25lbnQgQ29tcDIgdW5leHBlY3RlZGx5IGZvdW5kLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GUEhTQS9yZXF1aXJlZF9jb21wb25lbnRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvcmVxdWlyZWRfY29tcG9uZW50cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGQ4ZTljCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvcmVxdWlyZWRfY29tcG9uZW50cy5jbWFrZQpAQCAtMCwwICsxLDExIEBACitmaW5kX3BhY2thZ2UoVXNlQ29tcG9uZW50cyBDT01QT05FTlRTIENvbXAxIENvbXAyKQorCitpZiAoTk9UIFVzZUNvbXBvbmVudHNfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJwYWNrYWdlIFVzZUNvbXBvbmVudHMgTm90IEZvdW5kLiIpCitlbmRpZigpCitpZiAoTk9UIFVzZUNvbXBvbmVudHNfQ29tcDFfRk9VTkQpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJwYWNrYWdlIFVzZUNvbXBvbmVudHMsIGNvbXBvbmVudCBDb21wMSBOb3QgRm91bmQuIikKK2VuZGlmKCkKK2lmIChOT1QgVXNlQ29tcG9uZW50c19Db21wMl9GT1VORCkKKyAgbWVzc2FnZSAoRkFUQUxfRVJST1IgInBhY2thZ2UgVXNlQ29tcG9uZW50cywgY29tcG9uZW50IENvbXAyIE5vdCBGb3VuZC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRlBIU0EvcmVxdWlyZWRfY29tcG9uZW50c193aXRoX3ZhcnMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GUEhTQS9yZXF1aXJlZF9jb21wb25lbnRzX3dpdGhfdmFycy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDJlZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRlBIU0EvcmVxdWlyZWRfY29tcG9uZW50c193aXRoX3ZhcnMuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZSAoInJlcXVpcmVkX2NvbXBvbmVudHMuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmVhdHVyZVN1bW1hcnkvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GZWF0dXJlU3VtbWFyeS9DTWFrZUxpc3RzLnR4dAppbmRleCA3MmFiZmM4Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GZWF0dXJlU3VtbWFyeS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9GZWF0dXJlU3VtbWFyeS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTEpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvRG93bmxvYWRGaWxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L0Rvd25sb2FkRmlsZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDFiNmQzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L0Rvd25sb2FkRmlsZS5jbWFrZQpAQCAtMCwwICsxLDkgQEAKK2luY2x1ZGUoRmV0Y2hDb250ZW50KQorCitGZXRjaENvbnRlbnRfRGVjbGFyZSgKKyAgdDEKKyAgVVJMICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZHVtbXlGaWxlLnR4dAorICBET1dOTE9BRF9OT19FWFRSQUNUIFlFUworKQorCitGZXRjaENvbnRlbnRfUG9wdWxhdGUodDEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvTWFrZUF2YWlsYWJsZS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L01ha2VBdmFpbGFibGUtc3Rkb3V0LnR4dAppbmRleCA2ZTZjNzMwLi43MTFkZTZiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvTWFrZUF2YWlsYWJsZS1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9NYWtlQXZhaWxhYmxlLXN0ZG91dC50eHQKQEAgLTEsMiArMSwzIEBACiBDb25maXJtYXRpb24gcHJvamVjdCBoYXMgYmVlbiBhZGRlZAorLipDb25maXJtYXRpb24gc3VicHJvamVjdCBoYXMgYmVlbiBhZGRlZAogLipDb25maXJtYXRpb24gc2NyaXB0IGhhcyBiZWVuIGNhbGxlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L01ha2VBdmFpbGFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvTWFrZUF2YWlsYWJsZS5jbWFrZQppbmRleCBhOTNmMWY3Li5kN2ZjNTVjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvTWFrZUF2YWlsYWJsZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvTWFrZUF2YWlsYWJsZS5jbWFrZQpAQCAtOCwxMyArOCwyMiBAQAogICBXaXRob3V0UHJvamVjdAogICBTT1VSQ0VfRElSICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vV2l0aG91dFByb2plY3QKICkKK0ZldGNoQ29udGVudF9EZWNsYXJlKAorICBQcm9qZWN0U3ViZGlyCisgIFNPVVJDRV9ESVIgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9XaXRob3V0UHJvamVjdAorICBTT1VSQ0VfU1VCRElSIFByb2plY3RTdWJkaXIKKykKIAogIyBPcmRlciBpcyBpbXBvcnRhbnQgYW5kIHdpbGwgYmUgdmVyaWZpZWQgYnkgdGVzdCBvdXRwdXQKLUZldGNoQ29udGVudF9NYWtlQXZhaWxhYmxlKFdpdGhQcm9qZWN0IFdpdGhvdXRQcm9qZWN0KQorRmV0Y2hDb250ZW50X01ha2VBdmFpbGFibGUoV2l0aFByb2plY3QgV2l0aG91dFByb2plY3QgUHJvamVjdFN1YmRpcikKIAogZ2V0X3Byb3BlcnR5KGFkZGVkV2l0aCBHTE9CQUwgUFJPUEVSVFkgRmV0Y2hXaXRoUHJvamVjdCBTRVQpCiBpZihOT1QgYWRkZWRXaXRoKQotICBtZXNzYWdlKFNFTkRfRVJST1IgIlN1YmRpciB3aXRoIENNYWtlTGlzdHMudHh0IG5vdCBhZGRlZCIpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiUHJvamVjdCB3aXRoIHRvcCBsZXZlbCBDTWFrZUxpc3RzLnR4dCBub3QgYWRkZWQiKQorZW5kaWYoKQorZ2V0X3Byb3BlcnR5KGFkZGVkU3ViZGlyIEdMT0JBTCBQUk9QRVJUWSBGZXRjaFdpdGhTdWJQcm9qZWN0IFNFVCkKK2lmKE5PVCBhZGRlZFN1YmRpcikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJQcm9qZWN0IHdpdGggQ01ha2VMaXN0cy50eHQgaW4gc3ViZGlyIG5vdCBhZGRlZCIpCiBlbmRpZigpCiAKIGluY2x1ZGUoJHt3aXRob3V0cHJvamVjdF9TT1VSQ0VfRElSfS9jb25maXJtTWVzc2FnZS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9QcmVzZXJ2ZUVtcHR5QXJncy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L1ByZXNlcnZlRW1wdHlBcmdzLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyZDkxNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9QcmVzZXJ2ZUVtcHR5QXJncy1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNCBAQAorLiotLSBOdW1iZXIgb2YgYXJndW1lbnRzOiA2CisuKi0tIEFyZ3VtZW50IDM6ICdiZWZvcmUnCisuKi0tIEFyZ3VtZW50IDQ6ICcnCisuKi0tIEFyZ3VtZW50IDU6ICdhZnRlcicKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9QcmVzZXJ2ZUVtcHR5QXJncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9QcmVzZXJ2ZUVtcHR5QXJncy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjM1NDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L1ByZXNlcnZlRW1wdHlBcmdzLmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUoRmV0Y2hDb250ZW50KQorCisjIE5lZWQgdG8gc2VlIHRoZSBkb3dubG9hZCBjb21tYW5kIG91dHB1dAorc2V0KEZFVENIQ09OVEVOVF9RVUlFVCBPRkYpCisKK0ZldGNoQ29udGVudF9EZWNsYXJlKAorICB0MQorICBET1dOTE9BRF9DT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLVAKKyAgICAgICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2NvdW50QXJncy5jbWFrZQorICAgICAgICAgICAgICAgICAgIGJlZm9yZSAiIiBhZnRlcgorKQorCitGZXRjaENvbnRlbnRfUG9wdWxhdGUodDEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBlMjhhZTk2Li5mM2VkM2UyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTYsNiArNiw3IEBACiBydW5fY21ha2UoRGlyZWN0SWdub3Jlc0RldGFpbHMpCiBydW5fY21ha2UoRmlyc3REZXRhaWxzV2luKQogcnVuX2NtYWtlKERvd25sb2FkVHdpY2UpCitydW5fY21ha2UoRG93bmxvYWRGaWxlKQogcnVuX2NtYWtlKFNhbWVHZW5lcmF0b3IpCiBydW5fY21ha2UoVmFyRGVmaW5pdGlvbnMpCiBydW5fY21ha2UoR2V0UHJvcGVydGllcykKQEAgLTE1LDYgKzE2LDEwIEBACiBydW5fY21ha2UoTWFrZUF2YWlsYWJsZVR3aWNlKQogcnVuX2NtYWtlKE1ha2VBdmFpbGFibGVVbmRlY2xhcmVkKQogCitzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgMSkKK3J1bl9jbWFrZShQcmVzZXJ2ZUVtcHR5QXJncykKK3NldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAwKQorCiAjIFdlIG5lZWQgdG8gcGFzcyB0aHJvdWdoIENNQUtFX0dFTkVSQVRPUiBhbmQgQ01BS0VfTUFLRV9QUk9HUkFNCiAjIHRvIGVuc3VyZSB0aGUgdGVzdCBjYW4gcnVuIG9uIG1hY2hpbmVzIHdoZXJlIHRoZSBidWlsZCB0b29sCiAjIGlzbid0IG9uIHRoZSBQQVRILiBTb21lIGJ1aWxkIHNsYXZlcyBleHBsaWNpdGx5IHRlc3Qgd2l0aCBzdWNoCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvV2l0aG91dFByb2plY3QvUHJvamVjdFN1YmRpci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9XaXRob3V0UHJvamVjdC9Qcm9qZWN0U3ViZGlyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNmVlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvV2l0aG91dFByb2plY3QvUHJvamVjdFN1YmRpci9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDUgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEzKQorcHJvamVjdChQcm9qZWN0U3ViZGlyIExBTkdVQUdFUyBOT05FKQorCitzZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZIEZldGNoV2l0aFN1YlByb2plY3QgWUVTKQorbWVzc2FnZShTVEFUVVMgIkNvbmZpcm1hdGlvbiBzdWJwcm9qZWN0IGhhcyBiZWVuIGFkZGVkIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZldGNoQ29udGVudC9jb3VudEFyZ3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvY291bnRBcmdzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NDJhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvY291bnRBcmdzLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorbWVzc2FnZShTVEFUVVMgIk51bWJlciBvZiBhcmd1bWVudHM6ICR7Q01BS0VfQVJHQ30iKQorbWF0aChFWFBSIGxhc3QgIiR7Q01BS0VfQVJHQ30gLSAxIikKK2ZvcmVhY2gobiBSQU5HRSAzICR7bGFzdH0pCisgIG1lc3NhZ2UoU1RBVFVTICJBcmd1bWVudCAke259OiAnJHtDTUFLRV9BUkdWJHtufX0nIikKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L2R1bW15RmlsZS50eHQgYi9UZXN0cy9SdW5DTWFrZS9GZXRjaENvbnRlbnQvZHVtbXlGaWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTEyY2UxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmV0Y2hDb250ZW50L2R1bW15RmlsZS50eHQKQEAgLTAsMCArMSBAQAorIyBUaGlzIGZpbGUgaXMgdXNlZCB0byB2ZXJpZnkgZmV0Y2hpbmcgYSBzaW5nbGUgZmlsZSBkaXJlY3RseQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBmOGFkYjY0Li40NDQ5ZmYxIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMjMsNyArMjMsNyBAQAogICBlbmRpZigpCiAgIGZpbGUoR0xPQiBpbmRleCAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vLmNtYWtlL2FwaS92MS9yZXBseS9pbmRleC0qLmpzb24pCiAgIGV4ZWN1dGVfcHJvY2VzcygKLSAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICIke1J1bkNNYWtlX1NPVVJDRV9ESVJ9LyR7Y2FzZX0tY2hlY2sucHkiICIke2luZGV4fSIKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICIke1J1bkNNYWtlX1NPVVJDRV9ESVJ9LyR7Y2FzZX0tY2hlY2sucHkiICIke2luZGV4fSIgIiR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfSIKICAgICBSRVNVTFRfVkFSSUFCTEUgcmVzdWx0CiAgICAgT1VUUFVUX1ZBUklBQkxFIG91dHB1dAogICAgIEVSUk9SX1ZBUklBQkxFIG91dHB1dApAQCAtMzQsNiArMzQsMTAgQEAKICAgZW5kaWYoKQogZW5kZnVuY3Rpb24oKQogCitpZihSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlXFw7TWluU2l6ZVJlbFxcO1JlbFdpdGhEZWJJbmZvIikKK2VuZGlmKCkKKwogcnVuX2NtYWtlKE5vdGhpbmcpCiBydW5fY21ha2UoRW1wdHkpCiBydW5fY21ha2UoRW1wdHlDbGllbnQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NoZWNrX2luZGV4LnB5IGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jaGVja19pbmRleC5weQppbmRleCBjZGE3MjM0Li4yMDI0M2MwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NoZWNrX2luZGV4LnB5CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY2hlY2tfaW5kZXgucHkKQEAgLTEwOSwxMCArMTA5LDExIEBACiAgICAgbmFtZSA9IGcuZ2V0KCJuYW1lIiwgTm9uZSkKICAgICBhc3NlcnQgaXNfc3RyaW5nKG5hbWUpCiAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJWaXN1YWwgU3R1ZGlvIik6Ci0gICAgICAgIGFzc2VydCBzb3J0ZWQoZy5rZXlzKCkpID09IFsibmFtZSIsICJwbGF0Zm9ybSJdCisgICAgICAgIGFzc2VydCBzb3J0ZWQoZy5rZXlzKCkpID09IFsibXVsdGlDb25maWciLCAibmFtZSIsICJwbGF0Zm9ybSJdCiAgICAgICAgIGFzc2VydCBpc19zdHJpbmcoZ1sicGxhdGZvcm0iXSkKICAgICBlbHNlOgotICAgICAgICBhc3NlcnQgc29ydGVkKGcua2V5cygpKSA9PSBbIm5hbWUiXQorICAgICAgICBhc3NlcnQgc29ydGVkKGcua2V5cygpKSA9PSBbIm11bHRpQ29uZmlnIiwgIm5hbWUiXQorICAgIGFzc2VydCBpc19ib29sKGdbIm11bHRpQ29uZmlnIl0sIG1hdGNoZXMobmFtZSwgIl4oVmlzdWFsIFN0dWRpbyB8WGNvZGUkfE5pbmphIE11bHRpLUNvbmZpZyQpIikpCiAKIGRlZiBjaGVja19pbmRleF9vYmplY3QoaW5kZXhFbnRyeSwga2luZCwgbWFqb3IsIG1pbm9yLCBjaGVjayk6CiAgICAgYXNzZXJ0IGlzX2RpY3QoaW5kZXhFbnRyeSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWNoZWNrLnB5IGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItY2hlY2sucHkKaW5kZXggNjZjNTU5ZC4uYjU2N2JmMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItY2hlY2sucHkKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItY2hlY2sucHkKQEAgLTEsMTIgKzEsMTggQEAKIGZyb20gY2hlY2tfaW5kZXggaW1wb3J0ICoKIAoraW1wb3J0IGpzb24KIGltcG9ydCBzeXMKIGltcG9ydCBvcwogCitkZWYgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKGZpbGVuYW1lKToKKyAgICBhYnNfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSwgImNvZGVtb2RlbC12Mi1kYXRhIiwgZmlsZW5hbWUpCisgICAgd2l0aCBvcGVuKGFic19maWxlbmFtZSwgInIiKSBhcyBmOgorICAgICAgICByZXR1cm4ganNvbi5sb2FkKGYpCisKIGRlZiBjaGVja19vYmplY3RzKG8sIGcpOgogICAgIGFzc2VydCBpc19saXN0KG8pCiAgICAgYXNzZXJ0IGxlbihvKSA9PSAxCi0gICAgY2hlY2tfaW5kZXhfb2JqZWN0KG9bMF0sICJjb2RlbW9kZWwiLCAyLCAwLCBjaGVja19vYmplY3RfY29kZW1vZGVsKGcpKQorICAgIGNoZWNrX2luZGV4X29iamVjdChvWzBdLCAiY29kZW1vZGVsIiwgMiwgMiwgY2hlY2tfb2JqZWN0X2NvZGVtb2RlbChnKSkKIAogZGVmIGNoZWNrX2JhY2t0cmFjZSh0LCBiLCBiYWNrdHJhY2UpOgogICAgIGJ0ZyA9IHRbImJhY2t0cmFjZUdyYXBoIl0KQEAgLTM2LDYgKzQyLDE2IEBACiAKICAgICBhc3NlcnQgYiBpcyBOb25lCiAKK2RlZiBjaGVja19iYWNrdHJhY2VzKHQsIGFjdHVhbCwgZXhwZWN0ZWQpOgorICAgIGFzc2VydCBpc19saXN0KGFjdHVhbCkKKyAgICBhc3NlcnQgaXNfbGlzdChleHBlY3RlZCkKKyAgICBhc3NlcnQgbGVuKGFjdHVhbCkgPT0gbGVuKGV4cGVjdGVkKQorCisgICAgaSA9IDAKKyAgICB3aGlsZSBpIDwgbGVuKGFjdHVhbCk6CisgICAgICAgIGNoZWNrX2JhY2t0cmFjZSh0LCBhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKQorICAgICAgICBpICs9IDEKKwogZGVmIGNoZWNrX2RpcmVjdG9yeShjKToKICAgICBkZWYgX2NoZWNrKGFjdHVhbCwgZXhwZWN0ZWQpOgogICAgICAgICBhc3NlcnQgaXNfZGljdChhY3R1YWwpCkBAIC0zOTgsNiArNDE0LDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ19leGNlcHRpb249bGFtYmRhIGU6ICJJbmNsdWRlIHBhdGg6ICVzIiAlIGVbInBhdGgiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9leGNlcHRpb249bGFtYmRhIGE6ICJJbmNsdWRlIHBhdGg6ICVzIiAlIGFbInBhdGgiXSkKIAorICAgICAgICAgICAgICAgIGlmICJwcmVjb21waWxlSGVhZGVycyIgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2tleXMuYXBwZW5kKCJwcmVjb21waWxlSGVhZGVycyIpCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIGNoZWNrX3ByZWNvbXBpbGVfaGVhZGVyKGFjdHVhbCwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzX2RpY3QoYWN0dWFsKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfa2V5cyA9IFsiYmFja3RyYWNlIiwgImhlYWRlciJdCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19iYWNrdHJhY2Uob2JqLCBhY3R1YWxbImJhY2t0cmFjZSJdLCBleHBlY3RlZFsiYmFja3RyYWNlIl0pCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBzb3J0ZWQoYWN0dWFsLmtleXMoKSkgPT0gc29ydGVkKGV4cGVjdGVkX2tleXMpCisKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfbGlzdF9tYXRjaChsYW1iZGEgYSwgZTogbWF0Y2hlcyhhWyJoZWFkZXIiXSwgZVsiaGVhZGVyIl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbFsicHJlY29tcGlsZUhlYWRlcnMiXSwgZXhwZWN0ZWRbInByZWNvbXBpbGVIZWFkZXJzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2s9Y2hlY2tfcHJlY29tcGlsZV9oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZXhjZXB0aW9uPWxhbWJkYSBhLCBlOiAiUHJlY29tcGlsZSBoZWFkZXI6ICVzIiAlIGFbImhlYWRlciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdfZXhjZXB0aW9uPWxhbWJkYSBlOiAiUHJlY29tcGlsZSBoZWFkZXI6ICVzIiAlIGVbImhlYWRlciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2V4Y2VwdGlvbj1sYW1iZGEgYTogIlByZWNvbXBpbGUgaGVhZGVyOiAlcyIgJSBhWyJoZWFkZXIiXSkKKworICAgICAgICAgICAgICAgIGlmICJsYW5ndWFnZVN0YW5kYXJkIiBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfa2V5cy5hcHBlbmQoImxhbmd1YWdlU3RhbmRhcmQiKQorCisgICAgICAgICAgICAgICAgICAgIGRlZiBjaGVja19sYW5ndWFnZV9zdGFuZGFyZChhY3R1YWwsIGV4cGVjdGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc19kaWN0KGFjdHVhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2tleXMgPSBbImJhY2t0cmFjZXMiLCAic3RhbmRhcmQiXQorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGFjdHVhbFsic3RhbmRhcmQiXSA9PSBleHBlY3RlZFsic3RhbmRhcmQiXQorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYmFja3RyYWNlcyhvYmosIGFjdHVhbFsiYmFja3RyYWNlcyJdLCBleHBlY3RlZFsiYmFja3RyYWNlcyJdKQorCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc29ydGVkKGFjdHVhbC5rZXlzKCkpID09IHNvcnRlZChleHBlY3RlZF9rZXlzKQorCisgICAgICAgICAgICAgICAgICAgIGNoZWNrX2xhbmd1YWdlX3N0YW5kYXJkKGFjdHVhbFsibGFuZ3VhZ2VTdGFuZGFyZCJdLCBleHBlY3RlZFsibGFuZ3VhZ2VTdGFuZGFyZCJdKQorCiAgICAgICAgICAgICAgICAgaWYgZXhwZWN0ZWRbImRlZmluZXMiXSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfa2V5cy5hcHBlbmQoImRlZmluZXMiKQogCkBAIC00NzEsMTYyICs1MTcsMjMgQEAKIAogZGVmIGdlbl9jaGVja19kaXJlY3RvcmllcyhjLCBnKToKICAgICBleHBlY3RlZCA9IFsKLSAgICAgICAgewotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6IE5vbmUsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogWwotICAgICAgICAgICAgICAgICJeYWxpYXMkIiwKLSAgICAgICAgICAgICAgICAiXmN1c3RvbSQiLAotICAgICAgICAgICAgICAgICJeY3h4JCIsCi0gICAgICAgICAgICAgICAgIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgICAgICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgICAgICAiXmRpciQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeaW50ZXJmYWNlX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IFRydWUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJjaGlsZFNvdXJjZXMiOiBOb25lLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IE5vbmUsCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICJeY3VzdG9tX2V4ZTo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCi0gICAgICAgICAgICAgICAgIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKLSAgICAgICAgICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAotICAgICAgICAgICAgImhhc0luc3RhbGxSdWxlIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN4eCQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogTm9uZSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3N0YXRpY19leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogTm9uZSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJebGlua19pbXBvcnRlZF9vYmplY3RfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IE5vbmUsCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICJeY19vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCi0gICAgICAgICAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEzIiwKLSAgICAgICAgICAgICJoYXNJbnN0YWxsUnVsZSI6IFRydWUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmRpciQiLAotICAgICAgICAgICAgImJ1aWxkIjogIl5kaXIkIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICAiXmRpci9kaXIkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogTm9uZSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAic291cmNlIjogIl5kaXIvZGlyJCIsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmRpci9kaXIkIiwKLSAgICAgICAgICAgICJwYXJlbnRTb3VyY2UiOiAiXmRpciQiLAotICAgICAgICAgICAgImNoaWxkU291cmNlcyI6IE5vbmUsCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogTm9uZSwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAic291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiY2hpbGRTb3VyY2VzIjogTm9uZSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICAgICAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAotICAgICAgICAgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCi0gICAgICAgICAgICAiaGFzSW5zdGFsbFJ1bGUiOiBOb25lLAotICAgICAgICB9LAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL3RvcC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgiZGlyZWN0b3JpZXMvYWxpYXMuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL2N1c3RvbS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgiZGlyZWN0b3JpZXMvY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJkaXJlY3Rvcmllcy9pbXBvcnRlZC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgiZGlyZWN0b3JpZXMvb2JqZWN0Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJkaXJlY3Rvcmllcy9kaXIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL2Rpcl9kaXIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoImRpcmVjdG9yaWVzL2V4dGVybmFsLmpzb24iKSwKICAgICBdCiAKLSAgICBpZiBtYXRjaGVzKGcsICJeVmlzdWFsIFN0dWRpbyAiKToKKyAgICBpZiBtYXRjaGVzKGdbIm5hbWUiXSwgIl5WaXN1YWwgU3R1ZGlvICIpOgogICAgICAgICBmb3IgZSBpbiBleHBlY3RlZDoKICAgICAgICAgICAgIGlmIGVbInBhcmVudFNvdXJjZSJdIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGVbInRhcmdldElkcyJdID0gZmlsdGVyX2xpc3QobGFtYmRhIHQ6IG5vdCBtYXRjaGVzKHQsICJeXFxeWkVST19DSEVDSyIpLCBlWyJ0YXJnZXRJZHMiXSkKIAotICAgIGVsaWYgZyA9PSAiWGNvZGUiOgorICAgIGVsaWYgZ1sibmFtZSJdID09ICJYY29kZSI6CiAgICAgICAgIGlmICc7JyBpbiBvcy5lbnZpcm9uLmdldCgiQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMiLCAiIik6CiAgICAgICAgICAgICBmb3IgZSBpbiBleHBlY3RlZDoKICAgICAgICAgICAgICAgICBlWyJ0YXJnZXRJZHMiXSA9IGZpbHRlcl9saXN0KGxhbWJkYSB0OiBub3QgbWF0Y2hlcyh0LCAiXlxcXihsaW5rX2ltcG9ydGVkX29iamVjdF9leGUpIiksIGVbInRhcmdldElkcyJdKQpAQCAtNjQ2LDQ0MzAgKzU1Myw3NiBAQAogCiBkZWYgZ2VuX2NoZWNrX3RhcmdldHMoYywgZywgaW5Tb3VyY2UpOgogICAgIGV4cGVjdGVkID0gWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmludGVyZmFjZV9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9zaGFyZWRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN1c3RvbV9leGU6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKLSAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImludGVyZmFjZV9leGUiLAotICAgICAgICAgICAgImlkIjogIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiaW50ZXJmYWNlX2V4ZV9FWFBPUlRTIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXm15X2ludGVyZmFjZV9leGVcXC5teWV4ZSQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5iaW4vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bXlfaW50ZXJmYWNlX2V4ZVxcLm15ZXhlJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmxpYi9teV9pbnRlcmZhY2VfZXhlXFwuaW1wJCIsCi0gICAgICAgICAgICAgICAgICAgICJfYWl4RXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/bXlfaW50ZXJmYWNlX2V4ZVxcLihkbGxcXC5hfGxpYikkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5iaW4vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bXlfaW50ZXJmYWNlX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeXFwuJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX2xpYiIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJTVEFUSUNfTElCUkFSWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y19saWJcXC4oYXxsaWIpJCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2NfbGliXFwuKGF8bGliKSQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IHsKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJeY19leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2NfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXlxcLiQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNfc2hhcmVkX2xpYiIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInR5cGUiOiAiU0hBUkVEX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiY19zaGFyZWRfbGliX0VYUE9SVFMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWJ8Y3lnKT9jX3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2Nfc2hhcmVkX2xpYlxcLihkbGxcXC5hfGxpYikkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5saWIvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2Nfc2hhcmVkX2xpYlxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeXFwuJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX3NoYXJlZF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0JCQkJCSJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY19zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX3NoYXJlZF9leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IFRydWUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX3N0YXRpY19saWIiLAotICAgICAgICAgICAgImlkIjogIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2Nfc3RhdGljX2xpYlxcLihhfGxpYikkIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y19zdGF0aWNfbGliXFwuKGF8bGliKSQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXlxcLiQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeXFwuJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IHsKLSAgICAgICAgICAgICAgICAibHRvIjogVHJ1ZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNfc3RhdGljX2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNCwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jX3N0YXRpY19leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc3RhdGljX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeXFwuJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5cXC4kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19zdGF0aWNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCi0gICAgICAgICAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN4eCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9zdGF0aWNfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCi0gICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN4eCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X2xpYiIsCi0gICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDQsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeKGxpYik/Y3h4X2xpYlxcLihhfGxpYikkIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2N4eF9saWJcXC4oYXxsaWIpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogewotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlRhcmdldENvbXBpbGVPcHRpb25zIiwKLQkJCQkJCQkiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9vcHRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCQkJCQkJCQl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiAiYmluIiwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jeHhfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN4eCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiB7Ci0gICAgICAgICAgICAgICAgInByZWZpeCI6ICJeKC91c3IvbG9jYWx8W0EtWmEtel06LiovY29kZW1vZGVsLXYyKSQiLAotICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImJpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMzcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICJUYXJnZXRMaW5rT3B0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAicm9sZSIgOiAiZmxhZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19vcHRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiA6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICIuKlRhcmdldExpbmtEaXJcXFwiPyQiLAotICAgICAgICAgICAgICAgICAgICAgICAgInJvbGUiIDogImxpYnJhcnlQYXRoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiIDogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIi4qY3h4X2xpYi4qIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyb2xlIiA6ICJsaWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X3NoYXJlZF9saWIiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiU0hBUkVEX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogImN4eF9zaGFyZWRfbGliX0VYUE9SVFMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWJ8Y3lnKT9jeHhfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGlifGN5Zyk/Y3h4X3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X3NoYXJlZF9saWJcXC4oZGxsXFwuYXxsaWIpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWJ8Y3lnKT9jeHhfc2hhcmVkX2xpYlxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN4eF9zaGFyZWRfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3NoYXJlZF9leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN4eCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3h4JCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X3N0YXRpY19saWIiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiU1RBVElDX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2N4eF9zdGF0aWNfbGliXFwuKGF8bGliKSQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X3N0YXRpY19saWJcXC4oYXxsaWIpJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogewotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X3N0YXRpY19leGUiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTQsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY3h4X3N0YXRpY19leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhdGljX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3h4JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jeHgkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJBbGlhcyIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9hbGlhcy9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAotICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9hbGlhcy9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5hbGlhcyQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBOb25lLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX2FsaWFzX2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2FsaWFzX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeYWxpYXMkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN4eF9hbGlhc19leGUiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY3h4X2FsaWFzX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfYWxpYXNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmFsaWFzLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9hbGlhc19leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5hbGlhcyQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCi0gICAgICAgICAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCi0gICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY19vYmplY3RfbGliIiwKLSAgICAgICAgICAgICJpZCI6ICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJPQkpFQ1RfTElCUkFSWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjX29iamVjdF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jX29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jX29iamVjdF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19vYmplY3RfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiB7Ci0gICAgICAgICAgICAgICAgInByZWZpeCI6ICJeKC91c3IvbG9jYWx8W0EtWmEtel06LiovY29kZW1vZGVsLXYyKSQiLAotICAgICAgICAgICAgICAgICJkZXN0aW5hdGlvbnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIjogImJpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IEFkZCBhIGJhY2t0cmFjZSBoZXJlIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICMgWW91J2xsIGtub3cgd2hlbiBpdCdzIGF2YWlsYWJsZSwgYmVjYXVzZSB0aGlzIHRlc3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGZhaWwuCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X29iamVjdF9saWIiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAotICAgICAgICAgICAgInR5cGUiOiAiT0JKRUNUX0xJQlJBUlkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0Ly4qL2VtcHR5KFxcLmN4eCk/XFwubyhiaik/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY3h4X29iamVjdF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvLiovZW1wdHkoXFwuY3h4KT9cXC5vKGJqKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jeHgpP1xcLm8oYmopPyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJeY3h4X29iamVjdF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXm9iamVjdC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfb2JqZWN0X2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5vYmplY3QkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogewotICAgICAgICAgICAgICAgICJwcmVmaXgiOiAiXigvdXNyL2xvY2FsfFtBLVphLXpdOi4qL2NvZGVtb2RlbC12MikkIiwKLSAgICAgICAgICAgICAgICAiZGVzdGluYXRpb25zIjogWwotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJiaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbnN0YWxsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQWRkIGEgYmFja3RyYWNlIGhlcmUgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgIyBZb3UnbGwga25vdyB3aGVuIGl0J3MgYXZhaWxhYmxlLCBiZWNhdXNlIHRoaXMgdGVzdCB3aWxsCi0gICAgICAgICAgICAgICAgICAgICMgZmFpbC4KLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX29iamVjdF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiWkVST19DSEVDSyIsCi0gICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX3NoYXJlZF9leGUiLAotICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3NoYXJlZF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9zaGFyZWRfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX3N0YXRpY19leGUiLAotICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6ICJebGlua19pbXBvcnRlZF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3N0YXRpY19leGVcXC5wZGIkIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkltcG9ydGVkIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImluY2x1ZGVzIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImRlZmluZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTgsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5saW5rX2ltcG9ydGVkX29iamVjdF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9vYmplY3RfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgImx0byI6IE5vbmUsCi0gICAgICAgICAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBOb25lLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlIiwKLSAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAotICAgICAgICAgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IE5vbmUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDIzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAyMywKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZShcXC5leGUpPyQiLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICAgICAgICAgIl9kbGxFeHRyYSI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogewotICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJBTExfQlVJTEQiLAotICAgICAgICAgICAgImlkIjogIl5BTExfQlVJTEQ6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3VzdG9tJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKLSAgICAgICAgICAgICJ0eXBlIjogIlVUSUxJVFkiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBUcnVlLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCi0gICAgICAgICAgICAic291cmNlIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJpbnN0YWxsIjogTm9uZSwKLSAgICAgICAgICAgICJsaW5rIjogTm9uZSwKLSAgICAgICAgICAgICJhcmNoaXZlIjogTm9uZSwKLSAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAotICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzb3VyY2VHcm91cHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IE5vbmUsCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogTm9uZSwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBOb25lLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiBOb25lLAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IE5vbmUsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN1c3RvbV90Z3QiLAotICAgICAgICAgICAgImlkIjogIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL2N1c3RvbV90Z3QkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfY3VzdG9tX3RhcmdldCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkLyhjdXN0b20vKT9DTWFrZUZpbGVzLyhbMC05YS1mXSsvKT9jdXN0b21fdGd0XFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9jdXN0b21fdGd0JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC8oY3VzdG9tLyk/Q01ha2VGaWxlcy8oWzAtOWEtZl0rLyk/Y3VzdG9tX3RndFxcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogTm9uZSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfY3VzdG9tX3RhcmdldCIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiBOb25lLAotICAgICAgICAgICAgImFydGlmYWN0cyI6IE5vbmUsCi0gICAgICAgICAgICAiYnVpbGQiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImN1c3RvbV9leGUiLAotICAgICAgICAgICAgImlkIjogIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCi0gICAgICAgICAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogTm9uZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJjb21waWxlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiZGVmaW5lcyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogNCwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZm9sZGVyIjogTm9uZSwKLSAgICAgICAgICAgICJuYW1lT25EaXNrIjogIl5jdXN0b21fZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN1c3RvbS8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jdXN0b21fZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXmN1c3RvbS8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jdXN0b21fZXhlXFwucGRiJCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImJ1aWxkIjogIl5jdXN0b20kIiwKLSAgICAgICAgICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAotICAgICAgICAgICAgImluc3RhbGwiOiBOb25lLAotICAgICAgICAgICAgImxpbmsiOiB7Ci0gICAgICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAotICAgICAgICAgICAgICAgICJsdG8iOiBOb25lLAotICAgICAgICAgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2RlcGVuZGVuY2llcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCi0gICAgICAgICAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAotICAgICAgICAgICAgInR5cGUiOiAiVVRJTElUWSIsCi0gICAgICAgICAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IFRydWUsCi0gICAgICAgICAgICAic291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBOb25lLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiaWQiOiAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAotICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgICJwcm9qZWN0TmFtZSI6ICJFeHRlcm5hbCIsCi0gICAgICAgICAgICAidHlwZSI6ICJVVElMSVRZIiwKLSAgICAgICAgICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICJzb3VyY2VzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCi0gICAgICAgICAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKLSAgICAgICAgICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInNvdXJjZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIiIsCi0gICAgICAgICAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImNvbXBpbGVHcm91cHMiOiBOb25lLAotICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImZvbGRlciI6IE5vbmUsCi0gICAgICAgICAgICAibmFtZU9uRGlzayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJ0aWZhY3RzIjogTm9uZSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IE5vbmUsCi0gICAgICAgICAgICAiYXJjaGl2ZSI6IE5vbmUsCi0gICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogTm9uZSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZ2VuZXJhdGVkX2V4ZSIsCi0gICAgICAgICAgICAiaWQiOiAiXmdlbmVyYXRlZF9leGU6OkBbMC05YS1mXSskIiwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAotICAgICAgICAgICAgInByb2plY3ROYW1lIjogIkV4dGVybmFsIiwKLSAgICAgICAgICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAotICAgICAgICAgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBOb25lLAotICAgICAgICAgICAgInNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL2VtcHR5XFwuYyQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL2dlbmVyYXRlZFxcLmN4eCQiLAotICAgICAgICAgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkdlbmVyYXRlZCBTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3NvdXJjZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic291cmNlR3JvdXBzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdlbmVyYXRlZCBTb3VyY2UgRmlsZXMiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvZ2VuZXJhdGVkXFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiY29tcGlsZUdyb3VwcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKLSAgICAgICAgICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvZW1wdHlcXC5jJCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc1N5c3RlbSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzU3lzdGVtIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiRU1QVFlfQz0xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9wcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmluZSI6ICJTUkNfRFVNTVkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIkdFTkVSQVRFRF9FWEU9MSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiVEdUX0RVTU1ZIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlNSQ19DT01QSUxFX09QVElPTlNfRFVNTVkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiIDogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAotICAgICAgICAgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvZ2VuZXJhdGVkXFwuY3h4JCIsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzU3lzdGVtIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJkZWZpbmVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiR0VORVJBVEVEX0VYRT0xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmluZSI6ICJUR1RfRFVNTVkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX2RlZmluaXRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBUcnVlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKLSAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJmb2xkZXIiOiBOb25lLAotICAgICAgICAgICAgIm5hbWVPbkRpc2siOiAiXmdlbmVyYXRlZF9leGUoXFwuZXhlKT8kIiwKLSAgICAgICAgICAgICJhcnRpZmFjdHMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9nZW5lcmF0ZWRfZXhlKFxcLmV4ZSk/JCIsCi0gICAgICAgICAgICAgICAgICAgICJfZGxsRXh0cmEiOiBGYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Z2VuZXJhdGVkX2V4ZVxcLnBkYiQiLAotICAgICAgICAgICAgICAgICAgICAiX2RsbEV4dHJhIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAotICAgICAgICAgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCi0gICAgICAgICAgICAiaW5zdGFsbCI6IE5vbmUsCi0gICAgICAgICAgICAibGluayI6IHsKLSAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKLSAgICAgICAgICAgICAgICAibHRvIjogTm9uZSwKLSAgICAgICAgICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IE5vbmUsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImFyY2hpdmUiOiBOb25lLAotICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAotICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogTm9uZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF90b3AuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvemVyb19jaGVja190b3AuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvaW50ZXJmYWNlX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX3NoYXJlZF9saWIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY19zaGFyZWRfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2Nfc3RhdGljX2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jX3N0YXRpY19leGUuanNvbiIpLAorCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9hbGxfYnVpbGRfY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL3plcm9fY2hlY2tfY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9saWIuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3h4X2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfc3RhbmRhcmRfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9zaGFyZWRfbGliLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9zaGFyZWRfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9zdGF0aWNfbGliLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9zdGF0aWNfZXhlLmpzb24iKSwKKworICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvYWxsX2J1aWxkX2FsaWFzLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL3plcm9fY2hlY2tfYWxpYXMuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY19hbGlhc19leGUuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3h4X2FsaWFzX2V4ZS5qc29uIiksCisKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF9vYmplY3QuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvemVyb19jaGVja19vYmplY3QuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY19vYmplY3RfbGliLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2Nfb2JqZWN0X2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfb2JqZWN0X2xpYi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfb2JqZWN0X2V4ZS5qc29uIiksCisKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF9pbXBvcnRlZC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy96ZXJvX2NoZWNrX2ltcG9ydGVkLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2xpbmtfaW1wb3J0ZWRfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2xpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZS5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9saW5rX2ltcG9ydGVkX3N0YXRpY19leGUuanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvbGlua19pbXBvcnRlZF9vYmplY3RfZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2xpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZS5qc29uIiksCisKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF9jdXN0b20uanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvemVyb19jaGVja19jdXN0b20uanNvbiIpLAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3VzdG9tX3RndC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jdXN0b21fZXhlLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2FsbF9idWlsZF9leHRlcm5hbC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy96ZXJvX2NoZWNrX2V4dGVybmFsLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2dlbmVyYXRlZF9leGUuanNvbiIpLAogICAgIF0KIAorICAgIGlmIGN4eF9jb21waWxlcl9pZCBpbiBbJ0NsYW5nJywgJ0FwcGxlQ2xhbmcnLCAnR05VJywgJ0ludGVsJywgJ01TVkMnLCAnRW1iYXJjYWRlcm8nXSBhbmQgZ1sibmFtZSJdICE9ICJYY29kZSI6CisgICAgICAgIGZvciBlIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgaWYgZVsibmFtZSJdID09ICJjeHhfZXhlIjoKKyAgICAgICAgICAgICAgICBpZiBtYXRjaGVzKGdbIm5hbWUiXSwgIl4oVmlzdWFsIFN0dWRpbyB8TmluamEgTXVsdGktQ29uZmlnKSIpOgorICAgICAgICAgICAgICAgICAgICBwcmVjb21waWxlX2hlYWRlcl9kYXRhID0gcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlcl9tdWx0aWdlbi5qc29uIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiAnOycgaW4gb3MuZW52aXJvbi5nZXQoIkNNQUtFX09TWF9BUkNISVRFQ1RVUkVTIiwgIiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJlY29tcGlsZV9oZWFkZXJfZGF0YSA9IHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgidGFyZ2V0cy9jeHhfZXhlX3ByZWNvbXBpbGVoZWFkZXJfMmFyY2guanNvbiIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVjb21waWxlX2hlYWRlcl9kYXRhID0gcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJ0YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlci5qc29uIikKKyAgICAgICAgICAgICAgICBlWyJjb21waWxlR3JvdXBzIl0gPSBwcmVjb21waWxlX2hlYWRlcl9kYXRhWyJjb21waWxlR3JvdXBzIl0KKyAgICAgICAgICAgICAgICBlWyJzb3VyY2VzIl0gPSBwcmVjb21waWxlX2hlYWRlcl9kYXRhWyJzb3VyY2VzIl0KKyAgICAgICAgICAgICAgICBlWyJzb3VyY2VHcm91cHMiXSA9IHByZWNvbXBpbGVfaGVhZGVyX2RhdGFbInNvdXJjZUdyb3VwcyJdCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocmVwbHlfZGlyLCAiLi4iLCAiLi4iLCAiLi4iLCAiLi4iLCAiY3h4IiwgImN4eF9zdGRfMTEudHh0IikpOgorICAgICAgICBmb3IgZSBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgIGlmIGVbIm5hbWUiXSA9PSAiY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGUiOgorICAgICAgICAgICAgICAgIGxhbmd1YWdlX3N0YW5kYXJkX2RhdGEgPSByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInRhcmdldHMvY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGVfbGFuZ3VhZ2VzdGFuZGFyZC5qc29uIikKKyAgICAgICAgICAgICAgICBlWyJjb21waWxlR3JvdXBzIl1bMF1bImxhbmd1YWdlU3RhbmRhcmQiXSA9IGxhbmd1YWdlX3N0YW5kYXJkX2RhdGFbImxhbmd1YWdlU3RhbmRhcmQiXQorCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihyZXBseV9kaXIsICIuLiIsICIuLiIsICIuLiIsICIuLiIsICJpcG9fZW5hYmxlZC50eHQiKSk6CiAgICAgICAgIGZvciBlIGluIGV4cGVjdGVkOgogICAgICAgICAgICAgdHJ5OgpAQCAtNTA4NywxMyArNjQwLDEzIEBACiAgICAgICAgICAgICAgICAgZm9yIHMgaW4gZVsic291cmNlcyJdOgogICAgICAgICAgICAgICAgICAgICBzWyJwYXRoIl0gPSBzWyJwYXRoIl0ucmVwbGFjZSgiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvIiwgIl4iLCAxKQogICAgICAgICAgICAgaWYgZVsic291cmNlR3JvdXBzIl0gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZm9yIGcgaW4gZVsic291cmNlR3JvdXBzIl06Ci0gICAgICAgICAgICAgICAgICAgIGdbInNvdXJjZVBhdGhzIl0gPSBbcC5yZXBsYWNlKCJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS8iLCAiXiIsIDEpIGZvciBwIGluIGdbInNvdXJjZVBhdGhzIl1dCisgICAgICAgICAgICAgICAgZm9yIGdyb3VwIGluIGVbInNvdXJjZUdyb3VwcyJdOgorICAgICAgICAgICAgICAgICAgICBncm91cFsic291cmNlUGF0aHMiXSA9IFtwLnJlcGxhY2UoIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJLyIsICJeIiwgMSkgZm9yIHAgaW4gZ3JvdXBbInNvdXJjZVBhdGhzIl1dCiAgICAgICAgICAgICBpZiBlWyJjb21waWxlR3JvdXBzIl0gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZm9yIGcgaW4gZVsiY29tcGlsZUdyb3VwcyJdOgotICAgICAgICAgICAgICAgICAgICBnWyJzb3VyY2VQYXRocyJdID0gW3AucmVwbGFjZSgiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvIiwgIl4iLCAxKSBmb3IgcCBpbiBnWyJzb3VyY2VQYXRocyJdXQorICAgICAgICAgICAgICAgIGZvciBncm91cCBpbiBlWyJjb21waWxlR3JvdXBzIl06CisgICAgICAgICAgICAgICAgICAgIGdyb3VwWyJzb3VyY2VQYXRocyJdID0gW3AucmVwbGFjZSgiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvIiwgIl4iLCAxKSBmb3IgcCBpbiBncm91cFsic291cmNlUGF0aHMiXV0KIAotICAgIGlmIG1hdGNoZXMoZywgIl5WaXN1YWwgU3R1ZGlvICIpOgorICAgIGlmIG1hdGNoZXMoZ1sibmFtZSJdLCAiXlZpc3VhbCBTdHVkaW8gIik6CiAgICAgICAgIGV4cGVjdGVkID0gZmlsdGVyX2xpc3QobGFtYmRhIGU6IGVbIm5hbWUiXSBub3QgaW4gKCJaRVJPX0NIRUNLIikgb3IgZVsiaWQiXSA9PSAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLCBleHBlY3RlZCkKICAgICAgICAgZm9yIGUgaW4gZXhwZWN0ZWQ6CiAgICAgICAgICAgICBpZiBlWyJ0eXBlIl0gPT0gIlVUSUxJVFkiOgpAQCAtNTEzMCw3ICs2ODMsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaGVzKGRbImlkIl0sICJeXFxeWkVST19DSEVDSzo6QCIpOgogICAgICAgICAgICAgICAgICAgICAgICAgZFsiaWQiXSA9ICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIKIAotICAgIGVsaWYgZyA9PSAiWGNvZGUiOgorICAgIGVsaWYgZ1sibmFtZSJdID09ICJYY29kZSI6CiAgICAgICAgIGlmICc7JyBpbiBvcy5lbnZpcm9uLmdldCgiQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMiLCAiIik6CiAgICAgICAgICAgICBleHBlY3RlZCA9IGZpbHRlcl9saXN0KGxhbWJkYSBlOiBlWyJuYW1lIl0gbm90IGluICgibGlua19pbXBvcnRlZF9vYmplY3RfZXhlIiksIGV4cGVjdGVkKQogICAgICAgICAgICAgZm9yIGUgaW4gZXhwZWN0ZWQ6CkBAIC01MTY0LDEzNCArNzE3LDIxIEBACiAKIGRlZiBnZW5fY2hlY2tfcHJvamVjdHMoYywgZyk6CiAgICAgZXhwZWN0ZWQgPSBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAicGFyZW50TmFtZSI6IE5vbmUsCi0gICAgICAgICAgICAiY2hpbGROYW1lcyI6IFsKLSAgICAgICAgICAgICAgICAiQWxpYXMiLAotICAgICAgICAgICAgICAgICJDdXN0b20iLAotICAgICAgICAgICAgICAgICJDeHgiLAotICAgICAgICAgICAgICAgICJJbXBvcnRlZCIsCi0gICAgICAgICAgICAgICAgIk9iamVjdCIsCi0gICAgICAgICAgICAgICAgIkV4dGVybmFsIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICAiXlxcLiQiLAotICAgICAgICAgICAgICAgICJeZGlyJCIsCi0gICAgICAgICAgICAgICAgIl5kaXIvZGlyJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmludGVyZmFjZV9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeY19leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgICAgICAiXmNfc2hhcmVkX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCi0gICAgICAgICAgICAgICAgIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAotICAgICAgICAgICAgICAgICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkN4eCIsCi0gICAgICAgICAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBOb25lLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl5jeHgkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAotICAgICAgICAgICAgICAgICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCi0gICAgICAgICAgICAgICAgIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9zaGFyZWRfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9zaGFyZWRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9zdGF0aWNfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9zdGF0aWNfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkFsaWFzIiwKLSAgICAgICAgICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAiY2hpbGROYW1lcyI6IE5vbmUsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICAiXmFsaWFzJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiT2JqZWN0IiwKLSAgICAgICAgICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAiY2hpbGROYW1lcyI6IE5vbmUsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICAiXm9iamVjdCQiLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJ0YXJnZXRJZHMiOiBbCi0gICAgICAgICAgICAgICAgIl5BTExfQlVJTEQ6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCi0gICAgICAgICAgICAgICAgIl5jX29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAotICAgICAgICAgICAgICAgICJeY19vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgICAgICAiXmN4eF9vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkltcG9ydGVkIiwKLSAgICAgICAgICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCi0gICAgICAgICAgICAiY2hpbGROYW1lcyI6IE5vbmUsCi0gICAgICAgICAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKLSAgICAgICAgICAgICAgICAiXmltcG9ydGVkJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICAgICAgIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAotICAgICAgICAgICAgICAgICJebGlua19pbXBvcnRlZF9vYmplY3RfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKLSAgICAgICAgICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJDdXN0b20iLAotICAgICAgICAgICAgInBhcmVudE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKLSAgICAgICAgICAgICJjaGlsZE5hbWVzIjogTm9uZSwKLSAgICAgICAgICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWwotICAgICAgICAgICAgICAgICJeY3VzdG9tJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInRhcmdldElkcyI6IFsKLSAgICAgICAgICAgICAgICAiXkFMTF9CVUlMRDo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKLSAgICAgICAgICAgICAgICAiXmN1c3RvbV90Z3Q6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAotICAgICAgICAgICAgICAgICJeY3VzdG9tX2V4ZTo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJFeHRlcm5hbCIsCi0gICAgICAgICAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAotICAgICAgICAgICAgImNoaWxkTmFtZXMiOiBOb25lLAotICAgICAgICAgICAgImRpcmVjdG9yeVNvdXJjZXMiOiBbCi0gICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAidGFyZ2V0SWRzIjogWwotICAgICAgICAgICAgICAgICJeQUxMX0JVSUxEOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAgICAgIl5aRVJPX0NIRUNLOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICAgICAgIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAorICAgICAgICByZWFkX2NvZGVtb2RlbF9qc29uX2RhdGEoInByb2plY3RzL2NvZGVtb2RlbC12Mi5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgicHJvamVjdHMvY3h4Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJwcm9qZWN0cy9hbGlhcy5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgicHJvamVjdHMvb2JqZWN0Lmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJwcm9qZWN0cy9pbXBvcnRlZC5qc29uIiksCisgICAgICAgIHJlYWRfY29kZW1vZGVsX2pzb25fZGF0YSgicHJvamVjdHMvY3VzdG9tLmpzb24iKSwKKyAgICAgICAgcmVhZF9jb2RlbW9kZWxfanNvbl9kYXRhKCJwcm9qZWN0cy9leHRlcm5hbC5qc29uIiksCiAgICAgXQogCi0gICAgaWYgbWF0Y2hlcyhnLCAiXlZpc3VhbCBTdHVkaW8gIik6CisgICAgaWYgbWF0Y2hlcyhnWyJuYW1lIl0sICJeVmlzdWFsIFN0dWRpbyAiKToKICAgICAgICAgZm9yIGUgaW4gZXhwZWN0ZWQ6CiAgICAgICAgICAgICBpZiBlWyJwYXJlbnROYW1lIl0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgZVsidGFyZ2V0SWRzIl0gPSBmaWx0ZXJfbGlzdChsYW1iZGEgdDogbm90IG1hdGNoZXModCwgIl5cXF5aRVJPX0NIRUNLIiksIGVbInRhcmdldElkcyJdKQogCi0gICAgZWxpZiBnID09ICJYY29kZSI6CisgICAgZWxpZiBnWyJuYW1lIl0gPT0gIlhjb2RlIjoKICAgICAgICAgaWYgJzsnIGluIG9zLmVudmlyb24uZ2V0KCJDTUFLRV9PU1hfQVJDSElURUNUVVJFUyIsICIiKToKICAgICAgICAgICAgIGZvciBlIGluIGV4cGVjdGVkOgogICAgICAgICAgICAgICAgIGVbInRhcmdldElkcyJdID0gZmlsdGVyX2xpc3QobGFtYmRhIHQ6IG5vdCBtYXRjaGVzKHQsICJeXFxeKGxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZSkiKSwgZVsidGFyZ2V0SWRzIl0pCkBAIC01MzI3LDcgKzc2Nyw3IEBACiAKICAgICAgICAgaW5Tb3VyY2UgPSBvcy5wYXRoLmRpcm5hbWUob1sicGF0aHMiXVsiYnVpbGQiXSkgPT0gb1sicGF0aHMiXVsic291cmNlIl0KIAotICAgICAgICBpZiBtYXRjaGVzKGcsICJeKFZpc3VhbCBTdHVkaW8gfFhjb2RlJCkiKToKKyAgICAgICAgaWYgZ1sibXVsdGlDb25maWciXToKICAgICAgICAgICAgIGFzc2VydCBzb3J0ZWQoW2NbIm5hbWUiXSBmb3IgYyBpbiBvWyJjb25maWd1cmF0aW9ucyJdXSkgPT0gWyJEZWJ1ZyIsICJNaW5TaXplUmVsIiwgIlJlbFdpdGhEZWJJbmZvIiwgIlJlbGVhc2UiXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXNzZXJ0IGxlbihvWyJjb25maWd1cmF0aW9ucyJdKSA9PSAxCkBAIC01MzM3LDYgKzc3Nyw3IEBACiAgICAgICAgICAgICBjaGVja19vYmplY3RfY29kZW1vZGVsX2NvbmZpZ3VyYXRpb24oYywgZywgaW5Tb3VyY2UpCiAgICAgcmV0dXJuIF9jaGVjawogCitjeHhfY29tcGlsZXJfaWQgPSBzeXMuYXJndlsyXQogYXNzZXJ0IGlzX2RpY3QoaW5kZXgpCiBhc3NlcnQgc29ydGVkKGluZGV4LmtleXMoKSkgPT0gWyJjbWFrZSIsICJvYmplY3RzIiwgInJlcGx5Il0KLWNoZWNrX29iamVjdHMoaW5kZXhbIm9iamVjdHMiXSwgaW5kZXhbImNtYWtlIl1bImdlbmVyYXRvciJdWyJuYW1lIl0pCitjaGVja19vYmplY3RzKGluZGV4WyJvYmplY3RzIl0sIGluZGV4WyJjbWFrZSJdWyJnZW5lcmF0b3IiXSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvYWxpYXMuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvYWxpYXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjBjNDhhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9hbGlhcy5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAic291cmNlIjogIl5hbGlhcyQiLAorICAgICJidWlsZCI6ICJeYWxpYXMkIiwKKyAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKKyAgICAiY2hpbGRTb3VyY2VzIjogbnVsbCwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAiXmN4eF9hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiCisgICAgXSwKKyAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAorICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAorICAgICJoYXNJbnN0YWxsUnVsZSI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvY3VzdG9tLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2N1c3RvbS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZDQxZjMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2N1c3RvbS5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAic291cmNlIjogIl5jdXN0b20kIiwKKyAgICAiYnVpbGQiOiAiXmN1c3RvbSQiLAorICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAorICAgICJjaGlsZFNvdXJjZXMiOiBudWxsLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIgorICAgIF0sCisgICAgInByb2plY3ROYW1lIjogIkN1c3RvbSIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCisgICAgImhhc0luc3RhbGxSdWxlIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9jeHguanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvY3h4Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxYjZlYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvY3h4Lmpzb24KQEAgLTAsMCArMSwyMSBAQAoreworICAgICJzb3VyY2UiOiAiXmN4eCQiLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInBhcmVudFNvdXJjZSI6ICJeXFwuJCIsCisgICAgImNoaWxkU291cmNlcyI6IG51bGwsCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc3RhbmRhcmRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc2hhcmVkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zdGF0aWNfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc3RhdGljX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIKKyAgICBdLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAorICAgICJoYXNJbnN0YWxsUnVsZSI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvZGlyLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2Rpci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYmQ0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2Rpci5qc29uCkBAIC0wLDAgKzEsMTIgQEAKK3sKKyAgICAic291cmNlIjogIl5kaXIkIiwKKyAgICAiYnVpbGQiOiAiXmRpciQiLAorICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAorICAgICJjaGlsZFNvdXJjZXMiOiBbCisgICAgICAgICJeZGlyL2RpciQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogbnVsbCwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKKyAgICAiaGFzSW5zdGFsbFJ1bGUiOiBudWxsCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2Rpcl9kaXIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvZGlyX2Rpci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzdhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2Rpcl9kaXIuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgInNvdXJjZSI6ICJeZGlyL2RpciQiLAorICAgICJidWlsZCI6ICJeZGlyL2RpciQiLAorICAgICJwYXJlbnRTb3VyY2UiOiAiXmRpciQiLAorICAgICJjaGlsZFNvdXJjZXMiOiBudWxsLAorICAgICJ0YXJnZXRJZHMiOiBudWxsLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTIiLAorICAgICJoYXNJbnN0YWxsUnVsZSI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvZXh0ZXJuYWwuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvZXh0ZXJuYWwuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjFlM2M3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9leHRlcm5hbC5qc29uCkBAIC0wLDAgKzEsMTQgQEAKK3sKKyAgICAic291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKKyAgICAiYnVpbGQiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQkIiwKKyAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKKyAgICAiY2hpbGRTb3VyY2VzIjogbnVsbCwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBbMC05YS1mXSskIiwKKyAgICAgICAgIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIKKyAgICBdLAorICAgICJwcm9qZWN0TmFtZSI6ICJFeHRlcm5hbCIsCisgICAgIm1pbmltdW1DTWFrZVZlcnNpb24iOiAiMy4xMiIsCisgICAgImhhc0luc3RhbGxSdWxlIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9pbXBvcnRlZC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9pbXBvcnRlZC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MWI3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL2ltcG9ydGVkLmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAorICAgICJwYXJlbnRTb3VyY2UiOiAiXlxcLiQiLAorICAgICJjaGlsZFNvdXJjZXMiOiBudWxsLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX29iamVjdF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9zdGF0aWNfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIgorICAgIF0sCisgICAgInByb2plY3ROYW1lIjogIkltcG9ydGVkIiwKKyAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKKyAgICAiaGFzSW5zdGFsbFJ1bGUiOiBudWxsCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL29iamVjdC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9vYmplY3QuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTY0N2FkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9kaXJlY3Rvcmllcy9vYmplY3QuanNvbgpAQCAtMCwwICsxLDE3IEBACit7CisgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKKyAgICAicGFyZW50U291cmNlIjogIl5cXC4kIiwKKyAgICAiY2hpbGRTb3VyY2VzIjogbnVsbCwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeY19vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5jX29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAiXmN4eF9vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIKKyAgICBdLAorICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAorICAgICJtaW5pbXVtQ01ha2VWZXJzaW9uIjogIjMuMTMiLAorICAgICJoYXNJbnN0YWxsUnVsZSI6IHRydWUKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvZGlyZWN0b3JpZXMvdG9wLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL3RvcC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNDQ5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL2RpcmVjdG9yaWVzL3RvcC5qc29uCkBAIC0wLDAgKzEsMjggQEAKK3sKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJwYXJlbnRTb3VyY2UiOiBudWxsLAorICAgICJjaGlsZFNvdXJjZXMiOiBbCisgICAgICAgICJeYWxpYXMkIiwKKyAgICAgICAgIl5jdXN0b20kIiwKKyAgICAgICAgIl5jeHgkIiwKKyAgICAgICAgIl5pbXBvcnRlZCQiLAorICAgICAgICAiXm9iamVjdCQiLAorICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICAgICAiXmRpciQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmludGVyZmFjZV9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiCisgICAgXSwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAibWluaW11bUNNYWtlVmVyc2lvbiI6ICIzLjEyIiwKKyAgICAiaGFzSW5zdGFsbFJ1bGUiOiB0cnVlCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2FsaWFzLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2FsaWFzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkZTYwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvYWxpYXMuanNvbgpAQCAtMCwwICsxLDE0IEBACit7CisgICAgIm5hbWUiOiAiQWxpYXMiLAorICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgImNoaWxkTmFtZXMiOiBudWxsLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXmFsaWFzJCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgIl5jX2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICJeY3h4X2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2NvZGVtb2RlbC12Mi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9jb2RlbW9kZWwtdjIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2FhYzYzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9jb2RlbW9kZWwtdjIuanNvbgpAQCAtMCwwICsxLDI4IEBACit7CisgICAgIm5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAicGFyZW50TmFtZSI6IG51bGwsCisgICAgImNoaWxkTmFtZXMiOiBbCisgICAgICAgICJBbGlhcyIsCisgICAgICAgICJDdXN0b20iLAorICAgICAgICAiQ3h4IiwKKyAgICAgICAgIkltcG9ydGVkIiwKKyAgICAgICAgIk9iamVjdCIsCisgICAgICAgICJFeHRlcm5hbCIKKyAgICBdLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXlxcLiQiLAorICAgICAgICAiXmRpciQiLAorICAgICAgICAiXmRpci9kaXIkIgorICAgIF0sCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmludGVyZmFjZV9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgIl5jX3NoYXJlZF9leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAiXmNfc3RhdGljX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICJeY19zdGF0aWNfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIgorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvY3VzdG9tLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2N1c3RvbS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZWI3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2N1c3RvbS5qc29uCkBAIC0wLDAgKzEsMTQgQEAKK3sKKyAgICAibmFtZSI6ICJDdXN0b20iLAorICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgImNoaWxkTmFtZXMiOiBudWxsLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXmN1c3RvbSQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCisgICAgICAgICJeY3VzdG9tX3RndDo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCisgICAgICAgICJeY3VzdG9tX2V4ZTo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2N4eC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9jeHguanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjNlODUzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS9wcm9qZWN0cy9jeHguanNvbgpAQCAtMCwwICsxLDIwIEBACit7CisgICAgIm5hbWUiOiAiQ3h4IiwKKyAgICAicGFyZW50TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJjaGlsZE5hbWVzIjogbnVsbCwKKyAgICAiZGlyZWN0b3J5U291cmNlcyI6IFsKKyAgICAgICAgIl5jeHgkIgorICAgIF0sCisgICAgInRhcmdldElkcyI6IFsKKyAgICAgICAgIl5BTExfQlVJTEQ6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc3RhbmRhcmRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAiXmN4eF9zdGF0aWNfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2V4dGVybmFsLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2V4dGVybmFsLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5YWZmZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvZXh0ZXJuYWwuanNvbgpAQCAtMCwwICsxLDEzIEBACit7CisgICAgIm5hbWUiOiAiRXh0ZXJuYWwiLAorICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgImNoaWxkTmFtZXMiOiBudWxsLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QFswLTlhLWZdKyQiLAorICAgICAgICAiXlpFUk9fQ0hFQ0s6OkBbMC05YS1mXSskIiwKKyAgICAgICAgIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2ltcG9ydGVkLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL2ltcG9ydGVkLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0MGI3MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvaW1wb3J0ZWQuanNvbgpAQCAtMCwwICsxLDE3IEBACit7CisgICAgIm5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgImNoaWxkTmFtZXMiOiBudWxsLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXmltcG9ydGVkJCIKKyAgICBdLAorICAgICJ0YXJnZXRJZHMiOiBbCisgICAgICAgICJeQUxMX0JVSUxEOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9zaGFyZWRfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIgorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvcHJvamVjdHMvb2JqZWN0Lmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL29iamVjdC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWY0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3Byb2plY3RzL29iamVjdC5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK3sKKyAgICAibmFtZSI6ICJPYmplY3QiLAorICAgICJwYXJlbnROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgImNoaWxkTmFtZXMiOiBudWxsLAorICAgICJkaXJlY3RvcnlTb3VyY2VzIjogWworICAgICAgICAiXm9iamVjdCQiCisgICAgXSwKKyAgICAidGFyZ2V0SWRzIjogWworICAgICAgICAiXkFMTF9CVUlMRDo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5jX29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAiXmN4eF9vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIKKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2FsaWFzLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2FsaWFzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiZjczOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfYWxpYXMuanNvbgpAQCAtMCwwICsxLDgzIEBACit7CisgICAgIm5hbWUiOiAiQUxMX0JVSUxEIiwKKyAgICAiaWQiOiAiXkFMTF9CVUlMRDo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvYWxpYXMvQ01ha2VGaWxlcy9BTExfQlVJTERcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9hbGlhcy9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCisgICAgInNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfY3VzdG9tLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2N1c3RvbS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZmY2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2N1c3RvbS5qc29uCkBAIC0wLDAgKzEsNzkgQEAKK3sKKyAgICAibmFtZSI6ICJBTExfQlVJTEQiLAorICAgICJpZCI6ICJeQUxMX0JVSUxEOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jdXN0b20kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKKyAgICAidHlwZSI6ICJVVElMSVRZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IHRydWUsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCisgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3VzdG9tX2V4ZTo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9jeHguanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfY3h4Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0NDNiMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfY3h4Lmpzb24KQEAgLTAsMCArMSwxMDcgQEAKK3sKKyAgICAibmFtZSI6ICJBTExfQlVJTEQiLAorICAgICJpZCI6ICJeQUxMX0JVSUxEOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKKyAgICAidHlwZSI6ICJVVElMSVRZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IHRydWUsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zdGFuZGFyZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zaGFyZWRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhdGljX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9leHRlcm5hbC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9leHRlcm5hbC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNzMzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2V4dGVybmFsLmpzb24KQEAgLTAsMCArMSw3OSBAQAoreworICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCisgICAgImlkIjogIl5BTExfQlVJTEQ6OkBbMC05YS1mXSskIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZCQiLAorICAgICJzb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5nZW5lcmF0ZWRfZXhlOjpAWzAtOWEtZl0rJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9pbXBvcnRlZC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF9pbXBvcnRlZC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZTViMTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX2ltcG9ydGVkLmpzb24KQEAgLTAsMCArMSw5NSBAQAoreworICAgICJuYW1lIjogIkFMTF9CVUlMRCIsCisgICAgImlkIjogIl5BTExfQlVJTEQ6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgInByb2plY3ROYW1lIjogIkltcG9ydGVkIiwKKyAgICAidHlwZSI6ICJVVElMSVRZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IHRydWUsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvaW1wb3J0ZWQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9pbXBvcnRlZC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAorICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX29iamVjdF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfb2JqZWN0Lmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX29iamVjdC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODg5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvYWxsX2J1aWxkX29iamVjdC5qc29uCkBAIC0wLDAgKzEsOTEgQEAKK3sKKyAgICAibmFtZSI6ICJBTExfQlVJTEQiLAorICAgICJpZCI6ICJeQUxMX0JVSUxEOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5vYmplY3QkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiT2JqZWN0IiwKKyAgICAidHlwZSI6ICJVVElMSVRZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IHRydWUsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9BTExfQlVJTEQkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCisgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19vYmplY3RfbGliOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2FsbF9idWlsZF90b3AuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfdG9wLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliZDc1MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9hbGxfYnVpbGRfdG9wLmpzb24KQEAgLTAsMCArMSwxODcgQEAKK3sKKyAgICAibmFtZSI6ICJBTExfQlVJTEQiLAorICAgICJpZCI6ICJeQUxMX0JVSUxEOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJVVElMSVRZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IHRydWUsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9DTWFrZUZpbGVzL0FMTF9CVUlMRCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvQUxMX0JVSUxEXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvQ01ha2VGaWxlcy9BTExfQlVJTEQkIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9DTWFrZUZpbGVzL0FMTF9CVUlMRFxcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfc2hhcmVkX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfc3RhdGljX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfYWxpYXNfZXhlOjpANTM2MzJjYmEyNzUyMjcyYmIwMDgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X2FsaWFzX2V4ZTo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc3RhbmRhcmRfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3NoYXJlZF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9zdGF0aWNfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN4eF9vYmplY3RfZXhlOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3N0YXRpY19leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX29iamVjdF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeZ2VuZXJhdGVkX2V4ZTo6QFswLTlhLWZdKyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX2FsaWFzX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfYWxpYXNfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3Yzk0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX2FsaWFzX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTA3IEBACit7CisgICAgIm5hbWUiOiAiY19hbGlhc19leGUiLAorICAgICJpZCI6ICJeY19hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCisgICAgInByb2plY3ROYW1lIjogIkFsaWFzIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY19hbGlhc19leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeYWxpYXMvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19hbGlhc19leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeYWxpYXMvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19hbGlhc19leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeYWxpYXMkIiwKKyAgICAic291cmNlIjogIl5hbGlhcyQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2NfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmNzRjNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTQzIEBACit7CisgICAgIm5hbWUiOiAiY19leGUiLAorICAgICJpZCI6ICJeY19leGU6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDcsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19saWIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX2xpYi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTE5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19saWIuanNvbgpAQCAtMCwwICsxLDEwOCBAQAoreworICAgICJuYW1lIjogImNfbGliIiwKKyAgICAiaWQiOiAiXmNfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJTVEFUSUNfTElCUkFSWSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2NfbGliXFwuKGF8bGliKSQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGliKT9jX2xpYlxcLihhfGxpYikkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiB7CisgICAgICAgICJsdG8iOiBudWxsCisgICAgfSwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX29iamVjdF9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX29iamVjdF9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzlhY2UzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfb2JqZWN0X2V4ZS5qc29uCkBAIC0wLDAgKzEsMTU0IEBACit7CisgICAgIm5hbWUiOiAiY19vYmplY3RfZXhlIiwKKyAgICAiaWQiOiAiXmNfb2JqZWN0X2V4ZTo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgInByb2plY3ROYW1lIjogIk9iamVjdCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDYsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvLiovZW1wdHkoXFwuYyk/XFwubyhiaik/JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJPYmplY3QgTGlicmFyaWVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC8uKi9lbXB0eShcXC5jKT9cXC5vKGJqKT8kIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogNiwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jX29iamVjdF9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19vYmplY3RfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXm9iamVjdCQiLAorICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJpbnN0YWxsIjogeworICAgICAgICAicHJlZml4IjogIl4oL3Vzci9sb2NhbHxbQS1aYS16XTouKi9jb2RlbW9kZWwtdjIpJCIsCisgICAgICAgICJkZXN0aW5hdGlvbnMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgInBhdGgiOiAiYmluIiwKKyAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbnN0YWxsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfb2JqZWN0X2xpYjo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDVlZDUzNThmNzBmYWY4ZDhhZjdhJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfb2JqZWN0X2xpYi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfb2JqZWN0X2xpYi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYTIwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19vYmplY3RfbGliLmpzb24KQEAgLTAsMCArMSw4MiBAQAoreworICAgICJuYW1lIjogImNfb2JqZWN0X2xpYiIsCisgICAgImlkIjogIl5jX29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAorICAgICJ0eXBlIjogIk9CSkVDVF9MSUJSQVJZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvLiovZW1wdHkoXFwuYyk/XFwubyhiaik/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKKyAgICAic291cmNlIjogIl5vYmplY3QkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3NoYXJlZF9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3NoYXJlZF9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDQwMThhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTQzIEBACit7CisgICAgIm5hbWUiOiAiY19zaGFyZWRfZXhlIiwKKyAgICAiaWQiOiAiXmNfc2hhcmVkX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDEwLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jX3NoYXJlZF9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y19zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc2hhcmVkX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IHRydWUsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY19zaGFyZWRfbGliOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3NoYXJlZF9saWIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3NoYXJlZF9saWIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzZhODU3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc2hhcmVkX2xpYi5qc29uCkBAIC0wLDAgKzEsMTIzIEBACit7CisgICAgIm5hbWUiOiAiY19zaGFyZWRfbGliIiwKKyAgICAiaWQiOiAiXmNfc2hhcmVkX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgInR5cGUiOiAiU0hBUkVEX0xJQlJBUlkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiY19zaGFyZWRfbGliX0VYUE9SVFMiLAorICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl4obGlifGN5Zyk/Y19zaGFyZWRfbGliXFwuKHNvfGR5bGlifGRsbCkkIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJebGliLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWJ8Y3lnKT9jX3NoYXJlZF9saWJcXC4oc298ZHlsaWJ8ZGxsKSQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGliKT9jX3NoYXJlZF9saWJcXC4oZGxsXFwuYXxsaWIpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJebGliLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWJ8Y3lnKT9jX3NoYXJlZF9saWJcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeXFwuJCIsCisgICAgInNvdXJjZSI6ICJeXFwuJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiB0cnVlLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3N0YXRpY19leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3N0YXRpY19leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQyMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2Nfc3RhdGljX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTQzIEBACit7CisgICAgIm5hbWUiOiAiY19zdGF0aWNfZXhlIiwKKyAgICAiaWQiOiAiXmNfc3RhdGljX2V4ZTo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeXFwuJCIsCisgICAgInByb2plY3ROYW1lIjogImNvZGVtb2RlbC12MiIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE0LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiAxNCwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY19zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2Nfc3RhdGljX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jX3N0YXRpY19leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeXFwuJCIsCisgICAgInNvdXJjZSI6ICJeXFwuJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmNfc3RhdGljX2xpYjo6QDY4OTA0MjdhMWY1MWEzZTdlMWRmJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19zdGF0aWNfbGliLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY19zdGF0aWNfbGliLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI2Mzg5NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jX3N0YXRpY19saWIuanNvbgpAQCAtMCwwICsxLDEwOCBAQAoreworICAgICJuYW1lIjogImNfc3RhdGljX2xpYiIsCisgICAgImlkIjogIl5jX3N0YXRpY19saWI6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl4obGliKT9jX3N0YXRpY19saWJcXC4oYXxsaWIpJCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXigoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP2Nfc3RhdGljX2xpYlxcLihhfGxpYikkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXlxcLiQiLAorICAgICJzb3VyY2UiOiAiXlxcLiQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiB7CisgICAgICAgICJsdG8iOiB0cnVlCisgICAgfSwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jdXN0b21fZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3VzdG9tX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMzAxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3VzdG9tX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTA3IEBACit7CisgICAgIm5hbWUiOiAiY3VzdG9tX2V4ZSIsCisgICAgImlkIjogIl5jdXN0b21fZXhlOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jdXN0b20kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA0LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmN1c3RvbV9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3VzdG9tLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N1c3RvbV9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3VzdG9tLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N1c3RvbV9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCisgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXmN1c3RvbV90Z3Q6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9kZXBlbmRlbmNpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3VzdG9tX3RndC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N1c3RvbV90Z3QuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzEwNmZjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N1c3RvbV90Z3QuanNvbgpAQCAtMCwwICsxLDg3IEBACit7CisgICAgIm5hbWUiOiAiY3VzdG9tX3RndCIsCisgICAgImlkIjogIl5jdXN0b21fdGd0OjpAYzExMzg1ZmZlZDU3Yjg2MGRhNjMkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jdXN0b20kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3VzdG9tIiwKKyAgICAidHlwZSI6ICJVVElMSVRZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9jdXN0b21fdGd0JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfY3VzdG9tX3RhcmdldCIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvKGN1c3RvbS8pP0NNYWtlRmlsZXMvKFswLTlhLWZdKy8pP2N1c3RvbV90Z3RcXC5ydWxlJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJDTWFrZSBSdWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICIiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvY3VzdG9tX3RndCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkLyhjdXN0b20vKT9DTWFrZUZpbGVzLyhbMC05YS1mXSsvKT9jdXN0b21fdGd0XFwucnVsZSQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogbnVsbCwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3VzdG9tL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9jdXN0b21fdGFyZ2V0IiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXmN1c3RvbSQiLAorICAgICJzb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGMxMTM4NWZmZWQ1N2I4NjBkYTYzJCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9hbGlhc19leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfYWxpYXNfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3ZjI1MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfYWxpYXNfZXhlLmpzb24KQEAgLTAsMCArMSwxMDcgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfYWxpYXNfZXhlIiwKKyAgICAiaWQiOiAiXmN4eF9hbGlhc19leGU6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmFsaWFzJCIsCisgICAgInByb2plY3ROYW1lIjogIkFsaWFzIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogOSwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5hbGlhcy9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9hbGlhc19leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeYWxpYXMvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X2FsaWFzX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5hbGlhcy8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfYWxpYXNfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmFsaWFzJCIsCisgICAgInNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEwLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeYWxpYXMvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1MzYzMmNiYTI3NTIyNzJiYjAwOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YWI1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2V4ZS5qc29uCkBAIC0wLDAgKzEsMjMyIEBACit7CisgICAgIm5hbWUiOiAiY3h4X2V4ZSIsCisgICAgImlkIjogIl5jeHhfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgInByZWNvbXBpbGVIZWFkZXJzIjogWworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImhlYWRlciI6ICIuKmVtcHR5XFwuaCQiLAorICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDIxLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICJUYXJnZXRDb21waWxlT3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9vcHRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogImJpbiIsCisgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiB7CisgICAgICAgICJwcmVmaXgiOiAiXigvdXNyL2xvY2FsfFtBLVphLXpdOi4qL2NvZGVtb2RlbC12MikkIiwKKyAgICAgICAgImRlc3RpbmF0aW9ucyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicGF0aCI6ICJiaW4iLAorICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzNywKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluc3RhbGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmNvZGVtb2RlbC12MlxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJmcmFnbWVudCIgOiAiVGFyZ2V0TGlua09wdGlvbnMiLAorICAgICAgICAgICAgICAgICJyb2xlIiA6ICJmbGFncyIsCisgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE4LAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfb3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImZyYWdtZW50IiA6ICIuKlRhcmdldExpbmtEaXJcXFwiPyQiLAorICAgICAgICAgICAgICAgICJyb2xlIiA6ICJsaWJyYXJ5UGF0aCIsCisgICAgICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiIDogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJmcmFnbWVudCIgOiAiLipjeHhfbGliLioiLAorICAgICAgICAgICAgICAgICJyb2xlIiA6ICJsaWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiA6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfbGliOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA2LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2V4ZV9wcmVjb21waWxlaGVhZGVyLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2V4ZV9wcmVjb21waWxlaGVhZGVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwZjc3MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlX3ByZWNvbXBpbGVoZWFkZXIuanNvbgpAQCAtMCwwICsxLDE2MSBAQAoreworICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICB7CisgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIi4qY21ha2VfcGNoKF9bXi5dKyk/KFxcLmh4eCk/XFwuY3h4JCIKKyAgICAgIF0sCisgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgInByZWNvbXBpbGVIZWFkZXJzIjogWworICAgICAgICB7CisgICAgICAgICAgImhlYWRlciI6ICIuKmVtcHR5XFwuaCQiLAorICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IDIxLAorICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzIiwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdLAorICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgImZyYWdtZW50IjogIlRhcmdldENvbXBpbGVPcHRpb25zIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAxNywKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgXSwKKyAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAicHJlY29tcGlsZUhlYWRlcnMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaGVhZGVyIjogIi4qZW1wdHlcXC5oJCIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMjEsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9wcmVjb21waWxlX2hlYWRlcnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZnJhZ21lbnQiOiAiVGFyZ2V0Q29tcGlsZU9wdGlvbnMiLAorICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IDE3LAorICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9vcHRpb25zIiwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdCisgICAgfQorICBdLAorICAic291cmNlcyI6IFsKKyAgICB7CisgICAgICAicGF0aCI6ICIuKmNtYWtlX3BjaChfW14uXSspPyhcXC5oeHgpP1xcLmN4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogNSwKKyAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJwYXRoIjogIi4qL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIF0sCisgICJzb3VyY2VHcm91cHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIi4qY21ha2VfcGNoKF9bXi5dKyk/KFxcLmh4eCk/XFwuY3h4JCIsCisgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIsCisgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICIuKi9jbWFrZV9wY2goX1teLl0rKT9cXC5oeHgkIgorICAgICAgXQorICAgIH0KKyAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlcl8yYXJjaC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlcl8yYXJjaC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NTU3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2V4ZV9wcmVjb21waWxlaGVhZGVyXzJhcmNoLmpzb24KQEAgLTAsMCArMSwyMzcgQEAKK3sKKyAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgeworICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICIuKmNtYWtlX3BjaChfW14uXSspPyhcXC5oeHgpP1xcLmN4eCQiCisgICAgICBdLAorICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICJwcmVjb21waWxlSGVhZGVycyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJoZWFkZXIiOiAiLiplbXB0eVxcLmgkIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAyMSwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmcmFnbWVudCI6ICJUYXJnZXRDb21waWxlT3B0aW9ucyIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMTcsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX29wdGlvbnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAiLipjbWFrZV9wY2goX1teLl0rKT8oXFwuaHh4KT9cXC5jeHgkIgorICAgICAgXSwKKyAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAicHJlY29tcGlsZUhlYWRlcnMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaGVhZGVyIjogIi4qZW1wdHlcXC5oJCIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMjEsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9wcmVjb21waWxlX2hlYWRlcnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZnJhZ21lbnQiOiAiVGFyZ2V0Q29tcGlsZU9wdGlvbnMiLAorICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IDE3LAorICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9vcHRpb25zIiwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICBdLAorICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICJwcmVjb21waWxlSGVhZGVycyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJoZWFkZXIiOiAiLiplbXB0eVxcLmgkIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAyMSwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmcmFnbWVudCI6ICJUYXJnZXRDb21waWxlT3B0aW9ucyIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMTcsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX29wdGlvbnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIF0sCisgICJzb3VyY2VzIjogWworICAgIHsKKyAgICAgICJwYXRoIjogIi4qY21ha2VfcGNoKF9bXi5dKyk/KFxcLmh4eCk/XFwuY3h4JCIsCisgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgInBhdGgiOiAiLipjbWFrZV9wY2goX1teLl0rKT8oXFwuaHh4KT9cXC5jeHgkIiwKKyAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKKyAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAicGF0aCI6ICIuKi9jbWFrZV9wY2goX1teLl0rKT9cXC5oeHgkIiwKKyAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAic291cmNlR3JvdXBOYW1lIjogIlByZWNvbXBpbGUgSGVhZGVyIEZpbGUiLAorICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAicGF0aCI6ICIuKi9jbWFrZV9wY2goX1teLl0rKT9cXC5oeHgkIiwKKyAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAic291cmNlR3JvdXBOYW1lIjogIlByZWNvbXBpbGUgSGVhZGVyIEZpbGUiLAorICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgICBdCisgICAgfQorICBdLAorICAic291cmNlR3JvdXBzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICIuKmNtYWtlX3BjaChfW14uXSspPyhcXC5oeHgpP1xcLmN4eCQiLAorICAgICAgICAiLipjbWFrZV9wY2goX1teLl0rKT8oXFwuaHh4KT9cXC5jeHgkIiwKKyAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQcmVjb21waWxlIEhlYWRlciBGaWxlIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIi4qL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiLAorICAgICAgICAiLiovY21ha2VfcGNoKF9bXi5dKyk/XFwuaHh4JCIKKyAgICAgIF0KKyAgICB9CisgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlX3ByZWNvbXBpbGVoZWFkZXJfbXVsdGlnZW4uanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfZXhlX3ByZWNvbXBpbGVoZWFkZXJfbXVsdGlnZW4uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjZmZmNjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9leGVfcHJlY29tcGlsZWhlYWRlcl9tdWx0aWdlbi5qc29uCkBAIC0wLDAgKzEsMjA2IEBACit7CisgICJjb21waWxlR3JvdXBzIjogWworICAgIHsKKyAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAiLipjbWFrZV9wY2goX1teLl0rKT8oXFwuaHh4KT9cXC5jeHgkIgorICAgICAgXSwKKyAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAicHJlY29tcGlsZUhlYWRlcnMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaGVhZGVyIjogIi4qZW1wdHlcXC5oJCIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMjEsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9wcmVjb21waWxlX2hlYWRlcnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZnJhZ21lbnQiOiAiVGFyZ2V0Q29tcGlsZU9wdGlvbnMiLAorICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IDE3LAorICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9vcHRpb25zIiwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICBdLAorICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICJwcmVjb21waWxlSGVhZGVycyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJoZWFkZXIiOiAiLiplbXB0eVxcLmgkIiwKKyAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiAyMSwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3ByZWNvbXBpbGVfaGVhZGVycyIsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmcmFnbWVudCI6ICJUYXJnZXRDb21waWxlT3B0aW9ucyIsCisgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogMTcsCisgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX29wdGlvbnMiLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIF0sCisgICJzb3VyY2VzIjogWworICAgIHsKKyAgICAgICJwYXRoIjogIi4qY21ha2VfcGNoKF9bXi5dKyk/KFxcLmh4eCk/XFwuY3h4JCIsCisgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgInBhdGgiOiAiLiovRGVidWcvY21ha2VfcGNoKF9bXi5dKyk/XFwuaHh4JCIsCisgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJQcmVjb21waWxlIEhlYWRlciBGaWxlIiwKKyAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgInBhdGgiOiAiLiovUmVsZWFzZS9jbWFrZV9wY2goX1teLl0rKT9cXC5oeHgkIiwKKyAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAic291cmNlR3JvdXBOYW1lIjogIlByZWNvbXBpbGUgSGVhZGVyIEZpbGUiLAorICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAicGF0aCI6ICIuKi9NaW5TaXplUmVsL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICJwYXRoIjogIi4qL1JlbFdpdGhEZWJJbmZvL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiLAorICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIsCisgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIF0sCisgICJzb3VyY2VHcm91cHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgIi4qY21ha2VfcGNoKF9bXi5dKyk/KFxcLmh4eCk/XFwuY3h4JCIsCisgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUHJlY29tcGlsZSBIZWFkZXIgRmlsZSIsCisgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICIuKi9EZWJ1Zy9jbWFrZV9wY2goX1teLl0rKT9cXC5oeHgkIiwKKyAgICAgICAgIi4qL1JlbGVhc2UvY21ha2VfcGNoKF9bXi5dKyk/XFwuaHh4JCIsCisgICAgICAgICIuKi9NaW5TaXplUmVsL2NtYWtlX3BjaChfW14uXSspP1xcLmh4eCQiLAorICAgICAgICAiLiovUmVsV2l0aERlYkluZm8vY21ha2VfcGNoKF9bXi5dKyk/XFwuaHh4JCIKKyAgICAgIF0KKyAgICB9CisgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfbGliLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2xpYi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YWMwODEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X2xpYi5qc29uCkBAIC0wLDAgKzEsODQgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfbGliIiwKKyAgICAiaWQiOiAiXmN4eF9saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDQsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogNCwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl4obGliKT9jeHhfbGliXFwuKGF8bGliKSQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X2xpYlxcLihhfGxpYikkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmN4eCQiLAorICAgICJzb3VyY2UiOiAiXmN4eCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IG51bGwsCisgICAgImFyY2hpdmUiOiB7CisgICAgICAgICJsdG8iOiBudWxsCisgICAgfSwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfb2JqZWN0X2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9vYmplY3RfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5YzkxZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfb2JqZWN0X2V4ZS5qc29uCkBAIC0wLDAgKzEsMTU0IEBACit7CisgICAgIm5hbWUiOiAiY3h4X29iamVjdF9leGUiLAorICAgICJpZCI6ICJeY3h4X29iamVjdF9leGU6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvLiovZW1wdHkoXFwuY3h4KT9cXC5vKGJqKT8kIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2xpbmtfbGlicmFyaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIk9iamVjdCBMaWJyYXJpZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0Ly4qL2VtcHR5KFxcLmN4eCk/XFwubyhiaik/JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAxMCwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5jeHhfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5vYmplY3QvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X29iamVjdF9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9vYmplY3RfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXm9iamVjdCQiLAorICAgICJzb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJpbnN0YWxsIjogeworICAgICAgICAicHJlZml4IjogIl4oL3Vzci9sb2NhbHxbQS1aYS16XTouKi9jb2RlbW9kZWwtdjIpJCIsCisgICAgICAgICJkZXN0aW5hdGlvbnMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgInBhdGgiOiAiYmluIiwKKyAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJpbnN0YWxsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDExLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpANWVkNTM1OGY3MGZhZjhkOGFmN2EkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X29iamVjdF9saWIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfb2JqZWN0X2xpYi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOTlmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X29iamVjdF9saWIuanNvbgpAQCAtMCwwICsxLDgyIEBACit7CisgICAgIm5hbWUiOiAiY3h4X29iamVjdF9saWIiLAorICAgICJpZCI6ICJeY3h4X29iamVjdF9saWI6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAorICAgICJ0eXBlIjogIk9CSkVDVF9MSUJSQVJZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeb2JqZWN0L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogOSwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9saWJyYXJ5IiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeb2JqZWN0Ly4qL2VtcHR5KFxcLmN4eCk/XFwubyhiaik/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5vYmplY3QkIiwKKyAgICAic291cmNlIjogIl5vYmplY3QkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc2hhcmVkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zaGFyZWRfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyMWM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc2hhcmVkX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTA3IEBACit7CisgICAgIm5hbWUiOiAiY3h4X3NoYXJlZF9leGUiLAorICAgICJpZCI6ICJeY3h4X3NoYXJlZF9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMTAsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY3h4X3NoYXJlZF9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2N4eF9zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc2hhcmVkX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9saW5rX2xpYnJhcmllcyIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc2hhcmVkX2xpYi5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zaGFyZWRfbGliLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxYTRmNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc2hhcmVkX2xpYi5qc29uCkBAIC0wLDAgKzEsOTkgQEAKK3sKKyAgICAibmFtZSI6ICJjeHhfc2hhcmVkX2xpYiIsCisgICAgImlkIjogIl5jeHhfc2hhcmVkX2xpYjo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCisgICAgInByb2plY3ROYW1lIjogIkN4eCIsCisgICAgInR5cGUiOiAiU0hBUkVEX0xJQlJBUlkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogOSwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJkZWZpbmUiOiAiY3h4X3NoYXJlZF9saWJfRVhQT1JUUyIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDksCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeKGxpYnxjeWcpP2N4eF9zaGFyZWRfbGliXFwuKHNvfGR5bGlifGRsbCkkIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeY3h4LygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWJ8Y3lnKT9jeHhfc2hhcmVkX2xpYlxcLihzb3xkeWxpYnxkbGwpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT8obGliKT9jeHhfc2hhcmVkX2xpYlxcLihkbGxcXC5hfGxpYikkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYnxjeWcpP2N4eF9zaGFyZWRfbGliXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmN4eCQiLAorICAgICJzb3VyY2UiOiAiXmN4eCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkNTczZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTEwIEBACit7CisgICAgIm5hbWUiOiAiY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGUiLAorICAgICJpZCI6ICJeY3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGU6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuY3h4JCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMjYsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJsYW5ndWFnZVN0YW5kYXJkIiA6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImJhY2t0cmFjZXMiOiBbCisgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IDI3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9wcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgInN0YW5kYXJkIiA6ICI5OCIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDI2LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3N0YW5kYXJkX2NvbXBpbGVfZmVhdHVyZV9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlX2xhbmd1YWdlc3RhbmRhcmQuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZV9sYW5ndWFnZXN0YW5kYXJkLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0ZWFiYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZV9sYW5ndWFnZXN0YW5kYXJkLmpzb24KQEAgLTAsMCArMSwzNiBAQAoreworICAgICJsYW5ndWFnZVN0YW5kYXJkIiA6CisgICAgeworICAgICAgImJhY2t0cmFjZXMiOiBbCisgICAgICAgICAgWworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICJsaW5lIjogMjksCisgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyIsCisgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICB9CisgICAgICAgICAgXSwKKyAgICAgICAgICBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgImxpbmUiOiAzMCwKKyAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInRhcmdldF9jb21waWxlX2ZlYXR1cmVzIiwKKyAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICBdLAorICAgICAgInN0YW5kYXJkIiA6ICIxMSIKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YW5kYXJkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGFuZGFyZF9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2IyODMyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2N4eF9zdGFuZGFyZF9leGUuanNvbgpAQCAtMCwwICsxLDExMCBAQAoreworICAgICJuYW1lIjogImN4eF9zdGFuZGFyZF9leGUiLAorICAgICJpZCI6ICJeY3h4X3N0YW5kYXJkX2V4ZTo6QGE1NmIxMmEzZjVjMDUyOWZiMjk2JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeY3h4JCIsCisgICAgInByb2plY3ROYW1lIjogIkN4eCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jeHgkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAyMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImxhbmd1YWdlU3RhbmRhcmQiIDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiYmFja3RyYWNlcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3Byb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAic3RhbmRhcmQiIDogIjE3IgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuY3h4JCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogMjMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJeY3h4X3N0YW5kYXJkX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3N0YW5kYXJkX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3N0YW5kYXJkX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YXRpY19leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhdGljX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzQyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YXRpY19leGUuanNvbgpAQCAtMCwwICsxLDEwNyBAQAoreworICAgICJuYW1lIjogImN4eF9zdGF0aWNfZXhlIiwKKyAgICAiaWQiOiAiXmN4eF9zdGF0aWNfZXhlOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5jeHgkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQ3h4IiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE0LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDE0LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmN4eF9zdGF0aWNfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmN4eC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9jeHhfc3RhdGljX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Y3h4X3N0YXRpY19leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE1LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfbGlua19saWJyYXJpZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY3h4L0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YXRpY19saWIuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9jeHhfc3RhdGljX2xpYi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Mjk4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvY3h4X3N0YXRpY19saWIuanNvbgpAQCAtMCwwICsxLDg0IEBACit7CisgICAgIm5hbWUiOiAiY3h4X3N0YXRpY19saWIiLAorICAgICJpZCI6ICJeY3h4X3N0YXRpY19saWI6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIlNUQVRJQ19MSUJSQVJZIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmN4eCQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDWFgiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfbGlicmFyeSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAic291cmNlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jeHgkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogbnVsbCwKKyAgICAgICAgICAgICJkZWZpbmVzIjogbnVsbCwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2xpYnJhcnkiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXihsaWIpP2N4eF9zdGF0aWNfbGliXFwuKGF8bGliKSQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5jeHgvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/KGxpYik/Y3h4X3N0YXRpY19saWJcXC4oYXxsaWIpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5jeHgkIiwKKyAgICAic291cmNlIjogIl5jeHgkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogeworICAgICAgICAibHRvIjogbnVsbAorICAgIH0sCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYTU2YjEyYTNmNWMwNTI5ZmIyOTYkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvZ2VuZXJhdGVkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2dlbmVyYXRlZF9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFiYmIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2dlbmVyYXRlZF9leGUuanNvbgpAQCAtMCwwICsxLDMwMyBAQAoreworICAgICJuYW1lIjogImdlbmVyYXRlZF9leGUiLAorICAgICJpZCI6ICJeZ2VuZXJhdGVkX2V4ZTo6QFswLTlhLWZdKyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJFeHRlcm5hbCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL2VtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9nZW5lcmF0ZWRcXC5jeHgkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkdlbmVyYXRlZCBTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogNiwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X3NvdXJjZXMiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJHZW5lcmF0ZWQgU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvZ2VuZXJhdGVkXFwuY3h4JCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJwYXRoIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkJCIsCisgICAgICAgICAgICAgICAgICAgICJpc1N5c3RlbSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJzZXRfcHJvcGVydHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICAgICAgICAgICAgICAgICAiaXNTeXN0ZW0iOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImRlZmluZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIkVNUFRZX0M9MSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9wcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIlNSQ19EVU1NWSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogInNldF9wcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIkdFTkVSQVRFRF9FWEU9MSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIlRHVF9EVU1NWSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZnJhZ21lbnQiIDogIlNSQ19DT01QSUxFX09QVElPTlNfRFVNTVkiLAorICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIgOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkNYWCIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkL2dlbmVyYXRlZFxcLmN4eCQiCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImluY2x1ZGVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZSQiLAorICAgICAgICAgICAgICAgICAgICAiaXNTeXN0ZW0iOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAidGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImRlZmluZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIkdFTkVSQVRFRF9FWEU9MSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogIlRHVF9EVU1NWSIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJ0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA1LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUElFeHRlcm5hbFNvdXJjZS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmdlbmVyYXRlZF9leGUoXFwuZXhlKT8kIiwKKyAgICAiYXJ0aWZhY3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9nZW5lcmF0ZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/Z2VuZXJhdGVkX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL0ZpbGVBUElFeHRlcm5hbEJ1aWxkJCIsCisgICAgInNvdXJjZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQ1hYIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QFswLTlhLWZdKyQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9pbnRlcmZhY2VfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvaW50ZXJmYWNlX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDUyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvaW50ZXJmYWNlX2V4ZS5qc29uCkBAIC0wLDAgKzEsMTUyIEBACit7CisgICAgIm5hbWUiOiAiaW50ZXJmYWNlX2V4ZSIsCisgICAgImlkIjogIl5pbnRlcmZhY2VfZXhlOjpANjg5MDQyN2ExZjUxYTNlN2UxZGYkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5cXC4kIiwKKyAgICAicHJvamVjdE5hbWUiOiAiY29kZW1vZGVsLXYyIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImluY2x1ZGUiLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMywKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVmaW5lIjogImludGVyZmFjZV9leGVfRVhQT1JUUyIsCisgICAgICAgICAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJjb21waWxlQ29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICAgICAgfQorICAgIF0sCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmluY2x1ZGVfdGVzdFxcLmNtYWtlJCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW5jbHVkZV90ZXN0XFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5jb2RlbW9kZWwtdjJcXC5jbWFrZSQiLAorICAgICAgICAgICAgImxpbmUiOiAzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiaW5jbHVkZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeY29kZW1vZGVsLXYyXFwuY21ha2UkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDMsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJpbmNsdWRlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXm15X2ludGVyZmFjZV9leGVcXC5teWV4ZSQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5iaW4vKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bXlfaW50ZXJmYWNlX2V4ZVxcLm15ZXhlJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmxpYi9teV9pbnRlcmZhY2VfZXhlXFwuaW1wJCIsCisgICAgICAgICAgICAiX2FpeEV4dHJhIjogdHJ1ZSwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJebGliLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pPyhsaWIpP215X2ludGVyZmFjZV9leGVcXC4oZGxsXFwuYXxsaWIpJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeYmluLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP215X2ludGVyZmFjZV9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeXFwuJCIsCisgICAgInNvdXJjZSI6ICJeXFwuJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyZjRjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX2V4ZS5qc29uCkBAIC0wLDAgKzEsOTAgQEAKK3sKKyAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX2V4ZSIsCisgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDUsCisgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogIl5saW5rX2ltcG9ydGVkX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX2V4ZVxcLnBkYiQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IHRydWUKKyAgICAgICAgfQorICAgIF0sCisgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAorICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogeworICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICJsdG8iOiBudWxsLAorICAgICAgICAiY29tbWFuZEZyYWdtZW50cyI6IG51bGwKKyAgICB9LAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IG51bGwKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBlNmRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZS5qc29uCkBAIC0wLDAgKzEsOTAgQEAKK3sKKyAgICAibmFtZSI6ICJsaW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGUiLAorICAgICJpZCI6ICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJJbXBvcnRlZCIsCisgICAgInR5cGUiOiAiRVhFQ1VUQUJMRSIsCisgICAgImlzR2VuZXJhdG9yUHJvdmlkZWQiOiBudWxsLAorICAgICJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeZW1wdHlcXC5jJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiBudWxsLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICJTb3VyY2UgRmlsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogMjMsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXmVtcHR5XFwuYyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21waWxlR3JvdXBzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJpbmNsdWRlcyI6IG51bGwsCisgICAgICAgICAgICAiZGVmaW5lcyI6IG51bGwsCisgICAgICAgICAgICAiY29tcGlsZUNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgICAgIH0KKyAgICBdLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IDIzLAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJebGlua19pbXBvcnRlZF9pbnRlcmZhY2VfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfaW50ZXJmYWNlX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX2ludGVyZmFjZV9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKKyAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9vYmplY3RfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9vYmplY3RfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlYzUyNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX29iamVjdF9leGUuanNvbgpAQCAtMCwwICsxLDkwIEBACit7CisgICAgIm5hbWUiOiAibGlua19pbXBvcnRlZF9vYmplY3RfZXhlIiwKKyAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDE4LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAxOCwKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfb2JqZWN0X2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX29iamVjdF9leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9vYmplY3RfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCisgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL2xpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODQ2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9zaGFyZWRfZXhlLmpzb24KQEAgLTAsMCArMSw5MCBAQAoreworICAgICJuYW1lIjogImxpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZSIsCisgICAgImlkIjogIl5saW5rX2ltcG9ydGVkX3NoYXJlZF9leGU6OkBiYTdlYjcwOWQwYjQ4Nzc5YzZjOCQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgInByb2plY3ROYW1lIjogIkltcG9ydGVkIiwKKyAgICAidHlwZSI6ICJFWEVDVVRBQkxFIiwKKyAgICAiaXNHZW5lcmF0b3JQcm92aWRlZCI6IG51bGwsCisgICAgInNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5lbXB0eVxcLmMkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IG51bGwsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiAiQyIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiA5LAorICAgICAgICAgICAgImNvbW1hbmQiOiAiYWRkX2V4ZWN1dGFibGUiLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6ICJebGlua19pbXBvcnRlZF9zaGFyZWRfZXhlKFxcLmV4ZSk/JCIsCisgICAgImFydGlmYWN0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmltcG9ydGVkLygoRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKS8pP2xpbmtfaW1wb3J0ZWRfc2hhcmVkX2V4ZShcXC5leGUpPyQiLAorICAgICAgICAgICAgIl9kbGxFeHRyYSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3NoYXJlZF9leGVcXC5wZGIkIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiB0cnVlCisgICAgICAgIH0KKyAgICBdLAorICAgICJidWlsZCI6ICJeaW1wb3J0ZWQkIiwKKyAgICAic291cmNlIjogIl5pbXBvcnRlZCQiLAorICAgICJpbnN0YWxsIjogbnVsbCwKKyAgICAibGluayI6IHsKKyAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAibHRvIjogbnVsbCwKKyAgICAgICAgImNvbW1hbmRGcmFnbWVudHMiOiBudWxsCisgICAgfSwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIl5aRVJPX0NIRUNLOjpAYmE3ZWI3MDlkMGI0ODc3OWM2YzgkIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBudWxsCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9zdGF0aWNfZXhlLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvbGlua19pbXBvcnRlZF9zdGF0aWNfZXhlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhMTY5NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy9saW5rX2ltcG9ydGVkX3N0YXRpY19leGUuanNvbgpAQCAtMCwwICsxLDkwIEBACit7CisgICAgIm5hbWUiOiAibGlua19pbXBvcnRlZF9zdGF0aWNfZXhlIiwKKyAgICAiaWQiOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZTo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIkVYRUNVVEFCTEUiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogbnVsbCwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXmVtcHR5XFwuYyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogbnVsbCwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiU291cmNlIEZpbGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IDEzLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6ICJhZGRfZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlNvdXJjZSBGaWxlcyIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl5lbXB0eVxcLmMkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImxhbmd1YWdlIjogIkMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeZW1wdHlcXC5jJCIKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiaW5jbHVkZXMiOiBudWxsLAorICAgICAgICAgICAgImRlZmluZXMiOiBudWxsLAorICAgICAgICAgICAgImNvbXBpbGVDb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAiYmFja3RyYWNlIjogWworICAgICAgICB7CisgICAgICAgICAgICAiZmlsZSI6ICJeaW1wb3J0ZWQvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiAxMywKKyAgICAgICAgICAgICJjb21tYW5kIjogImFkZF9leGVjdXRhYmxlIiwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl5pbXBvcnRlZC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiAiXmxpbmtfaW1wb3J0ZWRfc3RhdGljX2V4ZShcXC5leGUpPyQiLAorICAgICJhcnRpZmFjdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJwYXRoIjogIl5pbXBvcnRlZC8oKERlYnVnfFJlbGVhc2V8UmVsV2l0aERlYkluZm98TWluU2l6ZVJlbCkvKT9saW5rX2ltcG9ydGVkX3N0YXRpY19leGUoXFwuZXhlKT8kIiwKKyAgICAgICAgICAgICJfZGxsRXh0cmEiOiBmYWxzZQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeaW1wb3J0ZWQvKChEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpLyk/bGlua19pbXBvcnRlZF9zdGF0aWNfZXhlXFwucGRiJCIsCisgICAgICAgICAgICAiX2RsbEV4dHJhIjogdHJ1ZQorICAgICAgICB9CisgICAgXSwKKyAgICAiYnVpbGQiOiAiXmltcG9ydGVkJCIsCisgICAgInNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiB7CisgICAgICAgICJsYW5ndWFnZSI6ICJDIiwKKyAgICAgICAgImx0byI6IG51bGwsCisgICAgICAgICJjb21tYW5kRnJhZ21lbnRzIjogbnVsbAorICAgIH0sCisgICAgImFyY2hpdmUiOiBudWxsLAorICAgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogbnVsbAorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfYWxpYXMuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2FsaWFzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQxYzE3MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2FsaWFzLmpzb24KQEAgLTAsMCArMSw3MCBAQAoreworICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAorICAgICJpZCI6ICJeWkVST19DSEVDSzo6QDUzNjMyY2JhMjc1MjI3MmJiMDA4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeYWxpYXMkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiQWxpYXMiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2FsaWFzL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmFsaWFzL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5hbGlhcyQiLAorICAgICJzb3VyY2UiOiAiXmFsaWFzJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2N1c3RvbS5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfY3VzdG9tLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThjNmRkOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2N1c3RvbS5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBjMTEzODVmZmVkNTdiODYwZGE2MyQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN1c3RvbSQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDdXN0b20iLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N1c3RvbS9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jdXN0b20vQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jdXN0b20vQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3VzdG9tL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN1c3RvbS9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeY3VzdG9tJCIsCisgICAgInNvdXJjZSI6ICJeY3VzdG9tJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2N4eC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfY3h4Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyZmY4MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2N4eC5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBhNTZiMTJhM2Y1YzA1MjlmYjI5NiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXmN4eCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJDeHgiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2N4eC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5jeHgvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9jeHgvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvY3h4L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmN4eC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeY3h4JCIsCisgICAgInNvdXJjZSI6ICJeY3h4JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2V4dGVybmFsLmpzb24gYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja19leHRlcm5hbC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzM4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1kYXRhL3RhcmdldHMvemVyb19jaGVja19leHRlcm5hbC5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkBbMC05YS1mXSskIiwKKyAgICAiZGlyZWN0b3J5U291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiRXh0ZXJuYWwiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIsCisgICAgICAgICAgICAiaXNHZW5lcmF0ZWQiOiB0cnVlLAorICAgICAgICAgICAgInNvdXJjZUdyb3VwTmFtZSI6ICIiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLXFwucnVsZSQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgImNvbXBpbGVHcm91cExhbmd1YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZmlsZSI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSUV4dGVybmFsU291cmNlL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9GaWxlQVBJRXh0ZXJuYWxCdWlsZC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0tcXC5ydWxlJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbXBpbGVHcm91cHMiOiBudWxsLAorICAgICJiYWNrdHJhY2UiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJmaWxlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgIH0KKyAgICBdLAorICAgICJmb2xkZXIiOiBudWxsLAorICAgICJuYW1lT25EaXNrIjogbnVsbCwKKyAgICAiYXJ0aWZhY3RzIjogbnVsbCwKKyAgICAiYnVpbGQiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvRmlsZUFQSUV4dGVybmFsQnVpbGQkIiwKKyAgICAic291cmNlIjogIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJRXh0ZXJuYWxTb3VyY2UkIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfaW1wb3J0ZWQuanNvbiBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2ltcG9ydGVkLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzNGM4NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX2ltcG9ydGVkLmpzb24KQEAgLTAsMCArMSw3MCBAQAoreworICAgICJuYW1lIjogIlpFUk9fQ0hFQ0siLAorICAgICJpZCI6ICJeWkVST19DSEVDSzo6QGJhN2ViNzA5ZDBiNDg3NzljNmM4JCIsCisgICAgImRpcmVjdG9yeVNvdXJjZSI6ICJeaW1wb3J0ZWQkIiwKKyAgICAicHJvamVjdE5hbWUiOiAiSW1wb3J0ZWQiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL2ltcG9ydGVkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXmltcG9ydGVkL0NNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5pbXBvcnRlZCQiLAorICAgICJzb3VyY2UiOiAiXmltcG9ydGVkJCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX29iamVjdC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfb2JqZWN0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkNzYxNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX29iamVjdC5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA1ZWQ1MzU4ZjcwZmFmOGQ4YWY3YSQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXm9iamVjdCQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJPYmplY3QiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL29iamVjdC9DTWFrZUZpbGVzL1pFUk9fQ0hFQ0skIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIiIsCisgICAgICAgICAgICAiY29tcGlsZUdyb3VwTGFuZ3VhZ2UiOiBudWxsLAorICAgICAgICAgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJmaWxlIjogIl5vYmplY3QvQ01ha2VMaXN0c1xcLnR4dCQiLAorICAgICAgICAgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImhhc1BhcmVudCI6IGZhbHNlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAicGF0aCI6ICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJzb3VyY2VHcm91cHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIiIsCisgICAgICAgICAgICAic291cmNlUGF0aHMiOiBbCisgICAgICAgICAgICAgICAgIl4uKi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2NvZGVtb2RlbC12Mi1idWlsZC9vYmplY3QvQ01ha2VGaWxlcy9aRVJPX0NIRUNLJCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQ01ha2UgUnVsZXMiLAorICAgICAgICAgICAgInNvdXJjZVBhdGhzIjogWworICAgICAgICAgICAgICAgICJeLiovVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItYnVpbGQvb2JqZWN0L0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXm9iamVjdC9DTWFrZUxpc3RzXFwudHh0JCIsCisgICAgICAgICAgICAibGluZSI6IG51bGwsCisgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAiaGFzUGFyZW50IjogZmFsc2UKKyAgICAgICAgfQorICAgIF0sCisgICAgImZvbGRlciI6IG51bGwsCisgICAgIm5hbWVPbkRpc2siOiBudWxsLAorICAgICJhcnRpZmFjdHMiOiBudWxsLAorICAgICJidWlsZCI6ICJeb2JqZWN0JCIsCisgICAgInNvdXJjZSI6ICJeb2JqZWN0JCIsCisgICAgImluc3RhbGwiOiBudWxsLAorICAgICJsaW5rIjogbnVsbCwKKyAgICAiYXJjaGl2ZSI6IG51bGwsCisgICAgImRlcGVuZGVuY2llcyI6IG51bGwKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX3RvcC5qc29uIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jb2RlbW9kZWwtdjItZGF0YS90YXJnZXRzL3plcm9fY2hlY2tfdG9wLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwMzBiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWRhdGEvdGFyZ2V0cy96ZXJvX2NoZWNrX3RvcC5qc29uCkBAIC0wLDAgKzEsNzAgQEAKK3sKKyAgICAibmFtZSI6ICJaRVJPX0NIRUNLIiwKKyAgICAiaWQiOiAiXlpFUk9fQ0hFQ0s6OkA2ODkwNDI3YTFmNTFhM2U3ZTFkZiQiLAorICAgICJkaXJlY3RvcnlTb3VyY2UiOiAiXlxcLiQiLAorICAgICJwcm9qZWN0TmFtZSI6ICJjb2RlbW9kZWwtdjIiLAorICAgICJ0eXBlIjogIlVUSUxJVFkiLAorICAgICJpc0dlbmVyYXRvclByb3ZpZGVkIjogdHJ1ZSwKKyAgICAic291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiLAorICAgICAgICAgICAgImlzR2VuZXJhdGVkIjogdHJ1ZSwKKyAgICAgICAgICAgICJzb3VyY2VHcm91cE5hbWUiOiAiIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgInBhdGgiOiAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIiwKKyAgICAgICAgICAgICJpc0dlbmVyYXRlZCI6IHRydWUsCisgICAgICAgICAgICAic291cmNlR3JvdXBOYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJjb21waWxlR3JvdXBMYW5ndWFnZSI6IG51bGwsCisgICAgICAgICAgICAiYmFja3RyYWNlIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICAgICAgICAgImxpbmUiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgInNvdXJjZUdyb3VwcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDSyQiCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkNNYWtlIFJ1bGVzIiwKKyAgICAgICAgICAgICJzb3VyY2VQYXRocyI6IFsKKyAgICAgICAgICAgICAgICAiXi4qL1Rlc3RzL1J1bkNNYWtlL0ZpbGVBUEkvY29kZW1vZGVsLXYyLWJ1aWxkL0NNYWtlRmlsZXMvWkVST19DSEVDS1xcLnJ1bGUkIgorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tcGlsZUdyb3VwcyI6IG51bGwsCisgICAgImJhY2t0cmFjZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImZpbGUiOiAiXkNNYWtlTGlzdHNcXC50eHQkIiwKKyAgICAgICAgICAgICJsaW5lIjogbnVsbCwKKyAgICAgICAgICAgICJjb21tYW5kIjogbnVsbCwKKyAgICAgICAgICAgICJoYXNQYXJlbnQiOiBmYWxzZQorICAgICAgICB9CisgICAgXSwKKyAgICAiZm9sZGVyIjogbnVsbCwKKyAgICAibmFtZU9uRGlzayI6IG51bGwsCisgICAgImFydGlmYWN0cyI6IG51bGwsCisgICAgImJ1aWxkIjogIl5cXC4kIiwKKyAgICAic291cmNlIjogIl5cXC4kIiwKKyAgICAiaW5zdGFsbCI6IG51bGwsCisgICAgImxpbmsiOiBudWxsLAorICAgICJhcmNoaXZlIjogbnVsbCwKKyAgICAiZGVwZW5kZW5jaWVzIjogbnVsbAorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9jeHgvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2N4eC9DTWFrZUxpc3RzLnR4dAppbmRleCBiMDU2NGY1Li43NjIzNWY1IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2N4eC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2N4eC9DTWFrZUxpc3RzLnR4dApAQCAtMTcsMyArMTcsMTYgQEAKIHRhcmdldF9jb21waWxlX29wdGlvbnMoY3h4X2V4ZSBQVUJMSUMgVGFyZ2V0Q29tcGlsZU9wdGlvbnMpCiB0YXJnZXRfbGlua19vcHRpb25zKGN4eF9leGUgUFVCTElDIFRhcmdldExpbmtPcHRpb25zKQogdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMoY3h4X2V4ZSBQVUJMSUMgIiR7Q01BS0VfQklOQVJZX0RJUn0vVGFyZ2V0TGlua0RpciIpCisKK3RhcmdldF9wcmVjb21waWxlX2hlYWRlcnMoY3h4X2V4ZSBQVUJMSUMgLi4vZW1wdHkuaCkKKworYWRkX2V4ZWN1dGFibGUoY3h4X3N0YW5kYXJkX2V4ZSAuLi9lbXB0eS5jeHgpCitzZXRfcHJvcGVydHkoVEFSR0VUIGN4eF9zdGFuZGFyZF9leGUgUFJPUEVSVFkgQ1hYX1NUQU5EQVJEIDE3KQorCithZGRfZXhlY3V0YWJsZShjeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZSAuLi9lbXB0eS5jeHgpCitzZXRfcHJvcGVydHkoVEFSR0VUIGN4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlIFBST1BFUlRZIENYWF9TVEFOREFSRCA5OCkKK2lmKENNQUtFX0NYWF9TVEFOREFSRF9ERUZBVUxUIEFORCBERUZJTkVEIENNQUtFX0NYWDExX1NUQU5EQVJEX0NPTVBJTEVfT1BUSU9OKQorICB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyhjeHhfc3RhbmRhcmRfY29tcGlsZV9mZWF0dXJlX2V4ZSBQUklWQVRFIGN4eF9zdGRfMTEpCisgIHRhcmdldF9jb21waWxlX2ZlYXR1cmVzKGN4eF9zdGFuZGFyZF9jb21waWxlX2ZlYXR1cmVfZXhlIFBSSVZBVEUgY3h4X2RlY2x0eXBlKQorICBmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vY3h4X3N0ZF8xMS50eHQiICIiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9lbXB0eS5oIGIvVGVzdHMvUnVuQ01ha2UvRmlsZUFQSS9lbXB0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlQVBJL2VtcHR5LmgKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvN3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24tcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS83emlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS83emlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvN3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YmQxYWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvN3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgcm91bmR0cmlwLmNtYWtlOjM4IFwoZmlsZVwpOgorICBmaWxlIGFyY2hpdmUgZm9ybWF0IDd6aXAgZG9lcyBub3Qgc3VwcG9ydCBDT01QUkVTU0lPTiBhcmd1bWVudHMKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIDd6aXAtd2l0aC1iYWQtY29tcHJlc3Npb24uY21ha2U6NiBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvN3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS83emlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NjFlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvN3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbi5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC56aXAiKQorCitzZXQoQVJDSElWRV9GT1JNQVQgN3ppcCkKK3NldChDT01QUkVTU0lPTl9UWVBFIFhaKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlLzd6aXAuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvN3ppcC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzBlOTQwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlLzd6aXAuY21ha2UKQEAgLTAsMCArMSw3IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QuN3oiKQorCitzZXQoQVJDSElWRV9GT1JNQVQgN3ppcCkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoIjM3N2FiY2FmMjcxYyIgTElNSVQgNiBIRVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5NzEwOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjApCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDBjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTggQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZSg3emlwKQorcnVuX2NtYWtlKGdudXRhcikKK3J1bl9jbWFrZShnbnV0YXItZ3opCitydW5fY21ha2UocGF4KQorcnVuX2NtYWtlKHBheC14eikKK3J1bl9jbWFrZShwYXgtenN0ZCkKK3J1bl9jbWFrZShwYXhyKQorcnVuX2NtYWtlKHBheHItYnoyKQorcnVuX2NtYWtlKHppcCkKKworIyBFeHRyYWN0aW5nIG9ubHkgc2VsZWN0ZWQgZmlsZXMgb3IgZGlyZWN0b3JpZXMKK3J1bl9jbWFrZSh6aXAtZmlsdGVyZWQpCisKK3J1bl9jbWFrZSh1bnN1cHBvcnRlZC1mb3JtYXQpCitydW5fY21ha2UoemlwLXdpdGgtYmFkLWNvbXByZXNzaW9uKQorcnVuX2NtYWtlKDd6aXAtd2l0aC1iYWQtY29tcHJlc3Npb24pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvZ251dGFyLWd6LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL2dudXRhci1nei5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjkwMjJiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL2dudXRhci1nei5jbWFrZQpAQCAtMCwwICsxLDggQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC50YXIuZ3oiKQorCitzZXQoQVJDSElWRV9GT1JNQVQgZ251dGFyKQorc2V0KENPTVBSRVNTSU9OX1RZUEUgR1ppcCkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoIjFmOGIiIExJTUlUIDIgSEVYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL2dudXRhci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9nbnV0YXIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0MjVjNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9nbnV0YXIuY21ha2UKQEAgLTAsMCArMSw3IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QudGFyIikKKworc2V0KEFSQ0hJVkVfRk9STUFUIGdudXRhcikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoIjc1NzM3NDYxNzIyMDIwMDAiIE9GRlNFVCAyNTcgTElNSVQgOCBIRVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LXh6LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheC14ei5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ4NWZkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheC14ei5jbWFrZQpAQCAtMCwwICsxLDggQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC50YXIueHoiKQorCitzZXQoQVJDSElWRV9GT1JNQVQgcGF4KQorc2V0KENPTVBSRVNTSU9OX1RZUEUgWFopCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yb3VuZHRyaXAuY21ha2UpCisKK2NoZWNrX21hZ2ljKCJmZDM3N2E1ODVhMDAiIExJTUlUIDYgSEVYKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheC16c3RkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheC16c3RkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMzAzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LXpzdGQuY21ha2UKQEAgLTAsMCArMSw4IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QudGFyLnpzdGQiKQorCitzZXQoQVJDSElWRV9GT1JNQVQgcGF4KQorc2V0KENPTVBSRVNTSU9OX1RZUEUgWnN0ZCkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoIjI4YjUyZmZkMDA1OCIgTElNSVQgNiBIRVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcGF4LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjAwMmZiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheC5jbWFrZQpAQCAtMCwwICsxLDcgQEAKK3NldChPVVRQVVRfTkFNRSAidGVzdC50YXIiKQorCitzZXQoQVJDSElWRV9GT1JNQVQgcGF4KQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiNzU3Mzc0NjE3MjAwMzAzMCIgT0ZGU0VUIDI1NyBMSU1JVCA4IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXhyLWJ6Mi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXhyLWJ6Mi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzhmOGYzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheHItYnoyLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnRhci5iejIiKQorCitzZXQoQVJDSElWRV9GT1JNQVQgcGF4cikKK3NldChDT01QUkVTU0lPTl9UWVBFIEJaaXAyKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiNDI1YTY4IiBMSU1JVCAzIEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXhyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3BheHIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U0NGYwNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9wYXhyLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnRhciIpCisKK3NldChBUkNISVZFX0ZPUk1BVCBwYXhyKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vcm91bmR0cmlwLmNtYWtlKQorCitjaGVja19tYWdpYygiNzU3Mzc0NjE3MjAwMzAzMCIgT0ZGU0VUIDI1NyBMSU1JVCA4IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS9yb3VuZHRyaXAuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcm91bmR0cmlwLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzgzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvcm91bmR0cmlwLmNtYWtlCkBAIC0wLDAgKzEsOTIgQEAKK2ZvcmVhY2gocGFyYW1ldGVyIE9VVFBVVF9OQU1FIEFSQ0hJVkVfRk9STUFUKQorICBpZihOT1QgREVGSU5FRCAke3BhcmFtZXRlcn0pCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAibWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXIgJHtwYXJhbWV0ZXJ9IikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK3NldChDT01QUkVTU19ESVIgY29tcHJlc3NfZGlyKQorc2V0KEZVTExfQ09NUFJFU1NfRElSICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0NPTVBSRVNTX0RJUn0pCisKK3NldChERUNPTVBSRVNTX0RJUiBkZWNvbXByZXNzX2RpcikKK3NldChGVUxMX0RFQ09NUFJFU1NfRElSICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0RFQ09NUFJFU1NfRElSfSkKKworc2V0KEZVTExfT1VUUFVUX05BTUUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7T1VUUFVUX05BTUV9KQorCitzZXQoQ0hFQ0tfRklMRVMKKyAgImYxLnR4dCIKKyAgImQxL2YxLnR4dCIKKyAgImQgMi9mMS50eHQiCisgICJkICsgMy9mMS50eHQiCisgICJkXzQvZjEudHh0IgorICAiZC00L2YxLnR4dCIKKyAgIk15IFNwZWNpYWwgRGlyZWN0b3J5L2YxLnR4dCIKKykKKworZm9yZWFjaChmaWxlICR7Q0hFQ0tfRklMRVN9KQorICBjb25maWd1cmVfZmlsZSgke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfSAke0ZVTExfQ09NUFJFU1NfRElSfS8ke2ZpbGV9IENPUFlPTkxZKQorZW5kZm9yZWFjaCgpCisKK2lmKFVOSVgpCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EIGxuIC1zZiBmMS50eHQgJHtGVUxMX0NPTVBSRVNTX0RJUn0vZDEvZjIudHh0KQorICBsaXN0KEFQUEVORCBDSEVDS19GSUxFUyAiZDEvZjIudHh0IikKK2VuZGlmKCkKKworZmlsZShSRU1PVkUgJHtGVUxMX09VVFBVVF9OQU1FfSkKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgJHtGVUxMX0RFQ09NUFJFU1NfRElSfSkKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtGVUxMX0RFQ09NUFJFU1NfRElSfSkKKworZmlsZShBUkNISVZFX0NSRUFURQorICBPVVRQVVQgJHtGVUxMX09VVFBVVF9OQU1FfQorICBGT1JNQVQgIiR7QVJDSElWRV9GT1JNQVR9IgorICBDT01QUkVTU0lPTiAiJHtDT01QUkVTU0lPTl9UWVBFfSIKKyAgVkVSQk9TRQorICBQQVRIUyAke0NPTVBSRVNTX0RJUn0pCisKK2ZpbGUoQVJDSElWRV9FWFRSQUNUCisgIElOUFVUICR7RlVMTF9PVVRQVVRfTkFNRX0KKyAgJHtERUNPTVBSRVNTSU9OX09QVElPTlN9CisgIERFU1RJTkFUSU9OICR7RlVMTF9ERUNPTVBSRVNTX0RJUn0KKyAgVkVSQk9TRSkKKworaWYoQ1VTVE9NX0NIRUNLX0ZJTEVTKQorICBzZXQoQ0hFQ0tfRklMRVMgJHtDVVNUT01fQ0hFQ0tfRklMRVN9KQorZW5kaWYoKQorCitmb3JlYWNoKGZpbGUgJHtDSEVDS19GSUxFU30pCisgIHNldChpbnB1dCAke0ZVTExfQ09NUFJFU1NfRElSfS8ke2ZpbGV9KQorICBzZXQob3V0cHV0ICR7RlVMTF9ERUNPTVBSRVNTX0RJUn0vJHtDT01QUkVTU19ESVJ9LyR7ZmlsZX0pCisKKyAgaWYoTk9UIEVYSVNUUyAke2lucHV0fSkKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkNhbm5vdCBmaW5kIGlucHV0IGZpbGUgJHtvdXRwdXR9IikKKyAgZW5kaWYoKQorCisgIGlmKE5PVCBFWElTVFMgJHtvdXRwdXR9KQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQ2Fubm90IGZpbmQgb3V0cHV0IGZpbGUgJHtvdXRwdXR9IikKKyAgZW5kaWYoKQorCisgIGZpbGUoTUQ1ICR7aW5wdXR9IGlucHV0X21kNSkKKyAgZmlsZShNRDUgJHtvdXRwdXR9IG91dHB1dF9tZDUpCisKKyAgaWYoTk9UIGlucHV0X21kNSBTVFJFUVVBTCBvdXRwdXRfbWQ1KQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiRmlsZXMgXCIke2lucHV0fVwiIGFuZCBcIiR7b3V0cHV0fVwiIGFyZSBkaWZmZXJlbnQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaChmaWxlICR7Tk9UX0VYSVNUSU5HX0ZJTEVTX0NIRUNLfSkKKyAgc2V0KG91dHB1dCAke0ZVTExfREVDT01QUkVTU19ESVJ9LyR7Q09NUFJFU1NfRElSfS8ke2ZpbGV9KQorCisgIGlmKEVYSVNUUyAke291dHB1dH0pCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJGaWxlICR7b3V0cHV0fSBleGlzdHMgYnV0IGl0IHNob3VsZG4ndCIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCitmdW5jdGlvbihjaGVja19tYWdpYyBFWFBFQ1RFRCkKKyAgZmlsZShSRUFEICR7RlVMTF9PVVRQVVRfTkFNRX0gQUNUVUFMCisgICAgJHtBUkdOfQorICApCisKKyAgaWYoTk9UIEFDVFVBTCBTVFJFUVVBTCBFWFBFQ1RFRCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICAiQWN0dWFsIFske0FDVFVBTH1dIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIFske0VYUEVDVEVEfV0iKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3Vuc3VwcG9ydGVkLWZvcm1hdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS91bnN1cHBvcnRlZC1mb3JtYXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3Vuc3VwcG9ydGVkLWZvcm1hdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3Vuc3VwcG9ydGVkLWZvcm1hdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjgwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvdW5zdXBwb3J0ZWQtZm9ybWF0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACitDTWFrZSBFcnJvciBhdCByb3VuZHRyaXAuY21ha2U6MzggXChmaWxlXCk6CisgIGZpbGUgYXJjaGl2ZSBmb3JtYXQgcmFyIG5vdCBzdXBwb3J0ZWQKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIHVuc3VwcG9ydGVkLWZvcm1hdC5jbWFrZTo1IFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS91bnN1cHBvcnRlZC1mb3JtYXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvdW5zdXBwb3J0ZWQtZm9ybWF0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNDFlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvdW5zdXBwb3J0ZWQtZm9ybWF0LmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnJhciIpCisKK3NldChBUkNISVZFX0ZPUk1BVCByYXIpCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yb3VuZHRyaXAuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLWZpbHRlcmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC1maWx0ZXJlZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGFhYjhiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC1maWx0ZXJlZC5jbWFrZQpAQCAtMCwwICsxLDI2IEBACitzZXQoT1VUUFVUX05BTUUgInRlc3QuemlwIikKKworc2V0KEFSQ0hJVkVfRk9STUFUIHppcCkKKworc2V0KERFQ09NUFJFU1NJT05fT1BUSU9OUworICBQQVRURVJOUworICAgIGNvbXByZXNzX2Rpci9mMS50eHQgIyBEZWNvbXByZXNzIG9ubHkgZmlsZQorICAgIGNvbXByZXNzXyovZD8gICAgICAgIyBhbmQgd2hvbGUgZGlyZWN0b3J5IChoYXMgb25seSBvbmUgbWF0Y2gpCispCisKK3NldChDVVNUT01fQ0hFQ0tfRklMRVMKKyAgImYxLnR4dCIKKyAgImQxL2YxLnR4dCIKKykKKworIyBUaGlzIGZpbGVzIHNob3VsZG4ndCBleGlzdHMKK3NldChOT1RfRVhJU1RJTkdfRklMRVNfQ0hFQ0sKKyAgImQgMi9mMS50eHQiCisgICJkICsgMy9mMS50eHQiCisgICJkXzQvZjEudHh0IgorICAiZC00L2YxLnR4dCIKKykKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKKworY2hlY2tfbWFnaWMoIjUwNGIwMzA0IiBMSU1JVCA0IEhFWCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvRmlsZV9BcmNoaXZlL3ppcC13aXRoLWJhZC1jb21wcmVzc2lvbi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhZDhjNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAtd2l0aC1iYWQtY29tcHJlc3Npb24tc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK0NNYWtlIEVycm9yIGF0IHJvdW5kdHJpcC5jbWFrZTozOCBcKGZpbGVcKToKKyAgZmlsZSBhcmNoaXZlIGZvcm1hdCB6aXAgZG9lcyBub3Qgc3VwcG9ydCBDT01QUkVTU0lPTiBhcmd1bWVudHMKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIHppcC13aXRoLWJhZC1jb21wcmVzc2lvbi5jbWFrZTo2IFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAtd2l0aC1iYWQtY29tcHJlc3Npb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYWRkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLXdpdGgtYmFkLWNvbXByZXNzaW9uLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnppcCIpCisKK3NldChBUkNISVZFX0ZPUk1BVCB6aXApCitzZXQoQ09NUFJFU1NJT05fVFlQRSBCWmlwMikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L3JvdW5kdHJpcC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQXJjaGl2ZS96aXAuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZTg0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0FyY2hpdmUvemlwLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorc2V0KE9VVFBVVF9OQU1FICJ0ZXN0LnppcCIpCisKK3NldChBUkNISVZFX0ZPUk1BVCB6aXApCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yb3VuZHRyaXAuY21ha2UpCisKK2NoZWNrX21hZ2ljKCI1MDRiMDMwNCIgTElNSVQgNCBIRVgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS93aGl0ZWxpc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDIzYTI4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACitDTWFrZSBFcnJvciBhdCBCYWRBcmcuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIEluY29ycmVjdCBhcmd1bWVudHMgdG8gQ09ORklHVVJFIHN1YmNvbW1hbmQuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3ZmNkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZy5jbWFrZQpAQCAtMCwwICsxIEBACitmaWxlKENPTkZJR1VSRSBPVVRQVVQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2RhNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK0NNYWtlIEVycm9yIGF0IEJhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25Db250ZW50LmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBDT05GSUdVUkUgY2FsbGVkIHdpdGggQ09OVEVOVCBjb250YWluaW5nIGEgIjwiLiAgVGhpcyBjaGFyYWN0ZXIgaXMgbm90CisgIGFsbG93ZWQuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25Db250ZW50LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmU5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uQ29udGVudC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2ZpbGUoQ09ORklHVVJFCisgICAgT1VUUFVUICJmaWxlLnR4dCIKKyAgICBDT05URU5UICJmb28tJDxDT05GSUc+IgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25PdXRwdXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uT3V0cHV0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25PdXRwdXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0JhZEFyZ0dlbmVyYXRvckV4cHJlc3Npb25PdXRwdXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjlkOTU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgQ09ORklHVVJFIGNhbGxlZCB3aXRoIE9VVFBVVCBjb250YWluaW5nIGEgIjwiLiAgVGhpcyBjaGFyYWN0ZXIgaXMgbm90CisgIGFsbG93ZWQuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9CYWRBcmdHZW5lcmF0b3JFeHByZXNzaW9uT3V0cHV0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWE3OWE3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2ZpbGUoQ09ORklHVVJFCisgICAgT1VUUFVUICJmaWxlLSQ8Q09ORklHPi50eHQiCisgICAgQ09OVEVOVCAiZm9vIgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzExN2JkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNykKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvRGlyT3V0cHV0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9EaXJPdXRwdXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDUxZjdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvRGlyT3V0cHV0LXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXkRpck91dHB1dCB0ZXN0IGZpbGUkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9EaXJPdXRwdXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9EaXJPdXRwdXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwZmFkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0Rpck91dHB1dC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2ZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0Rpck91dHB1dCkKK2NvbmZpZ3VyZV9maWxlKERpck91dHB1dC50eHQgRGlyT3V0cHV0KQorZmlsZShSRUFEICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9EaXJPdXRwdXQvRGlyT3V0cHV0LnR4dCBvdXQpCittZXNzYWdlKCIke291dH0iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvRGlyT3V0cHV0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0Rpck91dHB1dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzODhhNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL0Rpck91dHB1dC50eHQKQEAgLTAsMCArMSBAQAorRGlyT3V0cHV0IHRlc3QgZmlsZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtTm9Bcmctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOGVkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtTm9Bcmctc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK0NNYWtlIEVycm9yIGF0IE5ld0xpbmVTdHlsZS1Ob0FyZy5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgQ09ORklHVVJFIE5FV0xJTkVfU1RZTEUgbXVzdCBzZXQgYSBzdHlsZTogTEYsIENSTEYsIFVOSVgsIERPUywgb3IKKyAgV0lOMzIKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Ob0FyZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjczOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLU5vQXJnLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorc2V0KGZpbGVfbmFtZSAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L05ld0xpbmVTdHlsZS50eHQpCitmaWxlKENPTkZJR1VSRQorICAgIE9VVFBVVCAke2ZpbGVfbmFtZX0KKyAgICBDT05URU5UICJEYXRhXG4iCisgICAgTkVXTElORV9TVFlMRQorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVZhbGlkQXJnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVZhbGlkQXJnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODQ4NzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9OZXdMaW5lU3R5bGUtVmFsaWRBcmcuY21ha2UKQEAgLTAsMCArMSwyMCBAQAorc2V0KGZpbGVfbmFtZSAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L05ld0xpbmVTdHlsZS50eHQpCisKK2Z1bmN0aW9uKHRlc3RfZW9sIHN0eWxlIGluIG91dCkKKyAgICBmaWxlKENPTkZJR1VSRQorICAgICAgICBPVVRQVVQgJHtmaWxlX25hbWV9CisgICAgICAgIENPTlRFTlQgIkBpbkAiCisgICAgICAgIE5FV0xJTkVfU1RZTEUgJHtzdHlsZX0KKyAgICApCisgICAgZmlsZShSRUFEICR7ZmlsZV9uYW1lfSBuZXcgSEVYKQorICAgIGlmKE5PVCAiJHtuZXd9IiBTVFJFUVVBTCAiJHtvdXR9IikKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTm8gJHtzdHlsZX0gbGluZSBlbmRpbmdzIikKKyAgICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKK3Rlc3RfZW9sKERPUyAgICJhIiAiNjEwZDBhIikKK3Rlc3RfZW9sKFdJTjMyICJiIiAiNjIwZDBhIikKK3Rlc3RfZW9sKENSTEYgICJjIiAiNjMwZDBhIikKKwordGVzdF9lb2woVU5JWCAgImQiICI2NDBhIikKK3Rlc3RfZW9sKExGICAgICJlIiAiNjUwYSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Xcm9uZ0FyZy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiYjQyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Xcm9uZ0FyZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgTmV3TGluZVN0eWxlLVdyb25nQXJnLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBDT05GSUdVUkUgTkVXTElORV9TVFlMRSBzZXRzIGFuIHVua25vd24gc3R5bGUsIG9ubHkgTEYsIENSTEYsIFVOSVgsCisgIERPUywgYW5kIFdJTjMyIGFyZSBzdXBwb3J0ZWQKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Xcm9uZ0FyZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL05ld0xpbmVTdHlsZS1Xcm9uZ0FyZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDM4MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvTmV3TGluZVN0eWxlLVdyb25nQXJnLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorc2V0KGZpbGVfbmFtZSAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L05ld0xpbmVTdHlsZS50eHQpCitmaWxlKENPTkZJR1VSRQorICAgIE9VVFBVVCAke2ZpbGVfbmFtZX0KKyAgICBDT05URU5UICJEYXRhXG4iCisgICAgTkVXTElORV9TVFlMRSBGT08KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzM3MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTAgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShCYWRBcmcpCitydW5fY21ha2UoQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbkNvbnRlbnQpCitydW5fY21ha2UoQmFkQXJnR2VuZXJhdG9yRXhwcmVzc2lvbk91dHB1dCkKK3J1bl9jbWFrZShEaXJPdXRwdXQpCitydW5fY21ha2UoTmV3TGluZVN0eWxlLU5vQXJnKQorcnVuX2NtYWtlKE5ld0xpbmVTdHlsZS1WYWxpZEFyZykKK3J1bl9jbWFrZShOZXdMaW5lU3R5bGUtV3JvbmdBcmcpCitydW5fY21ha2UoU3ViRGlyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvU3ViRGlyLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvU3ViRGlyLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODI1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9TdWJEaXItY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACitzZXQoZXhwZWN0ZWQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9TdWJEaXIvb3V0LnR4dCIpCitpZihOT1QgRVhJU1RTICIke2V4cGVjdGVkfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRXhwZWN0ZWQgZmlsZSBub3QgY3JlYXRlZDpcbiAgJHtleHBlY3RlZH0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvU3ViRGlyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9Db25maWd1cmUvU3ViRGlyLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTYwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9TdWJEaXIuY21ha2UKQEAgLTAsMCArMSBAQAorYWRkX3N1YmRpcmVjdG9yeShTdWJEaXIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9TdWJEaXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0NvbmZpZ3VyZS9TdWJEaXIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkOTYyZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfQ29uZmlndXJlL1N1YkRpci9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxIEBACitmaWxlKENPTkZJR1VSRSBPVVRQVVQgb3V0LnR4dCBDT05URU5UICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9BZGphY2VudEluT3V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9BZGphY2VudEluT3V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGMyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0dlbmVyYXRlL0FkamFjZW50SW5PdXQuY21ha2UKQEAgLTAsMCArMSw2IEBACitjbWFrZV9wb2xpY3koU0VUIENNUDAwNzAgTkVXKQoraWYoRVhJU1RTICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQWRqYWNlbnRJbk91dC50eHQiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDTWFrZSBzaG91bGQgbm90IHJlLXJ1biBkdXJpbmcgdGhlIGJ1aWxkISIpCitlbmRpZigpCitjb25maWd1cmVfZmlsZShBZGphY2VudEluT3V0LmluICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9BZGphY2VudEluT3V0LnR4dC50bXApCitmaWxlKEdFTkVSQVRFIE9VVFBVVCBBZGphY2VudEluT3V0LnR4dCBJTlBVVCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQWRqYWNlbnRJbk91dC50eHQudG1wKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9BZGphY2VudEluT3V0LmluIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9BZGphY2VudEluT3V0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYmJkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0dlbmVyYXRlL0FkamFjZW50SW5PdXQuaW4KQEAgLTAsMCArMSBAQAorU2FtcGxlIFRleHQgRmlsZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9DTVAwMDcwLU9MRC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9DTVAwMDcwLU9MRC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNTc4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0dlbmVyYXRlL0NNUDAwNzAtT0xELXN0ZGVyci50eHQKQEAgLTAsMCArMSwxMCBAQAorXkNNYWtlIERlcHJlY2F0aW9uIFdhcm5pbmcgYXQgQ01QMDA3MC1PTEQuY21ha2U6WzAtOV0rIFwoY21ha2VfcG9saWN5XCk6CisgIFRoZSBPTEQgYmVoYXZpb3IgZm9yIHBvbGljeSBDTVAwMDcwIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24KKyAgb2YgQ01ha2UuCisKKyAgVGhlIGNtYWtlLXBvbGljaWVzXCg3XCkgbWFudWFsIGV4cGxhaW5zIHRoYXQgdGhlIE9MRCBiZWhhdmlvcnMgb2YgYWxsCisgIHBvbGljaWVzIGFyZSBkZXByZWNhdGVkIGFuZCB0aGF0IGEgcG9saWN5IHNob3VsZCBiZSBzZXQgdG8gT0xEIG9ubHkgdW5kZXIKKyAgc3BlY2lmaWMgc2hvcnQtdGVybSBjaXJjdW1zdGFuY2VzLiAgUHJvamVjdHMgc2hvdWxkIGJlIHBvcnRlZCB0byB0aGUgTkVXCisgIGJlaGF2aW9yIGFuZCBub3QgcmVseSBvbiBzZXR0aW5nIGEgcG9saWN5IHRvIE9MRC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfR2VuZXJhdGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaWxlX0dlbmVyYXRlL0NNYWtlTGlzdHMudHh0CmluZGV4IGJjMGNmNWQuLjMxNzhkZTUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfR2VuZXJhdGUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGlmKE5PVCBURVNUX0ZJTEUpCiAgIHNldChURVNUX0ZJTEUgJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbGVfR2VuZXJhdGUvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOTRhYWNhOC4uNTk4NzQxNyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmlsZV9HZW5lcmF0ZS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTcyLDYgKzcyLDcgQEAKICAgaWYgKE5PVCBzY3JpcHRfb3V0cHV0IFNUUkVRVUFMIFNVQ0NFU1MpCiAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJHZW5lcmF0ZWQgc2NyaXB0IGRpZCBub3QgZXhlY3V0ZSBjb3JyZWN0bHk6XG4ke3NjcmlwdF9vdXRwdXR9XG49PT09XG4ke3NjcmlwdF9lcnJvcn0iKQogICBlbmRpZigpCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4pCiBlbmRpZigpCiAKIGlmIChSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyBNYWtlZmlsZXMpCkBAIC0xMDQsMyArMTA1LDEwIEBACiAgICAgbWVzc2FnZShTRU5EX0VSUk9SICJGaWxlIGRpZCBub3QgcmUtZ2VuZXJhdGU6IFwiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9SZVJ1bkNNYWtlLWJ1aWxkL291dHB1dF9maWxlLnR4dFwiIikKICAgZW5kaWYoKQogZW5kaWYoKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQWRqYWNlbnRJbk91dC1idWlsZCkKK3J1bl9jbWFrZShBZGphY2VudEluT3V0KQorc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKK3J1bl9jbWFrZV9jb21tYW5kKEFkamFjZW50SW5PdXQtbm93b3JrICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQordW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQordW5zZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRPcGVuR0wvQ01QMDA3Mi1PTEQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRPcGVuR0wvQ01QMDA3Mi1PTEQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGQyM2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZE9wZW5HTC9DTVAwMDcyLU9MRC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTAgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENNUDAwNzItT0xELmNtYWtlOjEgXChjbWFrZV9wb2xpY3lcKToKKyAgVGhlIE9MRCBiZWhhdmlvciBmb3IgcG9saWN5IENNUDAwNzIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbgorICBvZiBDTWFrZS4KKworICBUaGUgY21ha2UtcG9saWNpZXNcKDdcKSBtYW51YWwgZXhwbGFpbnMgdGhhdCB0aGUgT0xEIGJlaGF2aW9ycyBvZiBhbGwKKyAgcG9saWNpZXMgYXJlIGRlcHJlY2F0ZWQgYW5kIHRoYXQgYSBwb2xpY3kgc2hvdWxkIGJlIHNldCB0byBPTEQgb25seSB1bmRlcgorICBzcGVjaWZpYyBzaG9ydC10ZXJtIGNpcmN1bXN0YW5jZXMuICBQcm9qZWN0cyBzaG91bGQgYmUgcG9ydGVkIHRvIHRoZSBORVcKKyAgYmVoYXZpb3IgYW5kIG5vdCByZWx5IG9uIHNldHRpbmcgYSBwb2xpY3kgdG8gT0xELgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0NNYWtlTGlzdHMudHh0CmluZGV4IDcyYWJmYzguLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTEpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfQ01BS0VfQVBQQlVORExFX1BBVEguY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfQ01BS0VfQVBQQlVORExFX1BBVEguY21ha2UKaW5kZXggMjY4N2VmZS4uYmY4Y2Q0ZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX0NNQUtFX0FQUEJVTkRMRV9QQVRILmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19DTUFLRV9BUFBCVU5ETEVfUEFUSC5jbWFrZQpAQCAtNCw1MyArNCwxMyBAQAogIyBQcmVwYXJlIGVudmlyb25tZW50IGFuZCB2YXJpYWJsZXMKIHNldChQS0dfQ09ORklHX1VTRV9DTUFLRV9QUkVGSVhfUEFUSCBUUlVFKQogc2V0KENNQUtFX0FQUEJVTkRMRV9QQVRIICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vIikKLWlmKFdJTjMyKQotICAgIHNldChQS0dfQ09ORklHX0VYRUNVVEFCTEUgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfVxcZHVtbXktcGtnLWNvbmZpZy5iYXQiKQotICAgIHNldChFTlZ7Q01BS0VfQVBQQlVORExFX1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn1cXHBjLWJhcjtYOlxcdGhpc1xcZGlyZWN0b3J5XFxzaG91bGRcXG5vdFxcZXhpc3RcXGluXFx0aGVcXGZpbGVzeXN0ZW0iKQotICAgIHNldChFTlZ7UEtHX0NPTkZJR19QQVRIfSAiQzpcXGJheiIpCi1lbHNlKCkKLSAgICBzZXQoUEtHX0NPTkZJR19FWEVDVVRBQkxFICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZHVtbXktcGtnLWNvbmZpZy5zaCIpCi0gICAgc2V0KEVOVntDTUFLRV9BUFBCVU5ETEVfUEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXI6L3RoaXMvZGlyZWN0b3J5L3Nob3VsZC9ub3QvZXhpc3QvaW4vdGhlL2ZpbGVzeXN0ZW0iKQotICAgIHNldChFTlZ7UEtHX0NPTkZJR19QQVRIfSAiL2JheiIpCi1lbmRpZigpCi0KK3NldChQS0dfQ09ORklHX0VYRUNVVEFCTEUgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kdW1teS1wa2ctY29uZmlnLnNoIikKK3NldChFTlZ7Q01BS0VfQVBQQlVORExFX1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyOi90aGlzL2RpcmVjdG9yeS9zaG91bGQvbm90L2V4aXN0L2luL3RoZS9maWxlc3lzdGVtIikKK3NldChFTlZ7UEtHX0NPTkZJR19QQVRIfSAiL2JheiIpCiAKIGZpbmRfcGFja2FnZShQa2dDb25maWcpCiAKLQotaWYoTk9UIERFRklORUQgQ01BS0VfU1lTVEVNX05BTUUKLSAgICBPUiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiXihMaW51eHxrRnJlZUJTRHxHTlUpJCIKLSAgICBBTkQgTk9UIENNQUtFX0NST1NTQ09NUElMSU5HKSkKLSAgaWYoRVhJU1RTICIvZXRjL2RlYmlhbl92ZXJzaW9uIikgIyBpcyB0aGlzIGEgZGViaWFuIHN5c3RlbSA/Ci0gICAgaWYoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgTUFUQ0hFUyAiXihpMzg2LWxpbnV4LWdudXx4ODZfNjQtbGludXgtZ251KSQiKQotICAgICAgIyBDYW5ub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciBhbGwgdGhlIGV4aXN0aW5nIGFyY2hpdGVjdHVyZXMuLi4KLSAgICAgIHNldChleHBlY3RlZF9wYXRoICIvYmF6OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliLyR7Q01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkV9L3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0vcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCi0gICAgZWxzZSgpCi0gICAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbmRpZigpCi0gIGVsc2UoKQotICAgICMgbm90IGRlYmlhbiwgY2hlY2sgdGhlIEZJTkRfTElCUkFSWV9VU0VfTElCMzJfUEFUSFMgYW5kIEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFMgcHJvcGVydGllcwotICAgIGdldF9wcm9wZXJ0eSh1c2VsaWJ4MzIgR0xPQkFMIFBST1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCWDMyX1BBVEhTKQotICAgIGdldF9wcm9wZXJ0eSh1c2VsaWIzMiBHTE9CQUwgUFJPUEVSVFkgRklORF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIUykKLSAgICBnZXRfcHJvcGVydHkodXNlbGliNjQgR0xPQkFMIFBST1BFUlRZIEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFMpCi0gICAgaWYodXNlbGlieDMyIEFORCBDTUFLRV9JTlRFUk5BTF9QTEFURk9STV9BQkkgU1RSRVFVQUwgIkVMRiBYMzIiKQotICAgICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWJ4MzIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYngzMi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbHNlaWYodXNlbGliMzIgQU5EIENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgNCkKLSAgICAgIHNldChleHBlY3RlZF9wYXRoICIvYmF6OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliMzIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYjMyL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi9wa2djb25maWciKQotICAgIGVsc2VpZih1c2VsaWI2NCBBTkQgQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQotICAgICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWI2NC9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliNjQvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCi0gICAgZWxzZSgpCi0gICAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbmRpZigpCi0gIGVuZGlmKCkKLWVsc2UoKQotICBpZihXSU4zMikKLSAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiQzpcXGJhejske0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn1cXHBjLWZvb1xcbGliXFxwa2djb25maWc7JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9XFxwYy1iYXJcXGxpYlxccGtnY29uZmlnIikKLSAgZWxzZSgpCi0gICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCi0gIGVuZGlmKCkKLWVuZGlmKCkKLQorc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCiAKIHBrZ19jaGVja19tb2R1bGVzKEZPTyAiJHtleHBlY3RlZF9wYXRofSIpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19DTUFLRV9GUkFNRVdPUktfUEFUSC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19DTUFLRV9GUkFNRVdPUktfUEFUSC5jbWFrZQppbmRleCA3NGNkYTI1Li4zN2MxOGZjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfQ01BS0VfRlJBTUVXT1JLX1BBVEguY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX0NNQUtFX0ZSQU1FV09SS19QQVRILmNtYWtlCkBAIC00LDUzICs0LDEzIEBACiAjIFByZXBhcmUgZW52aXJvbm1lbnQgYW5kIHZhcmlhYmxlcwogc2V0KFBLR19DT05GSUdfVVNFX0NNQUtFX1BSRUZJWF9QQVRIIFRSVUUpCiBzZXQoQ01BS0VfRlJBTUVXT1JLX1BBVEggIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28iKQotaWYoV0lOMzIpCi0gICAgc2V0KFBLR19DT05GSUdfRVhFQ1VUQUJMRSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9XFxkdW1teS1wa2ctY29uZmlnLmJhdCIpCi0gICAgc2V0KEVOVntDTUFLRV9GUkFNRVdPUktfUEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfVxccGMtYmFyO1g6XFx0aGlzXFxkaXJlY3RvcnlcXHNob3VsZFxcbm90XFxleGlzdFxcaW5cXHRoZVxcZmlsZXN5c3RlbSIpCi0gICAgc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICJDOlxcYmF6IikKLWVsc2UoKQotICAgIHNldChQS0dfQ09ORklHX0VYRUNVVEFCTEUgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kdW1teS1wa2ctY29uZmlnLnNoIikKLSAgICBzZXQoRU5We0NNQUtFX0ZSQU1FV09SS19QQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhcjovdGhpcy9kaXJlY3Rvcnkvc2hvdWxkL25vdC9leGlzdC9pbi90aGUvZmlsZXN5c3RlbSIpCi0gICAgc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICIvYmF6IikKLWVuZGlmKCkKLQorc2V0KFBLR19DT05GSUdfRVhFQ1VUQUJMRSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2R1bW15LXBrZy1jb25maWcuc2giKQorc2V0KEVOVntDTUFLRV9GUkFNRVdPUktfUEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXI6L3RoaXMvZGlyZWN0b3J5L3Nob3VsZC9ub3QvZXhpc3QvaW4vdGhlL2ZpbGVzeXN0ZW0iKQorc2V0KEVOVntQS0dfQ09ORklHX1BBVEh9ICIvYmF6IikKIAogZmluZF9wYWNrYWdlKFBrZ0NvbmZpZykKIAotCi1pZihOT1QgREVGSU5FRCBDTUFLRV9TWVNURU1fTkFNRQotICAgIE9SIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJeKExpbnV4fGtGcmVlQlNEfEdOVSkkIgotICAgIEFORCBOT1QgQ01BS0VfQ1JPU1NDT01QSUxJTkcpKQotICBpZihFWElTVFMgIi9ldGMvZGViaWFuX3ZlcnNpb24iKSAjIGlzIHRoaXMgYSBkZWJpYW4gc3lzdGVtID8KLSAgICBpZihDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRSBNQVRDSEVTICJeKGkzODYtbGludXgtZ251fHg4Nl82NC1saW51eC1nbnUpJCIpCi0gICAgICAjIENhbm5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yIGFsbCB0aGUgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlcy4uLgotICAgICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvJHtDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRX0vcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi8ke0NNQUtFX0xJQlJBUllfQVJDSElURUNUVVJFfS9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbHNlKCkKLSAgICAgIHNldChleHBlY3RlZF9wYXRoICIvYmF6OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi9wa2djb25maWciKQotICAgIGVuZGlmKCkKLSAgZWxzZSgpCi0gICAgIyBub3QgZGViaWFuLCBjaGVjayB0aGUgRklORF9MSUJSQVJZX1VTRV9MSUI2NF9QQVRIUyBhbmQgRklORF9MSUJSQVJZX1VTRV9MSUI2NF9QQVRIUyBwcm9wZXJ0aWVzCi0gICAgZ2V0X3Byb3BlcnR5KHVzZWxpYngzMiBHTE9CQUwgUFJPUEVSVFkgRklORF9MSUJSQVJZX1VTRV9MSUJYMzJfUEFUSFMpCi0gICAgZ2V0X3Byb3BlcnR5KHVzZWxpYjMyIEdMT0JBTCBQUk9QRVJUWSBGSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTKQotICAgIGdldF9wcm9wZXJ0eSh1c2VsaWI2NCBHTE9CQUwgUFJPUEVSVFkgRklORF9MSUJSQVJZX1VTRV9MSUI2NF9QQVRIUykKLSAgICBpZih1c2VsaWJ4MzIgQU5EIENNQUtFX0lOVEVSTkFMX1BMQVRGT1JNX0FCSSBTVFJFUVVBTCAiRUxGIFgzMiIpCi0gICAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYngzMi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGlieDMyL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi9wa2djb25maWciKQotICAgIGVsc2VpZih1c2VsaWIzMiBBTkQgQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA0KQotICAgICAgc2V0KGV4cGVjdGVkX3BhdGggIi9iYXo6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIzMi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWZvby9saWIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliMzIvcGtnY29uZmlnOiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1iYXIvbGliL3BrZ2NvbmZpZyIpCi0gICAgZWxzZWlmKHVzZWxpYjY0IEFORCBDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCi0gICAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYjY0L3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWI2NC9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgICBlbHNlKCkKLSAgICAgIHNldChleHBlY3RlZF9wYXRoICIvYmF6OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1mb28vbGliL3BrZ2NvbmZpZzoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtYmFyL2xpYi9wa2djb25maWciKQotICAgIGVuZGlmKCkKLSAgZW5kaWYoKQotZWxzZSgpCi0gIGlmKFdJTjMyKQotICAgIHNldChleHBlY3RlZF9wYXRoICJDOlxcYmF6OyR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfVxccGMtZm9vXFxsaWJcXHBrZ2NvbmZpZzske0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn1cXHBjLWJhclxcbGliXFxwa2djb25maWciKQotICBlbHNlKCkKLSAgICBzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKLSAgZW5kaWYoKQotZW5kaWYoKQotCitzZXQoZXhwZWN0ZWRfcGF0aCAiL2Jhejoke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGMtZm9vL2xpYi9wa2djb25maWc6JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BjLWJhci9saWIvcGtnY29uZmlnIikKIAogcGtnX2NoZWNrX21vZHVsZXMoRk9PICIke2V4cGVjdGVkX3BhdGh9IikKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX0dFVF9NQVRDSElOR19NT0RVTEVfTkFNRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19HRVRfTUFUQ0hJTkdfTU9EVUxFX05BTUUuY21ha2UKaW5kZXggZmMzYTc2Ni4uYWEyOTNkNSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX0dFVF9NQVRDSElOR19NT0RVTEVfTkFNRS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfR0VUX01BVENISU5HX01PRFVMRV9OQU1FLmNtYWtlCkBAIC0yMCw3ICsyMCw3IEBACiAKIHVuc2V0KEZPT19NT0RVTEVfTkFNRSkKIAotIyB2ZXJpZnkgdmFyaWFibGUgZ2V0J3MgYWxzbyBzZXQgb24gc3Vic2VxdWVudCBydW4KKyMgdmVyaWZ5IHZhcmlhYmxlIGdldHMgYWxzbyBzZXQgb24gc3Vic2VxdWVudCBydW4KIHBrZ19zZWFyY2hfbW9kdWxlKEZPTyBSRVFVSVJFRCBmb28gYmxldGNoIGJhcikKIAogaWYoTk9UIEZPT19NT0RVTEVfTkFNRSBTVFJFUVVBTCAiYmxldGNoIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19leHRyYWN0X2ZyYW1ld29ya3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfZXh0cmFjdF9mcmFtZXdvcmtzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTg4NmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL0ZpbmRQa2dDb25maWdfZXh0cmFjdF9mcmFtZXdvcmtzLmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKK2ZpbmRfcGFja2FnZShQa2dDb25maWcpCisKK3NldChmb29iYXJfTERGTEFHU19PVEhFUiAiLVdsLHh5Oy1mcmFtZXdvcms7YmFyOy1XbCxvdGhlci1mcmFtZXdvcms7LWZyYW1ld29yaztiYXo7LVdsLGFiYzstZnJhbWV3b3JrO2dvc2g7LWZyYW1ld29ya2NyYXA7LWZyYW1lO2o7LWZyYW1ld29yaztuaXg7LVdsLGRlZiIpCitzZXQoZm9vYmFyX0xJQlJBUklFUyAiLWx6Oy1sbSIpCisKK19wa2djb25maWdfZXh0cmFjdF9mcmFtZXdvcmtzKCJmb29iYXIiKQorCitpZiAoTk9UIGZvb2Jhcl9MREZMQUdTX09USEVSIFNUUkVRVUFMICItV2wseHk7LVdsLG90aGVyLWZyYW1ld29yazstV2wsYWJjOy1mcmFtZXdvcmtjcmFwOy1mcmFtZTtqOy1XbCxkZWYiKQorICBtZXNzYWdlKFNFTkRfRVJST1IgImZvb2Jhcl9MREZMQUdTX09USEVSIGRpZCBub3QgbWF0Y2g6ICR7Zm9vYmFyX0xERkxBR1NfT1RIRVJ9IikKK2VuZGlmICgpCitpZiAoTk9UIGZvb2Jhcl9MSUJSQVJJRVMgU1RSRVFVQUwgIi1sejstbG07LWZyYW1ld29yayBiYXI7LWZyYW1ld29yayBiYXo7LWZyYW1ld29yayBnb3NoOy1mcmFtZXdvcmsgbml4IikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJmb29iYXJfTElCUkFSSUVTIGRpZCBub3QgbWF0Y2g6ICR7Zm9vYmFyX0xJQlJBUklFU30iKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19leHRyYWN0X2ZyYW1ld29ya3NfdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9GaW5kUGtnQ29uZmlnX2V4dHJhY3RfZnJhbWV3b3Jrc190YXJnZXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwMWQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvRmluZFBrZ0NvbmZpZ19leHRyYWN0X2ZyYW1ld29ya3NfdGFyZ2V0LmNtYWtlCkBAIC0wLDAgKzEsMjkgQEAKKyMgUHJlcGFyZSBlbnZpcm9ubWVudCB0byByZXVzZSBibGV0Y2gucGMKK2ZpbGUoVE9fTkFUSVZFX1BBVEggIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYy1ibGV0Y2gvbGliL3BrZ2NvbmZpZyIgUENfUEFUSCkKK2lmKFVOSVgpCisgIHN0cmluZyhSRVBMQUNFICJcXCAiICIgIiBQQ19QQVRIICIke1BDX1BBVEh9IikKK2VuZGlmKCkKK3NldChFTlZ7UEtHX0NPTkZJR19QQVRIfSAiJHtQQ19QQVRIfSIpCisKK2ZpbmRfcGFja2FnZShQa2dDb25maWcgUkVRVUlSRUQpCitwa2dfY2hlY2tfbW9kdWxlcyhCbGV0Y2ggSU1QT1JURURfVEFSR0VUIFJFUVVJUkVEIGJsZXRjaC1mcmFtZXdvcmspCisKK2lmIChCbGV0Y2hfTERGTEFHU19PVEhFUikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJCbGV0Y2hfTERGTEFHU19PVEhFUiBzaG91bGQgYmUgZW1wdHksIGJ1dCBpcyAnJHtCbGV0Y2hfTERGTEFHU19PVEhFUn0nIikKK2VuZGlmICgpCisKK2lmIChOT1QgQmxldGNoX0xJTktfTElCUkFSSUVTIFNUUkVRVUFMICItZnJhbWV3b3JrIGZvbzstZnJhbWV3b3JrIGJhcjtibGV0Y2g7LWZyYW1ld29yayBiYXoiKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIkJsZXRjaF9MSU5LX0xJQlJBUklFUyBoYXMgd3JvbmcgdmFsdWUgJyR7QmxldGNoX0xJTktfTElCUkFSSUVTfSciKQorZW5kaWYgKCkKKworZm9yZWFjaCAocHJvcCBJTiBJVEVNUyBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyBJTlRFUkZBQ0VfTElOS19PUFRJT05TIElOVEVSRkFDRV9DT01QSUxFX09QVElPTlMpCisgIGdldF90YXJnZXRfcHJvcGVydHkocHJvcF92YWx1ZSBQa2dDb25maWc6OkJsZXRjaCAke3Byb3B9KQorICBpZiAocHJvcF92YWx1ZSkKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgInRhcmdldCBwcm9wZXJ0eSAke3Byb3B9IHNob3VsZCBub3QgYmUgc2V0LCBidXQgaXMgJyR7cHJvcF92YWx1ZX0nIikKKyAgZW5kaWYgKCkKK2VuZGZvcmVhY2ggKCkKKworZ2V0X3RhcmdldF9wcm9wZXJ0eShwcm9wX3ZhbHVlIFBrZ0NvbmZpZzo6QmxldGNoIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUykKK2lmIChOT1QgcHJvcF92YWx1ZSBTVFJFUVVBTCBCbGV0Y2hfTElOS19MSUJSQVJJRVMpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAidGFyZ2V0IHByb3BlcnR5IElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyBoYXMgd3JvbmcgdmFsdWUgJyR7cHJvcF92YWx1ZX0nIikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1BrZ0NvbmZpZ0RvZXNOb3RFeGlzdC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9Qa2dDb25maWdEb2VzTm90RXhpc3Qtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjVmN2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9Qa2dDb25maWdEb2VzTm90RXhpc3Qtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDYgQEAKKy0tIENvdWxkIE5PVCBmaW5kIFBrZ0NvbmZpZyBcKG1pc3Npbmc6IFBLR19DT05GSUdfRVhFQ1VUQUJMRVwpICoKKyAgICBSZWFzb24gZ2l2ZW4gYnkgcGFja2FnZTogVGhlIGNvbW1hbmQKKyAgICAgICJwa2ctY29uZmlnLWRvZXMtbm90LWV4aXN0IiAtLXZlcnNpb24KKyAgICBmYWlsZWQgd2l0aCBvdXRwdXQuKgorLS0gUEtHX0NPTkZJR19GT1VORD0nRkFMU0UnCistLSBQS0dfQ09ORklHX0VYRUNVVEFCTEU9JycKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUGtnQ29uZmlnRG9lc05vdEV4aXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9Qa2dDb25maWdEb2VzTm90RXhpc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmYWJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRQa2dDb25maWcvUGtnQ29uZmlnRG9lc05vdEV4aXN0LmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorc2V0KFBLR19DT05GSUdfRVhFQ1VUQUJMRSAicGtnLWNvbmZpZy1kb2VzLW5vdC1leGlzdCIgQ0FDSEUgRklMRVBBVEggIiIpCitmaW5kX3BhY2thZ2UoUGtnQ29uZmlnKQorbWVzc2FnZShTVEFUVVMgIlBLR19DT05GSUdfRk9VTkQ9JyR7UEtHX0NPTkZJR19GT1VORH0nIikKK21lc3NhZ2UoU1RBVFVTICJQS0dfQ09ORklHX0VYRUNVVEFCTEU9JyR7UEtHX0NPTkZJR19FWEVDVVRBQkxFfSciKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA3YjQ3OWYxLi40ZTZlZWY2IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNSwxMiArNSwxNiBAQAogc2V0KEVOVntDTUFLRV9BUFBCVU5ETEVfUEFUSH0gIiIpCiBzZXQoRU5We0NNQUtFX0ZSQU1FV09SS19QQVRIfSAiIikKIAorcnVuX2NtYWtlKFBrZ0NvbmZpZ0RvZXNOb3RFeGlzdCkKKwogcnVuX2NtYWtlKEZpbmRQa2dDb25maWdfTk9fUEtHQ09ORklHX1BBVEgpCiBydW5fY21ha2UoRmluZFBrZ0NvbmZpZ19QS0dDT05GSUdfUEFUSCkKIHJ1bl9jbWFrZShGaW5kUGtnQ29uZmlnX1BLR0NPTkZJR19QQVRIX05PX0NNQUtFX1BBVEgpCiBydW5fY21ha2UoRmluZFBrZ0NvbmZpZ19QS0dDT05GSUdfUEFUSF9OT19DTUFLRV9FTlZJUk9OTUVOVF9QQVRIKQorcnVuX2NtYWtlKEZpbmRQa2dDb25maWdfZXh0cmFjdF9mcmFtZXdvcmtzKQogCiBpZihBUFBMRSkKKyAgcnVuX2NtYWtlKEZpbmRQa2dDb25maWdfZXh0cmFjdF9mcmFtZXdvcmtzX3RhcmdldCkKICAgcnVuX2NtYWtlKEZpbmRQa2dDb25maWdfQ01BS0VfRlJBTUVXT1JLX1BBVEgpCiAgIHJ1bl9jbWFrZShGaW5kUGtnQ29uZmlnX0NNQUtFX0FQUEJVTkRMRV9QQVRIKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9wYy1ibGV0Y2gvbGliL3BrZ2NvbmZpZy9ibGV0Y2gtZnJhbWV3b3JrLnBjIGIvVGVzdHMvUnVuQ01ha2UvRmluZFBrZ0NvbmZpZy9wYy1ibGV0Y2gvbGliL3BrZ2NvbmZpZy9ibGV0Y2gtZnJhbWV3b3JrLnBjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjgwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kUGtnQ29uZmlnL3BjLWJsZXRjaC9saWIvcGtnY29uZmlnL2JsZXRjaC1mcmFtZXdvcmsucGMKQEAgLTAsMCArMSw5IEBACitwcmVmaXg9L29wdC9ibGV0Y2gKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQorbGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYgoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiBCbGV0Y2gKK0Rlc2NyaXB0aW9uOiBEdW1teSBwYWNrYWdldCB0byB0ZXN0IHZhcmlhYmxlIHN1cHBvcnQKK1ZlcnNpb246IDEuMworTGliczogLUwke2xpYmRpcn0gLWZyYW1ld29yayBmb28gLWZyYW1ld29yayBiYXIgLWxibGV0Y2ggLWZyYW1ld29yayBiYXoKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiMGQyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTApCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gQykKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjVmN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsNCBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworcnVuX2NtYWtlKGNvbXBvbmVudHMpCitydW5fY21ha2UobWlzc2luZy1jb21wb25lbnRzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvY29tcG9uZW50cy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvY29tcG9uZW50cy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzdiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9jb21wb25lbnRzLXN0ZG91dC50eHQKQEAgLTAsMCArMSw2IEBACistLSBGb3VuZCBTV0lHOiBbXiBdKyBcKGZvdW5kIHZlcnNpb24gIlswLTkuXSsiXCkgZm91bmQgY29tcG9uZW50czogamF2YSBweXRob24gbWlzc2luZyBjb21wb25lbnRzOiBQRVJMCistLSBTV0lHX1ZFUlNJT049J1swLTkuXSsnCistLSBTV0lHX2phdmFfRk9VTkQ9VFJVRQorLS0gU1dJR19weXRob25fRk9VTkQ9VFJVRQorLS0gU1dJR19QRVJMX0ZPVU5EPQorLS0gQ29uZmlndXJpbmcgZG9uZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRmluZFNXSUcvY29tcG9uZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL2NvbXBvbmVudHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc5YTgxZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL2NvbXBvbmVudHMuY21ha2UKQEAgLTAsMCArMSw5IEBACisjIE5vdGUgdGhhdCAncGVybCcgd2lsbCBub3QgYmUgZm91bmQgYmVjYXVzZSBpdCBpcyBub3QgbG93ZXJjYXNlLgorZmluZF9wYWNrYWdlKFNXSUcgUkVRVUlSRUQKKyAgQ09NUE9ORU5UUyBqYXZhCisgIE9QVElPTkFMX0NPTVBPTkVOVFMgcHl0aG9uIFBFUkwpCisKK21lc3NhZ2UoU1RBVFVTICJTV0lHX1ZFUlNJT049JyR7U1dJR19WRVJTSU9OfSciKQorZm9yZWFjaChfbGFuZyBqYXZhIHB5dGhvbiBQRVJMKQorICBtZXNzYWdlKFNUQVRVUyAiU1dJR18ke19sYW5nfV9GT1VORD0ke1NXSUdfJHtfbGFuZ31fRk9VTkR9IikKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL21pc3NpbmctY29tcG9uZW50cy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL21pc3NpbmctY29tcG9uZW50cy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9taXNzaW5nLWNvbXBvbmVudHMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL21pc3NpbmctY29tcG9uZW50cy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Mzc1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9taXNzaW5nLWNvbXBvbmVudHMtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitDb3VsZCBOT1QgZmluZCBTV0lHIFwobWlzc2luZzogaW52YWxpZFwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9taXNzaW5nLWNvbXBvbmVudHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GaW5kU1dJRy9taXNzaW5nLWNvbXBvbmVudHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwNWFlNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZpbmRTV0lHL21pc3NpbmctY29tcG9uZW50cy5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2ZpbmRfcGFja2FnZShTV0lHIFJFUVVJUkVECisgIENPTVBPTkVOVFMgaW52YWxpZAorICBPUFRJT05BTF9DT01QT05FTlRTIGFsc29pbnZhbGlkKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL0ZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeC1idWlsZC1maW5hbC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9GcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXgtYnVpbGQtZmluYWwtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmZTZiOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9GcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXgtYnVpbGQtZmluYWwtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0NSBAQAoraW5jbHVkZSgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0ZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeEluZm8uY21ha2UiKQorCitnZXRfZmlsZW5hbWVfY29tcG9uZW50KGZyYW1ld29ya19sb2NhdGlvbiAiJHtmcmFtZXdvcmtfZGlyfSIgRElSRUNUT1JZKQorc2V0KG5vbl9leGlzdGVudF9kZWJ1Z19mcmFtZXdvcmtfZGlyICIke2ZyYW1ld29ya19sb2NhdGlvbn0vJHt0YXJnZXRfZmlsZV9uYW1lfV9kZWJ1Zy5mcmFtZXdvcmsiKQorc2V0KGZyYW1ld29ya19yZXNvdXJjZXMgIiR7ZnJhbWV3b3JrX2Rpcn0vUmVzb3VyY2VzIikKK3NldChwbGlzdF9maWxlICIke2ZyYW1ld29ya19yZXNvdXJjZXN9L0luZm8ucGxpc3QiKQorCitzZXQoc3ltbGlua19yZWxlYXNlX3BhdGggIiR7ZnJhbWV3b3JrX2Rpcn0vJHt0YXJnZXRfZmlsZV9uYW1lfSIpCitzZXQoZnJhbWV3b3JrX3JlbGVhc2VfcGF0aCAiJHtmcmFtZXdvcmtfZGlyfS9WZXJzaW9ucy9BLyR7dGFyZ2V0X2ZpbGVfbmFtZX0iKQorCisjIFdoZW4gdXNpbmcgYSBtdWx0aSBjb25maWcgZ2VuZXJhdG9yIChsaWtlIE5pbmphIE11bHRpLUNvbmZpZyBhbmQgWGNvZGUpLAorIyB0aGUgcG9zdGZpeCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGRlYnVnIGZyYW1ld29yayBsaWJyYXJ5IG5hbWUgYW5kIHRoZSBzeW1saW5rIG5hbWUuCisjIEZvciBzaW5nbGUgY29uZmlnIGdlbmVyYXRvcnMsIHRoZSBuYW1lIHN0YXlzIHRoZSBzYW1lIGFzIHRoZSB0aGUgcmVsZWFzZSBmcmFtZXdvcmsuCitpZihpc19tdWx0aV9jb25maWcpCisgICAgc2V0KHN5bWxpbmtfZGVidWdfcGF0aCAiJHtmcmFtZXdvcmtfZGlyfS8ke3RhcmdldF9maWxlX25hbWV9X2RlYnVnIikKKyAgICBzZXQoZnJhbWV3b3JrX2RlYnVnX3BhdGggIiR7ZnJhbWV3b3JrX2Rpcn0vVmVyc2lvbnMvQS8ke3RhcmdldF9maWxlX25hbWV9X2RlYnVnIikKK2Vsc2UoKQorICAgIHNldChzeW1saW5rX2RlYnVnX3BhdGggIiR7ZnJhbWV3b3JrX2Rpcn0vJHt0YXJnZXRfZmlsZV9uYW1lfSIpCisgICAgc2V0KGZyYW1ld29ya19kZWJ1Z19wYXRoICIke2ZyYW1ld29ya19kaXJ9L1ZlcnNpb25zL0EvJHt0YXJnZXRfZmlsZV9uYW1lfSIpCitlbmRpZigpCisKK2lmKE5PVCBJU19ESVJFQ1RPUlkgJHtmcmFtZXdvcmtfZGlyfSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJGcmFtZXdvcmsgZGlyIG5vdCBmb3VuZCBhdCAke2ZyYW1ld29ya19kaXJ9IikKK2VuZGlmKCkKKworaWYoSVNfRElSRUNUT1JZICR7bm9uX2V4aXN0ZW50X2RlYnVnX2ZyYW1ld29ya19kaXJ9KQorICBtZXNzYWdlKFNFTkRfRVJST1IKKyAgICAgICJBIGZyYW1ld29yayBkaXIgd2l0aCBhIGRlYnVnIHN1ZmZpeCBzaG91bGQgbm90IGV4aXN0IGF0ICR7bm9uX2V4aXN0ZW50X2RlYnVnX2ZyYW1ld29ya19kaXJ9IikKK2VuZGlmKCkKKworaWYoTk9UIElTX1NZTUxJTksgIiR7c3ltbGlua19yZWxlYXNlX3BhdGh9IikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJSZWxlYXNlIGZyYW1ld29yayBzeW1saW5rIG5vdCBmb3VuZCBhdCAke3N5bWxpbmtfcmVsZWFzZV9wYXRofSIpCitlbmRpZigpCisKK2lmKE5PVCBJU19TWU1MSU5LICIke3N5bWxpbmtfZGVidWdfcGF0aH0iKQorICBtZXNzYWdlKFNFTkRfRVJST1IgIkRlYnVnIGZyYW1ld29yayBzeW1saW5rIG5vdCBmb3VuZCBhdCAke3N5bWxpbmtfZGVidWdfcGF0aH0iKQorZW5kaWYoKQorCitpZihOT1QgRVhJU1RTICIke2ZyYW1ld29ya19yZWxlYXNlX3BhdGh9IikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJSZWxlYXNlIGZyYW1ld29yayBub3QgZm91bmQgYXQgJHtmcmFtZXdvcmtfcmVsZWFzZV9wYXRofSIpCitlbmRpZigpCisKK2lmKE5PVCBFWElTVFMgIiR7ZnJhbWV3b3JrX2RlYnVnX3BhdGh9IikKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJEZWJ1ZyBmcmFtZXdvcmsgbm90IGZvdW5kIGF0ICR7ZnJhbWV3b3JrX2RlYnVnX3BhdGh9IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9GcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXguY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvRnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTYyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvRnJhbWV3b3JrTXVsdGlDb25maWdQb3N0Zml4LmNtYWtlCkBAIC0wLDAgKzEsMjUgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCitzZXQoQ01BS0VfRlJBTUVXT1JLX01VTFRJX0NPTkZJR19QT1NURklYX0RFQlVHICJfZGVidWciKQorCitzZXQoQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCitzZXQoQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCitzZXQoQ01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0UgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKK3NldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2JpbikKK3NldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2JpbikKK3NldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFTRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vYmluKQorc2V0KENNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorc2V0KENNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorc2V0KENNQUtFX0FSQ0hJVkVfT1VUUFVUX0RJUkVDVE9SWV9SRUxFQVNFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCisKK3NldCh0YXJnZXRfbmFtZSAibXlsaWIiKQorYWRkX2xpYnJhcnkoJHt0YXJnZXRfbmFtZX0gU0hBUkVEIGZvby5jKQorc2V0X3Byb3BlcnR5KFRBUkdFVCAke3RhcmdldF9uYW1lfSBQUk9QRVJUWSBGUkFNRVdPUksgT04pCitnZXRfcHJvcGVydHkoaXNfbXVsdGlfY29uZmlnIEdMT0JBTCBQUk9QRVJUWSBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorCitzdHJpbmcoQVBQRU5EIGNvbnRlbnQKKyAgICAgICAic2V0KGlzX211bHRpX2NvbmZpZyBcIiR7aXNfbXVsdGlfY29uZmlnfVwiKVxuIgorICAgICAgICJzZXQoZnJhbWV3b3JrX2RpciBcIiQ8VEFSR0VUX0JVTkRMRV9ESVI6JHt0YXJnZXRfbmFtZX0+XCIpXG4iCisgICAgICAgInNldCh0YXJnZXRfZmlsZV9uYW1lICR7dGFyZ2V0X25hbWV9KVxuIikKK2ZpbGUoR0VORVJBVEUgT1VUUFVUICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9GcmFtZXdvcmtNdWx0aUNvbmZpZ1Bvc3RmaXhJbmZvLmNtYWtlCisgICAgIENPTlRFTlQgIiR7Y29udGVudH0iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ZyYW1ld29yay9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOTY1ZmJmNC4uNmVlNjFhMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvRnJhbWV3b3JrL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9GcmFtZXdvcmsvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC00NSwzICs0NSwzOSBAQAogZnJhbWV3b3JrX3R5cGVfdGVzdChpb3MgU1RBVElDIFlFUykKIGZyYW1ld29ya190eXBlX3Rlc3Qob3N4IFNIQVJFRCBZRVMpCiBmcmFtZXdvcmtfdHlwZV90ZXN0KG9zeCBTVEFUSUMgWUVTKQorCitmdW5jdGlvbihmcmFtZXdvcmtfbXVsdGlfY29uZmlnX3Bvc3RmaXhfdGVzdCkKKyAgICBzZXQoY29uZmlndXJlX25hbWUgIkZyYW1ld29ya011bHRpQ29uZmlnUG9zdGZpeCIpCisgICAgc2V0KGJ1aWxkX25hbWUgIiR7Y29uZmlndXJlX25hbWV9LWJ1aWxkLWludGVybWVkaWF0ZSIpCisgICAgc2V0KGJ1aWxkX25hbWVfZmluYWwgIiR7Y29uZmlndXJlX25hbWV9LWJ1aWxkLWZpbmFsIikKKworICAgIGlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJOaW5qYSBNdWx0aS1Db25maWciKQorICAgICAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TCisgICAgICAgICAgICAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZTstRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIikKKyAgICBlbHNlaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlhjb2RlIikKKyAgICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUworICAgICAgICAgICAgIi1EQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUz1EZWJ1Z1xcO1JlbGVhc2UiKQorICAgIGVsc2UoKQorICAgICAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0JVSUxEX1RZUEU9RGVidWciKQorICAgIGVuZGlmKCkKKworICAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke2NvbmZpZ3VyZV9uYW1lfSkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorCisgICAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICAgIHJ1bl9jbWFrZSgke2NvbmZpZ3VyZV9uYW1lfSkKKyAgICB1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCisKKyAgICBpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiTmluamEgTXVsdGktQ29uZmlnIikKKyAgICAgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHtidWlsZF9uYW1lX2ZpbmFsfSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLXRhcmdldCBhbGw6YWxsKQorICAgIGVsc2VpZihSdW5DTWFrZV9HRU5FUkFUT1IgTUFUQ0hFUyAiWGNvZGUiKQorICAgICAgICBydW5fY21ha2VfY29tbWFuZCgke2J1aWxkX25hbWV9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIFJlbGVhc2UpCisgICAgICAgIHJ1bl9jbWFrZV9jb21tYW5kKCR7YnVpbGRfbmFtZX0gJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4gLS1jb25maWcgRGVidWcpCisgICAgICAgIHJ1bl9jbWFrZV9jb21tYW5kKCR7YnVpbGRfbmFtZV9maW5hbH0gJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4gLS1jb25maWcgRGVidWcpCisgICAgZWxzZSgpCisgICAgICAgIHJ1bl9jbWFrZV9jb21tYW5kKCR7YnVpbGRfbmFtZV9maW5hbH0gJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCisgICAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCitmcmFtZXdvcmtfbXVsdGlfY29uZmlnX3Bvc3RmaXhfdGVzdCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HTlVJbnN0YWxsRGlycy9Ob1N5c3RlbS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR05VSW5zdGFsbERpcnMvTm9TeXN0ZW0tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmYwNjRjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR05VSW5zdGFsbERpcnMvTm9TeXN0ZW0tc3RkZXJyLnR4dApAQCAtMCwwICsxLDggQEAKK15DTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgLiovTW9kdWxlcy9HTlVJbnN0YWxsRGlycy5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisgIFVuYWJsZSB0byBkZXRlcm1pbmUgZGVmYXVsdCBDTUFLRV9JTlNUQUxMX0xJQkRJUiBkaXJlY3RvcnkgYmVjYXVzZSBubworICB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGtub3duLiAgUGxlYXNlIGVuYWJsZSBhdCBsZWFzdCBvbmUgbGFuZ3VhZ2UgYmVmb3JlCisgIGluY2x1ZGluZyBHTlVJbnN0YWxsRGlycy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIE5vU3lzdGVtLmNtYWtlOlswLTldKyBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dOVUluc3RhbGxEaXJzL05vU3lzdGVtLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR05VSW5zdGFsbERpcnMvTm9TeXN0ZW0uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljZjdiZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dOVUluc3RhbGxEaXJzL05vU3lzdGVtLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAordW5zZXQoQ01BS0VfU1lTVEVNX05BTUUpCitpbmNsdWRlKEdOVUluc3RhbGxEaXJzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR05VSW5zdGFsbERpcnMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR05VSW5zdGFsbERpcnMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGQ2NzFlZTAuLmViMmMxYTIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dOVUluc3RhbGxEaXJzL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9HTlVJbnN0YWxsRGlycy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTE2LDQgKzE2LDcgQEAKICAgICApCiAgIHNldChSdW5DTWFrZS1zdGRlcnItZmlsZSAke2Nhc2V9JHt2YXJpYW50fS1zdGRlcnIudHh0KQogICBydW5fY21ha2UoJHtjYXNlfSkKKyAgdW5zZXQoUnVuQ01ha2Utc3RkZXJyLWZpbGUpCiBlbmRmb3JlYWNoKCkKKworcnVuX2NtYWtlKE5vU3lzdGVtKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiM2ZmOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtVEFSR0VUX1BST1BFUlRZLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLVRBUkdFVF9QUk9QRVJUWS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTNkZGRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLVRBUkdFVF9QUk9QRVJUWS5jbWFrZQpAQCAtMCwwICsxLDE3IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkgKGxpYiBTSEFSRUQgZW1wdHkuYykKK3NldF90YXJnZXRfcHJvcGVydGllcyhsaWIgUFJPUEVSVElFUworICBJTkNMVURFX0RJUkVDVE9SSUVTICIkPCQ8Q09NUElMRV9MQU5HVUFHRTpDPjovdXNyL2luY2x1ZGU+IgorICBDT01QSUxFX0RFRklOSVRJT05TICIkPCQ8Q09NUElMRV9MQU5HVUFHRTpDPjpERUY+IgorICBDT01QSUxFX09QVElPTlMgIiQ8JDxDT01QSUxFX0xBTkdVQUdFOkM+Oi1PPiIpCisKK2FkZF9jdXN0b21fdGFyZ2V0KGRyaXZlCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8VEFSR0VUX1BST1BFUlRZOmxpYixJTkNMVURFX0RJUkVDVE9SSUVTPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPFRBUkdFVF9QUk9QRVJUWTpsaWIsQ09NUElMRV9ERUZJTklUSU9OUz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxUQVJHRVRfUFJPUEVSVFk6bGliLENPTVBJTEVfT1BUSU9OUz4pCisKK2FkZF9jdXN0b21fY29tbWFuZChUQVJHRVQgZHJpdmUgUFJFX0JVSUxECisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8VEFSR0VUX1BST1BFUlRZOmxpYixJTkNMVURFX0RJUkVDVE9SSUVTPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPFRBUkdFVF9QUk9QRVJUWTpsaWIsQ09NUElMRV9ERUZJTklUSU9OUz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxUQVJHRVRfUFJPUEVSVFk6bGliLENPTVBJTEVfT1BUSU9OUz4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnkuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3Qtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXVua25vd24tbGFuZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS11bmtub3duLWxhbmcuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS11bmtub3duLWxhbmcuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvQ09NUElMRV9MQU5HVUFHRS11bmtub3duLWxhbmcuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhNWU3OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR1VBR0UvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0KQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kKQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbCkKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzKQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUpCitydW5fY21ha2UoQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeSkKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0KQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtdW5rbm93bi1sYW5nKQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtVEFSR0VUX1BST1BFUlRZKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HVUFHRS9lbXB0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdVQUdFL2VtcHR5LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDMwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1UQVJHRVRfUFJPUEVSVFkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtVEFSR0VUX1BST1BFUlRZLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzE4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtVEFSR0VUX1BST1BFUlRZLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeSAobGliIFNIQVJFRCBlbXB0eS5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGxpYiBQUk9QRVJUSUVTCisgIElOQ0xVREVfRElSRUNUT1JJRVMgIiQ8JDxDT01QSUxFX0xBTkdfQU5EX0lEOkMsR05VPjovdXNyL2luY2x1ZGU+IgorICBDT01QSUxFX0RFRklOSVRJT05TICIkPCQ8Q09NUElMRV9MQU5HX0FORF9JRDpDLEdOVT46REVGPiIKKyAgQ09NUElMRV9PUFRJT05TICIkPCQ8Q09NUElMRV9MQU5HX0FORF9JRDpDLEdOVT46LU8+IikKKworYWRkX2N1c3RvbV90YXJnZXQoZHJpdmUKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJDxUQVJHRVRfUFJPUEVSVFk6bGliLElOQ0xVREVfRElSRUNUT1JJRVM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8VEFSR0VUX1BST1BFUlRZOmxpYixDT01QSUxFX0RFRklOSVRJT05TPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPFRBUkdFVF9QUk9QRVJUWTpsaWIsQ09NUElMRV9PUFRJT05TPikKKworYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBkcml2ZSBQUkVfQlVJTEQKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJDxUQVJHRVRfUFJPUEVSVFk6bGliLElOQ0xVREVfRElSRUNUT1JJRVM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8VEFSR0VUX1BST1BFUlRZOmxpYixDT01QSUxFX0RFRklOSVRJT05TPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPFRBUkdFVF9QUk9QRVJUWTpsaWIsQ09NUElMRV9PUFRJT05TPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnktc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnkuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3QtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3Qtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF90ZXN0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3QuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtaW5zdGFsbC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL0NPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtdW5rbm93bi1sYW5nLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELXVua25vd24tbGFuZy5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELXVua25vd24tbGFuZy5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9DT01QSUxFX0xBTkdfQU5EX0lELXVua25vd24tbGFuZy5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGJkMDVkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtQ09NUElMRV9MQU5HX0FORF9JRC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwxMSBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQpCitydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQpCitydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsKQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMpCitydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZSkKK3J1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5KQorcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3QpCitydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC11bmtub3duLWxhbmcpCitydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1UQVJHRVRfUFJPUEVSVFkpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL2VtcHR5LmMgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1DT01QSUxFX0xBTkdfQU5EX0lEL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUNPTVBJTEVfTEFOR19BTkRfSUQvZW1wdHkuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ2YzRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xOCkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjE1ODM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBERVZJQ0VfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2U6WzAtOV0rIFwoYWRkX2N1c3RvbV9jb21tYW5kXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxERVZJQ0VfTElOSz4KKworICBcJDxERVZJQ0VfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYjM3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UKQEAgLTAsMCArMSw0IEBACithZGRfY3VzdG9tX3RhcmdldChkcml2ZSkKK2FkZF9jdXN0b21fY29tbWFuZChUQVJHRVQgZHJpdmUgUFJFX0JVSUxECisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8REVWSUNFX0xJTks+CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDMwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstYWRkX2N1c3RvbV90YXJnZXQuY21ha2U6WzAtOV0rIFwoYWRkX2N1c3RvbV90YXJnZXRcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LPgorCisgIFwkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzI4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2FkZF9jdXN0b21fdGFyZ2V0KGRyaXZlCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8REVWSUNFX0xJTks+CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YjU5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstYWRkX2V4ZWN1dGFibGUuY21ha2U6WzAtOV0rIFwoYWRkX2V4ZWN1dGFibGVcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOmVtcHR5LmM+CisKKyAgXCQ8REVWSUNFX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9leGVjdXRhYmxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2V4ZWN1dGFibGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5ZjhmNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9leGVjdXRhYmxlLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2FkZF9leGVjdXRhYmxlKGVtcHR5ICQ8REVWSUNFX0xJTks6ZW1wdHkuYz4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9saWJyYXJ5LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfbGlicmFyeS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzdlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfbGlicmFyeS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstYWRkX2xpYnJhcnkuY21ha2U6WzAtOV0rIFwoYWRkX2xpYnJhcnlcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOmVtcHR5LmM+CisKKyAgXCQ8REVWSUNFX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9saWJyYXJ5LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstYWRkX2xpYnJhcnkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4NTQ3YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF9saWJyYXJ5LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2FkZF9saWJyYXJ5KGVtcHR5ICQ8REVWSUNFX0xJTks6ZW1wdHkuYz4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF90ZXN0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF90ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF90ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NTYxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgREVWSUNFX0xJTkstYWRkX3Rlc3QuY21ha2U6WzAtOV0rIFwoYWRkX3Rlc3RcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LPgorCisgIFwkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWFkZF90ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZDZiYTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1hZGRfdGVzdC5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworaW5jbHVkZShDVGVzdCkKK2VuYWJsZV90ZXN0aW5nKCkKKworYWRkX3Rlc3QoTkFNRSBkdW1teSBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPERFVklDRV9MSU5LPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1pbnN0YWxsLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstaW5zdGFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1pbnN0YWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1pbnN0YWxsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiMzA5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWluc3RhbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxLDcgQEAKK0NNYWtlIEVycm9yOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8REVWSUNFX0xJTks6ZW1wdHk+CisKKyAgXCQ8REVWSUNFX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1pbnN0YWxsLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstaW5zdGFsbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjZkYmVmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstaW5zdGFsbC5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworaW5zdGFsbChGSUxFUworICAkPERFVklDRV9MSU5LOmVtcHR5PgorICBERVNUSU5BVElPTiBzcmMKKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3RhcmdldF9jb21tYW5kcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstbGlua19kZXBlbmRzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS90YXJnZXRfY29tbWFuZHMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWxpbmtfZGVwZW5kcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1saW5rX2RlcGVuZHMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLWxpbmtfZGVwZW5kcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTA1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1saW5rX2RlcGVuZHMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDcgQEAKK0NNYWtlIEVycm9yOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8REVWSUNFX0xJTks6bGliPgorCisgIFwkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstbGlua19kZXBlbmRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstbGlua19kZXBlbmRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjk1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy1saW5rX2RlcGVuZHMuY21ha2UKQEAgLTAsMCArMSw3IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShsaWIgZW1wdHkuYykKKworYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3NldF9wcm9wZXJ0eShUQVJHRVQgZW1wdHkgUFJPUEVSVFkgTElOS19ERVBFTkRTICQ8REVWSUNFX0xJTks6bGliPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxODVlMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9uc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8REVWSUNFX0xJTks6REVGPgorCisgIFwkPERFVklDRV9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWE4ZWZjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKGVtcHR5IFBSSVZBVEUgJDxERVZJQ0VfTElOSzpERUY+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0Y2E0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLmNtYWtlOlswLTldKyBcKHRhcmdldF9jb21waWxlX29wdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOi1PUFQ+CisKKyAgXCQ8REVWSUNFX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Y2I3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zKGVtcHR5IFBSSVZBVEUgJDxERVZJQ0VfTElOSzotT1BUPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxNjQyZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBERVZJQ0VfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8REVWSUNFX0xJTks6L0RJUj4KKworICBcJDxERVZJQ0VfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2NjNDEzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGVtcHR5IFBSSVZBVEUgJDxERVZJQ0VfTElOSzovRElSPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNDkxNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBERVZJQ0VfTElOSy10YXJnZXRfbGlua19kaXJlY3Rvcmllcy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfbGlua19kaXJlY3Rvcmllc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8REVWSUNFX0xJTks6L0RJUj4KKworICBcJDxERVZJQ0VfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfbGlua19kaXJlY3Rvcmllcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTBkMjdkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMuY21ha2UKQEAgLTAsMCArMSw3IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShsaWIgZW1wdHkuYykKKworYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9saW5rX2RpcmVjdG9yaWVzKGVtcHR5IFBSSVZBVEUgJDxERVZJQ0VfTElOSzovRElSPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzZmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IERFVklDRV9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfbGlua19saWJyYXJpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPERFVklDRV9MSU5LOmxpYj4KKworICBcJDxERVZJQ0VfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MWY1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMuY21ha2UKQEAgLTAsMCArMSw3IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShsaWIgZW1wdHkuYykKKworYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhlbXB0eSBQUklWQVRFICQ8REVWSUNFX0xJTks6bGliPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliNjAyZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL0RFVklDRV9MSU5LLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBERVZJQ0VfTElOSy10YXJnZXRfc291cmNlcy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfc291cmNlc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8REVWSUNFX0xJTks6ZW1wdHkuYz4KKworICBcJDxERVZJQ0VfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X3NvdXJjZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9ERVZJQ0VfTElOSy10YXJnZXRfc291cmNlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGJhYzllCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvREVWSUNFX0xJTkstdGFyZ2V0X3NvdXJjZXMuY21ha2UKQEAgLTAsMCArMSwyIEBACithZGRfbGlicmFyeShlbXB0eSkKK3RhcmdldF9zb3VyY2VzKGVtcHR5IFBSSVZBVEUgJDxERVZJQ0VfTElOSzplbXB0eS5jPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTQ0NjAxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtREVWSUNFX0xJTksvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShERVZJQ0VfTElOSy1hZGRfY3VzdG9tX3RhcmdldCkKK3J1bl9jbWFrZShERVZJQ0VfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQpCitydW5fY21ha2UoREVWSUNFX0xJTkstaW5zdGFsbCkKK3J1bl9jbWFrZShERVZJQ0VfTElOSy1hZGRfZXhlY3V0YWJsZSkKK3J1bl9jbWFrZShERVZJQ0VfTElOSy1hZGRfbGlicmFyeSkKK3J1bl9jbWFrZShERVZJQ0VfTElOSy1hZGRfdGVzdCkKK3J1bl9jbWFrZShERVZJQ0VfTElOSy10YXJnZXRfc291cmNlcykKK3J1bl9jbWFrZShERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucykKK3J1bl9jbWFrZShERVZJQ0VfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zKQorcnVuX2NtYWtlKERFVklDRV9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKQorcnVuX2NtYWtlKERFVklDRV9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcykKK3J1bl9jbWFrZShERVZJQ0VfTElOSy10YXJnZXRfbGlua19kaXJlY3RvcmllcykKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICIoTmluamF8TWFrZWZpbGUpIikKKyAgcnVuX2NtYWtlKERFVklDRV9MSU5LLWxpbmtfZGVwZW5kcykKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LURFVklDRV9MSU5LL2VtcHR5LmMgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9lbXB0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1ERVZJQ0VfTElOSy9lbXB0eS5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDAyNWQzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEyKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwtY2hlY2suY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1jaGVjay5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLWNoZWNrLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1yZWN1cnNpb24xLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24xLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1yZWN1cnNpb24xLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24xLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24xLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwtcmVjdXJzaW9uMS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1yZWN1cnNpb24yLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24yLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1yZWN1cnNpb24yLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24yLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC1yZWN1cnNpb24yLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMi5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9HRU5FWF9FVkFMLXJlY3Vyc2lvbjIuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvR0VORVhfRVZBTC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML0dFTkVYX0VWQUwuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNGE1NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShUQVJHRVRfR0VORVhfRVZBTC1uby1hcmcpCitydW5fY21ha2UoVEFSR0VUX0dFTkVYX0VWQUwtbm8tdGFyZ2V0KQorcnVuX2NtYWtlKFRBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQpCitydW5fY21ha2UoVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMSkKK3J1bl9jbWFrZShUQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yKQorcnVuX2NtYWtlKFRBUkdFVF9HRU5FWF9FVkFMKQorcnVuX2NtYWtlKEdFTkVYX0VWQUwtcmVjdXJzaW9uMSkKK3J1bl9jbWFrZShHRU5FWF9FVkFMLXJlY3Vyc2lvbjIpCitydW5fY21ha2UoR0VORVhfRVZBTCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLWNoZWNrLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLWNoZWNrLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLWNoZWNrLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1uby1hcmctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1uby1hcmctcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1uby1hcmctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1uby1hcmctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1uby1hcmcuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vLWFyZy5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1uby10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm8tdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm8tdGFyZ2V0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm8tdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm8tdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm8tdGFyZ2V0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1uby10YXJnZXQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLW5vbi12YWxpZC10YXJnZXQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24xLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24xLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24xLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMi1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtR0VORVhfRVZBTC9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMi5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1yZWN1cnNpb24yLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjIuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9HRU5FWF9FVkFMLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML1RBUkdFVF9HRU5FWF9FVkFMLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML2VtcHR5LmMgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1HRU5FWF9FVkFML2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUdFTkVYX0VWQUwvZW1wdHkuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NDZjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xOCkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDQxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgSE9TVF9MSU5LLWFkZF9jdXN0b21fY29tbWFuZC5jbWFrZTpbMC05XSsgXChhZGRfY3VzdG9tX2NvbW1hbmRcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPEhPU1RfTElOSz4KKworICBcJDxIT1NUX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2ZTMwNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorYWRkX2N1c3RvbV90YXJnZXQoZHJpdmUpCithZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIGRyaXZlIFBSRV9CVUlMRAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPEhPU1RfTElOSz4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDQyMDJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgSE9TVF9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlOlswLTldKyBcKGFkZF9jdXN0b21fdGFyZ2V0XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks+CisKKyAgXCQ8SE9TVF9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWMwNzJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfY3VzdG9tX3RhcmdldC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2FkZF9jdXN0b21fdGFyZ2V0KGRyaXZlCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8SE9TVF9MSU5LPgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTU1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBIT1NUX0xJTkstYWRkX2V4ZWN1dGFibGUuY21ha2U6WzAtOV0rIFwoYWRkX2V4ZWN1dGFibGVcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPEhPU1RfTElOSzplbXB0eS5jPgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfZXhlY3V0YWJsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2V4ZWN1dGFibGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmNzRhNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2V4ZWN1dGFibGUuY21ha2UKQEAgLTAsMCArMSBAQAorYWRkX2V4ZWN1dGFibGUoZW1wdHkgJDxIT1NUX0xJTks6ZW1wdHkuYz4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2xpYnJhcnktcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfbGlicmFyeS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9saWJyYXJ5LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkMjdiZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX2xpYnJhcnktc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IEhPU1RfTElOSy1hZGRfbGlicmFyeS5jbWFrZTpbMC05XSsgXChhZGRfbGlicmFyeVwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8SE9TVF9MSU5LOmVtcHR5LmM+CisKKyAgXCQ8SE9TVF9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF9saWJyYXJ5LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfbGlicmFyeS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDEzNWFmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfbGlicmFyeS5jbWFrZQpAQCAtMCwwICsxIEBACithZGRfbGlicmFyeShlbXB0eSAkPEhPU1RfTElOSzplbXB0eS5jPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF90ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX3Rlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstYWRkX3Rlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTJhZDIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgSE9TVF9MSU5LLWFkZF90ZXN0LmNtYWtlOlswLTldKyBcKGFkZF90ZXN0XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks+CisKKyAgXCQ8SE9TVF9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWFkZF90ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjQ3MmFmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1hZGRfdGVzdC5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworaW5jbHVkZShDVGVzdCkKK2VuYWJsZV90ZXN0aW5nKCkKKworYWRkX3Rlc3QoTkFNRSBkdW1teSBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPEhPU1RfTElOSz4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1pbnN0YWxsLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1pbnN0YWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstaW5zdGFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1pbnN0YWxsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI2NWVjNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstaW5zdGFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorQ01ha2UgRXJyb3I6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks6ZW1wdHk+CisKKyAgXCQ8SE9TVF9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1pbnN0YWxsLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1pbnN0YWxsLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZGZmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWluc3RhbGwuY21ha2UKQEAgLTAsMCArMSw1IEBACisKK2luc3RhbGwoRklMRVMKKyAgJDxIT1NUX0xJTks6ZW1wdHk+CisgIERFU1RJTkFUSU9OIHNyYworKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWxpbmtfZGVwZW5kcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWxpbmtfZGVwZW5kcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWxpbmtfZGVwZW5kcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1saW5rX2RlcGVuZHMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGI4YjgyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy1saW5rX2RlcGVuZHMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDcgQEAKK0NNYWtlIEVycm9yOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8SE9TVF9MSU5LOmxpYj4KKworICBcJDxIT1NUX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWxpbmtfZGVwZW5kcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstbGlua19kZXBlbmRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDJmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLWxpbmtfZGVwZW5kcy5jbWFrZQpAQCAtMCwwICsxLDcgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCisKK2FkZF9saWJyYXJ5KGxpYiBlbXB0eS5jKQorCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBlbXB0eSBQUk9QRVJUWSBMSU5LX0RFUEVORFMgJDxIT1NUX0xJTks6bGliPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWIzYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLmNtYWtlOlswLTldKyBcKHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks6REVGPgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YzEzMGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhlbXB0eSBQUklWQVRFICQ8SE9TVF9MSU5LOkRFRj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX29wdGlvbnMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjViYmMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBIT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfY29tcGlsZV9vcHRpb25zXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks6LU9QVD4KKworICBcJDxIT1NUX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FmZWExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zKGVtcHR5IFBSSVZBVEUgJDxIT1NUX0xJTks6LU9QVD4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyNjM0YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IEhPU1RfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8SE9TVF9MSU5LOi9ESVI+CisKKyAgXCQ8SE9TVF9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmYxMDA5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoZW1wdHkgUFJJVkFURSAkPEhPU1RfTElOSzovRElSPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfbGlua19kaXJlY3Rvcmllcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjI1YTUyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfbGlua19kaXJlY3Rvcmllcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgSE9TVF9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLmNtYWtlOlswLTldKyBcKHRhcmdldF9saW5rX2RpcmVjdG9yaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks6L0RJUj4KKworICBcJDxIT1NUX0xJTks6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIG9wdGlvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NDg4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2RpcmVjdG9yaWVzLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkobGliIGVtcHR5LmMpCisKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyhlbXB0eSBQUklWQVRFICQ8SE9TVF9MSU5LOi9ESVI+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQ0NDFmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IEhPU1RfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMuY21ha2U6WzAtOV0rIFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxIT1NUX0xJTks6bGliPgorCisgIFwkPEhPU1RfTElOSzouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgb3B0aW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9saW5rX2xpYnJhcmllcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzRjOTJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfbGlua19saWJyYXJpZXMuY21ha2UKQEAgLTAsMCArMSw3IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShsaWIgZW1wdHkuYykKKworYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhlbXB0eSBQUklWQVRFICQ8SE9TVF9MSU5LOmxpYj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyNTU2OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9IT1NUX0xJTkstdGFyZ2V0X3NvdXJjZXMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IEhPU1RfTElOSy10YXJnZXRfc291cmNlcy5jbWFrZTpbMC05XSsgXCh0YXJnZXRfc291cmNlc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8SE9TVF9MSU5LOmVtcHR5LmM+CisKKyAgXCQ8SE9TVF9MSU5LOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBvcHRpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvSE9TVF9MSU5LLXRhcmdldF9zb3VyY2VzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfc291cmNlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTdiZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtSE9TVF9MSU5LL0hPU1RfTElOSy10YXJnZXRfc291cmNlcy5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2FkZF9saWJyYXJ5KGVtcHR5KQordGFyZ2V0X3NvdXJjZXMoZW1wdHkgUFJJVkFURSAkPEhPU1RfTElOSzplbXB0eS5jPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOWE3YzYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShIT1NUX0xJTkstYWRkX2N1c3RvbV90YXJnZXQpCitydW5fY21ha2UoSE9TVF9MSU5LLWFkZF9jdXN0b21fY29tbWFuZCkKK3J1bl9jbWFrZShIT1NUX0xJTkstaW5zdGFsbCkKK3J1bl9jbWFrZShIT1NUX0xJTkstYWRkX2V4ZWN1dGFibGUpCitydW5fY21ha2UoSE9TVF9MSU5LLWFkZF9saWJyYXJ5KQorcnVuX2NtYWtlKEhPU1RfTElOSy1hZGRfdGVzdCkKK3J1bl9jbWFrZShIT1NUX0xJTkstdGFyZ2V0X3NvdXJjZXMpCitydW5fY21ha2UoSE9TVF9MSU5LLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKQorcnVuX2NtYWtlKEhPU1RfTElOSy10YXJnZXRfY29tcGlsZV9vcHRpb25zKQorcnVuX2NtYWtlKEhPU1RfTElOSy10YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcykKK3J1bl9jbWFrZShIT1NUX0xJTkstdGFyZ2V0X2xpbmtfbGlicmFyaWVzKQorcnVuX2NtYWtlKEhPU1RfTElOSy10YXJnZXRfbGlua19kaXJlY3RvcmllcykKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICIoTmluamF8TWFrZWZpbGUpIikKKyAgcnVuX2NtYWtlKEhPU1RfTElOSy1saW5rX2RlcGVuZHMpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUhPU1RfTElOSy9lbXB0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1IT1NUX0xJTksvZW1wdHkuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0NmM0YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xOCkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fY29tbWFuZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwZDQ1OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlOjIgXChhZGRfY3VzdG9tX2NvbW1hbmRcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzhjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorYWRkX2N1c3RvbV90YXJnZXQoZHJpdmUpCithZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIGRyaXZlIFBSRV9CVUlMRAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPExJTktfTEFOR1VBR0U+CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmRhNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlOjEgXChhZGRfY3VzdG9tX3RhcmdldFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRT4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjZjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKQEAgLTAsMCArMSwzIEBACithZGRfY3VzdG9tX3RhcmdldChkcml2ZQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPExJTktfTEFOR1VBR0U+CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmRjOGU0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLmNtYWtlOjEgXChhZGRfZXhlY3V0YWJsZVwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRT4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzZiMzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUuY21ha2UKQEAgLTAsMCArMSBAQAorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuJDxMSU5LX0xBTkdVQUdFPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnktc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYWNkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnktc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnkuY21ha2U6MSBcKGFkZF9saWJyYXJ5XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX2xpYnJhcnkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzZjgyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeS5jbWFrZQpAQCAtMCwwICsxIEBACithZGRfbGlicmFyeShlbXB0eSBlbXB0eS4kPExJTktfTEFOR1VBR0U+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF90ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF90ZXN0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIyZWZkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS1hZGRfdGVzdC5jbWFrZTo1IFwoYWRkX3Rlc3RcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1hZGRfdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQ1NDdkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWFkZF90ZXN0LmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitpbmNsdWRlKENUZXN0KQorZW5hYmxlX3Rlc3RpbmcoKQorCithZGRfdGVzdChOQU1FIGR1bW15IENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8TElOS19MQU5HVUFHRT4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtZmlsZV9nZW5lcmF0ZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDI2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtZmlsZV9nZW5lcmF0ZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLmNtYWtlOjMgXChmaWxlXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtZmlsZV9nZW5lcmF0ZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1maWxlX2dlbmVyYXRlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWI4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtZmlsZV9nZW5lcmF0ZS5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK2VuYWJsZV9sYW5ndWFnZShDWFggQykKKworZmlsZShHRU5FUkFURQorICBPVVRQVVQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L291dHB1dC50eHQKKyAgQ09OVEVOVCAiTEFOR19JU18kPExJTktfTEFOR1VBR0U+XG4iCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1pbnN0YWxsLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtaW5zdGFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtaW5zdGFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWluc3RhbGwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2FmYzMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLWluc3RhbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxLDEwIEBACitDTWFrZSBFcnJvcjoKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KKworCitDTWFrZSBHZW5lcmF0ZSBzdGVwIGZhaWxlZC4gIEJ1aWxkIGZpbGVzIGNhbm5vdCBiZSByZWdlbmVyYXRlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtaW5zdGFsbC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS1pbnN0YWxsLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2MwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtaW5zdGFsbC5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworaW5zdGFsbChGSUxFUworICBlbXB0eS4kPExJTktfTEFOR1VBR0U+CisgIERFU1RJTkFUSU9OIHNyYworKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxMjFjYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy5jbWFrZToyIFwodGFyZ2V0X3NvdXJjZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS10YXJnZXRfc291cmNlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTM0YzAxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorYWRkX2xpYnJhcnkoZW1wdHkpCit0YXJnZXRfc291cmNlcyhlbXB0eSBQUklWQVRFIGVtcHR5LiQ8TElOS19MQU5HVUFHRT4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0UtdW5rbm93bi1sYW5nLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXVua25vd24tbGFuZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE0NzJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXVua25vd24tbGFuZy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46JDxUQVJHRVRfRVhJU1RTOnRvbyxtYW55LHBhcmFtZXRlcnM+PikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24xLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzYTgzYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTEtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLmNtYWtlOjQgXCh0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9uc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HVUFHRTpDPgorCisgIFwkPExJTktfTEFOR1VBR0U6Li4uPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeSBsaW5rCisgIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGI3Y2UwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMS5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoZW1wdHkgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpERUY+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24yLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UyLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU0MzEwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTIuY21ha2U6NCBcKHRhcmdldF9jb21waWxlX29wdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR1VBR0U6Qz4KKworICBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkgbGluaworICBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucyBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2MTg5NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTIuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9jb21waWxlX29wdGlvbnMoZW1wdHkgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjotT1BUPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjIwZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlMy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTMuY21ha2U6NCBcKHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFOkM+CisKKyAgXCQ8TElOS19MQU5HVUFHRTouLi4+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5IGxpbmsKKyAgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YTcyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+Oi9ESVI+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9saWJyYXJ5LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlNC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9MSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlNC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzY5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw4IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLXdyb25nLXVzYWdlNC5jbWFrZTo3IFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U+IGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGluayBsaWJyYXJpZXMgZXhwcmVzc2lvbi4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvTElOS19MQU5HVUFHRS13cm9uZy11c2FnZTQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlY2FhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdVQUdFL0xJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0LmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkobGliQyBlbXB0eS5jKQorCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGVtcHR5IFBSSVZBVEUgbGliJDxMSU5LX0xBTkdVQUdFPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmMGMwNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0KQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kKQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtaW5zdGFsbCkKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzKQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUpCitydW5fY21ha2UoTElOS19MQU5HVUFHRS1hZGRfbGlicmFyeSkKK3J1bl9jbWFrZShMSU5LX0xBTkdVQUdFLWFkZF90ZXN0KQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtdW5rbm93bi1sYW5nKQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UxKQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UyKQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2UzKQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0Utd3JvbmctdXNhZ2U0KQorcnVuX2NtYWtlKExJTktfTEFOR1VBR0UtZmlsZV9nZW5lcmF0ZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR1VBR0UvZW1wdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HVUFHRS9lbXB0eS5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ2YzRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE4KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmY2MmJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2U6MiBcKGFkZF9jdXN0b21fY29tbWFuZFwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpMQU5HLElEPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjkyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV9jb21tYW5kLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorYWRkX2N1c3RvbV90YXJnZXQoZHJpdmUpCithZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIGRyaXZlIFBSRV9CVUlMRAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgZWNobyAkPExJTktfTEFOR19BTkRfSUQ6TEFORyxJRD4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDljNDQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQuY21ha2U6MiBcKGFkZF9jdXN0b21fdGFyZ2V0XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdfQU5EX0lEOkxBTkcsSUQ+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fdGFyZ2V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1Zjc2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2FkZF9jdXN0b21fdGFyZ2V0KGRyaXZlCisgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICQ8TElOS19MQU5HX0FORF9JRDpMQU5HLElEPgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1MzEyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS5jbWFrZToxIFwoYWRkX2V4ZWN1dGFibGVcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6QyxNU1ZDPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDZjNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorYWRkX2V4ZWN1dGFibGUoZW1wdHkgbWFpbi5jCisgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsTVNWQz46ZW1wdHkuYz4KKyAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxHTlU+OmVtcHR5Mi5jPgorICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLENsYW5nPjplbXB0eTMuYz4KKyAgICAgICAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnktcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0NmUyOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS5jbWFrZToyIFwoYWRkX2xpYnJhcnlcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6QyxNU1ZDPgorCisgIFwkPExJTktfTEFOR19BTkRfSUQ6bGFuZyxpZD4gbWF5IG9ubHkgYmUgdXNlZCB3aXRoIGJpbmFyeSB0YXJnZXRzIHRvIHNwZWNpZnkKKyAgbGluayBsaWJyYXJpZXMsIGxpbmsgZGlyZWN0b3JpZXMsIGxpbmsgb3B0aW9ucywgYW5kIGxpbmsgZGVwZW5kcy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfbGlicmFyeS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODE5OWNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCithZGRfbGlicmFyeShlbXB0eSBlbXB0eS4kPExJTktfTEFOR19BTkRfSUQ6QyxNU1ZDPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfdGVzdC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3QtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjk0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3QuY21ha2U6NSBcKGFkZF90ZXN0XCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxHTlU+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWFkZF90ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNzAwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtYWRkX3Rlc3QuY21ha2UKQEAgLTAsMCArMSw1IEBACisKK2luY2x1ZGUoQ1Rlc3QpCitlbmFibGVfdGVzdGluZygpCisKK2FkZF90ZXN0KE5BTUUgZHVtbXkgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxHTlU+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWFkZF9leGVjdXRhYmxlLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWZpbGVfZ2VuZXJhdGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTdiNTVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWZpbGVfZ2VuZXJhdGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS5jbWFrZTozIFwoZmlsZVwpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT4KKworICBcJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMsIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1maWxlX2dlbmVyYXRlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YzFiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtZmlsZV9nZW5lcmF0ZS5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK2VuYWJsZV9sYW5ndWFnZShDWFggQykKKworZmlsZShHRU5FUkFURQorICBPVVRQVVQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L291dHB1dC50eHQKKyAgQ09OVEVOVCAiTEFOR19JU18kPCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT46Qz5cbiIKKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtaW5zdGFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELWluc3RhbGwtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtaW5zdGFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NWY5NzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtaW5zdGFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0NNYWtlIEVycm9yOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpDLE1TVkM+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorCisKK0NNYWtlIEdlbmVyYXRlIHN0ZXAgZmFpbGVkLiAgQnVpbGQgZmlsZXMgY2Fubm90IGJlIHJlZ2VuZXJhdGVkIGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELWluc3RhbGwuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmOTMyMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC1pbnN0YWxsLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitpbnN0YWxsKEZJTEVTCisgIGVtcHR5LiQ8TElOS19MQU5HX0FORF9JRDpDLE1TVkM+CisgIERFU1RJTkFUSU9OIHNyYworKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2NjAyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOCBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy5jbWFrZToyIFwodGFyZ2V0X3NvdXJjZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRD4gZXhwcmVzc2lvbiByZXF1aXJlcyBhdCBsZWFzdCB0d28gcGFyYW1ldGVycy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTVmYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXRhcmdldF9zb3VyY2VzLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorYWRkX2xpYnJhcnkoZW1wdHkpCit0YXJnZXRfc291cmNlcyhlbXB0eSBQUklWQVRFIGVtcHR5LiQ8TElOS19MQU5HX0FORF9JRD4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtdW5rbm93bi1sYW5nLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXVua25vd24tbGFuZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWRkMzM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXVua25vd24tbGFuZy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxHTlU+OiQ8VEFSR0VUX0VYSVNUUzp0b28sbWFueSxwYXJhbWV0ZXJzPj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0dFTkVYX0VWQUwtcmVjdXJzaW9uMS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjExYzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACitDTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS5jbWFrZTo0IFwodGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6QyxHTlU+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4ZTNiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UxLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2FkZF9leGVjdXRhYmxlKGVtcHR5IGVtcHR5LmMpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhlbXB0eSBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsR05VPjpERUY+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9HRU5FWF9FVkFMLXJlY3Vyc2lvbjItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vR0VORVhfRVZBTC1yZWN1cnNpb24yLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UyLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2JkY2IyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTIuY21ha2U6NCBcKHRhcmdldF9jb21waWxlX29wdGlvbnNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPExJTktfTEFOR19BTkRfSUQ6QyxHTlU+CisKKyAgXCQ8TElOS19MQU5HX0FORF9JRDpsYW5nLGlkPiBtYXkgb25seSBiZSB1c2VkIHdpdGggYmluYXJ5IHRhcmdldHMgdG8gc3BlY2lmeQorICBsaW5rIGxpYnJhcmllcywgbGluayBkaXJlY3RvcmllcywgbGluayBvcHRpb25zLCBhbmQgbGluayBkZXBlbmRzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4ZGFhOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTIuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorYWRkX2V4ZWN1dGFibGUoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9jb21waWxlX29wdGlvbnMoZW1wdHkgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT46LU9QVD4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfZXhlY3V0YWJsZS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0YTJlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvTElOS19MQU5HX0FORF9JRC13cm9uZy11c2FnZTMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UzLmNtYWtlOjQgXCh0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc1wpOgorICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgorCisgICAgXCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT4KKworICBcJDxMSU5LX0xBTkdfQU5EX0lEOmxhbmcsaWQ+IG1heSBvbmx5IGJlIHVzZWQgd2l0aCBiaW5hcnkgdGFyZ2V0cyB0byBzcGVjaWZ5CisgIGxpbmsgbGlicmFyaWVzLCBsaW5rIGRpcmVjdG9yaWVzLCBsaW5rIG9wdGlvbnMsIGFuZCBsaW5rIGRlcGVuZHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL0xJTktfTEFOR19BTkRfSUQtd3JvbmctdXNhZ2UzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTQzMDU2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtTElOS19MQU5HX0FORF9JRC9MSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCithZGRfZXhlY3V0YWJsZShlbXB0eSBlbXB0eS5jKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoZW1wdHkgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEdOVT46L0RJUj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYjY1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDE0IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoTElOS19MQU5HX0FORF9JRC1hZGRfY3VzdG9tX3RhcmdldCkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWFkZF9jdXN0b21fY29tbWFuZCkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWluc3RhbGwpCitydW5fY21ha2UoTElOS19MQU5HX0FORF9JRC10YXJnZXRfc291cmNlcykKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWFkZF9leGVjdXRhYmxlKQorcnVuX2NtYWtlKExJTktfTEFOR19BTkRfSUQtYWRkX2xpYnJhcnkpCitydW5fY21ha2UoTElOS19MQU5HX0FORF9JRC1hZGRfdGVzdCkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELXVua25vd24tbGFuZykKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMSkKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMikKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELXdyb25nLXVzYWdlMykKK3J1bl9jbWFrZShMSU5LX0xBTkdfQU5EX0lELWZpbGVfZ2VuZXJhdGUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL2VtcHR5LmMgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1MSU5LX0xBTkdfQU5EX0lEL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LUxJTktfTEFOR19BTkRfSUQvZW1wdHkuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjNkZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVIuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVIuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9JbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL0ltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRS1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRS1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEUuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVItcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVIuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUi5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUi5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVIuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9Ob25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL05vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24tcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9PVVRQVVRfTkFNRS1yZWN1cnNpb24tcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9PVVRQVVRfTkFNRS1yZWN1cnNpb24tc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9PVVRQVVRfTkFNRS1yZWN1cnNpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9PVVRQVVRfTkFNRS1yZWN1cnNpb24uY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9PVVRQVVRfTkFNRS1yZWN1cnNpb24uY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2VjNjMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMzEgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShUQVJHRVRfRklMRS1yZWN1cnNpb24pCitydW5fY21ha2UoT1VUUFVUX05BTUUtcmVjdXJzaW9uKQorcnVuX2NtYWtlKFRBUkdFVF9GSUxFX1BSRUZJWCkKK3J1bl9jbWFrZShUQVJHRVRfRklMRV9QUkVGSVgtaW1wb3J0ZWQtdGFyZ2V0KQorcnVuX2NtYWtlKFRBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0KQorcnVuX2NtYWtlKFRBUkdFVF9MSU5LRVJfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldCkKK3J1bl9jbWFrZShUQVJHRVRfRklMRV9TVUZGSVgpCitydW5fY21ha2UoVEFSR0VUX0ZJTEVfU1VGRklYLWltcG9ydGVkLXRhcmdldCkKK3J1bl9jbWFrZShUQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldCkKK3J1bl9jbWFrZShUQVJHRVRfTElOS0VSX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQpCitydW5fY21ha2Vfd2l0aF9vcHRpb25zKFRBUkdFVF9GSUxFX0JBU0VfTkFNRSAtRENNQUtFX0JVSUxEX1RZUEU6U1RSSU5HPURlYnVnKQorcnVuX2NtYWtlX3dpdGhfb3B0aW9ucyhUQVJHRVRfRklMRV9CQVNFX05BTUUtaW1wb3J0ZWQtdGFyZ2V0IC1EQ01BS0VfQlVJTERfVFlQRTpTVFJJTkc9RGVidWcpCitydW5fY21ha2UoVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQpCitydW5fY21ha2UoVEFSR0VUX0xJTktFUl9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0KQorcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfRElSKQorcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LVRBUkdFVF9CVU5ETEVfQ09OVEVOVF9ESVIpCitydW5fY21ha2UoSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVIpCitydW5fY21ha2UoSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUikKK3J1bl9jbWFrZShJbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUpCitydW5fY21ha2UoSW1wb3J0ZWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRSkKK2lmKExJTktFUl9TVVBQT1JUU19QREIpCisgIHJ1bl9jbWFrZShOb25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUpCisgIHJ1bl9jbWFrZShWYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUpCisgIHJ1bl9jbWFrZShOb25WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FKQorICBydW5fY21ha2UoVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRSkKK2Vsc2UoKQorICBydW5fY21ha2UoTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEUpCisgIHJ1bl9jbWFrZShOb25WYWxpZENvbXBpbGVyLVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFLXJlY3Vyc2lvbi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFLXJlY3Vyc2lvbi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFLXJlY3Vyc2lvbi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEUtcmVjdXJzaW9uLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFLXJlY3Vyc2lvbi1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFLXJlY3Vyc2lvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFLXJlY3Vyc2lvbi5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRS1yZWN1cnNpb24uY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFLXJlY3Vyc2lvbi5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUtY2hlY2suY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLWNoZWNrLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUtY2hlY2suY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLWltcG9ydGVkLXRhcmdldC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1pbXBvcnRlZC10YXJnZXQtY2hlY2suY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLWltcG9ydGVkLXRhcmdldC1jaGVjay5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLWltcG9ydGVkLXRhcmdldC1jaGVjay5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUtaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLWltcG9ydGVkLXRhcmdldC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUtaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUtaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9CQVNFX05BTUUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9CQVNFX05BTUUuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLWNoZWNrLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1BSRUZJWC1jaGVjay5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLWNoZWNrLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1BSRUZJWC1pbXBvcnRlZC10YXJnZXQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVgtaW1wb3J0ZWQtdGFyZ2V0LWNoZWNrLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1BSRUZJWC1pbXBvcnRlZC10YXJnZXQtY2hlY2suY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1BSRUZJWC1pbXBvcnRlZC10YXJnZXQtY2hlY2suY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLWltcG9ydGVkLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1BSRUZJWC1pbXBvcnRlZC10YXJnZXQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLWltcG9ydGVkLXRhcmdldC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLWltcG9ydGVkLXRhcmdldC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfUFJFRklYLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1BSRUZJWC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfUFJFRklYLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC1jaGVjay5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9TVUZGSVgtY2hlY2suY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC1jaGVjay5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9TVUZGSVgtaW1wb3J0ZWQtdGFyZ2V0LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLWltcG9ydGVkLXRhcmdldC1jaGVjay5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9TVUZGSVgtaW1wb3J0ZWQtdGFyZ2V0LWNoZWNrLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9TVUZGSVgtaW1wb3J0ZWQtdGFyZ2V0LWNoZWNrLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC1pbXBvcnRlZC10YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9TVUZGSVgtaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC1pbXBvcnRlZC10YXJnZXQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC1pbXBvcnRlZC10YXJnZXQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9GSUxFX1NVRkZJWC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfRklMRV9TVUZGSVguY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9GSUxFX1NVRkZJWC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfQkFTRV9OQU1FLW5vbi12YWxpZC10YXJnZXQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1BSRUZJWC1ub24tdmFsaWQtdGFyZ2V0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0LXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9MSU5LRVJfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfTElOS0VSX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1RBUkdFVF9MSU5LRVJfRklMRV9TVUZGSVgtbm9uLXZhbGlkLXRhcmdldC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtY2hlY2suY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLWNoZWNrLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEUtY2hlY2suY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1ZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1ZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5FeC1UQVJHRVRfRklMRS9WYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FLWNoZWNrLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1ZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtY2hlY2suY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1ZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUtY2hlY2suY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL1ZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvVmFsaWRUYXJnZXQtVEFSR0VUX1BEQl9GSUxFX0JBU0VfTkFNRS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuRXgtVEFSR0VUX0ZJTEUvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbkV4LVRBUkdFVF9GSUxFL2VtcHR5LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRlRXhwb3J0SGVhZGVyL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRlRXhwb3J0SGVhZGVyL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAxOGMzMzQwLi41YTVhN2JmIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0ZUV4cG9ydEhlYWRlci9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdGVFeHBvcnRIZWFkZXIvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yNiw0ICsyNiwxMiBAQAogICBlbmRmb3JlYWNoKCkKIGVuZGZ1bmN0aW9uKCkKIAorIyByZW1vdmUgdGhlc2UgZmxhZ3MgZnJvbSB0aGUgZW52aXJvbm1lbnQgaWYgdGhleSBoYXZlIGJlZW4gc2V0CisjIHNvIHRoZSB0ZXN0cyBydW4gdGhlIGNvcnJlY3QgZW52CitzZXQoZW52X2N4eF9mbGFncyAkRU5We0NYWEZMQUdTfSkKK2lmKGVudl9jeHhfZmxhZ3MpCisgIHN0cmluZyhSRVBMQUNFICItZnZpc2liaWxpdHk9aGlkZGVuIiAiIiBlbnZfY3h4X2ZsYWdzICIke2Vudl9jeHhfZmxhZ3N9IikKKyAgc3RyaW5nKFJFUExBQ0UgIi1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIgIiIgZW52X2N4eF9mbGFncyAiJHtlbnZfY3h4X2ZsYWdzfSIpCisgIHNldChFTlZ7Q1hYRkxBR1N9ICIke2Vudl9jeHhfZmxhZ3N9IikKK2VuZGlmKCkKIHJ1bl9HRUgoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdGVFeHBvcnRIZWFkZXIvZXhwb3J0aGVhZGVyX3Rlc3QuY3BwIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdGVFeHBvcnRIZWFkZXIvZXhwb3J0aGVhZGVyX3Rlc3QuY3BwCmluZGV4IGJhNzc2NzkuLmRjYWE0ZjIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRlRXhwb3J0SGVhZGVyL2V4cG9ydGhlYWRlcl90ZXN0LmNwcAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0ZUV4cG9ydEhlYWRlci9leHBvcnRoZWFkZXJfdGVzdC5jcHAKQEAgLTMyLDE0ICszMiwxNCBAQAogICAgIC8vIHRyYWlsaW5nIG51bGwgdG8gdGhlIHN0cmluZyB0aGF0IHdlIG5lZWQgdG8gc3RyaXAgYmVmb3JlIHRlc3RpbmcgZm9yIGEKICAgICAvLyB0cmFpbGluZyBzcGFjZS4KICAgICBpZiAocmVmTGluZS5zaXplKCkgJiYgcmVmTGluZVtyZWZMaW5lLnNpemUoKSAtIDFdID09IDApIHsKLSAgICAgIHJlZkxpbmUgPSByZWZMaW5lLnN1YnN0cigwLCByZWZMaW5lLnNpemUoKSAtIDEpOworICAgICAgcmVmTGluZS5yZXNpemUocmVmTGluZS5zaXplKCkgLSAxKTsKICAgICB9CiAgICAgaWYgKHRlc3RMaW5lLnNpemUoKSAmJiB0ZXN0TGluZVt0ZXN0TGluZS5zaXplKCkgLSAxXSA9PSAwKSB7Ci0gICAgICB0ZXN0TGluZSA9IHRlc3RMaW5lLnN1YnN0cigwLCB0ZXN0TGluZS5zaXplKCkgLSAxKTsKKyAgICAgIHRlc3RMaW5lLnJlc2l6ZSh0ZXN0TGluZS5zaXplKCkgLSAxKTsKICAgICB9CiAgICAgLy8gVGhlIHJlZmVyZW5jZSBmaWxlcyBuZXZlciBoYXZlIHRyYWlsaW5nIHNwYWNlczoKICAgICBpZiAodGVzdExpbmUuc2l6ZSgpICYmIHRlc3RMaW5lW3Rlc3RMaW5lLnNpemUoKSAtIDFdID09ICcgJykgewotICAgICAgdGVzdExpbmUgPSB0ZXN0TGluZS5zdWJzdHIoMCwgdGVzdExpbmUuc2l6ZSgpIC0gMSk7CisgICAgICB0ZXN0TGluZS5yZXNpemUodGVzdExpbmUuc2l6ZSgpIC0gMSk7CiAgICAgfQogICAgIGlmIChyZWZMaW5lICE9IHRlc3RMaW5lKSB7CiAgICAgICBzdGQ6OmNvdXQgPDwgIlJlZiBhbmQgdGVzdCBhcmUgbm90IHRoZSBzYW1lOlxuICBSZWY6ICBcIiIgPDwgcmVmTGluZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9CYWRDT05GSUctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQmFkQ09ORklHLXN0ZGVyci50eHQKaW5kZXggNDJkZDBjZS4uMTMwZGUyYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9CYWRDT05GSUctc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0JhZENPTkZJRy1zdGRlcnIudHh0CkBAIC0xMCwxNSArMTAsNiBAQAogQ01ha2UgRXJyb3IgYXQgQmFkQ09ORklHLmNtYWtlOjEgXChhZGRfY3VzdG9tX3RhcmdldFwpOgogICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgogCi0gICAgXCQ8Q09ORklHOkZvbyxCYXI+Ci0KLSAgXCQ8Q09ORklHPiBleHByZXNzaW9uIHJlcXVpcmVzIG9uZSBvciB6ZXJvIHBhcmFtZXRlcnMuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCi0rCi1DTWFrZSBFcnJvciBhdCBCYWRDT05GSUcuY21ha2U6MSBcKGFkZF9jdXN0b21fdGFyZ2V0XCk6Ci0gIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246Ci0KICAgICBcJDxDT05GSUc6Rm9vLUJhcj4KIAogICBFeHByZXNzaW9uIHN5bnRheCBub3QgcmVjb2duaXplZC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQmFkQ09ORklHLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9CYWRDT05GSUcuY21ha2UKaW5kZXggNWMyMmFhYS4uMTczNWFiNyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9CYWRDT05GSUcuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9CYWRDT05GSUcuY21ha2UKQEAgLTEsNiArMSw1IEBACiBhZGRfY3VzdG9tX3RhcmdldChjaGVjayBBTEwgQ09NTUFORCBjaGVjawogICAkPENPTkZJRzouPgotICAkPENPTkZJRzpGb28sQmFyPgogICAkPENPTkZJRzpGb28tQmFyPgogICAkPCQ8Q09ORklHOkZvby1OZXN0ZWQ+OmZvbz4KICAgVkVSQkFUSU0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li40YjNkZTg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1lbXB0eS1lbnRyaWVzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT05GSUctZW1wdHktZW50cmllcy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDMyNTZiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT05GSUctZW1wdHktZW50cmllcy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK2ZpbGUoUkVBRCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NPTkZJRy1lbXB0eS1lbnRyaWVzLWdlbmVyYXRlZC50eHQiIGNvbnRlbnQpCisKK3NldChleHBlY3RlZCAiMTIzNCIpCitpZihOT1QgY29udGVudCBTVFJFUVVBTCBleHBlY3RlZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJhY3R1YWwgY29udGVudDpcbiBbWyR7Y29udGVudH1dXVxuYnV0IGV4cGVjdGVkOlxuIFtbJHtleHBlY3RlZH1dXSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1lbXB0eS1lbnRyaWVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT05GSUctZW1wdHktZW50cmllcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGQ1M2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT05GSUctZW1wdHktZW50cmllcy5jbWFrZQpAQCAtMCwwICsxLDkgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDA3MCBORVcpCisKK3NldCh0ZXh0KQorc3RyaW5nKEFQUEVORCB0ZXh0ICIkPCQ8Q09ORklHOj46MT4iKQorc3RyaW5nKEFQUEVORCB0ZXh0ICIkPCQ8Q09ORklHOlJlbGVhc2UsPjoyPiIpCitzdHJpbmcoQVBQRU5EIHRleHQgIiQ8JDxDT05GSUc6LFJlbGVhc2U+OjM+IikKK3N0cmluZyhBUFBFTkQgdGV4dCAiJDwkPENPTkZJRzpSZWxlYXNlLCxEZWJ1Zz46ND4iKQorc3RyaW5nKEFQUEVORCB0ZXh0ICIkPCQ8Q09ORklHOlJlbGVhc2UsRGVidWc+OjU+IikKK2ZpbGUoR0VORVJBVEUgT1VUUFVUIENPTkZJRy1lbXB0eS1lbnRyaWVzLWdlbmVyYXRlZC50eHQgQ09OVEVOVCAgJHt0ZXh0fSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09ORklHLW11bHRpcGxlLWVudHJpZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1tdWx0aXBsZS1lbnRyaWVzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZjQyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1tdWx0aXBsZS1lbnRyaWVzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZmlsZShSRUFEICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ09ORklHLW11bHRpcGxlLWVudHJpZXMtZ2VuZXJhdGVkLnR4dCIgY29udGVudCkKKworc2V0KGV4cGVjdGVkICIxNCIpCitpZihOT1QgY29udGVudCBTVFJFUVVBTCBleHBlY3RlZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJhY3R1YWwgY29udGVudDpcbiBbWyR7Y29udGVudH1dXVxuYnV0IGV4cGVjdGVkOlxuIFtbJHtleHBlY3RlZH1dXSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTkZJRy1tdWx0aXBsZS1lbnRyaWVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT05GSUctbXVsdGlwbGUtZW50cmllcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI5MjgyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT05GSUctbXVsdGlwbGUtZW50cmllcy5jbWFrZQpAQCAtMCwwICsxLDggQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDA3MCBORVcpCisKK3NldCh0ZXh0KQorc3RyaW5nKEFQUEVORCB0ZXh0ICIkPCQ8Q09ORklHOkN1c3RvbUNvbmZpZz46MT4iKQorc3RyaW5nKEFQUEVORCB0ZXh0ICIkPCQ8Q09ORklHOlJlbGVhc2U+OjI+IikKK3N0cmluZyhBUFBFTkQgdGV4dCAiJDwkPENPTkZJRzpEZWJ1ZyxSZWxlYXNlPjozPiIpCitzdHJpbmcoQVBQRU5EIHRleHQgIiQ8JDxDT05GSUc6UmVsZWFzZSxDdXN0b21Db25maWcsRGVidWc+OjQ+IikKK2ZpbGUoR0VORVJBVEUgT1VUUFVUIENPTkZJRy1tdWx0aXBsZS1lbnRyaWVzLWdlbmVyYXRlZC50eHQgQ09OVEVOVCAiJHt0ZXh0fSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDY4YTAxNzIuLjYzNDkxMTIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xMiw2ICsxMiw3IEBACiBydW5fY21ha2UoQmFkVGFyZ2V0VHlwZU9iamVjdCkKIHJ1bl9jbWFrZShCYWRJbnN0YWxsUHJlZml4KQogcnVuX2NtYWtlKEJhZFNIRUxMX1BBVEgpCitydW5fY21ha2UoQmFkQ09ORklHKQogcnVuX2NtYWtlKENNUDAwNDQtV0FSTikKIHJ1bl9jbWFrZShOb25WYWxpZFRhcmdldC1DX0NPTVBJTEVSX0lEKQogcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LUNYWF9DT01QSUxFUl9JRCkKQEAgLTE5LDQzICsyMCwxMiBAQAogcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LUNfQ09NUElMRVJfVkVSU0lPTikKIHJ1bl9jbWFrZShOb25WYWxpZFRhcmdldC1DWFhfQ09NUElMRVJfVkVSU0lPTikKIHJ1bl9jbWFrZShOb25WYWxpZFRhcmdldC1Gb3J0cmFuX0NPTVBJTEVSX1ZFUlNJT04pCi1ydW5fY21ha2UoTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9ESVIpCi1ydW5fY21ha2UoTm9uVmFsaWRUYXJnZXQtVEFSR0VUX0JVTkRMRV9DT05URU5UX0RJUikKIHJ1bl9jbWFrZShOb25WYWxpZFRhcmdldC1UQVJHRVRfUFJPUEVSVFkpCiBydW5fY21ha2UoTm9uVmFsaWRUYXJnZXQtVEFSR0VUX1BPTElDWSkKLXJ1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLWFkZF9jdXN0b21fdGFyZ2V0KQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtYWRkX2N1c3RvbV9jb21tYW5kKQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtaW5zdGFsbCkKLXJ1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLXRhcmdldF9zb3VyY2VzKQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtYWRkX2V4ZWN1dGFibGUpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HVUFHRS1hZGRfbGlicmFyeSkKLXJ1bl9jbWFrZShDT01QSUxFX0xBTkdVQUdFLWFkZF90ZXN0KQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR1VBR0UtdW5rbm93bi1sYW5nKQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtYWRkX2N1c3RvbV90YXJnZXQpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfY3VzdG9tX2NvbW1hbmQpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1pbnN0YWxsKQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtdGFyZ2V0X3NvdXJjZXMpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC1hZGRfZXhlY3V0YWJsZSkKLXJ1bl9jbWFrZShDT01QSUxFX0xBTkdfQU5EX0lELWFkZF9saWJyYXJ5KQotcnVuX2NtYWtlKENPTVBJTEVfTEFOR19BTkRfSUQtYWRkX3Rlc3QpCi1ydW5fY21ha2UoQ09NUElMRV9MQU5HX0FORF9JRC11bmtub3duLWxhbmcpCi1ydW5fY21ha2UoVEFSR0VUX0ZJTEUtcmVjdXJzaW9uKQotcnVuX2NtYWtlKE9VVFBVVF9OQU1FLXJlY3Vyc2lvbikKLXJ1bl9jbWFrZShUQVJHRVRfRklMRV9QUkVGSVgpCi1ydW5fY21ha2UoVEFSR0VUX0ZJTEVfUFJFRklYLWltcG9ydGVkLXRhcmdldCkKLXJ1bl9jbWFrZShUQVJHRVRfRklMRV9QUkVGSVgtbm9uLXZhbGlkLXRhcmdldCkKLXJ1bl9jbWFrZShUQVJHRVRfTElOS0VSX0ZJTEVfUFJFRklYLW5vbi12YWxpZC10YXJnZXQpCi1ydW5fY21ha2UoVEFSR0VUX0ZJTEVfU1VGRklYKQotcnVuX2NtYWtlKFRBUkdFVF9GSUxFX1NVRkZJWC1pbXBvcnRlZC10YXJnZXQpCi1ydW5fY21ha2UoVEFSR0VUX0ZJTEVfU1VGRklYLW5vbi12YWxpZC10YXJnZXQpCi1ydW5fY21ha2UoVEFSR0VUX0xJTktFUl9GSUxFX1NVRkZJWC1ub24tdmFsaWQtdGFyZ2V0KQotcnVuX2NtYWtlX3dpdGhfb3B0aW9ucyhUQVJHRVRfRklMRV9CQVNFX05BTUUgLURDTUFLRV9CVUlMRF9UWVBFOlNUUklORz1EZWJ1ZykKLXJ1bl9jbWFrZV93aXRoX29wdGlvbnMoVEFSR0VUX0ZJTEVfQkFTRV9OQU1FLWltcG9ydGVkLXRhcmdldCAtRENNQUtFX0JVSUxEX1RZUEU6U1RSSU5HPURlYnVnKQotcnVuX2NtYWtlKFRBUkdFVF9GSUxFX0JBU0VfTkFNRS1ub24tdmFsaWQtdGFyZ2V0KQotcnVuX2NtYWtlKFRBUkdFVF9MSU5LRVJfRklMRV9CQVNFX05BTUUtbm9uLXZhbGlkLXRhcmdldCkKIHJ1bl9jbWFrZShUQVJHRVRfUFJPUEVSVFktSU5DTFVERV9ESVJFQ1RPUklFUykKIHJ1bl9jbWFrZShUQVJHRVRfUFJPUEVSVFktTE9DQVRJT04pCiBydW5fY21ha2UoVEFSR0VUX1BST1BFUlRZLVNPVVJDRVMpCitydW5fY21ha2UoVEFSR0VUX1BST1BFUlRZLUFMSUFTX0dMT0JBTCkKIHJ1bl9jbWFrZShMSU5LX09OTFktbm90LWxpbmtpbmcpCiBydW5fY21ha2UoVEFSR0VUX0VYSVNUUy1uby1hcmcpCiBydW5fY21ha2UoVEFSR0VUX0VYSVNUUy1lbXB0eS1hcmcpCkBAIC02NSwxNSArMzUsNiBAQAogcnVuX2NtYWtlKFRBUkdFVF9OQU1FX0lGX0VYSVNUUy1lbXB0eS1hcmcpCiBydW5fY21ha2UoVEFSR0VUX05BTUVfSUZfRVhJU1RTKQogcnVuX2NtYWtlKFRBUkdFVF9OQU1FX0lGX0VYSVNUUy1ub3QtYS10YXJnZXQpCi1ydW5fY21ha2UoVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnKQotcnVuX2NtYWtlKFRBUkdFVF9HRU5FWF9FVkFMLW5vLXRhcmdldCkKLXJ1bl9jbWFrZShUQVJHRVRfR0VORVhfRVZBTC1ub24tdmFsaWQtdGFyZ2V0KQotcnVuX2NtYWtlKFRBUkdFVF9HRU5FWF9FVkFMLXJlY3Vyc2lvbjEpCi1ydW5fY21ha2UoVEFSR0VUX0dFTkVYX0VWQUwtcmVjdXJzaW9uMikKLXJ1bl9jbWFrZShUQVJHRVRfR0VORVhfRVZBTCkKLXJ1bl9jbWFrZShHRU5FWF9FVkFMLXJlY3Vyc2lvbjEpCi1ydW5fY21ha2UoR0VORVhfRVZBTC1yZWN1cnNpb24yKQotcnVuX2NtYWtlKEdFTkVYX0VWQUwpCiBydW5fY21ha2UoUkVNT1ZFX0RVUExJQ0FURVMtZW1wdHkpCiBydW5fY21ha2UoUkVNT1ZFX0RVUExJQ0FURVMtMSkKIHJ1bl9jbWFrZShSRU1PVkVfRFVQTElDQVRFUy0yKQpAQCAtODQsMTkgKzQ1LDE4IEBACiBydW5fY21ha2UoRklMVEVSLUV4Y2x1ZGUpCiBydW5fY21ha2UoRklMVEVSLUluY2x1ZGUpCiAKLXJ1bl9jbWFrZShJbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0RJUikKLXJ1bl9jbWFrZShJbXBvcnRlZFRhcmdldC1UQVJHRVRfQlVORExFX0NPTlRFTlRfRElSKQotcnVuX2NtYWtlKEltcG9ydGVkVGFyZ2V0LVRBUkdFVF9QREJfRklMRSkKLXJ1bl9jbWFrZShJbXBvcnRlZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FKQotaWYoTElOS0VSX1NVUFBPUlRTX1BEQikKLSAgcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRSkKLSAgcnVuX2NtYWtlKFZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRSkKLSAgcnVuX2NtYWtlKE5vblZhbGlkVGFyZ2V0LVRBUkdFVF9QREJfRklMRV9CQVNFX05BTUUpCi0gIHJ1bl9jbWFrZShWYWxpZFRhcmdldC1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FKQoraWYoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyBbPT1bLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPUN1c3RvbUNvbmZpZ109PV0pCiBlbHNlKCkKLSAgcnVuX2NtYWtlKE5vblZhbGlkQ29tcGlsZXItVEFSR0VUX1BEQl9GSUxFKQotICBydW5fY21ha2UoTm9uVmFsaWRDb21waWxlci1UQVJHRVRfUERCX0ZJTEVfQkFTRV9OQU1FKQorICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIFs9PVstRENNQUtFX0JVSUxEX1RZUEU9Q3VzdG9tQ29uZmlnXT09XSkKIGVuZGlmKCkKK3J1bl9jbWFrZShDT05GSUctbXVsdGlwbGUtZW50cmllcykKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgWz09Wy1EQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUz1dPT1dKQorZWxzZSgpCisgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgWz09Wy1EQ01BS0VfQlVJTERfVFlQRT1dPT1dKQorZW5kaWYoKQorcnVuX2NtYWtlKENPTkZJRy1lbXB0eS1lbnRyaWVzKQogCiBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfUE9MSUNZX0RFRkFVTFRfQ01QMDA4NTpTVFJJTkc9T0xEKQogcnVuX2NtYWtlKENNUDAwODUtT0xEKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfUFJPUEVSVFktQUxJQVNfR0xPQkFMLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfUFJPUEVSVFktQUxJQVNfR0xPQkFMLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYmY4MzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9QUk9QRVJUWS1BTElBU19HTE9CQUwtY2hlY2suY21ha2UKQEAgLTAsMCArMSw2IEBACitmaWxlKFNUUklOR1MgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2FsaWFzX2dsb2JhbC50eHQgYWxpYXNfZ2xvYmFsKQorCitzZXQoZXhwZWN0ZWQgIlRSVUUobGliLWdsb2JhbCk6VFJVRTtGQUxTRShsaWItbG9jYWwpOkZBTFNFO1RSVUUobGliKTpGQUxTRSIpCitpZihOT1QgYWxpYXNfZ2xvYmFsIFNUUkVRVUFMIGV4cGVjdGVkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkFMSUFTX0dMT0JBTCB3YXM6XG4gW1ske2FsaWFzX2dsb2JhbH1dXVxuYnV0IGV4cGVjdGVkOlxuIFtbJHtleHBlY3RlZH1dXSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9QUk9QRVJUWS1BTElBU19HTE9CQUwuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9QUk9QRVJUWS1BTElBU19HTE9CQUwuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyYzAzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX1BST1BFUlRZLUFMSUFTX0dMT0JBTC5jbWFrZQpAQCAtMCwwICsxLDE2IEBACisKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE3KQorCithZGRfbGlicmFyeShsaWItZ2xvYmFsIFNIQVJFRCBJTVBPUlRFRCBHTE9CQUwpCithZGRfbGlicmFyeShhbGlhcy1saWItZ2xvYmFsIEFMSUFTIGxpYi1nbG9iYWwpCisKK2FkZF9saWJyYXJ5KGxpYi1sb2NhbCBTSEFSRUQgSU1QT1JURUQpCithZGRfbGlicmFyeShhbGlhcy1saWItbG9jYWwgQUxJQVMgbGliLWxvY2FsKQorCithZGRfbGlicmFyeShsaWIgU0hBUkVEIElNUE9SVEVEKQorYWRkX2xpYnJhcnkoYWxpYXMtbGliIEFMSUFTIGxpYikKKyMgc3dpdGNoIGZyb20gbG9jYWwgdG8gZ2xvYmFsCitzZXRfcHJvcGVydHkgKFRBUkdFVCBsaWIgUFJPUEVSVFkgSU1QT1JURURfR0xPQkFMIFRSVUUpCisKKworZmlsZShHRU5FUkFURSBPVVRQVVQgYWxpYXNfZ2xvYmFsLnR4dCBDT05URU5UICIkPFRBUkdFVF9QUk9QRVJUWTpsaWItZ2xvYmFsLElNUE9SVEVEX0dMT0JBTD4oJDxUQVJHRVRfUFJPUEVSVFk6YWxpYXMtbGliLWdsb2JhbCxBTElBU0VEX1RBUkdFVD4pOiQ8VEFSR0VUX1BST1BFUlRZOmFsaWFzLWxpYi1nbG9iYWwsQUxJQVNfR0xPQkFMPlxuJDxUQVJHRVRfUFJPUEVSVFk6bGliLWxvY2FsLElNUE9SVEVEX0dMT0JBTD4oJDxUQVJHRVRfUFJPUEVSVFk6YWxpYXMtbGliLWxvY2FsLEFMSUFTRURfVEFSR0VUPik6JDxUQVJHRVRfUFJPUEVSVFk6YWxpYXMtbGliLWxvY2FsLEFMSUFTX0dMT0JBTD5cbiQ8VEFSR0VUX1BST1BFUlRZOmxpYixJTVBPUlRFRF9HTE9CQUw+KCQ8VEFSR0VUX1BST1BFUlRZOmFsaWFzLWxpYixBTElBU0VEX1RBUkdFVD4pOiQ8VEFSR0VUX1BST1BFUlRZOmFsaWFzLWxpYixBTElBU19HTE9CQUw+XG4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfUFJPUEVSVFktSU5DTFVERV9ESVJFQ1RPUklFUy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX1BST1BFUlRZLUlOQ0xVREVfRElSRUNUT1JJRVMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmN2JmZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX1BST1BFUlRZLUlOQ0xVREVfRElSRUNUT1JJRVMtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxNyBAQAorZmlsZShSRUFEICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vb3V0LnR4dCIgY29udGVudCkKKwordW5zZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisKK2lmIChOT1QgY29udGVudCBNQVRDSEVTICIoSU5DTFVERVMxOiR7UnVuQ01ha2VfVEVTVF9TT1VSQ0VfRElSfS9pbmNsdWRlKSIpCisgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIndyb25nIGNvbnRlbnQgZm9yIElOQ0xVREVTMTogXCIke0NNQUtFX01BVENIXzF9XCJcbiIpCitlbmRpZigpCisKK2lmIChOT1QgY29udGVudCBNQVRDSEVTICIoSU5DTFVERVMyOj48KSIpCisgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIndyb25nIGNvbnRlbnQgZm9yIElOQ0xVREVTMjogXCIke0NNQUtFX01BVENIXzF9XCJcbiIpCitlbmRpZigpCitpZiAoTk9UIGNvbnRlbnQgTUFUQ0hFUyAiKElOQ0xVREVTMzo+PCkiKQorICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJ3cm9uZyBjb250ZW50IGZvciBJTkNMVURFUzM6IFwiJHtDTUFLRV9NQVRDSF8xfVwiXG4iKQorZW5kaWYoKQoraWYgKE5PVCBjb250ZW50IE1BVENIRVMgIihDVVNUT006Pjs7PCkiKQorICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJ3cm9uZyBjb250ZW50IGZvciBDVVNUT006IFwiJHtDTUFLRV9NQVRDSF8xfVwiXG4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfUFJPUEVSVFktSU5DTFVERV9ESVJFQ1RPUklFUy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX1BST1BFUlRZLUlOQ0xVREVfRElSRUNUT1JJRVMuY21ha2UKaW5kZXggY2I2ZjRkOC4uZTk4NTViZSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfUFJPUEVSVFktSU5DTFVERV9ESVJFQ1RPUklFUy5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL1RBUkdFVF9QUk9QRVJUWS1JTkNMVURFX0RJUkVDVE9SSUVTLmNtYWtlCkBAIC0xNCw1ICsxNCwxMCBAQAogYWRkX2xpYnJhcnkoZm9vNCBTVEFUSUMgZW1wdHkuYykKIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGZvbzQgUFVCTElDICQ8VEFSR0VUX1BST1BFUlRZOmZvbzMsSU5DTFVERV9ESVJFQ1RPUklFUz4pCiAKK2FkZF9saWJyYXJ5IChmb281IFNIQVJFRCBlbXB0eS5jKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBmb281IFBST1BFUlRZIElOQ0xVREVfRElSRUNUT1JJRVMgIiQ8JDxDT01QSUxFX0xBTkdVQUdFOkNVREE+Oi9pbmNsdWRlL0NVREE+IiAiJDwkPENPTVBJTEVfTEFOR1VBR0U6Rm9ydHJhbj46L2luY2x1ZGUvRm9ydHJhbj4iKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBmb281IFBST1BFUlRZIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTICIkPCQ8Q09NUElMRV9MQU5HVUFHRTpDVURBPjovaW5jbHVkZS9DVURBPiIgIiQ8JDxDT01QSUxFX0xBTkdVQUdFOkZvcnRyYW4+Oi9pbmNsdWRlL0ZvcnRyYW4+IikKK3NldF9wcm9wZXJ0eShUQVJHRVQgZm9vNSBQUk9QRVJUWSBDVVNUT00gIjs7IikKKwogIyBFdmFsdWF0ZSBhIGdlbmV4IHRoYXQgbG9va3MgdXAgSU5DTFVERV9ESVJFQ1RPUklFUyBvbiBtdWx0aXBsZSB0YXJnZXRzLgotZmlsZShHRU5FUkFURSBPVVRQVVQgb3V0LnR4dCBDT05URU5UICIkPFRBUkdFVF9QUk9QRVJUWTpmb280LElOQ0xVREVfRElSRUNUT1JJRVM+IikKK2ZpbGUoR0VORVJBVEUgT1VUUFVUIG91dC50eHQgQ09OVEVOVCAiSU5DTFVERVMxOiQ8VEFSR0VUX1BST1BFUlRZOmZvbzQsSU5DTFVERV9ESVJFQ1RPUklFUz5cbklOQ0xVREVTMjo+JDxUQVJHRVRfUFJPUEVSVFk6Zm9vNSxJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUz48XG5JTkNMVURFUzM6PiQ8VEFSR0VUX1BST1BFUlRZOmZvbzUsSU5DTFVERV9ESVJFQ1RPUklFUz48XG5DVVNUT006PiQ8VEFSR0VUX1BST1BFUlRZOmZvbzUsQ1VTVE9NPjxcbiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JQbGF0Zm9ybS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclBsYXRmb3JtL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclBsYXRmb3JtL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclBsYXRmb3JtL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yVG9vbHNldC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvclRvb2xzZXQvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yVG9vbHNldC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yVG9vbHNldC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBhZTc1NTYxLi5iYjIyODQxIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMzAsNiArMzAsOCBAQAogICAgIHNldChSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVCAiVGVzdCBUb29sc2V0LGhvc3Q9eDY0LGhvc3Q9eDg2IikKICAgICBydW5fY21ha2UoQmFkVG9vbHNldEhvc3RBcmNoVHdpY2UpCiAgICAgaWYoIiR7UnVuQ01ha2VfR0VORVJBVE9SfSIgTUFUQ0hFUyAiVmlzdWFsIFN0dWRpbyAxWzU2XSIpCisgICAgICBzZXQoUnVuQ01ha2VfR0VORVJBVE9SX1RPT0xTRVQgIlZDVGFyZ2V0c1BhdGg9VGVzdCBQYXRoIikKKyAgICAgIHJ1bl9jbWFrZShUZXN0VG9vbHNldFZDVGFyZ2V0c1BhdGhPbmx5KQogICAgICAgc2V0KFJ1bkNNYWtlX0dFTkVSQVRPUl9UT09MU0VUICJUZXN0IFRvb2xzZXQsdmVyc2lvbj1UZXN0IFRvb2xzZXQgVmVyc2lvbiIpCiAgICAgICBydW5fY21ha2UoVGVzdFRvb2xzZXRWZXJzaW9uQm90aCkKICAgICAgIHNldChSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVCAiLHZlcnNpb249VGVzdCBUb29sc2V0IFZlcnNpb24iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yVG9vbHNldC9UZXN0VG9vbHNldFZDVGFyZ2V0c1BhdGhPbmx5LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1Rlc3RUb29sc2V0VkNUYXJnZXRzUGF0aE9ubHktc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDYzNzNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yVG9vbHNldC9UZXN0VG9vbHNldFZDVGFyZ2V0c1BhdGhPbmx5LXN0ZG91dC50eHQKQEAgLTAsMCArMSwyIEBACistLSBDTUFLRV9WU19QTEFURk9STV9UT09MU0VUPSd2WzAtOV0rJworLS0gQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WQ1RBUkdFVFNfQ1VTVE9NX0RJUj0nVGVzdCBQYXRoJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yVG9vbHNldC9UZXN0VG9vbHNldFZDVGFyZ2V0c1BhdGhPbmx5LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yVG9vbHNldC9UZXN0VG9vbHNldFZDVGFyZ2V0c1BhdGhPbmx5LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMGEzMDMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JUb29sc2V0L1Rlc3RUb29sc2V0VkNUYXJnZXRzUGF0aE9ubHkuY21ha2UKQEAgLTAsMCArMSwyIEBACittZXNzYWdlKFNUQVRVUyAiQ01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVD0nJHtDTUFLRV9WU19QTEFURk9STV9UT09MU0VUfSciKQorbWVzc2FnZShTVEFUVVMgIkNNQUtFX1ZTX1BMQVRGT1JNX1RPT0xTRVRfVkNUQVJHRVRTX0NVU1RPTV9ESVI9JyR7Q01BS0VfVlNfUExBVEZPUk1fVE9PTFNFVF9WQ1RBUkdFVFNfQ1VTVE9NX0RJUn0nIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1jb25maWd1cmF0aW9uLWRlYnVnLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtY29uZmlndXJhdGlvbi1kZWJ1Zy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNWQxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtY29uZmlndXJhdGlvbi1kZWJ1Zy1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNSBAQAorVGVzdCBwcm9qZWN0IC4qR29vZ2xlVGVzdC1kaXNjb3ZlcnktbXVsdGktY29uZmlnCitbIFx0XSpUZXN0ICNbMC05XSs6IGNvbmZpZ3VyYXRpb25cLmNhc2VfcmVsZWFzZSBcKERpc2FibGVkXCkKK1sgXHRdKlRlc3QgI1swLTldKzogY29uZmlndXJhdGlvblwuY2FzZV9kZWJ1ZworKworVG90YWwgVGVzdHM6IDIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1jb25maWd1cmF0aW9uLXJlbGVhc2Utc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1jb25maWd1cmF0aW9uLXJlbGVhc2Utc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjkxNjY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWNvbmZpZ3VyYXRpb24tcmVsZWFzZS1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNSBAQAorVGVzdCBwcm9qZWN0IC4qR29vZ2xlVGVzdC1kaXNjb3ZlcnktbXVsdGktY29uZmlnCitbIFx0XSpUZXN0ICNbMC05XSs6IGNvbmZpZ3VyYXRpb25cLmNhc2VfcmVsZWFzZQorWyBcdF0qVGVzdCAjWzAtOV0rOiBjb25maWd1cmF0aW9uXC5jYXNlX2RlYnVnIFwoRGlzYWJsZWRcKQorKworVG90YWwgVGVzdHM6IDIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtYnVpbGQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtYnVpbGQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC1idWlsZC1zdGRvdXQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LXRpbWVvdXQtc3Rkb3V0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtYnVpbGQtc3Rkb3V0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC10ZXN0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktdGltZW91dC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC10ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmJlOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QT1NUX0JVSUxELXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMiBAQAorVW5hYmxlIHRvIGZpbmQgZXhlY3V0YWJsZTogZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQKK0Vycm9ycyB3aGlsZSBydW5uaW5nIENUZXN0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC10ZXN0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBPU1RfQlVJTEQtdGltZW91dC10ZXN0LXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkZTNmOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1kaXNjb3ZlcnktUE9TVF9CVUlMRC10aW1lb3V0LXRlc3Qtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDE4IEBACitUZXN0IHByb2plY3QgLipHb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0CitbIFx0XSpTdGFydCBbMC05XSs6IGRpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUCitDb3VsZCBub3QgZmluZCBleGVjdXRhYmxlIGRpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUCitMb29rZWQgaW4gdGhlIGZvbGxvd2luZyBwbGFjZXM6CitkaXNjb3ZlcnlfdGltZW91dF90ZXN0X05PVF9CVUlMVAorZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQoXC5leGUpPworRGVidWcvZGlzY292ZXJ5X3RpbWVvdXRfdGVzdF9OT1RfQlVJTFQKK0RlYnVnL2Rpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUKFwuZXhlKT8KK0RlYnVnL2Rpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUCitEZWJ1Zy9kaXNjb3ZlcnlfdGltZW91dF90ZXN0X05PVF9CVUlMVChcLmV4ZSk/CitbXlxuXStkaXNjb3ZlcnlfdGltZW91dF90ZXN0X05PVF9CVUlMVCArXC4rXCpcKlwqTm90IFJ1biArWzAtOS5dKyBzZWMKKysKKzAlIHRlc3RzIHBhc3NlZCwgMSB0ZXN0cyBmYWlsZWQgb3V0IG9mIDEKKysKK1RvdGFsIFRlc3QgdGltZSBcKHJlYWxcKSA9ICAgK1swLTkuXSsgc2VjCisrCitUaGUgZm9sbG93aW5nIHRlc3RzIEZBSUxFRDoKK1teXG5dK2Rpc2NvdmVyeV90aW1lb3V0X3Rlc3RfTk9UX0JVSUxUIFwoTm90IFJ1blwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QUkVfVEVTVC10aW1lb3V0LXRlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWFmZTRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QUkVfVEVTVC10aW1lb3V0LXRlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDggQEAKK0NNYWtlIEVycm9yIGF0IC4qR29vZ2xlVGVzdEFkZFRlc3RzLmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKK1sgXHRdKkVycm9yIHJ1bm5pbmcgdGVzdCBleGVjdXRhYmxlLgorKworWyBcdF0qUGF0aDogJy4qZGlzY292ZXJ5X3RpbWVvdXRfdGVzdChcLmV4ZSk/JworWyBcdF0qUmVzdWx0OiBQcm9jZXNzIHRlcm1pbmF0ZWQgZHVlIHRvIHRpbWVvdXQKK1sgXHRdKk91dHB1dDoKK1sgXHRdKnRpbWVvdXQuCitbIFx0XSpjYXNlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtZGlzY292ZXJ5LVBSRV9URVNULXRpbWVvdXQtdGVzdC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QUkVfVEVTVC10aW1lb3V0LXRlc3Qtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjUwNjFmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LWRpc2NvdmVyeS1QUkVfVEVTVC10aW1lb3V0LXRlc3Qtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACitUZXN0IHByb2plY3QgLipHb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3Qtc2tpcC10aW1lb3V0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3Qtc2tpcC10aW1lb3V0LXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlY2I2YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC1za2lwLXRpbWVvdXQtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDEwIEBACitUZXN0IHByb2plY3QgLioKKyAgICBTdGFydCAyMDogc2tpcF90ZXN0LnRlc3QxCisxLzEgVGVzdCAjMjA6IHNraXBfdGVzdC50ZXN0MSBcLitcKlwqXCpTa2lwcGVkICtbMC05Ll0rIHNlYworCisxMDAlIHRlc3RzIHBhc3NlZCwgMCB0ZXN0cyBmYWlsZWQgb3V0IG9mIDEKKworVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gK1swLTkuXSsgc2VjCisKK1RoZSBmb2xsb3dpbmcgdGVzdHMgZGlkIG5vdCBydW46CisuKjIwIC0gc2tpcF90ZXN0XC50ZXN0MSBcKFNraXBwZWRcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LXRlc3QxLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtdGVzdDEtc3Rkb3V0LnR4dAppbmRleCA1Zjc3NTNkLi43ZmIzOTE5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtdGVzdDEtc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtdGVzdDEtc3Rkb3V0LnR4dApAQCAtMSwyMiArMSwyOCBAQAogVGVzdCBwcm9qZWN0IC4qCi0gICAgU3RhcnQgMTogVEVTVDpiYXNpY1wuY2FzZV9mb28hMQotMS84IFRlc3QgIzE6IFRFU1Q6YmFzaWNcLmNhc2VfZm9vITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgMjogVEVTVDpiYXNpY1wuY2FzZV9iYXIhMQotMi84IFRlc3QgIzI6IFRFU1Q6YmFzaWNcLmNhc2VfYmFyITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgMzogVEVTVDpiYXNpY1wuZGlzYWJsZWRfY2FzZSExCi0zLzggVGVzdCAjMzogVEVTVDpiYXNpY1wuZGlzYWJsZWRfY2FzZSExIFwuK1wqK05vdCBSdW4gXChEaXNhYmxlZFwpICtbMC05Ll0rIHNlYwotICAgIFN0YXJ0IDQ6IFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMQotNC84IFRlc3QgIzQ6IFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMSBcLitcKitOb3QgUnVuIFwoRGlzYWJsZWRcKSArWzAtOS5dKyBzZWMKLSAgICBTdGFydCA1OiBURVNUOnR5cGVkL3Nob3J0XC5jYXNlITEKLTUvOCBUZXN0ICM1OiBURVNUOnR5cGVkL3Nob3J0XC5jYXNlITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgNjogVEVTVDp0eXBlZC9mbG9hdFwuY2FzZSExCi02LzggVGVzdCAjNjogVEVTVDp0eXBlZC9mbG9hdFwuY2FzZSExIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYwotICAgIFN0YXJ0IDc6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8xITEKLTcvOCBUZXN0ICM3OiBURVNUOnZhbHVlL3Rlc3RcLmNhc2UvMSExIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYwotICAgIFN0YXJ0IDg6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8iZm9vIiExCi04LzggVGVzdCAjODogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLyJmb28iITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAgMTogVEVTVDpiYXNpY1wuY2FzZV9mb28hMQorIDEvMTEgVGVzdCAgIzE6IFRFU1Q6YmFzaWNcLmNhc2VfZm9vITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAgMjogVEVTVDpiYXNpY1wuY2FzZV9iYXIhMQorIDIvMTEgVGVzdCAgIzI6IFRFU1Q6YmFzaWNcLmNhc2VfYmFyITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAgMzogVEVTVDpiYXNpY1wuZGlzYWJsZWRfY2FzZSExCisgMy8xMSBUZXN0ICAjMzogVEVTVDpiYXNpY1wuZGlzYWJsZWRfY2FzZSExIFwuK1wqK05vdCBSdW4gXChEaXNhYmxlZFwpICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgIDQ6IFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMQorIDQvMTEgVGVzdCAgIzQ6IFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMSBcLitcKitOb3QgUnVuIFwoRGlzYWJsZWRcKSArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0ICA1OiBURVNUOnR5cGVkL3Nob3J0XC5jYXNlITEKKyA1LzExIFRlc3QgICM1OiBURVNUOnR5cGVkL3Nob3J0XC5jYXNlITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAgNjogVEVTVDp0eXBlZC9mbG9hdFwuY2FzZSExCisgNi8xMSBUZXN0ICAjNjogVEVTVDp0eXBlZC9mbG9hdFwuY2FzZSExIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgIDc6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8xITEKKyA3LzExIFRlc3QgICM3OiBURVNUOnZhbHVlL3Rlc3RcLmNhc2UvMSExIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgIDg6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8iZm9vIiExCisgOC8xMSBUZXN0ICAjODogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLyJmb28iITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAgOTogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJzZW1pY29sb247IiExCisgOS8xMSBUZXN0ICAjOTogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJzZW1pY29sb247IiExIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgMTA6IFRFU1Q6cGFyYW0vc3BlY2lhbFwuY2FzZS8iYmFja3NsYXNoXFwiITEKKzEwLzExIFRlc3QgIzEwOiBURVNUOnBhcmFtL3NwZWNpYWxcLmNhc2UvImJhY2tzbGFzaFxcIiExIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgMTE6IFRFU1Q6cGFyYW0vc3BlY2lhbFwuY2FzZS8iXCRce3Zhclx9IiExCisxMS8xMSBUZXN0ICMxMTogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJcJFx7dmFyXH0iITEgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCiAKLTEwMCUgdGVzdHMgcGFzc2VkLCAwIHRlc3RzIGZhaWxlZCBvdXQgb2YgNgorMTAwJSB0ZXN0cyBwYXNzZWQsIDAgdGVzdHMgZmFpbGVkIG91dCBvZiA5CiAKIFRvdGFsIFRlc3QgdGltZSBcKHJlYWxcKSA9ICtbMC05Ll0rIHNlYwogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QtdGVzdDItc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC10ZXN0Mi1zdGRvdXQudHh0CmluZGV4IDk2MGMwYjkuLjU4YzRkMTAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC10ZXN0Mi1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC10ZXN0Mi1zdGRvdXQudHh0CkBAIC0xLDI1ICsxLDMxIEBACiBUZXN0IHByb2plY3QgLioKLSAgICBTdGFydCAgOTogVEVTVDpiYXNpY1wuY2FzZV9mb28hMgotMS84IFRlc3QgICM5OiBURVNUOmJhc2ljXC5jYXNlX2ZvbyEyIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYwotICAgIFN0YXJ0IDEwOiBURVNUOmJhc2ljXC5jYXNlX2JhciEyCi0yLzggVGVzdCAjMTA6IFRFU1Q6YmFzaWNcLmNhc2VfYmFyITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgMTE6IFRFU1Q6YmFzaWNcLmRpc2FibGVkX2Nhc2UhMgotMy84IFRlc3QgIzExOiBURVNUOmJhc2ljXC5kaXNhYmxlZF9jYXNlITIgXC4rXCorTm90IFJ1biBcKERpc2FibGVkXCkgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgMTI6IFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMgotNC84IFRlc3QgIzEyOiBURVNUOmRpc2FibGVkXC5jYXNlITIgXC4rXCorTm90IFJ1biBcKERpc2FibGVkXCkgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgMTM6IFRFU1Q6dHlwZWQvc2hvcnRcLmNhc2UhMgotNS84IFRlc3QgIzEzOiBURVNUOnR5cGVkL3Nob3J0XC5jYXNlITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgMTQ6IFRFU1Q6dHlwZWQvZmxvYXRcLmNhc2UhMgotNi84IFRlc3QgIzE0OiBURVNUOnR5cGVkL2Zsb2F0XC5jYXNlITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCi0gICAgU3RhcnQgMTU6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8xITIKLTcvOCBUZXN0ICMxNTogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLzEhMiBcLisgK1Bhc3NlZCArWzAtOS5dKyBzZWMKLSAgICBTdGFydCAxNjogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLyJmb28iITIKLTgvOCBUZXN0ICMxNjogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLyJmb28iITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAxMjogVEVTVDpiYXNpY1wuY2FzZV9mb28hMgorIDEvMTEgVGVzdCAjMTI6IFRFU1Q6YmFzaWNcLmNhc2VfZm9vITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAxMzogVEVTVDpiYXNpY1wuY2FzZV9iYXIhMgorIDIvMTEgVGVzdCAjMTM6IFRFU1Q6YmFzaWNcLmNhc2VfYmFyITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAxNDogVEVTVDpiYXNpY1wuZGlzYWJsZWRfY2FzZSEyCisgMy8xMSBUZXN0ICMxNDogVEVTVDpiYXNpY1wuZGlzYWJsZWRfY2FzZSEyIFwuK1wqK05vdCBSdW4gXChEaXNhYmxlZFwpICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgMTU6IFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMgorIDQvMTEgVGVzdCAjMTU6IFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMiBcLitcKitOb3QgUnVuIFwoRGlzYWJsZWRcKSArWzAtOS5dKyBzZWMKKyAgICAgIFN0YXJ0IDE2OiBURVNUOnR5cGVkL3Nob3J0XC5jYXNlITIKKyA1LzExIFRlc3QgIzE2OiBURVNUOnR5cGVkL3Nob3J0XC5jYXNlITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAxNzogVEVTVDp0eXBlZC9mbG9hdFwuY2FzZSEyCisgNi8xMSBUZXN0ICMxNzogVEVTVDp0eXBlZC9mbG9hdFwuY2FzZSEyIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgMTg6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8xITIKKyA3LzExIFRlc3QgIzE4OiBURVNUOnZhbHVlL3Rlc3RcLmNhc2UvMSEyIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgMTk6IFRFU1Q6dmFsdWUvdGVzdFwuY2FzZS8iZm9vIiEyCisgOC8xMSBUZXN0ICMxOTogVEVTVDp2YWx1ZS90ZXN0XC5jYXNlLyJmb28iITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCisgICAgICBTdGFydCAyMDogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJzZW1pY29sb247IiEyCisgOS8xMSBUZXN0ICMyMDogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJzZW1pY29sb247IiEyIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgMjE6IFRFU1Q6cGFyYW0vc3BlY2lhbFwuY2FzZS8iYmFja3NsYXNoXFwiITIKKzEwLzExIFRlc3QgIzIxOiBURVNUOnBhcmFtL3NwZWNpYWxcLmNhc2UvImJhY2tzbGFzaFxcIiEyIFwuKyArUGFzc2VkICtbMC05Ll0rIHNlYworICAgICAgU3RhcnQgMjI6IFRFU1Q6cGFyYW0vc3BlY2lhbFwuY2FzZS8iXCRce3Zhclx9IiEyCisxMS8xMSBUZXN0ICMyMjogVEVTVDpwYXJhbS9zcGVjaWFsXC5jYXNlLyJcJFx7dmFyXH0iITIgXC4rICtQYXNzZWQgK1swLTkuXSsgc2VjCiAKLTEwMCUgdGVzdHMgcGFzc2VkLCAwIHRlc3RzIGZhaWxlZCBvdXQgb2YgNgorMTAwJSB0ZXN0cyBwYXNzZWQsIDAgdGVzdHMgZmFpbGVkIG91dCBvZiA5CiAKIFRvdGFsIFRlc3QgdGltZSBcKHJlYWxcKSA9ICtbMC05Ll0rIHNlYwogCiBUaGUgZm9sbG93aW5nIHRlc3RzIGRpZCBub3QgcnVuOgotLioxMSAtIFRFU1Q6YmFzaWNcLmRpc2FibGVkX2Nhc2UhMiBcKERpc2FibGVkXCkKLS4qMTIgLSBURVNUOmRpc2FibGVkXC5jYXNlITIgXChEaXNhYmxlZFwpCisuKjE0IC0gVEVTVDpiYXNpY1wuZGlzYWJsZWRfY2FzZSEyIFwoRGlzYWJsZWRcKQorLioxNSAtIFRFU1Q6ZGlzYWJsZWRcLmNhc2UhMiBcKERpc2FibGVkXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdC5jbWFrZQppbmRleCAzMTgwOGM2Li42YWEyNjU4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0LmNtYWtlCkBAIC0xLDUgKzEsNCBAQAotcHJvamVjdCh0ZXN0X2luY2x1ZGVfZGlycykKLWluY2x1ZGUoQ1Rlc3QpCitwcm9qZWN0KHRlc3RfaW5jbHVkZV9kaXJzIExBTkdVQUdFUyBDWFgpCiBpbmNsdWRlKEdvb2dsZVRlc3QpCiAKIGVuYWJsZV90ZXN0aW5nKCkKQEAgLTUwLDEwICs0OSw4IEBACiAgIFBST1BFUlRJRVMgVElNRU9VVCAyCiApCiAKLWFkZF9leGVjdXRhYmxlKGRpc2NvdmVyeV90aW1lb3V0X3Rlc3QgdGltZW91dF90ZXN0LmNwcCkKLXRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKGRpc2NvdmVyeV90aW1lb3V0X3Rlc3QgUFJJVkFURSBkaXNjb3ZlcnlTbGVlcFNlYz0xMCkKK2FkZF9leGVjdXRhYmxlKHNraXBfdGVzdCBza2lwX3Rlc3QuY3BwKQorCiBndGVzdF9kaXNjb3Zlcl90ZXN0cygKLSAgZGlzY292ZXJ5X3RpbWVvdXRfdGVzdAotICBURVNUX1BSRUZJWCBkaXNjb3ZlcnlfCi0gIERJU0NPVkVSWV9USU1FT1VUIDIKKyAgc2tpcF90ZXN0CiApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3REaXNjb3ZlcnlNdWx0aUNvbmZpZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdERpc2NvdmVyeU11bHRpQ29uZmlnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzg0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3REaXNjb3ZlcnlNdWx0aUNvbmZpZy5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitwcm9qZWN0KHRlc3RfaW5jbHVkZV9kaXJzIExBTkdVQUdFUyBDWFgpCitpbmNsdWRlKEdvb2dsZVRlc3QpCisKK2VuYWJsZV90ZXN0aW5nKCkKKworYWRkX2V4ZWN1dGFibGUoY29uZmlndXJhdGlvbl9ndGVzdCBjb25maWd1cmF0aW9uX2d0ZXN0LmNwcCkKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKGNvbmZpZ3VyYXRpb25fZ3Rlc3QgUFJJVkFURSAkPCQ8Q09ORklHOkRlYnVnPjpERUJVRz0xPikKKworZ3Rlc3RfZGlzY292ZXJfdGVzdHMoCisgIGNvbmZpZ3VyYXRpb25fZ3Rlc3QKKyAgUFJPUEVSVElFUyBMQUJFTFMgQ09ORklHCisgIERJU0NPVkVSWV9NT0RFIFBSRV9URVNUCispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3REaXNjb3ZlcnlUaW1lb3V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0RGlzY292ZXJ5VGltZW91dC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGU5ZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0RGlzY292ZXJ5VGltZW91dC5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitwcm9qZWN0KHRlc3RfaW5jbHVkZV9kaXJzIExBTkdVQUdFUyBDWFgpCitpbmNsdWRlKEdvb2dsZVRlc3QpCisKK2VuYWJsZV90ZXN0aW5nKCkKKworYWRkX2V4ZWN1dGFibGUoZGlzY292ZXJ5X3RpbWVvdXRfdGVzdCB0aW1lb3V0X3Rlc3QuY3BwKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoZGlzY292ZXJ5X3RpbWVvdXRfdGVzdCBQUklWQVRFIGRpc2NvdmVyeVNsZWVwU2VjPTEwKQorZ3Rlc3RfZGlzY292ZXJfdGVzdHMoCisgIGRpc2NvdmVyeV90aW1lb3V0X3Rlc3QKKyAgVEVTVF9QUkVGSVggZGlzY292ZXJ5XworICBESVNDT1ZFUllfVElNRU9VVCAyCisgIERJU0NPVkVSWV9NT0RFICR7RElTQ09WRVJZX01PREV9CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3RYTUwtcmVzdWx0LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLXJlc3VsdC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmZkYWMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLXJlc3VsdC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3NldChSRVNVTFRfRklMRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3RYTUwuRm9vLnhtbCIpCitpZihOT1QgRVhJU1RTICR7UkVTVUxUX0ZJTEV9KQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlJlc3VsdCBYTUwgZmlsZSAke1JFU1VMVF9GSUxFfSB3YXMgbm90IGNyZWF0ZWQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLXNwZWNpYWwtcmVzdWx0LWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLXNwZWNpYWwtcmVzdWx0LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTBhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L0dvb2dsZVRlc3RYTUwtc3BlY2lhbC1yZXN1bHQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyOCBAQAorc2V0KFJFU1VMVF9GSUxFUworICAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3RYTUxTcGVjaWFsL2Nhc2VzLmNhc2UvMC54bWwiCisgICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vR29vZ2xlVGVzdFhNTFNwZWNpYWwvY2FzZXMuY2FzZS8xLnhtbCIKKyAgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9Hb29nbGVUZXN0WE1MU3BlY2lhbC9jYXNlcy5jYXNlLzIueG1sIgorKQorCisjIENoZWNrIHJlc3VsdCBmaWxlcyBleGlzdAorZm9yZWFjaChmaWxlICR7UkVTVUxUX0ZJTEVTfSkKKyAgaWYoTk9UIEVYSVNUUyAke2ZpbGV9KQorICAgIGlmKE5PVCAke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSBTVFJFUVVBTCAiIikKKyAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH1cbiIpCisgICAgZW5kaWYoKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH1SZXN1bHQgWE1MIGZpbGUgJHtmaWxlfSB3YXMgbm90IGNyZWF0ZWQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworIyBhbmQgbm8gb3RoZXIgeG1sIGZpbGVzIGFyZSBjcmVhdGVkCitmaWxlKEdMT0JfUkVDVVJTRSBmaWxlX2xpc3QgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9Hb29nbGVUZXN0WE1MU3BlY2lhbC8qLyoueG1sIiBMSVNUX0RJUkVDVE9SSUVTIGZhbHNlKQorCitmb3JlYWNoKGZpbGUgJHtmaWxlX2xpc3R9KQorICBsaXN0KEZJTkQgUkVTVUxUX0ZJTEVTICIke2ZpbGV9IiBpZHgpCisgIGlmKC0xIEVRVUFMICR7aWR4fSkKKyAgICBpZihOT1QgJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0gU1RSRVFVQUwgIiIpCisgICAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9XG4iKQorICAgIGVuZGlmKCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9SW52YWxpZCBmaWxlICR7ZmlsZX0gd2FzIGNyZWF0ZWQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdFhNTC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvR29vZ2xlVGVzdFhNTC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjkxYzBlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9Hb29nbGVUZXN0WE1MLmNtYWtlCkBAIC0wLDAgKzEsMjEgQEAKK3Byb2plY3QodGVzdF9pbmNsdWRlX2RpcnMgTEFOR1VBR0VTIENYWCkKK2luY2x1ZGUoR29vZ2xlVGVzdCkKKworZW5hYmxlX3Rlc3RpbmcoKQorCisjIFRoaXMgY3JlYXRlcyB0aGUgZm9sZGVyIHN0cnVjdHVyZSBmb3IgdGhlIHBhcmFtdGVyaXplZCB0ZXN0cworIyB0byBhdm9pZCBoYW5kbGluZyBtaXNzaW5nIGZvbGRlcnMgaW4gQysrCisjCisjIFRoaXMgbXVzdCBtYXRjaCB0aGUgbWF0Y2ggdGhlIG5hbWUgZGVmaW5lZCBpbiB4bWxfb3V0cHV0LmNwcAorIyBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgdGVzdHMgd2l0aCBHZXRQYXJhbS4KKyMKKyMgVGhlIGZvbGRlciBuYW1lIGlzIGNyZWF0ZWQgZm9tIHRoZSB0ZXN0IG5hbWUgKG91dHB1dCBvZiB0aGUgbGluZQorIyB3aXRob3V0IGxlYWRpbmcgc3BhY2VzOiAiR29vZ2xlVGVzdFhNTFNwZWNpYWwvY2FzZXMuIikgYW5kCisjIHRoZSBwYXJ0cyB1bnRpbCB0aGUgbGFzdCBzbGFzaCAoImNhc2UvIikuIFRoZXNlIHBhcnRzIGFyZSBjb25jYXRlbmF0ZWQuCitmaWxlKE1BS0VfRElSRUNUT1JZICIke0NNQUtFX0JJTkFSWV9ESVJ9L0dvb2dsZVRlc3RYTUxTcGVjaWFsL2Nhc2VzLmNhc2UiKQorCithZGRfZXhlY3V0YWJsZSh4bWxfb3V0cHV0IHhtbF9vdXRwdXQuY3BwKQorZ3Rlc3RfZGlzY292ZXJfdGVzdHMoCisgIHhtbF9vdXRwdXQKKyAgWE1MX09VVFBVVF9ESVIgJHtDTUFLRV9CSU5BUllfRElSfQorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAwZmE0ZTJhLi41MzBjOGFiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMSw2ICsxLDYgQEAKIGluY2x1ZGUoUnVuQ01ha2UpCiAKLWZ1bmN0aW9uKHJ1bl9Hb29nbGVUZXN0KQorZnVuY3Rpb24ocnVuX0dvb2dsZVRlc3QgRElTQ09WRVJZX01PREUpCiAgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCiAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9Hb29nbGVUZXN0LWJ1aWxkKQogICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQpAQCAtMTAsNyArMTAsNyBAQAogICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQogICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQogCi0gIHJ1bl9jbWFrZShHb29nbGVUZXN0KQorICBydW5fY21ha2Vfd2l0aF9vcHRpb25zKEdvb2dsZVRlc3QgLURDTUFLRV9HVEVTVF9ESVNDT1ZFUl9URVNUU19ESVNDT1ZFUllfTU9ERT0ke0RJU0NPVkVSWV9NT0RFfSkKIAogICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LWJ1aWxkCiAgICAgJHtDTUFLRV9DT01NQU5EfQpAQCAtMjYsMTUgKzI2LDYgQEAKICAgICAtLXRhcmdldCBwcm9wZXJ0eV90aW1lb3V0X3Rlc3QKICAgKQogCi0gIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAxKQotICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0Ci0gICAgJHtDTUFLRV9DT01NQU5EfQotICAgIC0tYnVpbGQgLgotICAgIC0tY29uZmlnIERlYnVnCi0gICAgLS10YXJnZXQgZGlzY292ZXJ5X3RpbWVvdXRfdGVzdAotICApCi0gIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAwKQotCiAgIHJ1bl9jbWFrZV9jb21tYW5kKEdvb2dsZVRlc3QtdGVzdDEKICAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9CiAgICAgLUMgRGVidWcKQEAgLTY5LDYgKzYwLDEzMCBAQAogICAgIC1SIHByb3BlcnR5X3RpbWVvdXRcXC5jYXNlX3dpdGhfZGlzY292ZXJ5CiAgICAgLS1uby1sYWJlbC1zdW1tYXJ5CiAgICkKKworICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LWJ1aWxkCisgICAgJHtDTUFLRV9DT01NQU5EfQorICAgIC0tYnVpbGQgLgorICAgIC0tY29uZmlnIERlYnVnCisgICAgLS10YXJnZXQgc2tpcF90ZXN0CisgICkKKworICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LXNraXAtdGVzdAorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KKyAgICAtQyBEZWJ1ZworICAgIC1SIHNraXBfdGVzdAorICAgIC0tbm8tbGFiZWwtc3VtbWFyeQorICApCiBlbmRmdW5jdGlvbigpCiAKLXJ1bl9Hb29nbGVUZXN0KCkKK2Z1bmN0aW9uKHJ1bl9Hb29nbGVUZXN0WE1MIERJU0NPVkVSWV9NT0RFKQorICAjIFVzZSBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciBhIGZldyB0ZXN0cyB3aXRob3V0IGNsZWFuaW5nLgorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vR29vZ2xlVGVzdFhNTC1idWlsZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgaWYoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNQUtFX0JVSUxEX1RZUEU9RGVidWcpCisgIGVuZGlmKCkKKyAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKyAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKKworICBydW5fY21ha2Vfd2l0aF9vcHRpb25zKEdvb2dsZVRlc3RYTUwgLURDTUFLRV9HVEVTVF9ESVNDT1ZFUl9URVNUU19ESVNDT1ZFUllfTU9ERT0ke0RJU0NPVkVSWV9NT0RFfSkKKworICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0WE1MLWRpc2NvdmVyeQorICAke0NNQUtFX0NPTU1BTkR9CisgIC0tYnVpbGQgLgorICAtLWNvbmZpZyBEZWJ1ZworICAtLXRhcmdldCB4bWxfb3V0cHV0CisgICkKKworICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0WE1MLXJlc3VsdAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9CisgIC1DIERlYnVnCisgIC1SIEdvb2dsZVRlc3RYTUwKKyAgLS1uby1sYWJlbC1zdW1tYXJ5CisgICkKKworICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0WE1MLXNwZWNpYWwtcmVzdWx0CisgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KKyAgLUMgRGVidWcKKyAgLVIgR29vZ2xlVGVzdFhNTFNwZWNpYWwKKyAgLS1uby1sYWJlbC1zdW1tYXJ5CisgICkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24ocnVuX0dvb2dsZVRlc3RfZGlzY292ZXJ5X3RpbWVvdXQgRElTQ09WRVJZX01PREUpCisgICMgVXNlIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGEgZmV3IHRlc3RzIHdpdGhvdXQgY2xlYW5pbmcuCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9Hb29nbGVUZXN0LWRpc2NvdmVyeS10aW1lb3V0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBpZihOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZykKKyAgZW5kaWYoKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorCisgIHJ1bl9jbWFrZV93aXRoX29wdGlvbnMoR29vZ2xlVGVzdERpc2NvdmVyeVRpbWVvdXQgLURESVNDT1ZFUllfTU9ERT0ke0RJU0NPVkVSWV9NT0RFfSkKKworICBzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdC1kaXNjb3ZlcnktJHtESVNDT1ZFUllfTU9ERX0tdGltZW91dC1idWlsZAorICAgICR7Q01BS0VfQ09NTUFORH0KKyAgICAtLWJ1aWxkIC4KKyAgICAtLWNvbmZpZyBEZWJ1ZworICAgIC0tdGFyZ2V0IGRpc2NvdmVyeV90aW1lb3V0X3Rlc3QKKyAgKQorICBzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgMCkKKworICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LWRpc2NvdmVyeS0ke0RJU0NPVkVSWV9NT0RFfS10aW1lb3V0LXRlc3QKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9CisgICAgLUMgRGVidWcKKyAgICAtUiBkaXNjb3ZlcnlfdGltZW91dF90ZXN0CisgICAgLS1uby1sYWJlbC1zdW1hcnkKKyAgKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihydW5fR29vZ2xlVGVzdF9kaXNjb3ZlcnlfbXVsdGlfY29uZmlnKQorICAjIFVzZSBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciBhIGZldyB0ZXN0cyB3aXRob3V0IGNsZWFuaW5nLgorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vR29vZ2xlVGVzdC1kaXNjb3ZlcnktbXVsdGktY29uZmlnKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorCisgIHJ1bl9jbWFrZShHb29nbGVUZXN0RGlzY292ZXJ5TXVsdGlDb25maWcpCisKKyAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdC1idWlsZC1yZWxlYXNlCisgICAgJHtDTUFLRV9DT01NQU5EfQorICAgIC0tYnVpbGQgLgorICAgIC0tY29uZmlnIFJlbGVhc2UKKyAgICAtLXRhcmdldCBjb25maWd1cmF0aW9uX2d0ZXN0CisgICkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoR29vZ2xlVGVzdC1idWlsZC1kZWJ1ZworICAgICR7Q01BS0VfQ09NTUFORH0KKyAgICAtLWJ1aWxkIC4KKyAgICAtLWNvbmZpZyBEZWJ1ZworICAgIC0tdGFyZ2V0IGNvbmZpZ3VyYXRpb25fZ3Rlc3QKKyAgKQorICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LWNvbmZpZ3VyYXRpb24tcmVsZWFzZQorICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0KKyAgICAtQyBSZWxlYXNlCisgICAgLUwgQ09ORklHCisgICAgLU4KKyAgKQorICBydW5fY21ha2VfY29tbWFuZChHb29nbGVUZXN0LWNvbmZpZ3VyYXRpb24tZGVidWcKKyAgICAke0NNQUtFX0NURVNUX0NPTU1BTkR9CisgICAgLUMgRGVidWcKKyAgICAtTCBDT05GSUcKKyAgICAtTgorICApCisKK2VuZGZ1bmN0aW9uKCkKKworZm9yZWFjaChESVNDT1ZFUllfTU9ERSBQT1NUX0JVSUxEIFBSRV9URVNUKQorICBtZXNzYWdlKCJUZXN0aW5nICR7RElTQ09WRVJZX01PREV9IGRpc2NvdmVyeSBtb2RlIHZpYSBDTUFLRV9HVEVTVF9ESVNDT1ZFUl9URVNUU19ESVNDT1ZFUllfTU9ERSBnbG9iYWwgb3ZlcnJpZGUuLi4iKQorICBydW5fR29vZ2xlVGVzdCgke0RJU0NPVkVSWV9NT0RFfSkKKyAgcnVuX0dvb2dsZVRlc3RYTUwoJHtESVNDT1ZFUllfTU9ERX0pCisgIG1lc3NhZ2UoIlRlc3RpbmcgJHtESVNDT1ZFUllfTU9ERX0gZGlzY292ZXJ5IG1vZGUgdmlhIERJU0NPVkVSWV9NT0RFIG9wdGlvbi4uLiIpCisgIHJ1bl9Hb29nbGVUZXN0X2Rpc2NvdmVyeV90aW1lb3V0KCR7RElTQ09WRVJZX01PREV9KQorZW5kZm9yZWFjaCgpCisKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgIG1lc3NhZ2UoIlRlc3RpbmcgUFJFX1RFU1QgZGlzY292ZXJ5IG11bHRpIGNvbmZpZ3VyYXRpb24uLi4iKQorICBydW5fR29vZ2xlVGVzdF9kaXNjb3ZlcnlfbXVsdGlfY29uZmlnKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvY29uZmlndXJhdGlvbl9ndGVzdC5jcHAgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L2NvbmZpZ3VyYXRpb25fZ3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYmIxMzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L2NvbmZpZ3VyYXRpb25fZ3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgLy8gTm90ZTogR29vZ2xlVGVzdC5jbWFrZSBkb2Vzbid0IGFjdHVhbGx5IGRlcGVuZCBvbiBHb29nbGUgVGVzdCBhcyBzdWNoOworICAvLyBpdCBvbmx5IHJlcXVpcmVzIHRoYXQgd2UgcHJvZHVjZXMgb3V0cHV0IGluIHRoZSBleHBlY3RlZCBmb3JtYXQgd2hlbgorICAvLyBpbnZva2VkIHdpdGggLS1ndGVzdF9saXN0X3Rlc3RzLiBUaHVzLCB3ZSBmYWtlIHRoYXQgaGVyZS4gVGhpcyBhbGxvd3MgdXMKKyAgLy8gdG8gdGVzdCB0aGUgbW9kdWxlIHdpdGhvdXQgYWN0dWFsbHkgbmVlZGluZyBHb29nbGUgVGVzdC4KKyAgaWYgKGFyZ2MgPiAxICYmIHN0ZDo6c3RyaW5nKGFyZ3ZbMV0pID09ICItLWd0ZXN0X2xpc3RfdGVzdHMiKSB7CisgICAgc3RkOjpjb3V0IDw8ICJjb25maWd1cmF0aW9uLiIgPDwgc3RkOjplbmRsOworI2lmZGVmIERFQlVHCisgICAgc3RkOjpjb3V0IDw8ICIgIERJU0FCTEVEX2Nhc2VfcmVsZWFzZSIgPDwgc3RkOjplbmRsOworICAgIHN0ZDo6Y291dCA8PCAiICBjYXNlX2RlYnVnIiA8PCBzdGQ6OmVuZGw7CisjZWxzZQorICAgIHN0ZDo6Y291dCA8PCAiICBjYXNlX3JlbGVhc2UiIDw8IHN0ZDo6ZW5kbDsKKyAgICBzdGQ6OmNvdXQgPDwgIiAgRElTQUJMRURfY2FzZV9kZWJ1ZyIgPDwgc3RkOjplbmRsOworI2VuZGlmCisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvZmFrZV9ndGVzdC5jcHAgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L2Zha2VfZ3Rlc3QuY3BwCmluZGV4IGYxYmQ3ZWYuLmE4MTI3YmYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvZmFrZV9ndGVzdC5jcHAKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9mYWtlX2d0ZXN0LmNwcApAQCAtMjEsNiArMjEsMTAgQEAKICAgICBzdGQ6OmNvdXQgPDwgInZhbHVlL3Rlc3QuIiA8PCBzdGQ6OmVuZGw7CiAgICAgc3RkOjpjb3V0IDw8ICIgIGNhc2UvMCAgIyBHZXRQYXJhbSgpID0gMSIgPDwgc3RkOjplbmRsOwogICAgIHN0ZDo6Y291dCA8PCAiICBjYXNlLzEgICMgR2V0UGFyYW0oKSA9IFwiZm9vXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICBzdGQ6OmNvdXQgPDwgInBhcmFtL3NwZWNpYWwuIiA8PCBzdGQ6OmVuZGw7CisgICAgc3RkOjpjb3V0IDw8ICIgIGNhc2UvMCAgIyBHZXRQYXJhbSgpID0gXCJzZW1pY29sb247XCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZS8xICAjIEdldFBhcmFtKCkgPSBcImJhY2tzbGFzaFxcXCIiIDw8IHN0ZDo6ZW5kbDsKKyAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZS8yICAjIEdldFBhcmFtKCkgPSBcIiR7dmFyfVwiIiA8PCBzdGQ6OmVuZGw7CiAgICAgcmV0dXJuIDA7CiAgIH0KIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9za2lwX3Rlc3QuY3BwIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC9za2lwX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYzlmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3NraXBfdGVzdC5jcHAKQEAgLTAsMCArMSwxOCBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAvLyBOb3RlOiBHb29nbGVUZXN0LmNtYWtlIGRvZXNuJ3QgYWN0dWFsbHkgZGVwZW5kIG9uIEdvb2dsZSBUZXN0IGFzIHN1Y2g7CisgIC8vIGl0IG9ubHkgcmVxdWlyZXMgdGhhdCB3ZSBwcm9kdWNlcyBvdXRwdXQgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdCB3aGVuCisgIC8vIGludm9rZWQgd2l0aCAtLWd0ZXN0X2xpc3RfdGVzdHMuIFRodXMsIHdlIGZha2UgdGhhdCBoZXJlLiBUaGlzIGFsbG93cyB1cworICAvLyB0byB0ZXN0IHRoZSBtb2R1bGUgd2l0aG91dCBhY3R1YWxseSBuZWVkaW5nIEdvb2dsZSBUZXN0LgorICBpZiAoYXJnYyA+IDEgJiYgc3RkOjpzdHJpbmcoYXJndlsxXSkgPT0gIi0tZ3Rlc3RfbGlzdF90ZXN0cyIpIHsKKyAgICBzdGQ6OmNvdXQgPDwgInNraXBfdGVzdC4iIDw8IHN0ZDo6ZW5kbDsKKyAgICBzdGQ6OmNvdXQgPDwgIiAgdGVzdDEiIDw8IHN0ZDo6ZW5kbDsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN0ZDo6Y291dCA8PCAiWyAgU0tJUFBFRCBdIHNraXBfdGVzdC50ZXN0MSIgPDwgc3RkOjplbmRsOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvdGltZW91dF90ZXN0LmNwcCBiL1Rlc3RzL1J1bkNNYWtlL0dvb2dsZVRlc3QvdGltZW91dF90ZXN0LmNwcAppbmRleCBiOGFkMDU1Li41NTA2MjY5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3RpbWVvdXRfdGVzdC5jcHAKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC90aW1lb3V0X3Rlc3QuY3BwCkBAIC00LDkgKzQsMTAgQEAKICMgIGluY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CiAKKyNpbmNsdWRlIDxzdGRpby5oPgorCiB2b2lkIHNsZWVwRm9yKHVuc2lnbmVkIHNlY29uZHMpCiB7CiAjaWYgZGVmaW5lZChfV0lOMzIpCkBAIC0yMyw4ICsyNCw4IEBACiAgIC8vIGludm9rZWQgd2l0aCAtLWd0ZXN0X2xpc3RfdGVzdHMuIFRodXMsIHdlIGZha2UgdGhhdCBoZXJlLiBUaGlzIGFsbG93cyB1cwogICAvLyB0byB0ZXN0IHRoZSBtb2R1bGUgd2l0aG91dCBhY3R1YWxseSBuZWVkaW5nIEdvb2dsZSBUZXN0LgogICBpZiAoYXJnYyA+IDEgJiYgc3RkOjpzdHJpbmcoYXJndlsxXSkgPT0gIi0tZ3Rlc3RfbGlzdF90ZXN0cyIpIHsKLSAgICBzdGQ6OmNvdXQgPDwgInRpbWVvdXQuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgIGNhc2UiIDw8IHN0ZDo6ZW5kbDsKKyAgICBwcmludGYoInRpbWVvdXQuXG4gIGNhc2VcbiIpOworICAgIGZmbHVzaChzdGRvdXQpOwogI2lmZGVmIGRpc2NvdmVyeVNsZWVwU2VjCiAgICAgc2xlZXBGb3IoZGlzY292ZXJ5U2xlZXBTZWMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Hb29nbGVUZXN0L3htbF9vdXRwdXQuY3BwIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC94bWxfb3V0cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmYwZDAyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR29vZ2xlVGVzdC94bWxfb3V0cHV0LmNwcApAQCAtMCwwICsxLDM3IEBACisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgLy8gTm90ZTogR29vZ2xlVGVzdFhNTC5jbWFrZSBkb2Vzbid0IGFjdHVhbGx5IGRlcGVuZCBvbiBHb29nbGUgVGVzdCBhcyBzdWNoOworICAvLyBpdCBvbmx5IG1pbWlja3MgdGhlIG91dHB1dCBmaWxlIGNyZWF0aW9uIHVzaW5nIHRoZSBwYXRoIHBhc3NlZCB0byB0aGlzCisgIC8vIHRlc3Qgd2l0aG91dCBhbnkgY29udGVudAorICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworICAgIHN0ZDo6c3RyaW5nIHBhcmFtKGFyZ3ZbaV0pOworICAgIGlmIChwYXJhbS5maW5kKCItLWd0ZXN0X2xpc3RfdGVzdHMiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgLy8gVGhpcyBhY3R1YWxseSBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHBhc3NlZCBpbiB0aGUgMm5kIHJ1bgorICAgICAgc3RkOjpjb3V0IDw8ICJHb29nbGVUZXN0WE1MLiIgPDwgc3RkOjplbmRsOworICAgICAgc3RkOjpjb3V0IDw8ICIgIEZvbyIgPDwgc3RkOjplbmRsOworICAgICAgLy8gV2hlbiBjaGFuZ2luZyB0aGVzZSBuYW1lcywgbWFrZSBzdXJlIHRvIGFkYXB0IHRoZSBmb2xkZXIgY3JlYXRpb24KKyAgICAgIC8vIGluIEdvb2dsZVRlc3RYTUwuY21ha2UKKyAgICAgIHN0ZDo6Y291dCA8PCAiR29vZ2xlVGVzdFhNTFNwZWNpYWwvY2FzZXMuIiA8PCBzdGQ6OmVuZGw7CisgICAgICBzdGQ6OmNvdXQgPDwgIiAgY2FzZS8wICAjIEdldFBhcmFtKCkgPSA0MiIgPDwgc3RkOjplbmRsOworICAgICAgc3RkOjpjb3V0IDw8ICIgIGNhc2UvMSAgIyBHZXRQYXJhbSgpID0gXCJzdHJpbmdcIiIgPDwgc3RkOjplbmRsOworICAgICAgc3RkOjpjb3V0IDw8ICIgIGNhc2UvMiAgIyBHZXRQYXJhbSgpID0gXCJwYXRoL2xpa2VcIiIgPDwgc3RkOjplbmRsOworICAgIH0gZWxzZSBpZiAocGFyYW0uZmluZCgiLS1ndGVzdF9vdXRwdXQ9eG1sOiIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHNwbGl0ID0gcGFyYW0uZmluZCgiOiIpOworICAgICAgc3RkOjpzdHJpbmcgZmlsZXBhdGggPSBwYXJhbS5zdWJzdHIoc3BsaXQgKyAxKTsKKyAgICAgIC8vIFRoZSBmdWxsIGZpbGUgcGF0aCBpcyBwYXNzZWQKKyAgICAgIHN0ZDo6b2ZzdHJlYW0gb3N0cm0oZmlsZXBhdGguY19zdHIoKSwgc3RkOjppb3M6OmJpbmFyeSk7CisgICAgICBpZiAoIW9zdHJtKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAiIDw8IGZpbGVwYXRoLmNfc3RyKCkKKyAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBvc3RybSA8PCAiLS1ndGVzdF9vdXRwdXQ9eG1sOiBtb2NrdXAgZmlsZVxuIjsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L0NNYWtlR3JhcGhWaXpPcHRpb25zLmNtYWtlLmluIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovQ01ha2VHcmFwaFZpek9wdGlvbnMuY21ha2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExYzNkMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L0NNYWtlR3JhcGhWaXpPcHRpb25zLmNtYWtlLmluCkBAIC0wLDAgKzEgQEAKK3NldCgke2dyYXBodml6X29wdGlvbl9uYW1lfSAke2dyYXBodml6X29wdGlvbl92YWx1ZX0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyM2Q0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE1KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IEMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9HcmFwaHZpelRlc3RQcm9qZWN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovR3JhcGh2aXpUZXN0UHJvamVjdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U2YjVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovR3JhcGh2aXpUZXN0UHJvamVjdC5jbWFrZQpAQCAtMCwwICsxLDY2IEBACisjIEZvciB0aGUgc2FrZSBvZiBjbGFyaXR5LCB3ZSBtb2RlbCBhIGR1bW15IGJ1dCByZWFsaXN0aWMgYXBwbGljYXRpb246CisjCisjICAgLSBXZSBoYXZlIHR3byBleGVjdXRhYmxlcywgZm9yIGEgY29uc29sZSBhbmQgYSBHVUkgdmFyaWFudCBvZiB0aGF0IGFwcAorIyAgIC0gQm90aCBleGVjdXRhYmxlcyBkZXBlbmQgb24gYSBDb3JlTGlicmFyeSAoU1RBVElDKQorIyAgIC0gVGhlIEdVSSBleGVjdXRhYmxlIGFsc28gZGVwZW5kcyBvbiBhIEdyYXBoaWNMaWJyYXJ5IChTSEFSRUQpCisjICAgLSBXZSBidWlsZCB0d28gR3JhcGhpY0RyaXZlcnMgYXMgTU9EVUxFcworIyAgIC0gVGhlIENvcmVMaWJyYXJ5IGRlcGVuZHMgb24gYSB0aGlyZC1wYXJ0eSBoZWFkZXItb25seSAoSU5URVJGQUNFKQorIyAgICAgR29vZnlMb2dnaW5nTGlicmFyeSwgd2hpY2ggd2UgcmVuYW1lIHVzaW5nIGFuIEFMSUFTIGZvciBvYnZpb3VzIHJlYXNvbnMKKyMgICAtIEFsbCBsaWJyYXJ5IGRlcGVuZCBvbiBhIGNvbW1vbiBJTlRFUkZBQ0UgbGlicmFyeSBob2xkaW5nIGNvbXBpbGVyIGZsYWdzCisjICAgLSBXZSBoYXZlIGEgY3VzdG9tIHRhcmdldCB0byBnZW5lcmF0ZSBhIG1hbiBwYWdlCisjICAgLSBTb21lb25lIGhhcyBhZGRlZCBhbiBVTktOT1dOLCBJTVBPUlRFRCBjcnlwdG8gbWluaW5nIGxpYnJhcnkhCisjICAgLSBXZSBoYXZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIHR3byBsaWJyYXJpZXMKKworYWRkX3N1YmRpcmVjdG9yeSh0ZXN0X3Byb2plY3QvdGhpcmRfcGFydHlfcHJvamVjdCkKKworYWRkX2xpYnJhcnkoU2VyaW91c0xvZ2dpbmdMaWJyYXJ5IEFMSUFTIEdvb2Z5TG9nZ2luZ0xpYnJhcnkpCithZGRfbGlicmFyeShUaGVCZXN0TG9nZ2luZ0xpYnJhcnkgQUxJQVMgR29vZnlMb2dnaW5nTGlicmFyeSkKKworYWRkX2xpYnJhcnkoQ29tcGlsZXJGbGFncyBJTlRFUkZBQ0UpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhDb21waWxlckZsYWdzIElOVEVSRkFDRSAtLW9wdGltaXplPUVWRVJZVEhJTkcpCisKK2FkZF9saWJyYXJ5KENvcmVMaWJyYXJ5IFNUQVRJQyB0ZXN0X3Byb2plY3QvY29yZV9saWJyYXJ5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoQ29yZUxpYnJhcnkgUFVCTElDIENvbXBpbGVyRmxhZ3MpCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb3JlTGlicmFyeSBQUklWQVRFIFNlcmlvdXNMb2dnaW5nTGlicmFyeSkKKworYWRkX2xpYnJhcnkoU3lzdGVtTGlicmFyeSBTVEFUSUMgdGVzdF9wcm9qZWN0L3N5c3RlbV9saWJyYXJ5LmMpCisKKyMgQ3JlYXRlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS4KKyMgU2VlIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL2lzc3Vlcy8yMDcyMAordGFyZ2V0X2xpbmtfbGlicmFyaWVzKENvcmVMaWJyYXJ5IFBSSVZBVEUgU3lzdGVtTGlicmFyeSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTeXN0ZW1MaWJyYXJ5IFBSSVZBVEUgQ29yZUxpYnJhcnkpCisKK2FkZF9saWJyYXJ5KEdyYXBoaWNMaWJyYXJ5T2JqZWN0cyBPQkpFQ1QgdGVzdF9wcm9qZWN0L2dyYXBoaWNfbGlicmFyeS5jKQorCithZGRfbGlicmFyeShHcmFwaGljTGlicmFyeSBTSEFSRUQpCit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0xpYnJhcnkgUFVCTElDIENvbXBpbGVyRmxhZ3MpCit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0xpYnJhcnkgUFJJVkFURSBHcmFwaGljTGlicmFyeU9iamVjdHMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0xpYnJhcnkgUFJJVkFURSBDb3JlTGlicmFyeSkKKworIyBUZXN0IHRhcmdldCBsYWJlbHMgd2l0aCBxdW90ZXMgaW4gdGhlbTsgdGhleSBzaG91bGQgYmUgZXNjYXBlZCBpbiB0aGUgZG90CisjIGZpbGUuCisjIFNlZSBodHRwczovL2dpdGxhYi5raXR3YXJlLmNvbS9jbWFrZS9jbWFrZS8tL2lzc3Vlcy8xOTc0NgordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEdyYXBoaWNMaWJyYXJ5IFBSSVZBVEUgIlwiLWxtXCIiKQorCisjIE5vdGU6IG1vZHVsZXMgYXJlIHN0YW5kYWxvbmUsIGJ1dCBjYW4gaGF2ZSBkZXBlbmRlbmNpZXMuCithZGRfbGlicmFyeShHcmFwaGljRHJpdmVyT3BlbkdMIE1PRFVMRSB0ZXN0X3Byb2plY3QvbW9kdWxlLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0RyaXZlck9wZW5HTCBQUklWQVRFIENvbXBpbGVyRmxhZ3MpCit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0RyaXZlck9wZW5HTCBQUklWQVRFIENvcmVMaWJyYXJ5KQorYWRkX2xpYnJhcnkoR3JhcGhpY0RyaXZlclZ1bGthbiBNT0RVTEUgdGVzdF9wcm9qZWN0L21vZHVsZS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEdyYXBoaWNEcml2ZXJWdWxrYW4gUFJJVkFURSBDb21waWxlckZsYWdzKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEdyYXBoaWNEcml2ZXJWdWxrYW4gUFJJVkFURSBDb3JlTGlicmFyeSkKKworYWRkX2V4ZWN1dGFibGUoR3JhcGhpY0FwcGxpY2F0aW9uIHRlc3RfcHJvamVjdC9tYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoR3JhcGhpY0FwcGxpY2F0aW9uIENvcmVMaWJyYXJ5KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKEdyYXBoaWNBcHBsaWNhdGlvbiBHcmFwaGljTGlicmFyeSkKKworYWRkX2V4ZWN1dGFibGUoQ29uc29sZUFwcGxpY2F0aW9uIHRlc3RfcHJvamVjdC9tYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoQ29uc29sZUFwcGxpY2F0aW9uIENvcmVMaWJyYXJ5KQorCisjIE5vIG9uZSB3aWxsIGV2ZXIgbm90aWNlLi4uCithZGRfbGlicmFyeShDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkgVU5LTk9XTiBJTVBPUlRFRCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhDb25zb2xlQXBwbGljYXRpb24gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5KQorCithZGRfY3VzdG9tX3RhcmdldChHZW5lcmF0ZU1hblBhZ2UgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC0tdmVyc2lvbikKK2FkZF9kZXBlbmRlbmNpZXMoQ29uc29sZUFwcGxpY2F0aW9uIEdlbmVyYXRlTWFuUGFnZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGNlYTEwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsODIgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2ZpbmRfcHJvZ3JhbShET1QgZG90KQorCisjIFNldCB0byBUUlVFIHRvIHJlLWdlbmVyYXRlIHRoZSByZWZlcmVuY2UgZmlsZXMgZnJvbSB0aGUgYWN0dWFsIG91dHB1dHMuCisjIE1ha2Ugc3VyZSB5b3UgdmVyaWZ5IHRoZW0hCitzZXQoUkVQTEFDRV9SRUZFUkVOQ0VfRklMRVMgRkFMU0UpCisKKyMgU2V0IHRvIFRSVUUgdG8gZ2VuZXJhdGUgUE5HIGZpbGVzIGZyb20gdGhlIC5kb3QgZmlsZXMsIHVzaW5nIEdyYXBodml6IChkb3QpLgorIyBEaXNhYmxlZCBieSBkZWZhdWx0IChzbyB3ZSBkb24ndCBkZXBlbmQgb24gR3JhcGh2aXopIGJ1dCB1c2VmdWwgZHVyaW5nCisjIGRlYnVnZ2luZy4KK3NldChHRU5FUkFURV9QTkdfRklMRVMgRkFMU0UpCisKKyMgMS4gR2VuZXJhdGUgdGhlIEdyYXBodml6ICguZG90KSBmaWxlIGZvciBhIHNhbXBsZSBwcm9qZWN0IHRoYXQgY292ZXJzIG1vc3QKKyMgICAgKGlkZWFsbHksIGFsbCkgdGFyZ2V0IGFuZCBkZXBlbmRlbmN5IHR5cGVzOworIyAyLiBDb21wYXJlIHRoYXQgZ2VuZXJhdGVkIGZpbGUgd2l0aCBhIHJlZmVyZW5jZSBmaWxlLgorZnVuY3Rpb24ocnVuX3Rlc3QgdGVzdF9uYW1lIGdyYXBodml6X29wdGlvbl9uYW1lIGdyYXBodml6X29wdGlvbl92YWx1ZSkKKworICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHt0ZXN0X25hbWV9KQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorCisgICMgU2V0ICR7Z3JhcGh2aXpfb3B0aW9uX25hbWV9IHRvICR7Z3JhcGh2aXpfb3B0aW9uX3ZhbHVlfS4KKyAgaWYoZ3JhcGh2aXpfb3B0aW9uX25hbWUpCisgICAgY29uZmlndXJlX2ZpbGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DTWFrZUdyYXBoVml6T3B0aW9ucy5jbWFrZS5pbgorICAgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlR3JhcGhWaXpPcHRpb25zLmNtYWtlCisgICAgKQorICBlbmRpZigpCisKKyAgcnVuX2NtYWtlKEdyYXBodml6VGVzdFByb2plY3QpCisKKyAgaWYoUkVQTEFDRV9SRUZFUkVOQ0VfRklMRVMpCisgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0X25hbWV9LWNyZWF0ZV9kb3RfZmlsZXMgJHtDTUFLRV9DT01NQU5EfQorICAgICAgLS1ncmFwaHZpej1nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QgLgorICAgICkKKworICAgIHJ1bl9jbWFrZV9jb21tYW5kKCR7dGVzdF9uYW1lfS1jb3B5X2RvdF9maWxlcworICAgICAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5CisgICAgICAgIGdlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLmRvdAorICAgICAgICAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF8ke3Rlc3RfbmFtZX0uZG90CisgICAgKQorICBlbmRpZigpCisKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0X25hbWV9ICR7Q01BS0VfQ09NTUFORH0KKyAgICAtLWdyYXBodml6PWdlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLmRvdCAuCisgICkKKworICBpZihHRU5FUkFURV9QTkdfRklMRVMpCisgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0X25hbWV9LWdlbmVyYXRlX3BuZ19maWxlCisgICAgICAke0RPVH0gLVRwbmcgLW8gJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLnBuZworICAgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLmRvdAorICAgICkKKyAgZW5kaWYoKQorCitlbmRmdW5jdGlvbigpCisKK3J1bl90ZXN0KGRlZmF1bHRfb3B0aW9ucyAiIiAiIikKKworcnVuX3Rlc3Qoc2V0X2dyYXBoX25hbWUgR1JBUEhWSVpfR1JBUEhfTkFNRSAiXCJDTWFrZSBQcm9qZWN0IERlcGVuZGVuY2llc1wiIikKK3J1bl90ZXN0KHNldF9ncmFwaF9oZWFkZXIgR1JBUEhWSVpfR1JBUEhfSEVBREVSCisgICJcIm5vZGUgW1xuICBmb250c2l6ZSA9IFxcXCIxNlxcXCJcbl07XCIiKQorcnVuX3Rlc3Qoc2V0X25vZGVfcHJlZml4IEdSQVBIVklaX05PREVfUFJFRklYICJwb2ludCIpCisKK3J1bl90ZXN0KG5vX2V4ZWN1dGFibGVzIEdSQVBIVklaX0VYRUNVVEFCTEVTIEZBTFNFKQorCitydW5fdGVzdChub19zdGF0aWNfbGlicyBHUkFQSFZJWl9TVEFUSUNfTElCUyBGQUxTRSkKK3J1bl90ZXN0KG5vX3NoYXJlZF9saWJzIEdSQVBIVklaX1NIQVJFRF9MSUJTIEZBTFNFKQorcnVuX3Rlc3Qobm9fbW9kdWxlX2xpYnMgR1JBUEhWSVpfTU9EVUxFX0xJQlMgRkFMU0UpCisKK3J1bl90ZXN0KG5vX2ludGVyZmFjZV9saWJzIEdSQVBIVklaX0lOVEVSRkFDRV9MSUJTIEZBTFNFKQorcnVuX3Rlc3Qobm9fb2JqZWN0X2xpYnMgR1JBUEhWSVpfT0JKRUNUX0xJQlMgRkFMU0UpCitydW5fdGVzdChub191bmtub3duX2xpYnMgR1JBUEhWSVpfVU5LTk9XTl9MSUJTIEZBTFNFKQorCitydW5fdGVzdChub19leHRlcm5hbF9saWJzIEdSQVBIVklaX0VYVEVSTkFMX0xJQlMgRkFMU0UpCisKK3J1bl90ZXN0KGN1c3RvbV90YXJnZXRzIEdSQVBIVklaX0NVU1RPTV9UQVJHRVRTIFRSVUUpCisKK3J1bl90ZXN0KG5vX2dyYXBoaWNfbGlicyBHUkFQSFZJWl9JR05PUkVfVEFSR0VUUyAiR3JhcGhpYyIpCisKK3J1bl90ZXN0KG5vX3Blcl90YXJnZXRfZmlsZXMgR1JBUEhWSVpfR0VORVJBVEVfUEVSX1RBUkdFVCBGQUxTRSkKK3J1bl90ZXN0KG5vX2RlcGVuZGVyc19maWxlcyBHUkFQSFZJWl9HRU5FUkFURV9ERVBFTkRFUlMgRkFMU0UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9kZWZhdWx0X29wdGlvbnMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9kZWZhdWx0X29wdGlvbnMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0ZTI3NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2RlZmF1bHRfb3B0aW9ucy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgICAgICR7UnVuQ01ha2VfVEVTVF9TT1VSQ0VfRElSfS9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfZGVmYXVsdF9vcHRpb25zLmRvdAorICAgICAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgICAgICR7UnVuQ01ha2VfVEVTVF9TT1VSQ0VfRElSfS9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfdGFyZ2V0X2RlcGVuZGVuY2llcy5kb3QuR3JhcGhpY0FwcGxpY2F0aW9uCisgICAgICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QuR3JhcGhpY0FwcGxpY2F0aW9uKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgICAgICR7UnVuQ01ha2VfVEVTVF9TT1VSQ0VfRElSfS9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfdGFyZ2V0X2RlcGVuZGVycy5kb3QuQ29tcGlsZXJGbGFncy5kZXBlbmRlcnMKKyAgICAgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLmRvdC5Db21waWxlckZsYWdzLmRlcGVuZGVycykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9jdXN0b21fdGFyZ2V0cy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfY3VzdG9tX3RhcmdldHMuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDg4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfY3VzdG9tX3RhcmdldHMuZG90CkBAIC0wLDAgKzEsNTUgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR2VuZXJhdGVNYW5QYWdlIiwgc2hhcGUgPSBib3ggXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNiIgIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBHZW5lcmF0ZU1hblBhZ2UKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlOSIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlOCIgLT4gIm5vZGU5IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTgiIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTgiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTgiIC0+ICJub2RlMTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKKyAgICAibm9kZTciIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlMTEiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTEiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTEyIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEyIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEyIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfZGVmYXVsdF9vcHRpb25zLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9kZWZhdWx0X29wdGlvbnMuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZjJmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfZGVmYXVsdF9vcHRpb25zLmRvdApAQCAtMCwwICsxLDUzIEBACitkaWdyYXBoICJHcmFwaHZpelRlc3RQcm9qZWN0IiB7Citub2RlIFsKKyAgZm9udHNpemUgPSAiMTIiCitdOworc3ViZ3JhcGggY2x1c3RlckxlZ2VuZCB7CisgIGxhYmVsID0gIkxlZ2VuZCI7CisgIGNvbG9yID0gYmxhY2s7CisgIGVkZ2UgWyBzdHlsZSA9IGludmlzIF07CisgIGxlZ2VuZE5vZGUwIFsgbGFiZWwgPSAiRXhlY3V0YWJsZSIsIHNoYXBlID0gZWdnIF07CisgIGxlZ2VuZE5vZGUxIFsgbGFiZWwgPSAiU3RhdGljIExpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTIgWyBsYWJlbCA9ICJTaGFyZWQgTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlMyBbIGxhYmVsID0gIk1vZHVsZSBMaWJyYXJ5Iiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIExpYnJhcnkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgIGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiT2JqZWN0IExpYnJhcnkiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgbGVnZW5kTm9kZTYgWyBsYWJlbCA9ICJVbmtub3duIExpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgIGxlZ2VuZE5vZGU3IFsgbGFiZWwgPSAiQ3VzdG9tIFRhcmdldCIsIHNoYXBlID0gYm94IF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUxIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTM7CisgIGxlZ2VuZE5vZGUxIC0+IGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIiwgc3R5bGUgPSBkYXNoZWQgXTsKKyAgbGVnZW5kTm9kZTIgLT4gbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJQcml2YXRlIiwgc3R5bGUgPSBkb3R0ZWQgXTsKKyAgbGVnZW5kTm9kZTMgLT4gbGVnZW5kTm9kZTYgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGU3OworfQorICAgICJub2RlMCIgWyBsYWJlbCA9ICJDb21waWxlckZsYWdzIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMSIgWyBsYWJlbCA9ICJDb25zb2xlQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlMiIgWyBsYWJlbCA9ICJDb3JlTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTQiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTIiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNSIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTUiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU3IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU3IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTEiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTEiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19kZXBlbmRlcnNfZmlsZXMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2RlcGVuZGVyc19maWxlcy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmMmY2NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19kZXBlbmRlcnNfZmlsZXMuZG90CkBAIC0wLDAgKzEsNTMgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlOCIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTciIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU5IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2V4ZWN1dGFibGVzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leGVjdXRhYmxlcy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YyZTAxYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leGVjdXRhYmxlcy5kb3QKQEAgLTAsMCArMSw0NyBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlMyIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUzIiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBTeXN0ZW1MaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU1IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU1IiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTUiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU4IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTgiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU5IiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZXh0ZXJuYWxfbGlicy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZXh0ZXJuYWxfbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NzVhOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19leHRlcm5hbF9saWJzLmRvdApAQCAtMCwwICsxLDQ5IEBACitkaWdyYXBoICJHcmFwaHZpelRlc3RQcm9qZWN0IiB7Citub2RlIFsKKyAgZm9udHNpemUgPSAiMTIiCitdOworc3ViZ3JhcGggY2x1c3RlckxlZ2VuZCB7CisgIGxhYmVsID0gIkxlZ2VuZCI7CisgIGNvbG9yID0gYmxhY2s7CisgIGVkZ2UgWyBzdHlsZSA9IGludmlzIF07CisgIGxlZ2VuZE5vZGUwIFsgbGFiZWwgPSAiRXhlY3V0YWJsZSIsIHNoYXBlID0gZWdnIF07CisgIGxlZ2VuZE5vZGUxIFsgbGFiZWwgPSAiU3RhdGljIExpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTIgWyBsYWJlbCA9ICJTaGFyZWQgTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlMyBbIGxhYmVsID0gIk1vZHVsZSBMaWJyYXJ5Iiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIExpYnJhcnkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgIGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiT2JqZWN0IExpYnJhcnkiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgbGVnZW5kTm9kZTYgWyBsYWJlbCA9ICJVbmtub3duIExpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgIGxlZ2VuZE5vZGU3IFsgbGFiZWwgPSAiQ3VzdG9tIFRhcmdldCIsIHNoYXBlID0gYm94IF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUxIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTM7CisgIGxlZ2VuZE5vZGUxIC0+IGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIiwgc3R5bGUgPSBkYXNoZWQgXTsKKyAgbGVnZW5kTm9kZTIgLT4gbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJQcml2YXRlIiwgc3R5bGUgPSBkb3R0ZWQgXTsKKyAgbGVnZW5kTm9kZTMgLT4gbGVnZW5kTm9kZTYgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGU3OworfQorICAgICJub2RlMCIgWyBsYWJlbCA9ICJDb21waWxlckZsYWdzIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMSIgWyBsYWJlbCA9ICJDb25zb2xlQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlMiIgWyBsYWJlbCA9ICJDb3JlTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTQiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTIiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNSIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlNSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNSIgLT4gIm5vZGU2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTkiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19ncmFwaGljX2xpYnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2dyYXBoaWNfbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0ZWUzOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19ncmFwaGljX2xpYnMuZG90CkBAIC0wLDAgKzEsMzggQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19pbnRlcmZhY2VfbGlicy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9faW50ZXJmYWNlX2xpYnMuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZWE4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9faW50ZXJmYWNlX2xpYnMuZG90CkBAIC0wLDAgKzEsNDYgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKKyAgICAibm9kZTAiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMyIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUwIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTUiIC0+ICJub2RlNiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU1IiAtPiAibm9kZTEiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTUiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNCIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIC0+ICJub2RlMSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOSIgLT4gIm5vZGUxIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX21vZHVsZV9saWJzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19tb2R1bGVfbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzZDEwYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19tb2R1bGVfbGlicy5kb3QKQEAgLTAsMCArMSw0NyBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIFsgbGFiZWwgPSAiQ29uc29sZUFwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUyIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBTeXN0ZW1MaWJyYXJ5CisgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlMSIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQorICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU3IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJub2RlNyIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNyIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07CisgICAgIm5vZGU3IiAtPiAibm9kZTkiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBHcmFwaGljTGlicmFyeU9iamVjdHMKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX29iamVjdF9saWJzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19vYmplY3RfbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4MzJhOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19vYmplY3RfbGlicy5kb3QKQEAgLTAsMCArMSw1MSBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIFsgbGFiZWwgPSAiQ29uc29sZUFwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMCIgIC8vIENvcmVMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUzIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gR29vZnlMb2dnaW5nTGlicmFyeQorICAgICJub2RlNCIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUyIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBTeXN0ZW1MaWJyYXJ5CisgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTUiIFsgbGFiZWwgPSAiQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlMSIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQorICAgICJub2RlNiIgWyBsYWJlbCA9ICJHcmFwaGljQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlNiIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU3IiAtPiAibm9kZTgiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJub2RlNyIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNyIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTkiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fcGVyX3RhcmdldF9maWxlcy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fcGVyX3RhcmdldF9maWxlcy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmMmY2NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19wZXJfdGFyZ2V0X2ZpbGVzLmRvdApAQCAtMCwwICsxLDUzIEBACitkaWdyYXBoICJHcmFwaHZpelRlc3RQcm9qZWN0IiB7Citub2RlIFsKKyAgZm9udHNpemUgPSAiMTIiCitdOworc3ViZ3JhcGggY2x1c3RlckxlZ2VuZCB7CisgIGxhYmVsID0gIkxlZ2VuZCI7CisgIGNvbG9yID0gYmxhY2s7CisgIGVkZ2UgWyBzdHlsZSA9IGludmlzIF07CisgIGxlZ2VuZE5vZGUwIFsgbGFiZWwgPSAiRXhlY3V0YWJsZSIsIHNoYXBlID0gZWdnIF07CisgIGxlZ2VuZE5vZGUxIFsgbGFiZWwgPSAiU3RhdGljIExpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTIgWyBsYWJlbCA9ICJTaGFyZWQgTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlMyBbIGxhYmVsID0gIk1vZHVsZSBMaWJyYXJ5Iiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIExpYnJhcnkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgIGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiT2JqZWN0IExpYnJhcnkiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgbGVnZW5kTm9kZTYgWyBsYWJlbCA9ICJVbmtub3duIExpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgIGxlZ2VuZE5vZGU3IFsgbGFiZWwgPSAiQ3VzdG9tIFRhcmdldCIsIHNoYXBlID0gYm94IF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUxIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTM7CisgIGxlZ2VuZE5vZGUxIC0+IGxlZ2VuZE5vZGU0IFsgbGFiZWwgPSAiSW50ZXJmYWNlIiwgc3R5bGUgPSBkYXNoZWQgXTsKKyAgbGVnZW5kTm9kZTIgLT4gbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJQcml2YXRlIiwgc3R5bGUgPSBkb3R0ZWQgXTsKKyAgbGVnZW5kTm9kZTMgLT4gbGVnZW5kTm9kZTYgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGU3OworfQorICAgICJub2RlMCIgWyBsYWJlbCA9ICJDb21waWxlckZsYWdzIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMSIgWyBsYWJlbCA9ICJDb25zb2xlQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJub2RlMiIgWyBsYWJlbCA9ICJDb3JlTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTQiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTIiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKKyAgICAibm9kZTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNSIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTUiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU3IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU3IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlOSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNiIgLT4gIm5vZGU3IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTEiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTEiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTEiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zaGFyZWRfbGlicy5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fc2hhcmVkX2xpYnMuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjdkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fc2hhcmVkX2xpYnMuZG90CkBAIC0wLDAgKzEsNDcgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTkiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlOSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU5IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3N0YXRpY19saWJzLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zdGF0aWNfbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExOTlhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub19zdGF0aWNfbGlicy5kb3QKQEAgLTAsMCArMSw0MiBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTEiIFsgbGFiZWwgPSAiQ29uc29sZUFwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMyIgWyBsYWJlbCA9ICJDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ3J5cHRvQ3VycmVuY3lNaW5pbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU2IiBbIGxhYmVsID0gIlwiLWxtXCIiLCBzaGFwZSA9IHNlcHRhZ29uIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTYiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiAiLWxtIgorICAgICJub2RlNSIgLT4gIm5vZGUwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTUiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNCIgLT4gIm5vZGU1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU4IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTgiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGU5IiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub191bmtub3duX2xpYnMuZG90IGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3Vua25vd25fbGlicy5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyNDJiYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9ub191bmtub3duX2xpYnMuZG90CkBAIC0wLDAgKzEsNTEgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkdyYXBoaWNBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGU1IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+ICItbG0iCisgICAgIm5vZGU2IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGU2IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeU9iamVjdHMiLCBzaGFwZSA9IGhleGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlOCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJub2RlNSIgLT4gIm5vZGU2IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IEdyYXBoaWNMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTkiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlOSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlclZ1bGthbiIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTAiIC0+ICJub2RlMCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMTAiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfaGVhZGVyLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfaGVhZGVyLmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjY0YWY4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ncmFwaF9oZWFkZXIuZG90CkBAIC0wLDAgKzEsNTMgQEAKK2RpZ3JhcGggIkdyYXBodml6VGVzdFByb2plY3QiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxNiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlOCIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTciIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU5IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ncmFwaF9uYW1lLmRvdCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfbmFtZS5kb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3OTMwNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfbmFtZS5kb3QKQEAgLTAsMCArMSw1MyBAQAorZGlncmFwaCAiQ01ha2UgUHJvamVjdCBEZXBlbmRlbmNpZXMiIHsKK25vZGUgWworICBmb250c2l6ZSA9ICIxMiIKK107CitzdWJncmFwaCBjbHVzdGVyTGVnZW5kIHsKKyAgbGFiZWwgPSAiTGVnZW5kIjsKKyAgY29sb3IgPSBibGFjazsKKyAgZWRnZSBbIHN0eWxlID0gaW52aXMgXTsKKyAgbGVnZW5kTm9kZTAgWyBsYWJlbCA9ICJFeGVjdXRhYmxlIiwgc2hhcGUgPSBlZ2cgXTsKKyAgbGVnZW5kTm9kZTEgWyBsYWJlbCA9ICJTdGF0aWMgTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICBsZWdlbmROb2RlMiBbIGxhYmVsID0gIlNoYXJlZCBMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUzIFsgbGFiZWwgPSAiTW9kdWxlIExpYnJhcnkiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UgTGlicmFyeSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgbGVnZW5kTm9kZTUgWyBsYWJlbCA9ICJPYmplY3QgTGlicmFyeSIsIHNoYXBlID0gaGV4YWdvbiBdOworICBsZWdlbmROb2RlNiBbIGxhYmVsID0gIlVua25vd24gTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgbGVnZW5kTm9kZTcgWyBsYWJlbCA9ICJDdXN0b20gVGFyZ2V0Iiwgc2hhcGUgPSBib3ggXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTEgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUyIFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMzsKKyAgbGVnZW5kTm9kZTEgLT4gbGVnZW5kTm9kZTQgWyBsYWJlbCA9ICJJbnRlcmZhY2UiLCBzdHlsZSA9IGRhc2hlZCBdOworICBsZWdlbmROb2RlMiAtPiBsZWdlbmROb2RlNSBbIGxhYmVsID0gIlByaXZhdGUiLCBzdHlsZSA9IGRvdHRlZCBdOworICBsZWdlbmROb2RlMyAtPiBsZWdlbmROb2RlNiBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTc7Cit9CisgICAgIm5vZGUwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTAiICAvLyBDb3JlTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUzIiBbIGxhYmVsID0gIkdvb2Z5TG9nZ2luZ0xpYnJhcnlcbihTZXJpb3VzTG9nZ2luZ0xpYnJhcnkpXG4oVGhlQmVzdExvZ2dpbmdMaWJyYXJ5KSIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlMyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IEdvb2Z5TG9nZ2luZ0xpYnJhcnkKKyAgICAibm9kZTQiIFsgbGFiZWwgPSAiU3lzdGVtTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlNCIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gU3lzdGVtTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMiIgLT4gIm5vZGU0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQorICAgICJub2RlMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAibm9kZTEiIC0+ICJub2RlNSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvbnNvbGVBcHBsaWNhdGlvbiAtPiBDcnlwdG9DdXJyZW5jeU1pbmluZ0xpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlOCIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTciIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU5IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCisgICAgIm5vZGU2IiAtPiAibm9kZTciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAibm9kZTEwIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJPcGVuR0wiLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTEwIiAtPiAibm9kZTAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTEwIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUxMSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMSIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb3JlTGlicmFyeQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ub2RlX3ByZWZpeC5kb3QgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfc2V0X25vZGVfcHJlZml4LmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmYyMGVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ub2RlX3ByZWZpeC5kb3QKQEAgLTAsMCArMSw1MyBAQAorZGlncmFwaCAiR3JhcGh2aXpUZXN0UHJvamVjdCIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKK3N1YmdyYXBoIGNsdXN0ZXJMZWdlbmQgeworICBsYWJlbCA9ICJMZWdlbmQiOworICBjb2xvciA9IGJsYWNrOworICBlZGdlIFsgc3R5bGUgPSBpbnZpcyBdOworICBsZWdlbmROb2RlMCBbIGxhYmVsID0gIkV4ZWN1dGFibGUiLCBzaGFwZSA9IGVnZyBdOworICBsZWdlbmROb2RlMSBbIGxhYmVsID0gIlN0YXRpYyBMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgIGxlZ2VuZE5vZGUyIFsgbGFiZWwgPSAiU2hhcmVkIExpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgbGVnZW5kTm9kZTMgWyBsYWJlbCA9ICJNb2R1bGUgTGlicmFyeSIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSBMaWJyYXJ5Iiwgc2hhcGUgPSBwZW50YWdvbiBdOworICBsZWdlbmROb2RlNSBbIGxhYmVsID0gIk9iamVjdCBMaWJyYXJ5Iiwgc2hhcGUgPSBoZXhhZ29uIF07CisgIGxlZ2VuZE5vZGU2IFsgbGFiZWwgPSAiVW5rbm93biBMaWJyYXJ5Iiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICBsZWdlbmROb2RlNyBbIGxhYmVsID0gIkN1c3RvbSBUYXJnZXQiLCBzaGFwZSA9IGJveCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlMSBbIHN0eWxlID0gc29saWQgXTsKKyAgbGVnZW5kTm9kZTAgLT4gbGVnZW5kTm9kZTIgWyBzdHlsZSA9IHNvbGlkIF07CisgIGxlZ2VuZE5vZGUwIC0+IGxlZ2VuZE5vZGUzOworICBsZWdlbmROb2RlMSAtPiBsZWdlbmROb2RlNCBbIGxhYmVsID0gIkludGVyZmFjZSIsIHN0eWxlID0gZGFzaGVkIF07CisgIGxlZ2VuZE5vZGUyIC0+IGxlZ2VuZE5vZGU1IFsgbGFiZWwgPSAiUHJpdmF0ZSIsIHN0eWxlID0gZG90dGVkIF07CisgIGxlZ2VuZE5vZGUzIC0+IGxlZ2VuZE5vZGU2IFsgc3R5bGUgPSBzb2xpZCBdOworICBsZWdlbmROb2RlMCAtPiBsZWdlbmROb2RlNzsKK30KKyAgICAicG9pbnQwIiBbIGxhYmVsID0gIkNvbXBpbGVyRmxhZ3MiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgInBvaW50MSIgWyBsYWJlbCA9ICJDb25zb2xlQXBwbGljYXRpb24iLCBzaGFwZSA9IGVnZyBdOworICAgICJwb2ludDIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAicG9pbnQyIiAtPiAicG9pbnQwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJwb2ludDMiIFsgbGFiZWwgPSAiR29vZnlMb2dnaW5nTGlicmFyeVxuKFNlcmlvdXNMb2dnaW5nTGlicmFyeSlcbihUaGVCZXN0TG9nZ2luZ0xpYnJhcnkpIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJwb2ludDIiIC0+ICJwb2ludDMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgInBvaW50NCIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgInBvaW50NCIgLT4gInBvaW50MiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAicG9pbnQyIiAtPiAicG9pbnQ0IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29yZUxpYnJhcnkgLT4gU3lzdGVtTGlicmFyeQorICAgICJwb2ludDEiIC0+ICJwb2ludDIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAicG9pbnQ1IiBbIGxhYmVsID0gIkNyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeSIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAicG9pbnQxIiAtPiAicG9pbnQ1IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gQ29uc29sZUFwcGxpY2F0aW9uIC0+IENyeXB0b0N1cnJlbmN5TWluaW5nTGlicmFyeQorICAgICJwb2ludDYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAicG9pbnQ2IiAtPiAicG9pbnQyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0FwcGxpY2F0aW9uIC0+IENvcmVMaWJyYXJ5CisgICAgInBvaW50NyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJwb2ludDgiIFsgbGFiZWwgPSAiXCItbG1cIiIsIHNoYXBlID0gc2VwdGFnb24gXTsKKyAgICAicG9pbnQ3IiAtPiAicG9pbnQ4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAicG9pbnQ3IiAtPiAicG9pbnQwIiAgLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJwb2ludDciIC0+ICJwb2ludDIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljTGlicmFyeSAtPiBDb3JlTGlicmFyeQorICAgICJwb2ludDkiIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnlPYmplY3RzIiwgc2hhcGUgPSBoZXhhZ29uIF07CisgICAgInBvaW50NyIgLT4gInBvaW50OSIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IEdyYXBoaWNMaWJyYXJ5T2JqZWN0cworICAgICJwb2ludDYiIC0+ICJwb2ludDciIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljQXBwbGljYXRpb24gLT4gR3JhcGhpY0xpYnJhcnkKKyAgICAicG9pbnQxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgInBvaW50MTAiIC0+ICJwb2ludDAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyT3BlbkdMIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAicG9pbnQxMCIgLT4gInBvaW50MiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAicG9pbnQxMSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgInBvaW50MTEiIC0+ICJwb2ludDAiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvbXBpbGVyRmxhZ3MKKyAgICAicG9pbnQxMSIgLT4gInBvaW50MiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJWdWxrYW4gLT4gQ29yZUxpYnJhcnkKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF90YXJnZXRfZGVwZW5kZW5jaWVzLmRvdC5HcmFwaGljQXBwbGljYXRpb24gYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfdGFyZ2V0X2RlcGVuZGVuY2llcy5kb3QuR3JhcGhpY0FwcGxpY2F0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZmU2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfdGFyZ2V0X2RlcGVuZGVuY2llcy5kb3QuR3JhcGhpY0FwcGxpY2F0aW9uCkBAIC0wLDAgKzEsMjYgQEAKK2RpZ3JhcGggIkdyYXBoaWNBcHBsaWNhdGlvbiIgeworbm9kZSBbCisgIGZvbnRzaXplID0gIjEyIgorXTsKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlMCIgWyBsYWJlbCA9ICJDb21waWxlckZsYWdzIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlMyIgWyBsYWJlbCA9ICJHb29meUxvZ2dpbmdMaWJyYXJ5XG4oU2VyaW91c0xvZ2dpbmdMaWJyYXJ5KVxuKFRoZUJlc3RMb2dnaW5nTGlicmFyeSkiLCBzaGFwZSA9IHBlbnRhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTMiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBHb29meUxvZ2dpbmdMaWJyYXJ5CisgICAgIm5vZGU0IiBbIGxhYmVsID0gIlN5c3RlbUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTIiIC0+ICJub2RlNCIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIENvcmVMaWJyYXJ5IC0+IFN5c3RlbUxpYnJhcnkKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTQiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIFN5c3RlbUxpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTciIFsgbGFiZWwgPSAiR3JhcGhpY0xpYnJhcnkiLCBzaGFwZSA9IGRvdWJsZW9jdGFnb24gXTsKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlOCIgWyBsYWJlbCA9ICJcIi1sbVwiIiwgc2hhcGUgPSBzZXB0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU4IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gIi1sbSIKKyAgICAibm9kZTAiIFsgbGFiZWwgPSAiQ29tcGlsZXJGbGFncyIsIHNoYXBlID0gcGVudGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlMCIgIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvbXBpbGVyRmxhZ3MKKyAgICAibm9kZTIiIFsgbGFiZWwgPSAiQ29yZUxpYnJhcnkiLCBzaGFwZSA9IG9jdGFnb24gXTsKKyAgICAibm9kZTciIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNMaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU5IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5T2JqZWN0cyIsIHNoYXBlID0gaGV4YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGU5IiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gR3JhcGhpY0xpYnJhcnlPYmplY3RzCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfdGFyZ2V0X2RlcGVuZGVycy5kb3QuQ29tcGlsZXJGbGFncy5kZXBlbmRlcnMgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfdGFyZ2V0X2RlcGVuZGVycy5kb3QuQ29tcGlsZXJGbGFncy5kZXBlbmRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhMmVmZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF90YXJnZXRfZGVwZW5kZXJzLmRvdC5Db21waWxlckZsYWdzLmRlcGVuZGVycwpAQCAtMCwwICsxLDMwIEBACitkaWdyYXBoICJDb21waWxlckZsYWdzIiB7Citub2RlIFsKKyAgZm9udHNpemUgPSAiMTIiCitdOworICAgICJub2RlMCIgWyBsYWJlbCA9ICJDb21waWxlckZsYWdzIiwgc2hhcGUgPSBwZW50YWdvbiBdOworICAgICJub2RlMiIgWyBsYWJlbCA9ICJDb3JlTGlicmFyeSIsIHNoYXBlID0gb2N0YWdvbiBdOworICAgICJub2RlMiIgLT4gIm5vZGUwIiAgLy8gQ29yZUxpYnJhcnkgLT4gQ29tcGlsZXJGbGFncworICAgICJub2RlNCIgWyBsYWJlbCA9ICJTeXN0ZW1MaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGU0IiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBTeXN0ZW1MaWJyYXJ5IC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGUyIiBbIGxhYmVsID0gIkNvcmVMaWJyYXJ5Iiwgc2hhcGUgPSBvY3RhZ29uIF07CisgICAgIm5vZGUyIiAtPiAibm9kZTQiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb3JlTGlicmFyeSAtPiBTeXN0ZW1MaWJyYXJ5CisgICAgIm5vZGUxIiBbIGxhYmVsID0gIkNvbnNvbGVBcHBsaWNhdGlvbiIsIHNoYXBlID0gZWdnIF07CisgICAgIm5vZGUxIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBDb25zb2xlQXBwbGljYXRpb24gLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTYiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBDb3JlTGlicmFyeQorICAgICJub2RlNyIgWyBsYWJlbCA9ICJHcmFwaGljTGlicmFyeSIsIHNoYXBlID0gZG91Ymxlb2N0YWdvbiBdOworICAgICJub2RlNyIgLT4gIm5vZGUyIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0xpYnJhcnkgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTYiIFsgbGFiZWwgPSAiR3JhcGhpY0FwcGxpY2F0aW9uIiwgc2hhcGUgPSBlZ2cgXTsKKyAgICAibm9kZTYiIC0+ICJub2RlNyIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNBcHBsaWNhdGlvbiAtPiBHcmFwaGljTGlicmFyeQorICAgICJub2RlMTAiIFsgbGFiZWwgPSAiR3JhcGhpY0RyaXZlck9wZW5HTCIsIHNoYXBlID0gdHJpcGxlb2N0YWdvbiBdOworICAgICJub2RlMTAiIC0+ICJub2RlMiIgWyBzdHlsZSA9IGRvdHRlZCBdIC8vIEdyYXBoaWNEcml2ZXJPcGVuR0wgLT4gQ29yZUxpYnJhcnkKKyAgICAibm9kZTExIiBbIGxhYmVsID0gIkdyYXBoaWNEcml2ZXJWdWxrYW4iLCBzaGFwZSA9IHRyaXBsZW9jdGFnb24gXTsKKyAgICAibm9kZTExIiAtPiAibm9kZTIiIFsgc3R5bGUgPSBkb3R0ZWQgXSAvLyBHcmFwaGljRHJpdmVyVnVsa2FuIC0+IENvcmVMaWJyYXJ5CisgICAgIm5vZGU3IiBbIGxhYmVsID0gIkdyYXBoaWNMaWJyYXJ5Iiwgc2hhcGUgPSBkb3VibGVvY3RhZ29uIF07CisgICAgIm5vZGU3IiAtPiAibm9kZTAiICAvLyBHcmFwaGljTGlicmFyeSAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMCIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyT3BlbkdMIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMCIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlck9wZW5HTCAtPiBDb21waWxlckZsYWdzCisgICAgIm5vZGUxMSIgWyBsYWJlbCA9ICJHcmFwaGljRHJpdmVyVnVsa2FuIiwgc2hhcGUgPSB0cmlwbGVvY3RhZ29uIF07CisgICAgIm5vZGUxMSIgLT4gIm5vZGUwIiBbIHN0eWxlID0gZG90dGVkIF0gLy8gR3JhcGhpY0RyaXZlclZ1bGthbiAtPiBDb21waWxlckZsYWdzCit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19kZXBlbmRlcnNfZmlsZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19kZXBlbmRlcnNfZmlsZXMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhNDNiNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX2RlcGVuZGVyc19maWxlcy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2ZpbGUoR0xPQiBkZXBlbmRlcnNfZmlsZXMgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9LyouZGVwZW5kZXJzKQoraWYoJHtkZXBlbmRlcnNfZmlsZXN9KQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgKi5kZXBlbmRlcnMgZmlsZXMgZGVzcGl0ZSBHUkFQSFZJWl9HRU5FUkFURV9ERVBFTkRFUlMgc2V0IHRvIEZBTFNFLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19leGVjdXRhYmxlcy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX2V4ZWN1dGFibGVzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjlhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19leGVjdXRhYmxlcy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2V4ZWN1dGFibGVzLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19leHRlcm5hbF9saWJzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fZXh0ZXJuYWxfbGlicy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MThlZjdiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fZXh0ZXJuYWxfbGlicy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2V4dGVybmFsX2xpYnMuZG90CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZF9kZXBlbmRlbmN5X2dyYXBoLmRvdCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX2dyYXBoaWNfbGlicy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX2dyYXBoaWNfbGlicy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjVhYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fZ3JhcGhpY19saWJzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworZW5zdXJlX2ZpbGVzX21hdGNoKAorICAgICR7UnVuQ01ha2VfVEVTVF9TT1VSQ0VfRElSfS9leHBlY3RlZF9vdXRwdXRzL2RlcGVuZGVuY3lfZ3JhcGhfbm9fZ3JhcGhpY19saWJzLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19pbnRlcmZhY2VfbGlicy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX2ludGVyZmFjZV9saWJzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGZlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19pbnRlcmZhY2VfbGlicy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX2ludGVyZmFjZV9saWJzLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19tb2R1bGVfbGlicy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX21vZHVsZV9saWJzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODVjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19tb2R1bGVfbGlicy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX21vZHVsZV9saWJzLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19vYmplY3RfbGlicy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX29iamVjdF9saWJzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZTdlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19vYmplY3RfbGlicy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX29iamVjdF9saWJzLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19wZXJfdGFyZ2V0X2ZpbGVzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fcGVyX3RhcmdldF9maWxlcy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWQwNWExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovbm9fcGVyX3RhcmdldF9maWxlcy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2ZpbGUoR0xPQiBwZXJfdGFyZ2V0X2ZpbGVzICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS8qLmRvdC4qKQorbGlzdChGSUxURVIgcGVyX3RhcmdldF9maWxlcyBFWENMVURFIFJFR0VYICIuKlxcLmRlcGVuZGVycyQiKQoraWYocGVyX3RhcmdldF9maWxlcykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHBlci10YXJnZXQgLmRvdCBmaWxlcyBkZXNwaXRlIEdSQVBIVklaX0dFTkVSQVRFX1BFUl9UQVJHRVQgc2V0IHRvIEZBTFNFLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19zaGFyZWRfbGlicy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX3NoYXJlZF9saWJzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NWRhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19zaGFyZWRfbGlicy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3NoYXJlZF9saWJzLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19zdGF0aWNfbGlicy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX3N0YXRpY19saWJzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZmMxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub19zdGF0aWNfbGlicy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3N0YXRpY19saWJzLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub191bmtub3duX2xpYnMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9ub191bmtub3duX2xpYnMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyODZiYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L25vX3Vua25vd25fbGlicy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX25vX3Vua25vd25fbGlicy5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovc2V0X2dyYXBoX2hlYWRlci1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3NldF9ncmFwaF9oZWFkZXItY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5NjQ4NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3NldF9ncmFwaF9oZWFkZXItY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitlbnN1cmVfZmlsZXNfbWF0Y2goCisgICAgJHtSdW5DTWFrZV9URVNUX1NPVVJDRV9ESVJ9L2V4cGVjdGVkX291dHB1dHMvZGVwZW5kZW5jeV9ncmFwaF9zZXRfZ3JhcGhfaGVhZGVyLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9zZXRfZ3JhcGhfbmFtZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3NldF9ncmFwaF9uYW1lLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNTIyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9zZXRfZ3JhcGhfbmFtZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ncmFwaF9uYW1lLmRvdAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nZW5lcmF0ZWRfZGVwZW5kZW5jeV9ncmFwaC5kb3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9zZXRfbm9kZV9wcmVmaXgtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei9zZXRfbm9kZV9wcmVmaXgtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlOWIyNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3NldF9ub2RlX3ByZWZpeC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Vuc3VyZV9maWxlc19tYXRjaCgKKyAgICAke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vZXhwZWN0ZWRfb3V0cHV0cy9kZXBlbmRlbmN5X2dyYXBoX3NldF9ub2RlX3ByZWZpeC5kb3QKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZ2VuZXJhdGVkX2RlcGVuZGVuY3lfZ3JhcGguZG90KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L2NvcmVfbGlicmFyeS5jIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L2NvcmVfbGlicmFyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTg4NDQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3QvY29yZV9saWJyYXJ5LmMKQEAgLTAsMCArMSwzIEBACit2b2lkIGxvZ19zb21ldGhpbmcoKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L2dyYXBoaWNfbGlicmFyeS5jIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L2dyYXBoaWNfbGlicmFyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGM4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3QvZ3JhcGhpY19saWJyYXJ5LmMKQEAgLTAsMCArMSwzIEBACit2b2lkIGluaXRpYWxpemVfZ3JhcGhpY3MoKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L21haW4uYyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyM2UwOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9tYWluLmMKQEAgLTAsMCArMSw0IEBACitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L21vZHVsZS5jIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDhiMDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3QvbW9kdWxlLmMKQEAgLTAsMCArMSwzIEBACitzdGF0aWMgdm9pZCBzb21lX2Z1bmN0aW9uKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9zeXN0ZW1fbGlicmFyeS5jIGIvVGVzdHMvUnVuQ01ha2UvR3JhcGh2aXovdGVzdF9wcm9qZWN0L3N5c3RlbV9saWJyYXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2NzA3OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC9zeXN0ZW1fbGlicmFyeS5jCkBAIC0wLDAgKzEsMyBAQAordm9pZCBpbml0aWFsaXplX3N5c3RlbSgpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3QvdGhpcmRfcGFydHlfcHJvamVjdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0dyYXBodml6L3Rlc3RfcHJvamVjdC90aGlyZF9wYXJ0eV9wcm9qZWN0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODE3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9HcmFwaHZpei90ZXN0X3Byb2plY3QvdGhpcmRfcGFydHlfcHJvamVjdC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK3Byb2plY3QoVGhpcmRQYXJ0eVByb2plY3QpCisKK2FkZF9saWJyYXJ5KEdvb2Z5TG9nZ2luZ0xpYnJhcnkgSU5URVJGQUNFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1M2QzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw0IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0lOU1RBTExfTkFNRV9ESVIuY21ha2UpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL0lOU1RBTExfTkFNRV9ESVIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL0lOU1RBTExfTkFNRV9ESVIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhMGI0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvSU5TVEFMTF9OQU1FX0RJUi5jbWFrZQpAQCAtMCwwICsxLDE1IEBACitmdW5jdGlvbihhZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMgaW5zdGFsbF9uYW1lX2RpcikKKyAgYWRkX2xpYnJhcnkoYnVpbGRfZGlyIFNIQVJFRCB0ZXN0LmMpCisgIGFkZF9saWJyYXJ5KGluc3RhbGxfZGlyIFNIQVJFRCB0ZXN0LmMpCisgIGlmKE5PVCBpbnN0YWxsX25hbWVfZGlyIFNUUkVRVUFMICJOT05FIikKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoYnVpbGRfZGlyIGluc3RhbGxfZGlyIFBST1BFUlRJRVMKKyAgICAgIElOU1RBTExfTkFNRV9ESVIgIiR7aW5zdGFsbF9uYW1lX2Rpcn0iCisgICAgICApCisgIGVuZGlmKCkKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGluc3RhbGxfZGlyIFBST1BFUlRJRVMKKyAgICBCVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVIgVFJVRQorICAgICkKKyAgaW5zdGFsbChUQVJHRVRTIGJ1aWxkX2RpciBpbnN0YWxsX2RpciBFWFBPUlQgSW5zdGFsbE5hbWVEaXJUZXN0IERFU1RJTkFUSU9OIGxpYikKKyAgaW5zdGFsbChFWFBPUlQgSW5zdGFsbE5hbWVEaXJUZXN0IERFU1RJTkFUSU9OIGxpYi9jbWFrZS9JbnN0YWxsTmFtZURpclRlc3QgRklMRSBJbnN0YWxsTmFtZURpclRlc3QtdGFyZ2V0cy5jbWFrZSkKKyAgZmlsZShHRU5FUkFURSBPVVRQVVQgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90YXJnZXRzLnR4dCIgQ09OVEVOVCAiJDxUQVJHRVRfRklMRTpidWlsZF9kaXI+XG4kPFRBUkdFVF9GSUxFOmluc3RhbGxfZGlyPlxuIiBDT05ESVRJT04gJDxDT05GSUc6RGVidWc+KQorZW5kZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWEwM2RkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw2OSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCisKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Z1bmN0aW9uKHJ1bl9pbnN0YWxsX3Rlc3QgY2FzZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7Y2FzZX0tYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURDTUFLRV9CVUlMRF9UWVBFOlNUUklORz1EZWJ1ZyAiLURDTUFLRV9JTlNUQUxMX1BSRUZJWDpQQVRIPSR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9mYWtlX2luc3RhbGwiKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBydW5fY21ha2UoJHtjYXNlfSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHtjYXNlfS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHtjYXNlfS1pbnN0YWxsICR7Q01BS0VfQ09NTUFORH0gLS1pbnN0YWxsIC4gLS1jb25maWcgRGVidWcgLS1wcmVmaXggIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9yZWFsX2luc3RhbGwiKQorZW5kZnVuY3Rpb24oKQorCitmaW5kX3Byb2dyYW0oT1RPT0xfQ09NTUFORCBvdG9vbCkKKworZnVuY3Rpb24oY2hlY2tfaW5zdGFsbF9uYW1lX2RpciBmaWxlIGV4cGVjdGVkKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke09UT09MX0NPTU1BTkR9IC1sICR7ZmlsZX0gUkVTVUxUX1ZBUklBQkxFIF9yZXN1bHQgT1VUUFVUX1ZBUklBQkxFIF9vdXRwdXQpCisgIGlmKF9yZXN1bHQpCisgICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiQ291bGQgbm90IHJ1biBvdG9vbCBvbiAke2ZpbGV9XG4iKQorICBlbHNlaWYoX291dHB1dCBNQVRDSEVTICJjbWQgTENfSURfRFlMSUJcblteXG5dKlxuICpuYW1lIChbXlxuXSopIFxcKG9mZnNldCBbMC05XStcXClcbiIpCisgICAgc2V0KF9pbnN0YWxsX25hbWUgIiR7Q01BS0VfTUFUQ0hfMX0iKQorICAgIGlmKE5PVCBfaW5zdGFsbF9uYW1lIE1BVENIRVMgIiR7ZXhwZWN0ZWR9IikKKyAgICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkluc3RhbGwgbmFtZSBvZiAke2ZpbGV9IGRpZCBub3QgbWF0Y2ggJHtleHBlY3RlZH0gKGFjdHVhbDogJHtfaW5zdGFsbF9uYW1lfSlcbiIpCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJvdG9vbCBkaWQgbm90IHByaW50IGluc3RhbGwgbmFtZSBmb3IgJHtmaWxlfVxuIikKKyAgZW5kaWYoKQorCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oY2hlY2tfaW1wb3J0ZWRfc29uYW1lIGNvbnRlbnRzIHRhcmdldCBleHBlY3RlZCkKKyAgaWYoY29udGVudHMgTUFUQ0hFUyAic2V0X3RhcmdldF9wcm9wZXJ0aWVzXFwoJHt0YXJnZXR9IFBST1BFUlRJRVNcblteXG5dKlxuICpJTVBPUlRFRF9TT05BTUVfREVCVUcgXCIoW15cbl0qKVwiXG4iKQorICAgIHNldChfc29uYW1lICIke0NNQUtFX01BVENIXzF9IikKKyAgICBzZXQoX3JlZ2V4ICJeJHtleHBlY3RlZH1saWIke3RhcmdldH1cXC5keWxpYiQiKQorICAgIGlmKE5PVCBfc29uYW1lIE1BVENIRVMgIiR7X3JlZ2V4fSIpCisgICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJUYXJnZXQgJHt0YXJnZXR9J3MgSU1QT1JURURfU09OQU1FX0RFQlVHIGRpZCBub3QgbWF0Y2ggJHtfcmVnZXh9IChhY3R1YWw6ICR7X3NvbmFtZX0pXG4iKQorICAgIGVuZGlmKCkKKyAgZWxzZSgpCisgICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiQ291bGQgbm90IGZpbmQgSU1QT1JURURfU09OQU1FX0RFQlVHIGZvciB0YXJnZXQgJHt0YXJnZXR9IGluIHBhY2thZ2UgY29uZmlnIGZpbGVcbiIpCisgIGVuZGlmKCkKKworICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKGNoZWNrX2xpYnJhcmllcyBmYWtlX2luc3RhbGwgcmVhbF9pbnN0YWxsIHNvbmFtZV9wcmVmaXgpCisgIGZpbGUoU1RSSU5HUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldHMudHh0IiBfdGFyZ2V0cykKKyAgbGlzdChHRVQgX3RhcmdldHMgMCBfYnVpbGRfZGlyKQorICBsaXN0KEdFVCBfdGFyZ2V0cyAxIF9pbnN0YWxsX2RpcikKKyAgY2hlY2tfaW5zdGFsbF9uYW1lX2RpcigiJHtfYnVpbGRfZGlyfSIgIl5AcnBhdGgvbGliYnVpbGRfZGlyXFwuZHlsaWIkIikKKyAgY2hlY2tfaW5zdGFsbF9uYW1lX2RpcigiJHtfaW5zdGFsbF9kaXJ9IiAiXiR7ZmFrZV9pbnN0YWxsfWxpYmluc3RhbGxfZGlyXFwuZHlsaWIkIikKKyAgY2hlY2tfaW5zdGFsbF9uYW1lX2RpcigiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3JlYWxfaW5zdGFsbC9saWIvbGliYnVpbGRfZGlyLmR5bGliIiAiXiR7cmVhbF9pbnN0YWxsfWxpYmJ1aWxkX2RpclxcLmR5bGliJCIpCisgIGNoZWNrX2luc3RhbGxfbmFtZV9kaXIoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9yZWFsX2luc3RhbGwvbGliL2xpYmluc3RhbGxfZGlyLmR5bGliIiAiXiR7cmVhbF9pbnN0YWxsfWxpYmluc3RhbGxfZGlyXFwuZHlsaWIkIikKKworICBmaWxlKFJFQUQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9yZWFsX2luc3RhbGwvbGliL2NtYWtlL0luc3RhbGxOYW1lRGlyVGVzdC9JbnN0YWxsTmFtZURpclRlc3QtdGFyZ2V0cy1kZWJ1Zy5jbWFrZSIgX3RhcmdldHMpCisgIGNoZWNrX2ltcG9ydGVkX3NvbmFtZSgiJHtfdGFyZ2V0c30iIGJ1aWxkX2RpciAiJHtzb25hbWVfcHJlZml4fSIpCisgIGNoZWNrX2ltcG9ydGVkX3NvbmFtZSgiJHtfdGFyZ2V0c30iIGluc3RhbGxfZGlyICIke3NvbmFtZV9wcmVmaXh9IikKKworICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK3J1bl9pbnN0YWxsX3Rlc3Qobm9uZSkKK3J1bl9pbnN0YWxsX3Rlc3QoZW1wdHkpCitydW5faW5zdGFsbF90ZXN0KHNpbXBsZSkKK3J1bl9pbnN0YWxsX3Rlc3Qoc2ltcGxlX2dlbmV4KQorcnVuX2luc3RhbGxfdGVzdChwcmVmaXhfZ2VuZXgpCitydW5faW5zdGFsbF90ZXN0KGVtcHR5X2dlbmV4KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eS1pbnN0YWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eS1pbnN0YWxsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiODdkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL2VtcHR5LWluc3RhbGwtY2hlY2suY21ha2UKQEAgLTAsMCArMSBAQAorY2hlY2tfbGlicmFyaWVzKCIiICIiICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvZW1wdHkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkZTRkMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvZW1wdHkuY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2luc3RhbGxfbmFtZV9kaXJfbGlicmFyaWVzKCIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eV9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eV9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiODdkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL2VtcHR5X2dlbmV4LWluc3RhbGwtY2hlY2suY21ha2UKQEAgLTAsMCArMSBAQAorY2hlY2tfbGlicmFyaWVzKCIiICIiICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9lbXB0eV9nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvZW1wdHlfZ2VuZXguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxYzhkMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvZW1wdHlfZ2VuZXguY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2luc3RhbGxfbmFtZV9kaXJfbGlicmFyaWVzKCQ8MDovdXNyL2xvY2FsL2xpYj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL25vbmUtaW5zdGFsbC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvbm9uZS1pbnN0YWxsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZTdhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL25vbmUtaW5zdGFsbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxIEBACitjaGVja19saWJyYXJpZXMoQHJwYXRoLyBAcnBhdGgvIEBycGF0aC8pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL25vbmUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL25vbmUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljNWU3ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvbm9uZS5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMoTk9ORSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvcHJlZml4X2dlbmV4LWluc3RhbGwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZjdkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorY2hlY2tfbGlicmFyaWVzKAorICAiLiovVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9wcmVmaXhfZ2VuZXgtYnVpbGQvZmFrZV9pbnN0YWxsL2xpYi8iCisgICIuKi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC1idWlsZC9yZWFsX2luc3RhbGwvbGliLyIKKyAgIyAiJCIgaGFzIHRvIGJlIGVzY2FwZWQgdHdpY2UgYmVjYXVzZSBvZiBpdHMgc2lnbmlmaWNhbmNlIGluIHJlZ2V4ZXMuCisgICJcXFwke19JTVBPUlRfUFJFRklYfS9saWIvIgorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvcHJlZml4X2dlbmV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjYyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3ByZWZpeF9nZW5leC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMoJDwxOiQ8SU5TVEFMTF9QUkVGSVg+L2xpYj4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZS1pbnN0YWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9zaW1wbGUtaW5zdGFsbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjczN2NiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9zaW1wbGUtaW5zdGFsbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxIEBACitjaGVja19saWJyYXJpZXMoL3Vzci9sb2NhbC9saWIvIC91c3IvbG9jYWwvbGliLyAvdXNyL2xvY2FsL2xpYi8pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvc2ltcGxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTk4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZS5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMoL3Vzci9sb2NhbC9saWIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZV9nZW5leC1pbnN0YWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9zaW1wbGVfZ2VuZXgtaW5zdGFsbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjczN2NiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi9zaW1wbGVfZ2VuZXgtaW5zdGFsbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxIEBACitjaGVja19saWJyYXJpZXMoL3Vzci9sb2NhbC9saWIvIC91c3IvbG9jYWwvbGliLyAvdXNyL2xvY2FsL2xpYi8pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZV9nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvc2ltcGxlX2dlbmV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNzI5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9JTlNUQUxMX05BTUVfRElSL3NpbXBsZV9nZW5leC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfaW5zdGFsbF9uYW1lX2Rpcl9saWJyYXJpZXMoJDwxOi91c3IvbG9jYWwvbGliPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvdGVzdC5jIGIvVGVzdHMvUnVuQ01ha2UvSU5TVEFMTF9OQU1FX0RJUi90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkYjYxYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0lOU1RBTExfTkFNRV9ESVIvdGVzdC5jCkBAIC0wLDAgKzEsMyBAQAordm9pZCB0ZXN0KHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JbmNvbXBhdGlibGVRdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0luY29tcGF0aWJsZVF0L0NNYWtlTGlzdHMudHh0CmluZGV4IGY0NTJkYjEuLmViYWI3YTMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0luY29tcGF0aWJsZVF0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL0luY29tcGF0aWJsZVF0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBDWFgpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGIzZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtYmFkLXZhbHVlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtYmFkLXZhbHVlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtYmFkLXZhbHVlLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvSU1QT1JURURfTElCTkFNRS1iYWQtdmFsdWUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvSU1QT1JURURfTElCTkFNRS1iYWQtdmFsdWUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvSU1QT1JURURfTElCTkFNRS1iYWQtdmFsdWUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvSU1QT1JURURfTElCTkFNRS1iYWQtdmFsdWUtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLWJhZC12YWx1ZS1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLWJhZC12YWx1ZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvSU1QT1JURURfTElCTkFNRS1iYWQtdmFsdWUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtYmFkLXZhbHVlLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtYmFkLXZhbHVlLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pZmFjZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pZmFjZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pZmFjZS1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtbm9uLWlmYWNlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtbm9uLWlmYWNlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtbm9uLWlmYWNlLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtbm9uLWlmYWNlLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvSU1QT1JURURfTElCTkFNRS1ub24taWZhY2Utc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvSU1QT1JURURfTElCTkFNRS1ub24taWZhY2UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtbm9uLWlmYWNlLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pZmFjZS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pZmFjZS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvSU1QT1JURURfTElCTkFNRS1ub24taW1wb3J0ZWQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvSU1QT1JURURfTElCTkFNRS1ub24taW1wb3J0ZWQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvSU1QT1JURURfTElCTkFNRS1ub24taW1wb3J0ZWQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pbXBvcnRlZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pbXBvcnRlZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pbXBvcnRlZC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pbXBvcnRlZC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtbm9uLWltcG9ydGVkLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtbm9uLWltcG9ydGVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9JTVBPUlRFRF9MSUJOQU1FLW5vbi1pbXBvcnRlZC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvSU1QT1JURURfTElCTkFNRS1ub24taW1wb3J0ZWQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvSU1QT1JURURfTElCTkFNRS1ub24taW1wb3J0ZWQuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvUnVuQ01ha2VUZXN0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9SdW5DTWFrZVRlc3QuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvUnVuQ01ha2VUZXN0LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9hZGRfY3VzdG9tX2NvbW1hbmQtVEFSR0VULXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L2FkZF9jdXN0b21fY29tbWFuZC1UQVJHRVQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvYWRkX2N1c3RvbV9jb21tYW5kLVRBUkdFVC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L2FkZF9jdXN0b21fY29tbWFuZC1UQVJHRVQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvYWRkX2N1c3RvbV9jb21tYW5kLVRBUkdFVC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9hZGRfY3VzdG9tX2NvbW1hbmQtVEFSR0VULXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2FkZF9jdXN0b21fY29tbWFuZC1UQVJHRVQtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9hZGRfY3VzdG9tX2NvbW1hbmQtVEFSR0VULXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2FkZF9jdXN0b21fY29tbWFuZC1UQVJHRVQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L2FkZF9jdXN0b21fY29tbWFuZC1UQVJHRVQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2FkZF9jdXN0b21fY29tbWFuZC1UQVJHRVQuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvYWRkX2N1c3RvbV9jb21tYW5kLVRBUkdFVC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmsuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L2dlbmV4X2xpbmsuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmsuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvZ2VuZXhfbGluay5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2xvYmFsLWludGVyZmFjZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9nbG9iYWwtaW50ZXJmYWNlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dsb2JhbC1pbnRlcmZhY2UtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9nbG9iYWwtaW50ZXJmYWNlLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvZ2xvYmFsLWludGVyZmFjZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9nbG9iYWwtaW50ZXJmYWNlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1ODVlYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvZ2xvYmFsLWludGVyZmFjZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsOSBAQAorQ01ha2UgRXJyb3IgYXQgZ2xvYmFsLWludGVyZmFjZS5jbWFrZToyIFwoYWRkX2xpYnJhcnlcKToKKyAgQ2Fubm90IGZpbmQgc291cmNlIGZpbGU6CisKKyAgICBHTE9CQUwKKworICBUcmllZCBleHRlbnNpb25zIFwuYyBcLkMgLioKKy4qCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nbG9iYWwtaW50ZXJmYWNlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9nbG9iYWwtaW50ZXJmYWNlLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nbG9iYWwtaW50ZXJmYWNlLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L2dsb2JhbC1pbnRlcmZhY2UuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2ludmFsaWRfbmFtZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9pbnZhbGlkX25hbWUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9uYW1lLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvaW52YWxpZF9uYW1lLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2ludmFsaWRfbmFtZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9pbnZhbGlkX25hbWUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9uYW1lLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvaW52YWxpZF9uYW1lLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvaW52YWxpZF9uYW1lLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9pbnZhbGlkX25hbWUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1ZmNjNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvaW52YWxpZF9uYW1lLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKK2FkZF9saWJyYXJ5KGlmJGFjZSBJTlRFUkZBQ0UpCisKK2FkZF9saWJyYXJ5KGlmYWNlOjp0YXJnZXQgSU5URVJGQUNFKQorCithZGRfbGlicmFyeShpZiR0YXJnZXRfaW1wb3J0ZWQgSU5URVJGQUNFIElNUE9SVEVEKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9zaWduYXR1cmUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvaW52YWxpZF9zaWduYXR1cmUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9zaWduYXR1cmUtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9pbnZhbGlkX3NpZ25hdHVyZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9pbnZhbGlkX3NpZ25hdHVyZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9pbnZhbGlkX3NpZ25hdHVyZS1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9pbnZhbGlkX3NpZ25hdHVyZS1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L2ludmFsaWRfc2lnbmF0dXJlLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2ludmFsaWRfc2lnbmF0dXJlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9pbnZhbGlkX3NpZ25hdHVyZS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9zaWduYXR1cmUuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvaW52YWxpZF9zaWduYXR1cmUuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L25vX3NoYXJlZF9saWJzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS9ub19zaGFyZWRfbGlicy5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvbm9fc2hhcmVkX2xpYnMuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvbm9fc2hhcmVkX2xpYnMuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3RhcmdldF9jb21tYW5kcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS90YXJnZXRfY29tbWFuZHMtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3RhcmdldF9jb21tYW5kcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvSW50ZXJmYWNlTGlicmFyeS90YXJnZXRfY29tbWFuZHMtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3RhcmdldF9jb21tYW5kcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS90YXJnZXRfY29tbWFuZHMuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS93aGl0ZWxpc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3doaXRlbGlzdC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L3doaXRlbGlzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS93aGl0ZWxpc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0ludGVyZmFjZUxpYnJhcnkvd2hpdGVsaXN0LXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3doaXRlbGlzdC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L3doaXRlbGlzdC1zdGRlcnIudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS93aGl0ZWxpc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L3doaXRlbGlzdC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9JbnRlcmZhY2VMaWJyYXJ5L3doaXRlbGlzdC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0NNYWtlTGlzdHMudHh0CmluZGV4IDg5OTZmZWYuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCi1jbWFrZV9wb2xpY3koU0VUIENNUDAwNDIgTkVXKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LRVJfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktFUl9MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS0VSX0xBTkdVQUdFLWdlbmV4LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS0VSX0xBTkdVQUdFLWdlbmV4LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiZjc2YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LRVJfTEFOR1VBR0UtZ2VuZXgtc3RkZXJyLnR4dApAQCAtMCwwICsxLDkgQEAKK0NNYWtlIEVycm9yIGF0IExJTktFUl9MQU5HVUFHRS1nZW5leC5jbWFrZTpbMC05XSsgXCh0YXJnZXRfbGlua19saWJyYXJpZXNcKToKKyAgRXJyb3IgZXZhbHVhdGluZyBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworICAgIFwkPFRBUkdFVF9QUk9QRVJUWTpMSU5LRVJfTEFOR1VBR0U+CisKKyAgTElOS0VSX0xBTkdVQUdFIHRhcmdldCBwcm9wZXJ0eSBjYW4gbm90IGJlIHVzZWQgd2hpbGUgZXZhbHVhdGluZyBsaW5rCisgIGxpYnJhcmllcyBmb3IgYSBzdGF0aWMgbGlicmFyeQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LRVJfTEFOR1VBR0UtZ2VuZXguY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS0VSX0xBTkdVQUdFLWdlbmV4LmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjMDAyZS4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1DTWFrZSBFcnJvciBhdCBMSU5LX0xBTkdVQUdFLWdlbmV4LmNtYWtlOlswLTldKyBcKHRhcmdldF9saW5rX2xpYnJhcmllc1wpOgotICBFcnJvciBldmFsdWF0aW5nIGdlbmVyYXRvciBleHByZXNzaW9uOgotCi0gICAgXCQ8VEFSR0VUX1BST1BFUlRZOkxJTktFUl9MQU5HVUFHRT4KLQotICBMSU5LRVJfTEFOR1VBR0UgdGFyZ2V0IHByb3BlcnR5IGNhbiBub3QgYmUgdXNlZCB3aGlsZSBldmFsdWF0aW5nIGxpbmsKLSAgbGlicmFyaWVzIGZvciBhIHN0YXRpYyBsaWJyYXJ5Ci1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDJhNTM0YjMuLjQ4MjE2ZTkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMSw3ICsxLDcgQEAKIGluY2x1ZGUoUnVuQ01ha2UpCiAKIHJ1bl9jbWFrZShOb0xhbmdTSEFSRUQpCi1ydW5fY21ha2UoTElOS19MQU5HVUFHRS1nZW5leCkKK3J1bl9jbWFrZShMSU5LRVJfTEFOR1VBR0UtZ2VuZXgpCiBydW5fY21ha2UobGluay1saWJyYXJpZXMtVEFSR0VUX0ZJTEUtZ2VuZXgpCiBydW5fY21ha2UobGluay1saWJyYXJpZXMtVEFSR0VUX0ZJTEUtZ2VuZXgtb2spCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9NYWNPU1ZlcnNpb25zL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzJmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9NYWNPU1ZlcnNpb25zL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvTWFjT1NWZXJzaW9ucy1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvTWFjT1NWZXJzaW9ucy1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGZhYThiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9NYWNPU1ZlcnNpb25zLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjcgQEAKK3NldChjZmdfZGlyKQoraWYoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgc2V0KGNmZ19kaXIgL0RlYnVnKQorZW5kaWYoKQorCitzZXQobGliICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0ke2NmZ19kaXJ9L2xpYmZvby4xLjAuZHlsaWIiKQoraWYoTk9UIEVYSVNUUyAiJHtsaWJ9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJMaWJyYXJ5IGZpbGUgaXMgbWlzc2luZzpcbiAgJHtsaWJ9IikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgb3Rvb2wgLWwgIiR7bGlifSIgT1VUUFVUX1ZBUklBQkxFIG91dCBFUlJPUl9WQVJJQUJMRSBlcnIgUkVTVUxUX1ZBUklBQkxFIHJlcykKK2lmKE5PVCByZXMgRVFVQUwgMCkKKyAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgZXJyICIgICR7ZXJyfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUnVubmluZyAnb3Rvb2wgLWwnIG9uIGZpbGU6XG4gICR7bGlifVxuZmFpbGVkOlxuJHtlcnJ9IikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworZm9yZWFjaCh2ZXIKKyAgICBbW2N1cnJlbnQgdmVyc2lvbiAzXC4yXC4xXV0KKyAgICBbW2NvbXBhdGliaWxpdHkgdmVyc2lvbiAyXC4xXC4wXV0KKyAgICApCisgIGlmKE5PVCAiJHtvdXR9IiBNQVRDSEVTICIoIHxcbikke3Zlcn0oIHxcbikiKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTGlicmFyeSBmaWxlOlxuICAke2xpYn1cbmRvZXMgbm90IGNvbnRhaW4gJyR7dmVyfSciKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9NYWNPU1ZlcnNpb25zLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9NYWNPU1ZlcnNpb25zLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTFiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9NYWNPU1ZlcnNpb25zL01hY09TVmVyc2lvbnMuY21ha2UKQEAgLTAsMCArMSw5IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkoZm9vIFNIQVJFRCBmb28uYykKK3NldF90YXJnZXRfcHJvcGVydGllcyhmb28gUFJPUEVSVElFUworICBWRVJTSU9OIDEuMAorICBTT1ZFUlNJT04gMQorICBNQUNIT19DT01QQVRJQklMSVRZX1ZFUlNJT04gMi4xLjAKKyAgTUFDSE9fQ1VSUkVOVF9WRVJTSU9OIDMuMi4xCisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3Y2E0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK2Z1bmN0aW9uKHJ1bl9NYWNPU1ZlcnNpb25zKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vTWFjT1NWZXJzaW9ucy1idWlsZCkKKyAgcnVuX2NtYWtlKE1hY09TVmVyc2lvbnMpCisKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoTWFjT1NWZXJzaW9ucy1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKK2VuZGZ1bmN0aW9uKCkKKworcnVuX01hY09TVmVyc2lvbnMoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWFjT1NWZXJzaW9ucy9mb28uYyBiL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvZm9vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzZDg1NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL01hY09TVmVyc2lvbnMvZm9vLmMKQEAgLTAsMCArMSw0IEBACitpbnQgZm9vKHZvaWQpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWFrZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9NYWtlL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA4MmRiNmI3Li42YjI3MjFjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9NYWtlL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9NYWtlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMjYsMTAgKzI2LDEzIEBACiAgIGVuZGlmKCkKICAgcnVuX2NtYWtlX2NvbW1hbmQoVmVyYm9zZUJ1aWxkLWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC12IC0tY2xlYW4tZmlyc3QpCiAgIHVuc2V0KFJ1bkNNYWtlLXN0ZG91dC1maWxlKQorICBzZXQoX2JhY2t1cF9sYW5nICIkRU5We0xBTkd9IikKICAgaWYoTUFLRV9JU19HTlUpCiAgICAgc2V0KFJ1bkNNYWtlLXN0ZG91dC1maWxlIFZlcmJvc2VCdWlsZC1ub3dvcmstZ251LXN0ZG91dC50eHQpCisgICAgc2V0KEVOVntMQU5HfSAiQyIpCiAgIGVuZGlmKCkKICAgcnVuX2NtYWtlX2NvbW1hbmQoVmVyYm9zZUJ1aWxkLW5vd29yayAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLXZlcmJvc2UpCisgIHNldChFTlZ7TEFOR30gIiR7X2JhY2t1cF9sYW5nfSIpCiBlbmRmdW5jdGlvbigpCiBydW5fVmVyYm9zZUJ1aWxkKCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtZGVmYXVsdC1zY3JpcHQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWRlZmF1bHQtc2NyaXB0LXN0ZGVyci50eHQKaW5kZXggNGRkZGM5Ni4uMDdkZWVlMiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtZGVmYXVsdC1zY3JpcHQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1kZWZhdWx0LXNjcmlwdC1zdGRlcnIudHh0CkBAIC0xLDYgKzEsNiBAQAogWzAtOV0rCi1DTWFrZSBFcnJvciBhdCAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCk6CitDTWFrZSBFcnJvciBhdCAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKToKICAgTWF4aW11bSByZWN1cnNpb24gZGVwdGggb2YgWzAtOV0rIGV4Y2VlZGVkCiBDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogICAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6NSBcKHNldFwpCi0gIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKQorICAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtZGVmYXVsdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtZGVmYXVsdC1zdGRlcnIudHh0CmluZGV4IGE4YjQ3NTYuLmIyMzk1YjMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWRlZmF1bHQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1kZWZhdWx0LXN0ZGVyci50eHQKQEAgLTEsNiArMSw2IEBACiBbMC05XSsKLUNNYWtlIEVycm9yIGF0IHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKToKK0NNYWtlIEVycm9yIGF0IHZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpOgogICBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBvZiBbMC05XSsgZXhjZWVkZWQKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo1IFwoc2V0XCkKLSAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpCisgIHZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1pbnZhbGlkLXZhci1zY3JpcHQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWludmFsaWQtdmFyLXNjcmlwdC1zdGRlcnIudHh0CmluZGV4IDRkZGRjOTYuLjA3ZGVlZTIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWludmFsaWQtdmFyLXNjcmlwdC1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWludmFsaWQtdmFyLXNjcmlwdC1zdGRlcnIudHh0CkBAIC0xLDYgKzEsNiBAQAogWzAtOV0rCi1DTWFrZSBFcnJvciBhdCAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCk6CitDTWFrZSBFcnJvciBhdCAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKToKICAgTWF4aW11bSByZWN1cnNpb24gZGVwdGggb2YgWzAtOV0rIGV4Y2VlZGVkCiBDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogICAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6NSBcKHNldFwpCi0gIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKQorICAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtaW52YWxpZC12YXItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLWludmFsaWQtdmFyLXN0ZGVyci50eHQKaW5kZXggYThiNDc1Ni4uYjIzOTViMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtaW52YWxpZC12YXItc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC1pbnZhbGlkLXZhci1zdGRlcnIudHh0CkBAIC0xLDYgKzEsNiBAQAogWzAtOV0rCi1DTWFrZSBFcnJvciBhdCB2YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCk6CitDTWFrZSBFcnJvciBhdCB2YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKToKICAgTWF4aW11bSByZWN1cnNpb24gZGVwdGggb2YgWzAtOV0rIGV4Y2VlZGVkCiBDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogICB2YXJpYWJsZV93YXRjaFwuY21ha2U6NSBcKHNldFwpCi0gIHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKQorICB2YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtdmFyLXNjcmlwdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtdmFyLXNjcmlwdC1zdGRlcnIudHh0CmluZGV4IDAwYjJiM2MuLjUyZmVkZDMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL01heFJlY3Vyc2lvbkRlcHRoL3ZhcmlhYmxlX3dhdGNoLXZhci1zY3JpcHQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC12YXItc2NyaXB0LXN0ZGVyci50eHQKQEAgLTIsMTcgKzIsMTcgQEAKIDYKIDgKIDEwCi1DTWFrZSBFcnJvciBhdCAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCk6CitDTWFrZSBFcnJvciBhdCAuKi92YXJpYWJsZV93YXRjaFwuY21ha2U6WzAtOV0rIFwodXBkYXRlX3hcKToKICAgTWF4aW11bSByZWN1cnNpb24gZGVwdGggb2YgMTAgZXhjZWVkZWQKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo1IFwoc2V0XCkKLSAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpCisgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpCiAgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo1IFwoc2V0XCkKLSAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpCisgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpCiAgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo1IFwoc2V0XCkKLSAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpCisgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpCiAgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo1IFwoc2V0XCkKLSAgLiovdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjk5OTkgXCh1cGRhdGVfeFwpCisgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpCiAgIC4qL3ZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5IFwoc2V0XCkKICAgLiovQ01ha2VMaXN0c1wudHh0OjUgXChpbmNsdWRlXCkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTWF4UmVjdXJzaW9uRGVwdGgvdmFyaWFibGVfd2F0Y2gtdmFyLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC12YXItc3RkZXJyLnR4dAppbmRleCA4ZjI3YmYxLi4xNDI3ZjFkIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC12YXItc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9NYXhSZWN1cnNpb25EZXB0aC92YXJpYWJsZV93YXRjaC12YXItc3RkZXJyLnR4dApAQCAtMiwxNyArMiwxNyBAQAogNgogOAogMTAKLUNNYWtlIEVycm9yIGF0IHZhcmlhYmxlX3dhdGNoXC5jbWFrZTo5OTk5IFwodXBkYXRlX3hcKToKK0NNYWtlIEVycm9yIGF0IHZhcmlhYmxlX3dhdGNoXC5jbWFrZTpbMC05XSsgXCh1cGRhdGVfeFwpOgogICBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBvZiAxMCBleGNlZWRlZAogQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKICAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjUgXChzZXRcKQotICB2YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCkKKyAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCkKICAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjUgXChzZXRcKQotICB2YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCkKKyAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCkKICAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjUgXChzZXRcKQotICB2YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCkKKyAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCkKICAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjUgXChzZXRcKQotICB2YXJpYWJsZV93YXRjaFwuY21ha2U6OTk5OSBcKHVwZGF0ZV94XCkKKyAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOlswLTldKyBcKHVwZGF0ZV94XCkKICAgdmFyaWFibGVfd2F0Y2hcLmNtYWtlOjkgXChzZXRcKQogICBDTWFrZUxpc3RzXC50eHQ6NSBcKGluY2x1ZGVcKQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYS9DaGFuZ2VCdWlsZFR5cGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9DaGFuZ2VCdWlsZFR5cGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0MDVhOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL0NoYW5nZUJ1aWxkVHlwZS5jbWFrZQpAQCAtMCwwICsxLDEyIEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworZnVuY3Rpb24oY2hhbmdlX2J1aWxkX3R5cGVfc3ViZGlyKQorICBzZXQoQ01BS0VfQlVJTERfVFlQRSBSZWxlYXNlKQorICBhZGRfc3ViZGlyZWN0b3J5KFN1YkRpclByZWZpeCkKK2VuZGZ1bmN0aW9uKCkKKworY2hhbmdlX2J1aWxkX3R5cGVfc3ViZGlyKCkKKworaW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCithZGRfZXhlY3V0YWJsZShoZWxsbyBoZWxsb19zdWJfZ3JlZXRpbmcuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhoZWxsbyBncmVldGluZykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL0N1c3RvbUNvbW1hbmRKb2JQb29sLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvQ3VzdG9tQ29tbWFuZEpvYlBvb2wuY21ha2UKaW5kZXggMWUzNmU2NS4uYTk2ODAyYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTmluamEvQ3VzdG9tQ29tbWFuZEpvYlBvb2wuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvQ3VzdG9tQ29tbWFuZEpvYlBvb2wuY21ha2UKQEAgLTEsMyArMSw0IEBACitzZXRfcHJvcGVydHkoR0xPQkFMIFBST1BFUlRZIEpPQl9QT09MUyBjdXN0b21fY29tbWFuZF9wb29sPTIgY3VzdG9tX3RhcmdldF9wb29sPTIpCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgIE9VVFBVVCBoZWxsby5jb3B5LmMKICAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgLUUgY29weQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamEvUXQ1QXV0b01vY0RlcHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9RdDVBdXRvTW9jRGVwcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjlhMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvUXQ1QXV0b01vY0RlcHMuY21ha2UKQEAgLTAsMCArMSw5IEBACitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitmaW5kX3BhY2thZ2UoUXQ1Q29yZSBSRVFVSVJFRCkKKworc2V0KENNQUtFX0FVVE9NT0MgT04pCisKK2FkZF9saWJyYXJ5KHNpbXBsZV9saWIgU0hBUkVEIHNpbXBsZV9saWIuY3BwKQorYWRkX2V4ZWN1dGFibGUoYXBwX3dpdGhfcXQgYXBwLmNwcCBhcHBfcXQuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGFwcF93aXRoX3F0IFBSSVZBVEUgc2ltcGxlX2xpYiBRdDU6OkNvcmUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggODA4YTg3Mi4uZDQzMDIzYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvTmluamEvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMSw1ICsxLDggQEAKIGluY2x1ZGUoUnVuQ01ha2UpCiAKK3NldChSdW5DTWFrZV9HRU5FUkFUT1IgIk5pbmphIikKK3NldChSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHIDApCisKICMgRGV0ZWN0IG5pbmphIHZlcnNpb24gc28gd2Uga25vdyB3aGF0IHRlc3RzIGNhbiBiZSBzdXBwb3J0ZWQuCiBleGVjdXRlX3Byb2Nlc3MoCiAgIENPTU1BTkQgIiR7UnVuQ01ha2VfTUFLRV9QUk9HUkFNfSIgLS12ZXJzaW9uCkBAIC0xNSw2ICsxOCwxMiBAQAogICBtZXNzYWdlKEZBVEFMX0VSUk9SICInbmluamEgLS12ZXJzaW9uJyByZXBvcnRlZDpcbiR7bmluamFfb3V0fSIpCiBlbmRpZigpCiAKK2lmKENNQUtFX0hPU1RfV0lOMzIpCisgIHJ1bl9jbWFrZShTZWxlY3RDb21waWxlcldpbmRvd3MpCitlbHNlKCkKKyAgcnVuX2NtYWtlKFNlbGVjdENvbXBpbGVyVU5JWCkKK2VuZGlmKCkKKwogZnVuY3Rpb24ocnVuX05pbmphVG9vbE1pc3NpbmcpCiAgIHNldChSdW5DTWFrZV9NQUtFX1BST0dSQU0gbmluamEtdG9vbC1taXNzaW5nKQogICBydW5fY21ha2UoTmluamFUb29sTWlzc2luZykKQEAgLTEyOSw2ICsxMzgsNyBAQAogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKICAgICAgICJ0b3AgbmluamEgYnVpbGQgZmFpbGVkIGV4aXRlZCB3aXRoIHN0YXR1cyAke25pbmphX3Jlc3VsdH0iKQogICBlbmRpZigpCisgIHNldChuaW5qYV9zdGRvdXQgIiR7bmluamFfc3Rkb3V0fSIgUEFSRU5UX1NDT1BFKQogZW5kZnVuY3Rpb24ocnVuX25pbmphKQogCiBmdW5jdGlvbiAocnVuX0xvb3NlT2JqZWN0RGVwZW5kcykKQEAgLTMwNCwzICszMTQsMzIgQEAKICAgcnVuX25pbmphKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iIC13IGR1cGJ1aWxkPWVycikKIGVuZGZ1bmN0aW9uKCkKIHJ1bl9QcmV2ZW50Q29uZmlndXJlRmlsZUR1cEJ1aWxkUnVsZSgpCisKK2Z1bmN0aW9uIChydW5fQ2hhbmdlQnVpbGRUeXBlKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQ2hhbmdlQnVpbGRUeXBlLWJ1aWxkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0JVSUxEX1RZUEU6U1RSSU5HPURlYnVnIikKKyAgcnVuX2NtYWtlKENoYW5nZUJ1aWxkVHlwZSkKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorICBydW5fbmluamEoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIgLXcgZHVwYnVpbGQ9ZXJyKQorZW5kZnVuY3Rpb24oKQorcnVuX0NoYW5nZUJ1aWxkVHlwZSgpCisKK2Z1bmN0aW9uKHJ1bl9RdDVBdXRvTW9jRGVwcykKKyAgaWYoQ01ha2VfVEVTVF9RdDUgQU5EIENNQUtFX1RFU1RfUXQ1Q29yZV9WZXJzaW9uIFZFUlNJT05fR1JFQVRFUl9FUVVBTCA1LjE1LjApCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1F0NUF1dG9Nb2NEZXBzLWJ1aWxkKQorICAgIHJ1bl9jbWFrZShRdDVBdXRvTW9jRGVwcykKKyAgICB1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCisgICAgIyBCdWlsZCB0aGUgcHJvamVjdC4KKyAgICBydW5fbmluamEoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgICAgIyBUb3VjaCBqdXN0IHRoZSBsaWJyYXJ5IHNvdXJjZSBmaWxlLCB3aGljaCBzaG91bGRuJ3QgY2F1c2UgYSByZXJ1biBvZiBBVVRPTU9DCisgICAgIyBmb3IgYXBwX3dpdGhfcXQgdGFyZ2V0LgorICAgIHRvdWNoKCIke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L3NpbXBsZV9saWIuY3BwIikKKyAgICAjIEJ1aWxkIGFuZCBhc3NlcnQgdGhhdCBBVVRPTU9DIHdhcyBub3QgcnVuIGZvciBhcHBfd2l0aF9xdC4KKyAgICBydW5fbmluamEoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgICAgaWYobmluamFfc3Rkb3V0IE1BVENIRVMgIkF1dG9tYXRpYyBNT0MgZm9yIHRhcmdldCBhcHBfd2l0aF9xdCIpCisgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgICAgICAgICAgICAgICJBVVRPTU9DIHNob3VsZCBub3QgaGF2ZSBleGVjdXRlZCBmb3IgJ2FwcF93aXRoX3F0JyB0YXJnZXQ6XG5zdGRvdXQ6XG4ke25pbmphX3N0ZG91dH0iKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorcnVuX1F0NUF1dG9Nb2NEZXBzKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyLzEvZ2NjIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXIvMS9nY2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTUxZGZhNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyLzEvZ2NjCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCitmYWxzZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXIvMi9jYyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyLzIvY2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTUxZGZhNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyLzIvY2MKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK2ZhbHNlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJVTklYLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJVTklYLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyVU5JWC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJVTklYLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiYWE0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyVU5JWC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNiBAQAorXkNNYWtlIEVycm9yIGF0IC4qL01vZHVsZXMvQ01ha2VUZXN0Q0NvbXBpbGVyLmNtYWtlOlswLTldKyBcKG1lc3NhZ2VcKToKKyAgVGhlIEMgY29tcGlsZXIKKworICAgICJbXiJdKi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlci8yL2NjIgorCisgIGlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJVTklYLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJVTklYLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzg0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlclVOSVguY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoRU5We1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU2VsZWN0Q29tcGlsZXIvMToke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU2VsZWN0Q29tcGlsZXIvMjokRU5We1BBVEh9IikKK3Vuc2V0KEVOVntDQ30pCitlbmFibGVfbGFuZ3VhZ2UoQykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlcldpbmRvd3MtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlcldpbmRvd3MtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJXaW5kb3dzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlcldpbmRvd3Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGI1MDZlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJXaW5kb3dzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw2IEBACiteQ01ha2UgRXJyb3IgYXQgLiovTW9kdWxlcy9DTWFrZVRlc3RDQ29tcGlsZXIuY21ha2U6WzAtOV0rIFwobWVzc2FnZVwpOgorICBUaGUgQyBjb21waWxlcgorCisgICAgIlteIl0qL1Rlc3RzL1J1bkNNYWtlL05pbmphL1NlbGVjdENvbXBpbGVyLzEvZ2NjIgorCisgIGlzIG5vdCBhYmxlIHRvIGNvbXBpbGUgYSBzaW1wbGUgdGVzdCBwcm9ncmFtLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJXaW5kb3dzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvU2VsZWN0Q29tcGlsZXJXaW5kb3dzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YTdlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9TZWxlY3RDb21waWxlcldpbmRvd3MuY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQoRU5We1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU2VsZWN0Q29tcGlsZXIvMTske0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU2VsZWN0Q29tcGlsZXIvMjskRU5We1BBVEh9IikKK3Vuc2V0KEVOVntDQ30pCitlbmFibGVfbGFuZ3VhZ2UoQykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL2FwcC5jcHAgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9hcHAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzgwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYS9hcHAuY3BwCkBAIC0wLDAgKzEsNiBAQAoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgKHZvaWQpYXJnYzsKKyAgKHZvaWQpYXJndjsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYS9hcHBfcXQuY3BwIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvYXBwX3F0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDJjNjcyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvYXBwX3F0LmNwcApAQCAtMCwwICsxLDExIEBACisjaW5jbHVkZSA8UU9iamVjdD4KKworY2xhc3MgTWFuZ28gOiBwdWJsaWMgUU9iamVjdAoreworICBRX09CSkVDVAorcHVibGljOgorUV9TSUdOQUxTOgorICB2b2lkIGVhdEZydWl0KCk7Cit9OworCisjaW5jbHVkZSAiYXBwX3F0Lm1vYyIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphL3NpbXBsZV9saWIuY3BwIGIvVGVzdHMvUnVuQ01ha2UvTmluamEvc2ltcGxlX2xpYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4ZDY4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphL3NpbXBsZV9saWIuY3BwCkBAIC0wLDAgKzEsNiBAQAorI2lmZGVmIF9XSU4zMgorX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZW5kaWYKKyAgdm9pZCBkdW1teV9zeW1ib2woKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy1hbGwtY2xlYW4tbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0FkZGl0aW9uYWxDbGVhbkZpbGVzLWFsbC1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTJkYzJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy1hbGwtY2xlYW4tbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgIyBJbnRlbnRpb25hbGx5IGVtcHR5CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQWRkaXRpb25hbENsZWFuRmlsZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0FkZGl0aW9uYWxDbGVhbkZpbGVzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDEyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0FkZGl0aW9uYWxDbGVhbkZpbGVzLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9nbG9iYWwudHh0CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0RlYnVnLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9SZWxlYXNlLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9NaW5TaXplUmVsLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9SZWxXaXRoRGViSW5mby50eHQKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTEyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0FkZGl0aW9uYWxDbGVhbkZpbGVzLXJlbGVhc2UtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw2IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0RlYnVnLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9NaW5TaXplUmVsLnR4dAorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9SZWxXaXRoRGViSW5mby50eHQKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9BZGRpdGlvbmFsQ2xlYW5GaWxlcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQWRkaXRpb25hbENsZWFuRmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzYTQ5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQWRkaXRpb25hbENsZWFuRmlsZXMuY21ha2UKQEAgLTAsMCArMSwzIEBACitmaWxlKEdFTkVSQVRFIE9VVFBVVCAkPENPTkZJRz4udHh0IENPTlRFTlQgIiQ8Q09ORklHPlxuIikKK2ZpbGUoVE9VQ0ggJHtDTUFLRV9CSU5BUllfRElSfS9nbG9iYWwudHh0KQorc2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzKFBST1BFUlRJRVMgQURESVRJT05BTF9DTEVBTl9GSUxFUyAiJDxDT05GSUc+LnR4dDtnbG9iYWwudHh0IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQXV0b01vY0V4ZWN1dGFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0F1dG9Nb2NFeGVjdXRhYmxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MGUxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0F1dG9Nb2NFeGVjdXRhYmxlLmNtYWtlCkBAIC0wLDAgKzEsMTAgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfZXhlY3V0YWJsZShiYWRtb2MgYmFkbW9jLmMpCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhiYWRtb2MgUFJJVkFURSAiQ09ORklHPVwiJDxDT05GSUc+XCIiKQorCithZGRfZXhlY3V0YWJsZShleGUgbWFpbi5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGV4ZSBQUk9QRVJUSUVTCisgIEFVVE9NT0MgT04KKyAgQVVUT01PQ19FWEVDVVRBQkxFICQ8VEFSR0VUX0ZJTEU6YmFkbW9jPgorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjMyZmZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLXJlbGVhc2UtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLXJlbGVhc2UtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlNjk4NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ2xlYW4tcmVsZWFzZS1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDE2IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfU09OQU1FX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19teW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9leGVhbGxfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9FWEVfRklMRV9leGVhbGxfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlYWxsX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVub3RhbGxfUmVsZWFzZX0KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DbGVhbi1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DbGVhbi1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjNmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLXJlbGVhc2UtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZWFsbF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVub3RhbGxfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlvYmpfUmVsZWFzZX0KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DbGVhbi1yZWxlYXNlLW5vdGFsbC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ2xlYW4tcmVsZWFzZS1ub3RhbGwtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkNmE3OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ2xlYW4tcmVsZWFzZS1ub3RhbGwtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxNiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX1NPTkFNRV9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX215bGliX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfZXhlYWxsX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfRVhFX0ZJTEVfZXhlYWxsX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZWFsbF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9leGVub3RhbGxfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlbm90YWxsX1JlbGVhc2V9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ2xlYW4uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNThkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NsZWFuLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfZXhlY3V0YWJsZShleGVhbGwgbWFpbi5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGV4ZWFsbCBQUk9QRVJUSUVTIFZFUlNJT04gMS4wLjApCithZGRfZXhlY3V0YWJsZShleGVub3RhbGwgbWFpbi5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGV4ZW5vdGFsbCBQUk9QRVJUSUVTIEVYQ0xVREVfRlJPTV9BTEwgVFJVRSkKKworYWRkX2xpYnJhcnkobXlsaWIgU0hBUkVEIHNpbXBsZWxpYi5jKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKG15bGliIFBST1BFUlRJRVMKKyAgVkVSU0lPTiAxLjAuMAorICBTT1ZFUlNJT04gMQorICApCisKK2FkZF9saWJyYXJ5KG15b2JqIE9CSkVDVCBzaW1wbGVsaWIuYykKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyhleGVhbGwgZXhlbm90YWxsIG15bGliIG15b2JqKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Db21tb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0NvbW1vbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzBkODJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Db21tb24uY21ha2UKQEAgLTAsMCArMSw2MiBAQAorZnVuY3Rpb24oZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKQorICBzZXQoY29udGVudCkKKyAgZm9yZWFjaCh0Z3QgSU4gTElTVFMgQVJHTikKKyAgICBnZXRfcHJvcGVydHkodHlwZSBUQVJHRVQgJHt0Z3R9IFBST1BFUlRZIFRZUEUpCisKKyAgICBpZihOT1QgdHlwZSBTVFJFUVVBTCAiT0JKRUNUX0xJQlJBUlkiKQorICAgICAgc2V0KGZpbGUgIiBbPT1bJDxUQVJHRVRfRklMRToke3RndH0+XT09XSIpCisgICAgICBzZXQoZmlsZW5hbWUgIiBbPT1bJDxUQVJHRVRfRklMRV9OQU1FOiR7dGd0fT5dPT1dIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChmaWxlKQorICAgICAgc2V0KGZpbGVuYW1lKQorICAgIGVuZGlmKCkKKyAgICBzdHJpbmcoQVBQRU5EIGNvbnRlbnQgInNldChUQVJHRVRfRklMRV8ke3RndH1fJDxDT05GSUc+JHtmaWxlfSlcbiIpCisgICAgc3RyaW5nKEFQUEVORCBjb250ZW50ICJzZXQoVEFSR0VUX0ZJTEVfTkFNRV8ke3RndH1fJDxDT05GSUc+JHtmaWxlbmFtZX0pXG4iKQorCisgICAgaWYodHlwZSBNQVRDSEVTICJeKFNUQVRJQ3xNT0RVTEV8U0hBUkVEKV9MSUJSQVJZJCIpCisgICAgICBzZXQobGlua2VyX2ZpbGUgIiBbPT1bJDxUQVJHRVRfTElOS0VSX0ZJTEU6JHt0Z3R9Pl09PV0iKQorICAgICAgc2V0KGxpbmtlcl9maWxlbmFtZSAiIFs9PVskPFRBUkdFVF9MSU5LRVJfRklMRV9OQU1FOiR7dGd0fT5dPT1dIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChsaW5rZXJfZmlsZSkKKyAgICAgIHNldChsaW5rZXJfZmlsZW5hbWUpCisgICAgZW5kaWYoKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9MSU5LRVJfRklMRV8ke3RndH1fJDxDT05GSUc+JHtsaW5rZXJfZmlsZX0pXG4iKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9MSU5LRVJfRklMRV9OQU1FXyR7dGd0fV8kPENPTkZJRz4ke2xpbmtlcl9maWxlbmFtZX0pXG4iKQorCisgICAgaWYoTk9UIFdJTjMyIEFORCBOT1QgQ1lHV0lOIEFORCB0eXBlIE1BVENIRVMgIl4oU0hBUkVEX0xJQlJBUlkpJCIpCisgICAgICBzZXQoc29uYW1lX2ZpbGUgIiBbPT1bJDxUQVJHRVRfU09OQU1FX0ZJTEU6JHt0Z3R9Pl09PV0iKQorICAgICAgc2V0KHNvbmFtZV9maWxlbmFtZSAiIFs9PVskPFRBUkdFVF9TT05BTUVfRklMRV9OQU1FOiR7dGd0fT5dPT1dIikKKyAgICBlbHNlKCkKKyAgICAgIHNldChzb25hbWVfZmlsZSkKKyAgICAgIHNldChzb25hbWVfZmlsZW5hbWUpCisgICAgZW5kaWYoKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9TT05BTUVfRklMRV8ke3RndH1fJDxDT05GSUc+JHtzb25hbWVfZmlsZX0pXG4iKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9TT05BTUVfRklMRV9OQU1FXyR7dGd0fV8kPENPTkZJRz4ke3NvbmFtZV9maWxlbmFtZX0pXG4iKQorCisgICAgaWYodHlwZSBNQVRDSEVTICJeKEVYRUNVVEFCTEUpJCIpCisgICAgICBzZXQoZXhlX2ZpbGUgIiBbPT1bJDxUQVJHRVRfRklMRV9ESVI6JHt0Z3R9Pi8kPFRBUkdFVF9GSUxFX1BSRUZJWDoke3RndH0+JDxUQVJHRVRfRklMRV9CQVNFX05BTUU6JHt0Z3R9PiQ8VEFSR0VUX0ZJTEVfU1VGRklYOiR7dGd0fT5dPT1dIikKKyAgICAgIHNldChleGVfZmlsZW5hbWUgIiBbPT1bJDxUQVJHRVRfRklMRV9QUkVGSVg6JHt0Z3R9PiQ8VEFSR0VUX0ZJTEVfQkFTRV9OQU1FOiR7dGd0fT4kPFRBUkdFVF9GSUxFX1NVRkZJWDoke3RndH0+XT09XSIpCisKKyAgICAgIGlmKFdJTjMyKQorICAgICAgICBzZXQoZXhlX2xpYl9maWxlICIgWz09WyQ8VEFSR0VUX0ZJTEVfRElSOiR7dGd0fT4vJDxUQVJHRVRfRklMRV9QUkVGSVg6JHt0Z3R9PiQ8VEFSR0VUX0ZJTEVfQkFTRV9OQU1FOiR7dGd0fT4ubGliXT09XSIpCisgICAgICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9FWEVfTElCX0ZJTEVfJHt0Z3R9XyQ8Q09ORklHPiR7ZXhlX2xpYl9maWxlfSlcbiIpCisgICAgICBlbmRpZigpCisgICAgZWxzZSgpCisgICAgICBzZXQoZXhlX2ZpbGUpCisgICAgICBzZXQoZXhlX2ZpbGVuYW1lKQorICAgIGVuZGlmKCkKKyAgICBzdHJpbmcoQVBQRU5EIGNvbnRlbnQgInNldChUQVJHRVRfRVhFX0ZJTEVfJHt0Z3R9XyQ8Q09ORklHPiR7ZXhlX2ZpbGV9KVxuIikKKyAgICBzdHJpbmcoQVBQRU5EIGNvbnRlbnQgInNldChUQVJHRVRfRVhFX0ZJTEVfTkFNRV8ke3RndH1fJDxDT05GSUc+JHtleGVfZmlsZW5hbWV9KVxuIikKKworICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAic2V0KFRBUkdFVF9PQkpFQ1RfRklMRVNfJHt0Z3R9XyQ8Q09ORklHPiBbPT1bJDxUQVJHRVRfT0JKRUNUUzoke3RndH0+XT09XSlcbiIpCisgIGVuZGZvcmVhY2goKQorCisgIGZpbGUoR0VORVJBVEUgT1VUUFVUICIke0NNQUtFX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlc18kPENPTkZJRz4uY21ha2UiIENPTlRFTlQgIiR7Y29udGVudH0iKQorCisgIHNldChjb250ZW50KQorICBmb3JlYWNoKGNvbmZpZyBJTiBMSVNUUyBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTKQorICAgIHN0cmluZyhBUFBFTkQgY29udGVudCAiaW5jbHVkZShcJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS90YXJnZXRfZmlsZXNfJHtjb25maWd9LmNtYWtlKVxuIikKKyAgZW5kZm9yZWFjaCgpCisKKyAgZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UiICIke2NvbnRlbnR9IikKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VkYVNpbXBsZS1hbGwtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUtYWxsLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjY4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUtYWxsLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjEgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VkYVNpbXBsZS1kZWJ1Zy10YXJnZXQtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUtZGVidWctdGFyZ2V0LWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZGI1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUtZGVidWctdGFyZ2V0LWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjggQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlY3VkYWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9FWEVfTElCX0ZJTEVfc2ltcGxlY3VkYWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlY3VkYXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVjdWRhc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfRGVidWd9CisKKyAgRVhDTFVERQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlY3VkYWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWN1ZGFvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVjdWRhb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1ZGFTaW1wbGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBkOGExYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VkYVNpbXBsZS5jbWFrZQpAQCAtMCwwICsxLDIyIEBACitjbWFrZV9wb2xpY3koU0VUIENNUDAxMDQgTkVXKQorZW5hYmxlX2xhbmd1YWdlKENVREEpCitmaWxlKFRPVUNIICR7Q01BS0VfQklOQVJZX0RJUn0vZW1wdHkuY21ha2UpCisKK2FkZF9saWJyYXJ5KHNpbXBsZWN1ZGFvYmogT0JKRUNUIHNpbXBsZWxpYi5jdSkKK3NldF90YXJnZXRfcHJvcGVydGllcyhzaW1wbGVjdWRhb2JqCisgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUworICAgICAgICAgICAgICAgICAgICAgIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgT04pCisKK2FkZF9saWJyYXJ5KHNpbXBsZWN1ZGFzaGFyZWQgU0hBUkVEICkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzaW1wbGVjdWRhc2hhcmVkIFBSSVZBVEUgc2ltcGxlY3VkYW9iaikKK3NldF90YXJnZXRfcHJvcGVydGllcyhzaW1wbGVjdWRhb2JqIHNpbXBsZWN1ZGFzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTCisgICAgICAgICAgICAgICAgICAgICAgQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04gT04pCisKK2FkZF9leGVjdXRhYmxlKHNpbXBsZWN1ZGFleGUgbWFpbi5jdSApCit0YXJnZXRfbGlua19saWJyYXJpZXMoc2ltcGxlY3VkYWV4ZSBQUklWQVRFIHNpbXBsZWN1ZGFzaGFyZWQpCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9Db21tb24uY21ha2UpCitnZW5lcmF0ZV9vdXRwdXRfZmlsZXMoc2ltcGxlY3VkYWV4ZSBzaW1wbGVjdWRhc2hhcmVkIHNpbXBsZWN1ZGFvYmopCisKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSIgInNldChHRU5FUkFURURfRklMRVMgWz09WyR7Q01BS0VfQklOQVJZX0RJUn0vZW1wdHkuY21ha2VdPT1dKVxuIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZERlcGZpbGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmREZXBmaWxlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OTViMTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmREZXBmaWxlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorc2V0KGxvZyAiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9DdXN0b21Db21tYW5kRGVwZmlsZS1idWlsZC9DTWFrZUZpbGVzL2ltcGwtRGVidWcubmluamEiKQorZmlsZShSRUFEICIke2xvZ30iIGJ1aWxkX2ZpbGUpCitpZihOT1QgIiR7YnVpbGRfZmlsZX0iIE1BVENIRVMgImRlcGZpbGUgPSB0ZXN0XFwuZCIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTG9nIGZpbGU6XG4gJHtsb2d9XG5kb2VzIG5vdCBoYXZlIGV4cGVjdGVkIGxpbmU6IGRlcGZpbGUgPSB0ZXN0LmQiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kRGVwZmlsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZERlcGZpbGUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0MjY3MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZERlcGZpbGUuY21ha2UKQEAgLTAsMCArMSw5IEBACithZGRfY3VzdG9tX2NvbW1hbmQoCisgIE9VVFBVVCBtYWluLmNvcHkuYworICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiAtRSBjb3B5CisgICAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9tYWluLmMiCisgICAgICAgICAgbWFpbi5jb3B5LmMKKyAgV09SS0lOR19ESVJFQ1RPUlkgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSIKKyAgREVQRklMRSAidGVzdC5kIgorICApCithZGRfY3VzdG9tX3RhcmdldChjb3B5IEFMTCBERVBFTkRTICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbWFpbi5jb3B5LmMiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmRiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzOCBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7Q09ORklHX0ZJTEVTfQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0b3JfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdGVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9nZW5lcmF0b3JsaWJfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfRGVidWd9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctY2xlYW4tbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctY2xlYW4tbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmNDJjMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDM3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtDT05GSUdfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdGVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWdlbmVyYXRlZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLWRlYnVnLWdlbmVyYXRlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NWQ0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctZ2VuZXJhdGVkLXN0ZG91dC50eHQKQEAgLTAsMCArMSwxMiBAQAorXkdlbmVyYXRvciBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogRGVidWcKK0dlbmVyYXRvciBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IERlYnVnCitHZW5lcmF0b3IgbGlicmFyeSBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogRGVidWcKK0dlbmVyYXRvciBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogRGVidWcKK0dlbmVyYXRvciBvYmplY3QgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IERlYnVnCitHZW5lcmF0b3Igb2JqZWN0IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogRGVidWcKK0dlbmVyYXRlZCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogRGVidWcKK0dlbmVyYXRlZCBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IERlYnVnCitHZW5lcmF0ZWQgbGlicmFyeSBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogRGVidWcKK0dlbmVyYXRlZCBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogRGVidWcKK0dlbmVyYXRlZCBvYmplY3QgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IERlYnVnCitHZW5lcmF0ZWQgb2JqZWN0IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogRGVidWckCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2N2Y1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQzIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtDT05GSUdfRklMRVN9CisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0b3JsaWJfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfZ2VuZXJhdG9ybGliX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0b3JfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctaW4tcmVsZWFzZS1ncmFwaC1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWNsZWFuLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNGNiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctaW4tcmVsZWFzZS1ncmFwaC1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDM1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtDT05GSUdfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9ybGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfZ2VuZXJhdG9ybGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9SZWxlYXNlfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctaW4tcmVsZWFzZS1ncmFwaC1nZW5lcmF0ZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWdlbmVyYXRlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOWFiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItZGVidWctaW4tcmVsZWFzZS1ncmFwaC1nZW5lcmF0ZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDEyIEBACiteR2VuZXJhdG9yIGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0b3IgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlCitHZW5lcmF0b3IgbGlicmFyeSBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogUmVsZWFzZQorR2VuZXJhdG9yIGxpYnJhcnkgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlCitHZW5lcmF0b3Igb2JqZWN0IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0b3Igb2JqZWN0IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogUmVsZWFzZQorR2VuZXJhdGVkIGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdGVkIGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogRGVidWcKK0dlbmVyYXRlZCBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdGVkIGxpYnJhcnkgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZworR2VuZXJhdGVkIG9iamVjdCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogRGVidWcKK0dlbmVyYXRlZCBvYmplY3QgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhNmQ2OAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWNsZWFuLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjkgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0NPTkZJR19GSUxFU30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtZ2VuZXJhdGVkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1nZW5lcmF0ZWQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzZlYzUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtZ2VuZXJhdGVkLXN0ZG91dC50eHQKQEAgLTAsMCArMSwxMiBAQAorXkdlbmVyYXRvciBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogUmVsZWFzZQorR2VuZXJhdG9yIGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogUmVsZWFzZQorR2VuZXJhdG9yIGxpYnJhcnkgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IFJlbGVhc2UKK0dlbmVyYXRvciBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogUmVsZWFzZQorR2VuZXJhdG9yIG9iamVjdCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogUmVsZWFzZQorR2VuZXJhdG9yIG9iamVjdCBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IFJlbGVhc2UKK0dlbmVyYXRlZCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogUmVsZWFzZQorR2VuZXJhdGVkIGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogUmVsZWFzZQorR2VuZXJhdGVkIGxpYnJhcnkgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IFJlbGVhc2UKK0dlbmVyYXRlZCBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogUmVsZWFzZQorR2VuZXJhdGVkIG9iamVjdCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogUmVsZWFzZQorR2VuZXJhdGVkIG9iamVjdCBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6IFJlbGVhc2UkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1pbi1kZWJ1Zy1ncmFwaC1nZW5lcmF0ZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWluLWRlYnVnLWdyYXBoLWdlbmVyYXRlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MzkyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1pbi1kZWJ1Zy1ncmFwaC1nZW5lcmF0ZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDEyIEBACiteR2VuZXJhdG9yIGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdG9yIGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogRGVidWcKK0dlbmVyYXRvciBsaWJyYXJ5IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBEZWJ1ZworR2VuZXJhdG9yIGxpYnJhcnkgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZworR2VuZXJhdG9yIG9iamVjdCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogRGVidWcKK0dlbmVyYXRvciBvYmplY3QgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBEZWJ1ZworR2VuZXJhdGVkIGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0ZWQgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlCitHZW5lcmF0ZWQgbGlicmFyeSBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogUmVsZWFzZQorR2VuZXJhdGVkIGxpYnJhcnkgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBSZWxlYXNlCitHZW5lcmF0ZWQgb2JqZWN0IGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiBSZWxlYXNlCitHZW5lcmF0ZWQgb2JqZWN0IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogUmVsZWFzZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWluLWRlYnVnLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtaW4tZGVidWctZ3JhcGgtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmMzkyZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWluLWRlYnVnLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDQgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0NPTkZJR19GSUxFU30KKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdG9yX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9nZW5lcmF0b3JsaWJfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdGVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2VtcHR5b2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItcmVsZWFzZS1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTFhNmE3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLXJlbGVhc2UtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0NiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7Q09ORklHX0ZJTEVTfQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0b3JfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdGVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9nZW5lcmF0b3JsaWJfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcmxpYl9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX2dlbmVyYXRvcl9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfZ2VuZXJhdGVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9nZW5lcmF0b3JsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9yb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0ZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdG9ybGliX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19lbXB0eW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcl9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZ2VuZXJhdGVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19nZW5lcmF0b3JsaWJfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2dlbmVyYXRvcm9ial9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZW1wdHlvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGFjYTVlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kR2VuZXJhdG9yLmNtYWtlCkBAIC0wLDAgKzEsNTYgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfbGlicmFyeShnZW5lcmF0b3JsaWIgU1RBVElDIGdlbmVyYXRvcmxpYi5jKQorYWRkX2xpYnJhcnkoZ2VuZXJhdG9yb2JqIE9CSkVDVCBnZW5lcmF0b3JvYmouYykKK2FkZF9saWJyYXJ5KGVtcHR5b2JqIE9CSkVDVCBlbXB0eS5jKQorYWRkX2xpYnJhcnkoZW1wdHlvYmoyIE9CSkVDVCBlbXB0eS5jKQorCithZGRfZXhlY3V0YWJsZShnZW5lcmF0b3IgZ2VuZXJhdG9yLmMgJDxUQVJHRVRfT0JKRUNUUzpnZW5lcmF0b3JvYmo+KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGdlbmVyYXRvciBQUklWQVRFIGdlbmVyYXRvcmxpYikKKworYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCBnZW5lcmF0ZWQuYyBDT01NQU5EIGdlbmVyYXRvciBnZW5lcmF0ZWQuYykKK2FkZF9leGVjdXRhYmxlKGdlbmVyYXRlZCAke0NNQUtFX0JJTkFSWV9ESVJ9L2dlbmVyYXRlZC5jICQ8VEFSR0VUX09CSkVDVFM6Z2VuZXJhdG9yb2JqPiAkPFRBUkdFVF9PQkpFQ1RTOmVtcHR5b2JqPikKK3RhcmdldF9saW5rX2xpYnJhcmllcyhnZW5lcmF0ZWQgUFJJVkFURSBnZW5lcmF0b3JsaWIpCisKK2ZpbGUoR0VORVJBVEUgT1VUUFVUIGluY2x1ZGUvZ2VuZXgvJDxDT05GSUc+L2dlbmV4X2NvbmZpZy5oIENPTlRFTlQKKyIjaWZuZGVmIEdFTkVYX0NPTkZJR19ICisjZGVmaW5lIEdFTkVYX0NPTkZJR19ICisKKyNkZWZpbmUgR0VORVhfQ09ORklHX0lOQ0xVREVfRElSIFwiJDxDT05GSUc+XCIKKworI2VuZGlmIC8qIEdFTkVYX0NPTkZJR19IICovCisiKQorZmlsZShHRU5FUkFURSBPVVRQVVQgaW5jbHVkZS9pbnRkaXIvJDxDT05GSUc+L2ludGRpcl9jb25maWcuaCBDT05URU5UCisiI2lmbmRlZiBJTlRESVJfQ09ORklHX0gKKyNkZWZpbmUgSU5URElSX0NPTkZJR19ICisKKyNkZWZpbmUgSU5URElSX0NPTkZJR19JTkNMVURFX0RJUiBcIiQ8Q09ORklHPlwiCisKKyNlbmRpZiAvKiBJTlRESVJfQ09ORklHX0ggKi8KKyIpCisKK2ZvcmVhY2goZyBnZW5lcmF0b3JsaWIgZ2VuZXJhdG9yb2JqIGdlbmVyYXRvciBnZW5lcmF0ZWQpCisgIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKCR7Z30gUFJJVkFURQorICAgICJHRU5FWF9DT05GSUdfREVGSU5JVElPTj1cIiQ8Q09ORklHPlwiIgorICAjIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcKKyAgIyAgIklOVERJUl9DT05GSUdfREVGSU5JVElPTj1cIiR7Q01BS0VfQ0ZHX0lOVERJUn1cIiIKKyAgICApCisgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKCR7Z30gUFJJVkFURQorICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZ2VuZXgvJDxDT05GSUc+IgorICAjIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcKKyAgIyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vaW5jbHVkZS9pbnRkaXIvJHtDTUFLRV9DRkdfSU5URElSfSIKKyAgICApCitlbmRmb3JlYWNoKCkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyhnZW5lcmF0b3JsaWIgZ2VuZXJhdG9yb2JqIGVtcHR5b2JqIGdlbmVyYXRvciBnZW5lcmF0ZWQpCisKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSIgInNldChHRU5FUkFURURfRklMRVMgWz09WyR7Q01BS0VfQklOQVJZX0RJUn0vZ2VuZXJhdGVkLmNdPT1dKVxuIikKK3NldChnZW5maWxlcykKK2ZvcmVhY2goY2ZnIERlYnVnIFJlbGVhc2UgTWluU2l6ZVJlbCBSZWxXaXRoRGViSW5mbykKKyAgbGlzdChBUFBFTkQgZ2VuZmlsZXMKKyAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZ2VuZXgvJHtjZmd9L2dlbmV4X2NvbmZpZy5oCisgICAgJHtDTUFLRV9CSU5BUllfRElSfS9pbmNsdWRlL2ludGRpci8ke2NmZ30vaW50ZGlyX2NvbmZpZy5oCisgICAgKQorZW5kZm9yZWFjaCgpCitmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UiICJzZXQoQ09ORklHX0ZJTEVTIFs9PVske2dlbmZpbGVzfV09PV0pXG4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtZGVidWctY29tbWFuZC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWRlYnVnLWNvbW1hbmQtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjNDAyMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWRlYnVnLWNvbW1hbmQtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw2IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfREVQRU5EU19TdWJkaXJDb21tYW5kfQorICAgICR7VEFSR0VUX0RFUEVORFNfVG9wQ29tbWFuZH0KKyAgKQorY2hlY2tfZmlsZV9jb250ZW50cygiJHtUQVJHRVRfREVQRU5EU19Ub3BDb21tYW5kfSIgIl5HZW5leCBjb25maWc6IERlYnVnXG5JTlRESVIgY29uZmlnOiBEZWJ1Z1xuJCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLXBvc3RidWlsZC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtcG9zdGJ1aWxkLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ODYxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLXBvc3RidWlsZC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDggQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke1RBUkdFVF9ERVBFTkRTX1N1YmRpckNvbW1hbmR9CisgICAgJHtUQVJHRVRfREVQRU5EU19Ub3BDb21tYW5kfQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfU3ViZGlyVGFyZ2V0fQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfVG9wVGFyZ2V0fQorICAgICR7VEFSR0VUX0ZJTEVfU3ViZGlyUG9zdEJ1aWxkX0RlYnVnfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1kZWJ1Zy10YXJnZXQtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1kZWJ1Zy10YXJnZXQtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4OTViMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLWRlYnVnLXRhcmdldC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDggQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke1RBUkdFVF9ERVBFTkRTX1N1YmRpckNvbW1hbmR9CisgICAgJHtUQVJHRVRfREVQRU5EU19Ub3BDb21tYW5kfQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfU3ViZGlyVGFyZ2V0fQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfVG9wVGFyZ2V0fQorICApCitjaGVja19maWxlX2NvbnRlbnRzKCIke1RBUkdFVF9CWVBST0RVQ1RTX1RvcFRhcmdldH0iICJeR2VuZXggY29uZmlnOiBEZWJ1Z1xuSU5URElSIGNvbmZpZzogRGVidWdcbiQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtZGVidWctdGFyZ2V0cG9zdGJ1aWxkLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtZGVidWctdGFyZ2V0cG9zdGJ1aWxkLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDM5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1kZWJ1Zy10YXJnZXRwb3N0YnVpbGQtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxMiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0RFUEVORFNfU3ViZGlyQ29tbWFuZH0KKyAgICAke1RBUkdFVF9ERVBFTkRTX1RvcENvbW1hbmR9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19TdWJkaXJUYXJnZXR9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19Ub3BUYXJnZXR9CisgICAgJHtUQVJHRVRfRklMRV9TdWJkaXJQb3N0QnVpbGRfRGVidWd9CisgICAgJHtUQVJHRVRfRklMRV9TdWJkaXJQb3N0QnVpbGRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1N1YmRpclBvc3RCdWlsZH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1RvcFRhcmdldFBvc3RCdWlsZH0KKyAgKQorY2hlY2tfZmlsZV9jb250ZW50cygiJHtUQVJHRVRfQllQUk9EVUNUU19Ub3BUYXJnZXRQb3N0QnVpbGR9IiAiXkdlbmV4IGNvbmZpZzogRGVidWdcbklOVERJUiBjb25maWc6IERlYnVnXG4kIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLW1pbnNpemVyZWwtY29tbWFuZC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLW1pbnNpemVyZWwtY29tbWFuZC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODEzZjAyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtbWluc2l6ZXJlbC1jb21tYW5kLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0RFUEVORFNfU3ViZGlyQ29tbWFuZH0KKyAgKQorY2hlY2tfZmlsZV9jb250ZW50cygiJHtUQVJHRVRfREVQRU5EU19TdWJkaXJDb21tYW5kfSIgIl5HZW5leCBjb25maWc6IE1pblNpemVSZWxcbklOVERJUiBjb25maWc6IE1pblNpemVSZWxcbiQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtcmVsZWFzZS1jb21tYW5kLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtcmVsZWFzZS1jb21tYW5kLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYTk3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1yZWxlYXNlLWNvbW1hbmQtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfREVQRU5EU19TdWJkaXJDb21tYW5kfQorICApCitjaGVja19maWxlX2NvbnRlbnRzKCIke1RBUkdFVF9ERVBFTkRTX1N1YmRpckNvbW1hbmR9IiAiXkdlbmV4IGNvbmZpZzogUmVsZWFzZVxuSU5URElSIGNvbmZpZzogUmVsZWFzZVxuJCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1yZWxlYXNlLXBvc3RidWlsZC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLXJlbGVhc2UtcG9zdGJ1aWxkLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTZiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1yZWxlYXNlLXBvc3RidWlsZC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDExIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfREVQRU5EU19TdWJkaXJDb21tYW5kfQorICAgICR7VEFSR0VUX0RFUEVORFNfVG9wQ29tbWFuZH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1N1YmRpclRhcmdldH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1RvcFRhcmdldH0KKyAgICAke1RBUkdFVF9GSUxFX1N1YmRpclBvc3RCdWlsZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9GSUxFX1N1YmRpclBvc3RCdWlsZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0JZUFJPRFVDVFNfU3ViZGlyUG9zdEJ1aWxkfQorICApCitjaGVja19maWxlX2NvbnRlbnRzKCIke1RBUkdFVF9CWVBST0RVQ1RTX1N1YmRpclBvc3RCdWlsZH0iICJeR2VuZXggY29uZmlnOiBSZWxlYXNlXG5JTlRESVIgY29uZmlnOiBSZWxlYXNlXG4kIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLXJlbGVhc2UtdGFyZ2V0LW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtcmVsZWFzZS10YXJnZXQtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlNzhiNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLXJlbGVhc2UtdGFyZ2V0LW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0RFUEVORFNfU3ViZGlyQ29tbWFuZH0KKyAgICAke1RBUkdFVF9ERVBFTkRTX1RvcENvbW1hbmR9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19TdWJkaXJUYXJnZXR9CisgICkKK2NoZWNrX2ZpbGVfY29udGVudHMoIiR7VEFSR0VUX0JZUFJPRFVDVFNfU3ViZGlyVGFyZ2V0fSIgIl5HZW5leCBjb25maWc6IFJlbGVhc2VcbklOVERJUiBjb25maWc6IFJlbGVhc2VcbiQiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtcmVsZWFzZS10YXJnZXRwb3N0YnVpbGQtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1yZWxlYXNlLXRhcmdldHBvc3RidWlsZC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjdkNWJlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHMtcmVsZWFzZS10YXJnZXRwb3N0YnVpbGQtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxMyBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0RFUEVORFNfU3ViZGlyQ29tbWFuZH0KKyAgICAke1RBUkdFVF9ERVBFTkRTX1RvcENvbW1hbmR9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19TdWJkaXJUYXJnZXR9CisgICAgJHtUQVJHRVRfQllQUk9EVUNUU19Ub3BUYXJnZXR9CisgICAgJHtUQVJHRVRfRklMRV9TdWJkaXJQb3N0QnVpbGRfRGVidWd9CisgICAgJHtUQVJHRVRfRklMRV9TdWJkaXJQb3N0QnVpbGRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1N1YmRpclBvc3RCdWlsZH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1RvcFRhcmdldFBvc3RCdWlsZH0KKyAgICAke1RBUkdFVF9CWVBST0RVQ1RTX1N1YmRpclRhcmdldFBvc3RCdWlsZH0KKyAgKQorY2hlY2tfZmlsZV9jb250ZW50cygiJHtUQVJHRVRfQllQUk9EVUNUU19TdWJkaXJUYXJnZXRQb3N0QnVpbGR9IiAiXkdlbmV4IGNvbmZpZzogUmVsZWFzZVxuSU5URElSIGNvbmZpZzogUmVsZWFzZVxuJCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYjI0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy5jbWFrZQpAQCAtMCwwICsxLDM5IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworZmlsZShSRU1PVkUgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzX2N1c3RvbS5jbWFrZSIpCisKK2Z1bmN0aW9uKGdldF93cml0ZV9maWxlX2NvbW1hbmQgdmFyIGZpbGVuYW1lKQorICBzZXQoJHt2YXJ9ICR7Q01BS0VfQ09NTUFORH0gLURPVVRQVVRfRklMRT0ke2ZpbGVuYW1lfSAtREdFTkVYX0NPTkZJRz0kPENPTkZJRz4gLURJTlRESVJfQ09ORklHPSR7Q01BS0VfQ0ZHX0lOVERJUn0gLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Xcml0ZUZpbGUuY21ha2UgUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihjcmVhdGVfdGFyZ2V0cyBwcmVmaXgpCisgIGdldF93cml0ZV9maWxlX2NvbW1hbmQoY21kICR7cHJlZml4fUNvbW1hbmQudHh0KQorICBhZGRfY3VzdG9tX2NvbW1hbmQoT1VUUFVUICR7cHJlZml4fUNvbW1hbmQudHh0IENPTU1BTkQgJHtjbWR9KQorICBhZGRfY3VzdG9tX3RhcmdldCgke3ByZWZpeH1Db21tYW5kIERFUEVORFMgJHtwcmVmaXh9Q29tbWFuZC50eHQpCisKKyAgZ2V0X3dyaXRlX2ZpbGVfY29tbWFuZChjbWQgJHtwcmVmaXh9VGFyZ2V0LnR4dCkKKyAgYWRkX2N1c3RvbV90YXJnZXQoJHtwcmVmaXh9VGFyZ2V0IENPTU1BTkQgJHtjbWR9IEJZUFJPRFVDVFMgJHtwcmVmaXh9VGFyZ2V0LnR4dCkKKworICBnZXRfd3JpdGVfZmlsZV9jb21tYW5kKGNtZCAke3ByZWZpeH1Qb3N0QnVpbGQudHh0KQorICBhZGRfZXhlY3V0YWJsZSgke3ByZWZpeH1Qb3N0QnVpbGQgJHtDTUFLRV9TT1VSQ0VfRElSfS9tYWluLmMpCisgIGFkZF9jdXN0b21fY29tbWFuZChUQVJHRVQgJHtwcmVmaXh9UG9zdEJ1aWxkIENPTU1BTkQgJHtjbWR9IEJZUFJPRFVDVFMgJHtwcmVmaXh9UG9zdEJ1aWxkLnR4dCkKKworICBnZXRfd3JpdGVfZmlsZV9jb21tYW5kKGNtZCAke3ByZWZpeH1UYXJnZXRQb3N0QnVpbGQudHh0KQorICBhZGRfY3VzdG9tX3RhcmdldCgke3ByZWZpeH1UYXJnZXRQb3N0QnVpbGQpCisgIGFkZF9jdXN0b21fY29tbWFuZChUQVJHRVQgJHtwcmVmaXh9VGFyZ2V0UG9zdEJ1aWxkIENPTU1BTkQgJHtjbWR9IEJZUFJPRFVDVFMgJHtwcmVmaXh9VGFyZ2V0UG9zdEJ1aWxkLnR4dCkKKworICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90YXJnZXRfZmlsZXNfY3VzdG9tLmNtYWtlIgorInNldChUQVJHRVRfREVQRU5EU18ke3ByZWZpeH1Db21tYW5kIFs9PVske0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtwcmVmaXh9Q29tbWFuZC50eHRdPT1dKQorc2V0KFRBUkdFVF9CWVBST0RVQ1RTXyR7cHJlZml4fVRhcmdldCBbPT1bJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7cHJlZml4fVRhcmdldC50eHRdPT1dKQorc2V0KFRBUkdFVF9CWVBST0RVQ1RTXyR7cHJlZml4fVBvc3RCdWlsZCBbPT1bJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7cHJlZml4fVBvc3RCdWlsZC50eHRdPT1dKQorc2V0KFRBUkdFVF9CWVBST0RVQ1RTXyR7cHJlZml4fVRhcmdldFBvc3RCdWlsZCBbPT1bJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7cHJlZml4fVRhcmdldFBvc3RCdWlsZC50eHRdPT1dKQorIikKK2VuZGZ1bmN0aW9uKCkKKworYWRkX3N1YmRpcmVjdG9yeShDdXN0b21Db21tYW5kc0FuZFRhcmdldHNTdWJkaXIpCisKK2NyZWF0ZV90YXJnZXRzKFRvcCkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyhUb3BQb3N0QnVpbGQgU3ViZGlyUG9zdEJ1aWxkKQorZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlIiAiaW5jbHVkZShcJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS90YXJnZXRfZmlsZXNfY3VzdG9tLmNtYWtlKVxuIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzU3ViZGlyL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9DdXN0b21Db21tYW5kc0FuZFRhcmdldHNTdWJkaXIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk0ZTNlZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzU3ViZGlyL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEgQEAKK2NyZWF0ZV90YXJnZXRzKFN1YmRpcikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvRGVmYXVsdEJ1aWxkRmlsZUNvbmZpZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvRGVmYXVsdEJ1aWxkRmlsZUNvbmZpZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdiMTYwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9EZWZhdWx0QnVpbGRGaWxlQ29uZmlnLmNtYWtlCkBAIC0wLDAgKzEgQEAKKyMgSW50ZW50aW9uYWxseSBlbXB0eQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9FeGNsdWRlRnJvbUFsbC1hbGwtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0V4Y2x1ZGVGcm9tQWxsLWFsbC1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGQyNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9FeGNsdWRlRnJvbUFsbC1hbGwtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw5IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfRklMRV9yZWxlYXNlX29ubHlfdG9vbF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0VYRV9GSUxFX3JlbGVhc2Vfb25seV90b29sX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX0ZJTEVfcmVsZWFzZV9vbmx5X3Rvb2xfRGVidWd9CisgICAgJHtUQVJHRVRfRVhFX0ZJTEVfcmVsZWFzZV9vbmx5X3Rvb2xfRGVidWd9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvRXhjbHVkZUZyb21BbGwuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0V4Y2x1ZGVGcm9tQWxsLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZjg0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0V4Y2x1ZGVGcm9tQWxsLmNtYWtlCkBAIC0wLDAgKzEsMTIgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCitzZXQoQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUyAiUmVsZWFzZTtEZWJ1ZyIgQ0FDSEUgU1RSSU5HICIiKQorc2V0KENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRSAiUmVsZWFzZSIgQ0FDSEUgU1RSSU5HICIiKQorc2V0KENNQUtFX0NST1NTX0NPTkZJR1MgImFsbCIgQ0FDSEUgU1RSSU5HICIiKQorc2V0KENNQUtFX0RFRkFVTFRfQ09ORklHUyAiYWxsIiBDQUNIRSBTVFJJTkcgIiIpCisKK2FkZF9leGVjdXRhYmxlKHJlbGVhc2Vfb25seV90b29sIG1haW4uYykKK3NldF9wcm9wZXJ0eShUQVJHRVQgcmVsZWFzZV9vbmx5X3Rvb2wgUFJPUEVSVFkgRVhDTFVERV9GUk9NX0FMTCAiJDxOT1Q6JDxDT05GSUc6UmVsZWFzZT4+IikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyhyZWxlYXNlX29ubHlfdG9vbCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvRnJhbWV3b3JrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9GcmFtZXdvcmsuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRjMzVmNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvRnJhbWV3b3JrLmNtYWtlCkBAIC0wLDAgKzEsMjIgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCitzZXQoaGVhZGVyICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vaGVhZGVyLmgiKQorZmlsZShHRU5FUkFURQorICBPVVRQVVQgIiR7aGVhZGVyfSIKKyAgQ09OVEVOVCAiLyogZm9vICovIgorICBDT05ESVRJT04gIiQ8Q09ORklHOlJlbGVhc2U+IgorICApCithZGRfbGlicmFyeShmcmFtZXdvcmsgU0hBUkVEICIke2hlYWRlcn0iIGVtcHR5LmMpCisKK3NldF9wcm9wZXJ0eShUQVJHRVQgZnJhbWV3b3JrIFBST1BFUlRZIEZSQU1FV09SSyBPTikKK3NldF9wcm9wZXJ0eShUQVJHRVQgZnJhbWV3b3JrIEFQUEVORCBQUk9QRVJUWSBQVUJMSUNfSEVBREVSICR7aGVhZGVyfSkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGZyYW1ld29yayBQUk9QRVJUSUVTCisgIExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAibGliIgorICBMSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgImxpYiIKKyAgTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0UgImxpYiIKKyAgREVCVUdfUE9TVEZJWCAiX2RlYnVnIgorICApCisKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9Db21tb24uY21ha2UpCitnZW5lcmF0ZV9vdXRwdXRfZmlsZXMoZnJhbWV3b3JrKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9GcmFtZXdvcmtEZXBlbmRlbmN5QXV0b2dlbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvRnJhbWV3b3JrRGVwZW5kZW5jeUF1dG9nZW4uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlMjFiOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvRnJhbWV3b3JrRGVwZW5kZW5jeUF1dG9nZW4uY21ha2UKQEAgLTAsMCArMSwyMCBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldChDTUFLRV9MSU5LX0RFUEVORFNfTk9fU0hBUkVEIE9OKQorCitzZXQoUVRfVkVSU0lPTl9NQUpPUiA2KQorc2V0KGZha2VfbW9jX3BhdGggIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9mYWtlX21vYyIpCitmaWxlKFdSSVRFICIke2Zha2VfbW9jX3BhdGh9IiAiIikKKworYWRkX2xpYnJhcnkodGVzdDEgU0hBUkVEIHNpbXBsZWxpYi5jKQorYWRkX2xpYnJhcnkodGVzdDIgU0hBUkVEIGVtcHR5LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdDIgdGVzdDEpCisKK3NldF90YXJnZXRfcHJvcGVydGllcyh0ZXN0MSB0ZXN0MiBQUk9QRVJUSUVTCisgIEZSQU1FV09SSyBPTgorICBBVVRPTU9DIE9OCisgIEFVVE9NT0NfRVhFQ1VUQUJMRSAiJHtmYWtlX21vY19wYXRofSIKKyAgKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ29tbW9uLmNtYWtlKQorZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKHRlc3QxIHRlc3QyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLWFsbC1pbnN0YWxsLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLWFsbC1pbnN0YWxsLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODhhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0luc3RhbGwtYWxsLWluc3RhbGwtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzOSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0ZJTEVfZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfbXlsaWJfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX215bGliX0RlYnVnfQorCisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwvYmluL0RlYnVnLyR7VEFSR0VUX0ZJTEVfTkFNRV9leGVfRGVidWd9CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwvbGliL0RlYnVnLyR7VEFSR0VUX0ZJTEVfTkFNRV9teWxpYl9EZWJ1Z30KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvRGVidWcvJHtUQVJHRVRfTElOS0VSX0ZJTEVfTkFNRV9teWxpYl9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX215bGliX1JlbGVhc2V9CisKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9iaW4vUmVsZWFzZS8ke1RBUkdFVF9GSUxFX05BTUVfZXhlX1JlbGVhc2V9CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwvbGliL1JlbGVhc2UvJHtUQVJHRVRfRklMRV9OQU1FX215bGliX1JlbGVhc2V9CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwvbGliL1JlbGVhc2UvJHtUQVJHRVRfTElOS0VSX0ZJTEVfTkFNRV9teWxpYl9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9leGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfbXlsaWJfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX215bGliX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwvYmluL1JlbFdpdGhEZWJJbmZvLyR7VEFSR0VUX0ZJTEVfTkFNRV9leGVfUmVsV2l0aERlYkluZm99CisgICAgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwvbGliL1JlbFdpdGhEZWJJbmZvLyR7VEFSR0VUX0ZJTEVfTkFNRV9teWxpYl9SZWxXaXRoRGViSW5mb30KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvUmVsV2l0aERlYkluZm8vJHtUQVJHRVRfTElOS0VSX0ZJTEVfTkFNRV9teWxpYl9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19teWxpYl9NaW5TaXplUmVsfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0luc3RhbGwtZGVidWctaW4tcmVsZWFzZS1ncmFwaC1pbnN0YWxsLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtaW5zdGFsbC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzE1YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtaW5zdGFsbC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMxIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfRklMRV9leGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9teWxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfRGVidWd9CisKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9iaW4vRGVidWcvJHtUQVJHRVRfRklMRV9OQU1FX2V4ZV9EZWJ1Z30KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvRGVidWcvJHtUQVJHRVRfRklMRV9OQU1FX215bGliX0RlYnVnfQorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2xpYi9EZWJ1Zy8ke1RBUkdFVF9MSU5LRVJfRklMRV9OQU1FX215bGliX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9leGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfUmVsZWFzZX0KKworICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2Jpbi9SZWxlYXNlLyR7VEFSR0VUX0ZJTEVfTkFNRV9leGVfUmVsZWFzZX0KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvUmVsZWFzZS8ke1RBUkdFVF9GSUxFX05BTUVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvUmVsZWFzZS8ke1RBUkdFVF9MSU5LRVJfRklMRV9OQU1FX215bGliX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX215bGliX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0luc3RhbGwtZGVmYXVsdC1pbnN0YWxsLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLWRlZmF1bHQtaW5zdGFsbC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzE1YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLWRlZmF1bHQtaW5zdGFsbC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMxIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfRklMRV9leGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9teWxpYl9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfRGVidWd9CisKKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9iaW4vRGVidWcvJHtUQVJHRVRfRklMRV9OQU1FX2V4ZV9EZWJ1Z30KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvRGVidWcvJHtUQVJHRVRfRklMRV9OQU1FX215bGliX0RlYnVnfQorICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2xpYi9EZWJ1Zy8ke1RBUkdFVF9MSU5LRVJfRklMRV9OQU1FX215bGliX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9leGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfUmVsZWFzZX0KKworICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2Jpbi9SZWxlYXNlLyR7VEFSR0VUX0ZJTEVfTkFNRV9leGVfUmVsZWFzZX0KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvUmVsZWFzZS8ke1RBUkdFVF9GSUxFX05BTUVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvUmVsZWFzZS8ke1RBUkdFVF9MSU5LRVJfRklMRV9OQU1FX215bGliX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX215bGliX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0luc3RhbGwtcmVsZWFzZS1pbnN0YWxsLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLXJlbGVhc2UtaW5zdGFsbC1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjgwYzg5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLXJlbGVhc2UtaW5zdGFsbC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIzIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtUQVJHRVRfRklMRV9leGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX215bGliX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfUmVsZWFzZX0KKworICAgICR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsL2Jpbi9SZWxlYXNlLyR7VEFSR0VUX0ZJTEVfTkFNRV9leGVfUmVsZWFzZX0KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvUmVsZWFzZS8ke1RBUkdFVF9GSUxFX05BTUVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbC9saWIvUmVsZWFzZS8ke1RBUkdFVF9MSU5LRVJfRklMRV9OQU1FX215bGliX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19leGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX215bGliX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19teWxpYl9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfbXlsaWJfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW5zdGFsbC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW5zdGFsbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjZlM2UwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnN0YWxsLmNtYWtlCkBAIC0wLDAgKzEsMTAgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCithZGRfZXhlY3V0YWJsZShleGUgbWFpbi5jKQorYWRkX2xpYnJhcnkobXlsaWIgU1RBVElDIHNpbXBsZWxpYi5jKQorCitpbnN0YWxsKFRBUkdFVFMgZXhlIERFU1RJTkFUSU9OIGJpbi8kPENPTkZJRz4pCitpbnN0YWxsKFRBUkdFVFMgbXlsaWIgREVTVElOQVRJT04gbGliLyQ8Q09ORklHPikKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyhleGUgbXlsaWIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS90YXJnZXRfY29tbWFuZHMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZENyb3NzQ29uZmlncy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWRDcm9zc0NvbmZpZ3MtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkQ3Jvc3NDb25maWdzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWRDcm9zc0NvbmZpZ3Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmM1ZWNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkQ3Jvc3NDb25maWdzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACiteQ01ha2UgRXJyb3I6CisgIENNQUtFX0NST1NTX0NPTkZJR1MgaXMgbm90IGEgc3Vic2V0IG9mIENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMKKworCitDTWFrZSBHZW5lcmF0ZSBzdGVwIGZhaWxlZFwuICBCdWlsZCBmaWxlcyBjYW5ub3QgYmUgcmVnZW5lcmF0ZWQgY29ycmVjdGx5XC4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWRDcm9zc0NvbmZpZ3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWRDcm9zc0NvbmZpZ3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZENyb3NzQ29uZmlncy5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9UQVJHRVRfR0VORVhfRVZBTC1uby1hcmctcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vVEFSR0VUX0dFTkVYX0VWQUwtbm8tYXJnLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0QnVpbGRGaWxlQ29uZmlnLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE5MDM4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdEJ1aWxkRmlsZUNvbmZpZy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNiBAQAorXkNNYWtlIEVycm9yOgorICBUaGUgY29uZmlndXJhdGlvbiBzcGVjaWZpZWQgYnkgQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFIFwoUmVsV2l0aERlYkluZm9cKSBpcworICBub3QgcHJlc2VudCBpbiBDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTCisKKworQ01ha2UgR2VuZXJhdGUgc3RlcCBmYWlsZWRcLiAgQnVpbGQgZmlsZXMgY2Fubm90IGJlIHJlZ2VuZXJhdGVkIGNvcnJlY3RseVwuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdEJ1aWxkRmlsZUNvbmZpZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRCdWlsZEZpbGVDb25maWcuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3RhcmdldF9jb21tYW5kcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NDcm9zcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc0Nyb3NzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRDb25maWdzQ3Jvc3Mtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRDb25maWdzQ3Jvc3Mtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzJkZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NDcm9zcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorXkNNYWtlIEVycm9yOgorICBDTUFLRV9ERUZBVUxUX0NPTkZJR1MgaXMgbm90IGEgc3Vic2V0IG9mIENNQUtFX0NST1NTX0NPTkZJR1MKKworCitDTWFrZSBHZW5lcmF0ZSBzdGVwIGZhaWxlZFwuICBCdWlsZCBmaWxlcyBjYW5ub3QgYmUgcmVnZW5lcmF0ZWQgY29ycmVjdGx5XC4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc0Nyb3NzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NDcm9zcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NDcm9zcy5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL0ludmFsaWREZWZhdWx0Q29uZmlnc05vQ3Jvc3MtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3RhcmdldF9jb21tYW5kcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NOb0Nyb3NzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRDb25maWdzTm9Dcm9zcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NOb0Nyb3NzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwOTBhMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRDb25maWdzTm9Dcm9zcy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNiBAQAorXkNNYWtlIEVycm9yOgorICBDTUFLRV9ERUZBVUxUX0NPTkZJR1MgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEUgb3IKKyAgQ01BS0VfQ1JPU1NfQ09ORklHUworCisKK0NNYWtlIEdlbmVyYXRlIHN0ZXAgZmFpbGVkXC4gIEJ1aWxkIGZpbGVzIGNhbm5vdCBiZSByZWdlbmVyYXRlZCBjb3JyZWN0bHlcLiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRDb25maWdzTm9Dcm9zcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvSW52YWxpZERlZmF1bHRDb25maWdzTm9Dcm9zcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9JbnZhbGlkRGVmYXVsdENvbmZpZ3NOb0Nyb3NzLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL05vVW51c2VkVmFyaWFibGVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Ob1VudXNlZFZhcmlhYmxlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdiMTYwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Ob1VudXNlZFZhcmlhYmxlcy5jbWFrZQpAQCAtMCwwICsxIEBACisjIEludGVudGlvbmFsbHkgZW1wdHkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUG9zdGZpeEFuZExvY2F0aW9uLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1Bvc3RmaXhBbmRMb2NhdGlvbi1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NTdiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1Bvc3RmaXhBbmRMb2NhdGlvbi1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNyBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9teWxpYl9SZWxlYXNlfQorICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfbXlsaWJfRGVidWd9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUG9zdGZpeEFuZExvY2F0aW9uLXJlbGVhc2UtaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUG9zdGZpeEFuZExvY2F0aW9uLXJlbGVhc2UtaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzQ1ZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9Qb3N0Zml4QW5kTG9jYXRpb24tcmVsZWFzZS1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7VEFSR0VUX0ZJTEVfbXlsaWJfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9teWxpYl9SZWxlYXNlfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1Bvc3RmaXhBbmRMb2NhdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUG9zdGZpeEFuZExvY2F0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZWYzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1Bvc3RmaXhBbmRMb2NhdGlvbi5jbWFrZQpAQCAtMCwwICsxLDE4IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KENNQUtFX0RFQlVHX1BPU1RGSVggIl9kZWJ1ZyIpCisKK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfREVCVUcgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUllfUkVMRUFTRSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vYmluKQorc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWV9ERUJVRyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vYmluKQorc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWV9SRUxFQVNFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9iaW4pCitzZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCitzZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZX0RFQlVHICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCitzZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZX1JFTEVBU0UgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYikKKworYWRkX2xpYnJhcnkobXlsaWIgU0hBUkVEIHNpbXBsZWxpYi5jKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ29tbW9uLmNtYWtlKQorZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKG15bGliKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9RdDUtZGVidWctaW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUXQ1LWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4ZGYxMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUXQ1LWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtBVVRPR0VOX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9leGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX2V4ZV9EZWJ1Z30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9RdDUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1F0NS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTFjN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9RdDUuY21ha2UKQEAgLTAsMCArMSwzMCBAQAorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpCisKK3NldChDTUFLRV9BVVRPTU9DIE9OKQorc2V0KENNQUtFX0FVVE9NT0NfQ09NUElMRVJfUFJFREVGSU5FUyBPRkYpCisKK2FkZF9leGVjdXRhYmxlKGV4ZSBxdDUuY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGV4ZSBQUklWQVRFIFF0NTo6Q29yZSkKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NvbW1vbi5jbWFrZSkKK2dlbmVyYXRlX291dHB1dF9maWxlcyhleGUpCisKK3NldChtb2Nfd3JpdGVzX2RlcGZpbGVzIDApCitpZihRdDVDb3JlX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMICI1LjE1LjAiKQorICBzZXQobW9jX3dyaXRlc19kZXBmaWxlcyAxKQorZW5kaWYoKQorCitzZXQoYXV0b2dlbl9maWxlcyAiJHtDTUFLRV9CSU5BUllfRElSfS9leGVfYXV0b2dlbi9tb2NzX2NvbXBpbGF0aW9uLmNwcCIpCitpZihtb2Nfd3JpdGVzX2RlcGZpbGVzKQorICBsaXN0KEFQUEVORCBhdXRvZ2VuX2ZpbGVzICIke0NNQUtFX0JJTkFSWV9ESVJ9L2V4ZV9hdXRvZ2VuL2RlcHMiKQorICBsaXN0KEFQUEVORCBhdXRvZ2VuX2ZpbGVzICIke0NNQUtFX0JJTkFSWV9ESVJ9L2V4ZV9hdXRvZ2VuL3RpbWVzdGFtcCIpCitlbmRpZigpCitmb3JlYWNoKGMgSU4gTElTVFMgQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUykKKyAgbGlzdChBUFBFTkQgYXV0b2dlbl9maWxlcyAiJHtDTUFLRV9CSU5BUllfRElSfS9leGVfYXV0b2dlbi9pbmNsdWRlXyR7Y30vbW9jX3F0NS5jcHAiKQorICBpZihtb2Nfd3JpdGVzX2RlcGZpbGVzKQorICAgIGxpc3QoQVBQRU5EIGF1dG9nZW5fZmlsZXMgIiR7Q01BS0VfQklOQVJZX0RJUn0vZXhlX2F1dG9nZW4vaW5jbHVkZV8ke2N9L21vY19xdDUuY3BwLmQiKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSIgInNldChBVVRPR0VOX0ZJTEVTIFs9PVske2F1dG9nZW5fZmlsZXN9XT09XSlcbiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDk3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDMxMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCisKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3NldChSdW5DTWFrZV9HRU5FUkFUT1IgIk5pbmphIE11bHRpLUNvbmZpZyIpCitzZXQoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRyAxKQorCitmdW5jdGlvbihjaGVja19maWxlcyBkaXIpCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyhfY2hlY2tfZmlsZXMgIiIgIiIgIklOQ0xVREU7RVhDTFVERSIgJHtBUkdOfSkKKworICBzZXQoZXhwZWN0ZWQgJHtfY2hlY2tfZmlsZXNfSU5DTFVERX0pCisgIGxpc3QoRklMVEVSIGV4cGVjdGVkIEVYQ0xVREUgUkVHRVggIl4kIikKKyAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBleHBlY3RlZCkKKyAgbGlzdChTT1JUIGV4cGVjdGVkKQorCisgIGZpbGUoR0xPQl9SRUNVUlNFIGFjdHVhbCAiJHtkaXJ9LyoiKQorICBsaXN0KEZJTFRFUiBhY3R1YWwgRVhDTFVERSBSRUdFWCAiL0NNYWtlRmlsZXMvfFxcLm5pbmphJHwvQ01ha2VDYWNoZVxcLnR4dCR8L3RhcmdldF9maWxlc1teL10qXFwuY21ha2UkfC9cXC5uaW5qYV9bXi9dKiR8L2NtYWtlX2luc3RhbGxcXC5jbWFrZSR8XFwuaWxrJHxcXC5tYW5pZmVzdCR8XFwucGRiJHxcXC5leHAkfC9pbnN0YWxsX21hbmlmZXN0XFwudHh0JCIpCisgIGZvcmVhY2goZiBJTiBMSVNUUyBfY2hlY2tfZmlsZXNfSU5DTFVERSBfY2hlY2tfZmlsZXNfRVhDTFVERSkKKyAgICBpZihFWElTVFMgJHtmfSkKKyAgICAgIGxpc3QoQVBQRU5EIGFjdHVhbCAke2Z9KQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisgIGxpc3QoUkVNT1ZFX0RVUExJQ0FURVMgYWN0dWFsKQorICBsaXN0KFNPUlQgYWN0dWFsKQorCisgIGlmKE5PVCAiJHtleHBlY3RlZH0iIFNUUkVRVUFMICIke2FjdHVhbH0iKQorICAgIHN0cmluZyhSRVBMQUNFICI7IiAiXG4gICIgZXhwZWN0ZWRfZm9ybWF0dGVkICIke2V4cGVjdGVkfSIpCisgICAgc3RyaW5nKFJFUExBQ0UgIjsiICJcbiAgIiBhY3R1YWxfZm9ybWF0dGVkICIke2FjdHVhbH0iKQorICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkFjdHVhbCBmaWxlcyBkaWQgbm90IG1hdGNoIGV4cGVjdGVkXG5FeHBlY3RlZDpcbiAgJHtleHBlY3RlZF9mb3JtYXR0ZWR9XG5BY3R1YWw6XG4gICR7YWN0dWFsX2Zvcm1hdHRlZH1cbiIpCisgIGVuZGlmKCkKKworICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKGNoZWNrX2ZpbGVfY29udGVudHMgZmlsZW5hbWUgZXhwZWN0ZWQpCisgIGlmKE5PVCBFWElTVFMgIiR7ZmlsZW5hbWV9IikKKyAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGaWxlICR7ZmlsZW5hbWV9IGRvZXMgbm90IGV4aXN0XG4iKQorICBlbHNlKCkKKyAgICBmaWxlKFJFQUQgIiR7ZmlsZW5hbWV9IiBhY3R1YWwpCisgICAgaWYoTk9UIGFjdHVhbCBNQVRDSEVTICIke2V4cGVjdGVkfSIpCisgICAgICBzdHJpbmcoUkVQTEFDRSAiXG4iICJcbiAgIiBleHBlY3RlZF9mb3JtYXR0ZWQgIiR7ZXhwZWN0ZWR9IikKKyAgICAgIHN0cmluZyhSRVBMQUNFICJcbiIgIlxuICAiIGFjdHVhbF9mb3JtYXR0ZWQgIiR7YWN0dWFsfSIpCisgICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJDb250ZW50cyBvZiAke2ZpbGVuYW1lfSBkbyBub3QgbWF0Y2ggZXhwZWN0ZWRcbkV4cGVjdGVkOlxuICAke2V4cGVjdGVkX2Zvcm1hdHRlZH1cbkFjdHVhbDpcbiAgJHthY3R1YWxfZm9ybWF0dGVkfVxuIikKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKKworICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK2Z1bmN0aW9uKHJ1bl9jbWFrZV9jb25maWd1cmUgY2FzZSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7Y2FzZX0tYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIGZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIGZpbGUoTUFLRV9ESVJFQ1RPUlkgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIHJ1bl9jbWFrZSgke2Nhc2V9KQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihydW5fY21ha2VfYnVpbGQgY2FzZSBzdWZmaXggY29uZmlnKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHtjYXNlfS1idWlsZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgc2V0KHRndHMpCisgIGZvcmVhY2godGd0IElOIExJU1RTIEFSR04pCisgICAgbGlzdChBUFBFTkQgdGd0cyAtLXRhcmdldCAke3RndH0pCisgIGVuZGZvcmVhY2goKQorICBpZihjb25maWcpCisgICAgc2V0KGNvbmZpZ19hcmcgLS1jb25maWcgJHtjb25maWd9KQorICBlbHNlKCkKKyAgICBzZXQoY29uZmlnX2FyZykKKyAgZW5kaWYoKQorICBydW5fY21ha2VfY29tbWFuZCgke2Nhc2V9LSR7c3VmZml4fS1idWlsZCAiJHtDTUFLRV9DT01NQU5EfSIgLS1idWlsZCAuICR7Y29uZmlnX2FyZ30gJHt0Z3RzfSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24ocnVuX25pbmphIGNhc2Ugc3VmZml4IGZpbGUpCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke2Nhc2V9LWJ1aWxkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBydW5fY21ha2VfY29tbWFuZCgke2Nhc2V9LSR7c3VmZml4fS1uaW5qYSAiJHtSdW5DTWFrZV9NQUtFX1BST0dSQU19IiAtZiAiJHtmaWxlfSIgJHtBUkdOfSkKK2VuZGZ1bmN0aW9uKCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vU2ltcGxlLWJ1aWxkKQorIyBJTVBPUlRBTlQ6IFNldHRpbmcgUmVsV2l0aERlYkluZm8gYXMgdGhlIGZpcnN0IGl0ZW0gaW4gQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUworIyBnZW5lcmF0ZXMgYSBidWlsZC5uaW5qYSBmaWxlIHdpdGggdGhhdCBjb25maWd1cmF0aW9uCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9UmVsV2l0aERlYkluZm9cXDtEZWJ1Z1xcO1JlbGVhc2VcXDtNaW5TaXplUmVsOy1EQ01BS0VfQ1JPU1NfQ09ORklHUz1hbGwiKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShTaW1wbGUpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fY21ha2VfYnVpbGQoU2ltcGxlIGRlYnVnLXRhcmdldCBEZWJ1ZyBzaW1wbGVleGUpCitydW5fbmluamEoU2ltcGxlIGRlYnVnLXRhcmdldCBidWlsZC1EZWJ1Zy5uaW5qYSBzaW1wbGVzdGF0aWMpCitnZXRfZmlsZW5hbWVfY29tcG9uZW50KHNpbXBsZXNoYXJlZF9SZWxlYXNlICIke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfSIgTkFNRSkKK3J1bl9jbWFrZV9idWlsZChTaW1wbGUgcmVsZWFzZS1maWxlbmFtZSBSZWxlYXNlICR7c2ltcGxlc2hhcmVkX1JlbGVhc2V9KQorZmlsZShSRUxBVElWRV9QQVRIIHNpbXBsZWV4ZV9SZWxlYXNlICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iICIke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfSIpCitydW5fbmluamEoU2ltcGxlIHJlbGVhc2UtZmlsZSBidWlsZC1SZWxlYXNlLm5pbmphICR7c2ltcGxlZXhlX1JlbGVhc2V9KQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZSBhbGwtY29uZmlncyBSZWxlYXNlIHNpbXBsZXN0YXRpYzphbGwpCitydW5fbmluamEoU2ltcGxlIGRlZmF1bHQtYnVpbGQtZmlsZSBidWlsZC5uaW5qYSBzaW1wbGVleGUpCitydW5fY21ha2VfYnVpbGQoU2ltcGxlIGFsbC1jbGVhbiBSZWxlYXNlIGNsZWFuOmFsbCkKK3J1bl9jbWFrZV9idWlsZChTaW1wbGUgZGVidWctc3ViZGlyIERlYnVnIFNpbXBsZVN1YmRpci9hbGwpCitydW5fbmluamEoU2ltcGxlIHJlbGVhc2UtaW4tbWluc2l6ZXJlbC1ncmFwaC1zdWJkaXIgYnVpbGQtTWluU2l6ZVJlbC5uaW5qYSBTaW1wbGVTdWJkaXIvYWxsOlJlbGVhc2UpCitydW5fY21ha2VfYnVpbGQoU2ltcGxlIGFsbC1zdWJkaXIgUmVsZWFzZSBTaW1wbGVTdWJkaXIvYWxsOmFsbCkKK3J1bl9uaW5qYShTaW1wbGUgbWluc2l6ZXJlbC10b3AgYnVpbGQtTWluU2l6ZVJlbC5uaW5qYSBhbGwpCitydW5fY21ha2VfYnVpbGQoU2ltcGxlIGRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtdG9wIFJlbGVhc2UgYWxsOkRlYnVnKQorcnVuX25pbmphKFNpbXBsZSBhbGwtY2xlYW4tYWdhaW4gYnVpbGQtRGVidWcubmluamEgY2xlYW46YWxsKQorcnVuX25pbmphKFNpbXBsZSBhbGwtdG9wIGJ1aWxkLVJlbFdpdGhEZWJJbmZvLm5pbmphIGFsbDphbGwpCisjIExlYXZlIGVub3VnaCB0aW1lIGZvciB0aGUgdGltZXN0YW1wIHRvIGNoYW5nZSBvbiBzZWNvbmQtcmVzb2x1dGlvbiBzeXN0ZW1zCitleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHNsZWVwIDEpCitmaWxlKFRPVUNIICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZW1wdHkuY21ha2UiKQorcnVuX25pbmphKFNpbXBsZSByZWNvbmZpZ3VyZS1jb25maWcgYnVpbGQtUmVsZWFzZS5uaW5qYSBzaW1wbGVleGUpCitleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHNsZWVwIDEpCitmaWxlKFRPVUNIICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZW1wdHkuY21ha2UiKQorcnVuX25pbmphKFNpbXBsZSByZWNvbmZpZ3VyZS1ub2NvbmZpZyBidWlsZC5uaW5qYSBzaW1wbGVleGUpCitydW5fbmluamEoU2ltcGxlIGRlZmF1bHQtYnVpbGQtZmlsZS1jbGVhbiBidWlsZC5uaW5qYSBjbGVhbikKK3J1bl9uaW5qYShTaW1wbGUgZGVmYXVsdC1idWlsZC1maWxlLWNsZWFuLW1pbnNpemVyZWwgYnVpbGQubmluamEgY2xlYW46TWluU2l6ZVJlbCkKK3J1bl9uaW5qYShTaW1wbGUgZGVmYXVsdC1idWlsZC1maWxlLWFsbCBidWlsZC5uaW5qYSBhbGwpCisKK3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhcy1idWlsZCkKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUz1EZWJ1Z1xcO1JlbGVhc2VcXDtNaW5TaXplUmVsXFw7UmVsV2l0aERlYkluZm87LURDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEU9UmVsZWFzZTstRENNQUtFX0RFRkFVTFRfQ09ORklHUz1hbGw7LURDTUFLRV9DUk9TU19DT05GSUdTPWFsbCIpCitydW5fY21ha2VfY29uZmlndXJlKFNpbXBsZURlZmF1bHRCdWlsZEFsaWFzKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlKQorcnVuX25pbmphKFNpbXBsZURlZmF1bHRCdWlsZEFsaWFzIHRhcmdldCBidWlsZC5uaW5qYSBzaW1wbGVleGUpCitydW5fbmluamEoU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMgYWxsIGJ1aWxkLm5pbmphIGFsbCkKK3J1bl9uaW5qYShTaW1wbGVEZWZhdWx0QnVpbGRBbGlhcyBjbGVhbiBidWlsZC5uaW5qYSBjbGVhbikKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdC1idWlsZCkKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFPVJlbGVhc2U7LURDTUFLRV9ERUZBVUxUX0NPTkZJR1M9RGVidWdcXDtSZWxlYXNlOy1EQ01BS0VfQ1JPU1NfQ09ORklHUz1hbGwiKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShTaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fbmluamEoU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0IHRhcmdldC1jb25maWdzIGJ1aWxkLm5pbmphIHNpbXBsZWV4ZSkKKyMgSU1QT1JUQU5UOiBUaGlzIHRlc3RzIGNtYWtlIC0tYnVpbGQgLiB3aXRoIG5vIGNvbmZpZyB1c2luZyBidWlsZC5uaW5qYQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdCBhbGwtY29uZmlncyAiIiBhbGwpCitydW5fbmluamEoU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0IGFsbC1yZWx3aXRoZGViaW5mbyBidWlsZC5uaW5qYSBhbGw6UmVsV2l0aERlYkluZm8pCitydW5fbmluamEoU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0IGNsZWFuLWNvbmZpZ3MgYnVpbGQubmluamEgY2xlYW4pCisKK3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3RDcm9zcy1idWlsZCkKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFPVJlbFdpdGhEZWJJbmZvOy1EQ01BS0VfREVGQVVMVF9DT05GSUdTPWFsbDstRENNQUtFX0NST1NTX0NPTkZJR1M9RGVidWdcXDtSZWxlYXNlIikKK3J1bl9jbWFrZV9jb25maWd1cmUoU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0Q3Jvc3MpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fbmluamEoU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0Q3Jvc3MgdGFyZ2V0LWNvbmZpZ3MgYnVpbGQubmluamEgc2ltcGxlZXhlKQorCit1bnNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIpCisKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUz1EZWJ1Z1xcO1JlbGVhc2U7LURDTUFLRV9DUk9TU19DT05GSUdTPURlYnVnXFw7UmVsZWFzZVxcO1JlbFdpdGhEZWJJbmZvIikKK3J1bl9jbWFrZShJbnZhbGlkQ3Jvc3NDb25maWdzKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlOy1EQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFPVJlbFdpdGhEZWJJbmZvIikKK3J1bl9jbWFrZShJbnZhbGlkRGVmYXVsdEJ1aWxkRmlsZUNvbmZpZykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DUk9TU19DT05GSUdTPURlYnVnXFw7UmVsZWFzZTstRENNQUtFX0RFRkFVTFRfQlVJTERfVFlQRT1SZWxlYXNlOy1EQ01BS0VfREVGQVVMVF9DT05GSUdTPURlYnVnXFw7UmVsZWFzZVxcO1JlbFdpdGhEZWJJbmZvIikKK3J1bl9jbWFrZShJbnZhbGlkRGVmYXVsdENvbmZpZ3NDcm9zcykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKworc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEU9UmVsZWFzZTstRENNQUtFX0RFRkFVTFRfQ09ORklHUz1hbGwiKQorcnVuX2NtYWtlKEludmFsaWREZWZhdWx0Q29uZmlnc05vQ3Jvc3MpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCisKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfREVGQVVMVF9CVUlMRF9UWVBFPVJlbGVhc2UiKQorcnVuX2NtYWtlKERlZmF1bHRCdWlsZEZpbGVDb25maWcpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCisKK3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9TaW1wbGVOb0Nyb3NzLWJ1aWxkKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShTaW1wbGVOb0Nyb3NzKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlKQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZU5vQ3Jvc3MgZGVidWctdGFyZ2V0IERlYnVnIHNpbXBsZWV4ZSkKK3J1bl9uaW5qYShTaW1wbGVOb0Nyb3NzIGRlYnVnLXRhcmdldCBidWlsZC1EZWJ1Zy5uaW5qYSBzaW1wbGVzdGF0aWM6RGVidWcpCitydW5fbmluamEoU2ltcGxlTm9Dcm9zcyByZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLXRhcmdldCBidWlsZC1SZWxlYXNlLm5pbmphIHNpbXBsZXN0YXRpYzpSZWxXaXRoRGViSW5mbykKK3J1bl9jbWFrZV9idWlsZChTaW1wbGVOb0Nyb3NzIHJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYWxsIFJlbGVhc2UgYWxsOlJlbFdpdGhEZWJJbmZvKQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZU5vQ3Jvc3MgcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1jbGVhbiBSZWxlYXNlIGNsZWFuOlJlbFdpdGhEZWJJbmZvKQorcnVuX25pbmphKFNpbXBsZU5vQ3Jvc3MgYWxsLXRhcmdldCBidWlsZC1EZWJ1Zy5uaW5qYSBzaW1wbGVzdGF0aWM6YWxsKQorcnVuX25pbmphKFNpbXBsZU5vQ3Jvc3MgYWxsLWFsbCBidWlsZC1EZWJ1Zy5uaW5qYSBhbGw6YWxsKQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZU5vQ3Jvc3MgYWxsLWNsZWFuIERlYnVnIGNsZWFuOmFsbCkKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1NpbXBsZUNyb3NzQ29uZmlncy1idWlsZCkKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfQ1JPU1NfQ09ORklHUz1EZWJ1Z1xcO1JlbGVhc2UiKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShTaW1wbGVDcm9zc0NvbmZpZ3MpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fbmluamEoU2ltcGxlQ3Jvc3NDb25maWdzIHJlbGVhc2UtaW4tcmVsZWFzZS1ncmFwaCBidWlsZC1SZWxlYXNlLm5pbmphIHNpbXBsZWV4ZSkKK3J1bl9jbWFrZV9idWlsZChTaW1wbGVDcm9zc0NvbmZpZ3MgZGVidWctaW4tcmVsZWFzZS1ncmFwaCBSZWxlYXNlIHNpbXBsZWV4ZTpEZWJ1ZykKK3J1bl9jbWFrZV9idWlsZChTaW1wbGVDcm9zc0NvbmZpZ3MgcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaCBSZWxlYXNlIHNpbXBsZWV4ZTpSZWxXaXRoRGViSW5mbykKK3J1bl9uaW5qYShTaW1wbGVDcm9zc0NvbmZpZ3MgcmVsd2l0aGRlYmluZm8taW4tcmVsd2l0aGRlYmluZm8tZ3JhcGggYnVpbGQtUmVsV2l0aERlYkluZm8ubmluamEgc2ltcGxlZXhlOlJlbFdpdGhEZWJJbmZvKQorcnVuX25pbmphKFNpbXBsZUNyb3NzQ29uZmlncyByZWxlYXNlLWluLXJlbHdpdGhkZWJpbmZvLWdyYXBoIGJ1aWxkLVJlbFdpdGhEZWJJbmZvLm5pbmphIHNpbXBsZXN0YXRpYzpSZWxlYXNlKQorcnVuX2NtYWtlX2J1aWxkKFNpbXBsZUNyb3NzQ29uZmlncyBhbGwtaW4tcmVsd2l0aGRlYmluZm8tZ3JhcGggUmVsV2l0aERlYkluZm8gc2ltcGxlc3RhdGljOmFsbCkKK3J1bl9uaW5qYShTaW1wbGVDcm9zc0NvbmZpZ3MgY2xlYW4tYWxsLWluLXJlbGVhc2UtZ3JhcGggYnVpbGQtUmVsZWFzZS5uaW5qYSBjbGVhbjphbGwpCitydW5fY21ha2VfYnVpbGQoU2ltcGxlQ3Jvc3NDb25maWdzIGFsbC1hbGwtaW4tcmVsZWFzZS1ncmFwaCBSZWxlYXNlIGFsbDphbGwpCitydW5fY21ha2VfYnVpbGQoU2ltcGxlQ3Jvc3NDb25maWdzIGFsbC1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoIFJlbGVhc2UgYWxsOlJlbFdpdGhEZWJJbmZvKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vRnJhbWV3b3JrLWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DUk9TU19DT05GSUdTPWFsbCIpCitydW5fY21ha2VfY29uZmlndXJlKEZyYW1ld29yaykKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RhcmdldF9maWxlcy5jbWFrZSkKK3J1bl9jbWFrZV9idWlsZChGcmFtZXdvcmsgZnJhbWV3b3JrIERlYnVnIGFsbCkKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0ZyYW1ld29ya0RlcGVuZGVuY3lBdXRvZ2VuLWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DUk9TU19DT05GSUdTPWFsbCIpCitydW5fY21ha2VfY29uZmlndXJlKEZyYW1ld29ya0RlcGVuZGVuY3lBdXRvZ2VuKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlKQorcnVuX2NtYWtlX2J1aWxkKEZyYW1ld29ya0RlcGVuZGVuY3lBdXRvZ2VuIGZyYW1ld29yayBSZWxlYXNlIHRlc3QyOkRlYnVnKQorCitzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0N1c3RvbUNvbW1hbmRHZW5lcmF0b3ItYnVpbGQpCitzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlXFw7TWluU2l6ZVJlbFxcO1JlbFdpdGhEZWJJbmZvOy1EQ01BS0VfQ1JPU1NfQ09ORklHUz1hbGwiKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShDdXN0b21Db21tYW5kR2VuZXJhdG9yKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlKQorcnVuX2NtYWtlX2J1aWxkKEN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgZGVidWcgRGVidWcgZ2VuZXJhdGVkKQorcnVuX2NtYWtlX2NvbW1hbmQoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1nZW5lcmF0ZWQgIiR7VEFSR0VUX0ZJTEVfZ2VuZXJhdGVkX0RlYnVnfSIpCitydW5fbmluamEoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciByZWxlYXNlIGJ1aWxkLVJlbGVhc2UubmluamEgZ2VuZXJhdGVkKQorcnVuX2NtYWtlX2NvbW1hbmQoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWdlbmVyYXRlZCAiJHtUQVJHRVRfRklMRV9nZW5lcmF0ZWRfUmVsZWFzZX0iKQorcnVuX25pbmphKEN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgZGVidWctY2xlYW4gYnVpbGQtRGVidWcubmluamEgY2xlYW4pCitydW5fY21ha2VfYnVpbGQoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciByZWxlYXNlLWNsZWFuIFJlbGVhc2UgY2xlYW4pCitydW5fY21ha2VfYnVpbGQoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciBkZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoIFJlbGVhc2UgZ2VuZXJhdGVkOkRlYnVnKQorcnVuX2NtYWtlX2NvbW1hbmQoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWdlbmVyYXRlZCAiJHtUQVJHRVRfRklMRV9nZW5lcmF0ZWRfRGVidWd9IikKK3J1bl9uaW5qYShDdXN0b21Db21tYW5kR2VuZXJhdG9yIGRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtY2xlYW4gYnVpbGQtRGVidWcubmluamEgY2xlYW46RGVidWcpCitydW5fbmluamEoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvciByZWxlYXNlLWluLWRlYnVnLWdyYXBoIGJ1aWxkLURlYnVnLm5pbmphIGdlbmVyYXRlZDpSZWxlYXNlKQorcnVuX2NtYWtlX2NvbW1hbmQoQ3VzdG9tQ29tbWFuZEdlbmVyYXRvci1yZWxlYXNlLWluLWRlYnVnLWdyYXBoLWdlbmVyYXRlZCAiJHtUQVJHRVRfRklMRV9nZW5lcmF0ZWRfUmVsZWFzZX0iKQordW5zZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTikKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0N1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cy1idWlsZCkKK3NldChSdW5DTWFrZV9URVNUX09QVElPTlMgIi1EQ01BS0VfQ1JPU1NfQ09ORklHUz1hbGwiKQorcnVuX2NtYWtlX2NvbmZpZ3VyZShDdXN0b21Db21tYW5kc0FuZFRhcmdldHMpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fY21ha2VfYnVpbGQoQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzIHJlbGVhc2UtY29tbWFuZCBSZWxlYXNlIFN1YmRpckNvbW1hbmQpCisjRklYTUUgR2V0IHRoaXMgd29ya2luZworI3J1bl9uaW5qYShDdXN0b21Db21tYW5kc0FuZFRhcmdldHMgbWluc2l6ZXJlbC1jb21tYW5kIGJ1aWxkLU1pblNpemVSZWwubmluamEgQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzU3ViZGlyL1N1YmRpckNvbW1hbmQpCitydW5fbmluamEoQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzIGRlYnVnLWNvbW1hbmQgYnVpbGQtRGVidWcubmluamEgVG9wQ29tbWFuZCkKK3J1bl9uaW5qYShDdXN0b21Db21tYW5kc0FuZFRhcmdldHMgcmVsZWFzZS10YXJnZXQgYnVpbGQtUmVsZWFzZS5uaW5qYSBTdWJkaXJUYXJnZXQpCitydW5fY21ha2VfYnVpbGQoQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzIGRlYnVnLXRhcmdldCBEZWJ1ZyBUb3BUYXJnZXQpCitydW5fY21ha2VfYnVpbGQoQ3VzdG9tQ29tbWFuZHNBbmRUYXJnZXRzIGRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtcG9zdGJ1aWxkIFJlbGVhc2UgU3ViZGlyUG9zdEJ1aWxkOkRlYnVnKQorcnVuX25pbmphKEN1c3RvbUNvbW1hbmRzQW5kVGFyZ2V0cyByZWxlYXNlLXBvc3RidWlsZCBidWlsZC1SZWxlYXNlLm5pbmphIFN1YmRpclBvc3RCdWlsZCkKK3J1bl9jbWFrZV9idWlsZChDdXN0b21Db21tYW5kc0FuZFRhcmdldHMgZGVidWctdGFyZ2V0cG9zdGJ1aWxkIERlYnVnIFRvcFRhcmdldFBvc3RCdWlsZCkKK3J1bl9uaW5qYShDdXN0b21Db21tYW5kc0FuZFRhcmdldHMgcmVsZWFzZS10YXJnZXRwb3N0YnVpbGQgYnVpbGQtUmVsZWFzZS5uaW5qYSBTdWJkaXJUYXJnZXRQb3N0QnVpbGQpCisKK3Vuc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUikKKworcnVuX2NtYWtlKEN1c3RvbUNvbW1hbmREZXBmaWxlKQorCitzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vUG9zdGZpeEFuZExvY2F0aW9uLWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZTstRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIikKK3J1bl9jbWFrZV9jb25maWd1cmUoUG9zdGZpeEFuZExvY2F0aW9uKQordW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlKQorcnVuX2NtYWtlX2J1aWxkKFBvc3RmaXhBbmRMb2NhdGlvbiByZWxlYXNlLWluLXJlbGVhc2UtZ3JhcGggUmVsZWFzZSBteWxpYjpSZWxlYXNlKQorcnVuX2NtYWtlX2J1aWxkKFBvc3RmaXhBbmRMb2NhdGlvbiBkZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoIFJlbGVhc2UgbXlsaWI6RGVidWcpCisKK3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9DbGVhbi1idWlsZCkKK3J1bl9jbWFrZV9jb25maWd1cmUoQ2xlYW4pCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fY21ha2VfYnVpbGQoQ2xlYW4gcmVsZWFzZSBSZWxlYXNlKQorcnVuX25pbmphKENsZWFuIHJlbGVhc2Utbm90YWxsIGJ1aWxkLVJlbGVhc2UubmluamEgZXhlbm90YWxsKQorcnVuX2NtYWtlX2J1aWxkKENsZWFuIHJlbGVhc2UtY2xlYW4gUmVsZWFzZSBjbGVhbikKKworc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L0FkZGl0aW9uYWxDbGVhbkZpbGVzLWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9DT05GSUdVUkFUSU9OX1RZUEVTPURlYnVnXFw7UmVsZWFzZVxcO01pblNpemVSZWxcXDtSZWxXaXRoRGViSW5mbzstRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIikKK3J1bl9jbWFrZV9jb25maWd1cmUoQWRkaXRpb25hbENsZWFuRmlsZXMpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitydW5fY21ha2VfYnVpbGQoQWRkaXRpb25hbENsZWFuRmlsZXMgcmVsZWFzZS1jbGVhbiBSZWxlYXNlIGNsZWFuKQorcnVuX25pbmphKEFkZGl0aW9uYWxDbGVhbkZpbGVzIGFsbC1jbGVhbiBidWlsZC1EZWJ1Zy5uaW5qYSBjbGVhbjphbGwpCisKK3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9JbnN0YWxsLWJ1aWxkKQorc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9JTlNUQUxMX1BSRUZJWD0ke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vaW5zdGFsbDstRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsOy1EQ01BS0VfREVGQVVMVF9DT05GSUdTPURlYnVnXFw7UmVsZWFzZSIpCitydW5fY21ha2VfY29uZmlndXJlKEluc3RhbGwpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fY21ha2VfYnVpbGQoSW5zdGFsbCByZWxlYXNlLWluc3RhbGwgUmVsZWFzZSBpbnN0YWxsKQorcnVuX25pbmphKEluc3RhbGwgZGVidWctaW4tcmVsZWFzZS1ncmFwaC1pbnN0YWxsIGJ1aWxkLVJlbGVhc2UubmluamEgaW5zdGFsbDpEZWJ1ZykKK2ZpbGUoUkVNT1ZFX1JFQ1VSU0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9pbnN0YWxsIikKK3J1bl9uaW5qYShJbnN0YWxsIGRlZmF1bHQtaW5zdGFsbCBidWlsZC5uaW5qYSBpbnN0YWxsKQorZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2luc3RhbGwiKQorcnVuX25pbmphKEluc3RhbGwgYWxsLWluc3RhbGwgYnVpbGQubmluamEgaW5zdGFsbDphbGwpCisKK3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9FeGNsdWRlRnJvbUFsbC1idWlsZCkKK3J1bl9jbWFrZV9jb25maWd1cmUoRXhjbHVkZUZyb21BbGwpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCitydW5fY21ha2VfYnVpbGQoRXhjbHVkZUZyb21BbGwgYWxsICIiIGFsbDphbGwpCisKKyMgRklYTUUgR2V0IHRoaXMgd29ya2luZworI3NldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9BdXRvTW9jRXhlY3V0YWJsZS1idWlsZCkKKyNydW5fY21ha2VfY29uZmlndXJlKEF1dG9Nb2NFeGVjdXRhYmxlKQorI3J1bl9jbWFrZV9idWlsZChBdXRvTW9jRXhlY3V0YWJsZSBkZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoIFJlbGVhc2UgZXhlKQorCisjIE5lZWQgdG8gdGVzdCB0aGlzIG1hbnVhbGx5IGJlY2F1c2UgcnVuX2NtYWtlKCkgYWRkcyAtLW5vLXdhcm4tdW51c2VkLWNsaQorc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L05vVW51c2VkVmFyaWFibGVzLWJ1aWxkKQorcnVuX2NtYWtlX2NvbW1hbmQoTm9VbnVzZWRWYXJpYWJsZXMgJHtDTUFLRV9DT01NQU5EfSAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9CisgIC1HICJOaW5qYSBNdWx0aS1Db25maWciCisgICItRFJ1bkNNYWtlX1RFU1Q9Tm9VbnVzZWRWYXJpYWJsZXMiCisgICItRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIgorICAiLURDTUFLRV9ERUZBVUxUX0JVSUxEX1RZUEU9RGVidWciCisgICItRENNQUtFX0RFRkFVTFRfQ09ORklHUz1hbGwiCisgICkKKworIyBDdWRhU2ltcGxlIHVzZXMgc2VwYXJhYmxlIGNvbXBpbGF0aW9uLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgb24gTlZDQy4KK2lmKENNYWtlX1RFU1RfQ1VEQSBBTkQgTk9UIENNYWtlX1RFU1RfQ1VEQSBTVFJFUVVBTCAiQ2xhbmciKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQ3VkYVNpbXBsZS1idWlsZCkKKyAgcnVuX2NtYWtlX2NvbmZpZ3VyZShDdWRhU2ltcGxlKQorICBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90YXJnZXRfZmlsZXMuY21ha2UpCisgIHJ1bl9jbWFrZV9idWlsZChDdWRhU2ltcGxlIGRlYnVnLXRhcmdldCBEZWJ1ZyBzaW1wbGVjdWRhZXhlKQorICBydW5fbmluamEoQ3VkYVNpbXBsZSBhbGwtY2xlYW4gYnVpbGQtRGVidWcubmluamEgY2xlYW46RGVidWcpCitlbmRpZigpCisKK2lmKENNYWtlX1RFU1RfUXQ1KQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vUXQ1LWJ1aWxkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NST1NTX0NPTkZJR1M9YWxsIikKKyAgcnVuX2NtYWtlX2NvbmZpZ3VyZShRdDUpCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKyAgaW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlKQorICBydW5fY21ha2VfYnVpbGQoUXQ1IGRlYnVnLWluLXJlbGVhc2UtZ3JhcGggUmVsZWFzZSBleGU6RGVidWcpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY2xlYW4tYWdhaW4tbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY2xlYW4tYWdhaW4tbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5MTlkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC1jbGVhbi1hZ2Fpbi1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDI1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY2xlYW4tYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5MTlkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC1jbGVhbi1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDI1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY29uZmlncy1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC1jb25maWdzLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MGEwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtY29uZmlncy1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQ3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1hbGwtc3ViZGlyLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtYWxsLXN1YmRpci1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQ1MDVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtYWxsLXN1YmRpci1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQ5IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtYWxsLXRvcC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC10b3AtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3MWUzZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWFsbC10b3AtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1NiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLXRvcC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtdG9wLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOTgwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLXRvcC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUzIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVidWctc3ViZGlyLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVidWctc3ViZGlyLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjc3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy1zdWJkaXItYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlYnVnLXRhcmdldC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlYnVnLXRhcmdldC1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI3NzczCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVidWctdGFyZ2V0LWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzEgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy10YXJnZXQtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWJ1Zy10YXJnZXQtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljMWU5MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlYnVnLXRhcmdldC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMzIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlZmF1bHQtYnVpbGQtZmlsZS1hbGwtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtYWxsLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNmU2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtYWxsLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDkgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtY2xlYW4tbWluc2l6ZXJlbC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlZmF1bHQtYnVpbGQtZmlsZS1jbGVhbi1taW5zaXplcmVsLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOWFlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtY2xlYW4tbWluc2l6ZXJlbC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQxIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlZmF1bHQtYnVpbGQtZmlsZS1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWRlZmF1bHQtYnVpbGQtZmlsZS1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzIxM2RkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVmYXVsdC1idWlsZC1maWxlLWNsZWFuLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDkgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVmYXVsdC1idWlsZC1maWxlLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtZGVmYXVsdC1idWlsZC1maWxlLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZTFmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1kZWZhdWx0LWJ1aWxkLWZpbGUtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1MSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLW1pbnNpemVyZWwtdG9wLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtbWluc2l6ZXJlbC10b3AtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0YmU0OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLW1pbnNpemVyZWwtdG9wLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNTEgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlY29uZmlndXJlLWNvbmZpZy1uaW5qYS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVjb25maWd1cmUtY29uZmlnLW5pbmphLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3NzQ1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlY29uZmlndXJlLWNvbmZpZy1uaW5qYS1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNCBAQAorLS0gQ29uZmlndXJpbmcgZG9uZQorLS0gR2VuZXJhdGluZyBkb25lCistLSBCdWlsZCBmaWxlcyBoYXZlIGJlZW4gd3JpdHRlbiB0bzogW14KK10qL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLWJ1aWxkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1yZWNvbmZpZ3VyZS1ub2NvbmZpZy1uaW5qYS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVjb25maWd1cmUtbm9jb25maWctbmluamEtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODc3NDUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVjb25maWd1cmUtbm9jb25maWctbmluamEtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDQgQEAKKy0tIENvbmZpZ3VyaW5nIGRvbmUKKy0tIEdlbmVyYXRpbmcgZG9uZQorLS0gQnVpbGQgZmlsZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG86IFteCitdKi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1idWlsZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVsZWFzZS1maWxlLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVsZWFzZS1maWxlLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjNhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS1yZWxlYXNlLWZpbGUtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzOSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVsZWFzZS1maWxlbmFtZS1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlbGVhc2UtZmlsZW5hbWUtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliZjQyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlbGVhc2UtZmlsZW5hbWUtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzNiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGUtcmVsZWFzZS1pbi1taW5zaXplcmVsLWdyYXBoLXN1YmRpci1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlbGVhc2UtaW4tbWluc2l6ZXJlbC1ncmFwaC1zdWJkaXItbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLXJlbGVhc2UtaW4tbWluc2l6ZXJlbC1ncmFwaC1zdWJkaXItbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzNyBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNGVjYmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZS5jbWFrZQpAQCAtMCwwICsxLDE1IEBACitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KENNQUtFX1dJTkRPV1NfRVhQT1JUX0FMTF9TWU1CT0xTIE9OKQorCitmaWxlKFRPVUNIICR7Q01BS0VfQklOQVJZX0RJUn0vZW1wdHkuY21ha2UpCitpbmNsdWRlKCR7Q01BS0VfQklOQVJZX0RJUn0vZW1wdHkuY21ha2UpCisKK2FkZF9zdWJkaXJlY3RvcnkoU2ltcGxlU3ViZGlyKQorCithZGRfbGlicmFyeShzaW1wbGVzdGF0aWMgU1RBVElDIHNpbXBsZWxpYi5jKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ29tbW9uLmNtYWtlKQorZ2VuZXJhdGVfb3V0cHV0X2ZpbGVzKHNpbXBsZWV4ZSBzaW1wbGVzaGFyZWQgc2ltcGxlc3RhdGljIHNpbXBsZW9iaikKKworZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGFyZ2V0X2ZpbGVzLmNtYWtlIiAic2V0KEdFTkVSQVRFRF9GSUxFUyBbPT1bJHtDTUFLRV9CSU5BUllfRElSfS9lbXB0eS5jbWFrZV09PV0pXG4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtYWxsLWFsbC1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtYWxsLWFsbC1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTU5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtYWxsLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0NSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtaW4tcmVsd2l0aGRlYmluZm8tZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtaW4tcmVsd2l0aGRlYmluZm8tZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlNTk1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1pbi1yZWx3aXRoZGViaW5mby1ncmFwaC1idWlsZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQ1IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtYWxsLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlNTk1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDUgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy11bnN1cHBvcnRlZC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtYWxsLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtdW5zdXBwb3J0ZWQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWFsbC1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOGI0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1hbGwtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15uaW5qYTogZXJyb3I6IHVua25vd24gdGFyZ2V0ICdhbGw6UmVsV2l0aERlYkluZm8nJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtY2xlYW4tYWxsLWluLXJlbGVhc2UtZ3JhcGgtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1jbGVhbi1hbGwtaW4tcmVsZWFzZS1ncmFwaC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk0MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtY2xlYW4tYWxsLWluLXJlbGVhc2UtZ3JhcGgtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLWRlYnVnLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Yzc3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1kZWJ1Zy1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzcgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsZWFzZS1pbi1yZWxlYXNlLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsZWFzZS1pbi1yZWxlYXNlLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjUyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWxlYXNlLWluLXJlbGVhc2UtZ3JhcGgtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbGVhc2UtaW4tcmVsd2l0aGRlYmluZm8tZ3JhcGgtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWxlYXNlLWluLXJlbHdpdGhkZWJpbmZvLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMzdhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWxlYXNlLWluLXJlbHdpdGhkZWJpbmZvLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDQgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzNyBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtYnVpbGQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVDcm9zc0NvbmZpZ3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1idWlsZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTgyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWJ1aWxkLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXm5pbmphOiBlcnJvcjogdW5rbm93biB0YXJnZXQgJ3NpbXBsZWV4ZTpSZWxXaXRoRGViSW5mbyckCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWx3aXRoZGViaW5mby1pbi1yZWx3aXRoZGViaW5mby1ncmFwaC1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLXJlbHdpdGhkZWJpbmZvLWluLXJlbHdpdGhkZWJpbmZvLWdyYXBoLW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZGRiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy1yZWx3aXRoZGViaW5mby1pbi1yZWx3aXRoZGViaW5mby1ncmFwaC1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQzIEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlQ3Jvc3NDb25maWdzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZUNyb3NzQ29uZmlncy5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vU2ltcGxlLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMtYWxsLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhcy1hbGwtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3MWUzZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMtYWxsLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNTYgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhcy1jbGVhbi1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMtY2xlYW4tbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5MTlkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMtY2xlYW4tbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyNSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhcy10YXJnZXQtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzLXRhcmdldC1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQ1MDVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhcy10YXJnZXQtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0OSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9TaW1wbGUuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtYWxsLWNvbmZpZ3MtYnVpbGQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdC1hbGwtY29uZmlncy1idWlsZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZkZDIwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtYWxsLWNvbmZpZ3MtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzOSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LWFsbC1yZWx3aXRoZGViaW5mby1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LWFsbC1yZWx3aXRoZGViaW5mby1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTViYWY5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtYWxsLXJlbHdpdGhkZWJpbmZvLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDYgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtY2xlYW4tY29uZmlncy1uaW5qYS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LWNsZWFuLWNvbmZpZ3MtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyOWQzZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LWNsZWFuLWNvbmZpZ3MtbmluamEtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMiBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisKKyAgRVhDTFVERQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LXRhcmdldC1jb25maWdzLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QtdGFyZ2V0LWNvbmZpZ3MtbmluamEtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0LXRhcmdldC1jb25maWdzLW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzcgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxlYXNlfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9NaW5TaXplUmVsfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9SZWxXaXRoRGViSW5mb30KKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTViNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3QuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1NpbXBsZS5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdENyb3NzLXRhcmdldC1jb25maWdzLW5pbmphLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3RDcm9zcy10YXJnZXQtY29uZmlncy1uaW5qYS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmM3N2FiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVEZWZhdWx0QnVpbGRBbGlhc0xpc3RDcm9zcy10YXJnZXQtY29uZmlncy1uaW5qYS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDM3IEBACitjaGVja19maWxlcygiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IgorICBJTkNMVURFCisgICAgJHtHRU5FUkFURURfRklMRVN9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZWV4ZV9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfTElOS0VSX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlRGVmYXVsdEJ1aWxkQWxpYXNMaXN0Q3Jvc3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdENyb3NzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZURlZmF1bHRCdWlsZEFsaWFzTGlzdENyb3NzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9TaW1wbGUuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtYWxsLW5pbmphLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC1hbGwtbmluamEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC1hbGwtbmluamEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtYWxsLW5pbmphLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1YTM1NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtYWxsLW5pbmphLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXm5pbmphOiBlcnJvcjogdW5rbm93biB0YXJnZXQgJ2FsbDphbGwnJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvSU1QT1JURURfTElCTkFNRS1ub24taW1wb3J0ZWQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtY2xlYW4tYnVpbGQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L0lNUE9SVEVEX0xJQk5BTUUtbm9uLWltcG9ydGVkLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtYWxsLWNsZWFuLWJ1aWxkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtY2xlYW4tYnVpbGQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtY2xlYW4tYnVpbGQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzUyOGRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC1jbGVhbi1idWlsZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15uaW5qYTogZXJyb3I6IHVua25vd24gdGFyZ2V0ICdjbGVhbjphbGwnJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtdGFyZ2V0LW5pbmphLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC10YXJnZXQtbmluamEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWFsbC10YXJnZXQtbmluamEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtdGFyZ2V0LW5pbmphLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiNGJjYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1hbGwtdGFyZ2V0LW5pbmphLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorXm5pbmphOiBlcnJvcjogdW5rbm93biB0YXJnZXQgJ3NpbXBsZXN0YXRpYzphbGwnJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLWRlYnVnLXRhcmdldC1idWlsZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1kZWJ1Zy10YXJnZXQtYnVpbGQtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiNzc3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1kZWJ1Zy10YXJnZXQtYnVpbGQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMSBAQAorY2hlY2tfZmlsZXMoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIKKyAgSU5DTFVERQorICAgICR7R0VORVJBVEVEX0ZJTEVTfQorCisgICAgJHtUQVJHRVRfRklMRV9zaW1wbGVleGVfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZWV4ZV9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc2hhcmVkX0RlYnVnfQorICAgICR7VEFSR0VUX0xJTktFUl9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX0RlYnVnfQorCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZW9ial9EZWJ1Z30KKworICBFWENMVURFCisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19EZWJ1Z30KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsZWFzZX0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc2hhcmVkX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfTWluU2l6ZVJlbH0KKworICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlc3RhdGljX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVvYmpfUmVsV2l0aERlYkluZm99CisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1kZWJ1Zy10YXJnZXQtbmluamEtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtZGVidWctdGFyZ2V0LW5pbmphLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YTczNWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtZGVidWctdGFyZ2V0LW5pbmphLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMzIgQEAKK2NoZWNrX2ZpbGVzKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iCisgIElOQ0xVREUKKyAgICAke0dFTkVSQVRFRF9GSUxFU30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlZXhlX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVleGVfRGVidWd9CisKKyAgICAke1RBUkdFVF9GSUxFX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKyAgICAke1RBUkdFVF9MSU5LRVJfRklMRV9zaW1wbGVzaGFyZWRfRGVidWd9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9EZWJ1Z30KKworICAgICR7VEFSR0VUX0ZJTEVfc2ltcGxlc3RhdGljX0RlYnVnfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfRGVidWd9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX0RlYnVnfQorCisgIEVYQ0xVREUKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbGVhc2V9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9SZWxlYXNlfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfUmVsZWFzZX0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbGVhc2V9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX01pblNpemVSZWx9CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXNoYXJlZF9NaW5TaXplUmVsfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzdGF0aWNfTWluU2l6ZVJlbH0KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX01pblNpemVSZWx9CisKKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlZXhlX1JlbFdpdGhEZWJJbmZvfQorICAgICR7VEFSR0VUX09CSkVDVF9GSUxFU19zaW1wbGVzaGFyZWRfUmVsV2l0aERlYkluZm99CisgICAgJHtUQVJHRVRfT0JKRUNUX0ZJTEVTX3NpbXBsZXN0YXRpY19SZWxXaXRoRGViSW5mb30KKyAgICAke1RBUkdFVF9PQkpFQ1RfRklMRVNfc2ltcGxlb2JqX1JlbFdpdGhEZWJJbmZvfQorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXVuc3VwcG9ydGVkLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1hbGwtYnVpbGQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtdW5zdXBwb3J0ZWQtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWFsbC1idWlsZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1hbGwtYnVpbGQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWFsbC1idWlsZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOGI0NjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1hbGwtYnVpbGQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitebmluamE6IGVycm9yOiB1bmtub3duIHRhcmdldCAnYWxsOlJlbFdpdGhEZWJJbmZvJyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1jbGVhbi1idWlsZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWNsZWFuLWJ1aWxkLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLWNsZWFuLWJ1aWxkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1jbGVhbi1idWlsZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZWVmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MtcmVsd2l0aGRlYmluZm8taW4tcmVsZWFzZS1ncmFwaC1jbGVhbi1idWlsZC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15uaW5qYTogZXJyb3I6IHVua25vd24gdGFyZ2V0ICdjbGVhbjpSZWxXaXRoRGViSW5mbyckCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtdGFyZ2V0LW5pbmphLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtdGFyZ2V0LW5pbmphLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLXRhcmdldC1uaW5qYS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLXJlbHdpdGhkZWJpbmZvLWluLXJlbGVhc2UtZ3JhcGgtdGFyZ2V0LW5pbmphLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExZmU5ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlTm9Dcm9zcy1yZWx3aXRoZGViaW5mby1pbi1yZWxlYXNlLWdyYXBoLXRhcmdldC1uaW5qYS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK15uaW5qYTogZXJyb3I6IHVua25vd24gdGFyZ2V0ICdzaW1wbGVzdGF0aWM6UmVsV2l0aERlYkluZm8nJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9TaW1wbGVOb0Nyb3NzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZU5vQ3Jvc3MuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1NpbXBsZS5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZVN1YmRpci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvU2ltcGxlU3ViZGlyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzU0YTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1NpbXBsZVN1YmRpci9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDQgQEAKK2FkZF9saWJyYXJ5KHNpbXBsZW9iaiBPQkpFQ1QgLi4vZW1wdHkuYykKK2FkZF9leGVjdXRhYmxlKHNpbXBsZWV4ZSAuLi9tYWluLmMgJDxUQVJHRVRfT0JKRUNUUzpzaW1wbGVvYmo+KQorYWRkX2xpYnJhcnkoc2ltcGxlc2hhcmVkIFNIQVJFRCAuLi9zaW1wbGVsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzaW1wbGVleGUgUFJJVkFURSBzaW1wbGVzaGFyZWQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1dyaXRlRmlsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvV3JpdGVGaWxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjgxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL1dyaXRlRmlsZS5jbWFrZQpAQCAtMCwwICsxIEBACitmaWxlKFdSSVRFICIke09VVFBVVF9GSUxFfSIgIkdlbmV4IGNvbmZpZzogJHtHRU5FWF9DT05GSUd9XG5JTlRESVIgY29uZmlnOiAke0lOVERJUl9DT05GSUd9XG4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9iYWRtb2MuYyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvYmFkbW9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjOGRjMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvYmFkbW9jLmMKQEAgLTAsMCArMSw3IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4odm9pZCkKK3sKKyAgcHJpbnRmKCJCYWRNb2MgQ29uZmlndXJhdGlvbjogIiBDT05GSUcgIlxuIik7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9lbXB0eS5jIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9lbXB0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2VtcHR5LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvZ2VuZXJhdG9yLmMgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2dlbmVyYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NWVlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2dlbmVyYXRvci5jCkBAIC0wLDAgKzEsMTAxIEBACisjaW5jbHVkZSA8Z2VuZXhfY29uZmlnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qI2luY2x1ZGUgPGludGRpcl9jb25maWcuaD4qLworCitjb25zdCBjaGFyKiBnZW5lcmF0b3JsaWJfZ2VuZXhfY29uZmlnX2RlZmluaXRpb24odm9pZCk7Citjb25zdCBjaGFyKiBnZW5lcmF0b3JsaWJfZ2VuZXhfY29uZmlnX2luY2x1ZGVfZGlyKHZvaWQpOworY29uc3QgY2hhciogZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19kZWZpbml0aW9uKHZvaWQpOworY29uc3QgY2hhciogZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19pbmNsdWRlX2Rpcih2b2lkKTsKKworc3RhdGljIGNvbnN0IGNoYXIgY29udGVudHNbXSA9CisgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyIjaW5jbHVkZSA8c3RkaW8uaD5cbiIKKyJcbiIKKyIjaW5jbHVkZSA8Z2VuZXhfY29uZmlnLmg+XG4iCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiIjaW5jbHVkZSA8aW50ZGlyX2NvbmZpZy5oPlxuIiovCisiXG4iCisiY29uc3QgY2hhciogZ2VuZXJhdG9ybGliX2dlbmV4X2NvbmZpZ19kZWZpbml0aW9uKHZvaWQpO1xuIgorImNvbnN0IGNoYXIqIGdlbmVyYXRvcmxpYl9nZW5leF9jb25maWdfaW5jbHVkZV9kaXIodm9pZCk7XG4iCisiY29uc3QgY2hhciogZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19kZWZpbml0aW9uKHZvaWQpO1xuIgorImNvbnN0IGNoYXIqIGdlbmVyYXRvcm9ial9nZW5leF9jb25maWdfaW5jbHVkZV9kaXIodm9pZCk7XG4iCisiXG4iCisiaW50IG1haW4odm9pZClcbiIKKyJ7XG4iCisiICBwcmludGYoXG4iCisiICAgIFwiR2VuZXJhdG9yIGdlbmV4IGNvbmZpZyBkZWZpbml0aW9uOiAiCisgIEdFTkVYX0NPTkZJR19ERUZJTklUSU9OICJcXG5cIlxuIgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyoiICAgIFwiR2VuZXJhdG9yIElOVERJUiBjb25maWcgZGVmaW5pdGlvbjogIgorICBJTlRESVJfQ09ORklHX0RFRklOSVRJT04gIlxcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0b3IgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiAiCisgIEdFTkVYX0NPTkZJR19JTkNMVURFX0RJUiAiXFxuXCJcbiIKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qIiAgICBcIkdlbmVyYXRvciBJTlRESVIgY29uZmlnIGluY2x1ZGUgZGlyOiAiCisgIElOVERJUl9DT05GSUdfSU5DTFVERV9ESVIgIlxcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0b3IgbGlicmFyeSBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogJXNcXG5cIlxuIgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyoiICAgIFwiR2VuZXJhdG9yIGxpYnJhcnkgSU5URElSIGNvbmZpZyBkZWZpbml0aW9uOiAlc1xcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0b3IgbGlicmFyeSBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6ICVzXFxuXCJcbiIKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qIiAgICBcIkdlbmVyYXRvciBsaWJyYXJ5IElOVERJUiBjb25maWcgaW5jbHVkZSBkaXI6ICVzXFxuXCJcbiIqLworIiAgICBcIkdlbmVyYXRvciBvYmplY3QgZ2VuZXggY29uZmlnIGRlZmluaXRpb246ICVzXFxuXCJcbiIKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qIiAgICBcIkdlbmVyYXRvciBvYmplY3QgSU5URElSIGNvbmZpZyBkZWZpbml0aW9uOiAlc1xcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0b3Igb2JqZWN0IGdlbmV4IGNvbmZpZyBpbmNsdWRlIGRpcjogJXNcXG5cIlxuIgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyoiICAgIFwiR2VuZXJhdG9yIG9iamVjdCBJTlRESVIgY29uZmlnIGluY2x1ZGUgZGlyOiAlc1xcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0ZWQgZ2VuZXggY29uZmlnIGRlZmluaXRpb246IFwiIgorICAiIEdFTkVYX0NPTkZJR19ERUZJTklUSU9OIFwiXFxuXCJcbiIKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qIiAgICBcIkdlbmVyYXRlZCBJTlRESVIgY29uZmlnIGRlZmluaXRpb246IFwiIgorICAiIElOVERJUl9DT05GSUdfREVGSU5JVElPTiBcIlxcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0ZWQgZ2VuZXggY29uZmlnIGluY2x1ZGUgZGlyOiBcIiIKKyAgIiBHRU5FWF9DT05GSUdfSU5DTFVERV9ESVIgXCJcXG5cIlxuIgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyoiICAgIFwiR2VuZXJhdGVkIElOVERJUiBjb25maWcgaW5jbHVkZSBkaXI6IFwiIgorICAiIElOVERJUl9DT05GSUdfSU5DTFVERV9ESVIgXCJcXG5cIlxuIiovCisiICAgIFwiR2VuZXJhdGVkIGxpYnJhcnkgZ2VuZXggY29uZmlnIGRlZmluaXRpb246ICUlc1xcblwiXG4iCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiIgICAgXCJHZW5lcmF0ZWQgbGlicmFyeSBJTlRESVIgY29uZmlnIGRlZmluaXRpb246ICUlc1xcblwiXG4iKi8KKyIgICAgXCJHZW5lcmF0ZWQgbGlicmFyeSBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6ICUlc1xcblwiXG4iCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiIgICAgXCJHZW5lcmF0ZWQgbGlicmFyeSBJTlRESVIgY29uZmlnIGluY2x1ZGUgZGlyOiAlJXNcXG5cIlxuIiovCisiICAgIFwiR2VuZXJhdGVkIG9iamVjdCBnZW5leCBjb25maWcgZGVmaW5pdGlvbjogJSVzXFxuXCJcbiIKKy8qIEZJWE1FIEdldCB0aGlzIHdvcmtpbmcgKi8KKy8qIiAgICBcIkdlbmVyYXRlZCBvYmplY3QgSU5URElSIGNvbmZpZyBkZWZpbml0aW9uOiAlJXNcXG5cIlxuIiovCisiICAgIFwiR2VuZXJhdGVkIG9iamVjdCBnZW5leCBjb25maWcgaW5jbHVkZSBkaXI6ICUlc1xcblwiXG4iCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiIgICAgXCJHZW5lcmF0ZWQgb2JqZWN0IElOVERJUiBjb25maWcgaW5jbHVkZSBkaXI6ICUlc1xcblwiXG4iKi8KKyIgICAgLCBnZW5lcmF0b3JsaWJfZ2VuZXhfY29uZmlnX2RlZmluaXRpb24oKVxuIgorIiAgICAsIGdlbmVyYXRvcmxpYl9nZW5leF9jb25maWdfaW5jbHVkZV9kaXIoKVxuIgorIiAgICAsIGdlbmVyYXRvcm9ial9nZW5leF9jb25maWdfZGVmaW5pdGlvbigpXG4iCisiICAgICwgZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19pbmNsdWRlX2RpcigpKTtcbiIKKyIgIHJldHVybiAwO1xuIgorIn1cbiI7CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICBjb25zdCBjaGFyKiBmaWxlbmFtZTsKKyAgRklMRSogZm91dDsKKworICBpZiAoYXJnYyA8IDIpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8ZmlsZW5hbWU+XG4iLCBhcmd2WzBdKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGZpbGVuYW1lID0gYXJndlsxXTsKKyAgaWYgKCEoZm91dCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmdcbiIsIGZpbGVuYW1lKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBmcHJpbnRmKGZvdXQsIGNvbnRlbnRzLCBnZW5lcmF0b3JsaWJfZ2VuZXhfY29uZmlnX2RlZmluaXRpb24oKSwKKyAgICAgICAgICBnZW5lcmF0b3JsaWJfZ2VuZXhfY29uZmlnX2luY2x1ZGVfZGlyKCksCisgICAgICAgICAgZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19kZWZpbml0aW9uKCksCisgICAgICAgICAgZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19pbmNsdWRlX2RpcigpKTsKKyAgZmNsb3NlKGZvdXQpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9nZW5lcmF0b3JsaWIuYyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvZ2VuZXJhdG9ybGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1YzhmMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvZ2VuZXJhdG9ybGliLmMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgPGdlbmV4X2NvbmZpZy5oPgorLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLyojaW5jbHVkZSA8aW50ZGlyX2NvbmZpZy5oPiovCisKK2NvbnN0IGNoYXIqIGdlbmVyYXRvcmxpYl9nZW5leF9jb25maWdfZGVmaW5pdGlvbih2b2lkKQoreworICByZXR1cm4gR0VORVhfQ09ORklHX0RFRklOSVRJT047Cit9CisKK2NvbnN0IGNoYXIqIGdlbmVyYXRvcmxpYl9nZW5leF9jb25maWdfaW5jbHVkZV9kaXIodm9pZCkKK3sKKyAgcmV0dXJuIEdFTkVYX0NPTkZJR19JTkNMVURFX0RJUjsKK30KKworLyogRklYTUUgR2V0IHRoaXMgd29ya2luZyAqLworLypjb25zdCBjaGFyKiBnZW5lcmF0b3JsaWJfaW50ZGlyX2NvbmZpZ19kZWZpbml0aW9uKHZvaWQpCit7CisgIHJldHVybiBJTlRESVJfQ09ORklHX0RFRklOSVRJT047Cit9CisKK2NvbnN0IGNoYXIqIGdlbmVyYXRvcmxpYl9pbnRkaXJfY29uZmlnX2luY2x1ZGVfZGlyKHZvaWQpCit7CisgIHJldHVybiBJTlRESVJfQ09ORklHX0lOQ0xVREVfRElSOworfSovCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL2dlbmVyYXRvcm9iai5jIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9nZW5lcmF0b3JvYmouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmI1YWE2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9nZW5lcmF0b3JvYmouYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSA8Z2VuZXhfY29uZmlnLmg+CisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKiNpbmNsdWRlIDxpbnRkaXJfY29uZmlnLmg+Ki8KKworY29uc3QgY2hhciogZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19kZWZpbml0aW9uKHZvaWQpCit7CisgIHJldHVybiBHRU5FWF9DT05GSUdfREVGSU5JVElPTjsKK30KKworY29uc3QgY2hhciogZ2VuZXJhdG9yb2JqX2dlbmV4X2NvbmZpZ19pbmNsdWRlX2Rpcih2b2lkKQoreworICByZXR1cm4gR0VORVhfQ09ORklHX0lOQ0xVREVfRElSOworfQorCisvKiBGSVhNRSBHZXQgdGhpcyB3b3JraW5nICovCisvKmNvbnN0IGNoYXIqIGdlbmVyYXRvcm9ial9pbnRkaXJfY29uZmlnX2RlZmluaXRpb24odm9pZCkKK3sKKyAgcmV0dXJuIElOVERJUl9DT05GSUdfREVGSU5JVElPTjsKK30KKworY29uc3QgY2hhciogZ2VuZXJhdG9yb2JqX2ludGRpcl9jb25maWdfaW5jbHVkZV9kaXIodm9pZCkKK3sKKyAgcmV0dXJuIElOVERJUl9DT05GSUdfSU5DTFVERV9ESVI7Cit9Ki8KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvbWFpbi5jIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4OGY0ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvbWFpbi5jCkBAIC0wLDAgKzEsNCBAQAoraW50IG1haW4odm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL21haW4uY3UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL21haW4uY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzYjliMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvbWFpbi5jdQpAQCAtMCwwICsxLDE1IEBACisKKyNpbmNsdWRlIDxjdWRhLmg+CisKKyNpZmRlZiBfV0lOMzIKKyMgIGRlZmluZSBJTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZWxzZQorIyAgZGVmaW5lIElNUE9SVAorI2VuZGlmCisKK0lNUE9SVCBpbnQgc2ltcGxlbGliKCk7CisKK2ludCBtYWluKHZvaWQpCit7CisgIHJldHVybiBzaW1wbGVsaWIoKTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvcXQ1LmN4eCBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvcXQ1LmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzIyMjdmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9xdDUuY3h4CkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgUUNvcmVBcHBsaWNhdGlvbiBhcHAoYXJnYywgYXJndik7CisgIHJldHVybiBhcHAuZXhlYygpOworfQorCisjaW5jbHVkZSAibW9jX3F0NS5jcHAiCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL3F0NS5oIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9xdDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzY1YjkyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9xdDUuaApAQCAtMCwwICsxLDUgQEAKKyNpbmNsdWRlIDxRT2JqZWN0PgorY2xhc3MgUUJ1ZmZlciA6IHB1YmxpYyBRT2JqZWN0Cit7CisgIFFfT0JKRUNUCit9OwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9zaW1wbGVsaWIuYyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvc2ltcGxlbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmZjkyMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL05pbmphTXVsdGlDb25maWcvc2ltcGxlbGliLmMKQEAgLTAsMCArMSw2IEBACisjaWZkZWYgX1dJTjMyCitfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbmRpZgorICB2b2lkIHNpbXBsZWxpYih2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9zaW1wbGVsaWIuY3UgYi9UZXN0cy9SdW5DTWFrZS9OaW5qYU11bHRpQ29uZmlnL3NpbXBsZWxpYi5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmMwODEyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvTmluamFNdWx0aUNvbmZpZy9zaW1wbGVsaWIuY3UKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8Y3VkYS5oPgorCisjaWZkZWYgX1dJTjMyCitfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbmRpZgorICBpbnQgc2ltcGxlbGliKCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9PYmplY3RMaWJyYXJ5L01pc3NpbmdTb3VyY2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvTWlzc2luZ1NvdXJjZS1zdGRlcnIudHh0CmluZGV4IDQxMWNkN2MuLjVjNzg4MmQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvTWlzc2luZ1NvdXJjZS1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvTWlzc2luZ1NvdXJjZS1zdGRlcnIudHh0CkBAIC0zLDcgKzMsNyBAQAogCiAgICAgbWlzc2luZy5jCiAKLSAgVHJpZWQgZXh0ZW5zaW9ucyggXC5bQS1aYS16K10rfAotICkqCisgIFRyaWVkIGV4dGVuc2lvbnMgXC5jIFwuQyAuKgorLioKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvYi5jIGIvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9iLmMKaW5kZXggMjIwY2UwMy4uMmM2NWEyYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9iLmMKKysrIGIvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9iLmMKQEAgLTUsNyArNSw3IEBACiAjZW5kaWYKIAogZXh0ZXJuIGludCBhKHZvaWQpOwotRVhQT1JUIGludCBiKCkKK0VYUE9SVCBpbnQgYih2b2lkKQogewogICByZXR1cm4gYSgpOwogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9yZXF1aXJlcy5jIGIvVGVzdHMvUnVuQ01ha2UvT2JqZWN0TGlicmFyeS9yZXF1aXJlcy5jCmluZGV4IDY4NTYzMmIuLmE1YjQyOWEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL09iamVjdExpYnJhcnkvcmVxdWlyZXMuYworKysgYi9UZXN0cy9SdW5DTWFrZS9PYmplY3RMaWJyYXJ5L3JlcXVpcmVzLmMKQEAgLTEsNSArMSw1IEBACiAjaWZkZWYgUkVRVUlSRUQKLWludCByZXF1aXJlZCgpCitpbnQgcmVxdWlyZWQodm9pZCkKIHsKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9PYnNvbGV0ZVF0TWFjcm9zL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvT2Jzb2xldGVRdE1hY3Jvcy9DTWFrZUxpc3RzLnR4dAppbmRleCA2NWFjOGU4Li40NGI1ZDMwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9PYnNvbGV0ZVF0TWFjcm9zL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL09ic29sZXRlUXRNYWNyb3MvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjExKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1BhcnNlSW1wbGljaXREYXRhL21pbmd3Lm9yZy1DLUdOVS00LjkuMy5pbnB1dCBiL1Rlc3RzL1J1bkNNYWtlL1BhcnNlSW1wbGljaXREYXRhL21pbmd3Lm9yZy1DLUdOVS00LjkuMy5pbnB1dAppbmRleCA4MWU5ZWUwLi5iMWM0Y2UwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9QYXJzZUltcGxpY2l0RGF0YS9taW5ndy5vcmctQy1HTlUtNC45LjMuaW5wdXQKKysrIGIvVGVzdHMvUnVuQ01ha2UvUGFyc2VJbXBsaWNpdERhdGEvbWluZ3cub3JnLUMtR05VLTQuOS4zLmlucHV0CkBAIC01Myw3ICs1Myw3IEBACiBDT0xMRUNUX0dDQ19PUFRJT05TPSctdicgJy1vJyAnQ01ha2VGaWxlc1xjbVRDX2FiMDk3LmRpclxDTWFrZUNDb21waWxlckFCSS5jLm9iaicgJy1jJyAnLW10dW5lPWdlbmVyaWMnICctbWFyY2g9aTU4NicKIExpbmtpbmcgQyBleGVjdXRhYmxlIGNtVENfYWIwOTcuZXhlCiAiQzpcQ01ha2VcYmluXGNtYWtlLmV4ZSIgLUUgY21ha2VfbGlua19zY3JpcHQgQ01ha2VGaWxlc1xjbVRDX2FiMDk3LmRpclxsaW5rLnR4dCAtLXZlcmJvc2U9MQotIkM6XENNYWtlXGJpblxjbWFrZS5leGUiIC1FIHJlbW92ZSAtZiBDTWFrZUZpbGVzXGNtVENfYWIwOTcuZGlyL29iamVjdHMuYQorIkM6XENNYWtlXGJpblxjbWFrZS5leGUiIC1FIHJtIC1mIENNYWtlRmlsZXNcY21UQ19hYjA5Ny5kaXIvb2JqZWN0cy5hCiBDOlxEb2VzTm90RXhpc3RcTWluR1dcYmluXGFyLmV4ZSBjciBDTWFrZUZpbGVzXGNtVENfYWIwOTcuZGlyL29iamVjdHMuYSBAQ01ha2VGaWxlc1xjbVRDX2FiMDk3LmRpclxvYmplY3RzMS5yc3AKIEM6XERvZXNOb3RFeGlzdFxNaW5HV1xiaW5cZ2NjLmV4ZSAgLXYgICAgLVdsLC0td2hvbGUtYXJjaGl2ZSBDTWFrZUZpbGVzXGNtVENfYWIwOTcuZGlyL29iamVjdHMuYSAtV2wsLS1uby13aG9sZS1hcmNoaXZlICAtbyBjbVRDX2FiMDk3LmV4ZSAtV2wsLS1vdXQtaW1wbGliLGxpYmNtVENfYWIwOTcuZGxsLmEgLVdsLC0tbWFqb3ItaW1hZ2UtdmVyc2lvbiwwLC0tbWlub3ItaW1hZ2UtdmVyc2lvbiwwCiBVc2luZyBidWlsdC1pbiBzcGVjcy4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1BhcnNlSW1wbGljaXREYXRhL21pbmd3Lm9yZy1DWFgtR05VLTQuOS4zLmlucHV0IGIvVGVzdHMvUnVuQ01ha2UvUGFyc2VJbXBsaWNpdERhdGEvbWluZ3cub3JnLUNYWC1HTlUtNC45LjMuaW5wdXQKaW5kZXggY2Q3NzM0MC4uYWFlNjdiYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUGFyc2VJbXBsaWNpdERhdGEvbWluZ3cub3JnLUNYWC1HTlUtNC45LjMuaW5wdXQKKysrIGIvVGVzdHMvUnVuQ01ha2UvUGFyc2VJbXBsaWNpdERhdGEvbWluZ3cub3JnLUNYWC1HTlUtNC45LjMuaW5wdXQKQEAgLTU5LDcgKzU5LDcgQEAKIENPTExFQ1RfR0NDX09QVElPTlM9Jy12JyAnLW8nICdDTWFrZUZpbGVzXGNtVENfMmI3OTAuZGlyXENNYWtlQ1hYQ29tcGlsZXJBQkkuY3BwLm9iaicgJy1jJyAnLXNoYXJlZC1saWJnY2MnICctbXR1bmU9Z2VuZXJpYycgJy1tYXJjaD1pNTg2JwogTGlua2luZyBDWFggZXhlY3V0YWJsZSBjbVRDXzJiNzkwLmV4ZQogIkM6XENNYWtlXGJpblxjbWFrZS5leGUiIC1FIGNtYWtlX2xpbmtfc2NyaXB0IENNYWtlRmlsZXNcY21UQ18yYjc5MC5kaXJcbGluay50eHQgLS12ZXJib3NlPTEKLSJDOlxDTWFrZVxiaW5cY21ha2UuZXhlIiAtRSByZW1vdmUgLWYgQ01ha2VGaWxlc1xjbVRDXzJiNzkwLmRpci9vYmplY3RzLmEKKyJDOlxDTWFrZVxiaW5cY21ha2UuZXhlIiAtRSBybSAtZiBDTWFrZUZpbGVzXGNtVENfMmI3OTAuZGlyL29iamVjdHMuYQogQzpcRG9lc05vdEV4aXN0XE1pbkdXXGJpblxhci5leGUgY3IgQ01ha2VGaWxlc1xjbVRDXzJiNzkwLmRpci9vYmplY3RzLmEgQENNYWtlRmlsZXNcY21UQ18yYjc5MC5kaXJcb2JqZWN0czEucnNwCiBDOlxEb2VzTm90RXhpc3RcTWluR1dcYmluXGcrKy5leGUgIC12ICAgIC1XbCwtLXdob2xlLWFyY2hpdmUgQ01ha2VGaWxlc1xjbVRDXzJiNzkwLmRpci9vYmplY3RzLmEgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSAgLW8gY21UQ18yYjc5MC5leGUgLVdsLC0tb3V0LWltcGxpYixsaWJjbVRDXzJiNzkwLmRsbC5hIC1XbCwtLW1ham9yLWltYWdlLXZlcnNpb24sMCwtLW1pbm9yLWltYWdlLXZlcnNpb24sMAogVXNpbmcgYnVpbHQtaW4gc3BlY3MuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Qb3NpdGlvbkluZGVwZW5kZW50Q29kZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1Bvc2l0aW9uSW5kZXBlbmRlbnRDb2RlL0NNYWtlTGlzdHMudHh0CmluZGV4IDkwYWZjMTIuLmMzOTIyZDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1Bvc2l0aW9uSW5kZXBlbmRlbnRDb2RlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL1Bvc2l0aW9uSW5kZXBlbmRlbnRDb2RlL0NNYWtlTGlzdHMudHh0CkBAIC0xLDUgKzEsNSBAQAogCi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IENYWCkKIAogIyBNU1ZDIGNyZWF0ZXMgZXh0cmEgdGFyZ2V0cyB3aGljaCBwb2xsdXRlIHRoZSBzdGRlcnIgdW5sZXNzIHdlIHNldCB0aGlzLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvRGlzYWJsZWRQY2gtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9EaXNhYmxlZFBjaC1jaGVjay5jbWFrZQppbmRleCA0OTRiY2Y3Li5jYzcxOWJlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9EaXNhYmxlZFBjaC1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9EaXNhYmxlZFBjaC1jaGVjay5jbWFrZQpAQCAtMSw0ICsxLDcgQEAKIHNldChmb29fcGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvZm9vLmRpci9jbWFrZV9wY2guaCIpCitpZiAoUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgc2V0KGZvb19wY2hfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb28uZGlyL0RlYnVnL2NtYWtlX3BjaC5oIikKK2VuZGlmKCkKIHNldChmb29iYXJfcGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvZm9vYmFyLmRpci9jbWFrZV9wY2guaCIpCiAKIGlmIChOT1QgRVhJU1RTICR7Zm9vX3BjaF9oZWFkZXJ9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoRGVidWdHZW5leC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaERlYnVnR2VuZXgtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5NGVlNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaERlYnVnR2VuZXgtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxNyBAQAoraWYgKE5PVCBSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICByZXR1cm4oKQorZW5kaWYoKQorCitzZXQoZm9vX3BjaF9oZWFkZXIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL2Zvby5kaXIvRGVidWcvY21ha2VfcGNoLmgiKQorCitpZiAoTk9UIEVYSVNUUyAke2Zvb19wY2hfaGVhZGVyfSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgZm9vIHBjaCBoZWFkZXIgJHtmb29fcGNoX2hlYWRlcn0gZG9lcyBub3QgZXhpc3QiKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmaWxlKFNUUklOR1MgJHtmb29fcGNoX2hlYWRlcn0gZm9vX3BjaF9oZWFkZXJfc3RyaW5ncykKKworaWYgKE5PVCBmb29fcGNoX2hlYWRlcl9zdHJpbmdzIE1BVENIRVMgIjsjaW5jbHVkZSBcIlteXCJdKlByZWNvbXBpbGVIZWFkZXJzL2luY2x1ZGUvZm9vLmhcIjsjaW5jbHVkZSA8c3RkaW8uaD4oO3wkKSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIGZvbyBwY2ggaGVhZGVyXG4gICR7Zm9vX3BjaF9oZWFkZXJ9XG5oYXMgYmFkIGNvbnRlbnQ6XG4gICR7Zm9vX3BjaF9oZWFkZXJfc3RyaW5nc30iKQorICByZXR1cm4oKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoRGVidWdHZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaERlYnVnR2VuZXguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0Njg5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaERlYnVnR2VuZXguY21ha2UKQEAgLTAsMCArMSw5IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNSkKK3Byb2plY3QoUGNoRGVidWdHZW5leCBDKQorCithZGRfbGlicmFyeShmb28gZm9vLmMpCit0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyhmb28gUFVCTElDIGluY2x1ZGUpCit0YXJnZXRfcHJlY29tcGlsZV9oZWFkZXJzKGZvbyBQVUJMSUMKKyAgIiQ8JDxDT05GSUc6RGVidWc+OiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pbmNsdWRlL2Zvby5oPiIKKyAgPHN0ZGlvLmg+CispCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hJbnRlcmZhY2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hJbnRlcmZhY2UtY2hlY2suY21ha2UKaW5kZXggNGU2MmI4MS4uMjhjNmJhNCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoSW50ZXJmYWNlLWNoZWNrLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaEludGVyZmFjZS1jaGVjay5jbWFrZQpAQCAtMSw1ICsxLDkgQEAKIHNldChmb29fcGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvZm9vLmRpci9jbWFrZV9wY2guaCIpCiBzZXQoZm9vYmFyX3BjaF9oZWFkZXIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL2Zvb2Jhci5kaXIvY21ha2VfcGNoLmgiKQoraWYgKFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgIHNldChmb29fcGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvZm9vLmRpci9EZWJ1Zy9jbWFrZV9wY2guaCIpCisgIHNldChmb29iYXJfcGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvZm9vYmFyLmRpci9EZWJ1Zy9jbWFrZV9wY2guaCIpCitlbmRpZigpCiAKIGlmIChOT1QgRVhJU1RTICR7Zm9vX3BjaF9oZWFkZXJ9KQogICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBmb28gcGNoIGhlYWRlciAke2Zvb19wY2hfaGVhZGVyfSBkb2VzIG5vdCBleGlzdCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hNdWx0aWxhbmd1YWdlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoTXVsdGlsYW5ndWFnZS1jaGVjay5jbWFrZQppbmRleCA5NzE0YmVhLi4zMTE5MzQxIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hNdWx0aWxhbmd1YWdlLWNoZWNrLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaE11bHRpbGFuZ3VhZ2UtY2hlY2suY21ha2UKQEAgLTEsNSArMSw5IEBACiBzZXQoZm9vYmFyX3BjaF9oX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvZm9vYmFyLmRpci9jbWFrZV9wY2guaCIpCiBzZXQoZm9vYmFyX3BjaF9oeHhfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb29iYXIuZGlyL2NtYWtlX3BjaC5oeHgiKQoraWYgKFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgIHNldChmb29iYXJfcGNoX2hfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy9mb29iYXIuZGlyL0RlYnVnL2NtYWtlX3BjaC5oIikKKyAgc2V0KGZvb2Jhcl9wY2hfaHh4X2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvZm9vYmFyLmRpci9EZWJ1Zy9jbWFrZV9wY2guaHh4IikKK2VuZGlmKCkKIAogaWYgKE5PVCBFWElTVFMgJHtmb29iYXJfcGNoX2hfaGVhZGVyfSkKICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgZm9vYmFyIEMgcGNoIGhlYWRlciAke2Zvb2Jhcl9wY2hfaF9oZWFkZXJ9IGRvZXMgbm90IGV4aXN0IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaFByb2xvZ3VlRXBpbG9ndWUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hQcm9sb2d1ZUVwaWxvZ3VlLWNoZWNrLmNtYWtlCmluZGV4IDkwMTg2NjQuLmYxNTA0YTcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1BjaFByb2xvZ3VlRXBpbG9ndWUtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoUHJvbG9ndWVFcGlsb2d1ZS1jaGVjay5jbWFrZQpAQCAtMSw0ICsxLDcgQEAKIHNldChtYWluX3BjaF9oZWFkZXIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL21haW4uZGlyL2NtYWtlX3BjaC5oeHgiKQoraWYgKFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgIHNldChtYWluX3BjaF9oZWFkZXIgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL21haW4uZGlyL0RlYnVnL2NtYWtlX3BjaC5oeHgiKQorZW5kaWYoKQogCiBmaWxlKFNUUklOR1MgJHttYWluX3BjaF9oZWFkZXJ9IG1haW5fcGNoX2hlYWRlcl9zdHJpbmdzKQogc3RyaW5nKFJFR0VYIE1BVENIICIjcHJhZ21hIHdhcm5pbmdcXChwdXNoLCAwXFwpLiojaW5jbHVkZS4qcGNoLmguKiNwcmFnbWEgd2FybmluZ1xcKHBvcFxcKSIgbWF0Y2hlZF9jb2RlICR7bWFpbl9wY2hfaGVhZGVyX3N0cmluZ3N9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoV2FybkludmFsaWQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTdmYjMwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoV2FybkludmFsaWQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyMiBAQAoraWYgKE5PVCBDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVXxJbnRlbCIgT1IKKyAgIChDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJJbnRlbCIgQU5EIENNQUtFX0hPU1RfV0lOMzIpKQorICByZXR1cm4oKQorZW5kaWYoKQorCitmaWxlKFNUUklOR1MgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2NvbXBpbGVfY29tbWFuZHMuanNvbiBlbXB0eV9kaXJfY29tbWFuZHMKKyAgICAgUkVHRVggImNvbW1hbmQuKi1XaW52YWxpZC1wY2guKmVtcHR5LmRpci9jbWFrZV9wY2guaCIpCitmaWxlKFNUUklOR1MgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2NvbXBpbGVfY29tbWFuZHMuanNvbiBmb29fZGlyX2NvbW1hbmRzCisgICAgIFJFR0VYICJjb21tYW5kLiotV2ludmFsaWQtcGNoLipmb28uZGlyL2NtYWtlX3BjaC5oIikKKworbGlzdChMRU5HVEggZW1wdHlfZGlyX2NvbW1hbmRzIGVtcHR5X2Rpcl9jb21tYW5kc19zaXplKQorbGlzdChMRU5HVEggZm9vX2Rpcl9jb21tYW5kcyBmb29fZGlyX2NvbW1hbmRzX3NpemUpCisKK2lmIChlbXB0eV9kaXJfY29tbWFuZHNfc2l6ZSBFUVVBTCAwKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgImVtcHR5IHRhcmdldCBzaG91bGQgaGF2ZSAtV2ludmFsaWQtcGNoIGNvbXBpbGUgb3B0aW9uIHByZXNlbnQiKQorICByZXR1cm4oKQorZW5kaWYoKQorCitpZiAoZm9vX2Rpcl9jb21tYW5kc19zaXplIEdSRUFURVIgMCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJmb28gdGFyZ2V0IHNob3VsZCBub3QgaGF2ZSAtV2ludmFsaWQtcGNoIGNvbXBpbGUgb3B0aW9uIHByZXNlbnQiKQorICByZXR1cm4oKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoV2FybkludmFsaWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9QY2hXYXJuSW52YWxpZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTI1NjY0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUGNoV2FybkludmFsaWQuY21ha2UKQEAgLTAsMCArMSwxNiBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldChDTUFLRV9FWFBPUlRfQ09NUElMRV9DT01NQU5EUyBPTikKKworYWRkX2xpYnJhcnkoZW1wdHkgZW1wdHkuYykKK3RhcmdldF9wcmVjb21waWxlX2hlYWRlcnMoZW1wdHkgUFVCTElDCisgIDxzdGRpby5oPgorICA8c3RyaW5nLmg+CispCisKK2FkZF9saWJyYXJ5KGZvbyBmb28uYykKK3RhcmdldF9wcmVjb21waWxlX2hlYWRlcnMoZm9vIFBVQkxJQworICA8c3RkaW8uaD4KKyAgPHN0cmluZy5oPgorKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGZvbyBQUk9QRVJUSUVTIFBDSF9XQVJOX0lOVkFMSUQgT0ZGKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDhkMmY0ZjkuLjM4MWI4MDAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTQsMTUgKzQsMTMgQEAKIGZ1bmN0aW9uKHJ1bl90ZXN0IG5hbWUpCiAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke25hbWV9LWJ1aWxkKQogICBydW5fY21ha2UoJHtuYW1lfSkKLSAgIyBQcmVjb21waWxlZCBoZWFkZXJzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcy4KLSAgaWYoTk9UICIkRU5We0NNQUtFX09TWF9BUkNISVRFQ1RVUkVTfSIgTUFUQ0hFUyAiWzskXSIpCi0gICAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKLSAgICBydW5fY21ha2VfY29tbWFuZCgke25hbWV9LWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIERlYnVnKQotICAgIHJ1bl9jbWFrZV9jb21tYW5kKCR7bmFtZX0tdGVzdCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DIERlYnVnKQotICBlbmRpZigpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHJ1bl9jbWFrZV9jb21tYW5kKCR7bmFtZX0tYnVpbGQgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4gLS1jb25maWcgRGVidWcpCisgIHJ1bl9jbWFrZV9jb21tYW5kKCR7bmFtZX0tdGVzdCAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DIERlYnVnKQogZW5kZnVuY3Rpb24oKQogCiBydW5fY21ha2UoRGlzYWJsZWRQY2gpCitydW5fY21ha2UoUGNoRGVidWdHZW5leCkKIHJ1bl90ZXN0KFBjaEludGVyZmFjZSkKIHJ1bl9jbWFrZShQY2hQcm9sb2d1ZUVwaWxvZ3VlKQogcnVuX3Rlc3QoU2tpcFByZWNvbXBpbGVIZWFkZXJzKQpAQCAtMjAsMyArMTgsNiBAQAogcnVuX3Rlc3QoUGNoUmV1c2VGcm9tUHJlZml4ZWQpCiBydW5fdGVzdChQY2hSZXVzZUZyb21TdWJkaXIpCiBydW5fY21ha2UoUGNoTXVsdGlsYW5ndWFnZSkKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJNYWtlfE5pbmphIikKKyAgcnVuX2NtYWtlKFBjaFdhcm5JbnZhbGlkKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL1ByZWNvbXBpbGVIZWFkZXJzL2VtcHR5LmMKaW5kZXggMzBhZTFjNC4uMmE1MWViYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUHJlY29tcGlsZUhlYWRlcnMvZW1wdHkuYworKysgYi9UZXN0cy9SdW5DTWFrZS9QcmVjb21waWxlSGVhZGVycy9lbXB0eS5jCkBAIC0xLDMgKzEsMyBAQAotdm9pZCBub3RoaW5nKCkKK3ZvaWQgbm90aGluZyh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvUnVuQ01ha2UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9SdW5DTWFrZS5jbWFrZQppbmRleCBkYTRkMWU1Li5jMTNjNjk0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9SdW5DTWFrZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9SdW5DTWFrZS5jbWFrZQpAQCAtMTQ2LDggKzE0NiwxNSBAQAogICAgICJ8Y2xhbmdbXjpdKjogd2FybmluZzogdGhlIG9iamVjdCBzaXplIHNhbml0aXplciBoYXMgbm8gZWZmZWN0IGF0IC1PMCwgYnV0IGlzIGV4cGxpY2l0bHkgZW5hYmxlZDoiCiAgICAgInxFcnJvciBrc3RhdCByZXR1cm5lZCIKICAgICAifEhpdCB4Y29kZWJ1aWxkIGJ1ZyIKKworICAgICJ8TElDRU5TRSBXQVJOSU5HOiIKKyAgICAifFlvdXIgbGljZW5zZSB0byB1c2UgUEdJW15cbl0qZXhwaXJlZCIKKyAgICAifFBsZWFzZSBvYnRhaW4gYSBuZXcgdmVyc2lvbiBhdCIKKyAgICAifGNvbnRhY3QgUEdJIFNhbGVzIGF0IgorCiAgICAgInxbXlxuXSp4Y29kZWJ1aWxkW15cbl0qd2FybmluZzogZmlsZSB0eXBlW15cbl0qaXMgYmFzZWQgb24gbWlzc2luZyBmaWxlIHR5cGUiCiAgICAgInxbXlxuXSppcyBhIG1lbWJlciBvZiBtdWx0aXBsZSBncm91cHMiCisgICAgInxbXlxuXSpvZmZzZXQgaW4gYXJjaGl2ZSBub3QgYSBtdWx0aXBsZSBvZiA4IgogICAgICJ8W15cbl0qZnJvbSBUaW1lIE1hY2hpbmUgYnkgcGF0aCIKICAgICAifFteXG5dKkJ1bGxzZXllIFRlc3RpbmcgVGVjaG5vbG9neSIKICAgICAiKVteXG5dKlxuKSsiCkBAIC0yMDQsNSArMjExLDI4IEBACiAgIHJ1bl9jbWFrZSgke3Rlc3R9KQogZW5kZnVuY3Rpb24oKQogCitmdW5jdGlvbihlbnN1cmVfZmlsZXNfbWF0Y2ggZXhwZWN0ZWRfZmlsZSBhY3R1YWxfZmlsZSkKKyAgaWYoTk9UIEVYSVNUUyAiJHtleHBlY3RlZF9maWxlfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRXhwZWN0ZWQgZmlsZSBkb2VzIG5vdCBleGlzdDpcbiAgJHtleHBlY3RlZF9maWxlfSIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIEVYSVNUUyAiJHthY3R1YWxfZmlsZX0iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkFjdHVhbCBmaWxlIGRvZXMgbm90IGV4aXN0OlxuICAke2FjdHVhbF9maWxlfSIpCisgIGVuZGlmKCkKKyAgZmlsZShSRUFEICIke2V4cGVjdGVkX2ZpbGV9IiBleHBlY3RlZF9maWxlX2NvbnRlbnQpCisgIGZpbGUoUkVBRCAiJHthY3R1YWxfZmlsZX0iIGFjdHVhbF9maWxlX2NvbnRlbnQpCisgIGlmKE5PVCAiJHtleHBlY3RlZF9maWxlX2NvbnRlbnR9IiBTVFJFUVVBTCAiJHthY3R1YWxfZmlsZV9jb250ZW50fSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQWN0dWFsIGZpbGUgY29udGVudCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZDpcbgorICAgIFxuCisgICAgICBleHBlY3RlZCBmaWxlOiAke2V4cGVjdGVkX2ZpbGV9XG4KKyAgICAgIGV4cGVjdGVkIGNvbnRlbnQ6XG4KKyAgICAgICR7ZXhwZWN0ZWRfZmlsZV9jb250ZW50fVxuCisgICAgXG4KKyAgICAgIGFjdHVhbCBmaWxlOiAke2FjdHVhbF9maWxlfVxuCisgICAgICBhY3R1YWwgY29udGVudDpcbgorICAgICAgJHthY3R1YWxfZmlsZV9jb250ZW50fVxuCisgICAgIikKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCiAjIFByb3RlY3QgUnVuQ01ha2UgdGVzdHMgZnJvbSBjYWxsaW5nIGVudmlyb25tZW50LgogdW5zZXQoRU5We01BS0VGTEFHU30pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9SZWxhdGl2ZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1J1bnRpbWVQYXRoL1JlbGF0aXZlLmNtYWtlCmluZGV4IDIwMzI0MWYuLjgwZWQxODkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1J1bnRpbWVQYXRoL1JlbGF0aXZlLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1J1bnRpbWVQYXRoL1JlbGF0aXZlLmNtYWtlCkBAIC0xLDUgKzEsMTIgQEAKIGVuYWJsZV9sYW5ndWFnZShDKQogCitzZXQoY2ZnX3VwKQorc2V0KGNmZ19zbGFzaCAvKQoraWYoY2ZnX2RpcikKKyAgc2V0KGNmZ191cCAvLi4pCisgIHNldChjZmdfc2xhc2gpCitlbmRpZigpCisKIGlmKE5PVCBDTUFLRV9TSEFSRURfTElCUkFSWV9SUEFUSF9PUklHSU5fVE9LRU4pCiAgIGlmKENNQUtFX0NfUExBVEZPUk1fSUQgU1RSRVFVQUwgIkxpbnV4IikKICAgICAjIFNhbml0eSBjaGVjayBmb3IgcGxhdGZvcm0gdGhhdCBpcyBkZWZpbml0ZWx5IGtub3duIHRvIHN1cHBvcnQgJE9SSUdJTi4KQEAgLTQ1LDI1ICs1MiwyNSBAQAogYWRkX2V4ZWN1dGFibGUobWFpbi1ub3JlbCBtYWluLmMpCiB0YXJnZXRfbGlua19saWJyYXJpZXMobWFpbi1ub3JlbCB1dGlscykKIHNldF9wcm9wZXJ0eShUQVJHRVQgbWFpbi1ub3JlbCBQUk9QRVJUWSBCVUlMRF9SUEFUSF9VU0VfT1JJR0lOIE9GRikKLUNoZWNrUnBhdGgobWFpbi1ub3JlbCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IikKK0NoZWNrUnBhdGgobWFpbi1ub3JlbCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9JHtjZmdfZGlyfSIpCiAKIGFkZF9leGVjdXRhYmxlKG1haW5zdWIgbWFpbi5jKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1haW5zdWIgdXRpbHMpCiBzZXRfcHJvcGVydHkoVEFSR0VUIG1haW5zdWIgUFJPUEVSVFkgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9iaW4pCi1DaGVja1JwYXRoKG1haW5zdWIgIlwkT1JJR0lOLy4uLyIpCitDaGVja1JwYXRoKG1haW5zdWIgIlwkT1JJR0lOJHtjZmdfdXB9Ly4uJHtjZmdfZGlyfSR7Y2ZnX3NsYXNofSIpCiAKIGFkZF9leGVjdXRhYmxlKG1haW4tc3ViIG1haW4uYykKIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYWluLXN1YiB1dGlscy1zdWIpCi1DaGVja1JwYXRoKG1haW4tc3ViICJcJE9SSUdJTi9saWJzIikKK0NoZWNrUnBhdGgobWFpbi1zdWIgIlwkT1JJR0lOJHtjZmdfdXB9L2xpYnMke2NmZ19kaXJ9IikKIAogYWRkX2V4ZWN1dGFibGUobWFpbnN1Yi1zdWIgbWFpbi5jKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1haW5zdWItc3ViIHV0aWxzLXN1YikKIHNldF9wcm9wZXJ0eShUQVJHRVQgbWFpbnN1Yi1zdWIgUFJPUEVSVFkgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9iaW4pCi1DaGVja1JwYXRoKG1haW5zdWItc3ViICJcJE9SSUdJTi8uLi9saWJzIikKK0NoZWNrUnBhdGgobWFpbnN1Yi1zdWIgIlwkT1JJR0lOJHtjZmdfdXB9Ly4uL2xpYnMke2NmZ19kaXJ9IikKIAogaWYoZXh0ZXJuRGlyKQogICAjIEJpbmFyaWVzIGxpbmtpbmcgdG8gbGlicmFyaWVzIG91dHNpZGUgdGhlIGJ1aWxkIHRyZWUgc2hvdWxkIGhhdmUgYW4gYWJzb2x1dGUgUlBBVEguCiAgIGFkZF9leGVjdXRhYmxlKG1haW4tZXh0ZXJuIG1haW4uYykKICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1haW4tZXh0ZXJuIHV0aWxzLWV4dGVybikKLSAgQ2hlY2tScGF0aChtYWluLWV4dGVybiAiJHtleHRlcm5EaXJ9IikKKyAgQ2hlY2tScGF0aChtYWluLWV4dGVybiAiJHtleHRlcm5EaXJ9JHtjZmdfZGlyfSIpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNGM5ZGRjZC4uYWQ0NDZlOSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvUnVudGltZVBhdGgvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1J1bnRpbWVQYXRoL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNiw3ICs2LDkgQEAKICAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7bmFtZX0tYnVpbGQpCiAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCiAgIGlmKE5PVCBSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQotICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURDTUFLRV9CVUlMRF9UWVBFPURlYnVnKQorICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURjZmdfZGlyPSAtRENNQUtFX0JVSUxEX1RZUEU9RGVidWcpCisgIGVsc2UoKQorICAgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMgLURjZmdfZGlyPS8kPENPTkZJRz4pCiAgIGVuZGlmKCkKICAgZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKICAgZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9IikKQEAgLTE0LDEyICsxNiwxNiBAQAogICBydW5fY21ha2VfY29tbWFuZCgke25hbWV9LWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tY29uZmlnIERlYnVnKQogZW5kZnVuY3Rpb24oKQogCitzZXQoY2ZnX2RpcikKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgIHNldChjZmdfZGlyIC9EZWJ1ZykKK2VuZGlmKCkKKwogcnVuX1J1bnRpbWVQYXRoKFN5bWxpbmtJbXBsaWNpdCkKIHJ1bl9jbWFrZV9jb21tYW5kKFN5bWxpbmtJbXBsaWNpdENoZWNrCi0gICR7Q01BS0VfQ09NTUFORH0gLURkaXI9JHtSdW5DTWFrZV9CSU5BUllfRElSfS9TeW1saW5rSW1wbGljaXQtYnVpbGQgLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9TeW1saW5rSW1wbGljaXRDaGVjay5jbWFrZSkKKyAgJHtDTUFLRV9DT01NQU5EfSAtRGRpcj0ke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1N5bWxpbmtJbXBsaWNpdC1idWlsZCAtRGNmZ19kaXI9JHtjZmdfZGlyfSAtUCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L1N5bWxpbmtJbXBsaWNpdENoZWNrLmNtYWtlKQogCiBydW5fUnVudGltZVBhdGgoUmVsYXRpdmUpCi0jIEZJWE1FOiBSdW4gUmVsYXRpdmVDaGVjayAoYXBwZWFycyB0byBiZSBicm9rZW4gY3VycmVudGx5KQogCiBydW5fUnVudGltZVBhdGgoR2VuZXgpCiBydW5fY21ha2VfY29tbWFuZChHZW5leENoZWNrCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9SdW50aW1lUGF0aC9TeW1saW5rSW1wbGljaXRDaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1J1bnRpbWVQYXRoL1N5bWxpbmtJbXBsaWNpdENoZWNrLmNtYWtlCmluZGV4IGQzNDc0MmUuLjRmNTBkNGIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1J1bnRpbWVQYXRoL1N5bWxpbmtJbXBsaWNpdENoZWNrLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1J1bnRpbWVQYXRoL1N5bWxpbmtJbXBsaWNpdENoZWNrLmNtYWtlCkBAIC0xLDIgKzEsMiBAQAotZmlsZShDT1BZICR7ZGlyfS9iaW4vZXhlIERFU1RJTkFUSU9OICR7ZGlyfSkKK2ZpbGUoQ09QWSAke2Rpcn0vYmluJHtjZmdfZGlyfS9leGUgREVTVElOQVRJT04gJHtkaXJ9KQogZmlsZShSUEFUSF9DSEFOR0UgRklMRSAiJHtkaXJ9L2V4ZSIgT0xEX1JQQVRIICIke2Rpcn0vbGliTGluayIgTkVXX1JQQVRIICJvbGQtc2hvdWxkLW5vdC1leGlzdCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Tb3VyY2VQcm9wZXJ0aWVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvU291cmNlUHJvcGVydGllcy9DTWFrZUxpc3RzLnR4dAppbmRleCBhMTdjOGNkLi5lOTNmMGI2IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Tb3VyY2VQcm9wZXJ0aWVzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL1NvdXJjZVByb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IEMpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Td2lmdC9MLnN3aWZ0IGIvVGVzdHMvUnVuQ01ha2UvU3dpZnQvTC5zd2lmdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWZmODdlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvU3dpZnQvTC5zd2lmdApAQCAtMCwwICsxIEBACitwdWJsaWMgbGV0IFRoaXJ0eVR3bzogSW50ID0gMzIKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1N3aWZ0L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1N3aWZ0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA0ODE3MDQ1Li4xZGIyMDJlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9Td2lmdC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvU3dpZnQvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC03LDYgKzcsMTYgQEAKIGVsc2VpZihSdW5DTWFrZV9HRU5FUkFUT1IgU1RSRVFVQUwgTmluamEpCiAgIGlmKENNQUtFX1N3aWZ0X0NPTVBJTEVSKQogICAgIHJ1bl9jbWFrZShXaW4zMkV4ZWN1dGFibGVEaXNhbGxvd2VkKQorCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNQUtFX1NZU1RFTV9OQU1FPURhcndpbikKKyAgICBydW5fY21ha2UoU3dpZnRNdWx0aUFyY2gpCisgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorICBlbmRpZigpCitlbHNlaWYoUnVuQ01ha2VfR0VORVJBVE9SIFNUUkVRVUFMICJOaW5qYSBNdWx0aS1Db25maWciKQorICBpZihDTUFLRV9Td2lmdF9DT01QSUxFUikKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TICItRENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVM9RGVidWdcXDtSZWxlYXNlIikKKyAgICBydW5fY21ha2UoU3dpZnRTaW1wbGUpCisgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQogICBlbmRpZigpCiBlbHNlKCkKICAgcnVuX2NtYWtlKE5vdFN1cHBvcnRlZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9Td2lmdC9Td2lmdE11bHRpQXJjaC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL1N3aWZ0L1N3aWZ0TXVsdGlBcmNoLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1N3aWZ0L1N3aWZ0TXVsdGlBcmNoLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9Td2lmdC9Td2lmdE11bHRpQXJjaC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NGJkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Td2lmdC9Td2lmdE11bHRpQXJjaC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IFN3aWZ0TXVsdGlBcmNoLmNtYWtlOjMgXChwcm9qZWN0XCk6CisgIG11bHRpcGxlIHZhbHVlcyBmb3IgQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMgbm90IHN1cHBvcnRlZCB3aXRoIFN3aWZ0CitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Td2lmdC9Td2lmdE11bHRpQXJjaC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1N3aWZ0L1N3aWZ0TXVsdGlBcmNoLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZGI2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Td2lmdC9Td2lmdE11bHRpQXJjaC5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE1LjEpCitzZXQoQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMgImFybXY3O2FybTY0O2kzODY7eDg2XzY0IikKK3Byb2plY3QoU3dpZnRNdWx0aUFyY2gKKyAgTEFOR1VBR0VTIFN3aWZ0KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvU3dpZnQvU3dpZnRTaW1wbGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Td2lmdC9Td2lmdFNpbXBsZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI3MDJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvU3dpZnQvU3dpZnRTaW1wbGUuY21ha2UKQEAgLTAsMCArMSwyIEBACitlbmFibGVfbGFuZ3VhZ2UoU3dpZnQpCithZGRfbGlicmFyeShMIEwuc3dpZnQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmZWEyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoIiR7aW5jbHVkZV9kaXJ9LyR7UnVuQ01ha2VfVEVTVH0uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL1ByaW50VHJlZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvUHJpbnRUcmVlcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTk5MTI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL1ByaW50VHJlZXMuY21ha2UKQEAgLTAsMCArMSw2IEBACittZXNzYWdlKFNUQVRVUyAic291cmNlOiAnJHtDTUFLRV9TT1VSQ0VfRElSfSciKQorbWVzc2FnZShTVEFUVVMgImJpbmFyeTogJyR7Q01BS0VfQklOQVJZX0RJUn0nIikKK2dldF9maWxlbmFtZV9jb21wb25lbnQocmVhbF9zb3VyY2UgIiR7Q01BS0VfU09VUkNFX0RJUn0iIFJFQUxQQVRIKQorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChyZWFsX2JpbmFyeSAiJHtDTUFLRV9CSU5BUllfRElSfSIgUkVBTFBBVEgpCittZXNzYWdlKFNUQVRVUyAicmVhbCBzb3VyY2U6ICcke3JlYWxfc291cmNlfSciKQorbWVzc2FnZShTVEFUVVMgInJlYWwgYmluYXJ5OiAnJHtyZWFsX2JpbmFyeX0nIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjFmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMzQgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKKyMgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYGAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7bmFtZX0vc291cmNlYGAgYW5kCisjIGBgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke25hbWV9L2JpbmFyeWBgIGFyZSBzZXQgdXAgcHJvcGVybHkgcHJpb3IgdG8KKyMgY2FsbGluZyBpdC4KK2Z1bmN0aW9uIChydW5fc3ltbGlua190ZXN0IG5hbWUpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIFRSVUUpCisgIGNvbmZpZ3VyZV9maWxlKAorICAgICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NNYWtlTGlzdHMudHh0IgorICAgICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7bmFtZX0vc291cmNlL0NNYWtlTGlzdHMudHh0IgorICAgIENPUFlPTkxZKQorICBzZXQoUnVuQ01ha2VfVEVTVF9TT1VSQ0VfRElSICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7bmFtZX0vc291cmNlIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAiJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke25hbWV9L2JpbmFyeSIpCisgICMgRW11bGF0ZSBhIHNoZWxsIHVzaW5nIHRoaXMgZGlyZWN0b3J5LgorICBzZXQoRU5We1BXRH0gIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfSIpCisgIHNldChSdW5DTWFrZV9URVNUX09QVElPTlMKKyAgICAiLURpbmNsdWRlX2RpcjpQQVRIPSR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0iKQorICBydW5fY21ha2UoIiR7bmFtZX1fc3ltbGlua3MiKQorZW5kZnVuY3Rpb24gKCkKKworIyBDcmVhdGUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisjCisjICAgLi4uL2NvbW1vbl9yZWFsL3NvdXJjZQorIyAgIC4uLi9jb21tb25fcmVhbC9iaW5hcnkKKyMgICAuLi4vY29tbW9uIC0+IGNvbW1vbl9yZWFsCisjCisjIEluIHRoaXMgY2FzZSwgQ01ha2Ugc2hvdWxkIGFjdCBhcyBpZiAuLi4vY29tbW9uICppcyogLi4uL2NvbW1vbl9yZWFsIGZvciBhbGwKKyMgY29tcHV0YXRpb25zIGV4Y2VwdCBgYFJFQUxQQVRIYGAuICBUaGlzIHN1cHBvcnRzIHRoZSBjYXNlIHdoZXJlIGEgc3lzdGVtIGhhcworIyBhIHN0YWJsZSAqc3ltbGluayosIGJ1dCBub3QgYSBzdGFibGUgdGFyZ2V0IGZvciB0aGF0IHN5bWxpbmsuCitmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L2NvbW1vbl9yZWFsIikKK2ZpbGUoUkVNT1ZFICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L2NvbW1vbiIpCitmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L2NvbW1vbl9yZWFsL3NvdXJjZSIpCitmaWxlKENSRUFURV9MSU5LICJjb21tb25fcmVhbCIgIiR7UnVuQ01ha2VfQklOQVJZX0RJUn0vY29tbW9uIiBTWU1CT0xJQykKK3J1bl9zeW1saW5rX3Rlc3QoY29tbW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL2NvbW1vbl9zeW1saW5rcy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL2NvbW1vbl9zeW1saW5rcy1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMDQ0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvY29tbW9uX3N5bWxpbmtzLXN0ZG91dC50eHQKQEAgLTAsMCArMSw0IEBACistLSBzb3VyY2U6ICdbXiddKi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvY29tbW9uL3NvdXJjZScKKy0tIGJpbmFyeTogJ1teJ10qL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9jb21tb24vYmluYXJ5JworLS0gcmVhbCBzb3VyY2U6ICdbXiddKi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvY29tbW9uX3JlYWwvc291cmNlJworLS0gcmVhbCBiaW5hcnk6ICdbXiddKi9UZXN0cy9SdW5DTWFrZS9TeW1saW5rVHJlZXMvY29tbW9uX3JlYWwvYmluYXJ5JwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvU3ltbGlua1RyZWVzL2NvbW1vbl9zeW1saW5rcy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9jb21tb25fc3ltbGlua3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhZmUyNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1N5bWxpbmtUcmVlcy9jb21tb25fc3ltbGlua3MuY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZSgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9QcmludFRyZWVzLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1N5bnRheC9Db21tYW5kRU9GLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9TeW50YXgvQ29tbWFuZEVPRi1zdGRlcnIudHh0CmluZGV4IDMxY2JjMDguLmI5ZjhmZDEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1N5bnRheC9Db21tYW5kRU9GLXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvU3ludGF4L0NvbW1hbmRFT0Ytc3RkZXJyLnR4dApAQCAtMSw0ICsxLDQgQEAKLV5DTWFrZSBFcnJvciBpbiBDb21tYW5kRU9GLmNtYWtlOgorXkNNYWtlIEVycm9yIGF0IENvbW1hbmRFT0YuY21ha2U6MToKICAgVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4KIAogICBQYXJzZSBlcnJvci4gIEZ1bmN0aW9uIG1pc3Npbmcgb3BlbmluZyAiXCgiLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0T2JqZWN0cy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldE9iamVjdHMvQ01ha2VMaXN0cy50eHQKaW5kZXggYmU5ZDQwMy4uNDRiNWQzMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0T2JqZWN0cy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRPYmplY3RzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFBvbGljaWVzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UG9saWNpZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UG9saWNpZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UG9saWNpZXMvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQb2xpY2llcy9Qb2xpY3lMaXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQb2xpY2llcy9Qb2xpY3lMaXN0LXN0ZGVyci50eHQKaW5kZXggNmQ3MmZhYy4uMjQ1NGYyNSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UG9saWNpZXMvUG9saWN5TGlzdC1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFBvbGljaWVzL1BvbGljeUxpc3Qtc3RkZXJyLnR4dApAQCAtMjgsNiArMjgsMTAgQEAKICAgIFwqIENNUDAwODEKICAgIFwqIENNUDAwODMKICAgIFwqIENNUDAwOTUKKyAgIFwqIENNUDAwOTkKKyAgIFwqIENNUDAxMDQKKyAgIFwqIENNUDAxMDUKKyAgIFwqIENNUDAxMDgKIAogQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKICAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiNWQzMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9KQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9EZXByZWNhdGlvbi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9EZXByZWNhdGlvbi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTRjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0aWVzL0RlcHJlY2F0aW9uLXN0ZGVyci50eHQKQEAgLTAsMCArMSw5IEBACiteQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IERlcHJlY2F0aW9uXC5jbWFrZTpbMC05XSsgXCh0YXJnZXRfbGlua19saWJyYXJpZXNcKToKKyAgVGhlIGxpYnJhcnkgdGhhdCBpcyBiZWluZyBsaW5rZWQgdG8sIHRlc3RMaWJEZXByZWNhdGlvbiwgaXMgbWFya2VkIGFzIGJlaW5nCisgIGRlcHJlY2F0ZWQgYnkgdGhlIG93bmVyXC4gIFRoZSBtZXNzYWdlIHByb3ZpZGVkIGJ5IHRoZSBkZXZlbG9wZXIgaXM6CisKKyAgRGVwcmVjYXRlZCB2ZXJzaW9uXC4gIFBsZWFzZSB1c2UgbGF0ZXN0IHZlcnNpb24KKworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnNcLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9EZXByZWNhdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvRGVwcmVjYXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM2MTI3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvRGVwcmVjYXRpb24uY21ha2UKQEAgLTAsMCArMSw1IEBACithZGRfbGlicmFyeSh0ZXN0TGliRGVwcmVjYXRpb24gU1RBVElDIGVtcHR5LmNwcCkKK3NldF9wcm9wZXJ0eShUQVJHRVQgdGVzdExpYkRlcHJlY2F0aW9uIFBST1BFUlRZIERFUFJFQ0FUSU9OICJEZXByZWNhdGVkIHZlcnNpb24uIFBsZWFzZSB1c2UgbGF0ZXN0IHZlcnNpb24iKQorCithZGRfZXhlY3V0YWJsZSh0ZXN0RXhlMSBlbXB0eS5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdEV4ZTEgdGVzdExpYkRlcHJlY2F0aW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0aWVzL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWYzMWRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydGllcy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwzIEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitydW5fY21ha2UoRGVwcmVjYXRpb24pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0aWVzL2VtcHR5LmNwcCBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnRpZXMvZW1wdHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0aWVzL2VtcHR5LmNwcApAQCAtMCwwICsxLDQgQEAKK2ludCBlbXB0eSgpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydHlHZW5lcmF0b3JFeHByZXNzaW9ucy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFByb3BlcnR5R2VuZXJhdG9yRXhwcmVzc2lvbnMvQ01ha2VMaXN0cy50eHQKaW5kZXggOTBhZmMxMi4uYzM5MjJkNiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0UHJvcGVydHlHZW5lcmF0b3JFeHByZXNzaW9ucy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRQcm9wZXJ0eUdlbmVyYXRvckV4cHJlc3Npb25zL0NNYWtlTGlzdHMudHh0CkBAIC0xLDUgKzEsNSBAQAogCi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IENYWCkKIAogIyBNU1ZDIGNyZWF0ZXMgZXh0cmEgdGFyZ2V0cyB3aGljaCBwb2xsdXRlIHRoZSBzdGRlcnIgdW5sZXNzIHdlIHNldCB0aGlzLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0U291cmNlcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFNvdXJjZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggZjQ1MmRiMS4uYTA2NTkxYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVGFyZ2V0U291cmNlcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9UYXJnZXRTb3VyY2VzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBDWFgpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9UYXJnZXRTb3VyY2VzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFNvdXJjZXMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGJlZThjNGUuLjBkNDYyYmEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFNvdXJjZXMvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1RhcmdldFNvdXJjZXMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDYgKzEsNiBAQAogaW5jbHVkZShSdW5DTWFrZSkKIAotaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW98WGNvZGUiKQoraWYoUnVuQ01ha2VfR0VORVJBVE9SIFNUUkVRVUFMICJYY29kZSIpCiAgIHJ1bl9jbWFrZShDb25maWdOb3RBbGxvd2VkKQogZW5kaWYoKQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDI0ZGFhNjQuLjliYTNjODUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDE0ICsxLDIwIEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogCiBydW5fY21ha2UodW5pdHlidWlsZF9jKQorcnVuX2NtYWtlKHVuaXR5YnVpbGRfY19iYXRjaCkKK3J1bl9jbWFrZSh1bml0eWJ1aWxkX2NfZ3JvdXApCiBydW5fY21ha2UodW5pdHlidWlsZF9jeHgpCitydW5fY21ha2UodW5pdHlidWlsZF9jeHhfZ3JvdXApCiBydW5fY21ha2UodW5pdHlidWlsZF9jX2FuZF9jeHgpCitydW5fY21ha2UodW5pdHlidWlsZF9jX2FuZF9jeHhfZ3JvdXApCiBydW5fY21ha2UodW5pdHlidWlsZF9iYXRjaHNpemUpCiBydW5fY21ha2UodW5pdHlidWlsZF9kZWZhdWx0X2JhdGNoc2l6ZSkKIHJ1bl9jbWFrZSh1bml0eWJ1aWxkX3NraXApCiBydW5fY21ha2UodW5pdHlidWlsZF9jb2RlX2JlZm9yZV9hbmRfYWZ0ZXJfaW5jbHVkZSkKIHJ1bl9jbWFrZSh1bml0eWJ1aWxkX2Nfbm9fdW5pdHlfYnVpbGQpCitydW5fY21ha2UodW5pdHlidWlsZF9jX25vX3VuaXR5X2J1aWxkX2dyb3VwKQogcnVuX2NtYWtlKHVuaXR5YnVpbGRfb3JkZXIpCitydW5fY21ha2UodW5pdHlidWlsZF9pbnZhbGlkX21vZGUpCiAKIGZ1bmN0aW9uKHJ1bl90ZXN0IG5hbWUpCiAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke25hbWV9LWJ1aWxkKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC9mLmMgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTgxM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC9mLmMKQEAgLTAsMCArMSw1IEBACitpbnQgZihpbnQgeCkKK3sKKyAgKHZvaWQpeDsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19hbmRfY3h4X2dyb3VwLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYW5kX2N4eF9ncm91cC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDI3NjgyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYW5kX2N4eF9ncm91cC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQyIEBACitzZXQodW5pdHlidWlsZF9hX2MgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfYV9jLmMiKQoraWYoTk9UIEVYSVNUUyAiJHt1bml0eWJ1aWxkX2FfY30iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZXMgJHt1bml0eWJ1aWxkX2FfY30gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2Vsc2UoKQorICAjdmVyaWZ5IHRoYXQgdGhlIDQgYyBmaWxlIGlzIHBhcnQgb2YgdGhpcyBncm91cGluZyBhbmQgdGhlcmVmb3JlIFVOSVRZX0JVSUxEX0JBVENIX1NJWkUKKyAgI3dhcyBpZ25vcmVkCisgIGZpbGUoU1RSSU5HUyAke3VuaXR5YnVpbGRfYV9jfSB1bml0eWJ1aWxkX2FfY19zdHJpbmdzKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIi4qI2luY2x1ZGUuKnMxLmMuKiNpbmNsdWRlLipzMi5jLiojaW5jbHVkZS4qczMuYy4qI2luY2x1ZGUuKnM0LmMuKiIgbWF0Y2hlZF9jb2RlICR7dW5pdHlidWlsZF9hX2Nfc3RyaW5nc30pCisgIGlmKE5PVCBtYXRjaGVkX2NvZGUpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgZmlsZSBkb2Vzbid0IGluY2x1ZGUgZXhwZWN0ZWQgc291cmNlIGZpbGVzIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCitlbmRpZigpCisKK3NldCh1bml0eWJ1aWxkX2JfYyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9iX2MuYyIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYl9jfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlcyAke3VuaXR5YnVpbGRfYl9jfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCisKK3NldCh1bml0eWJ1aWxkX2FfY3h4ICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X2FfY3h4LmN4eCIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYV9jeHh9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9hX2N4eH0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2Vsc2UoKQorICAjdmVyaWZ5IHRoYXQgdGhlIDQgY3h4IGZpbGUgYXJlIHBhcnQgb2YgdGhpcyBncm91cGluZyBhbmQgdGhlcmVmb3JlIFVOSVRZX0JVSUxEX0JBVENIX1NJWkUKKyAgI3dhcyBpZ25vcmVkCisgIGZpbGUoU1RSSU5HUyAke3VuaXR5YnVpbGRfYV9jeHh9IHVuaXR5YnVpbGRfYV9jeHhfc3RyaW5ncykKKyAgc3RyaW5nKFJFR0VYIE1BVENIICIuKiNpbmNsdWRlLipzMS5jeHguKiNpbmNsdWRlLipzMi5jeHguKiNpbmNsdWRlLipzMy5jeHguKiNpbmNsdWRlLipzNC5jeHguKiIgbWF0Y2hlZF9jb2RlICR7dW5pdHlidWlsZF9hX2N4eF9zdHJpbmdzfSkKKyAgaWYoTk9UIG1hdGNoZWRfY29kZSkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBmaWxlIGRvZXNuJ3QgaW5jbHVkZSBleHBlY3RlZCBzb3VyY2UgZmlsZXMiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworc2V0KHVuaXR5YnVpbGRfYl9jeHggIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfYl9jeHguY3h4IikKK2lmKE5PVCBFWElTVFMgIiR7dW5pdHlidWlsZF9iX2N4eH0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZXMgJHt1bml0eWJ1aWxkX2JfY3h4fSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYW5kX2N4eF9ncm91cC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2FuZF9jeHhfZ3JvdXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmM2Y0YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2FuZF9jeHhfZ3JvdXAuY21ha2UKQEAgLTAsMCArMSwzOSBAQAorcHJvamVjdCh1bml0eWJ1aWxkX2NfYW5kX2N4eCBDIENYWCkKKworc2V0KHNyY3MgZi5jKQorZm9yZWFjaChzIFJBTkdFIDEgOCkKKyAgc2V0KHNyY19jICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcyR7c30uYyIpCisgIGZpbGUoV1JJVEUgIiR7c3JjX2N9IiAiCitpbnQgZihpbnQpO1xuCitpbnQgcyR7c30odm9pZCkgeyByZXR1cm4gZigke3N9KTsgfVxuIgorICApCisKKyAgc2V0KHNyY19jeHggIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zJHtzfS5jeHgiKQorICBmaWxlKFdSSVRFICIke3NyY19jeHh9IiAiCitleHRlcm4gXCJDXCIgeyBcbgorICBpbnQgZihpbnQpOyBcbgorfVxuCisgIGludCBzJHtzfSh2b2lkKSB7IHJldHVybiBmKCR7c30pOyB9XG4iCisgICkKKworICBsaXN0KEFQUEVORCBzcmNzICIke3NyY19jfSIpCisgIGxpc3QoQVBQRU5EIHNyY3MgIiR7c3JjX2N4eH0iKQorZW5kZm9yZWFjaCgpCisKKworCithZGRfbGlicmFyeSh0Z3QgU0hBUkVEICR7c3Jjc30pCisKK3NldF90YXJnZXRfcHJvcGVydGllcyh0Z3QgUFJPUEVSVElFUyBVTklUWV9CVUlMRCBPTgorICAgICAgICAgICAgICAgICAgICAgICAgICBVTklUWV9CVUlMRF9NT0RFIEdST1VQCisgICAgICAgICAgICAgICAgICAgICAgICAgICNVTklUWV9CVUlMRF9CQVRDSF9TSVpFIHdpbGwgYmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgICBVTklUWV9CVUlMRF9CQVRDSF9TSVpFIDIpCisKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzMS5jIHMyLmMgczMuYyBzNC5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEuY3h4IHMyLmN4eCBzMy5jeHggczQuY3h4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAiYSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoczUuYyBzNi5jIHM3LmMgczguYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM1LmN4eCBzNi5jeHggczcuY3h4IHM4LmN4eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgVU5JVFlfR1JPVVAgImIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYmF0Y2gtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19iYXRjaC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQyODZkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYmF0Y2gtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitzZXQodW5pdHlidWlsZF9jICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5XzBfYy5jIikKK2lmKE5PVCBFWElTVFMgIiR7dW5pdHlidWlsZF9jfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlcyAke3VuaXR5YnVpbGRfY30gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2JhdGNoLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfYmF0Y2guY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4NzNiNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2JhdGNoLmNtYWtlCkBAIC0wLDAgKzEsMTUgQEAKK3Byb2plY3QodW5pdHlidWlsZF9jIEMpCisKK3NldChzcmNzICIiKQorZm9yZWFjaChzIFJBTkdFIDEgOCkKKyAgc2V0KHNyYyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Mke3N9LmMiKQorICBmaWxlKFdSSVRFICIke3NyY30iICJpbnQgcyR7c30odm9pZCkgeyByZXR1cm4gMDsgfVxuIikKKyAgbGlzdChBUFBFTkQgc3JjcyAiJHtzcmN9IikKK2VuZGZvcmVhY2goKQorCithZGRfbGlicmFyeSh0Z3QgU0hBUkVEICR7c3Jjc30pCisKK3NldF90YXJnZXRfcHJvcGVydGllcyh0Z3QgUFJPUEVSVElFUworICAgICAgICAgICAgICAgICAgICAgICAgICBVTklUWV9CVUlMRCBPTgorICAgICAgICAgICAgICAgICAgICAgICAgICBVTklUWV9CVUlMRF9NT0RFIEJBVENICisgICAgICAgICAgICAgICAgICAgICAgICAgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2dyb3VwLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfZ3JvdXAtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5ZWExNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2dyb3VwLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK3NldCh1bml0eWJ1aWxkX2FfYyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9hX2MuYyIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYV9jfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlcyAke3VuaXR5YnVpbGRfYV9jfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitzZXQodW5pdHlidWlsZF9iX2MgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfYl9jLmMiKQoraWYoTk9UIEVYSVNUUyAiJHt1bml0eWJ1aWxkX2JfY30iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZXMgJHt1bml0eWJ1aWxkX2JfY30gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2dyb3VwLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2NfZ3JvdXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhMTdmMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX2dyb3VwLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKK3Byb2plY3QodW5pdHlidWlsZF9jIEMpCisKK3NldChzcmNzICIiKQorZm9yZWFjaChzIFJBTkdFIDEgOCkKKyAgc2V0KHNyYyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Mke3N9LmMiKQorICBmaWxlKFdSSVRFICIke3NyY30iICJpbnQgcyR7c30odm9pZCkgeyByZXR1cm4gMDsgfVxuIikKKyAgbGlzdChBUFBFTkQgc3JjcyAiJHtzcmN9IikKK2VuZGZvcmVhY2goKQorCithZGRfbGlicmFyeSh0Z3QgU0hBUkVEICR7c3Jjc30pCisKK3NldF90YXJnZXRfcHJvcGVydGllcyh0Z3QgUFJPUEVSVElFUyBVTklUWV9CVUlMRCBPTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVRZX0JVSUxEX01PREUgR1JPVVApCisKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzMS5jIFBST1BFUlRJRVMgVU5JVFlfR1JPVVAgImEiKQorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHMyLmMgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAiYSIpCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoczMuYyBzNC5jIFBST1BFUlRJRVMgVU5JVFlfR1JPVVAgImIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2Nfbm9fdW5pdHlfYnVpbGRfZ3JvdXAtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19ub191bml0eV9idWlsZF9ncm91cC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQ0NjI3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2Nfbm9fdW5pdHlfYnVpbGRfZ3JvdXAtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACitzZXQodW5pdHlidWlsZF9jICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X2FfYy5jIikKK2lmKEVYSVNUUyAiJHt1bml0eWJ1aWxkX2N9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9jfSBzaG91bGQgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19ub191bml0eV9idWlsZF9ncm91cC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jX25vX3VuaXR5X2J1aWxkX2dyb3VwLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMjZkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY19ub191bml0eV9idWlsZF9ncm91cC5jbWFrZQpAQCAtMCwwICsxLDE2IEBACitwcm9qZWN0KHVuaXR5YnVpbGRfY19ub191bml0eV9idWlsZCBDKQorCitzZXQoc3JjcyAiIikKK2ZvcmVhY2gocyBSQU5HRSAxIDgpCisgIHNldChzcmMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zJHtzfS5jIikKKyAgZmlsZShXUklURSAiJHtzcmN9IiAiaW50IHMke3N9KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiIpCisgIGxpc3QoQVBQRU5EIHNyY3MgIiR7c3JjfSIpCitlbmRmb3JlYWNoKCkKKworYWRkX2xpYnJhcnkodGd0IFNIQVJFRCAke3NyY3N9KQorCisjVGhlc2Ugc2hvdWxkIGJlIGlnbm9yZWQgYXMgVU5JVFlfQlVJTEQgaXMgb2ZmCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXModGd0IFBST1BFUlRJRVMgVU5JVFlfQlVJTERfTU9ERSBHUk9VUCkKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzMS5jIHMyLmMgczMuYyBzNC5jIHM1LmMgczYuYyBzNy5jIHM4LmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJhIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jeHhfZ3JvdXAtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY3h4X2dyb3VwLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZWYzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY3h4X2dyb3VwLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjcgQEAKK3NldCh1bml0eWJ1aWxkX2FfY3h4ICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X2FfY3h4LmN4eCIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYV9jeHh9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9hX2N4eH0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2Vsc2UoKQorICAjdmVyaWZ5IHRoYXQgb2RyMiBpcyBub3QgcGFydCBvZiB0aGlzIHNvdXJjZSBzZXQKKyAgZmlsZShTVFJJTkdTICR7dW5pdHlidWlsZF9hX2N4eH0gdW5pdHlidWlsZF9hX2N4eF9zdHJpbmdzKQorICBzdHJpbmcoUkVHRVggTUFUQ0ggIi4qI2luY2x1ZGUuKm9kcjIuY3h4IiBtYXRjaGVkX2NvZGUgJHt1bml0eWJ1aWxkX2FfY3h4X3N0cmluZ3N9KQorICBpZihtYXRjaGVkX2NvZGUpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgZmlsZSBpbmNsdWRlcyB1bi1leHBlY3RlZCBvcmQyLmN4eCBzb3VyY2UgZmlsZSIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCitzZXQodW5pdHlidWlsZF9iX2N4eCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9iX2N4eC5jeHgiKQoraWYoTk9UIEVYSVNUUyAiJHt1bml0eWJ1aWxkX2JfY3h4fSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlcyAke3VuaXR5YnVpbGRfYl9jeHh9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbHNlKCkKKyAgI3ZlcmlmeSB0aGF0IG9kcjEgaXMgbm90IHBhcnQgb2YgdGhpcyBzb3VyY2Ugc2V0CisgIGZpbGUoU1RSSU5HUyAke3VuaXR5YnVpbGRfYl9jeHh9IHVuaXR5YnVpbGRfYl9jeHhfc3RyaW5ncykKKyAgc3RyaW5nKFJFR0VYIE1BVENIICIuKiNpbmNsdWRlLipvZHIxLmN4eCIgbWF0Y2hlZF9jb2RlICR7dW5pdHlidWlsZF9iX2N4eF9zdHJpbmdzfSkKKyAgaWYobWF0Y2hlZF9jb2RlKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IGZpbGUgaW5jbHVkZXMgdW4tZXhwZWN0ZWQgb3JkMS5jeHggc291cmNlIGZpbGUiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9jeHhfZ3JvdXAuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY3h4X2dyb3VwLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MDQyODkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfY3h4X2dyb3VwLmNtYWtlCkBAIC0wLDAgKzEsMjcgQEAKK3Byb2plY3QodW5pdHlidWlsZF9jeHggQ1hYKQorCitzZXQoc3JjcyAiIikKK2ZvcmVhY2gocyBSQU5HRSAxIDQpCisgIHNldChzcmMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zJHtzfS5jeHgiKQorICBmaWxlKFdSSVRFICIke3NyY30iICJpbnQgcyR7c30odm9pZCkgeyByZXR1cm4gMDsgfVxuIikKKyAgbGlzdChBUFBFTkQgc3JjcyAiJHtzcmN9IikKK2VuZGZvcmVhY2goKQorCitmb3JlYWNoKHMgUkFOR0UgMSAyKQorICBzZXQoc3JjICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vb2RyJHtzfS5jeHgiKQorICBmaWxlKFdSSVRFICIke3NyY30iICJuYW1lc3BhY2Ugb2RyIHsgaW50IHMke3N9KHZvaWQpIHsgcmV0dXJuIDA7IH0gfVxuIikKKyAgbGlzdChBUFBFTkQgc3JjcyAiJHtzcmN9IikKK2VuZGZvcmVhY2goKQorCithZGRfbGlicmFyeSh0Z3QgU0hBUkVEICR7c3Jjc30pCisKK3NldF90YXJnZXRfcHJvcGVydGllcyh0Z3QgUFJPUEVSVElFUyBVTklUWV9CVUlMRCBPTgorICAgICAgICAgICAgICAgICAgICAgICAgICBVTklUWV9CVUlMRF9NT0RFIEdST1VQCisgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHMxLmN4eCBzMi5jeHggb2RyMS5jeHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJhIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzMy5jeHggczQuY3h4IG9kcjIuY3h4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAiYiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2ludmFsaWRfbW9kZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9pbnZhbGlkX21vZGUtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2ludmFsaWRfbW9kZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2ludmFsaWRfbW9kZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYjE3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfaW52YWxpZF9tb2RlLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACiteQ01ha2UgRXJyb3IgaW4gQ01ha2VMaXN0cy50eHQ6CisgIEludmFsaWQgVU5JVFlfQlVJTERfTU9ERSB2YWx1ZSBvZiBJTlZBTElEIGFzc2lnbmVkIHRvIHRhcmdldCB0Z3RcLgorICBBY2NlcHRhYmxlIHZhbHVlcyBhcmUgQkFUQ0ggYW5kIEdST1VQXC4KKy4qCitDTWFrZSBHZW5lcmF0ZSBzdGVwIGZhaWxlZFwuICBCdWlsZCBmaWxlcyBjYW5ub3QgYmUgcmVnZW5lcmF0ZWQgY29ycmVjdGx5XC4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfaW52YWxpZF9tb2RlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2ludmFsaWRfbW9kZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjEyMjAwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX2ludmFsaWRfbW9kZS5jbWFrZQpAQCAtMCwwICsxLDEyIEBACitwcm9qZWN0KHVuaXR5YnVpbGRfYyBDKQorCitzZXQoc3JjcyAiIikKK2ZvcmVhY2gocyBSQU5HRSAxIDgpCisgIHNldChzcmMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9zJHtzfS5jIikKKyAgZmlsZShXUklURSAiJHtzcmN9IiAiaW50IHMke3N9KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiIpCisgIGxpc3QoQVBQRU5EIHNyY3MgIiR7c3JjfSIpCitlbmRmb3JlYWNoKCkKKworYWRkX2xpYnJhcnkodGd0IFNIQVJFRCAke3NyY3N9KQorCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXModGd0IFBST1BFUlRJRVMgVU5JVFlfQlVJTEQgT04gVU5JVFlfQlVJTERfTU9ERSBJTlZBTElEKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX29yZGVyLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVW5pdHlCdWlsZC91bml0eWJ1aWxkX29yZGVyLWNoZWNrLmNtYWtlCmluZGV4IGYyNmVjMmUuLjg1ZTY1ODcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1VuaXR5QnVpbGQvdW5pdHlidWlsZF9vcmRlci1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9Vbml0eUJ1aWxkL3VuaXR5YnVpbGRfb3JkZXItY2hlY2suY21ha2UKQEAgLTIsNiArMiw2IEBACiBmaWxlKFNUUklOR1MgJHt1bml0eWJ1aWxkX2N9IHVuaXR5YnVpbGRfY19zdHJpbmdzKQogc3RyaW5nKFJFR0VYIE1BVENIICIuKiNpbmNsdWRlLipzMy5jLiojaW5jbHVkZS4qczEuYy4qI2luY2x1ZGUuKnMyLmMuKiIgbWF0Y2hlZF9jb2RlICR7dW5pdHlidWlsZF9jX3N0cmluZ3N9KQogaWYoTk9UIG1hdGNoZWRfY29kZSkKLSAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgZmlsZSBkb2Vzbid0IGluY2x1ZGUgZXhwZWN0ZWQgb2RlciBvZiBzb3VyY2UgZmlsZXMiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBmaWxlIGRvZXNuJ3QgaW5jbHVkZSBleHBlY3RlZCBvcmRlciBvZiBzb3VyY2UgZmlsZXMiKQogICByZXR1cm4oKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvQ1NoYXJwU291cmNlR3JvdXAvZm9vLmNzIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvQ1NoYXJwU291cmNlR3JvdXAvZm9vLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OTVkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9DU2hhcnBTb3VyY2VHcm91cC9mb28uY3MKQEAgLTAsMCArMSwzIEBACit2b2lkIGZvbygpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9DU2hhcnBTb3VyY2VHcm91cC9pbWFnZXMvZW1wdHkuYm1wIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvQ1NoYXJwU291cmNlR3JvdXAvaW1hZ2VzL2VtcHR5LmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvQ1NoYXJwU291cmNlR3JvdXAvaW1hZ2VzL2VtcHR5LmJtcApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkL2Jhei5jcyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L0NTaGFycFNvdXJjZUdyb3VwL25lc3RlZC9iYXouY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkMzM0YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L0NTaGFycFNvdXJjZUdyb3VwL25lc3RlZC9iYXouY3MKQEAgLTAsMCArMSwzIEBACit2b2lkIGJheigpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNDRjY2Q2Yi4uOTNlZjYwMyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMSwxMiArMSwxNCBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMDU3IE5FVykKKwogaW5jbHVkZShSdW5DTWFrZSkKIGNtYWtlX3BvbGljeShTRVQgQ01QMDA1NCBORVcpCiAKK3J1bl9jbWFrZShWc0NzaGFycFNvdXJjZUdyb3VwKQogcnVuX2NtYWtlKFZzQ1NoYXJwQ29tcGlsZXJPcHRzKQogcnVuX2NtYWtlKEV4cGxpY2l0Q01ha2VMaXN0cykKIHJ1bl9jbWFrZShSdW50aW1lTGlicmFyeSkKIHJ1bl9jbWFrZShTb3VyY2VHcm91cENNYWtlTGlzdHMpCiBydW5fY21ha2UoU291cmNlR3JvdXBUcmVlQ01ha2VMaXN0cykKLQogcnVuX2NtYWtlKFZzQ29uZmlndXJhdGlvblR5cGUpCiBydW5fY21ha2UoVnNUYXJnZXRzRmlsZVJlZmVyZW5jZXMpCiBydW5fY21ha2UoVnNDdXN0b21Qcm9wcykKQEAgLTE1LDYgKzE3LDcgQEAKIHJ1bl9jbWFrZShWc0RlYnVnZ2VyQ29tbWFuZEFyZ3VtZW50cykKIHJ1bl9jbWFrZShWc0RlYnVnZ2VyRW52aXJvbm1lbnQpCiBydW5fY21ha2UoVnNDU2hhcnBDdXN0b21UYWdzKQorcnVuX2NtYWtlKFZzQ1NoYXJwRG9jdW1lbnRhdGlvbkZpbGUpCiBydW5fY21ha2UoVnNDU2hhcnBSZWZlcmVuY2VQcm9wcykKIHJ1bl9jbWFrZShWc0NTaGFycFdpdGhvdXRTb3VyY2VzKQogcnVuX2NtYWtlKFZzQ1NoYXJwRGVwbG95RmlsZXMpCkBAIC0yNyw2ICszMCwxNiBAQAogcnVuX2NtYWtlKFZzRHBpQXdhcmVCYWRQYXJhbSkKIHJ1bl9jbWFrZShWc1ByZWNvbXBpbGVIZWFkZXJzKQogcnVuX2NtYWtlKFZzUHJlY29tcGlsZUhlYWRlcnNSZXVzZUZyb21Db21waWxlUERCTmFtZSkKK3J1bl9jbWFrZShWc0RlcGxveUVuYWJsZWQpCitydW5fY21ha2UoVnNTZXR0aW5ncykKK3J1bl9jbWFrZShWc1NvdXJjZVNldHRpbmdzVG9vbCkKK3J1bl9jbWFrZShWc1BsYXRmb3JtVG9vbHNldCkKKworcnVuX2NtYWtlKFZzV2luUlRCeURlZmF1bHQpCisKK3NldChSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVCAiVkNUYXJnZXRzUGF0aD0kKFZDVGFyZ2V0c1BhdGgpIikKK3J1bl9jbWFrZShWc1ZDVGFyZ2V0c1BhdGgpCit1bnNldChSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVCkKIAogaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiTVNWQyIgQU5EIENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVJfRVFVQUwgMTkuMDUpCiAgIHJ1bl9jbWFrZShWc0p1c3RNeUNvZGUpCkBAIC00Myw0ICs1Niw4IEBACiAgIHJ1bl9jbWFrZShVbml0eUJ1aWxkUHJlMjAxNykKIGVsc2UoKQogICBydW5fY21ha2UoVW5pdHlCdWlsZE5hdGl2ZSkKKyAgcnVuX2NtYWtlKFVuaXR5QnVpbGROYXRpdmVHcm91cGVkKQogZW5kaWYoKQorCitydW5fY21ha2UoVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmspCitydW5fY21ha2UoVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmtWZXJzaW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVW5pdHlCdWlsZE5hdGl2ZUdyb3VwZWQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkTmF0aXZlR3JvdXBlZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjM4MGRhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVW5pdHlCdWlsZE5hdGl2ZUdyb3VwZWQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1NiBAQAorc2V0KHVuaXR5YnVpbGRfYzAgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfcG9vbEFfYy5jIikKK2lmKE5PVCBFWElTVFMgIiR7dW5pdHlidWlsZF9jMH0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCB1bml0eSBzb3VyY2UgZmlsZXMgJHt1bml0eWJ1aWxkX2MwfSBkb2VzIG5vdCBleGlzdC4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitzZXQodW5pdHlidWlsZF9jMSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9wb29sQl9jLmMiKQoraWYoTk9UIEVYSVNUUyAiJHt1bml0eWJ1aWxkX2MxfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlcyAke3VuaXR5YnVpbGRfYzF9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKK3NldCh0Z3RfcHJvamVjdCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3RndC52Y3hwcm9qIikKK2lmIChOT1QgRVhJU1RTICIke3RndF9wcm9qZWN0fSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHByb2plY3QgZmlsZSAke3RndF9wcm9qZWN0fSBkb2Vzbid0IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKK2ZpbGUoU1RSSU5HUyAke3RndF9wcm9qZWN0fSB0Z3RfcHJvamVjdHNfc3RyaW5ncykKKworZm9yZWFjaChsaW5lIElOIExJU1RTIHRndF9wcm9qZWN0c19zdHJpbmdzKQorICBpZiAobGluZSBNQVRDSEVTICI8RW5hYmxlVW5pdHlTdXBwb3J0PnRydWU8L0VuYWJsZVVuaXR5U3VwcG9ydD4iKQorICAgIHNldChoYXZlX3VuaXR5X3N1cHBvcnQgT04pCisgIGVuZGlmKCkKKworICBpZiAobGluZSBNQVRDSEVTICI8Q2xDb21waWxlIEluY2x1ZGU9LipJbmNsdWRlSW5Vbml0eUZpbGU9XCJmYWxzZVwiIEN1c3RvbVVuaXR5RmlsZT1cInRydWVcIiIpCisgICAgbGlzdChBUFBFTkQgdW5pdHlfc291cmNlX2xpbmVzICR7bGluZX0pCisgIGVuZGlmKCkKKworICBpZiAobGluZSBNQVRDSEVTICI8Q2xDb21waWxlIEluY2x1ZGU9LipJbmNsdWRlSW5Vbml0eUZpbGU9XCJ0cnVlXCIgQ3VzdG9tVW5pdHlGaWxlPVwidHJ1ZVwiIikKKyAgICBsaXN0KEFQUEVORCBzb3VyY2VzX2xpc3QgJHtsaW5lfSkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK2lmIChOT1QgaGF2ZV91bml0eV9zdXBwb3J0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBwcm9qZWN0IHNob3VsZCBpbmNsdWRlIHRoZSA8RW5hYmxlVW5pdHlTdXBwb3J0PiBibG9jay4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitzdHJpbmcoUkVQTEFDRSAiXFwiICIvIiB1bml0eV9zb3VyY2VfbGluZXMgIiR7dW5pdHlfc291cmNlX2xpbmVzfSIpCitzdHJpbmcoRklORCAiJHt1bml0eV9zb3VyY2VfbGluZXN9IiAiQ01ha2VGaWxlcy90Z3QuZGlyL1VuaXR5L3VuaXR5X3Bvb2xBX2MuYyIgdW5pdHlfc291cmNlX2ZpbGVfcG9zaXRpb24pCitpZiAodW5pdHlfc291cmNlX2ZpbGVfcG9zaXRpb24gRVFVQUwgIi0xIikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgcHJvamVjdCBzaG91bGQgaW5jbHVkZSB0aGUgZ2VuZXJhdGVkIHVuaXR5IHNvdXJjZSBmaWxlICdwb29sQScuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKK3N0cmluZyhGSU5EICIke3VuaXR5X3NvdXJjZV9saW5lc30iICJDTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfcG9vbEJfYy5jIiB1bml0eV9zb3VyY2VfZmlsZV9wb3NpdGlvbikKK2lmICh1bml0eV9zb3VyY2VfZmlsZV9wb3NpdGlvbiBFUVVBTCAiLTEiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBwcm9qZWN0IHNob3VsZCBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGUgJ3Bvb2xCJy4iKQorICByZXR1cm4oKQorZW5kaWYoKQorCitsaXN0KExFTkdUSCBzb3VyY2VzX2xpc3QgbnVtYmVyX29mX3NvdXJjZXMpCitpZihOT1QgbnVtYmVyX29mX3NvdXJjZXMgRVFVQUwgNykKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgcHJvamVjdCBkb2Vzbid0IGluY2x1ZGUgdGhlIGV4cGVjdCBudW1iZXIgb2YgZmlsZXMuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1VuaXR5QnVpbGROYXRpdmVHcm91cGVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVW5pdHlCdWlsZE5hdGl2ZUdyb3VwZWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0MGUzYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1VuaXR5QnVpbGROYXRpdmVHcm91cGVkLmNtYWtlCkBAIC0wLDAgKzEsMjAgQEAKK3Byb2plY3QodW5pdHlidWlsZF9jIEMpCisKK3NldChzcmNzICIiKQorZm9yZWFjaChzIFJBTkdFIDEgOCkKKyAgc2V0KHNyYyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3Mke3N9LmMiKQorICBmaWxlKFdSSVRFICIke3NyY30iICJpbnQgcyR7c30odm9pZCkgeyByZXR1cm4gMDsgfVxuIikKKyAgbGlzdChBUFBFTkQgc3JjcyAiJHtzcmN9IikKK2VuZGZvcmVhY2goKQorCithZGRfbGlicmFyeSh0Z3QgU0hBUkVEICR7c3Jjc30pCisKK3NldF90YXJnZXRfcHJvcGVydGllcyh0Z3QgUFJPUEVSVElFUyBVTklUWV9CVUlMRCBPTiBVTklUWV9CVUlMRF9NT0RFIEdST1VQKQorCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoczEuYyBzMi5jIHMzLmMgczQuYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BFUlRJRVMgVU5JVFlfR1JPVVAgInBvb2xBIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKHM1LmMgczYuYyBzNy5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAicG9vbEIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVW5pdHlCdWlsZFByZTIwMTdHcm91cGVkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVW5pdHlCdWlsZFByZTIwMTdHcm91cGVkLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YjhjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkUHJlMjAxN0dyb3VwZWQtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1OSBAQAorc2V0KHVuaXR5YnVpbGRfYzAgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfcG9vbEEuYyIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYzB9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9jMH0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworc2V0KHVuaXR5YnVpbGRfYzEgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzL3RndC5kaXIvVW5pdHkvdW5pdHlfcG9vbEIuYyIpCitpZihOT1QgRVhJU1RTICIke3VuaXR5YnVpbGRfYzF9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGVzICR7dW5pdHlidWlsZF9jMX0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworc2V0KHRndF9wcm9qZWN0ICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGd0LnZjeHByb2oiKQoraWYgKE5PVCBFWElTVFMgIiR7dGd0X3Byb2plY3R9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgcHJvamVjdCBmaWxlICR7dGd0X3Byb2plY3R9IGRvZXNuJ3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworZmlsZShTVFJJTkdTICR7dGd0X3Byb2plY3R9IHRndF9wcm9qZWN0c19zdHJpbmdzKQorCitmb3JlYWNoKGxpbmUgSU4gTElTVFMgdGd0X3Byb2plY3RzX3N0cmluZ3MpCisgIGlmIChsaW5lIE1BVENIRVMgIjxDbENvbXBpbGUgSW5jbHVkZT0uKi8+IikKKyAgICBzZXQodW5pdHlfc291cmNlX2xpbmUgJHtsaW5lfSkKKyAgZW5kaWYoKQorCisgIGlmIChsaW5lIE1BVENIRVMgIjxDbENvbXBpbGUgSW5jbHVkZT1cIlteXCJdKlwiPiIpCisgICAgc3RyaW5nKFJFR0VYIE1BVENIICI8Q2xDb21waWxlIEluY2x1ZGU9XCIoW15cIl0qKVwiPiIgc291cmNlX2ZpbGUgJHtsaW5lfSkKKyAgICBsaXN0KEFQUEVORCBzb3VyY2VzX2xpc3QgJHtzb3VyY2VfZmlsZX0pCisgIGVuZGlmKCkKKworICBpZiAobGluZSBNQVRDSEVTICI8RXhjbHVkZWRGcm9tQnVpbGQuKjwvRXhjbHVkZWRGcm9tQnVpbGQ+IikKKyAgICBsaXN0KEFQUEVORCBleGNsdWRlZF9zb3VyY2VzX2xpc3QgJHtzb3VyY2VfZmlsZX0pCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCitzdHJpbmcoUkVQTEFDRSAiXFwiICIvIiB1bml0eV9zb3VyY2VfbGluZSAke3VuaXR5X3NvdXJjZV9saW5lfSkKK3N0cmluZyhGSU5EICIke3VuaXR5X3NvdXJjZV9saW5lfSIgIkNNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9wb29sQS5jIiB1bml0eV9zb3VyY2VfZmlsZV9wb3NpdGlvbikKK2lmICh1bml0eV9zb3VyY2VfZmlsZV9wb3NpdGlvbiBFUVVBTCAiLTEiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBwcm9qZWN0IHNob3VsZCBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGUuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKK3N0cmluZyhGSU5EICIke3VuaXR5X3NvdXJjZV9saW5lfSIgIkNNYWtlRmlsZXMvdGd0LmRpci9Vbml0eS91bml0eV9wb29sQi5jIiB1bml0eV9zb3VyY2VfZmlsZV9wb3NpdGlvbikKK2lmICh1bml0eV9zb3VyY2VfZmlsZV9wb3NpdGlvbiBFUVVBTCAiLTEiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkdlbmVyYXRlZCBwcm9qZWN0IHNob3VsZCBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgdW5pdHkgc291cmNlIGZpbGUuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworbGlzdChMRU5HVEggc291cmNlc19saXN0IG51bWJlcl9vZl9zb3VyY2VzKQoraWYoTk9UIG51bWJlcl9vZl9zb3VyY2VzIEVRVUFMIDcpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHByb2plY3QgZG9lc24ndCBpbmNsdWRlIHRoZSBleHBlY3QgbnVtYmVyIG9mIGZpbGVzLiIpCisgIHJldHVybigpCitlbmRpZigpCisKKyMgRXhjbHVzaW9ucyBmb3IgRGVidWd8UmVsZWFzZXxNaW5TaXplUmVsfFJlbFdpdGhEZWJJbmZvCitsaXN0KExFTkdUSCBleGNsdWRlZF9zb3VyY2VzX2xpc3QgbnVtYmVyX29mX2V4Y2x1ZGVkX3NvdXJjZXMpCitpZihOT1QgbnVtYmVyX29mX2V4Y2x1ZGVkX3NvdXJjZXMgRVFVQUwgMjgpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiR2VuZXJhdGVkIHByb2plY3QgZG9lc24ndCBleGNsdWRlIHRoZSBzb3VyY2UgZmlsZXMgZm9yIGFsbCBjb25maWd1cmF0aW9ucy4iKQorICByZXR1cm4oKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVW5pdHlCdWlsZFByZTIwMTdHcm91cGVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVW5pdHlCdWlsZFByZTIwMTdHcm91cGVkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NDBlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Vbml0eUJ1aWxkUHJlMjAxN0dyb3VwZWQuY21ha2UKQEAgLTAsMCArMSwyMCBAQAorcHJvamVjdCh1bml0eWJ1aWxkX2MgQykKKworc2V0KHNyY3MgIiIpCitmb3JlYWNoKHMgUkFOR0UgMSA4KQorICBzZXQoc3JjICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcyR7c30uYyIpCisgIGZpbGUoV1JJVEUgIiR7c3JjfSIgImludCBzJHtzfSh2b2lkKSB7IHJldHVybiAwOyB9XG4iKQorICBsaXN0KEFQUEVORCBzcmNzICIke3NyY30iKQorZW5kZm9yZWFjaCgpCisKK2FkZF9saWJyYXJ5KHRndCBTSEFSRUQgJHtzcmNzfSkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHRndCBQUk9QRVJUSUVTIFVOSVRZX0JVSUxEIE9OIFVOSVRZX0JVSUxEX01PREUgR1JPVVApCisKK3NldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhzMS5jIHMyLmMgczMuYyBzNC5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBVTklUWV9HUk9VUCAicG9vbEEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoczUuYyBzNi5jIHM3LmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QRVJUSUVTIFVOSVRZX0dST1VQICJwb29sQiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9WU0RvdG5ldFRhcmdldEZyYW1ld29ya1ZlcnNpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9WU0RvdG5ldFRhcmdldEZyYW1ld29ya1ZlcnNpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwZTBiNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZTRG90bmV0VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbi5jbWFrZQpAQCAtMCwwICsxLDEwIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1NoYXJwKQoraWYoTk9UIENNQUtFX0NTaGFycF9DT01QSUxFUikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworc2V0KENNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLX1ZFUlNJT04gInY0LjYuMSIpCithZGRfbGlicmFyeShmb28gU0hBUkVEIGZvby5jcykKKworc2V0KENNQUtFX0RPVE5FVF9UQVJHRVRfRlJBTUVXT1JLICJuZXRjb3JlYXBwMy4xIikKK2FkZF9saWJyYXJ5KGJhciBTSEFSRUQgZm9vLmNzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDU2hhcnBEZWZpbmVzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDU2hhcnBEZWZpbmVzLWNoZWNrLmNtYWtlCmluZGV4IDE1MmJmOWMuLjYzMWFiYWMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ1NoYXJwRGVmaW5lcy1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NTaGFycERlZmluZXMtY2hlY2suY21ha2UKQEAgLTI3LDE1ICsyNywxNSBAQAogICBlbHNlaWYoaW5EZWJ1ZyBBTkQKICAgICAgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKk1ZX0ZPT19ERUZJTkUuKjwvRGVmaW5lQ29uc3RhbnRzPiAqJCIpIEFORAogICAgICAobGluZSBNQVRDSEVTICJeICo8RGVmaW5lQ29uc3RhbnRzPi4qREVGSU5FX09OTFlfRk9SX0RFQlVHLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSBBTkQKLSAgICAgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKk1ZX0JBUl9BU1NJR05NRU5UPWJhci4qPC9EZWZpbmVDb25zdGFudHM+ICokIikgQU5ECi0gICAgIChOT1QgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKkRFRklORV9PTkxZX0ZPUl9SRUxFQVNFLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSkKKyAgICAgKE5PVCAobGluZSBNQVRDSEVTICJeICo8RGVmaW5lQ29uc3RhbnRzPi4qREVGSU5FX09OTFlfRk9SX1JFTEVBU0UuKjwvRGVmaW5lQ29uc3RhbnRzPiAqJCIpKSBBTkQKKyAgICAgKE5PVCAobGluZSBNQVRDSEVTICJeICo8RGVmaW5lQ29uc3RhbnRzPi4qTVlfQkFSX0FTU0lHTk1FTlQ9YmFyLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSkKICAgICApCiAgICAgc2V0KGRlYnVnT0sgVFJVRSkKICAgZWxzZWlmKGluUmVsZWFzZSBBTkQKICAgICAgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKk1ZX0ZPT19ERUZJTkUuKjwvRGVmaW5lQ29uc3RhbnRzPiAqJCIpIEFORAogICAgICAobGluZSBNQVRDSEVTICJeICo8RGVmaW5lQ29uc3RhbnRzPi4qREVGSU5FX09OTFlfRk9SX1JFTEVBU0UuKjwvRGVmaW5lQ29uc3RhbnRzPiAqJCIpIEFORAotICAgICAobGluZSBNQVRDSEVTICJeICo8RGVmaW5lQ29uc3RhbnRzPi4qTVlfQkFSX0FTU0lHTk1FTlQ9YmFyLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSBBTkQKLSAgICAgKE5PVCAobGluZSBNQVRDSEVTICJeICo8RGVmaW5lQ29uc3RhbnRzPi4qREVGSU5FX09OTFlfRk9SX0RFQlVHLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSkKKyAgICAgKE5PVCAobGluZSBNQVRDSEVTICJeICo8RGVmaW5lQ29uc3RhbnRzPi4qREVGSU5FX09OTFlfRk9SX0RFQlVHLio8L0RlZmluZUNvbnN0YW50cz4gKiQiKSkgQU5ECisgICAgIChOT1QgKGxpbmUgTUFUQ0hFUyAiXiAqPERlZmluZUNvbnN0YW50cz4uKk1ZX0JBUl9BU1NJR05NRU5UPWJhci4qPC9EZWZpbmVDb25zdGFudHM+ICokIikpCiAgICAgKQogICAgIHNldChyZWxlYXNlT0sgVFJVRSkKICAgZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDU2hhcnBEb2N1bWVudGF0aW9uRmlsZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ1NoYXJwRG9jdW1lbnRhdGlvbkZpbGUtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5MzM2MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ1NoYXJwRG9jdW1lbnRhdGlvbkZpbGUtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyNiBAQAorIworIyBDaGVjayBDIyBWUyBwcm9qZWN0IGZvciByZXF1aXJlZCBlbGVtZW50cworIworc2V0KGNzUHJvamVjdEZpbGUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9mb28uY3Nwcm9qIikKK2lmKE5PVCBFWElTVFMgIiR7Y3NQcm9qZWN0RmlsZX0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlByb2plY3QgZmlsZSAke2NzUHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKK2ZpbGUoU1RSSU5HUyAiJHtjc1Byb2plY3RGaWxlfSIgbGluZXMpCisKK3NldChIQVZFX0RvY3VtZW50YXRpb25GaWxlIDApCitmb3JlYWNoKGxpbmUgSU4gTElTVFMgbGluZXMpCisgIGlmKGxpbmUgTUFUQ0hFUyAiXiAqPERvY3VtZW50YXRpb25GaWxlPihbXjw+XSspPC9Eb2N1bWVudGF0aW9uRmlsZT4iKQorICAgIGlmKEhBVkVfRG9jdW1lbnRhdGlvbkZpbGUpCisgICAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkRvY3VtZW50YXRpb24gbm9kZSBoYXMgYmVlbiBnZW5lcmF0ZWQgbW9yZSB0aGFuIG9uY2UgZm9yXG4gICR7Y3NQcm9qZWN0RmlsZX0iKQorICAgICAgcmV0dXJuKCkKKyAgICBlbmRpZigpCisgICAgc2V0KEhBVkVfRG9jdW1lbnRhdGlvbkZpbGUgMSkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCisKK2lmKE5PVCBIQVZFX0RvY3VtZW50YXRpb25GaWxlKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkRvY3VtZW50YXRpb24gbm9kZSBoYXMgbm90IGJlZW4gZ2VuZXJhdGVkIGZvclxuICAke2NzUHJvamVjdEZpbGV9IikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ1NoYXJwRG9jdW1lbnRhdGlvbkZpbGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NTaGFycERvY3VtZW50YXRpb25GaWxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYjZiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NTaGFycERvY3VtZW50YXRpb25GaWxlLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorc2V0KENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMgRGVidWcpCitlbmFibGVfbGFuZ3VhZ2UoQ1NoYXJwKQorCithZGRfbGlicmFyeShmb28gU0hBUkVECisgIGZvby5jcykKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGZvbyBQUk9QRVJUSUVTCisgIFZTX0RPVE5FVF9ET0NVTUVOVEFUSU9OX0ZJTEUgZm9vLnhtbCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ3NoYXJwU291cmNlR3JvdXAtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NzaGFycFNvdXJjZUdyb3VwLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWM3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NzaGFycFNvdXJjZUdyb3VwLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjIgQEAKK3NldChjc1Byb2pGaWxlICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vVnNDc2hhcnBTb3VyY2VHcm91cC5jc3Byb2oiKQoraWYoTk9UIEVYSVNUUyAiJHtjc1Byb2pGaWxlfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7Y3NQcm9qRmlsZX0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworZmlsZShTVFJJTkdTICIke2NzUHJvakZpbGV9IiBsaW5lcykKKworaW5jbHVkZSgke1J1bkNNYWtlX1RFU1RfU09VUkNFX0RJUn0vVnNDc2hhcnBTb3VyY2VHcm91cEhlbHBlcnMuY21ha2UpCisKK3NldChTT1VSQ0VfR1JPVVBTX1RPX0ZJTkQKKyAgIkNTaGFycFNvdXJjZUdyb3VwIgorICAiQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkIgorICAiSW1hZ2VzIgorKQorCitmb3JlYWNoKEdST1VQX05BTUUgSU4gTElTVFMgJHtTT1VSQ0VfR1JPVVBTX1RPX0ZJTkR9KQorICBmaW5kX3NvdXJjZV9ncm91cCgiJHtsaW5lc30iICR7R1JPVVBfTkFNRX0pCisgIGlmKE5PVCAke1NPVVJDRV9HUk9VUF9GT1VORH0pCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0NzaGFycFNvdXJjZUdyb3VwLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDc2hhcnBTb3VyY2VHcm91cC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQ5OTNjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDc2hhcnBTb3VyY2VHcm91cC5jbWFrZQpAQCAtMCwwICsxLDE2IEBACitlbmFibGVfbGFuZ3VhZ2UoQ1NoYXJwKQorc2V0KENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMgRGVidWcpCisKK3NldChTUkNfRklMRVMKKyAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NTaGFycFNvdXJjZUdyb3VwL2Zvby5jcworICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkL2Jhei5jcworKQorCitzZXQoSU1BR0VfRklMRVMKKyAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NTaGFycFNvdXJjZUdyb3VwL0ltYWdlcy9lbXB0eS5ibXAKKykKKworYWRkX2xpYnJhcnkoVnNDc2hhcnBTb3VyY2VHcm91cCBTSEFSRUQgJHtTUkNfRklMRVN9ICR7SU1BR0VfRklMRVN9KQorc291cmNlX2dyb3VwKCJDU2hhcnBTb3VyY2VHcm91cCIgRklMRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NTaGFycFNvdXJjZUdyb3VwL2Zvby5jcykKK3NvdXJjZV9ncm91cCgiQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkIiBGSUxFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ1NoYXJwU291cmNlR3JvdXAvbmVzdGVkL2Jhei5jcykKK3NvdXJjZV9ncm91cCgiSW1hZ2VzIiBGSUxFUyAke0lNQUdFX0ZJTEVTfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ3NoYXJwU291cmNlR3JvdXBIZWxwZXJzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNDc2hhcnBTb3VyY2VHcm91cEhlbHBlcnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhOWE2NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzQ3NoYXJwU291cmNlR3JvdXBIZWxwZXJzLmNtYWtlCkBAIC0wLDAgKzEsMTUgQEAKK2Z1bmN0aW9uKGZpbmRfc291cmNlX2dyb3VwIExJTkVTIE5BTUUpCisgIHNldChmb3VuZFNvdXJjZUdyb3VwTGluayAwKQorICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgTElORVMpCisgICAgaWYobGluZSBNQVRDSEVTICI8TGluaz4ke05BTUV9PC9MaW5rPiIpCisgICAgICBzZXQoZm91bmRTb3VyY2VHcm91cExpbmsgMSkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorCisgIGlmKE5PVCBmb3VuZFNvdXJjZUdyb3VwTGluaykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlNvdXJjZSBncm91cCBsaW5rIGZvciAke05BTUV9IG5vdCBmb3VuZC4iIFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoU09VUkNFX0dST1VQX0ZPVU5EIDAgUEFSRU5UX1NDT1BFKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKyAgc2V0KFNPVVJDRV9HUk9VUF9GT1VORCAxIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmY4Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNEZXBsb3lFbmFibGVkLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNTggQEAKK3NldCh2Y1Byb2plY3RGaWxlICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZm9vLnZjeHByb2oiKQoraWYoTk9UIEVYSVNUUyAiJHt2Y1Byb2plY3RGaWxlfSIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7dmNQcm9qZWN0RmlsZX0gZG9lcyBub3QgZXhpc3QuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKyMKKyMgVGVzdCBzb2x1dGlvbiBmaWxlIGZvciBkZXBsb3ltZW50LgorIworCitzZXQodmNTbG5GaWxlICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vVnNEZXBsb3lFbmFibGVkLnNsbiIpCitpZihOT1QgRVhJU1RTICIke3ZjU2xuRmlsZX0iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlNvbHV0aW9uIGZpbGUgJHt2Y1NsbkZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKKworCitzZXQoRm9vUHJvakdVSUQgIiIpCitzZXQoRm91bmRGb29Qcm9qIEZBTFNFKQorc2V0KEluRm9vUHJvaiBGQUxTRSkKK3NldChGb3VuZFJlbGVhc2VEZXBsb3kgRkFMU0UpCitzZXQoRGVwbG95Q29uZmlncyBEZWJ1ZyBNaW5TaXplUmVsIFJlbFdpdGhEZWJJbmZvICkKKworZmlsZShTVFJJTkdTICIke3ZjU2xuRmlsZX0iIGxpbmVzKQorZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorI21lc3NhZ2UoU1RBVFVTICIke2xpbmV9IikKKyAgaWYoIChOT1QgSW5Gb29Qcm9qICkgQU5EIChsaW5lIE1BVENIRVMgIl5bIFxcdF0qUHJvamVjdFxcKFwie1tBLUYwLTktXSt9XCJcXCkgPSBcImZvb1wiLCBcImZvby52Y3hwcm9qXCIsIFwiKHtbQS1GMC05LV0rfSlcIlsgXFx0XSokIikpCisgICAgIyBGaXJzdCwgaWRlbnRpZnkgdGhlIEdVSUQgZm9yIHRoZSBmb28gcHJvamVjdCwgYW5kIHJlY29yZCBpdC4KKyAgICBzZXQoRm91bmRGb29Qcm9qIFRSVUUpCisgICAgc2V0KEluRm9vUHJvaiBUUlVFKQorICAgIHNldChGb29Qcm9qR1VJRCAke0NNQUtFX01BVENIXzF9KQorICBlbHNlaWYoSW5Gb29Qcm9qIEFORCBsaW5lIE1BVENIRVMgIkVuZFByb2plY3QiKQorICAgIHNldChJbkZvb1Byb2ogRkFMU0UpCisgIGVsc2VpZigoTk9UIEluRm9vUHJvaikgQU5EIGxpbmUgTUFUQ0hFUyAiJHtGb29Qcm9qR1VJRH1cXC5SZWxlYXNlLipcXC5EZXBsb3lcXC4wIikKKyAgICAjIElmIGZvbydzIFJlbGVhc2UgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gZGVwbG95LCB0aGlzIGlzIHRoZSBlcnJvci4KKyAgICBzZXQoRm91bmRSZWxlYXNlRGVwbG95IFRSVUUpCisgIGVuZGlmKCkKKyAgaWYoIGxpbmUgTUFUQ0hFUyAie1tBLUYwLTktXSt9XFwuKFteXFx8XSspLipcXC5EZXBsb3lcXC4wIiApCisgICAgIyBDaGVjayB0aGF0IHRoZSBvdGhlciBjb25maWd1cmF0aW9ucyBBUkUgc2V0IHRvIGRlcGxveS4KKyAgICBsaXN0KCBSRU1PVkVfSVRFTSBEZXBsb3lDb25maWdzICR7Q01BS0VfTUFUQ0hfMX0pCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCitpZihGb3VuZFJlbGVhc2VEZXBsb3kpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUmVsZWFzZSBkZXBsb3ltZW50IGVuYWJsZWQuIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworaWYoTk9UIEZvdW5kRm9vUHJvaikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGYWlsZWQgdG8gZmluZCBmb28gcHJvamVjdCBpbiB0aGUgc29sdXRpb24uIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworbGlzdChMRU5HVEggRGVwbG95Q29uZmlncyBsZW5ndGgpCitpZiggIGxlbmd0aCBHUkVBVEVSIDAgKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZhaWxlZCB0byBmaW5kIERlcGxveSBsaW5lcyBmb3Igbm9uLVJlbGVhc2UgY29uZmlndXJhdGlvbnMuICgke2xlbmd0aH0pIikKKyAgcmV0dXJuKCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRGVwbG95RW5hYmxlZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmI0MmIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNEZXBsb3lFbmFibGVkLmNtYWtlCkBAIC0wLDAgKzEsMTIgQEAKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK3NldChERVBMT1lfRElSCisgICAidGVtcFxcZm9vZGlyIgorKQorCithZGRfbGlicmFyeShmb28gU0hBUkVEIGZvby5jcHApCisKK3NldF90YXJnZXRfcHJvcGVydGllcyhmb28KKyBQUk9QRVJUSUVTCisgIFZTX1NPTFVUSU9OX0RFUExPWSAkPE5PVDokPENPTkZJRzpSZWxlYXNlPj4KKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRG90bmV0VGFyZ2V0RnJhbWV3b3JrLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmstY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1NjYzOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRG90bmV0VGFyZ2V0RnJhbWV3b3JrLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDAgQEAKK3NldChmaWxlcyBmb28uY3Nwcm9qIGJhci5jc3Byb2opCisKK3NldChpbkxpYjEgRkFMU0UpCitzZXQodGFyZ2V0RnJhbWV3b3JrSW5MaWIxIEZBTFNFKQorCitzZXQoaW5MaWIyIEZBTFNFKQorc2V0KHRhcmdldEZyYW1ld29ya3NJbkxpYjIgRkFMU0UpCisKK2ZvcmVhY2goZmlsZSAke2ZpbGVzfSkKKyAgc2V0KGNzUHJvamVjdEZpbGUgJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9LyR7ZmlsZX0pCisKKyAgaWYoTk9UIEVYSVNUUyAiJHtjc1Byb2plY3RGaWxlfSIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHtjc1Byb2plY3RGaWxlfSBkb2VzIG5vdCBleGlzdC4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICBmaWxlKFNUUklOR1MgIiR7Y3NQcm9qZWN0RmlsZX0iIGxpbmVzKQorCisgIGZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyAgICBpZihOT1QgaW5MaWIxKQorICAgICAgaWYobGluZSBNQVRDSEVTICIgKjxUYXJnZXRGcmFtZXdvcms+bmV0Y29yZWFwcDMuMTwvVGFyZ2V0RnJhbWV3b3JrPiAqJCIpCisgICAgICAgIHNldCh0YXJnZXRGcmFtZXdvcmtJbkxpYjEgIFRSVUUpCisgICAgICAgIHNldChpbkxpYjEgIFRSVUUpCisgICAgICBlbmRpZigpCisgICAgZWxzZWlmKE5PVCBpbkxpYjIpCisgICAgICBpZihsaW5lIE1BVENIRVMgIiAqPFRhcmdldEZyYW1ld29ya3M+bmV0Y29yZWFwcDMuMTtuZXQ0NjE8L1RhcmdldEZyYW1ld29ya3M+ICokIikKKyAgICAgICAgc2V0KHRhcmdldEZyYW1ld29ya3NJbkxpYjIgIFRSVUUpCisgICAgICAgIHNldChpbkxpYjIgVFJVRSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorZW5kZm9yZWFjaCgpCisKK2lmKE5PVCB0YXJnZXRGcmFtZXdvcmtJbkxpYjEpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiVGFyZ2V0RnJhbWV3b3JrIG5vdCBzZXQgY29ycmVjdGx5LiIpCitlbmRpZigpCisKK2lmKE5PVCB0YXJnZXRGcmFtZXdvcmtzSW5MaWIyKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlRhcmdldEZyYW1ld29ya3Mgbm90IHNldCBjb3JyZWN0bHkuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRG90bmV0VGFyZ2V0RnJhbWV3b3JrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmsuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1MzY3OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzRG90bmV0VGFyZ2V0RnJhbWV3b3JrLmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2VuYWJsZV9sYW5ndWFnZShDU2hhcnApCitpZihOT1QgQ01BS0VfQ1NoYXJwX0NPTVBJTEVSKQorICAgIHJldHVybigpCitlbmRpZigpCisKK3NldChDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SSyAibmV0Y29yZWFwcDMuMSIpCitzZXQoQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUktfVkVSU0lPTiAibmV0NDYxIikKK2FkZF9saWJyYXJ5KGZvbyBTSEFSRUQgZm9vLmNzKQorCitzZXQoQ01BS0VfRE9UTkVUX1RBUkdFVF9GUkFNRVdPUksgIm5ldGNvcmVhcHAzLjE7bmV0NDYxIikKK2FkZF9saWJyYXJ5KGJhciBTSEFSRUQgZm9vLmNzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmtWZXJzaW9uLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNEb3RuZXRUYXJnZXRGcmFtZXdvcmtWZXJzaW9uLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzNjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0RvdG5ldFRhcmdldEZyYW1ld29ya1ZlcnNpb24tY2hlY2suY21ha2UKQEAgLTAsMCArMSw0MCBAQAorc2V0KGZpbGVzIGZvby5jc3Byb2ogYmFyLmNzcHJvaikKKworc2V0KGluTGliMSBGQUxTRSkKK3NldCh0YXJnZXRGcmFtZXdvcmtJbkxpYjEgRkFMU0UpCisKK3NldChpbkxpYjIgRkFMU0UpCitzZXQodGFyZ2V0RnJhbWV3b3Jrc0luTGliMiBGQUxTRSkKKworZm9yZWFjaChmaWxlICR7ZmlsZXN9KQorICBzZXQoY3NQcm9qZWN0RmlsZSAke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vJHtmaWxlfSkKKworICBpZihOT1QgRVhJU1RTICIke2NzUHJvamVjdEZpbGV9IikKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlByb2plY3QgZmlsZSAke2NzUHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGZpbGUoU1RSSU5HUyAiJHtjc1Byb2plY3RGaWxlfSIgbGluZXMpCisKKyAgZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorICAgIGlmKE5PVCBpbkxpYjEpCisgICAgICBpZihsaW5lIE1BVENIRVMgIiAqPFRhcmdldEZyYW1ld29ya1ZlcnNpb24+djQuNi4xPC9UYXJnZXRGcmFtZXdvcmtWZXJzaW9uPiAqJCIpCisgICAgICAgIHNldCh0YXJnZXRGcmFtZXdvcmtJbkxpYjEgIFRSVUUpCisgICAgICAgIHNldChpbkxpYjEgIFRSVUUpCisgICAgICBlbmRpZigpCisgICAgZWxzZWlmKE5PVCBpbkxpYjIpCisgICAgICBpZihsaW5lIE1BVENIRVMgIiAqPFRhcmdldEZyYW1ld29yaz5uZXRjb3JlYXBwMy4xPC9UYXJnZXRGcmFtZXdvcms+ICokIikKKyAgICAgICAgc2V0KHRhcmdldEZyYW1ld29ya3NJbkxpYjIgIFRSVUUpCisgICAgICAgIHNldChpbkxpYjIgVFJVRSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorZW5kZm9yZWFjaCgpCisKK2lmKE5PVCB0YXJnZXRGcmFtZXdvcmtJbkxpYjEpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbiBub3Qgc2V0IGNvcnJlY3RseS4iKQorZW5kaWYoKQorCitpZihOT1QgdGFyZ2V0RnJhbWV3b3Jrc0luTGliMikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJUYXJnZXRGcmFtZXdvcmsgbm90IHNldCBjb3JyZWN0bHkuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzR2xvYmFscy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzR2xvYmFscy1jaGVjay5jbWFrZQppbmRleCAwZTdmZDQ1Li42YTMwMDk5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0dsb2JhbHMtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNHbG9iYWxzLWNoZWNrLmNtYWtlCkBAIC0xLDQ0ICsxLDY1IEBACi1zZXQodmNQcm9qZWN0RmlsZSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2Zvby52Y3hwcm9qIikKLWlmKE5PVCBFWElTVFMgIiR7dmNQcm9qZWN0RmlsZX0iKQotICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlByb2plY3QgZmlsZSAke3ZjUHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCi0gIHJldHVybigpCi1lbmRpZigpCi0KLXNldChJbnNpZGVHbG9iYWxzIEZBTFNFKQotc2V0KERlZmF1bHRMYW5ndWFnZVNldCBGQUxTRSkKLXNldChNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvblNldCBGQUxTRSkKLQotZmlsZShTVFJJTkdTICIke3ZjUHJvamVjdEZpbGV9IiBsaW5lcykKLWZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKLSAgaWYobGluZSBNQVRDSEVTICJeICo8UHJvcGVydHlHcm91cCBMYWJlbD1cIkdsb2JhbHNcIj4gKiQiKQotICAgIHNldChJbnNpZGVHbG9iYWxzIFRSVUUpCi0gIGVsc2VpZihsaW5lIE1BVENIRVMgIl4gKjxEZWZhdWx0TGFuZ3VhZ2U+KFthLXpBLVpcXC1dKyk8L0RlZmF1bHRMYW5ndWFnZT4gKiQiKQotICAgIGlmKCIke0NNQUtFX01BVENIXzF9IiBTVFJFUVVBTCAiZW4tVVMiKQotICAgICAgaWYoSW5zaWRlR2xvYmFscykKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgImZvby52Y3hwcm9qIGhhcyBjb3JyZWN0IERlZmF1bHRMYW5ndWFnZSBnbG9iYWwgcHJvcGVydHkiKQotICAgICAgICBzZXQoRGVmYXVsdExhbmd1YWdlU2V0IFRSVUUpCi0gICAgICBlbHNlKCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIkRlZmF1bHRMYW5ndWFnZSBpcyBzZXQgYnV0IG5vdCB3aXRoaW4gXCJHbG9iYWxzXCIgcHJvcGVydHkgZ3JvdXAiKQotICAgICAgZW5kaWYoKQotICAgIGVuZGlmKCkKLSAgZWxzZWlmKGxpbmUgTUFUQ0hFUyAiXiAqPE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uPihbMC05XFwuXSspPC9NaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4gKiQiKQotICAgIGlmKCIke0NNQUtFX01BVENIXzF9IiBTVFJFUVVBTCAiMTQuMCIpCi0gICAgICBpZihJbnNpZGVHbG9iYWxzKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiZm9vLnZjeHByb2ogaGFzIGNvcnJlY3QgTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24gZ2xvYmFsIHByb3BlcnR5IikKLSAgICAgICAgc2V0KE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uU2V0IFRSVUUpCi0gICAgICBlbHNlKCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMgIk1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uIGlzIHNldCBidXQgbm90IHdpdGhpbiBcIkdsb2JhbHNcIiBwcm9wZXJ0eSBncm91cCIpCi0gICAgICBlbmRpZigpCi0gICAgZW5kaWYoKQorbWFjcm8oY2hlY2tfcHJvamVjdF9maWxlIHByb2plY3RGaWxlKQorICBpZihOT1QgRVhJU1RTICIke3Byb2plY3RGaWxlfSIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHtwcm9qZWN0RmlsZX0gZG9lcyBub3QgZXhpc3QuIikKKyAgICByZXR1cm4oKQogICBlbmRpZigpCi1lbmRmb3JlYWNoKCkKIAotaWYoTk9UIERlZmF1bHRMYW5ndWFnZVNldCkKLSAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJEZWZhdWx0TGFuZ3VhZ2VTZXQgbm90IGZvdW5kIG9yIG5vdCBzZXQgY29ycmVjdGx5LiIpCi0gIHJldHVybigpCi1lbmRpZigpCisgIHN0cmluZyhSRVBMQUNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vIiAiIiBwcm9qZWN0TmFtZSAke3Byb2plY3RGaWxlfSkKIAotaWYoTk9UIE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uU2V0KQotICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uU2V0IG5vdCBmb3VuZCBvciBub3Qgc2V0IGNvcnJlY3RseS4iKQotICByZXR1cm4oKQotZW5kaWYoKQorICBzZXQoSW5zaWRlR2xvYmFscyBGQUxTRSkKKyAgc2V0KERlZmF1bHRMYW5ndWFnZVNldCBGQUxTRSkKKyAgc2V0KE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uU2V0IEZBTFNFKQorICBzZXQoVGVzdFByb3BlcnR5U2V0IEZBTFNFKQorCisgIGZpbGUoU1RSSU5HUyAiJHtwcm9qZWN0RmlsZX0iIGxpbmVzKQorICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgbGluZXMpCisgICAgaWYobGluZSBNQVRDSEVTICJeICo8UHJvcGVydHlHcm91cCBMYWJlbD1cIkdsb2JhbHNcIj4gKiQiKQorICAgICAgc2V0KEluc2lkZUdsb2JhbHMgVFJVRSkKKyAgICBlbHNlaWYobGluZSBNQVRDSEVTICJeICo8RGVmYXVsdExhbmd1YWdlPihbYS16QS1aXFwtXSspPC9EZWZhdWx0TGFuZ3VhZ2U+ICokIikKKyAgICAgIGlmKCIke0NNQUtFX01BVENIXzF9IiBTVFJFUVVBTCAiZW4tVVMiKQorICAgICAgICBpZihJbnNpZGVHbG9iYWxzKQorICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke3Byb2plY3ROYW1lfSBoYXMgY29ycmVjdCBEZWZhdWx0TGFuZ3VhZ2UgZ2xvYmFsIHByb3BlcnR5IikKKyAgICAgICAgICBzZXQoRGVmYXVsdExhbmd1YWdlU2V0IFRSVUUpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJEZWZhdWx0TGFuZ3VhZ2UgaXMgc2V0IGJ1dCBub3Qgd2l0aGluIFwiR2xvYmFsc1wiIHByb3BlcnR5IGdyb3VwIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZihsaW5lIE1BVENIRVMgIl4gKjxNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj4oWzAtOVxcLl0rKTwvTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24+ICokIikKKyAgICAgIGlmKCIke0NNQUtFX01BVENIXzF9IiBTVFJFUVVBTCAiMTAuMCIpCisgICAgICAgIGlmKEluc2lkZUdsb2JhbHMpCisgICAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7cHJvamVjdE5hbWV9IGhhcyBjb3JyZWN0IE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uIGdsb2JhbCBwcm9wZXJ0eSIpCisgICAgICAgICAgc2V0KE1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uU2V0IFRSVUUpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbiBpcyBzZXQgYnV0IG5vdCB3aXRoaW4gXCJHbG9iYWxzXCIgcHJvcGVydHkgZ3JvdXAiKQorICAgICAgICBlbmRpZigpCisgICAgICBlbmRpZigpCisgICAgZWxzZWlmKGxpbmUgTUFUQ0hFUyAiXiAqPFRlc3RQcm9wZXJ0eT4oLispPC9UZXN0UHJvcGVydHk+ICokIikKKyAgICAgIGlmKCIke0NNQUtFX01BVENIXzF9IiBTVFJFUVVBTCAiVGVzdFZhbHVlIikKKyAgICAgICAgaWYoSW5zaWRlR2xvYmFscykKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtwcm9qZWN0TmFtZX0gaGFzIGNvcnJlY3QgVGVzdFByb3BlcnR5IGdsb2JhbCBwcm9wZXJ0eSIpCisgICAgICAgICAgc2V0KFRlc3RQcm9wZXJ0eVNldCBUUlVFKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiVGVzdFByb3BlcnR5IGlzIHNldCBidXQgbm90IHdpdGhpbiBcIkdsb2JhbHNcIiBwcm9wZXJ0eSBncm91cCIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorCisgIGlmKE5PVCBEZWZhdWx0TGFuZ3VhZ2VTZXQpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJEZWZhdWx0TGFuZ3VhZ2Ugbm90IGZvdW5kIG9yIG5vdCBzZXQgY29ycmVjdGx5IGluICR7cHJvamVjdE5hbWV9LiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGlmKE5PVCBNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvblNldCkKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk1pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uIG5vdCBmb3VuZCBvciBub3Qgc2V0IGNvcnJlY3RseSBpbiAke3Byb2plY3ROYW1lfS4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICBpZihOT1QgVGVzdFByb3BlcnR5U2V0KQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiVGVzdFByb3BlcnR5IG5vdCBmb3VuZCBvciBub3Qgc2V0IGNvcnJlY3RseSBpbiAke3Byb2plY3ROYW1lfS4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworY2hlY2tfcHJvamVjdF9maWxlKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy8ke0NNQUtFX1ZFUlNJT059L0NvbXBpbGVySWRDWFgvQ29tcGlsZXJJZENYWC52Y3hwcm9qIikKK2NoZWNrX3Byb2plY3RfZmlsZSgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2Zvby52Y3hwcm9qIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzR2xvYmFscy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzR2xvYmFscy5jbWFrZQppbmRleCBhM2VkNWFmLi4wOWQ4MDZkIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc0dsb2JhbHMuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNHbG9iYWxzLmNtYWtlCkBAIC0xLDggKzEsOSBAQAotZW5hYmxlX2xhbmd1YWdlKENYWCkKLQogc2V0KENNQUtFX1ZTX0dMT0JBTFMKICAgICAiRGVmYXVsdExhbmd1YWdlPWVuLVVTIgotICAgICJNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj0xNC4wIgorICAgICJNaW5pbXVtVmlzdWFsU3R1ZGlvVmVyc2lvbj0xMC4wIgorICAgICJUZXN0UHJvcGVydHk9VGVzdFZhbHVlIgogKQogCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCiBhZGRfbGlicmFyeShmb28gZm9vLmNwcCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUGFja2FnZVJlZmVyZW5jZXMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BhY2thZ2VSZWZlcmVuY2VzLWNoZWNrLmNtYWtlCmluZGV4IDUxMmExYzkuLjljMGY2ZTYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUGFja2FnZVJlZmVyZW5jZXMtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQYWNrYWdlUmVmZXJlbmNlcy1jaGVjay5jbWFrZQpAQCAtNCw2ICs0LDEyIEBACiAgIHJldHVybigpCiBlbmRpZigpCiAKK3NldChpbnN0YWxsUHJvamVjdEZpbGUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9JTlNUQUxMLnZjeHByb2oiKQoraWYoTk9UIEVYSVNUUyAiJHtpbnN0YWxsUHJvamVjdEZpbGV9IikKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJJbnN0YWxsIGZpbGUgSU5TVEFMTC52Y3hwcm9qIGRvZXMgbm90IGV4aXN0LiIpCisgIHJldHVybigpCitlbmRpZigpCisKIAogc2V0KHRlc3QxTGlicmFyeSAiYm9vc3QiKQogc2V0KHRlc3QxVmVyc2lvbiAiMS43LjAiKQpAQCAtMzcsMyArNDMsMTkgQEAKICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGYWlsZWQgdG8gZmluZCBwYWNrYWdlIHJlZmVyZW5jZXMiKQogICByZXR1cm4oKQogZW5kaWYoKQorCitzZXQoRE9UX05FVF9GUkFNRVdPUktfVkVSU0lPTl9GT1VORCBGQUxTRSkKKworZmlsZShTVFJJTkdTICIke2luc3RhbGxQcm9qZWN0RmlsZX0iIGluc3RhbGxsaW5lcykKK2ZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyAgaWYobGluZSBNQVRDSEVTICJeICo8VGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj52NC43LjI8L1RhcmdldEZyYW1ld29ya1ZlcnNpb24+JCIpCisgICAgc2V0KERPVF9ORVRfRlJBTUVXT1JLX1ZFUlNJT05fRk9VTkQgVFJVRSkKKyAgICBtZXNzYWdlKFNUQVRVUyAiVGhlIGluc3RhbGwgdGFyZ2V0IGNvbnRhaW5zIHRoZSBjb3JyZWN0IFRhcmdldEZyYW1ld29ya1ZlcnNpb24uIikKKyAgICBicmVhaygpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCitpZihOT1QgRE9UX05FVF9GUkFNRVdPUktfVkVSU0lPTl9GT1VORCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGYWlsZWQgdG8gZmluZCBUYXJnZXRGcmFtZXdvcmtWZXJzaW9uIGluIHRoZSBpbnN0YWxsIHRhcmdldCIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BhY2thZ2VSZWZlcmVuY2VzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQYWNrYWdlUmVmZXJlbmNlcy5jbWFrZQppbmRleCAyMjRhYjE4Li4zMGU4ZmQ0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BhY2thZ2VSZWZlcmVuY2VzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUGFja2FnZVJlZmVyZW5jZXMuY21ha2UKQEAgLTEsNCArMSwxMyBAQAogZW5hYmxlX2xhbmd1YWdlKENYWCkKK3NldChDTUFLRV9ET1RORVRfVEFSR0VUX0ZSQU1FV09SS19WRVJTSU9OICJ2NC43LjIiKQorCiBhZGRfbGlicmFyeShmb28gZm9vLmNwcCkKIAogc2V0X3Byb3BlcnR5KFRBUkdFVCBmb28gUFJPUEVSVFkgVlNfUEFDS0FHRV9SRUZFUkVOQ0VTICJib29zdF8xLjcuMDtTRk1MXzIuMi4wIikKKworIyBpbnN0YWxsIGFuZCBleHBvcnQgdGhlIHRhcmdldHMgdG8gdGVzdCB0aGUgY29ycmVjdCBiZWhhdmlvcgorIyBudWdldCByZXN0b3JlIHdpbGwgb25seSB3b3JrIHdpdGggYW4gaW5zdGFsbCB0YXJnZXQgd2hlbiB0aGUgY29ycmVjdAorIyB0YXJnZXQgZnJhbWV3b3JrIHZlcnNpb24gaXMgc2V0CitzZXQoSU5TVEFMTF9DTUFLRV9ESVIgQ01ha2UpCitpbnN0YWxsKFRBUkdFVFMgZm9vIEVYUE9SVCBmb29fRXhwb3J0X1RhcmdldCkKK2luc3RhbGwoRVhQT1JUIGZvb19FeHBvcnRfVGFyZ2V0IERFU1RJTkFUSU9OICR7SU5TVEFMTF9DTUFLRV9ESVJ9IEZJTEUgZm9vQ29uZmlnLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQbGF0Zm9ybVRvb2xzZXQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BsYXRmb3JtVG9vbHNldC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDgyZDNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQbGF0Zm9ybVRvb2xzZXQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzNiBAQAorbWFjcm8oUmVhZFBsYXRmb3JtVG9vbHNldCB0Z3Qgb3V0dmFyKQorICBzZXQodmNQcm9qZWN0RmlsZSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9LyR7dGd0fS52Y3hwcm9qIikKKyAgaWYoTk9UIEVYSVNUUyAiJHt2Y1Byb2plY3RGaWxlfSIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHt0Z3R9LnZjeHByb2ogZG9lcyBub3QgZXhpc3QuIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgc2V0KEhBVkVfUGxhdGZvcm1Ub29sc2V0IDApCisKKyAgZmlsZShTVFJJTkdTICIke3ZjUHJvamVjdEZpbGV9IiBsaW5lcykKKyAgZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorICAgIGlmKGxpbmUgTUFUQ0hFUyAiXiAqPFBsYXRmb3JtVG9vbHNldD4oW148Pl0rKTwvUGxhdGZvcm1Ub29sc2V0PiIpCisgICAgICBzZXQoJHtvdXR2YXJ9ICIke0NNQUtFX01BVENIXzF9IikKKyAgICAgIHNldChIQVZFX1BsYXRmb3JtVG9vbHNldCAxKQorICAgICAgYnJlYWsoKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYoTk9UIEhBVkVfUGxhdGZvcm1Ub29sc2V0KQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7dGd0fS52Y3hwcm9qIGRvZXMgbm90IGhhdmUgYSA8UGxhdGZvcm1Ub29sc2V0PiBmaWVsZC4iKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworUmVhZFBsYXRmb3JtVG9vbHNldChOb3JtYWxQbGF0Zm9ybVRvb2xzZXQgTk9STUFMX1RPT0xTRVQpCitSZWFkUGxhdGZvcm1Ub29sc2V0KE92ZXJyaWRlblBsYXRmb3JtVG9vbHNldCBPVkVSUklERU5fVE9PTFNFVCkKKworaWYgKE5PVCAiJHtPVkVSUklERU5fVE9PTFNFVH0iIFNUUkVRVUFMICJNeUN1c3RvbVRvb2xzZXQiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZhaWxlZCB0byBvdmVycmlkZSB0aGUgcGxhdGZvcm0gdG9vbHNldCIpCisgIHJldHVybigpCitlbmRpZigpCisKK2lmICgiJHtOT1JNQUxfVE9PTFNFVH0iIFNUUkVRVUFMICJNeUN1c3RvbVRvb2xzZXQiKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk1haW4gdG9vbHNldCB3YXMgb3ZlcnJpZGRlbiAoaXQgc2hvdWxkbid0KSIpCisgIHJldHVybigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BsYXRmb3JtVG9vbHNldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUGxhdGZvcm1Ub29sc2V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZTk3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1BsYXRmb3JtVG9vbHNldC5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2FkZF9saWJyYXJ5KE5vcm1hbFBsYXRmb3JtVG9vbHNldCBmb28uY3BwKQorYWRkX2xpYnJhcnkoT3ZlcnJpZGVuUGxhdGZvcm1Ub29sc2V0IGZvby5jcHApCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoT3ZlcnJpZGVuUGxhdGZvcm1Ub29sc2V0CisgICAgICAgICAgICAgICAgICAgICAgUFJPUEVSVElFUyBWU19QTEFURk9STV9UT09MU0VUIE15Q3VzdG9tVG9vbHNldCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUHJlY29tcGlsZUhlYWRlcnMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1ByZWNvbXBpbGVIZWFkZXJzLWNoZWNrLmNtYWtlCmluZGV4IDkxY2VhMGUuLjljMjE0ZjEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzUHJlY29tcGlsZUhlYWRlcnMtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNQcmVjb21waWxlSGVhZGVycy1jaGVjay5jbWFrZQpAQCAtMSw0ICsxLDQgQEAKLXNldChwY2hfaGVhZGVyICJDTWFrZUZpbGVzL3RndC5kaXIvY21ha2VfcGNoLmh4eCIpCitzZXQocGNoX2hlYWRlciAiQ01ha2VGaWxlcy90Z3QuZGlyL0RlYnVnL2NtYWtlX3BjaC5oeHgiKQogc2V0KHBjaF9zb3VyY2UgWz1bQ01ha2VGaWxlc1xcdGd0LmRpclxcY21ha2VfcGNoLmN4eF09XSkKIAogaWYoTk9UIEVYSVNUUyAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9LyR7cGNoX2hlYWRlcn0iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTZXR0aW5ncy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU2V0dGluZ3MtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4YjI2YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU2V0dGluZ3MtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyMyBAQAorbWFjcm8oZW5zdXJlX3Byb3BzX3NldCBwcm9qZWN0RmlsZSkKKyAgaWYoTk9UIEVYSVNUUyAiJHtwcm9qZWN0RmlsZX0iKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7cHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIHNldChTZXR0aW5nRm91bmQgRkFMU0UpCisKKyAgZmlsZShTVFJJTkdTICIke3Byb2plY3RGaWxlfSIgbGluZXMpCisgIGZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyAgICBpZihsaW5lIE1BVENIRVMgIjxTb3VyY2VQcm9wZXJ0eTEuKkRlYnVnLio+U291cmNlUHJvcGVydHkxVmFsdWU8L1NvdXJjZVByb3BlcnR5MT4iKQorICAgICAgbWVzc2FnZSgiU291cmNlUHJvcGVydHkxIHNldHRpbmcgZm91bmQiKQorICAgICAgc2V0KFNldHRpbmdGb3VuZCBUUlVFKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgaWYgKE5PVCBTZXR0aW5nRm91bmQpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJTb3VyY2VQcm9wZXJ0eTEgc2V0dGluZyB3YXMgbm90IGZvdW5kIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCitlbmRtYWNybygpCisKK2Vuc3VyZV9wcm9wc19zZXQoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9mb28udmN4cHJvaiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NldHRpbmdzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTZXR0aW5ncy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGIzMjFiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTZXR0aW5ncy5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2FkZF9saWJyYXJ5KGZvbyBmb28uY3BwIHNoYWRlci5obHNsKQorc2V0X3Byb3BlcnR5KFNPVVJDRSBzaGFkZXIuaGxzbCBQUk9QRVJUWSBWU19TRVRUSU5HUworICAiJDwkPENPTkZJRzpERUJVRz46U291cmNlUHJvcGVydHkxPVNvdXJjZVByb3BlcnR5MVZhbHVlPiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NvdXJjZVNldHRpbmdzVG9vbC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzU291cmNlU2V0dGluZ3NUb29sLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YTg5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NvdXJjZVNldHRpbmdzVG9vbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDM0IEBACittYWNybyhlbnN1cmVfcHJvcHNfc2V0IHByb2plY3RGaWxlKQorICBpZihOT1QgRVhJU1RTICIke3Byb2plY3RGaWxlfSIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHtwcm9qZWN0RmlsZX0gZG9lcyBub3QgZXhpc3QuIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgc2V0KEZpcnN0U2V0dGluZ0ZvdW5kIEZBTFNFKQorICBzZXQoU2Vjb25kU2V0dGluZ0ZvdW5kIEZBTFNFKQorCisgIGZpbGUoU1RSSU5HUyAiJHtwcm9qZWN0RmlsZX0iIGxpbmVzKQorICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgbGluZXMpCisgICAgaWYobGluZSBNQVRDSEVTICI8VGFyZ2V0UHJvcGVydHkxLipEZWJ1Zy4qPlRhcmdldFByb3BlcnR5MVZhbHVlRGVidWc8L1RhcmdldFByb3BlcnR5MT4iKQorICAgICAgaWYgKEZpcnN0U2V0dGluZ0ZvdW5kKQorICAgICAgICBtZXNzYWdlKCJUYXJnZXRQcm9wZXJ0eTEgc2V0dGluZyBmb3VuZCB0d2ljZSIpCisgICAgICAgIHNldChTZWNvbmRTZXR0aW5nRm91bmQgVFJVRSkKKyAgICAgIGVsc2UoKQorICAgICAgICBtZXNzYWdlKCJUYXJnZXRQcm9wZXJ0eTEgc2V0dGluZyBmb3VuZCBvbmNlIikKKyAgICAgICAgc2V0KEZpcnN0U2V0dGluZ0ZvdW5kIFRSVUUpCisgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBpZiAoTk9UIEZpcnN0U2V0dGluZ0ZvdW5kKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgbm90IGZvdW5kIGF0IGFsbCIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGlmIChOT1QgU2Vjb25kU2V0dGluZ0ZvdW5kKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgZm91bmQgb25jZSB3aGVuIGl0IHNob3VsZCBiZSBmb3VuZCB0d2ljZSIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQorCitlbnN1cmVfcHJvcHNfc2V0KCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZm9vLnZjeHByb2oiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTb3VyY2VTZXR0aW5nc1Rvb2wuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1NvdXJjZVNldHRpbmdzVG9vbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTg5NjJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNTb3VyY2VTZXR0aW5nc1Rvb2wuY21ha2UKQEAgLTAsMCArMSw1IEBACitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShmb28gZm9vLmNwcCBzaGFkZXIuaGxzbCBzaGFkZXIyLmhsc2wpCitzZXRfcHJvcGVydHkoVEFSR0VUIGZvbyBQUk9QRVJUWSBWU19TT1VSQ0VfU0VUVElOR1NfRlhDb21waWxlCisgICIkPCQ8Q09ORklHOkRFQlVHPjpUYXJnZXRQcm9wZXJ0eTE9VGFyZ2V0UHJvcGVydHkxVmFsdWVEZWJ1Zz4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNWQ1RhcmdldHNQYXRoLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNWQ1RhcmdldHNQYXRoLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTcwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1ZDVGFyZ2V0c1BhdGgtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzMiBAQAorbWFjcm8oY2hlY2tfcHJvamVjdF9maWxlIHByb2plY3RGaWxlKQorICBzZXQoaW5zaWRlR2xvYmFscyBGQUxTRSkKKyAgc2V0KHBhdGhGb3VuZCBGQUxTRSkKKworICBpZihOT1QgRVhJU1RTICIke3Byb2plY3RGaWxlfSIpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJQcm9qZWN0IGZpbGUgJHtwcm9qZWN0RmlsZX0gZG9lcyBub3QgZXhpc3QuIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgc3RyaW5nKFJFUExBQ0UgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS8iICIiIHByb2plY3ROYW1lICR7cHJvamVjdEZpbGV9KQorCisgIGZpbGUoU1RSSU5HUyAiJHtwcm9qZWN0RmlsZX0iIGxpbmVzKQorICBmb3JlYWNoKGxpbmUgSU4gTElTVFMgbGluZXMpCisgICAgaWYobGluZSBNQVRDSEVTICJeICo8UHJvcGVydHlHcm91cCBMYWJlbD1cIkdsb2JhbHNcIj4uKiQiKQorICAgICAgc2V0KGluc2lkZUdsb2JhbHMgVFJVRSkKKyAgICBlbHNlaWYoaW5zaWRlR2xvYmFscykKKyAgICAgIGlmKGxpbmUgTUFUQ0hFUyAiXiAqPC9Qcm9wZXJ0eUdyb3VwPi4qJCIpCisgICAgICAgIHNldChpbnNpZGVHbG9iYWxzIEZBTFNFKQorICAgICAgZWxzZWlmKGxpbmUgTUFUQ0hFUyAiXiAqPFZDVGFyZ2V0c1BhdGg+KC4rKTwvVkNUYXJnZXRzUGF0aD4qJCIpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJGb3VuZCBWQ1RhcmdldHNQYXRoID0gJHtDTUFLRV9NQVRDSF8xfSBpbiBQcm9wZXJ0eUdyb3VwICdHbG9iYWxzJyBpbiAke3Byb2plY3ROYW1lfSIpCisgICAgICAgIHNldChwYXRoRm91bmQgVFJVRSkKKyAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorICBpZihOT1QgcGF0aEZvdW5kKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiVkNUYXJnZXRzUGF0aCBub3QgZm91bmQgaW4gXCJHbG9iYWxzXCIgcHJvcGVydHlncm91cCBpbiAke3Byb2plY3ROYW1lfSIpCisgICAgcmV0dXJuKCkgIyBUaGlzIHNob3VsZCBpbnRlbnRpb25hbGx5IHJldHVybiBmcm9tIHRoZSBjYWxsZXIsIG5vdCB0aGUgbWFjcm8KKyAgZW5kaWYoKQorZW5kbWFjcm8oKQorCitjaGVja19wcm9qZWN0X2ZpbGUoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9DTWFrZUZpbGVzLyR7Q01BS0VfVkVSU0lPTn0vQ29tcGlsZXJJZENYWC9Db21waWxlcklkQ1hYLnZjeHByb2oiKQorY2hlY2tfcHJvamVjdF9maWxlKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZm9vLnZjeHByb2oiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNWQ1RhcmdldHNQYXRoLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNWQ1RhcmdldHNQYXRoLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNjA4OGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1ZDVGFyZ2V0c1BhdGguY21ha2UKQEAgLTAsMCArMSwzIEBACitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShmb28gZm9vLmNwcCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzV2luUlRCeURlZmF1bHQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1dpblJUQnlEZWZhdWx0LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YmJhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9Wc1dpblJUQnlEZWZhdWx0LWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNjYgQEAKK21hY3JvKGNoZWNrQ29tcGlsZUFzV2luUlQgcHJvamVjdFBhdGgpCisgIGlmKFJ1bkNNYWtlX1RFU1RfRkFJTEVEKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKKworICBpZiAoTk9UIEVYSVNUUyAiJHtwcm9qZWN0UGF0aH0iKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiUHJvamVjdCBmaWxlICR7cHJvamVjdFBhdGh9IGRvZXMgbm90IGV4aXN0LiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIGdldF9maWxlbmFtZV9jb21wb25lbnQocHJvamVjdE5hbWUgIiR7cHJvamVjdFBhdGh9IiBOQU1FX1dFKQorCisgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cygiIiAiIiAiR0xPQkFMIiAiT1ZFUlJJREVTX0VOQUJMRTtPVkVSUklERVNfRElTQUJMRSIgJHtBUkdOfSkKKworICB1bnNldChzb3VyY2VPdmVycmlkZSkKKworICBmaWxlKFNUUklOR1MgIiR7cHJvamVjdFBhdGh9IiBsaW5lcykKKyAgc2V0KGZvdW5kR2xvYmFsV2luUlQgZmFsc2UpCisKKyAgZm9yZWFjaChsaW5lIElOIExJU1RTIGxpbmVzKQorICAgIGlmKGxpbmUgTUFUQ0hFUyAiXiAqPENvbXBpbGVBc1dpblJUKCBDb25kaXRpb249XCJbXlxcXCJdK1wiKT8+KHRydWV8ZmFsc2UpPC9Db21waWxlQXNXaW5SVD4kIikKKyAgICAgIHNldCh2YWx1ZSAke0NNQUtFX01BVENIXzJ9KQorCisgICAgICBpZihzb3VyY2VPdmVycmlkZSkKKyAgICAgICAgc2V0KGV4cGVjdGVkTGlzdCkKKworICAgICAgICBpZih2YWx1ZSkKKyAgICAgICAgICBzZXQoZXhwZWN0ZWRMaXN0IF9PVkVSUklERVNfRU5BQkxFKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICBzZXQoZXhwZWN0ZWRMaXN0IF9PVkVSUklERVNfRElTQUJMRSkKKyAgICAgICAgZW5kaWYoKQorCisgICAgICAgIGlmKE5PVCBzb3VyY2VPdmVycmlkZSBJTl9MSVNUICR7ZXhwZWN0ZWRMaXN0fSkKKyAgICAgICAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQKKyAgICAgICAgICAgICIke3Byb2plY3ROYW1lfTogVW5leHBlY3RlZCBDb21waWxlQXNXaW5SVCBvdmVycmlkZSAke3ZhbHVlfSBmb3IgJHtzb3VyY2VPdmVycmlkZX0iKQorICAgICAgICAgIHJldHVybigpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVsc2UoKQorICAgICAgICBpZiAoTk9UIF9HTE9CQUwgU1RSRVFVQUwgdmFsdWUpCisgICAgICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVECisgICAgICAgICAgICAiJHtwcm9qZWN0TmFtZX06IEdsb2JhbCBDb21waWxlQXNXaW5SVCB2YWx1ZSBpcyAke3ZhbHVlfSwgYnV0IGV4cGVjdGVkICR7X0dMT0JBTH0iKQorICAgICAgICAgIHJldHVybigpCisgICAgICAgIGVuZGlmKCkKKworICAgICAgICBzZXQoZm91bmRHbG9iYWxXaW5SVCB0cnVlKQorICAgICAgZW5kaWYoKQorICAgIGVsc2VpZihsaW5lIE1BVENIRVMgIl4gKjxDbENvbXBpbGUgSW5jbHVkZT1cIihbXlwiXSspXCI+JCIpCisgICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHNvdXJjZU92ZXJyaWRlICIke0NNQUtFX01BVENIXzF9IiBOQU1FKQorICAgIGVsc2VpZihsaW5lIE1BVENIRVMgIl4gKjwvQ2xDb21waWxlPiQiKQorICAgICAgdW5zZXQoc291cmNlT3ZlcnJpZGUpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBpZihOT1QgZm91bmRHbG9iYWxXaW5SVCBBTkQgREVGSU5FRCBfR0xPQkFMKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtwcm9qZWN0TmFtZX06IEdsb2JhbCBDb21waWxlQXNXaW5SVCBub3QgZm91bmQgb3IgaGF2ZSBpbnZhbGlkIHZhbHVlLCBidXQgZXhwZWN0ZWQiKQorICAgIHJldHVybigpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworY2hlY2tDb21waWxlQXNXaW5SVCgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L25vRmxhZ09ubHlDLnZjeHByb2oiIEdMT0JBTCBmYWxzZSkKK2NoZWNrQ29tcGlsZUFzV2luUlQoIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9ub0ZsYWdNaXhlZENBbmRDeHgudmN4cHJvaiIgR0xPQkFMIGZhbHNlKQorY2hlY2tDb21waWxlQXNXaW5SVCgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L25vRmxhZ09ubHlDeHgudmN4cHJvaiIgR0xPQkFMIGZhbHNlKQorCitjaGVja0NvbXBpbGVBc1dpblJUKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZmxhZ09ubHlDLnZjeHByb2oiIEdMT0JBTCB0cnVlIE9WRVJSSURFU19ESVNBQkxFIGVtcHR5LmMpCitjaGVja0NvbXBpbGVBc1dpblJUKCIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vZmxhZ01peGVkQ0FuZEN4eC52Y3hwcm9qIiBHTE9CQUwgdHJ1ZSBPVkVSUklERVNfRElTQUJMRSBlbXB0eS5jKQorY2hlY2tDb21waWxlQXNXaW5SVCgiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L2ZsYWdPbmx5Q3h4LnZjeHByb2oiIEdMT0JBTCB0cnVlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3QvVnNXaW5SVEJ5RGVmYXVsdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzV2luUlRCeURlZmF1bHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5MDQ4YgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L1ZzV2luUlRCeURlZmF1bHQuY21ha2UKQEAgLTAsMCArMSwxNiBAQAorc2V0KENNQUtFX1ZTX1dJTlJUX0JZX0RFRkFVTFQgdHJ1ZSkKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShub0ZsYWdPbmx5QyBlbXB0eS5jKQorYWRkX2xpYnJhcnkobm9GbGFnTWl4ZWRDQW5kQ1hYIGVtcHR5LmMgZm9vLmNwcCkKK2FkZF9saWJyYXJ5KG5vRmxhZ09ubHlDWFggZm9vLmNwcCkKKworYWRkX2xpYnJhcnkoZmxhZ09ubHlDIGVtcHR5LmMpCithZGRfbGlicmFyeShmbGFnTWl4ZWRDQW5kQ1hYIGVtcHR5LmMgZm9vLmNwcCkKK2FkZF9saWJyYXJ5KGZsYWdPbmx5Q1hYIGZvby5jcHApCisKK3RhcmdldF9jb21waWxlX29wdGlvbnMoZmxhZ09ubHlDIFBSSVZBVEUgL1pXKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhmbGFnTWl4ZWRDQW5kQ1hYIFBSSVZBVEUgL1pXKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyhmbGFnT25seUNYWCBQUklWQVRFIC9aVykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L3NoYWRlci5obHNsIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3Qvc2hhZGVyLmhsc2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxMzc4OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTMTBQcm9qZWN0L3NoYWRlci5obHNsCkBAIC0wLDAgKzEgQEAKKwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3Qvc2hhZGVyMi5obHNsIGIvVGVzdHMvUnVuQ01ha2UvVlMxMFByb2plY3Qvc2hhZGVyMi5obHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMTM3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9WUzEwUHJvamVjdC9zaGFkZXIyLmhsc2wKQEAgLTAsMCArMSBAQAorCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9WU1NvbHV0aW9uL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvVlNTb2x1dGlvbi9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9WU1NvbHV0aW9uL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL1ZTU29sdXRpb24vQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDZlY2YzZjIuLjM0MmRiYmMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtOCw2ICs4LDE2IEBACiBydW5fY21ha2UoWGNvZGVBdHRyaWJ1dGVHZW5leCkKIHJ1bl9jbWFrZShYY29kZUF0dHJpYnV0ZUdlbmV4RXJyb3IpCiBydW5fY21ha2UoWGNvZGVHZW5lcmF0ZVRvcExldmVsUHJvamVjdE9ubHkpCisKK2Z1bmN0aW9uKFhjb2RlR2VuZXJhdGVUb3BMZXZlbFByb2plY3RPbmx5V2l0aE9iamVjdExpYnJhcnkpCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9YY29kZUdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seVdpdGhPYmplY3RMaWJyYXJ5LWJ1aWxkKQorICBydW5fY21ha2UoWGNvZGVHZW5lcmF0ZVRvcExldmVsUHJvamVjdE9ubHlXaXRoT2JqZWN0TGlicmFyeSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoWGNvZGVHZW5lcmF0ZVRvcExldmVsUHJvamVjdE9ubHlXaXRoT2JqZWN0TGlicmFyeS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLXRhcmdldCBzaGFyZWRfbGliKQorZW5kZnVuY3Rpb24oKQorCitYY29kZUdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seVdpdGhPYmplY3RMaWJyYXJ5KCkKKwogcnVuX2NtYWtlKFhjb2RlT2JqZWN0TmVlZHNFc2NhcGUpCiBydW5fY21ha2UoWGNvZGVPYmplY3ROZWVkc1F1b3RlKQogcnVuX2NtYWtlKFhjb2RlT3B0aW1pemF0aW9uRmxhZ3MpCkBAIC02OCw2ICs3OCwxNSBAQAogWGNvZGVPYmpjeHhGbGFncyhYY29kZU9iamNGbGFncykKIFhjb2RlT2JqY3h4RmxhZ3MoWGNvZGVPYmpjeHhGbGFncykKIAorZnVuY3Rpb24oWGNvZGVSZW1vdmVFeGNlc3NpdmVJU3lzdGVtKQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vWGNvZGVSZW1vdmVFeGNlc3NpdmVJU3lzdGVtLWJ1aWxkKQorICBydW5fY21ha2UoWGNvZGVSZW1vdmVFeGNlc3NpdmVJU3lzdGVtKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBydW5fY21ha2VfY29tbWFuZChYY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW0tYnVpbGQgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCitlbmRmdW5jdGlvbigpCisKK1hjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbSgpCisKICMgSXNvbGF0ZSBkZXZpY2UgdGVzdHMgZnJvbSBob3N0IGFyY2hpdGVjdHVyZSBzZWxlY3Rpb24uCiB1bnNldChFTlZ7Q01BS0VfT1NYX0FSQ0hJVEVDVFVSRVN9KQogCkBAIC0yODcsNCArMzA2LDE2IEBACiAgIHhjdGVzdF9sb29rdXBfdGVzdCh0dk9TIGFwcGxldHZzaW11bGF0b3IpCiBlbmRpZigpCiAKK2lmKFhDT0RFX1ZFUlNJT04gVkVSU0lPTl9HUkVBVEVSX0VRVUFMIDgpCisgIGZ1bmN0aW9uKFhjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbVNESyBTREspCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1hjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbVNESy0ke1NES30tYnVpbGQpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAiLURDTUFLRV9TWVNURU1fTkFNRT1pT1MiKQorICAgIHJ1bl9jbWFrZShYY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW0pCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgICBydW5fY21ha2VfY29tbWFuZChYY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW1TREstJHtTREt9LWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tIC1zZGsgJHtTREt9KQorICBlbmRmdW5jdGlvbigpCisKKyAgWGNvZGVSZW1vdmVFeGNlc3NpdmVJU3lzdGVtU0RLKGlwaG9uZW9zKQorICBYY29kZVJlbW92ZUV4Y2Vzc2l2ZUlTeXN0ZW1TREsoaXBob25lc2ltdWxhdG9yKQorZW5kaWYoKQogIyBQbGVhc2UgYWRkIG1hY09TLW9ubHkgdGVzdHMgYWJvdmUgYmVmb3JlIHRoZSBkZXZpY2Utc3BlY2lmaWMgdGVzdHMuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVHZW5lcmF0ZVRvcExldmVsUHJvamVjdE9ubHlXaXRoT2JqZWN0TGlicmFyeS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZUdlbmVyYXRlVG9wTGV2ZWxQcm9qZWN0T25seVdpdGhPYmplY3RMaWJyYXJ5LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZTRhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVHZW5lcmF0ZVRvcExldmVsUHJvamVjdE9ubHlXaXRoT2JqZWN0TGlicmFyeS5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldChDTUFLRV9YQ09ERV9HRU5FUkFURV9UT1BfTEVWRUxfUFJPSkVDVF9PTkxZIFRSVUUpCitwcm9qZWN0KFhjb2RlR2VuZXJhdGVUb3BMZXZlbFByb2plY3RPbmx5IE5PTkUpCithZGRfc3ViZGlyZWN0b3J5KHN1YnByb2plY3Rfd2l0aF9vYmplY3RfbGliKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlSW5zdGFsbElPUy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZUluc3RhbGxJT1MuY21ha2UKaW5kZXggYWIzMTM4Ny4uNzVkYTdiMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlSW5zdGFsbElPUy5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVJbnN0YWxsSU9TLmNtYWtlCkBAIC0xLDQgKzEsNCBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC41KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIAogcHJvamVjdChYY29kZUluc3RhbGxJT1MpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVByZWNvbXBpbGVIZWFkZXJzLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlUHJlY29tcGlsZUhlYWRlcnMtY2hlY2suY21ha2UKaW5kZXggYWEzZWFmYy4uNGU4NWRiNiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlUHJlY29tcGlsZUhlYWRlcnMtY2hlY2suY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlUHJlY29tcGlsZUhlYWRlcnMtY2hlY2suY21ha2UKQEAgLTEsNCArMSw0IEBACi1zZXQocGNoX2hlYWRlciAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvdGd0LmRpci9jbWFrZV9wY2guaHh4IikKK3NldChwY2hfaGVhZGVyICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vQ01ha2VGaWxlcy90Z3QuZGlyL0RlYnVnL2NtYWtlX3BjaC5oeHgiKQogCiBpZihOT1QgRVhJU1RTICIke3BjaF9oZWFkZXJ9IikKICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJHZW5lcmF0ZWQgUENIIGhlYWRlciAke3BjaF9oZWFkZXJ9IGRvZXMgbm90IGV4aXN0LiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVSZW1vdmVFeGNlc3NpdmVJU3lzdGVtLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDA1MmYwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L1hjb2RlUmVtb3ZlRXhjZXNzaXZlSVN5c3RlbS5jbWFrZQpAQCAtMCwwICsxLDUyIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkIChWRVJTSU9OIDMuMTQpCisKK2lmKE5PVCAiJEVOVntDTUFLRV9PU1hfQVJDSElURUNUVVJFU30iIE1BVENIRVMgIls7JF0iKQorICBzZXQoVVNFX1NXSUZUIDEpCitlbHNlKCkKKyAgc2V0KFVTRV9TV0lGVCAwKQorZW5kaWYoKQorCitpZihJT1MpCisgIHNldChDTUFLRV9YQ09ERV9BVFRSSUJVVEVfQ09ERV9TSUdOSU5HX1JFUVVJUkVEIE5PKQorICBzZXQoQ01BS0VfVFJZX0NPTVBJTEVfVEFSR0VUX1RZUEUgU1RBVElDX0xJQlJBUlkpCisgIGlmKFhDT0RFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDkpCisgICAgc2V0KFVTRV9TV0lGVCAwKQorICBlbmRpZigpCitlbmRpZiAoKQorCitlbmFibGVfbGFuZ3VhZ2UgKENYWCkKKworaWYoVVNFX1NXSUZUKQorICBlbmFibGVfbGFuZ3VhZ2UgKFN3aWZ0KQorICBpZihOT1QgWENPREVfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTAuMikKKyAgICBzZXQoQ01BS0VfU3dpZnRfTEFOR1VBR0VfVkVSU0lPTiA1LjApCisgIGVsc2VpZihOT1QgWENPREVfVkVSU0lPTiBWRVJTSU9OX0xFU1MgOC4wKQorICAgIHNldChDTUFLRV9Td2lmdF9MQU5HVUFHRV9WRVJTSU9OIDMuMCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCisjIFRyeSB0byBmaW5kIFpMSUIgaW4gdGhlIFNESyByYXRoZXIgdGhhbiBpbiBzeXN0ZW0gbG9jYXRpb25zLgorc2V0KENNQUtFX0ZJTkRfVVNFX1BBQ0tBR0VfUk9PVF9QQVRIIEZBTFNFKQorc2V0KENNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEggRkFMU0UpCitzZXQoQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSCBGQUxTRSkKK3NldChDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSCBGQUxTRSkKK2xpc3QoUkVNT1ZFX0lURU0gQ01BS0VfU1lTVEVNX1BSRUZJWF9QQVRIIC91c3IvbG9jYWwgL3VzciAvIC91c3IvWDExUjYgL3Vzci9wa2cgL29wdCAvc3cgL29wdC9sb2NhbCkKKworZmluZF9wYWNrYWdlKFpMSUIgUkVRVUlSRUQpCithZGRfbGlicmFyeSAoZnJhbWV3b3JrX2RlcGVuZGVuY3kgU1RBVElDKQordGFyZ2V0X3NvdXJjZXMgKGZyYW1ld29ya19kZXBlbmRlbmN5IFBSSVZBVEUgdXNlX2NtYXRoLmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhmcmFtZXdvcmtfZGVwZW5kZW5jeSBJTlRFUkZBQ0UgWkxJQjo6WkxJQikKKworYWRkX2xpYnJhcnkgKGZyYW1ld29ya190ZXN0IFNIQVJFRCB1c2VfY21hdGguY3BwKQoraWYoVVNFX1NXSUZUKQorICB0YXJnZXRfc291cmNlcyhmcmFtZXdvcmtfdGVzdCBQUklWQVRFIGZvby5zd2lmdCkKK2VuZGlmKCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoZnJhbWV3b3JrX3Rlc3QgUFJJVkFURSBmcmFtZXdvcmtfZGVwZW5kZW5jeSkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzIChmcmFtZXdvcmtfdGVzdCBQUk9QRVJUSUVTCisgICAgRlJBTUVXT1JLIFRSVUUKKyAgICBGUkFNRVdPUktfVkVSU0lPTiBBCisgICAgTUFDT1NYX0ZSQU1FV09SS19JREVOVElGSUVSICJmcmFtZXdvcmsudGVzdCIKKyAgICBWRVJTSU9OICIxLjAiCisgICAgU09WRVJTSU9OIDEuMAorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVTY2hlbWFQcm9wZXJ0eS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVNjaGVtYVByb3BlcnR5LWNoZWNrLmNtYWtlCmluZGV4IDdkODNhNzAuLmM3NDJmNTAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVNjaGVtYVByb3BlcnR5LWNoZWNrLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVNjaGVtYVByb3BlcnR5LWNoZWNrLmNtYWtlCkBAIC00NSw2ICs0NSw3IEBACiBjaGVja19wcm9wZXJ0eSgiRU5WSVJPTk1FTlQiIFs9W3ZhbHVlPSJmb28iXT1dKQogY2hlY2tfcHJvcGVydHkoIkVOVklST05NRU5UIiBbPVtrZXk9IkJBUiJdPV0pCiBjaGVja19wcm9wZXJ0eSgiRU5WSVJPTk1FTlQiIFs9W3ZhbHVlPSJiYXIiXT1dKQorY2hlY2tfcHJvcGVydHkoIldPUktJTkdfRElSRUNUT1JZIiBbPVsiL3dvcmtpbmcvZGlyIl09XSkKIAogZXhwZWN0X25vX3NjaGVtYSgiTm9TY2hlbWEiKQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvWGNvZGVTY2hlbWFQcm9wZXJ0eS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVNjaGVtYVByb3BlcnR5LmNtYWtlCmluZGV4IGJlMjE5ZjQuLmNlNWMwYzkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVNjaGVtYVByb3BlcnR5LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9YY29kZVNjaGVtYVByb3BlcnR5LmNtYWtlCkBAIC0zNSw2ICszNSw3IEBACiBjcmVhdGVfc2NoZW1lX2Zvcl9wcm9wZXJ0eShFWEVDVVRBQkxFIG15RXhlY3V0YWJsZSkKIGNyZWF0ZV9zY2hlbWVfZm9yX3Byb3BlcnR5KEFSR1VNRU5UUyAiLS1mb287LS1iYXI9YmF6IikKIGNyZWF0ZV9zY2hlbWVfZm9yX3Byb3BlcnR5KEVOVklST05NRU5UICJGT089Zm9vO0JBUj1iYXIiKQorY3JlYXRlX3NjaGVtZV9mb3JfcHJvcGVydHkoV09SS0lOR19ESVJFQ1RPUlkgIi93b3JraW5nL2RpciIpCiAKIGFkZF9leGVjdXRhYmxlKE5vU2NoZW1hIG1haW4uY3BwKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKE5vU2NoZW1hIFBST1BFUlRJRVMgWENPREVfR0VORVJBVEVfU0NIRU1FIE9GRikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9mb28uc3dpZnQgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvZm9vLnN3aWZ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMmQzZGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3QvZm9vLnN3aWZ0CkBAIC0wLDAgKzEsMiBAQAorZnVuYyBmb28oKSB7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3Qvc3VicHJvamVjdF93aXRoX29iamVjdF9saWIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3Qvc3VicHJvamVjdF93aXRoX29iamVjdF9saWIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0MDBmNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC9zdWJwcm9qZWN0X3dpdGhfb2JqZWN0X2xpYi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDcgQEAKK3Byb2plY3Qoc3VicHJvamVjdF93aXRoX29iamVjdF9saWIpCisKK2FkZF9saWJyYXJ5KG9iamVjdF9saWJfZGVwZW5kZW5jeSBPQkpFQ1QgZHVtbXkuY3BwKQorCithZGRfbGlicmFyeShzaGFyZWRfbGliIFNIQVJFRCBkdW1teS5jcHApCit0YXJnZXRfc291cmNlcyhzaGFyZWRfbGliIFBSSVZBVEUgJDxUQVJHRVRfT0JKRUNUUzpvYmplY3RfbGliX2RlcGVuZGVuY3k+KQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHNoYXJlZF9saWIgUFJPUEVSVElFUyBNQUNPU1hfUlBBVEggT04pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9YY29kZVByb2plY3Qvc3VicHJvamVjdF93aXRoX29iamVjdF9saWIvZHVtbXkuY3BwIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L3N1YnByb2plY3Rfd2l0aF9vYmplY3RfbGliL2R1bW15LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQyMThhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L3N1YnByb2plY3Rfd2l0aF9vYmplY3RfbGliL2R1bW15LmNwcApAQCAtMCwwICsxLDUgQEAKK25hbWVzcGFjZSB7Cit2b2lkIGR1bW15KCkKK3sKK30KK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC91c2VfY21hdGguY3BwIGIvVGVzdHMvUnVuQ01ha2UvWGNvZGVQcm9qZWN0L3VzZV9jbWF0aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1OGFmNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL1hjb2RlUHJvamVjdC91c2VfY21hdGguY3BwCkBAIC0wLDAgKzEsNiBAQAorI2luY2x1ZGUgPGNtYXRoPgorCitib29sIGZvbyhkb3VibGUgYXJnKQoreworICByZXR1cm4gc3RkOjppc2Zpbml0ZShhcmcpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2RlcGVuZGVuY2llcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9kZXBlbmRlbmNpZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvYWRkX2RlcGVuZGVuY2llcy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfZGVwZW5kZW5jaWVzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9HRU5FWF9MSU5LX0xBTkcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0dFTkVYX0xJTktfTEFORy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzRjZTRjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9HRU5FWF9MSU5LX0xBTkcuY21ha2UKQEAgLTAsMCArMSwxNiBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KG9iaiAiJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059IikKK2lmKEJPUkxBTkQpCisgIHNldChwcmUgLSkKK2VuZGlmKCkKKworYWRkX2xpbmtfb3B0aW9ucyAoJDwkPExJTktfTEFOR1VBR0U6Qz46JHtwcmV9QkFERkxBR19MQU5HX0Mke29ian0+CisgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfTEFOR19DWFgke29ian0+KQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19zaGFyZWQgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX21vZCBNT0RVTEUgTGlua09wdGlvbnNMaWIuYykKKworYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfZXhlIExpbmtPcHRpb25zRXhlLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tbGlzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS0VSX2V4cGFuc2lvbi1saXN0LmNtYWtlCmluZGV4IDM0ZGNjNjcuLmM3N2I0M2MgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS0VSX2V4cGFuc2lvbi1saXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS0VSX2V4cGFuc2lvbi1saXN0LmNtYWtlCkBAIC0xMSw3ICsxMSw3IEBACiAKIGFkZF9saWJyYXJ5KGV4YW1wbGUgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCiAjIHVzZSBMQVVOQ0ggZmFjaWxpdHkgdG8gZHVtcCBsaW5rZXIgY29tbWFuZAotc2V0X3Byb3BlcnR5KFRBUkdFVCBleGFtcGxlIFBST1BFUlRZIFJVTEVfTEFVTkNIX0xJTksgIlwiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2R1bXAke0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYfVwiIikKK3NldF9wcm9wZXJ0eShUQVJHRVQgZXhhbXBsZSBQUk9QRVJUWSBSVUxFX0xBVU5DSF9MSU5LICJcIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0NNQUtFX0NGR19JTlRESVJ9L2R1bXAke0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYfVwiIikKIAogYWRkX2RlcGVuZGVuY2llcyAoZXhhbXBsZSBkdW1wKQogCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24tdmFsaWRhdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS0VSX2V4cGFuc2lvbi12YWxpZGF0aW9uLmNtYWtlCmluZGV4IGJlYmQ2YzcuLmVjZTNiYTAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS0VSX2V4cGFuc2lvbi12YWxpZGF0aW9uLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS0VSX2V4cGFuc2lvbi12YWxpZGF0aW9uLmNtYWtlCkBAIC0xMSw1ICsxMSw4IEBACiBmaWxlKFJFQUQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9MSU5LRVIudHh0IiBsaW5rZXJfZmxhZykKIAogaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIiR7bGlua2VyX2ZsYWd9IikKLSAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTElOS0VSOiB3YXMgbm90IGV4cGFuZGVkIGNvcnJlY3RseS4iKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTElOS0VSOiB3YXMgbm90IGV4cGFuZGVkIGNvcnJlY3RseS4iKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtZXhlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtZXhlLWNoZWNrLmNtYWtlCmluZGV4IDRhMjJkN2UuLjEyN2EyZjUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLWV4ZS1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1leGUtY2hlY2suY21ha2UKQEAgLTMsNSArMyw4IEBACiAgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR19FWEVDVVRBQkxFX1JFTEVBU0UnLiIpCiBlbmRpZigpCiBpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyhTSEFSRUR8TU9EVUxFKV9SRUxFQVNFIikKLSAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18oU0hBUkVEfE1PRFVMRSlfUkVMRUFTRScuIikKKyAgaWYgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEKQorICAgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJcbiIpCisgIGVuZGlmKCkKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0JBREZMQUdfKFNIQVJFRHxNT0RVTEUpX1JFTEVBU0UnLiIpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1tb2QtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1tb2QtY2hlY2suY21ha2UKaW5kZXggZDY5NTc2MS4uODc0ZTBhZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtbW9kLWNoZWNrLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLW1vZC1jaGVjay5jbWFrZQpAQCAtMyw1ICszLDggQEAKICAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTm90IGZvdW5kIGV4cGVjdGVkICdCQURGTEFHX01PRFVMRV9SRUxFQVNFJy4iKQogZW5kaWYoKQogaWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18oU0hBUkVEfEVYRUNVVEFCTEUpX1JFTEVBU0UiKQotICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyhTSEFSRUR8RVhFQ1VUQUJMRSlfUkVMRUFTRScuIikKKyAgaWYgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEKQorICAgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJcbiIpCisgIGVuZGlmKCkKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0JBREZMQUdfKFNIQVJFRHxFWEVDVVRBQkxFKV9SRUxFQVNFJy4iKQogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtc2hhcmVkLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MSU5LX09QVElPTlMtc2hhcmVkLWNoZWNrLmNtYWtlCmluZGV4IGVhYWM4ZTMuLmVjYmExN2UgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTElOS19PUFRJT05TLXNoYXJlZC1jaGVjay5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL0xJTktfT1BUSU9OUy1zaGFyZWQtY2hlY2suY21ha2UKQEAgLTMsNSArMyw4IEBACiAgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR19TSEFSRURfUkVMRUFTRScuIikKIGVuZGlmKCkKIGlmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfKE1PRFVMRXxFWEVDVVRBQkxFKV9SRUxFQVNFIikKLSAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18oTU9EVUxFfEVYRUNVVEFCTEUpX1JFTEVBU0UnLiIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyhNT0RVTEV8RVhFQ1VUQUJMRSlfUkVMRUFTRScuIikKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTGlua09wdGlvbnNMaWIuY3h4IGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9MaW5rT3B0aW9uc0xpYi5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiZDI0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvTGlua09wdGlvbnNMaWIuY3h4CkBAIC0wLDAgKzEsNyBAQAorI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZW5kaWYKKyAgaW50IGZsYWdzX2xpYih2b2lkKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNGY1ZGY3Mi4uNDY1ZmY4NSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTIzLDYgKzIzLDIxIEBACiAgIHJ1bl9jbWFrZV90YXJnZXQoTElOS19PUFRJT05TIG1vZCBMaW5rT3B0aW9uc19tb2QgLS1jb25maWcgUmVsZWFzZSkKICAgcnVuX2NtYWtlX3RhcmdldChMSU5LX09QVElPTlMgZXhlIExpbmtPcHRpb25zX2V4ZSAtLWNvbmZpZyBSZWxlYXNlKQogCisKKyAgcnVuX2NtYWtlKGdlbmV4X0xJTktfTEFOR1VBR0UpCisKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIHNoYXJlZF9jIExpbmtPcHRpb25zX3NoYXJlZF9jIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBzaGFyZWRfY3h4IExpbmtPcHRpb25zX3NoYXJlZF9jeHggLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIG1vZCBMaW5rT3B0aW9uc19tb2QgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIGV4ZSBMaW5rT3B0aW9uc19leGUgLS1jb25maWcgUmVsZWFzZSkKKworICBydW5fY21ha2UoZ2VuZXhfTElOS19MQU5HX0FORF9JRCkKKworICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR19BTkRfSUQgc2hhcmVkX2MgTGlua09wdGlvbnNfc2hhcmVkX2MgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIHNoYXJlZF9jeHggTGlua09wdGlvbnNfc2hhcmVkX2N4eCAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR19BTkRfSUQgbW9kIExpbmtPcHRpb25zX21vZCAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR19BTkRfSUQgZXhlIExpbmtPcHRpb25zX2V4ZSAtLWNvbmZpZyBSZWxlYXNlKQorCiAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWY2NDFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtbW9kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWY2NDFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwMTIwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfYy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIEMpCitzZXQgKElOVkFMSURfTEFORyBDWFgpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jeHgtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2N4eC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM5ODEwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jeHgtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXNoYXJlZF9jeHgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfY3h4LXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfY3h4LXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyMzdhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMTcgQEAKKworaWYgKE5PVCBERUZJTkVEIFZBTElEX0xBTkcpCisgIHNldCAoVkFMSURfTEFORyBDKQorZW5kaWYoKQoraWYgKE5PVCBERUZJTkVEIElOVkFMSURfTEFORykKKyAgc2V0IChJTlZBTElEX0xBTkcgQ1hYKQorZW5kaWYoKQorCitpZiAoTk9UIGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18ke1ZBTElEX0xBTkd9X0xBTkciKQorICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0JBREZMQUdfJHtWQUxJRF9MQU5HfV9MQU5HJy4iKQorZW5kaWYoKQoraWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFORyIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyR7SU5WQUxJRF9MQU5HfV9MQU5HJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGQ0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UuY21ha2UKQEAgLTAsMCArMSwxNyBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2lmKEJPUkxBTkQpCisgIHNldChwcmUgLSkKK2VuZGlmKCkKKworYWRkX2xpbmtfb3B0aW9ucyAoJDwkPExJTktfTEFOR1VBR0U6Qz46JHtwcmV9QkFERkxBR18kPExJTktfTEFOR1VBR0U+X0xBTkcke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtDTUFLRV9DWFhfT1VUUFVUX0VYVEVOU0lPTn0+KQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19zaGFyZWRfYyBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9jeHggU0hBUkVEIExpbmtPcHRpb25zTGliLmN4eCkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfbW9kIE1PRFVMRSBMaW5rT3B0aW9uc0xpYi5jKQorCithZGRfZXhlY3V0YWJsZShMaW5rT3B0aW9uc19leGUgTGlua09wdGlvbnNFeGUuYykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZGRlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtbW9kLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZGRlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtbW9kLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtbW9kLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ5OGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQykKK3NldCAoSU5WQUxJRF9MQU5HIENYWCkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2N4eC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfY3h4LWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGY4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2N4eC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIENYWCkKK3NldCAoSU5WQUxJRF9MQU5HIEMpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2N4eC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jeHgtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXNoYXJlZF9jeHgtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWRjMjdmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWRkX2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UKQEAgLTAsMCArMSwyMyBAQAorCitpZiAoTk9UIFZBTElEX0xBTkcpCisgIHNldCAoVkFMSURfTEFORyBDKQorZW5kaWYoKQoraWYgKE5PVCBJTlZBTElEX0xBTkcpCisgIHNldCAoSU5WQUxJRF9MQU5HIENYWCkKK2VuZGlmKCkKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtWQUxJRF9MQU5HfV9MQU5HX0lEIikKKyAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTm90IGZvdW5kIGV4cGVjdGVkICdCQURGTEFHXyR7VkFMSURfTEFOR31fTEFOR19JRCcuXG4iKQorZW5kaWYoKQoraWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFOR19JRCIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyR7SU5WQUxJRF9MQU5HfV9MQU5HX0lEICcuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfKCR7VkFMSURfTEFOR318JHtJTlZBTElEX0xBTkd9KV9CQURJRCIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXygke1ZBTElEX0xBTkd9fCR7SU5WQUxJRF9MQU5HfSlfQkFESUQnLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hZGRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwNzA1MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FkZF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC5jbWFrZQpAQCAtMCwwICsxLDE5IEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworaWYoQk9STEFORCkKKyAgc2V0KHByZSAtKQorZW5kaWYoKQorCithZGRfbGlua19vcHRpb25zICgkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ19MQU5HX0lEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DWFhfTEFOR19JRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46JHtwcmV9QkFERkxBR19DX0JBRElEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjoke3ByZX1CQURGTEFHX0NYWF9CQURJRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2MgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19zaGFyZWRfY3h4IFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jeHgpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX21vZCBNT0RVTEUgTGlua09wdGlvbnNMaWIuYykKKworYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfZXhlIExpbmtPcHRpb25zRXhlLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGRkZWQyNDguLjRiZTFiOWQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0yLDYgKzIsOCBAQAogCiBydW5fY21ha2Uobm8tdGFyZ2V0cykKIHJ1bl9jbWFrZShtdWx0aXBsZS10YXJnZXRzKQorcnVuX2NtYWtlKGR1cGxpY2F0ZS10YXJnZXQtQ01QMDEwNy1PTEQpCitydW5fY21ha2UoZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVykKIHJ1bl9jbWFrZShleGNsdWRlLWZyb20tYWxsKQogcnVuX2NtYWtlKGltcG9ydGVkKQogcnVuX2NtYWtlKGludmFsaWQtbmFtZSkKQEAgLTEwLDYgKzEyLDcgQEAKIHJ1bl9jbWFrZShpbXBvcnRlZC10YXJnZXQpCiBydW5fY21ha2UoYWxpYXMtdGFyZ2V0KQogcnVuX2NtYWtlKHNldF9wcm9wZXJ0eSkKK3J1bl9jbWFrZShnZXRfcHJvcGVydHkpCiBydW5fY21ha2Uoc2V0X3RhcmdldF9wcm9wZXJ0aWVzKQogcnVuX2NtYWtlKHRhcmdldF9saW5rX2xpYnJhcmllcykKIHJ1bl9jbWFrZSh0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2R1cGxpY2F0ZS10YXJnZXQtQ01QMDEwNy1ORVctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiYTVhNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMzAgQEAKK0NNYWtlIEVycm9yIGF0IGR1cGxpY2F0ZS10YXJnZXQuY21ha2U6WzAtOV0rIFwoYWRkX2xpYnJhcnlcKToKKyAgYWRkX2xpYnJhcnkgY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgImFsaWFzMSIgYmVjYXVzZSBhbm90aGVyIHRhcmdldCB3aXRoCisgIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBkdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLmNtYWtlOlswLTldKyBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKworCitDTWFrZSBFcnJvciBhdCBkdXBsaWNhdGUtdGFyZ2V0LmNtYWtlOlswLTldKyBcKGFkZF9saWJyYXJ5XCk6CisgIGFkZF9saWJyYXJ5IGNhbm5vdCBjcmVhdGUgQUxJQVMgdGFyZ2V0ICJhbGlhczEiIGJlY2F1c2UgYW5vdGhlciB0YXJnZXQgd2l0aAorICB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy5jbWFrZTpbMC05XSsgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisKKworQ01ha2UgRXJyb3IgYXQgZHVwbGljYXRlLXRhcmdldC5jbWFrZTpbMC05XSsgXChhZGRfbGlicmFyeVwpOgorICBhZGRfbGlicmFyeSBjYW5ub3QgY3JlYXRlIEFMSUFTIHRhcmdldCAiYWxpYXMyIiBiZWNhdXNlIGFub3RoZXIgdGFyZ2V0IHdpdGgKKyAgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGR1cGxpY2F0ZS10YXJnZXQtQ01QMDEwNy1ORVcuY21ha2U6WzAtOV0rIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQorCisKK0NNYWtlIEVycm9yIGF0IGR1cGxpY2F0ZS10YXJnZXQuY21ha2U6WzAtOV0rIFwoYWRkX2xpYnJhcnlcKToKKyAgYWRkX2xpYnJhcnkgY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgImFsaWFzMiIgYmVjYXVzZSBhbm90aGVyIHRhcmdldCB3aXRoCisgIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBkdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLmNtYWtlOlswLTldKyBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU5FVy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDk4NTdmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctTkVXLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3kgKFNFVCBDTVAwMTA3IE5FVykKKworaW5jbHVkZSAoZHVwbGljYXRlLXRhcmdldC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU9MRC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC1DTVAwMTA3LU9MRC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWJjOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LUNNUDAxMDctT0xELmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3kgKFNFVCBDTVAwMTA3IE9MRCkKKworaW5jbHVkZSAoZHVwbGljYXRlLXRhcmdldC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZHVwbGljYXRlLXRhcmdldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODE5MjFiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9kdXBsaWNhdGUtdGFyZ2V0LmNtYWtlCkBAIC0wLDAgKzEsMjAgQEAKKworYWRkX2xpYnJhcnkgKGZvbzEgSU5URVJGQUNFKQorYWRkX2xpYnJhcnkgKGZvbzIgSU5URVJGQUNFKQorCithZGRfbGlicmFyeSAoaW1wMSBTSEFSRUQgSU1QT1JURUQgR0xPQkFMKQorYWRkX2xpYnJhcnkgKGltcDIgU0hBUkVEIElNUE9SVEVEIEdMT0JBTCkKKworCithZGRfbGlicmFyeSAoYWxpYXMxIEFMSUFTIGZvbzEpCisjIHNhbWUgYWxpYXMgdG8gZGlmZmVyZW50IGxpYnJhcnkKK2FkZF9saWJyYXJ5IChhbGlhczEgQUxJQVMgZm9vMikKKyMgc2FtZSBhbGlhcyB0byBkaWZmZXJlbnQgaW1wb3J0ZWQgbGlicmFyeQorYWRkX2xpYnJhcnkgKGFsaWFzMSBBTElBUyBpbXAxKQorCisKK2FkZF9saWJyYXJ5IChhbGlhczIgQUxJQVMgaW1wMSkKKyMgc2FtZSBhbGlhcyB0byBkaWZmZXJlbnQgaW1wb3J0ZWQgbGlicmFyeQorYWRkX2xpYnJhcnkgKGFsaWFzMiBBTElBUyBpbXAyKQorIyBzYW1lIGFsaWFzIHRvIGRpZmZlcmVudCBsaWJyYXJ5CithZGRfbGlicmFyeSAoYWxpYXMyIEFMSUFTIGZvbzEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2dldF9wcm9wZXJ0eS1zdWJkaXIvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2dldF9wcm9wZXJ0eS1zdWJkaXIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExNGI3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvZ2V0X3Byb3BlcnR5LXN1YmRpci9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE1IEBACisKKworYWRkX2xpYnJhcnkoYWxpYXM6OmltcG9ydC1sb2NhbC1zdWJkaXIgQUxJQVMgaW1wb3J0LWxvY2FsKQorCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1sb2NhbC1zdWJkaXIgQUxJQVNFRF9UQVJHRVQgImltcG9ydC1sb2NhbCIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1sb2NhbC1zdWJkaXIgSU1QT1JURUQgIlRSVUUiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtbG9jYWwtc3ViZGlyIEFMSUFTX0dMT0JBTCAiRkFMU0UiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtbG9jYWwtc3ViZGlyIElNUE9SVF9MT0NBTF9QUk9QRVJUWSAiSU1QT1JUX0xPQ0FMIikKKworCisjIG5vbi1nbG9iYWwgYWxpYXMgZGVmaW5lZCBpbiBwYXJlbnQgZGlyZWN0b3J5IG11c3QgYmUgdmlzaWJsZSBpbiBzdWItZGlyZWN0b3J5CitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1sb2NhbCBBTElBU0VEX1RBUkdFVCAiaW1wb3J0LWxvY2FsIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxvY2FsIElNUE9SVEVEICJUUlVFIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxvY2FsIEFMSUFTX0dMT0JBTCAiRkFMU0UiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtbG9jYWwgSU1QT1JUX0xPQ0FMX1BST1BFUlRZICJJTVBPUlRfTE9DQUwiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9nZXRfcHJvcGVydHkuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2dldF9wcm9wZXJ0eS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTAxYzZmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9nZXRfcHJvcGVydHkuY21ha2UKQEAgLTAsMCArMSw1OSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitmdW5jdGlvbiAoY2hlY2tfcHJvcGVydHkgYWxpYXMgcHJvcGVydHkgdmFsdWUpCisgIGdldF9wcm9wZXJ0eSAoZGF0YSBUQVJHRVQgJHthbGlhc30gUFJPUEVSVFkgJHtwcm9wZXJ0eX0pCisgIGlmIChOT1QgIiR7dmFsdWV9IiBTVFJFUVVBTCAiJHtkYXRhfSIpCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZ2V0X3Byb3BlcnR5KCk6IFRhcmdldCBwcm9wZXJ0eSAnJHtwcm9wZXJ0eX0nIGZyb20gQUxJQVMgJyR7YWxpYXN9JyBoYXMgd3JvbmcgdmFsdWU6ICcke2RhdGF9JyBpbnN0ZWFkIG9mICcke3ZhbHVlfScuIikKKyAgZW5kaWYoKQorICBnZXRfdGFyZ2V0X3Byb3BlcnR5IChkYXRhICR7YWxpYXN9ICR7cHJvcGVydHl9KQorICBpZiAoTk9UICIke3ZhbHVlfSIgU1RSRVFVQUwgIiR7ZGF0YX0iKQorICAgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImdldF90YXJnZXRfcHJvcGVydHkoKTogVGFyZ2V0IHByb3BlcnR5ICcke3Byb3BlcnR5fScgZnJvbSBBTElBUyAnJHthbGlhc30nIGhhcyB3cm9uZyB2YWx1ZTogJyR7ZGF0YX0nIGluc3RlYWQgb2YgJyR7dmFsdWV9Jy4iKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKKworYWRkX2xpYnJhcnkobGliIGVtcHR5LmNwcCkKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIGxpYiBQUk9QRVJUWSBMSUJfUFJPUEVSVFkgIkxJQiIpCisKK2FkZF9saWJyYXJ5KGFsaWFzOjpsaWIgQUxJQVMgbGliKQorCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmxpYiBBTElBU0VEX1RBUkdFVCAibGliIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6bGliIElNUE9SVEVEICJGQUxTRSIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmxpYiBBTElBU19HTE9CQUwgIlRSVUUiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjpsaWIgTElCX1BST1BFUlRZICJMSUIiKQorCisKK2FkZF9saWJyYXJ5KGltcG9ydC1nbG9iYWwgU0hBUkVEIElNUE9SVEVEIEdMT0JBTCkKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIGltcG9ydC1nbG9iYWwgUFJPUEVSVFkgSU1QT1JUX0dMT0JBTF9QUk9QRVJUWSAiSU1QT1JUX0dMT0JBTCIpCisKK2FkZF9saWJyYXJ5KGFsaWFzOjppbXBvcnQtZ2xvYmFsIEFMSUFTIGltcG9ydC1nbG9iYWwpCisKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWdsb2JhbCBBTElBU0VEX1RBUkdFVCAiaW1wb3J0LWdsb2JhbCIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1nbG9iYWwgSU1QT1JURUQgIlRSVUUiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtZ2xvYmFsIEFMSUFTX0dMT0JBTCAiVFJVRSIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1nbG9iYWwgSU1QT1JUX0dMT0JBTF9QUk9QRVJUWSAiSU1QT1JUX0dMT0JBTCIpCisKKworYWRkX2xpYnJhcnkoaW1wb3J0LWxvY2FsIFNIQVJFRCBJTVBPUlRFRCkKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIGltcG9ydC1sb2NhbCBQUk9QRVJUWSBJTVBPUlRfTE9DQUxfUFJPUEVSVFkgIklNUE9SVF9MT0NBTCIpCisKK2FkZF9saWJyYXJ5KGFsaWFzOjppbXBvcnQtbG9jYWwgQUxJQVMgaW1wb3J0LWxvY2FsKQorCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1sb2NhbCBBTElBU0VEX1RBUkdFVCAiaW1wb3J0LWxvY2FsIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxvY2FsIElNUE9SVEVEICJUUlVFIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxvY2FsIEFMSUFTX0dMT0JBTCAiRkFMU0UiKQorY2hlY2tfcHJvcGVydHkgKGFsaWFzOjppbXBvcnQtbG9jYWwgSU1QT1JUX0xPQ0FMX1BST1BFUlRZICJJTVBPUlRfTE9DQUwiKQorCisKKyMjIHVwZ3JhZGUgaW1wb3J0ZWQgdGFyZ2V0IGZyb20gbG9jYWwgdG8gZ2xvYmFsLCBhbGlhcyBzdGF5IGxvY2FsCithZGRfbGlicmFyeShpbXBvcnQtbGliIFNIQVJFRCBJTVBPUlRFRCkKK2FkZF9saWJyYXJ5KGFsaWFzOjppbXBvcnQtbGliIEFMSUFTIGltcG9ydC1saWIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1saWIgSU1QT1JURURfR0xPQkFMICJGQUxTRSIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1saWIgQUxJQVNfR0xPQkFMICJGQUxTRSIpCitzZXRfcHJvcGVydHkgKFRBUkdFVCBpbXBvcnQtbGliIFBST1BFUlRZIElNUE9SVEVEX0dMT0JBTCAiVFJVRSIpCitjaGVja19wcm9wZXJ0eSAoYWxpYXM6OmltcG9ydC1saWIgSU1QT1JURURfR0xPQkFMICJUUlVFIikKK2NoZWNrX3Byb3BlcnR5IChhbGlhczo6aW1wb3J0LWxpYiBBTElBU19HTE9CQUwgIkZBTFNFIikKKworCithZGRfc3ViZGlyZWN0b3J5IChnZXRfcHJvcGVydHktc3ViZGlyKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN0ZGVyci50eHQKaW5kZXggNDY1ZGUwMy4uODI1OWM4MCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC1zdGRlcnIudHh0CkBAIC0xLDE1ICsxLDIgQEAKLV5DTWFrZSBFcnJvciBhdCBpbXBvcnRlZC10YXJnZXQuY21ha2U6WzAtOV0rIFwoYWRkX2V4ZWN1dGFibGVcKToKLSAgYWRkX2V4ZWN1dGFibGUgY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgXCJhbGlhcy10ZXN0LWV4ZVwiIGJlY2F1c2UgdGFyZ2V0Ci0gIFwidGVzdC1leGVcIiBpcyBpbXBvcnRlZCBidXQgbm90IGdsb2JhbGx5IHZpc2libGUuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKLSsKLSdhbGlhcy10ZXN0LWV4ZScgZG9lcyBub3QgZXhpc3QhWz9dCi0qCi1DTWFrZSBFcnJvciBhdCBpbXBvcnRlZC10YXJnZXQuY21ha2U6WzAtOV0rIFwoYWRkX2xpYnJhcnlcKToKLSAgYWRkX2xpYnJhcnkgY2Fubm90IGNyZWF0ZSBBTElBUyB0YXJnZXQgImFsaWFzLXRlc3QtbGliIiBiZWNhdXNlIHRhcmdldAotICAidGVzdC1saWIiIGlzIGltcG9ydGVkIGJ1dCBub3QgZ2xvYmFsbHkgdmlzaWJsZS4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQotKwotJ2FsaWFzLXRlc3QtbGliJyBkb2VzIG5vdCBleGlzdCFbP10kCiteJ2FsaWFzLXRlc3QtZXhlJyBpcyBhbiBhbGlhcyBmb3IgJ3Rlc3QtZXhlJyBhbmQgaXRzIG5hbWUtcHJvcGVydHkgY29udGFpbnMgJ3Rlc3QtZXhlJy4KKydhbGlhcy10ZXN0LWxpYicgaXMgYW4gYWxpYXMgZm9yICd0ZXN0LWxpYicgYW5kIGl0cyBuYW1lLXByb3BlcnR5IGNvbnRhaW5zICd0ZXN0LWxpYicuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtc3ViZGlyMS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjEvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjMDViMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjEvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw2IEBACisKK2FkZF9leGVjdXRhYmxlKGFsaWFzLXRlc3QtZXhlLXN1YmRpcjEgQUxJQVMgdGVzdC1leGUpCithZGRfZXhlY3V0YWJsZShhbGlhcy10ZXN0LWV4ZS1sb2NhbCBBTElBUyB0ZXN0LWV4ZSkKKworYWRkX2xpYnJhcnkoYWxpYXMtdGVzdC1saWItc3ViZGlyMSBBTElBUyB0ZXN0LWxpYikKK2FkZF9saWJyYXJ5KGFsaWFzLXRlc3QtbGliLWxvY2FsIEFMSUFTIHRlc3QtbGliKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtc3ViZGlyMi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjODViYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyMCBAQAorCithZGRfZXhlY3V0YWJsZShhbGlhcy10ZXN0LWV4ZS1zdWJkaXIyIEFMSUFTIHRlc3QtZXhlKQorYWRkX2V4ZWN1dGFibGUoYWxpYXMtdGVzdC1leGUtbG9jYWwgQUxJQVMgdGVzdC1leGUpCisKK2FkZF9saWJyYXJ5KGFsaWFzLXRlc3QtbGliLXN1YmRpcjIgQUxJQVMgdGVzdC1saWIpCithZGRfbGlicmFyeShhbGlhcy10ZXN0LWxpYi1sb2NhbCBBTElBUyB0ZXN0LWxpYikKKworCitmb3JlYWNoIChpdGVtIElOIElURU1TIGV4ZSBsaWIpCisgIGdldF9wcm9wZXJ0eSAoYWxpYXNlZFRhcmdldCBUQVJHRVQgYWxpYXMtdGVzdC0ke2l0ZW19LWxvY2FsIFBST1BFUlRZIEFMSUFTRURfVEFSR0VUKQorICBpZiAoTk9UIGFsaWFzZWRUYXJnZXQgU1RSRVFVQUwgInRlc3QtJHtpdGVtfSIpCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiV3JvbmcgYWxpYXNlZCB0YXJnZXQgJyR7YWxpYXNlZFRhcmdldH0nIGZvciBBTElBUyAnYWxpYXMtdGVzdC0ke2l0ZW19LWxvY2FsJy4iKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaCAoaXRlbSBJTiBJVEVNUyBleGUgbGliKQorICBpZiAoVEFSR0VUIGFsaWFzLXRlc3QtJHtpdGVtfS1zdWJkaXIxKQorICAgIG1lc3NhZ2UgKFNFTkRfRVJST1IgIkFMSUFTICdhbGlhcy10ZXN0LSR7aXRlbX0tc3ViZGlyMScgdW5leHBlY3RlZGx5IGRlZmluZWQuIikKKyAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ltcG9ydGVkLXRhcmdldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCmluZGV4IGJiNjgyZmUuLmZhNmY4ZDMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LmNtYWtlCkBAIC00NCwzICs0NCwxNCBAQAogZWxzZSgpCiAgICAgbWVzc2FnZSgiJ2FsaWFzLXRlc3QtbGliJyBkb2VzIG5vdCBleGlzdCE/IikKIGVuZGlmKCkKKworYWRkX3N1YmRpcmVjdG9yeSAoaW1wb3J0ZWQtdGFyZ2V0LXN1YmRpcjEpCithZGRfc3ViZGlyZWN0b3J5IChpbXBvcnRlZC10YXJnZXQtc3ViZGlyMikKKworZm9yZWFjaCAoYWxpYXMgSU4gSVRFTVMgZXhlLWxvY2FsIGxpYi1sb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgZXhlLXN1YmRpcjEgbGliLXN1YmRpcjEKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZS1zdWJkaXIyIGxpYi1zdWJkaXIyKQorICBpZiAoVEFSR0VUIGFsaWFzLXRlc3QtJHthbGlhc30pCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiQUxJQVMgJ2FsaWFzLXRlc3QtJHthbGlhc30nIHVuZXhwZWN0ZWRseSBkZWZpbmVkLiIpCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbnZhbGlkLW5hbWUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ludmFsaWQtbmFtZS5jbWFrZQppbmRleCBiYmQzOWUzLi4wMTk4M2U1IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ludmFsaWQtbmFtZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9hbGlhc190YXJnZXRzL2ludmFsaWQtbmFtZS5jbWFrZQpAQCAtMSw0ICsxLDQgQEAKLQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIGVuYWJsZV9sYW5ndWFnZShDWFgpCiAKIGFkZF9saWJyYXJ5KGZvbyBlbXB0eS5jcHApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9idWlsZF9jb21tYW5kL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvYnVpbGRfY29tbWFuZC9DTWFrZUxpc3RzLnR4dAppbmRleCA3M2U2YTc4Li5mMWE4M2U4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9idWlsZF9jb21tYW5kL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2J1aWxkX2NvbW1hbmQvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogaWYoTk9UIE5vUHJvamVjdCkKICAgcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzJmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDMgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DYWxsSW52YWxpZENvbW1hbmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DYWxsSW52YWxpZENvbW1hbmQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlZTZmMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL0NhbGxJbnZhbGlkQ29tbWFuZC5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworY21ha2VfbGFuZ3VhZ2UoQ0FMTCAke0NPTU1BTkR9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tJbmNsdWRlR3VhcmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DaGVja0luY2x1ZGVHdWFyZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDJjMWU0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tJbmNsdWRlR3VhcmQuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2NtYWtlX2xhbmd1YWdlIChDQUxMICJpbmNsdWRlX2d1YXJkIikKKworc2V0IChHVUFSRF9WQUxVRSAxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tQcm9qZWN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tQcm9qZWN0L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMjc2OTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DaGVja1Byb2plY3QvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxOSBAQAorCitjbWFrZV9sYW5ndWFnZSAoQ0FMTCBjbWFrZV9taW5pbXVtX3JlcXVpcmVkIFZFUlNJT04gMy4xNy4uLjMuMTgpCisKK2NtYWtlX2xhbmd1YWdlIChDQUxMIHByb2plY3QgQ2hlY2tQcm9qZWN0IFZFUlNJT04gMS4yLjMgTEFOR1VBR0VTIEMpCisKK2lmIChOT1QgUFJPSkVDVF9OQU1FIFNUUkVRVUFMICJDaGVja1Byb2plY3QiKQorICBtZXNzYWdlIChTRU5EX0VSUk9SICJlcnJvciBvbiBwcm9qZWN0KCkgdXNhZ2UuIikKK2VuZGlmKCkKKworaWYgKE5PVCBDaGVja1Byb2plY3RfVkVSU0lPTiBWRVJTSU9OX0VRVUFMICIxLjIuMyIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIHByb2plY3QoKSB1c2FnZS4iKQorZW5kaWYoKQorCitnZXRfcHJvcGVydHkgKGxhbmd1YWdlcyBHTE9CQUwgUFJPUEVSVFkgRU5BQkxFRF9MQU5HVUFHRVMpCitpZiAoTk9UICJDIiBJTl9MSVNUIGxhbmd1YWdlcykKKyAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZXJyb3Igb24gcHJvamVjdCgpIHVzYWdlLiIpCitlbmRpZigpCisKK2FkZF9saWJyYXJ5IChsaWIgU0hBUkVEIGxpYi5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tQcm9qZWN0L2xpYi5jIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvQ2hlY2tQcm9qZWN0L2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9DaGVja1Byb2plY3QvbGliLmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmI5M2M4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMjUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShub19wYXJhbWV0ZXJzKQorcnVuX2NtYWtlKHVua25vd25fbWV0YV9vcGVyYXRpb24pCitydW5fY21ha2UoY2FsbF9pbnZhbGlkX2NvbW1hbmQpCitydW5fY21ha2UoY2FsbF92YWxpZF9jb21tYW5kKQorcnVuX2NtYWtlKGNhbGxfZG91YmxlX2V2YWx1YXRpb24pCitydW5fY21ha2UoY2FsbF9leHBhbmRlZF9jb21tYW5kKQorcnVuX2NtYWtlKGNhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzKQorcnVuX2NtYWtlKGNhbGxfZXhwYW5kZWRfY29tbWFuZF93aXRoX2V4cGxpY2l0X2FyZ3VtZW50KQorcnVuX2NtYWtlKGNhbGxfZXhwYW5kX2NvbW1hbmRfbmFtZSkKK3J1bl9jbWFrZShjYWxsX2V4cGFuZF9mdW5jdGlvbl9uYW1lKQorcnVuX2NtYWtlKGNhbGxfbWVzc2FnZSkKK3J1bl9jbWFrZShjYWxsX21lc3NhZ2VfZmF0YWxfZXJyb3IpCitydW5fY21ha2UoY2FsbF9ub19wYXJhbWV0ZXJzKQorcnVuX2NtYWtlKGNhbGxfcHJlc2VydmVfYXJndW1lbnRzKQorcnVuX2NtYWtlKGNhbGxfdW5rbm93bl9mdW5jdGlvbikKK3J1bl9jbWFrZShldmFsX2V4cGFuZF9jb21tYW5kX25hbWUpCitydW5fY21ha2UoZXZhbF9leHBhbmRlZF9jb21tYW5kX2FuZF9hcmd1bWVudHMpCitydW5fY21ha2UoZXZhbF9leHRyYV9wYXJhbWV0ZXJzX2JldHdlZW5fZXZhbF9hbmRfY29kZSkKK3J1bl9jbWFrZShldmFsX21lc3NhZ2UpCitydW5fY21ha2UoZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yKQorcnVuX2NtYWtlKGV2YWxfbm9fY29kZSkKK3J1bl9jbWFrZShldmFsX25vX3BhcmFtZXRlcnMpCitydW5fY21ha2UoZXZhbF92YXJpYWJsZV9vdXRzaWRlX21lc3NhZ2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2RvdWJsZV9ldmFsdWF0aW9uLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2RvdWJsZV9ldmFsdWF0aW9uLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhNzBiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZG91YmxlX2V2YWx1YXRpb24tc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACit2YXI9J1wke2Zvb30nCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2RvdWJsZV9ldmFsdWF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9kb3VibGVfZXZhbHVhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjhmYzkxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9kb3VibGVfZXZhbHVhdGlvbi5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldCh2YXIgW1ske2Zvb31dXSkKK2NtYWtlX2xhbmd1YWdlKENBTEwgY21ha2VfbGFuZ3VhZ2UgQ0FMTCBtZXNzYWdlICJ2YXI9JyR7dmFyfSciKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRfY29tbWFuZF9uYW1lLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9jb21tYW5kX25hbWUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQwNjYxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRfY29tbWFuZF9uYW1lLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorT0shCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9jb21tYW5kX25hbWUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9jb21tYW5kX25hbWUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzYmIxZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kX2NvbW1hbmRfbmFtZS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldCAobXlfY2FsbCAiQ0FMTCIpCitjbWFrZV9sYW5ndWFnZSAoJHtteV9jYWxsfSBtZXNzYWdlICJPSyEiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kX2Z1bmN0aW9uX25hbWUtc3RkZXJyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9mdW5jdGlvbl9uYW1lLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kX2Z1bmN0aW9uX25hbWUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9mdW5jdGlvbl9uYW1lLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NWE3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZF9mdW5jdGlvbl9uYW1lLmNtYWtlCkBAIC0wLDAgKzEsMTEgQEAKK2Z1bmN0aW9uKHNvbWVfZnVuY3Rpb25fMSkKKyAgbWVzc2FnZSgxKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihzb21lX2Z1bmN0aW9uXzIpCisgIG1lc3NhZ2UoMikKK2VuZGZ1bmN0aW9uKCkKKworc2V0KGZ1bmN0aW9uX3ZlcnNpb24gMSkKKworY21ha2VfbGFuZ3VhZ2UoQ0FMTCBzb21lX2Z1bmN0aW9uXyR7ZnVuY3Rpb25fdmVyc2lvbn0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDA2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmQtc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitPSyEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzZlNjEyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRlZF9jb21tYW5kLmNtYWtlCkBAIC0wLDAgKzEsNiBAQAorZnVuY3Rpb24gKGl0c29rKQorICBtZXNzYWdlKE9LISkKK2VuZGZ1bmN0aW9uKCkKKworc2V0IChjbWQgQ0FMTCBpdHNvaykKK2NtYWtlX2xhbmd1YWdlICgke2NtZH0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS90YXJnZXRfY29tbWFuZHMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS90YXJnZXRfY29tbWFuZHMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2U5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorQ01ha2UgRXJyb3IgYXQgY2FsbF9leHBhbmRlZF9jb21tYW5kX2FuZF9hcmd1bWVudHMuY21ha2U6MiBcKGNtYWtlX2xhbmd1YWdlXCk6CisgIGNtYWtlX2xhbmd1YWdlIGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZTZiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldChjYWxsX21lc3NhZ2UgQ0FMTCBtZXNzYWdlIGEgYikKK2NtYWtlX2xhbmd1YWdlKCR7Y2FsbF9tZXNzYWdlfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfZXhwYW5kZWRfY29tbWFuZF93aXRoX2V4cGxpY2l0X2FyZ3VtZW50LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfd2l0aF9leHBsaWNpdF9hcmd1bWVudC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDA2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfd2l0aF9leHBsaWNpdF9hcmd1bWVudC1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK09LIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRlZF9jb21tYW5kX3dpdGhfZXhwbGljaXRfYXJndW1lbnQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2V4cGFuZGVkX2NvbW1hbmRfd2l0aF9leHBsaWNpdF9hcmd1bWVudC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTYzNDAwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9leHBhbmRlZF9jb21tYW5kX3dpdGhfZXhwbGljaXRfYXJndW1lbnQuY21ha2UKQEAgLTAsMCArMSwyIEBACitzZXQgKGNtZCBDQUxMIG1lc3NhZ2UpCitjbWFrZV9sYW5ndWFnZSAoJHtjbWR9ICJPSyEiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9pbnZhbGlkX2NvbW1hbmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX2ludmFsaWRfY29tbWFuZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODVhYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9pbnZhbGlkX2NvbW1hbmQuY21ha2UKQEAgLTAsMCArMSwxNCBAQAorCitmb3JlYWNoIChjb21tYW5kIElOIElURU1TICJmdW5jdGlvbiIgIkVOREZVTkNUSU9OIgorICAgICAgICAgICAgICAgICAgICAgICAgICAibWFjcm8iICJlbmRNQUNSTyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImlmIiAiZWxzZWlmIiAiZWxzZSIgImVuZGlmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpbGUiICJlbmR3aGlsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcmVhY2giICJlbmRmb3JlYWNoIikKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIC1EQ09NTUFORD0ke2NvbW1hbmR9CisgICAgLVAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DYWxsSW52YWxpZENvbW1hbmQuY21ha2UiCisgICAgT1VUUFVUX1FVSUVUIEVSUk9SX1FVSUVUCisgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdCkKKyAgaWYgKE5PVCByZXN1bHQpCisgICAgbWVzc2FnZSAoU0VORF9FUlJPUiAiY21ha2VfbGFuZ3VhZ2UoQ0FMTCAke2NvbW1hbmR9KSB1bmV4cGVjdGVkbHkgc3VjY2Vzc2Z1bC4iKQorICBlbmRpZigpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbWVzc2FnZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjODY5NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbWVzc2FnZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEgQEAKK1dPUktTIQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYWVmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX21lc3NhZ2UuY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfbGFuZ3VhZ2UoQ0FMTCBtZXNzYWdlIFdPUktTISkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX21lc3NhZ2VfZmF0YWxfZXJyb3ItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX21lc3NhZ2VfZmF0YWxfZXJyb3ItcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX21lc3NhZ2VfZmF0YWxfZXJyb3Itc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2ViM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACitDTWFrZSBFcnJvciBhdCBjYWxsX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2U6MSBcKG1lc3NhZ2VcKToKKyAgZXJyb3IhCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjYWxsX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2U6MSBcKGNtYWtlX2xhbmd1YWdlXCkKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNWI0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfbGFuZ3VhZ2UoQ0FMTCBtZXNzYWdlIEZBVEFMX0VSUk9SIGVycm9yISkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3RhcmdldF9jb21tYW5kcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9ub19wYXJhbWV0ZXJzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS90YXJnZXRfY29tbWFuZHMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbm9fcGFyYW1ldGVycy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbm9fcGFyYW1ldGVycy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMmMwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IGNhbGxfbm9fcGFyYW1ldGVycy5jbWFrZToxIFwoY21ha2VfbGFuZ3VhZ2VcKToKKyAgY21ha2VfbGFuZ3VhZ2UgY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbm9fcGFyYW1ldGVycy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfbm9fcGFyYW1ldGVycy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzUzZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9ub19wYXJhbWV0ZXJzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2xhbmd1YWdlKENBTEwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3ByZXNlcnZlX2FyZ3VtZW50cy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9wcmVzZXJ2ZV9hcmd1bWVudHMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWM1NDgzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9wcmVzZXJ2ZV9hcmd1bWVudHMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK2Zvb1woLi4uXCkKK1xbYTtiXF0KK1xbYztkXF0KK2NtYWtlX2xhbmd1YWdlXChDQUxMIGZvbyAuLi5cKQorXFthO2JcXQorXFtjO2RcXQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9wcmVzZXJ2ZV9hcmd1bWVudHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3ByZXNlcnZlX2FyZ3VtZW50cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVmMGZkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF9wcmVzZXJ2ZV9hcmd1bWVudHMuY21ha2UKQEAgLTAsMCArMSwxMiBAQAorZnVuY3Rpb24oZm9vIGFyZzEgYXJnMikKKyAgbWF0aChFWFBSIGxhc3QgIiR7QVJHQ30gLSAxIikKKyAgZm9yZWFjaChpIFJBTkdFIDAgJHtsYXN0fSkKKyAgICBtZXNzYWdlKCJbJHtBUkdWJHtpfX1dIikKKyAgZW5kZm9yZWFjaCgpCitlbmRmdW5jdGlvbigpCisKK21lc3NhZ2UoImZvbyguLi4pIikKK2ZvbygiYTtiIiAiYztkIikKKworbWVzc2FnZSgiY21ha2VfbGFuZ3VhZ2UoQ0FMTCBmb28gLi4uKSIpCitjbWFrZV9sYW5ndWFnZShDQUxMIGZvbyAiYTtiIiAiYztkIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3Vua25vd25fZnVuY3Rpb24tcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3Vua25vd25fZnVuY3Rpb24tcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF91bmtub3duX2Z1bmN0aW9uLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9jYWxsX3Vua25vd25fZnVuY3Rpb24tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDllNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF91bmtub3duX2Z1bmN0aW9uLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitDTWFrZSBFcnJvciBhdCBjYWxsX3Vua25vd25fZnVuY3Rpb24uY21ha2U6MSBcKHVua25vd25cKToKKyAgVW5rbm93biBDTWFrZSBjb21tYW5kICJ1bmtub3duIi4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfdW5rbm93bl9mdW5jdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfdW5rbm93bl9mdW5jdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmQ2YmFmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF91bmtub3duX2Z1bmN0aW9uLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2xhbmd1YWdlKENBTEwgdW5rbm93bikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfdmFsaWRfY29tbWFuZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2NhbGxfdmFsaWRfY29tbWFuZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTk2NWRjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvY2FsbF92YWxpZF9jb21tYW5kLmNtYWtlCkBAIC0wLDAgKzEsOTkgQEAKKworIyMgY2hlY2sgY29udGludWUoKSB1c2FnZQorc2V0IChWQUxVRSAwKQorZm9yZWFjaCAoaSBSQU5HRSAxIDQpCisgIHNldCAoVkFMVUUgIiR7aX0iKQorICBjbWFrZV9sYW5ndWFnZSAoQ0FMTCAiY29udGludWUiKQorICBzZXQgKFZBTFVFICIwIikKK2VuZGZvcmVhY2goKQoraWYgKE5PVCBWQUxVRSBFUVVBTCAiNCIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIGNvbnRpbnVlKCkgdXNhZ2UuIikKK2VuZGlmKCkKKworCisjIyBjaGVjayBicmVhaygpIHVzYWdlCitzZXQgKFZBTFVFIDApCitmb3JlYWNoIChpIFJBTkdFIDEgNCkKKyAgc2V0IChWQUxVRSAiJHtpfSIpCisgIGNtYWtlX2xhbmd1YWdlIChDQUxMICJicmVhayIpCisgIHNldCAoVkFMVUUgMCkKK2VuZGZvcmVhY2goKQoraWYgKE5PVCBWQUxVRSBFUVVBTCAiMSIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIGJyZWFrKCkgdXNhZ2UuIikKK2VuZGlmKCkKKworCisjIyBjaGVjayByZXR1cm4oKSB1c2FnZSBpbiBtYWNybworbWFjcm8gKGNhbGxfcmV0dXJuX2luX21hY3JvKQorICBjbWFrZV9sYW5ndWFnZSAoQ0FMTCAicmV0dXJuIikKKyAgc2V0IChWQUxVRSAxKQorZW5kbWFjcm8oKQorZnVuY3Rpb24gKHdyYXBwZXIpCisgIGNhbGxfcmV0dXJuX2luX21hY3JvKCkKKyAgc2V0IChWQUxVRSAxIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworc2V0IChWQUxVRSAwKQord3JhcHBlcigpCitpZiAoTk9UIFZBTFVFIEVRVUFMICIwIikKKyAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZXJyb3Igb24gcmV0dXJuKCkgdXNhZ2UgaW4gbWFjcm8uIikKK2VuZGlmKCkKKworc2V0IChWQUxVRSAwKQorY21ha2VfbGFuZ3VhZ2UgKENBTEwgIndyYXBwZXIiKQoraWYgKE5PVCBWQUxVRSBFUVVBTCAiMCIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIHJldHVybigpIHVzYWdlIGluIG1hY3JvLiIpCitlbmRpZigpCisKK2Z1bmN0aW9uICh3cmFwcGVyMikKKyAgY21ha2VfbGFuZ3VhZ2UgKENBTEwgImNhbGxfcmV0dXJuX2luX21hY3JvIikKKyAgc2V0IChWQUxVRSAxIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworc2V0IChWQUxVRSAwKQord3JhcHBlcjIoKQoraWYgKE5PVCBWQUxVRSBFUVVBTCAiMCIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIHJldHVybigpIHVzYWdlIGluIG1hY3JvLiIpCitlbmRpZigpCisKK3NldCAoVkFMVUUgMCkKK2NtYWtlX2xhbmd1YWdlIChDQUxMICJ3cmFwcGVyMiIpCitpZiAoTk9UIFZBTFVFIEVRVUFMICIwIikKKyAgbWVzc2FnZSAoU0VORF9FUlJPUiAiZXJyb3Igb24gcmV0dXJuKCkgdXNhZ2UgaW4gbWFjcm8uIikKK2VuZGlmKCkKKworIyMgY2hlY2sgcmV0dXJuKCkgdXNhZ2UgaW4gZnVuY3Rpb24KK2Z1bmN0aW9uIChjYWxsX3JldHVybl9pbl9mdW5jdGlvbikKKyAgY21ha2VfbGFuZ3VhZ2UgKENBTEwgInJldHVybiIpCisgIHNldCAoVkFMVUUgMSBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK3NldCAoVkFMVUUgMCkKK2NhbGxfcmV0dXJuX2luX2Z1bmN0aW9uKCkKK2lmIChOT1QgVkFMVUUgRVFVQUwgIjAiKQorICBtZXNzYWdlIChTRU5EX0VSUk9SICJlcnJvciBvbiByZXR1cm4oKSB1c2FnZSBpbiBmdW5jdGlvbi4iKQorZW5kaWYoKQorCitzZXQgKFZBTFVFIDApCitjbWFrZV9sYW5ndWFnZSAoQ0FMTCAiY2FsbF9yZXR1cm5faW5fZnVuY3Rpb24iKQoraWYgKE5PVCBWQUxVRSBFUVVBTCAiMCIpCisgIG1lc3NhZ2UgKFNFTkRfRVJST1IgImVycm9yIG9uIHJldHVybigpIHVzYWdlIGluIGZ1bmN0aW9uLiIpCitlbmRpZigpCisKKworIyMgY2hlY2sgdXNhZ2Ugb2YgaW5jbHVkZV9ndWFyZCgpCitzZXQgKEdVQVJEX1ZBTFVFIDApCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NoZWNrSW5jbHVkZUd1YXJkLmNtYWtlIikKK2lmIChOT1QgR1VBUkRfVkFMVUUgRVFVQUwgIjEiKQorICBtZXNzYWdlIChTRU5EX0VSUk9SICJlcnJvciBvbiBpbmNsdWRlX2d1YXJkKCkgb24gZmlyc3QgaW5jbHVkZS4iKQorZW5kaWYoKQorCitzZXQgKEdVQVJEX1ZBTFVFIDApCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NoZWNrSW5jbHVkZUd1YXJkLmNtYWtlIikKK2lmIChOT1QgR1VBUkRfVkFMVUUgRVFVQUwgIjAiKQorICBtZXNzYWdlIChTRU5EX0VSUk9SICJlcnJvciBvbiBpbmNsdWRlX2d1YXJkKCkgb24gc2Vjb25kIGluY2x1ZGUuIikKK2VuZGlmKCkKKworCisjIyBjaGVjayB1c2FnZSBvZiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKCkgYW5kIHByb2plY3QoKQorYWRkX3N1YmRpcmVjdG9yeSAoQ2hlY2tQcm9qZWN0KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHBhbmRfY29tbWFuZF9uYW1lLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4cGFuZF9jb21tYW5kX25hbWUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQwNjYxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHBhbmRfY29tbWFuZF9uYW1lLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorT0shCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4cGFuZF9jb21tYW5kX25hbWUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4cGFuZF9jb21tYW5kX25hbWUuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5NzIzMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXhwYW5kX2NvbW1hbmRfbmFtZS5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldCAobXlfZXZhbCAiRVZBTCIpCitjbWFrZV9sYW5ndWFnZSAoJHtteV9ldmFsfSBDT0RFIG1lc3NhZ2UoIk9LISIpKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHBhbmRlZF9jb21tYW5kX2FuZF9hcmd1bWVudHMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0MDY2MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorT0shCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXhwYW5kZWRfY29tbWFuZF9hbmRfYXJndW1lbnRzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZDJkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4cGFuZGVkX2NvbW1hbmRfYW5kX2FyZ3VtZW50cy5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK3NldChjbWQgRVZBTCBDT0RFIFtbbWVzc2FnZSgiT0shIildXSkKK2NtYWtlX2xhbmd1YWdlKCR7Y21kfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4dHJhX3BhcmFtZXRlcnNfYmV0d2Vlbl9ldmFsX2FuZF9jb2RlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHRyYV9wYXJhbWV0ZXJzX2JldHdlZW5fZXZhbF9hbmRfY29kZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4dHJhX3BhcmFtZXRlcnNfYmV0d2Vlbl9ldmFsX2FuZF9jb2RlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4dHJhX3BhcmFtZXRlcnNfYmV0d2Vlbl9ldmFsX2FuZF9jb2RlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyMDU0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfZXh0cmFfcGFyYW1ldGVyc19iZXR3ZWVuX2V2YWxfYW5kX2NvZGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK0NNYWtlIEVycm9yIGF0IGV2YWxfZXh0cmFfcGFyYW1ldGVyc19iZXR3ZWVuX2V2YWxfYW5kX2NvZGUuY21ha2U6MSBcKGNtYWtlX2xhbmd1YWdlXCk6CisgIGNtYWtlX2xhbmd1YWdlIGNhbGxlZCB3aXRoIHVuc3VwcG9ydGVkIGFyZ3VtZW50cyBiZXR3ZWVuIEVWQUwgYW5kIENPREUKKyAgYXJndW1lbnRzCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX2V4dHJhX3BhcmFtZXRlcnNfYmV0d2Vlbl9ldmFsX2FuZF9jb2RlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHRyYV9wYXJhbWV0ZXJzX2JldHdlZW5fZXZhbF9hbmRfY29kZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzAwNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9leHRyYV9wYXJhbWV0ZXJzX2JldHdlZW5fZXZhbF9hbmRfY29kZS5jbWFrZQpAQCAtMCwwICsxIEBACitjbWFrZV9sYW5ndWFnZShFVkFMIEJBRCBDT0RFICJtZXNzYWdlKEJBRCBDT0RFKSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX21lc3NhZ2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYzg2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX21lc3NhZ2Utc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitXT1JLUyEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWVkY2RkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERSBtZXNzYWdlKFdPUktTISkpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNmMTFlMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgZXZhbF9tZXNzYWdlX2ZhdGFsX2Vycm9yLmNtYWtlOjE6RVZBTDoyIFwobWVzc2FnZVwpOgorICBlcnJvciEKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGV2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZToxIFwoY21ha2VfbGFuZ3VhZ2VcKQorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX21lc3NhZ2VfZmF0YWxfZXJyb3IuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlMTU1ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbWVzc2FnZV9mYXRhbF9lcnJvci5jbWFrZQpAQCAtMCwwICsxLDUgQEAKK2NtYWtlX2xhbmd1YWdlKEVWQUwgQ09ERQorIgorICBtZXNzYWdlKEZBVEFMX0VSUk9SIGVycm9yISkKKyIKKykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2ludmFsaWRfbmFtZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9ub19jb2RlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9pbnZhbGlkX25hbWUtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fY29kZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX2NvZGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fY29kZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOGJhODgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX2NvZGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IGV2YWxfbm9fY29kZS5jbWFrZToxIFwoY21ha2VfbGFuZ3VhZ2VcKToKKyAgY21ha2VfbGFuZ3VhZ2UgY2FsbGVkIHdpdGhvdXQgQ09ERSBhcmd1bWVudApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9ub19jb2RlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9ub19jb2RlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNWJjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX2NvZGUuY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfbGFuZ3VhZ2UoRVZBTCBtZXNzYWdlICJ0b28gbWFueSBwYXJhbWV0ZXJzIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3RhcmdldF9jb21tYW5kcy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9ub19wYXJhbWV0ZXJzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS90YXJnZXRfY29tbWFuZHMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fcGFyYW1ldGVycy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fcGFyYW1ldGVycy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjY4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX25vX3BhcmFtZXRlcnMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IGV2YWxfbm9fcGFyYW1ldGVycy5jbWFrZToxIFwoY21ha2VfbGFuZ3VhZ2VcKToKKyAgY21ha2VfbGFuZ3VhZ2UgY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fcGFyYW1ldGVycy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfbm9fcGFyYW1ldGVycy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2FlODA4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF9ub19wYXJhbWV0ZXJzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2xhbmd1YWdlKEVWQUwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ldmFsX3ZhcmlhYmxlX291dHNpZGVfbWVzc2FnZS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF92YXJpYWJsZV9vdXRzaWRlX21lc3NhZ2Utc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmM4Njk0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF92YXJpYWJsZV9vdXRzaWRlX21lc3NhZ2Utc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitXT1JLUyEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfdmFyaWFibGVfb3V0c2lkZV9tZXNzYWdlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvZXZhbF92YXJpYWJsZV9vdXRzaWRlX21lc3NhZ2UuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmMDQ1NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL2V2YWxfdmFyaWFibGVfb3V0c2lkZV9tZXNzYWdlLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorY21ha2VfbGFuZ3VhZ2UoRVZBTCBDT0RFICJzZXQocGhyYXNlIFwiV09SS1MhXCIpIikKK21lc3NhZ2UoJHtwaHJhc2V9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ub19wYXJhbWV0ZXJzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS90YXJnZXRfY29tbWFuZHMtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL25vX3BhcmFtZXRlcnMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2Uvbm9fcGFyYW1ldGVycy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2Uvbm9fcGFyYW1ldGVycy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NGJiZTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS9ub19wYXJhbWV0ZXJzLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitDTWFrZSBFcnJvciBhdCBub19wYXJhbWV0ZXJzLmNtYWtlOjEgXChjbWFrZV9sYW5ndWFnZVwpOgorICBjbWFrZV9sYW5ndWFnZSBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2Uvbm9fcGFyYW1ldGVycy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL25vX3BhcmFtZXRlcnMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1M2UwOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL25vX3BhcmFtZXRlcnMuY21ha2UKQEAgLTAsMCArMSBAQAorY21ha2VfbGFuZ3VhZ2UoQ0FMTCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vT1VUUFVUX05BTUUtcmVjdXJzaW9uLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS91bmtub3duX21ldGFfb3BlcmF0aW9uLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL09VVFBVVF9OQU1FLXJlY3Vyc2lvbi1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvY21ha2VfbGFuZ3VhZ2UvdW5rbm93bl9tZXRhX29wZXJhdGlvbi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS91bmtub3duX21ldGFfb3BlcmF0aW9uLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS91bmtub3duX21ldGFfb3BlcmF0aW9uLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExZDRmZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL3Vua25vd25fbWV0YV9vcGVyYXRpb24tc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yIGF0IHVua25vd25fbWV0YV9vcGVyYXRpb24uY21ha2U6MSBcKGNtYWtlX2xhbmd1YWdlXCk6CisgIGNtYWtlX2xhbmd1YWdlIGNhbGxlZCB3aXRoIHVua25vd24gbWV0YS1vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX2xhbmd1YWdlL3Vua25vd25fbWV0YV9vcGVyYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS91bmtub3duX21ldGFfb3BlcmF0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OWYzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9sYW5ndWFnZS91bmtub3duX21ldGFfb3BlcmF0aW9uLmNtYWtlCkBAIC0wLDAgKzEgQEAKK2NtYWtlX2xhbmd1YWdlKFVOS05PV04pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL0JlZm9yZTI4MTItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQmVmb3JlMjgxMi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDBkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL0JlZm9yZTI4MTItc3RkZXJyLnR4dApAQCAtMCwwICsxLDI2IEBACiteQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBCZWZvcmUyODEyLmNtYWtlOjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQorKworQ01ha2UgRGVwcmVjYXRpb24gV2FybmluZyBhdCBCZWZvcmUyODEyLmNtYWtlOjIgXChjbWFrZV9wb2xpY3lcKToKKyAgQ29tcGF0aWJpbGl0eSB3aXRoIENNYWtlIDwgMi44LjEyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24gb2YKKyAgQ01ha2UuCisKKyAgVXBkYXRlIHRoZSBWRVJTSU9OIGFyZ3VtZW50IDxtaW4+IHZhbHVlIG9yIHVzZSBhIC4uLjxtYXg+IHN1ZmZpeCB0byB0ZWxsCisgIENNYWtlIHRoYXQgdGhlIHByb2plY3QgZG9lcyBub3QgbmVlZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCisrCitDTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IEJlZm9yZTI4MTIuY21ha2U6NiBcKGNtYWtlX3BvbGljeVwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL0JlZm9yZTI4MTIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL0JlZm9yZTI4MTIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwZTM1OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQmVmb3JlMjgxMi5jbWFrZQpAQCAtMCwwICsxLDYgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTEpCitjbWFrZV9wb2xpY3koVkVSU0lPTiAyLjYpCitjbWFrZV9wb2xpY3koUFVTSCkKK2NtYWtlX3BvbGljeShWRVJTSU9OIDIuNikgIyBzaW11bGF0ZSBwcmUtMy4xOCBpbnN0YWxsKEVYUE9SVCktZ2VuZXJhdGVkIGNhbGwKK2NtYWtlX3BvbGljeShQT1ApCitjbWFrZV9wb2xpY3koVkVSU0lPTiAyLjguMTEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9DTWFrZUxpc3RzLnR4dAppbmRleCBlOGRiNmIwLi42Njc1NjFlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQotaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlIE5PX1BPTElDWV9TQ09QRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQ29tcGF0QmVmb3JlMjQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvQ29tcGF0QmVmb3JlMjQtc3RkZXJyLnR4dAppbmRleCBhODc0NDY2Li44MWQyNmQyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jbWFrZV9taW5pbXVtX3JlcXVpcmVkL0NvbXBhdEJlZm9yZTI0LXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9Db21wYXRCZWZvcmUyNC1zdGRlcnIudHh0CkBAIC0xLDMgKzEsMTIgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IENvbXBhdEJlZm9yZTI0LmNtYWtlOjEgXChjbWFrZV9taW5pbXVtX3JlcXVpcmVkXCk6CisgIENvbXBhdGliaWxpdHkgd2l0aCBDTWFrZSA8IDIuOC4xMiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mCisgIENNYWtlLgorCisgIFVwZGF0ZSB0aGUgVkVSU0lPTiBhcmd1bWVudCA8bWluPiB2YWx1ZSBvciB1c2UgYSAuLi48bWF4PiBzdWZmaXggdG8gdGVsbAorICBDTWFrZSB0aGF0IHRoZSBwcm9qZWN0IGRvZXMgbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQorKwogQ01ha2UgRXJyb3IgaW4gQ01ha2VMaXN0cy50eHQ6CiAgIFlvdSBoYXZlIHNldCBDTUFLRV9CQUNLV0FSRFNfQ09NUEFUSUJJTElUWSB0byBhIENNYWtlIHZlcnNpb24gbGVzcyB0aGFuCiAgIDIuNC4gIFRoaXMgdmVyc2lvbiBvZiBDTWFrZSBvbmx5IHN1cHBvcnRzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NtYWtlX21pbmltdW1fcmVxdWlyZWQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMTAzMDIxMS4uM2E5NTliYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY21ha2VfbWluaW11bV9yZXF1aXJlZC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTQsNiArNCw3IEBACiBydW5fY21ha2UoQ29tcGF0QmVmb3JlMjQpCiBydW5fY21ha2UoRnV0dXJlKQogcnVuX2NtYWtlKFBvbGljeUJlZm9yZTI0KQorcnVuX2NtYWtlKEJlZm9yZTI4MTIpCiBydW5fY21ha2UoUmFuZ2UpCiBydW5fY21ha2UoUmFuZ2VCYWQpCiBydW5fY21ha2UoVW5rbm93bikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL05vU291cmNlUGVybWlzc2lvbnMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9Ob1NvdXJjZVBlcm1pc3Npb25zLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWQxMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9Ob1NvdXJjZVBlcm1pc3Npb25zLmNtYWtlCkBAIC0wLDAgKzEsMTAgQEAKK2NvbmZpZ3VyZV9maWxlKE5vU291cmNlUGVybWlzc2lvbnMuc2ggTm9Tb3VyY2VQZXJtaXNzaW9ucy5zaC5vdXQKKyAgICAgICAgICAgICAgIE5PX1NPVVJDRV9QRVJNSVNTSU9OUykKKworaWYgKFVOSVgpCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9Ob1NvdXJjZVBlcm1pc3Npb25zLnNoLm91dAorICAgICAgICAgICAgICAgICAgUkVTVUxUX1ZBUklBQkxFIHJlc3VsdCkKKyAgaWYgKHJlc3VsdCBFUVVBTCAiMCIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ29waWVkIGZpbGUgaGFzIGV4ZWN1dGFibGUgcGVybWlzc2lvbnMiKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9Ob1NvdXJjZVBlcm1pc3Npb25zLnNoIGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvTm9Tb3VyY2VQZXJtaXNzaW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYWE4ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvTm9Tb3VyY2VQZXJtaXNzaW9ucy5zaApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCisjVGVzdGluZyBOT19TT1VSQ0VfUEVSTUlTU0lPTlMgb3B0aW9uIG9mIGNvbmZpZ3VyZV9maWxlLgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUmVydW5DTWFrZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL1JlcnVuQ01ha2UuY21ha2UKaW5kZXggODkwY2MxZi4uOTgzODdkMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUmVydW5DTWFrZS5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SZXJ1bkNNYWtlLmNtYWtlCkBAIC0xLDggKzEsNCBAQAogbWVzc2FnZSgiUnVubmluZyBDTWFrZSBvbiBSZXJ1bkNNYWtlIikgIyB3cml0ZSB0byBzdGRlcnIgaWYgY21ha2UgcmVydW5zCi1jb25maWd1cmVfZmlsZSgKLSAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9Db25maWd1cmVGaWxlSW5wdXQudHh0LmluIgotICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NvbmZpZ3VyZUZpbGVPdXRwdXQudHh0IgotICBAT05MWQotICApCithZGRfc3ViZGlyZWN0b3J5KFJlcnVuQ01ha2UpCiAjIG1ha2Ugc3VyZSBDTWFrZUNhY2hlLnR4dCBpcyBuZXdlciB0aGFuIENvbmZpZ3VyZUZpbGVPdXRwdXQudHh0CiBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHNsZWVwIDEpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SZXJ1bkNNYWtlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUmVydW5DTWFrZS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY4MWM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUmVydW5DTWFrZS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDUgQEAKK2NvbmZpZ3VyZV9maWxlKAorICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NvbmZpZ3VyZUZpbGVJbnB1dC50eHQuaW4iCisgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vQ29uZmlndXJlRmlsZU91dHB1dC50eHQiCisgIEBPTkxZCisgICkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2NvbmZpZ3VyZV9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBkZTE0NDY4Li43MTY5NGZiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jb25maWd1cmVfZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY29uZmlndXJlX2ZpbGUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xNSw2ICsxNSw3IEBACiBydW5fY21ha2UoTmV3TGluZVN0eWxlLVdyb25nQXJnKQogcnVuX2NtYWtlKE5ld0xpbmVTdHlsZS1WYWxpZEFyZykKIHJ1bl9jbWFrZShOZXdMaW5lU3R5bGUtQ09QWU9OTFkpCitydW5fY21ha2UoTm9Tb3VyY2VQZXJtaXNzaW9ucykKIAogaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIk1ha2UiKQogICAjIFVzZSBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciBhIGZldyB0ZXN0cyB3aXRob3V0IGNsZWFuaW5nLgpAQCAtMjIsNyArMjMsNyBAQAogICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQogICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQogICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQotICBzZXQoaW5fY29uZiAgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9Db25maWd1cmVGaWxlSW5wdXQudHh0LmluIikKKyAgc2V0KGluX2NvbmYgICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vUmVydW5DTWFrZS9Db25maWd1cmVGaWxlSW5wdXQudHh0LmluIikKICAgZmlsZShXUklURSAiJHtpbl9jb25mfSIgIjEiKQogCiAgIG1lc3NhZ2UoU1RBVFVTICJSZXJ1bkNNYWtlOiBmaXJzdCBjb25maWd1cmF0aW9uLi4uIikKQEAgLTQyLDcgKzQzLDcgQEAKICAgcnVuX2NtYWtlX2NvbW1hbmQoUmVydW5DTWFrZS1ub3dvcmsgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCiAKICAgbWVzc2FnZShTVEFUVVMgIlJlcnVuQ01ha2U6IHJlbW92ZSBjb25maWd1cmVfZmlsZSBvdXRwdXQuLi4iKQotICBmaWxlKFJFTU9WRSAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L0NvbmZpZ3VyZUZpbGVPdXRwdXQudHh0IikKKyAgZmlsZShSRU1PVkUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9SZXJ1bkNNYWtlL0NvbmZpZ3VyZUZpbGVPdXRwdXQudHh0IikKICAgcnVuX2NtYWtlX2NvbW1hbmQoUmVydW5DTWFrZS1yZXJ1biAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKICAgcnVuX2NtYWtlX2NvbW1hbmQoUmVydW5DTWFrZS1ub3dvcmsgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X2xhYmVsc19mb3Jfc3VicHJvamVjdHMvQ1Rlc3RTY3JpcHRWYXJpYWJsZUNvbW1hbmRMaW5lLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9sYWJlbHNfZm9yX3N1YnByb2plY3RzL0NUZXN0U2NyaXB0VmFyaWFibGVDb21tYW5kTGluZS1zdGRlcnIudHh0CmluZGV4IDM4NTY2ZmIuLjIwNmFiMjEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X2xhYmVsc19mb3Jfc3VicHJvamVjdHMvQ1Rlc3RTY3JpcHRWYXJpYWJsZUNvbW1hbmRMaW5lLXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbGFiZWxzX2Zvcl9zdWJwcm9qZWN0cy9DVGVzdFNjcmlwdFZhcmlhYmxlQ29tbWFuZExpbmUtc3RkZXJyLnR4dApAQCAtMSArMSwyIEBACi1VbmFibGUgdG8gZmluZCBleGVjdXRhYmxlOi4qTXlUaGlyZFBhcnR5RGVwZW5kZW5jeS9zcmMvdGhpcmRwYXJ0eQorVW5hYmxlIHRvIGZpbmQgZXhlY3V0YWJsZTouKk15VGhpcmRQYXJ0eURlcGVuZGVuY3kvc3JjKC9bXi8KK10rKT8vdGhpcmRwYXJ0eQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svQ01ha2VMaXN0cy50eHQuaW4gYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9DTWFrZUxpc3RzLnR4dC5pbgppbmRleCAzYjhlZGY0Li42OGEwZmNiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9DTWFrZUxpc3RzLnR4dC5pbgorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9DTWFrZUxpc3RzLnR4dC5pbgpAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguOSkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KENUZXN0VGVzdE1lbWNoZWNrQENBU0VfTkFNRUAgTk9ORSkKIGluY2x1ZGUoQ1Rlc3QpCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL0R1bW15Q3VkYU1lbWNoZWNrLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9EdW1teUN1ZGFNZW1jaGVjay1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9EdW1teUN1ZGFNZW1jaGVjay1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svRHVtbXlDdWRhTWVtY2hlY2stc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzAyYjVjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svRHVtbXlDdWRhTWVtY2hlY2stc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitEZWZlY3QgY291bnQ6IDIzCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9EdW1teUN1ZGFNZW1jaGVjay1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svRHVtbXlDdWRhTWVtY2hlY2stc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzRlZTFlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svRHVtbXlDdWRhTWVtY2hlY2stc3Rkb3V0LnR4dApAQCAtMCwwICsxLDEzIEBACitNZW1vcnkgY2hlY2tpbmcgcmVzdWx0czoKK1VuaW5pdGlhbGl6ZWQgX19nbG9iYWxfXyBtZW1vcnkgcmVhZCAtIDEKK1VudXNlZCBtZW1vcnkgLSAxCitIb3N0IEFQSSBtZW1vcnkgYWNjZXNzIGVycm9yIC0gMQorQmFycmllciBlcnJvciAtIDIKK0ludmFsaWQgX19nbG9iYWxfXyByZWFkIC0gMQorY3VkYUVycm9yTGF1bmNoRmFpbHVyZSAtIDIKK0ZhdGFsIFVWTSBHUFUgZmF1bHQgLSAxCitGYXRhbCBVVk0gQ1BVIGZhdWx0IC0gMQorTWVtb3J5IGxlYWsgLSAxCitQb3RlbnRpYWwgV0FSIGhhemFyZCBkZXRlY3RlZCAtIDQKK1BvdGVudGlhbCBSQVcgaGF6YXJkIGRldGVjdGVkIC0gNAorUmFjZSByZXBvcnRlZCAtIDQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBhYjRjNWFiLi4yYjMxNjViIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xNzUsMyArMTc1LDE1IEBACiB1bnNldChDVEVTVF9FWFRSQV9DT0RFKQogdW5zZXQoQ1RFU1RfTUVNQ0hFQ0tfQVJHUykKIHVuc2V0KENURVNUX1NVRkZJWF9DT0RFKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NldChDTUFLRUxJU1RTX0VYVFJBX0NPREUKKyJhZGRfdGVzdChOQU1FIFRlc3RTYW4gQ09NTUFORCBcIiR7Q01BS0VfQ09NTUFORH1cIgorLVAgXCIke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L3Rlc3RDdWRhTWVtY2hlY2suY21ha2VcIikKKyIpCitzZXQoQ1RFU1RfU1VGRklYX0NPREUgIm1lc3NhZ2UoXCJEZWZlY3QgY291bnQ6IFwke2RlZmVjdF9jb3VudH1cIikiKQorc2V0KENURVNUX01FTUNIRUNLX0FSR1MgIkRFRkVDVF9DT1VOVCBkZWZlY3RfY291bnQiKQorcnVuX21jX3Rlc3QoRHVtbXlDdWRhTWVtY2hlY2sgIiR7UFNFVURPX0NVREFfTUVNQ0hFQ0t9IikKK3Vuc2V0KENURVNUX01FTUNIRUNLX0FSR1MpCit1bnNldChDVEVTVF9TVUZGSVhfQ09ERSkKK3Vuc2V0KENURVNUX0VYVFJBX0NPREUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0LmNtYWtlLmluIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdC5jbWFrZS5pbgppbmRleCA1MGI0YjZhLi5lZWRmMDgwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0LmNtYWtlLmluCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3QuY21ha2UuaW4KQEAgLTEsNCArMSw0IEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjkpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogCiAjIFNldHRpbmdzOgogc2V0KENURVNUX1NJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICJAU0lURUAiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdEFkZHJlc3NMZWFrU2FuaXRpemVyLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdEFkZHJlc3NMZWFrU2FuaXRpemVyLmNtYWtlCmluZGV4IGNhMzZhN2MuLjU4Yzk0ZDcgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RBZGRyZXNzTGVha1Nhbml0aXplci5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0QWRkcmVzc0xlYWtTYW5pdGl6ZXIuY21ha2UKQEAgLTIsNyArMiw3IEBACiAjIG9wdGlvbnMKIAogbWVzc2FnZSgiQVNBTl9PUFRJT05TID0gWyRFTlZ7QVNBTl9PUFRJT05TfV0iKQotc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qbG9nX3BhdGg9XCcoW15cJ10qKVwnLioiICJcXDEiIExPR19GSUxFICIkRU5We0FTQU5fT1BUSU9OU30iKQorc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi4qbG9nX3BhdGg9JyhbXiddKiknLioiICJcXDEiIExPR19GSUxFICIkRU5We0FTQU5fT1BUSU9OU30iKQogbWVzc2FnZSgiTE9HX0ZJTEU9WyR7TE9HX0ZJTEV9XSIpCiAKICMgaWYgd2UgYXJlIG5vdCBhc2tlZCB0byBzaW11bGF0ZSBBZGRyZXNzU2FuaXRpemVyIGRvbid0IGRvIGl0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0QWRkcmVzc1Nhbml0aXplci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RBZGRyZXNzU2FuaXRpemVyLmNtYWtlCmluZGV4IDEyMTk2NjYuLjhmMThjZDAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RBZGRyZXNzU2FuaXRpemVyLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RBZGRyZXNzU2FuaXRpemVyLmNtYWtlCkBAIC0yLDcgKzIsNyBAQAogIyBvcHRpb25zCiAKIG1lc3NhZ2UoIkFTQU5fT1BUSU9OUyA9IFskRU5We0FTQU5fT1BUSU9OU31dIikKLXN0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPVwnKFteXCddKilcJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntBU0FOX09QVElPTlN9IikKK3N0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPScoW14nXSopJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntBU0FOX09QVElPTlN9IikKIG1lc3NhZ2UoIkxPR19GSUxFPVske0xPR19GSUxFfV0iKQogCiAjIGlmIHdlIGFyZSBub3QgYXNrZWQgdG8gc2ltdWxhdGUgYWRkcmVzcyBzYW5pdGl6ZXIgZG9uJ3QgZG8gaXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RDdWRhTWVtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0Q3VkYU1lbWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzdhMWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0Q3VkYU1lbWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMjc5IEBACisjIHRoaXMgZmlsZSBzaW11bGF0ZXMgYW4gZXhlY3V0aW9uIG9mIGN1ZGEtbWVtY2hlY2sKKworc2V0KExPR19GSUxFICIkRU5We1BTRVVET19MT0dGSUxFfSIpCittZXNzYWdlKCJMT0dfRklMRT1bJHtMT0dfRklMRX1dIikKKworIyBjbGVhciB0aGUgbG9nIGZpbGUKK2ZpbGUoUkVNT1ZFICIke0xPR19GSUxFfSIpCisKKyMgY3JlYXRlIGFuIGVycm9yIG9mIGVhY2ggdHlwZSBvZiBzYW5pdGl6ZXIgdG9vbCBhbmQgZmFpbHVyZQorCisjIGluaXRjaGVjaworZmlsZShBUFBFTkQgIiR7TE9HX0ZJTEV9IgorIj09PT09PT09PSBDVURBLU1FTUNIRUNLCis9PT09PT09PT0gVW5pbml0aWFsaXplZCBfX2dsb2JhbF9fIG1lbW9yeSByZWFkIG9mIHNpemUgNAorPT09PT09PT09ICAgICBhdCAweDAwMDAwMDIwIGluIHRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgYnkgdGhyZWFkICgwLDAsMCkgaW4gYmxvY2sgKDAsMCwwKQorPT09PT09PT09ICAgICBBZGRyZXNzIDB4MTMwM2Q4MDAwMAorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdUxhdW5jaEtlcm5lbCArIDB4MzQ2KSBbMHgyOTdkYjZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3VuaW5pdC1yZWFkIFsweDEwMjY3XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vdW5pbml0LXJlYWQgWzB4NDY1YjVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vdW5pbml0LXJlYWQgWzB4MzE0M10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliYy5zby42IChfX2xpYmNfc3RhcnRfbWFpbiArIDB4ZjUpIFsweDIyNTA1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vdW5pbml0LXJlYWQgWzB4MzFlMl0KKz09PT09PT09PQorPT09PT09PT09IFVudXNlZCBtZW1vcnkgaW4gYWxsb2NhdGlvbiAweDEzMDNkODAwMDAgb2Ygc2l6ZSAxNiBieXRlcworPT09PT09PT09ICAgICBOb3Qgd3JpdHRlbiBhbnkgbWVtb3J5LgorPT09PT09PT09ICAgICAxMDAuMDAlIG9mIGFsbG9jYXRpb24gd2VyZSB1bnVzZWQuCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludAorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjdWRhLnNvLjEgKGN1TWVtQWxsb2NfdjIgKyAweDFiNykgWzB4MjZlYzk3XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vdW5pbml0LXJlYWQgWzB4MmJiZDNdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHg3MWFiXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vdW5pbml0LXJlYWQgWzB4M2M4NGZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHgzMTExXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li91bmluaXQtcmVhZCBbMHgzMWUyXQorPT09PT09PT09Cis9PT09PT09PT0gSG9zdCBBUEkgbWVtb3J5IGFjY2VzcyBlcnJvciBhdCBob3N0IGFjY2VzcyB0byAweDEzMDNmZDE0MDAgb2Ygc2l6ZSAyNTYwMCBieXRlcworPT09PT09PT09ICAgICBVbmluaXRpYWxpemVkIGFjY2VzcyBhdCAweDEzMDNmZDQ2MDAgb24gYWNjZXNzIGJ5IGN1ZGFNZW1jb3B5IHNvdXJjZS4KKz09PT09PT09PSAgICAgU2F2ZWQgaG9zdCBiYWNrdHJhY2UgdXAgdG8gZHJpdmVyIGVudHJ5IHBvaW50IGF0IGVycm9yCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJjdWRhLnNvLjEgKGN1TWVtY3B5RHRvSF92MiArIDB4MWVjKSBbMHgyOTIwMGNdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L3Vzci9sb2NhbC9jdWRhL3RhcmdldHMveDg2XzY0LWxpbnV4L2xpYi9saWJjdWRhcnQuc28uMTAuMSBbMHgzOGFhYV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovdXNyL2xvY2FsL2N1ZGEvdGFyZ2V0cy94ODZfNjQtbGludXgvbGliL2xpYmN1ZGFydC5zby4xMC4xIFsweDE4OTQ2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi91c3IvbG9jYWwvY3VkYS90YXJnZXRzL3g4Nl82NC1saW51eC9saWIvbGliY3VkYXJ0LnNvLjEwLjEgKGN1ZGFNZW1jcHkgKyAweDFhMikgWzB4M2I4YzJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L3NvbWV0aGluZy9zb21ld2hlcmUgWzB4Y2FmZV0KKz09PT09PT09PQorPT09PT09PT09IEVSUk9SIFNVTU1BUlk6IDIgZXJyb3JzCisiKQorCisKKyMgc3luY2NoZWNrCitmaWxlKEFQUEVORCAiJHtMT0dfRklMRX0iCisiPT09PT09PT09IENVREEtTUVNQ0hFQ0sKKz09PT09PT09PSBCYXJyaWVyIGVycm9yIGRldGVjdGVkLiBEaXZlcmdlbnQgdGhyZWFkKHMpIGluIHdhcnAKKz09PT09PT09PSAgICAgYXQgMHgwMDAwMDA1OCBpbiB0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIGJ5IHRocmVhZCAoMSwwLDApIGluIGJsb2NrICgwLDAsMCkKKz09PT09PT09PSAgICAgRGV2aWNlIEZyYW1lOnRlc3QoaW50KiwgaW50KikgKHRlc3QoaW50KiwgaW50KikgOiAweDYwKQorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3N5bmMgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9zeW5jIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHgzMTRhXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9zeW5jIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBCYXJyaWVyIGVycm9yIGRldGVjdGVkLiBEaXZlcmdlbnQgdGhyZWFkKHMpIGluIHdhcnAKKz09PT09PT09PSAgICAgYXQgMHgwMDAwMDA1OCBpbiB0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIGJ5IHRocmVhZCAoMCwwLDApIGluIGJsb2NrICgwLDAsMCkKKz09PT09PT09PSAgICAgRGV2aWNlIEZyYW1lOnRlc3QoaW50KiwgaW50KikgKHRlc3QoaW50KiwgaW50KikgOiAweDYwKQorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3N5bmMgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9zeW5jIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vc3luYyBbMHgzMTRhXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9zeW5jIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBFUlJPUiBTVU1NQVJZOiAyIGVycm9ycworIikKKworIyBtZW1jaGVjaworZmlsZShBUFBFTkQgIiR7TE9HX0ZJTEV9IgorIj09PT09PT09PSBDVURBLU1FTUNIRUNLCis9PT09PT09PT0gSW52YWxpZCBfX2dsb2JhbF9fIHJlYWQgb2Ygc2l6ZSA0Cis9PT09PT09PT0gICAgIGF0IDB4MDAwMDAwMjAgaW4gdGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBieSB0aHJlYWQgKDAsMCwwKSBpbiBibG9jayAoMCwwLDApCis9PT09PT09PT0gICAgIEFkZHJlc3MgMHgwMDAwMDAwMCBpcyBvdXQgb2YgYm91bmRzCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBrZXJuZWwgbGF1bmNoIHRpbWUKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdUxhdW5jaEtlcm5lbCArIDB4MzQ2KSBbMHgyOTdkYjZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4MTAxZDldCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4NDY1YjVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4MzM0Ml0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL2ludmFsaWQtcmVhZCBbMHgzMTQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4MzFlMl0KKz09PT09PT09PQorPT09PT09PT09IFByb2dyYW0gaGl0IGN1ZGFFcnJvckxhdW5jaEZhaWx1cmUgKGVycm9yIDcxOSkgZHVlIHRvIFwidW5zcGVjaWZpZWQgbGF1bmNoIGZhaWx1cmVcIiBvbiBDVURBIEFQSSBjYWxsIHRvIGN1ZGFEZXZpY2VTeW5jaHJvbml6ZS4KKz09PT09PT09PSAgICAgU2F2ZWQgaG9zdCBiYWNrdHJhY2UgdXAgdG8gZHJpdmVyIGVudHJ5IHBvaW50IGF0IGVycm9yCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSBbMHgzYWM1YTNdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4MmU1NzZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4MzE0N10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliYy5zby42IChfX2xpYmNfc3RhcnRfbWFpbiArIDB4ZjUpIFsweDIyNTA1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBQcm9ncmFtIGhpdCBjdWRhRXJyb3JMYXVuY2hGYWlsdXJlIChlcnJvciA3MTkpIGR1ZSB0byBcInVuc3BlY2lmaWVkIGxhdW5jaCBmYWlsdXJlXCIgb24gQ1VEQSBBUEkgY2FsbCB0byBjdWRhRnJlZS4KKz09PT09PT09PSAgICAgU2F2ZWQgaG9zdCBiYWNrdHJhY2UgdXAgdG8gZHJpdmVyIGVudHJ5IHBvaW50IGF0IGVycm9yCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSBbMHgzYWM1YTNdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4M2MxMDZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9pbnZhbGlkLXJlYWQgWzB4MzE1MF0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliYy5zby42IChfX2xpYmNfc3RhcnRfbWFpbiArIDB4ZjUpIFsweDIyNTA1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vaW52YWxpZC1yZWFkIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBGYXRhbCBVVk0gR1BVIGZhdWx0IG9mIHR5cGUgaW52YWxpZCBwZGUgZHVlIHRvIGludmFsaWQgYWRkcmVzcworPT09PT09PT09ICAgICBkdXJpbmcgYXRvbWljIGFjY2VzcyB0byBhZGRyZXNzIDB4MjBiZTAwMDAwCis9PT09PT09PT0KKz09PT09PT09PSBGYXRhbCBVVk0gQ1BVIGZhdWx0IGR1ZSB0byBpbnZhbGlkIG9wZXJhdGlvbgorPT09PT09PT09ICAgICBkdXJpbmcgcmVhZCBhY2Nlc3MgdG8gYWRkcmVzcyAweDEzNTdjOTIwMDAKKz09PT09PT09PQorPT09PT09PT09IExFQUsgU1VNTUFSWTogMCBieXRlcyBsZWFrZWQgaW4gMCBhbGxvY2F0aW9ucworPT09PT09PT09IEVSUk9SIFNVTU1BUlk6IDMgZXJyb3JzCisiKQorCisjIG1lbWNoZWNrIHdpdGggbGVhay1jaGVjayBmdWxsCitmaWxlKEFQUEVORCAiJHtMT0dfRklMRX0iCisiPT09PT09PT09IENVREEtTUVNQ0hFQ0sKKz09PT09PT09PSBMZWFrZWQgMTAgYnl0ZXMgYXQgMHgxMzAzZDgwMDAwCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBjdWRhTWFsbG9jIHRpbWUKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdU1lbUFsbG9jX3YyICsgMHgxYjcpIFsweDI2ZWM5N10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL2xlYWsgWzB4MmJhYjNdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9sZWFrIFsweDcwOGJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9sZWFrIFsweDNjNzJmXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vbGVhayBbMHgzMTEzXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9sZWFrIFsweDMxNzRdCis9PT09PT09PT0KKz09PT09PT09PSBMRUFLIFNVTU1BUlk6IDEwIGJ5dGVzIGxlYWtlZCBpbiAxIGFsbG9jYXRpb25zCis9PT09PT09PT0gRVJST1IgU1VNTUFSWTogMSBlcnJvcgorIikKKworIyByYWNlY2hlY2sgd2l0aCByYWNlY2hlY2stcmVwb3J0IGFsbAorZmlsZShBUFBFTkQgIiR7TE9HX0ZJTEV9IgorIj09PT09PT09PSBDVURBLU1FTUNIRUNLCis9PT09PT09PT0gV0FSTjooV2FycCBMZXZlbCBQcm9ncmFtbWluZykgUG90ZW50aWFsIFdBUiBoYXphcmQgZGV0ZWN0ZWQgYXQgX19zaGFyZWRfXyAweDMgaW4gYmxvY2sgKDAsIDAsIDApIDoKKz09PT09PT09PSAgICAgUmVhZCBUaHJlYWQgKDMxLCAwLCAwKSBhdCAweDAwMDAwMTcwIGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgV3JpdGUgVGhyZWFkICgwLCAwLCAwKSBhdCAweDAwMDAwMWE4IGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgQ3VycmVudCBWYWx1ZSA6IDAsIEluY29taW5nIFZhbHVlIDogMAorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMTRhXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBXQVJOOihXYXJwIExldmVsIFByb2dyYW1taW5nKSBQb3RlbnRpYWwgV0FSIGhhemFyZCBkZXRlY3RlZCBhdCBfX3NoYXJlZF9fIDB4MiBpbiBibG9jayAoMCwgMCwgMCkgOgorPT09PT09PT09ICAgICBSZWFkIFRocmVhZCAoMzEsIDAsIDApIGF0IDB4MDAwMDAxNzAgaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBXcml0ZSBUaHJlYWQgKDAsIDAsIDApIGF0IDB4MDAwMDAxYTggaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBDdXJyZW50IFZhbHVlIDogMCwgSW5jb21pbmcgVmFsdWUgOiAwCis9PT09PT09PT0gICAgIFNhdmVkIGhvc3QgYmFja3RyYWNlIHVwIHRvIGRyaXZlciBlbnRyeSBwb2ludCBhdCBrZXJuZWwgbGF1bmNoIHRpbWUKKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliY3VkYS5zby4xIChjdUxhdW5jaEtlcm5lbCArIDB4MzQ2KSBbMHgyOTdkYjZdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDEwMWQ5XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDI2N10KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4NDY1YjVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMzNDJdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxNGFdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmMuc28uNiAoX19saWJjX3N0YXJ0X21haW4gKyAweGY1KSBbMHgyMjUwNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzFlMl0KKz09PT09PT09PQorPT09PT09PT09IFdBUk46KFdhcnAgTGV2ZWwgUHJvZ3JhbW1pbmcpIFBvdGVudGlhbCBXQVIgaGF6YXJkIGRldGVjdGVkIGF0IF9fc2hhcmVkX18gMHgxIGluIGJsb2NrICgwLCAwLCAwKSA6Cis9PT09PT09PT0gICAgIFJlYWQgVGhyZWFkICgzMSwgMCwgMCkgYXQgMHgwMDAwMDE3MCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIFdyaXRlIFRocmVhZCAoMCwgMCwgMCkgYXQgMHgwMDAwMDFhOCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIEN1cnJlbnQgVmFsdWUgOiAwLCBJbmNvbWluZyBWYWx1ZSA6IDAKKz09PT09PT09PSAgICAgU2F2ZWQgaG9zdCBiYWNrdHJhY2UgdXAgdG8gZHJpdmVyIGVudHJ5IHBvaW50IGF0IGtlcm5lbCBsYXVuY2ggdGltZQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjdWRhLnNvLjEgKGN1TGF1bmNoS2VybmVsICsgMHgzNDYpIFsweDI5N2RiNl0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MTAxZDldCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDEwMjY3XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHg0NjViNV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzM0Ml0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MzE0YV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTovbGliNjQvbGliYy5zby42IChfX2xpYmNfc3RhcnRfbWFpbiArIDB4ZjUpIFsweDIyNTA1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMWUyXQorPT09PT09PT09Cis9PT09PT09PT0gV0FSTjooV2FycCBMZXZlbCBQcm9ncmFtbWluZykgUG90ZW50aWFsIFdBUiBoYXphcmQgZGV0ZWN0ZWQgYXQgX19zaGFyZWRfXyAweDAgaW4gYmxvY2sgKDAsIDAsIDApIDoKKz09PT09PT09PSAgICAgUmVhZCBUaHJlYWQgKDMxLCAwLCAwKSBhdCAweDAwMDAwMTcwIGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgV3JpdGUgVGhyZWFkICgwLCAwLCAwKSBhdCAweDAwMDAwMWE4IGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgQ3VycmVudCBWYWx1ZSA6IDAsIEluY29taW5nIFZhbHVlIDogMQorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMTRhXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBXQVJOOihXYXJwIExldmVsIFByb2dyYW1taW5nKSBQb3RlbnRpYWwgUkFXIGhhemFyZCBkZXRlY3RlZCBhdCBfX3NoYXJlZF9fIDB4MyBpbiBibG9jayAoMCwgMCwgMCkgOgorPT09PT09PT09ICAgICBXcml0ZSBUaHJlYWQgKDMxLCAwLCAwKSBhdCAweDAwMDAwMTQ4IGluIC4vcmFjZS5jdTozOnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgUmVhZCBUaHJlYWQgKDAsIDAsIDApIGF0IDB4MDAwMDAxNzAgaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBDdXJyZW50IFZhbHVlIDogMAorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMTRhXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBXQVJOOihXYXJwIExldmVsIFByb2dyYW1taW5nKSBQb3RlbnRpYWwgUkFXIGhhemFyZCBkZXRlY3RlZCBhdCBfX3NoYXJlZF9fIDB4MiBpbiBibG9jayAoMCwgMCwgMCkgOgorPT09PT09PT09ICAgICBXcml0ZSBUaHJlYWQgKDMxLCAwLCAwKSBhdCAweDAwMDAwMTQ4IGluIC4vcmFjZS5jdTozOnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgUmVhZCBUaHJlYWQgKDAsIDAsIDApIGF0IDB4MDAwMDAxNzAgaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBDdXJyZW50IFZhbHVlIDogMAorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMTRhXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBXQVJOOihXYXJwIExldmVsIFByb2dyYW1taW5nKSBQb3RlbnRpYWwgUkFXIGhhemFyZCBkZXRlY3RlZCBhdCBfX3NoYXJlZF9fIDB4MSBpbiBibG9jayAoMCwgMCwgMCkgOgorPT09PT09PT09ICAgICBXcml0ZSBUaHJlYWQgKDMxLCAwLCAwKSBhdCAweDAwMDAwMTQ4IGluIC4vcmFjZS5jdTozOnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgUmVhZCBUaHJlYWQgKDAsIDAsIDApIGF0IDB4MDAwMDAxNzAgaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBDdXJyZW50IFZhbHVlIDogMAorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMTRhXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBXQVJOOihXYXJwIExldmVsIFByb2dyYW1taW5nKSBQb3RlbnRpYWwgUkFXIGhhemFyZCBkZXRlY3RlZCBhdCBfX3NoYXJlZF9fIDB4MCBpbiBibG9jayAoMCwgMCwgMCkgOgorPT09PT09PT09ICAgICBXcml0ZSBUaHJlYWQgKDMxLCAwLCAwKSBhdCAweDAwMDAwMTQ4IGluIC4vcmFjZS5jdTozOnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgUmVhZCBUaHJlYWQgKDAsIDAsIDApIGF0IDB4MDAwMDAxNzAgaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBDdXJyZW50IFZhbHVlIDogMAorPT09PT09PT09ICAgICBTYXZlZCBob3N0IGJhY2t0cmFjZSB1cCB0byBkcml2ZXIgZW50cnkgcG9pbnQgYXQga2VybmVsIGxhdW5jaCB0aW1lCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6L2xpYjY0L2xpYmN1ZGEuc28uMSAoY3VMYXVuY2hLZXJuZWwgKyAweDM0NikgWzB4Mjk3ZGI2XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgxMDFkOV0KKz09PT09PT09PSAgICAgSG9zdCBGcmFtZTouL3JhY2UgWzB4MTAyNjddCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDQ2NWI1XQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMzQyXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi4vcmFjZSBbMHgzMTRhXQorPT09PT09PT09ICAgICBIb3N0IEZyYW1lOi9saWI2NC9saWJjLnNvLjYgKF9fbGliY19zdGFydF9tYWluICsgMHhmNSkgWzB4MjI1MDVdCis9PT09PT09PT0gICAgIEhvc3QgRnJhbWU6Li9yYWNlIFsweDMxZTJdCis9PT09PT09PT0KKz09PT09PT09PSBXQVJOOiBSYWNlIHJlcG9ydGVkIGJldHdlZW4gUmVhZCBhY2Nlc3MgYXQgMHgwMDAwMDE3MCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIGFuZCBXcml0ZSBhY2Nlc3MgYXQgMHgwMDAwMDE0OCBpbiAuL3JhY2UuY3U6Mzp0ZXN0KGludCosIGludCopIFs0IGhhemFyZHNdCis9PT09PT09PT0gICAgIGFuZCBXcml0ZSBhY2Nlc3MgYXQgMHgwMDAwMDFhOCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopIFs0IGhhemFyZHNdCis9PT09PT09PT0KKz09PT09PT09PSBXQVJOOiBSYWNlIHJlcG9ydGVkIGJldHdlZW4gV3JpdGUgYWNjZXNzIGF0IDB4MDAwMDAxNDggaW4gLi9yYWNlLmN1OjM6dGVzdChpbnQqLCBpbnQqKQorPT09PT09PT09ICAgICBhbmQgV3JpdGUgYWNjZXNzIGF0IDB4MDAwMDAxNDggaW4gLi9yYWNlLmN1OjM6dGVzdChpbnQqLCBpbnQqKSBbMTI0IGhhemFyZHNdCis9PT09PT09PT0gICAgIGFuZCBSZWFkIGFjY2VzcyBhdCAweDAwMDAwMTcwIGluIC4vcmFjZS5jdTo0OnRlc3QoaW50KiwgaW50KikgWzQgaGF6YXJkc10KKz09PT09PT09PQorPT09PT09PT09IFdBUk46IFJhY2UgcmVwb3J0ZWQgYmV0d2VlbiBXcml0ZSBhY2Nlc3MgYXQgMHgwMDAwMDFhOCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopCis9PT09PT09PT0gICAgIGFuZCBXcml0ZSBhY2Nlc3MgYXQgMHgwMDAwMDFhOCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopIFsxMjQgaGF6YXJkc10KKz09PT09PT09PSAgICAgYW5kIFJlYWQgYWNjZXNzIGF0IDB4MDAwMDAxNzAgaW4gLi9yYWNlLmN1OjQ6dGVzdChpbnQqLCBpbnQqKSBbNCBoYXphcmRzXQorPT09PT09PT09Cis9PT09PT09PT0gV0FSTjogUmFjZSByZXBvcnRlZCBiZXR3ZWVuIFdyaXRlIGFjY2VzcyBhdCAweDAwMDAwMTQ4IGluIC4vcmFjZS5jdTozOnRlc3QoaW50KiwgaW50KikKKz09PT09PT09PSAgICAgYW5kIFdyaXRlIGFjY2VzcyBhdCAweDAwMDAwMTQ4IGluIC4vcmFjZS5jdTozOnRlc3QoaW50KiwgaW50KikgWzEyNCBoYXphcmRzXQorPT09PT09PT09ICAgICBhbmQgUmVhZCBhY2Nlc3MgYXQgMHgwMDAwMDE3MCBpbiAuL3JhY2UuY3U6NDp0ZXN0KGludCosIGludCopIFs0IGhhemFyZHNdCis9PT09PT09PT0KKz09PT09PT09PSBSQUNFQ0hFQ0sgU1VNTUFSWTogMTIgaGF6YXJkcyBkaXNwbGF5ZWQgKDAgZXJyb3JzLCAxMiB3YXJuaW5ncykKKyIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0TGVha1Nhbml0aXplci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RMZWFrU2FuaXRpemVyLmNtYWtlCmluZGV4IDZkNTFmODMuLjQ5OTA3OTIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RMZWFrU2FuaXRpemVyLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RMZWFrU2FuaXRpemVyLmNtYWtlCkBAIC0yLDcgKzIsNyBAQAogIyBvcHRpb25zCiAKIG1lc3NhZ2UoIkxTQU5fT1BUSU9OUyA9IFskRU5We0xTQU5fT1BUSU9OU31dIikKLXN0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPVwnKFteXCddKilcJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntMU0FOX09QVElPTlN9IikKK3N0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPScoW14nXSopJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntMU0FOX09QVElPTlN9IikKIG1lc3NhZ2UoIkxPR19GSUxFPVske0xPR19GSUxFfV0iKQogCiAjIGlmIHdlIGFyZSBub3QgYXNrZWQgdG8gc2ltdWxhdGUgTGVha1Nhbml0aXplciBkb24ndCBkbyBpdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdE1lbW9yeVNhbml0aXplci5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RNZW1vcnlTYW5pdGl6ZXIuY21ha2UKaW5kZXggM2IzYWMyMi4uNGE2YWRiMSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdE1lbW9yeVNhbml0aXplci5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0TWVtb3J5U2FuaXRpemVyLmNtYWtlCkBAIC0yLDcgKzIsNyBAQAogIyBvcHRpb25zCiAKIG1lc3NhZ2UoIk1TQU5fT1BUSU9OUyA9IFskRU5We01TQU5fT1BUSU9OU31dIikKLXN0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPVwnKFteXCddKilcJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntNU0FOX09QVElPTlN9IikKK3N0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPScoW14nXSopJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntNU0FOX09QVElPTlN9IikKIG1lc3NhZ2UoIkxPR19GSUxFPVske0xPR19GSUxFfV0iKQogCiAjIGlmIHdlIGFyZSBub3QgYXNrZWQgdG8gc2ltdWxhdGUgYWRkcmVzcyBzYW5pdGl6ZXIgZG9uJ3QgZG8gaXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RUaHJlYWRTYW5pdGl6ZXIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0VGhyZWFkU2FuaXRpemVyLmNtYWtlCmluZGV4IGU3YTVjOWYuLjk2MjUxYzMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RUaHJlYWRTYW5pdGl6ZXIuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdFRocmVhZFNhbml0aXplci5jbWFrZQpAQCAtMiw3ICsyLDcgQEAKICMgb3B0aW9ucwogCiBtZXNzYWdlKCJUU0FOX09QVElPTlMgPSBbJEVOVntUU0FOX09QVElPTlN9XSIpCi1zdHJpbmcoUkVHRVggUkVQTEFDRSAiLipsb2dfcGF0aD1cJyhbXlwnXSopXCcuKiIgIlxcMSIgTE9HX0ZJTEUgIiRFTlZ7VFNBTl9PUFRJT05TfSIpCitzdHJpbmcoUkVHRVggUkVQTEFDRSAiLipsb2dfcGF0aD0nKFteJ10qKScuKiIgIlxcMSIgTE9HX0ZJTEUgIiRFTlZ7VFNBTl9PUFRJT05TfSIpCiBtZXNzYWdlKCJMT0dfRklMRT1bJHtMT0dfRklMRX1dIikKIAogc2V0KGVycm9yX3R5cGVzCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0VW5kZWZpbmVkQmVoYXZpb3JTYW5pdGl6ZXIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9tZW1jaGVjay90ZXN0VW5kZWZpbmVkQmVoYXZpb3JTYW5pdGl6ZXIuY21ha2UKaW5kZXggYmE2MTIyZC4uNzE2MDI4MCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfbWVtY2hlY2svdGVzdFVuZGVmaW5lZEJlaGF2aW9yU2FuaXRpemVyLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X21lbWNoZWNrL3Rlc3RVbmRlZmluZWRCZWhhdmlvclNhbml0aXplci5jbWFrZQpAQCAtMiw3ICsyLDcgQEAKICMgVW5kZWZpbmVkQmVoYXZpb3JTYW5pdGl6ZXIgb3B0aW9ucwogCiBtZXNzYWdlKCJVQlNBTl9PUFRJT05TID0gWyRFTlZ7VUJTQU5fT1BUSU9OU31dIikKLXN0cmluZyhSRUdFWCBSRVBMQUNFICIuKmxvZ19wYXRoPVwnKFteXCddKilcJy4qIiAiXFwxIiBMT0dfRklMRSAiJEVOVntVQlNBTl9PUFRJT05TfSIpCitzdHJpbmcoUkVHRVggUkVQTEFDRSAiLipsb2dfcGF0aD0nKFteJ10qKScuKiIgIlxcMSIgTE9HX0ZJTEUgIiRFTlZ7VUJTQU5fT1BUSU9OU30iKQogbWVzc2FnZSgiTE9HX0ZJTEU9WyR7TE9HX0ZJTEV9XSIpCiAKICMgaWYgd2UgYXJlIG5vdCBhc2tlZCB0byBzaW11bGF0ZSBhZGRyZXNzIHNhbml0aXplciBkb24ndCBkbyBpdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvTm9TdGFydFRpbWVOaWdodGx5LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9zdGFydC9Ob1N0YXJ0VGltZU5pZ2h0bHktcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvTm9TdGFydFRpbWVOaWdodGx5LXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorKC0xfDI1NSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L05vU3RhcnRUaW1lTmlnaHRseS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvTm9TdGFydFRpbWVOaWdodGx5LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3NTZlYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L05vU3RhcnRUaW1lTmlnaHRseS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXldBUk5JTkc6IE5vIG5pZ2h0bHkgc3RhcnQgdGltZSBmb3VuZCBwbGVhc2Ugc2V0IGluIENUZXN0Q29uZmlnXC5jbWFrZSBvciBEYXJ0Q29uZmlnXC5jbWFrZQorQ01ha2UgRXJyb3IgYXQgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L05vU3RhcnRUaW1lTmlnaHRseS90ZXN0XC5jbWFrZTpbMC05XSsgXChjdGVzdF9zdGFydFwpOgorICBjdGVzdF9zdGFydCB1bmtub3duIGVycm9yXC4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF9zdGFydC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9zdGFydC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggZGE4NWIzOS4uZjExZjFlYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNDgsNiArNDgsOCBAQAogICAgICAgICAgICAgICAgICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vVG9vTWFueUFyZ3MtYnVpbGQKICAgICAgICAgICAgICAgICAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L1Rvb01hbnlBcmdzLWJ1aWxkCiAgICAgICAgICAgICAgICAgJHtSdW5DTWFrZV9CSU5BUllfRElSfS9Ub29NYW55QXJncy1idWlsZCkKK3J1bl9jdGVzdF9zdGFydChOb1N0YXJ0VGltZUV4cGVyaW1lbnRhbCBFeHBlcmltZW50YWwpCitydW5fY3Rlc3Rfc3RhcnQoTm9TdGFydFRpbWVOaWdodGx5IE5pZ2h0bHkpCiAKIGZ1bmN0aW9uKHJ1bl9Db25maWdJbkJ1aWxkKQogICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vQ29uZmlnSW5CdWlsZC1idWlsZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L3Rlc3QuY21ha2UuaW4gYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF9zdGFydC90ZXN0LmNtYWtlLmluCmluZGV4IDhjZDNjZmYuLjQwNjNlY2UgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3N0YXJ0L3Rlc3QuY21ha2UuaW4KKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3Rfc3RhcnQvdGVzdC5jbWFrZS5pbgpAQCAtOCw3ICs4LDkgQEAKIHNldChDVEVTVF9DTUFLRV9HRU5FUkFUT1JfUExBVEZPUk0gICAgICAiQFJ1bkNNYWtlX0dFTkVSQVRPUl9QTEFURk9STUAiKQogc2V0KENURVNUX0NNQUtFX0dFTkVSQVRPUl9UT09MU0VUICAgICAgICJAUnVuQ01ha2VfR0VORVJBVE9SX1RPT0xTRVRAIikKIHNldChDVEVTVF9CVUlMRF9DT05GSUdVUkFUSU9OICAgICAgICAgICAiJEVOVntDTUFLRV9DT05GSUdfVFlQRX0iKQotc2V0KENURVNUX05JR0hUTFlfU1RBUlRfVElNRSAgICAgICAgICAgICIwMTowMDowMCBVVEMiKQoraWYoTk9UICJAQ0FTRV9OQU1FQCIgTUFUQ0hFUyAiXk5vU3RhcnRUaW1lIikKKyAgc2V0KENURVNUX05JR0hUTFlfU1RBUlRfVElNRSAgICAgICAgICAgICIwMTowMDowMCBVVEMiKQorZW5kaWYoKQogCiBmdW5jdGlvbihzZXR1cF90ZXN0cykKICAgY3Rlc3Rfc3RhcnQoJHtjdGVzdF9zdGFydF9hcmdzfSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNjg3N2U2YS4uYjgyMzM1ZiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsNiArMSw5IEBACiBpbmNsdWRlKFJ1bkNUZXN0KQogc2V0KFJ1bkNNYWtlX1RFU1RfVElNRU9VVCA2MCkKIAordW5zZXQoRU5We0NURVNUX1BBUkFMTEVMX0xFVkVMfSkKK3Vuc2V0KEVOVntDVEVTVF9PVVRQVVRfT05fRkFJTFVSRX0pCisKIHNldChDQVNFX0NURVNUX1RFU1RfQVJHUyAiIikKIHNldChDQVNFX0NURVNUX1RFU1RfTE9BRCAiIikKIApAQCAtNzEsNyArNzQsNzMgQEAKIGFkZF90ZXN0KE5BTUUgRmFpbGluZ1Rlc3QgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIG5vX3N1Y2hfY29tbWFuZCkKICAgXV0pCiAKLSAgdW5zZXQoRU5We0NURVNUX1BBUkFMTEVMX0xFVkVMfSkKICAgcnVuX2N0ZXN0KFRlc3RPdXRwdXRTaXplKQogZW5kZnVuY3Rpb24oKQogcnVuX1Rlc3RPdXRwdXRTaXplKCkKKworcnVuX2N0ZXN0X3Rlc3QoVGVzdFJlcGVhdEJhZDEgUkVQRUFUIFVOS05PV046MykKK3J1bl9jdGVzdF90ZXN0KFRlc3RSZXBlYXRCYWQyIFJFUEVBVCBVTlRJTF9GQUlMOi0xKQorCitmdW5jdGlvbihydW5fVGVzdFJlcGVhdCBjYXNlIHJldHVybl92YWx1ZSApCisgIHNldChDQVNFX0NURVNUX1RFU1RfQVJHUyBSRVRVUk5fVkFMVUUgcmVzdWx0IEVYQ0xVREUgUnVuQ01ha2VWZXJzaW9uICR7QVJHTn0pCisgIHN0cmluZyhDT05DQVQgc3VmZml4X2NvZGUgW1sKK2FkZF90ZXN0KE5BTUUgdGVzdFJlcGVhdAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUQgQ09VTlRfRklMRT0ke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vY291bnQuY21ha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC1QICJdXSAiJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9UZXN0UmVwZWF0JHtjYXNlfSIgW1suY21ha2UiKQorc2V0X3Byb3BlcnR5KFRFU1QgdGVzdFJlcGVhdCBQUk9QRVJUWSBUSU1FT1VUIDUpCisgIF1dKQorICBzdHJpbmcoQVBQRU5EIENBU0VfQ01BS0VMSVNUU19TVUZGSVhfQ09ERSAiJHtzdWZmaXhfY29kZX0iKQorCisgIHJ1bl9jdGVzdChUZXN0UmVwZWF0JHtjYXNlfSkKKworICAjd3JpdGUgdG8gZW5kIG9mIHRoZSB0ZXN0IGZpbGUgbG9naWMgdG8gVmVyaWZ5IHdlIGdldCB0aGUgZXhwZWN0ZWQKKyAgI3JldHVybiBjb2RlCisgIHN0cmluZyhSRVBMQUNFICJSRVRVUk5fVkFMVUU6IiAiIiByZXR1cm5fdmFsdWUgIiR7cmV0dXJuX3ZhbHVlfSIgKQorICBmaWxlKEFQUEVORCAiJHtSdW5DTWFrZV9CSU5BUllfRElSfS9UZXN0UmVwZWF0JHtjYXNlfS90ZXN0LmNtYWtlIgorIgorCisgIHNldChleHBlY3RlZF9yZXN1bHQgJHtyZXR1cm5fdmFsdWV9KQorICBtZXNzYWdlKFNUQVRVUyBcJHtyZXN1bHR9KQorICBpZihOT1QgcmVzdWx0IEVRVUFMIGV4cGVjdGVkX3Jlc3VsdCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SIFwiZXhwZWN0ZWQgYSByZXR1cm4gdmFsdWUgb2Y6IFwke2V4cGVjdGVkX3Jlc3VsdH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBnb3Q6IFwke3Jlc3VsdH1cIikKKyAgZW5kaWYoKQorIgorICApCitlbmRmdW5jdGlvbigpCisKK3J1bl9UZXN0UmVwZWF0KFVudGlsRmFpbCBSRVRVUk5fVkFMVUU6MSBSRVBFQVQgVU5USUxfRkFJTDozKQorcnVuX1Rlc3RSZXBlYXQoVW50aWxQYXNzIFJFVFVSTl9WQUxVRTowIFJFUEVBVCBVTlRJTF9QQVNTOjMpCitydW5fVGVzdFJlcGVhdChBZnRlclRpbWVvdXQgUkVUVVJOX1ZBTFVFOjAgUkVQRUFUIEFGVEVSX1RJTUVPVVQ6MykKKworIyB0ZXN0IHJlcGVhdCBhbmQgbm90IHJ1biB0ZXN0cyBpbnRlcmFjdCBjb3JyZWN0bHkKK3NldChDQVNFX0NNQUtFTElTVFNfU1VGRklYX0NPREUgW1sKK2FkZF90ZXN0KE5BTUUgdGVzdE5vdFJ1bgorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0vZG9lc250X2V4aXN0KQorICBzZXRfcHJvcGVydHkoVEVTVCB0ZXN0Tm90UnVuIFBST1BFUlRZIFRJTUVPVVQgNSkKKyAgXV0pCitydW5fVGVzdFJlcGVhdChOb3RSdW4gUkVUVVJOX1ZBTFVFOjEgUkVQRUFUIFVOVElMX1BBU1M6MykKK3Vuc2V0KENBU0VfQ01BS0VMSVNUU19TVUZGSVhfQ09ERSkKKworIyB0ZXN0IC0tc3RvcC1vbi1mYWlsdXJlCitmdW5jdGlvbihydW5fc3RvcF9vbl9mYWlsdXJlKQorICBzZXQoQ0FTRV9DVEVTVF9URVNUX0FSR1MgRVhDTFVERSBSdW5DTWFrZVZlcnNpb24pCisgIHNldChDQVNFX0NNQUtFTElTVFNfU1VGRklYX0NPREUgW1sKK2FkZF90ZXN0KE5BTUUgU3RvcHBpbmdUZXN0IENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBmYWxzZSkKK2FkZF90ZXN0KE5BTUUgTm90UnVuVGVzdCBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgdHJ1ZSkKKyAgXV0pCisKKyAgcnVuX2N0ZXN0X3Rlc3Qoc3RvcC1vbi1mYWlsdXJlIFNUT1BfT05fRkFJTFVSRSkKK2VuZGZ1bmN0aW9uKCkKK3J1bl9zdG9wX29uX2ZhaWx1cmUoKQorCisjIE1ha2Ugc3VyZSBlbnZpcm9ubWVudCBnZXRzIGxvZ2dlZAorZnVuY3Rpb24ocnVuX2Vudmlyb25tZW50KQorICBzZXQoRU5We0JBRF9FTlZJUk9OTUVOVF9WQVJJQUJMRX0gIkJhZCBlbnZpcm9ubWVudCB2YXJpYWJsZSIpCisgIHNldChDQVNFX0NNQUtFTElTVFNfU1VGRklYX0NPREUgW1sKK3NldF9wcm9wZXJ0eShURVNUIFJ1bkNNYWtlVmVyc2lvbiBQUk9QRVJUWSBFTlZJUk9OTUVOVCAiRU5WMT1lbnYxO0VOVjI9ZW52MiIpCisgIF1dKQorCisgIHJ1bl9jdGVzdChUZXN0RW52aXJvbm1lbnQpCitlbmRmdW5jdGlvbigpCitydW5fZW52aXJvbm1lbnQoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0RW52aXJvbm1lbnQtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RFbnZpcm9ubWVudC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWM5NzMxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0RW52aXJvbm1lbnQtY2hlY2suY21ha2UKQEAgLTAsMCArMSwxMCBAQAorZmlsZShSRUFEICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vVGVzdGluZy9UQUciIF90YWcpCitzdHJpbmcoUkVHRVggUkVQTEFDRSAiXihbXlxuXSopXG4uKiQiICJcXDEiIF9kYXRlICIke190YWd9IikKK2ZpbGUoUkVBRCAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L1Rlc3RpbmcvJHtfZGF0ZX0vVGVzdC54bWwiIF90ZXN0X2NvbnRlbnRzKQorCitpZihOT1QgX3Rlc3RfY29udGVudHMgTUFUQ0hFUyAiPFZhbHVlPkVOVjE9ZW52MVxuRU5WMj1lbnYyXG4jQ1RFU1RfUkVTT1VSQ0VfR1JPVVBfQ09VTlQ9PC9WYWx1ZT4iKQorICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJDb3VsZCBub3QgZmluZCBleHBlY3RlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gVGVzdC54bWwiKQorZW5kaWYoKQoraWYoX3Rlc3RfY29udGVudHMgTUFUQ0hFUyAiQkFEX0VOVklST05NRU5UX1ZBUklBQkxFIikKKyAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgQkFEX0VOVklST05NRU5UX1ZBUklBQkxFIGluIFRlc3QueG1sIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEFmdGVyVGltZW91dC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QWZ0ZXJUaW1lb3V0LXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2NTdjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEFmdGVyVGltZW91dC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgcHJvamVjdCBbXgorXSovVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QWZ0ZXJUaW1lb3V0LWJ1aWxkCisgICAgU3RhcnQgMTogdGVzdFJlcGVhdAorMS8xIFRlc3QgIzE6IHRlc3RSZXBlYXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cKlwqXCpUaW1lb3V0ICtbMC05Ll0rIHNlYworICAgIFN0YXJ0IDE6IHRlc3RSZXBlYXQKKyAgICBUZXN0ICMxOiB0ZXN0UmVwZWF0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgUGFzc2VkICtbMC05Ll0rIHNlYworKworMTAwJSB0ZXN0cyBwYXNzZWQsIDAgdGVzdHMgZmFpbGVkIG91dCBvZiAxCisrCitUb3RhbCBUZXN0IHRpbWUgXChyZWFsXCkgPSArWzAtOS5dKyBzZWMkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRBZnRlclRpbWVvdXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRBZnRlclRpbWVvdXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkZTRmMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEFmdGVyVGltZW91dC5jbWFrZQpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlKCIke0NPVU5UX0ZJTEV9IiBPUFRJT05BTCkKK2lmKE5PVCBDT1VOVCkKKyAgc2V0KENPVU5UIDApCitlbmRpZigpCittYXRoKEVYUFIgQ09VTlQgIiR7Q09VTlR9ICsgMSIpCitmaWxlKFdSSVRFICIke0NPVU5UX0ZJTEV9IiAic2V0KENPVU5UICR7Q09VTlR9KVxuIikKK2lmKE5PVCBDT1VOVCBFUVVBTCAyKQorICBtZXNzYWdlKCJ0aGlzIHRlc3QgdGltZXMgb3V0IGV4Y2VwdCBvbiB0aGUgMm5kIHJ1biIpCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgc2xlZXAgMTApCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRCYWQxLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRCYWQxLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEJhZDEtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisoLTF8MjU1KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QmFkMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QmFkMS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3Y2ZmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRCYWQxLXN0ZGVyci50eHQKQEAgLTAsMCArMSBAQAorUmVwZWF0IG9wdGlvbiBpbnZhbGlkIHZhbHVlOiBVTktOT1dOOjMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEJhZDItcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEJhZDItcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTdlMmRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0QmFkMi1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRCYWQyLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRCYWQyLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1Y2VmNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdEJhZDItc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACitSZXBlYXQgb3B0aW9uIGludmFsaWQgdmFsdWU6IFVOVElMX0ZBSUw6LTEKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdE5vdFJ1bi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0Tm90UnVuLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdE5vdFJ1bi1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKygtMXwyNTUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXROb3RSdW4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdE5vdFJ1bi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTkzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXROb3RSdW4tc3RkZXJyLnR4dApAQCAtMCwwICsxIEBACisuKlVuYWJsZSB0byBmaW5kIGV4ZWN1dGFibGUuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0Tm90UnVuLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXROb3RSdW4tc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmM5OGJjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0Tm90UnVuLXN0ZG91dC50eHQKQEAgLTAsMCArMSw1IEBACisuKgorNTAlIHRlc3RzIHBhc3NlZCwgMSB0ZXN0cyBmYWlsZWQgb3V0IG9mIDIKKy4qCitUaGUgZm9sbG93aW5nIHRlc3RzIEZBSUxFRDoKKy4qdGVzdE5vdFJ1bi4qTm90IFJ1bi4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXROb3RSdW4uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXROb3RSdW4uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkZTRmMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdE5vdFJ1bi5jbWFrZQpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlKCIke0NPVU5UX0ZJTEV9IiBPUFRJT05BTCkKK2lmKE5PVCBDT1VOVCkKKyAgc2V0KENPVU5UIDApCitlbmRpZigpCittYXRoKEVYUFIgQ09VTlQgIiR7Q09VTlR9ICsgMSIpCitmaWxlKFdSSVRFICIke0NPVU5UX0ZJTEV9IiAic2V0KENPVU5UICR7Q09VTlR9KVxuIikKK2lmKE5PVCBDT1VOVCBFUVVBTCAyKQorICBtZXNzYWdlKCJ0aGlzIHRlc3QgdGltZXMgb3V0IGV4Y2VwdCBvbiB0aGUgMm5kIHJ1biIpCisgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgc2xlZXAgMTApCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbEZhaWwtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdFVudGlsRmFpbC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOTFhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbEZhaWwtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0IHByb2plY3QgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdFVudGlsRmFpbC1idWlsZAorICAgIFN0YXJ0IDE6IHRlc3RSZXBlYXQKKyAgICBUZXN0ICMxOiB0ZXN0UmVwZWF0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgUGFzc2VkICtbMC05Ll0rIHNlYworICAgIFN0YXJ0IDE6IHRlc3RSZXBlYXQKKyAgICBUZXN0ICMxOiB0ZXN0UmVwZWF0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXCpcKlwqRmFpbGVkICtbMC05Ll0rIHNlYworKworMCUgdGVzdHMgcGFzc2VkLCAxIHRlc3RzIGZhaWxlZCBvdXQgb2YgMQorKworVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gK1swLTkuXSsgc2VjCisrCitUaGUgZm9sbG93aW5nIHRlc3RzIEZBSUxFRDoKK1sJIF0rMSAtIHRlc3RSZXBlYXQgXChGYWlsZWRcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdFVudGlsRmFpbC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3QvVGVzdFJlcGVhdFVudGlsRmFpbC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWIwZDhhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxGYWlsLmNtYWtlCkBAIC0wLDAgKzEsOSBAQAoraW5jbHVkZSgiJHtDT1VOVF9GSUxFfSIgT1BUSU9OQUwpCitpZihOT1QgQ09VTlQpCisgIHNldChDT1VOVCAwKQorZW5kaWYoKQorbWF0aChFWFBSIENPVU5UICIke0NPVU5UfSArIDEiKQorZmlsZShXUklURSAiJHtDT1VOVF9GSUxFfSIgInNldChDT1VOVCAke0NPVU5UfSlcbiIpCitpZihDT1VOVCBFUVVBTCAyKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJ0aGlzIHRlc3QgZmFpbHMgb24gdGhlIDJuZCBydW4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxQYXNzLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbFBhc3Mtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzY5MzlhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxQYXNzLXN0ZG91dC50eHQKQEAgLTAsMCArMSwxMCBAQAorVGVzdCBwcm9qZWN0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbFBhc3MtYnVpbGQKKyAgICBTdGFydCAxOiB0ZXN0UmVwZWF0CisxLzEgVGVzdCAjMTogdGVzdFJlcGVhdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlwqXCpcKkZhaWxlZCArWzAtOS5dKyBzZWMKKyAgICBTdGFydCAxOiB0ZXN0UmVwZWF0CisgICAgVGVzdCAjMTogdGVzdFJlcGVhdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIFBhc3NlZCArWzAtOS5dKyBzZWMKKysKKzEwMCUgdGVzdHMgcGFzc2VkLCAwIHRlc3RzIGZhaWxlZCBvdXQgb2YgMQorKworVG90YWwgVGVzdCB0aW1lIFwocmVhbFwpID0gK1swLTkuXSsgc2VjJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxQYXNzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9UZXN0UmVwZWF0VW50aWxQYXNzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjI1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L1Rlc3RSZXBlYXRVbnRpbFBhc3MuY21ha2UKQEAgLTAsMCArMSw5IEBACitpbmNsdWRlKCIke0NPVU5UX0ZJTEV9IiBPUFRJT05BTCkKK2lmKE5PVCBDT1VOVCkKKyAgc2V0KENPVU5UIDApCitlbmRpZigpCittYXRoKEVYUFIgQ09VTlQgIiR7Q09VTlR9ICsgMSIpCitmaWxlKFdSSVRFICIke0NPVU5UX0ZJTEV9IiAic2V0KENPVU5UICR7Q09VTlR9KVxuIikKK2lmKE5PVCBDT1VOVCBFUVVBTCAyKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJ0aGlzIHRlc3QgcGFzc2VzIG9ubHkgb24gdGhlIDJuZCBydW4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvY3Rlc3RfdGVzdC9zdG9wLW9uLWZhaWx1cmUtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3Qvc3RvcC1vbi1mYWlsdXJlLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0YmNlMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3Rlc3Qvc3RvcC1vbi1mYWlsdXJlLXN0ZG91dC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdCBwcm9qZWN0IFteCitdKi9UZXN0cy9SdW5DTWFrZS9jdGVzdF90ZXN0L3N0b3Atb24tZmFpbHVyZS1idWlsZAorICAgIFN0YXJ0IDE6IFJ1bkNNYWtlVmVyc2lvbgorMS8zIFRlc3QgIzE6IFJ1bkNNYWtlVmVyc2lvbiAuLi4uLi4uLi4uLi4uLi4uLi4gICBQYXNzZWQgICAgK1swLTkuXSsgc2VjCisgICAgU3RhcnQgMjogU3RvcHBpbmdUZXN0CisyLzMgVGVzdCAjMjogU3RvcHBpbmdUZXN0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLlwqXCpcKkZhaWxlZCAgICArWzAtOS5dKyBzZWMKKysKKzUwJSB0ZXN0cyBwYXNzZWQsIDEgdGVzdHMgZmFpbGVkIG91dCBvZiAyCisrCitUb3RhbCBUZXN0IHRpbWUgXChyZWFsXCkgPSArWzAtOS5dKyBzZWMKKysKK1RoZSBmb2xsb3dpbmcgdGVzdHMgRkFJTEVEOgorWwkgXSsyIC0gU3RvcHBpbmdUZXN0IFwoRmFpbGVkXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9jdGVzdF91cGRhdGUvdGVzdC5jbWFrZS5pbiBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3VwZGF0ZS90ZXN0LmNtYWtlLmluCmluZGV4IDI1Yjg0MjMuLjAxYWFiMjYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3VwZGF0ZS90ZXN0LmNtYWtlLmluCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2N0ZXN0X3VwZGF0ZS90ZXN0LmNtYWtlLmluCkBAIC0xMCw3ICsxMCw3IEBACiBzZXQoQ1RFU1RfQ01BS0VfR0VORVJBVE9SX1RPT0xTRVQgICAgICAgIkBSdW5DTWFrZV9HRU5FUkFUT1JfVE9PTFNFVEAiKQogc2V0KENURVNUX0JVSUxEX0NPTkZJR1VSQVRJT04gICAgICAgICAgICIkRU5We0NNQUtFX0NPTkZJR19UWVBFfSIpCiAKLSMgRklYTUU6IHVwZGF0ZSB0ZXN0IHRvIGRvIHNvbWV0aW5nIG1lYW5pbmdmdWwgd2l0aCB0aGlzLgorIyBGSVhNRTogdXBkYXRlIHRlc3QgdG8gZG8gc29tZXRoaW5nIG1lYW5pbmdmdWwgd2l0aCB0aGlzLgogc2V0KENURVNUX1VQREFURV9DT01NQU5EICAgICAgICAgICAgICAgICJub3QtYWN0dWFsbHktdXNlZCIpCiAKIHNldChjdGVzdF90ZXN0X2FyZ3MgIkBDQVNFX0NURVNUX1VQREFURV9BUkdTQCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyNzU1MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9FY2hvVmFyaWFibGUtc3RkZXJyLnR4dApAQCAtMCwwICsxLDMgQEAKK0NNYWtlIEVycm9yIGF0IFteCitdKkVjaG9WYXJpYWJsZU91dHB1dC5jbWFrZToyIFwobWVzc2FnZVwpOgorICBUZXh0IHRvIHN0ZGVycgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjODY4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLS0gVGV4dCB0byBzdGRvdXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9FY2hvVmFyaWFibGUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OTk5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlLmNtYWtlCkBAIC0wLDAgKzEsMjMgQEAKK2V4ZWN1dGVfcHJvY2VzcygKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1QICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRWNob1ZhcmlhYmxlT3V0cHV0LmNtYWtlCisgIE9VVFBVVF9WQVJJQUJMRSBzdGRvdXQKKyAgRVJST1JfUVVJRVQKKyAgRUNIT19PVVRQVVRfVkFSSUFCTEUKKykKKworZmlsZShSRUFEICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vRWNob1ZhcmlhYmxlLXN0ZG91dC50eHQgZXhwZWN0ZWRfc3Rkb3V0KQoraWYgKE5PVCBzdGRvdXQgTUFUQ0hFUyAiJHtleHBlY3RlZF9zdGRvdXR9IikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAic3Rkb3V0IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQgc3Rkb3V0IikKK2VuZGlmKCkKKworZXhlY3V0ZV9wcm9jZXNzKAorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLVAgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9FY2hvVmFyaWFibGVPdXRwdXQuY21ha2UKKyAgRVJST1JfVkFSSUFCTEUgc3RkZXJyCisgIE9VVFBVVF9RVUlFVAorICBFQ0hPX0VSUk9SX1ZBUklBQkxFCispCisKK2ZpbGUoUkVBRCAke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0VjaG9WYXJpYWJsZS1zdGRlcnIudHh0IGV4cGVjdGVkX3N0ZGVycikKK2lmIChOT1Qgc3RkZXJyIE1BVENIRVMgIiR7ZXhwZWN0ZWRfc3RkZXJyfSIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgInN0ZGVyciBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkIHN0ZGVyciIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvRWNob1ZhcmlhYmxlT3V0cHV0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZU91dHB1dC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjM2NTY3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL0VjaG9WYXJpYWJsZU91dHB1dC5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK21lc3NhZ2UoU1RBVFVTICJUZXh0IHRvIHN0ZG91dCIpCittZXNzYWdlKEZBVEFMX0VSUk9SICJUZXh0IHRvIHN0ZGVyciIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhlY3V0ZV9wcm9jZXNzL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBiMjAzYWFiLi44OWFkNmIyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9leGVjdXRlX3Byb2Nlc3MvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4ZWN1dGVfcHJvY2Vzcy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTI0LDMgKzI0LDUgQEAKIHJ1bl9jbWFrZV9jb21tYW5kKEVjaG9Db21tYW5kMyAke0NNQUtFX0NPTU1BTkR9CiAgIC1EQ0hFQ0tfRVJST1JfT1VUUFVUX0xPQ0FUSU9OPVRSVUUgLVAKICAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9FY2hvQ29tbWFuZC5jbWFrZSkKKworcnVuX2NtYWtlX2NvbW1hbmQoRWNob1ZhcmlhYmxlICR7Q01BS0VfQ09NTUFORH0gLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9FY2hvVmFyaWFibGUuY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leGl0X2NvZGUuYyBiL1Rlc3RzL1J1bkNNYWtlL2V4aXRfY29kZS5jCmluZGV4IDNlYmEwMTkuLjlmYThlY2EgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2V4aXRfY29kZS5jCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4aXRfY29kZS5jCkBAIC0yMSw3ICsyMSw4IEBACiAgIH0KICAgaWYgKHN0cmNtcChzdHIsIHN1YnN0cmluZ19zdWNjZXNzKSA9PSAwKSB7CiAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLSAgfSBlbHNlIGlmIChzdHJjbXAoc3RyLCBzdWJzdHJpbmdfZmFpbHVyZSkgPT0gMCkgeworICB9CisgIGlmIChzdHJjbXAoc3RyLCBzdWJzdHJpbmdfZmFpbHVyZSkgPT0gMCkgewogICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgIH0KICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZmluZCBzdHJpbmcgJyVzJyBpbiAnJXMnXG4iLCBzdWJzdHJpbmdfc3VjY2VzcywKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L0RlcGVuZE9uRG91YmxlRXhwb3J0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvRGVwZW5kT25Eb3VibGVFeHBvcnQtc3RkZXJyLnR4dAppbmRleCBiNzhjN2U0Li5lOGY4YTA5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvRGVwZW5kT25Eb3VibGVFeHBvcnQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvRGVwZW5kT25Eb3VibGVFeHBvcnQtc3RkZXJyLnR4dApAQCAtMyw4ICszLDcgQEAKICAgdGhhdCBpcyBub3QgaW4gdGhpcyBleHBvcnQgc2V0LCBidXQgaW4gbXVsdGlwbGUgb3RoZXIgZXhwb3J0IHNldHM6CiAgIC4qL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9EZXBlbmRPbkRvdWJsZUV4cG9ydC1idWlsZC9leHBvcnRzZXQuY21ha2UsCiAgIC4qL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9EZXBlbmRPbkRvdWJsZUV4cG9ydC1idWlsZC9tYW51YWwuY21ha2UuCi0KLQorKwogICBBbiBleHBvcnRlZCB0YXJnZXQgY2Fubm90IGRlcGVuZCB1cG9uIGFub3RoZXIgdGFyZ2V0IHdoaWNoIGlzIGV4cG9ydGVkCiAgIG11bHRpcGxlIHRpbWVzLiAgQ29uc2lkZXIgY29uc29saWRhdGluZyB0aGUgZXhwb3J0cyBvZiB0aGUgImRvdWJsZWV4cG9ydGVkIgogICB0YXJnZXQgdG8gYSBzaW5nbGUgZXhwb3J0LgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1ORVctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtTkVXLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1ORVctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1ORVctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGFiN2IxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLU5FVy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0NNYWtlIEVycm9yIGF0IFJlcGVhdC5jbWFrZTpbMC05XSsgXChleHBvcnRcKToKKyAgZXhwb3J0IGNvbW1hbmQgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlCisKKyAgICBmb28uY21ha2UKKworICBEaWQgeW91IG1pc3MgJ0FQUEVORCcga2V5d29yZFw/CitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBSZXBlYXQtQ01QMDEwMy1ORVcuY21ha2U6WzAtOV0rIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQorCisKK0NNYWtlIEVycm9yIGF0IFJlcGVhdC9DTWFrZUxpc3RzLnR4dDpbMC05XSsgXChleHBvcnRcKToKKyAgZXhwb3J0IGNvbW1hbmQgYWxyZWFkeSBzcGVjaWZpZWQgZm9yIHRoZSBmaWxlCisKKyAgICAuKy9mb28uY21ha2UKKworICBEaWQgeW91IG1pc3MgJ0FQUEVORCcga2V5d29yZFw/CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtTkVXLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLU5FVy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTM4MWRmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLU5FVy5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2NtYWtlX3BvbGljeShTRVQgQ01QMDEwMyBORVcpCitpbmNsdWRlKFJlcGVhdC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1PTEQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtT0xELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTM0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtT0xELmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTAzIE9MRCkKK2luY2x1ZGUoUmVwZWF0LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC1DTVAwMTAzLVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1XQVJOLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlODQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1XQVJOLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyNiBAQAorQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IFJlcGVhdC5jbWFrZTpbMC05XSsgXChleHBvcnRcKToKKyAgUG9saWN5IENNUDAxMDMgaXMgbm90IHNldDogTXVsdGlwbGUgZXhwb3J0XChcKSB3aXRoIHNhbWUgRklMRSB3aXRob3V0IEFQUEVORAorICBpcyBub3QgYWxsb3dlZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTAzIiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UKKyAgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgZXhwb3J0XChcKSBjb21tYW5kIGFscmVhZHkgc3BlY2lmaWVkIGZvciB0aGUgZmlsZQorCisgICAgZm9vLmNtYWtlCisKKyAgRGlkIHlvdSBtaXNzICdBUFBFTkQnIGtleXdvcmRcPworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgUmVwZWF0LUNNUDAxMDMtV0FSTi5jbWFrZTpbMC05XSsgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KKworQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IFJlcGVhdC9DTWFrZUxpc3RzLnR4dDpbMC05XSsgXChleHBvcnRcKToKKyAgUG9saWN5IENNUDAxMDMgaXMgbm90IHNldDogTXVsdGlwbGUgZXhwb3J0XChcKSB3aXRoIHNhbWUgRklMRSB3aXRob3V0IEFQUEVORAorICBpcyBub3QgYWxsb3dlZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTAzIiBmb3IgcG9saWN5IGRldGFpbHMuICBVc2UKKyAgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgZXhwb3J0XChcKSBjb21tYW5kIGFscmVhZHkgc3BlY2lmaWVkIGZvciB0aGUgZmlsZQorCisgICAgLisvZm9vLmNtYWtlCisKKyAgRGlkIHlvdSBtaXNzICdBUFBFTkQnIGtleXdvcmRcPworVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtV0FSTi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQtQ01QMDEwMy1XQVJOLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjMwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LUNNUDAxMDMtV0FSTi5jbWFrZQpAQCAtMCwwICsxIEBACitpbmNsdWRlKFJlcGVhdC5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjYyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUmVwZWF0LmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorYWRkX2xpYnJhcnkoZm9vIElOVEVSRkFDRSkKK2V4cG9ydChUQVJHRVRTIGZvbyBGSUxFIGZvby5jbWFrZSkKK2V4cG9ydChUQVJHRVRTIGZvbyBGSUxFIGZvby5jbWFrZSkKK2FkZF9zdWJkaXJlY3RvcnkoUmVwZWF0KQoraW5jbHVkZShDTWFrZVBhY2thZ2VDb25maWdIZWxwZXJzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1JlcGVhdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3ZjZjYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SZXBlYXQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyIEBACithZGRfbGlicmFyeShiYXIgSU5URVJGQUNFKQorZXhwb3J0KFRBUkdFVFMgYmFyIEZJTEUgJHtDTUFLRV9CSU5BUllfRElSfS9mb28uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZXhwb3J0L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA0ZDJmMjE3Li4xYzc0NzYyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9leHBvcnQvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2V4cG9ydC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTIsNiArMiw5IEBACiAKIHJ1bl9jbWFrZShDdXN0b21UYXJnZXQpCiBydW5fY21ha2UoRW1wdHkpCitydW5fY21ha2UoUmVwZWF0LUNNUDAxMDMtV0FSTikKK3J1bl9jbWFrZShSZXBlYXQtQ01QMDEwMy1PTEQpCitydW5fY21ha2UoUmVwZWF0LUNNUDAxMDMtTkVXKQogcnVuX2NtYWtlKFRhcmdldE5vdEZvdW5kKQogcnVuX2NtYWtlKEFwcGVuZEV4cG9ydCkKIHJ1bl9jbWFrZShPbGRJZmFjZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMmZmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL1J1bkNNYWtlVGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjNkNTdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsNTUgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2KQoraW5jbHVkZShSdW5DTWFrZSkKKworIyBGdW5jdGlvbiB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHByb2plY3QuCitmdW5jdGlvbihydW5faW5zdGFsbF90ZXN0IGNhc2UpCisgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke2Nhc2V9LWJ1aWxkKQorICBzZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTiAxKQorICBmaWxlKFJFTU9WRV9SRUNVUlNFICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0iKQorICBydW5fY21ha2UoJHtjYXNlfSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHtjYXNlfS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLWNvbmZpZyBEZWJ1ZykKKyAgIyBDaGVjayAiYWxsIiBjb21wb25lbnRzLgorICBzZXQoQ01BS0VfSU5TVEFMTF9QUkVGSVggJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsKQorICBydW5fY21ha2VfY29tbWFuZCgke2Nhc2V9LWFsbCAke0NNQUtFX0NPTU1BTkR9IC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9JHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0gLURCVUlMRF9UWVBFPURlYnVnIC1QIGNtYWtlX2luc3RhbGwuY21ha2UpCitlbmRmdW5jdGlvbigpCisKK2lmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkRhcndpbiIpCisgIGlmKE5PVCBDTWFrZV9JTlNUQUxMX05BTUVfVE9PTF9CVUcpCisgICAgcnVuX2luc3RhbGxfdGVzdChtYWNvcykKKyAgICBydW5faW5zdGFsbF90ZXN0KG1hY29zLXVucmVzb2x2ZWQpCisgICAgcnVuX2luc3RhbGxfdGVzdChtYWNvcy1jb25mbGljdCkKKyAgICBydW5faW5zdGFsbF90ZXN0KG1hY29zLW5vdGZpbGUpCisgIGVuZGlmKCkKKyAgcnVuX2NtYWtlKHByb2plY3QpCisgIHJ1bl9jbWFrZShiYWRhcmdzMSkKKyAgcnVuX2NtYWtlKGJhZGFyZ3MyKQorZWxzZWlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIldpbmRvd3MiKQorICBydW5faW5zdGFsbF90ZXN0KHdpbmRvd3MpCisgIHJ1bl9pbnN0YWxsX3Rlc3Qod2luZG93cy11bnJlc29sdmVkKQorICBydW5faW5zdGFsbF90ZXN0KHdpbmRvd3MtY29uZmxpY3QpCisgIHJ1bl9pbnN0YWxsX3Rlc3Qod2luZG93cy1ub3RmaWxlKQorICBydW5fY21ha2UocHJvamVjdCkKKyAgcnVuX2NtYWtlKGJhZGFyZ3MxKQorICBydW5fY21ha2UoYmFkYXJnczIpCitlbHNlaWYoQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQorICBpZihERUZJTkVEIEVOVntMREZMQUdTfSkKKyAgICAjIFNvbWUgc2V0dXBzIHByZWJha2UgZGlzYWJsZS1uZXctZHRhZ3MgaW50byBMREZMQUdTCisgICAgc3RyaW5nKFJFUExBQ0UgIi1XbCwtLWRpc2FibGUtbmV3LWR0YWdzIiAiIiBuZXdfbGRmbGFncyAiJEVOVntMREZMQUdTfSIpCisgICAgc2V0KEVOVntMREZMQUdTfSAiJHtuZXdfbGRmbGFnc30iKQorICBlbmRpZigpCisKKyAgaWYoTk9UIENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXlhMIikKKyAgICBydW5faW5zdGFsbF90ZXN0KGxpbnV4KQorICBlbmRpZigpCisgIHJ1bl9pbnN0YWxsX3Rlc3QobGludXgtdW5yZXNvbHZlZCkKKyAgcnVuX2luc3RhbGxfdGVzdChsaW51eC1jb25mbGljdCkKKyAgcnVuX2luc3RhbGxfdGVzdChsaW51eC1ub3RmaWxlKQorICBydW5fY21ha2UocHJvamVjdCkKKyAgcnVuX2NtYWtlKGJhZGFyZ3MxKQorICBydW5fY21ha2UoYmFkYXJnczIpCitlbHNlKCkKKyAgcnVuX2NtYWtlKHVuc3VwcG9ydGVkKQorZW5kaWYoKQorCitydW5faW5zdGFsbF90ZXN0KHZhcmlhYmxlLXByb3BhZ2F0aW9uKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvYmFkYXJnczEtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODc0NDczCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvYmFkYXJnczEtc3RkZXJyLnR4dApAQCAtMCwwICsxLDE4IEBACiteQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IGJhZGFyZ3MxXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIFlvdSBoYXZlIHVzZWQgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgaW4gcHJvamVjdCBtb2RlXC4gIFRoaXMgaXMKKyAgcHJvYmFibHkgbm90IHdoYXQgeW91IGludGVuZGVkIHRvIGRvXC4gIEluc3RlYWQsIHBsZWFzZSBjb25zaWRlciB1c2luZyBpdCBpbgorICBhbiBpbnN0YWxsXChDT0RFXCkgb3IgaW5zdGFsbFwoU0NSSVBUXCkgY29tbWFuZFwuICBGb3IgZXhhbXBsZToKKworICAgIGluc3RhbGxcKENPREUgXFtcWworICAgICAgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCisgICAgICAgICMgXC5cLlwuCisgICAgICAgIFwpCisgICAgICBdXVwpCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVyc1wuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXRcLgorCitDTWFrZSBFcnJvciBhdCBiYWRhcmdzMVwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIFVucmVjb2duaXplZCBhcmd1bWVudDogImludmFsaWQiCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2JhZGFyZ3MxLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvYmFkYXJnczItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFkM2QwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvYmFkYXJnczItc3RkZXJyLnR4dApAQCAtMCwwICsxLDIzIEBACiteQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IGJhZGFyZ3MyXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIFlvdSBoYXZlIHVzZWQgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgaW4gcHJvamVjdCBtb2RlXC4gIFRoaXMgaXMKKyAgcHJvYmFibHkgbm90IHdoYXQgeW91IGludGVuZGVkIHRvIGRvXC4gIEluc3RlYWQsIHBsZWFzZSBjb25zaWRlciB1c2luZyBpdCBpbgorICBhbiBpbnN0YWxsXChDT0RFXCkgb3IgaW5zdGFsbFwoU0NSSVBUXCkgY29tbWFuZFwuICBGb3IgZXhhbXBsZToKKworICAgIGluc3RhbGxcKENPREUgXFtcWworICAgICAgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCisgICAgICAgICMgXC5cLlwuCisgICAgICAgIFwpCisgICAgICBdXVwpCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVyc1wuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXRcLgorCitDTWFrZSBFcnJvciBhdCBiYWRhcmdzMlwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIEtleXdvcmRzIG1pc3NpbmcgdmFsdWVzOgorCisgICAgUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUgorICAgIFVOUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUgorICAgIENPTkZMSUNUSU5HX0RFUEVOREVOQ0lFU19QUkVGSVgKKyAgICBCVU5ETEVfRVhFQ1VUQUJMRQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczIuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9iYWRhcmdzMi5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMi5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvYmFkYXJnczIuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWFsbC1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWFsbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODFiNjAyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYWxsLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNDQgQEAKK2Z1bmN0aW9uKGNoZWNrX2NvbnRlbnRzIGZpbGVuYW1lIGNvbnRlbnRzX3JlZ2V4KQorICBpZihFWElTVFMgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7ZmlsZW5hbWV9IikKKyAgICBmaWxlKFJFQUQgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7ZmlsZW5hbWV9IiBjb250ZW50cykKKyAgICBpZihOT1QgY29udGVudHMgTUFUQ0hFUyAiJHtjb250ZW50c19yZWdleH0iKQorICAgICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRmlsZSBjb250ZW50czoKKyAgJHtjb250ZW50c30KK2RvIG5vdCBtYXRjaCB3aGF0IHdlIGV4cGVjdGVkOgorICAke2NvbnRlbnRzX3JlZ2V4fQoraW4gZmlsZToKKyAgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX1cbiIpCisgICAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9IiBQQVJFTlRfU0NPUEUpCisgICAgZW5kaWYoKQorICBlbHNlKCkKKyAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGaWxlICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7ZmlsZW5hbWV9IGRvZXMgbm90IGV4aXN0IikKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7UnVuQ01ha2VfVEVTVF9GQUlMRUR9IiBQQVJFTlRfU0NPUEUpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKworc2V0KF9jaGVjaworICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9saWJ0ZXN0X3JwYXRoXC5zb11dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL2xpYnRlc3RfcnVucGF0aFwuc29dXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aC9saWJycGF0aFwuc29dXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9wYXJlbnQvbGlicnBhdGhfcGFyZW50XC5zb11dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaC9saWJycGF0aF9zZWFyY2hcLnNvXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aC9saWJydW5wYXRoXC5zb11dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoL2xpYnJ1bnBhdGhfc2VhcmNoXC5zb11dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCitjaGVja19jb250ZW50cyhkZXBzL2RlcHMyLnR4dCAiXiR7X2NoZWNrfSQiKQorY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMy50eHQgIl4ke19jaGVja30kIikKK3NldChfY2hlY2sKKyAgW1tsaWJycGF0aF91bnJlc29sdmVkXC5zb11dCisgIFtbbGlicnVucGF0aF9wYXJlbnRfdW5yZXNvbHZlZFwuc29dXQorICBbW2xpYnJ1bnBhdGhfdW5yZXNvbHZlZFwuc29dXQorICApCitjaGVja19jb250ZW50cyhkZXBzL3VkZXBzMS50eHQgIl4ke19jaGVja30kIikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMyLnR4dCAiXiR7X2NoZWNrfSQiKQorY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczMudHh0ICJeJHtfY2hlY2t9JCIpCitzZXQoX2NoZWNrCisgICJebGliY29uZmxpY3RcXC5zbzpbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvY29uZmxpY3QvbGliY29uZmxpY3RcXC5zbztbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvY29uZmxpY3QyL2xpYmNvbmZsaWN0XFwuc29cbiQiCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvY2RlcHMxLnR4dCAiJHtfY2hlY2t9IikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvY2RlcHMyLnR4dCAiJHtfY2hlY2t9IikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvY2RlcHMzLnR4dCAiJHtfY2hlY2t9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYWxsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViNTczNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTE5IEBACiteQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIERlcGVuZGVuY3kgbGlicnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAorCisgIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKKworKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBEZXBlbmRlbmN5IGxpYnJwYXRoX3NlYXJjaFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoCisKKyAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQorCisqQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIERlcGVuZGVuY3kgbGlicnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKKworICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCisKKypDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgRGVwZW5kZW5jeSBsaWJydW5wYXRoX3NlYXJjaFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aF9zZWFyY2gKKworICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCisKKypDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgRGVwZW5kZW5jeSBsaWJycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCisKKyAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQorCisqQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIERlcGVuZGVuY3kgbGlicnBhdGhfc2VhcmNoXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9zZWFyY2gKKworICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCisKKypDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgRGVwZW5kZW5jeSBsaWJydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWRcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAorCisgIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKKworKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBEZXBlbmRlbmN5IGxpYnJ1bnBhdGhfc2VhcmNoXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3NlYXJjaAorCisgIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKKworKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBEZXBlbmRlbmN5IGxpYnJwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWRcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKKworICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCisKKypDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgRGVwZW5kZW5jeSBsaWJycGF0aF9zZWFyY2hcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaAorCisgIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKKworKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBEZXBlbmRlbmN5IGxpYnJ1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCisKKyAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQorCisqQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIERlcGVuZGVuY3kgbGlicnVucGF0aF9zZWFyY2hcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6CisKKyAgICBbXgorXSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoCisKKyAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1jb25mbGljdC1hbGwtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1jb25mbGljdC1hbGwtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiNjVkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBNdWx0aXBsZSBjb25mbGljdGluZyBwYXRocyBmb3VuZCBmb3IgbGlicnBhdGhcLnNvOgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aDEvbGlicnBhdGhcLnNvCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aDIvbGlicnBhdGhcLnNvJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1jb25mbGljdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LWNvbmZsaWN0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWNvbmZsaWN0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1jb25mbGljdC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1ub3RmaWxlLWFsbC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtbm90ZmlsZS1hbGwtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1ub3RmaWxlLWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTc1OGM1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK15DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgRmFpbGVkIHRvIHJ1biBvYmpkdW1wIG9uOgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LW5vdGZpbGUtYnVpbGQvcm9vdC1hbGwvYmluL1wuXC4vbGliL2xpYnRlc3RcLnNvJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1ub3RmaWxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtbm90ZmlsZS5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1ub3RmaWxlLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC1ub3RmaWxlLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LXVucmVzb2x2ZWQtYWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC11bnJlc29sdmVkLWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LXVucmVzb2x2ZWQtYWxsLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LXVucmVzb2x2ZWQtYWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtdW5yZXNvbHZlZC1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtdW5yZXNvbHZlZC1hbGwtc3RkZXJyLnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtdW5yZXNvbHZlZC1hbGwtc3RkZXJyLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC11bnJlc29sdmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgtdW5yZXNvbHZlZC5jbWFrZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC11bnJlc29sdmVkLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC11bnJlc29sdmVkLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MmQ4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9saW51eC5jbWFrZQpAQCAtMCwwICsxLDE2OSBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCitjbWFrZV9wb2xpY3koU0VUIENNUDAwOTUgTkVXKQorCitzZXQodGVzdF9ycGF0aF9uYW1lcworICBwcmVleGNsdWRlZAorICBycGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGgKKyAgcnBhdGhfcGFyZW50X3Bvc3RleGNsdWRlZAorICBycGF0aF9wYXJlbnQKKyAgcnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZAorICBycGF0aF9vcmlnaW4KKyAgcnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAorICBycGF0aF9zZWFyY2gKKyAgcnBhdGhfdW5yZXNvbHZlZAorICBjb25mbGljdAorICApCitzZXQodGVzdF9ydW5wYXRoX25hbWVzCisgIHJ1bnBhdGhfcG9zdGV4Y2x1ZGVkCisgIHJ1bnBhdGgKKyAgcnVucGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkCisgIHJ1bnBhdGhfb3JpZ2luCisgIHJ1bnBhdGhfcGFyZW50X3VucmVzb2x2ZWQKKyAgcnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCisgIHJ1bnBhdGhfc2VhcmNoCisgIHJ1bnBhdGhfdW5yZXNvbHZlZAorICApCisKK2ZpbGUoUkVNT1ZFICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnBhdGguYyIpCithZGRfbGlicmFyeSh0ZXN0X3JwYXRoIFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3JwYXRoLmMiKQorZm9yZWFjaChuYW1lICR7dGVzdF9ycGF0aF9uYW1lc30pCisgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQklOQVJZX0RJUn0vJHtuYW1lfS5jIiAidm9pZCAke25hbWV9KHZvaWQpIHt9XG4iKQorICBhZGRfbGlicmFyeSgke25hbWV9IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiKQorCisgIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnBhdGguYyIgImV4dGVybiB2b2lkICR7bmFtZX0odm9pZCk7XG4iKQorZW5kZm9yZWFjaCgpCitmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3JwYXRoLmMiICJ2b2lkIHRlc3RfcnBhdGgodm9pZClcbntcbiIpCitmb3JlYWNoKG5hbWUgJHt0ZXN0X3JwYXRoX25hbWVzfSkKKyAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ycGF0aC5jIiAiICAke25hbWV9KCk7XG4iKQorZW5kZm9yZWFjaCgpCitmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3JwYXRoLmMiICJ9XG4iKQorCitpbnN0YWxsKFRBUkdFVFMgcnBhdGhfcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ycGF0aF9wb3N0ZXhjbHVkZWQpCitpbnN0YWxsKFRBUkdFVFMgcnBhdGggREVTVElOQVRJT04gbGliL3JwYXRoKQoraW5zdGFsbChUQVJHRVRTIHJwYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQgREVTVElOQVRJT04gbGliL3JwYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQpCitpbnN0YWxsKFRBUkdFVFMgcnBhdGhfb3JpZ2luIERFU1RJTkFUSU9OIGxpYi9ycGF0aF9vcmlnaW4pCitpbnN0YWxsKFRBUkdFVFMgcnBhdGhfcGFyZW50X3Bvc3RleGNsdWRlZCBERVNUSU5BVElPTiBsaWIvcnBhdGhfcGFyZW50X3Bvc3RleGNsdWRlZCkKK2luc3RhbGwoVEFSR0VUUyBycGF0aCBycGF0aF9vcmlnaW4gcnBhdGhfcGFyZW50IERFU1RJTkFUSU9OIGxpYi9ycGF0aF9wYXJlbnQpCitpbnN0YWxsKFRBUkdFVFMgcnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZCBERVNUSU5BVElPTiBsaWIvcnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZCkKK2luc3RhbGwoVEFSR0VUUyBycGF0aCBycGF0aF9vcmlnaW4gcnBhdGhfcGFyZW50IHJwYXRoX3NlYXJjaCBERVNUSU5BVElPTiBsaWIvcnBhdGhfc2VhcmNoKQoraW5zdGFsbChUQVJHRVRTIGNvbmZsaWN0IERFU1RJTkFUSU9OIGxpYi9jb25mbGljdCkKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RfcnBhdGggUFJJVkFURSAke3Rlc3RfcnBhdGhfbmFtZXN9KQorc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0X3JwYXRoIFBST1BFUlRZIElOU1RBTExfUlBBVEgKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3JwYXRoX3Bvc3RleGNsdWRlZCIKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3JwYXRoIgorICAiXCRPUklHSU4vcnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZCIKKyAgIlwke09SSUdJTn0vcnBhdGhfb3JpZ2luIgorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvY29uZmxpY3QiCisgICkKK3RhcmdldF9saW5rX29wdGlvbnModGVzdF9ycGF0aCBQUklWQVRFIC1XbCwtLWRpc2FibGUtbmV3LWR0YWdzKQorCitmaWxlKFJFTU9WRSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3J1bnBhdGguYyIpCithZGRfbGlicmFyeSh0ZXN0X3J1bnBhdGggU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnVucGF0aC5jIikKK2ZvcmVhY2gobmFtZSAke3Rlc3RfcnVucGF0aF9uYW1lc30gcnBhdGggY29uZmxpY3QpCisgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQklOQVJZX0RJUn0vJHtuYW1lfS5jIiAidm9pZCAke25hbWV9KHZvaWQpIHt9XG4iKQorICBpZihOT1QgbmFtZSBNQVRDSEVTICJeKHJwYXRofGNvbmZsaWN0KSQiKQorICAgIGFkZF9saWJyYXJ5KCR7bmFtZX0gU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIpCisgIGVuZGlmKCkKKworICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3J1bnBhdGguYyIgImV4dGVybiB2b2lkICR7bmFtZX0odm9pZCk7XG4iKQorZW5kZm9yZWFjaCgpCitmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3J1bnBhdGguYyIgInZvaWQgdGVzdF9ydW5wYXRoKHZvaWQpXG57XG4iKQorZm9yZWFjaChuYW1lICR7dGVzdF9ydW5wYXRoX25hbWVzfSBycGF0aCBjb25mbGljdCkKKyAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ydW5wYXRoLmMiICIgICR7bmFtZX0oKTtcbiIpCitlbmRmb3JlYWNoKCkKK2ZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnVucGF0aC5jIiAifVxuIikKKworaW5zdGFsbChUQVJHRVRTIHJ1bnBhdGhfcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ydW5wYXRoX3Bvc3RleGNsdWRlZCkKK2luc3RhbGwoVEFSR0VUUyBydW5wYXRoIERFU1RJTkFUSU9OIGxpYi9ydW5wYXRoKQoraW5zdGFsbChUQVJHRVRTIHJ1bnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZCBERVNUSU5BVElPTiBsaWIvcnVucGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkKQoraW5zdGFsbChUQVJHRVRTIHJ1bnBhdGhfb3JpZ2luIERFU1RJTkFUSU9OIGxpYi9ydW5wYXRoX29yaWdpbikKK2luc3RhbGwoVEFSR0VUUyBydW5wYXRoX3BhcmVudF91bnJlc29sdmVkIERFU1RJTkFUSU9OIGxpYi9ydW5wYXRoX3BhcmVudF91bnJlc29sdmVkKQoraW5zdGFsbChUQVJHRVRTIHJ1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZCBERVNUSU5BVElPTiBsaWIvcnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkKQoraW5zdGFsbChUQVJHRVRTIHJ1bnBhdGggcnVucGF0aF9vcmlnaW4gcnVucGF0aF9zZWFyY2ggREVTVElOQVRJT04gbGliL3J1bnBhdGhfc2VhcmNoKQoraW5zdGFsbChUQVJHRVRTIGNvbmZsaWN0IERFU1RJTkFUSU9OIGxpYi9jb25mbGljdDIpCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3J1bnBhdGggUFJJVkFURSAke3Rlc3RfcnVucGF0aF9uYW1lc30gcnBhdGggY29uZmxpY3QpCitzZXRfcHJvcGVydHkoVEFSR0VUIHRlc3RfcnVucGF0aCBQUk9QRVJUWSBJTlNUQUxMX1JQQVRICisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9ydW5wYXRoLy4uL3JwYXRoIiAjIEVuc3VyZSB0aGF0IGZpbGVzIHRoYXQgZG9uJ3QgY29uZmxpY3QgYXJlIHRyZWF0ZWQgY29ycmVjdGx5CisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3Bvc3RleGNsdWRlZCIKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3J1bnBhdGgiCisgICJcJHtPUklHSU59L3J1bnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZCIKKyAgIlwkT1JJR0lOL3J1bnBhdGhfb3JpZ2luIgorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvY29uZmxpY3QyIgorICApCit0YXJnZXRfbGlua19vcHRpb25zKHRlc3RfcnVucGF0aCBQUklWQVRFIC1XbCwtLWVuYWJsZS1uZXctZHRhZ3MpCisKK3NldF9wcm9wZXJ0eShUQVJHRVQgdGVzdF9ycGF0aCAke3Rlc3RfcnBhdGhfbmFtZXN9IHRlc3RfcnVucGF0aCAke3Rlc3RfcnVucGF0aF9uYW1lc30gUFJPUEVSVFkgTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZIGxpYikKK2luc3RhbGwoVEFSR0VUUyB0ZXN0X3JwYXRoIHRlc3RfcnVucGF0aCBERVNUSU5BVElPTiBsaWIpCisKK2FkZF9leGVjdXRhYmxlKHRvcGV4ZSBsaW51eC90b3BleGUuYykKK2FkZF9saWJyYXJ5KHRvcGxpYiBTSEFSRUQgbGludXgvdG9wbGliLmMpCithZGRfbGlicmFyeSh0b3Btb2QgTU9EVUxFIGxpbnV4L3RvcGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcGV4ZSBQUklWQVRFIHRlc3RfcnBhdGggdGVzdF9ydW5wYXRoKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcGxpYiBQUklWQVRFIHRlc3RfcnBhdGggdGVzdF9ydW5wYXRoKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcG1vZCBQUklWQVRFIHRlc3RfcnBhdGggdGVzdF9ydW5wYXRoKQorc2V0X3Byb3BlcnR5KFRBUkdFVCB0b3BleGUgdG9wbGliIHRvcG1vZCBQUk9QRVJUWSBJTlNUQUxMX1JQQVRICisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYiIKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL3JwYXRoX3BhcmVudF9wb3N0ZXhjbHVkZWQiCisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9ycGF0aF9wYXJlbnQiCisgICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3BhcmVudF91bnJlc29sdmVkIgorICApCit0YXJnZXRfbGlua19vcHRpb25zKHRvcGV4ZSBQUklWQVRFIC1XbCwtLWRpc2FibGUtbmV3LWR0YWdzKQordGFyZ2V0X2xpbmtfb3B0aW9ucyh0b3BsaWIgUFJJVkFURSAtV2wsLS1kaXNhYmxlLW5ldy1kdGFncykKK3RhcmdldF9saW5rX29wdGlvbnModG9wbW9kIFBSSVZBVEUgLVdsLC0tZGlzYWJsZS1uZXctZHRhZ3MpCisKK2luc3RhbGwoVEFSR0VUUyB0b3BleGUgdG9wbGliIFJVTlRJTUUgREVTVElOQVRJT04gYmluIExJQlJBUlkgREVTVElOQVRJT04gbGliKQoraW5zdGFsbChUQVJHRVRTIHRvcG1vZCBMSUJSQVJZIERFU1RJTkFUSU9OIGxpYi9tb2R1bGVzKQorCitpbnN0YWxsKENPREUgW1sKKyAgZnVuY3Rpb24oZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMgZGVwc2ZpbGUgdWRlcHNmaWxlIGNkZXBzZmlsZSkKKyAgICBmaWxlKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUworICAgICAgUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUiBkZXBzCisgICAgICBVTlJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgdWRlcHMKKyAgICAgIENPTkZMSUNUSU5HX0RFUEVOREVOQ0lFU19QUkVGSVggY2RlcHMKKyAgICAgIFBSRV9JTkNMVURFX1JFR0VYRVMKKyAgICAgICAgIl5saWIodGVzdF9ycGF0aHxycGF0aF9wb3N0ZXhjbHVkZWR8cnBhdGh8cnBhdGhfcGFyZW50X3Bvc3RleGNsdWRlZHxycGF0aF9wYXJlbnR8cnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZHxycGF0aF9vcmlnaW58cnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZHxycGF0aF9zZWFyY2h8cnBhdGhfdW5yZXNvbHZlZHx0ZXN0X3J1bnBhdGh8cnVucGF0aF9wb3N0ZXhjbHVkZWR8cnVucGF0aHxydW5wYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWR8cnVucGF0aF9vcmlnaW58cnVucGF0aF9wYXJlbnRfdW5yZXNvbHZlZHxydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWR8cnVucGF0aF9zZWFyY2h8cnVucGF0aF91bnJlc29sdmVkfGNvbmZsaWN0KVxcLnNvJCIKKyAgICAgICAgIl5saWJjXFwuc28iCisgICAgICBQUkVfRVhDTFVERV9SRUdFWEVTICIuKiIKKyAgICAgIFBPU1RfSU5DTFVERV9SRUdFWEVTICJeLiovKGxpYnRlc3RfcnBhdGh8cnBhdGgvbGlicnBhdGh8cnBhdGhfcGFyZW50L2xpYnJwYXRoX3BhcmVudHxycGF0aF9zZWFyY2gvbGlicnBhdGhfc2VhcmNofGxpYnRlc3RfcnVucGF0aHxydW5wYXRoL2xpYnJ1bnBhdGh8cnVucGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkfHJ1bnBhdGhfb3JpZ2lufHJ1bnBhdGhfc2VhcmNoL2xpYnJ1bnBhdGhfc2VhcmNofGNvbmZsaWN0Mj8vbGliY29uZmxpY3QpXFwuc28kIgorICAgICAgUE9TVF9FWENMVURFX1JFR0VYRVMgIi4qIgorICAgICAgRElSRUNUT1JJRVMKKyAgICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2xpYi9ycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkIgorICAgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliL3JwYXRoX3NlYXJjaCIKKyAgICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2xpYi9ydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQiCisgICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIvcnVucGF0aF9zZWFyY2giCisgICAgICAke0FSR059CisgICAgICApCisgICAgbGlzdChTT1JUIGRlcHMpCisgICAgbGlzdChTT1JUIHVkZXBzKQorICAgIGxpc3QoU09SVCBjZGVwc19GSUxFTkFNRVMpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2RlcHNmaWxlfSIgIiR7ZGVwc30iKQorICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHt1ZGVwc2ZpbGV9IiAiJHt1ZGVwc30iKQorICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHtjZGVwc2ZpbGV9IiAiIikKKyAgICBmb3JlYWNoKGNkZXAgSU4gTElTVFMgY2RlcHNfRklMRU5BTUVTKQorICAgICAgc2V0KGNkZXBfdmFsdWVzICR7Y2RlcHNfJHtjZGVwfX0pCisgICAgICBsaXN0KFNPUlQgY2RlcF92YWx1ZXMpCisgICAgICBmaWxlKEFQUEVORCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIke2NkZXB9OiR7Y2RlcF92YWx1ZXN9XG4iKQorICAgIGVuZGZvcmVhY2goKQorICBlbmRmdW5jdGlvbigpCisKKyAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCisgICAgZGVwczEudHh0IHVkZXBzMS50eHQgY2RlcHMxLnR4dAorICAgIEVYRUNVVEFCTEVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BleGU+IgorICAgICkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMi50eHQgdWRlcHMyLnR4dCBjZGVwczIudHh0CisgICAgTElCUkFSSUVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BsaWI+IgorICAgICkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMy50eHQgdWRlcHMzLnR4dCBjZGVwczMudHh0CisgICAgTU9EVUxFUworICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2xpYi9tb2R1bGVzLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3Btb2Q+IgorICAgICkKKyAgXV0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4L3RvcGV4ZS5jIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgvdG9wZXhlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgvdG9wZXhlLmMKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4L3RvcGV4ZS5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4L3RvcGxpYi5jIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbGludXgvdG9wbGliLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgvdG9wbGliLmMKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL2xpbnV4L3RvcGxpYi5jCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1hbGwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1hbGwtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmMjYyMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWFsbC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDE1OSBAQAorZnVuY3Rpb24oY2hlY2tfY29udGVudHMgZmlsZW5hbWUgY29udGVudHNfcmVnZXgpCisgIGlmKEVYSVNUUyAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iKQorICAgIGZpbGUoUkVBRCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iIGNvbnRlbnRzKQorICAgIGlmKE5PVCBjb250ZW50cyBNQVRDSEVTICIke2NvbnRlbnRzX3JlZ2V4fSIpCisgICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGaWxlIGNvbnRlbnRzOgorICAke2NvbnRlbnRzfQorZG8gbm90IG1hdGNoIHdoYXQgd2UgZXhwZWN0ZWQ6CisgICR7Y29udGVudHNfcmVnZXh9CitpbiBmaWxlOgorICAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfVxuIikKKyAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKKyAgICBlbmRpZigpCisgIGVsc2UoKQorICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0gZG9lcyBub3QgZXhpc3QiKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihzZXRfd2l0aF9saWJzeXN0ZW0gdmFyKQorICBzZXQoX3RtcCAiJHtBUkdOfSIpCisgIGlmKEVYSVNUUyAiL3Vzci9saWIvbGliU3lzdGVtLkIuZHlsaWIiKQorICAgIGxpc3QoQVBQRU5EIF90bXAgW1svdXNyL2xpYi9saWJTeXN0ZW1cLkJcLmR5bGliXV0pCisgIGVuZGlmKCkKKyAgc2V0KCIke3Zhcn0iICIke190bXB9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKK3NldF93aXRoX2xpYnN5c3RlbShfY2hlY2sKKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2Jpbi8uLi9saWIvZXhlY3V0YWJsZV9wYXRoL2xpYmV4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvYmluLy4uL2xpYi9ycGF0aF9leGVjdXRhYmxlX3BhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbGlidGVzdGxpYlwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsLy4uL3JwYXRoL2xpYnJwYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsL2xpYm5vcm1hbFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCisKK3NldChfY2hlY2sKKyAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KKyAgW1tAbG9hZGVyX3BhdGgvbG9hZGVyX3BhdGhfdW5yZXNvbHZlZC9saWJsb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMxLnR4dCAiXiR7X2NoZWNrfSQiKQorCitzZXRfd2l0aF9saWJzeXN0ZW0oX2NoZWNrCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbGlidGVzdGxpYlwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsLy4uL3JwYXRoL2xpYnJwYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsL2xpYm5vcm1hbFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczIudHh0ICJeJHtfY2hlY2t9JCIpCisKK3NldChfY2hlY2sKKyAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCisgIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX2J1bmRsZS9saWJleGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCisgIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZC9saWJleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkXC5keWxpYl1dCisgIFtbQGxvYWRlcl9wYXRoL2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQvbGlibG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICApCitjaGVja19jb250ZW50cyhkZXBzL3VkZXBzMi50eHQgIl4ke19jaGVja30kIikKKworc2V0X3dpdGhfbGlic3lzdGVtKF9jaGVjaworICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xpYnRlc3RsaWJcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9sb2FkZXJfcGF0aC9saWJsb2FkZXJfcGF0aFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC8uLi9ycGF0aC9saWJycGF0aFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC9saWJub3JtYWxcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ycGF0aF9sb2FkZXJfcGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aFwuZHlsaWJdXQorICApCitjaGVja19jb250ZW50cyhkZXBzL2RlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQorCitzZXQoX2NoZWNrCisgIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoL2xpYmV4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQorICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aF9idW5kbGUvbGliZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQorICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQvbGliZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZFwuZHlsaWJdXQorICBbW0Bsb2FkZXJfcGF0aC9sb2FkZXJfcGF0aF91bnJlc29sdmVkL2xpYmxvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczMudHh0ICJeJHtfY2hlY2t9JCIpCisKK3NldF93aXRoX2xpYnN5c3RlbShfY2hlY2sKKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2Jpbi8uLi9saWIvZXhlY3V0YWJsZV9wYXRoL2xpYmV4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvYmluLy4uL2xpYi9ycGF0aF9leGVjdXRhYmxlX3BhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbGlidGVzdGxpYlwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsLy4uL3JwYXRoL2xpYnJwYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsL2xpYm5vcm1hbFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczQudHh0ICJeJHtfY2hlY2t9JCIpCisKK3NldChfY2hlY2sKKyAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KKyAgW1tAbG9hZGVyX3BhdGgvbG9hZGVyX3BhdGhfdW5yZXNvbHZlZC9saWJsb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHM0LnR4dCAiXiR7X2NoZWNrfSQiKQorCitzZXRfd2l0aF9saWJzeXN0ZW0oX2NoZWNrCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvYnVuZGxlX2V4ZWN1dGFibGUvYmluLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9saWJ0ZXN0bGliXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbG9hZGVyX3BhdGgvbGlibG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KKyAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvbGlibm9ybWFsXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfbG9hZGVyX3BhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhcLmR5bGliXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9kZXBzNS50eHQgIl4ke19jaGVja30kIikKKworc2V0KF9jaGVjaworICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aC9saWJleGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KKyAgW1tAbG9hZGVyX3BhdGgvbG9hZGVyX3BhdGhfdW5yZXNvbHZlZC9saWJsb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICApCitjaGVja19jb250ZW50cyhkZXBzL3VkZXBzNS50eHQgIl4ke19jaGVja30kIikKKworc2V0X3dpdGhfbGlic3lzdGVtKF9jaGVjaworICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2J1bmRsZV9leGVjdXRhYmxlL2Jpbi8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX2J1bmRsZS9saWJleGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbGlidGVzdGxpYlwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsLy4uL3JwYXRoL2xpYnJwYXRoXC5keWxpYl1dCisgIFtbW147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsL2xpYm5vcm1hbFwuZHlsaWJdXQorICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczYudHh0ICJeJHtfY2hlY2t9JCIpCisKK3NldChfY2hlY2sKKyAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCisgIFtbQGxvYWRlcl9wYXRoL2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQvbGlibG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KKyAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQorICBbW0BycGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCisgIFtbQHJwYXRoL2xpYnJwYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczYudHh0ICJeJHtfY2hlY2t9JCIpCisKK3NldChfY2hlY2sKKyAgIl5saWJjb25mbGljdFxcLmR5bGliOlteO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2NvbmZsaWN0L2xpYmNvbmZsaWN0XFwuZHlsaWI7W147XSovVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvY29uZmxpY3QyL2xpYmNvbmZsaWN0XFwuZHlsaWJcbiQiCisgICkKK2NoZWNrX2NvbnRlbnRzKGRlcHMvY2RlcHMxLnR4dCAiJHtfY2hlY2t9IikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvY2RlcHMyLnR4dCAiJHtfY2hlY2t9IikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvY2RlcHMzLnR4dCAiJHtfY2hlY2t9IikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvY2RlcHM0LnR4dCAiJHtfY2hlY2t9IikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvY2RlcHM1LnR4dCAiJHtfY2hlY2t9IikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvY2RlcHM2LnR4dCAiJHtfY2hlY2t9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1jb25mbGljdC1hbGwtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdC1hbGwtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzMjNhOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBNdWx0aXBsZSBjb25mbGljdGluZyBwYXRocyBmb3VuZCBmb3IgbGlicnBhdGhcLmR5bGliOgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aDEvbGlicnBhdGhcLmR5bGliCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aDIvbGlicnBhdGhcLmR5bGliJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLWNvbmZsaWN0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWNvbmZsaWN0LmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1jb25mbGljdC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3Mtbm90ZmlsZS1hbGwtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1ub3RmaWxlLWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWZjMWIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK15DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgRmFpbGVkIHRvIHJ1biBvdG9vbCBvbjoKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy1ub3RmaWxlLWJ1aWxkL3Jvb3QtYWxsL2Jpbi9cLlwuL2xpYi9saWJ0ZXN0XC5keWxpYiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3Mtbm90ZmlsZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLW5vdGZpbGUuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3Mtbm90ZmlsZS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3Mtbm90ZmlsZS5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy11bnJlc29sdmVkLWFsbC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy11bnJlc29sdmVkLWFsbC1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy11bnJlc29sdmVkLWFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy11bnJlc29sdmVkLWFsbC1zdGRlcnIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtdW5yZXNvbHZlZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL21hY29zLXVucmVzb2x2ZWQuY21ha2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtdW5yZXNvbHZlZC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MtdW5yZXNvbHZlZC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTZhMTRiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MuY21ha2UKQEAgLTAsMCArMSwyMTYgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCitzZXQodGVzdGxpYl9uYW1lcworICBwcmVleGNsdWRlZAorICBleGVjdXRhYmxlX3BhdGgKKyAgZXhlY3V0YWJsZV9wYXRoX2J1bmRsZQorICBleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCisgIGxvYWRlcl9wYXRoCisgIGxvYWRlcl9wYXRoX3VucmVzb2x2ZWQKKyAgbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCisgIHJwYXRoCisgIHJwYXRoX3VucmVzb2x2ZWQKKyAgcnBhdGhfcG9zdGV4Y2x1ZGVkCisgIHJwYXRoX2V4ZWN1dGFibGVfcGF0aAorICBycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlCisgIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGhfbG9hZGVyX3BhdGgKKyAgcnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZAorICBycGF0aF9sb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgbm9ybWFsCisgIG5vcm1hbF91bnJlc29sdmVkCisgIG5vcm1hbF9wb3N0ZXhjbHVkZWQKKyAgY29uZmxpY3QKKyAgKQorCitmaWxlKFJFTU9WRSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiKQorYWRkX2xpYnJhcnkodGVzdGxpYiBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIikKK2ZvcmVhY2gobmFtZSAke3Rlc3RsaWJfbmFtZXN9KQorICBpZihuYW1lIFNUUkVRVUFMICJub3JtYWwiKQorICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQklOQVJZX0RJUn0vbm9ybWFsLmMiICJleHRlcm4gdm9pZCBycGF0aCh2b2lkKTtcbnZvaWQgbm9ybWFsKHZvaWQpXG57XG4gIHJwYXRoKCk7XG59XG4iKQorICBlbHNlKCkKKyAgICBmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIgInZvaWQgJHtuYW1lfSh2b2lkKSB7fVxuIikKKyAgZW5kaWYoKQorICBhZGRfbGlicmFyeSgke25hbWV9IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiKQorCisgIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgImV4dGVybiB2b2lkICR7bmFtZX0odm9pZCk7XG4iKQorZW5kZm9yZWFjaCgpCitmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICJ2b2lkIHRlc3RsaWIodm9pZClcbntcbiIpCitmb3JlYWNoKG5hbWUgJHt0ZXN0bGliX25hbWVzfSkKKyAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAiICAke25hbWV9KCk7XG4iKQorZW5kZm9yZWFjaCgpCitmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICJ9XG4iKQorc2V0X3Byb3BlcnR5KFRBUkdFVCAke3Rlc3RsaWJfbmFtZXN9IFBST1BFUlRZIEJVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUiAxKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKG5vcm1hbCBQUklWQVRFIHJwYXRoKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBub3JtYWwgUFJPUEVSVFkgSU5TVEFMTF9SUEFUSAorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgiCisgICkKKworZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX2NvbmZsaWN0LmMiICJleHRlcm4gdm9pZCBjb25mbGljdCh2b2lkKTtcbnZvaWQgdGVzdGxpYl9jb25mbGljdCh2b2lkKVxue1xuICBjb25mbGljdCgpO1xufVxuIikKK2FkZF9saWJyYXJ5KHRlc3RsaWJfY29uZmxpY3QgU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWJfY29uZmxpY3QuYyIpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdGxpYl9jb25mbGljdCBQUklWQVRFIGNvbmZsaWN0KQorCitzZXRfcHJvcGVydHkoVEFSR0VUIHRlc3RsaWIgUFJPUEVSVFkgSU5TVEFMTF9SUEFUSAorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ycGF0aCIKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfdW5yZXNvbHZlZCIKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfcG9zdGV4Y2x1ZGVkIgorICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9jb25mbGljdCIKKyAgQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvcnBhdGhfZXhlY3V0YWJsZV9wYXRoCisgIEBleGVjdXRhYmxlX3BhdGgvLi4vbGliL3JwYXRoX2V4ZWN1dGFibGVfcGF0aF91bnJlc29sdmVkCisgIEBleGVjdXRhYmxlX3BhdGgvLi4vbGliL3JwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgQGxvYWRlcl9wYXRoL3JwYXRoX2xvYWRlcl9wYXRoCisgIEBsb2FkZXJfcGF0aC9ycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkCisgIEBsb2FkZXJfcGF0aC9ycGF0aF9sb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgKQorc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0bGliX2NvbmZsaWN0IFBST1BFUlRZIElOU1RBTExfUlBBVEgKKyAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvY29uZmxpY3QyIgorICApCisKK2ZvcmVhY2godAorICBleGVjdXRhYmxlX3BhdGgKKyAgZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAorICBsb2FkZXJfcGF0aAorICBsb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGgKKyAgcnBhdGhfcG9zdGV4Y2x1ZGVkCisgIHJwYXRoX2V4ZWN1dGFibGVfcGF0aAorICBycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCisgIHJwYXRoX2xvYWRlcl9wYXRoCisgIHJwYXRoX2xvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAorICBjb25mbGljdAorICApCisgIGluc3RhbGwoVEFSR0VUUyAke3R9IERFU1RJTkFUSU9OIGV4ZWN1dGFibGUvbGliLyR7dH0pCitlbmRmb3JlYWNoKCkKK2luc3RhbGwoVEFSR0VUUyBjb25mbGljdCBERVNUSU5BVElPTiBleGVjdXRhYmxlL2xpYi9jb25mbGljdDIpCisKK2ZvcmVhY2godAorICBleGVjdXRhYmxlX3BhdGhfYnVuZGxlCisgIGV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCisgIHJwYXRoX3Bvc3RleGNsdWRlZAorICBycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlCisgIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGhfbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCisgICkKKyAgaW5zdGFsbChUQVJHRVRTICR7dH0gREVTVElOQVRJT04gYnVuZGxlX2V4ZWN1dGFibGUvbGliLyR7dH0pCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaCh0IGV4ZWN1dGFibGVfcGF0aCBleGVjdXRhYmxlX3BhdGhfYnVuZGxlIGV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHt0fSBQUk9QRVJUWSBJTlNUQUxMX05BTUVfRElSIEBleGVjdXRhYmxlX3BhdGgvLi4vbGliLyR7dH0pCitlbmRmb3JlYWNoKCkKKworZm9yZWFjaCh0IGxvYWRlcl9wYXRoIGxvYWRlcl9wYXRoX3VucmVzb2x2ZWQgbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkKQorICBzZXRfcHJvcGVydHkoVEFSR0VUICR7dH0gUFJPUEVSVFkgSU5TVEFMTF9OQU1FX0RJUiBAbG9hZGVyX3BhdGgvJHt0fSkKK2VuZGZvcmVhY2goKQorCitmb3JlYWNoKHQKKyAgcnBhdGgKKyAgcnBhdGhfdW5yZXNvbHZlZAorICBycGF0aF9wb3N0ZXhjbHVkZWQKKyAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoCisgIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGUKKyAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAorICBycGF0aF9sb2FkZXJfcGF0aAorICBycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkCisgIHJwYXRoX2xvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAorICBjb25mbGljdAorICApCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHt0fSBQUk9QRVJUWSBJTlNUQUxMX05BTUVfRElSIEBycGF0aCkKK2VuZGZvcmVhY2goKQorCitmb3JlYWNoKHQgbm9ybWFsIG5vcm1hbF91bnJlc29sdmVkIG5vcm1hbF9wb3N0ZXhjbHVkZWQpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHt0fSBQUk9QRVJUWSBJTlNUQUxMX05BTUVfRElSICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliLyR7dH0iKQorICBpZihOT1QgdCBTVFJFUVVBTCAibm9ybWFsX3VucmVzb2x2ZWQiKQorICAgIGluc3RhbGwoVEFSR0VUUyAke3R9IERFU1RJTkFUSU9OIGV4ZWN1dGFibGUvbGliLyR7dH0pCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQorCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdGxpYiBQUklWQVRFICR7dGVzdGxpYl9uYW1lc30pCisKK2FkZF9leGVjdXRhYmxlKHRvcGV4ZSBtYWNvcy90b3BleGUuYykKK2FkZF9saWJyYXJ5KHRvcGxpYiBTSEFSRUQgbWFjb3MvdG9wbGliLmMpCithZGRfbGlicmFyeSh0b3Btb2QgTU9EVUxFIG1hY29zL3RvcGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcGV4ZSBQUklWQVRFIHRlc3RsaWIpCit0YXJnZXRfbGlua19saWJyYXJpZXModG9wbGliIFBSSVZBVEUgdGVzdGxpYikKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0b3Btb2QgUFJJVkFURSB0ZXN0bGliKQorCitzZXRfcHJvcGVydHkoVEFSR0VUIHRvcGV4ZSB0b3BsaWIgdG9wbW9kIFBST1BFUlRZIElOU1RBTExfUlBBVEggIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIiKQorCitpbnN0YWxsKFRBUkdFVFMgdG9wZXhlIHRvcGxpYiB0b3Btb2QgdGVzdGxpYiB0ZXN0bGliX2NvbmZsaWN0IFJVTlRJTUUgREVTVElOQVRJT04gZXhlY3V0YWJsZS9iaW4gTElCUkFSWSBERVNUSU5BVElPTiBleGVjdXRhYmxlL2xpYikKK2luc3RhbGwoVEFSR0VUUyB0b3BleGUgdG9wbGliIHRvcG1vZCB0ZXN0bGliIHRlc3RsaWJfY29uZmxpY3QgUlVOVElNRSBERVNUSU5BVElPTiBidW5kbGVfZXhlY3V0YWJsZS9iaW4gTElCUkFSWSBERVNUSU5BVElPTiBidW5kbGVfZXhlY3V0YWJsZS9saWIpCisKK2luc3RhbGwoQ09ERSBbWworICBmdW5jdGlvbihleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcyBkZXBzZmlsZSB1ZGVwc2ZpbGUgY2RlcHNmaWxlKQorICAgIGZpbGUoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCisgICAgICBSRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIGRlcHMKKyAgICAgIFVOUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUiB1ZGVwcworICAgICAgQ09ORkxJQ1RJTkdfREVQRU5ERU5DSUVTX1BSRUZJWCBjZGVwcworICAgICAgUFJFX0lOQ0xVREVfUkVHRVhFUyAiXi4qL2xpYih0ZXN0bGlifGV4ZWN1dGFibGVfcGF0aHxleGVjdXRhYmxlX3BhdGhfYnVuZGxlfGV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWR8bG9hZGVyX3BhdGh8bG9hZGVyX3BhdGhfdW5yZXNvbHZlZHxsb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWR8cnBhdGh8cnBhdGhfdW5yZXNvbHZlZHxycGF0aF9wb3N0ZXhjbHVkZWR8cnBhdGhfZXhlY3V0YWJsZV9wYXRofHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGV8cnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZHxycGF0aF9sb2FkZXJfcGF0aHxycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkfHJwYXRoX2xvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZHxub3JtYWx8bm9ybWFsX3VucmVzb2x2ZWR8bm9ybWFsX3Bvc3RleGNsdWRlZHxjb25mbGljdHxTeXN0ZW1cXC5CKVxcLmR5bGliJCIKKyAgICAgIFBSRV9FWENMVURFX1JFR0VYRVMgIi4qIgorICAgICAgUE9TVF9JTkNMVURFX1JFR0VYRVMgIl4uKi9saWIodGVzdGxpYnxleGVjdXRhYmxlX3BhdGh8ZXhlY3V0YWJsZV9wYXRoX2J1bmRsZXxsb2FkZXJfcGF0aHxycGF0aHxycGF0aF9leGVjdXRhYmxlX3BhdGh8cnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZXxycGF0aF9sb2FkZXJfcGF0aHxub3JtYWx8Y29uZmxpY3R8U3lzdGVtXFwuQilcXC5keWxpYiQiCisgICAgICBQT1NUX0VYQ0xVREVfUkVHRVhFUyAiLioiCisgICAgICAke0FSR059CisgICAgICApCisgICAgbGlzdChTT1JUIGRlcHMpCisgICAgbGlzdChTT1JUIHVkZXBzKQorICAgIGxpc3QoU09SVCBjZGVwc19GSUxFTkFNRVMpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2RlcHNmaWxlfSIgIiR7ZGVwc30iKQorICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHt1ZGVwc2ZpbGV9IiAiJHt1ZGVwc30iKQorICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHtjZGVwc2ZpbGV9IiAiIikKKyAgICBmb3JlYWNoKGNkZXAgSU4gTElTVFMgY2RlcHNfRklMRU5BTUVTKQorICAgICAgc2V0KGNkZXBfdmFsdWVzICR7Y2RlcHNfJHtjZGVwfX0pCisgICAgICBsaXN0KFNPUlQgY2RlcF92YWx1ZXMpCisgICAgICBmaWxlKEFQUEVORCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIke2NkZXB9OiR7Y2RlcF92YWx1ZXN9XG4iKQorICAgIGVuZGZvcmVhY2goKQorICBlbmRmdW5jdGlvbigpCisKKyAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCisgICAgZGVwczEudHh0IHVkZXBzMS50eHQgY2RlcHMxLnR4dAorICAgIEVYRUNVVEFCTEVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCisgICAgTElCUkFSSUVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgorICAgICkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMi50eHQgdWRlcHMyLnR4dCBjZGVwczIudHh0CisgICAgTElCUkFSSUVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRvcGxpYj4iCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgorICAgICkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMy50eHQgdWRlcHMzLnR4dCBjZGVwczMudHh0CisgICAgTU9EVUxFUworICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3Btb2Q+IgorICAgIExJQlJBUklFUworICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKKyAgICApCisKKyAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCisgICAgZGVwczQudHh0IHVkZXBzNC50eHQgY2RlcHM0LnR4dAorICAgIEVYRUNVVEFCTEVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCisgICAgTElCUkFSSUVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgorICAgIEJVTkRMRV9FWEVDVVRBQkxFCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYnVuZGxlX2V4ZWN1dGFibGUvYmluLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BleGU+IgorICAgICkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzNS50eHQgdWRlcHM1LnR4dCBjZGVwczUudHh0CisgICAgTElCUkFSSUVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRvcGxpYj4iCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgorICAgIEJVTkRMRV9FWEVDVVRBQkxFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9idW5kbGVfZXhlY3V0YWJsZS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCisgICAgKQorCisgIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAorICAgIGRlcHM2LnR4dCB1ZGVwczYudHh0IGNkZXBzNi50eHQKKyAgICBNT0RVTEVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRvcG1vZD4iCisgICAgTElCUkFSSUVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgorICAgIEJVTkRMRV9FWEVDVVRBQkxFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9idW5kbGVfZXhlY3V0YWJsZS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCisgICAgKQorICBdXSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MvdG9wZXhlLmMgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy90b3BleGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy90b3BleGUuYwpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MvdG9wZXhlLmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MvdG9wbGliLmMgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9tYWNvcy90b3BsaWIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy90b3BsaWIuYwpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvbWFjb3MvdG9wbGliLmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Byb2plY3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Byb2plY3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTRhMTBkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvcHJvamVjdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTMgQEAKK15DTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgcHJvamVjdFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBZb3UgaGF2ZSB1c2VkIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGluIHByb2plY3QgbW9kZVwuICBUaGlzIGlzCisgIHByb2JhYmx5IG5vdCB3aGF0IHlvdSBpbnRlbmRlZCB0byBkb1wuICBJbnN0ZWFkLCBwbGVhc2UgY29uc2lkZXIgdXNpbmcgaXQgaW4KKyAgYW4gaW5zdGFsbFwoQ09ERVwpIG9yIGluc3RhbGxcKFNDUklQVFwpIGNvbW1hbmRcLiAgRm9yIGV4YW1wbGU6CisKKyAgICBpbnN0YWxsXChDT0RFIFxbXFsKKyAgICAgIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUworICAgICAgICAjIFwuXC5cLgorICAgICAgICBcKQorICAgICAgXV1cKQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnNcLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0XC4kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXByb2plY3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy9wcm9qZWN0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXByb2plY3QuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Byb2plY3QuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3doaXRlbGlzdC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvdW5zdXBwb3J0ZWQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3doaXRlbGlzdC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvdW5zdXBwb3J0ZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvdW5zdXBwb3J0ZWQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Vuc3VwcG9ydGVkLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Vuc3VwcG9ydGVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSw1IEBACiteQ01ha2UgRXJyb3IgYXQgdW5zdXBwb3J0ZWRcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMgaXMgbm90IHN1cHBvcnRlZCBvbiBzeXN0ZW0gIlteCisgXSsiCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy11bnN1cHBvcnRlZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3Vuc3VwcG9ydGVkLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXVuc3VwcG9ydGVkLmNtYWtlCnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy91bnN1cHBvcnRlZC5jbWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MWE1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi1hbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK15DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisuKgorLipDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk06IGN1c3RvbS1wbGF0Zm9ybS4qCisuKkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19UT09MOiBjdXN0b20tcGxhdGZvcm0tb2JqZHVtcC4qCisuKkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19DT01NQU5EOiBwYXRoL3RvL2N1c3RvbS1vYmpkdW1wLioKKy4qQ01BS0VfT0JKRFVNUDogY3VzdG9tLW9iamR1bXAuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWRldi1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvR2VuZXJhdG9yRXhwcmVzc2lvbi9DT01QSUxFX0xBTkdVQUdFLWluc3RhbGwtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWRldi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi1kZXYtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3ZhcmlhYmxlLXByb3BhZ2F0aW9uLWRldi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MWE1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi1kZXYtc3RkZXJyLnR4dApAQCAtMCwwICsxLDYgQEAKK15DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChtZXNzYWdlXCk6CisuKgorLipDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk06IGN1c3RvbS1wbGF0Zm9ybS4qCisuKkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19UT09MOiBjdXN0b20tcGxhdGZvcm0tb2JqZHVtcC4qCisuKkNNQUtFX0dFVF9SVU5USU1FX0RFUEVOREVOQ0lFU19DT01NQU5EOiBwYXRoL3RvL2N1c3RvbS1vYmpkdW1wLioKKy4qQ01BS0VfT0JKRFVNUDogY3VzdG9tLW9iamR1bXAuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvdmFyaWFibGUtcHJvcGFnYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy92YXJpYWJsZS1wcm9wYWdhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2JiYzVlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvdmFyaWFibGUtcHJvcGFnYXRpb24uY21ha2UKQEAgLTAsMCArMSwxNyBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldChDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk0gImN1c3RvbS1wbGF0Zm9ybSIpCitzZXQoQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX1RPT0wgImN1c3RvbS1wbGF0Zm9ybS1vYmpkdW1wIikKK3NldChDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfQ09NTUFORCAicGF0aC90by9jdXN0b20tb2JqZHVtcCIpCitzZXQoQ01BS0VfT0JKRFVNUCAiY3VzdG9tLW9iamR1bXAiKQorCitpbnN0YWxsKENPREUgW1sKK21lc3NhZ2UoRkFUQUxfRVJST1IgIgorICBDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfUExBVEZPUk06ICR7Q01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX1BMQVRGT1JNfQorICBDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfVE9PTDogJHtDTUFLRV9HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNfVE9PTH0KKyAgQ01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX0NPTU1BTkQ6ICR7Q01BS0VfR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTX0NPTU1BTkR9CisgIENNQUtFX09CSkRVTVA6ICR7Q01BS0VfT0JKRFVNUH0KKyIpCitdXQorQ09NUE9ORU5UIGRldgorKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1hbGwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWFsbC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQ3MGExCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1hbGwtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzOCBAQAorZnVuY3Rpb24oY2hlY2tfY29udGVudHMgZmlsZW5hbWUgY29udGVudHNfcmVnZXgpCisgIGlmKEVYSVNUUyAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iKQorICAgIGZpbGUoUkVBRCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0iIGNvbnRlbnRzKQorICAgIGlmKE5PVCBjb250ZW50cyBNQVRDSEVTICIke2NvbnRlbnRzX3JlZ2V4fSIpCisgICAgICBzdHJpbmcoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGaWxlIGNvbnRlbnRzOgorICAke2NvbnRlbnRzfQorZG8gbm90IG1hdGNoIHdoYXQgd2UgZXhwZWN0ZWQ6CisgICR7Y29udGVudHNfcmVnZXh9CitpbiBmaWxlOgorICAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfVxuIikKKyAgICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKKyAgICBlbmRpZigpCisgIGVsc2UoKQorICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtmaWxlbmFtZX0gZG9lcyBub3QgZXhpc3QiKQorICAgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHtSdW5DTWFrZV9URVNUX0ZBSUxFRH0iIFBBUkVOVF9TQ09QRSkKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCitzZXQoX2NoZWNrCisgIFs9W1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtYnVpbGQvcm9vdC1hbGwvYmluL1wuY29uZmxpY3QvXC5cLi8obGliKT9saWJkaXJcLmRsbF09XQorICBbPVtbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWJ1aWxkL3Jvb3QtYWxsL2Jpbi9cLnNlYXJjaC8obGliKT9zZWFyY2hcLmRsbF09XQorICBbPVtbXjtdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWJ1aWxkL3Jvb3QtYWxsL2Jpbi8obGliKT90ZXN0bGliXC5kbGxdPV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMS50eHQgIl4ke19jaGVja30kIikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczIudHh0ICJeJHtfY2hlY2t9JCIpCitjaGVja19jb250ZW50cyhkZXBzL2RlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQorc2V0KF9jaGVjaworICBbPVsobGliKT91bnJlc29sdmVkXC5kbGxdPV0KKyAgKQorY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCitjaGVja19jb250ZW50cyhkZXBzL3VkZXBzMi50eHQgIl4ke19jaGVja30kIikKK2NoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQorc2V0KF9jaGVjaworICAiXihsaWIpP2NvbmZsaWN0XFwuZGxsOlteO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtYnVpbGQvcm9vdC1hbGwvYmluL1xcLmNvbmZsaWN0LyhsaWIpP2NvbmZsaWN0XFwuZGxsO1teO10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtYnVpbGQvcm9vdC1hbGwvYmluLyhsaWIpP2NvbmZsaWN0XFwuZGxsXG4kIgorICApCitjaGVja19jb250ZW50cyhkZXBzL2NkZXBzMS50eHQgIiR7X2NoZWNrfSIpCitjaGVja19jb250ZW50cyhkZXBzL2NkZXBzMi50eHQgIiR7X2NoZWNrfSIpCitjaGVja19jb250ZW50cyhkZXBzL2NkZXBzMy50eHQgIiR7X2NoZWNrfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtY29uZmxpY3QtYWxsLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OGM1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNyBAQAorXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBNdWx0aXBsZSBjb25mbGljdGluZyBwYXRocyBmb3VuZCBmb3IgKGxpYik/cGF0aFwuZGxsOgorCisgICAgW14KK10qL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtY29uZmxpY3QtYnVpbGQvcm9vdC1hbGwvbGliL3Rlc3QxLyhsaWIpP3BhdGhcLmRsbAorICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi90ZXN0Mi8obGliKT9wYXRoXC5kbGwkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLWNvbmZsaWN0LmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QuY21ha2UKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtY29uZmxpY3QuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3Mtbm90ZmlsZS1hbGwtcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1ub3RmaWxlLWFsbC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLW5vdGZpbGUtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLW5vdGZpbGUtYWxsLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjMDM5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dApAQCAtMCwwICsxLDUgQEAKK15DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgRmFpbGVkIHRvIHJ1biAoZHVtcGJpbnxvYmpkdW1wKSBvbjoKKworICAgIFteCitdKi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLW5vdGZpbGUtYnVpbGQvcm9vdC1hbGwvYmluLyhsaWIpP3Rlc3RcLmRsbCQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1ub3RmaWxlLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1ub3RmaWxlLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3Mtbm90ZmlsZS5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy1ub3RmaWxlLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLXVucmVzb2x2ZWQtYWxsLXJlc3VsdC50eHQKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MtdW5yZXNvbHZlZC1hbGwtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy11bnJlc29sdmVkLWFsbC1zdGRlcnIudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLXVucmVzb2x2ZWQtYWxsLXN0ZGVyci50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy11bnJlc29sdmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy11bnJlc29sdmVkLmNtYWtlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtdW5yZXNvbHZlZC5jbWFrZQpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy11bnJlc29sdmVkLmNtYWtlCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYwY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy5jbWFrZQpAQCAtMCwwICsxLDExNCBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK3NldCh0ZXN0bGliX25hbWVzCisgIHByZWV4Y2x1ZGVkCisgIGxpYmRpcl9wb3N0ZXhjbHVkZWQKKyAgbGliZGlyCisgIHNlYXJjaF9wb3N0ZXhjbHVkZWQKKyAgc2VhcmNoCisgIHVucmVzb2x2ZWQKKyAgY29uZmxpY3QKKyAgKQorCitmaWxlKFJFTU9WRSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiKQorYWRkX2xpYnJhcnkodGVzdGxpYiBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIikKK2ZvcmVhY2gobmFtZSAke3Rlc3RsaWJfbmFtZXN9KQorICBmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIgIl9fZGVjbHNwZWMoZGxsZXhwb3J0KSB2b2lkICR7bmFtZX0odm9pZCkge31cbiIpCisgIGFkZF9saWJyYXJ5KCR7bmFtZX0gU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIpCisKKyAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAiX19kZWNsc3BlYyhkbGxpbXBvcnQpIGV4dGVybiB2b2lkICR7bmFtZX0odm9pZCk7XG4iKQorZW5kZm9yZWFjaCgpCitmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICJfX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZCB0ZXN0bGliKHZvaWQpXG57XG4iKQorZm9yZWFjaChuYW1lICR7dGVzdGxpYl9uYW1lc30pCisgIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgIiAgJHtuYW1lfSgpO1xuIikKK2VuZGZvcmVhY2goKQorZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAifVxuIikKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RsaWIgUFJJVkFURSAke3Rlc3RsaWJfbmFtZXN9KQorCitmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWJfY29uZmxpY3QuYyIgIl9fZGVjbHNwZWMoZGxsaW1wb3J0KSBleHRlcm4gdm9pZCBjb25mbGljdCh2b2lkKTtcbl9fZGVjbHNwZWMoZGxsZXhwb3J0KSB2b2lkIHRlc3RsaWJfY29uZmxpY3Qodm9pZClcbntcbiAgY29uZmxpY3QoKTtcbn1cbiIpCithZGRfbGlicmFyeSh0ZXN0bGliX2NvbmZsaWN0IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX2NvbmZsaWN0LmMiKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RsaWJfY29uZmxpY3QgUFJJVkFURSBjb25mbGljdCkKKworZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX25vY29uZmxpY3QuYyIgIl9fZGVjbHNwZWMoZGxsaW1wb3J0KSBleHRlcm4gdm9pZCBsaWJkaXIodm9pZCk7XG5fX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZCB0ZXN0bGliX25vY29uZmxpY3Qodm9pZClcbntcbiAgbGliZGlyKCk7XG59XG4iKQorYWRkX2xpYnJhcnkodGVzdGxpYl9ub2NvbmZsaWN0IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX25vY29uZmxpY3QuYyIpCit0YXJnZXRfbGlua19saWJyYXJpZXModGVzdGxpYl9ub2NvbmZsaWN0IFBSSVZBVEUgbGliZGlyKQorCitpbnN0YWxsKFRBUkdFVFMgdGVzdGxpYiBsaWJkaXJfcG9zdGV4Y2x1ZGVkIGxpYmRpciBjb25mbGljdCB0ZXN0bGliX25vY29uZmxpY3QgREVTVElOQVRJT04gYmluKQoraW5zdGFsbChUQVJHRVRTIGxpYmRpciBzZWFyY2hfcG9zdGV4Y2x1ZGVkIHNlYXJjaCBERVNUSU5BVElPTiBiaW4vLnNlYXJjaCkgIyBQcmVmaXhpbmcgd2l0aCAiLiIgZW5zdXJlcyBpdCBpcyB0aGUgZmlyc3QgaXRlbSBhZnRlciBsaXN0KFNPUlQpCitpbnN0YWxsKFRBUkdFVFMgdGVzdGxpYl9jb25mbGljdCBjb25mbGljdCBERVNUSU5BVElPTiBiaW4vLmNvbmZsaWN0KQorCithZGRfZXhlY3V0YWJsZSh0b3BleGUgd2luZG93cy90b3BleGUuYykKK2FkZF9saWJyYXJ5KHRvcGxpYiBTSEFSRUQgd2luZG93cy90b3BsaWIuYykKK2FkZF9saWJyYXJ5KHRvcG1vZCBNT0RVTEUgd2luZG93cy90b3BsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0b3BleGUgUFJJVkFURSB0ZXN0bGliKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcGxpYiBQUklWQVRFIHRlc3RsaWIpCit0YXJnZXRfbGlua19saWJyYXJpZXModG9wbW9kIFBSSVZBVEUgdGVzdGxpYikKKworaW5zdGFsbChUQVJHRVRTIHRvcGV4ZSB0b3BsaWIgdG9wbW9kIERFU1RJTkFUSU9OIGJpbikKKworaW5zdGFsbChDT0RFIFtbCisgIGZ1bmN0aW9uKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzIGRlcHNmaWxlIHVkZXBzZmlsZSBjZGVwc2ZpbGUpCisgICAgZmlsZShHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMKKyAgICAgIFJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgZGVwcworICAgICAgVU5SRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIHVkZXBzCisgICAgICBDT05GTElDVElOR19ERVBFTkRFTkNJRVNfUFJFRklYIGNkZXBzCisgICAgICBQUkVfSU5DTFVERV9SRUdFWEVTCisgICAgICAgICJeKGxpYik/dGVzdGxpYlxcLmRsbCQiCisgICAgICAgICJeKGxpYik/bGliZGlyX3Bvc3RleGNsdWRlZFxcLmRsbCQiCisgICAgICAgICJeKGxpYik/bGliZGlyXFwuZGxsJCIKKyAgICAgICAgIl4obGliKT9zZWFyY2hfcG9zdGV4Y2x1ZGVkXFwuZGxsJCIKKyAgICAgICAgIl4obGliKT9zZWFyY2hcXC5kbGwkIgorICAgICAgICAiXihsaWIpP3VucmVzb2x2ZWRcXC5kbGwkIgorICAgICAgICAiXihsaWIpP2NvbmZsaWN0XFwuZGxsJCIKKyAgICAgICAgIl5rZXJuZWwzMlxcLmRsbCQiCisgICAgICBQUkVfRVhDTFVERV9SRUdFWEVTICIuKiIKKyAgICAgIFBPU1RfSU5DTFVERV9SRUdFWEVTCisgICAgICAgICJeLiovKGxpYik/dGVzdGxpYlxcLmRsbCQiCisgICAgICAgICJeLiovKGxpYik/bGliZGlyXFwuZGxsJCIKKyAgICAgICAgIl4uKi8obGliKT9zZWFyY2hcXC5kbGwkIgorICAgICAgICAiXi4qLyhsaWIpP2NvbmZsaWN0XFwuZGxsJCIKKyAgICAgIFBPU1RfRVhDTFVERV9SRUdFWEVTICIuKiIKKyAgICAgIERJUkVDVE9SSUVTCisgICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLnNlYXJjaCIKKyAgICAgICR7QVJHTn0KKyAgICAgICkKKyAgICBsaXN0KFNPUlQgZGVwcykKKyAgICBsaXN0KFNPUlQgdWRlcHMpCisgICAgbGlzdChTT1JUIGNkZXBzX0ZJTEVOQU1FUykKKyAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7ZGVwc2ZpbGV9IiAiJHtkZXBzfSIpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke3VkZXBzZmlsZX0iICIke3VkZXBzfSIpCisgICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIiKQorICAgIGZvcmVhY2goY2RlcCBJTiBMSVNUUyBjZGVwc19GSUxFTkFNRVMpCisgICAgICBzZXQoY2RlcF92YWx1ZXMgJHtjZGVwc18ke2NkZXB9fSkKKyAgICAgIGxpc3QoU09SVCBjZGVwX3ZhbHVlcykKKyAgICAgIGZpbGUoQVBQRU5EICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7Y2RlcHNmaWxlfSIgIiR7Y2RlcH06JHtjZGVwX3ZhbHVlc31cbiIpCisgICAgZW5kZm9yZWFjaCgpCisgIGVuZGZ1bmN0aW9uKCkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMS50eHQgdWRlcHMxLnR4dCBjZGVwczEudHh0CisgICAgRVhFQ1VUQUJMRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCisgICAgTElCUkFSSUVTCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCisgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8uLi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9ub2NvbmZsaWN0PiIKKyAgICApCisKKyAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCisgICAgZGVwczIudHh0IHVkZXBzMi50eHQgY2RlcHMyLnR4dAorICAgIExJQlJBUklFUworICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbGliPiIKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0LyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0Ly4uLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX25vY29uZmxpY3Q+IgorICAgICkKKworICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKKyAgICBkZXBzMy50eHQgdWRlcHMzLnR4dCBjZGVwczMudHh0CisgICAgTU9EVUxFUworICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbW9kPiIKKyAgICBMSUJSQVJJRVMKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0LyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKKyAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0Ly4uLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX25vY29uZmxpY3Q+IgorICAgICkKKyAgXV0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MvdG9wZXhlLmMgYi9UZXN0cy9SdW5DTWFrZS9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy93aW5kb3dzL3RvcGV4ZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MvdG9wZXhlLmMKcmVuYW1lIHRvIFRlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MvdG9wZXhlLmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy90b3BsaWIuYyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTL3dpbmRvd3MvdG9wbGliLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy90b3BsaWIuYwpyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMvd2luZG93cy90b3BsaWIuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtbm8tc2F2ZS1oYXNoLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC1uby1zYXZlLWhhc2gtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC1uby1zYXZlLWhhc2gtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtbm8tc2F2ZS1oYXNoLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmMGQxOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtbm8tc2F2ZS1oYXNoLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgRE9XTkxPQUQtbm8tc2F2ZS1oYXNoXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgRE9XTkxPQUQgY2Fubm90IGNhbGN1bGF0ZSBoYXNoIGlmIGZpbGUgaXMgbm90IHNhdmVkXC4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELW5vLXNhdmUtaGFzaC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtbm8tc2F2ZS1oYXNoLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOTU5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELW5vLXNhdmUtaGFzaC5jbWFrZQpAQCAtMCwwICsxLDggQEAKK2lmKE5PVCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9IiBNQVRDSEVTICJeLyIpCisgIHNldChzbGFzaCAvKQorZW5kaWYoKQorZmlsZShET1dOTE9BRAorICAiZmlsZTovLyR7c2xhc2h9JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0RPV05MT0FELW5vLXNhdmUtbWQ1LnR4dCIKKyAgRVhQRUNURURfSEFTSCBNRDU9NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUKKyAgU1RBVFVTIHN0YXR1cworICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELW5vLXNhdmUtaGFzaC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELW5vLXNhdmUtaGFzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtbm8tc2F2ZS1oYXNoLnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1MmJhYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LmNtYWtlOlswLTldKyBcKGZpbGVcKToKKyAgZmlsZSBET1dOTE9BRCBtaXNzaW5nIGZpbGUgdmFsdWUgZm9yIFRMU19DQUlORk8uCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELXRscy1jYWluZm8tbm90LXNldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NzY0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELXRscy1jYWluZm8tbm90LXNldC5jbWFrZQpAQCAtMCwwICsxIEBACitmaWxlKERPV05MT0FEICIiICIiIFRMU19DQUlORk8pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELXRscy12ZXJpZnktbm90LXNldC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlL0RPV05MT0FELXRscy12ZXJpZnktbm90LXNldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQ2YzBjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIERPV05MT0FEIG1pc3NpbmcgYm9vbCB2YWx1ZSBmb3IgVExTX1ZFUklGWS4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9ET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5MzY4YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvRE9XTkxPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoRE9XTkxPQUQgIiIgIiIgVExTX1ZFUklGWSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtYnVpbGQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtYnVpbGQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWM5YTkxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9HTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZS1idWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK3Rlc3QyL3Rlc3RfZm9sZGVyX3N5bWxpbmsKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtcmVidWlsZC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9HTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZS1yZWJ1aWxkLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjOWE5MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtcmVidWlsZC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK3Rlc3QyL3Rlc3RfZm9sZGVyX3N5bWxpbmsKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2Utc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2Utc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmJhYzAxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9HTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZS1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKKy4qUnVubmluZyBDTWFrZSBvbiBHTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9HTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0MDUzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UuY21ha2UKQEAgLTAsMCArMSwxMCBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMDA5IE5FVykKK21lc3NhZ2UoU1RBVFVTICJSdW5uaW5nIENNYWtlIG9uIEdMT0ItQ09ORklHVVJFX0RFUEVORFMtQ01QMDAwOS1SZXJ1bkNNYWtlIikKK2ZpbGUoR0xPQl9SRUNVUlNFCisgIENPTlRFTlRfTElTVAorICBDT05GSUdVUkVfREVQRU5EUworICBMSVNUX0RJUkVDVE9SSUVTIGZhbHNlCisgIFJFTEFUSVZFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iCisgICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGVzdDIvKiIKKyAgKQorYWRkX2N1c3RvbV90YXJnZXQoQ09OVEVOVF9FQ0hPIEFMTCAke0NNQUtFX0NPTU1BTkR9IC1FIGVjaG8gJHtDT05URU5UX0xJU1R9KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA1ZGI0YjNiLi44ZDg0OTQzIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtOCwxMyArOCwxOCBAQAogcnVuX2NtYWtlKERPV05MT0FELXVudXNlZC1hcmd1bWVudCkKIHJ1bl9jbWFrZShET1dOTE9BRC1odHRwaGVhZGVyLW5vdC1zZXQpCiBydW5fY21ha2UoRE9XTkxPQUQtbmV0cmMtYmFkKQorcnVuX2NtYWtlKERPV05MT0FELXRscy1jYWluZm8tbm90LXNldCkKK3J1bl9jbWFrZShET1dOTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQpCiBydW5fY21ha2UoRE9XTkxPQUQtcGFzcy1ub3Qtc2V0KQorcnVuX2NtYWtlKERPV05MT0FELW5vLXNhdmUtaGFzaCkKIHJ1bl9jbWFrZShUT1VDSCkKIHJ1bl9jbWFrZShUT1VDSC1lcnJvci1pbi1zb3VyY2UtZGlyZWN0b3J5KQogcnVuX2NtYWtlKFRPVUNILWVycm9yLW1pc3NpbmctZGlyZWN0b3J5KQogcnVuX2NtYWtlKFVQTE9BRC11bnVzZWQtYXJndW1lbnQpCiBydW5fY21ha2UoVVBMT0FELWh0dHBoZWFkZXItbm90LXNldCkKIHJ1bl9jbWFrZShVUExPQUQtbmV0cmMtYmFkKQorcnVuX2NtYWtlKFVQTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQpCitydW5fY21ha2UoVVBMT0FELXRscy12ZXJpZnktbm90LXNldCkKIHJ1bl9jbWFrZShVUExPQUQtcGFzcy1ub3Qtc2V0KQogcnVuX2NtYWtlKElOU1RBTEwtRElSRUNUT1JZKQogcnVuX2NtYWtlKElOU1RBTEwtRklMRVNfRlJPTV9ESVIpCkBAIC02OSw3ICs3NCw3IEBACiAgIHJ1bl9jbWFrZShJTlNUQUxMLUZPTExPV19TWU1MSU5LX0NIQUlOKQogZW5kaWYoKQogCi1pZihSdW5DTWFrZV9HRU5FUkFUT1IgU1RSRVFVQUwgIk5pbmphIikKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJOaW5qYSIpCiAgICMgRGV0ZWN0IG5pbmphIHZlcnNpb24gc28gd2Uga25vdyB3aGF0IHRlc3RzIGNhbiBiZSBzdXBwb3J0ZWQuCiAgIGV4ZWN1dGVfcHJvY2VzcygKICAgICBDT01NQU5EICIke1J1bkNNYWtlX01BS0VfUFJPR1JBTX0iIC0tdmVyc2lvbgpAQCAtOTAsNyArOTUsNyBAQAogICBlbmRpZigpCiBlbmRpZigpCiAKLWlmKFJ1bkNNYWtlX0dFTkVSQVRPUiBTVFJFUVVBTCAiTmluamEiIEFORCAiJHtuaW5qYV92ZXJzaW9ufSIgVkVSU0lPTl9MRVNTIDEuOCkKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJOaW5qYSIgQU5EICIke25pbmphX3ZlcnNpb259IiBWRVJTSU9OX0xFU1MgMS44KQogICBydW5fY21ha2UoR0xPQl9SRUNVUlNFLXdhcm4tQ09ORklHVVJFX0RFUEVORFMtbmluamEtdmVyc2lvbikKIGVsc2UoKQogICBydW5fY21ha2UoR0xPQi13YXJuLUNPTkZJR1VSRV9ERVBFTkRTLWxhdGUpCkBAIC0xMTEsNyArMTE2LDcgQEAKICAgc2V0KHRmXzEgICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGVzdC8xLnR4dCIpCiAgIGZpbGUoV1JJVEUgIiR7dGZfMX0iICIxIikKIAotICBtZXNzYWdlKFNUQVRVUyAiR0xPQi1SZXJ1bkNNYWtlOiBmaXJzdCBjb25maWd1cmF0aW9uLi4uIikKKyAgbWVzc2FnZShTVEFUVVMgIkdMT0ItQ09ORklHVVJFX0RFUEVORFMtUmVydW5DTWFrZTogZmlyc3QgY29uZmlndXJhdGlvbi4uLiIpCiAgIHJ1bl9jbWFrZShHTE9CLUNPTkZJR1VSRV9ERVBFTkRTLVJlcnVuQ01ha2UpCiAgIHJ1bl9jbWFrZV9jb21tYW5kKEdMT0ItQ09ORklHVVJFX0RFUEVORFMtUmVydW5DTWFrZS1idWlsZCAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKIApAQCAtMTI1LDEwICsxMzAsMjUgQEAKIAogICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHNsZWVwICR7ZnNfZGVsYXl9KQogICBtZXNzYWdlKFNUQVRVUyAiR0xPQi1DT05GSUdVUkVfREVQRU5EUy1SZXJ1bkNNYWtlOiByZW1vdmUgZmlyc3QgdGVzdCBmaWxlLi4uIikKLSAgZmlsZShSRU1PVkUgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90ZXN0LzEudHh0IikKKyAgZmlsZShSRU1PVkUgIiR7dGZfMX0iKQogICBydW5fY21ha2VfY29tbWFuZChHTE9CLUNPTkZJR1VSRV9ERVBFTkRTLVJlcnVuQ01ha2UtcmVidWlsZF9zZWNvbmQgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCiAgIHJ1bl9jbWFrZV9jb21tYW5kKEdMT0ItQ09ORklHVVJFX0RFUEVORFMtUmVydW5DTWFrZS1ub3dvcmsgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCiAKKyAgaWYoTk9UIFdJTjMyIE9SIENZR1dJTikKKyAgICBtZXNzYWdlKFNUQVRVUyAiR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2U6IGxpbmsgdGhlIGZpcnN0IHRlc3QgZGlyZWN0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5Li4uIikKKyAgICBmaWxlKE1BS0VfRElSRUNUT1JZICIke1J1bkNNYWtlX1RFU1RfQklOQVJZX0RJUn0vdGVzdDIiKQorICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY3JlYXRlX3N5bWxpbmsgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS90ZXN0IiAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3Rlc3QyL3Rlc3RfZm9sZGVyX3N5bWxpbmsiKQorCisgICAgbWVzc2FnZShTVEFUVVMgIkdMT0ItQ09ORklHVVJFX0RFUEVORFMtQ01QMDAwOS1SZXJ1bkNNYWtlOiBmaXJzdCBjb25maWd1cmF0aW9uLi4uIikKKyAgICBydW5fY21ha2UoR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UpCisgICAgcnVuX2NtYWtlX2NvbW1hbmQoR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2UtYnVpbGQgJHtDTUFLRV9DT01NQU5EfSAtLWJ1aWxkIC4pCisKKyAgICBtZXNzYWdlKFNUQVRVUyAiR0xPQi1DT05GSUdVUkVfREVQRU5EUy1DTVAwMDA5LVJlcnVuQ01ha2U6IGFkZCBhbm90aGVyIGZpbGUgaW4gdGhlIGxpbmtlZCBkaXJlY3RvcnkuLi4iKQorICAgIHNldCh0Zl8zICAiJHtSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVJ9L3Rlc3QvMy50eHQiKQorICAgIGZpbGUoV1JJVEUgIiR7dGZfM30iICIzIikKKyAgICBydW5fY21ha2VfY29tbWFuZChHTE9CLUNPTkZJR1VSRV9ERVBFTkRTLUNNUDAwMDktUmVydW5DTWFrZS1yZWJ1aWxkICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQorICBlbmRpZigpCisKICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQogICB1bnNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOKQogICB1bnNldChSdW5DTWFrZV9ERUZBVUxUX3N0ZGVycikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtY2FpbmZvLW5vdC1zZXQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWZhNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgVVBMT0FELXRscy1jYWluZm8tbm90LXNldC5jbWFrZTpbMC05XSsgXChmaWxlXCk6CisgIGZpbGUgVVBMT0FEIG1pc3NpbmcgZmlsZSB2YWx1ZSBmb3IgVExTX0NBSU5GTy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy1jYWluZm8tbm90LXNldC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy1jYWluZm8tbm90LXNldC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWI3YzgzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLWNhaW5mby1ub3Qtc2V0LmNtYWtlCkBAIC0wLDAgKzEgQEAKK2ZpbGUoVVBMT0FEICIiICIiIFRMU19DQUlORk8pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy12ZXJpZnktbm90LXNldC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmlsZS9VUExPQUQtdGxzLXZlcmlmeS1ub3Qtc2V0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkZmZjZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy12ZXJpZnktbm90LXNldC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IFVQTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgorICBmaWxlIFVQTE9BRCBtaXNzaW5nIGJvb2wgdmFsdWUgZm9yIFRMU19WRVJJRlkuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maWxlL1VQTE9BRC10bHMtdmVyaWZ5LW5vdC1zZXQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5ZDI5MwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbGUvVVBMT0FELXRscy12ZXJpZnktbm90LXNldC5jbWFrZQpAQCAtMCwwICsxIEBACitmaWxlKFVQTE9BRCAiIiAiIiBUTFNfVkVSSUZZKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9kZXBlbmRlbmN5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9kZXBlbmRlbmN5L0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZGVwZW5kZW5jeS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2RlcGVuZGVuY3kvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUHJlZml4SW5QQVRILXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUHJlZml4SW5QQVRILXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3NzU3MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9QcmVmaXhJblBBVEgtc3RkZXJyLnR4dApAQCAtMCwwICsxLDEzIEBACisgIGZpbmRfZmlsZSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzOi4qCisgICAgVkFSOiBQcmVmaXhJblBBVEhfSU5DTFVERV9ESVIKKyAgICBOQU1FUzogXCJQcmVmaXhJblBBVEhcLmhcIgorICAgIERvY3VtZW50YXRpb24uKgorICAgIEZyYW1ld29yay4qCisgICAgQXBwQnVuZGxlLioKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEg6IDEKKworICBmaW5kX2ZpbGUgY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczouKgorLippbmNsdWRlL1ByZWZpeEluUEFUSC4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUHJlZml4SW5QQVRILmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1ByZWZpeEluUEFUSC5jbWFrZQppbmRleCAxZTMzYzA4Li5jMzM0ZDg5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUHJlZml4SW5QQVRILmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9QcmVmaXhJblBBVEguY21ha2UKQEAgLTEsNCArMSwxMCBAQAogc2V0KEVOVl9QQVRIICIkRU5We1BBVEh9IikKKworc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAxKQorc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2JpbiIpCitmaW5kX2ZpbGUoUHJlZml4SW5QQVRIX0lOQ0xVREVfRElSIE5BTUVTIFByZWZpeEluUEFUSC5oKQorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAwKQorCiBmb3JlYWNoKHBhdGggIi9kb2VzX25vdF9leGlzdCIgIiIgIi9iaW4iICIvc2JpbiIpCiAgIHVuc2V0KFByZWZpeEluUEFUSF9JTkNMVURFX0RJUiBDQUNIRSkKICAgc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9JHtwYXRofSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS93aGl0ZWxpc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SZXF1aXJlZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUmVxdWlyZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUmVxdWlyZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWMzMzdjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACitDTWFrZSBFcnJvciBhdCBSZXF1aXJlZC5jbWFrZTo5IFwoZmluZF9maWxlXCk6CisgIENvdWxkIG5vdCBmaW5kIEZJTEVfZG9Ob3RFeGlzdHMgdXNpbmcgdGhlIGZvbGxvd2luZyBmaWxlczogZG9Ob3RFeGlzdHMuaAorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUmVxdWlyZWQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2E4ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLS0gRklMRV9leGlzdHM9J1teJ10qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9pbmNsdWRlL1ByZWZpeEluUEFUSC5oJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1JlcXVpcmVkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjA5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUmVxdWlyZWQuY21ha2UKQEAgLTAsMCArMSwxMiBAQAorZmluZF9maWxlKEZJTEVfZXhpc3RzCisgIE5BTUVTIFByZWZpeEluUEFUSC5oCisgIFBBVEhTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pbmNsdWRlCisgIE5PX0RFRkFVTFRfUEFUSAorICBSRVFVSVJFRAorICApCittZXNzYWdlKFNUQVRVUyAiRklMRV9leGlzdHM9JyR7RklMRV9leGlzdHN9JyIpCisKK2ZpbmRfZmlsZShGSUxFX2RvTm90RXhpc3RzCisgIE5BTUVTIGRvTm90RXhpc3RzLmgKKyAgUkVRVUlSRUQKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfZmlsZS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOWY1NmE1Ny4uOTNkZmI3OCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZmluZF9maWxlL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2ZpbGUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0zLDMgKzMsNCBAQAogcnVuX2NtYWtlKEZyb21QQVRIRW52KQogcnVuX2NtYWtlKEZyb21QcmVmaXhQYXRoKQogcnVuX2NtYWtlKFByZWZpeEluUEFUSCkKK3J1bl9jbWFrZShSZXF1aXJlZCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9Gcm9tUEFUSEVudi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L0Zyb21QQVRIRW52LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY5MGVlYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9Gcm9tUEFUSEVudi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMjggQEAKKyAgZmluZF9saWJyYXJ5IGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6LioKKyAgICBWQVI6IENSRUFURURfTElCUkFSWQorICAgIE5BTUVTOiBcImNyZWF0ZWRcIgorICAgICAgICAgICBcImNyZWF0ZWRfbm9fZXhpc3RcIgorICAgIERvY3VtZW50YXRpb24uKgorICAgIEZyYW1ld29yay4qCisgICAgQXBwQnVuZGxlLioKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAwCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEg6IDEKKworICBmaW5kX2xpYnJhcnkgY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczouKgorICBUaGUgaXRlbSB3YXMgbm90IGZvdW5kLioKKyAgZmluZF9saWJyYXJ5IGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6LioKKyAgICBWQVI6IENSRUFURURfTElCUkFSWQorICAgIE5BTUVTOiBcImNyZWF0ZWRcIgorICAgIERvY3VtZW50YXRpb24uKgorICAgIEZyYW1ld29yay4qCisgICAgQXBwQnVuZGxlLioKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEg6IDEKKworICBmaW5kX2xpYnJhcnkgY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczouKgorICBUaGUgaXRlbSB3YXMgZm91bmQgYXQuKgorLipsaWIvbGliY3JlYXRlZC5hCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvRnJvbVBBVEhFbnYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvRnJvbVBBVEhFbnYuY21ha2UKaW5kZXggZmVjMDQxZC4uYzI0ZTY0MCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L0Zyb21QQVRIRW52LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9Gcm9tUEFUSEVudi5jbWFrZQpAQCAtNCw2ICs0LDE5IEBACiBmaWxlKE1BS0VfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIpCiBmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliL2xpYmNyZWF0ZWQuYSIgImNyZWF0ZWQiKQogCitzZXQoQ01BS0VfRklORF9ERUJVR19NT0RFIDEpCitzZXQoQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEggT0ZGKQorCitzZXQoRU5We1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliIikKK2ZpbmRfbGlicmFyeShDUkVBVEVEX0xJQlJBUlkgTkFNRVMgY3JlYXRlZCBjcmVhdGVkX25vX2V4aXN0KQorCitzZXQoQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEggT04pCisKK3NldChFTlZ7UEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIiKQorZmluZF9saWJyYXJ5KENSRUFURURfTElCUkFSWSBOQU1FUyBjcmVhdGVkKQorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAwKQorCisKIGZvcmVhY2gocGF0aCAiL2RvZXNfbm90X2V4aXN0IiAiL2xpYiIgIiIpCiAgIHVuc2V0KENSRUFURURfTElCUkFSWSBDQUNIRSkKICAgc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9JHtwYXRofSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvTGliU3ltTGluay1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L0xpYlN5bUxpbmstc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJmMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L0xpYlN5bUxpbmstc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK15TWU1MSU5LX0xJQlJBUlk9J1NZTUxJTktfTElCUkFSWS1OT1RGT1VORCcKK1NZTUxJTktfTElCUkFSWT0nW14nXSovVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L0xpYlN5bUxpbmstYnVpbGQvbGliL2xpYnN5bWxpbmsuYSckCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvTGliU3ltTGluay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9MaWJTeW1MaW5rLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTRiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvTGliU3ltTGluay5jbWFrZQpAQCAtMCwwICsxLDE3IEBACitsaXN0KEFQUEVORCBDTUFLRV9GSU5EX0xJQlJBUllfUFJFRklYRVMgbGliKQorbGlzdChBUFBFTkQgQ01BS0VfRklORF9MSUJSQVJZX1NVRkZJWEVTIC5hKQorZmlsZShNQUtFX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliKQorZmlsZShDUkVBVEVfTElOSyAibGlic3ltbGlua2VkLmEiICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vbGliL2xpYnN5bWxpbmsuYSIgU1lNQk9MSUMpCitmaW5kX2xpYnJhcnkoU1lNTElOS19MSUJSQVJZCisgIE5BTUVTIHN5bWxpbmsKKyAgUEFUSFMgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYgorICBOT19ERUZBVUxUX1BBVEgKKyAgKQorbWVzc2FnZSgiU1lNTElOS19MSUJSQVJZPScke1NZTUxJTktfTElCUkFSWX0nIikKK2ZpbGUoV1JJVEUgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIvbGlic3ltbGlua2VkLmEiICJzeW1saW5rZWQiKQorZmluZF9saWJyYXJ5KFNZTUxJTktfTElCUkFSWQorICBOQU1FUyBzeW1saW5rCisgIFBBVEhTICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWIKKyAgTk9fREVGQVVMVF9QQVRICisgICkKK21lc3NhZ2UoIlNZTUxJTktfTElCUkFSWT0nJHtTWU1MSU5LX0xJQlJBUll9JyIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUHJlZml4SW5QQVRILXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUHJlZml4SW5QQVRILXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyNGM4NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9QcmVmaXhJblBBVEgtc3RkZXJyLnR4dApAQCAtMCwwICsxLDE0IEBACisgIGZpbmRfbGlicmFyeSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzOi4qCisgICAgVkFSOiBQcmVmaXhJblBBVEhfTElCUkFSWQorICAgIE5BTUVTOiBcIlByZWZpeEluUEFUSFwiCisgICAgRG9jdW1lbnRhdGlvbi4qCisgICAgRnJhbWV3b3JrLioKKyAgICBBcHBCdW5kbGUuKgorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1BBVEg6IDEKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9FTlZJUk9OTUVOVF9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfU1lTVEVNX0VOVklST05NRU5UX1BBVEg6IDEKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9TWVNURU1fUEFUSDogMQorCisgIGZpbmRfbGlicmFyeSBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOi4qCisuKi9kb2VzX25vdF9leGlzdC4qCisgIFRoZSBpdGVtIHdhcyBub3QgZm91bmQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9QcmVmaXhJblBBVEguY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUHJlZml4SW5QQVRILmNtYWtlCmluZGV4IGYxYjhiMTguLmUyN2QzNjIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9QcmVmaXhJblBBVEguY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1ByZWZpeEluUEFUSC5jbWFrZQpAQCAtMiw2ICsyLDEyIEBACiBsaXN0KEFQUEVORCBDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgLmEpCiAKIHNldChFTlZfUEFUSCAiJEVOVntQQVRIfSIpCisKK3NldChDTUFLRV9GSU5EX0RFQlVHX01PREUgMSkKK3NldChFTlZ7UEFUSH0gIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9kb2VzX25vdF9leGlzdCIpCitmaW5kX2xpYnJhcnkoUHJlZml4SW5QQVRIX0xJQlJBUlkgTkFNRVMgUHJlZml4SW5QQVRIKQorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAwKQorCiBmb3JlYWNoKHBhdGggIi9kb2VzX25vdF9leGlzdCIgIiIgIi9iaW4iICIvc2JpbiIpCiAgIHVuc2V0KFByZWZpeEluUEFUSF9MSUJSQVJZIENBQ0hFKQogICBzZXQoRU5We1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0ke3BhdGh9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3doaXRlbGlzdC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS93aGl0ZWxpc3QtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NWQxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK0NNYWtlIEVycm9yIGF0IFJlcXVpcmVkLmNtYWtlOjExIFwoZmluZF9saWJyYXJ5XCk6CisgIENvdWxkIG5vdCBmaW5kIExJQl9kb05vdEV4aXN0cyB1c2luZyB0aGUgZm9sbG93aW5nIG5hbWVzOiBkb05vdEV4aXN0cworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUmVxdWlyZWQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODhhYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLS0gTElCX2V4aXN0cz0nW14nXSovVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L2xpYi9saWJQcmVmaXhJblBBVEguYScKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SZXF1aXJlZC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGM5Zjg3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1JlcXVpcmVkLmNtYWtlCkBAIC0wLDAgKzEsMTQgQEAKK2xpc3QoQVBQRU5EIENNQUtFX0ZJTkRfTElCUkFSWV9QUkVGSVhFUyBsaWIpCitsaXN0KEFQUEVORCBDTUFLRV9GSU5EX0xJQlJBUllfU1VGRklYRVMgLmEpCitmaW5kX2xpYnJhcnkoTElCX2V4aXN0cworICBOQU1FUyBQcmVmaXhJblBBVEgKKyAgUEFUSFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYgorICBOT19ERUZBVUxUX1BBVEgKKyAgUkVRVUlSRUQKKyAgKQorbWVzc2FnZShTVEFUVVMgIkxJQl9leGlzdHM9JyR7TElCX2V4aXN0c30nIikKKworZmluZF9saWJyYXJ5KExJQl9kb05vdEV4aXN0cworICBOQU1FUyBkb05vdEV4aXN0cworICBSRVFVSVJFRAorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9saWJyYXJ5L1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA2NDNhNWI5Li5jN2Q2OWU0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX2xpYnJhcnkvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfbGlicmFyeS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTMsNyArMyw5IEBACiBydW5fY21ha2UoQ3JlYXRlZCkKIHJ1bl9jbWFrZShGcm9tUHJlZml4UGF0aCkKIHJ1bl9jbWFrZShGcm9tUEFUSEVudikKLWlmKENNQUtFX0hPU1RfVU5JWCkKK2lmKFVOSVggQU5EIE5PVCBDWUdXSU4pCiAgIHJ1bl9jbWFrZShMaWJBcmNoTGluaykKKyAgcnVuX2NtYWtlKExpYlN5bUxpbmspCiBlbmRpZigpCiBydW5fY21ha2UoUHJlZml4SW5QQVRIKQorcnVuX2NtYWtlKFJlcXVpcmVkKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjc0YjNmZjggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvRnJvbVBBVEhFbnYtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9Gcm9tUEFUSEVudi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNWYwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvRnJvbVBBVEhFbnYtc3RkZXJyLnR4dApAQCAtMCwwICsxLDIwIEBACitDTWFrZSBEZWJ1ZyBMb2cgYXQgRnJvbVBBVEhFbnYuY21ha2U6NSBcKGZpbmRfcGFja2FnZVwpOgorICBmaW5kX3BhY2thZ2UgY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIHBhdGhzIGZvciBSZXNvbHZlZC5jbWFrZS4qCisuKi9Nb2R1bGVzL0ZpbmRSZXNvbHZlZC5jbWFrZS4qCisgIFRoZSBmaWxlIHdhcyBub3QgZm91bmQuKgorICA8UGFja2FnZU5hbWU+X1JPT1QgQ01ha2UgdmFyaWFibGUuKgorICBDTUFLRV9QUkVGSVhfUEFUSCB2YXJpYWJsZS4qCisgIENNQUtFX0ZSQU1FV09SS19QQVRIIGFuZCBDTUFLRV9BUFBCVU5ETEVfUEFUSCB2YXJpYWJsZXMuKgorICBFbnYgdmFyaWFibGUgUmVzb2x2ZWRfRElSLioKKyAgQ01BS0VfUFJFRklYX1BBVEggZW52IHZhcmlhYmxlLioKKyAgUGF0aHMgc3BlY2lmaWVkIGJ5IHRoZSBmaW5kX3BhY2thZ2UgSElOVFMgb3B0aW9uLioKKyAgU3RhbmRhcmQgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcy4qCisuKlRlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9QYWNrYWdlUm9vdC4qCisgIENNYWtlIFVzZXIgUGFja2FnZSBSZWdpc3RyeS4qCisgIENNYWtlIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBQbGF0Zm9ybSBmaWxlLioKKyAgQ01ha2UgU3lzdGVtIFBhY2thZ2UgUmVnaXN0cnkuKgorICBQYXRocyBzcGVjaWZpZWQgYnkgdGhlIGZpbmRfcGFja2FnZSBQQVRIUyBvcHRpb24uKgorICBmaW5kX3BhY2thZ2UgY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9ucyBmb3IgdGhlIENvbmZpZyBtb2R1bGU6LioKKy4qVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL1BhY2thZ2VSb290L1Jlc29sdmVkQ29uZmlnXC5jbWFrZS4qCisgIFRoZSBmaWxlIHdhcyBmb3VuZCBhdC4qCisuKlRlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9QYWNrYWdlUm9vdC9SZXNvbHZlZENvbmZpZ1wuY21ha2UKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9Gcm9tUEFUSEVudi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9Gcm9tUEFUSEVudi5jbWFrZQppbmRleCA0ODIyYjEzLi5jZWI3OWI2IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvRnJvbVBBVEhFbnYuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL0Zyb21QQVRIRW52LmNtYWtlCkBAIC0xLDQgKzEsMTAgQEAKIHNldChFTlZfUEFUSCAiJEVOVntQQVRIfSIpCisKK3NldChDTUFLRV9GSU5EX0RFQlVHX01PREUgT04pCitzZXQoRU5We1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vUGFja2FnZVJvb3QiKQorZmluZF9wYWNrYWdlKFJlc29sdmVkIFFVSUVUKQorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSBPRkYpCisKIGZvcmVhY2gocGF0aCAiL2RvZXNfbm90X2V4aXN0IiAiL1BhY2thZ2VSb290IiAiIikKICAgdW5zZXQoUmVzb2x2ZWRfRk9VTkQgQ0FDSEUpCiAgIHNldChSZXNvbHZlZF9ESVIgIiIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvTWlzc2luZ0NvbmZpZ0RlYnVnLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvTWlzc2luZ0NvbmZpZ0RlYnVnLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5YmY3YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9NaXNzaW5nQ29uZmlnRGVidWctc3RkZXJyLnR4dApAQCAtMCwwICsxLDE4IEBACisgIDxQYWNrYWdlTmFtZT5fUk9PVCBDTWFrZSB2YXJpYWJsZS4qCisgIENNQUtFX1BSRUZJWF9QQVRIIHZhcmlhYmxlLioKKyAgQ01BS0VfRlJBTUVXT1JLX1BBVEggYW5kIENNQUtFX0FQUEJVTkRMRV9QQVRIIHZhcmlhYmxlcy4qCisgIEVudiB2YXJpYWJsZSBOb3RIZXJlX0RJUi4qCisgIENNQUtFX1BSRUZJWF9QQVRIIGVudiB2YXJpYWJsZS4qCisgIFN0YW5kYXJkIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuKgorICBDTWFrZSBVc2VyIFBhY2thZ2UgUmVnaXN0cnkuKgorICBDTWFrZSB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgUGxhdGZvcm0gZmlsZS4qCisgIENNYWtlIFN5c3RlbSBQYWNrYWdlIFJlZ2lzdHJ5LioKKyAgUGF0aHMgc3BlY2lmaWVkIGJ5IHRoZSBmaW5kX3BhY2thZ2UgUEFUSFMgb3B0aW9uLioKKy4qCisgICAgLipOb3RIZXJlQ29uZmlnLmNtYWtlCisgICAgLipub3RoZXJlLWNvbmZpZy5jbWFrZQorLioKK0NNYWtlIFdhcm5pbmcgYXQgTWlzc2luZ0NvbmZpZ0RlYnVnLmNtYWtlOjMgXChtZXNzYWdlXCk6CisgIFRoaXMgd2FybmluZyBtdXN0IGJlIHJlYWNoYWJsZS4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvTWlzc2luZ0NvbmZpZ0RlYnVnLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL01pc3NpbmdDb25maWdEZWJ1Zy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTNiYjIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL01pc3NpbmdDb25maWdEZWJ1Zy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKK3NldChDTUFLRV9GSU5EX0RFQlVHX01PREUgT04pCitmaW5kX3BhY2thZ2UoTm90SGVyZSBDT05GSUcpCittZXNzYWdlKFdBUk5JTkcgIlRoaXMgd2FybmluZyBtdXN0IGJlIHJlYWNoYWJsZS4iKQorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSBPRkYpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvTWlzc2luZ05vcm1hbFdhcm5Ob01vZHVsZU9sZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL01pc3NpbmdOb3JtYWxXYXJuTm9Nb2R1bGVPbGQtc3RkZXJyLnR4dAppbmRleCBiMzM2YjU2Li5lYmZkN2QwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvTWlzc2luZ05vcm1hbFdhcm5Ob01vZHVsZU9sZC1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9NaXNzaW5nTm9ybWFsV2Fybk5vTW9kdWxlT2xkLXN0ZGVyci50eHQKQEAgLTEsOSArMSwxMCBAQAogQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IE1pc3NpbmdOb3JtYWxXYXJuTm9Nb2R1bGVPbGQuY21ha2U6MiBcKGZpbmRfcGFja2FnZVwpOgotICBmaW5kX3BhY2thZ2UgY2FsbGVkIHdpdGhvdXQgTk9fTU9EVUxFIG9wdGlvbiBhbmQgbm8gRmluZE5vdEhlcmUuY21ha2UKLSAgbW9kdWxlIGlzIGluIENNQUtFX01PRFVMRV9QQVRILiAgQWRkIE5PX01PRFVMRSB0byBleGNsdXNpdmVseSByZXF1ZXN0Ci0gIENvbmZpZyBtb2RlIGFuZCBzZWFyY2ggZm9yIGEgcGFja2FnZSBjb25maWd1cmF0aW9uIGZpbGUgcHJvdmlkZWQgYnkgTm90SGVyZQotICBcKE5vdEhlcmVDb25maWcuY21ha2Ugb3Igbm90aGVyZS1jb25maWcuY21ha2VcKS4gIE90aGVyd2lzZSBtYWtlCi0gIEZpbmROb3RIZXJlLmNtYWtlIGF2YWlsYWJsZSBpbiBDTUFLRV9NT0RVTEVfUEFUSC4KKyAgZmluZF9wYWNrYWdlIGNhbGxlZCB3aXRob3V0IGVpdGhlciBNT0RVTEUgb3IgQ09ORklHIG9wdGlvbiBhbmQgbm8KKyAgRmluZE5vdEhlcmUuY21ha2UgbW9kdWxlIGlzIGluIENNQUtFX01PRFVMRV9QQVRILiAgQWRkIE1PRFVMRSB0bworICBleGNsdXNpdmVseSByZXF1ZXN0IE1vZHVsZSBtb2RlIGFuZCBmYWlsIGlmIEZpbmROb3RIZXJlLmNtYWtlIGlzIG1pc3NpbmcuCisgIEFkZCBDT05GSUcgdG8gZXhjbHVzaXZlbHkgcmVxdWVzdCBDb25maWcgbW9kZSBhbmQgc2VhcmNoIGZvciBhIHBhY2thZ2UKKyAgY29uZmlndXJhdGlvbiBmaWxlIHByb3ZpZGVkIGJ5IE5vdEhlcmUgXChOb3RIZXJlQ29uZmlnLmNtYWtlIG9yCisgIG5vdGhlcmUtY29uZmlnLmNtYWtlXCkuCiAKICAgXChWYXJpYWJsZSBDTUFLRV9GSU5EX1BBQ0tBR0VfV0FSTl9OT19NT0RVTEUgZW5hYmxlZCB0aGlzIHdhcm5pbmcuXCkKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYWNrYWdlL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAyMDhmODNjLi41MTg2Mjk3IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhY2thZ2UvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGFja2FnZS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEzLDYgKzEzLDcgQEAKIHJ1bl9jbWFrZShNaXNzaW5nTW9kdWxlKQogcnVuX2NtYWtlKE1pc3NpbmdNb2R1bGVSZXF1aXJlZCkKIHJ1bl9jbWFrZShNaXNzaW5nQ29uZmlnKQorcnVuX2NtYWtlKE1pc3NpbmdDb25maWdEZWJ1ZykKIHJ1bl9jbWFrZShNaXNzaW5nQ29uZmlnT25lTmFtZSkKIHJ1bl9jbWFrZShNaXNzaW5nQ29uZmlnUmVxdWlyZWQpCiBydW5fY21ha2UoTWlzc2luZ0NvbmZpZ1ZlcnNpb24pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvRnJvbVBBVEhFbnYtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9Gcm9tUEFUSEVudi1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OGVmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvRnJvbVBBVEhFbnYtc3RkZXJyLnR4dApAQCAtMCwwICsxLDI3IEBACisgIGZpbmRfcGF0aCBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzOi4qCisgICAgVkFSOiBQQVRIX0lOX0VOVl9QQVRICisgICAgTkFNRVM6IFwiUHJlZml4SW5QQVRIXC5oXCIKKyAgICBEb2N1bWVudGF0aW9uLioKKyAgICBGcmFtZXdvcmsuKgorICAgIEFwcEJ1bmRsZS4qCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEg6IDEKKyAgICBDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSDogMAorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRIOiAxCisKKyAgZmluZF9wYXRoIGNvbnNpZGVyZWQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6LioKKyAgVGhlIGl0ZW0gd2FzIG5vdCBmb3VuZC4qCisgIGZpbmRfcGF0aCBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzOi4qCisgICAgVkFSOiBQQVRIX0lOX0VOVl9QQVRICisgICAgTkFNRVM6IFwiUHJlZml4SW5QQVRIXC5oXCIKKyAgICBEb2N1bWVudGF0aW9uLioKKyAgICBGcmFtZXdvcmsuKgorICAgIEFwcEJ1bmRsZS4qCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEg6IDEKKyAgICBDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRIOiAxCisKKyAgZmluZF9wYXRoIGNvbnNpZGVyZWQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6LioKKyAgVGhlIGl0ZW0gd2FzIGZvdW5kIGF0LioKKy4qaW5jbHVkZS9QcmVmaXhJblBBVEguKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL0Zyb21QQVRIRW52LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL0Zyb21QQVRIRW52LmNtYWtlCmluZGV4IGFmMTNkMDkuLjUzNWU2MjQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9Gcm9tUEFUSEVudi5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvRnJvbVBBVEhFbnYuY21ha2UKQEAgLTEsNCArMSwxNiBAQAogc2V0KEVOVl9QQVRIICIkRU5We1BBVEh9IikKKworc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAxKQorc2V0KENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIIE9GRikKKworc2V0KEVOVntQQVRIfSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2luY2x1ZGUiKQorZmluZF9wYXRoKFBBVEhfSU5fRU5WX1BBVEggTkFNRVMgUHJlZml4SW5QQVRILmgpCisKK3NldChDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSCBPTikKK2ZpbmRfcGF0aChQQVRIX0lOX0VOVl9QQVRIIE5BTUVTIFByZWZpeEluUEFUSC5oKQorCitzZXQoQ01BS0VfRklORF9ERUJVR19NT0RFIDApCisKIGZvcmVhY2gocGF0aCAiL2RvZXNfbm90X2V4aXN0IiAiL2luY2x1ZGUiICIiKQogICB1bnNldChQQVRIX0lOX0VOVl9QQVRIIENBQ0hFKQogICBzZXQoRU5We1BBVEh9ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0ke3BhdGh9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3doaXRlbGlzdC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL1JlcXVpcmVkLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS93aGl0ZWxpc3QtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjVjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK0NNYWtlIEVycm9yIGF0IFJlcXVpcmVkLmNtYWtlOjkgXChmaW5kX3BhdGhcKToKKyAgQ291bGQgbm90IGZpbmQgUEFUSF9kb05vdEV4aXN0cyB1c2luZyB0aGUgZm9sbG93aW5nIGZpbGVzOiBkb05vdEV4aXN0cy5oCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWZjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACistLSBQQVRIX2V4aXN0cz0nW14nXSovVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL2luY2x1ZGUnCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUmVxdWlyZWQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyZGMxMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SZXF1aXJlZC5jbWFrZQpAQCAtMCwwICsxLDEyIEBACitmaW5kX3BhdGgoUEFUSF9leGlzdHMKKyAgTkFNRVMgUHJlZml4SW5QQVRILmgKKyAgUEFUSFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2luY2x1ZGUKKyAgTk9fREVGQVVMVF9QQVRICisgIFJFUVVJUkVECisgICkKK21lc3NhZ2UoU1RBVFVTICJQQVRIX2V4aXN0cz0nJHtQQVRIX2V4aXN0c30nIikKKworZmluZF9wYXRoKFBBVEhfZG9Ob3RFeGlzdHMKKyAgTkFNRVMgZG9Ob3RFeGlzdHMuaAorICBSRVFVSVJFRAorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wYXRoL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBlZDU1ZjUxLi41YzkxOWJiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3BhdGgvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcGF0aC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTMsNiArMyw3IEBACiBydW5fY21ha2UoRW1wdHlPbGRTdHlsZSkKIHJ1bl9jbWFrZShGcm9tUEFUSEVudikKIHJ1bl9jbWFrZShQcmVmaXhJblBBVEgpCitydW5fY21ha2UoUmVxdWlyZWQpCiAKIGlmKEFQUExFKQogICBydW5fY21ha2UoRnJhbWV3b3Jrc1dpdGhTdWJkaXJzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0J1bmRsZVNwYWNlSW5OYW1lLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQnVuZGxlU3BhY2VJbk5hbWUtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzFkNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0J1bmRsZVNwYWNlSW5OYW1lLXN0ZG91dC50eHQKQEAgLTAsMCArMSBAQAorLS0gRmFrZUFwcF9FWEVDVVRBQkxFPScuKi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQnVuZGxlU3BhY2VJbk5hbWUtYnVpbGQvRmFrZSBhcHAuYXBwL0NvbnRlbnRzL01hY09TL0Zha2UgYXBwJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0J1bmRsZVNwYWNlSW5OYW1lLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0J1bmRsZVNwYWNlSW5OYW1lLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTJkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQnVuZGxlU3BhY2VJbk5hbWUuY21ha2UKQEAgLTAsMCArMSw4IEBACitzZXQoZmFrZUFwcCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0Zha2UgYXBwLmFwcC9Db250ZW50cy9NYWNPUy9GYWtlIGFwcCIpCitmaWxlKFdSSVRFICIke2Zha2VBcHB9IiAiIyEvYmluL3NoXG4iKQorZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgY2htb2QgYStyeCAiJHtmYWtlQXBwfSIpCisKK2ZpbmRfcHJvZ3JhbShGYWtlQXBwX0VYRUNVVEFCTEUgTkFNRVMgIkZha2UgYXBwIiBOT19ERUZBVUxUX1BBVEgKKyAgUEFUSFMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSIKKykKK21lc3NhZ2UoU1RBVFVTICJGYWtlQXBwX0VYRUNVVEFCTEU9JyR7RmFrZUFwcF9FWEVDVVRBQkxFfSciKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktQ29tbW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktQ29tbW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTQxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1Db21tb24uY21ha2UKQEAgLTAsMCArMSw3IEBACitmaWxlKFdSSVRFICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vRXhlTm9SZWFkIiAiIyEvYmluL3NoXG4iKQorZmlsZShXUklURSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L1JlYWROb0V4ZSIgIiNSZWFkTm9FeGUiKQorZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgY2htb2QgLXIreCAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0V4ZU5vUmVhZCIpCitmaW5kX3Byb2dyYW0oRXhlTm9SZWFkX0VYRUNVVEFCTEUgTkFNRVMgRXhlTm9SZWFkIE5PX0RFRkFVTFRfUEFUSCBQQVRIUyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9IikKK21lc3NhZ2UoU1RBVFVTICJFeGVOb1JlYWRfRVhFQ1VUQUJMRT0nJHtFeGVOb1JlYWRfRVhFQ1VUQUJMRX0nIikKK2ZpbmRfcHJvZ3JhbShSZWFkTm9FeGVfRVhFQ1VUQUJMRSBOQU1FUyBSZWFkTm9FeGUgTk9fREVGQVVMVF9QQVRIIFBBVEhTICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0iKQorbWVzc2FnZShTVEFUVVMgIlJlYWROb0V4ZV9FWEVDVVRBQkxFPScke1JlYWROb0V4ZV9FWEVDVVRBQkxFfSciKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktTkVXLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1ORVctc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ0NDYzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktTkVXLXN0ZG91dC50eHQKQEAgLTAsMCArMSwyIEBACistLSBFeGVOb1JlYWRfRVhFQ1VUQUJMRT0nLiovVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktTkVXLWJ1aWxkL0V4ZU5vUmVhZCcKKy0tIFJlYWROb0V4ZV9FWEVDVVRBQkxFPSdSZWFkTm9FeGVfRVhFQ1VUQUJMRS1OT1RGT1VORCcKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LU5FVy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LU5FVy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE0MDMzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktTkVXLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorY21ha2VfcG9saWN5KFNFVCBDTVAwMTA5IE5FVykKK2luY2x1ZGUoQ01QMDEwOS1Db21tb24uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1PTEQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LU9MRC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMGUyYTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1PTEQtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDIgQEAKKy0tIEV4ZU5vUmVhZF9FWEVDVVRBQkxFPSdFeGVOb1JlYWRfRVhFQ1VUQUJMRS1OT1RGT1VORCcKKy0tIFJlYWROb0V4ZV9FWEVDVVRBQkxFPScuKi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1PTEQtYnVpbGQvUmVhZE5vRXhlJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktT0xELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktT0xELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjAxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vQ01QMDEwOS1PTEQuY21ha2UKQEAgLTAsMCArMSwyIEBACitjbWFrZV9wb2xpY3koU0VUIENNUDAxMDkgT0xEKQoraW5jbHVkZShDTVAwMTA5LUNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJmYzZkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktV0FSTi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMjkgQEAKK15DTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgQ01QMDEwOS1Db21tb24uY21ha2U6NCBcKGZpbmRfcHJvZ3JhbVwpOgorICBQb2xpY3kgQ01QMDEwOSBpcyBub3Qgc2V0OiBmaW5kX3Byb2dyYW1cKFwpIHJlcXVpcmVzIHBlcm1pc3Npb24gdG8gZXhlY3V0ZQorICBidXQgbm90IHRvIHJlYWQuICBSdW4gImNtYWtlIC0taGVscC1wb2xpY3kgQ01QMDEwOSIgZm9yIHBvbGljeSBkZXRhaWxzLgorICBVc2UgdGhlIGNtYWtlX3BvbGljeSBjb21tYW5kIHRvIHNldCB0aGUgcG9saWN5IGFuZCBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuCisKKyAgVGhlIGZpbGUKKworICAgIC4qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tYnVpbGQvRXhlTm9SZWFkCisKKyAgaXMgZXhlY3V0YWJsZSBidXQgbm90IHJlYWRhYmxlLiAgQ01ha2UgaXMgaWdub3JpbmcgaXQgZm9yIGNvbXBhdGliaWxpdHkuCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTVAwMTA5LVdBUk4uY21ha2U6MSBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVycy4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdC4KKysKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBDTVAwMTA5LUNvbW1vbi5jbWFrZTo2IFwoZmluZF9wcm9ncmFtXCk6CisgIFBvbGljeSBDTVAwMTA5IGlzIG5vdCBzZXQ6IGZpbmRfcHJvZ3JhbVwoXCkgcmVxdWlyZXMgcGVybWlzc2lvbiB0byBleGVjdXRlCisgIGJ1dCBub3QgdG8gcmVhZC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMTA5IiBmb3IgcG9saWN5IGRldGFpbHMuCisgIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8gc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KKworICBUaGUgZmlsZQorCisgICAgLiovVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktV0FSTi1idWlsZC9SZWFkTm9FeGUKKworICBpcyByZWFkYWJsZSBidXQgbm90IGV4ZWN1dGFibGUuICBDTWFrZSBpcyB1c2luZyBpdCBmb3IgY29tcGF0aWJpbGl0eS4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNUDAxMDktV0FSTi5jbWFrZToxIFwoaW5jbHVkZVwpCisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWY1NjBmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktV0FSTi1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMiBAQAorLS0gRXhlTm9SZWFkX0VYRUNVVEFCTEU9J0V4ZU5vUmVhZF9FWEVDVVRBQkxFLU5PVEZPVU5EJworLS0gUmVhZE5vRXhlX0VYRUNVVEFCTEU9Jy4qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4tYnVpbGQvUmVhZE5vRXhlJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0NNUDAxMDktV0FSTi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNkNTlhZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9DTVAwMTA5LVdBUk4uY21ha2UKQEAgLTAsMCArMSBAQAoraW5jbHVkZShDTVAwMTA5LUNvbW1vbi5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9FbnZBbmRIaW50cy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0VudkFuZEhpbnRzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1MTM0NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9FbnZBbmRIaW50cy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMjggQEAKKyAgZmluZF9wcm9ncmFtIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3M6LioKKyAgICBWQVI6IFBST0cKKyAgICBOQU1FUzogXCJ0ZXN0QWFuZEJcIgorICAgIERvY3VtZW50YXRpb24uKgorICAgIEZyYW1ld29yay4qCisgICAgQXBwQnVuZGxlLioKKyAgICBDTUFLRV9GSU5EX1VTRV9DTUFLRV9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfRU5WSVJPTk1FTlRfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX1NZU1RFTV9FTlZJUk9OTUVOVF9QQVRIOiAxCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfU1lTVEVNX1BBVEg6IDEKKworICBmaW5kX3Byb2dyYW0gY29uc2lkZXJlZCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczouKgorICBUaGUgaXRlbSB3YXMgZm91bmQgYXQuKgorLip0ZXN0QWFuZEIKKy4qCisgIGZpbmRfcHJvZ3JhbSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNldHRpbmdzOi4qCisgICAgVkFSOiBQUk9HCisgICAgTkFNRVM6IFwidGVzdEFhbmRCXCIKKyAgICBEb2N1bWVudGF0aW9uLioKKyAgICBGcmFtZXdvcmsuKgorICAgIEFwcEJ1bmRsZS4qCisgICAgQ01BS0VfRklORF9VU0VfQ01BS0VfUEFUSDogMQorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX0VOVklST05NRU5UX1BBVEg6IDEKKyAgICBDTUFLRV9GSU5EX1VTRV9TWVNURU1fRU5WSVJPTk1FTlRfUEFUSDogMAorICAgIENNQUtFX0ZJTkRfVVNFX0NNQUtFX1NZU1RFTV9QQVRIOiAxCisKKyAgZmluZF9wcm9ncmFtIGNvbnNpZGVyZWQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6LioKKyAgVGhlIGl0ZW0gd2FzIG5vdCBmb3VuZC4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vRW52QW5kSGludHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vRW52QW5kSGludHMuY21ha2UKaW5kZXggMGYxMmVmZi4uYmVlZDg3MyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL0VudkFuZEhpbnRzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9FbnZBbmRIaW50cy5jbWFrZQpAQCAtMSw0ICsxLDUgQEAKIAorc2V0KENNQUtFX0ZJTkRfREVCVUdfTU9ERSAxKQogc2V0KEVOVl9QQVRIICIkRU5We1BBVEh9IikKIHNldChFTlZ7UEFUSH0gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0EpCiBmaW5kX3Byb2dyYW0oUFJPRwpAQCAtMTMsNiArMTQsNyBAQAogICApCiBtZXNzYWdlKFNUQVRVUyAiUFJPRz0nJHtQUk9HfSciKQogdW5zZXQoUFJPRyBDQUNIRSkKK3NldChDTUFLRV9GSU5EX0RFQlVHX01PREUgMCkKIAogZmluZF9wcm9ncmFtKFBST0cKICAgTkFNRVMgdGVzdEFhbmRCCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS93aGl0ZWxpc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9SZXF1aXJlZC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTRhOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACitDTWFrZSBFcnJvciBhdCBSZXF1aXJlZC5jbWFrZTo5IFwoZmluZF9wcm9ncmFtXCk6CisgIENvdWxkIG5vdCBmaW5kIFBST0dfQWFuZEIgdXNpbmcgdGhlIGZvbGxvd2luZyBuYW1lczogdGVzdEFhbmRCCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9SZXF1aXJlZC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOGYxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQtc3Rkb3V0LnR4dApAQCAtMCwwICsxIEBACistLSBQUk9HX0E9J1teJ10qL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9BL3Rlc3RBJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1JlcXVpcmVkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NWFhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUmVxdWlyZWQuY21ha2UKQEAgLTAsMCArMSwxMiBAQAorZmluZF9wcm9ncmFtKFBST0dfQQorICBOQU1FUyB0ZXN0QQorICBQQVRIUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQQorICBOT19ERUZBVUxUX1BBVEgKKyAgUkVRVUlSRUQKKyAgKQorbWVzc2FnZShTVEFUVVMgIlBST0dfQT0nJHtQUk9HX0F9JyIpCisKK2ZpbmRfcHJvZ3JhbShQUk9HX0FhbmRCCisgIE5BTUVTIHRlc3RBYW5kQgorICBSRVFVSVJFRAorICApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZmluZF9wcm9ncmFtL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA2OTAzZjA1Li4zZTIzOTIwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9maW5kX3Byb2dyYW0vUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZpbmRfcHJvZ3JhbS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTQsOCArNCwyNSBAQAogcnVuX2NtYWtlKERpcnNQZXJOYW1lKQogcnVuX2NtYWtlKE5hbWVzUGVyRGlyKQogcnVuX2NtYWtlKFJlbEFuZEFic1BhdGgpCitydW5fY21ha2UoUmVxdWlyZWQpCiAKIGlmKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIl4oV2luZG93c3xDWUdXSU4pJCIpCiAgIHJ1bl9jbWFrZShXaW5kb3dzQ29tKQogICBydW5fY21ha2UoV2luZG93c0V4ZSkKK2Vsc2UoKQorICAjIHRlc3Qgbm9uIHJlYWRhYmxlIGZpbGUgb25seSBpZiBub3Qgcm9vdAorICBleGVjdXRlX3Byb2Nlc3MoCisgICAgQ09NTUFORCBpZCAtdSAkRU5We1VTRVJ9CisgICAgT1VUUFVUX1ZBUklBQkxFIHVpZAorICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFKQorCisgIGlmKE5PVCAiJHt1aWR9IiBTVFJFUVVBTCAiMCIpCisgICAgcnVuX2NtYWtlKENNUDAxMDktV0FSTikKKyAgICBydW5fY21ha2UoQ01QMDEwOS1PTEQpCisgICAgcnVuX2NtYWtlKENNUDAxMDktTkVXKQorICBlbmRpZigpCitlbmRpZigpCisKK2lmKEFQUExFKQorICBydW5fY21ha2UoQnVuZGxlU3BhY2VJbk5hbWUpCiBlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDRiNzRjZmUuLjIyYTBhNzUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0xLDMgKzEsMjEgQEAKIGluY2x1ZGUoUnVuQ01ha2UpCiAKIHJ1bl9jbWFrZShCYWRSYW5nZUluRnVuY3Rpb24pCitydW5fY21ha2UoZm9yZWFjaC1hbGwtdGVzdCkKK3J1bl9jbWFrZShmb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0KQorcnVuX2NtYWtlKGZvcmVhY2gtTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QpCitydW5fY21ha2UoZm9yZWFjaC1aSVBfTElTVFMtdGVzdCkKK3J1bl9jbWFrZShmb3JlYWNoLUlURU1TLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0KQorcnVuX2NtYWtlKGZvcmVhY2gtTElTVFMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3QpCitydW5fY21ha2UoZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1JVEVNUy1taXgtdGVzdCkKK3J1bl9jbWFrZShmb3JlYWNoLVpJUF9MSVNUUy13aXRoLUxJU1RTLW1peC10ZXN0KQorcnVuX2NtYWtlKGZvcmVhY2gtWklQX0xJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0KQorcnVuX2NtYWtlKGZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTEpCitydW5fY21ha2UoZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMikKK3J1bl9jbWFrZShmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0xKQorcnVuX2NtYWtlKGZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMSkKK3J1bl9jbWFrZShmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTIpCitydW5fY21ha2UoZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xKQorcnVuX2NtYWtlKGZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMikKK3J1bl9jbWFrZShmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTMpCitydW5fY21ha2UoZm9yZWFjaC1SQU5HRS1pbnZhbGlkLXRlc3QpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtSVRFTVMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1yZXN1bHQudHh0CnJlbmFtZSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtSVRFTVMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtSVRFTVMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTc0YmIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgZm9yZWFjaC1JVEVNUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC5jbWFrZToxIFwoZm9yZWFjaFwpOgorICBJVEVNUyBvciBMSVNUUyByZXF1aXJlIGV4YWN0bHkgb25lIGl0ZXJhdGlvbiB2YXJpYWJsZQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDMzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtSVRFTVMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKG9uZSB0d28gSU4gSVRFTVMgb25lIHR3bykKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtSVRFTVMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3QtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtSVRFTVMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3Qtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2Q1YWU3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgZm9yZWFjaC1JVEVNUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC5jbWFrZToxIFwoZm9yZWFjaFwpOgorICBaSVBfTElTVFMgY2FuIG5vdCBiZSB1c2VkIHdpdGggTElTVFMgb3IgSVRFTVMKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1JVEVNUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1JVEVNUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODA5OWEwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUlURU1TLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChpIElOIElURU1TIG9uZSB0d28gdGhyZWUgWklQX0xJU1RTIGJsYWgpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJmODNjMgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QuY21ha2U6MSBcKGZvcmVhY2hcKToKKyAgSVRFTVMgb3IgTElTVFMgcmVxdWlyZSBleGFjdGx5IG9uZSBpdGVyYXRpb24gdmFyaWFibGUKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGYzODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChvbmUgdHdvIElOIExJU1RTIG9uZSB0d28pCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLUxJU1RTLXdpdGgtWklQX0xJU1RTLW1peC10ZXN0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmOGQxZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtTElTVFMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3QuY21ha2U6MSBcKGZvcmVhY2hcKToKKyAgWklQX0xJU1RTIGNhbiBub3QgYmUgdXNlZCB3aXRoIExJU1RTIG9yIElURU1TCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtTElTVFMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtTElTVFMtd2l0aC1aSVBfTElTVFMtbWl4LXRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5MTlkZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1MSVNUUy13aXRoLVpJUF9MSVNUUy1taXgtdGVzdC5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2ZvcmVhY2goaSBJTiBMSVNUUyBvbmUgdHdvIHRocmVlIFpJUF9MSVNUUyBibGFoKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9HZW5lcmF0b3JFeHByZXNzaW9uL0NPTVBJTEVfTEFOR1VBR0UtYWRkX3Rlc3QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1pbnZhbGlkLXRlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0dlbmVyYXRvckV4cHJlc3Npb24vQ09NUElMRV9MQU5HVUFHRS1hZGRfdGVzdC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLWludmFsaWQtdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0UtaW52YWxpZC10ZXN0LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0UtaW52YWxpZC10ZXN0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlZmRjMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1pbnZhbGlkLXRlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVJBTkdFLWludmFsaWQtdGVzdFwuY21ha2U6WzAtOV0rIFwoZm9yZWFjaFwpOgorICBmb3JlYWNoIGNhbGxlZCB3aXRoIGluY29ycmVjdCByYW5nZSBzcGVjaWZpY2F0aW9uOiBzdGFydCAyLCBzdG9wIDEsIHN0ZXAgMQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OjMgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0UtaW52YWxpZC10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLWludmFsaWQtdGVzdC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjhlYWJhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLWludmFsaWQtdGVzdC5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2ZvcmVhY2goYSBSQU5HRSAyIDEgMSkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzU1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTEtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0xXC5jbWFrZTpbMC05XSsgXChmb3JlYWNoXCk6CisgIGZvcmVhY2ggSW52YWxpZCBpbnRlZ2VyOiAnYicKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDozIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0xLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0xLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MmZiZGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTEuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKGEgUkFOR0UgYikKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0xLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTEtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTEtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0xLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3ZmZjMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0xLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0xXC5jbWFrZTpbMC05XSsgXChmb3JlYWNoXCk6CisgIGZvcmVhY2ggSW52YWxpZCBpbnRlZ2VyOiAnYicKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDozIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTEuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODVjODA1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTEuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKGEgUkFOR0UgYiAxKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGNjNzNmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTItc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0yLTJcLmNtYWtlOlswLTldKyBcKGZvcmVhY2hcKToKKyAgZm9yZWFjaCBJbnZhbGlkIGludGVnZXI6ICdiJworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OjMgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMi0yLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MmFlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTItMi5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2ZvcmVhY2goYSBSQU5HRSAxIGIpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MDNmZTgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMVwuY21ha2U6WzAtOV0rIFwoZm9yZWFjaFwpOgorICBmb3JlYWNoIEludmFsaWQgaW50ZWdlcjogJ2InCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTEuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhNDg4ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0xLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChhIFJBTkdFIGIgMSAxKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTItcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMi1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTItc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODljNjBkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTItc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTJcLmNtYWtlOlswLTldKyBcKGZvcmVhY2hcKToKKyAgZm9yZWFjaCBJbnZhbGlkIGludGVnZXI6ICdiJworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OjMgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0yLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTE5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMi5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2ZvcmVhY2goYSBSQU5HRSAxIGIgMSkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0zLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTMtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0zLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5ZTYyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0zLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgZm9yZWFjaC1SQU5HRS1ub24taW50LXRlc3QtMy0zXC5jbWFrZTpbMC05XSsgXChmb3JlYWNoXCk6CisgIGZvcmVhY2ggSW52YWxpZCBpbnRlZ2VyOiAnYicKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDozIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtUkFOR0Utbm9uLWludC10ZXN0LTMtMy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGViZGYwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVJBTkdFLW5vbi1pbnQtdGVzdC0zLTMuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKGEgUkFOR0UgMSAxIGIpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0xLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0xLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1MWU0NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTEuY21ha2U6MSBcKGZvcmVhY2hcKToKKyAgRXhwZWN0ZWQgMyBsaXN0IHZhcmlhYmxlcywgYnV0IGdpdmVuIDQKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThiNmNhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0xLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChsZXNzIHRoYW4gbGlzdHMgSU4gWklQX0xJU1RTIGxpc3RfMSBsaXN0XzIgbGlzdF8zIGxpc3RfNCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMi1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0yLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczItcmVzdWx0LnR4dApyZW5hbWUgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0yLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMi1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0yLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2YjQ4NAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMi1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtWklQX0xJU1RTLWl0ZXItdmFycy1taXNtYXRjaC10ZXN0LTIuY21ha2U6MSBcKGZvcmVhY2hcKToKKyAgRXhwZWN0ZWQgMyBsaXN0IHZhcmlhYmxlcywgYnV0IGdpdmVuIDIKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtaXRlci12YXJzLW1pc21hdGNoLXRlc3QtMi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjRkOTljCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1pdGVyLXZhcnMtbWlzbWF0Y2gtdGVzdC0yLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorZm9yZWFjaChncmVhdGVyIHRoYW4gbGlzdHMgSU4gWklQX0xJU1RTIGxpc3RfMSBsaXN0XzIpCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3Qtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3Qtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDA5ZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy1tdWx0aXBsZS1pdGVyLXZhcnMtdGVzdC1zdGRvdXQudHh0CkBAIC0wLDAgKzEsNiBAQAorLS0gZm9yZWFjaFwoXC5cLlwuIElOIFpJUF9MSVNUU1wpOgorLS0gICBCZWdpbiBvdXRwdXQKKy0tICAgfCBvbmUsIHNhdHUsIHJhegorLS0gICB8IHR3bywgZHVhLCBkdmEKKy0tICAgfCB0aHJlZSwgdGlnYSwgdHJpCistLSAgIEVuZCBvdXRwdXQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtbXVsdGlwbGUtaXRlci12YXJzLXRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDNlZDcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLW11bHRpcGxlLWl0ZXItdmFycy10ZXN0LmNtYWtlCkBAIC0wLDAgKzEsNDIgQEAKK2Z1bmN0aW9uKGZvcmVhY2hUZXN0IHJlc3VsdCBsaXN0X3Zhcl8xIGxpc3RfdmFyXzIgbGlzdF92YXJfMykKKyAgICBzZXQoX29wdGlvbnMgTVVURSkKKyAgICBzZXQoX29uZV92YWx1ZV9hcmdzKQorICAgIHNldChfbXVsdGlfdmFsdWVfYXJncykKKyAgICBjbWFrZV9wYXJzZV9hcmd1bWVudHMoUEFSU0VfQVJHViAzIF9hcmcgIiR7X29wdGlvbnN9IiAiJHtfb25lX3ZhbHVlX2FyZ3N9IiAiJHtfbXVsdGlfdmFsdWVfYXJnc30iKQorCisgICAgc2V0KF9oYXNfYW55X291dHB1dCBGQUxTRSkKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAifCAiKQorICAgIGZvcmVhY2goZmlyc3Qgc2Vjb25kIHRoaXJkIElOIFpJUF9MSVNUUyAke2xpc3RfdmFyXzF9ICR7bGlzdF92YXJfMn0gJHtsaXN0X3Zhcl8zfSkKKyAgICAgICAgaWYoTk9UIGZpcnN0KQorICAgICAgICAgICAgc2V0KGZpcnN0ICJbdW5kZWZpbmVkXSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgaWYoTk9UIHNlY29uZCkKKyAgICAgICAgICAgIHNldChzZWNvbmQgIlt1bmRlZmluZWRdIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBpZihOT1QgdGhpcmQpCisgICAgICAgICAgICBzZXQodGhpcmQgIlt1bmRlZmluZWRdIikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBpZihOT1QgX2FyZ19NVVRFKQorICAgICAgICAgICAgbWVzc2FnZShTVEFUVVMgIiR7Zmlyc3R9LCAke3NlY29uZH0sICR7dGhpcmR9IikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBzZXQoX2hhc19hbnlfb3V0cHV0IFRSVUUpCisgICAgZW5kZm9yZWFjaCgpCisgICAgc2V0KCR7cmVzdWx0fSAke19oYXNfYW55X291dHB1dH0gUEFSRU5UX1NDT1BFKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihmb3JlYWNoVGVzdERlY29yYXRlZCBsaXN0X3Zhcl8xIGxpc3RfdmFyXzIgbGlzdF92YXJfMykKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICAiKQorICAgIG1lc3NhZ2UoU1RBVFVTICJCZWdpbiBvdXRwdXQiKQorICAgIGZvcmVhY2hUZXN0KF9oYXNfYW55X291dHB1dCAke2xpc3RfdmFyXzF9ICR7bGlzdF92YXJfMn0gJHtsaXN0X3Zhcl8zfSkKKyAgICBpZihOT1QgX2hhc19hbnlfb3V0cHV0KQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiLS0+IGVtcHR5LW91dHB1dCA8LS0iKQorICAgIGVuZGlmKCkKKyAgICBtZXNzYWdlKFNUQVRVUyAiRW5kIG91dHB1dCIpCitlbmRmdW5jdGlvbigpCisKK2xpc3QoQVBQRU5EIGVuZ2xpc2ggb25lIHR3byB0aHJlZSkKK2xpc3QoQVBQRU5EIGJhaGFzYSBzYXR1IGR1YSB0aWdhKQorbGlzdChBUFBFTkQgcnVzc2lhbiByYXogZHZhIHRyaSkKKworbWVzc2FnZShTVEFUVVMgImZvcmVhY2goLi4uIElOIFpJUF9MSVNUUyk6IikKK2ZvcmVhY2hUZXN0RGVjb3JhdGVkKGVuZ2xpc2ggYmFoYXNhIHJ1c3NpYW4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXRlc3Qtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtdGVzdC1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MzBhODYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXRlc3Qtc3Rkb3V0LnR4dApAQCAtMCwwICsxLDE5IEBACistLSBmb3JlYWNoXChJTiBaSVBfTElTVFNcKToKKy0tICAgPDw8IGVtcHR5IGxpc3RzIGNhc2UgPj4+CistLSAgICAgQmVnaW4gb3V0cHV0CistLSAgICAgLS0+IGVtcHR5LW91dHB1dCA8LS0KKy0tICAgICBFbmQgb3V0cHV0CistLSAgIDw8PCBzYW1lIGxlbmd0aHMgbGlzdHMgY2FzZSA+Pj4KKy0tICAgICBCZWdpbiBvdXRwdXQKKy0tICAgICB8IG9uZSwgc2F0dSwgcmF6CistLSAgICAgfCB0d28sIGR1YSwgZHZhCistLSAgICAgfCB0aHJlZSwgdGlnYSwgdHJpCistLSAgICAgRW5kIG91dHB1dAorLS0gICA8PDwgZGlmZmVyZW50IGxlbmd0aHMgbGlzdHMgY2FzZSA+Pj4KKy0tICAgICBCZWdpbiBvdXRwdXQKKy0tICAgICB8IG9uZSwgc2F0dSwgcmF6CistLSAgICAgfCB0d28sIGR1YSwgZHZhCistLSAgICAgfCB0aHJlZSwgdGlnYSwgdHJpCistLSAgICAgfCBcW3VuZGVmaW5lZFxdLCBlbXBhdCwgXFt1bmRlZmluZWRcXQorLS0gICAgIEVuZCBvdXRwdXQKKy0tICAgPDw8IHRlc3QgdmFyaWFibGUgdmFsdWUgcmVzdG9yZWQgLS0gUEFTU0VEID4+PgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMGVkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXRlc3QuY21ha2UKQEAgLTAsMCArMSw2OCBAQAorZnVuY3Rpb24oZm9yZWFjaFRlc3QgcmVzdWx0IGxpc3RfdmFyXzEgbGlzdF92YXJfMiBsaXN0X3Zhcl8zKQorICAgIHNldChfb3B0aW9ucyBNVVRFKQorICAgIHNldChfb25lX3ZhbHVlX2FyZ3MpCisgICAgc2V0KF9tdWx0aV92YWx1ZV9hcmdzKQorICAgIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyhQQVJTRV9BUkdWIDMgX2FyZyAiJHtfb3B0aW9uc30iICIke19vbmVfdmFsdWVfYXJnc30iICIke19tdWx0aV92YWx1ZV9hcmdzfSIpCisKKyAgICBzZXQoX2hhc19hbnlfb3V0cHV0IEZBTFNFKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICJ8ICIpCisgICAgZm9yZWFjaChudW0gSU4gWklQX0xJU1RTICR7bGlzdF92YXJfMX0gJHtsaXN0X3Zhcl8yfSAke2xpc3RfdmFyXzN9KQorICAgICAgICBmb3JlYWNoKGkgUkFOR0UgMikKKyAgICAgICAgICAgIGlmKE5PVCBudW1fJHtpfSkKKyAgICAgICAgICAgICAgICBzZXQobnVtXyR7aX0gIlt1bmRlZmluZWRdIikKKyAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICAgIGlmKE5PVCBfYXJnX01VVEUpCisgICAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtudW1fMH0sICR7bnVtXzF9LCAke251bV8yfSIpCisgICAgICAgIGVuZGlmKCkKKyAgICAgICAgc2V0KF9oYXNfYW55X291dHB1dCBUUlVFKQorICAgIGVuZGZvcmVhY2goKQorICAgIHNldCgke3Jlc3VsdH0gJHtfaGFzX2FueV9vdXRwdXR9IFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oZm9yZWFjaFRlc3REZWNvcmF0ZWQgbGlzdF92YXJfMSBsaXN0X3Zhcl8yIGxpc3RfdmFyXzMpCisgICAgbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9JTkRFTlQgIiAgIikKKyAgICBtZXNzYWdlKFNUQVRVUyAiQmVnaW4gb3V0cHV0IikKKyAgICBmb3JlYWNoVGVzdChfaGFzX2FueV9vdXRwdXQgJHtsaXN0X3Zhcl8xfSAke2xpc3RfdmFyXzJ9ICR7bGlzdF92YXJfM30pCisgICAgaWYoTk9UIF9oYXNfYW55X291dHB1dCkKKyAgICAgICAgbWVzc2FnZShTVEFUVVMgIi0tPiBlbXB0eS1vdXRwdXQgPC0tIikKKyAgICBlbmRpZigpCisgICAgbWVzc2FnZShTVEFUVVMgIkVuZCBvdXRwdXQiKQorZW5kZnVuY3Rpb24oKQorCittZXNzYWdlKFNUQVRVUyAiZm9yZWFjaChJTiBaSVBfTElTVFMpOiIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICAiKQorCitzZXQoZW5nbGlzaCkKK3NldChiYWhhc2EpCitzZXQocnVzc2lhbikKKworbWVzc2FnZShTVEFUVVMgIjw8PCBlbXB0eSBsaXN0cyBjYXNlID4+PiIpCitmb3JlYWNoVGVzdERlY29yYXRlZChlbmdsaXNoIGJhaGFzYSBydXNzaWFuKQorCitsaXN0KEFQUEVORCBlbmdsaXNoIG9uZSB0d28gdGhyZWUpCitsaXN0KEFQUEVORCBiYWhhc2Egc2F0dSBkdWEgdGlnYSkKK2xpc3QoQVBQRU5EIHJ1c3NpYW4gcmF6IGR2YSB0cmkpCisKK21lc3NhZ2UoU1RBVFVTICI8PDwgc2FtZSBsZW5ndGhzIGxpc3RzIGNhc2UgPj4+IikKK2ZvcmVhY2hUZXN0RGVjb3JhdGVkKGVuZ2xpc2ggYmFoYXNhIHJ1c3NpYW4pCisKK2xpc3QoQVBQRU5EIGJhaGFzYSBlbXBhdCkKKworbWVzc2FnZShTVEFUVVMgIjw8PCBkaWZmZXJlbnQgbGVuZ3RocyBsaXN0cyBjYXNlID4+PiIpCitmb3JlYWNoVGVzdERlY29yYXRlZChlbmdsaXNoIGJhaGFzYSBydXNzaWFuKQorCitzZXQobnVtXzAgIm9sZC0wIikKK3NldChudW1fMSAib2xkLTEiKQorc2V0KG51bV8yICJvbGQtMiIpCitmb3JlYWNoVGVzdChfIGVuZ2xpc2ggYmFoYXNhIHJ1c3NpYW4gTVVURSkKK3NldChjaGVjayBQQVNTRUQpCitmb3JlYWNoKGkgUkFOR0UgMikKKyAgICBpZihOT1QgIiR7bnVtXyR7aX19IiBTVFJFUVVBTCAib2xkLSR7aX0iKQorICAgICAgICBtZXNzYWdlKFNFTkRfRVJST1IgIm51bV8ke2l9IHZhbHVlIGlzIGNvcnJ1cHRlZCIpCisgICAgICAgIHNldChjaGVjayBGQUlMRUQpCisgICAgZW5kaWYoKQorZW5kZm9yZWFjaCgpCittZXNzYWdlKFNUQVRVUyAiPDw8IHRlc3QgdmFyaWFibGUgdmFsdWUgcmVzdG9yZWQgLS0gJHtjaGVja30gPj4+IikKKworbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1JVEVNUy1taXgtdGVzdC1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy13aXRoLUlURU1TLW1peC10ZXN0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1JVEVNUy1taXgtdGVzdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy13aXRoLUlURU1TLW1peC10ZXN0LXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjYWIwMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1JVEVNUy1taXgtdGVzdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IGZvcmVhY2gtWklQX0xJU1RTLXdpdGgtSVRFTVMtbWl4LXRlc3QuY21ha2U6MSBcKGZvcmVhY2hcKToKKyAgWklQX0xJU1RTIGNhbiBub3QgYmUgdXNlZCB3aXRoIExJU1RTIG9yIElURU1TCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtSVRFTVMtbWl4LXRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtSVRFTVMtbWl4LXRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlZDg0MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1JVEVNUy1taXgtdGVzdC5jbWFrZQpAQCAtMCwwICsxLDIgQEAKK2ZvcmVhY2goaSBJTiBaSVBfTElTVFMgYmxhaCBJVEVNUyBibGFoKQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtTElTVFMtbWl4LXRlc3QtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1MSVNUUy1taXgtdGVzdC1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtTElTVFMtbWl4LXRlc3Qtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ZvcmVhY2gvZm9yZWFjaC1aSVBfTElTVFMtd2l0aC1MSVNUUy1taXgtdGVzdC1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjZlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtTElTVFMtbWl4LXRlc3Qtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBmb3JlYWNoLVpJUF9MSVNUUy13aXRoLUxJU1RTLW1peC10ZXN0LmNtYWtlOjEgXChmb3JlYWNoXCk6CisgIFpJUF9MSVNUUyBjYW4gbm90IGJlIHVzZWQgd2l0aCBMSVNUUyBvciBJVEVNUworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6MyBcKGluY2x1ZGVcKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy13aXRoLUxJU1RTLW1peC10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLVpJUF9MSVNUUy13aXRoLUxJU1RTLW1peC10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTk3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtWklQX0xJU1RTLXdpdGgtTElTVFMtbWl4LXRlc3QuY21ha2UKQEAgLTAsMCArMSwyIEBACitmb3JlYWNoKGkgSU4gWklQX0xJU1RTIGJsYWggTElTVFMgYmxhaCkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLWFsbC10ZXN0LXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtYWxsLXRlc3Qtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGY2MjJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLWFsbC10ZXN0LXN0ZG91dC50eHQKQEAgLTAsMCArMSw0NCBAQAorLS0gZm9yZWFjaFwoUkFOR0VcKToKKy0tICAgXFswXC5cLjFcXS8xCistLSAgICAgPCAwCistLSAgICAgPCAxCistLSAgIFxbMVwuXC4xXF0vMQorLS0gICAgIDwgMQorLS0gICBcWzBcLlwuMTBcXS8yCistLSAgICAgPCAwCistLSAgICAgPCAyCistLSAgICAgPCA0CistLSAgICAgPCA2CistLSAgICAgPCA4CistLSAgICAgPCAxMAorLS0gICBcWy0xMFwuXC4wXF0vMworLS0gICAgIDwgLTEwCistLSAgICAgPCAtNworLS0gICAgIDwgLTQKKy0tICAgICA8IC0xCistLSAgIFxbMFwuXC4tMTBcXS8tNQorLS0gICAgIDwgMAorLS0gICAgIDwgLTUKKy0tICAgICA8IC0xMAorLS0gZm9yZWFjaFwoSU4gSVRFTVNcKToKKy0tICAgPCBvbmUKKy0tICAgPCB0d28KKy0tICAgPCB0aHJlZQorLS0gZm9yZWFjaFwoSU4gTElTVFNcKToKKy0tICAgPCBzYXR1CistLSAgIDwgZHVhCistLSAgIDwgdGlnYQorLS0gZm9yZWFjaFwoSU4gTElTVFMgYW5kIElURU1TXCk6CistLSAgIDwgc2F0dQorLS0gICA8IGR1YQorLS0gICA8IHRpZ2EKKy0tICAgPCBvbmUKKy0tICAgPCB0d28KKy0tICAgPCB0aHJlZQorLS0gZm9yZWFjaFwoSU4gSVRFTVMgYW5kIExJU1RTXCk6CistLSAgIDwgb25lCistLSAgIDwgdHdvCistLSAgIDwgdGhyZWUKKy0tICAgPCBzYXR1CistLSAgIDwgZHVhCistLSAgIDwgdGlnYQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLWFsbC10ZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZm9yZWFjaC9mb3JlYWNoLWFsbC10ZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMzc3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9mb3JlYWNoL2ZvcmVhY2gtYWxsLXRlc3QuY21ha2UKQEAgLTAsMCArMSw2NyBAQAorbWVzc2FnZShTVEFUVVMgImZvcmVhY2goUkFOR0UpOiIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICAiKQorCittZXNzYWdlKFNUQVRVUyAiWzAuLjFdLzEiKQorbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9JTkRFTlQgIiAgPCAiKQorZm9yZWFjaChpIFJBTkdFIDEpCisgICAgbWVzc2FnZShTVEFUVVMgJHtpfSkKK2VuZGZvcmVhY2goKQorbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKKworbWVzc2FnZShTVEFUVVMgIlsxLi4xXS8xIikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgIDwgIikKK2ZvcmVhY2goaSBSQU5HRSAxIDEpCisgICAgbWVzc2FnZShTVEFUVVMgJHtpfSkKK2VuZGZvcmVhY2goKQorbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKKworbWVzc2FnZShTVEFUVVMgIlswLi4xMF0vMiIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICA8ICIpCitmb3JlYWNoKGkgUkFOR0UgMCAxMCAyKQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJbLTEwLi4wXS8zIikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgIDwgIikKK2ZvcmVhY2goaSBSQU5HRSAtMTAgMCAzKQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJbMC4uLTEwXS8tNSIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICA8ICIpCitmb3JlYWNoKGkgUkFOR0UgMCAtMTAgLTUpCisgICAgbWVzc2FnZShTVEFUVVMgJHtpfSkKK2VuZGZvcmVhY2goKQorbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJmb3JlYWNoKElOIElURU1TKToiKQorbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9JTkRFTlQgIiAgPCAiKQorZm9yZWFjaChpIElOIElURU1TIG9uZSB0d28gdGhyZWUpCisgICAgbWVzc2FnZShTVEFUVVMgJHtpfSkKK2VuZGZvcmVhY2goKQorbGlzdChQT1BfQkFDSyBDTUFLRV9NRVNTQUdFX0lOREVOVCkKKworbWVzc2FnZShTVEFUVVMgImZvcmVhY2goSU4gTElTVFMpOiIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0lOREVOVCAiICA8ICIpCitsaXN0KEFQUEVORCBjb3VudCBzYXR1IGR1YSB0aWdhKQorZm9yZWFjaChpIElOIExJU1RTIGNvdW50KQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJmb3JlYWNoKElOIExJU1RTIGFuZCBJVEVNUyk6IikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgIDwgIikKK2ZvcmVhY2goaSBJTiBMSVNUUyBjb3VudCBJVEVNUyBvbmUgdHdvIHRocmVlKQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCisKK21lc3NhZ2UoU1RBVFVTICJmb3JlYWNoKElOIElURU1TIGFuZCBMSVNUUyk6IikKK2xpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfSU5ERU5UICIgIDwgIikKK2ZvcmVhY2goaSBJTiBJVEVNUyBvbmUgdHdvIHRocmVlIExJU1RTIGNvdW50KQorICAgIG1lc3NhZ2UoU1RBVFVTICR7aX0pCitlbmRmb3JlYWNoKCkKK2xpc3QoUE9QX0JBQ0sgQ01BS0VfTUVTU0FHRV9JTkRFTlQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViYzg5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uL0NNQUtFX0NVUlJFTlRfRlVOQ1RJT04tc3Rkb3V0LnR4dApAQCAtMCwwICsxLDcgQEAKK2Z1bmN0aW9uXChwcmludF9zZWxmXCkKKyAgICBmaWxlXChTVFJJTkdTICJcJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRX0iIF9saW5lc1wpCisgICAgbWF0aFwoRVhQUiBfYmVnaW4gIlwke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FfSAtIDEiXCkKKyAgICBsaXN0XChTVUJMSVNUIF9saW5lcyBcJHtfYmVnaW59IDcgX2xpbmVzXCkgIyBUaGlzIGZ1bmN0aW9uIGhhcyA3IGxpbmVzIG9ubHkKKyAgICBsaXN0XChKT0lOIF9saW5lcyAiXFxuIiBfbGluZXNcKQorICAgIG1lc3NhZ2VcKFNUQVRVUyAiUHJpbnQgdGhlIGBcJHtDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OfWAgZnVuY3Rpb246XFxuXCR7X2xpbmVzfSJcKQorZW5kZnVuY3Rpb25cKFwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGMwMzJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5jbWFrZQpAQCAtMCwwICsxLDk0IEBACitzZXQoX1RISVNfRklMRSAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iKQorc2V0KF9USElTX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIpCisKK2lmKENNQUtFX0NVUlJFTlRfRlVOQ1RJT04pCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05gIGlzIG5vdCBleHBlY3RlZCB0byBiZSBzZXQgaGVyZSIpCitlbmRpZigpCitpZihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEVgIGlzIG5vdCBleHBlY3RlZCB0byBiZSBzZXQgaGVyZSIpCitlbmRpZigpCitpZihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSKQorICBtZXNzYWdlKFNFTkRfRVJST1IgImBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgc2V0IGhlcmUiKQorZW5kaWYoKQoraWYoQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FYCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgc2V0IGhlcmUiKQorZW5kaWYoKQorCitmdW5jdGlvbihiYXIpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OIFNUUkVRVUFMICJiYXIiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFIE1BVENIRVMgIl4uKi9DTUFLRV9DVVJSRU5UX0ZVTkNUSU9OLmNtYWtlJCIpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFIFNUUkVRVUFMIF9USElTX0ZJTEUpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVIgTUFUQ0hFUyAiXi4qL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uJCIpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJgIikKKyAgZW5kaWYoKQorICBpZihOT1QgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUiBTVFJFUVVBTCBfVEhJU19ESVIpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9ESVJgIikKKyAgZW5kaWYoKQorICBpZihOT1QgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUgRVFVQUwgMTcpCisgICAgbWVzc2FnZShTRU5EX0VSUk9SICJCYWQgdmFsdWUgb2YgYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FYCIpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oZm9vKQorICBpZihOT1QgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTiBTVFJFUVVBTCAiZm9vIikKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkJhZCB2YWx1ZSBvZiBgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTmAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSBNQVRDSEVTICJeLiovZnVuY3Rpb24vQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5jbWFrZSQiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSBTVFJFUVVBTCBfVEhJU19GSUxFKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSIE1BVENIRVMgIl4uKi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbiQiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FIEVRVUFMIDM4KQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSIFNUUkVRVUFMIF9USElTX0RJUikKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkJhZCB2YWx1ZSBvZiBgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUmAiKQorICBlbmRpZigpCisgIGJhcigpCitlbmRmdW5jdGlvbigpCisKK2ZvbygpCisKK2lmKENNQUtFX0NVUlJFTlRfRlVOQ1RJT04pCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05gIGlzIG5vdCBleHBlY3RlZCB0byBiZSBzZXQgaGVyZSIpCitlbmRpZigpCitpZihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSkKKyAgbWVzc2FnZShTRU5EX0VSUk9SICJgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0ZJTEVgIGlzIG5vdCBleHBlY3RlZCB0byBiZSBzZXQgaGVyZSIpCitlbmRpZigpCitpZihDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSKQorICBtZXNzYWdlKFNFTkRfRVJST1IgImBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgc2V0IGhlcmUiKQorZW5kaWYoKQoraWYoQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkUpCisgIG1lc3NhZ2UoU0VORF9FUlJPUiAiYENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FYCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgc2V0IGhlcmUiKQorZW5kaWYoKQorCitpbmNsdWRlKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0R1bW15TWFjcm8uY21ha2UiKQorCitmdW5jdGlvbihjYWxsaW5nX21hY3JvKQorICBkdW1teSgpCitlbmRmdW5jdGlvbigpCisKK2NhbGxpbmdfbWFjcm8oKQorCitjbWFrZV9wb2xpY3koU0VUIENNUDAwMDcgTkVXKQorCisjIEFUVEVOVElPTiBgQ01BS0VfQ1VSUkVOVF9MSVNUX0xJTkVgIGNhbid0IGJlIHVzZWQgaW4gYG1hdGgoKScKK2Z1bmN0aW9uKHByaW50X3NlbGYpCisgICAgZmlsZShTVFJJTkdTICIke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9GSUxFfSIgX2xpbmVzKQorICAgIG1hdGgoRVhQUiBfYmVnaW4gIiR7Q01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0xJTkV9IC0gMSIpCisgICAgbGlzdChTVUJMSVNUIF9saW5lcyAke19iZWdpbn0gNyBfbGluZXMpICMgVGhpcyBmdW5jdGlvbiBoYXMgNyBsaW5lcyBvbmx5CisgICAgbGlzdChKT0lOIF9saW5lcyAiXG4iIF9saW5lcykKKyAgICBtZXNzYWdlKFNUQVRVUyAiUHJpbnQgdGhlIGAke0NNQUtFX0NVUlJFTlRfRlVOQ1RJT059YCBmdW5jdGlvbjpcbiR7X2xpbmVzfSIpCitlbmRmdW5jdGlvbigpCisKK3ByaW50X3NlbGYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjMyZmZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xNikKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZnVuY3Rpb24vRHVtbXlNYWNyby5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uL0R1bW15TWFjcm8uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiNTNlNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uL0R1bW15TWFjcm8uY21ha2UKQEAgLTAsMCArMSwyMCBAQAorbWFjcm8oZHVtbXkpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OIFNUUkVRVUFMICJjYWxsaW5nX21hY3JvIikKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkJhZCB2YWx1ZSBvZiBgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTmAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSBNQVRDSEVTICJeLiovZnVuY3Rpb24vQ01BS0VfQ1VSUkVOVF9GVU5DVElPTi5jbWFrZSQiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRSBTVFJFUVVBTCBfVEhJU19GSUxFKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRklMRWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSIE1BVENIRVMgIl4uKi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbiQiKQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSYCIpCisgIGVuZGlmKCkKKyAgaWYoTk9UIENNQUtFX0NVUlJFTlRfRlVOQ1RJT05fTElTVF9MSU5FIEVRVUFMIDc3KQorICAgIG1lc3NhZ2UoU0VORF9FUlJPUiAiQmFkIHZhbHVlIG9mIGBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfTElORWAiKQorICBlbmRpZigpCisgIGlmKE5PVCBDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OX0xJU1RfRElSIFNUUkVRVUFMIF9USElTX0RJUikKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIkJhZCB2YWx1ZSBvZiBgQ01BS0VfQ1VSUkVOVF9GVU5DVElPTl9MSVNUX0RJUmAiKQorICBlbmRpZigpCitlbmRtYWNybygpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9mdW5jdGlvbi9SdW5DTWFrZVRlc3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmNDhhZgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2Z1bmN0aW9uL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK3J1bl9jbWFrZShDTUFLRV9DVVJSRU5UX0ZVTkNUSU9OKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0luY29ycmVjdEFyZ3VtZW50cy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0luY29ycmVjdEFyZ3VtZW50cy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0luY29ycmVjdEFyZ3VtZW50cy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9JbmNvcnJlY3RBcmd1bWVudHMtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjA4YWZhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9JbmNvcnJlY3RBcmd1bWVudHMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDQgQEAKK15DTWFrZSBFcnJvciBhdCBJbmNvcnJlY3RBcmd1bWVudHMuY21ha2U6MSBcKGdldF9maWxlbmFtZV9jb21wb25lbnRcKToKKyAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9JbmNvcnJlY3RBcmd1bWVudHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0luY29ycmVjdEFyZ3VtZW50cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzI5ZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9JbmNvcnJlY3RBcmd1bWVudHMuY21ha2UKQEAgLTAsMCArMSwyIEBACitnZXRfZmlsZW5hbWVfY29tcG9uZW50KHZhcikKK21lc3NhZ2UoIlRoZSBlcnJvciBpcyBmYXRhbCwgc28gdGhpcyBzaG91bGQgbm90IHByaW50IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2dldF9maWxlbmFtZV9jb21wb25lbnQvS25vd25Db21wb25lbnRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Lbm93bkNvbXBvbmVudHMuY21ha2UKaW5kZXggNTRiODU4Zi4uYzI3NjJhZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Lbm93bkNvbXBvbmVudHMuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Lbm93bkNvbXBvbmVudHMuY21ha2UKQEAgLTg1LDEyICs4NSwxMiBAQAogZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0X3Byb2dyYW1fbmFtZSAiICIgUFJPR1JBTSkKIGNoZWNrKCJQUk9HUkFNIHdpdGgganVzdCBhIHNwYWNlIiAiJHt0ZXN0X3Byb2dyYW1fbmFtZX0iICIiKQogCi1nZXRfZmlsZW5hbWVfY29tcG9uZW50KHRlc3RfcHJvZ3JhbV9uYW1lICIke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfSIgUFJPR1JBTSkKLWNoZWNrKCJQUk9HUkFNIHNwZWNpZmllZCBleHBsaWNpdGx5IHdpdGhvdXQgcXVvdGluZyIgIiR7dGVzdF9wcm9ncmFtX25hbWV9IiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iKQorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0X3Byb2dyYW1fbmFtZSAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9Lbm93bkNvbXBvbmVudHMuc2giIFBST0dSQU0pCitjaGVjaygiUFJPR1JBTSBzcGVjaWZpZWQgZXhwbGljaXRseSB3aXRob3V0IHF1b3RpbmciICIke3Rlc3RfcHJvZ3JhbV9uYW1lfSIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vS25vd25Db21wb25lbnRzLnNoIikKIAotZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0X3Byb2dyYW1fbmFtZSAiXCIke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfVwiIGFyZzEgYXJnMiIgUFJPR1JBTQorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCh0ZXN0X3Byb2dyYW1fbmFtZSAiXCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0tub3duQ29tcG9uZW50cy5zaFwiIGFyZzEgYXJnMiIgUFJPR1JBTQogICBQUk9HUkFNX0FSR1MgdGVzdF9wcm9ncmFtX2FyZ3MpCi1jaGVjaygiUFJPR1JBTSBzcGVjaWZpZWQgZXhwbGljaXRseSB3aXRoIGFyZ3VtZW50czogbmFtZSIgIiR7dGVzdF9wcm9ncmFtX25hbWV9IiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iKQorY2hlY2soIlBST0dSQU0gc3BlY2lmaWVkIGV4cGxpY2l0bHkgd2l0aCBhcmd1bWVudHM6IG5hbWUiICIke3Rlc3RfcHJvZ3JhbV9uYW1lfSIgIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vS25vd25Db21wb25lbnRzLnNoIikKIGNoZWNrKCJQUk9HUkFNIHNwZWNpZmllZCBleHBsaWNpdGx5IHdpdGggYXJndW1lbnRzOiBhcmdzIiAiJHt0ZXN0X3Byb2dyYW1fYXJnc30iICIgYXJnMSBhcmcyIikKIAogbGlzdChBUFBFTkQgbm9uX2NhY2hlX3ZhcnMgdGVzdF9wcm9ncmFtX25hbWUpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0tub3duQ29tcG9uZW50cy5zaCBiL1Rlc3RzL1J1bkNNYWtlL2dldF9maWxlbmFtZV9jb21wb25lbnQvS25vd25Db21wb25lbnRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhMjQ4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L0tub3duQ29tcG9uZW50cy5zaApAQCAtMCwwICsxIEBACisjIS9iaW4vc2gKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2dldF9maWxlbmFtZV9jb21wb25lbnQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMTU2ZmM4Zi4uYTc4MjBhMCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsNCArMSw1IEBACiBpbmNsdWRlKFJ1bkNNYWtlKQogCitydW5fY21ha2UoSW5jb3JyZWN0QXJndW1lbnRzKQogcnVuX2NtYWtlKEtub3duQ29tcG9uZW50cykKIHJ1bl9jbWFrZShVbmtub3duQ29tcG9uZW50KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Vbmtub3duQ29tcG9uZW50LXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQtc3RkZXJyLnR4dAppbmRleCBiMTQ2ZTViLi5mODZhNjg4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQtc3RkZXJyLnR4dApAQCAtMSw0ICsxLDQgQEAKLUNNYWtlIEVycm9yIGF0IFVua25vd25Db21wb25lbnQuY21ha2U6MSBcKGdldF9maWxlbmFtZV9jb21wb25lbnRcKToKK15DTWFrZSBFcnJvciBhdCBVbmtub3duQ29tcG9uZW50LmNtYWtlOjEgXChnZXRfZmlsZW5hbWVfY29tcG9uZW50XCk6CiAgIGdldF9maWxlbmFtZV9jb21wb25lbnQgdW5rbm93biBjb21wb25lbnQgQk9HVVMKIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHMudHh0OlswLTldKyBcKGluY2x1ZGVcKQorICBDTWFrZUxpc3RzLnR4dDpbMC05XSsgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9nZXRfZmlsZW5hbWVfY29tcG9uZW50L1Vua25vd25Db21wb25lbnQuY21ha2UKaW5kZXggMDZhYmM1MS4uMTk1MjFiYSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudC9Vbmtub3duQ29tcG9uZW50LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2dldF9maWxlbmFtZV9jb21wb25lbnQvVW5rbm93bkNvbXBvbmVudC5jbWFrZQpAQCAtMSArMSwyIEBACiBnZXRfZmlsZW5hbWVfY29tcG9uZW50KHZhciAiL3BhdGgvdG8vZmlsZW5hbWUuZXh0LmluIiBCT0dVUykKK21lc3NhZ2UoIlRoZSBlcnJvciBpcyBmYXRhbCwgc28gdGhpcyBzaG91bGQgbm90IHByaW50IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMDZhMGM2Ny4uYzRlZTUzZCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC01LDYgKzUsNyBAQAogcnVuX2NtYWtlKGdsb2JhbF9wcm9wZXJ0aWVzKQogcnVuX2NtYWtlKGluc3RhbGxfcHJvcGVydGllcykKIHJ1bl9jbWFrZShzb3VyY2VfcHJvcGVydGllcykKK3J1bl9jbWFrZShzb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcykKIHJ1bl9jbWFrZSh0YXJnZXRfcHJvcGVydGllcykKIHJ1bl9jbWFrZSh0ZXN0X3Byb3BlcnRpZXMpCiBydW5fY21ha2UoRGVidWdDb25maWd1cmF0aW9ucykKQEAgLTI3LDcgKzI4LDcgQEAKICMgZG9uJ3QgcmVseSBvbiBSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHIGJlaW5nIHNldCBjb3JyZWN0bHkKICMgYW5kIGluc3RlYWQgZXhwbGljaXRseSBjaGVjayBmb3IgYSBtYXRjaCBhZ2FpbnN0IHRob3NlIGdlbmVyYXRvcnMgd2UKICMgZXhwZWN0IHRvIGJlIG11bHRpLWNvbmZpZwotaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW98WGNvZGUiKQoraWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIlZpc3VhbCBTdHVkaW98WGNvZGV8TmluamEgTXVsdGktQ29uZmlnIikKICAgcnVuX2NtYWtlKElzTXVsdGlDb25maWcpCiBlbHNlKCkKICAgcnVuX2NtYWtlKE5vdE11bHRpQ29uZmlnKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9zb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9zb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2dldF9wcm9wZXJ0eS9zb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhY2NiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMtc3RkZXJyLnR4dApAQCAtMCwwICsxLDY2IEBACiteQ01ha2UgRXJyb3IgYXQgc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2U6MSBcKHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllc1wpOgorICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMgY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgbm8KKyAgdmFsdWUgcHJvdmlkZWQgdG8gdGhlIERJUkVDVE9SWSBvcHRpb24KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKysKK0NNYWtlIEVycm9yIGF0IHNvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlOjIgXChzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXNcKToKKyAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIGdpdmVuIG5vbi1leGlzdGVudCBESVJFQ1RPUlkgbm9uX2V4aXN0aW5nX2RpcgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2U6MyBcKHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllc1wpOgorICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMgY2FsbGVkIHdpdGggaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgbm8KKyAgdmFsdWUgcHJvdmlkZWQgdG8gdGhlIFRBUkdFVF9ESVJFQ1RPUlkgb3B0aW9uCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCBzb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy5jbWFrZTo0IFwoc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzXCk6CisgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyBnaXZlbiBub24tZXhpc3RlbnQgdGFyZ2V0IGZvciBUQVJHRVRfRElSRUNUT1JZCisgIG5vbl9leGlzdGluZ190YXJnZXQKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKysKK0NNYWtlIEVycm9yIGF0IHNvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlOjYgXChnZXRfcHJvcGVydHlcKToKKyAgZ2V0X3Byb3BlcnR5IGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIG5vIHZhbHVlIHByb3ZpZGVkIHRvCisgIHRoZSBESVJFQ1RPUlkgb3B0aW9uCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCBzb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy5jbWFrZTo3IFwoZ2V0X3Byb3BlcnR5XCk6CisgIGdldF9wcm9wZXJ0eSBnaXZlbiBub24tZXhpc3RlbnQgRElSRUNUT1JZIG5vbl9leGlzdGluZ19kaXIKK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKysKK0NNYWtlIEVycm9yIGF0IHNvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlOjggXChnZXRfcHJvcGVydHlcKToKKyAgZ2V0X3Byb3BlcnR5IGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIG5vIHZhbHVlIHByb3ZpZGVkIHRvCisgIHRoZSBUQVJHRVRfRElSRUNUT1JZIG9wdGlvbgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2U6OSBcKGdldF9wcm9wZXJ0eVwpOgorICBnZXRfcHJvcGVydHkgZ2l2ZW4gbm9uLWV4aXN0ZW50IHRhcmdldCBmb3IgVEFSR0VUX0RJUkVDVE9SWQorICBub25fZXhpc3RpbmdfZGlyCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCBzb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy5jbWFrZToxMSBcKGdldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eVwpOgorICBnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkgZ2l2ZW4gbm9uLWV4aXN0ZW50IERJUkVDVE9SWSBQUk9QRVJUWQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2U6MTIgXChnZXRfc291cmNlX2ZpbGVfcHJvcGVydHlcKToKKyAgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5IGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCBzb3VyY2VfcHJvcGVydGllc19mYWlsdXJlcy5jbWFrZToxMyBcKGdldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eVwpOgorICBnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkgZ2l2ZW4gbm9uLWV4aXN0ZW50IHRhcmdldCBmb3IgVEFSR0VUX0RJUkVDVE9SWQorICBQUk9QRVJUWQorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2U6MTQgXChnZXRfc291cmNlX2ZpbGVfcHJvcGVydHlcKToKKyAgZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5IGNhbGxlZCB3aXRoIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L3NvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvZ2V0X3Byb3BlcnR5L3NvdXJjZV9wcm9wZXJ0aWVzX2ZhaWx1cmVzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Yjg3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9nZXRfcHJvcGVydHkvc291cmNlX3Byb3BlcnRpZXNfZmFpbHVyZXMuY21ha2UKQEAgLTAsMCArMSwxNCBAQAorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKGEudHh0IERJUkVDVE9SWSBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgImRlZiIpCitzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoYS50eHQgRElSRUNUT1JZIG5vbl9leGlzdGluZ19kaXIgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TICJkZWYiKQorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKGEudHh0IFRBUkdFVF9ESVJFQ1RPUlkgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TICJkZWYiKQorc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKGEudHh0IFRBUkdFVF9ESVJFQ1RPUlkgbm9uX2V4aXN0aW5nX3RhcmdldCBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgImRlZiIpCisKK2dldF9wcm9wZXJ0eShpbl92YXIgU09VUkNFIGEudHh0IERJUkVDVE9SWSBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TKQorZ2V0X3Byb3BlcnR5KGluX3ZhciBTT1VSQ0UgYS50eHQgRElSRUNUT1JZIG5vbl9leGlzdGluZ19kaXIgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUykKK2dldF9wcm9wZXJ0eShpbl92YXIgU09VUkNFIGEudHh0IFRBUkdFVF9ESVJFQ1RPUlkgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUykKK2dldF9wcm9wZXJ0eShpbl92YXIgU09VUkNFIGEudHh0IFRBUkdFVF9ESVJFQ1RPUlkgbm9uX2V4aXN0aW5nX2RpciBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TKQorCitnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkoaW5fdmFyIGEudHh0IERJUkVDVE9SWSBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TKQorZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5KGluX3ZhciBhLnR4dCBESVJFQ1RPUlkgbm9uX2V4aXN0aW5nX2RpciBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TKQorZ2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5KGluX3ZhciBhLnR4dCBUQVJHRVRfRElSRUNUT1JZIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMpCitnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkoaW5fdmFyIGEudHh0IFRBUkdFVF9ESVJFQ1RPUlkgbm9uX2V4aXN0aW5nX2RpciBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaWYvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9pZi9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pZi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9pZi9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyY2QzYzcuLjRiM2RlODQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggNDdkYWMzNC4uN2VkMDc3MyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNSwzICs1LDcgQEAKIHJ1bl9jbWFrZShDdXN0b21UeXBlUGxhdGZvcm0pCiBydW5fY21ha2UoQ3VzdG9tR3VpZFR5cGVQbGF0Zm9ybSkKIHJ1bl9jbWFrZShDdXN0b21Db25maWcpCisKK2lmKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIChbXjldfDlbMC05XSkiKQorICBydW5fY21ha2UoU2tpcEdldFRhcmdldEZyYW1ld29ya1Byb3BlcnRpZXMpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9Ta2lwR2V0VGFyZ2V0RnJhbWV3b3JrUHJvcGVydGllcy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0L1NraXBHZXRUYXJnZXRGcmFtZXdvcmtQcm9wZXJ0aWVzLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NWIyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9Ta2lwR2V0VGFyZ2V0RnJhbWV3b3JrUHJvcGVydGllcy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIxIEBACitmaWxlKFJFQUQgIiR7UnVuQ01ha2VfVEVTVF9CSU5BUllfRElSfS9BTExfQlVJTEQudmN4cHJvaiIgYWxsX2J1aWxkKQorCittYWNybyhwcm9qZWN0X3JlZmVyZW5jZSBFWFRFUk5BTF9QUk9KRUNUKQorICBzdHJpbmcoUkVHRVggTUFUQ0gKKyAgICAiPFByb2plY3RSZWZlcmVuY2UuSW5jbHVkZT0uJHske0VYVEVSTkFMX1BST0pFQ1R9fS4+Lio8L1NraXBHZXRUYXJnZXRGcmFtZXdvcmtQcm9wZXJ0aWVzPiIKKyAgICBFbmRPZlByb2plY3RSZWZlcmVuY2UKKyAgICAke2FsbF9idWlsZH0KKyAgICApCitlbmRtYWNybygpCisKK3NldChleHRlcm5hbF9wcm9qZWN0ICJleHRlcm5hbC5wcm9qZWN0IikKK3Byb2plY3RfcmVmZXJlbmNlKGV4dGVybmFsX3Byb2plY3QpCitpZihOT1QgJHtFbmRPZlByb2plY3RSZWZlcmVuY2V9IE1BVENIRVMgIi4qPC9Qcm9qZWN0UmVmZXJlbmNlPiIpCisgIHNldChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiJHt0ZXN0fSBpcyBiZWluZyBzZXQgdW5leHBlY3RlZGx5LiIpCitlbmRpZigpCisKK3NldChleHRlcm5hbF9wcm9qZWN0ICJleHRlcm5hbC5jc3Byb2oiKQorcHJvamVjdF9yZWZlcmVuY2UoZXh0ZXJuYWxfcHJvamVjdCkKK2lmKCR7RW5kT2ZQcm9qZWN0UmVmZXJlbmNlfSBNQVRDSEVTICIuKjwvUHJvamVjdFJlZmVyZW5jZT4iKQorICBzZXQoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIiR7dGVzdH0gaXMgbm90IHNldC4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QvU2tpcEdldFRhcmdldEZyYW1ld29ya1Byb3BlcnRpZXMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9Ta2lwR2V0VGFyZ2V0RnJhbWV3b3JrUHJvcGVydGllcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjYwYmQwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QvU2tpcEdldFRhcmdldEZyYW1ld29ya1Byb3BlcnRpZXMuY21ha2UKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdChleHRlcm5hbDEgZXh0ZXJuYWwucHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1VJRCBhYWEtYmJiLWNjYy0wMDApCisKK2luY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0KGV4dGVybmFsMiBleHRlcm5hbC5jc3Byb2oKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdVSUQgYWFhLWJiYi1jY2MtMDAxKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QvY2hlY2tfdXRpbHMuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9jaGVja191dGlscy5jbWFrZQppbmRleCAwYTJiYTYzLi4wMTYyNTE5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9jaGVja191dGlscy5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9pbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdC9jaGVja191dGlscy5jbWFrZQpAQCAtNjMsNyArNjMsNyBAQAogICAgIHJldHVybigpCiAgIGVuZGlmKCkKIAotICAjIHByb2JhYmx5IHdob3VsZCBiZSBiZXR0ZXIgdG8gdXNlIGNvbmZpZ3VyYXRpb24gbmFtZQorICAjIHByb2JhYmx5IHdvdWxkIGJlIGJldHRlciB0byB1c2UgY29uZmlndXJhdGlvbiBuYW1lCiAgICMgZXh0cmFjdGVkIGZyb20gQ01BS0VfQ09ORklHVVJBVElPTl9UWVBFUyB0aGFuIGp1c3QgaGFyZGNvZGVkICJEZWJ1ZyIgaW5zdGVhZAogICBzZXQoUkVHX0VYUCAiXihcdCkqXFx7JHtGT1VORF9HVUlEfVxcfVxcLkRlYnVnW14gXSpcXC5BY3RpdmVDZmcgPSBEZWJ1Z1xcfCR7UExBVEZPUk1fTkFNRX0kIikKICAgY2hlY2tfbGluZV9leGlzdHMoJHtUQVJHRVRfRklMRX0gUkVHX0VYUCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL0NNYWtlTGlzdHMudHh0CmluZGV4IGM3ZTk5YWQuLjZkZDhjZGYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9DTWFrZUxpc3RzLnR4dApAQCAtMSw2ICsxLDMgQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjQpCi1pZihSdW5DTWFrZV9URVNUIE1BVENIRVMgIl5maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUyIpCi0gIGNtYWtlX3BvbGljeShTRVQgQ01QMDA4NyBORVcpCi1lbmRpZigpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggMjFjMzIwYi4uZDgzYTA3YyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTE1NSwzNiArMTU1LDYgQEAKIHJ1bl9pbnN0YWxsX3Rlc3QoVEFSR0VUUy1SUEFUSCkKIHJ1bl9pbnN0YWxsX3Rlc3QoSW5zdGFsbFJlcXVpcmVkU3lzdGVtTGlicmFyaWVzKQogCi1pZihDTUFLRV9IT1NUX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJEYXJ3aW4iKQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zKQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLXVucmVzb2x2ZWQpCi0gIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtY29uZmxpY3QpCi0gIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3Mtbm90ZmlsZSkKLSAgcnVuX2NtYWtlKGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXByb2plY3QpCi0gIHJ1bl9jbWFrZShmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMSkKLSAgcnVuX2NtYWtlKGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MyKQotZWxzZWlmKENNQUtFX0hPU1RfU1lTVEVNX05BTUUgU1RSRVFVQUwgIldpbmRvd3MiKQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MpCi0gIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy11bnJlc29sdmVkKQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QpCi0gIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1ub3RmaWxlKQotICBydW5fY21ha2UoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtcHJvamVjdCkKLSAgcnVuX2NtYWtlKGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxKQotICBydW5fY21ha2UoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczIpCi1lbHNlaWYoQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQotICBpZihOT1QgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeWEwiKQotICAgIHJ1bl9pbnN0YWxsX3Rlc3QoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgpCi0gIGVuZGlmKCkKLSAgcnVuX2luc3RhbGxfdGVzdChmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC11bnJlc29sdmVkKQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWNvbmZsaWN0KQotICBydW5faW5zdGFsbF90ZXN0KGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUpCi0gIHJ1bl9jbWFrZShmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1wcm9qZWN0KQotICBydW5fY21ha2UoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczEpCi0gIHJ1bl9jbWFrZShmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMikKLWVsc2UoKQotICBydW5fY21ha2UoZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtdW5zdXBwb3J0ZWQpCi1lbmRpZigpCi0KIHNldChydW5faW5zdGFsbF90ZXN0X2NvbXBvbmVudHMgMSkKIHJ1bl9pbnN0YWxsX3Rlc3QoRklMRVMtRVhDTFVERV9GUk9NX0FMTCkKIHJ1bl9pbnN0YWxsX3Rlc3QoVEFSR0VUUy1FWENMVURFX0ZST01fQUxMKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9UQVJHRVRTLUZJTEVfUlBBVEhfQ0hBTkdFLW5ld19ycGF0aC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9UQVJHRVRTLUZJTEVfUlBBVEhfQ0hBTkdFLW5ld19ycGF0aC1zdGRlcnIudHh0CmluZGV4IDFlMTIzZjYuLjI1NjEyNjMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvVEFSR0VUUy1GSUxFX1JQQVRIX0NIQU5HRS1uZXdfcnBhdGgtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL1RBUkdFVFMtRklMRV9SUEFUSF9DSEFOR0UtbmV3X3JwYXRoLXN0ZGVyci50eHQKQEAgLTEsNCArMSw0IEBACi1eQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IFRBUkdFVFMtRklMRV9SUEFUSF9DSEFOR0UtbmV3X3JwYXRoXC5jbWFrZTpbMC05XSsgXChpbnN0YWxsXCk6CitDTWFrZSBXYXJuaW5nIFwoZGV2XCkgYXQgVEFSR0VUUy1GSUxFX1JQQVRIX0NIQU5HRS1uZXdfcnBhdGhcLmNtYWtlOlswLTldKyBcKGluc3RhbGxcKToKICAgUG9saWN5IENNUDAwOTUgaXMgbm90IHNldDogUlBBVEggZW50cmllcyBhcmUgcHJvcGVybHkgZXNjYXBlZCBpbiB0aGUKICAgaW50ZXJtZWRpYXJ5IENNYWtlIGluc3RhbGwgc2NyaXB0XC4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMDk1IiBmb3IKICAgcG9saWN5IGRldGFpbHNcLiAgVXNlIHRoZSBjbWFrZV9wb2xpY3kgY29tbWFuZCB0byBzZXQgdGhlIHBvbGljeSBhbmQKQEAgLTIwLDQgKzIwLDQgQEAKICAgaW50ZXJtZWRpYXJ5IGNtYWtlX2luc3RhbGxcLmNtYWtlIHNjcmlwdFwuCiBDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCi1UaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVyc1wuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXRcLiQKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzXC4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdFwuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MxLXN0ZGVyci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NmQxZmUuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMS1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotXkNNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMVwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBZb3UgaGF2ZSB1c2VkIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGluIHByb2plY3QgbW9kZVwuICBUaGlzIGlzCi0gIHByb2JhYmx5IG5vdCB3aGF0IHlvdSBpbnRlbmRlZCB0byBkb1wuICBJbnN0ZWFkLCBwbGVhc2UgY29uc2lkZXIgdXNpbmcgaXQgaW4KLSAgYW4gaW5zdGFsbFwoQ09ERVwpIG9yIGluc3RhbGxcKFNDUklQVFwpIGNvbW1hbmRcLiAgRm9yIGV4YW1wbGU6Ci0KLSAgICBpbnN0YWxsXChDT0RFIFxbXFsKLSAgICAgIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUwotICAgICAgICAjIFwuXC5cLgotICAgICAgICBcKQotICAgICAgXV1cKQotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQotVGhpcyB3YXJuaW5nIGlzIGZvciBwcm9qZWN0IGRldmVsb3BlcnNcLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0XC4KLQotQ01ha2UgRXJyb3IgYXQgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczFcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgZmlsZSBVbnJlY29nbml6ZWQgYXJndW1lbnQ6ICJpbnZhbGlkIgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczItc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtYmFkYXJnczItc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBmYTgxZi4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MyLXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1eQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWJhZGFyZ3MyXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIFlvdSBoYXZlIHVzZWQgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgaW4gcHJvamVjdCBtb2RlXC4gIFRoaXMgaXMKLSAgcHJvYmFibHkgbm90IHdoYXQgeW91IGludGVuZGVkIHRvIGRvXC4gIEluc3RlYWQsIHBsZWFzZSBjb25zaWRlciB1c2luZyBpdCBpbgotICBhbiBpbnN0YWxsXChDT0RFXCkgb3IgaW5zdGFsbFwoU0NSSVBUXCkgY29tbWFuZFwuICBGb3IgZXhhbXBsZToKLQotICAgIGluc3RhbGxcKENPREUgXFtcWwotICAgICAgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCi0gICAgICAgICMgXC5cLlwuCi0gICAgICAgIFwpCi0gICAgICBdXVwpCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCi1UaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVyc1wuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXRcLgotCi1DTWFrZSBFcnJvciBhdCBmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1iYWRhcmdzMlwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBmaWxlIEtleXdvcmRzIG1pc3NpbmcgdmFsdWVzOgotCi0gICAgUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUgotICAgIFVOUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUgotICAgIENPTkZMSUNUSU5HX0RFUEVOREVOQ0lFU19QUkVGSVgKLSAgICBCVU5ETEVfRVhFQ1VUQUJMRQotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYWxsLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1hbGwtY2hlY2suY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNjMwZjAuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1hbGwtY2hlY2suY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1mdW5jdGlvbihjaGVja19jb250ZW50cyBmaWxlbmFtZSBjb250ZW50c19yZWdleCkKLSAgaWYoRVhJU1RTICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSIpCi0gICAgZmlsZShSRUFEICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSIgY29udGVudHMpCi0gICAgaWYoTk9UIGNvbnRlbnRzIE1BVENIRVMgIiR7Y29udGVudHNfcmVnZXh9IikKLSAgICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgY29udGVudHM6Ci0gICR7Y29udGVudHN9Ci1kbyBub3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3RlZDoKLSAgJHtjb250ZW50c19yZWdleH0KLWluIGZpbGU6Ci0gICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7ZmlsZW5hbWV9XG4iKQotICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSIgUEFSRU5UX1NDT1BFKQotICAgIGVuZGlmKCkKLSAgZWxzZSgpCi0gICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRmlsZSAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSBkb2VzIG5vdCBleGlzdCIpCi0gICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSIgUEFSRU5UX1NDT1BFKQotICBlbmRpZigpCi1lbmRmdW5jdGlvbigpCi0KLXNldChfY2hlY2sKLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9saWJ0ZXN0X3JwYXRoXC5zb11dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvbGlidGVzdF9ydW5wYXRoXC5zb11dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGgvbGlicnBhdGhcLnNvXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9wYXJlbnQvbGlicnBhdGhfcGFyZW50XC5zb11dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoL2xpYnJwYXRoX3NlYXJjaFwuc29dXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGgvbGlicnVucGF0aFwuc29dXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoL2xpYnJ1bnBhdGhfc2VhcmNoXC5zb11dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCi1jaGVja19jb250ZW50cyhkZXBzL2RlcHMyLnR4dCAiXiR7X2NoZWNrfSQiKQotY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMy50eHQgIl4ke19jaGVja30kIikKLXNldChfY2hlY2sKLSAgW1tsaWJycGF0aF91bnJlc29sdmVkXC5zb11dCi0gIFtbbGlicnVucGF0aF9wYXJlbnRfdW5yZXNvbHZlZFwuc29dXQotICBbW2xpYnJ1bnBhdGhfdW5yZXNvbHZlZFwuc29dXQotICApCi1jaGVja19jb250ZW50cyhkZXBzL3VkZXBzMS50eHQgIl4ke19jaGVja30kIikKLWNoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMyLnR4dCAiXiR7X2NoZWNrfSQiKQotY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczMudHh0ICJeJHtfY2hlY2t9JCIpCi1zZXQoX2NoZWNrCi0gICJebGliY29uZmxpY3RcXC5zbzpbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9jb25mbGljdC9saWJjb25mbGljdFxcLnNvO1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL2NvbmZsaWN0Mi9saWJjb25mbGljdFxcLnNvXG4kIgotICApCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzMS50eHQgIiR7X2NoZWNrfSIpCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzMi50eHQgIiR7X2NoZWNrfSIpCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzMy50eHQgIiR7X2NoZWNrfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1hbGwtc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIzYWU0OC4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWFsbC1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLV5DTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgRGVwZW5kZW5jeSBsaWJycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKLQotICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCi0KLSpDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgRGVwZW5kZW5jeSBsaWJycGF0aF9zZWFyY2hcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoCi0KLSAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQotCi0qQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIERlcGVuZGVuY3kgbGlicnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAotCi0gIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKLQotKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBEZXBlbmRlbmN5IGxpYnJ1bnBhdGhfc2VhcmNoXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3J1bnBhdGhfc2VhcmNoCi0KLSAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQotCi0qQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIERlcGVuZGVuY3kgbGlicnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCi0KLSAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQotCi0qQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIERlcGVuZGVuY3kgbGlicnBhdGhfc2VhcmNoXC5zbyBmb3VuZCBpbiBzZWFyY2ggZGlyZWN0b3J5OgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoX3NlYXJjaAotCi0gIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKLQotKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBEZXBlbmRlbmN5IGxpYnJ1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKLQotICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCi0KLSpDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgRGVwZW5kZW5jeSBsaWJydW5wYXRoX3NlYXJjaFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ydW5wYXRoX3NlYXJjaAotCi0gIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKLQotKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBEZXBlbmRlbmN5IGxpYnJwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWRcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAotCi0gIFNlZSBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uXC4KLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzXCkKLQotKkNNYWtlIFdhcm5pbmcgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBEZXBlbmRlbmN5IGxpYnJwYXRoX3NlYXJjaFwuc28gZm91bmQgaW4gc2VhcmNoIGRpcmVjdG9yeToKLQotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aF9zZWFyY2gKLQotICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpCi0KLSpDTWFrZSBXYXJuaW5nIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgRGVwZW5kZW5jeSBsaWJydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWRcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkCi0KLSAgU2VlIGZpbGVcKEdFVF9SVU5USU1FX0RFUEVOREVOQ0lFU1wpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cLgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXNcKQotCi0qQ01ha2UgV2FybmluZyBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIERlcGVuZGVuY3kgbGlicnVucGF0aF9zZWFyY2hcLnNvIGZvdW5kIGluIHNlYXJjaCBkaXJlY3Rvcnk6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1idWlsZC9yb290LWFsbC9saWIvcnVucGF0aF9zZWFyY2gKLQotICBTZWUgZmlsZVwoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTXCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvblwuCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llc1wpJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1jb25mbGljdC1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2OTIzNDguLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1jb25mbGljdC1hbGwtc3RkZXJyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgZmlsZSBNdWx0aXBsZSBjb25mbGljdGluZyBwYXRocyBmb3VuZCBmb3IgbGlicnBhdGhcLnNvOgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtY29uZmxpY3QtYnVpbGQvcm9vdC1hbGwvbGliL3JwYXRoMS9saWJycGF0aFwuc28KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC1jb25mbGljdC1idWlsZC9yb290LWFsbC9saWIvcnBhdGgyL2xpYnJwYXRoXC5zbyQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNhODdjOS4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LW5vdGZpbGUtYWxsLXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLV5DTWFrZSBFcnJvciBhdCBjbWFrZV9pbnN0YWxsXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIGZpbGUgRmFpbGVkIHRvIHJ1biBvYmpkdW1wIG9uOgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgtbm90ZmlsZS1idWlsZC9yb290LWFsbC9iaW4vXC5cLi9saWIvbGlidGVzdFwuc28kCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQwZjlmMS4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4LmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLWVuYWJsZV9sYW5ndWFnZShDKQotY21ha2VfcG9saWN5KFNFVCBDTVAwMDk1IE5FVykKLQotc2V0KHRlc3RfcnBhdGhfbmFtZXMKLSAgcHJlZXhjbHVkZWQKLSAgcnBhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoCi0gIHJwYXRoX3BhcmVudF9wb3N0ZXhjbHVkZWQKLSAgcnBhdGhfcGFyZW50Ci0gIHJwYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQKLSAgcnBhdGhfb3JpZ2luCi0gIHJwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQKLSAgcnBhdGhfc2VhcmNoCi0gIHJwYXRoX3VucmVzb2x2ZWQKLSAgY29uZmxpY3QKLSAgKQotc2V0KHRlc3RfcnVucGF0aF9uYW1lcwotICBydW5wYXRoX3Bvc3RleGNsdWRlZAotICBydW5wYXRoCi0gIHJ1bnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZAotICBydW5wYXRoX29yaWdpbgotICBydW5wYXRoX3BhcmVudF91bnJlc29sdmVkCi0gIHJ1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZAotICBydW5wYXRoX3NlYXJjaAotICBydW5wYXRoX3VucmVzb2x2ZWQKLSAgKQotCi1maWxlKFJFTU9WRSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3JwYXRoLmMiKQotYWRkX2xpYnJhcnkodGVzdF9ycGF0aCBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ycGF0aC5jIikKLWZvcmVhY2gobmFtZSAke3Rlc3RfcnBhdGhfbmFtZXN9KQotICBmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIgInZvaWQgJHtuYW1lfSh2b2lkKSB7fVxuIikKLSAgYWRkX2xpYnJhcnkoJHtuYW1lfSBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vJHtuYW1lfS5jIikKLQotICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3JwYXRoLmMiICJleHRlcm4gdm9pZCAke25hbWV9KHZvaWQpO1xuIikKLWVuZGZvcmVhY2goKQotZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ycGF0aC5jIiAidm9pZCB0ZXN0X3JwYXRoKHZvaWQpXG57XG4iKQotZm9yZWFjaChuYW1lICR7dGVzdF9ycGF0aF9uYW1lc30pCi0gIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnBhdGguYyIgIiAgJHtuYW1lfSgpO1xuIikKLWVuZGZvcmVhY2goKQotZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ycGF0aC5jIiAifVxuIikKLQotaW5zdGFsbChUQVJHRVRTIHJwYXRoX3Bvc3RleGNsdWRlZCBERVNUSU5BVElPTiBsaWIvcnBhdGhfcG9zdGV4Y2x1ZGVkKQotaW5zdGFsbChUQVJHRVRTIHJwYXRoIERFU1RJTkFUSU9OIGxpYi9ycGF0aCkKLWluc3RhbGwoVEFSR0VUUyBycGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkIERFU1RJTkFUSU9OIGxpYi9ycGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkKQotaW5zdGFsbChUQVJHRVRTIHJwYXRoX29yaWdpbiBERVNUSU5BVElPTiBsaWIvcnBhdGhfb3JpZ2luKQotaW5zdGFsbChUQVJHRVRTIHJwYXRoX3BhcmVudF9wb3N0ZXhjbHVkZWQgREVTVElOQVRJT04gbGliL3JwYXRoX3BhcmVudF9wb3N0ZXhjbHVkZWQpCi1pbnN0YWxsKFRBUkdFVFMgcnBhdGggcnBhdGhfb3JpZ2luIHJwYXRoX3BhcmVudCBERVNUSU5BVElPTiBsaWIvcnBhdGhfcGFyZW50KQotaW5zdGFsbChUQVJHRVRTIHJwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQgREVTVElOQVRJT04gbGliL3JwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQpCi1pbnN0YWxsKFRBUkdFVFMgcnBhdGggcnBhdGhfb3JpZ2luIHJwYXRoX3BhcmVudCBycGF0aF9zZWFyY2ggREVTVElOQVRJT04gbGliL3JwYXRoX3NlYXJjaCkKLWluc3RhbGwoVEFSR0VUUyBjb25mbGljdCBERVNUSU5BVElPTiBsaWIvY29uZmxpY3QpCi0KLXRhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0X3JwYXRoIFBSSVZBVEUgJHt0ZXN0X3JwYXRoX25hbWVzfSkKLXNldF9wcm9wZXJ0eShUQVJHRVQgdGVzdF9ycGF0aCBQUk9QRVJUWSBJTlNUQUxMX1JQQVRICi0gICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9ycGF0aF9wb3N0ZXhjbHVkZWQiCi0gICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9ycGF0aCIKLSAgIlwkT1JJR0lOL3JwYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQiCi0gICJcJHtPUklHSU59L3JwYXRoX29yaWdpbiIKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL2NvbmZsaWN0IgotICApCi10YXJnZXRfbGlua19vcHRpb25zKHRlc3RfcnBhdGggUFJJVkFURSAtV2wsLS1kaXNhYmxlLW5ldy1kdGFncykKLQotZmlsZShSRU1PVkUgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ydW5wYXRoLmMiKQotYWRkX2xpYnJhcnkodGVzdF9ydW5wYXRoIFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3J1bnBhdGguYyIpCi1mb3JlYWNoKG5hbWUgJHt0ZXN0X3J1bnBhdGhfbmFtZXN9IHJwYXRoIGNvbmZsaWN0KQotICBmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIgInZvaWQgJHtuYW1lfSh2b2lkKSB7fVxuIikKLSAgaWYoTk9UIG5hbWUgTUFUQ0hFUyAiXihycGF0aHxjb25mbGljdCkkIikKLSAgICBhZGRfbGlicmFyeSgke25hbWV9IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiKQotICBlbmRpZigpCi0KLSAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ydW5wYXRoLmMiICJleHRlcm4gdm9pZCAke25hbWV9KHZvaWQpO1xuIikKLWVuZGZvcmVhY2goKQotZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdF9ydW5wYXRoLmMiICJ2b2lkIHRlc3RfcnVucGF0aCh2b2lkKVxue1xuIikKLWZvcmVhY2gobmFtZSAke3Rlc3RfcnVucGF0aF9uYW1lc30gcnBhdGggY29uZmxpY3QpCi0gIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RfcnVucGF0aC5jIiAiICAke25hbWV9KCk7XG4iKQotZW5kZm9yZWFjaCgpCi1maWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0X3J1bnBhdGguYyIgIn1cbiIpCi0KLWluc3RhbGwoVEFSR0VUUyBydW5wYXRoX3Bvc3RleGNsdWRlZCBERVNUSU5BVElPTiBsaWIvcnVucGF0aF9wb3N0ZXhjbHVkZWQpCi1pbnN0YWxsKFRBUkdFVFMgcnVucGF0aCBERVNUSU5BVElPTiBsaWIvcnVucGF0aCkKLWluc3RhbGwoVEFSR0VUUyBydW5wYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQgREVTVElOQVRJT04gbGliL3J1bnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZCkKLWluc3RhbGwoVEFSR0VUUyBydW5wYXRoX29yaWdpbiBERVNUSU5BVElPTiBsaWIvcnVucGF0aF9vcmlnaW4pCi1pbnN0YWxsKFRBUkdFVFMgcnVucGF0aF9wYXJlbnRfdW5yZXNvbHZlZCBERVNUSU5BVElPTiBsaWIvcnVucGF0aF9wYXJlbnRfdW5yZXNvbHZlZCkKLWluc3RhbGwoVEFSR0VUUyBydW5wYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWQgREVTVElOQVRJT04gbGliL3J1bnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZCkKLWluc3RhbGwoVEFSR0VUUyBydW5wYXRoIHJ1bnBhdGhfb3JpZ2luIHJ1bnBhdGhfc2VhcmNoIERFU1RJTkFUSU9OIGxpYi9ydW5wYXRoX3NlYXJjaCkKLWluc3RhbGwoVEFSR0VUUyBjb25mbGljdCBERVNUSU5BVElPTiBsaWIvY29uZmxpY3QyKQotCi10YXJnZXRfbGlua19saWJyYXJpZXModGVzdF9ydW5wYXRoIFBSSVZBVEUgJHt0ZXN0X3J1bnBhdGhfbmFtZXN9IHJwYXRoIGNvbmZsaWN0KQotc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0X3J1bnBhdGggUFJPUEVSVFkgSU5TVEFMTF9SUEFUSAotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnVucGF0aC8uLi9ycGF0aCIgIyBFbnN1cmUgdGhhdCBmaWxlcyB0aGF0IGRvbid0IGNvbmZsaWN0IGFyZSB0cmVhdGVkIGNvcnJlY3RseQotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnVucGF0aF9wb3N0ZXhjbHVkZWQiCi0gICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9ydW5wYXRoIgotICAiXCR7T1JJR0lOfS9ydW5wYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWQiCi0gICJcJE9SSUdJTi9ydW5wYXRoX29yaWdpbiIKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvbGliL2NvbmZsaWN0MiIKLSAgKQotdGFyZ2V0X2xpbmtfb3B0aW9ucyh0ZXN0X3J1bnBhdGggUFJJVkFURSAtV2wsLS1lbmFibGUtbmV3LWR0YWdzKQotCi1zZXRfcHJvcGVydHkoVEFSR0VUIHRlc3RfcnBhdGggJHt0ZXN0X3JwYXRoX25hbWVzfSB0ZXN0X3J1bnBhdGggJHt0ZXN0X3J1bnBhdGhfbmFtZXN9IFBST1BFUlRZIExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSBsaWIpCi1pbnN0YWxsKFRBUkdFVFMgdGVzdF9ycGF0aCB0ZXN0X3J1bnBhdGggREVTVElOQVRJT04gbGliKQotCi1hZGRfZXhlY3V0YWJsZSh0b3BleGUgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbGludXgvdG9wZXhlLmMpCi1hZGRfbGlicmFyeSh0b3BsaWIgU0hBUkVEIGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLWxpbnV4L3RvcGxpYi5jKQotYWRkX2xpYnJhcnkodG9wbW9kIE1PRFVMRSBmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1saW51eC90b3BsaWIuYykKLXRhcmdldF9saW5rX2xpYnJhcmllcyh0b3BleGUgUFJJVkFURSB0ZXN0X3JwYXRoIHRlc3RfcnVucGF0aCkKLXRhcmdldF9saW5rX2xpYnJhcmllcyh0b3BsaWIgUFJJVkFURSB0ZXN0X3JwYXRoIHRlc3RfcnVucGF0aCkKLXRhcmdldF9saW5rX2xpYnJhcmllcyh0b3Btb2QgUFJJVkFURSB0ZXN0X3JwYXRoIHRlc3RfcnVucGF0aCkKLXNldF9wcm9wZXJ0eShUQVJHRVQgdG9wZXhlIHRvcGxpYiB0b3Btb2QgUFJPUEVSVFkgSU5TVEFMTF9SUEFUSAotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIiCi0gICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2xpYi9ycGF0aF9wYXJlbnRfcG9zdGV4Y2x1ZGVkIgotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnBhdGhfcGFyZW50IgotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9saWIvcnVucGF0aF9wYXJlbnRfdW5yZXNvbHZlZCIKLSAgKQotdGFyZ2V0X2xpbmtfb3B0aW9ucyh0b3BleGUgUFJJVkFURSAtV2wsLS1kaXNhYmxlLW5ldy1kdGFncykKLXRhcmdldF9saW5rX29wdGlvbnModG9wbGliIFBSSVZBVEUgLVdsLC0tZGlzYWJsZS1uZXctZHRhZ3MpCi10YXJnZXRfbGlua19vcHRpb25zKHRvcG1vZCBQUklWQVRFIC1XbCwtLWRpc2FibGUtbmV3LWR0YWdzKQotCi1pbnN0YWxsKFRBUkdFVFMgdG9wZXhlIHRvcGxpYiBSVU5USU1FIERFU1RJTkFUSU9OIGJpbiBMSUJSQVJZIERFU1RJTkFUSU9OIGxpYikKLWluc3RhbGwoVEFSR0VUUyB0b3Btb2QgTElCUkFSWSBERVNUSU5BVElPTiBsaWIvbW9kdWxlcykKLQotaW5zdGFsbChDT0RFIFtbCi0gIGZ1bmN0aW9uKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzIGRlcHNmaWxlIHVkZXBzZmlsZSBjZGVwc2ZpbGUpCi0gICAgZmlsZShHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMKLSAgICAgIFJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgZGVwcwotICAgICAgVU5SRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIHVkZXBzCi0gICAgICBDT05GTElDVElOR19ERVBFTkRFTkNJRVNfUFJFRklYIGNkZXBzCi0gICAgICBQUkVfSU5DTFVERV9SRUdFWEVTCi0gICAgICAgICJebGliKHRlc3RfcnBhdGh8cnBhdGhfcG9zdGV4Y2x1ZGVkfHJwYXRofHJwYXRoX3BhcmVudF9wb3N0ZXhjbHVkZWR8cnBhdGhfcGFyZW50fHJwYXRoX29yaWdpbl9wb3N0ZXhjbHVkZWR8cnBhdGhfb3JpZ2lufHJwYXRoX3NlYXJjaF9wb3N0ZXhjbHVkZWR8cnBhdGhfc2VhcmNofHJwYXRoX3VucmVzb2x2ZWR8dGVzdF9ydW5wYXRofHJ1bnBhdGhfcG9zdGV4Y2x1ZGVkfHJ1bnBhdGh8cnVucGF0aF9vcmlnaW5fcG9zdGV4Y2x1ZGVkfHJ1bnBhdGhfb3JpZ2lufHJ1bnBhdGhfcGFyZW50X3VucmVzb2x2ZWR8cnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkfHJ1bnBhdGhfc2VhcmNofHJ1bnBhdGhfdW5yZXNvbHZlZHxjb25mbGljdClcXC5zbyQiCi0gICAgICAgICJebGliY1xcLnNvIgotICAgICAgUFJFX0VYQ0xVREVfUkVHRVhFUyAiLioiCi0gICAgICBQT1NUX0lOQ0xVREVfUkVHRVhFUyAiXi4qLyhsaWJ0ZXN0X3JwYXRofHJwYXRoL2xpYnJwYXRofHJwYXRoX3BhcmVudC9saWJycGF0aF9wYXJlbnR8cnBhdGhfc2VhcmNoL2xpYnJwYXRoX3NlYXJjaHxsaWJ0ZXN0X3J1bnBhdGh8cnVucGF0aC9saWJydW5wYXRofHJ1bnBhdGhfb3JpZ2luX3Bvc3RleGNsdWRlZHxydW5wYXRoX29yaWdpbnxydW5wYXRoX3NlYXJjaC9saWJydW5wYXRoX3NlYXJjaHxjb25mbGljdDI/L2xpYmNvbmZsaWN0KVxcLnNvJCIKLSAgICAgIFBPU1RfRVhDTFVERV9SRUdFWEVTICIuKiIKLSAgICAgIERJUkVDVE9SSUVTCi0gICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIvcnBhdGhfc2VhcmNoX3Bvc3RleGNsdWRlZCIKLSAgICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2xpYi9ycGF0aF9zZWFyY2giCi0gICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIvcnVucGF0aF9zZWFyY2hfcG9zdGV4Y2x1ZGVkIgotICAgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliL3J1bnBhdGhfc2VhcmNoIgotICAgICAgJHtBUkdOfQotICAgICAgKQotICAgIGxpc3QoU09SVCBkZXBzKQotICAgIGxpc3QoU09SVCB1ZGVwcykKLSAgICBsaXN0KFNPUlQgY2RlcHNfRklMRU5BTUVTKQotICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHtkZXBzZmlsZX0iICIke2RlcHN9IikKLSAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7dWRlcHNmaWxlfSIgIiR7dWRlcHN9IikKLSAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7Y2RlcHNmaWxlfSIgIiIpCi0gICAgZm9yZWFjaChjZGVwIElOIExJU1RTIGNkZXBzX0ZJTEVOQU1FUykKLSAgICAgIHNldChjZGVwX3ZhbHVlcyAke2NkZXBzXyR7Y2RlcH19KQotICAgICAgbGlzdChTT1JUIGNkZXBfdmFsdWVzKQotICAgICAgZmlsZShBUFBFTkQgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHtjZGVwc2ZpbGV9IiAiJHtjZGVwfToke2NkZXBfdmFsdWVzfVxuIikKLSAgICBlbmRmb3JlYWNoKCkKLSAgZW5kZnVuY3Rpb24oKQotCi0gIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAotICAgIGRlcHMxLnR4dCB1ZGVwczEudHh0IGNkZXBzMS50eHQKLSAgICBFWEVDVVRBQkxFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wZXhlPiIKLSAgICApCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczIudHh0IHVkZXBzMi50eHQgY2RlcHMyLnR4dAotICAgIExJQlJBUklFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2xpYi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbGliPiIKLSAgICApCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczMudHh0IHVkZXBzMy50eHQgY2RlcHMzLnR4dAotICAgIE1PRFVMRVMKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIvbW9kdWxlcy8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbW9kPiIKLSAgICApCi0gIF1dKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1hbGwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWFsbC1jaGVjay5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ2ZGRlMS4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWFsbC1jaGVjay5jbWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi1mdW5jdGlvbihjaGVja19jb250ZW50cyBmaWxlbmFtZSBjb250ZW50c19yZWdleCkKLSAgaWYoRVhJU1RTICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSIpCi0gICAgZmlsZShSRUFEICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSIgY29udGVudHMpCi0gICAgaWYoTk9UIGNvbnRlbnRzIE1BVENIRVMgIiR7Y29udGVudHNfcmVnZXh9IikKLSAgICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgY29udGVudHM6Ci0gICR7Y29udGVudHN9Ci1kbyBub3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3RlZDoKLSAgJHtjb250ZW50c19yZWdleH0KLWluIGZpbGU6Ci0gICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7ZmlsZW5hbWV9XG4iKQotICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSIgUEFSRU5UX1NDT1BFKQotICAgIGVuZGlmKCkKLSAgZWxzZSgpCi0gICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRmlsZSAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSBkb2VzIG5vdCBleGlzdCIpCi0gICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSIgUEFSRU5UX1NDT1BFKQotICBlbmRpZigpCi1lbmRmdW5jdGlvbigpCi0KLXNldChfY2hlY2sKLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvYmluLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2Jpbi8uLi9saWIvcnBhdGhfZXhlY3V0YWJsZV9wYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbGlidGVzdGxpYlwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbG9hZGVyX3BhdGgvbGlibG9hZGVyX3BhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC8uLi9ycGF0aC9saWJycGF0aFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsL2xpYm5vcm1hbFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfbG9hZGVyX3BhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhcLmR5bGliXV0KLSAgW1svdXNyL2xpYi9saWJTeXN0ZW1cLkJcLmR5bGliXV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMS50eHQgIl4ke19jaGVja30kIikKLQotc2V0KF9jaGVjawotICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aF9idW5kbGUvbGliZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQotICBbW0Bsb2FkZXJfcGF0aC9sb2FkZXJfcGF0aF91bnJlc29sdmVkL2xpYmxvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczEudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xpYnRlc3RsaWJcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC9saWJub3JtYWxcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbL3Vzci9saWIvbGliU3lzdGVtXC5CXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczIudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCi0gIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX2J1bmRsZS9saWJleGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCi0gIFtbQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZC9saWJleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkXC5keWxpYl1dCi0gIFtbQGxvYWRlcl9wYXRoL2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQvbGlibG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICApCi1jaGVja19jb250ZW50cyhkZXBzL3VkZXBzMi50eHQgIl4ke19jaGVja30kIikKLQotc2V0KF9jaGVjawotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbGlidGVzdGxpYlwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbG9hZGVyX3BhdGgvbGlibG9hZGVyX3BhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC8uLi9ycGF0aC9saWJycGF0aFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsL2xpYm5vcm1hbFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfbG9hZGVyX3BhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhcLmR5bGliXV0KLSAgW1svdXNyL2xpYi9saWJTeXN0ZW1cLkJcLmR5bGliXV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMy50eHQgIl4ke19jaGVja30kIikKLQotc2V0KF9jaGVjawotICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aC9saWJleGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KLSAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KLSAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkL2xpYmV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWRcLmR5bGliXV0KLSAgW1tAbG9hZGVyX3BhdGgvbG9hZGVyX3BhdGhfdW5yZXNvbHZlZC9saWJsb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWRcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMzLnR4dCAiXiR7X2NoZWNrfSQiKQotCi1zZXQoX2NoZWNrCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2Jpbi8uLi9saWIvZXhlY3V0YWJsZV9wYXRoL2xpYmV4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9iaW4vLi4vbGliL3JwYXRoX2V4ZWN1dGFibGVfcGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xpYnRlc3RsaWJcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC9saWJub3JtYWxcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbL3Vzci9saWIvbGliU3lzdGVtXC5CXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczQudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KLSAgW1tAbG9hZGVyX3BhdGgvbG9hZGVyX3BhdGhfdW5yZXNvbHZlZC9saWJsb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHM0LnR4dCAiXiR7X2NoZWNrfSQiKQotCi1zZXQoX2NoZWNrCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9idW5kbGVfZXhlY3V0YWJsZS9iaW4vLi4vbGliL2V4ZWN1dGFibGVfcGF0aF9idW5kbGUvbGliZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbGlidGVzdGxpYlwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbG9hZGVyX3BhdGgvbGlibG9hZGVyX3BhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC8uLi9ycGF0aC9saWJycGF0aFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvbm9ybWFsL2xpYm5vcm1hbFwuZHlsaWJdXQotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfbG9hZGVyX3BhdGgvbGlicnBhdGhfbG9hZGVyX3BhdGhcLmR5bGliXV0KLSAgW1svdXNyL2xpYi9saWJTeXN0ZW1cLkJcLmR5bGliXV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy9kZXBzNS50eHQgIl4ke19jaGVja30kIikKLQotc2V0KF9jaGVjawotICBbW0BleGVjdXRhYmxlX3BhdGgvLi4vbGliL2V4ZWN1dGFibGVfcGF0aC9saWJleGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KLSAgW1tAbG9hZGVyX3BhdGgvbG9hZGVyX3BhdGhfdW5yZXNvbHZlZC9saWJsb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2V4ZWN1dGFibGVfcGF0aFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICApCi1jaGVja19jb250ZW50cyhkZXBzL3VkZXBzNS50eHQgIl4ke19jaGVja30kIikKLQotc2V0KF9jaGVjawotICBbW1teO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvYnVuZGxlX2V4ZWN1dGFibGUvYmluLy4uL2xpYi9leGVjdXRhYmxlX3BhdGhfYnVuZGxlL2xpYmV4ZWN1dGFibGVfcGF0aF9idW5kbGVcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xpYnRlc3RsaWJcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2xvYWRlcl9wYXRoL2xpYmxvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1idWlsZC9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgvbGlicnBhdGhcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL25vcm1hbC9saWJub3JtYWxcLmR5bGliXV0KLSAgW1tbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL3JwYXRoX2xvYWRlcl9wYXRoL2xpYnJwYXRoX2xvYWRlcl9wYXRoXC5keWxpYl1dCi0gIFtbL3Vzci9saWIvbGliU3lzdGVtXC5CXC5keWxpYl1dCi0gICkKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczYudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgW1tAZXhlY3V0YWJsZV9wYXRoLy4uL2xpYi9leGVjdXRhYmxlX3BhdGgvbGliZXhlY3V0YWJsZV9wYXRoXC5keWxpYl1dCi0gIFtbQGxvYWRlcl9wYXRoL2xvYWRlcl9wYXRoX3VucmVzb2x2ZWQvbGlibG9hZGVyX3BhdGhfdW5yZXNvbHZlZFwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9leGVjdXRhYmxlX3BhdGhcLmR5bGliXV0KLSAgW1tAcnBhdGgvbGlicnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZVwuZHlsaWJdXQotICBbW0BycGF0aC9saWJycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkXC5keWxpYl1dCi0gIFtbQHJwYXRoL2xpYnJwYXRoX3VucmVzb2x2ZWRcLmR5bGliXV0KLSAgKQotY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczYudHh0ICJeJHtfY2hlY2t9JCIpCi0KLXNldChfY2hlY2sKLSAgIl5saWJjb25mbGljdFxcLmR5bGliOlteO10qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MtYnVpbGQvcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvY29uZmxpY3QvbGliY29uZmxpY3RcXC5keWxpYjtbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWJ1aWxkL3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliL2NvbmZsaWN0Mi9saWJjb25mbGljdFxcLmR5bGliXG4kIgotICApCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzMS50eHQgIiR7X2NoZWNrfSIpCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzMi50eHQgIiR7X2NoZWNrfSIpCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzMy50eHQgIiR7X2NoZWNrfSIpCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzNC50eHQgIiR7X2NoZWNrfSIpCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzNS50eHQgIiR7X2NoZWNrfSIpCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzNi50eHQgIiR7X2NoZWNrfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdC1hbGwtc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM5ZTk3YS4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1eQ01ha2UgRXJyb3IgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBmaWxlIE11bHRpcGxlIGNvbmZsaWN0aW5nIHBhdGhzIGZvdW5kIGZvciBsaWJycGF0aFwuZHlsaWI6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1jb25mbGljdC1idWlsZC9yb290LWFsbC9saWIvcnBhdGgxL2xpYnJwYXRoXC5keWxpYgotICAgIFteCi1dKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi9ycGF0aDIvbGlicnBhdGhcLmR5bGliJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1ub3RmaWxlLWFsbC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy1ub3RmaWxlLWFsbC1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2FiOWYxLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotXkNNYWtlIEVycm9yIGF0IGNtYWtlX2luc3RhbGxcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgZmlsZSBGYWlsZWQgdG8gcnVuIG90b29sIG9uOgotCi0gICAgW14KLV0qL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3Mtbm90ZmlsZS1idWlsZC9yb290LWFsbC9iaW4vXC5cLi9saWIvbGlidGVzdFwuZHlsaWIkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiMDViMy4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLWVuYWJsZV9sYW5ndWFnZShDKQotCi1zZXQodGVzdGxpYl9uYW1lcwotICBwcmVleGNsdWRlZAotICBleGVjdXRhYmxlX3BhdGgKLSAgZXhlY3V0YWJsZV9wYXRoX2J1bmRsZQotICBleGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIGxvYWRlcl9wYXRoCi0gIGxvYWRlcl9wYXRoX3VucmVzb2x2ZWQKLSAgbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoCi0gIHJwYXRoX3VucmVzb2x2ZWQKLSAgcnBhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX2V4ZWN1dGFibGVfcGF0aAotICBycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlCi0gIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgcnBhdGhfbG9hZGVyX3BhdGgKLSAgcnBhdGhfbG9hZGVyX3BhdGhfdW5yZXNvbHZlZAotICBycGF0aF9sb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgbm9ybWFsCi0gIG5vcm1hbF91bnJlc29sdmVkCi0gIG5vcm1hbF9wb3N0ZXhjbHVkZWQKLSAgY29uZmxpY3QKLSAgKQotCi1maWxlKFJFTU9WRSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiKQotYWRkX2xpYnJhcnkodGVzdGxpYiBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIikKLWZvcmVhY2gobmFtZSAke3Rlc3RsaWJfbmFtZXN9KQotICBpZihuYW1lIFNUUkVRVUFMICJub3JtYWwiKQotICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfQklOQVJZX0RJUn0vbm9ybWFsLmMiICJleHRlcm4gdm9pZCBycGF0aCh2b2lkKTtcbnZvaWQgbm9ybWFsKHZvaWQpXG57XG4gIHJwYXRoKCk7XG59XG4iKQotICBlbHNlKCkKLSAgICBmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIgInZvaWQgJHtuYW1lfSh2b2lkKSB7fVxuIikKLSAgZW5kaWYoKQotICBhZGRfbGlicmFyeSgke25hbWV9IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS8ke25hbWV9LmMiKQotCi0gIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgImV4dGVybiB2b2lkICR7bmFtZX0odm9pZCk7XG4iKQotZW5kZm9yZWFjaCgpCi1maWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICJ2b2lkIHRlc3RsaWIodm9pZClcbntcbiIpCi1mb3JlYWNoKG5hbWUgJHt0ZXN0bGliX25hbWVzfSkKLSAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAiICAke25hbWV9KCk7XG4iKQotZW5kZm9yZWFjaCgpCi1maWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICJ9XG4iKQotc2V0X3Byb3BlcnR5KFRBUkdFVCAke3Rlc3RsaWJfbmFtZXN9IFBST1BFUlRZIEJVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUiAxKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG5vcm1hbCBQUklWQVRFIHJwYXRoKQotc2V0X3Byb3BlcnR5KFRBUkdFVCBub3JtYWwgUFJPUEVSVFkgSU5TVEFMTF9SUEFUSAotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ub3JtYWwvLi4vcnBhdGgiCi0gICkKLQotZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX2NvbmZsaWN0LmMiICJleHRlcm4gdm9pZCBjb25mbGljdCh2b2lkKTtcbnZvaWQgdGVzdGxpYl9jb25mbGljdCh2b2lkKVxue1xuICBjb25mbGljdCgpO1xufVxuIikKLWFkZF9saWJyYXJ5KHRlc3RsaWJfY29uZmxpY3QgU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWJfY29uZmxpY3QuYyIpCi10YXJnZXRfbGlua19saWJyYXJpZXModGVzdGxpYl9jb25mbGljdCBQUklWQVRFIGNvbmZsaWN0KQotCi1zZXRfcHJvcGVydHkoVEFSR0VUIHRlc3RsaWIgUFJPUEVSVFkgSU5TVEFMTF9SUEFUSAotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9ycGF0aCIKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfdW5yZXNvbHZlZCIKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvcnBhdGhfcG9zdGV4Y2x1ZGVkIgotICAiJHtDTUFLRV9CSU5BUllfRElSfS9yb290LWFsbC9leGVjdXRhYmxlL2xpYi9jb25mbGljdCIKLSAgQGV4ZWN1dGFibGVfcGF0aC8uLi9saWIvcnBhdGhfZXhlY3V0YWJsZV9wYXRoCi0gIEBleGVjdXRhYmxlX3BhdGgvLi4vbGliL3JwYXRoX2V4ZWN1dGFibGVfcGF0aF91bnJlc29sdmVkCi0gIEBleGVjdXRhYmxlX3BhdGgvLi4vbGliL3JwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgQGxvYWRlcl9wYXRoL3JwYXRoX2xvYWRlcl9wYXRoCi0gIEBsb2FkZXJfcGF0aC9ycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkCi0gIEBsb2FkZXJfcGF0aC9ycGF0aF9sb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgKQotc2V0X3Byb3BlcnR5KFRBUkdFVCB0ZXN0bGliX2NvbmZsaWN0IFBST1BFUlRZIElOU1RBTExfUlBBVEgKLSAgIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIvY29uZmxpY3QyIgotICApCi0KLWZvcmVhY2godAotICBleGVjdXRhYmxlX3BhdGgKLSAgZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAotICBsb2FkZXJfcGF0aAotICBsb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgcnBhdGgKLSAgcnBhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX2V4ZWN1dGFibGVfcGF0aAotICBycGF0aF9leGVjdXRhYmxlX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX2xvYWRlcl9wYXRoCi0gIHJwYXRoX2xvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAotICBjb25mbGljdAotICApCi0gIGluc3RhbGwoVEFSR0VUUyAke3R9IERFU1RJTkFUSU9OIGV4ZWN1dGFibGUvbGliLyR7dH0pCi1lbmRmb3JlYWNoKCkKLWluc3RhbGwoVEFSR0VUUyBjb25mbGljdCBERVNUSU5BVElPTiBleGVjdXRhYmxlL2xpYi9jb25mbGljdDIpCi0KLWZvcmVhY2godAotICBleGVjdXRhYmxlX3BhdGhfYnVuZGxlCi0gIGV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gIHJwYXRoX3Bvc3RleGNsdWRlZAotICBycGF0aF9leGVjdXRhYmxlX3BhdGhfYnVuZGxlCi0gIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQKLSAgcnBhdGhfbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkCi0gICkKLSAgaW5zdGFsbChUQVJHRVRTICR7dH0gREVTVElOQVRJT04gYnVuZGxlX2V4ZWN1dGFibGUvbGliLyR7dH0pCi1lbmRmb3JlYWNoKCkKLQotZm9yZWFjaCh0IGV4ZWN1dGFibGVfcGF0aCBleGVjdXRhYmxlX3BhdGhfYnVuZGxlIGV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWQpCi0gIHNldF9wcm9wZXJ0eShUQVJHRVQgJHt0fSBQUk9QRVJUWSBJTlNUQUxMX05BTUVfRElSIEBleGVjdXRhYmxlX3BhdGgvLi4vbGliLyR7dH0pCi1lbmRmb3JlYWNoKCkKLQotZm9yZWFjaCh0IGxvYWRlcl9wYXRoIGxvYWRlcl9wYXRoX3VucmVzb2x2ZWQgbG9hZGVyX3BhdGhfcG9zdGV4Y2x1ZGVkKQotICBzZXRfcHJvcGVydHkoVEFSR0VUICR7dH0gUFJPUEVSVFkgSU5TVEFMTF9OQU1FX0RJUiBAbG9hZGVyX3BhdGgvJHt0fSkKLWVuZGZvcmVhY2goKQotCi1mb3JlYWNoKHQKLSAgcnBhdGgKLSAgcnBhdGhfdW5yZXNvbHZlZAotICBycGF0aF9wb3N0ZXhjbHVkZWQKLSAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoCi0gIHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGUKLSAgcnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZAotICBycGF0aF9sb2FkZXJfcGF0aAotICBycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkCi0gIHJwYXRoX2xvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZAotICBjb25mbGljdAotICApCi0gIHNldF9wcm9wZXJ0eShUQVJHRVQgJHt0fSBQUk9QRVJUWSBJTlNUQUxMX05BTUVfRElSIEBycGF0aCkKLWVuZGZvcmVhY2goKQotCi1mb3JlYWNoKHQgbm9ybWFsIG5vcm1hbF91bnJlc29sdmVkIG5vcm1hbF9wb3N0ZXhjbHVkZWQpCi0gIHNldF9wcm9wZXJ0eShUQVJHRVQgJHt0fSBQUk9QRVJUWSBJTlNUQUxMX05BTUVfRElSICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Jvb3QtYWxsL2V4ZWN1dGFibGUvbGliLyR7dH0iKQotICBpZihOT1QgdCBTVFJFUVVBTCAibm9ybWFsX3VucmVzb2x2ZWQiKQotICAgIGluc3RhbGwoVEFSR0VUUyAke3R9IERFU1RJTkFUSU9OIGV4ZWN1dGFibGUvbGliLyR7dH0pCi0gIGVuZGlmKCkKLWVuZGZvcmVhY2goKQotCi10YXJnZXRfbGlua19saWJyYXJpZXModGVzdGxpYiBQUklWQVRFICR7dGVzdGxpYl9uYW1lc30pCi0KLWFkZF9leGVjdXRhYmxlKHRvcGV4ZSBmaWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1tYWNvcy90b3BleGUuYykKLWFkZF9saWJyYXJ5KHRvcGxpYiBTSEFSRUQgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtbWFjb3MvdG9wbGliLmMpCi1hZGRfbGlicmFyeSh0b3Btb2QgTU9EVUxFIGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLW1hY29zL3RvcGxpYi5jKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcGV4ZSBQUklWQVRFIHRlc3RsaWIpCi10YXJnZXRfbGlua19saWJyYXJpZXModG9wbGliIFBSSVZBVEUgdGVzdGxpYikKLXRhcmdldF9saW5rX2xpYnJhcmllcyh0b3Btb2QgUFJJVkFURSB0ZXN0bGliKQotCi1zZXRfcHJvcGVydHkoVEFSR0VUIHRvcGV4ZSB0b3BsaWIgdG9wbW9kIFBST1BFUlRZIElOU1RBTExfUlBBVEggIiR7Q01BS0VfQklOQVJZX0RJUn0vcm9vdC1hbGwvZXhlY3V0YWJsZS9saWIiKQotCi1pbnN0YWxsKFRBUkdFVFMgdG9wZXhlIHRvcGxpYiB0b3Btb2QgdGVzdGxpYiB0ZXN0bGliX2NvbmZsaWN0IFJVTlRJTUUgREVTVElOQVRJT04gZXhlY3V0YWJsZS9iaW4gTElCUkFSWSBERVNUSU5BVElPTiBleGVjdXRhYmxlL2xpYikKLWluc3RhbGwoVEFSR0VUUyB0b3BleGUgdG9wbGliIHRvcG1vZCB0ZXN0bGliIHRlc3RsaWJfY29uZmxpY3QgUlVOVElNRSBERVNUSU5BVElPTiBidW5kbGVfZXhlY3V0YWJsZS9iaW4gTElCUkFSWSBERVNUSU5BVElPTiBidW5kbGVfZXhlY3V0YWJsZS9saWIpCi0KLWluc3RhbGwoQ09ERSBbWwotICBmdW5jdGlvbihleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcyBkZXBzZmlsZSB1ZGVwc2ZpbGUgY2RlcHNmaWxlKQotICAgIGZpbGUoR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTCi0gICAgICBSRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIGRlcHMKLSAgICAgIFVOUkVTT0xWRURfREVQRU5ERU5DSUVTX1ZBUiB1ZGVwcwotICAgICAgQ09ORkxJQ1RJTkdfREVQRU5ERU5DSUVTX1BSRUZJWCBjZGVwcwotICAgICAgUFJFX0lOQ0xVREVfUkVHRVhFUyAiXi4qL2xpYih0ZXN0bGlifGV4ZWN1dGFibGVfcGF0aHxleGVjdXRhYmxlX3BhdGhfYnVuZGxlfGV4ZWN1dGFibGVfcGF0aF9wb3N0ZXhjbHVkZWR8bG9hZGVyX3BhdGh8bG9hZGVyX3BhdGhfdW5yZXNvbHZlZHxsb2FkZXJfcGF0aF9wb3N0ZXhjbHVkZWR8cnBhdGh8cnBhdGhfdW5yZXNvbHZlZHxycGF0aF9wb3N0ZXhjbHVkZWR8cnBhdGhfZXhlY3V0YWJsZV9wYXRofHJwYXRoX2V4ZWN1dGFibGVfcGF0aF9idW5kbGV8cnBhdGhfZXhlY3V0YWJsZV9wYXRoX3Bvc3RleGNsdWRlZHxycGF0aF9sb2FkZXJfcGF0aHxycGF0aF9sb2FkZXJfcGF0aF91bnJlc29sdmVkfHJwYXRoX2xvYWRlcl9wYXRoX3Bvc3RleGNsdWRlZHxub3JtYWx8bm9ybWFsX3VucmVzb2x2ZWR8bm9ybWFsX3Bvc3RleGNsdWRlZHxjb25mbGljdHxTeXN0ZW1cXC5CKVxcLmR5bGliJCIKLSAgICAgIFBSRV9FWENMVURFX1JFR0VYRVMgIi4qIgotICAgICAgUE9TVF9JTkNMVURFX1JFR0VYRVMgIl4uKi9saWIodGVzdGxpYnxleGVjdXRhYmxlX3BhdGh8ZXhlY3V0YWJsZV9wYXRoX2J1bmRsZXxsb2FkZXJfcGF0aHxycGF0aHxycGF0aF9leGVjdXRhYmxlX3BhdGh8cnBhdGhfZXhlY3V0YWJsZV9wYXRoX2J1bmRsZXxycGF0aF9sb2FkZXJfcGF0aHxub3JtYWx8Y29uZmxpY3R8U3lzdGVtXFwuQilcXC5keWxpYiQiCi0gICAgICBQT1NUX0VYQ0xVREVfUkVHRVhFUyAiLioiCi0gICAgICAke0FSR059Ci0gICAgICApCi0gICAgbGlzdChTT1JUIGRlcHMpCi0gICAgbGlzdChTT1JUIHVkZXBzKQotICAgIGxpc3QoU09SVCBjZGVwc19GSUxFTkFNRVMpCi0gICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2RlcHNmaWxlfSIgIiR7ZGVwc30iKQotICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHt1ZGVwc2ZpbGV9IiAiJHt1ZGVwc30iKQotICAgIGZpbGUoV1JJVEUgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2RlcHMvJHtjZGVwc2ZpbGV9IiAiIikKLSAgICBmb3JlYWNoKGNkZXAgSU4gTElTVFMgY2RlcHNfRklMRU5BTUVTKQotICAgICAgc2V0KGNkZXBfdmFsdWVzICR7Y2RlcHNfJHtjZGVwfX0pCi0gICAgICBsaXN0KFNPUlQgY2RlcF92YWx1ZXMpCi0gICAgICBmaWxlKEFQUEVORCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIke2NkZXB9OiR7Y2RlcF92YWx1ZXN9XG4iKQotICAgIGVuZGZvcmVhY2goKQotICBlbmRmdW5jdGlvbigpCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczEudHh0IHVkZXBzMS50eHQgY2RlcHMxLnR4dAotICAgIEVYRUNVVEFCTEVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCi0gICAgTElCUkFSSUVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgotICAgICkKLQotICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKLSAgICBkZXBzMi50eHQgdWRlcHMyLnR4dCBjZGVwczIudHh0Ci0gICAgTElCUkFSSUVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRvcGxpYj4iCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgotICAgICkKLQotICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKLSAgICBkZXBzMy50eHQgdWRlcHMzLnR4dCBjZGVwczMudHh0Ci0gICAgTU9EVUxFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3Btb2Q+IgotICAgIExJQlJBUklFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2V4ZWN1dGFibGUvbGliLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKLSAgICApCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczQudHh0IHVkZXBzNC50eHQgY2RlcHM0LnR4dAotICAgIEVYRUNVVEFCTEVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCi0gICAgTElCUkFSSUVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgotICAgIEJVTkRMRV9FWEVDVVRBQkxFCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYnVuZGxlX2V4ZWN1dGFibGUvYmluLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0b3BleGU+IgotICAgICkKLQotICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKLSAgICBkZXBzNS50eHQgdWRlcHM1LnR4dCBjZGVwczUudHh0Ci0gICAgTElCUkFSSUVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRvcGxpYj4iCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgotICAgIEJVTkRMRV9FWEVDVVRBQkxFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9idW5kbGVfZXhlY3V0YWJsZS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCi0gICAgKQotCi0gIGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzKAotICAgIGRlcHM2LnR4dCB1ZGVwczYudHh0IGNkZXBzNi50eHQKLSAgICBNT0RVTEVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRvcG1vZD4iCi0gICAgTElCUkFSSUVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZXhlY3V0YWJsZS9saWIvJDxUQVJHRVRfRklMRV9OQU1FOnRlc3RsaWJfY29uZmxpY3Q+IgotICAgIEJVTkRMRV9FWEVDVVRBQkxFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9idW5kbGVfZXhlY3V0YWJsZS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCi0gICAgKQotICBdXSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtcHJvamVjdC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1wcm9qZWN0LXN0ZGVyci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MDY2NDUuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy1wcm9qZWN0LXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1eQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXByb2plY3RcLmNtYWtlOlswLTldKyBcKGZpbGVcKToKLSAgWW91IGhhdmUgdXNlZCBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVNcKSBpbiBwcm9qZWN0IG1vZGVcLiAgVGhpcyBpcwotICBwcm9iYWJseSBub3Qgd2hhdCB5b3UgaW50ZW5kZWQgdG8gZG9cLiAgSW5zdGVhZCwgcGxlYXNlIGNvbnNpZGVyIHVzaW5nIGl0IGluCi0gIGFuIGluc3RhbGxcKENPREVcKSBvciBpbnN0YWxsXChTQ1JJUFRcKSBjb21tYW5kXC4gIEZvciBleGFtcGxlOgotCi0gICAgaW5zdGFsbFwoQ09ERSBcW1xbCi0gICAgICBmaWxlXChHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMKLSAgICAgICAgIyBcLlwuXC4KLSAgICAgICAgXCkKLSAgICAgIF1dXCkKLUNhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6Ci0gIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKLVRoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzXC4gIFVzZSAtV25vLWRldiB0byBzdXBwcmVzcyBpdFwuJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy11bnN1cHBvcnRlZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy11bnN1cHBvcnRlZC1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGI4MzVjLi4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtdW5zdXBwb3J0ZWQtc3RkZXJyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotXkNNYWtlIEVycm9yIGF0IGZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXVuc3VwcG9ydGVkXC5jbWFrZTpbMC05XSsgXChmaWxlXCk6Ci0gIGZpbGUgR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTIGlzIG5vdCBzdXBwb3J0ZWQgb24gc3lzdGVtICJbXgotIF0rIgotQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKLSAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1hbGwtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtYWxsLWNoZWNrLmNtYWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTIwY2U0Li4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1hbGwtY2hlY2suY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1mdW5jdGlvbihjaGVja19jb250ZW50cyBmaWxlbmFtZSBjb250ZW50c19yZWdleCkKLSAgaWYoRVhJU1RTICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSIpCi0gICAgZmlsZShSRUFEICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSIgY29udGVudHMpCi0gICAgaWYoTk9UIGNvbnRlbnRzIE1BVENIRVMgIiR7Y29udGVudHNfcmVnZXh9IikKLSAgICAgIHN0cmluZyhBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZpbGUgY29udGVudHM6Ci0gICR7Y29udGVudHN9Ci1kbyBub3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3RlZDoKLSAgJHtjb250ZW50c19yZWdleH0KLWluIGZpbGU6Ci0gICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7ZmlsZW5hbWV9XG4iKQotICAgICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSIgUEFSRU5UX1NDT1BFKQotICAgIGVuZGlmKCkKLSAgZWxzZSgpCi0gICAgc3RyaW5nKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRmlsZSAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke2ZpbGVuYW1lfSBkb2VzIG5vdCBleGlzdCIpCi0gICAgc2V0KFJ1bkNNYWtlX1RFU1RfRkFJTEVEICIke1J1bkNNYWtlX1RFU1RfRkFJTEVEfSIgUEFSRU5UX1NDT1BFKQotICBlbmRpZigpCi1lbmRmdW5jdGlvbigpCi0KLXNldChfY2hlY2sKLSAgWz1bW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWJ1aWxkL3Jvb3QtYWxsL2Jpbi9cLmNvbmZsaWN0L1wuXC4vKGxpYik/bGliZGlyXC5kbGxdPV0KLSAgWz1bW147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWJ1aWxkL3Jvb3QtYWxsL2Jpbi9cLnNlYXJjaC8obGliKT9zZWFyY2hcLmRsbF09XQotICBbPVtbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtYnVpbGQvcm9vdC1hbGwvYmluLyhsaWIpP3Rlc3RsaWJcLmRsbF09XQotICApCi1jaGVja19jb250ZW50cyhkZXBzL2RlcHMxLnR4dCAiXiR7X2NoZWNrfSQiKQotY2hlY2tfY29udGVudHMoZGVwcy9kZXBzMi50eHQgIl4ke19jaGVja30kIikKLWNoZWNrX2NvbnRlbnRzKGRlcHMvZGVwczMudHh0ICJeJHtfY2hlY2t9JCIpCi1zZXQoX2NoZWNrCi0gIFs9WyhsaWIpP3VucmVzb2x2ZWRcLmRsbF09XQotICApCi1jaGVja19jb250ZW50cyhkZXBzL3VkZXBzMS50eHQgIl4ke19jaGVja30kIikKLWNoZWNrX2NvbnRlbnRzKGRlcHMvdWRlcHMyLnR4dCAiXiR7X2NoZWNrfSQiKQotY2hlY2tfY29udGVudHMoZGVwcy91ZGVwczMudHh0ICJeJHtfY2hlY2t9JCIpCi1zZXQoX2NoZWNrCi0gICJeKGxpYik/Y29uZmxpY3RcXC5kbGw6W147XSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWJ1aWxkL3Jvb3QtYWxsL2Jpbi9cXC5jb25mbGljdC8obGliKT9jb25mbGljdFxcLmRsbDtbXjtdKi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtYnVpbGQvcm9vdC1hbGwvYmluLyhsaWIpP2NvbmZsaWN0XFwuZGxsXG4kIgotICApCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzMS50eHQgIiR7X2NoZWNrfSIpCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzMi50eHQgIiR7X2NoZWNrfSIpCi1jaGVja19jb250ZW50cyhkZXBzL2NkZXBzMy50eHQgIiR7X2NoZWNrfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MtY29uZmxpY3QtYWxsLXN0ZGVyci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZWNiOTMuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWNvbmZsaWN0LWFsbC1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1eQ01ha2UgRXJyb3IgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBmaWxlIE11bHRpcGxlIGNvbmZsaWN0aW5nIHBhdGhzIGZvdW5kIGZvciAobGliKT9wYXRoXC5kbGw6Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi90ZXN0MS8obGliKT9wYXRoXC5kbGwKLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLWNvbmZsaWN0LWJ1aWxkL3Jvb3QtYWxsL2xpYi90ZXN0Mi8obGliKT9wYXRoXC5kbGwkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3Mtbm90ZmlsZS1hbGwtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1ub3RmaWxlLWFsbC1zdGRlcnIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTIxNDA5Li4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy1ub3RmaWxlLWFsbC1zdGRlcnIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1eQ01ha2UgRXJyb3IgYXQgY21ha2VfaW5zdGFsbFwuY21ha2U6WzAtOV0rIFwoZmlsZVwpOgotICBmaWxlIEZhaWxlZCB0byBydW4gKGR1bXBiaW58b2JqZHVtcCkgb246Ci0KLSAgICBbXgotXSovVGVzdHMvUnVuQ01ha2UvaW5zdGFsbC9maWxlLUdFVF9SVU5USU1FX0RFUEVOREVOQ0lFUy13aW5kb3dzLW5vdGZpbGUtYnVpbGQvcm9vdC1hbGwvYmluLyhsaWIpP3Rlc3RcLmRsbCQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2luc3RhbGwvZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyODhkOC4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnN0YWxsL2ZpbGUtR0VUX1JVTlRJTUVfREVQRU5ERU5DSUVTLXdpbmRvd3MuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotZW5hYmxlX2xhbmd1YWdlKEMpCi0KLXNldCh0ZXN0bGliX25hbWVzCi0gIHByZWV4Y2x1ZGVkCi0gIGxpYmRpcl9wb3N0ZXhjbHVkZWQKLSAgbGliZGlyCi0gIHNlYXJjaF9wb3N0ZXhjbHVkZWQKLSAgc2VhcmNoCi0gIHVucmVzb2x2ZWQKLSAgY29uZmxpY3QKLSAgKQotCi1maWxlKFJFTU9WRSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiKQotYWRkX2xpYnJhcnkodGVzdGxpYiBTSEFSRUQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIikKLWZvcmVhY2gobmFtZSAke3Rlc3RsaWJfbmFtZXN9KQotICBmaWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIgIl9fZGVjbHNwZWMoZGxsZXhwb3J0KSB2b2lkICR7bmFtZX0odm9pZCkge31cbiIpCi0gIGFkZF9saWJyYXJ5KCR7bmFtZX0gU0hBUkVEICIke0NNQUtFX0JJTkFSWV9ESVJ9LyR7bmFtZX0uYyIpCi0KLSAgZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAiX19kZWNsc3BlYyhkbGxpbXBvcnQpIGV4dGVybiB2b2lkICR7bmFtZX0odm9pZCk7XG4iKQotZW5kZm9yZWFjaCgpCi1maWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliLmMiICJfX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZCB0ZXN0bGliKHZvaWQpXG57XG4iKQotZm9yZWFjaChuYW1lICR7dGVzdGxpYl9uYW1lc30pCi0gIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWIuYyIgIiAgJHtuYW1lfSgpO1xuIikKLWVuZGZvcmVhY2goKQotZmlsZShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vdGVzdGxpYi5jIiAifVxuIikKLQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RsaWIgUFJJVkFURSAke3Rlc3RsaWJfbmFtZXN9KQotCi1maWxlKFdSSVRFICIke0NNQUtFX0JJTkFSWV9ESVJ9L3Rlc3RsaWJfY29uZmxpY3QuYyIgIl9fZGVjbHNwZWMoZGxsaW1wb3J0KSBleHRlcm4gdm9pZCBjb25mbGljdCh2b2lkKTtcbl9fZGVjbHNwZWMoZGxsZXhwb3J0KSB2b2lkIHRlc3RsaWJfY29uZmxpY3Qodm9pZClcbntcbiAgY29uZmxpY3QoKTtcbn1cbiIpCi1hZGRfbGlicmFyeSh0ZXN0bGliX2NvbmZsaWN0IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX2NvbmZsaWN0LmMiKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RsaWJfY29uZmxpY3QgUFJJVkFURSBjb25mbGljdCkKLQotZmlsZShXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX25vY29uZmxpY3QuYyIgIl9fZGVjbHNwZWMoZGxsaW1wb3J0KSBleHRlcm4gdm9pZCBsaWJkaXIodm9pZCk7XG5fX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZCB0ZXN0bGliX25vY29uZmxpY3Qodm9pZClcbntcbiAgbGliZGlyKCk7XG59XG4iKQotYWRkX2xpYnJhcnkodGVzdGxpYl9ub2NvbmZsaWN0IFNIQVJFRCAiJHtDTUFLRV9CSU5BUllfRElSfS90ZXN0bGliX25vY29uZmxpY3QuYyIpCi10YXJnZXRfbGlua19saWJyYXJpZXModGVzdGxpYl9ub2NvbmZsaWN0IFBSSVZBVEUgbGliZGlyKQotCi1pbnN0YWxsKFRBUkdFVFMgdGVzdGxpYiBsaWJkaXJfcG9zdGV4Y2x1ZGVkIGxpYmRpciBjb25mbGljdCB0ZXN0bGliX25vY29uZmxpY3QgREVTVElOQVRJT04gYmluKQotaW5zdGFsbChUQVJHRVRTIGxpYmRpciBzZWFyY2hfcG9zdGV4Y2x1ZGVkIHNlYXJjaCBERVNUSU5BVElPTiBiaW4vLnNlYXJjaCkgIyBQcmVmaXhpbmcgd2l0aCAiLiIgZW5zdXJlcyBpdCBpcyB0aGUgZmlyc3QgaXRlbSBhZnRlciBsaXN0KFNPUlQpCi1pbnN0YWxsKFRBUkdFVFMgdGVzdGxpYl9jb25mbGljdCBjb25mbGljdCBERVNUSU5BVElPTiBiaW4vLmNvbmZsaWN0KQotCi1hZGRfZXhlY3V0YWJsZSh0b3BleGUgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy90b3BleGUuYykKLWFkZF9saWJyYXJ5KHRvcGxpYiBTSEFSRUQgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy90b3BsaWIuYykKLWFkZF9saWJyYXJ5KHRvcG1vZCBNT0RVTEUgZmlsZS1HRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMtd2luZG93cy90b3BsaWIuYykKLXRhcmdldF9saW5rX2xpYnJhcmllcyh0b3BleGUgUFJJVkFURSB0ZXN0bGliKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcGxpYiBQUklWQVRFIHRlc3RsaWIpCi10YXJnZXRfbGlua19saWJyYXJpZXModG9wbW9kIFBSSVZBVEUgdGVzdGxpYikKLQotaW5zdGFsbChUQVJHRVRTIHRvcGV4ZSB0b3BsaWIgdG9wbW9kIERFU1RJTkFUSU9OIGJpbikKLQotaW5zdGFsbChDT0RFIFtbCi0gIGZ1bmN0aW9uKGV4ZWNfZ2V0X3J1bnRpbWVfZGVwZW5kZW5jaWVzIGRlcHNmaWxlIHVkZXBzZmlsZSBjZGVwc2ZpbGUpCi0gICAgZmlsZShHRVRfUlVOVElNRV9ERVBFTkRFTkNJRVMKLSAgICAgIFJFU09MVkVEX0RFUEVOREVOQ0lFU19WQVIgZGVwcwotICAgICAgVU5SRVNPTFZFRF9ERVBFTkRFTkNJRVNfVkFSIHVkZXBzCi0gICAgICBDT05GTElDVElOR19ERVBFTkRFTkNJRVNfUFJFRklYIGNkZXBzCi0gICAgICBQUkVfSU5DTFVERV9SRUdFWEVTCi0gICAgICAgICJeKGxpYik/dGVzdGxpYlxcLmRsbCQiCi0gICAgICAgICJeKGxpYik/bGliZGlyX3Bvc3RleGNsdWRlZFxcLmRsbCQiCi0gICAgICAgICJeKGxpYik/bGliZGlyXFwuZGxsJCIKLSAgICAgICAgIl4obGliKT9zZWFyY2hfcG9zdGV4Y2x1ZGVkXFwuZGxsJCIKLSAgICAgICAgIl4obGliKT9zZWFyY2hcXC5kbGwkIgotICAgICAgICAiXihsaWIpP3VucmVzb2x2ZWRcXC5kbGwkIgotICAgICAgICAiXihsaWIpP2NvbmZsaWN0XFwuZGxsJCIKLSAgICAgICAgIl5rZXJuZWwzMlxcLmRsbCQiCi0gICAgICBQUkVfRVhDTFVERV9SRUdFWEVTICIuKiIKLSAgICAgIFBPU1RfSU5DTFVERV9SRUdFWEVTCi0gICAgICAgICJeLiovKGxpYik/dGVzdGxpYlxcLmRsbCQiCi0gICAgICAgICJeLiovKGxpYik/bGliZGlyXFwuZGxsJCIKLSAgICAgICAgIl4uKi8obGliKT9zZWFyY2hcXC5kbGwkIgotICAgICAgICAiXi4qLyhsaWIpP2NvbmZsaWN0XFwuZGxsJCIKLSAgICAgIFBPU1RfRVhDTFVERV9SRUdFWEVTICIuKiIKLSAgICAgIERJUkVDVE9SSUVTCi0gICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLnNlYXJjaCIKLSAgICAgICR7QVJHTn0KLSAgICAgICkKLSAgICBsaXN0KFNPUlQgZGVwcykKLSAgICBsaXN0KFNPUlQgdWRlcHMpCi0gICAgbGlzdChTT1JUIGNkZXBzX0ZJTEVOQU1FUykKLSAgICBmaWxlKFdSSVRFICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7ZGVwc2ZpbGV9IiAiJHtkZXBzfSIpCi0gICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke3VkZXBzZmlsZX0iICIke3VkZXBzfSIpCi0gICAgZmlsZShXUklURSAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vZGVwcy8ke2NkZXBzZmlsZX0iICIiKQotICAgIGZvcmVhY2goY2RlcCBJTiBMSVNUUyBjZGVwc19GSUxFTkFNRVMpCi0gICAgICBzZXQoY2RlcF92YWx1ZXMgJHtjZGVwc18ke2NkZXB9fSkKLSAgICAgIGxpc3QoU09SVCBjZGVwX3ZhbHVlcykKLSAgICAgIGZpbGUoQVBQRU5EICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9kZXBzLyR7Y2RlcHNmaWxlfSIgIiR7Y2RlcH06JHtjZGVwX3ZhbHVlc31cbiIpCi0gICAgZW5kZm9yZWFjaCgpCi0gIGVuZGZ1bmN0aW9uKCkKLQotICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKLSAgICBkZXBzMS50eHQgdWRlcHMxLnR4dCBjZGVwczEudHh0Ci0gICAgRVhFQ1VUQUJMRVMKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vJDxUQVJHRVRfRklMRV9OQU1FOnRvcGV4ZT4iCi0gICAgTElCUkFSSUVTCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9jb25mbGljdD4iCi0gICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vYmluLy5jb25mbGljdC8uLi8kPFRBUkdFVF9GSUxFX05BTUU6dGVzdGxpYl9ub2NvbmZsaWN0PiIKLSAgICApCi0KLSAgZXhlY19nZXRfcnVudGltZV9kZXBlbmRlbmNpZXMoCi0gICAgZGVwczIudHh0IHVkZXBzMi50eHQgY2RlcHMyLnR4dAotICAgIExJQlJBUklFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbGliPiIKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0LyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0Ly4uLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX25vY29uZmxpY3Q+IgotICAgICkKLQotICBleGVjX2dldF9ydW50aW1lX2RlcGVuZGVuY2llcygKLSAgICBkZXBzMy50eHQgdWRlcHMzLnR4dCBjZGVwczMudHh0Ci0gICAgTU9EVUxFUwotICAgICAgIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2Jpbi8kPFRBUkdFVF9GSUxFX05BTUU6dG9wbW9kPiIKLSAgICBMSUJSQVJJRVMKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0LyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX2NvbmZsaWN0PiIKLSAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9iaW4vLmNvbmZsaWN0Ly4uLyQ8VEFSR0VUX0ZJTEVfTkFNRTp0ZXN0bGliX25vY29uZmxpY3Q+IgotICAgICkKLSAgXV0pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmNkM2M3Li4wMDAwMDAwCi0tLSBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCi1wcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKLWluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dsb2JhbC1pbnRlcmZhY2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dsb2JhbC1pbnRlcmZhY2Utc3RkZXJyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNiNDVkOS4uMDAwMDAwMAotLS0gYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nbG9iYWwtaW50ZXJmYWNlLXN0ZGVyci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLUNNYWtlIEVycm9yIGF0IGdsb2JhbC1pbnRlcmZhY2UuY21ha2U6MiBcKGFkZF9saWJyYXJ5XCk6Ci0gIENhbm5vdCBmaW5kIHNvdXJjZSBmaWxlOgotCi0gICAgR0xPQkFMCi0KLSAgVHJpZWQgZXh0ZW5zaW9ucyggXC5bQS1aYS16K10rfAotICkqCi1DYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgotICBDTWFrZUxpc3RzLnR4dDozIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9pbnZhbGlkX25hbWUuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9pbnZhbGlkX25hbWUuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhOTY1YWEuLjAwMDAwMDAKLS0tIGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9uYW1lLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLWFkZF9saWJyYXJ5KGlmJGFjZSBJTlRFUkZBQ0UpCi0KLWFkZF9saWJyYXJ5KGlmYWNlOjp0YXJnZXQgSU5URVJGQUNFKQotCi1hZGRfbGlicmFyeShpZiR0YXJnZXRfaW1wb3J0ZWQgSU5URVJGQUNFIElNUE9SVEVEKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbGlzdC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2xpc3QvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNGIzZGU4NCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbGlzdC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9saXN0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbGlzdC9HRVQtQ01QMDAwNy1XQVJOLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS9saXN0L0dFVC1DTVAwMDA3LVdBUk4tc3RkZXJyLnR4dAppbmRleCBhMGY4ODM3Li45MTAzYmQyIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9saXN0L0dFVC1DTVAwMDA3LVdBUk4tc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9saXN0L0dFVC1DTVAwMDA3LVdBUk4tc3RkZXJyLnR4dApAQCAtMSw0ICsxLDEzIEBACi1eQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IEdFVC1DTVAwMDA3LVdBUk4uY21ha2U6NCBcKGxpc3RcKToKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0IEdFVC1DTVAwMDA3LVdBUk4uY21ha2U6MSBcKGNtYWtlX3BvbGljeVwpOgorICBDb21wYXRpYmlsaXR5IHdpdGggQ01ha2UgPCAyLjguMTIgd2lsbCBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZgorICBDTWFrZS4KKworICBVcGRhdGUgdGhlIFZFUlNJT04gYXJndW1lbnQgPG1pbj4gdmFsdWUgb3IgdXNlIGEgLi4uPG1heD4gc3VmZml4IHRvIHRlbGwKKyAgQ01ha2UgdGhhdCB0aGUgcHJvamVjdCBkb2VzIG5vdCBuZWVkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKKysKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdCBHRVQtQ01QMDAwNy1XQVJOLmNtYWtlOjQgXChsaXN0XCk6CiAgIFBvbGljeSBDTVAwMDA3IGlzIG5vdCBzZXQ6IGxpc3QgY29tbWFuZCBubyBsb25nZXIgaWdub3JlcyBlbXB0eSBlbGVtZW50cy4KICAgUnVuICJjbWFrZSAtLWhlbHAtcG9saWN5IENNUDAwMDciIGZvciBwb2xpY3kgZGV0YWlscy4gIFVzZSB0aGUgY21ha2VfcG9saWN5CiAgIGNvbW1hbmQgdG8gc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4gIExpc3QgaGFzIHZhbHVlID0KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzJmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYpCitwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKK2luY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvTmV3Rm9ybV9Qcm9qZWN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9OZXdGb3JtX1Byb2plY3QuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhNDUwYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvTmV3Rm9ybV9Qcm9qZWN0LmNtYWtlCkBAIC0wLDAgKzEsMTYgQEAKK2xvYWRfY2FjaGUoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9Ly4uL3Rlc3RfcHJvamVjdCBSRUFEX1dJVEhfUFJFRklYIExPQURfQ0FDSEVfVEVTVF8KKyAgQ0FDSEVfU1RSSU5HCisgIENBQ0hFX0JPT0wKKyAgQ0FDSEVfSU5URVJOQUwpCisKK2lmKE5PVCBMT0FEX0NBQ0hFX1RFU1RfQ0FDSEVfU1RSSU5HIFNUUkVRVUFMICJjYWNoZSBzdHJpbmciKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDQUNIRV9TVFJJTkc6IHdhcyAke0NBQ0hFX1NUUklOR30sIGV4cGVjdGVkIFwiY2FjaGUgc3RyaW5nXCIiKQorZW5kaWYoKQorCitpZihOT1QgTE9BRF9DQUNIRV9URVNUX0NBQ0hFX0JPT0wpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNBQ0hFX0JPT0w6IHdhcyBmYWxzZXksIGV4cGVjdGVkIE9OIikKK2VuZGlmKCkKKworaWYoTk9UIExPQURfQ0FDSEVfVEVTVF9DQUNIRV9JTlRFUk5BTCBTVFJFUVVBTCAiY2FjaGUgaW50ZXJuYWwiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDQUNIRV9JTlRFUk5BTDogd2FzICR7Q0FDSEVfSU5URU5SQUx9LCBleHBlY3RlZCBcImNhY2hlIGludGVybmFsXCIiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9OZXdGb3JtX1NjcmlwdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvTmV3Rm9ybV9TY3JpcHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNjZWU5MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvTmV3Rm9ybV9TY3JpcHQuY21ha2UKQEAgLTAsMCArMSwxNiBAQAorbG9hZF9jYWNoZSgke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L3Rlc3RfcHJvamVjdCBSRUFEX1dJVEhfUFJFRklYIExPQURfQ0FDSEVfVEVTVF8KKyAgQ0FDSEVfU1RSSU5HCisgIENBQ0hFX0JPT0wKKyAgQ0FDSEVfSU5URVJOQUwpCisKK2lmKE5PVCBMT0FEX0NBQ0hFX1RFU1RfQ0FDSEVfU1RSSU5HIFNUUkVRVUFMICJjYWNoZSBzdHJpbmciKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDQUNIRV9TVFJJTkc6IHdhcyAke0NBQ0hFX1NUUklOR30sIGV4cGVjdGVkIFwiY2FjaGUgc3RyaW5nXCIiKQorZW5kaWYoKQorCitpZihOT1QgTE9BRF9DQUNIRV9URVNUX0NBQ0hFX0JPT0wpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNBQ0hFX0JPT0w6IHdhcyBmYWxzZXksIGV4cGVjdGVkIE9OIikKK2VuZGlmKCkKKworaWYoTk9UIExPQURfQ0FDSEVfVEVTVF9DQUNIRV9JTlRFUk5BTCBTVFJFUVVBTCAiY2FjaGUgaW50ZXJuYWwiKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDQUNIRV9JTlRFUk5BTDogd2FzICR7Q0FDSEVfSU5URU5SQUx9LCBleHBlY3RlZCBcImNhY2hlIGludGVybmFsXCIiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvYWxpYXNfdGFyZ2V0cy9pbXBvcnRlZC10YXJnZXQtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvT2xkRm9ybV9TY3JpcHQtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2FsaWFzX3RhcmdldHMvaW1wb3J0ZWQtdGFyZ2V0LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL09sZEZvcm1fU2NyaXB0LXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvT2xkRm9ybV9TY3JpcHQtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvT2xkRm9ybV9TY3JpcHQtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWQ1YzgwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9PbGRGb3JtX1NjcmlwdC1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMiBAQAorXkNNYWtlIEVycm9yIGF0LiovVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9PbGRGb3JtX1NjcmlwdC5jbWFrZToxIFwobG9hZF9jYWNoZVwpOgorICBsb2FkX2NhY2hlIE9ubHkgbG9hZF9jYWNoZVwoUkVBRF9XSVRIX1BSRUZJWFwpIG1heSBiZSB1c2VkIGluIHNjcmlwdCBtb2RlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbG9hZF9jYWNoZS9PbGRGb3JtX1NjcmlwdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvT2xkRm9ybV9TY3JpcHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2MGY2MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvT2xkRm9ybV9TY3JpcHQuY21ha2UKQEAgLTAsMCArMSwxMyBAQAorbG9hZF9jYWNoZSgke1J1bkNNYWtlX0JJTkFSWV9ESVJ9L3Rlc3RfcHJvamVjdCBJTkNMVURFX0lOVEVSTkFMUyBDQUNIRV9JTlRFUk5BTCkKKworaWYoTk9UIENBQ0hFX1NUUklORyBTVFJFUVVBTCAiY2FjaGUgc3RyaW5nIikKKyAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ0FDSEVfU1RSSU5HOiB3YXMgJHtDQUNIRV9TVFJJTkd9LCBleHBlY3RlZCBcImNhY2hlIHN0cmluZ1wiIikKK2VuZGlmKCkKKworaWYoTk9UIENBQ0hFX0JPT0wpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNBQ0hFX0JPT0w6IHdhcyBmYWxzZXksIGV4cGVjdGVkIE9OIikKK2VuZGlmKCkKKworaWYoTk9UIENBQ0hFX0lOVEVSTkFMIFNUUkVRVUFMICJjYWNoZSBpbnRlcm5hbCIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNBQ0hFX0lOVEVSTkFMOiB3YXMgJHtDQUNIRV9JTlRFTlJBTH0sIGV4cGVjdGVkIFwiY2FjaGUgaW50ZXJuYWxcIiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL2xvYWRfY2FjaGUvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDU0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9sb2FkX2NhY2hlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMCwwICsxLDEzIEBACitpbmNsdWRlKFJ1bkNNYWtlKQorCitmaWxlKFdSSVRFICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vdGVzdF9wcm9qZWN0L0NNYWtlQ2FjaGUudHh0IFtbCitDQUNIRV9TVFJJTkc6U1RSSU5HPWNhY2hlIHN0cmluZworQ0FDSEVfQk9PTDpCT09MPU9OCitDQUNIRV9JTlRFUk5BTDpJTlRFUk5BTD1jYWNoZSBpbnRlcm5hbAorXV0pCisKK3J1bl9jbWFrZShOZXdGb3JtX1Byb2plY3QpCitydW5fY21ha2VfY29tbWFuZChOZXdGb3JtX1NjcmlwdCAke0NNQUtFX0NPTU1BTkR9IC1EUnVuQ01ha2VfQklOQVJZX0RJUj0ke1J1bkNNYWtlX0JJTkFSWV9ESVJ9CisgIC1QICIke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L05ld0Zvcm1fU2NyaXB0LmNtYWtlIikKK3J1bl9jbWFrZV9jb21tYW5kKE9sZEZvcm1fU2NyaXB0ICR7Q01BS0VfQ09NTUFORH0gLURSdW5DTWFrZV9CSU5BUllfRElSPSR7UnVuQ01ha2VfQklOQVJZX0RJUn0KKyAgLVAgIiR7UnVuQ01ha2VfU09VUkNFX0RJUn0vT2xkRm9ybV9TY3JpcHQuY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWF0aC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21hdGgvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWF0aC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9tYXRoL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA2ODE4MzlkLi4wMzEzZWQxIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtNjUsNiArNjUsMTEgQEAKIGVuZGZvcmVhY2goKQogCiBydW5fY21ha2VfY29tbWFuZCgKKyAgICBtZXNzYWdlLWxvZy1sZXZlbC1vdmVycmlkZQorICAgICR7Q01BS0VfQ09NTUFORH0gLS1sb2ctbGV2ZWw9ZGVidWcgLURDTUFLRV9NRVNTQUdFX0xPR19MRVZFTD1UUkFDRSAtUCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L21lc3NhZ2UtYWxsLWxvZ2xldmVscy5jbWFrZQorICApCisKK3J1bl9jbWFrZV9jb21tYW5kKAogICAgIG1lc3NhZ2UtaW5kZW50CiAgICAgJHtDTUFLRV9DT01NQU5EfSAtUCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L21lc3NhZ2UtaW5kZW50LmNtYWtlCiAgICkKQEAgLTcyLDMgKzc3LDIzIEBACiAgICAgbWVzc2FnZS1pbmRlbnQtbXVsdGlsaW5lCiAgICAgJHtDTUFLRV9DT01NQU5EfSAtUCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L21lc3NhZ2UtaW5kZW50LW11bHRpbGluZS5jbWFrZQogICApCisKK3J1bl9jbWFrZV9jb21tYW5kKAorICAgIG1lc3NhZ2UtY29udGV4dC1jbGkKKyAgICAke0NNQUtFX0NPTU1BTkR9IC0tbG9nLWxldmVsPXRyYWNlIC0tbG9nLWNvbnRleHQgLVAgJHtSdW5DTWFrZV9TT1VSQ0VfRElSfS9tZXNzYWdlLWNvbnRleHQuY21ha2UKKyAgKQorCitydW5fY21ha2VfY29tbWFuZCgKKyAgICBtZXNzYWdlLWNvbnRleHQtY2FjaGUKKyAgICAke0NNQUtFX0NPTU1BTkR9IC1EQ01BS0VfTUVTU0FHRV9MT0dfTEVWRUw9VFJBQ0UgLURDTUFLRV9NRVNTQUdFX0NPTlRFWFRfU0hPVz1PTiAtUCAke1J1bkNNYWtlX1NPVVJDRV9ESVJ9L21lc3NhZ2UtY29udGV4dC5jbWFrZQorICApCisKK3J1bl9jbWFrZV9jb21tYW5kKAorICAgIG1lc3NhZ2UtY29udGV4dC1jbGktd2lucy1jYWNoZQorICAgICR7Q01BS0VfQ09NTUFORH0gLS1sb2ctbGV2ZWw9dmVyYm9zZSAtLWxvZy1jb250ZXh0IC1EQ01BS0VfTUVTU0FHRV9DT05URVhUX1NIT1c9T0ZGIC1QICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vbWVzc2FnZS1jb250ZXh0LmNtYWtlCisgICkKKworcnVuX2NtYWtlX2NvbW1hbmQoCisgICAgbWVzc2FnZS1jaGVja3MKKyAgICAke0NNQUtFX0NPTU1BTkR9IC1QICR7UnVuQ01ha2VfU09VUkNFX0RJUn0vbWVzc2FnZS1jaGVja3MuY21ha2UKKyAgKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNoZWNrcy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNoZWNrcy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYWNkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY2hlY2tzLXN0ZGVyci50eHQKQEAgLTAsMCArMSwzIEBACiteQ01ha2UgV2FybmluZyBcKGRldlwpIGF0LiovVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNoZWNrcy5jbWFrZToxMyBcKG1lc3NhZ2VcKToKKyAgSWdub3JlZCBDSEVDS19GQUlMIHdpdGhvdXQgQ0hFQ0tfU1RBUlQKK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LiQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jaGVja3Mtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jaGVja3Mtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjVmMmVmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNoZWNrcy1zdGRvdXQudHh0CkBAIC0wLDAgKzEsMTAgQEAKKy0tIEZpbmQgYGxpYmZvb2AKKy0tIExvb2tpbmcgZm9yIGBsaWJmb29cLmhgCistLSBMb29raW5nIGZvciBgbGliZm9vXC5oYCAtIGZvdW5kIFxbL3Vzci9pbmNsdWRlXF0KKy0tIExvb2tpbmcgZm9yIGBsaWJmb29cLnNvYAorLS0gTG9va2luZyBmb3IgYGxpYmZvb1wuc29gIC0gZm91bmQgXFsvdXNyL2xpYi9saWJmb29cLnNvXF0KKy0tIEdldHRpbmcgYGxpYmZvb2AgdmVyc2lvbgorLS0gTG9va2luZyBmb3IgYGxpYmZvby92ZXJzaW9uXC5oYAorLS0gTG9va2luZyBmb3IgYGxpYmZvby92ZXJzaW9uXC5oYCAtIGZvdW5kCistLSBHZXR0aW5nIGBsaWJmb29gIHZlcnNpb24gLSAxXC4yXC4zCistLSBGaW5kIGBsaWJmb29gIC0gcmVxdWlyZWQgdmVyc2lvbiA0XC41XC42IGJ1dCBmb3VuZCAxXC4yXC4zCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY2hlY2tzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNoZWNrcy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDU4NDZlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNoZWNrcy5jbWFrZQpAQCAtMCwwICsxLDEzIEBACittZXNzYWdlKENIRUNLX1NUQVJUICJGaW5kIGBsaWJmb29gIikKK21lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkxvb2tpbmcgZm9yIGBsaWJmb28uaGAiKQorbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCBbL3Vzci9pbmNsdWRlXSIpCittZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciBgbGliZm9vLnNvYCIpCittZXNzYWdlKENIRUNLX1BBU1MgImZvdW5kIFsvdXNyL2xpYi9saWJmb28uc29dIikKK21lc3NhZ2UoQ0hFQ0tfU1RBUlQgIkdldHRpbmcgYGxpYmZvb2AgdmVyc2lvbiIpCittZXNzYWdlKENIRUNLX1NUQVJUICJMb29raW5nIGZvciBgbGliZm9vL3ZlcnNpb24uaGAiKQorbWVzc2FnZShDSEVDS19QQVNTICJmb3VuZCIpCittZXNzYWdlKENIRUNLX1BBU1MgIjEuMi4zIikKK21lc3NhZ2UoQ0hFQ0tfRkFJTCAicmVxdWlyZWQgdmVyc2lvbiA0LjUuNiBidXQgZm91bmQgMS4yLjMiKQorCisjIFNob3VsZCBnZW5lcmF0ZSBhbiBlcnJvciwgbm8gYXNzb2NpYXRlZCBDSEVDS19TVEFSVAorbWVzc2FnZShDSEVDS19GQUlMICJ1bm1hdGNoZWQgY2hlY2sgZmFpbCBjYXNlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LWNhY2hlLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY29udGV4dC1jYWNoZS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMThjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY29udGV4dC1jYWNoZS1zdGRvdXQudHh0CkBAIC0wLDAgKzEsOCBAQAorLS0gQmVnaW4gY29udGV4dCBvdXRwdXQgdGVzdAorLS0gXFt0b3BcXSBUb3A6IGJlZm9yZQorLS0gXFt0b3BcLmZvb1wuYmFyXF0gPC0tIGluZGVudCAtLT5iYXIgVkVSQk9TRSBtZXNzYWdlCistLSBcW3RvcFwuZm9vXF0gZm9vIFRSQUNFIG1lc3NhZ2UKKy0tIFxbdG9wXC5mb29cLmJhelxdIFRoaXMgaXMgdGhlIG11bHRpLWxpbmUKK1xbdG9wXC5mb29cLmJhelxdIGJheiBERUJVRyBtZXNzYWdlCistLSBcW3RvcFxdIFRvcDogYWZ0ZXIKKy0tIEVuZCBvZiBjb250ZXh0IG91dHB1dCB0ZXN0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY29udGV4dC1jbGktc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LWNsaS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMThjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtY29udGV4dC1jbGktc3Rkb3V0LnR4dApAQCAtMCwwICsxLDggQEAKKy0tIEJlZ2luIGNvbnRleHQgb3V0cHV0IHRlc3QKKy0tIFxbdG9wXF0gVG9wOiBiZWZvcmUKKy0tIFxbdG9wXC5mb29cLmJhclxdIDwtLSBpbmRlbnQgLS0+YmFyIFZFUkJPU0UgbWVzc2FnZQorLS0gXFt0b3BcLmZvb1xdIGZvbyBUUkFDRSBtZXNzYWdlCistLSBcW3RvcFwuZm9vXC5iYXpcXSBUaGlzIGlzIHRoZSBtdWx0aS1saW5lCitcW3RvcFwuZm9vXC5iYXpcXSBiYXogREVCVUcgbWVzc2FnZQorLS0gXFt0b3BcXSBUb3A6IGFmdGVyCistLSBFbmQgb2YgY29udGV4dCBvdXRwdXQgdGVzdApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNvbnRleHQtY2xpLXdpbnMtY2FjaGUtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LWNsaS13aW5zLWNhY2hlLXN0ZG91dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3ZGI5NwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LWNsaS13aW5zLWNhY2hlLXN0ZG91dC50eHQKQEAgLTAsMCArMSw1IEBACistLSBCZWdpbiBjb250ZXh0IG91dHB1dCB0ZXN0CistLSBcW3RvcFxdIFRvcDogYmVmb3JlCistLSBcW3RvcFwuZm9vXC5iYXJcXSA8LS0gaW5kZW50IC0tPmJhciBWRVJCT1NFIG1lc3NhZ2UKKy0tIFxbdG9wXF0gVG9wOiBhZnRlcgorLS0gRW5kIG9mIGNvbnRleHQgb3V0cHV0IHRlc3QKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWNvbnRleHQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkNGNkOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1jb250ZXh0LmNtYWtlCkBAIC0wLDAgKzEsMjcgQEAKK2Z1bmN0aW9uKGJhcikKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0NPTlRFWFQgImJhciIpCisgICAgbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9JTkRFTlQgIjwtLSBpbmRlbnQgLS0+IikKKyAgICBtZXNzYWdlKFZFUkJPU0UgImJhciBWRVJCT1NFIG1lc3NhZ2UiKQorZW5kZnVuY3Rpb24oKQorCitmdW5jdGlvbihiYXopCisgICAgbGlzdChBUFBFTkQgQ01BS0VfTUVTU0FHRV9DT05URVhUICJiYXoiKQorICAgIG1lc3NhZ2UoREVCVUcgIlRoaXMgaXMgdGhlIG11bHRpLWxpbmVcbmJheiBERUJVRyBtZXNzYWdlIikKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oZm9vKQorICAgIGxpc3QoQVBQRU5EIENNQUtFX01FU1NBR0VfQ09OVEVYVCAiZm9vIikKKyAgICBiYXIoKQorICAgIG1lc3NhZ2UoVFJBQ0UgImZvbyBUUkFDRSBtZXNzYWdlIikKKyAgICBiYXooKQorZW5kZnVuY3Rpb24oKQorCittZXNzYWdlKFNUQVRVUyAiQmVnaW4gY29udGV4dCBvdXRwdXQgdGVzdCIpCitsaXN0KEFQUEVORCBDTUFLRV9NRVNTQUdFX0NPTlRFWFQgInRvcCIpCisKK21lc3NhZ2UoU1RBVFVTICJUb3A6IGJlZm9yZSIpCitmb28oKQorbWVzc2FnZShTVEFUVVMgIlRvcDogYWZ0ZXIiKQorCitsaXN0KFBPUF9CQUNLIENNQUtFX01FU1NBR0VfQ09OVEVYVCkKK21lc3NhZ2UoU1RBVFVTICJFbmQgb2YgY29udGV4dCBvdXRwdXQgdGVzdCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtaW5kZW50LW11bHRpbGluZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1pbmRlbnQtbXVsdGlsaW5lLmNtYWtlCmluZGV4IDBmNzg5YmYuLjM4MTU1NjkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1pbmRlbnQtbXVsdGlsaW5lLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1pbmRlbnQtbXVsdGlsaW5lLmNtYWtlCkBAIC05LDUgKzksNSBAQAogbWVzc2FnZShTVEFUVVMgIiR7bXNnfVxuXG4iKQogbWVzc2FnZShTVEFUVVMgIiR7bXNnfSIpCiAjIFRoaXMgaXMganVzdCB0byBtYWtlIHN1cmUgTk9USUNFIG1lc3NhZ2VzIGFyZSBhbHNvIGdldCBpbmRlbnRlZDoKLSMgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzE5NDE4I25vdGVfNTg4MDExCisjIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzE5NDE4I25vdGVfNTg4MDExCiBtZXNzYWdlKE5PVElDRSAiJHttc2d9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtZGVidWctc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtZGVidWctc3Rkb3V0LnR4dAppbmRleCAxNDUyMTM3Li5mZWVlMTEwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLWRlYnVnLXN0ZG91dC50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1kZWJ1Zy1zdGRvdXQudHh0CkBAIC0xLDMgKzEsMyBAQAogLS0gU1RBVFVTIG1lc3NhZ2UKIC0tIFZFUkJPU0UgbWVzc2FnZQotLS0gREVCVUcgbWVzc2FnZQorLS0gREVCVUcgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtZGVmYXVsdC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1kZWZhdWx0LXN0ZG91dC50eHQKaW5kZXggODA5ZjRjYy4uYjVkNmFjYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1kZWZhdWx0LXN0ZG91dC50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1kZWZhdWx0LXN0ZG91dC50eHQKQEAgLTEgKzEgQEAKLS0tIFNUQVRVUyBtZXNzYWdlCistLSBTVEFUVVMgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtb3ZlcnJpZGUtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtb3ZlcnJpZGUtc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmVjNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1vdmVycmlkZS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMTIgQEAKK15DTWFrZSBEZXByZWNhdGlvbiBXYXJuaW5nIGF0LiovVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWFsbC1sb2dsZXZlbHNcLmNtYWtlOjIgXChtZXNzYWdlXCk6CisgIERlcHJlY2F0aW9uIHdhcm5pbmcKKysKK0NNYWtlIFdhcm5pbmcgXChkZXZcKSBhdC4qL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1hbGwtbG9nbGV2ZWxzXC5jbWFrZTozIFwobWVzc2FnZVwpOgorICBBdXRob3Igd2FybmluZyBtZXNzYWdlCitUaGlzIHdhcm5pbmcgaXMgZm9yIHByb2plY3QgZGV2ZWxvcGVyc1wuICBVc2UgLVduby1kZXYgdG8gc3VwcHJlc3MgaXRcLgorKworQ01ha2UgV2FybmluZyBhdC4qL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1hbGwtbG9nbGV2ZWxzXC5jbWFrZTo0IFwobWVzc2FnZVwpOgorICBXYXJuaW5nIG1lc3NhZ2UKKysKK0RlZmF1bHQgTk9USUNFIG1lc3NhZ2UKK05PVElDRSBtZXNzYWdlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1vdmVycmlkZS1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1vdmVycmlkZS1zdGRvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZWUxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLW92ZXJyaWRlLXN0ZG91dC50eHQKQEAgLTAsMCArMSwzIEBACistLSBTVEFUVVMgbWVzc2FnZQorLS0gVkVSQk9TRSBtZXNzYWdlCistLSBERUJVRyBtZXNzYWdlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1zdGF0dXMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtc3RhdHVzLXN0ZG91dC50eHQKaW5kZXggODA5ZjRjYy4uYjVkNmFjYiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC1zdGF0dXMtc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLXN0YXR1cy1zdGRvdXQudHh0CkBAIC0xICsxIEBACi0tLSBTVEFUVVMgbWVzc2FnZQorLS0gU1RBVFVTIG1lc3NhZ2UkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLXRyYWNlLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLXRyYWNlLXN0ZG91dC50eHQKaW5kZXggMWNmY2U2Zi4uM2QzNmE3ZiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZy1sZXZlbC10cmFjZS1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtdHJhY2Utc3Rkb3V0LnR4dApAQCAtMSw0ICsxLDQgQEAKIC0tIFNUQVRVUyBtZXNzYWdlCiAtLSBWRVJCT1NFIG1lc3NhZ2UKIC0tIERFQlVHIG1lc3NhZ2UKLS0tIFRSQUNFIG1lc3NhZ2UKKy0tIFRSQUNFIG1lc3NhZ2UkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nLWxldmVsLXZlcmJvc2Utc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtdmVyYm9zZS1zdGRvdXQudHh0CmluZGV4IGMxNWQ0M2YuLjQ3YzA4NDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtdmVyYm9zZS1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2ctbGV2ZWwtdmVyYm9zZS1zdGRvdXQudHh0CkBAIC0xLDIgKzEsMiBAQAogLS0gU1RBVFVTIG1lc3NhZ2UKLS0tIFZFUkJPU0UgbWVzc2FnZQorLS0gVkVSQk9TRSBtZXNzYWdlJApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZ2xldmVsLWRlYnVnLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVidWctc3Rkb3V0LnR4dAppbmRleCAxNDUyMTM3Li5mZWVlMTEwIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVidWctc3Rkb3V0LnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVidWctc3Rkb3V0LnR4dApAQCAtMSwzICsxLDMgQEAKIC0tIFNUQVRVUyBtZXNzYWdlCiAtLSBWRVJCT1NFIG1lc3NhZ2UKLS0tIERFQlVHIG1lc3NhZ2UKKy0tIERFQlVHIG1lc3NhZ2UkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVmYXVsdC1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZ2xldmVsLWRlZmF1bHQtc3Rkb3V0LnR4dAppbmRleCA4MDlmNGNjLi5iNWQ2YWNiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtZGVmYXVsdC1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC1kZWZhdWx0LXN0ZG91dC50eHQKQEAgLTEgKzEgQEAKLS0tIFNUQVRVUyBtZXNzYWdlCistLSBTVEFUVVMgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC1zdGF0dXMtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC1zdGF0dXMtc3Rkb3V0LnR4dAppbmRleCA4MDlmNGNjLi5iNWQ2YWNiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtc3RhdHVzLXN0ZG91dC50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZ2xldmVsLXN0YXR1cy1zdGRvdXQudHh0CkBAIC0xICsxIEBACi0tLSBTVEFUVVMgbWVzc2FnZQorLS0gU1RBVFVTIG1lc3NhZ2UkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtdHJhY2Utc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC10cmFjZS1zdGRvdXQudHh0CmluZGV4IDFjZmNlNmYuLjNkMzZhN2YgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC10cmFjZS1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC10cmFjZS1zdGRvdXQudHh0CkBAIC0xLDQgKzEsNCBAQAogLS0gU1RBVFVTIG1lc3NhZ2UKIC0tIFZFUkJPU0UgbWVzc2FnZQogLS0gREVCVUcgbWVzc2FnZQotLS0gVFJBQ0UgbWVzc2FnZQorLS0gVFJBQ0UgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC12ZXJib3NlLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS9tZXNzYWdlL21lc3NhZ2UtbG9nbGV2ZWwtdmVyYm9zZS1zdGRvdXQudHh0CmluZGV4IGMxNWQ0M2YuLjQ3YzA4NDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL21lc3NhZ2UvbWVzc2FnZS1sb2dsZXZlbC12ZXJib3NlLXN0ZG91dC50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvbWVzc2FnZS9tZXNzYWdlLWxvZ2xldmVsLXZlcmJvc2Utc3Rkb3V0LnR4dApAQCAtMSwyICsxLDIgQEAKIC0tIFNUQVRVUyBtZXNzYWdlCi0tLSBWRVJCT1NFIG1lc3NhZ2UKKy0tIFZFUkJPU0UgbWVzc2FnZSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL25vX2luc3RhbGxfcHJlZml4L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2Uvbm9faW5zdGFsbF9wcmVmaXgvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2Uvbm9faW5zdGFsbF9wcmVmaXgvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2Uvbm9faW5zdGFsbF9wcmVmaXgvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9wcm9qZWN0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2UvcHJvamVjdC9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li40YjNkZTg0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9wcm9qZWN0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3Byb2plY3QvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjEyKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9wc2V1ZG9fY3BwY2hlY2suYyBiL1Rlc3RzL1J1bkNNYWtlL3BzZXVkb19jcHBjaGVjay5jCmluZGV4IDViMTUzMWIuLmU4MDYyMGMgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3BzZXVkb19jcHBjaGVjay5jCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3BzZXVkb19jcHBjaGVjay5jCkBAIC0xMSw3ICsxMSw4IEBACiAgICAgICBmcHJpbnRmKHN0ZG91dCwgInN0ZG91dCBmcm9tIGJhZCBjb21tYW5kIGxpbmUgYXJnICctYmFkJ1xuIik7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN0ZGVyciBmcm9tIGJhZCBjb21tYW5kIGxpbmUgYXJnICctYmFkJ1xuIik7CiAgICAgICByZXR1cm4gMTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLWVycm9yIikgPT0gMCkgeworICAgIH0KKyAgICBpZiAoc3RyY21wKGFyZ3ZbaV0sICItZXJyb3IiKSA9PSAwKSB7CiAgICAgICAvLyBUaGUgcmVhbCBjcHBjaGVjayBhbGxvd3MgdG8gc2V0IHRoZSBleGl0Y29kZSB3aXRoIC0tZXJyb3ItZXhpdGNvZGUKICAgICAgIHJlc3VsdCA9IDU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3NldF9wcm9wZXJ0eS9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggOGQ0NjE0Yy4uNjkyYzZiOSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS9zZXRfcHJvcGVydHkvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC05LDYgKzksNyBAQAogcnVuX2NtYWtlKExJTktfRElSRUNUT1JJRVMpCiBydW5fY21ha2UoTElOS19MSUJSQVJJRVMpCiBydW5fY21ha2UoU09VUkNFUykKK3J1bl9jbWFrZShTT1VSQ0VfRklMRSkKIHJ1bl9jbWFrZShUWVBFKQogcnVuX2NtYWtlKFVTRVJfUFJPUCkKIHJ1bl9jbWFrZShVU0VSX1BST1BfSU5IRVJJVEVEKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvd2hpdGVsaXN0LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9zZXRfcHJvcGVydHkvU09VUkNFX0ZJTEUtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3doaXRlbGlzdC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1NPVVJDRV9GSUxFLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3NldF9wcm9wZXJ0eS9TT1VSQ0VfRklMRS1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1NPVVJDRV9GSUxFLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiNmNmNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3NldF9wcm9wZXJ0eS9TT1VSQ0VfRklMRS1zdGRlcnIudHh0CkBAIC0wLDAgKzEsMjIgQEAKK15DTWFrZSBFcnJvciBhdCBTT1VSQ0VfRklMRS5jbWFrZToxIFwoc2V0X3Byb3BlcnR5XCk6CisgIHNldF9wcm9wZXJ0eSBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBubyB2YWx1ZSBwcm92aWRlZCB0bworICB0aGUgRElSRUNUT1JZIG9wdGlvbgorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKQorKworQ01ha2UgRXJyb3IgYXQgU09VUkNFX0ZJTEUuY21ha2U6MiBcKHNldF9wcm9wZXJ0eVwpOgorICBzZXRfcHJvcGVydHkgZ2l2ZW4gbm9uLWV4aXN0ZW50IERJUkVDVE9SWSBub25fZXhpc3RpbmdfZGlyCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCisrCitDTWFrZSBFcnJvciBhdCBTT1VSQ0VfRklMRS5jbWFrZTozIFwoc2V0X3Byb3BlcnR5XCk6CisgIHNldF9wcm9wZXJ0eSBjYWxsZWQgd2l0aCBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBubyB2YWx1ZSBwcm92aWRlZCB0bworICB0aGUgVEFSR0VUX0RJUkVDVE9SWSBvcHRpb24KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHNcLnR4dDpbMC05XSsgXChpbmNsdWRlXCkKKysKK0NNYWtlIEVycm9yIGF0IFNPVVJDRV9GSUxFLmNtYWtlOjQgXChzZXRfcHJvcGVydHlcKToKKyAgc2V0X3Byb3BlcnR5IGdpdmVuIG5vbi1leGlzdGVudCB0YXJnZXQgZm9yIFRBUkdFVF9ESVJFQ1RPUlkKKyAgbm9uX2V4aXN0aW5nX3RhcmdldAorQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OlswLTldKyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3NldF9wcm9wZXJ0eS9TT1VSQ0VfRklMRS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3NldF9wcm9wZXJ0eS9TT1VSQ0VfRklMRS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWQ3OGJkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc2V0X3Byb3BlcnR5L1NPVVJDRV9GSUxFLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorc2V0X3Byb3BlcnR5KFNPVVJDRSBhLnR4dCBESVJFQ1RPUlkgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmIikKK3NldF9wcm9wZXJ0eShTT1VSQ0UgYS50eHQgRElSRUNUT1JZIG5vbl9leGlzdGluZ19kaXIgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmIikKK3NldF9wcm9wZXJ0eShTT1VSQ0UgYS50eHQgVEFSR0VUX0RJUkVDVE9SWSBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TICJkZWYiKQorc2V0X3Byb3BlcnR5KFNPVVJDRSBhLnR4dCBUQVJHRVRfRElSRUNUT1JZIG5vbl9leGlzdGluZ190YXJnZXQgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyAiZGVmIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1YWFhMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXguY21ha2UKQEAgLTAsMCArMSwyMCBAQAorZnVuY3Rpb24oYXNzZXJ0X3N0cmVxdWFsIGlucHV0IGFjdHVhbCBleHBlY3RlZCkKKyAgaWYoTk9UIGV4cGVjdGVkIFNUUkVRVUFMIGFjdHVhbCkKKyAgICBtZXNzYWdlKFNFTkRfRVJST1IgIk91dHB1dCBkaWQgbm90IG1hdGNoIGV4cGVjdGVkXG5JbnB1dCBzdHJpbmc6XG4gICR7aW5wdXR9XG5FeHBlY3RlZDpcbiAgJHtleHBlY3RlZH1cbkFjdHVhbDpcbiAgJHthY3R1YWx9IikKKyAgZW5kaWYoKQorZW5kZnVuY3Rpb24oKQorCitzZXQoX2lucHV0MSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4iKQorc3RyaW5nKEhFWCAiJHtfaW5wdXQxfSIgX3Jlc3VsdDEpCithc3NlcnRfc3RyZXF1YWwoIiR7X2lucHV0MX0iICIke19yZXN1bHQxfSIgIjU0Njg2NTIwNzE3NTY5NjM2YjIwNjI3MjZmNzc2ZTIwNjY2Zjc4MjA2YTc1NmQ3MDczMjA2Zjc2NjU3MjIwNzQ2ODY1MjA2YzYxN2E3OTIwNjQ2ZjY3MmUiKQorCitzZXQoX2lucHV0MiAiSGVsbG8gd29ybGQhIikKK3N0cmluZyhIRVggIiR7X2lucHV0Mn0iIF9yZXN1bHQyKQorYXNzZXJ0X3N0cmVxdWFsKCIke19pbnB1dDJ9IiAiJHtfcmVzdWx0Mn0iICI0ODY1NmM2YzZmMjA3NzZmNzI2YzY0MjEiKQorCitzZXQoX2lucHV0MyAiQXNoIG5hemcgZHVyYmF0dWzDu2tcbkFzaCBuYXpnIGdpbWJhdHVsXG5Bc2ggbmF6ZyB0aHJha2F0dWzDu2tcbkFnaCBidXJ6dW0taXNoaSBrcmltcGF0dWwiKQorc3RyaW5nKEhFWCAiJHtfaW5wdXQzfSIgX3Jlc3VsdDMpCithc3NlcnRfc3RyZXF1YWwoIiR7X2lucHV0M30iICIke19yZXN1bHQzfSIgIjQxNzM2ODIwNmU2MTdhNjcyMDY0NzU3MjYyNjE3NDc1NmNjM2JiNmIwYTQxNzM2ODIwNmU2MTdhNjcyMDY3Njk2ZDYyNjE3NDc1NmMwYTQxNzM2ODIwNmU2MTdhNjcyMDc0Njg3MjYxNmI2MTc0NzU2Y2MzYmI2YjBhNDE2NzY4MjA2Mjc1NzI3YTc1NmQyZDY5NzM2ODY5MjA2YjcyNjk2ZDcwNjE3NDc1NmMiKQorCitzdHJpbmcoSEVYICIiIF9yZXN1bHRfZW1wdHkpCithc3NlcnRfc3RyZXF1YWwoIiIgIiR7X3Jlc3VsdF9lbXB0eX0iICIiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhOb3RFbm91Z2hBcmdzLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9MYW5ndWFnZXMvTElOS19MQU5HVUFHRS1nZW5leC1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleE5vdEVub3VnaEFyZ3MtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleE5vdEVub3VnaEFyZ3Mtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhOb3RFbm91Z2hBcmdzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0Zjc5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhOb3RFbm91Z2hBcmdzLXN0ZGVyci50eHQKQEAgLTAsMCArMSw0IEBACiteQ01ha2UgRXJyb3IgYXQgSGV4Tm90RW5vdWdoQXJnc1wuY21ha2U6WzAtOV0rIFwoc3RyaW5nXCk6CisgIHN0cmluZyBJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cworQ2FsbCBTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgQ01ha2VMaXN0c1wudHh0OjMgXChpbmNsdWRlXCkkCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4Tm90RW5vdWdoQXJncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhOb3RFbm91Z2hBcmdzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDJhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4Tm90RW5vdWdoQXJncy5jbWFrZQpAQCAtMCwwICsxIEBACitzdHJpbmcoSEVYICJIZWxsbyB3b3JsZCEiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvdGFyZ2V0X2NvbW1hbmRzLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvSGV4VG9vTWFueUFyZ3MtcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3RhcmdldF9jb21tYW5kcy1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhUb29NYW55QXJncy1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLXN0ZGVyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiNDBlZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhUb29NYW55QXJncy1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNCBAQAorXkNNYWtlIEVycm9yIGF0IEhleFRvb01hbnlBcmdzXC5jbWFrZTpbMC05XSsgXChzdHJpbmdcKToKKyAgc3RyaW5nIEluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCitDYWxsIFN0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgorICBDTWFrZUxpc3RzXC50eHQ6MyBcKGluY2x1ZGVcKSQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhUb29NYW55QXJncy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9IZXhUb29NYW55QXJncy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTg2Y2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL0hleFRvb01hbnlBcmdzLmNtYWtlCkBAIC0wLDAgKzEgQEAKK3N0cmluZyhIRVggIkhlbGxvIHdvcmxkISIgX291dHB1dCBiYWQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2Uvc3RyaW5nL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCBjNDMyYjRlLi5iYjdjYjE3IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS9zdHJpbmcvUnVuQ01ha2VUZXN0LmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3N0cmluZy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTM3LDMgKzM3LDcgQEAKIHJ1bl9jbWFrZShSZXBlYXQpCiBydW5fY21ha2UoUmVwZWF0Tm9BcmdzKQogcnVuX2NtYWtlKFJlcGVhdE5lZ2F0aXZlQ291bnQpCisKK3J1bl9jbWFrZShIZXgpCitydW5fY21ha2UoSGV4VG9vTWFueUFyZ3MpCitydW5fY21ha2UoSGV4Tm90RW5vdWdoQXJncykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQkVGT1JFX2tleXdvcmQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfY29tcGlsZV9vcHRpb25zL0JFRk9SRV9rZXl3b3JkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTYyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfY29tcGlsZV9vcHRpb25zL0JFRk9SRV9rZXl3b3JkLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorCithZGRfZXhlY3V0YWJsZSAoQ01QMDEwMV9PTEQgQ01QMDEwMS5jKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyAobWFpbiBQUklWQVRFIC1VQkVGT1JFX0tFWVdPUkQpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zIChtYWluIEJFRk9SRSBQUklWQVRFIC1EQkVGT1JFX0tFWVdPUkQpCisKK2FkZF9leGVjdXRhYmxlIChDTVAwMTAxX05FVyBDTVAwMTAxLmMpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zIChtYWluIFBSSVZBVEUgLVVCRUZPUkVfS0VZV09SRCkKK3RhcmdldF9jb21waWxlX29wdGlvbnMgKG1haW4gQkVGT1JFIFBSSVZBVEUgLURCRUZPUkVfS0VZV09SRCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS1CRUZPUkVfa2V5d29yZC1ORVctcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2dlbmV4X2xpbmstcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS1CRUZPUkVfa2V5d29yZC1ORVctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLU9MRC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLU9MRC1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfY29tcGlsZV9vcHRpb25zL0NNUDAxMDEtQkVGT1JFX2tleXdvcmQtT0xELXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS1CRUZPUkVfa2V5d29yZC1PTEQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS1CRUZPUkVfa2V5d29yZC1PTEQtc3Rkb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTBhYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLU9MRC1zdGRvdXQudHh0CkBAIC0wLDAgKzEgQEAKK0JFRk9SRSBub3QgaG9ub3JlZApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLUJFRk9SRV9rZXl3b3JkLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NzQyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfY29tcGlsZV9vcHRpb25zL0NNUDAxMDEtQkVGT1JFX2tleXdvcmQuY21ha2UKQEAgLTAsMCArMSwxNSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworY21ha2VfcG9saWN5IChTRVQgQ01QMDEwMSBPTEQpCisKK2FkZF9leGVjdXRhYmxlIChDTVAwMTAxX09MRCBDTVAwMTAxLmMpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zIChDTVAwMTAxX09MRCBQUklWQVRFIC1VQkVGT1JFX0tFWVdPUkQpCit0YXJnZXRfY29tcGlsZV9vcHRpb25zIChDTVAwMTAxX09MRCBCRUZPUkUgUFJJVkFURSAtREJFRk9SRV9LRVlXT1JEKQorCisKK2NtYWtlX3BvbGljeSAoU0VUIENNUDAxMDEgTkVXKQorCithZGRfZXhlY3V0YWJsZSAoQ01QMDEwMV9ORVcgQ01QMDEwMS5jKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyAoQ01QMDEwMV9ORVcgUFJJVkFURSAtVUJFRk9SRV9LRVlXT1JEKQordGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyAoQ01QMDEwMV9ORVcgQkVGT1JFIFBSSVZBVEUgLURCRUZPUkVfS0VZV09SRCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS5jIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9DTVAwMTAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwODY5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvQ01QMDEwMS5jCkBAIC0wLDAgKzEsOSBAQAorCisjaWYgZGVmaW5lZChCRUZPUkVfS0VZV09SRCkKKyMgIGVycm9yICJCRUZPUkUgbm90IGhvbm9yZWQiCisjZW5kaWYKKworaW50IG1haW4oKQoreworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9jb21waWxlX29wdGlvbnMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKaW5kZXggYjY3YzU5OC4uOWY1MWE5YSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsMyArMSwyMSBAQAogaW5jbHVkZShSdW5DTWFrZSkKIAogcnVuX2NtYWtlKGVtcHR5X2tleXdvcmRfYXJncykKKworaWYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VfENsYW5nIikKKyAgbWFjcm8ocnVuX2NtYWtlX3RhcmdldCB0ZXN0IHN1YnRlc3QgdGFyZ2V0KQorICAgIHNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIgJHtSdW5DTWFrZV9CSU5BUllfRElSfS8ke3Rlc3R9LWJ1aWxkKQorICAgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSAxKQorICAgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgICAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0fS0ke3N1YnRlc3R9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0ICR7dGFyZ2V0fSAke0FSR059KQorCisgICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQorICAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFKQorICAgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4pCisgIGVuZG1hY3JvKCkKKworICBydW5fY21ha2UoQ01QMDEwMS1CRUZPUkVfa2V5d29yZCkKKworICBydW5fY21ha2VfdGFyZ2V0KENNUDAxMDEtQkVGT1JFX2tleXdvcmQgT0xEIENNUDAxMDFfT0xEKQorICBydW5fY21ha2VfdGFyZ2V0KENNUDAxMDEtQkVGT1JFX2tleXdvcmQgTkVXIENNUDAxMDFfTkVXKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1ORVctYmFzaWMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9DTVAwMDk5LU5FVy1iYXNpYy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZmZGRkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1ORVctYmFzaWMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJESVJfSU5URVJGQUNFIikKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuTm90IGZvdW5kIGV4cGVjdGVkICdESVJfSU5URVJGQUNFJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1ORVctYmFzaWMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktTkVXLWJhc2ljLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktTkVXLWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktTkVXLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1ORVcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkZDY4ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktTkVXLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3koU0VUIENNUDAwOTkgTkVXKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTVAwMDk5LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1PTEQtYmFzaWMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9DTVAwMDk5LU9MRC1iYXNpYy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU3M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1PTEQtYmFzaWMtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkRJUl9JTlRFUkZBQ0UiKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG5Gb3VuZCB1bmV4cGVjdGVkICdESVJfSU5URVJGQUNFJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1PTEQtYmFzaWMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktT0xELWJhc2ljLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktT0xELWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktT0xELmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS1PTEQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYTRjNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTktT0xELmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3koU0VUIENNUDAwOTkgT0xEKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTVAwMDk5LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvQ01QMDA5OS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTkuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmMWUzMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL0NNUDAwOTkuY21ha2UKQEAgLTAsMCArMSwxNCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgVFJVRSkKK3NldChDTUFLRV9DX1VTRV9SRVNQT05TRV9GSUxFX0ZPUl9MSUJSQVJJRVMgRkFMU0UpCisKK2FkZF9saWJyYXJ5KExpbmtEaXJzX2ludGVyZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyAoTGlua0RpcnNfaW50ZXJmYWNlIElOVEVSRkFDRSAiL0RJUl9JTlRFUkZBQ0UiKQorCithZGRfbGlicmFyeShMaW5rRGlyc19zdGF0aWMgU1RBVElDIGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rRGlyc19zdGF0aWMgUFJJVkFURSBMaW5rRGlyc19pbnRlcmZhY2UpCisKK2FkZF9leGVjdXRhYmxlKExpbmtEaXJzX2V4ZSBleGUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0RpcnNfZXhlIFBSSVZBVEUgTGlua0RpcnNfc3RhdGljKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IGI2N2M1OTguLjY5OWU4NzEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTEsMyArMSw0NCBAQAogaW5jbHVkZShSdW5DTWFrZSkKIAorbWFjcm8ocnVuX2NtYWtlX3RhcmdldCB0ZXN0IHN1YnRlc3QgdGFyZ2V0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHt0ZXN0fS1idWlsZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0fS0ke3N1YnRlc3R9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0ICR7dGFyZ2V0fSAke0FSR059KQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUikKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTikKK2VuZG1hY3JvKCkKKwogcnVuX2NtYWtlKGVtcHR5X2tleXdvcmRfYXJncykKKworaWYoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIihOaW5qYXxNYWtlZmlsZXMpIiBBTkQKKyAgICBOT1QgUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIihOTWFrZXxCb3JsYW5kKSIpCisgIHNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSBUUlVFKQorICBpZiAoTk9UIFJ1bkNNYWtlX0dFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCisgICAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSkKKyAgZW5kaWYoKQorICBpZiAoUnVuQ01ha2VfR0VORVJBVE9SIE1BVENIRVMgIk5pbmphIikKKyAgICBzZXQoVkVSQk9TRSAtLSAtdikKKyAgZW5kaWYoKQorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdVQUdFKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgaW50ZXJmYWNlIExpbmtEaXJzX2V4ZV9pbnRlcmZhY2UgLS1jb25maWcgUmVsZWFzZSAke1ZFUkJPU0V9KQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgYmFzaWMgTGlua0RpcnNfZXhlX2MgLS1jb25maWcgUmVsZWFzZSAke1ZFUkJPU0V9KQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0UgTElOS0VSX0xBTkdVQUdFIExpbmtEaXJzX2V4ZV9jeHggLS1jb25maWcgUmVsZWFzZSAke1ZFUkJPU0V9KQorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdfQU5EX0lEKQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBpbnRlcmZhY2UgTGlua0RpcnNfZXhlX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlICR7VkVSQk9TRX0pCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBiYXNpYyBMaW5rRGlyc19leGVfYyAtLWNvbmZpZyBSZWxlYXNlICR7VkVSQk9TRX0pCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBMSU5LRVJfTEFOR1VBR0UgTGlua0RpcnNfZXhlX2N4eCAtLWNvbmZpZyBSZWxlYXNlICR7VkVSQk9TRX0pCisKKworICBydW5fY21ha2UoQ01QMDA5OS1ORVcpCisgIHJ1bl9jbWFrZV90YXJnZXQoQ01QMDA5OS1ORVcgYmFzaWMgTGlua0RpcnNfZXhlICR7VkVSQk9TRX0pCisKKyAgcnVuX2NtYWtlKENNUDAwOTktT0xEKQorICBydW5fY21ha2VfdGFyZ2V0KENNUDAwOTktT0xEIGJhc2ljIExpbmtEaXJzX2V4ZSAke1ZFUkJPU0V9KQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9leGUuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2V4ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODhmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9leGUuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBtYWluKHZvaWQpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM5ODEwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtYmFzaWMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhc2ljLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjY0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhc2ljLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYXNpYy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1iYXNpYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxM2RlNgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitzZXQgKFRZUEUgSU5URVJGQUNFKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTg1NjRlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMjAgQEAKKworaWYgKE5PVCBWQUxJRF9MQU5HKQorICBzZXQgKFZBTElEX0xBTkcgQykKK2VuZGlmKCkKK2lmIChOT1QgSU5WQUxJRF9MQU5HKQorICBzZXQgKElOVkFMSURfTEFORyBDWFgpCitlbmRpZigpCitpZiAoTk9UIFRZUEUpCisgIHNldCAoVFlQRSBFWEUpCitlbmRpZigpCisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJESVJfJHtWQUxJRF9MQU5HfV8ke1RZUEV9IikKKyAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTm90IGZvdW5kIGV4cGVjdGVkICdESVJfJHtWQUxJRF9MQU5HfV8ke1RZUEV9Jy4iKQorZW5kaWYoKQoraWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiRElSXyR7SU5WQUxJRF9MQU5HfV8ke1RZUEV9IikKKyAgaWYgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEKQorICAgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJcbiIpCisgIGVuZGlmKCkKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0RJUl8ke0lOVkFMSURfTEFOR31fJHtUWVBFfScuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR1VBR0UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjY2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdVQUdFLmNtYWtlCkBAIC0wLDAgKzEsMjMgQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCitzZXQoQ01BS0VfVkVSQk9TRV9NQUtFRklMRSBUUlVFKQorc2V0KENNQUtFX0NfVVNFX1JFU1BPTlNFX0ZJTEVfRk9SX0xJQlJBUklFUyBGQUxTRSkKK3NldChDTUFLRV9DWFhfVVNFX1JFU1BPTlNFX0ZJTEVfRk9SX0xJQlJBUklFUyBGQUxTRSkKKworYWRkX2xpYnJhcnkoTGlua0RpcnNfaW50ZXJmYWNlIElOVEVSRkFDRSkKK3RhcmdldF9saW5rX2RpcmVjdG9yaWVzIChMaW5rRGlyc19pbnRlcmZhY2UgSU5URVJGQUNFICIkPCQ8TElOS19MQU5HVUFHRTpDPjovRElSX0NfSU5URVJGQUNFPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkPCQ8TElOS19MQU5HVUFHRTpDWFg+Oi9ESVJfQ1hYX0lOVEVSRkFDRT4iKQorCithZGRfZXhlY3V0YWJsZShMaW5rRGlyc19leGVfaW50ZXJmYWNlIGV4ZS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rRGlyc19leGVfaW50ZXJmYWNlIFBSSVZBVEUgTGlua0RpcnNfaW50ZXJmYWNlKQorCithZGRfZXhlY3V0YWJsZShMaW5rRGlyc19leGVfYyBleGUuYykKK3RhcmdldF9saW5rX2RpcmVjdG9yaWVzIChMaW5rRGlyc19leGVfYyBQUklWQVRFICIkPCQ8TElOS19MQU5HVUFHRTpDPjovRElSX0NfRVhFPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkPCQ8TElOS19MQU5HVUFHRTpDWFg+Oi9ESVJfQ1hYX0VYRT4iKQorCithZGRfZXhlY3V0YWJsZShMaW5rRGlyc19leGVfY3h4IGV4ZS5jKQordGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgKExpbmtEaXJzX2V4ZV9jeHggUFJJVkFURSAiJDwkPExJTktfTEFOR1VBR0U6Qz46L0RJUl9DX0VYRT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46L0RJUl9DWFhfRVhFPiIpCitzZXRfcHJvcGVydHkgKFRBUkdFVCBMaW5rRGlyc19leGVfY3h4IFBST1BFUlRZIExJTktFUl9MQU5HVUFHRSBDWFgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtTElOS0VSX0xBTkdVQUdFLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGY4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIENYWCkKK3NldCAoSU5WQUxJRF9MQU5HIEMpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1iYXNpYy1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFzaWMtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkZGVlMQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFzaWMtY2hlY2suY21ha2UKQEAgLTAsMCArMSwyIEBACisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhc2ljLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWJhc2ljLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtYmFzaWMtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWludGVyZmFjZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzI4NzM4Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtY2hlY2suY21ha2UKQEAgLTAsMCArMSw0IEBACisKK3NldCAoVFlQRSBJTlRFUkZBQ0UpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWludGVyZmFjZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NzI5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UKQEAgLTAsMCArMSwyNiBAQAorCitpZiAoTk9UIFZBTElEX0xBTkcpCisgIHNldCAoVkFMSURfTEFORyBDKQorZW5kaWYoKQoraWYgKE5PVCBJTlZBTElEX0xBTkcpCisgIHNldCAoSU5WQUxJRF9MQU5HIENYWCkKK2VuZGlmKCkKK2lmIChOT1QgVFlQRSkKKyAgc2V0IChUWVBFIEVYRSkKK2VuZGlmKCkKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkRJUl8ke1ZBTElEX0xBTkd9XyR7VFlQRX0iKQorICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0RJUl8ke1ZBTElEX0xBTkd9XyR7VFlQRX0nLlxuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkRJUl8ke0lOVkFMSURfTEFOR31fJHtUWVBFfSIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdESVJfJHtJTlZBTElEX0xBTkd9XyR7VFlQRX0gJy4iKQorZW5kaWYoKQoraWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiRElSXygke1ZBTElEX0xBTkd9fCR7SU5WQUxJRF9MQU5HfSlfQkFESURfJHtUWVBFfSIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdESVJfKCR7VkFMSURfTEFOR318JHtJTlZBTElEX0xBTkd9KV9CQURJRF8ke1RZUEV9Jy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzYjM0MgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKQEAgLTAsMCArMSwyOSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK3NldChDTUFLRV9WRVJCT1NFX01BS0VGSUxFIFRSVUUpCitzZXQoQ01BS0VfQ19VU0VfUkVTUE9OU0VfRklMRV9GT1JfTElCUkFSSUVTIEZBTFNFKQorc2V0KENNQUtFX0NYWF9VU0VfUkVTUE9OU0VfRklMRV9GT1JfTElCUkFSSUVTIEZBTFNFKQorCithZGRfbGlicmFyeShMaW5rRGlyc19pbnRlcmZhY2UgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgKExpbmtEaXJzX2ludGVyZmFjZSBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjovRElSX0NfSU5URVJGQUNFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46L0RJUl9DWFhfSU5URVJGQUNFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46L0RJUl9DX0JBRElEX0lOVEVSRkFDRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCxCQURJRD46L0RJUl9DWFhfQkFESURfSU5URVJGQUNFPikKKworYWRkX2V4ZWN1dGFibGUoTGlua0RpcnNfZXhlX2ludGVyZmFjZSBleGUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0RpcnNfZXhlX2ludGVyZmFjZSBQUklWQVRFIExpbmtEaXJzX2ludGVyZmFjZSkKKworYWRkX2V4ZWN1dGFibGUoTGlua0RpcnNfZXhlX2MgZXhlLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rRGlyc19leGVfYyBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46L0RJUl9DX0VYRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46L0RJUl9DWFhfRVhFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEJBRElEPjovRElSX0NfQkFESURfRVhFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQkFESUQ+Oi9ESVJfQ1hYX0JBRElEX0VYRT4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtEaXJzX2V4ZV9jeHggZXhlLmMpCit0YXJnZXRfbGlua19kaXJlY3RvcmllcyAoTGlua0RpcnNfZXhlX2N4eCBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46L0RJUl9DX0VYRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46L0RJUl9DWFhfRVhFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDLEJBRElEPjovRElSX0NfQkFESURfRVhFPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQkFESUQ+Oi9ESVJfQ1hYX0JBRElEX0VYRT4pCitzZXRfcHJvcGVydHkgKFRBUkdFVCBMaW5rRGlyc19leGVfY3h4IFBST1BFUlRZIExJTktFUl9MQU5HVUFHRSBDWFgpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9saWIuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2RpcmVjdG9yaWVzL2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmQyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19kaXJlY3Rvcmllcy9saWIuYwpAQCAtMCwwICsxLDcgQEAKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisgIGludCBmbGFnc19saWIodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvQWxpYXNUYXJnZXRzLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL0FsaWFzVGFyZ2V0cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTZiNzRiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL0FsaWFzVGFyZ2V0cy5jbWFrZQpAQCAtMCwwICsxLDM5IEBACisKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2Li4uMy4xNykKKworZW5hYmxlX2xhbmd1YWdlKEMpCisKK2FkZF9saWJyYXJ5IChmdW5jIFNIQVJFRCBmdW5jLmMpCisKK3NldCAoYmluYXJ5X2RpciAiJHtDTUFLRV9CSU5BUllfRElSfSIpCitnZXRfcHJvcGVydHkgKGlzX211bHRpX2NvbmZpZyBHTE9CQUwgUFJPUEVSVFkgR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKK2lmIChpc19tdWx0aV9jb25maWcpCisgIHN0cmluZyAoQVBQRU5EIGJpbmFyeV9kaXIgIi9SZWxlYXNlIikKK2VuZGlmKCkKKworCithZGRfbGlicmFyeShpbXBvcnQtbG9jYWwgU0hBUkVEIElNUE9SVEVEKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBpbXBvcnQtbG9jYWwgUFJPUEVSVFkgSU1QT1JURURfTE9DQVRJT04gIiR7YmluYXJ5X2Rpcn0vJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9QUkVGSVh9ZnVuYyR7Q01BS0VfU0hBUkVEX0xJQlJBUllfU1VGRklYfSIpCitzZXRfcHJvcGVydHkoVEFSR0VUIGltcG9ydC1sb2NhbCBQUk9QRVJUWSBJTVBPUlRFRF9JTVBMSUIgIiR7YmluYXJ5X2Rpcn0vJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9QUkVGSVh9ZnVuYyR7Q01BS0VfSU1QT1JUX0xJQlJBUllfU1VGRklYfSIpCithZGRfbGlicmFyeShhbGlhczo6bG9jYWwgQUxJQVMgaW1wb3J0LWxvY2FsKQorCithZGRfbGlicmFyeSAobGliLWxvY2FsIFNIQVJFRCBsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAobGliLWxvY2FsIFBSSVZBVEUgYWxpYXM6OmxvY2FsKQorCithZGRfZXhlY3V0YWJsZSAobWFpbi1sb2NhbCBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKG1haW4tbG9jYWwgUFJJVkFURSBhbGlhczo6bG9jYWwpCisKKworYWRkX2xpYnJhcnkoaW1wb3J0LWdsb2JhbCBTSEFSRUQgSU1QT1JURUQgR0xPQkFMKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBpbXBvcnQtZ2xvYmFsIFBST1BFUlRZIElNUE9SVEVEX0xPQ0FUSU9OICIke2JpbmFyeV9kaXJ9LyR7Q01BS0VfU1RBVElDX0xJQlJBUllfUFJFRklYfWZ1bmMke0NNQUtFX1NIQVJFRF9MSUJSQVJZX1NVRkZJWH0iKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBpbXBvcnQtZ2xvYmFsIFBST1BFUlRZIElNUE9SVEVEX0lNUExJQiAiJHtiaW5hcnlfZGlyfS8ke0NNQUtFX1NUQVRJQ19MSUJSQVJZX1BSRUZJWH1mdW5jJHtDTUFLRV9JTVBPUlRfTElCUkFSWV9TVUZGSVh9IikKK2FkZF9saWJyYXJ5KGFsaWFzOjpnbG9iYWwgQUxJQVMgaW1wb3J0LWdsb2JhbCkKKworYWRkX2xpYnJhcnkgKGxpYi1nbG9iYWwgU0hBUkVEIGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChsaWItZ2xvYmFsIFBSSVZBVEUgYWxpYXM6Omdsb2JhbCkKKworYWRkX2V4ZWN1dGFibGUgKG1haW4tZ2xvYmFsIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAobWFpbi1nbG9iYWwgUFJJVkFURSBhbGlhczo6Z2xvYmFsKQorCisKK2FkZF9zdWJkaXJlY3Rvcnkoc3ViX2RpcikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2YwMjBmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKK3Byb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQoraW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlIE5PX1BPTElDWV9TQ09QRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZWM0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC0wLDAgKzEsMjUgQEAKK2luY2x1ZGUoUnVuQ01ha2UpCisKK21hY3JvKHJ1bl9jbWFrZV90YXJnZXQgdGVzdCBzdWJ0ZXN0IHRhcmdldCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUiAke1J1bkNNYWtlX0JJTkFSWV9ESVJ9LyR7dGVzdH0tYnVpbGQpCisgIHNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOIDEpCisgIHJ1bl9jbWFrZV9jb21tYW5kKCR7dGVzdH0tJHtzdWJ0ZXN0fSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLiAtLXRhcmdldCAke3RhcmdldH0gJHtBUkdOfSkKKworICB1bnNldChSdW5DTWFrZV9URVNUX0JJTkFSWV9ESVIpCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4pCitlbmRtYWNybygpCisKK3NldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSBUUlVFKQoraWYgKE5PVCBSdW5DTWFrZV9HRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQorICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlKQorZW5kaWYoKQorcnVuX2NtYWtlKEFsaWFzVGFyZ2V0cykKK3J1bl9jbWFrZV90YXJnZXQoQWxpYXNUYXJnZXRzIGZ1bmMgZnVuYyAtLWNvbmZpZyBSZWxlYXNlKQorcnVuX2NtYWtlX3RhcmdldChBbGlhc1RhcmdldHMgbGliLWxvY2FsIGxpYi1sb2NhbCAtLWNvbmZpZyBSZWxlYXNlKQorcnVuX2NtYWtlX3RhcmdldChBbGlhc1RhcmdldHMgbWFpbi1sb2NhbCBtYWluLWxvY2FsIC0tY29uZmlnIFJlbGVhc2UpCitydW5fY21ha2VfdGFyZ2V0KEFsaWFzVGFyZ2V0cyBsaWItZ2xvYmFsIGxpYi1nbG9iYWwgLS1jb25maWcgUmVsZWFzZSkKK3J1bl9jbWFrZV90YXJnZXQoQWxpYXNUYXJnZXRzIG1haW4tZ2xvYmFsIG1haW4tZ2xvYmFsIC0tY29uZmlnIFJlbGVhc2UpCitydW5fY21ha2VfdGFyZ2V0KEFsaWFzVGFyZ2V0cyBsaWItc3ViIGxpYi1zdWIgLS1jb25maWcgUmVsZWFzZSkKK3J1bl9jbWFrZV90YXJnZXQoQWxpYXNUYXJnZXRzIG1haW4tc3ViIG1haW4tc3ViIC0tY29uZmlnIFJlbGVhc2UpCit1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCit1bnNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9mdW5jLmMgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvZnVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWE5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvZnVuYy5jCkBAIC0wLDAgKzEsNyBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfYygpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvbGliLmMgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkMWI2NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9saWIuYwpAQCAtMCwwICsxLDEwIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCk7CisKK3ZvaWQgbGliKCkKK3sKKyAgZnVuY19jKCk7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvbWFpbi5jIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTA4ZGVhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUFMSUFTL21haW4uYwpAQCAtMCwwICsxLDEyIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCk7CisKK2ludCBtYWluKCkKK3sKKyAgZnVuY19jKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvc3ViX2Rpci9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1BTElBUy9zdWJfZGlyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNmU5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtQUxJQVMvc3ViX2Rpci9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDcgQEAKKworCithZGRfbGlicmFyeSAobGliLXN1YiBTSEFSRUQgLi4vbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGxpYi1zdWIgUFJJVkFURSBhbGlhczo6bG9jYWwpCisKK2FkZF9leGVjdXRhYmxlIChtYWluLXN1YiAuLi9tYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKG1haW4tc3ViIFBSSVZBVEUgYWxpYXM6OmxvY2FsKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2YwMjBmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UgTk9fUE9MSUNZX1NDT1BFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMGU1ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSw0MSBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworbWFjcm8ocnVuX2NtYWtlX3RhcmdldCB0ZXN0IHN1YnRlc3QgdGFyZ2V0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHt0ZXN0fS1idWlsZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0fS0ke3N1YnRlc3R9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0ICR7dGFyZ2V0fSAke0FSR059KQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUikKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTikKK2VuZG1hY3JvKCkKKworcnVuX2NtYWtlKGJhZC11c2FnZSkKKworaWYgKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJNYWtlZmlsZXN8TmluamF8VmlzdWFsIFN0dWRpb3xYY29kZXxXYXRjb20gV01ha2UiKQorCisgIHJ1bl9jbWFrZShiYWQtbWl4LWxhbmcpCisKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIFRSVUUpCisgIGlmIChOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlKQorICBlbmRpZigpCisKKyAgcnVuX2NtYWtlKGdlbmV4KQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggbGliIExpbmtMaWJyYXJpZXNfbGliIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggbGliMiBMaW5rTGlicmFyaWVzX2xpYjIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBsaWIzIExpbmtMaWJyYXJpZXNfbGliMyAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IGV4ZSBMaW5rTGlicmFyaWVzX2V4ZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENfaW1wb3J0IExpbmtMaWJyYXJpZXNfQ19pbXBvcnQgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDWFhfaW1wb3J0IExpbmtMaWJyYXJpZXNfQ1hYX2ltcG9ydCAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENfaW50ZXJmYWNlIExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDWFhfaW50ZXJmYWNlIExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENfaW50ZXJmYWNlMiBMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlMiAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENYWF9pbnRlcmZhY2UyIExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZTIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDX3N0YXRpYyBMaW5rTGlicmFyaWVzX0Nfc3RhdGljIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggQ1hYX3N0YXRpYyBMaW5rTGlicmFyaWVzX0NYWF9zdGF0aWMgLS1jb25maWcgUmVsZWFzZSkKKworICB1bnNldChSdW5DTWFrZV9URVNUX09QVElPTlMpCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFKQorCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9pbnZhbGlkX25hbWUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC1taXgtbGFuZy1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvaW52YWxpZF9uYW1lLXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtbWl4LWxhbmctcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvYmFkLW1peC1sYW5nLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtbWl4LWxhbmctc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWNkYzBjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvYmFkLW1peC1sYW5nLXN0ZGVyci50eHQKQEAgLTAsMCArMSwyIEBACitDTWFrZSBFcnJvcjogRXZhbHVhdGlvbiBvZiBcJDxMSU5LX0xBTkdVQUdFOi4uLj4gb3IgXCQ8TElOS19MQU5EX0FORF9JRDouLi4+IGNoYW5nZXMKK3RoZSBsaW5rZXIgbGFuZ3VhZ2UgZm9yIHRhcmdldCAiTGlua0xpYnJhcmllc19iYWRfbWl4X2xhbmd1YWdlcyIgXChmcm9tICdDJyB0byAnQ1hYJ1wpIHdoaWNoIGlzIGludmFsaWQuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtbWl4LWxhbmcuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtbWl4LWxhbmcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlZmE3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC1taXgtbGFuZy5jbWFrZQpAQCAtMCwwICsxLDggQEAKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShzdGF0aWNfQ1hYIFNUQVRJQyBmdW5jLmN4eCkKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19iYWRfbWl4X2xhbmd1YWdlcyBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfYmFkX21peF9sYW5ndWFnZXMgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzdGF0aWNfQ1hYPikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L3doaXRlbGlzdC1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvYmFkLXVzYWdlLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS93aGl0ZWxpc3QtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC11c2FnZS1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtdXNhZ2Utc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC11c2FnZS1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MWY3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9iYWQtdXNhZ2Utc3RkZXJyLnR4dApAQCAtMCwwICsxLDggQEAKK0NNYWtlIEVycm9yIGF0IGJhZC11c2FnZS5jbWFrZTo0IFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6CisgIEVycm9yIGV2YWx1YXRpbmcgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKyAgICBcJDxMSU5LX0xBTkdVQUdFPgorCisgIFwkPExJTktfTEFOR1VBR0U+IGlzIG5vdCBzdXBwb3J0ZWQgaW4gbGluayBsaWJyYXJpZXMgZXhwcmVzc2lvbi4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNYWtlTGlzdHMudHh0OjMgXChpbmNsdWRlXCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC11c2FnZS5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2JhZC11c2FnZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWNmYjBjCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvYmFkLXVzYWdlLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorZW5hYmxlX2xhbmd1YWdlKEMpCisKK2FkZF9saWJyYXJ5KHNpbXBsZSBTSEFSRUQgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhzaW1wbGUgUFJJVkFURSBsaWIkPExJTktfTEFOR1VBR0U+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2VtcHR5LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2Z1bmMuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTVhOWJmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR1VBR0UvZnVuYy5jCkBAIC0wLDAgKzEsNyBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfYygpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9mdW5jLmN4eCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2Z1bmMuY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMmNhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9mdW5jLmN4eApAQCAtMCwwICsxLDcgQEAKKworI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZW5kaWYKKyAgdm9pZCBmdW5jX2N4eCgpCit7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9nZW5leC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2dlbmV4LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZmU5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9nZW5leC5jbWFrZQpAQCAtMCwwICsxLDcyIEBACisKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjE2Li4uMy4xNykKKworZW5hYmxlX2xhbmd1YWdlKEMpCitlbmFibGVfbGFuZ3VhZ2UoQ1hYKQorCithZGRfbGlicmFyeShzaGFyZWRfQyBTSEFSRUQgZnVuYy5jKQorYWRkX2xpYnJhcnkoc2hhcmVkX0NYWCBTSEFSRUQgZnVuYy5jeHgpCisKKworYWRkX2xpYnJhcnkoc3RhdGljMV9DIFNUQVRJQyBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChzdGF0aWMxX0MgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OnNoYXJlZF9DPikKKworYWRkX2xpYnJhcnkoc3RhdGljMl9DIFNUQVRJQyBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChzdGF0aWMyX0MgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzaGFyZWRfQz4pCisKKworc2V0IChiaW5hcnlfZGlyICIke0NNQUtFX0JJTkFSWV9ESVJ9IikKK2dldF9wcm9wZXJ0eSAoaXNfbXVsdGlfY29uZmlnIEdMT0JBTCBQUk9QRVJUWSBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQoraWYgKGlzX211bHRpX2NvbmZpZykKKyAgc3RyaW5nIChBUFBFTkQgYmluYXJ5X2RpciAiL1JlbGVhc2UiKQorZW5kaWYoKQorYWRkX2xpYnJhcnkoaW1wb3J0IFNUQVRJQyBJTVBPUlRFRCkKK3NldF9wcm9wZXJ0eShUQVJHRVQgaW1wb3J0IFBST1BFUlRZIElNUE9SVEVEX0xPQ0FUSU9OICIke2JpbmFyeV9kaXJ9LyR7Q01BS0VfU1RBVElDX0xJQlJBUllfUFJFRklYfXN0YXRpYzFfQyR7Q01BS0VfU1RBVElDX0xJQlJBUllfU1VGRklYfSIpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGltcG9ydCBJTlRFUkZBQ0UgJDwkPExJTktfTEFOR1VBR0U6Qz46c2hhcmVkX0M+KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChpbXBvcnQgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46c2hhcmVkX0NYWD4pCisKKworYWRkX2xpYnJhcnkoaW50ZXJmYWNlIElOVEVSRkFDRSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoaW50ZXJmYWNlIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzaGFyZWRfQz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OnNoYXJlZF9DWFg+KQorCisKK2FkZF9saWJyYXJ5KGludGVyZmFjZTIgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChpbnRlcmZhY2UyIElOVEVSRkFDRSBpbXBvcnQpCisKKworYWRkX2xpYnJhcnkoc3RhdGljMyBTVEFUSUMgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoc3RhdGljMyBQUklWQVRFIGludGVyZmFjZSkKKworCithZGRfbGlicmFyeShMaW5rTGlicmFyaWVzX2xpYiBTSEFSRUQgbGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfbGliIFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46c2hhcmVkX0M+KQorCithZGRfbGlicmFyeShMaW5rTGlicmFyaWVzX2xpYjIgU0hBUkVEIGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX2xpYjIgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzdGF0aWMxX0M+KQorCithZGRfbGlicmFyeShMaW5rTGlicmFyaWVzX2xpYjMgU0hBUkVEIGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX2xpYjMgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjpzdGF0aWMyX0M+KQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX2V4ZSBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfZXhlIFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46c2hhcmVkX0M+KQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NfaW1wb3J0IG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DX2ltcG9ydCBQUklWQVRFIGltcG9ydCkKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ1hYX2ltcG9ydCBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DWFhfaW1wb3J0IFBSSVZBVEUgaW1wb3J0KQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DX2ludGVyZmFjZSBQUklWQVRFIGludGVyZmFjZSkKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZSBtYWluLmN4eCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DWFhfaW50ZXJmYWNlIFBSSVZBVEUgaW50ZXJmYWNlKQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlMiBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UyIFBSSVZBVEUgaW50ZXJmYWNlMikKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZTIgbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZTIgUFJJVkFURSBpbnRlcmZhY2UyKQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0Nfc3RhdGljIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19DX3N0YXRpYyBQUklWQVRFIHN0YXRpYzMpCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NYWF9zdGF0aWMgbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ1hYX3N0YXRpYyBQUklWQVRFIHN0YXRpYzMpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9saWIuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZDFiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9saWIuYwpAQCAtMCwwICsxLDEwIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCk7CisKK3ZvaWQgbGliKCkKK3sKKyAgZnVuY19jKCk7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9tYWluLmMgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwOGRlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL21haW4uYwpAQCAtMCwwICsxLDEyIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCk7CisKK2ludCBtYWluKCkKK3sKKyAgZnVuY19jKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9tYWluLmN4eCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdVQUdFL21haW4uY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYWEzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HVUFHRS9tYWluLmN4eApAQCAtMCwwICsxLDEyIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jeHgoKTsKKworaW50IG1haW4oKQoreworICBmdW5jX2N4eCgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2YwMjBmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xKQorcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCitpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UgTk9fUE9MSUNZX1NDT1BFKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvUnVuQ01ha2VUZXN0LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvUnVuQ01ha2VUZXN0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTZmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9SdW5DTWFrZVRlc3QuY21ha2UKQEAgLTAsMCArMSwzOCBAQAoraW5jbHVkZShSdW5DTWFrZSkKKworbWFjcm8ocnVuX2NtYWtlX3RhcmdldCB0ZXN0IHN1YnRlc3QgdGFyZ2V0KQorICBzZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSICR7UnVuQ01ha2VfQklOQVJZX0RJUn0vJHt0ZXN0fS1idWlsZCkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfTk9fQ0xFQU4gMSkKKyAgcnVuX2NtYWtlX2NvbW1hbmQoJHt0ZXN0fS0ke3N1YnRlc3R9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuIC0tdGFyZ2V0ICR7dGFyZ2V0fSAke0FSR059KQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfQklOQVJZX0RJUikKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9OT19DTEVBTikKK2VuZG1hY3JvKCkKKworaWYgKFJ1bkNNYWtlX0dFTkVSQVRPUiBNQVRDSEVTICJNYWtlZmlsZXN8TmluamF8VmlzdWFsIFN0dWRpb3xYY29kZXxXYXRjb20gV01ha2UiKQorCisgIHJ1bl9jbWFrZShiYWQtbWl4LWxhbmcpCisKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIFRSVUUpCisgIGlmIChOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlKQorICBlbmRpZigpCisKKyAgcnVuX2NtYWtlKGdlbmV4KQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggbGliIExpbmtMaWJyYXJpZXNfbGliIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXggbGliMiBMaW5rTGlicmFyaWVzX2xpYjIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBsaWIzIExpbmtMaWJyYXJpZXNfbGliMyAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IGV4ZSBMaW5rTGlicmFyaWVzX2V4ZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENfaW1wb3J0IExpbmtMaWJyYXJpZXNfQ19pbXBvcnQgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDWFhfaW1wb3J0IExpbmtMaWJyYXJpZXNfQ1hYX2ltcG9ydCAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENfaW50ZXJmYWNlIExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDWFhfaW50ZXJmYWNlIExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENfaW50ZXJmYWNlMiBMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlMiAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4IENYWF9pbnRlcmZhY2UyIExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZTIgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leCBDWFhfc3RhdGljIExpbmtMaWJyYXJpZXNfQ1hYX3N0YXRpYyAtLWNvbmZpZyBSZWxlYXNlKQorCisgIHVuc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUykKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UpCisKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL2ludGVyZmFjZV9saWJyYXJ5L2ludmFsaWRfbmFtZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvYmFkLW1peC1sYW5nLXJlc3VsdC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9pbnZhbGlkX25hbWUtcmVzdWx0LnR4dApjb3B5IHRvIFRlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2JhZC1taXgtbGFuZy1yZXN1bHQudHh0CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9iYWQtbWl4LWxhbmctc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2JhZC1taXgtbGFuZy1zdGRlcnIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlY2RjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9iYWQtbWl4LWxhbmctc3RkZXJyLnR4dApAQCAtMCwwICsxLDIgQEAKK0NNYWtlIEVycm9yOiBFdmFsdWF0aW9uIG9mIFwkPExJTktfTEFOR1VBR0U6Li4uPiBvciBcJDxMSU5LX0xBTkRfQU5EX0lEOi4uLj4gY2hhbmdlcwordGhlIGxpbmtlciBsYW5ndWFnZSBmb3IgdGFyZ2V0ICJMaW5rTGlicmFyaWVzX2JhZF9taXhfbGFuZ3VhZ2VzIiBcKGZyb20gJ0MnIHRvICdDWFgnXCkgd2hpY2ggaXMgaW52YWxpZC4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2JhZC1taXgtbGFuZy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2JhZC1taXgtbGFuZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODAwMTBhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvYmFkLW1peC1sYW5nLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKK2FkZF9saWJyYXJ5KHN0YXRpY19DWFggU1RBVElDIGZ1bmMuY3h4KQorCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX2JhZF9taXhfbGFuZ3VhZ2VzIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19iYWRfbWl4X2xhbmd1YWdlcyBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46c3RhdGljX0NYWD4pCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9iYXNpYy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvYmFzaWMtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvYmFzaWMtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZW1wdHkuYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2VtcHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2VtcHR5LmMKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2V4ZV9jLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9leGVfYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9leGVfYy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9leGVfY3h4LXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9leGVfY3h4LXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2V4ZV9jeHgtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZnVuYy5jIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZnVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWE5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9mdW5jLmMKQEAgLTAsMCArMSw3IEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2Z1bmMuY3h4IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZnVuYy5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyY2FjYQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2Z1bmMuY3h4CkBAIC0wLDAgKzEsNyBAQAorCisjaWYgZGVmaW5lZChfV0lOMzIpCitfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbmRpZgorICB2b2lkIGZ1bmNfY3h4KCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2dlbmV4LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvZ2VuZXguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlY2NkMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2dlbmV4LmNtYWtlCkBAIC0wLDAgKzEsNzMgQEAKKworY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTYuLi4zLjE3KQorCitlbmFibGVfbGFuZ3VhZ2UoQykKK2VuYWJsZV9sYW5ndWFnZShDWFgpCisKKworYWRkX2xpYnJhcnkoc2hhcmVkX0MgU0hBUkVEIGZ1bmMuYykKK2FkZF9saWJyYXJ5KHNoYXJlZF9DWFggU0hBUkVEIGZ1bmMuY3h4KQorCisKK2FkZF9saWJyYXJ5KHN0YXRpYzFfQyBTVEFUSUMgZW1wdHkuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoc3RhdGljMV9DIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKKworYWRkX2xpYnJhcnkoc3RhdGljMl9DIFNUQVRJQyBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChzdGF0aWMyX0MgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKKworCitzZXQgKGJpbmFyeV9kaXIgIiR7Q01BS0VfQklOQVJZX0RJUn0iKQorZ2V0X3Byb3BlcnR5IChpc19tdWx0aV9jb25maWcgR0xPQkFMIFBST1BFUlRZIEdFTkVSQVRPUl9JU19NVUxUSV9DT05GSUcpCitpZiAoaXNfbXVsdGlfY29uZmlnKQorICBzdHJpbmcgKEFQUEVORCBiaW5hcnlfZGlyICIvUmVsZWFzZSIpCitlbmRpZigpCithZGRfbGlicmFyeShpbXBvcnQgU1RBVElDIElNUE9SVEVEKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBpbXBvcnQgUFJPUEVSVFkgSU1QT1JURURfTE9DQVRJT04gIiR7YmluYXJ5X2Rpcn0vJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9QUkVGSVh9c3RhdGljMV9DJHtDTUFLRV9TVEFUSUNfTElCUkFSWV9TVUZGSVh9IikKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoaW1wb3J0IElOVEVSRkFDRSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoaW1wb3J0IElOVEVSRkFDRSAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsJHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9PjpzaGFyZWRfQ1hYPikKKworCithZGRfbGlicmFyeShpbnRlcmZhY2UgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChpbnRlcmZhY2UgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46c2hhcmVkX0M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46c2hhcmVkX0NYWD4pCisKKworYWRkX2xpYnJhcnkoaW50ZXJmYWNlMiBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKGludGVyZmFjZTIgSU5URVJGQUNFIGltcG9ydCkKKworCithZGRfbGlicmFyeShzdGF0aWMzIFNUQVRJQyBlbXB0eS5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChzdGF0aWMzIFBSSVZBVEUgaW50ZXJmYWNlKQorCisKK2FkZF9saWJyYXJ5KExpbmtMaWJyYXJpZXNfbGliIFNIQVJFRCBsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19saWIgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKKworYWRkX2xpYnJhcnkoTGlua0xpYnJhcmllc19saWIyIFNIQVJFRCBsaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19saWIyIFBSSVZBVEUgJDwkPExJTktfTEFOR19BTkRfSUQ6Qywke0NNQUtFX0NfQ09NUElMRVJfSUR9PjpzdGF0aWMxX0M+KQorCithZGRfbGlicmFyeShMaW5rTGlicmFyaWVzX2xpYjMgU0hBUkVEIGxpYi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX2xpYjMgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnN0YXRpYzJfQz4pCisKK2FkZF9leGVjdXRhYmxlKExpbmtMaWJyYXJpZXNfZXhlIG1haW4uYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua0xpYnJhcmllc19leGUgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OnNoYXJlZF9DPikKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DX2ltcG9ydCBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ19pbXBvcnQgUFJJVkFURSBpbXBvcnQpCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NYWF9pbXBvcnQgbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ1hYX2ltcG9ydCBQUklWQVRFIGltcG9ydCkKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DX2ludGVyZmFjZSBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ19pbnRlcmZhY2UgUFJJVkFURSBpbnRlcmZhY2UpCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UgbWFpbi5jeHgpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ1hYX2ludGVyZmFjZSBQUklWQVRFIGludGVyZmFjZSkKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DX2ludGVyZmFjZTIgbWFpbi5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NfaW50ZXJmYWNlMiBQUklWQVRFIGludGVyZmFjZTIpCithZGRfZXhlY3V0YWJsZShMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UyIG1haW4uY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NYWF9pbnRlcmZhY2UyIFBSSVZBVEUgaW50ZXJmYWNlMikKKworYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DX3N0YXRpYyBtYWluLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtMaWJyYXJpZXNfQ19zdGF0aWMgUFJJVkFURSBzdGF0aWMzKQorYWRkX2V4ZWN1dGFibGUoTGlua0xpYnJhcmllc19DWFhfc3RhdGljIG1haW4uY3h4KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzIChMaW5rTGlicmFyaWVzX0NYWF9zdGF0aWMgUFJJVkFURSBzdGF0aWMzKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvaW50ZXJmYWNlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9pbnRlcmZhY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvaW50ZXJmYWNlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2xpYi5jIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkMWI2NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL2xpYi5jCkBAIC0wLDAgKzEsMTAgQEAKKworI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKyAgdm9pZCBmdW5jX2MoKTsKKwordm9pZCBsaWIoKQoreworICBmdW5jX2MoKTsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL21haW4uYyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTA4ZGVhCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvbWFpbi5jCkBAIC0wLDAgKzEsMTIgQEAKKworI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKyAgdm9pZCBmdW5jX2MoKTsKKworaW50IG1haW4oKQoreworICBmdW5jX2MoKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL21haW4uY3h4IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvbWFpbi5jeHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhYTNiNAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy1MSU5LX0xBTkdfQU5EX0lEL21haW4uY3h4CkBAIC0wLDAgKzEsMTIgQEAKKworI2lmIGRlZmluZWQoX1dJTjMyKQorX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZW5kaWYKKyAgdm9pZCBmdW5jX2N4eCgpOworCitpbnQgbWFpbigpCit7CisgIGZ1bmNfY3h4KCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS9pbnRlcmZhY2VfbGlicmFyeS9nZW5leF9saW5rLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMtTElOS19MQU5HX0FORF9JRC9ub19sYW5ndWFnZS1yZXN1bHQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gVGVzdHMvUnVuQ01ha2UvaW50ZXJmYWNlX2xpYnJhcnkvZ2VuZXhfbGluay1yZXN1bHQudHh0CmNvcHkgdG8gVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzLUxJTktfTEFOR19BTkRfSUQvbm9fbGFuZ3VhZ2UtcmVzdWx0LnR4dApkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwMjMtV0FSTi0yLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwMjMtV0FSTi0yLmNtYWtlCmluZGV4IDJlOWNiYTguLjZjNzI1NDYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDIzLVdBUk4tMi5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDAyMy1XQVJOLTIuY21ha2UKQEAgLTEsNCArMSw0IEBACi0KK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTEpCiBwcm9qZWN0KENNUDAwMjItV0FSTikKIAogYWRkX2xpYnJhcnkoZm9vIFNIQVJFRCBlbXB0eV92czZfMS5jcHApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDAyMy1XQVJOLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwMjMtV0FSTi5jbWFrZQppbmRleCBmY2M4ZGEwLi5kZmRmNzBiIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDAyMy1XQVJOLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDIzLVdBUk4uY21ha2UKQEAgLTEsNCArMSw0IEBACi0KK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTEpCiBwcm9qZWN0KENNUDAwMjItV0FSTikKIAogYWRkX2xpYnJhcnkoZm9vIFNIQVJFRCBlbXB0eV92czZfMS5jcHApCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1ORVctc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU5FVy1zdGRvdXQudHh0CmluZGV4IDg5Y2Q4MDYuLjFjNWNmNDUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU5FVy1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU5FVy1zdGRvdXQudHh0CkBAIC0xICsxIEBACi0tLSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVM9J2Zvbzo6QDxbWHgwLTlBLUZhLWZdKz4nCistLSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVM9Jzo6QFwoW1h4MC05QS1GYS1mXStcKTtcJDxcJDxDT05GSUc6REVCVUc+OlwkPDE6Zm9vO2Zvbz4+O1wkPFwkPE5PVDpcJDxDT05GSUc6REVCVUc+PjpcJDwxOmZvbztmb28+Pjs6OkAnCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1PTEQtc3Rkb3V0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU9MRC1zdGRvdXQudHh0CmluZGV4IGU1NzVlMTYuLjRlYjA2ZDkgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU9MRC1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLU9MRC1zdGRvdXQudHh0CkBAIC0xICsxIEBACi0tLSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVM9J2ZvbycKKy0tIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUz0nXCQ8XCQ8Q09ORklHOkRFQlVHPjpcJDwxOmZvbztmb28+PjtcJDxcJDxOT1Q6XCQ8Q09ORklHOkRFQlVHPj46XCQ8MTpmb287Zm9vPj4nCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1XQVJOLXN0ZGVyci50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1XQVJOLXN0ZGVyci50eHQKaW5kZXggNmRkN2QzMC4uNGMwOWExZiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktaWZhY2UtV0FSTi1zdGRlcnIudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLVdBUk4tc3RkZXJyLnR4dApAQCAtMTAsNyArMTAsMjUgQEAKICAgaXMgbm90IGNyZWF0ZWQgaW4gdGhpcyBkaXJlY3RvcnkuICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mCiAgIENNYWtlLCBsaW5rIGxpYnJhcnkKIAotICAgIGZvbworICAgIFwkPDE6Zm9vO2Zvbz4KKworICB3aWxsIGJlIGxvb2tlZCB1cCBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSB0YXJnZXQgd2FzIGNyZWF0ZWQgcmF0aGVyCisgIHRoYW4gaW4gdGhpcyBjYWxsaW5nIGRpcmVjdG9yeS4KK1RoaXMgd2FybmluZyBpcyBmb3IgcHJvamVjdCBkZXZlbG9wZXJzLiAgVXNlIC1Xbm8tZGV2IHRvIHN1cHByZXNzIGl0LgorKworQ01ha2UgV2FybmluZyBcKGRldlwpIGF0IENNUDAwNzktaWZhY2UvQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwodGFyZ2V0X2xpbmtfbGlicmFyaWVzXCk6CisgIFBvbGljeSBDTVAwMDc5IGlzIG5vdCBzZXQ6IHRhcmdldF9saW5rX2xpYnJhcmllcyBhbGxvd3MgdXNlIHdpdGggdGFyZ2V0cyBpbgorICBvdGhlciBkaXJlY3Rvcmllcy4gIFJ1biAiY21ha2UgLS1oZWxwLXBvbGljeSBDTVAwMDc5IiBmb3IgcG9saWN5IGRldGFpbHMuCisgIFVzZSB0aGUgY21ha2VfcG9saWN5IGNvbW1hbmQgdG8gc2V0IHRoZSBwb2xpY3kgYW5kIHN1cHByZXNzIHRoaXMgd2FybmluZy4KKworICBUYXJnZXQKKworICAgIHRvcAorCisgIGlzIG5vdCBjcmVhdGVkIGluIHRoaXMgZGlyZWN0b3J5LiAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZgorICBDTWFrZSwgbGluayBsaWJyYXJ5CisKKyAgICBcJDwxOmZvbztmb28+CiAKICAgd2lsbCBiZSBsb29rZWQgdXAgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgdGFyZ2V0IHdhcyBjcmVhdGVkIHJhdGhlcgogICB0aGFuIGluIHRoaXMgY2FsbGluZyBkaXJlY3RvcnkuCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1XQVJOLXN0ZG91dC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS1XQVJOLXN0ZG91dC50eHQKaW5kZXggZTU3NWUxNi4uNGViMDZkOSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktaWZhY2UtV0FSTi1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWlmYWNlLVdBUk4tc3Rkb3V0LnR4dApAQCAtMSArMSBAQAotLS0gSU5URVJGQUNFX0xJTktfTElCUkFSSUVTPSdmb28nCistLSBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVM9J1wkPFwkPENPTkZJRzpERUJVRz46XCQ8MTpmb287Zm9vPj47XCQ8XCQ8Tk9UOlwkPENPTkZJRzpERUJVRz4+OlwkPDE6Zm9vO2Zvbz4+JwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktaWZhY2UvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS9DTWFrZUxpc3RzLnR4dAppbmRleCA0YjE1YjMyLi5lNDEwNjA3IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1pZmFjZS9DTWFrZUxpc3RzLnR4dApAQCAtMSArMSBAQAotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcCBJTlRFUkZBQ0UgZm9vKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRvcCBJTlRFUkZBQ0UgZGVidWcgIiQ8MTpmb287Zm9vPiIgb3B0aW1pemVkICIkPDE6Zm9vO2Zvbz4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktbGluay1ORVctYm9ndXMtc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLWJvZ3VzLXN0ZGVyci50eHQKaW5kZXggOGVmMzVjMS4uOWUzOGJlYyAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktbGluay1ORVctYm9ndXMtc3RkZXJyLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1saW5rLU5FVy1ib2d1cy1zdGRlcnIudHh0CkBAIC0xLDUgKzEsNSBAQAogXkNNYWtlIEVycm9yIGF0IENNUDAwNzktbGluay1ORVctYm9ndXMuY21ha2U6WzAtOV0rIFwoYWRkX2V4ZWN1dGFibGVcKToKLSAgVGFyZ2V0ICJ0b3AiIGxpbmtzIHRvIHRhcmdldCAiZm9vOjpAPDB4ZGVhZGJlZWY+IiBidXQgdGhlIHRhcmdldCB3YXMgbm90CisgIFRhcmdldCAidG9wIiBsaW5rcyB0byB0YXJnZXQgIjo6QFwoMHhkZWFkYmVlZlwpIiBidXQgdGhlIHRhcmdldCB3YXMgbm90CiAgIGZvdW5kLiAgUGVyaGFwcyBhIGZpbmRfcGFja2FnZVwoXCkgY2FsbCBpcyBtaXNzaW5nIGZvciBhbiBJTVBPUlRFRCB0YXJnZXQsIG9yCiAgIGFuIEFMSUFTIHRhcmdldCBpcyBtaXNzaW5nXD8KIENhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1saW5rLU5FVy1ib2d1cy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLWJvZ3VzLmNtYWtlCmluZGV4IDg2MjJmMTQuLjg5MzI1MjEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLWJvZ3VzLmNtYWtlCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLWJvZ3VzLmNtYWtlCkBAIC0zLDQgKzMsNCBAQAogZW5hYmxlX2xhbmd1YWdlKEMpCiAKIGFkZF9leGVjdXRhYmxlKHRvcCBlbXB0eS5jKQotc2V0X3Byb3BlcnR5KFRBUkdFVCB0b3AgQVBQRU5EIFBST1BFUlRZIExJTktfTElCUkFSSUVTICJmb286OkA8MHhkZWFkYmVlZj4iKQorc2V0X3Byb3BlcnR5KFRBUkdFVCB0b3AgQVBQRU5EIFBST1BFUlRZIExJTktfTElCUkFSSUVTICI6OkAoMHhkZWFkYmVlZik7Zm9vOzo6QCIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1saW5rLU5FVy1zdGRvdXQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAwNzktbGluay1ORVctc3Rkb3V0LnR4dAppbmRleCA4NGIzMGJkLi5mYTVkNGEzIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDA3OS1saW5rLU5FVy1zdGRvdXQudHh0CisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMDc5LWxpbmstTkVXLXN0ZG91dC50eHQKQEAgLTEgKzEgQEAKLS0tIExJTktfTElCUkFSSUVTPSdmb286OkA8W1h4MC05QS1GYS1mXSs+JworLS0gTElOS19MSUJSQVJJRVM9Jzo6QFwoW1h4MC05QS1GYS1mXStcKTtmb287OjpAJwpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvTGFuZ3VhZ2VzL0xJTktfTEFOR1VBR0UtZ2VuZXgtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMTA4LU5FVy1zZWxmLWxpbmstcmVzdWx0LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRlc3RzL1J1bkNNYWtlL0xhbmd1YWdlcy9MSU5LX0xBTkdVQUdFLWdlbmV4LXJlc3VsdC50eHQKY29weSB0byBUZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDEwOC1ORVctc2VsZi1saW5rLXJlc3VsdC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMTA4LU5FVy1zZWxmLWxpbmstc3RkZXJyLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMTA4LU5FVy1zZWxmLWxpbmstc3RkZXJyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzg5ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtTkVXLXNlbGYtbGluay1zdGRlcnIudHh0CkBAIC0wLDAgKzEsNSBAQAorQ01ha2UgRXJyb3IgYXQgQ01QMDEwOC1zZWxmLWxpbmsuY21ha2U6WzAtOV0rIFwoYWRkX2xpYnJhcnlcKToKKyAgVGFyZ2V0ICJmb28iIGxpbmtzIHRvIGl0c2VsZi4KK0NhbGwgU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CisgIENNUDAxMDgtTkVXLXNlbGYtbGluay5jbWFrZTpbMC05XSsgXChpbmNsdWRlXCkKKyAgQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoaW5jbHVkZVwpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01QMDEwOC1ORVctc2VsZi1saW5rLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtTkVXLXNlbGYtbGluay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWU5NjIxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtTkVXLXNlbGYtbGluay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworY21ha2VfcG9saWN5IChTRVQgQ01QMDEwOCBORVcpCisKK2luY2x1ZGUgKENNUDAxMDgtc2VsZi1saW5rLmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtT0xELXNlbGYtbGluay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMTA4LU9MRC1zZWxmLWxpbmsuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEzMTA0YQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMTA4LU9MRC1zZWxmLWxpbmsuY21ha2UKQEAgLTAsMCArMSw0IEBACisKK2NtYWtlX3BvbGljeSAoU0VUIENNUDAxMDggT0xEKQorCitpbmNsdWRlIChDTVAwMTA4LXNlbGYtbGluay5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMTA4LXNlbGYtbGluay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTVAwMTA4LXNlbGYtbGluay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2EzNDkwCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNUDAxMDgtc2VsZi1saW5rLmNtYWtlCkBAIC0wLDAgKzEsOSBAQAorCitjbWFrZV9wb2xpY3kgKFNFVCBDTVAwMDM4IE5FVykKK2NtYWtlX3BvbGljeSAoU0VUIENNUDAwNDIgTkVXKQorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworYWRkX2xpYnJhcnkoZm9vIFNIQVJFRCBsaWIuYykKK2FkZF9saWJyYXJ5KEJhcjo6Zm9vIEFMSUFTIGZvbykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhmb28gUFJJVkFURSBCYXI6OmZvbykKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9DTWFrZUxpc3RzLnR4dAppbmRleCA4Zjg1ZmJmLi42Njc1NjFlIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC40KQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4xMikKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBOT05FKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlIE5PX1BPTElDWV9TQ09QRSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvUnVuQ01ha2VUZXN0LmNtYWtlCmluZGV4IDhlZWQ5ODYuLjE4OTU5MmQgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMTksNiArMTksOCBAQAogcnVuX2NtYWtlKENNUDAwNzktbGluay1PTEQpCiBydW5fY21ha2UoQ01QMDA3OS1saW5rLU5FVykKIHJ1bl9jbWFrZShDTVAwMDc5LWxpbmstTkVXLWJvZ3VzKQorcnVuX2NtYWtlKENNUDAxMDgtT0xELXNlbGYtbGluaykKK3J1bl9jbWFrZShDTVAwMTA4LU5FVy1zZWxmLWxpbmspCiBydW5fY21ha2UoSW1wb3J0ZWRUYXJnZXQpCiBydW5fY21ha2UoSW1wb3J0ZWRUYXJnZXRGYWlsdXJlKQogcnVuX2NtYWtlKE1peGVkU2lnbmF0dXJlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1N0YXRpY1ByaXZhdGVEZXBOb3RFeHBvcnRlZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9TdGF0aWNQcml2YXRlRGVwTm90RXhwb3J0ZWQuY21ha2UKaW5kZXggOWI5NzkxOC4uOWY4NmIxOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1N0YXRpY1ByaXZhdGVEZXBOb3RFeHBvcnRlZC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvU3RhdGljUHJpdmF0ZURlcE5vdEV4cG9ydGVkLmNtYWtlCkBAIC0xLDQgKzEsMyBAQAotY21ha2VfcG9saWN5KFNFVCBDTVAwMDIyIE5FVykKIGVuYWJsZV9sYW5ndWFnZShDKQogYWRkX2xpYnJhcnkoZm9vIFNUQVRJQyBlbXB0eS5jKQogYWRkX2xpYnJhcnkobm90X2V4cG9ydGVkIFNUQVRJQyBlbXB0eS5jKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfbGlicmFyaWVzL1N0YXRpY1ByaXZhdGVEZXBOb3RUYXJnZXQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvU3RhdGljUHJpdmF0ZURlcE5vdFRhcmdldC5jbWFrZQppbmRleCA3MTIyYWU5Li4yMGVjNDM4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvU3RhdGljUHJpdmF0ZURlcE5vdFRhcmdldC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvU3RhdGljUHJpdmF0ZURlcE5vdFRhcmdldC5jbWFrZQpAQCAtMSw0ICsxLDMgQEAKLWNtYWtlX3BvbGljeShTRVQgQ01QMDAyMiBORVcpCiBlbmFibGVfbGFuZ3VhZ2UoQykKIGFkZF9saWJyYXJ5KGZvbyBTVEFUSUMgZW1wdHkuYykKIHRhcmdldF9saW5rX2xpYnJhcmllcyhmb28gUFJJVkFURSBub3RfYV90YXJnZXQpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvbGliLmMgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19saWJyYXJpZXMvbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkMWI2NgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX2xpYnJhcmllcy9saWIuYwpAQCAtMCwwICsxLDEwIEBACisKKyNpZiBkZWZpbmVkKF9XSU4zMikKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmCisgIHZvaWQgZnVuY19jKCk7CisKK3ZvaWQgbGliKCkKK3sKKyAgZnVuY19jKCk7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktTkVXLWJhc2ljLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU5FVy1iYXNpYy1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTViYzM3Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU5FVy1iYXNpYy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfSU5URVJGQUNFIikKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuTm90IGZvdW5kIGV4cGVjdGVkICdCQURGTEFHX0lOVEVSRkFDRScuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1ORVctYmFzaWMtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1ORVctYmFzaWMtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU5FVy1iYXNpYy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktTkVXLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU5FVy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2RkNjhlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU5FVy5jbWFrZQpAQCAtMCwwICsxLDQgQEAKKworY21ha2VfcG9saWN5KFNFVCBDTVAwMDk5IE5FVykKKworaW5jbHVkZSgke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ01QMDA5OS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1PTEQtYmFzaWMtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktT0xELWJhc2ljLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTU5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktT0xELWJhc2ljLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHX0lOVEVSRkFDRSIpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJcbkZvdW5kIHVuZXhwZWN0ZWQgJ0JBREZMQUdfSU5URVJGQUNFJy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU9MRC1iYXNpYy1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LU9MRC1iYXNpYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktT0xELWJhc2ljLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvQ01QMDA5OS1PTEQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktT0xELmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5M2E0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTktT0xELmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitjbWFrZV9wb2xpY3koU0VUIENNUDAwOTkgT0xEKQorCitpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTVAwMDk5LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9DTVAwMDk5LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYjQ1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0NNUDAwOTkuY21ha2UKQEAgLTAsMCArMSwxOSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0KG9iaiAiJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059IikKK2lmKEJPUkxBTkQpCisgIHNldChwcmUgLSkKK2VuZGlmKCkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfaW50ZXJmYWNlIElOVEVSRkFDRSkKK3RhcmdldF9saW5rX29wdGlvbnMgKExpbmtPcHRpb25zX2ludGVyZmFjZSBJTlRFUkZBQ0UgJHtwcmV9QkFERkxBR19JTlRFUkZBQ0Uke29ian0pCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3N0YXRpYzEgU1RBVElDIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtPcHRpb25zX3N0YXRpYzEgUFJJVkFURSBMaW5rT3B0aW9uc19pbnRlcmZhY2UpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3N0YXRpYzIgU1RBVElDIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtPcHRpb25zX3N0YXRpYzIgUFJJVkFURSBMaW5rT3B0aW9uc19zdGF0aWMxKQorCithZGRfZXhlY3V0YWJsZShMaW5rT3B0aW9uc19leGUgTGlua09wdGlvbnNFeGUuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua09wdGlvbnNfZXhlIFBSSVZBVEUgTGlua09wdGlvbnNfc3RhdGljMikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvTElOS0VSX2V4cGFuc2lvbi5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvTElOS0VSX2V4cGFuc2lvbi5jbWFrZQppbmRleCBiMzQ0ODY3Li5mODZkMTlmIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0xJTktFUl9leHBhbnNpb24uY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9MSU5LRVJfZXhwYW5zaW9uLmNtYWtlCkBAIC0xLDYgKzEsMTMgQEAKIAogZW5hYmxlX2xhbmd1YWdlKEMpCiAKK3NldChjZmdfZGlyKQorZ2V0X3Byb3BlcnR5KF9pc011bHRpQ29uZmlnIEdMT0JBTCBQUk9QRVJUWSBHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHKQoraWYoX2lzTXVsdGlDb25maWcpCisgIHNldChjZmdfZGlyIC9EZWJ1ZykKK2VuZGlmKCkKK3NldChEVU1QX0VYRSAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9JHtjZmdfZGlyfS9kdW1wJHtDTUFLRV9FWEVDVVRBQkxFX1NVRkZJWH0iKQorCiBhZGRfZXhlY3V0YWJsZShkdW1wIGR1bXAuYykKIAogIyBlbnN1cmUgbm8gdGVtcCBmaWxlIHdpbGwgYmUgdXNlZApAQCAtMTMsNyArMjAsNyBAQAogdGFyZ2V0X2xpbmtfb3B0aW9ucyhsaW5rZXIgUFJJVkFURSAiTElOS0VSOi1mb28sYmFyIikKIAogIyB1c2UgTEFVTkNIIGZhY2lsaXR5IHRvIGR1bXAgbGlua2VyIGNvbW1hbmQKLXNldF9wcm9wZXJ0eShUQVJHRVQgbGlua2VyIFBST1BFUlRZIFJVTEVfTEFVTkNIX0xJTksgIlwiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2R1bXAke0NNQUtFX0VYRUNVVEFCTEVfU1VGRklYfVwiIikKK3NldF9wcm9wZXJ0eShUQVJHRVQgbGlua2VyIFBST1BFUlRZIFJVTEVfTEFVTkNIX0xJTksgIlwiJHtEVU1QX0VYRX1cIiIpCiAKIGFkZF9kZXBlbmRlbmNpZXMgKGxpbmtlciBkdW1wKQogCkBAIC0yMyw3ICszMCw3IEBACiB0YXJnZXRfbGlua19vcHRpb25zKGxpbmtlcl9zaGVsbCBQUklWQVRFICJMSU5LRVI6U0hFTEw6LWZvbyBiYXIiKQogCiAjIHVzZSBMQVVOQ0ggZmFjaWxpdHkgdG8gZHVtcCBsaW5rZXIgY29tbWFuZAotc2V0X3Byb3BlcnR5KFRBUkdFVCBsaW5rZXJfc2hlbGwgUFJPUEVSVFkgUlVMRV9MQVVOQ0hfTElOSyAiXCIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZHVtcCR7Q01BS0VfRVhFQ1VUQUJMRV9TVUZGSVh9XCIiKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBsaW5rZXJfc2hlbGwgUFJPUEVSVFkgUlVMRV9MQVVOQ0hfTElOSyAiXCIke0RVTVBfRVhFfVwiIikKIAogYWRkX2RlcGVuZGVuY2llcyAobGlua2VyX3NoZWxsIGR1bXApCiAKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvTGlua09wdGlvbnNEZXZpY2UuY3UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0xpbmtPcHRpb25zRGV2aWNlLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NTA0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL0xpbmtPcHRpb25zRGV2aWNlLmN1CkBAIC0wLDAgKzEsMTQgQEAKKyNpbmNsdWRlIDxjdWRhLmg+CisKKyNpZmRlZiBfV0lOMzIKK19fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2VuZGlmCisgIGludCBzaW1wbGVsaWIoKQoreworICByZXR1cm4gMDsKK30KKworaW50IG1haW4odm9pZCkKK3sKKyAgcmV0dXJuIHNpbXBsZWxpYigpOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9SdW5DTWFrZVRlc3QuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCAxZDllZjhiLi44ZWYxM2Y5IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL1J1bkNNYWtlVGVzdC5jbWFrZQpAQCAtMTMsOCArMTMsOSBAQAogaWYgKE5PVCBDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJJbnRlbCIpCiAgICMgSW50ZWwgY29tcGlsZXIgZG9lcyBub3QgcmVqZWN0IGJhZCBmbGFncyBvciBvYmplY3RzIQogICBzZXQoUnVuQ01ha2VfVEVTVF9PVVRQVVRfTUVSR0UgVFJVRSkKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNYWtlX1RFU1RfQ1VEQT0ke0NNYWtlX1RFU1RfQ1VEQX0pCiAgIGlmIChOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKLSAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlKQorICAgIGxpc3QoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfT1BUSU9OUyAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSkKICAgZW5kaWYoKQogCiAgIHJ1bl9jbWFrZShMSU5LX09QVElPTlMpCkBAIC0yNyw2ICsyOCwzOSBAQAogICBydW5fY21ha2VfdGFyZ2V0KExJTktfT1BUSU9OUyBtb2QgTGlua09wdGlvbnNfbW9kIC0tY29uZmlnIFJlbGVhc2UpCiAgIHJ1bl9jbWFrZV90YXJnZXQoTElOS19PUFRJT05TIGV4ZSBMaW5rT3B0aW9uc19leGUgLS1jb25maWcgUmVsZWFzZSkKIAorCisgIHJ1bl9jbWFrZShnZW5leF9MSU5LX0xBTkdVQUdFKQorCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBpbnRlcmZhY2UgTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR1VBR0Ugc2hhcmVkX2MgTGlua09wdGlvbnNfc2hhcmVkX2MgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdVQUdFIExJTktFUl9MQU5HVUFHRSBMaW5rT3B0aW9uc19zaGFyZWRfY3h4IC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBtb2QgTGlua09wdGlvbnNfbW9kIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HVUFHRSBleGUgTGlua09wdGlvbnNfZXhlIC0tY29uZmlnIFJlbGVhc2UpCisKKyAgcnVuX2NtYWtlKGdlbmV4X0xJTktfTEFOR19BTkRfSUQpCisKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIGludGVyZmFjZSBMaW5rT3B0aW9uc19zaGFyZWRfaW50ZXJmYWNlIC0tY29uZmlnIFJlbGVhc2UpCisgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfTElOS19MQU5HX0FORF9JRCBzaGFyZWRfYyBMaW5rT3B0aW9uc19zaGFyZWRfYyAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0xJTktfTEFOR19BTkRfSUQgTElOS0VSX0xBTkdVQUdFIExpbmtPcHRpb25zX3NoYXJlZF9jeHggLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIG1vZCBMaW5rT3B0aW9uc19tb2QgLS1jb25maWcgUmVsZWFzZSkKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9MSU5LX0xBTkdfQU5EX0lEIGV4ZSBMaW5rT3B0aW9uc19leGUgLS1jb25maWcgUmVsZWFzZSkKKworICBydW5fY21ha2UoZ2VuZXhfREVWSUNFX0xJTkspCisKKyAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9ERVZJQ0VfTElOSyBpbnRlcmZhY2UgTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSAtLWNvbmZpZyBSZWxlYXNlKQorICBydW5fY21ha2VfdGFyZ2V0KGdlbmV4X0RFVklDRV9MSU5LIHByaXZhdGUgTGlua09wdGlvbnNfcHJpdmF0ZSAtLWNvbmZpZyBSZWxlYXNlKQorICBpZiAoQ01ha2VfVEVTVF9DVURBKQorICAgICMgU2VwYXJhYmxlIGNvbXBpbGF0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIE5WQ0MuCisgICAgaWYoTk9UIENNYWtlX1RFU1RfQ1VEQSBTVFJFUVVBTCAiQ2xhbmciKQorICAgICAgcnVuX2NtYWtlX3RhcmdldChnZW5leF9ERVZJQ0VfTElOSyBDTVAwMTA1X1VOU0VUIExpbmtPcHRpb25zX0NNUDAxMDVfVU5TRVQgLS1jb25maWcgUmVsZWFzZSkKKyAgICAgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfREVWSUNFX0xJTksgQ01QMDEwNV9PTEQgTGlua09wdGlvbnNfQ01QMDEwNV9PTEQgLS1jb25maWcgUmVsZWFzZSkKKyAgICAgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfREVWSUNFX0xJTksgQ01QMDEwNV9ORVcgTGlua09wdGlvbnNfQ01QMDEwNV9ORVcgLS1jb25maWcgUmVsZWFzZSkKKyAgICAgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfREVWSUNFX0xJTksgZGV2aWNlIExpbmtPcHRpb25zX2RldmljZSAtLWNvbmZpZyBSZWxlYXNlKQorICAgIGVuZGlmKCkKKworICAgIHJ1bl9jbWFrZV90YXJnZXQoZ2VuZXhfREVWSUNFX0xJTksgbm9fZGV2aWNlIExpbmtPcHRpb25zX25vX2RldmljZSAtLWNvbmZpZyBSZWxlYXNlKQorICBlbmRpZigpCisKICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQogICB1bnNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSkKIGVuZGlmKCkKQEAgLTQxLDMgKzc1LDIxIEBACiBlbmRpZigpCiAKIHJ1bl9jbWFrZShlbXB0eV9rZXl3b3JkX2FyZ3MpCisKK2lmIChOT1QgQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiSW50ZWwiKQorICAjIEludGVsIGNvbXBpbGVyIGRvZXMgbm90IHJlamVjdCBiYWQgZmxhZ3Mgb3Igb2JqZWN0cyEKKyAgc2V0KFJ1bkNNYWtlX1RFU1RfT1VUUFVUX01FUkdFIFRSVUUpCisgIGlmIChOT1QgUnVuQ01ha2VfR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKKyAgICBzZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlKQorICBlbmRpZigpCisKKyAgcnVuX2NtYWtlKENNUDAwOTktTkVXKQorICBydW5fY21ha2VfdGFyZ2V0KENNUDAwOTktTkVXIGJhc2ljIExpbmtPcHRpb25zX2V4ZSkKKworCisgIHJ1bl9jbWFrZShDTVAwMDk5LU9MRCkKKyAgcnVuX2NtYWtlX3RhcmdldChDTVAwMDk5LU9MRCBiYXNpYyBMaW5rT3B0aW9uc19leGUpCisKKyAgdW5zZXQoUnVuQ01ha2VfVEVTVF9PUFRJT05TKQorICB1bnNldChSdW5DTWFrZV9URVNUX09VVFBVVF9NRVJHRSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstQ01QMDEwNV9ORVctY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLUNNUDAxMDVfTkVXLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzRmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLUNNUDAxMDVfTkVXLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNCBAQAorCitpZiAoTk9UIGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR19ERVZJQ0VfTElOSyIpCisgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR19ERVZJQ0VfTElOSycuIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstQ01QMDEwNV9ORVctcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstQ01QMDEwNV9ORVctcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1DTVAwMTA1X05FVy1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWRldmljZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstZGV2aWNlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzNiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWRldmljZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldCAoREVWSUNFX0xJTksgVFJVRSkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfREVWSUNFX0xJTkstdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWRldmljZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1kZXZpY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1kZXZpY2UtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1pbnRlcmZhY2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWludGVyZmFjZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDMxZTIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1pbnRlcmZhY2UtY2hlY2suY21ha2UKQEAgLTAsMCArMSwzIEBACitzZXQgKERFVklDRV9MSU5LIEZBTFNFKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9ERVZJQ0VfTElOSy12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstaW50ZXJmYWNlLXJlc3VsdC50eHQgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWludGVyZmFjZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLWludGVyZmFjZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLW5vX2RldmljZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstbm9fZGV2aWNlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MzFlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLW5vX2RldmljZS1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK3NldCAoREVWSUNFX0xJTksgRkFMU0UpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0RFVklDRV9MSU5LLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1ub19kZXZpY2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstbm9fZGV2aWNlLXJlc3VsdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5OGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstbm9fZGV2aWNlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstcHJpdmF0ZS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstcHJpdmF0ZS1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDMxZTIyCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy1wcml2YXRlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAorc2V0IChERVZJQ0VfTElOSyBGQUxTRSkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfREVWSUNFX0xJTkstdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLXByaXZhdGUtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTkstcHJpdmF0ZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLXByaXZhdGUtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy12YWxpZGF0aW9uLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy12YWxpZGF0aW9uLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjVkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0RFVklDRV9MSU5LLXZhbGlkYXRpb24uY21ha2UKQEAgLTAsMCArMSwyMiBAQAorCitpZiAoTk9UIERFRklORUQgREVWSUNFX0xJTkspCisgIHNldCAoREVWSUNFX0xJTksgRkFMU0UpCitlbmRpZigpCisKK2lmIChERVZJQ0VfTElOSykKKyAgc2V0IChWQUxJRF9JRCBERVZJQ0VfTElOSykKKyAgc2V0IChJTlZBTElEX0lEIE5PUk1BTF9MSU5LKQorZWxzZSgpCisgIHNldCAoVkFMSURfSUQgTk9STUFMX0xJTkspCisgIHNldCAoSU5WQUxJRF9JRCBERVZJQ0VfTElOSykKK2VuZGlmKCkKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtWQUxJRF9JRH0iKQorICBzZXQgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJOb3QgZm91bmQgZXhwZWN0ZWQgJ0JBREZMQUdfJHtWQUxJRF9JRH0nLiIpCitlbmRpZigpCitpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyR7SU5WQUxJRF9JRH0iKQorICBpZiAoUnVuQ01ha2VfVEVTVF9GQUlMRUQpCisgICAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIlxuIikKKyAgZW5kaWYoKQorICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiRm91bmQgdW5leHBlY3RlZCAnQkFERkxBR18ke0lOVkFMSURfSUR9Jy4iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9ERVZJQ0VfTElOSy5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTksuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyNjA4MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfREVWSUNFX0xJTksuY21ha2UKQEAgLTAsMCArMSw1MSBAQAorCitlbmFibGVfbGFuZ3VhZ2UoQykKKworc2V0IChvYmogIiR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfSIpCitpZihCT1JMQU5EKQorICBzZXQocHJlIC0pCitlbmRpZigpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX2ludGVyZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19pbnRlcmZhY2UgSU5URVJGQUNFICQ8REVWSUNFX0xJTks6JHtwcmV9QkFERkxBR19ERVZJQ0VfTElOSyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxIT1NUX0xJTks6JHtwcmV9QkFERkxBR19OT1JNQUxfTElOSyR7b2JqfT4pCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX3NoYXJlZF9pbnRlcmZhY2UgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMgKExpbmtPcHRpb25zX3NoYXJlZF9pbnRlcmZhY2UgUFJJVkFURSBMaW5rT3B0aW9uc19pbnRlcmZhY2UpCisKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfcHJpdmF0ZSBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX29wdGlvbnMgKExpbmtPcHRpb25zX3ByaXZhdGUgUFJJVkFURSAkPERFVklDRV9MSU5LOiR7cHJlfUJBREZMQUdfREVWSUNFX0xJTkske29ian0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxIT1NUX0xJTks6JHtwcmV9QkFERkxBR19OT1JNQUxfTElOSyR7b2JqfT4pCisKK2lmIChDTWFrZV9URVNUX0NVREEpCisgIGVuYWJsZV9sYW5ndWFnZShDVURBKQorCisgICMgU2VwYXJhYmxlIGNvbXBpbGF0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIE5WQ0MuCisgIGlmKE5PVCBDTWFrZV9URVNUX0NVREEgU1RSRVFVQUwgIkNsYW5nIikKKyAgICBhZGRfZXhlY3V0YWJsZShMaW5rT3B0aW9uc19DTVAwMTA1X1VOU0VUIExpbmtPcHRpb25zRGV2aWNlLmN1KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgTGlua09wdGlvbnNfQ01QMDEwNV9VTlNFVCBQUk9QRVJUWSBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKExpbmtPcHRpb25zX0NNUDAxMDVfVU5TRVQgUFJJVkFURSAkPERFVklDRV9MSU5LOiR7cHJlfUJBREZMQUdfREVWSUNFX0xJTkske29ian0+KQorCisgICAgY21ha2VfcG9saWN5KFNFVCBDTVAwMTA1IE9MRCkKKworICAgIGFkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX0NNUDAxMDVfT0xEIExpbmtPcHRpb25zRGV2aWNlLmN1KQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgTGlua09wdGlvbnNfQ01QMDEwNV9PTEQgUFJPUEVSVFkgQ1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT04gT04pCisgICAgdGFyZ2V0X2xpbmtfb3B0aW9ucyhMaW5rT3B0aW9uc19DTVAwMTA1X09MRCBQUklWQVRFICQ8REVWSUNFX0xJTks6JHtwcmV9QkFERkxBR19ERVZJQ0VfTElOSyR7b2JqfT4pCisKKyAgICBjbWFrZV9wb2xpY3koU0VUIENNUDAxMDUgTkVXKQorCisgICAgYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfQ01QMDEwNV9ORVcgTGlua09wdGlvbnNEZXZpY2UuY3UpCisgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBMaW5rT3B0aW9uc19DTVAwMTA1X05FVyBQUk9QRVJUWSBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKExpbmtPcHRpb25zX0NNUDAxMDVfTkVXIFBSSVZBVEUgJDxERVZJQ0VfTElOSzoke3ByZX1CQURGTEFHX0RFVklDRV9MSU5LJHtvYmp9PikKKworICAgIGFkZF9leGVjdXRhYmxlKExpbmtPcHRpb25zX2RldmljZSBMaW5rT3B0aW9uc0RldmljZS5jdSkKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIExpbmtPcHRpb25zX2RldmljZSBQUk9QRVJUWSBDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTiBPTikKKyAgICB0YXJnZXRfbGlua19vcHRpb25zKExpbmtPcHRpb25zX2RldmljZSBQUklWQVRFICQ8REVWSUNFX0xJTks6JHtwcmV9QkFERkxBR19ERVZJQ0VfTElOSyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDxIT1NUX0xJTks6JHtwcmV9QkFERkxBR19OT1JNQUxfTElOSyR7b2JqfT4pCisgIGVuZGlmKCkKKworICBhZGRfZXhlY3V0YWJsZShMaW5rT3B0aW9uc19ub19kZXZpY2UgTGlua09wdGlvbnNEZXZpY2UuY3UpCisgIHRhcmdldF9saW5rX29wdGlvbnMoTGlua09wdGlvbnNfbm9fZGV2aWNlIFBSSVZBVEUgJDxERVZJQ0VfTElOSzoke3ByZX1CQURGTEFHX0RFVklDRV9MSU5LJHtvYmp9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8SE9TVF9MSU5LOiR7cHJlfUJBREZMQUdfTk9STUFMX0xJTkske29ian0+KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzOTgxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1leGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjY0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWV4ZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtZXhlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDEyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQykKK3NldCAoSU5WQUxJRF9MQU5HIENYWCkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1pbnRlcmZhY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLWludGVyZmFjZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtbW9kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWY2NDFkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HVUFHRS12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1tb2QtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLW1vZC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwMTIwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfYy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIEMpCitzZXQgKElOVkFMSURfTEFORyBDWFgpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS1zaGFyZWRfYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0Utc2hhcmVkX2MtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UtdmFsaWRhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDIzN2FiCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdVQUdFLXZhbGlkYXRpb24uY21ha2UKQEAgLTAsMCArMSwxNyBAQAorCitpZiAoTk9UIERFRklORUQgVkFMSURfTEFORykKKyAgc2V0IChWQUxJRF9MQU5HIEMpCitlbmRpZigpCitpZiAoTk9UIERFRklORUQgSU5WQUxJRF9MQU5HKQorICBzZXQgKElOVkFMSURfTEFORyBDWFgpCitlbmRpZigpCisKK2lmIChOT1QgYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyR7VkFMSURfTEFOR31fTEFORyIpCisgIHNldCAoUnVuQ01ha2VfVEVTVF9GQUlMRUQgIk5vdCBmb3VuZCBleHBlY3RlZCAnQkFERkxBR18ke1ZBTElEX0xBTkd9X0xBTkcnLiIpCitlbmRpZigpCitpZiAoYWN0dWFsX3N0ZG91dCBNQVRDSEVTICJCQURGTEFHXyR7SU5WQUxJRF9MQU5HfV9MQU5HIikKKyAgaWYgKFJ1bkNNYWtlX1RFU1RfRkFJTEVEKQorICAgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJcbiIpCisgIGVuZGlmKCkKKyAgc3RyaW5nIChBUFBFTkQgUnVuQ01ha2VfVEVTVF9GQUlMRUQgIkZvdW5kIHVuZXhwZWN0ZWQgJ0JBREZMQUdfJHtJTlZBTElEX0xBTkd9X0xBTkcnLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR1VBR0UuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlNjE1OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HVUFHRS5jbWFrZQpAQCAtMCwwICsxLDMyIEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworc2V0IChvYmogIiR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfSIpCitpZihCT1JMQU5EKQorICBzZXQocHJlIC0pCitlbmRpZigpCisKK2FkZF9saWJyYXJ5KExpbmtPcHRpb25zX2ludGVyZmFjZSBJTlRFUkZBQ0UpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19pbnRlcmZhY2UgSU5URVJGQUNFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSBQUklWQVRFIExpbmtPcHRpb25zX2ludGVyZmFjZSkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2MgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19zaGFyZWRfYyBQUklWQVRFICQ8JDxMSU5LX0xBTkdVQUdFOkM+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2N4eCBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX29wdGlvbnMgKExpbmtPcHRpb25zX3NoYXJlZF9jeHggUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PikKK3NldF9wcm9wZXJ0eSAoVEFSR0VUIExpbmtPcHRpb25zX3NoYXJlZF9jeHggUFJPUEVSVFkgTElOS0VSX0xBTkdVQUdFIENYWCkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfbW9kIE1PRFVMRSBMaW5rT3B0aW9uc0xpYi5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfbW9kIFBSSVZBVEUgJDwkPExJTktfTEFOR1VBR0U6Qz46JHtwcmV9QkFERkxBR18kPExJTktfTEFOR1VBR0U+X0xBTkcke29ian0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HVUFHRTpDWFg+OiR7cHJlfUJBREZMQUdfJDxMSU5LX0xBTkdVQUdFPl9MQU5HJHtvYmp9PikKKworYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfZXhlIExpbmtPcHRpb25zRXhlLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19leGUgUFJJVkFURSAkPCQ8TElOS19MQU5HVUFHRTpDPjoke3ByZX1CQURGTEFHXyQ8TElOS19MQU5HVUFHRT5fTEFORyR7b2JqfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdVQUdFOkNYWD46JHtwcmV9QkFERkxBR18kPExJTktfTEFOR1VBR0U+X0xBTkcke29ian0+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1jaGVjay5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0Zjg1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1MSU5LRVJfTEFOR1VBR0UtY2hlY2suY21ha2UKQEAgLTAsMCArMSw1IEBACisKK3NldCAoVkFMSURfTEFORyBDWFgpCitzZXQgKElOVkFMSURfTEFORyBDKQorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELUxJTktFUl9MQU5HVUFHRS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtTElOS0VSX0xBTkdVQUdFLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1leGUtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZGRlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsMiBAQAorCitpbmNsdWRlICgiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UiKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1yZXN1bHQudHh0IGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWV4ZS1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtZXhlLXJlc3VsdC50eHQKQEAgLTAsMCArMSBAQAorLioKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDk4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtaW50ZXJmYWNlLWNoZWNrLmNtYWtlCkBAIC0wLDAgKzEsNSBAQAorCitzZXQgKFZBTElEX0xBTkcgQykKK3NldCAoSU5WQUxJRF9MQU5HIENYWCkKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1pbnRlcmZhY2UtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELWludGVyZmFjZS1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtbW9kLWNoZWNrLmNtYWtlIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1jaGVjay5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRkZWUxCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDIgQEAKKworaW5jbHVkZSAoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2VuZXhfTElOS19MQU5HX0FORF9JRC12YWxpZGF0aW9uLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1tb2QtcmVzdWx0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk4ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELW1vZC1yZXN1bHQudHh0CkBAIC0wLDAgKzEgQEAKKy4qCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtY2hlY2suY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtY2hlY2suY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0OThkOQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1jaGVjay5jbWFrZQpAQCAtMCwwICsxLDUgQEAKKworc2V0IChWQUxJRF9MQU5HIEMpCitzZXQgKElOVkFMSURfTEFORyBDWFgpCisKK2luY2x1ZGUgKCIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZSIpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtcmVzdWx0LnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC1zaGFyZWRfYy1yZXN1bHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOThmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtc2hhcmVkX2MtcmVzdWx0LnR4dApAQCAtMCwwICsxIEBACisuKgpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQtdmFsaWRhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWRjMjdmCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvUnVuQ01ha2UvdGFyZ2V0X2xpbmtfb3B0aW9ucy9nZW5leF9MSU5LX0xBTkdfQU5EX0lELXZhbGlkYXRpb24uY21ha2UKQEAgLTAsMCArMSwyMyBAQAorCitpZiAoTk9UIFZBTElEX0xBTkcpCisgIHNldCAoVkFMSURfTEFORyBDKQorZW5kaWYoKQoraWYgKE5PVCBJTlZBTElEX0xBTkcpCisgIHNldCAoSU5WQUxJRF9MQU5HIENYWCkKK2VuZGlmKCkKKworaWYgKE5PVCBhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfJHtWQUxJRF9MQU5HfV9MQU5HX0lEIikKKyAgc2V0IChSdW5DTWFrZV9URVNUX0ZBSUxFRCAiTm90IGZvdW5kIGV4cGVjdGVkICdCQURGTEFHXyR7VkFMSURfTEFOR31fTEFOR19JRCcuXG4iKQorZW5kaWYoKQoraWYgKGFjdHVhbF9zdGRvdXQgTUFUQ0hFUyAiQkFERkxBR18ke0lOVkFMSURfTEFOR31fTEFOR19JRCIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXyR7SU5WQUxJRF9MQU5HfV9MQU5HX0lEICcuIikKK2VuZGlmKCkKK2lmIChhY3R1YWxfc3Rkb3V0IE1BVENIRVMgIkJBREZMQUdfKCR7VkFMSURfTEFOR318JHtJTlZBTElEX0xBTkd9KV9CQURJRCIpCisgIGlmIChSdW5DTWFrZV9URVNUX0ZBSUxFRCkKKyAgICBzdHJpbmcgKEFQUEVORCBSdW5DTWFrZV9URVNUX0ZBSUxFRCAiXG4iKQorICBlbmRpZigpCisgIHN0cmluZyAoQVBQRU5EIFJ1bkNNYWtlX1RFU1RfRkFJTEVEICJGb3VuZCB1bmV4cGVjdGVkICdCQURGTEFHXygke1ZBTElEX0xBTkd9fCR7SU5WQUxJRF9MQU5HfSlfQkFESUQnLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90YXJnZXRfbGlua19vcHRpb25zL2dlbmV4X0xJTktfTEFOR19BTkRfSUQuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwZjUwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1J1bkNNYWtlL3RhcmdldF9saW5rX29wdGlvbnMvZ2VuZXhfTElOS19MQU5HX0FORF9JRC5jbWFrZQpAQCAtMCwwICsxLDQxIEBACisKK2VuYWJsZV9sYW5ndWFnZShDKQorZW5hYmxlX2xhbmd1YWdlKENYWCkKKworaWYoQk9STEFORCkKKyAgc2V0KHByZSAtKQorZW5kaWYoKQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19pbnRlcmZhY2UgSU5URVJGQUNFKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfaW50ZXJmYWNlIElOVEVSRkFDRSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ19MQU5HX0lEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsJHtDTUFLRV9DWFhfQ09NUElMRVJfSUR9Pjoke3ByZX1CQURGTEFHX0NYWF9MQU5HX0lEJHtDTUFLRV9DWFhfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ19CQURJRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjoke3ByZX1CQURGTEFHX0NYWF9CQURJRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSBTSEFSRUQgTGlua09wdGlvbnNMaWIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyAoTGlua09wdGlvbnNfc2hhcmVkX2ludGVyZmFjZSBQUklWQVRFIExpbmtPcHRpb25zX2ludGVyZmFjZSkKKworYWRkX2xpYnJhcnkoTGlua09wdGlvbnNfc2hhcmVkX2MgU0hBUkVEIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19zaGFyZWRfYyBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DX0xBTkdfSUQke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkNYWCwke0NNQUtFX0NYWF9DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ1hYX0xBTkdfSUQke0NNQUtFX0NYWF9PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46JHtwcmV9QkFERkxBR19DX0JBRElEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ1hYX0JBRElEJHtDTUFLRV9DWFhfT1VUUFVUX0VYVEVOU0lPTn0+KQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19zaGFyZWRfY3h4IFNIQVJFRCBMaW5rT3B0aW9uc0xpYi5jKQordGFyZ2V0X2xpbmtfb3B0aW9ucyAoTGlua09wdGlvbnNfc2hhcmVkX2N4eCBQUklWQVRFICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsJHtDTUFLRV9DX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DX0xBTkdfSUQke0NNQUtFX0NfT1VUUFVUX0VYVEVOU0lPTn0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DWFhfTEFOR19JRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ8JDxMSU5LX0xBTkdfQU5EX0lEOkMsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ19CQURJRCR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkPCQ8TElOS19MQU5HX0FORF9JRDpDWFgsQkFESUQ+OiR7cHJlfUJBREZMQUdfQ1hYX0JBRElEJHtDTUFLRV9DWFhfT1VUUFVUX0VYVEVOU0lPTn0+KQorc2V0X3Byb3BlcnR5IChUQVJHRVQgTGlua09wdGlvbnNfc2hhcmVkX2N4eCBQUk9QRVJUWSBMSU5LRVJfTEFOR1VBR0UgQ1hYKQorCithZGRfbGlicmFyeShMaW5rT3B0aW9uc19tb2QgTU9EVUxFIExpbmtPcHRpb25zTGliLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19tb2QgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ19MQU5HX0lEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DWFhfTEFOR19JRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46JHtwcmV9QkFERkxBR19DX0JBRElEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjoke3ByZX1CQURGTEFHX0NYWF9CQURJRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKKworYWRkX2V4ZWN1dGFibGUoTGlua09wdGlvbnNfZXhlIExpbmtPcHRpb25zRXhlLmMpCit0YXJnZXRfbGlua19vcHRpb25zIChMaW5rT3B0aW9uc19leGUgUFJJVkFURSAkPCQ8TElOS19MQU5HX0FORF9JRDpDLCR7Q01BS0VfQ19DT01QSUxFUl9JRH0+OiR7cHJlfUJBREZMQUdfQ19MQU5HX0lEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLCR7Q01BS0VfQ1hYX0NPTVBJTEVSX0lEfT46JHtwcmV9QkFERkxBR19DWFhfTEFOR19JRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6QyxCQURJRD46JHtwcmV9QkFERkxBR19DX0JBRElEJHtDTUFLRV9DX09VVFBVVF9FWFRFTlNJT059PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDwkPExJTktfTEFOR19BTkRfSUQ6Q1hYLEJBRElEPjoke3ByZX1CQURGTEFHX0NYWF9CQURJRCR7Q01BS0VfQ1hYX09VVFBVVF9FWFRFTlNJT059PikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0NNUDAwNTYuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DTVAwMDU2LmNtYWtlCmluZGV4IGU4ZDNkNGEuLjJhYjc5ZDUgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0NNUDAwNTYuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ01QMDA1Ni5jbWFrZQpAQCAtMSwzICsxLDQgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCiBlbmFibGVfbGFuZ3VhZ2UoQykKIHNldChvYmogIiR7Q01BS0VfQ19PVVRQVVRfRVhURU5TSU9OfSIpCiBpZihCT1JMQU5EKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0NsZWFudXBOb0ZvbGxvd1N5bWxpbmsuY21ha2UgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DbGVhbnVwTm9Gb2xsb3dTeW1saW5rLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTBmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DbGVhbnVwTm9Gb2xsb3dTeW1saW5rLmNtYWtlCkBAIC0wLDAgKzEsMjEgQEAKK2VuYWJsZV9sYW5ndWFnZShDKQorCitzZXQob3V0ICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZm9sZGVyIikKK3NldChsaW5rX2ZvbGRlciAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NNYWtlRmlsZXMvQ01ha2VUbXAiKQorc2V0KGxpbmtfZGlyICIke2xpbmtfZm9sZGVyfS9saW5rX2RpciIpCitmaWxlKE1BS0VfRElSRUNUT1JZICIke291dH0iKQorZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtsaW5rX2ZvbGRlcn0iKQorZmlsZShXUklURSAke291dH0vZW1wdHlfZmlsZSAiIikKK2ZpbGUoQ1JFQVRFX0xJTksgJHtvdXR9ICR7bGlua19kaXJ9IFNZTUJPTElDKQorCit0cnlfY29tcGlsZShyZXMgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CisgIFNPVVJDRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NyYy5jKQorCitpZihFWElTVFMgJHtsaW5rX2Rpcn0pCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImRpZCBub3QgcmVtb3ZlICR7bGlua19kaXJ9IikKK2VuZGlmKCkKK2lmKE5PVCBFWElTVFMgJHtvdXR9KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJzaG91bGQgbm90IGhhdmUgcmVtb3ZlZCAke291dH0vZGlyIikKK2VuZGlmKCkKKworZmlsZShSRU1PVkVfUkVDVVJTRSAiJHtvdXR9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0N1ZGFTdGFuZGFyZC1zdGRlcnIudHh0IGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLXN0ZGVyci50eHQKaW5kZXggM2M2YmRmNi4uYmNmOTVkNSAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLXN0ZGVyci50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLXN0ZGVyci50eHQKQEAgLTEsNSArMSw1IEBACiBeQ01ha2UgRXJyb3IgYXQgLiovVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLWJ1aWxkL0NNYWtlRmlsZXMvQ01ha2VUbXAvQ01ha2VMaXN0cy50eHQ6WzAtOV0rIFwoYWRkX2V4ZWN1dGFibGVcKToKLSAgQ1VEQV9TVEFOREFSRCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSAnMycKKyAgQ1VEQV9TVEFOREFSRCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSAnNCcKICsKIENNYWtlIEVycm9yIGF0IEN1ZGFTdGFuZGFyZC5jbWFrZTpbMC05XSsgXCh0cnlfY29tcGlsZVwpOgogICBGYWlsZWQgdG8gZ2VuZXJhdGUgdGVzdCBwcm9qZWN0IGJ1aWxkIHN5c3RlbS4KZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0N1ZGFTdGFuZGFyZC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL0N1ZGFTdGFuZGFyZC5jbWFrZQppbmRleCA5NmRhNDIyLi5hMjMwNDI0IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9DdWRhU3RhbmRhcmQuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvQ3VkYVN0YW5kYXJkLmNtYWtlCkBAIC0xLDcgKzEsNyBAQAogZW5hYmxlX2xhbmd1YWdlKENVREEpCiB0cnlfY29tcGlsZShyZXN1bHQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9CiAgIFNPVVJDRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NyYy5jdQotICBDVURBX1NUQU5EQVJEIDMKKyAgQ1VEQV9TVEFOREFSRCA0CiAgIE9VVFBVVF9WQVJJQUJMRSBvdXQKICAgKQogbWVzc2FnZSgidHJ5X2NvbXBpbGUgb3V0cHV0OlxuJHtvdXR9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL1J1bkNNYWtlVGVzdC5jbWFrZSBiL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL1J1bkNNYWtlVGVzdC5jbWFrZQppbmRleCA5MWYwMTRlLi44MmM1NWNjIDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9SdW5DTWFrZVRlc3QuY21ha2UKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvUnVuQ01ha2VUZXN0LmNtYWtlCkBAIC00OSwxMSArNDksNyBAQAogICBydW5fY21ha2UoT2JqQ3h4U3RhbmRhcmQpCiBlbmRpZigpCiBpZihDTWFrZV9URVNUX0NVREEpCi0gIGlmKENNQUtFX0hPU1RfV0lOMzIpCi0gICAgcnVuX2NtYWtlKEN1ZGFTdGFuZGFyZE5vRGVmYXVsdCkKLSAgZWxzZSgpCi0gICAgcnVuX2NtYWtlKEN1ZGFTdGFuZGFyZCkKLSAgZW5kaWYoKQorICBydW5fY21ha2UoQ3VkYVN0YW5kYXJkKQogZW5kaWYoKQogaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIiBBTkQgTk9UIENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgNC40KQogICBydW5fY21ha2UoQ1N0YW5kYXJkR05VKQpAQCAtODcsMTQgKzgzLDIyIEBACiAKICAgbWVzc2FnZShTVEFUVVMgIlJlcnVuQ01ha2U6IGZpcnN0IGNvbmZpZ3VyYXRpb24uLi4iKQogICBydW5fY21ha2UoUmVydW5DTWFrZSkKLSAgcnVuX2NtYWtlX2NvbW1hbmQoUmVydW5DTWFrZS1ub3dvcmske25pbmphfSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKKyAgaWYoTk9UIENNYWtlX1RFU1RfRklMRVNZU1RFTV8xUykKKyAgICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLW5vd29yayR7bmluamF9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQorICBlbmRpZigpCiAKICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBzbGVlcCAxKSAjIGhhbmRsZSAxcyByZXNvbHV0aW9uCiAgIG1lc3NhZ2UoU1RBVFVTICJSZXJ1bkNNYWtlOiBtb2RpZnkgdHJ5X2NvbXBpbGUgaW5wdXQuLi4iKQogICBmaWxlKFdSSVRFICIke2luX3RjfSIgImRvZXMtbm90LWNvbXBpbGVcbiIpCiAgIHJ1bl9jbWFrZV9jb21tYW5kKFJlcnVuQ01ha2UtcmVydW4ke25pbmphfSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKLSAgcnVuX2NtYWtlX2NvbW1hbmQoUmVydW5DTWFrZS1ub3dvcmske25pbmphfSAke0NNQUtFX0NPTU1BTkR9IC0tYnVpbGQgLikKKyAgaWYoTk9UIENNYWtlX1RFU1RfRklMRVNZU1RFTV8xUykKKyAgICBydW5fY21ha2VfY29tbWFuZChSZXJ1bkNNYWtlLW5vd29yayR7bmluamF9ICR7Q01BS0VfQ09NTUFORH0gLS1idWlsZCAuKQorICBlbmRpZigpCiAKICAgdW5zZXQoUnVuQ01ha2VfVEVTVF9CSU5BUllfRElSKQogICB1bnNldChSdW5DTWFrZV9URVNUX05PX0NMRUFOKQogZW5kaWYoKQorCitpZihVTklYKQorICBydW5fY21ha2UoQ2xlYW51cE5vRm9sbG93U3ltbGluaykKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL3Byb2ovQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS90cnlfY29tcGlsZS9wcm9qL0NNYWtlTGlzdHMudHh0CmluZGV4IDc4YTg3YzAuLjY1MmY1YjYgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1J1bkNNYWtlL3RyeV9jb21waWxlL3Byb2ovQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2UvdHJ5X2NvbXBpbGUvcHJvai9DTWFrZUxpc3RzLnR4dApAQCAtMSwyICsxLDIgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTApCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdChUZXN0UHJvamVjdCBOT05FKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdHJ5X3J1bi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1J1bkNNYWtlL3RyeV9ydW4vQ01ha2VMaXN0cy50eHQKaW5kZXggZTAzNDc4MC4uZTkzZjBiNiAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2UvdHJ5X3J1bi9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS90cnlfcnVuL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMyBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC4wKQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKIHByb2plY3QoJHtSdW5DTWFrZV9URVNUfSBDKQogaW5jbHVkZSgke1J1bkNNYWtlX1RFU1R9LmNtYWtlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvUnVuQ01ha2UvdmFyaWFibGVfd2F0Y2gvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9SdW5DTWFrZS92YXJpYWJsZV93YXRjaC9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmNkM2M3Li43NGIzZmY4IDEwMDY0NAotLS0gYS9UZXN0cy9SdW5DTWFrZS92YXJpYWJsZV93YXRjaC9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9SdW5DTWFrZS92YXJpYWJsZV93YXRjaC9DTWFrZUxpc3RzLnR4dApAQCAtMSwzICsxLDMgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNCkKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCiBwcm9qZWN0KCR7UnVuQ01ha2VfVEVTVH0gTk9ORSkKIGluY2x1ZGUoJHtSdW5DTWFrZV9URVNUfS5jbWFrZSkKZGlmZiAtLWdpdCBhL1Rlc3RzL1J1bkNNYWtlL3doaWxlL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvUnVuQ01ha2Uvd2hpbGUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjZDNjNy4uNzRiM2ZmOCAxMDA2NDQKLS0tIGEvVGVzdHMvUnVuQ01ha2Uvd2hpbGUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvUnVuQ01ha2Uvd2hpbGUvQ01ha2VMaXN0cy50eHQKQEAgLTEsMyArMSwzIEBACi1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjQpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQogcHJvamVjdCgke1J1bkNNYWtlX1RFU1R9IE5PTkUpCiBpbmNsdWRlKCR7UnVuQ01ha2VfVEVTVH0uY21ha2UpCmRpZmYgLS1naXQgYS9UZXN0cy9TZXRMYW5nL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvU2V0TGFuZy9DTWFrZUxpc3RzLnR4dAppbmRleCBmMjRlNWNiLi42MTY0MjFlIDEwMDY0NAotLS0gYS9UZXN0cy9TZXRMYW5nL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1NldExhbmcvQ01ha2VMaXN0cy50eHQKQEAgLTgsMyArOCwxNyBAQAogc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKGZvby5jIGJhci5jIFBST1BFUlRJRVMgTEFOR1VBR0UgQ1hYKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNldExhbmcgZm9vKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKFNldExhbmcgUFJPUEVSVElFUyBMSU5LRVJfTEFOR1VBR0UgQ1hYKQorCisjIFZTIGdlbmVyYXRvcnMgaGlzdG9yaWNhbGx5IHRvbGVyYXRlZCB0YXJnZXQtd2lkZSAtVFAgZmxhZ3MgYWRkZWQKKyMgYnkgcHJvamVjdCBjb2RlLCBzbyBjb3ZlciB0aGF0IGNhc2UgdG8gcHJlc2VydmUgdGhlIGJlaGF2aW9yLgoraWYoQ01BS0VfR0VORVJBVE9SIE1BVENIRVMgIl5WaXN1YWwgU3R1ZGlvIiBBTkQgIngke0NNQUtFX0NfQ09NUElMRVJfSUR9IiBTVFJFUVVBTCAieE1TVkMiKQorICBhZGRfbGlicmFyeShzdGF5IHN0YXlfYy5jIHN0YXlfY3h4LmN4eCkKKyAgc2V0X3Byb3BlcnR5KFRBUkdFVCBzdGF5IFBST1BFUlRZIENPTVBJTEVfT1BUSU9OUyAiLVRQIikKK2VuZGlmKCkKKworaWYoKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiKEdOVXxDbGFuZ3xNU1ZDfEJvcmxhbmR8RW1iYXJjYWRlcm98SW50ZWx8VEl8WEwpIikpCisgIGFkZF9saWJyYXJ5KHpvb20gem9vbS56enopCisgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyh6b29tLnp6eiBQUk9QRVJUSUVTIExBTkdVQUdFIENYWCkKKyAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKFNldExhbmcgem9vbSkKKyAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoU2V0TGFuZyBQUklWQVRFIFdJVEhfWk9PTSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1Rlc3RzL1NldExhbmcvYmFyLmMgYi9UZXN0cy9TZXRMYW5nL2Jhci5jCmluZGV4IGI5MzQzNTYuLjUxNWU4YzIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1NldExhbmcvYmFyLmMKKysrIGIvVGVzdHMvU2V0TGFuZy9iYXIuYwpAQCAtMSwxMCArMSwyMiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIGludCBmb28oKTsKKworI2lmZGVmIFdJVEhfWk9PTQoraW50IHpvb20oKTsKKyNlbmRpZgorCiBjbGFzcyBBCiB7CiBwdWJsaWM6Ci0gIEEoKSB7IHRoaXMtPmkgPSBmb28oKTsgfQorICBBKCkKKyAgeworICAgIHRoaXMtPmkgPSBmb28oKTsKKyNpZmRlZiBXSVRIX1pPT00KKyAgICBpICs9IHpvb20oKTsKKyAgICBpIC09IHpvb20oKTsKKyNlbmRpZgorICB9CiAgIGludCBpOwogfTsKIApkaWZmIC0tZ2l0IGEvVGVzdHMvU2V0TGFuZy9zdGF5X2MuYyBiL1Rlc3RzL1NldExhbmcvc3RheV9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3NTVmMwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1NldExhbmcvc3RheV9jLmMKQEAgLTAsMCArMSw4IEBACisjaWZkZWYgX19jcGx1c3BsdXMKKyMgIGVycm9yIEMgc291cmNlIGluY29ycmVjdGx5IGNvbXBpbGVkIGFzIEMrKworI2VuZGlmCisKK2ludCBzdGF5X2Modm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9UZXN0cy9TZXRMYW5nL3N0YXlfY3h4LmN4eCBiL1Rlc3RzL1NldExhbmcvc3RheV9jeHguY3h4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMzUyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9TZXRMYW5nL3N0YXlfY3h4LmN4eApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyMgIGVycm9yIEMrKyBzb3VyY2UgaW5jb3JyZWN0bHkgY29tcGlsZWQgYXMgQworI2VuZGlmCisKK2ludCBzdGF5X2N4eCgpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvU2V0TGFuZy96b29tLnp6eiBiL1Rlc3RzL1NldExhbmcvem9vbS56enoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjODg5OQotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1NldExhbmcvem9vbS56enoKQEAgLTAsMCArMSw3IEBACitpbnQgem9vbSgpCit7CisgIGludCByID0gMTA7CisgIHIrKzsKKyAgaW50IHJldCA9IHIgKyAxMDsKKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1NvdXJjZUdyb3Vwcy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1NvdXJjZUdyb3Vwcy9DTWFrZUxpc3RzLnR4dAppbmRleCBhNTc0MGJiLi5kNzI2Mzk1IDEwMDY0NAotLS0gYS9UZXN0cy9Tb3VyY2VHcm91cHMvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvU291cmNlR3JvdXBzL0NNYWtlTGlzdHMudHh0CkBAIC0zMCw2ICszMCw5IEBACiAjIGEgZ3JvdXAgd2l0aG91dCBmaWxlcywgaXMgY3VycmVudGx5IG5vdCBjcmVhdGVkCiBzb3VyY2VfZ3JvdXAoRW1wdHlHcm91cCkKIAorIyBGb3J3YXJkIHNsYXNoZXMgY2FuIGJlIGRlbGltaXRlcnMgdG9vCitzb3VyY2VfZ3JvdXAoQmFzZS9OZXN0ZWQgRklMRVMgbmVzdGVkLmMpCisKIHNldChyb290ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKIAogc2V0KHRyZWVfZmlsZXNfd2l0aG91dF9wcmVmaXggJHtyb290fS9zdWIxL3RyZWVfYmFyLmMKQEAgLTU4LDQgKzYxLDUgQEAKIAogYWRkX2V4ZWN1dGFibGUoU291cmNlR3JvdXBzIG1haW4uYyBiYXIuYyBmb28uYyBzdWIxL2Zvby5jIHN1YjEvZm9vYmFyLmMgYmF6LmMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RyZWVfZmlsZXNfd2l0aF9wcmVmaXh9ICR7dHJlZV9maWxlc193aXRob3V0X3ByZWZpeH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RyZWVfZmlsZXNfd2l0aF9lbXB0eV9wcmVmaXh9IFJFQURNRS50eHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0cmVlX2ZpbGVzX3dpdGhfZW1wdHlfcHJlZml4fSBSRUFETUUudHh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkLmMpCmRpZmYgLS1naXQgYS9UZXN0cy9Tb3VyY2VHcm91cHMvbWFpbi5jIGIvVGVzdHMvU291cmNlR3JvdXBzL21haW4uYwppbmRleCA4NzIyNWY1Li5mNjQ2YjQ5IDEwMDY0NAotLS0gYS9UZXN0cy9Tb3VyY2VHcm91cHMvbWFpbi5jCisrKyBiL1Rlc3RzL1NvdXJjZUdyb3Vwcy9tYWluLmMKQEAgLTEyLDYgKzEyLDcgQEAKIGV4dGVybiBpbnQgdHJlZV9iYXIodm9pZCk7CiBleHRlcm4gaW50IHRyZWVfZm9vYmFyKHZvaWQpOwogZXh0ZXJuIGludCB0cmVlX2Jheih2b2lkKTsKK2V4dGVybiBpbnQgbmVzdGVkKHZvaWQpOwogCiBpbnQgbWFpbigpCiB7CkBAIC0yMyw1ICsyNCw4IEBACiAgICAgICAgICAidHJlZV9lbXB0eV9wcmVmaXhfYmFyOiAlZFxuIiwKICAgICAgICAgIHRyZWVfcHJlZml4X2ZvbygpLCB0cmVlX3ByZWZpeF9iYXIoKSwgdHJlZV9iYXIoKSwgdHJlZV9mb29iYXIoKSwKICAgICAgICAgIHRyZWVfYmF6KCksIHRyZWVfZW1wdHlfcHJlZml4X2ZvbygpLCB0cmVlX2VtcHR5X3ByZWZpeF9iYXIoKSk7CisKKyAgcHJpbnRmKCJuZXN0ZWQ6ICVkXG4iLCBuZXN0ZWQoKSk7CisKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9UZXN0cy9Tb3VyY2VHcm91cHMvbmVzdGVkLmMgYi9UZXN0cy9Tb3VyY2VHcm91cHMvbmVzdGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzMTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1NvdXJjZUdyb3Vwcy9uZXN0ZWQuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBuZXN0ZWQodm9pZCkKK3sKKyAgcmV0dXJuIDEyMzsKK30KZGlmZiAtLWdpdCBhL1Rlc3RzL1N0YWdpbmdQcmVmaXgvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9TdGFnaW5nUHJlZml4L0NNYWtlTGlzdHMudHh0CmluZGV4IDhkMjUxOWUuLjllZDVjMTIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1N0YWdpbmdQcmVmaXgvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvU3RhZ2luZ1ByZWZpeC9DTWFrZUxpc3RzLnR4dApAQCAtNSw3ICs1LDcgQEAKICMgV2lwZSBvdXQgdGhlIGluc3RhbGwgdHJlZQogYWRkX2N1c3RvbV9jb21tYW5kKAogICBPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9DbGVhbnVwUHJvamVjdAotICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcmVtb3ZlX2RpcmVjdG9yeQorICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgcm0gLXJmCiAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9Db25zdW1lckJ1aWxkCiAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9Qcm9kdWNlckJ1aWxkCiAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9zdGFnZQpkaWZmIC0tZ2l0IGEvVGVzdHMvU3ViRGlyL0V4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvU3ViRGlyL0V4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0CmluZGV4IDIwZDA2NWUuLjhlYzFjMDIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1N1YkRpci9FeGFtcGxlcy9leGFtcGxlMS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9TdWJEaXIvRXhhbXBsZXMvZXhhbXBsZTEvQ01ha2VMaXN0cy50eHQKQEAgLTMsNSArMyw1IEBACiBhZGRfZXhlY3V0YWJsZShleGFtcGxlMSBleGFtcGxlMS5jeHgpCiAKIGFkZF9jdXN0b21fY29tbWFuZChUQVJHRVQgZXhhbXBsZTEgUE9TVF9CVUlMRAotICBDT01NQU5EICIke0NNQUtFX0NPTU1BTkR9IiBBUkdTIC1FIHJlbW92ZSAke1NVQkRJUl9CSU5BUllfRElSfS9TaG91bGRCZUhlcmUKKyAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgQVJHUyAtRSBybSAtZiAke1NVQkRJUl9CSU5BUllfRElSfS9TaG91bGRCZUhlcmUKICAgQ09NTUVOVCAiUmVtb3ZlIG1hcmtlciBmaWxlIHRoYXQgc2hvdWxkIGV4aXN0IGJlY2F1c2UgdGhpcyBzaG91bGQgbm90IGJlIHJ1biIpCmRpZmYgLS1naXQgYS9UZXN0cy9TdWJEaXJTcGFjZXMvU29tZSBFeGFtcGxlcy9leGFtcGxlMS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1N1YkRpclNwYWNlcy9Tb21lIEV4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0CmluZGV4IDIwZDA2NWUuLjhlYzFjMDIgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1N1YkRpclNwYWNlcy9Tb21lIEV4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1N1YkRpclNwYWNlcy9Tb21lIEV4YW1wbGVzL2V4YW1wbGUxL0NNYWtlTGlzdHMudHh0CkBAIC0zLDUgKzMsNSBAQAogYWRkX2V4ZWN1dGFibGUoZXhhbXBsZTEgZXhhbXBsZTEuY3h4KQogCiBhZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIGV4YW1wbGUxIFBPU1RfQlVJTEQKLSAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgQVJHUyAtRSByZW1vdmUgJHtTVUJESVJfQklOQVJZX0RJUn0vU2hvdWxkQmVIZXJlCisgIENPTU1BTkQgIiR7Q01BS0VfQ09NTUFORH0iIEFSR1MgLUUgcm0gLWYgJHtTVUJESVJfQklOQVJZX0RJUn0vU2hvdWxkQmVIZXJlCiAgIENPTU1FTlQgIlJlbW92ZSBtYXJrZXIgZmlsZSB0aGF0IHNob3VsZCBleGlzdCBiZWNhdXNlIHRoaXMgc2hvdWxkIG5vdCBiZSBydW4iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvU3dpZnRPbmx5L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvU3dpZnRPbmx5L0NNYWtlTGlzdHMudHh0CmluZGV4IGY0Y2JhYzIuLjQxZDE0ZWEgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1N3aWZ0T25seS9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Td2lmdE9ubHkvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSwxNiBAQAogY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMykKKworIyBOT1RFOiBGb3JjZSB0aGUgUmVsZWFzZSBtb2RlIGNvbmZpZ3VyYXRpb24gYXMgdGhlcmUgYXJlIHNvbWUgaXNzdWVzIHdpdGggdGhlCisjIGRlYnVnIGluZm9ybWF0aW9uIGhhbmRsaW5nIG9uIG1hY09TIG9uIGNlcnRhaW4gWGNvZGUgYnVpbGRzLgoraWYoTk9UIENNQUtFX0NPTkZJR1VSQVRJT05fVFlQRVMpCisgIHNldChDTUFLRV9CVUlMRF9UWVBFIFJlbGVhc2UgQ0FDSEUgU1RSSU5HICJDaG9vc2UgdGhlIHR5cGUgb2YgYnVpbGQiIEZPUkNFKQorZW5kaWYoKQorCisjIE5PVEU6IGVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHQuICBPbGRlciBYY29kZSByZWxlYXNlcyBkbyBub3QgcGxheQorIyB3ZWxsIHdpdGggc3RhdGljIGxpYnJhcmllcywgYW5kIFdpbmRvd3MgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgc3RhdGljCisjIGxpYnJhcmllcyBpbiBTd2lmdC4KK3NldChCVUlMRF9TSEFSRURfTElCUyBZRVMpCisKIHByb2plY3QoU3dpZnRPbmx5IFN3aWZ0KQogCiBpZihOT1QgWENPREVfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMTAuMikKQEAgLTcsNyArMTksMjAgQEAKICAgc2V0KENNQUtFX1N3aWZ0X0xBTkdVQUdFX1ZFUlNJT04gMy4wKQogZW5kaWYoKQogCitzZXQoQ01BS0VfU3dpZnRfTU9EVUxFX0RJUkVDVE9SWSAke0NNQUtFX0JJTkFSWV9ESVJ9L3N3aWZ0KQorCiBhZGRfZXhlY3V0YWJsZShTd2lmdE9ubHkgbWFpbi5zd2lmdCkKIAorYWRkX2xpYnJhcnkoTCBMLnN3aWZ0KQorCithZGRfbGlicmFyeShNIE0uc3dpZnQpCit0YXJnZXRfbGlua19saWJyYXJpZXMoTSBQVUJMSUMKKyAgTCkKKworYWRkX2xpYnJhcnkoTiBOLnN3aWZ0KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKE4gUFVCTElDCisgIE0pCisKICMgRHVtbXkgdG8gbWFrZSBzdXJlIGdlbmVyYXRpb24gd29ya3Mgd2l0aCBzdWNoIHRhcmdldHMuCiBhZGRfbGlicmFyeShTd2lmdElmYWNlIElOVEVSRkFDRSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhTd2lmdE9ubHkgUFJJVkFURSBTd2lmdElmYWNlKQpkaWZmIC0tZ2l0IGEvVGVzdHMvU3dpZnRPbmx5L0wuc3dpZnQgYi9UZXN0cy9Td2lmdE9ubHkvTC5zd2lmdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWZmODdlCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvU3dpZnRPbmx5L0wuc3dpZnQKQEAgLTAsMCArMSBAQAorcHVibGljIGxldCBUaGlydHlUd286IEludCA9IDMyCmRpZmYgLS1naXQgYS9UZXN0cy9Td2lmdE9ubHkvTS5zd2lmdCBiL1Rlc3RzL1N3aWZ0T25seS9NLnN3aWZ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzMzZmUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Td2lmdE9ubHkvTS5zd2lmdApAQCAtMCwwICsxLDIgQEAKK2ltcG9ydCBMCitwdWJsaWMgbGV0IFNpeHR5Rm91cjogSW50ID0gVGhpcnR5VHdvICogMgpkaWZmIC0tZ2l0IGEvVGVzdHMvU3dpZnRPbmx5L04uc3dpZnQgYi9UZXN0cy9Td2lmdE9ubHkvTi5zd2lmdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTBkZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvU3dpZnRPbmx5L04uc3dpZnQKQEAgLTAsMCArMSwyIEBACitpbXBvcnQgTQorcHVibGljIGxldCBPbmVUd2VudHlFaWdodCA9IFNpeHR5Rm91ciAqIDIKZGlmZiAtLWdpdCBhL1Rlc3RzL1RyeUNvbXBpbGUvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9UcnlDb21waWxlL0NNYWtlTGlzdHMudHh0CmluZGV4IDllYzliNzAuLmRmOTIxZDggMTAwNjQ0Ci0tLSBhL1Rlc3RzL1RyeUNvbXBpbGUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvVHJ5Q29tcGlsZS9DTWFrZUxpc3RzLnR4dApAQCAtMTg3LDcgKzE4Nyw3IEBACiBpZihTSE9VTERfRkFJTF9EVUVfVE9fQkFEX1NPVVJDRSBBTkQgTk9UIENNQUtFX0dFTkVSQVRPUiBNQVRDSEVTICJXYXRjb20gV01ha2V8Tk1ha2UgTWFrZWZpbGVzIikKICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgb3V0cHV0ICIgICR7b3V0cHV0fSIpCiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAidHJ5X2NvbXBpbGUgd2l0aCBiYWQjc291cmNlLmMgZGlkIG5vdCBmYWlsOlxuJHtvdXRwdXR9IikKLWVsc2VpZihOT1Qgb3V0cHV0IE1BVENIRVMgW1soYmFkI3NvdXJjZVwuY3xiYWRcXCldXSkKK2Vsc2VpZihOT1Qgb3V0cHV0IE1BVENIRVMgW1soYmFkI3NvdXJjZVwuY3xiYWRcLmN8YmFkJyldXSkKICAgc3RyaW5nKFJFUExBQ0UgIlxuIiAiXG4gICIgb3V0cHV0ICIgICR7b3V0cHV0fSIpCiAgIG1lc3NhZ2UoU0VORF9FUlJPUiAidHJ5X2NvbXBpbGUgd2l0aCBiYWQjc291cmNlLmMgZmFpbGVkIHdpdGhvdXQgbWVudGlvbmluZyBiYWQgc291cmNlOlxuJHtvdXRwdXR9IikKIGVsc2UoKQpkaWZmIC0tZ2l0IGEvVGVzdHMvVXNlU1dJRy9CYXNpY0NvbmZpZ3VyYXRpb24uY21ha2UgYi9UZXN0cy9Vc2VTV0lHL0Jhc2ljQ29uZmlndXJhdGlvbi5jbWFrZQppbmRleCBmZDNhYzQwLi5kMDU0OTUzIDEwMDY0NAotLS0gYS9UZXN0cy9Vc2VTV0lHL0Jhc2ljQ29uZmlndXJhdGlvbi5jbWFrZQorKysgYi9UZXN0cy9Vc2VTV0lHL0Jhc2ljQ29uZmlndXJhdGlvbi5jbWFrZQpAQCAtMTgsNiArMTgsOSBAQAogaWYoJHtsYW5ndWFnZX0gTUFUQ0hFUyBjc2hhcnApCiAgIHNldChTV0lHX0xBTkdfVFlQRSBUWVBFIFNIQVJFRCkKIGVuZGlmKCkKK2lmKCR7bGFuZ3VhZ2V9IE1BVENIRVMgZm9ydHJhbikKKyAgc2V0KFNXSUdfTEFOR19UWVBFIFRZUEUgU0hBUkVEKQorZW5kaWYoKQogaWYoJHtsYW5ndWFnZX0gTUFUQ0hFUyBweXRob24pCiAgIGZpbmRfcGFja2FnZShQeXRob24gUkVRVUlSRUQgQ09NUE9ORU5UUyBJbnRlcnByZXRlciBEZXZlbG9wbWVudCkKICAgc2V0KFNXSUdfTEFOR19JTkNMVURFX0RJUkVDVE9SSUVTICR7UHl0aG9uX0lOQ0xVREVfRElSU30pCmRpZmYgLS1naXQgYS9UZXN0cy9Vc2VTV0lHL0Jhc2ljRm9ydHJhbi9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1VzZVNXSUcvQmFzaWNGb3J0cmFuL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MWZiODUKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Vc2VTV0lHL0Jhc2ljRm9ydHJhbi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDIzIEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMi4uLjMuMTMpCisKK3Byb2plY3QoVGVzdEJhc2ljRm9ydHJhbiBDWFggRm9ydHJhbikKKworaW5jbHVkZShDVGVzdCkKKworc2V0KGxhbmd1YWdlICJmb3J0cmFuIikKKworaW5jbHVkZSAoLi4vQmFzaWNDb25maWd1cmF0aW9uLmNtYWtlKQorZ2V0X3RhcmdldF9wcm9wZXJ0eShFWEFNUExFX1BSRUZJWCBleGFtcGxlIFBSRUZJWCkKK2lmIChOT1QgRVhBTVBMRV9QUkVGSVggU1RSRVFVQUwgIiR7Q01BS0VfU0hBUkVEX0xJQlJBUllfUFJFRklYfSIKKyAgICBBTkQgTk9UIEVYQU1QTEVfUFJFRklYIFNUUkVRVUFMICJFWEFNUExFX1BSRUZJWC1OT1RGT1VORCIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlVuZXhwZWN0ZWQgbGlicmFyeSBwcmVmaXggb24gdGFyZ2V0OiBnb3QgIgorICAgICInJHtFWEFNUExFX1BSRUZJWH0nIGJ1dCBleHBlY3RlZCAnJHtDTUFLRV9TSEFSRURfTElCUkFSWV9QUkVGSVh9JyIpCitlbmRpZigpCisKKworYWRkX2V4ZWN1dGFibGUocnVubWUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uL3J1bm1lLmY5MCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhydW5tZSBleGFtcGxlKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHJ1bm1lIFBST1BFUlRJRVMgTElOS0VSX0xBTkdVQUdFIEZvcnRyYW4pCisKK2FkZF90ZXN0IChOQU1FIEJhc2ljRm9ydHJhbgorICBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6cnVubWU+KQpkaWZmIC0tZ2l0IGEvVGVzdHMvVXNlU1dJRy9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1VzZVNXSUcvQ01ha2VMaXN0cy50eHQKaW5kZXggM2NjOTEwZi4uNzA0NmZhYiAxMDA2NDQKLS0tIGEvVGVzdHMvVXNlU1dJRy9DTWFrZUxpc3RzLnR4dAorKysgYi9UZXN0cy9Vc2VTV0lHL0NNYWtlTGlzdHMudHh0CkBAIC0zMyw2ICszMywxNiBAQAogICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgogICAgICkKIGVuZGlmKCkKK2FkZF90ZXN0KE5BTUUgVXNlU1dJRy5OYW1lc3BhY2VDc2hhcnAgQ09NTUFORAorICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KKyAgLS1idWlsZC1hbmQtdGVzdAorICAiJHtDTWFrZV9TT1VSQ0VfRElSfS9UZXN0cy9Vc2VTV0lHL05hbWVzcGFjZUNzaGFycCIKKyAgIiR7Q01ha2VfQklOQVJZX0RJUn0vVGVzdHMvVXNlU1dJRy9OYW1lc3BhY2VDc2hhcnAiCisgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgIC0tYnVpbGQtcHJvamVjdCBUZXN0TmFtZXNwYWNlQ3NoYXJwCisgIC0tYnVpbGQtb3B0aW9ucyAke2J1aWxkX29wdGlvbnN9CisgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICApCiAKIGFkZF90ZXN0KE5BTUUgVXNlU1dJRy5CYXNpY1B5dGhvbiBDT01NQU5ECiAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgpAQCAtNTUsNiArNjUsMjEgQEAKICAgLS10ZXN0LWNvbW1hbmQgJHtDTUFLRV9DVEVTVF9DT01NQU5EfSAtViAtQyAkPENPTkZJR1VSQVRJT04+CiAgICkKIAoraWYgKENNYWtlX1RFU1RfVXNlU1dJR19Gb3J0cmFuKQorICBjaGVja19sYW5ndWFnZShGb3J0cmFuKQorICBpZiAoQ01BS0VfRm9ydHJhbl9DT01QSUxFUikKKyAgICBhZGRfdGVzdChOQU1FIFVzZVNXSUcuQmFzaWNGb3J0cmFuIENPTU1BTkQKKyAgICAgICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICAgLS1idWlsZC1hbmQtdGVzdAorICAgICAgIiR7Q01ha2VfU09VUkNFX0RJUn0vVGVzdHMvVXNlU1dJRy9CYXNpY0ZvcnRyYW4iCisgICAgICAiJHtDTWFrZV9CSU5BUllfRElSfS9UZXN0cy9Vc2VTV0lHL0Jhc2ljRm9ydHJhbiIKKyAgICAgICR7YnVpbGRfZ2VuZXJhdG9yX2FyZ3N9CisgICAgICAtLWJ1aWxkLXByb2plY3QgVGVzdEJhc2ljRm9ydHJhbgorICAgICAgLS1idWlsZC1vcHRpb25zICR7YnVpbGRfb3B0aW9uc30KKyAgICAgIC0tdGVzdC1jb21tYW5kICR7Q01BS0VfQ1RFU1RfQ09NTUFORH0gLVYgLUMgJDxDT05GSUdVUkFUSU9OPgorICAgICAgKQorICBlbmRpZigpCitlbmRpZigpCiAKIGFkZF90ZXN0KE5BTUUgVXNlU1dJRy5NdWx0aXBsZU1vZHVsZXMgQ09NTUFORAogICAke0NNQUtFX0NURVNUX0NPTU1BTkR9IC1DICQ8Q09ORklHVVJBVElPTj4KZGlmZiAtLWdpdCBhL1Rlc3RzL1VzZVNXSUcvTmFtZXNwYWNlQ3NoYXJwL0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvVXNlU1dJRy9OYW1lc3BhY2VDc2hhcnAvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk1NjZhOAotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1VzZVNXSUcvTmFtZXNwYWNlQ3NoYXJwL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMjUgQEAKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEyLi4uMy4xMykKKworcHJvamVjdChUZXN0TmFtc2VzcGFjZUNzaGFycCBDWFgpCisKK2luY2x1ZGUoQ1Rlc3QpCisKK2ZpbmRfcGFja2FnZShTV0lHIFJFUVVJUkVEKQoraW5jbHVkZSgke1NXSUdfVVNFX0ZJTEV9KQorCitzZXQoVXNlU1dJR19NT0RVTEVfVkVSU0lPTiAyKQorCisKK2FkZF9saWJyYXJ5KG5zX2V4YW1wbGUgU1RBVElDIG5zX2V4YW1wbGUuY3BwKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMobnNfZXhhbXBsZSBQVUJMSUMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSIpCisKK3NldF9wcm9wZXJ0eShTT1VSQ0UgbnNfZXhhbXBsZS5pIFBST1BFUlRZIENQTFVTUExVUyBPTikKKworc3dpZ19hZGRfbGlicmFyeShuc19jc2hhcnAgVFlQRSBTSEFSRUQgTEFOR1VBR0UgY3NoYXJwIFNPVVJDRVMgbnNfZXhhbXBsZS5pKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKG5zX2NzaGFycCBQUk9QRVJUSUVTIFNXSUdfVVNFX1RBUkdFVF9JTkNMVURFX0RJUkVDVE9SSUVTIFRSVUUpCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyhuc19jc2hhcnAgUFJJVkFURSBuc19leGFtcGxlKQorCitnZXRfdGFyZ2V0X3Byb3BlcnR5KE5TX0NTSEFSUF9TVVBQT1JUX0ZJTEVTX0RJUiBuc19jc2hhcnAgU1dJR19TVVBQT1JUX0ZJTEVTX0RJUkVDVE9SWSkKKworYWRkX3Rlc3QoTkFNRSBOYW1lc3BhY2VDc2hhcnAgQ09NTUFORCAiJHtDTUFLRV9DT01NQU5EfSIgIi1EU1VQUE9SVF9GSUxFU19ESVJFQ1RPUlk9JHtOU19DU0hBUlBfU1VQUE9SVF9GSUxFU19ESVJ9IiAtUCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1ZhbGlkYXRlU3VwcG9ydEZpbGVzLmNtYWtlIikKZGlmZiAtLWdpdCBhL1Rlc3RzL1VzZVNXSUcvTmFtZXNwYWNlQ3NoYXJwL1ZhbGlkYXRlU3VwcG9ydEZpbGVzLmNtYWtlIGIvVGVzdHMvVXNlU1dJRy9OYW1lc3BhY2VDc2hhcnAvVmFsaWRhdGVTdXBwb3J0RmlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4ZDU0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1VzZVNXSUcvTmFtZXNwYWNlQ3NoYXJwL1ZhbGlkYXRlU3VwcG9ydEZpbGVzLmNtYWtlCkBAIC0wLDAgKzEsOCBAQAorCitmaWxlIChHTE9CX1JFQ1VSU0UgZmlsZXMgTElTVF9ESVJFQ1RPUklFUyBUUlVFIFJFTEFUSVZFICIke1NVUFBPUlRfRklMRVNfRElSRUNUT1JZfSIgIiR7U1VQUE9SVF9GSUxFU19ESVJFQ1RPUll9LyoiKQorCitsaXN0KFNPUlQgZmlsZXMpCisKK2lmIChOT1QgZmlsZXMgU1RSRVFVQUwgIk5TRXhhbXBsZS5jcztOU0V4YW1wbGVQSU5WT0tFLmNzO25zO25zL215X2NsYXNzX2luX25hbWVzcGFjZS5jcyIpCisgIG1lc3NhZ2UgKEZBVEFMX0VSUk9SICJTdXBwb3J0IGZpbGVzIG5vdCBjb3JyZWN0bHkgY29sbGVjdGVkLiIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9UZXN0cy9Vc2VTV0lHL05hbWVzcGFjZUNzaGFycC9uc19leGFtcGxlLmNwcCBiL1Rlc3RzL1VzZVNXSUcvTmFtZXNwYWNlQ3NoYXJwL25zX2V4YW1wbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwM2RiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Vc2VTV0lHL05hbWVzcGFjZUNzaGFycC9uc19leGFtcGxlLmNwcApAQCAtMCwwICsxLDE0IEBACisjaW5jbHVkZSAibnNfZXhhbXBsZS5ocHAiCisKK25hbWVzcGFjZSBucyB7CisKK3ZvaWQgbXlfY2xhc3NfaW5fbmFtZXNwYWNlOjphZGQoaW50IHZhbHVlKQoreworICBTdW0gKz0gdmFsdWU7Cit9CisKK2ludCBteV9jbGFzc19pbl9uYW1lc3BhY2U6OmdldF9zdW0oKSBjb25zdAoreworICByZXR1cm4gU3VtOworfQorfQpkaWZmIC0tZ2l0IGEvVGVzdHMvVXNlU1dJRy9OYW1lc3BhY2VDc2hhcnAvbnNfZXhhbXBsZS5ocHAgYi9UZXN0cy9Vc2VTV0lHL05hbWVzcGFjZUNzaGFycC9uc19leGFtcGxlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI5YWI1Ci0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvVXNlU1dJRy9OYW1lc3BhY2VDc2hhcnAvbnNfZXhhbXBsZS5ocHAKQEAgLTAsMCArMSwxOSBAQAorI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBucyB7CisKK2NsYXNzIG15X2NsYXNzX2luX25hbWVzcGFjZQoreworcHVibGljOgorICBteV9jbGFzc19pbl9uYW1lc3BhY2UoKQorICAgIDogU3VtKDApCisgIHsKKyAgfQorCisgIHZvaWQgYWRkKGludCB2YWx1ZSk7CisgIGludCBnZXRfc3VtKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgIGludCBTdW07Cit9OworfQpkaWZmIC0tZ2l0IGEvVGVzdHMvVXNlU1dJRy9OYW1lc3BhY2VDc2hhcnAvbnNfZXhhbXBsZS5pIGIvVGVzdHMvVXNlU1dJRy9OYW1lc3BhY2VDc2hhcnAvbnNfZXhhbXBsZS5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNmY3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9Vc2VTV0lHL05hbWVzcGFjZUNzaGFycC9uc19leGFtcGxlLmkKQEAgLTAsMCArMSw4IEBACislbW9kdWxlIE5TRXhhbXBsZQorCisleworI2luY2x1ZGUgIm5zX2V4YW1wbGUuaHBwIgorJX0KKworJW5zcGFjZSBuczo6bXlfY2xhc3NfaW5fbmFtZXNwYWNlOworJWluY2x1ZGUgIm5zX2V4YW1wbGUuaHBwIgpkaWZmIC0tZ2l0IGEvVGVzdHMvVXNlU1dJRy9ydW5tZS5mOTAgYi9UZXN0cy9Vc2VTV0lHL3J1bm1lLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk4NWQzCi0tLSAvZGV2L251bGwKKysrIGIvVGVzdHMvVXNlU1dJRy9ydW5tZS5mOTAKQEAgLTAsMCArMSw3NyBAQAorISBGaWxlIDogcnVubWUuZjkwCitwcm9ncmFtIHJ1bm1lCisgIHVzZSBJU09fRk9SVFJBTl9FTlYKKyAgaW1wbGljaXQgbm9uZQorICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogU1RET1VUID0gT1VUUFVUX1VOSVQKKworICBjYWxsIHJ1bigpCitjb250YWlucworCitzdWJyb3V0aW5lIHJ1bigpCisgIHVzZSBleGFtcGxlCisgIHVzZSBpc29fY19iaW5kaW5nCisgIGltcGxpY2l0IG5vbmUKKworICB0eXBlKENpcmNsZSkgICAgICAgICAgOjogYworICB0eXBlKFNxdWFyZSksIHRhcmdldCAgOjogcyAhICd0YXJnZXQnIGFsbG93cyBpdCB0byBiZSBwb2ludGVkIHRvCisgIGNsYXNzKFNoYXBlKSwgcG9pbnRlciA6OiBzaAorICBpbnRlZ2VyKENfSU5UKSA6OiBuX3NoYXBlcworCisgICEgLS0tLS0gT2JqZWN0IGNyZWF0aW9uIC0tLS0tCisKKyAgd3JpdGUoU1RET1VULCopICJDcmVhdGluZyBzb21lIG9iamVjdHMiCisgIGMgPSBDaXJjbGUoMTAuMGQwKQorICBzID0gU3F1YXJlKDEwLjBkMCkKKworICAhIC0tLS0tIEFjY2VzcyBhIHN0YXRpYyBtZW1iZXIgLS0tLS0KKyAgd3JpdGUoU1RET1VULCcoYSxpMixhKScpIkEgdG90YWwgb2YiLCBzJWdldF9uc2hhcGVzKCksICIgc2hhcGVzIHdlcmUgY3JlYXRlZCIKKworICAhIC0tLS0tIE1lbWJlciBkYXRhIGFjY2VzcyAtLS0tLQorCisgICEgTm90aWNlIGhvdyB3ZSBjYW4gZG8gdGhpcyB1c2luZyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8KKyAgISB0aGUgJ0NpcmNsZScgY2xhc3MuCisgIGNhbGwgYyVzZXRfeCgyMC4wZDApCisgIGNhbGwgYyVzZXRfeSgzMC4wZDApCisKKyAgISBOb3cgdXNlIHRoZSBzYW1lIGZ1bmN0aW9ucyBpbiB0aGUgYmFzZSBjbGFzcworICBzaCA9PiBzCisgIGNhbGwgc2glc2V0X3goLTEwLjBkMCkKKyAgY2FsbCBzaCVzZXRfeSggIDUuMGQwKQorCisgIHdyaXRlKFNURE9VVCwqKSJIZXJlIGlzIHRoZWlyIGN1cnJlbnQgcG9zaXRpb246IgorICB3cml0ZShTVERPVVQsJyhhLGY1LjEsYSxmNS4xLGEpJykiICBDaXJjbGUgPSAoIiwgYyVnZXRfeCgpLCAiLCIsIGMlZ2V0X3koKSwgIiApIgorICB3cml0ZShTVERPVVQsJyhhLGY1LjEsYSxmNS4xLGEpJykiICBTcXVhcmUgPSAoIiwgcyVnZXRfeCgpLCAiLCIsIHMlZ2V0X3koKSwgIiApIgorCisgICEgLS0tLS0gQ2FsbCBzb21lIG1ldGhvZHMgLS0tLS0KKworICB3cml0ZShTVERPVVQsKikiSGVyZSBhcmUgc29tZSBwcm9wZXJ0aWVzIG9mIHRoZSBzaGFwZXM6IgorICBjYWxsIHByaW50X3NoYXBlKGMpCisgIGNhbGwgcHJpbnRfc2hhcGUocykKKworICAhIC0tLS0tIERlbGV0ZSBldmVyeXRoaW5nIC0tLS0tCisKKyAgISBOb3RlOiB0aGlzIGludm9rZXMgdGhlIHZpcnR1YWwgZGVzdHJ1Y3RvcgorICBjYWxsIGMlcmVsZWFzZSgpCisgIGNhbGwgcyVyZWxlYXNlKCkKKworICBuX3NoYXBlcyA9IGMlZ2V0X25zaGFwZXMoKQorICB3cml0ZShTVERPVVQsKikgbl9zaGFwZXMsICJzaGFwZXMgcmVtYWluIgorICBpZiAobl9zaGFwZXMgLz0gMCkgdGhlbgorICAgIHdyaXRlKFNURE9VVCwqKSAiU2hhcGVzIHdlcmUgbm90IGZyZWVkIHByb3Blcmx5ISIKKyAgICBzdG9wIDEKKyAgZW5kaWYKKworICB3cml0ZShTVERPVVQsKikgIkdvb2RieWUiCitlbmQgc3Vicm91dGluZQorCitzdWJyb3V0aW5lIHByaW50X3NoYXBlKHMpCisgIHVzZSBleGFtcGxlLCBvbmx5IDogU2hhcGUKKyAgdXNlIGlzb19jX2JpbmRpbmcKKyAgaW1wbGljaXQgbm9uZQorICBjbGFzcyhTaGFwZSksIGludGVudChpbikgOjogcworCisgIHdyaXRlKFNURE9VVCwqKSIgICAgYXJlYSAgICAgID0gIixzJWFyZWEoKQorICB3cml0ZShTVERPVVQsKikiICAgIHBlcmltZXRlciA9ICIscyVwZXJpbWV0ZXIoKQorZW5kIHN1YnJvdXRpbmUKKworZW5kIHByb2dyYW0KZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTTnNpZ2h0VGVncmEvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL1Rlc3RzL1ZTQW5kcm9pZC9BbmRyb2lkTWFuaWZlc3QueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9WU05zaWdodFRlZ3JhL0FuZHJvaWRNYW5pZmVzdC54bWwKcmVuYW1lIHRvIFRlc3RzL1ZTQW5kcm9pZC9BbmRyb2lkTWFuaWZlc3QueG1sCmRpZmYgLS1naXQgYS9UZXN0cy9WU0FuZHJvaWQvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9WU0FuZHJvaWQvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiMWUwNwotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3RzL1ZTQW5kcm9pZC9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDU3IEBACitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4zKQorcHJvamVjdChWU0FuZHJvaWQgQyBDWFgpCisKK3NldChDTUFLRV9BTkRST0lEX0FSQ0ggYXJtdjctYSkKK3NldChDTUFLRV9BTkRST0lEX1NUTF9UWVBFIHN0bHBvcnRfc2hhcmVkKQorc2V0KENNQUtFX0FORFJPSURfQVBJX01JTiA5KQorc2V0KENNQUtFX0FORFJPSURfQVBJIDE1KQorc2V0KENNQUtFX0FORFJPSURfR1VJIDEpCisKK3NldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9iaW4iKQorc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2xpYiIpCitzZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZICIke1BST0pFQ1RfQklOQVJZX0RJUn0vbGliIikKKworc2V0KEZJUlNUX0NfRklMRVMKKyAgam5pL2ZpcnN0LmMKKyAgam5pL2ZpcnN0LmgKKyAgKQorCitzb3VyY2VfZ3JvdXAoam5pIEZJTEVTICR7RklSU1RfQ19GSUxFU30pCithZGRfbGlicmFyeSh0d29saWItZmlyc3QgJHtGSVJTVF9DX0ZJTEVTfSkKKworc2V0KFNFQ09ORF9DX0ZJTEVTCisgIGpuaS9zZWNvbmQuYworICApCitzZXQoU0VDT05EX0pBVkFfRklMRVMKKyAgc3JjL2NvbS9leGFtcGxlL3R3b2xpYnMvVHdvTGlicy5qYXZhCisgICkKK3NldChTRUNPTkRfUkVTX0ZJTEVTCisgIHJlcy92YWx1ZXMvc3RyaW5ncy54bWwKKyAgKQorc2V0KFNFQ09ORF9BTkRST0lEX0ZJTEVTCisgIEFuZHJvaWRNYW5pZmVzdC54bWwKKyAgKQorCitzb3VyY2VfZ3JvdXAoam5pIEZJTEVTICR7U0VDT05EX0NfRklMRVN9KQorc291cmNlX2dyb3VwKHJlc1xcdmFsdWVzIEZJTEVTICR7U0VDT05EX1JFU19GSUxFU30pCitzb3VyY2VfZ3JvdXAoc3JjXFxjb21cXGV4YW1wbGVcXHR3b2xpYnMgRklMRVMgJHtTRUNPTkRfSkFWQV9GSUxFU30pCithZGRfZXhlY3V0YWJsZSh0d29saWItc2Vjb25kCisgICR7U0VDT05EX0NfRklMRVN9CisgICR7U0VDT05EX0pBVkFfRklMRVN9CisgICR7U0VDT05EX1JFU19GSUxFU30KKyAgJHtTRUNPTkRfQU5EUk9JRF9GSUxFU30KKyAgKQordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXModHdvbGliLXNlY29uZCBQVUJMSUMgam5pKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHR3b2xpYi1zZWNvbmQgdHdvbGliLWZpcnN0KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHR3b2xpYi1zZWNvbmQgbSkgIyB0ZXN0IGxpbmtpbmcgdG8gbGlicmFyeSBieSBuYW1lCisKK3NldF9wcm9wZXJ0eShUQVJHRVQgdHdvbGliLXNlY29uZCBQUk9QRVJUWSBDX1NUQU5EQVJEIDExKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR3b2xpYi1zZWNvbmQgUFJPUEVSVElFUyBBTkRST0lEX1NLSVBfQU5UX1NURVAgMSkKK3NldF90YXJnZXRfcHJvcGVydGllcyh0d29saWItc2Vjb25kIFBST1BFUlRJRVMgQU5EUk9JRF9QUk9HVUFSRCAxKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR3b2xpYi1zZWNvbmQgUFJPUEVSVElFUyBBTkRST0lEX1BST0dVQVJEX0NPTkZJR19QQVRIIHByb2d1YXJkLWFuZHJvaWQudHh0KQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR3b2xpYi1zZWNvbmQgUFJPUEVSVElFUyBBTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRIIC9kZWZpbml0ZWx5L2luc2VjdXJlKQorCitzZXRfcHJvcGVydHkoVEFSR0VUIHR3b2xpYi1zZWNvbmQgUFJPUEVSVFkgQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTICQ8VEFSR0VUX0ZJTEVfRElSOnR3b2xpYi1zZWNvbmQ+KQorc2V0X3Byb3BlcnR5KFRBUkdFVCB0d29saWItc2Vjb25kIFBST1BFUlRZIEFORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMgJDxUQVJHRVRfRklMRV9OQU1FOnR3b2xpYi1zZWNvbmQ+KQorCitzZXRfcHJvcGVydHkoVEFSR0VUIHR3b2xpYi1zZWNvbmQgUFJPUEVSVFkgQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMgJDxUQVJHRVRfRklMRV9ESVI6dHdvbGliLWZpcnN0PikKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTTnNpZ2h0VGVncmEvYnVpbGQueG1sIGIvVGVzdHMvVlNBbmRyb2lkL2J1aWxkLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvVlNOc2lnaHRUZWdyYS9idWlsZC54bWwKcmVuYW1lIHRvIFRlc3RzL1ZTQW5kcm9pZC9idWlsZC54bWwKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTTnNpZ2h0VGVncmEvam5pL2ZpcnN0LmMgYi9UZXN0cy9WU0FuZHJvaWQvam5pL2ZpcnN0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1ZTTnNpZ2h0VGVncmEvam5pL2ZpcnN0LmMKcmVuYW1lIHRvIFRlc3RzL1ZTQW5kcm9pZC9qbmkvZmlyc3QuYwpkaWZmIC0tZ2l0IGEvVGVzdHMvVlNOc2lnaHRUZWdyYS9qbmkvZmlyc3QuaCBiL1Rlc3RzL1ZTQW5kcm9pZC9qbmkvZmlyc3QuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVGVzdHMvVlNOc2lnaHRUZWdyYS9qbmkvZmlyc3QuaApyZW5hbWUgdG8gVGVzdHMvVlNBbmRyb2lkL2puaS9maXJzdC5oCmRpZmYgLS1naXQgYS9UZXN0cy9WU05zaWdodFRlZ3JhL2puaS9zZWNvbmQuYyBiL1Rlc3RzL1ZTQW5kcm9pZC9qbmkvc2Vjb25kLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1ZTTnNpZ2h0VGVncmEvam5pL3NlY29uZC5jCnJlbmFtZSB0byBUZXN0cy9WU0FuZHJvaWQvam5pL3NlY29uZC5jCmRpZmYgLS1naXQgYS9UZXN0cy9WU05zaWdodFRlZ3JhL3Byb2d1YXJkLWFuZHJvaWQudHh0IGIvVGVzdHMvVlNBbmRyb2lkL3Byb2d1YXJkLWFuZHJvaWQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9WU05zaWdodFRlZ3JhL3Byb2d1YXJkLWFuZHJvaWQudHh0CnJlbmFtZSB0byBUZXN0cy9WU0FuZHJvaWQvcHJvZ3VhcmQtYW5kcm9pZC50eHQKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTTnNpZ2h0VGVncmEvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL1Rlc3RzL1ZTQW5kcm9pZC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBUZXN0cy9WU05zaWdodFRlZ3JhL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKcmVuYW1lIHRvIFRlc3RzL1ZTQW5kcm9pZC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmRpZmYgLS1naXQgYS9UZXN0cy9WU05zaWdodFRlZ3JhL3NyYy9jb20vZXhhbXBsZS90d29saWJzL1R3b0xpYnMuamF2YSBiL1Rlc3RzL1ZTQW5kcm9pZC9zcmMvY29tL2V4YW1wbGUvdHdvbGlicy9Ud29MaWJzLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRlc3RzL1ZTTnNpZ2h0VGVncmEvc3JjL2NvbS9leGFtcGxlL3R3b2xpYnMvVHdvTGlicy5qYXZhCnJlbmFtZSB0byBUZXN0cy9WU0FuZHJvaWQvc3JjL2NvbS9leGFtcGxlL3R3b2xpYnMvVHdvTGlicy5qYXZhCmRpZmYgLS1naXQgYS9UZXN0cy9WU01pZGwvQ01ha2VMaXN0cy50eHQgYi9UZXN0cy9WU01pZGwvQ01ha2VMaXN0cy50eHQKaW5kZXggNDMyNTA2Yy4uM2ZmN2MyNyAxMDA2NDQKLS0tIGEvVGVzdHMvVlNNaWRsL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rlc3RzL1ZTTWlkbC9DTWFrZUxpc3RzLnR4dApAQCAtNTYsOCArNTYsOCBAQAogIwogRXh0ZXJuYWxQcm9qZWN0X0FkZChjbGVhbi0ke1BST0pFQ1RfTkFNRX0KICAgRE9XTkxPQURfQ09NTUFORCAiIgotICBDT05GSUdVUkVfQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJlbW92ZV9kaXJlY3RvcnkgIiR7c291cmNlX2Rpcn0iCi0gIEJVSUxEX0NPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSByZW1vdmVfZGlyZWN0b3J5ICIke2JpbmFyeV9kaXJ9IgorICBDT05GSUdVUkVfQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZiAiJHtzb3VyY2VfZGlyfSIKKyAgQlVJTERfQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHJtIC1yZiAiJHtiaW5hcnlfZGlyfSIKICAgSU5TVEFMTF9DT01NQU5EICIiCiAgICkKIApkaWZmIC0tZ2l0IGEvVGVzdHMvVlNOc2lnaHRUZWdyYS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1ZTTnNpZ2h0VGVncmEvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNzRmMmYuLjAwMDAwMDAKLS0tIGEvVGVzdHMvVlNOc2lnaHRUZWdyYS9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjMpCi1wcm9qZWN0KFZTTnNpZ2h0VGVncmEgQyBDWFgpCi0KLXNldChDTUFLRV9BTkRST0lEX0FSQ0ggYXJtdjctYSkKLXNldChDTUFLRV9BTkRST0lEX1NUTF9UWVBFIHN0bHBvcnRfc2hhcmVkKQotc2V0KENNQUtFX0FORFJPSURfQVBJX01JTiA5KQotc2V0KENNQUtFX0FORFJPSURfQVBJIDE1KQotc2V0KENNQUtFX0FORFJPSURfR1VJIDEpCi0KLXNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9iaW4iKQotc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2xpYiIpCi1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZICIke1BST0pFQ1RfQklOQVJZX0RJUn0vbGliIikKLQotc2V0KEZJUlNUX0NfRklMRVMKLSAgam5pL2ZpcnN0LmMKLSAgam5pL2ZpcnN0LmgKLSAgKQotCi1zb3VyY2VfZ3JvdXAoam5pIEZJTEVTICR7RklSU1RfQ19GSUxFU30pCi1hZGRfbGlicmFyeSh0d29saWItZmlyc3QgJHtGSVJTVF9DX0ZJTEVTfSkKLQotc2V0KFNFQ09ORF9DX0ZJTEVTCi0gIGpuaS9zZWNvbmQuYwotICApCi1zZXQoU0VDT05EX0pBVkFfRklMRVMKLSAgc3JjL2NvbS9leGFtcGxlL3R3b2xpYnMvVHdvTGlicy5qYXZhCi0gICkKLXNldChTRUNPTkRfUkVTX0ZJTEVTCi0gIHJlcy92YWx1ZXMvc3RyaW5ncy54bWwKLSAgKQotc2V0KFNFQ09ORF9BTkRST0lEX0ZJTEVTCi0gIEFuZHJvaWRNYW5pZmVzdC54bWwKLSAgKQotCi1zb3VyY2VfZ3JvdXAoam5pIEZJTEVTICR7U0VDT05EX0NfRklMRVN9KQotc291cmNlX2dyb3VwKHJlc1xcdmFsdWVzIEZJTEVTICR7U0VDT05EX1JFU19GSUxFU30pCi1zb3VyY2VfZ3JvdXAoc3JjXFxjb21cXGV4YW1wbGVcXHR3b2xpYnMgRklMRVMgJHtTRUNPTkRfSkFWQV9GSUxFU30pCi1hZGRfZXhlY3V0YWJsZSh0d29saWItc2Vjb25kCi0gICR7U0VDT05EX0NfRklMRVN9Ci0gICR7U0VDT05EX0pBVkFfRklMRVN9Ci0gICR7U0VDT05EX1JFU19GSUxFU30KLSAgJHtTRUNPTkRfQU5EUk9JRF9GSUxFU30KLSAgKQotdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXModHdvbGliLXNlY29uZCBQVUJMSUMgam5pKQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHR3b2xpYi1zZWNvbmQgdHdvbGliLWZpcnN0KQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHR3b2xpYi1zZWNvbmQgbSkgIyB0ZXN0IGxpbmtpbmcgdG8gbGlicmFyeSBieSBuYW1lCi0KLXNldF9wcm9wZXJ0eShUQVJHRVQgdHdvbGliLXNlY29uZCBQUk9QRVJUWSBDX1NUQU5EQVJEIDExKQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR3b2xpYi1zZWNvbmQgUFJPUEVSVElFUyBBTkRST0lEX1NLSVBfQU5UX1NURVAgMSkKLXNldF90YXJnZXRfcHJvcGVydGllcyh0d29saWItc2Vjb25kIFBST1BFUlRJRVMgQU5EUk9JRF9QUk9HVUFSRCAxKQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR3b2xpYi1zZWNvbmQgUFJPUEVSVElFUyBBTkRST0lEX1BST0dVQVJEX0NPTkZJR19QQVRIIHByb2d1YXJkLWFuZHJvaWQudHh0KQotc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR3b2xpYi1zZWNvbmQgUFJPUEVSVElFUyBBTkRST0lEX1NFQ1VSRV9QUk9QU19QQVRIIC9kZWZpbml0ZWx5L2luc2VjdXJlKQotCi1zZXRfcHJvcGVydHkoVEFSR0VUIHR3b2xpYi1zZWNvbmQgUFJPUEVSVFkgQU5EUk9JRF9OQVRJVkVfTElCX0RJUkVDVE9SSUVTICQ8VEFSR0VUX0ZJTEVfRElSOnR3b2xpYi1zZWNvbmQ+KQotc2V0X3Byb3BlcnR5KFRBUkdFVCB0d29saWItc2Vjb25kIFBST1BFUlRZIEFORFJPSURfTkFUSVZFX0xJQl9ERVBFTkRFTkNJRVMgJDxUQVJHRVRfRklMRV9OQU1FOnR3b2xpYi1zZWNvbmQ+KQotCi1zZXRfcHJvcGVydHkoVEFSR0VUIHR3b2xpYi1zZWNvbmQgUFJPUEVSVFkgQU5EUk9JRF9KQVJfRElSRUNUT1JJRVMgJDxUQVJHRVRfRklMRV9ESVI6dHdvbGliLWZpcnN0PikKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTV2luU3RvcmVQaG9uZS9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1ZTV2luU3RvcmVQaG9uZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiOGUxNTdkLi41NmU0YzFkIDEwMDY0NAotLS0gYS9UZXN0cy9WU1dpblN0b3JlUGhvbmUvQ01ha2VMaXN0cy50eHQKKysrIGIvVGVzdHMvVlNXaW5TdG9yZVBob25lL0NNYWtlTGlzdHMudHh0CkBAIC0xMTQsNyArMTE0LDcgQEAKIHNldF9wcm9wZXJ0eShTT1VSQ0UgJHtTVFJJTkdfRklMRVN9IFBST1BFUlRZIFZTX1RPT0xfT1ZFUlJJREUgIlBSSVJlc291cmNlIikKIHNldF9wcm9wZXJ0eShTT1VSQ0UgJHtERUJVR19DT05URU5UX0ZJTEVTfSBQUk9QRVJUWSBWU19ERVBMT1lNRU5UX0NPTlRFTlQgJDxDT05GSUc6RGVidWc+KQogc2V0X3Byb3BlcnR5KFNPVVJDRSAke1JFTEVBU0VfQ09OVEVOVF9GSUxFU30gUFJPUEVSVFkKLSAgVlNfREVQTE9ZTUVOVF9DT05URU5UICQ8T1I6JDxDT05GSUc6UmVsZWFzZT4sJDxDT05GSUc6UmVsV2l0aERlYkluZm8+LCQ8Q09ORklHOk1pblNpemVSZWw+PikKKyAgVlNfREVQTE9ZTUVOVF9DT05URU5UICQ8Q09ORklHOlJlbGVhc2UsUmVsV2l0aERlYkluZm8sTWluU2l6ZVJlbD4pCiAKIHNldF9wcm9wZXJ0eShTT1VSQ0UgJHtQSVhFTFNIQURFUl9GSUxFU30gUFJPUEVSVFkgVlNfU0hBREVSX1RZUEUgUGl4ZWwpCiBzZXRfcHJvcGVydHkoU09VUkNFICR7UElYRUxTSEFERVJfRklMRVN9IFBST1BFUlRZIFZTX1NIQURFUl9FTlRSWVBPSU5UIG1haW5QUykKQEAgLTEyNyw3ICsxMjcsNyBAQAogc2V0X3Byb3BlcnR5KFNPVVJDRSAke1ZFUlRFWFNIQURFUl9GSUxFU30gUFJPUEVSVFkgVlNfU0hBREVSX01PREVMIDQuMF9sZXZlbF85XzMpCiBzZXRfcHJvcGVydHkoU09VUkNFICR7VkVSVEVYU0hBREVSX0ZJTEVTfSBQUk9QRVJUWSBWU19TSEFERVJfRkxBR1MgIi9ERkxBR1NfQURERUQiKQogc2V0X3Byb3BlcnR5KFNPVVJDRSAke1ZFUlRFWFNIQURFUl9GSUxFU30gUFJPUEVSVFkgVlNfU0hBREVSX09VVFBVVF9IRUFERVJfRklMRSAiJChPdXREaXIpJShGaWxlbmFtZSkuaCIpCi0KK3NldF9wcm9wZXJ0eShTT1VSQ0UgJHtWRVJURVhTSEFERVJfRklMRVN9IFBST1BFUlRZIFZTX1NFVFRJTkdTICIkPCQ8Q09ORklHOkRFQlVHPjpTb3VyY2VQcm9wZXJ0eTE9U291cmNlUHJvcGVydHkxVmFsdWU+IikKIAogc291cmNlX2dyb3VwKCJTb3VyY2UgRmlsZXMiIEZJTEVTICR7U09VUkNFX0ZJTEVTfSkKIHNvdXJjZV9ncm91cCgiSGVhZGVyIEZpbGVzIiBGSUxFUyAke0hFQURFUl9GSUxFU30pCkBAIC0xMzUsNiArMTM1LDExIEBACiAKIGFkZF9leGVjdXRhYmxlKCR7RVhFX05BTUV9IFdJTjMyICR7U09VUkNFX0ZJTEVTfSAke0hFQURFUl9GSUxFU30gJHtSRVNPVVJDRV9GSUxFU30pCiBzZXRfcHJvcGVydHkoVEFSR0VUICR7RVhFX05BTUV9IFBST1BFUlRZIFZTX1dJTlJUX0NPTVBPTkVOVCBUUlVFKQorc2V0X3Byb3BlcnR5KFRBUkdFVCAke0VYRV9OQU1FfSBQUk9QRVJUWSBWU19TT1VSQ0VfU0VUVElOR1NfRlhDb21waWxlCisgICJUYXJnZXRQcm9wZXJ0eTE9JDwkPENPTkZJRzpERUJVRz46VGFyZ2V0UHJvcGVydHkxVmFsdWVEZWJ1Zz4kPCQ8Q09ORklHOlJFTEVBU0U+OlRhcmdldFByb3BlcnR5MVZhbHVlUmVsZWFzZT4iKQorCithZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUICR7RVhFX05BTUV9IFBPU1RfQlVJTEQKKyAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1EdmN4cHJvaj0iJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7RVhFX05BTUV9LnZjeHByb2oiIC1QICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vRW5zdXJlUHJvcGVydGllc1NldC5jbWFrZSIpCiAKIHN0cmluZyhTVUJTVFJJTkcgIiR7Q01BS0VfU1lTVEVNX1ZFUlNJT059IiAwLCA0LCBTSE9SVF9WRVJTSU9OKQogCmRpZmYgLS1naXQgYS9UZXN0cy9WU1dpblN0b3JlUGhvbmUvRW5zdXJlUHJvcGVydGllc1NldC5jbWFrZSBiL1Rlc3RzL1ZTV2luU3RvcmVQaG9uZS9FbnN1cmVQcm9wZXJ0aWVzU2V0LmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOGM0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9UZXN0cy9WU1dpblN0b3JlUGhvbmUvRW5zdXJlUHJvcGVydGllc1NldC5jbWFrZQpAQCAtMCwwICsxLDQ1IEBACittYWNybyhlbnN1cmVfcHJvcHNfc2V0IHByb2plY3RGaWxlKQorICBpZihOT1QgRVhJU1RTICIke3Byb2plY3RGaWxlfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUHJvamVjdCBmaWxlICR7cHJvamVjdEZpbGV9IGRvZXMgbm90IGV4aXN0LiIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorCisgIHNldChTb3VyY2VQcm9wZXJ0eUZvdW5kIEZBTFNFKQorICBzZXQoRGVidWdUYXJnZXRQcm9wZXJ0eUZvdW5kIEZBTFNFKQorICBzZXQoUmVsZWFzZVRhcmdldFByb3BlcnR5Rm91bmQgRkFMU0UpCisKKyAgZmlsZShTVFJJTkdTICIke3Byb2plY3RGaWxlfSIgbGluZXMpCisgIGZvcmVhY2gobGluZSBJTiBMSVNUUyBsaW5lcykKKyAgICBpZihsaW5lIE1BVENIRVMgIjxTb3VyY2VQcm9wZXJ0eTEuKkRlYnVnLio+U291cmNlUHJvcGVydHkxVmFsdWU8L1NvdXJjZVByb3BlcnR5MT4iKQorICAgICAgbWVzc2FnZSgiU291cmNlUHJvcGVydHkxIHNldHRpbmcgZm91bmQiKQorICAgICAgc2V0KFNvdXJjZVByb3BlcnR5Rm91bmQgVFJVRSkKKyAgICBlbmRpZigpCisKKyAgICBpZihsaW5lIE1BVENIRVMgIjxUYXJnZXRQcm9wZXJ0eTEuKkRlYnVnLio+VGFyZ2V0UHJvcGVydHkxVmFsdWVEZWJ1ZzwvVGFyZ2V0UHJvcGVydHkxPiIpCisgICAgICBtZXNzYWdlKCJEZWJ1ZyBUYXJnZXRQcm9wZXJ0eTEgc2V0dGluZyBmb3VuZCIpCisgICAgICBzZXQoRGVidWdUYXJnZXRQcm9wZXJ0eUZvdW5kIFRSVUUpCisgICAgZW5kaWYoKQorCisgICAgaWYobGluZSBNQVRDSEVTICI8VGFyZ2V0UHJvcGVydHkxLipSZWxlYXNlLio+VGFyZ2V0UHJvcGVydHkxVmFsdWVSZWxlYXNlPC9UYXJnZXRQcm9wZXJ0eTE+IikKKyAgICAgIG1lc3NhZ2UoIlJlbGVhc2UgVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgZm91bmQiKQorICAgICAgc2V0KFJlbGVhc2VUYXJnZXRQcm9wZXJ0eUZvdW5kIFRSVUUpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBpZiAoTk9UIFNvdXJjZVByb3BlcnR5Rm91bmQpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiU291cmNlUHJvcGVydHkxIHNldHRpbmcgbm90IGZvdW5kIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgaWYgKE5PVCBEZWJ1Z1RhcmdldFByb3BlcnR5Rm91bmQpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRGVidWcgVGFyZ2V0UHJvcGVydHkxIHNldHRpbmcgbm90IGZvdW5kIikKKyAgICByZXR1cm4oKQorICBlbmRpZigpCisKKyAgaWYgKE5PVCBSZWxlYXNlVGFyZ2V0UHJvcGVydHlGb3VuZCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJSZWxlYXNlIFRhcmdldFByb3BlcnR5MSBzZXR0aW5nIG5vdCBmb3VuZCIpCisgICAgcmV0dXJuKCkKKyAgZW5kaWYoKQorZW5kbWFjcm8oKQorCitlbnN1cmVfcHJvcHNfc2V0KCIke3ZjeHByb2p9IikKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZTV2luZG93c0Zvcm1zUmVzeC9XaW5kb3dzRm9ybXNSZXN4L015Rm9ybS5jcHAgYi9UZXN0cy9WU1dpbmRvd3NGb3Jtc1Jlc3gvV2luZG93c0Zvcm1zUmVzeC9NeUZvcm0uY3BwCmluZGV4IDE1NGUyNjguLjBjMzczNzAgMTAwNjQ0Ci0tLSBhL1Rlc3RzL1ZTV2luZG93c0Zvcm1zUmVzeC9XaW5kb3dzRm9ybXNSZXN4L015Rm9ybS5jcHAKKysrIGIvVGVzdHMvVlNXaW5kb3dzRm9ybXNSZXN4L1dpbmRvd3NGb3Jtc1Jlc3gvTXlGb3JtLmNwcApAQCAtMSArMSBAQAotI2luY2x1ZGUgIk15Rm9ybS5oIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyNpbmNsdWRlICJNeUZvcm0uaCIKZGlmZiAtLWdpdCBhL1Rlc3RzL1ZhcmlhYmxlVW51c2VkVmlhU2V0L0NNYWtlTGlzdHMudHh0IGIvVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFTZXQvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMjNhYjIuLjAwMDAwMDAKLS0tIGEvVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFTZXQvQ01ha2VMaXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXNldChVTlVTRURfVkFSSUFCTEUpCi0jIFdhcm5pbmcgc2hvdWxkIG9jY3VyIGhlcmUKLXNldChVTlVTRURfVkFSSUFCTEUgIlVzYWdlIikKLW1lc3NhZ2UoU1RBVFVTICIke1VOVVNFRF9WQVJJQUJMRX0iKQpkaWZmIC0tZ2l0IGEvVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFVbnNldC9DTWFrZUxpc3RzLnR4dCBiL1Rlc3RzL1ZhcmlhYmxlVW51c2VkVmlhVW5zZXQvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNDAzMWQuLjAwMDAwMDAKLS0tIGEvVGVzdHMvVmFyaWFibGVVbnVzZWRWaWFVbnNldC9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIyBOT1RFOiBDaGFuZ2luZyBsaW5lcyBpbiBoZXJlIGNoYW5nZXMgdGhlIHRlc3QgcmVzdWx0cyBzaW5jZSB0aGUgZmlyc3QKLSMgaW5zdGFuY2Ugc2hvdWxkbid0IHdhcm4sIGJ1dCB0aGUgc2Vjb25kIHNob3VsZCBhbmQgdGhleSBoYXZlIHRoZSBzYW1lIG1lc3NhZ2UKLQotIyBBIHdhcm5pbmcgc2hvdWxkIE5PVCBiZSBpc3N1ZWQgZm9yIHRoaXMgbGluZToKLXNldChVTlVTRURfVkFSSUFCTEUpCi0jIFdhcm5pbmcgc2hvdWxkIG9jY3VyIGhlcmU6Ci1zZXQoVU5VU0VEX1ZBUklBQkxFKQotbWVzc2FnZShTVEFUVVMgIiR7VU5VU0VEX1ZBUklBQkxFfSIpCmRpZmYgLS1naXQgYS9UZXN0cy9YQ1Rlc3QvU3RhdGljTGliRXhhbXBsZS9TdGF0aWNMaWJFeGFtcGxlLmMgYi9UZXN0cy9YQ1Rlc3QvU3RhdGljTGliRXhhbXBsZS9TdGF0aWNMaWJFeGFtcGxlLmMKaW5kZXggYjE5OGY4MC4uOGQxNmViNSAxMDA2NDQKLS0tIGEvVGVzdHMvWENUZXN0L1N0YXRpY0xpYkV4YW1wbGUvU3RhdGljTGliRXhhbXBsZS5jCisrKyBiL1Rlc3RzL1hDVGVzdC9TdGF0aWNMaWJFeGFtcGxlL1N0YXRpY0xpYkV4YW1wbGUuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJTdGF0aWNMaWJFeGFtcGxlLmgiCiAKLWludCBGb3VydHlGb3VyKCkKK2ludCBGb3VydHlGb3VyKHZvaWQpCiB7CiAgIHJldHVybiA0NDsKIH0KZGlmZiAtLWdpdCBhL1Rlc3RzL1hDVGVzdC9TdGF0aWNMaWJFeGFtcGxlL1N0YXRpY0xpYkV4YW1wbGUuaCBiL1Rlc3RzL1hDVGVzdC9TdGF0aWNMaWJFeGFtcGxlL1N0YXRpY0xpYkV4YW1wbGUuaAppbmRleCAxNDdhOTA5Li44ODY5NWIxIDEwMDY0NAotLS0gYS9UZXN0cy9YQ1Rlc3QvU3RhdGljTGliRXhhbXBsZS9TdGF0aWNMaWJFeGFtcGxlLmgKKysrIGIvVGVzdHMvWENUZXN0L1N0YXRpY0xpYkV4YW1wbGUvU3RhdGljTGliRXhhbXBsZS5oCkBAIC0xICsxIEBACi1pbnQgRm91cnR5Rm91cigpOworaW50IEZvdXJ0eUZvdXIodm9pZCk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggMDU2NDU0MC4uMjJhM2Q1YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9DTWFrZUxpc3RzLnR4dApAQCAtMTMsNyArMTMsNyBAQAogICBlbmRpZigpCiAgIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtkaXJ9LnN0YW1wCi0gICAgQ09NTUFORCBjbWFrZSAtRSByZW1vdmVfZGlyZWN0b3J5ICR7ZGlyfQorICAgIENPTU1BTkQgY21ha2UgLUUgcm0gLXJmICR7ZGlyfQogICAgIENPTU1BTkQgY21ha2UgLUUgdGFyIHhmICR7Q01BS0VfRE9DX1RBUkJBTEx9CiAgICAgQ09NTUFORCBjbWFrZSAtRSB0b3VjaCAke2Rpcn0uc3RhbXAKICAgICBERVBFTkRTICR7Q01BS0VfRE9DX1RBUkJBTEx9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvR2l0U2V0dXAvc2V0dXAtdXNlciBiL1V0aWxpdGllcy9HaXRTZXR1cC9zZXR1cC11c2VyCmluZGV4IDFhZjQzOWMuLjRjYmQxODQgMTAwNzU1Ci0tLSBhL1V0aWxpdGllcy9HaXRTZXR1cC9zZXR1cC11c2VyCisrKyBiL1V0aWxpdGllcy9HaXRTZXR1cC9zZXR1cC11c2VyCkBAIC0yMCwxMiArMjAsMTkgQEAKICMgUHJvamVjdCBjb25maWd1cmF0aW9uIGluc3RydWN0aW9uczogTk9ORQogCiBmb3IgKCggOyA7ICkpOyBkbwotCXVzZXJfbmFtZT0kKGdpdCBjb25maWcgdXNlci5uYW1lIHx8IGVjaG8gJycpICYmCi0JdXNlcl9lbWFpbD0kKGdpdCBjb25maWcgdXNlci5lbWFpbCB8fCBlY2hvICcnKSAmJgotCWlmIHRlc3QgLW4gIiR1c2VyX25hbWUiIC1hIC1uICIkdXNlcl9lbWFpbCI7IHRoZW4KKwlpZiB0eXBlIC1wIHJldiA+L2Rldi9udWxsICYmIHR5cGUgLXAgY3V0ID4vZGV2L251bGw7IHRoZW4KKwkJaWRlbnQ9IiQoZ2l0IHZhciBHSVRfQVVUSE9SX0lERU5UIDI+L2Rldi9udWxsIHwgcmV2IHwgY3V0IC1kJyAnIC1mMy0gfCByZXYpIgorCWVsaWYgdXNlcl9uYW1lPSQoZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWUpICYmCisJCXVzZXJfZW1haWw9JChnaXQgY29uZmlnIC0tZ2V0IHVzZXIuZW1haWwpOyB0aGVuCisJCWlkZW50PSIkdXNlcl9uYW1lIDwkdXNlcl9lbWFpbD4iCisJZWxzZQorCQlpZGVudD0iIgorCWZpCisKKwlpZiB0ZXN0IC1uICIkaWRlbnQiOyB0aGVuCiAJCWVjaG8gJ1lvdXIgY29tbWl0cyB3aWxsIHJlY29yZCBhcyBBdXRob3I6CiAKLSAgJyIkdXNlcl9uYW1lIDwkdXNlcl9lbWFpbD4iJworICAnIiRpZGVudCInCiAnICYmCiAJCXJlYWQgLWVwICdJcyB0aGUgYXV0aG9yIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MgYWJvdmUgY29ycmVjdD8gW1kvbl0gJyBjb3JyZWN0ICYmCiAJCWlmIHRlc3QgIiRjb3JyZWN0IiAhPSAibiIgLWEgIiRjb3JyZWN0IiAhPSAiTiI7IHRoZW4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9JV1lVL21hcHBpbmcuaW1wIGIvVXRpbGl0aWVzL0lXWVUvbWFwcGluZy5pbXAKaW5kZXggZWYzMWU4Yi4uNjZjYjI4MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL0lXWVUvbWFwcGluZy5pbXAKKysrIGIvVXRpbGl0aWVzL0lXWVUvbWFwcGluZy5pbXAKQEAgLTI0LDggKzI0LDEwIEBACiAgIHsgaW5jbHVkZTogWyAiPGJpdHMvc2hhcmVkX3B0ci5oPiIsIHByaXZhdGUsICI8bWVtb3J5PiIsIHB1YmxpYyBdIH0sCiAgIHsgaW5jbHVkZTogWyAiPGJpdHMvc3RkX2Z1bmN0aW9uLmg+IiwgcHJpdmF0ZSwgIjxmdW5jdGlvbmFsPiIsIHB1YmxpYyBdIH0sCiAgIHsgaW5jbHVkZTogWyAiPGJpdHMvcmVmd3JhcC5oPiIsIHByaXZhdGUsICI8ZnVuY3Rpb25hbD4iLCBwdWJsaWMgXSB9LAorICB7IGluY2x1ZGU6IFsgIjxiaXRzL3N0ZF9hYnMuaD4iLCBwcml2YXRlLCAiPHN0ZGxpYi5oPiIsIHB1YmxpYyBdIH0sCiAgIHsgaW5jbHVkZTogWyAiPGJpdHMvc3RkaW50LWludG4uaD4iLCBwcml2YXRlLCAiPHN0ZGludC5oPiIsIHB1YmxpYyBdIH0sCiAgIHsgaW5jbHVkZTogWyAiPGJpdHMvc3RkaW50LXVpbnRuLmg+IiwgcHJpdmF0ZSwgIjxzdGRpbnQuaD4iLCBwdWJsaWMgXSB9LAorICB7IGluY2x1ZGU6IFsgIjxiaXRzL3N0cmluZ192aWV3LnRjYz4iLCBwcml2YXRlLCAiPHN0cmluZ192aWV3PiIsIHB1YmxpYyBdIH0sCiAgIHsgaW5jbHVkZTogWyAiPGJpdHMvdGltZS5oPiIsIHByaXZhdGUsICI8dGltZS5oPiIsIHB1YmxpYyBdIH0sCiAgIHsgaW5jbHVkZTogWyAiPGJpdHMvdHlwZXMvY2xvY2tfdC5oPiIsIHByaXZhdGUsICI8dGltZS5oPiIsIHB1YmxpYyBdIH0sCiAgIHsgaW5jbHVkZTogWyAiPGJpdHMvdHlwZXMvbWJzdGF0ZV90Lmg+IiwgcHJpdmF0ZSwgIjx3Y2hhci5oPiIsIHB1YmxpYyBdIH0sCkBAIC00Niw2ICs0OCw4IEBACiAgICMgSEFDSzogaXd5dSBzdWdnZXN0cyA8ZXh0L2FsbG9jX3RyYWl0cy5oPiBhbmQgPG1lbW9yeT4gZWFjaCB0aW1lIHZlY3RvcltdIGlzIHVzZWQuCiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2luY2x1ZGUtd2hhdC15b3UtdXNlL2luY2x1ZGUtd2hhdC15b3UtdXNlL2lzc3Vlcy8xNjYKICAgeyBpbmNsdWRlOiBbICI8ZXh0L2FsbG9jX3RyYWl0cy5oPiIsIHByaXZhdGUsICI8dmVjdG9yPiIsIHB1YmxpYyBdIH0sCisgIHsgc3ltYm9sOiBbICJzdGQ6OmFsbG9jYXRvcl90cmFpdHM8c3RkOjphbGxvY2F0b3I8Y21GaWxlTG9jaz4gPjo6dmFsdWVfdHlwZSIsIHByaXZhdGUsICI8dmVjdG9yPiIsIHB1YmxpYyBdIH0sCisgIHsgc3ltYm9sOiBbICJzdGQ6OmFsbG9jYXRvcl90cmFpdHM8c3RkOjphbGxvY2F0b3I8Y21GaWxlTG9ja1Bvb2w6OlNjb3BlUG9vbD4gPjo6dmFsdWVfdHlwZSIsIHByaXZhdGUsICI8dmVjdG9yPiIsIHB1YmxpYyBdIH0sCiAgIHsgc3ltYm9sOiBbICJzdGQ6OmFsbG9jYXRvcl90cmFpdHM8c3RkOjphbGxvY2F0b3I8Y21Db21wdXRlQ29tcG9uZW50R3JhcGg6OlRhcmphbkVudHJ5PiA+Ojp2YWx1ZV90eXBlIiwgcHJpdmF0ZSwgIjx2ZWN0b3I+IiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6YWxsb2NhdG9yX3RyYWl0czxzdGQ6OmFsbG9jYXRvcjxjbUZvcnRyYW5GaWxlPiA+Ojp2YWx1ZV90eXBlIiwgcHJpdmF0ZSwgIjx2ZWN0b3I+IiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6YWxsb2NhdG9yX3RyYWl0czxzdGQ6OmFsbG9jYXRvcjxjbUdyYXBoRWRnZUxpc3Q+ID46OnZhbHVlX3R5cGUiLCBwcml2YXRlLCAiPHZlY3Rvcj4iLCBwdWJsaWMgXSB9LApAQCAtNzQsNiArNzgsNyBAQAogICAjIFVzZSAnLVhpd3l1IC12NycgdG8gc2VlIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZXMgdGhhdCBuZWVkIHRoaXMuCiAgICMgVE9ETzogQ2FuIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIGFuIEAtZXhwcmVzc2lvbj8KICAgI3sgc3ltYm9sOiBbICJAc3RkOjpfX2RlY2F5X2FuZF9zdHJpcDwuKj46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCisgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGJvb2w+OjpfX3R5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjpfX2RlY2F5X2FuZF9zdHJpcDxjaGFyIGNvbnN0ICgmKVsxXT46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCiAgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGNtQ29tbWFuZCAqJj46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCiAgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGNtR2VuZXJhdG9yVGFyZ2V0IComPjo6X190eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKQEAgLTgzLDYxICs4OCwyNCBAQAogICB7IHN5bWJvbDogWyAic3RkOjpfX2RlY2F5X2FuZF9zdHJpcDxzdGQ6OmJhc2ljX3N0cmluZzxjaGFyPiAmPjo6X190eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6X19kZWNheV9hbmRfc3RyaXA8Y29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcj4gJj46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCiAgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGNtRmluZFBhY2thZ2VDb21tYW5kOjpQYXRoTGFiZWwgJj46Ol9fdHlwZSIsIHByaXZhdGUsICJcImNtQ29uZmlndXJlLmhcIiIsIHB1YmxpYyBdIH0sCisgIHsgc3ltYm9sOiBbICJzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwPGNtR2xvYmFsTmluamFHZW5lcmF0b3I6OlRhcmdldEFsaWFzICY+OjpfX3R5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjpfX2RlY2F5X2FuZF9zdHJpcDxfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0IGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Y21DVGVzdFRlc3RQcm9wZXJ0aWVzICosIHN0ZDo6dmVjdG9yPGNtQ1Rlc3RUZXN0SGFuZGxlcjo6Y21DVGVzdFRlc3RQcm9wZXJ0aWVzLCBzdGQ6OmFsbG9jYXRvcjxjbUNUZXN0VGVzdEhhbmRsZXI6OmNtQ1Rlc3RUZXN0UHJvcGVydGllcz4gPiA+ICY+OjpfX3R5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAorICB7IHN5bWJvbDogWyAic3RkOjpfX2RlY2F5X2FuZF9zdHJpcDxjb25zdCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHN0ZDo6cGFpcjxjbTo6c3RyaW5nX3ZpZXcsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoQXJndW1lbnRQYXJzZXI6Okluc3RhbmNlICYsIHZvaWQgKik+ID4gKiwgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGNtOjpzdHJpbmdfdmlldywgc3RkOjpmdW5jdGlvbjx2b2lkIChBcmd1bWVudFBhcnNlcjo6SW5zdGFuY2UgJiwgdm9pZCAqKT4gPiwgc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNtOjpzdHJpbmdfdmlldywgc3RkOjpmdW5jdGlvbjx2b2lkIChBcmd1bWVudFBhcnNlcjo6SW5zdGFuY2UgJiwgdm9pZCAqKT4gPiA+ID4gPiAmPjo6X190eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6X19zdWNjZXNzX3R5cGU8c3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZSwgc3RkOjpyYXRpbzwxLCAxPiA+ID46OnR5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjpfX3N1Y2Nlc3NfdHlwZTxzdGQ6OmNocm9ubzo6ZHVyYXRpb248bG9uZywgc3RkOjpyYXRpbzwxLCAxMDAwMDAwMDAwPiA+ID46OnR5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjplbmFibGVfaWY8dHJ1ZSwgc3RkOjpjaHJvbm86OmR1cmF0aW9uPGxvbmcsIHN0ZDo6cmF0aW88MSwgMT4gPiA+Ojp0eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgInN0ZDo6ZW5hYmxlX2lmPHRydWUsIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxsb25nLCBzdGQ6OnJhdGlvPDYwLCAxPiA+ID46OnR5cGUiLCBwcml2YXRlLCAiXCJjbUNvbmZpZ3VyZS5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjplbmFibGVfaWY8dHJ1ZSwgc3RkOjpjaHJvbm86OmR1cmF0aW9uPGxvbmcsIHN0ZDo6cmF0aW88MSwgMTAwMD4gPiA+Ojp0eXBlIiwgcHJpdmF0ZSwgIlwiY21Db25maWd1cmUuaFwiIiwgcHVibGljIF0gfSwKIAotICAjIEtXSU1MCi0gIHsgaW5jbHVkZTogWyAiPHN0ZGludC5oPiIsIHB1YmxpYywgIlwiY21fa3dpbWwuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8aW50dHlwZXMuaD4iLCBwdWJsaWMsICJcImNtX2t3aW1sLmhcIiIsIHB1YmxpYyBdIH0sCi0KLSAgIyBTZWxmLXN1ZmZpY2llbnQgd3JhcHBlciBmb3IgPHN5cy9zdGF0Lmg+Ci0gIHsgc3ltYm9sOiBbICJtb2RlX3QiLCBwcml2YXRlLCAiXCJjbV9zeXNfc3RhdC5oXCIiLCBwdWJsaWMgXSB9LAotCi0gICMgV3JhcHBlcnMgZm9yIDNyZC1wYXJ0eSBsaWJyYXJpZXMgdXNlZCBmcm9tIHRoZSBzeXN0ZW0uCi0gIHsgaW5jbHVkZTogWyAiPGFyY2hpdmUuaD4iLCBwcml2YXRlLCAiXCJjbV9saWJhcmNoaXZlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPGFyY2hpdmVfZW50cnkuaD4iLCBwcml2YXRlLCAiXCJjbV9saWJhcmNoaXZlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiQDxjdXJsLy4rXFwuaD4iLCBwcml2YXRlLCAiXCJjbV9jdXJsLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPGV4cGF0Lmg+IiwgcHJpdmF0ZSwgIlwiY21fZXhwYXQuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8ZXhwYXRfZXh0ZXJuYWwuaD4iLCBwcml2YXRlLCAiXCJjbV9leHBhdC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIjxqc29uL3JlYWRlci5oPiIsIHByaXZhdGUsICJcImNtX2pzb25jcHBfcmVhZGVyLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPGpzb24vdmFsdWUuaD4iLCBwcml2YXRlLCAiXCJjbV9qc29uY3BwX3ZhbHVlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPGpzb24vd3JpdGVyLmg+IiwgcHJpdmF0ZSwgIlwiY21fanNvbmNwcF93cml0ZXIuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8cmhhc2guaD4iLCBwcml2YXRlLCAiXCJjbV9yaGFzaC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIjx1di5oPiIsIHByaXZhdGUsICJcImNtX3V2LmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiQDx1dlsvLV0uK1xcLmg+IiwgcHJpdmF0ZSwgIlwiY21fdXYuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8a3dpbWwvYWJpLmg+IiwgcHJpdmF0ZSwgIlwiY21fa3dpbWwuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8a3dpbWwvaW50Lmg+IiwgcHJpdmF0ZSwgIlwiY21fa3dpbWwuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICI8emNvbmYuaD4iLCBwcml2YXRlLCAiXCJjbV96bGliLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiPHpsaWIuaD4iLCBwcml2YXRlLCAiXCJjbV96bGliLmhcIiIsIHB1YmxpYyBdIH0sCi0KLSAgIyBXcmFwcGVycyBmb3IgYnVuZGxlZCAzcmQtcGFydHkgbGlicmFyaWVzLgotICB7IGluY2x1ZGU6IFsgIlwiY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZS5oXCIiLCBwcml2YXRlLCAiXCJjbV9saWJhcmNoaXZlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJjbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmhcIiIsIHByaXZhdGUsICJcImNtX2xpYmFyY2hpdmUuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICJAXCJjbWN1cmwvaW5jbHVkZS9jdXJsLy4rXFwuaFwiIiwgcHJpdmF0ZSwgIlwiY21fY3VybC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY21leHBhdC9saWIvZXhwYXQuaFwiIiwgcHJpdmF0ZSwgIlwiY21fZXhwYXQuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICJcImNtZXhwYXQvbGliL2V4cGF0X2V4dGVybmFsLmhcIiIsIHByaXZhdGUsICJcImNtX2V4cGF0LmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJjbWpzb25jcHAvaW5jbHVkZS9qc29uL3JlYWRlci5oXCIiLCBwcml2YXRlLCAiXCJjbV9qc29uY3BwX3JlYWRlci5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY21qc29uY3BwL2luY2x1ZGUvanNvbi92YWx1ZS5oXCIiLCBwcml2YXRlLCAiXCJjbV9qc29uY3BwX3ZhbHVlLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJjbWpzb25jcHAvaW5jbHVkZS9qc29uL3dyaXRlci5oXCIiLCBwcml2YXRlLCAiXCJjbV9qc29uY3BwX3dyaXRlci5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5oXCIiLCBwcml2YXRlLCAiXCJjbV9yaGFzaC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY21saWJ1di9pbmNsdWRlL3V2LmhcIiIsIHByaXZhdGUsICJcImNtX3V2LmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiQFwiY21saWJ1di9pbmNsdWRlL3V2Ly4rXFwuaFwiIiwgcHJpdmF0ZSwgIlwiY21fdXYuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICJcIktXSU1ML2luY2x1ZGUva3dpbWwvYWJpLmhcIiIsIHByaXZhdGUsICJcImNtX2t3aW1sLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJLV0lNTC9pbmNsdWRlL2t3aW1sL2ludC5oXCIiLCBwcml2YXRlLCAiXCJjbV9rd2ltbC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IGluY2x1ZGU6IFsgIlwiY216bGliL2NtX3psaWJfbWFuZ2xlLmhcIiIsIHByaXZhdGUsICJcImNtX3psaWIuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBpbmNsdWRlOiBbICJcImNtemxpYi96Y29uZi5oXCIiLCBwcml2YXRlLCAiXCJjbV96bGliLmhcIiIsIHB1YmxpYyBdIH0sCi0gIHsgaW5jbHVkZTogWyAiXCJjbXpsaWIvemxpYi5oXCIiLCBwcml2YXRlLCAiXCJjbV96bGliLmhcIiIsIHB1YmxpYyBdIH0sCi0KLSAgIyBTeXN0ZW0gc3ltYm9scyB1c2VkIGJ5IGxpYnV2Ci0gIHsgc3ltYm9sOiBbICJTSUdIVVAiLCBwcml2YXRlLCAiXCJjbV91di5oXCIiLCBwdWJsaWMgXSB9LAotICB7IHN5bWJvbDogWyAiU0lHSU5UIiwgcHJpdmF0ZSwgIlwiY21fdXYuaFwiIiwgcHVibGljIF0gfSwKLSAgeyBzeW1ib2w6IFsgInNzaXplX3QiLCBwcml2YXRlLCAiXCJjbV91di5oXCIiLCBwdWJsaWMgXSB9LAotCi0gIHsgc3ltYm9sOiBbICJKc29uOjpBcnJheUluZGV4IiwgcHJpdmF0ZSwgIlwiY21fanNvbmNwcF92YWx1ZS5oXCIiLCBwdWJsaWMgXSB9LAorICAjIFdyYXBwZXJzIGZvciAzcmQtcGFydHkgbGlicmFyaWVzCisgIHsgaW5jbHVkZTogWyAiQDwuKmN1cmwvY3VybHZlci5oPiIsIHByaXZhdGUsICI8Y20zcC9jdXJsL2N1cmwuaD4iLCBwdWJsaWMgXSB9LAorICB7IGluY2x1ZGU6IFsgIkA8Lipqc29uL2ZvcndhcmRzLmg+IiwgcHJpdmF0ZSwgIjxjbTNwL2pzb24vdmFsdWUuaD4iLCBwdWJsaWMgXSB9LAorICB7IGluY2x1ZGU6IFsgIkA8Lip1di8uK1xcLmg+IiwgcHJpdmF0ZSwgIjxjbTNwL3V2Lmg+IiwgcHVibGljIF0gfSwKKyAgeyBpbmNsdWRlOiBbICJAPC4qZXhwYXRfZXh0ZXJuYWwuaD4iLCBwcml2YXRlLCAiPGNtM3AvZXhwYXQuaD4iLCBwdWJsaWMgXSB9LAorICB7IGluY2x1ZGU6IFsgIkA8Lip6Y29uZi5oPiIsIHByaXZhdGUsICI8Y20zcC96bGliLmg+IiwgcHVibGljIF0gfSwKKyAgeyBpbmNsdWRlOiBbICJAPC4qY21femxpYl9tYW5nbGUuaD4iLCBwcml2YXRlLCAiPGNtM3AvemxpYi5oPiIsIHB1YmxpYyBdIH0sCisgICMgIyBTeXN0ZW0gc3ltYm9scyB1c2VkIGJ5IGxpYnV2CisgIHsgc3ltYm9sOiBbICJzc2l6ZV90IiwgcHJpdmF0ZSwgIjxjbTNwL3V2Lmg+IiwgcHVibGljIF0gfSwKIAogICB7IHN5bWJvbDogWyAic3RkOjppZnN0cmVhbSIsIHByaXZhdGUsICJcImNtc3lzL0ZTdHJlYW0uaHh4XCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAic3RkOjpvZnN0cmVhbSIsIHByaXZhdGUsICJcImNtc3lzL0ZTdHJlYW0uaHh4XCIiLCBwdWJsaWMgXSB9LApAQCAtMTQ5LDggKzExNyw2IEBACiAgIHsgaW5jbHVkZTogWyAiPGZzdHJlYW0+IiwgcHVibGljLCAiXCJjbXN5cy9GU3RyZWFtLmh4eFwiIiwgcHVibGljIF0gfSwKIAogICAjIG1ham9yIGFuZCBtaW5vciBhcmUgdXNlZCBhcyBtYWNybyBhcmd1bWVudHMuIFRob3NlIGFyZSBmYWxzZSBtYXRjaGVzLgotICB7IHN5bWJvbDogWyAibWFqb3IiLCBwcml2YXRlLCAiXCJjbV9rd2ltbC5oXCIiLCBwdWJsaWMgXSB9LAotICB7IHN5bWJvbDogWyAibWlub3IiLCBwcml2YXRlLCAiXCJjbV9rd2ltbC5oXCIiLCBwdWJsaWMgXSB9LAogICB7IHN5bWJvbDogWyAibWFqb3IiLCBwcml2YXRlLCAiXCJjbVZlcnNpb24uaFwiIiwgcHVibGljIF0gfSwKICAgeyBzeW1ib2w6IFsgIm1pbm9yIiwgcHJpdmF0ZSwgIlwiY21WZXJzaW9uLmhcIiIsIHB1YmxpYyBdIH0sCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9LV0lNTC9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9LV0lNTC9DTWFrZUxpc3RzLnR4dAppbmRleCAxNWU2NWU1Li4xZDE1ODg0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvS1dJTUwvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL0tXSU1ML0NNYWtlTGlzdHMudHh0CkBAIC0xNyw3ICsxNyw2IEBACiAgIGVuZGlmKCkKICAgc2V0KEtXSU1MX0lOQ0xVREVfUFJFRklYIGt3aW1sKQogZWxzZSgpCi0gIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMiBGQVRBTF9FUlJPUikKICAgc2V0KGt3aW1sX3N0YW5kYWxvbmUgMCkKICAgaWYoS1dJTUxfSU5TVEFMTF9JTkNMVURFX0RJUiBBTkQgTk9UIERFRklORUQgS1dJTUxfSU5DTFVERV9QUkVGSVgpCiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiSG9zdCBwcm9qZWN0IG11c3Qgc2V0IEtXSU1MX0lOQ0xVREVfUFJFRklYIikKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9LV0lNTC9pbmNsdWRlL2t3aW1sL2FiaS5oIGIvVXRpbGl0aWVzL0tXSU1ML2luY2x1ZGUva3dpbWwvYWJpLmgKaW5kZXggZGE1MjVmZC4uMTExMmNiMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL0tXSU1ML2luY2x1ZGUva3dpbWwvYWJpLmgKKysrIGIvVXRpbGl0aWVzL0tXSU1ML2luY2x1ZGUva3dpbWwvYWJpLmgKQEAgLTEzNiw2ICsxMzYsOCBAQAogIyAgZGVmaW5lIEtXSU1MX0FCSV9TSVpFT0ZfREFUQV9QVFIgOAogIyBlbGlmIGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKQogIyAgZGVmaW5lIEtXSU1MX0FCSV9TSVpFT0ZfREFUQV9QVFIgNAorIyBlbGlmIGRlZmluZWQoX01fQVJNNjQpCisjICBkZWZpbmUgS1dJTUxfQUJJX1NJWkVPRl9EQVRBX1BUUiA4CiAjIGVuZGlmCiAjZW5kaWYKICNpZiAhZGVmaW5lZChLV0lNTF9BQklfU0laRU9GX0RBVEFfUFRSKQpAQCAtNDYxLDYgKzQ2MywxMCBAQAogIyAgZGVmaW5lIEtXSU1MX0FCSV9FTkRJQU5fSUQgS1dJTUxfQUJJX0VORElBTl9JRF9CSUcKICMgZW5kaWYKIAorLyogQWFyY2g2NCAoV2luZG93cykgKi8KKyNlbGlmIGRlZmluZWQoX01fQVJNNjQpCisjIGRlZmluZSBLV0lNTF9BQklfRU5ESUFOX0lEIEtXSU1MX0FCSV9FTkRJQU5fSURfTElUVExFCisKIC8qIFh0ZW5zYSAqLwogI2VsaWYgZGVmaW5lZChfX1hURU5TQV9FQl9fKQogIyBkZWZpbmUgS1dJTUxfQUJJX0VORElBTl9JRCBLV0lNTF9BQklfRU5ESUFOX0lEX0JJRwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2UvLmdpdGF0dHJpYnV0ZXMgYi9VdGlsaXRpZXMvUmVsZWFzZS8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGUxMTVmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2UvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKi5wYXRjaCAtd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2UvUkVBRE1FLnJzdCBiL1V0aWxpdGllcy9SZWxlYXNlL1JFQURNRS5yc3QKaW5kZXggZGUyOTRkMS4uOTk5M2FmYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL1JlbGVhc2UvUkVBRE1FLnJzdAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS9SRUFETUUucnN0CkBAIC05LDQ5ICs5LDU3IEBACiBEb2NrZXIKIC0tLS0tLQogCi1UaGUgYGBsaW51eC88YXJjaD4vYGAgZGlyZWN0b3JpZXMgY29udGFpbiBEb2NrZXIgc3BlY2lmaWNhdGlvbnMgdGhhdCBhbnlvbmUKLW1heSB1c2UgdG8gcHJvZHVjZSBMaW51eCBiaW5hcmllcyBmb3IgQ01ha2U6CitUaGUgYGA8b3M+LzxhcmNoPi9gYCBkaXJlY3RvcmllcyBjb250YWluIERvY2tlciBzcGVjaWZpY2F0aW9ucyB0aGF0IGFueW9uZQorbWF5IHVzZSB0byBwcm9kdWNlIGJpbmFyaWVzIGZvciBDTWFrZSBvbiB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczoKIAotKiBgYGxpbnV4LzxhcmNoPi9iYXNlL0RvY2tlcmZpbGVgYDoKKyogYGBsaW51eC94ODZfNjQvYGA6IExpbnV4IG9uIGBgeDg2XzY0YGAgYXJjaGl0ZWN0dXJlcy4KKyogYGB3aW4veDg2L2BgOiBXaW5kb3dzIG9uIGBgeDg2XzY0YGAgYW5kIGBgaTM4NmBgIGFyY2hpdGVjdHVyZXMuCisKK0VhY2ggYGA8b3M+LzxhcmNoPi9gYCBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKworKiBgYDxvcz4vPGFyY2g+L2Jhc2UvRG9ja2VyZmlsZWBgOgogICBQcm9kdWNlcyBhIGJhc2UgaW1hZ2Ugd2l0aCBhIGJ1aWxkIGVudmlyb25tZW50IGZvciBwb3J0YWJsZSBDTWFrZSBiaW5hcmllcy4KICAgVGhpcyBpbWFnZSBpcyBwdWJsaXNoZWQgaW4gdGhlIGBraXR3YXJlL2NtYWtlIERvY2tlciBIdWIgUmVwb3NpdG9yeWBfCi0gIHdpdGggdGFnIGBgYnVpbGQtbGludXgtPGFyY2g+LWJhc2UtPGRhdGU+YGAuCisgIHdpdGggdGFnIGBgYnVpbGQtPG9zPi08YXJjaD4tYmFzZS08ZGF0ZT5gYC4KIAotKiBgYGxpbnV4LzxhcmNoPi9kZXBzL0RvY2tlcmZpbGVgYDoKKyogYGA8b3M+LzxhcmNoPi9kZXBzL0RvY2tlcmZpbGVgYDoKICAgUHJvZHVjZXMgYW4gaW1hZ2Ugd2l0aCBjdXN0b20tYnVpbHQgZGVwZW5kZW5jaWVzIGZvciBwb3J0YWJsZSBDTWFrZSBiaW5hcmllcy4KICAgVGhpcyBpbWFnZSBpcyBwdWJsaXNoZWQgaW4gdGhlIGBraXR3YXJlL2NtYWtlIERvY2tlciBIdWIgUmVwb3NpdG9yeWBfCi0gIHdpdGggdGFnIGBgYnVpbGQtbGludXgtPGFyY2g+LWRlcHMtPGRhdGU+YGAuCisgIHdpdGggdGFnIGBgYnVpbGQtPG9zPi08YXJjaD4tZGVwcy08ZGF0ZT5gYC4KIAotKiBgYGxpbnV4LzxhcmNoPi9Eb2NrZXJmaWxlYGA6Ci0gIFByb2R1Y2UgYW4gaW1hZ2UgY29udGFpbmluZyBhIHBvcnRhYmxlIENNYWtlIGJpbmFyeSBwYWNrYWdlIGZvciBMaW51eC4KKyogYGA8b3M+LzxhcmNoPi9Eb2NrZXJmaWxlYGA6CisgIFByb2R1Y2UgYW4gaW1hZ2UgY29udGFpbmluZyBhIHBvcnRhYmxlIENNYWtlIGJpbmFyeSBwYWNrYWdlLgogICBCdWlsZCB0aGlzIGltYWdlIHVzaW5nIHRoZSBDTWFrZSBzb3VyY2UgZGlyZWN0b3J5IGFzIHRoZSBidWlsZCBjb250ZXh0LgotICBUaGUgcmVzdWx0aW5nIGltYWdlIHdpbGwgaGF2ZSBhbiBgYC9vdXRgYCBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZS4KLSAgRm9yIGV4YW1wbGU6CisgIFRoZSByZXN1bHRpbmcgaW1hZ2Ugd2lsbCBoYXZlIGFuIGBgL291dGBgIChvciBgYGM6L291dGBgKSBkaXJlY3RvcnkKKyAgY29udGFpbmluZyB0aGUgcGFja2FnZS4gIEZvciBleGFtcGxlLCBvbiBMaW51eCBgYHg4Nl82NGBgOgogCiAgIC4uIGNvZGUtYmxvY2s6OiBjb25zb2xlCiAKICAgICAkIGRvY2tlciBidWlsZCAtLXRhZz1jbWFrZTpidWlsZCAtLW5ldHdvcmsgbm9uZSBcCi0gICAgICAgIC1mIGNtYWtlLXNyYy9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC8kYXJjaC9Eb2NrZXJmaWxlIGNtYWtlLXNyYworICAgICAgICAtZiBjbWFrZS1zcmMvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L0RvY2tlcmZpbGUgY21ha2Utc3JjCiAgICAgJCBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSAtLW5hbWUgY21ha2UtYnVpbGQgY21ha2U6YnVpbGQKICAgICAkIGRvY2tlciBjcCBjbWFrZS1idWlsZDovb3V0IC4KLSAgICAkIGxzIG91dC9jbWFrZS0qLUxpbnV4LSRhcmNoLioKKyAgICAkIGxzIG91dC9jbWFrZS0qLUxpbnV4LXg4Nl82NC4qCiAKLSogYGBsaW51eC88YXJjaD4vdGVzdC9Eb2NrZXJmaWxlYGA6CisgIE9uIFdpbmRvd3MsIHRoZSBgYHdpbi94ODZgYCBzcGVjaWZpY2F0aW9ucyBzdXBwb3J0IGJvdGggdGhlIGBgeDg2XzY0YGAKKyAgYW5kIGBgaTM4NmBgIGFyY2hpdGVjdHVyZXMgc2VsZWN0ZWQgdmlhIGBgLS1idWlsZC1hcmcgQVJDSD0uLi5gYC4KKworKiBgYDxvcz4vPGFyY2g+L3Rlc3QvRG9ja2VyZmlsZWBgOgogICBQcm9kdWNlcyBhIGJhc2UgaW1hZ2Ugd2l0aCBhIHRlc3QgZW52aXJvbm1lbnQgZm9yIHBhY2thZ2VkIENNYWtlIGJpbmFyaWVzLgotICBGb3IgZXhhbXBsZSwgYnVpbGQgdGhlIHRlc3QgYmFzZSBpbWFnZToKKyAgRm9yIGV4YW1wbGUsIG9uIExpbnV4IGBgeDg2XzY0YGAsIG9uZSBtYXkgYnVpbGQgdGhlIHRlc3QgYmFzZSBpbWFnZToKIAogICAuLiBjb2RlLWJsb2NrOjogY29uc29sZQogCiAgICAgJCBkb2NrZXIgYnVpbGQgLS10YWc9Y21ha2U6dGVzdC1iYXNlIFwKLSAgICAgICAgY21ha2Utc3JjL1V0aWxpdGllcy9SZWxlYXNlL2xpbnV4LyRhcmNoL3Rlc3QKKyAgICAgICAgY21ha2Utc3JjL1V0aWxpdGllcy9SZWxlYXNlL2xpbnV4L3g4Nl82NC90ZXN0CiAKICAgVGhlbiBjcmVhdGUgYSBsb2NhbCBgYHRlc3QvRG9ja2VyZmlsZWBgIHRvIHByZXBhcmUgYW4gaW1hZ2Ugd2l0aCBib3RoIHRoZQogICBDTWFrZSBzb3VyY2UgdHJlZSBhbmQgdGhlIGFib3ZlLWJ1aWx0IHBhY2thZ2U6OgogCiAgICAgRlJPTSBjbWFrZTp0ZXN0LWJhc2UKICAgICBDT1BZIGNtYWtlLXNyYyAvb3B0L2NtYWtlL3NyYy9jbWFrZQotICAgIEFERCBvdXQvY21ha2UtPHZlcj4tTGludXgtPGFyY2g+LnRhci5neiAvb3B0LwotICAgIEVOViBQQVRIPS9vcHQvY21ha2UtPHZlcj4tTGludXgtPGFyY2g+L2JpbjokUEFUSAorICAgIEFERCBvdXQvY21ha2UtPHZlcj4tTGludXgteDg2XzY0LnRhci5neiAvb3B0LworICAgIEVOViBQQVRIPS9vcHQvY21ha2UtPHZlcj4tTGludXgteDg2XzY0L2JpbjokUEFUSAogCiAgIEJ1aWxkIHRoZSB0ZXN0IGltYWdlIGFuZCBydW4gaXQgdG8gZHJpdmUgdGVzdGluZzoKIApAQCAtNjEsNiArNjksMTAgQEAKICAgICAkIGRvY2tlciBydW4gLS1uZXR3b3JrIG5vbmUgY21ha2U6dGVzdCBiYXNoIHRlc3QtbWFrZS5iYXNoCiAgICAgJCBkb2NrZXIgcnVuIC0tbmV0d29yayBub25lIGNtYWtlOnRlc3QgYmFzaCB0ZXN0LW5pbmphLmJhc2gKIAorICBPbiBXaW5kb3dzLCB0aGUgdGVzdCBzY3JpcHRzIGFyZSBjYWxsZWQgYGB0ZXN0LW5tYWtlLmJhdGBgIGFuZAorICBgYHRlc3QtbmluamEuYmF0YGAuICBJbiB0aGUgYGB4ODZgYCBhcmNoaXRlY3R1cmUgdGhleSBhY2NlcHQgb25lCisgIGFyZ3VtZW50IHNwZWNpZnlpbmcgZWl0aGVyIGBgeDg2XzY0YGAgb3IgYGBpMzg2YGAuCisKIC4uIF9ga2l0d2FyZS9jbWFrZSBEb2NrZXIgSHViIFJlcG9zaXRvcnlgOiBodHRwczovL2h1Yi5kb2NrZXIuY29tL3Iva2l0d2FyZS9jbWFrZQogCiBTY3JpcHRzIGZvciBLaXR3YXJlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS9jcmVhdGUtY21ha2UtcmVsZWFzZS5jbWFrZSBiL1V0aWxpdGllcy9SZWxlYXNlL2NyZWF0ZS1jbWFrZS1yZWxlYXNlLmNtYWtlCmluZGV4IDE3YTIxNTEuLjg4YWM4MjYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9SZWxlYXNlL2NyZWF0ZS1jbWFrZS1yZWxlYXNlLmNtYWtlCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL2NyZWF0ZS1jbWFrZS1yZWxlYXNlLmNtYWtlCkBAIC00NiwxMyArNDYsOSBAQAogCiB3cml0ZV9kb2NzX3NoZWxsX3NjcmlwdCgiY3JlYXRlLSR7Q01BS0VfQ1JFQVRFX1ZFUlNJT059LWRvY3Muc2giKQogd3JpdGVfcmVsX3NoZWxsX3NjcmlwdCgiY3JlYXRlLSR7Q01BS0VfQ1JFQVRFX1ZFUlNJT059LW1hY29zLnNoIiAgIG9zeF9yZWxlYXNlICAgICkgIyBtYWNPUyB4ODZfNjQKLXdyaXRlX3JlbF9zaGVsbF9zY3JpcHQoImNyZWF0ZS0ke0NNQUtFX0NSRUFURV9WRVJTSU9OfS13aW42NC5zaCIgICB3aW42NF9yZWxlYXNlICApICMgV2luZG93cyB4NjQKLXdyaXRlX3JlbF9zaGVsbF9zY3JpcHQoImNyZWF0ZS0ke0NNQUtFX0NSRUFURV9WRVJTSU9OfS13aW4zMi5zaCIgICB3aW4zMl9yZWxlYXNlICApICMgV2luZG93cyB4ODYKIAogbWVzc2FnZSgiQnVpbGQgZG9jcyBmaXJzdCBhbmQgdGhlbiBidWlsZCBmb3IgZWFjaCBwbGF0Zm9ybToKICAuL2NyZWF0ZS0ke0NNQUtFX0NSRUFURV9WRVJTSU9OfS1kb2NzLnNoICAgICYmCiAgLi9jcmVhdGUtJHtDTUFLRV9DUkVBVEVfVkVSU0lPTn0tbWFjb3Muc2ggICAmJgotIC4vY3JlYXRlLSR7Q01BS0VfQ1JFQVRFX1ZFUlNJT059LXdpbjY0LnNoICAgJiYKLSAuL2NyZWF0ZS0ke0NNQUtFX0NSRUFURV9WRVJTSU9OfS13aW4zMi5zaCAgICYmCiAgZWNobyBkb25lCiAiKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L0RvY2tlcmZpbGUgYi9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvRG9ja2VyZmlsZQppbmRleCAxYmE3NTNjLi45NzI5MTNlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvRG9ja2VyZmlsZQorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvRG9ja2VyZmlsZQpAQCAtNSw4ICs1LDkgQEAKICMgQnVpbGQgdXNpbmcgdGhlIENNYWtlIHNvdXJjZSBkaXJlY3RvcnkgYXMgdGhlIGJ1aWxkIGNvbnRleHQuCiAjIFRoZSByZXN1bHRpbmcgaW1hZ2Ugd2lsbCBoYXZlIGFuICcvb3V0JyBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZS4KIAotQVJHIEZST01fSU1BR0VfTkFNRT1raXR3YXJlL2NtYWtlOmJ1aWxkLWxpbnV4LXg4Nl82NC1kZXBzLTIwMTktMDgtMDkKLUFSRyBGUk9NX0lNQUdFX0RJR0VTVD1Ac2hhMjU2OjYzMGMzMjBiMjZhNjdmYzU4NGUwYmM5ODMxNGYxZmIwY2IwYWJjNzY0MzQ4YmIyNjEzZWYwNzQzN2Y3MTAxZjkKKyMgS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgYC5naXRsYWItY2kueW1sYCBgcmVsZWFzZV9saW51eGAgaW1hZ2UuCitBUkcgRlJPTV9JTUFHRV9OQU1FPWtpdHdhcmUvY21ha2U6YnVpbGQtbGludXgteDg2XzY0LWRlcHMtMjAyMC0wNC0wMgorQVJHIEZST01fSU1BR0VfRElHRVNUPUBzaGEyNTY6NzdlOWFiMTgzZjM0NjgwOTkwZGI5ZGE1OTQ1NDczZTI4OGYwZDY1NTZiY2U3OWVjYzE1ODk2NzBkNjU2ZTE1NwogQVJHIEZST01fSU1BR0U9JEZST01fSU1BR0VfTkFNRSRGUk9NX0lNQUdFX0RJR0VTVAogRlJPTSAkRlJPTV9JTUFHRQogCkBAIC0yMCw3ICsyMSw2IEBACiAgJiYgY3AgLi4vY21ha2UvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L2NhY2hlLnR4dCBDTWFrZUNhY2hlLnR4dCBcCiAgJiYgc291cmNlIC9vcHQvcmgvZGV2dG9vbHNldC02L2VuYWJsZSBcCiAgJiYgc291cmNlIC9vcHQvcmgvcmgtcHl0aG9uMzYvZW5hYmxlIFwKLSAmJiBleHBvcnQgTEFORz1lbl9VUy5VVEYtOCBcCiAgJiYgc2V0IC14IFwKICAmJiAuLi9jbWFrZS9ib290c3RyYXAgLS1wYXJhbGxlbD0kKG5wcm9jKSAtLWRvY2Rpcj1kb2MvY21ha2UgXAogICYmIG5pY2UgbWFrZSAtaiAkKG5wcm9jKSBcCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvZGVwcy9Eb2NrZXJmaWxlIGIvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L2RlcHMvRG9ja2VyZmlsZQppbmRleCBkYjU1NTFjLi43ODY0YWFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvUmVsZWFzZS9saW51eC94ODZfNjQvZGVwcy9Eb2NrZXJmaWxlCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL2xpbnV4L3g4Nl82NC9kZXBzL0RvY2tlcmZpbGUKQEAgLTEyOSwxMCArMTI5LDEwIEBACiBSVU4gOiBcCiAgJiYgbWtkaXIgLXAgL29wdC9vcGVuc3NsL3NyYyBcCiAgJiYgY2QgL29wdC9vcGVuc3NsL3NyYyBcCi0gJiYgY3VybCAtTyBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2Uvb3BlbnNzbC0xLjEuMWMudGFyLmd6IFwKLSAmJiBzaGE1MTJzdW0gb3BlbnNzbC0xLjEuMWMudGFyLmd6IHwgZ3JlcCAtcSA4ZTJjNWNjMTFjMTIwZWZiYjdkNzg1MDk4MGNiNmVhYTc4MmQyOWI0OTk2YjNmMzM3OGQzNzYxM2MxNjc5Zjg1MmQ3Y2MwOGE5MGQ2MmU3OGZjZWMzNDM5ZjA2YmRiZWU3MDA2NDU3OWE4YzJhZGFmZmQ5MTUzMmE5N2Y2NDZmZiBcCi0gJiYgdGFyIHh6ZiBvcGVuc3NsLTEuMS4xYy50YXIuZ3ogXAotICYmIGNkIG9wZW5zc2wtMS4xLjFjIFwKKyAmJiBjdXJsIC1PIGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9vcGVuc3NsLTEuMS4xZi50YXIuZ3ogXAorICYmIHNoYTUxMnN1bSBvcGVuc3NsLTEuMS4xZi50YXIuZ3ogfCBncmVwIC1xIGIwMGJkOWI1YWQ1Mjk4ZmJjZWVlYzZiYjE5YzFhYjBjMTA2Y2E1Y2ZiMzExNzg0OTdjNThiZjdlMGUwY2YzMGZjYzE5YzIwZjg0ZTIzYWYzMWNjMTI2YmYyNDQ3ZDNlNGY4NDYxZGI5N2JhZmE3YmQ3OGY2OTU2MTkzMmYwMDBjIFwKKyAmJiB0YXIgeHpmIG9wZW5zc2wtMS4xLjFmLnRhci5neiBcCisgJiYgY2Qgb3BlbnNzbC0xLjEuMWYgXAogICYmIHBhdGNoIC1wMSAtaSAuLi9vcGVuc3NsLXNvdXJjZS5wYXRjaCBcCiAgJiYgc291cmNlIC9vcHQvcmgvZGV2dG9vbHNldC02L2VuYWJsZSBcCiAgJiYgLi9Db25maWd1cmUgLS1wcmVmaXg9L29wdC9vcGVuc3NsIGxpbnV4LWVsZiBuby1hc20gbm8tc2hhcmVkIC1EX1BPU0lYX0NfU09VUkNFPTE5OTUwNkwgLURfUE9TSVhfU09VUkNFPTEgLURfU1ZJRF9TT1VSQ0U9MSAtRF9CU0RfU09VUkNFPTEgXApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L3Rlc3QvY2FjaGUtbmluamEudHh0IGIvVXRpbGl0aWVzL1JlbGVhc2UvbGludXgveDg2XzY0L3Rlc3QvY2FjaGUtbmluamEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDAzNzBlLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9SZWxlYXNlL2xpbnV4L3g4Nl82NC90ZXN0L2NhY2hlLW5pbmphLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotQ01BS0VfRm9ydHJhbl9DT01QSUxFUjpTVFJJTkc9Ci1DTWFrZV9URVNUX0lQT19XT1JLU19DOkJPT0w9T04KLUNNYWtlX1RFU1RfSVBPX1dPUktTX0NYWDpCT09MPU9OCi1DTWFrZV9URVNUX1F0NTpCT09MPU9OCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS9wdXNoLmJhc2ggYi9VdGlsaXRpZXMvUmVsZWFzZS9wdXNoLmJhc2gKaW5kZXggMWM4ZWZlOS4uYTFjNjY1MSAxMDA3NTUKLS0tIGEvVXRpbGl0aWVzL1JlbGVhc2UvcHVzaC5iYXNoCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL3B1c2guYmFzaApAQCAtNTAsNiArNTAsOSBAQAogICAgIGRpcj0idiR7dmVyc2lvbn0iCiBmaQogcmVhZG9ubHkgZGlyCitpZiAhIHRlc3QgLWQgIiR7ZGVzdH0vJHtkaXJ9IjsgdGhlbgorICAgIG1rZGlyICIke2Rlc3R9LyR7ZGlyfSIKK2ZpCiAKIGZvciBmIGluIGNtYWtlLSR7dmVyc2lvbn0qOyBkbwogICAgIGlmICEgdGVzdCAtZiAiJHtmfSI7IHRoZW4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvRG9ja2VyZmlsZSBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvRG9ja2VyZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGY3NDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9Eb2NrZXJmaWxlCkBAIC0wLDAgKzEsMjMgQEAKKyMgZXNjYXBlPWAKKworIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCisjIFByb2R1Y2UgYW4gaW1hZ2UgY29udGFpbmluZyBhIHBvcnRhYmxlIENNYWtlIGJpbmFyeSBwYWNrYWdlIGZvciBXaW5kb3dzLgorIyBCdWlsZCB1c2luZyB0aGUgQ01ha2Ugc291cmNlIGRpcmVjdG9yeSBhcyB0aGUgYnVpbGQgY29udGV4dC4KKyMgVGhlIHJlc3VsdGluZyBpbWFnZSB3aWxsIGhhdmUgYSAnYzpcb3V0JyBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZS4KKworQVJHIEZST01fSU1BR0VfTkFNRT1raXR3YXJlL2NtYWtlOmJ1aWxkLXdpbi14ODYtZGVwcy0yMDIwLTA0LTI3CitBUkcgRlJPTV9JTUFHRV9ESUdFU1Q9QHNoYTI1NjowNGUyMjljMGMwYmEyMjQ3ODU1ZDBlOGMwZmI4N2MxNjg2Zjk4M2FkYmFmYTRjZTQxM2U2MWIzOTA1ZWRiNzZiCitBUkcgRlJPTV9JTUFHRT0kRlJPTV9JTUFHRV9OQU1FJEZST01fSU1BR0VfRElHRVNUCisKK0ZST00gJEZST01fSU1BR0UgYXMgYnVpbGQKK0NPUFkgLiBDOlxjbWFrZVxzcmNcY21ha2UKK0FSRyBBUkNIPSJ4ODZfNjQiCitBUkcgVEVTVD0idHJ1ZSIKK1JVTiBcY21ha2Vcc3JjXGNtYWtlXFV0aWxpdGllc1xSZWxlYXNlXHdpblx4ODZcYnVpbGQuYmF0ICVBUkNIJSAlVEVTVCUKKworIyBQYWNrYWdlIGluIGEgc2VwYXJhdGUgc3RhZ2Ugc28gdGhlIGJ1aWxkZXIgY2FuIG9wdGlvbmFsbHkgc2tpcCBpdC4KK0ZST00gYnVpbGQgYXMgcGFjaworQVJHIFBBQ0s9IlpJUCBXSVgiCitSVU4gXGNtYWtlXHNyY1xjbWFrZVxVdGlsaXRpZXNcUmVsZWFzZVx3aW5ceDg2XHBhY2suYmF0ICVQQUNLJQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9iYXNlL0RvY2tlcmZpbGUgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvRG9ja2VyZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmMwMGY4Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9iYXNlL0RvY2tlcmZpbGUKQEAgLTAsMCArMSwzMCBAQAorIyBlc2NhcGU9YAorCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKKyMgUHJvZHVjZSBhIGJhc2UgaW1hZ2Ugd2l0aCBhIGJ1aWxkIGVudmlyb25tZW50IGZvciBwb3J0YWJsZSBDTWFrZSBiaW5hcmllcy4KKyMgQnVpbGQgdXNpbmcgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgZmlsZSBhcyBpdHMgb3duIGJ1aWxkIGNvbnRleHQuCisKK0FSRyBGUk9NX0lNQUdFX05BTUU9bWNyLm1pY3Jvc29mdC5jb20vZG90bmV0L2ZyYW1ld29yay9zZGs6NC44LXdpbmRvd3NzZXJ2ZXJjb3JlLWx0c2MyMDE5CitBUkcgRlJPTV9JTUFHRV9ESUdFU1Q9QHNoYTI1NjphOTQyODliZmQ2MWJhODljZDE2MmY3Y2Y4NGFmZTBlMzA3ZDRkMjU3NmI0NGI5YmQyNzdlN2IzMDM2Y2NmYTZiCitBUkcgRlJPTV9JTUFHRT0kRlJPTV9JTUFHRV9OQU1FJEZST01fSU1BR0VfRElHRVNUCitGUk9NICRGUk9NX0lNQUdFCisKKyMgVXNlIGEgdHJhZGl0aW9uYWwgV2luZG93cyBzaGVsbC4KK1NIRUxMIFsiY21kIiwgIi9TIiwgIi9DIl0KKworIyBJbnN0YWxsIFZpc3VhbCBTdHVkaW8gQnVpbGQgVG9vbHMgZm9yIGRlc2t0b3AgZGV2ZWxvcG1lbnQgd2l0aCBDKysuCitBREQgaHR0cHM6Ly9ha2EubXMvdnMvMTYvcmVsZWFzZS92c19idWlsZHRvb2xzLmV4ZSBDOlxURU1QXHZzX2J1aWxkdG9vbHMuZXhlCitSVU4gQzpcVEVNUFx2c19idWlsZHRvb2xzLmV4ZSAtLXF1aWV0IC0td2FpdCAtLW5vcmVzdGFydCAtLW5vY2FjaGUgYAorICAgIC0taW5zdGFsbFBhdGggQzpcQnVpbGRUb29scyBgCisgICAgLS1hZGQgTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Xb3JrbG9hZC5WQ1Rvb2xzIGAKKyAgICAtLWFkZCBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbXBvbmVudC5WQy5Ub29scy54ODYueDY0IGAKKyAgICAtLWFkZCBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbXBvbmVudC5WQy5DTEkuU3VwcG9ydCBgCisgICAgLS1hZGQgTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Db21wb25lbnQuVkMuQVRMIGAKKyAgICAtLWFkZCBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbXBvbmVudC5XaW5kb3dzMTBTREsuMTgzNjIgYAorIHx8IElGICIlRVJST1JMRVZFTCUiPT0iMzAxMCIgRVhJVCAwCitSVU4gZGVsIEM6XFRFTVBcdnNfYnVpbGR0b29scy5leGUKKworIyBBZGQgYSB0b29sY2hhaW4gZW52aXJvbm1lbnQgbG9hZGVyIGZvciBlYWNoIGFyY2hpdGVjdHVyZS4KK0NPUFkgbXN2Yy14ODZfNjQuYmF0IG1zdmMtaTM4Ni5iYXQgQzpcCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvbXN2Yy1pMzg2LmJhdCBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvYmFzZS9tc3ZjLWkzODYuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2M2JkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvbXN2Yy1pMzg2LmJhdApAQCAtMCwwICsxIEBACitAQzpcQnVpbGRUb29sc1xWQ1xBdXhpbGlhcnlcQnVpbGRcdmN2YXJzYWxsLmJhdCB4ODYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvYmFzZS9tc3ZjLXg4Nl82NC5iYXQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvbXN2Yy14ODZfNjQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmZmUwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2Jhc2UvbXN2Yy14ODZfNjQuYmF0CkBAIC0wLDAgKzEgQEAKK0BDOlxCdWlsZFRvb2xzXFZDXEF1eGlsaWFyeVxCdWlsZFx2Y3ZhcnNhbGwuYmF0IHg2NApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9idWlsZC5iYXQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2J1aWxkLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTI1NTcyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9idWlsZC5iYXQKQEAgLTAsMCArMSwxOSBAQAorQHJlbSBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworQHJlbSBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCitzZXQgQVJDSD0lMQorc2V0IFRFU1Q9JTIKKworY29weSBcbXN2Yy0lQVJDSCUuYmF0IFxtc3ZjLmJhdAorY2FsbCBcbXN2Yy5iYXQgJiYgQGVjaG8gb24gfHwgZXhpdCAvYgorc2V0IFBBVEg9QzpcbmluamE7JVBBVEglCisKK21rZGlyIFxjbWFrZVxzcmNcY21ha2UtYnVpbGQgJiYgXgorY2QgXGNtYWtlXHNyY1xjbWFrZS1idWlsZCAmJiBeCitjb3B5IC4uXGNtYWtlXFV0aWxpdGllc1xSZWxlYXNlXHdpblx4ODZcY2FjaGUtJUFSQ0glLnR4dCBDTWFrZUNhY2hlLnR4dCAmJiBeCitcY21ha2VcY21ha2VcYmluXGNtYWtlIC4uXGNtYWtlIC1HTmluamEgJiYgXgorbmluamEgJiYgKAorICBpZiAiJVRFU1QlIj09InRydWUiICgKKyAgICBiaW5cY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtaiAlTlVNQkVSX09GX1BST0NFU1NPUlMlIC1SICJeKENNYWtlXC58Q01ha2VMaWJcLnxDTWFrZVNlcnZlckxpYlwufFJ1bkNNYWtlXC5jdGVzdF9tZW1jaGVjaykiCisgICkKKykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvY2FjaGUtaTM4Ni50eHQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2NhY2hlLWkzODYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMGVjYzcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2NhY2hlLWkzODYudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0NNQUtFX0JVSUxEX1RZUEU6U1RSSU5HPVJlbGVhc2UKKworIyBVc2UgQVBJcyBmcm9tIGF0IG1vc3QgV2luZG93cyA3CitDTUFLRV9DX0ZMQUdTOlNUUklORz0tRF9XSU4zMl9XSU5OVD0weDYwMSAtRE5URERJX1ZFUlNJT049MHgwNjAxMDAwMAorQ01BS0VfQ1hYX0ZMQUdTOlNUUklORz0tR1IgLUVIc2MgLURfV0lOMzJfV0lOTlQ9MHg2MDEgLUROVERESV9WRVJTSU9OPTB4MDYwMTAwMDAKK0NNQUtFX0VYRV9MSU5LRVJfRkxBR1M6U1RSSU5HPS1tYWNoaW5lOng4NiAtc3Vic3lzdGVtOmNvbnNvbGUsNi4wMQorCisjIExpbmsgQy9DKysgcnVudGltZSBsaWJyYXJ5IHN0YXRpY2FsbHkuCitDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWTpTVFJJTkc9TXVsdGlUaHJlYWRlZCQ8JDxDT05GSUc6RGVidWc+OkRlYnVnPgorCisjIE5vIHNzbCBzdXBwb3J0IGluIGN1cmw6IHVzZSBuYXRpdmUgV2luZG93cyBBUElzLgorQ01BS0VfVVNFX09QRU5TU0w6Qk9PTD1PRkYKKworIyBFbmFibGUgY21ha2UtZ3VpIHdpdGggc3RhdGljIHF0IHBsdWdpbnMKK0JVSUxEX1F0RGlhbG9nOkJPT0w9VFJVRQorQ01ha2VfR1VJX0RJU1RSSUJVVEVfV0lUSF9RdF9MR1BMOlNUUklORz0zCitDTUFLRV9QUkVGSVhfUEFUSDpTVFJJTkc9QzovcXQtaTM4NgorQ01ha2VfUVRfU1RBVElDX1FXaW5kb3dzSW50ZWdyYXRpb25QbHVnaW5fTElCUkFSSUVTOlNUUklORz1jOi9xdC1pMzg2L3BsdWdpbnMvcGxhdGZvcm1zL3F3aW5kb3dzLmxpYjtjOi9xdC1pMzg2L3BsdWdpbnMvc3R5bGVzL3F3aW5kb3dzdmlzdGFzdHlsZS5saWI7YzovcXQtaTM4Ni9saWIvUXQ1RXZlbnREaXNwYXRjaGVyU3VwcG9ydC5saWI7YzovcXQtaTM4Ni9saWIvUXQ1Rm9udERhdGFiYXNlU3VwcG9ydC5saWI7YzovcXQtaTM4Ni9saWIvUXQ1VGhlbWVTdXBwb3J0LmxpYjtjOi9xdC1pMzg2L2xpYi9xdGZyZWV0eXBlLmxpYjtjOi9xdC1pMzg2L2xpYi9xdGxpYnBuZy5saWI7aW1tMzIubGliO3d0c2FwaTMyLmxpYgorCisjIEJ1aWxkIGRvY3VtZW50YXRpb24uCitDTUFLRV9ET0NfRElSOlNUUklORz1kb2MvY21ha2UKK1BZVEhPTl9FWEVDVVRBQkxFOkZJTEVQQVRIPUM6L3B5dGhvbjMvcHl0aG9uLmV4ZQorU1BISU5YX0VYRUNVVEFCTEU6RklMRVBBVEg9QzovcHl0aG9uMy9TY3JpcHRzL3NwaGlueC1idWlsZC5leGUKK1NQSElOWF9IVE1MOkJPT0w9T04KK1NQSElOWF9NQU46Qk9PTD1PTgorU1BISU5YX1FUSEVMUDpCT09MPU9OCitRQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFOlBBVEg9QzovcXQtaTM4Ni9iaW4vcWhlbHBnZW5lcmF0b3IuZXhlCisKKyMgTm8gYm9vdHN0cmFwIHdpdGggTVNWQyB0b29scy4KK0NNQUtFX1NLSVBfQk9PVFNUUkFQX1RFU1Q6U1RSSU5HPVRSVUUKKworIyBObyBNRkMgaW4gYmFzZSBpbWFnZS4KK0NURVNUX1JVTl9NRkM6Qk9PTD1PRkYKKworIyBObyBGb3J0cmFuIGNvbXBpbGVyLgorQ01BS0VfRm9ydHJhbl9DT01QSUxFUjpGSUxFUEFUSD1GQUxTRQorCisjIE5vIFN3aWZ0IGNvbXBpbGVyLgorQ01BS0VfU3dpZnRfQ09NUElMRVI6RklMRVBBVEg9RkFMU0UKKworIyBTa2lwIFF0NSB0ZXN0cyBiZWNhdXNlIG91ciBRdCBpcyBzdGF0aWMuCitDTWFrZV9URVNUX1F0NTpCT09MPUZBTFNFCisKKyMgQ1BhY2sgcGFja2FnZSBmaWxlIG5hbWUgY29tcG9uZW50IGZvciB0aGlzIHBsYXRmb3JtLgorQ1BBQ0tfU1lTVEVNX05BTUU6U1RSSU5HPXdpbjMyLXg4NgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9jYWNoZS14ODZfNjQudHh0IGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9jYWNoZS14ODZfNjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjY2Y5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2NhY2hlLXg4Nl82NC50eHQKQEAgLTAsMCArMSw0NSBAQAorQ01BS0VfQlVJTERfVFlQRTpTVFJJTkc9UmVsZWFzZQorCisjIFVzZSBBUElzIGZyb20gYXQgbW9zdCBXaW5kb3dzIDcKK0NNQUtFX0NfRkxBR1M6U1RSSU5HPS1EX1dJTjMyX1dJTk5UPTB4NjAxIC1ETlRERElfVkVSU0lPTj0weDA2MDEwMDAwCitDTUFLRV9DWFhfRkxBR1M6U1RSSU5HPS1HUiAtRUhzYyAtRF9XSU4zMl9XSU5OVD0weDYwMSAtRE5URERJX1ZFUlNJT049MHgwNjAxMDAwMAorQ01BS0VfRVhFX0xJTktFUl9GTEFHUzpTVFJJTkc9LW1hY2hpbmU6eDY0IC1zdWJzeXN0ZW06Y29uc29sZSw2LjAxCisKKyMgTGluayBDL0MrKyBydW50aW1lIGxpYnJhcnkgc3RhdGljYWxseS4KK0NNQUtFX01TVkNfUlVOVElNRV9MSUJSQVJZOlNUUklORz1NdWx0aVRocmVhZGVkJDwkPENPTkZJRzpEZWJ1Zz46RGVidWc+CisKKyMgTm8gc3NsIHN1cHBvcnQgaW4gY3VybDogdXNlIG5hdGl2ZSBXaW5kb3dzIEFQSXMuCitDTUFLRV9VU0VfT1BFTlNTTDpCT09MPU9GRgorCisjIEVuYWJsZSBjbWFrZS1ndWkgd2l0aCBzdGF0aWMgcXQgcGx1Z2lucworQlVJTERfUXREaWFsb2c6Qk9PTD1UUlVFCitDTWFrZV9HVUlfRElTVFJJQlVURV9XSVRIX1F0X0xHUEw6U1RSSU5HPTMKK0NNQUtFX1BSRUZJWF9QQVRIOlNUUklORz1DOi9xdC14ODZfNjQKK0NNYWtlX1FUX1NUQVRJQ19RV2luZG93c0ludGVncmF0aW9uUGx1Z2luX0xJQlJBUklFUzpTVFJJTkc9YzovcXQteDg2XzY0L3BsdWdpbnMvcGxhdGZvcm1zL3F3aW5kb3dzLmxpYjtjOi9xdC14ODZfNjQvcGx1Z2lucy9zdHlsZXMvcXdpbmRvd3N2aXN0YXN0eWxlLmxpYjtjOi9xdC14ODZfNjQvbGliL1F0NUV2ZW50RGlzcGF0Y2hlclN1cHBvcnQubGliO2M6L3F0LXg4Nl82NC9saWIvUXQ1Rm9udERhdGFiYXNlU3VwcG9ydC5saWI7YzovcXQteDg2XzY0L2xpYi9RdDVUaGVtZVN1cHBvcnQubGliO2M6L3F0LXg4Nl82NC9saWIvcXRmcmVldHlwZS5saWI7YzovcXQteDg2XzY0L2xpYi9xdGxpYnBuZy5saWI7aW1tMzIubGliO3d0c2FwaTMyLmxpYgorCisjIEJ1aWxkIGRvY3VtZW50YXRpb24uCitDTUFLRV9ET0NfRElSOlNUUklORz1kb2MvY21ha2UKK1BZVEhPTl9FWEVDVVRBQkxFOkZJTEVQQVRIPUM6L3B5dGhvbjMvcHl0aG9uLmV4ZQorU1BISU5YX0VYRUNVVEFCTEU6RklMRVBBVEg9QzovcHl0aG9uMy9TY3JpcHRzL3NwaGlueC1idWlsZC5leGUKK1NQSElOWF9IVE1MOkJPT0w9T04KK1NQSElOWF9NQU46Qk9PTD1PTgorU1BISU5YX1FUSEVMUDpCT09MPU9OCitRQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFOlBBVEg9QzovcXQteDg2XzY0L2Jpbi9xaGVscGdlbmVyYXRvci5leGUKKworIyBObyBib290c3RyYXAgd2l0aCBNU1ZDIHRvb2xzLgorQ01BS0VfU0tJUF9CT09UU1RSQVBfVEVTVDpTVFJJTkc9VFJVRQorCisjIE5vIE1GQyBpbiBiYXNlIGltYWdlLgorQ1RFU1RfUlVOX01GQzpCT09MPU9GRgorCisjIE5vIEZvcnRyYW4gY29tcGlsZXIuCitDTUFLRV9Gb3J0cmFuX0NPTVBJTEVSOkZJTEVQQVRIPUZBTFNFCisKKyMgTm8gU3dpZnQgY29tcGlsZXIuCitDTUFLRV9Td2lmdF9DT01QSUxFUjpGSUxFUEFUSD1GQUxTRQorCisjIFNraXAgUXQ1IHRlc3RzIGJlY2F1c2Ugb3VyIFF0IGlzIHN0YXRpYy4KK0NNYWtlX1RFU1RfUXQ1OkJPT0w9RkFMU0UKKworIyBDUGFjayBwYWNrYWdlIGZpbGUgbmFtZSBjb21wb25lbnQgZm9yIHRoaXMgcGxhdGZvcm0uCitDUEFDS19TWVNURU1fTkFNRTpTVFJJTkc9d2luNjQteDY0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2RlcHMvRG9ja2VyZmlsZSBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvZGVwcy9Eb2NrZXJmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjk0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2RlcHMvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDEyNyBAQAorIyBlc2NhcGU9YAorCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKKyMgUHJvZHVjZSBhbiBpbWFnZSB3aXRoIGN1c3RvbS1idWlsdCBkZXBlbmRlbmNpZXMgZm9yIHBvcnRhYmxlIENNYWtlIGJpbmFyaWVzLgorIyBCdWlsZCB1c2luZyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBmaWxlIGFzIGl0cyBvd24gYnVpbGQgY29udGV4dC4KKworQVJHIEZST01fSU1BR0VfTkFNRT1raXR3YXJlL2NtYWtlOmJ1aWxkLXdpbi14ODYtYmFzZS0yMDIwLTA0LTI3CitBUkcgRlJPTV9JTUFHRV9ESUdFU1Q9QHNoYTI1NjpjNWE4OTQ4ZDYzNjMxOWNkYWMwMTgwMjY2OTk2NTU4YmI2ZmIwMzcxMjU3OTJiNWI4MzdmMDY5ZDAyZTUzZDdjCitBUkcgRlJPTV9JTUFHRT0kRlJPTV9JTUFHRV9OQU1FJEZST01fSU1BR0VfRElHRVNUCisKKyMgUXQgU291cmNlCitGUk9NICRGUk9NX0lNQUdFIEFTIHF0LXNyYworCisjIEpPTQorQUREIGh0dHA6Ly9kb3dubG9hZC5xdC1wcm9qZWN0Lm9yZy9vZmZpY2lhbF9yZWxlYXNlcy9qb20vdW5zdGFibGUtam9tLnppcCBDOlxqb21cam9tLnppcAorUlVOIGNkIFxqb20gYAorICYmIHBvd2Vyc2hlbGwgLUNvbW1hbmQgIiBgCisgICAgaWYgKCQoR2V0LUZpbGVIYXNoIGpvbS56aXApLkhhc2ggLWVxICcxMjhmZGQ4NDZmZTI0Zjg1OTRlZWQzN2QxZDg5MjlhMGVhNzhkZjU2MzUzN2MwYzFiMTg2MWE2MzUwMTNmZmY4Jykge2AKKyAgICAgIEV4cGFuZC1BcmNoaXZlIC1QYXRoIGpvbS56aXAgLURlc3RpbmF0aW9uUGF0aCAuYAorICAgIH0gZWxzZSB7YAorICAgICAgZXhpdCAxIGAKKyAgICB9IiBgCisgJiYgZGVsIGpvbS56aXAKKworIyBYWgorQUREIGh0dHBzOi8vdHVrYWFuaS5vcmcveHoveHotNS4yLjUtd2luZG93cy56aXAgQzpceHpceHouemlwCitSVU4gY2QgXHh6IGAKKyAmJiBwb3dlcnNoZWxsIC1Db21tYW5kICIgYAorICAgIGlmICgkKEdldC1GaWxlSGFzaCB4ei56aXApLkhhc2ggLWVxICdkODNiODJjYTc1ZGZhYjM5YTEzZGRhMzY0MzY3YjM0OTcwYzc4MWE5ZGY0ZDQxMjY0ZGI5MjJhYzNhOGY2MjJkJykge2AKKyAgICAgIEV4cGFuZC1BcmNoaXZlIC1QYXRoIHh6LnppcCAtRGVzdGluYXRpb25QYXRoIC5gCisgICAgfSBlbHNlIHtgCisgICAgICBleGl0IDEgYAorICAgIH0iIGAKKyAmJiBkZWwgeHouemlwCisKKyMgR2l0CitBREQgaHR0cHM6Ly9naXRodWIuY29tL2dpdC1mb3Itd2luZG93cy9naXQvcmVsZWFzZXMvZG93bmxvYWQvdjIuMjYuMi53aW5kb3dzLjEvTWluR2l0LTIuMjYuMi1idXN5Ym94LTY0LWJpdC56aXAgQzpcZ2l0XGdpdC56aXAKK1JVTiBjZCBcZ2l0IGAKKyAmJiBwb3dlcnNoZWxsIC1Db21tYW5kICIgYAorICAgIGlmICgkKEdldC1GaWxlSGFzaCBnaXQuemlwKS5IYXNoIC1lcSAnZTgzNGVhNzNmZTA5M2ZiMTgwZGM0NWY2N2ExZjJhN2E1NjZkYWI1M2QxZDQ1YmMzY2QxNTAxMDZmNWM0MDUyMCcpIHtgCisgICAgICBFeHBhbmQtQXJjaGl2ZSAtUGF0aCBnaXQuemlwIC1EZXN0aW5hdGlvblBhdGggLmAKKyAgICB9IGVsc2Uge2AKKyAgICAgIGV4aXQgMSBgCisgICAgfSIgYAorICYmIGRlbCBnaXQuemlwCisKKyMgUXQgU291cmNlCitBREQgaHR0cHM6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC81LjEyLzUuMTIuMS9zaW5nbGUvcXQtZXZlcnl3aGVyZS1zcmMtNS4xMi4xLnRhci54eiBDOlxxdC1zcmNccXQudGFyLnh6CitSVU4gY2QgXHF0LXNyYyBgCisgJiYgcG93ZXJzaGVsbCAtQ29tbWFuZCAiIGAKKyAgICBpZiAoJChHZXQtRmlsZUhhc2ggcXQudGFyLnh6KS5IYXNoIC1lcSAnY2FmZmJkNjI1YzdiYzEwZmY4YzVjN2EyN2RiYzdkODRmYTRkZTE0Njk3NWMwZTFmZmU5MDRiNTE0Y2NkNmRhNCcpIHtgCisgICAgICBceHpcYmluX3g4Ni02NFx4eiAtZCBxdC50YXIueHogYAorICAgIH0gZWxzZSB7YAorICAgICAgZXhpdCAxIGAKKyAgICB9IiBgCisgJiYgdGFyIHh2ZiBxdC50YXIgYAorICYmIGRlbCBxdC50YXIgYAorICYmIG1vdmUgcXQtZXZlcnl3aGVyZS1zcmMtNS4xMi4xIHF0CitDT1BZIHF0LWJ1aWxkLmJhdCBxdC1pbnN0YWxsLnBhdGNoIEM6XHF0LXNyY1wKKworIyBRdCBCdWlsZCBpMzg2CitGUk9NIHF0LXNyYyBhcyBxdC1pMzg2CitSVU4gXHF0LXNyY1xxdC1idWlsZC5iYXQgaTM4NgorCisjIFF0IEJ1aWxkIHg4Nl82NAorRlJPTSBxdC1zcmMgYXMgcXQteDg2XzY0CitSVU4gXHF0LXNyY1xxdC1idWlsZC5iYXQgeDg2XzY0CisKKyMgT3V0cHV0IFN0YWdlCitGUk9NICRGUk9NX0lNQUdFCisKKyMgUXQKK0NPUFkgLS1mcm9tPXF0LWkzODYgQzpccXQtaTM4NiBDOlxxdC1pMzg2CitDT1BZIC0tZnJvbT1xdC14ODZfNjQgQzpccXQteDg2XzY0IEM6XHF0LXg4Nl82NAorCisjIFdJWAorQUREIGh0dHBzOi8vZ2l0aHViLmNvbS93aXh0b29sc2V0L3dpeDMvcmVsZWFzZXMvZG93bmxvYWQvd2l4MzExMnJ0bS93aXgzMTEtYmluYXJpZXMuemlwIEM6XHdpeFx3aXguemlwCitSVU4gY2QgXHdpeCBgCisgJiYgcG93ZXJzaGVsbCAtQ29tbWFuZCAiIGAKKyAgICBpZiAoJChHZXQtRmlsZUhhc2ggd2l4LnppcCkuSGFzaCAtZXEgJzJjMTg4OGQ1ZDFkYmEzNzdmYzdmYTE0NDQ0Y2Y1NTY5NjM3NDdmZjlhMGEyODlhMzU5OWNmMDlkYTAzYjllMmUnKSB7YAorICAgICAgRXhwYW5kLUFyY2hpdmUgLVBhdGggd2l4LnppcCAtRGVzdGluYXRpb25QYXRoIC5gCisgICAgfSBlbHNlIHtgCisgICAgICBleGl0IDEgYAorICAgIH0iIGAKKyAmJiBkZWwgd2l4LnppcAorCisjIFB5dGhvbiBhbmQgU3BoaW54CitBREQgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLzMuOC4yL3B5dGhvbi0zLjguMi1lbWJlZC1hbWQ2NC56aXAgQzpccHl0aG9uM1xweXRob24zLnppcAorUlVOIGNkIFxweXRob24zIGAKKyAmJiBwb3dlcnNoZWxsIC1Db21tYW5kICIgYAorICAgIGlmICgkKEdldC1GaWxlSGFzaCBweXRob24zLnppcCkuSGFzaCAtZXEgJzI5MjdhM2E2ZDBmZTFmNmUwNDdhODYwNTkyMjBhZWRhMzc0ZWVkMjMxMTNiOWVmNTM1NWFjYjg0NTJkNTY0NTMnKSB7YAorICAgICAgRXhwYW5kLUFyY2hpdmUgLVBhdGggcHl0aG9uMy56aXAgLURlc3RpbmF0aW9uUGF0aCAuYAorICAgIH0gZWxzZSB7YAorICAgICAgZXhpdCAxIGAKKyAgICB9IiBgCisgJiYgZGVsIHB5dGhvbjMuemlwIGAKKyAmJiBjdXJsIC1PIGh0dHBzOi8vYm9vdHN0cmFwLnB5cGEuaW8vZ2V0LXBpcC5weSBgCisgJiYgcHl0aG9uIGdldC1waXAucHkgYAorICYmIGRlbCBweXRob24zOC5fcHRoIGAKKyAmJiBzZXQgIlBZX0xJQlM9QzpccHl0aG9uM1xMaWI7QzpcUHl0aG9uM1xMaWJcc2l0ZS1wYWNrYWdlcyIgYAorICYmIHNldCAiUFlfUElQPUM6XHB5dGhvbjNcU2NyaXB0cyIgYAorICYmIFNjcmlwdHNccGlwIGluc3RhbGwgLS1uby13YXJuLXNjcmlwdC1sb2NhdGlvbiBzcGhpbng9PTIuMS4yCisKKyMgTmluamEKK0FERCBodHRwczovL2dpdGh1Yi5jb20vbmluamEtYnVpbGQvbmluamEvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTAuMC9uaW5qYS13aW4uemlwIEM6XG5pbmphXG5pbmphLnppcAorUlVOIGNkIFxuaW5qYSBgCisgJiYgcG93ZXJzaGVsbCAtQ29tbWFuZCAiIGAKKyAgICBpZiAoJChHZXQtRmlsZUhhc2ggbmluamEuemlwKS5IYXNoIC1lcSAnOTE5ZmQxNThjMTZiZjEzNWU4YTg1MGJiNDA0NmVjMWNlMjhhNzQzOWVlMDhiOTc3Y2QwYjdmNmIzNDYzZDE3OCcpIHtgCisgICAgICBFeHBhbmQtQXJjaGl2ZSAtUGF0aCBuaW5qYS56aXAgLURlc3RpbmF0aW9uUGF0aCAuYAorICAgIH0gZWxzZSB7YAorICAgICAgZXhpdCAxIGAKKyAgICB9IiBgCisgJiYgZGVsIG5pbmphLnppcAorCisjIENNYWtlCitBREQgaHR0cHM6Ly9naXRodWIuY29tL0tpdHdhcmUvQ01ha2UvcmVsZWFzZXMvZG93bmxvYWQvdjMuMTcuMS9jbWFrZS0zLjE3LjEtd2luNjQteDY0LnppcCBDOlxjbWFrZVxjbWFrZS56aXAKK1JVTiBjZCBcY21ha2UgYAorICYmIHBvd2Vyc2hlbGwgLUNvbW1hbmQgIiBgCisgICAgaWYgKCQoR2V0LUZpbGVIYXNoIGNtYWtlLnppcCkuSGFzaCAtZXEgJ2E1YWY3YTJmZTczZjM0MDcwNDU2Mzk3ZTk0MDA0MmU0NDY5ZjA3MjEyNmM4Mjk3NGY0NDMzM2FjNDNkNDc4YjEnKSB7YAorICAgICAgRXhwYW5kLUFyY2hpdmUgLVBhdGggY21ha2UuemlwIC1EZXN0aW5hdGlvblBhdGggLmAKKyAgICB9IGVsc2Uge2AKKyAgICAgIGV4aXQgMSBgCisgICAgfSIgYAorICYmIG1vdmUgY21ha2UtKi13aW42NC14NjQgY21ha2UgYAorICYmIGRlbCBjbWFrZS56aXAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvZGVwcy9xdC1idWlsZC5iYXQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2RlcHMvcXQtYnVpbGQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4YmZhODEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L2RlcHMvcXQtYnVpbGQuYmF0CkBAIC0wLDAgKzEsNDcgQEAKK3NldCBBUkNIPSUxCitjYWxsIFxtc3ZjLSVBUkNIJS5iYXQgJiYgQGVjaG8gb24gfHwgZXhpdCAvYgorbWtkaXIgXHF0LXNyY1xxdC1idWlsZCAmJiBeCitjZCBccXQtc3JjXHF0LWJ1aWxkICYmIF4KKy4uXHF0XGNvbmZpZ3VyZS5iYXQgXgorICAtcHJlZml4IEM6L3F0LSVBUkNIJSBeCisgIC1zdGF0aWMgXgorICAtc3RhdGljLXJ1bnRpbWUgXgorICAtcmVsZWFzZSBeCisgIC1vcGVuc291cmNlIC1jb25maXJtLWxpY2Vuc2UgXgorICAtcGxhdGZvcm0gd2luMzItbXN2YyBeCisgIC1tcCBeCisgIC1ndWkgXgorICAtd2lkZ2V0cyBeCisgIC1xdC1wY3JlIF4KKyAgLXF0LXpsaWIgXgorICAtcXQtbGlicG5nIF4KKyAgLXF0LWxpYmpwZWcgXgorICAtbm8tZ2lmIF4KKyAgLW5vLWljdSBeCisgIC1uby1wY2ggXgorICAtbm8tYW5nbGUgXgorICAtbm8tb3BlbmdsIF4KKyAgLW5vLWRidXMgXgorICAtbm8taGFyZmJ1enogXgorICAtbm8tYWNjZXNzaWJpbGl0eSBeCisgIC1za2lwIGRlY2xhcmF0aXZlIF4KKyAgLXNraXAgbXVsdGltZWRpYSBeCisgIC1za2lwIHF0Y2FudmFzM2QgXgorICAtc2tpcCBxdGNvbm5lY3Rpdml0eSBeCisgIC1za2lwIHF0ZGVjbGFyYXRpdmUgXgorICAtc2tpcCBxdGxvY2F0aW9uIF4KKyAgLXNraXAgcXRtdWx0aW1lZGlhIF4KKyAgLXNraXAgcXRzZW5zb3JzIF4KKyAgLXNraXAgcXRzZXJpYWxwb3J0IF4KKyAgLXNraXAgcXRzdmcgXgorICAtc2tpcCBxdHdheWxhbmQgXgorICAtc2tpcCBxdHdlYmNoYW5uZWwgXgorICAtc2tpcCBxdHdlYmVuZ2luZSBeCisgIC1za2lwIHF0d2Vic29ja2V0cyBeCisgIC1za2lwIHF0eG1scGF0dGVybnMgXgorICAtbm9tYWtlIGV4YW1wbGVzIC1ub21ha2UgdGVzdHMgXgorICAmJiBeCitcam9tXGpvbS5leGUgLUogJU5VTUJFUl9PRl9QUk9DRVNTT1JTJSAmJiBeCitcam9tXGpvbS5leGUgaW5zdGFsbCAmJiBeCitjZCBccXQtJUFSQ0glICYmIF4KK1xnaXRcY21kXGdpdCBhcHBseSBccXQtc3JjXHF0LWluc3RhbGwucGF0Y2gKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvZGVwcy9xdC1pbnN0YWxsLnBhdGNoIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9kZXBzL3F0LWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhNjQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvZGVwcy9xdC1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLS1naXQgYS9saWIvY21ha2UvUXQ1Q29yZS9RdDVDb3JlQ29uZmlnLmNtYWtlIGIvbGliL2NtYWtlL1F0NUNvcmUvUXQ1Q29yZUNvbmZpZy5jbWFrZQoraW5kZXggMDRlYzMwMi4uNzVkNTU5NiAxMDA2NDQKKy0tLSBhL2xpYi9jbWFrZS9RdDVDb3JlL1F0NUNvcmVDb25maWcuY21ha2UKKysrKyBiL2xpYi9jbWFrZS9RdDVDb3JlL1F0NUNvcmVDb25maWcuY21ha2UKK0BAIC0xMTgsNyArMTE4LDcgQEAgaWYgKE5PVCBUQVJHRVQgUXQ1OjpDb3JlKQorICAgICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIFF0NUNvcmVfQ09NUElMRV9ERUZJTklUSU9OUykKKyAgICAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBRdDVDb3JlX0VYRUNVVEFCTEVfQ09NUElMRV9GTEFHUykKKyAKKy0gICAgc2V0KF9RdDVDb3JlX0xJQl9ERVBFTkRFTkNJRVMgIiIpCisrICAgIHNldChfUXQ1Q29yZV9MSUJfREVQRU5ERU5DSUVTICIke19xdDVDb3JlX2luc3RhbGxfcHJlZml4fS9saWIvcXRwY3JlMi5saWI7bmV0YXBpMzIubGliO3ZlcnNpb24ubGliIikKKyAKKyAKKyAgICAgYWRkX2xpYnJhcnkoUXQ1OjpDb3JlIFNUQVRJQyBJTVBPUlRFRCkKK2RpZmYgLS1naXQgYS9saWIvY21ha2UvUXQ1V2lkZ2V0cy9RdDVXaWRnZXRzQ29uZmlnLmNtYWtlIGIvbGliL2NtYWtlL1F0NVdpZGdldHMvUXQ1V2lkZ2V0c0NvbmZpZy5jbWFrZQoraW5kZXggYTA3Yjk1My4uMmUwNzM3MSAxMDA2NDQKKy0tLSBhL2xpYi9jbWFrZS9RdDVXaWRnZXRzL1F0NVdpZGdldHNDb25maWcuY21ha2UKKysrKyBiL2xpYi9jbWFrZS9RdDVXaWRnZXRzL1F0NVdpZGdldHNDb25maWcuY21ha2UKK0BAIC0xMTgsNyArMTE4LDcgQEAgaWYgKE5PVCBUQVJHRVQgUXQ1OjpXaWRnZXRzKQorICAgICBsaXN0KFJFTU9WRV9EVVBMSUNBVEVTIFF0NVdpZGdldHNfQ09NUElMRV9ERUZJTklUSU9OUykKKyAgICAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBRdDVXaWRnZXRzX0VYRUNVVEFCTEVfQ09NUElMRV9GTEFHUykKKyAKKy0gICAgc2V0KF9RdDVXaWRnZXRzX0xJQl9ERVBFTkRFTkNJRVMgIlF0NTo6R3VpO1F0NTo6Q29yZSIpCisrICAgIHNldChfUXQ1V2lkZ2V0c19MSUJfREVQRU5ERU5DSUVTICJRdDU6Okd1aTtRdDU6OkNvcmU7ZHdtYXBpLmxpYjt1eHRoZW1lLmxpYiIpCisgCisgCisgICAgIGFkZF9saWJyYXJ5KFF0NTo6V2lkZ2V0cyBTVEFUSUMgSU1QT1JURUQpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L3BhY2suYmF0IGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9wYWNrLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZDM3ZWVmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni9wYWNrLmJhdApAQCAtMCwwICsxLDEyIEBACitAcmVtIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCitAcmVtIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKK2NhbGwgXG1zdmMuYmF0ICYmIEBlY2hvIG9uIHx8IGV4aXQgL2IKK3NldCBQQVRIPUM6XHdpeDtDOlxuaW5qYTslUEFUSCUKK2NkIFxjbWFrZVxzcmNcY21ha2UtYnVpbGQgJiYgKAorICBmb3IgJSVwIGluICglKikgZG8gKAorICAgIGJpblxjcGFjayAtRyAlJXAKKyAgKQorKSAmJiBeCitta2RpciBcb3V0ICYmIF4KK21vdmUgY21ha2UtKi13aW4qIFxvdXQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvdGVzdC9Eb2NrZXJmaWxlIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni90ZXN0L0RvY2tlcmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViY2QzNwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvdGVzdC9Eb2NrZXJmaWxlCkBAIC0wLDAgKzEsMzcgQEAKKyMgZXNjYXBlPWAKKworIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworIyBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCisjIFByb2R1Y2UgYSBiYXNlIGltYWdlIHdpdGggYSB0ZXN0IGVudmlyb25tZW50IGZvciBwYWNrYWdlZCBDTWFrZSBiaW5hcmllcy4KKyMgQnVpbGQgdXNpbmcgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgZmlsZSBhcyBpdHMgb3duIGJ1aWxkIGNvbnRleHQuCisKK0FSRyBGUk9NX0lNQUdFX05BTUU9a2l0d2FyZS9jbWFrZTpidWlsZC13aW4teDg2LWJhc2UtMjAyMC0wNC0yNworQVJHIEZST01fSU1BR0VfRElHRVNUPUBzaGEyNTY6YzVhODk0OGQ2MzYzMTljZGFjMDE4MDI2Njk5NjU1OGJiNmZiMDM3MTI1NzkyYjViODM3ZjA2OWQwMmU1M2Q3YworQVJHIEZST01fSU1BR0U9JEZST01fSU1BR0VfTkFNRSRGUk9NX0lNQUdFX0RJR0VTVAorRlJPTSAkRlJPTV9JTUFHRQorCisjIFB5dGhvbgorQUREIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8zLjguMi9weXRob24tMy44LjItZW1iZWQtYW1kNjQuemlwIEM6XHB5dGhvbjNccHl0aG9uMy56aXAKK1JVTiBjZCBccHl0aG9uMyBgCisgJiYgcG93ZXJzaGVsbCAtQ29tbWFuZCAiIGAKKyAgICBpZiAoJChHZXQtRmlsZUhhc2ggcHl0aG9uMy56aXApLkhhc2ggLWVxICcyOTI3YTNhNmQwZmUxZjZlMDQ3YTg2MDU5MjIwYWVkYTM3NGVlZDIzMTEzYjllZjUzNTVhY2I4NDUyZDU2NDUzJykge2AKKyAgICAgIEV4cGFuZC1BcmNoaXZlIC1QYXRoIHB5dGhvbjMuemlwIC1EZXN0aW5hdGlvblBhdGggLmAKKyAgICB9IGVsc2Uge2AKKyAgICAgIGV4aXQgMSBgCisgICAgfSIgYAorICYmIGRlbCBweXRob24zLnppcCBgCisgJiYgZGVsIHB5dGhvbjM4Ll9wdGgKKworIyBOaW5qYQorQUREIGh0dHBzOi8vZ2l0aHViLmNvbS9uaW5qYS1idWlsZC9uaW5qYS9yZWxlYXNlcy9kb3dubG9hZC92MS4xMC4wL25pbmphLXdpbi56aXAgQzpcbmluamFcbmluamEuemlwCitSVU4gY2QgXG5pbmphIGAKKyAmJiBwb3dlcnNoZWxsIC1Db21tYW5kICIgYAorICAgIGlmICgkKEdldC1GaWxlSGFzaCBuaW5qYS56aXApLkhhc2ggLWVxICc5MTlmZDE1OGMxNmJmMTM1ZThhODUwYmI0MDQ2ZWMxY2UyOGE3NDM5ZWUwOGI5NzdjZDBiN2Y2YjM0NjNkMTc4Jykge2AKKyAgICAgIEV4cGFuZC1BcmNoaXZlIC1QYXRoIG5pbmphLnppcCAtRGVzdGluYXRpb25QYXRoIC5gCisgICAgfSBlbHNlIHtgCisgICAgICBleGl0IDEgYAorICAgIH0iIGAKKyAmJiBkZWwgbmluamEuemlwCisKK0NPUFkgdGVzdC1ubWFrZS5iYXQgdGVzdC1uaW5qYS5iYXQgQzpcCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L3Rlc3QvdGVzdC1uaW5qYS5iYXQgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L3Rlc3QvdGVzdC1uaW5qYS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjgzNDdlZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9SZWxlYXNlL3dpbi94ODYvdGVzdC90ZXN0LW5pbmphLmJhdApAQCAtMCwwICsxLDE5IEBACitAcmVtIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCitAcmVtIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKK3NldCBBUkNIPSUxCitjYWxsIFxtc3ZjLSVBUkNIJS5iYXQgJiYgQGVjaG8gb24gfHwgZXhpdCAvYgorc2V0ICJQQVRIPUM6XGNtYWtlXGNtYWtlXGJpbjtDOlxuaW5qYTtDOlxweXRob24zOyVQQVRIJSIKK21rZGlyIFxjbWFrZVxzcmNcY21ha2UtbmluamEgJiYgXgorY2QgXGNtYWtlXHNyY1xjbWFrZS1uaW5qYSAmJiBeCis+IENNYWtlQ2FjaGUudHh0ICgKKyAgQGVjaG8gQ01BS0VfRm9ydHJhbl9DT01QSUxFUjpTVFJJTkc9CisgIEBlY2hvIENNQUtFX1N3aWZ0X0NPTVBJTEVSOlNUUklORz0KKyAgQGVjaG8gQ01ha2VfVEVTVF9JUE9fV09SS1NfQzpCT09MPU9OCisgIEBlY2hvIENNYWtlX1RFU1RfSVBPX1dPUktTX0NYWDpCT09MPU9OCisgIEBlY2hvIENNYWtlX1RFU1RfTk9fTkVUV09SSzpCT09MPU9OCisgIEBlY2hvIENURVNUX1JVTl9NRkM6Qk9PTD1PRkYKKykgJiYgXgorY21ha2UgLi5cY21ha2UgLURDTWFrZV9URVNUX0hPU1RfQ01BS0U9MSAtRyAiTmluamEiICYmIF4KK25pbmphICYmIF4KK2N0ZXN0IC0tb3V0cHV0LW9uLWZhaWx1cmUgLWogJU5VTUJFUl9PRl9QUk9DRVNTT1JTJQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni90ZXN0L3Rlc3Qtbm1ha2UuYmF0IGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luL3g4Ni90ZXN0L3Rlc3Qtbm1ha2UuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwMDg3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvUmVsZWFzZS93aW4veDg2L3Rlc3QvdGVzdC1ubWFrZS5iYXQKQEAgLTAsMCArMSwxOSBAQAorQHJlbSBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworQHJlbSBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLgorCitzZXQgQVJDSD0lMQorY2FsbCBcbXN2Yy0lQVJDSCUuYmF0ICYmIEBlY2hvIG9uIHx8IGV4aXQgL2IKK3NldCAiUEFUSD1DOlxjbWFrZVxjbWFrZVxiaW47QzpccHl0aG9uMzslUEFUSCUiCitta2RpciBcY21ha2Vcc3JjXGNtYWtlLW5tYWtlICYmIF4KK2NkIFxjbWFrZVxzcmNcY21ha2Utbm1ha2UgJiYgXgorPiBDTWFrZUNhY2hlLnR4dCAoCisgIEBlY2hvIENNQUtFX0ZvcnRyYW5fQ09NUElMRVI6U1RSSU5HPQorICBAZWNobyBDTUFLRV9Td2lmdF9DT01QSUxFUjpTVFJJTkc9CisgIEBlY2hvIENNYWtlX1RFU1RfSVBPX1dPUktTX0M6Qk9PTD1PTgorICBAZWNobyBDTWFrZV9URVNUX0lQT19XT1JLU19DWFg6Qk9PTD1PTgorICBAZWNobyBDTWFrZV9URVNUX05PX05FVFdPUks6Qk9PTD1PTgorICBAZWNobyBDVEVTVF9SVU5fTUZDOkJPT0w9T0ZGCispICYmIF4KK2NtYWtlIC4uXGNtYWtlIC1EQ01ha2VfVEVTVF9IT1NUX0NNQUtFPTEgLUcgIk5NYWtlIE1ha2VmaWxlcyIgJiYgXgorbm1ha2UgJiYgXgorY3Rlc3QgLS1vdXRwdXQtb24tZmFpbHVyZSAtaiAlTlVNQkVSX09GX1BST0NFU1NPUlMlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4zMl9yZWxlYXNlLmNtYWtlIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luMzJfcmVsZWFzZS5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlNWNiYS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvUmVsZWFzZS93aW4zMl9yZWxlYXNlLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotc2V0KENNQUtFX1JFTEVBU0VfRElSRUNUT1JZICJjOi9tc3lzNjQvaG9tZS9kYXNoYm9hcmQvQ01ha2VSZWxlYXNlRGlyZWN0b3J5MzIiKQotc2V0KENPTkZJR1VSRV9XSVRIX0NNQUtFIFRSVUUpCi1zZXQoQ01BS0VfQ09ORklHVVJFX1BBVEggImM6L1Byb2dyYW1cXCBGaWxlcy9DTWFrZS9iaW4vY21ha2UuZXhlIikKLXNldChQUk9DRVNTT1JTIDE2KQotc2V0KEhPU1Qgd2luMzIpCi1zZXQoUlVOX0xBVU5DSEVSIH4vcmVsL3J1bikKLXNldChDUEFDS19CSU5BUllfR0VORVJBVE9SUyAiV0lYIFpJUCIpCi1zZXQoQ1BBQ0tfU09VUkNFX0dFTkVSQVRPUlMgIiIpCi1zZXQoTUFLRV9QUk9HUkFNICJuaW5qYSIpCi1zZXQoTUFLRSAiJHtNQUtFX1BST0dSQU19IC1qMTYiKQotc2V0KHF0X3ByZWZpeCAiYzovUXQvNS4xMi4xL21zdmMyMDE3LTMyLXc3LW10IikKLXNldChxdF93aW5fbGlicwotICAke3F0X3ByZWZpeH0vcGx1Z2lucy9wbGF0Zm9ybXMvcXdpbmRvd3MubGliCi0gICR7cXRfcHJlZml4fS9wbHVnaW5zL3N0eWxlcy9xd2luZG93c3Zpc3Rhc3R5bGUubGliCi0gICR7cXRfcHJlZml4fS9saWIvUXQ1RXZlbnREaXNwYXRjaGVyU3VwcG9ydC5saWIKLSAgJHtxdF9wcmVmaXh9L2xpYi9RdDVGb250RGF0YWJhc2VTdXBwb3J0LmxpYgotICAke3F0X3ByZWZpeH0vbGliL1F0NVRoZW1lU3VwcG9ydC5saWIKLSAgJHtxdF9wcmVmaXh9L2xpYi9xdGZyZWV0eXBlLmxpYgotICAke3F0X3ByZWZpeH0vbGliL3F0bGlicG5nLmxpYgotICBpbW0zMi5saWIKLSAgd3RzYXBpMzIubGliCi0gICkKLXNldChJTklUSUFMX0NBQ0hFICJDTUFLRV9CVUlMRF9UWVBFOlNUUklORz1SZWxlYXNlCi1DTUFLRV9ET0NfRElSOlNUUklORz1kb2MvY21ha2UKLUNNQUtFX1VTRV9PUEVOU1NMOkJPT0w9T0ZGCi1DTUFLRV9TS0lQX0JPT1RTVFJBUF9URVNUOlNUUklORz1UUlVFCi1DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSOkZJTEVQQVRIPUZBTFNFCi1DTUFLRV9HRU5FUkFUT1I6SU5URVJOQUw9TmluamEKLUJVSUxEX1F0RGlhbG9nOkJPT0w9VFJVRQotQ01ha2VfR1VJX0RJU1RSSUJVVEVfV0lUSF9RdF9MR1BMOlNUUklORz0zCi1DTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWTpTVFJJTkc9TXVsdGlUaHJlYWRlZCQ8JDxDT05GSUc6RGVidWc+OkRlYnVnPgotQ01BS0VfRVhFX0xJTktFUl9GTEFHUzpTVFJJTkc9LW1hY2hpbmU6eDg2IC1zdWJzeXN0ZW06Y29uc29sZSw2LjAxCi1DTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVM6U1RSSU5HPSR7cXRfd2luX2xpYnN9Ci1DTUFLRV9QUkVGSVhfUEFUSDpTVFJJTkc9JHtxdF9wcmVmaXh9Ci1DTWFrZV9URVNUX1F0NDpCT09MPU9GRgotQ01ha2VfVEVTVF9RdDU6Qk9PTD1PRkYKLSIpCi1zZXQocHBmbGFncyAiLURfV0lOMzJfV0lOTlQ9MHg2MDEgLUROVERESV9WRVJTSU9OPTB4MDYwMTAwMDAiKQotc2V0KENGTEFHUyAiJHtwcGZsYWdzfSIpCi1zZXQoQ1hYRkxBR1MgIiR7cHBmbGFnc30iKQotc2V0KEVOViAiLiB+L3JlbC9lbnYzMiIpCi1nZXRfZmlsZW5hbWVfY29tcG9uZW50KHBhdGggIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IiBQQVRIKQotc2V0KEdJVF9FWFRSQSAiZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUiKQotaWYoQ01BS0VfQ1JFQVRFX1ZFUlNJT04gU1RSRVFVQUwgIm5pZ2h0bHkiKQotICAjIFNvbWUgdGVzdHMgZmFpbCBzcHVyaW91c2x5IHRvbyBvZnRlbi4KLSAgc2V0KEVYVFJBX0NURVNUX0FSR1MgIi1FICdDb25zb2xlQnVmfE1vZHVsZS5FeHRlcm5hbERhdGEnIikKLSAgc2V0KFNJR04gIiIpCi1lbHNlKCkKLSAgc3RyaW5nKEFQUEVORCBJTklUSUFMX0NBQ0hFICJDTWFrZV9JTlNUQUxMX1NJR05UT09MOlNUUklORz1zaWdudG9vbFxuIikKLSAgc2V0KFNJR04gW1tzaWdudG9vbCBzaWduIC12IC1hIC10ciBodHRwOi8vdGltZXN0YW1wLmRpZ2ljZXJ0LmNvbSAtZmQgc2hhMjU2IC10ZCBzaGEyNTYgLWQgIkNNYWtlIFdpbmRvd3MgSW5zdGFsbGVyIiBjbWFrZS0qLm1zaV1dKQotZW5kaWYoKQotaW5jbHVkZSgke3BhdGh9L3JlbGVhc2VfY21ha2UuY21ha2UpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvUmVsZWFzZS93aW42NF9yZWxlYXNlLmNtYWtlIGIvVXRpbGl0aWVzL1JlbGVhc2Uvd2luNjRfcmVsZWFzZS5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5ZDM3OC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvUmVsZWFzZS93aW42NF9yZWxlYXNlLmNtYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotc2V0KENNQUtFX1JFTEVBU0VfRElSRUNUT1JZICJjOi9tc3lzNjQvaG9tZS9kYXNoYm9hcmQvQ01ha2VSZWxlYXNlRGlyZWN0b3J5NjQiKQotc2V0KENPTkZJR1VSRV9XSVRIX0NNQUtFIFRSVUUpCi1zZXQoQ01BS0VfQ09ORklHVVJFX1BBVEggImM6L1Byb2dyYW1cXCBGaWxlcy9DTWFrZS9iaW4vY21ha2UuZXhlIikKLXNldChQUk9DRVNTT1JTIDE2KQotc2V0KEhPU1Qgd2luNjQpCi1zZXQoUlVOX0xBVU5DSEVSIH4vcmVsL3J1bikKLXNldChDUEFDS19CSU5BUllfR0VORVJBVE9SUyAiV0lYIFpJUCIpCi1zZXQoQ1BBQ0tfU09VUkNFX0dFTkVSQVRPUlMgIiIpCi1zZXQoTUFLRV9QUk9HUkFNICJuaW5qYSIpCi1zZXQoTUFLRSAiJHtNQUtFX1BST0dSQU19IC1qMTYiKQotc2V0KHF0X3ByZWZpeCAiYzovUXQvNS4xMi4xL21zdmMyMDE3LTY0LXc3LW10IikKLXNldChxdF93aW5fbGlicwotICAke3F0X3ByZWZpeH0vcGx1Z2lucy9wbGF0Zm9ybXMvcXdpbmRvd3MubGliCi0gICR7cXRfcHJlZml4fS9wbHVnaW5zL3N0eWxlcy9xd2luZG93c3Zpc3Rhc3R5bGUubGliCi0gICR7cXRfcHJlZml4fS9saWIvUXQ1RXZlbnREaXNwYXRjaGVyU3VwcG9ydC5saWIKLSAgJHtxdF9wcmVmaXh9L2xpYi9RdDVGb250RGF0YWJhc2VTdXBwb3J0LmxpYgotICAke3F0X3ByZWZpeH0vbGliL1F0NVRoZW1lU3VwcG9ydC5saWIKLSAgJHtxdF9wcmVmaXh9L2xpYi9xdGZyZWV0eXBlLmxpYgotICAke3F0X3ByZWZpeH0vbGliL3F0bGlicG5nLmxpYgotICBpbW0zMi5saWIKLSAgd3RzYXBpMzIubGliCi0gICkKLXNldChJTklUSUFMX0NBQ0hFICJDTUFLRV9CVUlMRF9UWVBFOlNUUklORz1SZWxlYXNlCi1DTUFLRV9ET0NfRElSOlNUUklORz1kb2MvY21ha2UKLUNNQUtFX1VTRV9PUEVOU1NMOkJPT0w9T0ZGCi1DTUFLRV9TS0lQX0JPT1RTVFJBUF9URVNUOlNUUklORz1UUlVFCi1DTUFLRV9Gb3J0cmFuX0NPTVBJTEVSOkZJTEVQQVRIPUZBTFNFCi1DTUFLRV9HRU5FUkFUT1I6SU5URVJOQUw9TmluamEKLUJVSUxEX1F0RGlhbG9nOkJPT0w9VFJVRQotQ01ha2VfR1VJX0RJU1RSSUJVVEVfV0lUSF9RdF9MR1BMOlNUUklORz0zCi1DTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWTpTVFJJTkc9TXVsdGlUaHJlYWRlZCQ8JDxDT05GSUc6RGVidWc+OkRlYnVnPgotQ01BS0VfRVhFX0xJTktFUl9GTEFHUzpTVFJJTkc9LW1hY2hpbmU6eDY0IC1zdWJzeXN0ZW06Y29uc29sZSw2LjAxCi1DTWFrZV9RVF9TVEFUSUNfUVdpbmRvd3NJbnRlZ3JhdGlvblBsdWdpbl9MSUJSQVJJRVM6U1RSSU5HPSR7cXRfd2luX2xpYnN9Ci1DTUFLRV9QUkVGSVhfUEFUSDpTVFJJTkc9JHtxdF9wcmVmaXh9Ci1DTWFrZV9URVNUX1F0NDpCT09MPU9GRgotQ01ha2VfVEVTVF9RdDU6Qk9PTD1PRkYKLSIpCi1zZXQocHBmbGFncyAiLURfV0lOMzJfV0lOTlQ9MHg2MDEgLUROVERESV9WRVJTSU9OPTB4MDYwMTAwMDAiKQotc2V0KENGTEFHUyAiJHtwcGZsYWdzfSIpCi1zZXQoQ1hYRkxBR1MgIiR7cHBmbGFnc30iKQotc2V0KEVOViAiLiB+L3JlbC9lbnY2NCIpCi1nZXRfZmlsZW5hbWVfY29tcG9uZW50KHBhdGggIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9IiBQQVRIKQotc2V0KEdJVF9FWFRSQSAiZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUiKQotaWYoQ01BS0VfQ1JFQVRFX1ZFUlNJT04gU1RSRVFVQUwgIm5pZ2h0bHkiKQotICAjIFNvbWUgdGVzdHMgZmFpbCBzcHVyaW91c2x5IHRvbyBvZnRlbi4KLSAgc2V0KEVYVFJBX0NURVNUX0FSR1MgIi1FICdDb25zb2xlQnVmfE1vZHVsZS5FeHRlcm5hbERhdGEnIikKLSAgc2V0KFNJR04gIiIpCi1lbHNlKCkKLSAgc3RyaW5nKEFQUEVORCBJTklUSUFMX0NBQ0hFICJDTWFrZV9JTlNUQUxMX1NJR05UT09MOlNUUklORz1zaWdudG9vbFxuIikKLSAgc2V0KFNJR04gW1tzaWdudG9vbCBzaWduIC12IC1hIC10ciBodHRwOi8vdGltZXN0YW1wLmRpZ2ljZXJ0LmNvbSAtZmQgc2hhMjU2IC10ZCBzaGEyNTYgLWQgIkNNYWtlIFdpbmRvd3MgSW5zdGFsbGVyIiBjbWFrZS0qLm1zaV1dKQotZW5kaWYoKQotaW5jbHVkZSgke3BhdGh9L3JlbGVhc2VfY21ha2UuY21ha2UpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvU2NyaXB0cy9Cb29zdFNjYW5EZXBzLmNtYWtlIGIvVXRpbGl0aWVzL1NjcmlwdHMvQm9vc3RTY2FuRGVwcy5jbWFrZQppbmRleCAyOGE5NGNlLi41Nzk0ZDAzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvU2NyaXB0cy9Cb29zdFNjYW5EZXBzLmNtYWtlCisrKyBiL1V0aWxpdGllcy9TY3JpcHRzL0Jvb3N0U2NhbkRlcHMuY21ha2UKQEAgLTEzNCwxMSArMTM0LDE3IEBACiAgICAgICAgICAgICBjb250aW51ZSgpCiAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgIGlmKGNvbXBvbmVudCBTVFJFUVVBTCAicHl0aG9uIiBBTkQKLSAgICAgICAgICAgICBib29zdF9jb21wb25lbnRfbWF0Y2ggU1RSRVFVQUwgIm51bXB5IikKKyAgICAgICAgICAgICBfYm9vc3RfY29tcG9uZW50X21hdGNoIFNUUkVRVUFMICJudW1weSIpCiAgICAgICAgICAgICAjIE9wdGlvbmFsIHB5dGhvbiBkZXBlbmRlbmN5OyBza2lwIHRvIGF2b2lkIG1ha2luZyBpdCBhCiAgICAgICAgICAgICAjIGhhcmQgZGVwZW5kZW5jeSAoaGFuZGxlIGFzIHNwZWNpYWwtY2FzZSBmb3IgbnVtcHkpLgogICAgICAgICAgICAgY29udGludWUoKQogICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBpZihjb21wb25lbnQgU1RSRVFVQUwgIm5vd2lkZSIgQU5ECisgICAgICAgICAgICAgX2Jvb3N0X2NvbXBvbmVudF9tYXRjaCBTVFJFUVVBTCAiZmlsZXN5c3RlbSIpCisgICAgICAgICAgICAjIE9wdGlvbmFsIGZpbGVzeXN0ZW0gZGVwZW5kZW5jeTsgc2tpcCB0byBhdm9pZCBtYWtpbmcgaXQgYQorICAgICAgICAgICAgIyBoYXJkIGRlcGVuZGVuY3kuCisgICAgICAgICAgICBjb250aW51ZSgpCisgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgIGlmIChfYm9vc3RfZGVwX2ZvdW5kIEVRVUFMIC0xIEFORAogICAgICAgICAgICAgICBOT1QgIiR7X2Jvb3N0X2NvbXBvbmVudF9tYXRjaH0iIFNUUkVRVUFMICIke2NvbXBvbmVudH0iKQogICAgICAgICAgICAgbGlzdChBUFBFTkQgX2Jvb3N0X0RFUFMgIiR7X2Jvb3N0X2NvbXBvbmVudF9tYXRjaH0iKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NjcmlwdHMvcmVnZW5lcmF0ZS1sZXhlcnMuYmFzaCBiL1V0aWxpdGllcy9TY3JpcHRzL3JlZ2VuZXJhdGUtbGV4ZXJzLmJhc2gKaW5kZXggMWI2MWI3MC4uMTg2ODAyYSAxMDA3NTUKLS0tIGEvVXRpbGl0aWVzL1NjcmlwdHMvcmVnZW5lcmF0ZS1sZXhlcnMuYmFzaAorKysgYi9VdGlsaXRpZXMvU2NyaXB0cy9yZWdlbmVyYXRlLWxleGVycy5iYXNoCkBAIC0xNCw3ICsxNCw4IEBACiAgICAgQ1Rlc3RSZXNvdXJjZUdyb3VwcyBcCiAgICAgRGVwZW5kc0phdmEgICAgICAgICBcCiAgICAgRXhwciAgICAgICAgICAgICAgICBcCi0gICAgRm9ydHJhbgorICAgIEZvcnRyYW4gICAgICAgICAgICAgXAorICAgIEdjY0RlcGZpbGUKIGRvCiAgICAgY3h4X2ZpbGU9Y20ke2xleGVyfUxleGVyLmN4eAogICAgIGhfZmlsZT1jbSR7bGV4ZXJ9TGV4ZXIuaApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWJ6aXAyLmJhc2ggYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtYnppcDIuYmFzaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzQzOWQxCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWJ6aXAyLmJhc2gKQEAgLTAsMCArMSwyNyBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorCitzZXQgLWUKK3NldCAteAorc2hvcHQgLXMgZG90Z2xvYgorCityZWFkb25seSBuYW1lPSJiemlwMiIKK3JlYWRvbmx5IG93bmVyc2hpcD0iYnppcDIgdXBzdHJlYW0gPGt3cm9ib3RAa2l0d2FyZS5jb20+IgorcmVhZG9ubHkgc3VidHJlZT0iVXRpbGl0aWVzL2NtYnppcDIiCityZWFkb25seSByZXBvPSJodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC9iemlwMi5naXQiCityZWFkb25seSB0YWc9ImJ6aXAyLTEuMC44IgorcmVhZG9ubHkgc2hvcnRsb2c9ZmFsc2UKK3JlYWRvbmx5IHBhdGhzPSIKKyAgTElDRU5TRQorICBSRUFETUUKKyAgKi5jCisgICouaAorIgorCitleHRyYWN0X3NvdXJjZSAoKSB7CisgICAgZ2l0X2FyY2hpdmUKKyAgICBwdXNoZCAiJHtleHRyYWN0ZGlyfS8ke25hbWV9LXJlZHVjZWQiCisgICAgZWNobyAiKiAtd2hpdGVzcGFjZSIgPiAuZ2l0YXR0cmlidXRlcworICAgIHBvcGQKK30KKworLiAiJHtCQVNIX1NPVVJDRSUvKn0vdXBkYXRlLXRoaXJkLXBhcnR5LmJhc2giCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtY3VybC5iYXNoIGIvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWN1cmwuYmFzaAppbmRleCA1YzJhMzMxLi42N2UyNzI4IDEwMDc1NQotLS0gYS9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtY3VybC5iYXNoCisrKyBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1jdXJsLmJhc2gKQEAgLTgsNyArOCw3IEBACiByZWFkb25seSBvd25lcnNoaXA9IkN1cmwgVXBzdHJlYW0gPGN1cmwtbGlicmFyeUBjb29sLmhheHguc2U+IgogcmVhZG9ubHkgc3VidHJlZT0iVXRpbGl0aWVzL2NtY3VybCIKIHJlYWRvbmx5IHJlcG89Imh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwuZ2l0IgotcmVhZG9ubHkgdGFnPSJjdXJsLTdfNjVfMCIKK3JlYWRvbmx5IHRhZz0iY3VybC03XzcxXzEiCiByZWFkb25seSBzaG9ydGxvZz1mYWxzZQogcmVhZG9ubHkgcGF0aHM9IgogICBDTWFrZS8qCkBAIC0yMyw2ICsyMywxMCBAQAogICBsaWIvbGliY3VybC5yYwogICBsaWIvdmF1dGgvKi5jCiAgIGxpYi92YXV0aC8qLmgKKyAgbGliL3ZxdWljLyouYworICBsaWIvdnF1aWMvKi5oCisgIGxpYi92c3NoLyouYworICBsaWIvdnNzaC8qLmgKICAgbGliL3Z0bHMvKi5jCiAgIGxpYi92dGxzLyouaAogIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWxpYmFyY2hpdmUuYmFzaCBiL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1saWJhcmNoaXZlLmJhc2gKaW5kZXggMzE4ODY1OC4uM2RiODlmZiAxMDA3NTUKLS0tIGEvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWxpYmFyY2hpdmUuYmFzaAorKysgYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbGliYXJjaGl2ZS5iYXNoCkBAIC04LDcgKzgsNyBAQAogcmVhZG9ubHkgb3duZXJzaGlwPSJMaWJBcmNoaXZlIFVwc3RyZWFtIDxsaWJhcmNoaXZlLWRpc2N1c3NAZ29vZ2xlZ3JvdXBzLmNvbT4iCiByZWFkb25seSBzdWJ0cmVlPSJVdGlsaXRpZXMvY21saWJhcmNoaXZlIgogcmVhZG9ubHkgcmVwbz0iaHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS5naXQiCi1yZWFkb25seSB0YWc9InYzLjMuMyIKK3JlYWRvbmx5IHRhZz0idjMuNC4yIgogcmVhZG9ubHkgc2hvcnRsb2c9ZmFsc2UKIHJlYWRvbmx5IHBhdGhzPSIKICAgQ01ha2VMaXN0cy50eHQKQEAgLTI1LDYgKzI1LDcgQEAKICAgICBnaXRfYXJjaGl2ZQogICAgIHB1c2hkICIke2V4dHJhY3RkaXJ9LyR7bmFtZX0tcmVkdWNlZCIKICAgICBmcm9tZG9zIGJ1aWxkL2NtYWtlL0ZpbmQqLmNtYWtlCisgICAgZWNobyAiKiAtd2hpdGVzcGFjZSIgPiAuZ2l0YXR0cmlidXRlcwogICAgIHBvcGQKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NjcmlwdHMvdXBkYXRlLWxpYnJoYXNoLmJhc2ggYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbGlicmhhc2guYmFzaAppbmRleCAwMDljZTMyLi5lYTdlNjU1IDEwMDc1NQotLS0gYS9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbGlicmhhc2guYmFzaAorKysgYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbGlicmhhc2guYmFzaApAQCAtOCwxMSArOCwxMCBAQAogcmVhZG9ubHkgb3duZXJzaGlwPSJsaWJyaGFzaCB1cHN0cmVhbSA8a3dyb2JvdEBraXR3YXJlLmNvbT4iCiByZWFkb25seSBzdWJ0cmVlPSJVdGlsaXRpZXMvY21saWJyaGFzaCIKIHJlYWRvbmx5IHJlcG89Imh0dHBzOi8vZ2l0aHViLmNvbS9yaGFzaC9yaGFzaC5naXQiCi1yZWFkb25seSB0YWc9Im1hc3RlciIKK3JlYWRvbmx5IHRhZz0idjEuMy45IgogcmVhZG9ubHkgc2hvcnRsb2c9ZmFsc2UKIHJlYWRvbmx5IHBhdGhzPSIKICAgQ09QWUlORwotICBSRUFETUUKICAgbGlicmhhc2gvYWxnb3JpdGhtcy5jCiAgIGxpYnJoYXNoL2FsZ29yaXRobXMuaAogICBsaWJyaGFzaC9ieXRlX29yZGVyLmMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9TY3JpcHRzL3VwZGF0ZS1uZ2h0dHAyLmJhc2ggYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbmdodHRwMi5iYXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3YThmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvU2NyaXB0cy91cGRhdGUtbmdodHRwMi5iYXNoCkBAIC0wLDAgKzEsMzAgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKworc2V0IC1lCitzZXQgLXgKK3Nob3B0IC1zIGRvdGdsb2IKKworcmVhZG9ubHkgbmFtZT0ibmdodHRwMiIKK3JlYWRvbmx5IG93bmVyc2hpcD0ibmdodHRwMiB1cHN0cmVhbSA8a3dyb2JvdEBraXR3YXJlLmNvbT4iCityZWFkb25seSBzdWJ0cmVlPSJVdGlsaXRpZXMvY21uZ2h0dHAyIgorcmVhZG9ubHkgcmVwbz0iaHR0cHM6Ly9naXRodWIuY29tL25naHR0cDIvbmdodHRwMi5naXQiCityZWFkb25seSB0YWc9InYxLjQwLjAiCityZWFkb25seSBzaG9ydGxvZz1mYWxzZQorcmVhZG9ubHkgcGF0aHM9IgorICBDT1BZSU5HCisgIGxpYi8qLmMKKyAgbGliLyouaAorICBsaWIvaW5jbHVkZXMvbmdodHRwMi9uZ2h0dHAyLmgKKyAgbGliL2luY2x1ZGVzL25naHR0cDIvbmdodHRwMnZlci5oLmluCisiCisKK2V4dHJhY3Rfc291cmNlICgpIHsKKyAgICBnaXRfYXJjaGl2ZQorICAgIHB1c2hkICIke2V4dHJhY3RkaXJ9LyR7bmFtZX0tcmVkdWNlZCIKKyAgICBlY2hvICIqIC13aGl0ZXNwYWNlIiA+IC5naXRhdHRyaWJ1dGVzCisgICAgbXYgbGliL2luY2x1ZGVzL25naHR0cDIvbmdodHRwMnZlci5oLmluIGxpYi9pbmNsdWRlcy9uZ2h0dHAyL25naHR0cDJ2ZXIuaAorICAgIHNlZCAtaSAncy9AUEFDS0FHRV9WRVJTSU9OQC8xLjQwLjAvO3MvQFBBQ0tBR0VfVkVSU0lPTl9OVU1ALzB4MDEyODAwLycgbGliL2luY2x1ZGVzL25naHR0cDIvbmdodHRwMnZlci5oCisgICAgcG9wZAorfQorCisuICIke0JBU0hfU09VUkNFJS8qfS91cGRhdGUtdGhpcmQtcGFydHkuYmFzaCIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9TcGhpbngvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvU3BoaW54L0NNYWtlTGlzdHMudHh0CmluZGV4IDE3YzUwMTguLmU1YmU0M2EgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9TcGhpbngvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL1NwaGlueC9DTWFrZUxpc3RzLnR4dApAQCAtODksNyArODksNyBAQAogICBmaW5kX3BhY2thZ2UoUHl0aG9uSW50ZXJwIFJFUVVJUkVEKQogCiAgIGZpbmRfcHJvZ3JhbShRQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFCi0gICAgTkFNRVMgcWNvbGxlY3Rpb25nZW5lcmF0b3IKKyAgICBOQU1FUyBxY29sbGVjdGlvbmdlbmVyYXRvci1xdDUgcWNvbGxlY3Rpb25nZW5lcmF0b3IKICAgICBET0MgInFjb2xsZWN0aW9uZ2VuZXJhdG9yIHRvb2wiCiAgICAgKQogICBpZiAoTk9UIFFDT0xMRUNUSU9OR0VORVJBVE9SX0VYRUNVVEFCTEUpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvU3BoaW54L0NUZXN0Q29uZmlnLmNtYWtlIGIvVXRpbGl0aWVzL1NwaGlueC9DVGVzdENvbmZpZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWY0MjYwCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1NwaGlueC9DVGVzdENvbmZpZy5jbWFrZQpAQCAtMCwwICsxLDE2IEBACisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuCisKKyMgSWYgY2hhbmdpbmcgdGhpcyBmaWxlLCBhbHNvIHVwZGF0ZSBDVGVzdENvbmZpZy5jbWFrZQorCitzZXQoQ1RFU1RfUFJPSkVDVF9OQU1FICJDTWFrZSIpCitzZXQoQ1RFU1RfTklHSFRMWV9TVEFSVF9USU1FICIxOjAwOjAwIFVUQyIpCisKK2lmKE5PVCBDVEVTVF9EUk9QX01FVEhPRCBTVFJFUVVBTCAiaHR0cHMiKQorICBzZXQoQ1RFU1RfRFJPUF9NRVRIT0QgImh0dHAiKQorZW5kaWYoKQorc2V0KENURVNUX0RST1BfU0lURSAib3Blbi5jZGFzaC5vcmciKQorc2V0KENURVNUX0RST1BfTE9DQVRJT04gIi9zdWJtaXQucGhwP3Byb2plY3Q9Q01ha2UiKQorc2V0KENURVNUX0RST1BfU0lURV9DREFTSCBUUlVFKQorc2V0KENURVNUX0NEQVNIX1ZFUlNJT04gIjEuNiIpCitzZXQoQ1RFU1RfQ0RBU0hfUVVFUllfVkVSU0lPTiBUUlVFKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NwaGlueC9jbWFrZS5weSBiL1V0aWxpdGllcy9TcGhpbngvY21ha2UucHkKaW5kZXggZDkwM2RiZS4uZjE2NGZkMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL1NwaGlueC9jbWFrZS5weQorKysgYi9VdGlsaXRpZXMvU3BoaW54L2NtYWtlLnB5CkBAIC0xOTEsNiArMTkxLDcgQEAKICAgICAnY3BhY2tfZ2VuJzogIF9jbWFrZV9pbmRleF9lbnRyeSgnY3BhY2sgZ2VuZXJhdG9yJyksCiAgICAgJ2VudnZhcic6ICAgICBfY21ha2VfaW5kZXhfZW50cnkoJ2VudnZhcicpLAogICAgICdnZW5lcmF0b3InOiAgX2NtYWtlX2luZGV4X2VudHJ5KCdnZW5lcmF0b3InKSwKKyAgICAnZ3VpZGUnOiAgICAgIF9jbWFrZV9pbmRleF9lbnRyeSgnZ3VpZGUnKSwKICAgICAnbWFudWFsJzogICAgIF9jbWFrZV9pbmRleF9lbnRyeSgnbWFudWFsJyksCiAgICAgJ21vZHVsZSc6ICAgICBfY21ha2VfaW5kZXhfZW50cnkoJ21vZHVsZScpLAogICAgICdwb2xpY3knOiAgICAgX2NtYWtlX2luZGV4X2VudHJ5KCdwb2xpY3knKSwKQEAgLTI1MSw3ICsyNTIsNyBAQAogICAgICAgICBlbnYgPSBzZWxmLmRvY3VtZW50LnNldHRpbmdzLmVudgogCiAgICAgICAgICMgVHJlYXQgc29tZSBkb2N1bWVudHMgYXMgY21ha2UgZG9tYWluIG9iamVjdHMuCi0gICAgICAgIG9ianR5cGUsIHNlcCwgdGFpbCA9IGVudi5kb2NuYW1lLnJwYXJ0aXRpb24oJy8nKQorICAgICAgICBvYmp0eXBlLCBzZXAsIHRhaWwgPSBlbnYuZG9jbmFtZS5wYXJ0aXRpb24oJy8nKQogICAgICAgICBtYWtlX2luZGV4X2VudHJ5ID0gX2NtYWtlX2luZGV4X29ianMuZ2V0KG9ianR5cGUpCiAgICAgICAgIGlmIG1ha2VfaW5kZXhfZW50cnk6CiAgICAgICAgICAgICB0aXRsZSA9IHNlbGYucGFyc2VfdGl0bGUoZW52LmRvY25hbWUpCkBAIC0zNzMsNiArMzc0LDcgQEAKICAgICAgICAgJ2NwYWNrX2dlbic6ICBPYmpUeXBlKCdjcGFja19nZW4nLCAgJ2NwYWNrX2dlbicpLAogICAgICAgICAnZW52dmFyJzogICAgIE9ialR5cGUoJ2VudnZhcicsICAgICAnZW52dmFyJyksCiAgICAgICAgICdnZW5lcmF0b3InOiAgT2JqVHlwZSgnZ2VuZXJhdG9yJywgICdnZW5lcmF0b3InKSwKKyAgICAgICAgJ2d1aWRlJzogICAgICBPYmpUeXBlKCdndWlkZScsICAgICAgJ2d1aWRlJyksCiAgICAgICAgICd2YXJpYWJsZSc6ICAgT2JqVHlwZSgndmFyaWFibGUnLCAgICd2YXJpYWJsZScpLAogICAgICAgICAnbW9kdWxlJzogICAgIE9ialR5cGUoJ21vZHVsZScsICAgICAnbW9kdWxlJyksCiAgICAgICAgICdwb2xpY3knOiAgICAgT2JqVHlwZSgncG9saWN5JywgICAgICdwb2xpY3knKSwKQEAgLTQwNyw2ICs0MDksNyBAQAogICAgICAgICAnY3BhY2tfZ2VuJzogIENNYWtlWFJlZlJvbGUoKSwKICAgICAgICAgJ2VudnZhcic6ICAgICBDTWFrZVhSZWZSb2xlKCksCiAgICAgICAgICdnZW5lcmF0b3InOiAgQ01ha2VYUmVmUm9sZSgpLAorICAgICAgICAnZ3VpZGUnOiAgICAgIENNYWtlWFJlZlJvbGUoKSwKICAgICAgICAgJ3ZhcmlhYmxlJzogICBDTWFrZVhSZWZSb2xlKCksCiAgICAgICAgICdtb2R1bGUnOiAgICAgQ01ha2VYUmVmUm9sZSgpLAogICAgICAgICAncG9saWN5JzogICAgIENNYWtlWFJlZlJvbGUoKSwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9TcGhpbngvY3JlYXRlX2lkZW50aWZpZXJzLnB5IGIvVXRpbGl0aWVzL1NwaGlueC9jcmVhdGVfaWRlbnRpZmllcnMucHkKaW5kZXggNjcxNmI0OC4uZTM1ZjEyNyAxMDA3NTUKLS0tIGEvVXRpbGl0aWVzL1NwaGlueC9jcmVhdGVfaWRlbnRpZmllcnMucHkKKysrIGIvVXRpbGl0aWVzL1NwaGlueC9jcmVhdGVfaWRlbnRpZmllcnMucHkKQEAgLTEsMTcgKzEsMTcgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogCi1pbXBvcnQgc3lzLCBvcworaW1wb3J0IHN5cwogCiBpZiBsZW4oc3lzLmFyZ3YpICE9IDI6CiAgIHN5cy5leGl0KC0xKQogbmFtZSA9IHN5cy5hcmd2WzFdICsgIi9DTWFrZS5xaHAiCiAKLWYgPSBvcGVuKG5hbWUpCitmID0gb3BlbihuYW1lLCAicmIiKQogCiBpZiBub3QgZjoKICAgc3lzLmV4aXQoLTEpCiAKLWxpbmVzID0gZi5yZWFkKCkuc3BsaXRsaW5lcygpCitsaW5lcyA9IGYucmVhZCgpLmRlY29kZSgidXRmLTgiKS5zcGxpdGxpbmVzKCkKIAogaWYgbm90IGxpbmVzOgogICBzeXMuZXhpdCgtMSkKQEAgLTI1LDYgKzI1LDcgQEAKICAgICAgICAgICAgICAoImVudnZhciIsICJlbnZ2YXIiKSwKICAgICAgICAgICAgICAoInZhcmlhYmxlIiwgInZhcmlhYmxlIiksCiAgICAgICAgICAgICAgKCJnZW5lcmF0b3IiLCAiZ2VuZXJhdG9yIiksCisgICAgICAgICAgICAgKCJndWlkZSIsICJndWlkZSIpLAogICAgICAgICAgICAgICgidGFyZ2V0IHByb3BlcnR5IiwgInByb3BfdGd0IiksCiAgICAgICAgICAgICAgKCJ0ZXN0IHByb3BlcnR5IiwgInByb3BfdGVzdCIpLAogICAgICAgICAgICAgICgic291cmNlIGZpbGUgcHJvcGVydHkiLCAicHJvcF9zZiIpLApAQCAtMzcsNyArMzgsNyBAQAogCiAgIGZvciBkb21haW5fb2JqZWN0X3N0cmluZywgZG9tYWluX29iamVjdF90eXBlIGluIG1hcHBpbmc6CiAgICAgaWYgIjxrZXl3b3JkIG5hbWU9XCIiICsgZG9tYWluX29iamVjdF9zdHJpbmcgKyAiXCIiIGluIGxpbmU6Ci0gICAgICBpZiBub3QgImlkPVwiIiBpbiBsaW5lIGFuZCBub3QgIiNpbmRleC0iIGluIGxpbmU6CisgICAgICBpZiAiaWQ9XCIiIG5vdCBpbiBsaW5lIGFuZCAiI2luZGV4LSIgbm90IGluIGxpbmU6CiAgICAgICAgIHByZWZpeCA9ICI8a2V5d29yZCBuYW1lPVwiIiArIGRvbWFpbl9vYmplY3Rfc3RyaW5nICsgIlwiICIKICAgICAgICAgcGFydDEsIHBhcnQyID0gbGluZS5zcGxpdChwcmVmaXgpCiAgICAgICAgIGhlYWQsIHRhaWwgPSBwYXJ0Mi5zcGxpdCgiIyIgKyBkb21haW5fb2JqZWN0X3R5cGUgKyAiOiIpCkBAIC00NSw1ICs0Niw1IEBACiAgICAgICAgIGxpbmUgPSBwYXJ0MSArIHByZWZpeCArICJpZD1cIiIgKyBkb21haW5fb2JqZWN0X3R5cGUgKyAiLyIgKyBkb21haW5fb2JqZWN0ICsgIlwiICIgKyBwYXJ0MgogICBuZXdsaW5lcy5hcHBlbmQobGluZSArICJcbiIpCiAKLWYgPSBvcGVuKG5hbWUsICJ3IikKLWYud3JpdGVsaW5lcyhuZXdsaW5lcykKK2YgPSBvcGVuKG5hbWUsICJ3YiIpCitmLndyaXRlbGluZXMobWFwKGxhbWJkYSBsaW5lOiBsaW5lLmVuY29kZSgidXRmLTgiKSwgbmV3bGluZXMpKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL1NwaGlueC91cGRhdGVfdmVyc2lvbnMucHkgYi9VdGlsaXRpZXMvU3BoaW54L3VwZGF0ZV92ZXJzaW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OTNlN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL1NwaGlueC91cGRhdGVfdmVyc2lvbnMucHkKQEAgLTAsMCArMSwxMTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyIiIgorVGhpcyBzY3JpcHQgaW5zZXJ0cyAidmVyc2lvbmFkZGVkIiBkaXJlY3RpdmUgaW50byBldmVyeSAucnN0IGRvY3VtZW50CithbmQgZXZlcnkgLmNtYWtlIG1vZHVsZSB3aXRoIC5yc3QgZG9jdW1lbnRhdGlvbiBjb21tZW50LgorIiIiCitpbXBvcnQgcmUKK2ltcG9ydCBwYXRobGliCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGFyZ3BhcnNlCisKK3RhZ19yZSA9IHJlLmNvbXBpbGUocidedjNcLihcZCspXC4oXGQrKSg/Oi1yYyhcZCspKT8kJykKK3BhdGhfcmUgPSByZS5jb21waWxlKHInSGVscC8oPyFkZXZ8Z3VpZGV8bWFudWFsfGNwYWNrX3xyZWxlYXNlKS4qXC5yc3R8TW9kdWxlcy9bXi9dKlwuY21ha2UkJykKKworZGVmIGdpdF9yb290KCk6CisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oCisgICAgICAgIFsnZ2l0JywgJ3Jldi1wYXJzZScsICctLXNob3ctdG9wbGV2ZWwnXSwgY2hlY2s9VHJ1ZSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsIGNhcHR1cmVfb3V0cHV0PVRydWUpCisgICAgcmV0dXJuIHBhdGhsaWIuUGF0aChyZXN1bHQuc3Rkb3V0LnN0cmlwKCkpCisKK2RlZiBnaXRfdGFncygpOgorICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFsnZ2l0JywgJ3RhZyddLCBjaGVjaz1UcnVlLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSkKKyAgICByZXR1cm4gW3RhZyBmb3IgdGFnIGluIHJlc3VsdC5zdGRvdXQuc3BsaXRsaW5lcygpIGlmIHRhZ19yZS5tYXRjaCh0YWcpXQorCitkZWYgZ2l0X2xpc3RfdHJlZShyZWYpOgorICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKAorICAgICAgICBbJ2dpdCcsICdscy10cmVlJywgJy1yJywgJy0tZnVsbC1uYW1lJywgJy0tbmFtZS1vbmx5JywgcmVmLCAnOi8nXSwKKyAgICAgICAgY2hlY2s9VHJ1ZSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsIGNhcHR1cmVfb3V0cHV0PVRydWUpCisgICAgcmV0dXJuIFtwYXRoIGZvciBwYXRoIGluIHJlc3VsdC5zdGRvdXQuc3BsaXRsaW5lcygpIGlmIHBhdGhfcmUubWF0Y2gocGF0aCldCisKK2RlZiB0YWdfdmVyc2lvbih0YWcpOgorICAgIHJldHVybiByZS5zdWIocidednxcLjAoLXJjXGQrKT8kJywgJycsIHRhZykKKworZGVmIHRhZ19zb3J0a2V5KHRhZyk6CisgICAgcmV0dXJuIHR1cGxlKGludChwYXJ0IG9yICcxMDAwJykgZm9yIHBhcnQgaW4gdGFnX3JlLm1hdGNoKHRhZykuZ3JvdXBzKCkpCisKK2RlZiBtYWtlX3ZlcnNpb25fbWFwKGJhc2VsaW5lLCBzaW5jZSwgbmV4dF92ZXJzaW9uKToKKyAgICB2ZXJzaW9ucyA9IHt9CisgICAgaWYgbmV4dF92ZXJzaW9uOgorICAgICAgICBmb3IgcGF0aCBpbiBnaXRfbGlzdF90cmVlKCdIRUFEJyk6CisgICAgICAgICAgICB2ZXJzaW9uc1twYXRoXSA9IG5leHRfdmVyc2lvbgorICAgIGZvciB0YWcgaW4gc29ydGVkKGdpdF90YWdzKCksIGtleT10YWdfc29ydGtleSwgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgdmVyc2lvbiA9IHRhZ192ZXJzaW9uKHRhZykKKyAgICAgICAgZm9yIHBhdGggaW4gZ2l0X2xpc3RfdHJlZSh0YWcpOgorICAgICAgICAgICAgdmVyc2lvbnNbcGF0aF0gPSB2ZXJzaW9uCisgICAgaWYgYmFzZWxpbmU6CisgICAgICAgIGZvciBwYXRoIGluIGdpdF9saXN0X3RyZWUoYmFzZWxpbmUpOgorICAgICAgICAgICAgdmVyc2lvbnNbcGF0aF0gPSBOb25lCisgICAgaWYgc2luY2U6CisgICAgICAgIGZvciBwYXRoIGluIGdpdF9saXN0X3RyZWUoc2luY2UpOgorICAgICAgICAgICAgdmVyc2lvbnMucG9wKHBhdGgsIE5vbmUpCisgICAgcmV0dXJuIHZlcnNpb25zCisKK2NtYWtlX3ZlcnNpb25fcmUgPSByZS5jb21waWxlKAorICAgIHJiJ3NldFwoQ01ha2VfVkVSU0lPTl9NQUpPUlxzKyhcZCspXClccytzZXRcKENNYWtlX1ZFUlNJT05fTUlOT1JccysoXGQrKVwpXHMrc2V0XChDTWFrZV9WRVJTSU9OX1BBVENIXHMrKFxkKylcKScsIHJlLlMpCisKK2RlZiBjbWFrZV92ZXJzaW9uKHBhdGgpOgorICAgIG1hdGNoID0gY21ha2VfdmVyc2lvbl9yZS5zZWFyY2gocGF0aC5yZWFkX2J5dGVzKCkpCisgICAgbWFqb3IsIG1pbm9yLCBwYXRjaCA9IG1hcChpbnQsIG1hdGNoLmdyb3VwcygpKQorICAgIG1pbm9yICs9IHBhdGNoID4gMjAwMDAwMDAKKyAgICByZXR1cm4gZid7bWFqb3J9LnttaW5vcn0nCisKK3N0YW1wX3JlID0gcmUuY29tcGlsZSgKKyAgICByYicoP1A8UFJFRklYPihefFxbXC5yc3Q6XHI/XG4pW15cclxuXStccj9cblsqXlwtPSNdKyg/UDxOTD5ccj9cbikpKD9QPFNUQU1QPlxzKlwuXC4gdmVyc2lvbmFkZGVkOjpbXlxyXG5dKlxyP1xuKT8nKQorc3RhbXBfcGF0dGVybl9hZGQgPSByYidcZzxQUkVGSVg+XGc8Tkw+Li4gdmVyc2lvbmFkZGVkOjogVkVSU0lPTlxnPE5MPicKK3N0YW1wX3BhdHRlcm5fcmVtb3ZlID0gcmInXGc8UFJFRklYPicKKworZGVmIHVwZGF0ZV9maWxlKHBhdGgsIHZlcnNpb24sIG92ZXJ3cml0ZSk6CisgICAgdHJ5OgorICAgICAgICBkYXRhID0gcGF0aC5yZWFkX2J5dGVzKCkKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3IgYXMgZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3JlcGxhY2VtZW50KG1hdGNoKToKKyAgICAgICAgaWYgbm90IG92ZXJ3cml0ZSBhbmQgbWF0Y2guc3RhcnQoJ1NUQU1QJykgIT0gLTE6CisgICAgICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoKQorICAgICAgICBpZiB2ZXJzaW9uOgorICAgICAgICAgICAgcGF0dGVybiA9IHN0YW1wX3BhdHRlcm5fYWRkLnJlcGxhY2UoYidWRVJTSU9OJywgdmVyc2lvbi5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXR0ZXJuID0gc3RhbXBfcGF0dGVybl9yZW1vdmUKKyAgICAgICAgcmV0dXJuIG1hdGNoLmV4cGFuZChwYXR0ZXJuKQorCisgICAgbmV3X2RhdGEsIG5yZXBsID0gc3RhbXBfcmUuc3VibihfcmVwbGFjZW1lbnQsIGRhdGEsIDEpCisgICAgaWYgbnJlcGwgYW5kIG5ld19kYXRhICE9IGRhdGE6CisgICAgICAgIHBhdGgud3JpdGVfYnl0ZXMobmV3X2RhdGEpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiB1cGRhdGVfcmVwbyhyZXBvX3Jvb3QsIHZlcnNpb25fbWFwLCBvdmVyd3JpdGUpOgorICAgIHRvdGFsID0gMAorICAgIGZvciBwYXRoLCB2ZXJzaW9uIGluIHZlcnNpb25fbWFwLml0ZW1zKCk6CisgICAgICAgIGlmIHVwZGF0ZV9maWxlKHJlcG9fcm9vdCAvIHBhdGgsIHZlcnNpb24sIG92ZXJ3cml0ZSk6CisgICAgICAgICAgICBwcmludChmIlZlcnNpb24ge3ZlcnNpb24gb3IgJzxub25lPic6Nn0gZm9yIHtwYXRofSIpCisgICAgICAgICAgICB0b3RhbCArPSAxCisgICAgcHJpbnQoZiJVcGRhdGVkIHt0b3RhbH0gZmlsZShzKSIpCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoYWxsb3dfYWJicmV2PUZhbHNlKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3ZlcndyaXRlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0ib3ZlcndyaXRlIGV4aXN0aW5nIHZlcnNpb24gdGFncyIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iYXNlbGluZScsIG1ldGF2YXI9J1RBRycsIGRlZmF1bHQ9J3YzLjAuMCcsCisgICAgICAgIGhlbHA9ImZpbGVzIHByZXNlbnQgaW4gdGhpcyB0YWcgd29uJ3QgYmUgc3RhbXBlZCAoZGVmYXVsdDogdjMuMC4wKSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zaW5jZScsIG1ldGF2YXI9J1RBRycsCisgICAgICAgIGhlbHA9ImFwcGx5IGNoYW5nZXMgb25seSB0byBmaWxlcyBhZGRlZCBhZnRlciB0aGlzIHRhZyIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uZXh0LXZlcnNpb24nLCBtZXRhdmFyPSdWRVInLAorICAgICAgICBoZWxwPSJ2ZXJzaW9uIGZvciBmaWxlcyBub3QgcHJlc2VudCBpbiBhbnkgdGFnIChkZWZhdWx0OiBmcm9tIENNYWtlVmVyc2lvbi5jbWFrZSkiKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICB0cnk6CisgICAgICAgIHJlcG9fcm9vdCA9IGdpdF9yb290KCkKKyAgICAgICAgbmV4dF92ZXJzaW9uID0gYXJncy5uZXh0X3ZlcnNpb24gb3IgY21ha2VfdmVyc2lvbihyZXBvX3Jvb3QgLyAnU291cmNlL0NNYWtlVmVyc2lvbi5jbWFrZScpCisgICAgICAgIHZlcnNpb25fbWFwID0gbWFrZV92ZXJzaW9uX21hcChhcmdzLmJhc2VsaW5lLCBhcmdzLnNpbmNlLCBuZXh0X3ZlcnNpb24pCisgICAgICAgIHVwZGF0ZV9yZXBvKHJlcG9fcm9vdCwgdmVyc2lvbl9tYXAsIGFyZ3Mub3ZlcndyaXRlKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICBwcmludChmIkNvbW1hbmQgJ3snICcuam9pbihlLmNtZCl9JyByZXR1cm5lZCBjb2RlIHtlLnJldHVybmNvZGV9Olxue2Uuc3RkZXJyLnN0cmlwKCl9IikKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL1NldHVwLkNvbmZpZ3VyYXRpb24uaCBiL1V0aWxpdGllcy9jbTNwL1NldHVwLkNvbmZpZ3VyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNmMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3AvU2V0dXAuQ29uZmlndXJhdGlvbi5oCkBAIC0wLDAgKzEsOCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX1NldHVwX0NvbmZpZ3VyYXRpb25faAorI2RlZmluZSBjbTNwX1NldHVwX0NvbmZpZ3VyYXRpb25faAorCisjaW5jbHVkZSA8Y212c3NldHVwL1NldHVwLkNvbmZpZ3VyYXRpb24uaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL2FyY2hpdmUuaCBiL1V0aWxpdGllcy9jbTNwL2FyY2hpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTZiM2FiCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3AvYXJjaGl2ZS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF9hcmNoaXZlX2gKKyNkZWZpbmUgY20zcF9hcmNoaXZlX2gKKworLyogVXNlIHRoZSBsaWJhcmNoaXZlIGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0xJQkFSQ0hJVkUKKyMgIGluY2x1ZGUgPGFyY2hpdmUuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmUuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3AvYXJjaGl2ZV9lbnRyeS5oIGIvVXRpbGl0aWVzL2NtM3AvYXJjaGl2ZV9lbnRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMGU4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9hcmNoaXZlX2VudHJ5LmgKQEAgLTAsMCArMSwxNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX2FyY2hpdmVfZW50cnlfaAorI2RlZmluZSBjbTNwX2FyY2hpdmVfZW50cnlfaAorCisvKiBVc2UgdGhlIGxpYmFyY2hpdmUgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fTElCQVJDSElWRQorIyAgaW5jbHVkZSA8YXJjaGl2ZV9lbnRyeS5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZWxzZQorIyAgaW5jbHVkZSA8Y21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC9iemxpYi5oIGIvVXRpbGl0aWVzL2NtM3AvYnpsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTBmNGRkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3AvYnpsaWIuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfYnpsaWJfaAorI2RlZmluZSBjbTNwX2J6bGliX2gKKworLyogVXNlIHRoZSBiemlwMiBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0JaSVAyCisjICBpbmNsdWRlIDxiemxpYi5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZWxzZQorIyAgaW5jbHVkZSA8Y21iemlwMi9iemxpYi5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC9jdXJsL2N1cmwuaCBiL1V0aWxpdGllcy9jbTNwL2N1cmwvY3VybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMmI4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9jdXJsL2N1cmwuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfY3VybF9jdXJsX2gKKyNkZWZpbmUgY20zcF9jdXJsX2N1cmxfaAorCisvKiBVc2UgdGhlIGN1cmwgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCisjaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCisjaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9DVVJMCisjICBpbmNsdWRlIDxjdXJsL2N1cmwuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtY3VybC9pbmNsdWRlL2N1cmwvY3VybC5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC9leHBhdC5oIGIvVXRpbGl0aWVzL2NtM3AvZXhwYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmU2ZmQwCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3AvZXhwYXQuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfZXhwYXRfaAorI2RlZmluZSBjbTNwX2V4cGF0X2gKKworLyogVXNlIHRoZSBleHBhdCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0VYUEFUCisjICBpbmNsdWRlIDxleHBhdC5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZWxzZQorIyAgaW5jbHVkZSA8Y21leHBhdC9saWIvZXhwYXQuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3AvanNvbi9yZWFkZXIuaCBiL1V0aWxpdGllcy9jbTNwL2pzb24vcmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmMDllZQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL2pzb24vcmVhZGVyLmgKQEAgLTAsMCArMSwxNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX2pzb25fcmVhZGVyX2gKKyNkZWZpbmUgY20zcF9qc29uX3JlYWRlcl9oCisKKy8qIFVzZSB0aGUganNvbmNwcCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0pTT05DUFAKKyMgIGluY2x1ZGUgPGpzb24vcmVhZGVyLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxjbWpzb25jcHAvaW5jbHVkZS9qc29uL3JlYWRlci5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC9qc29uL3ZhbHVlLmggYi9VdGlsaXRpZXMvY20zcC9qc29uL3ZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5YmVkNgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL2pzb24vdmFsdWUuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfanNvbl92YWx1ZV9oCisjZGVmaW5lIGNtM3BfanNvbl92YWx1ZV9oCisKKy8qIFVzZSB0aGUganNvbmNwcCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0pTT05DUFAKKyMgIGluY2x1ZGUgPGpzb24vdmFsdWUuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtanNvbmNwcC9pbmNsdWRlL2pzb24vdmFsdWUuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3AvanNvbi93cml0ZXIuaCBiL1V0aWxpdGllcy9jbTNwL2pzb24vd3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjYzNlMgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL2pzb24vd3JpdGVyLmgKQEAgLTAsMCArMSwxNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX2pzb25fd3JpdGVyX2gKKyNkZWZpbmUgY20zcF9qc29uX3dyaXRlcl9oCisKKy8qIFVzZSB0aGUganNvbmNwcCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0pTT05DUFAKKyMgIGluY2x1ZGUgPGpzb24vd3JpdGVyLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxjbWpzb25jcHAvaW5jbHVkZS9qc29uL3dyaXRlci5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC9rd2ltbC9hYmkuaCBiL1V0aWxpdGllcy9jbTNwL2t3aW1sL2FiaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMGRlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9rd2ltbC9hYmkuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3Bfa3dpbWxfYWJpX2gKKyNkZWZpbmUgY20zcF9rd2ltbF9hYmlfaAorCisvKiBVc2UgdGhlIEtXSU1MIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fS1dJTUwKKyMgIGluY2x1ZGUgPGt3aW1sL2FiaS5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZWxzZQorIyAgaW5jbHVkZSA8S1dJTUwvaW5jbHVkZS9rd2ltbC9hYmkuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3Ava3dpbWwvaW50LmggYi9VdGlsaXRpZXMvY20zcC9rd2ltbC9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzdjMjNkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3Ava3dpbWwvaW50LmgKQEAgLTAsMCArMSwxNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX2t3aW1sX2ludF9oCisjZGVmaW5lIGNtM3Bfa3dpbWxfaW50X2gKKworLyogVXNlIHRoZSBLV0lNTCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0tXSU1MCisjICBpbmNsdWRlIDxrd2ltbC9pbnQuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPEtXSU1ML2luY2x1ZGUva3dpbWwvaW50Lmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL2x6bWEuaCBiL1V0aWxpdGllcy9jbTNwL2x6bWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmZhY2YzCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtM3AvbHptYS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF9sem1hX2gKKyNkZWZpbmUgY20zcF9sem1hX2gKKworLyogVXNlIHRoZSBsaWJsem1hIGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KKyNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKKyNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0xJQkxaTUEKKyMgIGluY2x1ZGUgPGx6bWEuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtbGlibHptYS9saWJsem1hL2FwaS9sem1hLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL3JoYXNoLmggYi9VdGlsaXRpZXMvY20zcC9yaGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNWU0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC9yaGFzaC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF9yaGFzaF9oCisjZGVmaW5lIGNtM3Bfcmhhc2hfaAorCisvKiBVc2UgdGhlIExpYlJIYXNoIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fTElCUkhBU0gKKyMgIGluY2x1ZGUgPHJoYXNoLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxjbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbTNwL3V2LmggYi9VdGlsaXRpZXMvY20zcC91di5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwN2EwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC91di5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY20zcF91dl9oCisjZGVmaW5lIGNtM3BfdXZfaAorCisvKiBVc2UgdGhlIGxpYnV2IGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLworI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgorI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fTElCVVYKKyMgIGluY2x1ZGUgPHV2Lmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxjbWxpYnV2L2luY2x1ZGUvdXYuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtM3AvemxpYi5oIGIvVXRpbGl0aWVzL2NtM3AvemxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlN2JhZWUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY20zcC96bGliLmgKQEAgLTAsMCArMSwxNCBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbTNwX3psaWJfaAorI2RlZmluZSBjbTNwX3psaWJfaAorCisvKiBVc2UgdGhlIHpsaWIgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCisjaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCisjaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9aTElCCisjICBpbmNsdWRlIDx6bGliLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxjbXpsaWIvemxpYi5oPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY20zcC96c3RkLmggYi9VdGlsaXRpZXMvY20zcC96c3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjYzNlNAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbTNwL3pzdGQuaApAQCAtMCwwICsxLDE0IEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtM3BfenN0ZF9oCisjZGVmaW5lIGNtM3BfenN0ZF9oCisKKy8qIFVzZSB0aGUgbGlienN0ZCBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCisjaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCisjaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9aU1RECisjICBpbmNsdWRlIDx6c3RkLmg+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKyNlbHNlCisjICBpbmNsdWRlIDxjbXpzdGQvbGliL3pzdGQuaD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtVGhpcmRQYXJ0eUNoZWNrcy5jbWFrZSBiL1V0aWxpdGllcy9jbVRoaXJkUGFydHlDaGVja3MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjZmRmYwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbVRoaXJkUGFydHlDaGVja3MuY21ha2UKQEAgLTAsMCArMSwyOTYgQEAKKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyMgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4KKworIyBIYXJkLWNvZGUgdGhpcmQtcGFydHkgdHJ5X2NvbXBpbGUgY2hlY2tzIHdoZXJlIHdlIGtub3cgdGhlIGFuc3dlci4KKworIyBSZXN1bHRzIGZvciBidWlsZHMgdGFyZ2V0aW5nIGFsbCBzdXBwb3J0ZWQgcGxhdGZvcm1zLgorc2V0KEhBVkVfQVNTRVJUX0ggMSkKK3NldChIQVZFX19DcnRTZXRSZXBvcnRNb2RlIDApICMgdW51c2VkIGFueXdheQorc2V0KEhBVkVfQ1RZUEVfSCAxKQorc2V0KEhBVkVfTE9DQUxFX0ggMSkKK3NldChIQVZFX01FTU1PVkUgMSkKK3NldChIQVZFX1NFVExPQ0FMRSAxKQorc2V0KEhBVkVfU1REREVGX0ggMSkKK3NldChIQVZFX1NURElPX0ggMSkKK3NldChIQVZFX1NURExJQl9IIDEpCitzZXQoSEFWRV9TVFJDSFIgMSkKK3NldChIQVZFX1NUUkRVUCAxKQorc2V0KEhBVkVfU1RSRlRJTUUgMSkKK3NldChIQVZFX1NUUklOR19IIDEpCitzZXQoSEFWRV9TVFJSQ0hSIDEpCitzZXQoSEFWRV9XQ0hBUl9IIDEpCisKKyMgVXNlZCBieSBURVNUX0JJR19FTkRJQU4uCitzZXQoQ01BS0VfU0laRU9GX1VOU0lHTkVEX1NIT1JUIDIpCitzZXQoSEFWRV9DTUFLRV9TSVpFT0ZfVU5TSUdORURfU0hPUlQgMSkKKworaWYoV0lOMzIpCisgICMgUmVzdWx0cyBmb3IgYnVpbGRzIHRhcmdldGluZyBXaW5kb3dzIHBsYXRmb3Jtcy4KKyAgIyBUaGlzIGNvdmVycyBib3RoIE1TVkMtQUJJIGFuZCBHTlUtQUJJIHRvb2xjaGFpbnMuCisKKyAgc2V0KEhBVkVfQUxBUk0gMCkKKyAgc2V0KEhBVkVfQVJDNFJBTkRPTSAwKQorICBzZXQoSEFWRV9BUkM0UkFORE9NX0JVRiAwKQorICBzZXQoSEFWRV9BUlBBX1RGVFBfSCAwKQorICBzZXQoSEFWRV9CU1dBUF8xNiAwKQorICBzZXQoSEFWRV9CU1dBUF8zMiAwKQorICBzZXQoSEFWRV9CU1dBUF82NCAwKQorICBzZXQoSEFWRV9CVUlMVElOX0FWQUlMQUJMRSAwKQorICBzZXQoSEFWRV9CWVRFU1dBUF9IIDApCisgIHNldChIQVZFX0NIRkxBR1MgMCkKKyAgc2V0KEhBVkVfQ0hPV04gMCkKKyAgc2V0KEhBVkVfQ0hST09UIDApCisgIHNldChIQVZFX0NPUFlGSUxFX0ggMCkKKyAgc2V0KEhBVkVfQ1JZUFRPX0ggMCkKKyAgc2V0KEhBVkVfX0NUSU1FNjRfUyAxKQorICBzZXQoSEFWRV9DVElNRV9SIDApCisgIHNldChIQVZFX0NZR1dJTl9DT05WX1BBVEggMCkKKyAgc2V0KEhBVkVfREVTX0ggMCkKKyAgc2V0KEhBVkVfRElSRUNUX0ggMSkKKyAgc2V0KEhBVkVfRElSRkQgMCkKKyAgc2V0KEhBVkVfRExGQ05fSCAwKQorICBzZXQoSEFWRV9EX01EX09SREVSIDApCisgIHNldChIQVZFX0VGVFlQRSAwKQorICBzZXQoSEFWRV9FSUxTRVEgMSkKKyAgc2V0KEhBVkVfRVJSX0ggMCkKKyAgc2V0KEhBVkVfRVJSTk9fSCAxKQorICBzZXQoSEFWRV9FWFQyRlNfRVhUMl9GU19IIDApCisgIHNldChIQVZFX0ZDSERJUiAwKQorICBzZXQoSEFWRV9GQ0hGTEFHUyAwKQorICBzZXQoSEFWRV9GQ0hNT0QgMCkKKyAgc2V0KEhBVkVfRkNIT1dOIDApCisgIHNldChIQVZFX0ZDTlRMIDApCisgIHNldChIQVZFX0ZDTlRMX0ggMSkKKyAgc2V0KEhBVkVfRkNOVExfT19OT05CTE9DSyAwKQorICBzZXQoSEFWRV9GRE9QRU5ESVIgMCkKKyAgc2V0KEhBVkVfRk9SSyAwKQorICBzZXQoSEFWRV9GUkVFQUREUklORk8gMSkKKyAgc2V0KEhBVkVfRlJFRUlGQUREUlMgMCkKKyAgc2V0KEhBVkVfX0ZTRUVLSTY0IDEpCisgIHNldChIQVZFX0ZTRVRYQVRUUiAwKQorICBzZXQoSEFWRV9GU1RBVCAxKQorICBzZXQoSEFWRV9GU1RBVEFUIDApCisgIHNldChIQVZFX0ZTVEFURlMgMCkKKyAgc2V0KEhBVkVfRlNUQVRWRlMgMCkKKyAgc2V0KEhBVkVfRlRSVU5DQVRFIDApCisgIHNldChIQVZFX0ZVVElNRU5TIDApCisgIHNldChIQVZFX0ZVVElNRVMgMCkKKyAgc2V0KEhBVkVfRlVUSU1FU0FUIDApCisgIHNldChIQVZFX0dFVEVVSUQgMCkKKyAgc2V0KEhBVkVfR0VUR1JHSURfUiAwKQorICBzZXQoSEFWRV9HRVRHUk5BTV9SIDApCisgIHNldChIQVZFX0dFVEhPU1RCWU5BTUUgMSkKKyAgc2V0KEhBVkVfR0VUUEFHRVNJWkUgMCkKKyAgc2V0KEhBVkVfR0VUUEVFUk5BTUUgMSkKKyAgc2V0KEhBVkVfR0VUUElEIDEpCisgIHNldChIQVZFX0dFVFBST1RPQllOQU1FIDEpCisgIHNldChIQVZFX0dFVFBXTkFNX1IgMCkKKyAgc2V0KEhBVkVfR0VUUFdVSURfUiAwKQorICBzZXQoSEFWRV9HRVRSQU5ET00gMCkKKyAgc2V0KEhBVkVfR0VUUkxJTUlUIDApCisgIHNldChIQVZFX0dFVFNPQ0tOQU1FIDEpCisgIHNldChIQVZFX0dFVFZGU0JZTkFNRSAwKQorICBzZXQoSEFWRV9HTElCQ19TVFJFUlJPUl9SIDApCisgIHNldChIQVZFX19HTVRJTUU2NF9TIDEpCisgIHNldChIQVZFX0dNVElNRV9SIDApCisgIHNldChIQVZFX0dSUF9IIDApCisgIHNldChIQVZFX0lETjJfSCAwKQorICBzZXQoSEFWRV9JRkFERFJTX0ggMCkKKyAgc2V0KEhBVkVfSUZfTkFNRVRPSU5ERVggMCkKKyAgc2V0KEhBVkVfSU5UVFlQRVNfSCAxKQorICBzZXQoSEFWRV9JT0NUTCAwKQorICBzZXQoSEFWRV9JT0NUTF9GSU9OQklPIDApCisgIHNldChIQVZFX0lPQ1RMX1NJT0NHSUZBRERSIDApCisgIHNldChIQVZFX0lPQ1RMU09DS0VUIDEpCisgIHNldChIQVZFX0lPQ1RMU09DS0VUX0NBTUVMIDApCisgIHNldChIQVZFX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU8gMSkKKyAgc2V0KEhBVkVfSU9DVExTT0NLRVRfRklPTkJJTyAxKQorICBzZXQoSEFWRV9JT19IIDEpCisgIHNldChIQVZFX0tSQl9IIDApCisgIHNldChIQVZFX0xBTkdJTkZPX0ggMCkKKyAgc2V0KEhBVkVfTENIRkxBR1MgMCkKKyAgc2V0KEhBVkVfTENITU9EIDApCisgIHNldChIQVZFX0xDSE9XTiAwKQorICBzZXQoSEFWRV9MSUJJRE4yIDApCisgIHNldChIQVZFX0xJQk5FVFdPUksgMCkKKyAgc2V0KEhBVkVfTElCV0lOTU0gMSkKKyAgc2V0KEhBVkVfTElCV1MyXzMyIDEpCisgIHNldChIQVZFX0xJTUlUU19IIDEpCisgIHNldChIQVZFX0xJTksgMCkKKyAgc2V0KEhBVkVfTElOVVhfRklFTUFQX0ggMCkKKyAgc2V0KEhBVkVfTElOVVhfRlNfSCAwKQorICBzZXQoSEFWRV9MSU5VWF9NQUdJQ19IIDApCisgIHNldChIQVZFX0xJTlVYX1RZUEVTX0ggMCkKKyAgc2V0KEhBVkVfX0xPQ0FMVElNRTY0X1MgMSkKKyAgc2V0KEhBVkVfTE9DQUxUSU1FX1IgMCkKKyAgc2V0KEhBVkVfTFNUQVQgMCkKKyAgc2V0KEhBVkVfTFVUSU1FUyAwKQorICBzZXQoSEFWRV9NQUNIX0FCU09MVVRFX1RJTUUgMCkKKyAgc2V0KEhBVkVfTUJSVE9XQyAxKQorICBzZXQoSEFWRV9NRU1CRVJTSElQX0ggMCkKKyAgc2V0KEhBVkVfTUVNT1JZX0ggMSkKKyAgc2V0KEhBVkVfTUtESVIgMSkKKyAgc2V0KEhBVkVfTUtGSUZPIDApCisgIHNldChIQVZFX19NS0dNVElNRTY0IDEpCisgIHNldChIQVZFX01LTk9EIDApCisgIHNldChIQVZFX01NQVAgMCkKKyAgc2V0KEhBVkVfTVNHX05PU0lHTkFMIDApCisgIHNldChIQVZFX05FVElORVRfVENQX0ggMCkKKyAgc2V0KEhBVkVfTkxfTEFOR0lORk8gMCkKKyAgc2V0KEhBVkVfT1BFTkFUIDApCisgIHNldChIQVZFX1BBVEhTX0ggMCkKKyAgc2V0KEhBVkVfUEVNX0ggMCkKKyAgc2V0KEhBVkVfUElQRSAwKQorICBzZXQoSEFWRV9QT0xMIDApCisgIHNldChIQVZFX1BPTExfRklORSAwKQorICBzZXQoSEFWRV9QT0xMX0ggMCkKKyAgc2V0KEhBVkVfUE9TSVhfU1BBV05QIDApCisgIHNldChIQVZFX1BPU0lYX1NUUkVSUk9SX1IgMCkKKyAgc2V0KEhBVkVfUFJPQ0VTU19IIDEpCisgIHNldChIQVZFX1BXRF9IIDApCisgIHNldChIQVZFX1JFQURESVJfUiAwKQorICBzZXQoSEFWRV9SRUFETElOSyAwKQorICBzZXQoSEFWRV9SRUFETElOS0FUIDApCisgIHNldChIQVZFX1JFQURQQVNTUEhSQVNFIDApCisgIHNldChIQVZFX1JFQURQQVNTUEhSQVNFX0ggMCkKKyAgc2V0KEhBVkVfUkVHRVhfSCAwKQorICBzZXQoSEFWRV9SU0FfSCAwKQorICBzZXQoSEFWRV9TRUxFQ1QgMCkKKyAgc2V0KEhBVkVfU0VURU5WIDApCisgIHNldChIQVZFX1NFVE1PREUgMSkKKyAgc2V0KEhBVkVfU0VUUkxJTUlUIDApCisgIHNldChIQVZFX1NFVFNPQ0tPUFQgMSkKKyAgc2V0KEhBVkVfU0VUU09DS09QVF9TT19OT05CTE9DSyAwKQorICBzZXQoSEFWRV9TSUdBQ1RJT04gMCkKKyAgc2V0KEhBVkVfU0lHX0FUT01JQ19UX05PVF9WT0xBVElMRSAxKQorICBzZXQoSEFWRV9TSUdJTlRFUlJVUFQgMCkKKyAgc2V0KEhBVkVfU0lHTkFMX0ggMSkKKyAgc2V0KEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMCkKKyAgc2V0KEhBVkVfU1BBV05fSCAwKQorICBzZXQoSEFWRV9TU0xfSCAwKQorICBzZXQoSEFWRV9TVEFURlMgMCkKKyAgc2V0KEhBVkVfU1RBVFZGUyAwKQorICBzZXQoSEFWRV9TVERBUkdfSCAxKQorICBzZXQoSEFWRV9TVERCT09MX0ggMSkKKyAgc2V0KEhBVkVfU1RESU5UX0ggMSkKKyAgc2V0KEhBVkVfU1RSRVJST1IgMSkKKyAgc2V0KEhBVkVfU1RSRVJST1JfUiAwKQorICBzZXQoSEFWRV9TVFJOQ01QSSAwKQorICBzZXQoSEFWRV9TVFJOQ1BZX1MgMSkKKyAgc2V0KEhBVkVfU1RST1BUU19IIDApCisgIHNldChIQVZFX19TVFJUT0k2NCAxKQorICBzZXQoSEFWRV9TVFJUT0xMIDEpCisgIHNldChIQVZFX1NUUlVDVF9TVEFURlNfRl9OQU1FTUFYIDApCisgIHNldChIQVZFX1NUUlVDVF9TVEFUX1NUX0JJUlRIVElNRSAwKQorICBzZXQoSEFWRV9TVFJVQ1RfU1RBVF9TVF9CSVJUSFRJTUVTUEVDX1RWX05TRUMgMCkKKyAgc2V0KEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxLU0laRSAwKQorICBzZXQoSEFWRV9TVFJVQ1RfU1RBVF9TVF9GTEFHUyAwKQorICBzZXQoSEFWRV9TVFJVQ1RfU1RBVF9TVF9NVElNRV9OIDApCisgIHNldChIQVZFX1NUUlVDVF9TVEFUX1NUX01USU1FU1BFQ19UVl9OU0VDIDApCisgIHNldChIQVZFX1NUUlVDVF9TVEFUX1NUX01USU1FX1VTRUMgMCkKKyAgc2V0KEhBVkVfU1RSVUNUX1NUQVRfU1RfTVRJTV9UVl9OU0VDIDApCisgIHNldChIQVZFX1NUUlVDVF9TVEFUX1NUX1VNVElNRSAwKQorICBzZXQoSEFWRV9TVFJVQ1RfVElNRVZBTCAxKQorICBzZXQoSEFWRV9TVFJVQ1RfVE1fX19UTV9HTVRPRkYgMCkKKyAgc2V0KEhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRiAwKQorICBzZXQoSEFWRV9TVFJVQ1RfVkZTQ09ORiAwKQorICBzZXQoSEFWRV9TVFJVQ1RfWFZGU0NPTkYgMCkKKyAgc2V0KEhBVkVfU1lNTElOSyAwKQorICBzZXQoSEFWRV9TWVNfQUNMX0ggMCkKKyAgc2V0KEhBVkVfU1lTQ0FMTF9HRVRSQU5ET00gMCkKKyAgc2V0KEhBVkVfU1lTX0VYVEFUVFJfSCAwKQorICBzZXQoSEFWRV9TWVNfRklMSU9fSCAwKQorICBzZXQoSEFWRV9TWVNfSU9DVExfSCAwKQorICBzZXQoSEFWRV9TWVNfTUtERVZfSCAwKQorICBzZXQoSEFWRV9TWVNfTU9VTlRfSCAwKQorICBzZXQoSEFWRV9TWVNfUE9MTF9IIDApCisgIHNldChIQVZFX1NZU19SRVNPVVJDRV9IIDApCisgIHNldChIQVZFX1NZU19SSUNIQUNMX0ggMCkKKyAgc2V0KEhBVkVfU1lTX1NFTEVDVF9IIDApCisgIHNldChIQVZFX1NZU19TVEFURlNfSCAwKQorICBzZXQoSEFWRV9TWVNfU1RBVF9IIDEpCisgIHNldChIQVZFX1NZU19TVEFUVkZTX0ggMCkKKyAgc2V0KEhBVkVfU1lTX1NZU0NUTF9IIDApCisgIHNldChIQVZFX1NZU19TWVNNQUNST1NfSCAwKQorICBzZXQoSEFWRV9TWVNfVUlPX0ggMCkKKyAgc2V0KEhBVkVfU1lTX1VOX0ggMCkKKyAgc2V0KEhBVkVfU1lTX1VUU05BTUVfSCAwKQorICBzZXQoSEFWRV9TWVNfVkZTX0ggMCkKKyAgc2V0KEhBVkVfU1lTX1dBSVRfSCAwKQorICBzZXQoSEFWRV9TWVNfWEFUVFJfSCAwKQorICBzZXQoSEFWRV9USU1FR00gMCkKKyAgc2V0KEhBVkVfVFpTRVQgMSkKKyAgc2V0KEhBVkVfVU5MSU5LQVQgMCkKKyAgc2V0KEhBVkVfVVNMRUVQIDApCisgIHNldChIQVZFX1VUSU1FTlNBVCAwKQorICBzZXQoSEFWRV9VVElNRVMgMCkKKyAgc2V0KEhBVkVfVkZPUksgMCkKKyAgc2V0KEhBVkVfV09SS0lOR19FWFQyX0lPQ19HRVRGTEFHUyAwKQorICBzZXQoSEFWRV9XT1JLSU5HX0ZTX0lPQ19HRVRGTEFHUyAwKQorCisgICMgU29tZSBQT1NJWCBoZWFkZXJzIGFyZSBhdmFpbGFibGUgb24gV2luZG93cy4KKyAgc2V0KEhBVkVfU1lTX1RZUEVTX0ggMSkKKyAgc2V0KEhBVkVfU1lTX1VUSU1FX0ggMSkKKyAgc2V0KEhBVkVfVElNRV9IIDEpCisgIHNldChIQVZFX1VUSU1FIDEpCisKKyAgIyBXaWRlIGNoYXJhY3RlciBBUElzIGFyZSBhdmFpbGFibGUgb24gV2luZG93cy4KKyAgc2V0KEhBVkVfV0NSVE9NQiAxKQorICBzZXQoSEFWRV9XQ1NDTVAgMSkKKyAgc2V0KEhBVkVfV0NTQ1BZIDEpCisgIHNldChIQVZFX1dDU0xFTiAxKQorICBzZXQoSEFWRV9XQ1RPTUIgMSkKKyAgc2V0KEhBVkVfV0NUWVBFX0ggMSkKKworICAjIFdpbmRvd3MgQVBJcyBhcmUgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisgIHNldChIQVZFX1dJTkNSWVBUX0ggMSkKKyAgc2V0KEhBVkVfV0lORE9XU19IIDEpCisgIHNldChIQVZFX1dJTklPQ1RMX0ggMSkKKyAgc2V0KEhBVkVfV0lOU09DSzJfSCAxKQorICBzZXQoSEFWRV9XSU5TT0NLX0ggMSkKKyAgc2V0KEhBVkVfV1MyVENQSVBfSCAxKQorCisgICMgVU5JWCBpbnRlZ2VyIGlkIHR5cGVzIGRvIG5vdCBleGlzdCBvbiBXaW5kb3dzLgorICBzZXQoSEFWRV9JRF9UIDApCisgIHNldChIQVZFX0dJRF9UIDApCisgIHNldChIQVZFX1VJRF9UIDApCisgIHNldChJRF9UICIiKQorICBzZXQoR0lEX1QgIiIpCisgIHNldChVSURfVCAiIikKKworICAjIGN1cmwgYW5kIGV4cGF0OiBzdGRsaWIuaCwgc3RkYXJnLmgsIHN0cmluZy5oLCBmbG9hdC5oCisgIHNldChTVERDX0hFQURFUlMgMSkKKworICAjIFVOSVggZGV2aWNlIEFQSXMgZG8gbm90IGV4aXN0IG9uIFdpbmRvd3MuCisgIHNldChNQUpPUl9JTl9NS0RFViAwKQorICBzZXQoTUFKT1JfSU5fU1lTTUFDUk9TIDApCisKKyAgIyBGcmVlQlNEIGxpYm1kIGRvZXMgbm90IGV4aXN0IG9uIFdpbmRvd3MuCisgIHNldChMSUJNRF9GT1VORCAwKQorCisgICMgbGliYXJjaGl2ZSBsb29rcyBmb3IgZXh0ZXJuYWwgaGFzaCBpbXBsZW1lbnRhdGlvbnMuCisgIHNldChBUkNISVZFX0NSWVBUT19NRDVfTElCQyAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fTUQ1X0xJQk1EIDApCisgIHNldChBUkNISVZFX0NSWVBUT19NRDVfTElCU1lTVEVNIDApCisgIHNldChBUkNISVZFX0NSWVBUT19NRDVfV0lOIDEpCisgIHNldChBUkNISVZFX0NSWVBUT19STUQxNjBfTElCQyAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fUk1EMTYwX0xJQk1EIDApCisgIHNldChBUkNISVZFX0NSWVBUT19TSEExX0xJQkMgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTElCTUQgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTElCU1lTVEVNIDApCisgIHNldChBUkNISVZFX0NSWVBUT19TSEExX1dJTiAxKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBMjU2X0xJQkMgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9MSUJDMiAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBMjU2X0xJQkMzIDApCisgIHNldChBUkNISVZFX0NSWVBUT19TSEEyNTZfTElCTUQgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9MSUJTWVNURU0gMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9MSUJDIDApCisgIHNldChBUkNISVZFX0NSWVBUT19TSEEzODRfTElCQzIgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9MSUJDMyAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBMzg0X0xJQlNZU1RFTSAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBNTEyX0xJQkMgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9MSUJDMiAwKQorICBzZXQoQVJDSElWRV9DUllQVE9fU0hBNTEyX0xJQkMzIDApCisgIHNldChBUkNISVZFX0NSWVBUT19TSEE1MTJfTElCTUQgMCkKKyAgc2V0KEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9MSUJTWVNURU0gMCkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV9iemxpYi5oIGIvVXRpbGl0aWVzL2NtX2J6bGliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NjllOWUuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtX2J6bGliLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX2J6bGliX2gKLSNkZWZpbmUgY21fYnpsaWJfaAotCi0vKiBVc2UgdGhlIGJ6aXAyIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLwotI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgotI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fQlpJUDIKLSMgIGluY2x1ZGUgPGJ6bGliLmg+Ci0jZWxzZQotIyAgaW5jbHVkZSA8Y21iemlwMi9iemxpYi5oPgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtX2N1cmwuaCBiL1V0aWxpdGllcy9jbV9jdXJsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3M2Y4YWQuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtX2N1cmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21fY3VybF9oCi0jZGVmaW5lIGNtX2N1cmxfaAotCi0vKiBVc2UgdGhlIGN1cmwgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9DVVJMCi0jICBpbmNsdWRlIDxjdXJsL2N1cmwuaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbWN1cmwvaW5jbHVkZS9jdXJsL2N1cmwuaD4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV9leHBhdC5oIGIvVXRpbGl0aWVzL2NtX2V4cGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNWIzOWEuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtX2V4cGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX2V4cGF0X2gKLSNkZWZpbmUgY21fZXhwYXRfaAotCi0vKiBVc2UgdGhlIGV4cGF0IGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLwotI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgotI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fRVhQQVQKLSMgIGluY2x1ZGUgPGV4cGF0Lmg+Ci0jZWxzZQotIyAgaW5jbHVkZSA8Y21leHBhdC9saWIvZXhwYXQuaD4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV9qc29uY3BwX3JlYWRlci5oIGIvVXRpbGl0aWVzL2NtX2pzb25jcHBfcmVhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYWY2NWMuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtX2pzb25jcHBfcmVhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX2pzb25jcHBfcmVhZGVyX2gKLSNkZWZpbmUgY21fanNvbmNwcF9yZWFkZXJfaAotCi0vKiBVc2UgdGhlIGpzb25jcHAgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9KU09OQ1BQCi0jICBpbmNsdWRlIDxqc29uL3JlYWRlci5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGNtanNvbmNwcC9pbmNsdWRlL2pzb24vcmVhZGVyLmg+Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21fanNvbmNwcF92YWx1ZS5oIGIvVXRpbGl0aWVzL2NtX2pzb25jcHBfdmFsdWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQyZDk5YS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fanNvbmNwcF92YWx1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwotI2lmbmRlZiBjbV9qc29uY3BwX3ZhbHVlX2gKLSNkZWZpbmUgY21fanNvbmNwcF92YWx1ZV9oCi0KLS8qIFVzZSB0aGUganNvbmNwcCBsaWJyYXJ5IGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KLSNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKLSNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0pTT05DUFAKLSMgIGluY2x1ZGUgPGpzb24vdmFsdWUuaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbWpzb25jcHAvaW5jbHVkZS9qc29uL3ZhbHVlLmg+Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21fanNvbmNwcF93cml0ZXIuaCBiL1V0aWxpdGllcy9jbV9qc29uY3BwX3dyaXRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWU1ZDgyLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbV9qc29uY3BwX3dyaXRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwotI2lmbmRlZiBjbV9qc29uY3BwX3dyaXRlcl9oCi0jZGVmaW5lIGNtX2pzb25jcHBfd3JpdGVyX2gKLQotLyogVXNlIHRoZSBqc29uY3BwIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLwotI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgotI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fSlNPTkNQUAotIyAgaW5jbHVkZSA8anNvbi93cml0ZXIuaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbWpzb25jcHAvaW5jbHVkZS9qc29uL3dyaXRlci5oPgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtX2t3aW1sLmggYi9VdGlsaXRpZXMvY21fa3dpbWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY2ZjY3ZS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fa3dpbWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21fa3dpbWxfaAotI2RlZmluZSBjbV9rd2ltbF9oCi0KLS8qIFVzZSB0aGUgS1dJTUwgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9LV0lNTAotIyAgaW5jbHVkZSA8a3dpbWwvYWJpLmg+Ci0jICBpbmNsdWRlIDxrd2ltbC9pbnQuaD4KLSNlbHNlCi0jICBpbmNsdWRlICJLV0lNTC9pbmNsdWRlL2t3aW1sL2FiaS5oIgotIyAgaW5jbHVkZSAiS1dJTUwvaW5jbHVkZS9rd2ltbC9pbnQuaCIKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV9saWJhcmNoaXZlLmggYi9VdGlsaXRpZXMvY21fbGliYXJjaGl2ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYThlOWRiLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbV9saWJhcmNoaXZlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX2xpYmFyY2hpdmVfaAotI2RlZmluZSBjbV9saWJhcmNoaXZlX2gKLQotLyogVXNlIHRoZSBsaWJhcmNoaXZlIGNvbmZpZ3VyZWQgZm9yIENNYWtlLiAgKi8KLSNpbmNsdWRlICJjbVRoaXJkUGFydHkuaCIKLSNpZmRlZiBDTUFLRV9VU0VfU1lTVEVNX0xJQkFSQ0hJVkUKLSMgIGluY2x1ZGUgPGFyY2hpdmUuaD4KLSMgIGluY2x1ZGUgPGFyY2hpdmVfZW50cnkuaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlLmg+Ci0jICBpbmNsdWRlIDxjbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5Lmg+Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21fbHptYS5oIGIvVXRpbGl0aWVzL2NtX2x6bWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUyNjAzNi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fbHptYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwotI2lmbmRlZiBjbV9sem1hX2gKLSNkZWZpbmUgY21fbHptYV9oCi0KLS8qIFVzZSB0aGUgbGlibHptYSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9MSUJMWk1BCi0jICBpbmNsdWRlIDxsem1hLmg+Ci0jZWxzZQotIyAgaW5jbHVkZSA8Y21saWJsem1hL2xpYmx6bWEvYXBpL2x6bWEuaD4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV9yaGFzaC5oIGIvVXRpbGl0aWVzL2NtX3JoYXNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZDk4NzEuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtX3JoYXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX3JoYXNoX2gKLSNkZWZpbmUgY21fcmhhc2hfaAotCi0vKiBVc2UgdGhlIExpYlJIYXNoIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLwotI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgotI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fTElCUkhBU0gKLSMgIGluY2x1ZGUgPHJoYXNoLmg+Ci0jZWxzZQotIyAgaW5jbHVkZSA8Y21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5oPgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtX3V2LmggYi9VdGlsaXRpZXMvY21fdXYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ4ZjMwZC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fdXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCi0gICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KLSNpZm5kZWYgY21fdXZfaAotI2RlZmluZSBjbV91dl9oCi0KLS8qIFVzZSB0aGUgbGlidXYgbGlicmFyeSBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9MSUJVVgotIyAgaW5jbHVkZSA8dXYuaD4KLSNlbHNlCi0jICBpbmNsdWRlIDxjbWxpYnV2L2luY2x1ZGUvdXYuaD4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbV96bGliLmggYi9VdGlsaXRpZXMvY21femxpYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzE0MTgzLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbV96bGliLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZwotICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCi0jaWZuZGVmIGNtX3psaWJfaAotI2RlZmluZSBjbV96bGliX2gKLQotLyogVXNlIHRoZSB6bGliIGxpYnJhcnkgY29uZmlndXJlZCBmb3IgQ01ha2UuICAqLwotI2luY2x1ZGUgImNtVGhpcmRQYXJ0eS5oIgotI2lmZGVmIENNQUtFX1VTRV9TWVNURU1fWkxJQgotIyAgaW5jbHVkZSA8emxpYi5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGNtemxpYi96bGliLmg+Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21fenN0ZC5oIGIvVXRpbGl0aWVzL2NtX3pzdGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkYTk5Ni4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21fenN0ZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKLSAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLwotI2lmbmRlZiBjbV96c3RkX2gKLSNkZWZpbmUgY21fenN0ZF9oCi0KLS8qIFVzZSB0aGUgbGlienN0ZCBjb25maWd1cmVkIGZvciBDTWFrZS4gICovCi0jaW5jbHVkZSAiY21UaGlyZFBhcnR5LmgiCi0jaWZkZWYgQ01BS0VfVVNFX1NZU1RFTV9aU1RECi0jICBpbmNsdWRlIDx6c3RkLmg+Ci0jZWxzZQotIyAgaW5jbHVkZSA8Y216c3RkL2xpYi96c3RkLmg+Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi8uZ2l0YXR0cmlidXRlcyBiL1V0aWxpdGllcy9jbWJ6aXAyLy5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21iemlwMi8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9DSEFOR0VTIGIvVXRpbGl0aWVzL2NtYnppcDIvQ0hBTkdFUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU0ZjY1ZS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9DSEFOR0VTCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgotIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCi0KLSBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgotCi0gUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAotIFJFQURNRSBmaWxlLgotCi0gVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKLSBpbiB0aGUgZmlsZSBMSUNFTlNFLgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLTAuOS4wCi1+fn5+fgotRmlyc3QgdmVyc2lvbi4KLQotCi0wLjkuMGEKLX5+fn5+fgotUmVtb3ZlZCAncmFubGliJyBmcm9tIE1ha2VmaWxlLCBzaW5jZSBtb3N0IG1vZGVybiBVbml4LWVzIAotZG9uJ3QgbmVlZCBpdCwgb3IgZXZlbiBrbm93IGFib3V0IGl0LgotCi0KLTAuOS4wYgotfn5+fn5+Ci1GaXhlZCBhIHByb2JsZW0gd2l0aCBlcnJvciByZXBvcnRpbmcgaW4gYnppcDIuYy4gIFRoaXMgZG9lcyBub3QgZWZmZWN0Ci10aGUgbGlicmFyeSBpbiBhbnkgd2F5LiAgUHJvYmxlbSBpczogdmVyc2lvbnMgMC45LjAgYW5kIDAuOS4wYSAob2YgdGhlCi1wcm9ncmFtIHByb3BlcikgY29tcHJlc3MgYW5kIGRlY29tcHJlc3MgY29ycmVjdGx5LCBidXQgZ2l2ZSBtaXNsZWFkaW5nCi1lcnJvciBtZXNzYWdlcyAoaW50ZXJuYWwgcGFuaWNzKSB3aGVuIGFuIEkvTyBlcnJvciBvY2N1cnMsIGluc3RlYWQgb2YKLXJlcG9ydGluZyB0aGUgcHJvYmxlbSBjb3JyZWN0bHkuICBUaGlzIHNob3VsZG4ndCBnaXZlIGFueSBkYXRhIGxvc3MKLShhcyBmYXIgYXMgSSBjYW4gc2VlKSwgYnV0IGlzIGNvbmZ1c2luZy4KLQotTWFkZSB0aGUgaW5saW5lIGRlY2xhcmF0aW9ucyBkaXNhcHBlYXIgZm9yIG5vbi1HQ0MgY29tcGlsZXJzLgotCi0KLTAuOS4wYwotfn5+fn5+Ci1GaXhlZCBzb21lIHByb2JsZW1zIGluIHRoZSBsaWJyYXJ5IHBlcnRhaW5pbmcgdG8gc29tZSBib3VuZGFyeSBjYXNlcy4KLVRoaXMgbWFrZXMgdGhlIGxpYnJhcnkgYmVoYXZlIG1vcmUgY29ycmVjdGx5IGluIHRob3NlIHNpdHVhdGlvbnMuICBUaGUKLWZpeGVzIGFwcGx5IG9ubHkgdG8gZmVhdHVyZXMgKGNhbGxzIGFuZCBwYXJhbWV0ZXJzKSBub3QgdXNlZCBieQotYnppcDIuYywgc28gdGhlIG5vbi1maXhlZG5lc3Mgb2YgdGhlbSBpbiBwcmV2aW91cyB2ZXJzaW9ucyBoYXMgbm8KLWVmZmVjdCBvbiByZWxpYWJpbGl0eSBvZiBiemlwMi5jLgotCi1JbiBiemxpYi5jOgotICAgKiBtYWRlIHplcm8tbGVuZ3RoIEJaX0ZMVVNIIHdvcmsgY29ycmVjdGx5IGluIGJ6Q29tcHJlc3MoKS4KLSAgICogZml4ZWQgYnpXcml0ZS9ielJlYWQgdG8gaWdub3JlIHplcm8tbGVuZ3RoIHJlcXVlc3RzLgotICAgKiBmaXhlZCBienJlYWQgdG8gY29ycmVjdGx5IGhhbmRsZSByZWFkIHJlcXVlc3RzIGFmdGVyIEVPRi4KLSAgICogd3JvbmcgcGFyYW1ldGVyIG9yZGVyIGluIGNhbGwgdG8gYnpEZWNvbXByZXNzSW5pdCBpbgotICAgICBiekJ1ZmZUb0J1ZmZEZWNvbXByZXNzLiAgRml4ZWQuCi0KLUluIGNvbXByZXNzLmM6Ci0gICAqIGNoYW5nZWQgc2V0dGluZyBvZiBuR3JvdXBzIGluIHNlbmRNVEZWYWx1ZXMoKSBzbyBhcyB0byAKLSAgICAgZG8gYSBiaXQgYmV0dGVyIG9uIHNtYWxsIGZpbGVzLiAgVGhpcyBfZG9lc18gZWZmZWN0Ci0gICAgIGJ6aXAyLmMuCi0KLQotMC45LjVhCi1+fn5+fn4KLU1ham9yIGNoYW5nZTogYWRkIGEgZmFsbGJhY2sgc29ydGluZyBhbGdvcml0aG0gKGJsb2Nrc29ydC5jKQotdG8gZ2l2ZSByZWFzb25hYmxlIGJlaGF2aW91ciBldmVuIGZvciB2ZXJ5IHJlcGV0aXRpdmUgaW5wdXRzLgotTnVrZWQgLS1yZXBldGl0aXZlLWJlc3QgYW5kIC0tcmVwZXRpdGl2ZS1mYXN0IHNpbmNlIHRoZXkgYXJlCi1ubyBsb25nZXIgdXNlZnVsLgotCi1NaW5vciBjaGFuZ2VzOiBtb3N0bHkgYSB3aG9sZSBidW5jaCBvZiBzbWFsbCBjaGFuZ2VzLwotYnVnZml4ZXMgaW4gdGhlIGRyaXZlciAoYnppcDIuYykuICBDaGFuZ2VzIHBlcnRhaW5pbmcgdG8gdGhlCi11c2VyIGludGVyZmFjZSBhcmU6Ci0KLSAgIGFsbG93IGRlY29tcHJlc3Npb24gb2Ygc3ltbGluaydkIGZpbGVzIHRvIHN0ZG91dAotICAgZGVjb21wcmVzcy90ZXN0IGZpbGVzIGV2ZW4gd2l0aG91dCAuYnoyIGV4dGVuc2lvbgotICAgZ2l2ZSBtb3JlIGFjY3VyYXRlIGVycm9yIG1lc3NhZ2VzIGZvciBJL08gZXJyb3JzCi0gICB3aGVuIGNvbXByZXNzaW5nL2RlY29tcHJlc3NpbmcgdG8gc3Rkb3V0LCBkb24ndCBjYXRjaCBjb250cm9sLUMKLSAgIHJlYWQgZmxhZ3MgZnJvbSBCWklQMiBhbmQgQlpJUCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgIGRlY2xpbmUgdG8gYnJlYWsgaGFyZCBsaW5rcyB0byBhIGZpbGUgdW5sZXNzIGZvcmNlZCB3aXRoIC1mCi0gICBhbGxvdyAtYyBmbGFnIGV2ZW4gd2l0aCBubyBmaWxlbmFtZXMKLSAgIHByZXNlcnZlIGZpbGUgb3duZXJzaGlwcyBhcyBmYXIgYXMgcG9zc2libGUKLSAgIG1ha2UgLXMgLTEgZ2l2ZSB0aGUgZXhwZWN0ZWQgYmxvY2sgc2l6ZSAoMTAwaykKLSAgIGFkZCBhIGZsYWcgLXEgLS1xdWlldCB0byBzdXBwcmVzcyBub25lc3NlbnRpYWwgd2FybmluZ3MKLSAgIHN0b3AgZGVjb2RpbmcgZmxhZ3MgYWZ0ZXIgLS0sIHNvIGZpbGVzIGJlZ2lubmluZyBpbiAtIGNhbiBiZSBoYW5kbGVkCi0gICByZXNvbHZlZCBpbmNvbnNpc3RlbnQgbmFtaW5nOiBiemNhdCBvciBiejJjYXQgPwotICAgYnppcDIgLS1oZWxwIG5vdyByZXR1cm5zIDAKLQotUHJvZ3JhbW1pbmctbGV2ZWwgY2hhbmdlcyBhcmU6Ci0KLSAgIGZpeGVkIHN5bnRheCBlcnJvciBpbiBHRVRfTEw0IGZvciBCb3JsYW5kIEMrKyA1LjAyCi0gICBsZXQgYnpCdWZmVG9CdWZmRGVjb21wcmVzcyByZXR1cm4gQlpfREFUQV9FUlJPUntfTUFHSUN9Ci0gICBmaXggb3ZlcnNob290IG9mIG1vZGUtc3RyaW5nIGVuZCBpbiBiem9wZW5fb3JfYnpkb3BlbgotICAgd3JhcHBlZCBiemxpYi5oIGluICNpZmRlZiBfX2NwbHVzcGx1cyAuLi4gZXh0ZXJuICJDIiB7IC4uLiB9Ci0gICBjbG9zZSBmaWxlIGhhbmRsZXMgdW5kZXIgYWxsIGVycm9yIGNvbmRpdGlvbnMKLSAgIGFkZGVkIG1pbm9yIG1vZHMgc28gaXQgY29tcGlsZXMgd2l0aCBESkdQUCBvdXQgb2YgdGhlIGJveAotICAgZml4ZWQgTWFrZWZpbGUgc28gaXQgZG9lc24ndCBnaXZlIHByb2JsZW1zIHdpdGggQlNEIG1ha2UKLSAgIGZpeCB1bmluaXRpYWxpc2VkIG1lbW9yeSByZWFkcyBpbiBkbGx0ZXN0LmMKLQotMC45LjViCi1+fn5+fn4KLU9wZW4gc3RkaW4vc3Rkb3V0IGluIGJpbmFyeSBtb2RlIGZvciBESkdQUC4KLQotMC45LjVjCi1+fn5+fn4KLUNoYW5nZWQgQlpfTl9PVkVSU0hPT1QgdG8gYmUgLi4uICsgMiBpbnN0ZWFkIG9mIC4uLiArIDEuICBUaGUgKyAxCi12ZXJzaW9uIGNvdWxkIGNhdXNlIHRoZSBzb3J0ZWQgb3JkZXIgdG8gYmUgd3JvbmcgaW4gc29tZSBleHRyZW1lbHkKLW9ic2N1cmUgY2FzZXMuICBBbHNvIGNoYW5nZWQgc2V0dGluZyBvZiBxdWFkcmFudCBpbiBibG9ja3NvcnQuYy4KLQotMC45LjVkCi1+fn5+fn4KLVRoZSBvbmx5IGZ1bmN0aW9uYWwgY2hhbmdlIGlzIHRvIG1ha2UgYnpsaWJWZXJzaW9uKCkgaW4gdGhlIGxpYnJhcnkKLXJldHVybiB0aGUgY29ycmVjdCBzdHJpbmcuICBUaGlzIGhhcyBubyBlZmZlY3Qgd2hhdHNvZXZlciBvbiB0aGUKLWZ1bmN0aW9uaW5nIG9mIHRoZSBiemlwMiBwcm9ncmFtIG9yIGxpYnJhcnkuICBBZGRlZCBhIGNvdXBsZSBvZiBjYXN0cwotc28gdGhlIGxpYnJhcnkgY29tcGlsZXMgd2l0aG91dCB3YXJuaW5ncyBhdCBsZXZlbCAzIGluIE1TIFZpc3VhbAotU3R1ZGlvIDYuMC4gIEluY2x1ZGVkIGEgWTJLIHN0YXRlbWVudCBpbiB0aGUgZmlsZSBZMktfSU5GTy4gIEFsbCBvdGhlcgotY2hhbmdlcyBhcmUgbWlub3IgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLgotCi0xLjAKLX5+fgotU2V2ZXJhbCBtaW5vciBidWdmaXhlcyBhbmQgZW5oYW5jZW1lbnRzOgotCi0qIExhcmdlIGZpbGUgc3VwcG9ydC4gIFRoZSBsaWJyYXJ5IHVzZXMgNjQtYml0IGNvdW50ZXJzIHRvCi0gIGNvdW50IHRoZSB2b2x1bWUgb2YgZGF0YSBwYXNzaW5nIHRocm91Z2ggaXQuICBiemlwMi5jIAotICBpcyBub3cgY29tcGlsZWQgd2l0aCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IHRvIGdldCBsYXJnZQotICBmaWxlIHN1cHBvcnQgZnJvbSB0aGUgQyBsaWJyYXJ5LiAgLXYgY29ycmVjdGx5IHByaW50cyBvdXQKLSAgZmlsZSBzaXplcyBncmVhdGVyIHRoYW4gNCBnaWdhYnl0ZXMuICBBbGwgdGhlc2UgY2hhbmdlcyBoYXZlCi0gIGJlZW4gbWFkZSB3aXRob3V0IGFzc3VtaW5nIGEgNjQtYml0IHBsYXRmb3JtIG9yIGEgQyBjb21waWxlcgotICB3aGljaCBzdXBwb3J0cyA2NC1iaXQgaW50cywgc28sIGV4Y2VwdCBmb3IgdGhlIEMgbGlicmFyeQotICBhc3BlY3QsIHRoZXkgYXJlIGZ1bGx5IHBvcnRhYmxlLgotCi0qIERlY29tcHJlc3Npb24gcm9idXN0bmVzcy4gIFRoZSBsaWJyYXJ5L3Byb2dyYW0gc2hvdWxkIGJlCi0gIHJvYnVzdCB0byBhbnkgY29ycnVwdGlvbiBvZiBjb21wcmVzc2VkIGRhdGEsIGRldGVjdGluZyBhbmQKLSAgaGFuZGxpbmcgX2FsbF8gY29ycnVwdGlvbiwgaW5zdGVhZCBvZiBtZXJlbHkgcmVseWluZyBvbgotICB0aGUgQ1JDcy4gIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IHRoZSBwcm9ncmFtIHNob3VsZCAKLSAgbmV2ZXIgY3Jhc2gsIGdpdmVuIGNvcnJ1cHRlZCBkYXRhLCBhbmQgdGhlIGxpYnJhcnkgc2hvdWxkCi0gIGFsd2F5cyByZXR1cm4gQlpfREFUQV9FUlJPUi4KLQotKiBGaXhlZCBhbiBvYnNjdXJlIHJhY2UtY29uZGl0aW9uIGJ1ZyBvbmx5IGV2ZXIgb2JzZXJ2ZWQgb24KLSAgU29sYXJpcywgaW4gd2hpY2gsIGlmIHlvdSB3ZXJlIHZlcnkgdW5sdWNreSBhbmQgaXNzdWVkCi0gIGNvbnRyb2wtQyBhdCBleGFjdGx5IHRoZSB3cm9uZyB0aW1lLCBib3RoIGlucHV0IGFuZCBvdXRwdXQKLSAgZmlsZXMgd291bGQgYmUgZGVsZXRlZC4KLQotKiBEb24ndCBydW4gb3V0IG9mIGZpbGUgaGFuZGxlcyBvbiB0ZXN0L2RlY29tcHJlc3Npb24gd2hlbgotICBsYXJnZSBudW1iZXJzIG9mIGZpbGVzIGhhdmUgaW52YWxpZCBtYWdpYyBudW1iZXJzLgotCi0qIEF2b2lkIGxpYnJhcnkgbmFtZXNwYWNlIHBvbGx1dGlvbi4gIFByZWZpeCBhbGwgZXhwb3J0ZWQgCi0gIHN5bWJvbHMgd2l0aCBCWjJfLgotCi0qIE1pbm9yIHNvcnRpbmcgZW5oYW5jZW1lbnRzIGZyb20gbXkgRENDMjAwMCBwYXBlci4KLQotKiBBZHZhbmNlIHRoZSB2ZXJzaW9uIG51bWJlciB0byAxLjAsIHNvIGFzIHRvIGNvdW50ZXJhY3QgdGhlCi0gIChmYWxzZS1pbi10aGlzLWNhc2UpIGltcHJlc3Npb24gc29tZSBwZW9wbGUgaGF2ZSB0aGF0IHByb2dyYW1zIAotICB3aXRoIHZlcnNpb24gbnVtYmVycyBsZXNzIHRoYW4gMS4wIGFyZSBpbiBzb21lIHdheSwgZXhwZXJpbWVudGFsLAotICBwcmUtcmVsZWFzZSB2ZXJzaW9ucy4KLQotKiBDcmVhdGUgYW4gaW5pdGlhbCBNYWtlZmlsZS1saWJiejJfc28gdG8gYnVpbGQgYSBzaGFyZWQgbGlicmFyeS4KLSAgWWVzLCBJIGtub3cgSSBzaG91bGQgcmVhbGx5IHVzZSBsaWJ0b29sIGV0IGFsIC4uLgotCi0qIE1ha2UgdGhlIHByb2dyYW0gZXhpdCB3aXRoIDIgaW5zdGVhZCBvZiAwIHdoZW4gZGVjb21wcmVzc2lvbgotICBmYWlscyBkdWUgdG8gYSBiYWQgbWFnaWMgbnVtYmVyIChpZSwgYW4gaW52YWxpZCBiemlwMiBoZWFkZXIpLgotICBBbHNvIGV4aXQgd2l0aCAxIChhcyB0aGUgbWFudWFsIGNsYWltcyA6LSkgd2hlbmV2ZXIgYSBkaWFnbm9zdGljCi0gIG1lc3NhZ2Ugd291bGQgaGF2ZSBiZWVuIHByaW50ZWQgQU5EIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiAKLSAgaXMgYWJvcnRlZCwgZm9yIGV4YW1wbGUKLSAgICAgYnppcDI6IE91dHB1dCBmaWxlIHh4IGFscmVhZHkgZXhpc3RzLgotICBXaGVuIGEgZGlhZ25vc3RpYyBtZXNzYWdlIGlzIHByaW50ZWQgYnV0IHRoZSBvcGVyYXRpb24gaXMgbm90IAotICBhYm9ydGVkLCBmb3IgZXhhbXBsZQotICAgICBiemlwMjogQ2FuJ3QgZ3Vlc3Mgb3JpZ2luYWwgbmFtZSBmb3Igd3VyYmxlIC0tIHVzaW5nIHd1cmJsZS5vdXQKLSAgdGhlbiB0aGUgZXhpdCB2YWx1ZSAwIGlzIHJldHVybmVkLCB1bmxlc3Mgc29tZSBvdGhlciBwcm9ibGVtIGlzCi0gIGFsc28gZGV0ZWN0ZWQuCi0KLSAgSSB0aGluayBpdCBjb3JyZXNwb25kcyBtb3JlIGNsb3NlbHkgdG8gd2hhdCB0aGUgbWFudWFsIGNsYWltcyBub3cuCi0KLQotMS4wLjEKLX5+fn5+Ci0qIE1vZGlmaWVkIGRsbHRlc3QuYyBzbyBpdCB1c2VzIHRoZSBuZXcgQloyXyBuYW1pbmcgc2NoZW1lLgotKiBNb2RpZmllZCBtYWtlZmlsZS1tc2MgdG8gZml4IG1pbm9yIGJ1aWxkIHByb2JzIG9uIFdpbjJrLgotKiBVcGRhdGVkIFJFQURNRS5DT01QSUxBVElPTi5QUk9CTEVNUy4KLQotVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlcyBvciBidWcgZml4ZXMgcmVsYXRpdmUgdG8gdmVyc2lvbgotMS4wLjAuICBUaGlzIGlzIGp1c3QgYSBkb2N1bWVudGF0aW9uIHVwZGF0ZSArIGEgZml4IGZvciBtaW5vciBXaW4zMgotYnVpbGQgcHJvYmxlbXMuICBGb3IgYWxtb3N0IGV2ZXJ5b25lLCB1cGdyYWRpbmcgZnJvbSAxLjAuMCB0byAxLjAuMSBpcwotdXR0ZXJseSBwb2ludGxlc3MuICBEb24ndCBib3RoZXIuCi0KLQotMS4wLjIKLX5+fn5+Ci1BIGJ1ZyBmaXggcmVsZWFzZSwgYWRkcmVzc2luZyB2YXJpb3VzIG1pbm9yIGlzc3VlcyB3aGljaCBoYXZlIGFwcGVhcmVkCi1pbiB0aGUgMTggb3Igc28gbW9udGhzIHNpbmNlIDEuMC4xIHdhcyByZWxlYXNlZC4gIE1vc3Qgb2YgdGhlIGZpeGVzCi1hcmUgdG8gZG8gd2l0aCBmaWxlLWhhbmRsaW5nIG9yIGRvY3VtZW50YXRpb24gYnVncy4gIFRvIHRoZSBiZXN0IG9mIG15Ci1rbm93bGVkZ2UsIHRoZXJlIGhhdmUgYmVlbiBubyBkYXRhLWxvc3MtY2F1c2luZyBidWdzIHJlcG9ydGVkIGluIHRoZQotY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBlbmdpbmUgb2YgMS4wLjAgb3IgMS4wLjEuCi0KLU5vdGUgdGhhdCB0aGlzIHJlbGVhc2UgZG9lcyBub3QgaW1wcm92ZSB0aGUgcmF0aGVyIGNydWRlIGJ1aWxkIHN5c3RlbQotZm9yIFVuaXggcGxhdGZvcm1zLiAgVGhlIGdlbmVyYWwgcGxhbiBoZXJlIGlzIHRvIGF1dG9jb25maXNjYXRlLwotbGlidG9vbGlzZSAxLjAuMiBzb29uIGFmdGVyIHJlbGVhc2UsIGFuZCByZWxlYXNlIHRoZSByZXN1bHQgYXMgMS4xLjAKLW9yIHBlcmhhcHMgMS4yLjAuICBUaGF0LCBob3dldmVyLCBpcyBzdGlsbCBqdXN0IGEgcGxhbiBhdCB0aGlzIHBvaW50LgotCi1IZXJlIGFyZSB0aGUgY2hhbmdlcyBpbiAxLjAuMi4gIEJ1Zy1yZXBvcnRlcnMgYW5kL29yIHBhdGNoLXNlbmRlcnMgaW4KLXBhcmVudGhlc2VzLgotCi0qIEZpeCBhbiBpbmZpbml0ZSBzZWdmYXVsdCBsb29wIGluIDEuMC4xIHdoZW4gYSBkaXJlY3RvcnkgaXMKLSAgZW5jb3VudGVyZWQgaW4gLWYgKGZvcmNlKSBtb2RlLgotICAgICAoVHJvbmQgRWl2aW5kIEdsb21zcm9kLCBOaWNob2xhcyBOZXRoZXJjb3RlLCBWb2xrZXIgU2NobWlkdCkKLQotKiBBdm9pZCBkb3VibGUgZmNsb3NlKCkgb2Ygb3V0cHV0IGZpbGUgb24gY2VydGFpbiBJL08gZXJyb3IgcGF0aHMuCi0gICAgIChTb2xhciBEZXNpZ25lcikKLQotKiBEb24ndCBmYWlsIHdpdGggaW50ZXJuYWwgZXJyb3IgMTAwNyB3aGVuIGZlZCBhIGxvbmcgc3RyZWFtICg+IDQ4TUIpCi0gIG9mIGJ5dGUgMjUxLiAgQWxzbyBwcmludCB1c2VmdWwgbWVzc2FnZSBzdWdnZXN0aW5nIHRoYXQgMTAwN3MgbWF5IGJlCi0gIGNhdXNlZCBieSBiYWQgbWVtb3J5LgotICAgICAobm90aWNlZCBieSBKdWFuIFBlZHJvIFZhbGxlam8sIGZpeGVkIGJ5IG1lKQotCi0qIEZpeCB1bmluaXRpYWxpc2VkIHZhcmlhYmxlIHNpbGx5IGJ1ZyBpbiBkZW1vIHByb2cgZGxsdGVzdC5jLgotICAgICAoSm9yaiBCYXVlcikKLQotKiBSZW1vdmUgNTEyLU1CIGxpbWl0YXRpb24gb24gcmVjb3ZlcmVkIGZpbGUgc2l6ZSBmb3IgYnppcDJyZWNvdmVyCi0gIG9uIHNlbGVjdGVkIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IDY0LWJpdCBpbnRzLiAgQXQgdGhlIG1vbWVudAotICBhbGwgR0NDIHN1cHBvcnRlZCBwbGF0Zm9ybXMsIGFuZCBXaW4zMi4KLSAgICAgKG1lLCBBbHNvbiB2YW4gZGVyIE1ldWxlbikKLQotKiBIYXJkLWNvZGUgaGVhZGVyIGJ5dGUgdmFsdWVzLCB0byBnaXZlIGNvcnJlY3Qgb3BlcmF0aW9uIG9uIHBsYXRmb3JtcwotICB1c2luZyBFQkNESUMgYXMgdGhlaXIgbmF0aXZlIGNoYXJhY3RlciBzZXQgKElCTSdzIE9TLzM5MCkuCi0gICAgIChMZWxhbmQgTHVjaXVzKQotCi0qIENvcHkgZmlsZSBhY2Nlc3MgdGltZXMgY29ycmVjdGx5LgotICAgICAoTWFydHkgTGVpc25lcikKLQotKiBBZGQgZGlzdGNsZWFuIGFuZCBjaGVjayB0YXJnZXRzIHRvIE1ha2VmaWxlLgotICAgICAoTWljaGFlbCBDYXJtYWNrKQotCi0qIFBhcmFtZXRlcmlzZSB1c2Ugb2YgYXIgYW5kIHJhbmxpYiBpbiBNYWtlZmlsZS4gIEFsc28gYWRkICQoTERGTEFHUykuCi0gICAgIChSaWNoIElyZWxhbmQsIEJvIFRob3JzZW4pCi0KLSogUGFzcyAtcCAoY3JlYXRlIHBhcmVudCBkaXJzIGFzIG5lZWRlZCkgdG8gbWtkaXIgZHVyaW5nIG1ha2UgaW5zdGFsbC4KLSAgICAgKEplcmVteSBGdXNjbykKLQotKiBEZXJlZmVyZW5jZSBzeW1saW5rcyB3aGVuIGNvcHlpbmcgZmlsZSBwZXJtaXNzaW9ucyBpbiAtZiBtb2RlLgotICAgICAoVm9sa2VyIFNjaG1pZHQpCi0KLSogTWFqb3JseSBzaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiBvZiB1SW50NjRfcXJtMTAuCi0gICAgIChCbyBMaW5kYmVyZ2gpCi0KLSogQ2hlY2sgdGhlIGlucHV0IGZpbGUgc3RpbGwgZXhpc3RzIGJlZm9yZSBkZWxldGluZyB0aGUgb3V0cHV0IG9uZSwKLSAgd2hlbiBhYm9ydGluZyBpbiBjbGVhblVwQW5kRmFpbCgpLgotICAgICAoSm9lcmcgUHJhbnRlLCBSb2JlcnQgTGluZGVuLCBNYXR0aGlhcyBLcmluZ3MpCi0KLUFsc28gYSBidW5jaCBvZiBwYXRjaGVzIGNvdXJ0ZXN5IG9mIFBoaWxpcHBlIFRyb2luLCB0aGUgRGViaWFuIG1haW50YWluZXIKLW9mIGJ6aXAyOgotCi0qIFdyYXBwZXIgc2NyaXB0cyAod2l0aCBtYW5wYWdlcyk6IGJ6ZGlmZiwgYnpncmVwLCBiem1vcmUuCi0KLSogU3BlbGxpbmcgY2hhbmdlcyBhbmQgbWlub3IgZW5oYW5jZW1lbnRzIGluIGJ6aXAyLjEuCi0KLSogQXZvaWQgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBjcmVhdGluZyB0aGUgb3V0cHV0IGZpbGUgYW5kIHNldHRpbmcgaXRzCi0gIGludGVyaW0gcGVybWlzc2lvbnMgc2FmZWx5LCBieSB1c2luZyBmb3Blbl9vdXRwdXRfc2FmZWx5KCkuCi0gIE5vIGNoYW5nZXMgdG8gYnppcDJyZWNvdmVyIHNpbmNlIHRoZXJlIGlzIG5vIGlzc3VlIHdpdGggZmlsZQotICBwZXJtaXNzaW9ucyB0aGVyZS4KLQotKiBkbyBub3QgcHJpbnQgc2Vuc2VsZXNzIHJlcG9ydCB3aXRoIC12IHdoZW4gY29tcHJlc3NpbmcgYW4gZW1wdHkKLSAgZmlsZS4KLQotKiBiemNhdCAtZiB3b3JrcyBvbiBub24tYnppcDIgZmlsZXMuCi0KLSogZG8gbm90IHRyeSB0byBlc2NhcGUgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIG9uIHVuaXggKHRoZSBzaGVsbCB0YWtlcwotICBjYXJlIG9mIHRoZXNlKS4KLQotKiBhZGRlZCAtLWZhc3QgYW5kIC0tYmVzdCBhbGlhc2VzIGZvciAtMSAtOSBmb3IgZ3ppcCBjb21wYXRpYmlsaXR5LgotCi0KLTEuMC4zICgxNSBGZWIgMDUpCi1+fn5+fn5+fn5+fn5+fn5+fgotRml4ZXMgc29tZSBtaW5vciBidWdzIHNpbmNlIHRoZSBsYXN0IHZlcnNpb24sIDEuMC4yLgotCi0qIEZ1cnRoZXIgcm9idXN0aWZpY2F0aW9uIGFnYWluc3QgY29ycnVwdGVkIGNvbXByZXNzZWQgZGF0YS4KLSAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBrbm93biBiaXRzdHJlYW1zIHdoaWNoIGNhbiBjYXVzZSB0aGUKLSAgZGVjb21wcmVzc29yIHRvIGNyYXNoLCBsb29wIG9yIGFjY2VzcyBtZW1vcnkgd2hpY2ggZG9lcyBub3QKLSAgYmVsb25nIHRvIGl0LiAgSWYgeW91IGFyZSB1c2luZyBiemlwMiBvciB0aGUgbGlicmFyeSB0byAKLSAgZGVjb21wcmVzcyBiaXRzdHJlYW1zIGZyb20gdW50cnVzdGVkIHNvdXJjZXMsIGFuIHVwZ3JhZGUKLSAgdG8gMS4wLjMgaXMgcmVjb21tZW5kZWQuICBUaGlzIGZpeGVzIENBTi0yMDA1LTEyNjAuCi0KLSogVGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gY29udmVydGVkIHRvIFhNTCwgZnJvbSB3aGljaCBodG1sCi0gIGFuZCBwZGYgY2FuIGJlIGRlcml2ZWQuCi0KLSogVmFyaW91cyBtaW5vciBidWdzIGluIHRoZSBkb2N1bWVudGF0aW9uIGhhdmUgYmVlbiBmaXhlZC4KLQotKiBGaXhlcyBmb3IgdmFyaW91cyBjb21waWxhdGlvbiB3YXJuaW5ncyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mCi0gIGdjYywgYW5kIG9uIDY0LWJpdCBwbGF0Zm9ybXMuCi0KLSogVGhlIEJaX05PX1NURElPIGNwcCBzeW1ib2wgd2FzIG5vdCBwcm9wZXJseSBvYnNlcnZlZCBpbiAxLjAuMi4KLSAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KLQotCi0xLjAuNCAoMjAgRGVjIDA2KQotfn5+fn5+fn5+fn5+fn5+fn4KLUZpeGVzIHNvbWUgbWlub3IgYnVncyBzaW5jZSB0aGUgbGFzdCB2ZXJzaW9uLCAxLjAuMy4KLQotKiBGaXggZmlsZSBwZXJtaXNzaW9ucyByYWNlIHByb2JsZW0gKENBTi0yMDA1LTA5NTMpLgotCi0qIEF2b2lkIHBvc3NpYmxlIHNlZ2ZhdWx0IGluIEJaMl9iemNsb3NlLiAgRnJvbSBDb3Zlcml0eSdzIE5ldEJTRAotICBzY2FuLgotCi0qICdjb25zdCcvcHJvdG90eXBlIGNsZWFudXBzIGluIHRoZSBDIGNvZGUuCi0KLSogQ2hhbmdlIGRlZmF1bHQgaW5zdGFsbCBsb2NhdGlvbiB0byAvdXNyL2xvY2FsLCBhbmQgaGFuZGxlIG11bHRpcGxlCi0gICdtYWtlIGluc3RhbGwncyB3aXRob3V0IGVycm9yLgotCi0qIFNhbml0aXNlIGZpbGUgbmFtZXMgbW9yZSBjYXJlZnVsbHkgaW4gYnpncmVwLiAgRml4ZXMgQ0FOLTIwMDUtMDc1OAotICB0byB0aGUgZXh0ZW50IHRoYXQgYXBwbGllcyB0byBiemdyZXAuCi0KLSogVXNlICdta3RlbXAnIHJhdGhlciB0aGFuICd0ZW1wZmlsZScgaW4gYnpkaWZmLgotCi0qIFRpZ2h0ZW4gdXAgYSBjb3VwbGUgb2YgYXNzZXJ0aW9ucyBpbiBibG9ja3NvcnQuYyBmb2xsb3dpbmcgYXV0b21hdGVkCi0gIGFuYWx5c2lzLgotCi0qIEZpeCBtaW5vciBkb2MvY29tbWVudCBidWdzLgotCi0KLTEuMC41ICgxMCBEZWMgMDcpCi1+fn5+fn5+fn5+fn5+fn5+fgotU2VjdXJpdHkgZml4IG9ubHkuICBGaXhlcyBDRVJULUZJIDIwNDY5IGFzIGl0IGFwcGxpZXMgdG8gYnppcDIuCi0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL2NtYnppcDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMmFmZjY5Yy4uY2I0YTAzOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSwxMyBAQAogcHJvamVjdChiemlwMikKKworIyBEaXNhYmxlIHdhcm5pbmdzIHRvIGF2b2lkIGNoYW5naW5nIDNyZCBwYXJ0eSBjb2RlLgoraWYoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTCisgICAgIl4oR05VfENsYW5nfEFwcGxlQ2xhbmd8WExDbGFuZ3xYTHxWaXN1YWxBZ2V8U3VuUHJvfEhQfEludGVsKSQiKQorICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtdyIpCitlbHNlaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBTVFJFUVVBTCAiUGF0aFNjYWxlIikKKyAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLXdvZmZhbGwiKQorZW5kaWYoKQorCiBhZGRfZGVmaW5pdGlvbnMoLURfRklMRV9PRkZTRVRfQklUUz02NCkKIGFkZF9saWJyYXJ5KGNtYnppcDIKICAgYmxvY2tzb3J0LmMgaHVmZm1hbi5jIGNyY3RhYmxlLmMgcmFuZHRhYmxlLmMgY29tcHJlc3MuYyBkZWNvbXByZXNzLmMgYnpsaWIuYykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL0xJQ0VOU0UgYi9VdGlsaXRpZXMvY21iemlwMi9MSUNFTlNFCmluZGV4IGY0MjBjZmYuLjgxYTM3ZWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL0xJQ0VOU0UKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvTElDRU5TRQpAQCAtMiw3ICsyLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgcHJvZ3JhbSwgImJ6aXAyIiwgdGhlIGFzc29jaWF0ZWQgbGlicmFyeSAibGliYnppcDIiLCBhbmQgYWxsCi1kb2N1bWVudGF0aW9uLCBhcmUgY29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFIgU2V3YXJkLiAgQWxsCitkb2N1bWVudGF0aW9uLCBhcmUgY29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFIgU2V3YXJkLiAgQWxsCiByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzYsNyArMzYsNyBAQAogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotSnVsaWFuIFNld2FyZCwganNld2FyZEBiemlwLm9yZwotYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3CitKdWxpYW4gU2V3YXJkLCBqc2V3YXJkQGFjbS5vcmcKK2J6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9NYWtlZmlsZS1saWJiejJfc28gYi9VdGlsaXRpZXMvY21iemlwMi9NYWtlZmlsZS1saWJiejJfc28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNzA4ODcuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvTWFrZWZpbGUtbGliYnoyX3NvCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotCi0jIFRoaXMgTWFrZWZpbGUgYnVpbGRzIGEgc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIAotIyBsaWJiejIuc28uMS4wLjQsIHdpdGggc29uYW1lIGxpYmJ6Mi5zby4xLjAsCi0jIGF0IGxlYXN0IG9uIHg4Ni1MaW51eCAoUmVkSGF0IDcuMiksIAotIyB3aXRoIGdjYy0yLjk2IDIwMDAwNzMxIChSZWQgSGF0IExpbnV4IDcuMSAyLjk2LTk4KS4gIAotIyBQbGVhc2Ugc2VlIHRoZSBSRUFETUUgZmlsZSBmb3Igc29tZSBpbXBvcnRhbnQgaW5mbyAKLSMgYWJvdXQgYnVpbGRpbmcgdGhlIGxpYnJhcnkgbGlrZSB0aGlzLgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgotIyBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgotIwotIyBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KLSMKLSMgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAotIyBSRUFETUUgZmlsZS4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKLSMgaW4gdGhlIGZpbGUgTElDRU5TRS4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotU0hFTEw9L2Jpbi9zaAotQ0M9Z2NjCi1CSUdGSUxFUz0tRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci1DRkxBR1M9LWZwaWMgLWZQSUMgLVdhbGwgLVdpbmxpbmUgLU8yIC1nICQoQklHRklMRVMpCi0KLU9CSlM9IGJsb2Nrc29ydC5vICBcCi0gICAgICBodWZmbWFuLm8gICAgXAotICAgICAgY3JjdGFibGUubyAgIFwKLSAgICAgIHJhbmR0YWJsZS5vICBcCi0gICAgICBjb21wcmVzcy5vICAgXAotICAgICAgZGVjb21wcmVzcy5vIFwKLSAgICAgIGJ6bGliLm8KLQotYWxsOiAkKE9CSlMpCi0gICAgJChDQykgLXNoYXJlZCAtV2wsLXNvbmFtZSAtV2wsbGliYnoyLnNvLjEuMCAtbyBsaWJiejIuc28uMS4wLjQgJChPQkpTKQotICAgICQoQ0MpICQoQ0ZMQUdTKSAtbyBiemlwMi1zaGFyZWQgYnppcDIuYyBsaWJiejIuc28uMS4wLjQKLSAgICBybSAtZiBsaWJiejIuc28uMS4wCi0gICAgbG4gLXMgbGliYnoyLnNvLjEuMC40IGxpYmJ6Mi5zby4xLjAKLQotY2xlYW46IAotICAgIHJtIC1mICQoT0JKUykgYnppcDIubyBsaWJiejIuc28uMS4wLjQgbGliYnoyLnNvLjEuMCBiemlwMi1zaGFyZWQKLQotYmxvY2tzb3J0Lm86IGJsb2Nrc29ydC5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIGJsb2Nrc29ydC5jCi1odWZmbWFuLm86IGh1ZmZtYW4uYwotICAgICQoQ0MpICQoQ0ZMQUdTKSAtYyBodWZmbWFuLmMKLWNyY3RhYmxlLm86IGNyY3RhYmxlLmMKLSAgICAkKENDKSAkKENGTEFHUykgLWMgY3JjdGFibGUuYwotcmFuZHRhYmxlLm86IHJhbmR0YWJsZS5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIHJhbmR0YWJsZS5jCi1jb21wcmVzcy5vOiBjb21wcmVzcy5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIGNvbXByZXNzLmMKLWRlY29tcHJlc3MubzogZGVjb21wcmVzcy5jCi0gICAgJChDQykgJChDRkxBR1MpIC1jIGRlY29tcHJlc3MuYwotYnpsaWIubzogYnpsaWIuYwotICAgICQoQ0MpICQoQ0ZMQUdTKSAtYyBiemxpYi5jCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUgYi9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUKaW5kZXggZTE3YTg0ZS4uYjljNjA5OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvUkVBRE1FCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRQpAQCAtNiw4ICs2LDggQEAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi1iemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLUNvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CitiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGlzIGZpbGUuCiAKQEAgLTczLDcgKzczLDcgQEAKIAogSXQncyBkaWZmaWN1bHQgZm9yIG1lIHRvIHN1cHBvcnQgY29tcGlsYXRpb24gb24gYWxsIHRoZXNlIHBsYXRmb3Jtcy4KIE15IGFwcHJvYWNoIGlzIHRvIGNvbGxlY3QgYmluYXJpZXMgZm9yIHRoZXNlIHBsYXRmb3JtcywgYW5kIHB1dCB0aGVtCi1vbiB0aGUgbWFzdGVyIHdlYiBzaXRlIChodHRwOi8vd3d3LmJ6aXAub3JnKS4gIExvb2sgdGhlcmUuICBIb3dldmVyCitvbiB0aGUgbWFzdGVyIHdlYiBzaXRlIChodHRwczovL3NvdXJjZXdhcmUub3JnL2J6aXAyLykuICBMb29rIHRoZXJlLiAgSG93ZXZlcgogKEZXSVcpLCBiemlwMi0xLjAuWCBpcyB2ZXJ5IHN0YW5kYXJkIEFOU0kgQyBhbmQgc2hvdWxkIGNvbXBpbGUKIHVubW9kaWZpZWQgd2l0aCBNUyBWaXN1YWwgQy4gIElmIHlvdSBoYXZlIGRpZmZpY3VsdGllcyBidWlsZGluZywgeW91CiBtaWdodCB3YW50IHRvIHJlYWQgUkVBRE1FLkNPTVBJTEFUSU9OLlBST0JMRU1TLgpAQCAtMTYxLDM5ICsxNjEsMjIgQEAKICAgICogTWFueSBzbWFsbCBpbXByb3ZlbWVudHMgaW4gZmlsZSBhbmQgZmxhZyBoYW5kbGluZy4KICAgICogQSBZMksgc3RhdGVtZW50LgogCi1XSEFUJ1MgTkVXIElOIDEuMC4wID8KK1dIQVQnUyBORVcgSU4gMS4wLnggPwogCiAgICBTZWUgdGhlIENIQU5HRVMgZmlsZS4KIAotV0hBVCdTIE5FVyBJTiAxLjAuMiA/Ci0KLSAgIFNlZSB0aGUgQ0hBTkdFUyBmaWxlLgotCi1XSEFUJ1MgTkVXIElOIDEuMC4zID8KLQotICAgU2VlIHRoZSBDSEFOR0VTIGZpbGUuCi0KLVdIQVQnUyBORVcgSU4gMS4wLjQgPwotCi0gICBTZWUgdGhlIENIQU5HRVMgZmlsZS4KLQotV0hBVCdTIE5FVyBJTiAxLjAuNSA/Ci0KLSAgIFNlZSB0aGUgQ0hBTkdFUyBmaWxlLgotCi0KLUkgaG9wZSB5b3UgZmluZCBiemlwMiB1c2VmdWwuICBGZWVsIGZyZWUgdG8gY29udGFjdCBtZSBhdAotICAganNld2FyZEBiemlwLm9yZworSSBob3BlIHlvdSBmaW5kIGJ6aXAyIHVzZWZ1bC4gIEZlZWwgZnJlZSB0byBjb250YWN0IHRoZSBkZXZlbG9wZXJzIGF0CisgICBiemlwMi1kZXZlbEBzb3VyY2V3YXJlLm9yZwogaWYgeW91IGhhdmUgYW55IHN1Z2dlc3Rpb25zIG9yIHF1ZXJpZXMuICBNYW55IHBlb3BsZSBtYWlsZWQgbWUgd2l0aAogY29tbWVudHMsIHN1Z2dlc3Rpb25zIGFuZCBwYXRjaGVzIGFmdGVyIHRoZSByZWxlYXNlcyBvZiBiemlwLTAuMTUsCiBiemlwLTAuMjEsIGFuZCBiemlwMiB2ZXJzaW9ucyAwLjFwbDIsIDAuOS4wLCAwLjkuNSwgMS4wLjAsIDEuMC4xLAogMS4wLjIgYW5kIDEuMC4zLCBhbmQgdGhlIGNoYW5nZXMgaW4gYnppcDIgYXJlIGxhcmdlbHkgYSByZXN1bHQgb2YgdGhpcwogZmVlZGJhY2suICBJIHRoYW5rIHlvdSBmb3IgeW91ciBjb21tZW50cy4KIAotYnppcDIncyAiaG9tZSIgaXMgaHR0cDovL3d3dy5iemlwLm9yZy8KK2J6aXAyJ3MgImhvbWUiIGlzIGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnppcDIvCiAKIEp1bGlhbiBTZXdhcmQKLWpzZXdhcmRAYnppcC5vcmcKK2pzZXdhcmRAYWNtLm9yZwogQ2FtYnJpZGdlLCBVSy4KIAogMTggICAgIEp1bHkgMTk5NiAodmVyc2lvbiAwLjE1KQpAQCAtMjA4LDMgKzE5MSw2IEBACiAxNSBGZWJydWFyeSAyMDA1IChiemlwMiwgdmVyc2lvbiAxLjAuMykKIDIwIERlY2VtYmVyIDIwMDYgKGJ6aXAyLCB2ZXJzaW9uIDEuMC40KQogMTAgRGVjZW1iZXIgMjAwNyAoYnppcDIsIHZlcnNpb24gMS4wLjUpCisgNiAgICAgU2VwdCAyMDEwIChiemlwMiwgdmVyc2lvbiAxLjAuNikKKzI3ICAgICBKdW5lIDIwMTkgKGJ6aXAyLCB2ZXJzaW9uIDEuMC43KQorMTMgICAgIEp1bHkgMjAxOSAoYnppcDIsIHZlcnNpb24gMS4wLjgpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMgYi9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjk1YzYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvUkVBRE1FLkNPTVBJTEFUSU9OLlBST0JMRU1TCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgotbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KLQotYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci1Db3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgotCi1QbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCi1SRUFETUUgZmlsZS4KLQotVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKLWluIHRoZSBmaWxlIExJQ0VOU0UuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYnppcDItMS4wLjUgc2hvdWxkIGNvbXBpbGUgd2l0aG91dCBwcm9ibGVtcyBvbiB0aGUgdmFzdCBtYWpvcml0eSBvZgotcGxhdGZvcm1zLiAgVXNpbmcgdGhlIHN1cHBsaWVkIE1ha2VmaWxlLCBJJ3ZlIGJ1aWx0IGFuZCB0ZXN0ZWQgaXQKLW15c2VsZiBmb3IgeDg2LWxpbnV4IGFuZCBhbWQ2NC1saW51eC4gIFdpdGggbWFrZWZpbGUubXNjLCBWaXN1YWwgQysrCi02LjAgYW5kIG5tYWtlLCB5b3UgY2FuIGJ1aWxkIGEgbmF0aXZlIFdpbjMyIHZlcnNpb24gdG9vLiAgTGFyZ2UgZmlsZQotc3VwcG9ydCBzZWVtcyB0byB3b3JrIGNvcnJlY3RseSBvbiBhdCBsZWFzdCBvbiBhbWQ2NC1saW51eC4KLQotV2hlbiBJIHNheSAibGFyZ2UgZmlsZSIgSSBtZWFuIGEgZmlsZSBvZiBzaXplIDIsMTQ3LDQ4Myw2NDggKDJeMzEpCi1ieXRlcyBvciBhYm92ZS4gIE1hbnkgb2xkZXIgT1NzIGNhbid0IGhhbmRsZSBmaWxlcyBhYm92ZSB0aGlzIHNpemUsCi1idXQgbWFueSBuZXdlciBvbmVzIGNhbi4gIExhcmdlIGZpbGVzIGFyZSBwcmV0dHkgaHVnZSAtLSBtb3N0IGZpbGVzCi15b3UnbGwgZW5jb3VudGVyIGFyZSBub3QgTGFyZ2UgRmlsZXMuCi0KLUVhcmx5IHZlcnNpb25zIG9mIGJ6aXAyICgwLjEsIDAuOS4wLCAwLjkuNSkgY29tcGlsZWQgb24gYSB3aWRlIHZhcmlldHkKLW9mIHBsYXRmb3JtcyB3aXRob3V0IGRpZmZpY3VsdHksIGFuZCBJIGhvcGUgdGhpcyB2ZXJzaW9uIHdpbGwgY29udGludWUKLWluIHRoYXQgdHJhZGl0aW9uLiAgSG93ZXZlciwgaW4gb3JkZXIgdG8gc3VwcG9ydCBsYXJnZSBmaWxlcywgSSd2ZSBoYWQKLXRvIGluY2x1ZGUgdGhlIGRlZmluZSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IGluIHRoZSBNYWtlZmlsZS4gIFRoaXMKLWNhbiBjYXVzZSBwcm9ibGVtcy4KLQotVGhlIHRlY2huaXF1ZSBvZiBhZGRpbmcgLURfRklMRV9PRkZTRVRfQklUUz02NCB0byBnZXQgbGFyZ2UgZmlsZQotc3VwcG9ydCBpcywgYXMgZmFyIGFzIEkga25vdywgdGhlIFJlY29tbWVuZGVkIFdheSB0byBnZXQgY29ycmVjdCBsYXJnZQotZmlsZSBzdXBwb3J0LiAgRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBMYXJnZSBGaWxlIFN1cHBvcnQKLVNwZWNpZmljYXRpb24sIHB1Ymxpc2hlZCBieSB0aGUgTGFyZ2UgRmlsZSBTdW1taXQsIGF0Ci0KLSAgIGh0dHA6Ly9mdHAuc2FzLmNvbS9zdGFuZGFyZHMvbGFyZ2UuZmlsZQotCi1BcyBhIGdlbmVyYWwgY29tbWVudCwgaWYgeW91IGdldCBjb21waWxhdGlvbiBlcnJvcnMgd2hpY2ggeW91IHRoaW5rCi1hcmUgcmVsYXRlZCB0byBsYXJnZSBmaWxlIHN1cHBvcnQsIHRyeSByZW1vdmluZyB0aGUgYWJvdmUgZGVmaW5lIGZyb20KLXRoZSBNYWtlZmlsZSwgaWUsIGRlbGV0ZSB0aGUgbGluZQotCi0gICBCSUdGSUxFUz0tRF9GSUxFX09GRlNFVF9CSVRTPTY0IAotCi1mcm9tIHRoZSBNYWtlZmlsZSwgYW5kIGRvICdtYWtlIGNsZWFuIDsgbWFrZScuICBUaGlzIHdpbGwgZ2l2ZSB5b3UgYQotdmVyc2lvbiBvZiBiemlwMiB3aXRob3V0IGxhcmdlIGZpbGUgc3VwcG9ydCwgd2hpY2gsIGZvciBtb3N0Ci1hcHBsaWNhdGlvbnMsIGlzIHByb2JhYmx5IG5vdCBhIHByb2JsZW0uICAKLQotQWx0ZXJuYXRpdmVseSwgdHJ5IHNvbWUgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGhpbnRzIGxpc3RlZCBiZWxvdy4KLQotWW91IGNhbiB1c2UgdGhlIHNwZXdHLmMgcHJvZ3JhbSB0byBnZW5lcmF0ZSBodWdlIGZpbGVzIHRvIHRlc3QgYnppcDIncwotbGFyZ2UgZmlsZSBzdXBwb3J0LCBpZiB5b3UgYXJlIGZlZWxpbmcgcGFyYW5vaWQuICBCZSBhd2FyZSB0aG91Z2ggdGhhdAotYW55IGNvbXBpbGF0aW9uIHByb2JsZW1zIHdoaWNoIGFmZmVjdCBiemlwMiB3aWxsIGFsc28gYWZmZWN0IHNwZXdHLmMsCi1hbGFzLgotCi1BSVg6IEkgaGF2ZSByZXBvcnRzIHRoYXQgZm9yIGxhcmdlIGZpbGUgc3VwcG9ydCwgeW91IG5lZWQgdG8gc3BlY2lmeQotLURfTEFSR0VfRklMRVMgcmF0aGVyIHRoYW4gLURfRklMRV9PRkZTRVRfQklUUz02NC4gIEkgaGF2ZSBub3QgdGVzdGVkCi10aGlzIG15c2VsZi4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRS5YTUwuU1RVRkYgYi9VdGlsaXRpZXMvY21iemlwMi9SRUFETUUuWE1MLlNUVUZGCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTViNGM1Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL1JFQURNRS5YTUwuU1RVRkYKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKLSAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KLQotICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KLQotICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCi0gIFJFQURNRSBmaWxlLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgY29udGFpbmVkCi0gIGluIHRoZSBmaWxlIExJQ0VOU0UuCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIHNjcmlwdCB4bWxwcm9jLnNoIHRha2VzIGFuIHhtbCBmaWxlIGFzIGlucHV0LAotYW5kIHByb2Nlc3NlcyBpdCB0byBjcmVhdGUgLnBkZiwgLmh0bWwgb3IgLnBzIG91dHB1dC4KLUl0IHVzZXMgZm9ybWF0LnBsLCBhIHBlcmwgc2NyaXB0IHRvIGZvcm1hdCA8cHJlPiBibG9ja3MgbmljZWx5LAotIGFuZCBhZGQgQ0RBVEEgdGFncyBzbyB3cml0ZXJzIGRvIG5vdCBoYXZlIHRvIHVzZSBlZy4gJmx0OyAKLQotVGhlIGZpbGUgImVudGl0aWVzLnhtbCIgbXVzdCBiZSBlZGl0ZWQgdG8gcmVmbGVjdCBjdXJyZW50Ci12ZXJzaW9uLCB5ZWFyLCBldGMuCi0KLQotVXNhZ2U6Ci0KLSAgLi94bWxwcm9jLnNoIC12IG1hbnVhbC54bWwKLSAgVmFsaWRhdGVzIGFuIHhtbCBmaWxlIHRvIGVuc3VyZSBubyBkdGQtY29tcGxpYW5jZSBlcnJvcnMKLQotICAuL3htbHByb2Muc2ggLWh0bWwgbWFudWFsLnhtbAotICBPdXRwdXQ6IG1hbnVhbC5odG1sCi0KLSAgLi94bWxwcm9jLnNoIC1wZGYgbWFudWFsLnhtbAotICBPdXRwdXQ6IG1hbnVhbC5wZGYKLQotICAuL3htbHByb2Muc2ggLXBzIG1hbnVhbC54bWwKLSAgT3V0cHV0OiBtYW51YWwucHMKLQotCi1Ob3R1bSBiZW5lOiAKLS0gcGRmeG1sdGV4IGJhcmZzIGlmIGdpdmVuIGEgZmlsZW5hbWUgd2l0aCBhbiB1bmRlcnNjb3JlIGluIGl0Ci0KLS0geG1sdGV4IHdvbid0IHdvcmsgeWV0IC0gdGhlcmUncyBhIGJ1ZyBpbiBwYXNzaXZldGV4Ci0gICAgd2hpY2ggd2UgYXJlIGFsbCB3YWl0aW5nIGZvciBTZWJhc3RpYW4gdG8gZml4LgotICBTbyB3ZSBhcmUgZ29pbmcgdGhlIHhtbCAtPiBwZGYgLT4gcHMgcm91dGUgZm9yIHRoZSB0aW1lIGJlaW5nLAotICAgIHVzaW5nIHBkZnhtbHRleC4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2Jsb2Nrc29ydC5jIGIvVXRpbGl0aWVzL2NtYnppcDIvYmxvY2tzb3J0LmMKaW5kZXggOTVhZGI1ZS4uOTJkODFmZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYmxvY2tzb3J0LmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYmxvY2tzb3J0LmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCkBAIC0yMDIsOSArMjAyLDkgQEAKICAgICAgIGJodGFiIFsgMCAuLiAyKyhuYmxvY2svMzIpIF0gZGVzdHJveWVkCiAqLwogCi0jZGVmaW5lICAgICAgIFNFVF9CSCh6eikgIGJodGFiWyh6eikgPj4gNV0gfD0gKDEgPDwgKCh6eikgJiAzMSkpCi0jZGVmaW5lICAgICBDTEVBUl9CSCh6eikgIGJodGFiWyh6eikgPj4gNV0gJj0gfigxIDw8ICgoenopICYgMzEpKQotI2RlZmluZSAgICAgSVNTRVRfQkgoenopICAoYmh0YWJbKHp6KSA+PiA1XSAmICgxIDw8ICgoenopICYgMzEpKSkKKyNkZWZpbmUgICAgICAgU0VUX0JIKHp6KSAgYmh0YWJbKHp6KSA+PiA1XSB8PSAoKFVJbnQzMikxIDw8ICgoenopICYgMzEpKQorI2RlZmluZSAgICAgQ0xFQVJfQkgoenopICBiaHRhYlsoenopID4+IDVdICY9IH4oKFVJbnQzMikxIDw8ICgoenopICYgMzEpKQorI2RlZmluZSAgICAgSVNTRVRfQkgoenopICAoYmh0YWJbKHp6KSA+PiA1XSAmICgoVUludDMyKTEgPDwgKCh6eikgJiAzMSkpKQogI2RlZmluZSAgICAgIFdPUkRfQkgoenopICBiaHRhYlsoenopID4+IDVdCiAjZGVmaW5lIFVOQUxJR05FRF9CSCh6eikgICgoenopICYgMHgwMWYpCiAKQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgICAgciA9IC0xOwogICAgICAgd2hpbGUgKDEpIHsKIAotICAgICAvKi0tIGZpbmQgdGhlIG5leHQgbm9uLXNpbmdsZXRvbiBidWNrZXQgLS0qLworCSAvKi0tIGZpbmQgdGhlIG5leHQgbm9uLXNpbmdsZXRvbiBidWNrZXQgLS0qLwogICAgICAgICAgayA9IHIgKyAxOwogICAgICAgICAgd2hpbGUgKElTU0VUX0JIKGspICYmIFVOQUxJR05FRF9CSChrKSkgaysrOwogICAgICAgICAgaWYgKElTU0VUX0JIKGspKSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iei1jb21tb24ueHNsIGIvVXRpbGl0aWVzL2NtYnppcDIvYnotY29tbW9uLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZmY2Q2Zi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iei1jb21tb24ueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+IDwhLS0gLSotIHNnbWwgLSotIC0tPgotPHhzbDpzdHlsZXNoZWV0IAotICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KLQotPCEtLSB3ZSBsaWtlICcxLjIgVGl0bGUnIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSInMSciLz4gCi08eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IicxJyIvPgotCi08IS0tIERvIG5vdCBwdXQgJ0NoYXB0ZXInIGF0IHRoZSBzdGFydCBvZiBlZyAnQ2hhcHRlciAxLiBEb2luZyBUaGlzJyAtLT4KLTx4c2w6cGFyYW0gbmFtZT0ibG9jYWwubDEwbi54bWwiIHNlbGVjdD0iZG9jdW1lbnQoJycpIi8+IAotPGw6aTE4biB4bWxuczpsPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQveG1sbnMvbDEwbi8xLjAiPiAKLSAgPGw6bDEwbiBsYW5ndWFnZT0iZW4iPiAKLSAgICA8bDpjb250ZXh0IG5hbWU9InRpdGxlLW51bWJlcmVkIj4KLSAgICAgIDxsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIiIHRleHQ9IiVuLiYjMTYwOyV0Ii8+Ci0gICAgPC9sOmNvbnRleHQ+IAotICA8L2w6bDEwbj4KLTwvbDppMThuPgotCi08IS0tIGRvbid0IGdlbmVyYXRlIHN1Yi10b2NzIGZvciBxYW5kYSBzZXRzIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiPgotc2V0ICAgICAgIHRvYyx0aXRsZQotYm9vayAgICAgIHRvYyx0aXRsZSxmaWd1cmUsdGFibGUsZXhhbXBsZSxlcXVhdGlvbgotY2hhcHRlciAgIHRvYyx0aXRsZQotc2VjdGlvbiAgIHRvYwotc2VjdDEgICAgIHRvYwotc2VjdDIgICAgIHRvYwotc2VjdDMgICAgIHRvYwotc2VjdDQgICAgIG5vcAotc2VjdDUgICAgIG5vcAotcWFuZGFzZXQgIHRvYwotcWFuZGFkaXYgIG5vcAotYXBwZW5kaXggIHRvYyx0aXRsZQotYXJ0aWNsZS9hcHBlbmRpeCAgbm9wCi1hcnRpY2xlICAgdG9jLHRpdGxlCi1wcmVmYWNlICAgdG9jLHRpdGxlCi1yZWZlcmVuY2UgdG9jLHRpdGxlCi08L3hzbDpwYXJhbT4KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6LWZvLnhzbCBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6LWZvLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEzZTMwMS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iei1mby54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4gPCEtLSAtKi0gc2dtbCAtKi0gLS0+Ci08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIAotICAgICB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgotCi08eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC9mby9kb2Nib29rLnhzbCIvPgotPHhzbDppbXBvcnQgaHJlZj0iYnotY29tbW9uLnhzbCIvPgotCi08IS0tIHNldCBpbmRlbnQgPSB5ZXMgd2hpbGUgZGVidWdnaW5nLCB0aGVuIGNoYW5nZSB0byBOTyAtLT4KLTx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBpbmRlbnQ9InllcyIvPgotCi08IS0tIGVuc3VyZSBvbmx5IHBhc3NpdmV0ZXggZXh0ZW5zaW9ucyBhcmUgb24gLS0+Ci08eHNsOnBhcmFtIG5hbWU9InN0eWxlc2hlZXQucmVzdWx0LnR5cGUiIHNlbGVjdD0iJ2ZvJyIvPgotPCEtLSBmbyBleHRlbnNpb25zOiBQREYgYm9va21hcmtzIGFuZCBpbmRleCB0ZXJtcyAtLT4KLTx4c2w6cGFyYW0gbmFtZT0idXNlLmV4dGVuc2lvbnMiIHNlbGVjdD0iJzEnIi8+Ci08eHNsOnBhcmFtIG5hbWU9InhlcC5leHRlbnNpb25zIiBzZWxlY3Q9IjAiLz4gICAgICAKLTx4c2w6cGFyYW0gbmFtZT0iZm9wLmV4dGVuc2lvbnMiIHNlbGVjdD0iMCIvPiAgICAgCi08eHNsOnBhcmFtIG5hbWU9InNheG9uLmV4dGVuc2lvbnMiIHNlbGVjdD0iMCIvPiAgIAotPHhzbDpwYXJhbSBuYW1lPSJwYXNzaXZldGV4LmV4dGVuc2lvbnMiIHNlbGVjdD0iMSIvPgotPHhzbDpwYXJhbSBuYW1lPSJ0YWJsZWNvbHVtbnMuZXh0ZW5zaW9uIiBzZWxlY3Q9IicxJyIvPgotCi08IS0tIGVuc3VyZSB3ZSBhcmUgdXNpbmcgc2luZ2xlIHNpZGVkIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJkb3VibGUuc2lkZWQiIHNlbGVjdD0iJzAnIi8+IAotCi08IS0tIGluc2VydCBjcm9zcyByZWZlcmVuY2VzIHRvIHBhZ2UgbnVtYmVycyAtLT4KLTx4c2w6cGFyYW0gbmFtZT0iaW5zZXJ0LnhyZWYucGFnZS5udW1iZXIiIHNlbGVjdD0iMSIvPgotCi08IS0tIDw/Y3VzdG9tLXBhZ2VicmVhaz8+IGluc2VydHMgYSBwYWdlIGJyZWFrIGF0IHRoaXMgcG9pbnQgLS0+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJwcm9jZXNzaW5nLWluc3RydWN0aW9uKCdjdXN0b20tcGFnZWJyZWFrJykiPgotICA8Zm86YmxvY2sgYnJlYWstYmVmb3JlPSdwYWdlJy8+Ci08L3hzbDp0ZW1wbGF0ZT4KLQotPCEtLSBzaG93IGxpbmtzIGluIGNvbG9yIC0tPgotPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9InhyZWYucHJvcGVydGllcyI+Ci0gIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj5ibHVlPC94c2w6YXR0cmlidXRlPgotPC94c2w6YXR0cmlidXRlLXNldD4KLQotPCEtLSBtYWtlIHByZSBsaXN0aW5ncyBpbmRlbnRlZCBhIGJpdCArIGEgYmcgY29sb3VyIC0tPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHJvZ3JhbWxpc3RpbmcgfCBzY3JlZW4iPgotICA8Zm86YmxvY2sgc3RhcnQtaW5kZW50PSIwLjI1aW4iIHdyYXAtb3B0aW9uPSJuby13cmFwIiAKLSAgICAgICAgICAgIHdoaXRlLXNwYWNlLWNvbGxhcHNlPSJmYWxzZSIgdGV4dC1hbGlnbj0ic3RhcnQiIAotICAgICAgICAgICAgZm9udC1mYW1pbHk9Im1vbm9zcGFjZSIgYmFja2dyb3VuZC1jb2xvcj0iI2YyZjJmOSIKLSAgICAgICAgICAgIGxpbmVmZWVkLXRyZWF0bWVudD0icHJlc2VydmUiIAotICAgICAgICAgICAgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ibm9ybWFsLnBhcmEuc3BhY2luZyI+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgotICA8L2ZvOmJsb2NrPgotPC94c2w6dGVtcGxhdGU+Ci08IS0tIG1ha2UgdmVyYmF0aW0gb3V0cHV0IHByZXR0aWVyIC0tPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGl0ZXJhbGxheW91dCI+Ci0gIDxmbzpibG9jayBzdGFydC1pbmRlbnQ9IjAuMjVpbiIgd3JhcC1vcHRpb249Im5vLXdyYXAiIAotICAgICAgICAgICAgd2hpdGUtc3BhY2UtY29sbGFwc2U9ImZhbHNlIiB0ZXh0LWFsaWduPSJzdGFydCIgCi0gICAgICAgICAgICBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBiYWNrZ3JvdW5kLWNvbG9yPSIjZWRmN2Y0IgotICAgICAgICAgICAgbGluZWZlZWQtdHJlYXRtZW50PSJwcmVzZXJ2ZSIgCi0gICAgICAgICAgICBzcGFjZS1iZWZvcmU9IjBlbSIgc3BhY2UtYWZ0ZXI9IjBlbSI+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgotICA8L2ZvOmJsb2NrPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwhLS0gd29ya2Fyb3VuZCBidWcgaW4gcGFzc2l2ZXRleCBmbyBvdXRwdXQgZm9yIGl0ZW1pemVkbGlzdCAtLT4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9Iml0ZW1pemVkbGlzdC9saXN0aXRlbSI+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iaWQiPgotICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ib2JqZWN0LmlkIi8+PC94c2w6dmFyaWFibGU+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iaXRlbXN5bWJvbCI+Ci0gICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Imxpc3QuaXRlbXN5bWJvbCI+Ci0gICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJwYXJlbnQ6Oml0ZW1pemVkbGlzdCIvPgotICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+Ci0gIDwveHNsOnZhcmlhYmxlPgotICA8eHNsOnZhcmlhYmxlIG5hbWU9Iml0ZW0uY29udGVudHMiPgotICAgIDxmbzpsaXN0LWl0ZW0tbGFiZWwgZW5kLWluZGVudD0ibGFiZWwtZW5kKCkiPgotICAgICAgPGZvOmJsb2NrPgotICAgICAgICA8eHNsOmNob29zZT4KLSAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGl0ZW1zeW1ib2w9J2Rpc2MnIj4mI3gyMDIyOzwveHNsOndoZW4+Ci0gICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRpdGVtc3ltYm9sPSdidWxsZXQnIj4mI3gyMDIyOzwveHNsOndoZW4+Ci0gICAgICAgICAgPHhzbDpvdGhlcndpc2U+JiN4MjAyMjs8L3hzbDpvdGhlcndpc2U+Ci0gICAgICAgIDwveHNsOmNob29zZT4KLSAgICAgIDwvZm86YmxvY2s+Ci0gICAgPC9mbzpsaXN0LWl0ZW0tbGFiZWw+Ci0gICAgPGZvOmxpc3QtaXRlbS1ib2R5IHN0YXJ0LWluZGVudD0iYm9keS1zdGFydCgpIj4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4gICAgPCEtLSByZW1vdmVkIGV4dHJhIGJsb2NrIHdyYXBwZXIgLS0+Ci0gICAgPC9mbzpsaXN0LWl0ZW0tYm9keT4KLSAgPC94c2w6dmFyaWFibGU+Ci0gIDx4c2w6Y2hvb3NlPgotICAgIDx4c2w6d2hlbiB0ZXN0PSJwYXJlbnQ6OiovQHNwYWNpbmcgPSAnY29tcGFjdCciPgotICAgICAgPGZvOmxpc3QtaXRlbSBpZD0ieyRpZH0iIAotICAgICAgICAgIHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNvbXBhY3QubGlzdC5pdGVtLnNwYWNpbmciPgotICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSIkaXRlbS5jb250ZW50cyIvPgotICAgICAgPC9mbzpsaXN0LWl0ZW0+Ci0gICAgPC94c2w6d2hlbj4KLSAgICA8eHNsOm90aGVyd2lzZT4KLSAgICAgIDxmbzpsaXN0LWl0ZW0gaWQ9InskaWR9IiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJsaXN0Lml0ZW0uc3BhY2luZyI+Ci0gICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRpdGVtLmNvbnRlbnRzIi8+Ci0gICAgICA8L2ZvOmxpc3QtaXRlbT4KLSAgICA8L3hzbDpvdGhlcndpc2U+Ci0gIDwveHNsOmNob29zZT4KLTwveHNsOnRlbXBsYXRlPgotCi08IS0tIHdvcmthcm91bmQgYnVnIGluIHBhc3NpdmV0ZXggZm8gb3V0cHV0IGZvciBvcmRlcmVkbGlzdCAtLT4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9Im9yZGVyZWRsaXN0L2xpc3RpdGVtIj4KLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpZCI+Ci0gIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJvYmplY3QuaWQiLz48L3hzbDp2YXJpYWJsZT4KLSAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpdGVtLmNvbnRlbnRzIj4KLSAgICA8Zm86bGlzdC1pdGVtLWxhYmVsIGVuZC1pbmRlbnQ9ImxhYmVsLWVuZCgpIj4KLSAgICAgIDxmbzpibG9jaz4KLSAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJpdGVtLW51bWJlciIvPgotICAgICAgPC9mbzpibG9jaz4KLSAgICA8L2ZvOmxpc3QtaXRlbS1sYWJlbD4KLSAgICA8Zm86bGlzdC1pdGVtLWJvZHkgc3RhcnQtaW5kZW50PSJib2R5LXN0YXJ0KCkiPgotICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPiAgICA8IS0tIHJlbW92ZWQgZXh0cmEgYmxvY2sgd3JhcHBlciAtLT4KLSAgICA8L2ZvOmxpc3QtaXRlbS1ib2R5PgotICA8L3hzbDp2YXJpYWJsZT4KLSAgPHhzbDpjaG9vc2U+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9InBhcmVudDo6Ki9Ac3BhY2luZyA9ICdjb21wYWN0JyI+Ci0gICAgICA8Zm86bGlzdC1pdGVtIGlkPSJ7JGlkfSIgCi0gICAgICAgICAgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY29tcGFjdC5saXN0Lml0ZW0uc3BhY2luZyI+Ci0gICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRpdGVtLmNvbnRlbnRzIi8+Ci0gICAgICA8L2ZvOmxpc3QtaXRlbT4KLSAgICA8L3hzbDp3aGVuPgotICAgIDx4c2w6b3RoZXJ3aXNlPgotICAgICAgPGZvOmxpc3QtaXRlbSBpZD0ieyRpZH0iIHhzbDp1c2UtYXR0cmlidXRlLXNldHM9Imxpc3QuaXRlbS5zcGFjaW5nIj4KLSAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJGl0ZW0uY29udGVudHMiLz4KLSAgICAgIDwvZm86bGlzdC1pdGVtPgotICAgIDwveHNsOm90aGVyd2lzZT4KLSAgPC94c2w6Y2hvb3NlPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwhLS0gd29ya2Fyb3VuZCBidWcgaW4gcGFzc2l2ZXRleCBmbyBvdXRwdXQgZm9yIHZhcmlhYmxlbGlzdCAtLT4KLTx4c2w6cGFyYW0gbmFtZT0idmFyaWFibGVsaXN0LmFzLmJsb2NrcyIgc2VsZWN0PSIxIi8+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJ2YXJsaXN0ZW50cnkiIG1vZGU9InZsLmFzLmJsb2NrcyI+Ci0gIDx4c2w6dmFyaWFibGUgbmFtZT0iaWQiPgotICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJvYmplY3QuaWQiLz48L3hzbDp2YXJpYWJsZT4KLSAgPGZvOmJsb2NrIGlkPSJ7JGlkfSIgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ibGlzdC5pdGVtLnNwYWNpbmciICAKLSAgICAgIGtlZXAtdG9nZXRoZXIud2l0aGluLWNvbHVtbj0iYWx3YXlzIiAKLSAgICAgIGtlZXAtd2l0aC1uZXh0LndpdGhpbi1jb2x1bW49ImFsd2F5cyI+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0ZXJtIi8+Ci0gIDwvZm86YmxvY2s+Ci0gIDxmbzpibG9jayBzdGFydC1pbmRlbnQ9IjAuNWluIiBlbmQtaW5kZW50PSIwaW4iIAotICAgICAgICAgICAgc3BhY2UtYWZ0ZXIubWluaW11bT0iMC4yZW0iIAotICAgICAgICAgICAgc3BhY2UtYWZ0ZXIub3B0aW11bT0iMC40ZW0iIAotICAgICAgICAgICAgc3BhY2UtYWZ0ZXIubWF4aW11bT0iMC42ZW0iPgotICAgIDxmbzpibG9jaz4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibGlzdGl0ZW0iLz4KLSAgICA8L2ZvOmJsb2NrPgotICA8L2ZvOmJsb2NrPgotPC94c2w6dGVtcGxhdGU+Ci0KLQotPCEtLSB3b3JrYXJvdW5kIGJ1ZyBpbiBmb290ZXJzOiBmb3JjZSByaWdodC1hbGlnbiB3L3R3byA4MHwzMCBjb2xzIC0tPgotPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb290ZXIudGFibGUiPgotICA8eHNsOnBhcmFtIG5hbWU9InBhZ2VjbGFzcyIgc2VsZWN0PSInJyIvPgotICA8eHNsOnBhcmFtIG5hbWU9InNlcXVlbmNlIiBzZWxlY3Q9IicnIi8+Ci0gIDx4c2w6cGFyYW0gbmFtZT0iZ2VudGV4dC1rZXkiIHNlbGVjdD0iJyciLz4KLSAgPHhzbDpjaG9vc2U+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9IiRwYWdlY2xhc3MgPSAnaW5kZXgnIj4KLSAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9Im1hcmdpbi1sZWZ0Ij4wcHQ8L3hzbDphdHRyaWJ1dGU+Ci0gICAgPC94c2w6d2hlbj4KLSAgPC94c2w6Y2hvb3NlPgotICA8eHNsOnZhcmlhYmxlIG5hbWU9ImNhbmRpZGF0ZSI+Ci0gICAgPGZvOnRhYmxlIHRhYmxlLWxheW91dD0iZml4ZWQiIHdpZHRoPSIxMDAlIj4KLSAgICAgIDxmbzp0YWJsZS1jb2x1bW4gY29sdW1uLW51bWJlcj0iMSIgY29sdW1uLXdpZHRoPSI4MCUiLz4KLSAgICAgIDxmbzp0YWJsZS1jb2x1bW4gY29sdW1uLW51bWJlcj0iMiIgY29sdW1uLXdpZHRoPSIyMCUiLz4KLSAgICAgIDxmbzp0YWJsZS1ib2R5PgotICAgICAgICA8Zm86dGFibGUtcm93IGhlaWdodD0iMTRwdCI+Ci0gICAgICAgICAgPGZvOnRhYmxlLWNlbGwgdGV4dC1hbGlnbj0ibGVmdCIgZGlzcGxheS1hbGlnbj0iYWZ0ZXIiPgotICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0icmVsYXRpdmUtYWxpZ24iPmJhc2VsaW5lPC94c2w6YXR0cmlidXRlPgotICAgICAgICAgICAgPGZvOmJsb2NrPiAKLSAgICAgICAgICAgICAgPGZvOmJsb2NrPiA8L2ZvOmJsb2NrPjwhLS0gZW1wdHkgY2VsbCAtLT4KLSAgICAgICAgICAgIDwvZm86YmxvY2s+Ci0gICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPgotICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIHRleHQtYWxpZ249ImNlbnRlciIgZGlzcGxheS1hbGlnbj0iYWZ0ZXIiPgotICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0icmVsYXRpdmUtYWxpZ24iPmJhc2VsaW5lPC94c2w6YXR0cmlidXRlPgotICAgICAgICAgICAgPGZvOmJsb2NrPgotICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZm9vdGVyLmNvbnRlbnQiPgotICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYWdlY2xhc3MiIHNlbGVjdD0iJHBhZ2VjbGFzcyIvPgotICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZXF1ZW5jZSIgc2VsZWN0PSIkc2VxdWVuY2UiLz4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icG9zaXRpb24iIHNlbGVjdD0iJ2NlbnRlciciLz4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iZ2VudGV4dC1rZXkiIHNlbGVjdD0iJGdlbnRleHQta2V5Ii8+Ci0gICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+Ci0gICAgICAgICAgICA8L2ZvOmJsb2NrPgotICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4KLSAgICAgICAgPC9mbzp0YWJsZS1yb3c+Ci0gICAgICA8L2ZvOnRhYmxlLWJvZHk+Ci0gICAgPC9mbzp0YWJsZT4KLSAgPC94c2w6dmFyaWFibGU+Ci0gIDwhLS0gUmVhbGx5IG91dHB1dCBhIGZvb3Rlcj8gLS0+Ci0gIDx4c2w6Y2hvb3NlPgotICAgIDx4c2w6d2hlbiB0ZXN0PSIkcGFnZWNsYXNzPSd0aXRsZXBhZ2UnIGFuZCAkZ2VudGV4dC1rZXk9J2Jvb2snCi0gICAgICAgICAgICAgICAgICAgIGFuZCAkc2VxdWVuY2U9J2ZpcnN0JyI+Ci0gICAgICA8IS0tIG5vLCBib29rIHRpdGxlcGFnZXMgaGF2ZSBubyBmb290ZXJzIGF0IGFsbCAtLT4KLSAgICA8L3hzbDp3aGVuPgotICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VxdWVuY2UgPSAnYmxhbmsnIGFuZCAkZm9vdGVycy5vbi5ibGFuay5wYWdlcyA9IDAiPgotICAgICAgPCEtLSBubyBvdXRwdXQgLS0+Ci0gICAgPC94c2w6d2hlbj4KLSAgICA8eHNsOm90aGVyd2lzZT4KLSAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRjYW5kaWRhdGUiLz4KLSAgICA8L3hzbDpvdGhlcndpc2U+Ci0gIDwveHNsOmNob29zZT4KLTwveHNsOnRlbXBsYXRlPgotCi0KLTwhLS0gZml4IGJ1ZyBpbiBoZWFkZXJzOiBmb3JjZSByaWdodC1hbGlnbiB3L3R3byA0MHw2MCBjb2xzIC0tPgotPHhzbDp0ZW1wbGF0ZSBuYW1lPSJoZWFkZXIudGFibGUiPgotICA8eHNsOnBhcmFtIG5hbWU9InBhZ2VjbGFzcyIgc2VsZWN0PSInJyIvPgotICA8eHNsOnBhcmFtIG5hbWU9InNlcXVlbmNlIiBzZWxlY3Q9IicnIi8+Ci0gIDx4c2w6cGFyYW0gbmFtZT0iZ2VudGV4dC1rZXkiIHNlbGVjdD0iJyciLz4KLSAgPHhzbDpjaG9vc2U+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9IiRwYWdlY2xhc3MgPSAnaW5kZXgnIj4KLSAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9Im1hcmdpbi1sZWZ0Ij4wcHQ8L3hzbDphdHRyaWJ1dGU+Ci0gICAgPC94c2w6d2hlbj4KLSAgPC94c2w6Y2hvb3NlPgotICA8eHNsOnZhcmlhYmxlIG5hbWU9ImNhbmRpZGF0ZSI+Ci0gICAgPGZvOnRhYmxlIHRhYmxlLWxheW91dD0iZml4ZWQiIHdpZHRoPSIxMDAlIj4KLSAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJoZWFkLnNlcC5ydWxlIj4KLSAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhZ2VjbGFzcyIgc2VsZWN0PSIkcGFnZWNsYXNzIi8+Ci0gICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZXF1ZW5jZSIgc2VsZWN0PSIkc2VxdWVuY2UiLz4KLSAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImdlbnRleHQta2V5IiBzZWxlY3Q9IiRnZW50ZXh0LWtleSIvPgotICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KLSAgICAgIDxmbzp0YWJsZS1jb2x1bW4gY29sdW1uLW51bWJlcj0iMSIgY29sdW1uLXdpZHRoPSI0MCUiLz4KLSAgICAgIDxmbzp0YWJsZS1jb2x1bW4gY29sdW1uLW51bWJlcj0iMiIgY29sdW1uLXdpZHRoPSI2MCUiLz4KLSAgICAgIDxmbzp0YWJsZS1ib2R5PgotICAgICAgICA8Zm86dGFibGUtcm93IGhlaWdodD0iMTRwdCI+Ci0gICAgICAgICAgPGZvOnRhYmxlLWNlbGwgdGV4dC1hbGlnbj0ibGVmdCIgZGlzcGxheS1hbGlnbj0iYmVmb3JlIj4KLSAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InJlbGF0aXZlLWFsaWduIj5iYXNlbGluZTwveHNsOmF0dHJpYnV0ZT4KLSAgICAgICAgICAgIDxmbzpibG9jaz4KLSAgICAgICAgICAgICAgPGZvOmJsb2NrPiA8L2ZvOmJsb2NrPjwhLS0gZW1wdHkgY2VsbCAtLT4KLSAgICAgICAgICAgIDwvZm86YmxvY2s+Ci0gICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPgotICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIHRleHQtYWxpZ249ImNlbnRlciIgZGlzcGxheS1hbGlnbj0iYmVmb3JlIj4KLSAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InJlbGF0aXZlLWFsaWduIj5iYXNlbGluZTwveHNsOmF0dHJpYnV0ZT4KLSAgICAgICAgICAgIDxmbzpibG9jaz4KLSAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImhlYWRlci5jb250ZW50Ij4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icGFnZWNsYXNzIiBzZWxlY3Q9IiRwYWdlY2xhc3MiLz4KLSAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic2VxdWVuY2UiIHNlbGVjdD0iJHNlcXVlbmNlIi8+Ci0gICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBvc2l0aW9uIiBzZWxlY3Q9IidjZW50ZXInIi8+Ci0gICAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImdlbnRleHQta2V5IiBzZWxlY3Q9IiRnZW50ZXh0LWtleSIvPgotICAgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgotICAgICAgICAgICAgPC9mbzpibG9jaz4KLSAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+Ci0gICAgICAgIDwvZm86dGFibGUtcm93PgotICAgICAgPC9mbzp0YWJsZS1ib2R5PgotICAgIDwvZm86dGFibGU+Ci0gIDwveHNsOnZhcmlhYmxlPgotICA8IS0tIFJlYWxseSBvdXRwdXQgYSBoZWFkZXI/IC0tPgotICA8eHNsOmNob29zZT4KLSAgICA8eHNsOndoZW4gdGVzdD0iJHBhZ2VjbGFzcyA9ICd0aXRsZXBhZ2UnIGFuZCAkZ2VudGV4dC1rZXkgPSAnYm9vaycKLSAgICAgICAgICAgICAgICAgICAgYW5kICRzZXF1ZW5jZT0nZmlyc3QnIj4KLSAgICAgIDwhLS0gbm8sIGJvb2sgdGl0bGVwYWdlcyBoYXZlIG5vIGhlYWRlcnMgYXQgYWxsIC0tPgotICAgIDwveHNsOndoZW4+Ci0gICAgPHhzbDp3aGVuIHRlc3Q9IiRzZXF1ZW5jZSA9ICdibGFuaycgYW5kICRoZWFkZXJzLm9uLmJsYW5rLnBhZ2VzID0gMCI+Ci0gICAgICA8IS0tIG5vIG91dHB1dCAtLT4KLSAgICA8L3hzbDp3aGVuPgotICAgIDx4c2w6b3RoZXJ3aXNlPgotICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJGNhbmRpZGF0ZSIvPgotICAgIDwveHNsOm90aGVyd2lzZT4KLSAgPC94c2w6Y2hvb3NlPgotPC94c2w6dGVtcGxhdGU+Ci0KLQotPCEtLSBCdWctZml4IGZvciBTdXNlIDEwIFBhc3NpdmVUZXggdmVyc2lvbiAtLT4KLTwhLS0gUHJlY29tcHV0ZSBhdHRyaWJ1dGUgdmFsdWVzICdjb3MgUGFzc2l2ZVRleCBpcyB0b28gc3R1cGlkOiAtLT4KLTx4c2w6YXR0cmlidXRlLXNldCBuYW1lPSJjb21wb25lbnQudGl0bGUucHJvcGVydGllcyI+Ci0gIDx4c2w6YXR0cmlidXRlIG5hbWU9ImtlZXAtd2l0aC1uZXh0LndpdGhpbi1jb2x1bW4iPmFsd2F5czwveHNsOmF0dHJpYnV0ZT4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3BhY2UtYmVmb3JlLm9wdGltdW0iPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJGJvZHkuZm9udC5tYXN0ZXIsICdwdCcpIi8+Ci0gIDwveHNsOmF0dHJpYnV0ZT4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3BhY2UtYmVmb3JlLm1pbmltdW0iPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkYm9keS5mb250Lm1hc3RlciAqIDAuOCIvPgotICAgIDx4c2w6dGV4dD5wdDwveHNsOnRleHQ+Ci0gIDwveHNsOmF0dHJpYnV0ZT4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3BhY2UtYmVmb3JlLm1heGltdW0iPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkYm9keS5mb250Lm1hc3RlciAqIDEuMiIvPgotICAgIDx4c2w6dGV4dD5wdDwveHNsOnRleHQ+Ci0gIDwveHNsOmF0dHJpYnV0ZT4KLSAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHlwaGVuYXRlIj5mYWxzZTwveHNsOmF0dHJpYnV0ZT4KLTwveHNsOmF0dHJpYnV0ZS1zZXQ+Ci0KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6LWh0bWwueHNsIGIvVXRpbGl0aWVzL2NtYnppcDIvYnotaHRtbC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODVmZmYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnotaHRtbC54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4gPCEtLSAtKi0gc2dtbCAtKi0gLS0+Ci08IURPQ1RZUEUgeHNsOnN0eWxlc2hlZXQgWyA8IUVOVElUWSBiei1jc3MgU1lTVEVNICIuL2J6aXAuY3NzIj4gXT4KLQotPHhzbDpzdHlsZXNoZWV0IAotICAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+Ci0KLTx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L2h0bWwvZG9jYm9vay54c2wiLz4KLTx4c2w6aW1wb3J0IGhyZWY9ImJ6LWNvbW1vbi54c2wiLz4KLQotPCEtLSB1c2UgODg1OS0xIGVuY29kaW5nIC0tPgotPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgaW5kZW50PSJ5ZXMiLz4KLQotPCEtLSB3ZSBpbmNsdWRlIHRoZSBjc3MgZGlyZWN0bHkgd2hlbiBnZW5lcmF0aW5nIG9uZSBsYXJnZSBmaWxlIC0tPgotPHhzbDp0ZW1wbGF0ZSBuYW1lPSJ1c2VyLmhlYWQuY29udGVudCI+ICAKLSAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KLSAgICA8eHNsOnRleHQ+JmJ6LWNzczs8L3hzbDp0ZXh0PgotICA8L3N0eWxlPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemRpZmYgYi9VdGlsaXRpZXMvY21iemlwMi9iemRpZmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Yzk5NjQuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnpkaWZmCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotIyEvYmluL3NoCi0jIHNoIGlzIGJ1Z2d5IG9uIFJTLzYwMDAgQUlYIDMuMi4gUmVwbGFjZSBhYm92ZSBsaW5lIHdpdGggIyEvYmluL2tzaAotCi0jIEJ6Y21wL2RpZmYgd3JhcHBlZCBmb3IgYnppcDIsIAotIyBhZGFwdGVkIGZyb20gemRpZmYgYnkgUGhpbGlwcGUgVHJvaW4gPHBoaWxAZmlmaS5vcmc+IGZvciBEZWJpYW4gR05VL0xpbnV4LgotCi0jIEJ6Y21wIGFuZCBiemRpZmYgYXJlIHVzZWQgdG8gaW52b2tlIHRoZSBjbXAgb3IgdGhlICBkaWZmICBwcm8tCi0jIGdyYW0gIG9uIGNvbXByZXNzZWQgZmlsZXMuICBBbGwgb3B0aW9ucyBzcGVjaWZpZWQgYXJlIHBhc3NlZAotIyBkaXJlY3RseSB0byBjbXAgb3IgZGlmZi4gIElmIG9ubHkgMSBmaWxlIGlzIHNwZWNpZmllZCwgIHRoZW4KLSMgdGhlICBmaWxlcyAgY29tcGFyZWQgIGFyZSBmaWxlMSBhbmQgYW4gdW5jb21wcmVzc2VkIGZpbGUxLmd6LgotIyBJZiB0d28gZmlsZXMgYXJlIHNwZWNpZmllZCwgdGhlbiB0aGV5IGFyZSAgdW5jb21wcmVzc2VkICAoaWYKLSMgbmVjZXNzYXJ5KSBhbmQgZmVkIHRvIGNtcCBvciBkaWZmLiAgVGhlIGV4aXQgc3RhdHVzIGZyb20gY21wCi0jIG9yIGRpZmYgaXMgcHJlc2VydmVkLgotCi1QQVRIPSIvdXNyL2JpbjovYmluOiRQQVRIIjsgZXhwb3J0IFBBVEgKLXByb2c9YGVjaG8gJDAgfCBzZWQgJ3N8LiovfHwnYAotY2FzZSAiJHByb2ciIGluCi0gICpjbXApIGNvbXA9JHtDTVAtY21wfSAgIDs7Ci0gICopICAgIGNvbXA9JHtESUZGLWRpZmZ9IDs7Ci1lc2FjCi0KLU9QVElPTlM9Ci1GSUxFUz0KLWZvciBBUkcKLWRvCi0gICAgY2FzZSAiJEFSRyIgaW4KLSAgICAtKikgT1BUSU9OUz0iJE9QVElPTlMgJEFSRyI7OwotICAgICAqKSBpZiB0ZXN0IC1mICIkQVJHIjsgdGhlbgotICAgICAgICAgICAgRklMRVM9IiRGSUxFUyAkQVJHIgotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlY2hvICIke3Byb2d9OiAkQVJHIG5vdCBmb3VuZCBvciBub3QgYSByZWd1bGFyIGZpbGUiCi0gICAgICAgIGV4aXQgMQotICAgICAgICBmaSA7OwotICAgIGVzYWMKLWRvbmUKLWlmIHRlc3QgLXogIiRGSUxFUyI7IHRoZW4KLSAgICBlY2hvICJVc2FnZTogJHByb2cgWyR7Y29tcH1fb3B0aW9uc10gZmlsZSBbZmlsZV0iCi0gICAgZXhpdCAxCi1maQotdG1wPWBta3RlbXAgJHtUTVBESVI6LS90bXB9L2J6ZGlmZi5YWFhYWFhYWFhYYCB8fCB7Ci0gICAgICBlY2hvICdjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUnID4mMgotICAgICAgZXhpdCAxCi19Ci1zZXQgJEZJTEVTCi1pZiB0ZXN0ICQjIC1lcSAxOyB0aGVuCi0gICAgRklMRT1gZWNobyAiJDEiIHwgc2VkICdzLy5iejIkLy8nYAotICAgIGJ6aXAyIC1jZCAiJEZJTEUuYnoyIiB8ICRjb21wICRPUFRJT05TIC0gIiRGSUxFIgotICAgIFNUQVQ9IiQ/IgotCi1lbGlmIHRlc3QgJCMgLWVxIDI7IHRoZW4KLSAgICBjYXNlICIkMSIgaW4KLSAgICAgICAgKi5iejIpCi0gICAgICAgICAgICAgICAgY2FzZSAiJDIiIGluCi0gICAgICAgICAgICAqLmJ6MikKLSAgICAgICAgICAgIEY9YGVjaG8gIiQyIiB8IHNlZCAnc3wuKi98fDtzfC5iejIkfHwnYAotICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIgLWNkZnEgIiQyIiA+ICR0bXAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ6aXAyIC1jZGZxICIkMSIgfCAkY29tcCAkT1BUSU9OUyAtICR0bXAKLSAgICAgICAgICAgICAgICAgICAgICAgIFNUQVQ9IiQ/IgotICAgICAgICAgICAgL2Jpbi9ybSAtZiAkdG1wOzsKLQotICAgICAgICAgICAgICAgICopICAgICAgYnppcDIgLWNkZnEgIiQxIiB8ICRjb21wICRPUFRJT05TIC0gIiQyIgotICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iOzsKLSAgICAgICAgICAgICAgICBlc2FjOzsKLSAgICAgICAgKikgICAgICBjYXNlICIkMiIgaW4KLSAgICAgICAgICAgICouYnoyKQotICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIgLWNkZnEgIiQyIiB8ICRjb21wICRPUFRJT05TICIkMSIgLQotICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iOzsKLSAgICAgICAgICAgICAgICAqKSAgICAgICRjb21wICRPUFRJT05TICIkMSIgIiQyIgotICAgICAgICAgICAgICAgICAgICAgICAgU1RBVD0iJD8iOzsKLSAgICAgICAgICAgICAgICBlc2FjOzsKLSAgICBlc2FjCi0gICAgICAgIGV4aXQgIiRTVEFUIgotZWxzZQotICAgIGVjaG8gIlVzYWdlOiAkcHJvZyBbJHtjb21wfV9vcHRpb25zXSBmaWxlIFtmaWxlXSIKLSAgICBleGl0IDEKLWZpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemRpZmYuMSBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6ZGlmZi4xCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGI3YThlLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6ZGlmZi4xCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotXCJTaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB6bW9yZS4xIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPgotXCJmb3IgRGViaWFuIEdOVS9MaW51eAotLlRIIEJaRElGRiAxCi0uU0ggTkFNRQotYnpjbXAsIGJ6ZGlmZiBcLSBjb21wYXJlIGJ6aXAyIGNvbXByZXNzZWQgZmlsZXMKLS5TSCBTWU5PUFNJUwotLkIgYnpjbXAKLVsgY21wX29wdGlvbnMgXSBmaWxlMQotWyBmaWxlMiBdCi0uYnIKLS5CIGJ6ZGlmZgotWyBkaWZmX29wdGlvbnMgXSBmaWxlMQotWyBmaWxlMiBdCi0uU0ggREVTQ1JJUFRJT04KLS5JICBCemNtcAotYW5kIAotLkkgYnpkaWZmCi1hcmUgdXNlZCB0byBpbnZva2UgdGhlCi0uSSBjbXAKLW9yIHRoZQotLkkgZGlmZgotcHJvZ3JhbSBvbiBiemlwMiBjb21wcmVzc2VkIGZpbGVzLiAgQWxsIG9wdGlvbnMgc3BlY2lmaWVkIGFyZSBwYXNzZWQKLWRpcmVjdGx5IHRvCi0uSSBjbXAKLW9yCi0uSVIgZGlmZiAiLiIKLUlmIG9ubHkgMSBmaWxlIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgZmlsZXMgY29tcGFyZWQgYXJlCi0uSSBmaWxlMQotYW5kIGFuIHVuY29tcHJlc3NlZAotLklSIGZpbGUxICIuYnoyLiIKLUlmIHR3byBmaWxlcyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZXkgYXJlIHVuY29tcHJlc3NlZCBpZiBuZWNlc3NhcnkgYW5kIGZlZCB0bwotLkkgY21wCi1vcgotLklSIGRpZmYgIi4iCi1UaGUgZXhpdCBzdGF0dXMgZnJvbSAKLS5JIGNtcAotb3IKLS5JIGRpZmYKLWlzIHByZXNlcnZlZC4KLS5TSCAiU0VFIEFMU08iCi1jbXAoMSksIGRpZmYoMSksIGJ6bW9yZSgxKSwgYnpsZXNzKDEpLCBiemdyZXAoMSksIGJ6aXAyKDEpCi0uU0ggQlVHUwotTWVzc2FnZXMgZnJvbSB0aGUKLS5JIGNtcAotb3IKLS5JIGRpZmYKLXByb2dyYW1zIHJlZmVyIHRvIHRlbXBvcmFyeSBmaWxlbmFtZXMgaW5zdGVhZCBvZiB0aG9zZSBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemdyZXAgYi9VdGlsaXRpZXMvY21iemlwMi9iemdyZXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjY2Y5MTkuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnpncmVwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotIyEvYmluL3NoCi0KLSMgQnpncmVwIHdyYXBwZWQgZm9yIGJ6aXAyLCAKLSMgYWRhcHRlZCBmcm9tIHpncmVwIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPiBmb3IgRGViaWFuIEdOVS9MaW51eC4KLSMjIHpncmVwIG5vdGljZToKLSMjIHpncmVwIC0tIGEgd3JhcHBlciBhcm91bmQgYSBncmVwIHByb2dyYW0gdGhhdCBkZWNvbXByZXNzZXMgZmlsZXMgYXMgbmVlZGVkCi0jIyBBZGFwdGVkIGZyb20gYSB2ZXJzaW9uIHNlbnQgYnkgQ2hhcmxlcyBMZXZlcnQgPGNoYXJsZXNAY29tbS5wb2x5bXRsLmNhPgotCi1QQVRIPSIvdXNyL2JpbjokUEFUSCI7IGV4cG9ydCBQQVRICi0KLXByb2c9YGVjaG8gJDAgfCBzZWQgJ3N8LiovfHwnYAotY2FzZSAiJHByb2ciIGluCi0gICAgKmVncmVwKSBncmVwPSR7RUdSRVAtZWdyZXB9IDs7Ci0gICAgKmZncmVwKSBncmVwPSR7RkdSRVAtZmdyZXB9IDs7Ci0gICAgKikgIGdyZXA9JHtHUkVQLWdyZXB9ICAgOzsKLWVzYWMKLXBhdD0iIgotd2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KLSAgY2FzZSAiJDEiIGluCi0gIC1lIHwgLWYpIG9wdD0iJG9wdCAkMSI7IHNoaWZ0OyBwYXQ9IiQxIgotICAgICAgICAgICBpZiB0ZXN0ICIkZ3JlcCIgPSBncmVwOyB0aGVuICAjIGdyZXAgaXMgYnVnZ3kgd2l0aCAtZSBvbiBTVlI0Ci0gICAgICAgICAgICAgZ3JlcD1lZ3JlcAotICAgICAgICAgICBmaTs7Ci0gIC1BIHwgLUIpIG9wdD0iJG9wdCAkMSAkMiI7IHNoaWZ0OzsKLSAgLSopICAgICAgb3B0PSIkb3B0ICQxIjs7Ci0gICAqKSAgICAgIGlmIHRlc3QgLXogIiRwYXQiOyB0aGVuCi0gICAgICAgICBwYXQ9IiQxIgotICAgICAgIGVsc2UKLSAgICAgICAgIGJyZWFrOwotICAgICAgICAgICBmaTs7Ci0gIGVzYWMKLSAgc2hpZnQKLWRvbmUKLQotaWYgdGVzdCAteiAiJHBhdCI7IHRoZW4KLSAgZWNobyAiZ3JlcCB0aHJvdWdoIGJ6aXAyIGZpbGVzIgotICBlY2hvICJ1c2FnZTogJHByb2cgW2dyZXBfb3B0aW9uc10gcGF0dGVybiBbZmlsZXNdIgotICBleGl0IDEKLWZpCi0KLWxpc3Q9MAotc2lsZW50PTAKLW9wPWBlY2hvICIkb3B0IiB8IHNlZCAtZSAncy8gLy9nJyAtZSAncy8tLy9nJ2AKLWNhc2UgIiRvcCIgaW4KLSAgKmwqKSBsaXN0PTEKLWVzYWMKLWNhc2UgIiRvcCIgaW4KLSAgKmgqKSBzaWxlbnQ9MQotZXNhYwotCi1pZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCi0gIGJ6aXAyIC1jZGZxIHwgJGdyZXAgJG9wdCAiJHBhdCIKLSAgZXhpdCAkPwotZmkKLQotcmVzPTAKLWZvciBpIGRvCi0gIGlmIHRlc3QgLWYgIiRpIjsgdGhlbiA6OyBlbHNlIGlmIHRlc3QgLWYgIiRpLmJ6MiI7IHRoZW4gaT0iJGkuYnoyIjsgZmk7IGZpCi0gIGlmIHRlc3QgJGxpc3QgLWVxIDE7IHRoZW4KLSAgICBiemlwMiAtY2RmcSAiJGkiIHwgJGdyZXAgJG9wdCAiJHBhdCIgMj4mMSA+IC9kZXYvbnVsbCAmJiBlY2hvICRpCi0gICAgcj0kPwotICBlbGlmIHRlc3QgJCMgLWVxIDEgLW8gJHNpbGVudCAtZXEgMTsgdGhlbgotICAgIGJ6aXAyIC1jZGZxICIkaSIgfCAkZ3JlcCAkb3B0ICIkcGF0IgotICAgIHI9JD8KLSAgZWxzZQotICAgIGo9JHtpLy9cXC9cXFxcfQotICAgIGo9JHtqLy98L1xcfH0KLSAgICBqPSR7ai8vJi9cXCZ9Ci0gICAgaj1gcHJpbnRmICIlcyIgIiRqIiB8IHRyICdcbicgJyAnYAotICAgIGJ6aXAyIC1jZGZxICIkaSIgfCAkZ3JlcCAkb3B0ICIkcGF0IiB8IHNlZCAic3xefCR7an06fCIKLSAgICByPSQ/Ci0gIGZpCi0gIHRlc3QgIiRyIiAtbmUgMCAmJiByZXM9IiRyIgotZG9uZQotZXhpdCAkcmVzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemdyZXAuMSBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6Z3JlcC4xCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzBhZjhjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6Z3JlcC4xCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotXCJTaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB6bW9yZS4xIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPgotXCJmb3IgRGViaWFuIEdOVS9MaW51eAotLlRIIEJaR1JFUCAxCi0uU0ggTkFNRQotYnpncmVwLCBiemZncmVwLCBiemVncmVwIFwtIHNlYXJjaCBwb3NzaWJseSBiemlwMiBjb21wcmVzc2VkIGZpbGVzIGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbgotLlNIIFNZTk9QU0lTCi0uQiBiemdyZXAKLVsgZ3JlcF9vcHRpb25zIF0KLS5CSSAgW1wgLWVcIF0gIiBwYXR0ZXJuIgotLklSIGZpbGVuYW1lICIuXHwuXHwuIgotLmJyCi0uQiBiemVncmVwCi1bIGVncmVwX29wdGlvbnMgXQotLkJJICBbXCAtZVwgXSAiIHBhdHRlcm4iCi0uSVIgZmlsZW5hbWUgIi5cfC5cfC4iCi0uYnIKLS5CIGJ6ZmdyZXAKLVsgZmdyZXBfb3B0aW9ucyBdCi0uQkkgIFtcIC1lXCBdICIgcGF0dGVybiIKLS5JUiBmaWxlbmFtZSAiLlx8Llx8LiIKLS5TSCBERVNDUklQVElPTgotLklSICBCemdyZXAKLWlzIHVzZWQgdG8gaW52b2tlIHRoZQotLkkgZ3JlcAotb24gYnppcDItY29tcHJlc3NlZCBmaWxlcy4gQWxsIG9wdGlvbnMgc3BlY2lmaWVkIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8KLS5JIGdyZXAuCi1JZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgc3RhbmRhcmQgaW5wdXQgaXMgZGVjb21wcmVzc2VkCi1pZiBuZWNlc3NhcnkgYW5kIGZlZCB0byBncmVwLgotT3RoZXJ3aXNlIHRoZSBnaXZlbiBmaWxlcyBhcmUgdW5jb21wcmVzc2VkIGlmIG5lY2Vzc2FyeSBhbmQgZmVkIHRvCi0uSSBncmVwLgotLlBQCi1JZgotLkkgYnpncmVwCi1pcyBpbnZva2VkIGFzCi0uSSBiemVncmVwCi1vcgotLkkgYnpmZ3JlcAotdGhlbgotLkkgZWdyZXAKLW9yCi0uSSBmZ3JlcAotaXMgdXNlZCBpbnN0ZWFkIG9mCi0uSSBncmVwLgotSWYgdGhlIEdSRVAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LAotLkkgYnpncmVwCi11c2VzIGl0IGFzIHRoZQotLkkgZ3JlcAotcHJvZ3JhbSB0byBiZSBpbnZva2VkLiBGb3IgZXhhbXBsZToKLQotICAgIGZvciBzaDogIEdSRVA9ZmdyZXAgIGJ6Z3JlcCBzdHJpbmcgZmlsZXMKLSAgICBmb3IgY3NoOiAoc2V0ZW52IEdSRVAgZmdyZXA7IGJ6Z3JlcCBzdHJpbmcgZmlsZXMpCi0uU0ggQVVUSE9SCi1DaGFybGVzIExldmVydCAoY2hhcmxlc0Bjb21tLnBvbHltdGwuY2EpLiBBZGFwdGVkIHRvIGJ6aXAyIGJ5IFBoaWxpcHBlCi1Ucm9pbiA8cGhpbEBmaWZpLm9yZz4gZm9yIERlYmlhbiBHTlUvTGludXguCi0uU0ggIlNFRSBBTFNPIgotZ3JlcCgxKSwgZWdyZXAoMSksIGZncmVwKDEpLCBiemRpZmYoMSksIGJ6bW9yZSgxKSwgYnpsZXNzKDEpLCBiemlwMigxKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvYnppcC5jc3MgYi9VdGlsaXRpZXMvY21iemlwMi9iemlwLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZlYjQwMS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemlwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qIENvbG91cnM6Ci0jNzQyNDBmICBkYXJrIGJyb3duICAgICAgaDEsIGgyLCBoMywgaDQKLSMzMzY2OTkgIG1lZGl1bSBibHVlICAgICBsaW5rcwotIzMzOTk5OSAgdHVycXVvaXNlICAgICAgIGxpbmsgaG92ZXIgY29sb3VyCi0jMjAyMDIwICBhbG1vc3QgYmxhY2sgICAgZ2VuZXJhbCB0ZXh0Ci0jNzYxNTk2ICBwdXJwbGUgICAgICAgICAgbWQ1c3VtIHRleHQKLSM2MjYyNjIgIGRhcmsgZ3JheSAgICAgICBwcmUgYm9yZGVyCi0jZWVlZWVlICB2ZXJ5IGxpZ2h0IGdyYXkgcHJlIGJhY2tncm91bmQKLSNmMmYyZjkgIHZlcnkgbGlnaHQgYmx1ZSBuYXYgdGFibGUgYmFja2dyb3VuZAotIzMzNjZjYyAgbWVkaXVtIGJsdWUgICAgIG5hdiB0YWJsZSBib3JkZXIKLSovCi0KLWEsIGE6bGluaywgYTp2aXNpdGVkLCBhOmFjdGl2ZSB7IGNvbG9yOiAjMzM2Njk5OyB9Ci1hOmhvdmVyIHsgY29sb3I6ICMzMzk5OTk7IH0KLQotYm9keSB7IGZvbnQ6IDgwJS8xMjYlIHNhbnMtc2VyaWY7IH0KLWgxLCBoMiwgaDMsIGg0IHsgY29sb3I6ICM3NDI0MGY7IH0KLQotZHQgeyBjb2xvcjogIzMzNjY5OTsgZm9udC13ZWlnaHQ6IGJvbGQgfQotZGQgeyAKLSBtYXJnaW4tbGVmdDogMS41ZW07IAotIHBhZGRpbmctYm90dG9tOiAwLjhlbTsKLX0KLQotLyogLS0gcnVsZXIgLS0gKi8KLWRpdi5ocl9ibHVlIHsgCi0gIGhlaWdodDogIDNweDsgCi0gIGJhY2tncm91bmQ6I2ZmZmZmZiB1cmwoIi9pbWFnZXMvaHJfYmx1ZS5wbmciKSByZXBlYXQteDsgfQotZGl2LmhyX2JsdWUgaHIgeyBkaXNwbGF5Om5vbmU7IH0KLQotLyogcmVsZWFzZSBzdHlsZXMgKi8KLSNyZWxlYXNlIHAgeyBtYXJnaW4tdG9wOiAwLjRlbTsgfQotI3JlbGVhc2UgLm1kNXN1bSB7IGNvbG9yOiAjNzYxNTk2OyB9Ci0KLQotLyogLS0tLS0tIHN0eWxlcyBmb3IgZG9jc3xtYW51YWxzfGhvd3RvIC0tLS0tLSAqLwotLyogLS0gbGlzdHMgLS0gKi8KLXVsICB7IAotIG1hcmdpbjogICAgIDBweCA0cHggMTZweCAxNnB4OwotIHBhZGRpbmc6ICAgIDBweDsKLSBsaXN0LXN0eWxlOiB1cmwoIi9pbWFnZXMvbGktYmx1ZS5wbmciKTsgCi19Ci11bCBsaSB7IAotIG1hcmdpbi1ib3R0b206IDEwcHg7Ci19Ci11bCB1bCAgIHsgCi0gbGlzdC1zdHlsZS10eXBlOiAgbm9uZTsgCi0gbGlzdC1zdHlsZS1pbWFnZTogbm9uZTsgCi0gbWFyZ2luLWxlZnQ6ICAgICAgMHB4OyAKLX0KLQotLyogaGVhZGVyIC8gZm9vdGVyIG5hdiB0YWJsZXMgKi8KLXRhYmxlLm5hdiB7Ci0gYm9yZGVyOiAgICAgc29saWQgMXB4ICMzMzY2Y2M7Ci0gYmFja2dyb3VuZDogI2YyZjJmOTsKLSBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmY5OwotIG1hcmdpbi1ib3R0b206IDAuNWVtOwotfQotLyogZG9uJ3QgaGF2ZSB1bmRlcmxpbmVkIGxpbmtzIGluIGNodW5rZWQgbmF2IG1lbnVzICovCi10YWJsZS5uYXYgYSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQotdGFibGUubmF2IGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQotdGFibGUubmF2IHRkIHsgZm9udC1zaXplOiA4NSU7IH0KLQotY29kZSwgdHQsIHByZSB7IGZvbnQtc2l6ZTogMTIwJTsgfQotY29kZSwgdHQgeyBjb2xvcjogIzc2MTU5NjsgfQotCi1kaXYubGl0ZXJhbGxheW91dCwgcHJlLnByb2dyYW1saXN0aW5nLCBwcmUuc2NyZWVuIHsKLSBjb2xvcjogICAgICAjMDAwMDAwOwotIHBhZGRpbmc6ICAgIDAuNWVtOwotIGJhY2tncm91bmQ6ICNlZWVlZWU7Ci0gYm9yZGVyOiAgICAgMXB4IHNvbGlkICM2MjYyNjI7Ci0gYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsKLSBtYXJnaW46IDRweCAwcHggNHB4IDBweDsgCi19CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemlwMi4xIGIvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMxM2YyZC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemlwMi4xCisrKyAvZGV2L251bGwKQEAgLTEsNDU0ICswLDAgQEAKLS5QVQotLlRIIGJ6aXAyIDEKLS5TSCBOQU1FCi1iemlwMiwgYnVuemlwMiBcLSBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLCB2MS4wLjQKLS5icgotYnpjYXQgXC0gZGVjb21wcmVzc2VzIGZpbGVzIHRvIHN0ZG91dAotLmJyCi1iemlwMnJlY292ZXIgXC0gcmVjb3ZlcnMgZGF0YSBmcm9tIGRhbWFnZWQgYnppcDIgZmlsZXMKLQotLlNIIFNZTk9QU0lTCi0ubGwgKzgKLS5CIGJ6aXAyCi0uUkIgWyAiIFwtY2Rma3FzdHZ6VkwxMjM0NTY3ODkgIiBdCi1bCi0uSSAiZmlsZW5hbWVzIFwmLi4uIgotXQotLmxsIC04Ci0uYnIKLS5CIGJ1bnppcDIKLS5SQiBbICIgXC1ma3ZzVkwgIiBdCi1bIAotLkkgImZpbGVuYW1lcyBcJi4uLiIKLV0KLS5icgotLkIgYnpjYXQKLS5SQiBbICIgXC1zICIgXQotWyAKLS5JICJmaWxlbmFtZXMgXCYuLi4iCi1dCi0uYnIKLS5CIGJ6aXAycmVjb3ZlcgotLkkgImZpbGVuYW1lIgotCi0uU0ggREVTQ1JJUFRJT04KLS5JIGJ6aXAyCi1jb21wcmVzc2VzIGZpbGVzIHVzaW5nIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2sgc29ydGluZwotdGV4dCBjb21wcmVzc2lvbiBhbGdvcml0aG0sIGFuZCBIdWZmbWFuIGNvZGluZy4gIENvbXByZXNzaW9uIGlzCi1nZW5lcmFsbHkgY29uc2lkZXJhYmx5IGJldHRlciB0aGFuIHRoYXQgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwKLUxaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywgYW5kIGFwcHJvYWNoZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBQUE0KLWZhbWlseSBvZiBzdGF0aXN0aWNhbCBjb21wcmVzc29ycy4KLQotVGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBkZWxpYmVyYXRlbHkgdmVyeSBzaW1pbGFyIHRvIAotdGhvc2Ugb2YgCi0uSSBHTlUgZ3ppcCwgCi1idXQgdGhleSBhcmUgbm90IGlkZW50aWNhbC4KLQotLkkgYnppcDIKLWV4cGVjdHMgYSBsaXN0IG9mIGZpbGUgbmFtZXMgdG8gYWNjb21wYW55IHRoZQotY29tbWFuZC1saW5lIGZsYWdzLiAgRWFjaCBmaWxlIGlzIHJlcGxhY2VkIGJ5IGEgY29tcHJlc3NlZCB2ZXJzaW9uIG9mCi1pdHNlbGYsIHdpdGggdGhlIG5hbWUgIm9yaWdpbmFsX25hbWUuYnoyIi4gIAotRWFjaCBjb21wcmVzc2VkIGZpbGUKLWhhcyB0aGUgc2FtZSBtb2RpZmljYXRpb24gZGF0ZSwgcGVybWlzc2lvbnMsIGFuZCwgd2hlbiBwb3NzaWJsZSwKLW93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5hbCwgc28gdGhhdCB0aGVzZSBwcm9wZXJ0aWVzIGNhbgotYmUgY29ycmVjdGx5IHJlc3RvcmVkIGF0IGRlY29tcHJlc3Npb24gdGltZS4gIEZpbGUgbmFtZSBoYW5kbGluZyBpcwotbmFpdmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBwcmVzZXJ2aW5nIG9yaWdpbmFsCi1maWxlIG5hbWVzLCBwZXJtaXNzaW9ucywgb3duZXJzaGlwcyBvciBkYXRlcyBpbiBmaWxlc3lzdGVtcyB3aGljaCBsYWNrCi10aGVzZSBjb25jZXB0cywgb3IgaGF2ZSBzZXJpb3VzIGZpbGUgbmFtZSBsZW5ndGggcmVzdHJpY3Rpb25zLCBzdWNoIGFzCi1NUy1ET1MuCi0KLS5JIGJ6aXAyCi1hbmQKLS5JIGJ1bnppcDIKLXdpbGwgYnkgZGVmYXVsdCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCi1maWxlcy4gIElmIHlvdSB3YW50IHRoaXMgdG8gaGFwcGVuLCBzcGVjaWZ5IHRoZSBcLWYgZmxhZy4KLQotSWYgbm8gZmlsZSBuYW1lcyBhcmUgc3BlY2lmaWVkLAotLkkgYnppcDIKLWNvbXByZXNzZXMgZnJvbSBzdGFuZGFyZAotaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLAotLkkgYnppcDIKLXdpbGwgZGVjbGluZSB0bwotd3JpdGUgY29tcHJlc3NlZCBvdXRwdXQgdG8gYSB0ZXJtaW5hbCwgYXMgdGhpcyB3b3VsZCBiZSBlbnRpcmVseQotaW5jb21wcmVoZW5zaWJsZSBhbmQgdGhlcmVmb3JlIHBvaW50bGVzcy4KLQotLkkgYnVuemlwMgotKG9yCi0uSSBiemlwMiBcLWQpIAotZGVjb21wcmVzc2VzIGFsbAotc3BlY2lmaWVkIGZpbGVzLiAgRmlsZXMgd2hpY2ggd2VyZSBub3QgY3JlYXRlZCBieSAKLS5JIGJ6aXAyCi13aWxsIGJlIGRldGVjdGVkIGFuZCBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzc3VlZC4gIAotLkkgYnppcDIKLWF0dGVtcHRzIHRvIGd1ZXNzIHRoZSBmaWxlbmFtZSBmb3IgdGhlIGRlY29tcHJlc3NlZCBmaWxlIAotZnJvbSB0aGF0IG9mIHRoZSBjb21wcmVzc2VkIGZpbGUgYXMgZm9sbG93czoKLQotICAgICAgIGZpbGVuYW1lLmJ6MiAgICBiZWNvbWVzICAgZmlsZW5hbWUKLSAgICAgICBmaWxlbmFtZS5ieiAgICAgYmVjb21lcyAgIGZpbGVuYW1lCi0gICAgICAgZmlsZW5hbWUudGJ6MiAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICBmaWxlbmFtZS50YnogICAgYmVjb21lcyAgIGZpbGVuYW1lLnRhcgotICAgICAgIGFueW90aGVybmFtZSAgICBiZWNvbWVzICAgYW55b3RoZXJuYW1lLm91dAotCi1JZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsIAotLkkgLmJ6MiwgCi0uSSAuYnosIAotLkkgLnRiejIKLW9yCi0uSSAudGJ6LCAKLS5JIGJ6aXAyIAotY29tcGxhaW5zIHRoYXQgaXQgY2Fubm90Ci1ndWVzcyB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZSwgYW5kIHVzZXMgdGhlIG9yaWdpbmFsIG5hbWUKLXdpdGgKLS5JIC5vdXQKLWFwcGVuZGVkLgotCi1BcyB3aXRoIGNvbXByZXNzaW9uLCBzdXBwbHlpbmcgbm8KLWZpbGVuYW1lcyBjYXVzZXMgZGVjb21wcmVzc2lvbiBmcm9tIAotc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LgotCi0uSSBidW56aXAyIAotd2lsbCBjb3JyZWN0bHkgZGVjb21wcmVzcyBhIGZpbGUgd2hpY2ggaXMgdGhlCi1jb25jYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlIGNvbXByZXNzZWQgZmlsZXMuICBUaGUgcmVzdWx0IGlzIHRoZQotY29uY2F0ZW5hdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB1bmNvbXByZXNzZWQgZmlsZXMuICBJbnRlZ3JpdHkKLXRlc3RpbmcgKFwtdCkgCi1vZiBjb25jYXRlbmF0ZWQgCi1jb21wcmVzc2VkIGZpbGVzIGlzIGFsc28gc3VwcG9ydGVkLgotCi1Zb3UgY2FuIGFsc28gY29tcHJlc3Mgb3IgZGVjb21wcmVzcyBmaWxlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IGJ5Ci1naXZpbmcgdGhlIFwtYyBmbGFnLiAgTXVsdGlwbGUgZmlsZXMgbWF5IGJlIGNvbXByZXNzZWQgYW5kCi1kZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlIHJlc3VsdGluZyBvdXRwdXRzIGFyZSBmZWQgc2VxdWVudGlhbGx5IHRvCi1zdGRvdXQuICBDb21wcmVzc2lvbiBvZiBtdWx0aXBsZSBmaWxlcyAKLWluIHRoaXMgbWFubmVyIGdlbmVyYXRlcyBhIHN0cmVhbQotY29udGFpbmluZyBtdWx0aXBsZSBjb21wcmVzc2VkIGZpbGUgcmVwcmVzZW50YXRpb25zLiAgU3VjaCBhIHN0cmVhbQotY2FuIGJlIGRlY29tcHJlc3NlZCBjb3JyZWN0bHkgb25seSBieQotLkkgYnppcDIgCi12ZXJzaW9uIDAuOS4wIG9yCi1sYXRlci4gIEVhcmxpZXIgdmVyc2lvbnMgb2YKLS5JIGJ6aXAyCi13aWxsIHN0b3AgYWZ0ZXIgZGVjb21wcmVzc2luZwotdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KLQotLkkgYnpjYXQKLShvcgotLkkgYnppcDIgLWRjKSAKLWRlY29tcHJlc3NlcyBhbGwgc3BlY2lmaWVkIGZpbGVzIHRvCi10aGUgc3RhbmRhcmQgb3V0cHV0LgotCi0uSSBiemlwMgotd2lsbCByZWFkIGFyZ3VtZW50cyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLS5JIEJaSVAyCi1hbmQKLS5JIEJaSVAsCi1pbiB0aGF0IG9yZGVyLCBhbmQgd2lsbCBwcm9jZXNzIHRoZW0KLWJlZm9yZSBhbnkgYXJndW1lbnRzIHJlYWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBnaXZlcyBhIAotY29udmVuaWVudCB3YXkgdG8gc3VwcGx5IGRlZmF1bHQgYXJndW1lbnRzLgotCi1Db21wcmVzc2lvbiBpcyBhbHdheXMgcGVyZm9ybWVkLCBldmVuIGlmIHRoZSBjb21wcmVzc2VkIAotZmlsZSBpcyBzbGlnaHRseQotbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcyB0aGFuIGFib3V0IG9uZSBodW5kcmVkIGJ5dGVzCi10ZW5kIHRvIGdldCBsYXJnZXIsIHNpbmNlIHRoZSBjb21wcmVzc2lvbiBtZWNoYW5pc20gaGFzIGEgY29uc3RhbnQKLW92ZXJoZWFkIGluIHRoZSByZWdpb24gb2YgNTAgYnl0ZXMuICBSYW5kb20gZGF0YSAoaW5jbHVkaW5nIHRoZSBvdXRwdXQKLW9mIG1vc3QgZmlsZSBjb21wcmVzc29ycykgaXMgY29kZWQgYXQgYWJvdXQgOC4wNSBiaXRzIHBlciBieXRlLCBnaXZpbmcKLWFuIGV4cGFuc2lvbiBvZiBhcm91bmQgMC41JS4KLQotQXMgYSBzZWxmLWNoZWNrIGZvciB5b3VyIHByb3RlY3Rpb24sIAotLkkgCi1iemlwMgotdXNlcyAzMi1iaXQgQ1JDcyB0bwotbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZSBpcyBpZGVudGljYWwgdG8gdGhlCi1vcmlnaW5hbC4gIFRoaXMgZ3VhcmRzIGFnYWluc3QgY29ycnVwdGlvbiBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLCBhbmQKLWFnYWluc3QgdW5kZXRlY3RlZCBidWdzIGluCi0uSSBiemlwMgotKGhvcGVmdWxseSB2ZXJ5IHVubGlrZWx5KS4gIFRoZQotY2hhbmNlcyBvZiBkYXRhIGNvcnJ1cHRpb24gZ29pbmcgdW5kZXRlY3RlZCBpcyBtaWNyb3Njb3BpYywgYWJvdXQgb25lCi1jaGFuY2UgaW4gZm91ciBiaWxsaW9uIGZvciBlYWNoIGZpbGUgcHJvY2Vzc2VkLiAgQmUgYXdhcmUsIHRob3VnaCwgdGhhdAotdGhlIGNoZWNrIG9jY3VycyB1cG9uIGRlY29tcHJlc3Npb24sIHNvIGl0IGNhbiBvbmx5IHRlbGwgeW91IHRoYXQKLXNvbWV0aGluZyBpcyB3cm9uZy4gIEl0IGNhbid0IGhlbHAgeW91IAotcmVjb3ZlciB0aGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkCi1kYXRhLiAgWW91IGNhbiB1c2UgCi0uSSBiemlwMnJlY292ZXIKLXRvIHRyeSB0byByZWNvdmVyIGRhdGEgZnJvbQotZGFtYWdlZCBmaWxlcy4KLQotUmV0dXJuIHZhbHVlczogMCBmb3IgYSBub3JtYWwgZXhpdCwgMSBmb3IgZW52aXJvbm1lbnRhbCBwcm9ibGVtcyAoZmlsZQotbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCAmYyksIDIgdG8gaW5kaWNhdGUgYSBjb3JydXB0Ci1jb21wcmVzc2VkIGZpbGUsIDMgZm9yIGFuIGludGVybmFsIGNvbnNpc3RlbmN5IGVycm9yIChlZywgYnVnKSB3aGljaAotY2F1c2VkCi0uSSBiemlwMgotdG8gcGFuaWMuCi0KLS5TSCBPUFRJT05TCi0uVFAKLS5CIFwtYyAtLXN0ZG91dAotQ29tcHJlc3Mgb3IgZGVjb21wcmVzcyB0byBzdGFuZGFyZCBvdXRwdXQuCi0uVFAKLS5CIFwtZCAtLWRlY29tcHJlc3MKLUZvcmNlIGRlY29tcHJlc3Npb24uICAKLS5JIGJ6aXAyLCAKLS5JIGJ1bnppcDIgCi1hbmQKLS5JIGJ6Y2F0IAotYXJlCi1yZWFsbHkgdGhlIHNhbWUgcHJvZ3JhbSwgYW5kIHRoZSBkZWNpc2lvbiBhYm91dCB3aGF0IGFjdGlvbnMgdG8gdGFrZSBpcwotZG9uZSBvbiB0aGUgYmFzaXMgb2Ygd2hpY2ggbmFtZSBpcyB1c2VkLiAgVGhpcyBmbGFnIG92ZXJyaWRlcyB0aGF0Ci1tZWNoYW5pc20sIGFuZCBmb3JjZXMgCi0uSSBiemlwMgotdG8gZGVjb21wcmVzcy4KLS5UUAotLkIgXC16IC0tY29tcHJlc3MKLVRoZSBjb21wbGVtZW50IHRvIFwtZDogZm9yY2VzIGNvbXByZXNzaW9uLCByZWdhcmRsZXNzIG9mIHRoZQotaW52b2NhdGlvbiBuYW1lLgotLlRQCi0uQiBcLXQgLS10ZXN0Ci1DaGVjayBpbnRlZ3JpdHkgb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpLCBidXQgZG9uJ3QgZGVjb21wcmVzcyB0aGVtLgotVGhpcyByZWFsbHkgcGVyZm9ybXMgYSB0cmlhbCBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LgotLlRQCi0uQiBcLWYgLS1mb3JjZQotRm9yY2Ugb3ZlcndyaXRlIG9mIG91dHB1dCBmaWxlcy4gIE5vcm1hbGx5LAotLkkgYnppcDIgCi13aWxsIG5vdCBvdmVyd3JpdGUKLWV4aXN0aW5nIG91dHB1dCBmaWxlcy4gIEFsc28gZm9yY2VzIAotLkkgYnppcDIgCi10byBicmVhayBoYXJkIGxpbmtzCi10byBmaWxlcywgd2hpY2ggaXQgb3RoZXJ3aXNlIHdvdWxkbid0IGRvLgotCi1iemlwMiBub3JtYWxseSBkZWNsaW5lcyB0byBkZWNvbXByZXNzIGZpbGVzIHdoaWNoIGRvbid0IGhhdmUgdGhlCi1jb3JyZWN0IG1hZ2ljIGhlYWRlciBieXRlcy4gIElmIGZvcmNlZCAoLWYpLCBob3dldmVyLCBpdCB3aWxsIHBhc3MKLXN1Y2ggZmlsZXMgdGhyb3VnaCB1bm1vZGlmaWVkLiAgVGhpcyBpcyBob3cgR05VIGd6aXAgYmVoYXZlcy4KLS5UUAotLkIgXC1rIC0ta2VlcAotS2VlcCAoZG9uJ3QgZGVsZXRlKSBpbnB1dCBmaWxlcyBkdXJpbmcgY29tcHJlc3Npb24KLW9yIGRlY29tcHJlc3Npb24uCi0uVFAKLS5CIFwtcyAtLXNtYWxsCi1SZWR1Y2UgbWVtb3J5IHVzYWdlLCBmb3IgY29tcHJlc3Npb24sIGRlY29tcHJlc3Npb24gYW5kIHRlc3RpbmcuICBGaWxlcwotYXJlIGRlY29tcHJlc3NlZCBhbmQgdGVzdGVkIHVzaW5nIGEgbW9kaWZpZWQgYWxnb3JpdGhtIHdoaWNoIG9ubHkKLXJlcXVpcmVzIDIuNSBieXRlcyBwZXIgYmxvY2sgYnl0ZS4gIFRoaXMgbWVhbnMgYW55IGZpbGUgY2FuIGJlCi1kZWNvbXByZXNzZWQgaW4gMjMwMGsgb2YgbWVtb3J5LCBhbGJlaXQgYXQgYWJvdXQgaGFsZiB0aGUgbm9ybWFsIHNwZWVkLgotCi1EdXJpbmcgY29tcHJlc3Npb24sIFwtcyBzZWxlY3RzIGEgYmxvY2sgc2l6ZSBvZiAyMDBrLCB3aGljaCBsaW1pdHMKLW1lbW9yeSB1c2UgdG8gYXJvdW5kIHRoZSBzYW1lIGZpZ3VyZSwgYXQgdGhlIGV4cGVuc2Ugb2YgeW91ciBjb21wcmVzc2lvbgotcmF0aW8uICBJbiBzaG9ydCwgaWYgeW91ciBtYWNoaW5lIGlzIGxvdyBvbiBtZW1vcnkgKDggbWVnYWJ5dGVzIG9yCi1sZXNzKSwgdXNlIFwtcyBmb3IgZXZlcnl0aGluZy4gIFNlZSBNRU1PUlkgTUFOQUdFTUVOVCBiZWxvdy4KLS5UUAotLkIgXC1xIC0tcXVpZXQKLVN1cHByZXNzIG5vbi1lc3NlbnRpYWwgd2FybmluZyBtZXNzYWdlcy4gIE1lc3NhZ2VzIHBlcnRhaW5pbmcgdG8KLUkvTyBlcnJvcnMgYW5kIG90aGVyIGNyaXRpY2FsIGV2ZW50cyB3aWxsIG5vdCBiZSBzdXBwcmVzc2VkLgotLlRQCi0uQiBcLXYgLS12ZXJib3NlCi1WZXJib3NlIG1vZGUgLS0gc2hvdyB0aGUgY29tcHJlc3Npb24gcmF0aW8gZm9yIGVhY2ggZmlsZSBwcm9jZXNzZWQuCi1GdXJ0aGVyIFwtdidzIGluY3JlYXNlIHRoZSB2ZXJib3NpdHkgbGV2ZWwsIHNwZXdpbmcgb3V0IGxvdHMgb2YKLWluZm9ybWF0aW9uIHdoaWNoIGlzIHByaW1hcmlseSBvZiBpbnRlcmVzdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KLS5UUAotLkIgXC1MIC0tbGljZW5zZSAtViAtLXZlcnNpb24KLURpc3BsYXkgdGhlIHNvZnR3YXJlIHZlcnNpb24sIGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuCi0uVFAKLS5CIFwtMSAob3IgXC1cLWZhc3QpIHRvIFwtOSAob3IgXC1cLWJlc3QpCi1TZXQgdGhlIGJsb2NrIHNpemUgdG8gMTAwIGssIDIwMCBrIC4uICA5MDAgayB3aGVuIGNvbXByZXNzaW5nLiAgSGFzIG5vCi1lZmZlY3Qgd2hlbiBkZWNvbXByZXNzaW5nLiAgU2VlIE1FTU9SWSBNQU5BR0VNRU5UIGJlbG93LgotVGhlIFwtXC1mYXN0IGFuZCBcLVwtYmVzdCBhbGlhc2VzIGFyZSBwcmltYXJpbHkgZm9yIEdOVSBnemlwIAotY29tcGF0aWJpbGl0eS4gIEluIHBhcnRpY3VsYXIsIFwtXC1mYXN0IGRvZXNuJ3QgbWFrZSB0aGluZ3MKLXNpZ25pZmljYW50bHkgZmFzdGVyLiAgCi1BbmQgXC1cLWJlc3QgbWVyZWx5IHNlbGVjdHMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgotLlRQCi0uQiBcLS0KLVRyZWF0cyBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXMgZmlsZSBuYW1lcywgZXZlbiBpZiB0aGV5IHN0YXJ0Ci13aXRoIGEgZGFzaC4gIFRoaXMgaXMgc28geW91IGNhbiBoYW5kbGUgZmlsZXMgd2l0aCBuYW1lcyBiZWdpbm5pbmcKLXdpdGggYSBkYXNoLCBmb3IgZXhhbXBsZTogYnppcDIgXC0tIFwtbXlmaWxlbmFtZS4KLS5UUAotLkIgXC0tcmVwZXRpdGl2ZS1mYXN0IC0tcmVwZXRpdGl2ZS1iZXN0Ci1UaGVzZSBmbGFncyBhcmUgcmVkdW5kYW50IGluIHZlcnNpb25zIDAuOS41IGFuZCBhYm92ZS4gIFRoZXkgcHJvdmlkZWQKLXNvbWUgY29hcnNlIGNvbnRyb2wgb3ZlciB0aGUgYmVoYXZpb3VyIG9mIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBpbgotZWFybGllciB2ZXJzaW9ucywgd2hpY2ggd2FzIHNvbWV0aW1lcyB1c2VmdWwuICAwLjkuNSBhbmQgYWJvdmUgaGF2ZSBhbgotaW1wcm92ZWQgYWxnb3JpdGhtIHdoaWNoIHJlbmRlcnMgdGhlc2UgZmxhZ3MgaXJyZWxldmFudC4KLQotLlNIIE1FTU9SWSBNQU5BR0VNRU5UCi0uSSBiemlwMiAKLWNvbXByZXNzZXMgbGFyZ2UgZmlsZXMgaW4gYmxvY2tzLiAgVGhlIGJsb2NrIHNpemUgYWZmZWN0cwotYm90aCB0aGUgY29tcHJlc3Npb24gcmF0aW8gYWNoaWV2ZWQsIGFuZCB0aGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yCi1jb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4gIFRoZSBmbGFncyBcLTEgdGhyb3VnaCBcLTkKLXNwZWNpZnkgdGhlIGJsb2NrIHNpemUgdG8gYmUgMTAwLDAwMCBieXRlcyB0aHJvdWdoIDkwMCwwMDAgYnl0ZXMgKHRoZQotZGVmYXVsdCkgcmVzcGVjdGl2ZWx5LiAgQXQgZGVjb21wcmVzc2lvbiB0aW1lLCB0aGUgYmxvY2sgc2l6ZSB1c2VkIGZvcgotY29tcHJlc3Npb24gaXMgcmVhZCBmcm9tIHRoZSBoZWFkZXIgb2YgdGhlIGNvbXByZXNzZWQgZmlsZSwgYW5kCi0uSSBidW56aXAyCi10aGVuIGFsbG9jYXRlcyBpdHNlbGYganVzdCBlbm91Z2ggbWVtb3J5IHRvIGRlY29tcHJlc3MKLXRoZSBmaWxlLiAgU2luY2UgYmxvY2sgc2l6ZXMgYXJlIHN0b3JlZCBpbiBjb21wcmVzc2VkIGZpbGVzLCBpdCBmb2xsb3dzCi10aGF0IHRoZSBmbGFncyBcLTEgdG8gXC05IGFyZSBpcnJlbGV2YW50IHRvIGFuZCBzbyBpZ25vcmVkCi1kdXJpbmcgZGVjb21wcmVzc2lvbi4KLQotQ29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcmVxdWlyZW1lbnRzLCAKLWluIGJ5dGVzLCBjYW4gYmUgZXN0aW1hdGVkIGFzOgotCi0gICAgICAgQ29tcHJlc3Npb246ICAgNDAwayArICggOCB4IGJsb2NrIHNpemUgKQotCi0gICAgICAgRGVjb21wcmVzc2lvbjogMTAwayArICggNCB4IGJsb2NrIHNpemUgKSwgb3IKLSAgICAgICAgICAgICAgICAgICAgICAxMDBrICsgKCAyLjUgeCBibG9jayBzaXplICkKLQotTGFyZ2VyIGJsb2NrIHNpemVzIGdpdmUgcmFwaWRseSBkaW1pbmlzaGluZyBtYXJnaW5hbCByZXR1cm5zLiAgTW9zdCBvZgotdGhlIGNvbXByZXNzaW9uIGNvbWVzIGZyb20gdGhlIGZpcnN0IHR3byBvciB0aHJlZSBodW5kcmVkIGsgb2YgYmxvY2sKLXNpemUsIGEgZmFjdCB3b3J0aCBiZWFyaW5nIGluIG1pbmQgd2hlbiB1c2luZwotLkkgYnppcDIKLW9uIHNtYWxsIG1hY2hpbmVzLgotSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gYXBwcmVjaWF0ZSB0aGF0IHRoZSBkZWNvbXByZXNzaW9uIG1lbW9yeQotcmVxdWlyZW1lbnQgaXMgc2V0IGF0IGNvbXByZXNzaW9uIHRpbWUgYnkgdGhlIGNob2ljZSBvZiBibG9jayBzaXplLgotCi1Gb3IgZmlsZXMgY29tcHJlc3NlZCB3aXRoIHRoZSBkZWZhdWx0IDkwMGsgYmxvY2sgc2l6ZSwKLS5JIGJ1bnppcDIKLXdpbGwgcmVxdWlyZSBhYm91dCAzNzAwIGtieXRlcyB0byBkZWNvbXByZXNzLiAgVG8gc3VwcG9ydCBkZWNvbXByZXNzaW9uCi1vZiBhbnkgZmlsZSBvbiBhIDQgbWVnYWJ5dGUgbWFjaGluZSwgCi0uSSBidW56aXAyCi1oYXMgYW4gb3B0aW9uIHRvCi1kZWNvbXByZXNzIHVzaW5nIGFwcHJveGltYXRlbHkgaGFsZiB0aGlzIGFtb3VudCBvZiBtZW1vcnksIGFib3V0IDIzMDAKLWtieXRlcy4gIERlY29tcHJlc3Npb24gc3BlZWQgaXMgYWxzbyBoYWx2ZWQsIHNvIHlvdSBzaG91bGQgdXNlIHRoaXMKLW9wdGlvbiBvbmx5IHdoZXJlIG5lY2Vzc2FyeS4gIFRoZSByZWxldmFudCBmbGFnIGlzIC1zLgotCi1JbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeSBjb25zdHJhaW50cyBhbGxvdywKLXNpbmNlIHRoYXQgbWF4aW1pc2VzIHRoZSBjb21wcmVzc2lvbiBhY2hpZXZlZC4gIENvbXByZXNzaW9uIGFuZAotZGVjb21wcmVzc2lvbiBzcGVlZCBhcmUgdmlydHVhbGx5IHVuYWZmZWN0ZWQgYnkgYmxvY2sgc2l6ZS4KLQotQW5vdGhlciBzaWduaWZpY2FudCBwb2ludCBhcHBsaWVzIHRvIGZpbGVzIHdoaWNoIGZpdCBpbiBhIHNpbmdsZSBibG9jawotLS0gdGhhdCBtZWFucyBtb3N0IGZpbGVzIHlvdSdkIGVuY291bnRlciB1c2luZyBhIGxhcmdlIGJsb2NrIHNpemUuICBUaGUKLWFtb3VudCBvZiByZWFsIG1lbW9yeSB0b3VjaGVkIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwKLXNpbmNlIHRoZSBmaWxlIGlzIHNtYWxsZXIgdGhhbiBhIGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbXByZXNzaW5nIGEgZmlsZQotMjAsMDAwIGJ5dGVzIGxvbmcgd2l0aCB0aGUgZmxhZyAtOSB3aWxsIGNhdXNlIHRoZSBjb21wcmVzc29yIHRvCi1hbGxvY2F0ZSBhcm91bmQgNzYwMGsgb2YgbWVtb3J5LCBidXQgb25seSB0b3VjaCA0MDBrICsgMjAwMDAgKiA4ID0gNTYwCi1rYnl0ZXMgb2YgaXQuICBTaW1pbGFybHksIHRoZSBkZWNvbXByZXNzb3Igd2lsbCBhbGxvY2F0ZSAzNzAwayBidXQgb25seQotdG91Y2ggMTAwayArIDIwMDAwICogNCA9IDE4MCBrYnl0ZXMuCi0KLUhlcmUgaXMgYSB0YWJsZSB3aGljaCBzdW1tYXJpc2VzIHRoZSBtYXhpbXVtIG1lbW9yeSB1c2FnZSBmb3IgZGlmZmVyZW50Ci1ibG9jayBzaXplcy4gIEFsc28gcmVjb3JkZWQgaXMgdGhlIHRvdGFsIGNvbXByZXNzZWQgc2l6ZSBmb3IgMTQgZmlsZXMgb2YKLXRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlc3Npb24gQ29ycHVzIHRvdGFsbGluZyAzLDE0MSw2MjIgYnl0ZXMuICBUaGlzCi1jb2x1bW4gZ2l2ZXMgc29tZSBmZWVsIGZvciBob3cgY29tcHJlc3Npb24gdmFyaWVzIHdpdGggYmxvY2sgc2l6ZS4KLVRoZXNlIGZpZ3VyZXMgdGVuZCB0byB1bmRlcnN0YXRlIHRoZSBhZHZhbnRhZ2Ugb2YgbGFyZ2VyIGJsb2NrIHNpemVzIGZvcgotbGFyZ2VyIGZpbGVzLCBzaW5jZSB0aGUgQ29ycHVzIGlzIGRvbWluYXRlZCBieSBzbWFsbGVyIGZpbGVzLgotCi0gICAgICAgICAgIENvbXByZXNzICAgRGVjb21wcmVzcyAgIERlY29tcHJlc3MgICBDb3JwdXMKLSAgICBGbGFnICAgICB1c2FnZSAgICAgIHVzYWdlICAgICAgIC1zIHVzYWdlICAgICBTaXplCi0KLSAgICAgLTEgICAgICAxMjAwayAgICAgICA1MDBrICAgICAgICAgMzUwayAgICAgIDkxNDcwNAotICAgICAtMiAgICAgIDIwMDBrICAgICAgIDkwMGsgICAgICAgICA2MDBrICAgICAgODc3NzAzCi0gICAgIC0zICAgICAgMjgwMGsgICAgICAxMzAwayAgICAgICAgIDg1MGsgICAgICA4NjAzMzgKLSAgICAgLTQgICAgICAzNjAwayAgICAgIDE3MDBrICAgICAgICAxMTAwayAgICAgIDg0Njg5OQotICAgICAtNSAgICAgIDQ0MDBrICAgICAgMjEwMGsgICAgICAgIDEzNTBrICAgICAgODQ1MTYwCi0gICAgIC02ICAgICAgNTIwMGsgICAgICAyNTAwayAgICAgICAgMTYwMGsgICAgICA4Mzg2MjYKLSAgICAgLTcgICAgICA2MTAwayAgICAgIDI5MDBrICAgICAgICAxODUwayAgICAgIDgzNDA5NgotICAgICAtOCAgICAgIDY4MDBrICAgICAgMzMwMGsgICAgICAgIDIxMDBrICAgICAgODI4NjQyCi0gICAgIC05ICAgICAgNzYwMGsgICAgICAzNzAwayAgICAgICAgMjM1MGsgICAgICA4Mjg2NDIKLQotLlNIIFJFQ09WRVJJTkcgREFUQSBGUk9NIERBTUFHRUQgRklMRVMKLS5JIGJ6aXAyCi1jb21wcmVzc2VzIGZpbGVzIGluIGJsb2NrcywgdXN1YWxseSA5MDBrYnl0ZXMgbG9uZy4gIEVhY2gKLWJsb2NrIGlzIGhhbmRsZWQgaW5kZXBlbmRlbnRseS4gIElmIGEgbWVkaWEgb3IgdHJhbnNtaXNzaW9uIGVycm9yIGNhdXNlcwotYSBtdWx0aS1ibG9jayAuYnoyCi1maWxlIHRvIGJlY29tZSBkYW1hZ2VkLCBpdCBtYXkgYmUgcG9zc2libGUgdG8KLXJlY292ZXIgZGF0YSBmcm9tIHRoZSB1bmRhbWFnZWQgYmxvY2tzIGluIHRoZSBmaWxlLgotCi1UaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrIGlzIGRlbGltaXRlZCBieSBhIDQ4LWJpdAotcGF0dGVybiwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gZmluZCB0aGUgYmxvY2sgYm91bmRhcmllcyB3aXRoCi1yZWFzb25hYmxlIGNlcnRhaW50eS4gIEVhY2ggYmxvY2sgYWxzbyBjYXJyaWVzIGl0cyBvd24gMzItYml0IENSQywgc28KLWRhbWFnZWQgYmxvY2tzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gdW5kYW1hZ2VkIG9uZXMuCi0KLS5JIGJ6aXAycmVjb3ZlcgotaXMgYSBzaW1wbGUgcHJvZ3JhbSB3aG9zZSBwdXJwb3NlIGlzIHRvIHNlYXJjaCBmb3IKLWJsb2NrcyBpbiAuYnoyIGZpbGVzLCBhbmQgd3JpdGUgZWFjaCBibG9jayBvdXQgaW50byBpdHMgb3duIC5iejIgCi1maWxlLiAgWW91IGNhbiB0aGVuIHVzZQotLkkgYnppcDIgCi1cLXQKLXRvIHRlc3QgdGhlCi1pbnRlZ3JpdHkgb2YgdGhlIHJlc3VsdGluZyBmaWxlcywgYW5kIGRlY29tcHJlc3MgdGhvc2Ugd2hpY2ggYXJlCi11bmRhbWFnZWQuCi0KLS5JIGJ6aXAycmVjb3ZlcgotdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBkYW1hZ2VkIGZpbGUsIAotYW5kIHdyaXRlcyBhIG51bWJlciBvZiBmaWxlcyAicmVjMDAwMDFmaWxlLmJ6MiIsCi0icmVjMDAwMDJmaWxlLmJ6MiIsIGV0YywgY29udGFpbmluZyB0aGUgIGV4dHJhY3RlZCAgYmxvY2tzLgotVGhlICBvdXRwdXQgIGZpbGVuYW1lcyAgYXJlICBkZXNpZ25lZCAgc28gIHRoYXQgdGhlIHVzZSBvZgotd2lsZGNhcmRzIGluIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyAtLSBmb3IgZXhhbXBsZSwgIAotImJ6aXAyIC1kYyAgcmVjKmZpbGUuYnoyID4gcmVjb3ZlcmVkX2RhdGEiIC0tIHByb2Nlc3NlcyB0aGUgZmlsZXMgaW4KLXRoZSBjb3JyZWN0IG9yZGVyLgotCi0uSSBiemlwMnJlY292ZXIKLXNob3VsZCBiZSBvZiBtb3N0IHVzZSBkZWFsaW5nIHdpdGggbGFyZ2UgLmJ6MgotZmlsZXMsICBhcyAgdGhlc2Ugd2lsbCBjb250YWluIG1hbnkgYmxvY2tzLiAgSXQgaXMgY2xlYXJseQotZnV0aWxlIHRvIHVzZSBpdCBvbiBkYW1hZ2VkIHNpbmdsZS1ibG9jayAgZmlsZXMsICBzaW5jZSAgYQotZGFtYWdlZCAgYmxvY2sgIGNhbm5vdCAgYmUgcmVjb3ZlcmVkLiAgSWYgeW91IHdpc2ggdG8gbWluaW1pc2UgCi1hbnkgcG90ZW50aWFsIGRhdGEgbG9zcyB0aHJvdWdoIG1lZGlhICBvciAgdHJhbnNtaXNzaW9uIGVycm9ycywgCi15b3UgbWlnaHQgY29uc2lkZXIgY29tcHJlc3Npbmcgd2l0aCBhIHNtYWxsZXIKLWJsb2NrIHNpemUuCi0KLS5TSCBQRVJGT1JNQU5DRSBOT1RFUwotVGhlIHNvcnRpbmcgcGhhc2Ugb2YgY29tcHJlc3Npb24gZ2F0aGVycyB0b2dldGhlciBzaW1pbGFyIHN0cmluZ3MgaW4gdGhlCi1maWxlLiAgQmVjYXVzZSBvZiB0aGlzLCBmaWxlcyBjb250YWluaW5nIHZlcnkgbG9uZyBydW5zIG9mIHJlcGVhdGVkCi1zeW1ib2xzLCBsaWtlICJhYWJhYWJhYWJhYWIgLi4uIiAgKHJlcGVhdGVkIHNldmVyYWwgaHVuZHJlZCB0aW1lcykgbWF5Ci1jb21wcmVzcyBtb3JlIHNsb3dseSB0aGFuIG5vcm1hbC4gIFZlcnNpb25zIDAuOS41IGFuZCBhYm92ZSBmYXJlIG11Y2gKLWJldHRlciB0aGFuIHByZXZpb3VzIHZlcnNpb25zIGluIHRoaXMgcmVzcGVjdC4gIFRoZSByYXRpbyBiZXR3ZWVuCi13b3JzdC1jYXNlIGFuZCBhdmVyYWdlLWNhc2UgY29tcHJlc3Npb24gdGltZSBpcyBpbiB0aGUgcmVnaW9uIG9mIDEwOjEuCi1Gb3IgcHJldmlvdXMgdmVyc2lvbnMsIHRoaXMgZmlndXJlIHdhcyBtb3JlIGxpa2UgMTAwOjEuICBZb3UgY2FuIHVzZSB0aGUKLVwtdnZ2diBvcHRpb24gdG8gbW9uaXRvciBwcm9ncmVzcyBpbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LgotCi1EZWNvbXByZXNzaW9uIHNwZWVkIGlzIHVuYWZmZWN0ZWQgYnkgdGhlc2UgcGhlbm9tZW5hLgotCi0uSSBiemlwMgotdXN1YWxseSBhbGxvY2F0ZXMgc2V2ZXJhbCBtZWdhYnl0ZXMgb2YgbWVtb3J5IHRvIG9wZXJhdGUKLWluLCBhbmQgdGhlbiBjaGFyZ2VzIGFsbCBvdmVyIGl0IGluIGEgZmFpcmx5IHJhbmRvbSBmYXNoaW9uLiAgVGhpcyBtZWFucwotdGhhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgY29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcsIGlzIGxhcmdlbHkKLWRldGVybWluZWQgYnkgdGhlIHNwZWVkIGF0IHdoaWNoIHlvdXIgbWFjaGluZSBjYW4gc2VydmljZSBjYWNoZSBtaXNzZXMuCi1CZWNhdXNlIG9mIHRoaXMsIHNtYWxsIGNoYW5nZXMgdG8gdGhlIGNvZGUgdG8gcmVkdWNlIHRoZSBtaXNzIHJhdGUgaGF2ZQotYmVlbiBvYnNlcnZlZCB0byBnaXZlIGRpc3Byb3BvcnRpb25hdGVseSBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCi1JIGltYWdpbmUgCi0uSSBiemlwMgotd2lsbCBwZXJmb3JtIGJlc3Qgb24gbWFjaGluZXMgd2l0aCB2ZXJ5IGxhcmdlIGNhY2hlcy4KLQotLlNIIENBVkVBVFMKLUkvTyBlcnJvciBtZXNzYWdlcyBhcmUgbm90IGFzIGhlbHBmdWwgYXMgdGhleSBjb3VsZCBiZS4KLS5JIGJ6aXAyCi10cmllcyBoYXJkIHRvIGRldGVjdCBJL08gZXJyb3JzIGFuZCBleGl0IGNsZWFubHksIGJ1dCB0aGUgZGV0YWlscyBvZgotd2hhdCB0aGUgcHJvYmxlbSBpcyBzb21ldGltZXMgc2VlbSByYXRoZXIgbWlzbGVhZGluZy4KLQotVGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uIDEuMC40IG9mCi0uSSBiemlwMi4gIAotQ29tcHJlc3NlZCBkYXRhIGNyZWF0ZWQgYnkgdGhpcyB2ZXJzaW9uIGlzIGVudGlyZWx5IGZvcndhcmRzIGFuZAotYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJldmlvdXMgcHVibGljIHJlbGVhc2VzLCB2ZXJzaW9ucwotMC4xcGwyLCAwLjkuMCwgMC45LjUsIDEuMC4wLCAxLjAuMSwgMS4wLjIgYW5kIDEuMC4zLCBidXQgd2l0aCB0aGUgZm9sbG93aW5nCi1leGNlcHRpb246IDAuOS4wIGFuZCBhYm92ZSBjYW4gY29ycmVjdGx5IGRlY29tcHJlc3MgbXVsdGlwbGUKLWNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzLiAgMC4xcGwyIGNhbm5vdCBkbyB0aGlzOyBpdCB3aWxsIHN0b3AKLWFmdGVyIGRlY29tcHJlc3NpbmcganVzdCB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLgotCi0uSSBiemlwMnJlY292ZXIKLXZlcnNpb25zIHByaW9yIHRvIDEuMC4yIHVzZWQgMzItYml0IGludGVnZXJzIHRvIHJlcHJlc2VudAotYml0IHBvc2l0aW9ucyBpbiBjb21wcmVzc2VkIGZpbGVzLCBzbyB0aGV5IGNvdWxkIG5vdCBoYW5kbGUgY29tcHJlc3NlZAotZmlsZXMgbW9yZSB0aGFuIDUxMiBtZWdhYnl0ZXMgbG9uZy4gIFZlcnNpb25zIDEuMC4yIGFuZCBhYm92ZSB1c2UKLTY0LWJpdCBpbnRzIG9uIHNvbWUgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgdGhlbSAoR05VIHN1cHBvcnRlZAotdGFyZ2V0cywgYW5kIFdpbmRvd3MpLiAgVG8gZXN0YWJsaXNoIHdoZXRoZXIgb3Igbm90IGJ6aXAycmVjb3ZlciB3YXMKLWJ1aWx0IHdpdGggc3VjaCBhIGxpbWl0YXRpb24sIHJ1biBpdCB3aXRob3V0IGFyZ3VtZW50cy4gIEluIGFueSBldmVudAoteW91IGNhbiBidWlsZCB5b3Vyc2VsZiBhbiB1bmxpbWl0ZWQgdmVyc2lvbiBpZiB5b3UgY2FuIHJlY29tcGlsZSBpdAotd2l0aCBNYXliZVVJbnQ2NCBzZXQgdG8gYmUgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIuCi0KLQotCi0uU0ggQVVUSE9SCi1KdWxpYW4gU2V3YXJkLCBqc2V3YXJkYnppcC5vcmcuCi0KLWh0dHA6Ly93d3cuYnppcC5vcmcKLQotVGhlIGlkZWFzIGVtYm9kaWVkIGluCi0uSSBiemlwMgotYXJlIGR1ZSB0byAoYXQgbGVhc3QpIHRoZSBmb2xsb3dpbmcKLXBlb3BsZTogTWljaGFlbCBCdXJyb3dzIGFuZCBEYXZpZCBXaGVlbGVyIChmb3IgdGhlIGJsb2NrIHNvcnRpbmcKLXRyYW5zZm9ybWF0aW9uKSwgRGF2aWQgV2hlZWxlciAoYWdhaW4sIGZvciB0aGUgSHVmZm1hbiBjb2RlciksIFBldGVyCi1GZW53aWNrIChmb3IgdGhlIHN0cnVjdHVyZWQgY29kaW5nIG1vZGVsIGluIHRoZSBvcmlnaW5hbAotLkkgYnppcCwKLWFuZCBtYW55IHJlZmluZW1lbnRzKSwgYW5kIEFsaXN0YWlyIE1vZmZhdCwgUmFkZm9yZCBOZWFsIGFuZCBJYW4gV2l0dGVuCi0oZm9yIHRoZSBhcml0aG1ldGljIGNvZGVyIGluIHRoZSBvcmlnaW5hbAotLkkgYnppcCkuICAKLUkgYW0gbXVjaAotaW5kZWJ0ZWQgZm9yIHRoZWlyIGhlbHAsIHN1cHBvcnQgYW5kIGFkdmljZS4gIFNlZSB0aGUgbWFudWFsIGluIHRoZQotc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgcG9pbnRlcnMgdG8gc291cmNlcyBvZiBkb2N1bWVudGF0aW9uLiAgQ2hyaXN0aWFuCi12b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vayBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywgc28gYXMgdG8KLXNwZWVkIHVwIGNvbXByZXNzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0byBpbXByb3ZlIHRoZQotd29yc3QtY2FzZSBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZS4gIAotRG9ubmEgUm9iaW5zb24gWE1MaXNlZCB0aGUgZG9jdW1lbnRhdGlvbi4KLVRoZSBieiogc2NyaXB0cyBhcmUgZGVyaXZlZCBmcm9tIHRob3NlIG9mIEdOVSBnemlwLgotTWFueSBwZW9wbGUgc2VudCBwYXRjaGVzLCBoZWxwZWQKLXdpdGggcG9ydGFiaWxpdHkgcHJvYmxlbXMsIGxlbnQgbWFjaGluZXMsIGdhdmUgYWR2aWNlIGFuZCB3ZXJlIGdlbmVyYWxseQotaGVscGZ1bC4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLjEucHJlZm9ybWF0dGVkIGIvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuMS5wcmVmb3JtYXR0ZWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZTE2ZTUuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuMS5wcmVmb3JtYXR0ZWQKKysrIC9kZXYvbnVsbApAQCAtMSwzOTkgKzAsMCBAQAotYnppcDIoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIoMSkKLQotCi0KLU4ITkEIQU0ITUUIRQotICAgICAgIGJ6aXAyLCBidW56aXAyIOKIkiBhIGJsb2Nr4oCQc29ydGluZyBmaWxlIGNvbXByZXNzb3IsIHYxLjAuNAotICAgICAgIGJ6Y2F0IOKIkiBkZWNvbXByZXNzZXMgZmlsZXMgdG8gc3Rkb3V0Ci0gICAgICAgYnppcDJyZWNvdmVyIOKIkiByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlcwotCi0KLVMIU1kIWU4ITk8IT1AIUFMIU0kISVMIUwotICAgICAgIGIIYnoIemkIaXAIcDIIMiBbIOKIkgjiiJJjCGNkCGRmCGZrCGtxCHFzCHN0CHR2CHZ6CHpWCFZMCEwxCDEyCDIzCDM0CDQ1CDU2CDY3CDc4CDg5CDkgXSBbIF8IZl8IaV8IbF8IZV8Ibl8IYV8IbV8IZV8IcyBfCC5fCC5fCC4gIF0KLSAgICAgICBiCGJ1CHVuCG56CHppCGlwCHAyCDIgWyDiiJII4oiSZghmawhrdgh2cwhzVghWTAhMIF0gWyBfCGZfCGlfCGxfCGVfCG5fCGFfCG1fCGVfCHMgXwguXwguXwguICBdCi0gICAgICAgYghiegh6YwhjYQhhdAh0IFsg4oiSCOKIknMIcyBdIFsgXwhmXwhpXwhsXwhlXwhuXwhhXwhtXwhlXwhzIF8ILl8ILl8ILiAgXQotICAgICAgIGIIYnoIemkIaXAIcDIIMnIIcmUIZWMIY28Ib3YIdmUIZXIIciBfCGZfCGlfCGxfCGVfCG5fCGFfCG1fCGUKLQotCi1ECERFCEVTCFNDCENSCFJJCElQCFBUCFRJCElPCE9OCE4KLSAgICAgICBfCGJfCHpfCGlfCHBfCDIgIGNvbXByZXNzZXMgIGZpbGVzICB1c2luZyAgdGhlIEJ1cnJvd3PigJBXaGVlbGVyIGJsb2NrCi0gICAgICAgc29ydGluZyB0ZXh0IGNvbXByZXNzaW9uIGFsZ29yaXRobSwgIGFuZCAgSHVmZm1hbiAgY29kaW5nLgotICAgICAgIENvbXByZXNzaW9uICBpcyAgZ2VuZXJhbGx5ICBjb25zaWRlcmFibHkgIGJldHRlciB0aGFuIHRoYXQKLSAgICAgICBhY2hpZXZlZCBieSBtb3JlIGNvbnZlbnRpb25hbCBMWjc3L0xaNzjigJBiYXNlZCBjb21wcmVzc29ycywKLSAgICAgICBhbmQgIGFwcHJvYWNoZXMgIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgUFBNIGZhbWlseSBvZiBzdGHCrQotICAgICAgIHRpc3RpY2FsIGNvbXByZXNzb3JzLgotCi0gICAgICAgVGhlIGNvbW1hbmTigJBsaW5lIG9wdGlvbnMgYXJlIGRlbGliZXJhdGVseSB2ZXJ5IHNpbWlsYXIgIHRvCi0gICAgICAgdGhvc2Ugb2YgXwhHXwhOXwhVIF8IZ18Iel8IaV8IcF8ILCBidXQgdGhleSBhcmUgbm90IGlkZW50aWNhbC4KLQotICAgICAgIF8IYl8Iel8IaV8IcF8IMiAgZXhwZWN0cyAgYSBsaXN0IG9mIGZpbGUgbmFtZXMgdG8gYWNjb21wYW55IHRoZSBjb23CrQotICAgICAgIG1hbmTigJBsaW5lIGZsYWdzLiAgRWFjaCBmaWxlIGlzIHJlcGxhY2VkICBieSAgYSAgY29tcHJlc3NlZAotICAgICAgIHZlcnNpb24gIG9mICBpdHNlbGYsICB3aXRoICB0aGUgIG5hbWUgIm9yaWdpbmFsX25hbWUuYnoyIi4KLSAgICAgICBFYWNoIGNvbXByZXNzZWQgZmlsZSBoYXMgdGhlIHNhbWUgbW9kaWZpY2F0aW9uIGRhdGUsICBwZXLCrQotICAgICAgIG1pc3Npb25zLCBhbmQsIHdoZW4gcG9zc2libGUsIG93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZMKtCi0gICAgICAgaW5nIG9yaWdpbmFsLCBzbyB0aGF0IHRoZXNlIHByb3BlcnRpZXMgIGNhbiAgYmUgIGNvcnJlY3RseQotICAgICAgIHJlc3RvcmVkICBhdCAgZGVjb21wcmVzc2lvbiAgdGltZS4gICBGaWxlIG5hbWUgaGFuZGxpbmcgaXMKLSAgICAgICBuYWl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIHByZXNlcnbCrQotICAgICAgIGluZyAgb3JpZ2luYWwgZmlsZSBuYW1lcywgcGVybWlzc2lvbnMsIG93bmVyc2hpcHMgb3IgZGF0ZXMKLSAgICAgICBpbiBmaWxlc3lzdGVtcyB3aGljaCBsYWNrIHRoZXNlIGNvbmNlcHRzLCBvciBoYXZlICBzZXJpb3VzCi0gICAgICAgZmlsZSBuYW1lIGxlbmd0aCByZXN0cmljdGlvbnMsIHN1Y2ggYXMgTVPigJBET1MuCi0KLSAgICAgICBfCGJfCHpfCGlfCHBfCDIgIGFuZCAgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIHdpbGwgYnkgZGVmYXVsdCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCi0gICAgICAgZmlsZXMuICBJZiB5b3Ugd2FudCB0aGlzIHRvIGhhcHBlbiwgc3BlY2lmeSB0aGUg4oiSZiBmbGFnLgotCi0gICAgICAgSWYgbm8gZmlsZSBuYW1lcyAgYXJlICBzcGVjaWZpZWQsICBfCGJfCHpfCGlfCHBfCDIgIGNvbXByZXNzZXMgIGZyb20KLSAgICAgICBzdGFuZGFyZCAgaW5wdXQgIHRvICBzdGFuZGFyZCBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIF8IYl8Iel8IaV8IcF8IMgotICAgICAgIHdpbGwgZGVjbGluZSB0byB3cml0ZSBjb21wcmVzc2VkIG91dHB1dCB0byBhIHRlcm1pbmFsLCAgYXMKLSAgICAgICB0aGlzICB3b3VsZCAgYmUgIGVudGlyZWx5ICBpbmNvbXByZWhlbnNpYmxlICBhbmQgdGhlcmVmb3JlCi0gICAgICAgcG9pbnRsZXNzLgotCi0gICAgICAgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIChvciBfCGJfCHpfCGlfCHBfCDIgXwjiiJJfCGRfCCkgZGVjb21wcmVzc2VzICBhbGwgIHNwZWNpZmllZCAgZmlsZXMuCi0gICAgICAgRmlsZXMgd2hpY2ggd2VyZSBub3QgY3JlYXRlZCBieSBfCGJfCHpfCGlfCHBfCDIgd2lsbCBiZSBkZXRlY3RlZCBhbmQKLSAgICAgICBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzc3VlZC4gIF8IYl8Iel8IaV8IcF8IMiAgYXR0ZW1wdHMgIHRvICBndWVzcwotICAgICAgIHRoZSAgZmlsZW5hbWUgIGZvciAgdGhlIGRlY29tcHJlc3NlZCBmaWxlIGZyb20gdGhhdCBvZiB0aGUKLSAgICAgICBjb21wcmVzc2VkIGZpbGUgYXMgZm9sbG93czoKLQotICAgICAgICAgICAgICBmaWxlbmFtZS5iejIgICAgYmVjb21lcyAgIGZpbGVuYW1lCi0gICAgICAgICAgICAgIGZpbGVuYW1lLmJ6ICAgICBiZWNvbWVzICAgZmlsZW5hbWUKLSAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6MiAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6ICAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICAgICAgICAgYW55b3RoZXJuYW1lICAgIGJlY29tZXMgICBhbnlvdGhlcm5hbWUub3V0Ci0KLSAgICAgICBJZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsCi0gICAgICAgXwguXwhiXwh6XwgyXwgsICBfCC5fCGJfCHpfCCwgIF8ILl8IdF8IYl8Iel8IMiBvciBfCC5fCHRfCGJfCHpfCCwgXwhiXwh6XwhpXwhwXwgyIGNvbXBsYWlucyB0aGF0IGl0IGNhbm5vdAotICAgICAgIGd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwKLSAgICAgICBuYW1lIHdpdGggXwguXwhvXwh1Xwh0IGFwcGVuZGVkLgotCi0gICAgICAgQXMgIHdpdGggY29tcHJlc3Npb24sIHN1cHBseWluZyBubyBmaWxlbmFtZXMgY2F1c2VzIGRlY29twq0KLSAgICAgICBwcmVzc2lvbiBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHN0YW5kYXJkIG91dHB1dC4KLQotICAgICAgIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiB3aWxsIGNvcnJlY3RseSBkZWNvbXByZXNzIGEgZmlsZSB3aGljaCBpcyB0aGUgY29uwq0KLSAgICAgICBjYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlIGNvbXByZXNzZWQgZmlsZXMuICBUaGUgcmVzdWx0IGlzCi0gICAgICAgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkIGZpbGVzLgotICAgICAgIEludGVncml0eSB0ZXN0aW5nICjiiJJ0KSBvZiBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZCBmaWxlcyBpcwotICAgICAgIGFsc28gc3VwcG9ydGVkLgotCi0gICAgICAgWW91IGNhbiBhbHNvIGNvbXByZXNzIG9yIGRlY29tcHJlc3MgZmlsZXMgdG8gdGhlICBzdGFuZGFyZAotICAgICAgIG91dHB1dCAgYnkgZ2l2aW5nIHRoZSDiiJJjIGZsYWcuICBNdWx0aXBsZSBmaWxlcyBtYXkgYmUgY29twq0KLSAgICAgICBwcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlIHJlc3VsdGluZyBvdXRwdXRzCi0gICAgICAgYXJlICBmZWQgIHNlcXVlbnRpYWxseSB0byBzdGRvdXQuICBDb21wcmVzc2lvbiBvZiBtdWx0aXBsZQotICAgICAgIGZpbGVzIGluIHRoaXMgbWFubmVyIGdlbmVyYXRlcyBhIHN0cmVhbSBjb250YWluaW5nICBtdWx0acKtCi0gICAgICAgcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtIGNhbiBiZQotICAgICAgIGRlY29tcHJlc3NlZCBjb3JyZWN0bHkgb25seSAgYnkgIF8IYl8Iel8IaV8IcF8IMiAgdmVyc2lvbiAgMC45LjAgIG9yCi0gICAgICAgbGF0ZXIuICAgRWFybGllciAgdmVyc2lvbnMgb2YgXwhiXwh6XwhpXwhwXwgyIHdpbGwgc3RvcCBhZnRlciBkZWNvbcKtCi0gICAgICAgcHJlc3NpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KLQotICAgICAgIF8IYl8Iel8IY18IYV8IdCAob3IgXwhiXwh6XwhpXwhwXwgyIF8I4oCQXwhkXwhjXwgpIGRlY29tcHJlc3NlcyBhbGwgc3BlY2lmaWVkICBmaWxlcyAgdG8KLSAgICAgICB0aGUgc3RhbmRhcmQgb3V0cHV0LgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyICB3aWxsICByZWFkIGFyZ3VtZW50cyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAgICBfCEJfCFpfCElfCFBfCDIgYW5kIF8IQl8IWl8ISV8IUF8ILCBpbiAgdGhhdCAgb3JkZXIsICBhbmQgIHdpbGwgIHByb2Nlc3MgIHRoZW0KLSAgICAgICBiZWZvcmUgIGFueSAgYXJndW1lbnRzICByZWFkICBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzCi0gICAgICAgZ2l2ZXMgYSBjb252ZW5pZW50IHdheSB0byBzdXBwbHkgZGVmYXVsdCBhcmd1bWVudHMuCi0KLSAgICAgICBDb21wcmVzc2lvbiBpcyBhbHdheXMgcGVyZm9ybWVkLCBldmVuICBpZiAgdGhlICBjb21wcmVzc2VkCi0gICAgICAgZmlsZSAgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcwotICAgICAgIHRoYW4gYWJvdXQgb25lIGh1bmRyZWQgYnl0ZXMgdGVuZCB0byBnZXQgbGFyZ2VyLCBzaW5jZSB0aGUKLSAgICAgICBjb21wcmVzc2lvbiAgbWVjaGFuaXNtICBoYXMgIGEgIGNvbnN0YW50ICBvdmVyaGVhZCAgaW4gdGhlCi0gICAgICAgcmVnaW9uIG9mIDUwIGJ5dGVzLiAgUmFuZG9tIGRhdGEgKGluY2x1ZGluZyB0aGUgb3V0cHV0ICBvZgotICAgICAgIG1vc3QgIGZpbGUgIGNvbXByZXNzb3JzKSAgaXMgIGNvZGVkIGF0IGFib3V0IDguMDUgYml0cyBwZXIKLSAgICAgICBieXRlLCBnaXZpbmcgYW4gZXhwYW5zaW9uIG9mIGFyb3VuZCAwLjUlLgotCi0gICAgICAgQXMgYSBzZWxm4oCQY2hlY2sgZm9yIHlvdXIgIHByb3RlY3Rpb24sICBfCGJfCHpfCGlfCHBfCDIgIHVzZXMgIDMy4oCQYml0Ci0gICAgICAgQ1JDcyAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZQotICAgICAgIGlzIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwuICBUaGlzIGd1YXJkcyBhZ2FpbnN0IGNvcnJ1cMKtCi0gICAgICAgdGlvbiAgb2YgIHRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCBhZ2FpbnN0IHVuZGV0ZWN0ZWQgYnVncwotICAgICAgIGluIF8IYl8Iel8IaV8IcF8IMiAoaG9wZWZ1bGx5IHZlcnkgdW5saWtlbHkpLiAgVGhlIGNoYW5jZXMgIG9mICBkYXRhCi0gICAgICAgY29ycnVwdGlvbiAgZ29pbmcgIHVuZGV0ZWN0ZWQgIGlzICBtaWNyb3Njb3BpYywgIGFib3V0IG9uZQotICAgICAgIGNoYW5jZSBpbiBmb3VyIGJpbGxpb24gZm9yIGVhY2ggZmlsZSBwcm9jZXNzZWQuICBCZSBhd2FyZSwKLSAgICAgICB0aG91Z2gsICB0aGF0ICB0aGUgIGNoZWNrIG9jY3VycyB1cG9uIGRlY29tcHJlc3Npb24sIHNvIGl0Ci0gICAgICAgY2FuIG9ubHkgdGVsbCB5b3UgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmcuICBJdCBjYW7igJl0ICBoZWxwCi0gICAgICAgeW91ICByZWNvdmVyICB0aGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkIGRhdGEuICBZb3UgY2FuIHVzZQotICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciB0byB0cnkgdG8gcmVjb3ZlciBkYXRhIGZyb20gZGFtYWdlZCBmaWxlcy4KLQotICAgICAgIFJldHVybiB2YWx1ZXM6IDAgZm9yIGEgbm9ybWFsIGV4aXQsICAxICBmb3IgIGVudmlyb25tZW50YWwKLSAgICAgICBwcm9ibGVtcyAgKGZpbGUgbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCAmYyksCi0gICAgICAgMiB0byBpbmRpY2F0ZSBhIGNvcnJ1cHQgY29tcHJlc3NlZCBmaWxlLCAzIGZvciBhbiBpbnRlcm5hbAotICAgICAgIGNvbnNpc3RlbmN5IGVycm9yIChlZywgYnVnKSB3aGljaCBjYXVzZWQgXwhiXwh6XwhpXwhwXwgyIHRvIHBhbmljLgotCi0KLU8IT1AIUFQIVEkISU8IT04ITlMIUwotICAgICAgIOKIkgjiiJJjCGMg4oCQCOKAkOKAkAjigJBzCHN0CHRkCGRvCG91CHV0CHQKLSAgICAgICAgICAgICAgQ29tcHJlc3Mgb3IgZGVjb21wcmVzcyB0byBzdGFuZGFyZCBvdXRwdXQuCi0KLSAgICAgICDiiJII4oiSZAhkIOKAkAjigJDigJAI4oCQZAhkZQhlYwhjbwhvbQhtcAhwcghyZQhlcwhzcwhzCi0gICAgICAgICAgICAgIEZvcmNlICBkZWNvbXByZXNzaW9uLiAgXwhiXwh6XwhpXwhwXwgyXwgsIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiBhbmQgXwhiXwh6XwhjXwhhXwh0IGFyZQotICAgICAgICAgICAgICByZWFsbHkgdGhlIHNhbWUgcHJvZ3JhbSwgIGFuZCAgdGhlICBkZWNpc2lvbiAgYWJvdXQKLSAgICAgICAgICAgICAgd2hhdCAgYWN0aW9ucyB0byB0YWtlIGlzIGRvbmUgb24gdGhlIGJhc2lzIG9mIHdoaWNoCi0gICAgICAgICAgICAgIG5hbWUgaXMgdXNlZC4gIFRoaXMgZmxhZyBvdmVycmlkZXMgdGhhdCAgbWVjaGFuaXNtLAotICAgICAgICAgICAgICBhbmQgZm9yY2VzIF8IYl8Iel8IaV8IcF8IMiB0byBkZWNvbXByZXNzLgotCi0gICAgICAg4oiSCOKIknoIeiDigJAI4oCQ4oCQCOKAkGMIY28Ib20IbXAIcHIIcmUIZXMIc3MIcwotICAgICAgICAgICAgICBUaGUgICBjb21wbGVtZW50ICAgdG8gICDiiJJkOiAgIGZvcmNlcyAgIGNvbXByZXNzaW9uLAotICAgICAgICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBpbnZvY2F0aW9uIG5hbWUuCi0KLSAgICAgICDiiJII4oiSdAh0IOKAkAjigJDigJAI4oCQdAh0ZQhlcwhzdAh0Ci0gICAgICAgICAgICAgIENoZWNrIGludGVncml0eSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocyksIGJ1dCBkb27igJl0Ci0gICAgICAgICAgICAgIGRlY29tcHJlc3MgIHRoZW0uICAgVGhpcyAgcmVhbGx5ICBwZXJmb3JtcyAgYSB0cmlhbAotICAgICAgICAgICAgICBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LgotCi0gICAgICAg4oiSCOKIkmYIZiDigJAI4oCQ4oCQCOKAkGYIZm8Ib3IIcmMIY2UIZQotICAgICAgICAgICAgICBGb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGVzLiAgIE5vcm1hbGx5LCAgXwhiXwh6XwhpXwhwXwgyCi0gICAgICAgICAgICAgIHdpbGwgIG5vdCAgb3ZlcndyaXRlICBleGlzdGluZyAgb3V0cHV0IGZpbGVzLiAgQWxzbwotICAgICAgICAgICAgICBmb3JjZXMgXwhiXwh6XwhpXwhwXwgyIHRvIGJyZWFrIGhhcmQgbGlua3MgdG8gZmlsZXMsIHdoaWNoIGl0Ci0gICAgICAgICAgICAgIG90aGVyd2lzZSB3b3VsZG7igJl0IGRvLgotCi0gICAgICAgICAgICAgIGJ6aXAyICBub3JtYWxseSAgZGVjbGluZXMgdG8gZGVjb21wcmVzcyBmaWxlcyB3aGljaAotICAgICAgICAgICAgICBkb27igJl0IGhhdmUgdGhlICBjb3JyZWN0ICBtYWdpYyAgaGVhZGVyICBieXRlcy4gICBJZgotICAgICAgICAgICAgICBmb3JjZWQgICjigJBmKSwgIGhvd2V2ZXIsICBpdCAgd2lsbCAgcGFzcyAgc3VjaCBmaWxlcwotICAgICAgICAgICAgICB0aHJvdWdoIHVubW9kaWZpZWQuICBUaGlzIGlzIGhvdyBHTlUgZ3ppcCAgYmVoYXZlcy4KLQotICAgICAgIOKIkgjiiJJrCGsg4oCQCOKAkOKAkAjigJBrCGtlCGVlCGVwCHAKLSAgICAgICAgICAgICAgS2VlcCAgKGRvbuKAmXQgZGVsZXRlKSBpbnB1dCBmaWxlcyBkdXJpbmcgY29tcHJlc3Npb24KLSAgICAgICAgICAgICAgb3IgZGVjb21wcmVzc2lvbi4KLQotICAgICAgIOKIkgjiiJJzCHMg4oCQCOKAkOKAkAjigJBzCHNtCG1hCGFsCGxsCGwKLSAgICAgICAgICAgICAgUmVkdWNlIG1lbW9yeSB1c2FnZSwgZm9yIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uCi0gICAgICAgICAgICAgIGFuZCAgdGVzdGluZy4gICBGaWxlcyAgYXJlICBkZWNvbXByZXNzZWQgYW5kIHRlc3RlZAotICAgICAgICAgICAgICB1c2luZyBhIG1vZGlmaWVkIGFsZ29yaXRobSB3aGljaCBvbmx5IHJlcXVpcmVzICAyLjUKLSAgICAgICAgICAgICAgYnl0ZXMgIHBlciAgYmxvY2sgYnl0ZS4gIFRoaXMgbWVhbnMgYW55IGZpbGUgY2FuIGJlCi0gICAgICAgICAgICAgIGRlY29tcHJlc3NlZCBpbiAyMzAwayBvZiBtZW1vcnksICBhbGJlaXQgIGF0ICBhYm91dAotICAgICAgICAgICAgICBoYWxmIHRoZSBub3JtYWwgc3BlZWQuCi0KLSAgICAgICAgICAgICAgRHVyaW5nICBjb21wcmVzc2lvbiwgIOKIknMgIHNlbGVjdHMgIGEgIGJsb2NrIHNpemUgb2YKLSAgICAgICAgICAgICAgMjAwaywgd2hpY2ggbGltaXRzIG1lbW9yeSB1c2UgdG8gIGFyb3VuZCAgdGhlICBzYW1lCi0gICAgICAgICAgICAgIGZpZ3VyZSwgIGF0ICB0aGUgZXhwZW5zZSBvZiB5b3VyIGNvbXByZXNzaW9uIHJhdGlvLgotICAgICAgICAgICAgICBJbiBzaG9ydCwgaWYgeW91ciAgbWFjaGluZSAgaXMgIGxvdyAgb24gIG1lbW9yeSAgKDgKLSAgICAgICAgICAgICAgbWVnYWJ5dGVzICBvciAgbGVzcyksICB1c2UgIOKIknMgZm9yIGV2ZXJ5dGhpbmcuICBTZWUKLSAgICAgICAgICAgICAgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuCi0KLSAgICAgICDiiJII4oiScQhxIOKAkAjigJDigJAI4oCQcQhxdQh1aQhpZQhldAh0Ci0gICAgICAgICAgICAgIFN1cHByZXNzIG5vbuKAkGVzc2VudGlhbCB3YXJuaW5nIG1lc3NhZ2VzLiAgIE1lc3NhZ2VzCi0gICAgICAgICAgICAgIHBlcnRhaW5pbmcgIHRvIEkvTyBlcnJvcnMgYW5kIG90aGVyIGNyaXRpY2FsIGV2ZW50cwotICAgICAgICAgICAgICB3aWxsIG5vdCBiZSBzdXBwcmVzc2VkLgotCi0gICAgICAg4oiSCOKIknYIdiDigJAI4oCQ4oCQCOKAkHYIdmUIZXIIcmIIYm8Ib3MIc2UIZQotICAgICAgICAgICAgICBWZXJib3NlIG1vZGUg4oCQ4oCQIHNob3cgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGZvciBlYWNoCi0gICAgICAgICAgICAgIGZpbGUgIHByb2Nlc3NlZC4gICBGdXJ0aGVyICDiiJJ24oCZcyAgaW5jcmVhc2UgdGhlIHZlcsKtCi0gICAgICAgICAgICAgIGJvc2l0eSBsZXZlbCwgc3Bld2luZyBvdXQgbG90cyBvZiBpbmZvcm1hdGlvbiB3aGljaAotICAgICAgICAgICAgICBpcyBwcmltYXJpbHkgb2YgaW50ZXJlc3QgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuCi0KLSAgICAgICDiiJII4oiSTAhMIOKAkAjigJDigJAI4oCQbAhsaQhpYwhjZQhlbghucwhzZQhlIOKAkAjigJBWCFYg4oCQCOKAkOKAkAjigJB2CHZlCGVyCHJzCHNpCGlvCG9uCG4KLSAgICAgICAgICAgICAgRGlzcGxheSAgdGhlICBzb2Z0d2FyZSAgdmVyc2lvbiwgIGxpY2Vuc2UgdGVybXMgYW5kCi0gICAgICAgICAgICAgIGNvbmRpdGlvbnMuCi0KLSAgICAgICDiiJII4oiSMQgxICgIKG8Ib3IIciDiiJII4oiS4oiSCOKIkmYIZmEIYXMIc3QIdCkIKSB0CHRvCG8g4oiSCOKIkjkIOSAoCChvCG9yCHIg4oiSCOKIkuKIkgjiiJJiCGJlCGVzCHN0CHQpCCkKLSAgICAgICAgICAgICAgU2V0IHRoZSBibG9jayBzaXplIHRvIDEwMCBrLCAyMDAgayAuLiAgOTAwICBrICB3aGVuCi0gICAgICAgICAgICAgIGNvbXByZXNzaW5nLiAgIEhhcyAgbm8gIGVmZmVjdCAgd2hlbiBkZWNvbXByZXNzaW5nLgotICAgICAgICAgICAgICBTZWUgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuICBUaGUg4oiS4oiSZmFzdCBhbmQg4oiS4oiSYmVzdAotICAgICAgICAgICAgICBhbGlhc2VzICBhcmUgIHByaW1hcmlseSBmb3IgR05VIGd6aXAgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwg4oiS4oiSZmFzdCBkb2VzbuKAmXQgbWFrZSB0aGluZ3MgIHNpZ25pZmnCrQotICAgICAgICAgICAgICBjYW50bHkgIGZhc3Rlci4gICBBbmQgIOKIkuKIkmJlc3QgIG1lcmVseSAgc2VsZWN0cyAgdGhlCi0gICAgICAgICAgICAgIGRlZmF1bHQgYmVoYXZpb3VyLgotCi0gICAgICAg4oiSCOKIkuKAkAjigJAgICAgIFRyZWF0cyBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXMgZmlsZSBuYW1lcywgZXZlbgotICAgICAgICAgICAgICBpZiB0aGV5IHN0YXJ0IHdpdGggYSBkYXNoLiAgVGhpcyBpcyBzbyB5b3UgY2FuIGhhbsKtCi0gICAgICAgICAgICAgIGRsZSBmaWxlcyB3aXRoIG5hbWVzIGJlZ2lubmluZyAgd2l0aCAgYSAgZGFzaCwgIGZvcgotICAgICAgICAgICAgICBleGFtcGxlOiBiemlwMiDiiJLigJAg4oiSbXlmaWxlbmFtZS4KLQotICAgICAgIOKIkgjiiJLigJAI4oCQcghyZQhlcAhwZQhldAh0aQhpdAh0aQhpdgh2ZQhl4oCQCOKAkGYIZmEIYXMIc3QIdCDigJAI4oCQ4oCQCOKAkHIIcmUIZXAIcGUIZXQIdGkIaXQIdGkIaXYIdmUIZeKAkAjigJBiCGJlCGVzCHN0CHQKLSAgICAgICAgICAgICAgVGhlc2UgIGZsYWdzICBhcmUgIHJlZHVuZGFudCAgaW4gdmVyc2lvbnMgMC45LjUgYW5kCi0gICAgICAgICAgICAgIGFib3ZlLiAgVGhleSBwcm92aWRlZCBzb21lIGNvYXJzZSBjb250cm9sIG92ZXIgIHRoZQotICAgICAgICAgICAgICBiZWhhdmlvdXIgIG9mIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBpbiBlYXJsaWVyIHZlcsKtCi0gICAgICAgICAgICAgIHNpb25zLCB3aGljaCB3YXMgc29tZXRpbWVzIHVzZWZ1bC4gIDAuOS41IGFuZCBhYm92ZQotICAgICAgICAgICAgICBoYXZlICBhbiAgaW1wcm92ZWQgIGFsZ29yaXRobSAgd2hpY2ggIHJlbmRlcnMgdGhlc2UKLSAgICAgICAgICAgICAgZmxhZ3MgaXJyZWxldmFudC4KLQotCi1NCE1FCEVNCE1PCE9SCFJZCFkgTQhNQQhBTghOQQhBRwhHRQhFTQhNRQhFTghOVAhUCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyIGNvbXByZXNzZXMgbGFyZ2UgZmlsZXMgaW4gYmxvY2tzLiAgIFRoZSAgYmxvY2sgIHNpemUKLSAgICAgICBhZmZlY3RzICBib3RoICB0aGUgIGNvbXByZXNzaW9uICByYXRpbyAgYWNoaWV2ZWQsICBhbmQgdGhlCi0gICAgICAgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLgotICAgICAgIFRoZSAgZmxhZ3MgIOKIkjEgIHRocm91Z2ggIOKIkjkgIHNwZWNpZnkgIHRoZSBibG9jayBzaXplIHRvIGJlCi0gICAgICAgMTAwLDAwMCBieXRlcyB0aHJvdWdoIDkwMCwwMDAgYnl0ZXMgKHRoZSBkZWZhdWx0KSAgcmVzcGVjwq0KLSAgICAgICB0aXZlbHkuICAgQXQgIGRlY29tcHJlc3Npb24gIHRpbWUsIHRoZSBibG9jayBzaXplIHVzZWQgZm9yCi0gICAgICAgY29tcHJlc3Npb24gaXMgcmVhZCBmcm9tICB0aGUgIGhlYWRlciAgb2YgIHRoZSAgY29tcHJlc3NlZAotICAgICAgIGZpbGUsIGFuZCBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgdGhlbiBhbGxvY2F0ZXMgaXRzZWxmIGp1c3QgZW5vdWdoIG1lbW9yeQotICAgICAgIHRvIGRlY29tcHJlc3MgdGhlIGZpbGUuICBTaW5jZSBibG9jayBzaXplcyBhcmUgIHN0b3JlZCAgaW4KLSAgICAgICBjb21wcmVzc2VkICBmaWxlcywgIGl0IGZvbGxvd3MgdGhhdCB0aGUgZmxhZ3Mg4oiSMSB0byDiiJI5IGFyZQotICAgICAgIGlycmVsZXZhbnQgdG8gYW5kIHNvIGlnbm9yZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uCi0KLSAgICAgICBDb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiByZXF1aXJlbWVudHMsIGluIGJ5dGVzLCAgY2FuCi0gICAgICAgYmUgZXN0aW1hdGVkIGFzOgotCi0gICAgICAgICAgICAgIENvbXByZXNzaW9uOiAgIDQwMGsgKyAoIDggeCBibG9jayBzaXplICkKLQotICAgICAgICAgICAgICBEZWNvbXByZXNzaW9uOiAxMDBrICsgKCA0IHggYmxvY2sgc2l6ZSApLCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDBrICsgKCAyLjUgeCBibG9jayBzaXplICkKLQotICAgICAgIExhcmdlciAgYmxvY2sgIHNpemVzICBnaXZlICByYXBpZGx5ICBkaW1pbmlzaGluZyAgbWFyZ2luYWwKLSAgICAgICByZXR1cm5zLiAgTW9zdCBvZiB0aGUgY29tcHJlc3Npb24gY29tZXMgZnJvbSB0aGUgZmlyc3QgdHdvCi0gICAgICAgb3IgIHRocmVlIGh1bmRyZWQgayBvZiBibG9jayBzaXplLCBhIGZhY3Qgd29ydGggYmVhcmluZyBpbgotICAgICAgIG1pbmQgd2hlbiB1c2luZyBfCGJfCHpfCGlfCHBfCDIgIG9uICBzbWFsbCAgbWFjaGluZXMuICAgSXQgIGlzICBhbHNvCi0gICAgICAgaW1wb3J0YW50ICB0byAgYXBwcmVjaWF0ZSAgdGhhdCAgdGhlICBkZWNvbXByZXNzaW9uIG1lbW9yeQotICAgICAgIHJlcXVpcmVtZW50IGlzIHNldCBhdCBjb21wcmVzc2lvbiB0aW1lIGJ5ICB0aGUgIGNob2ljZSAgb2YKLSAgICAgICBibG9jayBzaXplLgotCi0gICAgICAgRm9yICBmaWxlcyAgY29tcHJlc3NlZCAgd2l0aCAgdGhlIGRlZmF1bHQgOTAwayBibG9jayBzaXplLAotICAgICAgIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiB3aWxsIHJlcXVpcmUgYWJvdXQgMzcwMCBrYnl0ZXMgdG8gZGVjb21wcmVzcy4gICBUbwotICAgICAgIHN1cHBvcnQgZGVjb21wcmVzc2lvbiBvZiBhbnkgZmlsZSBvbiBhIDQgbWVnYWJ5dGUgbWFjaGluZSwKLSAgICAgICBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgaGFzIGFuIG9wdGlvbiB0byAgZGVjb21wcmVzcyAgdXNpbmcgIGFwcHJveGltYXRlbHkKLSAgICAgICBoYWxmIHRoaXMgYW1vdW50IG9mIG1lbW9yeSwgYWJvdXQgMjMwMCBrYnl0ZXMuICBEZWNvbXByZXPCrQotICAgICAgIHNpb24gc3BlZWQgaXMgYWxzbyBoYWx2ZWQsIHNvIHlvdSBzaG91bGQgdXNlICB0aGlzICBvcHRpb24KLSAgICAgICBvbmx5IHdoZXJlIG5lY2Vzc2FyeS4gIFRoZSByZWxldmFudCBmbGFnIGlzIOKAkHMuCi0KLSAgICAgICBJbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeSBjb27CrQotICAgICAgIHN0cmFpbnRzICBhbGxvdywgIHNpbmNlICB0aGF0ICBtYXhpbWlzZXMgIHRoZSAgY29tcHJlc3Npb24KLSAgICAgICBhY2hpZXZlZC4gICBDb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZCBhcmUgdmlydHXCrQotICAgICAgIGFsbHkgdW5hZmZlY3RlZCBieSBibG9jayBzaXplLgotCi0gICAgICAgQW5vdGhlciBzaWduaWZpY2FudCBwb2ludCBhcHBsaWVzIHRvIGZpbGVzIHdoaWNoIGZpdCBpbiAgYQotICAgICAgIHNpbmdsZSAgYmxvY2sgIOKAkOKAkCAgdGhhdCAgbWVhbnMgIG1vc3QgZmlsZXMgeW914oCZZCBlbmNvdW50ZXIKLSAgICAgICB1c2luZyBhIGxhcmdlIGJsb2NrICBzaXplLiAgIFRoZSAgYW1vdW50ICBvZiAgcmVhbCAgbWVtb3J5Ci0gICAgICAgdG91Y2hlZCBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YgdGhlIGZpbGUsIHNpbmNlIHRoZQotICAgICAgIGZpbGUgaXMgc21hbGxlciB0aGFuIGEgYmxvY2suICBGb3IgZXhhbXBsZSwgY29tcHJlc3NpbmcgIGEKLSAgICAgICBmaWxlICAyMCwwMDAgIGJ5dGVzICBsb25nICB3aXRoIHRoZSBmbGFnIOKAkDkgd2lsbCBjYXVzZSB0aGUKLSAgICAgICBjb21wcmVzc29yIHRvIGFsbG9jYXRlIGFyb3VuZCA3NjAwayBvZiAgbWVtb3J5LCAgYnV0ICBvbmx5Ci0gICAgICAgdG91Y2ggNDAwayArIDIwMDAwICogOCA9IDU2MCBrYnl0ZXMgb2YgaXQuICBTaW1pbGFybHksIHRoZQotICAgICAgIGRlY29tcHJlc3NvciB3aWxsIGFsbG9jYXRlIDM3MDBrIGJ1dCAgb25seSAgdG91Y2ggIDEwMGsgICsKLSAgICAgICAyMDAwMCAqIDQgPSAxODAga2J5dGVzLgotCi0gICAgICAgSGVyZSAgaXMgYSB0YWJsZSB3aGljaCBzdW1tYXJpc2VzIHRoZSBtYXhpbXVtIG1lbW9yeSB1c2FnZQotICAgICAgIGZvciBkaWZmZXJlbnQgYmxvY2sgc2l6ZXMuICBBbHNvICByZWNvcmRlZCAgaXMgIHRoZSAgdG90YWwKLSAgICAgICBjb21wcmVzc2VkICBzaXplIGZvciAxNCBmaWxlcyBvZiB0aGUgQ2FsZ2FyeSBUZXh0IENvbXByZXPCrQotICAgICAgIHNpb24gQ29ycHVzIHRvdGFsbGluZyAzLDE0MSw2MjIgYnl0ZXMuICBUaGlzIGNvbHVtbiAgZ2l2ZXMKLSAgICAgICBzb21lICBmZWVsICBmb3IgIGhvdyAgY29tcHJlc3Npb24gIHZhcmllcyB3aXRoIGJsb2NrIHNpemUuCi0gICAgICAgVGhlc2UgZmlndXJlcyB0ZW5kIHRvIHVuZGVyc3RhdGUgdGhlIGFkdmFudGFnZSAgb2YgIGxhcmdlcgotICAgICAgIGJsb2NrICBzaXplcyAgZm9yICBsYXJnZXIgZmlsZXMsIHNpbmNlIHRoZSBDb3JwdXMgaXMgZG9tacKtCi0gICAgICAgbmF0ZWQgYnkgc21hbGxlciBmaWxlcy4KLQotICAgICAgICAgICAgICAgICAgQ29tcHJlc3MgICBEZWNvbXByZXNzICAgRGVjb21wcmVzcyAgIENvcnB1cwotICAgICAgICAgICBGbGFnICAgICB1c2FnZSAgICAgIHVzYWdlICAgICAgIOKAkHMgdXNhZ2UgICAgIFNpemUKLQotICAgICAgICAgICAg4oCQMSAgICAgIDEyMDBrICAgICAgIDUwMGsgICAgICAgICAzNTBrICAgICAgOTE0NzA0Ci0gICAgICAgICAgICDigJAyICAgICAgMjAwMGsgICAgICAgOTAwayAgICAgICAgIDYwMGsgICAgICA4Nzc3MDMKLSAgICAgICAgICAgIOKAkDMgICAgICAyODAwayAgICAgIDEzMDBrICAgICAgICAgODUwayAgICAgIDg2MDMzOAotICAgICAgICAgICAg4oCQNCAgICAgIDM2MDBrICAgICAgMTcwMGsgICAgICAgIDExMDBrICAgICAgODQ2ODk5Ci0gICAgICAgICAgICDigJA1ICAgICAgNDQwMGsgICAgICAyMTAwayAgICAgICAgMTM1MGsgICAgICA4NDUxNjAKLSAgICAgICAgICAgIOKAkDYgICAgICA1MjAwayAgICAgIDI1MDBrICAgICAgICAxNjAwayAgICAgIDgzODYyNgotICAgICAgICAgICAg4oCQNyAgICAgIDYxMDBrICAgICAgMjkwMGsgICAgICAgIDE4NTBrICAgICAgODM0MDk2Ci0gICAgICAgICAgICDigJA4ICAgICAgNjgwMGsgICAgICAzMzAwayAgICAgICAgMjEwMGsgICAgICA4Mjg2NDIKLSAgICAgICAgICAgIOKAkDkgICAgICA3NjAwayAgICAgIDM3MDBrICAgICAgICAyMzUwayAgICAgIDgyODY0MgotCi0KLVIIUkUIRUMIQ08IT1YIVkUIRVIIUkkISU4ITkcIRyBECERBCEFUCFRBCEEgRghGUghSTwhPTQhNIEQIREEIQU0ITUEIQUcIR0UIRUQIRCBGCEZJCElMCExFCEVTCFMKLSAgICAgICBfCGJfCHpfCGlfCHBfCDIgY29tcHJlc3NlcyBmaWxlcyBpbiBibG9ja3MsIHVzdWFsbHkgOTAwa2J5dGVzICBsb25nLgotICAgICAgIEVhY2ggYmxvY2sgaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5LiAgSWYgYSBtZWRpYSBvciB0cmFuc8KtCi0gICAgICAgbWlzc2lvbiBlcnJvciBjYXVzZXMgYSBtdWx0aeKAkGJsb2NrICAuYnoyICBmaWxlICB0byAgYmVjb21lCi0gICAgICAgZGFtYWdlZCwgIGl0ICBtYXkgIGJlICBwb3NzaWJsZSAgdG8gIHJlY292ZXIgZGF0YSBmcm9tIHRoZQotICAgICAgIHVuZGFtYWdlZCBibG9ja3MgaW4gdGhlIGZpbGUuCi0KLSAgICAgICBUaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrICBpcyAgZGVsaW1pdGVkCi0gICAgICAgYnkgIGEgIDQ44oCQYml0IHBhdHRlcm4sIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGZpbmQgdGhlCi0gICAgICAgYmxvY2sgYm91bmRhcmllcyB3aXRoIHJlYXNvbmFibGUgIGNlcnRhaW50eS4gICBFYWNoICBibG9jawotICAgICAgIGFsc28gIGNhcnJpZXMgaXRzIG93biAzMuKAkGJpdCBDUkMsIHNvIGRhbWFnZWQgYmxvY2tzIGNhbiBiZQotICAgICAgIGRpc3Rpbmd1aXNoZWQgZnJvbSB1bmRhbWFnZWQgb25lcy4KLQotICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciBpcyBhICBzaW1wbGUgIHByb2dyYW0gIHdob3NlICBwdXJwb3NlICBpcyAgdG8KLSAgICAgICBzZWFyY2ggIGZvciBibG9ja3MgaW4gLmJ6MiBmaWxlcywgYW5kIHdyaXRlIGVhY2ggYmxvY2sgb3V0Ci0gICAgICAgaW50byBpdHMgb3duIC5iejIgZmlsZS4gIFlvdSBjYW4gdGhlbiB1c2UgXwhiXwh6XwhpXwhwXwgyIOKIknQgdG8gdGVzdAotICAgICAgIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc3VsdGluZyBmaWxlcywgYW5kIGRlY29tcHJlc3MgdGhvc2UKLSAgICAgICB3aGljaCBhcmUgdW5kYW1hZ2VkLgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgZGFtwq0KLSAgICAgICBhZ2VkICAgIGZpbGUsICAgIGFuZCAgICB3cml0ZXMgICAgYSAgICBudW1iZXIgICBvZiAgIGZpbGVzCi0gICAgICAgInJlYzAwMDAxZmlsZS5iejIiLCAgInJlYzAwMDAyZmlsZS5iejIiLCAgZXRjLCAgY29udGFpbmluZwotICAgICAgIHRoZSAgIGV4dHJhY3RlZCAgIGJsb2Nrcy4gICBUaGUgICBvdXRwdXQgICBmaWxlbmFtZXMgICBhcmUKLSAgICAgICBkZXNpZ25lZCAgc28gIHRoYXQgdGhlIHVzZSBvZiB3aWxkY2FyZHMgaW4gc3Vic2VxdWVudCBwcm/CrQotICAgICAgIGNlc3NpbmcgIOKAkOKAkCBmb3IgZXhhbXBsZSwgImJ6aXAyIOKAkGRjICByZWMqZmlsZS5iejIgPiByZWNvdsKtCi0gICAgICAgZXJlZF9kYXRhIiDigJDigJAgcHJvY2Vzc2VzIHRoZSBmaWxlcyBpbiB0aGUgY29ycmVjdCBvcmRlci4KLQotICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciBzaG91bGQgYmUgb2YgbW9zdCB1c2UgZGVhbGluZyB3aXRoIGxhcmdlIC5iejIKLSAgICAgICBmaWxlcywgIGFzICB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5Ci0gICAgICAgZnV0aWxlIHRvIHVzZSBpdCBvbiBkYW1hZ2VkIHNpbmdsZeKAkGJsb2NrICBmaWxlcywgIHNpbmNlICBhCi0gICAgICAgZGFtYWdlZCAgYmxvY2sgIGNhbm5vdCAgYmUgcmVjb3ZlcmVkLiAgSWYgeW91IHdpc2ggdG8gbWluwq0KLSAgICAgICBpbWlzZSBhbnkgcG90ZW50aWFsIGRhdGEgbG9zcyB0aHJvdWdoIG1lZGlhICBvciAgdHJhbnNtaXPCrQotICAgICAgIHNpb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIgY29tcHJlc3Npbmcgd2l0aCBhIHNtYWxsZXIKLSAgICAgICBibG9jayBzaXplLgotCi0KLVAIUEUIRVIIUkYIRk8IT1IIUk0ITUEIQU4ITkMIQ0UIRSBOCE5PCE9UCFRFCEVTCFMKLSAgICAgICBUaGUgc29ydGluZyBwaGFzZSBvZiBjb21wcmVzc2lvbiBnYXRoZXJzIHRvZ2V0aGVyICBzaW1pbGFyCi0gICAgICAgc3RyaW5ncyAgaW4gIHRoZSAgZmlsZS4gIEJlY2F1c2Ugb2YgdGhpcywgZmlsZXMgY29udGFpbmluZwotICAgICAgIHZlcnkgbG9uZyBydW5zIG9mICByZXBlYXRlZCAgc3ltYm9scywgIGxpa2UgICJhYWJhYWJhYWJhYWIKLSAgICAgICAuLi4iICAgKHJlcGVhdGVkICBzZXZlcmFsIGh1bmRyZWQgdGltZXMpIG1heSBjb21wcmVzcyBtb3JlCi0gICAgICAgc2xvd2x5IHRoYW4gbm9ybWFsLiAgVmVyc2lvbnMgMC45LjUgYW5kICBhYm92ZSAgZmFyZSAgbXVjaAotICAgICAgIGJldHRlciAgdGhhbiBwcmV2aW91cyB2ZXJzaW9ucyBpbiB0aGlzIHJlc3BlY3QuICBUaGUgcmF0aW8KLSAgICAgICBiZXR3ZWVuIHdvcnN04oCQY2FzZSBhbmQgYXZlcmFnZeKAkGNhc2UgY29tcHJlc3Npb24gdGltZSBpcyBpbgotICAgICAgIHRoZSAgcmVnaW9uICBvZiAgMTA6MS4gIEZvciBwcmV2aW91cyB2ZXJzaW9ucywgdGhpcyBmaWd1cmUKLSAgICAgICB3YXMgbW9yZSBsaWtlIDEwMDoxLiAgWW91IGNhbiB1c2UgdGhlIOKIknZ2dnYgb3B0aW9uIHRvIG1vbsKtCi0gICAgICAgaXRvciBwcm9ncmVzcyBpbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LgotCi0gICAgICAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyB1bmFmZmVjdGVkIGJ5IHRoZXNlIHBoZW5vbWVuYS4KLQotICAgICAgIF8IYl8Iel8IaV8IcF8IMiAgdXN1YWxseSAgYWxsb2NhdGVzICBzZXZlcmFsICBtZWdhYnl0ZXMgb2YgbWVtb3J5IHRvCi0gICAgICAgb3BlcmF0ZSBpbiwgYW5kIHRoZW4gY2hhcmdlcyBhbGwgb3ZlciBpdCBpbiBhIGZhaXJseSAgcmFuwq0KLSAgICAgICBkb20gIGZhc2hpb24uICAgVGhpcyBtZWFucyB0aGF0IHBlcmZvcm1hbmNlLCBib3RoIGZvciBjb23CrQotICAgICAgIHByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBpcyBsYXJnZWx5IGRldGVybWluZWQgIGJ5ICB0aGUKLSAgICAgICBzcGVlZCAgYXQgIHdoaWNoICB5b3VyICBtYWNoaW5lICBjYW4gc2VydmljZSBjYWNoZSBtaXNzZXMuCi0gICAgICAgQmVjYXVzZSBvZiB0aGlzLCBzbWFsbCBjaGFuZ2VzIHRvIHRoZSBjb2RlIHRvICByZWR1Y2UgIHRoZQotICAgICAgIG1pc3MgIHJhdGUgIGhhdmUgIGJlZW4gb2JzZXJ2ZWQgdG8gZ2l2ZSBkaXNwcm9wb3J0aW9uYXRlbHkKLSAgICAgICBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUgXwhiXwh6XwhpXwhwXwgyIHdpbGwgcGVywq0KLSAgICAgICBmb3JtIGJlc3Qgb24gbWFjaGluZXMgd2l0aCB2ZXJ5IGxhcmdlIGNhY2hlcy4KLQotCi1DCENBCEFWCFZFCEVBCEFUCFRTCFMKLSAgICAgICBJL08gIGVycm9yICBtZXNzYWdlcyAgYXJlIG5vdCBhcyBoZWxwZnVsIGFzIHRoZXkgY291bGQgYmUuCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyIHRyaWVzIGhhcmQgdG8gZGV0ZWN0IEkvTyBlcnJvcnMgIGFuZCAgZXhpdCAgY2xlYW5seSwKLSAgICAgICBidXQgIHRoZSAgZGV0YWlscyAgb2YgIHdoYXQgIHRoZSBwcm9ibGVtIGlzIHNvbWV0aW1lcyBzZWVtCi0gICAgICAgcmF0aGVyIG1pc2xlYWRpbmcuCi0KLSAgICAgICBUaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gMS4wLjQgb2YgXwhiXwh6XwhpXwhwXwgyXwguICBDb23CrQotICAgICAgIHByZXNzZWQgIGRhdGEgY3JlYXRlZCBieSB0aGlzIHZlcnNpb24gaXMgZW50aXJlbHkgZm9yd2FyZHMKLSAgICAgICBhbmQgIGJhY2t3YXJkcyAgY29tcGF0aWJsZSAgd2l0aCAgIHRoZSAgIHByZXZpb3VzICAgcHVibGljCi0gICAgICAgcmVsZWFzZXMsICB2ZXJzaW9ucyAgMC4xcGwyLCAgMC45LjAsICAwLjkuNSwgMS4wLjAsIDEuMC4xLCAKLSAgICAgICAxLjAuMiBhbmQgMS4wLjMsIGJ1dCB3aXRoIHRoZSAgZm9sbG93aW5nICBleGNlcHRpb246IDAuOS4wCi0gICAgICAgYW5kIGFib3ZlIGNhbiAgY29ycmVjdGx5IGRlY29tcHJlc3MgIG11bHRpcGxlIGNvbmNhdGVuYXRlZAotICAgICAgIGNvbXByZXNzZWQgZmlsZXMuICAwLjFwbDIgIGNhbm5vdCBkbyB0aGlzOyAgaXQgIHdpbGwgIHN0b3AgCi0gICAgICAgYWZ0ZXIgIGRlY29tcHJlc3NpbmcganVzdCB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgc3RyZWFtLgotCi0gICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyICB2ZXJzaW9ucyBwcmlvciB0byAxLjAuMiB1c2VkIDMy4oCQYml0IGludGVnZXJzCi0gICAgICAgdG8gcmVwcmVzZW50IGJpdCBwb3NpdGlvbnMgaW4gY29tcHJlc3NlZCAgZmlsZXMsICBzbyAgdGhleQotICAgICAgIGNvdWxkICBub3QgaGFuZGxlIGNvbXByZXNzZWQgZmlsZXMgbW9yZSB0aGFuIDUxMiBtZWdhYnl0ZXMKLSAgICAgICBsb25nLiAgVmVyc2lvbnMgMS4wLjIgYW5kIGFib3ZlIHVzZSA2NOKAkGJpdCAgaW50cyAgb24gIHNvbWUKLSAgICAgICBwbGF0Zm9ybXMgIHdoaWNoICBzdXBwb3J0IHRoZW0gKEdOVSBzdXBwb3J0ZWQgdGFyZ2V0cywgYW5kCi0gICAgICAgV2luZG93cykuICBUbyBlc3RhYmxpc2ggd2hldGhlciBvciAgbm90ICBiemlwMnJlY292ZXIgIHdhcwotICAgICAgIGJ1aWx0ICB3aXRoICBzdWNoICBhIGxpbWl0YXRpb24sIHJ1biBpdCB3aXRob3V0IGFyZ3VtZW50cy4KLSAgICAgICBJbiBhbnkgZXZlbnQgeW91IGNhbiBidWlsZCB5b3Vyc2VsZiBhbiAgdW5saW1pdGVkICB2ZXJzaW9uCi0gICAgICAgaWYgIHlvdSAgY2FuICByZWNvbXBpbGUgIGl0ICB3aXRoIE1heWJlVUludDY0IHNldCB0byBiZSBhbgotICAgICAgIHVuc2lnbmVkIDY04oCQYml0IGludGVnZXIuCi0KLQotCi0KLUEIQVUIVVQIVEgISE8IT1IIUgotICAgICAgIEp1bGlhbiBTZXdhcmQsIGpzZXdhcmRiemlwLm9yZy4KLQotICAgICAgIGh0dHA6Ly93d3cuYnppcC5vcmcKLQotICAgICAgIFRoZSBpZGVhcyBlbWJvZGllZCBpbiBfCGJfCHpfCGlfCHBfCDIgYXJlIGR1ZSB0byAoYXQgbGVhc3QpIHRoZSBmb2zCrQotICAgICAgIGxvd2luZyAgcGVvcGxlOiBNaWNoYWVsIEJ1cnJvd3MgYW5kIERhdmlkIFdoZWVsZXIgKGZvciB0aGUKLSAgICAgICBibG9jayBzb3J0aW5nIHRyYW5zZm9ybWF0aW9uKSwgRGF2aWQgV2hlZWxlciAgKGFnYWluLCAgZm9yCi0gICAgICAgdGhlIEh1ZmZtYW4gY29kZXIpLCBQZXRlciBGZW53aWNrIChmb3IgdGhlIHN0cnVjdHVyZWQgY29kwq0KLSAgICAgICBpbmcgbW9kZWwgaW4gdGhlIG9yaWdpbmFsIF8IYl8Iel8IaV8IcF8ILCBhbmQgbWFueSByZWZpbmVtZW50cyksIGFuZAotICAgICAgIEFsaXN0YWlyICBNb2ZmYXQsICBSYWRmb3JkICBOZWFsICBhbmQgIElhbiBXaXR0ZW4gKGZvciB0aGUKLSAgICAgICBhcml0aG1ldGljICBjb2RlciAgaW4gIHRoZSAgb3JpZ2luYWwgIF8IYl8Iel8IaV8IcF8IKV8ILiAgIEkgIGFtICBtdWNoCi0gICAgICAgaW5kZWJ0ZWQgZm9yIHRoZWlyIGhlbHAsIHN1cHBvcnQgYW5kIGFkdmljZS4gIFNlZSB0aGUgbWFuwq0KLSAgICAgICB1YWwgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gZm9yIHBvaW50ZXJzIHRvIHNvdXJjZXMgIG9mCi0gICAgICAgZG9jdW1lbnRhdGlvbi4gIENocmlzdGlhbiB2b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vawotICAgICAgIGZvciBmYXN0ZXIgc29ydGluZyBhbGdvcml0aG1zLCBzbyBhcyB0byBzcGVlZCB1cCAgY29tcHJlc8KtCi0gICAgICAgc2lvbi4gIEJlbGEgTHVia2luIGVuY291cmFnZWQgbWUgdG8gaW1wcm92ZSB0aGUgd29yc3TigJBjYXNlCi0gICAgICAgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuICBEb25uYSBSb2JpbnNvbiBYTUxpc2VkIHRoZSBkb2N1wq0KLSAgICAgICBtZW50YXRpb24uICAgVGhlIGJ6KiBzY3JpcHRzIGFyZSBkZXJpdmVkIGZyb20gdGhvc2Ugb2YgR05VCi0gICAgICAgZ3ppcC4gIE1hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkICB3aXRoICBwb3J0YWJpbGl0eQotICAgICAgIHByb2JsZW1zLCAgbGVudCAgbWFjaGluZXMsICBnYXZlIGFkdmljZSBhbmQgd2VyZSBnZW5lcmFsbHkKLSAgICAgICBoZWxwZnVsLgotCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIoMSkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLmMgYi9VdGlsaXRpZXMvY21iemlwMi9iemlwMi5jCmluZGV4IDg4ZTVmMDkuLmQ5NWQyODAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYnppcDIuYwpAQCAtNyw4ICs3LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KQEAgLTEyOCwxMiArMTI4LDEyIEBACiAjaWYgQlpfTENDV0lOMzIKICMgICBpbmNsdWRlIDxpby5oPgogIyAgIGluY2x1ZGUgPGZjbnRsLmg+Ci0jICAgaW5jbHVkZSA8c3lzXHN0YXQuaD4KKyMgICBpbmNsdWRlIDxzeXMvc3RhdC5oPgogCiAjICAgZGVmaW5lIE5PUkVUVVJOICAgICAgIC8qKi8KICMgICBkZWZpbmUgUEFUSF9TRVAgICAgICAgJ1xcJwotIyAgIGRlZmluZSBNWV9MU1RBVCAgICAgICBfc3RhdAotIyAgIGRlZmluZSBNWV9TVEFUICAgICAgICBfc3RhdAorIyAgIGRlZmluZSBNWV9MU1RBVCAgICAgICBfc3RhdGk2NAorIyAgIGRlZmluZSBNWV9TVEFUICAgICAgICBfc3RhdGk2NAogIyAgIGRlZmluZSBNWV9TX0lTUkVHKHgpICAoKHgpICYgX1NfSUZSRUcpCiAjICAgZGVmaW5lIE1ZX1NfSVNESVIoeCkgICgoeCkgJiBfU19JRkRJUikKIApAQCAtMzgwLDI3ICszODAsMjcgQEAKIAogICAgaWYgKHZlcmJvc2l0eSA+PSAxKSB7CiAgICAgICBpZiAobmJ5dGVzX2luX2xvMzIgPT0gMCAmJiBuYnl0ZXNfaW5faGkzMiA9PSAwKSB7Ci0gICAgIGZwcmludGYgKCBzdGRlcnIsICIgbm8gZGF0YSBjb21wcmVzc2VkLlxuIik7CisJIGZwcmludGYgKCBzdGRlcnIsICIgbm8gZGF0YSBjb21wcmVzc2VkLlxuIik7CiAgICAgICB9IGVsc2UgewotICAgICBDaGFyICAgYnVmX25pblszMl0sIGJ1Zl9ub3V0WzMyXTsKLSAgICAgVUludDY0IG5ieXRlc19pbiwgICBuYnl0ZXNfb3V0OwotICAgICBkb3VibGUgbmJ5dGVzX2luX2QsIG5ieXRlc19vdXRfZDsKLSAgICAgdUludDY0X2Zyb21fVUludDMycyAoICZuYnl0ZXNfaW4sIAotICAgICAgICAgICAgICAgICAgIG5ieXRlc19pbl9sbzMyLCBuYnl0ZXNfaW5faGkzMiApOwotICAgICB1SW50NjRfZnJvbV9VSW50MzJzICggJm5ieXRlc19vdXQsIAotICAgICAgICAgICAgICAgICAgIG5ieXRlc19vdXRfbG8zMiwgbmJ5dGVzX291dF9oaTMyICk7Ci0gICAgIG5ieXRlc19pbl9kICA9IHVJbnQ2NF90b19kb3VibGUgKCAmbmJ5dGVzX2luICk7Ci0gICAgIG5ieXRlc19vdXRfZCA9IHVJbnQ2NF90b19kb3VibGUgKCAmbmJ5dGVzX291dCApOwotICAgICB1SW50NjRfdG9Bc2NpaSAoIGJ1Zl9uaW4sICZuYnl0ZXNfaW4gKTsKLSAgICAgdUludDY0X3RvQXNjaWkgKCBidWZfbm91dCwgJm5ieXRlc19vdXQgKTsKLSAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiU2LjNmOjEsICU2LjNmIGJpdHMvYnl0ZSwgIgotICAgICAgICAgICAiJTUuMmYlJSBzYXZlZCwgJXMgaW4sICVzIG91dC5cbiIsCi0gICAgICAgICAgIG5ieXRlc19pbl9kIC8gbmJ5dGVzX291dF9kLAotICAgICAgICAgICAoOC4wICogbmJ5dGVzX291dF9kKSAvIG5ieXRlc19pbl9kLAotICAgICAgICAgICAxMDAuMCAqICgxLjAgLSBuYnl0ZXNfb3V0X2QgLyBuYnl0ZXNfaW5fZCksCi0gICAgICAgICAgIGJ1Zl9uaW4sCi0gICAgICAgICAgIGJ1Zl9ub3V0Ci0gICAgICAgICApOworCSBDaGFyICAgYnVmX25pblszMl0sIGJ1Zl9ub3V0WzMyXTsKKwkgVUludDY0IG5ieXRlc19pbiwgICBuYnl0ZXNfb3V0OworCSBkb3VibGUgbmJ5dGVzX2luX2QsIG5ieXRlc19vdXRfZDsKKwkgdUludDY0X2Zyb21fVUludDMycyAoICZuYnl0ZXNfaW4sIAorCQkJICAgICAgIG5ieXRlc19pbl9sbzMyLCBuYnl0ZXNfaW5faGkzMiApOworCSB1SW50NjRfZnJvbV9VSW50MzJzICggJm5ieXRlc19vdXQsIAorCQkJICAgICAgIG5ieXRlc19vdXRfbG8zMiwgbmJ5dGVzX291dF9oaTMyICk7CisJIG5ieXRlc19pbl9kICA9IHVJbnQ2NF90b19kb3VibGUgKCAmbmJ5dGVzX2luICk7CisJIG5ieXRlc19vdXRfZCA9IHVJbnQ2NF90b19kb3VibGUgKCAmbmJ5dGVzX291dCApOworCSB1SW50NjRfdG9Bc2NpaSAoIGJ1Zl9uaW4sICZuYnl0ZXNfaW4gKTsKKwkgdUludDY0X3RvQXNjaWkgKCBidWZfbm91dCwgJm5ieXRlc19vdXQgKTsKKwkgZnByaW50ZiAoIHN0ZGVyciwgIiU2LjNmOjEsICU2LjNmIGJpdHMvYnl0ZSwgIgorCQkgICAiJTUuMmYlJSBzYXZlZCwgJXMgaW4sICVzIG91dC5cbiIsCisJCSAgIG5ieXRlc19pbl9kIC8gbmJ5dGVzX291dF9kLAorCQkgICAoOC4wICogbmJ5dGVzX291dF9kKSAvIG5ieXRlc19pbl9kLAorCQkgICAxMDAuMCAqICgxLjAgLSBuYnl0ZXNfb3V0X2QgLyBuYnl0ZXNfaW5fZCksCisJCSAgIGJ1Zl9uaW4sCisJCSAgIGJ1Zl9ub3V0CisJCSApOwogICAgICAgfQogICAgfQogCkBAIC01MDUsMTEgKzUwNSwxMSBAQAogICAgaWYgKGZvcmNlT3ZlcndyaXRlKSB7CiAgICAgICByZXdpbmQoelN0cmVhbSk7CiAgICAgICB3aGlsZSAoVHJ1ZSkgewotICAgICAgICAgaWYgKG15ZmVvZih6U3RyZWFtKSkgYnJlYWs7Ci0gICAgICAgICBucmVhZCA9IGZyZWFkICggb2J1Ziwgc2l6ZW9mKFVDaGFyKSwgNTAwMCwgelN0cmVhbSApOwotICAgICAgICAgaWYgKGZlcnJvcih6U3RyZWFtKSkgZ290byBlcnJoYW5kbGVyX2lvOwotICAgICAgICAgaWYgKG5yZWFkID4gMCkgZndyaXRlICggb2J1Ziwgc2l6ZW9mKFVDaGFyKSwgbnJlYWQsIHN0cmVhbSApOwotICAgICAgICAgaWYgKGZlcnJvcihzdHJlYW0pKSBnb3RvIGVycmhhbmRsZXJfaW87CisgICAgICAJIGlmIChteWZlb2YoelN0cmVhbSkpIGJyZWFrOworICAgICAgCSBucmVhZCA9IGZyZWFkICggb2J1Ziwgc2l6ZW9mKFVDaGFyKSwgNTAwMCwgelN0cmVhbSApOworICAgICAgCSBpZiAoZmVycm9yKHpTdHJlYW0pKSBnb3RvIGVycmhhbmRsZXJfaW87CisgICAgICAJIGlmIChucmVhZCA+IDApIGZ3cml0ZSAoIG9idWYsIHNpemVvZihVQ2hhciksIG5yZWFkLCBzdHJlYW0gKTsKKyAgICAgIAkgaWYgKGZlcnJvcihzdHJlYW0pKSBnb3RvIGVycmhhbmRsZXJfaW87CiAgICAgICB9CiAgICAgICBnb3RvIGNsb3Nlb2s7CiAgICB9CkBAIC01NTQsNyArNTU0LDcgQEAKIEJvb2wgdGVzdFN0cmVhbSAoIEZJTEUgKnpTdHJlYW0gKQogewogICAgQlpGSUxFKiBiemYgPSBOVUxMOwotICAgSW50MzIgICBiemVyciwgYnplcnJfZHVtbXksIHJldCwgbnJlYWQsIHN0cmVhbU5vLCBpOworICAgSW50MzIgICBiemVyciwgYnplcnJfZHVtbXksIHJldCwgc3RyZWFtTm8sIGk7CiAgICBVQ2hhciAgIG9idWZbNTAwMF07CiAgICBVQ2hhciAgIHVudXNlZFtCWl9NQVhfVU5VU0VEXTsKICAgIEludDMyICAgblVudXNlZDsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogICAgICAgc3RyZWFtTm8rKzsKIAogICAgICAgd2hpbGUgKGJ6ZXJyID09IEJaX09LKSB7Ci0gICAgICAgICBucmVhZCA9IEJaMl9ielJlYWQgKCAmYnplcnIsIGJ6Ziwgb2J1ZiwgNTAwMCApOworICAgICAgICAgQloyX2J6UmVhZCAoICZiemVyciwgYnpmLCBvYnVmLCA1MDAwICk7CiAgICAgICAgICBpZiAoYnplcnIgPT0gQlpfREFUQV9FUlJPUl9NQUdJQykgZ290byBlcnJoYW5kbGVyOwogICAgICAgfQogICAgICAgaWYgKGJ6ZXJyICE9IEJaX1NUUkVBTV9FTkQpIGdvdG8gZXJyaGFuZGxlcjsKQEAgLTc0OCw4ICs3NDgsOCBAQAogICAgZnByaW50ZiAoIHN0ZGVyciwKICAgICAgICAgICAgICAiXG4lczogUEFOSUMgLS0gaW50ZXJuYWwgY29uc2lzdGVuY3kgZXJyb3I6XG4iCiAgICAgICAgICAgICAgIlx0JXNcbiIKLSAgICAgICAgICAgICAiXHRUaGlzIGlzIGEgQlVHLiAgUGxlYXNlIHJlcG9ydCBpdCB0byBtZSBhdDpcbiIKLSAgICAgICAgICAgICAiXHRqc2V3YXJkQGJ6aXAub3JnXG4iLAorICAgICAgICAgICAgICJcdFRoaXMgaXMgYSBCVUcuICBQbGVhc2UgcmVwb3J0IGl0IHRvOlxuIgorICAgICAgICAgICAgICJcdGJ6aXAyLWRldmVsQHNvdXJjZXdhcmUub3JnXG4iLAogICAgICAgICAgICAgIHByb2dOYW1lLCBzICk7CiAgICBzaG93RmlsZU5hbWVzKCk7CiAgICBjbGVhblVwQW5kRmFpbCggMyApOwpAQCAtNzc1LDkgKzc3NSw5IEBACiB7CiAgIGlmIChub2lzeSkgewogICAgIGZwcmludGYgKCBzdGRlcnIsCi0gICAgICAgICAgIlxuJXM6IENvbXByZXNzZWQgZmlsZSBlbmRzIHVuZXhwZWN0ZWRseTtcblx0IgotICAgICAgICAgICJwZXJoYXBzIGl0IGlzIGNvcnJ1cHRlZD8gICpQb3NzaWJsZSogcmVhc29uIGZvbGxvd3MuXG4iLAotICAgICAgICAgIHByb2dOYW1lICk7CisJICAgICAgIlxuJXM6IENvbXByZXNzZWQgZmlsZSBlbmRzIHVuZXhwZWN0ZWRseTtcblx0IgorCSAgICAgICJwZXJoYXBzIGl0IGlzIGNvcnJ1cHRlZD8gICpQb3NzaWJsZSogcmVhc29uIGZvbGxvd3MuXG4iLAorCSAgICAgIHByb2dOYW1lICk7CiAgICAgcGVycm9yICggcHJvZ05hbWUgKTsKICAgICBzaG93RmlsZU5hbWVzKCk7CiAgICAgY2FkdmlzZSgpOwpAQCAtODI5LDcgKzgyOSw3IEBACiAgICAgICAiICAgVGhlIHVzZXIncyBtYW51YWwsIFNlY3Rpb24gNC4zLCBoYXMgbW9yZSBpbmZvIG9uICgxKSBhbmQgKDIpLlxuIgogICAgICAgIiAgIFxuIgogICAgICAgIiAgIElmIHlvdSBzdXNwZWN0IHRoaXMgaXMgYSBidWcgaW4gYnppcDIsIG9yIGFyZSB1bnN1cmUgYWJvdXQgKDEpXG4iCi0gICAgICAiICAgb3IgKDIpLCBmZWVsIGZyZWUgdG8gcmVwb3J0IGl0IHRvIG1lIGF0OiBqc2V3YXJkQGJ6aXAub3JnLlxuIgorICAgICAgIiAgIG9yICgyKSwgZmVlbCBmcmVlIHRvIHJlcG9ydCBpdCB0bzogYnppcDItZGV2ZWxAc291cmNld2FyZS5vcmcuXG4iCiAgICAgICAiICAgU2VjdGlvbiA0LjMgb2YgdGhlIHVzZXIncyBtYW51YWwgZGVzY3JpYmVzIHRoZSBpbmZvIGEgdXNlZnVsXG4iCiAgICAgICAiICAgYnVnIHJlcG9ydCBzaG91bGQgaGF2ZS4gIElmIHRoZSBtYW51YWwgaXMgYXZhaWxhYmxlIG9uIHlvdXJcbiIKICAgICAgICIgICBzeXN0ZW0sIHBsZWFzZSB0cnkgYW5kIHJlYWQgaXQgYmVmb3JlIG1haWxpbmcgbWUuICBJZiB5b3UgZG9uJ3RcbiIKQEAgLTg1Miw3ICs4NTIsNyBAQAogICAgICAgIiAgIFRoZSB1c2VyJ3MgbWFudWFsLCBTZWN0aW9uIDQuMywgaGFzIG1vcmUgaW5mbyBvbiAoMikgYW5kICgzKS5cbiIKICAgICAgICIgICBcbiIKICAgICAgICIgICBJZiB5b3Ugc3VzcGVjdCB0aGlzIGlzIGEgYnVnIGluIGJ6aXAyLCBvciBhcmUgdW5zdXJlIGFib3V0ICgyKVxuIgotICAgICAgIiAgIG9yICgzKSwgZmVlbCBmcmVlIHRvIHJlcG9ydCBpdCB0byBtZSBhdDoganNld2FyZEBiemlwLm9yZy5cbiIKKyAgICAgICIgICBvciAoMyksIGZlZWwgZnJlZSB0byByZXBvcnQgaXQgdG86IGJ6aXAyLWRldmVsQHNvdXJjZXdhcmUub3JnLlxuIgogICAgICAgIiAgIFNlY3Rpb24gNC4zIG9mIHRoZSB1c2VyJ3MgbWFudWFsIGRlc2NyaWJlcyB0aGUgaW5mbyBhIHVzZWZ1bFxuIgogICAgICAgIiAgIGJ1ZyByZXBvcnQgc2hvdWxkIGhhdmUuICBJZiB0aGUgbWFudWFsIGlzIGF2YWlsYWJsZSBvbiB5b3VyXG4iCiAgICAgICAiICAgc3lzdGVtLCBwbGVhc2UgdHJ5IGFuZCByZWFkIGl0IGJlZm9yZSBtYWlsaW5nIG1lLiAgSWYgeW91IGRvbid0XG4iCkBAIC0xMjAwLDEyICsxMjAwLDEyIEBACiAgICB9CiAgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICYmIGZpbGVFeGlzdHMgKCBvdXROYW1lICkgKSB7CiAgICAgICBpZiAoZm9yY2VPdmVyd3JpdGUpIHsKLSAgICAgcmVtb3ZlKG91dE5hbWUpOworCSByZW1vdmUob3V0TmFtZSk7CiAgICAgICB9IGVsc2UgewotICAgICBmcHJpbnRmICggc3RkZXJyLCAiJXM6IE91dHB1dCBmaWxlICVzIGFscmVhZHkgZXhpc3RzLlxuIiwKLSAgICAgICAgICAgcHJvZ05hbWUsIG91dE5hbWUgKTsKLSAgICAgc2V0RXhpdCgxKTsKLSAgICAgcmV0dXJuOworCSBmcHJpbnRmICggc3RkZXJyLCAiJXM6IE91dHB1dCBmaWxlICVzIGFscmVhZHkgZXhpc3RzLlxuIiwKKwkJICAgcHJvZ05hbWUsIG91dE5hbWUgKTsKKwkgc2V0RXhpdCgxKTsKKwkgcmV0dXJuOwogICAgICAgfQogICAgfQogICAgaWYgKCBzcmNNb2RlID09IFNNX0YyRiAmJiAhZm9yY2VPdmVyd3JpdGUgJiYKQEAgLTEzODYsNyArMTM4Niw3IEBACiAgICB9ICAgCiAgICBpZiAoIHNyY01vZGUgPT0gU01fRjJGICYmIGZpbGVFeGlzdHMgKCBvdXROYW1lICkgKSB7CiAgICAgICBpZiAoZm9yY2VPdmVyd3JpdGUpIHsKLSAgICByZW1vdmUob3V0TmFtZSk7CisJcmVtb3ZlKG91dE5hbWUpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiVzOiBPdXRwdXQgZmlsZSAlcyBhbHJlYWR5IGV4aXN0cy5cbiIsCiAgICAgICAgICAgICAgICAgICBwcm9nTmFtZSwgb3V0TmFtZSApOwpAQCAtMTYwNSwxMSArMTYwNSwxMSBAQAogICAgICJiemlwMiwgYSBibG9jay1zb3J0aW5nIGZpbGUgY29tcHJlc3Nvci4gICIKICAgICAiVmVyc2lvbiAlcy5cbiIKICAgICAiICAgXG4iCi0gICAgIiAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IGJ5IEp1bGlhbiBTZXdhcmQuXG4iCisgICAgIiAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IGJ5IEp1bGlhbiBTZXdhcmQuXG4iCiAgICAgIiAgIFxuIgogICAgICIgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuIgogICAgICIgICBpdCB1bmRlciB0aGUgdGVybXMgc2V0IG91dCBpbiB0aGUgTElDRU5TRSBmaWxlLCB3aGljaCBpcyBpbmNsdWRlZFxuIgotICAgICIgICBpbiB0aGUgYnppcDItMS4wLjUgc291cmNlIGRpc3RyaWJ1dGlvbi5cbiIKKyAgICAiICAgaW4gdGhlIGJ6aXAyIHNvdXJjZSBkaXN0cmlidXRpb24uXG4iCiAgICAgIiAgIFxuIgogICAgICIgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiIKICAgICAiICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiIKQEAgLTE5OTcsMTggKzE5OTcsMjAgQEAKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWNvZGUgPSBUcnVlOwogICAgICAgICAgZm9yIChhYSA9IGFyZ0xpc3Q7IGFhICE9IE5VTEw7IGFhID0gYWEtPmxpbmspIHsKLSAgICAgICAgaWYgKElTRkxBRygiLS0iKSkgeyBkZWNvZGUgPSBGYWxzZTsgY29udGludWU7IH0KKwkgICAgaWYgKElTRkxBRygiLS0iKSkgeyBkZWNvZGUgPSBGYWxzZTsgY29udGludWU7IH0KICAgICAgICAgICAgIGlmIChhYS0+bmFtZVswXSA9PSAnLScgJiYgZGVjb2RlKSBjb250aW51ZTsKICAgICAgICAgICAgIG51bUZpbGVzUHJvY2Vzc2VkKys7CiAgICAgICAgICAgICB0ZXN0ZiAoIGFhLT5uYW1lICk7Ci0gICAgIH0KKwkgfQogICAgICAgfQotICAgICAgaWYgKHRlc3RGYWlsc0V4aXN0ICYmIG5vaXN5KSB7Ci0gICAgICAgICBmcHJpbnRmICggc3RkZXJyLAotICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICJZb3UgY2FuIHVzZSB0aGUgYGJ6aXAycmVjb3ZlcicgcHJvZ3JhbSB0byBhdHRlbXB0IHRvIHJlY292ZXJcbiIKLSAgICAgICAgICAgImRhdGEgZnJvbSB1bmRhbWFnZWQgc2VjdGlvbnMgb2YgY29ycnVwdGVkIGZpbGVzLlxuXG4iCi0gICAgICAgICApOworICAgICAgaWYgKHRlc3RGYWlsc0V4aXN0KSB7CisJIGlmIChub2lzeSkgeworICAgICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwKKyAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICJZb3UgY2FuIHVzZSB0aGUgYGJ6aXAycmVjb3ZlcicgcHJvZ3JhbSB0byBhdHRlbXB0IHRvIHJlY292ZXJcbiIKKyAgICAgICAgICAgICAgICJkYXRhIGZyb20gdW5kYW1hZ2VkIHNlY3Rpb25zIG9mIGNvcnJ1cHRlZCBmaWxlcy5cblxuIgorICAgICAgICAgICAgKTsKKwkgfQogICAgICAgICAgc2V0RXhpdCgyKTsKICAgICAgICAgIGV4aXQoZXhpdFZhbHVlKTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLnR4dCBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZiOWM3NC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemlwMi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzOTEgKzAsMCBAQAotCi1OQU1FCi0gICAgICAgYnppcDIsIGJ1bnppcDIgLSBhIGJsb2NrLXNvcnRpbmcgZmlsZSBjb21wcmVzc29yLCB2MS4wLjQKLSAgICAgICBiemNhdCAtIGRlY29tcHJlc3NlcyBmaWxlcyB0byBzdGRvdXQKLSAgICAgICBiemlwMnJlY292ZXIgLSByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlcwotCi0KLVNZTk9QU0lTCi0gICAgICAgYnppcDIgWyAtY2Rma3FzdHZ6VkwxMjM0NTY3ODkgXSBbIGZpbGVuYW1lcyAuLi4gIF0KLSAgICAgICBidW56aXAyIFsgLWZrdnNWTCBdIFsgZmlsZW5hbWVzIC4uLiAgXQotICAgICAgIGJ6Y2F0IFsgLXMgXSBbIGZpbGVuYW1lcyAuLi4gIF0KLSAgICAgICBiemlwMnJlY292ZXIgZmlsZW5hbWUKLQotCi1ERVNDUklQVElPTgotICAgICAgIGJ6aXAyICBjb21wcmVzc2VzICBmaWxlcyAgdXNpbmcgIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2sKLSAgICAgICBzb3J0aW5nIHRleHQgY29tcHJlc3Npb24gYWxnb3JpdGhtLCAgYW5kICBIdWZmbWFuICBjb2RpbmcuCi0gICAgICAgQ29tcHJlc3Npb24gIGlzICBnZW5lcmFsbHkgIGNvbnNpZGVyYWJseSAgYmV0dGVyIHRoYW4gdGhhdAotICAgICAgIGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsIExaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywKLSAgICAgICBhbmQgIGFwcHJvYWNoZXMgIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgUFBNIGZhbWlseSBvZiBzdGEtCi0gICAgICAgdGlzdGljYWwgY29tcHJlc3NvcnMuCi0KLSAgICAgICBUaGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGRlbGliZXJhdGVseSB2ZXJ5IHNpbWlsYXIgIHRvCi0gICAgICAgdGhvc2Ugb2YgR05VIGd6aXAsIGJ1dCB0aGV5IGFyZSBub3QgaWRlbnRpY2FsLgotCi0gICAgICAgYnppcDIgIGV4cGVjdHMgIGEgbGlzdCBvZiBmaWxlIG5hbWVzIHRvIGFjY29tcGFueSB0aGUgY29tLQotICAgICAgIG1hbmQtbGluZSBmbGFncy4gIEVhY2ggZmlsZSBpcyByZXBsYWNlZCAgYnkgIGEgIGNvbXByZXNzZWQKLSAgICAgICB2ZXJzaW9uICBvZiAgaXRzZWxmLCAgd2l0aCAgdGhlICBuYW1lICJvcmlnaW5hbF9uYW1lLmJ6MiIuCi0gICAgICAgRWFjaCBjb21wcmVzc2VkIGZpbGUgaGFzIHRoZSBzYW1lIG1vZGlmaWNhdGlvbiBkYXRlLCAgcGVyLQotICAgICAgIG1pc3Npb25zLCBhbmQsIHdoZW4gcG9zc2libGUsIG93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZC0KLSAgICAgICBpbmcgb3JpZ2luYWwsIHNvIHRoYXQgdGhlc2UgcHJvcGVydGllcyAgY2FuICBiZSAgY29ycmVjdGx5Ci0gICAgICAgcmVzdG9yZWQgIGF0ICBkZWNvbXByZXNzaW9uICB0aW1lLiAgIEZpbGUgbmFtZSBoYW5kbGluZyBpcwotICAgICAgIG5haXZlIGluIHRoZSBzZW5zZSB0aGF0IHRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgcHJlc2Vydi0KLSAgICAgICBpbmcgIG9yaWdpbmFsIGZpbGUgbmFtZXMsIHBlcm1pc3Npb25zLCBvd25lcnNoaXBzIG9yIGRhdGVzCi0gICAgICAgaW4gZmlsZXN5c3RlbXMgd2hpY2ggbGFjayB0aGVzZSBjb25jZXB0cywgb3IgaGF2ZSAgc2VyaW91cwotICAgICAgIGZpbGUgbmFtZSBsZW5ndGggcmVzdHJpY3Rpb25zLCBzdWNoIGFzIE1TLURPUy4KLQotICAgICAgIGJ6aXAyICBhbmQgIGJ1bnppcDIgd2lsbCBieSBkZWZhdWx0IG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcKLSAgICAgICBmaWxlcy4gIElmIHlvdSB3YW50IHRoaXMgdG8gaGFwcGVuLCBzcGVjaWZ5IHRoZSAtZiBmbGFnLgotCi0gICAgICAgSWYgbm8gZmlsZSBuYW1lcyAgYXJlICBzcGVjaWZpZWQsICBiemlwMiAgY29tcHJlc3NlcyAgZnJvbQotICAgICAgIHN0YW5kYXJkICBpbnB1dCAgdG8gIHN0YW5kYXJkIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgYnppcDIKLSAgICAgICB3aWxsIGRlY2xpbmUgdG8gd3JpdGUgY29tcHJlc3NlZCBvdXRwdXQgdG8gYSB0ZXJtaW5hbCwgIGFzCi0gICAgICAgdGhpcyAgd291bGQgIGJlICBlbnRpcmVseSAgaW5jb21wcmVoZW5zaWJsZSAgYW5kIHRoZXJlZm9yZQotICAgICAgIHBvaW50bGVzcy4KLQotICAgICAgIGJ1bnppcDIgKG9yIGJ6aXAyIC1kKSBkZWNvbXByZXNzZXMgIGFsbCAgc3BlY2lmaWVkICBmaWxlcy4KLSAgICAgICBGaWxlcyB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGJ5IGJ6aXAyIHdpbGwgYmUgZGV0ZWN0ZWQgYW5kCi0gICAgICAgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpc3N1ZWQuICBiemlwMiAgYXR0ZW1wdHMgIHRvICBndWVzcwotICAgICAgIHRoZSAgZmlsZW5hbWUgIGZvciAgdGhlIGRlY29tcHJlc3NlZCBmaWxlIGZyb20gdGhhdCBvZiB0aGUKLSAgICAgICBjb21wcmVzc2VkIGZpbGUgYXMgZm9sbG93czoKLQotICAgICAgICAgICAgICBmaWxlbmFtZS5iejIgICAgYmVjb21lcyAgIGZpbGVuYW1lCi0gICAgICAgICAgICAgIGZpbGVuYW1lLmJ6ICAgICBiZWNvbWVzICAgZmlsZW5hbWUKLSAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6MiAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6ICAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKLSAgICAgICAgICAgICAgYW55b3RoZXJuYW1lICAgIGJlY29tZXMgICBhbnlvdGhlcm5hbWUub3V0Ci0KLSAgICAgICBJZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsCi0gICAgICAgLmJ6MiwgIC5ieiwgIC50YnoyIG9yIC50YnosIGJ6aXAyIGNvbXBsYWlucyB0aGF0IGl0IGNhbm5vdAotICAgICAgIGd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwKLSAgICAgICBuYW1lIHdpdGggLm91dCBhcHBlbmRlZC4KLQotICAgICAgIEFzICB3aXRoIGNvbXByZXNzaW9uLCBzdXBwbHlpbmcgbm8gZmlsZW5hbWVzIGNhdXNlcyBkZWNvbS0KLSAgICAgICBwcmVzc2lvbiBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHN0YW5kYXJkIG91dHB1dC4KLQotICAgICAgIGJ1bnppcDIgd2lsbCBjb3JyZWN0bHkgZGVjb21wcmVzcyBhIGZpbGUgd2hpY2ggaXMgdGhlIGNvbi0KLSAgICAgICBjYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlIGNvbXByZXNzZWQgZmlsZXMuICBUaGUgcmVzdWx0IGlzCi0gICAgICAgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkIGZpbGVzLgotICAgICAgIEludGVncml0eSB0ZXN0aW5nICgtdCkgb2YgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMgaXMKLSAgICAgICBhbHNvIHN1cHBvcnRlZC4KLQotICAgICAgIFlvdSBjYW4gYWxzbyBjb21wcmVzcyBvciBkZWNvbXByZXNzIGZpbGVzIHRvIHRoZSAgc3RhbmRhcmQKLSAgICAgICBvdXRwdXQgIGJ5IGdpdmluZyB0aGUgLWMgZmxhZy4gIE11bHRpcGxlIGZpbGVzIG1heSBiZSBjb20tCi0gICAgICAgcHJlc3NlZCBhbmQgZGVjb21wcmVzc2VkIGxpa2UgdGhpcy4gIFRoZSByZXN1bHRpbmcgb3V0cHV0cwotICAgICAgIGFyZSAgZmVkICBzZXF1ZW50aWFsbHkgdG8gc3Rkb3V0LiAgQ29tcHJlc3Npb24gb2YgbXVsdGlwbGUKLSAgICAgICBmaWxlcyBpbiB0aGlzIG1hbm5lciBnZW5lcmF0ZXMgYSBzdHJlYW0gY29udGFpbmluZyAgbXVsdGktCi0gICAgICAgcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtIGNhbiBiZQotICAgICAgIGRlY29tcHJlc3NlZCBjb3JyZWN0bHkgb25seSAgYnkgIGJ6aXAyICB2ZXJzaW9uICAwLjkuMCAgb3IKLSAgICAgICBsYXRlci4gICBFYXJsaWVyICB2ZXJzaW9ucyBvZiBiemlwMiB3aWxsIHN0b3AgYWZ0ZXIgZGVjb20tCi0gICAgICAgcHJlc3NpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KLQotICAgICAgIGJ6Y2F0IChvciBiemlwMiAtZGMpIGRlY29tcHJlc3NlcyBhbGwgc3BlY2lmaWVkICBmaWxlcyAgdG8KLSAgICAgICB0aGUgc3RhbmRhcmQgb3V0cHV0LgotCi0gICAgICAgYnppcDIgIHdpbGwgIHJlYWQgYXJndW1lbnRzIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgIEJaSVAyIGFuZCBCWklQLCBpbiAgdGhhdCAgb3JkZXIsICBhbmQgIHdpbGwgIHByb2Nlc3MgIHRoZW0KLSAgICAgICBiZWZvcmUgIGFueSAgYXJndW1lbnRzICByZWFkICBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzCi0gICAgICAgZ2l2ZXMgYSBjb252ZW5pZW50IHdheSB0byBzdXBwbHkgZGVmYXVsdCBhcmd1bWVudHMuCi0KLSAgICAgICBDb21wcmVzc2lvbiBpcyBhbHdheXMgcGVyZm9ybWVkLCBldmVuICBpZiAgdGhlICBjb21wcmVzc2VkCi0gICAgICAgZmlsZSAgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcwotICAgICAgIHRoYW4gYWJvdXQgb25lIGh1bmRyZWQgYnl0ZXMgdGVuZCB0byBnZXQgbGFyZ2VyLCBzaW5jZSB0aGUKLSAgICAgICBjb21wcmVzc2lvbiAgbWVjaGFuaXNtICBoYXMgIGEgIGNvbnN0YW50ICBvdmVyaGVhZCAgaW4gdGhlCi0gICAgICAgcmVnaW9uIG9mIDUwIGJ5dGVzLiAgUmFuZG9tIGRhdGEgKGluY2x1ZGluZyB0aGUgb3V0cHV0ICBvZgotICAgICAgIG1vc3QgIGZpbGUgIGNvbXByZXNzb3JzKSAgaXMgIGNvZGVkIGF0IGFib3V0IDguMDUgYml0cyBwZXIKLSAgICAgICBieXRlLCBnaXZpbmcgYW4gZXhwYW5zaW9uIG9mIGFyb3VuZCAwLjUlLgotCi0gICAgICAgQXMgYSBzZWxmLWNoZWNrIGZvciB5b3VyICBwcm90ZWN0aW9uLCAgYnppcDIgIHVzZXMgIDMyLWJpdAotICAgICAgIENSQ3MgIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiBhIGZpbGUKLSAgICAgICBpcyBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsLiAgVGhpcyBndWFyZHMgYWdhaW5zdCBjb3JydXAtCi0gICAgICAgdGlvbiAgb2YgIHRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCBhZ2FpbnN0IHVuZGV0ZWN0ZWQgYnVncwotICAgICAgIGluIGJ6aXAyIChob3BlZnVsbHkgdmVyeSB1bmxpa2VseSkuICBUaGUgY2hhbmNlcyAgb2YgIGRhdGEKLSAgICAgICBjb3JydXB0aW9uICBnb2luZyAgdW5kZXRlY3RlZCAgaXMgIG1pY3Jvc2NvcGljLCAgYWJvdXQgb25lCi0gICAgICAgY2hhbmNlIGluIGZvdXIgYmlsbGlvbiBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4gIEJlIGF3YXJlLAotICAgICAgIHRob3VnaCwgIHRoYXQgIHRoZSAgY2hlY2sgb2NjdXJzIHVwb24gZGVjb21wcmVzc2lvbiwgc28gaXQKLSAgICAgICBjYW4gb25seSB0ZWxsIHlvdSB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZy4gIEl0IGNhbid0ICBoZWxwCi0gICAgICAgeW91ICByZWNvdmVyICB0aGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkIGRhdGEuICBZb3UgY2FuIHVzZQotICAgICAgIGJ6aXAycmVjb3ZlciB0byB0cnkgdG8gcmVjb3ZlciBkYXRhIGZyb20gZGFtYWdlZCBmaWxlcy4KLQotICAgICAgIFJldHVybiB2YWx1ZXM6IDAgZm9yIGEgbm9ybWFsIGV4aXQsICAxICBmb3IgIGVudmlyb25tZW50YWwKLSAgICAgICBwcm9ibGVtcyAgKGZpbGUgbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCAmYyksCi0gICAgICAgMiB0byBpbmRpY2F0ZSBhIGNvcnJ1cHQgY29tcHJlc3NlZCBmaWxlLCAzIGZvciBhbiBpbnRlcm5hbAotICAgICAgIGNvbnNpc3RlbmN5IGVycm9yIChlZywgYnVnKSB3aGljaCBjYXVzZWQgYnppcDIgdG8gcGFuaWMuCi0KLQotT1BUSU9OUwotICAgICAgIC1jIC0tc3Rkb3V0Ci0gICAgICAgICAgICAgIENvbXByZXNzIG9yIGRlY29tcHJlc3MgdG8gc3RhbmRhcmQgb3V0cHV0LgotCi0gICAgICAgLWQgLS1kZWNvbXByZXNzCi0gICAgICAgICAgICAgIEZvcmNlICBkZWNvbXByZXNzaW9uLiAgYnppcDIsIGJ1bnppcDIgYW5kIGJ6Y2F0IGFyZQotICAgICAgICAgICAgICByZWFsbHkgdGhlIHNhbWUgcHJvZ3JhbSwgIGFuZCAgdGhlICBkZWNpc2lvbiAgYWJvdXQKLSAgICAgICAgICAgICAgd2hhdCAgYWN0aW9ucyB0byB0YWtlIGlzIGRvbmUgb24gdGhlIGJhc2lzIG9mIHdoaWNoCi0gICAgICAgICAgICAgIG5hbWUgaXMgdXNlZC4gIFRoaXMgZmxhZyBvdmVycmlkZXMgdGhhdCAgbWVjaGFuaXNtLAotICAgICAgICAgICAgICBhbmQgZm9yY2VzIGJ6aXAyIHRvIGRlY29tcHJlc3MuCi0KLSAgICAgICAteiAtLWNvbXByZXNzCi0gICAgICAgICAgICAgIFRoZSAgIGNvbXBsZW1lbnQgICB0byAgIC1kOiAgIGZvcmNlcyAgIGNvbXByZXNzaW9uLAotICAgICAgICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBpbnZvY2F0aW9uIG5hbWUuCi0KLSAgICAgICAtdCAtLXRlc3QKLSAgICAgICAgICAgICAgQ2hlY2sgaW50ZWdyaXR5IG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKSwgYnV0IGRvbid0Ci0gICAgICAgICAgICAgIGRlY29tcHJlc3MgIHRoZW0uICAgVGhpcyAgcmVhbGx5ICBwZXJmb3JtcyAgYSB0cmlhbAotICAgICAgICAgICAgICBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LgotCi0gICAgICAgLWYgLS1mb3JjZQotICAgICAgICAgICAgICBGb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGVzLiAgIE5vcm1hbGx5LCAgYnppcDIKLSAgICAgICAgICAgICAgd2lsbCAgbm90ICBvdmVyd3JpdGUgIGV4aXN0aW5nICBvdXRwdXQgZmlsZXMuICBBbHNvCi0gICAgICAgICAgICAgIGZvcmNlcyBiemlwMiB0byBicmVhayBoYXJkIGxpbmtzIHRvIGZpbGVzLCB3aGljaCBpdAotICAgICAgICAgICAgICBvdGhlcndpc2Ugd291bGRuJ3QgZG8uCi0KLSAgICAgICAgICAgICAgYnppcDIgIG5vcm1hbGx5ICBkZWNsaW5lcyB0byBkZWNvbXByZXNzIGZpbGVzIHdoaWNoCi0gICAgICAgICAgICAgIGRvbid0IGhhdmUgdGhlICBjb3JyZWN0ICBtYWdpYyAgaGVhZGVyICBieXRlcy4gICBJZgotICAgICAgICAgICAgICBmb3JjZWQgICgtZiksICBob3dldmVyLCAgaXQgIHdpbGwgIHBhc3MgIHN1Y2ggZmlsZXMKLSAgICAgICAgICAgICAgdGhyb3VnaCB1bm1vZGlmaWVkLiAgVGhpcyBpcyBob3cgR05VIGd6aXAgIGJlaGF2ZXMuCi0KLSAgICAgICAtayAtLWtlZXAKLSAgICAgICAgICAgICAgS2VlcCAgKGRvbid0IGRlbGV0ZSkgaW5wdXQgZmlsZXMgZHVyaW5nIGNvbXByZXNzaW9uCi0gICAgICAgICAgICAgIG9yIGRlY29tcHJlc3Npb24uCi0KLSAgICAgICAtcyAtLXNtYWxsCi0gICAgICAgICAgICAgIFJlZHVjZSBtZW1vcnkgdXNhZ2UsIGZvciBjb21wcmVzc2lvbiwgZGVjb21wcmVzc2lvbgotICAgICAgICAgICAgICBhbmQgIHRlc3RpbmcuICAgRmlsZXMgIGFyZSAgZGVjb21wcmVzc2VkIGFuZCB0ZXN0ZWQKLSAgICAgICAgICAgICAgdXNpbmcgYSBtb2RpZmllZCBhbGdvcml0aG0gd2hpY2ggb25seSByZXF1aXJlcyAgMi41Ci0gICAgICAgICAgICAgIGJ5dGVzICBwZXIgIGJsb2NrIGJ5dGUuICBUaGlzIG1lYW5zIGFueSBmaWxlIGNhbiBiZQotICAgICAgICAgICAgICBkZWNvbXByZXNzZWQgaW4gMjMwMGsgb2YgbWVtb3J5LCAgYWxiZWl0ICBhdCAgYWJvdXQKLSAgICAgICAgICAgICAgaGFsZiB0aGUgbm9ybWFsIHNwZWVkLgotCi0gICAgICAgICAgICAgIER1cmluZyAgY29tcHJlc3Npb24sICAtcyAgc2VsZWN0cyAgYSAgYmxvY2sgc2l6ZSBvZgotICAgICAgICAgICAgICAyMDBrLCB3aGljaCBsaW1pdHMgbWVtb3J5IHVzZSB0byAgYXJvdW5kICB0aGUgIHNhbWUKLSAgICAgICAgICAgICAgZmlndXJlLCAgYXQgIHRoZSBleHBlbnNlIG9mIHlvdXIgY29tcHJlc3Npb24gcmF0aW8uCi0gICAgICAgICAgICAgIEluIHNob3J0LCBpZiB5b3VyICBtYWNoaW5lICBpcyAgbG93ICBvbiAgbWVtb3J5ICAoOAotICAgICAgICAgICAgICBtZWdhYnl0ZXMgIG9yICBsZXNzKSwgIHVzZSAgLXMgZm9yIGV2ZXJ5dGhpbmcuICBTZWUKLSAgICAgICAgICAgICAgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuCi0KLSAgICAgICAtcSAtLXF1aWV0Ci0gICAgICAgICAgICAgIFN1cHByZXNzIG5vbi1lc3NlbnRpYWwgd2FybmluZyBtZXNzYWdlcy4gICBNZXNzYWdlcwotICAgICAgICAgICAgICBwZXJ0YWluaW5nICB0byBJL08gZXJyb3JzIGFuZCBvdGhlciBjcml0aWNhbCBldmVudHMKLSAgICAgICAgICAgICAgd2lsbCBub3QgYmUgc3VwcHJlc3NlZC4KLQotICAgICAgIC12IC0tdmVyYm9zZQotICAgICAgICAgICAgICBWZXJib3NlIG1vZGUgLS0gc2hvdyB0aGUgY29tcHJlc3Npb24gcmF0aW8gZm9yIGVhY2gKLSAgICAgICAgICAgICAgZmlsZSAgcHJvY2Vzc2VkLiAgIEZ1cnRoZXIgIC12J3MgIGluY3JlYXNlIHRoZSB2ZXItCi0gICAgICAgICAgICAgIGJvc2l0eSBsZXZlbCwgc3Bld2luZyBvdXQgbG90cyBvZiBpbmZvcm1hdGlvbiB3aGljaAotICAgICAgICAgICAgICBpcyBwcmltYXJpbHkgb2YgaW50ZXJlc3QgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuCi0KLSAgICAgICAtTCAtLWxpY2Vuc2UgLVYgLS12ZXJzaW9uCi0gICAgICAgICAgICAgIERpc3BsYXkgIHRoZSAgc29mdHdhcmUgIHZlcnNpb24sICBsaWNlbnNlIHRlcm1zIGFuZAotICAgICAgICAgICAgICBjb25kaXRpb25zLgotCi0gICAgICAgLTEgKG9yIC0tZmFzdCkgdG8gLTkgKG9yIC0tYmVzdCkKLSAgICAgICAgICAgICAgU2V0IHRoZSBibG9jayBzaXplIHRvIDEwMCBrLCAyMDAgayAuLiAgOTAwICBrICB3aGVuCi0gICAgICAgICAgICAgIGNvbXByZXNzaW5nLiAgIEhhcyAgbm8gIGVmZmVjdCAgd2hlbiBkZWNvbXByZXNzaW5nLgotICAgICAgICAgICAgICBTZWUgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuICBUaGUgLS1mYXN0IGFuZCAtLWJlc3QKLSAgICAgICAgICAgICAgYWxpYXNlcyAgYXJlICBwcmltYXJpbHkgZm9yIEdOVSBnemlwIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIC0tZmFzdCBkb2Vzbid0IG1ha2UgdGhpbmdzICBzaWduaWZpLQotICAgICAgICAgICAgICBjYW50bHkgIGZhc3Rlci4gICBBbmQgIC0tYmVzdCAgbWVyZWx5ICBzZWxlY3RzICB0aGUKLSAgICAgICAgICAgICAgZGVmYXVsdCBiZWhhdmlvdXIuCi0KLSAgICAgICAtLSAgICAgVHJlYXRzIGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcyBmaWxlIG5hbWVzLCBldmVuCi0gICAgICAgICAgICAgIGlmIHRoZXkgc3RhcnQgd2l0aCBhIGRhc2guICBUaGlzIGlzIHNvIHlvdSBjYW4gaGFuLQotICAgICAgICAgICAgICBkbGUgZmlsZXMgd2l0aCBuYW1lcyBiZWdpbm5pbmcgIHdpdGggIGEgIGRhc2gsICBmb3IKLSAgICAgICAgICAgICAgZXhhbXBsZTogYnppcDIgLS0gLW15ZmlsZW5hbWUuCi0KLSAgICAgICAtLXJlcGV0aXRpdmUtZmFzdCAtLXJlcGV0aXRpdmUtYmVzdAotICAgICAgICAgICAgICBUaGVzZSAgZmxhZ3MgIGFyZSAgcmVkdW5kYW50ICBpbiB2ZXJzaW9ucyAwLjkuNSBhbmQKLSAgICAgICAgICAgICAgYWJvdmUuICBUaGV5IHByb3ZpZGVkIHNvbWUgY29hcnNlIGNvbnRyb2wgb3ZlciAgdGhlCi0gICAgICAgICAgICAgIGJlaGF2aW91ciAgb2YgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGluIGVhcmxpZXIgdmVyLQotICAgICAgICAgICAgICBzaW9ucywgd2hpY2ggd2FzIHNvbWV0aW1lcyB1c2VmdWwuICAwLjkuNSBhbmQgYWJvdmUKLSAgICAgICAgICAgICAgaGF2ZSAgYW4gIGltcHJvdmVkICBhbGdvcml0aG0gIHdoaWNoICByZW5kZXJzIHRoZXNlCi0gICAgICAgICAgICAgIGZsYWdzIGlycmVsZXZhbnQuCi0KLQotTUVNT1JZIE1BTkFHRU1FTlQKLSAgICAgICBiemlwMiBjb21wcmVzc2VzIGxhcmdlIGZpbGVzIGluIGJsb2Nrcy4gICBUaGUgIGJsb2NrICBzaXplCi0gICAgICAgYWZmZWN0cyAgYm90aCAgdGhlICBjb21wcmVzc2lvbiAgcmF0aW8gIGFjaGlldmVkLCAgYW5kIHRoZQotICAgICAgIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4KLSAgICAgICBUaGUgIGZsYWdzICAtMSAgdGhyb3VnaCAgLTkgIHNwZWNpZnkgIHRoZSBibG9jayBzaXplIHRvIGJlCi0gICAgICAgMTAwLDAwMCBieXRlcyB0aHJvdWdoIDkwMCwwMDAgYnl0ZXMgKHRoZSBkZWZhdWx0KSAgcmVzcGVjLQotICAgICAgIHRpdmVseS4gICBBdCAgZGVjb21wcmVzc2lvbiAgdGltZSwgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IKLSAgICAgICBjb21wcmVzc2lvbiBpcyByZWFkIGZyb20gIHRoZSAgaGVhZGVyICBvZiAgdGhlICBjb21wcmVzc2VkCi0gICAgICAgZmlsZSwgYW5kIGJ1bnppcDIgdGhlbiBhbGxvY2F0ZXMgaXRzZWxmIGp1c3QgZW5vdWdoIG1lbW9yeQotICAgICAgIHRvIGRlY29tcHJlc3MgdGhlIGZpbGUuICBTaW5jZSBibG9jayBzaXplcyBhcmUgIHN0b3JlZCAgaW4KLSAgICAgICBjb21wcmVzc2VkICBmaWxlcywgIGl0IGZvbGxvd3MgdGhhdCB0aGUgZmxhZ3MgLTEgdG8gLTkgYXJlCi0gICAgICAgaXJyZWxldmFudCB0byBhbmQgc28gaWdub3JlZCBkdXJpbmcgZGVjb21wcmVzc2lvbi4KLQotICAgICAgIENvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJlcXVpcmVtZW50cywgaW4gYnl0ZXMsICBjYW4KLSAgICAgICBiZSBlc3RpbWF0ZWQgYXM6Ci0KLSAgICAgICAgICAgICAgQ29tcHJlc3Npb246ICAgNDAwayArICggOCB4IGJsb2NrIHNpemUgKQotCi0gICAgICAgICAgICAgIERlY29tcHJlc3Npb246IDEwMGsgKyAoIDQgeCBibG9jayBzaXplICksIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMGsgKyAoIDIuNSB4IGJsb2NrIHNpemUgKQotCi0gICAgICAgTGFyZ2VyICBibG9jayAgc2l6ZXMgIGdpdmUgIHJhcGlkbHkgIGRpbWluaXNoaW5nICBtYXJnaW5hbAotICAgICAgIHJldHVybnMuICBNb3N0IG9mIHRoZSBjb21wcmVzc2lvbiBjb21lcyBmcm9tIHRoZSBmaXJzdCB0d28KLSAgICAgICBvciAgdGhyZWUgaHVuZHJlZCBrIG9mIGJsb2NrIHNpemUsIGEgZmFjdCB3b3J0aCBiZWFyaW5nIGluCi0gICAgICAgbWluZCB3aGVuIHVzaW5nIGJ6aXAyICBvbiAgc21hbGwgIG1hY2hpbmVzLiAgIEl0ICBpcyAgYWxzbwotICAgICAgIGltcG9ydGFudCAgdG8gIGFwcHJlY2lhdGUgIHRoYXQgIHRoZSAgZGVjb21wcmVzc2lvbiBtZW1vcnkKLSAgICAgICByZXF1aXJlbWVudCBpcyBzZXQgYXQgY29tcHJlc3Npb24gdGltZSBieSAgdGhlICBjaG9pY2UgIG9mCi0gICAgICAgYmxvY2sgc2l6ZS4KLQotICAgICAgIEZvciAgZmlsZXMgIGNvbXByZXNzZWQgIHdpdGggIHRoZSBkZWZhdWx0IDkwMGsgYmxvY2sgc2l6ZSwKLSAgICAgICBidW56aXAyIHdpbGwgcmVxdWlyZSBhYm91dCAzNzAwIGtieXRlcyB0byBkZWNvbXByZXNzLiAgIFRvCi0gICAgICAgc3VwcG9ydCBkZWNvbXByZXNzaW9uIG9mIGFueSBmaWxlIG9uIGEgNCBtZWdhYnl0ZSBtYWNoaW5lLAotICAgICAgIGJ1bnppcDIgaGFzIGFuIG9wdGlvbiB0byAgZGVjb21wcmVzcyAgdXNpbmcgIGFwcHJveGltYXRlbHkKLSAgICAgICBoYWxmIHRoaXMgYW1vdW50IG9mIG1lbW9yeSwgYWJvdXQgMjMwMCBrYnl0ZXMuICBEZWNvbXByZXMtCi0gICAgICAgc2lvbiBzcGVlZCBpcyBhbHNvIGhhbHZlZCwgc28geW91IHNob3VsZCB1c2UgIHRoaXMgIG9wdGlvbgotICAgICAgIG9ubHkgd2hlcmUgbmVjZXNzYXJ5LiAgVGhlIHJlbGV2YW50IGZsYWcgaXMgLXMuCi0KLSAgICAgICBJbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeSBjb24tCi0gICAgICAgc3RyYWludHMgIGFsbG93LCAgc2luY2UgIHRoYXQgIG1heGltaXNlcyAgdGhlICBjb21wcmVzc2lvbgotICAgICAgIGFjaGlldmVkLiAgIENvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGFyZSB2aXJ0dS0KLSAgICAgICBhbGx5IHVuYWZmZWN0ZWQgYnkgYmxvY2sgc2l6ZS4KLQotICAgICAgIEFub3RoZXIgc2lnbmlmaWNhbnQgcG9pbnQgYXBwbGllcyB0byBmaWxlcyB3aGljaCBmaXQgaW4gIGEKLSAgICAgICBzaW5nbGUgIGJsb2NrICAtLSAgdGhhdCAgbWVhbnMgIG1vc3QgZmlsZXMgeW91J2QgZW5jb3VudGVyCi0gICAgICAgdXNpbmcgYSBsYXJnZSBibG9jayAgc2l6ZS4gICBUaGUgIGFtb3VudCAgb2YgIHJlYWwgIG1lbW9yeQotICAgICAgIHRvdWNoZWQgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBzaXplIG9mIHRoZSBmaWxlLCBzaW5jZSB0aGUKLSAgICAgICBmaWxlIGlzIHNtYWxsZXIgdGhhbiBhIGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbXByZXNzaW5nICBhCi0gICAgICAgZmlsZSAgMjAsMDAwICBieXRlcyAgbG9uZyAgd2l0aCB0aGUgZmxhZyAtOSB3aWxsIGNhdXNlIHRoZQotICAgICAgIGNvbXByZXNzb3IgdG8gYWxsb2NhdGUgYXJvdW5kIDc2MDBrIG9mICBtZW1vcnksICBidXQgIG9ubHkKLSAgICAgICB0b3VjaCA0MDBrICsgMjAwMDAgKiA4ID0gNTYwIGtieXRlcyBvZiBpdC4gIFNpbWlsYXJseSwgdGhlCi0gICAgICAgZGVjb21wcmVzc29yIHdpbGwgYWxsb2NhdGUgMzcwMGsgYnV0ICBvbmx5ICB0b3VjaCAgMTAwayAgKwotICAgICAgIDIwMDAwICogNCA9IDE4MCBrYnl0ZXMuCi0KLSAgICAgICBIZXJlICBpcyBhIHRhYmxlIHdoaWNoIHN1bW1hcmlzZXMgdGhlIG1heGltdW0gbWVtb3J5IHVzYWdlCi0gICAgICAgZm9yIGRpZmZlcmVudCBibG9jayBzaXplcy4gIEFsc28gIHJlY29yZGVkICBpcyAgdGhlICB0b3RhbAotICAgICAgIGNvbXByZXNzZWQgIHNpemUgZm9yIDE0IGZpbGVzIG9mIHRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlcy0KLSAgICAgICBzaW9uIENvcnB1cyB0b3RhbGxpbmcgMywxNDEsNjIyIGJ5dGVzLiAgVGhpcyBjb2x1bW4gIGdpdmVzCi0gICAgICAgc29tZSAgZmVlbCAgZm9yICBob3cgIGNvbXByZXNzaW9uICB2YXJpZXMgd2l0aCBibG9jayBzaXplLgotICAgICAgIFRoZXNlIGZpZ3VyZXMgdGVuZCB0byB1bmRlcnN0YXRlIHRoZSBhZHZhbnRhZ2UgIG9mICBsYXJnZXIKLSAgICAgICBibG9jayAgc2l6ZXMgIGZvciAgbGFyZ2VyIGZpbGVzLCBzaW5jZSB0aGUgQ29ycHVzIGlzIGRvbWktCi0gICAgICAgbmF0ZWQgYnkgc21hbGxlciBmaWxlcy4KLQotICAgICAgICAgICAgICAgICAgQ29tcHJlc3MgICBEZWNvbXByZXNzICAgRGVjb21wcmVzcyAgIENvcnB1cwotICAgICAgICAgICBGbGFnICAgICB1c2FnZSAgICAgIHVzYWdlICAgICAgIC1zIHVzYWdlICAgICBTaXplCi0KLSAgICAgICAgICAgIC0xICAgICAgMTIwMGsgICAgICAgNTAwayAgICAgICAgIDM1MGsgICAgICA5MTQ3MDQKLSAgICAgICAgICAgIC0yICAgICAgMjAwMGsgICAgICAgOTAwayAgICAgICAgIDYwMGsgICAgICA4Nzc3MDMKLSAgICAgICAgICAgIC0zICAgICAgMjgwMGsgICAgICAxMzAwayAgICAgICAgIDg1MGsgICAgICA4NjAzMzgKLSAgICAgICAgICAgIC00ICAgICAgMzYwMGsgICAgICAxNzAwayAgICAgICAgMTEwMGsgICAgICA4NDY4OTkKLSAgICAgICAgICAgIC01ICAgICAgNDQwMGsgICAgICAyMTAwayAgICAgICAgMTM1MGsgICAgICA4NDUxNjAKLSAgICAgICAgICAgIC02ICAgICAgNTIwMGsgICAgICAyNTAwayAgICAgICAgMTYwMGsgICAgICA4Mzg2MjYKLSAgICAgICAgICAgIC03ICAgICAgNjEwMGsgICAgICAyOTAwayAgICAgICAgMTg1MGsgICAgICA4MzQwOTYKLSAgICAgICAgICAgIC04ICAgICAgNjgwMGsgICAgICAzMzAwayAgICAgICAgMjEwMGsgICAgICA4Mjg2NDIKLSAgICAgICAgICAgIC05ICAgICAgNzYwMGsgICAgICAzNzAwayAgICAgICAgMjM1MGsgICAgICA4Mjg2NDIKLQotCi1SRUNPVkVSSU5HIERBVEEgRlJPTSBEQU1BR0VEIEZJTEVTCi0gICAgICAgYnppcDIgY29tcHJlc3NlcyBmaWxlcyBpbiBibG9ja3MsIHVzdWFsbHkgOTAwa2J5dGVzICBsb25nLgotICAgICAgIEVhY2ggYmxvY2sgaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5LiAgSWYgYSBtZWRpYSBvciB0cmFucy0KLSAgICAgICBtaXNzaW9uIGVycm9yIGNhdXNlcyBhIG11bHRpLWJsb2NrICAuYnoyICBmaWxlICB0byAgYmVjb21lCi0gICAgICAgZGFtYWdlZCwgIGl0ICBtYXkgIGJlICBwb3NzaWJsZSAgdG8gIHJlY292ZXIgZGF0YSBmcm9tIHRoZQotICAgICAgIHVuZGFtYWdlZCBibG9ja3MgaW4gdGhlIGZpbGUuCi0KLSAgICAgICBUaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrICBpcyAgZGVsaW1pdGVkCi0gICAgICAgYnkgIGEgIDQ4LWJpdCBwYXR0ZXJuLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBmaW5kIHRoZQotICAgICAgIGJsb2NrIGJvdW5kYXJpZXMgd2l0aCByZWFzb25hYmxlICBjZXJ0YWludHkuICAgRWFjaCAgYmxvY2sKLSAgICAgICBhbHNvICBjYXJyaWVzIGl0cyBvd24gMzItYml0IENSQywgc28gZGFtYWdlZCBibG9ja3MgY2FuIGJlCi0gICAgICAgZGlzdGluZ3Vpc2hlZCBmcm9tIHVuZGFtYWdlZCBvbmVzLgotCi0gICAgICAgYnppcDJyZWNvdmVyIGlzIGEgIHNpbXBsZSAgcHJvZ3JhbSAgd2hvc2UgIHB1cnBvc2UgIGlzICB0bwotICAgICAgIHNlYXJjaCAgZm9yIGJsb2NrcyBpbiAuYnoyIGZpbGVzLCBhbmQgd3JpdGUgZWFjaCBibG9jayBvdXQKLSAgICAgICBpbnRvIGl0cyBvd24gLmJ6MiBmaWxlLiAgWW91IGNhbiB0aGVuIHVzZSBiemlwMiAtdCB0byB0ZXN0Ci0gICAgICAgdGhlIGludGVncml0eSBvZiB0aGUgcmVzdWx0aW5nIGZpbGVzLCBhbmQgZGVjb21wcmVzcyB0aG9zZQotICAgICAgIHdoaWNoIGFyZSB1bmRhbWFnZWQuCi0KLSAgICAgICBiemlwMnJlY292ZXIgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBkYW0tCi0gICAgICAgYWdlZCAgICBmaWxlLCAgICBhbmQgICAgd3JpdGVzICAgIGEgICAgbnVtYmVyICAgb2YgICBmaWxlcwotICAgICAgICJyZWMwMDAwMWZpbGUuYnoyIiwgICJyZWMwMDAwMmZpbGUuYnoyIiwgIGV0YywgIGNvbnRhaW5pbmcKLSAgICAgICB0aGUgICBleHRyYWN0ZWQgICBibG9ja3MuICAgVGhlICAgb3V0cHV0ICAgZmlsZW5hbWVzICAgYXJlCi0gICAgICAgZGVzaWduZWQgIHNvICB0aGF0IHRoZSB1c2Ugb2Ygd2lsZGNhcmRzIGluIHN1YnNlcXVlbnQgcHJvLQotICAgICAgIGNlc3NpbmcgIC0tIGZvciBleGFtcGxlLCAiYnppcDIgLWRjICByZWMqZmlsZS5iejIgPiByZWNvdi0KLSAgICAgICBlcmVkX2RhdGEiIC0tIHByb2Nlc3NlcyB0aGUgZmlsZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCi0KLSAgICAgICBiemlwMnJlY292ZXIgc2hvdWxkIGJlIG9mIG1vc3QgdXNlIGRlYWxpbmcgd2l0aCBsYXJnZSAuYnoyCi0gICAgICAgZmlsZXMsICBhcyAgdGhlc2Ugd2lsbCBjb250YWluIG1hbnkgYmxvY2tzLiAgSXQgaXMgY2xlYXJseQotICAgICAgIGZ1dGlsZSB0byB1c2UgaXQgb24gZGFtYWdlZCBzaW5nbGUtYmxvY2sgIGZpbGVzLCAgc2luY2UgIGEKLSAgICAgICBkYW1hZ2VkICBibG9jayAgY2Fubm90ICBiZSByZWNvdmVyZWQuICBJZiB5b3Ugd2lzaCB0byBtaW4tCi0gICAgICAgaW1pc2UgYW55IHBvdGVudGlhbCBkYXRhIGxvc3MgdGhyb3VnaCBtZWRpYSAgb3IgIHRyYW5zbWlzLQotICAgICAgIHNpb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIgY29tcHJlc3Npbmcgd2l0aCBhIHNtYWxsZXIKLSAgICAgICBibG9jayBzaXplLgotCi0KLVBFUkZPUk1BTkNFIE5PVEVTCi0gICAgICAgVGhlIHNvcnRpbmcgcGhhc2Ugb2YgY29tcHJlc3Npb24gZ2F0aGVycyB0b2dldGhlciAgc2ltaWxhcgotICAgICAgIHN0cmluZ3MgIGluICB0aGUgIGZpbGUuICBCZWNhdXNlIG9mIHRoaXMsIGZpbGVzIGNvbnRhaW5pbmcKLSAgICAgICB2ZXJ5IGxvbmcgcnVucyBvZiAgcmVwZWF0ZWQgIHN5bWJvbHMsICBsaWtlICAiYWFiYWFiYWFiYWFiCi0gICAgICAgLi4uIiAgIChyZXBlYXRlZCAgc2V2ZXJhbCBodW5kcmVkIHRpbWVzKSBtYXkgY29tcHJlc3MgbW9yZQotICAgICAgIHNsb3dseSB0aGFuIG5vcm1hbC4gIFZlcnNpb25zIDAuOS41IGFuZCAgYWJvdmUgIGZhcmUgIG11Y2gKLSAgICAgICBiZXR0ZXIgIHRoYW4gcHJldmlvdXMgdmVyc2lvbnMgaW4gdGhpcyByZXNwZWN0LiAgVGhlIHJhdGlvCi0gICAgICAgYmV0d2VlbiB3b3JzdC1jYXNlIGFuZCBhdmVyYWdlLWNhc2UgY29tcHJlc3Npb24gdGltZSBpcyBpbgotICAgICAgIHRoZSAgcmVnaW9uICBvZiAgMTA6MS4gIEZvciBwcmV2aW91cyB2ZXJzaW9ucywgdGhpcyBmaWd1cmUKLSAgICAgICB3YXMgbW9yZSBsaWtlIDEwMDoxLiAgWW91IGNhbiB1c2UgdGhlIC12dnZ2IG9wdGlvbiB0byBtb24tCi0gICAgICAgaXRvciBwcm9ncmVzcyBpbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LgotCi0gICAgICAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyB1bmFmZmVjdGVkIGJ5IHRoZXNlIHBoZW5vbWVuYS4KLQotICAgICAgIGJ6aXAyICB1c3VhbGx5ICBhbGxvY2F0ZXMgIHNldmVyYWwgIG1lZ2FieXRlcyBvZiBtZW1vcnkgdG8KLSAgICAgICBvcGVyYXRlIGluLCBhbmQgdGhlbiBjaGFyZ2VzIGFsbCBvdmVyIGl0IGluIGEgZmFpcmx5ICByYW4tCi0gICAgICAgZG9tICBmYXNoaW9uLiAgIFRoaXMgbWVhbnMgdGhhdCBwZXJmb3JtYW5jZSwgYm90aCBmb3IgY29tLQotICAgICAgIHByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBpcyBsYXJnZWx5IGRldGVybWluZWQgIGJ5ICB0aGUKLSAgICAgICBzcGVlZCAgYXQgIHdoaWNoICB5b3VyICBtYWNoaW5lICBjYW4gc2VydmljZSBjYWNoZSBtaXNzZXMuCi0gICAgICAgQmVjYXVzZSBvZiB0aGlzLCBzbWFsbCBjaGFuZ2VzIHRvIHRoZSBjb2RlIHRvICByZWR1Y2UgIHRoZQotICAgICAgIG1pc3MgIHJhdGUgIGhhdmUgIGJlZW4gb2JzZXJ2ZWQgdG8gZ2l2ZSBkaXNwcm9wb3J0aW9uYXRlbHkKLSAgICAgICBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUgYnppcDIgd2lsbCBwZXItCi0gICAgICAgZm9ybSBiZXN0IG9uIG1hY2hpbmVzIHdpdGggdmVyeSBsYXJnZSBjYWNoZXMuCi0KLQotQ0FWRUFUUwotICAgICAgIEkvTyAgZXJyb3IgIG1lc3NhZ2VzICBhcmUgbm90IGFzIGhlbHBmdWwgYXMgdGhleSBjb3VsZCBiZS4KLSAgICAgICBiemlwMiB0cmllcyBoYXJkIHRvIGRldGVjdCBJL08gZXJyb3JzICBhbmQgIGV4aXQgIGNsZWFubHksCi0gICAgICAgYnV0ICB0aGUgIGRldGFpbHMgIG9mICB3aGF0ICB0aGUgcHJvYmxlbSBpcyBzb21ldGltZXMgc2VlbQotICAgICAgIHJhdGhlciBtaXNsZWFkaW5nLgotCi0gICAgICAgVGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uIDEuMC40IG9mIGJ6aXAyLiAgQ29tLQotICAgICAgIHByZXNzZWQgIGRhdGEgY3JlYXRlZCBieSB0aGlzIHZlcnNpb24gaXMgZW50aXJlbHkgZm9yd2FyZHMKLSAgICAgICBhbmQgIGJhY2t3YXJkcyAgY29tcGF0aWJsZSAgd2l0aCAgIHRoZSAgIHByZXZpb3VzICAgcHVibGljCi0gICAgICAgcmVsZWFzZXMsICB2ZXJzaW9ucyAgMC4xcGwyLCAgMC45LjAsICAwLjkuNSwgMS4wLjAsIDEuMC4xLAotICAgICAgIDEuMC4yIGFuZCAxLjAuMywgYnV0IHdpdGggdGhlICBmb2xsb3dpbmcgIGV4Y2VwdGlvbjogMC45LjAKLSAgICAgICBhbmQgYWJvdmUgY2FuICBjb3JyZWN0bHkgZGVjb21wcmVzcyAgbXVsdGlwbGUgY29uY2F0ZW5hdGVkCi0gICAgICAgY29tcHJlc3NlZCBmaWxlcy4gIDAuMXBsMiAgY2Fubm90IGRvIHRoaXM7ICBpdCAgd2lsbCAgc3RvcAotICAgICAgIGFmdGVyICBkZWNvbXByZXNzaW5nIGp1c3QgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS4KLQotICAgICAgIGJ6aXAycmVjb3ZlciAgdmVyc2lvbnMgcHJpb3IgdG8gMS4wLjIgdXNlZCAzMi1iaXQgaW50ZWdlcnMKLSAgICAgICB0byByZXByZXNlbnQgYml0IHBvc2l0aW9ucyBpbiBjb21wcmVzc2VkICBmaWxlcywgIHNvICB0aGV5Ci0gICAgICAgY291bGQgIG5vdCBoYW5kbGUgY29tcHJlc3NlZCBmaWxlcyBtb3JlIHRoYW4gNTEyIG1lZ2FieXRlcwotICAgICAgIGxvbmcuICBWZXJzaW9ucyAxLjAuMiBhbmQgYWJvdmUgdXNlIDY0LWJpdCAgaW50cyAgb24gIHNvbWUKLSAgICAgICBwbGF0Zm9ybXMgIHdoaWNoICBzdXBwb3J0IHRoZW0gKEdOVSBzdXBwb3J0ZWQgdGFyZ2V0cywgYW5kCi0gICAgICAgV2luZG93cykuICBUbyBlc3RhYmxpc2ggd2hldGhlciBvciAgbm90ICBiemlwMnJlY292ZXIgIHdhcwotICAgICAgIGJ1aWx0ICB3aXRoICBzdWNoICBhIGxpbWl0YXRpb24sIHJ1biBpdCB3aXRob3V0IGFyZ3VtZW50cy4KLSAgICAgICBJbiBhbnkgZXZlbnQgeW91IGNhbiBidWlsZCB5b3Vyc2VsZiBhbiAgdW5saW1pdGVkICB2ZXJzaW9uCi0gICAgICAgaWYgIHlvdSAgY2FuICByZWNvbXBpbGUgIGl0ICB3aXRoIE1heWJlVUludDY0IHNldCB0byBiZSBhbgotICAgICAgIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLgotCi0KLUFVVEhPUgotICAgICAgIEp1bGlhbiBTZXdhcmQsIGpzZXdhcmRiemlwLm9yZy4KLQotICAgICAgIGh0dHA6Ly93d3cuYnppcC5vcmcKLQotICAgICAgIFRoZSBpZGVhcyBlbWJvZGllZCBpbiBiemlwMiBhcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlIGZvbC0KLSAgICAgICBsb3dpbmcgIHBlb3BsZTogTWljaGFlbCBCdXJyb3dzIGFuZCBEYXZpZCBXaGVlbGVyIChmb3IgdGhlCi0gICAgICAgYmxvY2sgc29ydGluZyB0cmFuc2Zvcm1hdGlvbiksIERhdmlkIFdoZWVsZXIgIChhZ2FpbiwgIGZvcgotICAgICAgIHRoZSBIdWZmbWFuIGNvZGVyKSwgUGV0ZXIgRmVud2ljayAoZm9yIHRoZSBzdHJ1Y3R1cmVkIGNvZC0KLSAgICAgICBpbmcgbW9kZWwgaW4gdGhlIG9yaWdpbmFsIGJ6aXAsIGFuZCBtYW55IHJlZmluZW1lbnRzKSwgYW5kCi0gICAgICAgQWxpc3RhaXIgIE1vZmZhdCwgIFJhZGZvcmQgIE5lYWwgIGFuZCAgSWFuIFdpdHRlbiAoZm9yIHRoZQotICAgICAgIGFyaXRobWV0aWMgIGNvZGVyICBpbiAgdGhlICBvcmlnaW5hbCAgYnppcCkuICAgSSAgYW0gIG11Y2gKLSAgICAgICBpbmRlYnRlZCBmb3IgdGhlaXIgaGVscCwgc3VwcG9ydCBhbmQgYWR2aWNlLiAgU2VlIHRoZSBtYW4tCi0gICAgICAgdWFsIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBwb2ludGVycyB0byBzb3VyY2VzICBvZgotICAgICAgIGRvY3VtZW50YXRpb24uICBDaHJpc3RpYW4gdm9uIFJvcXVlcyBlbmNvdXJhZ2VkIG1lIHRvIGxvb2sKLSAgICAgICBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywgc28gYXMgdG8gc3BlZWQgdXAgIGNvbXByZXMtCi0gICAgICAgc2lvbi4gIEJlbGEgTHVia2luIGVuY291cmFnZWQgbWUgdG8gaW1wcm92ZSB0aGUgd29yc3QtY2FzZQotICAgICAgIGNvbXByZXNzaW9uIHBlcmZvcm1hbmNlLiAgRG9ubmEgUm9iaW5zb24gWE1MaXNlZCB0aGUgZG9jdS0KLSAgICAgICBtZW50YXRpb24uICAgVGhlIGJ6KiBzY3JpcHRzIGFyZSBkZXJpdmVkIGZyb20gdGhvc2Ugb2YgR05VCi0gICAgICAgZ3ppcC4gIE1hbnkgcGVvcGxlIHNlbnQgcGF0Y2hlcywgaGVscGVkICB3aXRoICBwb3J0YWJpbGl0eQotICAgICAgIHByb2JsZW1zLCAgbGVudCAgbWFjaGluZXMsICBnYXZlIGFkdmljZSBhbmQgd2VyZSBnZW5lcmFsbHkKLSAgICAgICBoZWxwZnVsLgotCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemlwMnJlY292ZXIuYyBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAycmVjb3Zlci5jCmluZGV4IDZlNDdiNjAuLmE4MTMxZTAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAycmVjb3Zlci5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6aXAycmVjb3Zlci5jCkBAIC03LDggKzcsOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpAQCAtMTgsNyArMTgsNyBAQAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIFRoaXMgcHJvZ3JhbSBpcyBhIGNvbXBsZXRlIGhhY2sgYW5kIHNob3VsZCBiZSByZXdyaXR0ZW4gcHJvcGVybHkuCi0gICAgIEl0IGlzbid0IHZlcnkgY29tcGxpY2F0ZWQuICovCisJIEl0IGlzbid0IHZlcnkgY29tcGxpY2F0ZWQuICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC0zMDksMTEgKzMwOSwxMiBAQAogICAgVUludDMyICAgICAgYnVmZkhpLCBidWZmTG8sIGJsb2NrQ1JDOwogICAgQ2hhciogICAgICAgcDsKIAotICAgc3RyY3B5ICggcHJvZ05hbWUsIGFyZ3ZbMF0gKTsKKyAgIHN0cm5jcHkgKCBwcm9nTmFtZSwgYXJndlswXSwgQlpfTUFYX0ZJTEVOQU1FLTEpOworICAgcHJvZ05hbWVbQlpfTUFYX0ZJTEVOQU1FLTFdPSdcMCc7CiAgICBpbkZpbGVOYW1lWzBdID0gb3V0RmlsZU5hbWVbMF0gPSAwOwogCiAgICBmcHJpbnRmICggc3RkZXJyLCAKLSAgICAgICAgICAgICAiYnppcDJyZWNvdmVyIDEuMC41OiBleHRyYWN0cyBibG9ja3MgZnJvbSBkYW1hZ2VkIC5iejIgZmlsZXMuXG4iICk7CisgICAgICAgICAgICAgImJ6aXAycmVjb3ZlciAxLjAuODogZXh0cmFjdHMgYmxvY2tzIGZyb20gZGFtYWdlZCAuYnoyIGZpbGVzLlxuIiApOwogCiAgICBpZiAoYXJnYyAhPSAyKSB7CiAgICAgICBmcHJpbnRmICggc3RkZXJyLCAiJXM6IHVzYWdlIGlzIGAlcyBkYW1hZ2VkX2ZpbGVfbmFtZScuXG4iLApAQCAtMzkzLDcgKzM5NCw3IEBACiAgICAgICAgICAgICBiRW5kW2N1cnJCbG9ja10gPSAwOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGN1cnJCbG9jayA+IDAgJiYKLSAgICAgICAgIChiRW5kW2N1cnJCbG9ja10gLSBiU3RhcnRbY3VyckJsb2NrXSkgPj0gMTMwKSB7CisJICAgICAoYkVuZFtjdXJyQmxvY2tdIC0gYlN0YXJ0W2N1cnJCbG9ja10pID49IDEzMCkgewogICAgICAgICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIiAgIGJsb2NrICVkIHJ1bnMgZnJvbSAiIE1heWJlVUludDY0X0ZNVCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gIiBNYXliZVVJbnQ2NF9GTVQgIlxuIiwKICAgICAgICAgICAgICAgICAgICAgICByYkN0cisxLCAgYlN0YXJ0W2N1cnJCbG9ja10sIGJFbmRbY3VyckJsb2NrXSApOwpAQCAtNDU3LDYgKzQ1OCw3IEBACiAgICAgICAgICAgICBic1B1dFVDaGFyICggYnNXciwgMHg1MCApOyBic1B1dFVDaGFyICggYnNXciwgMHg5MCApOwogICAgICAgICAgICAgYnNQdXRVSW50MzIgKCBic1dyLCBibG9ja0NSQyApOwogICAgICAgICAgICAgYnNDbG9zZSAoIGJzV3IgKTsKKyAgICAgICAgICAgIG91dEZpbGUgPSBOVUxMOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHdyQmxvY2sgPj0gcmJDdHIpIGJyZWFrOwogICAgICAgICAgd3JCbG9jaysrOwpAQCAtNDc0LDggKzQ3Niw4IEBACiAgICAgICAgICAgICBzcGxpdCA9IG91dEZpbGVOYW1lOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICsrc3BsaXQ7Ci0gICAgIH0KLSAgICAgLyogTm93IHNwbGl0IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGJhc2VuYW1lLiAqLworCSB9CisJIC8qIE5vdyBzcGxpdCBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBiYXNlbmFtZS4gKi8KICAgICAgICAgIG9mcyAgPSBzcGxpdCAtIG91dEZpbGVOYW1lOwogICAgICAgICAgc3ByaW50ZiAoc3BsaXQsICJyZWMlNWQiLCB3ckJsb2NrKzEpOwogICAgICAgICAgZm9yIChwID0gc3BsaXQ7ICpwICE9IDA7IHArKykgaWYgKCpwID09ICcgJykgKnAgPSAnMCc7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iemxpYi5jIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWIuYwppbmRleCBhZWVjZWYxLi4yMTc4NjU1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemxpYi5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliLmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCkBAIC00MywxMiArNDMsMTIgQEAKICAgIGZwcmludGYoc3RkZXJyLCAKICAgICAgICJcblxuYnppcDIvbGliYnppcDI6IGludGVybmFsIGVycm9yIG51bWJlciAlZC5cbiIKICAgICAgICJUaGlzIGlzIGEgYnVnIGluIGJ6aXAyL2xpYmJ6aXAyLCAlcy5cbiIKLSAgICAgICJQbGVhc2UgcmVwb3J0IGl0IHRvIG1lIGF0OiBqc2V3YXJkQGJ6aXAub3JnLiAgSWYgdGhpcyBoYXBwZW5lZFxuIgorICAgICAgIlBsZWFzZSByZXBvcnQgaXQgdG86IGJ6aXAyLWRldmVsQHNvdXJjZXdhcmUub3JnLiAgSWYgdGhpcyBoYXBwZW5lZFxuIgogICAgICAgIndoZW4geW91IHdlcmUgdXNpbmcgc29tZSBwcm9ncmFtIHdoaWNoIHVzZXMgbGliYnppcDIgYXMgYVxuIgogICAgICAgImNvbXBvbmVudCwgeW91IHNob3VsZCBhbHNvIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgYXV0aG9yKHMpXG4iCiAgICAgICAib2YgdGhhdCBwcm9ncmFtLiAgUGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHJlcG9ydCB0aGlzIGJ1ZztcbiIKICAgICAgICJ0aW1lbHkgYW5kIGFjY3VyYXRlIGJ1ZyByZXBvcnRzIGV2ZW50dWFsbHkgbGVhZCB0byBoaWdoZXJcbiIKLSAgICAgICJxdWFsaXR5IHNvZnR3YXJlLiAgVGhhbmtzLiAgSnVsaWFuIFNld2FyZCwgMTAgRGVjZW1iZXIgMjAwNy5cblxuIiwKKyAgICAgICJxdWFsaXR5IHNvZnR3YXJlLiAgVGhhbmtzLlxuXG4iLAogICAgICAgZXJyY29kZSwKICAgICAgIEJaMl9iemxpYlZlcnNpb24oKQogICAgKTsKQEAgLTEwMiw3ICsxMDIsNiBAQAogdm9pZCogZGVmYXVsdF9iemFsbG9jICggdm9pZCogb3BhcXVlLCBJbnQzMiBpdGVtcywgSW50MzIgc2l6ZSApCiB7CiAgICB2b2lkKiB2ID0gbWFsbG9jICggaXRlbXMgKiBzaXplICk7Ci0gICh2b2lkKW9wYXF1ZTsKICAgIHJldHVybiB2OwogfQogCkBAIC0xMTAsNyArMTA5LDYgQEAKIHZvaWQgZGVmYXVsdF9iemZyZWUgKCB2b2lkKiBvcGFxdWUsIHZvaWQqIGFkZHIgKQogewogICAgaWYgKGFkZHIgIT0gTlVMTCkgZnJlZSAoIGFkZHIgKTsKLSAgKHZvaWQpb3BhcXVlOwogfQogCiAKQEAgLTQyNyw3ICs0MjUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzID8gQlpfUlVOX09LIDogQlpfUEFSQU1fRVJST1I7CiAgICAgICAgICB9IAogICAgICAgICAgZWxzZQotICAgICBpZiAoYWN0aW9uID09IEJaX0ZMVVNIKSB7CisJIGlmIChhY3Rpb24gPT0gQlpfRkxVU0gpIHsKICAgICAgICAgICAgIHMtPmF2YWlsX2luX2V4cGVjdCA9IHN0cm0tPmF2YWlsX2luOwogICAgICAgICAgICAgcy0+bW9kZSA9IEJaX01fRkxVU0hJTkc7CiAgICAgICAgICAgICBnb3RvIHByZXN3aXRjaDsKQEAgLTE1MDcsNyArMTUwNSw2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgQlpfQVBJKEJaMl9iemZsdXNoKSAoQlpGSUxFICpiKQogewotICAodm9pZCkgYjsKICAgIC8qIGRvIG5vdGhpbmcgbm93Li4uICovCiAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliLmggYi9VdGlsaXRpZXMvY21iemlwMi9iemxpYi5oCmluZGV4IGM1Yjc1ZDYuLjg5NjZhNmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliLmgKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWIuaApAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWJ6aXAyL2J6bGliX3ByaXZhdGUuaAppbmRleCAwMmE2NjdmLi5iYTBmNTg5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9iemxpYl9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvYnpsaWJfcHJpdmF0ZS5oCkBAIC04LDggKzgsOCBAQAogICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKICAgIGxvc3NsZXNzLCBibG9jay1zb3J0aW5nIGRhdGEgY29tcHJlc3Npb24uCiAKLSAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjUgb2YgMTAgRGVjZW1iZXIgMjAwNwotICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZCA8anNld2FyZEBiemlwLm9yZz4KKyAgIGJ6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjggb2YgMTMgSnVseSAyMDE5CisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxOSBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGFjbS5vcmc+CiAKICAgIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKICAgIFJFQURNRSBmaWxlLgpAQCAtMzIsMjggKzMyLDEzIEBACiAKICNpbmNsdWRlICJiemxpYi5oIgogCi0KLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgcHJhZ21hIHdhcm4gLTgwMDQgLyogQXNzaWduZWQgdmFsdWUgbmV2ZXIgdXNlZC4gICovCi0jIHByYWdtYSB3YXJuIC04MDA4IC8qIENvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZS9mYWxzZS4gICovCi0jIHByYWdtYSB3YXJuIC04MDY2IC8qIFVucmVhY2hhYmxlIGNvZGUuICAqLwotIyBwcmFnbWEgd2FybiAtODA1NyAvKiBVbnVzZWQgcGFyYW1ldGVyLiAgKi8KLSNlbmRpZgogI2lmIGRlZmluZWQoX01TQ19WRVIpCi0vKiAnaW50ZWdyYWwgc2l6ZSBtaXNtYXRjaCBpbiBhcmd1bWVudDsgY29udmVyc2lvbiBzdXBwbGllZCAqLwotIyBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDQpCi0vKiBjb252ZXJzaW9uIGZyb20gJ3NpemVfdCcgdG8gJ29mZl90JywgcG9zc2libGUgbG9zcyBvZiBkYXRhICovCi0jIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI2NykKLS8qIHdhcm5pbmcgQzQxMjc6IGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQqLwotIyBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxMjcpCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSMgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjYXN0LWFsaWduIgorIyBwcmFnbWEgd2FybmluZyhwdXNoLDEpCiAjZW5kaWYKIAogLyotLSBHZW5lcmFsIHN0dWZmLiAtLSovCiAKLSNkZWZpbmUgQlpfVkVSU0lPTiAgIjEuMC41LCAxMC1EZWMtMjAwNyIKKyNkZWZpbmUgQlpfVkVSU0lPTiAgIjEuMC44LCAxMy1KdWwtMjAxOSIKIAogdHlwZWRlZiBjaGFyICAgICAgICAgICAgQ2hhcjsKIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgIEJvb2w7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9iem1vcmUgYi9VdGlsaXRpZXMvY21iemlwMi9iem1vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYjFkZTYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnptb3JlCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotIyEvYmluL3NoCi0KLSMgQnptb3JlIHdyYXBwZWQgZm9yIGJ6aXAyLCAKLSMgYWRhcHRlZCBmcm9tIHptb3JlIGJ5IFBoaWxpcHBlIFRyb2luIDxwaGlsQGZpZmkub3JnPiBmb3IgRGViaWFuIEdOVS9MaW51eC4KLQotUEFUSD0iL3Vzci9iaW46JFBBVEgiOyBleHBvcnQgUEFUSAotCi1wcm9nPWBlY2hvICQwIHwgc2VkICdzfC4qL3x8J2AKLWNhc2UgIiRwcm9nIiBpbgotICAgICpsZXNzKSAgbW9yZT1sZXNzICAgOzsKLSAgICAqKSAgbW9yZT1tb3JlICAgICAgIDs7Ci1lc2FjCi0KLWlmIHRlc3QgImBlY2hvIC1uIGFgIiA9ICItbiBhIjsgdGhlbgotICAjIGxvb2tzIGxpa2UgYSBTeXNWIHN5c3RlbToKLSAgbjE9Jyc7IG4yPSdcYycKLWVsc2UKLSAgbjE9Jy1uJzsgbjI9JycKLWZpCi1vbGR0dHk9YHN0dHkgLWcgMj4vZGV2L251bGxgCi1pZiBzdHR5IC1jYnJlYWsgMj4vZGV2L251bGw7IHRoZW4KLSAgY2I9J2NicmVhayc7IG5jYj0nLWNicmVhaycKLWVsc2UKLSAgIyAnc3R0eSBtaW4gMScgcmVzZXRzIGVvZiB0byBeYSBvbiBib3RoIFN1bk9TIGFuZCBTeXNWIQotICBjYj0nbWluIDEgLWljYW5vbic7IG5jYj0naWNhbm9uIGVvZiBeZCcKLWZpCi1pZiB0ZXN0ICQ/IC1lcSAwIC1hIC1uICIkb2xkdHR5IjsgdGhlbgotICAgdHJhcCAnc3R0eSAkb2xkdHR5IDI+L2Rldi9udWxsOyBleGl0JyAwIDIgMyA1IDEwIDEzIDE1Ci1lbHNlCi0gICB0cmFwICdzdHR5ICRuY2IgZWNobyAyPi9kZXYvbnVsbDsgZXhpdCcgMCAyIDMgNSAxMCAxMyAxNQotZmkKLQotaWYgdGVzdCAkIyA9IDA7IHRoZW4KLSAgICBpZiB0ZXN0IC10IDA7IHRoZW4KLSAgICBlY2hvIHVzYWdlOiAkcHJvZyBmaWxlcy4uLgotICAgIGVsc2UKLSAgICBiemlwMiAtY2RmcSB8IGV2YWwgJG1vcmUKLSAgICBmaQotZWxzZQotICAgIEZJUlNUPTEKLSAgICBmb3IgRklMRQotICAgIGRvCi0gICAgaWYgdGVzdCAkRklSU1QgLWVxIDA7IHRoZW4KLSAgICAgICAgZWNobyAkbjEgIi0tTW9yZS0tKE5leHQgZmlsZTogJEZJTEUpJG4yIgotICAgICAgICBzdHR5ICRjYiAtZWNobyAyPi9kZXYvbnVsbAotICAgICAgICBBTlM9YGRkIGJzPTEgY291bnQ9MSAyPi9kZXYvbnVsbGAgCi0gICAgICAgIHN0dHkgJG5jYiBlY2hvIDI+L2Rldi9udWxsCi0gICAgICAgIGVjaG8gIiAiCi0gICAgICAgIGlmIHRlc3QgIiRBTlMiID0gJ2UnIC1vICIkQU5TIiA9ICdxJzsgdGhlbgotICAgICAgICAgICAgZXhpdAotICAgICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAiJEFOUyIgIT0gJ3MnOyB0aGVuCi0gICAgICAgIGVjaG8gIi0tLS0tLT4gJEZJTEUgPC0tLS0tLSIKLSAgICAgICAgYnppcDIgLWNkZnEgIiRGSUxFIiB8IGV2YWwgJG1vcmUKLSAgICBmaQotICAgIGlmIHRlc3QgLXQ7IHRoZW4KLSAgICAgICAgRklSU1Q9MAotICAgIGZpCi0gICAgZG9uZQotZmkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2J6bW9yZS4xIGIvVXRpbGl0aWVzL2NtYnppcDIvYnptb3JlLjEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ODY4ZWQuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvYnptb3JlLjEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLlwiU2hhbWVsZXNzbHkgY29waWVkIGZyb20gem1vcmUuMSBieSBQaGlsaXBwZSBUcm9pbiA8cGhpbEBmaWZpLm9yZz4KLS5cImZvciBEZWJpYW4gR05VL0xpbnV4Ci0uVEggQlpNT1JFIDEKLS5TSCBOQU1FCi1iem1vcmUsIGJ6bGVzcyBcLSBmaWxlIHBlcnVzYWwgZmlsdGVyIGZvciBjcnQgdmlld2luZyBvZiBiemlwMiBjb21wcmVzc2VkIHRleHQKLS5TSCBTWU5PUFNJUwotLkIgYnptb3JlCi1bIG5hbWUgLi4uICBdCi0uYnIKLS5CIGJ6bGVzcwotWyBuYW1lIC4uLiAgXQotLlNIIE5PVEUKLUluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24sCi0uSSBiemxlc3MKLWFuZAotLkkgbGVzcwotY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHdpdGgKLS5JIGJ6bW9yZQotYW5kCi0uSSBtb3JlLgotLlNIIERFU0NSSVBUSU9OCi0uSSAgQnptb3JlCi1pcyBhIGZpbHRlciB3aGljaCBhbGxvd3MgZXhhbWluYXRpb24gb2YgY29tcHJlc3NlZCBvciBwbGFpbiB0ZXh0IGZpbGVzCi1vbmUgc2NyZWVuZnVsIGF0IGEgdGltZSBvbiBhIHNvZnQtY29weSB0ZXJtaW5hbC4KLS5JIGJ6bW9yZQotd29ya3Mgb24gZmlsZXMgY29tcHJlc3NlZCB3aXRoCi0uSSBiemlwMgotYW5kIGFsc28gb24gdW5jb21wcmVzc2VkIGZpbGVzLgotSWYgYSBmaWxlIGRvZXMgbm90IGV4aXN0LAotLkkgYnptb3JlCi1sb29rcyBmb3IgYSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgd2l0aCB0aGUgYWRkaXRpb24gb2YgYSAuYnoyIHN1ZmZpeC4KLS5QUAotLkkgQnptb3JlCi1ub3JtYWxseSBwYXVzZXMgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwsIHByaW50aW5nIC0tTW9yZS0tCi1hdCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uCi1JZiB0aGUgdXNlciB0aGVuIHR5cGVzIGEgY2FycmlhZ2UgcmV0dXJuLCBvbmUgbW9yZSBsaW5lIGlzIGRpc3BsYXllZC4KLUlmIHRoZSB1c2VyIGhpdHMgYSBzcGFjZSwKLWFub3RoZXIgc2NyZWVuZnVsIGlzIGRpc3BsYXllZC4gIE90aGVyIHBvc3NpYmlsaXRpZXMgYXJlIGVudW1lcmF0ZWQgbGF0ZXIuCi0uUFAKLS5JIEJ6bW9yZQotbG9va3MgaW4gdGhlIGZpbGUKLS5JIC9ldGMvdGVybWNhcAotdG8gZGV0ZXJtaW5lIHRlcm1pbmFsIGNoYXJhY3RlcmlzdGljcywKLWFuZCB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgd2luZG93IHNpemUuCi1PbiBhIHRlcm1pbmFsIGNhcGFibGUgb2YgZGlzcGxheWluZyAyNCBsaW5lcywKLXRoZSBkZWZhdWx0IHdpbmRvdyBzaXplIGlzIDIyIGxpbmVzLgotT3RoZXIgc2VxdWVuY2VzIHdoaWNoIG1heSBiZSB0eXBlZCB3aGVuCi0uSSBiem1vcmUKLXBhdXNlcywgYW5kIHRoZWlyIGVmZmVjdHMsIGFyZSBhcyBmb2xsb3dzIChcZklpXGZQIGlzIGFuIG9wdGlvbmFsIGludGVnZXIKLWFyZ3VtZW50LCBkZWZhdWx0aW5nIHRvIDEpIDoKLS5QUAotLklQIFxmSWlcfFxmUDxzcGFjZT4KLWRpc3BsYXkKLS5JIGkKLW1vcmUgbGluZXMsIChvciBhbm90aGVyIHNjcmVlbmZ1bCBpZiBubyBhcmd1bWVudCBpcyBnaXZlbikKLS5QUAotLklQIF5ECi1kaXNwbGF5IDExIG1vcmUgbGluZXMgKGEgYGBzY3JvbGwnJykuCi1JZgotLkkgaQotaXMgZ2l2ZW4sIHRoZW4gdGhlIHNjcm9sbCBzaXplIGlzIHNldCB0byBcZklpXHxcZlAuCi0uUFAKLS5JUCBkCi1zYW1lIGFzIF5EIChjb250cm9sLUQpCi0uUFAKLS5JUCBcZklpXHxcZlB6Ci1zYW1lIGFzIHR5cGluZyBhIHNwYWNlIGV4Y2VwdCB0aGF0IFxmSWlcfFxmUCwgaWYgcHJlc2VudCwgYmVjb21lcyB0aGUgbmV3Ci13aW5kb3cgc2l6ZS4gIE5vdGUgdGhhdCB0aGUgd2luZG93IHNpemUgcmV2ZXJ0cyBiYWNrIHRvIHRoZSBkZWZhdWx0IGF0IHRoZQotZW5kIG9mIHRoZSBjdXJyZW50IGZpbGUuCi0uUFAKLS5JUCBcZklpXHxcZlBzCi1za2lwIFxmSWlcfFxmUCBsaW5lcyBhbmQgcHJpbnQgYSBzY3JlZW5mdWwgb2YgbGluZXMKLS5QUAotLklQIFxmSWlcfFxmUGYKLXNraXAgXGZJaVxmUCBzY3JlZW5mdWxzIGFuZCBwcmludCBhIHNjcmVlbmZ1bCBvZiBsaW5lcwotLlBQCi0uSVAgInEgb3IgUSIKLXF1aXQgcmVhZGluZyB0aGUgY3VycmVudCBmaWxlOyBnbyBvbiB0byB0aGUgbmV4dCAoaWYgYW55KQotLlBQCi0uSVAgImUgb3IgcSIKLVdoZW4gdGhlIHByb21wdCAtLU1vcmUtLShOZXh0IGZpbGU6IAotLklSIGZpbGUgKQotaXMgcHJpbnRlZCwgdGhpcyBjb21tYW5kIGNhdXNlcyBiem1vcmUgdG8gZXhpdC4KLS5QUAotLklQIHMKLVdoZW4gdGhlIHByb21wdCAtLU1vcmUtLShOZXh0IGZpbGU6IAotLklSIGZpbGUgKQotaXMgcHJpbnRlZCwgdGhpcyBjb21tYW5kIGNhdXNlcyBiem1vcmUgdG8gc2tpcCB0aGUgbmV4dCBmaWxlIGFuZCBjb250aW51ZS4KLS5QUCAKLS5JUCA9Ci1EaXNwbGF5IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotLlBQCi0uSVAgXGZJaVx8XGZQL2V4cHIKLXNlYXJjaCBmb3IgdGhlIFxmSWlcfFxmUC10aCBvY2N1cnJlbmNlIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gXGZJZXhwci5cZlAKLUlmIHRoZSBwYXR0ZXJuIGlzIG5vdCBmb3VuZCwKLS5JIGJ6bW9yZQotZ29lcyBvbiB0byB0aGUgbmV4dCBmaWxlIChpZiBhbnkpLgotT3RoZXJ3aXNlLCBhIHNjcmVlbmZ1bCBpcyBkaXNwbGF5ZWQsIHN0YXJ0aW5nIHR3byBsaW5lcyBiZWZvcmUgdGhlIHBsYWNlCi13aGVyZSB0aGUgZXhwcmVzc2lvbiB3YXMgZm91bmQuCi1UaGUgdXNlcidzIGVyYXNlIGFuZCBraWxsIGNoYXJhY3RlcnMgbWF5IGJlIHVzZWQgdG8gZWRpdCB0aGUgcmVndWxhcgotZXhwcmVzc2lvbi4KLUVyYXNpbmcgYmFjayBwYXN0IHRoZSBmaXJzdCBjb2x1bW4gY2FuY2VscyB0aGUgc2VhcmNoIGNvbW1hbmQuCi0uUFAKLS5JUCBcZklpXHxcZlBuCi1zZWFyY2ggZm9yIHRoZSBcZklpXHxcZlAtdGggb2NjdXJyZW5jZSBvZiB0aGUgbGFzdCByZWd1bGFyIGV4cHJlc3Npb24gZW50ZXJlZC4KLS5QUAotLklQICFjb21tYW5kCi1pbnZva2UgYSBzaGVsbCB3aXRoIFxmSWNvbW1hbmRcfFxmUC4gCi1UaGUgY2hhcmFjdGVyIGAhJyBpbiAiY29tbWFuZCIgYXJlIHJlcGxhY2VkIHdpdGggdGhlCi1wcmV2aW91cyBzaGVsbCBjb21tYW5kLiAgVGhlIHNlcXVlbmNlICJcXCEiIGlzIHJlcGxhY2VkIGJ5ICIhIi4KLS5QUAotLklQICI6cSBvciA6USIKLXF1aXQgcmVhZGluZyB0aGUgY3VycmVudCBmaWxlOyBnbyBvbiB0byB0aGUgbmV4dCAoaWYgYW55KQotKHNhbWUgYXMgcSBvciBRKS4KLS5QUAotLklQIC4KLShkb3QpIHJlcGVhdCB0aGUgcHJldmlvdXMgY29tbWFuZC4KLS5QUAotVGhlIGNvbW1hbmRzIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LCBpLmUuLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvCi10eXBlIGEgY2FycmlhZ2UgcmV0dXJuLgotVXAgdG8gdGhlIHRpbWUgd2hlbiB0aGUgY29tbWFuZCBjaGFyYWN0ZXIgaXRzZWxmIGlzIGdpdmVuLAotdGhlIHVzZXIgbWF5IGhpdCB0aGUgbGluZSBraWxsIGNoYXJhY3RlciB0byBjYW5jZWwgdGhlIG51bWVyaWNhbAotYXJndW1lbnQgYmVpbmcgZm9ybWVkLgotSW4gYWRkaXRpb24sIHRoZSB1c2VyIG1heSBoaXQgdGhlIGVyYXNlIGNoYXJhY3RlciB0byByZWRpc3BsYXkgdGhlCi0tLU1vcmUtLSBtZXNzYWdlLgotLlBQCi1BdCBhbnkgdGltZSB3aGVuIG91dHB1dCBpcyBiZWluZyBzZW50IHRvIHRoZSB0ZXJtaW5hbCwgdGhlIHVzZXIgY2FuCi1oaXQgdGhlIHF1aXQga2V5IChub3JtYWxseSBjb250cm9sXC1cXCkuCi0uSSBCem1vcmUKLXdpbGwgc3RvcCBzZW5kaW5nIG91dHB1dCwgYW5kIHdpbGwgZGlzcGxheSB0aGUgdXN1YWwgLS1Nb3JlLS0KLXByb21wdC4KLVRoZSB1c2VyIG1heSB0aGVuIGVudGVyIG9uZSBvZiB0aGUgYWJvdmUgY29tbWFuZHMgaW4gdGhlIG5vcm1hbCBtYW5uZXIuCi1VbmZvcnR1bmF0ZWx5LCBzb21lIG91dHB1dCBpcyBsb3N0IHdoZW4gdGhpcyBpcyBkb25lLCBkdWUgdG8gdGhlCi1mYWN0IHRoYXQgYW55IGNoYXJhY3RlcnMgd2FpdGluZyBpbiB0aGUgdGVybWluYWwncyBvdXRwdXQgcXVldWUKLWFyZSBmbHVzaGVkIHdoZW4gdGhlIHF1aXQgc2lnbmFsIG9jY3Vycy4KLS5QUAotVGhlIHRlcm1pbmFsIGlzIHNldCB0bwotLkkgbm9lY2hvCi1tb2RlIGJ5IHRoaXMgcHJvZ3JhbSBzbyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIGNvbnRpbnVvdXMuCi1XaGF0IHlvdSB0eXBlIHdpbGwgdGh1cyBub3Qgc2hvdyBvbiB5b3VyIHRlcm1pbmFsLCBleGNlcHQgZm9yIHRoZSAvIGFuZCAhCi1jb21tYW5kcy4KLS5QUAotSWYgdGhlIHN0YW5kYXJkIG91dHB1dCBpcyBub3QgYSB0ZWxldHlwZSwgdGhlbgotLkkgYnptb3JlCi1hY3RzIGp1c3QgbGlrZQotLkkgYnpjYXQsCi1leGNlcHQgdGhhdCBhIGhlYWRlciBpcyBwcmludGVkIGJlZm9yZSBlYWNoIGZpbGUuCi0uU0ggRklMRVMKLS5EVAotL2V0Yy90ZXJtY2FwICAgICAgICBUZXJtaW5hbCBkYXRhIGJhc2UKLS5TSCAiU0VFIEFMU08iCi1tb3JlKDEpLCBsZXNzKDEpLCBiemlwMigxKSwgYnpkaWZmKDEpLCBiemdyZXAoMSkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2NvbXByZXNzLmMgYi9VdGlsaXRpZXMvY21iemlwMi9jb21wcmVzcy5jCmluZGV4IGZlZWEyMzMuLjVkZmEwMDIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2NvbXByZXNzLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvY29tcHJlc3MuYwpAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KQEAgLTIzOSw3ICsyMzksNyBAQAogdm9pZCBzZW5kTVRGVmFsdWVzICggRVN0YXRlKiBzICkKIHsKICAgIEludDMyIHYsIHQsIGksIGosIGdzLCBnZSwgdG90YywgYnQsIGJjLCBpdGVyOwotICAgSW50MzIgblNlbGVjdG9ycyA9IDAsIGFscGhhU2l6ZSwgbWluTGVuLCBtYXhMZW4sIHNlbEN0cjsKKyAgIEludDMyIG5TZWxlY3RvcnMsIGFscGhhU2l6ZSwgbWluTGVuLCBtYXhMZW4sIHNlbEN0cjsKICAgIEludDMyIG5Hcm91cHMsIG5CeXRlczsKIAogICAgLyotLQpAQCAtMzI5LDE0ICszMjksMTQgQEAKIAogICAgICAgLyotLS0KICAgICAgICAgU2V0IHVwIGFuIGF1eGlsaWFyeSBsZW5ndGggdGFibGUgd2hpY2ggaXMgdXNlZCB0byBmYXN0LXRyYWNrCi0gICAgdGhlIGNvbW1vbiBjYXNlIChuR3JvdXBzID09IDYpLiAKKwl0aGUgY29tbW9uIGNhc2UgKG5Hcm91cHMgPT0gNikuIAogICAgICAgLS0tKi8KICAgICAgIGlmIChuR3JvdXBzID09IDYpIHsKICAgICAgICAgIGZvciAodiA9IDA7IHYgPCBhbHBoYVNpemU7IHYrKykgewogICAgICAgICAgICAgcy0+bGVuX3BhY2tbdl1bMF0gPSAocy0+bGVuWzFdW3ZdIDw8IDE2KSB8IHMtPmxlblswXVt2XTsKICAgICAgICAgICAgIHMtPmxlbl9wYWNrW3ZdWzFdID0gKHMtPmxlblszXVt2XSA8PCAxNikgfCBzLT5sZW5bMl1bdl07CiAgICAgICAgICAgICBzLT5sZW5fcGFja1t2XVsyXSA9IChzLT5sZW5bNV1bdl0gPDwgMTYpIHwgcy0+bGVuWzRdW3ZdOwotICAgICB9CisJIH0KICAgICAgIH0KIAogICAgICAgblNlbGVjdG9ycyA9IDA7CkBAIC0zODUsNyArMzg1LDcgQEAKICAgICAgICAgICAgIGNvc3RbNF0gPSBjb3N0NDUgJiAweGZmZmY7IGNvc3RbNV0gPSBjb3N0NDUgPj4gMTY7CiAKICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qLS0tIHNsb3cgdmVyc2lvbiB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBhbGwgc2l0dWF0aW9ucyAtLS0qLworCSAgICAvKi0tLSBzbG93IHZlcnNpb24gd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgYWxsIHNpdHVhdGlvbnMgLS0tKi8KICAgICAgICAgICAgIGZvciAoaSA9IGdzOyBpIDw9IGdlOyBpKyspIHsgCiAgICAgICAgICAgICAgICBVSW50MTYgaWN2ID0gbXRmdltpXTsKICAgICAgICAgICAgICAgIGZvciAodCA9IDA7IHQgPCBuR3JvdXBzOyB0KyspIGNvc3RbdF0gKz0gcy0+bGVuW3RdW2ljdl07CkBAIC00MjYsNyArNDI2LDcgQEAKICMgICAgICAgICAgIHVuZGVmIEJaX0lUVVIKIAogICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyotLS0gc2xvdyB2ZXJzaW9uIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIGFsbCBzaXR1YXRpb25zIC0tLSovCisJICAgIC8qLS0tIHNsb3cgdmVyc2lvbiB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBhbGwgc2l0dWF0aW9ucyAtLS0qLwogICAgICAgICAgICAgZm9yIChpID0gZ3M7IGkgPD0gZ2U7IGkrKykKICAgICAgICAgICAgICAgIHMtPnJmcmVxW2J0XVsgbXRmdltpXSBdKys7CiAgICAgICAgICB9CkBAIC00NTQsNyArNDU0LDcgQEAKIAogICAgQXNzZXJ0SCggbkdyb3VwcyA8IDgsIDMwMDIgKTsKICAgIEFzc2VydEgoIG5TZWxlY3RvcnMgPCAzMjc2OCAmJgotICAgICAgICAgICAgblNlbGVjdG9ycyA8PSAoMiArICg5MDAwMDAgLyBCWl9HX1NJWkUpKSwKKyAgICAgICAgICAgIG5TZWxlY3RvcnMgPD0gQlpfTUFYX1NFTEVDVE9SUywKICAgICAgICAgICAgIDMwMDMgKTsKIAogCkBAIC01NzksNyArNTc5LDcgQEAKICMgICAgICAgICAgIHVuZGVmIEJaX0lUQUgKIAogICAgICAgfSBlbHNlIHsKLSAgICAgLyotLS0gc2xvdyB2ZXJzaW9uIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIGFsbCBzaXR1YXRpb25zIC0tLSovCisJIC8qLS0tIHNsb3cgdmVyc2lvbiB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBhbGwgc2l0dWF0aW9ucyAtLS0qLwogICAgICAgICAgZm9yIChpID0gZ3M7IGkgPD0gZ2U7IGkrKykgewogICAgICAgICAgICAgYnNXICggcywgCiAgICAgICAgICAgICAgICAgICBzLT5sZW4gIFtzLT5zZWxlY3RvcltzZWxDdHJdXSBbbXRmdltpXV0sCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9jcmN0YWJsZS5jIGIvVXRpbGl0aWVzL2NtYnppcDIvY3JjdGFibGUuYwppbmRleCAyMTU2ODdiLi4yYjMzYzI1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9jcmN0YWJsZS5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2NyY3RhYmxlLmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9kZWNvbXByZXNzLmMgYi9VdGlsaXRpZXMvY21iemlwMi9kZWNvbXByZXNzLmMKaW5kZXggYmJhNWUwZi4uYTFhMGJhYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvZGVjb21wcmVzcy5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL2RlY29tcHJlc3MuYwpAQCAtOCw4ICs4LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KQEAgLTI4NSw3ICsyODUsNyBAQAogCiAgICAgICAvKi0tLSBOb3cgdGhlIHNlbGVjdG9ycyAtLS0qLwogICAgICAgR0VUX0JJVFMoQlpfWF9TRUxFQ1RPUl8xLCBuR3JvdXBzLCAzKTsKLSAgICAgIGlmIChuR3JvdXBzIDwgMiB8fCBuR3JvdXBzID4gNikgUkVUVVJOKEJaX0RBVEFfRVJST1IpOworICAgICAgaWYgKG5Hcm91cHMgPCAyIHx8IG5Hcm91cHMgPiBCWl9OX0dST1VQUykgUkVUVVJOKEJaX0RBVEFfRVJST1IpOwogICAgICAgR0VUX0JJVFMoQlpfWF9TRUxFQ1RPUl8yLCBuU2VsZWN0b3JzLCAxNSk7CiAgICAgICBpZiAoblNlbGVjdG9ycyA8IDEpIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKICAgICAgIGZvciAoaSA9IDA7IGkgPCBuU2VsZWN0b3JzOyBpKyspIHsKQEAgLTI5Niw4ICsyOTYsMTQgQEAKICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgIGlmIChqID49IG5Hcm91cHMpIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKICAgICAgICAgIH0KLSAgICAgICAgIHMtPnNlbGVjdG9yTXRmW2ldID0gajsKKyAgICAgICAgIC8qIEhhdmluZyBtb3JlIHRoYW4gQlpfTUFYX1NFTEVDVE9SUyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZQorICAgICAgICAgICAgc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHVzZWQsIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtaWdodAorICAgICAgICAgICAgInJvdW5kIHVwIiB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycywgc28ganVzdCBpZ25vcmUgdGhvc2UuICovCisgICAgICAgICBpZiAoaSA8IEJaX01BWF9TRUxFQ1RPUlMpCisgICAgICAgICAgIHMtPnNlbGVjdG9yTXRmW2ldID0gajsKICAgICAgIH0KKyAgICAgIGlmIChuU2VsZWN0b3JzID4gQlpfTUFYX1NFTEVDVE9SUykKKyAgICAgICAgblNlbGVjdG9ycyA9IEJaX01BWF9TRUxFQ1RPUlM7CiAKICAgICAgIC8qLS0tIFVuZG8gdGhlIE1URiB2YWx1ZXMgZm9yIHRoZSBzZWxlY3RvcnMuIC0tLSovCiAgICAgICB7CkBAIC0zODEsNiArMzg3LDEzIEBACiAgICAgICAgICAgICBlcyA9IC0xOwogICAgICAgICAgICAgTiA9IDE7CiAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAvKiBDaGVjayB0aGF0IE4gZG9lc24ndCBnZXQgdG9vIGJpZywgc28gdGhhdCBlcyBkb2Vzbid0CisgICAgICAgICAgICAgICAgICBnbyBuZWdhdGl2ZS4gIFRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgY2FuIGJlCisgICAgICAgICAgICAgICAgICBSVU5BL1JVTkIgZW5jb2RlZCBpcyBlcXVhbCB0byB0aGUgYmxvY2sgc2l6ZSAocG9zdAorICAgICAgICAgICAgICAgICAgdGhlIGluaXRpYWwgUkxFKSwgdml6LCA5MDBrLCBzbyBib3VuZGluZyBOIGF0IDIKKyAgICAgICAgICAgICAgICAgIG1pbGxpb24gc2hvdWxkIGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cgd2l0aG91dAorICAgICAgICAgICAgICAgICAgcmVqZWN0aW5nIGFueSBsZWdpdGltYXRlIGlucHV0cy4gKi8KKyAgICAgICAgICAgICAgIGlmIChOID49IDIqMTAyNCoxMDI0KSBSRVRVUk4oQlpfREFUQV9FUlJPUik7CiAgICAgICAgICAgICAgICBpZiAobmV4dFN5bSA9PSBCWl9SVU5BKSBlcyA9IGVzICsgKDArMSkgKiBOOyBlbHNlCiAgICAgICAgICAgICAgICBpZiAobmV4dFN5bSA9PSBCWl9SVU5CKSBlcyA9IGVzICsgKDErMSkgKiBOOwogICAgICAgICAgICAgICAgTiA9IE4gKiAyOwpAQCAtNDg1LDE1ICs0OTgsMjggQEAKICAgICAgICAgIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKIAogICAgICAgLyotLSBTZXQgdXAgY2Z0YWIgdG8gZmFjaWxpdGF0ZSBnZW5lcmF0aW9uIG9mIFReKC0xKSAtLSovCisgICAgICAvKiBDaGVjazogdW56ZnRhYiBlbnRyaWVzIGluIHJhbmdlLiAqLworICAgICAgZm9yIChpID0gMDsgaSA8PSAyNTU7IGkrKykgeworICAgICAgICAgaWYgKHMtPnVuemZ0YWJbaV0gPCAwIHx8IHMtPnVuemZ0YWJbaV0gPiBuYmxvY2spCisgICAgICAgICAgICBSRVRVUk4oQlpfREFUQV9FUlJPUik7CisgICAgICB9CisgICAgICAvKiBBY3R1YWxseSBnZW5lcmF0ZSBjZnRhYi4gKi8KICAgICAgIHMtPmNmdGFiWzBdID0gMDsKICAgICAgIGZvciAoaSA9IDE7IGkgPD0gMjU2OyBpKyspIHMtPmNmdGFiW2ldID0gcy0+dW56ZnRhYltpLTFdOwogICAgICAgZm9yIChpID0gMTsgaSA8PSAyNTY7IGkrKykgcy0+Y2Z0YWJbaV0gKz0gcy0+Y2Z0YWJbaS0xXTsKKyAgICAgIC8qIENoZWNrOiBjZnRhYiBlbnRyaWVzIGluIHJhbmdlLiAqLwogICAgICAgZm9yIChpID0gMDsgaSA8PSAyNTY7IGkrKykgewogICAgICAgICAgaWYgKHMtPmNmdGFiW2ldIDwgMCB8fCBzLT5jZnRhYltpXSA+IG5ibG9jaykgewogICAgICAgICAgICAgLyogcy0+Y2Z0YWJbaV0gY2FuIGxlZ2l0aW1hdGVseSBiZSA9PSBuYmxvY2sgKi8KICAgICAgICAgICAgIFJFVFVSTihCWl9EQVRBX0VSUk9SKTsKICAgICAgICAgIH0KICAgICAgIH0KKyAgICAgIC8qIENoZWNrOiBjZnRhYiBlbnRyaWVzIG5vbi1kZXNjZW5kaW5nLiAqLworICAgICAgZm9yIChpID0gMTsgaSA8PSAyNTY7IGkrKykgeworICAgICAgICAgaWYgKHMtPmNmdGFiW2ktMV0gPiBzLT5jZnRhYltpXSkgeworICAgICAgICAgICAgUkVUVVJOKEJaX0RBVEFfRVJST1IpOworICAgICAgICAgfQorICAgICAgfQogCiAgICAgICBzLT5zdGF0ZV9vdXRfbGVuID0gMDsKICAgICAgIHMtPnN0YXRlX291dF9jaCAgPSAwOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvZGxsdGVzdC5jIGIvVXRpbGl0aWVzL2NtYnppcDIvZGxsdGVzdC5jCmluZGV4IDRlMjdkYTIuLjAzZmExNDYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2RsbHRlc3QuYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9kbGx0ZXN0LmMKQEAgLTEsMTc1ICsxLDE3NSBAQAotLyoKLSAgIG1pbmliejIKLSAgICAgIGxpYmJ6Mi5kbGwgdGVzdCBwcm9ncmFtLgotICAgICAgYnkgWW9zaGlva2EgVHN1bmVvICh0c3VuZW9AcnIuaWlqNHUub3IuanApCi0gICAgICBUaGlzIGZpbGUgaXMgUHVibGljIERvbWFpbi4gIFdlbGNvbWUgYW55IGVtYWlsIHRvIG1lLgotCi0gICB1c2FnZTogbWluaWJ6MiBbLWRdIFstezEsMiwuLjl9XSBbW3NyY2ZpbGVuYW1lXSBkZXN0ZmlsZW5hbWVdCi0qLwotCi0jZGVmaW5lIEJaX0lNUE9SVAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiYnpsaWIuaCIKLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmCi0KLQotI2lmZGVmIF9XSU4zMgotCi0jZGVmaW5lIEJaMl9MSUJOQU1FICJsaWJiejItMS4wLjIuRExMIiAKLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLXN0YXRpYyBpbnQgQloyRExMTG9hZGVkID0gMDsKLXN0YXRpYyBISU5TVEFOQ0UgQloyRExMaExpYjsKLWludCBCWjJETExMb2FkTGlicmFyeSh2b2lkKQotewotICAgSElOU1RBTkNFIGhMaWI7Ci0KLSAgIGlmKEJaMkRMTExvYWRlZD09MSl7cmV0dXJuIDA7fQotICAgaExpYj1Mb2FkTGlicmFyeShCWjJfTElCTkFNRSk7Ci0gICBpZihoTGliID09IE5VTEwpewotICAgICAgZnByaW50ZihzdGRlcnIsIkNhbid0IGxvYWQgJXNcbiIsQloyX0xJQk5BTUUpOwotICAgICAgcmV0dXJuIC0xOwotICAgfQotICAgQloyX2J6bGliVmVyc2lvbj1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpsaWJWZXJzaW9uIik7Ci0gICBCWjJfYnpvcGVuPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iem9wZW4iKTsKLSAgIEJaMl9iemRvcGVuPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemRvcGVuIik7Ci0gICBCWjJfYnpyZWFkPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9ienJlYWQiKTsKLSAgIEJaMl9iendyaXRlPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iendyaXRlIik7Ci0gICBCWjJfYnpmbHVzaD1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpmbHVzaCIpOwotICAgQloyX2J6Y2xvc2U9R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6Y2xvc2UiKTsKLSAgIEJaMl9iemVycm9yPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemVycm9yIik7Ci0KLSAgIGlmICghQloyX2J6bGliVmVyc2lvbiB8fCAhQloyX2J6b3BlbiB8fCAhQloyX2J6ZG9wZW4KLSAgICAgICB8fCAhQloyX2J6cmVhZCB8fCAhQloyX2J6d3JpdGUgfHwgIUJaMl9iemZsdXNoCi0gICAgICAgfHwgIUJaMl9iemNsb3NlIHx8ICFCWjJfYnplcnJvcikgewotICAgICAgZnByaW50ZihzdGRlcnIsIkdldFByb2NBZGRyZXNzIGZhaWxlZC5cbiIpOwotICAgICAgcmV0dXJuIC0xOwotICAgfQotICAgQloyRExMTG9hZGVkPTE7Ci0gICBCWjJETExoTGliPWhMaWI7Ci0gICByZXR1cm4gMDsKLQotfQotaW50IEJaMkRMTEZyZWVMaWJyYXJ5KHZvaWQpCi17Ci0gICBpZihCWjJETExMb2FkZWQ9PTApe3JldHVybiAwO30KLSAgIEZyZWVMaWJyYXJ5KEJaMkRMTGhMaWIpOwotICAgQloyRExMTG9hZGVkPTA7Ci19Ci0jZW5kaWYgLyogV0lOMzIgKi8KLQotdm9pZCB1c2FnZSh2b2lkKQotewotICAgcHV0cygidXNhZ2U6IG1pbmliejIgWy1kXSBbLXsxLDIsLi45fV0gW1tzcmNmaWxlbmFtZV0gZGVzdGZpbGVuYW1lXSIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCi17Ci0gICBpbnQgZGVjb21wcmVzcyA9IDA7Ci0gICBpbnQgbGV2ZWwgPSA5OwotICAgY2hhciAqZm5fciA9IE5VTEw7Ci0gICBjaGFyICpmbl93ID0gTlVMTDsKLQotI2lmZGVmIF9XSU4zMgotICAgaWYoQloyRExMTG9hZExpYnJhcnkoKTwwKXsKLSAgICAgIGZwcmludGYoc3RkZXJyLCJMb2FkaW5nIG9mICVzIGZhaWxlZC4gIEdpdmluZyB1cC5cbiIsIEJaMl9MSUJOQU1FKTsKLSAgICAgIGV4aXQoMSk7Ci0gICB9Ci0gICBwcmludGYoIkxvYWRpbmcgb2YgJXMgc3VjY2VlZGVkLiAgTGlicmFyeSB2ZXJzaW9uIGlzICVzLlxuIiwKLSAgICAgICAgICBCWjJfTElCTkFNRSwgQloyX2J6bGliVmVyc2lvbigpICk7Ci0jZW5kaWYKLSAgIHdoaWxlKCsrYXJndiwtLWFyZ2MpewotICAgICAgaWYoKiphcmd2ID09Jy0nIHx8ICoqYXJndj09Jy8nKXsKLSAgICAgICAgIGNoYXIgKnA7Ci0KLSAgICAgICAgIGZvcihwPSphcmd2KzE7KnA7cCsrKXsKLSAgICAgICAgICAgIGlmKCpwPT0nZCcpewotICAgICAgICAgICAgICAgZGVjb21wcmVzcyA9IDE7Ci0gICAgICAgICAgICB9ZWxzZSBpZignMSc8PSpwICYmICpwPD0nOScpewotICAgICAgICAgICAgICAgbGV2ZWwgPSAqcCAtICcwJzsKLSAgICAgICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICB9ZWxzZXsKLSAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgfQotICAgaWYoYXJnYz49MSl7Ci0gICAgICBmbl9yID0gKmFyZ3Y7Ci0gICAgICBhcmdjLS07YXJndisrOwotICAgfWVsc2V7Ci0gICAgICBmbl9yID0gTlVMTDsKLSAgIH0KLSAgIGlmKGFyZ2M+PTEpewotICAgICAgZm5fdyA9ICphcmd2OwotICAgICAgYXJnYy0tO2FyZ3YrKzsKLSAgIH1lbHNlewotICAgICAgZm5fdyA9IE5VTEw7Ci0gICB9Ci0gICB7Ci0gICAgICBpbnQgbGVuOwotICAgICAgY2hhciBidWZmWzB4MTAwMF07Ci0gICAgICBjaGFyIG1vZGVbMTBdOwotCi0gICAgICBpZihkZWNvbXByZXNzKXsKLSAgICAgICAgIEJaRklMRSAqQloyZnBfciA9IE5VTEw7Ci0gICAgICAgICBGSUxFICpmcF93ID0gTlVMTDsKLQotICAgICAgICAgaWYoZm5fdyl7Ci0gICAgICAgICAgICBpZigoZnBfdyA9IGZvcGVuKGZuX3csIndiIikpPT1OVUxMKXsKLSAgICAgICAgICAgICAgIHByaW50ZigiY2FuJ3Qgb3BlbiBbJXNdXG4iLGZuX3cpOwotICAgICAgICAgICAgICAgcGVycm9yKCJyZWFzb246Iik7Ci0gICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICBmcF93ID0gc3Rkb3V0OwotICAgICAgICAgfQotICAgICAgICAgaWYoKGZuX3IgPT0gTlVMTCAmJiAoQloyZnBfciA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRpbiksInJiIikpPT1OVUxMKQotICAgICAgICAgICAgfHwgKGZuX3IgIT0gTlVMTCAmJiAoQloyZnBfciA9IEJaMl9iem9wZW4oZm5fciwicmIiKSk9PU5VTEwpKXsKLSAgICAgICAgICAgIHByaW50ZigiY2FuJ3QgYnoyb3BlbnN0cmVhbVxuIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgfQotICAgICAgICAgd2hpbGUoKGxlbj1CWjJfYnpyZWFkKEJaMmZwX3IsYnVmZiwweDEwMDApKT4wKXsKLSAgICAgICAgICAgIGZ3cml0ZShidWZmLDEsbGVuLGZwX3cpOwotICAgICAgICAgfQotICAgICAgICAgQloyX2J6Y2xvc2UoQloyZnBfcik7Ci0gICAgICAgICBpZihmcF93ICE9IHN0ZG91dCkgZmNsb3NlKGZwX3cpOwotICAgICAgfWVsc2V7Ci0gICAgICAgICBCWkZJTEUgKkJaMmZwX3cgPSBOVUxMOwotICAgICAgICAgRklMRSAqZnBfciA9IE5VTEw7Ci0KLSAgICAgICAgIGlmKGZuX3IpewotICAgICAgICAgICAgaWYoKGZwX3IgPSBmb3Blbihmbl9yLCJyYiIpKT09TlVMTCl7Ci0gICAgICAgICAgICAgICBwcmludGYoImNhbid0IG9wZW4gWyVzXVxuIixmbl9yKTsKLSAgICAgICAgICAgICAgIHBlcnJvcigicmVhc29uOiIpOwotICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH1lbHNlewotICAgICAgICAgICAgZnBfciA9IHN0ZGluOwotICAgICAgICAgfQotICAgICAgICAgbW9kZVswXT0ndyc7Ci0gICAgICAgICBtb2RlWzFdID0gJzAnICsgbGV2ZWw7Ci0gICAgICAgICBtb2RlWzJdID0gJ1wwJzsKLQotICAgICAgICAgaWYoKGZuX3cgPT0gTlVMTCAmJiAoQloyZnBfdyA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRvdXQpLG1vZGUpKT09TlVMTCkKLSAgICAgICAgICAgIHx8IChmbl93ICE9TlVMTCAmJiAoQloyZnBfdyA9IEJaMl9iem9wZW4oZm5fdyxtb2RlKSk9PU5VTEwpKXsKLSAgICAgICAgICAgIHByaW50ZigiY2FuJ3QgYnoyb3BlbnN0cmVhbVxuIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgfQotICAgICAgICAgd2hpbGUoKGxlbj1mcmVhZChidWZmLDEsMHgxMDAwLGZwX3IpKT4wKXsKLSAgICAgICAgICAgIEJaMl9iendyaXRlKEJaMmZwX3csYnVmZixsZW4pOwotICAgICAgICAgfQotICAgICAgICAgQloyX2J6Y2xvc2UoQloyZnBfdyk7Ci0gICAgICAgICBpZihmcF9yIT1zdGRpbilmY2xvc2UoZnBfcik7Ci0gICAgICB9Ci0gICB9Ci0jaWZkZWYgX1dJTjMyCi0gICBCWjJETExGcmVlTGlicmFyeSgpOwotI2VuZGlmCi0gICByZXR1cm4gMDsKLX0KKy8qDQorICAgbWluaWJ6Mg0KKyAgICAgIGxpYmJ6Mi5kbGwgdGVzdCBwcm9ncmFtLg0KKyAgICAgIGJ5IFlvc2hpb2thIFRzdW5lbyAodHN1bmVvQHJyLmlpajR1Lm9yLmpwKQ0KKyAgICAgIFRoaXMgZmlsZSBpcyBQdWJsaWMgRG9tYWluLiAgV2VsY29tZSBhbnkgZW1haWwgdG8gbWUuDQorDQorICAgdXNhZ2U6IG1pbmliejIgWy1kXSBbLXsxLDIsLi45fV0gW1tzcmNmaWxlbmFtZV0gZGVzdGZpbGVuYW1lXQ0KKyovDQorDQorI2RlZmluZSBCWl9JTVBPUlQNCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgImJ6bGliLmgiDQorI2lmZGVmIF9XSU4zMg0KKyNpbmNsdWRlIDxpby5oPg0KKyNlbmRpZg0KKw0KKw0KKyNpZmRlZiBfV0lOMzINCisNCisjZGVmaW5lIEJaMl9MSUJOQU1FICJsaWJiejItMS4wLjIuRExMIiANCisNCisjaW5jbHVkZSA8d2luZG93cy5oPg0KK3N0YXRpYyBpbnQgQloyRExMTG9hZGVkID0gMDsNCitzdGF0aWMgSElOU1RBTkNFIEJaMkRMTGhMaWI7DQoraW50IEJaMkRMTExvYWRMaWJyYXJ5KHZvaWQpDQorew0KKyAgIEhJTlNUQU5DRSBoTGliOw0KKw0KKyAgIGlmKEJaMkRMTExvYWRlZD09MSl7cmV0dXJuIDA7fQ0KKyAgIGhMaWI9TG9hZExpYnJhcnkoQloyX0xJQk5BTUUpOw0KKyAgIGlmKGhMaWIgPT0gTlVMTCl7DQorICAgICAgZnByaW50ZihzdGRlcnIsIkNhbid0IGxvYWQgJXNcbiIsQloyX0xJQk5BTUUpOw0KKyAgICAgIHJldHVybiAtMTsNCisgICB9DQorICAgQloyX2J6bGliVmVyc2lvbj1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpsaWJWZXJzaW9uIik7DQorICAgQloyX2J6b3Blbj1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnpvcGVuIik7DQorICAgQloyX2J6ZG9wZW49R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6ZG9wZW4iKTsNCisgICBCWjJfYnpyZWFkPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9ienJlYWQiKTsNCisgICBCWjJfYnp3cml0ZT1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnp3cml0ZSIpOw0KKyAgIEJaMl9iemZsdXNoPUdldFByb2NBZGRyZXNzKGhMaWIsIkJaMl9iemZsdXNoIik7DQorICAgQloyX2J6Y2xvc2U9R2V0UHJvY0FkZHJlc3MoaExpYiwiQloyX2J6Y2xvc2UiKTsNCisgICBCWjJfYnplcnJvcj1HZXRQcm9jQWRkcmVzcyhoTGliLCJCWjJfYnplcnJvciIpOw0KKw0KKyAgIGlmICghQloyX2J6bGliVmVyc2lvbiB8fCAhQloyX2J6b3BlbiB8fCAhQloyX2J6ZG9wZW4NCisgICAgICAgfHwgIUJaMl9ienJlYWQgfHwgIUJaMl9iendyaXRlIHx8ICFCWjJfYnpmbHVzaA0KKyAgICAgICB8fCAhQloyX2J6Y2xvc2UgfHwgIUJaMl9iemVycm9yKSB7DQorICAgICAgZnByaW50ZihzdGRlcnIsIkdldFByb2NBZGRyZXNzIGZhaWxlZC5cbiIpOw0KKyAgICAgIHJldHVybiAtMTsNCisgICB9DQorICAgQloyRExMTG9hZGVkPTE7DQorICAgQloyRExMaExpYj1oTGliOw0KKyAgIHJldHVybiAwOw0KKw0KK30NCitpbnQgQloyRExMRnJlZUxpYnJhcnkodm9pZCkNCit7DQorICAgaWYoQloyRExMTG9hZGVkPT0wKXtyZXR1cm4gMDt9DQorICAgRnJlZUxpYnJhcnkoQloyRExMaExpYik7DQorICAgQloyRExMTG9hZGVkPTA7DQorfQ0KKyNlbmRpZiAvKiBXSU4zMiAqLw0KKw0KK3ZvaWQgdXNhZ2Uodm9pZCkNCit7DQorICAgcHV0cygidXNhZ2U6IG1pbmliejIgWy1kXSBbLXsxLDIsLi45fV0gW1tzcmNmaWxlbmFtZV0gZGVzdGZpbGVuYW1lXSIpOw0KK30NCisNCitpbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pDQorew0KKyAgIGludCBkZWNvbXByZXNzID0gMDsNCisgICBpbnQgbGV2ZWwgPSA5Ow0KKyAgIGNoYXIgKmZuX3IgPSBOVUxMOw0KKyAgIGNoYXIgKmZuX3cgPSBOVUxMOw0KKw0KKyNpZmRlZiBfV0lOMzINCisgICBpZihCWjJETExMb2FkTGlicmFyeSgpPDApew0KKyAgICAgIGZwcmludGYoc3RkZXJyLCJMb2FkaW5nIG9mICVzIGZhaWxlZC4gIEdpdmluZyB1cC5cbiIsIEJaMl9MSUJOQU1FKTsNCisgICAgICBleGl0KDEpOw0KKyAgIH0NCisgICBwcmludGYoIkxvYWRpbmcgb2YgJXMgc3VjY2VlZGVkLiAgTGlicmFyeSB2ZXJzaW9uIGlzICVzLlxuIiwNCisgICAgICAgICAgQloyX0xJQk5BTUUsIEJaMl9iemxpYlZlcnNpb24oKSApOw0KKyNlbmRpZg0KKyAgIHdoaWxlKCsrYXJndiwtLWFyZ2Mpew0KKyAgICAgIGlmKCoqYXJndiA9PSctJyB8fCAqKmFyZ3Y9PScvJyl7DQorICAgICAgICAgY2hhciAqcDsNCisNCisgICAgICAgICBmb3IocD0qYXJndisxOypwO3ArKyl7DQorICAgICAgICAgICAgaWYoKnA9PSdkJyl7DQorICAgICAgICAgICAgICAgZGVjb21wcmVzcyA9IDE7DQorICAgICAgICAgICAgfWVsc2UgaWYoJzEnPD0qcCAmJiAqcDw9JzknKXsNCisgICAgICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOw0KKyAgICAgICAgICAgIH1lbHNlew0KKyAgICAgICAgICAgICAgIHVzYWdlKCk7DQorICAgICAgICAgICAgICAgZXhpdCgxKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgfQ0KKyAgICAgIH1lbHNlew0KKyAgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisgICB9DQorICAgaWYoYXJnYz49MSl7DQorICAgICAgZm5fciA9ICphcmd2Ow0KKyAgICAgIGFyZ2MtLTthcmd2Kys7DQorICAgfWVsc2V7DQorICAgICAgZm5fciA9IE5VTEw7DQorICAgfQ0KKyAgIGlmKGFyZ2M+PTEpew0KKyAgICAgIGZuX3cgPSAqYXJndjsNCisgICAgICBhcmdjLS07YXJndisrOw0KKyAgIH1lbHNlew0KKyAgICAgIGZuX3cgPSBOVUxMOw0KKyAgIH0NCisgICB7DQorICAgICAgaW50IGxlbjsNCisgICAgICBjaGFyIGJ1ZmZbMHgxMDAwXTsNCisgICAgICBjaGFyIG1vZGVbMTBdOw0KKw0KKyAgICAgIGlmKGRlY29tcHJlc3Mpew0KKyAgICAgICAgIEJaRklMRSAqQloyZnBfciA9IE5VTEw7DQorICAgICAgICAgRklMRSAqZnBfdyA9IE5VTEw7DQorDQorICAgICAgICAgaWYoZm5fdyl7DQorICAgICAgICAgICAgaWYoKGZwX3cgPSBmb3Blbihmbl93LCJ3YiIpKT09TlVMTCl7DQorICAgICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBvcGVuIFslc11cbiIsZm5fdyk7DQorICAgICAgICAgICAgICAgcGVycm9yKCJyZWFzb246Iik7DQorICAgICAgICAgICAgICAgZXhpdCgxKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgfWVsc2V7DQorICAgICAgICAgICAgZnBfdyA9IHN0ZG91dDsNCisgICAgICAgICB9DQorICAgICAgICAgaWYoKGZuX3IgPT0gTlVMTCAmJiAoQloyZnBfciA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRpbiksInJiIikpPT1OVUxMKQ0KKyAgICAgICAgICAgIHx8IChmbl9yICE9IE5VTEwgJiYgKEJaMmZwX3IgPSBCWjJfYnpvcGVuKGZuX3IsInJiIikpPT1OVUxMKSl7DQorICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBiejJvcGVuc3RyZWFtXG4iKTsNCisgICAgICAgICAgICBleGl0KDEpOw0KKyAgICAgICAgIH0NCisgICAgICAgICB3aGlsZSgobGVuPUJaMl9ienJlYWQoQloyZnBfcixidWZmLDB4MTAwMCkpPjApew0KKyAgICAgICAgICAgIGZ3cml0ZShidWZmLDEsbGVuLGZwX3cpOw0KKyAgICAgICAgIH0NCisgICAgICAgICBCWjJfYnpjbG9zZShCWjJmcF9yKTsNCisgICAgICAgICBpZihmcF93ICE9IHN0ZG91dCkgZmNsb3NlKGZwX3cpOw0KKyAgICAgIH1lbHNlew0KKyAgICAgICAgIEJaRklMRSAqQloyZnBfdyA9IE5VTEw7DQorICAgICAgICAgRklMRSAqZnBfciA9IE5VTEw7DQorDQorICAgICAgICAgaWYoZm5fcil7DQorICAgICAgICAgICAgaWYoKGZwX3IgPSBmb3Blbihmbl9yLCJyYiIpKT09TlVMTCl7DQorICAgICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBvcGVuIFslc11cbiIsZm5fcik7DQorICAgICAgICAgICAgICAgcGVycm9yKCJyZWFzb246Iik7DQorICAgICAgICAgICAgICAgZXhpdCgxKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgfWVsc2V7DQorICAgICAgICAgICAgZnBfciA9IHN0ZGluOw0KKyAgICAgICAgIH0NCisgICAgICAgICBtb2RlWzBdPSd3JzsNCisgICAgICAgICBtb2RlWzFdID0gJzAnICsgbGV2ZWw7DQorICAgICAgICAgbW9kZVsyXSA9ICdcMCc7DQorDQorICAgICAgICAgaWYoKGZuX3cgPT0gTlVMTCAmJiAoQloyZnBfdyA9IEJaMl9iemRvcGVuKGZpbGVubyhzdGRvdXQpLG1vZGUpKT09TlVMTCkNCisgICAgICAgICAgICB8fCAoZm5fdyAhPU5VTEwgJiYgKEJaMmZwX3cgPSBCWjJfYnpvcGVuKGZuX3csbW9kZSkpPT1OVUxMKSl7DQorICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBiejJvcGVuc3RyZWFtXG4iKTsNCisgICAgICAgICAgICBleGl0KDEpOw0KKyAgICAgICAgIH0NCisgICAgICAgICB3aGlsZSgobGVuPWZyZWFkKGJ1ZmYsMSwweDEwMDAsZnBfcikpPjApew0KKyAgICAgICAgICAgIEJaMl9iendyaXRlKEJaMmZwX3csYnVmZixsZW4pOw0KKyAgICAgICAgIH0NCisgICAgICAgICBCWjJfYnpjbG9zZShCWjJmcF93KTsNCisgICAgICAgICBpZihmcF9yIT1zdGRpbilmY2xvc2UoZnBfcik7DQorICAgICAgfQ0KKyAgIH0NCisjaWZkZWYgX1dJTjMyDQorICAgQloyRExMRnJlZUxpYnJhcnkoKTsNCisjZW5kaWYNCisgICByZXR1cm4gMDsNCit9DQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvZW50aXRpZXMueG1sIGIvVXRpbGl0aWVzL2NtYnppcDIvZW50aXRpZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWUwNTUzLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2VudGl0aWVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPCEtLSBtaXNjLiBzdHJpbmdzIC0tPgotPCFFTlRJVFkgYnotdXJsICJodHRwOi8vd3d3LmJ6aXAub3JnIj4KLTwhRU5USVRZIGJ6LWVtYWlsICJqc2V3YXJkQGJ6aXAub3JnIj4KLTwhRU5USVRZIGJ6LWxpZmVzcGFuICIxOTk2LTIwMDciPgotCi08IUVOVElUWSBiei12ZXJzaW9uICIxLjAuNSI+Ci08IUVOVElUWSBiei1kYXRlICIxMCBEZWNlbWJlciAyMDA3Ij4KLQotPCFFTlRJVFkgbWFudWFsLXRpdGxlICJiemlwMiBNYW51YWwiPgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvZm9ybWF0LnBsIGIvVXRpbGl0aWVzL2NtYnppcDIvZm9ybWF0LnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyYjM5MWRhLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2Zvcm1hdC5wbAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybCAtdwotIwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYnppcDIvbGliYnppcDIsIGEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IKLSMgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KLSMKLSMgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+Ci0jCi0jIFBsZWFzZSByZWFkIHRoZSBXQVJOSU5HLCBESVNDTEFJTUVSIGFuZCBQQVRFTlRTIHNlY3Rpb25zIGluIHRoZSAKLSMgUkVBRE1FIGZpbGUuCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgY29udGFpbmVkCi0jIGluIHRoZSBmaWxlIExJQ0VOU0UuCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIwotdXNlIHN0cmljdDsKLQotIyBnZXQgY29tbWFuZCBsaW5lIHZhbHVlczoKLWlmICggJCNBUkdWICE9MSApIHsKLSAgICBkaWUgIlVzYWdlOiAgJDAgeG1sX2luZmlsZSB4bWxfb3V0ZmlsZVxuIjsKLX0KLQotbXkgJGluZmlsZSA9IHNoaWZ0OwotIyBjaGVjayBpbmZpbGUgZXhpc3RzCi1kaWUgIkNhbid0IGZpbmQgZmlsZSBcIiRpbmZpbGVcIiIKLSAgdW5sZXNzIC1mICRpbmZpbGU7Ci0jIGNoZWNrIHdlIGNhbiByZWFkIGluZmlsZQotaWYgKCEgLXIgJGluZmlsZSkgewotICAgIGRpZSAiQ2FuJ3QgcmVhZCBpbnB1dCAkaW5maWxlXG4iOwotfQotIyBjaGVjayB3ZSBjYW4gb3BlbiBpbmZpbGUKLW9wZW4oIElORklMRSwiPCRpbmZpbGUiICkgb3IgCi0gICAgZGllICJDYW4ndCBpbnB1dCAkaW5maWxlICQhIjsKLQotI215ICRvdXRmaWxlID0gJ2ZtdC1tYW51YWwueG1sJzsKLW15ICRvdXRmaWxlID0gc2hpZnQ7Ci0jcHJpbnQgIkluZmlsZTogJGluZmlsZSwgT3V0ZmlsZTogJG91dGZpbGVcbiI7Ci0jIGNoZWNrIHdlIGNhbiB3cml0ZSB0byBvdXRmaWxlCi1vcGVuKCBPVVRGSUxFLCI+JG91dGZpbGUiICkgb3IgCi0gICAgZGllICJDYW4ndCBvdXRwdXQgJG91dGZpbGUgJCEgZm9yIHdyaXRpbmciOwotCi1teSAoJHByZXYsICRjdXJyLCAkc3RyKTsKLSRwcmV2ID0gJyc7ICRjdXJyID0gJyc7Ci13aGlsZSAoIDxJTkZJTEU+ICkgewotCi0gICAgICAgIHByaW50IE9VVEZJTEUgJHByZXY7Ci0gICAgJHByZXYgPSAkY3VycjsKLSAgICAkY3VyciA9ICRfOwotICAgICRzdHIgPSAnJzsKLQotICAgIGlmICggJHByZXYgPX4gLzxwcm9ncmFtbGlzdGluZz4kfDxzY3JlZW4+JC8gKSB7Ci0gICAgICAgIGNob21wICRwcmV2OwotICAgICAgICAkY3VyciA9IGpvaW4oICcnLCAkcHJldiwgIjwhW0NEQVRBWyIsICRjdXJyICk7Ci0gICAgICAgICAgICAgICAgJHByZXYgPSAnJzsKLSAgICAgICAgbmV4dDsKLSAgICB9Ci0gICAgZWxzaWYgKCAkY3VyciA9fiAvPFwvcHJvZ3JhbWxpc3Rpbmc+fDxcL3NjcmVlbj4vICkgewotICAgICAgICBjaG9tcCAkcHJldjsKLSAgICAgICAgJGN1cnIgPSBqb2luKCAnJywgJHByZXYsICJdXT4iLCAkY3VyciApOwotICAgICAgICAgICAgICAgICRwcmV2ID0gJyc7Ci0gICAgICAgIG5leHQ7Ci0gICAgfQotfQotcHJpbnQgT1VURklMRSAkY3VycjsKLWNsb3NlIElORklMRTsKLWNsb3NlIE9VVEZJTEU7Ci1leGl0OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvaHVmZm1hbi5jIGIvVXRpbGl0aWVzL2NtYnppcDIvaHVmZm1hbi5jCmluZGV4IDg3ZTc5ZTMuLjQzYTE4OTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2h1ZmZtYW4uYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9odWZmbWFuLmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9saWJiejIuZGVmIGIvVXRpbGl0aWVzL2NtYnppcDIvbGliYnoyLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlmZWY1NC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9saWJiejIuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotTElCUkFSWSAgICAgICAgIExJQkJaMgotREVTQ1JJUFRJT04gICAgICJsaWJiemlwMjogbGlicmFyeSBmb3IgZGF0YSBjb21wcmVzc2lvbiIKLUVYUE9SVFMKLSAgICBCWjJfYnpDb21wcmVzc0luaXQKLSAgICBCWjJfYnpDb21wcmVzcwotICAgIEJaMl9iekNvbXByZXNzRW5kCi0gICAgQloyX2J6RGVjb21wcmVzc0luaXQKLSAgICBCWjJfYnpEZWNvbXByZXNzCi0gICAgQloyX2J6RGVjb21wcmVzc0VuZAotICAgIEJaMl9ielJlYWRPcGVuCi0gICAgQloyX2J6UmVhZENsb3NlCi0gICAgQloyX2J6UmVhZEdldFVudXNlZAotICAgIEJaMl9ielJlYWQKLSAgICBCWjJfYnpXcml0ZU9wZW4KLSAgICBCWjJfYnpXcml0ZQotICAgIEJaMl9ieldyaXRlQ2xvc2UKLSAgICBCWjJfYnpXcml0ZUNsb3NlNjQKLSAgICBCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MKLSAgICBCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcwotICAgIEJaMl9iemxpYlZlcnNpb24KLSAgICBCWjJfYnpvcGVuCi0gICAgQloyX2J6ZG9wZW4KLSAgICBCWjJfYnpyZWFkCi0gICAgQloyX2J6d3JpdGUKLSAgICBCWjJfYnpmbHVzaAotICAgIEJaMl9iemNsb3NlCi0gICAgQloyX2J6ZXJyb3IKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL2xpYmJ6Mi5saWIgYi9VdGlsaXRpZXMvY21iemlwMi9saWJiejIubGliCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTk3YTc1Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL2xpYmJ6Mi5saWIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9tYWtlZmlsZS5tc2MgYi9VdGlsaXRpZXMvY21iemlwMi9tYWtlZmlsZS5tc2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZjJlNTkuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvbWFrZWZpbGUubXNjCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgTWljcm9zb2Z0IFZpc3VhbCBDKysgNi4wCi0jIHVzYWdlOiBubWFrZSAtZiBtYWtlZmlsZS5tc2MKLSMgSy5NLiBTeXJpbmcgKHN5cmluZ0Bnc2YuZGUpCi0jIEZpeGVkIHVwIGJ5IEpSUyBmb3IgYnppcDItMC45LjVkIHJlbGVhc2UuCi0KLUNDPWNsCi1DRkxBR1M9IC1EV0lOMzIgLU1EIC1PeCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1ub2xvZ28KLQotT0JKUz0gYmxvY2tzb3J0Lm9iaiAgXAotICAgICAgaHVmZm1hbi5vYmogICAgXAotICAgICAgY3JjdGFibGUub2JqICAgXAotICAgICAgcmFuZHRhYmxlLm9iaiAgXAotICAgICAgY29tcHJlc3Mub2JqICAgXAotICAgICAgZGVjb21wcmVzcy5vYmogXAotICAgICAgYnpsaWIub2JqCi0KLWFsbDogbGliIGJ6aXAyIHRlc3QKLQotYnppcDI6IGxpYgotICAgICQoQ0MpICQoQ0ZMQUdTKSAtbyBiemlwMiBiemlwMi5jIGxpYmJ6Mi5saWIgc2V0YXJndi5vYmoKLSAgICAkKENDKSAkKENGTEFHUykgLW8gYnppcDJyZWNvdmVyIGJ6aXAycmVjb3Zlci5jCi0KLWxpYjogJChPQkpTKQotICAgIGxpYiAvb3V0OmxpYmJ6Mi5saWIgJChPQkpTKQotCi10ZXN0OiBiemlwMgotICAgIHR5cGUgd29yZHMxCi0gICAgLlxcYnppcDIgLTEgIDwgc2FtcGxlMS5yZWYgPiBzYW1wbGUxLnJiMgotICAgIC5cXGJ6aXAyIC0yICA8IHNhbXBsZTIucmVmID4gc2FtcGxlMi5yYjIKLSAgICAuXFxiemlwMiAtMyAgPCBzYW1wbGUzLnJlZiA+IHNhbXBsZTMucmIyCi0gICAgLlxcYnppcDIgLWQgIDwgc2FtcGxlMS5iejIgPiBzYW1wbGUxLnRzdAotICAgIC5cXGJ6aXAyIC1kICA8IHNhbXBsZTIuYnoyID4gc2FtcGxlMi50c3QKLSAgICAuXFxiemlwMiAtZHMgPCBzYW1wbGUzLmJ6MiA+IHNhbXBsZTMudHN0Ci0gICAgQGVjaG8gQWxsIHNpeCBvZiB0aGUgZmMncyBzaG91bGQgZmluZCBubyBkaWZmZXJlbmNlcy4KLSAgICBAZWNobyBJZiBmYyBmaW5kcyBhbiBlcnJvciBvbiBzYW1wbGUzLmJ6MiwgdGhpcyBjb3VsZCBiZQotICAgIEBlY2hvIGJlY2F1c2UgV2luWmlwJ3MgJ1RBUiBmaWxlIHNtYXJ0IENSL0xGIGNvbnZlcnNpb24nCi0gICAgQGVjaG8gaXMgdG9vIGNsZXZlciBmb3IgaXRzIG93biBnb29kLiAgRGlzYWJsZSB0aGlzIG9wdGlvbi4KLSAgICBAZWNobyBUaGUgY29ycmVjdCBzaXplIGZvciBzYW1wbGUzLnJlZiBpcyAxMjAsMjQ0LiAgSWYgaXQKLSAgICBAZWNobyBpcyAxNTAsMjUxLCBXaW5aaXAgaGFzIG1lc3NlZCBpdCB1cC4KLSAgICBmYyBzYW1wbGUxLmJ6MiBzYW1wbGUxLnJiMiAKLSAgICBmYyBzYW1wbGUyLmJ6MiBzYW1wbGUyLnJiMgotICAgIGZjIHNhbXBsZTMuYnoyIHNhbXBsZTMucmIyCi0gICAgZmMgc2FtcGxlMS50c3Qgc2FtcGxlMS5yZWYKLSAgICBmYyBzYW1wbGUyLnRzdCBzYW1wbGUyLnJlZgotICAgIGZjIHNhbXBsZTMudHN0IHNhbXBsZTMucmVmCi0KLQotCi1jbGVhbjogCi0gICAgZGVsICoub2JqCi0gICAgZGVsIGxpYmJ6Mi5saWIgCi0gICAgZGVsIGJ6aXAyLmV4ZQotICAgIGRlbCBiemlwMnJlY292ZXIuZXhlCi0gICAgZGVsIHNhbXBsZTEucmIyIAotICAgIGRlbCBzYW1wbGUyLnJiMiAKLSAgICBkZWwgc2FtcGxlMy5yYjIKLSAgICBkZWwgc2FtcGxlMS50c3QgCi0gICAgZGVsIHNhbXBsZTIudHN0Ci0gICAgZGVsIHNhbXBsZTMudHN0Ci0KLS5jLm9iajogCi0gICAgJChDQykgJChDRkxBR1MpIC1jICQqLmMgLW8gJCoub2JqCi0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL21hbnVhbC5odG1sIGIvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNDQ5NTMuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQwICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5iemlwMiBhbmQgbGliYnppcDIsIHZlcnNpb24gMS4wLjU8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS42OS4xIj4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+LyogQ29sb3VyczoKLSM3NDI0MGYgIGRhcmsgYnJvd24gICAgICBoMSwgaDIsIGgzLCBoNAotIzMzNjY5OSAgbWVkaXVtIGJsdWUgICAgIGxpbmtzCi0jMzM5OTk5ICB0dXJxdW9pc2UgICAgICAgbGluayBob3ZlciBjb2xvdXIKLSMyMDIwMjAgIGFsbW9zdCBibGFjayAgICBnZW5lcmFsIHRleHQKLSM3NjE1OTYgIHB1cnBsZSAgICAgICAgICBtZDVzdW0gdGV4dAotIzYyNjI2MiAgZGFyayBncmF5ICAgICAgIHByZSBib3JkZXIKLSNlZWVlZWUgIHZlcnkgbGlnaHQgZ3JheSBwcmUgYmFja2dyb3VuZAotI2YyZjJmOSAgdmVyeSBsaWdodCBibHVlIG5hdiB0YWJsZSBiYWNrZ3JvdW5kCi0jMzM2NmNjICBtZWRpdW0gYmx1ZSAgICAgbmF2IHRhYmxlIGJvcmRlcgotKi8KLQotYSwgYTpsaW5rLCBhOnZpc2l0ZWQsIGE6YWN0aXZlIHsgY29sb3I6ICMzMzY2OTk7IH0KLWE6aG92ZXIgeyBjb2xvcjogIzMzOTk5OTsgfQotCi1ib2R5IHsgZm9udDogODAlLzEyNiUgc2Fucy1zZXJpZjsgfQotaDEsIGgyLCBoMywgaDQgeyBjb2xvcjogIzc0MjQwZjsgfQotCi1kdCB7IGNvbG9yOiAjMzM2Njk5OyBmb250LXdlaWdodDogYm9sZCB9Ci1kZCB7IAotIG1hcmdpbi1sZWZ0OiAxLjVlbTsgCi0gcGFkZGluZy1ib3R0b206IDAuOGVtOwotfQotCi0vKiAtLSBydWxlciAtLSAqLwotZGl2LmhyX2JsdWUgeyAKLSAgaGVpZ2h0OiAgM3B4OyAKLSAgYmFja2dyb3VuZDojZmZmZmZmIHVybCgiL2ltYWdlcy9ocl9ibHVlLnBuZyIpIHJlcGVhdC14OyB9Ci1kaXYuaHJfYmx1ZSBociB7IGRpc3BsYXk6bm9uZTsgfQotCi0vKiByZWxlYXNlIHN0eWxlcyAqLwotI3JlbGVhc2UgcCB7IG1hcmdpbi10b3A6IDAuNGVtOyB9Ci0jcmVsZWFzZSAubWQ1c3VtIHsgY29sb3I6ICM3NjE1OTY7IH0KLQotCi0vKiAtLS0tLS0gc3R5bGVzIGZvciBkb2NzfG1hbnVhbHN8aG93dG8gLS0tLS0tICovCi0vKiAtLSBsaXN0cyAtLSAqLwotdWwgIHsgCi0gbWFyZ2luOiAgICAgMHB4IDRweCAxNnB4IDE2cHg7Ci0gcGFkZGluZzogICAgMHB4OwotIGxpc3Qtc3R5bGU6IHVybCgiL2ltYWdlcy9saS1ibHVlLnBuZyIpOyAKLX0KLXVsIGxpIHsgCi0gbWFyZ2luLWJvdHRvbTogMTBweDsKLX0KLXVsIHVsICAgeyAKLSBsaXN0LXN0eWxlLXR5cGU6ICBub25lOyAKLSBsaXN0LXN0eWxlLWltYWdlOiBub25lOyAKLSBtYXJnaW4tbGVmdDogICAgICAwcHg7IAotfQotCi0vKiBoZWFkZXIgLyBmb290ZXIgbmF2IHRhYmxlcyAqLwotdGFibGUubmF2IHsKLSBib3JkZXI6ICAgICBzb2xpZCAxcHggIzMzNjZjYzsKLSBiYWNrZ3JvdW5kOiAjZjJmMmY5OwotIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjk7Ci0gbWFyZ2luLWJvdHRvbTogMC41ZW07Ci19Ci0vKiBkb24ndCBoYXZlIHVuZGVybGluZWQgbGlua3MgaW4gY2h1bmtlZCBuYXYgbWVudXMgKi8KLXRhYmxlLm5hdiBhIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Ci10YWJsZS5uYXYgYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Ci10YWJsZS5uYXYgdGQgeyBmb250LXNpemU6IDg1JTsgfQotCi1jb2RlLCB0dCwgcHJlIHsgZm9udC1zaXplOiAxMjAlOyB9Ci1jb2RlLCB0dCB7IGNvbG9yOiAjNzYxNTk2OyB9Ci0KLWRpdi5saXRlcmFsbGF5b3V0LCBwcmUucHJvZ3JhbWxpc3RpbmcsIHByZS5zY3JlZW4gewotIGNvbG9yOiAgICAgICMwMDAwMDA7Ci0gcGFkZGluZzogICAgMC41ZW07Ci0gYmFja2dyb3VuZDogI2VlZWVlZTsKLSBib3JkZXI6ICAgICAxcHggc29saWQgIzYyNjI2MjsKLSBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwotIG1hcmdpbjogNHB4IDBweCA0cHggMHB4OyAKLX0KLTwvc3R5bGU+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0iYm9vayIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLTxkaXY+Ci08ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0idXNlcm1hbiI+PC9hPmJ6aXAyIGFuZCBsaWJiemlwMiwgdmVyc2lvbiAxLjAuNTwvaDE+PC9kaXY+Ci08ZGl2PjxoMiBjbGFzcz0ic3VidGl0bGUiPkEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IgZGF0YSBjb21wcmVzc2lvbjwvaDI+PC9kaXY+Ci08ZGl2PjxkaXYgY2xhc3M9ImF1dGhvcmdyb3VwIj48ZGl2IGNsYXNzPSJhdXRob3IiPgotPGgzIGNsYXNzPSJhdXRob3IiPgotPHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+SnVsaWFuPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+U2V3YXJkPC9zcGFuPgotPC9oMz4KLTxkaXYgY2xhc3M9ImFmZmlsaWF0aW9uIj48c3BhbiBjbGFzcz0ib3JnbmFtZSI+aHR0cDovL3d3dy5iemlwLm9yZzxicj48L3NwYW4+PC9kaXY+Ci08L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXY+PHAgY2xhc3M9InJlbGVhc2VpbmZvIj5WZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDc8L3A+PC9kaXY+Ci08ZGl2PjxwIGNsYXNzPSJjb3B5cmlnaHQiPkNvcHlyaWdodCCpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkPC9wPjwvZGl2PgotPGRpdj48ZGl2IGNsYXNzPSJsZWdhbG5vdGljZSI+Ci08YSBuYW1lPSJpZDI0OTk4MzMiPjwvYT48cD5UaGlzIHByb2dyYW0sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+LCB0aGUKLSAgYXNzb2NpYXRlZCBsaWJyYXJ5IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+LCBhbmQKLSAgYWxsIGRvY3VtZW50YXRpb24sIGFyZSBjb3B5cmlnaHQgqSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZC4KLSAgQWxsIHJpZ2h0cyByZXNlcnZlZC48L3A+Ci08cD5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoCi0gIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCi0gIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlCi0gICBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCi0gICBmb2xsb3dpbmcgZGlzY2xhaW1lci48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5UaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUKLSAgIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsCi0gICBzb2Z0d2FyZS4gIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuCi0gICBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCi0gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPkFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQKLSAgIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwKLSAgIHNvZnR3YXJlLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPlRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvCi0gICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPlRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiAiQVMgSVMiIEFORCBBTlkKLSAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKLSAgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLjwvcD4KLTxwPlBBVEVOVFM6IFRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZSwKLSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBhbmQKLSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiBkbyBub3QgdXNlIGFueSBwYXRlbnRlZAotIGFsZ29yaXRobXMuICBIb3dldmVyLCBJIGRvIG5vdCBoYXZlIHRoZSByZXNvdXJjZXMgdG8gY2FycnkKLSBvdXQgYSBwYXRlbnQgc2VhcmNoLiAgVGhlcmVmb3JlIEkgY2Fubm90IGdpdmUgYW55IGd1YXJhbnRlZSBvZgotIHRoZSBhYm92ZSBzdGF0ZW1lbnQuCi0gPC9wPgotPC9kaXY+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj4KLTxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD4KLTxkbD4KLTxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iI2ludHJvIj4xLiBJbnRyb2R1Y3Rpb248L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9IiN1c2luZyI+Mi4gSG93IHRvIHVzZSBiemlwMjwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjbmFtZSI+Mi4xLiBOQU1FPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N5bm9wc2lzIj4yLjIuIFNZTk9QU0lTPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2Rlc2NyaXB0aW9uIj4yLjMuIERFU0NSSVBUSU9OPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI29wdGlvbnMiPjIuNC4gT1BUSU9OUzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNtZW1vcnktbWFuYWdlbWVudCI+Mi41LiBNRU1PUlkgTUFOQUdFTUVOVDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNyZWNvdmVyaW5nIj4yLjYuIFJFQ09WRVJJTkcgREFUQSBGUk9NIERBTUFHRUQgRklMRVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjcGVyZm9ybWFuY2UiPjIuNy4gUEVSRk9STUFOQ0UgTk9URVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjY2F2ZWF0cyI+Mi44LiBDQVZFQVRTPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2F1dGhvciI+Mi45LiBBVVRIT1I8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9IiNsaWJwcm9nIj4zLiAKLVByb2dyYW1taW5nIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4KLTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjdG9wLWxldmVsIj4zLjEuIFRvcC1sZXZlbCBzdHJ1Y3R1cmU8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2xsLXN1bW1hcnkiPjMuMS4xLiBMb3ctbGV2ZWwgc3VtbWFyeTwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNobC1zdW1tYXJ5Ij4zLjEuMi4gSGlnaC1sZXZlbCBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3V0aWwtZm5zLXN1bW1hcnkiPjMuMS4zLiBVdGlsaXR5IGZ1bmN0aW9ucyBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2Vyci1oYW5kbGluZyI+My4yLiBFcnJvciBoYW5kbGluZzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNsb3ctbGV2ZWwiPjMuMy4gTG93LWxldmVsIGludGVyZmFjZTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpjb21wcmVzcy1pbml0Ij4zLjMuMS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6Q29tcHJlc3MiPjMuMy4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekNvbXByZXNzLWVuZCI+My4zLjMuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NFbmQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6RGVjb21wcmVzcy1pbml0Ij4zLjMuNC4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpEZWNvbXByZXNzIj4zLjMuNS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekRlY29tcHJlc3MtZW5kIj4zLjMuNi4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNobC1pbnRlcmZhY2UiPjMuNC4gSGlnaC1sZXZlbCBpbnRlcmZhY2U8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZG9wZW4iPjMuNC4xLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNienJlYWQiPjMuNC4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZGdldHVudXNlZCI+My40LjMuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpyZWFkY2xvc2UiPjMuNC40LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZW9wZW4iPjMuNC41LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlT3BlbjwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZSI+My40LjYuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGU8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6d3JpdGVjbG9zZSI+My40LjcuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjZW1iZWQiPjMuNC44LiBIYW5kbGluZyBlbWJlZGRlZCBjb21wcmVzc2VkIGRhdGEgc3RyZWFtczwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNzdGQtcmR3ciI+My40LjkuIFN0YW5kYXJkIGZpbGUtcmVhZGluZy93cml0aW5nIGNvZGU8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjdXRpbC1mbnMiPjMuNS4gVXRpbGl0eSBmdW5jdGlvbnM8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6YnVmZnRvYnVmZmNvbXByZXNzIj4zLjUuMS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6YnVmZnRvYnVmZmRlY29tcHJlc3MiPjMuNS4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiN6bGliLWNvbXBhdCI+My42LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnpsaWI8L2NvZGU+IGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N0ZGlvLWZyZWUiPjMuNy4gVXNpbmcgdGhlIGxpYnJhcnkgaW4gYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPi1mcmVlIGVudmlyb25tZW50PC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNzdGRpby1ieWUiPjMuNy4xLiBHZXR0aW5nIHJpZCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNjcml0aWNhbC1lcnJvciI+My43LjIuIENyaXRpY2FsIGVycm9yIGhhbmRsaW5nPC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3dpbi1kbGwiPjMuOC4gTWFraW5nIGEgV2luZG93cyBETEw8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9IiNtaXNjIj40LiBNaXNjZWxsYW5lYTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjbGltaXRzIj40LjEuIExpbWl0YXRpb25zIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3BvcnQtaXNzdWVzIj40LjIuIFBvcnRhYmlsaXR5IGlzc3VlczwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNidWdzIj40LjMuIFJlcG9ydGluZyBidWdzPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3BhY2thZ2UiPjQuNC4gRGlkIHlvdSBnZXQgdGhlIHJpZ2h0IHBhY2thZ2U/PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3JlYWRpbmciPjQuNS4gRnVydGhlciBSZWFkaW5nPC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPC9kbD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpbnRybyI+PC9hPjEuoEludHJvZHVjdGlvbjwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBjb21wcmVzc2VzIGZpbGVzCi11c2luZyB0aGUgQnVycm93cy1XaGVlbGVyIGJsb2NrLXNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbgotYWxnb3JpdGhtLCBhbmQgSHVmZm1hbiBjb2RpbmcuICBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkKLWNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGF0IGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsCi1MWjc3L0xaNzgtYmFzZWQgY29tcHJlc3NvcnMsIGFuZCBhcHByb2FjaGVzIHRoZSBwZXJmb3JtYW5jZSBvZgotdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gaXMgYnVpbHQgb24gdG9wIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiwgYSBmbGV4aWJsZSBsaWJyYXJ5IGZvcgotaGFuZGxpbmcgY29tcHJlc3NlZCBkYXRhIGluIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZm9ybWF0LiAgVGhpcyBtYW51YWwKLWRlc2NyaWJlcyBib3RoIGhvdyB0byB1c2UgdGhlIHByb2dyYW0gYW5kIGhvdyB0byB3b3JrIHdpdGggdGhlCi1saWJyYXJ5IGludGVyZmFjZS4gIE1vc3Qgb2YgdGhlIG1hbnVhbCBpcyBkZXZvdGVkIHRvIHRoaXMKLWxpYnJhcnksIG5vdCB0aGUgcHJvZ3JhbSwgd2hpY2ggaXMgZ29vZCBuZXdzIGlmIHlvdXIgaW50ZXJlc3QgaXMKLW9ubHkgaW4gdGhlIHByb2dyYW0uPC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48YSBocmVmPSIjdXNpbmciPkhvdyB0byB1c2UgYnppcDI8L2E+IGRlc2NyaWJlcyBob3cgdG8gdXNlCi0gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT47IHRoaXMgaXMgdGhlIG9ubHkgcGFydAotIHlvdSBuZWVkIHRvIHJlYWQgaWYgeW91IGp1c3Qgd2FudCB0byBrbm93IGhvdyB0byBvcGVyYXRlIHRoZQotIHByb2dyYW0uPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGEgaHJlZj0iI2xpYnByb2ciPlByb2dyYW1taW5nIHdpdGggbGliYnppcDI8L2E+IGRlc2NyaWJlcyB0aGUKLSBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGluIGRldGFpbCwgYW5kPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGEgaHJlZj0iI21pc2MiPk1pc2NlbGxhbmVhPC9hPiByZWNvcmRzIHNvbWUKLSBtaXNjZWxsYW5lb3VzIG5vdGVzIHdoaWNoIEkgdGhvdWdodCBvdWdodCB0byBiZSByZWNvcmRlZAotIHNvbWV3aGVyZS48L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0idXNpbmciPjwvYT4yLqBIb3cgdG8gdXNlIGJ6aXAyPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+Ci08cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Ci08ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjbmFtZSI+Mi4xLiBOQU1FPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N5bm9wc2lzIj4yLjIuIFNZTk9QU0lTPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2Rlc2NyaXB0aW9uIj4yLjMuIERFU0NSSVBUSU9OPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI29wdGlvbnMiPjIuNC4gT1BUSU9OUzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNtZW1vcnktbWFuYWdlbWVudCI+Mi41LiBNRU1PUlkgTUFOQUdFTUVOVDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNyZWNvdmVyaW5nIj4yLjYuIFJFQ09WRVJJTkcgREFUQSBGUk9NIERBTUFHRUQgRklMRVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjcGVyZm9ybWFuY2UiPjIuNy4gUEVSRk9STUFOQ0UgTk9URVM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjY2F2ZWF0cyI+Mi44LiBDQVZFQVRTPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2F1dGhvciI+Mi45LiBBVVRIT1I8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPgotPC9kaXY+Ci08cD5UaGlzIGNoYXB0ZXIgY29udGFpbnMgYSBjb3B5IG9mIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gbWFuIHBhZ2UsIGFuZCBub3RoaW5nCi1lbHNlLjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0ibmFtZSI+PC9hPjIuMS6gTkFNRTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+LAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1bnppcDI8L2NvZGU+IC0gYSBibG9jay1zb3J0aW5nIGZpbGUKLSAgY29tcHJlc3NvciwgdjEuMC40PC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemNhdDwvY29kZT4gLQotICAgZGVjb21wcmVzc2VzIGZpbGVzIHRvIHN0ZG91dDwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiAtCi0gICByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlczwvcD48L2xpPgotPC91bD48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJzeW5vcHNpcyI+PC9hPjIuMi6gU1lOT1BTSVM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBbCi0gIC1jZGZrcXN0dnpWTDEyMzQ1Njc4OSBdIFsgZmlsZW5hbWVzIC4uLiAgXTwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnVuemlwMjwvY29kZT4gWwotICAtZmt2c1ZMIF0gWyBmaWxlbmFtZXMgLi4uICBdPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemNhdDwvY29kZT4gWyAtcyBdIFsKLSAgZmlsZW5hbWVzIC4uLiAgXTwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPgotICBmaWxlbmFtZTwvcD48L2xpPgotPC91bD48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJkZXNjcmlwdGlvbiI+PC9hPjIuMy6gREVTQ1JJUFRJT048L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gY29tcHJlc3NlcyBmaWxlcwotdXNpbmcgdGhlIEJ1cnJvd3MtV2hlZWxlciBibG9jayBzb3J0aW5nIHRleHQgY29tcHJlc3Npb24KLWFsZ29yaXRobSwgYW5kIEh1ZmZtYW4gY29kaW5nLiAgQ29tcHJlc3Npb24gaXMgZ2VuZXJhbGx5Ci1jb25zaWRlcmFibHkgYmV0dGVyIHRoYW4gdGhhdCBhY2hpZXZlZCBieSBtb3JlIGNvbnZlbnRpb25hbAotTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLCBhbmQgYXBwcm9hY2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YKLXRoZSBQUE0gZmFtaWx5IG9mIHN0YXRpc3RpY2FsIGNvbXByZXNzb3JzLjwvcD4KLTxwPlRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgZGVsaWJlcmF0ZWx5IHZlcnkgc2ltaWxhciB0bwotdGhvc2Ugb2YgR05VIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Z3ppcDwvY29kZT4sIGJ1dCB0aGV5IGFyZQotbm90IGlkZW50aWNhbC48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBleHBlY3RzIGEgbGlzdCBvZgotZmlsZSBuYW1lcyB0byBhY2NvbXBhbnkgdGhlIGNvbW1hbmQtbGluZSBmbGFncy4gIEVhY2ggZmlsZSBpcwotcmVwbGFjZWQgYnkgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgaXRzZWxmLCB3aXRoIHRoZSBuYW1lCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm9yaWdpbmFsX25hbWUuYnoyPC9jb2RlPi4gIEVhY2gKLWNvbXByZXNzZWQgZmlsZSBoYXMgdGhlIHNhbWUgbW9kaWZpY2F0aW9uIGRhdGUsIHBlcm1pc3Npb25zLCBhbmQsCi13aGVuIHBvc3NpYmxlLCBvd25lcnNoaXAgYXMgdGhlIGNvcnJlc3BvbmRpbmcgb3JpZ2luYWwsIHNvIHRoYXQKLXRoZXNlIHByb3BlcnRpZXMgY2FuIGJlIGNvcnJlY3RseSByZXN0b3JlZCBhdCBkZWNvbXByZXNzaW9uIHRpbWUuCi1GaWxlIG5hbWUgaGFuZGxpbmcgaXMgbmFpdmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhlcmUgaXMgbm8KLW1lY2hhbmlzbSBmb3IgcHJlc2VydmluZyBvcmlnaW5hbCBmaWxlIG5hbWVzLCBwZXJtaXNzaW9ucywKLW93bmVyc2hpcHMgb3IgZGF0ZXMgaW4gZmlsZXN5c3RlbXMgd2hpY2ggbGFjayB0aGVzZSBjb25jZXB0cywgb3IKLWhhdmUgc2VyaW91cyBmaWxlIG5hbWUgbGVuZ3RoIHJlc3RyaWN0aW9ucywgc3VjaCBhcwotTVMtRE9TLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiB3aWxsIGJ5IGRlZmF1bHQgbm90Ci1vdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMuICBJZiB5b3Ugd2FudCB0aGlzIHRvIGhhcHBlbiwgc3BlY2lmeQotdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWY8L2NvZGU+IGZsYWcuPC9wPgotPHA+SWYgbm8gZmlsZSBuYW1lcyBhcmUgc3BlY2lmaWVkLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gY29tcHJlc3NlcyBmcm9tIHN0YW5kYXJkCi1pbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuICBJbiB0aGlzIGNhc2UsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB3aWxsIGRlY2xpbmUgdG8gd3JpdGUKLWNvbXByZXNzZWQgb3V0cHV0IHRvIGEgdGVybWluYWwsIGFzIHRoaXMgd291bGQgYmUgZW50aXJlbHkKLWluY29tcHJlaGVuc2libGUgYW5kIHRoZXJlZm9yZSBwb2ludGxlc3MuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiAob3IKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIgLWQ8L2NvZGU+KSBkZWNvbXByZXNzZXMgYWxsCi1zcGVjaWZpZWQgZmlsZXMuICBGaWxlcyB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGJ5Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB3aWxsIGJlIGRldGVjdGVkIGFuZAotaWdub3JlZCwgYW5kIGEgd2FybmluZyBpc3N1ZWQuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBhdHRlbXB0cyB0byBndWVzcyB0aGUKLWZpbGVuYW1lIGZvciB0aGUgZGVjb21wcmVzc2VkIGZpbGUgZnJvbSB0aGF0IG9mIHRoZSBjb21wcmVzc2VkCi1maWxlIGFzIGZvbGxvd3M6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iYnVsbGV0Ij4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lLmJ6MiA8L2NvZGU+Ci0gIGJlY29tZXMKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5maWxlbmFtZTwvY29kZT48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lLmJ6IDwvY29kZT4KLSAgYmVjb21lcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lPC9jb2RlPjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmlsZW5hbWUudGJ6MjwvY29kZT4KLSAgYmVjb21lcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lLnRhcjwvY29kZT48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZpbGVuYW1lLnRieiA8L2NvZGU+Ci0gIGJlY29tZXMKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5maWxlbmFtZS50YXI8L2NvZGU+PC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hbnlvdGhlcm5hbWUgPC9jb2RlPgotICBiZWNvbWVzCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YW55b3RoZXJuYW1lLm91dDwvY29kZT48L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD5JZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejI8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4uYno8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4udGJ6MjwvY29kZT4gb3IKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LnRiejwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBjb21wbGFpbnMgdGhhdCBpdCBjYW5ub3QKLWd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwgbmFtZQotd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5vdXQ8L2NvZGU+IGFwcGVuZGVkLjwvcD4KLTxwPkFzIHdpdGggY29tcHJlc3Npb24sIHN1cHBseWluZyBubyBmaWxlbmFtZXMgY2F1c2VzCi1kZWNvbXByZXNzaW9uIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnVuemlwMjwvY29kZT4gd2lsbCBjb3JyZWN0bHkKLWRlY29tcHJlc3MgYSBmaWxlIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlCi1jb21wcmVzc2VkIGZpbGVzLiAgVGhlIHJlc3VsdCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUKLWNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkIGZpbGVzLiAgSW50ZWdyaXR5IHRlc3RpbmcKLSg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi10PC9jb2RlPikgb2YgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQKLWZpbGVzIGlzIGFsc28gc3VwcG9ydGVkLjwvcD4KLTxwPllvdSBjYW4gYWxzbyBjb21wcmVzcyBvciBkZWNvbXByZXNzIGZpbGVzIHRvIHRoZSBzdGFuZGFyZAotb3V0cHV0IGJ5IGdpdmluZyB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tYzwvY29kZT4gZmxhZy4KLU11bHRpcGxlIGZpbGVzIG1heSBiZSBjb21wcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlCi1yZXN1bHRpbmcgb3V0cHV0cyBhcmUgZmVkIHNlcXVlbnRpYWxseSB0byBzdGRvdXQuICBDb21wcmVzc2lvbiBvZgotbXVsdGlwbGUgZmlsZXMgaW4gdGhpcyBtYW5uZXIgZ2VuZXJhdGVzIGEgc3RyZWFtIGNvbnRhaW5pbmcKLW11bHRpcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtIGNhbiBiZQotZGVjb21wcmVzc2VkIGNvcnJlY3RseSBvbmx5IGJ5Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB2ZXJzaW9uIDAuOS4wIG9yIGxhdGVyLgotRWFybGllciB2ZXJzaW9ucyBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB3aWxsCi1zdG9wIGFmdGVyIGRlY29tcHJlc3NpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6Y2F0PC9jb2RlPiAob3IKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIgLWRjPC9jb2RlPikgZGVjb21wcmVzc2VzIGFsbAotc3BlY2lmaWVkIGZpbGVzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gd2lsbCByZWFkIGFyZ3VtZW50cwotZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaSVAyPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpJUDwvY29kZT4sIGluIHRoYXQgb3JkZXIsIGFuZCB3aWxsCi1wcm9jZXNzIHRoZW0gYmVmb3JlIGFueSBhcmd1bWVudHMgcmVhZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi1UaGlzIGdpdmVzIGEgY29udmVuaWVudCB3YXkgdG8gc3VwcGx5IGRlZmF1bHQgYXJndW1lbnRzLjwvcD4KLTxwPkNvbXByZXNzaW9uIGlzIGFsd2F5cyBwZXJmb3JtZWQsIGV2ZW4gaWYgdGhlIGNvbXByZXNzZWQKLWZpbGUgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcyB0aGFuCi1hYm91dCBvbmUgaHVuZHJlZCBieXRlcyB0ZW5kIHRvIGdldCBsYXJnZXIsIHNpbmNlIHRoZSBjb21wcmVzc2lvbgotbWVjaGFuaXNtIGhhcyBhIGNvbnN0YW50IG92ZXJoZWFkIGluIHRoZSByZWdpb24gb2YgNTAgYnl0ZXMuCi1SYW5kb20gZGF0YSAoaW5jbHVkaW5nIHRoZSBvdXRwdXQgb2YgbW9zdCBmaWxlIGNvbXByZXNzb3JzKSBpcwotY29kZWQgYXQgYWJvdXQgOC4wNSBiaXRzIHBlciBieXRlLCBnaXZpbmcgYW4gZXhwYW5zaW9uIG9mIGFyb3VuZAotMC41JS48L3A+Ci08cD5BcyBhIHNlbGYtY2hlY2sgZm9yIHlvdXIgcHJvdGVjdGlvbiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHVzZXMgMzItYml0IENSQ3MgdG8gbWFrZQotc3VyZSB0aGF0IHRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiBhIGZpbGUgaXMgaWRlbnRpY2FsIHRvIHRoZQotb3JpZ2luYWwuICBUaGlzIGd1YXJkcyBhZ2FpbnN0IGNvcnJ1cHRpb24gb2YgdGhlIGNvbXByZXNzZWQgZGF0YSwKLWFuZCBhZ2FpbnN0IHVuZGV0ZWN0ZWQgYnVncyBpbgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gKGhvcGVmdWxseSB2ZXJ5IHVubGlrZWx5KS4KLVRoZSBjaGFuY2VzIG9mIGRhdGEgY29ycnVwdGlvbiBnb2luZyB1bmRldGVjdGVkIGlzIG1pY3Jvc2NvcGljLAotYWJvdXQgb25lIGNoYW5jZSBpbiBmb3VyIGJpbGxpb24gZm9yIGVhY2ggZmlsZSBwcm9jZXNzZWQuICBCZQotYXdhcmUsIHRob3VnaCwgdGhhdCB0aGUgY2hlY2sgb2NjdXJzIHVwb24gZGVjb21wcmVzc2lvbiwgc28gaXQKLWNhbiBvbmx5IHRlbGwgeW91IHRoYXQgc29tZXRoaW5nIGlzIHdyb25nLiAgSXQgY2FuJ3QgaGVscCB5b3UKLXJlY292ZXIgdGhlIG9yaWdpbmFsIHVuY29tcHJlc3NlZCBkYXRhLiAgWW91IGNhbiB1c2UKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiB0byB0cnkgdG8gcmVjb3ZlcgotZGF0YSBmcm9tIGRhbWFnZWQgZmlsZXMuPC9wPgotPHA+UmV0dXJuIHZhbHVlczogMCBmb3IgYSBub3JtYWwgZXhpdCwgMSBmb3IgZW52aXJvbm1lbnRhbAotcHJvYmxlbXMgKGZpbGUgbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCBldGMuKSwgMgotdG8gaW5kaWNhdGUgYSBjb3JydXB0IGNvbXByZXNzZWQgZmlsZSwgMyBmb3IgYW4gaW50ZXJuYWwKLWNvbnNpc3RlbmN5IGVycm9yIChlZywgYnVnKSB3aGljaCBjYXVzZWQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHRvIHBhbmljLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJvcHRpb25zIj48L2E+Mi40LqBPUFRJT05TPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1jIC0tc3Rkb3V0PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPkNvbXByZXNzIG9yIGRlY29tcHJlc3MgdG8gc3RhbmRhcmQKLSAgb3V0cHV0LjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1kIC0tZGVjb21wcmVzczwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5Gb3JjZSBkZWNvbXByZXNzaW9uLgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiwKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiBhbmQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemNhdDwvY29kZT4gYXJlIHJlYWxseSB0aGUgc2FtZQotICBwcm9ncmFtLCBhbmQgdGhlIGRlY2lzaW9uIGFib3V0IHdoYXQgYWN0aW9ucyB0byB0YWtlIGlzIGRvbmUgb24KLSAgdGhlIGJhc2lzIG9mIHdoaWNoIG5hbWUgaXMgdXNlZC4gIFRoaXMgZmxhZyBvdmVycmlkZXMgdGhhdAotICBtZWNoYW5pc20sIGFuZCBmb3JjZXMgYnppcDIgdG8gZGVjb21wcmVzcy48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4teiAtLWNvbXByZXNzPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlRoZSBjb21wbGVtZW50IHRvCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWQ8L2NvZGU+OiBmb3JjZXMgY29tcHJlc3Npb24sCi0gIHJlZ2FyZGxlc3Mgb2YgdGhlIGludm9rYXRpb24gbmFtZS48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tdCAtLXRlc3Q8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+Q2hlY2sgaW50ZWdyaXR5IG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKSwgYnV0Ci0gIGRvbid0IGRlY29tcHJlc3MgdGhlbS4gIFRoaXMgcmVhbGx5IHBlcmZvcm1zIGEgdHJpYWwKLSAgZGVjb21wcmVzc2lvbiBhbmQgdGhyb3dzIGF3YXkgdGhlIHJlc3VsdC48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tZiAtLWZvcmNlPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPgotPHA+Rm9yY2Ugb3ZlcndyaXRlIG9mIG91dHB1dCBmaWxlcy4gIE5vcm1hbGx5LAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiB3aWxsIG5vdCBvdmVyd3JpdGUKLSAgZXhpc3Rpbmcgb3V0cHV0IGZpbGVzLiAgQWxzbyBmb3JjZXMKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gdG8gYnJlYWsgaGFyZCBsaW5rcyB0bwotICBmaWxlcywgd2hpY2ggaXQgb3RoZXJ3aXNlIHdvdWxkbid0IGRvLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IG5vcm1hbGx5IGRlY2xpbmVzCi0gIHRvIGRlY29tcHJlc3MgZmlsZXMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGUgY29ycmVjdCBtYWdpYyBoZWFkZXIKLSAgYnl0ZXMuIElmIGZvcmNlZCAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tZjwvY29kZT4pLAotICBob3dldmVyLCBpdCB3aWxsIHBhc3Mgc3VjaCBmaWxlcyB0aHJvdWdoIHVubW9kaWZpZWQuIFRoaXMgaXMKLSAgaG93IEdOVSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmd6aXA8L2NvZGU+IGJlaGF2ZXMuPC9wPgotPC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tayAtLWtlZXA8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+S2VlcCAoZG9uJ3QgZGVsZXRlKSBpbnB1dCBmaWxlcyBkdXJpbmcKLSAgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbi48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tcyAtLXNtYWxsPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPgotPHA+UmVkdWNlIG1lbW9yeSB1c2FnZSwgZm9yIGNvbXByZXNzaW9uLAotICBkZWNvbXByZXNzaW9uIGFuZCB0ZXN0aW5nLiAgRmlsZXMgYXJlIGRlY29tcHJlc3NlZCBhbmQgdGVzdGVkCi0gIHVzaW5nIGEgbW9kaWZpZWQgYWxnb3JpdGhtIHdoaWNoIG9ubHkgcmVxdWlyZXMgMi41IGJ5dGVzIHBlcgotICBibG9jayBieXRlLiAgVGhpcyBtZWFucyBhbnkgZmlsZSBjYW4gYmUgZGVjb21wcmVzc2VkIGluIDIzMDBrCi0gIG9mIG1lbW9yeSwgYWxiZWl0IGF0IGFib3V0IGhhbGYgdGhlIG5vcm1hbCBzcGVlZC48L3A+Ci08cD5EdXJpbmcgY29tcHJlc3Npb24sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LXM8L2NvZGU+Ci0gIHNlbGVjdHMgYSBibG9jayBzaXplIG9mIDIwMGssIHdoaWNoIGxpbWl0cyBtZW1vcnkgdXNlIHRvIGFyb3VuZAotICB0aGUgc2FtZSBmaWd1cmUsIGF0IHRoZSBleHBlbnNlIG9mIHlvdXIgY29tcHJlc3Npb24gcmF0aW8uICBJbgotICBzaG9ydCwgaWYgeW91ciBtYWNoaW5lIGlzIGxvdyBvbiBtZW1vcnkgKDggbWVnYWJ5dGVzIG9yIGxlc3MpLAotICB1c2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tczwvY29kZT4gZm9yIGV2ZXJ5dGhpbmcuICBTZWUKLSAgPGEgaHJlZj0iI21lbW9yeS1tYW5hZ2VtZW50Ij5NRU1PUlkgTUFOQUdFTUVOVDwvYT4gYmVsb3cuPC9wPgotPC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tcSAtLXF1aWV0PC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlN1cHByZXNzIG5vbi1lc3NlbnRpYWwgd2FybmluZyBtZXNzYWdlcy4KLSAgTWVzc2FnZXMgcGVydGFpbmluZyB0byBJL08gZXJyb3JzIGFuZCBvdGhlciBjcml0aWNhbCBldmVudHMKLSAgd2lsbCBub3QgYmUgc3VwcHJlc3NlZC48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tdiAtLXZlcmJvc2U8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+VmVyYm9zZSBtb2RlIC0tIHNob3cgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGZvcgotICBlYWNoIGZpbGUgcHJvY2Vzc2VkLiAgRnVydGhlcgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi12PC9jb2RlPidzIGluY3JlYXNlIHRoZSB2ZXJib3NpdHkKLSAgbGV2ZWwsIHNwZXdpbmcgb3V0IGxvdHMgb2YgaW5mb3JtYXRpb24gd2hpY2ggaXMgcHJpbWFyaWx5IG9mCi0gIGludGVyZXN0IGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1MIC0tbGljZW5zZSAtViAtLXZlcnNpb248L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+RGlzcGxheSB0aGUgc29mdHdhcmUgdmVyc2lvbiwgbGljZW5zZSB0ZXJtcyBhbmQKLSAgY29uZGl0aW9ucy48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tMTwvY29kZT4gKG9yCi0gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tLWZhc3Q8L2NvZGU+KSB0bwotIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LTk8L2NvZGU+IChvcgotIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LWJlc3Q8L2NvZGU+KTwvc3Bhbj48L2R0PgotPGRkPjxwPlNldCB0aGUgYmxvY2sgc2l6ZSB0byAxMDAgaywgMjAwIGsgLi4uICA5MDAgawotICB3aGVuIGNvbXByZXNzaW5nLiAgSGFzIG5vIGVmZmVjdCB3aGVuIGRlY29tcHJlc3NpbmcuICBTZWUgPGEgaHJlZj0iI21lbW9yeS1tYW5hZ2VtZW50Ij5NRU1PUlkgTUFOQUdFTUVOVDwvYT4gYmVsb3cuICBUaGUKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tLWZhc3Q8L2NvZGU+IGFuZAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tYmVzdDwvY29kZT4gYWxpYXNlcyBhcmUgcHJpbWFyaWx5Ci0gIGZvciBHTlUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5nemlwPC9jb2RlPiBjb21wYXRpYmlsaXR5LgotICBJbiBwYXJ0aWN1bGFyLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tZmFzdDwvY29kZT4gZG9lc24ndAotICBtYWtlIHRoaW5ncyBzaWduaWZpY2FudGx5IGZhc3Rlci4gIEFuZAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tYmVzdDwvY29kZT4gbWVyZWx5IHNlbGVjdHMgdGhlCi0gIGRlZmF1bHQgYmVoYXZpb3VyLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlRyZWF0cyBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXMgZmlsZSBuYW1lcywKLSAgZXZlbiBpZiB0aGV5IHN0YXJ0IHdpdGggYSBkYXNoLiAgVGhpcyBpcyBzbyB5b3UgY2FuIGhhbmRsZQotICBmaWxlcyB3aXRoIG5hbWVzIGJlZ2lubmluZyB3aXRoIGEgZGFzaCwgZm9yIGV4YW1wbGU6Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIgLS0KLSAgLW15ZmlsZW5hbWU8L2NvZGU+LjwvcD48L2RkPgotPGR0PgotPHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS1yZXBldGl0aXZlLWZhc3Q8L2NvZGU+LCA8L3NwYW4+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS1yZXBldGl0aXZlLWJlc3Q8L2NvZGU+PC9zcGFuPgotPC9kdD4KLTxkZD48cD5UaGVzZSBmbGFncyBhcmUgcmVkdW5kYW50IGluIHZlcnNpb25zIDAuOS41IGFuZAotICBhYm92ZS4gIFRoZXkgcHJvdmlkZWQgc29tZSBjb2Fyc2UgY29udHJvbCBvdmVyIHRoZSBiZWhhdmlvdXIgb2YKLSAgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGluIGVhcmxpZXIgdmVyc2lvbnMsIHdoaWNoIHdhcyBzb21ldGltZXMKLSAgdXNlZnVsLiAgMC45LjUgYW5kIGFib3ZlIGhhdmUgYW4gaW1wcm92ZWQgYWxnb3JpdGhtIHdoaWNoCi0gIHJlbmRlcnMgdGhlc2UgZmxhZ3MgaXJyZWxldmFudC48L3A+PC9kZD4KLTwvZGw+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0ibWVtb3J5LW1hbmFnZW1lbnQiPjwvYT4yLjUuoE1FTU9SWSBNQU5BR0VNRU5UPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGNvbXByZXNzZXMgbGFyZ2UKLWZpbGVzIGluIGJsb2Nrcy4gIFRoZSBibG9jayBzaXplIGFmZmVjdHMgYm90aCB0aGUgY29tcHJlc3Npb24KLXJhdGlvIGFjaGlldmVkLCBhbmQgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciBjb21wcmVzc2lvbgotYW5kIGRlY29tcHJlc3Npb24uICBUaGUgZmxhZ3MgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tMTwvY29kZT4KLXRocm91Z2ggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tOTwvY29kZT4gc3BlY2lmeSB0aGUgYmxvY2sKLXNpemUgdG8gYmUgMTAwLDAwMCBieXRlcyB0aHJvdWdoIDkwMCwwMDAgYnl0ZXMgKHRoZSBkZWZhdWx0KQotcmVzcGVjdGl2ZWx5LiAgQXQgZGVjb21wcmVzc2lvbiB0aW1lLCB0aGUgYmxvY2sgc2l6ZSB1c2VkIGZvcgotY29tcHJlc3Npb24gaXMgcmVhZCBmcm9tIHRoZSBoZWFkZXIgb2YgdGhlIGNvbXByZXNzZWQgZmlsZSwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ1bnppcDI8L2NvZGU+IHRoZW4gYWxsb2NhdGVzIGl0c2VsZgotanVzdCBlbm91Z2ggbWVtb3J5IHRvIGRlY29tcHJlc3MgdGhlIGZpbGUuICBTaW5jZSBibG9jayBzaXplcyBhcmUKLXN0b3JlZCBpbiBjb21wcmVzc2VkIGZpbGVzLCBpdCBmb2xsb3dzIHRoYXQgdGhlIGZsYWdzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0xPC9jb2RlPiB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tOTwvY29kZT4gYXJlIGlycmVsZXZhbnQgdG8gYW5kIHNvCi1pZ25vcmVkIGR1cmluZyBkZWNvbXByZXNzaW9uLjwvcD4KLTxwPkNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHJlcXVpcmVtZW50cywgaW4gYnl0ZXMsIGNhbiBiZQotZXN0aW1hdGVkIGFzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5Db21wcmVzc2lvbjogICA0MDBrICsgKCA4IHggYmxvY2sgc2l6ZSApCi0KLURlY29tcHJlc3Npb246IDEwMGsgKyAoIDQgeCBibG9jayBzaXplICksIG9yCi0gICAgICAgICAgICAgICAxMDBrICsgKCAyLjUgeCBibG9jayBzaXplICk8L3ByZT4KLTxwPkxhcmdlciBibG9jayBzaXplcyBnaXZlIHJhcGlkbHkgZGltaW5pc2hpbmcgbWFyZ2luYWwKLXJldHVybnMuICBNb3N0IG9mIHRoZSBjb21wcmVzc2lvbiBjb21lcyBmcm9tIHRoZSBmaXJzdCB0d28gb3IKLXRocmVlIGh1bmRyZWQgayBvZiBibG9jayBzaXplLCBhIGZhY3Qgd29ydGggYmVhcmluZyBpbiBtaW5kIHdoZW4KLXVzaW5nIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IG9uIHNtYWxsIG1hY2hpbmVzLgotSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gYXBwcmVjaWF0ZSB0aGF0IHRoZSBkZWNvbXByZXNzaW9uIG1lbW9yeQotcmVxdWlyZW1lbnQgaXMgc2V0IGF0IGNvbXByZXNzaW9uIHRpbWUgYnkgdGhlIGNob2ljZSBvZiBibG9jawotc2l6ZS48L3A+Ci08cD5Gb3IgZmlsZXMgY29tcHJlc3NlZCB3aXRoIHRoZSBkZWZhdWx0IDkwMGsgYmxvY2sgc2l6ZSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnVuemlwMjwvY29kZT4gd2lsbCByZXF1aXJlIGFib3V0IDM3MDAKLWtieXRlcyB0byBkZWNvbXByZXNzLiAgVG8gc3VwcG9ydCBkZWNvbXByZXNzaW9uIG9mIGFueSBmaWxlIG9uIGEKLTQgbWVnYWJ5dGUgbWFjaGluZSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idW56aXAyPC9jb2RlPiBoYXMKLWFuIG9wdGlvbiB0byBkZWNvbXByZXNzIHVzaW5nIGFwcHJveGltYXRlbHkgaGFsZiB0aGlzIGFtb3VudCBvZgotbWVtb3J5LCBhYm91dCAyMzAwIGtieXRlcy4gIERlY29tcHJlc3Npb24gc3BlZWQgaXMgYWxzbyBoYWx2ZWQsCi1zbyB5b3Ugc2hvdWxkIHVzZSB0aGlzIG9wdGlvbiBvbmx5IHdoZXJlIG5lY2Vzc2FyeS4gIFRoZSByZWxldmFudAotZmxhZyBpcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1zPC9jb2RlPi48L3A+Ci08cD5JbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeQotY29uc3RyYWludHMgYWxsb3csIHNpbmNlIHRoYXQgbWF4aW1pc2VzIHRoZSBjb21wcmVzc2lvbiBhY2hpZXZlZC4KLUNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGFyZSB2aXJ0dWFsbHkgdW5hZmZlY3RlZCBieQotYmxvY2sgc2l6ZS48L3A+Ci08cD5Bbm90aGVyIHNpZ25pZmljYW50IHBvaW50IGFwcGxpZXMgdG8gZmlsZXMgd2hpY2ggZml0IGluIGEKLXNpbmdsZSBibG9jayAtLSB0aGF0IG1lYW5zIG1vc3QgZmlsZXMgeW91J2QgZW5jb3VudGVyIHVzaW5nIGEKLWxhcmdlIGJsb2NrIHNpemUuICBUaGUgYW1vdW50IG9mIHJlYWwgbWVtb3J5IHRvdWNoZWQgaXMKLXByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgc2luY2UgdGhlIGZpbGUgaXMgc21hbGxlcgotdGhhbiBhIGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbXByZXNzaW5nIGEgZmlsZSAyMCwwMDAgYnl0ZXMgbG9uZwotd2l0aCB0aGUgZmxhZyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi05PC9jb2RlPiB3aWxsIGNhdXNlIHRoZQotY29tcHJlc3NvciB0byBhbGxvY2F0ZSBhcm91bmQgNzYwMGsgb2YgbWVtb3J5LCBidXQgb25seSB0b3VjaAotNDAwayArIDIwMDAwICogOCA9IDU2MCBrYnl0ZXMgb2YgaXQuICBTaW1pbGFybHksIHRoZSBkZWNvbXByZXNzb3IKLXdpbGwgYWxsb2NhdGUgMzcwMGsgYnV0IG9ubHkgdG91Y2ggMTAwayArIDIwMDAwICogNCA9IDE4MAota2J5dGVzLjwvcD4KLTxwPkhlcmUgaXMgYSB0YWJsZSB3aGljaCBzdW1tYXJpc2VzIHRoZSBtYXhpbXVtIG1lbW9yeSB1c2FnZQotZm9yIGRpZmZlcmVudCBibG9jayBzaXplcy4gIEFsc28gcmVjb3JkZWQgaXMgdGhlIHRvdGFsIGNvbXByZXNzZWQKLXNpemUgZm9yIDE0IGZpbGVzIG9mIHRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlc3Npb24gQ29ycHVzCi10b3RhbGxpbmcgMywxNDEsNjIyIGJ5dGVzLiAgVGhpcyBjb2x1bW4gZ2l2ZXMgc29tZSBmZWVsIGZvciBob3cKLWNvbXByZXNzaW9uIHZhcmllcyB3aXRoIGJsb2NrIHNpemUuICBUaGVzZSBmaWd1cmVzIHRlbmQgdG8KLXVuZGVyc3RhdGUgdGhlIGFkdmFudGFnZSBvZiBsYXJnZXIgYmxvY2sgc2l6ZXMgZm9yIGxhcmdlciBmaWxlcywKLXNpbmNlIHRoZSBDb3JwdXMgaXMgZG9taW5hdGVkIGJ5IHNtYWxsZXIgZmlsZXMuPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgICAgICAgQ29tcHJlc3MgICBEZWNvbXByZXNzICAgRGVjb21wcmVzcyAgIENvcnB1cwotRmxhZyAgICAgdXNhZ2UgICAgICB1c2FnZSAgICAgICAtcyB1c2FnZSAgICAgU2l6ZQotCi0gLTEgICAgICAxMjAwayAgICAgICA1MDBrICAgICAgICAgMzUwayAgICAgIDkxNDcwNAotIC0yICAgICAgMjAwMGsgICAgICAgOTAwayAgICAgICAgIDYwMGsgICAgICA4Nzc3MDMKLSAtMyAgICAgIDI4MDBrICAgICAgMTMwMGsgICAgICAgICA4NTBrICAgICAgODYwMzM4Ci0gLTQgICAgICAzNjAwayAgICAgIDE3MDBrICAgICAgICAxMTAwayAgICAgIDg0Njg5OQotIC01ICAgICAgNDQwMGsgICAgICAyMTAwayAgICAgICAgMTM1MGsgICAgICA4NDUxNjAKLSAtNiAgICAgIDUyMDBrICAgICAgMjUwMGsgICAgICAgIDE2MDBrICAgICAgODM4NjI2Ci0gLTcgICAgICA2MTAwayAgICAgIDI5MDBrICAgICAgICAxODUwayAgICAgIDgzNDA5NgotIC04ICAgICAgNjgwMGsgICAgICAzMzAwayAgICAgICAgMjEwMGsgICAgICA4Mjg2NDIKLSAtOSAgICAgIDc2MDBrICAgICAgMzcwMGsgICAgICAgIDIzNTBrICAgICAgODI4NjQyPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0icmVjb3ZlcmluZyI+PC9hPjIuNi6gUkVDT1ZFUklORyBEQVRBIEZST00gREFNQUdFRCBGSUxFUzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBjb21wcmVzc2VzIGZpbGVzIGluCi1ibG9ja3MsIHVzdWFsbHkgOTAwa2J5dGVzIGxvbmcuICBFYWNoIGJsb2NrIGlzIGhhbmRsZWQKLWluZGVwZW5kZW50bHkuICBJZiBhIG1lZGlhIG9yIHRyYW5zbWlzc2lvbiBlcnJvciBjYXVzZXMgYQotbXVsdGktYmxvY2sgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4uYnoyPC9jb2RlPiBmaWxlIHRvIGJlY29tZQotZGFtYWdlZCwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIHJlY292ZXIgZGF0YSBmcm9tIHRoZSB1bmRhbWFnZWQKLWJsb2NrcyBpbiB0aGUgZmlsZS48L3A+Ci08cD5UaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrIGlzIGRlbGltaXRlZCBieQotYSA0OC1iaXQgcGF0dGVybiwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gZmluZCB0aGUgYmxvY2sKLWJvdW5kYXJpZXMgd2l0aCByZWFzb25hYmxlIGNlcnRhaW50eS4gIEVhY2ggYmxvY2sgYWxzbyBjYXJyaWVzCi1pdHMgb3duIDMyLWJpdCBDUkMsIHNvIGRhbWFnZWQgYmxvY2tzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20KLXVuZGFtYWdlZCBvbmVzLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiBpcyBhIHNpbXBsZQotcHJvZ3JhbSB3aG9zZSBwdXJwb3NlIGlzIHRvIHNlYXJjaCBmb3IgYmxvY2tzIGluCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejI8L2NvZGU+IGZpbGVzLCBhbmQgd3JpdGUgZWFjaCBibG9jawotb3V0IGludG8gaXRzIG93biA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejI8L2NvZGU+IGZpbGUuICBZb3UKLWNhbiB0aGVuIHVzZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyIC10PC9jb2RlPiB0byB0ZXN0Ci10aGUgaW50ZWdyaXR5IG9mIHRoZSByZXN1bHRpbmcgZmlsZXMsIGFuZCBkZWNvbXByZXNzIHRob3NlIHdoaWNoCi1hcmUgdW5kYW1hZ2VkLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiB0YWtlcyBhCi1zaW5nbGUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBkYW1hZ2VkIGZpbGUsIGFuZCB3cml0ZXMgYQotbnVtYmVyIG9mIGZpbGVzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cmVjMDAwMWZpbGUuYnoyPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cmVjMDAwMmZpbGUuYnoyPC9jb2RlPiwgZXRjLCBjb250YWluaW5nCi10aGUgZXh0cmFjdGVkIGJsb2Nrcy4gIFRoZSBvdXRwdXQgZmlsZW5hbWVzIGFyZSBkZXNpZ25lZCBzbyB0aGF0Ci10aGUgdXNlIG9mIHdpbGRjYXJkcyBpbiBzdWJzZXF1ZW50IHByb2Nlc3NpbmcgLS0gZm9yIGV4YW1wbGUsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyIC1kYyByZWMqZmlsZS5iejIgJmd0OwotcmVjb3ZlcmVkX2RhdGE8L2NvZGU+IC0tIGxpc3RzIHRoZSBmaWxlcyBpbiB0aGUgY29ycmVjdAotb3JkZXIuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMnJlY292ZXI8L2NvZGU+IHNob3VsZCBiZSBvZgotbW9zdCB1c2UgZGVhbGluZyB3aXRoIGxhcmdlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LmJ6MjwvY29kZT4KLWZpbGVzLCBhcyB0aGVzZSB3aWxsIGNvbnRhaW4gbWFueSBibG9ja3MuICBJdCBpcyBjbGVhcmx5IGZ1dGlsZQotdG8gdXNlIGl0IG9uIGRhbWFnZWQgc2luZ2xlLWJsb2NrIGZpbGVzLCBzaW5jZSBhIGRhbWFnZWQgYmxvY2sKLWNhbm5vdCBiZSByZWNvdmVyZWQuICBJZiB5b3Ugd2lzaCB0byBtaW5pbWlzZSBhbnkgcG90ZW50aWFsIGRhdGEKLWxvc3MgdGhyb3VnaCBtZWRpYSBvciB0cmFuc21pc3Npb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIKLWNvbXByZXNzaW5nIHdpdGggYSBzbWFsbGVyIGJsb2NrIHNpemUuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InBlcmZvcm1hbmNlIj48L2E+Mi43LqBQRVJGT1JNQU5DRSBOT1RFUzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5UaGUgc29ydGluZyBwaGFzZSBvZiBjb21wcmVzc2lvbiBnYXRoZXJzIHRvZ2V0aGVyIHNpbWlsYXIKLXN0cmluZ3MgaW4gdGhlIGZpbGUuICBCZWNhdXNlIG9mIHRoaXMsIGZpbGVzIGNvbnRhaW5pbmcgdmVyeSBsb25nCi1ydW5zIG9mIHJlcGVhdGVkIHN5bWJvbHMsIGxpa2UgImFhYmFhYmFhYmFhYiAuLi4iICAocmVwZWF0ZWQKLXNldmVyYWwgaHVuZHJlZCB0aW1lcykgbWF5IGNvbXByZXNzIG1vcmUgc2xvd2x5IHRoYW4gbm9ybWFsLgotVmVyc2lvbnMgMC45LjUgYW5kIGFib3ZlIGZhcmUgbXVjaCBiZXR0ZXIgdGhhbiBwcmV2aW91cyB2ZXJzaW9ucwotaW4gdGhpcyByZXNwZWN0LiAgVGhlIHJhdGlvIGJldHdlZW4gd29yc3QtY2FzZSBhbmQgYXZlcmFnZS1jYXNlCi1jb21wcmVzc2lvbiB0aW1lIGlzIGluIHRoZSByZWdpb24gb2YgMTA6MS4gIEZvciBwcmV2aW91cwotdmVyc2lvbnMsIHRoaXMgZmlndXJlIHdhcyBtb3JlIGxpa2UgMTAwOjEuICBZb3UgY2FuIHVzZSB0aGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LXZ2dnY8L2NvZGU+IG9wdGlvbiB0byBtb25pdG9yIHByb2dyZXNzCi1pbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LjwvcD4KLTxwPkRlY29tcHJlc3Npb24gc3BlZWQgaXMgdW5hZmZlY3RlZCBieSB0aGVzZQotcGhlbm9tZW5hLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHVzdWFsbHkgYWxsb2NhdGVzCi1zZXZlcmFsIG1lZ2FieXRlcyBvZiBtZW1vcnkgdG8gb3BlcmF0ZSBpbiwgYW5kIHRoZW4gY2hhcmdlcyBhbGwKLW92ZXIgaXQgaW4gYSBmYWlybHkgcmFuZG9tIGZhc2hpb24uICBUaGlzIG1lYW5zIHRoYXQgcGVyZm9ybWFuY2UsCi1ib3RoIGZvciBjb21wcmVzc2luZyBhbmQgZGVjb21wcmVzc2luZywgaXMgbGFyZ2VseSBkZXRlcm1pbmVkIGJ5Ci10aGUgc3BlZWQgYXQgd2hpY2ggeW91ciBtYWNoaW5lIGNhbiBzZXJ2aWNlIGNhY2hlIG1pc3Nlcy4KLUJlY2F1c2Ugb2YgdGhpcywgc21hbGwgY2hhbmdlcyB0byB0aGUgY29kZSB0byByZWR1Y2UgdGhlIG1pc3MKLXJhdGUgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGdpdmUgZGlzcHJvcG9ydGlvbmF0ZWx5IGxhcmdlCi1wZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHdpbGwgcGVyZm9ybSBiZXN0IG9uCi1tYWNoaW5lcyB3aXRoIHZlcnkgbGFyZ2UgY2FjaGVzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJjYXZlYXRzIj48L2E+Mi44LqBDQVZFQVRTPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkkvTyBlcnJvciBtZXNzYWdlcyBhcmUgbm90IGFzIGhlbHBmdWwgYXMgdGhleSBjb3VsZCBiZS4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IHRyaWVzIGhhcmQgdG8gZGV0ZWN0IEkvTwotZXJyb3JzIGFuZCBleGl0IGNsZWFubHksIGJ1dCB0aGUgZGV0YWlscyBvZiB3aGF0IHRoZSBwcm9ibGVtIGlzCi1zb21ldGltZXMgc2VlbSByYXRoZXIgbWlzbGVhZGluZy48L3A+Ci08cD5UaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gMS4wLjUgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+LiAgQ29tcHJlc3NlZCBkYXRhIGNyZWF0ZWQgYnkKLXRoaXMgdmVyc2lvbiBpcyBlbnRpcmVseSBmb3J3YXJkcyBhbmQgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCB0aGUKLXByZXZpb3VzIHB1YmxpYyByZWxlYXNlcywgdmVyc2lvbnMgMC4xcGwyLCAwLjkuMCBhbmQgMC45LjUsIDEuMC4wLAotMS4wLjEsIDEuMC4yIGFuZCAxLjAuMywgYnV0IHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb246IDAuOS4wIGFuZAotYWJvdmUgY2FuIGNvcnJlY3RseSBkZWNvbXByZXNzIG11bHRpcGxlIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzLgotMC4xcGwyIGNhbm5vdCBkbyB0aGlzOyBpdCB3aWxsIHN0b3AgYWZ0ZXIgZGVjb21wcmVzc2luZyBqdXN0IHRoZSBmaXJzdAotZmlsZSBpbiB0aGUgc3RyZWFtLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiB2ZXJzaW9ucwotcHJpb3IgdG8gMS4wLjIgdXNlZCAzMi1iaXQgaW50ZWdlcnMgdG8gcmVwcmVzZW50IGJpdCBwb3NpdGlvbnMgaW4KLWNvbXByZXNzZWQgZmlsZXMsIHNvIGl0IGNvdWxkIG5vdCBoYW5kbGUgY29tcHJlc3NlZCBmaWxlcyBtb3JlCi10aGFuIDUxMiBtZWdhYnl0ZXMgbG9uZy4gIFZlcnNpb25zIDEuMC4yIGFuZCBhYm92ZSB1c2UgNjQtYml0IGludHMKLW9uIHNvbWUgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgdGhlbSAoR05VIHN1cHBvcnRlZCB0YXJnZXRzLCBhbmQKLVdpbmRvd3MpLiBUbyBlc3RhYmxpc2ggd2hldGhlciBvciBub3QKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDJyZWNvdmVyPC9jb2RlPiB3YXMgYnVpbHQgd2l0aCBzdWNoCi1hIGxpbWl0YXRpb24sIHJ1biBpdCB3aXRob3V0IGFyZ3VtZW50cy4gSW4gYW55IGV2ZW50IHlvdSBjYW4KLWJ1aWxkIHlvdXJzZWxmIGFuIHVubGltaXRlZCB2ZXJzaW9uIGlmIHlvdSBjYW4gcmVjb21waWxlIGl0IHdpdGgKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TWF5YmVVSW50NjQ8L2NvZGU+IHNldCB0byBiZSBhbgotdW5zaWduZWQgNjQtYml0IGludGVnZXIuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImF1dGhvciI+PC9hPjIuOS6gQVVUSE9SPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkp1bGlhbiBTZXdhcmQsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmpzZXdhcmRAYnppcC5vcmc8L2NvZGU+PC9wPgotPHA+VGhlIGlkZWFzIGVtYm9kaWVkIGluCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBhcmUgZHVlIHRvIChhdCBsZWFzdCkgdGhlCi1mb2xsb3dpbmcgcGVvcGxlOiBNaWNoYWVsIEJ1cnJvd3MgYW5kIERhdmlkIFdoZWVsZXIgKGZvciB0aGUKLWJsb2NrIHNvcnRpbmcgdHJhbnNmb3JtYXRpb24pLCBEYXZpZCBXaGVlbGVyIChhZ2FpbiwgZm9yIHRoZQotSHVmZm1hbiBjb2RlciksIFBldGVyIEZlbndpY2sgKGZvciB0aGUgc3RydWN0dXJlZCBjb2RpbmcgbW9kZWwgaW4KLXRoZSBvcmlnaW5hbCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXA8L2NvZGU+LCBhbmQgbWFueQotcmVmaW5lbWVudHMpLCBhbmQgQWxpc3RhaXIgTW9mZmF0LCBSYWRmb3JkIE5lYWwgYW5kIElhbiBXaXR0ZW4KLShmb3IgdGhlIGFyaXRobWV0aWMgY29kZXIgaW4gdGhlIG9yaWdpbmFsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXA8L2NvZGU+KS4gIEkgYW0gbXVjaCBpbmRlYnRlZCBmb3IKLXRoZWlyIGhlbHAsIHN1cHBvcnQgYW5kIGFkdmljZS4gIFNlZSB0aGUgbWFudWFsIGluIHRoZSBzb3VyY2UKLWRpc3RyaWJ1dGlvbiBmb3IgcG9pbnRlcnMgdG8gc291cmNlcyBvZiBkb2N1bWVudGF0aW9uLiAgQ2hyaXN0aWFuCi12b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vayBmb3IgZmFzdGVyIHNvcnRpbmcgYWxnb3JpdGhtcywKLXNvIGFzIHRvIHNwZWVkIHVwIGNvbXByZXNzaW9uLiAgQmVsYSBMdWJraW4gZW5jb3VyYWdlZCBtZSB0bwotaW1wcm92ZSB0aGUgd29yc3QtY2FzZSBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZS4gIAotRG9ubmEgUm9iaW5zb24gWE1MaXNlZCB0aGUgZG9jdW1lbnRhdGlvbi4KLU1hbnkgcGVvcGxlIHNlbnQKLXBhdGNoZXMsIGhlbHBlZCB3aXRoIHBvcnRhYmlsaXR5IHByb2JsZW1zLCBsZW50IG1hY2hpbmVzLCBnYXZlCi1hZHZpY2UgYW5kIHdlcmUgZ2VuZXJhbGx5IGhlbHBmdWwuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0ibGlicHJvZyI+PC9hPjMuoAotUHJvZ3JhbW1pbmcgd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPgotPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+Ci08cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Ci08ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjdG9wLWxldmVsIj4zLjEuIFRvcC1sZXZlbCBzdHJ1Y3R1cmU8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2xsLXN1bW1hcnkiPjMuMS4xLiBMb3ctbGV2ZWwgc3VtbWFyeTwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNobC1zdW1tYXJ5Ij4zLjEuMi4gSGlnaC1sZXZlbCBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI3V0aWwtZm5zLXN1bW1hcnkiPjMuMS4zLiBVdGlsaXR5IGZ1bmN0aW9ucyBzdW1tYXJ5PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2Vyci1oYW5kbGluZyI+My4yLiBFcnJvciBoYW5kbGluZzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNsb3ctbGV2ZWwiPjMuMy4gTG93LWxldmVsIGludGVyZmFjZTwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpjb21wcmVzcy1pbml0Ij4zLjMuMS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6Q29tcHJlc3MiPjMuMy4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekNvbXByZXNzLWVuZCI+My4zLjMuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NFbmQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6RGVjb21wcmVzcy1pbml0Ij4zLjMuNC4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpEZWNvbXByZXNzIj4zLjMuNS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNiekRlY29tcHJlc3MtZW5kIj4zLjMuNi4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNobC1pbnRlcmZhY2UiPjMuNC4gSGlnaC1sZXZlbCBpbnRlcmZhY2U8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZG9wZW4iPjMuNC4xLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNienJlYWQiPjMuNC4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6cmVhZGdldHVudXNlZCI+My40LjMuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnpyZWFkY2xvc2UiPjMuNC40LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZW9wZW4iPjMuNC41LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlT3BlbjwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjYnp3cml0ZSI+My40LjYuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGU8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6d3JpdGVjbG9zZSI+My40LjcuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT48L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSIjZW1iZWQiPjMuNC44LiBIYW5kbGluZyBlbWJlZGRlZCBjb21wcmVzc2VkIGRhdGEgc3RyZWFtczwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNzdGQtcmR3ciI+My40LjkuIFN0YW5kYXJkIGZpbGUtcmVhZGluZy93cml0aW5nIGNvZGU8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjdXRpbC1mbnMiPjMuNS4gVXRpbGl0eSBmdW5jdGlvbnM8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6YnVmZnRvYnVmZmNvbXByZXNzIj4zLjUuMS4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvZGU+PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iI2J6YnVmZnRvYnVmZmRlY29tcHJlc3MiPjMuNS4yLiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiN6bGliLWNvbXBhdCI+My42LiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnpsaWI8L2NvZGU+IGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3N0ZGlvLWZyZWUiPjMuNy4gVXNpbmcgdGhlIGxpYnJhcnkgaW4gYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPi1mcmVlIGVudmlyb25tZW50PC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNzdGRpby1ieWUiPjMuNy4xLiBHZXR0aW5nIHJpZCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvPC9jb2RlPjwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9IiNjcml0aWNhbC1lcnJvciI+My43LjIuIENyaXRpY2FsIGVycm9yIGhhbmRsaW5nPC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI3dpbi1kbGwiPjMuOC4gTWFraW5nIGEgV2luZG93cyBETEw8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPgotPC9kaXY+Ci08cD5UaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBwcm9ncmFtbWluZyBpbnRlcmZhY2UgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+LjwvcD4KLTxwPkZvciBnZW5lcmFsIGJhY2tncm91bmQgaW5mb3JtYXRpb24sIHBhcnRpY3VsYXJseSBhYm91dAotbWVtb3J5IHVzZSBhbmQgcGVyZm9ybWFuY2UgYXNwZWN0cywgeW91J2QgYmUgd2VsbCBhZHZpc2VkIHRvIHJlYWQKLTxhIGhyZWY9IiN1c2luZyI+SG93IHRvIHVzZSBiemlwMjwvYT4gYXMgd2VsbC48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InRvcC1sZXZlbCI+PC9hPjMuMS6gVG9wLWxldmVsIHN0cnVjdHVyZTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiBpcyBhIGZsZXhpYmxlCi1saWJyYXJ5IGZvciBjb21wcmVzc2luZyBhbmQgZGVjb21wcmVzc2luZyBkYXRhIGluIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZGF0YSBmb3JtYXQuICBBbHRob3VnaAotcGFja2FnZWQgYXMgYSBzaW5nbGUgZW50aXR5LCBpdCBoZWxwcyB0byByZWdhcmQgdGhlIGxpYnJhcnkgYXMKLXRocmVlIHNlcGFyYXRlIHBhcnRzOiB0aGUgbG93IGxldmVsIGludGVyZmFjZSwgYW5kIHRoZSBoaWdoIGxldmVsCi1pbnRlcmZhY2UsIGFuZCBzb21lIHV0aWxpdHkgZnVuY3Rpb25zLjwvcD4KLTxwPlRoZSBzdHJ1Y3R1cmUgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+J3MgaW50ZXJmYWNlcyBpcyBzaW1pbGFyCi10byB0aGF0IG9mIEplYW4tbG91cCBHYWlsbHkncyBhbmQgTWFyayBBZGxlcidzIGV4Y2VsbGVudAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij56bGliPC9jb2RlPiBsaWJyYXJ5LjwvcD4KLTxwPkFsbCBleHRlcm5hbGx5IHZpc2libGUgc3ltYm9scyBoYXZlIG5hbWVzIGJlZ2lubmluZwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfPC9jb2RlPi4gIFRoaXMgaXMgbmV3IGluIHZlcnNpb24KLTEuMC4gIFRoZSBpbnRlbnRpb24gaXMgdG8gbWluaW1pc2UgcG9sbHV0aW9uIG9mIHRoZSBuYW1lc3BhY2VzIG9mCi1saWJyYXJ5IGNsaWVudHMuPC9wPgotPHA+VG8gdXNlIGFueSBwYXJ0IG9mIHRoZSBsaWJyYXJ5LCB5b3UgbmVlZCB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4jaW5jbHVkZSAmbHQ7YnpsaWIuaCZndDs8L2NvZGU+Ci1pbnRvIHlvdXIgc291cmNlcy48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJsbC1zdW1tYXJ5Ij48L2E+My4xLjEuoExvdy1sZXZlbCBzdW1tYXJ5PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHNlcnZpY2VzIGZvciBjb21wcmVzc2luZyBhbmQKLWRlY29tcHJlc3NpbmcgZGF0YSBpbiBtZW1vcnkuICBUaGVyZSdzIG5vIHByb3Zpc2lvbiBmb3IgZGVhbGluZwotd2l0aCBmaWxlcywgc3RyZWFtcyBvciBhbnkgb3RoZXIgSS9PIG1lY2hhbmlzbXMsIGp1c3Qgc3RyYWlnaHQKLW1lbW9yeS10by1tZW1vcnkgd29yay4gIEluIGZhY3QsIHRoaXMgcGFydCBvZiB0aGUgbGlicmFyeSBjYW4gYmUKLWNvbXBpbGVkIHdpdGhvdXQgaW5jbHVzaW9uIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnN0ZGlvLmg8L2NvZGU+LCB3aGljaCBtYXkgYmUgaGVscGZ1bAotZm9yIGVtYmVkZGVkIGFwcGxpY2F0aW9ucy48L3A+Ci08cD5UaGUgbG93LWxldmVsIHBhcnQgb2YgdGhlIGxpYnJhcnkgaGFzIG5vIGdsb2JhbCB2YXJpYWJsZXMKLWFuZCBpcyB0aGVyZWZvcmUgdGhyZWFkLXNhZmUuPC9wPgotPHA+U2l4IHJvdXRpbmVzIG1ha2UgdXAgdGhlIGxvdyBsZXZlbCBpbnRlcmZhY2U6Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzRW5kPC9jb2RlPiBmb3IKLWNvbXByZXNzaW9uLCBhbmQgYSBjb3JyZXNwb25kaW5nIHRyaW8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0VuZDwvY29kZT4gZm9yCi1kZWNvbXByZXNzaW9uLiAgVGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KkluaXQ8L2NvZGU+Ci1mdW5jdGlvbnMgYWxsb2NhdGUgbWVtb3J5IGZvciBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGFuZCBkbwotb3RoZXIgaW5pdGlhbGlzYXRpb25zLCB3aGlsc3QgdGhlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPipFbmQ8L2NvZGU+IGZ1bmN0aW9ucyBjbG9zZSBkb3duCi1vcGVyYXRpb25zIGFuZCByZWxlYXNlIG1lbW9yeS48L3A+Ci08cD5UaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPi4gIFRoZXNlCi1jb21wcmVzcyBhbmQgZGVjb21wcmVzcyBkYXRhIGZyb20gYSB1c2VyLXN1cHBsaWVkIGlucHV0IGJ1ZmZlciB0bwotYSB1c2VyLXN1cHBsaWVkIG91dHB1dCBidWZmZXIuICBUaGVzZSBidWZmZXJzIGNhbiBiZSBhbnkgc2l6ZTsKLWFyYml0cmFyeSBxdWFudGl0aWVzIG9mIGRhdGEgYXJlIGhhbmRsZWQgYnkgbWFraW5nIHJlcGVhdGVkIGNhbGxzCi10byB0aGVzZSBmdW5jdGlvbnMuICBUaGlzIGlzIGEgZmxleGlibGUgbWVjaGFuaXNtIGFsbG93aW5nIGEKLWNvbnN1bWVyLXB1bGwgc3R5bGUgb2YgYWN0aXZpdHksIG9yIHByb2R1Y2VyLXB1c2gsIG9yIGEgbWl4dHVyZQotb2YgYm90aC48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImhsLXN1bW1hcnkiPjwvYT4zLjEuMi6gSGlnaC1sZXZlbCBzdW1tYXJ5PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHNvbWUgaGFuZHkgd3JhcHBlcnMgYXJvdW5kIHRoZQotbG93LWxldmVsIGludGVyZmFjZSB0byBmYWNpbGl0YXRlIHJlYWRpbmcgYW5kIHdyaXRpbmcKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGZvcm1hdCBmaWxlcwotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LmJ6MjwvY29kZT4gZmlsZXMpLiAgVGhlIHJvdXRpbmVzCi1wcm92aWRlIGhvb2tzIHRvIGZhY2lsaXRhdGUgcmVhZGluZyBmaWxlcyBpbiB3aGljaCB0aGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGRhdGEgc3RyZWFtIGlzIGVtYmVkZGVkCi13aXRoaW4gc29tZSBsYXJnZXItc2NhbGUgZmlsZSBzdHJ1Y3R1cmUsIG9yIHdoZXJlIHRoZXJlIGFyZQotbXVsdGlwbGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZGF0YSBzdHJlYW1zCi1jb25jYXRlbmF0ZWQgZW5kLXRvLWVuZC48L3A+Ci08cD5Gb3IgcmVhZGluZyBmaWxlcywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPiBhbmQgCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvZGU+IGFyZQotc3VwcGxpZWQuICBGb3Igd3JpdGluZyBmaWxlcywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVPcGVuPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGU8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUZpbmlzaDwvY29kZT4gYXJlCi1hdmFpbGFibGUuPC9wPgotPHA+QXMgd2l0aCB0aGUgbG93LWxldmVsIGxpYnJhcnksIG5vIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHVzZWQKLXNvIHRoZSBsaWJyYXJ5IGlzIHBlciBzZSB0aHJlYWQtc2FmZS4gIEhvd2V2ZXIsIGlmIEkvTyBlcnJvcnMKLW9jY3VyIHdoaWxzdCByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIHVuZGVybHlpbmcgY29tcHJlc3NlZCBmaWxlcywKLXlvdSBtYXkgaGF2ZSB0byBjb25zdWx0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZXJybm88L2NvZGU+IHRvCi1kZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4gIEluIHRoYXQgY2FzZSwgeW91J2QgbmVlZCBhIEMKLWxpYnJhcnkgd2hpY2ggY29ycmVjdGx5IHN1cHBvcnRzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmVycm5vPC9jb2RlPiBpbiBhIG11bHRpdGhyZWFkZWQKLWVudmlyb25tZW50LjwvcD4KLTxwPlRvIG1ha2UgdGhlIGxpYnJhcnkgYSBsaXR0bGUgc2ltcGxlciBhbmQgbW9yZSBwb3J0YWJsZSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZU9wZW48L2NvZGU+IHJlcXVpcmUgeW91IHRvCi1wYXNzIHRoZW0gZmlsZSBoYW5kbGVzICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkZJTEUqPC9jb2RlPnMpCi13aGljaCBoYXZlIHByZXZpb3VzbHkgYmVlbiBvcGVuZWQgZm9yIHJlYWRpbmcgb3Igd3JpdGluZwotcmVzcGVjdGl2ZWx5LiAgVGhhdCBhdm9pZHMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoCi1maWxlIG9wZXJhdGlvbnMgYW5kIGZpbGUgYXR0cmlidXRlcywgd2hpbHN0IG5vdCBiZWluZyBtdWNoIG9mIGFuCi1pbXBvc2l0aW9uIG9uIHRoZSBwcm9ncmFtbWVyLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0idXRpbC1mbnMtc3VtbWFyeSI+PC9hPjMuMS4zLqBVdGlsaXR5IGZ1bmN0aW9ucyBzdW1tYXJ5PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkZvciB2ZXJ5IHNpbXBsZSBuZWVkcywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+IGFyZQotcHJvdmlkZWQuICBUaGVzZSBjb21wcmVzcyBkYXRhIGluIG1lbW9yeSBmcm9tIG9uZSBidWZmZXIgdG8KLWFub3RoZXIgYnVmZmVyIGluIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuICBZb3Ugc2hvdWxkIGFzc2Vzcwotd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgZnVsZmlsbCB5b3VyIG1lbW9yeS10by1tZW1vcnkKLWNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcmVxdWlyZW1lbnRzIGJlZm9yZSBpbnZlc3RpbmcgZWZmb3J0IGluCi11bmRlcnN0YW5kaW5nIHRoZSBtb3JlIGdlbmVyYWwgYnV0IG1vcmUgY29tcGxleCBsb3ctbGV2ZWwKLWludGVyZmFjZS48L3A+Ci08cD5Zb3NoaW9rYSBUc3VuZW8KLSg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRzdW5lb0Byci5paWo0dS5vci5qcDwvY29kZT4pIGhhcwotY29udHJpYnV0ZWQgc29tZSBmdW5jdGlvbnMgdG8gZ2l2ZSBiZXR0ZXIKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+emxpYjwvY29kZT4gY29tcGF0aWJpbGl0eS4gIFRoZXNlCi1mdW5jdGlvbnMgYXJlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6b3BlbjwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ienJlYWQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnp3cml0ZTwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemZsdXNoPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Y2xvc2U8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnplcnJvcjwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemxpYlZlcnNpb248L2NvZGU+LiAgWW91IG1heSBmaW5kCi10aGVzZSBmdW5jdGlvbnMgbW9yZSBjb252ZW5pZW50IGZvciBzaW1wbGUgZmlsZSByZWFkaW5nIGFuZAotd3JpdGluZywgdGhhbiB0aG9zZSBpbiB0aGUgaGlnaC1sZXZlbCBpbnRlcmZhY2UuICBUaGVzZSBmdW5jdGlvbnMKLWFyZSBub3QgKHlldCkgb2ZmaWNpYWxseSBwYXJ0IG9mIHRoZSBsaWJyYXJ5LCBhbmQgYXJlIG1pbmltYWxseQotZG9jdW1lbnRlZCBoZXJlLiAgSWYgdGhleSBicmVhaywgeW91IGdldCB0byBrZWVwIGFsbCB0aGUgcGllY2VzLgotSSBob3BlIHRvIGRvY3VtZW50IHRoZW0gcHJvcGVybHkgd2hlbiB0aW1lIHBlcm1pdHMuPC9wPgotPHA+WW9zaGlva2EgYWxzbyBjb250cmlidXRlZCBtb2RpZmljYXRpb25zIHRvIGFsbG93IHRoZQotbGlicmFyeSB0byBiZSBidWlsdCBhcyBhIFdpbmRvd3MgRExMLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9ImVyci1oYW5kbGluZyI+PC9hPjMuMi6gRXJyb3IgaGFuZGxpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+VGhlIGxpYnJhcnkgaXMgZGVzaWduZWQgdG8gcmVjb3ZlciBjbGVhbmx5IGluIGFsbAotc2l0dWF0aW9ucywgaW5jbHVkaW5nIHRoZSB3b3JzdC1jYXNlIHNpdHVhdGlvbiBvZiBkZWNvbXByZXNzaW5nCi1yYW5kb20gZGF0YS4gIEknbSBub3QgMTAwJSBzdXJlIHRoYXQgaXQgY2FuIGFsd2F5cyBkbyB0aGlzLCBzbwoteW91IG1pZ2h0IHdhbnQgdG8gYWRkIGEgc2lnbmFsIGhhbmRsZXIgdG8gY2F0Y2ggc2VnbWVudGF0aW9uCi12aW9sYXRpb25zIGR1cmluZyBkZWNvbXByZXNzaW9uIGlmIHlvdSBhcmUgZmVlbGluZyBlc3BlY2lhbGx5Ci1wYXJhbm9pZC4gIEkgd291bGQgYmUgaW50ZXJlc3RlZCBpbiBoZWFyaW5nIG1vcmUgYWJvdXQgdGhlCi1yb2J1c3RuZXNzIG9mIHRoZSBsaWJyYXJ5IHRvIGNvcnJ1cHRlZCBjb21wcmVzc2VkIGRhdGEuPC9wPgotPHA+VmVyc2lvbiAxLjAuMyBtb3JlIHJvYnVzdCBpbiB0aGlzIHJlc3BlY3QgdGhhbiBhbnkKLXByZXZpb3VzIHZlcnNpb24uICBJbnZlc3RpZ2F0aW9ucyB3aXRoIFZhbGdyaW5kIChhIHRvb2wgZm9yIGRldGVjdGluZwotcHJvYmxlbXMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCkgaW5kaWNhdGUKLXRoYXQsIGF0IGxlYXN0IGZvciB0aGUgZmV3IGZpbGVzIEkgdGVzdGVkLCBhbGwgc2luZ2xlLWJpdCBlcnJvcnMKLWluIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBhcmUgY2F1Z2h0IHByb3Blcmx5LCB3aXRoIG5vCi1zZWdtZW50YXRpb24gZmF1bHRzLCBubyB1c2VzIG9mIHVuaW5pdGlhbGlzZWQgZGF0YSwgbm8gb3V0IG9mCi1yYW5nZSByZWFkcyBvciB3cml0ZXMsIGFuZCBubyBpbmZpbml0ZSBsb29waW5nIGluIHRoZSBkZWNvbXByZXNzb3IuCi1TbyBpdCdzIGNlcnRhaW5seSBwcmV0dHkgcm9idXN0LCBhbHRob3VnaAotSSB3b3VsZG4ndCBjbGFpbSBpdCB0byBiZSB0b3RhbGx5IGJvbWJwcm9vZi48L3A+Ci08cD5UaGUgZmlsZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6bGliLmg8L2NvZGU+IGNvbnRhaW5zCi1hbGwgZGVmaW5pdGlvbnMgbmVlZGVkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEluIHBhcnRpY3VsYXIsIHlvdQotc2hvdWxkIGRlZmluaXRlbHkgbm90IGluY2x1ZGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpsaWJfcHJpdmF0ZS5oPC9jb2RlPi48L3A+Ci08cD5JbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6bGliLmg8L2NvZGU+LCB0aGUgdmFyaW91cwotcmV0dXJuIHZhbHVlcyBhcmUgZGVmaW5lZC4gIFRoZSBmb2xsb3dpbmcgbGlzdCBpcyBub3QgaW50ZW5kZWQgYXMKLWFuIGV4aGF1c3RpdmUgZGVzY3JpcHRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggYSBnaXZlbgotdmFsdWUgbWF5IGJlIHJldHVybmVkIC0tIHRob3NlIGRlc2NyaXB0aW9ucyBhcmUgZ2l2ZW4gbGF0ZXIuCi1SYXRoZXIsIGl0IGlzIGludGVuZGVkIHRvIGNvbnZleSB0aGUgcm91Z2ggbWVhbmluZyBvZiBlYWNoIHJldHVybgotdmFsdWUuICBUaGUgZmlyc3QgZml2ZSBhY3Rpb25zIGFyZSBub3JtYWwgYW5kIG5vdCBpbnRlbmRlZCB0bwotZGVub3RlIGFuIGVycm9yIHNpdHVhdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjxkbD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PSzwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5UaGUgcmVxdWVzdGVkIGFjdGlvbiB3YXMgY29tcGxldGVkCi0gICBzdWNjZXNzZnVsbHkuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfUlVOX09LLCBCWl9GTFVTSF9PSywKLSAgICBCWl9GSU5JU0hfT0s8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+SW4gCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiwgdGhlIHJlcXVlc3RlZAotICAgZmx1c2gvZmluaXNoL25vdGhpbmctc3BlY2lhbCBhY3Rpb24gd2FzIGNvbXBsZXRlZAotICAgc3VjY2Vzc2Z1bGx5LjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+Q29tcHJlc3Npb24gb2YgZGF0YSB3YXMgY29tcGxldGVkLCBvciB0aGUKLSAgIGxvZ2ljYWwgc3RyZWFtIGVuZCB3YXMgZGV0ZWN0ZWQgZHVyaW5nCi0gICBkZWNvbXByZXNzaW9uLjwvcD48L2RkPgotPC9kbD48L2Rpdj4KLTxwPlRoZSBmb2xsb3dpbmcgcmV0dXJuIHZhbHVlcyBpbmRpY2F0ZSBhbiBlcnJvciBvZiBzb21lCi1raW5kLjwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0NPTkZJR19FUlJPUjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5JbmRpY2F0ZXMgdGhhdCB0aGUgbGlicmFyeSBoYXMgYmVlbiBpbXByb3Blcmx5Ci0gICBjb21waWxlZCBvbiB5b3VyIHBsYXRmb3JtIC0tIGEgbWFqb3IgY29uZmlndXJhdGlvbiBlcnJvci4KLSAgIFNwZWNpZmljYWxseSwgaXQgbWVhbnMgdGhhdAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zaXplb2YoY2hhcik8L2NvZGU+LAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zaXplb2Yoc2hvcnQpPC9jb2RlPiBhbmQKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c2l6ZW9mKGludCk8L2NvZGU+IGFyZSBub3QgMSwgMiBhbmQKLSAgIDQgcmVzcGVjdGl2ZWx5LCBhcyB0aGV5IHNob3VsZCBiZS4gIE5vdGUgdGhhdCB0aGUgbGlicmFyeQotICAgc2hvdWxkIHN0aWxsIHdvcmsgcHJvcGVybHkgb24gNjQtYml0IHBsYXRmb3JtcyB3aGljaCBmb2xsb3cKLSAgIHRoZSBMUDY0IHByb2dyYW1taW5nIG1vZGVsIC0tIHRoYXQgaXMsIHdoZXJlCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNpemVvZihsb25nKTwvY29kZT4gYW5kCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNpemVvZih2b2lkKik8L2NvZGU+IGFyZSA4LiAgVW5kZXIKLSAgIExQNjQsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c2l6ZW9mKGludCk8L2NvZGU+IGlzIHN0aWxsIDQsCi0gICBzbyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6aXAyPC9jb2RlPiwgd2hpY2ggZG9lc24ndAotICAgdXNlIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxvbmc8L2NvZGU+IHR5cGUsIGlzCi0gICBPSy48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TRVFVRU5DRV9FUlJPUjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5XaGVuIHVzaW5nIHRoZSBsaWJyYXJ5LCBpdCBpcyBpbXBvcnRhbnQgdG8gY2FsbAotICAgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgY29ycmVjdCBzZXF1ZW5jZSBhbmQgd2l0aCBkYXRhIHN0cnVjdHVyZXMKLSAgIChidWZmZXJzIGV0YykgaW4gdGhlIGNvcnJlY3Qgc3RhdGVzLgotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4gY2hlY2tzIGFzIG11Y2ggYXMgaXQKLSAgIGNhbiB0byBlbnN1cmUgdGhpcyBpcyBoYXBwZW5pbmcsIGFuZCByZXR1cm5zCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPiBpZiBub3QuCi0gICBDb2RlIHdoaWNoIGNvbXBsaWVzIHByZWNpc2VseSB3aXRoIHRoZSBmdW5jdGlvbiBzZW1hbnRpY3MsIGFzCi0gICBkZXRhaWxlZCBiZWxvdywgc2hvdWxkIG5ldmVyIHJlY2VpdmUgdGhpcyB2YWx1ZTsgc3VjaCBhbiBldmVudAotICAgZGVub3RlcyBidWdneSBjb2RlIHdoaWNoIHlvdSBzaG91bGQKLSAgIGludmVzdGlnYXRlLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1BBUkFNX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlJldHVybmVkIHdoZW4gYSBwYXJhbWV0ZXIgdG8gYSBmdW5jdGlvbiBjYWxsIGlzCi0gICBvdXQgb2YgcmFuZ2Ugb3Igb3RoZXJ3aXNlIG1hbmlmZXN0bHkgaW5jb3JyZWN0LiAgQXMgd2l0aAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TRVFVRU5DRV9FUlJPUjwvY29kZT4sIHRoaXMKLSAgIGRlbm90ZXMgYSBidWcgaW4gdGhlIGNsaWVudCBjb2RlLiAgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4KLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfUEFSQU1fRVJST1I8L2NvZGU+IGFuZAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TRVFVRU5DRV9FUlJPUjwvY29kZT4gaXMgYSBiaXQKLSAgIGhhenksIGJ1dCBzdGlsbCB3b3J0aCBtYWtpbmcuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTUVNX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlJldHVybmVkIHdoZW4gYSByZXF1ZXN0IHRvIGFsbG9jYXRlIG1lbW9yeQotICAgZmFpbGVkLiAgTm90ZSB0aGF0IHRoZSBxdWFudGl0eSBvZiBtZW1vcnkgbmVlZGVkIHRvIGRlY29tcHJlc3MKLSAgIGEgc3RyZWFtIGNhbm5vdCBiZSBkZXRlcm1pbmVkIHVudGlsIHRoZSBzdHJlYW0ncyBoZWFkZXIgaGFzCi0gICBiZWVuIHJlYWQuICBTbwotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPiBhbmQKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4gbWF5IHJldHVybgotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NRU1fRVJST1I8L2NvZGU+IGV2ZW4gdGhvdWdoIHNvbWUKLSAgIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaGFzIGJlZW4gcmVhZC4gIFRoZSBzYW1lIGlzIG5vdCB0cnVlCi0gICBmb3IgY29tcHJlc3Npb247IG9uY2UKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPiBvcgotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZU9wZW48L2NvZGU+IGhhdmUKLSAgIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQsCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01FTV9FUlJPUjwvY29kZT4gY2Fubm90Ci0gICBvY2N1ci48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9EQVRBX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlJldHVybmVkIHdoZW4gYSBkYXRhIGludGVncml0eSBlcnJvciBpcwotICAgZGV0ZWN0ZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uICBNb3N0IGltcG9ydGFudGx5LCB0aGlzIG1lYW5zCi0gICB3aGVuIHN0b3JlZCBhbmQgY29tcHV0ZWQgQ1JDcyBmb3IgdGhlIGRhdGEgZG8gbm90IG1hdGNoLiAgVGhpcwotICAgdmFsdWUgaXMgYWxzbyByZXR1cm5lZCB1cG9uIGRldGVjdGlvbiBvZiBhbnkgb3RoZXIgYW5vbWFseSBpbgotICAgdGhlIGNvbXByZXNzZWQgZGF0YS48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9EQVRBX0VSUk9SX01BR0lDPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPkFzIGEgc3BlY2lhbCBjYXNlIG9mCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0RBVEFfRVJST1I8L2NvZGU+LCBpdCBpcwotICAgc29tZXRpbWVzIHVzZWZ1bCB0byBrbm93IHdoZW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtIGRvZXMgbm90Ci0gICBzdGFydCB3aXRoIHRoZSBjb3JyZWN0IG1hZ2ljIGJ5dGVzICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPidCJyAnWicKLSAgICdoJzwvY29kZT4pLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0lPX0VSUk9SPC9jb2RlPjwvc3Bhbj48L2R0PgotPGRkPjxwPlJldHVybmVkIGJ5Ci0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+IGFuZAotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT4gd2hlbiB0aGVyZSBpcyBhbgotICAgZXJyb3IgcmVhZGluZyBvciB3cml0aW5nIGluIHRoZSBjb21wcmVzc2VkIGZpbGUsIGFuZCBieQotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkT3BlbjwvY29kZT4gYW5kCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlT3BlbjwvY29kZT4gZm9yIGF0dGVtcHRzCi0gICB0byB1c2UgYSBmaWxlIGZvciB3aGljaCB0aGUgZXJyb3IgaW5kaWNhdG9yICh2aXosCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZlcnJvcihmKTwvY29kZT4pIGlzIHNldC4gIE9uCi0gICByZWNlaXB0IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfSU9fRVJST1I8L2NvZGU+LCB0aGUKLSAgIGNhbGxlciBzaG91bGQgY29uc3VsdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmVycm5vPC9jb2RlPgotICAgYW5kL29yIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cGVycm9yPC9jb2RlPiB0byBhY3F1aXJlCi0gICBvcGVyYXRpbmctc3lzdGVtIHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICAgcHJvYmxlbS48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9VTkVYUEVDVEVEX0VPRjwvY29kZT48L3NwYW4+PC9kdD4KLTxkZD48cD5SZXR1cm5lZCBieQotICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiB3aGVuIHRoZQotICAgY29tcHJlc3NlZCBmaWxlIGZpbmlzaGVzIGJlZm9yZSB0aGUgbG9naWNhbCBlbmQgb2Ygc3RyZWFtIGlzCi0gICBkZXRlY3RlZC48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PVVRCVUZGX0ZVTEw8L2NvZGU+PC9zcGFuPjwvZHQ+Ci08ZGQ+PHA+UmV0dXJuZWQgYnkKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb2RlPiBhbmQKLSAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+IHRvCi0gICBpbmRpY2F0ZSB0aGF0IHRoZSBvdXRwdXQgZGF0YSB3aWxsIG5vdCBmaXQgaW50byB0aGUgb3V0cHV0Ci0gICBidWZmZXIgcHJvdmlkZWQuPC9wPjwvZGQ+Ci08L2RsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9Imxvdy1sZXZlbCI+PC9hPjMuMy6gTG93LWxldmVsIGludGVyZmFjZTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiemNvbXByZXNzLWluaXQiPjwvYT4zLjMuMS6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCB7Ci0gIGNoYXIgKm5leHRfaW47Ci0gIHVuc2lnbmVkIGludCBhdmFpbF9pbjsKLSAgdW5zaWduZWQgaW50IHRvdGFsX2luX2xvMzI7Ci0gIHVuc2lnbmVkIGludCB0b3RhbF9pbl9oaTMyOwotCi0gIGNoYXIgKm5leHRfb3V0OwotICB1bnNpZ25lZCBpbnQgYXZhaWxfb3V0OwotICB1bnNpZ25lZCBpbnQgdG90YWxfb3V0X2xvMzI7Ci0gIHVuc2lnbmVkIGludCB0b3RhbF9vdXRfaGkzMjsKLQotICB2b2lkICpzdGF0ZTsKLQotICB2b2lkICooKmJ6YWxsb2MpKHZvaWQgKixpbnQsaW50KTsKLSAgdm9pZCAoKmJ6ZnJlZSkodm9pZCAqLHZvaWQgKik7Ci0gIHZvaWQgKm9wYXF1ZTsKLX0gYnpfc3RyZWFtOwotCi1pbnQgQloyX2J6Q29tcHJlc3NJbml0ICggYnpfc3RyZWFtICpzdHJtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplMTAwaywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcmJvc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd29ya0ZhY3RvciApOzwvcHJlPgotPHA+UHJlcGFyZXMgZm9yIGNvbXByZXNzaW9uLiAgVGhlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6X3N0cmVhbTwvY29kZT4gc3RydWN0dXJlIGhvbGRzIGFsbAotZGF0YSBwZXJ0YWluaW5nIHRvIHRoZSBjb21wcmVzc2lvbiBhY3Rpdml0eS4gIEEKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Ynpfc3RyZWFtPC9jb2RlPiBzdHJ1Y3R1cmUgc2hvdWxkIGJlCi1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpc2VkIHByaW9yIHRvIHRoZSBjYWxsLiAgVGhlIGZpZWxkcyBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iel9zdHJlYW08L2NvZGU+IGNvbXByaXNlIHRoZSBlbnRpcmV0eQotb2YgdGhlIHVzZXItdmlzaWJsZSBkYXRhLiAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zdGF0ZTwvY29kZT4KLWlzIGEgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgcmVxdWlyZWQgZm9yCi1jb21wcmVzc2lvbi48L3A+Ci08cD5DdXN0b20gbWVtb3J5IGFsbG9jYXRvcnMgYXJlIHN1cHBvcnRlZCwgdmlhIGZpZWxkcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemFsbG9jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpmcmVlPC9jb2RlPiwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm9wYXF1ZTwvY29kZT4uICBUaGUgdmFsdWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+b3BhcXVlPC9jb2RlPiBpcyBwYXNzZWQgdG8gYXMgdGhlIGZpcnN0Ci1hcmd1bWVudCB0byBhbGwgY2FsbHMgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemFsbG9jPC9jb2RlPgotYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpmcmVlPC9jb2RlPiwgYnV0IGlzIG90aGVyd2lzZQotaWdub3JlZCBieSB0aGUgbGlicmFyeS4gIFRoZSBjYWxsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnphbGxvYyAoCi1vcGFxdWUsIG4sIG0gKTwvY29kZT4gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgcG9pbnRlcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5wPC9jb2RlPiB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm4gKgotbTwvY29kZT4gYnl0ZXMgb2YgbWVtb3J5LCBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemZyZWUgKAotb3BhcXVlLCBwICk8L2NvZGU+IHNob3VsZCBmcmVlIHRoYXQgbWVtb3J5LjwvcD4KLTxwPklmIHlvdSBkb24ndCB3YW50IHRvIHVzZSBhIGN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yLCBzZXQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnphbGxvYzwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZnJlZTwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm9wYXF1ZTwvY29kZT4gdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TlVMTDwvY29kZT4sIGFuZCB0aGUgbGlicmFyeSB3aWxsIHRoZW4KLXVzZSB0aGUgc3RhbmRhcmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5tYWxsb2M8L2NvZGU+IC8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnJlZTwvY29kZT4gcm91dGluZXMuPC9wPgotPHA+QmVmb3JlIGNhbGxpbmcKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPiwgZmllbGRzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6YWxsb2M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemZyZWU8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5vcGFxdWU8L2NvZGU+IHNob3VsZCBiZSBmaWxsZWQKLWFwcHJvcHJpYXRlbHksIGFzIGp1c3QgZGVzY3JpYmVkLiAgVXBvbiByZXR1cm4sIHRoZSBpbnRlcm5hbAotc3RhdGUgd2lsbCBoYXZlIGJlZW4gYWxsb2NhdGVkIGFuZCBpbml0aWFsaXNlZCwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX2luX2xvMzI8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9pbl9oaTMyPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dG90YWxfb3V0X2xvMzI8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9vdXRfaGkzMjwvY29kZT4gd2lsbCBoYXZlIGJlZW4KLXNldCB0byB6ZXJvLiAgVGhlc2UgZm91ciBmaWVsZHMgYXJlIHVzZWQgYnkgdGhlIGxpYnJhcnkgdG8gaW5mb3JtCi10aGUgY2FsbGVyIG9mIHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBwYXNzZWQgaW50byBhbmQgb3V0IG9mIHRoZQotbGlicmFyeSwgcmVzcGVjdGl2ZWx5LiAgWW91IHNob3VsZCBub3QgdHJ5IHRvIGNoYW5nZSB0aGVtLiAgQXMgb2YKLXZlcnNpb24gMS4wLCA2NC1iaXQgY291bnRzIGFyZSBtYWludGFpbmVkLCBldmVuIG9uIDMyLWJpdAotcGxhdGZvcm1zLCB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5faGkzMjwvY29kZT4KLWZpZWxkcyB0byBzdG9yZSB0aGUgdXBwZXIgMzIgYml0cyBvZiB0aGUgY291bnQuICBTbywgZm9yIGV4YW1wbGUsCi10aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgaW4gaXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4odG90YWxfaW5faGkzMgotJmx0OyZsdDsgMzIpICsgdG90YWxfaW5fbG8zMjwvY29kZT4uPC9wPgotPHA+UGFyYW1ldGVyIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YmxvY2tTaXplMTAwazwvY29kZT4KLXNwZWNpZmllcyB0aGUgYmxvY2sgc2l6ZSB0byBiZSB1c2VkIGZvciBjb21wcmVzc2lvbi4gIEl0IHNob3VsZAotYmUgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDkgaW5jbHVzaXZlLCBhbmQgdGhlIGFjdHVhbCBibG9jayBzaXplCi11c2VkIGlzIDEwMDAwMCB4IHRoaXMgZmlndXJlLiAgOSBnaXZlcyB0aGUgYmVzdCBjb21wcmVzc2lvbiBidXQKLXRha2VzIG1vc3QgbWVtb3J5LjwvcD4KLTxwPlBhcmFtZXRlciA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnZlcmJvc2l0eTwvY29kZT4gc2hvdWxkCi1iZSBzZXQgdG8gYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA0IGluY2x1c2l2ZS4gIDAgaXMgc2lsZW50LCBhbmQKLWdyZWF0ZXIgbnVtYmVycyBnaXZlIGluY3JlYXNpbmdseSB2ZXJib3NlIG1vbml0b3JpbmcvZGVidWdnaW5nCi1vdXRwdXQuICBJZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBjb21waWxlZCB3aXRoCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1EQlpfTk9fU1RESU88L2NvZGU+LCBubyBzdWNoIG91dHB1dAotd2lsbCBhcHBlYXIgZm9yIGFueSB2ZXJib3NpdHkgc2V0dGluZy48L3A+Ci08cD5QYXJhbWV0ZXIgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij53b3JrRmFjdG9yPC9jb2RlPgotY29udHJvbHMgaG93IHRoZSBjb21wcmVzc2lvbiBwaGFzZSBiZWhhdmVzIHdoZW4gcHJlc2VudGVkIHdpdGgKLXdvcnN0IGNhc2UsIGhpZ2hseSByZXBldGl0aXZlLCBpbnB1dCBkYXRhLiAgSWYgY29tcHJlc3Npb24gcnVucwotaW50byBkaWZmaWN1bHRpZXMgY2F1c2VkIGJ5IHJlcGV0aXRpdmUgZGF0YSwgdGhlIGxpYnJhcnkgc3dpdGNoZXMKLWZyb20gdGhlIHN0YW5kYXJkIHNvcnRpbmcgYWxnb3JpdGhtIHRvIGEgZmFsbGJhY2sgYWxnb3JpdGhtLiAgVGhlCi1mYWxsYmFjayBpcyBzbG93ZXIgdGhhbiB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtIGJ5IHBlcmhhcHMgYQotZmFjdG9yIG9mIHRocmVlLCBidXQgYWx3YXlzIGJlaGF2ZXMgcmVhc29uYWJseSwgbm8gbWF0dGVyIGhvdyBiYWQKLXRoZSBpbnB1dC48L3A+Ci08cD5Mb3dlciB2YWx1ZXMgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij53b3JrRmFjdG9yPC9jb2RlPgotcmVkdWNlIHRoZSBhbW91bnQgb2YgZWZmb3J0IHRoZSBzdGFuZGFyZCBhbGdvcml0aG0gd2lsbCBleHBlbmQKLWJlZm9yZSByZXNvcnRpbmcgdG8gdGhlIGZhbGxiYWNrLiAgWW91IHNob3VsZCBzZXQgdGhpcyBwYXJhbWV0ZXIKLWNhcmVmdWxseTsgdG9vIGxvdywgYW5kIG1hbnkgaW5wdXRzIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUKLWZhbGxiYWNrIGFsZ29yaXRobSBhbmQgc28gY29tcHJlc3MgcmF0aGVyIHNsb3dseSwgdG9vIGhpZ2gsIGFuZAoteW91ciBhdmVyYWdlLXRvLXdvcnN0IGNhc2UgY29tcHJlc3Npb24gdGltZXMgY2FuIGJlY29tZSB2ZXJ5Ci1sYXJnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDMwIGdpdmVzIHJlYXNvbmFibGUgYmVoYXZpb3VyIG92ZXIgYQotd2lkZSByYW5nZSBvZiBjaXJjdW1zdGFuY2VzLjwvcD4KLTxwPkFsbG93YWJsZSB2YWx1ZXMgcmFuZ2UgZnJvbSAwIHRvIDI1MCBpbmNsdXNpdmUuICAwIGlzIGEKLXNwZWNpYWwgY2FzZSwgZXF1aXZhbGVudCB0byB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAzMC48L3A+Ci08cD5Ob3RlIHRoYXQgdGhlIGNvbXByZXNzZWQgb3V0cHV0IGdlbmVyYXRlZCBpcyB0aGUgc2FtZQotcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgZmFsbGJhY2sgYWxnb3JpdGhtIGlzCi11c2VkLjwvcD4KLTxwPkJlIGF3YXJlIGFsc28gdGhhdCB0aGlzIHBhcmFtZXRlciBtYXkgZGlzYXBwZWFyIGVudGlyZWx5IGluCi1mdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkuICBJbiBwcmluY2lwbGUgaXQgc2hvdWxkIGJlCi1wb3NzaWJsZSB0byBkZXZpc2UgYSBnb29kIHdheSB0byBhdXRvbWF0aWNhbGx5IGNob29zZSB3aGljaAotYWxnb3JpdGhtIHRvIHVzZS4gIFN1Y2ggYSBtZWNoYW5pc20gd291bGQgcmVuZGVyIHRoZSBwYXJhbWV0ZXIKLW9ic29sZXRlLjwvcD4KLTxwPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIHN0cm0gaXMgTlVMTCAKLSAgb3IgYmxvY2tTaXplICZsdDsgMSBvciBibG9ja1NpemUgJmd0OyA5Ci0gIG9yIHZlcmJvc2l0eSAmbHQ7IDAgb3IgdmVyYm9zaXR5ICZndDsgNAotICBvciB3b3JrRmFjdG9yICZsdDsgMCBvciB3b3JrRmFjdG9yICZndDsgMjUwCi1CWl9NRU1fRVJST1IgCi0gIGlmIG5vdCBlbm91Z2ggbWVtb3J5IGlzIGF2YWlsYWJsZQotQlpfT0sgCi0gIG90aGVyd2lzZTwvcHJlPgotPHA+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QloyX2J6Q29tcHJlc3MKLSAgaWYgQlpfT0sgaXMgcmV0dXJuZWQKLSAgbm8gc3BlY2lmaWMgYWN0aW9uIG5lZWRlZCBpbiBjYXNlIG9mIGVycm9yPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6Q29tcHJlc3MiPjwvYT4zLjMuMi6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCBCWjJfYnpDb21wcmVzcyAoIGJ6X3N0cmVhbSAqc3RybSwgaW50IGFjdGlvbiApOzwvcHJlPgotPHA+UHJvdmlkZXMgbW9yZSBpbnB1dCBhbmQvb3Igb3V0cHV0IGJ1ZmZlciBzcGFjZSBmb3IgdGhlCi1saWJyYXJ5LiAgVGhlIGNhbGxlciBtYWludGFpbnMgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLCBhbmQKLWNhbGxzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHRvIHRyYW5zZmVyCi1kYXRhIGJldHdlZW4gdGhlbS48L3A+Ci08cD5CZWZvcmUgZWFjaCBjYWxsIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9pbjwvY29kZT4gc2hvdWxkIHBvaW50IGF0IHRoZSBkYXRhCi10byBiZSBjb21wcmVzc2VkLCBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9pbjwvY29kZT4KLXNob3VsZCBpbmRpY2F0ZSBob3cgbWFueSBieXRlcyB0aGUgbGlicmFyeSBtYXkgcmVhZC4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHVwZGF0ZXMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9pbjwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX2luPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dG90YWxfaW48L2NvZGU+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgaXQgaGFzIHJlYWQuPC9wPgotPHA+U2ltaWxhcmx5LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm5leHRfb3V0PC9jb2RlPiBzaG91bGQKLXBvaW50IHRvIGEgYnVmZmVyIGluIHdoaWNoIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgdG8gYmUgcGxhY2VkLAotd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX291dDwvY29kZT4gaW5kaWNhdGluZyBob3cKLW11Y2ggb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZS4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHVwZGF0ZXMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9vdXQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9vdXQ8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9vdXQ8L2NvZGU+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgb3V0cHV0LjwvcD4KLTxwPllvdSBtYXkgcHJvdmlkZSBhbmQgcmVtb3ZlIGFzIGxpdHRsZSBvciBhcyBtdWNoIGRhdGEgYXMgeW91Ci1saWtlIG9uIGVhY2ggY2FsbCBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4uICBJbiB0aGUgbGltaXQsCi1pdCBpcyBhY2NlcHRhYmxlIHRvIHN1cHBseSBhbmQgcmVtb3ZlIGRhdGEgb25lIGJ5dGUgYXQgYSB0aW1lLAotYWx0aG91Z2ggdGhpcyB3b3VsZCBiZSB0ZXJyaWJseSBpbmVmZmljaWVudC4gIFlvdSBzaG91bGQgYWx3YXlzCi1lbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgYnl0ZSBvZiBvdXRwdXQgc3BhY2UgaXMgYXZhaWxhYmxlIGF0Ci1lYWNoIGNhbGwuPC9wPgotPHA+QSBzZWNvbmQgcHVycG9zZSBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gaXMgdG8gcmVxdWVzdCBhCi1jaGFuZ2Ugb2YgbW9kZSBvZiB0aGUgY29tcHJlc3NlZCBzdHJlYW0uPC9wPgotPHA+Q29uY2VwdHVhbGx5LCBhIGNvbXByZXNzZWQgc3RyZWFtIGNhbiBiZSBpbiBvbmUgb2YgZm91cgotc3RhdGVzOiBJRExFLCBSVU5OSU5HLCBGTFVTSElORyBhbmQgRklOSVNISU5HLiAgQmVmb3JlCi1pbml0aWFsaXNhdGlvbgotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPikgYW5kIGFmdGVyCi10ZXJtaW5hdGlvbiAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0VuZDwvY29kZT4pLAotYSBzdHJlYW0gaXMgcmVnYXJkZWQgYXMgSURMRS48L3A+Ci08cD5VcG9uIGluaXRpYWxpc2F0aW9uCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+KSwgdGhlIHN0cmVhbQotaXMgcGxhY2VkIGluIHRoZSBSVU5OSU5HIHN0YXRlLiAgU3Vic2VxdWVudCBjYWxscyB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gc2hvdWxkIHBhc3MKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfUlVOPC9jb2RlPiBhcyB0aGUgcmVxdWVzdGVkIGFjdGlvbjsKLW90aGVyIGFjdGlvbnMgYXJlIGlsbGVnYWwgYW5kIHdpbGwgcmVzdWx0IGluCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPi48L3A+Ci08cD5BdCBzb21lIHBvaW50LCB0aGUgY2FsbGluZyBwcm9ncmFtIHdpbGwgaGF2ZSBwcm92aWRlZCBhbGwKLXRoZSBpbnB1dCBkYXRhIGl0IHdhbnRzIHRvLiAgSXQgd2lsbCB0aGVuIHdhbnQgdG8gZmluaXNoIHVwIC0tIGluCi1lZmZlY3QsIGFza2luZyB0aGUgbGlicmFyeSB0byBwcm9jZXNzIGFueSBkYXRhIGl0IG1pZ2h0IGhhdmUKLWJ1ZmZlcmVkIGludGVybmFsbHkuICBJbiB0aGlzIHN0YXRlLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gd2lsbCBubyBsb25nZXIKLWF0dGVtcHQgdG8gcmVhZCBkYXRhIGZyb20KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9pbjwvY29kZT4sIGJ1dCBpdCB3aWxsIHdhbnQgdG8KLXdyaXRlIGRhdGEgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X291dDwvY29kZT4uICBCZWNhdXNlCi10aGUgb3V0cHV0IGJ1ZmZlciBzdXBwbGllZCBieSB0aGUgdXNlciBjYW4gYmUgYXJiaXRyYXJpbHkgc21hbGwsCi10aGUgZmluaXNoaW5nLXVwIG9wZXJhdGlvbiBjYW5ub3QgbmVjZXNzYXJpbHkgYmUgZG9uZSB3aXRoIGEKLXNpbmdsZSBjYWxsIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPi48L3A+Ci08cD5JbnN0ZWFkLCB0aGUgY2FsbGluZyBwcm9ncmFtIHBhc3NlcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9GSU5JU0g8L2NvZGU+IGFzIGFuIGFjdGlvbiB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4uICBUaGlzIGNoYW5nZXMKLXRoZSBzdHJlYW0ncyBzdGF0ZSB0byBGSU5JU0hJTkcuICBBbnkgcmVtYWluaW5nIGlucHV0IChpZSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmV4dF9pblswIC4uIGF2YWlsX2luLTFdPC9jb2RlPikgaXMKLWNvbXByZXNzZWQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgVG8gZG8gdGhpcywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IG11c3QgYmUgY2FsbGVkCi1yZXBlYXRlZGx5IHVudGlsIGFsbCB0aGUgb3V0cHV0IGhhcyBiZWVuIGNvbnN1bWVkLiAgQXQgdGhhdAotcG9pbnQsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHJldHVybnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4sIGFuZCB0aGUgc3RyZWFtJ3MKLXN0YXRlIGlzIHNldCBiYWNrIHRvIElETEUuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzRW5kPC9jb2RlPiBzaG91bGQgdGhlbiBiZQotY2FsbGVkLjwvcD4KLTxwPkp1c3QgdG8gbWFrZSBzdXJlIHRoZSBjYWxsaW5nIHByb2dyYW0gZG9lcyBub3QgY2hlYXQsIHRoZQotbGlicmFyeSBtYWtlcyBhIG5vdGUgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9pbjwvY29kZT4KLWF0IHRoZSB0aW1lIG9mIHRoZSBmaXJzdCBjYWxsIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiB3aGljaCBoYXMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfRklOSVNIPC9jb2RlPiBhcyBhbiBhY3Rpb24gKGllLCBhdAotdGhlIHRpbWUgdGhlIHByb2dyYW0gaGFzIGFubm91bmNlZCBpdHMgaW50ZW50aW9uIHRvIG5vdCBzdXBwbHkKLWFueSBtb3JlIGlucHV0KS4gIEJ5IGNvbXBhcmluZyB0aGlzIHZhbHVlIHdpdGggdGhhdCBvZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9pbjwvY29kZT4gb3ZlciBzdWJzZXF1ZW50IGNhbGxzCi10byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiwgdGhlIGxpYnJhcnkKLWNhbiBkZXRlY3QgYW55IGF0dGVtcHRzIHRvIHNsaXAgaW4gbW9yZSBkYXRhIHRvIGNvbXByZXNzLiAgQW55Ci1jYWxscyBmb3Igd2hpY2ggdGhpcyBpcyBkZXRlY3RlZCB3aWxsIHJldHVybgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TRVFVRU5DRV9FUlJPUjwvY29kZT4uICBUaGlzCi1pbmRpY2F0ZXMgYSBwcm9ncmFtbWluZyBtaXN0YWtlIHdoaWNoIHNob3VsZCBiZSBjb3JyZWN0ZWQuPC9wPgotPHA+SW5zdGVhZCBvZiBhc2tpbmcgdG8gZmluaXNoLCB0aGUgY2FsbGluZyBwcm9ncmFtIG1heSBhc2sKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IHRvIHRha2UgYWxsIHRoZQotcmVtYWluaW5nIGlucHV0LCBjb21wcmVzcyBpdCBhbmQgdGVybWluYXRlIHRoZSBjdXJyZW50Ci0oQnVycm93cy1XaGVlbGVyKSBjb21wcmVzc2lvbiBibG9jay4gIFRoaXMgY291bGQgYmUgdXNlZnVsIGZvcgotZXJyb3IgY29udHJvbCBwdXJwb3Nlcy4gIFRoZSBtZWNoYW5pc20gaXMgYW5hbG9nb3VzIHRvIHRoYXQgZm9yCi1maW5pc2hpbmc6IGNhbGwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4KLXdpdGggYW4gYWN0aW9uIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfRkxVU0g8L2NvZGU+LAotcmVtb3ZlIG91dHB1dCBkYXRhLCBhbmQgcGVyc2lzdCB3aXRoIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9GTFVTSDwvY29kZT4gYWN0aW9uIHVudGlsIHRoZSB2YWx1ZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9SVU48L2NvZGU+IGlzIHJldHVybmVkLiAgQXMgd2l0aAotZmluaXNoaW5nLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPgotZGV0ZWN0cyBhbnkgYXR0ZW1wdCB0byBwcm92aWRlIG1vcmUgaW5wdXQgZGF0YSBvbmNlIHRoZSBmbHVzaCBoYXMKLWJlZ3VuLjwvcD4KLTxwPk9uY2UgdGhlIGZsdXNoIGlzIGNvbXBsZXRlLCB0aGUgc3RyZWFtIHJldHVybnMgdG8gdGhlCi1ub3JtYWwgUlVOTklORyBzdGF0ZS48L3A+Ci08cD5UaGlzIGFsbCBzb3VuZHMgcHJldHR5IGNvbXBsZXgsIGJ1dCBpc24ndCByZWFsbHkuICBIZXJlJ3MgYQotdGFibGUgd2hpY2ggc2hvd3Mgd2hpY2ggYWN0aW9ucyBhcmUgYWxsb3dhYmxlIGluIGVhY2ggc3RhdGUsIHdoYXQKLWFjdGlvbiB3aWxsIGJlIHRha2VuLCB3aGF0IHRoZSBuZXh0IHN0YXRlIGlzLCBhbmQgd2hhdCB0aGUKLW5vbi1lcnJvciByZXR1cm4gdmFsdWVzIGFyZS4gIE5vdGUgdGhhdCB5b3UgY2FuJ3QgZXhwbGljaXRseSBhc2sKLXdoYXQgc3RhdGUgdGhlIHN0cmVhbSBpcyBpbiwgYnV0IG5vciBkbyB5b3UgbmVlZCB0byAtLSBpdCBjYW4gYmUKLWluZmVycmVkIGZyb20gdGhlIHZhbHVlcyByZXR1cm5lZCBieQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4uPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPklETEUvYW55Ci0gIElsbGVnYWwuICBJRExFIHN0YXRlIG9ubHkgZXhpc3RzIGFmdGVyIEJaMl9iekNvbXByZXNzRW5kIG9yCi0gIGJlZm9yZSBCWjJfYnpDb21wcmVzc0luaXQuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SCi0KLVJVTk5JTkcvQlpfUlVOCi0gIENvbXByZXNzIGZyb20gbmV4dF9pbiB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLgotICBOZXh0IHN0YXRlID0gUlVOTklORwotICBSZXR1cm4gdmFsdWUgPSBCWl9SVU5fT0sKLQotUlVOTklORy9CWl9GTFVTSAotICBSZW1lbWJlciBjdXJyZW50IHZhbHVlIG9mIG5leHRfaW4uIENvbXByZXNzIGZyb20gbmV4dF9pbgotICB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLCBidXQgZG8gbm90IGFjY2VwdCBhbnkgbW9yZSBpbnB1dC4KLSAgTmV4dCBzdGF0ZSA9IEZMVVNISU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX0ZMVVNIX09LCi0KLVJVTk5JTkcvQlpfRklOSVNICi0gIFJlbWVtYmVyIGN1cnJlbnQgdmFsdWUgb2YgbmV4dF9pbi4gQ29tcHJlc3MgZnJvbSBuZXh0X2luCi0gIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBOZXh0IHN0YXRlID0gRklOSVNISU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX0ZJTklTSF9PSwotCi1GTFVTSElORy9CWl9GTFVTSAotICBDb21wcmVzcyBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQgYXMgbXVjaCBhcyBwb3NzaWJsZSwgCi0gIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBJZiBhbGwgdGhlIGV4aXN0aW5nIGlucHV0IGhhcyBiZWVuIHVzZWQgdXAgYW5kIGFsbCBjb21wcmVzc2VkCi0gIG91dHB1dCBoYXMgYmVlbiByZW1vdmVkCi0gICAgTmV4dCBzdGF0ZSA9IFJVTk5JTkc7IFJldHVybiB2YWx1ZSA9IEJaX1JVTl9PSwotICBlbHNlCi0gICAgTmV4dCBzdGF0ZSA9IEZMVVNISU5HOyBSZXR1cm4gdmFsdWUgPSBCWl9GTFVTSF9PSwotCi1GTFVTSElORy9vdGhlciAgICAgCi0gIElsbGVnYWwuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SCi0KLUZJTklTSElORy9CWl9GSU5JU0gKLSAgQ29tcHJlc3MgZnJvbSBuZXh0X2luIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsCi0gIGJ1dCB0byBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LiAgCi0gIElmIGFsbCB0aGUgZXhpc3RpbmcgaW5wdXQgaGFzIGJlZW4gdXNlZCB1cCBhbmQgYWxsIGNvbXByZXNzZWQKLSAgb3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQKLSAgICBOZXh0IHN0YXRlID0gSURMRTsgUmV0dXJuIHZhbHVlID0gQlpfU1RSRUFNX0VORAotICBlbHNlCi0gICAgTmV4dCBzdGF0ZSA9IEZJTklTSElORzsgUmV0dXJuIHZhbHVlID0gQlpfRklOSVNIX09LCi0KLUZJTklTSElORy9vdGhlcgotICBJbGxlZ2FsLgotICBSZXR1cm4gdmFsdWUgPSBCWl9TRVFVRU5DRV9FUlJPUjwvcHJlPgotPHA+VGhhdCBzdGlsbCBsb29rcyBjb21wbGljYXRlZD8gIFdlbGwsIGZhaXIgZW5vdWdoLiAgVGhlCi11c3VhbCBzZXF1ZW5jZSBvZiBjYWxscyBmb3IgY29tcHJlc3NpbmcgYSBsb2FkIG9mIGRhdGEgaXM6PC9wPgotPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCB0eXBlPSIxIj4KLTxsaT48cD5HZXQgc3RhcnRlZCB3aXRoCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPi48L3A+PC9saT4KLTxsaT48cD5TaG92ZWwgZGF0YSBpbiBhbmQgc2hsdXJwIG91dCBpdHMgY29tcHJlc3NlZCBmb3JtCi0gIHVzaW5nIHplcm8gb3IgbW9yZSBjYWxscyBvZgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiB3aXRoIGFjdGlvbiA9Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfUlVOPC9jb2RlPi48L3A+PC9saT4KLTxsaT48cD5GaW5pc2ggdXAuIFJlcGVhdGVkbHkgY2FsbAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzPC9jb2RlPiB3aXRoIGFjdGlvbiA9Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfRklOSVNIPC9jb2RlPiwgY29weWluZyBvdXQgdGhlCi0gIGNvbXByZXNzZWQgb3V0cHV0LCB1bnRpbAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+IGlzCi0gIHJldHVybmVkLjwvcD48L2xpPgotPGxpPjxwPkNsb3NlIHVwIGFuZCBnbyBob21lLiAgQ2FsbAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzRW5kPC9jb2RlPi48L3A+PC9saT4KLTwvb2w+PC9kaXY+Ci08cD5JZiB0aGUgZGF0YSB5b3Ugd2FudCB0byBjb21wcmVzcyBmaXRzIGludG8geW91ciBpbnB1dAotYnVmZmVyIGFsbCBhdCBvbmNlLCB5b3UgY2FuIHNraXAgdGhlIGNhbGxzIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzICggLi4uLCBCWl9SVU4gKTwvY29kZT4KLWFuZCBqdXN0IGRvIHRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzICggLi4uLCBCWl9GSU5JU0gKLSk8L2NvZGU+IGNhbGxzLjwvcD4KLTxwPkFsbCByZXF1aXJlZCBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4uICBUaGUKLWNvbXByZXNzaW9uIGxpYnJhcnkgY2FuIGFjY2VwdCBhbnkgZGF0YSBhdCBhbGwgKG9idmlvdXNseSkuICBTbwoteW91IHNob3VsZG4ndCBnZXQgYW55IGVycm9yIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+IGNhbGxzLiAgSWYgeW91Ci1kbywgdGhleSB3aWxsIGJlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VSUk9SPC9jb2RlPiwgYW5kIGluZGljYXRlCi1hIGJ1ZyBpbiB5b3VyIHByb2dyYW1taW5nLjwvcD4KLTxwPlRyaXZpYWwgb3RoZXIgcG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgc3RybSBpcyBOVUxMLCBvciBzdHJtLSZndDtzIGlzIE5VTEw8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpDb21wcmVzcy1lbmQiPjwvYT4zLjMuMy6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0VuZDwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmludCBCWjJfYnpDb21wcmVzc0VuZCAoIGJ6X3N0cmVhbSAqc3RybSApOzwvcHJlPgotPHA+UmVsZWFzZXMgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBjb21wcmVzc2lvbgotc3RyZWFtLjwvcD4KLTxwPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX1BBUkFNX0VSUk9SICBpZiBzdHJtIGlzIE5VTEwgb3Igc3RybS0mZ3Q7cyBpcyBOVUxMCi1CWl9PSyAgICAgICAgICAgb3RoZXJ3aXNlPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6RGVjb21wcmVzcy1pbml0Ij48L2E+My4zLjQuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6RGVjb21wcmVzc0luaXQgKCBiel9zdHJlYW0gKnN0cm0sIGludCB2ZXJib3NpdHksIGludCBzbWFsbCApOzwvcHJlPgotPHA+UHJlcGFyZXMgZm9yIGRlY29tcHJlc3Npb24uICBBcyB3aXRoCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4sIGEKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Ynpfc3RyZWFtPC9jb2RlPiByZWNvcmQgc2hvdWxkIGJlCi1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpc2VkIGJlZm9yZSB0aGUgY2FsbC4gIEZpZWxkcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemFsbG9jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpmcmVlPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+b3BhcXVlPC9jb2RlPiBzaG91bGQgYmUgc2V0IGlmIGEgY3VzdG9tCi1tZW1vcnkgYWxsb2NhdG9yIGlzIHJlcXVpcmVkLCBvciBtYWRlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPk5VTEw8L2NvZGU+IGZvciB0aGUgbm9ybWFsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm1hbGxvYzwvY29kZT4gLwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mcmVlPC9jb2RlPiByb3V0aW5lcy4gIFVwb24gcmV0dXJuLCB0aGUKLWludGVybmFsIHN0YXRlIHdpbGwgaGF2ZSBiZWVuIGluaXRpYWxpc2VkLCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dG90YWxfaW48L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50b3RhbF9vdXQ8L2NvZGU+IHdpbGwgYmUgemVyby48L3A+Ci08cD5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVyCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnZlcmJvc2l0eTwvY29kZT4sIHNlZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0luaXQ8L2NvZGU+LjwvcD4KLTxwPklmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c21hbGw8L2NvZGU+IGlzIG5vbnplcm8sIHRoZQotbGlicmFyeSB3aWxsIHVzZSBhbiBhbHRlcm5hdGl2ZSBkZWNvbXByZXNzaW9uIGFsZ29yaXRobSB3aGljaAotdXNlcyBsZXNzIG1lbW9yeSBidXQgYXQgdGhlIGNvc3Qgb2YgZGVjb21wcmVzc2luZyBtb3JlIHNsb3dseQotKHJvdWdobHkgc3BlYWtpbmcsIGhhbGYgdGhlIHNwZWVkLCBidXQgdGhlIG1heGltdW0gbWVtb3J5Ci1yZXF1aXJlbWVudCBkcm9wcyB0byBhcm91bmQgMjMwMGspLiAgU2VlIDxhIGhyZWY9IiN1c2luZyI+SG93IHRvIHVzZSBiemlwMjwvYT4KLWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIG1lbW9yeSBtYW5hZ2VtZW50LjwvcD4KLTxwPk5vdGUgdGhhdCB0aGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgdG8gZGVjb21wcmVzcyBhCi1zdHJlYW0gY2Fubm90IGJlIGRldGVybWluZWQgdW50aWwgdGhlIHN0cmVhbSdzIGhlYWRlciBoYXMgYmVlbgotcmVhZCwgc28gZXZlbiBpZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29kZT4gc3VjY2VlZHMsIGEKLXN1YnNlcXVlbnQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPgotY291bGQgZmFpbCB3aXRoCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01FTV9FUlJPUjwvY29kZT4uPC9wPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfQ09ORklHX0VSUk9SCi0gIGlmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIG1pcy1jb21waWxlZAotQlpfUEFSQU1fRVJST1IKLSAgaWYgKCBzbWFsbCAhPSAwICZhbXA7JmFtcDsgc21hbGwgIT0gMSApCi0gIG9yICh2ZXJib3NpdHkgJmx0OzsgMCB8fCB2ZXJib3NpdHkgJmd0OyA0KQotQlpfTUVNX0VSUk9SCi0gIGlmIGluc3VmZmljaWVudCBtZW1vcnkgaXMgYXZhaWxhYmxlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWjJfYnpEZWNvbXByZXNzCi0gIGlmIEJaX09LIHdhcyByZXR1cm5lZAotICBubyBzcGVjaWZpYyBhY3Rpb24gcmVxdWlyZWQgaW4gY2FzZSBvZiBlcnJvcjwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiekRlY29tcHJlc3MiPjwvYT4zLjMuNS6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IEJaMl9iekRlY29tcHJlc3MgKCBiel9zdHJlYW0gKnN0cm0gKTs8L3ByZT4KLTxwPlByb3ZpZGVzIG1vcmUgaW5wdXQgYW5kL291dCBvdXRwdXQgYnVmZmVyIHNwYWNlIGZvciB0aGUKLWxpYnJhcnkuICBUaGUgY2FsbGVyIG1haW50YWlucyBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMsIGFuZCB1c2VzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IHRvIHRyYW5zZmVyCi1kYXRhIGJldHdlZW4gdGhlbS48L3A+Ci08cD5CZWZvcmUgZWFjaCBjYWxsIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X2luPC9jb2RlPiBzaG91bGQgcG9pbnQgYXQgdGhlCi1jb21wcmVzc2VkIGRhdGEsIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX2luPC9jb2RlPgotc2hvdWxkIGluZGljYXRlIGhvdyBtYW55IGJ5dGVzIHRoZSBsaWJyYXJ5IG1heSByZWFkLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPiB1cGRhdGVzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm5leHRfaW48L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5hdmFpbF9pbjwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX2luPC9jb2RlPiB0byByZWZsZWN0IHRoZSBudW1iZXIKLW9mIGJ5dGVzIGl0IGhhcyByZWFkLjwvcD4KLTxwPlNpbWlsYXJseSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X291dDwvY29kZT4gc2hvdWxkCi1wb2ludCB0byBhIGJ1ZmZlciBpbiB3aGljaCB0aGUgdW5jb21wcmVzc2VkIG91dHB1dCBpcyB0byBiZQotcGxhY2VkLCB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXZhaWxfb3V0PC9jb2RlPgotaW5kaWNhdGluZyBob3cgbXVjaCBvdXRwdXQgc3BhY2UgaXMgYXZhaWxhYmxlLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzczwvY29kZT4gdXBkYXRlcwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uZXh0X291dDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF2YWlsX291dDwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnRvdGFsX291dDwvY29kZT4gdG8gcmVmbGVjdCB0aGUgbnVtYmVyCi1vZiBieXRlcyBvdXRwdXQuPC9wPgotPHA+WW91IG1heSBwcm92aWRlIGFuZCByZW1vdmUgYXMgbGl0dGxlIG9yIGFzIG11Y2ggZGF0YSBhcyB5b3UKLWxpa2Ugb24gZWFjaCBjYWxsIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+LiAgSW4gdGhlIGxpbWl0LAotaXQgaXMgYWNjZXB0YWJsZSB0byBzdXBwbHkgYW5kIHJlbW92ZSBkYXRhIG9uZSBieXRlIGF0IGEgdGltZSwKLWFsdGhvdWdoIHRoaXMgd291bGQgYmUgdGVycmlibHkgaW5lZmZpY2llbnQuICBZb3Ugc2hvdWxkIGFsd2F5cwotZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGJ5dGUgb2Ygb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZSBhdAotZWFjaCBjYWxsLjwvcD4KLTxwPlVzZSBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IGlzCi1zaW1wbGVyIHRoYW4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+LjwvcD4KLTxwPllvdSBzaG91bGQgcHJvdmlkZSBpbnB1dCBhbmQgcmVtb3ZlIG91dHB1dCBhcyBkZXNjcmliZWQKLWFib3ZlLCBhbmQgcmVwZWF0ZWRseSBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IHVudGlsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+IGlzIHJldHVybmVkLgotQXBwZWFyYW5jZSBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+Ci1kZW5vdGVzIHRoYXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPgotaGFzIGRldGVjdGVkIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBzdHJlYW0uCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3M8L2NvZGU+IHdpbGwgbm90Ci1wcm9kdWNlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4gdW50aWwgYWxsCi1vdXRwdXQgZGF0YSBoYXMgYmVlbiBwbGFjZWQgaW50byB0aGUgb3V0cHV0IGJ1ZmZlciwgc28gb25jZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPiBhcHBlYXJzLCB5b3UgYXJlCi1ndWFyYW50ZWVkIHRvIGhhdmUgYXZhaWxhYmxlIGFsbCB0aGUgZGVjb21wcmVzc2VkIG91dHB1dCwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvZGU+IGNhbiBzYWZlbHkKLWJlIGNhbGxlZC48L3A+Ci08cD5JZiBjYXNlIG9mIGFuIGVycm9yIHJldHVybiB2YWx1ZSwgeW91IHNob3VsZCBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvZGU+IHRvIGNsZWFuIHVwCi1hbmQgcmVsZWFzZSBtZW1vcnkuPC9wPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgc3RybSBpcyBOVUxMIG9yIHN0cm0tJmd0O3MgaXMgTlVMTAotICBvciBzdHJtLSZndDthdmFpbF9vdXQgJmx0OyAxCi1CWl9EQVRBX0VSUk9SCi0gIGlmIGEgZGF0YSBpbnRlZ3JpdHkgZXJyb3IgaXMgZGV0ZWN0ZWQgaW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtCi1CWl9EQVRBX0VSUk9SX01BR0lDCi0gIGlmIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBkb2Vzbid0IGJlZ2luIHdpdGggdGhlIHJpZ2h0IG1hZ2ljIGJ5dGVzCi1CWl9NRU1fRVJST1IKLSAgaWYgdGhlcmUgd2Fzbid0IGVub3VnaCBtZW1vcnkgYXZhaWxhYmxlCi1CWl9TVFJFQU1fRU5ECi0gIGlmIHRoZSBsb2dpY2FsIGVuZCBvZiB0aGUgZGF0YSBzdHJlYW0gd2FzIGRldGVjdGVkIGFuZCBhbGwKLSAgb3V0cHV0IGluIGhhcyBiZWVuIGNvbnN1bWVkLCBlZyBzLS0mZ3Q7YXZhaWxfb3V0ICZndDsgMAotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWjJfYnpEZWNvbXByZXNzCi0gIGlmIEJaX09LIHdhcyByZXR1cm5lZAotQloyX2J6RGVjb21wcmVzc0VuZAotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpEZWNvbXByZXNzLWVuZCI+PC9hPjMuMy42LqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6RGVjb21wcmVzc0VuZCAoIGJ6X3N0cmVhbSAqc3RybSApOzwvcHJlPgotPHA+UmVsZWFzZXMgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBkZWNvbXByZXNzaW9uCi1zdHJlYW0uPC9wPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgc3RybSBpcyBOVUxMIG9yIHN0cm0tJmd0O3MgaXMgTlVMTAotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIE5vbmUuPC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJobC1pbnRlcmZhY2UiPjwvYT4zLjQuoEhpZ2gtbGV2ZWwgaW50ZXJmYWNlPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZm9ybWF0IGZpbGVzLiAgRmlyc3QsIHNvbWUKLWdlbmVyYWwgcG9pbnRzLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImJ1bGxldCI+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+QWxsIG9mIHRoZSBmdW5jdGlvbnMgdGFrZSBhbgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmludCo8L2NvZGU+IGZpcnN0IGFyZ3VtZW50LAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+LiAgQWZ0ZXIgZWFjaCBjYWxsLAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IHNob3VsZCBiZSBjb25zdWx0ZWQKLSAgZmlyc3QgdG8gZGV0ZXJtaW5lIHRoZSBvdXRjb21lIG9mIHRoZSBjYWxsLiAgSWYKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBpcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09LPC9jb2RlPiwgdGhlIGNhbGwgY29tcGxldGVkCi0gIHN1Y2Nlc3NmdWxseSwgYW5kIG9ubHkgdGhlbiBzaG91bGQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKLSAgZnVuY3Rpb24gKGlmIGFueSkgYmUgY29uc3VsdGVkLiAgSWYKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBpcwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX0lPX0VSUk9SPC9jb2RlPiwgdGhlcmUgd2FzIGFuCi0gIGVycm9yIHJlYWRpbmcvd3JpdGluZyB0aGUgdW5kZXJseWluZyBjb21wcmVzc2VkIGZpbGUsIGFuZCB5b3UKLSAgc2hvdWxkIHRoZW4gY29uc3VsdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmVycm5vPC9jb2RlPiAvCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cGVycm9yPC9jb2RlPiB0byBkZXRlcm1pbmUgdGhlIGNhdXNlCi0gIG9mIHRoZSBkaWZmaWN1bHR5LiAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPgotICBtYXkgYWxzbyBiZSBzZXQgdG8gdmFyaW91cyBvdGhlciB2YWx1ZXM7IHByZWNpc2UgZGV0YWlscyBhcmUKLSAgZ2l2ZW4gb24gYSBwZXItZnVuY3Rpb24gYmFzaXMgYmVsb3cuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+SWYgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBpbmRpY2F0ZXMKLSAgYW4gZXJyb3IgKGllLCBhbnl0aGluZyBleGNlcHQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PSzwvY29kZT4gYW5kCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4pLCB5b3Ugc2hvdWxkCi0gIGltbWVkaWF0ZWx5IGNhbGwKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+IChvcgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlQ2xvc2U8L2NvZGU+LCBkZXBlbmRpbmcgb24KLSAgd2hldGhlciB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gcmVhZCBvciB0byB3cml0ZSkgdG8gZnJlZSB1cCBhbGwKLSAgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyZWFtLiAgT25jZSBhbiBlcnJvciBoYXMgYmVlbgotICBpbmRpY2F0ZWQsIGJlaGF2aW91ciBvZiBhbGwgY2FsbHMgZXhjZXB0Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPgotICAoPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlPC9jb2RlPikgaXMKLSAgdW5kZWZpbmVkLiAgVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgKDEpCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4gc2hvdWxkIGJlIGNoZWNrZWQKLSAgYWZ0ZXIgZWFjaCBjYWxsLCBhbmQgKDIpIGlmCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4gaW5kaWNhdGVzIGFuIGVycm9yLAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT4KLSAgKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT4pIHNob3VsZCB0aGVuCi0gIGJlIGNhbGxlZCB0byBjbGVhbiB1cC48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD5UaGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5GSUxFKjwvY29kZT4gYXJndW1lbnRzCi0gIHBhc3NlZCB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPiAvCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVPcGVuPC9jb2RlPiBzaG91bGQgYmUgc2V0Ci0gIHRvIGJpbmFyeSBtb2RlLiAgTW9zdCBVbml4IHN5c3RlbXMgd2lsbCBkbyB0aGlzIGJ5IGRlZmF1bHQsIGJ1dAotICBvdGhlciBwbGF0Zm9ybXMsIGluY2x1ZGluZyBXaW5kb3dzIGFuZCBNYWMsIHdpbGwgbm90LiAgSWYgeW91Ci0gIG9taXQgdGhpcywgeW91IG1heSBlbmNvdW50ZXIgcHJvYmxlbXMgd2hlbiBtb3ZpbmcgY29kZSB0byBuZXcKLSAgcGxhdGZvcm1zLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPk1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3RzIGFyZSBoYW5kbGVkIGJ5Ci0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bWFsbG9jPC9jb2RlPiAvCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnJlZTwvY29kZT4uICBBdCBwcmVzZW50IHRoZXJlIGlzIG5vCi0gIGZhY2lsaXR5IGZvciB1c2VyLWRlZmluZWQgbWVtb3J5IGFsbG9jYXRvcnMgaW4gdGhlIGZpbGUgSS9PCi0gIGZ1bmN0aW9ucyAoY291bGQgZWFzaWx5IGJlIGFkZGVkLCB0aG91Z2gpLjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6cmVhZG9wZW4iPjwvYT4zLjQuMS6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkT3BlbjwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgdm9pZCBCWkZJTEU7Ci0KLUJaRklMRSAqQloyX2J6UmVhZE9wZW4oIGludCAqYnplcnJvciwgRklMRSAqZiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyYm9zaXR5LCBpbnQgc21hbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1bnVzZWQsIGludCBuVW51c2VkICk7PC9wcmU+Ci08cD5QcmVwYXJlIHRvIHJlYWQgY29tcHJlc3NlZCBkYXRhIGZyb20gZmlsZSBoYW5kbGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZjwvY29kZT4uCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmY8L2NvZGU+IHNob3VsZCByZWZlciB0byBhIGZpbGUgd2hpY2gKLWhhcyBiZWVuIG9wZW5lZCBmb3IgcmVhZGluZywgYW5kIGZvciB3aGljaCB0aGUgZXJyb3IgaW5kaWNhdG9yCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mZXJyb3IoZik8L2NvZGU+KWlzIG5vdCBzZXQuICBJZgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zbWFsbDwvY29kZT4gaXMgMSwgdGhlIGxpYnJhcnkgd2lsbCB0cnkKLXRvIGRlY29tcHJlc3MgdXNpbmcgbGVzcyBtZW1vcnksIGF0IHRoZSBleHBlbnNlIG9mIHNwZWVkLjwvcD4KLTxwPkZvciByZWFzb25zIGV4cGxhaW5lZCBiZWxvdywKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4gd2lsbCBkZWNvbXByZXNzIHRoZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5uVW51c2VkPC9jb2RlPiBieXRlcyBzdGFydGluZyBhdAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij51bnVzZWQ8L2NvZGU+LCBiZWZvcmUgc3RhcnRpbmcgdG8gcmVhZAotZnJvbSB0aGUgZmlsZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmY8L2NvZGU+LiAgQXQgbW9zdAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NQVhfVU5VU0VEPC9jb2RlPiBieXRlcyBtYXkgYmUKLXN1cHBsaWVkIGxpa2UgdGhpcy4gIElmIHRoaXMgZmFjaWxpdHkgaXMgbm90IHJlcXVpcmVkLCB5b3Ugc2hvdWxkCi1wYXNzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TlVMTDwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjA8L2NvZGU+IGZvcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij51bnVzZWQ8L2NvZGU+IGFuZAotbjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VW51c2VkPC9jb2RlPiByZXNwZWN0aXZlbHkuPC9wPgotPHA+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c21hbGw8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52ZXJib3NpdHk8L2NvZGU+LCBzZWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+LjwvcD4KLTxwPlRoZSBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCB0byBkZWNvbXByZXNzIGEgZmlsZSBjYW5ub3QgYmUKLWRldGVybWluZWQgdW50aWwgdGhlIGZpbGUncyBoZWFkZXIgaGFzIGJlZW4gcmVhZC4gIFNvIGl0IGlzCi1wb3NzaWJsZSB0aGF0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZE9wZW48L2NvZGU+Ci1yZXR1cm5zIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfT0s8L2NvZGU+IGJ1dCBhIHN1YnNlcXVlbnQKLWNhbGwgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiB3aWxsIHJldHVybgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NRU1fRVJST1I8L2NvZGU+LjwvcD4KLTxwPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+OjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiBmIGlzIE5VTEwKLSAgb3Igc21hbGwgaXMgbmVpdGhlciAwIG5vciAxCi0gIG9yICggdW51c2VkID09IE5VTEwgJmFtcDsmYW1wOyBuVW51c2VkICE9IDAgKQotICBvciAoIHVudXNlZCAhPSBOVUxMICZhbXA7JmFtcDsgISgwICZsdDs9IG5VbnVzZWQgJmx0Oz0gQlpfTUFYX1VOVVNFRCkgKQotQlpfSU9fRVJST1IKLSAgaWYgZmVycm9yKGYpIGlzIG5vbnplcm8KLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZQotQlpfT0sKLSAgb3RoZXJ3aXNlLjwvcHJlPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+UG9pbnRlciB0byBhbiBhYnN0cmFjdCBCWkZJTEUKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotTlVMTAotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaMl9ielJlYWQKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotQloyX2J6Q2xvc2UKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6cmVhZCI+PC9hPjMuNC4yLqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6UmVhZCAoIGludCAqYnplcnJvciwgQlpGSUxFICpiLCB2b2lkICpidWYsIGludCBsZW4gKTs8L3ByZT4KLTxwPlJlYWRzIHVwIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGVuPC9jb2RlPgotKHVuY29tcHJlc3NlZCkgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmI8L2NvZGU+IGludG8gdGhlIGJ1ZmZlcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idWY8L2NvZGU+LiAgSWYgdGhlIHJlYWQgd2FzCi1zdWNjZXNzZnVsLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IGlzIHNldCB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9PSzwvY29kZT4gYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMKLXJlYWQgaXMgcmV0dXJuZWQuICBJZiB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIHdhcyBkZXRlY3RlZCwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT4gd2lsbCBiZSBzZXQgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU1RSRUFNX0VORDwvY29kZT4sIGFuZCB0aGUgbnVtYmVyIG9mCi1ieXRlcyByZWFkIGlzIHJldHVybmVkLiAgQWxsIG90aGVyCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+IHZhbHVlcyBkZW5vdGUgYW4KLWVycm9yLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4gd2lsbCBzdXBwbHkKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGVuPC9jb2RlPiBieXRlcywgdW5sZXNzIHRoZSBsb2dpY2FsCi1zdHJlYW0gZW5kIGlzIGRldGVjdGVkIG9yIGFuIGVycm9yIG9jY3Vycy4gIEJlY2F1c2Ugb2YgdGhpcywgaXQKLWlzIHBvc3NpYmxlIHRvIGRldGVjdCB0aGUgc3RyZWFtIGVuZCBieSBvYnNlcnZpbmcgd2hlbiB0aGUgbnVtYmVyCi1vZiBieXRlcyByZXR1cm5lZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQuCi1OZXZlcnRoZWxlc3MsIHRoaXMgaXMgcmVnYXJkZWQgYXMgaW5hZHZpc2FibGU7IHlvdSBzaG91bGQgaW5zdGVhZAotY2hlY2sgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPiBhZnRlciBldmVyeSBjYWxsCi1hbmQgd2F0Y2ggb3V0IGZvcgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPi48L3A+Ci08cD5JbnRlcm5hbGx5LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+Ci1jb3BpZXMgZGF0YSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgaW4gY2h1bmtzIG9mIHNpemUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTUFYX1VOVVNFRDwvY29kZT4gYnl0ZXMgYmVmb3JlCi1kZWNvbXByZXNzaW5nIGl0LiAgSWYgdGhlIGZpbGUgY29udGFpbnMgbW9yZSBieXRlcyB0aGFuIHN0cmljdGx5Ci1uZWVkZWQgdG8gcmVhY2ggdGhlIGxvZ2ljYWwgZW5kLW9mLXN0cmVhbSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4gd2lsbCBhbG1vc3QgY2VydGFpbmx5Ci1yZWFkIHNvbWUgb2YgdGhlIHRyYWlsaW5nIGRhdGEgYmVmb3JlIHNpZ25hbGxpbmcKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfU0VRVUVOQ0VfRU5EPC9jb2RlPi4gIFRvIGNvbGxlY3QgdGhlCi1yZWFkIGJ1dCB1bnVzZWQgZGF0YSBvbmNlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NFUVVFTkNFX0VORDwvY29kZT4gaGFzIGFwcGVhcmVkLAotY2FsbCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvZGU+Ci1pbW1lZGlhdGVseSBiZWZvcmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPi48L3A+Ci08cD5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPjo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgYiBpcyBOVUxMIG9yIGJ1ZiBpcyBOVUxMIG9yIGxlbiAmbHQ7IDAKLUJaX1NFUVVFTkNFX0VSUk9SCi0gIGlmIGIgd2FzIG9wZW5lZCB3aXRoIEJaMl9ieldyaXRlT3BlbgotQlpfSU9fRVJST1IKLSAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgcmVhZGluZyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUKLUJaX1VORVhQRUNURURfRU9GCi0gIGlmIHRoZSBjb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIAotICB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIHdhcyBkZXRlY3RlZAotQlpfREFUQV9FUlJPUgotICBpZiBhIGRhdGEgaW50ZWdyaXR5IGVycm9yIHdhcyBkZXRlY3RlZCBpbiB0aGUgY29tcHJlc3NlZCBzdHJlYW0KLUJaX0RBVEFfRVJST1JfTUFHSUMKLSAgaWYgdGhlIHN0cmVhbSBkb2VzIG5vdCBiZWdpbiB3aXRoIHRoZSByZXF1aXNpdGUgaGVhZGVyIGJ5dGVzIAotICAoaWUsIGlzIG5vdCBhIGJ6aXAyIGRhdGEgZmlsZSkuICBUaGlzIGlzIHJlYWxseSAKLSAgYSBzcGVjaWFsIGNhc2Ugb2YgQlpfREFUQV9FUlJPUi4KLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IHdhcyBhdmFpbGFibGUKLUJaX1NUUkVBTV9FTkQKLSAgaWYgdGhlIGxvZ2ljYWwgZW5kIG9mIHN0cmVhbSB3YXMgZGV0ZWN0ZWQuCi1CWl9PSwotICBvdGhlcndpc2UuPC9wcmU+Ci08cD5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5udW1iZXIgb2YgYnl0ZXMgcmVhZAotICBpZiBiemVycm9yIGlzIEJaX09LIG9yIEJaX1NUUkVBTV9FTkQKLXVuZGVmaW5lZAotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbGxlY3QgZGF0YSBmcm9tIGJ1ZiwgdGhlbiBCWjJfYnpSZWFkIG9yIEJaMl9ielJlYWRDbG9zZQotICBpZiBiemVycm9yIGlzIEJaX09LCi1jb2xsZWN0IGRhdGEgZnJvbSBidWYsIHRoZW4gQloyX2J6UmVhZENsb3NlIG9yIEJaMl9ielJlYWRHZXRVbnVzZWQKLSAgaWYgYnplcnJvciBpcyBCWl9TRVFVRU5DRV9FTkQKLUJaMl9ielJlYWRDbG9zZQotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpyZWFkZ2V0dW51c2VkIj48L2E+My40LjMuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnZvaWQgQloyX2J6UmVhZEdldFVudXNlZCggaW50KiBiemVycm9yLCBCWkZJTEUgKmIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogdW51c2VkLCBpbnQqIG5VbnVzZWQgKTs8L3ByZT4KLTxwPlJldHVybnMgZGF0YSB3aGljaCB3YXMgcmVhZCBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgYnV0Ci13YXMgbm90IG5lZWRlZCB0byBnZXQgdG8gdGhlIGxvZ2ljYWwgZW5kLW9mLXN0cmVhbS4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KnVudXNlZDwvY29kZT4gaXMgc2V0IHRvIHRoZSBhZGRyZXNzIG9mCi10aGUgZGF0YSwgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Km5VbnVzZWQ8L2NvZGU+IHRvIHRoZQotbnVtYmVyIG9mIGJ5dGVzLiAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qblVudXNlZDwvY29kZT4gd2lsbAotYmUgc2V0IHRvIGEgdmFsdWUgYmV0d2VlbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjA8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9NQVhfVU5VU0VEPC9jb2RlPiBpbmNsdXNpdmUuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgb25jZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiBoYXMgc2lnbmFsbGVkCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+IGJ1dCBiZWZvcmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPi48L3A+Ci08cD5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPjo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfUEFSQU1fRVJST1IKLSAgaWYgYiBpcyBOVUxMCi0gIG9yIHVudXNlZCBpcyBOVUxMIG9yIG5VbnVzZWQgaXMgTlVMTAotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgQlpfU1RSRUFNX0VORCBoYXMgbm90IGJlZW4gc2lnbmFsbGVkCi0gIG9yIGlmIGIgd2FzIG9wZW5lZCB3aXRoIEJaMl9ieldyaXRlT3BlbgotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWjJfYnpSZWFkQ2xvc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpyZWFkY2xvc2UiPjwvYT4zLjQuNC6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkIEJaMl9ielJlYWRDbG9zZSAoIGludCAqYnplcnJvciwgQlpGSUxFICpiICk7PC9wcmU+Ci08cD5SZWxlYXNlcyBhbGwgbWVtb3J5IHBlcnRhaW5pbmcgdG8gdGhlIGNvbXByZXNzZWQgZmlsZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iPC9jb2RlPi4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZENsb3NlPC9jb2RlPiBkb2VzIG5vdCBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZjbG9zZTwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgZmlsZQotaGFuZGxlLCBzbyB5b3Ugc2hvdWxkIGRvIHRoYXQgeW91cnNlbGYgaWYgYXBwcm9wcmlhdGUuCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRDbG9zZTwvY29kZT4gc2hvdWxkIGJlIGNhbGxlZAotdG8gY2xlYW4gdXAgYWZ0ZXIgYWxsIGVycm9yIHNpdHVhdGlvbnMuPC9wPgotPHA+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnplcnJvcjwvY29kZT46PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX1NFUVVFTkNFX0VSUk9SCi0gIGlmIGIgd2FzIG9wZW5lZCB3aXRoIEJaMl9iek9wZW5Xcml0ZQotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08cD5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ub25lPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6d3JpdGVvcGVuIj48L2E+My40LjUuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVPcGVuPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpGSUxFICpCWjJfYnpXcml0ZU9wZW4oIGludCAqYnplcnJvciwgRklMRSAqZiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrU2l6ZTEwMGssIGludCB2ZXJib3NpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdvcmtGYWN0b3IgKTs8L3ByZT4KLTxwPlByZXBhcmUgdG8gd3JpdGUgY29tcHJlc3NlZCBkYXRhIHRvIGZpbGUgaGFuZGxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmY8L2NvZGU+LgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mPC9jb2RlPiBzaG91bGQgcmVmZXIgdG8gYSBmaWxlIHdoaWNoCi1oYXMgYmVlbiBvcGVuZWQgZm9yIHdyaXRpbmcsIGFuZCBmb3Igd2hpY2ggdGhlIGVycm9yIGluZGljYXRvcgotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmVycm9yKGYpPC9jb2RlPilpcyBub3Qgc2V0LjwvcD4KLTxwPkZvciB0aGUgbWVhbmluZyBvZiBwYXJhbWV0ZXJzCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJsb2NrU2l6ZTEwMGs8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52ZXJib3NpdHk8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij53b3JrRmFjdG9yPC9jb2RlPiwgc2VlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekNvbXByZXNzSW5pdDwvY29kZT4uPC9wPgotPHA+QWxsIHJlcXVpcmVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYXQgdGhpcyBzdGFnZSwgc28gaWYgdGhlCi1jYWxsIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX01FTV9FUlJPUjwvY29kZT4gY2Fubm90IGJlIHNpZ25hbGxlZAotYnkgYSBzdWJzZXF1ZW50IGNhbGwgdG8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGU8L2NvZGU+LjwvcD4KLTxwPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+OjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiBmIGlzIE5VTEwKLSAgb3IgYmxvY2tTaXplMTAwayAmbHQ7IDEgb3IgYmxvY2tTaXplMTAwayAmZ3Q7IDkKLUJaX0lPX0VSUk9SCi0gIGlmIGZlcnJvcihmKSBpcyBub256ZXJvCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUKLUJaX09LCi0gIG90aGVyd2lzZTwvcHJlPgotPHA+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+UG9pbnRlciB0byBhbiBhYnN0cmFjdCBCWkZJTEUKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotTlVMTAotICBvdGhlcndpc2U8L3ByZT4KLTxwPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaMl9ieldyaXRlCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sKLSAgKHlvdSBjb3VsZCBnbyBkaXJlY3RseSB0byBCWjJfYnpXcml0ZUNsb3NlLCBidXQgdGhpcyB3b3VsZCBiZSBwcmV0dHkgcG9pbnRsZXNzKQotQloyX2J6V3JpdGVDbG9zZQotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnp3cml0ZSI+PC9hPjMuNC42LqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ieldyaXRlPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZCBCWjJfYnpXcml0ZSAoIGludCAqYnplcnJvciwgQlpGSUxFICpiLCB2b2lkICpidWYsIGludCBsZW4gKTs8L3ByZT4KLTxwPkFic29yYnMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5sZW48L2NvZGU+IGJ5dGVzIGZyb20gdGhlCi1idWZmZXIgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5idWY8L2NvZGU+LCBldmVudHVhbGx5IHRvIGJlCi1jb21wcmVzc2VkIGFuZCB3cml0dGVuIHRvIHRoZSBmaWxlLjwvcD4KLTxwPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6ZXJyb3I8L2NvZGU+OjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9QQVJBTV9FUlJPUgotICBpZiBiIGlzIE5VTEwgb3IgYnVmIGlzIE5VTEwgb3IgbGVuICZsdDsgMAotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6UmVhZE9wZW4KLUJaX0lPX0VSUk9SCi0gIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdGhlIGNvbXByZXNzZWQgZmlsZS4KLUJaX09LCi0gIG90aGVyd2lzZTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJiendyaXRlY2xvc2UiPjwvYT4zLjQuNy6gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dm9pZCBCWjJfYnpXcml0ZUNsb3NlKCBpbnQgKmJ6ZXJyb3IsIEJaRklMRSogZiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGFiYW5kb24sCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX2luLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXQgKTsKLQotdm9pZCBCWjJfYnpXcml0ZUNsb3NlNjQoIGludCAqYnplcnJvciwgQlpGSUxFKiBmLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhYmFuZG9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX2luX2xvMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBuYnl0ZXNfaW5faGkzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXRfbG8zMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXRfaGkzMiApOzwvcHJlPgotPHA+Q29tcHJlc3NlcyBhbmQgZmx1c2hlcyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIGFsbCBkYXRhIHNvCi1mYXIgc3VwcGxpZWQgYnkgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT4uCi1UaGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIG1hcmtlcnMgYXJlIGFsc28gd3JpdHRlbiwgc28gc3Vic2VxdWVudAotY2FsbHMgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZTwvY29kZT4gYXJlCi1pbGxlZ2FsLiAgQWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXByZXNzZWQgZmlsZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iPC9jb2RlPiBpcyByZWxlYXNlZC4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmZsdXNoPC9jb2RlPiBpcyBjYWxsZWQgb24gdGhlCi1jb21wcmVzc2VkIGZpbGUsIGJ1dCBpdCBpcyBub3QKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmNsb3NlPC9jb2RlPidkLjwvcD4KLTxwPklmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT4gaXMKLWNhbGxlZCB0byBjbGVhbiB1cCBhZnRlciBhbiBlcnJvciwgdGhlIG9ubHkgYWN0aW9uIGlzIHRvIHJlbGVhc2UKLXRoZSBtZW1vcnkuICBUaGUgbGlicmFyeSByZWNvcmRzIHRoZSBlcnJvciBjb2RlcyBpc3N1ZWQgYnkKLXByZXZpb3VzIGNhbGxzLCBzbyB0aGlzIHNpdHVhdGlvbiB3aWxsIGJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkuCi1UaGVyZSBpcyBubyBhdHRlbXB0IHRvIGNvbXBsZXRlIHRoZSBjb21wcmVzc2lvbiBvcGVyYXRpb24sIG5vciB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mZmx1c2g8L2NvZGU+IHRoZSBjb21wcmVzc2VkIGZpbGUuICBZb3UKLWNhbiBmb3JjZSB0aGlzIGJlaGF2aW91ciB0byBoYXBwZW4gZXZlbiBpbiB0aGUgY2FzZSBvZiBubyBlcnJvciwKLWJ5IHBhc3NpbmcgYSBub256ZXJvIHZhbHVlIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmFiYW5kb248L2NvZGU+LjwvcD4KLTxwPklmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmJ5dGVzX2luPC9jb2RlPiBpcyBub24tbnVsbCwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Km5ieXRlc19pbjwvY29kZT4gd2lsbCBiZSBzZXQgdG8gYmUgdGhlCi10b3RhbCB2b2x1bWUgb2YgdW5jb21wcmVzc2VkIGRhdGEgaGFuZGxlZC4gIFNpbWlsYXJseSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bmJ5dGVzX291dDwvY29kZT4gd2lsbCBiZSBzZXQgdG8gdGhlCi10b3RhbCB2b2x1bWUgb2YgY29tcHJlc3NlZCBkYXRhIHdyaXR0ZW4uICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoCi1vbGRlciB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6V3JpdGVDbG9zZTwvY29kZT4gb25seSB5aWVsZHMgdGhlCi1sb3dlciAzMiBiaXRzIG9mIHRoZXNlIGNvdW50cy4gIFVzZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpXcml0ZUNsb3NlNjQ8L2NvZGU+IGlmIHlvdSB3YW50Ci10aGUgZnVsbCA2NCBiaXQgY291bnRzLiAgVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgb3RoZXJ3aXNlCi1hYnNvbHV0ZWx5IGlkZW50aWNhbC48L3A+Ci08cD5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemVycm9yPC9jb2RlPjo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+QlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6UmVhZE9wZW4KLUJaX0lPX0VSUk9SCi0gIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdGhlIGNvbXByZXNzZWQgZmlsZQotQlpfT0sKLSAgb3RoZXJ3aXNlPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImVtYmVkIj48L2E+My40LjguoEhhbmRsaW5nIGVtYmVkZGVkIGNvbXByZXNzZWQgZGF0YSBzdHJlYW1zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPlRoZSBoaWdoLWxldmVsIGxpYnJhcnkgZmFjaWxpdGF0ZXMgdXNlIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBkYXRhIHN0cmVhbXMgd2hpY2ggZm9ybQotc29tZSBwYXJ0IG9mIGEgc3Vycm91bmRpbmcsIGxhcmdlciBkYXRhIHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPkZvciB3cml0aW5nLCB0aGUgbGlicmFyeSB0YWtlcyBhbiBvcGVuIGZpbGUgaGFuZGxlLAotICB3cml0ZXMgY29tcHJlc3NlZCBkYXRhIHRvIGl0LAotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZmbHVzaDwvY29kZT5lcyBpdCBidXQgZG9lcyBub3QKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mY2xvc2U8L2NvZGU+IGl0LiAgVGhlIGNhbGxpbmcKLSAgYXBwbGljYXRpb24gY2FuIHdyaXRlIGl0cyBvd24gZGF0YSBiZWZvcmUgYW5kIGFmdGVyIHRoZQotICBjb21wcmVzc2VkIGRhdGEgc3RyZWFtLCB1c2luZyB0aGF0IHNhbWUgZmlsZSBoYW5kbGUuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+UmVhZGluZyBpcyBtb3JlIGNvbXBsZXgsIGFuZCB0aGUgZmFjaWxpdGllcyBhcmUgbm90IGFzCi0gIGdlbmVyYWwgYXMgdGhleSBjb3VsZCBiZSBzaW5jZSBnZW5lcmFsaXR5IGlzIGhhcmQgdG8gcmVjb25jaWxlCi0gIHdpdGggZWZmaWNpZW5jeS4gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZDwvY29kZT4KLSAgcmVhZHMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIGluIGJsb2NrcyBvZiBzaXplCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTUFYX1VOVVNFRDwvY29kZT4gYnl0ZXMsIGFuZCBpbgotICBkb2luZyBzbyBwcm9iYWJseSB3aWxsIG92ZXJzaG9vdCB0aGUgbG9naWNhbCBlbmQgb2YgY29tcHJlc3NlZAotICBzdHJlYW0uICBUbyByZWNvdmVyIHRoaXMgZGF0YSBvbmNlIGRlY29tcHJlc3Npb24gaGFzIGVuZGVkLAotICBjYWxsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT4gYWZ0ZXIKLSAgdGhlIGxhc3QgY2FsbCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWQ8L2NvZGU+Ci0gICh0aGUgb25lIHJldHVybmluZwotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+KSBidXQgYmVmb3JlCi0gIGNhbGxpbmcKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkQ2xvc2U8L2NvZGU+LjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPlRoaXMgbWVjaGFuaXNtIG1ha2VzIGl0IGVhc3kgdG8gZGVjb21wcmVzcyBtdWx0aXBsZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gc3RyZWFtcyBwbGFjZWQgZW5kLXRvLWVuZC4KLUFzIHRoZSBlbmQgb2Ygb25lIHN0cmVhbSwgd2hlbgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpSZWFkPC9jb2RlPiByZXR1cm5zCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUkVBTV9FTkQ8L2NvZGU+LCBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvZGU+IHRvIGNvbGxlY3QKLXRoZSB1bnVzZWQgZGF0YSAoY29weSBpdCBpbnRvIHlvdXIgb3duIGJ1ZmZlciBzb21ld2hlcmUpLiAgVGhhdAotZGF0YSBmb3JtcyB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tcHJlc3NlZCBzdHJlYW0uICBUbyBzdGFydAotdW5jb21wcmVzc2luZyB0aGF0IG5leHQgc3RyZWFtLCBjYWxsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9ielJlYWRPcGVuPC9jb2RlPiBhZ2FpbiwgZmVlZGluZyBpbgotdGhlIHVudXNlZCBkYXRhIHZpYSB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij51bnVzZWQ8L2NvZGU+IC8KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+blVudXNlZDwvY29kZT4gcGFyYW1ldGVycy4gIEtlZXAgZG9pbmcKLXRoaXMgdW50aWwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9TVFJFQU1fRU5EPC9jb2RlPiByZXR1cm4KLWNvaW5jaWRlcyB3aXRoIHRoZSBwaHlzaWNhbCBlbmQgb2YgZmlsZQotKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZmVvZihmKTwvY29kZT4pLiAgSW4gdGhpcyBzaXR1YXRpb24KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6UmVhZEdldFVudXNlZDwvY29kZT4gd2lsbCBvZgotY291cnNlIHJldHVybiBubyBkYXRhLjwvcD4KLTxwPlRoaXMgc2hvdWxkIGdpdmUgc29tZSBmZWVsIGZvciBob3cgdGhlIGhpZ2gtbGV2ZWwgaW50ZXJmYWNlCi1jYW4gYmUgdXNlZC4gIElmIHlvdSByZXF1aXJlIGV4dHJhIGZsZXhpYmlsaXR5LCB5b3UnbGwgaGF2ZSB0bwotYml0ZSB0aGUgYnVsbGV0IGFuZCBnZXQgdG8gZ3JpcHMgd2l0aCB0aGUgbG93LWxldmVsCi1pbnRlcmZhY2UuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJzdGQtcmR3ciI+PC9hPjMuNC45LqBTdGFuZGFyZCBmaWxlLXJlYWRpbmcvd3JpdGluZyBjb2RlPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkhlcmUncyBob3cgeW91J2Qgd3JpdGUgZGF0YSB0byBhIGNvbXByZXNzZWQgZmlsZTo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+RklMRSogICBmOwotQlpGSUxFKiBiOwotaW50ICAgICBuQnVmOwotY2hhciAgICBidWZbIC8qIHdoYXRldmVyIHNpemUgeW91IGxpa2UgKi8gXTsKLWludCAgICAgYnplcnJvcjsKLWludCAgICAgbldyaXR0ZW47Ci0KLWYgPSBmb3BlbiAoICJteWZpbGUuYnoyIiwgInciICk7Ci1pZiAoICFmICkgewotIC8qIGhhbmRsZSBlcnJvciAqLwotfQotYiA9IEJaMl9ieldyaXRlT3BlbiggJmFtcDtiemVycm9yLCBmLCA5ICk7Ci1pZiAoYnplcnJvciAhPSBCWl9PSykgewotIEJaMl9ieldyaXRlQ2xvc2UgKCBiICk7Ci0gLyogaGFuZGxlIGVycm9yICovCi19Ci0KLXdoaWxlICggLyogY29uZGl0aW9uICovICkgewotIC8qIGdldCBkYXRhIHRvIHdyaXRlIGludG8gYnVmLCBhbmQgc2V0IG5CdWYgYXBwcm9wcmlhdGVseSAqLwotIG5Xcml0dGVuID0gQloyX2J6V3JpdGUgKCAmYW1wO2J6ZXJyb3IsIGIsIGJ1ZiwgbkJ1ZiApOwotIGlmIChiemVycm9yID09IEJaX0lPX0VSUk9SKSB7IAotICAgQloyX2J6V3JpdGVDbG9zZSAoICZhbXA7YnplcnJvciwgYiApOwotICAgLyogaGFuZGxlIGVycm9yICovCi0gfQotfQotCi1CWjJfYnpXcml0ZUNsb3NlKCAmYW1wO2J6ZXJyb3IsIGIgKTsKLWlmIChiemVycm9yID09IEJaX0lPX0VSUk9SKSB7Ci0gLyogaGFuZGxlIGVycm9yICovCi19PC9wcmU+Ci08cD5BbmQgdG8gcmVhZCBmcm9tIGEgY29tcHJlc3NlZCBmaWxlOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5GSUxFKiAgIGY7Ci1CWkZJTEUqIGI7Ci1pbnQgICAgIG5CdWY7Ci1jaGFyICAgIGJ1ZlsgLyogd2hhdGV2ZXIgc2l6ZSB5b3UgbGlrZSAqLyBdOwotaW50ICAgICBiemVycm9yOwotaW50ICAgICBuV3JpdHRlbjsKLQotZiA9IGZvcGVuICggIm15ZmlsZS5iejIiLCAiciIgKTsKLWlmICggIWYgKSB7Ci0gIC8qIGhhbmRsZSBlcnJvciAqLwotfQotYiA9IEJaMl9ielJlYWRPcGVuICggJmFtcDtiemVycm9yLCBmLCAwLCBOVUxMLCAwICk7Ci1pZiAoIGJ6ZXJyb3IgIT0gQlpfT0sgKSB7Ci0gIEJaMl9ielJlYWRDbG9zZSAoICZhbXA7YnplcnJvciwgYiApOwotICAvKiBoYW5kbGUgZXJyb3IgKi8KLX0KLQotYnplcnJvciA9IEJaX09LOwotd2hpbGUgKCBiemVycm9yID09IEJaX09LICZhbXA7JmFtcDsgLyogYXJiaXRyYXJ5IG90aGVyIGNvbmRpdGlvbnMgKi8pIHsKLSAgbkJ1ZiA9IEJaMl9ielJlYWQgKCAmYW1wO2J6ZXJyb3IsIGIsIGJ1ZiwgLyogc2l6ZSBvZiBidWYgKi8gKTsKLSAgaWYgKCBiemVycm9yID09IEJaX09LICkgewotICAgIC8qIGRvIHNvbWV0aGluZyB3aXRoIGJ1ZlswIC4uIG5CdWYtMV0gKi8KLSAgfQotfQotaWYgKCBiemVycm9yICE9IEJaX1NUUkVBTV9FTkQgKSB7Ci0gICBCWjJfYnpSZWFkQ2xvc2UgKCAmYW1wO2J6ZXJyb3IsIGIgKTsKLSAgIC8qIGhhbmRsZSBlcnJvciAqLwotfSBlbHNlIHsKLSAgIEJaMl9ielJlYWRDbG9zZSAoICZhbXA7YnplcnJvciwgYiApOwotfTwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0idXRpbC1mbnMiPjwvYT4zLjUuoFV0aWxpdHkgZnVuY3Rpb25zPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImJ6YnVmZnRvYnVmZmNvbXByZXNzIj48L2E+My41LjEuoDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcyggY2hhciogICAgICAgICBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBkZXN0TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgIHNvdXJjZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgYmxvY2tTaXplMTAwaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgdmVyYm9zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICB3b3JrRmFjdG9yICk7PC9wcmU+Ci08cD5BdHRlbXB0cyB0byBjb21wcmVzcyB0aGUgZGF0YSBpbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNvdXJjZVswCi0uLiBzb3VyY2VMZW4tMV08L2NvZGU+IGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGVzdFswIC4uICpkZXN0TGVuLTFdPC9jb2RlPi4gIElmIHRoZQotZGVzdGluYXRpb24gYnVmZmVyIGlzIGJpZyBlbm91Z2gsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPipkZXN0TGVuPC9jb2RlPiBpcyBzZXQgdG8gdGhlIHNpemUgb2YKLXRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09LPC9jb2RlPgotaXMgcmV0dXJuZWQuICBJZiB0aGUgY29tcHJlc3NlZCBkYXRhIHdvbid0IGZpdCwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KmRlc3RMZW48L2NvZGU+IGlzIHVuY2hhbmdlZCwgYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX09VVEJVRkZfRlVMTDwvY29kZT4gaXMKLXJldHVybmVkLjwvcD4KLTxwPkNvbXByZXNzaW9uIGluIHRoaXMgbWFubmVyIGlzIGEgb25lLXNob3QgZXZlbnQsIGRvbmUgd2l0aCBhCi1zaW5nbGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiAgVGhlIHJlc3VsdGluZyBjb21wcmVzc2VkIGRhdGEgaXMgYQotY29tcGxldGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gZm9ybWF0IGRhdGEKLXN0cmVhbS4gIFRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgbWFraW5nIGFkZGl0aW9uYWwgY2FsbHMgdG8KLXByb3ZpZGUgZXh0cmEgaW5wdXQgZGF0YS4gIElmIHlvdSB3YW50IHRoYXQga2luZCBvZiBtZWNoYW5pc20sCi11c2UgdGhlIGxvdy1sZXZlbCBpbnRlcmZhY2UuPC9wPgotPHA+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YmxvY2tTaXplMTAwazwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnZlcmJvc2l0eTwvY29kZT4gYW5kCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPndvcmtGYWN0b3I8L2NvZGU+LCBzZWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPi48L3A+Ci08cD5UbyBndWFyYW50ZWUgdGhhdCB0aGUgY29tcHJlc3NlZCBkYXRhIHdpbGwgZml0IGluIGl0cwotYnVmZmVyLCBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIG9mIHNpemUgMSUgbGFyZ2VyIHRoYW4gdGhlCi11bmNvbXByZXNzZWQgZGF0YSwgcGx1cyBzaXggaHVuZHJlZCBleHRyYSBieXRlcy48L3A+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb2RlPgotd2lsbCBub3Qgd3JpdGUgZGF0YSBhdCBvciBiZXlvbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGVzdFsqZGVzdExlbl08L2NvZGU+LCBldmVuIGluIGNhc2Ugb2YKLWJ1ZmZlciBvdmVyZmxvdy48L3A+Ci08cD5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiBkZXN0IGlzIE5VTEwgb3IgZGVzdExlbiBpcyBOVUxMCi0gIG9yIGJsb2NrU2l6ZTEwMGsgJmx0OyAxIG9yIGJsb2NrU2l6ZTEwMGsgJmd0OyA5Ci0gIG9yIHZlcmJvc2l0eSAmbHQ7IDAgb3IgdmVyYm9zaXR5ICZndDsgNAotICBvciB3b3JrRmFjdG9yICZsdDsgMCBvciB3b3JrRmFjdG9yICZndDsgMjUwCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUgCi1CWl9PVVRCVUZGX0ZVTEwKLSAgaWYgdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBleGNlZWRzICpkZXN0TGVuCi1CWl9PSwotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDIiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iYnpidWZmdG9idWZmZGVjb21wcmVzcyI+PC9hPjMuNS4yLqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb2RlPjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50IEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKCBjaGFyKiAgICAgICAgIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZGVzdExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgc291cmNlTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHNtYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHZlcmJvc2l0eSApOzwvcHJlPgotPHA+QXR0ZW1wdHMgdG8gZGVjb21wcmVzcyB0aGUgZGF0YSBpbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNvdXJjZVswCi0uLiBzb3VyY2VMZW4tMV08L2NvZGU+IGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGVzdFswIC4uICpkZXN0TGVuLTFdPC9jb2RlPi4gIElmIHRoZQotZGVzdGluYXRpb24gYnVmZmVyIGlzIGJpZyBlbm91Z2gsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPipkZXN0TGVuPC9jb2RlPiBpcyBzZXQgdG8gdGhlIHNpemUgb2YKLXRoZSB1bmNvbXByZXNzZWQgZGF0YSwgYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfT0s8L2NvZGU+Ci1pcyByZXR1cm5lZC4gIElmIHRoZSBjb21wcmVzc2VkIGRhdGEgd29uJ3QgZml0LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qZGVzdExlbjwvY29kZT4gaXMgdW5jaGFuZ2VkLCBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfT1VUQlVGRl9GVUxMPC9jb2RlPiBpcwotcmV0dXJuZWQuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zb3VyY2U8L2NvZGU+IGlzIGFzc3VtZWQgdG8gaG9sZAotYSBjb21wbGV0ZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBmb3JtYXQgZGF0YQotc3RyZWFtLgotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29kZT4gdHJpZXMKLXRvIGRlY29tcHJlc3MgdGhlIGVudGlyZXR5IG9mIHRoZSBzdHJlYW0gaW50byB0aGUgb3V0cHV0Ci1idWZmZXIuPC9wPgotPHA+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c21hbGw8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52ZXJib3NpdHk8L2NvZGU+LCBzZWUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+LjwvcD4KLTxwPkJlY2F1c2UgdGhlIGNvbXByZXNzaW9uIHJhdGlvIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgY2Fubm90Ci1iZSBrbm93biBpbiBhZHZhbmNlLCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBndWFyYW50ZWUgdGhhdCB0aGUKLW91dHB1dCBidWZmZXIgd2lsbCBiZSBiaWcgZW5vdWdoLiAgWW91IG1heSBvZiBjb3Vyc2UgbWFrZQotYXJyYW5nZW1lbnRzIGluIHlvdXIgY29kZSB0byByZWNvcmQgdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZAotZGF0YSwgYnV0IHN1Y2ggYSBtZWNoYW5pc20gaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzCi1saWJyYXJ5LjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+Ci13aWxsIG5vdCB3cml0ZSBkYXRhIGF0IG9yIGJleW9uZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5kZXN0WypkZXN0TGVuXTwvY29kZT4sIGV2ZW4gaW4gY2FzZSBvZgotYnVmZmVyIG92ZXJmbG93LjwvcD4KLTxwPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGRlc3QgaXMgTlVMTCBvciBkZXN0TGVuIGlzIE5VTEwKLSAgb3Igc21hbGwgIT0gMCAmYW1wOyZhbXA7IHNtYWxsICE9IDEKLSAgb3IgdmVyYm9zaXR5ICZsdDsgMCBvciB2ZXJib3NpdHkgJmd0OyA0Ci1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUgCi1CWl9PVVRCVUZGX0ZVTEwKLSAgaWYgdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBleGNlZWRzICpkZXN0TGVuCi1CWl9EQVRBX0VSUk9SCi0gIGlmIGEgZGF0YSBpbnRlZ3JpdHkgZXJyb3Igd2FzIGRldGVjdGVkIGluIHRoZSBjb21wcmVzc2VkIGRhdGEKLUJaX0RBVEFfRVJST1JfTUFHSUMKLSAgaWYgdGhlIGNvbXByZXNzZWQgZGF0YSBkb2Vzbid0IGJlZ2luIHdpdGggdGhlIHJpZ2h0IG1hZ2ljIGJ5dGVzCi1CWl9VTkVYUEVDVEVEX0VPRgotICBpZiB0aGUgY29tcHJlc3NlZCBkYXRhIGVuZHMgdW5leHBlY3RlZGx5Ci1CWl9PSwotICBvdGhlcndpc2U8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InpsaWItY29tcGF0Ij48L2E+My42LqA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnpsaWI8L2NvZGU+IGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPllvc2hpb2thIFRzdW5lbyBoYXMgY29udHJpYnV0ZWQgc29tZSBmdW5jdGlvbnMgdG8gZ2l2ZQotYmV0dGVyIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+emxpYjwvY29kZT4gY29tcGF0aWJpbGl0eS4KLVRoZXNlIGZ1bmN0aW9ucyBhcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpvcGVuPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6cmVhZDwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iendyaXRlPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Zmx1c2g8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpjbG9zZTwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemVycm9yPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6bGliVmVyc2lvbjwvY29kZT4uICBUaGVzZQotZnVuY3Rpb25zIGFyZSBub3QgKHlldCkgb2ZmaWNpYWxseSBwYXJ0IG9mIHRoZSBsaWJyYXJ5LiAgSWYgdGhleQotYnJlYWssIHlvdSBnZXQgdG8ga2VlcCBhbGwgdGhlIHBpZWNlcy4gIE5ldmVydGhlbGVzcywgSSB0aGluawotdGhleSB3b3JrIG9rLjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHZvaWQgQlpGSUxFOwotCi1jb25zdCBjaGFyICogQloyX2J6bGliVmVyc2lvbiAoIHZvaWQgKTs8L3ByZT4KLTxwPlJldHVybnMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgbGlicmFyeSB2ZXJzaW9uLjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5CWkZJTEUgKiBCWjJfYnpvcGVuICAoIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUgKTsKLUJaRklMRSAqIEJaMl9iemRvcGVuICggaW50ICAgICAgICBmZCwgICAgY29uc3QgY2hhciAqbW9kZSApOzwvcHJlPgotPHA+T3BlbnMgYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5iejI8L2NvZGU+IGZpbGUgZm9yCi1yZWFkaW5nIG9yIHdyaXRpbmcsIHVzaW5nIGVpdGhlciBpdHMgbmFtZSBvciBhIHByZS1leGlzdGluZyBmaWxlCi1kZXNjcmlwdG9yLiAgQW5hbG9nb3VzIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Zm9wZW48L2NvZGU+Ci1hbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mZG9wZW48L2NvZGU+LjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5pbnQgQloyX2J6cmVhZCAgKCBCWkZJTEUqIGIsIHZvaWQqIGJ1ZiwgaW50IGxlbiApOwotaW50IEJaMl9iendyaXRlICggQlpGSUxFKiBiLCB2b2lkKiBidWYsIGludCBsZW4gKTs8L3ByZT4KLTxwPlJlYWRzL3dyaXRlcyBkYXRhIGZyb20vdG8gYSBwcmV2aW91c2x5IG9wZW5lZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWkZJTEU8L2NvZGU+LiAgQW5hbG9nb3VzIHRvCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZyZWFkPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZndyaXRlPC9jb2RlPi48L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+aW50ICBCWjJfYnpmbHVzaCAoIEJaRklMRSogYiApOwotdm9pZCBCWjJfYnpjbG9zZSAoIEJaRklMRSogYiApOzwvcHJlPgotPHA+Rmx1c2hlcy9jbG9zZXMgYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaRklMRTwvY29kZT4uCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaMl9iemZsdXNoPC9jb2RlPiBkb2Vzbid0IGFjdHVhbGx5IGRvCi1hbnl0aGluZy4gIEFuYWxvZ291cyB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZmbHVzaDwvY29kZT4KLWFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZjbG9zZTwvY29kZT4uPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IGNoYXIgKiBCWjJfYnplcnJvciAoIEJaRklMRSAqYiwgaW50ICplcnJudW0gKTwvcHJlPgotPHA+UmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBtb3JlIHJlY2VudCBlcnJvciBzdGF0dXMgb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YjwvY29kZT4sIGFuZCBhbHNvIHNldHMKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+KmVycm51bTwvY29kZT4gdG8gaXRzIG51bWVyaWNhbAotdmFsdWUuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MSIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KLTxhIG5hbWU9InN0ZGlvLWZyZWUiPjwvYT4zLjcuoFVzaW5nIHRoZSBsaWJyYXJ5IGluIGEgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zdGRpbzwvY29kZT4tZnJlZSBlbnZpcm9ubWVudDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJzZWN0MiIgbGFuZz0iZW4iPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJzdGRpby1ieWUiPjwvYT4zLjcuMS6gR2V0dGluZyByaWQgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zdGRpbzwvY29kZT48L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+SW4gYSBkZWVwbHkgZW1iZWRkZWQgYXBwbGljYXRpb24sIHlvdSBtaWdodCB3YW50IHRvIHVzZQotanVzdCB0aGUgbWVtb3J5LXRvLW1lbW9yeSBmdW5jdGlvbnMuICBZb3UgY2FuIGRvIHRoaXMKLWNvbnZlbmllbnRseSBieSBjb21waWxpbmcgdGhlIGxpYnJhcnkgd2l0aCBwcmVwcm9jZXNzb3Igc3ltYm9sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX05PX1NURElPPC9jb2RlPiBkZWZpbmVkLiAgRG9pbmcgdGhpcwotZ2l2ZXMgeW91IGEgbGlicmFyeSBjb250YWluaW5nIG9ubHkgdGhlIGZvbGxvd2luZyBlaWdodAotZnVuY3Rpb25zOjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3NJbml0PC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6Q29tcHJlc3M8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpDb21wcmVzc0VuZDwvY29kZT4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWjJfYnpEZWNvbXByZXNzPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6RGVjb21wcmVzc0VuZDwvY29kZT4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvZGU+PC9wPgotPHA+V2hlbiBjb21waWxlZCBsaWtlIHRoaXMsIGFsbCBmdW5jdGlvbnMgd2lsbCBpZ25vcmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dmVyYm9zaXR5PC9jb2RlPiBzZXR0aW5ncy48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImNyaXRpY2FsLWVycm9yIj48L2E+My43LjIuoENyaXRpY2FsIGVycm9yIGhhbmRsaW5nPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGliYnppcDI8L2NvZGU+IGNvbnRhaW5zIGEgbnVtYmVyCi1vZiBpbnRlcm5hbCBhc3NlcnRpb24gY2hlY2tzIHdoaWNoIHNob3VsZCwgbmVlZGxlc3MgdG8gc2F5LCBuZXZlcgotYmUgYWN0aXZhdGVkLiAgTmV2ZXJ0aGVsZXNzLCBpZiBhbiBhc3NlcnRpb24gc2hvdWxkIGZhaWwsCi1iZWhhdmlvdXIgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgbGlicmFyeSB3YXMgY29tcGlsZWQgd2l0aAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9OT19TVERJTzwvY29kZT4gc2V0LjwvcD4KLTxwPkZvciBhIG5vcm1hbCBjb21waWxlLCBhbiBhc3NlcnRpb24gZmFpbHVyZSB5aWVsZHMgdGhlCi1tZXNzYWdlOjwvcD4KLTxkaXYgY2xhc3M9ImJsb2NrcXVvdGUiPjxibG9ja3F1b3RlIGNsYXNzPSJibG9ja3F1b3RlIj4KLTxwPmJ6aXAyL2xpYmJ6aXAyOiBpbnRlcm5hbCBlcnJvciBudW1iZXIgTi48L3A+Ci08cD5UaGlzIGlzIGEgYnVnIGluIGJ6aXAyL2xpYmJ6aXAyLCAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3LgotUGxlYXNlIHJlcG9ydCBpdCB0byBtZSBhdDoganNld2FyZEBiemlwLm9yZy4gIElmIHRoaXMgaGFwcGVuZWQKLXdoZW4geW91IHdlcmUgdXNpbmcgc29tZSBwcm9ncmFtIHdoaWNoIHVzZXMgbGliYnppcDIgYXMgYQotY29tcG9uZW50LCB5b3Ugc2hvdWxkIGFsc28gcmVwb3J0IHRoaXMgYnVnIHRvIHRoZSBhdXRob3IocykKLW9mIHRoYXQgcHJvZ3JhbS4gIFBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byByZXBvcnQgdGhpcyBidWc7Ci10aW1lbHkgYW5kIGFjY3VyYXRlIGJ1ZyByZXBvcnRzIGV2ZW50dWFsbHkgbGVhZCB0byBoaWdoZXIKLXF1YWxpdHkgc29mdHdhcmUuICBUaGFua3MuICBKdWxpYW4gU2V3YXJkLCAxMCBEZWNlbWJlciAyMDA3LgotPC9wPgotPC9ibG9ja3F1b3RlPjwvZGl2PgotPHA+d2hlcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5OPC9jb2RlPiBpcyBzb21lIGVycm9yIGNvZGUKLW51bWJlci4gIElmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+TiA9PSAxMDA3PC9jb2RlPiwgaXQgYWxzbwotcHJpbnRzIHNvbWUgZXh0cmEgdGV4dCBhZHZpc2luZyB0aGUgcmVhZGVyIHRoYXQgdW5yZWxpYWJsZSBtZW1vcnkKLWlzIG9mdGVuIGFzc29jaWF0ZWQgd2l0aCBpbnRlcm5hbCBlcnJvciAxMDA3LiAoVGhpcyBpcyBhCi1mcmVxdWVudGx5LW9ic2VydmVkLXBoZW5vbWVub24gd2l0aCB2ZXJzaW9ucyAxLjAuMC8xLjAuMSkuPC9wPgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5leGl0KDMpPC9jb2RlPiBpcyB0aGVuCi1jYWxsZWQuPC9wPgotPHA+Rm9yIGEgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5zdGRpbzwvY29kZT4tZnJlZSBsaWJyYXJ5LAotYXNzZXJ0aW9uIGZhaWx1cmVzIHJlc3VsdCBpbiBhIGNhbGwgdG8gYSBmdW5jdGlvbiBkZWNsYXJlZAotYXM6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmV4dGVybiB2b2lkIGJ6X2ludGVybmFsX2Vycm9yICggaW50IGVycmNvZGUgKTs8L3ByZT4KLTxwPlRoZSByZWxldmFudCBjb2RlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci4gIFlvdSBzaG91bGQKLXN1cHBseSBzdWNoIGEgZnVuY3Rpb24uPC9wPgotPHA+SW4gZWl0aGVyIGNhc2UsIG9uY2UgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaGFzIG9jY3VycmVkLCBhbnkKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Ynpfc3RyZWFtPC9jb2RlPiByZWNvcmRzIGludm9sdmVkIGNhbgotYmUgcmVnYXJkZWQgYXMgaW52YWxpZC4gIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gcmVzdW1lIG5vcm1hbAotb3BlcmF0aW9uIHdpdGggdGhlbS48L3A+Ci08cD5Zb3UgbWF5LCBvZiBjb3Vyc2UsIGNoYW5nZSBjcml0aWNhbCBlcnJvciBoYW5kbGluZyB0byBzdWl0Ci15b3VyIG5lZWRzLiAgQXMgSSBzYWlkIGFib3ZlLCBjcml0aWNhbCBlcnJvcnMgaW5kaWNhdGUgYnVncyBpbgotdGhlIGxpYnJhcnkgYW5kIHNob3VsZCBub3Qgb2NjdXIuICBBbGwgIm5vcm1hbCIgZXJyb3Igc2l0dWF0aW9ucwotYXJlIGluZGljYXRlZCB2aWEgZXJyb3IgcmV0dXJuIGNvZGVzIGZyb20gZnVuY3Rpb25zLCBhbmQgY2FuIGJlCi1yZWNvdmVyZWQgZnJvbS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJ3aW4tZGxsIj48L2E+My44LqBNYWtpbmcgYSBXaW5kb3dzIERMTDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5FdmVyeXRoaW5nIHJlbGF0ZWQgdG8gV2luZG93cyBoYXMgYmVlbiBjb250cmlidXRlZCBieQotWW9zaGlva2EgVHN1bmVvCi0oPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50c3VuZW9AcnIuaWlqNHUub3IuanA8L2NvZGU+KSwgc28KLXlvdSBzaG91bGQgc2VuZCB5b3VyIHF1ZXJpZXMgdG8gaGltIChidXQgcGVyaGFwcyBDYzogbWUsCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmpzZXdhcmRAYnppcC5vcmc8L2NvZGU+KS48L3A+Ci08cD5NeSB2YWd1ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdG8gZG8gaXM6IHVzaW5nIFZpc3VhbCBDKysKLTUuMCwgb3BlbiB0aGUgcHJvamVjdCBmaWxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmJ6Mi5kc3A8L2NvZGU+LCBhbmQgYnVpbGQuICBUaGF0J3MKLWFsbC48L3A+Ci08cD5JZiB5b3UgY2FuJ3Qgb3BlbiB0aGUgcHJvamVjdCBmaWxlIGZvciBzb21lIHJlYXNvbiwgbWFrZSBhCi1uZXcgb25lLCBuYW1pbmcgdGhlc2UgZmlsZXM6Ci08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJsb2Nrc29ydC5jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpsaWIuYzwvY29kZT4sCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmNvbXByZXNzLmM8L2NvZGU+LAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5jcmN0YWJsZS5jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGVjb21wcmVzcy5jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+aHVmZm1hbi5jPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cmFuZHRhYmxlLmM8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiejIuZGVmPC9jb2RlPi4gIFlvdSB3aWxsIGFsc28gbmVlZAotdG8gbmFtZSB0aGUgaGVhZGVyIGZpbGVzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnpsaWIuaDwvY29kZT4KLWFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6bGliX3ByaXZhdGUuaDwvY29kZT4uPC9wPgotPHA+SWYgeW91IGRvbid0IHVzZSBWQysrLCB5b3UgbWF5IG5lZWQgdG8gZGVmaW5lIHRoZQotcHJvcHJvY2Vzc29yIHN5bWJvbAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5fV0lOMzI8L2NvZGU+LjwvcD4KLTxwPkZpbmFsbHksIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZGxsdGVzdC5jPC9jb2RlPiBpcyBhCi1zYW1wbGUgcHJvZ3JhbSB1c2luZyB0aGUgRExMLiAgSXQgaGFzIGEgcHJvamVjdCBmaWxlLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5kbGx0ZXN0LmRzcDwvY29kZT4uPC9wPgotPHA+SWYgeW91IGp1c3Qgd2FudCBhIG1ha2VmaWxlIGZvciBWaXN1YWwgQywgaGF2ZSBhIGxvb2sgYXQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bWFrZWZpbGUubXNjPC9jb2RlPi48L3A+Ci08cD5CZSBhd2FyZSB0aGF0IGlmIHlvdSBjb21waWxlCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBpdHNlbGYgb24gV2luMzIsIHlvdSBtdXN0Ci1zZXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9VTklYPC9jb2RlPiB0byAwIGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5CWl9MQ0NXSU4zMjwvY29kZT4gdG8gMSwgaW4gdGhlIGZpbGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDIuYzwvY29kZT4sIGJlZm9yZSBjb21waWxpbmcuCi1PdGhlcndpc2UgdGhlIHJlc3VsdGluZyBiaW5hcnkgd29uJ3Qgd29yayBjb3JyZWN0bHkuPC9wPgotPHA+SSBoYXZlbid0IHRyaWVkIGFueSBvZiB0aGlzIHN0dWZmIG15c2VsZiwgYnV0IGl0IGFsbCBsb29rcwotcGxhdXNpYmxlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9Im1pc2MiPjwvYT40LqBNaXNjZWxsYW5lYTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ0b2MiPgotPHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPgotPGRsPgotPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0iI2xpbWl0cyI+NC4xLiBMaW1pdGF0aW9ucyBvZiB0aGUgY29tcHJlc3NlZCBmaWxlIGZvcm1hdDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNwb3J0LWlzc3VlcyI+NC4yLiBQb3J0YWJpbGl0eSBpc3N1ZXM8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9InNlY3QxIj48YSBocmVmPSIjYnVncyI+NC4zLiBSZXBvcnRpbmcgYnVnczwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNwYWNrYWdlIj40LjQuIERpZCB5b3UgZ2V0IHRoZSByaWdodCBwYWNrYWdlPzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9IiNyZWFkaW5nIj40LjUuIEZ1cnRoZXIgUmVhZGluZzwvYT48L3NwYW4+PC9kdD4KLTwvZGw+Ci08L2Rpdj4KLTxwPlRoZXNlIGFyZSBqdXN0IHNvbWUgcmFuZG9tIHRob3VnaHRzIG9mIG1pbmUuICBZb3VyIG1pbGVhZ2UKLW1heSB2YXJ5LjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0ibGltaXRzIj48L2E+NC4xLqBMaW1pdGF0aW9ucyBvZiB0aGUgY29tcHJlc3NlZCBmaWxlIGZvcm1hdDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyLTEuMC5YPC9jb2RlPiwKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+MC45LjU8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4wLjkuMDwvY29kZT4gdXNlIGV4YWN0bHkgdGhlIHNhbWUgZmlsZQotZm9ybWF0IGFzIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMi0wLjE8L2NvZGU+LiAgVGhpcyBkZWNpc2lvbiB3YXMKLW1hZGUgaW4gdGhlIGludGVyZXN0cyBvZiBzdGFiaWxpdHkuICBDcmVhdGluZyB5ZXQgYW5vdGhlcgotaW5jb21wYXRpYmxlIGNvbXByZXNzZWQgZmlsZSBmb3JtYXQgd291bGQgY3JlYXRlIGZ1cnRoZXIKLWNvbmZ1c2lvbiBhbmQgZGlzcnVwdGlvbiBmb3IgdXNlcnMuPC9wPgotPHA+TmV2ZXJ0aGVsZXNzLCB0aGlzIGlzIG5vdCBhIHBhaW5sZXNzIGRlY2lzaW9uLiAgRGV2ZWxvcG1lbnQKLXdvcmsgc2luY2UgdGhlIHJlbGVhc2Ugb2YKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDItMC4xPC9jb2RlPiBpbiBBdWd1c3QgMTk5NyBoYXMKLXNob3duIGNvbXBsZXhpdGllcyBpbiB0aGUgZmlsZSBmb3JtYXQgd2hpY2ggc2xvdyBkb3duCi1kZWNvbXByZXNzaW9uIGFuZCwgaW4gcmV0cm9zcGVjdCwgYXJlIHVubmVjZXNzYXJ5LiAgVGhlc2UKLWFyZTo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJidWxsZXQiPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPlRoZSBydW4tbGVuZ3RoIGVuY29kZXIsIHdoaWNoIGlzIHRoZSBmaXJzdCBvZiB0aGUKLSAgIGNvbXByZXNzaW9uIHRyYW5zZm9ybWF0aW9ucywgaXMgZW50aXJlbHkgaXJyZWxldmFudC4gIFRoZQotICAgb3JpZ2luYWwgcHVycG9zZSB3YXMgdG8gcHJvdGVjdCB0aGUgc29ydGluZyBhbGdvcml0aG0gZnJvbSB0aGUKLSAgIHZlcnkgd29yc3QgY2FzZSBpbnB1dDogYSBzdHJpbmcgb2YgcmVwZWF0ZWQgc3ltYm9scy4gIEJ1dAotICAgYWxnb3JpdGhtIHN0ZXBzIFE2YSBhbmQgUTZiIGluIHRoZSBvcmlnaW5hbCBCdXJyb3dzLVdoZWVsZXIKLSAgIHRlY2huaWNhbCByZXBvcnQgKFNSQy0xMjQpIHNob3cgaG93IHJlcGVhdHMgY2FuIGJlIGhhbmRsZWQKLSAgIHdpdGhvdXQgZGlmZmljdWx0eSBpbiBibG9jayBzb3J0aW5nLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPgotPHA+VGhlIHJhbmRvbWlzYXRpb24gbWVjaGFuaXNtIGRvZXNuJ3QgcmVhbGx5IG5lZWQgdG8gYmUKLSAgIHRoZXJlLiAgVWRpIE1hbmJlciBhbmQgR2VuZSBNeWVycyBwdWJsaXNoZWQgYSBzdWZmaXggYXJyYXkKLSAgIGNvbnN0cnVjdGlvbiBhbGdvcml0aG0gYSBmZXcgeWVhcnMgYmFjaywgd2hpY2ggY2FuIGJlIGVtcGxveWVkCi0gICB0byBzb3J0IGFueSBibG9jaywgbm8gbWF0dGVyIGhvdyByZXBldGl0aXZlLCBpbiBPKE4gbG9nIE4pCi0gICB0aW1lLiAgU3Vic2VxdWVudCB3b3JrIGJ5IEt1bmloaWtvIFNhZGFrYW5lIGhhcyBwcm9kdWNlZCBhCi0gICBkZXJpdmF0aXZlIE8oTiAobG9nIE4pXjIpIGFsZ29yaXRobSB3aGljaCB1c3VhbGx5IG91dHBlcmZvcm1zCi0gICB0aGUgTWFuYmVyLU15ZXJzIGFsZ29yaXRobS48L3A+Ci08cD5JIGNvdWxkIGhhdmUgY2hhbmdlZCB0byBTYWRha2FuZSdzIGFsZ29yaXRobSwgYnV0IEkgZmluZAotICAgaXQgdG8gYmUgc2xvd2VyIHRoYW4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4ncwotICAgZXhpc3RpbmcgYWxnb3JpdGhtIGZvciBtb3N0IGlucHV0cywgYW5kIHRoZSByYW5kb21pc2F0aW9uCi0gICBtZWNoYW5pc20gcHJvdGVjdHMgYWRlcXVhdGVseSBhZ2FpbnN0IGJhZCBjYXNlcy4gIEkgZGlkbid0Ci0gICB0aGluayBpdCB3YXMgYSBnb29kIHRyYWRlb2ZmIHRvIG1ha2UuICBQYXJ0bHkgdGhpcyBpcyBkdWUgdG8KLSAgIHRoZSBmYWN0IHRoYXQgSSB3YXMgbm90IGZsb29kZWQgd2l0aCBlbWFpbCBjb21wbGFpbnRzIGFib3V0Ci0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyLTAuMTwvY29kZT4ncyBwZXJmb3JtYW5jZSBvbgotICAgcmVwZXRpdGl2ZSBkYXRhLCBzbyBwZXJoYXBzIGl0IGlzbid0IGEgcHJvYmxlbSBmb3IgcmVhbAotICAgaW5wdXRzLjwvcD4KLTxwPlByb2JhYmx5IHRoZSBiZXN0IGxvbmctdGVybSBzb2x1dGlvbiwgYW5kIHRoZSBvbmUgSSBoYXZlCi0gICBpbmNvcnBvcmF0ZWQgaW50byAwLjkuNSBhbmQgYWJvdmUsIGlzIHRvIHVzZSB0aGUgZXhpc3RpbmcKLSAgIHNvcnRpbmcgYWxnb3JpdGhtIGluaXRpYWxseSwgYW5kIGZhbGwgYmFjayB0byBhIE8oTiAobG9nIE4pXjIpCi0gICBhbGdvcml0aG0gaWYgdGhlIHN0YW5kYXJkIGFsZ29yaXRobSBnZXRzIGludG8KLSAgIGRpZmZpY3VsdGllcy48L3A+Ci08L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPlRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0IHdhcyBuZXZlciBkZXNpZ25lZCB0byBiZQotICAgaGFuZGxlZCBieSBhIGxpYnJhcnksIGFuZCBJIGhhdmUgaGFkIHRvIGp1bXAgdGhvdWdoIHNvbWUgaG9vcHMKLSAgIHRvIHByb2R1Y2UgYW4gZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mIGRlY29tcHJlc3Npb24uICBJdCdzCi0gICBhIGJpdCBoYWlyeS4gIFRyeSBwYXNzaW5nCi0gICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmRlY29tcHJlc3MuYzwvY29kZT4gdGhyb3VnaCB0aGUgQwotICAgcHJlcHJvY2Vzc29yIGFuZCB5b3UnbGwgc2VlIHdoYXQgSSBtZWFuLiAgTXVjaCBvZiB0aGlzCi0gICBjb21wbGV4aXR5IGNvdWxkIGhhdmUgYmVlbiBhdm9pZGVkIGlmIHRoZSBjb21wcmVzc2VkIHNpemUgb2YKLSAgIGVhY2ggYmxvY2sgb2YgZGF0YSB3YXMgcmVjb3JkZWQgaW4gdGhlIGRhdGEgc3RyZWFtLjwvcD48L2xpPgotPGxpIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2MiPjxwPkFuIEFkbGVyLTMyIGNoZWNrc3VtLCByYXRoZXIgdGhhbiBhIENSQzMyIGNoZWNrc3VtLAotICAgd291bGQgYmUgZmFzdGVyIHRvIGNvbXB1dGUuPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+SXQgd291bGQgYmUgZmFpciB0byBzYXkgdGhhdCB0aGUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGZvcm1hdCB3YXMgZnJvemVuIGJlZm9yZSBJCi1wcm9wZXJseSBhbmQgZnVsbHkgdW5kZXJzdG9vZCB0aGUgcGVyZm9ybWFuY2UgY29uc2VxdWVuY2VzIG9mCi1kb2luZyBzby48L3A+Ci08cD5JbXByb3ZlbWVudHMgd2hpY2ggSSB3YXMgYWJsZSB0byBpbmNvcnBvcmF0ZSBpbnRvIDAuOS4wLAotZGVzcGl0ZSB1c2luZyB0aGUgc2FtZSBmaWxlIGZvcm1hdCwgYXJlOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImJ1bGxldCI+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+U2luZ2xlIGFycmF5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnZlcnNlIEJXVC4gIFRoaXMKLSAgc2lnbmlmaWNhbnRseSBzcGVlZHMgdXAgZGVjb21wcmVzc2lvbiwgcHJlc3VtYWJseSBiZWNhdXNlIGl0Ci0gIHJlZHVjZXMgdGhlIG51bWJlciBvZiBjYWNoZSBtaXNzZXMuPC9wPjwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+RmFzdGVyIGludmVyc2UgTVRGIHRyYW5zZm9ybSBmb3IgbGFyZ2UgTVRGIHZhbHVlcy4KLSAgVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgbm90aW9uIG9mIHNsaWRpbmcgYmxvY2tzCi0gIG9mIHZhbHVlcy48L3A+PC9saT4KLTxsaSBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjIj48cD48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyLTAuOS4wPC9jb2RlPiBub3cgcmVhZHMKLSAgYW5kIHdyaXRlcyBmaWxlcyB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnJlYWQ8L2NvZGU+Ci0gIGFuZCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZ3cml0ZTwvY29kZT47IHZlcnNpb24gMC4xIHVzZWQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5wdXRjPC9jb2RlPiBhbmQKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5nZXRjPC9jb2RlPi4gIER1aCEgIFdlbGwsIHlvdSBsaXZlCi0gIGFuZCBsZWFybi48L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD5GdXJ0aGVyIGFoZWFkLCBpdCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8gZG8gcmFuZG9tCi1hY2Nlc3MgaW50byBmaWxlcy4gIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgY2FyZWZ1bCBkZXNpZ24gb2YKLWNvbXByZXNzZWQgZmlsZSBmb3JtYXRzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJwb3J0LWlzc3VlcyI+PC9hPjQuMi6gUG9ydGFiaWxpdHkgaXNzdWVzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPkFmdGVyIHNvbWUgY29uc2lkZXJhdGlvbiwgSSBoYXZlIGRlY2lkZWQgbm90IHRvIHVzZSBHTlUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXV0b2NvbmY8L2NvZGU+IHRvIGNvbmZpZ3VyZSAwLjkuNSBvcgotMS4wLjwvcD4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXV0b2NvbmY8L2NvZGU+LCBhZG1pcmFibGUgYW5kCi13b25kZXJmdWwgdGhvdWdoIGl0IGlzLCBtYWlubHkgYXNzaXN0cyB3aXRoIHBvcnRhYmlsaXR5IHByb2JsZW1zCi1iZXR3ZWVuIFVuaXgtbGlrZSBwbGF0Zm9ybXMuICBCdXQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGRvZXNuJ3QgaGF2ZSBtdWNoIGluIHRoZQotd2F5IG9mIHBvcnRhYmlsaXR5IHByb2JsZW1zIG9uIFVuaXg7IG1vc3Qgb2YgdGhlIGRpZmZpY3VsdGllcwotYXBwZWFyIHdoZW4gcG9ydGluZyB0byB0aGUgTWFjLCBvciB0byBNaWNyb3NvZnQncyBvcGVyYXRpbmcKLXN5c3RlbXMuICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmF1dG9jb25mPC9jb2RlPiBkb2Vzbid0IGhlbHAKLWluIHRob3NlIGNhc2VzLCBhbmQgYnJpbmdzIGluIGEgd2hvbGUgbG9hZCBvZiBuZXcKLWNvbXBsZXhpdHkuPC9wPgotPHA+TW9zdCBwZW9wbGUgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGUgbGlicmFyeSBhbmQKLXByb2dyYW0gdW5kZXIgVW5peCBzdHJhaWdodCBvdXQtb2YtdGhlLWJveCwgc28gdG8gc3BlYWssCi1lc3BlY2lhbGx5IGlmIHlvdSBoYXZlIGEgdmVyc2lvbiBvZiBHTlUgQyBhdmFpbGFibGUuPC9wPgotPHA+VGhlcmUgYXJlIGEgY291cGxlIG9mCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPl9faW5saW5lX188L2NvZGU+IGRpcmVjdGl2ZXMgaW4gdGhlCi1jb2RlLiAgR05VIEMgKDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Z2NjPC9jb2RlPikgc2hvdWxkIGJlCi1hYmxlIHRvIGhhbmRsZSB0aGVtLiAgSWYgeW91J3JlIG5vdCB1c2luZyBHTlUgQywgeW91ciBDIGNvbXBpbGVyCi1zaG91bGRuJ3Qgc2VlIHRoZW0gYXQgYWxsLiAgSWYgeW91ciBjb21waWxlciBkb2VzLCBmb3Igc29tZQotcmVhc29uLCBzZWUgdGhlbSBhbmQgZG9lc24ndCBsaWtlIHRoZW0sIGp1c3QKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+I2RlZmluZTwvY29kZT4KLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+X19pbmxpbmVfXzwvY29kZT4gdG8gYmUKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LyogKi88L2NvZGU+LiAgT25lIGVhc3kgd2F5IHRvIGRvIHRoaXMKLWlzIHRvIGNvbXBpbGUgd2l0aCB0aGUgZmxhZwotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tRF9faW5saW5lX189PC9jb2RlPiwgd2hpY2ggc2hvdWxkIGJlCi11bmRlcnN0b29kIGJ5IG1vc3QgVW5peCBjb21waWxlcnMuPC9wPgotPHA+SWYgeW91IHN0aWxsIGhhdmUgZGlmZmljdWx0aWVzLCB0cnkgY29tcGlsaW5nIHdpdGggdGhlCi1tYWNybyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkJaX1NUUklDVF9BTlNJPC9jb2RlPiBkZWZpbmVkLgotVGhpcyBzaG91bGQgZW5hYmxlIHlvdSB0byBidWlsZCB0aGUgbGlicmFyeSBpbiBhIHN0cmljdGx5IEFOU0kKLWNvbXBsaWFudCBlbnZpcm9ubWVudC4gIEJ1aWxkaW5nIHRoZSBwcm9ncmFtIGl0c2VsZiBsaWtlIHRoaXMgaXMKLWRhbmdlcm91cyBhbmQgbm90IHN1cHBvcnRlZCwgc2luY2UgeW91IHJlbW92ZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4ncyBjaGVja3MgYWdhaW5zdAotY29tcHJlc3NpbmcgZGlyZWN0b3JpZXMsIHN5bWJvbGljIGxpbmtzLCBkZXZpY2VzLCBhbmQgb3RoZXIKLW5vdC1yZWFsbHktYS1maWxlIGVudGl0aWVzLiAgVGhpcyBjb3VsZCBjYXVzZSBmaWxlc3lzdGVtCi1jb3JydXB0aW9uITwvcD4KLTxwPk9uZSBvdGhlciB0aGluZzogaWYgeW91IGNyZWF0ZSBhCi08Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBiaW5hcnkgZm9yIHB1YmxpYyBkaXN0cmlidXRpb24sCi1wbGVhc2UgY29uc2lkZXIgbGlua2luZyBpdCBzdGF0aWNhbGx5ICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmdjYwotLXN0YXRpYzwvY29kZT4pLiAgVGhpcyBhdm9pZHMgYWxsIHNvcnRzIG9mIGxpYnJhcnktdmVyc2lvbgotaXNzdWVzIHRoYXQgb3RoZXJzIG1heSBlbmNvdW50ZXIgbGF0ZXIgb24uPC9wPgotPHA+SWYgeW91IGJ1aWxkIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IG9uCi1XaW4zMiwgeW91IG11c3Qgc2V0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfVU5JWDwvY29kZT4gdG8gMAotYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+QlpfTENDV0lOMzI8L2NvZGU+IHRvIDEsIGluIHRoZQotZmlsZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyLmM8L2NvZGU+LCBiZWZvcmUgY29tcGlsaW5nLgotT3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgYmluYXJ5IHdvbid0IHdvcmsgY29ycmVjdGx5LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJidWdzIj48L2E+NC4zLqBSZXBvcnRpbmcgYnVnczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08cD5JIHRyaWVkIHByZXR0eSBoYXJkIHRvIG1ha2Ugc3VyZQotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gaXMgYnVnIGZyZWUsIGJvdGggYnkKLWRlc2lnbiBhbmQgYnkgdGVzdGluZy4gIEhvcGVmdWxseSB5b3UnbGwgbmV2ZXIgbmVlZCB0byByZWFkIHRoaXMKLXNlY3Rpb24gZm9yIHJlYWwuPC9wPgotPHA+TmV2ZXJ0aGVsZXNzLCBpZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiBkaWVzCi13aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0LCBhIGJ1cyBlcnJvciBvciBhbiBpbnRlcm5hbCBhc3NlcnRpb24KLWZhaWx1cmUsIGl0IHdpbGwgYXNrIHlvdSB0byBlbWFpbCBtZSBhIGJ1ZyByZXBvcnQuICBFeHBlcmllbmNlIGZyb20KLXllYXJzIG9mIGZlZWRiYWNrIG9mIGJ6aXAyIHVzZXJzIGluZGljYXRlcyB0aGF0IGFsbW9zdCBhbGwgdGhlc2UKLXByb2JsZW1zIGNhbiBiZSB0cmFjZWQgdG8gZWl0aGVyIGNvbXBpbGVyIGJ1Z3Mgb3IgaGFyZHdhcmUKLXByb2JsZW1zLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImJ1bGxldCI+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+Ci08cD5SZWNvbXBpbGUgdGhlIHByb2dyYW0gd2l0aCBubyBvcHRpbWlzYXRpb24sIGFuZAotICBzZWUgaWYgaXQgd29ya3MuICBBbmQvb3IgdHJ5IGEgZGlmZmVyZW50IGNvbXBpbGVyLiAgSSBoZWFyZCBhbGwKLSAgc29ydHMgb2Ygc3RvcmllcyBhYm91dCB2YXJpb3VzIGZsYXZvdXJzIG9mIEdOVSBDIChhbmQgb3RoZXIKLSAgY29tcGlsZXJzKSBnZW5lcmF0aW5nIGJhZCBjb2RlIGZvcgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiwgYW5kIEkndmUgcnVuIGFjcm9zcyB0d28KLSAgc3VjaCBleGFtcGxlcyBteXNlbGYuPC9wPgotPHA+Mi43LlggdmVyc2lvbnMgb2YgR05VIEMgYXJlIGtub3duIHRvIGdlbmVyYXRlIGJhZCBjb2RlCi0gIGZyb20gdGltZSB0byB0aW1lLCBhdCBoaWdoIG9wdGltaXNhdGlvbiBsZXZlbHMuICBJZiB5b3UgZ2V0Ci0gIHByb2JsZW1zLCB0cnkgdXNpbmcgdGhlIGZsYWdzCi0gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LU8yPC9jb2RlPgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1mb21pdC1mcmFtZS1wb2ludGVyPC9jb2RlPgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi1mbm8tc3RyZW5ndGgtcmVkdWNlPC9jb2RlPi4gIFlvdQotICBzaG91bGQgc3BlY2lmaWNhbGx5IDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm5vdDwvZW0+PC9zcGFuPiB1c2UKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tZnVucm9sbC1sb29wczwvY29kZT4uPC9wPgotPHA+WW91IG1heSBub3RpY2UgdGhhdCB0aGUgTWFrZWZpbGUgcnVucyBzaXggdGVzdHMgYXMgcGFydAotICBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4gIElmIHRoZSBwcm9ncmFtIHBhc3NlcyBhbGwgb2YgdGhlc2UsIGl0J3MKLSAgYSBwcmV0dHkgZ29vZCAoYnV0IG5vdCAxMDAlKSBpbmRpY2F0aW9uIHRoYXQgdGhlIGNvbXBpbGVyIGhhcwotICBkb25lIGl0cyBqb2IgY29ycmVjdGx5LjwvcD4KLTwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+Ci08cD5JZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPgotICBjcmFzaGVzIHJhbmRvbWx5LCBhbmQgdGhlIGNyYXNoZXMgYXJlIG5vdCByZXBlYXRhYmxlLCB5b3UgbWF5Ci0gIGhhdmUgYSBmbGFreSBtZW1vcnkgc3Vic3lzdGVtLgotICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmJ6aXAyPC9jb2RlPiByZWFsbHkgaGFtbWVycyB5b3VyCi0gIG1lbW9yeSBoaWVyYXJjaHksIGFuZCBpZiBpdCdzIGEgYml0IG1hcmdpbmFsLCB5b3UgbWF5IGdldCB0aGVzZQotICBwcm9ibGVtcy4gIERpdHRvIGlmIHlvdXIgZGlzayBvciBJL08gc3Vic3lzdGVtIGlzIHNsb3dseQotICBmYWlsaW5nLiAgWXVwLCB0aGlzIHJlYWxseSBkb2VzIGhhcHBlbi48L3A+Ci08cD5UcnkgdXNpbmcgYSBkaWZmZXJlbnQgbWFjaGluZSBvZiB0aGUgc2FtZSB0eXBlLCBhbmQgc2VlCi0gIGlmIHlvdSBjYW4gcmVwZWF0IHRoZSBwcm9ibGVtLjwvcD4KLTwvbGk+Ci08bGkgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYyI+PHA+VGhpcyBpc24ndCByZWFsbHkgYSBidWcsIGJ1dCAuLi4gSWYKLSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gdGVsbHMgeW91IHlvdXIgZmlsZSBpcwotICBjb3JydXB0ZWQgb24gZGVjb21wcmVzc2lvbiwgYW5kIHlvdSBvYnRhaW5lZCB0aGUgZmlsZSB2aWEgRlRQLAotICB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgeW91IGZvcmdvdCB0byB0ZWxsIEZUUCB0byBkbyBhCi0gIGJpbmFyeSBtb2RlIHRyYW5zZmVyLiAgVGhhdCBhYnNvbHV0ZWx5IHdpbGwgY2F1c2UgdGhlIGZpbGUgdG8KLSAgYmUgbm9uLWRlY29tcHJlc3NpYmxlLiAgWW91J2xsIGhhdmUgdG8gdHJhbnNmZXIgaXQKLSAgYWdhaW4uPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+SWYgeW91J3ZlIGluY29ycG9yYXRlZAotPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5saWJiemlwMjwvY29kZT4gaW50byB5b3VyIG93biBwcm9ncmFtCi1hbmQgYXJlIGdldHRpbmcgcHJvYmxlbXMsIHBsZWFzZSwgcGxlYXNlLCBwbGVhc2UsIGNoZWNrIHRoYXQgdGhlCi1wYXJhbWV0ZXJzIHlvdSBhcmUgcGFzc2luZyBpbiBjYWxscyB0byB0aGUgbGlicmFyeSwgYXJlIGNvcnJlY3QsCi1hbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBpcyBhbGxvd2FibGUuCi1JIGhhdmUgdHJpZWQgdG8gbWFrZSB0aGUgbGlicmFyeSByb2J1c3QgYWdhaW5zdCBzdWNoIHByb2JsZW1zLAotYnV0IEknbSBzdXJlIEkgaGF2ZW4ndCBzdWNjZWVkZWQuPC9wPgotPHA+RmluYWxseSwgaWYgdGhlIGFib3ZlIGNvbW1lbnRzIGRvbid0IGhlbHAsIHlvdSdsbCBoYXZlIHRvCi1zZW5kIG1lIGEgYnVnIHJlcG9ydC4gIE5vdywgaXQncyBqdXN0IGFtYXppbmcgaG93IG1hbnkgcGVvcGxlCi13aWxsIHNlbmQgbWUgYSBidWcgcmVwb3J0IHNheWluZyBzb21ldGhpbmcgbGlrZTo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+YnppcDIgY3Jhc2hlZCB3aXRoIHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBteSBtYWNoaW5lPC9wcmU+Ci08cD5hbmQgYWJzb2x1dGVseSBub3RoaW5nIGVsc2UuICBOZWVkbGVzcyB0byBzYXksIGEgc3VjaCBhCi1yZXBvcnQgaXMgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dG90YWxseSwgdXR0ZXJseSwgY29tcGxldGVseSBhbmQKLWNvbXByZWhlbnNpdmVseSAxMDAlIHVzZWxlc3M7IGEgd2FzdGUgb2YgeW91ciB0aW1lLCBteSB0aW1lLCBhbmQKLW5ldCBiYW5kd2lkdGg8L2VtPjwvc3Bhbj4uICBXaXRoIG5vIGRldGFpbHMgYXQgYWxsLCB0aGVyZSdzIG5vIHdheQotSSBjYW4gcG9zc2libHkgYmVnaW4gdG8gZmlndXJlIG91dCB3aGF0IHRoZSBwcm9ibGVtIGlzLjwvcD4KLTxwPlRoZSBydWxlcyBvZiB0aGUgZ2FtZSBhcmU6IGZhY3RzLCBmYWN0cywgZmFjdHMuICBEb24ndCBvbWl0Ci10aGVtIGJlY2F1c2UgIm9oLCB0aGV5IHdvbid0IGJlIHJlbGV2YW50Ii4gIEF0IHRoZSBiYXJlCi1taW5pbXVtOjwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5NYWNoaW5lIHR5cGUuICBPcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24uICAKLUV4YWN0IHZlcnNpb24gb2YgYnppcDIgKGRvIGJ6aXAyIC1WKS4gIAotRXhhY3QgdmVyc2lvbiBvZiB0aGUgY29tcGlsZXIgdXNlZC4gIAotRmxhZ3MgcGFzc2VkIHRvIHRoZSBjb21waWxlci48L3ByZT4KLTxwPkhvd2V2ZXIsIHRoZSBtb3N0IGltcG9ydGFudCBzaW5nbGUgdGhpbmcgdGhhdCB3aWxsIGhlbHAgbWUKLWlzIHRoZSBmaWxlIHRoYXQgeW91IHdlcmUgdHJ5aW5nIHRvIGNvbXByZXNzIG9yIGRlY29tcHJlc3MgYXQgdGhlCi10aW1lIHRoZSBwcm9ibGVtIGhhcHBlbmVkLiAgV2l0aG91dCB0aGF0LCBteSBhYmlsaXR5IHRvIGRvCi1hbnl0aGluZyBtb3JlIHRoYW4gc3BlY3VsYXRlIGFib3V0IHRoZSBjYXVzZSwgaXMgbGltaXRlZC48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InNlY3QxIiBsYW5nPSJlbiI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgotPGEgbmFtZT0icGFja2FnZSI+PC9hPjQuNC6gRGlkIHlvdSBnZXQgdGhlIHJpZ2h0IHBhY2thZ2U/PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+IGlzIGEgcmVzb3VyY2UgaG9nLgotSXQgc29ha3MgdXAgbGFyZ2UgYW1vdW50cyBvZiBDUFUgY3ljbGVzIGFuZCBtZW1vcnkuICBBbHNvLCBpdAotZ2l2ZXMgdmVyeSBsYXJnZSBsYXRlbmNpZXMuICBJbiB0aGUgd29yc3QgY2FzZSwgeW91IGNhbiBmZWVkIG1hbnkKLW1lZ2FieXRlcyBvZiB1bmNvbXByZXNzZWQgZGF0YSBpbnRvIHRoZSBsaWJyYXJ5IGJlZm9yZSBnZXR0aW5nCi1hbnkgY29tcHJlc3NlZCBvdXRwdXQsIHNvIHRoaXMgcHJvYmFibHkgcnVsZXMgb3V0IGFwcGxpY2F0aW9ucwotcmVxdWlyaW5nIGludGVyYWN0aXZlIGJlaGF2aW91ci48L3A+Ci08cD5UaGVzZSBhcmVuJ3QgZmF1bHRzIG9mIG15IGltcGxlbWVudGF0aW9uLCBJIGhvcGUsIGJ1dCBtb3JlCi1hbiBpbnRyaW5zaWMgcHJvcGVydHkgb2YgdGhlIEJ1cnJvd3MtV2hlZWxlciB0cmFuc2Zvcm0KLSh1bmZvcnR1bmF0ZWx5KS4gIE1heWJlIHRoaXMgaXNuJ3Qgd2hhdCB5b3Ugd2FudC48L3A+Ci08cD5JZiB5b3Ugd2FudCBhIGNvbXByZXNzb3IgYW5kL29yIGxpYnJhcnkgd2hpY2ggaXMgZmFzdGVyLAotdXNlcyBsZXNzIG1lbW9yeSBidXQgZ2V0cyBwcmV0dHkgZ29vZCBjb21wcmVzc2lvbiwgYW5kIGhhcwotbWluaW1hbCBsYXRlbmN5LCBjb25zaWRlciBKZWFuLWxvdXAgR2FpbGx5J3MgYW5kIE1hcmsgQWRsZXIncwotd29yaywgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij56bGliLTEuMi4xPC9jb2RlPiBhbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Z3ppcC0xLjIuNDwvY29kZT4uICBMb29rIGZvciB0aGVtIGF0IAotPGEgaHJlZj0iaHR0cDovL3d3dy56bGliLm9yZyIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LnpsaWIub3JnPC9hPiBhbmQgCi08YSBocmVmPSJodHRwOi8vd3d3Lmd6aXAub3JnIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuZ3ppcC5vcmc8L2E+Ci1yZXNwZWN0aXZlbHkuPC9wPgotPHA+Rm9yIHNvbWV0aGluZyBmYXN0ZXIgYW5kIGxpZ2h0ZXIgc3RpbGwsIHlvdSBtaWdodCB0cnkgTWFya3VzIEYKLVggSiBPYmVyaHVtZXIncyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkxaTzwvY29kZT4gcmVhbC10aW1lCi1jb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnksIGF0IAotPGEgaHJlZj0iaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2U8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0ic2VjdDEiIGxhbmc9ImVuIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Ci08YSBuYW1lPSJyZWFkaW5nIj48L2E+NC41LqBGdXJ0aGVyIFJlYWRpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPHA+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5iemlwMjwvY29kZT4gaXMgbm90IHJlc2VhcmNoCi13b3JrLCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2Vzbid0IHByZXNlbnQgYW55IG5ldyBpZGVhcy4KLVJhdGhlciwgaXQncyBhbiBlbmdpbmVlcmluZyBleGVyY2lzZSBiYXNlZCBvbiBleGlzdGluZwotaWRlYXMuPC9wPgotPHA+Rm91ciBkb2N1bWVudHMgZGVzY3JpYmUgZXNzZW50aWFsbHkgYWxsIHRoZSBpZGVhcyBiZWhpbmQKLTxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YnppcDI8L2NvZGU+OjwvcD4KLTxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPk1pY2hhZWygQnVycm93c6BhbmSgRC6gSi6gV2hlZWxlcjo8YnI+Ci2goCJBoGJsb2NrLXNvcnRpbmegbG9zc2xlc3OgZGF0YaBjb21wcmVzc2lvbqBhbGdvcml0aG0iPGJyPgotoKCgMTB0aKBNYXmgMTk5NC6gPGJyPgotoKCgRGlnaXRhbKBTUkOgUmVzZWFyY2igUmVwb3J0oDEyNC48YnI+Ci2goKBmdHA6Ly9mdHAuZGlnaXRhbC5jb20vcHViL0RFQy9TUkMvcmVzZWFyY2gtcmVwb3J0cy9TUkMtMTI0LnBzLmd6PGJyPgotoKCgSWageW91oGhhdmWgdHJvdWJsZaBmaW5kaW5noGl0LKB0cnmgc2VhcmNoaW5noGF0oHRoZTxicj4KLaCgoE5ld6BaZWFsYW5koERpZ2l0YWygTGlicmFyeSygaHR0cDovL3d3dy5uemRsLm9yZy48YnI+Ci08YnI+Ci1EYW5pZWygUy6gSGlyc2NoYmVyZ6BhbmSgRGVicmGgQS6gTGVMZXdlcjxicj4KLaCgIkVmZmljaWVudKBEZWNvZGluZ6BvZqBQcmVmaXigQ29kZXMiPGJyPgotoKCgQ29tbXVuaWNhdGlvbnOgb2agdGhloEFDTSygQXByaWygMTk5MCygVm9soDMzLKBOdW1iZXKgNC48YnI+Ci2goKBZb3WgbWlnaHSgYmWgYWJsZaB0b6BnZXSgYW6gZWxlY3Ryb25pY6Bjb3B5oG9moHRoaXM8YnI+Ci2goKBmcm9toHRoZaBBQ02gRGlnaXRhbKBMaWJyYXJ5Ljxicj4KLTxicj4KLURhdmlkoEouoFdoZWVsZXI8YnI+Ci2goKBQcm9ncmFtoGJyZWQzLmOgYW5koGFjY29tcGFueWluZ6Bkb2N1bWVudKBicmVkMy5wcy48YnI+Ci2goKBUaGlzoGNvbnRhaW5zoHRoZaBpZGVhoGJlaGluZKB0aGWgbXVsdGktdGFibGWgSHVmZm1hbqBjb2Rpbmegc2NoZW1lLjxicj4KLaCgoGZ0cDovL2Z0cC5jbC5jYW0uYWMudWsvdXNlcnMvZGp3My88YnI+Ci08YnI+Ci1Kb26gTC6gQmVudGxleaBhbmSgUm9iZXJ0oFNlZGdld2ljazxicj4KLaCgIkZhc3SgQWxnb3JpdGhtc6Bmb3KgU29ydGluZ6BhbmSgU2VhcmNoaW5noFN0cmluZ3MiPGJyPgotoKCgQXZhaWxhYmxloGZyb22gU2VkZ2V3aWNrJ3Ogd2VioHBhZ2UsPGJyPgotoKCgd3d3LmNzLnByaW5jZXRvbi5lZHUvfnJzPGJyPgotPC9wPjwvZGl2PgotPHA+VGhlIGZvbGxvd2luZyBwYXBlciBnaXZlcyB2YWx1YWJsZSBhZGRpdGlvbmFsIGluc2lnaHRzIGludG8KLXRoZSBhbGdvcml0aG0sIGJ1dCBpcyBub3QgaW1tZWRpYXRlbHkgdGhlIGJhc2lzIG9mIGFueSBjb2RlIHVzZWQKLWluIGJ6aXAyLjwvcD4KLTxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPlBldGVyoEZlbndpY2s6PGJyPgotoKCgQmxvY2ugU29ydGluZ6BUZXh0oENvbXByZXNzaW9uPGJyPgotoKCgUHJvY2VlZGluZ3Ogb2agdGhloDE5dGigQXVzdHJhbGFzaWFuoENvbXB1dGVyoFNjaWVuY2WgQ29uZmVyZW5jZSw8YnI+Ci2goKCgoE1lbGJvdXJuZSygQXVzdHJhbGlhLqCgSmFuoDMxoC2gRmVioDIsoDE5OTYuPGJyPgotoKCgZnRwOi8vZnRwLmNzLmF1Y2tsYW5kLmFjLm56L3B1Yi9wZXRlci1mL0FDU0M5NnBhcGVyLnBzPC9wPjwvZGl2PgotPHA+S3VuaWhpa28gU2FkYWthbmUncyBzb3J0aW5nIGFsZ29yaXRobSwgbWVudGlvbmVkIGFib3ZlLCBpcwotYXZhaWxhYmxlIGZyb206PC9wPgotPGRpdiBjbGFzcz0ibGl0ZXJhbGxheW91dCI+PHA+aHR0cDovL25hb21pLmlzLnMudS10b2t5by5hYy5qcC9+c2FkYS9wYXBlcnMvU2FkYTk4Yi5wcy5nejxicj4KLTwvcD48L2Rpdj4KLTxwPlRoZSBNYW5iZXItTXllcnMgc3VmZml4IGFycmF5IGNvbnN0cnVjdGlvbiBhbGdvcml0aG0gaXMKLWRlc2NyaWJlZCBpbiBhIHBhcGVyIGF2YWlsYWJsZSBmcm9tOjwvcD4KLTxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPmh0dHA6Ly93d3cuY3MuYXJpem9uYS5lZHUvcGVvcGxlL2dlbmUvUEFQRVJTL3N1ZmZpeC5wczxicj4KLTwvcD48L2Rpdj4KLTxwPkZpbmFsbHksIHRoZSBmb2xsb3dpbmcgcGFwZXJzIGRvY3VtZW50IHNvbWUKLWludmVzdGlnYXRpb25zIEkgbWFkZSBpbnRvIHRoZSBwZXJmb3JtYW5jZSBvZiBzb3J0aW5nCi1hbmQgZGVjb21wcmVzc2lvbiBhbGdvcml0aG1zOjwvcD4KLTxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPkp1bGlhbqBTZXdhcmQ8YnI+Ci2goKBPbqB0aGWgUGVyZm9ybWFuY2Wgb2agQldUoFNvcnRpbmegQWxnb3JpdGhtczxicj4KLaCgoFByb2NlZWRpbmdzoG9moHRoZaBJRUVFoERhdGGgQ29tcHJlc3Npb26gQ29uZmVyZW5jZaAyMDAwPGJyPgotoKCgoKBTbm93YmlyZCygVXRhaC6goDI4LTMwoE1hcmNooDIwMDAuPGJyPgotPGJyPgotSnVsaWFuoFNld2FyZDxicj4KLaCgoFNwYWNlLXRpbWWgVHJhZGVvZmZzoGluoHRoZaBJbnZlcnNloEItV6BUcmFuc2Zvcm08YnI+Ci2goKBQcm9jZWVkaW5nc6BvZqB0aGWgSUVFRaBEYXRhoENvbXByZXNzaW9uoENvbmZlcmVuY2WgMjAwMTxicj4KLaCgoKCgU25vd2JpcmQsoFV0YWguoKAyNy0yOaBNYXJjaKAyMDAxLjxicj4KLTwvcD48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj48L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwucGRmIGIvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnBkZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjMTBkZS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9tYW51YWwucGRmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnBzIGIvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnBzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGI2MTBjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL21hbnVhbC5wcworKysgL2Rldi9udWxsCkBAIC0xLDgyOTAwICswLDAgQEAKLSUhUFMtQWRvYmUtMy4wCi0lJUNyZWF0b3I6IHhwZGYvcGRmdG9wcyAzLjAxCi0lJUxhbmd1YWdlTGV2ZWw6IDIKLSUlRG9jdW1lbnRTdXBwbGllZFJlc291cmNlczogKGF0ZW5kKQotJSVEb2N1bWVudE1lZGlhOiBwbGFpbiA2MTIgNzkyIDAgKCkgKCkKLSUlQm91bmRpbmdCb3g6IDAgMCA2MTIgNzkyCi0lJVBhZ2VzOiAzOAotJSVFbmRDb21tZW50cwotJSVCZWdpbkRlZmF1bHRzCi0lJVBhZ2VNZWRpYTogcGxhaW4KLSUlRW5kRGVmYXVsdHMKLSUlQmVnaW5Qcm9sb2cKLSUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCB4cGRmIDMuMDEgMAotL3hwZGYgNzUgZGljdCBkZWYgeHBkZiBiZWdpbgotJSBQREYgc3BlY2lhbCBzdGF0ZQotL3BkZkRpY3RTaXplIDE1IGRlZgotL3BkZlNldHVwIHsKLSAgMyAxIHJvbGwgMiBhcnJheSBhc3RvcmUKLSAgL3NldHBhZ2VkZXZpY2Ugd2hlcmUgewotICAgIHBvcCAzIGRpY3QgYmVnaW4KLSAgICAgIC9QYWdlU2l6ZSBleGNoIGRlZgotICAgICAgL0ltYWdpbmdCQm94IG51bGwgZGVmCi0gICAgICAvUG9saWNpZXMgMSBkaWN0IGR1cCBiZWdpbiAvUGFnZVNpemUgMyBkZWYgZW5kIGRlZgotICAgICAgeyAvRHVwbGV4IHRydWUgZGVmIH0gaWYKLSAgICBjdXJyZW50ZGljdCBlbmQgc2V0cGFnZWRldmljZQotICB9IHsKLSAgICBwb3AgcG9wCi0gIH0gaWZlbHNlCi19IGRlZgotL3BkZlN0YXJ0UGFnZSB7Ci0gIHBkZkRpY3RTaXplIGRpY3QgYmVnaW4KLSAgL3BkZkZpbGxDUyBbXSBkZWYKLSAgL3BkZkZpbGxYZm9ybSB7fSBkZWYKLSAgL3BkZlN0cm9rZUNTIFtdIGRlZgotICAvcGRmU3Ryb2tlWGZvcm0ge30gZGVmCi0gIC9wZGZGaWxsIFswXSBkZWYKLSAgL3BkZlN0cm9rZSBbMF0gZGVmCi0gIC9wZGZGaWxsT1AgZmFsc2UgZGVmCi0gIC9wZGZTdHJva2VPUCBmYWxzZSBkZWYKLSAgL3BkZkxhc3RGaWxsIGZhbHNlIGRlZgotICAvcGRmTGFzdFN0cm9rZSBmYWxzZSBkZWYKLSAgL3BkZlRleHRNYXQgWzEgMCAwIDEgMCAwXSBkZWYKLSAgL3BkZkZvbnRTaXplIDAgZGVmCi0gIC9wZGZDaGFyU3BhY2luZyAwIGRlZgotICAvcGRmVGV4dFJlbmRlciAwIGRlZgotICAvcGRmVGV4dFJpc2UgMCBkZWYKLSAgL3BkZldvcmRTcGFjaW5nIDAgZGVmCi0gIC9wZGZIb3JpelNjYWxpbmcgMSBkZWYKLSAgL3BkZlRleHRDbGlwUGF0aCBbXSBkZWYKLX0gZGVmCi0vcGRmRW5kUGFnZSB7IGVuZCB9IGRlZgotJSBQREYgY29sb3Igc3RhdGUKLS9jcyB7IC9wZGZGaWxsWGZvcm0gZXhjaCBkZWYgZHVwIC9wZGZGaWxsQ1MgZXhjaCBkZWYKLSAgICAgIHNldGNvbG9yc3BhY2UgfSBkZWYKLS9DUyB7IC9wZGZTdHJva2VYZm9ybSBleGNoIGRlZiBkdXAgL3BkZlN0cm9rZUNTIGV4Y2ggZGVmCi0gICAgICBzZXRjb2xvcnNwYWNlIH0gZGVmCi0vc2MgeyBwZGZMYXN0RmlsbCBub3QgeyBwZGZGaWxsQ1Mgc2V0Y29sb3JzcGFjZSB9IGlmCi0gICAgICBkdXAgL3BkZkZpbGwgZXhjaCBkZWYgYWxvYWQgcG9wIHBkZkZpbGxYZm9ybSBzZXRjb2xvcgotICAgICAvcGRmTGFzdEZpbGwgdHJ1ZSBkZWYgL3BkZkxhc3RTdHJva2UgZmFsc2UgZGVmIH0gZGVmCi0vU0MgeyBwZGZMYXN0U3Ryb2tlIG5vdCB7IHBkZlN0cm9rZUNTIHNldGNvbG9yc3BhY2UgfSBpZgotICAgICAgZHVwIC9wZGZTdHJva2UgZXhjaCBkZWYgYWxvYWQgcG9wIHBkZlN0cm9rZVhmb3JtIHNldGNvbG9yCi0gICAgIC9wZGZMYXN0U3Ryb2tlIHRydWUgZGVmIC9wZGZMYXN0RmlsbCBmYWxzZSBkZWYgfSBkZWYKLS9vcCB7IC9wZGZGaWxsT1AgZXhjaCBkZWYKLSAgICAgIHBkZkxhc3RGaWxsIHsgcGRmRmlsbE9QIHNldG92ZXJwcmludCB9IGlmIH0gZGVmCi0vT1AgeyAvcGRmU3Ryb2tlT1AgZXhjaCBkZWYKLSAgICAgIHBkZkxhc3RTdHJva2UgeyBwZGZTdHJva2VPUCBzZXRvdmVycHJpbnQgfSBpZiB9IGRlZgotL2ZDb2wgewotICBwZGZMYXN0RmlsbCBub3QgewotICAgIHBkZkZpbGxDUyBzZXRjb2xvcnNwYWNlCi0gICAgcGRmRmlsbCBhbG9hZCBwb3AgcGRmRmlsbFhmb3JtIHNldGNvbG9yCi0gICAgcGRmRmlsbE9QIHNldG92ZXJwcmludAotICAgIC9wZGZMYXN0RmlsbCB0cnVlIGRlZiAvcGRmTGFzdFN0cm9rZSBmYWxzZSBkZWYKLSAgfSBpZgotfSBkZWYKLS9zQ29sIHsKLSAgcGRmTGFzdFN0cm9rZSBub3QgewotICAgIHBkZlN0cm9rZUNTIHNldGNvbG9yc3BhY2UKLSAgICBwZGZTdHJva2UgYWxvYWQgcG9wIHBkZlN0cm9rZVhmb3JtIHNldGNvbG9yCi0gICAgcGRmU3Ryb2tlT1Agc2V0b3ZlcnByaW50Ci0gICAgL3BkZkxhc3RTdHJva2UgdHJ1ZSBkZWYgL3BkZkxhc3RGaWxsIGZhbHNlIGRlZgotICB9IGlmCi19IGRlZgotJSBidWlsZCBhIGZvbnQKLS9wZGZNYWtlRm9udCB7Ci0gIDQgMyByb2xsIGZpbmRmb250Ci0gIDQgMiByb2xsIG1hdHJpeCBzY2FsZSBtYWtlZm9udAotICBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KLSAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9IHsgcG9wIHBvcCB9IGlmZWxzZSB9IGZvcmFsbAotICAgIC9FbmNvZGluZyBleGNoIGRlZgotICAgIGN1cnJlbnRkaWN0Ci0gIGVuZAotICBkZWZpbmVmb250IHBvcAotfSBkZWYKLS9wZGZNYWtlRm9udDE2IHsKLSAgZXhjaCBmaW5kZm9udAotICBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KLSAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9IHsgcG9wIHBvcCB9IGlmZWxzZSB9IGZvcmFsbAotICAgIC9XTW9kZSBleGNoIGRlZgotICAgIGN1cnJlbnRkaWN0Ci0gIGVuZAotICBkZWZpbmVmb250IHBvcAotfSBkZWYKLSUgZ3JhcGhpY3Mgc3RhdGUgb3BlcmF0b3JzCi0vcSB7IGdzYXZlIHBkZkRpY3RTaXplIGRpY3QgYmVnaW4gfSBkZWYKLS9RIHsKLSAgZW5kIGdyZXN0b3JlCi0gIC9wZGZMYXN0RmlsbCB3aGVyZSB7Ci0gICAgcG9wCi0gICAgcGRmTGFzdEZpbGwgewotICAgICAgcGRmRmlsbE9QIHNldG92ZXJwcmludAotICAgIH0gewotICAgICAgcGRmU3Ryb2tlT1Agc2V0b3ZlcnByaW50Ci0gICAgfSBpZmVsc2UKLSAgfSBpZgotfSBkZWYKLS9jbSB7IGNvbmNhdCB9IGRlZgotL2QgeyBzZXRkYXNoIH0gZGVmCi0vaSB7IHNldGZsYXQgfSBkZWYKLS9qIHsgc2V0bGluZWpvaW4gfSBkZWYKLS9KIHsgc2V0bGluZWNhcCB9IGRlZgotL00geyBzZXRtaXRlcmxpbWl0IH0gZGVmCi0vdyB7IHNldGxpbmV3aWR0aCB9IGRlZgotJSBwYXRoIHNlZ21lbnQgb3BlcmF0b3JzCi0vbSB7IG1vdmV0byB9IGRlZgotL2wgeyBsaW5ldG8gfSBkZWYKLS9jIHsgY3VydmV0byB9IGRlZgotL3JlIHsgNCAyIHJvbGwgbW92ZXRvIDEgaW5kZXggMCBybGluZXRvIDAgZXhjaCBybGluZXRvCi0gICAgICBuZWcgMCBybGluZXRvIGNsb3NlcGF0aCB9IGRlZgotL2ggeyBjbG9zZXBhdGggfSBkZWYKLSUgcGF0aCBwYWludGluZyBvcGVyYXRvcnMKLS9TIHsgc0NvbCBzdHJva2UgfSBkZWYKLS9TZiB7IGZDb2wgc3Ryb2tlIH0gZGVmCi0vZiB7IGZDb2wgZmlsbCB9IGRlZgotL2YqIHsgZkNvbCBlb2ZpbGwgfSBkZWYKLSUgY2xpcHBpbmcgb3BlcmF0b3JzCi0vVyB7IGNsaXAgbmV3cGF0aCB9IGRlZgotL1cqIHsgZW9jbGlwIG5ld3BhdGggfSBkZWYKLSUgdGV4dCBzdGF0ZSBvcGVyYXRvcnMKLS9UYyB7IC9wZGZDaGFyU3BhY2luZyBleGNoIGRlZiB9IGRlZgotL1RmIHsgZHVwIC9wZGZGb250U2l6ZSBleGNoIGRlZgotICAgICAgZHVwIHBkZkhvcml6U2NhbGluZyBtdWwgZXhjaCBtYXRyaXggc2NhbGUKLSAgICAgIHBkZlRleHRNYXQgbWF0cml4IGNvbmNhdG1hdHJpeCBkdXAgNCAwIHB1dCBkdXAgNSAwIHB1dAotICAgICAgZXhjaCBmaW5kZm9udCBleGNoIG1ha2Vmb250IHNldGZvbnQgfSBkZWYKLS9UciB7IC9wZGZUZXh0UmVuZGVyIGV4Y2ggZGVmIH0gZGVmCi0vVHMgeyAvcGRmVGV4dFJpc2UgZXhjaCBkZWYgfSBkZWYKLS9UdyB7IC9wZGZXb3JkU3BhY2luZyBleGNoIGRlZiB9IGRlZgotL1R6IHsgL3BkZkhvcml6U2NhbGluZyBleGNoIGRlZiB9IGRlZgotJSB0ZXh0IHBvc2l0aW9uaW5nIG9wZXJhdG9ycwotL1RkIHsgcGRmVGV4dE1hdCB0cmFuc2Zvcm0gbW92ZXRvIH0gZGVmCi0vVG0geyAvcGRmVGV4dE1hdCBleGNoIGRlZiB9IGRlZgotJSB0ZXh0IHN0cmluZyBvcGVyYXRvcnMKLS9jc2hvdyB3aGVyZSB7Ci0gIHBvcAotICAvY3Nob3cyIHsKLSAgICBkdXAgewotICAgICAgcG9wIHBvcAotICAgICAgMSBzdHJpbmcgZHVwIDAgMyBpbmRleCBwdXQgMyBpbmRleCBleGVjCi0gICAgfSBleGNoIGNzaG93Ci0gICAgcG9wIHBvcAotICB9IGRlZgotfXsKLSAgL2NzaG93MiB7Ci0gICAgY3VycmVudGZvbnQgL0ZvbnRUeXBlIGdldCAwIGVxIHsKLSAgICAgIDAgMiAyIGluZGV4IGxlbmd0aCAxIHN1YiB7Ci0gICAgICAgIDIgY29weSBnZXQgZXhjaCAxIGFkZCAyIGluZGV4IGV4Y2ggZ2V0Ci0gICAgICAgIDIgY29weSBleGNoIDI1NiBtdWwgYWRkCi0gICAgICAgIDIgc3RyaW5nIGR1cCAwIDYgNSByb2xsIHB1dCBkdXAgMSA1IDQgcm9sbCBwdXQKLSAgICAgICAgMyBpbmRleCBleGVjCi0gICAgICB9IGZvcgotICAgIH0gewotICAgICAgZHVwIHsKLSAgICAgICAgMSBzdHJpbmcgZHVwIDAgMyBpbmRleCBwdXQgMyBpbmRleCBleGVjCi0gICAgICB9IGZvcmFsbAotICAgIH0gaWZlbHNlCi0gICAgcG9wIHBvcAotICB9IGRlZgotfSBpZmVsc2UKLS9hd2NwIHsKLSAgZXhjaCB7Ci0gICAgZmFsc2UgY2hhcnBhdGgKLSAgICA1IGluZGV4IDUgaW5kZXggcm1vdmV0bwotICAgIDYgaW5kZXggZXEgeyA3IGluZGV4IDcgaW5kZXggcm1vdmV0byB9IGlmCi0gIH0gZXhjaCBjc2hvdzIKLSAgNiB7cG9wfSByZXBlYXQKLX0gZGVmCi0vVGogewotICBmQ29sCi0gIDEgaW5kZXggc3RyaW5nd2lkdGggcGRmVGV4dE1hdCBpZHRyYW5zZm9ybSBwb3AKLSAgc3ViIDEgaW5kZXggbGVuZ3RoIGR1cCAwIG5lIHsgZGl2IH0geyBwb3AgcG9wIDAgfSBpZmVsc2UKLSAgcGRmV29yZFNwYWNpbmcgcGRmSG9yaXpTY2FsaW5nIG11bCAwIHBkZlRleHRNYXQgZHRyYW5zZm9ybSAzMgotICA0IDMgcm9sbCBwZGZDaGFyU3BhY2luZyBwZGZIb3JpelNjYWxpbmcgbXVsIGFkZCAwCi0gIHBkZlRleHRNYXQgZHRyYW5zZm9ybQotICA2IDUgcm9sbCBUajEKLX0gZGVmCi0vVGoxNiB7Ci0gIGZDb2wKLSAgMiBpbmRleCBzdHJpbmd3aWR0aCBwZGZUZXh0TWF0IGlkdHJhbnNmb3JtIHBvcAotICBzdWIgZXhjaCBkaXYKLSAgcGRmV29yZFNwYWNpbmcgcGRmSG9yaXpTY2FsaW5nIG11bCAwIHBkZlRleHRNYXQgZHRyYW5zZm9ybSAzMgotICA0IDMgcm9sbCBwZGZDaGFyU3BhY2luZyBwZGZIb3JpelNjYWxpbmcgbXVsIGFkZCAwCi0gIHBkZlRleHRNYXQgZHRyYW5zZm9ybQotICA2IDUgcm9sbCBUajEKLX0gZGVmCi0vVGoxNlYgewotICBmQ29sCi0gIDIgaW5kZXggc3RyaW5nd2lkdGggcGRmVGV4dE1hdCBpZHRyYW5zZm9ybSBleGNoIHBvcAotICBzdWIgZXhjaCBkaXYKLSAgMCBwZGZXb3JkU3BhY2luZyBwZGZUZXh0TWF0IGR0cmFuc2Zvcm0gMzIKLSAgNCAzIHJvbGwgcGRmQ2hhclNwYWNpbmcgYWRkIDAgZXhjaAotICBwZGZUZXh0TWF0IGR0cmFuc2Zvcm0KLSAgNiA1IHJvbGwgVGoxCi19IGRlZgotL1RqMSB7Ci0gIDAgcGRmVGV4dFJpc2UgcGRmVGV4dE1hdCBkdHJhbnNmb3JtIHJtb3ZldG8KLSAgY3VycmVudHBvaW50IDggMiByb2xsCi0gIHBkZlRleHRSZW5kZXIgMSBhbmQgMCBlcSB7Ci0gICAgNiBjb3B5IGF3aWR0aHNob3cKLSAgfSBpZgotICBwZGZUZXh0UmVuZGVyIDMgYW5kIGR1cCAxIGVxIGV4Y2ggMiBlcSBvciB7Ci0gICAgNyBpbmRleCA3IGluZGV4IG1vdmV0bwotICAgIDYgY29weQotICAgIGN1cnJlbnRmb250IC9Gb250VHlwZSBnZXQgMyBlcSB7IGZDb2wgfSB7IHNDb2wgfSBpZmVsc2UKLSAgICBmYWxzZSBhd2NwIGN1cnJlbnRwb2ludCBzdHJva2UgbW92ZXRvCi0gIH0gaWYKLSAgcGRmVGV4dFJlbmRlciA0IGFuZCAwIG5lIHsKLSAgICA4IDYgcm9sbCBtb3ZldG8KLSAgICBmYWxzZSBhd2NwCi0gICAgL3BkZlRleHRDbGlwUGF0aCBbIHBkZlRleHRDbGlwUGF0aCBhbG9hZCBwb3AKLSAgICAgIHsvbW92ZXRvIGN2eH0KLSAgICAgIHsvbGluZXRvIGN2eH0KLSAgICAgIHsvY3VydmV0byBjdnh9Ci0gICAgICB7L2Nsb3NlcGF0aCBjdnh9Ci0gICAgcGF0aGZvcmFsbCBdIGRlZgotICAgIGN1cnJlbnRwb2ludCBuZXdwYXRoIG1vdmV0bwotICB9IHsKLSAgICA4IHtwb3B9IHJlcGVhdAotICB9IGlmZWxzZQotICAwIHBkZlRleHRSaXNlIG5lZyBwZGZUZXh0TWF0IGR0cmFuc2Zvcm0gcm1vdmV0bwotfSBkZWYKLS9USm0geyBwZGZGb250U2l6ZSAwLjAwMSBtdWwgbXVsIG5lZyAwCi0gICAgICAgcGRmVGV4dE1hdCBkdHJhbnNmb3JtIHJtb3ZldG8gfSBkZWYKLS9USm1WIHsgcGRmRm9udFNpemUgMC4wMDEgbXVsIG11bCBuZWcgMCBleGNoCi0gICAgICAgIHBkZlRleHRNYXQgZHRyYW5zZm9ybSBybW92ZXRvIH0gZGVmCi0vVGNsaXAgeyBwZGZUZXh0Q2xpcFBhdGggY3Z4IGV4ZWMgY2xpcCBuZXdwYXRoCi0gICAgICAgICAvcGRmVGV4dENsaXBQYXRoIFtdIGRlZiB9IGRlZgotJSBMZXZlbCAyIGltYWdlIG9wZXJhdG9ycwotL3BkZkltQnVmIDEwMCBzdHJpbmcgZGVmCi0vcGRmSW0gewotICBpbWFnZQotICB7IGN1cnJlbnRmaWxlIHBkZkltQnVmIHJlYWRsaW5lCi0gICAgbm90IHsgcG9wIGV4aXQgfSBpZgotICAgICglLUVPRC0pIGVxIHsgZXhpdCB9IGlmIH0gbG9vcAotfSBkZWYKLS9wZGZJbU0gewotICBmQ29sIGltYWdlbWFzawotICB7IGN1cnJlbnRmaWxlIHBkZkltQnVmIHJlYWRsaW5lCi0gICAgbm90IHsgcG9wIGV4aXQgfSBpZgotICAgICglLUVPRC0pIGVxIHsgZXhpdCB9IGlmIH0gbG9vcAotfSBkZWYKLS9wZGZJbUNsaXAgewotICBnc2F2ZQotICAwIDIgNCBpbmRleCBsZW5ndGggMSBzdWIgewotICAgIGR1cCA0IGluZGV4IGV4Y2ggMiBjb3B5Ci0gICAgZ2V0IDUgaW5kZXggZGl2IHB1dAotICAgIDEgYWRkIDMgaW5kZXggZXhjaCAyIGNvcHkKLSAgICBnZXQgMyBpbmRleCBkaXYgcHV0Ci0gIH0gZm9yCi0gIHBvcCBwb3AgcmVjdGNsaXAKLX0gZGVmCi0vcGRmSW1DbGlwRW5kIHsgZ3Jlc3RvcmUgfSBkZWYKLSUgc2hhZGluZyBvcGVyYXRvcnMKLS9jb2xvcmRlbHRhIHsKLSAgZmFsc2UgMCAxIDMgaW5kZXggbGVuZ3RoIDEgc3ViIHsKLSAgICBkdXAgNCBpbmRleCBleGNoIGdldCAzIGluZGV4IDMgMiByb2xsIGdldCBzdWIgYWJzIDAuMDA0IGd0IHsKLSAgICAgIHBvcCB0cnVlCi0gICAgfSBpZgotICB9IGZvcgotICBleGNoIHBvcCBleGNoIHBvcAotfSBkZWYKLS9mdW5jQ29sIHsgZnVuYyBuIGFycmF5IGFzdG9yZSB9IGRlZgotL2Z1bmNTSCB7Ci0gIGR1cCAwIGVxIHsKLSAgICB0cnVlCi0gIH0gewotICAgIGR1cCA2IGVxIHsKLSAgICAgIGZhbHNlCi0gICAgfSB7Ci0gICAgICA0IGluZGV4IDQgaW5kZXggZnVuY0NvbCBkdXAKLSAgICAgIDYgaW5kZXggNCBpbmRleCBmdW5jQ29sIGR1cAotICAgICAgMyAxIHJvbGwgY29sb3JkZWx0YSAzIDEgcm9sbAotICAgICAgNSBpbmRleCA1IGluZGV4IGZ1bmNDb2wgZHVwCi0gICAgICAzIDEgcm9sbCBjb2xvcmRlbHRhIDMgMSByb2xsCi0gICAgICA2IGluZGV4IDggaW5kZXggZnVuY0NvbCBkdXAKLSAgICAgIDMgMSByb2xsIGNvbG9yZGVsdGEgMyAxIHJvbGwKLSAgICAgIGNvbG9yZGVsdGEgb3Igb3Igb3IKLSAgICB9IGlmZWxzZQotICB9IGlmZWxzZQotICB7Ci0gICAgMSBhZGQKLSAgICA0IGluZGV4IDMgaW5kZXggYWRkIDAuNSBtdWwgZXhjaCA0IGluZGV4IDMgaW5kZXggYWRkIDAuNSBtdWwgZXhjaAotICAgIDYgaW5kZXggNiBpbmRleCA0IGluZGV4IDQgaW5kZXggNCBpbmRleCBmdW5jU0gKLSAgICAyIGluZGV4IDYgaW5kZXggNiBpbmRleCA0IGluZGV4IDQgaW5kZXggZnVuY1NICi0gICAgNiBpbmRleCAyIGluZGV4IDQgaW5kZXggNiBpbmRleCA0IGluZGV4IGZ1bmNTSAotICAgIDUgMyByb2xsIDMgMiByb2xsIGZ1bmNTSCBwb3AgcG9wCi0gIH0gewotICAgIHBvcCAzIGluZGV4IDIgaW5kZXggYWRkIDAuNSBtdWwgMyBpbmRleCAgMiBpbmRleCBhZGQgMC41IG11bAotICAgIGZ1bmNDb2wgc2MKLSAgICBkdXAgNCBpbmRleCBleGNoIG1hdCB0cmFuc2Zvcm0gbQotICAgIDMgaW5kZXggMyBpbmRleCBtYXQgdHJhbnNmb3JtIGwKLSAgICAxIGluZGV4IDMgaW5kZXggbWF0IHRyYW5zZm9ybSBsCi0gICAgbWF0IHRyYW5zZm9ybSBsIHBvcCBwb3AgaCBmKgotICB9IGlmZWxzZQotfSBkZWYKLS9heGlhbENvbCB7Ci0gIGR1cCAwIGx0IHsKLSAgICBwb3AgdDAKLSAgfSB7Ci0gICAgZHVwIDEgZ3QgewotICAgICAgcG9wIHQxCi0gICAgfSB7Ci0gICAgICBkdCBtdWwgdDAgYWRkCi0gICAgfSBpZmVsc2UKLSAgfSBpZmVsc2UKLSAgZnVuYyBuIGFycmF5IGFzdG9yZQotfSBkZWYKLS9heGlhbFNIIHsKLSAgZHVwIDAgZXEgewotICAgIHRydWUKLSAgfSB7Ci0gICAgZHVwIDggZXEgewotICAgICAgZmFsc2UKLSAgICB9IHsKLSAgICAgIDIgaW5kZXggYXhpYWxDb2wgMiBpbmRleCBheGlhbENvbCBjb2xvcmRlbHRhCi0gICAgfSBpZmVsc2UKLSAgfSBpZmVsc2UKLSAgewotICAgIDEgYWRkIDMgMSByb2xsIDIgY29weSBhZGQgMC41IG11bAotICAgIGR1cCA0IDMgcm9sbCBleGNoIDQgaW5kZXggYXhpYWxTSAotICAgIGV4Y2ggMyAyIHJvbGwgYXhpYWxTSAotICB9IHsKLSAgICBwb3AgMiBjb3B5IGFkZCAwLjUgbXVsIGF4aWFsQ29sIHNjCi0gICAgZXhjaCBkdXAgZHggbXVsIHgwIGFkZCBleGNoIGR5IG11bCB5MCBhZGQKLSAgICAzIDIgcm9sbCBkdXAgZHggbXVsIHgwIGFkZCBleGNoIGR5IG11bCB5MCBhZGQKLSAgICBkeCBhYnMgZHkgYWJzIGdlIHsKLSAgICAgIDIgY29weSB5TWluIHN1YiBkeSBtdWwgZHggZGl2IGFkZCB5TWluIG0KLSAgICAgIHlNYXggc3ViIGR5IG11bCBkeCBkaXYgYWRkIHlNYXggbAotICAgICAgMiBjb3B5IHlNYXggc3ViIGR5IG11bCBkeCBkaXYgYWRkIHlNYXggbAotICAgICAgeU1pbiBzdWIgZHkgbXVsIGR4IGRpdiBhZGQgeU1pbiBsCi0gICAgICBoIGYqCi0gICAgfSB7Ci0gICAgICBleGNoIDIgY29weSB4TWluIHN1YiBkeCBtdWwgZHkgZGl2IGFkZCB4TWluIGV4Y2ggbQotICAgICAgeE1heCBzdWIgZHggbXVsIGR5IGRpdiBhZGQgeE1heCBleGNoIGwKLSAgICAgIGV4Y2ggMiBjb3B5IHhNYXggc3ViIGR4IG11bCBkeSBkaXYgYWRkIHhNYXggZXhjaCBsCi0gICAgICB4TWluIHN1YiBkeCBtdWwgZHkgZGl2IGFkZCB4TWluIGV4Y2ggbAotICAgICAgaCBmKgotICAgIH0gaWZlbHNlCi0gIH0gaWZlbHNlCi19IGRlZgotL3JhZGlhbENvbCB7Ci0gIGR1cCB0MCBsdCB7Ci0gICAgcG9wIHQwCi0gIH0gewotICAgIGR1cCB0MSBndCB7Ci0gICAgICBwb3AgdDEKLSAgICB9IGlmCi0gIH0gaWZlbHNlCi0gIGZ1bmMgbiBhcnJheSBhc3RvcmUKLX0gZGVmCi0vcmFkaWFsU0ggewotICBkdXAgMCBlcSB7Ci0gICAgdHJ1ZQotICB9IHsKLSAgICBkdXAgOCBlcSB7Ci0gICAgICBmYWxzZQotICAgIH0gewotICAgICAgMiBpbmRleCBkdCBtdWwgdDAgYWRkIHJhZGlhbENvbAotICAgICAgMiBpbmRleCBkdCBtdWwgdDAgYWRkIHJhZGlhbENvbCBjb2xvcmRlbHRhCi0gICAgfSBpZmVsc2UKLSAgfSBpZmVsc2UKLSAgewotICAgIDEgYWRkIDMgMSByb2xsIDIgY29weSBhZGQgMC41IG11bAotICAgIGR1cCA0IDMgcm9sbCBleGNoIDQgaW5kZXggcmFkaWFsU0gKLSAgICBleGNoIDMgMiByb2xsIHJhZGlhbFNICi0gIH0gewotICAgIHBvcCAyIGNvcHkgYWRkIDAuNSBtdWwgZHQgbXVsIHQwIGFkZCBheGlhbENvbCBzYwotICAgIGV4Y2ggZHVwIGR4IG11bCB4MCBhZGQgZXhjaCBkdXAgZHkgbXVsIHkwIGFkZCBleGNoIGRyIG11bCByMCBhZGQKLSAgICAwIDM2MCBhcmMgaAotICAgIGR1cCBkeCBtdWwgeDAgYWRkIGV4Y2ggZHVwIGR5IG11bCB5MCBhZGQgZXhjaCBkciBtdWwgcjAgYWRkCi0gICAgMCAzNjAgYXJjIGggZioKLSAgfSBpZmVsc2UKLX0gZGVmCi1lbmQKLSUlRW5kUmVzb3VyY2UKLSUlRW5kUHJvbG9nCi0lJUJlZ2luU2V0dXAKLXhwZGYgYmVnaW4KLSUlQmVnaW5SZXNvdXJjZTogZm9udCBEVFVVSFArTmltYnVzU2FuTC1Cb2xkCi0lIVBTLUFkb2JlRm9udC0xLjA6IE5pbWJ1c1NhbkwtQm9sZCAxLjA1Ci0lJUNyZWF0aW9uRGF0ZTogV2VkIERlYyAyMiAxOTk5Ci0lIENvcHlyaWdodCAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50Ci0lIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4KLSUgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250Ci0lIHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0Ci0lIGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzCi0lIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4KLTEyIGRpY3QgYmVnaW4KLS9Gb250SW5mbyAxMCBkaWN0IGR1cCBiZWdpbgotL3ZlcnNpb24gKDEuMDUpIHJlYWRvbmx5IGRlZgotL05vdGljZSAoKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50LiBTZWUgdGhlIGZpbGUgQ09QWUlORyAoR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UpIGZvciBsaWNlbnNlIGNvbmRpdGlvbnMuIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBpbmNsdWRlIHRoaXMgZm9udCBwcm9ncmFtIGluIGEgUG9zdHNjcmlwdCBvciBQREYgZmlsZSB0aGF0IGNvbnNpc3RzIG9mIGEgZG9jdW1lbnQgdGhhdCBjb250YWlucyB0ZXh0IHRvIGJlIGRpc3BsYXllZCBvciBwcmludGVkIHVzaW5nIHRoaXMgZm9udCwgcmVnYXJkbGVzcyBvZiB0aGUgY29uZGl0aW9ucyBvciBsaWNlbnNlIGFwcGx5aW5nIHRvIHRoZSBkb2N1bWVudCBpdHNlbGYuKSByZWFkb25seSBkZWYKLS9Db3B5cmlnaHQgKENvcHlyaWdodCAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQpIHJlYWRvbmx5IGRlZgotL0Z1bGxOYW1lIChOaW1idXMgU2FucyBMIEJvbGQpIHJlYWRvbmx5IGRlZgotL0ZhbWlseU5hbWUgKE5pbWJ1cyBTYW5zIEwpIHJlYWRvbmx5IGRlZgotL1dlaWdodCAoQm9sZCkgcmVhZG9ubHkgZGVmCi0vSXRhbGljQW5nbGUgMC4wIGRlZgotL2lzRml4ZWRQaXRjaCBmYWxzZSBkZWYKLS9VbmRlcmxpbmVQb3NpdGlvbiAtMTU1IGRlZgotL1VuZGVybGluZVRoaWNrbmVzcyA2OSBkZWYKLWVuZCByZWFkb25seSBkZWYKLS9Gb250TmFtZSAvRFRVVUhQK05pbWJ1c1NhbkwtQm9sZCBkZWYKLS9QYWludFR5cGUgMCBkZWYKLS9XTW9kZSAwIGRlZgotL0ZvbnRCQm94IHstMTczIC0zMDcgMTAwMyA5NDl9IHJlYWRvbmx5IGRlZgotL0ZvbnRUeXBlIDEgZGVmCi0vRm9udE1hdHJpeCBbMC4wMDEgMC4wIDAuMCAwLjAwMSAwLjAgMC4wXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5ODliOTk3NGIwMTc5ZmM2Y2M0NDViYzJjMDMxMDNjNjg1NzBhN2IzNTRhNGEyODBhZQotNmZiZjdmOTg4OGUwMzlhYjYwZmNhZjg1MmViNGNlM2FmZWI5NzlkNWVhNzBmZGU0NGEyYWU1YzhjMDE2NmMyNwotYmY5NjY1ZWVhMTFjN2QyMzI5YzFhMjExZGQyNmJiMzcyYmU1ODIyZjVlYTcwZDk5ZWI1NzhjN2JlZmQ0NGNkZgotMDQ1YTM2MzA1NmU1ZTFjYzUxNTI1ZWE2ZmMwNjFkY2ViYjMzNzIwOGVmZjcyOTgwMjM3NmEyODAxNDI0ZjY3MAotMGU3ZTYzOTdiMjhmMTViYzEwYjQwMDEyYjBhM2VhZWIyNjkzZThmN2Y2MjdjNGM5YzdjNmM1YmZmMTA1YzFlNAotMWIyYjllOGYwOTI1M2I3NjA0MGQyNjhiODA3MTllMWIzZjVhNTVhYjdiOGQ2MmE2MzE5M2M0YWU5NGMwODZjMQotNTUyODMzZGRkOGYxMTZiNWRmMzMyMDVhZTcwOWIzYWE2M2RhN2JlYmIxNjViNjcyODE4MjdiNDhmYjVlZGJlZAotMDJhMWE1YzA3ODRmYzU3ZDM0ODdkYWE1OTUyMGJhZGExYmUzZmI5Nzk1NjY5OTI0MzIxY2U0ZjQ2NmNkOGUzZgotN2U4ZWMyNDk0YWVlODBlMmRkN2E0OGE2ODYxYWY1YjlmMGNjYWE0YTJmZTJiMDM0OThlYWNhY2Q2YjljMzljNgotYThmMmUzOWUwNmJiYjA2MWNmMmVjMzgwYTMyZWZhZDBiNzkwOTc0YmI1Y2MzZGFmMDk5MjQ3MTQ1Njk2NzM2MgotNzdkZTM0ODEzZjI3YWJlOTkzMDJmODZiYjRkMjkzYTM3Zjg0NjY3ZTdmM2RmZWU0Y2ZlOWQxYTY3NmE1NzI4YwotYWViNTIyMmZmNTBkYTk3ZTc0YjJjZGViZjcyNWZiY2E3MDE1YTE4ODg5MWM4YTM3NmI5ZGQ4YTY0MmM0YjE4NAotYjFiYmYzZjM3NmE2ZDZlMzFlZjFjODM1NGRkZjgwMzljYjIwZmFhYmNiMzRkNDc0OWIzYzhjOGQ2OTcyY2ViMQotMDZiOGE1YWFlM2FlNDBhOTFmMWYyYjExNTU2ODFhOWNjOTMzZjg3NTI4Yzk5YTJiMDI2OGI0M2EzZTgyOWU3ZgotM2JkODYzY2I1Mjk1MDc3M2JkOWIwNzMxZGM0OTkyNTQxZDdkZTdhMDU1Y2E2NWRkZDIzMTdmMTcwNWMyMGQxZgotOTMyOTFiY2MyNTRjYmFiYTQyNWMwMzJiM2IxNTA1MGQ0MWRhMTRmZmUxYjNkNjg0ZWVhNDI4MDk1YTAxZTkzMQotOThkNGY4NDliMjM5YWQ5ZDc5ZjQ1MDJmMDI3MWFmZmIwYzI5N2YyZjM0N2JmYjljMTM3NzgyNjQ2ZjY0OGY3NwotMDA3NmI4NWY1YTkyOWZjZGVhMjcwMzMzM2Y2OTE4YjhmMTI1NjI3ZjhiNTA1YzY4OGUzMGYyNThkZWQxYWVjZgotMmM4NmVkY2Q4OGMyOTI0OWE4MDgxNzMxNzM3MTk1ZmFiN2FkYmI1NDc0M2JkNjY1MTExOTRkZWUyNTE2OTU5YgotYTIwNzAxZTJkOTczNDIyNDgyOTc0MjU0OTFmNmM5NDcxZWM5YTk4ZTYzMGQ3MzRkYWMxOTcyMWYwYjMyNDQzMgotYzhkN2EwYjc1MTQ1M2Y4OWY3MDA4YmEzN2JjNDhlMDgzMWVlM2VjYmQ4YTBhMjkyZDYzY2ZjODkwYjI4ZjY5NQotOWUyOWFjM2I0ZGRiNzhhNjg4M2I5MjcyY2UzNGEwMTJhODJhZGVjMGI2YjY0MWUzOTQwYTQzOGEwOThjY2ZiZgotYzUwNTQ0Yjk0ZmFjZmQ5ZDdhZTA5YWQwNjMyMDE1ZjgxZDJmNzdmYzZkODBhNDJlYzExZDY3ZDhhOTFjMzc2YwotMTNjOGUzNDQ0Y2RmZGU0ZDJhMWVkMDIxNDEwZjRkNmE0ZTk3ODA0YWU5NDliZDkxMzA5NGQyMzEwOGM5ZDM4NAotNTZmMTEwMjVlMmQyNDkzOTExNGI2YmNmNTc5YTAzMTVjNTJmM2NhMWJjYzI4NjBmYzFhMGI5ZmI4YTM3YWUyZgotYzIwYzBmZDQ0ZDIxNWZjMmFmNzM3ZmQwMzM5YjA3MGQ1NGU2NjQwMjEyNDAwNzFjNjY1ZGU0MTcwZGZhMTgyZAotNGUzODU2ODVmYjQxYTJkODU4ODhiMTE0OWU5YTc2NmNiNGYzMDliNGUyYmFhMjhjZjFmOGNjMTJjNGIxOWUzMwotZjA0NmNlOTdiNTNkZWI1NDlmZWE5NmNmNmNlNjYzNTdjNDkwNGI3OTMyZjViMWNlMDNjZmUzYTEwYzk3NmI5YwotYzlhZDExZDdhMDI4MTZmOGUxMTY2NmNhOGIzZWUxNDExZGYyY2E5NDE3MjY1OWJhZDkyOWUzZTNlNTI0OGY0OAotMDY5MGNlYzZkOGY3MDYxNjA4Y2YyNjcyZjY1YWJkYzk2YjRmY2E4NGQ1Yzg0NzQ0MGNmOTUyM2QzYmYyM2Y2YgotZDQzNjU1ODJlNGIxODdiNmExYTAyODJlZDMyM2JmMjIxZWRkMGE0Y2UxMWNlN2VkYTczOGQxYWY0OGIyZTE5ZgotZWIzZGExNjY0ZGU5OWM0NDdjMzVkZmQ0NTA2OWZkZWQxZmNkNzBiNGE2ODU1ZTkxZmZiZDcxNDZlZmU4ODAxMgotMGJmZjFkNmQxYWNiNTNkNWUwN2ZiNTc5NWY1NjFhNGEzZTk1M2JiYTdjMDNhOTc2MmFkYWUxOGU1OGRjZTZiMwotYjFhNzAzMTIyZWYzYjE2OTYzYWM3Y2I5NjgyY2U2MGUxNzk0N2U3ZTY3NWQxOTkwMWM3ZTgyNzJjZTRjOWZkZgotNTM2YWJkZmZhNDI5YjgyMGE4MmFlZTlhNzNkN2RjZjc3ZGRlNGQ4ZTI1MWNiM2IzYTViMGE5MWMwZmNkN2ZiYgotZWFkN2E4MTJmZjE5NGZkMDQ5ZjI4YjgyZjRjMmQ3M2U0MWNjNzNjMWM5ZjY2ODkzMWEyYzdlYmE1NDAwYTFiOQotMDkwMmVmZTY3OTJmMjA3MTM2ZTFlMTZiNDE3OTRlNmNiZjczMTY4ODlhNjAyZDM1YzM3ZWYzNmRlYzk1YWYyNgotZTliYjA5MDA0NTZmMmViZjI3MDVlY2NlN2IyZWQ5MDM0M2QyM2UwMDZlY2IyODJkNGIzNjI5YmIwYzM4OTJmMwotZmY5YzE3ZmU2YzVmYWI2ODM1OGUxY2Q0NGFmZjAyMTk0OGFjOWZiODQxMGEzZGUyMmUwYTAxZTM2N2M1MjQ3MAotMmE4Y2ZkMjg0Y2Y5ZThmNTA1ZDVkYmQ3YmJlMjQyZmUwNzFmZWEwMDk0YTU1ZWQxY2Q3YzliZTZiN2M1NmM5OAotMTZhZDE5ODVmYjc2MjRmNWU0OGNmNmMwYzJlZDg1YjQ2NmY2NGM1MmYwMTdiMjBjZGFiYjg1ZDI0NDUyZTA4NgotMzk0MjM2MmU3NjRhMmJkYTBmNmMxYjI0NDI2ZTMwMmRkYzQ0MDNhMDg3ZWZiMjg1MGNmMzI3NWM3YjI0Mjc1YQotYWUyNzBmMjEyODMxZjRjNGE1ZDk1ZGVhYjYxOTIzY2ExMjZlNTg3ZThmNWVkNGYyZDU3MzhmMDZlOGM0ZjkxMQotYjM0NmI4ZWNkYWM0ODFkZWRkMmY1NDYzMDVhN2NkNjNjYjY3ZDQwMDkzYzYxOGZiYmRmNDk4YzhkN2VhZDhjNwotMWY1ZjAyMmQwYmJjZmFhODY3MGUzYjNiOTk5YTE2OTdjOTQ3YWYzOGQ3ZTFhMzYwZTNmMDgyNWE5YWE3Nzg0MAotZDdhOWRmZDU3NWNlMmYwNGQzMDhmN2M1NTNlYmY1NjlhYzg0ZjJjMTJhYTA4NjljZTEwN2M3MTNhM2NjZTYyNAotNTA1OWJmYjNmNWFhMjdkMTBlMzM3MDg2MTQ0YWIwOTI4NmJlMzgyNWEzNDgyYzU0MjI0NTRjNmE5Y2JiZjIwNQotODMzMzE2NzgwZWI4ODMwMjc5NmZjNDI3YTBmYjllNTNhN2JmMjQ1NzdmZWIzZmE1ZDg1Y2I2MzQ0ZjkwODAwNwotMTgzNTIyZDNjNzYwYzExZmM3ZGE4ZDE0YmI1ZGQ4MDA1NzZhNmI0ZDFiOTkxYzFiZjNkYjBmOWNhMmFjNWQyMgotOTEwNzlhMTk5ZjJmNmU2ZGM2ODIxM2QzM2VhODkzYjc0ZjZhZmYzMGVkMWI1MWY4YjUzYTAxNWZmZDRkMjA3NgotYjcxZjczMjI1YjE1MWNmY2YxMWUyYTI5MTdjZjFiM2Y2MGUyYjRkNDQyMzA3YzM5NGUxNjI1ZjdlNjBlYjEyYQotZjJlYjljYTdiMTdiMDgyZjE2NjRkMDljYjdhM2YzOGFlYTk5YTEzZjY1OTA4OTQyNjEyNmY0N2ZhZDViNmRjNwotNjQxMDFjZDQzN2RhM2MyMmJjNDNlN2E4ZGUwNzI1M2ViMzcxNDcwZWUxZTRlNDJhNWQxZmEyYzRkYjU1NjVhZAotNzlkNjI3MWFlMjhlOGZkZTVkNGNiMjQwNjRjMTQ1ZGU0NGVkNDg2YTFlN2RmMmRmOTIxZjJiMWJlNWZkYjEyMAotZDhiNzgxYzM2NTVlYTcyZGMyMmEyYTJkMzc1NzlmMGFmNjBiNDIzMjBhYjI1YzhkNzY5MTI0MzUyNDQ4YTE1NAotN2EzODFiMzg4YTRkOWE1NGU4MmYxOTliYTM1ZjFhMzk4MTgyM2FiNjk4ZTNmODdkMzhkMzJhZGRkNGYxMzgzMgotNzdmY2M5YWNlZTdmYmQzMjg1ZjY4OWE4NWI3NmQwZmViOWU3MGYwOWJhZDBjZTE0NDc3MGE2Y2MyMDNjZTQwZQotMTU5MTJkZTBlMzQ2NWRiYzc5MThlM2VhNDlhZGU1N2VlOGM0OGM3NTkzN2Y1ZDI1NDk4YzQ1MTcwNjkzMDY3ZQotNjkwMjkzN2M5YjQzYWI2MDgwMTExNjYzZDVkYzZkODhmNzJhMzljNWU3YmFkNjc3MjI5NDk4MzIzYTNlN2EyMgotMmZlMjU1MmIwMGNiOTFjZTI4NDhhMWE1MzUzOGI3YWYyNTAzYTM2NzE5MDNlMTBkZjBlOTY0MWRiYjcwNTc3YQotZTgyOGRkM2NhZTk4ZmE5ZTFhNzRmNDM3N2Y5MDhkM2NkNzk0NjE0MDhlZDI5ODMyYmM0Yzk4NjU1NTBjY2IwMAotNDUzNTkyODIyNTUwNTdhNGJkNDg1OTkxNWNmMWU0NWVjZGI3MzI5ZjkwYmJmNjNlMGEyMmE1NGIwNWM1YWNkMQotOWM3YzRkZmMyNTQ4MmEyN2EyMGM3YWI5MDg1NDZjMzU3N2U4N2FkZTkzZWE0NjQzNjMxNGEwYTdjNTI0Yjg5MgotNGIwMTIyMzllNzdjZDY1YWUyOTQ5YmJmN2U0NmE1YTIyNjliN2ZmYjFjZjhhNWJjN2VlYTE5NDRkMmIwYmYzNwotYmZjMzZhZGFkOWE1OTlmYTEzM2Y3NzkzNWYyNGVmNTE4ODE5ZDA1NDM0NWRmMTQ0NzMxZGQyMzMyYjBmN2Y1ZQotODRjNDZhZjQ4Njk0MWNmMTI5M2U4NmVlNzE5YzliYWI2MjYzNDcwYzcwMDljMzkzM2YxODU3YjBhODYzZTM2YwotMjg4ZDM3ZTZhYzg1ZTZhMWI0ZTZlOTFjMGE5ZmUzNjdiZWM0MjdlYTM3MTNlOGQxZjA1MjNlY2ZmNjA2NzcxNwotMjQ0Y2EyMWMxNzc5Njg1ODM4MTVmMDIzNDIwYTY2MGY3YWE0Y2RjOGJmMjVhYzNiM2U0Mjk5NDJiOWY1MTIzZAotODQyMzRjMTg2ZDkyMjY0ODdjNzZkZmVmNWQyNjE2NTc3MWMwZTc1ZjBhY2U3ZTM4ODJlNDlkZTgzMWI0NmMxMgotZTMwZGMzNzM5NTI0MWQ3NjE5YzA1YWJjNDBmNWEzNmY4MDQyYjQ2MWZiNmMzYTUxODFmNzdiMTRlOWU2ZDk3OAotMzczNTZiNGIzMWZhYzM4NTBkZjE4NjkwNjM3MjQzMTYxMDRjNzk5YjZhMmY0MmMzNjFhMzc1ZTRkMjllYmE3ZgotODUwZmUyOWVmYmMyY2VmNjI3YTI1ZGI1NDlhNGQ0YzQ4ZjlmYzlhMmYzMmZhNTBjMWNlNmI1YTU0NWE5NWY3ZQotYmYyZTllZDcxMGFlOTFhY2UxMjgxYTQ0ZTQ5YWVlNDEzM2NjYzA0OTI2YTZkYmEyNGI3MjFjMjExODhjODlhNQotMmE0OTc0NTUwMWNmYWE0MzY0Y2Y0OWUzZWMyYTU5ZDllZTQ2ZjMzMzYyNjM0Zjk3NTg4MjdiMTk5ZmQwN2RiYQotOTM5YmQ3Mzg3MTI0NjU2ODMxODYyZjcwYTk3YzVhMDU5NTk1NzJjNzQ4NjVmNTkwMmU5NTA5M2ZlY2RiZWEzYgotYmJhOWI0N2RhY2U4MDcyNjJkZTBjN2VmMDQ4NDMyNTlmNThhMzIzNDcxMjM3Y2Q1NzMyOThjNWQwYTA2NTBhZAotMmFjYWJkNzFjYjQ0YzYzNjc1MTkyODQ1ZTNkMDFiM2IyOGFmODcxZjM0N2Q0YTQ2MGNjMjhkOWU5NDQwOTQ0MwotMzBlODkzZDI3YjA2MTMyMDYzYWI3MjdhMzhmNDQ3YTJhNDYzM2QyOWFkYWMwMWJkY2NjNzYzNGU2NGRmZGM1NQotOTE0MWY2OWUxMjAyYzRhMGZkNDg0NzliMGVkOTVhNzYwNWM5NDkwMTM3M2UxMTAwYTZjYmZjMTEzZmNjZTQ0NQotZTAzMTdjYzk0YTg1MDdkZDYzN2MzNzY3Njk1NGI5ZDM0YzY3MjdhYWNmMTcyODU4NzZkYjE2ZGQwZTExMzg0YwotMmI5OTZlODVlODJmZDhmZDJiOGY5YjgzYmNjYjM5OGI5OTczNjRmMGRkYjcxZTYwY2NjNTBjZGQ1ZDEyMmVlYwotYzM2Yjg2YTg5ZmJiYjViZmIyMjdmYmEzYTdiN2RlN2M5MDdlNTg3ODBmYzI3NmMyNGZmMDY2OTgyNjkxYTk3YQotNTBkMTQzNjJkMjdkNzkwMzc1YTQ3MTYyZGVjYzUzYzVjMTFlOGE3NDk5Nzg4ZGZkODZhZWZmZmU3ZTY3NGFlZAotMjY3MDZlMmQwNzllOWE1NzFjNmEzMmFjY2M4YzBkY2YyMzUwOGY1ODQ3N2QwNWY5YTFmYzY3OWMwZGE2NDI1NAotMjdhZTMzMjkzZDAyYzllY2EwMWRhZjJkMGExYjA3ZTU1MTVkMzZlMThjYWEzYWIxYjZjNTczNmRmZGVmZTM4NAotZGJjZDI0NGYwYzExMDg3YTg3M2M0NTAxYzZkZTJhNWE1N2UzNDZmZDNmOTJhMDQ1MWU2M2ZmZjZiOTljNmRmYwotNjRlZDg2NzNkYzU0ZWY2NTA5ZDBkMDQzOTI1YmNlMzkwNzJmYzY0ZGRmMmM0OWI4NjAyZDFhNTFlZTgyMmYxOQotZDdiMjEzNWFhODQ2MjZiZmUzZmYzMjFhNmJlYzNhMDAzYWQ5N2U3Njk5Y2ZhMzRiZjQxZjljMmIzOGRmNDc5NAotY2I1YWUzNmM5NWY0MmI0NDIxMmRlNjdhOTZjYTlkMDQ3NTg3OTk4NjM2NjczYTAzMWM0ZWIwM2NmMWE1NTMyNgotZjVkOTRkZGU3NTA4NmI0NGYwOTVlZGUwMDY4ZmI2YjlkMjU2NzU5MDQxY2RhMDRlY2FjYmQ4ZDc3ODQxNTlhZgotYWUzMWE5YzYzN2Q5YTVjMGM2ODQwZGQ5ZTMwZWFjYzY2ZDRkNmZkNmYxMmE2MDNhYTJkYjNlOTg2NjY5MzA3MAotMGQ2OWNkZGM0MTZkNGI3NmNmNmI4MzVjN2JlYmY5MTQ4MTZiODdlZGNkNWEyNGUzNDZlYmEyZGRlZDMwZjVhMAotZGMwMzNlOTNiMDQwYTZlZTdmOGFiM2M0NGM2MTAxN2M3NThjMTFjMmUyZmUzYzRmMTg5OTYyODdhNDhmYTlmOAotZmQwNjhjNDJkMGQzMzg0ZmYyN2M1YTg4ZWY2MzAxMjU1NjI2NjNlZTk1YTY2YjdiNTg4YjQxN2IyMGQzYWU4NAotNmVjZjI2OTM5NDBkNDczM2Y5ZTcwYjA0NTViNjA5N2U3MzU1M2VlZDM0ZGY4ZGE3MTJjMjlkNzYzMjY2NzBiNwotMTNmMTlkNGI1YWRhMTgzM2Q0NmZkNmNmYjkyYjg1ZWI5NDZjYzc0MjUyNzE4Y2M1ZTYwNWNkNmMzYzVhNDZlOAotNTE1MzZjZGRjYzNjYjI0NGM3OGU2MjlmYWI3ODRmZDc2MzcyY2E5NDE3ZmE2N2YyOTJhN2U3ODBiNzgxODZkNwotZjM5MWNkOTFiNjIyMmU4OGMwYmNmZjY2MjA4ODE0OTY1NTExOTY3YjJlZDBkMDc1Yzc3YjU3NzAxNjA4YjY0NwotYjRlNDYyZDNlNTZlMDZjMDQwM2Y4NTg1ODJhNzU0ZGNiZjg4NDFmZTgxZDM5MzU5ZDhjNWE3N2M4YWU2Yjc5NQotYzExYjg0ZjcwMmRlMDlmMjI0OThhMTg5YTRjNjlkNzI2YTYzMjYwNzg0MDY2NTYyYTUwNTQ0ZTVkMDdhZWJiNQotODI2NWMxYzY2MDdiZmM2MDA4ZjJlZGZjOWQwZGU3MTY0NjU0OGU1OWJiMzc0OTk2YTQ0MTJhYzIyYWI0N2RjOAotMzU3MTUzYzdjOTA2MWU5NTk1MmE3MjlhODBmYjQ1ZjM2NTBmYjBjODRhMDdjMTk1NmRjYzA4NTZkN2IwZmE3MQotM2YwOWMxYjk5NWIwYzQ4YzU3YzkzNjdjMDYwMWE0NmNkYWVmZDA0NjA3MzU2ODJkNWFhZmU4NTQ1Y2JhNTg3YgotY2E2ZTgxNDRmZjE0YTI1YjJmY2U5YjIzZDhlYmY3MTVjNWE1NDRiZDY0NmQ1NDYwZDJmOGNiZDQ0YjZkODIwMwotNTRlNGI3Mzc3ZGIzNTFmZjI2YjdiOTMzNmE3ZGNhM2E2MTBkM2E5MjU0MTA1NGM1NDQwNjQ0NDdhYzZkMWExNQotY2YxZDFhMzc5N2NmZTg1ZmI1NWI1NmFjMDFmYmI2ZjQ3ZTljOGU1YzI5MjliZGM3ZWUxNGY2ZDg2ODQ2NDQ5MwotZGY0NzU5Y2M4MDQwNWVmMjcwYTgxNjYwN2YyNDhjNWMxZDVjNTYwMzVhOGZmYzFmYzFiNWY2OWFhYmUyZjk2NAotY2JhNGMwZWQ1NDE2YTIwZjEwMmM4MmJkZmU1OWRkYjRhMTYxNDBjODVkNTVhZjJhYTUyYzkyZWU4NWMzNzg4MQotOWM5NTg2NTcwNGIzY2MzOWRhNjI3MGRmYWNhOGMzNjExZWRiYjZkYTc2N2JiNTBhMDNkNmEwNmVkOTg5MDEwNAotZGEyYTU3NWVhNDVlMTZkYTJlMWZkY2Q2MDNjOTFhZjZiZWI5MzRlYTMzMDIzMTUyYzI1YzI3YzNjNzcxYjU1MwotMWE5YWExYWU2ODRlMTUzOWU1NDk5NzJjOTczMjFmYTA3MTA3NTliNmQ0YjllNTVlZjFiNDFiZGEwMWQ3Nzc4NgotODdjMjJjYjc5MzEwYTkwMDBiYWRlNzRhOGFjOTdiM2ViMmZmMDI0YmZkNjBjMGFkN2ZkZWRiMjNjODA1ZjY0ZQotZmQxMzllMDE1ZTBkMWQzNTkxYmU1OTMwYzM1NmU2YjhjMWE0ZjBhZDlhZjk0ZWRlZDRlZTlhYWE0MzZkNGNmOQotNThjNTg5N2QwNmI3Yzk3Y2RlYzIyNzQ1YzQ2ZTdiMzc2OTVhOGM2NjE0MGY3Zjg0MjExMzg4OTJmNDg1MWMzZgotZDM1NWIxZGUxZDMyMTQ1ZDM5MjQzZDA1OTBhOTBmMWM0ZWMyYzI0NmQzZjM3NzliMzE5YzM4ZDQyMjE1NzZiZQotZmQxN2Q4YmM4ODE5Y2Y4ZWMzMDA3NTMwNWY4NjM3ZDFkZGYwZjcyNTVhZDQ1NmNjMjkwZjEwZWMzOWRkYzJmNQotMjkwMDkyNzE4ZTdkMjY4NTMxYWFlYjM3NzcwMWRhZmE5MzNiOTRjZTc2M2MxOTU0ZWYwY2NlMTlkNzdjOTIwOAotMTU3YzM4YjI3OWM1NzhjNTZiN2U1MjNhZmNjYzkxZmU2ODE5NDgzZGUxOGNlZWJiZTc0YjgxODQ0ZGRiODRjNgotMjJkNGYyOTY2MWU4OWU1NDE3Y2U0M2MyODAyOGU5ZTFjNTQwNjNhZmQ3MTYwODhiNmU4ZmUwY2QxNzAyYzJjMwotMzEyNzM1NzNmNWMzZDc2MGM4YTJjN2NiYjM2MmVkNjUwZWE4ZmY1NGYxOWUwOTdmMTRhZjk3Mzk4ODVhZjE1YgotNDZlZDMxY2RlZjczZGI2NzFiMjJlZmQ0MWZmM2Y2YmJkMjk2MjVmYWU3NTcxZjk1NDJmYzA2Yzc3ZTI4ZDJmNgotM2JhMmM5Y2Y4OWRhNTY0ZGUzYTZmYjNmMGZmOTgxYzVjNDgyYTFlMWRlNzMwMDQxYjdmMWM4OTBjNDUyOGJmMQotOGU3OWYyZmE0ZWQ4YTczOGYwOWE2OGE1YjUzZWRmNmNiY2Y4ODYxMDAzOTE3YTg5OTg5MTQ2YWY3YWIyZTVhMgotODM2Mjc5NjQzOTAwYzI3YTkwNDYzNjc5YTIyZjBjYTUwNzc3MjhmNmFlOGEyODMyNGY5YWRjYzE5ZmE0OTNiNQotZTI0NjVjNmQ5OGNiNjA4ZjhkYzUyY2RkNmM1MmJhZDFhMTUwMjc3OWI2MzhkZjkzMzZlMTJmMDM1YjNjMzEwYwotYjkyYjNhZGQwNDczNjVmMmQyNWIwZWM3ZTA1Y2M0NmYzMWMwNTc1ZWFmNGViZWEwYjY2MGFhMjBkOWU3ZWRmOQotMGFhMDc3ZTMwMDBlMjUxNzYwMzhjY2M5MmQ0ZjlmZGJhZTZiMDVhYTJlMTdhZDAwNGUxMzMwODQ2NGEyMGNkZAotMDI3MWVkMGY5NjRlNzNjYjExZjE4YzJiNzk1ZGJhMzFjM2ZmZDU2NDhjNjNkYWIzOTUyMzhiYTdjMGNjN2RiNgotYjIwNmU2MTc5YzZhZDdjMjUzNGM0NmEyYjljMWQ3ZmU2YmM2OTNkZjM1MTE4YjcwODkzMzY3N2FiM2E3NmNlZQotOWFjMDMwM2MyYzA5NjdkNzE4YTE2OTFmNmE5MjJhYmI2YjM3NjI1ZmMwMTkwOGMxMDI0MjczMWI3OWExYTgyYwotZmNlOWVmYmQxYzZiZDQ4M2ZkODY3YmMyOTM4NjA5ZWU1MmMwMjcxYTdlZDFmZGUxYjg2NjdiOThlMjJmZDQ1MAotODZmNTE1ZmQyYWMyYzExYzUwZmNlOTVmM2U1MDZhYzY1MThkZDRlNTMyZGRiMTAwZDg3YTkyNDBiZGNkYWZjMgotMGM4YmVjNDY3ZDc2MjYxMTY1ZTlkOGJkYWM5MTk3ZWM3OThjODFjZmU4MGUzNjE5ZjQzMjY3NGNhZGY0NGZmNAotM2Y2MTA4OWFiZWIxM2Q2NjVlNzkwMWY0YTFiYTg0MTE1MzMzMjEwMDA5ZDU1ZTA1MWI2OTJhZWJlZTlkOWJmMwotZDAyMTljMjkwMTkxYzE3ZjczMTdhYWY0MDJiODhiYTM1M2MyNWYxMjZlMmQzMmJlZjczZDUyOGM2NWFmMDg0MAotM2VkNDA4NmRhZmY1NzQ3NjI1MzE3OTRmZGJmNjM3Yjc2NTI3MzkxMTI5N2I3NTMzODY5MWU5ZWY0ZDJhZDQ1MgotMjI0NTRjNmE5Y2JiZjIwNTAzOWQ2ZDM1YzA5YTBjZTI4NGU5YTc3Njc3M2E5OGUwOWU2YTgxNmRkNzFkODBjMwotZDgwYWJjYjAwNjM1M2I0YjdjNDhjNzZiZDljMWVkOWRiNzhiZjYyZTlhZDIyMjJlNWJlZTlmZGUwMjgxZjBlNgotMTFmZDZmODk5OTM4Y2VlNzI5YTE4NGJlN2NiZGIwYjg0ZmM5YzM4MGQ2YzY5Y2RkNmUwZjNmNjc4MGFmNjg0YgotY2VjNjM2MTY3Mzg1M2I0MDBmNDdlMDAxNzdmZjFlZTdmOWViOGMyODVhNDllMTM3ZTA4ZDVkNzY2M2RmNzFhYgotNzFjYTcxYWRjMDg1NzA1NTY4NmEwNDc3N2EyZTE0MDhjZTYyOWUwMThjOTc1MjRhZjU1ODg5OTFiZTkyZTRmYQotNGEyNzc0NWFhOTUwYTcyZDQ3OWM0OGQ2ZjhjMzBkNDI1OGE4ODJmMTk5YjQzNTlmOTJhOTYzZmM2NTAyMzBjNQotNzllZGY3NDNmMmNmZTg2YTE5NzI5NmRkNjc1YmYwNWYyNWVkOTY5ZGU3N2JmZGQwYjUxOGNiYjVjMzBiNGU0MgotMjdjNTExN2YyMzViMzRmN2ZjMzI0MTNhOTgwYTM4OTY4ZmY5YjgxNTEyODBhMDI1OTIxNDc5MGU0MjFkMGYzOQotZWVlYmU5OGFkYmE4MjA0MDFjMmQ0N2Q0MTMyY2M2OGNhZTBmNTliMDQ5ZDc0ODlmNjIyNTliZmM1NTA5MWM4MQotODllMjQ4MGRjYjc3ZjY4OTk2NTE1MWI3ZjY3MDZhZjY3NWE4NzEzNzBkMjE5NWIwNzQ1N2FmODgwOWY3YWJmZQotN2QzNjcyZDc2YTc0ZjU1ZWM3NDllZjQwZjc1NWEzZWVkOTZjY2UwMDA2NDRjYTBjNDk3YWZhYWI3Mjk0YWZkYwotMTNjMzIzOWY1NGYzZWVlZTgwOWJjZDkzNmZmNDQ3Mjc3ZDJmMzYxMzkzNmU3YjM5ZTY4M2YyNWI2MDUwNWYyYgotZjQzNDNlZDA5MDJiYWRlYjYyNDk1Y2VmNTM3ODliOWU3NGJhZjg2NmJlMzNlZmU2NmMxYzVmYWE5NWY2MGFjOQotMTU2YTI2YmI5ZjcyY2I3M2U4OTFlZTRiOTA1ZjcyODQ1YjNhZTA1ZTAyNTg3OWYwN2E3YjkxZmQwNjIwNDE0OAotNjA4MzJkNjRiNmJkNWFiZTA0NzJhYTdhZmYwN2ZhMDVkMjNhMDEyMzhiNmY2MjRhZThkYjI1YmI3MWRkZDg5MwotMWZjNjAwM2YyMzI5MmE0MjhhNWE5OWRmNTg2MWUwYWU4NThjMzk4ZDY2ZDAyN2EzMmE3MWQ2ZTYyZDYyYjZhMQotYTFkYjg2YjFlYTMwMDVhMjAxNjE4ZjIyODk5Y2IxZTdkNzBmNjVmZGNmYmY3OTYyZWUwZDBkMTU0MTJkMDA2YwotY2ZlYmQwZTA4OTI4ODhmMjYyMzhiZDFmN2YwOTBkZTAzYzQxZWU0YmE1MzU0OGY0NjlmZGEyZDk0ZjZiM2RhOAotYTYwNmZjYzM1NTRlM2YyNjFiODQ5MGEzYjhjZGUzZWU4NDY1NDI2NjhjZTNiMzcxMzE4Zjk4NjRjNDVhNDIyMwotZmEyYTg2ZTEyMDM0YmJhODY3YzRhYmViNDYxYzYwOWM4ZDQ3ZTE4NDcwM2JkNmM4OTFmMzkwNzZlZTA2YmZkMwotYmZmYTY3OWRlMDdkOGM4ZWVkOWI0YjI0ZmY3NGM2ZGIyY2Y4NDEwOGYyOGU0ZjBmZGI3OGUwZTcyNmE5YmQzZgotMmExYjk0ZGFlZTE4ZmQyMGYyYzkwMmNiZWJhMTNjMWIyODFkMGExMWE5NmIyMDgwMGU0Y2Y5MzlkZDMyYmRhOAotMjVhYTYzZDlmODZmMzgwYWY0ZGQzNzlkODA0NDFkYzRmYmMwNzE5YTY5ZWJjMTZlMTYxNzk0MGExOWViMGI0NAotOTY1ODE5ODJkNDViMDhlNTEyMDAwZTM5MTU0OTBhMWE3OWI5MDhlMWU2M2FlMTI5NzUwZmE0NWRkMzNjMGU5ZQotMmU3NjdhODljNmYxMWUzM2YxOTNkYTE4ZGM2YzgyMGRiZWQ4ZDM3MDQ5MmMxOWFkOWQ2NDA3ZTUwY2I2MjQ0NgotZDNhYjAwOWQ5ZThmM2M1MWVhYzIxMzlhYjY0ZmZhMTliNzA0MDU4MTM2NTJmYmJlMzNmYmU1YmM5NWQ0MGI1ZgotOWVmODMzYTRiMWI1MWU1NjA2NWFiZmVmMTAzNmVlYWI4ZTA0ZjA5NmFhYzBkMjgxM2MyZTcyMWUwZGI5NzM2OAotYzE3ZjBjYzk3MWM5Y2ExOGEyZGIxMTc0NWY2N2Q0MmNlNTE0OGUyZThiMmMwZTEzZTRiYjE2YTI3ODlmMGM0YwotZTdiNjViZTQ1NGVhNjIzMjEyYmIyY2U1YWZjNmI1YjNhZDViZmVkNjUwNjMzNTRiZWNiYzE1MzEzODk5NzdlNAotNjU5OTg5NmQ5ZGRiZGYzYWQ2ZmRkOGE0NGIxNGVjOGNjOWYxMzFkNzNjYmE5MWUyOGNiNTRiMzc2NTVlNGI0NAotZGIwNDU3YWU3YmZkM2M2YjczYmFjZjA5ODYxYTdmZTRiNjY0OTI4MjMwZmEwM2NiOTllYmI3NjM3MDNmZjhkMgotNjg4NzdjM2EzYjFjZjkxNTg5MTU3OGFlYzYwYzFmN2QxZTQ0N2ZjNzc3ZDhlYjM1NzNiYTJhOWNlNDdjOTljYQotYTlkNTJmMmYxMmIxMDFmZTQ4NjU4ZWRjNzU0M2VmODVkZmUwMWI3MmRjNGRkYTU5Nzk1MWVhNDI5OGZkNDQ0YQotZWUzM2IxNGZmMmY5MWI3Mjk3OTIyZGFhN2UzNDY0OTMwODA4NjhmNTZhYWEyMTc2YzlmMmMxMjg0ZTRiMjY3MgotYTNiNzVmYWNlMzlkZjFjOGI3YTgyNWEzYTVjMjU4NzFkMTkwZTQ4NTc0ZTFkMDNhNWZiMDk0ZDQxOGM0N2FjMQotNjg3ZTgzNDcwMzZjYzQ0ZmVkM2Q4NGZlNWQ0Yjg0YTYxZmFjOTk2OGI4ZDAwNGMyODUzOWEzNjgxNDc2YWM0NQotNTY1Mzg5MDFmZjI3NjRjMWM0NmY1ZmZlMDQ4Y2QzYTdlYWZjNmE5ZmU5OGZmOWIzY2ZkZjNhYzAzNWE5ZDNmNgotOGQ3NTQ0MGQ0M2ExODQyY2MxZThiNmI5YjZkNDlhOWJkMDkzNjIwNzM1YzljN2MxMWMyMTY1MmE1MjYyYTg2ZgotYzEwNDEzYTM3M2E5ZTAyYTQ4OGJkOWExNmE1MWZiNTFiMDI3YjJjNWNkZTM1Y2IxYWVkOTFjZTU4NzAzZTFlOQotZWJkYzFhMTYxZDc1NGVlNDM3NDEyMTgyZjdkNTMyNDI2ODQxZTI0NTVhZGQyMmMwMzFhMjE3MTQyNjg4MWJiZQotNDA5MGQxY2JmYzQ5OGVmNDY3NDkzMDhiNzNlYmY0ZGM1YTA2YWRkZTZmODNiZmIzNjgzODhiZjdjMmQ5MDBjZgotNTc5MzJiYTRjOWRiMGYxNWZhZmY3Y2JkNzAxMDUwYTFkYjk4YmRjOWE1ZjlmNDI4OTgwZWNmYjFlOTk5ZjQ2MAotMjMxZTU5YjVjNjJjNzg3OTI3OGYxMGY2YTYxZjc5Y2M5ZGEyNGQzNWEyZDI2OTk2ZDhhNGExMDZlMDgxYjhjOAotM2ZjYzAxNWI3NzVhY2IwMGY3ODk1M2E4MzQwMThjMTQ2YzY1Y2Q3MTViZmI1ZjkwYzAzZmVhYzAxODM5YzZiYQotMTU2ZTMyN2M5NzM1MGQyODUxZGQ3N2U4MjYzYjk2Nzc0MjQ3MmRjMWUzYjhmMGU5ODBkZTlmMTgxNTAwN2NlYQotNTE2MTlkODQzNzViNzc3ZDVjZjMyYTE0NGFmZmQ4ZWYwZjRmZWUyZGYxZjgzOWIyYTVkOTAwZWM4ZTc2MzYzZAotYzgyOWYxZDAzZDIxMTE3NWFiOTgyMjI2NjE2YjE5YzUxODAwZTRiNWQ0YjI4YWJhODI5ODBlYWFjNjEzMTk0MAotMDI2ZTNjMjI5N2UxOTdmYjhmMTMwZmIxNWQyYzQwOThiOTdjODQwNzRkNGU1MGI1YzY2MDZiYjBmMzIzMDkzMQotNTJiMzlhNTg5NjRiNGNhNDRjYWY0NWY2M2FmNDliMzMwYWIzZGQ4NjNmNWViZmE4YWIwZGI2Y2MzNzgzOGE2NAotNzJjNjAxYzIxNTAzN2U5NGFjODk0MjBmZWExM2Q1MjE3NGVkNWM5MzNlOGM4NTI1Zjg4ZTZjZTQ4MjY2MTg2MQotNThiOTA0YmE3ZmRiODY0Y2ZlMDRiZDdjZTYwNzBmYzVlZjU3NmIxZGU5ODVhOGM0ZWVjYTdmZTMyYjkwZDMyMAotOTA5MWQ4OTMxYmMyMWM2Zjk2OTI4OGIxY2FiNDRiYzUzNzU1ZDhkOGYyNTc0NjY4MDNkZmQ1NzI1ZGJiNTgzMAotNGJlNmM3ODRmYjZmOGM1ZTY2ODAyMDI4NzU5YzA1OTcyNDZmYzEwM2ViNjNiNThmMzYxYjE0NDY2ODcxMzU3MAotOGM2YmUwNzFiNTFmZGU0MjVhMGFhNTcyNDk4NmNhNjdlODdlYWNiOGY1MTdmYjMxMDNlNTI1OTViYTAwMmUwMgotODJlNTRjYjgyYjA0Yzk5M2Q5OTFkNzBiNWVhYWM3YTYzOTIxM2VjMGY4MmExZDc3NTBmM2Y2ZTk0ZDhhYzdhMAotOGE1ODZiODE2YTlmYmU3OGZmOTZiZjFlM2NkNTI3OTgwODlmMjc5YTBhMGQ5M2UwMzE0ODgzOTg4YmJhMGY3OAotN2NlNTc0NWY4YjA3ZWIzYjc1MGMxZDBhMTNmYTRiMDMzODM0NjIyMGZmOWZmMTBjZmUwNGYyOWUyYzI0YWVmMAotZjc3ZjY3NDhiNjNiMGM2ZDUzNDYxNTM2MDM0NDUwODIwYzczMTE2Y2M2NmZlYjljN2Y3ZDA4ZTBhNDdkNGM5MgotZWM2MWM1MzQyMDk5YzI3ZDkzYTc5ZDljOWYyNzgxNDJiYTAzYjUxZDZlMWUwMzk0NGFiZTA2M2JhYWMzMjYyOQotMWI1ZGMzMGRlODUxMmYwY2IzYTk3M2NjNDNhZmMyYmU1MzJlZDAxMmMzZWI1ODI2NmNiZWViZjYxMWY5MWFhMQotNDg5ZDAxNzRlNzEzYjk3NmYzYTBiMzZjNTc1ZGY1OTdhM2Q4YjEyZDRjNTQ0MWUzYTQ3OGYwOTMzZWIxMjllYQotZTQ0NDg0ZTA4NGJkZGU3ZDJkOWJhMjNhNmJmMWJiZGQ1MWQ5NmJhNGE1MjA3YWYxMDQ0ZTkxNzE4NmI3ZTY2ZAotYWNjZGUxMjk1YjYxNWYzN2YxMzk1ODI3ZTI5ZTNhMTcxMWZiMmI2YzUwMzc0ZGY0NjhiZTQyMWNjNTMxZWFlNAotYjNjZDI0NzNjOTc5ZDExYzExYmVhZjE0YWE5YjZjY2U0YWNjODIwOGYyMmY5ZmJiNjcxM2JiODMwNmU1YjVhNAotZDQ2ZDExZTYwNDExNGQ5YTVhNGJlMDYxNWE4NDNkMTBkZTU0YWQ2MmQ1ODIzMDJmZmZjZmFiN2Y3ODViMTFjNAotODMwODEyODZjZmEwNDMwMmY3YjkyZjY0ZGJiNDJmM2Y5N2NkZTBjMDQ3NjYyYmU2YTNlNTg5ODZjNTRiN2MzZQotMmFjMWIwZDE5YmMxNDkwMzExMTUwOTMxYWVkMzQ5N2FiYWE3NDMwM2QzZjBhM2YzYWY4NjY3YzRiMGI5MTM4NQotY2RjOWJkMmFlOThhYzMyYTJkOTQzZTA1ODNhMGYzYzc0ZmNiODAzNTU5ZmVhMjExMDk4YjQ4Mzg1ZDNkOGQzMgotOWUyY2RhNjFkNzU4OWU1MzgzZmEzMmFiZmNhYzUwMzU1NTQ5ZjFlODE5ZWIzMTUzMWRhZGM0N2Y1ZTc1OTc5MAotZDM1NTQ0NGYxZWZhNmIxZGZjNzcxM2Q0NDYwMDgyMjU4MDhmZmZiZGM4MWEzYjFiMzc0YzdmMjkwMWUyN2UyYwotNDFjNDc3ZGUwZTUyZTkwMDUyODhiNzE3NTExN2IzMmMzMjZiM2FkMmI5ZjkzNDI4NjVkMGJkZDBiYTYwNDRhYwotMzk1YzJjNjliZjgyYTdhYTliNzc4NDJhM2JjN2I0YTY3NWIwYzMyYTRlNDUwNGQyYTlmZTg3NjIxNzBmNTRjMwotNGRjMzYyMGNkZWE5ZDE4NzdmMjc0NTU5YWM2ZDM3YWE4M2Y5MDM0NjEzMDQ3Mjc3NTg1OGMxODc0NmRiNDU1OAotNGYyZmE3Njk4OTI2YzRmYjJlZWYwOTUxNTc5ZGFlNjNjMmQzYzdiOWUxZmM4MTFlZTVkZGE0ZGM1YjVlNjFmZAotYzBlZDIxNzI0OTAyNTMyMDg3ZGJlZjExYjFmZDBkNzFlY2E5ZjI3MWEzZDFiZjhkZWQ1ZGYxOWRiNjc2MTU0NwotOTdkMGExMmY5NDE0N2Q2NGJhZGU1MjcwNGY4ODBkMGZjYjg5ZjQ5NTg1NDdjNjgzOWM5ZTExMTg5Mjc5N2YyOQotNGU2NWY3YTU0ZTE0ZWEzZDNmNTA3MTI5NzlmODQ4NTJlNTdiOWMxZDcwNDc0YTM1OTNkNTNmMjE2MDNlMDBlMAotZTc5ZmYzNTU5MTRmOWEzZDRhYjFlMTQ0MTBlYWM5OTI2OTI4ZTcxNDI0ODUzNWIxNzhkNmZlOWUwZTg0Y2U5OQotNTlmNjZmYjUyZjM3YTRlM2RmYTU0ODhiNzZkOWFlMmY2MmQ0NDk1YmNhMTFjYzE0OGRjMjBlMjlhNjk0ZmFiZAotZTY1Yzc2MjllYmM0MGZmMGMwZmExMDk2MzE2NTVkM2VmOTg0OGUxNmFhN2M3M2NmZDRhZWQwMmY4ZjEyNWFiNQotMGQ2MjhjZTUyZmNhZTU3N2M3ZWYwYWI2ODhhMmY0ZmE5YTBlMmE5YjEwYjkzMTMwZjBiMzU3ZjQ2NzljMWY3YwotOWJkMjcwZjM0ZjBiZmQ4NjQ1OWI0MDJjNzQyMjRhNjIxZGZhZDZlZDMxNmQwNWUxNWQzMTcwN2ZhZTdhOWI2MgotZjhmNzU1MzczMjY3NDJmMWU5ZDBjNzQ4MzQ4OWY0ZjRmYTM4ZTBmMzI3ZjI0ZmJmYjI2MzA3ZWFkMjcyMGJkOQotNjc4ZjQ1ODc1ZWIwNTAzNjM0MWJhMzg2NjA2MzBiN2QwMDUzMDRkNDM4OGZmN2ViM2JlOWMyNjM1YzIxYWYwYQotMDJkMTJmZDE5YTRlNTIxODFhOWM3ZjIzNTZiMmExNmVhZTRlOGVkNWIxZWEwYzAxNTY1YzI2ODU2Nzg3ZmRmYwotMmFhYWYxMTk1OGZmMzQxNGFiNjJjYTE5ZTk0N2RiNmI3ODAzMGUyYzUyOGYzZDFjMDIxNWNhZGJiMGMzNGY3MgotNjc1MWRhMDNjNjA0YmFlN2I5N2YzNzk4NjRiYjU0YmU5Nzk5YmQzODdlODhkNmM3MDUzZjgzZGJhZTFjZmIwNAotZjJhYzg3ZDEyZGNiZTE3YTUxODM3ODBmYWI0NTg5ZThiMGQ3MDkzNGU4NTZmMTE2MjlhOTFlNmQxM2RhNzcwNAotNzNjYzgwZTBiODBiZGQ0MmE3MWVlZTVmNDNhNGRhYjk5NGVlN2NmZWZmODNkMDgxNjlhYTI5OGM5OGE4NTQ3NwotZGZjNzI5ZWQ2ZGIwOThiNGFlNDdhMjViOGFlNzU4N2I4Y2IyZDU5Y2MwOTg5YzA2MTI5ZmMyMDFlN2M5Yjc2MwotZjhiM2Y2NTFhNWM3MzVlZGM5NzVjZWM0Y2U0NjFlODFhYzlkNWUzYjA4YTcwOGZjNTM2YjQ2Yjk1NjZhNThjMwotMDQwMmFhZmQyYjYwMThkZDA2Mzg3N2I4ODBmODVlMDk4OTVkZDRjOWQ4OWI1ZjI2NGFkNzJjYmVhNDM4YzE1MwotMDU0ZTFhNWVjZTIwOTFlMWQ0MTA1ZjQ2YjA0N2I3NWZmM2JlODY0OTFlNjk0YzFlMmUwM2JmZjM2ODEyZDE0OAotZDk5MjNmNWQ4OWEyOGZiYzRmNDVmYmMzZGI3NGNjMzdiZjNjZjQxYjA3MGQ3MmE0Y2Q1NzE1MjRmYTZkZjc4OAotMzE1M2U3NzgxODY0MTI4N2FlMjJiMWM3MjMzMWZiZmYwMTljY2VjYmMxNzA5NjE1YWQ3NDlkYzc3Y2I2YjMzMQotMzBjYTNkMGZhMDVjYzQ3NDQ3YzE3ZDk2Y2Y2ZGVkNzgyZmY2YjUwNTE5MzkxNWFlYmUzMWYxZjdiOTVkYzlmZAotOTFhMTI0Zjk1NTEyMjQxMTcxNzRhZTFlMDU3NTRkZWRjZWM4MTNhOGFhNDkzNGI3M2RlMWIyMGQ3YzEwYTIwZAotODNhOGIwODVjYzJkNDMxYjg3Mzk3ZTVmODI4NmMwYTgwNzA0MTAxNDc1ZWM5ODQ1YjJiZjdlY2I5YWU0NTdmZAotYWJhZDA5ZTRlOGVlNDExZDRhMjA1MTg1OTdiMDhkNWRkNjZhZmViYmEwM2Y2MzJmZjJlZDUyMDI3MDg5M2YwMAotMzVjZjA3MTZmNGEwOTJmYWY4YTBjMmEzZjczY2E0NmFmZDJhODI1ZWVlMDQxYmJjMmI2NDkzMzBmZTgyMTgwNwotNzA3YTA2ZWQ5MTg0N2I0MzRkMzQ3NDI4NDQ5NDdkNTRlODA0MjJmNWI1YjU2ZjZkYmRhOTM0MDg5YzMyYWQxMgotMzc1YjMxYWY5YWE5MTMyOWMyNTNmYWZkM2NmZjQ4NThjMzlhZTVlZmJlZDRkNTkwODE5ZDJmNTk2M2I3ZTA4YQotOTllMTU3Y2ExYzE4YjIwYzYyYThmN2JkMjc4ZjU2MGU4NzFiNjEyNmQ5Y2RjZWM1MmM2ODM5NDE3YmM3MGRkMgotNDlmYTM3M2NhNmRkNTU3NTQwOTA2NzI5ZjJmYzU0NzZjMzg1OTVkOTU4YWIyYjZjMTQ2MjlmOWUxNmEyYTljZQotOWY2ZTJkZDc2MGU1NWEzOGEzNDMyZTc0MTI2MTM1MzY0Y2VjMDBhN2I2ZGJmMGNkNDg1NTVkZjlmMzFlNzFhYQotOWQ1NzNiYjA3NzA4NTAzMGFhMzE0NmQwNjkzZmU2ODM4ODRhYjM4MGYwNTJjMzhiMzFiMGUzNDgzZDEyMmM0ZAotZDE1YTZhOTNlYWZlYzM1MjNmNGIyNzQ0OTM1ZGU5ZDE2NjBmYjRkOGE3NmQ4MjA0NTg2MmI1OWVhMjE4Mzk2MQotZjk4NjhiZjAzZTRhNzFkYjYxZTAzZmFlOTNiZWExMDkyYWM1ZWM4M2Q3MWRhZDEyM2Q1NjYzMTQ5ZDRiZDBiZQotZTY0MzQzNWFhYmM5MTk5NDJiYmM2MGQ0YWI1NmVjZGVjYWQzMGQyNzA1ODk3NzVhM2ZmNzE4Y2VmMGUyZWE0NgotYjhjNzVmYTkxMTc1MmVmMTM0MTAxODVlNWNlYTI1YWVlNmZhZTc0NDg5MzU1ZDMzMjhlMGNiZThkNGM1NWQ0NgotNDExNGI0YTRjODUzMDlkZmY0ZjJhNWMyYjE0ZmM0ZjQ3NzlmNGUzYThiZDI5MDc2YmFlYzM1Y2Q1OWVjYWRjYQotMDllOTNkOGRkNDc4NjA1MmQ5NzA0ODRlYTNjYjQ1YjM3YzRhNmY3NDI0OWU5ZjVlYjc1ODNiMDE4ZGNkYWJmZQotNjcyNTk3NjlhZTFhOTA0ZjIwYjNlZjM1MmNkMTkxYmJlZDk5OGY0YjJjMDY0NjVkNzM1NWU4MmZmYTcxOGUwOAotOWRmYTVjOGZkYWFjOTVkOGUwNWNmOGI1YTg5OWI4NDg0YzVlYTEwNGVlZjNlNWIyMTQzNmVkMzk2NjYyMjIyYwotOGNmZDAwYjVhODU0YmE5MzM4ZGEyMDVmMTZlNWMwZjQ1MWJjMWM2Y2YzNGYwZGEwNjlhZjVjY2ZiNDYwY2NjYgotYjZmMzkzYTk5ZjYxMzhlMGVjZTI5OWUwYzBmN2YxZDBjODNlMGI5MzZjYWMyZGMzOGYwODI5MjI0NWU3YWZkYwotNjUzOGM0ZmVjYzdkNzEyZWY4Mzk5NzA4OGY3M2FlNmZmMGFiODNkMGFlNzZhNzgxMWNjMDdiNDFhNTdkMWQzNAotMDQ2ODE1MjZkMzI3YjQ4OTA5NGRkOTYxZjJmNjBhMGM2YzI3NWYwOWYwYTE3MWU4ODA1NmY1ODczNWQyZjUwMgotNjVhMTY3ZDEyZmYzMzk1ZGY1OGMzYjkwMWE2OGYwZDk2ZjhlZjU0YWM1NTQ4MDg2MjI5YWRhYzQ5NWZiYzI1NgotYWZlODMyOTkxZjE4MzlhZWRkZjFhODdhYmMyMTc4MzVlNThhZjQxOTk4MjMxNjVmYjk4OTlmYzgzMWI0N2JmZQotNGMzYzFmNWEyNjk2ZTlhNWYzMTBhZmI4MTM4ZWVhMDZmZGEwNjg4ZTBkMGQ3Y2QxY2VmZjkzYTcyYzU3Mjg5ZAotMzMyNTI1YzNiYzYwZTUxYWIyNTUyNmE0ODc2YWZmYjJjNjQ2NTdjYWYxNGIzNGZjYTQ2YTc4ZTQxYjBjMTk1NQotMDFmYTFhMGMwZDc3ZDVmNzAyNjIzNGFmNDg5YjMxNjg3MmU2NGI0ZDQ0OWVmYzU0MGZiMGRhNTUzMDYzYTcxYgotZDhlZTQ0YjBmOWEyMGFkYjlmNjBiOTk4MDNmMTc2MGMwY2RlMzU3Nzg0ZTg3MDQyMTMzYWEwODVlOWEzN2E1YgotYjU2ODVlNzMzNTRjYTBlOWE0OGQ4ODZmZDEyODQxNjc0YmMwNzEzZDQzMzAxODgzZjFjMmY2MTkwYjQ3YTRiOQotOTk2YzBlNTI4YjY1NzJjOTYyMzJlY2JjNTdjNTcwNzM0NjNhZTM2YjViMjk3NDE2M2NmZjc1ODI4YTIwYzQ3ZgotOTI2ZTk5ZmFhYjUxZjE5ZmRiZTBmODliYjcxZmZiYTllYjk1YTgyYjNhNzEyYjU0NTc4ZjY2NWE4OWVkZjE5MwotZDU3NWVkOTViYjg4M2Y5ZDY3OTcwMjlmZjBjYzhhNzU0NTlmYWMwY2NhNDUzMGUxN2Q5M2M5ODM0YThkOWM5YgotMzc2ZDNlNDBmM2U0NGU2ZTg5NWYyNWM5MGE4MDNjZjhiMGYzMDU2MDM3ODA5ZTNlZDYxODQ3NWMxOTlmNDNjYgotYTdlZWZmODRkMzhmNDlhYWZhNGU0NjlhYTc4Y2RkYjg3ZWE3NmE4N2RhMWI4ODhjMzhlMjI1NDk5ZDFiYjA4OQotMzJkNTk5OTE4MjI3Yzk3YjFlNGRlNTIxNDYwZjFhMTc1ZmYyZmM1MDBiYjk1NTc0ZDllYWM2NGNkMDA4OTZmNgotMjc1ODlmZTUzNTFmNDZhNDZkMWZlOGFlMTZmZGM5NDVkZWNiMDhjMGI3ZDg0MWM1NTE2NTM1YWI2NWI4NDcyNAotMDQ3OTZiZDdiNzA4M2E2MDY5NzczMTZkZmZhZWVjMGU4NjgxYzEwZGY0ZGVlZjYzMzU0MDNlNWIwODg4OTU1OAotNDhiZmIxYjg3MDhhNWM0MWM1MTQ3ZmJlZDM5NDJhYzI2Y2U2NjM1N2M0OTA0Yjc5MTQ3ZGNhNTVmMDM5YjY0OAotYWUxOGQwZDZkMzMwYTYyMTMwMWUzYzFkNmU0NzhmYzZmY2VlNGMzMzgyZDQ2MzQ5MWExNjc1OTZmZjUxZjE3ZAotMWFmZGQ0ZWU3YWI4ZjFiMjdiNGVmMmI2NjVjYjY4MTg2MzdiNWU5ODI0NDdmNmQ3YWIyODA2Zjc2OWQyNTRmOQotZjU5ODE4MTJhOTQ1OGEzOWY1MTM2Njc3M2E4OTgwYzdjNmRjZWQ0NDhkODc4YWYzYmMwODgyMzc4MTVkMjcyNwotNDAwOTNjYjdjM2E0ZTZlODZlYzZjZDYxZmE4YWQxM2IyMGUyNzBmOTdlZTViZTE3OTlmMjk2NmEwY2EyYTdjOQotMzJkZTA4YmIwMjFhZGY5NDY2ZjFiODhmZmVmMzE1YjgxODk1NDA1Nzg3N2QzZDU5ZjE3M2MxYjE4NzRmZmZkZAotZTM3NDlhMGRiYTdkNjJkNzA0ODNiMWE3Yzc3MjBjMWU5NWM1OWZhZWVkMGM4YmUxOTEzMTc3YzZkYmFhNjkwNQotYTZiZDFhMTUzOTA2YWExYjY5MTllYmQxYmVmYjlhNTRkOWI4NGNkOWQ1NDhiMWFiZTgzOTMzNjcwZWE3MTliOAotNjMzN2QwMTI4M2I5NTMwNmRiOTJmZTA1OWRhNTJkMTA3ZWM0NzgxOWJkMTYzYjM4MzBjOTg5ZGY0MDUyNjE0YQotOTg2NmIwNTdhZWFlZDQ1NWZjOTg2NGRmMTk2MGU5NzgwNmNmOTUwMTEzOTRlMjA1Mjg2MTE1MjAyNDk2OTgzNgotNzdiZTgwMDhjMjQ2ZjE0YWVhMWMyNmU2MjBmYjMzMWY5NmNkMzJhMjNiMWM4N2Q1MzRkNjc4MTgxYTE5ODc1OAotNGJmZmUwNjlmYjVhMGM2YjYzY2E4YTljZmI2YzNmZDZlY2YwN2M1YmM1OTcxMmVjN2QwMmE1Yjk4OGMzZmJiZgotNjk1ZmM3MDY4YTY0NGQ4ODg1Y2NkODg5ODc1MzI1MzllNWNlZmM2NGZiOTdlYzEzNzZlZjBhOTc5NzBkYjUxMAotNGMxOWI3YTY0YTFiNGY3ZWVkZmVjMjUxNTk5NjIzOGRhZGJiZmE4YWZkODAwNGYxMjg2N2RlMjA5MTJjMjc3NAotMWNlY2E2ZjI5NTZiMzQwY2NiNWUzMGYyYjFmNWY2Mzc2ZTZkM2EyNzJiZTA1YzI5MTI1ZjZkNzRiYmVlNzg3OQotODgzNmVlNjczOTcxYWI3MjRkYzg5ODY3ZDVhOTM5ZGEwY2I0MTY3OGZiYjhkOGVkMzVlZmEyOGRlODY3MjhmNwotOTUzYzljNTg5NmI4NjdlNGI3ZGYzMzIyNTYzYWZmOGEzMWNjYTg5MDFiNTU0MmFmMmM3MjU0NTQ3YzdjMDlkMAotMTViYWE3Y2JkYzczNTI5NjBhYzY1MGE1NDNmMDVlMjkwMzQxZDI0NWRkZDMzMWE1NTZhYzdmYzBlZTdlYjI0NgotNzE4YjcxMDczYjlhMzI3NzZmNjIxNWZkOGZhMjI5N2EyZTliZTIzNzI4Y2JiMjRjNTNlYTEwYTQ1NDRkZGZiNQotN2Q2MjkyNjQwODQwYzc3YmYwMzcyOGMzZTVkMjY2NWVkN2RiNzQxMGM5ZWNiMzJjMjQ5YTQ1NjY0ZjcyZjhmNAotMmU4MWEyZTA4NmI1MzVmNjQ3M2IxYTMzMTlkMTM0MzE3ZWRiZDE4NjRjYmE3Yjc5Zjg5ZWY5OWQxNmM4ODcxYQotMjhmYmM0Y2I0NWY5ODJiYWM2ZGU4MWVmNjM3YTdlMTAyMmE1NTc5ZjczODY3ZTQwZTMxZWM4OTAzNjMyZTMzZgotYjI0YWJlNTNiMWYzYTMwOTc3NzliOTc3YmJlYjQxYzIxODU3OTA5ZDNlMjVmN2JjODhlNmQzZmU2ZjE4M2RhMAotMDEzM2E5OWFlMzkwODAwMTJkZjg0OThiOWNlMzIyZWE5Yjc2MzQzYzJlOGJlMzY3NmYwODYwMjQ3MGRhMjc2MQotZWQ5ZGU0MDdmYmEzOGJlODJkZTYyNGUxNTUyYmU0MGEwZTEwYjU1YWQ3NDM2N2I5MWM4MGI4YmM1Y2Y1OWY2NAotYjc5MDcyMzY5ZDllNDkyZWU2YjlmOWRmMGI5MWFlNjA4YTQ0MDIwZWQ2ODc0MDM4OTc0Y2NjOWFmYTg4ZDZiNwotODExNGFmNGRlMDllNzdlNGIwYTFhMWZiMjdlMjI2YTYyMzg1Yjk2OWJiZWJiNjU3ZWE5MjdmZDg2ZTA1MGZmMQotM2ViZDAwMWEwMjIzMzNmOGNhY2ExM2M1NGY5YjM0NWNkNWI2NTUzYzkwYjRmN2ZiOTQ5ZDdkNjVkOWJmOWZkOQotNDZhM2M3YzUzMWY2YTY0NzlhYWIwZDVhNzAxNWI1Njk1OTc3Nzg5MmZlZWE3OTkwZWRiZDJiNDIzZjZlOWNlNAotNTgzY2FhYzEyNGMyNjg2MjhhOWNiNzAzZGQ5NmFhY2QzNWIxMDMxZTA4YTc0MWQwMmFkZmQ1NzkyNjdkZjc5MAotNWVmMjZhZjE0YjJiYmRjMjJhMWViMzNiNTg3MTlhMWU4NDYzZjI4Nzg0ZjRjMTVjYjNjMjVjZmIyZTIwYTUwOAotNzg1NGE1M2Y0YWIzOThiMDIxNzdkZTUwMGEwNDlkNmM5ZmFhMTNmZDQwYzE5MTc4ZTg3OGYxY2MyNjIyMWM1OQotYjQwNTQ1ZjVmNDQ0MmFiYmEwNjY1NmVhZDVhZmQ5MzhhZGViM2VhNTBjNjk5ODYyZDQ4ZTc2N2MyMjNjMWYyMgotMjQ2ZTU4YzU2OTRkMWUyMzUxMTcxMDgxN2E5ZmQxOGExNjIwY2M2NTEzNDVlNmQzMzAyZDg1MTM5ZjdhNTczNAotN2U0MjNiZTE0NWUxNjViYWY0NjAxOWZlODMxZjk3NjAyZWM4N2IzY2RmYjhmZWExMjg2OWM5OGYxMTVkMWI2NgotNWFhNTg4ZmE4MjQ4NGFjZGVkN2NhMmMxM2ExN2JkYTMwNWY2M2VlMjI2ZWUxZjM3Y2YyNDdmMWFlYTlmZjkyZQotMmZhNGMxZTA0NDhhNWRkZTQ1Mjk0Njk5YTk0OTBhNWVhOTRjZjgxYzUzNDkxZmMxOWUyYWRlNWFmMDA1YzMwMAotYTVmYzk5Yjg5M2VkMWQ0Njk3ODhlOTRkZTgyMzAwNmY4ODQ4ZGM5ZDAyMWYxOWI5MzQyNzhkNDRlOGM3M2RhOQotMzcyOGYzODk1NjNlMTBhZTYwMTdjNWNhZjNiNGIzNDBiZTFkN2QyYjdmMjRhOGNmY2MxZWQxZWI5MjBjZDM2NgotNmZhMTJmMzVlNDU2NzNmYjEyYjQ1YTZlZDdlODQ5Mzc1NzZlNTMyN2M4MmQ3ZjI3ZjZjMDI1NWY3NWVmNGIwMgotY2Q0OTJiMjNlYzFmMzQ2YmRmOGUwMDcwNDJhODJhYjczMGFiMjgwNTU2OWQ3Yjk3OGE0YjExNDU3NzUxNDU0OAotMGQ0MjZkYzRhOGFkODZkZTg1YjIzYWI1YWE4YTUwYTMwYmJkZDhlZjVlOWZmOGU3OTU0YTY5OTg3ZmI1NDAxZQotYTlkMDM5ZDVlMDVlZjI0NWUzYzcwYTg1MjM2OTY5ZjMyYmQxZTVkMjlkNzFhMjAxMzQ5Mzk0NWU4MDM4MzhkYwotNzI0MWE3M2M0YzFmMTQ1NDhlYWFkY2JhNjRhZWJjMjlmZDIyNTNmYTU5YjZiMDM5YmIyZWRjOWU0YTdjOGU4MwotMzE3ZWMzOWEwN2I4YzgyOTdlNGIwOGQ0ZTZmMDFhNTNlM2Q2OTBmMWQxZGI0OWYxOTY0MGMxNjQ0MWJlNmFlOAotZDFjYmRmODUzMzk0Y2Y2NjVmNzQxOTM4NzMzZmJjNzAwZThkODJjNGNmMWQ3MjQ1NjAwOGEwZmU1NWM4YjY3NwotYTRmM2UxOTdhYWM5Yjk3NjM0MzkyM2RkNGM1YTE4MTQ1NDMxOWZjNTA5ZDQ5OWJmMTQ3NDBlZjEzODdmMzU0ZAotZDcxYzNiYzViOWQ0ZDJkOWUwZTdhM2JjNjBjNzljOGU2ZDM0NGJlYmViM2IyZGMyYzM2MDVmZGYxMDAyZjA2MQotZDUyZjcxOGI1N2QxZjZjMTQwNmIxZmRmMmNlMzdlZTQ1NjkzYmE3MjI4NGM1NjUyYjJkODhiMjlhZDU1ZDliZAotNzgwMzJhNzZhZTY0MjdjMTk3NDljYTE1MDNmZGZhNmVkYTQ4NjFmMGIwYzcyNjg0NTg5ZWZlNmMwMWQ5Yzk2NAotMTIwMWI3OWM1Y2UwMzUyMDUxMGUxM2JjNTQ2MWZhM2QyODk3ZTJiN2M2NWViYjU3MWUyZDBjZTMxOTI0OGQ0YQotZmNkZTZkNzBjMzhkMjVmNmJiZjBjMDliNjQ1NTNjM2ZkYWRjNjRjMjkzZGVkYTZlMmVkOGMxOTFkN2Y0MzJhYwotNWJjYzFhYzMxODNjOTJkNTQ1YWJiZDRkYTdlNzY4MTQwYjlmNWE1MDc3YjA4ZGM4ZWFlNjQ3MjdlYWRlM2U1YwotMDVlMDcwMzZiMDhjMzFiYTVhZTM2NmM2NDJmODE2YjVmYTYwZTE0ODc5NWQzZDRjZTA1MGYwOWM0NDNkNmZlMAotZDQ0Zjg4NTlkNDNkYTM5NjQzZDRmYjhjNWUyZTM0ZjFiMzIxNDJkZGVmMDdiMWMwMmMwOWY0Y2M5NTA5ZWFiZQotOTkzNTBjY2QzYTlkMmQ2ZmI4MDkwMTZkYmUwYzFhMjlmZDFkMjVjYzgzMTI1YmE3ZDAxNDNlMDkyMDNmOWUzNAotOTljNmQwN2NjNzhiZmRiODJmNzJjNTc3YWZmMTA0NWNkMmNlMmUzZGUwMzAwMjgzYWU1YWM1NDBkNDk4ZTQ2NwotMGUzNzE4ZTNkYWM2ZGNkZjFjN2FiMmQ1Zjc1YzViNmU1NmJjMzJkOGRkYWNlNGNlN2Y5MjcyYWFlMTg4ZjNiNwotZDZkMzFiMzgwNTkyY2ZjMGRlNDVlYWJkZDg3Y2ZhYTE1MTQzY2NlNzM4ZWRlNDBiZDlhMDZkYjBiM2Q1ZjU3MAotYmU1YjIxYjMyOGIzYWM0ZmY0NmFiYjE5MGVjMTdlNzNkMzFhZjM4OWRjOGU4ODcyODBmODRjYWY3YjMxN2MyNwotMzg1OTMwMDVhYTU4NmIzYzQ5MThmYTk1YTk0MzVlNDVkYjQwYmI1MmQyZjYwMzQ2ODY0NjNjODcyODBiODA4NQotODc3Mjk3YTg3MWRkMTFmYTFkNzgyNTY4ZmU4MTNjYmRhYjZkYWJhODI4YzFjMjY0YzNkYjgwOWNiOWRhNjYzNQotNjQwYzNlOTkxZGM0MWNiMTg0MWVhMTU1NmI3NTYwZDQ3NTI2YmRjMDEyYThmMWRhY2IzMGYzOGVkMGY0NzIxYgotYjk4YjEwNzUyNjI1OGQ2NjgwNGZiMGRkNGM1MmQ4Mjc4NTBkOGYwYTc2NGE1M2NkODFmNjYyNjlhOGNjMTE0YwotMDY0ODJhNWIyYjc1MjQxNjcwN2QyOGU4ODI5MWJjYTAyYjc3NDYxNjE3OTQ0MzdmNjFlN2UzMzUzZWNjOTJjNAotMTUxYWY5YTJmMGIwZTBlN2I4YmUzMTA2ZmE4YjQ1NWU2MGQxYjhlN2EzMGE0NTkyMmZlMDBmN2FjOTAzMWJlMwotYjllMWRjYWU4MzAxN2ZmYTI3ZjE5NmUxYjhkYTZjZmYxYmMyNWMwZDc3NmRiZjY3NTgzOGMyNGM1N2EzMDc4YwotZDJmNmRhZDg3MjJhYTg5OTcwNzhmMjJiZmFiN2U4Zjk5NTUzODE3NGQ1NzdjMjhkMTY2MGU1NDg0MjcwZTYzYgotOTBmZjI5MTExYTcxYmNmZGRhMjA0MDM0YWQ2ZGYwMjZiYTlmZTYxYzAyYmM5OWUwNTUzY2FlODJmYzFmODRhNgotZjhjNzQ0Y2YzNGE5MmIzZmEyMzliMjNmYTJhYTQ2OWM1NzY1YzAyYWJlZWEyNzJmYzkyOGQyNDcxNGMxNGVhMQotMmRjNjg3MWE4Mjk3M2YxYjU3YTIwNjMzNzlkYzQ3MWYwZGQwNjg0YWI1Y2U5YWI4MDg4NTEyYjU0OGMwZTk2YwotNTlmMzE0ZWU4MWY5YmEwYTc5MzA3MjMyNWQ1YjJhNDc4ZWNhMDQ3Mzk3NDYKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjEyMl8wIC9EVFVVSFArTmltYnVzU2FuTC1Cb2xkIDEgMQotWyAvLm5vdGRlZi9kb3RhY2NlbnQvZmkvZmwvZnJhY3Rpb24vaHVuZ2FydW1sYXV0L0xzbGFzaC9sc2xhc2gKLSAgL29nb25lay9yaW5nLy5ub3RkZWYvYnJldmUvbWludXMvLm5vdGRlZi9aY2Fyb24vemNhcm9uCi0gIC9jYXJvbi9kb3RsZXNzaS9kb3RsZXNzai9mZi9mZmkvZmZsL25vdGVxdWFsL2luZmluaXR5Ci0gIC9sZXNzZXF1YWwvZ3JlYXRlcmVxdWFsL3BhcnRpYWxkaWZmL3N1bW1hdGlvbi9wcm9kdWN0L3BpL2dyYXZlL3F1b3Rlc2luZ2xlCi0gIC9zcGFjZS9leGNsYW0vcXVvdGVkYmwvbnVtYmVyc2lnbi9kb2xsYXIvcGVyY2VudC9hbXBlcnNhbmQvcXVvdGVyaWdodAotICAvcGFyZW5sZWZ0L3BhcmVucmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoCi0gIC96ZXJvL29uZS90d28vdGhyZWUvZm91ci9maXZlL3NpeC9zZXZlbgotICAvZWlnaHQvbmluZS9jb2xvbi9zZW1pY29sb24vbGVzcy9lcXVhbC9ncmVhdGVyL3F1ZXN0aW9uCi0gIC9hdC9BL0IvQy9EL0UvRi9HCi0gIC9IL0kvSi9LL0wvTS9OL08KLSAgL1AvUS9SL1MvVC9VL1YvVwotICAvWC9ZL1ovYnJhY2tldGxlZnQvYmFja3NsYXNoL2JyYWNrZXRyaWdodC9hc2NpaWNpcmN1bS91bmRlcnNjb3JlCi0gIC9xdW90ZWxlZnQvYS9iL2MvZC9lL2YvZwotICAvaC9pL2ovay9sL20vbi9vCi0gIC9wL3Evci9zL3QvdS92L3cKLSAgL3gveS96L2JyYWNlbGVmdC9iYXIvYnJhY2VyaWdodC9hc2NpaXRpbGRlLy5ub3RkZWYKLSAgL0V1cm8vaW50ZWdyYWwvcXVvdGVzaW5nbGJhc2UvZmxvcmluL3F1b3RlZGJsYmFzZS9lbGxpcHNpcy9kYWdnZXIvZGFnZ2VyZGJsCi0gIC9jaXJjdW1mbGV4L3BlcnRob3VzYW5kL1NjYXJvbi9ndWlsc2luZ2xsZWZ0L09FL09tZWdhL3JhZGljYWwvYXBwcm94ZXF1YWwKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmL3F1b3RlZGJsbGVmdC9xdW90ZWRibHJpZ2h0L2J1bGxldC9lbmRhc2gvZW1kYXNoCi0gIC90aWxkZS90cmFkZW1hcmsvc2Nhcm9uL2d1aWxzaW5nbHJpZ2h0L29lL0RlbHRhL2xvemVuZ2UvWWRpZXJlc2lzCi0gIC8ubm90ZGVmL2V4Y2xhbWRvd24vY2VudC9zdGVybGluZy9jdXJyZW5jeS95ZW4vYnJva2VuYmFyL3NlY3Rpb24KLSAgL2RpZXJlc2lzL2NvcHlyaWdodC9vcmRmZW1pbmluZS9ndWlsbGVtb3RsZWZ0L2xvZ2ljYWxub3QvaHlwaGVuL3JlZ2lzdGVyZWQvbWFjcm9uCi0gIC9kZWdyZWUvcGx1c21pbnVzL3R3b3N1cGVyaW9yL3RocmVlc3VwZXJpb3IvYWN1dGUvbXUvcGFyYWdyYXBoL3BlcmlvZGNlbnRlcmVkCi0gIC9jZWRpbGxhL29uZXN1cGVyaW9yL29yZG1hc2N1bGluZS9ndWlsbGVtb3RyaWdodC9vbmVxdWFydGVyL29uZWhhbGYvdGhyZWVxdWFydGVycy9xdWVzdGlvbmRvd24KLSAgL0FncmF2ZS9BYWN1dGUvQWNpcmN1bWZsZXgvQXRpbGRlL0FkaWVyZXNpcy9BcmluZy9BRS9DY2VkaWxsYQotICAvRWdyYXZlL0VhY3V0ZS9FY2lyY3VtZmxleC9FZGllcmVzaXMvSWdyYXZlL0lhY3V0ZS9JY2lyY3VtZmxleC9JZGllcmVzaXMKLSAgL0V0aC9OdGlsZGUvT2dyYXZlL09hY3V0ZS9PY2lyY3VtZmxleC9PdGlsZGUvT2RpZXJlc2lzL211bHRpcGx5Ci0gIC9Pc2xhc2gvVWdyYXZlL1VhY3V0ZS9VY2lyY3VtZmxleC9VZGllcmVzaXMvWWFjdXRlL1Rob3JuL2dlcm1hbmRibHMKLSAgL2FncmF2ZS9hYWN1dGUvYWNpcmN1bWZsZXgvYXRpbGRlL2FkaWVyZXNpcy9hcmluZy9hZS9jY2VkaWxsYQotICAvZWdyYXZlL2VhY3V0ZS9lY2lyY3VtZmxleC9lZGllcmVzaXMvaWdyYXZlL2lhY3V0ZS9pY2lyY3VtZmxleC9pZGllcmVzaXMKLSAgL2V0aC9udGlsZGUvb2dyYXZlL29hY3V0ZS9vY2lyY3VtZmxleC9vdGlsZGUvb2RpZXJlc2lzL2RpdmlkZQotICAvb3NsYXNoL3VncmF2ZS91YWN1dGUvdWNpcmN1bWZsZXgvdWRpZXJlc2lzL3lhY3V0ZS90aG9ybi95ZGllcmVzaXNdCi1wZGZNYWtlRm9udAotJSVCZWdpblJlc291cmNlOiBmb250IFZYQU1SVitOaW1idXNSb21ObzlMLVJlZ3UKLSUhUFMtQWRvYmVGb250LTEuMDogTmltYnVzUm9tTm85TC1SZWd1IDEuMDUKLSUlQ3JlYXRpb25EYXRlOiBXZWQgRGVjIDIyIDE5OTkKLSUgQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLgotJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQKLSUgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQKLSUgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3MKLSUgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLgotMTIgZGljdCBiZWdpbgotL0ZvbnRJbmZvIDEwIGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wNSkgcmVhZG9ubHkgZGVmCi0vTm90aWNlICgoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250IHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4pIHJlYWRvbmx5IGRlZgotL0NvcHlyaWdodCAoQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKE5pbWJ1cyBSb21hbiBObzkgTCBSZWd1bGFyKSByZWFkb25seSBkZWYKLS9GYW1pbHlOYW1lIChOaW1idXMgUm9tYW4gTm85IEwpIHJlYWRvbmx5IGRlZgotL1dlaWdodCAoUmVndWxhcikgcmVhZG9ubHkgZGVmCi0vSXRhbGljQW5nbGUgMC4wIGRlZgotL2lzRml4ZWRQaXRjaCBmYWxzZSBkZWYKLS9VbmRlcmxpbmVQb3NpdGlvbiAtMTAwIGRlZgotL1VuZGVybGluZVRoaWNrbmVzcyA1MCBkZWYKLWVuZCByZWFkb25seSBkZWYKLS9Gb250TmFtZSAvVlhBTVJWK05pbWJ1c1JvbU5vOUwtUmVndSBkZWYKLS9QYWludFR5cGUgMCBkZWYKLS9XTW9kZSAwIGRlZgotL0ZvbnRCQm94IHstMTY4IC0yODEgMTAwMCA5MjR9IHJlYWRvbmx5IGRlZgotL0ZvbnRUeXBlIDEgZGVmCi0vRm9udE1hdHJpeCBbMC4wMDEgMC4wIDAuMCAwLjAwMSAwLjAgMC4wXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5ODliOTk3NGIwMTc5ZmM2Y2M0NDViYzJjMDMxMDNjNjg1NzBhN2IzNTRhNGEyODBhZQotNmZiZjdmOTg4OGUwMzlhYjYwZmNhZjg1MmViNGNlM2FmZWI5NzlkNWVhNzBmZGU0NGEyYWU1YzhjMDE2NmMyNwotYmY5NjY1ZWVhMTFjN2QyMzI5YzFhMjExZGQyNmJiMzcyYmU1ODIyZjVlYTcwZDk5ZWI1NzhjN2JlZmQ0NGNkZgotMDQ1YTM2MzA1NmU1ZTFjYzUxNTI1ZWE2ZmMwNjFkY2ViYjMzNzIwOGVmZjcyOTgwMjM3NmEyODAxNDI0ZjY3MAotMGU3ZTYzOTdiMjhmMTViYzEwYjQwMDEyYjBhM2VhZWIyNjkzZThmN2Y2MjdjNGM5YzdjNmM1YmZmMTA1YzFlNAotMWIyYjllOGYwOTI1M2I3NjA0MGQyNjhiODA3MTllMWIzZjVhNTVhYjdiOGUxNTJhNDBlNTkwNDE5MjQ5ZjJlNAotYzM2MTU5ZjhlNTRiNTMyNDY4ZTM2OTY1YTM4NjQ2NzgxYWIwYjdmNmEzZTg1MWZkMTBjYWE0OWFkZmMxZTU0NgotMmZkMmVjNjE1MGRjNmUxOTUyMzA1MGY2MTQ4MzQ4YTU2MWFkOGQyZTI3MjFlZmY4YTU3MGNiMzM0NjBhNzQ1YgotOTI2Yzg4OTMwNGMwOTc1M2MyZDc4ZmIwY2E5NWRjNmRlNWI4YzUyNDc1MmM4MzYwMWU3ZTlmNzNkZjY2MDY3NAotZjA1YWQ4M2ExNjZkYTliZTg5ZjIyZmVhYmQ0YjI2NjU5NjBmNmZiNWJjMzI5MjhlMTIzMGMyMTJlNWQ2OWNlZQotMGIzMzExYTE3MzhhMTE3NDdhZTI2MzEwNjkxNmQ4ZTk1ZjI1YjI1YjRiYzZhZmIwM2I3OWFiYjk1ZGRhNTE4YgotNDFhNDk0NTgxMTFkMmExNDMzYzA0MzYyN2VmOTQ2MGQzMjRmZmUyMjkzNWY0ZjZkYTg4YjhiOTFhZTk1YjM0ZQotMDg0MDhhMzRlYzhlYWMzZjY1YjZhZTNlM2UyNTI0ODY3ZWU5ZDI5MDY4ZjgxZTQzNzJmNDQ3MGJlZWI0ZDZiZQotZWU0ZGY5NTZiZWNjMGNiNzdmODQ5MDExN2IyMmIyZmI3NWM5MzhlZDBhNWUyMDhkODhiYzM4YjJhYjhiOWNmYgotZjFkNTMwODRiNmY0M2RmMzM2NDgxZWNhMGFhMmQ1MzE3YmM4M2ZjMGUxZDRkYjAxZDBiNzcwN2VlZjIxN2U5NAotYTdmOTg1MTAyZGVkMjdkOGU4YjAwOWY3ZWY2ZGI5MWI5MWU3OGJmYWU3YmQ2ODhlMTBiM2RjOWFjNzdjZGVlOAotNDdhYTRkYzhlYzc4MjQxZTU5M2QyNmVjN2E2MDY5NjE1MWEyYWU1MzI1ZDczNmU5OWUwMWJkY2JkZTY5NTc5ZgotOTJlZWVjMjI0YjY3NTdlZWRjNjRhNzU0NTViYjY2NWRmNDJhMGU0Y2U3Yjk5YmYzZTdkNjZmOGZmYzhjMTNmOQotZDdhMWZmN2E5ZDVmZjdhYzQzMzk2Nzc5ZjExYzliMDA4YzMzYTIwNDNkNDhiNjFiODhiMDMxMDRiMTQyNWYwOQotNjc1YjU1OWNhNDMwMmMwMDFlZTgwZDJiNzM5Y2MwZmQxMDIzYmY0ZjFmZjljMDFlODkyZTU5Y2NhN2MyNjAxMQotYjhlMGI2ZDI5Y2MyOWZjNzI3OTJmZGE1ZTdkNWQ4OGVmOThmOWRiYTk2MGM5NjUzNGMzOTljNTQ4NjVlYWI4NgotMGZhMmUwZDZjN2M0NGI1NTNlYWMxNTc0ZDU1ZTc5NzA3NDRkNDc5MmZmZmJkY2U2ZmI0MzY1YmRiYzI5NjViYgotMmU5ZWRhZDllMGViZjBiNjIwZGI0MTVhZDk4Mjk3ZjVhZTgzZDljNzEwNDM2NjU3ZTc0ZDI2ZTgzOTU3Yzc0NQotODk4MzQzMzcwMzVhNzUwMTgwMzk0N2Y2ODgwYjcwZTU2YTNhNDA0YzYyZDU3Yjg0OWQyODgwNGNiZTBmNTg4NAotNDM1YTBlMTJkY2M5YmE0MTRhYmI3MzJiZmJhZTIzNzAwMWY1NTdkZWE1ZTk3MmJhMDgzOGEzYzdjOWViNzVhYQotNGEwNTBkYTBhNTI5YmRmZmJmOTAxMWMzNjA1NjRmZDE3YTAyYzE4ODYwYWY2Yjg2ZWZkNGUyYzEyNTY4NmM5YQotNWUxMTRlOTVjNzFmYzg5YTVkZTljNTg5YmZlNWFjMDQ4MGNmZjcxNjM0NTI2NWQyNDM1ZWRhZTY3Y2ZjNDgwMQotNWJjMDhlN2E0OGQ2ODNhY2RiOTFlMDVmNDY5YzBjODkxOWQ3M2E1ZDA3YTFjY2IxNzNlMzBlNzY2ODBhY2IwOQotMDJhNDBhM2UxMTkxNjE5OGJkNjlmMWEyNmU4ODMzMGY1MDY5MmQwZDU5MTdlOTllN2EwMWIzMjc0MTNlMjRhYQotZTk4ZWE0ODRlNDU4OTdlNmFlNGQ2OTk3YjZlOGJiZjYxYzk0MDZlOTE2ZDU2OTg1Y2IyYmQyOTdlOGFjZmM2ZQotY2YyZDIyODFhZDg0Njk2YjdjNmNiNTg0YmQ4NWNjMjBiYTE0YWRkM2JjM2UyNWRiOTExMjRjMGFjZjIyZTkwMgotM2NmYmYwNGNjNDBkZTMzMTk5MWU5MDc1ZDIyYWI1ZWUwZTg0OWIzNDAwNTBlNmM0MTdjNjY0YTc4MmQwNTU0OQotZGIyZWY1NzJmMTkzYjFjMTJiNDYzNWMyYjM1ODc0NzA0NmRlNTg1OGVjMzJiM2IyZTc5ZDQyNzUwNjU3OTc3ZgotYWNkZDJlZTVhN2M5MzIwZDkwNzQzOGRiYTYzYWEwNWVkNDEwZmM3MDAwZjUzNTQ5MDkxYmU3MWJlNDVkYTRhYgotYTMxNWY5NWI3MjRhNjBmMTdjNzA4MzNlODg5Y2ZlN2VhMjA2YTdhYmM0MzkzY2I2ZWY0N2JlMzcwMGJhNTYzOAotNjgzMTM5MTgwOWVmODM4NGFlYThjMjI3MzVlODA2MmE5ZjkxMDFhZGQxMjVhMzIxZmI2NTM5OWNiY2Q5YzllNgotMGY0NmZiZjI3MWIyYjFlYzgwODMyY2MwNTRiYWI1Y2E4MGQ0NTYxZGEwYTM4MGQ1NmQ1Y2IzZDkwYWU4OWExOQotNDhjZDgyNGViMWU3YWM2MTI3YTZkYmEzZThlYTQwZjAwYWRkODk3NDlkNzdlYzBlZWJlMjZmZDZlYTVkOGNjZQotZjcyMzk2ODFiM2Q5NDg5ODIzNmFlOTJmZjM5MTJlMGFmZTg0YjZjN2UwODEzNGMxNThiNjQwYjRhZWNhYjVmMgotYTkwMDI4ZTY3ZDMzZGYzMWI0NjFhMjg0NmY4M2Q5MDk3OWJiMjI2MThlMmExN2M1ZDE1OWZiNTlkNTE3N2UxMgotZWRmMTMyMGY1OTZlN2E0YzM3OTMyOWFkYjM2N2Y5MmJmMjg2OWE5YTk3Mzk4ZTBjMjBmNWYwMTdjYTlkYjdiYQotYjNiYWI3MmI4N2E3YjZiZjRmZWJkMDMxMzJmOTA3NWMyNzFmMjA1NDA3ODM5NmRmODQwM2RjOTE0NjEzMjVmNgotMTJjZjE0MjFmMzA5OWNjZDc5OWMyYzA5OTQ5MmM0ZjA3MTMzNmQ5ODVjMGMzNjBiMmY1YTU4NzdmZDAwYjZmOQotMmU1OTExZGRkZmIzMWQxN2E2MDEyNGVlOGRhNmNiZGE5NDE5NmQ3ZWQ0MjgwNDYxMGU0ZjczMGRhZjJmMmQ1YQotYjc2N2MzMjBjNjI1NDNlMjY1MzQzMTRmYWNhZTAwNmJhMjA2NDYyMzkwMmM4YWM0NzllZWViYjYwOWU4YzNlNAotMTUxNmNlNDEyY2I0MTBiZDAyNjIzMWUyMmE5Y2QwZjY2NGQ3NjllNGU0NWNiYjc1YjczNDFmMDZkOGUzNzI4NQotYmVhYTlhYjcxYWFiZTNjYmZlNWEzNDg2ODFhYTI0NjA0N2NhMjljYTZiNDQyZmVhZGUyNTRjNzU4MmQzMmQzYwotNzFiNWU2NDVjODJlOTJmMDU3ZWI1Zjg1OWJlZTIzZGFhOTVjNTc1ZWRhYWY5ODk2ZDZjMTA5ODBhMDlkYjM0ZQotMDg0YzhhNzU0ZTMxYjYxOGM2OTkxYmFhODU2Y2I4Njg3NzA0NGUxMGMyZjE4OWIyODRlMzE5NWEyZGI2YjkxMAotMjU3NGUyNDYxZDJmYWU2NWI3MzIxYzAwOTNhMmEzNDk5NmMwYjc3MTIzNTAzZTllZGM2MjNkZDAyYzQ0ZmI3NgotM2M1NTA4NDBiZGY5Njk1ODJkMjI2NTEwZWJmODk5NDRlNTk2ODRlYjJlMmM0NjNlNjk3MDIyNjZmYmNmOGQxZAotNGMwYmU0MDA0OTVlMjI3YjljYjIxYzgwODZmMzI4NzgyY2E3Mjk0ZGNmM2VjZGMxYTYyNzE0MTQzYTRjMWI5OAotZTVkZTFkZDU1NGZiYTYwNTcxMTg4YTU4ZjAzNTRhNmI5ZWY1ODA2ODliNzhhMGM4NTE1Y2EwNWEzNTgzMjYxNgotN2UwYTkwZjY4ZjNjMzA2YWI2MGFhYjIwODcyZmIxNjc2NzNmNDFlOGU4N2ZmMDExMWY1NzljYmQwZGE2OGI1NgotM2UzNWQyZWJmOWYyOGIxMDQwODJlMzYxODczNzNlZmM3YTMzZjYyZDNmZTRhMzkwYjYzYTc2ZTliMjUzMTg3MQotNmJkNTk4NjFmNTFiNTYxZGNjMTE1MTkyYTZmYzIyZDE1YTVhZjAzYmEwOWNkZmE2NmI2NjBjZjQyODhlOWQ3OQotMjZlNzk3MjU2NjU5YjBmZjY0YmI1ZDkwMDk5MGMzY2I1ODhlMWUxODgxMGJjYjAwOWE5MWU1ZjRmOGQ5ZGIxYQotZjJhMDYzYmRhYmQ5YzMzMzJmNGJkYjcwMWJiOTRiNGZkMjQ1NzBiNDQwYWU3NGI4ZDkyNGU0OGU3YzJkZWZiMAotNTNhMTllNWI0ZGYzOWFiZjRmNmZjNjE2MGI1ZmNjYTAwNjA4NDIyYTMwOTFjZDAzZTcyNmIxZWExZDIwM2IzZgotYzQ0MTczNDYwYjQ5MDQ5OGVkYTMxMjE4ODFlYmQyMWNiNWI1NzFkMjFhNjIyOGNjMGExYjAzNWViZTk3ZjI2YgotMGI1ODE3OWJkMjJhYzk1MGVjM2E5ODQ1ODA1MWE4NzQyOTdjZDZiZmU3MzFjNWI0MTM4MTk1MDMxMTFmMWY2ZQotZWJmYjU2MjhjOTU1ZjVmY2FlZDc2ZjI0MDJjZTM1MWY3N2U0NzFkMWM5ODIxZGFkNjI3ZmYyNTEzMTU5MDU3NwotNWZmOTMzNWRkMjhkODVhMTFiZjE1NTc2NTYzMmIzNGEzYWExZGY5YzAxMTM0YmQ4ZmU5MjdlMDA2NDMxOTk1MQotZTJjMWQzNzRjOWFjZmMzMDkzMjcxMmE1YzNlMGZlM2M3ZTM1NWUzMzU2ZTkxMzVhMTQzZjFiNGUyNzM4ZTIwOAotOGY0NDYzM2RkOTMwMGJhZmM3NzA2MjVhNjRiMmJkMjBkNGY2NzI3MDEzMTBlNWQxZDViMmRkNTAyODAyNTM5YQotNjUzNDQ2MDE5MjRjNDczYjc2MThmOWI4N2JmNmViNDk0NzRmZTYyODkxMDk3YjliMzgxZGZjOWRkMjJmNmNlYgotMzQwZWZkOTUwYjc0ZTYxNGEyOTA4ZWVhN2IwZDM5NWUxNTk0M2QwYTkwNzJlMmMwZTZjOTFkOTE0MWM4NDI4MQotNmE1OWYwMjExMTMzMzcyM2RiNzhjMmMyODc2NzVkNzMxNTJlZTNjNjMzOTdmNWVhNjIwM2M3MDc1NjgxMzdlMAotMTI0MzhiODZlYWQxNmQ3MWEwYTU2ZDAwZTZhY2U5ZDgwYWZmNjQ2YjA1ZDgyOWRjZjA4ZGNlMmZlZDFhMTdkMwotODNhN2M5ZTdjMmE1Y2FlYjM4YmRhODAyZTY2OTZiYWIxN2E1ZDFlNWQ2YzUxYjYzNzFjNjQyZDU1ODhhMjk0NQotMWYzYzhiMGNkNTY4MDY1MzE1NzlmN2MwZDEwYTlmYmUyNTRlYTkxMDUyMmQ5NTVjODZkZGQ2OTNiODY2MGJiZAotMTdiMmIyM2ZlYTU3YWYxNWIxNzIwZTQyYzZkZTUzNzA3NGMwNzFjNTBjMTE0YWM1NGM0NWJhMmZlZTAwZDEzYQotMjU3M2JiOTI0MzY0OGExYmUyNTY5Y2Y2OGZmNzhlNGNhY2FjZGIzNGRhZDkxOGEzMDAwNWMzMWYxNzc4MTYzMwotNmI3NGFmOGI5OTMxYmVjMGMxODkyNzgwMDIwYzFhOTI0NzBlM2FkN2YxYmI2ZWYyNmM4MzVmMTNhOWM1NmRlZAotNTFkZjRhNzg0N2M5OTNiODhiOWZkYTlhODk1NWQ4YmRiZjZiYTc3M2QwNjY0NWUyOTJjZTI2ZDlkZjRiYmQ0ZgotM2QyMGY1MjE2MTg1MzgyNzgzN2M4MzdmMzM0MjU5OTA4MThiOTU4YWRjYzNhZTc5YjU3OTFmZjA0ZGFhMzJmZQotNTQwNTBhYTlkMzQ2MDZmMTZjNzc2M2RlNzcwY2MzM2M5YWNiNjBlNTM1NGQ1YTI3YTY4N2NhNmUwZmQ3NGE0YgotNWNmZmVhZGY2YWQwYmE4N2I5MDZjMDkyMDFmZjY1Y2U2YzNmNjIwYmJmYWFjY2JlNTRkYTg4NGI4N2U5MDZiNQotZjUyODVkMzg0MWVjZjc4ZjBhMWVlNGE4MDcyNGRhM2E0ZmQ0OWZmYmFhNjZiZTM0MDJhMjQ4MGE2ZjhmYzE2NAotMzQzYTM2OWUyYjg5NDdmZDVmNThhNDY5NzIzNGM3NDI2ODU0MjFjZTNkNTczOThjNWVkNmY2YjA0OWZkZjM5ZgotNjg3MDIzNjc1MWQ5ZWYyMjEwZTY4MGI0ZDhhNmRhYWI3NThiZDdmYTdkYTk2ODA2MDRlNWJmODVkMTgyNjYxMQotMmNhMDhlODkyMmExZDQ2YWM4NTNmNGJkY2EzN2Y3ZmU4MGQyZDI3ODU0MDEyZTRhOGY3MGJkODU0ZWE0YzE4OQotZWE2OTM5MDk2YjU2MTY4YWViOTcxYWFhZmUxYmNhNjY3MTM3YTc2NzYxY2JhMmZiZmZjZWFmZTNlOThkNTU5MAotZGIzZGJjNDRiM2Y5ZDRlZjA0MTljYWUyMzA4Njg5OGJiMjVhMjIyZWVhMTljMWE3NjAzODk2NzI5MzNlYTdjMgotOGIzMTAyNTYxOWJkMTA4Yjc5ZDUxZDU0ZTIzZjQwMWY0MjE2NWYwZDUxM2JiMjQwOWNlNjZiYTNlODNmYzAwMAotNDM3Mjg3M2ViOGI0NDA1YThmNWJkODhjYzJmMjFkMmQ2MGZhNDAyNDcwNzg2OWM1ZmQ0MGQ5NDAyOGVkMTNiMgotNTc2MmNjNzkyNGQxMDBkM2NlMGRkMzJjZmNhMTI0ZWMxZmNlNGNjZThjMTM3MDcwYTE4ZjA1Y2Q3MzgwOTQ0OQotYmNkZWIwYWMyNGRjZjYzNjc5ZDQ2YWE4YjNhNGE1ZDBkYmZhOTM0MjcxNjYxOWNkMzY4M2RmYTdhOWQ2NjgzZQotNWE3YTAzZGRiNDc4MzNmZGZmODkzNWYyZjAwNGY1OGVkZTY0NDdhZGNlNGZkYTFiNzM0Yzc1YzUyZDE2YzQwNgotOTQyOGNkZjY4ODU1OTQ2MDE0NTg0ZjdmZTQ5YjAzZjg5NmUwMDU0Y2ZmZmY1ZGE0NzI4YmY0Y2UxZDg5MjA1MgotNzAxYjQ4YjgxZjU4ZjVlYTM0NGU4ZWJmZTEzYmFhNzBjYjQzY2U0YTk3OWQ4MjI1ZWQ3ODQxNzY0ODY3MmU2MQotMDdlYjdiMzFmODFjZjUyYjQxMzYyODgyMDBlNjQwNjU0ZTgzNTM0ZWFkZjA1MzAxZmFmMmYzYTg1OTc3MmMzYQotNTQ1ZmMyMDQyOTExOWZmMDBjMjU5YWE1ODJhZjRlM2NkZTFjOTk3NjlmNGU0MzNkOWIxNzhlZGNlY2YxNDJhZAotZmZhYTZkYTAwNGE5MGY1M2U3MDA0OGFhOGQxNWEyNmJmY2Y3YjAyZWQ3MGJjMjYyZDE2NWU5OWY4N2NhNzQyNAotMGViOThmM2Q3ZmMwZDQ5MjZhZTQzYzhkMzIyYmI5ZWNhMjRhNGM0NWY3ZGJiMGZlYWE5YTkwMGUzNTIxZDZiMwotODdiNTJhMzBhY2IyOWM5MTRiMDY3OTNmMTlhMWVmYmUzYmU3ZDBiOGUyMGNhZDk5ZDI5MmMzMTViMTIzNzZkNQotNjU1MTIxMTg5YTgzMzEzMjcxNTc2MmNhNzExODY4NTgxNGY3MWFhYTA4Yjg5ZTQ2NmM3NDY4YmNhMDFiZDk4YgotNjNlYzdjYzNhYzQxZGQwNmM1YmJkYTg2MjI3YWZjYzFmNzc5NmI1Zjg3ODk0NmMxMzViZmE3NWE5OGRiMWI1NwotMGYzOGM0OTc3MGFlMjM5ODZmZmFlZGJmNjY0NGRmNThhMjUyYzI5YWM4MjFmNDU4NGI5NmI1ZGRhZmE5YjNhMQotYWEwZWY2ZDE3ZmMxZTc1OTE2NzUzYmM4Yzc5OTQ5N2UxMjc5ZWM3ODNlYTg2ZGYzMDdjZDU0YjU4YzJiM2ViYgotZmQ3MjIwMDZkMTI3ODM0YjA4OTY3MGU1ZjFlN2JhOGJjNGEwZjYxODFiYjRlZmJiOGY5OWU0NDc1MTgxNDQ5ZgotMmZjYjI1NWRhNDIzM2Y3YWIwOTdlZjAxMDhiYTNmYzEyY2RhMDYxODg3MGVhY2I5ZmU0MTk1ZGZhYjE4MjI0MgotYmFlMDk1NmQwOWUzODhkMTBkYTJmOTQwMTg2ZTI1Yzk5MjY4ODZlOTgwNmM3MDEwNWRjNzUyNTlmYjFlNWRhMgotNjc1ZTRlMTE0Zjg0ODYyZTZiODIyYTEwYTlkMzY0YjFjZDEzZGNhM2QzODViODM0OTljNzE1ZWNkNzU5ODc2NgotYjIxNTkxMGYwMDIzNThkNTkyZmMzNmQwYmQ0ODJlZTljYzMzODM3OGVhMTU2NjgzOTUyNmE1NzgzZjI1MDgxOAotMDc4Yjk3ZDczYjFkNjJhMWFhZDNkNWE5NzUzYmZlZjIzZjdiM2U2ZDViZDMxOGM0NjNhYTA0NDkwYjkwNjNhMAotZTgzZTNlNjgxMDliMTgyNzIwZDJiMWMxM2I0OThmOGY0OTU2NjFjMGY0ZTY0NTViOTZhNmE5MmZmODA2ZjFjYgotM2IxYzZlYWM4MmQ5YTY4N2I4M2M1NzJjNDJkZjIyYmVhZTMxZDEyMzk3MTkxODZmMTRlZjYzN2ZlNGU3YzdiMQotZmU4ZjRmMWJkODM2N2Q3NmQ0NjdiZTk1YzM5NGE4MTgxOThkOTIyYmNhZWVlZTM3MWZlMTdlMzk2YjI3Y2VjNQotZjA1NTQ3Nzg1ODdmYzdkNzhhY2RmMzE3YThlZmRmYzgyYzJmNTdiNjQxMWIzYWI2OGY5NmUzZTdjZDMyMWE2ZAotNDc4MzQzNTA1NmFiNWEwMDk1NzI2NDM1YmU2ODg1YmYyNzg0ZmIyY2JlZmZjMGY4MjQ4ZGNkNTk0ZDM0YjIxYwotOThlNjdkZTUwYjY4NzZjM2Q2ZDRkNGNhN2NlMGI5MDEzZWJlNzU0YjEwNGRjZmMwNzE5YTEwY2RkOTk4NWUxOQotMmNkZjRlODg4NzZjMmRkNGU3OWUyM2FmYTcwYWI1YjQ3NThhZjMyZWU4N2I4NDE1Yjg4MWFjMTVjNWMzZTFiYwotZDE3YTViOTYxZWZiM2E4ZGM5ODdkZWRlZDZmMjhhMjQwZDY2ZjAwNGFkMDVjZTFjNTUxZTI5YjQ1NjY4ZGIyYgotMzA1YzliMWFmNWNkNTM4OGEwODAyZDgwZjE4ZTBmNGJjODA2NWJhZjM5M2ZmYWI5YTRkNjc0MzEyYzIwMzNkMgotN2M3OGI1ZTk0NjFmYjA5YjliMmNhYWFiNzBjZWIzYWZhNTc0Yzg5YmM2MjAzMjgyMTFjODU2NTZmNjNhOGRkZAotOTdjODI3Mjk3MzI3Yjc5ODBjMmZlMGFjYjFjMzQ4NjZhYTNjNWQ3NDA4ZTI1N2ViYTNjNTNkZTgzMzhiZGY5NgotY2I3YmE1NWZlMzFiZGRiZjc4MDcxNDhjMGExMzJiZGJiZThhMmMyMWEyM2UxMTg4OWRhMTNlNDI5OTE0ZjdmNQotNzEzMjkzNjM1OWEwY2M2NWU1OTkzY2FmNTI5MDJmNzZmNzVkNmNiNDZkZDIwYTNjMGJlODBkNDVmMmM3NDZiZgotMjM2NzMzNDYyMDgwZmJkYzhjNWMxZGJlOTc4MWY0NWFiYTc0YWY4MDMzYTZlZjJiZGIxNmY3YjA5MzBkNmI2ZQotN2NhN2ZhYzhjZmIyZGZhYjhjMDYzZDk2MTA3NzU4NWQyNGU4ZmJiNWUwYjBiZWU5YzQ1MDliMjMzNjFkZDA2YQotZGQyNTc2NzgzM2I5YTc3MDc4MGIzMTFmNjA4Y2FlN2FkZGUwMDAyOTdhMjY3MjIxMWYwZGU4Y2Y3ZjVmYmM2MgotNzhmYWJhMjVkMDM1ZmUzYTdjYzNhNDc0M2MwZWZlMWM0YTVlOWNhZGYxZTA1YmM3OTgyNjQ4ZDVjOWZiMjk5MgotNGE5ZWUxNTcwYmEyYWIwNjhjY2UxNjg1NTIyOTkzNjFkNjJhMmJjMmMwZGE0OGVlOTRkMWNlZGYxZTJkMjliYgotNDM4NjRhYjViNzcwYTE0Yzk4YTQzMmFiNzZjMTc5OTg5MDRmMDUyYTUwZWY4NDUxMDA1MzNiYTVjZmIyNGM4NAotZGE1MzU4MWVjNGYyMjAxY2E5ZmRhZTc2ZWYzNjU1MTUxODhhY2U0Y2ZjOTM5YWQ2ZDE5MzQxM2NhN2VlMjI1YgotMDEzN2Y0NjM3ZjA5OTUyMjEzYmU3MjVjYzdhZWM1NzliMmZlODVmN2M2YWYxOGQ3MGM0ZmRhMDU1NzU2N2U2NAotZDQzMGYwOWFjYTdiZjI4OTg0OTc3YmEwZjU4NDlhNWE4NjcyOWQ1NjQwYmJlNGMzMGIxN2FiMDMyNjJhMDJiZAotOGVlMDc3ZWFkN2ZkYWVmZDM3YWYxNjAwN2Q4MzcxNGFjYTA3ZmNmODgyYWRjNDc5MjU4M2FhYmIyNzk1NzlkZgotNjc0MWY2MzdjZGY4NTk4ZmI1ODI3NTI4NzcxNDQ0YjBhYTgyZGQ1ZTAwZTcwZWRlZmE3NDA1YTFkOGE3Nzk3YgotZWYwMjFhNTNiYTY4YzdmZjY3ODBjOTRmMTM5M2QxNzQ1YWIxZmQ3YzcyOGM2MTEyNzY2YTNjMmUyMWRmZjAwMgotOWU0NWE1YzU2NjhmOGIwODRmMjJjZDZhNmNmYjA1NmNmMGY0MDJhNzNiMmMwMjExODI1OTM1MmVmZjZkNjgwYgotODc3Y2UzMDI0YzM3ZDUzMmMxODZmM2Q0YTk3NjAzNzA0Y2MwZGRiMjVjYWMwMGFlYjRjZjYwMWY2ZmI0NTY1NQotODkzOWFiOTYyY2I5ZTE2YTI0MDA5MzhkMjI2MDU2NTM1ZWJlNTcwN2NmMGE4Njc4YjU0ZTZlM2ExMDNiMmVmZgotMGJiNzMwNmQ3YzdjM2Y1MjNiMmFlYzI2N2E1ZjFlM2Y5OTIwOGQ4ZWM5YWIyN2Q2NThjMjZmNjM1YzI5ODRhYgotNWE0ZDIxNDc2OGM2ZGM3NzViY2M2MTY4MzgxNTlhYTEwZDViZDkzY2ZjOGIyZDgzNmVhZTVlZDQ4MGZiNmRkYgotMjQyNTNhNjJhMWI3OThiZmE1MWIwNjhiNjg4OGI3NmQyMjMzYjZmYjExNzk0ZjE2NjI1NGNiM2FjOGNmYjY1MAotNDI5ODY2ZGJlYjhkMDllNmQwMzg4OTg5OWE0ZThiZmM5YTg1NWVhNDY2MGY5MjhkMGFhZTgyNDdlZWMxNjY4YwotOGU3OTgzOThkNTNlNTJhNTY4NGNhYTU5YzQ3Y2IzOGM4ZjEwMDlhOGFhMTJhMjY5YTU4NzU5Mzg3NGMyZGM3OAotMGJhOTg5MDc4OTEwZjNkNzAyMTExNDc3NTFlOWY3MjY0ZDZlNjRmMWIwNTQxMGVkMzQyN2JiN2QwNzA0NDQzZQotZjJiYWViMGZiOWUzZjFjMWMxNGIxNzhlNzE2ZmViNDY0NDI0MDQ0N2EzZjAyMjExMzUwZTM2ZTFhNTg2YTA0MgotOWFiMzM2YzZiNDRjMGQyOTc3Mjk0ZTcwNGU4Njk1YjZkYWYwNzliY2EwMzNiNmJkMzQ4NWViN2E3ODU4MmZiOQotMzczNzE2MTM2YzYzZWFkYmFiM2EyNTc3NzM4ZjU1M2Y4MTEzNTgyOWY5MTE4ZjRiZmUyMGNkNTExOTBiZDdjNQotMTcwMzVlYmU5N2YyNmIwYjU4OTczZWE5YjVlMGQxMTFkOWVhY2YyZmE1NGIyMjNjNGY0MGMxMzlhYjg5MWE0MQotYzdkNWJhNTMzOGJmZDU4MDkwZWE3MjdjM2ZkOWQwYzAyMTdjMDU3OTg3ODc4ODFkMDdjZWZlMDE5NTE4Y2NkZAotYTdhZDcyMzA1ZjA2YTk4NzE3Y2RhODBjNWRhYWFmYzUwZTNjNmQ3OGQyYjVkODUxYmVlYzQ2NzMxYTZjMjllZAotZGRjYjkwODlkZTVjYzJkZGI2OTZkM2I3ZGUzYjY3ZjA2NjUyN2FlMjJjYzFhZTYyODVkZDFhZDQyZTA4MDllZQotNjU4MTIyNjhkMjhlNzEwNTg1OTI2MmU5MzY4YTNhYTdmZDAyMDdkNDdkZTVlYTU1OTE5MjdmNWU1NjgzODZkMwotYTYxZmNiZTg3Mjk0NWEyNzJjNzUzODRiZTFlODViMjZhYTA5NDcwNDcxNWYxOTU3ZGUzN2EyZmRlMjU3N2JhMwotODUwMDBkMDcwOGZjOTE4ZDUyMzYwY2RhODI4Y2VkZDE3Y2I3ZDYyNTE1NWNlYjY5MzFhMjkwMjViNDRlYzhmYwotMzY3OGZhMDgwMjdiMjBmYjk2NDlkMDdmMDE0ODRmMmZkMmUxNzQ2ZjI5MGUzMjQzNGZjZDRkMTVhY2YwNzA4YgotZWUzZmU5OTQ4ZDNhZTE0MTc0OWI0NzgxMDU1OGQ3MWQ1OTI3MzVjMWM4NmVlMzc1YmU3NDEzYjJjZjQ2MjY2MAotMGIxMTVjZDA0M2VkZTU2MTJhYjg5NWNlZTA5MDlkYThkMTY1NDA4Y2Q1YzRjMzQxMTRlZTRkN2ZhYjRjMzdiNgotYTMxY2I4MjljNGJhYjJkZDA0YjFhNzA5N2RlYzI0YzY0MjljMTM0ODI2NjcxMTY1MjJmOTRlZGM5OWRlNTUxYwotYTY5MzM2MmJlNGQyNzdlMTI4MjliYzQ2NmUxM2QwOTg0MWI1ZDlhZjUwNGJlNGVhNTllOWMyNDU5ZWVhNWFjMgotYzY3OGUzZmEzMGNkZmM1YWI4NTVkNTZjMWFkODM3NGY5NzY5YTZiNTc1YTFkZWU1YWFhYWI0ZjcxNmRjZWJlMAotMGZhYjhiMGI1NTIyMjk0Y2UzMTY0Zjg0NDY2NzlmY2M3YWZmNWJmNDkwNjJjZWE1OGY1YzY2MWE4OTVhZTc1MwotODg5MTUzNjA2NmY4NDE2ZmY1ZTM1N2ZjMzRjYzM0ZDZiNjhhYmUyZmIyYzU0MGE3MTIzYmJmOTBkMjY3MWY2NQotOTA1MTViOTZjZGQxYmQyYzEzOTZiYzE1NTAzY2FhNGNjZDNjZTI4ZTAzNjE4MDFiZGM1ZGE5ODg4N2IyYzM5ZAotYjg0YTBhNGRlNzg1OWM3ZGEzOTRhY2M0OTc2NDFlY2UxMmFkOGE3ZDYyYWM1ZjhlNmJkYTA1NzdmZTY0ZDU4MQotMzUzOTBhMzdhMTU3MGNiMjViMjNiNzQ3YjIzNmYzZjI2MDZhM2ZmNmU0ODdhNzgwNjlhMDY4ZTdhZjEzYThlOQotMzE1MDE2ZWJiMjU1MmY2NDQwNjU0MDhhNjlmMWJiNmZlZDUwNDg2YjJhMDVkNDAzY2Q1NmVjNWQzNjcxYzljZQotMDkxOTk1ZDM4NDQ5MWI2NWVlYWYzMzA3ODUyOTIzODM0MmMzMmE0YjgxNzg4YzMxZTYyYmEwNjE0YmFmY2Y5YwotM2MxY2Q0MjJjNjA1NzQwYTg5Mzk0ODdlMjZiYjkyMzNkNGNkZTY4YWZlN2EwY2FkYzNhZWNkNzM5YzljNDI1ZAotMDljYjUwYjRiNGJlMjgxMTViYTdmYzU5YjU0MTUxM2NkNmZkMDgwMzljZjQwYTFmNWI5MGE4YmQxMjYzODA2ZgotZWMzNWFhYTQxMDBlY2MwNTQxNmVjZTJmMDYxY2ZkYmMzMjFjZjMzMjRmMWVkYTkxOTc2Y2FiYjhkMmQ5YWNjOQotYjkzYzU3NWMzNjNmYTY5MWUxODIxNTMxMTQzMTg0MWRlODE4N2EyMGQ2NjY0MzQ4YzdhOGFkYjA2ZTg2N2QwMgotMDdiZDQ4ZmU4MDY3MTY4YzQ0MTJmYzgwY2RiYTYyZjhiOTIwOWY1NDA3NjcwYTI2ZGIxZjdmNWQ2N2M0ZDIyNwotOTBiY2QwZjFlODY0MGU1ZjkyODhjNDEwNDg3MjkwODA4Yjg4Zjk0MjFkNTA2Mzg2YWM5NWNkOTU5ZmQxZWQwNwotNzc4ZGUyZjYyOTU4ZmY0MDlkMzczMzJhYTRiYTg4YzczNWYyYTU2ZTRlNzQ2ZWU5OGI5NjY3MDcyODc0YjIxYQotNWY5ODIyNWFlZWNhYmY1Y2M4MThmM2ZhNTRlZGRlMTc4YjQwYTFiMWQ2ZTJmOTAwMzY1ZTJiNTAzMzQ2YjIxMwotZGRiNDNhMjY5YzVhOTczZDMwM2RiZjYxNWFjM2NhYWJmYzM5ZmUyMTQ0NjgxZTdjZDYzMzA1NmJjNzdkOTVhOQotMTZmNTQyOTE1NzVhZmY3YTNhNGMxM2VjYTYxYThkMjYxYjNhNzQzMDdhYWMzOGI1MGMwZTU1MjIyNjI2ZTcxNwotZGI2ZTEyMjU0N2IzYjhhNzY2ZmI4NzdkZWVlYTUyZWNlMmU3NGJhMDJjYTc2NzZmMGUwMzdjZmZhZjI4NzM0MAotYzE5YmJmZDkzNzhkOGU4OTgyMjVlZGEzZmJmODE0YWQ1MWY5NzYyNDFhNzI4NWRiY2M2MjYxMGZlOTk4ZWJjOQotN2RjNTk2MWFmOWQ3MGE2Nzg2ZTg5MjJlNzkzMmE1MzlmMTYwNjEwMTQ0MGM2ODU1ZjIyODRlYjM0YTg5NWNhZQotNDQ2MzdiNmEwYjFjNjM4NmMyMWYxMWYyZTdlZTJhZGYwMTJlYTZmZjM1MzE0OTgxMjI2NTA1YmQ0YjBlYTI1ZAotMzcxYmU5ZmI2ZmMwNDI1ZDhmMzc0Y2M1MWZjYjE1NjAwZmY3YTQ5YTQxMDRiYzI5YTM2OWM4MzM2NDM4YmQ0YQotNDViN2M4ZmQ1MjU3N2E0OWFjZGIzOTRjYmJjMTZjODQ0YWQ5OWY4NWI1YWYxZTgwMTg5MDBkNTA4NjJkN2M3YgotMDQ1ZWU0YmY3OTcyZWIwNWFhNTY5NmEwMDRmM2VjOWJlOTVjNGMxNDE4MGM3YzgwOThhM2EwNDQzYzBkZmFhZAotOTFlOWMzYTM3NTA5YjI5MDY2YWYxMTJkYjc3MTA3YjlkYWYyZTQ1ZTcyZGNkNzg2NjBkNWQ1NjAxOGNkZjFlNAotY2E3ODc1OTNjMzFhMmQ2ZWY5MjVlMzdlNGVlNzdlNjg3ZTE0OWJmNTA2NjY0OTc1Y2NiZjVmZGMyMGI1YzMwNgotOTg0MjA4ZmZiOWVjMmY3OWU3NmE3YTAyOWNmNTk4MWZkMmQwNzE3NjA4M2Q3ZmEwZDlmYTdiMWU2YzZkYTlmZQotNDIzYmYyOTAxMTQ3OGJhMzlmYmRjN2U3N2JhMjMwZWU3Yjg5NzI4YzkzMTI2MDJkZGEzNTlmMWVlNjViYTM2MgotZDFmMzY2NTc5NDMyNTVkNjJmMGM4NGZlOGE2MzAyMDRhOGU2NGQ4Zjk0MGU5ZGRhZjNjMmRkYzE2ZmQxMzFjNwotZjMwMmEyZjlmYjY1ZWNjY2FkNDYxNjk3N2IyZWM3MjRmYzZhNGMzOTQxNzk2MmUwZGUxZGNmYTY5YWVjOGEwMgotMDcxNzkyNjY5MzViNjU1ZDIwYWYzZDQ1MjI4YWMzNzk2ZmQyYjdiNmUwNTgwOTA0YTI3ZmUwYzgwMjNmNGZhMAotZmQ3MGU0NjllNWYzMDk2OTBjNmFiNzM3ZTllMGRkMWRiNTdmYjMxMjM2MmI2NGZmMTk1NTQwMTM5NWI0MjA4NgotMDdlN2Y5NDQ5YTg5NTMxNDlmMzI0YjRkNTc4NWMyYTBhNGMyOGViNDg3ZmQwYmZkNjU0NjJhMWE0YTc0MWJlMQotYjE4NzYzMzA5MTJlZGVmY2FjZTFkZmFjZWE3NjI4ZDE2YTQ3MTZkMzk4OWUxYjMxODMwY2JjMmJmOWZjZTE0NAotOWYwZTgwYmRjYmNmY2Y0NzdhMmMzMGE3MmVjMjI3YjIwYTBhZjE2ZmNiODM1NmJjMjA1ZjE4YzYwODhjMWQ2ZAotYzU3OWYxZGNkMjNmZmExNDdkNzI4MjFiN2E2M2ZjMDExZDU3MThmZWQ0MWIxNmVhMWQ4M2VjZDhkMmFkZTI4OQotNTRlYWExMDVmODJmNzc3YjY2MzVjMTYwZDBlM2Q2N2ZiZmYyMDgwZGIyYTk5ZDQ4OWEwNzBkODY1YzM5YWM5ZAotMmE4OGFiNWZiY2UwMTA5MTllZGMwYWIyMTNhMDkwMzhmYWM2ZDNjODFhNDk3MmUzYzU2ODNmNDk0ODBmYTVmZQotYjhjZDMyNzkzOTgwMjhkYWI2M2VmN2U4ZTFkZjg1YTYzZjkzMjczZjE4N2Y4Zjg2MTljMTRhYjgyNGM5N2MzYwotNzBkMDZmYmMwYTFiNGJlMWIyYjdmMTFlZjQ2OWFkZWY3MTYxN2IzMDRiNTFjNDYyYWIzYzZjMGU4MzFjOWFkMwotY2I4MGM1ZTBkMGZhZmQwNzlkN2Y0ZjI0NWQ1NDJlYTg5MmM2ZmUzYzNkNmQxYWMyYzkyMzcxYjdhMzNhYWI1YQotYWI4Mzc1YjRjYWU5NjYxYzlkMzE0OTk5MDkzYjJhMDRlYTFjYjY3MWM5ZjA3ZWNlZmJhNjE1ZTAyM2NiMGY3MgotYjZlZWQyMzFhZDMxYjFmNGQwM2U4MDdlNTZjMWUxNjYzOTg2ZWVkNjVlM2VlNDdhMmRkMTFjMTIxMTIzNjk3MwotNGI0NjA3YTY1NzBmNTM0ZGViYzcyYWMwNmRiYjIxNDlmOWVmYjc5M2E5MTdiM2I2MDQyNzFmYjc2NGZhYjg3MQotZjdhYTVhNWZjYzU0NTMzOTUxNDU0ZmU3YWZhMjljZGRlZjk2ZTk1MWFhYTliOGVlYjNmOWI0MThiZDEzMjk3NAotYzYwMWI2ZmEyOTQ3MWRjMzQ4MTRmYzgxYTFlMWE1MTU1OTUxYzEyMDIyYWFkY2U1ODI2MzAyMjIwYjE4ZGZjMwotZDMwYjIyNzdkMDhlN2NjN2E4N2JmMWI4ZWM0NTA3YjQzY2VmYjExNzExOWQ4NmRlM2JlNTFiZjg3MDM5MGVhMwotZDhkYWEzZjc0Y2NkMzcxMmQxYzAwMjYxZTg1M2RjMzA3OGRkNDExMTg5ODcyYTUwZDg1ZDU4Y2VlOGZmZmIxZgotMDI4ODAyOTQ5MDQxMmYzZTU4ZjgzZGFkYTA4ZmE2OTViMThlZmQwYTRmMjg5NzA1Mzg1YTQxMWZjYjJkN2E0NwotZmZlMzg5NzdmY2UxODE4OGMwMDQzYzQ0OGQyN2UxNjBlZTc1MmJlMGQ0NGQwZjgzYjZiZjY0MmM2OTRhYTUzMAotZTIyM2FlZmEzZmRiMTdlZTdhZWFiYTc1YjlhODZkN2NiMGY1MGFkNGQ1Y2U2OGQ0ZWQ0OGNiMGMxODhmOWRjNAotMzQ1NDhiNDg0MDMwNzhmNjMwNzliY2U4NTI5ZjkxMGFiMjgwZWJjYWU3ZGY5ZjgyNGRjYTc1NmY5ZDY0N2RjNAotZDQyZGE0MTIyMzBhNjIzMTMwN2U3NDk1NDI0Zjk4YzlmMTI5Y2M0YTMyNmEzZGQ4ZTQ3NmUxOGQ2NjZmOTRmZQotNTNlZGM4N2U0N2Y2ZDg0YWJiNjQzZmYzYjQwODQ0MzdkYTI2YjRhMjk4ZjgxOWY0YjY4MjNlZGRhYzExYmM4NQotYjlmNWM1ZDBhYTFlN2IwZGRjYTgyYzhlMDE5NDRiM2VhNDg5NzhjMWI4ZjRmZjQ3Nzc5YTU1MjNmNjAwZDMzYgotODk2YjY1OWMzMWY0ZjZmN2RlY2JhZTBmZTFmODNkZGUxOGY3N2Y1M2RiMTQwYTM2YjBmNmY0Yjg4M2ViY2JiMgotYjZkMzUzYmYyY2E2MTAyMTczYjZkZmJhMGY0NTJkMDExZjZjZjdkNjYxYTQ3MGMzYzVkZDE4OWMxZTgzZmM0YgotOTM3MmVkNjdlZjRlZDlhNWI5OGY4NWM4ZDczZDQ5MDEzM2I3MzYyYWI5NzZhMzg1Y2VjNzA1YTJlYjg5ZDdmMwotMmZiZDYwYzA4Yjg2YTMwMjE5YWEyOTg4Zjc5ZTYzODYwNjJiZTgzOWMxZjlkMzBhZmZkZTgyY2FkZTM0OTRlZQotMTMwNDE3NTVlNzZjYzA3Y2NiM2E0YTcwMTQ2MTI5MGI1Yjc5NzI4ZWRkZmM2M2IyZWQ1Y2Q0YmJlMGM0YzM2NQotNzU0ODhkNTkwMjU4Y2UyMDg0Zjg5OGQ3YzU4YjNmNjViMDlkZWEyZjhkNGY3MWU4MGIyYTJmOGYzMWQ1ZmNlZgotN2E3NzQ0YjY0ZDdiYWE3MDFlNDczYjg1YzY1ODE0YjBhOTNlM2ZmYmQ3YjJhZjg1ZTAwZmZiZmFiOWJiNzc2NgotZjQ0NDcwOWE0NzkwMmM5MTliZDJhNGJlY2RjZTA3YjY0MDUzYWVhMTA1OGUyNjAyNGI0NjE1M2Q2YmI5MmMwYgotNTk4NjFiMmRkYWYzZDM4ZGJlYTViZmVkY2M0OTkzOGViOTgxODhhM2M0ZGNlZWZhMWYzMDg1NTlmNzcxMmNjZgotMjg4MjE5YzZhM2Q0ZWVmYjgxYTJjNWYxNTQ5OTBmZDhmMDk3MTNhMDUzMTAxN2Q3NGI0N2UxZjk3YWE2ZjBmMwotOTJjZTViYjc0NzVjNjc2MjQ3ZDU3YmIxNGZmNjc2ZjExYTRiNWI1NjRhYzI2YmZhOWQ4NWM5Y2IwNDE0ZmFmYgotYzM1YjQ2ZWFjZjc0ZGQ5NjRmYmRkYWIyOGZkN2JiMzA0YjliZjRlMTJjZDE1YjNiYmIxNjNkZDY2ZTg5ZjI0ZQotNjQ4NWM2ZWE2MzM2NWQyOTkwN2Y2YmE5NmQzMTNmOWIyYWI3ZDE3NWQ1NDlmNDIzNTY1M2VmOTc5YTVjNjNjYgotNmVlNTBjYzMzMzM4N2EwZWQ4OGQzMGQ5ZmQyMTk3ZDMxYTA4OTRlZDBhNDdiMTVkOTJkY2E0NjNhOGM4NGIzYQotOTg2ZDM5NmU2NTMwYjJlOWJhMTI3YmI1NjYyY2E5NDhhOGYwYzU2M2I5Yzg2ODY0NGI4ZDAxMDY0ZGI2YWE3MgotMDkwZGRhMDUyMWU2ZDc3ODE5MmE4YzZkNGQ0NjM5ZTgwZTMwOTE5NGNiNzZmYzVkNDYxNWYzOTZkZDg1YjA2ZgotNzFkZmM3ZjM5YTI1OWUzMjJjNWU3ZDI4NjQ2MzEwZWFjOTJlNWY2YWZkZDYwNzFiMjFlNjY2NGUxY2RkMzg0OAotYzg2NGNlMGUzODBmZGM0OGIyNTFkNTJiNTA5NGVhZDY0ZDM4MGI2ODE4ZTJjOGIxYTRlYjhmOWMxOGFkZGU2ZAotNmU0Y2UxZGVmMmFlOGYyNjQ5ZjFlNWFhYTA1NzIwYTM1OGE3NGUxODE1NjhhMTBiNTM2ZjY4YjdhMDI5Mjc4NwotMTJjMzRhY2ZhNWJiYWZjNGFhM2VhYTRkOGViYjI2ZTIwYmIwMGQyMjhiNGVhYzRhMTYzZTBiNzI4OTk4NzRhMwotZjg1ZTgyYzM5NmQ5ZTI4OTFkOGUwZDZlNTU3MWQ0ZWYxMTY4NzljZDJmNTQ4NWRkZTRiOWQ0MGY2MzhhM2E5NQotZGU1ZGRkMTRhZGJlNzJmNWJiYWRmMGQ5OTUwYTE5NWY2NGZkMzIwOWM2ZDQ3YjQ2Yjc3MDhmODU1ZGE5NmNiNQotZTllMTI2MGY2Njk5ZDk0NWE2MTFhN2VhMzQ4ZGIzYzg2YmU0YjMyZmMyNjg3ZjE1YzRjODY5NTcwMThkNDI4ZAotZjYyNDRhMWZiNmE5OTEyMmJmODlkN2FkZDAxYzgwZjJiMmJiMmM3MTY4YjAyYzQwMGJmYzk4ZDY1Mzk0OTQ4ZAotYzczNjc0MWY5ZTAyNDRmZTA5NjU3MWYwODdjNWQ2ZDdkMDIyYzcyNmE0Y2VjZjM3Y2YyZGRlYjFlOWQ3NzA5OAotNjBjNWQ0MzEyMWJjMmU0YjcyYTJkODk1YTVhZDJmNDQ5MTk2YWVmZThjMDE3ODQzMjNkZTM4MDQzNjNiODhjOQotMWM4NjEyNGY0MzFlNmRkMDc0NGMzZDA3M2ZmZjRiYmMyYjk4YmRlZjcxM2JkZWZjMmRhNGUwZTIyZWRhNzZkMAotMzQ0MjRjZTEzNTI5YmMwNGMwNzhkZmJmOGIzZWZkOTZjZjY2MmM0ZTE1MWYxNWQ0ZjhlYTUyNjQxNjg5ZDRhMAotNWY3YzllYzRlZmE1MTE5ZGI5ZTNhNjFlNGE2NjljMjkzNDhhMWU3MTM4MmMwOTM0OTljZDM1ZDdkMTIyN2E1ZgotNWJjM2RiOTY4MjNjMTY3MTAwMDc0YzcwMDQwYTU1MTQyMTQ4MTk2NTY3YzIwYzdlZWNiYjI1ZWQ2ZTMxZjU2MwotOWFkZDI0ZDUyYWNlZWE0Yjg4MTE0ZWI2ZGJhOTQ2MWMyZTUyNjJmYjk1MjllOWY2ZjBiZGUyMGQzZTIwOWE4ZgotMGM5ZmQ4MWI5OWIwMGQyNjhmNzY0NTkzYmFhODk0ZjdhZTUwNjM0NzY2YzkyMmY3NTFlZDE4M2FhY2FlYzAzZAotYjdkOTZkMDEyY2QwZDExMTkwNDI0NWJlOTUzN2VkYjBmODc2OWFkMWE4YWJiZDhkMWNiYmU1ZTc5YzUzYzAwZAotOTgzYzY5ZDg4NjVlOTNiNjQ5NWEyZjE1YWQ5YWIxZGE3NTAzYmQ1Yjg1ZWJlMjdhYmEwMWY3MWU1NjQ4MmJlOQotZDQzNDJhYzI1NjJkOGU2ZDFlNDE0NjQ0NzU2MWVmNTA2OGQxNzMwNmQ2NmE1MmZhNDE2NDQ4OTdhOWIxNjFjOAotNWRkNDE2MWFhM2Q5NTZlNzk2MWFhODAyMDQ2N2U3NmE4MzNlMDFjOTc0ZTMyYWEyYjhjZjI3ZDYyZmM4MWVlNAotZDc0NjQ5YmY5NTMwMzA2NDgxZjQzMGE1MzlhOTVkY2MyNTAyZjcxMjk0N2Y2YTY4ZGRhMDA1ODllZjQwNDEzMgotMWRiYzhiOTRhZmQ4MjdiYmQ1Zjc3ODIwMzUzZmRkZWM1ZDk4ZmRkMjU2ZTg1ODU4MTA1NDc4OTc4MWFiMDkwYQotODE2ZTY1YWQzZGM0YTY4YjRlZjIzNTZlN2NkMmY5MDZhODU5ZGFkNjgwZDY0OTQ1N2JhZTE1OWY5MTgwNWQ1MgotZmI2ZGNmYTVkMGFjNjM3M2ZhODMyNWE4MTc1NjNiYzllZDg5YTE3ZDhjZGVlOWI3NTE2ZjM4OTA4ZTQyNmYwNQotMTUxN2VlYzc5NDFjYmFkYjIyMzkwZTNlMmUxN2Q2MmNhNjdmMzdkMDEzNzdjNWExZTA5YmVmNWI3OTViNDQ0NgotNTRiMzgzMTkzMzUxZTA1ZWQ4YmJkOGIwYjEzOGNmNjJhNDI4Yzc4NzQ0NTgyZWVjOTBhNDFjM2JkNDRhNGU3MwotYzliMzJlYTQ5MzZjMjExMjY5YmE1Zjg4M2Q0NWIxNjY4MWY4YWZhMDY0NmE0MDMxZWY2OWNmNDkzNjMwNTMzNgotNTc1OGY1MDUzNGU2OTc0MzQyZjRkMjMyYjUwMjRkYmEwZWIyOTdlM2FhM2U5ZWYwOTM1YmQ0Nzk5ODM3MDQyMAotZWFkODQ0YzdlMzM2Mjg4MzU2NzE1Y2ViOGNiODQ5MmVjZGM4ZmQ4ZjExODMzNjBmYTMyODUwMDUxNDQyZjRkNwotYzAyNTBkNjU4YzYzM2RlMjEwNDhmNDY3NmExODc1ZGY2YThhNjFmMGZjN2MyNWRkNWFjZDAyMjA3OThjYTcwZQotZjA5YTcyYjE5NTk1MTcyYWZiOTA4NWI5YTU5NzFhZDFiOWEzYTI1MDg4ODRhM2JjZTg4Yzk4NGY1ODM4OTYyMAotOTU1ODQ4NjZjNTlmODkxMjBjN2Y0OTFjZGUzNWI5ZDE3OWYxMWRiMGQzYzMwMzcwMTM4ODUyMDUwY2YxNGIxOAotYzA2ZGFkYzIxODMzNWJiNDY1ZGQ4ODMwNGYxYzFjZDExMDYyY2E3MjY0OTQ5MWZkYzYyZDU3MWMwODJjYzgxNgotMjYxNDQ0OTA2ZDM5OTc2MDE1OWY2YjFlNmRmNGI0MmE3YTg0NzUwYWE2MWMwMzRiMTFhNmU3ZWRkY2RlYjU0ZAotZTFmNTE1MTA0MmE4ZTlmNmEyM2E4MWEyMzVmYmMzOTA4YTg1YTZiMDVkODE2MmJiZGYzYTY3MjcxNWI2ZmNjZQotNTU0ZTk4ZGYxZjQ1ODNlMDNlNDU2NDY5ODkwZjA3ZjgzYmMwYTg5NTRmYzVlZGM3ODk4ZjIxZjY5MTdkMzBmYQotMzZmYWVlOThmNjIyZWYzMTNjYzg0MzE5MzFkODNkMjcxY2VmODgwZGJhMDdiODMyYTAxMzg0OTk0ZTk2NDIzMwotZjJlMjlkZTMwNWMzODYzMTkxZjg3N2RmYmE0NDIxNGRhNjhiZGJmYmRlMWUzYjhiOTY1OWQ3ODAwZGY1YmQxOQotMjhiYjE0MjVhNTFhYmMzMTdlZmRkYTA5ZDI5ZTA0ZWM4YjE3YmQzYjc4MDg1NTk1MTIwYjU4ZmI0MjE5MTZjNgotYWY0YjkyNzc2ZWY4YTgyMTFjYzM3NmEzNzU2NjQyMmJmMmUyYTg0MGJlNTdhMzU3YWI5YjlhZGFhMjA2MDBkNQotYzQ5ZjIyOGQyZjdiYjYwNmZjZmE4NjczNDI4ODRmY2Q0MjZhNzJjYTRjNWQwOTYxMmJiZTI2YTJkOWQzYzhmZQotMTVhNTVlMDk1YjY3MDVmMmEyZjJhMDBjOWYxY2JhZTE2YjkxZTEzNzk4Yjk2ZDVhZTY2YjVhOGQxY2Q3NTFjYwotOTc0N2JkOTUxYTU1ZWMzZmNjMTFmNThmOGFmYjQwOTEzMTY2YWI2MGEwMWI2OTc1MDdmZTA3NTNkMDg1ZTVhOAotODE1M2NmY2JiNzBlMjliNzA3M2FiMzNmN2JlMmI2YmQwNzBlZDk3NGQwY2ZlNGQ0MWY3ZjU3ZjA1Y2VmMzhjNAotMjUxYWE4MjZlNGExZDM3NDU5MjEyYzFiNDExYjZiNTFmYWE1NjRkYTBmZjQ4ZWU2NDAyYjNjOWZiNzdkNTAyZgotNjFmZWViMzI2MDJkYTJiNWZhODgwYzUzN2Y2MGUxMzk0NTcxMzkyYzNmYmE0ZDExMGZmNDdhNDJkOTIzYzE1MwotZjdhODNiYzFmZmU2N2NkMTFmZjFhNzYzOTUwZjJkN2I2ZDk1NzVmNDU1NjJjM2E5ZGU2ZDRlYmY1OTQ4MmQ3YQotNzE2ZjM5ZWNhOTdmZDY4YmU3MWFhNzM5ODdkNTcwY2UyZGRmOTUzYzZlYzk3Y2JiNzZiMTQ3Y2ViODk3MzU2NAotN2VlMTU5NDM0ZTNhZjY1ODhmNDdmZjk3MjJiN2U5MGY0ZDlmZDBjNWI5ZTlmM2ExNGY5YmZiYTYwY2E2NTU2YgotMDQ3M2RjMDczYTk2MTczMWQzMjIxNjE1MDBlMTVhZGEzNzNkNTAzNTUyYzBiNzZmYzY1NzYwODhlNjMwY2YyOQotYjliMGM4MmNiMzQ4MjU5ZWRkNDgyNTIwYTg0OTY1YTUzY2Q2NzMxMzhhYTU3YzMyZTQxZmNmNTBmZTI0YTQ0NwotNGVkMjM0MDFmNDNmNTIwNmRlN2ZiM2I2ZDE3NTAyMjMxMTU5MTlkODViNTRlYWU4Mjk4YTE5MjEyZTVjNjZlMAotYzA1YzZkZDdkN2Y4ZGQ4NzcxMjMyMDViN2UzOTFhMTg5ZTExZmMzMGZkYzY1MzJmY2E4Nzc3MDk4NWIzNTdhNAotZmJmOWM1ZDI2MWE0Yzk5OGUyZmU4ZWI5NmUyN2RhYzlkYWYxZDNmMGVjNzQyMmE4NWQ5YzdiMjQxODU3MjA5YwotZjM3MmMwM2MxMTAwZDhlYmYzY2U0YWIzYzBlZmMxZjk3OWM1OTk5YmFjNmQ0YWJiNmFiYWIxZDA1OWM1M2Y3ZQotMzRmOTcyZjU2ZGYzMjliZGI4NDg1ZTM5Y2M5OGNiZjIwY2NiNzBhMmEzY2ZkYWQ0ZGViMzI2NzU3OGIwMmYwYgotMDM0MGY0MmJhYzc0OTQ2NTk1MTE5OGQyZWEyYmY3OTk1ODUyYTUwYjU4NzY1OTdlNTVlMWExOTc3YjllMmYwYgotOGE4ZmIwZjAzODM5ZGNmNmJkNTU0MjgyNzIwOGQ0NDNlZDRiOWMwMTQ1ZTQ1MjIyNzRhMDJlNDQyMGY3MzhlNwotOTYyYzZkOWZlZTE3NTIwZWNmNmQ2NzcyZTVlNzdkNmVkMzk1MzA0Njk5ZGQ2NWQ3YTYxMGQ3OTNlMzhjZTNkYwotZTQ2MTg0M2Q1YWYxZTI3YmVkNTY1MmJiODRkNWU4NTYyMmI0OGJlYzcyZTE2MjJhYjExNTA2YWRlNzAyY2IyZQotOGNhM2ZmYjhhZGQ1YzI0NzAyMDdiZWQ3NGYyYjM0ZmFmOGNiNjFkZDVlMGJmNTRmMmI4ZTFjN2VhMWZlZTgxZQotMGUwYTE2NzQ3NDQzNjMwYjA0OTkwZWUxYmU5ZGI1NzY0YTU4MDIyMmIyNzMzMjA3MmU3NGE2MGFiN2I3ODlkYQotYWVlNzQxZWI1MzhlM2FjN2UzOGIzMzNjN2Y2ZGFkY2FkNWI5MzgzYWI0MzMzNTk4NjJkY2IzMGJhNTNhNDEzYgotNWU5OTQ3ZWI2MzdlNzhlZWRjNGI4YjE3Y2VjNmI4MmY0Y2I4ZDJkNzFhMzc5MjFlNjlkNDI4NzIzODIzZWM5NQotMGY2ODNhNmJmYjU1ZDIyZGZiMTYxZTFkNmI2ZGI0OWRhY2VjZTZlNDNhZDJjNTFhNzBlNjM0MmE4NTE2OWZkZQotZjgwNjBkN2RhN2UyMGI0ZGIxNzZiYjg2MmMyOTc0OTA3N2Q3MTA0YmNiMzEzZTVjODg2YTAxY2IxNmYxMWY2MgotOTg0YzVmODUzNTE2YzE0MTlkZjkyOWQyOWVhZjQ0OTBhM2FlYmQyNDM1OGVhYzAwNmE1OTRhZmNiODM5Nzc4ZgotZDA5MjVlMmRhYWJlNzRjN2RkY2NlOWE0ZjQ1NDYzM2I1MmI0NDVmZWE5OTEwNWZiMDY5OTQ4NTk1NmZjNzM3ZgotMjU2MjVkNTNkY2YwYjllMjM4NmJiZjA5MDBlMGUwMTFlOGFkZmUxNjJkNTg3NmE4NTBhNjUwNzUxMjY5MGQyZAotZDFmMDA5OTJmNGRiYmNhMmM2M2NkNzBiMTZkY2UxNWQxYzEyOGI5ZDY4ODFmM2Y3ZmZlYjY4ZDcxNzRhZTc2OQotM2I2ZjVlMDI1MjNjN2YwNDZkZTI5NGUxODI1NWI2ODlkMmVmNTI5ZTZkZmU0ODk5NTZhZmM5MDkyODRhNGQ0MwotYjBjYTFkOWY4YjliZTRlNGRhNTM1NTIyY2Q5YjZlNjQ4NDFjODExMzhlZTM1OGVmNjc2OGU3Zjc4YWY4MDMzYQotNjg4NTQ1N2RhNmJhNDJjYjRiZGQ0ZjM1MjMzYjhlNWFjMDJiN2Q4ZmJmMjA5MmJiOGNlODkwZGVjYjZlOTljYQotMTUyZDJhYTU2YzVhYjQxNzliYTc5MzZjNzRkZDZjMzQyYTM5MjEzMWZiOTZjMTRjM2IyNGQ5ZjBlNGQ4YjFjYgotODYyZWE1ZTdiMTNlMjA0YzkxNGJmOTVmNTVmZjMyZTQzMDhmZTViMjk0OWZhNDU0NTYwZThkZWM0NzRlZjUyYgotNjViYmJlZDAxN2Q1ZWFlZDBkODlhM2M4NmZjNjNiZjAxZDNhNmExMGE1ZmUzODliMWFmMDEzZWJjYmZmMmExNwotN2Y2ZTg1NGRmZWM1ZGJmMTlkNGU5NzdhMDdhNDIyODdhMmRiZDQyYTc4ZTU4OWEwMDJjY2E0N2ViODY1YmQ1ZQotNjAxYTk4YmIzYTg1NzJmMjBlZjFjMGEyYjM1MDBmNjE1YjFiOGY5YjA0MjE1ZjkxYWNlYzQ1NDMxMmVjMWRjZQotMDhmNDEzYjllMmRkZGRjZmQyYmQ4NTEyNWRjNWEwNDNhNDVjMGI5ZDNjODZhYzMwYjIxZjM0Y2FlMmQzNDdhMQotZTkzNTg2ZWI5NWZkZDNkMWRiNzE1N2IyMWI3ZWQxNzAyZDMxODc2YTFjZmNlNThkNjE5YTY2ZGY4Y2NjMzExNgotMzE5ODU0YTU3OTY1ZmUyM2QyZDJkN2UwMmY0ZDk1ZDgxMGU4YTEzZDI5ODcyMjc0ZmE2ZjQ4YjczMzNiNzQzYwotN2FmNDE4YzFmZGFmNDY3YWNkNTQ4M2E0N2M1ZTk5YTdiZDgxZTE4ZWY5ODc2M2VjYzA4ODIwMTc2YTEwOTE0NQotYWYxODM4NzBmYWYxNzFhM2MyNGY2MDM2NTQ4OTZlMmQxYjBhYzYyMjRjZmM3NjViZjc0N2UxOTRjZDE4Yzc0MAotNmM2MWZkMTBiNmI3ZGNlOWMwYTY1NzdhODdhZTg0MGU4OGY5OWNiZjFjMWQ2Y2M4MzYyM2QyZmU4MGJkNzEwYwotZWM3OTI1NmY4OWYyNmI0NWY3NTI4MWQzZGU5NjM2YTEzNGY2M2UyNDRkZjRhNjIzYzYzYTg5NWZlNjZlMTQ2NAotMTk1OTY1NWYyMzViZDA1NmQ2NWUzYTUwZjU1YTA0MTQ0NzU5NDQyMmVlZmZhY2NlNmFmN2NjOTc2OGY3MjE1OAotMThlZDQwOGU0NzM1OGFkNDVmY2UyMGU0ODQ4Y2MzOGY3MDk0Mzc1NWU5MjMzYWM3MTFlNjYzZjJjN2Q3N2I0NgotYzg3OGU3MDY2OWFkMzBlZDE4YjZmODMyZTRkN2Y1NGEyM2M4MzdlZDQ0MGFlOTc4ODMzNDhhMGI1ZmU5NTIzMgotNzc5MTg3ZTQyOWI2Zjg1NWVkN2NmZmNjYzhkNjc4NGQ4YmNkOTI1NDhlMzI1N2FjODcyMzFjMzZmMTE5ZGRmYgotZjI4YWI4ZGM4YjI1M2ExZmEwOWYwMTY4ODdmYzI5YjY2NTliNDBiZjNkZDlkYjZlYWQ4YzhjM2U1MDRiMTBmOAotMzdkYWM4MmE4MTZlMDY3MjIzOTc4NjdkZjMyZmEyNWRhMDcxM2U5MmVkZTllNGQ0MTU3N2VmNThhYzcwYjQwMgotYTQ0MjdhN2M4NmY3YzFkN2YzNzhiNjJkYjQzY2E0YmMzYTg2NjlmNmU5MjRkNzE5ZjE4Nzk5ZDFhOWU1OTY5ZAotNzZiZGU0ZmM5NzYwNzRmMmQ2MjM3MjFkMzhlM2Y1YzczNDI4ZDY4MjQwNDlkZWE5NDE2YTQ1MGJlMDJkY2I1NQotOTA4ZTM3ZmFmNGE1NmEzNjUxOTMxMWRkYjNkMWNiNjY4MzdjMjk2NGEyZGQwZDM0YTIzZGRlNDNlYjMwYzg4ZAotYjZlYTU0MTk1NmI5MDRkYjkxMWQwMDlmMGIyMDliZmRjMTM5ZjQ4ODc4YzgxMWVjMzhhMjE2OTJmOWI4NjZjMAotYTU5ZDlkNzM2ZDQyOWRlMGRiNGIwNTI2NDYzZDAzNDgxNTcwMTlhMjYyYjJjM2UwYmY1NDA5NWQwNjExMDU5MwotMzY0NmZjZDI0MTM0ZDZiM2EyYTkwNmE4OTExODc2OTI5NjdlOTNmNjlhNTRmZjNhYjgwNTA0MTg1ODVlZDFmNQotOTgyMmIxMzRmODg0MTU4OWZlMTQ2ZDA1YWIwMGM4ZTIyNjUxYzQzNzIzMjE2YzA1Mzg1MWE1ZDFmOWJkZmFmOAotNTljNTU1MjNhY2YxZTM5NGQyNzUwMGExY2RkNTUxYzc3M2M5YTZkN2IzODgyZjMxZjI5YzI4MWZiNmM2MjUwZAotOGExYzNjOGRkMTEwYzE5MTAwMTRkYTZmZDFkNTdiOGFlMTAyYjI2MWZiNjVhMzAxOWJkNzVlODFjY2ViZGUzZgotM2UyMzc2NGU5YTVkYmU2NDBjYTk4NTg1ZGEyYTRhZjlkZTVhNTA0NTU5OGE5MDVlZTdiODJiYmFhYmRkMGQ5MgotYmI1MzUxZDNhMGIzMDcxZTg2NjZmY2U0NTIwMmFmNjAwMDc5MGMxYzFkMGE1YmYwYzQ2MjNiOTgxNWI4ZDNiNwotN2MzOTk3MGE1MDlkYjZhNGEwZmZhY2UzOGE2MGUyZGNjYWI3ZjViN2FkMWMwZjQyYTc0ZGExNjE0NzU4OWEyZAotM2RhZGRlOWJiMWE2M2E0MDQ3ZWEyMGRkZTExMDlmODg1NmJiODExODRmNDI1Njk5NGI1MDA1ZDY1NGU0OTA4NgotN2JiODM5NmZjOGQ4MDdlYmRlZmJiNzRlOTg5NGJmMGVjNzkzNjk5ZjBlNjgyNjM4ODU1ODFhMTdjODdkNzA4MgotMzcxZDNkNDg4NGI1MGUxMjk1YzUxN2ZjNTZiOTFlYmI2YjRjMjNiMTUwZDU0MmNkMDc2ODkyNDIzMmE1YWMwMAotOGE5OGY1Y2U5YWRjOGRkM2U2NWYwODViMzU2NDA5MTk3NjcyMzdkMGY5NzAzY2JkNjkxYTk4N2EwYWEwNDQ0YQotNWVhMGQ4ODc4Mzc0ODJhNzI0ODg2NWNkNzhiNmY2NjUzMDFjYjY3Y2NlYjFmNjg5MTk4ODIxMjI3YzFhY2Q4MQotM2QwYTUwNjc0ODMyYmQzM2IyNjcyNzU2ZDUxODZjODk1MjgxODBlMTkwZDE1MjVjM2U4MDZjYWRkYzFlNDE1NwotNDYwNTU5MTBjZWU0ZjYwZjQwYjEwNjVmNDM1YmU4YTM5ZWI0NTRkODhmNWJjNDViYTgxOGU1YjAwNmU1YTM4ZAotMjk5NzRmNjhlZTE5NjI0NDhmN2E5ZmQ4M2M3ZjEwN2M3Nzg4ZWI4OTc1ZGVkZWU3NTlhMmJiY2E0MGM4MTFiOQotZDg1N2NmOGU1MTAzNzZkNDhhYmQ2MDU2N2YzMDdkNmVjNDcxZjk5YjAzY2M3YjVlODE0MGRjMDQ1MGFmMzgzMgotMjQyYTM1MzUxNWI1YjM0Nzc3NGYzMmI4YjZjMDMzYWRjNDNiMmJmNzE4NTQ4MGU0N2M4NjgzMDhmMzkwNmJlZQotZTQ0MTMxYjExYjJiMTRlNzdmMzM2ODYzMDc4NDIzMzdjZDFmOTY5NTQ5MWJiYmRmMjcxYjUzNDVjNDRkNmE3NQotNThjNTlkNmQ1YmY4YjI0YWYzODI0ODM2ODY0NGUzMzFhODhjZjczZDBlYmE5ZGZhNmY4MGYxMWFmMDI5M2JiOAotNDBkOTc1NTU0MGFmZDE4ZmIwM2UwYjI2YjY0MzIyNzc0MzQxNjYxMjNkODAwNDQ4MDhmNmYxMTE1Y2E1NWI4NwotNjBmODI1MjBlYjgxMTY2ZjgzNjNiMTUwYmFjN2Y0NTk4M2QxZjRlYTBiNTAzZmE4ZDA0MTI2MWUyZmQxNGNhYQotYzdkYjhlNWIxYmRiMDRhNjVjYmI2NjA1MjZkOGIyMWVlZmY2ODEwNTQ4NjQ3NDgwM2FjYzk2ZTdiODgyYmM5ZgotNWExZDVmMWUzMzNiMmIyYWFjZjQyNzJhMDVhNDFhZWEwNGIyYzE4YTgyYjFjNjZhNDA3NTNhMzY5MGFlZjA4OQotYjlmZTgzZGQwZDg2ZmI3YjcwNDVmMDQxYjY5MDkyOGI3YjJiNjcxNjJhMWY1NTY0MTE3NjUyZmE3ODk5YTQ0NAotYmNjYzIzMTE4OWM2MGNlYjcyYWJiNDAzOGQ3ZDBhYjVhMDI3YmVhN2VlNzU1NDI0MTZiMTJhMTZlZTAwOTAwYwotZGI5NGIyYzg5YjIzNDVkMjA5Y2Q2ODMwN2UxMDFjZDA2ZGJiNzllNzZjNzI1ZGM3MTgwYmVjY2EwZWFiOWY4YwotYWUxNzE0YzU3YmVlN2U3ZjU0Yzg0ZTdhMmFiOWEyYjFkZGQ0ZDE2MGNiNDgyNWI2OWMxYmY1ZWUyNmIxODM5MQotYWNkNmZhYjNmODkwZDhjYmZmNWJhMzY2NmI4ZDc4NTM2NTJkYTJiZDVkYjc5YWQ4ZGUzNThlNTVhNWUwMjI3MAotZTFhMmQwOWFkZmVkNzUwODhhNzE1OTNmZjBmNTRkNWM1Mjc1MThjYzc2NzU4NGU0MzgwYjhmY2U1OGIwNGNhMgotMDVhNjllZTI4MGRhNjU1MTY5MDI5YTE2YTNkZjNiODZmYzRhYjYzNTMwMDM5Nzc2N2M3ZDllYzNiM2ZiZDYwYQotYmJmNTFhZDRhM2NiMzQ4NTM5ZmI5YjdlYjA3MmVjZTlhZmIyYjNjMDBlMmI5MWJiNDBhODJkMmRkZmE1OGU5ZAotZjQwNjk5MDM4YzlhN2JmOTMwYTgzOTk2YWZlOTU4MGM1MzM4NDA1MTA4YWMwNGZkNzEzYmIyMmNhMjAyNDQ3NQotZjU0MGZlMTQyOTBhYjE4MThkOWJiMTk0ODNhYmEyZjM5YTk1OGVhNDE3ZWM3Mzc5MjIzM2FiNTM4Y2I3MGUwYQotNDU1YzZiN2UwYmM4NmVhYjFkZjczZWVjMWUxNmE2Zjk1Y2QyM2I4ZjY5NWZkMmI5MTlkZDI4MmJkMTEyOWJhYQotOTNmYjY4MDgwZDkwYzI5Nzc2YmYyN2ZhNDJkYzA3MjFlMzgwZWNmODgyODY0ODQ0MTc2NjRlNDFjNWIyNTdjYQotYmQ0ODM1YzFkNjQzMTg1MDdkZTVkYzJmMTA2MDY0NGIyYjEyNWYxN2FmZjFiOTVhMzdiOWI2Njc5MDZkNDhjMAotOWZhN2Q4NzVkNTljYjZmN2ZlZjJlMzdlYzQxODU0MGY4ZjEzYzJkNzBjYmU5NTY2Mjk5ZGZiODBjMDZkZjk5ZQotYjA0NWRkM2JhZWZkODdiMjQzMTY3MDBmYTFjOWY3MjE1N2I5MjcwNTJjZGEzZmQyYjQ4MGRmNzUwMjk4ZDY0NQotN2M0MTJjYTM5ZjYzMjVkNjZjNzdiZTM4YmQ4ZTQ5MWQ4ZjcxMGM1ZjkxZjQzMmUxM2Y4OTA1Njk0MDAyOTUzMgotZGIwNjUzMjk3ODI1NzliNzlkOWY2YmE2MDU1MmRiZDZhMzAyZTYyOGY3NWUwZDM1ODJkMjVlYjAzZTdkZWIzMwotNTQ3OTBiMDI1MjE1NTNlYjBjMjg2Y2I0MTVjZGUyMjViNWQ2NWNiNzlkYjA2MGQxM2FmZTg2MmQ1ODg1YjU2NwotMjQzMDQ4MTYyMDQ3NWY1MDU0NmFjNzgyMzcwZTNlYTFjOTU2MDBhNTI0ZDI4OGI1ZDQwMjhiZTdjZmJlYTg1NQotNTI4OTUzZTYwNzcyMWI3NDg4ZjdkN2Y5ZGQ1YWQxNDMzMmIzMmJiZWY3MjI0MDAzNmEzZTE2NDZmZTU0MThhNwotMWZkMjA2YWQzZmM3NWI3ZGNkOTgxM2NhZjVkMjlkZGJiMTJkN2ZmOTRlMzdiY2NkNzJiYTEwODZkYzQzMWI1YgotNzEzZWQxNGFiN2U5ZjFiZmY3ZGRkZmE5YmYyMjYyNGU0Y2FmM2NjMGQ0MTk0ZjBiNmEzNmIxYzY3ZTQzZjExNwotNGJiMjMwNTRlZDAxMjA5ZDI4YmM1NTIyNDAyODY0OGE0YTMwNzNkNTY4MzVhZmE5ZTAwNGZiOTk5MzcyZjI5YQotZDc2ZGI2NjNjMmEyOWI1NjM4NTY3MDU4OTA0YTQ5MzNiZTg4ZTc1Y2ExZjM2NTczOWE2NWMyN2JkYzE5NWU3ZQotMDljZmIyNDI2ZmE4MjljYTM4NTkzMDZiNTU2ZDFiZmFkYjVkOTQ5M2M2NmUzNGRkN2Y2MzU4M2U0NTMyYTA3NQotNTMyY2VlMmQ4OTc2Zjc4NWQ3OTA5MDkzNzg3ZThhYTVmYzc5MTJjYThmYTg5ZDM0NjYzNGVmNzFmOThjOWZhMwotY2RmZDkzMWNjYzY5OWNhYTMxNGM0MDJlYmNkNmJiY2ZjZDNlZjdlZGUxOWU2YzhiNWVhOWJiZTczYWUzNWI3MgotZTIxNDk3NGIyYmJiMjZhMTE1NzUwMzI3ZDIwNzMyYjZmNjc5NWMyNWU0YzBiMWE2M2I1MDU0MzgzZDQyOGQyYgotODVhYzFmNzE5Y2UzNWExOGRlNmY0NzUzY2I2MTVhZWM2MjEyYTI3MmQ4OWIzNzUwODYzNTM2ZmNmNWY3OTFkYgotM2I3YjM5YTY2ZWJiZTlmYjE4NzZiYjA4OWVjMmNiYTA5MmQyOTFhYWM4OGYwOWM3MjBhYWM0ZGQ4ZmRjMjJkNgotNDM2N2M0YzUzMzBkNGUwZWQ3ZDQ1NDcyOGFmMmI0ODAxNjE4ZWRhZGE0ZmEzZTUzNTdmYjkxNDU4ZGMxMzI4OAotNzY1MDQwMWJiY2ExNmQ3M2JlYThjZDUxMjc3OTdmOTJjOGI1MzE0NjYzZTAyY2VmYWJkMWVkZDg5ZTQ0ODZiYQotNGQzNzExMzhlYTZhMDdjZTM1OGQzMWJjOWVjYWU2NGY0MDk1NDZlOTEwMWZmZjdlYzcxMGI0NWY5MTA1MTBhYQotYjUxZWIyMzc0OTkyMDA5YTI4MjYyYTM3MGQ0MjEwOWEwYWE1ZWJiYzE2ZDJlYzVkNThlMGE1ZTdlNmY4MGEwMgotNWNmOGE1ODFmM2JiZjk4NzUyZWRmNjRmZWJhNTg1ZmJlYjU2YjI3YTc5Mzg0YTIyYzg2ODY5M2MwNTA4NDQyMwotZjdjZDM5NmNiNDhlNjhmNzZiYWI2NTEyZjc2ZGEyNzcyZjNkMTM3ODgxZWJhZjFkM2NhNmUxYzk4ZDU0NzMyYQotZmMyNGJmZTI5ZWZjZDcwM2M0ODlkZDhkY2M2OWRhNGI4NmI1NjUwNzg4YmZlYWI4YmY2NmM1YzFkZjc2OTdhZgotYWIzM2QwYzE0Y2FmMTZiOTgxMGVhNzRjMzJjY2I1YmJhYzI2MTNjNmEzZDk0NjQzNmNjZjkzNGEyMGI4MWNmZQotNWU3MTI3NjVkMTk4M2JkNzdjYzQ1NjEyYTMxYzg5M2E1NTgzMjM4Yzk0NGY5MWYyZDZkMTA2OTM4NjYyMTEwOAotMTA4YjBlNjViNGY2ZDc2YmZkMGUxMTU4MDA1ZThiYTUzYWI0OGU4NjVlOWY2ZDA3ODM1ZDRlOWUxMjRiMDFiNgotNDFiYWFhNmNmZjQxM2U3ZWY4ZWVkNzNmMWNjY2FlZjU1YTg3ZDcxYWZiMzA5YmExNjJkM2UxNWRkYTZmMDRkYQotMmRlOGRiNTgzYmVhYmFjMWU1NjgwZGY0M2JjMDYzMDk1ZGUwNDNiMmFkNGM4NjAwZWY2M2E4MDkwYjY0Nzg1ZQotNTI4ODg5MmI2M2E4N2Q4YzgwNWQxMDAwYjY1MjQxMDlhNDFlMDVlNTE3ZTA3ZjBhNzY0NjYxMjU2NTBiM2Q5NwotMDA4MDU3ZGUzZDMzODBiMGMzNTJlNzBhYzA0ZmNjMjExMDhlNjE5YTcwN2ZiZjdmNTk4NjljYzlhMmQ1NzFjOQotZjc3MTE0MjUwYzFjNDFkY2Q1MjczMjNlZGIyZmI4ODNkYWJmMzcxZGNjZjQyMzg5YTI2MGZiZjUzNDY0YmQyNAotZDVhZTViZTQ4MTYzZjE0MjczM2IyMDVlMTEwZDc3ZGU1Y2MwNzExN2Q3ZDZkMzQ3Y2M4YjAzNWZhMzg3YjI0OQotZmRlM2JlZWVhYzg0M2M4OWJiYjg3MTExNGY1MzEzNDM3YTc4NGMwNTFlMDIxZGE0ZjgwYWRiMmQ1ZTM5MmYwZQotNDYwNjhkZjY3ZjQ2YWZlY2EwNTIzNzhkOTc1OTdmMjFjMzlkYjZhMmNhN2MxMGM1NzQyMTQ5OWRhOGQ1YmRlYwotMTI4MTA5NDMyZjg2YTBjZTYzY2EyYmU3ZmQ2NGUyOWU4MzkyYmRkMDAxM2Q0OTkwODg0ZjdjZjQ5ZTdiODhhZAotODQ2YWYzOWEzYWExZWMzYzg1ZjIxZGIwNzk1MmQxYjQ1Y2ZjMjBkNjg0ODUzNmI2M2QyNTcyZjQ0ZmY3MThhZAotYzJjZmFjYWYzOTVjYzY0YjM0MjkwYmYxOWExOWQ3NTZiMzgxNDJjNmE3NDcxYWI0MzZjNmI4MWFiZWQ4NmZiZgotODU1M2RkOGQ1YTA1MmY0ZDUzZDYxMjRlYTRkZGYyMzVmNGE3OTJmOGFhNDg1ZmIwNjhkMzljNjgyZWRhMzdjMwotMmZjYzU4ZGE1MWY3NGMyNGJhYzhkYjVjZjgyNTQwN2Y4OGRhYmE3OGY0MWQ4YmEwNzhmY2ViMDIzNmMyZGVmZgotZTYxY2MwYWJiZGJlYzNiZmEwOTliNDljZDEyMThkYmZmODVjYzcwNTczMGVhNTQ1Y2RmZjQ0MjFlZTVhNTM1NQotOWNjZWEyY2Y2MjU3Yjc1N2U0YzZiODUzYTQ3NmYwYzk3ZWNlODBhNDFmZWU0OTk0YjA1ZWVjNTc1Zjg3YmJhNgotOTA2NmVjZWIyOGFjOTJlMWY0NDgzZjg3NDRlZGUwNmEwNWVhMDM4NTY1MDk2NDU4Nzg1NDUzYjI0NjJkMTAzZgotMzAwYWZmMzc4M2Y3YTJlZTFhMjdjYjIyM2U3MTQ1YjZiNzRmYjVhOTVhNTQ0NWI1ODAwZDBiN2U0NDUxYmU4MwotOGE3Njc5ZTNhMjljOWJkNzliZTBjZTkwMGY4Y2VkZTRmNWZiZmNmNDZiNjM1NDI2ODA4N2JiMDIwOTE0ZjI0NgotZmUwNmQxOGNjN2U5Y2IxMDAzYmM5NmZiNTk2MTA0M2Q5MTljOTI5OGU2MWRjNWM3Y2IzOTg4NmU2NTkzOWZjOQotMDM3ZTA0ODRiNjJkMWVlMzU4NDJiM2RkYjg3OWE3ZmUxNzVmMDc0NTFjNDQ1NjM2MWJiNjQ2ZTVkZDg3YWQ2ZAotZGVkODM4OGZhNzg4MDZmOGM5OTNiZjE2ZjUzOWE0NTI2NTAzZDhiYWY4M2QxZjBhNTk0ZGI3ZmIxYTExZTdkYQotZDJmOWRiOThjNWQ4MjA2ZWE0YTQ0ZWQxMzRkNzg0YjA1YWMwY2EyNDViMmE1YWRiZDkzZWZhNGE1NjZlOTNjNAotODRmYWM3ZWYwYWQ0NjI1NDEwMWIzMDhkYzRlMzljNTQ5OTQyYWY4NWM5NmE1ZGQzMWU1ZDlhOTkxNDlmNDlmZgotOTljZmM1NzgzZDJjZjljMzIwNjQwYTUwMjliYmQ2MWM4NmQ0YTZhZTlmZWU2OTBjNWFjNWU5MmQ2YjA3YWVhMAotMzFjNjExMGRmNDFlNjNiZDcwMzlkNmJhOGVhOWVmMzNiZWIzY2RiNDE1ZjQ0OTcyNDU2MDY5NjNkYTYwMTk0YQotODM4MzY2M2JhM2YzYmUyZDZlMGI0ODY1ZGRkZGI0ODRmNjI1YmViNTdlYWRmYzY5NDEyNWVlMzU0ODBlZmFkZAotNzAyNDgwMzdiZjQwMTg3ZjU0Y2I1M2E1MWZkMGE5MTZkMGIxYTU0MzExZjQzY2IzOTg1NmI1ZTRlMTdkZGYwZQotNTQ0NjZhZDM0Y2RiZWQ4ZmVlMTdjODdmMDBiZmU0ODMyZWVhMmFjYWY5ZTkzYWE1MDkxYjYyZmViZmJhOWIwMQotNTk2MDYxOGQ3MTM1YWQ1NDZjZjRkMDBjOGM3MjVjNmRhNjk3NDA2ODkxYjc1MzYxYzgxY2ZjMmQxM2EwMzgzNgotOGYyYmMwNDU0OTVhMWQyNDYyODYwNjk5MGYzNTFiNmY2ZjE5N2VjN2I1MjE2OTQ5NWJjMDA0NzMzNWM0YTNkNgotMWE3YWFhNjNmYmExYWNhNzMwYmExZmE5MGNhMDRhMGZhYjI3YjE0NWIyZGQwYjRjMDNmMDFjNzliYjc3NzU4YgotZmE2MzBkMDJhNTIwMGM0ODQ5OTk2NGZkYWM3MDVkMWY2YjBhYWRkYzU4YjQ3YTM1MDc3ZjVlZTJmYmNhYjk1NwotOTE5ZTViZjYxNGExNDY4MjA3NTkyYmZjMzZiZGQ2MmVhOTM4OTE0MjM1MGQwODM1MjQzZjQ4NWM5OWE0OWVlMAotYjZmY2UzM2U5ZjFjYTU4NmY3MDRkMjdjNTk2MjEyMDZhYmU3MGFjMzE2MDhjYTY3YTUxMmRkNjBmMDc1MTBjYwotZTBhYjc3MTVmM2E2NjJmODI0YTAxMWVjNDdlNjBmODQ2NjRlNDc0YTI1NTcxMmFhZDBiYmIxYzdjMTQ4OGE0OQotMGE3NTQ0N2U5ZmVhYmE0NTFmY2QxMTA2ZDdkYTUzNWFkODI3NTc0OTQ2MjBhMTk1YjJmMGIxNjIyYzYyMzUxZAotODliNjJmNGY5YmI4MTJmZWQyNTY5NTI5MjhkODY0MTQ3MTc2ZmYwZTAzYmRkMmJhNzU5NzdjYmQwYjVlYzM3MQotNDQ3OGM0N2Q5NzYwMTI4MDU2NmQ5MzcyNDNhMGM4YjBiMzM0NTA3NzM4OTdlZDU1MzViZWE2ZDdlYWZkNTQxMwotNWM0YTQ5NzZlZTAxNTNmNGViOTEzYWVkOGExNDk3Yjc0M2U1ZTFhY2U2MjU5MzZiM2RhNzQxMTliNDliYjUzNgotMWE2ZmVmYzBlYjk1OTM5NGJkNzQ1Y2VhOTE5YjFlNjJjOGNhYzc3NzU0YzU5YjcyNWEyNmM2MDZhN2M1YjNjMQotNDVmYTNlMjRlNWZkOTZlMjMwNDk3YTAxNzhmMjFjZGQ1M2M3MzNhNmJmMjk2MDU4NzlmNjFjZDRiN2FkMTExNwotMTQxMmIwM2VmNDJlNGY4MjYxZGYxNTQ0MTM4OTU4YjNlOTZhYzQ1ZTNhNDVjMWJiZDBhNmQzZjFmYzRkZjA1NwotZDAwMTNiZDNkZWE4NjE0NTNlNTRlYjQ3MjExMjRlZTI3N2ZhMGVlZDFiZGI2Y2EzN2UzMGRmZjA0ZTkxYjg4ZgotMzA4ZWRkNDNjYjdkZDdlOTcyMmU1N2RjYzdmMzYzMzIwOTUwNTQwOWExZjk4YTEzMzg3NDg5NWUwMGIzMmMwMQotODViYWVmZGIwYjRlOTdmNzU0ODhlYTBmNzY0MjRkOTE5NmEyNDM3ZmM5ZjY3ZmUyOTMzZmYzNDIzMjc2OGVhYwotNzIyYTg0YTdmYzUyZmRmM2FkMjQ4YzY5ZmQ3ZDRjNDVmYzMzZmZjNmEwNGI1NjJjZTM2N2Q5NmIwM2MwZmY4ZAotNzUxNzRkYmRjMDliZGIzNWE5ZjQ4NDBhNmFkYzU1NWY0MmQyMGJmNWUyZDNkYTM0YTk5MWY2MzY0OGViZTg2ZgotM2UxNTU1MTRhZmI4MmMxYjNlMzdmY2RjZjhjNTk0YWNmNjVmZGZjZjU5NjVmNDJjYjM1NTQzZmZiMWExZTQwZgotNjIyZTZlZDIwYjQ5NzlhMzc4MzVjZjA4ZTQwYjhiY2IwMTVkYjhlYjFhMDQ0ZGNlZDhmNmJmNjM2MGQwZmEyMAotZTY1NmQ5MGVmYmY0NjFkYTQ1MTg1MmY1ODQzOWRiOTI4MWY2MGVkZjVkZTRhZjAxNmY4NzE1ZWVlODNlYjY2NgotZDQ4Nzg0ZDM5NzY0ZTMzMDA4ZTVkOTE5NWVmNjI0MzlmM2FmMWI5ODliZDk1MmZlMGEwZDMwYTg1NzA4YmIxYgotYTM1M2VmZDY1OTRhM2NhMjAxMTE1YjM2NTlkYzFhODA2MTlmMTU1YzY2NDlmOTQ0ZGZhM2U1NDM5NzFmOGRkMgotYjBhMzBhZmU3NzY1OGFiODJlNjMwYmNkNGZjYzMzYWY4ODEwZGExMzYwNzMwMDU1MjU1YWFjYzc3ZmJlMDlkZAotOWIxM2Q0NGE0MWUwYTFkMzc4OWQ5NGJkNzg0OTRhMzNhZTYwYjlhZDcyOTBlNGQxZWQ2OTI0ODIwMTQwZTJhOAotYWU1MTM3ZmU3YzI1NzBhZjEyNDI2M2I5OWQxMWVjZTQ1Y2Y4MGE2ZTExZjU2ZGM2ZDc3ZTUwZmFiNTA2MDhmYQotMDllYjE1MjBmMjJlYzE2NTcxZTkyYTE5M2YxNjk5ZjgxZTM1MmJjZDllMGM4MzhhOGMxZDViZmU4MGQ3Njk1NwotNzEyOWM5YzQ2ZmRhNzIzNWRjYzM0ZjYwNDE3MWE3NWYwNjlmOWUwMGFkZjU2ZTg0YWIxZjc0ZjA5M2JiNjk5NQotNzQzZjllMDI3ZmM0ZDllNmJjZDY0N2IyZWM3ZjBkN2FmMmUyZWZkMmRiYmI2OGM4M2NlYjFjNzYwZmE3MWVkNQotMDM5NGQzODk2M2ZkY2JmMzg5MTkzNGE0Y2JkYWI4MDEwNzc3OGE2M2YxMTAxMDE3YmVjZDIzM2JhMGMyZTYwMgotZTkwNzVjNWU1MDlmMmFjZTdiN2Q1YzM0NmRmYjU4ZDBiYTNlMDA1ZTM4ZWE3NDI4ZGZkMDEwMGI3ZTFmZGRiMgotN2ZlOGNjYTk2YjA0ZjliMzQ5NjkzYWNiYTkwNGQ0NGUxNDNlMDNlODJkMTYxNThiZWIzNmRmYTIxZjU3YTAzOQotZDZiYjliZGQxYTc4N2ZiOWRmOTY4MDA0Mzg4Zjg2NTVlOWQ4YjZmNDM1MTE3ODM2YmM5MTA2OTdhYTE3MzdkMAotNTVjNzNmY2YyM2Y4YjU2YjU4YjA5MTk1YjdjYmZmNTc0YTI0MThiMWFiOWY3NGRjNjA3MDY2ZmNiNzk4Yjg4MAotNWZiMGQ3NjFjZDVjY2E1MWY5ZmYwZDJlNjdjYWJkYjAyNmYyYTliMjkyZmE0NzJiOTdhYjg5YWY2MGNiYTk3NAotNzFmZGVmMTQxN2IxNGU2ZmY1NDQwODY3YWNlZDJmZjk4MzdjMWNkMWUxYWVhMjNiYzNjZjM0NDRlMzVmN2NiNQotOTdjMmY4ZDU1NzZmZmVhYTgzZTA2YTllNjM4M2U5MjI1ZmZlMGRiNGIxNTc1ZTFmODdmMjhiMzczNzE2YjY2OAotNGYzZTllNjk0ZDZkNTY0OTVkMjE2NzNkMTY1Y2ZhZTVjNmNhMTEyZDE2YTQwMjQ3MjE2ZGE0ZGViYWJiN2U4ZAotMzRmY2I4NTg3MDdkODJjYjg4NjhkY2Q4ZTk1NmQxZGRmOGJiZjZjZDU3YzI5M2Y4ZTM0MjdmMTRjOTllOTEwZAotYTdiZWYyNmMwOWUzMWNhNjY1NTA0OTY1NzRjMGM4ZjcwZTdlZmM5Zjc0YmI0NWZiMWZmMTNiMzFkODk4MmI0NAotMDM4YzEyMThiODc0YWM5NWFiOTA3ZDAxYmNhNzhmMDBmZGVjNTM3NzMwNjRiZTQ1M2E4MmVmYTNjZTMzNmM0NgotNjkzNDVlMTcyNzYzNDEzZjAyMWQ3NTU3MGRkYjBhMTZjODA2ZTQ0NGQ4Yjk4OTVhZjk5N2VlNzQyNWQyYWUyOQotMWQ1N2Q5YWE5MWE1ZDllOTkyYTcyNzUzODFhYzMzMmEyMzk2OTAwZTRkODIxZjY5YTM0OWQ0OGE1MTk3Zjk4ZgotMzUzNGFiMmE0NzkyNmVkYWNmYzUyODFjMDllYThkZGZmN2NjYmRlYzViOTU4NTdjOWIyZDgyODI5Mzc2YmVjOQotNzlhNmVkNTNjNDJmNmJlMGM4MGE5ZmU2YjkwYzA2NjI0YTI5YWRjMGUyNjgyNDFlMTQ1YjE4ZGVhNjA5Y2Y4ZQotZTc5NzIwZDAzMTY5MWY1OTEyYzdiNGMxZmQ0MzU4YTZlZDA3YWJlMjM5NzNmNWIyOTZlYTNlMzZkODA4MWQ2NAotNTA4MzVlODRmZTk1YTU2NzY0MTE3Nzg1YmFmOGIwOGFjNDBkY2Y3NDUzZjRjNjcxMDA0NDVlYTZhNzdhYjc1NQotZTNiNDg4MmRkMGE5ZDc0MzMyZjcyMzIyZDM2YWI5ZGJmMjE5OTAyOGViNmM2ZDBmNDNlNzkwNjVlMGZhNDdhNwotNjhiZmU4NjA5ZmU2YWQ4MmU3YTFmYWRiZTgyN2Q4NmFiNmYzZGI4ZDA2NTBjMzFlODBjN2I1YWUyNGM3MDNkYQotMTA0ZWJiNGNiZjBkNjNiMDI0OGFjMWM0N2E4ZWYxNGEwOTVkOTAyYmIzOTBjNDg3NjBiYTdkYTZmZTU2ZmI0NAotZGYwMmVlMTY2YjUyMmE1NTBlZmFiMjAwNmU4MTRmNDA1M2QwZjIxZjNlZTc5MGNhNmQxN2U4ZWE1YWUzMTA4MwotNTg4OWMyY2E2YjNmY2QyNjcxMzFkMzNmM2Y3MWJiYWE1ZDQxNDQ3OWZkNmM5ZTg0YWU0ODFkZWZhNGVhY2Y5OQotOTNhNmZlNGZmNTdmNWUwOWZiOTliOGZjZTcxYjk1ODA4MDk3MWU2MWJmMGNjYmRkMmE4NjQ0ODc4MmFhOTg3MQotMGNiNjg2MDEzNTQ4ZmIzZjY5MTQzNjUwMTU0NWQyZGRiNDZhMzQyNGI2NDM1OTBkYTliMzA2OWQ3NmVlZmVkYQotOTQ2YjZhZTRhNTMxZjdkOGIzYmY5OGFiMzVkMzdjYTViMzY3Mjk1NDhjMDZkMjMwYjU5N2FiMmNmZDEyZGQwMQotN2ZkMjM5ODgzMGRiNGI0ZjJkZDI5OGU5NDU2NTlhNTY0NDcwYjIyNjU2ZTI4YTJkZWZiNjM3MTRiNWRjZWMxYQotNWNjYTRmOWYzYTA3MDc3Yzg3YzA2YmNjMTQ1ZWRlYTg0MjRkOWY0NGVmOGU3M2ZhOThmZDIxNmNmM2ZkODQwOAotNTJlYzU5ODhhNzc0OWYwZDY5MjNmNmMwZWY1MGU5YjJhN2E2MWMwMDYzMTZiNDljNTFhMDEyNzAwNDU2NmQ4MQotMDY2ZTdmMWVkMDJmNWY1NzBjZWYwN2RmMDcwZWU5OGQ4MzZhZDYwNDhmYTc3Yzg4ODhkYWRlYTY0YjcyZDRlZgotMTQwNDYzNGI1OWNiNTkwZTUxMTNkMzg0ZTQzZGRjZWE0NTlkZWM2MGMzZjFjYmVjMTBlMzMxMDBiYzdlYjhiYwotN2UzMzkxNzcxMDVhZDZhNDc4ZWQ5ZTA5NjQ3NzYwMTM0N2U5N2MzOTE2YTM5ODE5MjBiMTZiZjRkNjRkOGZiOAotNjk0MzQxZGI0OTliOWNhM2NmMzRlMTQwZDdkYjRkNmM1YzI5MWYxMDBjMmQ0MTk3NTJlODliYTdmYWMzZThmNwotNWI0YTYzNjE2MTk3YmNhY2FlM2UwMTcwYjc0Njc2NzBmNjdhY2QxYWNhYjJlMDUwMmYwMmY0MTZiODUxYTVjZgotNmY4M2MzY2Q5OTkyZGM5MjViMzg4Y2Y3NWI0MjNlZGYxZDVkMjM0YTM0MWFkZjEyY2ZmODhiZWMxZGE5NWFkNQotZGNmZjkyYjNjY2E3NDE4Y2M4NmFiMWYxOTY5ZWE4NTgyNGQyNDNiYzVjZjRmYWZkOGY0MjY1NTZkZDkwMTdlZQotMDI0MjA0NmY5MDlhY2FlZDNmZjJhOTE1NjQzMDNkMTNjOGRmMjBmZjUyZTI1ZTYwY2I3MTY4OTAyZGFhYzY3OQotYjc5NGVmNThlMGVjOWE1YjVhOTdhMTE0M2IwOTE1N2M5N2Y5OTQ2ZDk4MDc3ZGUyOGU4OTA4Yjg0ZjczYTAxOAotZTBjM2JjNmY0YTZlZTA4OGVkZGU2ZjFlMGY1Njg3OTlkODY3NjVkODQzOTY1MzgxNDY3YTk5YzhiOTE2MzJlNQotZWVkNTNmZGViODY3M2JkNmM5YjM3NTc3NzNmZWJiZjg2ZWU0MjhkNGIzODY5ODVlODEwZGI4MTI0ZjViZjk3NAotZGY5OWFmYWQ2MzJmMDNlMzM4NjQyYzkzMTI3ODdhYzQ3YTlkMmY0YTEwZmM1Mzk5YjZhZTkwMjlhMDMzNmQ4OQotMmFhYmIwOTBlNTgxYjc0OTQ3M2ZmMjA4MTUyNzc4ODFmOTg1MTQ2YTAyOGY2ZGZiMGFjZDE5OTU0YTBiZGJiOAotYjRlZDFhNjVkM2I5ODY2ZGFjMjljNmFhOGFlZDM5ZDk1NjQzM2JhNjQ5ZjI4M2FhZWE4NDhmNmNmOGY5NjI2OAotY2M2Njk2MTM5ODFlNDcwNWQ5MjIwOTcwNjA4ZTY3MDI4ZGU3OWQwYjM2NjhiNGEzZGI3MGY2MWM5ZmMwMTA3OAotMzdlYzUxZWFiNzBkOTJhMDE3ZDk2Y2Q4ODkzZWNjYmUyMzA4MWRhZmVhZjgxY2EyYzlkNDVkMzhjZjU1NGM4NAotOTlhNmI0NzllYmZiZDk2YmU4ZjdmNDU5OWIxMGRkNDViNGFjODYwZWE2YWE0MTBmMTYxZGYyYjMzYzA4NTg2ZAotODcyMThhNzkwNTA5ODAwMTY0YjQxZTNjZDBhN2QzMGQ5NTg0ODEzYzQyZmUzOTM1ZWU1NmM2ZjIyY2RlOWZkNAotMDU2MTVhYjJhYmFjOWRmY2FjNTUwMTQwYzQ1NDBkNmRmZjllZDY3ZjUzMDU3MDc0NGQwYmUzZTU2MDQxZTFkOAotY2ViNWE2OTI1YjNiYzUyYzIwNmY2ZGQ4N2YyYzRkZTcwZWMxOTQ4N2QyZGRhZjIwZWY2YjI2ZmNkNjA2MzFiYQotYjE2NzdkMGFiNjk1ZGQ2OGIyYTNiMjdhNzBiMGI0OGZjYzg3Mjk5MWJkMGI5Njg4YTk2NmU3MjIzOWI1OGQzYgotMmU1ODg2MmViNGRiMzkwZTE2OTEwMGU1MzljMjM4Mjk5NDQ5YmRhMzU2YTA5NjhjODY2YmEwZTBiZjNiODhmNwotNmNmZDM5ZmUxMGFlMzBlYjZjYTcxNDliNDFlNDEyY2Y1NTY5NjliNGM4MTZhMTk0NWMwODc4ZTJhNzllN2VjZQotN2U1Mjc1NGM4ZGZhNzU1ZDc5ZmIxNWU1NTc2YTg4NDYzMDc1Mjc0NjBiNmQ5MTgyMTU0ZTIzYjg0ZWE5ZDQ0MwotN2ZjYmI0NzBlOTgzM2QyZjNmOTBhYTg4ZDBlNDRiMTc1YTkzNThhZDBkODQ2YWU2NzQ0YzRiNjlhNWUyNDY5MgotZWIzN2I1Yjk2Nzg3MjliZTg4Y2I5Zjg0ZDI3NzNiYTk5YjI5YWQyMDU2NDIwMzI4MTE2ODQwY2NiNDc1YWI3NgotMjdiYzdlZmQyZGJlNmRjZGY1OTZlOTRjMDlhYTk1OWYyZDQzZDQ4YTgwY2UyZmFhN2MzMGJlMzI0ZDE4YjhmOAotNzBmNzdiZTcyMTk5ZTkzMWQ1ZDVmM2FjZjQ4ZmY4MDYwZTE2OGI0OGQwNjZiMjM1NGZlYTU4NzEzYzFhNTM2NwotMzMwYzk0OTFmZGI2ZmU5NjU0YThmZDY2ODAzZmRiMTk5MGJjZjViZjJkODY2NTk4MGQxNjJmMWJlMTc2NjNmNgotODU3NTYzMzcxYjEwNTYxNDRjZjU0YWQzMGYxZmFlNTcwN2Y3YmJlODdmYWU0MWQyYzY4M2U4YTAyOTMxZGUyNAotMjllNjZmMzUxODhmZjM1OTRmMzdmN2VjNTAyMWU4Y2NmMDAyNDhiZTQ1OWY4MGVmOWE0NmQwMzQ0ZTE1Mzc4OQotNjk3MjkxOTQ3MzFhNDkxMzVhZTc3MWFhYzY2M2MwMDM3ZGI2NzIwMGM5Njc3YmYxZjM5YWJiYmM1NDgwMjc0MQotMjNkMzZhMzVmMTI4YzFjMzVkZmFjMWEyOWE5YzFhNDg4ZjZkN2RmMjM5MzM0ODhjODU4NjY3YmZlMjQ5NDhkYgotODZiZDAwODdmOTRiMGM2MzI1YTQwM2RlNGE0MzRiZjc2N2MxMzdmMjQ4Yzg1MjU3YTcyZTM5YjUxMzUxZDQwMQotOGI1MzA5MTNlYThiZThiZmJlYjAzOTIzM2JjMzQzMmRiMGI2MWFhMjgxYTBjZTJmMDFiMDM5OWIwNjZmZGU3ZQotYWJjYWZkZDQ2YzRkNmJjZjI5MjRkZTJlZDM5NzJjMDFhZTAyMTNkYzE1NTM5Mjg4OTVjMmI1NDFiMWIyNTRlNwotYTFhZTQ2MDY5YTExMGM1NWRlMTJmNjYzNTg4MTVjZmIwN2NmMGRlNTk4NjViZTg1ZjFhOGYyYjYxZDBlYmFlMgotN2QzNDFiZGMzN2VhYjM0MmFmMTQ4YTA1ZDBmYTQxNWI4NmNkYTcwNjc0NmM3NWUwZmI3MWE2MTBlNDU1YTY0YQotZDg1MTU3MDVlYzhkMjY1ZjNlNGVkOWMwMjAzNzQ0Yzg2YTFmZTU1ZmY1MmI2YzhmNGJhNzFlMGEyNjY1MWNkNQotZmMzOGQ5M2IyMzcwYjFlMzhjMjkzNDNjOTZkZDliM2Q0YTM5Yjc4ZjdiYzdmMmVlZDczNWY0NmJiNDZmOTZiMQotYmVjYmNhYTdjZDk5ZWYyM2QxNmJjYjNmMzhhNjA1ZGJiOTA4YjI4YjEwMzlkMmVhMWZjNWQ3YWZjMTFmMWFhMwotNzk4YjQwN2VjMjM2NDIxY2NjYTE4ZmMxZjI3YTEyZDdlMGIyNTMwMzk4MjcxMDQ0NjFjNTFjY2IyMjgzYzllMgotNmZjYjgxOWI2NTZhMWFhZjFiMjk4MjFiY2VjYzUwYjkxMWQxYTA1MzMwYzQzYTBjNjAyNWVjOTBkYzEzNDA0MgotNzdhZDk0MjRjMmQyZTY0MmExMjIzZGM3NGZmMTZmNzBiNTRjMGZmNTc4MTU3ZjBjNzAxMjc5ZmFjYWViMjU2MwotY2IzODU1ODcyZDM5MzNjMGE3YmU3YjYzM2U3ZTNlZjA1M2UxMjEzZTRjZDdlMWM1NzgwNGVjY2Q4MDI2ZTU4MQotYmViNGMyZmM1OWNhY2I0YzFlNzY5NmQxNjUzMTZkN2YzMzkxZWRlNDQzODczYzdhYzQ4Mjc3ZTQ3ZWViYzY0ZQotMzAyM2QwNmZmY2NiMDVhMWE3MWI2NGI3ZGE0Y2UxYjYyNTZjNDk3MGIxNzljOTFlMWI1ZDZhZGU4MWMxNTFkNAotZGMzY2NjZmYxZDZlYmQxMTgyODVkNTZmZjc2MzFmMmM3ZTJiODljZDcwYjJlZjdhMzg5NDM2NmZkMTc3YzA2YQotMzllMzk3MTc0N2Y2NzE4OThhMDEwOTAwOGUzMTkwYjBhZWY5MDk1OTdmZmU5MWQ3YzdjMjA2OWI1NjgwMjk4ZQotZWVlN2MwNGU1OGNkMzI4YzFiYWZhYzJhOGJjYjYzZjZkOWE2YTU2ZjI5ZjM1NTFjZTFkMjUxMmI1ODg1ZDFiNwotODM5N2U0NjRiNWY4MWY0ODAzZWViZmMwY2M2MzJmYjY1M2Y1MmZjN2ViZTJmNjRhYjVjZTE2ZTg0MGJkMDU3NwotY2RmYTI0YTkyOGUyODg4ZWY2MTcxZTQzYWVkYWY4ODYxNjM0NGNkNjRiM2EyYzA4NzNkYmJmOGViMWZkYzA4YwotY2Q4NmYzMjQ3NzU2NzJiYzU1MDI0MWQxMzliZGVjYTllNmVlMzZkNDlmYmIxMTdlYjVlYjQ1NmQ5OTI1ODA2NwotOTRiYTI3Y2M1MDU4NWQyNTQ0YjJmMWYxNmMxOWJhNDFiMGNiMzA4YzRmNTAwMzlhODQzZTY2YjIwZTA0ZGIxZQotYjBlOTlmYWEzNTU2ZDhlOTVmNDUyNmYwYTEwNWQ0Yjc2MWRmNDE1MTQ4MDUxYzYwNDA3N2NlMjAyNTczMjE1MgotZTZkYjcyZDgxMGJiOGQ4MWM3MzNiYTc4YzBkZWI4Nzk5YWJhYTIwZDNkNzcxNTJiMmRkMTA5ZDcwZWZiMmJkZAotN2YxN2MxYjc5YmNlY2Y2YjMwY2YwZjg1MmFjNjExOTdlMGY2MDFkMjYwMjIwNWJjMzc3MDhmYjQzMDZhNzgyYgotMWYyYTM5YmIwMzU1NGExZDEwMTAwMjIxZjk5Y2NiNDViNTM4YmYyYTk0ZGRmOGM0ZTBiMTBjNjJmNGFmNzEyYwotYTQ0Mzg3YjAwMzhiZjI0NzRkYmQyMjQyYzczNWRiMGQ3OTI0NmQ3M2E0MzEzN2Q1MzVlZWU1MjU1MDJlZTQ0MAotOTAyMWFlMjQxNGU5ZjQ0Mzc0MGNkYWNkYWFiY2ZhYTAwODRhNjBhYzM0MzAzZGQ1NTkyNjllYjA4OGUyOTI1YwotNjMyYmRhYWU0NGRhZTBhZTU3ZjMwODBiZTQ0OGM1NmFhNTQ5YjYyMGQxNzI5YjZjYzI5NzRlNTcxYTU2OTdiMAotNGZmM2U2ZjY1NDJjNGZjYjJhYmM5MjYxZDk3ZDZlNmU2MDUzOGQ2OWIzNmM4MTg5NDkxYTk3OGE3ZDAwYjliNgotM2U2MmExZjUxZDYwMDJlMTJkMDYwNGQ1M2FmMDE4OGU1NjVjZWVjOGJhNTcyYmZkZTEyMjI0OWRhY2M5ZDlkNwotNzUwNDdjNjllZjA0ODVhZGY5ZjBkY2VjMGYwYzkyNmFiOTFiNTUxZWJkOWI4ZjRhYTAzODE3YzI1Y2E5MjM5NQotNTE4MzA0YmU5NGI1ZDU2YmJkYjgzM2NlZTkyYzMyYjc5MmM2YTMxZjM3NDQ4YjMxOTg4MGU0Y2FjMzVkMmVkZgotZGZmNTMwZDBmNzc3M2U1MTQ4ZDQxYWU1NmUwMjYzMzc4MWNiMmFiYjE1ZWMyZDk0YWU1MmQzYzhmY2ZkMzA5NwotNDVkOTVmNjdiNTYwMTY1ZjU3MzkzYTQyZmM3NDc0YjUyODRjN2NjMGI4OTNmODRmODczMzc2ODI2NGZmYThkZAotMGJlZDgzZDk5YzAzNWJkMWE4MzU5N2YwZDYxNDc5N2M1ODNlYzhjNWI5NmI5NzM5ZjMwNGVkZmUxZTAwYWI0MgotMzhmMzUzYTgyZTdjNzFkNzQ4NzdkODUxOWFkZDliOGM3OGY2MTExNzQ1OTk1MTJmMTFjMjJjMTBjYjM2MDMwNwotYjI2MmYxZjc4YzdmOWE4NWYxZmQyMWU5NGQ3MmFiZDQxMzY1MGVhNmE2OWIwNTdlMDIxYWRhOTc4N2QwNjE4NQotYzU3YzA5NDdmOWEyYTgxODIyMDU0ZTg1NWY4MDIxNjA2NDllMjVkZGM4Mjk2OWQ5NGMwNTJjMjg5ZjM1YmI1NwotYzc3ZGU1ZGZjNjM3MTZjNWIwYTg3YmM3ZWQ4NTk2NjNjNDU3ZjA4MDA4OWUzZDcyOWI5YmIxMjk5MDUwNzg4YQotNzlhZGExOWRiMjEwMTFiMDFhNDdiMjc4NjE1YmU1MzU5ZTcxZWNlYzdjMDZhNjdjNDk0M2U2MTA2ZTE1MjgyNAotY2NiMWZkMzljNDg1ZTkwZWZlYmIxYjIxOTJkOTNjOGJjNTJlMzU2ZTUxZTVmYzgwNWNkN2U0MzU0M2U5YzUwMAotZDBhYzg1YjcyMzAzNTBmOWY0MDMzNDBhMTZiYmRiYmMzYmRmMGY3YTU3MWFhZWM0ZDZmZGJlY2IyODhjMjEwZgotYjdjMjQ0ZjE5MDgzMDVhMGIxNjMyYTgxMjMwMDExNzVlMzYxMjRiNTQzZmY5MmMxNjU3NmQzNzNiOWJkZWNlNwotNjc4ODkxMjhmZmEzNDk3ZmY4NDZmOGJlZmFmNWRlM2I3YzMzOWYwNDlhZGM5MTE2YzlhN2JiOGJhZTQzNTc5OAotMDhkY2EyZDljMTUxZDkzMjljMzQ1OTE5OTMwZTg0MzcwNTQ1MDFiYmEzOGMyYmQ1MTAyYTIwZTQyOTEyMDNmNgotZWVjZTJmNzBiZmYzZGYwOGFlYjhkZGYxODA2ZTk2NTdlZTRhNWUzZmQ1YThmZDk3OWQ5MGQ0NTczNGYxNGY3MQotNWQzMzlhYzkxYjdmYTE4YTE3YmU4MTU4M2MwODU0NGE4YTMyNzI5YzE3OTc1MDE0ZDYyOWIxMzljMGIzYzIzNgotYmM5YTk5MjMxZmZiMzM5Yjc3NjFhMjU4NmVhYzU2NGJlNzM0ZWYzNzk5MmNlYzZjMDZjMmM5M2RlMmIzNDBmYgotM2EyN2E1MmRhYmU2OWQ5MTc4ZDlhNTQ0NDMwY2ZmMjI5MzM1ZWRkNmY4MTdiYzUyYzY5MDkxN2ZiZjMyMjg1MgotZDRhN2E3MDlhNTkzNzA0NTY4Y2YxNDJiNDVlZmYxNjRkODE3ODgwY2M5Mzc4MmMyMjMyNDdjNjVmYTk5YWNhMwotNWM2NmEyNjA5M2Y5ZmZiYzI1Y2E5YjNjZjZiOGJhNDc4Njk1YzY4MjEyZTgwZTM4NjhhMGRiMWExYzg0YmNkYwotZGYwNWZlMDU0NzMzYTFiNzk0ZWQxY2M0ODNhNTdiOTdjYTJlOTdmY2IxY2ViOWNjMmFlN2Q1ZTBlMDY0Y2M4ZQotMDFjYzYyODE4MDM1OTc0OTYyMmFjMWNmYmI1N2Q1MWIyNTk3NGVjYjE1ZGM4M2Y5OWRiZmJhMmQ3NzlhZGFmOQotNmE5MzA3YmYzZmFlZjVkMmJhNTEzNWExNWQxM2M0MjE1NTcwZTc3MjM3NmE0YTRhM2E1ZWM0MDI4ZWYxMTAwNAotYjkzYWNhZjM4MTI4ZGU5NDUzMWMyM2YxMTRmZWM0MWNiMmUyMDI3ZThlZTEzOGFlZjZhZDAxN2Y1ZDk3YTYwMAotMTA2M2JlNzA2YjY1ZGEwZWRhMjIzNGU3ZTlhOWMyN2MwODRjNDU2NGIzNjJmZmE5M2VjOTEyN2NiYzkzNjZjZQotN2I3NDgwNTk0M2M5OTYxYmU1YTViNWVjODc2NzViMDJmNzU2YWYxYjcwMDc0ZDAzMzc0YWU5MzFjZmYzMTc1NwotNDE0NWFmNDE2YTkwOThiYmE4NGVkMmQzZWQ0NDAxOTI1N2MwZjM0ZTdmOTRkYmQxMGZkMDRmZDE1ZmZkMWI2NAotZjY1YjJjMDJlNTgxMTc1NDM2MTUwYTA3NGRlNDNmOGUxMWZiYzU2ZTgwNjQ4NjY2NWNlZGJjZjM4NzUwNGQ2ZgotMDY4N2ExM2Q2NjhjNjlkZGRiYzM3YWRmOTFhZDAwOTFhNzcwZWUyMzg1MGFlMmZjYmQ2YjlkZTlkOGE4YzhiOAotZWNjZGU2NmI3MTIyYzdiOTYwMmRiZDBmNmI3ZjdlNDg5MDkzMzQ1MWM3YTM5MDQzODJkNzgwMWJjZDk5MmY3NgotNGNkNDFkNzRiYzg3MjNlYmEyNjQ3ZGI3ZjgxM2I0NjVkMTEwNTJlMGY0ZWY1OTMwNDk5NDI5MTVjNjE0ZWRlMwotNGY4ZjJiNzdiZWRlYzYzNWViMzQ2MWQ2NmNiZmQ0YmUxNjg5YTgzOWIxZmVhYTQxYzBmMGZhMjM2Njk4MDZiYgotNTJmZWExZmE1YWI1MjRhNDQ3ZWYzY2ZlYTQ1ODNhNzc5MGJhYTQxOGZmODkxNzM4OGRhYWRjNWEzZDFhOWZjYwotN2Y0YTgyNmM5MTJlYmE1ZDRiODJkNGMyOWI2MzlkNTY1MzJiMzdlZTlhZWQ2YmYwNjEzN2EzYWY4OTljNzBhMQotY2U0Yzk5NDBlNmVhODdiNmUyNzQ2OTZjNGExNWQ2YWEzYzE3ZjkzMzRhYTg0ZmNmMWVkYjQ4ZTMwNjY0MGU1NwotODkyYjI1ZTY3YzZmODdlNGU0Y2RmMWE5Y2YxMmY2OWMwMDI4YjVmYjc2OGU4MzllMWI4Zjc1ZjNhYjJkOTc2MwotNmUxYmU4YzVhNzNiZmE4Njc1ODUzNjk1ZWUzMjg4N2RkNmRmNWYwM2Y4OGU2MzdkNDVmNzUyZDIyZjZjNzZiMwotNzFiOWE1MTQwNzhjMzIwMGRkZDJlOTk4ZjMzZjFhZTVjMGE1ZmRjOTMyZjdjNDcyNzUxMmNhZWMyMzJhNjgxZgotYmJkZWMxYTkxOWJkZGFlYmY1ZWZiZDA2ODY5YmNmZTA2MzdiNzJjZWZhYWMxM2Y5MTVmMjVjZDNhOTI2YzBhNQotNDg3NTQzNWVlNmE0MTNlMjU1NGZlNGVjZmNiOTZjMWI1ZDg3MTllODRkZDM0OTM5ZGZkNzc5NWVlZGVjYmNlYgotNzg2ZGYzMmI2MzYwYmZmZWQ1NTNhNzRiNDQ0YTM1ZTBhYjA1MTdjZjdhYTljNGU0MjBlNWJlYTRhNWFhYzk1MAotNTRjZmI1NWQxYTFlNTdiNThiOGZiMzgyZThlYTJhY2JmYjliNDNkMWFiNjdlMGMxNDUwZWQzMDkxNzU4YzFiMwotODE1NWZkNjk5NjUwMGE1NWZhNWQxMzRmMTdlNTU5NzhkOTMwNDI1ZTBjMDM3NDgzNjRjNDZkM2JlZjY4YTM5MAotNjQ5ZTA5ZTQ4YzJmYWI5MjEwOGVlZjg2MDNjNzBhOTc3YTM4OGQ0ZDI0OTcxMjk2YWFhYmNiOTMyYmM5NjAzMwotZjY0OGE2YWRhMjY1YWNhOTM4YTY1MTJmNDU2ZmRjMTk0ZjcxODY4MDhkZWIzYzE2NzY5ZDNmYWE4NTBmNzhmYgotNTg2MTBjNzc2YzJlZjNmMjA4NDA0ZGVmMjk0MGU0ODRhODAxY2RjNDVhZWFjODhmYTk4NTJkMTMxOTE1OTM0MAotMzQ3OGIxYjdmMjA0ZmYyOTdiNjdiZGRmMWQzOGUyNTZmODY0ZDNhODNkNjkxOWNhN2RiMWJiYjFmNWI4ZjZlNwotOGJhMjcyZDFmYjI4ZDc2MDYxOGRhYzZmNTYzM2I5NDgxNjQ1YzliOGViM2EzMzg0NTE4MTAzY2M2OGFjZWIwNQotNWE5MWRkOGRlZjA0YjQ5ZDM2M2IwYzZkYWY2M2FlZjVkODViMWU3OTUwNGMyM2IzYmI1MGE0YjcxOTQ4MzhkNgotYjQxN2IwY2NiY2Q5NWE0NjgzNGY5YmJiMmFjMzBmYjJkOWI5YzMxY2Y0YjYwOGUxMzc5Mzk5YTk1ZjhkZmE5NAotNTM5OThhNzQzYzVhNWJmMzNlZDFlMTAxNzdkYzRhMmEzNDdmNWZhNGQwOTQ3MGNiNWQ3MWIwN2JmNDU5YzgwMAotMDExOWEyMTY0YjE0M2YwM2ZjZTM2YzE5Mzg0YTAxY2VjNWI5MDgwNDkxYjgyYjlmZjExNWY3OTVkOTY5ZjQ4MAotYjcyMzJkMDM3NWE5ZDQ2ZmFmZjMxZmVjYzkzNTFiNDI5MjNlOWFiNjIwN2QyNzIzOTE1ZDc4NDNkYjI3OTUwNQotMjgwZDcwZDljODBhMTgyMWEyNTdhZWM3NjRiN2U4NWExZThkYTdjNDBkNDJhMGY3NzM4NWVhNjZhNzY0MzQzNQotZTIwYWY3MDg0NzBmNjQ1MDQ2YmJlYWMxMmQ4NDBmZTMyNjBjZTc1ZTIwNTYzMDE0ZDllMmViZGFhNTdlZjA2YwotMGRkYjU1ZmRmNmVjM2UwNjQzMTJkMTNlMjUyOTliMTUzMTY5Nzg4ZThhNGRlY2MwOTVlYjM3ZWFmOGU4Y2UyYwotY2Q3MTc0ZjQ0ZWU4ZjM4NzVjNWEzZGUzYzdjZTIyMjk2ZTk5YzQ0NjI4ZjUyY2QzZDE4ZWI5MjE1YzM0ZTU2MwotMGJhODViNWZjZjNhMjExMDIxYTE5OTQ1NTEwYzdlMzlhYjU2ZDk3N2Y3NGZkNTBiYThhNzBkZWY4MmZhNjc3NwotNjkzMDM5MDcwMGI0NjM2MzMwYTk5OGI1MzUxMjZkNjEwZThhMWNiNjNmNjE4ZDY5ODk2ZmI0NzU3Njg1N2Y1ZgotODkyNmRkYjQ4MzM5NjY2OTVhMjY0MDJhZWNjNDhiYmNhZGMwNGMyODMzYWZjZWRlZWUxNDI1NGE5ZTc3NjAzYQotNWJiN2I5ZGUzYzk3MDA3OTAxMTQzYTc5MDFjMDBiNzdhMTNlNzI5NDBhNjUwN2E3NjE2NDk4OWU3MWQ5MWViMgotMzA4MGM1ODViZTJmODczNDkwOWZhMWVmYTdmYzZhMjQ2NGQ5NWU0YzUwNTFmYjhkNjA2NWE3ZDlhNDUzY2JkZAotMDMzNjI2NTQ0YjcyMTA4ZTRjNGMwODdiNGU0ZGQ5NzI4OTMzNzFiYTdiOGU4MjkxZWE0Zjk4ZDAzYzYxY2U2ZAotZDU2NzM0ZjE3YTY2Njk3ZjIyNjBhZjliM2Y4YjlhMzY3MTdiNDkwZTFjZTY0OWQ4MzlhNjYxMzNkYTc3NDJkMgotZGJjYWEyMmZmOTE1ZmNhZGZmYTAzODNjZjM0YzIyOTBmYTQyZmUyMzEyOGUyOWU3YmIxYzU5ZTU1YjdhYzM0NwotZmU2NjQ4MWY0ODVkN2JkMDlmNTVjYjUxZDIwOGQwNzY1YTUxMGQ1ZjY5NThmY2QzZmY1YTVlZDI3ZDA2YTAyYQotZjdlY2FkY2U0YjRhYzVmMWQwMjEwYzU2MzdmMDczODIxOTNkNzc5NDVlMjQ5ZDJjNDk3M2FhNDNkZWE0MWRjMAotNTFjZDcyNjQzYmRhNGY3NDlkZDU4NDZhOWQzYTczNDZkMzlmNzhlYWFkNzM4ZDJkMjU1ZGYwZjBjYWI1ZmIxMAotOTZhMGFjODZiYjAxMzk4MGRlZGZjODRkZGZlZjA4MTcwMGZjM2M2NmI2ZDVhMTI1YzllODNkZjE3ZDkyNjU4YwotMTBkNzlhOGFhYTIyMjAwNGMyMGFhYWU2MTI4MTMyYzY0Zjk2YTdhN2M4Njk0ODlhNjM4NjBjMTVkNTNmOTU4YgotZDZmYjgxY2QxNjViZjI1M2Q5OTZjMTUyOTVmN2MyZmM1MmMxM2I1MWFkZWQxYzc3NGNiMzVhMGFiMjU4YmNhMwotYWI0Mzg3ODZmZjdlNjQ4ZjQyYWI1NjhmZGQ5Y2Q1OThjNTJiNTc0OGIwYzQ0NDU4ZDRlMGI4MDgwYWQxOWNiYwotNTVkOGFhMWE3OGNhZmVkN2JkNDFhODY0NDg4ZDhhYjBiYzEyZjY2ODkwMjdjNjVjNzBhMmIyNmJkMjU5MDAyNgotM2U4MGJhNjE4OTY3MmFkZmUzNzdlOWZiNTE2Y2M2YmJiMGYyZTM0MWRjOWUyZjM0YThiYjAwYjQwNzllYTI4ZgotN2M4MTM4YzQxNTMwNmUwMGJkZDhlNzExNzZmYWYwNmZhYzkyZTM4ZThlMTVkYzZlYzZjZGIzODlkMWExNTMxMAotY2E2NzQwOGE5Njg2ZjIxYmY2ZmJiZmE3Y2UwMzI5NzRlMmI4NjBhM2E3MjU2MTUwOGJjZjIyZWRlNDEyMjE4NQotYjgzNTMyNDQ0MTM0YWYyYmFjNWNlZDE5MzJjOWNjMDZiNzAxNjBkMGNlZmM4Zjc2ZWQxMTA4YjYyOWU4MTA2MAotY2U2YzMwZTBiYzlhYzIzMmZlZjdhYjFjOTllMjE3OTI5MjFiZGRjMjBmMmFmZDNiMDgzZGJhMjk2NDE0NThhMQotMWJhODA2MTM2MTBiMDE1NDNkMzM2ZWJjNDVhZTE1YzI3NmM5ZmYxOGZlY2RjMGNkZTNiZTE4ZTA0NDQ5NzIxNwotYjlhODEyZDkyNjUzOGZjNDI4NzFmNDM5MjgyYzE3MTc4MzMxNzBiZGJmZmJkN2UyMDM0ZDc5NGVlZTkxNzdlZAotMjgwNDViMmRjNDU5NTk0MjZlMzVkMzBmZGUKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjEzMF8wIC9WWEFNUlYrTmltYnVzUm9tTm85TC1SZWd1IDEgMQotWyAvLm5vdGRlZi9kb3RhY2NlbnQvZmkvZmwvZnJhY3Rpb24vaHVuZ2FydW1sYXV0L0xzbGFzaC9sc2xhc2gKLSAgL29nb25lay9yaW5nLy5ub3RkZWYvYnJldmUvbWludXMvLm5vdGRlZi9aY2Fyb24vemNhcm9uCi0gIC9jYXJvbi9kb3RsZXNzaS9kb3RsZXNzai9mZi9mZmkvZmZsL25vdGVxdWFsL2luZmluaXR5Ci0gIC9sZXNzZXF1YWwvZ3JlYXRlcmVxdWFsL3BhcnRpYWxkaWZmL3N1bW1hdGlvbi9wcm9kdWN0L3BpL2dyYXZlL3F1b3Rlc2luZ2xlCi0gIC9zcGFjZS9leGNsYW0vcXVvdGVkYmwvbnVtYmVyc2lnbi9kb2xsYXIvcGVyY2VudC9hbXBlcnNhbmQvcXVvdGVyaWdodAotICAvcGFyZW5sZWZ0L3BhcmVucmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoCi0gIC96ZXJvL29uZS90d28vdGhyZWUvZm91ci9maXZlL3NpeC9zZXZlbgotICAvZWlnaHQvbmluZS9jb2xvbi9zZW1pY29sb24vbGVzcy9lcXVhbC9ncmVhdGVyL3F1ZXN0aW9uCi0gIC9hdC9BL0IvQy9EL0UvRi9HCi0gIC9IL0kvSi9LL0wvTS9OL08KLSAgL1AvUS9SL1MvVC9VL1YvVwotICAvWC9ZL1ovYnJhY2tldGxlZnQvYmFja3NsYXNoL2JyYWNrZXRyaWdodC9hc2NpaWNpcmN1bS91bmRlcnNjb3JlCi0gIC9xdW90ZWxlZnQvYS9iL2MvZC9lL2YvZwotICAvaC9pL2ovay9sL20vbi9vCi0gIC9wL3Evci9zL3QvdS92L3cKLSAgL3gveS96L2JyYWNlbGVmdC9iYXIvYnJhY2VyaWdodC9hc2NpaXRpbGRlLy5ub3RkZWYKLSAgL0V1cm8vaW50ZWdyYWwvcXVvdGVzaW5nbGJhc2UvZmxvcmluL3F1b3RlZGJsYmFzZS9lbGxpcHNpcy9kYWdnZXIvZGFnZ2VyZGJsCi0gIC9jaXJjdW1mbGV4L3BlcnRob3VzYW5kL1NjYXJvbi9ndWlsc2luZ2xsZWZ0L09FL09tZWdhL3JhZGljYWwvYXBwcm94ZXF1YWwKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmL3F1b3RlZGJsbGVmdC9xdW90ZWRibHJpZ2h0L2J1bGxldC9lbmRhc2gvZW1kYXNoCi0gIC90aWxkZS90cmFkZW1hcmsvc2Nhcm9uL2d1aWxzaW5nbHJpZ2h0L29lL0RlbHRhL2xvemVuZ2UvWWRpZXJlc2lzCi0gIC8ubm90ZGVmL2V4Y2xhbWRvd24vY2VudC9zdGVybGluZy9jdXJyZW5jeS95ZW4vYnJva2VuYmFyL3NlY3Rpb24KLSAgL2RpZXJlc2lzL2NvcHlyaWdodC9vcmRmZW1pbmluZS9ndWlsbGVtb3RsZWZ0L2xvZ2ljYWxub3QvaHlwaGVuL3JlZ2lzdGVyZWQvbWFjcm9uCi0gIC9kZWdyZWUvcGx1c21pbnVzL3R3b3N1cGVyaW9yL3RocmVlc3VwZXJpb3IvYWN1dGUvbXUvcGFyYWdyYXBoL3BlcmlvZGNlbnRlcmVkCi0gIC9jZWRpbGxhL29uZXN1cGVyaW9yL29yZG1hc2N1bGluZS9ndWlsbGVtb3RyaWdodC9vbmVxdWFydGVyL29uZWhhbGYvdGhyZWVxdWFydGVycy9xdWVzdGlvbmRvd24KLSAgL0FncmF2ZS9BYWN1dGUvQWNpcmN1bWZsZXgvQXRpbGRlL0FkaWVyZXNpcy9BcmluZy9BRS9DY2VkaWxsYQotICAvRWdyYXZlL0VhY3V0ZS9FY2lyY3VtZmxleC9FZGllcmVzaXMvSWdyYXZlL0lhY3V0ZS9JY2lyY3VtZmxleC9JZGllcmVzaXMKLSAgL0V0aC9OdGlsZGUvT2dyYXZlL09hY3V0ZS9PY2lyY3VtZmxleC9PdGlsZGUvT2RpZXJlc2lzL211bHRpcGx5Ci0gIC9Pc2xhc2gvVWdyYXZlL1VhY3V0ZS9VY2lyY3VtZmxleC9VZGllcmVzaXMvWWFjdXRlL1Rob3JuL2dlcm1hbmRibHMKLSAgL2FncmF2ZS9hYWN1dGUvYWNpcmN1bWZsZXgvYXRpbGRlL2FkaWVyZXNpcy9hcmluZy9hZS9jY2VkaWxsYQotICAvZWdyYXZlL2VhY3V0ZS9lY2lyY3VtZmxleC9lZGllcmVzaXMvaWdyYXZlL2lhY3V0ZS9pY2lyY3VtZmxleC9pZGllcmVzaXMKLSAgL2V0aC9udGlsZGUvb2dyYXZlL29hY3V0ZS9vY2lyY3VtZmxleC9vdGlsZGUvb2RpZXJlc2lzL2RpdmlkZQotICAvb3NsYXNoL3VncmF2ZS91YWN1dGUvdWNpcmN1bWZsZXgvdWRpZXJlc2lzL3lhY3V0ZS90aG9ybi95ZGllcmVzaXNdCi1wZGZNYWtlRm9udAotJSVCZWdpblJlc291cmNlOiBmb250IE1GRUNVUitOaW1idXNNb25MLVJlZ3UKLSUhUFMtQWRvYmVGb250LTEuMDogTmltYnVzTW9uTC1SZWd1IDEuMDUKLSUlQ3JlYXRpb25EYXRlOiBXZWQgRGVjIDIyIDE5OTkKLSUgQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLgotJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQKLSUgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQKLSUgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3MKLSUgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLgotMTIgZGljdCBiZWdpbgotL0ZvbnRJbmZvIDEwIGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wNSkgcmVhZG9ubHkgZGVmCi0vTm90aWNlICgoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250IHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4pIHJlYWRvbmx5IGRlZgotL0NvcHlyaWdodCAoQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKE5pbWJ1cyBNb25vIEwgUmVndWxhcikgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoTmltYnVzIE1vbm8gTCkgcmVhZG9ubHkgZGVmCi0vV2VpZ2h0IChSZWd1bGFyKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAwLjAgZGVmCi0vaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgotL1VuZGVybGluZVBvc2l0aW9uIC0xMDAgZGVmCi0vVW5kZXJsaW5lVGhpY2tuZXNzIDUwIGRlZgotZW5kIHJlYWRvbmx5IGRlZgotL0ZvbnROYW1lIC9NRkVDVVIrTmltYnVzTW9uTC1SZWd1IGRlZgotL1BhaW50VHlwZSAwIGRlZgotL1dNb2RlIDAgZGVmCi0vRm9udEJCb3ggey0xMiAtMjM3IDY1MCA4MTF9IHJlYWRvbmx5IGRlZgotL0ZvbnRUeXBlIDEgZGVmCi0vRm9udE1hdHJpeCBbMC4wMDEgMC4wIDAuMCAwLjAwMSAwLjAgMC4wXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5ODliOTk3NGIwMTc5ZmM2Y2M0NDViYzJjMDMxMDNjNjg1NzBhN2IzNTRhNGEyODBhZQotNmZiZjdmOTg4OGUwMzlhYjYwZmNhZjg1MmViNGNlM2FmZWI5NzlkNWVhNzBmZGU0NGEyYWU1YzhjMDE2NmMyNwotYmY5NjY1ZWVhMTFjN2QyMzI5YzFhMjExZGQyNmJiMzcyYmU1ODIyZjVlYTcwZDk5ZWI1NzhjN2JlZmQ0NGNkZgotMDQ1YTM2MzA1NmU1ZTFjYzUxNTI1ZWE2ZmMwNjFkY2ViYjMzNzIwOGVmZjcyOTgwMjM3NmEyODAxNDI0ZjY3MAotMGU3ZTYzOTdiMjhmMTViYzEwYjQwMDEyYjBhM2VhZWIyNjkzZThmN2Y2MjdjNGM5YzdjNmM1YmZmMTA1YzFlNAotMWIyYjllOGYwOTI1M2I3NjA0MGQyNjhiODA3MTllMWIzZjVhNTVhYjdiODkyOTA2OTliNTBjMWJmMWJhZWZmZQotMWY1N2JlN2I1ZWEwMjUyNDFhMjQ4YTZkNGNmYTUwNjdhMWRhNmViYTRjZmM5NDA1OTliYTNmM2M5MzRkNzI0OAotYjhlNGFjNTgxNmYwZDJjZThiM2M0MTkzY2UzOWQxOWZmZmRiNzUyNTQ1NzMxNzNjYjUxY2NkODNjMmYyZDA2YgotMjQ4M2NmOWIwN2IyMWVjNmY1MDJmMDI4YzI3Mzg4N2JiMDZkYWUyYWZhYzEwZTlmZDNjN2NmNTFiY2E3YjI3NwotYjcwNmU0MjUzMDJkYzc4OTc1YWMwZTQzYjg3MDczMjU3YTVjZDc0MjRiNjg2NWZjYTg5ZDg4NmU4Zjk1YzRmNgotZDQ1NzYyM2RiYmMwZDE2YmFmZWI0YzY0OWY1ZDcyYjA5YjE4NTAyZWVhYjY4N2U5MTVlOWI1MzZhMzYxYjRmMQotNDRjM2NkNGNjNjgzYjVmMDVhNGVjYjQ4MjNhNWViNTE3OWJiN2VlZThiNzZjMjFiMjQ5MWE5NzgwOGY2MzE4YgotNTg1YjBiYWQ5OGY0MmZiNGE3NTViY2I3NGNkMzU0Zjc5NGM4YmVhNWI5MGZiOTY4MWJkNTg0OWQ0NTI0N2UzOQotOTMwYzg4MjQ5MDIzMGUxNjYyZDM5Y2NhODc1YmZmZWFjM2U3OWE3OGRlNmUxMjk4YWJlOTgxN2FlOTg2NzVjNAotMTYyMjBhZDBkM2EzNjU4MGVlMmYyYTE3YWFhMTI0NmM0MTZkNThhNGM1MmZiYjI2YWFmM2I2Zjc1ODMzYWY4ZQotM2FhOTk2MjE4ZGFmYTU3MWZiYzdjYWQ5MGVjZTljODgzYzgxM2Q4ZjE2OGM1ZTg2YmJmYTBmMGE1Y2IzNmUzNQotMmRlNGNhYTBmOGQzMjI3ZjcyYzUwNTZiZmI1YmNhNmJmOWM2MGUwMzdhMGU0NDY3MGE4ZDNjYmM5YTE5ZjM3OQotY2E4ZGIzMGI3MTFmNTE4YThjNzU2OTIxMWFjNzBjNDZlZWQyYWY2MmEzN2YyMzhiZDBiZDEyZDYwMzMyZTY3MwotYzZlNzg0YjNlYmEzZjJlNzFlOTk5M2I5N2U4YTM4Zjg1MDQ4OTM3ZTk1OGYxY2Q4ZmM2ZTY2MTA0ODU0NjEzNQotNTZiODEwZmExZmY2MTFiOTY0OTUwODFjMDQ1NDJkZjdmZWYwODVkZWM2MTlkYzhjODRjYzU3NjgzZDIxMjgxMwotOWQxNDcyOGFhMzI3MjNlMWQxNWYyYWY4ZjAzNDIyY2ZhZmQ4ZWE0YzkyZGFiZmUwMGU2MTEwYmNhMzlmYzU1NQotYmMwNjZlZjg0OGU0MzdiNTA2ODhkYWYyNmQwMDFhZWQ3ZTc0NjA1ZGRmOWMwZWQzNmJlNDU0NTVhZWY5MjY4OQotOGNmMzJiYWYyNDE4ZTAyMTE4NTkzZjU0ZmUxODU3ODA3YmZhMGI5M2I1Y2RjY2Q4MWQyOGJlZGUyMmNkYTZlZQotMmUzMjQyMmMxZThkYTg4NjZlNTI2MzAwZjkwNTllODVjYTU0MTIyZWNiZmZkYzAxMTQ2MDkxM2UwZDI4ZjdmNQotZmJjOWQ3ZjlmNjkzNGIzZDhlZmMxYTkxY2JhNDEyOGY2YmJjNWViNTVlNWU3YjczNjQ3YmZmNzA2NjJiYWZiYgotMTQ1Y2ZhNjVkZjNkYjg1OGJjM2ZjNTc3YjFiZDhiYzc0ZmI4YTYxYmZhNzFiODMwNGFlZWIzNmQ4ZWZlMTJmYQotNmY1ZWVlMGVhZTA4MzBlNTE3N2RjNzQ1MjUwZmMzNjJmNzgyMzFmYzNhYzk4NjQ1NTlkYmE5MmRkYTJmZWI5NgotMjYyOTI5MzQzNWJmNGE4OWY5MTNmZDE1NzAyY2YzMjU5ODFjYTNhMDhiMzI3ZjdlZTM1Nzk0YTllODgzMjZlMAotMjQ1NTliNTQ3ZmM2ZGE2MWI3YTNiOTM1N2Y3MmM3NjdiYWE5Yzc5YzRlN2I3N2Y3MGVjMDFhYzBiODU5NjQyNQotNWY3MzQ2ZGM4Y2VkYzcwMmQzZDU3YjA5ZWY4OWNkZDMzNzU2NjE5YWY1OWFjYjlkMTdhM2FiZWFhNmM2NTIxOAotNmQ2ODU1MzQ4YTEwOTU3NDZiMzRhZjE1ZGYzMTMwOTFjNTllNWJmOWU3OWIxNTZjZDc5MDNjMWM0MmUxMTVlOQotYzUyMDMwMzdjODA4YmQyOTUxOTVlMDc0ZmM0YTQ2ZmJiMWZmMDFjODE0ODc4ZjBjMTc3ZjU1MmJkYzliYjY5OAotMzQ5ZDczYWVjMTc5OTczNzRlYzkwYjY5MjkzYTA2NDQ0MjE0MWE0NGM2ZmU4ZTNjMjgzYzAyYTQ2NTVjNTc5YgotZjIxYjUzZDFmZDM3OTk2YzY4Mjc0NTYwMDc4NWM3YjUyYzRlZWI0N2ZhNWZkNjQwNzM5ZTFmMDlkNWM1ZGQyYgotYjc1MTVhNGNjZTBhMjEyODFkMzE1NTYzODk1OTcyYmVlODhiYmM3NDAxYmU5ZTIwY2IxNjBiNmJjODFlZDQ2OQotNmQ2NjE2OWJkYzY0OGFhYWU4YTk0OTViMDcyOTExY2M4MTRjMTlkNTNiOTVkZTAwNzFlM2E0MzlkM2MwOWMzYwotMWNkNDIyYzYwNTc0MGE4OTM5NDg3ZTI2YmI5MjMzZDRjZGVmY2NhNDliYmViMWI5MTM1NzBhNTFiMmY5NmQzMAotMmVmODkxM2M2YmI2MGI1NGY3ZWE0YjhjYTE2YWQzYjQxOTRkY2JhMjg0MzllYjMxYTk0NDNjYWYwNjFjNGQ4OAotYzIyY2VjOGQ5ZDhkODVkN2FhMjI1ZmQ2NGJmYWU3Mzc2YWJkNDBmODIyYmExZWNjOTMzOWUwOTQwMzE5NTc1MgotZmMwM2E1YzQ3NDJhZDkzMDY0ZDk3NTkwNmVkNjNhY2I0OTVhYWUzMjQ0MDNkM2JjYTExODE3OWUxMDI1NjU0MwotMWJjODRkNDdlMGMwMTYyMzRlZWMwYzUyMjU1YWU3ODM0MTc5NDFjYzg4NGVmYWRiNjNmODI2OTg3NmYwMGE4ZQotMWUxZjE5ZWFmZmZhMDA0NTMyMDNhMDc1Mjc1MGY4Yzg3NmFhZjg3ODI2YmFmNzdiODFkMzM2ZmZjMjkyNDljOQotYTZhNDRmNDAzODEyOTQ0NDc4NDA2MzJlZTU5YTNjNDUzMDM5MWYzNWRhNDVjMTZhMDAxZjc5Mzc4MmJlNDg4YgotNWUwMWQ3Zjc1ZGJkNTNmYjMxZjk1NmYxNjIwMmQzZDk0YTMwMDg2NjgxNGJhNDRjNzk3NjRjYzI1YWNiNTdmMgotMzMzZGZjZjNkOTdhOThmY2E5NDliMWRhNzFhYjI3ODg1MTgzZDhiYWFmYzliYzc0MzE0M2YyZjEwMDJhZDc1MgotMWU1NWQyMDdkZTIzZTk3ZDE3NjBjZDkxOGE1NTE0OGUzN2UwNWY2MzQ3ZThjYzI5OWVlZDI4ZDczMTlhYmNkZgotYTRhMjc5ZDVmNjRjYzIxNTFmOTFhMGJlOWU4MzgyYTM1YjUzNWE2YjVmNDFmMzcwODE2OTg4MWMyNDMzOTFjNgotNjdkOTEyMWJhMjFmNmJiMjJiZTFlYzk5MzNkOWFmMWRkZTk2OTNkNzcwNGMxMTQxY2UyYjk3N2ZmNTE4MTI5OQotNmE1N2Y3ODA2ODE0NDQwYTI4YjFkZmI2MmM0ZGVkYjgyZjBlYmFhYmVmMzM2N2JlYmNkNDMyNDZkNTRkOGViNgotN2FmMDdiMTY0Mzc0OTk4ZjA2YTBiN2UyNzFhZDZlYTk3NDY5OGE4MDYwMDIzNzRkMjcwYzZkZDVjOWRmZDVkYgotZTA1NmZlMWIzZDU4NDgyYTBjYzk4ZDRkNTYwM2M1OWVjMmUxM2I0NDYwMjM2OTJiOWFjMmRkN2NmNzY3ZDJkYwotYTdjNjJiYjM1Nzg4NDcwODVjYWI3OWYxMzliZDMxMmNiMDdjZTEzZTM4YzNmYjhmNjk1YmNmNDAyMWMyODJiMAotOWIyMGJhNjdmMzc4Y2JiODgzMjc1MWI4ZjNlZWQzNzBhNTcyMTM5NDMxYjkxODc4OTNiNTkyNTI5ZmIxYjZjNQotMTlmNTE3OThiY2U5ZTU2Y2E1MDE4NWQ0MmZiZDg1ODE5YzNhMTE1M2Q2NTk5NzUxMWIxOWFjZjg3ZTY5YzA3ZAotMmNhMWE3NDAxYzJiMjNmOTljMTlmOTVkYTBkZjEzNjQ3MmY5ZmI1NzRiMjFhZWJiZjBjMmY4OTJiOTI2MDAwMQotOWE5MTczZjEwOGU3MmMzZWI0YTkzNzE5MjkzZThiZTAyNmI4MzNjZDcwOWM3YzA1YzFhMmU3MjUwY2FkMjU4NgotY2E3MGZiN2Q5MjdlMzZhMmU0YTZmMzRlNzU0YzhkZDhlYTI1NzFjZDgyMDU0NzAwZDM4NmNkZjM0MjBmMzdiYwotYjZhNzBiOWE5MmU0NmNlYmVlMTNmNjY0MWM2N2JjNDA5NzlmOWI4NmUwNTIxNjQ2MTJkM2RjZTdiZTY3ZmE3MQotYjI2ZWU5ZjQyNWI1NGIzNTc3Y2I0YWNmM2RhZDAyZjJlNTVkMjk4NmRlYTg4YTVhMTk1NWI3OGMwY2Q1ZGVjZAotMjEzYzU1YzljNTcxODNhN2RkNTgzMmQ0OWVlODE3MjRhMTlhYmI3ZGEwNzc5ZjFhYTZhNzdkNWQzMTQzNGEwOQotYzZmNTNiN2UyNzEyM2RhYzA0MmY1OGRjMjc2NTNkOTQwMzU4YmI4MTAwYjQxNmI5MjBhZWUyMDY3MjU1OWY2MgotOGIyMGM2ODdkNzdmZjgzY2NhNDQ5ZTk0ZmNmNGYwNjYxNGZjNTM5ODAyMzQwNjE5ZTNhNzkxYTE4NTgxZmZiNgotOWJiNTk2MWQxZTcwZTU1NjE1Y2NlNWM5ZTE0NjZkNzc0MzVlNDg2ZjE1MTc1Y2Y4N2ZmZjY1ZTU4MTI3YjVjMwotMDI0YjkzYzFjMjk2YWFiMjRmMjk0ODNhZWJhMDA3MzZlZDMwYmU1YmI1Mjg0ZDdhZmM0MzI5NGI5MjdiZWMxYgotODY4MTRhNWFjMjVhM2I5Y2QxZjI1YzgxM2NhZTc5MWY5MzczNzVlMDEzMTU5NjI0YTM2MDk1NWE1OGU4ZmE5NAotZTQ5NTkzYTk3MTUwNzAyYzcxZGQ4ZGJmYzM3NzQwOTRkZjkzMDQxNGZmYzY4Y2JkNGI0YTI1MDQxY2IzYjY1NwotYTU0YzliZjc4MDE0MmQyNTg2ZWI1ZGQ5ZWNjMWViNWVhNjkyNDVkNWQ5YzJhZjg2ODk3NGFlNWQ0NmUzYTU0NAotNzRlOTY3ODBhZTY2MDIzNzc4NjU5ZDlhNDU4NTNjMjRkYTE4ZGQ1Y2EwNDg5Y2NjZWZmMjUzYjAwOWMwNmNmNQotODI2YWRiZDBlOGZjZjIzZWRkNzVjM2QzZGU4YTRjNzg5YTg5NWUwNmQyMDYwNmU0ZjhlM2MxYmQ3Nzk3NmU3MQotZGU0MDkyMDNlZjEzNDJiZGJmMmMxMWJiYWI0YWY1YTcwOWYwNDYyYWE4ZmEzYTAyY2JlZDZmMjNmYjRkNWUzZAotMTc1MWFjYmQ0MWVlY2Q4NTcxNTE4YTllMTM4ODljMjIxYmE1NTY4Y2FkZjczMGY5ZGEwMjZmYjM4ZTMwYTI1ZQotODdlZjZhMTM0ODRkNmVlMzFjMTc0YmZhNGI4MGNjMzgxMzRkN2IxOGM4NWM4M2I0ZjE0ZDNjN2IwYTBiNzA2OQotN2JhYTFhMzk3MjUyYWM0N2I2NzMwNmU0NWQ2NDA2MTUzNWQwNTU0MGM4NmI5NTk5ZGY5MDllMTA1YmI1NTEwMAotM2EwMjcxYzI1YmM1ZDU5NmRhMmE0NDZlMzVjMDE5YjVkZWFkN2IyODk2MTRiZDUwODVkNDllY2QwNDY0YjQ5NAotY2QxYWI1NjRhOTNhYzljYmY0MzhmYTU1OGJiZWY3MWMyZmUwMDM1NzNhMDM5NzlhMTBmZThiZDU0YTA1MzcyNAotYTUyOWY0NmZmZTU1Y2VjOGQ2YmJhZjFmNTdkMTYxODU1OTVjODJhMWVmNDJlM2M4MWNiYzU1YmY1MDU4NzYzMAotNDA0YjIwOTBkZjZkOWQyNTQ2OGMxZWI3YTRiMmIzZGE3ZjViNzE4MTU3ZWY4YjVmMjNhZjA4ODMwMWU0NjQxMQotYjUxZTZlMGQ0NjQwOTZjZTIyYmJjMjAyODQ4OGQ5YWY0OTc5MmI0YTE3Y2JiYmE4YWNlOGZjNTFlMWRlMDFiMAotOTdlNmRiMDU0NjZiZjY2OTc4MzA1NjQyYjY3OTBjMDhlNTlhNzA1NWY5NDQyY2MyY2ZjMjMwOTVkZjJjMjdlYQotZGVjYzFiYTU0ZDZiODFlY2M4NzNhOWM3MTc5NmExZWNlNzU3NjViODc4ZDEyZTRkYTllMTlkMDI2YWM0NGRmYQotMmRjN2U1NDA1MDY1NDZhYWM3MGU3YjgyYWU3ZmE5OGJmMzY1NDlmNGQ1NDBmZmZkNTNhYmFmN2VkOTA0NGNhNQotNmI0ZTkwNDRhMmIyM2MzZTdjNzAxNTJlOTZmNGU2NGY2YjE5MTg5NDY3ODlkNGY3MDM2NzVmM2RkNmU4ZTVhOAotZjBhZGQ1ZjdlNDQyYzM1Y2M3ODJjOTJkYjIwMDc1OTZlYzFhNzZkMmQyMmNhNWIwMGY3ZjlhYTk4MTkzMjdhNAotZGI4ZDBiMDMzNjlhMDVkZTk2YjhjNGVhZWMyNTRjYmEwZjM5ZWY2Y2EwMDVjNTNhZmQwZWMzMmYxYzA5MjM2NwotZWZkOWY3NzNiZDAwYjk1YTYwNTIzYmMwMzkyYjA1MGIxNWFkNzBmN2NiNDJmNmQzNjU4NzE0NGNhZTI0NDdhYgotYWE0YjRkOTM3N2E3ZTg2YWM0ODk2ODU4MzNlMWMxNGMzZTE3NjM4YjAwODg0YTQ2YzFlZmEyYjE1OGY2MjM5YgotMWJiZWQ2ZmM2OGZmNjA2Mjc4ZmQ0MjE2YzJhNmQ3ODg4ZjBmMGU1ZGZjOTk1MDk2MmQ0OTY0OTAxYTQ3ZDZjYwotMmUzMjQzZTFkZGU5Y2U3ZjQzNWE3ZGZiMTkzNDlhMzAxN2NlNDRiODdkYzZiYWVjMTgzNTRhMjA0MmM4N2VkNgotYzFlM2ExYTUwNWNjNjc5ZTMyNzg5Zjc1NzgwZjg0MDgyY2M2NTNhMDEwZDE0ZGJhODRkYTAxOTFhNTEwMzU5YwotMWQyNGQ3MDBjNThlNTQ3MThmMWQ4NTM5NmU3YzVkM2EzNjU2MzcwODViNmY3OWMwNjFkZjE3YmZjZDI2MGVhMAotNmI4NDE2YzkwNDJjMjgzMWViMDQxMzQ2YTIyYmM1NGY5ZDdiYTQzZjhjNDQ4N2ZjMjQwYmFlYzIwYWQ0YWFhOAotYzAzZjE4MGI2MTRjNTlkYjZlNWVjMTUzMWFlZmM5MDhjNDZiOTM0MTliOWY1YjJkNGViYTBhNjdiYTQzZDY4NQotMWFkNDRkNGI0M2I3Nzk2ZGU1YzlhMTFmNzI2YTkwZmIxYTM4OWEzNDIxNDNmOThmNDkyMzdmYjQ1MWM0M2ViNQotOTgxNTYyZDkyM2Q2ODQ5MjNkY2FlZTcxYjUyYWI0Y2U2MjY5MTY5YTM1ZjU0NWU3NDU4NGZhNDQwYzQxZWI4MgotNDFhYjE5NGM3OGE1Yjk4MGQwMjFiM2ViNzk5NDg0NmQ5NjNiNzhlYjZlMTQ5Y2NhNzcxM2MxMmY3NzAyMzAwMgotYjhhNzk3YzljY2QwYzJiZDcwZGJlNDRmODFmOWQyNzRhNWZmMzgyNGVlMzRjYjQzMTdmYTQ5NzFkNjdkOTBhMgotZjNkMWIxYjg0OTYwZjBmYmVlNDBlNjM0MWM1MjcxYjViOTQ1YjkwOThmMzA5NTk4NmFiN2RiMmUwNzE0Y2NhMAotMzAxZjZiODM3ODU1OWQ4NmYwYjBkOTVjMmRmZTk0YWM4ZTEwZGYwYzhjMTZkYmExMjUwNWEwZDQ2N2RjY2I4NAotMTZiZmViMTg3ODRiZGMxMDYyNGYxNWRhMWE4ODBmZmJjYmFmYmVkMGUxYzczNjA5NjI0NzgwMDZkYjU5Yzc4YgotZGRjZWU1MjRiNmY5YjE1YTg4NDllZTE5YWEwMGZhM2Y3MWEzYzJjOTZlNjhkZDAyNDhhOTRlY2M0M2E2MGFjMwotODhlNDllMDA1MjUwNzA2ODgwNDg1ZGYxMDljZTE1MDZjMGE0ZWRjNDBmNWFlNWZlMzQ3ZDUyZmY2M2IyNmM3YwotMTg1YTY5OGUxNzEyNDRhYTEwOTU2MjA0OTQ5NDlkNTI2Mjc2MTc1YTdlMTIwMzQwZDMyNDdjYmNhNGUzZGY1MwotNjQxZDZkMzkyYWJjNjFjODVhMjJlMDZjZGJjODljZjM3YmZmZGY4YTc5MzYxYzZkZDY5ZTY3NzQ3NzJmNjk5YgotOTJmN2E3MTg0YTAwZmRkN2YzNmZiOGEwOGNjZGU1YmJjYWIzNzMxMzY2YzNiNzQwNzIwNDRkM2VmMmViYzFjYgotMzMxMThiOGMwOWMwNDE3NGJhZWY4ZGYxYmI0YTFlMWY4NDhjMWE1MTc4ZWM1OGVhNjIxZjZmOGE2M2QwZmNmMwotMTNkYjc5Zjg4NWFjNjU5Yzg4MWFiN2U0MDc5OGE0MzM5ZTZhNzhiYTI3Y2Q5ZTY4MDNjM2Q0ZGYxOTZjNDYyYgotZDA4NTU1YmVkNTFkN2NmNTgyMTIwNDcyODM1NmNmODEzZjU1NDUxN2FjNWUyOGU2YzQwNDdjMDEwMDYxMDYzNQotN2QyNWMzMzMzMDc1OGY3MWJkMTA0MzM2NWJkYTVkMWQ5MjE0YzhiMTU5ZDBmOGZiNjllNDBlNmZiNGVmNDY2OAotYTIyODkzODQzNmRkMjA5ZGRhNTkyNTU5NzE1MWY4NjMzMjk3ODYyNzk5MTUyYjAzMTdiZjIxZjk1NzJmNTAzYgotYjEwODI2YWE3ZjhkMTVmNWQ3ODBlYTI3ZjFiOGNhMGJhM2RkNzMyZDNlM2VmZmNmYWQ2ZTZhZDg3NjlkYjZjMQotZGYyMmFjZTg0Njc0ODFkMTZlOGFmNmY1NjAzMmM5MGM4ZjI1MDBjZTY2YWZiOTRkMzc4ZDg5M2U4NDIwODA0OAotZWMwY2Y5MDA1MDdmMDJlNDBkYTNlOTkzODZmOTM5ZTA1ZDk3MzdiMGIxMWI3ZGZhZTQ3MzQ5NmQwNTZiZTVlMAotN2YxY2QyNTQ1NGY0YjI5MGNjNDNkOTM2NDUwYzNkNjc1Y2VlZjVkYTUzM2RiMjVlYzA3YWRkYzdlODM1NWQ4YgotOGFiYjA5NWRkZDYxYzkxZGEyZGJlYWMwNTc0ZTllYzlkMzE2ZWQxM2RmMDNjOTk3ZDdhNGE5YzdhNmEzYTE2NQotZWMxY2UzMTZlODIwZTEzMjkxMTMyYWU5MTY2MGQ1ZDE4MTIxNDZhYmZhMTM3NzI2ZTg3MDAzOTViNDI3NDUwMgotN2Q1M2IxZTVjYmE4MTdiZWI1NzdiZGRjYjk1NmU4OWFhMmQxYWIyNDEyOGI5YWU4ZTA2ZDlmMGE2ZGFiOTNiZAotZjdlZThlMmZmOTE4MjU1YzM3MjJhOGIwZTg1MjBkZDAyYmE3YzkyYWJhMTNlYmFkOWNlMGFkMGYxNmY3MjhkMAotYWQ0OWJjYjEyYjQyOTgxMWQ4Y2ExYjVhZTI5YjdkNTM5MzQwMWViNTgwMmRiNGQ0NDk3Y2FkNDNlYWQyMThlYwotYzY3NGY0MjE0M2JjMTc0YzUyNWJkNzM2Yjc3ZGMyOGJmYzdlMTA3MzY2ZWI5MDkxZWVkYTYwNjY0YTc3MTc4MgotY2I0MTUwNjQwNmRmZDI5Yzk3NGM1YTE4ZGE4OGI0NzNhZTU4YTJmMWZiZTU2ODBhNDAxMzhhOWQyZmI3OTU1YgotM2ZkZGEyM2IyY2JlN2UyN2MxZGM0YWVhMzA2OWIxZTdlMjUwNjhjOTA1MTY3MmI4YzlhM2EzN2Q2ZTZmZGIyNAotM2JjMjBkMzAzMTk4ZjliOGFkODE1NGIzZjRhNGYyYWNiMTdjMzFhMDQ4OWMxMzY2ZWI4YTEzMDEyYzZiOGNjYQotNGQ0MTZiOTExZGU3ODE1NjNlMjZjMDg1MzhlMDM4ZGQ4ZWY5MjQzNWEwNTQzNDhhZGQ4MTU2ODdkZGI5OWRkYQotODhmMWUyYzU4ODc3MDdjZDRiZTQ3ZjcxYWI4MWEzZDZjYzNlMDM5YmQwOTY5NzczNDg0MGY4YmQwYjg4YWFjNgotMTkxYzZkYjA4OTk0M2Y5OWVlNDE3NGU1ZmFiM2JhZjNhODQyOWUyNzNjNGQxYTUxNDBlMDA3M2Y4NjEwNTQwMgotM2Y2MGRmNjllNjU4MDliN2ExYTVhOGFlZTRkMjViZGRlOWZkNmQwNWEzZmNmNGJlNWYyNTNlNDFmYzQ5ZTEyMQotZGY4OWYyNTliYTk4MWQyNjE3MjA5YjUzZWJkOTJlNDMwYTY5NjY4OTk1OTYxMTc3YjE1OTkzMzUwMTc3MTkwNQotMDhmNjI1YjI2YjUwODVjMDRiMzI1ZTdmYjZiYjQ1ZWViZTNiYzlmNWM1MTE0ZWIzN2YxOTkzNzYzNWQ3MWE3MgotMzlhMDAzOTAwMzc2NGQxMGNiNDAzYjU4YzYxYmY0MTFhYThmNWQ3MTdiY2ZmMjNmYjMzOGRhNThkMTNjYTgxZgotYWNiMzMxNmQyYjViNjc1ZTg2YTk1Y2ZiNTI1MTk5YTIxYWYyNDhhMTI0NWM5MmVlMzc2ODhjNmU3NmE5NTE4NwotM2I0MTE2OTdhMWVhNjY5NGU2Y2NhZGRlZjNkNTcxMTRjZmRlNzA2MDlkZTY3OTcyZWRkMWRiOTVkOTIzZTA3NwotNGJjZTdjYzc3NjA1ZjliYTUyMjZmYjc5MjgyOWIxYjhlYWExNTM2MWZmNzhmMTkwYTA1NjNmZDYxYWFjNDQ1MgotZWUxYjBkMjkzZTY5NTQxNmM2Njc3MzVkZDg4NmQxMGU0NDY3YjYxM2RkOWJiODk5ZjJiZDc1ZjJmMTMxOTNmMAotNDgxZmNkM2I0ZTJhYWVjNmNmMjgyOWIxNTIxZGQ0YjY0NzFiYTMxYWEwYWE0ZDYzYTY0NTYyMDM4OTZhMTExYgotODljMTA2ZjFlYTg1YmZlMGMwMTA0YjEyOTJhMWY4ZDQ5MzM0NTc4Mzc1YjU1ZGVhZTJkNzM4MWY1Y2ZjYzAyMwotNWRkZmIzZDg1NDYwNTRhMGU2ZDVkODFlNDI1NDM4MzM4NWJhNTkzYTdkM2E4ZTBiZWIzNDI4NWRkOTVkOTdjYQotM2ViNTk4YjY0MzgzNDY0NGI2MTFlNmRiNGI4YjQzNjBjODQ3MTIwMDM4NzY4ZTIxODAzMWUwOTdiYTBiZGVhNwotNzMyZjdlNDYwMTU1YTQ5NmI5MWIzMjQxYzc0ZjllZTBjOTllYzdhZGY2YTg3YjcwMWEwY2ViMDdmZWY1ZmE0NAotNDRlMTI3ZGUzZTc3N2MyM2E4ZDkzOGY5ODc5ZGYxZGFiYjdhZGIzMTI0N2E1MzE3NGY5MTlhMmE1YTRmOTIwYwotOTQxNWYzOTc2YThmNGI3MzllMTE0YjJjNDlkNjdiY2VkYzE4NTI2ODZjYjA0MWUzZWU5NGVmOTRkOWYyMDk2ZQotNzZmMWM1NThmNDA4MTI0NDRjNmYwZjRkYWMzYTRiZDIyYjgyZTMyZDhiYmYxNTA0ZjgyMzJlZjAwZGQyZjNmZgotNWM0YjgzNDlhOWQxYmVjYjhjNTlhOWY0NzYzZjI1NjZhN2E1MTNhNmMxMWY1NGQxZmRjMTg2N2FiNzQxZjNjNgotZTJiNDRhYTk1NDc5ZTRlOTgxMzM1MDQ3M2JjNzg5N2I5ZWM1OTJmMDFmOTc2OTdhMTc5NjdkMzQ0YTRiYzlhNQotNjI3ODZmMjhmODdlMzYzOWQwOTE5MjJmNDk5NDY3MWIyMmVmZDQxZmYzZjZiOGE2NTExMTdkMGEyYTk3Y2NmYwotODBhNjljOTc0ZmIyY2NiMzZkZDZhNDg5N2JmODhlYmM2N2JmZDg5MmUzNWU2OTQwZTk0ODkzZTFjZGZkMjc5OQotOGNmY2YyYjM3MzdhNjIzMmU0NzgzZWI0YThhZTU2YjgzZWQ3NjYxMzc3YjMwMjI1YTc1YTFiOTBiNzMwNzllMgotNmFhMzNmZDM3YjgxZjdkNjBkZTYyOTMxYjZiZTlkMTYzNjdhNWZhYjFkMTRkMjgxZDNlOGQwOWRjNTI1ZjU0OQotZWQwM2E0NDlkZjQ2NTU4MDJiYzMyNjUwMTBmMjg2ZGY4NjYwMjc0MGQ4YTg2YWFhMjI4YjljNDdlM2U3OGMwYgotMjJkMjYwMGQ1Y2Q1NWEzMTE2MDU4ZGFhN2UzNDE3NDE0NGY3OGE4ZjcyZTBkY2I4Y2M2NGFkZGNjNTJkZjBkZgotM2Y4YzIxZDljYzA0ZTE4N2JlNTNmOGZlZDRmMzM2MzNiYTAzYWZhMTc4ZmE1Y2U3NjlhN2ViMGUxYjliZjViZAotZGUwZWE3NGRjOTk1OThhNjY2OTZiZjZkNTA3MWRhOTk1YTMwYjgxNDRhY2RlYTExNmNmYzQ0NzI1NWE5OWNjZQotNGVjMDFiYzhhMGIzNTVjMDg4MWY2ZTllYjQ4NzI1ZDYxZWUwYjI0NWUwZjdjYzM1YjllNzZmZTExZjY4MTAxNwotZjc5NGVkOGQ0YzRjN2EwMmUxN2JkMTZhMDIzNDdmMjgzMThjY2FhZmUwNTc1NzM0MDU4MTIxZTNhZDgwNjRlYwotYTAwODZhNThmMjE2MDIwYTJkY2EyOTM3Njk4MWEyNTk1YmZhYzJhMDM5NGQ0NDg5NDliNTJmZmI0N2U1YzVlMAotZDYzNzFjYjRhNDE3YWM4MzRkNmM5ZmEwMDE4YzVlZmIxNmUzOWUzMmM4NTA4OGIyNjZkNzRhZjU2MzBiMjU0NAotZDRjZjQwMzQ4MmM0OTBmODZkMzVmODFjYzQ0YjM0MjAwNDAwYzEwYzZkZmYwMzU0MjNlNzI1ZDQxZDJiNWVlMAotYzNmMDNhNjAzYTE2MTcxMzIxNmFmOTcwMzZlZDM4ZmY4ZDliMDlmMTg5YWQxOTFhMGQwMzM2OWMzZmNkNWEzYQotZjg4YTU3MzM4OTcxZDdiY2I1ZjNmYmY4NzM1YWQ4NDU5NTI0ZDkzYTkyZWFjMWMyYmY1ZjBlNmUxY2Y2NzVmMQotNmQ3MmIzNWNlYWYzNGQ4ZmFjMTc4YTFkZDgyM2NhMDQ0OGVlMWZhMmY2MTZiODAzYzM4Yjg5MjM4YWFhMWFlNwotY2IwNTdlY2RiYWQyODE0N2RhNDZhMzRiOGExZjFkMzg5ZTA4MmNjM2U4ZWIxYTdlNWMwYzkzMjM0MTgyNGMyMQotNTcwZTAwM2Q4YzExYzg3ZDcwODIzNzFkM2Q0ODA0ZGEzMmZkZTExOGM2YzViNWIwODgyOGU1NzgzMjAwYzZlYQotMGE3YWI3MzM0M2Y1ZmQ2ODFhMzExNmZkODE4YzcwNTRhNTE5OTIxMmViMGYzYTlhMGQ4N2JjMzY0NjcwZWUyZgotN2E1MDgxYTFlNDhhNTg3NDhkMjk3ZTAxNGRkNWRiN2ZhYWY3YTI3NDU5ZjExNTc0MWJmNGZhY2ZhMWIzOTVlMwotZTk3NDUyYmRhZmY5MDZhZjljNTJjNTkwODc0OGYxZTEzY2M4NWQxNjViYzg5M2MxZWJhNzI4NDU4YjcwOGY4YQotOWU4OTkwYTZmMjU4YmRhMDk4OWFhZDA5NTllNzMyNmQxZDZiY2NiNTBjNGZhYjE1YTZlYTNjYmU5NDcyNGZjMgotOGYxNzRkZjkzZmJmZjQxYWRiYjlkNGZhYzAxMjRkMzMxNTFkMDY3NTNkNGQ4NzlhYzRmMTVhZWM1ZDFjYzBiNwotYTllODYxZjc5MGExNmViMDgyMWIyYTdiN2I0MmQ2ZjNlMzg5YzUxYTFkN2M2NTI4NTlmZmJlNjY2NDZkNDE5OQotYTYyZWQyOGEzMGM4OTMyZGM0ZDI4NTVlN2U2MzExZDc5Y2VkYmE4YmVlZmUyY2Q1MjlmNGI0NTM4MmYzZTZlNgotYTc2NTlkYTliNzg2ZmU3YmMyZTQzMWVlM2YxMTg3M2FiMjcwOTIwMGI3MTUzNDNjYzI1YzUzNjVkMDZiZTlhYwotODI5NDU4ZmY3N2Y0ZDUwOWQ5YzM5MTcyMzdkNzU5ZGE2Nzc1ZTA5YzJlYWY0Y2U5NjZhMTQxNTdlYTI3ODBiYwotZTMyNDk0NDY1NzNjODJiMzNlYzVjYTE1MDAyMmE4MzMwMWYwMGY0MWVlYTM2OTQwNTliMTRiMmE5YWJjZWEzMAotNjVjZmQwNmI5ZGNlMzgyMzQ3N2JmODA5MzhkMzU1NDI3NjY2YTgyODdhNjVlMjMxYTIzNTdhZWQ4MGQyN2E2MQotNTgxNDBjMmNkYjFmNDRjYWVmZDZiNjI5ZmE2NjE0NDBjMzYxZGRlNzgxNzE1NDA1MjQzNmEzNmJiYzFiZjM4MgotZTMwMjg1OTc5YzQ1NjhiMTgwNDE3NzQwYTE3MTUwOTUyZTNlYjQwOTFmNTgzMDgzZDc1YTA1YTJkOTEwMDlkZQotNDZkYTM5Njc5NGRiYjUyODhlMmEyZTYxOTFkM2YyMmUzMzVmMDI3NWYzM2U5YWYyMTU0Y2RkYmNjOTliMTQ5YwotNmQ3YWFkN2ZkZWRiMjNjODA1ZjA5NzI1YjYwYjVlYzc3ZThhYzk5NTNhMzU3OGIyM2M2MDIzYTE5NmYzNTMzMwotYTM2ZmFiMmNhMTk1ZTM5N2ZjODIzMTg0MzRlOWYyODQ0ZDE3YmJkYzE3Nzk4OWZkOGFmNjFkZGI0NjUxMmQyYwotZjVkNzgyMTk0MWIxOGI3YzFmMWJlMTZkZjZlNmJlZDRhMTY1NWVkY2FmNjMwMGZhODc2NWU5MDNiMDNhOTVhNwotMGE3ZTZkNTU0NTdmNDUxYTgxNzdlMGU5YzlmM2FlYzhkMTc0ODQzZTNhOTllZDY5ODY4OTAxOWU5NmNiNDY4MwotYmIyNGM3MWUyMmY0ODk1NjU2YWNjNjdlY2Q2NzE5NjNhYmVmZmVmNTM3MjRhNjQ1Yjk4ZTVkMjY4MDI5N2ZlNQotMmQ0M2RkZmRmZDU1MzZmN2MyMzlhNTA5MjA3NjUxMmEyYTk4MjFmMTIzMzhlMzg4YmQ1MTE1ZmY0ZjRkMmMwMQotZDc0MWY4MjE4NzQzODA4Mzg5ODhjMTdiZDk3NWZjMzg4YTI1M2M4YzAwNmM2Nzk2M2NlM2M0NDA0YmFhMDc1MAotYzU2NzYwZTM2N2I1NjZlZDEyOTkxMWViMDU2YmVlNDJmMTJiZWM5OTgwMTc3ZjFiMzcxMzA2ODA3M2NmMzRjMwotNzBkNmVlMjAyYzQ5YjQyODA5YWZkMWY4Nzg2ZTE0YTZjNjM3OTRlYjJkZGY0OWQ1YTA2ZjM0ZGUyMzM1NjI2MAotOTZlYTI2ZDU3Yjk0YTkyOGU1MzEyMTQ3ZWNjNDBiYmM2YTIwNGM0YjNlZTlkNGY0MzYxZjhkZjllMWMxYWU2OAotZWY2MGZiZWI5OTMzOTg0MmU2NTI0NzkzNjJiMTlkMzNkZTA4MGY5NjI1YjVjMTY3YmYyYjExNzc1OTI5YjEyYwotZmE5ZTlhODljZjg0ZjI0OWExMDc4ZjU1ODQ0MjVlMmFkOGFjODJhZGMyOTg4NjdlYmVhMWVjNmMwNDI4ZmRjNQotMDFkY2NkZTM5ZTVmYzE0Nzk1OWVhMjU0MjE3MTUzYzBiNTUwZWY5NmMyMjk2NjRjMjIyODZhNzgyN2ViYmYxNQotYzdmY2RjNTdkYmI1OTE0YmIwNDYwYjZlMGMwZjU4Yzk4YjI2NDkyNWQ5OTk2ZDllMGQzMWZiNzBlNjZlYjllNAotZDkyODAxNWYyYzEyYWNkYjdkNzdhNjY0MDhmMjc2N2MwNWY5MzI5MmZhZTQ1NDkyZTVkY2VhMzM3Y2JhYjM0NgotZGE4MmM5MDVkZGIwMTZiYmE1ZDMxZTc0MGI4MTNjM2Q3MDlkNzhkN2FjNTAzMjZmOTBkMmU0YWY0YzFkZDg5MwotZTI2Zjk3NjdkYjQzN2I1MmE3NThkNjIzN2U1MmM0YTJhNzE2MjRkMmIxZjc5ZGJlODNiNmI3ODM5ZGViNDEzYgotZjM0YjkxYjNkZmJjODhiN2IwYjc4YWI1Nzk1OTRhYzNkNTc0NzEwNzRmNzhlNTlhNjRkNzViNGU2ZWQzY2YyMgotMzNmNmViYzg2ZTI4OTQwMmRlYTM5MDdiMGEyNDA2MTg4MjQ2ZThlNDQwNTRmODE4NTRkYWUwZmVkYWVmODk1MgotYzA1YzhmNWM0NTkxNjczMTAyYTBmMjRmN2RlZWE3ZTE5ZTI3ODYzYTI3YzAwYjUxMDY5MGIzMzE0MTNkZjgzOQotNWFlNWEzN2Y4YzZiMjUwODIwNzNiY2VkZTdjOGVjZGJiYmEyYzA5NDY3YWZjZWJiNDhmNGE0ZTI1Y2IwNjljMgotYjdhY2MyNjVmOTg4OTU1YTc5YmE5NWIzZjRkOGM2Y2Y5NDE2NDk0MTcyMzYwMTkyMzQwOWU5ZDgxYmE4YWVlYQotNjRlOGYxZjA5Nzk0Nzc5YTEyNjIwMjBiYzMwMWIxOTY2YTc4OWZhMmYzN2Q3NTIxZGI1MzZjMGM4ZGEzNmI3ZAotOTA2Mzk4YThhNDEyMzBjZGE5NzUwODhmYTVhNjA3MGQ4ODg4MmRkOGRlZTdhZjY5NmVmNWJhMmM1YTUyNWQ2MQotZDM1YTY4MzQ5MDdjNDg0NmNmYzY5YjE3ZWRmNzdjNThlNTAxYTA2MDBhMDRhYjRiMzZkOTAwN2FjNTRjY2ZiNQotMTRhNDcxOTNlZDAxZDRmZDVlM2M4Y2YwNGIzZTM4YzQ4OTVkZTNlZWUxNGRmYmU2MzUxYmJiZWE2NTMwMDQ2ZgotODllOTEzZDAyMmMwY2FmZTUyOGEzM2M0ZTg0ZDQ2NWZlNmZiMDMxYjQ4ZDkwNGM1MTIwZDQ1MmE2YzFmZGZiOQotMDhlMjQyYTA1ZDAxNWE5YWIyNTM2ZGJhZGYwZmZkMDE5MGQzNTVlZGNkMzE3NGNmZGRhMDk3NGUyYTMzY2JmYgotMmEzZDU1N2VkMmY2ZjI4NGNiM2M5OTBjMzA3MWI3ZWZjNjc4YTVkMjc1MThlYzE5MTJjYmFhODkwZGQ2YmJjOAotODI0ZWIxZTdhYzYxMjdhNjdlNjg0MjhmZmQ2N2U2NTBmZDQ0YzllYzQ0OGEzMDkwNTZjZTQ1ZTRhNGEyYjc2OQotODE4M2FjNDE4OTgxZjYxN2RjNDY5YTU2NmU3MTNhZWRjZTJiYmM3Y2RkZGYxZjdhZmZjNmQxMWU5NDc1NzEzMAotYzRlYzdiNTVkYmE3MzU2YjIxZTUyNjdjNWVkOTlmNDI3YTE5ZGFmNDc2ZTQ4OTkzZTg1NmM4NTJkMzVjYTFiYgotYjMyZDU5Y2U2ODhlZDE4NGZhOWVhMTYyMmMzMDZjZDc4OGQ2MzcyYzViNGE5NGIwMDFmMTk4ZTMzMjA5YmI1OQotNDZhZjFlZjdiMDY2ZDA0OTgyNWJiNzgzMThhMzhjYTIzZWM5YTkzYmM0YjRiMTI4MDZjMWEwZTViZTE3OWUzZAotMGMwZTViZGE2NTRlNTA2ZTc0ZTBlZjFhOGIxMmMxOGJjM2YwNDFkNWU2MWE4ZjAzNDM2ZjE0NmU0ZGFhZTNiOQotNmI4YzdhZTEzOWY0MmU4ZGNmNzcyY2I1NzQyMTA0YWFmNzc2ZjNkZDE5YmFkOTIwZGY3N2I0MmFhYzY1NGQzMgotMmRlMzc3OWM0MjYzOWI1MDA1OWQxM2I4MWMzOTA0ZGY3NmEwYWI0NzA0NmEwMTMyMzc4ZjkyMDEzNTlmNzFjOAotMTJlYjQ4MzdiY2JmM2YxNDk4YmY4YzdiMjI5OGU2YjJlNTI4Zjk4OThkZGZhZjc1YjUzNThhNzNhNjdlNjMwNwotNzA3ZmIxM2IyMzYwZmZkYzU2NTllZDhlNzBlY2JhYjcxMWQ4OWY4YzY1NTg2MjJkNjc3MzdiMTEwOGFkNTEzOQotYjEyNmE2YzdiZThiMjU3MDlmYTdjYzJhNjI1YTA3OTZiN2QwOGIxMWYwOThlZGI4MGY4YWEwOGE1NjY4YWU5MQotNGZmMWM0NzBkYmNjNzc3NWE3M2ZiZDg1N2NkYjlhNWQwYzEyMmQ0NzY1Y2FhOGQ5ZDM1NTE0MzkwYzliMzM5YQotYzA0YTc4MzQyZTE4NmU1YzQ5ZGJhNGNkOWFiMTY1YjRjMTM5ZTc2Yjg4YzgwN2NjNGI1ZGI3YjUwNjNjMmY4MQotMTY3MjE2NzA0OTdhMDE4M2M2NDNjNWE3MGFiMjQwNWQ1ZDhiNjc3M2E0YTJkMzliM2NkMGQ3NjNjMTJlYzI5NgotOWIzYzNhYjkxNjY1NmZjY2E1ZDcxNWU3ZGFjNzk2OTM3YjJiNmQ0YWRiMjUxZmI3OWIxODNlNmVhYjIzNzk2YQotMGJkMGJmNWJjYWIwMzUyOTQ2N2EyNjU3ODE3MTZiMDE4NjU3M2I4NjJiMmEyMDU3YzQyN2Q4NWQ3YjU0N2M3YQotOWU3ZmRmN2E2NzQ1ODdkZjcwOWZmZDBhNjNkMDg1MmVhMGQwMmMxM2U4MDM4NzYyZGU4MjM2MjczOWRlOWVkZQotMGRiNDI5NjQyMWQ0NjJkODI4NmUyMTUyYWE2NzI5OGM5ZmY1MTFlOGRlMWEyNjA4OWQzODNiZGJiZjI3MDY2YgotZjMyMjczOGNkMmNmMTk4YmRlZmU1NjZjZWQxODA4ZGFmYzAxNWM4YWU5NzIxMTc3NzY1OTRlOWM1MDZhMzIyMwotZDRjZWQ0OTVkNjIyOWM5YmVjMTdjNDcwNzE0MTVmODA0ODJmOWVjYWFlYmE2YTEzNWQyMTczMjU0ZGRlNmJlMwotZjBjZTlhN2E4MWVjMmU5YWY0YWRkODU1YjA4MzA5ZDM0ZTc4MGFkZjBmN2M5MDI5ZDJjZTBkNWY4MDdlZjBlZQotNTMxMjE3NDUwYzgyYjdmMzY0MzQ1Njc3MjU0OWFjYzJiYTZhNTkzOGM1MTdmZDc3NTExNGVkNDRlYzY5YTQ1ZgotZDkxMTBjOTY5ZWRkOWU2ZjhiNGJmYjk1M2FlZDc5YTFkYWY0N2M3MjM4ODcxZTRkNTM3MTAwYzRkODk4MWQ4MgotYTIzNDRlYjdkZjViYWViYWQyOGUzNDg3MGQ1MmQ5N2E2NmRmYzc1NzQwY2RhNmI0MDNjMTk2NGMwZmViMDM0ZAotZDNlNWM4YjRhMzdhY2I5ZjU3MThmN2I2YTNkMjY3Njk0ZGY4YmFhYWJkMzgxNTRkMTZjMTYyZWJlNDNiNDczZgotZWMxZjA2MDg0NmVlODQwMmQ2Nzk0MmVlMDgwZGFjOWIxOGViOGIwOWQzODRhYzI0Zjg1ZDI4N2VhM2UyYzU5YQotMGYyYzFkNmJhZDM2ZTI2MmUwMzFhY2QzOTlhMmI5YTc5NDA5MDhkNjVmMTQyZmIyMDk0MTZlODkxYTZhYmVlYgotMzg5ZTJkZjAwMjQzNmQ0M2ZhMTE2MWI3MTM4MmQxODQyNzg4YWYxYTllNmYzOWVkNTZlOGJmNjM5OTFmYTc5MAotYTUyY2UzMTJhYWVkZTkwZGYxYmU1N2UzYzExNTFkZDAzNTBmZmU3ZTQ3NmNhYzVmMzRjZjg1MDViY2JkMjVmMwotMjlhZWVkM2E1MmJmZTFmMTAzNjZkZmM0YTE1ZmUyMTJiMWNjOWRhNzZjODI3MmQ3Y2U4NWMyOTMwZDc5N2I4MgotNGE2N2RlNTVjNTBkNDVjYjM2NDBkYjJhNzllY2I2NDdhMmZkMmQ5NDgxMTRlZWE5YmFkNjMxMjMxOWY4ZGI1YQotYTI5ZDYwYjIyNDM5ZDQ1NzYwNzUxOTA0ZjVkZTVkOGM1YzlkMDIxMWFjOWQzMGI5NDU5ZGQwNWVlZWEyNDBmMAotOTdmMGMyMzkwNjhjNTE0YjgyMTM2MDkwMTRlNmJjNTA2MzNkMGVjZjc3NGMyMTBhZWU3Yzc1YTViYWMyNGU2MgotODEzMTgxZTRkMDQwYWQxYmQ0YmQ0ZWM3Yjk5YjhhMzdhYmQ2OTRjYjY3NDgzZDFjNWRkNWMxN2Y1NGVhN2YyMAotNTBkMGVhOGNlMWNiZmE1Mzk1ZTYyZTEwYzVkMTdhNDIzYWM3NmJmYmEyNWEzOGZkNDc0YjViNDExN2NjZmNjZAotMzBhMmZmYTQ4NGFmNDI5MTY4YjFiNTY3OWI2NzU0Mjc1NWU5ODliMzkzODdmY2Q5YjFkOGY4YmEzMTNhNzU4YwotNTg2NDFmMzRjY2JjOGYyNTU2YWQxYjE3YzMzZjYwMWVhNzZhYzc1ZWU2YjY4MWFlZjEyYzA3MTJhMTRlN2I4ZQotYThhNWJkMzE2MjIzZDUxNDJlOGI1M2E2ZjgxYThhNjA4YTNkYzMyZjIwYzVlNDE3YTZhZmYwZjcyNWRkNzg2NwotNDI5ZmRjZGMxNmEyMmVmNjExMmZkZmM1MjgyYzYxYTFhYTliMTM0YzFiNDIwZGU3YjM1OWJlODM3M2NmMzcxNgotZDdiM2FlODMyZWMxNWUzMDVmZjZjOGU5ZDQxOTdmOGIwMTUwYjMwZTFiOWU3ZjE1Mjc1YjRiN2E2NWRmYzYxMQotOTdjMGU1ZjkxNTYxZjNlNjIwMzk1MGVkZmQ2Y2VhMjBkMDY0OTA3MTQ0MmIyOTE2ZWJjZTVmNGQzZGE3MzkxNAotNWEyYmZlNmQwNTU1ODBhZjEzNGI3ZGRkYmI5YmFmOTQ3NzQ1NGVlZThhYmM3YjMzZWVhNTAwMTAyZTM5NTIxMgotNzhkMDhjMDhhZTQ1NWJjMGZjNWJmNWEwYTU3N2U1ZjVmYzcxNDkwYWRkNWE2MjNjY2NhMTM0YjYyYzE5ZDNhNgotNDAxOTQxNWVjZWUwMTY4NjIxYmUyYjQ4NTZlZjNiMzk0NGMwZGI5YWVmN2QzZTkzM2EwMzQxODQ5MzRiZmQ0ZQotM2ZlMjFkNGQyNjI1ZTY0NjRlOWZmOWNjMjVlNzkzZWI3Yjg3MDFkM2ZhMDdmZjlhMzAyMGY3NmQ2NjhkMDgzZgotNTljNmY2NzUxMTc5ZDYwZWIxN2I5YzRlMzVmMzgxNWFhNWVkMzc5M2EyMDMwZDMxN2YxNjEwMjE1ZmE5MjBhNQotNWZmMjlhNjdlOGU2ZjE4NmYwMGI1Y2UxNjQ2NzdlYjE5NjFlZWVlMzViNWE3ODkxZDQyOTY5NjdhOWQwOTZiYwotNzZiMGQwNzJlYWJhYjdlYTc1OGRhODlmYmRjMjViODI2MWQ5ZmEwODA5OWI2ZTg0NDk0ZmUwMzRjM2VkZDVmMAotYzQ1ZTY3ZmZlNTg4YjI1MzJlZmIzZGQxYzM0YmU5Y2UyOTk3MTJlYWMwZTRjNGNiZWU2ZjMwZTk1OGM5ZGVhMAotMTVjNWM0ZmVmN2NkNDQwZWE5ODJmOTFjMDc5Mjg0NjM4MDdmZTA3ZjI3ZWY2MWE1ZGVlZmE0Nzg3OTg0NzgzNQotZDRlNTBhYTFkZDBhZDJiM2QwMTA2OWNjN2I0NzQxYjNmNjgwMTMxZjdkNWNhZmM2YjM5NzhjM2MxZDYwOGFjOQotZDI0MzQyMDkyNzQ2NjI4Y2I3MWZhMDFlM2M2NzVmMTQ0NjNmOWVkZDRjMzM5YWRhNDFiYTRiNmEwZmFhNTExNwotMjA0NDYzYmM3Yjk0ZDAxZWRjMWIzZDU3ODE4OThjODU1MTY2MTdmMjliNGRjZTJkMzJjMjY4NmRkYmZkYjgzOAotZjY3YjA5N2JlNjAwZjZhZWVmYjZlY2E1ZjcyOWI0NWJlMzA3MjMyZjkyNzMxYzEwYzMzMzA2NzJjOTU4NDE0MQotNzE5MmU2MmEwZWJhZTgyOGZhZGQ3N2JmYzJlY2RjMWU1NjJkYWY1NjYwMzU0ZTBlZGQ1YjcxNzdiZDhlOWQyNAotZjc3ZTUyNmU2NDkwNDRjZmQ0OTYzM2Q0OGNlYTY0ZGU3MTRlNTk0MzhhZDk4MGUwYjFmZmQ1MWVlMTk2OTJlZAotNjY1ZTJmZjMzMmJiNTRiZGJmNzUzMTZjNGIxYTM5YzUzODMxMmZkNjQ5ZThjNDYyOTk0ZGM4ZjE0YmYwNTZmZgotMDgwNGRlNzY0NzRkMGVlMDg0ZTM2M2M4YjcwODFiMWMwOGUyNTJlMDVlNDk2NzllNmM3YWM4MWY0MmU5MzcyZAotZTVhZjY0ZjU5YzRmYjYyZjNlMmU3YjE2ZmY1M2JiYmMwMDZlM2Q5YjBmMjk0MzRkYjVhNjMyMTA5NDQwNTNkYQotYWI1NmIxMDc1YTBjMzgzMjIyMDc1MmQxMDRmYTE3NzBkM2FjZmJjMzE3MDRhMWI3ODUyYzA3NzA1OGY2MTZlMAotYTQzNzNjMWM5MmM3YjYwNTY2NjkxNTczNTAyZTlhOTJkNTgzYTMxNjNiZjMxZmMxMDBjOTJlNjQwNWVlNGQ1NAotMDlkMjNhODMyMjViZjZkMWRlMmM3YmVhZDAxMWFkNjQ1NDdkNjgzNWFjOWE3Mzc4MDMzYzg1NTkyYTBjMzQ5NwotYTAzYzE2MTkwZWJkYWJiNzkyY2EwYmY4MDNkY2JjM2JkZjBmN2E1NzFhYWUwMGY1OTZlZTAxZWI0NzZiYWQ5NwotM2EyN2EyMTlhYWZjYzBmYTI0NWM2NzMxYTJlOGU1NjFjNjNiN2JjMzE0N2I5NDMzYTgyMDNmZGRiNzEzOGIwYwotMTYxMWM3ZTYyMzc1ZjJhMTE0ZjdiZmFiMzZjYjFhOTRiOWUxMGNhNjM4MzNhYjI0NWFmNTk1MjE3Nzc5YmM3ZgotZDEyZTY4YTY1OTE5ZWNhNGZhZTcyZjc1NTY2OTU4MGFiMDAwOTQ1MmJmMDg2ZWE4MzVmOTFhMGQ1YjM4NGI0MAotODJiZDUxNWYwMDY4NjViYmVlMmM1MGRiNDNiNDQ1N2E3OTM2OTM4MDZiODZmNjhhMmIyNDE5ZmMzZTkzN2E3MgotYzZmNDE0ZGUxNDhkMmE2MmE3MWVlOWZjYWI3MTBkNmRjMDhhZDZjNGFjNDQzMzY1ZTdhNzg4NDNmODBjZDc2OQotYzU2ZWZlY2MyZDYzNDg3YjVmY2VhZDFhYWFmOTQ4MWE3MzYxNzIzMzg4ZjViNTFjMmQ5Y2VhOTA0ODZjYjlmOQotNzlmNmY1ZWU3MThkNGE0OWVkOTFjYjA5MWFkY2JkMGU3YjNhZDk2MzM2OGM5Y2RlODc3NjY2YTc0MmNmNTA3MwotYWFmNzk0MjhiMzA5NWY5ODlmYzFmYTZmNWFiMWQ3MjRkOTJjMzNjMTMyNWMwNWEzOTQyM2I4YTgzYmJhOTM1OQotOTc3OTNmZGEyODA3NDBhZWI2YmUzMTkzYmU1ZjRmZWVjYTJhOGYyOGVmYTljOGUwMTZmMGZjODdjOGYzMzkyZAotNTcxNWI5YjlhN2FhM2M2MWFjODQ0NjFlMmMzMjIwMzcyNTY4YWFlZDg1MWYxY2M0MDQ4MWUzMjYxOTdlY2FiMQotZjNjZDc5MmZiZWIyN2E1OGE1Zjg4OWE1ZjYzMjE0NzMxNDhjNmQzMTFjYTg5YmU5NjAzOWFjOTQyMzcwMGQ4NwotYWIwZDdlOGI4OTcxN2QxYTYyY2ExNGUwMWY1MWJkNzc4MzJiYjZkYmY3NmIyMDFhMDRkMjIyODUyMDUwY2M1YwotYzZhNDk5Njc4OWEwYmZkNmNlMzY0NTkyMzAwMjgyZjEwMmU2NmY0YWU5ZTUwZDYwZDg4NmNhY2IwOTlkZjk2MAotYzQyZTIyMTMwMTdjNTY3ZjI3MzI2ZTY3N2JiZDA0YTIzOTYzMTk1MGI1NjZlYjM5ZTRmNjc1ZDJlOTg5ZjU2ZgotNzRkYTNhMDQ2OWQ5ODhlYTAxMjJlY2MzNjcwZDQ1OGFkODJiY2Y3YWQwNGJmM2NhOWIwMGQ3NmVlNTY5Zjk4YgotYTM3NTI4NWExYWJiZmYyNTNiOGYxNzlmNzFmNDk2Mjg2MzMwZTM2NDA0OWM3MmVjYWQ0ZDgyYTkzM2FmMDE4OQotMDNkZTVlNGFiY2ZjNjM3ODAzMTY3ZTU2OTExZjgyNjczNWE3YzQxZTc5MzZmNGJlYTE0ODM5N2JjZmIxOGNkYQotZmIwMzE4MmVkN2M1MTFhYTlkZTBjNmU2YzgwYjI0Y2I1MzVmMDNlZTE2YmJjYjUxNGQ2NWNhOWFjMmVmMTVjMQotYWExODI1NzU5ZmM0ZWNhZmM3YzBkOTQwMWYxMzliM2YyMGVlOTE1OTU1MjY4NTc4YTkzM2IxODRhODZmMjAxNwotMDNjYmY0ZGI3OWJlMThjMDljOGNiMDdkODU3MzliODY1M2FkMzdiOGMwYjY0NzE2MWU1Y2FjNzQ2YjNjMGI5NAotMmFlMmEwNTQwZjM4ZGJlZTEyMmNhZDBjZjczOWVmMWI0OWI2ZGJiZDVkMDhjOTdjMDRkY2EzMzAzMGYxODcxOAotNTgzMzM3YTAxNTM5NWUxZmE5MzJkZjAzMjhjN2RkZDk1NDZiNzgxMmJhMDZkODJhMzVmODExMGQ1NWZhMzc3ZAotZmE2ODgwZjUyNjQ1ODkwZDU4NDc4ZTRlZTNiNzJmMDhiMmQ3MTEzYjI0NTM3MjliMzdlNGZmZmFkMTNjNWY2MgotMDZiM2M3NjdhNDVjODBiZDQ3OWQxZTI0ZGY2NjBlNDZjODNjNDgxNjZmY2NlYzEzYjljYzRlNjJhNmFhYTgxMwotN2M0MjQ4ODVmODNkNzY0N2I4MDg0OWMwYTc3YmVkNTYyZjEzNDAzNGNkYTlmZDZlOGQ3ZGVjOWU0M2YwYzAxOAotOTI4N2RlNzU5Njc2ZjIwMDA1NTU2Y2VkYzY3YzMxNTA5YThiZjU2YTVjOTcyYjVkMjQ3ZjIxZDhiNmE1ODk1MwotN2Q5MjEwMTg0MTE2NmQ3NzgxZDRkODBjZGMzNWNhMzgyZDhjMmRhYzNlYTNhMzRmOTNkY2UwZmY4Yzc2ZWYxMgotMzkwZDVkNTdkODhmM2JjMDBkNDY1MTNmMDM1OGM0M2EyMmM0MTNkOWE2YmE2YjNlMTM5MTM0NzRiOWU1M2JmNQotMzExMzZhNWVkZjkxOTI5NjVhY2E5OGUwNjMxNmMwNWZkM2Q2ZTg4ZmUwOWNjMDhlMzI3ZWQwMjdiODFlYjE0NgotNjNlMzA3M2VhNWQxZDU5Yjc0MTQ5YzVmNTI0MmQzY2IyNTNjMzZhODRjYzgzN2Q3NmIyYmEzNjEwNGFlZjBkOAotZjlmNDQwNGQ2M2M0MmYzZDYzNWRjOTE5NWVhNTgyYjU4OWNiNWI1NGFiMDFhZjlhZTUzZjNlYzk1OTkyYzA5ZgotYTViZmU4NmU2ZWY2OTQ4YmMzODc3MzBhOWNmZjBjZGQzNjU2NTBhZWFhNWUxZDUyZDhmODhkZDQ5ZDM2ZTZmMAotNzg2YzdmNGVmOGMyYTVhMjQyZTg0Y2ZkNGRjNTBhZGZlYTBjMmFjMjc4Mzk2OTliOTJmYThmZWI2NDM2ZjJhYQotZDAyNzEwNzc3MDgzNzIzY2E3ZTQ4MWY4M2I2MzdmMTlmZmI3NTExZGUyMjNhMGEyNjEzMjQxODllZGIzOGQ4OAotNmZmNWNiMTM1NmU4ZDU2N2FmZTc2Zjk2Y2I3MmY4ODAxNmUzOWU5OWFmNmFhZDQ5OWFjNjBjOGEzMjA1ZjI1MwotODJjMDMxMmUxZjJiNmVlN2IzN2QxNzhiZDRlNjc1NTAyNzZhNzQyMWI0ZjUxNGZkMjkzYWQzMmJiMTEyMTIzNAotYmZmOTNkMjI5N2RkMzJkZmRkN2U3YmE5MWMwNTQ0Zjc5ZGZlYTk2NWY0ZjY3NDk0ZjNkZGQ5N2Q3ODgxZmNmYgotMjBlZDcxZjZiNWNkMjdiMTJkMDQwOThhOTI5M2UyNzMxNDg1OTBmYmI2NWY2ZmJhNjNlN2JjZjE0ZGZlNmYwYgotNTFmODcwYmUyMDE3NGY5OTEzMjlhNWVmM2QzYzlmY2UyMDY3OTlhMDFjYTEwMmVlNzk5OWMyYTk3YTE5ZTc5NgotYmI1Zjg4OTIyYjc2ZjkyMmQzMDJkZDgzM2VjNTMyMDIyYjEzZWM1NzNiMzc1Y2Y3NWU0OTcxOGIyMjc4ZjJiMgotNGNlOTg2NWYyMDkwMmQ2MzU4NDQwZWZjOWVhYjZlMGUwNjlhYzdjMTkzYzg4YTA0NGNmMzNmNmEzOTM4OGY2YQotMjk2ZjQyYzYzNzUzM2NjNTAzYWRmYzcxYzVmODk4YzQwOGE3ZTU0Nzk4NjhlYmQyOWM5ZWQwMjkzOWZmZDQ5YQotMjgxMmJhYTM1NWJlNDI5ODU4ZTBjNmFhYzYwODE3ZDY4NDc3OGI3MWZiOWE3M2U3YWM0ZmNiMDc4YmIxYTc1YQotYjQyNWVhMDlhZDg1ODVhYjNmYWQ3OTQyOTMyMWE4Zjk2ZTJlMWYwMmFkNzBlMmZkYmVlZTYyNWJiNDM0YjBiZQotZjhlYjk1N2Y4MTdjNTY5OWM3MjkzZTQ3ZGFhNGVhZDZkNDdmMDBmYmI2Yzg2NzRlZjFmNzcyOWNkYjE5NzQ5YQotY2E5Y2QzOTlhNGFiY2YyOGZmNzFlZGVjZWNiMmE5NTVmZmJlOWViZjRiZGFiNTYyNTZlN2NkNjYzMDRlZDRhYgotMWIzZmRkZjY0MzEyOTZhYTY0MWE4Nzk1YTQwMDZhMDQ5ZmQzYjM1MDc0YTg2NWM5MDE2MzZiNzA2MTllYzI2ZAotYWFhYThjOGM5MDYwOTM4MzM3MTQ0MjA5ZjNlM2RlMDFlOTIyOTNjYTg5NTgzY2JiNGMyZWRlYzA3NGJiNGMwNQotMTUxMzBjM2ViZmQ3OGRjNjg3ZjBhZDA5ODFjMGQyN2ZjYWViMjhmNDcwMTkzY2ExM2Q5ODI3N2RiZmNmYmYzOAotZjgzNTNkYmQwNDM4MGFiZWY3MTc2YjBiNDE5OWQ3MzE5ZWJmZDg4ZWNlMjE5YmE2ZWRlYzU5ZmQxNTg5ODdlOAotOWFkYzAzNWI4ZmIyMTQxYmUwZTBmMjVkNTZlMDc3ZTU5OTJlNGY5NTY0MGFiY2E3YWVhYzNkOTI5YmUwMmQ0MAotOWE4NmRiY2MwNDM2MzdjNWUwZjFhNWExMjU3OWU1N2IwNDJiMzg2YmU5NmM5YThiM2M0ZTc5YzhkZDI4YTUyYgotYTExNTk3Mjg3ODVhNzVmMmU1NzliODY2OWEzNmE5ZjllNzgwN2ZmOWQ1YWEwZDg2NTI2MDlhNDcyNjRhMjAwMwotZmQyMDJiYzhmZTljZjgwZTJlZjA1ZWE1ZTVmYmFlNjc2YTc3YmJkYzQzMDhhYjkyZWIwZGQ5YTk2MGY0ODY1YgotODMwNWVlZjQ3YWJjMjM1MzI4N2Y1MmM3NjZlYTFjMWI4NmZkYWNmMDk4NmU1NmE4NzQ2MmFjODIwZTYxMDUxZQotN2YyMmNkOGVhN2RjYzc4MzhhNDVhMDhlYTNmZWMxMDVkODBmZTVlZTVlODc3MzJiZmMyZTlkNjY0YTdhYjQzYgotMDUzMjE1NTdkNjljZWVkNmI2Nzk3OTdhNjdhMGMzOGI5ZDEwMWJiZTg3MGQ3NDY1NjgzMjVjNTJkNGNhMjU1YgotYjIzZjk2NzJjZTJiNGUzZmU5NDRmNWRiYzM4OGU1NzVhYmQ4OTdkOTY5YWMyYTgxOTE1ZTNmZWMzZDc0MDllZAotMTRkZTFlNGNmNzczN2I2ZTQ2ZjZjNzExNDJkYjA2YTc5OWE3MjA4NTM5YzY0OTI0NGNlNzNhNThmMjI0N2U4MQotNGYyNDFhYmE3NGQ2YWU1OTNkNDdjMjI3MTM3Y2NkZGNmMWY1MjNhNzMwYTIzNGM5MWFjM2FlOGE0NTZjYWQxZQotOTFhOTQ4MGM0MzhiMDQ3YmU0MGJiMmU0MDM4ZjhlYmMzNGVjYzNhODAzNzQ1NGI3MzQyYzMxNzg3MWZjMWQ5NwotNDJmMjZlM2Q5NTZkYTc2NzlhMDcyY2FiOTZiMjdmYjJkZGY0ODBkMmY0MGVkODhiMmU1YjBiODI4OTJjODMxNAotY2VjOWJkYzEyNDMzMTU5NzE0ODkxYjg1OTFhMDUxY2YyY2NlNzU4MGFmNzRkNTA5NmY1M2E2NTM0NzQ4OGJjYgotOTQ4ZmIwMjhmMzEwNTc1ZDM0MjkxMjNlYmVjZDliMDlkODNmMzBhYjhjOGFiNjVkNDlkNjkxZmFjMjdlMzYxMgotNjZlYTA4NjM0ZjRjN2QzYTY0OGVjMDY4YzJjZjMxZjExNjk1MTkzNDg2NGRjYTI3NTVkYWFjYjZkMjI4MDNmMAotOTQ4ODExN2VmNjZlOWIxMjY2M2RhOWQwMGEzZWIwMjgwYmE0MTJlNGI2ZjYzOTdlZTc4MDBmMjUwZmJmYTAyMwotMzE2MmFkZGNjYTRkYzIzMTkwYTUyMzk3Y2RhMzI4NTI5MTg0MmEyYjI2OWM0ZTA3ZjE3YTAwMzVmY2JlNzg1YgotNmE1NzBlNGI3NTY5MjY1OGVkNDdiNmRiZjI5N2FkZjFiM2IxNjQ3NDBkMWU4NTFmMDhkZWNhOWMwNWEyNjNhOAotMzM2NGM1NDRjZWNlNzA2ZTc3YTMyZjZkNWQxMGY4ZDQxNzBkNTI0NmQ5MmMyYzlmYWU0NTdlMGY1ZTRlY2Q0ZAotMDhiNGVkZmQ0MmExNzkxY2NhNDEwNzhkNWU1MjA4MDc4MTcyMDYxOTNkOGE2NDllYjM5YjY0YzgwZTEyNmZlYgotMjQwZTE3ODRkYTNjNjYzNzgxOTY4MjgxMDRjNDllNWZiODY0NzVhODBjMjFkZTcxZTBhYTM2YWM1ZTUyOWFkZQotNDI3YzAzYzIyMzZkYjBkZWNhOTljN2M0ODZmZjQ2M2E3MjcyM2VmYjUxOTI2MzkxNmU3M2MyNWRhNjI1ZDBmYgotZTQ1MjU4YWQyYWJmMzQ0NWI3MmNiZjNlN2U2NGQ1MDcxOThmNjY2ZWRlYzAwMmUyMzNjYzBhZjZhOGMxMDk1YwotM2NkMjMyZTJlYzUwYjJlZGUzZTA5YjYxZTI1OTk2YjRhNjRjMGVlYzlkNTUwMjViMWY0N2U1M2UwYjEyOGJlZgotYTM0NjQ2YjRlMmMxMzY5OWQxMTJjOTU4NTkwMDU4ZTZiNjA2Y2JkOTc4Y2JiMGVmNjllZWUzNTBiYmY3MWZmMQotODIxM2E0MmQxMzVlNzdlMmM1M2E4MTIxYWEzZGQxZTkwM2RjMGU5NjE4MTBkMTAzYmQ3MGEyYjQ0OGYyOWVjNQotYzNkOTA3ZDcyNDNkNzZjNmFlMDRjMjJhOGZiYzZjMWEwNWY5YjllYzk3Y2JiMGU3NjkyOGY0YWEyNmM5MTNlMAotM2Y4YzM3MWVmYjYxZjM3MDc1MWVlYTZhZjI1YTNkZjRhYjNkYTNlNGFhMjYzYzI0NzczNDNlNGIxOTkxNTIxOQotYzRjNTJjZjQzZGJmMzczYzMxNmI4MDYxOWY0NzlkOWI1MzFlNjJmMjZlZjlmYzZkYTEzZTljZjBiY2U3NGQxMwotYzI4MzJmMWM5ZDk0MzI0MzdkMjUzZGNjZjczY2Q2OTkzNDI1MjFhM2NmZThmODVjY2RjZDIzZTliMjQwYzk2MQotZmNlMTVlZjc3ZmFkODQzODY3NGI1NWRhNjM4ZGYyNDkyYjI5ZmMxYTAwMzg1OWYzODJhNzc2MjYwYWU1MDY3ZgotOTNkZDE3NjE4MWMxMGM0YTQ1ZThmMjM3YzVjOTc4MWUwMWQyZTFlMDg5MGUxYTZlNzVlMmJiZmRhNGQyOTYxMwotZWZkY2RmYjIxMzE3ZDc3MGZhNmMxYWMzODAwZjMyOGJkYjgyYjQ4YjczMjBkZGNmNjRhZGQyMzM3NDk3MWFmMQotNTA0NzBmZDAwMmMwMWVmNDEyYzViYjQ5ODQ3Mzc4NDBkYTVjOWUwZTRkNGIyYjc3NDcwNTZhMzg2NWFmNmRiNAotZjRiOWNkODRkMjdkZDJlNDVhYTBkOWYzMmQwY2Y1OGE1ZjFiYWEzNzQzNTkyMjNjZmRkMDdjMTgwMTc2NjBhMgotOTIyNzQwNGVlZjBhYmJkMGUyOWJkODY5ODc1MmU4NTQ0OGE1YzNjZjU5NmRjODA1YTg3ZmY5MDNmZjg5MGU0OAotYjc5NzE3NjRmY2Q4ZjkyMWVlZmNjNTViMmQyMGNkNTkwOGE2ZmEzNWQ1NmJlYTk2YTM5YWI1MjFkOTg1YzUwYwotNGUwMjEzYjMwMzI1ZDI5NWEwMGQzMmQ5N2U5NTY0Njg2NzEyMmRiZWYzN2EzYzg2NmZkNzJlMmYyOWVkODc1OAotYTM2MmE0ZjE3ODc1Y2JhOGJlMjNkMDRhMzU3MTRkNGMyN2M0NDE3MDM5ZmM4YmNkMjUzNjVjOGE0YmI0MTgxNQotY2UxZjc0OTQ5ZDZiNmFhNThmZWYwYzRjYmI4ZDU0Y2U5MmQ2NWQwYTY1ZjEzYWM2MDYzZGU0YTU1YmE1NTYxZAotNTA5ZjJmZWMxNTViMjE4MWExNjllY2YxNGYxZmFiNTg3NTY5ZjI2MGMwY2FjZGVkODAyMWVkOGQ3Y2FlNWFkMQotMzMyZjEwNjFlMTY2Njg2YjQxMjc3NDk1NTk3YzE2ZTcyOGQ2YThmZjQ5ZjgyNGRmNTAzYTYzMzIyYjQ0MjE4MgotNjY1YTEyOTAwZGQ0OGQxMzYxMzQyNTc1ZmRkNWM5ZDlkZGQ3YmM3M2E5MzdiMmFjNjI1NzI1NTQxNDAyOWE2NQotOTAwMTE5OWU5ZTFmMTZjZjNjZjg3NmJlZTAwMDMwMjkzNTQ5M2FlOTk3ZTNmMTEyNDIwZDdkM2YwNjczOWI3OQotZWRkYzFiZjdlY2ZjNTMxNjU0OWQyZmYyMjhhNGUyOGI1MjJkNmNmYWFlMzE0OGJlYTI3NTVhNDViYzI3ZGZjNQotMTI4YTlhMzg3NzdjZDNiMDdmOTFlZGFjZWRiYTI1NjViNTUyMThkNzg5MWRhODYzMjQzY2Y2OGU3ODAwYjgyZgotMDM0MTc0MGExZjVkYzZkY2YwMTI1Y2RhODQ0ODY3ZmU0OTQ1MzI2ZjEzYTk1NDQzMDc1M2EyOGVhODQ5MWJkZAotYzU0NWU3MWU0ZDUyY2FiYzNmMDVkY2U0MzQxMDFkMzZhNjIzMjhjNWZlNmI1ZGYzODY0ZjlmNWFlYzIyZjM5OQotNDNmNzJmZWQwODFkMzcyNDMwNjQ3N2EwNmViOWI2ZmNjOWZhZWI3N2U2MmVlNGUyMGNjNTE2MDBiMWJiMDgxYQotMWM1YTAwZTA2NGQ1NzU1ODM4YjI1MTgwN2FlNTdjODU2NzVjZjA0YjY5YTY2YmVmMGMxOWMzNjQ5NjlkMzU0NwotNTVlZmNmMzFmOGFlMzQ2NTgyNDYyZTk4NmUzYTFkNjUzYzIwNWU1ZDU4ZDIxZGU0NTUzODMyYzg4NWU1NDNiZAotMTFlZWEyZDNjMDhmODgzMDAwOTY2Yzk5MjgxMjUxZmJjMjkyMDkxNzcwMDAzNzI3OGQ0OTM0ZjM0NDFkZDUzNQotYmRkM2M1MjExMWVkMGIyODJjYTIzY2ZhOTdhYjI1Yzg3MjZhY2IxM2Q1MDU5OTI0NWU1MzI0MzI1NzJjMzVhYwotYjkzOTE2ODVkOWUxZGVlZDFmOTVmY2IxNTE1OTRjZDYzZTc5NjkxYjU5NzJiYTJjM2EwYzBhMmZmYWYzYzlmYQotNWFjNDdkOTE3N2E2OTE3NDJlNDYzNGRiNjYzMWM4Njk2ZDBhMzBiY2UxZDg2YTRmYjczN2FiODUyOTZlYTQ3OQotZmU5MGM1MWNjZTU0ZDY0MDg3YmZjODBhZTU2YWJiNWQwNGY1NTE2YmZmYjY4MWU2YjM5ZjQ4MDc2N2YyMTIwZQotOTdkMWU4NDg4ZjFmNTQwZTJlYmY2M2ViNzQ1OTY2NzBmNTg5MmY0YzMyNzk3MWY2OTdjNzUzMDc3OGMzNjc2ZgotMjc5MjI4OWNiMTI0ODY5MzVjNDQ3ZDRlYWY0YWZlYzY1ZmU2YzY5NjIzMDY0NDllMzNmYjE5ZmI5ODA2Zjg3YQotOGI5MTg3NGRkZjNlMzEzODQ4MWZkYzcxMWYwOTU0ZDczZjExZmJhMzllZmRlYjU1ZWQxM2IxNmI5MzI1MjVlOQotOWYzYzg2YWU2MGY5MDk2ZWZkNDk2ODc1OWRlZjhkNjI5ZmYyODM4ZGVjYmU0YzY4ODMzYmEwZDY0ZDFkMzMzMAotYjg0Y2ZlOGNlYjIzZjRiNWQ1NWFhNWE5YjUxZWU1OTVhZWUwY2Q2NjhiMjBjNjg3ZDc3ZmY4M2M4MDNhYjk5NAotYzc0M2I0M2Q5ODgyODM3YzQyYTU4Y2Y3MDQ0OTBmZGRjYjU2NDZkNDhjZmQyZTMwNDY0ZDcxMGMxNDQwNTEzZgotNDQxN2RmZDY2ZDM5ZTBmYTZjNTk2ZTE3ZDA3OTY0ZWJmMmNhZWNkMGE5ZmQ3OGUwMDM1NDFiYTUzNDY4ZTcxOQotYjdkYWMyNjg1Y2NiOWI3ZDg1N2FmZjFkNDQzMmE3MmY2MTgyOTAxMDkyNDc4MWY1ZDE1ZmZjZjhkNTA0ZTM2MQotNmY4NmM2NjM4NDY5ZGI0YWQyODFkOGVjMzY1ODQ4YjZmN2FlMTA0NzExNGEyY2QzY2YzZDFlNDZlMGI0ZjQwZQotMWE4ZDNlMWRmMWMxYjY3NzcwMmQ3ZmJkNWE1OTI0ZjkxYzcyNmRlMmUzN2I0MzYyNTBlYjcxNjEwZGQ4MmNkNQotNWMwNDlmZDA0NGI0NDA3Nzg0ZmQ4MzM4N2ViNmE3ODgxMDM0MzBmYWI0ZjY4MjI5NGIyODdkYWM0M2YzMDYxZQotZDk5Yzc0MzA5YWU5NzNiYjk5OGJiYjJhNjkxNDAyODQzYTFhMjhlZTYyYWU4ZThiYWY0ZDY0NWQxNTZiOTRhYgotMzQ2ODAwOTU0MjVhZDhiNGRjMjcyODllM2M2ODE4ZDYwMzJmOTE1MzU0NTlkNzU5NWIyYjliZmMyZjQ0ZTc4MgotMzBmMGFmNDljMGEyMjIzZTFjZWU5ZTEyODlmNjgyZWQ1ZThlYTdkYjk5NjYzYTIzNDcxOTY2N2JjZmZhODA3NwotZTAxMThiMGI5NzAyNTM4NDIxZGZhZGEwMWQ5N2Q3YThmMjMyNDY0YjlmYzIwOWNmMjc4YmQ1ZmVmODBjMTRiZQotMDExYTlmNmZjNzhkZDIwYWIwMTJhMzA3ODBkYjI1MDdmNGQ1ZTFlNDkzZjMwODE0YWIxYzcwY2RhNzVjZTk1OQotYjVkNTE1YjJlZTg2NDBkZDRiY2RhNjcxMDcwM2E5ZTU2NzBhYmFkYWU4NTZiODZlZjhlNDE0M2E1ZjAzZmMxNgotYTZjNTdhYzdjM2E5NmM1MGU0NTE5MWIwYjFjNGY2YWNkNjIyYzQwMGNkMGYyYWU5ZTlkNTEyMzZmMWI5NDVkMwotNzFhZGM1ZmVhYjhhYTg0MjJhMjg3NTViNjM5NzhhYWZmNzg3MTU4YTY4YzI2ZmQyOWFiNmU4NDliMDc2Yjg1MgotMjE5MGNhZWYxYTg2NjYzZjRlMTJjZGYyNWJhN2JmODgyZWYyZTBlMjFjNzdjMTRmZGY5NDA3OTJkN2JiMjhmOAotODkyYTljYTBiYmFiZTFjNzBjMTUyZjMwZjM2NmJjODZiNWJiMWViM2I1NDQyNTYxNzY4MmE1NDYzMjM4Yzk5OQotYWJhM2E3YmY3ODhhMjk3ZDJhNTU1ZGJiMjE4YjE5Y2U1MDFhYWM0M2Q5NGEwYmI2YWUyOTA2Mjg4MjFlZmIwYwotODRjZWVjYjMwYzE0MDkxN2E0NThkYjZmZDAxMWYzY2JmYjRhMWNiNWVhMDE5ZGI2MjhjMTA2ZTJhNTVmMWMxMwotNDQ4ZWRkNGE5YTE1OWViYjM2OWQ1MDlkYTI5NmRhNzI0ZjcyOWZjNzU2MGMwMGM0MWY0MzA5ZTMyZWE2ZmI3MQotMTZmNjIzMjVhNWFmMzE3ZjEwNmE4ZDhjMmMwMWVjY2U2Nzc1ZDQ1ZmRiZWZkZjY5MjVlOWE0NDYwNGRkYTEzYgotMjdjYzlhOTYwYTIxZWVhMmFmOWJkZjZiM2NkMzU3ZDYwOTdhZDQwZGY3NDAzMDA1NzQ2YTMwODMzZTgxNGVhYwotOGRiNzJjMzgzZmE0MmJhOWZkMDA3YTI2M2NlM2I3NGMxMzU2YmQ1MjJkMjYxMWU0ZTk2MGM5ZmY1MjA0ZDQ2ZgotZWUzMzJmOWYxMzRlNzVjNzkxYTZkMjA5MjNlY2U4ZDRkZmVkY2Y5NmFiNDVkZmQ3NTE3MzlkYmQ0N2I0ODYzYQotZjBmZGExNzI4NDhjZDI3OWFmZDlmYWMzY2M1NzQ0YzFmYThhNWZiNDk1NWM2YzFjOTUyZjU2ZGEwNjQzMGFlZQotMDg0NTA3NjY0ZjkzYzcxZDg4MWI2MzA0MWNkZWM1ODMwNjEwMGEwZThjNzc0MjFkNzU2NzljZTMzZTJhMGE2MwotYWMyZjgxMzAwNmNlYTY5ZTAwMzUyZmZkNWY1OTE0YjYzZGJhZDU5MDVhNTkwY2UwOTAzZWQ5Yjk2Nzk3NzllMgotZDlkYTYyZjQ3ODc2ODc3NmExNzM4MzJhOGYzY2Q2NmI2YjYyNDg0ZDE5MGJhZjJkODM0MjQxMDAwYjBlZWM3OQotZjFlNTNiNDJhNzRiMTU5YmY3ODFlZTQ0MTVhYjZhY2ZmODZjNWIwNTkzY2Y0NjNiZjk1ZDhmYTgyMjkzYTU0OAotODRiYjIyNmY0MGYyNDU5MWU1YWQ0NjNhZTRiNjcyOTA1ZTdhNDIyMmVkZjk3NmU4YWQ4ODllNzE5ODZiMzgxOAotYmQzZWViNmEwYzk2Nzg3YzZmZGYzYTRmYWVkOTRmMGJhMDI2OWZkMDgyYWM0NTE1MzFlM2IwYzAxZjk5NjA5MAotM2Y4MjFkY2Q2NDY0Mjg2OGYwN2FhMGZlYWRhMzQwODhhODVlNjY0NGVmMDdmNDQwMmI0YjI5MzA3M2U5ZDMwOAotYmIyOThiMGU0NGJlMzZiZGRhMjE4MjU5YjRmNDhmMWI2MzhmNTAwN2QzYWE4ZWNlODAyYjQ4NWU3ZTkwNzVkMgotNmVjODgxZmJkZWNiM2NmNThjOGEzYWZlMGQ5ODM1ZTdiNDY4YzY0OGU1MmIyZWRkYjgxZGNiYTRlOTY3OGJmNAotYjE3MzU0MWRiZWMzODI0MjNlODA4NzdiYTJkZjk0YTYwNWJiYzJjZGNhMmI3NmY3NGQyZWI0MjVkODE5MTk1OAotODA0NjE3ZjIxMTcyZjM5N2JiNzYyYWE3ZGZkMDQ4NWNkMDIwMzk3YTVkM2U5ZmM5NDA1ZWM3ZWRjY2JjYmRmNAotMjk1YTAwNTdiNzY4NGE3MDFiYjdlYTAxZTg5NzhmYjMzNjdlY2QwODliZTE5YWFiMjgyOGY2ODI1ZDI3NWQzZgotNjA2NjJjMWUyZWM1ZTk4ZWNiOTlhOTZkNmZlMzc5ZTJmZDE1OGE3MTA2YjIxOTA5MDJmMGVkNzE5NjliNmRhZgotM2Y5ZTQ2MGYxNmYxYjQwY2MyYWEwODMzMGI5ZmMyZTI0ODAyYmVkMDM0YjcxZGU0NDVhMTRiYjMzZjY0Mjk4OQotNGY3NjMxOWVkZGVlMzI4MzE5ZWU5NTc3NzQwZmM4MDNiODE3MTRhOTliZjBhNTcyMjk4MTQyN2JhMDg1ODU0NgotYzBmNzdmMzkxOTA3MDA2MDcwNGMzYmQ5OTFkOTQ5MDlkMjAxMjE0NmI4OGMwZDM1ZmJhN2MyZGU4NjRlMzViNwotY2FmMDA5OWM0NjMwNDQzNjI1YmUzNzY5YjAxNTI2ZjNmMGM4YzgyMWRhOWQ1NDZiYzI1OGMwMDRhNGQyYjQ2YgotODg2ZjFlZjkxNmY1MGQzZjVmZDEzOWUwNTcwYjQxNTFkZDQxZjFmMWI1ZGFiMGRiNzc4NzEwNWM3N2I4NjkwMQotNzNjNTYyZDNlZWY2ZWY3NDEwNzg2NTk0NjdmMzMzNDUwZDdkODBjNjdjOTFhMjZiYThjNzdhZGNlZTZmNGM1NgotYzdmMjQ4ZGQ5MjUyMGRiMzU3NjhlNzAzZjdiZDE3MWY5ZTY2M2I5ZGFlYmViOTYxMWNmNDg0MjViNmIzNWMxZQotOGJjN2EwYjQ1NDQxYWQzODU0YWM5YjM3MDYxODM5ZjU3ODI1NmE4ZTQxNzY2ZDFhNmIyOWE5OWEwMTk1NjIwZgotYTA5MGQwZWY0MTIwNjY3OTAyYjA1ODc5NDYyMDZmMjk0Yjc4Nzc1ZDYwZWJlYzY2OGY2ZTRmYjljYTg5N2U4NQotNzYxNTFiMjQ1YWZmODIzMmE5MGY5N2E1YTkzZTkzNWM4ODU3OWRjMGYyZTlkYTdjYmQwMjQyNmIzYjE1ZWQ1MAotMzBhY2Y1MDEwN2Y3YjRkNGUyYzMyZGQ3NWQ2ZDhjNDUzOTE3NmEyMjQ0ZTc2MWViZjFmZmJmOTdkMzM2ZmRkNgotZWY5Y2YxMzgzMjZlMTBiZGI1NzYzODIzNTM0OGVlZjhmZmQzM2M4NGI0MjZlYzFjODFmZDhkNGEzOTA3ZDUyZAotMWJhN2U5YjY0ZGQ1NmI4ZmJjMjM2MmUzMGYyNDUxYjY5YjBkN2NiZWExZjMxMDFhZmNkNDQyNDJkM2ZmNWI2NgotODlhN2MwNTQ0OWIyODEwMzVlOTgzYzZiOGM2ODg1OTczNGIyMzJhNzM5OTZhMTlkMTE2YWM0YTk0ZjdiNDgyZQotMWY5ODQzNzFlN2U5OTE5YzMxMjI1MGMzNWY2ZjdmZWUyNWVjMjNlNTYyZGNjMjVjYjI5ZWE3OWRmZjBlN2M4YwotZmExOTI4MDI4OGMyNmRkNWMzMmY0YWViOThjODVhZmRhNTMzMTkxODA5MjY3ZjA1NTU0OThkYTU2ODhiN2MyMAotMjE5YTA1OGVmYWE1OTcxMjU1MzU4NzE5MjJmZjliMjBjZmJmNGM0YjM1YmRmYTRiZGU3M2NhOGNlNmFiZjE0YwotNTEwZWQyMDcyYTAxYzhhZGZhZGEwMDY0Nzc3NTA5ZDRmOTdiZDJiYWY2NmU3MTUxYWRlNzZlNDA3MDY2ZWZkZAotMmUwOGExNTc5MGM4MWQ1NDViMzQwMDE5YmQzNTBjN2I5MGIzNmFkYzg2NThjMTg0ODAyMGE3N2Y5MThlMTUyNwotYjM5NzQ3MTBhZjUwM2E3OWQ3OTQ3ZGNlOTNiZDgxMTYxY2Q3ZTBiMTEyNWQyZmUwZWRhZWI5MWJhZjEyNzllNwotMzEyZmJlZDY0NjQ3MmIzNTIzMTBmZGZiZWZkY2M0YzIwY2NmZWQwZDY2MjYwODNiMDI2MWQ3YzQ3ZDk2Njk4NAotOGRjYTQyOThiOWRkYjU4ZmUyMWJiMzkxYzdkNDVkOWI1NjJkMzhjNGRjMjNhY2I1YWE4N2UzZGRmNTllZTIzOAotYzkxMzE4ZGIyNDkxYTI0MTEwYWY5MDUzOWExNjk0MDE0MWQxZWZkZjRhMTNkMjAyZjliOTQwMWJjODlkNzI5NwotNTI2OWNkNTUxNWY5YTYxODZhNmVmODY2Y2ZhMDM3MzBmNzI2ZDdhNDA3NWUwYmM2ZjA5NGU5NTg0YTg0Y2YxZQotNzg0ODliYjY4ZGMwOWVlM2YxMzU2ZjRlNDViODYyMWUwNjA3OGE2NzI3ZWI3MmMzNmZjYTgwNTIxM2MxNjc1ZAotNDM2NTI1NWQ5MDE2NGYzM2NlNmIyMjMxMTEzZjY0ZmRjZjVhNzg5Y2Q2MTAwMmIyYTM4ZDJjYTViZjFmNTM2MQotYzlhZTBmNGVmYjUxMzM3ZTM0NGZiN2NlMTVmOGVkYmRjOWVjODJhOTQzNTE3NWY1OWI2YzE5YWUyZGQwYjEwYQotOTQ0NTY1ZTRiMTRiZDFkY2RhMDJkNDJiZTI3ZmI5ZjAzMzA2MzYwOTEyMjhlM2I4OTcwOWM4MTQ4OTMyYTVmOAotYzViYTViZmVjZmVmNmRlODNlYjQxNGFkYzYxM2Q4NTM0YzRlNDUyOGQ5MzRjMzdlNzY4ZDA4ZTEwM2I4ZWQyYQotZTFlNDliYjFiM2U2Y2JjZGMzZmY2M2RhYzc5OTRiOGMwOTIwM2Q4MmE5OTcxMDQ0OTI3N2MyMGEzNGUwMTUzOAotNjdjNWQ1ZTZhYmViYmE2NTBjNDQxZDNmZTU2ZGU5OTdlOTI4MTkzNjgyZTVmMWZhYTkzYTViYzgwMDg2MjEzMgotZWQzYjZjMDA1Y2MwZTYwNDIzMWUzZTYxZDE3MjE0Y2EzODE0OGM4NzVjMjY4YTg2MWExNGI1NGU2NTlkZDkzMgotY2JlNmVhNzEwOWIyNzM5NzVkNmNlZWQzNTFmMGIwODc2YTBiNjQ3OTQ2ZDI5MDk3ZGQ5OGI1ZjZiZGE3YjQzYQotZTY0ODFmMTc3NDNmZGE1MDNiMzRhMTIwYzhjMDZmNDc5OGMxZmNkNGU1MjFhMzBkNzZmMjM0MGRmNTYyYjYzZAotZGQ0YjI3ZGE4YjU4MzU0N2QyODVmMzg0OGJiOWZkZGI2MGQwZWQyMmE0Y2IyN2EyNzg0ZThkNzY2MmU4NGZmYQotZWVhNTBhZmMwM2IwODE1YjcyYmJlOTU1OGM4OTU5ZDBjY2MwMGE4YzhjOWY3NDBmOTViNjcxYTY2ZGZkZmM2OAotNzdmYWMxMmMxOTk1ZDk3NzQ5NWM5Y2NhY2Q5MjRlNDVhNjZmODczOWRlMTU2ZWU2OTYyYzc5MzBmOGFhYzM3NAotODk0ZjhiYzM5NmZmNjlmMjI0OTM5MmM3YzQyNDhmOWNmOWZmZmY5ZWFmNjM1ZTY2YTM0NTExZjM5YTA2NmI4OAotNDg2NmU3NzZiOGQ2ZWNhMDMxOWYyM2NhNjA0ZWFkNzQyYmI2ZjZmM2IwNDY0NTRhMWMwZmMyNDI1NTExMTJiNQotYzc0NWU5YjhmMTI3MjM4NjdiMmI4OTVjMGY5M2M5OWRmMWQ1NDJiODZjMWM5ZGI0NzM5MGYyZDZjM2I1N2VjYwotNjZiMWE2YWI1MTRhNDdmZDlhYTYyNDBiNDZjNTRhOTJmZGY4MGZjNDRlZWVkNGI4YTEzNmZiODhiMWZhNWI5YwotYTJmZTY4MmNjYTRkMGM1YTNlOTk0Y2ZlYmRjMjcwZjQ4ZTNhZjkxYWU2YmM5MTcyYmQ5YzczMDUzYTc2MTM2NAotNmVmOWU2OGVmNThjNzE4YTQ3OGU3ZDgxZTU3ZjM0YTc5MWMyNjI2OTgxOWM3ODU3NGQ3Y2MxMjYzMjY4NDIxOQotYTFmOGUxYzVjZThiMzU4ZDZmYmYyMzk4NGU1OWQ5NTMzYWQzMTBkMTU4YWI1YmFhOWZlZGEwODcxN2E3ZjVlMAotNTc2ODRjNDU1YTdlM2Q4MzNmODJiNGUxM2U5YTkyYjBiOGZiYTVjZGQ3MmE3ZTQ2NzA5MDc0ZGRjODJlNDQ5YQotYzkwNjQ3NDQ0MTA2NmZkZDljYjdmMzQxZjNhMmVlOWYyZmJmNWU0ZTFhMzUwYTQ1ZmNhZDZiMmUwNTgyNWI2YwotODkwNzdkNzQyNjE5Y2YxZjg0MzRhM2I1Y2M0NDk5ODE3NjY2N2NmZDVjNWY0ZWU1MTMyNmQxZWUzZTQ0OTkxNQotMDBiZGFmNTdjODhhMTA3YWM0OWMxNGNlYmYxOGQwMTBjNWIzMjA2ZWM4OGZkMDZlM2M1MTE0NTgxZWU1YTVlOAotYzRlZTVhNWMzZDQ4NjUzZmIyM2QyOGYyNjg2MmM0MzNlZDA4M2FmMDFlZDNkZjhlMTQ3NTQ4ZjljZGQ4ODJmOAotY2EzMDg4MTA2YjljNzNiOWUyODc4NmZmYTY0M2MzNDNhOTQwYmY4NTBmMzEyNjY2ZTYzNWI4ZGI5NWM2ZjcwYgotODNkNjQ1ZmQ5NDdmNmRmMzIyZDI2ZjhmOTA4MWNhZTcxYmE4YjlkMGRlNjdkNTM1YjYxMTQ2Yzk1NjgwMWQ2YgotZmY5YTY5MzY1YmRhOWJjOTdkOGQ5MzE0MmQ0YzM2N2Q1MjU1NTg3YWRhMjVlNGZiMDYxZjhlNDMwZjczZDJhOQotNzE0MmQ5ZTRjMTc0MzViNzg4MDU5NDZlNGZkZTYyNGVhNWQ5YjVjNTExYzlhZmUyY2ZhZjQ0N2NmMDgyMzViOAotNTc1ZGRhYjhhZjkzNTg4ZTBjODIwNmYwOGY4ODMxNzBlZDQ0NjNkYTMxYTUzY2VmNjdmMDFhYWI4ZjY0NWFjYwotYzJjNzY0ZjI0YmY4MzFkY2YwMDU4MzNjY2QxMjk2MDI1MzY4YjNkNTFhMDRlZmQwOTVmZDEzNTVlOTNkZTU2MwotZTcxZGQwNDdlZjQ5ZjViZjhjMTdiMDFiMjg4NDg3MjI1N2Q3NDNhYzZmZGQ4ZjU0ZTI3YTI0MWQ3Yzc1YjM4NwotYTg4NDFkOGNlZGU2NzZlMzVkNGYwMWFjYmEyYWNlYmQ4YjIyMTEzYmZiZWY4MGQ1ZWFiMWU4Y2Y1NmY2NDlhNAotNTE2ZWMwOTc4NzJhNTk3ZTgzNTE5ZmMxMzk3YzdkNGE0ZjZkYjdkYWYwNDQ4MzViMTdkMDg1NTc4ZjVhMzc3NgotZmQ1ZWQ5MjM1YzAxODM1NGU4MDFmYWMzMzhhYTdlZTU4MWU5N2Q5MWRmMDE5NmVhNGJjYjA5ZjBlNmYyZTJiZgotYjU0NzA4MjdmMWI2YmIwYjcxMzNjMTliZjQzYmJlODI0ZWJkYWY5NTI2YWIxNWZmOGFlODg0OGJmMGRlY2IzZgotY2ZhN2QzZjVlZDcxMTkxODk0YzcwNWEyN2NkOWFhMzBmZDM4NGNlNmE1ZjBiYzUxYzU2NTFkZDI1MTBhMzQ4MQotZDA4NmFhODc1OTVmODg1YzRjMGFmY2IwMmIxODM3Y2VkZjg1YzVlNjRkNDQwZTM2NTgxODc0YTExNzA0M2I3NQotNzhkYTk0YTA2OWNmMmJkNTdhZTcwYzIzMGU4ZDFhMGQ0NjM3MjIzZDE0YTk4Njg4MzVkODkyM2ZlYjQwNDMyMwotNDNjMjJkMGYwZTgyMDFjMjAyNDdjNzhhYmY5MjY3OTE1MDY5ZDY0NzE4NjJjMmEwYzUxZWUzY2UzMTUzZTMwNQotNGE0ZWM2ZWE1MmRjYjU1ZGYzNThkMWEwZDhhYWZhNzlmZTA4ZWJlNGQyMmU5ZWNiOWQyZTUwYTdmMzY3Y2RlZAotNzE2OWY4NDI4NWM0ODJmYzFlZmZiZGU2ZmVlYTQyNGVjZGRhMjQ5NDEyN2M3Yjg5NmRkMDVmNWU2MmY1ZmQxYwotMDMxZGU5NjBkNmVjNTk5NTRlODQwNTA4MTYwMWRmNzQxZWRkOTdmMjI3ZmQ0MjZlMDk5OGNhN2I5YjQ5OGJlYgotNGNkYTlhMTY3MTVjYjY5OWM0NmQxMzg2NDY5OTU4MDc5ZGRmNWZmMTc0ZDcwMzM4MjA2MjA4ZjBiOWFkZTM4NgotMDNlOGRjZjMxZTA5ZjQ0OTc2YzFhZDc2Mjg5NmE2MTVkOWJmZTU0OTc4YjdjMzkxNDQ1OGM4YWY0ZDMzZGM2MgotOWY5YWY1MTcxZGYzYjllNTQ4YjI0MDExZWM1ZjAyZTMxZGMzNzk1ODJlMTZmM2M5OTlmMDQ3YjgyZTdmMjdmMAotNGJmZGQ4MjdjOWExZDE5ZTQyMzA2OTVkNGVjNDk5YWZkYjYxNDcxNDZjYjZmNWE4YTI2ZWZiZDZkMGM1ZjIwNQotMzRjYjljMzdmYTRjNGI2MTIyZjU1YmFjYjc1NjE3MzI4MmFiZDZhMmU1MjE5YzI1Yjg2YTUxODEwMjFmMGJhYwotNmYxN2Y4OWYzYjhmNzRjMjgxYWVlYTdjMWQ0ZmZhYzYwMmMyMzY0YzllMWVjOGIwYTYyM2JkMzU0MTc2NWNmNwotYWE1ZmViYmI2ZTg1NzgxMGE1NjQ4NTAyNTlhYzRjZTZkNjQxZjdiNzY1ZGQ0NjU4NGM0M2M4MTEzYzg1ODNmOQotZTc3NjNkM2Y0ZjgzNjQ5ZTEyZTE1NTU3ZjQ4ZGNiMGE2MzcxNDBiMmY3NDc5Zjc4ZjFmNjRiY2Y4YTA3YWNjMAotNDNiOWQ5YWMxZjhiMmMzYjAwYzM2YjQ2ZDhlNTE0Yzk5OGZjZDQ3MzU0YjM2NGU4YzI0MzRlNzc0YWM3MDk4YgotMjRjM2JmYWRiYWFiNWJkYjhhYjBhNmI5NzczYWVhNDE3NTYxNTI0MTI0OWEyYTU4MjIyZGY4YzUzYzMyZDAxZAotNmFkYzVmYjRhOTMzNjA1ZmZmOThjN2QwMTEyNjYzODBiMzA1NDAzYTc5ODY3OTM2MTU2MjQwYTVjNTU1MTA1YgotOTVjZWMzODczNTMwZmE2ZDM3ZThjZmMyODYxMThhOTYxOGM2MGQ2MjgyNDEyZDBjY2M1YThlM2FmNDdhNDJlYwotMjljZWUwMTc2ZDFjNDgwMjE0NDYxOWE1YmYxY2RmOWVjNWI4ZDZmODdjMzc5YzQ3NmFiOTQxZGEyNDQyMGE4NgotMDRhMGIxYWQ3ODg0YjVlMDUxMzYxMzlhZmNjZjBiNzEwMWNhZTRiOGYwYmZkYmUyNzZhYWQxYjk1ZTJjMGQ1NwotMzkwMmJmZGVlNjUxYTIwMmI5OTE4OWNhZGExNzZhMjJmYWNkMDUzYmJjNzNhZjFjOTBjYmRhMTA2MzU3OThlOQotOGRlMDVjMzM4ZTkwYjNkYzRhZmI4ZDI5MDEwNTkwYjY0MWRiNGE5YWI3MDcyOTRlNTVlNDRjOTdlMjc1YjUyZgotYjg4ZjUyYTZjN2U1NDVjZGM3M2RlNDZkYTY5OWM4YzNkODk1ODgwMzY4YWEwMzVhMTM3ZmE4Njg2ZWY0ZjY0ZQotMDkxNjdiOWU1MjMzMTJiMTc1YTE2NmRlNWUxMjk3YzYwZGIzNjFkOTUwNWMxMmI0OGMxNzgwYTAwYmUyYTlhMQotNDNiYzYzNjJjNzMxZWIyNmE2MTA5N2M2MmMyOGQyY2M4ZDc1YmEzYzYzZTMxYTQ5YjljYjViOGI3ZmUxZmJiYgotNjE1M2JjODdiNDUzOGVmNWNkNDkxOTgxMTMyOWFlOTMzZDg2ZWY1NTY4ODMzMjNlZDVhNmRiNWM5OGMxMWIyYwotY2MwNGM0ZjkzNzI4OTU5MGU1ZjdlZThkNTc5NDBmMjEzNzNhODFiOGI5MmViN2NhOTc4YzFhMDdhZjdiMTA2NQotM2U2NDk4YTZlMmZhNzM0MjY5ZDYxY2YwZGVkZDY0N2VkZGJiZTM5NWUxZTgxOTA1NTJmOWE0MzMyMDgyYmVlMAotODdmMjhmZDZiYjE5ZTQ4ZGU4YWQ2NjJmNDFiNGE1ZGU2NTc1MTFmMjMyOWZlNmI1NDFmNTBlYzQzYmUyNGQ1ZQotZTczMzY3MTI1MzVlY2U2YTU5MDQyNmUxMDQyMmQxMzBmNGZkOGIwZmUzMTRjOWZlMDY4YzZhNDU4MzU5OTRhZQotN2JmZGE4YWU0OWZhYjIzOTA1ZTRkOGIzNzRmYzY1NGYzMzZiMzZiMjA4MGRmNjFhYmMyODhiMjZiOWNhN2I0MgotNjhlNDZmMTIwYjgyY2RjYjc0NzE1ZTZkMDlhYWMwOTZmZDExN2FjZTMzODNiZWFjYTUyYWEyNDhjZmUzMDdjYQotODkzMGEzNGI3MDYyZmIxNTNkOTY4YzkzMTY5ZGQyMjM0NDljYTY4NzY1NDgwY2ZkYzVkZjM5YmU0NTA1NWQzNwotOGJhMTRkYWE1YTQ3NDVhOWY3Yjc2YWI2NjRlZjNkNWIyZmJhMjljNjBhMDZkMWEwODhjMDVlZWM2ZDk1YzA4MAotMTk3NGVjMzQ0YjI0ZGZkODkyZGI3ODc0ZTNlOWRmMGZkNjFlZjhmNTliNTI1ZjkyZjJiMzc0OTk5ZjkyM2YzNAotNjY4ZTU1Y2M5MGZmMjg5MDEwN2E3NTI4ODUzZjQ0MTc3ZmE1MmEwNzFmMGNlOTk3YWU5NGI1OTAyODk0MTFlNAotYzA2NjljOTM2ZDRiODg1ZGU4NDI3YjYwYjJmODgyMGJjOWQ2NzgxYmYyNzVhOTU5MjFkOGNmNGY1NWNjOGNjNwotNzNmZjdkMDAxZjRmYzVjNDFlYTFjNzU1ZWU0OGM1NTUwNjc3NzU1YWVlMDYxYTNhYzg1YmMwZDljMWU1YjQxMAotZjM4ZGRiODc3ZmVmNGFkNDE0MmM4N2M0MmI2ZmVhZDg3ZjFkYWE5OWVlMGZiZTdlN2VlZTk0ODY3MjM3M2EzZgotN2FjZTI0NDQ2MDc5MjFjNjFjZWZhNzM2MGYzMTk0Njg1YWNmODM2MTY1ZTE5Mzk1YzJiMmM5Y2I1Nzc4ZDlhMgotNmYzNWY5MWQ2MWU1ZTQ4MzhhYTIzOTA5YjQ2YTg5OWExZTAyZTI3ZWJmYjUzNjhmMTA4MDI3MmY2YWU5YWRjNQotNDRmNTEyMTkxYmYxN2RiYTNlYjIyZDk4YjliOTM0ZjM1OWZjODZjOWU0NTFkMmQ0MTk0NjMyYTdkYjViMTI3MAotNmE1OGNlYTQ3MzkyZmE4Y2MyNGY2YjRlYzVkMTcyZTllNTYwMTYxN2Q4ZTIyZTgzN2MwYjM1YjQyODEzNjRlNQotODE3NTdlMmZjY2I5OGZhODg4NzlkN2NjYzU2OGZhOWIxODM1MDRiNDkxMzI5MzIwYzk2OGI1NjExZWIxZjMzNwotYTZlNTBkNmZhYWM1OTFkYTk5NGFhNDc3NjE4NjVhYjg0NjUxYzMyOGJmMjU5YmU1OWJkNzUyZjExMGY4OTA4MQotNzU1MzgyM2NjNjdlMzY3MjFlOTVmMWM0ZTJlMzcyZTAyMGYyYjJmZmIwNDVhYTcwY2E0ZGQ2ZDU1ZDg4ZTMyZAotYzhhMTc0OTJlZjI4YTQ0ZDRhNTM2ZmNhOGJkNzViM2RjMzkyZmMyOTYzNzdiMmM0NzQzODk3YzMyZWI2NTI4MwotZTc3NmU4ZjhmZDk3YzY2MWM2N2MzZjBkOTczNDNhZjE0MWJmNmI3NzQ5OWExM2FmNDYwNWUzNmQzZjRjM2ZhYgotMTJiYzVkYWE1ZGIxZDEyZGZlNTkxNWFjZjE0NDA5ZTkzMDJiMWJiYzhjNTg2MTk0OGVhZTMyOWVhMzExMzJkZgotODQ5NDU2MGU1NjRiYzE2MDczYzdhNzc3ZmVmYjMwY2FjNmY0Yjg5NDNjNzAxOTUyODk5NDZhNjBmMDZkNDMwNgotNDUzNmMyNzQwOTk1YjcyNDc0NTFjOWUxNjE5ZjdlMjc3YWY0YmNiZmZmNmI2ODU1M2FlMjNlZWY3YjE3OWMxNgotY2FiNmFhZTdiNmY1ZmM3MmUwZDdjYWMzNDYxMWQxMzUzNzE2NTgwOTQ4YmE2OWRjNTM0YTNmYTU5Mjk4NDI0NAotYzFiYmQwYTZkM2YxZmM0ZDljOGZmNDhlNzcwZjVjNjViZTNiNWE5NjFlMmFiODkzMWU3M2M4MjIyZTZlYjQ4MQotODZlOTI5MDZiZjJiNDRmZWY1YTU5YjQ2MGJjODhhZDE4Mzc3MzA1MTVkODJjMzM3YzM0OWNkMDg3MzI5ZmZmZgotMDcxOGUyMmJkM2YwOWZlZGU3MDQyOTkyYTE5MTU3NTAwODg5MGM1OTY2ZjEyMzBhYjE4NmYwMTlmMTc5NDY3MQotOGU2MTljZTg3MDZmZDk0YmYwZmIxZDZlYzIyNTEzMTUwYzFiOTQ5Njc0MmE5NGUwNDhkZjA3OWJkZTVkN2JmMwotOWRiODI2NjhlNWY1NDUzOTYyOTkwZjRlM2UwMjQ1Y2QyZTc2N2M1Y2YzNzU0YzEzNzFiYjM3YmI3ZTE0ZGI3NQotYTkwZmNkNWRlMWE3ZDc1NzQ4Mjg5MTc3ZWJlNjVhMzk3NzYyYjViMWRiZDQ2OGU3Y2JiM2ZlYzY2YTZiM2YyZQotOGU5YTE4MDJiYjJjYzQ1MDZiM2FkMTYzMmQ2NzRmMWQ1NGEwYzFjMDg3ODdmMjc0YjQ4ZDYwZTkxMTFkODAzNQotYmUzYWY0NGEzYTEyZTE2MTc1ZWJiYWZkZWU1Y2ZjZTJhOWEyNmNiOTgyNmM4NjIwN2Y4ZWE4OTVlNWMyZmQ2NgotMjE2YmU4M2Y4MWZhNDdmMzlkYmFmZjM3ODk4NjViMWJlZjYzYmFlNDYzYjdkMTY2ZGZiYTVlM2U5OTY3Njk3ZAotZjZjOTFjN2RiYjc2NWJkYjkxZjRlZTU5MjA1NjdhOTQxOTk0MTY0ODRlNzVjYjZiMWMwZDFiZGQ2MmU4MzFmMgotNGI2ZDdiMTAwOWJlYTE0Yzc4Y2E2YjhmMTAyMGNiMDVjOWJmZDEzMDc2ZDVmMzM1ZDBiOGFlNDE3ZmEyNmM3NQotZDA0YTI4YTc3OGQ4ODU4ZTY0NzM2ZmEwYTViYTc4OWI1OGI0ZDA1NTQwZWNkZjI4ZWUwNDRlYTE4NzA0MDc2ZgotYzNjOTIwOTBkMTE5YmM2NzU5NDAyMWFhYTRlODlhMDYzYWMwZTY0ZjIxOThjNWNkYjM5NTFjNzY4MWFiYWJiZgotNmU5NjY2NmY0NjdhMGZkYzcyOWVmY2QyZjFkOTRlMTkzZDhmZDU2ODAyMDYzODQwNjk2ZjNlY2EzOTRjMjg0MQotNmI3ZTZiZDQ3NTlhYWNlZWJkZjgyYmI0NzNkNDkyNTZlNjUzOTQzNDY5ZGI3MTc5NGFlOTZiM2QxMzBiZjk3ZAotNzUyYTliM2JjNDQ0OWJiNzU2MDM5NjA5YTRmOWZjYzYzYzYzN2Q4NjcyZjJmMjRkYmQ0OWE1ZjlmNTEzOWM1NAotMjNjNGExY2JhMzQ1Nzg0ZjI4Yjc5MzNkZDNkMmM5OTM4YjM1ZTYzNjc4YjA0NWVjMzE0ZmQ5ZTkxODhmMWIxOAotY2EwMzRhMjZmNWQ3ZTJlNzc5Y2ZlNGQxNjU2MGVkMmU0ZjNhYzJiZjFiNTMyNGM2YjM0MmUyOWI1YmEzYzllMAotN2JmMWJmZjUxOWY5MWJkOWNiZDRjMTk4ZjBiOTg0MzFkODNkNzMwOWQwYTRiNjJiY2Q0NTBkNjI2NDllNWI0MQotMzM1ZDg3YzI5N2QyODg5NDJhNjM3OTk5YzJkYmRhYWFlZGE0ZjY4ZDE2NjI2NWEzN2RmMDAxYjFhNGE1ZjU2MQotNjRhOWE3YWY4MTA4NTFkOThhZjNlMDFiMGU0YmJjZGYzM2QzMDM1Yjk4MTE4YjQ4YzY0NTJkYTBjYWVjY2ExMAotMjI4YTMwOGEwYTM4NDRkNTc2MjhiMmRmZDcxODlmMWZkMjUyZWExY2UzY2JiYWI3ZTcxMzI5Yjg4NmNjMzZlZgotYjQwZjY0MmFhNTQ2OThlODdmNGNlOGIzMTBmMGVlMjk5NjhhZTA0ZGUwMDNmYmFmZjg0ZDg2NmU0MjIwYjYwNwotM2IzYzVmZGZlZjg4MzU0YTU0ZDQzMThkZDg1MmZmZWI5YmU4MTYzMGM2NzNlNDI1ZmQzYmI2ZGRlYzlmMjk4ZgotYTk5ODJmOGE1ODU5Yjk4M2JjYzA5Yjk4OWY0YTcxZWU0YTU0ZDM4YTIyMGMzY2U3NDkxZTdkOTk2ZDhiMGUxMQotYjA4NWFjYjhmMjE3YmUzNWYzZWI3ZmEwOGJkOGVhOGM2NmRmOGFkMDBlMzI5YWU3MzJjZTEyODAxYWE4YjFhOQotNDBkYjFhN2IzMDM5NjdjMTg1YjkwMjI5YTExODhlZWRhM2ExNTY1ZGFkMWMwODE4MWZiMzViYTAzNjY3ZDUxMwotOWYyYjZhNzFkZDI3ZTExYzdkYjlhN2VjZWQ2NDA0Y2IwOTI1MGZhMGFlMmYwZmU3ZmE2MTE0NzAzOWNiODY4NQotZTdhMTU2NmUyNWI0MGIxZjIzZmZkYTU1MTVjMTA3ZTM0ODdlZGUwYTE0OGYyZDg1MDBmMTAyYjRmNTE3Yzk1NgotODdiMmUwMzk5Mzg3ZjRhOTA2N2VjYzcyNWJjYjMyN2JhNWU5OGQ1YzY4ZmI1NGFjOTk4MzQxNDZiYmQ3ZTkxYwotYjA0ZDk1NzZiYjE2ZTM5NjA4YzE0YzI1YWFlNDQ2ZDI1MGIzODg2MTBiMjcxNDc1NzYzMWMxOGZlYjcwMDA1NwotYzAwMjI0NTZjOWVhMjgxNDBhMTUwZGM2ZmVhMDMzM2VjZjljMjkxZDk1NTA1ZGUzYzA1M2MxZjk1N2Y3NmEwNgotYTVlOTZmNzkyMjAwZWI1ZjE4MTFlODZkNzBjOWJmMWUwZDI4ZGEyOGI4YzYwNDI1NTVhMjdkZGQwYWExNjhiMAotMGYzYzExMzIxN2Q5OTBmNmVhZDBhNmVjYzRmZjRjOTJjNTc3MTIxZDJiMWRjYmZmNTQ3YzAzMTg0MzYwYTZiNgotMzc4ODkxOWQyMDMwMmYwYzM1NTQxYjQ4Y2I2ZTkyNmJlMDg3YjFmNzMwODA0MWRjOGNiOGYxNjFkOGE4YmQzMgotZWNjODYxZWZkNmViZTE2NTY4ZGQ0N2I4MmZkMWEwMjIwMDczM2ZlZjQxNzZhNzQ3NzE4NWQ3OWU0NGMxMjhmZAotYzU0ZjRmMjhjZWU3NmRjZGVkNzM5OWJjZmViYmZhNjIwYTZmNWU0ZGY1MzUwZmU2MDA1Zjg0NTQxYTZlNzdjZAotOTdkZGNmNzA0NDU1Zjk2NDM1ZWRiMzY2NmQ5Y2I1NzUyMWYzNWUyNThlZWIyMTYzOTQ0YzkwY2JkYjNkNGE3MAotYzk0YjlkMzkwNWZmZjQyOWYxNjU2MGM2YmM0NGFhMjdiYjQ4MWUyNGQwM2YyOWYxMzVlZWYzOGQ5NzNkMTJlOQotYzI1MWRlMWQ5Yjk3NmQ0ZDdiYjdiNGY2MmRjN2E2MDkzZDE4NmQyNDBkYjc5NzQzMmRmYjVlNzFmOGZhMDlkMQotYjliNmNiZGU3YjQ2NzRiYjNmMzg5NjcwOTFiOGIzNzVjMGU3ZGZkZGMwYTIwNmIwZDg5MDg3MDc1MjEyNTRhMwotMzViZTQ4NTI4Njc0Yzg1OTc4MjJhMGE5ZTljYTg0ZjBiM2QyYTQ0ZWM5ZGVjYTBkYjUxZmEyZWYzZGIxNjg1MQotNzkzOWViZWY1MmI1YWY3OTlmZjZmZTg2YjBjYzQ1OWJlOTQxODdhZjQ3OWU5NTY1MTIzM2YyNTE1ZTAxY2NjOQotNTcxMzBiMDFlNmU5N2RmMzc1Mzk2Zjg0OTk1MzVhMWZjYzBkYWU5MjBkYjI1ZGI0MTQ3NzI2M2E4NDdiNTc4ZQotOGFjOTRlNTlmY2I2OWI5N2ExZWJmOGQ4NGUyZmFiNjkyNWJkMTYwNzdkNWE1ODQwMzUzOWFjYjQwYWRiYjg5YQotNTU2MjNkN2UwOWE4NDgxZTcxYjQ3NDE2NzUxZjAxODgxZWNlNGQ5NGVhOWNmZjZkYWJiMzU0NmZmMmNkZTRjZgotMWJhNzdlY2FkY2Q0NDk5NjM3ZTI2YzUwNjRhMzQyZDcxY2Y1MGQ3MjVjNDAyODZhZDM1MmJmOTdlMGRhNTIxZAotNTgwNTVmZjk3YzY4NzY4YjQ0MzVkYjM3MmYwYjNkMjM4NDVkNzcwOWFjNDdiMmE5NjUzMjdmNjI1NzNhOGZlOQotZTljNWM0MzVkZGYxMjQ3OGJjZGZkZTQxYzBlNDMwM2IwMzk0OTQ0NmVjOTI5MWM1NTNlZWJkOWFkZDZiZmI5YQotNDUxNjVjZTM4MjBhZjQyNjRkZDNiNTRhYzQxZTRiMmRmNmVkZTEyODY5NzM2NjBlMzcyODFjNzU0MGJlYjY5ZAotMTZhODZhZTAzYjhjNWNlN2FjMTQyNTg1ZjcyYTBjYmE4Y2ZhM2M3MWE1NGRiNjBkMTMwNTc5MGZmYmFlZWUxZgotZjMxNzc0OTI2YTFkYTk2YTM3NTc0YzlhNWI2NmRhYWQwYTY4YWRmOWYxMDQxMjM5NDFhYzRkMzM0MmMxM2JhYwotYjliMTI0ZWM5ZGI5MTcwMzJlM2Y0OTUxMDdmM2NhYjkzZDU3NzUxZTg4YTUzNjllMjczNThlY2Y0ZjkzNDhlYQotNTQzZmI1NWMwNDkyODYyY2UyOGNmYjFmMjhlMGU1ZmZhYTMyZGY4ZmRjYTI0MWRiNTU1NjE5NTgzZmFkNzZkNQotMDRlZjU5OWYyMzNjNDI0MzU5NzY4ZjZlOGYwY2VhOTU3NzQ5MDE1NzcyNzdkZmQ4ZjkwNDE4NTk4ZQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotY2xlYXJ0b21hcmsKLSUlRW5kUmVzb3VyY2UKLS9GMTM0XzAgL01GRUNVUitOaW1idXNNb25MLVJlZ3UgMSAxCi1bIC8ubm90ZGVmL2RvdGFjY2VudC9maS9mbC9mcmFjdGlvbi9odW5nYXJ1bWxhdXQvTHNsYXNoL2xzbGFzaAotICAvb2dvbmVrL3JpbmcvLm5vdGRlZi9icmV2ZS9taW51cy8ubm90ZGVmL1pjYXJvbi96Y2Fyb24KLSAgL2Nhcm9uL2RvdGxlc3NpL2RvdGxlc3NqL2ZmL2ZmaS9mZmwvbm90ZXF1YWwvaW5maW5pdHkKLSAgL2xlc3NlcXVhbC9ncmVhdGVyZXF1YWwvcGFydGlhbGRpZmYvc3VtbWF0aW9uL3Byb2R1Y3QvcGkvZ3JhdmUvcXVvdGVzaW5nbGUKLSAgL3NwYWNlL2V4Y2xhbS9xdW90ZWRibC9udW1iZXJzaWduL2RvbGxhci9wZXJjZW50L2FtcGVyc2FuZC9xdW90ZXJpZ2h0Ci0gIC9wYXJlbmxlZnQvcGFyZW5yaWdodC9hc3Rlcmlzay9wbHVzL2NvbW1hL2h5cGhlbi9wZXJpb2Qvc2xhc2gKLSAgL3plcm8vb25lL3R3by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuCi0gIC9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvcXVlc3Rpb24KLSAgL2F0L0EvQi9DL0QvRS9GL0cKLSAgL0gvSS9KL0svTC9NL04vTwotICAvUC9RL1IvUy9UL1UvVi9XCi0gIC9YL1kvWi9icmFja2V0bGVmdC9iYWNrc2xhc2gvYnJhY2tldHJpZ2h0L2FzY2lpY2lyY3VtL3VuZGVyc2NvcmUKLSAgL3F1b3RlbGVmdC9hL2IvYy9kL2UvZi9nCi0gIC9oL2kvai9rL2wvbS9uL28KLSAgL3AvcS9yL3MvdC91L3YvdwotICAveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJpZ2h0L2FzY2lpdGlsZGUvLm5vdGRlZgotICAvRXVyby9pbnRlZ3JhbC9xdW90ZXNpbmdsYmFzZS9mbG9yaW4vcXVvdGVkYmxiYXNlL2VsbGlwc2lzL2RhZ2dlci9kYWdnZXJkYmwKLSAgL2NpcmN1bWZsZXgvcGVydGhvdXNhbmQvU2Nhcm9uL2d1aWxzaW5nbGxlZnQvT0UvT21lZ2EvcmFkaWNhbC9hcHByb3hlcXVhbAotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvYnVsbGV0L2VuZGFzaC9lbWRhc2gKLSAgL3RpbGRlL3RyYWRlbWFyay9zY2Fyb24vZ3VpbHNpbmdscmlnaHQvb2UvRGVsdGEvbG96ZW5nZS9ZZGllcmVzaXMKLSAgLy5ub3RkZWYvZXhjbGFtZG93bi9jZW50L3N0ZXJsaW5nL2N1cnJlbmN5L3llbi9icm9rZW5iYXIvc2VjdGlvbgotICAvZGllcmVzaXMvY29weXJpZ2h0L29yZGZlbWluaW5lL2d1aWxsZW1vdGxlZnQvbG9naWNhbG5vdC9oeXBoZW4vcmVnaXN0ZXJlZC9tYWNyb24KLSAgL2RlZ3JlZS9wbHVzbWludXMvdHdvc3VwZXJpb3IvdGhyZWVzdXBlcmlvci9hY3V0ZS9tdS9wYXJhZ3JhcGgvcGVyaW9kY2VudGVyZWQKLSAgL2NlZGlsbGEvb25lc3VwZXJpb3Ivb3JkbWFzY3VsaW5lL2d1aWxsZW1vdHJpZ2h0L29uZXF1YXJ0ZXIvb25laGFsZi90aHJlZXF1YXJ0ZXJzL3F1ZXN0aW9uZG93bgotICAvQWdyYXZlL0FhY3V0ZS9BY2lyY3VtZmxleC9BdGlsZGUvQWRpZXJlc2lzL0FyaW5nL0FFL0NjZWRpbGxhCi0gIC9FZ3JhdmUvRWFjdXRlL0VjaXJjdW1mbGV4L0VkaWVyZXNpcy9JZ3JhdmUvSWFjdXRlL0ljaXJjdW1mbGV4L0lkaWVyZXNpcwotICAvRXRoL050aWxkZS9PZ3JhdmUvT2FjdXRlL09jaXJjdW1mbGV4L090aWxkZS9PZGllcmVzaXMvbXVsdGlwbHkKLSAgL09zbGFzaC9VZ3JhdmUvVWFjdXRlL1VjaXJjdW1mbGV4L1VkaWVyZXNpcy9ZYWN1dGUvVGhvcm4vZ2VybWFuZGJscwotICAvYWdyYXZlL2FhY3V0ZS9hY2lyY3VtZmxleC9hdGlsZGUvYWRpZXJlc2lzL2FyaW5nL2FlL2NjZWRpbGxhCi0gIC9lZ3JhdmUvZWFjdXRlL2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9pZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNpcwotICAvZXRoL250aWxkZS9vZ3JhdmUvb2FjdXRlL29jaXJjdW1mbGV4L290aWxkZS9vZGllcmVzaXMvZGl2aWRlCi0gIC9vc2xhc2gvdWdyYXZlL3VhY3V0ZS91Y2lyY3VtZmxleC91ZGllcmVzaXMveWFjdXRlL3Rob3JuL3lkaWVyZXNpc10KLXBkZk1ha2VGb250Ci0lJUJlZ2luUmVzb3VyY2U6IGZvbnQgWk9WTVJEK0NNTUkxMAotJSFQUy1BZG9iZUZvbnQtMS4xOiBDTU1JMTAgMS4xMDAKLSUlQ3JlYXRpb25EYXRlOiAxOTk2IEp1bCAyMyAwNzo1Mzo1NwotJSBDb3B5cmlnaHQgKEMpIDE5OTcgQW1lcmljYW4gTWF0aGVtYXRpY2FsIFNvY2lldHkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0xMSBkaWN0IGJlZ2luCi0vRm9udEluZm8gNyBkaWN0IGR1cCBiZWdpbgotL3ZlcnNpb24gKDEuMTAwKSByZWFkb25seSBkZWYKLS9Ob3RpY2UgKENvcHlyaWdodCAoQykgMTk5NyBBbWVyaWNhbiBNYXRoZW1hdGljYWwgU29jaWV0eS4gQWxsIFJpZ2h0cyBSZXNlcnZlZCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKENNTUkxMCkgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoQ29tcHV0ZXIgTW9kZXJuKSByZWFkb25seSBkZWYKLS9XZWlnaHQgKE1lZGl1bSkgcmVhZG9ubHkgZGVmCi0vSXRhbGljQW5nbGUgLTE0LjA0IGRlZgotL2lzRml4ZWRQaXRjaCBmYWxzZSBkZWYKLWVuZCByZWFkb25seSBkZWYKLS9Gb250TmFtZSAvWk9WTVJEK0NNTUkxMCBkZWYKLS9QYWludFR5cGUgMCBkZWYKLS9Gb250VHlwZSAxIGRlZgotL0ZvbnRNYXRyaXggWzAuMDAxIDAgMCAwLjAwMSAwIDBdIHJlYWRvbmx5IGRlZgotL0VuY29kaW5nIDI1NiBhcnJheQotMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCi1kdXAgNDUgL2Fycm93aG9va3JpZ2h0IHB1dAotZHVwIDU4IC9wZXJpb2QgcHV0Ci1yZWFkb25seSBkZWYKLS9Gb250QkJveHstMzIgLTI1MCAxMDQ4IDc1MH1yZWFkb25seSBkZWYKLWN1cnJlbnRkaWN0IGVuZAotY3VycmVudGZpbGUgZWV4ZWMKLWQ5ZDY2ZjYzM2I4NDZhOTdiNjg2YTk3ZTQ1YTNkMGFhMDUyOTczMWM5OWE3ODRjY2JlODViNDk5M2IyZWViZGUKLTNiMTJkNDcyYjdjZjU0NjUxZWYyMTE4NTExNmE2OWFiMTA5NmVkNGJhZDJmNjQ2NjM1ZTAxOWI2NDE3Y2M3N2IKLTUzMmY4NWQ4MTFjNzBkMTQyOWExOWE1MzA3ZWY2M2ViNWM1ZTAyYzg5ZmM2YzIwZjZkOWQ4OWU3ZDkxZmU0NzAKLWI3MmJlZmRhMjNmNWRmNzZiZTA1YWY0Y2U5MzEzN2EyMTllZDhhMDRhOWQ3ZDZmZGYzN2U2YjdmY2RlMGQ5MGIKLTk4NjQyM2U1OTYwYTVkOWZiYjRjOTU2NTU2ZThkZjkwY2JmYWVjNDc2ZmEzNmZkOWE1YzgxNzVjOWFmNTEzZmUKLWQ5MTljMmRkZDI2YmRjMGQ5OTM5OGI5ZjRkMDNkNTk5M2RmYzA5MzAyOTc4NjZlMWNkMGEzMTliNmIxZmQ5NTgKLTllMzk0YTUzM2EwODFjMzZkNDU2YTA5OTIwMDAxYTNkMjE5OTU4M2ViOWI4NGI0ZGVlMDhlM2QxMjkzOWUzMjEKLTk5MGNkMjQ5ODI3ZDk2NDg1NzQ5NTVmNjFiYWFhMTEyNjNhOTFiNmMzZDQ3YTUxOTAxNjViMGMyNWFiZjZkM2UKLTZlYzE4N2U0YjA1MTgyMTI2YmIwZDAzMjNkOTQzMTcwYjc5NTI1NTI2MGY5ZmQyNWYyMjQ4ZDA0ZjQ1ZGZiZmIKLWRlZjdmZjhiMTliZmVmNjM3YjIxMDAxOGFlMDI1NzJiMzg5YjNmNzYyODJiZWIyOWNjMzAxOTA1ZDM4OGM3MjEKLTU5NjE2ODkzZTc3NDQxM2Y0OGRlMGI0MDhiYzY2ZGNlM2ZlMTdjYjlmODRkMjA1ODM5ZDU4MDE0ZDZhODg4MjMKLWQ5MzIwYWU5M2FmOTZkOTdhMDJjNGQ1YTJiYjJiOGM3OTI1YzQ1NzgwMDM5NTljNDZlM2NlMWEyZjBlYWM0YmYKLThiOWIzMjVlNDY0MzViZGU2MGJjNTRkNzJiYzhhY2I1YzBhMzQ0MTNhYzg3MDQ1ZGM3Yjg0NjQ2YTMyNGI4MDgKLTZmZDhlMzQyMTcyMTNlMTMxYzNiMTUxMDQxNWNlNDU0MjA2ODhlZDljMWQyNzg5MGVjNjhiZDdjMTIzNWZhZjkKLTFkYWIzYTM2OWRkMmZjM2JlNWNmOTY1NWM3YjdlZGE3MzYxZDdlMDVlNTgzMWI2YjhlMmVlYzU0MmE3YjM4ZWUKLTAzYmU0YmFjNjA3OWQwMzhhY2IzYzdjOTE2Mjc5NzY0NTQ3YzJkNTE5NzZiYWJhOTRiYTk4NjZkNzlmMTM5MDkKLTk1YWEzOWIwZjAzMTAzYTA3Y2JkZjQ0MWI4YzU2NjlmNzI5MDIwYWYyODRiN2ZmNTJhMjljNjI1NWZjYWFjZjEKLTc0MTA5MDUwZmJhMjYwMmU3MjU5M2ZiY2JmYzI2ZTcyNmVlNGFlZjk3Yjc2MzJiYzRmNWYzNTNiNWM2N2ZlZDIKLTNlYTc1MmE0YTU3YjhmN2ZlZmYxZDczNDFkODk1ZjBhM2EwYmUxZDhlMzM5MTk3MDQ1N2E5NjdlZmY4NGY2ZDgKLTQ3NzUwYjExNDViOGNjNWJkOTZlZTdhYTk5ZGRjOWUwNjkzOWUzODNiZGE0MTE3NTIzM2Q1OGFkMjYzZWJmMTkKLWFmYzBlMmY4NDA1MTJkMzIxMTY2NTQ3YjMwNmM1OTJiOGEwMWUxZmEyNTY0YjlhMjZkYWMxNDI1NjQxNGU0YzgKLTQyNjE2NzI4ZDkxOGM3NGQxM2MzNDlmNDE4NmVjN2I5NzA4Yjg2NDY3NDI1YTZmZGIzYTM5NjU2MmY3ZWU0ZDgKLTQwYjQzNjIxNzQ0Y2Y4YTIzYTZlNTMyNjQ5YjY2YzJhMDAwMmRkMDRmOGYzOTYxOGU0ZjU3MjgxOWRkMzQ4MzcKLWI1YTA4ZTY0M2ZkY2ExNTA1YWY2YTFmYTNkZGZkMWZhNzU4MDEzY2FlZDhhY2RkYmJiMzM0ZDY2NGRmZjViNTMKLTk1NjAxNzY2Nzc3OTc4ZDAxNjc3YjhkMTllMWIxMGEwNzg0MzJkMjg4NGJiNDJkMWYyMjQ5NzYzMjU4ODM2NTcKLTA1YWNiMDIyZDFlOWNiNTU2ZTM3YWY5MTkxN2M3OGU5ODIyOWUzYTRkYmYwM2FlNzQxOTk4NTQyOTc3YWQ2ZGYKLTE3NjBmYzFmMWE0Nzk0NjQ5MjJhZmRhMmNiYTc5NjFlOWRhNjk2YjcxMjA1ZTE5YzU0MmM5N2YyNTQxOWM0M2MKLWZhMWEwNDJiYTBjZjU2MjJmZmJkM2U3NzVkMGQ1NjQxMzVkOTliOWZmYmEwMTFlZWJjNDA2NmIwMDNjZTJmODgKLTgyNTkzNmQ3MzkzZDA1ZDM4MDQ2MDFjZWU5ZDEyMzEyMGZkZjczNjI0YTlkNGUzNjFhMjhlOTk4YWNlYzUzZjgKLTdhNjJhMGFlZTMzYmUyZTk2NTQyNTM0YThhZjI0NDk3ZDFjMzc3Y2Q3ZjcyMzc2N2I0NDg1N2Q5NGM2Y2RhN2EKLWMzZDZmMDA4N2ZhMzY2NTVkZDJiODFlYWVjYjMxZmU0ZjRhMmZiMWVhOWZiZThiODNkMzU4MjZhYzkzZmJiNGYKLTJiZWUwMTRmNDFmOGYyNzY1MTBjZjVjZTM1YzM5NTRlOGNhZmM1MjFkMGMzYWI4MGVhOGM3ZmMyOTQyN2ExZDQKLTQyZDZmNmMxODAwOTE5ZTU4ZGU5YWUxMjMwNGQ3MThhZDgwZmViYmI0MTJkYTU0MTUzNDY5Y2Q1MWEyODg2MjgKLWFkMTA5YmFhNzc5ODE1MjViM2Q5YjBlZmU1OTM1MzdmY2JiODUyMGQzOGNjY2JkNWRiMTcxYTAzODVhNDMyYzEKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjE0N18wIC9aT1ZNUkQrQ01NSTEwIDEgMQotWyAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi9hcnJvd2hvb2tyaWdodC8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmL3BlcmlvZC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWZdCi1wZGZNYWtlRm9udAotJSVCZWdpblJlc291cmNlOiBmb250IEVSVkJGVCtOaW1idXNNb25MLUJvbGQKLSUhUFMtQWRvYmVGb250LTEuMDogTmltYnVzTW9uTC1Cb2xkIDEuMDUKLSUlQ3JlYXRpb25EYXRlOiBXZWQgRGVjIDIyIDE5OTkKLSUgQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudAotJSAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgU2VlIHRoZSBmaWxlIENPUFlJTkcgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSBmb3IgbGljZW5zZSBjb25kaXRpb25zLgotJSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gaW5jbHVkZSB0aGlzIGZvbnQKLSUgcHJvZ3JhbSBpbiBhIFBvc3RzY3JpcHQgb3IgUERGIGZpbGUgdGhhdCBjb25zaXN0cyBvZiBhIGRvY3VtZW50IHRoYXQKLSUgY29udGFpbnMgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZCB1c2luZyB0aGlzIGZvbnQsIHJlZ2FyZGxlc3MKLSUgb2YgdGhlIGNvbmRpdGlvbnMgb3IgbGljZW5zZSBhcHBseWluZyB0byB0aGUgZG9jdW1lbnQgaXRzZWxmLgotMTIgZGljdCBiZWdpbgotL0ZvbnRJbmZvIDEwIGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wNSkgcmVhZG9ubHkgZGVmCi0vTm90aWNlICgoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250IHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0IGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4pIHJlYWRvbmx5IGRlZgotL0NvcHlyaWdodCAoQ29weXJpZ2h0IChVUlcpKyssQ29weXJpZ2h0IDE5OTkgYnkgKFVSVykrKyBEZXNpZ24gJiBEZXZlbG9wbWVudCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKE5pbWJ1cyBNb25vIEwgQm9sZCkgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoTmltYnVzIE1vbm8gTCkgcmVhZG9ubHkgZGVmCi0vV2VpZ2h0IChCb2xkKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAwLjAgZGVmCi0vaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgotL1VuZGVybGluZVBvc2l0aW9uIC0xMDAgZGVmCi0vVW5kZXJsaW5lVGhpY2tuZXNzIDUwIGRlZgotZW5kIHJlYWRvbmx5IGRlZgotL0ZvbnROYW1lIC9FUlZCRlQrTmltYnVzTW9uTC1Cb2xkIGRlZgotL1BhaW50VHlwZSAwIGRlZgotL1dNb2RlIDAgZGVmCi0vRm9udEJCb3ggey00MyAtMjc4IDY4MSA4NzF9IHJlYWRvbmx5IGRlZgotL0ZvbnRUeXBlIDEgZGVmCi0vRm9udE1hdHJpeCBbMC4wMDEgMC4wIDAuMCAwLjAwMSAwLjAgMC4wXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgotY3VycmVudGRpY3QgZW5kCi1jdXJyZW50ZmlsZSBlZXhlYwotZDlkNjZmNjMzYjg0NmE5ODliOTk3NGIwMTc5ZmM2Y2M0NDViYzJjMDMxMDNjNjg1NzBhN2IzNTRhNGEyODBhZQotNmZiZjdmOTg4OGUwMzlhYjYwZmNhZjg1MmViNGNlM2FmZWI5NzlkNWVhNzBmZGU0NGEyYWU1YzhjMDE2NmMyNwotYmY5NjY1ZWVhMTFjN2QyMzI5YzFhMjExZGQyNmJiMzcyYmU1ODIyZjVlYTcwZDk5ZWI1NzhjN2JlZmQ0NGNkZgotMDQ1YTM2MzA1NmU1ZTFjYzUxNTI1ZWE2ZmMwNjFkY2ViYjMzNzIwOGVmZjcyOTgwMjM3NmEyODAxNDI0ZjY3MAotMGU3ZTYzOTdiMjhmMTViYzEwYjQwMDEyYjBhM2VhZWIyNjkzZThmN2Y2MjdjNGM5YzdjNmM1YmZmMTA1YzFlNAotMWIyYjllOGYwOTI1M2I3NjA0MGQyNjhiODA3MTllMWIzZjVhNTVhYjdiODkyYWQ1ZTY5YWNhY2M2YzE2NDBlYgotMzA2N2JmYzY0OTM4ZjQxNjM2ZGI4ODMxODgzYmRkYWJjNjc3N2RlZTE3ZjJlODRmMWQ1MzBiYzc2ZjUxYzYyMQotNzVlYzZiNzI3YTgyYzE5M2QxYzA4MDFhYzQ5MmJiZTI4MWI0NjYyNmJkMjFmMmFkYmJmZDE0NDc5M2VmNzU0YQotZWE1ZjFjZGEzMzEwZTgzZDc4YTA5ODE2MGM2NmQ2YjBjNjhkNDk3Njg5OGQ5ZGMxYTA4ZDAxNzQwYWMzZTdmNgotOGQzY2UwYTdlMTA5MTA0MjQ4Y2I4NjMxODQwMGJkODJlZjg5NGVmZDljOTQ1NmU5NzA1NTI4NmMxNDRkM2VmYwotZDI2MjUxMTBmMWFlNzYyNDEwNzliZWMxOTkzOWFjOTYyZTBiYTgxMzM1OWMxNWIwN2M3NGQ1ZTk4NjhlMjE2NwotZWExMTk5ZDIxY2E4ODI3Y2RkZjFiZTgzNTcyNjFiZDMyZTc5ZmVhNmJjNDc1NTc3YzVmNjg0ODM0NWJjZTU4ZAotZjU0MzUyODE1NzJhZTZiMzNiNTM2MDdlYmVlNmY4NjJkNGM3NTJhZWU0M2MwMGNkYmZkMjU4Yzc3NjViMTM1OAotNWQ2MTY1ZWUwMzRlNTgxNWRlNzljYzI2YzRhNzIwNjA3YmFmYTYwNDk3MTBlZTM3ODJiYzJjZDg0ZmUyNDczZgotMTMzNWQyMGEzYjZlOWU4MzU1YWYzNjY3M2NkYmU2M2MyN2Q0ZjBlMTgzZmVkYWIxMDAzMWIxZWUzM2I5NTczYQotMmUxOTYxYjdjNmJhYTQxZjdjM2VlNzA3ZmU4NjA3MWVkZTU3NTZhMDBkN2IzYmYwYTIxYjdjM2NmNDEwOTNjZAotNjZlY2NjY2MyMmY0NTM0OTEyY2I5MDBiMDhlNjk1NzRiMDdmMjQ2MzA1ZGNiYzIzODc4MDI3OGFlYjhjOWU1NQotM2QwOTZhOTQ0ZWM3YWE5ZjY5N2YzNTRhYTEzN2RmOTBhOTU0N2VmZWMxY2JkNTY4Y2I5OTk5NzlmNWFlYzZhZgotYTg0ZWRhZWUxNTY0ZDE3ODU0MWNmNDYzMTA4MTc4MTYwOGZkMzg5NjQyNTdjZjg5YjFjOGUwMTIwYjNmNmFmMAotNzkzNTk3YWQ1NTNjZWU1Y2NjZDVjNGYwOWNiMGI0ZTk5OGU2ZTc2MjQzMTkxYWY3ZTkzODMzZDA2NzgzM2YwZQotNTM2NzBkN2U5OTZlZDY3Y2ZlNjY5OWE2ZTM4MTU5MzJhZDI3MmFmNDgyOWMyZWUwOGEzMGQzOTM4YzkyOGQxYwotZTg5YWY3MTE5MmVjMTI0N2NhMjMzMDkzYWFmYTU0ZmZhNThmNGFhZjNmZTljNjIzMDJlNTk4ZjRmZjhjYzMyYwotNGQzMTgzOTFmN2EzNmQwZDhiNDE2ZGQzNmQ3NzZiMzAxNDI1Y2JhZjgyZDUyMDE0MTIzODc4MTExMWExNGNjZQotNzkyN2UyYWYyMWVmODM3NTU4MDAyNTM5YWFlYjE3MGZhN2U3ZTM3ZWZkNDQ3YzM3ZGI0NTVkMmYwODUzMzE1NQotNTNmM2M1YzNiZTQ4MTc2ODBlZmQwYmEzYTExNGRiNmFhYmE2YzRkMGQ1N2IwOWVmOGJhYWQ0NjM5OTY3MThjMQotOWQxNTVhNjJkN2FlODJlYWU0YzgyNzYwYzU5NGE2YmEzYzdlZTQyOTBmMGQ4OThiYjNlNDA0Y2NhYTkxZmVhNAotZWFhMjE0NmFjNmEyM2Y2YzVhOGFhZTgzNGEwNTg3ZDk5MDAyNGJiZThkZTQ4NWM3MWI5MTZhZDk2ZGQ2Njc5MgotYTczMmExODhlNmE1N2M0NTllYmJkNzc1NmNmZDU0NzcwZTJhOGQ4MWJkNDYxOGQ5MTZhMzBlYzcwODRiMjQ5MgotNWY3N2FiMTQxNjk1NDdlZWRmZWZiNmYwM2M3ZDUzNjVjZWY1MTJkZjE5NDYyOGQ1ZmJlYTZjZjU2ZDBmNTM0NgotYjZiNmMxZGExZGQ4ZDgzMjFiODg4MDdiNTc5YmI2YTBjOGY2OWNkOTE5ZTMxMWI2YWRlOTAzYjQ3MGY0ZTBhMwotZGQ1MDE1YzY0MzI0NTJlY2VjMDQ4ZGNkMTQ4MTRlNDdkZWY0YTUzYzVjYTZmYTllOTFkOGEyOGM3MTlmOTM0OAotNTA5YzBlMTdkNjMyZjhjYjNmNzQ2OGJiMGU3ZjdmNjUyNWMwODZkYzdlZmI5OTdhNjBlMDU5ZDNkNDkzODQ4OQotMjNlNjBmN2M2N2ZhNmFhODA2MjU5NGYxMjJhNDhjNTRhYTdjMDQ5ODU5OTI4YTNkZmM3Mjc1MmFjYWQwNzRhYQotNDE2YzY2N2ZjZDE3NmRhNGQ3ZDMxYTlmNmJlNmYxNDZkNGE5ZGM3OGY0MTlmYWI3YzllNmM3NGQ0MGVhNjU5YwotMjQwOTgwODhiZWEyNmJmNWE3MjVmZTU2MDI1ZDFmY2Y4NDY1ZWQ3MTAzNzAyYWVmNzQ5NzNmNmZiNjk3ZTY0NQotZTkwMmQ2NTM1NGE0NGJiMzQ4OTAwN2M1NTVhNmEwOGJiMDU3ZWNhMjdjOTNiZmNlZTlkZTQyZTI3ODJmZWQ0ZAotNjY0YWQ3ZjJkMjM4YjdlZGExY2E0YWQ0NzNiYjk1NTllMTFhOWYyMTRlMjU4Y2UxYTJhNjA1MTI5NzViMTEyYgotMzM2ODY0MjM4YTM2NzMyYzNhZGFjYmZkNTJjODVhMGRjODA5ZmY5NTVmOWM4MTQwMWY3MjEwN2YzZDI2Mzk5OQotYTY5ODM2ZDc2ZDIyOGFiNGY5NTRiMDBkYTA3YmM0YTRlMTY1ZjJkYzVlY2Q4MTM4Y2M0MDhhYzIyMjE3YjE1ZAotOGJhZjA0NDA4ZDRiNDdlNTUxMjliMGU1OTZjOTNkMTBjZDQyMzcyMjkyZTFmZjQ4Mzg2OGU4NTEwMDc2ZjdmMQotZWQ4ZWFkMWJkZWUyYjQ5NTMzZjg3ZGRiZWYyYWJkY2JjYTQzMjMwN2Y3YWQwYjNjM2Q0NzIxZjNlNjdlNjA5YgotYjA2ZjhiN2U2NmFmN2M4NDNhYTFmNzFiZGFkZjBmNGZiNmJhYWM4NDgxNWM4MTU0YTAwMjNjZmI2ODI4MmI0YwotOGUyNGU0NzhmODFmOGQyNmVmODJkNmQwZTFkYTRhNjU0NzhmNGExZjY1YTdkZmI0ZDE3MDAyMDc4NTBjMzNmOAotMTQ4MTU4YTc4NGI0NTJhYzY4NzQwODAwMzllMjI1OTQzMWMwNWM0NTIyZjFkNjc1MjJlMjczYjQ0M2FlOTgyMAotYWRiNTMwM2NkMGQ4MzlmZmQxN2ViMWZjNjk1NzE1OWE1NjlmNjQ4NzNiNGIzYmY5OTM0OWM0ODZhM2FmMmIyMAotYjZiOWM0MTI2MzMwMGFiMDg0NGQyNGRhZjc4MGI0ZjMyNGVkYTg1NGQ0ZTIxMGRhZWRjMGUzNGY0YjY3ZmNhMgotMTI2NWVhMzc2NGY4Zjc1NTAwN2I2MmU5ZTE4ZTgwYmQzMGYzYjk2MTI0MDY1MTk4YzBhNTk4NWJhMjE3MjU1MAotOGM4ZWFiZTc3YjI2ZGY0NDUxZjUwNjg5NTZmY2UxMTEwNDFhN2QyM2Y2ODFmZjJjMWI5MzM0NGZlNjg4NzA4YgotNjFhNDc2NzRjMzE4ZDA3OGZjNGJmNzkyMTc2NTk5ODdkY2QxYmRhMWUxYjc0MDY4OTYwMDM2YzQ3MjkwNjE1MgotY2FmZTRhOGE3MDJkMjcxYTAyYzc5MGVhM2U0NDBlNGY0MTU1NTZlYzcwM2EyM2I3YWFmN2JjNTBjNWEzMmY3ZgotZmVlNjQyNjQzM2U5NDVjMjhiZTAzOGNiZTVlZTBlNzkzMzk0NWYwNTI3NTdkNDgwYzU4ZDRkN2RjNGFiOTI0ZgotOTg1ZTA1NGZkNTUzZDFjMDM3YmVhYmEyOWIxNGU4MjNhNDA5MWIwOGVkNjAyYTY5ZDFjM2ViMGZkNjNmYWE5MwotMzZkYjIyZTY1ODhkM2QyZmE3Mjc5MTYxNjMwMzA5NThjYzg5YjNjZTk5ZGRlZGE2MTkwZjk3ZTAzOWY5ODIxZAotYWI0ZTRkOWExNWNiNTA5NDA0MTc5MGI5OTVkODk1MDQxMmJiZjA0OWJkMWQ4YWZlYjhiZGRhZmM2YWVmNzQ4YQotZjI1MjNiODMxM2UxM2Y5MGY5NjZjMTM0ZTM5ZDUyZTEwYjYzZTMwYWFkY2E0MmJiYWM1OTYyZTRlM2Y3MTMzNwotYmMyZmQ0MDY3OWJlYjQ0ZTExMTI1MDM1MmYwNGNiMDQwNDE1OGJhZDlmNzQ0MTZjOTQwMDNiZDEyYzg4ZDllOQotNWNhYzNhM2ViNTc1NzMzZWI0NGEzYzMyOTQ2ZGFjZGIzNDA1ZjViNGEyNTEzZmRmOWU2YmIyZTZlMjFjNTM4NQotNmM1MjdjY2MxMjBlYWY5NWQ0MDA4NDdkZmM5ZTZhNDA4MDYzMzA0NDJlMTg5NWI1M2E2MTg4ZTU3YzY1YjQ2NgotZGEyMDM3ODVmYzMyMmVmZDY0ZjJlNmY2NmY5OTZiZjdjYTAzNWJiMjExNzY0OGE4ODU3ZjFiMTA0NjlhZWUxMAotZGQyMmQ3ODVkZTI3ZjAxZjFkNzI1YjU2YjM4MDkxNzAwNGEwNmFmYzAwNDYzMzVmOTdhMmZmMjBlYTQ0Zjc5NAotYzFkZmQ2YjEwNzU0OWUzOTI0N2E1Y2IzZjljMzdhZjg0OWU5YzVmMDYyMTRhNTcwMTEzZDkxYWQ0ZTE0ZDljYgotYWFkZjhlZjkzYTkzMzc5NWMwY2JmYjcyMDRkYzYwNWI0YjNiOTViOWZlZDAzNzJkOGRmNjM0ZjcyOTMyOThhMwotNmFhNGFiZDFmMjEyZWNkNWQ0YWM0OWQ0Njc1NjczODVmODBlMTYzYjk0NjRmNjU1NGU0OGZmNzhkNDVhYTQwMgotYjVlZTA5M2E4Zjk2ZGE0NTUwNGU0MWJmYjFhNzJmNTc5MDMxZWZhODAxNjkwYTMyZjRlMjQ4YTVmNzczMDI3ZAotZGEzZjM3MjFkNGZiNDgxZmQxYjhlODEwNTRhYTRhNzAwZTk5NjRhODc4NzFlMDFmMDNmZTgwYWM0MjE1Y2RmMgotN2E0OTQ0Y2Y4OWE4OTM2Mzg3MzA2MzEyNjExMTRmOGFhYjk2N2ZlMjllMjgwMTI0ZmE4ZDUxZmM5NGIxYzU1MgotZGI1OGUwMzgwOTcxNzJkNWY2MzRjZWFmYjg3N2Q3Y2FjYTAzNDM2Y2Y2YmY0MGFmZTRkYzk5Y2UwOGQzNjA1YQotNzhlMmM5MGZmZTc2NmZkM2FjMGU4YjJhYjI0N2MzZjY4OWE1NWUzNTBjYmU4MGE5YTQ1MmJmODY2NmQ1NzEwYQotNmZiYmM0NWU0NjkwYWZjNjI1YmI3YThhMjliYzE3YWE1ODJiNmUyMDBiZDUxMjNlMjZiMmQ0NDU5OTJhM2E1ZgotN2FhMTI4YzNmNjIzMDU4OGM0MWM2YzQ1NjY1NTk2MWI4MjNlNjVkNzQ3MWFkMTZmOWFlYTA3YzJiM2QzOWM0NQotNzI2ZjAyM2VhNDc4MDcxOWEzNjU2YWUxODY3MGRhYTNiYzA4NGU2MGZkZjJiYTFmZjAyMDRmMjg1ZDcyZDlhOAotMjY5NDMwZTQwNmNkMzY3NDFiYjIyN2ExYWEyOGNlZGY5NDg0Njg5YTc4ZGQ1NDk1MzM3YmRlNjZiNWE3OTBmZQotNGFmNzYxYzBiNTA1ZmY5NzRlNGM3ZjY3MzQ4ZWIxODg3YjViOTMxNWE3YjM0NTVkMzY3N2JjNzdiNjFkNDhlYwotZjVlYmRjNzNiMjVlZWFmMTJhNmM4OTZhNTRiNDk5YmE1ZjI4OTdiN2RhOTQ2NWMzNDU2MWIyM2UwZTc0MGVlYwotZmM3YWRmOTQ0MzI5ZTAwM2Y1MjY2Yjk0YTQyNWYzODY0YjE2N2EzNGQwYjlkMjU5ZmNkOGQ3NDFjOWRjMGZiNQotYmZmYjhjOGNlZjQ3MGY5MjNkNzk2MmNiNTgwNmM2Nzc2MzM1OGE5ZjZjY2Y3ODIyMGYyOGU0NWE4NGIwZmYzNQotYzU4NWMxOGIxOWM2MWI1MWNiZTU4MDA3ZmI4NTJlMGE5MmVkNmQ3MDRmMTVmZjBmODYzNTI4ZGI3MmVhM2RkNAotM2VhMGFmNDY2ZmE1YjYwYWM0NDkwYWE1ZGIxOGE2NDljNDQyYTYwYjRmODI0ZTkxNDkxNTM3NmExMjdkYmUzMAotODVhM2M1NmVmNDIzMzU3OWI3NTZlYjYyZTA0ZmVhMGE1NTUwM2Y4OGJmZGYwMTE0MzZkOWQ1MDg4ZTAyN2MyNgotZGFhODE2NTg0MmE0ZGRkNDNmYzNhYjhkYWRiYjRkNTNjNWJhOWE1YjUxZjMzZDUwNWZlM2VkMTY4MTA5ZjFmMwotOWFjNWMzMzU3ZTQ4Y2Q5ZTNhZGNjZjJkYWFhZDgzMTAwMGUyNzMwN2Q2Y2IyYWE2ZWNmNWY5MmNmZjM5YjI2NgotNzNiMWQzNTg3ZTAyOTMxMzEwMWE5MDc1YWIzNWRlMjYwZjIzZjNkM2JhYjVmN2E2MTM0ZmQwN2MwNzZkY2Q5OQotN2JmMmU3YzQwZmYwYzBmYTEwOTYzMTJiNzkxZDYzOGIwMDM4MTM4ZWQ1YzU3OGU1MTMwOTQ0NDY5MWMxYjE4MgotOGIzNDZmZTAyODZlMTNlMzkwN2JlZGExMzA0NDE3N2M3ODhiNDk0OGE0ZGQzOThhYTlmYzMxNzY2NWIyNTBhMQotMzU3MGE3ODM4MjFkYjU4MTU5YjgyNWIxNGMyYTYzOWY2Mjk5NWEwNDllZWViODkwNDIyNmE4ZjhlMTRhNzk1OQotNzMxYTc0ZGM0YjIxNWQ3ZWMwOTVlYmU4NmEzYmYwNzA4MGNkYjBkY2U2ZDA2ZmNjMmUzYTU3YmIwNDk0NGY5MAotOGYzOTViZDY1MTE3OTg0YzE1OTYzMDNjMjc4MWUzOTk3YmJmYjZhYjlmMzU0ZWJjZWE3NDA0Nzg1ZDhkZmIwNAotYjE5YTNhNjc5MjgwN2ZlNWRlYmQ2ZWVlYzFiYTliYTlhMzc0NzNkNmM0MzViZGVmZDViMmVhOWMyMWQ5ZWM3OQotMDA0M2I1YWQxYjBhNTBmOWEyNDU5NGQwMGY4ZmQxNTU2ODFjMzNkZjhmMGMwYjNjZDVhNGZjMjc1ZGE2NWRmYwotNmM2NWVkODcxMzk1NmJiOTRiNjI4MWE0ZjM5YzhlZjcyYjkzMmFkZjNmNmVjZmE2OTdmZjdkODRmOTNlN2EyOQotOGZhYjdiNDgxNzJlMzJiYTdiMzEzNWY0YTI1MDE5NjFmNGExYzUwNDAzZmMzOGM3MTU3NDNiNTUwOTVlY2MxYQotMzhmMTFmMTQ3NTUyMWZhMDBmOTUwNzc2Mjc5ZThhMzc3ZmI0Y2E0ODcwYzhkYWE0ZmM2N2VmZTRkYjhlMzdjMAotZDU2YWQ5M2NkMzM0ZWJlMThkZDZkOTJhM2VhNDhiMjllN2U3NmVlYzVlOGFhMGRiMjBhZDY5MDg2OTA1MzQyMgotODU2N2M0YjcyYmUyMDkzNDI2Njc3OTg4ZjhhYzlmN2ZjZGUwZGFjOGJhZTE3NTA2NmE0ODVmM2IxZDBjMjEyOQotOWUzOGE5Mzk5NmEwZWI3YTMzNTdlZTQzYmNkZjg3NDliY2ZkN2U3ZTBhMjNjN2Q5ZTExOGM0ZGE3ZmZmNTY2MQotMDc0NTRmYzFhYjI4YTg3NWFmN2U1MTJiMjQzMjI1NmM0MDFlYTQ2MmQ5YWViMGEyZjk3MjcwY2YyYWE4ZWM1MwotMWU1MjQ4YWQ1MmIxYjc0YTM3NmZhYWY3NzcyZTk0OGY0MzNjZWEyZjBlZDRkYWJlYzAwODU1YTM5NGZlZGI4MwotMWRhZmYxZDk3N2U5YjgxNmViZDI3ODAxNTA1ZGNhYTUxZjlhYjUzMWU2YzEzNThiMjc1ZDNhNmJhMzhmNGY0YwotNTI4ZjJkY2VlYTNhNDA0YTYzNjJlM2NmZWY5ZDkwNGI1NzM1NzFhNGU2MzRkNDg1MmYzYjkyMjQ5NWFmMTljMwotYzYzYzczNmQxZThhNWIxNWNmYzRkYTU4ZjI2ZjIyYmUyMzNiNDU3OTM3NzIyNzExMGY4ZmU1YjBkZjU3YjQ5NQotMmMxNGQyMDExYjYyMTViODU1YzM2ZDkwMWYwMDFlMjQyNjEwODlmNWVkZDM5ZjdlNWJiYjJiZjkwYzZmNWM1ZQotN2JhODkyODQzNGY1MjY4OTM2NWVkNDgxMjM0MTRlYWQyZTAwZjg4NjBlNjBhZmI1ZjU5ZDI3MTVjNGVlMmIzYgotMmIxMDM5OWNhMWMzZjcwMjU5YzYzNzYyZjY0YTVhMWNiNmIxOTk1MDMwYTdkNzc1YTA0Y2Q3N2E5NTQzNmU0YgotYzNiMWYzZDE5NTlkZWQ5ZjM1ZmRkN2ZjZGU5YjA1MTI0NTQ0NmRjYWMxMWZiM2QwMjI4Y2U0YzAxMmEyZjIwMQotODFlYzNkZDJhYTFiZDY2ZWMwMmM5M2U0Nzg0MjY4Zjc1NGM5ZjBlYmE0MmQyN2I3NTViYzU4YWQwMGUwOWUwNAotZTA1ZmQyMWVkMGMxNjAzNTNkMmY1NDY3YjU5MDNiNGUxZDFiODY2NmFjY2UwNmFkYTk5YzA2M2M2ODRkODczOAotM2QzMzhjNTc5NTk1ZDFlMmFiMzAxYzQyMzYxODNjZjJjM2JlMDMyMGVlODNjZGU0ZWEwNTAxNjBiNTg3ODdmMgotYmFkODE1NDgyNWM5YjI5Y2MxNDY4MmUxNWRiNWY1M2FiYTEwOTc5OWMxMGYyNWZhMmU1NDU2MGZkYWZlNmM5MQotYzI0NmFlNTZlZGViZTBhYTMwZTE1MmI2MWZhNjRlNTE3ZjZjYzQxYWM3YjNjMjVlY2FkYTMzZTNmNmQ2ZWU1ZgotNTYyNTQyZTBlNjZkOWMwN2FhOTg4OTUwNWQ1MTQ1MmNjMmVlNzNlMzY4M2UzZmFiZTI2ZjAwM2I4N2Q5ZmJkYwotYTM3NmU4NWFkOTU0N2MyM2U0NjNmYTA3MzQyOWQzMmNhMGU1ODMyNjM4NWE4OTEwNmQ1YjcyY2RlM2MwMGMxMQotYzVmNDBkMWU4YjYxZTZjYjFjYzY0MTZlMjhhZmE2Y2FhNDY5NjgyZWM4MzY1MDgxYTIxZDc3YThiMWRmNzE2NwotNjM0NDIyNmJiOWE3NTMzYzBmZGZlMTUzODc4YTNhZjMwODhlNTIwYjk0OTMzZDAwOTljMmZmODk5NzRiZjc5NQotZDg3MWI5ZTVkNDBjZDdhYWM3MmE5OWYzNTFkODI0Zjg2ZDMzY2M4OWJkNzBkZDQxZjFhODY2NjU3YmFjM2E1OAotYTRlZWRmOTk3ZWI0OWY4ZDk2N2UxNDhmMzgxZTc1M2Q1ZTY3MDgwZDI4NDNkNDRhMzU4NWUwNzg2MTViZWE0NwotNmM4ODI3NzNkOTk1ZjQxNTRmZGI3NzNhN2Q5ZTI5ZmU0NmU0NjRlNjAyY2QyMDYwNjNjOTZmYzUxYzMwZmZlZAotY2VjZGZhMjhhOTUxZGQ1MjExYWNkNjg0ZWQzZWZkOWZlYWE1YWE5OGIwOTFhZWNlODY4MTk5OWQ3YzhjZTcwOAotMWM2NGYwOWUxOGU2NDE5OGI4NDFkNzgyNGUwM2RlMTExMDE0OTM5NzVlY2IxYjdkNTU2NzE0NzI1YTE0YmRiNAotNWQ5MjM3ZWNmNjkzMjAyMTk4OTY0YzE1NTRhMDRhYjM0ODViYmY5ZmY4NjM0NDFkYTM1MTFkOGZlNjM2M2UzMgotYTM4YTExZjRkYzZhMWVlMThiZmEzYTFjMmM5M2E5MDY3NWIwYzIxOTU5MDU0YjE3YjFhZjRkNTMzYzg3YWM2OQotMDhkMGMzNDRmZTgxN2Q2ODE3YTc0ZmRiNDZmMzVkM2I0OGI5MTI4Nzg0ZjQzYTY4ZDgwOTQyNWM2NTcwYzYwMAotOWE3NjE5OTExMWU4OGExYzk4MDJkZTU1ODMzMjAwMGRiYjlkMTIxMTkyOWQ1MDlhZjU5MTViN2FlOGVhMWMzZAotZDI1OThmNTAwN2RlOGU3MzgzZjc0NTNmYzZhOWMwYjkxYzgwZTliMTc0MmJmNjQxOGRjYTY5NDUwNzg1ZmI3MwotMTJkZDIyODg4OWNmYmMzZjY3MTFhMjYwMjJiMjlmOTI5NWVlMWNhODQ1OTMwNWZiZjJiOTNjYjNmZmY1YjZlNwotMmI1YzFkMmM0ZDQ1M2YwYjlhNTNiNmYzNjExMzZiMTA0OGIzMGU3YzkwZTBkZThlZGRhNDIzZTU1Y2NiMmUyZQotZWU3YjUwMmFmMmJhZjMwYTkyYWY1NDI4NjliOGYyNmVlMjg1MDlkYzAxNDkyMDk1ZTBjMjdjY2FhMzBlMGRiNgotM2YwMmYxMWRjMGNlOGE5NGI4YThhN2VmNzM1ZTRmYWIwNDgzMGVmMDc3YThkNzg4YjIyNGMxODQzMzkyNzRmZAotNWY3YjU0N2I3N2Y4MWJhZDk4NWM3M2IwNWE3OWQzYzg2NjFhOWMyYjcxYzczMTNkOGI5Y2I1MGFlMDNhZWU5NQotMmRiZjFhZmM5ZGRmYzAwZDU5ZTZmOTkwMjFkZmZiYjY2YWNkZGFlZGY0OGRmNTQ2MmZjNTI4ZGZkYWZhNWU1YgotYTAzOWQ2YmI5YmRkMWE3OGU0NzY4NGEzYzUzY2EzMDdhYmQ1NjYwOTNjMmE0ZjZiOWYwYmU1MmQ0ZjFmMjc1OAotZWM0ODM3MGVhYjRlMWU2YWIzOTNhMjMzNThiYWU1MmZlZDNiMjcwMTI0NjM5ZGQwYTU2Y2E2YWZjZTc3NDk0YgotMzRmNDY0MzNjYWM5MGViNjNlN2UwZDI1ZGU2YzhhMDY3MGIxNGU4M2QwOGE1MzFjZjIxNDgwMDJmOWE2ZGYxOQotN2Y4N2M5ODliODMxYzUwOWRmMjMwNTdiM2VjNTY5ZWI1ZjVmNTMwZWRkMDQ3YTUzYjViNTlmNDgzNzAzYmRjZgotYjU3OGZkYzQ0Y2E3NDg3ZTNkMzk0NzljYTQ3NjA0NTdlNzAxOGFmMDExMTZiMjliYmRmN2MzZTBmNWMwN2E4ZgotN2Y1MDJjMTUwNTlkOTYzNWI3Y2U2MzAxOTQ5NjJlNDE4M2MzODM4ZDk0MDEyNjBhNzQzZDhlYmFlMTY2NWNlOAotNzNiY2ZlNWQwOTBhODk4NGU5ODAzMGZlNmIyMWRiY2I0OTM5OGI2OTA1ZWMwNGVkMzEwZTM3Y2QwNjlhODVkMwotN2NkOWUzYTAyZGQ4ZTAzNmIyYTc5MTkyZWMwMzZjZjdlMTA2NTNlMDg5MjhjYjhiZjQ5MTExMjJkMjdlMTk1ZgotNDhkM2RmYWEzNDEyMmVmMmRmOGUwMjNjOWVhMWYyNDZhZjI4NzlmNWRmNjMyNzE5YmY3YTkxZjI2NmQ4MjNhYQotY2FlZmNlMDY3YmY3NGVlMGQ2MjVjZjEyOGMzOTMwYWI4MzUyMTM4MGUwY2ViNWRhYTIzODRkYTRhYjIzYzM0ZAotMGRiOGE0YWNjZTFhMzNiNmRlZWEzNTgxZWZlNTIxMjc5MTQ3YWMxYjM2ZTRmNmIyYzA4ZGYyYjJkYmFiMDUxZAotMjY0YTI1MGEwNmVkMDZhYTkwNmMyNjgyYWQyZWNkY2NiZmQ4ODA5NDFiZDgyNGQwMjFmMDg2NTYwYmZiYjM1OQotZTI1MTlhMjcwOGE0OTc2ZjQyOTEzNDY1ZTE4ODcyYTkzY2RhODA5YTg1NzMwYTQ5MzBlZjFlM2U3MzMyOTJjOAotMDZjODBjODg2NTY0NWM2YTY5YjEyOGIxMzMzYzNhYzhjNjE2ZDNlM2EwMTYzYWJhNTRjN2E1MWEwNjNmYmNlMQotNDAxOGNhYmUxYjFlYmRhZmFlZmMyN2QyYjIyYWZjOTY0NDljZDUxNWNjZWQ2NzFiYWE4OGQ1MWM1Yzc3OGJmZQotMDAyMDgxMjdmMWZjMzVkYjljNmFmZTRmYzkxZGQwYmIxMjc3MTgxNTA4ZDdiOTg2OGEwNTUwMjVjNjUzOTRlOQotYWI3YTk1NDk0MTE4ZDIwZmJkZDdjZTBiNWYxMTQ5MmRmNWU4YzU0YzFjZTFlY2QyZTcyNzllMDdmZTZhNjJkNQotNjNkN2ZmZDM4ZjA0YmE3NTA1N2NmMTkwMzE5NjM0ZjU3YWEyNDZmMDNmNWY5MDRmZjk1MmQ3YjEwMDZkNDNiYwotY2U4OGQ4OWFkZTUyZTg2MWFlZmFkNTM4YjY0NDk0MmI2Yjk3ZTc3ODAwMGRlMmYyYWMyYjIyODBkODVhODIzYQotMTc2ZDgzODdjYTQyMGE0NDE5ODBkM2U4NjY2MDQzMjU5MTdmNzg1NzJlYzliYTE0YTA5NDRlMzc0ODBhZDNmZgotOWMxMDU5MGMwNzA1ODQwZDA5YzhiYjA3NmE1YWFlODFiNWUzMTVjYTkwMWUyNjJiNzczMTQzYTU1NDM2MGZkYQotM2RjNzk5ZmQwNzQ4MjY2NmY0N2MxN2Q4YTViYWQ2ZWZhNTNmMjA3MDc4NjljNWZkNDBkOTQwYTg4NTMxMGNkNgotZDVjYTljMzUxNzMxZmE2OWZkZjBiZmIxNDhlMTdhYzI2ZmY0M2JmYmIzOGMxMDE4NjdlZDk1ZDc4OWVkMmIwZgotNjE4MjAyNDliMzk4ZmFjMGM1ZWVlMzIwMzI5ODQzMDJlYjE4MDRiODJiYWQ1MTVkNzIxMjEzNzMyYWQ0M2I5NQotZDRhMDJlMTdiMjIxNTljYTI5ZTMwMDA0MjgwNGI3NTgwNzc4MmI5YmRhNDkyNTVjY2NmNGUzNWM0NjFmZjU5YgotNjVlMzZmNmM2MzQ1ZGJiMmU4YzJmNTQ0NTAzMTk5OWMyZDhmMDQ0NGNmNDE5OGFjMTdkYjQ4MTk5YzNiM2ZlYwotMDJhMTMwZDIzMGFiYTQ1NjQwNmUxMDcwMTc4YmRhYWZjNDIyMzQzZWQ5ZWRiZjQ3MWM5NjVkMmI4OTE1ODZkYgotYTM0YmIyZDY2Zjk4ZjcxNmU2MDU3OTlmMzgwMGM2ODAwMDk0MWE1MmQ2OTE2NDA1ODNjY2UxMWI5NGNiNTU5OQotMjlmZDBkNWU4YTkzMDc4MzFmZTE1ZmNkMjMyZWIzNjE3MjFkMGRhOWU3Y2UxMTFmZjFlYmMyNTZhNDA3MzcyYQotMjUzMTgwZTUxZjE4MDBmZmIwMzEzYzJjM2YzYzRmY2RkZDU5ZjgyNGRjZDBlYWExZTU5ODM3NDg3Mjg4YjU1OAotN2Y4ZTZkMjc5NTQyMDhmYjgxNWVkMWQ1NGEzNjQ3NmE5NWM2NjA3NTFhMmNlN2Q0NzVjNzJmZjE3ODRjMzYzZgotYTY0MTU5NWViOTJlNjVkOWU3YmZlMThlZWZmZWRkZmU4MmQ5ZjZmMGNlZTM3ZTZhOWU2MGI0NDkzOTI2MzI3MgotNDgxNmRmNDBlZDI0NTUxZjBkMDdkODEzYWJhNDlhODBiZDM1NjAxODhlNWQwMTcwMzg1ZmQxNWMzNGI0NTQ2NQotM2Q1ZDU5YmY3NjI0YWIxMTY0NTJhYzI4ZGM5MjE3YjExYzc1YTA4ZDY4ZTU1YjEwZTk1NjdhOWQzZDhkNWRhOAotODkxMTYzMThhZmYyNWVmYWI2MTFkYTY5ZTEzMmJhMmZmODg4ZDY4Yzg0YzA1NjU0NGMwZmU5MTM3ZmFhODM0NAotNDAwODQ4N2MzNGZmMmMyMzc2NTU4Y2UyMDEwOGY3NjU4Mjk2NWZiMDZjMjEyOWU2MDdhMGU2MDg4OWQ5N2ZhYwotMmM3MWEwMjYyOTliMDcxZWE3Zjk5OTVhNTQyYjdlMzFlZmVkZThhNGQzNDEyMTBhMzdmN2I0YmI5NmFhN2MzMQotYzg3M2NjMGMzZWRmZjdiMjNkOGEyMmU3ZTYwMWZmYmJhYjBmNjcxYjAyYmE0ODdjZjZiNTg4ZWJlY2QyNmY5YgotYjdlOGRlMGNiZGE4NzA2NjJiY2NhOTA3MTZjMGZmNzY4YTljN2M2OWMxZGNiNDA4NmYxZTg4MWM2ZGQ1YjNmNQotMGFjNTE3Y2EwOTZmMjhiMWM3YWM5MTk1Zjk5ZTQ0ZDQ0NDAxN2EzYmQ1NGE2OGY0NTg4ZjBhNzU2MjU1MzA1MwotOGJmYWY3Nzg4YTcyNDNjMzA0NDYyMTNiYzk4N2UzMzgzOTEzZjI0YjM2YjMzZTRiMDgyZTUwN2NhZTYzMzU4YwotOTY3NTU5OWY2ZDc0NjMwNWE0MTdmZTg4NDhmMzdiZjg1ZjQ1MzVlMjhkZGJjNTg2OGRkNmRiZDMxNDhjZGMxZgotMmMyZDIyNGYwMGMzYWY0YzFkZGJmZDg4YmY3OWVlYzc2ZTQ1ZWY1NDZjYWU1NDg4MjVhMGJjYTZiZjkzYjBiMQotMzczYWY2MGE3YjI0YTc1MDc5ZDY2NDVkMDkwOGE5ZjU1ZWQwZmU3Mzk3MTAwYTczMGE2ZjRlNTU2Nzg3MTRiZAotOTBjODg3ZTQ2YTJjNzcwM2IxM2IxZGRhNzRhODE5Yjk3YWJmZTYyNzVhMjRlNzM5MDE1NDAxNjg3MzdhOGIzMgotY2ExOTAyYjc1NzdiODc2MWIzYzRhNmI2MGRmYWQ0OTBlMzVkNzFjNWYzNWQ4ZWYzODJmZTY2NDMzMzM2OTUxZAotZTRlZTk4MWY5ODAxNjg4NTM0Mzg3NTVmMTM1YzMzM2I4NzIzZDU3NzhlMmUzMDY3ZGM3M2I3ZmQ5OWFhZmJlMQotZDVhMmQxY2Y0NDM5MDVmYjQ1NzMwY2U4ZmZmMTQ2NzRhYmRlZDlmOTRiNDU3NTZhNjQ2YjRjYjFmNzg5YzdlOAotMDc0OGYzNjQxYTIyYzAxYjEwYWRiZGM3Nzc2MGMwZTJhMGI5MDU1YzRmOTEwN2Q5MzVmNWMyZmIyZmRkMjg0NQotNmQ2ZDJkMjA5NmU0YmFmMTRiY2M4ZDcxNmFkZjA1M2JmZTQwODQ1ZjAyYzBkMThmY2NjNDUzZjNmOGU0NTQ1OAotNjlmODAyZjUwNmNhMjFkMGZhYjI0ZDdmM2Q2ZDZjMjE5NjM3YTJkY2JjNTg2MTRjMTQ1NmE5YzZiMGIwZjU3ZAotMDljY2U2NzVmZmY0ZjYyNmIxYjY4YzBhNjNmYjlhMTYxNDVkNTgxNzZjZjI3ZmY1ZDM1MTNkYmVjNjAxNGYzYQotMmI1ZGU3Y2U2OWM4YWMyZmMxODRiYWQyMzk1MGIyOGNmMDQxNDgwMTc2NDk2N2ZmOTcwMjJjZDQ4NjVkOTk0ZQotNTg1ZmYyYzk5MmQ0ODBkZTMxZjU0OWYyNmExOGU0NzIxMTMzZjNkODgzMTY5NzZiZGFlNDE0MzFkNDRlYzhkNwotNGVhY2IyOWFlYjEzMmZmNDllM2M2NDZlZjAyNWViNTQxZGNjNTRmMzhiOGFlYjU2Mjg4N2VkNmNkZDA3ZmZhNgotY2YzYjJmODllNGIwZmJiNTIyNjcwMjA2OGI4MDQzYjZlMmYyODRlNDM1MGM5N2E3NDk4ZTY0NDBiYzNjOGQyZAotMjdkOGFhMWVhYzk4MGU5NjA2MTMxODBhZTQyMjQ2MjRiMmM2ZjkyZWQ0NjY2ZTM5MWFlNWUxNTljMGNlMjA3YQotNzQzM2U0NjJjZDkyYWViNjdlYjg5ZmRjZDIwZTQ2ZjE3ZjNkMTVlZTY3OWMwNjQxNzZhMmRiMGFkNWMzOGVlZAotNzU5NWNmNmFiOTc1MGZjYTc2ZThlNWVhMjQ0M2I5ZDEzZGEzNzVjYTJhMmRjODdmYmQzZDgxZWQ1OGUzNjZlZgotOTQ5NTJjYmQ5MTgxMzRlYTA4ZjkwNTE2ODU0MjA3YTJmZDkyNzk5YzQxMGVkMWZiNmE5YzM2ODc3ZDBiNzc3ZQotZWY1OWIwM2YxOWJjNmI4ZmRhOTFhYjhhZTIxYzg5ZDExNzgyNWExNTk1NDY2ZGExMGYyMGI4NmQ2ZDIyM2NkYgotNjk3NjMxMmM3ZmI3YmZmYjU4ZmVhZGZjZDAxOWJhY2VkY2U5NmVjMjM5YjVhNzk5MDA1ZTk0YmRlZmI5ZWM0MAotZTcxN2E1OTczMjZiNTMzMGYzOGZiZjcwOGQwMDJjOWViOGQ4ZWEwODM0MjQxYTM1ZTNhMDdhNThhMDMwZTY3OAotNTgxMmJiNWRlMWNiNTExNDI2Y2Y0OWZmMzk2NDdkYjY1ZDhhN2YyZjg3Y2E1ZTkwM2ViMTQ3ODk4NGFiY2MxNwotYzdlZTBiMWY3ZDFlOWUzYjgxYzY2M2FiY2NlNzdhOTBmMWNmZjFiMDFmMTE2ZDI5OTVlNjVjYmEwYjNmMWEzZQotODAwNzllY2UyZmMyNWUwZjVjZjI0NTA3Yzk5ZTViNmU4N2E0MTdjZGYyOWExYThjNThhYTc0N2FmYTk2MmMyNQotMTQ2NzFmYmU0NjdlMjI5MzFhNzIzYTIzNmFlZGZmNTY3NmFjZGU2ZWU3MWRjOWVlYzExMzAxYWY5NjkyNzI3NAotYTczMjgxM2E0OWE0NzNlZGI3ZTk4ODZiNmM0NTYwNTY4MWE1NjNmMzI3NDVkNjBjYjRhMjZhNzA2NDQwNjc1NgotYzlhZGQ3MjRlOWI0MDAwOTczNzcyNThlODFjZmUwODViMWFiZGIzYTAwMzU0MzUzYjUwYzliZDExYTZlNjU1YQotZDI2NGEyMDM3MDhmNzM5YTQ2ZTQzMjJhMWE4MjA0ZTMyYWUzODVkNGY3Njk0ZDZhZDYzZjk3NTk4NmZmZDg2OQotMzU1YjdlYTljMGZlZWY4ZjZkN2JjY2UzMTI4YTBlNDU4NTNkZTBhNWY0NDJiYjgwNTE2NmM3OTA2YzlmMTAyMwotZGY3MGJjYTY4MzkwN2EwYmJjMTEyNDk2NzBmODFjNTIyNDQxYWE2ZmM0ZTc4ODlhMzhkMTVlYWQ4Y2FkNGNjZgotZTk1ZmY1NDM4ZDBlZGM0NTBlNjM5OWYwMjI4ZWEzMThkYzI5NzllN2U1YTM2ZWI3NmY5ZDgxMDYxZWM4YzYxNQotMjE3ZDlkYzdhMWQwOTI0ZGQ5NTNhZDJiNzQxZTQ4MzU3OTUzZDQzMTg2ZGE3NWYzNDBjNThiN2QyYTZjN2VhYQotMzAzOGZhNGI2NmIwY2NlYTUxYWY5NjEwZTU1NThkODJiZjc5YTMwMWQ3M2Q1N2I2ZmVhZWYzMmQ2ZjE5ZTgwMQotZTM3YTNjMWVhMzQxYmVlMDg4ZTMyMmZhZjlhYjVhYjE5MzRiNzBmODk0ODUzOTg0YWJkNWYzNGM0ZDNmZWEwNQotNWFiNGZjNzAxNzljYzlmMTM3OWY5OGIzZDFmNTI5ZjNjMmFhNGFlNjNiOGQyYmZkNDZhZmRiY2RhOGVhMTFiZQotZjMyYzkzZWI0ZDQzNWZjMzc0ODZhMWNiYWFkYzNjOThkZTU4MWViYWQxOGYzNTE3NWQ3YjNlNjdjOTE5NGQ1YgotYmIzY2QxOTE4ZTg2ZGFhY2I4NjA1NWE1NDhmYWIwN2NlN2M5MzNiZDk4NGViNzEzNDA1ZDJiM2Y0ODEyNDQzMgotYTg4ZTEwYjk3ZjdiZTNhMjcwNDA1NTk0ZDNlMDZjMTdiNDc3MTllMjY3OGYwZjA2OWZmMWFiZmU3ZDM2NzJkNwotNmE3NDhhOWUyNzdmZmRkMjVmNTQ3N2QwYzlkNjBkN2U4ZGE5ZTBlZjMwZTVmZDZjNzBkNDdkMzE2MzdiYzBjZAotNGQ2N2Y1ZWQyYjEwMzg4OWE2MWZkMTEwNzVhYWJjZTlmMjUxN2VjOWI1M2Q3ZGI1YjI3NzkwZDliYjFlMTljMwotZDdjM2E3ZTFiOTU1MTZlZTM4MDYyZDRlYTc1OTE1MWU0ZGUwNDQ5ZTZhYWU3OTUwMGM0MmI0ZWZlNDkzNmQwZAotMDAwZmIzMzkxMzMwYzAzNWQ5ZDZiOWUyNTY3MWY5YWM1OTlhNDBjMzdiMjQzOWMwNmZkZmQ5ODhhYmNiYWY3NwotMGU0MmQzMjRlOGNhNzg2MTNmMzVlYTY0YWE4OGMzYzQzZTUxY2ViZThlZDEwNjdjYWQ5NGVhMDM4Nzc4M2UwMwotZTc2YWY0NzRmNzM5YjkyNDlkMWU5NWVlZjg1YWI1MjhlOGNkMmRhOTllMzNjN2VmMGVlOWRmNjk0ZGI0M2YzZAotZmU0NjdlNmZkMWI1MjkxZWNiZjZiMWFjN2EyNWMwMDJkZWU4YmUwNzI3ZWM1NDM5NzE1YmZkOGY4NTQ4NDNlYQotMWQwODA2NzdmNjQ4ODlkNzAxNjVmMWJhZDExMGE4YmFmMzg4NTYyOWY4ZGRiYzNkM2IwOWM1N2RlYTI4YjRmNgotN2EzYzA0MmNlNjRkNjM2ZDBiZGVmOTIwYWI1ZWY5NTQ0ZjUyYWQ1MzM4Mzc4NjdjNDkzMGZkNGRkMzIxM2UxOAotYWUyY2E2MjJlMGUyMThiMWJkNTRiZDYwZTAxZDRjZGRmYzJlOWI2NGM2Yzk5ZTc5YWIyYzNlNTJjYmVmYTU5OAotNDM0MjEzZDQ3NWI2MjkyMTkwYjg5YmU5NWIzYzY2NjAxMzNlMWI0OThiZDdmZjJmZDE0YWFiMmFjYTBkZmZhZgotNjJkOWRmMzBjMTljYTBlOTQ5MDA3ZGNmODQ1M2U3MGU2MGE1MTk2NzRkMzA1NTIzZDMzYmZjMzExOTAzNzIzNgotMTljYzRhYjE3MDdkYjJjNDk4NGM2ZDRmYjQzMTA5MzJlOWVkZTc4MDhjZmM3ZDM0M2E3ZmRhMDgwNjg5NjZkNAotNzg3N2Q3ZGU3YzBmNWZmYmZhYWU1NjY2YmUzYmRiNDhkZTMxYzVhYjZiY2ZhN2QzNTgxNmU1ODYyYmM0YTEzYwotZWNmMjM1NTkzNTA0MGZhYzM3MTQxZjdiZWY3ZTU4ZjdiMDI1ZTE4N2RmMzk1MGVkZmQ2Y2VhMjBkMDY0OTA3MQotNDQyYjI5MTZlYmNlNWY0ZDNjZTA1NWVmZGFiZjFjMmRjMzQ4YWMwYWU2Nzc3ZjY3OWUyZjYyYTBhM2VlOTEyNAotN2ZjODU1YmZjNmYwYzMzN2E3NGM0NGVhMWY1ZGQzMmNlNjE4M2E0YzgwYTZiOTY3ODYxZjYxMDFjMjhiNzJkYQotZDZhYTExMjhmMTk2NjI3ZTI0MTc5YzE4ZjM4NGUyN2NmN2Y4MWY0MzEzODM4MWQxNzdmOTNmODA4MmNjOWQ1NgotMWIzYzk5ZjFiZWEwNzNhMWE4MWY4YmNlYTEzMWUzNTg3YjM5NzkzN2M0MDI5ZDQ4NmZlNjg0MmE3MDk1NThmNwotNDNjZDE2YzhmMGE1ZTRmYmIzZTUyMjY2M2I4MmUyNTQ0YTZmZWNlZmQzZDhhMmIyMjIzMDFmZDQ5ODhjMDEzNgotODU5ZTg2MDg3ZmFkNjMyOTJiYzQxODc0MTI3MzFhOTY2NzEwY2E5Y2NiODYzMjk1NjBkNjRiZTMxY2E0YjUyNgotODIyNDVjMWE0ODcwNDZhZDIxZGQ5YTI3MGUzZmFlNzJmZWNkY2Y5NjA4Nzg0ZjY0OWEyNTQ3NDAzNGFjNzQ0ZAotNDRlMTRlNzJkMDJmZjE3YjIyNTJhYTUyNzNkZTNiYTNjZDcxYTk1MDcwYTlmZWQwZGZmODA2NTNiM2QzNDZjNwotNTYxMTk1MjllNWJjYjYwMTFkMzQxZTM2ODgyN2NkZGYyMmQ0Zjk5ZjE3ODE4MjlkZjgwODUwN2UyYjRjZWIxMwotMjExYjA4ZjU1NDQ0ZTc1YTAwNTYzOWEyMGMzMzcwNmY4OTg1ZjMzMDhjMDhmNzdlNzJkYmZiZTA0OWFlODE3NwotYzJkYTJlNjJlYjU4ZjBmYmIzNjlmNWJhYjBmZmY0OWY5ZDQ3NjVmOTMxZmU2NmY4YWExMDdkODExNmJlY2RmYgotNDY2ZDI4MjUyN2JhYjZmYTI5NzIxNjc4ODM3Y2I0NmQ2MDE0OGE3ZmQ5Y2FlNjNkNmFhNjM0ZDIzZWUyMTE2MQotZWY5ZTgzNDUyMGYzNjc5MDNhNjViZWY3OTk2YWI3N2QzN2JhOTdhZWIyYTdhOGMzNTAyYWFjOTg4ZTdhMDQzMAotOWQ2N2EwNmRiNGE5MDcxNGZkMWE5MzM0MDJkZjA4MzAwMjY5MjBiZjFmNzFjYjAzNzliZGE4NzE0NDE1YzliYwotZTc3OTVmYTRlYmMzN2U4MTliM2Q4ZWU2NTM3NWJmZGQ2YjM2YmRhNDFiNzc5MTg2NDM4OWU5YjU4OTkxOWVlNgotMjg3MmJhYzJlMjIxYjI4MTUwZDMwMjRhOTg0MDMzODk5ZTUzNzJhYjQ3NGI5YjQ0OTRmN2JiNDMzMWI2MjEzZQotNzk1MzU2NWYzNWQyZWE2ZGEyMTI5NTZkYWIwMTU3MWNiZWVlZjg2MjkzYzU4YTI1OTg2MGUyOTRmNjk3MzBlNgotZjE0MTY4MGNmNzVkNDBlODI5Zjk2NzllOTgzNDFmZDFlMDgxN2NiOGU0MGNkNmM0ZmE2OTFhYzY5MWZiNTlkZgotYjc4ZTg3YWRkOTUxZWFjNDFhZDFiNGY0ZmE0NWQyZTM0NmUwZmE3MzE1N2E3ZDJiMmRmODllYTU2YTgwZTg4NQotOWUwZDAzMzFkMjE2ZGI0ZjFiOTVkNjYyYmFkNDBlNDcyZjIxYmJlMDU1NzZjZTRhMmQyN2FmMDE4ODBmNDM4YQotMzBjMTdiYzY1ZmI0NjBhYzFiM2UwMWFhNDNhYTM2NzdiYTA1YTQzN2ZjY2EzY2U0YzI4NjRkOTljNzAxZDc5ZQotM2ExOTlkYmM3ZTJmMDBiZThkNDM0N2Y5NmI2MWJhMGY4OGU5MGI0OWQ0MTJkMGVkMTYyZTgyNzE1ZWEwNGMyNwotYWYzZmViMGE3YjNlNGRkMTdjODc1YTUxZTliYmVkM2M5ZTEwZWFhYmVlYzBmMDI5ZDk0ZmE5MGQ2MDYwNWI1MgotMmRjZmY1MzlmYmMzMjNlN2YwZTFjYmZjMWExOTJhNDQzNDVlZmMwNzBiZDVkNTkzOWQ5ZjQzODM4OTc3MDRmMAotZTc4NTEyNmFiZDlmNTgyZjFhZmU4OGE3Mjc3ODRhZmRhYzNkY2E0OTg5MmM2YmViNTJjYjFhZGVlMTgwMzRlOAotZTg4YTQ0MTg5MDE3NTU3NTk1MWZkODc1OTRiNjM3NTFlNjkxNjU0OTZkNTY2YmQyM2M4ZGI0YjkyMzliYmFhOQotZWY1MDU4ZjViNTFjNzRjZjcwNjMyZjg4ZjFhMDVlMWI0MDA3OGMxODNlYTg0MzM0MjdmNjNhNWY2OGExYjgxYwotYmQ0NjYyNWI4YmEyY2Y3MTNjMDAxY2NhNGM3NGExODZmOTNhYWEzODY5YTUxN2RkNjRmMWU4MWM3MTgyMzIzOQotMTkzNGZhZWE2MDRjZjRkOWRkZjk3NGZiMDljNTc4NmJkZTA1OTc4YmIyNTIwOWI1Yzc2NDg2MDJkZDYyYzMyYwotNjFlYzRiNWNlMTE3NzE4NTM1NGRkNWNkZjE1NTQwMTIxYjZkODI0NTdmZjMxMTFkYjFhYWIxODg5ZmIwZTNjOAotMzhjYmM3YTY3MWJhMTZhNGJjNTY3ZDljZGQ0MjcyMDVlOGY0ZGU3ZWRjNjRjMDBiYjYwODAwNzExMzBiNDNkMwotNmU3OTE5YTViN2MyOWM2OGFjNTA1ZmYxMDdkMWUyYWI2NmEzNDE3NjEyYmEyZjQ2MTU0OGYxZTcyYzcwMmExOQotN2E2MzExZGFlNjQ5ZTQ2NzY4ZDg1ZDc1OTI4MTQyOWI5N2EzNTM3OWI4NGM3NjNkMzVjZmQ0MzRhNGUzYmJiOAotNGM2ZTVlZThkZmYzYTc0NDliZWMxNGM3ODViY2UxZDRjNjE3MjE3ZWU2MzE1ZmRhMDAwZjBjNTRkMTA1NGU4MAotYzhmOWY0NTJkYWFhNDY1ZjYzM2ZmYzNlZWRhOWM3NmU3YTc3MDI0ZWFmMzliZDViYzk1NjJmYTQ0ZjNkYTlhZQotN2U2NjVhMzNiZDIyYWFlNmRiYzFkOWVmYWI2Mzc0MWUzMDc3NWVlZmZiODE5ZmY5MzMzNDJjOGU2Yjk3OGY4YQotMmFhMjBjMmYyODEwMDcyYzRmMjQzN2U3Y2MxMzg2MTAwMmFiNmQ1ZWU4NGE2ZjgwNTQ5NjgzYTM0ZGEzY2VjOQotZTM0NzFkMTEyMzMyZWEyNjAxNTM4MzZmYTI0ZTIyZWVjMGNkYjBhNWIzYjA3NzNjZmQyMzdkYWE2N2M1NWFhNAotY2JmMWNjMzBmNDMxODNhOTNiZjdkNzA2OGVhZDMyYWM4MDY0YmIxZjBhOGJiNjFjZjU0NzJiY2FiMzYwY2Y3MQotYjYxYzM0NDNlYWU0ZjFlYzdmYzBkODgzNTU5ZjhhMmZmMjUyMmRjZDdkYWQ1ZjM5NWU5YWIyNDU0Y2NhNmRhZAotMDdiYjU4YmRlYjFlNTRmNzU4MTZkYWJlYThkMTcwOTc0OTA5YjJmYWQ1M2Y5YTY5ZDk3ZWIxMWZmMjBjNmFlZgotZWI2ZDc2ZTlmYTkzYzMxNzExNTYwMmRiOTAzNTliZTYzOGRhMzgzZDllMDFmNmJkYWNiNWFjNWJkN2M3N2Q0MgotZDgwNjQ2YWNlOWYyMzg0Nzc0NjEwZjYzZjk3ZDcwYzRlODFhMjg3MWJlMGE1YjAyOGM4OGFmZDgyYTNiNjM3NgotNWQ1MDY0YTY3ODZhODI5YTZlNjMyMDEyMDM5NWIxNTQxYmZkNmUzZWMxODJkNTA5ODJkN2JlYzQxNDBmMTQ2YQotMDY4OTBhNzliODVhNmYyMGY5YmY2MTZmNWY1NmUwMjc1MmM1ZDE3N2E0OGFhMmY4ZWNiNjdlNDJlMjMxNDg1MAotZDIxMDljMDk2NWE1NWQxZTBmNDcwMzcxNDQzOTkxZjliODg1OWFjNzBiZDZmMDQ5ZGJmNTdjY2M4ZTJlM2M2NwotZWI4ZDFiNGYzNmM2NjA3NDYwMDg0NjBlYmMwZjcyODRjODAyOTI1MjA2Yjk2ODQ3N2E1MDNkZmE2ODc5Nzk0ZQotN2VkODJmY2M1ODQ0M2ZhMWQ5NWZkNTYxYmM5ZDNhMmNjYjJiZmExOTkxNmQ4YTg4ZTZmN2VmZjBjZTBhN2Q0ZAotOTBjNzdmNjNiYzc1ZjMzNjhmN2E5N2RlYTlkOTM5MmUzZjQ5OWFlNGI4ZTUzNjAyNjM2Y2Q1M2ViZGI0MjIxMwotYzI2NjhhM2M2MThhNzZmNmY1YTk2ZmMzM2MwZTQxZWY2MjBhNjNlM2M1MjUxMmM2NmI1OWY4MTBjNmI4NTkyMwotZDgxZmY4NjE4ZjQyZWUxOWIxMGQ0ZDA4OGJkNmI3ODRlNGY5YmQ2YmZmZTA4MzE2MTE4MWIyZjc5YjM3NGZkNAotYjg0NjY1MGQ0Yjk1YjZjM2U1ODQ0OWQ4ZjBhMjAxYWVjNzJkODc1ODhjNTRmYmIzMTEyMDQ1MDQwMTA5YTNkMgotZDk4Yzc3OGVkM2ZlMDdmNTQwMTA3NzNiNjI4YmFmMjlhZDNiOTEwNzJmYmRlZjdjZGUwYjk2OWQwYjY5NWJmMgotNWQzODZjNmI4NjQ3YmZkNTVjMTY5Mzc0YzU3ZDViZDhmYjI5YWY1YzVhNjcxOGQ3Y2VlMzE4YTA2YWQzNWQ5NgotZmJmODc5OTI5ZTI4YmQ0M2I1ODNhZmYyNzY5Njg4ZTA4N2IwMGVhOTViMjg2MjlhNzFjNmVhODQ3Zjk4ODM1NwotZGE5ZTIzNDIyZmUyZWJjNGMzM2YxODM2NzkyMzNlMGQxZDgxNTBlYzU4Y2E2Y2EwYmRhMmE1MjllNmY2ZDE0NgotOTIwMTBiMWVkYTYzNjBhYWM5NDBlZDIzNDEwNDU1MjA5MzgzYjY4YzNhMWZkNjhhMGVmOTJkMTZjZDRkZWRhOQotOWRiZWRiMWNlMThhNzk4MTdmYjNkMDQzZjkxOWYxYjk4YzYyZWNjNzBkYzI3ODg2YjI1ODQyOGFlMmQxMDc1ZQotZWY4YzEyMjVmOTZiZTVlZTNjMWI0ZTEyN2QyNmJjMmFiYzZkNDU3MzMzYTBkNWNjZTk5ZGZmMDBmM2Y0MWUwYgotYTlmZDdiYWM5ZTk2NjkxY2QzMTZhYmU5MTNhNmVkZjk1YzZjNWQzNzA4NmNmM2NiOTYwYjgyNjg0Y2U0NzNlZAotNTc0ZmQ4YzZjYTA1OWJkNjc5NDQxYzIyZTZjMzkzNzZkM2EzM2M4MDExMzYxYzgzNGJiZDdiODdjMzQ1YTlmMAotYzZjYzEzMjhiNWFmOTI2Zjc2M2JlYmMxM2JlOTIyMzhkYTE3MTEyNGRlMTE5YTA5N2Q2NWU1ZDYyM2NiZjE1NwotYTRlOTNlMjUwYTZiYzM0YmM1NGZlYjI4ODlkYTNmNTk5M2VmZjBiZjM4ZWY2ZTQ0MGQwYmRiNDA1NzQ2YWE3MAotNGU1ZGU1NzBiMDM0N2Q1MmIyNWFlOWUwZmZkNzU4YjhkNmRhMWE1N2U0NzI4OWEyNmQwZWQzMGUzMTQ3NDI3MwotYzIzMTVjNzRhMzllNmIyNmY1NThkZWMxNDBkMzg0Y2QzYmJkNzI0NmJmNDZhMGY3YmVjY2U0NWZlMGMzNDNjZQotNzgwMTYyMDRlODE0ZGNjYzU4MDYxZDQ4ZmZjODA4NDIzNDUyOTg1YjEyZDI4Yzk0ZWFiYTg5ZWRhNzkzZjdiMgotOGQ5ZmRlMTFmMzA0MzRiZGY3M2M0ODQ4NGE4MTRlYmU1NDFmNGU2ZWI4MTdkZTQzMTQ2YWU0ZTA0ZmE3MTI5YQotZWMwZTRiOTJhZTIyYTFkMjM0NDM3NWY2ODMxNGQ4MzlhYWRlNTljNGFjMWQ1NTY1MzhmZDdhOWY3ZWU5YTEzOQotZjM2MjA5NTJjNmM0NWY3MTgxYTY0NDhhODA3YTFiZjYyY2I1OWY0NDAxOTkyOTdjYmM4YTM2MGQwMTY4YzE1MwotN2M2YjNiYTU2ZGQwZjdmMTA0MjcxMTM4ODQ2YTZmMzA1ZjJjOGE3NTM2NTEyYzU0YTFjNDYyMzI2MDZhNjY0OQotODFhODA4M2Q1OWE0YjVlOGNhMmNkMGI3MGRkMGI0NGJlZjFjMmFlOWViY2JhZWVjYmM3YzRiZmIyY2UzMDlmNwotODMwYmEwNmYzYzhlNzlmZGRmNzM3NDUxYTY3ZDhjNDQyNWM1MWUxMWY4MzJkOTkxOThjMTZkZWU4NjRiNGM5YQotZTQ4ODYzZjVhM2NkMGU2ZjNjNWIzMWE2YmZmNTI3YmNlMjYwYWVmYmM0MGIxZDgwNjVkMmY4OGY5N2RkOWZmNAotOGIyMWQwNjlhZThjZWJhYTUxMWYwZDAwYzFkYTc2MjA3ODIxODU5YmIxOTFkNWY5MjYxYWRmZjNlNjQxNzc4OAotNWI0OTNkYjQ5NDIwZjQ3MjQ5NmE4MjA3ZDNmMmQ2NGZhMzMwNGRlMGU3OGQ2MjU5YTYyNmQ4ZmRmODFjNTFkMAotZjgxZWY4YzYxOTUwN2YwNTQ0ZWJkM2FhOGQxZjIwMGE1Y2UyNDBhMTE3MTQ0MTQzOGQ2YmJiMTljMDg1MGJkZgotNGEwMTQ3YmFmNDc4NzUxMzc1MmU0ZTA1MmEwOWQ2Yjk0YmVjOTYxMDdlNjRmNmIyNjkyYmVkZjJhMzg4NjNlMQotMTVhYzI1NjRjMGViMTBmYjkyM2VmM2Q1MDVmNzUwYmZiNjQwNzg1NjQwNmNjOTJlOWIyYTNhODEwZmI0OWVmOAotZThmNDQ1YzJlMzJiMzBkMzUyZmJhNmZlMzQ1YzhhZjI0MTMwN2U3NmMxM2VkMzc2NTU0Yjg1N2IyM2YyYjEwZQotOWY0ZjFkNmIyNWVlODUwZDc0NDMzMmZiNzMzNDk3OTA0MjZiYzNhZGY4MTE5OThmODRmNDcyMTI0N2VkOWRjMgotY2IzM2QzNDNlZDlmY2JkZDAwMWQ5NzcwODQwOGE0ODg1ZWYwNTkwODMzMzU0NjE2Nzg1OTc4ODEyNGY1MGVhZgotN2Y5Y2Q1YjdhOWY0YTc3YjIzMzdmNTE1NjlmZTNmYjQ1ZTQxZGM1MDM5NGVjOTYzODUxZmVmNzZlZDY3NTkyYwotYmFjNjhlMzc4MDQzZDc3MTM3OTc0Y2I2MTc3MjIyOGQ2M2Q0NmQ5MjgyMTY2MjIwM2RjYzBkZDFkYjM3NWJkNgotOTVjOTE1M2M3MjI2MjAyZWU1NDVhYTM2YjBiZmJhNDliYmE1OWU5MThlM2JjYWQzNzdjYjQ2MWQ1MjQ0MmI5YwotZDE1OTc2NDA5MGVmYWEwYTg4N2ExMmIwYzk4ODRkNGViMGNiYWU4YjJiNWZlMWQ2OGI4YjEzYWJjZGU3MzIyMwotMjM0MDYzOTA3YTgwMTIxMzRkYzQyMzM3ZjEzMWNlMDEyYTk4ZTU4MmZjYzUwYzk1MDdjMWY4N2I4M2Q2MmRmYwotYmI5NTFkZDQ4YzNmYjA3OGFhZWJmYTI1YWUxOTA4Zjg3ZDk3OTE1ZDg2YmVhNTNlMjNjMmM0ZmQ0MjYyMTBjYgotYTUxN2VlMzY4MTE4M2QzMjdhNWFiNDJjMDI5NzdjMzIyMTIxM2U3NmVkNWY5ODZhZDZiY2MxNGY1MDY1MTM2NwotZjE0MmE0ZGM2Mzc5MjEzOTc0ZmI5MGE3YmUKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjM5Ml8wIC9FUlZCRlQrTmltYnVzTW9uTC1Cb2xkIDEgMQotWyAvLm5vdGRlZi9kb3RhY2NlbnQvZmkvZmwvZnJhY3Rpb24vaHVuZ2FydW1sYXV0L0xzbGFzaC9sc2xhc2gKLSAgL29nb25lay9yaW5nLy5ub3RkZWYvYnJldmUvbWludXMvLm5vdGRlZi9aY2Fyb24vemNhcm9uCi0gIC9jYXJvbi9kb3RsZXNzaS9kb3RsZXNzai9mZi9mZmkvZmZsL25vdGVxdWFsL2luZmluaXR5Ci0gIC9sZXNzZXF1YWwvZ3JlYXRlcmVxdWFsL3BhcnRpYWxkaWZmL3N1bW1hdGlvbi9wcm9kdWN0L3BpL2dyYXZlL3F1b3Rlc2luZ2xlCi0gIC9zcGFjZS9leGNsYW0vcXVvdGVkYmwvbnVtYmVyc2lnbi9kb2xsYXIvcGVyY2VudC9hbXBlcnNhbmQvcXVvdGVyaWdodAotICAvcGFyZW5sZWZ0L3BhcmVucmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoCi0gIC96ZXJvL29uZS90d28vdGhyZWUvZm91ci9maXZlL3NpeC9zZXZlbgotICAvZWlnaHQvbmluZS9jb2xvbi9zZW1pY29sb24vbGVzcy9lcXVhbC9ncmVhdGVyL3F1ZXN0aW9uCi0gIC9hdC9BL0IvQy9EL0UvRi9HCi0gIC9IL0kvSi9LL0wvTS9OL08KLSAgL1AvUS9SL1MvVC9VL1YvVwotICAvWC9ZL1ovYnJhY2tldGxlZnQvYmFja3NsYXNoL2JyYWNrZXRyaWdodC9hc2NpaWNpcmN1bS91bmRlcnNjb3JlCi0gIC9xdW90ZWxlZnQvYS9iL2MvZC9lL2YvZwotICAvaC9pL2ovay9sL20vbi9vCi0gIC9wL3Evci9zL3QvdS92L3cKLSAgL3gveS96L2JyYWNlbGVmdC9iYXIvYnJhY2VyaWdodC9hc2NpaXRpbGRlLy5ub3RkZWYKLSAgL0V1cm8vaW50ZWdyYWwvcXVvdGVzaW5nbGJhc2UvZmxvcmluL3F1b3RlZGJsYmFzZS9lbGxpcHNpcy9kYWdnZXIvZGFnZ2VyZGJsCi0gIC9jaXJjdW1mbGV4L3BlcnRob3VzYW5kL1NjYXJvbi9ndWlsc2luZ2xsZWZ0L09FL09tZWdhL3JhZGljYWwvYXBwcm94ZXF1YWwKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmL3F1b3RlZGJsbGVmdC9xdW90ZWRibHJpZ2h0L2J1bGxldC9lbmRhc2gvZW1kYXNoCi0gIC90aWxkZS90cmFkZW1hcmsvc2Nhcm9uL2d1aWxzaW5nbHJpZ2h0L29lL0RlbHRhL2xvemVuZ2UvWWRpZXJlc2lzCi0gIC8ubm90ZGVmL2V4Y2xhbWRvd24vY2VudC9zdGVybGluZy9jdXJyZW5jeS95ZW4vYnJva2VuYmFyL3NlY3Rpb24KLSAgL2RpZXJlc2lzL2NvcHlyaWdodC9vcmRmZW1pbmluZS9ndWlsbGVtb3RsZWZ0L2xvZ2ljYWxub3QvaHlwaGVuL3JlZ2lzdGVyZWQvbWFjcm9uCi0gIC9kZWdyZWUvcGx1c21pbnVzL3R3b3N1cGVyaW9yL3RocmVlc3VwZXJpb3IvYWN1dGUvbXUvcGFyYWdyYXBoL3BlcmlvZGNlbnRlcmVkCi0gIC9jZWRpbGxhL29uZXN1cGVyaW9yL29yZG1hc2N1bGluZS9ndWlsbGVtb3RyaWdodC9vbmVxdWFydGVyL29uZWhhbGYvdGhyZWVxdWFydGVycy9xdWVzdGlvbmRvd24KLSAgL0FncmF2ZS9BYWN1dGUvQWNpcmN1bWZsZXgvQXRpbGRlL0FkaWVyZXNpcy9BcmluZy9BRS9DY2VkaWxsYQotICAvRWdyYXZlL0VhY3V0ZS9FY2lyY3VtZmxleC9FZGllcmVzaXMvSWdyYXZlL0lhY3V0ZS9JY2lyY3VtZmxleC9JZGllcmVzaXMKLSAgL0V0aC9OdGlsZGUvT2dyYXZlL09hY3V0ZS9PY2lyY3VtZmxleC9PdGlsZGUvT2RpZXJlc2lzL211bHRpcGx5Ci0gIC9Pc2xhc2gvVWdyYXZlL1VhY3V0ZS9VY2lyY3VtZmxleC9VZGllcmVzaXMvWWFjdXRlL1Rob3JuL2dlcm1hbmRibHMKLSAgL2FncmF2ZS9hYWN1dGUvYWNpcmN1bWZsZXgvYXRpbGRlL2FkaWVyZXNpcy9hcmluZy9hZS9jY2VkaWxsYQotICAvZWdyYXZlL2VhY3V0ZS9lY2lyY3VtZmxleC9lZGllcmVzaXMvaWdyYXZlL2lhY3V0ZS9pY2lyY3VtZmxleC9pZGllcmVzaXMKLSAgL2V0aC9udGlsZGUvb2dyYXZlL29hY3V0ZS9vY2lyY3VtZmxleC9vdGlsZGUvb2RpZXJlc2lzL2RpdmlkZQotICAvb3NsYXNoL3VncmF2ZS91YWN1dGUvdWNpcmN1bWZsZXgvdWRpZXJlc2lzL3lhY3V0ZS90aG9ybi95ZGllcmVzaXNdCi1wZGZNYWtlRm9udAotJSVCZWdpblJlc291cmNlOiBmb250IEJaWElFQitDTVNZMTAKLSUhUFMtQWRvYmVGb250LTEuMTogQ01TWTEwIDEuMAotJSVDcmVhdGlvbkRhdGU6IDE5OTEgQXVnIDE1IDA3OjIwOjU3Ci0lIENvcHlyaWdodCAoQykgMTk5NyBBbWVyaWNhbiBNYXRoZW1hdGljYWwgU29jaWV0eS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLTExIGRpY3QgYmVnaW4KLS9Gb250SW5mbyA3IGRpY3QgZHVwIGJlZ2luCi0vdmVyc2lvbiAoMS4wKSByZWFkb25seSBkZWYKLS9Ob3RpY2UgKENvcHlyaWdodCAoQykgMTk5NyBBbWVyaWNhbiBNYXRoZW1hdGljYWwgU29jaWV0eS4gQWxsIFJpZ2h0cyBSZXNlcnZlZCkgcmVhZG9ubHkgZGVmCi0vRnVsbE5hbWUgKENNU1kxMCkgcmVhZG9ubHkgZGVmCi0vRmFtaWx5TmFtZSAoQ29tcHV0ZXIgTW9kZXJuKSByZWFkb25seSBkZWYKLS9XZWlnaHQgKE1lZGl1bSkgcmVhZG9ubHkgZGVmCi0vSXRhbGljQW5nbGUgLTE0LjAzNSBkZWYKLS9pc0ZpeGVkUGl0Y2ggZmFsc2UgZGVmCi1lbmQgcmVhZG9ubHkgZGVmCi0vRm9udE5hbWUgL0JaWElFQitDTVNZMTAgZGVmCi0vUGFpbnRUeXBlIDAgZGVmCi0vRm9udFR5cGUgMSBkZWYKLS9Gb250TWF0cml4IFswLjAwMSAwIDAgMC4wMDEgMCAwXSByZWFkb25seSBkZWYKLS9FbmNvZGluZyAyNTYgYXJyYXkKLTAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgotZHVwIDMyIC9hcnJvd2xlZnQgcHV0Ci1yZWFkb25seSBkZWYKLS9Gb250QkJveHstMjkgLTk2MCAxMTE2IDc3NX1yZWFkb25seSBkZWYKLWN1cnJlbnRkaWN0IGVuZAotY3VycmVudGZpbGUgZWV4ZWMKLWQ5ZDY2ZjYzM2I4NDZhOTdiNjg2YTk3ZTQ1YTNkMGFhMDUyZjA5ZjljOGFkZTlkOTA3YzA1OGI4N2U5YjY5NjQKLTdkNTMzNTllNTEyMTY3NzRhNGVhYTFlMmI1OGVjMzE3NmJkMTE4NGE2MzNiOTUxMzcyYjQxOThkNGU4YzVlZjQKLWEyMTNhY2I1OGFhMGE2NTg5MDgwMzViZjJlZDg1MzE3Nzk4MzhhOTYwZGZlMmIyN2VhNDljMzcxNTY5ODljODUKLWUyMWIzYWJmNzJlMzlhODkyMzJjZDlmNDIzN2ZjODBjOWU2NGU4NDI1YWEzYmVmN2RlZDYwYjEyMmE1MjkyMmEKLTIyMWEzN2Q5YTgwN2RkMDExNjE3NzlkZGU3ZDMxZmYyYjg3Zjk3YzczZDYzZWVjZGRhNGM0OTUwMTc3MzQ2OGEKLTI3ZDE2NjNlMGI2MmY0NjFmNmU0MGE1ZDY2NzZkMWQxMmI1MWU2NDFjMWQ0ZThlMjc3MTg2NGZjMTA0ZjhjYmYKLTViNzhlYzFkODgyMjg3MjVmMWM0NTNhNjc4ZjU4YTdlMWI3YmQ3Y2E3MDA3MTdkMjg4ZWI4ZGExZjU3YzRmMDkKLTBhYmYxZDQyYzVkZGQwYzM4NGM3ZTIyZjhmODA0N2JlMWQ0YzFjYzhlMzMzNjhmYjFhYzgyYjRlOTYxNDY3MzAKLWRlMzMwMmIyZTZiODE5Y2I2YWU0NTViMWFmMzE4N2ZmZTgwNzFhYTU3ZWY4YTY2MTZiOWNiNzk0MWQ0NGVjN2EKLTcxYTdiYjNkZjc1NTE3OGQ3ZDJlNGJiNjk4NTllZmE0YmJjMzBiZDZiYjE1MzExMzNmZDRkOTQzOGZmOTlmMDkKLTRlY2MwNjhhMzI0ZDc1YjVmNjk2Yjg2ODhlZWIyZjE3ZTVlZDM0Y2NkNmQwNDdhNGUzODA2ZDAwMGMxOTlkN2MKLTUxNWRiNzBhOGQ0ZjYxNDZmZTA2OGRjMWU1ZGU4YmM1NzAzNzExZGEwOTAzMTJiYTNmYzAwYTA4YzQ1M2M2MDkKLWM2MjdhOGJkOThkOWU4MjZmOTY0NzIxZTkyYmJkYzk3OGU4OGVlYTBhOWMxNDgwMmViY2M0MWY4MTA0MjhmYTgKLWI5OTcyMDMyYTAxNzY5YTdjNzJkMWE2NTI3NmY0MTRkZWVkYWYxZDIyYmUyM2Y0NzA1YmY1ZWYzMWI2YTNiNjkKLTBjODk2MzIwZjA5ZTk4NzViNTAyMjBhNWJkYmJkNTdjMDQxYjVlYTk3ZjQyMTY4NWE3MjU2YjBkOTc1NWVkYmUKLWQwNTE5MGRhYmYxYzNkYmY1NTgyNTgxNjNjODIzMWQ4OTE2N2E4MTZiYmE1NWZiMWYxNGFkMDQzMjBhZTM4MWQKLWY3ODNhOWVhY2VlOGFlNWMxODM4Nzc1ZmUyMzgwYmRkMWYzYWZjY2NjOTZkMmEyZGZjOTk5YjUyYTY2ODljNTEKLWFmODJiOGQ2MzIwNWIzMzkxMDMxMzRkYWM3ZTNjNDVlNjY5Mzk0MDI3NjA0MWJiMDdlYmRiOWI3MjllOGVmMGQKLWVlOGJmNDUwZmE0MjU1MWJlNjUyMTdmZWE5MDJlMjhkZWNjMDk1ODBiNTA0ZjBmNTJmMWU4ZmM1Y2U3YWMyOGQKLWM0ZTQ3ZjkwOGZkYWViYTIzODI3YTk3YTBhYTc0MWFhNzcwOGY3YmJmZWM2ZmE2OWNjNGY3YzNiZDQKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWNsZWFydG9tYXJrCi0lJUVuZFJlc291cmNlCi0vRjU2NF8wIC9CWlhJRUIrQ01TWTEwIDEgMQotWyAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC9hcnJvd2xlZnQvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZgotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCi0gIC8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKLSAgLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZl0KLXBkZk1ha2VGb250Ci0lJUJlZ2luUmVzb3VyY2U6IGZvbnQgV1dXVVRVK05pbWJ1c1JvbU5vOUwtUmVndUl0YWwKLSUhUFMtQWRvYmVGb250LTEuMDogTmltYnVzUm9tTm85TC1SZWd1SXRhbCAxLjA1Ci0lJUNyZWF0aW9uRGF0ZTogV2VkIERlYyAyMiAxOTk5Ci0lIENvcHlyaWdodCAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQKLSUgKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50Ci0lIFNlZSB0aGUgZmlsZSBDT1BZSU5HIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgZm9yIGxpY2Vuc2UgY29uZGl0aW9ucy4KLSUgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGluY2x1ZGUgdGhpcyBmb250Ci0lIHByb2dyYW0gaW4gYSBQb3N0c2NyaXB0IG9yIFBERiBmaWxlIHRoYXQgY29uc2lzdHMgb2YgYSBkb2N1bWVudCB0aGF0Ci0lIGNvbnRhaW5zIHRleHQgdG8gYmUgZGlzcGxheWVkIG9yIHByaW50ZWQgdXNpbmcgdGhpcyBmb250LCByZWdhcmRsZXNzCi0lIG9mIHRoZSBjb25kaXRpb25zIG9yIGxpY2Vuc2UgYXBwbHlpbmcgdG8gdGhlIGRvY3VtZW50IGl0c2VsZi4KLTEyIGRpY3QgYmVnaW4KLS9Gb250SW5mbyAxMCBkaWN0IGR1cCBiZWdpbgotL3ZlcnNpb24gKDEuMDUpIHJlYWRvbmx5IGRlZgotL05vdGljZSAoKFVSVykrKyxDb3B5cmlnaHQgMTk5OSBieSAoVVJXKSsrIERlc2lnbiAmIERldmVsb3BtZW50LiBTZWUgdGhlIGZpbGUgQ09QWUlORyAoR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UpIGZvciBsaWNlbnNlIGNvbmRpdGlvbnMuIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBpbmNsdWRlIHRoaXMgZm9udCBwcm9ncmFtIGluIGEgUG9zdHNjcmlwdCBvciBQREYgZmlsZSB0aGF0IGNvbnNpc3RzIG9mIGEgZG9jdW1lbnQgdGhhdCBjb250YWlucyB0ZXh0IHRvIGJlIGRpc3BsYXllZCBvciBwcmludGVkIHVzaW5nIHRoaXMgZm9udCwgcmVnYXJkbGVzcyBvZiB0aGUgY29uZGl0aW9ucyBvciBsaWNlbnNlIGFwcGx5aW5nIHRvIHRoZSBkb2N1bWVudCBpdHNlbGYuKSByZWFkb25seSBkZWYKLS9Db3B5cmlnaHQgKENvcHlyaWdodCAoVVJXKSsrLENvcHlyaWdodCAxOTk5IGJ5IChVUlcpKysgRGVzaWduICYgRGV2ZWxvcG1lbnQpIHJlYWRvbmx5IGRlZgotL0Z1bGxOYW1lIChOaW1idXMgUm9tYW4gTm85IEwgUmVndWxhciBJdGFsaWMpIHJlYWRvbmx5IGRlZgotL0ZhbWlseU5hbWUgKE5pbWJ1cyBSb21hbiBObzkgTCkgcmVhZG9ubHkgZGVmCi0vV2VpZ2h0IChSZWd1bGFyKSByZWFkb25seSBkZWYKLS9JdGFsaWNBbmdsZSAtMTUuNSBkZWYKLS9pc0ZpeGVkUGl0Y2ggZmFsc2UgZGVmCi0vVW5kZXJsaW5lUG9zaXRpb24gLTEwMCBkZWYKLS9VbmRlcmxpbmVUaGlja25lc3MgNTAgZGVmCi1lbmQgcmVhZG9ubHkgZGVmCi0vRm9udE5hbWUgL1dXV1VUVStOaW1idXNSb21ObzlMLVJlZ3VJdGFsIGRlZgotL1BhaW50VHlwZSAwIGRlZgotL1dNb2RlIDAgZGVmCi0vRm9udEJCb3ggey0xNjkgLTI3MCAxMDEwIDkyNH0gcmVhZG9ubHkgZGVmCi0vRm9udFR5cGUgMSBkZWYKLS9Gb250TWF0cml4IFswLjAwMSAwLjAgMC4wIDAuMDAxIDAuMCAwLjBdIHJlYWRvbmx5IGRlZgotL0VuY29kaW5nIFN0YW5kYXJkRW5jb2RpbmcgZGVmCi1jdXJyZW50ZGljdCBlbmQKLWN1cnJlbnRmaWxlIGVleGVjCi1kOWQ2NmY2MzNiODQ2YTk4OWI5OTc0YjAxNzlmYzZjYzQ0NWJjMmMwMzEwM2M2ODU3MGE3YjM1NGE0YTI4MGFlCi02ZmJmN2Y5ODg4ZTAzOWFiNjBmY2FmODUyZWI0Y2UzYWZlYjk3OWQ1ZWE3MGZkZTQ0YTJhZTVjOGMwMTY2YzI3Ci1iZjk2NjVlZWExMWM3ZDIzMjljMWEyMTFkZDI2YmIzNzJiZTU4MjJmNWVhNzBkOTllYjU3OGM3YmVmZDQ0Y2RmCi0wNDVhMzYzMDU2ZTVlMWNjNTE1MjVlYTZmYzA2MWRjZWJiMzM3MjA4ZWZmNzI5ODAyMzc2YTI4MDE0MjRmNjcwCi0wZTdlNjM5N2IyOGYxNWJjMTBiNDAwMTJiMGEzZWFlYjI2OTNlOGY3ZjYyN2M0YzljN2M2YzViZmYxMDVjMWU0Ci0xYjJiOWU4ZjA5MjUzYjc2MDQwZDI2OGI4MDcxOWUxYjNmNWE1NWFiN2I4ZTEzNGQ0Y2I1YWJjZWQzOWFjNjM1Ci1kYTAwMWU5OTM0YzE5OGE3ZjliOWVkMDAyOGE4NWU5YWUwMDQyMWRmZDhlYWEzYmIzYjRiNGNlNDVkMjA5MzAzCi0yMzdiZDUxODA5ZmU0ZDg4MDkwMGIxZWViMjM2YWNhODdiOWZmNmViZTZiOTk0YTYwYWY1ZDY3Y2NjNDJiZDU2Ci03NzI5NWMzNDZlYjRjNjJiZGMxZWYyMmVlMDdkYWFkOTI4ZGZiNzM0NTVmMDkxZjMyNDA4ZWQ2NDMwYjk3NDE3Ci02ODNhZjI3YTAzNzE4YTE1NmUzZjZlN2I2ZTRmMmU4MTc3NTAzY2Q4MmRkYmY0NTU3YTNjY2ZmNGM4NThhZTdhCi1mN2VmZWQ2Y2M1MjFhMjgzNDI0MzZiOTUzZTQ2NTBiNTc5MmJlODVlYTJmOTg5ZWI2ZDk4NjkwNWE2MWZhMzhiCi05NmUxYmJjODMwYjc0NDY5MTUwZmIwYjU5OGE3OTRmZDgwZDEwODcwMDg0YTg3NzI3M2E5NTAyYzM0NTZlNWVmCi03NDM1MGU2ZTNiZTU4NjNlOGJhMTg1ZWI1OWZiODdiMzY1NjZhZjcxMjAwYjZlZDM4OWQxMjg3ZDRlOTI1ZTMzCi1iMjM4M2VkMDVkODdkNDg1ODZlNjk4ZmJjNWQ1NjJlZDlkOGEwOWVjM2VhYTFiMWYzMDAyMjRhZjIwYzIzZjI2Ci1hMmVhZGM3NDU2MjU3MWRhODRiMzkxNGQxZDgwYjEyN2M2ZmY0NzA2YzcwNDZiYmIzNzJhMDAxM2UwYWI5NGYwCi1jMjc5NDY1ODM4NzFkMjcyYmY0ZjIwZmE4NGU4OWQ3NDVkZTdiYmE4ODVjYzA5YmE3MmUwZjUzMGVkNGVmN2QxCi04NjRiM2M2NzAwN2VkOTg4MDAyODQyMzUzNzJmMGE3MGM5MTJlMjFlODUxYWZiZjgxMjE2NWI4ZGY5MTJjZDFhCi0wMTNlMjcxZjBiMzQ3OTY3ODc2YzY4YWU0YzQxMDdlZjhhZDFmMTcwOTE2MjEwMDM0YzY2Mzk0YTlkOTcxYjY4Ci1mYmZjMTEzMWUzN2ZjMTc4ZWI5N2MxYjJhMGY1NzNhZGQ5ZDdjMGJmOTQ0ZTY1Mjk3MzRkZjhhN2VmNTQ0ODViCi1hMzM3NWNjMzBlOWUzMjg5NDM3MzNjYmQzNTJiYzE1YjA2Yzg1YmZiNGE5Njk5NDI5MWM3MmEwZWFlODRmYjAxCi0wZjFiMjRkMDEyNWZiOGMxNmQ2MDU2MWRmOGJiN2FhN2RkZmU5NTQ5YWZiNzBjMWU4OTQyNDIxNDYwOWZkZTQxCi05YTE0Mjg5MmUzMGYwMjc1NGZkMjM0Y2ViM2M1OWEyYTA0YzA2YmFiN2FlNDBlOGZkZWM1MDU1OWI4MzQ3Njg0Ci0zOTFjNzUwOTg3ODAyZDU0NTJjNDdjMWUwYjVmMjIyZGU5YTBlZWFmZWUxOWQ3OTZmZjM3NWExZTFlZjBhZWVkCi0xYmNhYzRmNDg1ZmNhZWUxOGFlYzU4NWQxYTlkODBmNDE4NzFkZGE0NWZlZjFlYWU4MmM1ODkzMTE4OTg3YmViCi00ZDllMzQ1YzI3Yzc0MTlmZTY1ZTQ4NTNiNDA1MzdkODIyZTM0ZmYxZTBiZDI4MTlkMjFlZjYwNzk4MTI1OWU4Ci05ZjEwNDBhMmQ3MDhkNzQ2Mzg1OGFhNTM4MTc1OWFjNDlkZjRkZGRlYjIwOWEyNzhmZTYwYmQyNTA4YWNhMGY0Ci02YTI0OWEwNWI2NTJlNGM3YmYxYjY3Njk0M2NkYzQ2MDI5MTBmYTNlYTc2MzY5ODVhMTBmNjM3ODMyYTVhYmFiCi05YzdhNTgwZDYwNTkyOWQ2ZDcxNTQ1MDYyMTcyNTJhNzU1YmViODQ2MmQzMGE3OThmZmE5YjI2ZTUwMGVhYjI0Ci03ZTlmZDYxMmM3NzZhZTYwNDIzOTk1ZGMxODUyNjg2Y2IwNDFlNjYzNTdhOWFjZDRiNmE0ZTk4NDZiMWRjODAzCi0yM2RhYjZiNzc2NTIwNWQ4MmI1MGNjNjM5NGU3MjVjMTlkZjAwZjdkYjQyNzM0MWQ1MTQwNDdlNGJjNTk0ZWZiCi1hMjYyZWIyYzQxNGU0M2Q4YWNjOWNiMTk1ZDEyZjNiMmE5NzQ4ZjM4ZWRiM2FjMzQ0N2QyN2QyMGQxZTYyYmJlCi0yMmY2Mzc4ZTUwOGYwY2Q2ZjE3ZWYxYzUwMDQwN2Y2ZDQ0MmU5MmVmMmUwMGI4ZGU3ODY2MGQ4N2ZkMWM3MjA5Ci1lYTY3Y2RiMzcwNzZlMWVhYWVkMTI4ODE0YTk0OGUyN2UxZjJmYTgxZmU1NGJlNmM1N2VmOGMyYjJlNDYwZjA4Ci02ZmYxYmI1MjljOTEwMGIxZDg3OGRjOWEwNzdkMjE4MDVlODlkOGIwZmJjMmEwNzRlNGI1NWE4NjljOTZmY2E3Ci04MTE3MzQ3YjljZmE0ODBmZjRhMzdiMzRiMDQwYTk5ZmJhOTk5NDJiZDg2Y2U0YjQ2ZmY1YzY5YmFiY2E3YTNhCi1mNTAxOGRhMDU1NTZiZmY3MWVjYzg0NGIyYjcxODU5OGYwODI1Y2RhM2QxOWQ3MTRmYjY2NDcyNjIxMTEzYWQ3Ci1iYjI0MGRlN2RmYmQxZjE3ZmZkOGYyZWY0Yjg1YThlYjZlMWJmZGYyNmM3Zjk4MTY4MTk3YzAyYzRhYTUzNWMyCi0wZjllZjliN2NiN2YxZDE3NGIyZTk0OTUzZjU0MWMzYjg0ZDQzMzY2ZTBlMDBhMDI4Yjk4Zjk5MGI0ZDAxNTE1Ci0zY2NjMmUxODUzNDczYmI5YjI1ODU3ZTRiOGY5ZDY2OTVlZjMzMmJkM2JhYTllZTU1MWE0YjE0MmRlZmI3ZjAzCi05N2NkMDc1ZWY5Y2Q0MTA4MmNjYmY2M2U4NDljNDg4MzVlMTA1OTIzZTcyNWQ0MWQyYjVlZTBjM2YwM2E2MDNhCi0xNjE3MTMyMTZhZjk3YmQyMWFhODdlM2E4MGQ3NTM4MzYwMzE1MjAxMTUzMGI4YWJkMjI5NGQwNDFlOTBhMDQwCi1mNjFiYWY4NmJlOTdmOGRhYTgzMjZlYjFhMmI0NTExNDI1Nzg1ZjM1Zjc1ODM1NjgzNTE1YWY2Y2QwZTczMTk0Ci0yYjI1ZDVmYThjN2UxMmNjZGUzM2FhMTkzZDYxYTM1ZWJhN2Y3ZTEwMTg0M2UzNWRmZGYzZTA3YTE0NDJiMGViCi1mMmE5MDg0NjM0NzM2YTIxMTI4ODQzZGY0OWM4NGIxMDYxZDA4MjY3NzdhNzU0MDc2YzRjM2QwYTY4YjMyZGJhCi1lZDRiNWMwNzQ2ZGRlY2RkNzlmYmNjN2E0NDI1ZWRkYWE3ZjQ5MjU3MTQ4ZjA1ZmY1MmZmNmJhYzcxY2I2NWNhCi04YWQ1ODY5Y2M5ZmQ3YzRjMTk0YWU4ZDVkMjBhNzMwYTAzNTIzNGQ4ZjlhNjM2M2U3YTQ5ZmMyMmJiZDM0ZDA4Ci1lYjdmZDQzYTY3OGJlNTJiOTVlY2NmMDI5YTZiMThhNTEyZDMwY2ViMGI2YWRmODBmZjEyMzJkZmRhMWE1NzUyCi1iNTIyMmVkZDkwMTJiNDVjZjBkZjA2NDRiMmU3MTNhZmVmMjEyNTVhMDgyMzJlZmJkNWQ1Zjc1MDZiZmQwNTBhCi1mMGRhZjU1YjVkYjU5NWQyOTM2MWY4MjUzYzI2YzM3ZTA5YjRmODcwNTZlZGQ4YzkwZTBkZjRmYzc0MDcyNTQxCi04YWQ4Y2NlYTU2MmU0Y2U3MmFjYzhlOWYzOTI4NGZjYTI3NGM1NzJmZmVjMjRiYTMwZWY5ZGIwNzA1NDk2NWJkCi0yMjA1ZDcxN2M5YjNiMDcyMzA2MWNkNzRlYzY4OGI5MTVhYjY2ODk5MDRkNTc2MjYyOWM4OTFmMmZjMGNkZmIxCi04ZDhhNGQyMjYwZGM5M2Q3YWMxMTA3YjE5N2Q3ZTg0MThiYmFjZmM2NjBkODg4Njk3Mjk2YjdjYzY1ODEwMjRjCi1lNTgzYjAxMTRmZmUzYjNhOTYwZDYwMWZmMjNjMGY2MzNlMmI4NTMwMDA0MmY3MTdjNDcxOGMwNTQ3ZmQ5YjE5Ci1lNzRkMGUxOGY2OTA4ZTQ1MjgwNjU4ODhjMTM2ZGM4NzY3Yjc0MDI1ZWY1ZmFmNDcwYTI3MmY1N2Y1NDhkNzM4Ci1jNWQyZmY2ZGVmNDM2NmMxYzA4ZTBiMDk4NTVlMDRlYzNiYmQ4Y2I2Yjc3MGY2MzhhYzdkODUyYjdiMjI1MGY2Ci1jZmJiNTY2OWM5MTEyZmJmNzM1NDZhOWMxZTk2OGExZTFhMDYxMjhlZmVlNjQyMmU0MWRmMTUxOWM3MzQ2NjM1Ci0zMWZlYTQxOWJiYTgwNjdjNmQwZTk2NDE0M2EwOTA2NzYyMTk3YjhkZTk1NTAyYWU5YmI1NGNlZDE3ZGU1Y2U4Ci05ZDYyODcxNmJmMWUzMDZhYWQwOWJkN2Y4Y2IyYjdkYWU1YmZhOWVmNTNlNzE2ZDVhYTJjYTAxNGVhZTgzN2M2Ci1jMGYyZDVmNTM1YWU5MzY4MmU4NTViMWJkZDZjZTk1NTYyNzI4NGE0NzEyZjY3YzFkNmRlOWY4MGQ0ZGRhNDNhCi05ZmUzNGZlNGZhYjU0NDQ1OWExZGZhMGQxMzgzYzUwYmIzZTZjM2RmMDc4YWNiODhkYjM3ZWNiMzhhYWFiYmIzCi1jYzU5ZDNmYmU2YTg0ZjFmOTUyMWI2ZTA1ZDBhMGIyZTBmY2VhZThlZWVhNGY0MTk3Njk0NTUwMWYzMmJiMzgzCi00NTU0NjdkMjE3Nzc3OTY2ODhlNTdhZTliN2IzOTJkMTY3YjYzYmZkYzExMDI1NjU2NDliNTM2OTRmMWViM2U4Ci01ZWMyZjA5NGFiMDZkNDI3YjVlMWU3NDEyYjMzNjkzMzZjNzY2YTdmYzc3ODE5MGRkNWFlZWJlZjliNmEwMzRlCi0xMzMzMTRjYjUxMjY2N2YxYTRlZWY5MGExMjUxY2E5ZThhYWY3OTY2ZWM5NjAwNGMwOWM0ZGZhY2JiMGQ0YzQ1Ci02MGQ4ZGY0MTgzZDM1OThmYjk1ODRhNDQzM2M5MTMxZjg2MDI0NzRmMjdlNDkxNmI0M2RlODBlZDFkMDJmNmU0Ci1kMjA4YjAxNGMwYTQ0ZDk0ZWY3MDk5MzBlY2E2NDZiMmYwN2Q4MzU4ZDQ4ZDBhNzY4YjZmMTM0OTJlM2NiODc3Ci1mZTM4YzU4YTdmNTQ2OGFmNTJmZmMxMWI4YzAyYmQ5MTQ4NGNkYzAyMmFiZTY3OGE3ZjJlMjk4YTdmYWQ5NjdhCi0yZWE3ZGM0MjdlNmFjMTU0NzY2Y2E0YWUxNWZkNDE0YTc2MDY0ODIzZjMxNDU3MjQxODRlMzBlYzRmMTQ5NGM4Ci03OGY3ZjYzZWRlYTYwZGFmMjQ0OGRlOGE3OTgwMWVjZmQ4NmEwNmVmMTIyNDUxZGQyMzgwYmIxYTQyNTZhN2VhCi04MDZkMTMxZTY2ZDVhNmUzMDc5ZjdjMmQ3YzE0M2UyODc5ZjUzMTZmZmViYjFiZmExNjZhMDg4YjhmYTljYjdmCi00YTVmMDg3NWE4ZmY1ZDM3OGU5ZTgyMDVjNjE1NWVhODU3NTY0NzVjYTUxNDllYjcyNjQzYjRhZTFmOTA3YzBjCi1mYzhmNjMxNTBjZGM2MjA5YjE5NTFhZjIzZmY2ODE4ODM2MDkzOTUwMTc3MGVhYzM5ZWQ1NWRhZGM0ZGZiMWM1Ci1iMmVmMzljOTNkMDMyNmE4MDRmNjJlOGYxODdhMjI0NDQ0MDk4ODM1ZmY2NzBhZDU1YjQ5ZjNjZDBhYmEyOTAxCi0yOTNhZTA0NDI3OTE2ZWUxNGM4MWY0MDQ0YTA1ZDljOGFkMTRhZDRiNTU2N2U4ZTAxNDc3ODBhMGJkMjk0YzVhCi0xMGE1MGE1Y2M3NjU2ZjkwMTU4ODQxOTEwOGQyNTcwZTgwNGE1ZTU5MDAwNDAwODc3NmM4Y2YyMGI1NmQ1ZWYxCi1mYTMyNTM4YzQ4MGJjYzE5NTUzMjFmOTU0MDA4ODcxYmExODAxNzdkZWE5NTJmZWZlYzUzNmY2NTIyNTgyNjQ3Ci1iYzIwNWRkMTM5YTE4ZDJhNDE5NTZiYWE0YjAwMjE2OWNmMDQyYWIyZWJmOTFmZjIwM2RjMmUyNTU5MTcxOTEwCi0yMTE5ZTk0NjczYTI3NWQ3M2YzOTA5ZDA4MzRiMTcwZTJiNjJiZWVkY2NhMjdhZmI0NGEzNWFjNTFkY2I1NzE5Ci04MjcwNmYxMDFiMjE2YjRhZjM1MjM5NzQzNzhhMDVjMzI3NzAyYjEzMjMzNWZmMjg4YWRmNjI1NzhmMzBjZGNjCi1jZjgyNjg5ODM2MWJkNDkyMzhmMzY4YWUyMTgyZmJiNjMxZTM3NWU5MDNlZDllZmI5MTFhMDQ3MTE5YjQwODMwCi1hMzk5MDk0OTRlODZhZWUyMTY5NDIyM2RmMWE1N2FjOGU1YjRmMDQ2NWQwODY4OTM5YWM3N2NjYjQ0OGQzZjU4Ci0zNjYzMWNlYmRjMDZiZjI4NjVjNTg0Mzc1NjhjZDczNGVmYmZhODcwMjE0ODUzMjMyY2NiNDhjYzU3YzhjMzJlCi05N2NkZWI4OWNmNWUwYzAzMmU4MWRlMzc3YjM2OGY3ZDU3MTg3ZjA4Mjg2NzVhNTIzODJkNDFkZTZjZDlmYjUyCi0yYTFjY2ZkZTMxOTJjNjUwZmNkN2QxZjg2ZGIwM2M0MDFlNmVlYmQwZDQwYmYyM2MxMGUwMjFlZDY2YmM1YjdjCi1hZTU3ZDA5MDViZDI0OTI1Yzg1NzNmMDY5MTM5ODgzYmJkZTEzZGYzYWUwNWJlYzE3NzFlZGRiOWIwMDM1NTVmCi05ZDY5NjU3YWM3MThjMDY1YTMyZWY3Y2E4YTFmZjU4ODBmYzY2MTk2ZTgxMjMwNTBhNDdlYmU0ZGQ1YzFhNGE3Ci00MGNlMWNmMzQwYmYwODAyMWZjZWVmODE3MmQ5Y2RlYjA2M2Y0ZTRjMjIwNWFlNDUwM2M3MWFlYzE4MzZmOWJmCi05NmNjZDBhNzEyZTMzNDA3NDQ2Y2VhYjk2MjIxZDdiM2Y0MzQyZmM3NGFhZmE4MDI0ODFhY2VjZWU3MjQzODA3Ci0zOTBiMmQxMmM4NDQxOTM1NjA3MzhlNTc2ZDI3YjBmNWE5MGIyNWUxYjVhMjdkZThhMmM3NGIzMzAzNTI2MTkxCi01ZWUwMjUxMDY1NDc1ZjI2YmYwYmJjYTU1NDlmMTNlMTM1Nzc5N2E1NzI4YjQ2YmE5NTcwYzA5NWQ5MzgxMTJjCi1iM2JhMjEyYzI2Y2Q2YmI1NjllYTI3NmUxZDgzOTc1NjlmOGQ0Yzc4NTI4NDkwMTg3YTE3MmQyZTMwZGQwMjI4Ci1kNjlmZGFhMjVmYmRiNDc3Yzg4ZDUyZjBiYTEzNzI4MGQ2ODY1NjAzNmMxN2I4ODUyYjAzYzIxNjIxZDBiMjFjCi02YzAxNmYxOGNhY2ZhOWE5OThlOTcyZjQwZWRhMDcyNzhkYTU0ZmU1MTE5YmFiZjAxNDVkNjgyNGYwNTFjZDYzCi05MWJjOTM0NzJmNzgwZjAwZTI2MWRjNzRkNjY3M2RhMzdkOGQ5MjkxZTI1YWYyNzk4MjlmOGQ0N2JiNTI0YzE5Ci04YjU5OGNlMWM1NzZhYzg1NDJiNWVhZDk5YjAzOWFjMjk5NmE2ZDc5MWEyMmE1ZDViYjBmYTNlYjY1ZDFmYTAxCi00MDFkNWM3ZDQ0YTljZmUwODJlOTMxNGFkYTZmNGFjOGVjZWE1YmU4ZTVhMWNiNmExZGJhMWM2MTVlNjllYzliCi0wZjIzMWI2NGFjMzFjNTQ1ODU5ZjAxOTViYjliNDAzMTIxZGY3YmUxZWExNDg4YjQxMzgyNWQ4ZTFkN2FmYmZjCi1lNWE4ZTFlNTJkOWMzZWE2ZGUzY2U3NWQwMTNjYjczOTZlODI1YmFjM2E1MGQwYmZmZDJkMzBjNmYxYzVkYzBkCi04M2MxYjY4ZGQ4YjYwNDIzODIyODU4MTIwOTNkYjRjNWQ3ZjZlYWE4YTRhY2JlYmE3OTRmNjM2MTA0NTZhNjQxCi00MmZkZmQwYzRjNWYwYzQ0ODZhNjE3MGI3NzAxY2E2NGNkMTQwOGY2ODZmYmQyYWZiNTZiYTMwNzcyMmIyYmJhCi1jNTQyMTIzZjc2NjE3MWI0M2FhZTVhYzA1MzA5NGEwNGFjNGZhYTNjYmRhZGNlYzgxYWI1YWFhYzU4ZDNhN2I3Ci0xZGJlZGNmZTYzZDA2MmIxMWRiY2FjZWZlYTg5YzZmODkxNjM4OWQzZjdkOTNkYTg5ZWJkOGMzNzQxNGM3ZGI2Ci1kNjUxMmE0ZThjNzYxNDVhYzE3MGZhZjEzNmEwMjNiM2MzMWNiYWU5Nzc1ZTQzNmQ2Y2IyODM1Yjc3YjU2NDU4Ci02OTA1ZDU1OGEzY2ZhYjBmMWYzNDI2NTU3YTY2YmY3NzUyOTJkZjA1NmNmYWFjYThjMDg3YjRjMGJjYzJhYWUxCi1mYTQ5ZjM0NjYwMjM4NGY3NDNiZTZiMWFhMjYxMzRiYTI4NzIzNjZjMTdmMWRkMzU2MjIxODM4YTQwYmUzYTRkCi0wYjg1MDJhOTY0ZDM2MGVhOWJjNThlNGZmYmYyODNjODI5NDY3OTE5N2ZhZjVkMjNhYWQxYzg5YzNkYTg0OTAyCi1jOTU2MTlmYTBhYjc2Y2EwYzdhZTcyNWExYzVkOWM0MGU4NGNjODRlYmE4ZmM5NTM2MWYzYTczOGRkYmNiNTkzCi1iMzExMGRiMmY2OWVjZjlkYTIxZDc4OGQzNmExYmY5ODZlMmRkNzhjOWU2MmY2NDNlNjY3N2Y4MDk5MWY5MGEwCi04YmQzNTQ4NGZjNGFlZjMyNDNiYzNiNDYwZjU3YmY2ZjBhNTAzYjU3Zjg0NzIzNzM4ZTFiOTRjMzAyOTUyMGMxCi1mOGQ3ODdmOTkzMDVlZjg3ZmU2NDI5M2I1ZmJmMGEzNzgzMDY0NTljMDIyZjQxMjdmMmUyMjA3YmE4MThhYWM0Ci0xYzg2MGI3MDgzM2I5MmNiNzIyOGFiMmM4ZjY4ZDAzYjZlY2I2N2Q0ZjgzY2IxNjBjMTcwMjk4ZTFiZmYzMzlmCi0zMDY1MDVlYTRmZTg2OTI5ZjExNWIzYzU1YzdmYmRiN2YwOWViMzhmN2M4Y2E4NmM5Yzg5ZDliOTJkYWUzN2E5Ci01ODM5YTE4MWU2ZTU1ODM1ZGEzZTgxYzg4NDY5ODBlYzVjMTY2NDZhMzFiYmZmZTU0YTg1MDVlMDA1YzkyMDBjCi1jYjJiNDc2MDgzZDdlNTVlNjM2NDgxNDZlOGU2MTVkMzQ5ZWQ3NzliNzg3MjMyNjA1YmViMzgzNDZlMzU3OGJmCi1kMDQzNzk3ZWRjMDBmNmRmOTFjOWEwMjk1OGVhMDFmNTVmMDBkNTc2YzhhOGQyMzZlODFiNTllYWY5NmJkZmUzCi00ZGU0MTI1YTM4OTNhY2VhOTdhYThkNjM3M2I3MzZkNGNjMDE2NjA5NWJiYjc1YjczNDFmMDZkOGUzZmI3MzJhCi01NTM5ZmE4YTI3YWJjMWQ4MmYxYTg2YTc2ODcwNDUwZmRlYmJlODg5ZGQwNDhjYmYyZjE4NGRjY2E1Mzc3NjQ5Ci05Y2EwMDUzYWE5YTg4YWI0ZDZmMjc5ZjhhM2JhNzA0ZWQwNTdkYzJhMzYxZDA3ZTVhZjZjOWM4Y2U0YjA4YzA1Ci1kMDY2MzVhZmNlMWNkN2ZiMTI4OGRmOWNhMWY5YTU1NmQxYTEyMDY5MTI5N2Q4MTM0MjE0ZGExNGRiNDVjZGJmCi01NTQ1YWJiNzUxMzRkNDUyNTdiMWUzNzNlYWYyM2ZiNjAwMzcwY2Y4ZTdkZTAyZTcyMTE2MzliMTFmOGZhMGQ1Ci02NjI3YzU3MThmNTU0Y2EzMzUxYWM5NWMwNGRiZTg5NGUyMDY5MjA2NWFmMmM3YTllMjM5NDQ5ZGY0YTY1OTE3Ci0yZTBmYTJiZDNlYmZmYmZmZDkwOTM1Njk4NTFhMzFkYjQ2YzhjMzBjMWZiODMzOWE3Zjc0MmEyYzg5MjEyODMxCi0xNTQ1OTg0NDI5ODk3MmI4YjA2ZTJjNjk5ZDZhY2FhZjMzMWEwMjMwNDdlNWIyMDQxZmMzOWQ4MzBiMDg1MWE1Ci04ZWYxZTMyOWI2ODgwMzRmOWM5MTkyN2NiYWFlMmVjMmM4NGY4NTAyMTI3MDU1YWRlNDQ4ZDZkZDdlZWEzYWFlCi0zOTJkY2UwMzM0NzE0MWIzYjg1ZjMwMThiMzM5NmI5ZmIxZTRhNTljNTBkOWU4YjgyNjEwMDg4NTc1ZWVjNjYzCi01Njg2ZTcyMzRlNzJlNDY5MGNlMzg2ZmNmOWQxNmI1NGM5YzY5MmU5MzI0NDI3ZGVlN2UwOTZiNmQ0YzQ1NTAxCi1kYTJkMGVkYTY2YTFmMjllOTBjMDBmZDJjNjJhZTQzYTk3ZjYxMTc5NGM0NzA0ZDE3OWNlMGJkNjNmZmM0ZjUwCi1hYjNjYTcwODZiZjk0MjI4M2ZiMGQxNzU4ODhhMTNlNTI3OGFhYWEyNWEyNmUzZGY0ZmJmMTNlNjQ1MTlhZDk0Ci00NGFmMTcxMjA3ZjNmODliMzY5Y2NkNjE2MmMwYmExMzIwZDMwZDNhNTk2ZDlmNTg5NzZmOTQ0MzRjMWZiNzczCi1lNzBiZTg3NTI4YTliZDVmYjdlNDk0ZTZjZGJhMGEzY2FiYWI4ZGMyMDczZWE3ZjViOTU2YmY1ZDVjYTFiMjU4Ci0yNWE3M2UwODI0Y2U4ZDAwZjRjOTQ1YzBhZmRjNGI1N2Y3YzAxNjJhMTRiMzAxNTRiNjFhYjAzMGE3MzY3OWFmCi1kNDNlMzIyYTA0ZmM3YjNjODE0ZjNiMmQwNzU4NWVhZTZhNTI1NGI0M2JjODM2YzYwMDBiZjIzYTU2ZmJmYmZlCi04NDc4ZjFjZDAwMTUwZWUzOWYwYWFkMmM3YWUzMzEzYjhkNjE5Yjg0ZGRkOGNkMzg3OGE0YjMwNjk1MDg3M2RhCi05YTU5MmY1MjBiN2Q3ZTBjZjliOWM5N2QzNTEzOWVlZjljMzI5NzYzODY5ZTY0ZDg5YTUyZmVkMDE2ZTFjZDQwCi00NDk3MzU5ZDlkNGQ2YmI3MDIyMjQxODI4MmNkOWVkN2YxMmMxNmNjMWFhNmIzZWVhOWM4MTJiN2MzOTEwMjA5Ci0yODMxYjBmMDVlNjQ0ZjU4ZTg3OGMxZWFhM2Q1ODdjODliMjZkYjhiOTk1MmUwYmVhZDEyYzdkYjZhYTVhMDQyCi05ZTMzMDEyZGIwNTUxZmU2YTU4OWJhYTgwMDkwNWE3Y2IzNWQyMjBlZmJiNjc1YTk2NDQ0ZWRkMThhZDg5ZGJjCi1lYmM0MDg3MTYyZTk3N2I0Y2M2ODBhMGUzNDkwYmZhZjI4YTU1NmMzYmI5Mjk5OTM1MDk3ZTNlMDQ4Njc5ODQ5Ci1hODVjZTkwNmY1NWJkZjU2NGYzY2NhMmIwYTcwYjQwNGQwMjUyMGI3NzYxNGU1NzcyMzFjYjIzMTBkZGUxYmE1Ci1jZWExZWY5MjZhZDE5MWM5OGEyMWVkNzZlYmI4ZjQwN2VhMmFlMmZmNTYwMTQyMTZhYmIxMThjMDIxODU5MGY1Ci1mMzI4NGY5YTE4N2E4NWIzZjUwOTFmMDViMjFkNzQ3ZjZmZTczODRhMjdhZTZhOGRkYjkyM2RmNGY2MTkwMGU5Ci1hZGI4YmU1ZDMzODYxM2UxNDg2ZDcxMGU4OTJiNWI3MzMwNjE5NTFkMTY0YWUyMzMwMjNhNjllMDI0NTdlOTBkCi1kZmI2ZDhhNTNlYTBhNTdmM2M5ZTI3NjE0NjMzYWNlM2M2Y2Y1N2RjOGM4MWQwYzA3OTY0MmM0YTA3NDVkMjgxCi0yYmM2YWM0NTg3YTU2ZTY1ZDY5NTVlNTBmNDM4MGQ5NGY5NjI4YzEzMDEwMmUyYTMzMjVkNjk0ODY1YTBkZDkwCi0wMWFiMTE4ZjM5M2ZkODZkMDFhZWRiNTYxMmZjYjQ5ZThiODFmYTZmYWRmN2I2OTY1MGZjZWY0NWEwYTcyNGQ5Ci1lY2Y4Y2VkNWNmNTY5MTNmYjY4YTM5YzcxMzUwYWNkODU1NDMzY2MyNWIyNWFkZTE5OGNkYTQ2YmZjY2YxZmFjCi1mMWM4NDFhMWU2MDU4YTczZTI2ZTU4MGNiNDYzODQ4ODVjNDE3Nzk5ZDkyODIyNjg5YzJmNThiYzFlMGEwNDBhCi05ZDdkM2Q3M2RlM2MxODY4OGQ2MjU4MWQ1NGEwZWFkZjlkZWZmYjNkYjM0YTlmMDUyYmNlMzNkNWZlOGU4YWU5Ci03OGU0YjBiZGNjMmE4ZmZkY2FhNWI0YzBmNGEwMjU2ZDk0MzY0ZTcwZTE3NDlkYmMyYjE0N2Q2OWVjNTM5YjQ3Ci1lZjg2OGFjNDgwN2Y3YWMxZjAxYzkzYjMzNjE5NDI5MTU1ODFlZmM3NTQ0NTNmMjIxZjRhNzBiYjkwM2VjMzEwCi02MmNjYTdhYzM5MmY2ZjcwYjYxZjQ5ODIyY2ZkNjVjNjY4MDcwYmFiYzExMDIzMjJlNGNmMjI0OTAyZjBjYzZlCi0yNmJiMmMxMTljM2M2NjQzNGY0YTg1MTY0YzQ5ZWQ1MTA4NGExZjA3OTVlYjYzMWY2ZDM4MTIzNjE5Y2M1Y2VkCi1jOGM2OTA4ZjM4MGE0YTNmNzkzOWQwYjAzMTg3ZTQ0OGZhNDQzMzNlZDhkOGMyNTA0YzNmY2UwMjM1Nzk1ZDg2Ci1mN2E3YmI0MjNkMWE3Y2E4MWIyN2I0ZjgxYzkzYWM5NWJhMzM2YTBkOGU2YmI5MGM5NmFlNzc1ZWUzNGMwN2RhCi01Y2QwMTlhNzNiNzk0NDQyNGQyNDJkZDdkOTZlYTAzNDkzMDdlZDQyNmZlMGM3ZmI4YjVjYmUzZDI5NWEzMDY5Ci1iOTc1ZmFmYmU3ODEwOWNhYjM1YWMyZmE1MTU0ZjY2YWY5YjllYTUyMmNkNDg0NzQwOGQxY2UyNGNmN2ZjNzcwCi00ZjIyMmZlZGM5NjJmZjIxZDA5YWEyYWU2Y2MxYjE0Y2ZiY2FiNWQwMDE2NjA3MzYyZDNjOGY2MzQ3ZjdhNTRlCi04MjEzMjdkZGQ0NzUzOTZiNDY1YjFiZjU4OTQ3MDNjNmRlMWU5OTQ3ZTY0ODY3ZTY4ZWZiMjYyMGM3ZjQ2MzY3Ci1jMGMzNDVmMjk0Yjc4MTk0M2YwYzk2NTAwNjg4YTA4MzQ3YjAyNzJjNjBlNWQ2YTc4MTBhNDRjNGU1NjU0ZDA5Ci0wNTkzMWE1N2UxZmU2ZmY3ZWRkMWU3N2ExZTFjMzkwNzBiNDllNGQ3MmE2MmYwNjM0MGY5YTc2ZDA1NTM5MDViCi0zNWU1NzExNDM0ZDI1Y2MzYjE0NTU3YmJhZjY2YTgyYTZlZjU0M2JiZmQxNGMzMTRkZGVlMGVlOTkwOTA0ODJmCi1jMWRkMDZlZWNmMjAzZWM5NTExYTNhZDZjY2VjZGQxMTM5Y2NmMzFkYzcyZTQwNzg1M2QxNTljMTYyMjEzMWRmCi1mNTYwYmQ4NGMzMGM1ODQzOWIwNmFlZjc5YmY1M2ZmYWE5MGFiMzcyN2U1OWYxNjQyNzFhNjljNWJmMzZmMGQ4Ci0zZjljMDA5OTkzM2I2YmRmYzJmNjEzZDRmMzU2NWRmYmQwYzg1ZTg3MjM0OTFlYWQxMzY5N2Y4OTQ1ZjYzYTZhCi02MTI5OTA2MTNiNTRiYjdhMTljMWQzYTEzYzE0ZjE5Njk0ZTNiMTI5MzI5M2E1MWM2NGViZTQzNjczOGViNjFlCi0yY2NlZjA5Y2E3N2VlYjM1YzdiZjEwZGIyYTliMWVhYmJlNGZiODhjY2VmZWFlNjM1OWJmNWUxMzZlZTk3NGVhCi1hMWE1YzcxNTJkNTRkZThkZmFiODk0MjI5NDNhZDUwZTU4ODRmMzMwYWQ0MDc4NzYzZWEwNzFjNjI2NWU1NTVkCi1hNjEwZDI0NjEzMzQzNWRiMTFjMzdlNzg2MzAyZTNlODg4OWVjZTFkOWVjMzY3MGQ4MmJhYmZlZDdiZTJmYjdlCi1mZGI3OGUxYjZlMWM2ODJiOTMwZjQ4YmYwYTI4MzAxYjQ2M2E1Y2E3N2MzNjhmN2Q1NzE4N2YwODI4Njc1YTUyCi0zODJkNDFkZTZjZDlmYjUyMmNmNTJkODc5Mjc5NmZjY2FjNDhkOTUyOGQ2YmE2NWNjYTc3NWVlYTBkOWUyNzJjCi0wODRmODAxN2JiNGZmNzc5YjYxNWE0NjUxOGIyNTZiMmM0M2IyN2UyOGI5ODhiZjZiNjBkNzgzZDU2OTA1YTVkCi03Nzk0OTA0YzBjYjk1ZTJhYTgzNTEyZjQ3ZDJjMzkzYjc3OGI3NjExMDUzZDMxYmJjNDY3MGM2ZmZlNDVmZjI1Ci0yYjcwNjRlNDc0MGU4ODk1MTY5NjA3ZDU3Yzg5OTU2YjUyNmE2NjRiMjhhMmE5ZjdjNDJkNmE0MGM0YTk1YWE2Ci02YmU5ODk2N2Y1MmE4NTVkYjAyYzQ5OGYxNDFmZDZhZmZmYzBhNjliMTRiYmQwMDlhMGMwZjAyM2Q0ZDY3MDZjCi1jYzA1NDAxYWE5NmQ1NTBiNmNlMDE5MDI4MWJhNGNlYmYxNmFjZmE0ZmQ5NDczMGNkOTc3ZDZjMTIwYzEyNGJhCi1lZjg0ODllMjJhMTNjMzA1NTIxOTZlOTkwNDYyMDFjY2ZmMTFjYjNhZmY5MmE2M2U0N2ExMGEzYTY0MzNiZmMwCi1lNzcwNDc0NTNiNzE1MjdmMjA5YzkzOWQ4NTE2MTgyY2E1ZjA5NjZjY2JmOTcxZmVkZTI1ZTNmZWZkOTJjZjhiCi1mZDExYWM1OWRmZjM2YzI1YWFhOGM3NzFhODNkOWNiYjdkY2NiMzdmNGY3NTcyZjExZjcwMmJjMjdlYTk1MTBiCi1hMmQ0YmFhOTRmNTk1M2JlYjkyN2FhZjI0MjY0MjFmMDA5M2M2MDNiZDYzODI3ZTI4ZjE3ZDU3Y2VmNDc2NTc3Ci1jMWYxM2ViOGJlZWFkYTQyYTFlYjIyMWNhYzNkY2NkNWQ4NGE2Zjc0ZmEyYjI4OWMzY2FiNmUyZmM5NGRkOTJiCi1kOTZhMDE1YjIxOGNhN2ZhY2JlMThmOWM3YTU4MDYxMDkwNTg0N2E2NDllNDQ3Nzc3M2I4NzY4NmY3ZjI4YjMzCi0yNDE0OGY0MjEzY2NhYWM0ODNiNDNiZTJhOTc2M2ZkYmJkYmJkNTBhMGY5ZDU5ZmMzMWY1YjdiMmFjMGY5MTVhCi04OWFiZDY0ZDg0ZmFhNjJhNGMzMTY3ZmJiZjY1MWE2MjM2ZWFkNmFkOTMxYzExNDM1OTIxY2JkYzRlZDY2ZjY3Ci1mZTgzYmMwNTlmYTBjNjI1MDAxYWQ1YjNiZjYzODI5MzY0NmQzMzA3NmYzYWZhZmE4YjhmZDczMDdkYTVjNTNiCi01ODQ1OTk5YzE2MjRlOWVkMzBjZDQ4NDgzNDAzZjlhZmRhYmJjYmU4MGZhNTAyNWJlYTJjYmMwODFlMmIzMmM3Ci00MjY4NTQyMWNlM2Q1NzRhNDE0YjM0MDA3NWNiMDJlODBkNzQyN2Q0Y2M1MDNlZTAyZjViMzNlNTA5ZDc2ZTBiCi0yMWI1ZDVhMjUyNzU3YzRiNzg5M2RkOTg3MGY5MzcxZWNhNTdhZTc4YWM2ODhlZTI4YzMxZDU5N2JjMDE4NDk2Ci0zZmE1NGE4ZTE2MGE3N2RjOGIwNjI3ZDczMTk4ODVmYjJhZTBlMmUyYzlmYmNkZTRiNWE3YWNiMDRiZjFlNjExCi1iNzNiMGRlZTNhYzhmNDRjNGNhMTVkYmVjYTIwYzM1YTdhODgwNWYzYzIyZTZmYmE4ZTliMjI3MjJkZDI1YWUzCi1iYTJkZWMyYTBjOWExMzUwOWY0YzlmZDNkYmEwM2VmNmU0OWE2MzJiZjdkZTVlYzQ1YjY0YTFmNGUzYTM2OTc2Ci0xYjdhOWM3Yjk1YmQyOWIwOWI5MzBiMGQ4MmYyYzM5ZjliYzNjMjRkOTljNThhNjY0ZDRhZGVkZjdiNzRlMTNlCi02ZDg1ZTAzZTYxNWE2MGEyYWVlOWY3OTBjNmQwYTJlNmU4MmU2ODQwZTUxYjM4YzQ1NzlmYjk1MzM3NDIzZmJhCi00MzdkOTdhYjQyYmFmYjEwOTdiMmUyOTUyZTg2Yzg4ZTk0YmE3MDIwZTgzMTYzYjVkODEwZGU4ZjU3NjI1ODE5Ci1kODZkN2FlODM0ZDcxMzVlMzBmMmUyMWRkMDYxZmYxNWYyMmRlNmM5MjQzZDJjYWFhNWFiZjY3YWJlZTNhNmY1Ci0zMDYyNzMwMzdhZGNkMTBlOGYwMDgxOGVlODhhZDJlYTk4ZDZiN2YxZWU3ZTNkMWRiNDlhNTdmYTM1MDY2NGQ2Ci0wMjEwNzhlZTFlYmZiZGJlNWFlZTllZmFiMmFjZDk4MDljY2ZiMTgwZjgwMTdhODRiYTZiZmMxYmE1OTQwZWNhCi0zMDc2Yzg2M2Y4ZDlkZjNlNGFmYjMyMzYxYWNhYjEzYmFjZDNlNDY1ZDA5NGI2NGJlY2U5ODdiZTY2ZmE1MDFkCi01ZGViYTg5MzM2OGVhM2ZkZDNiM2E0MjAxZDNiZDY4YjM0NjRlYWQxMGM2ZjBkZGY1MTNhNjMwZTAxMzNmZWM4Ci0wODYzMGU0YjNjOGIwYWFkMWJiZWVkNTA4ZTdlMDNkNDFiM2QwNjBhOTJiMTk1ODQwNzg0M2U0Y2FiZDc4ZDc5Ci1mZjcyZmMwZTkyZjQ5MDNjZmQwNTg1NmY0NTdkZDE1YjFhYWI5OWMxZDI5ODA0ZDJmMzEzNGM5ODE3ZjQ1ZmQyCi1lZmViYjkyNTQ1ZjA1NmY0Y2E3NmVhNzRhZDQ2NGNkMDQxYjdjYmI4ODkyZjJkYmE4MzMxMThiODNlMjBjMDM5Ci05OTkzOWZmYzZjYzUwNTAzYmI4NzE1NjU3OTdlYzUzN2UyNmViNjIyZmQzMDMwMzI3Mzc0OGFmMmFmZDk3ZTA3Ci1hOWMyYTk2ZjRlZjg3NTRkYzNlYThmMzM0OGNiMzBkNzZiZGFhODRkMmU5MzNjOTRjOTlkMTNlNzRmMTk5NzBmCi01ZDJiZDE5NzEyOTI2ZTIzMGRkMDJhZWFlNjQ2MWVkZDgzYWM5MzVlYzJmNDIwNjQ5ZjgyZDQxNjBhMDcyNzAwCi0xMDE0MTYwMmMzYTY1NzI3NDBkOGU5N2ZkMDhlNTZiOTg3MDYyYmI1NzIzN2JiYjMwNTZhMzZlOTdlMzk5YTdhCi1jZjk2NTM3NDNhOTk4NGVmMzYyNTRkNjA3NzJhMGVlZGNhODAwOTIzNDYxYTNlNDQ0M2E1ZWY0NjlhZWZjZWVjCi1hYTE4MzFlNTZiMGQ4ZWE2Y2NiNzZiYjlkYmI2YWI3NTg0ZWUyNjhiZGQwZjVmMGQ1N2VkZGJhOWI5N2Q3NGEyCi05MTBmMTc4ZjM4OGE1MGZhMzJhYWQ3Yjg3YjMyMzVlZmNhYmQ0YjUwMDkxOTBkMTJlOGM3NzBmNmU3MGRiZTEwCi1lNzQ3ZTE5ODRhMWM0MWQ3MDFlNjIyMGIwMDFmZTI1YjlhNjc3Yzk5NmY4ZmQ5MWJkNDBmYTdlMDdmNTdlOGJkCi01ZDIzODE0NDJiMzM3OTI0ZTU2ZGU0ZDE4Y2RjMzUyMzE0Y2FlYmYwNjVmNjEwYjAwYjUwMzAyYmFlM2FkNjEyCi1kYWQ5MDU5YTNkN2YzYmQ2MzgyN2UyOGYxN2Q1N2NlZjRhOGNiOGFmMWYwODBhOTkzYzNjNzQ4NzFlNGI3YmRiCi0yNjAyZDA3NTg3YWVkMDJhYTc4M2Q4MDIzNGI2ZWVjYzc3ZDE2Mzg0N2U2M2QzYzlhYTQxMmQxMGFjZWE3YTVjCi01ZWNlNWI4OTNiYjMwMzFmYWNlZTcyNzAxYWNkMjI1ZDZiNmE3NTJjYjJmODRkZTNjZWFiMmI5N2I2MDZhMGJmCi1jNjg3NDg2OWE4NmUzYTU1YTRlMWQ3YWJkOTQ3MTlmNjA0ZWE2OGIxMTA4ZWJiNWJlYmMzZWY0NjViZGQyY2RiCi04NjRlY2ZlMGQ2OTU5ZDUxMTRlYWFmMTYxMmM5NzBjYWEyYzk0NzI5MTc4ZTZhZjEzMGExZGYyMTFhMzc5NWE5Ci1iNWZiOTM0ZTQ3ZjZjNDgxNTVhMTlhY2NlNzg4MDM2YjQ4NjdmOTBkNDBjMWU0ZmY3NDYwMzk5ZjFmMDhmOThhCi0wYWEzZTBkOGUzNTQxOTVhMjU2Mzc1OWRmZTAxODNjOGQ2N2I0NDk1MTZlZDhmNWNmMzI4OGY3Mjk4ZDYyMDkyCi05MjJmMDcwMjczNTJiYzdjOTYxMmNmY2E0NmYxY2YyZWQxNDE3YWI4NjNjMjYxNWYyZDI2ZWUxM2Q3YTA0YTE4Ci04MzM2ZWM5OTYxZTc2YWYyZjUwNmUzZGIzZDY3YTJhNGZiMmRiYmIwY2EzNGJlNmRiOTc4OWExY2RhNjA3ZDliCi0zNWYwZWFjNDdmNDg4YmJlNzRmOGYwNGI0OWRjNDkyZWM4ZjA5NmU2NzEwYWQ1OWQyNDhhMGM5ODQ5NzU0MWQ4Ci01ZjkxMzRkNTIxNWIwYTA1ZmMyOWRiMWFhNzFlNDMyYTJjMGIwMDEwNmJmMzEyNGRmMGI3MmMxNDQzNzVhMjgwCi05Y2M1ZWQ4MzM1YjNlOTcwZWFhZDkxNzhmNDMwMTFiNTVkN2YzZTExZDg5YmUxMDU4MzYxODkzMDE2MjU0NDQwCi0zNTNiODgxNjJhNGU3OTEzNzIxMDkyZTA1NTczNDk3ZWQ2OTNmMzEyMDE3NmRjMDgyNTNkMjM1NjU1OTA0MWQ4Ci03NDFhNmI5YzQxZjhlYjY5NTM2OTYzMzYzMmZmYzM1YTFlMmU0ZWQ2MjU4ZjBhOGVlZjBiZjZiYjAyOGVmZWQ4Ci1hNjc5YmU0YmMxOTdjYzg2ODI1NWY3NDhjYTk1MzMxMmVlZjU1NmQ4ZmRhZTRlOTcwNmMzMTE2ZTc2MTQwNTg3Ci1kYjE4NDkyNzMwYTE0ZTk2YzIxMWZjZDBhZWIwZDQzMjRiMWI0YWJkMDE1MDYzN2M2YzEzNWZjY2ExODIzZmRlCi0yMDQ4MmRiYmFiNTM2Zjg3ZTFkM2YwYWM0YjUxNTRlMzNiZmFhZGUzYWM0YWY4YjhkMjA4MjY1OGQzNWEyNTFlCi1hMGQ3MThmNzAyZWQ4ZDk1NzU1NTMzMWM5NTkzYWJiZjY0YjIxOTRkYWM5ZjA5ODc3M2VmNDMxM2NkOGE0OGU3Ci00ZDYwNTEzZDZlZTFjMTMyZTU5ZWJmNWRjZTIzNTliNjFlZmQxNmZiNGNjZTgxMDE3MmFiYjM5MzllODc0NzkyCi1hODYyNDYyYzcyODk1NDYxZWQ0ZGQyNjVhYmJmNTJjMTFjNTBlNjA3ZmQzYmViZWZmMDM5NzM5OGY2NTYwNjZjCi01ZjY0ZmM0ZTY3Y2Y1Zjk4NGZlODE4Yzk1MDBjYjEwYmVhZGMxYWM1MTNjMGM4ZTYwNzAxMTQ0Yjk0OWNlNjdkCi0wOGNlYzFhZGViNzBmYjAxZjQ4YWJmZWEyMjQxMmY0YjA3YjcxMGE4ZDc3NDIyOGFlMTU2YmZkZDU1NmMwZjQ5Ci1iZGEwNzJjMDkyNmEwODE1MGY3N2VlMzM4YjNiNDMwM2JkMjE4NmRhMjFiODlkZjgwNGNkNTMxYzQ5OWVmOTUzCi05YjFlZDMyNWU1ZWY5NTJhZjA1Y2Y2N2E5ZmU2NGIxYWY5NzVjMTgzNDg4MDkxNjFhZDM4MmRlYmZkZTQ1NDk1Ci01YjMyNDcyZWRmNTA5OGI2ZDFmOGZjODgwN2Y4MWVlNWJlMzY1OWJkMGY0NzU0MmVlODFlMjBjYmFlZjE2OGRkCi00Yjk5MTA2OWNkYTJmODUwYjFmYWE0MGU3NGZhZDc5ZWQ1Zjc0YTBmZGUxYzA2MDk5NmEyMjgwZTljOWQyMWY1Ci1kMjMxNzRkM2VmNGQ5ZWI2ZTMzN2Q0NDNjZmNjYWVhYjhiMDAxNWU2NDI3Zjk0MzljODQ3M2ExMzY0ZmFmNzgyCi1mNThiZDhiZDc3NTg5OTA5Mjg0NGJhNTcwYzQyN2RmZjQ3YjhjYzQ4NTlmZDkwNDJjZTc4YWEyN2ZmZWE4YjVhCi1jNTJiZTBkOTdjZDAxYzcyNTBhNmVkYTQ4OWI1YTE3ZTIzMTY3MjM5ZTBkN2ZkOGYzNDI5NTI5ZWYwMjU0OGU5Ci1iN2JjMWRjZmM3Mjk2MDBmZjk4ZDlmOWIzM2VjZGQxMGZmNzhiYWEzMTNiN2UzNWM1MWRmZThjNmExNzU2OGZkCi1iZmJkNDM0ODYwYThlZjM4MjFiMzM2NzgzZmEzMjgyNzljMDViMDVhYmEzN2Y4ZDI2ZGE0MzM5MWM5Y2ZiZDcxCi02YjI0MDE0ODk5NWEwMDU0NDhhZmJlNDVlZjJjMjg1M2FhM2MxY2YzYmE2NDM0ZWM3OWU4ZGJhY2VmNDQzNTY5Ci04ZTZlZjE3YmRmOTYwZTlhMzdmMGIzNGY0YWEzOTY0MTQ5MmJjY2U5NWFmZTU1ZDE2OGU1MTBmOTM0Mjg4ZGE3Ci1jNjFlYjNlMWE0MmYxOGFiYzYwODk5NWNkOGM5YWZjYzU5MTc1MWJjZDk3NTkzODdkMzkyNDc1MWIxYTJjNzlhCi0wY2YxOGI1M2QzZWQ4MDk2ZTJjNTU5ZGQwMDFlOGJmNjgyNGIzZWVkYWZlZGQ4Yjg5ZmEyM2Y0YWVlZDE0NDM1Ci1hN2QwNWRhN2IwNjA3ZWRmMmFhYjA4MTZlODY2ZjY3OTFlODM0YmZmNWY1YzY2OTllZGI5N2RmMTk5NTQ5ZDU0Ci0zZDAzOTY3MWE0ODFkMDk0MzUyZWM3NmQyZjdlNTExOTg4N2VlM2FkMTExN2Y3NDlhODViM2I2ZjM3ZTNkMjVmCi0yNTM5N2QxZDAxOWRhOWM1YzZmYmJmYmFlYjRmZGYwYTQyM2Y2Mzk0OTY4ZjJlYWJjNTYwZjc2ZTc1YjA3YjU0Ci1hNmQ4NzMyODYwNGZjODZiZTM3YTFlOGU1NzkwZWI4NDVjY2E4OGJiYzJlMDFlYWIyOGE2ZDY2MTUyMjk2NThiCi03NTU0YTg1MDY0YWFjZjY5ODk0OWU0ZjU2ZjJiZDYxYmQ1YWYzMWJkNjAxMmVmMGMxYmI2MjdjYmVlYzcxYjUyCi1lOTlhZjk1ZjY5OTYxN2E4NDYyZTE0ZTE0NDQyNGE2NGU0YzFjZGE4MGExM2NmN2IyMDkyOTA0MWIyZGY2Njg2Ci0xNWMyZjc3YTczZjljZGJjYTMzY2QxMTE4OGE5YTYwOGIyNDBiMjdlN2NmYzUyMzRmZGFkNmRiNWQ2NTY1Nzg3Ci1kOTlmNDU3MDk2NzQ2OTBlZTcwNGRlNGNlNmFjY2MzNzM0M2VhYWMwMmRkOGNhMzY4MjIxZDYwN2M0ZWEyNGRjCi0wNWFhYTUxNjIxMjAzMDFhOGZiNGMzMTY2ZWYwZTgxM2FhYjUzNjIwMGE4ZDU0ZDNlMDY3OWNiYWQ1OWNhZTBkCi1kOWMyNTEwMTYzMzZjNjMyNDNiNDJmNGE0MzlhZjBmMWI0ZDRjYzNlZTljMjRkYWU1ZWM4N2MxMGI0YjA0NmViCi0zODc3ZWFlNjM2MTAxYzMyMzEzMTk5NTc2OTBjZjdjZDU2MmZiNDhlNDRhYmQ0NmJmZDg2NDBkZTUzNDhhMDFkCi04Mzg5ZGJlMjYxNjU3MjljM2VhMTAyM2IzNTRjYzZiNjkyODkyMmNmZmIyZGY5ZWE2MGQ4NTNhNzQwNjdiNDQyCi1hN2Q0OTM4Mjk2ZTJmZmRlZWU4YjMzZGFlMmVjZjViZTI0NTFmYmUzODI5ZjljMWQ0NTgyMGM5ODQ5MTc2YTQzCi0yMjY5NGYwNTkzNjc2NzBkNjhhZDEyMDgwYTg0NjAzODIxZjg2N2NhMzdkYzcyN2MzYzUyNTQxMDNhZjIxY2Q5Ci0wMzRmNjc5YWVhNWQ0YmM4MTM2NjI0NTcyNWZhNDZjZDY3MWFjOTI1MTgxN2U4YWJiZTlmMDZmMTgyYjczOGU5Ci0wNTc2OWIwZDZhNTA0MTcwMzM0ZDA5YmI3YjgwOWMyNDljYTk2Nzg2NThiMzZmZWY5OGEwZjg5MzZjYzkxNjdmCi0zMTgzN2ZiMmU5MjMxOWI4ZTRkZjUxNjg0OTRmZTkwYTEyYTg4YjkzYmFlMDk4ZmFjMmYzYWYyYzA4Nzc1OWNmCi0wZmRjM2Q5MDFlOTIxMjIyYTE5ZTUzYzY1NGQxM2U1MmE2ZjI3MmJkNjVlM2RlZWUxNGUzZTU5YzZkZDliNzk0Ci1kYmQ0NzZjY2Q0ZGViNTBlOTRkMjA3MTIzYTViYjYyNzZlNDAxNzdjMTNhZGVlOTIyN2UyODNiNTFiZGM4ZTUwCi0yYWY4ZDlmM2Q0Y2RmNjFhOWJmZmRiNTA0N2FhMzA1ZjdjNjFmYmI0OTQ0MGI3MDk5M2M5NjIwMDIwZmFkZjE1Ci00YjUyNDhlOGUyYTZmZDU2MzhhNDQ3YTU5M2IzMjAwMzllYjUzYTcwOWU5OTJhNDgxYzBkZTVmMTk2NDBjMTdmCi1jZGNmYWNmYmY3YjUyNTJjMDI3NGM1M2Y2ZGU3OGExMWRiNjQwMDc2ZTAxYTExYmU2YTYzYzNhOGJlMGUzZmIwCi1mMGMxZjQwYjM3OWI4MDM5OTc3MWIwYjIzYWEwZmI5MzRlZTMxODRmMGMxOGQ1Y2I0MDI4NTUxMGE0ZWI5MmYxCi02ZjA4OWNlM2NmMzJiNTJhZGQyM2IwZjZhNDM2NjM3YTE3YTcxZjkwZThjOTFhZGVhZmY3ZWI5NzIyMGExN2I3Ci0zNTRlYTgwYzY3OGUxNThjMWVjZDU4NmYwZTJlNmQ3YWI1YTE3OTUwMGQ0MDRlMTlhNjVkYjZjOTU2OGIwNzk5Ci0zMzBkNjliMjU0ZDI5ZTcwNDE5Njk2NDU1MzgxN2FiNDI4YmUyNTdjNWQ1MWFhYzYxZWU5Y2ZmY2QzZWM0NjE1Ci0xZDZlOTk5MmFkOTFhNzkxZDFjMjQ2NWRmMjQ3NTdkY2JjNjRmMzc4OGIxNTg2OGI5MDVlNTNjY2QwNDYyNWM3Ci1mMDRmYTI2N2Q2OGE2YWViNTk0NDNlYWQ5YmMxNzFmODQ1YjJiMGQ3YWM3ZTc4OGMyMTQxMWExZDRiMzkzNWQ2Ci1lZjIwOTMzMzNjZTA5MmRhNWQwNmZjZjZjMWYxYWZjNjhkYjAwY2MxZDAwOTBmMjEwNDZiNTQ2OTRmNTE2MmNjCi1jYjA3YWM2ZTgxYTNiNjU3ODcxZGIwNjkyY2Q3MGVkY2ZiNjQ1YzMzNTE2N2UwOGViMTVjYWE2Y2JmNjQxOWIwCi0xY2IyOGQzYmViOGM1YWI2YzhmNzc2NjNhMmMyNTgxNzdhMWZlYjlhYmI1NjBlOTAzYjQ1YTFkMTQ2NDRhMDhkCi03NzhhMGRiOTE4YjM2ZWQ1YTJkNmQ0MDlhZGY0MWEyMWIxMzIxMTY3OTA5NGNmMjkwYzQ2NTI2MzNkODYxZTFlCi0yY2YyMGI2OWNjZGNmMTdhYzdkNGJjMTVmZWJlMDM3OTk4Yjk4YzE3NjM2OWQyMjU5OTVlNTc4ZjYyZjZlNTQ4Ci0wNDlkYTkyOTY4NmNhZjhiNThiZjFiYWY5OWJmZDcxOTZjODA4NDQxOWQzODEwNzhhZDBiYzZiZmZiZTE2M2RlCi0xNWE0ZDBlNmZiNTMyMDhhZmYwNmYwODk2Nzg4MmIxN2MwNjk2ZjA2MDIxOGFlMDM3NjgyMDM2Y2IzOTM2NWI3Ci0zM2Q4YzJiMGYyNDE0ZjNjOTE5NDczYTZhYmM4ZDQxOWY3MGI1NDFhNjIwODI2MDI5OTBjM2MzNWE1NTIxN2Q1Ci05NmZlYTgyMDQ4MTgxOTUwNzc5YTNmYzVmNjdiZGFkOGRmODRlNTQzM2ZhNjdiY2NkMDVlYzg4NmQ4NTdiNzg5Ci0xOGZmYmYwODNmYTBiOWY5OGNmNWNmYzlhZTI5ZDYwN2QyZWQxMWZhMDIxMzFmZDdjMjU4NDMxYjIwZjdiMTEzCi1jMzE2YjcxNjM2NDRmZGVmMDI5ZDMzMzY2MjAwZTljNGI1NzI3OTQwNDkwYTgxYWExMzlkZGRmOTQ5M2Y2YjMyCi0wZWU4NDk1MGE2YTU0OTQ2MDAzMmQwYmE3ZmIzYjJkZWQyZTQwMjhiZDNlZjQ1NjAwNWJmYzE0NTZjNjgxZjI1Ci04MmRhZDZkYTE1MTI3YTFlZjE0NTUwZDk1NTdiODZjMmJjMzc0NDBkNTM4ZWU1MTQ2ZjMyMGM5ZGIwN2FlZDY4Ci03MGY2ZmE3NDhhNWI4N2ZkZTBlM2VmNGNmMTU2N2U3NDNlZWEyNjA3NmJhNjY4YjQ2ZjNmN2FkOTlmNGRmMzY3Ci1mZDQwZDg3Y2NhMzUyNjdhMDlhM2EzM2Y4MjEyNjU1Yjc0NzMyM2U5ZDVmMTg0Y2RlNzY2OTA2ZjZmODVlZjJiCi0zYWQwZGMwZWRjZDE1MGU1ODlkYWU5YzBlMTlkNDY0YWQ2MThjMzJlMTRhNWRiY2FhNmVjYmNkOTkwY2M0OWFkCi1jNmRlMTkxMjlkZWJkMmRlOTliNTA2YWRmNGRiZGVhNGZmMTM2NGUzMDA0NDdjOWMwZGVkYTJjZGYxZDM2NDhiCi0xYTgzYmQ0YmU0NmUxNzk3ZmI1YjYyMTYwNzdhNTRmMTJjN2FjZTljMjgzMjAwMjZhMTk0OTJlNTgxOTNkMDgyCi1jMGI1NDczYTVhNjAzY2UyMmVhMzc3NTExYjcyNWFkOWMyM2IxYTFiOTA2YjQ2NWZhMDJkMGZiNjIwZTIzMDc0Ci02NmM5ZDA3NzczMDkxNjg1MGNkMmFiY2MyNDEyYTM2NGY0YTBlZmRlM2ZiNzQxZGVhOTFmYmJhMTM4ZTc0ZGNiCi04MDk2MjcyODJiZTMxN2Q4ZjFkYmIyMjIyMGM5Njk2YmYzOWEyN2ZjMzhhZmY5MGVhZjQ1ODE1MWEwMGE4YTg4Ci05ZDRmNWQ5MzNiMWVlZTYzMDU0YzY1Nzk4YWQzMjA3OWNlNTczZDUzYzYyMGI2YTBmODFmZDkzMWI1YTI0NzA3Ci1lYmIzMGNmMDFiMGM2M2I1NWVlOGMwOGI4MDVhOWE0NWFlYThhYWNmNDk5ODJjZTZkM2U4NzI2YzZhMTIyNDM3Ci0xYjliMTE2YTU2ZGU2MDU0ODI0NDlkYWJiYjgzZDM1M2ViZGYzNTVmY2I4Y2RlNTY1OGM2OTliOGE1NTcxOGE4Ci02ZTA1MWI0MjIyMWRkYTQ4MjU3ZTlmNTZkMDlmMzFhNzc2MzA5MzBhYmIwZmNlMGQ0OWVjOWNiMjdjNmNlNDgwCi00YzNiMzZkNDVlYzE5NWU3Zjc4ZGM5MzAzNzBlZDY2Y2Q0YjY3NjMwODVlYzRjNjI2NjkzZTY5YjM5ZTk5M2IxCi03MGIyMjg5ZjI5ZGNmOTRkNWQyNzYzYTgyMTFhOTJjNDA0NDIzNzFhYTJmNDI5N2M5OTU4YzgzMzQyMWVlNjkzCi1hNzRiMjU2ZTQyNTk3OWFmZTg2YjI4NmJiZGEwOTgzZTE0MTk0MjUwZDlmZWNkMDNhOGJhMWZlNjE1ZTkzYWUxCi1kNjBkNDNmNjg1OGVhOWNkNDdkZGY4OGExYmZiNWU5MGI2MGEyOGNkYjI2OWQ5ZTFlNDNiMGNmNDcwYTk1YjQ4Ci1hYTUyOTllNzE1OWU3Y2NiMTgyMDA5MTRiOTNjM2IwZGY3OWYxODE3ODlmZGZkNjY5MzYxM2QwZDQyNzc4ODgzCi04ODg0NzkyN2Y1OWQ0MGYwY2I1MzM0ZjYyZWFmZTRmMzgwMDc2Y2ZiNzcyMDE3NGVjZWFiMWViNTA1MGVhMTJjCi1lNDI5M2RiMTE1YzRmOWJkNGQyMTkxMGE2OWQ1NjZhNzA2ZjVjMGUxYmNiMzQ0MjAzNTAzODU1ZTY2NDNiMTI1Ci0xN2I2ZGIwM2M0MWYxM2EzNDdhZDM5ZTQ3YTQ2ZDYyNmY4YTMxYTE2M2JkYTZkMjMyNjQ2NTdiNDEyYmRlYzk5Ci1jODdhMTAzZDI2Ci0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1jbGVhcnRvbWFyawotJSVFbmRSZXNvdXJjZQotL0Y2MzdfMCAvV1dXVVRVK05pbWJ1c1JvbU5vOUwtUmVndUl0YWwgMSAxCi1bIC8ubm90ZGVmL2RvdGFjY2VudC9maS9mbC9mcmFjdGlvbi9odW5nYXJ1bWxhdXQvTHNsYXNoL2xzbGFzaAotICAvb2dvbmVrL3JpbmcvLm5vdGRlZi9icmV2ZS9taW51cy8ubm90ZGVmL1pjYXJvbi96Y2Fyb24KLSAgL2Nhcm9uL2RvdGxlc3NpL2RvdGxlc3NqL2ZmL2ZmaS9mZmwvbm90ZXF1YWwvaW5maW5pdHkKLSAgL2xlc3NlcXVhbC9ncmVhdGVyZXF1YWwvcGFydGlhbGRpZmYvc3VtbWF0aW9uL3Byb2R1Y3QvcGkvZ3JhdmUvcXVvdGVzaW5nbGUKLSAgL3NwYWNlL2V4Y2xhbS9xdW90ZWRibC9udW1iZXJzaWduL2RvbGxhci9wZXJjZW50L2FtcGVyc2FuZC9xdW90ZXJpZ2h0Ci0gIC9wYXJlbmxlZnQvcGFyZW5yaWdodC9hc3Rlcmlzay9wbHVzL2NvbW1hL2h5cGhlbi9wZXJpb2Qvc2xhc2gKLSAgL3plcm8vb25lL3R3by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuCi0gIC9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvcXVlc3Rpb24KLSAgL2F0L0EvQi9DL0QvRS9GL0cKLSAgL0gvSS9KL0svTC9NL04vTwotICAvUC9RL1IvUy9UL1UvVi9XCi0gIC9YL1kvWi9icmFja2V0bGVmdC9iYWNrc2xhc2gvYnJhY2tldHJpZ2h0L2FzY2lpY2lyY3VtL3VuZGVyc2NvcmUKLSAgL3F1b3RlbGVmdC9hL2IvYy9kL2UvZi9nCi0gIC9oL2kvai9rL2wvbS9uL28KLSAgL3AvcS9yL3MvdC91L3YvdwotICAveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJpZ2h0L2FzY2lpdGlsZGUvLm5vdGRlZgotICAvRXVyby9pbnRlZ3JhbC9xdW90ZXNpbmdsYmFzZS9mbG9yaW4vcXVvdGVkYmxiYXNlL2VsbGlwc2lzL2RhZ2dlci9kYWdnZXJkYmwKLSAgL2NpcmN1bWZsZXgvcGVydGhvdXNhbmQvU2Nhcm9uL2d1aWxzaW5nbGxlZnQvT0UvT21lZ2EvcmFkaWNhbC9hcHByb3hlcXVhbAotICAvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvYnVsbGV0L2VuZGFzaC9lbWRhc2gKLSAgL3RpbGRlL3RyYWRlbWFyay9zY2Fyb24vZ3VpbHNpbmdscmlnaHQvb2UvRGVsdGEvbG96ZW5nZS9ZZGllcmVzaXMKLSAgLy5ub3RkZWYvZXhjbGFtZG93bi9jZW50L3N0ZXJsaW5nL2N1cnJlbmN5L3llbi9icm9rZW5iYXIvc2VjdGlvbgotICAvZGllcmVzaXMvY29weXJpZ2h0L29yZGZlbWluaW5lL2d1aWxsZW1vdGxlZnQvbG9naWNhbG5vdC9oeXBoZW4vcmVnaXN0ZXJlZC9tYWNyb24KLSAgL2RlZ3JlZS9wbHVzbWludXMvdHdvc3VwZXJpb3IvdGhyZWVzdXBlcmlvci9hY3V0ZS9tdS9wYXJhZ3JhcGgvcGVyaW9kY2VudGVyZWQKLSAgL2NlZGlsbGEvb25lc3VwZXJpb3Ivb3JkbWFzY3VsaW5lL2d1aWxsZW1vdHJpZ2h0L29uZXF1YXJ0ZXIvb25laGFsZi90aHJlZXF1YXJ0ZXJzL3F1ZXN0aW9uZG93bgotICAvQWdyYXZlL0FhY3V0ZS9BY2lyY3VtZmxleC9BdGlsZGUvQWRpZXJlc2lzL0FyaW5nL0FFL0NjZWRpbGxhCi0gIC9FZ3JhdmUvRWFjdXRlL0VjaXJjdW1mbGV4L0VkaWVyZXNpcy9JZ3JhdmUvSWFjdXRlL0ljaXJjdW1mbGV4L0lkaWVyZXNpcwotICAvRXRoL050aWxkZS9PZ3JhdmUvT2FjdXRlL09jaXJjdW1mbGV4L090aWxkZS9PZGllcmVzaXMvbXVsdGlwbHkKLSAgL09zbGFzaC9VZ3JhdmUvVWFjdXRlL1VjaXJjdW1mbGV4L1VkaWVyZXNpcy9ZYWN1dGUvVGhvcm4vZ2VybWFuZGJscwotICAvYWdyYXZlL2FhY3V0ZS9hY2lyY3VtZmxleC9hdGlsZGUvYWRpZXJlc2lzL2FyaW5nL2FlL2NjZWRpbGxhCi0gIC9lZ3JhdmUvZWFjdXRlL2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9pZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNpcwotICAvZXRoL250aWxkZS9vZ3JhdmUvb2FjdXRlL29jaXJjdW1mbGV4L290aWxkZS9vZGllcmVzaXMvZGl2aWRlCi0gIC9vc2xhc2gvdWdyYXZlL3VhY3V0ZS91Y2lyY3VtZmxleC91ZGllcmVzaXMveWFjdXRlL3Rob3JuL3lkaWVyZXNpc10KLXBkZk1ha2VGb250Ci02MTIgNzkyIGZhbHNlIHBkZlNldHVwCi0lJUVuZFNldHVwCi0lJVBhZ2U6IDEgMQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzU2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjMuMDE5IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNy40MzYgNzAxLjkxNiBUZAotL0YxMjJfMCAyNC43OTAyIFRmCi0oYnppcDIpIDYzLjM2MzggVGoKLS0yNzggVEptCi0oYW5kKSA0NC4wNzcgVGoKLS0yNzggVEptCi0obGliYnppcDIsKSA5OS4xODU2IFRqCi0tMjc4IFRKbQotKHZlcikgMzcuMjEwMSBUagotMTUgVEptCi0oc2lvbikgNTAuOTY4NyBUagotLTI3OCBUSm0KLSgxLjAuNSkgNTUuMTMzNCBUagotWzEgMCAwIDEgNzIgNjk2Ljc4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE1LjQ5MzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY4MS4yOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAuNDkyOSA2NjEuNjMxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLShBKSAxNC45MTU0IFRqCi0tMjc4IFRKbQotKHByKSAyMC42NTg1IFRqCi0yMCBUSm0KLShvZ3JhbSkgNjMuMTMyNCBUagotLTI3OCBUSm0KLShhbmQpIDM2LjczMDggVGoKLS0yNzggVEptCi0obGlicmFyKSA1MS42NjY5IFRqCi0tMTAgVEptCi0oeSkgMTEuNDg2MSBUagotLTI3OCBUSm0KLShmKSA2Ljg3OTI4IFRqCi0yMCBUSm0KLShvcikgMjAuNjU4NSBUagotLTI3OCBUSm0KLShkYXRhKSA0Mi40NzM5IFRqCi0tMjc4IFRKbQotKGNvbXByZXNzaW9uKSAxMjguNTc5IFRqCi1bMSAwIDAgMSA3MiA2NTcuMDM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MTMuMDM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuNjc2IDUwMy4yODUgVGQKLS9GMTIyXzAgMTEuOTU1MiBUZgotKEopIDYuNjQ3MDkgVGoKLTIwIFRKbQotKHVsaWFuKSAyNy45MDM0IFRqCi0tMjc4IFRKbQotKFNlKSAxNC42MjEyIFRqCi0xNSBUSm0KLSh3YXIpIDIwLjU5ODggVGoKLTIwIFRKbQotKGQsKSAxMC42MjgyIFRqCi0tMjc4IFRKbQotKGh0dHA6Ly93d3cpIDYxLjEwMyBUagotNDAgVEptCi0oLmJ6aXAub3IpIDQyLjUxMjcgVGoKLTE1IFRKbQotKGcpIDcuMzA0NjMgVGoKLVsxIDAgMCAxIDcyIDUwMC42MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC00MzUuODI2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjMuMDE5IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDIgMgotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtMTMuOTQ3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzA5LjUzNCBUZAotL0YxMjJfMCAxNC4zNDYyIFRmCi0oYnppcDIpIDM2LjY2ODkgVGoKLS00ODkgVEptCi0oYW5kKSAyNS41MDc1IFRqCi0tNDg4IFRKbQotKGxpYmJ6aXAyLCkgNTcuMzk5MSBUagotLTU0MiBUSm0KLSh2ZXIpIDIxLjUzMzYgVGoKLTE1IFRKbQotKHNpb24pIDI5LjQ5NTggVGoKLS00ODggVEptCi0oMS4wLjU6KSAzNi42ODMyIFRqCi0tNzY2IFRKbQotKEEpIDEwLjM1OCBUagotLTQ4OCBUSm0KLShwcikgMTQuMzQ2MiBUagotMjAgVEptCi0ob2dyYW0pIDQzLjg0MiBUagotLTQ4OSBUSm0KLShhbmQpIDI1LjUwNzUgVGoKLS00ODkgVEptCi0obGlicmFyKSAzNS44Nzk4IFRqCi0tMTAgVEptCi0oeSkgNy45NzY0OSBUagotLTQ4OCBUSm0KLShmKSA0Ljc3NzI4IFRqCi0yMCBUSm0KLShvcikgMTQuMzQ2MiBUagotLTQ4OSBUSm0KLShkYXRhKSAyOS40OTU4IFRqCi03MiA2OTIuMzE5IFRkCi0oY29tcHJlc3Npb24pIDg5LjI5MDcgVGoKLVsxIDAgMCAxIDcyIDY4OS4zNDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY4OS4zNDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY4MC4zNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLShKdWxpYW4pIDIzLjgwMDcgVGoKLS0yNTAgVEptCi0oU2UpIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFyZCkgMTIuNzIyMiBUagotWzEgMCAwIDEgNzIgNjc4LjIwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjc4LjIwN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjY4LjQwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShDb3ApIDE2LjYwNzcgVGoKLTEwIFRKbQotKHlyaWdodCkgMjMuODAwNyBUagotWzEgMCAwIDEgMTE0Ljc5OSA2NjguNDA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExNC43OTkgLTY2OC40MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNC43OTkgNjY4LjQwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjUxKSA3LjU3MTU4IFRqCi1bMSAwIDAgMSAxMjIuMzcxIDY2OC40MDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIyLjM3MSAtNjY4LjQwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTI0Ljg2MSA2NjguNDA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE5OTYtMjAwNykgNDMuMTY3OSBUagotLTI1MCBUSm0KLShKdWxpYW4pIDIzLjgwMDcgVGoKLS0yNTAgVEptCi0oU2UpIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFyZCkgMTIuNzIyMiBUagotWzEgMCAwIDEgNzIgNjY2LjI1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTcuOTcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjU4LjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjUwLjg3NSBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShUaGlzKSAxNC4xNzA4IFRqCi0tMjUwIFRKbQotKHByb2dyYW0sKSAyOC45OTUyIFRqCi1bMSAwIDAgMSAxMTkuMTUxIDY1MC44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5LjE1MSAtNjUwLjg3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5LjE1MSA2NTAuODc1IFRkCi0vRjEzNF8wIDcuOTcwMSBUZgotKGJ6aXAyKSAyMy45MTAzIFRqCi1bMSAwIDAgMSAxNDMuMDYxIDY1MC44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQzLjA2MSAtNjUwLjg3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQzLjA2MSA2NTAuODc1IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKCwpIDEuOTkyNTMgVGoKLS0yNTAgVEptCi0odGhlKSA5LjczOTQ2IFRqCi0tMjUwIFRKbQotKGFzc29jaWF0ZWQpIDMyLjc1NzEgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjEuMjQ4MyBUagotWzEgMCAwIDEgMjE2Ljc2OCA2NTAuODc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi43NjggLTY1MC44NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi43NjggNjUwLjg3NSBUZAotL0YxMzRfMCA3Ljk3MDEgVGYKLShsaWJiemlwMikgMzguMjU2NSBUagotWzEgMCAwIDEgMjU1LjAyNCA2NTAuODc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1NS4wMjQgLTY1MC44NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1NS4wMjQgNjUwLjg3NSBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLSgsKSAxLjk5MjUzIFRqCi0tMjUwIFRKbQotKGFuZCkgMTEuNTA4OCBUagotLTI1MCBUSm0KLShhbGwpIDcuOTcwMSBUagotLTI1MCBUSm0KLShkb2N1bWVudGF0aW9uLCkgNDkuMzY2OCBUagotLTI1MCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNTAgVEptCi0oY29wKSAxMS41MDg4IFRqCi0xMCBUSm0KLSh5cmlnaHQpIDE5LjA0MDYgVGoKLS0yNTAgVEptCi0oXDI1MSkgNi4wNTcyOCBUagotLTI1MCBUSm0KLSgxOTk2LTIwMDcpIDM0LjUzNDQgVGoKLS0yNTAgVEptCi0oSnVsaWFuKSAxOS4wNDA2IFRqCi0tMjUwIFRKbQotKFNlKSA3Ljk3MDEgVGoKLTI1IFRKbQotKHcpIDUuNzU0NDEgVGoKLTEwIFRKbQotKGFyZC4pIDEyLjE3MDMgVGoKLS0zMTAgVEptCi0oQWxsKSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKHJpZ2h0cykgMTguMTU1OSBUagotLTI1MCBUSm0KLShyZXNlcnYpIDE5LjQ3MSBUagotMTUgVEptCi0oZWQuKSA5LjUxNjMgVGoKLVsxIDAgMCAxIDcyIDY0OS4xNDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC03Ljk3MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY0MS4xNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzMy4zNCBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShSZWRpc3RyaWIpIDI5LjIyNjQgVGoKLTIwIFRKbQotKHV0aW9uKSAxNi4zODY1IFRqCi0tMjUwIFRKbQotKGFuZCkgMTEuNTA4OCBUagotLTI1MCBUSm0KLSh1c2UpIDEwLjYyNDEgVGoKLS0yNTAgVEptCi0oaW4pIDYuMjAwNzQgVGoKLS0yNTAgVEptCi0oc291cmNlKSAyMC44MDIgVGoKLS0yNTAgVEptCi0oYW5kKSAxMS41MDg4IFRqCi0tMjUwIFRKbQotKGJpbmFyeSkgMjAuMzYzNiBUagotLTI1MCBUSm0KLShmb3JtcywpIDIwLjU4NjggVGoKLS0yNTAgVEptCi0od2l0aCkgMTQuMTcwOCBUagotLTI1MCBUSm0KLShvcikgNi42MzkwOSBUagotLTI1MCBUSm0KLSh3aXRob3V0KSAyNC4zNTY2IFRqCi0tMjUwIFRKbQotKG1vZGlcMDAyY2F0aW9uLCkgNDIuMjg5NCBUagotLTI1MCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNTAgVEptCi0ocGVybWl0dGVkKSAzMC41NDk0IFRqCi0tMjUwIFRKbQotKHBybykgMTAuNjI0MSBUagotMTUgVEptCi0odmlkZWQpIDE3LjcwOTYgVGoKLS0yNTAgVEptCi0odGhhdCkgMTEuOTU1MSBUagotLTI1MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNTAgVEptCi0oZm9sbG8pIDE1LjA1NTUgVGoKLTI1IFRKbQotKHdpbmcpIDE1Ljk0MDIgVGoKLS0yNTAgVEptCi0oY29uZGl0aW9ucykgMzMuMjExNCBUagotLTI1MCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNTAgVEptCi0obWV0OikgMTQuMTcwOCBUagotWzEgMCAwIDEgNzIgNjMxLjYxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIzLjc3ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA1LjU3OTEgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03Ny41NzkxIC02MDcuODM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03Ny41NzkxIDYwNy44MzYgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oXDIyNSkgMi43ODk1NCBUagotWzEgMCAwIDEgODAuMzY4NiA2MDcuODM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjU5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgzLjk1NTIgLTYwNy44MzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTgzLjk1NTIgNjA3LjgzNiBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShSZWRpc3RyaWIpIDI5LjIyNjQgVGoKLTIwIFRKbQotKHV0aW9ucykgMTkuNDg2OSBUagotLTI1MCBUSm0KLShvZikgNi42MzkwOSBUagotLTI1MCBUSm0KLShzb3VyY2UpIDIwLjgwMiBUagotLTI1MCBUSm0KLShjb2RlKSAxNS4wNDc1IFRqCi0tMjUwIFRKbQotKG11c3QpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0ocmV0YWluKSAxOC4xNDc5IFRqCi0tMjUwIFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI1MCBUSm0KLShhYm8pIDExLjUwODggVGoKLTE1IFRKbQotKHYpIDMuOTg1MDUgVGoKLTE1IFRKbQotKGUpIDMuNTM4NzIgVGoKLS0yNTAgVEptCi0oY29wKSAxMS41MDg4IFRqCi0xMCBUSm0KLSh5cmlnaHQpIDE5LjA0MDYgVGoKLS0yNTAgVEptCi0obm90aWNlLCkgMjEuNDcxNCBUagotLTI1MCBUSm0KLSh0aGlzKSAxMS41MTY4IFRqCi0tMjUwIFRKbQotKGxpc3QpIDkuNzQ3NDMgVGoKLS0yNTAgVEptCi0ob2YpIDYuNjM5MDkgVGoKLS0yNTAgVEptCi0oY29uZGl0aW9ucykgMzMuMjExNCBUagotLTI1MCBUSm0KLShhbmQpIDExLjUwODggVGoKLS0yNTAgVEptCi0odGhlKSA5LjczOTQ2IFRqCi0tMjUwIFRKbQotKGZvbGxvKSAxNS4wNTU1IFRqCi0yNSBUSm0KLSh3aW5nKSAxNS45NDAyIFRqCi0tMjUwIFRKbQotKGRpc2NsYWltZXIpIDMzLjIwMzQgVGoKLTU1IFRKbQotKC4pIDEuOTkyNTMgVGoKLVsxIDAgMCAxIDQ3MC45MDggNjA3LjgzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTguOTA4IC0xNy41MzQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNS41NzkxIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzcuNTc5MSAtNTkwLjMwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzcuNTc5MSA1OTAuMzAyIFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFwyMjUpIDIuNzg5NTQgVGoKLVsxIDAgMCAxIDgwLjM2ODYgNTkwLjMwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS41OTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04My45NTUyIC01OTAuMzAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04My45NTUyIDU5MC4zMDIgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oVGhlKSAxMi4zOTM1IFRqCi0tMjcwIFRKbQotKG9yaWdpbikgMTkuMDQwNiBUagotLTI3MCBUSm0KLShvZikgNi42MzkwOSBUagotLTI3MCBUSm0KLSh0aGlzKSAxMS41MTY4IFRqCi0tMjcwIFRKbQotKHNvZnR3KSAxNy43MDk2IFRqCi0xMCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNzAgVEptCi0obXVzdCkgMTUuNTAxOCBUagotLTI3MCBUSm0KLShub3QpIDEwLjE4NTggVGoKLS0yNzAgVEptCi0oYmUpIDcuNTIzNzcgVGoKLS0yNzAgVEptCi0obWlzcmVwcmVzZW50ZWQ7KSA1MC40NjY3IFRqCi0tMjc5IFRKbQotKHlvdSkgMTEuOTU1MSBUagotLTI3MCBUSm0KLShtdXN0KSAxNS41MDE4IFRqCi0tMjcwIFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI3MCBUSm0KLShjbGFpbSkgMTcuNzA5NiBUagotLTI3MCBUSm0KLSh0aGF0KSAxMS45NTUxIFRqCi0tMjcwIFRKbQotKHlvdSkgMTEuOTU1MSBUagotLTI3MCBUSm0KLSh3cm90ZSkgMTguMTQ3OSBUagotLTI3MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNzAgVEptCi0ob3JpZ2luYWwpIDI0Ljc5NSBUagotLTI3MCBUSm0KLShzb2Z0dykgMTcuNzA5NiBUagotMTAgVEptCi0oYXJlLikgMTEuNzI0IFRqCi0tNzQwIFRKbQotKElmKSA1LjMwODA5IFRqCi0tMjcwIFRKbQotKHlvdSkgMTEuOTU1MSBUagotLTI3MCBUSm0KLSh1c2UpIDEwLjYyNDEgVGoKLS0yNzAgVEptCi0odGhpcykgMTEuNTE2OCBUagotLTI3MCBUSm0KLShzb2Z0dykgMTcuNzA5NiBUagotMTAgVEptCi0oYXJlKSA5LjczMTQ5IFRqCi0tMjcwIFRKbQotKGluKSA2LjIwMDc0IFRqCi0tMjY5IFRKbQotKGEpIDMuNTM4NzIgVGoKLTgzLjk1NTIgNTgwLjczNyBUZAotKHByb2R1Y3QsKSAyNi4zNDEyIFRqCi0tMjUwIFRKbQotKGFuKSA3LjUyMzc3IFRqCi0tMjUwIFRKbQotKGFja25vKSAxOS4wMzI2IFRqCi0yNSBUSm0KLSh3bGVkZ21lbnQpIDM1LjQxOTEgVGoKLS0yNTAgVEptCi0oaW4pIDYuMjAwNzQgVGoKLS0yNTAgVEptCi0odGhlKSA5LjczOTQ2IFRqCi0tMjUwIFRKbQotKHByb2R1Y3QpIDI0LjM0ODcgVGoKLS0yNTAgVEptCi0oZG9jdW1lbnRhdGlvbikgNDcuMzc0MyBUagotLTI1MCBUSm0KLSh3KSA1Ljc1NDQxIFRqCi0xMCBUSm0KLShvdWxkKSAxNC4xNzA4IFRqCi0tMjUwIFRKbQotKGJlKSA3LjUyMzc3IFRqCi0tMjUwIFRKbQotKGFwcHJlY2lhdGVkKSAzNi43MzQyIFRqCi0tMjUwIFRKbQotKGIpIDMuOTg1MDUgVGoKLTIwIFRKbQotKHV0KSA2LjIwMDc0IFRqCi0tMjUwIFRKbQotKGlzKSA1LjMxNjA2IFRqCi0tMjUwIFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI1MCBUSm0KLShyZXF1aXJlZC4pIDI4LjU0ODkgVGoKLVsxIDAgMCAxIDQwMy44MTcgNTgwLjczN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzEuODE3IC0xNy41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNS41NzkxIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzcuNTc5MSAtNTYzLjIwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzcuNTc5MSA1NjMuMjAzIFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFwyMjUpIDIuNzg5NTQgVGoKLVsxIDAgMCAxIDgwLjM2ODYgNTYzLjIwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS41OTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04My45NTUyIC01NjMuMjAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04My45NTUyIDU2My4yMDMgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oQWx0ZXJlZCkgMjMuOTAyMyBUagotLTI1MCBUSm0KLShzb3VyY2UpIDIwLjgwMiBUagotLTI1MCBUSm0KLSh2KSAzLjk4NTA1IFRqCi0xNSBUSm0KLShlcnNpb25zKSAyMi41NzkzIFRqCi0tMjUwIFRKbQotKG11c3QpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oYmUpIDcuNTIzNzcgVGoKLS0yNTAgVEptCi0ocGxhaW5seSkgMjIuMTQwOSBUagotLTI1MCBUSm0KLShtYXJrKSAxNi4zNzg2IFRqCi0xMCBUSm0KLShlZCkgNy41MjM3NyBUagotLTI1MCBUSm0KLShhcykgNi42MzkwOSBUagotLTI1MCBUSm0KLShzdWNoLCkgMTYuNjAxNyBUagotLTI1MCBUSm0KLShhbmQpIDExLjUwODggVGoKLS0yNTAgVEptCi0obXVzdCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShub3QpIDEwLjE4NTggVGoKLS0yNTAgVEptCi0oYmUpIDcuNTIzNzcgVGoKLS0yNTAgVEptCi0obWlzcmVwcmVzZW50ZWQpIDQ4LjI1MSBUagotLTI1MCBUSm0KLShhcykgNi42MzkwOSBUagotLTI1MCBUSm0KLShiZWluZykgMTcuNzA5NiBUagotLTI1MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNTAgVEptCi0ob3JpZ2luYWwpIDI0Ljc5NSBUagotLTI1MCBUSm0KLShzb2Z0dykgMTcuNzA5NiBUagotMTAgVEptCi0oYXJlLikgMTEuNzI0IFRqCi1bMSAwIDAgMSA0NjQuNDA1IDU2My4yMDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkyLjQwNSAtMTcuNTM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDUuNTc5MSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc3LjU3OTEgLTU0NS42NjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc3LjU3OTEgNTQ1LjY2OSBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShcMjI1KSAyLjc4OTU0IFRqCi1bMSAwIDAgMSA4MC4zNjg2IDU0NS42NjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuNTk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODMuOTU1MiAtNTQ1LjY2OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODMuOTU1MiA1NDUuNjY5IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFRoZSkgMTIuMzkzNSBUagotLTI1MCBUSm0KLShuYW1lKSAxNy4yNjMyIFRqCi0tMjUwIFRKbQotKG9mKSA2LjYzOTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgOS43Mzk0NiBUagotLTI1MCBUSm0KLShhdXRob3IpIDIwLjM2MzYgVGoKLS0yNTAgVEptCi0obWF5KSAxMy43MjQ1IFRqCi0tMjUwIFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI1MCBUSm0KLShiZSkgNy41MjM3NyBUagotLTI1MCBUSm0KLSh1c2VkKSAxNC42MDkyIFRqCi0tMjUwIFRKbQotKHRvKSA2LjIwMDc0IFRqCi0tMjUwIFRKbQotKGVuZG9yc2UpIDI0Ljc4NyBUagotLTI1MCBUSm0KLShvcikgNi42MzkwOSBUagotLTI1MCBUSm0KLShwcm9tb3RlKSAyNi41NjQzIFRqCi0tMjUwIFRKbQotKHByb2R1Y3RzKSAyNy40NDkgVGoKLS0yNTAgVEptCi0oZGVyaSkgMTIuMzkzNSBUagotMjUgVEptCi0odikgMy45ODUwNSBUagotMTUgVEptCi0oZWQpIDcuNTIzNzcgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTUuNDkzOSBUagotLTI1MCBUSm0KLSh0aGlzKSAxMS41MTY4IFRqCi0tMjUwIFRKbQotKHNvZnR3KSAxNy43MDk2IFRqCi0xMCBUSm0KLShhcmUpIDkuNzMxNDkgVGoKLS0yNTAgVEptCi0od2l0aG91dCkgMjQuMzU2NiBUagotLTI1MCBUSm0KLShzcGVjaVwwMDJjKSAyNC4zNDg3IFRqCi0tMjUwIFRKbQotKHByaW9yKSAxNS40OTM5IFRqCi0tMjUwIFRKbQotKHdyaXR0ZW4pIDIyLjU3OTMgVGoKLS0yNTAgVEptCi0ocGVybWlzc2lvbi4pIDM2Ljk3MzMgVGoKLVsxIDAgMCAxIDUzMy41NzcgNTQ1LjY2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjEuNTc3IC05LjY5NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUzNS45NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUyOC4xMzUgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oVEhJUykgMTcuNzA5NiBUagotLTQwMSBUSm0KLShTT0ZUVykgMjcuMDEwNyBUagotMTIwIFRKbQotKEFSRSkgMTUuOTQwMiBUagotLTQwMSBUSm0KLShJUykgNy4wODU0MiBUagotLTQwMCBUSm0KLShQUikgOS43NDc0MyBUagotNDAgVEptCi0oTykgNS43NTQ0MSBUagotNTAgVEptCi0oVklERUQpIDI0Ljc4NyBUagotLTQwMSBUSm0KLShCWSkgMTEuMDcwNSBUagotLTQwMSBUSm0KLShUSEUpIDE1LjQ5MzkgVGoKLS00MDEgVEptCi0oQSkgNS43NTQ0MSBUagotNTUgVEptCi0oVVRIT1IpIDI3LjQ0OSBUagotLTQwMSBUSm0KLSgiQVMpIDEzLjQzNzYgVGoKLS00MDEgVEptCi0oSVMiKSAxMC4zMzcyIFRqCi0tNDAxIFRKbQotKEFORCkgMTcuMjYzMiBUagotLTQwMCBUSm0KLShBTlkpIDE3LjI2MzIgVGoKLS00MDEgVEptCi0oRVhQUkVTUykgMzQuMTA0MSBUagotLTQwMSBUSm0KLShPUikgMTEuMDcwNSBUagotLTQwMSBUSm0KLShJTVBMSUVEKSAzMi4zMTg4IFRqCi0tNDAxIFRKbQotKFcpIDcuNTIzNzcgVGoKLTEyMCBUSm0KLShBUlJBTlRJRVMsKSA0Ni43MTI4IFRqCi0tNDAxIFRKbQotKElOQ0xVRElORywpIDQ2LjI1ODUgVGoKLS00MDAgVEptCi0oQikgNS4zMTYwNiBUagotMTAgVEptCi0oVVQpIDEwLjYyNDEgVGoKLTcyIDUxOC41NzEgVGQKLShOTykgMTEuNTA4OCBUagotNDAgVEptCi0oVCkgNC44Njk3MyBUagotLTMwNCBUSm0KLShMSU1JVEVEKSAzMi43NTcxIFRqCi0tMzA0IFRKbQotKFQpIDQuODY5NzMgVGoKLTE4IFRKbQotKE8sKSA3Ljc0Njk0IFRqCi0tMzA1IFRKbQotKFRIRSkgMTUuNDkzOSBUagotLTMwNCBUSm0KLShJTVBMSUVEKSAzMi4zMTg4IFRqCi0tMzA0IFRKbQotKFcpIDcuNTIzNzcgVGoKLTEyMCBUSm0KLShBUlJBTlRJRVMpIDQ0LjcyMDIgVGoKLS0zMDQgVEptCi0oT0YpIDEwLjE4NTggVGoKLS0zMDQgVEptCi0oTUVSQ0hBTlQpIDQ0LjcyMDIgVGoKLTkzIFRKbQotKEFCSUxJVFkpIDMxLjg3MjQgVGoKLS0zMDQgVEptCi0oQU5EKSAxNy4yNjMyIFRqCi0tMzA1IFRKbQotKEZJVE5FU1MpIDMxLjQ0MiBUagotLTMwNCBUSm0KLShGT1IpIDE1LjUwMTggVGoKLS0zMDQgVEptCi0oQSkgNS43NTQ0MSBUagotLTMwNCBUSm0KLShQKSA0LjQzMTM4IFRqCi05MiBUSm0KLShBUikgMTEuMDcwNSBUagotNjAgVEptCi0oVElDVUxBUikgMzQuNTM0NCBUagotLTMwNCBUSm0KLShQVVJQT1NFKSAzNC45ODg3IFRqCi0tMzA0IFRKbQotKEFSRSkgMTUuOTQwMiBUagotLTMwNSBUSm0KLShESSkgOC40MDg0NiBUagotMSBUSm0KLShTLSkgNy4wODU0MiBUagotNzIgNTA5LjAwNiBUZAotKENMQUlNRUQuKSAzOC4yOTYzIFRqCi0tNTc2IFRKbQotKElOKSA4LjQwODQ2IFRqCi0tMjg3IFRKbQotKE5PKSAxMS41MDg4IFRqCi0tMjg4IFRKbQotKEVWRU5UKSAyNi4xMTggVGoKLS0yODggVEptCi0oU0hBTEwpIDI1LjY3OTcgVGoKLS0yODggVEptCi0oVEhFKSAxNS40OTM5IFRqCi0tMjg3IFRKbQotKEEpIDUuNzU0NDEgVGoKLTU1IFRKbQotKFVUSE9SKSAyNy40NDkgVGoKLS0yODggVEptCi0oQkUpIDEwLjE4NTggVGoKLS0yODggVEptCi0oTElBQkxFKSAyOC4zMzM3IFRqCi0tMjg4IFRKbQotKEZPUikgMTUuNTAxOCBUagotLTI4OCBUSm0KLShBTlkpIDE3LjI2MzIgVGoKLS0yODcgVEptCi0oRElSRUNUKSAyOC43OCBUagotNzQgVEptCi0oLCkgMS45OTI1MyBUagotLTI4OCBUSm0KLShJTkRJUkVDVCkgMzcuMTg4NSBUagotNzQgVEptCi0oLCkgMS45OTI1MyBUagotLTI4OCBUSm0KLShJTkNJREVOVCkgMzcuNjI2OCBUagotOTMgVEptCi0oQUwsKSAxMi42MTY3IFRqCi0tMjg4IFRKbQotKFNQRUNJQUwsKSAzNC4zMTkzIFRqCi0tMjg4IFRKbQotKEVYRU1QTEFSKSA0Mi45NTA5IFRqCi02NSBUSm0KLShZKSA1Ljc1NDQxIFRqCi0xMjkgVEptCi0oLCkgMS45OTI1MyBUagotNzIgNDk5LjQ0MiBUZAotKE9SKSAxMS4wNzA1IFRqCi0tMjk5IFRKbQotKENPTlNFUSkgMzEuODgwNCBUagotMTAgVEptCi0oVUVOVElBTCkgMzQuNTI2NSBUagotLTMwMCBUSm0KLShEKSA1Ljc1NDQxIFRqCi00MCBUSm0KLShBTUEpIDE4LjU5NDIgVGoKLTQwIFRKbQotKEdFUykgMTUuMDU1NSBUagotLTI5OSBUSm0KLShcKElOQ0xVRElORywpIDQ4LjkxMjUgVGoKLS0yOTkgVEptCi0oQikgNS4zMTYwNiBUagotMTAgVEptCi0oVVQpIDEwLjYyNDEgVGoKLS0yOTkgVEptCi0oTk8pIDExLjUwODggVGoKLTQwIFRKbQotKFQpIDQuODY5NzMgVGoKLS0zMDAgVEptCi0oTElNSVRFRCkgMzIuNzU3MSBUagotLTI5OSBUSm0KLShUKSA0Ljg2OTczIFRqCi0xOCBUSm0KLShPLCkgNy43NDY5NCBUagotLTI5OSBUSm0KLShQUikgOS43NDc0MyBUagotNDAgVEptCi0oT0NVUkVNRU5UKSA0OS41OSBUagotLTI5OSBUSm0KLShPRikgMTAuMTg1OCBUagotLTMwMCBUSm0KLShTVUJTVElUVVRFKSA0Ny44MjA2IFRqCi0tMjk5IFRKbQotKEdPT0RTKSAyNy40NDkgVGoKLS0yOTkgVEptCi0oT1IpIDExLjA3MDUgVGoKLS0zMDAgVEptCi0oU0VSKSAxNC42MTcyIFRqCi04MCBUSm0KLShWSUNFUykgMjMuMDI1NiBUagotMSBUSm0KLSg7KSAyLjIxNTY5IFRqCi03MiA0ODkuODc4IFRkCi0oTE9TUykgMTkuNDg2OSBUagotLTM2MCBUSm0KLShPRikgMTAuMTg1OCBUagotLTM2MCBUSm0KLShVU0UsKSAxNy4wNDggVGoKLS0zNjAgVEptCi0oRCkgNS43NTQ0MSBUagotNDAgVEptCi0oQSkgNS43NTQ0MSBUagotMTExIFRKbQotKFQpIDQuODY5NzMgVGoKLTkzIFRKbQotKEEsKSA3Ljc0Njk0IFRqCi0tMzYwIFRKbQotKE9SKSAxMS4wNzA1IFRqCi0tMzU5IFRKbQotKFBSKSA5Ljc0NzQzIFRqCi00MCBUSm0KLShPRklUUzspIDI0LjM1NjYgVGoKLS0zNjAgVEptCi0oT1IpIDExLjA3MDUgVGoKLS0zNjAgVEptCi0oQikgNS4zMTYwNiBUagotMTAgVEptCi0oVVNJTkVTUykgMzIuMzI2NyBUagotLTM2MCBUSm0KLShJTlRFUlIpIDI4Ljc4IFRqCi00MCBUSm0KLShVUFRJT05cKSkgMzEuODcyNCBUagotLTM2MCBUSm0KLShITykgMTEuNTA4OCBUagotMzUgVEptCi0oV0VWRVIpIDI4LjMzMzcgVGoKLS0zNjAgVEptCi0oQ0EpIDExLjA3MDUgVGoKLTU1IFRKbQotKFVTRUQpIDIwLjgwOTkgVGoKLS0zNTkgVEptCi0oQU5EKSAxNy4yNjMyIFRqCi0tMzYwIFRKbQotKE9OKSAxMS41MDg4IFRqCi0tMzYwIFRKbQotKEFOWSkgMTcuMjYzMiBUagotLTM2MCBUSm0KLShUSEVPUikgMjYuNTY0MyBUagotNjUgVEptCi0oWSkgNS43NTQ0MSBUagotLTM2MCBUSm0KLShPRikgMTAuMTg1OCBUagotLTM2MCBUSm0KLShMSUFCKSAxOC41OTQyIFRqCi0xIFRKbQotKElMSVRZKSAyMC44MDIgVGoKLTEyOCBUSm0KLSgsKSAxLjk5MjUzIFRqCi03MiA0ODAuMzE0IFRkCi0oV0hFVEhFUikgMzguOTU3OCBUagotLTI0NyBUSm0KLShJTikgOC40MDg0NiBUagotLTI0NyBUSm0KLShDT05UUkEpIDMyLjc2NTEgVGoKLTQwIFRKbQotKENUKSAxMC4xODU4IFRqCi03NCBUSm0KLSgsKSAxLjk5MjUzIFRqCi0tMjQ3IFRKbQotKFNUUklDVCkgMjcuNDU3IFRqCi0tMjQ3IFRKbQotKExJQUJJTElUWSkgMzkuMzk2MiBUagotMTI5IFRKbQotKCwpIDEuOTkyNTMgVGoKLS0yNDYgVEptCi0oT1IpIDExLjA3MDUgVGoKLS0yNDcgVEptCi0oVCkgNC44Njk3MyBUagotMTggVEptCi0oT1IpIDExLjA3MDUgVGoKLTYwIFRKbQotKFQpIDQuODY5NzMgVGoKLS0yNDcgVEptCi0oXChJTkNMVURJTkcpIDQ2LjkyIFRqCi0tMjQ3IFRKbQotKE5FR0xJR0VOQ0UpIDUwLjQ2NjcgVGoKLS0yNDcgVEptCi0oT1IpIDExLjA3MDUgVGoKLS0yNDcgVEptCi0oTykgNS43NTQ0MSBUagotNDAgVEptCi0oVEhFUikgMjAuODA5OSBUagotNTUgVEptCi0oV0lTRVwpKSAyMi4xMzMgVGoKLS0yNDcgVEptCi0oQVJJU0lORykgMzIuMzE4OCBUagotLTI0NyBUSm0KLShJTikgOC40MDg0NiBUagotLTI0NyBUSm0KLShBTlkpIDE3LjI2MzIgVGoKLS0yNDcgVEptCi0oVykgNy41MjM3NyBUagotMTIwIFRKbQotKEEpIDUuNzU0NDEgVGoKLTEwNSBUSm0KLShZKSA1Ljc1NDQxIFRqCi0tMjQ3IFRKbQotKE9VVCkgMTYuMzc4NiBUagotNzIgNDcwLjc1IFRkCi0oT0YpIDEwLjE4NTggVGoKLS0yNTAgVEptCi0oVEhFKSAxNS40OTM5IFRqCi0tMjUwIFRKbQotKFVTRSkgMTUuMDU1NSBUagotLTI1MCBUSm0KLShPRikgMTAuMTg1OCBUagotLTI1MCBUSm0KLShUSElTKSAxNy43MDk2IFRqCi0tMjUwIFRKbQotKFNPRlRXKSAyNy4wMTA3IFRqCi0xMjAgVEptCi0oQVJFLCkgMTcuOTMyNyBUagotLTI1MCBUSm0KLShFVkVOKSAyMS4yNDgzIFRqCi0tMjUwIFRKbQotKElGKSA3LjA4NTQyIFRqCi0tMjUwIFRKbQotKEFEKSAxMS41MDg4IFRqCi00MCBUSm0KLShWSVNFRCkgMjMuNDY0IFRqCi0tMjUwIFRKbQotKE9GKSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKFRIRSkgMTUuNDkzOSBUagotLTI1MCBUSm0KLShQT1NTSUJJTElUWSkgNDcuODIwNiBUagotLTI1MCBUSm0KLShPRikgMTAuMTg1OCBUagotLTI1MCBUSm0KLShTVUNIKSAyMS4yNTYzIFRqCi0tMjUwIFRKbQotKEQpIDUuNzU0NDEgVGoKLTQwIFRKbQotKEFNQSkgMTguNTk0MiBUagotNDAgVEptCi0oR0UuKSAxMi42MTY3IFRqCi1bMSAwIDAgMSA3MiA0NjkuNTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNy45NzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjEuNjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTMuMjE2IFRkCi0vRjEzMF8wIDcuOTcwMSBUZgotKFApIDQuNDMxMzggVGoKLTkyIFRKbQotKEEpIDUuNzU0NDEgVGoKLTExMSBUSm0KLShURU5UUzopIDI3LjAxMDcgVGoKLS0yOTYgVEptCi0oVCkgNC44Njk3MyBUagotODAgVEptCi0obykgMy45ODUwNSBUagotLTI5NSBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yOTYgVEptCi0oYmVzdCkgMTIuODM5OCBUagotLTI5NSBUSm0KLShvZikgNi42MzkwOSBUagotLTI5NiBUSm0KLShteSkgMTAuMTg1OCBUagotLTI5NSBUSm0KLShrbm8pIDExLjk1NTEgVGoKLTI1IFRKbQotKHdsZWRnZSwpIDI1LjAxMDIgVGoKLVsxIDAgMCAxIDIwOC41NDQgNDUzLjIxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDguNTQ0IC00NTMuMjE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDguNTQ0IDQ1My4yMTYgVGQKLS9GMTM0XzAgNy45NzAxIFRmCi0oYnppcDIpIDIzLjkxMDMgVGoKLVsxIDAgMCAxIDIzMi40NTQgNDUzLjIxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzIuNDU0IC00NTMuMjE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzQuODEgNDUzLjIxNiBUZAotL0YxMzBfMCA3Ljk3MDEgVGYKLShhbmQpIDExLjUwODggVGoKLVsxIDAgMCAxIDI0OC42NzQgNDUzLjIxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDguNjc0IC00NTMuMjE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDguNjc0IDQ1My4yMTYgVGQKLS9GMTM0XzAgNy45NzAxIFRmCi0obGliYnppcDIpIDM4LjI1NjUgVGoKLVsxIDAgMCAxIDI4Ni45MzEgNDUzLjIxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODYuOTMxIC00NTMuMjE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODkuMjg2IDQ1My4yMTYgVGQKLS9GMTMwXzAgNy45NzAxIFRmCi0oZG8pIDcuOTcwMSBUagotLTI5NiBUSm0KLShub3QpIDEwLjE4NTggVGoKLS0yOTUgVEptCi0odXNlKSAxMC42MjQxIFRqCi0tMjk2IFRKbQotKGFuKSA3LjUyMzc3IFRqCi0xNSBUSm0KLSh5KSAzLjk4NTA1IFRqCi0tMjk1IFRKbQotKHBhdGVudGVkKSAyNy4wMDI3IFRqCi0tMjk2IFRKbQotKGFsZ29yaXRobXMuKSAzNi4wODg2IFRqCi0tODkzIFRKbQotKEhvKSA5LjczOTQ2IFRqCi0yNSBUSm0KLSh3ZSkgOS4yOTMxNCBUagotMjUgVEptCi0odikgMy45ODUwNSBUagotMTUgVEptCi0oZXIpIDYuMTkyNzcgVGoKLTQwIFRKbQotKCwpIDEuOTkyNTMgVGoKLS0zMDcgVEptCi0oSSkgMi42NTQwNCBUagotLTI5NSBUSm0KLShkbykgNy45NzAxIFRqCi0tMjk2IFRKbQotKG5vdCkgMTAuMTg1OCBUagotLTI5NSBUSm0KLShoYSkgNy41MjM3NyBUagotMjAgVEptCi0odikgMy45ODUwNSBUagotMTUgVEptCi0oZSkgMy41Mzg3MiBUagotLTI5NiBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yOTUgVEptCi0ocmVzb3VyY2VzKSAzMC4wOTUxIFRqCi0tMjk2IFRKbQotKHRvKSA2LjIwMDc0IFRqCi03MiA0NDMuNjUyIFRkCi0oY2FycnkpIDE2LjM3MDYgVGoKLS0yNTAgVEptCi0ob3V0KSAxMC4xODU4IFRqCi0tMjUwIFRKbQotKGEpIDMuNTM4NzIgVGoKLS0yNTAgVEptCi0ocGF0ZW50KSAxOS40Nzg5IFRqCi0tMjUwIFRKbQotKHNlYXJjaC4pIDIyLjM0ODIgVGoKLS02MjAgVEptCi0oVGhlcmVmb3JlKSAzMS40MTgxIFRqCi0tMjUwIFRKbQotKEkpIDIuNjU0MDQgVGoKLS0yNTAgVEptCi0oY2Fubm90KSAyMS4yNDgzIFRqCi0tMjUwIFRKbQotKGdpKSA2LjIwMDc0IFRqCi0yNSBUSm0KLSh2KSAzLjk4NTA1IFRqCi0xNSBUSm0KLShlKSAzLjUzODcyIFRqCi0tMjUwIFRKbQotKGFuKSA3LjUyMzc3IFRqCi0xNSBUSm0KLSh5KSAzLjk4NTA1IFRqCi0tMjUwIFRKbQotKGd1YXJhbnRlZSkgMzAuOTc5OCBUagotLTI1MCBUSm0KLShvZikgNi42MzkwOSBUagotLTI1MCBUSm0KLSh0aGUpIDkuNzM5NDYgVGoKLS0yNTAgVEptCi0oYWJvKSAxMS41MDg4IFRqCi0xNSBUSm0KLSh2KSAzLjk4NTA1IFRqCi0xNSBUSm0KLShlKSAzLjUzODcyIFRqCi0tMjUwIFRKbQotKHN0YXRlbWVudC4pIDMyLjU0MTkgVGoKLVsxIDAgMCAxIDcyIDQ0MS45MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zOTEuMDc0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDYuNzk5MyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2Ljc5OTMgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDMgMwotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtMTMuOTQ3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzA3LjQ0MSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oVCkgMTAuNTE4NiBUagotODAgVEptCi0oYWIpIDIwLjA5MDQgVGoKLTEwIFRKbQotKGxlKSAxNC4zNTc2IFRqCi0tMjc4IFRKbQotKG9mKSAxNi4yNTEzIFRqCi0tMjc4IFRKbQotKENvbnRlbnRzKSA3NC41OTQzIFRqCi1bMSAwIDAgMSA3MiA2OTguNjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuNzQwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjg2Ljg3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjg2Ljg3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxLikgNy40NzE5NSBUagotLTMxMCBUSm0KLShJbnRyb2R1Y3Rpb24pIDQ5LjI1NTEgVGoKLVsxIDAgMCAxIDEzMS44MTUgNjg2Ljg3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM2Ljc5NiAtNjg2Ljg3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ1LjczMyA2ODYuODc5IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2ODYuODc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTY4Ni44NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjg2Ljg3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2ODYuODc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjc0LjkyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjc0LjkyMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLikgNy40NzE5NSBUagotLTMxMCBUSm0KLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDE1Mi4zMTggNjc0LjkyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU3LjMgLTY3NC45MjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ny4wNTQgNjc0LjkyMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDY3NC45MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNjc0LjkyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA2NzQuOTIzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDY3NC45MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY2Mi45NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY2Mi45NjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4xLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShOKSA3LjE5MyBUagotMzUgVEptCi0oQU1FKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAxMTkuMDE0IDY2Mi45NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMy45OTUgLTY2Mi45NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMi42OTEgNjYyLjk2OCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjYyLjk2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02NjIuOTY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDY2Mi45NjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjYyLjk2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY1MS4wMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1MS4wMTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4yLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShTWU5PUFNJUykgNDcuMDUzNCBUagotWzEgMCAwIDEgMTM3LjA4NSA2NTEuMDEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDIuMDY3IC02NTEuMDEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTAuNTgyIDY1MS4wMTMgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjUxLjAxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02NTEuMDEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDY1MS4wMTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjUxLjAxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzOS4wNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzOS4wNTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4zLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShERVNDUklQVElPTikgNjQuNzU2OSBUagotWzEgMCAwIDEgMTU0Ljc4OSA2MzkuMDU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuNzcgLTYzOS4wNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OC4yOSA2MzkuMDU4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjM5LjA1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MzkuMDU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYzOS4wNTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjM5LjA1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyNy4xMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyNy4xMDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShPUFRJT05TKSA0Mi4wNjIxIFRqCi1bMSAwIDAgMSAxMzIuMDk0IDYyNy4xMDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy4wNzYgLTYyNy4xMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0NS44NzMgNjI3LjEwMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjI3LjEwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MjcuMTAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYyNy4xMDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNCkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjI3LjEwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYxNS4xNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYxNS4xNDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi41LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShNRU1PUikgMzcuNjM4NyBUagotNjUgVEptCi0oWSkgNy4xOTMgVGoKLS0yNTAgVEptCi0oTUFOKSAyMy4yNDI3IFRqCi0zNSBUSm0KLShBKSA3LjE5MyBUagotNDAgVEptCi0oR0VNRU5UKSA0MS41MDQyIFRqCi1bMSAwIDAgMSAyMDcuOSA2MTUuMTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTIuODgxIC02MTUuMTQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjEuNDEyIDYxNS4xNDcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MTUuMTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYxNS4xNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjE1LjE0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg1KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MTUuMTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjAzLjE5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjAzLjE5MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjYuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFJFQ08pIDI2LjU3MDMgVGoKLTUwIFRKbQotKFZFUklORykgMzcuNjI4NyBUagotLTI1MCBUSm0KLShEKSA3LjE5MyBUagotNDAgVEptCi0oQSkgNy4xOTMgVGoKLTExMSBUSm0KLShUKSA2LjA4NzE1IFRqCi05MyBUSm0KLShBKSA3LjE5MyBUagotLTI1MCBUSm0KLShGUikgMTIuMTg0MyBUagotNDAgVEptCi0oT00pIDE2LjA0OTcgVGoKLS0yNTAgVEptCi0oRCkgNy4xOTMgVGoKLTQwIFRKbQotKEFNQSkgMjMuMjQyNyBUagotNDAgVEptCi0oR0VEKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKEZJTEVTKSAyNi41NzAzIFRqCi1bMSAwIDAgMSAyOTMuNDQ5IDYwMy4xOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OC40MyAtNjAzLjE5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA4LjQ2NCA2MDMuMTkyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDYwMy4xOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNjAzLjE5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA2MDMuMTkyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDYpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDYwMy4xOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTEuMjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTEuMjM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuNy4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUEVSRk9STUFOQ0UpIDczLjYyMzYgVGoKLS0yNTAgVEptCi0oTk8pIDE0LjM4NiBUagotNDAgVEptCi0oVEVTKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAxOTcuODQ3IDU5MS4yMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMi44MjkgLTU5MS4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMS45NTggNTkxLjIzNyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTkxLjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01OTEuMjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU5MS4yMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTkxLjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU3OS4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU3OS4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi44LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShDQSkgMTMuODM4MSBUagotMTM1IFRKbQotKFZFQSkgMjAuNDczMSBUagotMTExIFRKbQotKFRTKSAxMS42MjY0IFRqCi1bMSAwIDAgMSAxMzMuNTE5IDU3OS4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzOC41IC01NzkuMjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDguNzk5IDU3OS4yODIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTc5LjI4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NzkuMjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU3OS4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTc5LjI4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2Ny4zMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2Ny4zMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi45LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShBKSA3LjE5MyBUagotNTUgVEptCi0oVVRIT1IpIDM0LjMxMTIgVGoKLVsxIDAgMCAxIDEzMC45ODkgNTY3LjMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM1Ljk3IC01NjcuMzI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDUuMzIgNTY3LjMyNyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTY3LjMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NjcuMzI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU2Ny4zMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTY3LjMyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMjE5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjczNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTU1LjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTU1LjM3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLikgNy40NzE5NSBUagotLTMxMCBUSm0KLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAxNjAuMDQ5IDU1NS4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYwLjA0OSAtNTU1LjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYwLjA0OSA1NTUuMzcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAyMDcuODcgNTU1LjM3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTUuMzQyIC01NTUuMzcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjQuODU2IDU1NS4zNzIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDU1NS4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTU1LjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1NTUuMzcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDgpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDU1NS4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0My40MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0My40MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4xLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShUKSA2LjA4NzE1IFRqCi04MCBUSm0KLShvcC1sZSkgMjAuNDczMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oc3RydWN0dXJlKSAzNC44NTkxIFRqCi1bMSAwIDAgMSAxNjQuOTIxIDU0My40MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OS45MDIgLTU0My40MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3OS45OTcgNTQzLjQxNiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDU0My40MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTQzLjQxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1NDMuNDE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDgpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDU0My40MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUzMS40NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUzMS40NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4xLjEuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKExvKSAxMS4wNjg0IFRqCi0yNSBUSm0KLSh3LWxlKSAxNy43MDM1IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShzdW1tYXJ5KSAzNy4wODA4IFRqCi1bMSAwIDAgMSAxNzcuMzc0IDUzMS40NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4Mi4zNTUgLTUzMS40NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5Mi44NjYgNTMxLjQ2MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDUzMS40NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTMxLjQ2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1MzEuNDYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDkpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDUzMS40NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUxOS41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUxOS41MDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4xLjIuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKEhpZ2gtbGUpIDMwLjQzNTcgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHN1bW1hcnkpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDE3OS4yODcgNTE5LjUwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg0LjI2OCAtNTE5LjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkzLjgyMiA1MTkuNTA2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTE5LjUwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01MTkuNTA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDUxOS41MDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOSkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTE5LjUwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTA3LjU1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTA3LjU1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuMy4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oVXRpbGl0eSkgMjYuMDIyMyBUagotLTI1MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0oc3VtbWFyeSkgMzcuMDgwOCBUagotWzEgMCAwIDEgMjAyLjY2OSA1MDcuNTUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDcuNjUgLTUwNy41NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi41ODIgNTA3LjU1MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1MDcuNTUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTUwNy41NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTA3LjU1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg5KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1MDcuNTUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00OTUuNTk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0OTUuNTk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMi4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oRXJyb3IpIDIxLjAyMTEgVGoKLS0yNTAgVEptCi0oaGFuZGxpbmcpIDM0Ljg2OTEgVGoKLVsxIDAgMCAxIDE0OC40MTMgNDk1LjU5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUzLjM5NCAtNDk1LjU5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYyLjYxMSA0OTUuNTk2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDk1LjU5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00OTUuNTk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ5NS41OTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTApIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ5NS41OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ4My42NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ4My42NDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShMbykgMTEuMDY4NCBUagotMjUgVEptCi0ody1sZSkgMTcuNzAzNSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotWzEgMCAwIDEgMTY3LjU3MSA0ODMuNjQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzIuNTUyIC00ODMuNjQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODEuMDQ1IDQ4My42NDEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ4My42NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDgzLjY0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0ODMuNjQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDExKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0ODMuNjQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDcxLjY4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDcxLjY4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuMS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDcxLjY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00NzEuNjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ3MS42ODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAyMDUuMTAxIDQ3MS42ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC4wODIgLTQ3MS42ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxOS43MzYgNDcxLjY4NSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDcxLjY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00NzEuNjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ3MS42ODUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ3MS42ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ1OS43M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDU5LjczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4yLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0NTkuNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDU5LjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ1OS43MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTgxLjE5IDQ1OS43M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg2LjE3MiAtNDU5LjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTQuNDk3IDQ1OS43MyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDU5LjczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQ1OS43M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0NTkuNzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ1OS43M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQ3Ljc3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDQ3Ljc3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuMy4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDQ3Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00NDcuNzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ0Ny43NzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDE5OS4xMjMgNDQ3Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjEwNSAtNDQ3Ljc3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE0LjUzMyA0NDcuNzc1IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDQ3Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00NDcuNzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ0Ny43NzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTYpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQ0Ny43NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzNS44Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDM1LjgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy40LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0MzUuODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDM1LjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQzNS44MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzSW5pdCkgMTE5LjU1MSBUagotWzEgMCAwIDEgMjE3LjA1NiA0MzUuODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMi4wMzcgLTQzNS44Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMyLjM1NSA0MzUuODIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQzNS44Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00MzUuODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDM1LjgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0MzUuODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQyMy44NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyMy44NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLjUuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDQyMy44NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDIzLjg2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA0MjMuODY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgMTkzLjE0NiA0MjMuODY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTguMTI3IC00MjMuODY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuMTE2IDQyMy44NjUgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQyMy44NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDIzLjg2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0MjMuODY1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE3KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0MjMuODY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MTEuOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQxMS45MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuNi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDExLjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQxMS45MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA0MTEuOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMjExLjA3OCA0MTEuOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi4wNiAtNDExLjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjQuOTM4IDQxMS45MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0MTEuOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDExLjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQxMS45MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDExLjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTkuOTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzOTkuOTU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oSGlnaC1sZSkgMzAuNDM1NyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotWzEgMCAwIDEgMTY5LjQ4MyAzOTkuOTU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzQuNDY1IC0zOTkuOTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODQuMjE2IDM5OS45NTQgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzk5Ljk1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zOTkuOTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDM5OS45NTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTgpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDM5OS45NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM4Ny45OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM4Ny45OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjEuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDM4Ny45OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzg3Ljk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzODcuOTk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxODEuMTkgMzg3Ljk5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg2LjE3MiAtMzg3Ljk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk0LjQ5NyAzODcuOTk5IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzODcuOTk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM4Ny45OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzg3Ljk5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzg3Ljk5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzc2LjA0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzc2LjA0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuMi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMzc2LjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0zNzYuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDM3Ni4wNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMTU3LjI4IDM3Ni4wNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Mi4yNjEgLTM3Ni4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3MS40NzIgMzc2LjA0NCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzNzYuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM3Ni4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzc2LjA0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzc2LjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC42NDUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjQuMDg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNjQuMDg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC4zLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyAzNjQuMDg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTM2NC4wODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgMzY0LjA4OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSAyMTEuMDc4IDM2NC4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi4wNiAtMzY0LjA4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI0LjkzOCAzNjQuMDg5IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM2NC4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzY0LjA4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzNjQuMDg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzNjQuMDg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1Mi4xMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1Mi4xMzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjQuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDM1Mi4xMzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzUyLjEzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzNTIuMTM0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgMTg3LjE2OCAzNTIuMTM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuMTQ5IC0zNTIuMTM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDEuOTE0IDM1Mi4xMzQgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzNTIuMTM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM1Mi4xMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzUyLjEzNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzUyLjEzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC42NDUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNDAuMTc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNDAuMTc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC41LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyAzNDAuMTc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTM0MC4xNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgMzQwLjE3OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZU9wZW4pIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE4Ny4xNjggMzQwLjE3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkyLjE0OSAtMzQwLjE3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAxLjkxNCAzNDAuMTc5IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzQwLjE3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zNDAuMTc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDM0MC4xNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjIpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDM0MC4xNzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMyOC4yMjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMyOC4yMjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjYuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDMyOC4yMjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzI4LjIyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzMjguMjIzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAxNjMuMjU4IDMyOC4yMjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OC4yMzkgLTMyOC4yMjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni42NzUgMzI4LjIyMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDMyOC4yMjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzI4LjIyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzMjguMjIzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzMjguMjIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMxNi4yNjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMxNi4yNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjcuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDMxNi4yNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMzE2LjI2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAzMTYuMjY4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlQ2xvc2UpIDk1LjY0MSBUagotWzEgMCAwIDEgMTkzLjE0NiAzMTYuMjY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTguMTI3IC0zMTYuMjY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuMTE2IDMxNi4yNjggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDMxNi4yNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzE2LjI2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzMTYuMjY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzMTYuMjY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMwNC4zMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMwNC4zMTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjguKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKEhhbmRsaW5nKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKGVtYmVkZGVkKSA0MC45NDYzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShzdHJlYW1zKSAzMC40MzU3IFRqCi1bMSAwIDAgMSAyNzkuNTYgMzA0LjMxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg0LjU0MSAtMzA0LjMxM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk0LjYwMSAzMDQuMzEzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzA0LjMxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zMDQuMzEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDMwNC4zMTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjQpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDMwNC4zMTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI5Mi4zNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI5Mi4zNTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjkuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKFN0YW5kYXJkKSAzNS40MTcgVGoKLS0yNTAgVEptCi0oXDAwMmxlLXJlYWRpbmcvd3JpdGluZykgNzcuNDc5MSBUagotLTI1MCBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi1bMSAwIDAgMSAyMzQuMTkgMjkyLjM1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM5LjE3MiAtMjkyLjM1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ3LjU2NCAyOTIuMzU4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyOTIuMzU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTI5Mi4zNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjkyLjM1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjkyLjM1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjgwLjQwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjgwLjQwMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjUuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFV0aWxpdHkpIDI2LjAyMjMgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi1bMSAwIDAgMSAxNTUuNjI1IDI4MC40MDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MC42MDcgLTI4MC40MDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3MC42NDUgMjgwLjQwMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyODAuNDAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTI4MC40MDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjgwLjQwMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjgwLjQwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjY4LjQ0OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjY4LjQ0OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjUuMS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMjY4LjQ0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0yNjguNDQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDI2OC40NDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkNvbXByZXNzKSAxNDMuNDYxIFRqCi1bMSAwIDAgMSAyNDAuOTY2IDI2OC40NDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NS45NDggLTI2OC40NDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1NS4zOCAyNjguNDQ4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjY4LjQ0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yNjguNDQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDI2OC40NDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjYpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDI2OC40NDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI1Ni40OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI1Ni40OTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy41LjIuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDI1Ni40OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtMjU2LjQ5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyAyNTYuNDkyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAxNTUuNDE3IFRqCi1bMSAwIDAgMSAyNTIuOTIyIDI1Ni40OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1Ny45MDMgLTI1Ni40OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2Ny45OTkgMjU2LjQ5MiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDI1Ni40OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMjU2LjQ5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAyNTYuNDkyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI3KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAyNTYuNDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNDQuNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNDQuNTM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNi4pIDE0Ljk0MzkgVGoKLVsxIDAgMCAxIDkwLjAzMjQgMjQ0LjUzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MC4wMzI0IC0yNDQuNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MC4wMzI0IDI0NC41MzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oemxpYikgMjMuOTEwMiBUagotWzEgMCAwIDEgMTEzLjk0MyAyNDQuNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy45NDMgLTI0NC41MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNi40MzMgMjQ0LjUzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb21wYXRpYmlsaXR5KSA1My4xNDA1IFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotWzEgMCAwIDEgMjA5LjE0NCAyNDQuNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTQuMTI2IC0yNDQuNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjMuOTcxIDI0NC41MzcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjQ0LjUzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yNDQuNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDI0NC41MzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjgpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDI0NC41MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzMi41ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIzMi41ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy43LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShVc2luZykgMjMuODAwNyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLVsxIDAgMCAxIDE3Ny4xOTUgMjMyLjU4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzcuMTk1IC0yMzIuNTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzcuMTk1IDIzMi41ODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc3RkaW8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIwNy4wODMgMjMyLjU4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDcuMDgzIC0yMzIuNTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuMDgzIDIzMi41ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLWZyZWUpIDE4Ljc5OTQgVGoKLS0yNTAgVEptCi0oZW4pIDkuNDA0NjkgVGoKLTQwIFRKbQotKHZpcm9ubWVudCkgNDAuOTU2MiBUagotWzEgMCAwIDEgMjc4LjMzNSAyMzIuNTgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODMuMzE2IC0yMzIuNTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTEuNzc1IDIzMi41ODIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjMyLjU4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yMzIuNTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDIzMi41ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjgpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDIzMi41ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIyMC42MjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIyMC42MjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy43LjEuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKEdldHRpbmcpIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0ocmlkKSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAxNTQuMjMxIDIyMC42MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU0LjIzMSAtMjIwLjYyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU0LjIzMSAyMjAuNjI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHN0ZGlvKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxODQuMTE5IDIyMC42MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4OS4xIC0yMjAuNjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTguMTc1IDIyMC42MjcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjIwLjYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yMjAuNjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDIyMC42MjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjkpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDIyMC42MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwOC42NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIwOC42NzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy43LjIuKSAyMi40MTU5IFRqCi0tMzEwIFRKbQotKENyaXRpY2FsKSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjUwIFRKbQotKGhhbmRsaW5nKSAzNC44NjkxIFRqCi1bMSAwIDAgMSAxODYuNTk5IDIwOC42NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5MS41OCAtMjA4LjY3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAxLjYyOSAyMDguNjcyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMjA4LjY3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0yMDguNjcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDIwOC42NzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjkpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDIwOC42NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE5Ni43MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5Ni43MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy44LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShNYWtpbmcpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbmRvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTI1MCBUSm0KLShETEwpIDE5LjM2NzMgVGoKLVsxIDAgMCAxIDE4OS44MjggMTk2LjcxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk0LjgwOSAtMTk2LjcxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAzLjI0MyAxOTYuNzE3IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMTk2LjcxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0xOTYuNzE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDE5Ni43MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjkpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDE5Ni43MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE4NC43NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE4NC43NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC4pIDcuNDcxOTUgVGoKLS0zMTAgVEptCi0oTWlzY2VsbGFuZWEpIDQ4LjEzOTMgVGoKLVsxIDAgMCAxIDEzMC42OTkgMTg0Ljc2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM1LjY4IC0xODQuNzYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDQuODk4IDE4NC43NjEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMTg0Ljc2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0xODQuNzYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDE4NC43NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDE4NC43NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNzIuODA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzIuODA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuMS4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oTGltaXRhdGlvbnMpIDQ1Ljk0NzUgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGZvcm1hdCkgMjYuNTYwMyBUagotWzEgMCAwIDEgMjU1LjIzMSAxNzIuODA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjAuMjEyIC0xNzIuODA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjkuMTU0IDE3Mi44MDYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAxNzIuODA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTE3Mi44MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMTcyLjgwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMTcyLjgwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTYwLjg1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTYwLjg1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LjIuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFBvcnRhYmlsaXR5KSA0Mi4wNzIxIFRqCi0tMjUwIFRKbQotKGlzc3VlcykgMjMuODAwNyBUagotWzEgMCAwIDEgMTU4LjM5NSAxNjAuODUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjMuMzc2IC0xNjAuODUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuMDMgMTYwLjg1MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAxNjAuODUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTE2MC44NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMTYwLjg1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMTYwLjg1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTQ4Ljg5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTQ4Ljg5NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LjMuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFJlcG9ydGluZykgMzkuODUwNCBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVncykgMTMuODM4MSBUagotWzEgMCAwIDEgMTUwLjk5MyAxNDguODk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTUuOTc1IC0xNDguODk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuMTE1IDE0OC44OTYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDE0OC44OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMTQ4Ljg5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAxNDguODk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAxNDguODk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMzYuOTQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMzYuOTQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuNC4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oRGlkKSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShnZXQpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHJpZ2h0KSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKHBhY2thZ2U/KSAzNy4wNjA5IFRqCi1bMSAwIDAgMSAyMTIuNjAyIDEzNi45NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzLjA4ODQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDMuMDg4NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxOC43NzggLTEzNi45NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyOS4xMDkgMTM2Ljk0MSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDEzNi45NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMTM2Ljk0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAxMzYuOTQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAxMzYuOTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMjQuOTg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMjQuOTg2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuNS4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oRnVydGhlcikgMjkuMzI5OSBUagotLTI1MCBUSm0KLShSZWFkaW5nKSAzMy4yMDUzIFRqCi1bMSAwIDAgMSAxNTUuMDU4IDEyNC45ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MC4wMzkgLTEyNC45ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3MC4zNjEgMTI0Ljk4NiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAxMjQuOTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTEyNC45ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMTI0Ljk4NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzNCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMTI0Ljk4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTYyLjAxNDNdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQxLjM5OTcgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTQuNjY4IC01MC44NTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzYuMDY4IDUwLjg1MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaWlpKSA4LjMwODgxIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiA0IDQKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQwLjM5OCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTEzLjk0NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcwMS45MTYgVGQKLS9GMTIyXzAgMjQuNzkwMiBUZgotKDEuKSAyMC42NzUgVGoKLS0yNzggVEptCi0oSW50cikgMzkuOTM3IFRqCi0yMCBUSm0KLShvZHVjdGlvbikgMTA0LjY2NCBUagotWzEgMCAwIDEgNzIgNzAxLjYwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjkxLjY0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjc5Ljk5OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA2NzkuOTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTY3OS45OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC41MDcgNjc5Ljk5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb21wcmVzc2VzKSA0NS45Mjc2IFRqCi0tMjYzIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNjMgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI2MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjIgVEptCi0oQnVycm8pIDIzLjI0MjcgVGoKLTI1IFRKbQotKHdzLVdoZWVsZXIpIDQ4LjEyOTMgVGoKLS0yNjMgVEptCi0oYmxvY2stc29ydGluZykgNTMuMTMwNSBUagotLTI2MyBUSm0KLSh0ZSkgNy4xOTMgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNjMgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNjMgVEptCi0oYWxnb3JpdGhtLCkgNDEuMjM1MiBUagotLTI2NiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI2MyBUSm0KLShIdWYpIDE1LjQ5MTggVGoKLTI1IFRKbQotKGZtYW4pIDIwLjQ3MzEgVGoKLS0yNjMgVEptCi0oY29kaW5nLikgMjkuNjA4OCBUagotNzIgNjY4LjA0MyBUZAotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjAzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjA0IFRKbQotKGdlbmVyYWxseSkgMzcuMDcwOCBUagotLTIwMyBUSm0KLShjb25zaWRlcmFibHkpIDUwLjkwODkgVGoKLS0yMDMgVEptCi0oYmV0dGVyKSAyMi42ODQ4IFRqCi0tMjA0IFRKbQotKHQpIDIuNzY5NiBUagotMSBUSm0KLShoYW4pIDE0LjM4NiBUagotLTIwNCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjAzIFRKbQotKGFjaGllKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVkKSA5LjQwNDY5IFRqCi0tMjAzIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yMDQgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTIwMyBUSm0KLShjb24pIDE0LjM4NiBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbnRpb25hbCkgMzIuMDk5NSBUagotLTIwMyBUSm0KLShMWjc3L0xaNzgtYmFzZWQpIDczLjA0NTggVGoKLS0yMDQgVEptCi0oY29tcHJlc3NvcnMsKSA1Mi4yOTM3IFRqCi03MiA2NTYuMDg3IFRkCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oYXBwcm9hY2hlcykgNDQuODExOCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocGVyZm9ybWFuY2UpIDUwLjM0MSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oUFBNKSAxOS45MzUyIFRqCi0tMjUwIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFtaWx5KSAyMi42OTQ4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHN0YXRpc3RpY2FsKSAzNy42Mzg3IFRqCi0tMjUwIFRKbQotKGNvbXByZXNzb3JzLikgNTIuMjkzNyBUagotWzEgMCAwIDEgNzIgNjUzLjkzMV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjQzLjk2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM0LjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDYzNC4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC02MzQuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNS4wNzMgNjM0LjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzIwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWlsdCkgMTMuMjkwMSBUagotLTMxOSBUSm0KLShvbikgOS45NjI2IFRqCi0tMzIwIFRKbQotKHRvcCkgMTIuNzMyMiBUagotLTMyMCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTc2LjcxMiA2MzQuMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc2LjcxMiAtNjM0LjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzYuNzEyIDYzNC4xNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMjI0LjUzMyA2MzQuMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI0LjUzMyAtNjM0LjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjQuNTMzIDYzNC4xNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzM3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMjAgVEptCi0oXDAwM2UpIDkuOTYyNiBUagotMTUgVEptCi0oeGlibGUpIDE5LjkyNTIgVGoKLS0zMjAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTMxOSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zMjAgVEptCi0oaGFuZGxpbmcpIDM0Ljg2OTEgVGoKLS0zMjAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTMyMCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzE5IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMjAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSA0NDkuODE2IDYzNC4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDkuODE2IC02MzQuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0OS44MTYgNjM0LjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NzkuNzA0IDYzNC4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzkuNzA0IC02MzQuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Mi44ODkgNjM0LjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcm1hdC4pIDI5LjA1MDkgVGoKLS0xMDM5IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLTcyIDYyMi4yMTQgVGQKLShtYW51YWwpIDI5LjMyOTkgVGoKLS0zMTYgVEptCi0oZGVzY3JpYmVzKSAzNy4wNzA4IFRqCi0tMzE2IFRKbQotKGJvdGgpIDE3LjcxMzUgVGoKLS0zMTcgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0zMTYgVEptCi0odG8pIDcuNzUwOSBUagotLTMxNiBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0zMTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE2IFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0zMTYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMTcgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0zMTYgVEptCi0odG8pIDcuNzUwOSBUagotLTMxNiBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrKSAxMy4yODAxIFRqCi0tMzE2IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE3IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zMTYgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZS4pIDE1Ljc2MDggVGoKLS0xMDE3IFRKbQotKE1vc3QpIDIwLjQ4MzEgVGoKLS0zMTYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE3IFRKbQotKG1hbnVhbCkgMjkuMzI5OSBUagotLTMxNiBUSm0KLShpcykgNi42NDUwNSBUagotNzIgNjEwLjI1OSBUZAotKGRlKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTIwIFRKbQotKG90ZWQpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2dyYW0sKSAzNi4yNDM5IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGdvb2QpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHdzKSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjUwIFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oaW50ZXJlc3QpIDI5LjMyOTkgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwcm9ncmFtLikgMzYuMjQzOSBUagotWzEgMCAwIDEgNzIgNjA4LjEwMl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTI5LjcyMzZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC01NzguMzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDU3OC4zNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA1NzguMzc5XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTU3OC4zNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1NzguMzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEhvKSAxMi4xNzQzIFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjYwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1OSBUSm0KLShiemlwMikgMjIuMTM2OSBUagotWzEgMCAwIDEgMTU2Ljk4NSA1NzguMzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotWzEgMCAwIDEgLTE1Ni45ODUgLTU3OC4zNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OS41NyA1NzguMzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFsyXSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMTcxLjE4NiA1NzguMzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3MS4xODYgLTU3OC4zNzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3My43NzEgNTc4LjM3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkZXNjcmliZXMpIDM3LjA3MDggVGoKLS0yNTkgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNjAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1OSBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDI1OS4xMTkgNTc4LjM3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTkuMTE5IC01NzguMzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTkuMTE5IDU3OC4zNzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI4OS4wMDcgNTc4LjM3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODkuMDA3IC01NzguMzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODkuMDA3IDU3OC4zNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOykgMi43Njk2IFRqCi0tMjY0IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI2MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjAgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI1OSBUSm0KLShwYXJ0KSAxNS40OTE4IFRqCi0tMjU5IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2MCBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMjU5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjAgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI1OSBUSm0KLShpZikgNi4wODcxNSBUagotLTI2MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTkgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMjYwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNTkgVEptCi0odG8pIDcuNzUwOSBUagotLTI2MCBUSm0KLShrbm8pIDE0Ljk0MzkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi04Ni45NDQgNTY2LjQyNCBUZAotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ob3BlcmF0ZSkgMjkuMzE5OSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJvZ3JhbS4pIDM2LjI0MzkgVGoKLVsxIDAgMCAxIDE5OS4zMDIgNTY2LjQyNF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMjcuMzAyIC0yMS45MTc4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNTQ0LjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA1NDQuNTA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNTQ0LjUwNl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC01NDQuNTA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNTQ0LjUwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGxpYmJ6aXAyKSAzMi42NTc0IFRqCi1bMSAwIDAgMSAxOTcuMDkgNTQ0LjUwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xOTcuMDkgLTU0NC41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OS41OCA1NDQuNTA2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFs4XSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMjExLjE5NyA1NDQuNTA2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMS4xOTcgLTU0NC41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMy42ODcgNTQ0LjUwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkZXNjcmliZXMpIDM3LjA3MDggVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2dyYW1taW5nKSA1NC4yMzY0IFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2VzKSAxNy4xNDU2IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oZGV0YWlsLCkgMjQuNjI3NSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDE3LjUwMSA1NDQuNTA2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTM0NS41MDEgLTIxLjkxNzhdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC01MjIuNTg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDUyMi41ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA1MjIuNTg4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTUyMi41ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1MjIuNTg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1pc2NlbGxhbmVhKSA0OC4xMzkzIFRqCi1bMSAwIDAgMSAxMzUuMDgzIDUyMi41ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtMTM1LjA4MyAtNTIyLjU4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM3LjU3MyA1MjIuNTg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFszMV0pIDE2LjU5NzcgVGoKLVsxIDAgMCAxIDE1NC4xNzEgNTIyLjU4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTQuMTcxIC01MjIuNTg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTYuNjYyIDUyMi41ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocmVjb3JkcykgMjkuMzE5OSBUagotLTI1MCBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0obWlzY2VsbGFuZW91cykgNTYuNDQ4MSBUagotLTI1MCBUSm0KLShub3RlcykgMjEuMDMxIFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0odGhvdWdodCkgMzAuNDQ1NyBUagotLTI1MCBUSm0KLShvdWdodCkgMjIuNjk0OCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKHJlY29yZGVkKSAzNC44NDkyIFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotMjUgVEptCi0od2hlcmUuKSAyNi44MjkzIFRqCi1bMSAwIDAgMSA0OTIuMzEgNTIyLjU4OF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC00MjAuMzEgLTQ3MS43MzZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuMzMyIC01MC44NTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzkuMzk1IDUwLjg1MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMSkgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiA1IDUKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQwLjM5OCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTEzLjk0NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcwMS45MTYgVGQKLS9GMTIyXzAgMjQuNzkwMiBUZgotKDIuKSAyMC42NzUgVGoKLS0yNzggVEptCi0oSG8pIDMzLjA0NTMgVGoKLTE1IFRKbQotKHcpIDE5LjI4NjggVGoKLS0yNzggVEptCi0odG8pIDIzLjQwMTkgVGoKLS0yNzggVEptCi0odXNlKSA0Mi43MTM1IFRqCi0tMjc4IFRKbQotKGJ6aXAyKSA2My4zNjM4IFRqCi1bMSAwIDAgMSA3MiA2OTYuNzg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTQuOTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NzEuODc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTYuMzUgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKFQpIDEwLjUxODYgVGoKLTgwIFRKbQotKGFiKSAyMC4wOTA0IFRqCi0xMCBUSm0KLShsZSkgMTQuMzU3NiBUagotLTI3OCBUSm0KLShvZikgMTYuMjUxMyBUagotLTI3OCBUSm0KLShDb250ZW50cykgNzQuNTk0MyBUagotWzEgMCAwIDEgNzIgNjQ3LjUyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjc0MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzNS43ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzNS43ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4xLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShOKSA3LjE5MyBUagotMzUgVEptCi0oQU1FKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAxMTkuMDE0IDYzNS43ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMy45OTUgLTYzNS43ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMi42OTEgNjM1Ljc4OCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MzUuNzg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYzNS43ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyMy44MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyMy44MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4yLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShTWU5PUFNJUykgNDcuMDUzNCBUagotWzEgMCAwIDEgMTM3LjA4NSA2MjMuODMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDIuMDY3IC02MjMuODMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTAuNTgyIDYyMy44MzIgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MjMuODMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYyMy44MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYxMS44NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYxMS44NzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi4zLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShERVNDUklQVElPTikgNjQuNzU2OSBUagotWzEgMCAwIDEgMTU0Ljc4OSA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuNzcgLTYxMS44NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OC4yOSA2MTEuODc3IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjExLjg3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MTEuODc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYxMS44NzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjExLjg3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU5OS45MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5OS45MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShPUFRJT05TKSA0Mi4wNjIxIFRqCi1bMSAwIDAgMSAxMzIuMDk0IDU5OS45MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy4wNzYgLTU5OS45MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0NS44NzMgNTk5LjkyMiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTk5LjkyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01OTkuOTIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU5OS45MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNCkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTk5LjkyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU4Ny45NjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi41LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShNRU1PUikgMzcuNjM4NyBUagotNjUgVEptCi0oWSkgNy4xOTMgVGoKLS0yNTAgVEptCi0oTUFOKSAyMy4yNDI3IFRqCi0zNSBUSm0KLShBKSA3LjE5MyBUagotNDAgVEptCi0oR0VNRU5UKSA0MS41MDQyIFRqCi1bMSAwIDAgMSAyMDcuOSA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTIuODgxIC01ODcuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjEuNDEyIDU4Ny45NjcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNTg3Ljk2NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg1KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuODU1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTc2LjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTc2LjAxMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLjYuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFJFQ08pIDI2LjU3MDMgVGoKLTUwIFRKbQotKFZFUklORykgMzcuNjI4NyBUagotLTI1MCBUSm0KLShEKSA3LjE5MyBUagotNDAgVEptCi0oQSkgNy4xOTMgVGoKLTExMSBUSm0KLShUKSA2LjA4NzE1IFRqCi05MyBUSm0KLShBKSA3LjE5MyBUagotLTI1MCBUSm0KLShGUikgMTIuMTg0MyBUagotNDAgVEptCi0oT00pIDE2LjA0OTcgVGoKLS0yNTAgVEptCi0oRCkgNy4xOTMgVGoKLTQwIFRKbQotKEFNQSkgMjMuMjQyNyBUagotNDAgVEptCi0oR0VEKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKEZJTEVTKSAyNi41NzAzIFRqCi1bMSAwIDAgMSAyOTMuNDQ5IDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OC40MyAtNTc2LjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA4LjQ2NCA1NzYuMDEyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTc2LjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1NzYuMDEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDYpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjQuMDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NjQuMDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuNy4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUEVSRk9STUFOQ0UpIDczLjYyMzYgVGoKLS0yNTAgVEptCi0oTk8pIDE0LjM4NiBUagotNDAgVEptCi0oVEVTKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAxOTcuODQ3IDU2NC4wNTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMi44MjkgLTU2NC4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMS45NTggNTY0LjA1NiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTY0LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NjQuMDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU2NC4wNTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNikgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTY0LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU1Mi4xMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU1Mi4xMDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi44LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShDQSkgMTMuODM4MSBUagotMTM1IFRKbQotKFZFQSkgMjAuNDczMSBUagotMTExIFRKbQotKFRTKSAxMS42MjY0IFRqCi1bMSAwIDAgMSAxMzMuNTE5IDU1Mi4xMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzOC41IC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDguNzk5IDU1Mi4xMDEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTUyLjEwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU1Mi4xMDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTUyLjEwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjg1NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU0MC4xNDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMi45LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShBKSA3LjE5MyBUagotNTUgVEptCi0oVVRIT1IpIDM0LjMxMTIgVGoKLVsxIDAgMCAxIDEzMC45ODkgNTQwLjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM1Ljk3IC01NDAuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDUuMzIgNTQwLjE0NiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNTQwLjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC01NDAuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDU0MC4xNDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNykgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNTQwLjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTAuMjE5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTIwLjAwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTA4LjI2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGNoYXB0ZXIpIDI5LjMxOTkgVGoKLS0yNTAgVEptCi0oY29udGFpbnMpIDMzLjIwNTMgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShjb3ApIDE0LjM4NiBUagotMTAgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgMjEzLjgzNyA1MDguMjY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMy44MzcgLTUwOC4yNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMy44MzcgNTA4LjI2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjQzLjcyNSA1MDguMjY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0My43MjUgLTUwOC4yNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0Ni4yMTUgNTA4LjI2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShtYW4pIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0ocGFnZSwpIDIxLjMgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0obm90aGluZykgMzAuNDQ1NyBUagotLTI1MCBUSm0KLShlbHNlLikgMTcuOTgyNSBUagotWzEgMCAwIDEgNzIgNTA2LjEwOV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDk2LjE0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDczLjUxMyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi4xLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShOQU1FKSA2MC44MTg2IFRqCi1bMSAwIDAgMSA3MiA0NzMuNTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzEuODgwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTQ0MS42MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNDQxLjYzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDQ0MS42MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNDQxLjYzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDQ0MS42MzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDExNi44MzIgNDQxLjYzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTYuODMyIC00NDEuNjMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuODMyIDQ0MS42MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTIxLjgxMyA0NDEuNjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMS44MTMgLTQ0MS42MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMS44MTMgNDQxLjYzMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidW56aXAyKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxNjMuNjU2IDQ0MS42MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYzLjY1NiAtNDQxLjYzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY2LjE0NyA0NDEuNjMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC0pIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShibG9jay1zb3J0aW5nKSA1My4xMzA1IFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShjb21wcmVzc29yKSA0NS45Mjc2IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHYxLjAuNCkgMjQuOTA2NSBUagotWzEgMCAwIDEgMzI1LjEyOSA0NDEuNjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My4xMjkgLTIxLjkxNzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC00MTkuNzE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDQxOS43MTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA0MTkuNzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTQxOS43MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA0MTkuNzE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6Y2F0KSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMTYuODMyIDQxOS43MTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE2LjgzMiAtNDE5LjcxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5LjMyMiA0MTkuNzE1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC0pIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2VzKSA1NS4zMzIzIFRqCi0tMjUwIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShzdGRvdXQpIDI0LjM1ODYgVGoKLVsxIDAgMCAxIDIzNi42NTEgNDE5LjcxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUxIC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMzk3Ljc5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAzOTcuNzk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMzk3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0zOTcuNzk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMzk3Ljc5NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE1OC42NzUgMzk3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTguNjc1IC0zOTcuNzk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuMTY2IDM5Ny43OTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShyZWNvKSAxNy4xNDU2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVycykgMTEuNjE2NCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oZGFtYWdlZCkgMzUuOTY1IFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLVsxIDAgMCAxIDMyMy41NDUgMzk3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTEuNTQ1IC0xMi4xMTk1XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzUuNzE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNTMuMDgxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjIuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFNZTk9QU0lTKSAxMDUuNjI3IFRqCi1bMSAwIDAgMSA3MiAzNTIuODIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzEuNjIyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTMyMS4yMDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMzIxLjIwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDMyMS4yMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMzIxLjIwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDMyMS4yMDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDExNi44MzIgMzIxLjIwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTYuODMyIC0zMjEuMjAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuMzIyIDMyMS4yMDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWykgMy4zMTc1NSBUagotLTI1MCBUSm0KLSgtY2Rma3FzdHZ6VkwxMjM0NTY3ODkpIDEwMC4xNjQgVGoKLS0yNTAgVEptCi0oXSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKC4uLikgNy40NzE5NSBUagotLTYyMCBUSm0KLShdKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAyOTcuMDQ1IDMyMS4yMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI1LjA0NSAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTI5OS4yODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMjk5LjI4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDI5OS4yODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMjk5LjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDI5OS4yODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnVuemlwMikgNDEuODQyOSBUagotWzEgMCAwIDEgMTI4Ljc4NyAyOTkuMjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyOC43ODcgLTI5OS4yODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMS4yNzggMjk5LjI4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKC1ma3ZzVkwpIDMzLjc1MzMgVGoKLS0yNTAgVEptCi0oXSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKC4uLikgNy40NzE5NSBUagotLTYyMCBUSm0KLShdKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAyNDIuNTg5IDI5OS4yODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTcwLjU4OSAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTI3Ny4zNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMjc3LjM2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDI3Ny4zNjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMjc3LjM2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDI3Ny4zNjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpjYXQpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDExNi44MzIgMjc3LjM2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTYuODMyIC0yNzcuMzY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuMzIyIDI3Ny4zNjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWykgMy4zMTc1NSBUagotLTI1MCBUSm0KLSgtcykgNy4xOTMgVGoKLS0yNTAgVEptCi0oXSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShbKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKC4uLikgNy40NzE5NSBUagotLTYyMCBUSm0KLShdKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAyMDQuMDc0IDI3Ny4zNjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMyLjA3NCAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTI1NS40NDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgMjU1LjQ0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDI1NS40NDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMjU1LjQ0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDI1NS40NDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDJyZWNvdmVyKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAxNTguNjc1IDI1NS40NDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjY3NSAtMjU1LjQ0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYxLjE2NiAyNTUuNDQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZW5hbWUpIDM0LjMxMTIgVGoKLVsxIDAgMCAxIDE5NS40NzYgMjU1LjQ0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjMuNDc3IC0yMDQuNTk2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0My4wNjMzIC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjMzMiAtNTAuODUxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM5LjM5NSA1MC44NTE5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIpIDQuOTgxMyBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogNiA2Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMDUuNTE5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcxLjU5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuMTA5IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0Ny4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MDQuOTMgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDIuMy4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oREVTQ1JJUFRJT04pIDE0MS4xOCBUagotWzEgMCAwIDEgNzIgNzA0LjY3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjk0LjcwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjgzLjAxMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA2ODMuMDEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTY4My4wMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC41NiA2ODMuMDEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXByZXNzZXMpIDQ1LjkyNzYgVGoKLS0yNjggVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI2OCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjY4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2OSBUSm0KLShCdXJybykgMjMuMjQyNyBUagotMjUgVEptCi0od3MtV2hlZWxlcikgNDguMTI5MyBUagotLTI2OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI2OCBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMjY4IFRKbQotKHRlKSA3LjE5MyBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI2OCBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI2OCBUSm0KLShhbGdvcml0aG0sKSA0MS4yMzUyIFRqCi0tMjczIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY4IFRKbQotKEh1ZikgMTUuNDkxOCBUagotMjUgVEptCi0oZm1hbikgMjAuNDczMSBUagotLTI2OSBUSm0KLShjKSA0LjQyMzM5IFRqCi0xIFRKbQotKG9kKSA5Ljk2MjYgVGoKLS0xIFRKbQotKGkpIDIuNzY5NiBUagotMSBUSm0KLShuZy4pIDEyLjQ1MzMgVGoKLTcyIDY3MS4wNTcgVGQKLShDb21wcmVzc2lvbikgNTIuNTgyNiBUagotLTIwMyBUSm0KLShpcykgNi42NDUwNSBUagotLTIwNCBUSm0KLShnZW5lcmFsbHkpIDM3LjA3MDggVGoKLS0yMDMgVEptCi0oY29uc2lkZXJhYmx5KSA1MC45MDg5IFRqCi0tMjAzIFRKbQotKGJldHRlcikgMjIuNjg0OCBUagotLTIwNCBUSm0KLSh0KSAyLjc2OTYgVGoKLTEgVEptCi0oaGFuKSAxNC4zODYgVGoKLS0yMDQgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTIwMyBUSm0KLShhY2hpZSkgMjEuMDIxMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlZCkgOS40MDQ2OSBUagotLTIwMyBUSm0KLShieSkgOS45NjI2IFRqCi0tMjA0IFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yMDMgVEptCi0oY29uKSAxNC4zODYgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50aW9uYWwpIDMyLjA5OTUgVGoKLS0yMDMgVEptCi0oTFo3Ny9MWjc4LWJhc2VkKSA3My4wNDU4IFRqCi0tMjA0IFRKbQotKGNvbXByZXNzb3JzLCkgNTIuMjkzNyBUagotNzIgNjU5LjEwMSBUZAotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGFwcHJvYWNoZXMpIDQ0LjgxMTggVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHBlcmZvcm1hbmNlKSA1MC4zNDEgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFBQTSkgMTkuOTM1MiBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhbWlseSkgMjIuNjk0OCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShzdGF0aXN0aWNhbCkgMzcuNjM4NyBUagotLTI1MCBUSm0KLShjb21wcmVzc29ycy4pIDUyLjI5MzcgVGoKLVsxIDAgMCAxIDcyIDY1Ni45NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY0Ni45ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzNy4xODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKGNvbW1hbmQtbGluZSkgNTcuNTUzOSBUagotLTI1MCBUSm0KLShvcHRpb25zKSAyOS4zMzk5IFRqCi0tMjUwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLShkZWxpYmVyYXRlbHkpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0yNTAgVEptCi0oc2ltaWxhcikgMjcuNjc2MSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRob3NlKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oR05VKSAyMS41NzkgVGoKLVsxIDAgMCAxIDM2NC44NjkgNjM3LjE4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjQuODY5IC02MzcuMTg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjQuODY5IDYzNy4xODQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ3ppcCkgMjMuOTEwMiBUagotWzEgMCAwIDEgMzg4Ljc3OSA2MzcuMTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OC43NzkgLTYzNy4xODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4OC43NzkgNjM3LjE4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGlkZW50aWNhbC4pIDM2LjgwMTggVGoKLVsxIDAgMCAxIDcyIDYzNS4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyNS4wNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYxNS4yNjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEwMS44ODggNjE1LjI2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC02MTUuMjY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDUuMTc1IDYxNS4yNjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBlY3RzKSAyNS40NTQ0IFRqCi0tMzMwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMzAgVEptCi0obGlzdCkgMTIuMTg0MyBUagotLTMzMCBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzMCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zMjkgVEptCi0obmFtZXMpIDI1LjQ1NDQgVGoKLS0zMzAgVEptCi0odG8pIDcuNzUwOSBUagotLTMzMCBUSm0KLShhY2NvbXBhbikgNDAuMzg4NCBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzMwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzMCBUSm0KLShjb21tYW5kLWxpbmUpIDU3LjU1MzkgVGoKLS0zMzAgVEptCi0oXDAwM2Fncy4pIDIxLjMxIFRqCi0tMTA5OSBUSm0KLShFYWNoKSAxOS45MTUyIFRqCi0tMzMwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTMzMCBUSm0KLShpcykgNi42NDUwNSBUagotLTMzMCBUSm0KLShyZXBsYWNlZCkgMzMuNzQzMyBUagotLTMzMCBUSm0KLShieSkgOS45NjI2IFRqCi0tMzMwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMzAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotNzIgNjAzLjMxMSBUZAotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMzQ5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQ4IFRKbQotKGl0c2VsZiwpIDIyLjQxNTkgVGoKLS0zNzMgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTM0OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDkgVEptCi0obmFtZSkgMjEuNTc5IFRqCi1bMSAwIDAgMSAyMDQuNDQ0IDYwMy4zMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjQ0NCAtNjAzLjMxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjQ0NCA2MDMuMzExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9yaWdpbmFsX25hbWUuYnoyKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAzMDYuMDYzIDYwMy4zMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA2LjA2MyAtNjAzLjMxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA2LjA2MyA2MDMuMzExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMjEyIFRKbQotKEVhY2gpIDE5LjkxNTIgVGoKLS0zNDggVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTM0OSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zNDggVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMzQ5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OCBUSm0KLShzYW1lKSAyMC40NzMxIFRqCi0tMzQ5IFRKbQotKG1vZGlcMDAyY2F0aW9uKSA1MC4zNzA5IFRqCi0tMzQ5IFRKbQotKGRhdGUsKSAxOS4wODgzIFRqCi03MiA1OTEuMzU2IFRkCi0ocGVybWlzc2lvbnMsKSA1MC4wOTIgVGoKLS0zNDQgVEptCi0oYW5kLCkgMTYuODc2NiBUagotLTM0NCBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS0zMjUgVEptCi0ocG9zc2libGUsKSAzNS4xNDgxIFRqCi0tMzQ0IFRKbQotKG8pIDQuOTgxMyBUagotMjUgVEptCi0od25lcnNoaXApIDM2LjUyMjkgVGoKLS0zMjUgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMjUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzI2IFRKbQotKGNvcnJlc3BvbmRpbmcpIDU2Ljk5NiBUagotLTMyNSBUSm0KLShvcmlnaW5hbCwpIDMzLjQ4NDMgVGoKLS0zNDQgVEptCi0oc28pIDguODU2NzUgVGoKLS0zMjUgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTMyNSBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTMyNSBUSm0KLShwcm9wZXJ0aWVzKSAzOS44NDA0IFRqCi0tMzI1IFRKbQotKGNhbikgMTMuODI4MSBUagotLTMyNiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTMyNSBUSm0KLShjb3JyZWN0bHkpIDM1LjQwNzEgVGoKLTcyIDU3OS40IFRkCi0ocmVzdG9yZWQpIDMyLjA4OTUgVGoKLS0zMDggVEptCi0oYXQpIDcuMTkzIFRqCi0tMzA4IFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0zMDcgVEptCi0odGltZS4pIDIwLjIwNDIgVGoKLS00ODQgVEptCi0oRmlsZSkgMTUuNTAxOCBUagotLTMwOCBUSm0KLShuYW1lKSAyMS41NzkgVGoKLS0zMDggVEptCi0oaGFuZGxpbmcpIDM0Ljg2OTEgVGoKLS0zMDggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDcgVEptCi0obmFpKSAxMi4xNzQzIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMDggVEptCi0oaW4pIDcuNzUwOSBUagotLTMwOCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDggVEptCi0oc2Vuc2UpIDIxLjU3OSBUagotLTMwOCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzA4IFRKbQotKHRoZXJlKSAxOS45MTUyIFRqCi0tMzA3IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzA4IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0zMDggVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMzA4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMwOCBUSm0KLShwcmVzZXJ2aW5nKSA0Mi4wNTIxIFRqCi03MiA1NjcuNDQ1IFRkCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLS0zMzQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzMzIFRKbQotKG5hbWVzLCkgMjcuOTQ1MSBUagotLTM1NSBUSm0KLShwZXJtaXNzaW9ucywpIDUwLjA5MiBUagotLTM1NSBUSm0KLShvKSA0Ljk4MTMgVGoKLTI1IFRKbQotKHduZXJzaGlwcykgNDAuMzk4MyBUagotLTMzMyBUSm0KLShvcikgOC4yOTg4NSBUagotLTMzNCBUSm0KLShkYXRlcykgMjAuNDczMSBUagotLTMzNCBUSm0KLShpbikgNy43NTA5IFRqCi0tMzMzIFRKbQotKFwwMDJsZXN5c3RlbXMpIDQ0LjI4MzggVGoKLS0zMzQgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zMzQgVEptCi0obGFjaykgMTYuNTk3NyBUagotLTMzMyBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTMzNCBUSm0KLShjb25jZXB0cywpIDM3LjM0OTggVGoKLS0zNTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zMzMgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMzNCBUSm0KLShzZXJpb3VzKSAyOC4yMjQgVGoKLS0zMzQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi03MiA1NTUuNDkgVGQKLShuYW1lKSAyMS41NzkgVGoKLS0yNTAgVEptCi0obGVuZ3RoKSAyNC45MDY1IFRqCi0tMjUwIFRKbQotKHJlc3RyaWN0aW9ucywpIDQ2Ljc2NDQgVGoKLS0yNTAgVEptCi0oc3VjaCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShNUy1ET1MuKSA0MC4xMjk0IFRqCi1bMSAwIDAgMSA3MiA1NTMuMzMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NDMuMzcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MzMuNTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDUzMy41NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtNTMzLjU3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjM3OSA1MzMuNTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxMjEuMjU1IDUzMy41NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIxLjI1NSAtNTMzLjU3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIxLjI1NSA1MzMuNTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDE2My4wOTggNTMzLjU3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjMuMDk4IC01MzMuNTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjUuNTg5IDUzMy41NzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShieSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKGRlZikgMTIuNzIyMiBUagotMTAgVEptCi0oYXVsdCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyd3JpdGUpIDI4LjIxNDEgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGlzdGluZykgMjcuMTI4MiBUagotLTI1MCBUSm0KLShcMDAybGVzLikgMTkuMDk4MyBUagotLTYyMCBUSm0KLShJZikgNi42MzUwOSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShoYXBwZW4sKSAzMS4yNjI2IFRqCi0tMjUwIFRKbQotKHNwZWNpZnkpIDI4Ljc3MiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDQ5NS45NzcgNTMzLjU3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTUuOTc3IC01MzMuNTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTUuOTc3IDUzMy41NzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWYpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDUwNy45MzIgNTMzLjU3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDcuOTMyIC01MzMuNTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTAuNDIzIDUzMy41NzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwM2FnLikgMTcuNDM0NiBUagotWzEgMCAwIDEgNzIgNTMxLjQxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTIxLjQ1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTExLjY1NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI4NCBUSm0KLShubykgOS45NjI2IFRqCi0tMjg1IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI4NCBUSm0KLShuYW1lcykgMjUuNDU0NCBUagotLTI4NCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yODQgVEptCi0oc3BlY2lcMDAyZWQsKSAzNy45MDc3IFRqCi1bMSAwIDAgMSAxOTMuOTM1IDUxMS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkzLjkzNSAtNTExLjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkzLjkzNSA1MTEuNjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMjMuODIzIDUxMS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIzLjgyMyAtNTExLjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI2LjY1NSA1MTEuNjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXByZXNzZXMpIDQ1LjkyNzYgVGoKLS0yODQgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI4NSBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI4NCBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTI4NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg0IFRKbQotKHN0YW5kYXJkKSAzMy43NTMzIFRqCi0tMjg1IFRKbQotKG91dHB1dC4pIDI3Ljk1NTEgVGoKLS04MjUgVEptCi0oSW4pIDguMjk4ODUgVGoKLS0yODUgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjg0IFRKbQotKGNhc2UsKSAxOS42MzYzIFRqCi1bMSAwIDAgMSA0OTEuNzc4IDUxMS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkxLjc3OCAtNTExLjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkxLjc3OCA1MTEuNjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA1MjEuNjY2IDUxMS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTIxLjY2NiAtNTExLjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI0LjQ5OSA1MTEuNjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLTcyIDQ5OS42OTkgVGQKLShkZWNsaW5lKSAyOC43NzIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh3cml0ZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0odGVybWluYWwsKSAzNS42OTYgVGoKLS0yNTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvdWxkKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGVudGlyZWx5KSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKGluY29tcHJlaGVuc2libGUpIDcwLjgzNDEgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0odGhlcmVmb3JlKSAzNS45NTUgVGoKLS0yNTAgVEptCi0ocG9pbnRsZXNzLikgMzcuOTE3NyBUagotWzEgMCAwIDEgNzIgNDk3LjU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDg3LjU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzcuNzgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDExMy44NDMgNDc3Ljc4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuODQzIC00NzcuNzgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuMTc2IDQ3Ny43ODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXChvcikgMTEuNjE2NCBUagotWzEgMCAwIDEgMTMwLjEyNSA0NzcuNzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMC4xMjUgLTQ3Ny43ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMC4xMjUgNDc3Ljc4MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotLTYwMCBUSm0KLSgtZCkgMTEuOTU1MSBUagotWzEgMCAwIDEgMTc3Ljk0NiA0NzcuNzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny45NDYgLTQ3Ny43ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ny45NDYgNDc3Ljc4MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTIzNCBUSm0KLShkZWNvbXByZXNzZXMpIDU1LjMzMjMgVGoKLS0yMzQgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yMzQgVEptCi0oc3BlY2lcMDAyZWQpIDM1LjQxNyBUagotLTIzNSBUSm0KLShcMDAybGVzLikgMTkuMDk4MyBUagotLTYwOSBUSm0KLShGaWxlcykgMTkuMzc3MyBUagotLTIzNCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTIzNCBUSm0KLSh3ZXJlKSAxOS4zNTczIFRqCi0tMjM0IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTIzNSBUSm0KLShjcmVhdGVkKSAyOC43NjIgVGoKLS0yMzQgVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgNDQ1LjAxMiA0NzcuNzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NS4wMTIgLTQ3Ny43ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0NS4wMTIgNDc3Ljc4MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDc0LjkgNDc3Ljc4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzQuOSAtNDc3Ljc4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc3LjIzMyA0NzcuNzgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yMzQgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yMzQgVEptCi0oZGV0ZWN0ZWQpIDMzLjE5NTQgVGoKLTcyIDQ2NS44MjYgVGQKLShhbmQpIDE0LjM4NiBUagotLTI4MCBUSm0KLShpKSAyLjc2OTYgVGoKLTEgVEptCi0oZ25vcmVkLCkgMzAuMTU2OCBUagotLTI4NyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjc5IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcm5pbmcpIDI1LjQ1NDQgVGoKLS0yODAgVEptCi0oaXNzdWVkLikgMjcuMzk3MiBUagotWzEgMCAwIDEgMjE2LjAzMyA0NjUuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi4wMzMgLTQ2NS44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi4wMzMgNDY1LjgyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjQ1LjkyMSA0NjUuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NS45MjEgLTQ2NS44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0OC43MDUgNDY1LjgyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhdHRlbXB0cykgMzMuNzYzMyBUagotLTI3OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjgwIFRKbQotKGd1ZXNzKSAyMi4xMzY5IFRqCi0tMjc5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4MCBUSm0KLShcMDAybGVuYW1lKSAzNC4zMTEyIFRqCi0tMjc5IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzkgVEptCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMjgwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI3OSBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjgwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiA0NTMuODcxIFRkCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdzOikgMTMuODM4MSBUagotWzEgMCAwIDEgNzIgNDUxLjcxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI5LjcyMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC00MjEuOTkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDQyMS45OTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA0MjEuOTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTQyMS45OTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA0MjEuOTkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lLmJ6MikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTY0LjY1MyA0MjEuOTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NC42NTMgLTQyMS45OTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ny4xNDMgNDIxLjk5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShiZWNvbWVzKSAzNC44NTkxIFRqCi1bMSAwIDAgMSAyMDQuNDkzIDQyMS45OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjQ5MyAtNDIxLjk5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjQ5MyA0MjEuOTkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAyNTIuMzEzIDQyMS45OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgwLjMxMyAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTQwMC4wNzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNDAwLjA3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDQwMC4wNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNDAwLjA3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDQwMC4wNzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmlsZW5hbWUuYnopIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDE1OC42NzUgNDAwLjA3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTguNjc1IC00MDAuMDczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuMTY2IDQwMC4wNzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVjb21lcykgMzQuODU5MSBUagotWzEgMCAwIDEgMTk4LjUxNSA0MDAuMDczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC41MTUgLTQwMC4wNzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OC41MTUgNDAwLjA3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmaWxlbmFtZSkgNDcuODIwNSBUagotWzEgMCAwIDEgMjQ2LjMzNiA0MDAuMDczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3NC4zMzYgLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0zNzguMTU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDM3OC4xNTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAzNzguMTU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTM3OC4xNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAzNzguMTU1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZpbGVuYW1lLnRiejIpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE2NC42NTMgMzc4LjE1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUzIC0zNzguMTU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuMTQzIDM3OC4xNTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVjb21lcykgMzQuODU5MSBUagotWzEgMCAwIDEgMjA0LjQ5MyAzNzguMTU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC40OTMgLTM3OC4xNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC40OTMgMzc4LjE1NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmaWxlbmFtZS50YXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDI3Ni4yMjQgMzc4LjE1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuMjI0IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMzU2LjIzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAzNTYuMjM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMzU2LjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0zNTYuMjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMzU2LjIzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmaWxlbmFtZS50YnopIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE2NC42NTMgMzU2LjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUzIC0zNTYuMjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuMTQzIDM1Ni4yMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVjb21lcykgMzQuODU5MSBUagotWzEgMCAwIDEgMjA0LjQ5MyAzNTYuMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC40OTMgLTM1Ni4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC40OTMgMzU2LjIzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmaWxlbmFtZS50YXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDI3Ni4yMjQgMzU2LjIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuMjI0IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMzM0LjMxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAzMzQuMzE5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMzM0LjMxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0zMzQuMzE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMzM0LjMxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhbnlvdGhlcm5hbWUpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE2NC42NTMgMzM0LjMxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUzIC0zMzQuMzE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuMTQzIDMzNC4zMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYmVjb21lcykgMzQuODU5MSBUagotWzEgMCAwIDEgMjA0LjQ5MyAzMzQuMzE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNC40OTMgLTMzNC4zMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC40OTMgMzM0LjMxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhbnlvdGhlcm5hbWUub3V0KSA5NS42NDEgVGoKLVsxIDAgMCAxIDMwMC4xMzQgMzM0LjMxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjguMTM0IC0xMS40OTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMjIuODIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTIuNDAyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMzQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0zNDIgVEptCi0oZG9lcykgMTguMjYxNCBUagotLTM0MiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zNDMgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0zNDIgVEptCi0oaW4pIDcuNzUwOSBUagotLTM0MiBUSm0KLShvbmUpIDE0LjM4NiBUagotLTM0MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTM0MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDIgVEptCi0ocmVjb2duaXNlZCkgNDMuMTU4IFRqCi0tMzQyIFRKbQotKGVuZGluZ3MsKSAzMy40ODQzIFRqCi1bMSAwIDAgMSAzMDkuMzA1IDMxMi40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA5LjMwNSAtMzEyLjQwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA5LjMwNSAzMTIuNDAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC5iejIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDMzMy4yMTUgMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzMuMjE1IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzMuMjE1IDMxMi40MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzM5LjM0NCAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOS4zNDQgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzOS4zNDQgMzEyLjQwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSguYnopIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDM1Ny4yNzYgMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTcuMjc2IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTcuMjc2IDMxMi40MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzYzLjQwNSAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2My40MDUgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My40MDUgMzEyLjQwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgudGJ6MikgMjkuODg3OCBUagotWzEgMCAwIDEgMzkzLjI5MyAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5My4yOTMgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Ni43MDEgMzEyLjQwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShvcikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDA4LjQwOSAzMTIuNDAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwOC40MDkgLTMxMi40MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwOC40MDkgMzEyLjQwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgudGJ6KSAyMy45MTAyIFRqCi1bMSAwIDAgMSA0MzIuMzE5IDMxMi40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMyLjMxOSAtMzEyLjQwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMyLjMxOSAzMTIuNDAyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQzOC40NDggMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzguNDQ4IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzguNDQ4IDMxMi40MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDQ2OC4zMzYgMzEyLjQwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjguMzM2IC0zMTIuNDAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzEuNzQ0IDMxMi40MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcGxhaW5zKSA0MC45NTYyIFRqCi0tMzQyIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zNDIgVEptCi0oaXQpIDUuNTM5MjEgVGoKLTcyIDMwMC40NDYgVGQKLShjYW5ub3QpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oZ3Vlc3MpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG5hbWUpIDIxLjU3OSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLSh1c2VzKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotLTI1MCBUSm0KLShuYW1lKSAyMS41NzkgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgMzcwLjAwOSAzMDAuNDQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3MC4wMDkgLTMwMC40NDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3MC4wMDkgMzAwLjQ0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgub3V0KSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzOTMuOTIgMzAwLjQ0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTMuOTIgLTMwMC40NDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Ni40MSAzMDAuNDQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFwcGVuZGVkLikgNDAuNjY3MyBUagotWzEgMCAwIDEgNzIgMjk4LjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODguMzI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNzguNTI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFzKSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oY29tcHJlc3Npb24sKSA1Mi44NTE2IFRqCi0tMjUwIFRKbQotKHN1cHBseWluZykgMzkuMzAyNSBUagotLTI1MCBUSm0KLShubykgOS45NjI2IFRqCi0tMjUwIFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKGNhdXNlcykgMjYuMDAyNCBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS0yNTAgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI1MCBUSm0KLShvdXRwdXQuKSAyNy45NTUxIFRqCi1bMSAwIDAgMSA3MiAyNzYuMzcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNjYuNDA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNTYuNjExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDExMy44NDMgMjU2LjYxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuODQzIC0yNTYuNjExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuNDA5IDI1Ni42MTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1NyBUSm0KLShjb3JyZWN0bHkpIDM1LjQwNzEgVGoKLS0yNTggVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTI1NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU4IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1NyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1OCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTcgVEptCi0oY29uY2F0ZW5hdGlvbikgNTUuMzMyMyBUagotLTI1OCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1NyBUSm0KLSh0dykgOS45NjI2IFRqCi0xMCBUSm0KLShvKSA0Ljk4MTMgVGoKLS0yNTggVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTcgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI1OCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjU3IFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tNjY1IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI1OCBUSm0KLShyZXN1bHQpIDIyLjEzNjkgVGoKLS0yNTcgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDI0NC42NTYgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzkgVEptCi0oY29uY2F0ZW5hdGlvbikgNTUuMzMyMyBUagotLTIzOCBUSm0KLShvZikgOC4yOTg4NSBUagotLTIzOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzkgVEptCi0oY29ycmVzcG9uZGluZykgNTYuOTk2IFRqCi0tMjM5IFRKbQotKHVuY29tcHJlc3NlZCkgNTYuOTk2IFRqCi0tMjM4IFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tNjEzIFRKbQotKEludGUpIDE1LjQ5MTggVGoKLTE1IFRKbQotKGdyaXR5KSAxOC44MTk0IFRqCi0tMjM4IFRKbQotKHRlc3RpbmcpIDI2LjU3MDMgVGoKLS0yMzkgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDM4Mi4yNDcgMjQ0LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODIuMjQ3IC0yNDQuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODIuMjQ3IDI0NC42NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXQpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDM5NC4yMDIgMjQ0LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTQuMjAyIC0yNDQuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTQuMjAyIDI0NC42NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yMzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMzggVEptCi0oY29uY2F0ZW5hdGVkKSA1Mi4wMDQ4IFRqCi0tMjM5IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yMzkgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTIzOSBUSm0KLShpcykgNi42NDUwNSBUagotNzIgMjMyLjcgVGQKLShhbHNvKSAxNi4wNDk3IFRqCi0tMjUwIFRKbQotKHN1cHBvcnRlZC4pIDQxLjc4MzEgVGoKLVsxIDAgMCAxIDcyIDIzMC41NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIyMC41ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIxMC43ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMzk5IFRKbQotKGNhbikgMTMuODI4MSBUagotLTM5OSBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMzk5IFRKbQotKGNvbXByZXNzKSAzNy42Mjg3IFRqCi0tNDAwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzk5IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0zOTkgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTM5OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzk5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM5OSBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTM5OSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0zOTkgVEptCi0oYnkpIDkuOTYyNiBUagotLTQwMCBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2aW5nKSAxNy43MTM1IFRqCi0tMzk5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgNDA5LjY3IDIxMC43ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA5LjY3IC0yMTAuNzgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDkuNjcgMjEwLjc4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtYykgMTEuOTU1MSBUagotWzEgMCAwIDEgNDIxLjYyNSAyMTAuNzgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMS42MjUgLTIxMC43ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNS42MDIgMjEwLjc4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAzYWcuKSAxNy40MzQ2IFRqCi0tNzU3IFRKbQotKE11bHRpcGxlKSAzNC4zMjEyIFRqCi0tNDAwIFRKbQotKFwwMDJsKSA4LjMwODgxIFRqCi0xIFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tNDAwIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTM5OSBUSm0KLShiZSkgOS40MDQ2OSBUagotNzIgMTk4LjgyOCBUZAotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zNjcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNjcgVEptCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMzY3IFRKbQotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTM2NyBUSm0KLSh0aGlzLikgMTYuODg2NiBUagotLTEzMjEgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMzY3IFRKbQotKHJlc3VsdGluZykgMzQuODY5MSBUagotLTM2NyBUSm0KLShvdXRwdXRzKSAyOS4zMzk5IFRqCi0tMzY3IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM2NyBUSm0KLShmZWQpIDEyLjcyMjIgVGoKLS0zNjcgVEptCi0oc2VxdWVudGlhbGx5KSA0OC4xNDkyIFRqCi0tMzY2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNjcgVEptCi0oc3Rkb3V0LikgMjYuODQ5MiBUagotLTEzMjIgVEptCi0oQ29tcHJlc3Npb24pIDUyLjU4MjYgVGoKLS0zNjcgVEptCi0ob2YpIDguMjk4ODUgVGoKLTcyIDE4Ni44NzIgVGQKLShtdWx0aXBsZSkgMzMuMjE1MyBUagotLTI4OSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjg5IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yODkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjg5IFRKbQotKG1hbm5lcikgMjkuODc3OCBUagotLTI4OCBUSm0KLShnZW5lcmF0ZXMpIDM3LjYxODggVGoKLS0yODkgVEptCi0oYSkgNC40MjMzOSBUagotLTI4OSBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yODkgVEptCi0oY29udGFpbmluZykgNDIuMDYyMSBUagotLTI4OSBUSm0KLShtdWx0aXBsZSkgMzMuMjE1MyBUagotLTI4OSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjg5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI4OSBUSm0KLShyZXByZXNlbnRhdGlvbnMuKSA2Mi44MDQyIFRqCi0tODUzIFRKbQotKFN1Y2gpIDE5LjkyNTIgVGoKLS0yODkgVEptCi0oYSkgNC40MjMzOSBUagotLTI4OSBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLTcyIDE3NC45MTcgVGQKLShjYW4pIDEzLjgyODEgVGoKLS0zOTEgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zOTEgVEptCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMzkwIFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotLTM5MSBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMzkxIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDIzOC4xMTYgMTc0LjkxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzguMTE2IC0xNzQuOTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzguMTE2IDE3NC45MTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI2OC4wMDQgMTc0LjkxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjguMDA0IC0xNzQuOTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzEuODk3IDE3NC45MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0zOTEgVEptCi0oMC45LjApIDE5LjkyNTIgVGoKLS0zOTEgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zOTEgVEptCi0obCkgMi43Njk2IFRqCi0xIFRKbQotKGF0ZXIpIDE0LjkzMzkgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS03MzMgVEptCi0oRWFybGllcikgMjcuMTA4MiBUagotLTM5MSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbnMpIDI4LjIyNCBUagotLTM5MSBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDQ4LjA3MSAxNzQuOTE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0OC4wNzEgLTE3NC45MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0OC4wNzEgMTc0LjkxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDc3Ljk1OCAxNzQuOTE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Ny45NTggLTE3NC45MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4MS44NTIgMTc0LjkxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMzkxIFRKbQotKHN0b3ApIDE2LjYwNzcgVGoKLS0zOTEgVEptCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLTcyIDE2Mi45NjIgVGQKLShkZWNvbXByZXNzaW5nKSA1OS43NjU2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSA3MiAxNjAuODA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNTAuODQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNDEuMDQ0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6Y2F0KSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDE0MS4wNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtMTQxLjA0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjM3OSAxNDEuMDQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwob3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDExOC40ODYgMTQxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTguNDg2IC0xNDEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTguNDg2IDE0MS4wNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLS02MDAgVEptCi0oLWRjKSAxNy45MzI3IFRqCi1bMSAwIDAgMSAxNzIuMjg0IDE0MS4wNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTcyLjI4NCAtMTQxLjA0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcyLjI4NCAxNDEuMDQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3NlcykgNTUuMzMyMyBUagotLTI1MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI1MCBUSm0KLShzcGVjaVwwMDJlZCkgMzUuNDE3IFRqCi0tMjUwIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS0yNTAgVEptCi0ob3V0cHV0LikgMjcuOTU1MSBUagotWzEgMCAwIDEgNzIgMTM4Ljg4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTI4LjkyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTE5LjEyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCAxMTkuMTI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTExOS4xMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC44NjYgMTE5LjEyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjk5IFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLS0yOTkgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudHMpIDMzLjc2MzMgVGoKLS0yOTkgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI5OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTkgVEptCi0oZW4pIDkuNDA0NjkgVGoKLTQwIFRKbQotKHZpcm9ubWVudCkgNDAuOTU2MiBUagotLTI5OCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFyaWFibGVzKSAzMC45ODM3IFRqCi1bMSAwIDAgMSAzMTYuOTAzIDExOS4xMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE2LjkwMyAtMTE5LjEyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE2LjkwMyAxMTkuMTI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaSVAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzNDYuNzkxIDExOS4xMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQ2Ljc5MSAtMTE5LjEyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ5Ljc2OSAxMTkuMTI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNjcuMTMzIDExOS4xMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzY3LjEzMyAtMTE5LjEyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY3LjEzMyAxMTkuMTI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaSVApIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDM5MS4wNDMgMTE5LjEyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTEuMDQzIC0xMTkuMTI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTEuMDQzIDExOS4xMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI5OSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjk5IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yOTkgVEptCi0ob3JkZXIpIDIxLjAyMTEgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMTEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTkgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI5OSBUSm0KLShwcm9jZXNzKSAyOS44Nzc4IFRqCi0tMjk5IFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLTcyIDEwNy4xNzEgVGQKLShiZWZvcmUpIDI1LjQ0NDUgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ3VtZW50cykgMzMuNzYzMyBUagotLTI1MCBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbW1hbmQpIDM5LjI5MjUgVGoKLS0yNTAgVEptCi0obGluZS4pIDE3LjQzNDYgVGoKLS0zMTAgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI1MCBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY29uKSAxNC4zODYgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW5pZW50KSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHN1cHBseSkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudHMuKSAzNi4yNTM5IFRqCi1bMSAwIDAgMSA3MiAxMDUuMDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05NS4wNTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4NS4yNTM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjk0IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk0IFRKbQotKGFsKSA3LjE5MyBUagotMTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5cykgMTMuMjgwMSBUagotLTI5NCBUSm0KLShwZXJmb3JtZWQsKSA0My45ODQ5IFRqCi0tMzA1IFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0yOTQgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yOTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk0IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yOTQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjkzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk0IFRKbQotKHNsaWdodGx5KSAyOS44OTc4IFRqCi0tMjk0IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2VyKSAxMi43MjIyIFRqCi0tMjk0IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0yOTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk0IFRKbQotKG9yaWdpbmFsLikgMzMuNDg0MyBUagotLTg4NCBUSm0KLShGaWxlcykgMTkuMzc3MyBUagotLTI5NCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI5NCBUSm0KLShsZXNzKSAxNC45NDM5IFRqCi0tMjk0IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLTcyIDczLjI5ODIgVGQKLShhYm91dCkgMjIuMTM2OSBUagotLTI0NiBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI0NiBUSm0KLShodW5kcmVkKSAzMi42NDc0IFRqCi0tMjQ1IFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNDYgVEptCi0odGVuZCkgMTcuMTU1NiBUagotLTI0NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQ2IFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI0NiBUSm0KLShsKSAyLjc2OTYgVGoKLTEgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGdlcikgMTIuNzIyMiBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTI0NyBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTI0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDYgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNDUgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjQ2IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI0NiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQ2IFRKbQotKGNvbnN0YW50KSAzMy4yMDUzIFRqCi0tMjQ2IFRKbQotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmhlYWQpIDI2LjU1MDMgVGoKLS0yNDUgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDYgVEptCi0ocmUpIDcuNzQwOTQgVGoKLTE1IFRKbQotKGdpb24pIDE3LjcxMzUgVGoKLS0yNDYgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDcyIDUwLjg1MThdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuMzMyIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzkuMzk1IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMykgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiA3IDcKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEwNS41MTkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzEuNTkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3Ny4xMDkgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDI2Ni4wNzEgNzQ3LjA4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC03NDEuNTU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDUwKSA5Ljk2MjYgVGoKLS0yNjQgVEptCi0oYnl0ZXMuKSAyMy41MjE3IFRqCi0tMzUxIFRKbQotKFJhbmRvbSkgMzMuNzYzMyBUagotLTI2NCBUSm0KLShkYXQpIDEyLjE3NDMgVGoKLTEgVEptCi0oYSkgNC40MjMzOSBUagotLTI2NCBUSm0KLShcKGluY2x1ZGluZykgNDAuOTU2MiBUagotLTI2NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjQgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjYzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY0IFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLS0yNjQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjYzIFRKbQotKGNvbXByZXNzb3JzXCkpIDUzLjEyMDYgVGoKLS0yNjQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjQgVEptCi0oY29kZWQpIDIzLjc5MDcgVGoKLS0yNjMgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjY0IFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMjY0IFRKbQotKDguMDUpIDE3LjQzNDYgVGoKLS0yNjMgVEptCi0oYml0cykgMTQuMzk2IFRqCi0tMjY0IFRKbQotKHBlcikgMTIuNzIyMiBUagotLTI2NCBUSm0KLShieXRlLCkgMTkuNjQ2MiBUagotLTI2NyBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2aW5nKSAxNy43MTM1IFRqCi0tMjY0IFRKbQotKGFuKSA5LjQwNDY5IFRqCi03MiA2OTguMDgyIFRkCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBhbnNpb24pIDM1Ljk3NDkgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYXJvdW5kKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKDAuNSUuKSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiA2OTUuOTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02ODYuMDgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzYuMjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFzKSAxMS4wNjg0IFRqCi0tMjY4IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNjggVEptCi0oc2VsZi1jaGVjaykgNDAuOTM2MyBUagotLTI2OSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNjggVEptCi0oeW91cikgMTguMjYxNCBUagotLTI2OCBUSm0KLShwcm90ZWN0aW9uLCkgNDIuODg5IFRqCi1bMSAwIDAgMSAyMTcuMjczIDY3Ni4yODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE3LjI3MyAtNjc2LjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE3LjI3MyA2NzYuMjgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyNDcuMTYxIDY3Ni4yODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ3LjE2MSAtNjc2LjI4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ5LjgzMyA2NzYuMjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVzZXMpIDE3LjE1NTYgVGoKLS0yNjggVEptCi0oMzItYml0KSAyMy44MDA3IFRqCi0tMjY4IFRKbQotKENSQ3MpIDIzLjgxMDYgVGoKLS0yNjkgVEptCi0odG8pIDcuNzUwOSBUagotLTI2OCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjggVEptCi0oc3VyZSkgMTYuNTk3NyBUagotLTI2OCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjY4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2OSBUSm0KLShkZWNvbXByZXNzZWQpIDU2LjQzODEgVGoKLS0yNjggVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0yNjggVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNjggVEptCi0oYSkgNC40MjMzOSBUagotLTI2OCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNjkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDY2NC4zMjggVGQKLShpZGVudGljYWwpIDM0LjMxMTIgVGoKLS0yMDAgVEptCi0odG8pIDcuNzUwOSBUagotLTE5OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMDAgVEptCi0ob3JpZ2luYWwuKSAzMy40ODQzIFRqCi0tNTg2IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yMDAgVEptCi0oZ3VhcmRzKSAyNi41NjAzIFRqCi0tMTk5IFRKbQotKGFnKSA5LjQwNDY5IFRqCi01IFRKbQotKGFpbnN0KSAxOC44MTk0IFRqCi0tMjAwIFRKbQotKGNvcnJ1cHRpb24pIDQxLjUwNDIgVGoKLS0xOTkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMDAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjAwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0xOTkgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLS0yMTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0xOTkgVEptCi0oYWcpIDkuNDA0NjkgVGoKLTUgVEptCi0oYWluc3QpIDE4LjgxOTQgVGoKLS0yMDAgVEptCi0odW5kZXRlY3RlZCkgNDMuMTU4IFRqCi0tMjAwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWdzKSAxMy44MzgxIFRqCi0tMTk5IFRKbQotKGluKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDUxMC4xMTIgNjY0LjMyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTAuMTEyIC02NjQuMzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTAuMTEyIDY2NC4zMjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDU0MCA2NjQuMzI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNjY0LjMyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjUyLjM3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKGhvcGVmdWxseSkgNDEuNTA0MiBUagotLTI3NSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyeSkgMTIuNzIyMiBUagotLTI3NCBUSm0KLSh1bmxpaykgMjAuNDgzMSBUagotMTAgVEptCi0oZWx5XCkuKSAxNy45ODI1IFRqCi0tMzg0IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI3NSBUSm0KLShjaGFuY2VzKSAzMS41MzE2IFRqCi0tMjc1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjc1IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNzQgVEptCi0oY29ycnVwdGlvbikgNDEuNTA0MiBUagotLTI3NSBUSm0KLShnb2luZykgMjIuNjk0OCBUagotLTI3NSBUSm0KLSh1bmRldGVjdGVkKSA0My4xNTggVGoKLS0yNzQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNzUgVEptCi0obWljcm9zY29waWMsKSA1MS4xODc4IFRqCi0tMjgxIFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMjc1IFRKbQotKG9uZSkgMTQuMzg2IFRqCi0tMjc0IFRKbQotKGNoYW5jZSkgMjcuNjU2MiBUagotLTI3NSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjc1IFRKbQotKGZvdXIpIDE2LjU5NzcgVGoKLTcyIDY0MC40MTcgVGQKLShiaWxsaW9uKSAyNi4wMjIzIFRqCi0tMjc5IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI3OSBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMjc5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI4MCBUSm0KLShwcm9jZXNzZWQuKSA0MS43NzMyIFRqCi0tNzk1IFRKbQotKEJlKSAxMS4wNjg0IFRqCi0tMjc5IFRKbQotKGEpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcmUsKSAxNC42NTUgVGoKLS0yODYgVEptCi0odGhvdWdoLCkgMzAuMTY2OCBUagotLTI4NyBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjc5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3OSBUSm0KLShjaGVjaykgMjMuMjMyOCBUagotLTI3OSBUSm0KLShvY2N1cnMpIDI2LjAwMjQgVGoKLS0yNzkgVEptCi0odXBvbikgMTkuOTI1MiBUagotLTI3OSBUSm0KLShkZWNvbXByZXNzaW9uLCkgNjIuMjU2MyBUagotLTI4NyBUSm0KLShzbykgOC44NTY3NSBUagotLTI3OSBUSm0KLShpdCkgNS41MzkyMSBUagotLTI3OSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNzkgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI4MCBUSm0KLSh0ZWxsKSAxMi43MzIyIFRqCi0tMjc5IFRKbQotKHlvdSkgMTQuOTQzOSBUagotNzIgNjI4LjQ2MiBUZAotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yMzcgVEptCi0oc29tZXRoaW5nKSA0MS41MTQyIFRqCi0tMjM2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjM3IFRKbQotKHdyb25nLikgMjcuOTQ1MSBUagotLTYxMSBUSm0KLShJdCkgNi4wODcxNSBUagotLTIzNyBUSm0KLShjYW4nKSAxNy4xNDU2IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yMzcgVEptCi0oaGVscCkgMTcuMTU1NiBUagotLTIzNyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMzYgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTIzNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzcgVEptCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLS0yMzcgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0yMzYgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLS02MTIgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjM2IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIzNyBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDQ1OC4xNTkgNjI4LjQ2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTguMTU5IC02MjguNDYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTguMTU5IDYyOC40NjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDJyZWNvdmVyKSA3MS43MzA3IFRqCi1bMSAwIDAgMSA1MjkuODkgNjI4LjQ2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MjkuODkgLTYyOC40NjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzMi4yNDkgNjI4LjQ2MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi03MiA2MTYuNTA3IFRkCi0odHJ5KSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oZGFtYWdlZCkgMzUuOTY1IFRqCi0tMjUwIFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi1bMSAwIDAgMSA3MiA2MTQuMzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYwNC41MDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5NC43MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuKSAyNy4xMTgyIFRqCi0tMjk4IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi0tNDA2IFRKbQotKDApIDQuOTgxMyBUagotLTI5OCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yOTggVEptCi0oYSkgNC40MjMzOSBUagotLTI5OCBUSm0KLShub3JtYWwpIDI4LjIyNCBUagotLTI5OCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4aXQsKSAxMy4wMTEyIFRqCi0tMzEwIFRKbQotKDEpIDQuOTgxMyBUagotLTI5OCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yOTcgVEptCi0oZW4pIDkuNDA0NjkgVGoKLTQwIFRKbQotKHZpcm9ubWVudGFsKSA0OC4xNDkyIFRqCi0tMjk4IFRKbQotKHByb2JsZW1zKSAzNy4wODA4IFRqCi0tMjk4IFRKbQotKFwoXDAwMmxlKSAxNi4wNDk3IFRqCi0tMjk4IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI5OCBUSm0KLShmb3VuZCwpIDI1LjczMzQgVGoKLS0zMTAgVEptCi0oaW4pIDcuNzUwOSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbGlkKSAxNC45NDM5IFRqCi0tMjk4IFRKbQotKFwwMDNhZ3MsKSAyMS4zMSBUagotLTMxMCBUSm0KLShJL08pIDEzLjI4MDEgVGoKLS0yOTggVEptCi0oZXJyb3JzLCkgMjUuNzIzNCBUagotLTMxMCBUSm0KLShldGMuXCksKSAxOS45MTUyIFRqCi0tMzEwIFRKbQotKDIpIDQuOTgxMyBUagotLTI5OCBUSm0KLSh0bykgNy43NTA5IFRqCi03MiA1ODIuNzUzIFRkCi0oaW5kaWNhdGUpIDMxLjU0MTYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShjb3JydXB0KSAyOC43NzIgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUsKSAxNS4yMjI5IFRqCi0tMjUwIFRKbQotKDMpIDQuOTgxMyBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oaW50ZXJuYWwpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oY29uc2lzdGVuYykgNDEuNTA0MiBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjUwIFRKbQotKFwoZSkgNy43NDA5NCBUagotMTUgVEptCi0oZywpIDcuNDcxOTUgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1Z1wpKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGNhdXNlZCkgMjcuMTA4MiBUagotWzEgMCAwIDEgNDQzLjA2NSA1ODIuNzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0My4wNjUgLTU4Mi43NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0My4wNjUgNTgyLjc1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDcyLjk1MyA1ODIuNzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NTMgLTU4Mi43NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3NS40NDQgNTgyLjc1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHBhbmljLikgMjQuMDY5NiBUagotWzEgMCAwIDEgNzIgNTgwLjU5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTcwLjc1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTQ4LjExOCBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi40LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShPUFRJT05TKSA5Mi45ODM5IFRqCi1bMSAwIDAgMSA3MiA1NDcuODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUyOC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUxNi40NzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWMpIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLS1zdGRvdXQpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDEzNy43NTMgNTE2LjQ3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTY4LjI0NDEgLTAuMTU0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTE2LjMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggNTA0LjUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzKSAzOS44NTA0IFRqCi0tMjUwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI1MCBUSm0KLShvdXRwdXQuKSAyNy45NTUxIFRqCi1bMSAwIDAgMSA3MiA1MDIuMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODguNjUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzguODU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1kKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tZGVjb21wcmVzcykgNzEuNzMwNyBUagotWzEgMCAwIDEgMTYxLjY2NCA0NzguODU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTIuMTU0NCAtMS41MzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NzcuMzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0NjYuODk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yY2UpIDE3LjE0NTYgVGoKLS0yOTYgVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLVsxIDAgMCAxIDIwMC4yMTQgNDY2Ljg5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDAuMjE0IC00NjYuODk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDAuMjE0IDQ2Ni44OTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIzMC4xMDIgNDY2Ljg5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzAuMTAyIC00NjYuODk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzAuMTAyIDQ2Ni44OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjM1LjY1OSA0NjYuODk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNS42NTkgLTQ2Ni44OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNS42NTkgNDY2Ljg5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidW56aXAyKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyNzcuNTAyIDQ2Ni44OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc3LjUwMiAtNDY2Ljg5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjgwLjQ1NCA0NjYuODk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyOTcuNzkxIDQ2Ni44OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk3Ljc5MSAtNDY2Ljg5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk3Ljc5MSA0NjYuODk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6Y2F0KSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzMjcuNjc5IDQ2Ni44OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI3LjY3OSAtNDY2Ljg5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMwLjYzMSA0NjYuODk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFyZSkgMTIuMTY0MyBUagotLTI5NiBUSm0KLShyZWFsbHkpIDIyLjY4NDggVGoKLS0yOTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk3IFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yOTYgVEptCi0ocHJvZ3JhbSwpIDM2LjI0MzkgVGoKLS0zMDggVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk2IFRKbQotKGRlY2lzaW9uKSAzMy4yMDUzIFRqCi0tMjk3IFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0xMDggNDU0Ljk0NCBUZAotKHdoYXQpIDE5LjM2NzMgVGoKLS0zMDMgVEptCi0oYWN0aW9ucykgMjguMjI0IFRqCi0tMzAzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDMgVEptCi0odGFrKSAxMi4xNzQzIFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzAzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzAzIFRKbQotKGRvbmUpIDE5LjM2NzMgVGoKLS0zMDMgVEptCi0ob24pIDkuOTYyNiBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDMgVEptCi0oYmFzaXMpIDE5LjkyNTIgVGoKLS0zMDMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMDMgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zMDMgVEptCi0obmFtZSkgMjEuNTc5IFRqCi0tMzAzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzAzIFRKbQotKHVzZWQuKSAyMC43NTIxIFRqCi0tOTM5IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0zMDMgVEptCi0oXDAwM2FnKSAxNC45NDM5IFRqCi0tMzAzIFRKbQotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnJpZGVzKSAyNy4xMDgyIFRqCi0tMzAzIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMDMgVEptCi0obWVjaGFuaXNtLCkgNDcuODcwMyBUagotLTMxNiBUSm0KLShhbmQpIDE0LjM4NiBUagotMTA4IDQ0Mi45ODggVGQKLShmb3JjZXMpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0oYnppcDIpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzLikgNDkuNTI0MSBUagotWzEgMCAwIDEgNzIgNDQwLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuODY2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDI3LjEyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDE3LjMyMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgteikgMTEuOTU1MSBUagotLTYwMCBUSm0KLSgtLWNvbXByZXNzKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxNDkuNzA5IDQxNy4zMjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04MC4xOTkzIC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQxNS43ODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0MDUuMzY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShjb21wbGVtZW50KSA0OS4yNTUxIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE4Ny45NjkgNDA1LjM2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODcuOTY5IC00MDUuMzY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODcuOTY5IDQwNS4zNjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWQpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDE5OS45MjQgNDA1LjM2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTkuOTI0IC00MDUuMzY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTkuOTI0IDQwNS4zNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMzEwIFRKbQotKGZvcmNlcykgMjQuMzM4NiBUagotLTI1MCBUSm0KLShjb21wcmVzc2lvbiwpIDUyLjg1MTYgVGoKLS0yNTAgVEptCi0ocmUpIDcuNzQwOTQgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhcmRsZXNzKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTIwIFRKbQotKG9rYXRpb24pIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0obmFtZS4pIDI0LjA2OTYgVGoKLVsxIDAgMCAxIDcyIDQwMy4yMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjg2NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg0NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM4OS41XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNzkuNzAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC10KSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tdGVzdCkgMzUuODY1NCBUagotWzEgMCAwIDEgMTI1Ljc5OCAzNzkuNzAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTYuMjg4OSAtMC4xNTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzkuNTQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMzY3Ljc0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShDaGVjaykgMjUuNDU0NCBUagotLTI3MCBUSm0KLShpbnRlKSAxNC45NDM5IFRqCi0xNSBUSm0KLShncml0eSkgMTguODE5NCBUagotLTI3MSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzEgVEptCi0oc3BlY2lcMDAyZWQpIDM1LjQxNyBUagotLTI3MCBUSm0KLShcMDAybGVcKHNcKSwpIDI1LjczMzQgVGoKLS0yNzYgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjcwIFRKbQotKGRvbicpIDE4LjI2MTQgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI3MCBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMjcxIFRKbQotKHRoZW0uKSAyMi40MTU5IFRqCi0tNzQyIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNzEgVEptCi0ocmVhbGx5KSAyMi42ODQ4IFRqCi0tMjcwIFRKbQotKHBlcmZvcm1zKSAzNS45NjUgVGoKLS0yNzAgVEptCi0oYSkgNC40MjMzOSBUagotLTI3MSBUSm0KLSh0cmlhbCkgMTYuMDQ5NyBUagotLTI3MCBUSm0KLShkZWNvbXByZXMtKSA0Ni40NzU1IFRqCi0xMDggMzU1Ljc5MSBUZAotKHNpb24pIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0odGhybykgMTYuMDQ5NyBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMTUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5KSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShyZXN1bHQuKSAyNC42Mjc1IFRqCi1bMSAwIDAgMSA3MiAzNTMuNjM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMzkuOTI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMzAuMTI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1mKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tZm9yY2UpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEzMS43NzYgMzMwLjEyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTYyLjI2NjUgLTAuMTU0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI5Ljk3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDMxOC4xNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3JjZSkgMTcuMTQ1NiBUagotLTMzOCBUSm0KLShvKSA0Ljk4MTMgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ3cml0ZSkgMjguMjE0MSBUagotLTMzOSBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzOCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0zMzggVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS0xMTUwIFRKbQotKE5vcm1hbGx5KSAzOC4xODY2IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyODkuODMxIDMxOC4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg5LjgzMSAtMzE4LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg5LjgzMSAzMTguMTcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzMTkuNzE5IDMxOC4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE5LjcxOSAtMzE4LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIzLjA4OSAzMTguMTcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0zMzggVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzM5IFRKbQotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcndyaXRlKSAyOC4yMTQxIFRqCi0tMzM4IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhpc3RpbmcpIDI3LjEyODIgVGoKLS0zMzggVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMzM4IFRKbQotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tMTE1MCBUSm0KLShBbHNvKSAxOC44MTk0IFRqCi0tMzM5IFRKbQotKGZvcmNlcykgMjQuMzM4NiBUagotWzEgMCAwIDEgMTA4IDMwNi4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA4IC0zMDYuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMzA2LjIxNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTM3Ljg4OCAzMDYuMjE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy44ODggLTMwNi4yMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0MC4zNzkgMzA2LjIxNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJyZWFrKSAyMi4xMjY5IFRqCi0tMjUwIFRKbQotKGhhcmQpIDE3LjcwMzUgVGoKLS0yNTAgVEptCi0obGlua3MpIDE5LjM3NzMgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShvdGhlcndpc2UpIDM4LjczNDYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGRuJykgMjYuMDEyMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKGRvLikgMTIuNDUzMyBUagotWzEgMCAwIDEgNzIgMzA0LjY4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk0LjgzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDI4NC40MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEzNy44ODggMjg0LjQxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzcuODg4IC0yODQuNDE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDEuMjExIDI4NC40MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0obm9ybWFsbHkpIDM1Ljk3NDkgVGoKLS0zMzQgVEptCi0oZGVjbGluZXMpIDMyLjY0NzQgVGoKLS0zMzMgVEptCi0odG8pIDcuNzUwOSBUagotLTMzNCBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMzMzIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0zMzQgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zMzMgVEptCi0oZG9uJykgMTguMjYxNCBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzM0IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMzMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzM0IFRKbQotKGNvcnJlY3QpIDI3LjY1NjIgVGoKLS0zMzMgVEptCi0obWFnaWMpIDI0LjM0ODYgVGoKLS0zMzQgVEptCi0oaGVhZGVyKSAyNi41NTAzIFRqCi0tMzMzIFRKbQotKGJ5dGVzLikgMjMuNTIxNyBUagotLTU2MSBUSm0KLShJZikgNi42MzUwOSBUagotLTMzNCBUSm0KLShmb3JjZWQpIDI1LjQ0NDUgVGoKLTEwOCAyNzIuNDYxIFRkCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDExMS4zMTggMjcyLjQ2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTEuMzE4IC0yNzIuNDYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTEuMzE4IDI3Mi40NjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWYpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDEyMy4yNzMgMjcyLjQ2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjMuMjczIC0yNzIuNDYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjMuMjczIDI3Mi40NjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCksKSA1LjgwODIgVGoKLS0yNTAgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0od2UpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShwYXNzKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKHN1Y2gpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI1MCBUSm0KLSh0aHJvdWdoKSAzMC45OTM2IFRqCi0tMjUwIFRKbQotKHVubW9kaVwwMDJlZC4pIDQ3Ljg4MDMgVGoKLS0zMTAgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MCBUSm0KLShHTlUpIDIxLjU3OSBUagotWzEgMCAwIDEgNDEyLjU4NSAyNzIuNDYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMi41ODUgLTI3Mi40NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMi41ODUgMjcyLjQ2MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShnemlwKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA0MzYuNDk2IDI3Mi40NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM2LjQ5NiAtMjcyLjQ2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM4Ljk4NiAyNzIuNDYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMuKSAxMC43ODk1IFRqCi1bMSAwIDAgMSA3MiAyNzAuMzA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNTYuNTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNDYuNzk1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1rKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0ta2VlcCkgMzUuODY1NCBUagotWzEgMCAwIDEgMTI1Ljc5OCAyNDYuNzk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTYuMjg4OSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNDUuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMjM0Ljg0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEspIDcuMTkzIFRqCi0yNSBUSm0KLShlZXApIDEzLjgyODEgVGoKLS0yNTAgVEptCi0oXChkb24nKSAyMS41NzkgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI1MCBUSm0KLShkZWxldGVcKSkgMjcuMTA4MiBUagotLTI1MCBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTI1MCBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjUwIFRKbQotKGR1cmluZykgMjYuMDEyMyBUagotLTI1MCBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotWzEgMCAwIDEgNzIgMjMyLjY4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuODY2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjE4Ljk3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjA5LjE3NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtcykgMTEuOTU1MSBUagotLTYwMCBUSm0KLSgtLXNtYWxsKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxMzEuNzc2IDIwOS4xNzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC02Mi4yNjY1IC0wLjE1NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwOS4wMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDE5Ny4yMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVkdWNlKSAyOS44Nzc4IFRqCi0tMzQ3IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTM0NyBUSm0KLSh1c2FnZSwpIDI1LjE3NTUgVGoKLS0zNzEgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzQ2IFRKbQotKGNvbXByZXNzaW9uLCkgNTIuODUxNiBUagotLTM3MSBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMzQ3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ3IFRKbQotKHRlc3RpbmcuKSAyOS4wNjA5IFRqCi0tMTIwMSBUSm0KLShGaWxlcykgMTkuMzc3MyBUagotLTM0NyBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zNDcgVEptCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMzQ2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ3IFRKbQotKHRlc3RlZCkgMjMuMjQyNyBUagotMTA4IDE4NS4yNjQgVGQKLSh1c2luZykgMjEuNTg5IFRqCi0tMzg4IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zODggVEptCi0obW9kaVwwMDJlZCkgMzUuNDI3IFRqCi0tMzg4IFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTM4OSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTM4OCBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMzg4IFRKbQotKHJlcXVpcmVzKSAzMi4wODk1IFRqCi0tMzg4IFRKbQotKDIuNSkgMTIuNDUzMyBUagotLTM4OCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMzg4IFRKbQotKHBlcikgMTIuNzIyMiBUagotLTM4OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTM4OSBUSm0KLShieXRlLikgMTkuNjQ2MiBUagotLTE0NDggVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTM4OSBUSm0KLShtZWFucykgMjUuNDU0NCBUagotLTM4OCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzg4IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTM4OCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0zODggVEptCi0oYmUpIDkuNDA0NjkgVGoKLTEwOCAxNzMuMzA5IFRkCi0oZGVjb21wcmVzc2VkKSA1Ni40MzgxIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oMjMwMGspIDI0LjkwNjUgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGFsYmVpdCkgMjIuMTM2OSBUagotLTI1MCBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oaGFsZikgMTUuNDkxOCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0oc3BlZWQuKSAyNS4xNzU1IFRqCi1bMSAwIDAgMSA3MiAxNzEuMTUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjEuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMTUxLjUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKER1cmluZykgMjguMjI0IFRqCi0tMjUyIFRKbQotKGNvbXByKSAyNS40NTQ0IFRqCi0xIFRKbQotKGVzc2lvbiwpIDI3LjM5NzIgVGoKLVsxIDAgMCAxIDE5NC4wOSAxNTEuNTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk0LjA5IC0xNTEuNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5NC4wOSAxNTEuNTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXMpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDIwNi4wNDYgMTUxLjUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNi4wNDYgLTE1MS41MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA4LjU1MSAxNTEuNTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2VsZWN0cykgMjYuNTYwMyBUagotLTI1MSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUyIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUxIFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yNTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTIgVEptCi0oMjAwaywpIDIyLjQxNTkgVGoKLS0yNTEgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTIgVEptCi0obGltaXRzKSAyMi43MDQ4IFRqCi0tMjUxIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI1MiBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTEgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MiBUSm0KLShhcm91bmQpIDI3LjY2NjEgVGoKLS0yNTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUyIFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yNTEgVEptCi0oXDAwMmd1cmUsKSAyNS43MzM0IFRqCi0tMjUyIFRKbQotKGF0KSA3LjE5MyBUagotMTA4IDEzOS41NTQgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yODcgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBlbnNlKSAyNy42NjYxIFRqCi0tMjg3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg4IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yODcgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yODcgVEptCi0ocmF0aW8uKSAyMC43NTIxIFRqCi0tODQzIFRKbQotKEluKSA4LjI5ODg1IFRqCi0tMjg3IFRKbQotKHNob3J0LCkgMjIuNDE1OSBUagotLTI5NyBUSm0KLShpZikgNi4wODcxNSBUagotLTI4NyBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjg3IFRKbQotKG1hY2hpbmUpIDMzLjc1MzMgVGoKLS0yODcgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODcgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yODcgVEptCi0ob24pIDkuOTYyNiBUagotLTI4OCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yODcgVEptCi0oXCg4KSA4LjI5ODg1IFRqCi0tMjg3IFRKbQotKG1lKSAxMi4xNzQzIFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYWJ5dGVzKSAyNS40NTQ0IFRqCi0tMjg3IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjg3IFRKbQotKGxlc3NcKSwpIDIwLjc1MjEgVGoKLTEwOCAxMjcuNTk5IFRkCi0odXNlKSAxMy4yODAxIFRqCi1bMSAwIDAgMSAxMjMuNzcxIDEyNy41OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIzLjc3MSAtMTI3LjU5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIzLjc3MSAxMjcuNTk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1zKSAxMS45NTUxIFRqCi1bMSAwIDAgMSAxMzUuNzI2IDEyNy41OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM1LjcyNiAtMTI3LjU5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM4LjIxNiAxMjcuNTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyeXRoaW5nLikgMzUuNjk2IFRqCi0tNjIwIFRKbQotKFNlZSkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMjAuMDc5IDEyNy41OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtMjIwLjA3OSAtMTI3LjU5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIwLjA3OSAxMjcuNTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1FTU9SKSAzNy42Mzg3IFRqCi02NSBUSm0KLShZKSA3LjE5MyBUagotLTI1MCBUSm0KLShNQU4pIDIzLjI0MjcgVGoKLTM1IFRKbQotKEEpIDcuMTkzIFRqCi00MCBUSm0KLShHRU1FTlQpIDQxLjUwNDIgVGoKLVsxIDAgMCAxIDMzNy45NDYgMTI3LjU5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0zMzcuOTQ2IC0xMjcuNTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDAuNDM3IDEyNy41OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWzVdKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAzNTIuMDUzIDEyNy41OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUyLjA1MyAtMTI3LjU5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU0LjU0NCAxMjcuNTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJlbG8pIDE3LjE1NTYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMjUuNDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy44NjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44NDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTEuNzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMDEuOTM0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1xKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tcXVpZXQpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEzMS43NzYgMTAxLjkzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTYyLjI2NjUgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTAwLjM5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDg5Ljk3ODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oU3VwcHJlc3MpIDM1Ljk3NDkgVGoKLS0yMjEgVEptCi0obm9uLWVzc2VudGlhbCkgNTIuNTcyNiBUagotLTIyMCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXJuaW5nKSAyNS40NTQ0IFRqCi0tMjIxIFRKbQotKG1lc3NhZ2VzLikgNDAuMTE5NCBUagotLTMwMCBUSm0KLShNZXNzYWdlcykgMzguNzM0NiBUagotLTIyMSBUSm0KLShwZXJ0YWluaW5nKSA0MC4zOTgzIFRqCi0tMjIxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMjAgVEptCi0oSS9PKSAxMy4yODAxIFRqCi0tMjIxIFRKbQotKGVycm9ycykgMjMuMjMyOCBUagotLTIyMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyMCBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTIyMSBUSm0KLShjcml0aWNhbCkgMjcuNjY2MSBUagotLTIyMSBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVudHMpIDE2LjA0OTcgVGoKLS0yMjEgVEptCi0od2kpIDkuOTYyNiBUagotMSBUSm0KLShsbCkgNS41MzkyMSBUagotLTIyMSBUSm0KLShub3QpIDEyLjczMjIgVGoKLTEwOCA3OC4wMjMyIFRkCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oc3VwcHJlc3NlZC4pIDQ2LjIwNjUgVGoKLVsxIDAgMCAxIDcyIDc1Ljg2NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjg2NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMS4xNDgyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0My4wNjMzIC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjMzMiAtNTAuODUxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM5LjM5NSA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQpIDQuOTgxMyBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogOCA4Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMDUuNTE5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcxLjU5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuMTA5IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0Ny4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC12KSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tdmVyYm9zZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAxNDMuNzMxIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03NC4yMjE3IC0wLjE1NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcwOS44ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFYpIDcuMTkzIFRqCi0xMTEgVEptCi0oZXJib3NlKSAyNi4wMDI0IFRqCi0tMzIzIFRKbQotKG1vZGUpIDIyLjEzNjkgVGoKLS0zMjIgVEptCi0oLS0pIDYuNjM1MDkgVGoKLS0zMjMgVEptCi0oc2hvKSAxMy44MzgxIFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjMgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0zMjMgVEptCi0ocmF0aW8pIDE4LjI2MTQgVGoKLS0zMjIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzIzIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0zMjIgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzIzIFRKbQotKHByb2Nlc3NlZC4pIDQxLjc3MzIgVGoKLS0xMDU2IFRKbQotKEZ1cnRoZXIpIDI5LjMyOTkgVGoKLVsxIDAgMCAxIDQzMC4wMTUgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzAuMDE1IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzAuMDE1IDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXYpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDQ0MS45NyA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MS45NyAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQxLjk3IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oJykgMy4zMTc1NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTMyMyBUSm0KLShpbmNyZWFzZSkgMzIuNjM3NSBUagotLTMyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjMgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmJvc2l0eSkgMzIuMDk5NSBUagotMTA4IDY4Ni4xMjcgVGQKLShsZSkgNy4xOTMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwsKSA5LjY4MzY1IFRqCi0tMjUwIFRKbQotKHNwZSkgMTMuMjgwMSBUagotMjUgVEptCi0od2luZykgMTkuOTI1MiBUagotLTI1MCBUSm0KLShvdXQpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0obG90cykgMTQuMzk2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGluZm9ybWF0aW9uKSA0Ny4wNDM0IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHByaW1hcmlseSkgMzcuMDgwOCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShpbnRlcmVzdCkgMjkuMzI5OSBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oZGlhZ25vc3RpYykgNDAuOTU2MiBUagotLTI1MCBUSm0KLShwdXJwb3Nlcy4pIDM3LjkwNzcgVGoKLVsxIDAgMCAxIDcyIDY4My45N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NzAuMDIzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NjAuMjI0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1MKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tbGljZW5zZSkgNTMuNzk4IFRqCi0tNjAwIFRKbQotKC1WKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKC0tdmVyc2lvbikgNTMuNzk4IFRqCi1bMSAwIDAgMSAyMjEuNDQgNjYwLjIyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1MS45MyAtMC4xNTQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjAuMDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2NDguMjY5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKERpc3BsYXkpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHNvZnR3KSAyMi4xMzY5IFRqCi0xMCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24sKSAyNi44MzkyIFRqCi0tMjUwIFRKbQotKGxpY2Vuc2UpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0odGVybXMpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oY29uZGl0aW9ucy4pIDQ0LjAwNDggVGoKLVsxIDAgMCAxIDcyIDY0Ni4xMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjk4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjMyLjE2NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjIyLjM2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtMSkgMTEuOTU1MSBUagotWzEgMCAwIDEgODMuOTU1MiA2MjIuMzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgzLjk1NTIgLTYyMi4zNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2LjQ0NTggNjIyLjM2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKG9yKSAxMS42MTY0IFRqCi1bMSAwIDAgMSAxMDAuNTUzIDYyMi4zNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAwLjU1MyAtNjIyLjM2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTAwLjU1MyA2MjIuMzY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tZmFzdCkgMzUuODY1NCBUagotWzEgMCAwIDEgMTM2LjQxOCA2MjIuMzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNi40MTggLTYyMi4zNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNi40MTggNjIyLjM2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNTIuNDY4IDYyMi4zNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUyLjQ2OCAtNjIyLjM2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUyLjQ2OCA2MjIuMzY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC05KSAxMS45NTUxIFRqCi1bMSAwIDAgMSAxNjQuNDIzIDYyMi4zNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY0LjQyMyAtNjIyLjM2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY2LjkxNCA2MjIuMzY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwob3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDE4MS4wMjEgNjIyLjM2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODEuMDIxIC02MjIuMzY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODEuMDIxIDYyMi4zNjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWJlc3QpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIxMC45MDkgNjIyLjM2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTA5IC02MjIuMzY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTA5IDYyMi4zNjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDIxNC4yMjYgNjIyLjM2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDIuMjI2IC0xLjc4MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyMC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2MTAuNDExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFNldCkgMTIuNzMyMiBUagotLTI4OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yODggVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI4OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg4IFRKbQotKDEwMCkgMTQuOTQzOSBUagotLTI4OSBUSm0KLShrLCkgNy40NzE5NSBUagotLTI5OCBUSm0KLSgyMDApIDE0Ljk0MzkgVGoKLS0yODggVEptCi0oaykgNC45ODEzIFRqCi0tMjg4IFRKbQotKC4uLikgNy40NzE5NSBUagotLTg1MCBUSm0KLSg5MDApIDE0Ljk0MzkgVGoKLS0yODggVEptCi0oaykgNC45ODEzIFRqCi0tMjg4IFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTI4OSBUSm0KLShjb21wcmVzc2luZy4pIDUyLjg1MTYgVGoKLS04NDkgVEptCi0oSGFzKSAxNS40OTE4IFRqCi0tMjg5IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yODggVEptCi0oZWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKGZlY3QpIDE0LjkzMzkgVGoKLS0yODggVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjg4IFRKbQotKGRlY29tcHJlc3NpbmcuKSA2Mi4yNTYzIFRqCi0tODUwIFRKbQotKFNlZSkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxMDggNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xMDggLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA1OTguNDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1FTU9SKSAzNy42Mzg3IFRqCi02NSBUSm0KLShZKSA3LjE5MyBUagotLTI5NyBUSm0KLShNQU4pIDIzLjI0MjcgVGoKLTM1IFRKbQotKEEpIDcuMTkzIFRqCi00MCBUSm0KLShHRU1FTlQpIDQxLjUwNDIgVGoKLVsxIDAgMCAxIDIyNi4zMzggNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0yMjYuMzM4IC01OTguNDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjkuMyA1OTguNDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFs1XSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMjQwLjkxNiA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC45MTYgLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0My44NzggNTk4LjQ1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShiZWxvKSAxNy4xNTU2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTkwNCBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLVsxIDAgMCAxIDI5Ny4yNzggNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTcuMjc4IC01OTguNDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTcuMjc4IDU5OC40NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1mYXN0KSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzMzMuMTQ0IDU5OC40NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMzLjE0NCAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM2LjEwNiA1OTguNDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNTMuNDU0IDU5OC40NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUzLjQ1NCAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzUzLjQ1NCA1OTguNDU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tYmVzdCkgMzUuODY1NCBUagotWzEgMCAwIDEgMzg5LjMxOSA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OS4zMTkgLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Mi4yODEgNTk4LjQ1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbGlhc2VzKSAyNi41NjAzIFRqCi0tMjk3IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI5OCBUSm0KLShwcmltYXJpbHkpIDM3LjA4MDggVGoKLS0yOTcgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjk3IFRKbQotKEdOVSkgMjEuNTc5IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTk4LjQ1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTYuMDkgLTU5OC40NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxNi4wOSA1OTguNDU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGd6aXApIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDU0MCA1OTguNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNTk4LjQ1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDU4Ni41MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcGF0aWJpbGl0eSkgNTMuMTQwNSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTM1NiBUSm0KLShJbikgOC4yOTg4NSBUagotLTI2NSBUSm0KLShwYXJ0aWN1bGFyKSAzOC4xNzY3IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyMjAuNDIzIDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIwLjQyMyAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIwLjQyMyA1ODYuNTAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tZmFzdCkgMzUuODY1NCBUagotWzEgMCAwIDEgMjU2LjI4OCA1ODYuNTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1Ni4yODggLTU4Ni41MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OC45MzIgNTg2LjUwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkb2VzbicpIDI2LjU2MDMgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI2NSBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjYgVEptCi0odGhpbmdzKSAyNC4zNTg2IFRqCi0tMjY1IFRKbQotKHNpZ25pXDAwMmNhbnRseSkgNDkuMjY1MSBUagotLTI2NSBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhc3RlcikgMTguODA5NCBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTcxMiBUSm0KLShBbmQpIDE3LjE1NTYgVGoKLVsxIDAgMCAxIDQ0NC42MjIgNTg2LjUwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuNjIyIC01ODYuNTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDQuNjIyIDU4Ni41MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1iZXN0KSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0ODAuNDg3IDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDgwLjQ4NyAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDgzLjEzMSA1ODYuNTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG1lcmVseSkgMjcuNjY2MSBUagotLTI2NSBUSm0KLShzZWxlY3RzKSAyNi41NjAzIFRqCi0xMDggNTc0LjU0NiBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odmlvdXIpIDIxLjAzMSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTc0LjQ0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjAuNDk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDguNjQzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tKSAxMS45NTUxIFRqCi1bMSAwIDAgMSA4My45NTUyIDU0OC42NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNC40NDU4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0OC42NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA1MzYuNjg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFQpIDYuMDg3MTUgVGoKLTM1IFRKbQotKHJlYXRzKSAxOC44MDk0IFRqCi0tMjYxIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjYxIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS0yNjAgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudHMpIDMzLjc2MzMgVGoKLS0yNjEgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNjEgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjYxIFRKbQotKG5hbWVzLCkgMjcuOTQ1MSBUagotLTI2MyBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuKSA5LjQwNDY5IFRqCi0tMjYxIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjYxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjYwIFRKbQotKHN0YXJ0KSAxNy4xNTU2IFRqCi0tMjYxIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNjEgVEptCi0oYSkgNC40MjMzOSBUagotLTI2MSBUSm0KLShkYXNoLikgMjAuNzUyMSBUagotLTY4NSBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjYwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjYxIFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjYxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2MSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNjAgVEptCi0oaGFuZGxlKSAyNi41NjAzIFRqCi0tMjYxIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLTEwOCA1MjQuNzMyIFRkCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShuYW1lcykgMjUuNDU0NCBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotMTUgVEptCi0oZ2lubmluZykgMzAuNDQ1NyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oZGFzaCwpIDIwLjc1MjEgVGoKLS0yNTAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhhbXBsZTopIDMyLjA5OTUgVGoKLVsxIDAgMCAxIDMwMi4yNyA1MjQuNzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMi4yNyAtNTI0LjczMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAyLjI3IDUyNC43MzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLS02MDAgVEptCi0oLS0pIDExLjk1NTEgVGoKLS02MDAgVEptCi0oLW15ZmlsZW5hbWUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQyMS44MjEgNTI0LjczMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjEuODIxIC01MjQuNzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjEuODIxIDUyNC43MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTIyLjU3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MDguNjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0OTguODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLS1yZXBldGl0aXZlLWZhc3QpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDE3My42MTkgNDk4LjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3My42MTkgLTQ5OC44M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTczLjYxOSA0OTguODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTc4LjYgNDk4LjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODMuNTgyIC00OTguODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4My41ODIgNDk4LjgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC0tcmVwZXRpdGl2ZS1iZXN0KSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAyODUuMiA0OTguODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTUuNjkxIC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ5Ny4yOTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0ODYuODc0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjA3IFRKbQotKFwwMDNhZ3MpIDE4LjgxOTQgVGoKLS0yMDYgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjA3IFRKbQotKHJlZHVuZGFudCkgMzkuODQwNCBUagotLTIwNyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjA2IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMjA3IFRKbQotKDAuOS41KSAxOS45MjUyIFRqCi0tMjA3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjA2IFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUuKSA2LjkxNDA0IFRqCi0tNTkxIFRKbQotKFRoZSkgMTUuNDkxOCBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjA3IFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZWQpIDIyLjEzNjkgVGoKLS0yMDcgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjA3IFRKbQotKGMpIDQuNDIzMzkgVGoKLTEgVEptCi0obykgNC45ODEzIFRqCi0tMSBUSm0KLShhKSA0LjQyMzM5IFRqCi0xIFRKbQotKHJzZSkgMTEuNjE2NCBUagotLTIwNyBUSm0KLShjb250cm9sKSAyOC4yMjQgVGoKLS0yMDcgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjA3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIwNiBUSm0KLShiZWhhKSAxOC44MDk0IFRqCi0yMCBUSm0KLSh2aW91cikgMjEuMDMxIFRqCi0xMDggNDc0LjkxOSBUZAotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MSBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMjUwIFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUxIFRKbQotKGVhcmxpZXIpIDI1LjQ0NDUgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zLCkgMzAuNzE0NyBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oc29tZXRpbWVzKSA0Mi42MiBUagotLTI1MCBUSm0KLSh1c2VmdWwuKSAyNi44MzkyIFRqCi0tNjIyIFRKbQotKDAuOS41KSAxOS45MjUyIFRqCi0tMjUxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MSBUSm0KLShhbikgOS40MDQ2OSBUagotLTI1MCBUSm0KLShpbXBybykgMjMuODAwNyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlZCkgOS40MDQ2OSBUagotMTA4IDQ2Mi45NjQgVGQKLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0ocmVuZGVycykgMjkuMzE5OSBUagotLTI1MCBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShcMDAzYWdzKSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKGlycmVsZSkgMjEuMDIxMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbnQuKSAxNC42NjQ5IFRqCi1bMSAwIDAgMSA3MiA0NjAuODA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzNi44OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQxNC4yNjQgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDIuNS4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oTUVNT1IpIDc5LjE4NCBUagotNTAgVEptCi0oWSkgMTMuNzc5MiBUagotLTI3OCBUSm0KLShNQU5BKSA2MS45NTQ4IFRqCi01MCBUSm0KLShHRU1FTlQpIDg4LjM3NzEgVGoKLVsxIDAgMCAxIDcyIDQxNC4wMDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQwNC4wNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM5Mi4zNDYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEwMS44ODggMzkyLjM0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDEuODg4IC0zOTIuMzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDQuNDU0IDM5Mi4zNDYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcHJlc3NlcykgNDUuOTI3NiBUagotLTI1OCBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlKSA5LjQwNDY5IFRqCi0tMjU3IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNTggVEptCi0oaW4pIDcuNzUwOSBUagotLTI1NyBUSm0KLShibG9ja3MuKSAyOC41MDMgVGoKLS02NjYgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjU3IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjU4IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yNTggVEptCi0oYWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKGZlY3RzKSAxOC44MDk0IFRqCi0tMjU3IFRKbQotKGJvdGgpIDE3LjcxMzUgVGoKLS0yNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjU3IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjU4IFRKbQotKHJhdGlvKSAxOC4yNjE0IFRqCi0tMjU3IFRKbQotKGFjaGllKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVkLCkgMTEuODk1MyBUagotLTI2MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTcgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi03MiAzODAuMzkxIFRkCi0ob2YpIDguMjk4ODUgVGoKLS0yMTUgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjE1IFRKbQotKG5lZWRlZCkgMjguMjE0MSBUagotLTIxNSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yMTUgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yMTQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMTUgVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLS01OTcgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjE1IFRKbQotKFwwMDNhZ3MpIDE4LjgxOTQgVGoKLVsxIDAgMCAxIDMzNy43MTkgMzgwLjM5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzcuNzE5IC0zODAuMzkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzcuNzE5IDM4MC4zOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLTEpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDM0OS42NzQgMzgwLjM5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDkuNjc0IC0zODAuMzkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTEuODE1IDM4MC4zOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odGhyb3VnaCkgMzAuOTkzNiBUagotWzEgMCAwIDEgMzg0Ljk1IDM4MC4zOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg0Ljk1IC0zODAuMzkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODQuOTUgMzgwLjM5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtOSkgMTEuOTU1MSBUagotWzEgMCAwIDEgMzk2LjkwNSAzODAuMzkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5Ni45MDUgLTM4MC4zOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5OS4wNDYgMzgwLjM5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzcGVjaWZ5KSAyOC43NzIgVGoKLS0yMTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjE1IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjE1IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yMTUgVEptCi0odG8pIDcuNzUwOSBUagotLTIxNCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIxNSBUSm0KLSgxMDAsMDAwKSAzMi4zNzg1IFRqCi03MiAzNjguNDM1IFRkCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI3OCBUSm0KLSh0aHJvdWdoKSAzMC45OTM2IFRqCi0tMjc3IFRKbQotKDkwMCwwMDApIDMyLjM3ODUgVGoKLS0yNzggVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI3OCBUSm0KLShcKHRoZSkgMTUuNDkxOCBUagotLTI3NyBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHRcKSkgMTguMjYxNCBUagotLTI3OCBUSm0KLShyZXNwZWN0aSkgMzAuOTgzNyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHkpIDEyLjE3NDMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS03ODYgVEptCi0oQXQpIDkuOTYyNiBUagotLTI3OCBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjc4IFRKbQotKHRpbWUsKSAyMC4yMDQyIFRqCi0tMjg0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI3OCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMjc3IFRKbQotKHVzZWQpIDE4LjI2MTQgVGoKLS0yNzggVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjc4IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi03MiAzNTYuNDggVGQKLShpcykgNi42NDUwNSBUagotLTI0MyBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjQyIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNDMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQyIFRKbQotKGhlYWRlcikgMjYuNTUwMyBUagotLTI0MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTI0MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDMgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI0MiBUSm0KLShcMDAybGUsKSAxNS4yMjI5IFRqCi0tMjQ0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNzUuMTc0IDM1Ni40OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzUuMTc0IC0zNTYuNDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3NS4xNzQgMzU2LjQ4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ1bnppcDIpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDMxNy4wMTcgMzU2LjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxNy4wMTcgLTM1Ni40OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE5LjQzMyAzNTYuNDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odGhlbikgMTcuMTU1NiBUagotLTI0MyBUSm0KLShhbGwpIDkuOTYyNiBUagotMSBUSm0KLShvKSA0Ljk4MTMgVGoKLS0xIFRKbQotKGMpIDQuNDIzMzkgVGoKLTEgVEptCi0oYXRlcykgMTUuNDkxOCBUagotLTI0MyBUSm0KLShpdHNlbGYpIDE5LjkyNTIgVGoKLS0yNDIgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMjQzIFRKbQotKGVub3VnaCkgMjkuMzI5OSBUagotLTI0MyBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNDIgVEptCi0odG8pIDcuNzUwOSBUagotLTI0MyBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi03MiAzNDQuNTI1IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAzIFRKbQotKFwwMDJsZS4pIDE1LjIyMjkgVGoKLS05NDAgVEptCi0oU2luY2UpIDIyLjEzNjkgVGoKLS0zMDQgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0zMDMgVEptCi0oc2l6ZXMpIDE5LjM2NzMgVGoKLS0zMDMgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzAzIFRKbQotKHN0b3JlZCkgMjQuMzQ4NiBUagotLTMwNCBUSm0KLShpbikgNy43NTA5IFRqCi0tMzAzIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zMDMgVEptCi0oXDAwMmxlcywpIDE5LjA5ODMgVGoKLS0zMTcgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDMgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHdzKSAxMS4wNjg0IFRqCi0tMzA0IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMDMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAzIFRKbQotKFwwMDNhZ3MpIDE4LjgxOTQgVGoKLVsxIDAgMCAxIDQwNi4zNSAzNDQuNTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwNi4zNSAtMzQ0LjUyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA2LjM1IDM0NC41MjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLTEpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDQxOC4zMDUgMzQ0LjUyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTguMzA1IC0zNDQuNTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjEuMzI3IDM0NC41MjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgNDMyLjEgMzQ0LjUyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzIuMSAtMzQ0LjUyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMyLjEgMzQ0LjUyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtOSkgMTEuOTU1MSBUagotWzEgMCAwIDEgNDQ0LjA1NSAzNDQuNTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wNTUgLTM0NC41MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0Ny4wNzcgMzQ0LjUyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS0zMDMgVEptCi0oaXJyZWxlKSAyMS4wMjExIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFudCkgMTIuMTc0MyBUagotLTMwNCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzAzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzAzIFRKbQotKHNvKSA4Ljg1Njc1IFRqCi03MiAzMzIuNTcgVGQKLShpZ25vcmVkKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKGR1cmluZykgMjYuMDEyMyBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotWzEgMCAwIDEgNzIgMzMwLjQxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzIwLjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTAuNjUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNTAgVEptCi0ocmVxdWlyZW1lbnRzLCkgNTQuNTA1NCBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJ5dGVzLCkgMjMuNTIxNyBUagotLTI1MCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZXN0aW1hdGVkKSAzOC4xODY2IFRqCi0tMjUwIFRKbQotKGFzOikgMTEuMDY4NCBUagotWzEgMCAwIDEgNzIgMzA4LjQ5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0yOTkuMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDI5OS4xMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShDb21wcmVzc2lvbjopIDcxLjczMDcgVGoKLS0xMjc4IFRKbQotKDQwMGspIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oKykgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg4KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYmxvY2spIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oc2l6ZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotOTAgMjc1LjIyIFRkCi0oRGVjb21wcmVzc2lvbjopIDgzLjY4NTggVGoKLS00MjYgVEptCi0oMTAwaykgMjMuOTEwMiBUagotLTQyNiBUSm0KLSgrKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDQpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oeCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShibG9jaykgMjkuODg3OCBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotMTUzLjY2IDI2My4yNjUgVGQKLSgxMDBrKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKCspIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMi41KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYmxvY2spIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oc2l6ZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNzIgMjQ3LjcyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMzcuNzYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMjUuODA1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKExhcikgMTMuODI4MSBUagotMTggVEptCi0oZ2VyKSAxMi43MjIyIFRqCi0tMjkyIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjkyIFRKbQotKHNpemVzKSAxOS4zNjczIFRqCi0tMjkxIFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI5MiBUSm0KLShyYXBpZGx5KSAyOC4yMjQgVGoKLS0yOTIgVEptCi0oZGltaW5pc2hpbmcpIDQ3LjYxMTMgVGoKLS0yOTIgVEptCi0obWFyKSAxNS40OTE4IFRqCi0xOCBUSm0KLShnaW5hbCkgMTkuOTI1MiBUagotLTI5MSBUSm0KLShyZXR1cm5zLikgMzAuMTU2OCBUagotLTg3MSBUSm0KLShNb3N0KSAyMC40ODMxIFRqCi0tMjkyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjkxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MiBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI5MiBUSm0KLShjb21lcykgMjUuNDU0NCBUagotLTI5MiBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjkxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MiBUSm0KLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMjkyIFRKbQotKHR3KSA5Ljk2MjYgVGoKLTEwIFRKbQotKG8pIDQuOTgxMyBUagotLTI5MiBUSm0KLShvcikgOC4yOTg4NSBUagotNzIgMjEzLjg1IFRkCi0odGhyZWUpIDE5LjkxNTIgVGoKLS0yMzIgVEptCi0oaHVuZHJlZCkgMzIuNjQ3NCBUagotLTIzMiBUSm0KLShrKSA0Ljk4MTMgVGoKLS0yMzIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMzIgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yMzIgVEptCi0oc2l6ZSwpIDE3Ljk4MjUgVGoKLS0yMzUgVEptCi0oYSkgNC40MjMzOSBUagotLTIzMiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY3QpIDExLjYxNjQgVGoKLS0yMzIgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9ydGgpIDE2LjA0OTcgVGoKLS0yMzIgVEptCi0oYmVhcmluZykgMjkuODc3OCBUagotLTIzMiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjMyIFRKbQotKG1pbmQpIDIwLjQ4MzEgVGoKLS0yMzIgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjMxIFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLVsxIDAgMCAxIDM1NC4wMjUgMjEzLjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1NC4wMjUgLTIxMy44NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzU0LjAyNSAyMTMuODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDM4My45MTMgMjEzLjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4My45MTMgLTIxMy44NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzg2LjIyMyAyMTMuODUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob24pIDkuOTYyNiBUagotLTIzMiBUSm0KLShzbWFsbCkgMjEuNTg5IFRqCi0tMjMyIFRKbQotKG1hY2hpbmVzLikgNDAuMTE5NCBUagotLTMwNCBUSm0KLShJdCkgNi4wODcxNSBUagotLTIzMiBUSm0KLShpcykgNi42NDUwNSBUagotLTIzMiBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMjMxIFRKbQotKGltcG9ydGFudCkgMzguNzQ0NiBUagotNzIgMjAxLjg5NSBUZAotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYXBwcmVjaWF0ZSkgNDAuOTM2MyBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjUwIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShyZXF1aXJlbWVudCkgNDguMTM5MyBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjUwIFRKbQotKHRpbWUpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY2hvaWNlKSAyNi4wMDI0IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKHNpemUuKSAxNy45ODI1IFRqCi1bMSAwIDAgMSA3MiAxOTkuNzM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xODkuNzc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzkuOTc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzg4IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0zODkgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTM4OCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM4OCBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQpIDE0Ljk0MzkgVGoKLS0zODkgVEptCi0oOTAwaykgMTkuOTI1MiBUagotLTM4OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTM4OSBUSm0KLShzaXplLCkgMTcuOTgyNSBUagotWzEgMCAwIDEgMzAyLjAwMiAxNzkuOTc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMi4wMDIgLTE3OS45NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMi4wMDIgMTc5Ljk3NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidW56aXAyKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzNDMuODQ2IDE3OS45NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQzLjg0NiAtMTc5Ljk3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ3LjcxNSAxNzkuOTc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0zODggVEptCi0ocmVxdWlyZSkgMjguMjE0MSBUagotLTM4OSBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotLTM4OCBUSm0KLSgzNzAwKSAxOS45MjUyIFRqCi0tMzg5IFRKbQotKGtieXRlcykgMjYuMDEyMyBUagotLTM4OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzg5IFRKbQotKGRlY29tcHJlc3MuKSA0OS41MjQxIFRqCi03MiAxNjguMDIyIFRkCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tNDI0IFRKbQotKHN1cHBvcnQpIDI5Ljg4NzggVGoKLS00MjUgVEptCi0oZGVjb21wcmVzc2lvbikgNTkuNzY1NiBUagotLTQyNCBUSm0KLShvZikgOC4yOTg4NSBUagotLTQyNCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tNDI1IFRKbQotKFwwMDJsKSA4LjMwODgxIFRqCi0xIFRKbQotKGUpIDQuNDIzMzkgVGoKLS00MjUgVEptCi0ob24pIDkuOTYyNiBUagotLTQyNCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNDI0IFRKbQotKDQpIDQuOTgxMyBUagotLTQyNSBUSm0KLShtZSkgMTIuMTc0MyBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFieXRlKSAyMS41NzkgVGoKLS00MjQgVEptCi0obWFjaGluZSwpIDM2LjI0MzkgVGoKLVsxIDAgMCAxIDM0OC4yNzIgMTY4LjAyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDguMjcyIC0xNjguMDIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDguMjcyIDE2OC4wMjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnVuemlwMikgNDEuODQyOSBUagotWzEgMCAwIDEgMzkwLjExNSAxNjguMDIyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5MC4xMTUgLTE2OC4wMjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5NC4zNDIgMTY4LjAyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShoYXMpIDEzLjI4MDEgVGoKLS00MjQgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS00MjUgVEptCi0ob3B0aW9uKSAyNS40NjQ0IFRqCi0tNDI0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00MjQgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTQyNCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi03MiAxNTYuMDY3IFRkCi0oYXBwcm94aW1hdGVseSkgNTcuNTUzOSBUagotLTI4MSBUSm0KLShoYWxmKSAxNS40OTE4IFRqCi0tMjgxIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI4MCBUSm0KLShhbW91bnQpIDI5Ljg4NzggVGoKLS0yODEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODEgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjg4IFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMjgxIFRKbQotKDIzMDApIDE5LjkyNTIgVGoKLS0yODEgVEptCi0oa2J5dGVzLikgMjguNTAzIFRqCi0tODA1IFRKbQotKERlY29tcHJlc3Npb24pIDYxLjk3NzMgVGoKLS0yODAgVEptCi0oc3BlZWQpIDIyLjY4NDggVGoKLS0yODEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODEgVEptCi0oYWxzbykgMTYuMDQ5NyBUagotLTI4MSBUSm0KLShoYWx2KSAxNy4xNTU2IFRqCi0xNSBUSm0KLShlZCwpIDExLjg5NTMgVGoKLS0yODggVEptCi0oc28pIDguODU2NzUgVGoKLS0yODEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjgxIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotNzIgMTQ0LjExMiBUZAotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0ob3B0aW9uKSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKG9ubHkpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0od2hlcmUpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0obmVjZXNzYXJ5KSAzOC43MjQ2IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjIwIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShyZWxlKSAxNC45MzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAzYWcpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLVsxIDAgMCAxIDMwNS4wMjQgMTQ0LjExMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDUuMDI0IC0xNDQuMTEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDUuMDI0IDE0NC4xMTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLXMpIDExLjk1NTEgVGoKLVsxIDAgMCAxIDMxNi45NzkgMTQ0LjExMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTYuOTc5IC0xNDQuMTEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTYuOTc5IDE0NC4xMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTQxLjk1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTMxLjk5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTIyLjE5NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbikgOC4yOTg4NSBUagotLTIwNCBUSm0KLShnZW5lcmFsLCkgMzEuODEwNiBUagotLTIxNCBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS0yMDQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMDUgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjA0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIwNCBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlc3QpIDE2LjA0OTcgVGoKLS0yMDUgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yMDQgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTIwNSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yMDQgVEptCi0oY29uc3RyYWludHMpIDQzLjE2NzkgVGoKLS0yMDQgVEptCi0oYWxsbykgMTQuOTQzOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yMTQgVEptCi0oc2luY2UpIDIwLjQ3MzEgVGoKLS0yMDQgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTIwNSBUSm0KLShtYXhpbWlzZXMpIDQyLjYyIFRqCi0tMjA0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIwNCBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTIwNSBUSm0KLShhY2hpZSkgMjEuMDIxMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlZC4pIDExLjg5NTMgVGoKLTcyIDExMC4yMzkgVGQKLShDb21wcmVzc2lvbikgNTIuNTgyNiBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjUwIFRKbQotKHNwZWVkKSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLSh2aXJ0dWFsbHkpIDMzLjc2MzMgVGoKLS0yNTAgVEptCi0odW5hZikgMTcuNzAzNSBUagotMjUgVEptCi0oZmVjdGVkKSAyNC4zMzg2IFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oYmxvY2spIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0oc2l6ZS4pIDE3Ljk4MjUgVGoKLVsxIDAgMCAxIDcyIDEwOC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTk4LjExOTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDg4LjMyMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbm90aGVyKSAzMi42NDc0IFRqCi0tMjk2IFRKbQotKHNpZ25pXDAwMmNhbnQpIDQxLjUxNDIgVGoKLS0yOTYgVEptCi0ocG9pbnQpIDIwLjQ4MzEgVGoKLS0yOTUgVEptCi0oYXBwbGllcykgMjguMjI0IFRqCi0tMjk2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTYgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI5NiBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI5NiBUSm0KLShcMDAydCkgOC4zMDg4MSBUagotLTI5NiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjk2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTUgVEptCi0oc2luZ2xlKSAyMy44MDA3IFRqCi0tMjk2IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjk2IFRKbQotKC0tKSA2LjYzNTA5IFRqCi0tMjk2IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yOTYgVEptCi0obWVhbnMpIDI1LjQ1NDQgVGoKLS0yOTYgVEptCi0obW9zdCkgMTkuMzc3MyBUagotLTI5NSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjk2IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKGQpIDQuOTgxMyBUagotLTI5NiBUSm0KLShlbmNvdW50ZXIpIDM5LjI4MjUgVGoKLS0yOTYgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI5NiBUSm0KLShhKSA0LjQyMzM5IFRqCi03MiA3Ni4zNjU4IFRkCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZSkgOS40MDQ2OSBUagotLTI5MCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI5MCBUSm0KLShzaXplLikgMTcuOTgyNSBUagotLTg1OSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yOTAgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi0tMjkwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjkwIFRKbQotKHJlYWwpIDE0LjkzMzkgVGoKLS0yOTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjg5IFRKbQotKHRvdWNoZWQpIDMxLjU0MTYgVGoKLS0yOTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTAgVEptCi0ocHJvcG9ydGlvbmFsKSA0OS4yNTUxIFRqCi0tMjkwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkwIFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yOTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKFwwMDJsZSwpIDE1LjIyMjkgVGoKLS0zMDAgVEptCi0oc2luY2UpIDIwLjQ3MzEgVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI5MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI5MCBUSm0KLShzbWFsbGVyKSAyOS4zMjk5IFRqCi1bMSAwIDAgMSA3MiA1MC44NTE4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0My4wNjMzIC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjMzMiAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM5LjM5NSA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDUpIDQuOTgxMyBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogOSA5Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMDUuNTE5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcxLjU5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuMTA5IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0Ny4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0aGFuKSAxNy4xNTU2IFRqCi0tMzYyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNjIgVEptCi0oYmxvY2suKSAyNC42Mjc1IFRqCi0tMTI5MyBUSm0KLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTM2MiBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4YW1wbGUsKSAzMS44MjA1IFRqCi0tMzkwIFRKbQotKGNvbXByZXNzaW5nKSA1MC4zNjA5IFRqCi0tMzYyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNjIgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzYyIFRKbQotKDIwLDAwMCkgMjcuMzk3MiBUagotLTM2MiBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMzYyIFRKbQotKGxvbmcpIDE3LjcxMzUgVGoKLS0zNjIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTM2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjIgVEptCi0oXDAwM2FnKSAxNC45NDM5IFRqCi1bMSAwIDAgMSA0MDYuNTI4IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA2LjUyOCAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA2LjUyOCA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC05KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA0MTguNDgzIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE4LjQ4MyAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIyLjA5IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTM2MiBUSm0KLShjYXVzZSkgMjIuMTI2OSBUagotLTM2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjIgVEptCi0oY29tcHJlc3NvcikgNDUuOTI3NiBUagotLTM2MiBUSm0KLSh0bykgNy43NTA5IFRqCi03MiA2OTguMDgyIFRkCi0oYWxsb2NhdGUpIDMwLjk4MzcgVGoKLS0yNzEgVEptCi0oYXJvdW5kKSAyNy42NjYxIFRqCi0tMjcyIFRKbQotKDc2MDBrKSAyNC45MDY1IFRqCi0tMjcxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI3NyBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNzEgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI3MiBUSm0KLSh0b3VjaCkgMjIuMTM2OSBUagotLTI3MSBUSm0KLSg0MDBrKSAxOS45MjUyIFRqCi0tMjcyIFRKbQotKCspIDUuNjE4OTEgVGoKLS0yNzEgVEptCi0oMjAwMDApIDI0LjkwNjUgVGoKLS0yNzIgVEptCi0oKikgNC45ODEzIFRqCi0tMjcxIFRKbQotKDgpIDQuOTgxMyBUagotLTI3MiBUSm0KLSg9KSA1LjYxODkxIFRqCi0tMjcxIFRKbQotKDU2MCkgMTQuOTQzOSBUagotLTI3MiBUSm0KLShrYnl0ZXMpIDI2LjAxMjMgVGoKLS0yNzEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0oaXQuKSA4LjAyOTg2IFRqCi0tNzQ4IFRKbQotKFNpbWlsYXJseSkgMzcuMDkwOCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI3NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzIgVEptCi0oZGVjb21wcmVzc29yKSA1NS4zMzIzIFRqCi03MiA2ODYuMTI3IFRkCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShhbGxvY2F0ZSkgMzAuOTgzNyBUagotLTI1MCBUSm0KLSgzNzAwaykgMjQuOTA2NSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTI1MCBUSm0KLSh0b3VjaCkgMjIuMTM2OSBUagotLTI1MCBUSm0KLSgxMDBrKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKCspIDUuNjE4OTEgVGoKLS0yNTAgVEptCi0oMjAwMDApIDI0LjkwNjUgVGoKLS0yNTAgVEptCi0oKikgNC45ODEzIFRqCi0tMjUwIFRKbQotKDQpIDQuOTgxMyBUagotLTI1MCBUSm0KLSg9KSA1LjYxODkxIFRqCi0tMjUwIFRKbQotKDE4MCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShrYnl0ZXMuKSAyOC41MDMgVGoKLVsxIDAgMCAxIDcyIDY4My45N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjc0LjAwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIZXJlKSAxOS4zNTczIFRqCi0tMjkzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk0IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTMgVEptCi0odGFibGUpIDE5LjM2NzMgVGoKLS0yOTQgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yOTMgVEptCi0oc3VtbWFyaXNlcykgNDcuMDQzNCBUagotLTI5NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTMgVEptCi0obWF4aW11bSkgNDAuNDA4MyBUagotLTI5NCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yOTMgVEptCi0odXNhZ2UpIDIyLjY4NDggVGoKLS0yOTQgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjkzIFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oZmVyZW50KSAyMy4yMzI4IFRqCi0tMjk0IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjkzIFRKbQotKHNpemVzLikgMjEuODU3OSBUagotLTg4MSBUSm0KLShBbHNvKSAxOC44MTk0IFRqCi0tMjkzIFRKbQotKHJlY29yZGVkKSAzNC44NDkyIFRqCi0tMjk0IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjkzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NCBUSm0KLSh0b3RhbCkgMTcuNzEzNSBUagotNzIgNjUyLjI1NCBUZAotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yODkgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI4OSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yODkgVEptCi0oMTQpIDkuOTYyNiBUagotLTI4OSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMjkwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShDYWxnKSAxOC44MTk0IFRqCi01IFRKbQotKGFyeSkgMTIuNzIyMiBUagotLTI4OSBUSm0KLShUKSA2LjA4NzE1IFRqCi03MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjg5IFRKbQotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjg5IFRKbQotKENvcnB1cykgMjguNzgyIFRqCi0tMjg5IFRKbQotKHRvdGFsbGluZykgMzMuMjE1MyBUagotLTI4OSBUSm0KLSgzLDE0MSw2MjIpIDM5Ljg1MDQgVGoKLS0yOTAgVEptCi0oYnl0ZXMuKSAyMy41MjE3IFRqCi0tODU0IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yOTAgVEptCi0oY29sdW1uKSAyOS44ODc4IFRqCi0tMjg5IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLTcyIDY0MC4yOTkgVGQKLShzb21lKSAyMS4wMzEgVGoKLS0yNTMgVEptCi0oZmVlbCkgMTQuOTMzOSBUagotLTI1MyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTMgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTMgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNTMgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcmllcykgMTguODA5NCBUagotLTI1MyBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUzIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUzIFRKbQotKHNpemUuKSAxNy45ODI1IFRqCi0tNjM4IFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjUzIFRKbQotKFwwMDJndXJlcykgMjcuMTE4MiBUagotLTI1MyBUSm0KLSh0ZW5kKSAxNy4xNTU2IFRqCi0tMjU0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTMgVEptCi0odW5kZXJzdGF0ZSkgNDAuOTQ2MyBUagotLTI1MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTMgVEptCi0oYWR2KSAxNC4zODYgVGoKLTI1IFRKbQotKGFudGFnZSkgMjYuMDAyNCBUagotLTI1MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MyBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlcikgMTIuNzIyMiBUagotLTI1MyBUSm0KLShibG9jaykgMjIuMTM2OSBUagotNzIgNjI4LjM0NCBUZAotKHNpemVzKSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlcikgMTIuNzIyMiBUagotLTI1MCBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI1MCBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oQ29ycHVzKSAyOC43ODIgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oZG9taW5hdGVkKSA0Mi4wNjIxIFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oc21hbGxlcikgMjkuMzI5OSBUagotLTI1MCBUSm0KLShcMDAybGVzLikgMTkuMDk4MyBUagotWzEgMCAwIDEgNzIgNjI2LjE4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE1Ni40MTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTU1LjQxNyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDE1MS44MzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC02MTYuODIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjMuOTUyIDYxNi44MjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQ29tcHJlc3MpIDQ3LjgyMDUgVGoKLS0xMjc4IFRKbQotKERlY29tcHJlc3MpIDU5Ljc3NTYgVGoKLS0xMjc4IFRKbQotKERlY29tcHJlc3MpIDU5Ljc3NTYgVGoKLS0xMjc4IFRKbQotKENvcnB1cykgMzUuODY1NCBUagotOTAgNjA0Ljg2NyBUZAotKEZsYWcpIDIzLjkxMDIgVGoKLS0yMTMwIFRKbQotKHVzYWdlKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSh1c2FnZSkgMjkuODg3OCBUagotLTI5ODIgVEptCi0oLXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odXNhZ2UpIDI5Ljg4NzggVGoKLS0yMTMwIFRKbQotKFNpemUpIDIzLjkxMDIgVGoKLTk0LjI0NCA1ODAuOTU2IFRkCi0oLTEpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDEyMDBrKSAyOS44ODc4IFRqCi0tMjk4MiBUSm0KLSg1MDBrKSAyMy45MTAyIFRqCi0tMzgzNCBUSm0KLSgzNTBrKSAyMy45MTAyIFRqCi0tMjU1NiBUSm0KLSg5MTQ3MDQpIDM1Ljg2NTQgVGoKLTk0LjI0NCA1NjkuMDAxIFRkCi0oLTIpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDIwMDBrKSAyOS44ODc4IFRqCi0tMjk4MiBUSm0KLSg5MDBrKSAyMy45MTAyIFRqCi0tMzgzNCBUSm0KLSg2MDBrKSAyMy45MTAyIFRqCi0tMjU1NiBUSm0KLSg4Nzc3MDMpIDM1Ljg2NTQgVGoKLTk0LjI0NCA1NTcuMDQ2IFRkCi0oLTMpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDI4MDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSgxMzAwaykgMjkuODg3OCBUagotLTM4MzQgVEptCi0oODUwaykgMjMuOTEwMiBUagotLTI1NTYgVEptCi0oODYwMzM4KSAzNS44NjU0IFRqCi05NC4yNDQgNTQ1LjA5MSBUZAotKC00KSAxMS45NTUxIFRqCi0tMjU1NiBUSm0KLSgzNjAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oMTcwMGspIDI5Ljg4NzggVGoKLS0zNDA4IFRKbQotKDExMDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSg4NDY4OTkpIDM1Ljg2NTQgVGoKLTk0LjI0NCA1MzMuMTM2IFRkCi0oLTUpIDExLjk1NTEgVGoKLS0yNTU2IFRKbQotKDQ0MDBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSgyMTAwaykgMjkuODg3OCBUagotLTM0MDggVEptCi0oMTM1MGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDg0NTE2MCkgMzUuODY1NCBUagotOTQuMjQ0IDUyMS4xODEgVGQKLSgtNikgMTEuOTU1MSBUagotLTI1NTYgVEptCi0oNTIwMGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDI1MDBrKSAyOS44ODc4IFRqCi0tMzQwOCBUSm0KLSgxNjAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oODM4NjI2KSAzNS44NjU0IFRqCi05NC4yNDQgNTA5LjIyNSBUZAotKC03KSAxMS45NTUxIFRqCi0tMjU1NiBUSm0KLSg2MTAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oMjkwMGspIDI5Ljg4NzggVGoKLS0zNDA4IFRKbQotKDE4NTBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSg4MzQwOTYpIDM1Ljg2NTQgVGoKLTk0LjI0NCA0OTcuMjcgVGQKLSgtOCkgMTEuOTU1MSBUagotLTI1NTYgVEptCi0oNjgwMGspIDI5Ljg4NzggVGoKLS0yNTU2IFRKbQotKDMzMDBrKSAyOS44ODc4IFRqCi0tMzQwOCBUSm0KLSgyMTAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oODI4NjQyKSAzNS44NjU0IFRqCi05NC4yNDQgNDg1LjMxNSBUZAotKC05KSAxMS45NTUxIFRqCi0tMjU1NiBUSm0KLSg3NjAwaykgMjkuODg3OCBUagotLTI1NTYgVEptCi0oMzcwMGspIDI5Ljg4NzggVGoKLS0zNDA4IFRKbQotKDIzNTBrKSAyOS44ODc4IFRqCi0tMjU1NiBUSm0KLSg4Mjg2NDIpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDcyIDQ2OS43NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NTkuODExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzUuMDIxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjYuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFJFQ08pIDU5LjY4MjQgVGoKLTUwIFRKbQotKFZFUklORykgNzkuMjA0NyBUagotLTI3OCBUSm0KLShEKSAxNC45MTU0IFRqCi00MCBUSm0KLShBKSAxNC45MTU0IFRqCi05MCBUSm0KLShUKSAxMi42MjIzIFRqCi05MCBUSm0KLShBKSAxNC45MTU0IFRqCi0tMjc4IFRKbQotKEZSKSAyNy41Mzc4IFRqCi0yMCBUSm0KLShPTSkgMzMuMjgwOCBUagotLTI3OCBUSm0KLShEKSAxNC45MTU0IFRqCi00MCBUSm0KLShBTUEpIDQ3LjAzOTQgVGoKLTUwIFRKbQotKEdFRCkgNDQuNzY3IFRqCi03MiA0MTAuMjMgVGQKLShGSUxFUykgNTguNTQ2MiBUagotWzEgMCAwIDEgNzIgNDA5Ljk3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDAwLjAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzODguMzEyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDM4OC4zMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtMzg4LjMxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA1LjEzOCAzODguMzEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXByZXNzZXMpIDQ1LjkyNzYgVGoKLS0zMjYgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTMyNiBUSm0KLShpbikgNy43NTA5IFRqCi0tMzI2IFRKbQotKGJsb2NrcywpIDI4LjUwMyBUagotLTM0NiBUSm0KLSh1c3VhbGx5KSAyOC43ODIgVGoKLS0zMjYgVEptCi0oOTAwa2J5dGVzKSA0MC45NTYyIFRqCi0tMzI2IFRKbQotKGxvbmcuKSAyMC4yMDQyIFRqCi0tMTA3NyBUSm0KLShFYWNoKSAxOS45MTUyIFRqCi0tMzI2IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMzI3IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzI2IFRKbQotKGhhbmRsZWQpIDMxLjU0MTYgVGoKLS0zMjYgVEptCi0oaW5kZXBlbmRlbnRseSkgNTYuNDQ4MSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTEwNzcgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zMjYgVEptCi0oYSkgNC40MjMzOSBUagotLTMyNiBUSm0KLShtZWRpYSkgMjQuMzQ4NiBUagotLTMyNiBUSm0KLShvcikgOC4yOTg4NSBUagotNzIgMzc2LjM1NyBUZAotKHRyYW5zbWlzc2lvbikgNTAuMzcwOSBUagotLTMxOSBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTMxOCBUSm0KLShjYXVzZXMpIDI2LjAwMjQgVGoKLS0zMTkgVEptCi0oYSkgNC40MjMzOSBUagotLTMxOCBUSm0KLShtdWx0aS1ibG9jaykgNDYuNDk1NSBUagotWzEgMCAwIDEgMjM0LjUxOCAzNzYuMzU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNC41MTggLTM3Ni4zNTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNC41MTggMzc2LjM1NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSguYnoyKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAyNTguNDI5IDM3Ni4zNTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU4LjQyOSAtMzc2LjM1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYxLjYwMyAzNzYuMzU3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZSkgMTIuNzMyMiBUagotLTMxOSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzE4IFRKbQotKGJlY29tZSkgMzAuOTgzNyBUagotLTMxOSBUSm0KLShkYW1hZ2VkLCkgMzguNDU1NiBUagotLTMzNiBUSm0KLShpdCkgNS41MzkyMSBUagotLTMxOCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0zMTkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMTggVEptCi0ocG9zc2libGUpIDMyLjY1NzQgVGoKLS0zMTkgVEptCi0odG8pIDcuNzUwOSBUagotLTMxOCBUSm0KLShyZWNvKSAxNy4xNDU2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMzE5IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMTkgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTMxOCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDM2NC40MDIgVGQKLSh1bmRhbWFnZWQpIDQ1LjkyNzYgVGoKLS0yNTAgVEptCi0oYmxvY2tzKSAyNi4wMTIzIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDJsZS4pIDE1LjIyMjkgVGoKLVsxIDAgMCAxIDcyIDM2Mi4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1Mi4yODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM0Mi40ODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMzU4IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zNTcgVEptCi0ocmVwcmVzZW50YXRpb24pIDU2LjQzODEgVGoKLS0zNTggVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNTcgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTM1OCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTM1OCBUSm0KLShpcykgNi42NDUwNSBUagotLTM1NyBUSm0KLShkZWxpbWl0ZWQpIDM3LjYzODcgVGoKLS0zNTggVEptCi0oYnkpIDkuOTYyNiBUagotLTM1NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzU4IFRKbQotKDQ4LWJpdCkgMjMuODAwNyBUagotLTM1OCBUSm0KLShwYXR0ZXJuLCkgMzAuMTU2OCBUagotLTM4NCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTM1OCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMzU3IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzU4IFRKbQotKHBvc3NpYmxlKSAzMi42NTc0IFRqCi0tMzU3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNTggVEptCi0oXDAwMm5kKSAxNS41MDE4IFRqCi0tMzU4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgMzMwLjUyOSBUZAotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjg2IFRKbQotKGJvdW5kYXJpZXMpIDQzLjcxNTkgVGoKLS0yODYgVEptCi0od2l0KSAxMi43MzIyIFRqCi0xIFRKbQotKGgpIDQuOTgxMyBUagotLTI4NiBUSm0KLShyZWFzb25hYmxlKSA0Mi42MDAxIFRqCi0tMjg2IFRKbQotKGNlcnRhaW50eSkgMzQuODU5MSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTgzNSBUSm0KLShFYWNoKSAxOS45MTUyIFRqCi0tMjg1IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjg2IFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yODYgVEptCi0oY2FycmllcykgMjYuNTUwMyBUagotLTI4NiBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yODUgVEptCi0obykgNC45ODEzIFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotLTI4NiBUSm0KLSgzMi1iaXQpIDIzLjgwMDcgVGoKLS0yODYgVEptCi0oQ1JDLCkgMjIuNDI1OCBUagotLTI4NiBUSm0KLShzbykgOC44NTY3NSBUagotLTI4NSBUSm0KLShkYW1hZ2VkKSAzNS45NjUgVGoKLS0yODYgVEptCi0oYmxvY2tzKSAyNi4wMTIzIFRqCi0tMjg2IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI4NiBUSm0KLShiZSkgOS40MDQ2OSBUagotNzIgMzE4LjU3NCBUZAotKGRpc3Rpbmd1aXNoZWQpIDUzLjE0MDUgVGoKLS0yNTAgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh1bmRhbWFnZWQpIDQ1LjkyNzYgVGoKLS0yNTAgVEptCi0ob25lcy4pIDIwLjc1MjEgVGoKLVsxIDAgMCAxIDcyIDMxNi40MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMwNi40NTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI5Ni42NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDJyZWNvdmVyKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAxNDMuNzMxIDI5Ni42NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQzLjczMSAtMjk2LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ2LjQ0OCAyOTYuNjU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjczIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNzIgVEptCi0oc2ltcGxlKSAyNi41NzAzIFRqCi0tMjczIFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0yNzMgVEptCi0od2hvc2UpIDI1LjQ1NDQgVGoKLS0yNzIgVEptCi0ocHVycG9zZSkgMzEuNTQxNiBUagotLTI3MyBUSm0KLShpcykgNi42NDUwNSBUagotLTI3MyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcyIFRKbQotKHNlYXJjaCkgMjUuNDQ0NSBUagotLTI3MyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNzMgVEptCi0oYmxvY2tzKSAyNi4wMTIzIFRqCi0tMjcyIFRKbQotKGluKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDM5Mi42NTUgMjk2LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuNjU1IC0yOTYuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTIuNjU1IDI5Ni42NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLmJ6MikgMjMuOTEwMiBUagotWzEgMCAwIDEgNDE2LjU2NiAyOTYuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxNi41NjYgLTI5Ni42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4yODIgMjk2LjY1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI3OCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MyBUSm0KLSh3cml0ZSkgMjAuNDczMSBUagotLTI3MyBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMjcyIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjczIFRKbQotKG91dCkgMTIuNzMyMiBUagotNzIgMjg0LjcwMSBUZAotKGludG8pIDE1LjUwMTggVGoKLS0yNTQgVEptCi0oaXRzKSA5LjQxNDY2IFRqCi0tMjU1IFRKbQotKG8pIDQuOTgxMyBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDEyMS40MyAyODQuNzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyMS40MyAtMjg0LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIxLjQzIDI4NC43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLmJ6MikgMjMuOTEwMiBUagotWzEgMCAwIDEgMTQ1LjM0IDI4NC43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ1LjM0IC0yODQuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDcuODc1IDI4NC43MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwMmxlLikgMTUuMjIyOSBUagotLTY0NyBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNTUgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjU0IFRKbQotKHRoZW4pIDE3LjE1NTYgVGoKLS0yNTUgVEptCi0odXNlKSAxMy4yODAxIFRqCi1bMSAwIDAgMSAyNDAuMDEgMjg0LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDAuMDEgLTI4NC43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0MC4wMSAyODQuNzAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi0tNjAwIFRKbQotKC10KSAxMS45NTUxIFRqCi1bMSAwIDAgMSAyODcuODMxIDI4NC43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg3LjgzMSAtMjg0LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjkwLjM2NyAyODQuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTUgVEptCi0odCkgMi43Njk2IFRqCi0xIFRKbQotKGVzdCkgMTEuMDY4NCBUagotLTI1NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTQgVEptCi0oaW50ZSkgMTQuOTQzOSBUagotMTUgVEptCi0oZ3JpdHkpIDE4LjgxOTQgVGoKLS0yNTUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjU1IFRKbQotKHJlc3VsdGluZykgMzQuODY5MSBUagotLTI1NCBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI1NiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1NSBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMjU0IFRKbQotKHRob3NlKSAyMS4wMzEgVGoKLTcyIDI3Mi43NDYgVGQKLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0odW5kYW1hZ2VkLikgNDguNDE4MiBUagotWzEgMCAwIDEgNzIgMjcwLjU4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjYwLjYyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjUwLjgyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgMjUwLjgyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC0yNTAuODI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTAuMDk5IDI1MC44MjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odGFrKSAxMi4xNzQzIFRqCi0xMCBUSm0KLShlcykgOC4yOTg4NSBUagotLTYzOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNjM5IFRKbQotKHNpbmdsZSkgMjMuODAwNyBUagotLTYzOSBUSm0KLShhcikgNy43NDA5NCBUagotMTggVEptCi0oZ3VtZW50LCkgMzIuMzc4NSBUagotLTczNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS02MzkgVEptCi0obmFtZSkgMjEuNTc5IFRqCi0tNjM5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTYzOSBUSm0KLShkYW1hZ2VkKSAzNS45NjUgVGoKLS02MzkgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTczNyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTYzOSBUSm0KLSh3cml0ZXMpIDI0LjM0ODYgVGoKLS02MzkgVEptCi0oYSkgNC40MjMzOSBUagotLTYzOSBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS02MzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS02NDAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotWzEgMCAwIDEgNzIgMjM4Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjM4Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjM4Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShyZWMwMDAxZmlsZS5iejIpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE2MS42NjQgMjM4Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjEuNjY0IC0yMzguODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuNjY0IDIzOC44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTY5LjA3MiAyMzguODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OS4wNzIgLTIzOC44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OS4wNzIgMjM4Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShyZWMwMDAyZmlsZS5iejIpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDI1OC43MzYgMjM4Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTguNzM2IC0yMzguODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTguNzM2IDIzOC44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTQ5NCBUSm0KLShldGMsKSAxNC4xMDcgVGoKLS00OTMgVEptCi0oY29udGFpbmluZykgNDIuMDYyMSBUagotLTQ0NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00NDUgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHRyYWN0ZWQpIDMyLjA4OTUgVGoKLS00NDUgVEptCi0oYmxvY2tzLikgMjguNTAzIFRqCi0tMTc4OSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS00NDUgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tNDQ1IFRKbQotKFwwMDJsZW5hbWVzKSAzOC4xODY2IFRqCi0tNDQ1IFRKbQotKGFyZSkgMTIuMTY0MyBUagotNzIgMjI2LjkxOCBUZAotKGRlc2lnbmVkKSAzNS40MTcgVGoKLS0zMzcgVEptCi0oc28pIDguODU2NzUgVGoKLS0zMzcgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTMzNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzcgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMzM3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzM3IFRKbQotKHdpbGRjKSAyMi4xMzY5IFRqCi0xIFRKbQotKGFyZHMpIDE2LjU5NzcgVGoKLS0zMzcgVEptCi0oaW4pIDcuNzUwOSBUagotLTMzNyBUSm0KLShzdWJzZXF1ZW50KSA0NC4yNzM4IFRqCi0tMzM3IFRKbQotKHByb2Nlc3NpbmcpIDQyLjYxIFRqCi0tMzM3IFRKbQotKC0tKSA2LjYzNTA5IFRqCi0tMzM3IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMzNyBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4YW1wbGUsKSAzMS44MjA1IFRqCi1bMSAwIDAgMSAzOTYuNTM4IDIyNi45MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzk2LjUzOCAtMjI2LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk2LjUzOCAyMjYuOTE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi0tNjAwIFRKbQotKC1kYykgMTcuOTMyNyBUagotLTYwMCBUSm0KLShyZWMpIDE3LjkzMjcgVGoKLTQ3NC4yNDcgMjI1LjE3NCBUZAotKCopIDUuOTc3NTYgVGoKLTQ4MC4yMjQgMjI2LjkxOCBUZAotKGZpbGUuYnoyKSA0Ny44MjA1IFRqCi0tNjAwIFRKbQotKD4pIDUuOTc3NTYgVGoKLTcyIDIxNC45NjMgVGQKLShyZWNvdmVyZWRfZGF0YSkgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiAyMTQuOTYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS42ODYgLTIxNC45NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OC4xNzcgMjE0Ljk2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgtLSkgNi42MzUwOSBUagotLTI1MCBUSm0KLShsaXN0cykgMTYuMDU5NyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb3JyZWN0KSAyNy42NTYyIFRqCi0tMjUwIFRKbQotKG9yZGVyKSAyMS4wMjExIFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyMTMuNjUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMDMuNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5My4wNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDJyZWNvdmVyKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAxNDMuNzMxIDE5My4wNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQzLjczMSAtMTkzLjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ1LjkzIDE5My4wNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjIxIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjIwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjIxIFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLS0yMjEgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjIwIFRKbQotKGRlYWxpbmcpIDI5LjMyOTkgVGoKLS0yMjEgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTIyMSBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlKSA5LjQwNDY5IFRqCi1bMSAwIDAgMSAzMDcuMjI5IDE5My4wNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA3LjIyOSAtMTkzLjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA3LjIyOSAxOTMuMDQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC5iejIpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDMzMS4xNCAxOTMuMDQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMS4xNCAtMTkzLjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMzLjMzOCAxOTMuMDQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjI3IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjIwIFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjIxIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yMjEgVEptCi0oY29udGFpbikgMjkuMzI5OSBUagotLTIyMCBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIyMSBUSm0KLShibG9ja3MuKSAyOC41MDMgVGoKLS02MDAgVEptCi0oSXQpIDYuMDg3MTUgVGoKLS0yMjEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMjEgVEptCi0oY2xlYXJseSkgMjcuMTA4MiBUagotNzIgMTgxLjA5IFRkCi0oZnV0aWxlKSAyMS4wMzEgVGoKLS0yODkgVEptCi0odG8pIDcuNzUwOSBUagotLTI4OSBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yODkgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yODkgVEptCi0ob24pIDkuOTYyNiBUagotLTI4OSBUSm0KLShkYW1hZ2VkKSAzNS45NjUgVGoKLS0yODkgVEptCi0oc2luZ2xlLWJsb2NrKSA0OS4yNTUxIFRqCi0tMjkwIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLTEgVEptCi0oLCkgMi40OTA2NSBUagotLTI5OSBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTI4OSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjkwIFRKbQotKGRhbWFnZWQpIDM1Ljk2NSBUagotLTI4OSBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTI4OSBUSm0KLShjYW5ub3QpIDI2LjU2MDMgVGoKLS0yODkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODkgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmVkLikgMTkuNjM2MyBUagotLTg1NCBUSm0KLShJZikgNi42MzUwOSBUagotLTI4OSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTAgVEptCi0od2lzaCkgMTguODE5NCBUagotLTI4OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg5IFRKbQotKG1pbmltaXNlKSAzNy4wOTA4IFRqCi03MiAxNjkuMTM1IFRkCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTMyMCBUSm0KLShwb3RlbnRpYWwpIDM0Ljg2OTEgVGoKLS0zMjAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxOSBUSm0KLShsb3NzKSAxNS41MDE4IFRqCi0tMzIwIFRKbQotKHRocm91Z2gpIDMwLjk5MzYgVGoKLS0zMjAgVEptCi0obWVkaWEpIDI0LjM0ODYgVGoKLS0zMjAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zMTkgVEptCi0odHJhbnNtaXNzaW9uKSA1MC4zNzA5IFRqCi0tMzIwIFRKbQotKGVycm9ycywpIDI1LjcyMzQgVGoKLS0zMzcgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzIwIFRKbQotKG1pZ2h0KSAyMy4yNTI3IFRqCi0tMzIwIFRKbQotKGNvbnNpZGVyKSAzMy43NTMzIFRqCi0tMzIwIFRKbQotKGNvbXByZXNzaW5nKSA1MC4zNjA5IFRqCi0tMzE5IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMjAgVEptCi0oYSkgNC40MjMzOSBUagotLTMyMCBUSm0KLShzbWFsbGVyKSAyOS4zMjk5IFRqCi0tMzIwIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi03MiAxNTcuMTc5IFRkCi0oc2l6ZS4pIDE3Ljk4MjUgVGoKLVsxIDAgMCAxIDcyIDE1Ny4wOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTQ3LjExN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTIyLjQyNiBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi43LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShQRVJGT1JNQU5DRSkgMTYxLjgxOCBUagotLTI3OCBUSm0KLShOTykgMzAuOTg3NyBUagotNDAgVEptCi0oVEVTKSA0MC4xODA4IFRqCi1bMSAwIDAgMSA3MiAxMjIuMTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTIuMjA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMDAuNTA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTMwNSBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMzA0IFRKbQotKHBoYXNlKSAyMi42ODQ4IFRqCi0tMzA1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzA0IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMzA1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhdGhlcnMpIDIzLjc5MDcgVGoKLS0zMDQgVEptCi0odG9nZXRoZXIpIDMyLjY0NzQgVGoKLS0zMDUgVEptCi0oc2ltaWxhcikgMjcuNjc2MSBUagotLTMwNCBUSm0KLShzdHJpbmdzKSAyNi41NzAzIFRqCi0tMzA1IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMDQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA1IFRKbQotKFwwMDJsZS4pIDE1LjIyMjkgVGoKLS05NDcgVEptCi0oQmVjYXVzZSkgMzMuMTk1NCBUagotLTMwNSBUSm0KLShvZikgOC4yOTg4NSBUagotLTMwNCBUSm0KLSh0aGlzLCkgMTYuODg2NiBUagotLTMxOSBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMzA0IFRKbQotKGNvbnRhaW5pbmcpIDQyLjA2MjEgVGoKLS0zMDUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLTcyIDg4LjU1MzQgVGQKLShsb25nKSAxNy43MTM1IFRqCi0tMjg2IFRKbQotKHJ1bnMpIDE3LjE1NTYgVGoKLS0yODUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yODYgVEptCi0ocmVwZWF0ZWQpIDMzLjc0MzMgVGoKLS0yODUgVEptCi0oc3ltYm9scywpIDM1LjcwNiBUagotLTI5NSBUSm0KLShsaWspIDEwLjUyMDUgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODYgVEptCi0oImFhYmFhYmFhYmFhYikgNTkuMzc3MSBUagotLTI4NSBUSm0KLSguLi4iKSAxMS41MzY3IFRqCi0tNTcxIFRKbQotKFwocmVwZWF0ZWQpIDM3LjA2MDkgVGoKLS0yODYgVEptCi0oc2UpIDguMjk4ODUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJhbCkgMTQuOTMzOSBUagotLTI4NiBUSm0KLShodW5kcmVkKSAzMi42NDc0IFRqCi0tMjg1IFRKbQotKHRpbWVzXCkpIDI0LjkwNjUgVGoKLS0yODYgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjg2IFRKbQotKGNvbSkgMTcuMTU1NiBUagotMSBUSm0KLShwcmVzcykgMjAuNDczMSBUagotLTI4NiBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjg2IFRKbQotKHNsbykgMTEuNjI2NCBUagotMjUgVEptCi0od2x5KSAxNC45NDM5IFRqCi03MiA3Ni41OTgzIFRkCi0odGhhbikgMTcuMTU1NiBUagotLTMyMiBUSm0KLShub3JtYWwuKSAzMC43MTQ3IFRqCi0tNTI0IFRKbQotKFYpIDcuMTkzIFRqCi0xMTEgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMzIyIFRKbQotKDAuOS41KSAxOS45MjUyIFRqCi0tMzIxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzIyIFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMjIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzIxIFRKbQotKG11Y2gpIDIyLjEzNjkgVGoKLS0zMjIgVEptCi0oYmV0dGVyKSAyMi42ODQ4IFRqCi0tMzIxIFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0zMjIgVEptCi0ocHJlKSAxMi43MjIyIFRqCi0yNSBUSm0KLSh2aW91cykgMjEuNTg5IFRqCi0tMzIxIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMzIyIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMjIgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMzIxIFRKbQotKHJlc3BlY3QuKSAzMC43MDQ3IFRqCi0tMTA1MCBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0zMjEgVEptCi0ocmF0aW8pIDE4LjI2MTQgVGoKLS0zMjIgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotWzEgMCAwIDEgNzIgNTAuODUxOF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDMuMDYzMyAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni4zMzIgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzOS4zOTUgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg2KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDEwIDEwCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMDUuNTE5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcxLjU5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzcuMTA5IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyNjYuMDcxIDc0Ny4wODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JzdC1jYXNlKSAzNS40MDcxIFRqCi0tMjg5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjkwIFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJhZ2UtY2FzZSkgNDIuMDMyMiBUagotLTI4OSBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI5MCBUSm0KLSh0aW1lKSAxNy43MTM1IFRqCi0tMjg5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjkwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkwIFRKbQotKHJlKSA3Ljc0MDk0IFRqCi0xNSBUSm0KLShnaW9uKSAxNy43MTM1IFRqCi0tMjg5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg5IFRKbQotKDEwOjEuKSAyMC4yMDQyIFRqCi0tODU3IFRKbQotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjkwIFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXMpIDIxLjU4OSBUagotLTI4OSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbnMsKSAzMC43MTQ3IFRqCi0tMjk5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI5MCBUSm0KLShcMDAyZ3VyZSkgMjMuMjQyNyBUagotLTI4OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yOTAgVEptCi0obW9yZSkgMjAuNDczMSBUagotNzIgNjk4LjA4MiBUZAotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSgxMDA6MS4pIDI1LjE4NTUgVGoKLS02MjAgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSAxODYuMDAyIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg2LjAwMiAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg2LjAwMiA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC12dnZ2KSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMTUuODg5IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE1Ljg4OSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE4LjM4IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob3B0aW9uKSAyNS40NjQ0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0obW9uaXRvcikgMzEuNTUxNiBUagotLTI1MCBUSm0KLShwcm9ncmVzcykgMzMuNzUzMyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGdyZWF0KSAxOS45MTUyIFRqCi0tMjUwIFRKbQotKGRldGFpbCwpIDI0LjYyNzUgVGoKLS0yNTAgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQuKSAxNC42NjQ5IFRqCi1bMSAwIDAgMSA3MiA2OTUuOTI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02ODUuOTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKERlY29tcHJlc3Npb24pIDYxLjk3NzMgVGoKLS0yNTAgVEptCi0oc3BlZWQpIDIyLjY4NDggVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0odW5hZikgMTcuNzAzNSBUagotMjUgVEptCi0oZmVjdGVkKSAyNC4zMzg2IFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0odGhlc2UpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0ocGhlbm9tZW5hLikgNDguNDE4MiBUagotWzEgMCAwIDEgNzIgNjc0LjAwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjY0LjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjU0LjI0NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA2NTQuMjQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTY1NC4yNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC44NjMgNjU0LjI0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1c3VhbGx5KSAyOC43ODIgVGoKLS0yOTkgVEptCi0oYWxsb2NhdGVzKSAzNC44NTkxIFRqCi0tMjk4IFRKbQotKHNlKSA4LjI5ODg1IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyYWwpIDE0LjkzMzkgVGoKLS0yOTkgVEptCi0obWUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhYnl0ZXMpIDI1LjQ1NDQgVGoKLS0yOTggVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTkgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjk5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTggVEptCi0ob3BlcmF0ZSkgMjkuMzE5OSBUagotLTI5OSBUSm0KLShpbiwpIDEwLjI0MTYgVGoKLS0zMTEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTggVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI5OSBUSm0KLShjaGFyKSAxNy4xNDU2IFRqCi0xOCBUSm0KLShnZXMpIDEzLjI4MDEgVGoKLS0yOTggVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yOTkgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjk5IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjk4IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTkgVEptCi0oYSkgNC40MjMzOSBUagotLTI5OCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaXJseSkgMTguMjYxNCBUagotLTI5OSBUSm0KLShyYW5kb20pIDMwLjQzNTcgVGoKLTcyIDY0Mi4yOTEgVGQKLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhc2hpb24uKSAyOC41MDMgVGoKLS03NDMgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI3MCBUSm0KLShtZWFucykgMjUuNDU0NCBUagotLTI3MSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjcwIFRKbQotKHBlcmZvcm1hbmNlLCkgNTIuODMxNyBUagotLTI3NiBUSm0KLShib3RoKSAxNy43MTM1IFRqCi0tMjcwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI3MSBUSm0KLShjb21wcmVzc2luZykgNTAuMzYwOSBUagotLTI3MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MSBUSm0KLShkZWNvbXByZXNzaW5nLCkgNjIuMjU2MyBUagotLTI3NSBUSm0KLShpcykgNi42NDUwNSBUagotLTI3MSBUSm0KLShsYXIpIDEwLjUxMDUgVGoKLTE4IFRKbQotKGdlbHkpIDE3LjE1NTYgVGoKLS0yNzAgVEptCi0oZGV0ZXJtaW5lZCkgNDQuODIxNyBUagotLTI3MSBUSm0KLShieSkgOS45NjI2IFRqCi0tMjcwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MSBUSm0KLShzcGVlZCkgMjIuNjg0OCBUagotNzIgNjMwLjMzNiBUZAotKGF0KSA3LjE5MyBUagotLTI5NCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI5NCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjk0IFRKbQotKG1hY2hpbmUpIDMzLjc1MzMgVGoKLS0yOTUgVEptCi0oY2EpIDguODQ2NzkgVGoKLTEgVEptCi0obikgNC45ODEzIFRqCi0tMjk1IFRKbQotKHNlcnZpY2UpIDI4LjIxNDEgVGoKLS0yOTQgVEptCi0oY2FjaGUpIDIyLjY3NDkgVGoKLS0yOTQgVEptCi0obWlzc2VzLikgMjkuMDYwOSBUagotLTQ0MiBUSm0KLShCZWNhdXNlKSAzMy4xOTU0IFRqCi0tMjk0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjk0IFRKbQotKHRoaXMsKSAxNi44ODY2IFRqCi0tMzA2IFRKbQotKHNtYWxsKSAyMS41ODkgVGoKLS0yOTQgVEptCi0oY2hhbmdlcykgMzIuMDg5NSBUagotLTI5NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NCBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjk0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTQgVEptCi0ocmVkdWNlKSAyNi41NTAzIFRqCi0tMjk0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NSBUSm0KLShtaXNzKSAxOC4yNzE0IFRqCi0tMjk0IFRKbQotKHJhdGUpIDE0LjkzMzkgVGoKLTcyIDYxOC4zODEgVGQKLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUzIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yNTMgVEptCi0ob2JzZXJ2KSAyNi41NjAzIFRqCi0xNSBUSm0KLShlZCkgOS40MDQ2OSBUagotLTI1MyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUzIFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MyBUSm0KLShkaXNwcm9wb3J0aW9uYXRlbHkpIDczLjA1NTcgVGoKLS0yNTMgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZSkgOS40MDQ2OSBUagotLTI1MyBUSm0KLShwZXJmb3JtYW5jZSkgNTAuMzQxIFRqCi0tMjUzIFRKbQotKGltcHJvKSAyMy44MDA3IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVtZW50cy4pIDMwLjcxNDcgVGoKLS02MzkgVEptCi0oSSkgMy4zMTc1NSBUagotLTI1MyBUSm0KLShpbWFnaW5lKSAzMi4wOTk1IFRqCi1bMSAwIDAgMSA0MzguOTA5IDYxOC4zODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM4LjkwOSAtNjE4LjM4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM4LjkwOSA2MTguMzgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NjguNzk2IDYxOC4zODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4Ljc5NiAtNjE4LjM4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDcxLjMxOCA2MTguMzgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTMgVEptCi0ocGVyZm9ybSkgMzIuMDg5NSBUagotLTI1MyBUSm0KLShiZXN0KSAxNi4wNDk3IFRqCi03MiA2MDYuNDI2IFRkCi0ob24pIDkuOTYyNiBUagotLTI1MCBUSm0KLShtYWNoaW5lcykgMzcuNjI4NyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5KSAxMi43MjIyIFRqCi0tMjUwIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oY2FjaGVzLikgMjkuMDQxIFRqCi1bMSAwIDAgMSA3MiA2MDQuMjY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTQuMzA2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NzEuNjczIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgyLjguKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKENBKSAyOS44MzA5IFRqCi04MCBUSm0KLShWRUEpIDQyLjQ3MzkgVGoKLTkwIFRKbQotKFRTKSAyNi40MDE2IFRqCi1bMSAwIDAgMSA3MiA1NzEuNDE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjEuNDUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDkuNzU1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEkvTykgMTMuMjgwMSBUagotLTI2OCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI2NyBUSm0KLShtZXNzYWdlcykgMzcuNjI4NyBUagotLTI2OCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNjggVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjY4IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjY3IFRKbQotKGhlbHBmdWwpIDI4LjIyNCBUagotLTI2OCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI2OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI2NyBUSm0KLShjb3VsZCkgMjIuMTM2OSBUagotLTI2OCBUSm0KLShiZS4pIDExLjg5NTMgVGoKLVsxIDAgMCAxIDI5My4zMTMgNTQ5Ljc1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTMuMzEzIC01NDkuNzU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTMuMzEzIDU0OS43NTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMyMy4yMDEgNTQ5Ljc1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjMuMjAxIC01NDkuNzU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjUuODY4IDU0OS43NTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odHJpZXMpIDE3LjE1NTYgVGoKLS0yNjggVEptCi0oaGFyZCkgMTcuNzAzNSBUagotLTI2NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY4IFRKbQotKGRldGVjdCkgMjMuNzkwNyBUagotLTI2OCBUSm0KLShJL08pIDEzLjI4MDEgVGoKLS0yNjggVEptCi0oZXJyb3JzKSAyMy4yMzI4IFRqCi0tMjY3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY4IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhpdCkgMTAuNTIwNSBUagotLTI2OCBUSm0KLShjbGVhbmx5KSAyOC43NzIgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNzIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjY4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgNTM3LjggVGQKLShkZXRhaWxzKSAyNi4wMTIzIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHdoYXQpIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2JsZW0pIDMzLjIwNTMgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oc29tZXRpbWVzKSA0Mi42MiBUagotLTI1MCBUSm0KLShzZWVtKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKHJhdGhlcikgMjMuMjMyOCBUagotLTI1MCBUSm0KLShtaXNsZWFkaW5nLikgNDYuMjE2NSBUagotWzEgMCAwIDEgNzIgNTM1LjY0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTI1LjY4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE1Ljg4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjgwIFRKbQotKG1hbnVhbCkgMjkuMzI5OSBUagotLTI3OSBUSm0KLShwYWdlKSAxOC44MDk0IFRqCi0tMjgwIFRKbQotKHBlcnRhaW5zKSAzMS41NDE2IFRqCi0tMjgwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzkgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24pIDI0LjM0ODYgVGoKLS0yODAgVEptCi0oMS4wLjUpIDE5LjkyNTIgVGoKLS0yODAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDI1Ni44NCA1MTUuODgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1Ni44NCAtNTE1Ljg4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU2Ljg0IDUxNS44ODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI4Ni43MjggNTE1Ljg4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODYuNzI4IC01MTUuODgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODYuNzI4IDUxNS44ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTc5OCBUSm0KLShDb21wcmVzc2VkKSA0OS4yNTUxIFRqCi0tMjgwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNzkgVEptCi0oY3JlYXRlZCkgMjguNzYyIFRqCi0tMjgwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yODAgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjc5IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjgwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjgwIFRKbQotKGVudGlyZWx5KSAzMC40MzU3IFRqCi0tMjc5IFRKbQotKGZvcncpIDE4LjgwOTQgVGoKLTEwIFRKbQotKGFyZHMpIDE2LjU5NzcgVGoKLTcyIDUwMy45MjcgVGQKLShhbmQpIDE0LjM4NiBUagotLTI5NCBUSm0KLShiYWNrdykgMjYuMDAyNCBUagotMTAgVEptCi0oYXJkcykgMTYuNTk3NyBUagotLTI5MyBUSm0KLShjb21wYXRpYmxlKSA0NC4yNzM4IFRqCi0tMjk0IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yOTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkzIFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXMpIDIxLjU4OSBUagotLTI5NCBUSm0KLShwdWJsaWMpIDI0LjkwNjUgVGoKLS0yOTQgVEptCi0ocmVsZWFzZXMsKSAzNC4wMjIzIFRqCi0tMzA0IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMjk0IFRKbQotKDAuMXBsMiwpIDI3LjY3NjEgVGoKLS0zMDUgVEptCi0oMC45LjApIDE5LjkyNTIgVGoKLS0yOTMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTQgVEptCi0oMC45LjUsKSAyMi40MTU5IFRqCi0tMzA1IFRKbQotKDEuMC4wLCkgMjIuNDE1OSBUagotLTMwNCBUSm0KLSgxLjAuMSwpIDIyLjQxNTkgVGoKLS0zMDUgVEptCi0oMS4wLjIpIDE5LjkyNTIgVGoKLS0yOTQgVEptCi0oYW5kKSAxNC4zODYgVGoKLTcyIDQ5MS45NzIgVGQKLSgxLjAuMywpIDIyLjQxNTkgVGoKLS0yNjMgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjYwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNjAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjYwIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjYwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhjZXB0aW9uOikgMzcuMDgwOCBUagotLTMzMCBUSm0KLSgwLjkuMCkgMTkuOTI1MiBUagotLTI2MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI2MCBUSm0KLShhYm8pIDE0LjM4NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjYwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI2MCBUSm0KLShjb3JyZWN0bHkpIDM1LjQwNzEgVGoKLS0yNjAgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTI2MCBUSm0KLShtdWx0aXBsZSkgMzMuMjE1MyBUagotLTI2MCBUSm0KLShjb25jYXRlbmF0ZWQpIDUyLjAwNDggVGoKLS0yNjAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotNzIgNDgwLjAxNyBUZAotKFwwMDJsZXMuKSAxOS4wOTgzIFRqCi0tMzEwIFRKbQotKDAuMXBsMikgMjUuMTg1NSBUagotLTI1MCBUSm0KLShjYW5ub3QpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oZG8pIDkuOTYyNiBUagotLTI1MCBUSm0KLSh0aGlzOykgMTcuMTY1NiBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHN0b3ApIDE2LjYwNzcgVGoKLS0yNTAgVEptCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2luZykgNTkuNzY1NiBUagotLTI1MCBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDcyIDQ3Ny44Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDY3Ljg5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDU4LjA5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgNDU4LjA5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC00NTguMDk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDYuMTc0IDQ1OC4wOTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0yNDUgVEptCi0ocHJpb3IpIDE5LjM2NzMgVGoKLS0yNDUgVEptCi0odG8pIDcuNzUwOSBUagotLTI0NSBUSm0KLSgxLjAuMikgMTkuOTI1MiBUagotLTI0NiBUSm0KLSh1c2VkKSAxOC4yNjE0IFRqCi0tMjQ1IFRKbQotKDMyLWJpdCkgMjMuODAwNyBUagotLTI0NSBUSm0KLShpbnRlKSAxNC45NDM5IFRqCi0xNSBUSm0KLShnZXJzKSAxNi41OTc3IFRqCi0tMjQ1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDUgVEptCi0ocmVwcmVzZW50KSAzNi41MTI5IFRqCi0tMjQ1IFRKbQotKGJpdCkgMTAuNTIwNSBUagotLTI0NiBUSm0KLShwb3NpdGlvbnMpIDM1Ljk4NDkgVGoKLS0yNDUgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0NSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjQ1IFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjQ2IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjQ1IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjQ1IFRKbQotKGNvdWxkKSAyMi4xMzY5IFRqCi03MiA0NDYuMTQ0IFRkCi0obm90KSAxMi43MzIyIFRqCi0tMzg0IFRKbQotKGhhbmRsZSkgMjYuNTYwMyBUagotLTM4MyBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMzg0IFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0zODMgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTM4NCBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMzgzIFRKbQotKDUxMikgMTQuOTQzOSBUagotLTM4NCBUSm0KLShtZSkgMTIuMTc0MyBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFieXRlcykgMjUuNDU0NCBUagotLTM4MyBUSm0KLShsb25nLikgMjAuMjA0MiBUagotLTE0MjEgVEptCi0oVikgNy4xOTMgVGoKLTExMSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0zODQgVEptCi0oMS4wLjIpIDE5LjkyNTIgVGoKLS0zODMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zODQgVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTM4NCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0zODMgVEptCi0oNjQtYml0KSAyMy44MDA3IFRqCi0tMzg0IFRKbQotKGludHMpIDE0LjM5NiBUagotLTM4MyBUSm0KLShvbikgOS45NjI2IFRqCi0tMzg0IFRKbQotKHNvbWUpIDIxLjAzMSBUagotNzIgNDM0LjE4OSBUZAotKHBsYXRmb3JtcykgMzguMTg2NiBUagotLTI0NSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI0NiBUSm0KLShzdXBwb3J0KSAyOS44ODc4IFRqCi0tMjQ1IFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLS0yNDYgVEptCi0oXChHTlUpIDI0Ljg5NjUgVGoKLS0yNDUgVEptCi0oc3VwcG9ydGVkKSAzOS4yOTI1IFRqCi0tMjQ1IFRKbQotKHRhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2V0cywpIDE4LjU0MDQgVGoKLS0yNDcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNDUgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaW5kbykgMTcuNzEzNSBUagotMjUgVEptCi0od3NcKS4pIDE2Ljg3NjYgVGoKLS0zMDkgVEptCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tMjQ1IFRKbQotKGVzdGFibGlzaCkgMzQuODY5MSBUagotLTI0NSBUSm0KLSh3aGV0aGVyKSAzMi4wODk1IFRqCi0tMjQ2IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjQ1IFRKbQotKG5vdCkgMTIuNzMyMiBUagotWzEgMCAwIDEgNDY4LjI2OSA0MzQuMTg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OC4yNjkgLTQzNC4xODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2OC4yNjkgNDM0LjE4OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMnJlY292ZXIpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDU0MCA0MzQuMTg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNDM0LjE4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIyLjIzMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWx0KSAxMy4yOTAxIFRqCi0tMjU1IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTUgVEptCi0oc3VjaCkgMTguMjYxNCBUagotLTI1NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU1IFRKbQotKGxpbWl0YXRpb24sKSA0MS4yNDUyIFRqCi0tMjU2IFRKbQotKHJ1bikgMTMuMjgwMSBUagotLTI1NSBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1NSBUSm0KLSh3aXRob3V0KSAzMC40NDU3IFRqCi0tMjU1IFRKbQotKGFyKSA3Ljc0MDk0IFRqCi0xOCBUSm0KLShndW1lbnRzLikgMzYuMjUzOSBUagotLTMyNSBUSm0KLShJbikgOC4yOTg4NSBUagotLTI1NSBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjU2IFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50KSAxMi4xNzQzIFRqCi0tMjU1IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1NSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWxkKSAxNS41MDE4IFRqCi0tMjU1IFRKbQotKHlvdXJzZWxmKSAzMi42NDc0IFRqCi0tMjU1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjU1IFRKbQotKHVubGltaXRlZCkgMzguMTk2NiBUagotLTI1NSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbikgMjQuMzQ4NiBUagotLTI1NSBUSm0KLShpZikgNi4wODcxNSBUagotNzIgNDEwLjI3OCBUZAotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0ocmVjb21waWxlKSAzOS44NDA0IFRqCi0tMjUwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDE3Ni4zMTggNDEwLjI3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzYuMzE4IC00MTAuMjc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzYuMzE4IDQxMC4yNzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oTWF5YmVVSW50NjQpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDI0Mi4wNzEgNDEwLjI3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDIuMDcxIC00MTAuMjc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDQuNTYyIDQxMC4yNzggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2V0KSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0odW5zaWduZWQpIDM1Ljk3NDkgVGoKLS0yNTAgVEptCi0oNjQtYml0KSAyMy44MDA3IFRqCi0tMjUwIFRKbQotKGludGUpIDE0Ljk0MzkgVGoKLTE1IFRKbQotKGdlcikgMTIuNzIyMiBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNDA4LjEyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzk4LjE1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzc1LjUyNSBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMi45LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShBKSAxNC45MTU0IFRqCi01MCBUSm0KLShVVEhPUikgNzMuNDQxIFRqCi1bMSAwIDAgMSA3MiAzNzUuMjY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjUuMzA1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNTMuNjA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEp1bGlhbikgMjMuODAwNyBUagotLTI1MCBUSm0KLShTZSkgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXJkLCkgMTUuMjEyOSBUagotWzEgMCAwIDEgMTMyLjgwMSAzNTMuNjA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMi44MDEgLTM1My42MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMi44MDEgMzUzLjYwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShqc2V3YXJkQGJ6aXAub3JnKSA5NS42NDEgVGoKLVsxIDAgMCAxIDIyOC40NDMgMzUzLjYwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTYuNDQzIC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM0Mi4xMTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMzMS42OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yOTkgVEptCi0oaWRlYXMpIDIwLjQ3MzEgVGoKLS0zMDAgVEptCi0oZW1ib2RpZWQpIDM5LjI5MjUgVGoKLS0yOTkgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgMTY2Ljk0MiAzMzEuNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY2Ljk0MiAtMzMxLjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuOTQyIDMzMS42OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTk2LjgzIDMzMS42OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTYuODMgLTMzMS42OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk5LjgxMyAzMzEuNjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjk5IFRKbQotKGR1ZSkgMTQuMzg2IFRqCi0tMzAwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTkgVEptCi0oXChhdCkgMTAuNTEwNSBUagotLTMwMCBUSm0KLShsZWFzdFwpKSAyMS41NzkgVGoKLS0yOTkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAwIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjk5IFRKbQotKHBlb3BsZTopIDI5LjMyOTkgVGoKLS00MDkgVEptCi0oTWljaGFlbCkgMzIuNjQ3NCBUagotLTMwMCBUSm0KLShCdXJybykgMjMuMjQyNyBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0yOTkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTkgVEptCi0oRGEpIDExLjYxNjQgVGoKLTIwIFRKbQotKHZpZCkgMTIuNzMyMiBUagotLTMwMCBUSm0KLShXaGVlbGVyKSAzMy43NDMzIFRqCi0tMjk5IFRKbQotKFwoZm9yKSAxNC45MzM5IFRqCi03MiAzMTkuNzM1IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMzEyIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMzEzIFRKbQotKHNvcnRpbmcpIDI3LjY3NjEgVGoKLS0zMTIgVEptCi0odHJhbnNmb3JtYXRpb25cKSwpIDY0LjQ2OCBUagotLTMyOCBUSm0KLShEYSkgMTEuNjE2NCBUagotMjAgVEptCi0odmlkKSAxMi43MzIyIFRqCi0tMzEyIFRKbQotKFdoZWVsZXIpIDMzLjc0MzMgVGoKLS0zMTMgVEptCi0oXChhZykgMTIuNzIyMiBUagotNSBUSm0KLShhaW4sKSAxNC42NjQ5IFRqCi0tMzI3IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMxMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTIgVEptCi0oSHVmKSAxNS40OTE4IFRqCi0yNSBUSm0KLShmbWFuKSAyMC40NzMxIFRqCi0tMzEyIFRKbQotKGNvZGVyXCksKSAyNy45MzUxIFRqCi0tMzI4IFRKbQotKFBldGVyKSAyMC40NzMxIFRqCi0tMzEzIFRKbQotKEZlbndpY2spIDM0LjMxMTIgVGoKLS0zMTIgVEptCi0oXChmb3IpIDE0LjkzMzkgVGoKLS0zMTIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzEzIFRKbQotKHN0cnVjdHVyZWQpIDM5Ljg0MDQgVGoKLTcyIDMwNy43OCBUZAotKGNvZGluZykgMjcuMTE4MiBUagotLTMyNSBUSm0KLShtb2RlbCkgMjQuOTA2NSBUagotLTMyNiBUSm0KLShpbikgNy43NTA5IFRqCi0tMzI1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMyNiBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotWzEgMCAwIDEgMTkxLjE1NiAzMDcuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5MS4xNTYgLTMwNy43NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5MS4xNTYgMzA3Ljc3OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAyMTUuMDY3IDMwNy43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE1LjA2NyAtMzA3Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE1LjA2NyAzMDcuNzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zNDQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMjYgVEptCi0obWFuKSAxNy4xNTU2IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zMjUgVEptCi0ocmVcMDAybmVtZW50c1wpLCkgNTIuMjkzNyBUagotLTM0NSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMyNSBUSm0KLShBbGlzdGFpcikgMjkuODg3OCBUagotLTMyNiBUSm0KLShNb2YpIDE3LjE1NTYgVGoKLTI1IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGF0LCkgOS42ODM2NSBUagotLTM0NCBUSm0KLShSYWRmb3JkKSAzMi42NDc0IFRqCi0tMzI1IFRKbQotKE5lYWwpIDE4LjgwOTQgVGoKLS0zMjYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMjUgVEptCi0oSWFuKSAxMi43MjIyIFRqCi0tMzI2IFRKbQotKFcpIDkuNDA0NjkgVGoKLTQwIFRKbQotKGl0dGVuKSAxNy43MTM1IFRqCi0tMzI1IFRKbQotKFwoZm9yKSAxNC45MzM5IFRqCi03MiAyOTUuODI0IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc3IFRKbQotKGFyaXRobWV0aWMpIDQwLjM5ODMgVGoKLS0yNzcgVEptCi0oY29kZXIpIDIyLjEyNjkgVGoKLS0yNzcgVEptCi0oaW4pIDcuNzUwOSBUagotLTI3NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzcgVEptCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLVsxIDAgMCAxIDIxNC4xNzEgMjk1LjgyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTQuMTcxIC0yOTUuODI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTQuMTcxIDI5NS44MjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcCkgMjMuOTEwMiBUagotWzEgMCAwIDEgMjM4LjA4MiAyOTUuODI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzOC4wODIgLTI5NS44MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzOC4wODIgMjk1LjgyNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKS4pIDUuODA4MiBUagotLTc4MiBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjc3IFRKbQotKGFtKSAxMi4xNzQzIFRqCi0tMjc2IFRKbQotKG11Y2gpIDIyLjEzNjkgVGoKLS0yNzcgVEptCi0oaW5kZWJ0ZWQpIDM0LjMxMTIgVGoKLS0yNzcgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjc3IFRKbQotKHRoZWlyKSAxOC4yNjE0IFRqCi0tMjc3IFRKbQotKGhlbHAsKSAxOS42NDYyIFRqCi0tMjg0IFRKbQotKHN1cHBvcnQpIDI5Ljg4NzggVGoKLS0yNzcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNzcgVEptCi0oYWR2aWNlLikgMjguNDkzIFRqCi0tNzgxIFRKbQotKFNlZSkgMTQuMzg2IFRqCi0tMjc3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3NyBUSm0KLShtYW51YWwpIDI5LjMyOTkgVGoKLTcyIDI4My44NjkgVGQKLShpbikgNy43NTA5IFRqCi0tMzMwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzMCBUSm0KLShzb3VyY2UpIDI2LjAwMjQgVGoKLS0zMzAgVEptCi0oZGlzdHJpYikgMjUuNDY0NCBUagotMjAgVEptCi0odXRpb24pIDIwLjQ4MzEgVGoKLS0zMzAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzI5IFRKbQotKHBvaW50ZXJzKSAzMi4wOTk1IFRqCi0tMzMwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMzAgVEptCi0oc291cmNlcykgMjkuODc3OCBUagotLTMzMCBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzMCBUSm0KLShkb2N1bWVudGF0aW9uLikgNjEuNzA4MyBUagotLTEwOTkgVEptCi0oQ2hyaXN0aWFuKSAzNi41MzI5IFRqCi0tMzMwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob24pIDkuOTYyNiBUagotLTMzMCBUSm0KLShSb3F1ZXMpIDI5Ljg4NzggVGoKLS0zMzAgVEptCi0oZW5jb3VyYWdlZCkgNDUuOTE3NiBUagotLTMzMCBUSm0KLShtZSkgMTIuMTc0MyBUagotLTMzMCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzMwIFRKbQotKGxvb2spIDE3LjcxMzUgVGoKLTcyIDI3MS45MTQgVGQKLShmb3IpIDExLjYxNjQgVGoKLS0yNzEgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXN0ZXIpIDE4LjgwOTQgVGoKLS0yNzEgVEptCi0oc29ydGluZykgMjcuNjc2MSBUagotLTI3MSBUSm0KLShhbGdvcml0aG1zLCkgNDUuMTEwNyBUagotLTI3NiBUSm0KLShzbykgOC44NTY3NSBUagotLTI3MiBUSm0KLShhcykgOC4yOTg4NSBUagotLTI3MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcxIFRKbQotKHNwZWVkKSAyMi42ODQ4IFRqCi0tMjcxIFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yNzEgVEptCi0oY29tcHJlc3Npb24uKSA1Mi44NTE2IFRqCi0tNzQ2IFRKbQotKEJlbGEpIDE4LjI2MTQgVGoKLS0yNzEgVEptCi0oTHVia2luKSAyOC43ODIgVGoKLS0yNzEgVEptCi0oZW5jb3VyYWdlZCkgNDUuOTE3NiBUagotLTI3MSBUSm0KLShtZSkgMTIuMTc0MyBUagotLTI3MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcxIFRKbQotKGltcHJvKSAyMy44MDA3IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNzEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0LWNhc2UpIDM1LjQwNzEgVGoKLTcyIDI1OS45NTkgVGQKLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTM0MCBUSm0KLShwZXJmb3JtYW5jZS4pIDUyLjgzMTcgVGoKLS01ODAgVEptCi0oRG9ubmEpIDI2LjU2MDMgVGoKLS0zMzkgVEptCi0oUm9iaW5zb24pIDM4LjE5NjYgVGoKLS0zNDAgVEptCi0oWE1MaXNlZCkgMzguMTg2NiBUagotLTM0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDAgVEptCi0oZG9jdW1lbnRhdGlvbi4pIDYxLjcwODMgVGoKLS01ODAgVEptCi0oTWFuKSAxOC4yNjE0IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zNDAgVEptCi0ocGVvcGxlKSAyNi41NjAzIFRqCi0tMzQwIFRKbQotKHNlbnQpIDE2LjA0OTcgVGoKLS0zMzkgVEptCi0ocGF0Y2hlcywpIDMyLjM2ODUgVGoKLS0zNjMgVEptCi0oaGVscGVkKSAyNi41NjAzIFRqCi0tMzQwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLTcyIDI0OC4wMDQgVGQKLShwb3J0YWJpbGl0eSkgNDEuNTE0MiBUagotLTI1MCBUSm0KLShwcm9ibGVtcywpIDM5LjU3MTQgVGoKLS0yNTAgVEptCi0obGVudCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShtYWNoaW5lcywpIDQwLjExOTQgVGoKLS0yNTAgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShhZHZpY2UpIDI2LjAwMjQgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0od2VyZSkgMTkuMzU3MyBUagotLTI1MCBUSm0KLShnZW5lcmFsbHkpIDM3LjA3MDggVGoKLS0yNTAgVEptCi0oaGVscGZ1bC4pIDMwLjcxNDcgVGoKLVsxIDAgMCAxIDcyIDI0NS44NDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAwIC0xOTQuOTk1XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2LjU4NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0My4wNjMzIC02LjQ4NTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjMzMiAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM5LjM5NSA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDcpIDQuOTgxMyBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMTEgMTEKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQuMzgzNiAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxNDEuNjQzIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQxLjY0MyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTEzLjk0NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcwMS45MTYgVGQKLS9GMTIyXzAgMjQuNzkwMiBUZgotKDMuKSAyMC42NzUgVGoKLS01NTYgVEptCi0oUHIpIDI2LjE3ODUgVGoKLTIwIFRKbQotKG9ncmFtbWluZykgMTM0Ljk4MyBUagotLTI3OCBUSm0KLSh3aXRoKSA0OS41ODA0IFRqCi1bMSAwIDAgMSAzMzAuNDg0IDcwMS45MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMwLjQ4NCAtNzAxLjkxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMwLjQ4NCA3MDEuOTE2IFRkCi0vRjM5Ml8wIDI0Ljc5MDIgVGYKLShsaWJiemlwMikgMTE4Ljk5MyBUagotWzEgMCAwIDEgNDQ5LjQ3NyA3MDEuOTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3Ny40NzcgLTUuNTE1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE0Ljk0MzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3MS40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1Ni4zNSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oVCkgMTAuNTE4NiBUagotODAgVEptCi0oYWIpIDIwLjA5MDQgVGoKLTEwIFRKbQotKGxlKSAxNC4zNTc2IFRqCi0tMjc4IFRKbQotKG9mKSAxNi4yNTEzIFRqCi0tMjc4IFRKbQotKENvbnRlbnRzKSA3NC41OTQzIFRqCi1bMSAwIDAgMSA3MiA2NDcuNTI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTEuNzQwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjM1Ljc4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM1Ljc4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG9wLWxlKSAyMC40NzMxIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShzdHJ1Y3R1cmUpIDM0Ljg1OTEgVGoKLVsxIDAgMCAxIDE2NC45MjEgNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjkwMiAtNjM1Ljc4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc5Ljk5NyA2MzUuNzg4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MzUuNzg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYzNS43ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOCkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjM1Ljc4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjIzLjgzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjIzLjgzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuMS4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oTG8pIDExLjA2ODQgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHN1bW1hcnkpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDE3Ny4zNzQgNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgyLjM1NSAtNjIzLjgzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjg2NiA2MjMuODMyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUxMS4xMDggNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTEuMTA4IC02MjMuODMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTEuMTA4IDYyMy44MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOSkgNC45ODEzIFRqCi1bMSAwIDAgMSA1MTYuMDkgNjIzLjgzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjExLjg3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjExLjg3NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjEuMi4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oSGlnaC1sZSkgMzAuNDM1NyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oc3VtbWFyeSkgMzcuMDgwOCBUagotWzEgMCAwIDEgMTc5LjI4NyA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODQuMjY4IC02MTEuODc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTMuODIyIDYxMS44NzcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTExLjEwOCA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4xMDggLTYxMS44NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS4xMDggNjExLjg3NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg5KSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MTEuODc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTkuOTIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTkuOTIyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMS4zLikgMjIuNDE1OSBUagotLTMxMCBUSm0KLShVdGlsaXR5KSAyNi4wMjIzIFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTI1MCBUSm0KLShzdW1tYXJ5KSAzNy4wODA4IFRqCi1bMSAwIDAgMSAyMDIuNjY5IDU5OS45MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNy42NSAtNTk5LjkyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE2LjU4MiA1OTkuOTIyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MTEuMTA4IDU5OS45MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjEwOCAtNTk5LjkyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTExLjEwOCA1OTkuOTIyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDkpIDQuOTgxMyBUagotWzEgMCAwIDEgNTE2LjA5IDU5OS45MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU4Ny45NjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4yLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShFcnJvcikgMjEuMDIxMSBUagotLTI1MCBUSm0KLShoYW5kbGluZykgMzQuODY5MSBUagotWzEgMCAwIDEgMTQ4LjQxMyA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTMuMzk0IC01ODcuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjIuNjExIDU4Ny45NjcgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1ODcuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTU4Ny45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTg3Ljk2NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTg3Ljk2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTc2LjAxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTc2LjAxMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKExvKSAxMS4wNjg0IFRqCi0yNSBUSm0KLSh3LWxlKSAxNy43MDM1IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi1bMSAwIDAgMSAxNjcuNTcxIDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Mi41NTIgLTU3Ni4wMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MS4wNDUgNTc2LjAxMiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNTc2LjAxMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC01NzYuMDEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDU3Ni4wMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTEpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDU3Ni4wMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0wLjA5OTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMS44NTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjQuMDU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NjQuMDU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4xLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA1NjQuMDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTU2NC4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNTY0LjA1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDIwNS4xMDEgNTY0LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjA4MiAtNTY0LjA1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE5LjczNiA1NjQuMDU2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1NjQuMDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTU2NC4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTY0LjA1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTY0LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTUyLjEwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTUyLjEwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuMi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNTUyLjEwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDU1Mi4xMDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE4MS4xOSA1NTIuMTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODYuMTcyIC01NTIuMTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTQuNDk3IDU1Mi4xMDEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDU1Mi4xMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNTUyLjEwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA1NTIuMTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA1NTIuMTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NDAuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDAuMTQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuMy4zLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNTQwLjE0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0VuZCkgMTAxLjYxOSBUagotWzEgMCAwIDEgMTk5LjEyMyA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuMTA1IC01NDAuMTQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTQuNTMzIDU0MC4xNDYgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1NDAuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTU0MC4xNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTQwLjE0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTQwLjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTI4LjE5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTI4LjE5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuNC4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNTI4LjE5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC01MjguMTkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDUyOC4xOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLVsxIDAgMCAxIDIxNy4wNTYgNTI4LjE5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIyLjAzNyAtNTI4LjE5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMyLjM1NSA1MjguMTkxIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA1MjguMTkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTUyOC4xOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNTI4LjE5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNTI4LjE5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTE2LjIzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE2LjIzNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjMuNS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNTE2LjIzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC01MTYuMjM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDUxNi4yMzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxOTMuMTQ2IDUxNi4yMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC4xMjcgLTUxNi4yMzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4xMTYgNTE2LjIzNiBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNTE2LjIzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC01MTYuMjM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDUxNi4yMzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTcpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDUxNi4yMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUwNC4yODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUwNC4yODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy4zLjYuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDUwNC4yODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNTA0LjI4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTcuNTA0MyA1MDQuMjgxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NFbmQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDIxMS4wNzggNTA0LjI4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2LjA2IC01MDQuMjgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjQuOTM4IDUwNC4yODEgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNTA0LjI4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC01MDQuMjgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDUwNC4yODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTgpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDUwNC4yODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ5Mi4zMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ5Mi4zMjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShIaWdoLWxlKSAzMC40MzU3IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI1MCBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi1bMSAwIDAgMSAxNjkuNDgzIDQ5Mi4zMjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3NC40NjUgLTQ5Mi4zMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4NC4yMTYgNDkyLjMyNSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0OTIuMzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQ5Mi4zMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDkyLjMyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDkyLjMyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDgwLjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0ODAuMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy40LjEuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA5Ny41MDQzIDQ4MC4zN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00ODAuMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDgwLjM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxODEuMTkgNDgwLjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODYuMTcyIC00ODAuMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5NC40OTcgNDgwLjM3IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyA0ODAuMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDgwLjM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQ4MC4zNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgNDgwLjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS41MzQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNDIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjguNDE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NjguNDE1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC4yLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0NjguNDE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTQ2OC40MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgNDY4LjQxNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxNTcuMjggNDY4LjQxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYyLjI2MSAtNDY4LjQxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcxLjQ3MiA0NjguNDE1IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ2OC40MTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDY4LjQxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0NjguNDE1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIwKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0NjguNDE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ1Ni40Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDU2LjQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC4zLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0NTYuNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDU2LjQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ1Ni40NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSAyMTEuMDc4IDQ1Ni40Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2LjA2IC00NTYuNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNC45MzggNDU2LjQ2IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ1Ni40Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00NTYuNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgNDU2LjQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0NTYuNDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQ0LjUwNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDQ0LjUwNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuNC4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDQ0LjUwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00NDQuNTA1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQ0NC41MDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxODcuMTY4IDQ0NC41MDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Mi4xNDkgLTQ0NC41MDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMS45MTQgNDQ0LjUwNSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDQ0NC41MDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNDQ0LjUwNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0NDQuNTA1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA0NDQuNTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjY0NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzMi41NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDMyLjU1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNC41LikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyA0MzIuNTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTcuNTA0MyAtNDMyLjU1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQzMi41NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZU9wZW4pIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE4Ny4xNjggNDMyLjU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuMTQ5IC00MzIuNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMS45MTQgNDMyLjU1IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDMyLjU1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTQzMi41NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA0MzIuNTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjIpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQzMi41NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDIwLjU5NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIwLjU5NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuNi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDIwLjU5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00MjAuNTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQyMC41OTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDE2My4yNTggNDIwLjU5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY4LjIzOSAtNDIwLjU5NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc2LjY3NSA0MjAuNTk0IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDIwLjU5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00MjAuNTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQyMC41OTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQyMC41OTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDA4LjYzOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDA4LjYzOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuNy4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgNDA4LjYzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC00MDguNjM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDQwOC42MzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi1bMSAwIDAgMSAxOTMuMTQ2IDQwOC42MzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC4xMjcgLTQwOC42MzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4xMTYgNDA4LjYzOSBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNDA4LjYzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC00MDguNjM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDQwOC42MzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDQwOC42MzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTAuNjQ1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzk2LjY4NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzk2LjY4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuOC4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oSGFuZGxpbmcpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0oZW1iZWRkZWQpIDQwLjk0NjMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHN0cmVhbXMpIDMwLjQzNTcgVGoKLVsxIDAgMCAxIDI3OS41NiAzOTYuNjg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODQuNTQxIC0zOTYuNjg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTQuNjAxIDM5Ni42ODQgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzOTYuNjg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM5Ni42ODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzk2LjY4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzk2LjY4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg0LjcyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzg0LjcyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjQuOS4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oU3RhbmRhcmQpIDM1LjQxNyBUagotLTI1MCBUSm0KLShcMDAybGUtcmVhZGluZy93cml0aW5nKSA3Ny40NzkxIFRqCi0tMjUwIFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLVsxIDAgMCAxIDIzNC4xOSAzODQuNzI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzkuMTcyIC0zODQuNzI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDcuNTY0IDM4NC43MjkgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM4NC43MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzg0LjcyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzODQuNzI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI1KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzODQuNzI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzIuNzc0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNzIuNzc0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNS4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oVXRpbGl0eSkgMjYuMDIyMyBUagotLTI1MCBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLVsxIDAgMCAxIDE1NS42MjUgMzcyLjc3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYwLjYwNyAtMzcyLjc3NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcwLjY0NSAzNzIuNzc0IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDM3Mi43NzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtMzcyLjc3NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyAzNzIuNzc0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSAzNzIuNzc0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjAuODE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNjAuODE5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMuNS4xLikgMjIuNDE1OSBUagotWzEgMCAwIDEgOTcuNTA0MyAzNjAuODE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk3LjUwNDMgLTM2MC44MTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk3LjUwNDMgMzYwLjgxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MpIDE0My40NjEgVGoKLVsxIDAgMCAxIDI0MC45NjYgMzYwLjgxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ1Ljk0OCAtMzYwLjgxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU1LjM4IDM2MC44MTkgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzNjAuODE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTM2MC44MTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzYwLjgxOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNikgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzYwLjgxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTEuNTM0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTEwLjQyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzQ4Ljg2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzQ4Ljg2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjUuMi4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDk3LjUwNDMgMzQ4Ljg2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Ny41MDQzIC0zNDguODYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05Ny41MDQzIDM0OC44NjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDI1Mi45MjIgMzQ4Ljg2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU3LjkwMyAtMzQ4Ljg2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY3Ljk5OSAzNDguODYzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgMzQ4Ljg2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC0zNDguODYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDM0OC44NjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMjcpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDM0OC44NjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0xLjUzNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMC40MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMzNi45MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMzNi45MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMy42LikgMTQuOTQzOSBUagotWzEgMCAwIDEgOTAuMDMyNCAzMzYuOTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwLjAzMjQgLTMzNi45MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwLjAzMjQgMzM2LjkwOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAxMTMuOTQzIDMzNi45MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEzLjk0MyAtMzM2LjkwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE2LjQzMyAzMzYuOTA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXBhdGliaWxpdHkpIDUzLjE0MDUgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi1bMSAwIDAgMSAyMDkuMTQ0IDMzNi45MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNC4xMjYgLTMzNi45MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMy45NzEgMzM2LjkwOCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzMzYuOTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTMzNi45MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzM2LjkwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzM2LjkwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI0Ljk1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzI0Ljk1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjcuKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKFVzaW5nKSAyMy44MDA3IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotWzEgMCAwIDEgMTc3LjE5NSAzMjQuOTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny4xOTUgLTMyNC45NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ny4xOTUgMzI0Ljk1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzdGRpbykgMjkuODg3OCBUagotWzEgMCAwIDEgMjA3LjA4MyAzMjQuOTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwNy4wODMgLTMyNC45NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNy4wODMgMzI0Ljk1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgtZnJlZSkgMTguNzk5NCBUagotLTI1MCBUSm0KLShlbikgOS40MDQ2OSBUagotNDAgVEptCi0odmlyb25tZW50KSA0MC45NTYyIFRqCi1bMSAwIDAgMSAyNzguMzM1IDMyNC45NTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4My4zMTYgLTMyNC45NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5MS43NzUgMzI0Ljk1MyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzMjQuOTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTMyNC45NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzI0Ljk1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzI0Ljk1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzEyLjk5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzEyLjk5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjcuMS4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oR2V0dGluZykgMjkuODg3OCBUagotLTI1MCBUSm0KLShyaWQpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDE1NC4yMzEgMzEyLjk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTQuMjMxIC0zMTIuOTk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTQuMjMxIDMxMi45OTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc3RkaW8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE4NC4xMTkgMzEyLjk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg5LjEgLTMxMi45OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OC4xNzUgMzEyLjk5OCBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzMTIuOTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTMxMi45OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzEyLjk5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzEyLjk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzAxLjA0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzAxLjA0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjcuMi4pIDIyLjQxNTkgVGoKLS0zMTAgVEptCi0oQ3JpdGljYWwpIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0oaGFuZGxpbmcpIDM0Ljg2OTEgVGoKLVsxIDAgMCAxIDE4Ni41OTkgMzAxLjA0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkxLjU4IC0zMDEuMDQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDEuNjI5IDMwMS4wNDMgVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAzMDEuMDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTMwMS4wNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMzAxLjA0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMzAxLjA0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzk4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjg5LjA4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjg5LjA4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLjguKSAxNC45NDM5IFRqCi0tMzEwIFRKbQotKE1ha2luZykgMzAuOTkzNiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKFcpIDkuNDA0NjkgVGoKLTQwIFRKbQotKGluZG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHdzKSAxMS4wNjg0IFRqCi0tMjUwIFRKbQotKERMTCkgMTkuMzY3MyBUagotWzEgMCAwIDEgMTg5LjgyOCAyODkuMDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTQuODA5IC0yODkuMDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDMuMjQzIDI4OS4wODggVGQKLS9GMTQ3XzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNTA2LjEyNyAyODkuMDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNi4xMjcgLTI4OS4wODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNi4xMjcgMjg5LjA4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA1MTYuMDkgMjg5LjA4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMDkgLTIuMTU2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjY3LjAwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjU3LjIwNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGNoYXB0ZXIpIDI5LjMxOTkgVGoKLS0yNTAgVEptCi0oZGVzY3JpYmVzKSAzNy4wNzA4IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwcm9ncmFtbWluZykgNTQuMjM2NCBUagotLTI1MCBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDI4Mi40NDggMjU3LjIwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODIuNDQ4IC0yNTcuMjA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODIuNDQ4IDI1Ny4yMDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDMzMC4yNjkgMjU3LjIwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzAuMjY5IC0yNTcuMjA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzAuMjY5IDI1Ny4yMDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjU1LjA1XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNDUuMDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzUuMjg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjczIFRKbQotKGdlbmVyYWwpIDI5LjMxOTkgVGoKLS0yNzIgVEptCi0oYmFja2dyb3VuZCkgNDcuMDMzNCBUagotLTI3MyBUSm0KLShpbmZvcm1hdGlvbiwpIDQ5LjUzNCBUagotLTI3OCBUSm0KLShwYXJ0aWN1bGFybHkpIDQ1LjkyNzYgVGoKLS0yNzMgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yNzMgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjcyIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI3MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MyBUSm0KLShwZXJmb3JtYW5jZSkgNTAuMzQxIFRqCi0tMjcyIFRKbQotKGFzcGVjdHMsKSAzMS4yNjI2IFRqCi0tMjc5IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKGQpIDQuOTgxMyBUagotLTI3MiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI3MyBUSm0KLSh3ZWxsKSAxNy4xNTU2IFRqCi0tMjczIFRKbQotKGFkdmlzZWQpIDMwLjQzNTcgVGoKLTcyIDIyMy4zMzQgVGQKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLVsxIDAgMCAxIDEwMS44NzggMjIzLjMzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xMDEuODc4IC0yMjMuMzM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDEuODc4IDIyMy4zMzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAxNzEuNjM2IDIyMy4zMzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtMTcxLjYzNiAtMjIzLjMzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc0LjEyNiAyMjMuMzM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFsyXSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMTg1Ljc0MyAyMjMuMzM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4NS43NDMgLTIyMy4zMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OC4yMzMgMjIzLjMzNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh3ZWxsLikgMTkuNjQ2MiBUagotWzEgMCAwIDEgNzIgMjIxLjE3N10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjExLjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTg4LjU4MSBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMy4xLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShUKSAxMi42MjIzIFRqCi04MCBUSm0KLShvcC1sZSkgNDkuMzUzMiBUagotMTUgVEptCi0odmVsKSAyOC43MTUzIFRqCi0tMjc4IFRKbQotKHN0cnVjdHVyZSkgODkuNTMzOSBUagotWzEgMCAwIDEgNzIgMTg0LjMwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTc0LjM0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTY2LjY2NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMTE5LjgyMSAxNjYuNjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44MjEgLTE2Ni42NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMy42MDggMTY2LjY2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTM4MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzgwIFRKbQotKFwwMDNlKSA5Ljk2MjYgVGoKLTE1IFRKbQotKHhpYmxlKSAxOS45MjUyIFRqCi0tMzgxIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zODAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzgwIFRKbQotKGNvbXByZXNzaW5nKSA1MC4zNjA5IFRqCi0tMzgwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzgwIFRKbQotKGRlY29tcHJlc3NpbmcpIDU5Ljc2NTYgVGoKLS0zODAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTM4MSBUSm0KLShpbikgNy43NTA5IFRqCi0tMzgwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgNDA1LjI5MSAxNjYuNjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwNS4yOTEgLTE2Ni42NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwNS4yOTEgMTY2LjY2NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDM1LjE3OCAxNjYuNjY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzNS4xNzggLTE2Ni42NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzOC45NjYgMTY2LjY2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkYXRhKSAxNi41OTc3IFRqCi0tMzgwIFRKbQotKGZvcm1hdC4pIDI5LjA1MDkgVGoKLS0xNDAxIFRKbQotKEFsdGhvdWdoKSAzNy42Mzg3IFRqCi03MiAxNTQuNzA4IFRkCi0ocGFja2FnZWQpIDM3LjYxODggVGoKLS0yODUgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yODQgVEptCi0oYSkgNC40MjMzOSBUagotLTI4NSBUSm0KLShzaW5nbGUpIDIzLjgwMDcgVGoKLS0yODUgVEptCi0oZW50aXR5KSAyMi42OTQ4IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjkzIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjg1IFRKbQotKGhlbHBzKSAyMS4wMzEgVGoKLS0yODUgVEptCi0odG8pIDcuNzUwOSBUagotLTI4NCBUSm0KLShyZSkgNy43NDA5NCBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFyZCkgMTIuNzIyMiBUagotLTI4NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODUgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI4NCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI4NSBUSm0KLSh0aHJlZSkgMTkuOTE1MiBUagotLTI4NSBUSm0KLShzZXBhcmF0ZSkgMzIuNjM3NSBUagotLTI4NCBUSm0KLShwYXJ0czopIDIyLjEzNjkgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg1IFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjg0IFRKbQotKGxlKSA3LjE5MyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbCkgNy4xOTMgVGoKLS0yODUgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSwpIDE1Ljc2MDggVGoKLS0yOTMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg1IFRKbQotKGhpZ2gpIDE3LjcxMzUgVGoKLTcyIDE0Mi43NTMgVGQKLShsZSkgNy4xOTMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UsKSAxNS43NjA4IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLSh1dGlsaXR5KSAyMy44MTA2IFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucy4pIDM5LjU3MTQgVGoKLVsxIDAgMCAxIDcyIDE0MC41OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTEzMC42MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEyMC44MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMzQ5IFRKbQotKHN0cnVjdHVyZSkgMzQuODU5MSBUagotLTM0OSBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTQxLjA4MiAxMjAuODM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0MS4wODIgLTEyMC44MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0MS4wODIgMTIwLjgzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMTg4LjkwMyAxMjAuODM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4OC45MDMgLTEyMC44MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OC45MDMgMTIwLjgzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgnKSAzLjMxNzU1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzQ5IFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2VzKSAxNy4xNDU2IFRqCi0tMzQ5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzQ5IFRKbQotKHNpbWlsYXIpIDI3LjY3NjEgVGoKLS0zNDkgVEptCi0odG8pIDcuNzUwOSBUagotLTM0OSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzQ5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQ5IFRKbQotKEplYW4tbG91cCkgMzguNzM0NiBUagotLTM0OSBUSm0KLShHYWlsbHknKSAyOC4yMjQgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0zNDkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNDkgVEptCi0oTWFyaykgMjEuNTc5IFRqCi0tMzQ5IFRKbQotKEFkbGVyJykgMjYuMDAyNCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTM0OSBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4Y2VsbGVudCkgMzEuNTQxNiBUagotWzEgMCAwIDEgNTE2LjA5IDEyMC44MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE2LjA5IC0xMjAuODM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTYuMDkgMTIwLjgzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA1NDAgMTIwLjgzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTEyMC44MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEwOC44OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMDYuNzIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05Ni43NjA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4Ni45NjI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbCkgMTIuNzMyMiBUagotLTI0MiBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dGVybmFsbHkpIDM1LjQxNyBUagotLTI0MiBUSm0KLSh2aXNpYmxlKSAyNi41NzAzIFRqCi0tMjQxIFRKbQotKHN5bWJvbHMpIDMzLjIxNTMgVGoKLS0yNDIgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI0MiBUSm0KLShuYW1lcykgMjUuNDU0NCBUagotLTI0MiBUSm0KLShiZSkgOS40MDQ2OSBUagotMTUgVEptCi0oZ2lubmluZykgMzAuNDQ1NyBUagotWzEgMCAwIDEgMjg0LjY4NyA4Ni45NjI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4NC42ODcgLTg2Ljk2MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4NC42ODcgODYuOTYyNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzMDguNTk3IDg2Ljk2MjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA4LjU5NyAtODYuOTYyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA4LjU5NyA4Ni45NjI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS02MTUgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTI0MSBUSm0KLShpcykgNi42NDUwNSBUagotLTI0MiBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNDIgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0MiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbikgMjQuMzQ4NiBUagotLTI0MiBUSm0KLSgxLjAuKSAxNC45NDM5IFRqCi0tNjE0IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI0MiBUSm0KLShpbnRlbnRpb24pIDM1LjQyNyBUagotLTI0MiBUSm0KLShpcykgNi42NDUwNSBUagotLTI0MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQyIFRKbQotKG1pbmltaXNlKSAzNy4wOTA4IFRqCi03MiA3NS4wMDczIFRkCi0ocG9sbHV0aW9uKSAzNS45ODQ5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShuYW1lc3BhY2VzKSA0Ny41ODE0IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oY2xpZW50cy4pIDI4LjUwMyBUagotWzEgMCAwIDEgNzIgNzIuODUwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIxLjk5ODddIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQuMzgzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTguMjI1IC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01NDEuMjg4IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOCkgNC45ODEzIFRqCi1bMSAwIDAgMSA0NTUuMTYxIDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAxMiAxMgotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNC4zODM2IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0NC40NjIgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMC45NiA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5OC40NDkgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTguNDQ5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTguNDQ5IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0Ni4yNjkgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTUuMDM2NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG8pIDQuOTgxMyBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLShwYXJ0KSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDI0MC41NjcgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDAuNTY3IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDAuNTY3IDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oI2luY2x1ZGUpIDQ3LjgyMDUgVGoKLS02MDAgVEptCi0oPGJ6bGliLmg+KSA1My43OTggVGoKLVsxIDAgMCAxIDM0OC4xNjMgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDguMTYzIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTAuNjU0IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW50bykgMTUuNTAxOCBUagotLTI1MCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHNvdXJjZXMuKSAzMi4zNjg1IFRqCi1bMSAwIDAgMSA3MiA3MDcuODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY5Ny45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY3OS40MTYgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMS4xLikgNDMuMDcyOSBUagotLTI3OCBUSm0KLShMbykgMjEuMDM3MiBUagotMTUgVEptCi0ody1sZSkgMzMuNDg0IFRqCi0xNSBUSm0KLSh2ZWwpIDIzLjkyOTQgVGoKLS0yNzggVEptCi0oc3VtbWFyKSA2Ni45Njc5IFRqCi0tMTAgVEptCi0oeSkgOS41NzE3NiBUagotWzEgMCAwIDEgNzIgNjc1Ljg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjY1Ljg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTcuNDk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yMTIgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotLTIxMiBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGVzKSAyMS4wMzEgVGoKLS0yMTIgVEptCi0oc2VydmljZXMpIDMyLjA4OTUgVGoKLS0yMTIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjEyIFRKbQotKGNvbXByZXNzaW5nKSA1MC4zNjA5IFRqCi0tMjEyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjEyIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLTEgVEptCi0oaW5nKSAxMi43MzIyIFRqCi0tMjEyIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yMTIgVEptCi0oaW4pIDcuNzUwOSBUagotLTIxMiBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS01OTUgVEptCi0oVGhlcmUnKSAyNi41NTAzIFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjEyIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yMTIgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aXNpb24pIDI0LjM1ODYgVGoKLS0yMTIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjEyIFRKbQotKGRlYWxpbmcpIDI5LjMyOTkgVGoKLTcyIDY0NS41NDMgVGQKLSh3aXRoKSAxNy43MTM1IFRqCi0tMjEzIFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi0tMjIwIFRKbQotKHN0cmVhbXMpIDMwLjQzNTcgVGoKLS0yMTMgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yMTMgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIxMyBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTIxMyBUSm0KLShJL08pIDEzLjI4MDEgVGoKLS0yMTMgVEptCi0obWVjaGFuaXNtcywpIDUxLjc0NTcgVGoKLS0yMjEgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMjEzIFRKbQotKHN0cmFpZ2h0KSAyOS44ODc4IFRqCi0tMjEzIFRKbQotKG1lbW9yeS10by1tZW1vcnkpIDgwLjc5NjcgVGoKLS0yMTMgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yay4pIDE1Ljc3MDggVGoKLS01OTUgVEptCi0oSW4pIDguMjk4ODUgVGoKLS0yMTMgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWN0LCkgMTQuMTA3IFRqCi0tMjIxIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTIxMyBUSm0KLShwYXJ0KSAxNS40OTE4IFRqCi0tMjEzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjEzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIxMyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi03MiA2MzMuNTg4IFRkCi0oY2FuKSAxMy44MjgxIFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGNvbXBpbGVkKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKHdpdGhvdXQpIDMwLjQ0NTcgVGoKLS0yNTAgVEptCi0oaW5jbHVzaW9uKSAzNi41MzI5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAyMjIuNTM0IDYzMy41ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIyLjUzNCAtNjMzLjU4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIyLjUzNCA2MzMuNTg4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHN0ZGlvLmgpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDI2NC4zNzcgNjMzLjU4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjQuMzc3IC02MzMuNTg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjQuMzc3IDYzMy41ODggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oaGVscGZ1bCkgMjguMjI0IFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShlbWJlZGRlZCkgNDAuOTQ2MyBUagotLTI1MCBUSm0KLShhcHBsaWNhdGlvbnMuKSA1MC42Mzk5IFRqCi1bMSAwIDAgMSA3MiA2MzEuNDMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MjEuNDY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MTEuNjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHBhcnQpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZ2xvYmFsKSAyNC45MDY1IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXJpYWJsZXMpIDMwLjk4MzcgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0odGhlcmVmb3JlKSAzNS45NTUgVGoKLS0yNTAgVEptCi0odGhyZWFkLXNhZmUuKSA0Ni43NDQ1IFRqCi1bMSAwIDAgMSA3MiA2MDkuNTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTkuNTUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1ODkuNzUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFNpeCkgMTMuMjkwMSBUagotLTg3NSBUSm0KLShyb3V0aW5lcykgMzIuMDk5NSBUagotLTg3NiBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS04NzUgVEptCi0odXApIDkuOTYyNiBUagotLTg3NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS04NzUgVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS04NzYgVEptCi0obGUpIDcuMTkzIFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTg3NSBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlOikgMTYuMDM5OCBUagotWzEgMCAwIDEgMzA4Ljc5MSA1ODkuNzUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwOC43OTEgLTU4OS43NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwOC43OTEgNTg5Ljc1MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDQxNi4zODcgNTg5Ljc1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTYuMzg3IC01ODkuNzUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTYuMzg3IDU4OS43NTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDI5LjE1OCA1ODkuNzUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyOS4xNTggLTU4OS43NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyOS4xNTggNTg5Ljc1MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgNTEyLjg0NCA1ODkuNzUyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMi44NDQgLTU4OS43NTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMi44NDQgNTg5Ljc1MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMTAzMiBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNzIgNTc3Ljc5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTc3Ljc5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTc3Ljc5NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0VuZCkgMTAxLjYxOSBUagotWzEgMCAwIDEgMTczLjYxOSA1NzcuNzk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3My42MTkgLTU3Ny43OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4Ni4xNSA1NzcuNzk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcikgMTEuNjE2NCBUagotLTEyNTggVEptCi0oY29tcHJlc3Npb24sKSA1Mi44NTE2IFRqCi0tMTUxMCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTEyNTcgVEptCi0oYSkgNC40MjMzOSBUagotLTEyNTggVEptCi0oY29ycmVzcG9uZGluZykgNTYuOTk2IFRqCi0tMTI1OCBUSm0KLSh0cmlvKSAxMy44MzgxIFRqCi1bMSAwIDAgMSA0MTcuOTU4IDU3Ny43OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE3Ljk1OCAtNTc3Ljc5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE3Ljk1OCA1NzcuNzk3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NJbml0KSAxMTkuNTUxIFRqCi1bMSAwIDAgMSA1MzcuNTA5IDU3Ny43OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM3LjUwOSAtNTc3Ljc5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM3LjUwOSA1NzcuNzk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDU2NS44NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2NS44NDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2NS44NDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxNjcuNjQxIDU2NS44NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY3LjY0MSAtNTY1Ljg0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcyLjcwNyA1NjUuODQyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxOTIuMTU4IDU2NS44NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkyLjE1OCAtNTY1Ljg0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjE1OCA1NjUuODQyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NFbmQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDMwNS43MzIgNTY1Ljg0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDUuNzMyIC01NjUuODQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTAuNzk4IDU2NS44NDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZm9yKSAxMS42MTY0IFRqCi0tNTA4IFRKbQotKGRlY29tcHJlc3Npb24uKSA2Mi4yNTYzIFRqCi0tMjE3MSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLVsxIDAgMCAxIDQzMS45MTggNTY1Ljg0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzEuOTE4IC01NjUuODQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzEuOTE4IDU2NC4wOTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotNDM3Ljg5NSA1NjUuODQyIFRkCi0oSW5pdCkgMjMuOTEwMiBUagotWzEgMCAwIDEgNDYxLjgwNSA1NjUuODQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2MS44MDUgLTU2NS44NDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2Ni44NzEgNTY1Ljg0MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS01MDggVEptCi0oYWxsb2NhdGUpIDMwLjk4MzcgVGoKLTcyIDU1My44ODcgVGQKLShtZW1vcnkpIDMzLjIwNTMgVGoKLS01NzQgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tNTczIFRKbQotKGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24pIDExMi44OTYgVGoKLS01NzQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS01NzQgVEptCi0oZG8pIDkuOTYyNiBUagotLTU3MyBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTU3NCBUSm0KLShpbml0aWFsaXNhdGlvbnMsKSA1Ni4xODkxIFRqCi0tNjU0IFRKbQotKHdoaWxzdCkgMjQuMzU4NiBUagotLTU3NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDQxOS41MDIgNTUzLjg4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTkuNTAyIC01NTMuODg3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuNTAyIDU1Mi4xNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotNDI1LjQ4IDU1My44ODcgVGQKLShFbmQpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDQ0My40MTMgNTUzLjg4N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDMuNDEzIC01NTMuODg3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDkuMTI4IDU1My44ODcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tNTc0IFRKbQotKGNsb3NlKSAyMC40NzMxIFRqCi0tNTczIFRKbQotKGRvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHduKSAxMi4xNzQzIFRqCi03MiA1NDEuOTMyIFRkCi0ob3BlcmF0aW9ucykgNDEuNTA0MiBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShyZWxlYXNlKSAyNy42NTYyIFRqCi0tMjUwIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTM5Ljc3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTI5LjgxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTIwLjAxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0zMDMgVEptCi0ocmVhbCkgMTQuOTMzOSBUagotLTMwMyBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrKSAxMy4yODAxIFRqCi0tMzAzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzAzIFRKbQotKGRvbmUpIDE5LjM2NzMgVGoKLS0zMDMgVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMTc2Ljg5MiA1MjAuMDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ni44OTIgLTUyMC4wMTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni44OTIgNTIwLjAxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjYwLjU3OCA1MjAuMDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MC41NzggLTUyMC4wMTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2My41OTggNTIwLjAxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMjgxLjAwMyA1MjAuMDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4MS4wMDMgLTUyMC4wMTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4MS4wMDMgNTIwLjAxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDM3Ni42NDUgNTIwLjAxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzYuNjQ1IC01MjAuMDE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzYuNjQ1IDUyMC4wMTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTkzOSBUSm0KLShUaGVzZSkgMjMuNzkwNyBUagotLTMwMyBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotLTMwMyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMwMyBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMzAzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLTcyIDUwOC4wNTkgVGQKLShmcm9tKSAxOS4zNjczIFRqCi0tMjA1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMDUgVEptCi0odXNlcikgMTYuNTk3NyBUagotMjAgVEptCi0oLXN1cHBsaWVkKSAzNy4wODA4IFRqCi0tMjA1IFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjA2IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTIwNSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjA1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMDUgVEptCi0odXNlcikgMTYuNTk3NyBUagotMjAgVEptCi0oLXN1cHBsaWVkKSAzNy4wODA4IFRqCi0tMjA1IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTIwNSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS01OTEgVEptCi0oVGhlc2UpIDIzLjc5MDcgVGoKLS0yMDUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVycykgMTQuOTMzOSBUagotLTIwNSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yMDUgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yMDUgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIwNSBUSm0KLShzaXplOykgMTguMjYxNCBUagotLTIyMCBUSm0KLShhcmJpdHJhcnkpIDM0LjMwMTIgVGoKLS0yMDYgVEptCi0ocXVhbnRpdGllcykgMzguNzQ0NiBUagotLTIwNSBUSm0KLShvZikgOC4yOTg4NSBUagotNzIgNDk2LjEwNCBUZAotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTggVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjU4IFRKbQotKGhhbmRsZWQpIDMxLjU0MTYgVGoKLS0yNTggVEptCi0oYnkpIDkuOTYyNiBUagotLTI1NyBUSm0KLShtYWtpbmcpIDI5Ljg4NzggVGoKLS0yNTggVEptCi0ocmVwZWF0ZWQpIDMzLjc0MzMgVGoKLS0yNTggVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0yNTggVEptCi0odG8pIDcuNzUwOSBUagotLTI1OCBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI1OCBUSm0KLShmdW5jdGlvbnMuKSAzOS41NzE0IFRqCi0tNjY3IFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTggVEptCi0oYSkgNC40MjMzOSBUagotLTI1NyBUSm0KLShcMDAzZSkgOS45NjI2IFRqCi0xNSBUSm0KLSh4aWJsZSkgMTkuOTI1MiBUagotLTI1OCBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0yNTggVEptCi0oYWxsbykgMTQuOTQzOSBUagotMjUgVEptCi0od2luZykgMTkuOTI1MiBUagotLTI1OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU4IFRKbQotKGNvbnN1bWVyKSAzOC43MzQ2IFRqCi0yMCBUSm0KLSgtcHVsbCkgMTguODE5NCBUagotNzIgNDg0LjE0OCBUZAotKHN0eWxlKSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGFjdGkpIDE0LjM4NiBUagotMjUgVEptCi0odml0eSkgMTUuNTAxOCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShwcm9kdWNlcikgMzUuNDA3MSBUagotMjAgVEptCi0oLXB1c2gsKSAyNC42Mjc1IFRqCi0tMjUwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0obWl4dHVyZSkgMzAuOTkzNiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShib3RoLikgMjAuMjA0MiBUagotWzEgMCAwIDEgNzIgNDgxLjk5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDcyLjAyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDUzLjUyNyBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4xLjIuKSA0My4wNzI5IFRqCi0tMjc4IFRKbQotKEhpZ2gtbGUpIDU4LjM0MyBUagotMTUgVEptCi0odmVsKSAyMy45Mjk0IFRqCi0tMjc4IFRKbQotKHN1bW1hcikgNjYuOTY3OSBUagotLTEwIFRKbQotKHkpIDkuNTcxNzYgVGoKLVsxIDAgMCAxIDcyIDQ0OS42OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzOS43MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzMS42MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjg0IFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UpIDEzLjI3MDIgVGoKLS0yODQgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlcykgMjEuMDMxIFRqCi0tMjg1IFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI4NCBUSm0KLShoYW5keSkgMjQuMzQ4NiBUagotLTI4NCBUSm0KLSh3cmFwcGVycykgMzYuNTEyOSBUagotLTI4NCBUSm0KLShhcm91bmQpIDI3LjY2NjEgVGoKLS0yODQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg0IFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjg1IFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UpIDEzLjI3MDIgVGoKLS0yODQgVEptCi0odG8pIDcuNzUwOSBUagotLTI4NCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY2lsaXRhdGUpIDMxLjU0MTYgVGoKLS0yODQgVEptCi0ocmVhZGluZykgMjkuODc3OCBUagotLTI4NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4NSBUSm0KLSh3cml0KSAxNi4wNDk3IFRqCi0xIFRKbQotKGluZykgMTIuNzMyMiBUagotWzEgMCAwIDEgNTEwLjExMiA0MzEuNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTEwLjExMiAtNDMxLjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTAuMTEyIDQzMS42MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNTQwIDQzMS42MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTQzMS42MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDE5LjY1NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0zNDcgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTM0NiBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTI1LjM5MSA0MTkuNjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNS4zOTEgLTQxOS42NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyNS4zOTEgNDE5LjY1NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSguYnoyKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAxNDkuMzAxIDQxOS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjMwMSAtNDE5LjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUyLjc1NCA0MTkuNjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwwMDJsZXNcKS4pIDIyLjQxNTkgVGoKLS0xMjAwIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTM0NiBUSm0KLShyb3V0aW5lcykgMzIuMDk5NSBUagotLTM0NyBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGUpIDE3LjE1NTYgVGoKLS0zNDYgVEptCi0oaG9va3MpIDIzLjgwMDcgVGoKLS0zNDcgVEptCi0odG8pIDcuNzUwOSBUagotLTM0NiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY2lsaXRhdGUpIDMxLjU0MTYgVGoKLS0zNDcgVEptCi0ocmVhZGluZykgMjkuODc3OCBUagotLTM0NyBUSm0KLShcMDAybGVzKSAxNi42MDc3IFRqCi0tMzQ2IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zNDcgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSA0NjAuMDQ5IDQxOS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDYwLjA0OSAtNDE5LjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDYwLjA0OSA0MTkuNjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0ODkuOTM3IDQxOS42NTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDg5LjkzNyAtNDE5LjY1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkzLjM5IDQxOS42NTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGF0YSkgMTYuNTk3NyBUagotLTM0NyBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLTcyIDQwNy42OTkgVGQKLShpcykgNi42NDUwNSBUagotLTMzOSBUSm0KLShlbWJlZGRlZCkgNDAuOTQ2MyBUagotLTMzOSBUSm0KLSh3aXRoaW4pIDI1LjQ2NDQgVGoKLS0zMzkgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMzM5IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2VyKSAxMi43MjIyIFRqCi0yMCBUSm0KLSgtc2NhbGUpIDIzLjIzMjggVGoKLS0zMzkgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMzM5IFRKbQotKHN0cnVjdHVyZSwpIDM3LjM0OTggVGoKLS0zNjEgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0zMzkgVEptCi0od2gpIDEyLjE3NDMgVGoKLS0xIFRKbQotKGUpIDQuNDIzMzkgVGoKLTEgVEptCi0ocmUpIDcuNzQwOTQgVGoKLS0zNDAgVEptCi0odGhlcmUpIDE5LjkxNTIgVGoKLS0zMzkgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzM5IFRKbQotKG11bHRpcGxlKSAzMy4yMTUzIFRqCi1bMSAwIDAgMSA0MDAuOTQxIDQwNy42OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDAwLjk0MSAtNDA3LjY5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDAwLjk0MSA0MDcuNjk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0MzAuODI5IDQwNy42OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMwLjgyOSAtNDA3LjY5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM0LjIwNyA0MDcuNjk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMzkgVEptCi0oc3RyZWFtcykgMzAuNDM1NyBUagotLTMzOSBUSm0KLShjb25jYXRlbmF0ZWQpIDUyLjAwNDggVGoKLTcyIDM5NS43NDQgVGQKLShlbmQtdG8tZW5kLikgNDUuNjQ4NiBUagotWzEgMCAwIDEgNzIgMzk1LjY0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg1LjY4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzczLjgyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTMzMiBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi0tMzMzIFRKbQotKFwwMDJsZXMsKSAxOS4wOTgzIFRqCi1bMSAwIDAgMSAxNDQuODAzIDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ0LjgwMyAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ0LjgwMyAzNzMuODI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyMjguNDg5IDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI4LjQ4OSAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI4LjQ4OSAzNzMuODI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDIzNC40OTYgMzczLjgyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuNDk2IC0zNzMuODI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzQuNDk2IDM3My44MjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjk0LjI3MiAzNzMuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NC4yNzIgLTM3My44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5NC4yNzIgMzczLjgyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMDAuMjc5IDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAwLjI3OSAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAwLjI3OSAzNzMuODI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgMzg5Ljk0MiAzNzMuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OS45NDIgLTM3My44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5My4yNTMgMzczLjgyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDEwLjk1MSAzNzMuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMC45NTEgLTM3My44MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMC45NTEgMzczLjgyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSA1MjQuNTI1IDM3My44MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTI0LjUyNSAtMzczLjgyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI3LjgzNiAzNzMuODI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFyZSkgMTIuMTY0MyBUagotNzIgMzYxLjg3MSBUZAotKHN1cHBsaWVkLikgMzYuMjUzOSBUagotLTYyMCBUSm0KLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh3cml0aW5nKSAyOC43ODIgVGoKLS0yNTAgVEptCi0oXDAwMmxlcywpIDE5LjA5ODMgVGoKLVsxIDAgMCAxIDE4My40NzEgMzYxLjg3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODMuNDcxIC0zNjEuODcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODMuNDcxIDM2MS44NzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVPcGVuKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAyNzMuMTM1IDM2MS44NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjczLjEzNSAtMzYxLjg3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjczLjEzNSAzNjEuODcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI3OC4xMTYgMzYxLjg3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMTE2IC0zNjEuODcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzguMTE2IDM2MS44NzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDM0My44NjkgMzYxLjg3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDMuODY5IC0zNjEuODcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDYuMzYgMzYxLjg3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzYzLjIzNyAzNjEuODcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2My4yMzcgLTM2MS44NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My4yMzcgMzYxLjg3MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZUZpbmlzaCkgMTAxLjYxOSBUagotWzEgMCAwIDEgNDY0Ljg1NiAzNjEuODcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2NC44NTYgLTM2MS44NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2Ny4zNDYgMzYxLjg3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlLikgMjkuMDUwOSBUagotWzEgMCAwIDEgNzIgMzU5LjcxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzQ5Ljc1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzM5Ljk1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBcykgMTEuMDY4NCBUagotLTM3NCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzc0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM3NSBUSm0KLShsbykgNy43NTA5IFRqCi0yNSBUSm0KLSh3LWxlKSAxNy43MDM1IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTM3NCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNDA1IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0zNzQgVEptCi0oZ2xvYmFsKSAyNC45MDY1IFRqCi0tMzc0IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXJpYWJsZXMpIDMwLjk4MzcgVGoKLS0zNzUgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzc0IFRKbQotKHVzZWQpIDE4LjI2MTQgVGoKLS0zNzQgVEptCi0oc28pIDguODU2NzUgVGoKLS0zNzQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc0IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zNzUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNzQgVEptCi0ocGVyKSAxMi43MjIyIFRqCi0tMzc0IFRKbQotKHNlKSA4LjI5ODg1IFRqCi0tMzc0IFRKbQotKHRocmVhZC1zYWZlLikgNDYuNzQ0NSBUagotLTEzNjUgVEptCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHdlKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNDA2IFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMzc0IFRKbQotKEkvTykgMTMuMjgwMSBUagotNzIgMzI3Ljk5OCBUZAotKGVycm9ycykgMjMuMjMyOCBUagotLTI2NyBUSm0KLShvY2N1cikgMjIuMTI2OSBUagotLTI2NyBUSm0KLSh3aGlsc3QpIDI0LjM1ODYgVGoKLS0yNjcgVEptCi0ocmVhZGluZykgMjkuODc3OCBUagotLTI2NyBUSm0KLShvcikgOC4yOTg4NSBUagotLTI2NyBUSm0KLSh3cml0aW5nKSAyOC43ODIgVGoKLS0yNjcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjY4IFRKbQotKHVuZGVybHlpbmcpIDQzLjE2NzkgVGoKLS0yNjcgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI2NyBUSm0KLShcMDAybGVzLCkgMTkuMDk4MyBUagotLTI3MSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNjcgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjY3IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjcgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NyBUSm0KLShjb25zdWx0KSAyOC43ODIgVGoKLVsxIDAgMCAxIDQ1Ny4xOTkgMzI3Ljk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTcuMTk5IC0zMjcuOTk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTcuMTk5IDMyNy45OTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZXJybm8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDQ4Ny4wODcgMzI3Ljk5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODcuMDg3IC0zMjcuOTk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODkuNzQ4IDMyNy45OTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI2NyBUSm0KLShkZXRlcm1pbmUpIDM5Ljg0MDQgVGoKLTcyIDMxNi4wNDMgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjYgVEptCi0oY2F1c2UpIDIyLjEyNjkgVGoKLS0zNjUgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNjYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzY1IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTMxNCBUSm0KLShJbikgOC4yOTg4NSBUagotLTM2NiBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzY1IFRKbQotKGNhc2UsKSAxOS42MzYzIFRqCi0tMzk1IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKGQpIDQuOTgxMyBUagotLTM2NiBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMzY1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNjYgVEptCi0oQykgNi42NDUwNSBUagotLTM2NSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzY2IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMzY2IFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotLTM2NSBUSm0KLShzdXBwb3J0cykgMzMuNzYzMyBUagotWzEgMCAwIDEgNDMxLjY2OCAzMTYuMDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMS42NjggLTMxNi4wNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMS42NjggMzE2LjA0MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShlcnJubykgMjkuODg3OCBUagotWzEgMCAwIDEgNDYxLjU1NiAzMTYuMDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2MS41NTYgLTMxNi4wNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2NS4xOTkgMzE2LjA0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbikgNy43NTA5IFRqCi0tMzY2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNjUgVEptCi0obXVsdGl0aHJlYWRlZCkgNTUuMzQyMiBUagotNzIgMzA0LjA4OCBUZAotKGVuKSA5LjQwNDY5IFRqCi00MCBUSm0KLSh2aXJvbm1lbnQuKSA0My40NDY5IFRqCi1bMSAwIDAgMSA3MiAzMDMuOTg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTQuMDI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyODIuMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tMjQzIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI0MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDIgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI0MyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQzIFRKbQotKGxpdHRsZSkgMTguMjcxNCBUagotLTI0MiBUSm0KLShzaW1wbGVyKSAyOS44ODc4IFRqCi0tMjQzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjQzIFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNDMgVEptCi0ocG9ydGFibGUsKSAzNS4xMzgxIFRqCi1bMSAwIDAgMSAyODkuMjYzIDI4Mi4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODkuMjYzIC0yODIuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4OS4yNjMgMjgyLjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzNzIuOTQ5IDI4Mi4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzIuOTQ5IC0yODIuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3NS4zNjggMjgyLjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzOTIuMTcyIDI4Mi4xN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuMTcyIC0yODIuMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Mi4xNzIgMjgyLjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotWzEgMCAwIDEgNDgxLjgzNiAyODIuMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDgxLjgzNiAtMjgyLjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODQuMjU0IDI4Mi4xNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZXF1aXJlKSAyOC4yMTQxIFRqCi0tMjQzIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI0MiBUSm0KLSh0bykgNy43NTA5IFRqCi03MiAyNzAuMjE1IFRkCi0ocGFzcykgMTcuMTU1NiBUagotLTI0NyBUSm0KLSh0aGVtKSAxOS45MjUyIFRqCi0tMjQ4IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI0NyBUSm0KLShoYW5kbGVzKSAzMC40MzU3IFRqCi0tMjQ3IFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAxNjUuNDIxIDI3MC4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY1LjQyMSAtMjcwLjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY1LjQyMSAyNzAuMjE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEZJTEUpIDIzLjkxMDIgVGoKLTE4OS4zMzEgMjY4LjQ3MSBUZAotKCopIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDE5NS4zMDkgMjcwLjIxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTUuMzA5IC0yNzAuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTUuMzA5IDI3MC4yMTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc1wpKSA3LjE5MyBUagotLTI0NyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI0OCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjQ3IFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXNseSkgMjkuMzM5OSBUagotLTI0NyBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMjQ4IFRKbQotKG9wZW5lZCkgMjguNzcyIFRqCi0tMjQ3IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI0NyBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi0tMjQ3IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjQ4IFRKbQotKHdyaXRpbmcpIDI4Ljc4MiBUagotLTI0NyBUSm0KLShyZXNwZWN0aSkgMzAuOTgzNyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHkpIDEyLjE3NDMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02MTggVEptCi0oVGhhdCkgMTguMjYxNCBUagotLTI0OCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTIwIFRKbQotKG9pZHMpIDE2LjYwNzcgVGoKLTcyIDI1OC4yNiBUZAotKHBvcnRhYmlsaXR5KSA0MS41MTQyIFRqCi0tMjcyIFRKbQotKHByb2JsZW1zKSAzNy4wODA4IFRqCi0tMjczIFRKbQotKGFzc29jaWF0ZWQpIDQwLjk0NjMgVGoKLS0yNzIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI3MiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNzMgVEptCi0ob3BlcmF0aW9ucykgNDEuNTA0MiBUagotLTI3MiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNzMgVEptCi0oYXR0cmliKSAyMS4wMzEgVGoKLTIwIFRKbQotKHV0ZXMsKSAxOC41NDA0IFRqCi0tMjc4IFRKbQotKHdoaWxzdCkgMjQuMzU4NiBUagotLTI3MiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNzIgVEptCi0oYmVpbmcpIDIyLjEzNjkgVGoKLS0yNzMgVEptCi0obXVjaCkgMjIuMTM2OSBUagotLTI3MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3MyBUSm0KLShhbikgOS40MDQ2OSBUagotLTI3MiBUSm0KLShpbXBvc2l0aW9uKSA0Mi42MyBUagotLTI3MiBUSm0KLShvbikgOS45NjI2IFRqCi0tMjczIFRKbQotKHRoZSkgMTIuMTc0MyBUagotNzIgMjQ2LjMwNCBUZAotKHByb2dyYW1tZXIpIDQ5LjI0NTEgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDI0NC4xNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzNC4xODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIxNS42ODMgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMS4zLikgNDMuMDcyOSBUagotLTI3OCBUSm0KLShVdGlsaXR5KSA0Ny44MjQ0IFRqCi0tMjc4IFRKbQotKGZ1bmN0aW9ucykgNzcuNDY5MyBUagotLTI3OCBUSm0KLShzdW1tYXIpIDY2Ljk2NzkgVGoKLS0xMCBUSm0KLSh5KSA5LjU3MTc2IFRqCi1bMSAwIDAgMSA3MiAyMTIuMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwMi4xNTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5My43NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNzMgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0yNzMgVEptCi0oc2ltcGxlKSAyNi41NzAzIFRqCi0tMjczIFRKbQotKG5lZWRzLCkgMjUuMTc1NSBUagotWzEgMCAwIDEgMTY1LjkyOSAxOTMuNzY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NS45MjkgLTE5My43NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2NS45MjkgMTkzLjc2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MpIDE0My40NjEgVGoKLVsxIDAgMCAxIDMwOS4zOTEgMTkzLjc2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDkuMzkxIC0xOTMuNzY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTIuMTEyIDE5My43NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDMyOS4yMTkgMTkzLjc2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjkuMjE5IC0xOTMuNzY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjkuMjE5IDE5My43NjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDQ4NC42MzYgMTkzLjc2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODQuNjM2IC0xOTMuNzY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODcuMzU3IDE5My43NjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjczIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZWQuKSAyNC42Mjc1IFRqCi03MiAxODEuODEgVGQKLShUaGVzZSkgMjMuNzkwNyBUagotLTM3NCBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotLTM3MyBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzc0IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zNzMgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMzc0IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0zNzMgVEptCi0ob25lKSAxNC4zODYgVGoKLS0zNzQgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMzczIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNzQgVEptCi0oYW5vdGhlcikgMjkuODc3OCBUagotLTM3NCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0zNzMgVEptCi0oaW4pIDcuNzUwOSBUagotLTM3NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzczIFRKbQotKHNpbmdsZSkgMjMuODAwNyBUagotLTM3NCBUSm0KLShmdW5jdGlvbikgMzMuMjA1MyBUagotLTM3MyBUSm0KLShjYWxsLikgMTYuODc2NiBUagotLTEzNjIgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMzczIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTM3NCBUSm0KLShhc3Nlc3MpIDI0LjM0ODYgVGoKLTcyIDE2OS44NTUgVGQKLSh3aGV0aGVyKSAzMi4wODk1IFRqCi0tMzQ0IFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMzQzIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTM0NCBUSm0KLShmdWxcMDAybGwpIDIyLjE0NjkgVGoKLS0zNDQgVEptCi0oeW91cikgMTguMjYxNCBUagotLTM0MyBUSm0KLShtZW1vcnktdG8tbWVtb3J5KSA4MC43OTY3IFRqCi0tMzQ0IFRKbQotKGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24pIDExMi44OTYgVGoKLS0zNDMgVEptCi0ocmVxdWlyZW1lbnRzKSA1Mi4wMTQ3IFRqCi0tMzQ0IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTM0NCBUSm0KLShpbikgNy43NTA5IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzdGluZykgMjMuODAwNyBUagotNzIgMTU3LjkgVGQKLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oZm9ydCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odW5kZXJzdGFuZGluZykgNTYuNDQ4MSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShnZW5lcmFsKSAyOS4zMTk5IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGNvbXBsZSkgMjkuMzI5OSBUagotMTUgVEptCi0oeCkgNC45ODEzIFRqCi0tMjUwIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UuKSAxNS43NjA4IFRqCi1bMSAwIDAgMSA3MiAxNTUuNzQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNDUuNzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEzNS45ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvc2hpb2thKSAzMC45OTM2IFRqCi0tNDIzIFRKbQotKFRzdW5lbykgMjkuMzI5OSBUagotLTQyMiBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTUwLjE2IDEzNS45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUwLjE2IC0xMzUuOTgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTAuMTYgMTM1Ljk4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0c3VuZW9AcnIuaWlqNHUub3IuanApIDEyNS41MjkgVGoKLVsxIDAgMCAxIDI3NS42OSAxMzUuOTgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3NS42OSAtMTM1Ljk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc1LjY5IDEzNS45ODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS00MjMgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tNDIyIFRKbQotKGNvbnRyaWIpIDI4LjIyNCBUagotMjAgVEptCi0odXRlZCkgMTcuMTU1NiBUagotLTQyMyBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS00MjMgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tNDIyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00MjMgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tNDIzIFRKbQotKGJldHRlcikgMjIuNjg0OCBUagotWzEgMCAwIDEgNDc2LjQ2MiAxMzUuOTgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Ni40NjIgLTEzNS45ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3Ni40NjIgMTM1Ljk4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA1MDAuMzcyIDEzNS45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTAwLjM3MiAtMTM1Ljk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA0LjU4MyAxMzUuOTgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXBhdGktKSAzNS40MTcgVGoKLTcyIDEyNC4wMjcgVGQKLShiaWxpdHkpIDIxLjA0MSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTE0NDYgVEptCi0oVGhlc2UpIDIzLjc5MDcgVGoKLS0zODggVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMzg3IFRKbQotKGFyZSkgMTIuMTY0MyBUagotWzEgMCAwIDEgMTkzLjkxMyAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5My45MTMgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5My45MTMgMTI0LjAyNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpvcGVuKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAyNTMuNjg5IDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUzLjY4OSAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUzLjY4OSAxMjQuMDI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDI2MC4zODUgMTI0LjAyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjAuMzg1IC0xMjQuMDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjAuMzg1IDEyNC4wMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6cmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMzIwLjE2MSAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMC4xNjEgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMC4xNjEgMTI0LjAyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMjYuODU3IDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI2Ljg1NyAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI2Ljg1NyAxMjQuMDI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iendyaXRlKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAzOTIuNjExIDEyNC4wMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkyLjYxMSAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkyLjYxMSAxMjQuMDI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDM5OS4zMDYgMTI0LjAyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTkuMzA2IC0xMjQuMDI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTkuMzA2IDEyNC4wMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Zmx1c2gpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQ2NS4wNiAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2NS4wNiAtMTI0LjAyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY1LjA2IDEyNC4wMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDcxLjc1NiAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3MS43NTYgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3MS43NTYgMTI0LjAyNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpjbG9zZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgNTM3LjUwOSAxMjQuMDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzNy41MDkgLTEyNC4wMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNy41MDkgMTI0LjAyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxMTIuMDcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTIuMDcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMTIuMDcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemVycm9yKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAxMzcuNzUzIDExMi4wNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3Ljc1MyAtMTEyLjA3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQwLjQwOCAxMTIuMDcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxNTcuNDQ5IDExMi4wNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU3LjQ0OSAtMTEyLjA3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU3LjQ0OSAxMTIuMDcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemxpYlZlcnNpb24pIDk1LjY0MSBUagotWzEgMCAwIDEgMjUzLjA5MSAxMTIuMDcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My4wOTEgLTExMi4wNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1My4wOTEgMTEyLjA3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNzE5IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI2NiBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNjcgVEptCi0oXDAwMm5kKSAxNS41MDE4IFRqCi0tMjY2IFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjY3IFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTI2NiBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjY3IFRKbQotKGNvbikgMTQuMzg2IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuaWVudCkgMjQuMzQ4NiBUagotLTI2NiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNjcgVEptCi0oc2ltcGxlKSAyNi41NzAzIFRqCi0tMjY2IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI2NyBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi03MiAxMDAuMTE3IFRkCi0oYW5kKSAxNC4zODYgVGoKLS0yNzAgVEptCi0od3JpKSAxMy4yODAxIFRqCi0xIFRKbQotKHRpbmcsKSAxNy45OTI1IFRqCi0tMjc1IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS0yNjkgVEptCi0odGhvc2UpIDIxLjAzMSBUagotLTI3MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjY5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MCBUSm0KLShoaWdoLWxlKSAyOC4yMjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjY5IFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UuKSAxNS43NjA4IFRqCi0tNzM3IFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjcwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTI2OSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNzAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjY5IFRKbQotKFwoeWV0XCkpIDE4LjgwOTQgVGoKLS0yNzAgVEptCi0ob2YpIDguMjk4ODUgVGoKLTI1IFRKbQotKFwwMDJjaWFsbHkpIDI3LjY3NjEgVGoKLS0yNjkgVEptCi0ocGFydCkgMTUuNDkxOCBUagotLTI3MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI3NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLTcyIDg4LjE2MTQgVGQKLShtaW5pbWFsbHkpIDQwLjk2NjIgVGoKLS0yOTEgVEptCi0oZG9jdW1lbnRlZCkgNDguNjk3MiBUagotLTI5MSBUSm0KLShoZXJlLikgMTkuNjM2MyBUagotLTg2NyBUSm0KLShJZikgNi42MzUwOSBUagotLTI5MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI5MSBUSm0KLShicmVhaywpIDI0LjYxNzYgVGoKLS0zMDEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjkxIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI5MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkxIFRKbQotKGspIDQuOTgxMyBUagotMTAgVEptCi0oZWVwKSAxMy44MjgxIFRqCi0tMjkxIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjkxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MSBUSm0KLShwaWVjZXMuKSAyNy4zODcyIFRqCi0tNDMzIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yOTEgVEptCi0oaG9wZSkgMTkuMzY3MyBUagotLTI5MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkxIFRKbQotKGRvY3VtZW50KSAzOS4yOTI1IFRqCi0tMjkyIFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLS0yOTEgVEptCi0ocHJvcGVybHkpIDMzLjc1MzMgVGoKLS0yOTEgVEptCi0od2hlbikgMjEuNTc5IFRqCi03MiA3Ni4yMDYyIFRkCi0odGltZSkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShwZXJtaXRzLikgMzIuMzc4NSBUagotWzEgMCAwIDEgNzIgNzQuMDQ5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIzLjE5NzZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQuMzgzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuOTczN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQzLjA2MzMgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTguMjI1IC01MS4wNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTU0MS4yODggNTEuMDcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDkpIDQuOTgxMyBUagotWzEgMCAwIDEgNDU1LjE2MSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTUuMDM2NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMTMgMTMKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yMS41NTQyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC03MjBdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvc2hpb2thKSAzMC45OTM2IFRqCi0tMjUwIFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yNTAgVEptCi0oY29udHJpYikgMjguMjI0IFRqCi0yMCBUSm0KLSh1dGVkKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG1vZGlcMDAyY2F0aW9ucykgNTQuMjQ2NCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFsbG8pIDE0Ljk0MzkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWx0KSAxMy4yOTAxIFRqCi0tMjUwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaW5kbykgMTcuNzEzNSBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0yNTAgVEptCi0oRExMLikgMjEuODU3OSBUagotWzEgMCAwIDEgNzIgNzA3Ljg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02OTguMTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NzUuNTA0IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgzLjIuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKEVycikgMjkuODUxNSBUagotMjAgVEptCi0ob3IpIDIwLjY1ODUgVGoKLS0yNzggVEptCi0oaGFuZGxpbmcpIDg2LjA4NCBUagotWzEgMCAwIDEgNzIgNjcwLjkwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjYxLjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjUzLjgwNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yMTQgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTIxNSBUSm0KLShpcykgNi42NDUwNSBUagotLTIxNCBUSm0KLShkZXNpZ25lZCkgMzUuNDE3IFRqCi0tMjE1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMTQgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTIxNSBUSm0KLShjbGVhbmx5KSAyOC43NzIgVGoKLS0yMTQgVEptCi0oaW4pIDcuNzUwOSBUagotLTIxNSBUSm0KLShhbGwpIDkuOTYyNiBUagotLTIxNCBUSm0KLShzaXR1YXRpb25zLCkgNDAuNjg3MyBUagotLTIyMiBUSm0KLShpbmNsdWRpbmcpIDM3LjYzODcgVGoKLS0yMTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0LWNhc2UpIDM1LjQwNzEgVGoKLS0yMTQgVEptCi0oc2l0dWF0aW9uKSAzNC4zMjEyIFRqCi0tMjE1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjE0IFRKbQotKGRlY29tcHJlc3NpbmcpIDU5Ljc2NTYgVGoKLS0yMTUgVEptCi0ocmFuZG9tKSAzMC40MzU3IFRqCi03MiA2NDEuODUgVGQKLShkYXRhLikgMTkuMDg4MyBUagotLTc2NCBUSm0KLShJJ20pIDE0LjM4NiBUagotLTI3NCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNzUgVEptCi0oMTAwJSkgMjMuMjQyNyBUagotLTI3NCBUSm0KLShzdXJlKSAxNi41OTc3IFRqCi0tMjc0IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNzQgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNzQgVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjc0IFRKbQotKGFsKSA3LjE5MyBUagotMTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5cykgMTMuMjgwMSBUagotLTI3NCBUSm0KLShkbykgOS45NjI2IFRqCi0tMjc0IFRKbQotKHRoaXMsKSAxNi44ODY2IFRqCi0tMjgwIFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjc0IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI3NCBUSm0KLShtaWdodCkgMjMuMjUyNyBUagotLTI3NCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjc0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzQgVEptCi0oYWRkKSAxNC4zODYgVGoKLS0yNzQgVEptCi0oYSkgNC40MjMzOSBUagotLTI3NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0xIFRKbQotKGlnbmFsKSAxOS45MjUyIFRqCi0tMjc1IFRKbQotKGhhbmRsZXIpIDI5Ljg3NzggVGoKLS0yNzQgVEptCi0odG8pIDcuNzUwOSBUagotLTI3NCBUSm0KLShjYXRjaCkgMjEuMDIxMSBUagotLTI3NCBUSm0KLShzZSkgOC4yOTg4NSBUagotMTUgVEptCi0oZ21lbnRhdGlvbikgNDQuODMxNyBUagotNzIgNjI5Ljg5NCBUZAotKHZpb2xhdGlvbnMpIDM5LjMwMjUgVGoKLS0yNzMgVEptCi0oZHVyaW5nKSAyNi4wMTIzIFRqCi0tMjczIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNzMgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNzMgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjczIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI3MyBUSm0KLShmZWVsaW5nKSAyNy42NjYxIFRqCi0tMjc0IFRKbQotKGVzcGVjaWFsbCkgMzQuODU5MSBUagotMSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNzQgVEptCi0ocGFyYW5vaWQuKSAzNy4zNDk4IFRqCi0tNzU4IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNzMgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yNzMgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNzMgVEptCi0oaW50ZXJlc3RlZCkgMzguNzM0NiBUagotLTI3MyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjc0IFRKbQotKGhlYXJpbmcpIDI5Ljg3NzggVGoKLS0yNzMgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI3MyBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotNzIgNjE3LjkzOSBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShyb2IpIDEzLjI4MDEgVGoKLTIwIFRKbQotKHVzdG5lc3MpIDI4Ljc4MiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGNvcnJ1cHRlZCkgMzguMTc2NyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKGRhdGEuKSAxOS4wODgzIFRqCi1bMSAwIDAgMSA3MiA2MTUuNzgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MDYuMDM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTYuMjQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFYpIDcuMTkzIFRqCi0xMTEgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjUxIFRKbQotKDEuMC4zKSAxOS45MjUyIFRqCi0tMjUxIFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNTEgVEptCi0ocm9iKSAxMy4yODAxIFRqCi0yMCBUSm0KLSh1c3QpIDExLjYyNjQgVGoKLS0yNTEgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTEgVEptCi0ocmVzcGVjdCkgMjguMjE0MSBUagotLTI1MiBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMjUxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTEgVEptCi0ocHJlKSAxMi43MjIyIFRqCi0yNSBUSm0KLSh2aW91cykgMjEuNTg5IFRqCi0tMjUxIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uLikgMjYuODM5MiBUagotLTYyNiBUSm0KLShJbikgOC4yOTg4NSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlc3RpZykgMTguODE5NCBUagotNSBUSm0KLShhdGlvbnMpIDIzLjgwMDcgVGoKLS0yNTEgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MSBUSm0KLShWKSA3LjE5MyBUagotMTExIFRKbQotKGFsZ3JpbmQpIDI4LjIyNCBUagotLTI1MSBUSm0KLShcKGEpIDcuNzQwOTQgVGoKLS0yNTIgVEptCi0odG9vbCkgMTUuNTAxOCBUagotLTI1MSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTEgVEptCi0oZGV0ZWN0aW5nKSAzNi41MjI5IFRqCi03MiA1ODQuMjg1IFRkCi0ocHJvYmxlbXMpIDM3LjA4MDggVGoKLS00MjIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTQyMSBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS00MjIgVEptCi0obWFuYWdlbWVudFwpKSA1NC4yMjY0IFRqCi0tNDIxIFRKbQotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tNDIyIFRKbQotKHRoYXQsKSAxNy40MzQ2IFRqCi0tNDY0IFRKbQotKGF0KSA3LjE5MyBUagotLTQyMiBUSm0KLShsZWFzdCkgMTguMjYxNCBUagotLTQyMSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS00MjIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDIyIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS00MjIgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotLTQyMiBUSm0KLShJKSAzLjMxNzU1IFRqCi0tNDIxIFRKbQotKHRlc3RlZCwpIDI1LjczMzQgVGoKLS00NjQgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS00MjIgVEptCi0oc2luZ2xlLWJpdCkgMzcuNjM4NyBUagotLTQyMiBUSm0KLShlcnJvcnMpIDIzLjIzMjggVGoKLS00MjEgVEptCi0oaW4pIDcuNzUwOSBUagotLTQyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDU3Mi4zMyBUZAotKGRlY29tcHJlc3NlZCkgNTYuNDM4MSBUagotLTM0MiBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzQxIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM0MiBUSm0KLShjYXVnaHQpIDI2LjU2MDMgVGoKLS0zNDIgVEptCi0ocHJvcGVybHkpIDMzLjc1MzMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zNjUgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTM0MSBUSm0KLShubykgOS45NjI2IFRqCi0tMzQyIFRKbQotKHNlKSA4LjI5ODg1IFRqCi0xNSBUSm0KLShnbWVudGF0aW9uKSA0NC44MzE3IFRqCi0tMzQyIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGF1bHRzLCkgMjEuMzEgVGoKLS0zNjUgVEptCi0obm8pIDkuOTYyNiBUagotLTM0MSBUSm0KLSh1c2VzKSAxNy4xNTU2IFRqCi0tMzQyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQyIFRKbQotKHVuaW5pdGlhbGlzZWQpIDQ5LjI2NTEgVGoKLS0zNDIgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLS0zNjQgVEptCi0obm8pIDkuOTYyNiBUagotLTM0MiBUSm0KLShvdXQpIDEyLjczMjIgVGoKLS0zNDIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNDIgVEptCi0ocmFuZ2UpIDIyLjEyNjkgVGoKLTcyIDU2MC4zNzUgVGQKLShyZWFkcykgMjEuMDIxMSBUagotLTI2MSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI2MCBUSm0KLSh3cml0ZXMsKSAyNi44MzkyIFRqCi0tMjYzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjYxIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNjEgVEptCi0oaW5cMDAybml0KSAyMy44MTA2IFRqCi0xIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjEgVEptCi0obG9vcGluZykgMzAuNDQ1NyBUagotLTI2MSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjYwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MSBUSm0KLShkZWNvbXByZXNzb3IpIDU1LjMzMjMgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS0zNDIgVEptCi0oU28pIDEwLjUyMDUgVGoKLS0yNjAgVEptCi0oaXQnKSA4Ljg1Njc1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjYxIFRKbQotKGNlcnRhaW5seSkgMzQuODU5MSBUagotLTI2MCBUSm0KLShwcmV0dHkpIDIzLjI0MjcgVGoKLS0yNjEgVEptCi0ocm9iKSAxMy4yODAxIFRqCi0yMCBUSm0KLSh1c3QsKSAxNC4xMTcgVGoKLS0yNjMgVEptCi0oYWx0aG91Z2gpIDM0Ljg2OTEgVGoKLS0yNjEgVEptCi0oSSkgMy4zMTc1NSBUagotLTI2MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3VsZG4nKSAyNi4wMTIzIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNjEgVEptCi0oY2xhaW0pIDIyLjEzNjkgVGoKLTcyIDU0OC40MiBUZAotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0odG90YWxseSkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShib21icHJvb2YuKSA0Ni43NjQ0IFRqCi1bMSAwIDAgMSA3MiA1NDYuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MzYuNTE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MjYuNzIxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI4MiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDEwNS44NCA1MjYuNzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwNS44NCAtNTI2LjcyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA1Ljg0IDUyNi43MjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpsaWIuaCkgNDEuODQyOSBUagotWzEgMCAwIDEgMTQ3LjY4MyA1MjYuNzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Ny42ODMgLTUyNi43MjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MC40OTEgNTI2LjcyMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb250YWlucykgMzMuMjA1MyBUagotLTI4MiBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI4MiBUSm0KLShkZVwwMDJuaXRpb25zKSA0Mi4wNzIxIFRqCi0tMjgyIFRKbQotKG5lZSkgMTMuODI4MSBUagotMSBUSm0KLShkZWQpIDE0LjM4NiBUagotLTI4MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjgyIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI4MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODIgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTgxMSBUSm0KLShJbikgOC4yOTg4NSBUagotLTI4MiBUSm0KLShwYXJ0aWN1bGFyKSAzOC4xNzY3IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjkwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI4MiBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yODEgVEptCi0oZGVcMDAybml0ZWx5KSAzNy42Mzg3IFRqCi0tMjgyIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI4MiBUSm0KLShpbmNsdWRlKSAyOS4zMjk5IFRqCi1bMSAwIDAgMSA3MiA1MTQuNzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MTQuNzY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MTQuNzY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6bGliX3ByaXZhdGUuaCkgODkuNjYzNCBUagotWzEgMCAwIDEgMTYxLjY2NCA1MTQuNzY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS42NjQgLTUxNC43NjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2MS42NjQgNTE0Ljc2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA1MTMuMjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MDMuNDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0OTMuMDY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEluKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA4Mi44MDc1IDQ5My4wNjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODIuODA3NSAtNDkzLjA2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODIuODA3NSA0OTMuMDY3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6bGliLmgpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEyNC42NTEgNDkzLjA2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjQuNjUxIC00OTMuMDY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjQuNjUxIDQ5My4wNjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTIgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcmlvdXMpIDI0LjM0ODYgVGoKLS0yNTIgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUyIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLS0yNTEgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjUyIFRKbQotKGRlXDAwMm5lZC4pIDMxLjgyMDUgVGoKLS02MzEgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUyIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjUyIFRKbQotKGxpc3QpIDEyLjE4NDMgVGoKLS0yNTEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTIgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUyIFRKbQotKGludGVuZGVkKSAzNC4zMTEyIFRqCi0tMjUyIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUyIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjUxIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhoYXVzdGkpIDI4Ljc4MiBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUyIFRKbQotKGRlc2NyaXB0aW9uKSA0NC4yNzM4IFRqCi0tMjUyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi03MiA0ODEuMTEyIFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjM2IFRKbQotKGNpcmN1bXN0YW5jZXMpIDU2LjQzODEgVGoKLS0yMzYgVEptCi0oaW4pIDcuNzUwOSBUagotLTIzNyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTIzNiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjM2IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0yMzYgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjM2IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTIzNyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIzNiBUSm0KLShyZXR1cm5lZCkgMzMuMTk1NCBUagotLTIzNiBUSm0KLSgtLSkgNi42MzUwOSBUagotLTIzNiBUSm0KLSh0aG9zZSkgMjEuMDMxIFRqCi0tMjM2IFRKbQotKGRlc2NyaXB0aW9ucykgNDguMTQ5MiBUagotLTIzNiBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yMzcgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTIzNiBUSm0KLShsYXRlcikgMTcuNzAzNSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTMwNSBUSm0KLShSYXRoZXIpIDI2LjU2MDMgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yMzkgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yMzYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzcgVEptCi0oaW50ZW5kZWQpIDM0LjMxMTIgVGoKLS0yMzYgVEptCi0odG8pIDcuNzUwOSBUagotNzIgNDY5LjE1NyBUZAotKGNvbikgMTQuMzg2IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI2NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjUgVEptCi0ocm91Z2gpIDIzLjI0MjcgVGoKLS0yNjYgVEptCi0obWVhbmluZykgMzQuMzExMiBUagotLTI2NSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2NiBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMjY2IFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI2NSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUuKSAxOS4wODgzIFRqCi0tNzE0IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI2NSBUSm0KLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMjY2IFRKbQotKFwwMDIpIDUuNTM5MjEgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI2NSBUSm0KLShhY3Rpb25zKSAyOC4yMjQgVGoKLS0yNjYgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjY2IFRKbQotKG5vcm1hbCkgMjguMjI0IFRqCi0tMjY1IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY2IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI2NSBUSm0KLShpbnRlbmRlZCkgMzQuMzExMiBUagotLTI2NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY2IFRKbQotKGRlbm90ZSkgMjYuNTYwMyBUagotLTI2NSBUSm0KLShhbikgOS40MDQ2OSBUagotLTI2NiBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotNzIgNDU3LjIwMiBUZAotKHNpdHVhdGlvbi4pIDM2LjgxMTggVGoKLVsxIDAgMCAxIDcyIDQ1Ny4xMDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzNy42MTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyNS43NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA0MjUuNzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMi4zNzg2IC0xLjMxMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQyNC40NDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0MTMuODA0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShyZXF1ZXN0ZWQpIDM4LjE3NjcgVGoKLS0yNTAgVEptCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjb21wbGV0ZWQpIDQxLjUwNDIgVGoKLS0yNTAgVEptCi0oc3VjY2Vzc2Z1bGx5KSA0OC42OTcyIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA0MTEuNjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy43NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM5OC4xMzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM4OC4zNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9SVU5fT0ssKSA1OS43NzU2IFRqCi0tNjAwIFRKbQotKEJaX0ZMVVNIX09LLCkgNzEuNzMwNyBUagotLTYwMCBUSm0KLShCWl9GSU5JU0hfT0spIDcxLjczMDcgVGoKLVsxIDAgMCAxIDI4Ny4xOTMgMzg4LjM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE3LjY4NCAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg3LjAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMzc2LjM4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTE4Ljc5IDM3Ni4zODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE4Ljc5IC0zNzYuMzg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTguNzkgMzc2LjM4NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjAyLjQ3NiAzNzYuMzg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMi40NzYgLTM3Ni4zODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMi40NzYgMzc2LjM4NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShyZXF1ZXN0ZWQpIDM4LjE3NjcgVGoKLS0yNTAgVEptCi0oXDAwM3VzaC9cMDAybmlzaC9ub3RoaW5nLXNwZWNpYWwpIDEwOC40OTMgVGoKLS0yNTAgVEptCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjb21wbGV0ZWQpIDQxLjUwNDIgVGoKLS0yNTAgVEptCi0oc3VjY2Vzc2Z1bGx5KSA0OC42OTcyIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAzNzQuMjI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy43NjU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43NDM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNjAuNzE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNTAuOTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMTQ5LjcwOSAzNTAuOTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04MC4xOTkzIC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNDkuNjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAzMzguOTY1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGNvbXBsZXRlZCwpIDQzLjk5NDggVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxvZ2ljYWwpIDI3LjExODIgVGoKLS0yNTAgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShkZXRlY3RlZCkgMzMuMTk1NCBUagotLTI1MCBUSm0KLShkdXJpbmcpIDI2LjAxMjMgVGoKLS0yNTAgVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLVsxIDAgMCAxIDcyIDMzNi44MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjc2NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMxMy41NTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMwMy43NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShraW5kLikgMjAuMjA0MiBUagotWzEgMCAwIDEgNzIgMzAxLjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI4Mi4xMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI3Mi4zMTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfQ09ORklHX0VSUk9SKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxNjEuNjY0IDI3Mi4zMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05Mi4xNTQ0IC0xLjMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNzEuMDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggMjYwLjM1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbmRpY2F0ZXMpIDM1Ljk2NSBUagotLTM4NiBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzg1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM4NiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzg2IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTM4NiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMzg1IFRKbQotKGltcHJvcGVybHkpIDQ0LjI3MzggVGoKLS0zODYgVEptCi0oY29tcGlsZWQpIDM3LjA4MDggVGoKLS0zODYgVEptCi0ob24pIDkuOTYyNiBUagotLTM4NiBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMzg1IFRKbQotKHBsYXRmb3JtKSAzNC4zMTEyIFRqCi0tMzg2IFRKbQotKC0tKSA2LjYzNTA5IFRqCi0tMzg2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zODYgVEptCi0obWFqb3IpIDIzLjI0MjcgVGoKLS0zODUgVEptCi0oY29uXDAwMmd1cmF0aW9uKSA1My4xMzA1IFRqCi0tMzg2IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0xMDggMjQ4LjQwNCBUZAotKFNwZWNpXDAwMmNhbGx5KSA0Ny4wNDM0IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNDgxIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tNDM1IFRKbQotKG1lYW5zKSAyNS40NTQ0IFRqCi0tNDM1IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLVsxIDAgMCAxIDIyMC42MTQgMjQ4LjQwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjAuNjE0IC0yNDguNDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjAuNjE0IDI0OC40MDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc2l6ZW9mXChjaGFyXCkpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDI5Mi4zNDUgMjQ4LjQwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTIuMzQ1IC0yNDguNDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTIuMzQ1IDI0OC40MDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjk5LjYyOCAyNDguNDA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OS42MjggLTI0OC40MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OS42MjggMjQ4LjQwNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzaXplb2ZcKHNob3J0XCkpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDM3Ny4zMzcgMjQ4LjQwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzcuMzM3IC0yNDguNDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODEuNjY5IDI0OC40MDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQwMC4zODggMjQ4LjQwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDAuMzg4IC0yNDguNDA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDAuMzg4IDI0OC40MDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc2l6ZW9mXChpbnRcKSkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDY2LjE0MSAyNDguNDA0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2Ni4xNDEgLTI0OC40MDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3MC40NzQgMjQ4LjQwNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS00MzUgVEptCi0obm90KSAxMi43MzIyIFRqCi0tNDM1IFRKbQotKDEsKSA3LjQ3MTk1IFRqCi0tNDgxIFRKbQotKDIpIDQuOTgxMyBUagotLTQzNSBUSm0KLShhbmQpIDE0LjM4NiBUagotMTA4IDIzNi40NDkgVGQKLSg0KSA0Ljk4MTMgVGoKLS0zODkgVEptCi0ocmVzcGVjdGkpIDMwLjk4MzcgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWx5KSAxMi4xNzQzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tNDI0IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzkwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzg5IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTM4OSBUSm0KLShiZS4pIDExLjg5NTMgVGoKLS0xNDU2IFRKbQotKE5vdGUpIDE5LjM2NzMgVGoKLS0zODkgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTM4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODkgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM5MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zODkgVEptCi0oc3RpbGwpIDE0Ljk1MzkgVGoKLS0zODkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaykgMTMuMjgwMSBUagotLTM4OSBUSm0KLShwcm9wZXJseSkgMzMuNzUzMyBUagotLTM5MCBUSm0KLShvbikgOS45NjI2IFRqCi0tMzg5IFRKbQotKDY0LWJpdCkgMjMuODAwNyBUagotLTM4OSBUSm0KLShwbGF0Zm9ybXMpIDM4LjE4NjYgVGoKLTEwOCAyMjQuNDkzIFRkCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yOTIgVEptCi0oZm9sbG8pIDE4LjgxOTQgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjkyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MiBUSm0KLShMUDY0KSAyMS41ODkgVGoKLS0yOTIgVEptCi0ocHJvZ3JhbW1pbmcpIDU0LjIzNjQgVGoKLS0yOTMgVEptCi0obW9kZWwpIDI0LjkwNjUgVGoKLS0yOTIgVEptCi0oLS0pIDYuNjM1MDkgVGoKLS0yOTIgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI5MiBUSm0KLShpcywpIDkuMTM1NyBUagotLTMwMyBUSm0KLSh3aGVyZSkgMjQuMzM4NiBUagotWzEgMCAwIDEgMzU1LjI3OSAyMjQuNDkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1NS4yNzkgLTIyNC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1NS4yNzkgMjI0LjQ5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzaXplb2ZcKGxvbmdcKSkgNzEuNzMwNyBUagotWzEgMCAwIDEgNDI3LjAxIDIyNC40OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI3LjAxIC0yMjQuNDkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjkuOTIgMjI0LjQ5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDQ3LjIxNyAyMjQuNDkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0Ny4yMTcgLTIyNC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0Ny4yMTcgMjI0LjQ5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzaXplb2ZcKHZvaWQpIDY1Ljc1MzIgVGoKLTUxMi45NyAyMjIuNzUgVGQKLSgqKSA1Ljk3NzU2IFRqCi01MTguOTQ4IDIyNC40OTMgVGQKLShcKSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNTI0LjkyNSAyMjQuNDkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyNC45MjUgLTIyNC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyNy44MzYgMjI0LjQ5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLTEwOCAyMTIuNTM4IFRkCi0oOC4pIDcuNDcxOTUgVGoKLS02MjAgVEptCi0oVW5kZXIpIDI0Ljg5NjUgVGoKLS0yNTAgVEptCi0oTFA2NCwpIDI0LjA3OTYgVGoKLVsxIDAgMCAxIDE3NS42MDYgMjEyLjUzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzUuNjA2IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzUuNjA2IDIxMi41MzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc2l6ZW9mXChpbnRcKSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMjQxLjM2IDIxMi41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQxLjM2IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDMuODUgMjEyLjUzOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShzdGlsbCkgMTQuOTUzOSBUagotLTI1MCBUSm0KLSg0LCkgNy40NzE5NSBUagotLTI1MCBUSm0KLShzbykgOC44NTY3NSBUagotWzEgMCAwIDEgMjkxLjc0IDIxMi41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkxLjc0IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTEuNzQgMjEyLjUzOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMzM5LjU2IDIxMi41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM5LjU2IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzkuNTYgMjEyLjUzOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDQzMy40NTggMjEyLjUzOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzMuNDU4IC0yMTIuNTM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzMuNDU4IDIxMi41MzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obG9uZykgMjMuOTEwMiBUagotWzEgMCAwIDEgNDU3LjM2OCAyMTIuNTM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1Ny4zNjggLTIxMi41MzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OS44NTkgMjEyLjUzOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0eXBlLCkgMTkuNjQ2MiBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShPSy4pIDE2Ljg3NjYgVGoKLVsxIDAgMCAxIDcyIDIxMC4zODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjc2NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc0MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE5Ni44NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE4Ny4wNzQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDE3My42MTkgMTg3LjA3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwNC4xMSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTg1Ljc2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDE3NS4xMTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oV2hlbikgMjMuNzkwNyBUagotLTI5MSBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjkwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5MSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzAwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjkxIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjkwIFRKbQotKGltcG9ydGFudCkgMzguNzQ0NiBUagotLTI5MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkwIFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTI5MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjkxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkxIFRKbQotKGNvcnJlY3QpIDI3LjY1NjIgVGoKLS0yOTAgVEptCi0oc2VxdWVuY2UpIDM2LjUxMjkgVGoKLS0yOTEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI5MSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjkwIFRKbQotKHN0cnVjdHVyZXMpIDM4LjczNDYgVGoKLTEwOCAxNjMuMTYzIFRkCi0oXChiKSA4LjI5ODg1IFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVycykgMTQuOTMzOSBUagotLTIwNiBUSm0KLShldGNcKSkgMTQuOTMzOSBUagotLTIwNSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjA2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIwNSBUSm0KLShjb3JyZWN0KSAyNy42NTYyIFRqCi0tMjA2IFRKbQotKHN0YXRlcy4pIDI0LjYyNzUgVGoKLVsxIDAgMCAxIDIzOS40MDkgMTYzLjE2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzkuNDA5IC0xNjMuMTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzkuNDA5IDE2My4xNjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDI4Ny4yMyAxNjMuMTYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Ny4yMyAtMTYzLjE2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg5LjI3OCAxNjMuMTYzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNoZWNrcykgMjcuMTA4MiBUagotLTIwNiBUSm0KLShhcykgOC4yOTg4NSBUagotLTIwNSBUSm0KLShtdWNoKSAyMi4xMzY5IFRqCi0tMjA2IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjA1IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjA2IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIwNiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjA1IFRKbQotKGVuc3VyZSkgMjYuMDAyNCBUagotLTIwNiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yMDYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMDUgVEptCi0oaGFwcGVuaW5nLCkgNDMuOTk0OCBUagotLTIxNSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIwNSBUSm0KLShyZXR1cm5zKSAyNy42NjYxIFRqCi1bMSAwIDAgMSAxMDggMTUxLjIwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDggLTE1MS4yMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCAxNTEuMjA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAyMDkuNjE5IDE1MS4yMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA5LjYxOSAtMTUxLjIwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEzLjI3IDE1MS4yMDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaWYpIDYuMDg3MTUgVGoKLS0zNjcgVEptCi0obm90LikgMTUuMjIyOSBUagotLTY1OSBUSm0KLShDb2RlKSAyMS4wMzEgVGoKLS0zNjcgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNjcgVEptCi0oY29tcGxpZXMpIDM1Ljk3NDkgVGoKLS0zNjYgVEptCi0ocHJlY2lzZWx5KSAzNS45NjUgVGoKLS0zNjcgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTM2NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjcgVEptCi0oZnVuY3Rpb24pIDMzLjIwNTMgVGoKLS0zNjYgVEptCi0oc2VtYW50aWNzLCkgNDEuNzgzMSBUagotLTM5NiBUSm0KLShhcykgOC4yOTg4NSBUagotLTM2NyBUSm0KLShkZXRhaWxlZCkgMzEuNTQxNiBUagotMTA4IDEzOS4yNTMgVGQKLShiZWxvKSAxNy4xNTU2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yNTAgVEptCi0ocmVjZWkpIDE5LjM1NzMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlOykgMTkuMzY3MyBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGRlbm90ZXMpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1Z2d5KSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi00MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzdGlnKSAxOC44MTk0IFRqCi01IFRKbQotKGF0ZS4pIDE0LjEwNyBUagotWzEgMCAwIDEgNzIgMTM3LjA5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuNzY1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuNzQzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTIzLjU4N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTEzLjc4OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiAxMTMuNzg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuMTc2OCAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTEyLjQ3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDEwMS44MzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuZWQpIDM2LjUyMjkgVGoKLS00MzQgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tNDM0IFRKbQotKGEpIDQuNDIzMzkgVGoKLS00MzQgVEptCi0ocGFyYW1ldGVyKSAzOS44MzA1IFRqCi0tNDM0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00MzQgVEptCi0oYSkgNC40MjMzOSBUagotLTQzMyBUSm0KLShmdW5jdGlvbikgMzMuMjA1MyBUagotLTQzNCBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS00MzQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS00MzQgVEptCi0ob3V0KSAxMi43MzIyIFRqCi0tNDM0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDM0IFRKbQotKHJhbmdlKSAyMi4xMjY5IFRqCi0tNDM0IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tNDM0IFRKbQotKG90aGVyd2lzZSkgMzguNzM0NiBUagotLTQzNCBUSm0KLShtYW5pZmVzdGx5KSA0Mi4wNjIxIFRqCi0tNDM0IFRKbQotKGluY29ycmVjdC4pIDM3Ljg5NzcgVGoKLS0xNzIzIFRKbQotKEFzKSAxMS4wNjg0IFRqCi0xMDggODkuODc3OCBUZAotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDEzMS42NDQgODkuODc3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzEuNjQ0IC04OS44Nzc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzEuNjQ0IDg5Ljg3NzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDIzMy4yNjMgODkuODc3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzMuMjYzIC04OS44Nzc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzMuMjYzIDg5Ljg3NzggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTU5NSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS01OTYgVEptCi0oZGVub3RlcykgMzAuNDM1NyBUagotLTU5NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNTk1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWcpIDkuOTYyNiBUagotLTU5NiBUSm0KLShpbikgNy43NTA5IFRqCi0tNTk1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTU5NSBUSm0KLShjbGllbnQpIDIyLjEzNjkgVGoKLS01OTUgVEptCi0oY29kZS4pIDIxLjMgVGoKLS0yNjkyIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTU5NiBUSm0KLShkaXN0aW5jdGlvbikgNDIuMDcyMSBUagotLTU5NSBUSm0KLShiZXR3ZWVuKSAzMy4xOTU0IFRqCi1bMSAwIDAgMSAxMDggNzcuOTIyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDggLTc3LjkyMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA3Ny45MjI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi1bMSAwIDAgMSAxOTEuNjg2IDc3LjkyMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkxLjY4NiAtNzcuOTIyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk0LjE3NyA3Ny45MjI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMTEuMDUzIDc3LjkyMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjExLjA1MyAtNzcuOTIyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjExLjA1MyA3Ny45MjI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAzMTIuNjcyIDc3LjkyMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEyLjY3MiAtNzcuOTIyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE1LjE2MyA3Ny45MjI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oYml0KSAxMC41MjA1IFRqCi0tMjUwIFRKbQotKGhhenkpIDE4LjgwOTQgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKHN0aWxsKSAxNC45NTM5IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnRoKSAxNi4wNDk3IFRqCi0tMjUwIFRKbQotKG1ha2luZy4pIDMyLjM3ODUgVGoKLVsxIDAgMCAxIDcyIDc1Ljc2NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjc2NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMS4xNDgyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEwKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE0IDE0Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotWzEgMCAwIDEgMTQzLjczMSA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzQuMjIxNyAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzA4LjcyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuZWQpIDM2LjUyMjkgVGoKLS0yMjggVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjI3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMjggVEptCi0ocmVxdWVzdCkgMjguNzcyIFRqCi0tMjI3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMjggVEptCi0oYWxsb2NhdGUpIDMwLjk4MzcgVGoKLS0yMjggVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjI3IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFpbGVkLikgMjEuODU3OSBUagotLTYwNSBUSm0KLShOb3RlKSAxOS4zNjczIFRqCi0tMjI4IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yMjggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjI3IFRKbQotKHF1YW50aXR5KSAzMi42NTc0IFRqCi0tMjI4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjI3IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTIyOCBUSm0KLShuZWVkZWQpIDI4LjIxNDEgVGoKLS0yMjggVEptCi0odG8pIDcuNzUwOSBUagotLTIyNyBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0xMDggNjg2LjEyNyBUZAotKGEpIDQuNDIzMzkgVGoKLS0zNTEgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMzUyIFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTM1MSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM1MiBUSm0KLShkZXRlcm1pbmVkKSA0NC44MjE3IFRqCi0tMzUxIFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tMzUyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM1MSBUSm0KLShzdHJlYW0nKSAyOS44Nzc4IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMzUxIFRKbQotKGhlYWRlcikgMjYuNTUwMyBUagotLTM1MiBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0zNTEgVEptCi0oYmVlbikgMTguODA5NCBUagotLTM1MiBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotLTEyMjggVEptCi0oU28pIDEwLjUyMDUgVGoKLVsxIDAgMCAxIDQyNi40NzEgNjg2LjEyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjYuNDcxIC02ODYuMTI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjYuNDcxIDY4Ni4xMjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSA1MjIuMTEzIDY4Ni4xMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTIyLjExMyAtNjg2LjEyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI1LjYxNCA2ODYuMTI3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAxMDggNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDggLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2NzQuMTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDE2Ny43NzYgNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjcuNzc2IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuMTMgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShtYXkpIDE3LjE1NTYgVGoKLS00MzcgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi1bMSAwIDAgMSAyMjEuNzg0IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIxLjc4NCAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIxLjc4NCA2NzQuMTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotWzEgMCAwIDEgMjkzLjUxNSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5My41MTUgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5Ny44NjcgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuKSA5LjQwNDY5IFRqCi0tNDM3IFRKbQotKHRob3VnaCkgMjcuNjc2MSBUagotLTQzNyBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS00MzcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS00MzcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDM3IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00MzcgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTQzNyBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS00MzcgVEptCi0oYmVlbikgMTguODA5NCBUagotLTQzNyBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotMTA4IDY2Mi4yMTcgVGQKLShUaGUpIDE1LjQ5MTggVGoKLS00NzkgVEptCi0oc2FtZSkgMjAuNDczMSBUagotLTQ3OCBUSm0KLShpcykgNi42NDUwNSBUagotLTQ3OSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS00NzggVEptCi0odHJ1ZSkgMTUuNDkxOCBUagotLTQ3OSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS00NzkgVEptCi0oY29tcHJlc3Npb247KSA1My4xMzA1IFRqCi0tNTkzIFRKbQotKG9uY2UpIDE4LjgwOTQgVGoKLVsxIDAgMCAxIDMwMS42NzUgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDEuNjc1IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDEuNjc1IDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSA0MDkuMjcxIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA5LjI3MSAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE0LjA0IDY2Mi4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob3IpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQyNy4xMDcgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjcuMTA3IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjcuMTA3IDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVPcGVuKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA1MTYuNzcxIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE2Ljc3MSAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTIxLjUzOSA2NjIuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLTEwOCA2NTAuMjYyIFRkCi0oc3VjY2Vzc2Z1bGx5KSA0OC42OTcyIFRqCi0tMjUwIFRKbQotKGNvbXBsZXRlZCwpIDQzLjk5NDggVGoKLVsxIDAgMCAxIDIwNS42NzIgNjUwLjI2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDUuNjcyIC02NTAuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDUuNjcyIDY1MC4yNjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAyNzcuNDAzIDY1MC4yNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc3LjQwMyAtNjUwLjI2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc5Ljg5NCA2NTAuMjYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNhbm5vdCkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShvY2N1cikgMjIuMTI2OSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjQ4LjEwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MzQuMTU3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MjQuMzU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0RBVEFfRVJST1IpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE0OS43MDkgNjI0LjM1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgwLjE5OTMgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYyMy4wNDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA2MTIuNDA0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybmVkKSAzNi41MjI5IFRqCi0tMjY2IFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTI2NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjY2IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNjUgVEptCi0oaW50ZSkgMTQuOTQzOSBUagotMTUgVEptCi0oZ3JpdHkpIDE4LjgxOTQgVGoKLS0yNjYgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNjYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjUgVEptCi0oZGV0ZWN0ZWQpIDMzLjE5NTQgVGoKLS0yNjYgVEptCi0oZHVyaW5nKSAyNi4wMTIzIFRqCi0tMjY1IFRKbQotKGRlY29tcHJlc3Npb24uKSA2Mi4yNTYzIFRqCi0tNzE0IFRKbQotKE1vc3QpIDIwLjQ4MzEgVGoKLS0yNjYgVEptCi0oaW1wb3J0YW50bCkgNDEuNTE0MiBUagotMSBUSm0KLSh5KSA0Ljk4MTMgVGoKLTY0IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNjkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjY2IFRKbQotKG1lYW5zKSAyNS40NTQ0IFRqCi0tMjY1IFRKbQotKHdoZW4pIDIxLjU3OSBUagotMTA4IDYwMC40NDggVGQKLShzdG9yZWQpIDI0LjM0ODYgVGoKLS0yMjIgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMjMgVEptCi0oY29tcHV0ZWQpIDM5LjI5MjUgVGoKLS0yMjIgVEptCi0oQ1JDcykgMjMuODEwNiBUagotLTIyMiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yMjIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjIzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yMjIgVEptCi0oZG8pIDkuOTYyNiBUagotLTIyMiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yMjIgVEptCi0obWF0Y2guKSAyNi44MzkyIFRqCi0tNjAyIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yMjIgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjIyIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjIzIFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0yMjIgVEptCi0ocmV0dXJuZWQpIDMzLjE5NTQgVGoKLS0yMjIgVEptCi0odXBvbikgMTkuOTI1MiBUagotLTIyMiBUSm0KLShkZXRlY3Rpb24pIDM2LjUyMjkgVGoKLS0yMjMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMjIgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIyMiBUSm0KLShvdGhlcikgMjAuNDczMSBUagotMTA4IDU4OC40OTMgVGQKLShhbm9tYWx5KSAzNC4zMTEyIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLVsxIDAgMCAxIDcyIDU4Ni4zMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjk4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTcyLjM4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTYyLjU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0RBVEFfRVJST1JfTUFHSUMpIDExMy41NzQgVGoKLVsxIDAgMCAxIDE4NS41NzQgNTYyLjU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE2LjA2NSAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTYxLjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggNTUwLjYzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBcykgMTEuMDY4NCBUagotLTMwNiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzA2IFRKbQotKHNwZWNpYWwpIDI3LjY2NjEgVGoKLS0zMDYgVEptCi0oY2FzZSkgMTcuMTQ1NiBUagotLTMwNyBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTkxLjg1MiA1NTAuNjM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5MS44NTIgLTU1MC42MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5MS44NTIgNTUwLjYzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9EQVRBX0VSUk9SKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAyNjkuNTYxIDU1MC42MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY5LjU2MSAtNTUwLjYzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY5LjU2MSA1NTAuNjM1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zMDYgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDYgVEptCi0oc29tZXRpbWVzKSA0Mi42MiBUagotLTMwNyBUSm0KLSh1c2VmKSAxNi41OTc3IFRqCi0xIFRKbQotKHVsKSA3Ljc1MDkgVGoKLS0zMDcgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNiBUSm0KLShrbm8pIDE0Ljk0MzkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMzA2IFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTMwNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTMwNiBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0zMDYgVEptCi0oZG9lcykgMTguMjYxNCBUagotMTA4IDUzOC42OCBUZAotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShzdGFydCkgMTcuMTU1NiBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb3JyZWN0KSAyNy42NTYyIFRqCi0tMjUwIFRKbQotKG1hZ2ljKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDI2MS41NjIgNTM4LjY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MS41NjIgLTUzOC42OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYxLjU2MiA1MzguNjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oJ0InKSAxNy45MzI3IFRqCi0tNjAwIFRKbQotKCdaJykgMTcuOTMyNyBUagotLTYwMCBUSm0KLSgnaCcpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDMyNy4zMTYgNTM4LjY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyNy4zMTYgLTUzOC42OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI3LjMxNiA1MzguNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkuKSA1LjgwODIgVGoKLVsxIDAgMCAxIDcyIDUzNi41MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zLjk4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTIyLjU3Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTEyLjc3NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotWzEgMCAwIDEgMTM3Ljc1MyA1MTIuNzc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNjguMjQ0MSAtMS4zMTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01MTEuNDY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDggNTAwLjgyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZXR1cm5lZCkgMzYuNTIyOSBUagotLTIzMyBUSm0KLShieSkgOS45NjI2IFRqCi1bMSAwIDAgMSAxNTkuMTIzIDUwMC44MjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU5LjEyMyAtNTAwLjgyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU5LjEyMyA1MDAuODIyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDIxOC44OTkgNTAwLjgyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTguODk5IC01MDAuODIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjEuMjE4IDUwMC44MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDIzNy45MjMgNTAwLjgyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzcuOTIzIC01MDAuODIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzcuOTIzIDUwMC44MjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDMwMy42NzYgNTAwLjgyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDMuNjc2IC01MDAuODIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDUuOTk1IDUwMC44MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2hlbikgMjEuNTc5IFRqCi0tMjMzIFRKbQotKHRoZXJlKSAxOS45MTUyIFRqCi0tMjMyIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjMzIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjMzIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjMzIFRKbQotKHJlYWRpbmcpIDI5Ljg3NzggVGoKLS0yMzIgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yMzMgVEptCi0od3JpdGluZykgMjguNzgyIFRqCi0tMjMzIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMzMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjMyIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLTEwOCA0ODguODY3IFRkCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTM4NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM1NyBUSm0KLShieSkgOS45NjI2IFRqCi1bMSAwIDAgMSAxNTguNTExIDQ4OC44NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjUxMSAtNDg4Ljg2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjUxMSA0ODguODY3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyNDIuMTk3IDQ4OC44NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQyLjE5NyAtNDg4Ljg2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ1Ljc1NSA0ODguODY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNjMuNjk4IDQ4OC44NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYzLjY5OCAtNDg4Ljg2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYzLjY5OCA0ODguODY3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotWzEgMCAwIDEgMzUzLjM2MiA0ODguODY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1My4zNjIgLTQ4OC44NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1Ni45MiA0ODguODY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcikgMTEuNjE2NCBUagotLTM1NyBUSm0KLShhdHRlbXB0cykgMzMuNzYzMyBUagotLTM1NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzU3IFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTM1NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzU3IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTM1NyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zNTggVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNTcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzU3IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0xMDggNDc2LjkxMiBUZAotKGluZGljYXRvcikgMzUuNDE3IFRqCi0tMjYwIFRKbQotKFwodml6LCkgMTcuOTgyNSBUagotWzEgMCAwIDEgMTY2LjYwMyA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Ni42MDMgLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ni42MDMgNDc2LjkxMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZXJyb3JcKGZcKSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyMjAuNDAxIDQ3Ni45MTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIwLjQwMSAtNDc2LjkxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIwLjQwMSA0NzYuOTEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjYwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjYwIFRKbQotKHNldC4pIDEzLjU1OTEgVGoKLS02NzkgVEptCi0oT24pIDEyLjE3NDMgVGoKLS0yNjAgVEptCi0ocmVjZWlwdCkgMjcuMTA4MiBUagotLTI2MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMzExLjIyMyA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxMS4yMjMgLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMS4yMjMgNDc2LjkxMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotWzEgMCAwIDEgMzc2Ljk3NiA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3Ni45NzYgLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3Ni45NzYgNDc2LjkxMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjYwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2MCBUSm0KLShjYWxsZXIpIDIyLjEyNjkgVGoKLS0yNjAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjYwIFRKbQotKGNvbnN1bHQpIDI4Ljc4MiBUagotWzEgMCAwIDEgNDgyLjA2OCA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Mi4wNjggLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Mi4wNjggNDc2LjkxMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShlcnJubykgMjkuODg3OCBUagotWzEgMCAwIDEgNTExLjk1NiA0NzYuOTEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS45NTYgLTQ3Ni45MTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxNC41NDYgNDc2LjkxMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQvb3IpIDI1LjQ1NDQgVGoKLVsxIDAgMCAxIDEwOCA0NjQuOTU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwOCAtNDY0Ljk1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDQ2NC45NTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0ocGVycm9yKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxNDMuODY1IDQ2NC45NTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQzLjg2NSAtNDY0Ljk1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ2LjM1NiA0NjQuOTU3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWNxdWlyZSkgMjkuMzE5OSBUagotLTI1MCBUSm0KLShvcGVyYXRpbmctc3lzdGVtKSA2OC42MjI0IFRqCi0tMjUwIFRKbQotKHNwZWNpXDAwMmMpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oaW5mb3JtYXRpb24pIDQ3LjA0MzQgVGoKLS0yNTAgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb2JsZW0uKSAzNS42OTYgVGoKLVsxIDAgMCAxIDcyIDQ2Mi44XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODQ5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDguODUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzkuMDU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1VORVhQRUNURURfRU9GKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAxNzMuNjE5IDQzOS4wNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDQuMTEgLTEuMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzNy43NDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwOCA0MjcuMDk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybmVkKSAzNi41MjI5IFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDE1OS40NjcgNDI3LjA5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuNDY3IC00MjcuMDk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTkuNDY3IDQyNy4wOTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjE5LjI0MiA0MjcuMDk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxOS4yNDIgLTQyNy4wOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMS43MzMgNDI3LjA5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aGVuKSAyMS41NzkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKFwwMDJuaXNoZXMpIDMwLjQ0NTcgVGoKLS0yNTAgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tMjUwIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShkZXRlY3RlZC4pIDM1LjY4NiBUagotWzEgMCAwIDEgNzIgNDI0Ljk0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTMuOTg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MTAuOTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MDEuMTk2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09VVEJVRkZfRlVMTCkgODkuNjYzNCBUagotWzEgMCAwIDEgMTYxLjY2NCA0MDEuMTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTIuMTU0NCAtMS4zMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzk5Ljg4Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA4IDM4OS4yNDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmV0dXJuZWQpIDM2LjUyMjkgVGoKLS0yNTggVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMTU5LjYzMiAzODkuMjQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1OS42MzIgLTM4OS4yNDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OS42MzIgMzg5LjI0MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MpIDE0My40NjEgVGoKLVsxIDAgMCAxIDMwMy4wOTQgMzg5LjI0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDMuMDk0IC0zODkuMjQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDUuNjY4IDM4OS4yNDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDMyMi42MjcgMzg5LjI0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjIuNjI3IC0zODkuMjQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjIuNjI3IDM4OS4yNDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MpIDE1NS40MTcgVGoKLVsxIDAgMCAxIDQ3OC4wNDQgMzg5LjI0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzguMDQ0IC0zODkuMjQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODAuNjE4IDM4OS4yNDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1OCBUSm0KLShpbmRpY2F0ZSkgMzEuNTQxNiBUagotLTI1OSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0xMDggMzc3LjI4NiBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShcMDAydCkgOC4zMDg4MSBUagotLTI1MCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMjUwIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZWQuKSAyNC42Mjc1IFRqCi1bMSAwIDAgMSA3MiAzNzUuMTI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMy45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1MS4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMyOC41ODUgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDMuMy4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oTG8pIDI1LjI0NDcgVGoKLTE1IFRKbQotKHctbGUpIDQwLjE4MDggVGoKLTE1IFRKbQotKHZlbCkgMjguNzE1MyBUagotLTI3OCBUSm0KLShpbnRlcmZhY2UpIDg2LjEwNDYgVGoKLVsxIDAgMCAxIDcyIDMyOC4zMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMxOC4zNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI5Ny45NjQgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy4xLikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAyOTcuOTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTI5Ny45NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMjk3Ljk2NCBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxODUuOTI2IFRqCi1bMSAwIDAgMSAzMDUuNzg1IDI5Ny45NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjMzLjc4NSAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQ0Ljc3OV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjg1MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuODUxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAxNSAxNQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTI5Ni41MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjc0Ljk2OSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDI3MS4zODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHR5cGVkZWYpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oc3RydWN0KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk4LjQ4NzkgNjk5LjY3NiBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLTEyNi42NDIgNjk3LjkzMyBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA2OTkuNjc2IFRkCi0obmV4dF9pbjspIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgNjg3LjcyMSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhdmFpbF9pbjspIDUzLjc5OCBUagotOTguNDg3OSA2NzUuNzY2IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHRvdGFsX2luX2xvMzI7KSA4My42ODU4IFRqCi05OC40ODc5IDY2My44MTEgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odG90YWxfaW5faGkzMjspIDgzLjY4NTggVGoKLTk4LjQ4NzkgNjM5LjkgVGQKLShjaGFyKSAyMy45MTAyIFRqCi0xMjYuNjQyIDYzOC4xNTcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzIuNjIgNjM5LjkgVGQKLShuZXh0X291dDspIDUzLjc5OCBUagotOTguNDg3OSA2MjcuOTQ1IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGF2YWlsX291dDspIDU5Ljc3NTYgVGoKLTk4LjQ4NzkgNjE1Ljk5IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHRvdGFsX291dF9sbzMyOykgODkuNjYzNCBUagotOTguNDg3OSA2MDQuMDM1IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHRvdGFsX291dF9oaTMyOykgODkuNjYzNCBUagotOTguNDg3OSA1ODAuMTI1IFRkCi0odm9pZCkgMjMuOTEwMiBUagotMTI2LjY0MiA1NzguMzgxIFRkCi0oKikgNS45Nzc1NiBUagotMTMyLjYyIDU4MC4xMjUgVGQKLShzdGF0ZTspIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNTU2LjIxNCBUZAotKHZvaWQpIDIzLjkxMDIgVGoKLTEyNi42NDIgNTU0LjQ3MSBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA1NTYuMjE0IFRkCi0oXCgpIDUuOTc3NTYgVGoKLTEzOC41OTcgNTU0LjQ3MSBUZAotKCopIDUuOTc3NTYgVGoKLTE0NC41NzUgNTU2LjIxNCBUZAotKGJ6YWxsb2NcKVwodm9pZCkgNzcuNzA4MyBUagotMjI2LjUyNyA1NTQuNDcxIFRkCi0oKikgNS45Nzc1NiBUagotMjMyLjUwNSA1NTYuMjE0IFRkCi0oLGludCxpbnRcKTspIDU5Ljc3NTYgVGoKLTk4LjQ4NzkgNTQ0LjI1OSBUZAotKHZvaWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLTEzMi42MiA1NDIuNTE2IFRkCi0oKikgNS45Nzc1NiBUagotMTM4LjU5NyA1NDQuMjU5IFRkCi0oYnpmcmVlXClcKHZvaWQpIDcxLjczMDcgVGoKLTIxNC41NzIgNTQyLjUxNiBUZAotKCopIDUuOTc3NTYgVGoKLTIyMC41NSA1NDQuMjU5IFRkCi0oLHZvaWQpIDI5Ljg4NzggVGoKLTI1NC42ODIgNTQyLjUxNiBUZAotKCopIDUuOTc3NTYgVGoKLTI2MC42NTkgNTQ0LjI1OSBUZAotKFwpOykgMTEuOTU1MSBUagotOTguNDg3OSA1MzIuMzA0IFRkCi0odm9pZCkgMjMuOTEwMiBUagotMTI2LjY0MiA1MzAuNTYgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzIuNjIgNTMyLjMwNCBUZAotKG9wYXF1ZTspIDQxLjg0MjkgVGoKLTg5Ljk5OTkgNTIwLjM0OSBUZAotKH0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnpfc3RyZWFtOykgNTkuNzc1NiBUagotODkuOTk5OSA0OTYuNDM4IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiel9zdHJlYW0pIDUzLjc5OCBUagotMjkyLjI4MSA0OTQuNjk1IFRkCi0oKikgNS45Nzc1NiBUagotMjk4LjI1OCA0OTYuNDM4IFRkCi0oc3RybSwpIDI5Ljg4NzggVGoKLTE5Ni4wOTkgNDg0LjQ4MyBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrLCkgODMuNjg1OCBUagotMTk2LjA5OSA0NzIuNTI4IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSwpIDU5Ljc3NTYgVGoKLTE5Ni4wOTkgNDYwLjU3MyBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgNDQ1LjAzMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MzUuMDY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjMuMTEzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByZXBhcmVzKSAzNC4zMDEyIFRqCi0tMzU2IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTM1NiBUSm0KLShjb21wcmVzc2lvbi4pIDUyLjg1MTYgVGoKLS0xMjU2IFRKbQotKFRoZSkgMTUuNDkxOCBUagotWzEgMCAwIDEgMjA5LjQwOSA0MjMuMTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwOS40MDkgLTQyMy4xMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwOS40MDkgNDIzLjExMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiel9zdHJlYW0pIDUzLjc5OCBUagotWzEgMCAwIDEgMjYzLjIwOCA0MjMuMTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2My4yMDggLTQyMy4xMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2Ni43NTQgNDIzLjExMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzdHJ1Y3R1cmUpIDM0Ljg1OTEgVGoKLS0zNTYgVEptCi0oaG9sZHMpIDIxLjU4OSBUagotLTM1NiBUSm0KLShhbGwpIDkuOTYyNiBUagotLTM1NiBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzU2IFRKbQotKHBlcnRhaW5pbmcpIDQwLjM5ODMgVGoKLS0zNTYgVEptCi0odG8pIDcuNzUwOSBUagotLTM1NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTYgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0zNTUgVEptCi0oYWN0aSkgMTQuMzg2IFRqCi0yNSBUSm0KLSh2aXR5KSAxNS41MDE4IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTI1NiBUSm0KLShBKSA3LjE5MyBUagotWzEgMCAwIDEgNzIgNDExLjE1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDExLjE1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDExLjE1OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiel9zdHJlYW0pIDUzLjc5OCBUagotWzEgMCAwIDEgMTI1Ljc5OCA0MTEuMTU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNS43OTggLTQxMS4xNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyOC41ODEgNDExLjE1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzdHJ1Y3R1cmUpIDM0Ljg1OTEgVGoKLS0yNzkgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjgwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjc5IFRKbQotKGFsbG9jYXRlZCkgMzUuOTY1IFRqCi0tMjc5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjgwIFRKbQotKGluaXRpYWxpc2VkKSAzOS4zMDI1IFRqCi0tMjc5IFRKbQotKHByaW9yKSAxOS4zNjczIFRqCi0tMjc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjgwIFRKbQotKGNhbGwuKSAxNi44NzY2IFRqCi0tNzk2IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI3OSBUSm0KLShcMDAyZWxkcykgMjEuNTg5IFRqCi0tMjc5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MzEuOTM5IDQxMS4xNThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMxLjkzOSAtNDExLjE1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMxLjkzOSA0MTEuMTU4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA0ODUuNzM4IDQxMS4xNThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDg1LjczOCAtNDExLjE1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDg4LjUyIDQxMS4xNTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29tcHJpc2UpIDM2LjUyMjkgVGoKLS0yNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiAzOTkuMjAzIFRkCi0oZW50aXJldHkpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHVzZXIpIDE2LjU5NzcgVGoKLTIwIFRKbQotKC12aXNpYmxlKSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKGRhdGEuKSAxOS4wODgzIFRqCi1bMSAwIDAgMSAyMDQuNDIyIDM5OS4yMDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA0LjQyMiAtMzk5LjIwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA0LjQyMiAzOTkuMjAzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHN0YXRlKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMzQuMzEgMzk5LjIwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuMzEgLTM5OS4yMDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNi44IDM5OS4yMDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShwb2ludGVyKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJpKSAxMS4wNjg0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGF0ZSkgMTEuNjE2NCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHN0cnVjdHVyZXMpIDM4LjczNDYgVGoKLS0yNTAgVEptCi0ocmVxdWlyZWQpIDMzLjE5NTQgVGoKLS0yNTAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjUwIFRKbQotKGNvbXByZXNzaW9uLikgNTIuODUxNiBUagotWzEgMCAwIDEgNzIgMzk3LjA0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzg3LjA4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShDdXN0b20pIDMxLjAwMzYgVGoKLS0zNzIgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMzcyIFRKbQotKGFsbG9jYXRvcnMpIDM4LjczNDYgVGoKLS0zNzIgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMzcyIFRKbQotKHN1cHBvcnRlZCwpIDQxLjc4MzEgVGoKLS00MDMgVEptCi0odmlhKSAxMi4xNzQzIFRqCi0tMzcyIFRKbQotKFwwMDJlbGRzKSAyMS41ODkgVGoKLVsxIDAgMCAxIDI4OC45MDggMzc3LjI4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODguOTA4IC0zNzcuMjg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODguOTA4IDM3Ny4yODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotWzEgMCAwIDEgMzMwLjc1MSAzNzcuMjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMC43NTEgLTM3Ny4yODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMC43NTEgMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMzcuMjUzIDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM3LjI1MyAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM3LjI1MyAzNzcuMjg1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZnJlZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMzczLjExOCAzNzcuMjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3My4xMTggLTM3Ny4yODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3My4xMTggMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tNDAzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzOTcuNzE0IDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzk3LjcxNCAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk3LjcxNCAzNzcuMjg1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9wYXF1ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNDMzLjU3OSAzNzcuMjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMy41NzkgLTM3Ny4yODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMy41NzkgMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTM1MyBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0zNzIgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi1bMSAwIDAgMSA0OTMuNzgyIDM3Ny4yODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjc4MiAtMzc3LjI4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkzLjc4MiAzNzcuMjg1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9wYXF1ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNTI5LjY0OCAzNzcuMjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyOS42NDggLTM3Ny4yODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzMy4zNTUgMzc3LjI4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotNzIgMzY1LjMzIFRkCi0ocGFzc2VkKSAyNi41NjAzIFRqCi0tMzA2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDYgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA2IFRKbQotKFwwMDJyc3QpIDE1LjUwMTggVGoKLS0zMDYgVEptCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudCkgMjkuODg3OCBUagotLTMwNiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzA2IFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMzA2IFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMzA1IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDI1My45NDEgMzY1LjMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My45NDEgLTM2NS4zM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUzLjk0MSAzNjUuMzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotWzEgMCAwIDEgMjk1Ljc4NCAzNjUuMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk1Ljc4NCAtMzY1LjMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTguODMyIDM2NS4zMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzE2LjI2NiAzNjUuMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE2LjI2NiAtMzY1LjMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTYuMjY2IDM2NS4zMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemZyZWUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDM1Mi4xMzIgMzY1LjMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Mi4xMzIgLTM2NS4zM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzUyLjEzMiAzNjUuMzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTMyMCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0zMDYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDYgVEptCi0ob3RoZXJ3aXNlKSAzOC43MzQ2IFRqCi0tMzA2IFRKbQotKGlnbm9yZWQpIDMwLjQzNTcgVGoKLS0zMDYgVEptCi0oYnkpIDkuOTYyNiBUagotLTMwNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTk1NSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLTcyIDM1My4zNzUgVGQKLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDg5LjQzMDkgMzUzLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04OS40MzA5IC0zNTMuMzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04OS40MzA5IDM1My4zNzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotLTYwMCBUSm0KLShcKCkgNS45Nzc1NiBUagotLTYwMCBUSm0KLShvcGFxdWUsKSA0MS44NDI5IFRqCi0tNjAwIFRKbQotKG4sKSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKG0pIDUuOTc3NTYgVGoKLS02MDAgVEptCi0oXCkpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDIzMi44OTMgMzUzLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzIuODkzIC0zNTMuMzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzUuOTM4IDM1My4zNzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDYgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBlY3RlZCkgMzAuOTgzNyBUagotLTMwNSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzA2IFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTMwNiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzA1IFRKbQotKHBvaW50ZXIpIDI4LjIyNCBUagotWzEgMCAwIDEgMzYwLjMgMzUzLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjAuMyAtMzUzLjM3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYwLjMgMzUzLjM3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShwKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAzNjYuMjc3IDM1My4zNzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzY2LjI3NyAtMzUzLjM3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY5LjMyMiAzNTMuMzc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDM4MC4xMTggMzUzLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODAuMTE4IC0zNTMuMzc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODAuMTE4IDM1My4zNzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obikgNS45Nzc1NiBUagotMzkyLjA3MyAzNTEuNjMxIFRkCi0oKikgNS45Nzc1NiBUagotNDA0LjAyOSAzNTMuMzc1IFRkCi0obSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNDEwLjAwNiAzNTMuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMC4wMDYgLTM1My4zNzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMy4wNTEgMzUzLjM3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcykgMjEuMDMxIFRqCi0tMzA2IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzA1IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTMyMCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNTA0LjEzNSAzNTMuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNC4xMzUgLTM1My4zNzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNC4xMzUgMzUzLjM3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemZyZWUpIDM1Ljg2NTQgVGoKLTcyIDM0MS40MiBUZAotKFwoKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKG9wYXF1ZSwpIDQxLjg0MjkgVGoKLS02MDAgVEptCi0ocCkgNS45Nzc1NiBUagotLTYwMCBUSm0KLShcKSkgNS45Nzc1NiBUagotWzEgMCAwIDEgMTQ5LjcwOSAzNDEuNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjcwOSAtMzQxLjQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTIuMTk5IDM0MS40MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oZnJlZSkgMTUuNDgxOSBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMzM5LjI2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI5LjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMxOS41MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yODAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjgwIFRKbQotKGRvbicpIDE4LjI2MTQgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI4MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjgwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yODAgVEptCi0oY3VzdG9tKSAyOC43ODIgVGoKLS0yODAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjc5IFRKbQotKGFsbG9jYXRvcikgMzQuODU5MSBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTI4OCBUSm0KLShzZXQpIDExLjA2ODQgVGoKLVsxIDAgMCAxIDI5OS45IDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk5LjkgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OS45IDMxOS41MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotWzEgMCAwIDEgMzQxLjc0MyAzMTkuNTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0MS43NDMgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0MS43NDMgMzE5LjUwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzNDcuMDk2IDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQ3LjA5NiAtMzE5LjUwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ3LjA5NiAzMTkuNTAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZnJlZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMzgyLjk2MSAzMTkuNTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4Mi45NjEgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4NS43NDkgMzE5LjUwMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDAyLjkyMyAzMTkuNTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwMi45MjMgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwMi45MjMgMzE5LjUwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShvcGFxdWUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQzOC43ODggMzE5LjUwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzguNzg4IC0zMTkuNTAyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDEuNTc2IDMxOS41MDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgNDUyLjExNSAzMTkuNTAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1Mi4xMTUgLTMxOS41MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1Mi4xMTUgMzE5LjUwMiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShOVUxMKSAyMy45MTAyIFRqCi1bMSAwIDAgMSA0NzYuMDI1IDMxOS41MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDc2LjAyNSAtMzE5LjUwMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc2LjAyNSAzMTkuNTAyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yODAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLTcyIDMwNy41NDcgVGQKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHRoZW4pIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotWzEgMCAwIDEgMTc2LjMxOCAzMDcuNTQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ni4zMTggLTMwNy41NDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni4zMTggMzA3LjU0NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShtYWxsb2MpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDIxMi4xODMgMzA3LjU0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTIuMTgzIC0zMDcuNTQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTQuNjc0IDMwNy41NDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLykgMi43Njk2IFRqCi1bMSAwIDAgMSAyMTkuOTM0IDMwNy41NDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE5LjkzNCAtMzA3LjU0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjE5LjkzNCAzMDcuNTQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZyZWUpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDI0My44NDQgMzA3LjU0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDMuODQ0IC0zMDcuNTQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDYuMzM1IDMwNy41NDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocm91dGluZXMuKSAzNC41OTAxIFRqCi1bMSAwIDAgMSA3MiAzMDcuMzkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTcuNDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI4NS42MjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQmVmb3JlKSAyNy4xMDgyIFRqCi0tMzYyIFRKbQotKGNhbGxpbmcpIDI3LjExODIgVGoKLVsxIDAgMCAxIDEzMy40MzggMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzMuNDM4IC0yODUuNjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzMuNDM4IDI4NS42MjkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAyNDEuMDM1IDI4NS42MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQxLjAzNSAtMjg1LjYyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQxLjAzNSAyODUuNjI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zOTAgVEptCi0oXDAwMmVsZHMpIDIxLjU4OSBUagotWzEgMCAwIDEgMjcyLjYwNiAyODUuNjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi42MDYgLTI4NS42MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Mi42MDYgMjg1LjYyOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemFsbG9jKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzMTQuNDQ5IDI4NS42MjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE0LjQ0OSAtMjg1LjYyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE0LjQ0OSAyODUuNjI5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMyMC44MjUgMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjAuODI1IC0yODUuNjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjAuODI1IDI4NS42MjkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnpmcmVlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzNTYuNjkgMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTYuNjkgLTI4NS42MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2MC4yOTYgMjg1LjYyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzc4LjI4OCAyODUuNjI5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3OC4yODggLTI4NS42MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3OC4yODggMjg1LjYyOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShvcGFxdWUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQxNC4xNTQgMjg1LjYyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTQuMTU0IC0yODUuNjI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTcuNzYgMjg1LjYyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zNjIgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zNjIgVEptCi0oXDAwMmxsZWQpIDIwLjQ4MzEgVGoKLS0zNjIgVEptCi0oYXBwcm9wcmlhdGVseSkgNTMuMTIwNiBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotNzIgMjczLjY3NCBUZAotKGFzKSA4LjI5ODg1IFRqCi0tMzIyIFRKbQotKGp1c3QpIDE0LjM5NiBUagotLTMyMyBUSm0KLShkZXNjcmliZWQuKSA0MC42NjczIFRqCi0tMTA1NSBUSm0KLShVcG9uKSAyMi4xMzY5IFRqCi0tMzIyIFRKbQotKHJldHVybiwpIDI2LjI4MTMgVGoKLS0zNDEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzIyIFRKbQotKGludGVybmFsKSAzMC40MzU3IFRqCi0tMzIzIFRKbQotKHN0YXRlKSAxOC4yNjE0IFRqCi0tMzIyIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0zMjMgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMyMiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMzIzIFRKbQotKGFsbG9jYXRlZCkgMzUuOTY1IFRqCi0tMzIyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzIzIFRKbQotKGluaXRpYWxpc2VkLCkgNDEuNzkzMSBUagotLTM0MCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDU5LjgwMSAyNzMuNjc0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1OS44MDEgLTI3My42NzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OS44MDEgMjczLjY3NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh0b3RhbF9pbl9sbzMyKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSA1MzcuNTA5IDI3My42NzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM3LjUwOSAtMjczLjY3NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM3LjUwOSAyNzMuNjc0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDI2MS43MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI2MS43MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI2MS43MTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfaW5faGkzMikgNzcuNzA4MyBUagotWzEgMCAwIDEgMTQ5LjcwOSAyNjEuNzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0OS43MDkgLTI2MS43MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0OS43MDkgMjYxLjcxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxNTUuMDA2IDI2MS43MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1LjAwNiAtMjYxLjcxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU1LjAwNiAyNjEuNzE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRvdGFsX291dF9sbzMyKSA4My42ODU4IFRqCi1bMSAwIDAgMSAyMzguNjkyIDI2MS43MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM4LjY5MiAtMjYxLjcxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQxLjQzNSAyNjEuNzE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNTguNTY0IDI2MS43MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU4LjU2NCAtMjYxLjcxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU4LjU2NCAyNjEuNzE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRvdGFsX291dF9oaTMyKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzNDIuMjUgMjYxLjcxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuMjUgLTI2MS43MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0NC45OTQgMjYxLjcxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjc1IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNzYgVEptCi0oYmVlbikgMTguODA5NCBUagotLTI3NSBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0yNzUgVEptCi0odG8pIDcuNzUwOSBUagotLTI3NiBUSm0KLSh6ZXJvLikgMTkuNjM2MyBUagotLTc3MiBUSm0KLShUaGVzZSkgMjMuNzkwNyBUagotLTI3NSBUSm0KLShmb3VyKSAxNi41OTc3IFRqCi0tMjc2IFRKbQotKFwwMDJlbGRzKSAyMS41ODkgVGoKLS0yNzUgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi03MiAyNDkuNzYzIFRkCi0odXNlZCkgMTguMjYxNCBUagotLTM0MCBUSm0KLShieSkgOS45NjI2IFRqCi0tMzM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzM5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNDAgVEptCi0oaW5mb3JtKSAyNy4xMTgyIFRqCi0tMzM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MCBUSm0KLShjYWxsZXIpIDIyLjEyNjkgVGoKLS0zMzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNDAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzM5IFRKbQotKHRvdGFsKSAxNy43MTM1IFRqCi0tMzQwIFRKbQotKGFtb3VudCkgMjkuODg3OCBUagotLTMzOSBUSm0KLShvZikgOC4yOTg4NSBUagotLTM0MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzQwIFRKbQotKHBhc3NlZCkgMjYuNTYwMyBUagotLTMzOSBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMzQwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzM5IFRKbQotKG91dCkgMTIuNzMyMiBUagotLTM0MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNDAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTM2MiBUSm0KLShyZXNwZWN0aSkgMzAuOTgzNyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHkpIDEyLjE3NDMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLTcyIDIzNy44MDggVGQKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0zNzYgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzc3IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTM3NiBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS0zNzYgVEptCi0odG8pIDcuNzUwOSBUagotLTM3NyBUSm0KLShjaGFuZ2UpIDI4LjIxNDEgVGoKLS0zNzYgVEptCi0odGhlbS4pIDIyLjQxNTkgVGoKLS0xMzc4IFRKbQotKEFzKSAxMS4wNjg0IFRqCi0tMzc3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzc2IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMzc3IFRKbQotKDEuMCwpIDE0Ljk0MzkgVGoKLS00MDggVEptCi0oNjQtYml0KSAyMy44MDA3IFRqCi0tMzc2IFRKbQotKGNvdW50cykgMjYuMDEyMyBUagotLTM3NiBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zNzcgVEptCi0obWFpbnRhaW5lZCwpIDQ2Ljc2NDQgVGoKLS00MDggVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbikgOS40MDQ2OSBUagotLTM3NiBUSm0KLShvbikgOS45NjI2IFRqCi0tMzc2IFRKbQotKDMyLWJpdCkgMjMuODAwNyBUagotLTM3NyBUSm0KLShwbGF0Zm9ybXMsKSA0MC42NzczIFRqCi03MiAyMjUuODUzIFRkCi0odXNpbmcpIDIxLjU4OSBUagotLTM3MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDExMy4xNDggMjI1Ljg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuMTQ4IC0yMjUuODUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTMuMTQ4IDIyNS44NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oX2hpMzIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE0My4wMzYgMjI1Ljg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuMDM2IC0yMjUuODUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDYuNzI5IDIyNS44NTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDAwMmVsZHMpIDIxLjU4OSBUagotLTM3MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzcwIFRKbQotKHN0b3JlKSAxOS4zNjczIFRqCi0tMzcxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM3MSBUSm0KLSh1cHBlcikgMjIuNjg0OCBUagotLTM3MCBUSm0KLSgzMikgOS45NjI2IFRqCi0tMzcxIFRKbQotKGJpdHMpIDE0LjM5NiBUagotLTM3MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTM3MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzEgVEptCi0oY291bnQuKSAyNC42Mjc1IFRqCi0tMTM0NCBUSm0KLShTbywpIDEzLjAxMTIgVGoKLS00MDAgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzcxIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhhbXBsZSwpIDMxLjgyMDUgVGoKLS00MDEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzcxIFRKbQotKHRvdGFsKSAxNy43MTM1IFRqCi0tMzcwIFRKbQotKGFtb3VudCkgMjkuODg3OCBUagotLTM3MSBUSm0KLShvZikgOC4yOTg4NSBUagotLTM3MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMzcxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zNzEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLVsxIDAgMCAxIDcyIDIxMy44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIxMy44OThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIxMy44OTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oXCh0b3RhbF9pbl9oaTMyKSA4My42ODU4IFRqCi0tNjAwIFRKbQotKDw8KSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKDMyXCkpIDE3LjkzMjcgVGoKLS02MDAgVEptCi0oKykgNS45Nzc1NiBUagotLTYwMCBUSm0KLSh0b3RhbF9pbl9sbzMyKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAyOTMuMTcxIDIxMy44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkzLjE3MSAtMjEzLjg5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjkzLjE3MSAyMTMuODk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDIxMi41ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwMi42MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5MS45OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShhcmFtZXRlcikgMzQuODQ5MiBUagotWzEgMCAwIDEgMTE1LjM2NyAxOTEuOThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE1LjM2NyAtMTkxLjk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTUuMzY3IDE5MS45OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShibG9ja1NpemUxMDBrKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxOTMuMDc2IDE5MS45OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTMuMDc2IC0xOTEuOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5Ni4yMDQgMTkxLjk4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNwZWNpXDAwMmVzKSAzNC4zMTEyIFRqCi0tMzE0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMxNCBUSm0KLShibG9jaykgMjIuMTM2OSBUagotLTMxNCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMzE0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMTQgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMTQgVEptCi0odXNlZCkgMTguMjYxNCBUagotLTMxNCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zMTQgVEptCi0oY29tcHJlc3Npb24uKSA1Mi44NTE2IFRqCi0tMTAwNCBUSm0KLShJdCkgNi4wODcxNSBUagotLTMxNCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zMTQgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zMTUgVEptCi0oYSkgNC40MjMzOSBUagotLTMxNCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLS0zMTQgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotLTMxNCBUSm0KLSgxKSA0Ljk4MTMgVGoKLTcyIDE4MC4wMjUgVGQKLShhbmQpIDE0LjM4NiBUagotLTI4OSBUSm0KLSg5KSA0Ljk4MTMgVGoKLS0yODkgVEptCi0oaW5jbHVzaSkgMjYuNTcwMyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlLCkgNi45MTQwNCBUagotLTI5OSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oYWN0dWFsKSAyMy43OTA3IFRqCi0tMjg5IFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjg5IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0yODkgVEptCi0odXNlZCkgMTguMjYxNCBUagotLTI4OSBUSm0KLShpcykgNi42NDUwNSBUagotLTI4OSBUSm0KLSgxMDAwMDApIDI5Ljg4NzggVGoKLS0yODkgVEptCi0oeCkgNC45ODEzIFRqCi0tMjg5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI4OSBUSm0KLShcMDAyZ3VyZS4pIDI1LjczMzQgVGoKLS04NTQgVEptCi0oOSkgNC45ODEzIFRqCi0tMjkwIFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKGJlc3QpIDE2LjA0OTcgVGoKLS0yODkgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yODkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjg5IFRKbQotKHRhaykgMTIuMTc0MyBUagotMTAgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yODkgVEptCi0obW9zdCkgMTkuMzc3MyBUagotNzIgMTY4LjA3IFRkCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxNjUuOTEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNTUuOTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE0Ni4xNTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUCkgNS41MzkyMSBUagotMTUgVEptCi0oYXJhbWV0ZXIpIDM0Ljg0OTIgVGoKLVsxIDAgMCAxIDExNS4wOTUgMTQ2LjE1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTUuMDk1IC0xNDYuMTUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTUuMDk1IDE0Ni4xNTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odmVyYm9zaXR5KSA1My43OTggVGoKLVsxIDAgMCAxIDE2OC44OTMgMTQ2LjE1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjguODkzIC0xNDYuMTUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzEuNzUgMTQ2LjE1MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yODcgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODYgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMjg3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODcgVEptCi0oYSkgNC40MjMzOSBUagotLTI4NyBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yODYgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotLTI4NyBUSm0KLSgwKSA0Ljk4MTMgVGoKLS0yODcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODcgVEptCi0oNCkgNC45ODEzIFRqCi0tMjg2IFRKbQotKGluY2x1c2kpIDI2LjU3MDMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZS4pIDYuOTE0MDQgVGoKLS04NDEgVEptCi0oMCkgNC45ODEzIFRqCi0tMjg2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjg3IFRKbQotKHNpbGVudCwpIDI0LjA3OTYgVGoKLS0yOTYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODcgVEptCi0oZ3JlYXRlcikgMjcuNjU2MiBUagotLTI4NyBUSm0KLShudW1iZXJzKSAzNC4zMTEyIFRqCi0tMjg2IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotNzIgMTM0LjE5NyBUZAotKGluY3JlYXNpbmdseSkgNDguNjk3MiBUagotLTM0MiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyYm9zZSkgMjYuMDAyNCBUagotLTM0MiBUSm0KLShtb25pdG9yaW5nL2RlYikgNjEuNDM5NCBUagotMjAgVEptCi0odWdnaW5nKSAyNy42NzYxIFRqCi0tMzQyIFRKbQotKG91dHB1dC4pIDI3Ljk1NTEgVGoKLS0xMTczIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMzQzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0MiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzQyIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTM0MiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMzQyIFRKbQotKGNvbXBpbGVkKSAzNy4wODA4IFRqCi0tMzQyIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ0Ni40MjkgMTM0LjE5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDYuNDI5IC0xMzQuMTk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDYuNDI5IDEzNC4xOTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLURCWl9OT19TVERJTykgNzcuNzA4MyBUagotWzEgMCAwIDEgNTI0LjEzOCAxMzQuMTk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyNC4xMzggLTEzNC4xOTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyNC4xMzggMTM0LjE5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzQyIFRKbQotKG5vKSA5Ljk2MjYgVGoKLTcyIDEyMi4yNDIgVGQKLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKGFwcGVhcikgMjYuNTUwMyBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyYm9zaXR5KSAzMi4wOTk1IFRqCi0tMjUwIFRKbQotKHNldHRpbmcuKSAyOS4wNjA5IFRqCi1bMSAwIDAgMSA3MiAxMjAuMDg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTAuMTIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMDAuMzI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFApIDUuNTM5MjEgVGoKLTE1IFRKbQotKGFyYW1ldGVyKSAzNC44NDkyIFRqCi1bMSAwIDAgMSAxMTYuNjE5IDEwMC4zMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE2LjYxOSAtMTAwLjMyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE2LjYxOSAxMDAuMzI0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDE3Ni4zOTQgMTAwLjMyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzYuMzk0IC0xMDAuMzI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODAuNzc1IDEwMC4zMjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY29udHJvbHMpIDMyLjA5OTUgVGoKLS00NDAgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS00MzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDQwIFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tNDQwIFRKbQotKHBoYXNlKSAyMi42ODQ4IFRqCi0tNDM5IFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS00NDAgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tNDM5IFRKbQotKHByZXNlbnRlZCkgMzguMTc2NyBUagotLTQ0MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDQwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0KSAxNC45NDM5IFRqCi0tNDM5IFRKbQotKGNhc2UsKSAxOS42MzYzIFRqCi0tNDg3IFRKbQotKGhpZ2hseSkgMjUuNDY0NCBUagotNzIgODguMzY4NiBUZAotKHJlcGV0aXRpKSAyOC4yMjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSwpIDYuOTE0MDQgVGoKLS00MzMgVEptCi0oaW5wdXQpIDIwLjQ4MzEgVGoKLS0zOTYgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLS0xNDk2IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMzk2IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMzk2IFRKbQotKHJ1bnMpIDE3LjE1NTYgVGoKLS0zOTcgVEptCi0oaSkgMi43Njk2IFRqCi0xIFRKbQotKG50bykgMTIuNzMyMiBUagotLTM5NyBUSm0KLShkaWYpIDExLjA2ODQgVGoKLTI1IFRKbQotKFwwMDJjdWx0aWVzKSAzMS41NTE2IFRqCi0tMzk2IFRKbQotKGNhdXNlZCkgMjcuMTA4MiBUagotLTM5NiBUSm0KLShieSkgOS45NjI2IFRqCi0tMzk2IFRKbQotKHJlcGV0aXRpKSAyOC4yMjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTM5NiBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTQzMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zOTcgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM5NiBUSm0KLShzd2l0Y2hlcykgMzQuMzExMiBUagotLTM5NiBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi1bMSAwIDAgMSA3MiA1MC44NTE4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuODUxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE2IDE2Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTUgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS0yNTQgVEptCi0oc29ydGluZykgMjcuNjc2MSBUagotLTI1NSBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yNTQgVEptCi0odG8pIDcuNzUwOSBUagotLTI1NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjU1IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFsbGJhY2spIDI4Ljc3MiBUagotLTI1NCBUSm0KLShhbGdvcml0aG0uKSA0MS4yMzUyIFRqCi0tNjQ4IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI1NSBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhbGxiYWNrKSAyOC43NzIgVGoKLS0yNTQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTUgVEptCi0oc2xvKSAxMS42MjY0IFRqCi0yNSBUSm0KLSh3ZXIpIDE0LjkzMzkgVGoKLS0yNTUgVEptCi0odGhhbikgMTcuMTU1NiBUagotLTI1NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTUgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS0yNTQgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjU1IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTUgVEptCi0ocGVyaGFwcykgMzAuOTgzNyBUagotNzIgNjk4LjA4MiBUZAotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWN0b3IpIDE5LjkxNTIgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhyZWUsKSAyMi40MDU5IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhbCkgNy4xOTMgVGoKLTEwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShyZWFzb25hYmx5KSA0My4xNTggVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0obm8pIDkuOTYyNiBUagotLTI1MCBUSm0KLShtYXR0ZXIpIDI1LjQ1NDQgVGoKLS0yNTAgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNTAgVEptCi0oYmFkKSAxNC4zODYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGlucHV0LikgMjIuOTczOCBUagotWzEgMCAwIDEgNzIgNjk1LjkyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjg1Ljk2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjc2LjE2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShMbykgMTEuMDY4NCBUagotMjUgVEptCi0od2VyKSAxNC45MzM5IFRqCi0tMjQwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLS0yMzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDEzOC40MjEgNjc2LjE2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzguNDIxIC02NzYuMTY1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzguNDIxIDY3Ni4xNjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0od29ya0ZhY3RvcikgNTkuNzc1NiBUagotWzEgMCAwIDEgMTk4LjE5NyA2NzYuMTY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC4xOTcgLTY3Ni4xNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMC41ODUgNjc2LjE2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWR1Y2UpIDI2LjU1MDMgVGoKLS0yNDAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjM5IFRKbQotKGFtb3VudCkgMjkuODg3OCBUagotLTI0MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI0MCBUSm0KLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oZm9ydCkgMTQuMzg2IFRqCi0tMjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MCBUSm0KLShzdGFuZGFyZCkgMzMuNzUzMyBUagotLTI0MCBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yMzkgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI0MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGVuZCkgMjQuMzQ4NiBUagotLTI0MCBUSm0KLShiZWZvcmUpIDI1LjQ0NDUgVGoKLS0yNDAgVEptCi0ocmVzb3J0aW5nKSAzNS40MTcgVGoKLS0yMzkgVEptCi0odG8pIDcuNzUwOSBUagotLTI0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDY2NC4yMSBUZAotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFsbGJhY2suKSAzMS4yNjI2IFRqCi0tNjE4IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI0OCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNDcgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMjQ4IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI0NyBUSm0KLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLS0yNDggVEptCi0oY2FyZWZ1bGx5OykgMzguMTc2NyBUagotLTI0OCBUSm0KLSh0b28pIDEyLjczMjIgVGoKLS0yNDggVEptCi0obG8pIDcuNzUwOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNDggVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNDcgVEptCi0obWFuKSAxNy4xNTU2IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNDggVEptCi0oaW5wdXRzKSAyNC4zNTg2IFRqCi0tMjQ4IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNDcgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNDggVEptCi0oaGFuZGxlZCkgMzEuNTQxNiBUagotLTI0NyBUSm0KLShieSkgOS45NjI2IFRqCi0tMjQ4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NyBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhbGxiYWNrKSAyOC43NzIgVGoKLS0yNDggVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi03MiA2NTIuMjU1IFRkCi0oYW5kKSAxNC4zODYgVGoKLS0zMDggVEptCi0oc28pIDguODU2NzUgVGoKLS0zMDggVEptCi0oY29tcHJlc3MpIDM3LjYyODcgVGoKLS0zMDggVEptCi0ocmF0aGVyKSAyMy4yMzI4IFRqCi0tMzA5IFRKbQotKHNsbykgMTEuNjI2NCBUagotMjUgVEptCi0od2x5KSAxNC45NDM5IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzIyIFRKbQotKHRvbykgMTIuNzMyMiBUagotLTMwOSBUSm0KLShoaWdoLCkgMjAuMjA0MiBUagotLTMyMiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMwOCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMzA5IFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJhZ2UtdG8tdykgNDMuMTQ4IFRqCi0xMCBUSm0KLShvcnN0KSAxNC45NDM5IFRqCi0tMzA4IFRKbQotKGNhc2UpIDE3LjE0NTYgVGoKLS0zMDggVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0zMDggVEptCi0odGltZXMpIDIxLjU4OSBUagotLTMwOCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0zMDggVEptCi0oYmVjb21lKSAzMC45ODM3IFRqCi0tMzA5IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5KSAxMi43MjIyIFRqCi0tMzA4IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UuKSAxMS44OTUzIFRqCi03MiA2NDAuMyBUZAotKFRoZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKDMwKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShyZWFzb25hYmxlKSA0Mi42MDAxIFRqCi0tMjUwIFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHZpb3VyKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0od2lkZSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLShyYW5nZSkgMjIuMTI2OSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjaXJjdW1zdGFuY2VzLikgNTguOTI4OCBUagotWzEgMCAwIDEgNzIgNjM4LjE0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjI4LjE4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjE4LjM4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKHJhbmdlKSAyMi4xMjY5IFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0oMCkgNC45ODEzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oMjUwKSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGluY2x1c2kpIDI2LjU3MDMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZS4pIDYuOTE0MDQgVGoKLS02MjAgVEptCi0oMCkgNC45ODEzIFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oc3BlY2lhbCkgMjcuNjY2MSBUagotLTI1MCBUSm0KLShjYXNlLCkgMTkuNjM2MyBUagotLTI1MCBUSm0KLShlcXVpKSAxNy4xNTU2IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsZW50KSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oZGVmKSAxMi43MjIyIFRqCi0xMCBUSm0KLShhdWx0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSgzMC4pIDEyLjQ1MzMgVGoKLVsxIDAgMCAxIDcyIDYxNi4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYwNi4yNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU5Ni40NjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTm90ZSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShnZW5lcmF0ZWQpIDM4LjcyNDYgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0ocmUpIDcuNzQwOTQgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhcmRsZXNzKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHdoZXRoZXIpIDMyLjA4OTUgVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhbGxiYWNrKSAyOC43NzIgVGoKLS0yNTAgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHVzZWQuKSAyMC43NTIxIFRqCi1bMSAwIDAgMSA3MiA1OTQuMzA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01ODQuMzQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NzQuNTQ5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEJlKSAxMS4wNjg0IFRqCi0tMzAzIFRKbQotKGEpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zMDMgVEptCi0oYWxzbykgMTYuMDQ5NyBUagotLTMwMyBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzAzIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTMwNCBUSm0KLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLS0zMDMgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMzAzIFRKbQotKGRpc2FwcGVhcikgMzguMTc2NyBUagotLTMwMyBUSm0KLShlbnRpcmVseSkgMzAuNDM1NyBUagotLTMwMyBUSm0KLShpbikgNy43NTA5IFRqCi0tMzAzIFRKbQotKGZ1dHVyZSkgMjMuNzkwNyBUagotLTMwMyBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyc2lvbnMpIDI4LjIyNCBUagotLTMwMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTMwMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDQgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTkzOCBUSm0KLShJbikgOC4yOTg4NSBUagotLTMwMyBUSm0KLShwcmluY2lwbGUpIDM1LjQxNyBUagotLTMwMyBUSm0KLShpdCkgNS41MzkyMSBUagotLTMwNCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zMDMgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTcyIDU2Mi41OTQgVGQKLShwb3NzaWJsZSkgMzIuNjU3NCBUagotLTI3MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcwIFRKbQotKGRlKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh2aXNlKSAxNi4wNDk3IFRqCi0tMjcwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNzAgVEptCi0oZ29vZCkgMTkuOTI1MiBUagotLTI3MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXkpIDkuNDA0NjkgVGoKLS0yNzAgVEptCi0odG8pIDcuNzUwOSBUagotLTI3MSBUSm0KLShhdXRvbWF0KSAzMi4wOTk1IFRqCi0xIFRKbQotKGljYWxseSkgMjIuMTM2OSBUagotLTI3MSBUSm0KLShjaG9vc2UpIDI3LjY2NjEgVGoKLS0yNzAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNzAgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjcwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzAgVEptCi0odXNlLikgMTUuNzcwOCBUagotLTc0MCBUSm0KLShTdWNoKSAxOS45MjUyIFRqCi0tMjcwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNzEgVEptCi0obSkgNy43NTA5IFRqCi0xIFRKbQotKGVjaGFuaXNtKSAzNy42Mjg3IFRqCi0tMjcxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvdWxkKSAxNy43MTM1IFRqCi0tMjcwIFRKbQotKHJlbmRlcikgMjUuNDQ0NSBUagotLTI3MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDU1MC42MzkgVGQKLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLS0yNTAgVEptCi0ob2Jzb2xldGUuKSAzNS42OTYgVGoKLVsxIDAgMCAxIDcyIDU0OC40ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUzOC41MjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUyOC43MjIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiA1MjguNjIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTQ0LjQ1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxNDMuNDYyIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTM5Ljg3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTUxOS4yNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUxOS4yNTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfQ09ORklHX0VSUk9SKSA4OS42NjM0IFRqCi05OC40ODc5IDUwNy4zMDMgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obGlicmFyeSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShtaXMtY29tcGlsZWQpIDcxLjczMDcgVGoKLTkwIDQ5NS4zNDggVGQKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSA0ODMuMzkyIFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDQ3MS40MzcgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShibG9ja1NpemUpIDUzLjc5OCBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDEpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYmxvY2tTaXplKSA1My43OTggVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg5KSA1Ljk3NzU2IFRqCi05OC40ODc5IDQ1OS40ODIgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg0KSA1Ljk3NzU2IFRqCi05OC40ODc5IDQ0Ny41MjcgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMjUwKSAxNy45MzI3IFRqCi05MCA0MzUuNTcyIFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDQyMy42MTcgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShub3QpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZW5vdWdoKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKG1lbW9yeSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotOTAgNDExLjY2MSBUZAotKEJaX09LKSAyOS44ODc4IFRqCi05OC40ODc5IDM5OS43MDYgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMzg0LjE2NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNzQuMjAzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzNjIuMjQ4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiAzNjIuMTQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNDguODE2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA0Ny44MjA3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNDQuMjM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTM1Mi43ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDM1Mi43ODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLTk4LjQ4NzkgMzQwLjgyOCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHJldHVybmVkKSA0Ny44MjA1IFRqCi05OC40ODc5IDMyOC44NzMgVGQKLShubykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzcGVjaWZpYykgNDcuODIwNSBUagotLTQyNiBUSm0KLShhY3Rpb24pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0obmVlZGVkKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGNhc2UpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDcyIDMxMy4zMzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zMDMuMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI4Mi43MTEgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy4yLikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAyODIuNzExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTI4Mi43MTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMjgyLjcxMSBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6Q29tcHJlc3MpIDE0NC42MDkgVGoKLVsxIDAgMCAxIDI2NC40NjggMjgyLjcxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuNDY4IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjcxLjAxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjcxLjAxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnpfc3RyZWFtKSA1My43OTggVGoKLTI2OC4zNzEgMjY5LjI3IFRkCi0oKikgNS45Nzc1NiBUagotMjc0LjM0OCAyNzEuMDE0IFRkCi0oc3RybSwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFjdGlvbikgMzUuODY1NCBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDI1NS40NzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjQ1LjUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzMuNTU1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBybykgMTMuODM4MSBUagotMTUgVEptCi0odmlkZXMpIDIxLjAzMSBUagotLTIyMiBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjIxIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjIyIFRKbQotKGFuZC9vcikgMjUuNDU0NCBUagotLTIyMiBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yMjIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMjIxIFRKbQotKHNwYWNlKSAyMi4xMjY5IFRqCi0tMjIyIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTIyMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjEgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTYwMSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yMjIgVEptCi0oY2FsbGVyKSAyMi4xMjY5IFRqCi0tMjIyIFRKbQotKG1haW50YWlucykgMzguNzQ0NiBUagotLTIyMiBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTIyMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyMiBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yMjIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVycywpIDE3LjQyNDYgVGoKLS0yMjcgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMjIgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLVsxIDAgMCAxIDcyIDIyMS42XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMjEuNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjIxLjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE1NS42ODYgMjIxLjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1LjY4NiAtMjIxLjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OC4xNzcgMjIxLjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0cmFuc2ZlcikgMzAuNDI1OCBUagotLTI1MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKGJldHdlZW4pIDMzLjE5NTQgVGoKLS0yNTAgVEptCi0odGhlbS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDcyIDIyMC4wNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIxMC4xMDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5OS42ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQmVmb3JlKSAyNy4xMDgyIFRqCi0tMjEyIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yMTMgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjEyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE0Ny45NjEgMTk5LjY4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDcuOTYxIC0xOTkuNjgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDcuOTYxIDE5OS42ODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDIzMS42NDcgMTk5LjY4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzEuNjQ3IC0xOTkuNjgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzEuNjQ3IDE5OS42ODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjM2LjMyOSAxOTkuNjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNi4zMjkgLTE5OS42ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNi4zMjkgMTk5LjY4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X2luKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyNzguMTcyIDE5OS42ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjE3MiAtMTk5LjY4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjgwLjI4OCAxOTkuNjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTIxMiBUSm0KLShwb2ludCkgMjAuNDgzMSBUagotLTIxMyBUSm0KLShhdCkgNy4xOTMgVGoKLS0yMTIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjEzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yMTIgVEptCi0odG8pIDcuNzUwOSBUagotLTIxMiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIxMyBUSm0KLShjb21wcmVzc2VkLCkgNDkuNTI0MSBUagotLTIyMCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDYzLjQ5MyAxOTkuNjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2My40OTMgLTE5OS42ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2My40OTMgMTk5LjY4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgNTExLjMxNCAxOTkuNjgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxMS4zMTQgLTE5OS42ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMy40MyAxOTkuNjgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotNzIgMTg3LjcyOCBUZAotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tMjQ2IFRKbQotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjQ3IFRKbQotKG0pIDcuNzUwOSBUagotMSBUSm0KLShhbikgOS40MDQ2OSBUagotMTQgVEptCi0oeSkgNC45ODEzIFRqCi0tMjQ2IFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ2IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNDcgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjQ2IFRKbQotKHJlYWQuKSAxOS42MzYzIFRqCi1bMSAwIDAgMSAyNTkuMjQyIDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU5LjI0MiAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU5LjI0MiAxODcuNzI4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzNDIuOTI5IDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjkyOSAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ1LjM4MiAxODcuNzI4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHVwZGF0ZXMpIDMwLjQzNTcgVGoKLVsxIDAgMCAxIDM3OC4yNzEgMTg3LjcyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzguMjcxIC0xODcuNzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzguMjcxIDE4Ny43MjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9pbikgNDEuODQyOSBUagotWzEgMCAwIDEgNDIwLjExNCAxODcuNzI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMC4xMTQgLTE4Ny43MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMC4xMTQgMTg3LjcyOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0MjUuMDY2IDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI1LjA2NiAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI1LjA2NiAxODcuNzI4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF2YWlsX2luKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0NzIuODg2IDE4Ny43MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjg4NiAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc1LjM0IDE4Ny43MjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ5Mi4xNzkgMTg3LjcyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTIuMTc5IC0xODcuNzI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTIuMTc5IDE4Ny43MjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0MCAxODcuNzI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMTg3LjcyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTc1Ljc3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlXDAwM2VjdCkgMjQuODk2NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKHJlYWQuKSAxOS42MzYzIFRqCi1bMSAwIDAgMSA3MiAxNzMuNjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjMuNjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNTMuODU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFNpbWlsYXJseSkgMzcuMDkwOCBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTEzLjYxMSAxNTMuODU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy42MTEgLTE1My44NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExMy42MTEgMTUzLjg1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X291dCkgNDcuODIwNSBUagotWzEgMCAwIDEgMTYxLjQzMiAxNTMuODU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS40MzIgLTE1My44NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2NC4wNzIgMTUzLjg1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNjUgVEptCi0ocG9pbnQpIDIwLjQ4MzEgVGoKLS0yNjUgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjY1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTI2NSBUSm0KLShpbikgNy43NTA5IFRqCi0tMjY1IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjY1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjY1IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNjUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjUgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI2NSBUSm0KLShwbGFjZWQsKSAyOC40OTMgVGoKLS0yNjkgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDY0Ljc0MiAxNTMuODU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2NC43NDIgLTE1My44NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2NC43NDIgMTUzLjg1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9vdXQpIDUzLjc5OCBUagotWzEgMCAwIDEgNTE4LjU0IDE1My44NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE4LjU0IC0xNTMuODU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjEuMTgxIDE1My44NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW5kaS0pIDE4LjgxOTQgVGoKLTcyIDE0MS45MDEgVGQKLShjYXRpbmcpIDI0LjM0ODYgVGoKLS0yMDkgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yMDkgVEptCi0obXVjaCkgMjIuMTM2OSBUagotLTIwOSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yMDkgVEptCi0oc3BhY2UpIDIyLjEyNjkgVGoKLS0yMDkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMjQzLjA4NyAxNDEuOTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0My4wODcgLTE0MS45MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0My4wODcgMTQxLjkwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMzI2Ljc3MyAxNDEuOTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyNi43NzMgLTE0MS45MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyOC44NTYgMTQxLjkwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1cGRhdGVzKSAzMC40MzU3IFRqCi1bMSAwIDAgMSAzNjEuMzc1IDE0MS45MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYxLjM3NSAtMTQxLjkwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYxLjM3NSAxNDEuOTAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0MDkuMTk2IDE0MS45MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA5LjE5NiAtMTQxLjkwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA5LjE5NiAxNDEuOTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQxMy44NTEgMTQxLjkwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTMuODUxIC0xNDEuOTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTMuODUxIDE0MS45MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDQ2Ny42NDkgMTQxLjkwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjcuNjQ5IC0xNDEuOTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjkuNzMyIDE0MS45MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ4Ni4yMDIgMTQxLjkwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODYuMjAyIC0xNDEuOTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODYuMjAyIDE0MS45MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDU0MCAxNDEuOTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMTQxLjkwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTI5Ljk0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlXDAwM2VjdCkgMjQuODk2NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0ob3V0cHV0LikgMjcuOTU1MSBUagotWzEgMCAwIDEgNzIgMTI3Ljc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTE3LjgyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTA4LjAyOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNzIgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjcyIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZSkgMTcuMTU1NiBUagotLTI3MiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3MiBUSm0KLShyZW1vKSAyMC40NzMxIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNzIgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0obGl0dGxlKSAxOC4yNzE0IFRqCi0tMjcyIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKG11Y2gpIDIyLjEzNjkgVGoKLS0yNzEgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI3MiBUSm0KLShhcykgOC4yOTg4NSBUagotLTI3MiBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNzIgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjcyIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNzIgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTI3MiBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yNzIgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDM5OS4xMjMgMTA4LjAyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTkuMTIzIC0xMDguMDI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTkuMTIzIDEwOC4wMjkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDQ4Mi44MDkgMTA4LjAyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODIuODA5IC0xMDguMDI5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODIuODA5IDEwOC4wMjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTc1MiBUSm0KLShJbikgOC4yOTg4NSBUagotLTI3MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzIgVEptCi0obGltaXQsKSAyMS4zMiBUagotNzIgOTYuMDczNiBUZAotKGl0KSA1LjUzOTIxIFRqCi0tMjY2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjY1IFRKbQotKGFjY2VwdGFibGUpIDQyLjA0MjIgVGoKLS0yNjYgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NiBUSm0KLShzdXBwbHkpIDI2LjU3MDMgVGoKLS0yNjYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjUgVEptCi0ocmVtbykgMjAuNDczMSBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjY2IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNjYgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yNjUgVEptCi0oYnl0ZSkgMTcuMTU1NiBUagotLTI2NiBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNjYgVEptCi0oYSkgNC40MjMzOSBUagotLTI2NiBUSm0KLSh0aW1lLCkgMjAuMjA0MiBUagotLTI2OSBUSm0KLShhbHRob3VnaCkgMzQuODY5MSBUagotLTI2NiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjYgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yNjUgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNjYgVEptCi0odGVycmlibHkpIDI5LjMyOTkgVGoKLS0yNjYgVEptCi0oaW5lZikgMTUuNDkxOCBUagotMjUgVEptCi0oXDAwMmNpZW50LikgMjcuMzk3MiBUagotLTcxNCBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNjYgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi03MiA4NC4xMTg0IFRkCi0oYWwpIDcuMTkzIFRqCi0xMCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXlzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGVuc3VyZSkgMjYuMDAyNCBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGF0KSA3LjE5MyBUagotLTI1MCBUSm0KLShsZWFzdCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI1MCBUSm0KLShieXRlKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShzcGFjZSkgMjIuMTI2OSBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFpbGFibGUpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yNTAgVEptCi0oY2FsbC4pIDE2Ljg3NjYgVGoKLVsxIDAgMCAxIDcyIDgxLjk2MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMS4xNDgyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDEzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE3IDE3Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNzQxLjU1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBKSA3LjE5MyBUagotLTI1MCBUSm0KLShzZWNvbmQpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0ocHVycG9zZSkgMzEuNTQxNiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgMTU2LjY2MiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1Ni42NjIgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1Ni42NjIgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjQwLjM0OCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC4zNDggLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0Mi44MzkgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHJlcXVlc3QpIDI4Ljc3MiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGNoYW5nZSkgMjguMjE0MSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShtb2RlKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDcyIDcwNy44OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjk3LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjg4LjEyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbmNlcHR1YWxseSkgNTMuMTMwNSBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTIxNyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjEwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yMDkgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjA5IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIwOSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIxMCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjA5IFRKbQotKG9uZSkgMTQuMzg2IFRqCi0tMjA5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjA5IFRKbQotKGZvdXIpIDE2LjU5NzcgVGoKLS0yMTAgVEptCi0oc3RhdGVzOikgMjQuOTA2NSBUagotLTI4OSBUSm0KLShJRExFLCkgMjUuMTc1NSBUagotLTIwOSBUSm0KLShSKSA2LjY0NTA1IFRqCi00MCBUSm0KLShVTk5JTkcsKSA0MS43NzMyIFRqCi0tMjEwIFRKbQotKEZMVVNISU5HKSA0OS4yNTUxIFRqCi0tMjA5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjA5IFRKbQotKEZJTklTSElORy4pIDUyLjI5MzcgVGoKLS00MTkgVEptCi0oQmUtKSAxNC4zODYgVGoKLTcyIDY3Ni4xNjQgVGQKLShmb3JlKSAxNi4wMzk4IFRqCi0tMjY0IFRKbQotKGluaXRpYWxpc2F0aW9uKSA0OS44MjMgVGoKLS0yNjMgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDE0Ni40MzQgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDYuNDM0IC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDYuNDM0IDY3Ni4xNjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAyNTQuMDMxIDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU0LjAzMSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU0LjAzMSA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjY0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjYzIFRKbQotKGFmdGVyKSAxOC4yNTE1IFRqCi0tMjY0IFRKbQotKHRlcm1pbmF0aW9uKSA0NS45Mzc1IFRqCi0tMjY0IFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAzNDkuNzUgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDkuNzUgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0OS43NSA2NzYuMTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzRW5kKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSA0NTEuMzY5IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDUxLjM2OSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDUxLjM2OSA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpLCkgNS44MDgyIFRqCi0tMjY3IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNjQgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjY0IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjYzIFRKbQotKHJlKSA3Ljc0MDk0IFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYXJkZWQpIDIyLjEyNjkgVGoKLTcyIDY2NC4yMDkgVGQKLShhcykgOC4yOTg4NSBUagotLTI1MCBUSm0KLShJRExFLikgMjUuMTc1NSBUagotWzEgMCAwIDEgNzIgNjY0LjExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NTQuMTQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NDIuMjkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFVwb24pIDIyLjEzNjkgVGoKLS0zODkgVEptCi0oaW5pdGlhbGlzYXRpb24pIDQ5LjgyMyBUagotLTM5MCBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTU1LjAzNiA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS4wMzYgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1NS4wMzYgNjQyLjI5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDI2Mi42MzIgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjIuNjMyIC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjIuNjMyIDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCksKSA1LjgwODIgVGoKLS00MjQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzkwIFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTM4OSBUSm0KLShpcykgNi42NDUwNSBUagotLTM4OSBUSm0KLShwbGFjZWQpIDI2LjAwMjQgVGoKLS0zOTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTM4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zOTAgVEptCi0oUikgNi42NDUwNSBUagotNDAgVEptCi0oVU5OSU5HKSAzOS4yODI1IFRqCi0tMzg5IFRKbQotKHN0YXRlLikgMjAuNzUyMSBUagotLTE0NTcgVEptCi0oU3Vic2VxdWVudCkgNDUuOTM3NSBUagotLTM4OSBUSm0KLShjYWxscykgMTguMjYxNCBUagotNzIgNjMwLjMzNiBUZAotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDgzLjgxOCA2MzAuMzM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTgzLjgxOCAtNjMwLjMzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODMuODE4IDYzMC4zMzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE2Ny41MDQgNjMwLjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjcuNTA0IC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzEuNTcxIDYzMC4zMzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tNDA4IFRKbQotKHBhc3MpIDE3LjE1NTYgVGoKLVsxIDAgMCAxIDIyMy40MzEgNjMwLjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjMuNDMxIC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjMuNDMxIDYzMC4zMzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUlVOKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAyNTkuMjk3IDYzMC4zMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU5LjI5NyAtNjMwLjMzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYzLjM2MyA2MzAuMzM2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFzKSA4LjI5ODg1IFRqCi0tNDA4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQwOCBUSm0KLShyZXF1ZXN0ZWQpIDM4LjE3NjcgVGoKLS00MDkgVEptCi0oYWN0aW9uOykgMjcuMTE4MiBUagotLTQ4NyBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTQwOCBUSm0KLShhY3Rpb25zKSAyOC4yMjQgVGoKLS00MDggVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tNDA5IFRKbQotKGlsbGUpIDEyLjczMjIgVGoKLTE1IFRKbQotKGcpIDQuOTgxMyBUagotNSBUSm0KLShhbCkgNy4xOTMgVGoKLS00MDggVEptCi0oYW5kKSAxNC4zODYgVGoKLS00MDggVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTQwOCBUSm0KLShyZXN1bHQpIDIyLjEzNjkgVGoKLS00MDkgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgNzIgNjE4LjM4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjE4LjM4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjE4LjM4MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotWzEgMCAwIDEgMTczLjYxOSA2MTguMzgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3My42MTkgLTYxOC4zODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3My42MTkgNjE4LjM4MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2MTcuMDcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MDcuMTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1OTYuNDYzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEF0KSA5Ljk2MjYgVGoKLS0yNzkgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjc5IFRKbQotKHBvaW50LCkgMjIuOTczOCBUagotLTI4NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzkgVEptCi0oY2FsbGluZykgMjcuMTE4MiBUagotLTI3OSBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMjc5IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNzkgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI3OCBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE0IFRKbQotKHZpKSA3Ljc1MDkgVGoKLTEgVEptCi0oZGVkKSAxNC4zODYgVGoKLS0yNzkgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjc5IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNzkgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNzkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudHMpIDE2LjA0OTcgVGoKLS0yNzkgVEptCi0odG8uKSAxMC4yNDE2IFRqCi0tNzkzIFRKbQotKEl0KSA2LjA4NzE1IFRqCi0tMjc5IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNzkgVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI3OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzkgVEptCi0oXDAwMm5pc2gpIDIyLjE0NjkgVGoKLS0yNzkgVEptCi0odXApIDkuOTYyNiBUagotLTI3OSBUSm0KLSgtLSkgNi42MzUwOSBUagotNzIgNTg0LjUwOCBUZAotKGluKSA3Ljc1MDkgVGoKLS0yODcgVEptCi0oZWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKGZlY3QsKSAxNy40MjQ2IFRqCi0tMjk3IFRKbQotKGFza2luZykgMjYuMDEyMyBUagotLTI4OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODcgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI4NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg4IFRKbQotKHByb2Nlc3MpIDI5Ljg3NzggVGoKLS0yODcgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI4OCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjg3IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjg3IFRKbQotKG1pZ2h0KSAyMy4yNTI3IFRqCi0tMjg4IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODcgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyZWQpIDIwLjQ2MzIgVGoKLS0yODggVEptCi0oaW50ZXJuYWxseSkgMzguMTg2NiBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTg0NCBUSm0KLShJbikgOC4yOTg4NSBUagotLTI4OCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yODcgVEptCi0oc3RhdGUsKSAyMC43NTIxIFRqCi1bMSAwIDAgMSA0NTYuMzE0IDU4NC41MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU2LjMxNCAtNTg0LjUwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU2LjMxNCA1ODQuNTA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSA1NDAgNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTU4NC41MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU3Mi41NTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1OCBUSm0KLShubykgOS45NjI2IFRqCi0tMjU3IFRKbQotKGxvbmdlcikgMjUuNDU0NCBUagotLTI1OCBUSm0KLShhdHRlbXB0KSAyOS44ODc4IFRqCi0tMjU4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTggVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI1NyBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjU4IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLVsxIDAgMCAxIDIzNC4yMDcgNTcyLjU1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuMjA3IC01NzIuNTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzQuMjA3IDU3Mi41NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9pbikgNDEuODQyOSBUagotWzEgMCAwIDEgMjc2LjA1MSA1NzIuNTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Ni4wNTEgLTU3Mi41NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Ni4wNTEgNTcyLjU1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjYwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1NyBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1OCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjU4IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNTcgVEptCi0odG8pIDcuNzUwOSBUagotLTI1OCBUSm0KLSh3cml0ZSkgMjAuNDczMSBUagotLTI1OCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjU4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDQwNy4wODIgNTcyLjU1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDcuMDgyIC01NzIuNTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDcuMDgyIDU3Mi41NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDQ1NC45MDIgNTcyLjU1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTQuOTAyIC01NzIuNTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTQuOTAyIDU3Mi41NTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTY2NiBUSm0KLShCZWNhdXNlKSAzMy4xOTU0IFRqCi0tMjU4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1OCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLTcyIDU2MC41OTggVGQKLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0yMjggVEptCi0oc3VwcGxpZWQpIDMzLjc2MzMgVGoKLS0yMjggVEptCi0oYnkpIDkuOTYyNiBUagotLTIyOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjggVEptCi0odXNlcikgMTYuNTk3NyBUagotLTIyOCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yMjggVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yMjggVEptCi0oYXJiaXRyYXJpbHkpIDM5Ljg0MDQgVGoKLS0yMjkgVEptCi0oc21hKSAxNi4wNDk3IFRqCi0xIFRKbQotKGxsLCkgOC4wMjk4NiBUagotLTIzMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjggVEptCi0oXDAwMm5pc2hpbmctdXApIDQ4LjE1OTIgVGoKLS0yMjggVEptCi0ob3BlcmF0aW9uKSAzNy42Mjg3IFRqCi0tMjI5IFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTIyOCBUSm0KLShuZWNlc3NhcmlseSkgNDQuMjYzOCBUagotLTIyOCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIyOCBUSm0KLShkb25lKSAxOS4zNjczIFRqCi0tMjI4IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yMjkgVEptCi0oYSkgNC40MjMzOSBUagotLTIyOCBUSm0KLShzaW5nbGUpIDIzLjgwMDcgVGoKLTcyIDU0OC42NDMgVGQKLShjYWxsKSAxNC4zODYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDk5LjY2NTkgNTQ4LjY0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05OS42NjU5IC01NDguNjQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05OS42NjU5IDU0OC42NDMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE4My4zNTIgNTQ4LjY0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODMuMzUyIC01NDguNjQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODMuMzUyIDU0OC42NDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNTQ3LjEwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTM3LjE0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTI2LjcyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbnN0ZWFkLCkgMzEuMjYyNiBUagotLTM0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjcgVEptCi0oY2FsbGluZykgMjcuMTE4MiBUagotLTMyNiBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMzI3IFRKbQotKHBhc3NlcykgMjUuNDU0NCBUagotWzEgMCAwIDEgMjE4LjIzMSA1MjYuNzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxOC4yMzEgLTUyNi43MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxOC4yMzEgNTI2LjcyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9GSU5JU0gpIDUzLjc5OCBUagotWzEgMCAwIDEgMjcyLjAyOSA1MjYuNzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi4wMjkgLTUyNi43MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3NS4yODQgNTI2LjcyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcykgOC4yOTg4NSBUagotLTMyNyBUSm0KLShhbikgOS40MDQ2OSBUagotLTMyNyBUSm0KLShhY3Rpb24pIDI0LjM0ODYgVGoKLS0zMjYgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMzM4LjEwOCA1MjYuNzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOC4xMDggLTUyNi43MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzOC4xMDggNTI2LjcyNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgNDIxLjc5NSA1MjYuNzI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMS43OTUgLTUyNi43MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMS43OTUgNTI2LjcyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTA4MSBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMzI2IFRKbQotKGNoYW5nZXMpIDMyLjA4OTUgVGoKLS0zMjcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzI3IFRKbQotKHN0cmVhbScpIDI5Ljg3NzggVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLTcyIDUxNC43NyBUZAotKHN0YXRlKSAxOC4yNjE0IFRqCi0tMjkxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTAgVEptCi0oRklOSVNISU5HLikgNTIuMjkzNyBUagotLTU4MSBUSm0KLShBbikgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjkxIFRKbQotKHJlbWFpbmluZykgNDAuMzk4MyBUagotLTI5MCBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTI5MSBUSm0KLShcKGllLCkgMTMuMDAxMiBUagotWzEgMCAwIDEgMjY0LjQ1MiA1MTQuNzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY0LjQ1MiAtNTE0Ljc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjQuNDUyIDUxNC43NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X2luWzApIDUzLjc5OCBUagotLTYwMCBUSm0KLSguLikgMTEuOTU1MSBUagotLTEyMDAgVEptCi0oYXZhaWxfaW4tMV0pIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQxMy44OTIgNTE0Ljc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMy44OTIgLTUxNC43N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEzLjg5MiA1MTQuNzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yOTEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI5MSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI5MCBUSm0KLSh0cmFuc2ZlcnJlZCkgNDMuMTQ4IFRqCi03MiA1MDIuODE0IFRkCi0odG8pIDcuNzUwOSBUagotLTQyMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MjEgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tNDIxIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTE2NDYgVEptCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tNDIxIFRKbQotKGRvKSA5Ljk2MjYgVGoKLS00MjIgVEptCi0odGhpcykgMTQuMzk2IFRqCi0xIFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDIyMi4zMzkgNTAyLjgxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjIuMzM5IC01MDIuODE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjIuMzM5IDUwMi44MTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDMwNi4wMjUgNTAyLjgxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDYuMDI1IC01MDIuODE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTAuMjIgNTAyLjgxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShtdXN0KSAxOS4zNzczIFRqCi0tNDIxIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tNDIxIFRKbQotKGNhbGxlZCkgMjMuNzkwNyBUagotLTQyMSBUSm0KLShyZXBlYXRlZGx5KSA0MS40OTQyIFRqCi0tNDIxIFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tNDIxIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tNDIxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQyMSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS00MjEgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tNDIxIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLTcyIDQ5MC44NTkgVGQKLShjb25zdW1lZC4pIDQyLjg4OSBUagotLTEzOTcgVEptCi0oQXQpIDkuOTYyNiBUagotLTM3OSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzgwIFRKbQotKHBvaW50LCkgMjIuOTczOCBUagotWzEgMCAwIDEgMTg4LjM0NiA0OTAuODU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4OC4zNDYgLTQ5MC44NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4OC4zNDYgNDkwLjg1OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjcyLjAzMyA0OTAuODU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi4wMzMgLTQ5MC44NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3NS44MTMgNDkwLjg1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZXR1cm5zKSAyNy42NjYxIFRqCi1bMSAwIDAgMSAzMDcuMjU5IDQ5MC44NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA3LjI1OSAtNDkwLjg1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA3LjI1OSA0OTAuODU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDM4NC45NjggNDkwLjg1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODQuOTY4IC00OTAuODU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODQuOTY4IDQ5MC44NTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTM3OSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzkgVEptCi0oc3RyZWFtJykgMjkuODc3OCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTM4MCBUSm0KLShzdGF0ZSkgMTguMjYxNCBUagotLTM3OSBUSm0KLShpcykgNi42NDUwNSBUagotLTM4MCBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0zNzkgVEptCi0oYmFjaykgMTguODA5NCBUagotLTM3OSBUSm0KLSh0bykgNy43NTA5IFRqCi03MiA0NzguOTA0IFRkCi0oSURMRS4pIDI1LjE3NTUgVGoKLVsxIDAgMCAxIDk5LjY2NjIgNDc4LjkwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05OS42NjYyIC00NzguOTA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05OS42NjYyIDQ3OC45MDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDIwMS4yODUgNDc4LjkwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDEuMjg1IC00NzguOTA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDMuNzc2IDQ3OC45MDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKHRoZW4pIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oY2FsbGVkLikgMjYuMjgxMyBUagotWzEgMCAwIDEgNzIgNDc3LjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjcuNDA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTYuOTg2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEp1c3QpIDE1LjUwMTggVGoKLS0zODAgVEptCi0odG8pIDcuNzUwOSBUagotLTM4MCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zNzkgVEptCi0oc3VyZSkgMTYuNTk3NyBUagotLTM4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODAgVEptCi0oY2FsbGluZykgMjcuMTE4MiBUagotLTM4MCBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMzc5IFRKbQotKGRvZXMpIDE4LjI2MTQgVGoKLS0zODAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzgwIFRKbQotKGNoZWF0LCkgMjMuNTExNyBUagotLTQxMiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM4MCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMzc5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zODAgVEptCi0obm90ZSkgMTcuMTU1NiBUagotLTM4MCBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDE1LjcwOCA0NTYuOTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxNS43MDggLTQ1Ni45ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNS43MDggNDU2Ljk4NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgNDYzLjUyOCA0NTYuOTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2My41MjggLTQ1Ni45ODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2Ny4zMTIgNDU2Ljk4NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhdCkgNy4xOTMgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzgwIFRKbQotKHRpbWUpIDE3LjcxMzUgVGoKLS0zNzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiA0NDUuMDMxIFRkCi0oXDAwMnJzdCkgMTUuNTAxOCBUagotLTI4NiBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0yODYgVEptCi0odCkgMi43Njk2IFRqCi0xIFRKbQotKG8pIDQuOTgxMyBUagotWzEgMCAwIDEgMTE4LjE3OSA0NDUuMDMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOC4xNzkgLTQ0NS4wMzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOC4xNzkgNDQ1LjAzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjAxLjg2NSA0NDUuMDMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMS44NjUgLTQ0NS4wMzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNC43MTMgNDQ1LjAzMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aGljaCkgMjQuMzQ4NiBUagotLTI4NiBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDI0OC4wMzUgNDQ1LjAzMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDguMDM1IC00NDUuMDMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDguMDM1IDQ0NS4wMzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfRklOSVNIKSA1My43OTggVGoKLVsxIDAgMCAxIDMwMS44MzMgNDQ1LjAzMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDEuODMzIC00NDUuMDMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDQuNjggNDQ1LjAzMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcykgOC4yOTg4NSBUagotLTI4NiBUSm0KLShhbikgOS40MDQ2OSBUagotLTI4NiBUSm0KLShhY3Rpb24pIDI0LjM0ODYgVGoKLS0yODUgVEptCi0oXChpZSwpIDEzLjAwMTIgVGoKLS0yOTUgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjg2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NiBUSm0KLSh0aW1lKSAxNy43MTM1IFRqCi0tMjg1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NiBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMjg2IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI4NiBUSm0KLShhbm5vdW5jZWQpIDQzLjE1OCBUagotLTI4NSBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLTcyIDQzMy4wNzYgVGQKLShpbnRlbnRpb24pIDM1LjQyNyBUagotLTI5MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkyIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI5MSBUSm0KLShzdXBwbHkpIDI2LjU3MDMgVGoKLS0yOTIgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI5MiBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjkyIFRKbQotKGlucHV0XCkuKSAyNi4yOTEzIFRqCi0tODcwIFRKbQotKEJ5KSAxMS42MjY0IFRqCi0tMjkyIFRKbQotKGNvbXBhcmluZykgNDIuNjEgVGoKLS0yOTIgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjkyIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZSkgMTYuNTk3NyBUagotLTI5MSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjkyIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yOTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDM5Mi44NjIgNDMzLjA3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuODYyIC00MzMuMDc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTIuODYyIDQzMy4wNzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDQ0MC42ODIgNDMzLjA3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDAuNjgyIC00MzMuMDc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDMuNTg5IDQzMy4wNzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0obykgNC45ODEzIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjkyIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS0yOTIgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0yOTEgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgNzIgNDIxLjEyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDIxLjEyMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIxLjEyMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiA0MjEuMTIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS42ODYgLTQyMS4xMjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1NS42ODYgNDIxLjEyMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjQ3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjQ2IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI0NyBUSm0KLShkZXRlY3QpIDIzLjc5MDcgVGoKLS0yNDYgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI0NyBUSm0KLShhdHQpIDkuOTYyNiBUagotMSBUSm0KLShlbXB0cykgMjMuODAwNyBUagotLTI0NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQ2IFRKbQotKHNsaXApIDE0LjM5NiBUagotLTI0NyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjQ2IFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yNDcgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI0NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjQ3IFRKbQotKGNvbXByZXNzLikgNDAuMTE5NCBUagotLTYxNyBUSm0KLShBbikgMTIuMTc0MyBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjQ3IFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMjQ2IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI0NyBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI0NiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNDcgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDQwOS4xNjYgVGQKLShkZXRlY3RlZCkgMzMuMTk1NCBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotWzEgMCAwIDEgMTUxLjk1OSA0MDkuMTY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1MS45NTkgLTQwOS4xNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MS45NTkgNDA5LjE2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotWzEgMCAwIDEgMjUzLjU3OCA0MDkuMTY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My41NzggLTQwOS4xNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1My41NzggNDA5LjE2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNTAwIFRKbQotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oaW5kaWNhdGVzKSAzNS40MTcgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShwcm9ncmFtbWluZykgNTQuMjM2NCBUagotLTI1MCBUSm0KLShtaXN0YWspIDI2LjU3MDMgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGNvcnJlY3RlZC4pIDM5LjU1MTUgVGoKLVsxIDAgMCAxIDcyIDQwNy4wMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM5Ny4wNDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM4Ny4yNDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSW5zdGVhZCkgMjguNzcyIFRqCi0tMjI0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjIzIFRKbQotKGFza2luZykgMjYuMDEyMyBUagotLTIyNCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjIzIFRKbQotKFwwMDJuaXNoLCkgMjQuNjM3NSBUagotLTIyOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjQgVEptCi0oY2FsbGluZykgMjcuMTE4MiBUagotLTIyMyBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMjI0IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTIyNCBUSm0KLShhc2spIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDI5My4yODIgMzg3LjI0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTMuMjgyIC0zODcuMjQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTMuMjgyIDM4Ny4yNDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDM3Ni45NjggMzg3LjI0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzYuOTY4IC0zODcuMjQ4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzkuMTk2IDM4Ny4yNDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTIyNCBUSm0KLSh0YWspIDEyLjE3NDMgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yMjMgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yMjQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjIzIFRKbQotKHJlbWFpbmluZykgNDAuMzk4MyBUagotLTIyNCBUSm0KLShpbnB1dCwpIDIyLjk3MzggVGoKLS0yMjkgVEptCi0oY29tcHJlc3MpIDM3LjYyODcgVGoKLTcyIDM3NS4yOTMgVGQKLShpdCkgNS41MzkyMSBUagotLTI3OCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3OCBUSm0KLSh0ZXJtaW5hdGUpIDM3LjYyODcgVGoKLS0yNzggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc4IFRKbQotKGN1cnJlbnQpIDI4LjIxNDEgVGoKLS0yNzcgVEptCi0oXChCdXJybykgMjYuNTYwMyBUagotMjUgVEptCi0od3MtV2hlZWxlclwpKSA1MS40NDY5IFRqCi0tMjc4IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjc4IFRKbQotKGJsb2NrLikgMjQuNjI3NSBUagotLTc4NyBUSm0KLShUaCkgMTEuMDY4NCBUagotLTEgVEptCi0oaSkgMi43Njk2IFRqCi0xIFRKbQotKHMpIDMuODc1NDUgVGoKLS0yNzggVEptCi0oY291bGQpIDIyLjEzNjkgVGoKLS0yNzggVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNzggVEptCi0odXNlZnVsKSAyNC4zNDg2IFRqCi0tMjc4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI3OCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI3OCBUSm0KLShjb250cm9sKSAyOC4yMjQgVGoKLS0yNzggVEptCi0ocHVycG9zZXMuKSAzNy45MDc3IFRqCi03MiAzNjMuMzM4IFRkCi0oVGhlKSAxNS40OTE4IFRqCi0tMzI4IFRKbQotKG1lY2hhbmlzbSkgNDUuMzc5NiBUagotLTMyOCBUSm0KLShpcykgNi42NDUwNSBUagotLTMyOCBUSm0KLShhbmFsb2dvdXMpIDQwLjM5ODMgVGoKLS0zMjggVEptCi0odG8pIDcuNzUwOSBUagotLTMyOCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzI4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTMyOCBUSm0KLShcMDAybmlzaGluZzopIDM3LjY0ODcgVGoKLS00NjYgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyOTcuMDQ5IDM2My4zMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk3LjA0OSAtMzYzLjMzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk3LjA0OSAzNjMuMzM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzODAuNzM1IDM2My4zMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgwLjczNSAtMzYzLjMzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzg0LjAwMyAzNjMuMzM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMjggVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0zMjggVEptCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tMzI4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0NTYuODQxIDM2My4zMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU2Ljg0MSAtMzYzLjMzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDU2Ljg0MSAzNjMuMzM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0ZMVVNIKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1MDQuNjYyIDM2My4zMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA0LjY2MiAtMzYzLjMzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA0LjY2MiAzNjMuMzM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zMjggVEptCi0ocmVtbykgMjAuNDczMSBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi03MiAzNTEuMzgyIFRkCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tNDQ1IFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tNDk0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tNDQ2IFRKbQotKHBlcnNpc3QpIDI2LjAxMjMgVGoKLS00NDUgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTQ0NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLVsxIDAgMCAxIDIxMy45NCAzNTEuMzgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMy45NCAtMzUxLjM4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEzLjk0IDM1MS4zODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfRkxVU0gpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDI2MS43NjEgMzUxLjM4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjEuNzYxIC0zNTEuMzgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjYuMTk1IDM1MS4zODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYWN0aW9uKSAyNC4zNDg2IFRqCi0tNDQ1IFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tNDQ1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQ0NiBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLVsxIDAgMCAxIDM2MC4wNjIgMzUxLjM4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjAuMDYyIC0zNTEuMzgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjAuMDYyIDM1MS4zODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUlVOKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzOTUuOTI4IDM1MS4zODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzk1LjkyOCAtMzUxLjM4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDAwLjM2MiAzNTEuMzgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tNDQ1IFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tMTc5MiBUSm0KLShBcykgMTEuMDY4NCBUagotLTQ0NSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDQ1IFRKbQotKFwwMDJuaXNoaW5nLCkgMzcuMzY5NyBUagotWzEgMCAwIDEgNzIgMzM5LjQyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzM5LjQyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzM5LjQyNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMTU1LjY4NiAzMzkuNDI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS42ODYgLTMzOS40MjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OC4xNzcgMzM5LjQyNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkZXRlY3RzKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0oYXR0ZW1wdCkgMjkuODg3OCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZSkgMTcuMTU1NiBUagotLTI1MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0ob25jZSkgMTguODA5NCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oXDAwM3VzaCkgMTkuMzc3MyBUagotLTI1MCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKGd1bi4pIDE3LjQzNDYgVGoKLVsxIDAgMCAxIDcyIDMzNy4yN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI3LjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzE3LjUwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShPbmNlKSAyMS4wMjExIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAzdXNoKSAxOS4zNzczIFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGNvbXBsZXRlLCkgMzkuMDEzNSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHJldHVybnMpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0oUikgNi42NDUwNSBUagotNDAgVEptCi0oVU5OSU5HKSAzOS4yODI1IFRqCi0tMjUwIFRKbQotKHN0YXRlLikgMjAuNzUyMSBUagotWzEgMCAwIDEgNzIgMzE1LjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzA1LjM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyOTUuNTkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0zNDQgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0zNDMgVEptCi0oc291bmRzKSAyNy42NzYxIFRqCi0tMzQ0IFRKbQotKHByZXR0eSkgMjMuMjQyNyBUagotLTM0NCBUSm0KLShjb21wbGUpIDI5LjMyOTkgVGoKLTE1IFRKbQotKHgsKSA3LjQ3MTk1IFRqCi0tMzY3IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTM0NCBUSm0KLShpc24nKSAxNC45NDM5IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zNDQgVEptCi0ocmVhbGx5KSAyMi42ODQ4IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tMTE4MiBUSm0KLShIZXJlJykgMjIuNjc0OSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTM0NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzQ0IFRKbQotKHRhYmxlKSAxOS4zNjczIFRqCi0tMzQzIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMzQ0IFRKbQotKHNobykgMTMuODM4MSBUagotMjUgVEptCi0od3MpIDExLjA2ODQgVGoKLS0zNDQgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0zNDQgVEptCi0oYWN0aW9ucykgMjguMjI0IFRqCi0tMzQzIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM0NCBUSm0KLShhbGxvKSAxNC45NDM5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTM0NCBUSm0KLShpbikgNy43NTA5IFRqCi0tMzQ0IFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLTcyIDI4My42MzYgVGQKLShzdGF0ZSwpIDIwLjc1MjEgVGoKLS0yODEgVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI3NCBUSm0KLShhY3Rpb24pIDI0LjM0ODYgVGoKLS0yNzUgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI3NCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI3NSBUSm0KLSh0YWspIDEyLjE3NDMgVGoKLTEwIFRKbQotKGVuLCkgMTEuODk1MyBUagotLTI4MCBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMjc1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3NCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI3NSBUSm0KLShzdGF0ZSkgMTguMjYxNCBUagotLTI3NCBUSm0KLShpcywpIDkuMTM1NyBUagotLTI4MSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3NCBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMjc1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3NSBUSm0KLShub24tZXJyb3IpIDM3LjYxODggVGoKLS0yNzQgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjc1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLS0yNzQgVEptCi0oYXJlLikgMTQuNjU1IFRqCi0tNzY3IFRKbQotKE5vdGUpIDE5LjM2NzMgVGoKLS0yNzUgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI3NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNzUgVEptCi0oY2FuJykgMTcuMTQ1NiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi03MiAyNzEuNjgxIFRkCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBsaWNpdGx5KSAzMy4yMTUzIFRqCi0tMzQ3IFRKbQotKGFzaykgMTMuMjgwMSBUagotLTM0OCBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMzQ3IFRKbQotKHN0YXRlKSAxOC4yNjE0IFRqCi0tMzQ4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0NyBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0zNDggVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNDcgVEptCi0oaW4sKSAxMC4yNDE2IFRqCi0tMzcyIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTM0NyBUSm0KLShub3IpIDEzLjI4MDEgVGoKLS0zNDggVEptCi0oZG8pIDkuOTYyNiBUagotLTM0NyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zNDggVEptCi0obmVlZCkgMTguODA5NCBUagotLTM0NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzQ4IFRKbQotKC0tKSA2LjYzNTA5IFRqCi0tMzQ3IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzQ4IFRKbQotKGNhbikgMTMuODI4MSBUagotLTM0NyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM0NyBUSm0KLShpbmZlcnJlZCkgMzEuNTMxNiBUagotLTM0OCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMzQ3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzKSAyMC40NzMxIFRqCi0tMzQ3IFRKbQotKHJldHVybmVkKSAzMy4xOTU0IFRqCi0tMzQ4IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDcyIDI1OS43MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI1OS43MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI1OS43MjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3MpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDE1NS42ODYgMjU5LjcyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTUuNjg2IC0yNTkuNzI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTUuNjg2IDI1OS43MjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjU4LjE5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIwNy4zNF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjg1MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuODUxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNCkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAxOCAxOAotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTU5NS40MDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTczLjg0OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU3MC4yNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKElETEUvYW55KSA0Ny44MjA1IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShJbGxlZ2FsLikgNDcuODIwNSBUagotLTg1MiBUSm0KLShJRExFKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9ubHkpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oZXhpc3RzKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGFmdGVyKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKEJaMl9iekNvbXByZXNzRW5kKSAxMDEuNjE5IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi05OC40ODc5IDY4Ny43MjEgVGQKLShiZWZvcmUpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oQloyX2J6Q29tcHJlc3NJbml0LikgMTEzLjU3NCBUagotOTguNDg3OSA2NzUuNzY2IFRkCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfU0VRVUVOQ0VfRVJST1IpIDEwMS42MTkgVGoKLTkwIDY1MS44NTYgVGQKLShSVU5OSU5HL0JaX1JVTikgODMuNjg1OCBUagotOTguNDg3OSA2MzkuOSBUZAotKENvbXByZXNzKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obmV4dF9pbikgNDEuODQyOSBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuZXh0X291dCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShtdWNoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGFzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHBvc3NpYmxlLikgNTMuNzk4IFRqCi05OC40ODc5IDYyNy45NDUgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oUlVOTklORykgNDEuODQyOSBUagotOTguNDg3OSA2MTUuOTkgVGQKLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9SVU5fT0spIDUzLjc5OCBUagotOTAgNTkyLjA4IFRkCi0oUlVOTklORy9CWl9GTFVTSCkgOTUuNjQxIFRqCi05OC40ODc5IDU4MC4xMjUgVGQKLShSZW1lbWJlcikgNDcuODIwNSBUagotLTQyNiBUSm0KLShjdXJyZW50KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5leHRfaW4uKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKENvbXByZXNzKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obmV4dF9pbikgNDEuODQyOSBUagotOTguNDg3OSA1NjguMTY5IFRkCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obXVjaCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShwb3NzaWJsZSwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShidXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obm90KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFjY2VwdCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShhbnkpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obW9yZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpbnB1dC4pIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNTU2LjIxNCBUZAotKE5leHQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc3RhdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShGTFVTSElORykgNDcuODIwNSBUagotOTguNDg3OSA1NDQuMjU5IFRkCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfRkxVU0hfT0spIDY1Ljc1MzIgVGoKLTkwIDUyMC4zNDkgVGQKLShSVU5OSU5HL0JaX0ZJTklTSCkgMTAxLjYxOSBUagotOTguNDg3OSA1MDguMzk0IFRkCi0oUmVtZW1iZXIpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oY3VycmVudCkgNDEuODQyOSBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuZXh0X2luLikgNDcuODIwNSBUagotLTQyNiBUSm0KLShDb21wcmVzcykgNDcuODIwNSBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG5leHRfaW4pIDQxLjg0MjkgVGoKLTk4LjQ4NzkgNDk2LjQzOCBUZAotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGFzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG11Y2gpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0ocG9zc2libGUsKSA1My43OTggVGoKLS00MjYgVEptCi0oYnV0KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5vdCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhY2NlcHQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oYW55KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG1vcmUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW5wdXQuKSAzNS44NjU0IFRqCi05OC40ODc5IDQ4NC40ODMgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oRklOSVNISU5HKSA1My43OTggVGoKLTk4LjQ4NzkgNDcyLjUyOCBUZAotKFJldHVybikgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX0ZJTklTSF9PSykgNzEuNzMwNyBUagotOTAgNDQ4LjYxOCBUZAotKEZMVVNISU5HL0JaX0ZMVVNIKSAxMDEuNjE5IFRqCi05OC40ODc5IDQzNi42NjMgVGQKLShDb21wcmVzcykgNDcuODIwNSBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG5leHRfaW4pIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obXVjaCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShhcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShwb3NzaWJsZSwpIDUzLjc5OCBUagotOTguNDg3OSA0MjQuNzA3IFRkCi0oYnV0KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5vdCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhY2NlcHQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oYW55KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG1vcmUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW5wdXQuKSAzNS44NjU0IFRqCi05OC40ODc5IDQxMi43NTIgVGQKLShJZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbGwpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGV4aXN0aW5nKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGlucHV0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHVzZWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odXApIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFsbCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi05OC40ODc5IDQwMC43OTcgVGQKLShvdXRwdXQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ocmVtb3ZlZCkgNDEuODQyOSBUagotMTA2Ljk3NiAzODguODQyIFRkCi0oTmV4dCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShzdGF0ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFJVTk5JTkc7KSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKFJldHVybikgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX1JVTl9PSykgNTMuNzk4IFRqCi05OC40ODc5IDM3Ni44ODcgVGQKLShlbHNlKSAyMy45MTAyIFRqCi0xMDYuOTc2IDM2NC45MzIgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oRkxVU0hJTkc7KSA1My43OTggVGoKLS00MjYgVEptCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfRkxVU0hfT0spIDY1Ljc1MzIgVGoKLTkwIDM0MS4wMjEgVGQKLShGTFVTSElORy9vdGhlcikgODMuNjg1OCBUagotOTguNDg3OSAzMjkuMDY2IFRkCi0oSWxsZWdhbC4pIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgMzE3LjExMSBUZAotKFJldHVybikgMzUuODY1NCBUagotLTQyNiBUSm0KLSh2YWx1ZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi05MCAyOTMuMjAxIFRkCi0oRklOSVNISU5HL0JaX0ZJTklTSCkgMTEzLjU3NCBUagotOTguNDg3OSAyODEuMjQ1IFRkCi0oQ29tcHJlc3MpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oZnJvbSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShuZXh0X2luKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGFzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG11Y2gpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0ocG9zc2libGUsKSA1My43OTggVGoKLTk4LjQ4NzkgMjY5LjI5IFRkCi0oYnV0KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5vdCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhY2NlcHQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oYW55KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG1vcmUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW5wdXQuKSAzNS44NjU0IFRqCi05OC40ODc5IDI1Ny4zMzUgVGQKLShJZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbGwpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGV4aXN0aW5nKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGlucHV0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHVzZWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odXApIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFsbCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi05OC40ODc5IDI0NS4zOCBUZAotKG91dHB1dCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShyZW1vdmVkKSA0MS44NDI5IFRqCi0xMDYuOTc2IDIzMy40MjUgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oSURMRTspIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oUmV0dXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZhbHVlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotOTguNDg3OSAyMjEuNDcgVGQKLShlbHNlKSAyMy45MTAyIFRqCi0xMDYuOTc2IDIwOS41MTQgVGQKLShOZXh0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0YXRlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oRklOSVNISU5HOykgNTkuNzc1NiBUagotLTQyNiBUSm0KLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9GSU5JU0hfT0spIDcxLjczMDcgVGoKLTkwIDE4NS42MDQgVGQKLShGSU5JU0hJTkcvb3RoZXIpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgMTczLjY0OSBUZAotKElsbGVnYWwuKSA0Ny44MjA1IFRqCi05OC40ODc5IDE2MS42OTQgVGQKLShSZXR1cm4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmFsdWUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotWzEgMCAwIDEgNzIgMTQ2LjE1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMzYuMTg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMjQuMjM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoYXQpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oc3RpbGwpIDE0Ljk1MzkgVGoKLS0yNTAgVEptCi0obG9va3MpIDIxLjU4OSBUagotLTI1MCBUSm0KLShjb21wbGljYXRlZD8pIDUzLjEyMDYgVGoKLS02MjAgVEptCi0oVykgOS40MDQ2OSBUagotODAgVEptCi0oZWxsLCkgMTIuNDUzMyBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaXIpIDEwLjUxMDUgVGoKLS0yNTAgVEptCi0oZW5vdWdoLikgMzEuODIwNSBUagotLTYyMCBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0odXN1YWwpIDIxLjAzMSBUagotLTI1MCBUSm0KLShzZXF1ZW5jZSkgMzYuNTEyOSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NpbmcpIDUwLjM2MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShsb2FkKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oaXM6KSA5LjQxNDY2IFRqCi1bMSAwIDAgMSA3MiAxMjIuMDc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjkuNzIzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDcuMzcyNCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc5LjM3MjQgLTkyLjM1MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc5LjM3MjQgOTIuMzUzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxLikgNy40NzE5NSBUagotWzEgMCAwIDEgODYuODQ0NCA5Mi4zNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS45MjUzIC05Mi4zNTM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS45MjUzIDkyLjM1MzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oR2V0KSAxNC4zODYgVGoKLS0yNTAgVEptCi0oc3RhcnRlZCkgMjYuNTYwMyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSAxNTguMDU2IDkyLjM1MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjA1NiAtOTIuMzUzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjA1NiA5Mi4zNTM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgMjY1LjY1MyA5Mi4zNTM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2NS42NTMgLTkyLjM1MzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2NS42NTMgOTIuMzUzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNjguMTQ0IDkyLjM1MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk2LjE0NCAtNDEuNTAxOV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkzIDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE1KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDE5IDE5Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMzEuNTE2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDcuMzcyNCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc5LjM3MjQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc5LjM3MjQgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyLikgNy40NzE5NSBUagotWzEgMCAwIDEgODYuODQ0NCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS45MjUzIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS45MjUzIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oU2hvKSAxNS41MDE4IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI0MCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjQwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNDEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNDAgVEptCi0oc2hsdXJwKSAyNC45MDY1IFRqCi0tMjQwIFRKbQotKG91dCkgMTIuNzMyMiBUagotLTI0MCBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yNDAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI0MSBUSm0KLShmb3JtKSAxOS4zNjczIFRqCi0tMjQwIFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yNDAgVEptCi0oemVybykgMTcuMTQ1NiBUagotLTI0MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI0MCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMjQxIFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMjQwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MDEuNDU0IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDAxLjQ1NCAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDAxLjQ1NCA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzKSA4My42ODU4IFRqCi1bMSAwIDAgMSA0ODUuMTQgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODUuMTQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Ny41MzMgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aXRoKSAxNy43MTM1IFRqCi0tMjQwIFRKbQotKGFjdGlvbikgMjQuMzQ4NiBUagotLTI0MCBUSm0KLSg9KSA1LjYxODkxIFRqCi1bMSAwIDAgMSA5MS45MjUzIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTEuOTI1MyAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTEuOTI1MyA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1JVTikgMzUuODY1NCBUagotWzEgMCAwIDEgMTI3Ljc5MSA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEyNy43OTEgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyNy43OTEgNjk4LjA4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxMzAuMjgxIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTguMjgxNCAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDcuMzcyNCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc5LjM3MjQgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc5LjM3MjQgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzLikgNy40NzE5NSBUagotWzEgMCAwIDEgODYuODQ0NCA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS45MjUzIC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS45MjUzIDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRmluaXNoKSAyNC45MTY1IFRqCi0tMjQyIFRKbQotKHVwLikgMTIuNDUzMyBUagotLTMwNyBUSm0KLShSZXBlYXRlZGx5KSA0NC44MjE3IFRqCi0tMjQxIFRKbQotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgMTk4Ljc4NCA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OC43ODQgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OC43ODQgNjc2LjE2NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjgyLjQ3MSA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Mi40NzEgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4NC44NzggNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aXRoKSAxNy43MTM1IFRqCi0tMjQyIFRKbQotKGFjdGlvbikgMjQuMzQ4NiBUagotLTI0MSBUSm0KLSg9KSA1LjYxODkxIFRqCi1bMSAwIDAgMSAzMzkuNzggNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzkuNzggLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzOS43OCA2NzYuMTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0ZJTklTSCkgNTMuNzk4IFRqCi1bMSAwIDAgMSAzOTMuNTc5IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkzLjU3OSAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzkzLjU3OSA2NzYuMTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNDIgVEptCi0oY29wKSAxNC4zODYgVGoKLTEwIFRKbQotKHlpbmcpIDE3LjcxMzUgVGoKLS0yNDEgVEptCi0ob3V0KSAxMi43MzIyIFRqCi0tMjQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MiBUSm0KLShjb21wcmVzKSAzMy43NTMzIFRqCi0xIFRKbQotKHNlZCkgMTMuMjgwMSBUagotLTI0MiBUSm0KLShvdXRwdXQsKSAyNy45NTUxIFRqCi05MS45MjUzIDY2NC4yMDkgVGQKLSh1bnRpbCkgMTguMjcxNCBUagotWzEgMCAwIDEgMTEyLjY4NyA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMi42ODcgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExMi42ODcgNjY0LjIwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxOTAuMzk2IDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkwLjM5NiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjg4NiA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi1bMSAwIDAgMSAyMzcuNzA4IDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY1LjcwOCAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDcuMzcyNCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc5LjM3MjQgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc5LjM3MjQgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg0LikgNy40NzE5NSBUagotWzEgMCAwIDEgODYuODQ0NCA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS45MjUzIC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS45MjUzIDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQ2xvc2UpIDIyLjY5NDggVGoKLS0yNTAgVEptCi0odXApIDkuOTYyNiBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShnbykgOS45NjI2IFRqCi0tMjUwIFRKbQotKGhvbWUuKSAyNC42Mjc1IFRqCi0tNjIwIFRKbQotKENhbGwpIDE2LjYwNzcgVGoKLVsxIDAgMCAxIDIwOC43OTYgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDguNzk2IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDguNzk2IDY0Mi4yOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLVsxIDAgMCAxIDMxMC40MTUgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTAuNDE1IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTAuNDE1IDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgMzEyLjkwNiA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC45MDYgLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzMC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyMC4zNzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yNjkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNjkgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjcwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNjkgVEptCi0odG8pIDcuNzUwOSBUagotLTI3MCBUSm0KLShjb21wcmVzcykgMzcuNjI4NyBUagotLTI2OSBUSm0KLShcMDAydHMpIDEyLjE4NDMgVGoKLS0yNzAgVEptCi0oaW50bykgMTUuNTAxOCBUagotLTI2OSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjcwIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMjY5IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotLTI3MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI2OSBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNzAgVEptCi0ob25jZSwpIDIxLjMgVGoKLS0yNzQgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjY5IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI3MCBUSm0KLShza2lwKSAxNi42MDc3IFRqCi0tMjY5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI3MCBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTI2OSBUSm0KLShvZikgOC4yOTg4NSBUagotWzEgMCAwIDEgNDU2LjMxNCA2MjAuMzc0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1Ni4zMTQgLTYyMC4zNzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1Ni4zMTQgNjIwLjM3NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotNzIgNjA4LjQxOCBUZAotKFwoKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKC4uLiwpIDIzLjkxMDIgVGoKLS02MDAgVEptCi0oQlpfUlVOKSAzNS44NjU0IFRqCi0tNjAwIFRKbQotKFwpKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxNjEuNjY0IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjY2NCAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY0LjE1NCA2MDguNDE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGp1c3QpIDE0LjM5NiBUagotLTI1MCBUSm0KLShkbykgOS45NjI2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgMjI1LjAzNiA2MDguNDE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyNS4wMzYgLTYwOC40MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNS4wMzYgNjA4LjQxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotLTYwMCBUSm0KLShcKCkgNS45Nzc1NiBUagotLTYwMCBUSm0KLSguLi4sKSAyMy45MTAyIFRqCi0tNjAwIFRKbQotKEJaX0ZJTklTSCkgNTMuNzk4IFRqCi0tNjAwIFRKbQotKFwpKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSA0MjIuMjk2IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIyLjI5NiAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI0Ljc4NiA2MDguNDE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNhbGxzLikgMjAuNzUyMSBUagotWzEgMCAwIDEgNzIgNjA2LjI2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTk2LjI5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTg2LjUwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGwpIDEyLjczMjIgVGoKLS0yNzggVEptCi0ocmVxdWlyZWQpIDMzLjE5NTQgVGoKLS0yNzcgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjc4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjc3IFRKbQotKGFsbG9jYXRlZCkgMzUuOTY1IFRqCi0tMjc4IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDIyMC4yOTUgNTg2LjUwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjAuMjk1IC01ODYuNTAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjAuMjk1IDU4Ni41MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAzMjcuODkxIDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI3Ljg5MSAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI3Ljg5MSA1ODYuNTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS03ODUgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMjc4IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjc3IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNzggVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjc3IFRKbQotKGFjY2VwdCkgMjUuNDQ0NSBUagotLTI3OCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjc3IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNzggVEptCi0oYXQpIDcuMTkzIFRqCi0tMjc4IFRKbQotKGFsbCkgOS45NjI2IFRqCi03MiA1NzQuNTQ1IFRkCi0oXChvYikgMTMuMjgwMSBUagotMTUgVEptCi0odmlvdXNseVwpLikgMzUuMTQ4MSBUagotLTYxMiBUSm0KLShTbykgMTAuNTIwNSBUagotLTIzOCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMzcgVEptCi0oc2hvdWxkbicpIDM0Ljg2OTEgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTIzOCBUSm0KLShnZXQpIDEyLjE3NDMgVGoKLS0yMzggVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIzNyBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTIzOCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yMzggVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlcykgMjAuNDczMSBUagotLTIzOCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjM3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotWzEgMCAwIDEgMzM5LjI4NyA1NzQuNTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOS4yODcgLTU3NC41NDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzOS4yODcgNTc0LjU0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgNDIyLjk3MyA1NzQuNTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMi45NzMgLTU3NC41NDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNS4zNDIgNTc0LjU0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjYWxscy4pIDIwLjc1MjEgVGoKLS02MTIgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0yMzggVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjM3IFRKbQotKGRvLCkgMTIuNDUzMyBUagotLTI0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIzOCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjM4IFRKbQotKGJlKSA5LjQwNDY5IFRqCi1bMSAwIDAgMSA3MiA1NjIuNTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2Mi41OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTYyLjU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSAxNzMuNjE5IDU2Mi41OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzMuNjE5IC01NjIuNTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3My42MTkgNTYyLjU5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oaW5kaWNhdGUpIDMxLjU0MTYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHByb2dyYW1taW5nLikgNTYuNzI3IFRqCi1bMSAwIDAgMSA3MiA1NjAuNDMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NTAuNDcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDAuNjczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFQpIDYuMDg3MTUgVGoKLTM1IFRKbQotKHJpKSA2LjA4NzE1IFRqCi0yNSBUSm0KLSh2aWFsKSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tMjUwIFRKbQotKHBvc3NpYmxlKSAzMi42NTc0IFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgNTM4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTM2Ljg2MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMzUuODY1NSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMyLjI3ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01MjkuMTUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1MjkuMTUxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDUxNy4xOTYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cm0tPnMpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotWzEgMCAwIDEgNzIgNTAxLjY1NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ5MS42OTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ3MS4wMzMgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy4zLikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCA0NzEuMDMzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTQ3MS4wMzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggNDcxLjAzMyBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6Q29tcHJlc3NFbmQpIDE3NS41OTcgVGoKLVsxIDAgMCAxIDI5NS40NTUgNDcxLjAzM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjMuNDU1IC0yLjMzMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNDU5LjMzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNDU5LjMzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6Q29tcHJlc3NFbmQpIDEwMS42MTkgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnpfc3RyZWFtKSA1My43OTggVGoKLTI4Ni4zMDMgNDU3LjU5MiBUZAotKCopIDUuOTc3NTYgVGoKLTI5Mi4yODEgNDU5LjMzNSBUZAotKHN0cm0pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiA0NDMuNzkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzMy44MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyMS44NzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVsZWFzZXMpIDM0Ljg1OTEgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKGFzc29jaWF0ZWQpIDQwLjk0NjMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjUwIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDcyIDQxOS43MTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQwOS43NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM5OS45NTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiAzOTkuODU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzYuODYxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTM5MC40OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDM5MC40OTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLS04NTIgVEptCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cm0tPnMpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotOTAgMzc4LjUzOCBUZAotKEJaX09LKSAyOS44ODc4IFRqCi0tNDY4NiBUSm0KLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMzYyLjk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1My4wMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMzMi4zNzUgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy40LikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAzMzIuMzc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTMzMi4zNzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMzMyLjM3NSBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDIwNi41ODUgVGoKLVsxIDAgMCAxIDMyNi40NDMgMzMyLjM3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTQuNDQzIC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzIwLjY3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzIwLjY3OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnpfc3RyZWFtKSA1My43OTggVGoKLTMwNC4yMzYgMzE4LjkzNCBUZAotKCopIDUuOTc3NTYgVGoKLTMxMC4yMTQgMzIwLjY3OCBUZAotKHN0cm0sKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHksKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzbWFsbCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDMwNS4xMzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk1LjE3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjgzLjIxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcmVwYXJlcykgMzQuMzAxMiBUagotLTM1MSBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zNTEgVEptCi0oZGVjb21wcmVzc2lvbi4pIDYyLjI1NjMgVGoKLS0xMjI4IFRKbQotKEFzKSAxMS4wNjg0IFRqCi0tMzUxIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDIzNS4xNzcgMjgzLjIxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzUuMTc3IC0yODMuMjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzUuMTc3IDI4My4yMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Q29tcHJlc3NJbml0KSAxMDcuNTk2IFRqCi1bMSAwIDAgMSAzNDIuNzczIDI4My4yMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjc3MyAtMjgzLjIxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQyLjc3MyAyODMuMjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0zNzcgVEptCi0oYSkgNC40MjMzOSBUagotWzEgMCAwIDEgMzU2LjkzNyAyODMuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Ni45MzcgLTI4My4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1Ni45MzcgMjgzLjIxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiel9zdHJlYW0pIDUzLjc5OCBUagotWzEgMCAwIDEgNDEwLjczNiAyODMuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMC43MzYgLTI4My4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNC4yMzUgMjgzLjIxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWNvcmQpIDI1LjQ0NDUgVGoKLS0zNTEgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzUxIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzUyIFRKbQotKGFsbG9jYXRlZCkgMzUuOTY1IFRqCi0tMzUxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi03MiAyNzEuMjYzIFRkCi0oaW5pdGlhbGlzZWQpIDM5LjMwMjUgVGoKLS0zMDYgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMzA1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwNiBUSm0KLShjYWxsLikgMTYuODc2NiBUagotLTk1MyBUSm0KLShGaWVsZHMpIDI0LjM1ODYgVGoKLVsxIDAgMCAxIDIxMS44MzMgMjcxLjI2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTEuODMzIC0yNzEuMjYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTEuODMzIDI3MS4yNjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnphbGxvYykgNDEuODQyOSBUagotWzEgMCAwIDEgMjUzLjY3NiAyNzEuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1My42NzYgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1My42NzYgMjcxLjI2MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNTkuMzUgMjcxLjI2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTkuMzUgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OS4zNSAyNzEuMjYzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZnJlZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMjk1LjIxNSAyNzEuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NS4yMTUgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OC4yNiAyNzEuMjYzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzMTUuNjkgMjcxLjI2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTUuNjkgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxNS42OSAyNzEuMjYzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG9wYXF1ZSkgMzUuODY1NCBUagotWzEgMCAwIDEgMzUxLjU1NiAyNzEuMjYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1MS41NTYgLTI3MS4yNjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1NC42IDI3MS4yNjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzA2IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzA1IFRKbQotKHNldCkgMTEuMDY4NCBUagotLTMwNiBUSm0KLShpZikgNi4wODcxNSBUagotLTMwNSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzA2IFRKbQotKGN1c3RvbSkgMjguNzgyIFRqCi0tMzA1IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTMwNiBUSm0KLShhbGxvY2F0b3IpIDM0Ljg1OTEgVGoKLS0zMDYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLTcyIDI1OS4zMDggVGQKLShyZXF1aXJlZCwpIDM1LjY4NiBUagotLTM1MCBUSm0KLShvcikgOC4yOTg4NSBUagotLTMzMSBUSm0KLShtYWRlKSAyMS41NzkgVGoKLVsxIDAgMCAxIDE0Ny42MzUgMjU5LjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDcuNjM1IC0yNTkuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDcuNjM1IDI1OS4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oTlVMTCkgMjMuOTEwMiBUagotWzEgMCAwIDEgMTcxLjU0NiAyNTkuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3MS41NDYgLTI1OS4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3NC44MzUgMjU5LjMwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3IpIDExLjYxNjQgVGoKLS0zMzAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzMxIFRKbQotKG5vcm1hbCkgMjguMjI0IFRqCi1bMSAwIDAgMSAyMzYuNzIyIDI1OS4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjM2LjcyMiAtMjU5LjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM2LjcyMiAyNTkuMzA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG1hbGxvYykgMzUuODY1NCBUagotWzEgMCAwIDEgMjcyLjU4NyAyNTkuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi41ODcgLTI1OS4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3NS44NzggMjU5LjMwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgvKSAyLjc2OTYgVGoKLVsxIDAgMCAxIDI4MS45MzggMjU5LjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODEuOTM4IC0yNTkuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODEuOTM4IDI1OS4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZnJlZSkgMjMuOTEwMiBUagotWzEgMCAwIDEgMzA1Ljg0OCAyNTkuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwNS44NDggLTI1OS4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwOS4xMzkgMjU5LjMwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyb3V0aW5lcy4pIDM0LjU5MDEgVGoKLS0xMTAyIFRKbQotKFVwb24pIDIyLjEzNjkgVGoKLS0zMzAgVEptCi0ocmV0dXJuLCkgMjYuMjgxMyBUagotLTM1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzEgVEptCi0oaW50ZXJuYWwpIDMwLjQzNTcgVGoKLS0zMzAgVEptCi0oc3RhdGUpIDE4LjI2MTQgVGoKLS0zMzAgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTMzMCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzMxIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLTcyIDI0Ny4zNTMgVGQKLShpbml0aWFsaXNlZCwpIDQxLjc5MzEgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDEzMy4xNiAyNDcuMzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMy4xNiAtMjQ3LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMzLjE2IDI0Ny4zNTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDE4MC45OCAyNDcuMzUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4MC45OCAtMjQ3LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgzLjQ3MSAyNDcuMzUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMDAuMzQ4IDI0Ny4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAwLjM0OCAtMjQ3LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAwLjM0OCAyNDcuMzUzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRvdGFsX291dCkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyNTQuMTQ2IDI0Ny4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU0LjE0NiAtMjQ3LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU2LjYzNyAyNDcuMzUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oemVyby4pIDE5LjYzNjMgVGoKLVsxIDAgMCAxIDcyIDI0NS45MTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzNS45NTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIyNS40MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG1lYW5pbmcpIDM0LjMxMTIgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0ocGFyYW1ldGVyKSAzOS44MzA1IFRqCi1bMSAwIDAgMSAxOTIuNzU2IDIyNS40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTkyLjc1NiAtMjI1LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTkyLjc1NiAyMjUuNDM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyNDYuNTU0IDIyNS40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ2LjU1NCAtMjI1LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ2LjU1NCAyMjUuNDM1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oc2VlKSAxMi43MjIyIFRqCi1bMSAwIDAgMSAyNjYuNzQ4IDIyNS40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY2Ljc0OCAtMjI1LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY2Ljc0OCAyMjUuNDM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgMzc0LjM0NSAyMjUuNDM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3NC4zNDUgLTIyNS40MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3NC4zNDUgMjI1LjQzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyMjMuMjc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMTMuMzE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMDMuNTE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi1bMSAwIDAgMSA4MS40OTc1IDIwMy41MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODEuNDk3NSAtMjAzLjUxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODEuNDk3NSAyMDMuNTE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHNtYWxsKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMTEuMzg1IDIwMy41MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTExLjM4NSAtMjAzLjUxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE0LjI0OCAyMDMuNTE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjg3IFRKbQotKG5vbnplcm8sKSAzNC41ODAyIFRqCi0tMjk3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjg4IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yODcgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjg3IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjg3IFRKbQotKGFsdGVybmF0aSkgMzIuNjQ3NCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjg4IFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yODcgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjg3IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjg4IFRKbQotKHVzZXMpIDE3LjE1NTYgVGoKLS0yODcgVEptCi0obGVzcykgMTQuOTQzOSBUagotLTI4NyBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yODcgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjg4IFRKbQotKGF0KSA3LjE5MyBUagotLTI4NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDE5MS41NjIgVGQKLShjb3N0KSAxNi4wNDk3IFRqCi0tMjg5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjkwIFRKbQotKGRlY29tcHJlc3NpbmcpIDU5Ljc2NTYgVGoKLS0yODkgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI4OSBUSm0KLShzbG8pIDExLjYyNjQgVGoKLTI1IFRKbQotKHdseSkgMTQuOTQzOSBUagotLTI5MCBUSm0KLShcKHJvdWdobHkpIDM0LjMxMTIgVGoKLS0yODkgVEptCi0oc3BlYWtpbmcsKSAzNy45MDc3IFRqCi0tMjk5IFRKbQotKGhhbGYpIDE1LjQ5MTggVGoKLS0yOTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKHNwZWVkLCkgMjUuMTc1NSBUagotLTI5OSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjkwIFRKbQotKG1heGltdW0pIDQwLjQwODMgVGoKLS0yODkgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjg5IFRKbQotKHJlcXVpcmVtZW50KSA0OC4xMzkzIFRqCi0tMjkwIFRKbQotKGRyb3BzKSAyMi4xMzY5IFRqCi03MiAxNzkuNjA3IFRkCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhcm91bmQpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0oMjMwMGtcKS4pIDMwLjcxNDcgVGoKLS02MjAgVEptCi0oU2VlKSAxNC4zODYgVGoKLVsxIDAgMCAxIDE2Ni4xNjYgMTc5LjYwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMV0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMV0gU0MKLVsxIDAgMCAxIC0xNjYuMTY2IC0xNzkuNjA3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuMTY2IDE3OS42MDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSG8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi1bMSAwIDAgMSAyMzUuOTI0IDE3OS42MDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDFdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDFdIFNDCi1bMSAwIDAgMSAtMjM1LjkyNCAtMTc5LjYwN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM4LjQxNSAxNzkuNjA3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFsyXSkgMTEuNjE2NCBUagotWzEgMCAwIDEgMjUwLjAzMSAxNzkuNjA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAxXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAxXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1MC4wMzEgLTE3OS42MDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1Mi41MjIgMTc5LjYwNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShpbmZvcm1hdGlvbikgNDcuMDQzNCBUagotLTI1MCBUSm0KLShvbikgOS45NjI2IFRqCi0tMjUwIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShtYW5hZ2VtZW50LikgNTMuMzk5NSBUagotWzEgMCAwIDEgNzIgMTc3LjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjcuNDg3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNTcuNjg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE5vdGUpIDE5LjM2NzMgVGoKLS0yODkgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI5MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi0tMjg5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg5IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI5MCBUSm0KLShuZWVkZWQpIDI4LjIxNDEgVGoKLS0yODkgVEptCi0odG8pIDcuNzUwOSBUagotLTI4OSBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tMjg5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTAgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjg5IFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTI4OSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI4OSBUSm0KLShkZXRlcm1pbmVkKSA0NC44MjE3IFRqCi0tMjkwIFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tMjg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShzdHJlYW0nKSAyOS44Nzc4IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjg5IFRKbQotKGhlYWRlcikgMjYuNTUwMyBUagotLTI5MCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLTcyIDE0NS43MzQgVGQKLShiZWVuKSAxOC44MDk0IFRqCi0tMzQyIFRKbQotKHJlYWQsKSAxOS42MzYzIFRqCi0tMzY2IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMzQyIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0zNDIgVEptCi0oaWYpIDYuMDg3MTUgVGoKLVsxIDAgMCAxIDE2MS4wODEgMTQ1LjczNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjEuMDgxIC0xNDUuNzM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjEuMDgxIDE0NS43MzQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLVsxIDAgMCAxIDI4MC42MzMgMTQ1LjczNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODAuNjMzIC0xNDUuNzM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODQuMDQzIDE0NS43MzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc3VjY2VlZHMsKSAzNy44OTc3IFRqCi0tMzY1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNDMgVEptCi0oc3Vic2VxdWVudCkgNDQuMjczOCBUagotWzEgMCAwIDEgMzgxLjA5OCAxNDUuNzM0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4MS4wOTggLTE0NS43MzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM4MS4wOTggMTQ1LjczNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDQ3Ni43MzkgMTQ1LjczNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzYuNzM5IC0xNDUuNzM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODAuMTQ5IDE0NS43MzQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY291bGQpIDIyLjEzNjkgVGoKLS0zNDIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlsKSA5Ljk2MjYgVGoKLS0zNDMgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNzIgMTMzLjc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTMzLjc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTMzLjc3OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgMTMzLjc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC0xMzMuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDMuNzMxIDEzMy43NzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTMyLjQ2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTIyLjUwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTExLjg2MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDExMS43NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC02MC45MDk1XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE2KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDIwIDIwCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTE3LjE5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA5NS42NDEzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOTIuMDU0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTcxMS42MzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDcxMS42MzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfQ09ORklHX0VSUk9SKSA4OS42NjM0IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obGlicmFyeSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShtaXMtY29tcGlsZWQpIDcxLjczMDcgVGoKLTkwIDY4Ny43MjEgVGQKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSA2NzUuNzY2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oc21hbGwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oIT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgmJikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzbWFsbCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgxKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi05OC40ODc5IDY2My44MTEgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKHZlcmJvc2l0eSkgNTkuNzc1NiBUagotLTQyNiBUSm0KLSg8OykgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHx8KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oNFwpKSAxMS45NTUxIFRqCi05MCA2NTEuODU2IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDYzOS45IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oaW5zdWZmaWNpZW50KSA3MS43MzA3IFRqCi0tNDI2IFRKbQotKG1lbW9yeSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNjI0LjM1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MTQuMzk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MDIuNDQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiA2MDIuMzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNDguODE2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA0Ny44MjA3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNDQuMjM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTU5Mi45NzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDU5Mi45NzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi05OC40ODc5IDU4MS4wMjEgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ocmV0dXJuZWQpIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgNTY5LjA2NiBUZAotKG5vKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHNwZWNpZmljKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGFjdGlvbikgMzUuODY1NCBUagotLTQyNiBUSm0KLShyZXF1aXJlZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShjYXNlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA3MiA1NTMuNTI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQzLjU2Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTIyLjkwMyBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy4zLjUuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDUyMi45MDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtNTIyLjkwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCA1MjIuOTAzIFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpEZWNvbXByZXNzKSAxNjUuMjY4IFRqCi1bMSAwIDAgMSAyODUuMTI2IDUyMi45MDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEzLjEyNiAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTUxMS4yMDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUxMS4yMDYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiel9zdHJlYW0pIDUzLjc5OCBUagotMjgwLjMyNiA1MDkuNDYyIFRkCi0oKikgNS45Nzc1NiBUagotMjg2LjMwMyA1MTEuMjA2IFRkCi0oc3RybSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDQ5NS42NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDczLjc0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm8pIDEzLjgzODEgVGoKLTE1IFRKbQotKHZpZGVzKSAyMS4wMzEgVGoKLS0zMDEgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTMwMiBUSm0KLShpbnB1dCkgMjAuNDgzMSBUagotLTMwMSBUSm0KLShhbmQvb3V0KSAyOS44ODc4IFRqCi0tMzAyIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTMwMSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0zMDEgVEptCi0oc3BhY2UpIDIyLjEyNjkgVGoKLS0zMDIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzAxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwMiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tOTI4IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTMwMSBUSm0KLShjYWxsZXIpIDIyLjEyNjkgVGoKLS0zMDIgVEptCi0obWFpbnRhaW5zKSAzOC43NDQ2IFRqCi0tMzAxIFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMzAyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzAxIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTMwMSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXJzLCkgMTcuNDI0NiBUagotLTMxNSBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgNDYxLjc5MSBUZAotKHVzZXMpIDE3LjE1NTYgVGoKLVsxIDAgMCAxIDkxLjY0NjEgNDYxLjc5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MS42NDYxIC00NjEuNzkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MS42NDYxIDQ2MS43OTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxODcuMjg3IDQ2MS43OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg3LjI4NyAtNDYxLjc5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg5Ljc3OCA0NjEuNzkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odHJhbnNmZXIpIDMwLjQyNTggVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShiZXR3ZWVuKSAzMy4xOTU0IFRqCi0tMjUwIFRKbQotKHRoZW0uKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA3MiA0NjAuMjU3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NTAuMjk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzkuODczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEJlZm9yZSkgMjcuMTA4MiBUagotLTQ5OCBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tNDk5IFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTQ5OCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNTkuMzU2IDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU5LjM1NiAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU5LjM1NiA0MzkuODczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgMjU0Ljk5NyA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1NC45OTcgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1NC45OTcgNDM5Ljg3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNjMuMDcxIDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYzLjA3MSAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYzLjA3MSA0MzkuODczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfaW4pIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDMwNC45MTQgNDM5Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDQuOTE0IC00MzkuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDkuODc5IDQzOS44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tNDk4IFRKbQotKHBvaW50KSAyMC40ODMxIFRqCi0tNDk5IFRKbQotKGF0KSA3LjE5MyBUagotLTQ5OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00OTggVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTQ5OSBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTU2MCBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDkyLjE3OSA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Mi4xNzkgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Mi4xNzkgNDM5Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdmFpbF9pbikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQwIDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTQwIC00MzkuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjcuOTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTMwOCBUSm0KLShpbmRpY2F0ZSkgMzEuNTQxNiBUagotLTMwOCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMwOSBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTMwOCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMzA4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMwOCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMzA4IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTMwOSBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotWzEgMCAwIDEgMjk0Ljk1NSA0MjcuOTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NC45NTUgLTQyNy45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5NC45NTUgNDI3LjkxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLVsxIDAgMCAxIDM5MC41OTcgNDI3LjkxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTAuNTk3IC00MjcuOTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTMuNjY3IDQyNy45MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odXBkYXRlcykgMzAuNDM1NyBUagotWzEgMCAwIDEgNDI3LjE3MyA0MjcuOTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyNy4xNzMgLTQyNy45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNy4xNzMgNDI3LjkxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShuZXh0X2luKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA0NjkuMDE2IDQyNy45MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY5LjAxNiAtNDI3LjkxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY5LjAxNiA0MjcuOTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQ3NC43MjMgNDI3LjkxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzQuNzIzIC00MjcuOTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzQuNzIzIDQyNy45MTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDUyMi41NDMgNDI3LjkxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MjIuNTQzIC00MjcuOTE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjUuNjE0IDQyNy45MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDcyIDQxNS45NjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQxNS45NjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQxNS45NjMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfaW4pIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDExOS44MjEgNDE1Ljk2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODIxIC00MTUuOTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjIuMzExIDQxNS45NjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShyZVwwMDNlY3QpIDI0Ljg5NjUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMjUwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotWzEgMCAwIDEgNzIgNDEzLjgwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDAzLjg0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzk0LjA0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShTaW1pbGFybHkpIDM3LjA5MDggVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDExMy43OTkgMzk0LjA0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuNzk5IC0zOTQuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTMuNzk5IDM5NC4wNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmV4dF9vdXQpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDE2MS42MiAzOTQuMDQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS42MiAtMzk0LjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY0LjQxIDM5NC4wNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjgwIFRKbQotKHBvaW50KSAyMC40ODMxIFRqCi0tMjgwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODAgVEptCi0oYSkgNC40MjMzOSBUagotLTI4MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0yODAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI4MSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTI4MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODAgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0yODAgVEptCi0ob3V0cHV0KSAyNS40NjQ0IFRqCi0tMjgwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjgwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODAgVEptCi0ocGxhY2VkLCkgMjguNDkzIFRqCi0tMjg4IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ4Ni4yMDIgMzk0LjA0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODYuMjAyIC0zOTQuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODYuMjAyIDM5NC4wNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDU0MCAzOTQuMDQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMzk0LjA0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzgyLjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGluZGljYXRpbmcpIDM5Ljg1MDQgVGoKLS01MjUgVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS01MjQgVEptCi0obXVjaCkgMjIuMTM2OSBUagotLTUyNSBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS01MjQgVEptCi0oc3BhY2UpIDIyLjEyNjkgVGoKLS01MjUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS01MjUgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMjg1Ljc5MiAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg1Ljc5MiAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODUuNzkyIDM4Mi4wOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMzY5LjQ3OCAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzY5LjQ3OCAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzQuNzA1IDM4Mi4wOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1cGRhdGVzKSAzMC40MzU3IFRqCi1bMSAwIDAgMSA0MTAuMzY3IDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTAuMzY3IC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMC4zNjcgMzgyLjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5leHRfb3V0KSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0NTguMTg4IDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTguMTg4IC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OC4xODggMzgyLjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQ2Ni41ODkgMzgyLjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2Ni41ODkgLTM4Mi4wOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDY2LjU4OSAzODIuMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYXZhaWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDUyMC4zODcgMzgyLjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUyMC4zODcgLTM4Mi4wOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTI1LjYxNCAzODIuMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDcyIDM3MC4xMzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM3MC4xMzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM3MC4xMzUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odG90YWxfb3V0KSA1My43OTggVGoKLVsxIDAgMCAxIDEyNS43OTggMzcwLjEzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjUuNzk4IC0zNzAuMTM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjguMjg5IDM3MC4xMzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShyZVwwMDNlY3QpIDI0Ljg5NjUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tMjUwIFRKbQotKG91dHB1dC4pIDI3Ljk1NTEgVGoKLVsxIDAgMCAxIDcyIDM2Ny45NzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM1OC4wMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM0OC4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMzIwIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTMyMSBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGUpIDE3LjE1NTYgVGoKLS0zMjAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zMjEgVEptCi0ocmVtbykgMjAuNDczMSBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzIwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzIxIFRKbQotKGxpdHRsZSkgMTguMjcxNCBUagotLTMyMCBUSm0KLShvcikgOC4yOTg4NSBUagotLTMyMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTMyMSBUSm0KLShtdWNoKSAyMi4xMzY5IFRqCi0tMzIwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMjEgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMjAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzIxIFRKbQotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTMyMCBUSm0KLShvbikgOS45NjI2IFRqCi0tMzIwIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0zMjEgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMzIwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MDcuODE2IDM0OC4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA3LjgxNiAtMzQ4LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA3LjgxNiAzNDguMjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgNTAzLjQ1NyAzNDguMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwMy40NTcgLTM0OC4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwMy40NTcgMzQ4LjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTA0MyBUSm0KLShJbikgOC4yOTg4NSBUagotLTMyMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDMzNi4yNjIgVGQKLShsaW1pdCwpIDIxLjMyIFRqCi0tMjk1IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjg2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjg3IFRKbQotKGFjY2VwdGFibGUpIDQyLjA0MjIgVGoKLS0yODYgVEptCi0odG8pIDcuNzUwOSBUagotLTI4NiBUSm0KLShzdXBwbHkpIDI2LjU3MDMgVGoKLS0yODYgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODcgVEptCi0ocmVtbykgMjAuNDczMSBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjg2IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yODYgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yODYgVEptCi0oYnl0ZSkgMTcuMTU1NiBUagotLTI4NyBUSm0KLShhdCkgNy4xOTMgVGoKLS0yODYgVEptCi0oYSkgNC40MjMzOSBUagotLTI4NiBUSm0KLSh0aW1lLCkgMjAuMjA0MiBUagotLTI5NSBUSm0KLShhbHRob3VnaCkgMzQuODY5MSBUagotLTI4NiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yODcgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yODYgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODYgVEptCi0odGVycmlibHkpIDI5LjMyOTkgVGoKLS0yODYgVEptCi0oaW5lZikgMTUuNDkxOCBUagotMjUgVEptCi0oXDAwMmNpZW50LikgMjcuMzk3MiBUagotLTgzOCBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLTcyIDMyNC4zMDYgVGQKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oYWwpIDcuMTkzIFRqCi0xMCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXlzKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKGVuc3VyZSkgMjYuMDAyNCBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGF0KSA3LjE5MyBUagotLTI1MCBUSm0KLShsZWFzdCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI1MCBUSm0KLShieXRlKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShzcGFjZSkgMjIuMTI2OSBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFpbGFibGUpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yNTAgVEptCi0oY2FsbC4pIDE2Ljg3NjYgVGoKLVsxIDAgMCAxIDcyIDMyMi4xNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzEyLjE4N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzAyLjM4OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShVc2UpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDEwMC43NzIgMzAyLjM4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDAuNzcyIC0zMDIuMzg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDAuNzcyIDMwMi4zODkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxOTYuNDEzIDMwMi4zODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk2LjQxMyAtMzAyLjM4OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk4LjkwNCAzMDIuMzg5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHNpbXBsZXIpIDI5Ljg4NzggVGoKLS0yNTAgVEptCi0odGhhbikgMTcuMTU1NiBUagotWzEgMCAwIDEgMjYwLjA2NCAzMDIuMzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MC4wNjQgLTMwMi4zODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2MC4wNjQgMzAyLjM4OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMzQzLjc1IDMwMi4zODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQzLjc1IC0zMDIuMzg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDMuNzUgMzAyLjM4OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAzMDAuMjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yOTAuMjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyODAuNDcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTM0NiBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zNDcgVEptCi0ocHJvKSAxMy4yODAxIFRqCi0xNSBUSm0KLSh2aWRlKSAxNy4xNTU2IFRqCi0tMzQ2IFRKbQotKGlucHV0KSAyMC40ODMxIFRqCi0tMzQ2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ2IFRKbQotKHJlbW8pIDIwLjQ3MzEgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTM0NyBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0zNDYgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zNDYgVEptCi0oZGVzY3JpYmVkKSAzOC4xNzY3IFRqCi0tMzQ2IFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUsKSA2LjkxNDA0IFRqCi0tMzcxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ2IFRKbQotKHJlcGVhdGVkbHkpIDQxLjQ5NDIgVGoKLS0zNDYgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0MjIuNjM4IDI4MC40NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIyLjYzOCAtMjgwLjQ3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIyLjYzOCAyODAuNDcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3MpIDk1LjY0MSBUagotWzEgMCAwIDEgNTE4LjI3OSAyODAuNDcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxOC4yNzkgLTI4MC40NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyMS43MjkgMjgwLjQ3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1bnRpbCkgMTguMjcxNCBUagotWzEgMCAwIDEgNzIgMjY4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjY4LjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjY4LjUxNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxNDkuNzA5IDI2OC41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjcwOSAtMjY4LjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUyLjMxNCAyNjguNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjYyIFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tMzQ0IFRKbQotKEFwcGVhcmFuY2UpIDQ3LjU3MTQgVGoKLS0yNjIgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDI2MS43NjcgMjY4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjEuNzY3IC0yNjguNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjEuNzY3IDI2OC41MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMzM5LjQ3NSAyNjguNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzOS40NzUgLTI2OC41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0Mi4wODEgMjY4LjUxNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkZW5vdGVzKSAzMC40MzU3IFRqCi0tMjYyIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLVsxIDAgMCAxIDM5Mi42NzIgMjY4LjUxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTIuNjcyIC0yNjguNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTIuNjcyIDI2OC41MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSA0ODguMzEzIDI2OC41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDg4LjMxMyAtMjY4LjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDkwLjkxOSAyNjguNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGhhcykgMTMuMjgwMSBUagotLTI2MiBUSm0KLShkZXRlY3RlZCkgMzMuMTk1NCBUagotNzIgMjU2LjU2MSBUZAotKHRoZSkgMTIuMTc0MyBUagotLTIxMiBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tMjEyIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tMjExIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjEyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIxMiBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjEyIFRKbQotKHN0cmVhbS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDIzNy44NTggMjU2LjU2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzcuODU4IC0yNTYuNTYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzcuODU4IDI1Ni41NjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAzMzMuNDk5IDI1Ni41NjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMzLjQ5OSAtMjU2LjU2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM1LjYwOSAyNTYuNTYxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yMTIgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjEyIFRKbQotKHByb2R1Y2UpIDMyLjA4OTUgVGoKLVsxIDAgMCAxIDQwMi4yNjMgMjU2LjU2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDIuMjYzIC0yNTYuNTYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDIuMjYzIDI1Ni41NjEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgNDc5Ljk3MiAyNTYuNTYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3OS45NzIgLTI1Ni41NjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Mi4wODIgMjU2LjU2MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1bnRpbCkgMTguMjcxNCBUagotLTIxMiBUSm0KLShhbGwpIDkuOTYyNiBUagotLTIxMiBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLTcyIDI0NC42MDUgVGQKLShkYXRhKSAxNi41OTc3IFRqCi0tMjU2IFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1NiBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMjU1IFRKbQotKHBsYWNlZCkgMjYuMDAyNCBUagotLTI1NiBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjU2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1NiBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yNTYgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjU3IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjU2IFRKbQotKG9uY2UpIDE4LjgwOTQgVGoKLVsxIDAgMCAxIDI3OC45NzggMjQ0LjYwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguOTc4IC0yNDQuNjA1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzguOTc4IDI0NC42MDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMzU2LjY4NyAyNDQuNjA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Ni42ODcgLTI0NC42MDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1OS4yMzYgMjQ0LjYwNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcHBlYXJzLCkgMzIuOTE2NCBUagotLTI1NyBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTYgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjU2IFRKbQotKGd1YXJhbnRlZWQpIDQzLjcwNTkgVGoKLS0yNTYgVEptCi0odG8pIDcuNzUwOSBUagotLTI1NiBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjU1IFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWlsYWJsZSkgMjYuNTYwMyBUagotNzIgMjMyLjY1IFRkCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3NlZCkgNTYuNDM4MSBUagotLTI1MCBUSm0KLShvdXRwdXQsKSAyNy45NTUxIFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMDUuMzY5IDIzMi42NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDUuMzY5IC0yMzIuNjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNS4zNjkgMjMyLjY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NFbmQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDMxOC45NDMgMjMyLjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxOC45NDMgLTIzMi42NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIxLjQzMyAyMzIuNjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oY2FuKSAxMy44MjgxIFRqCi0tMjUwIFRKbQotKHNhZmVseSkgMjMuNzkwNyBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShjYWxsZWQuKSAyNi4yODEzIFRqCi1bMSAwIDAgMSA3MiAyMzAuNDkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMjAuNTMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMTAuNzMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMjUwIFRKbQotKGNhc2UpIDE3LjE0NTYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZSwpIDE5LjA4ODMgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI2MS4yNTkgMjEwLjczMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjEuMjU5IC0yMTAuNzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjEuMjU5IDIxMC43MzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMzc0LjgzMyAyMTAuNzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM3NC44MzMgLTIxMC43MzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3Ny4zMjMgMjEwLjczMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGNsZWFuKSAyMS4wMjExIFRqCi0tMjUwIFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0ocmVsZWFzZSkgMjcuNjU2MiBUagotLTI1MCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDIwOC41NzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE5OC42MTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE4OC44MTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXM6KSAyMy4yNDI3IFRqCi1bMSAwIDAgMSA3MiAxODguNzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTM3Ljg2M10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgxNykgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAyMSAyMQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIwMC44ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTc5LjMyOCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDE3NS43NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybS0+cykgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDY4Ny43MjEgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJtLT5hdmFpbF9vdXQpIDg5LjY2MzQgVGoKLS00MjYgVEptCi0oPCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgxKSA1Ljk3NzU2IFRqCi05MCA2NzUuNzY2IFRkCi0oQlpfREFUQV9FUlJPUikgNzcuNzA4MyBUagotOTguNDg3OSA2NjMuODExIFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGludGVncml0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGRldGVjdGVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKHN0cmVhbSkgMzUuODY1NCBUagotOTAgNjUxLjg1NiBUZAotKEJaX0RBVEFfRVJST1JfTUFHSUMpIDExMy41NzQgVGoKLTk4LjQ4NzkgNjM5LjkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcHJlc3NlZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShzdHJlYW0pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZG9lc24ndCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShiZWdpbikgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3aXRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShyaWdodCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShtYWdpYykgMjkuODg3OCBUagotLTQyNiBUSm0KLShieXRlcykgMjkuODg3OCBUagotOTAgNjI3Ljk0NSBUZAotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotOTguNDg3OSA2MTUuOTkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGVyZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3YXNuJ3QpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZW5vdWdoKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKG1lbW9yeSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotOTAgNjA0LjAzNSBUZAotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLTk4LjQ4NzkgNTkyLjA4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxvZ2ljYWwpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHN0cmVhbSkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oZGV0ZWN0ZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFsbCkgMTcuOTMyNyBUagotOTguNDg3OSA1ODAuMTI1IFRkCi0ob3V0cHV0KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGNvbnN1bWVkLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGVnKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHMtLT5hdmFpbF9vdXQpIDc3LjcwODMgVGoKLS00MjYgVEptCi0oPikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi05MCA1NjguMTY5IFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNTU2LjIxNCBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiA1NDAuNjczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUzMC43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE4Ljc1NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3Rpb25zOikgMzAuOTkzNiBUagotWzEgMCAwIDEgNzIgNTE4LjY1NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01MDkuMjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUwOS4yOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzKSA5NS42NDEgVGoKLTk4LjQ4NzkgNDk3LjMzNSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShyZXR1cm5lZCkgNDcuODIwNSBUagotOTAgNDg1LjM4IFRkCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotOTguNDg3OSA0NzMuNDI1IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDQ1Ny44ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NDcuOTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyNy4yNjIgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuMy42LikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCA0MjcuMjYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTQyNy4yNjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggNDI3LjI2MiBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTk2LjI1NiBUagotWzEgMCAwIDEgMzE2LjExNCA0MjcuMjYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NC4xMTQgLTIuMzMyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC00MTUuNTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA0MTUuNTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShCWjJfYnpEZWNvbXByZXNzRW5kKSAxMTMuNTc0IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi0yOTguMjU5IDQxMy44MjEgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zMDQuMjM2IDQxNS41NjQgVGQKLShzdHJtKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgNDAwLjAyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTAuMDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM3OC4xMDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVsZWFzZXMpIDM0Ljg1OTEgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjUwIFRKbQotKGFzc29jaWF0ZWQpIDQwLjk0NjMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGRlY29tcHJlc3Npb24pIDU5Ljc2NTYgVGoKLS0yNTAgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgNzIgMzc1Ljk0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzY1Ljk4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzU2LjE4NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDM1Ni4wODddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC02MC43NzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDU5Ljc3NTggcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA1Ni4xODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzQ2LjcyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzQ2LjcyMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSAzMzQuNzY3IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc3RybSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHN0cm0tPnMpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotOTAgMzIyLjgxMiBUZAotKEJaX09LKSAyOS44ODc4IFRqCi05OC40ODc5IDMxMC44NTcgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMjk1LjMxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODUuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNzMuMzk3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiAyNzMuMjk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTI2My45MzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk4LjQ4NzkgMjYzLjkzMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShOb25lLikgMjkuODg3OCBUagotWzEgMCAwIDEgNzIgMjQ4LjM5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzOC40MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIxMy42MzkgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDMuNC4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oSGlnaC1sZSkgNzAuMDExNyBUagotMTUgVEptCi0odmVsKSAyOC43MTUzIFRqCi0tMjc4IFRKbQotKGludGVyZmFjZSkgODYuMTA0NiBUagotWzEgMCAwIDEgNzIgMjA5LjA0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTk5LjA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxOTEuNzIxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oaW50ZXJmKSAyMS41NzkgVGoKLTEwIFRKbQotKGFjZSkgMTMuMjcwMiBUagotLTI1MCBUSm0KLShwcm8pIDEzLjI4MDEgVGoKLTE1IFRKbQotKHZpZGVzKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShyZWFkaW5nKSAyOS44Nzc4IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHdyaXRpbmcpIDI4Ljc4MiBUagotWzEgMCAwIDEgMzAwLjI5MiAxOTEuNzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMC4yOTIgLTE5MS43MjFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMC4yOTIgMTkxLjcyMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMzMwLjE4IDE5MS43MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMwLjE4IC0xOTEuNzIxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMzIuNjcgMTkxLjcyMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS02MjAgVEptCi0oRmlyc3QsKSAyMC43NjIxIFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShnZW5lcmFsKSAyOS4zMTk5IFRqCi0tMjUwIFRKbQotKHBvaW50cy4pIDI2Ljg0OTIgVGoKLVsxIDAgMCAxIDcyIDE4OS41NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOS43MjM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMTU5Ljg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDE1OS44NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAxNTkuODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsKSAxMi43MzIyIFRqCi0tMzMyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzMxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzMiBUSm0KLShmdW5jdGlvbnMpIDM3LjA4MDggVGoKLS0zMzIgVEptCi0odGFrKSAxMi4xNzQzIFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzMxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi1bMSAwIDAgMSAyMDIuOTU4IDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDIuOTU4IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMi45NTggMTU5Ljg0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotMjIwLjg5MSAxNTguMDk3IFRkCi0oKikgNS45Nzc1NiBUagotWzEgMCAwIDEgMjI2Ljg2OCAxNTkuODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI2Ljg2OCAtMTU5Ljg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzAuMTcyIDE1OS44NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMzMyIFRKbQotKGFyKSA3Ljc0MDk0IFRqCi0xOCBUSm0KLShndW1lbnQsKSAzMi4zNzg1IFRqCi1bMSAwIDAgMSAyOTIuNDI2IDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTIuNDI2IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5Mi40MjYgMTU5Ljg0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDMzNC4yNjkgMTU5Ljg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNC4yNjkgLTE1OS44NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM0LjI2OSAxNTkuODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTExMTAgVEptCi0oQWZ0ZXIpIDIxLjAyMTEgVGoKLS0zMzIgVEptCi0oZWFjaCkgMTguMjUxNSBUagotLTMzMSBUSm0KLShjYWxsLCkgMTYuODc2NiBUagotWzEgMCAwIDEgNDE0LjA4MyAxNTkuODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE0LjA4MyAtMTU5Ljg0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTQuMDgzIDE1OS44NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA0NTUuOTI2IDE1OS44NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTUuOTI2IC0xNTkuODRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1OS4yMyAxNTkuODQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMzMyIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzMxIFRKbQotKGNvbnN1bHRlZCkgMzguMTg2NiBUagotODYuOTQ0IDE0Ny44ODUgVGQKLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMzQ5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNDkgVEptCi0oZGV0ZXJtaW5lKSAzOS44NDA0IFRqCi0tMzQ4IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OSBUSm0KLShvdXRjb21lKSAzNC4zMTEyIFRqCi0tMzQ5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzQ5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OCBUSm0KLShjYWxsLikgMTYuODc2NiBUagotLTEyMTMgVEptCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDI4MC4zODYgMTQ3Ljg4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODAuMzg2IC0xNDcuODg1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODAuMzg2IDE0Ny44ODUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMzIyLjIyOSAxNDcuODg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMi4yMjkgLTE0Ny44ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNS43MDQgMTQ3Ljg4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotWzEgMCAwIDEgMzM1LjgyNCAxNDcuODg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNS44MjQgLTE0Ny44ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzNS44MjQgMTQ3Ljg4NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMzY1LjcxMSAxNDcuODg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2NS43MTEgLTE0Ny44ODVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2NS43MTEgMTQ3Ljg4NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzQ5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM0OSBUSm0KLShjYWxsKSAxNC4zODYgVGoKLS0zNDggVEptCi0oY29tcGxldGVkKSA0MS41MDQyIFRqCi0tMzQ5IFRKbQotKHN1Y2Nlc3NmdWxseSkgNDguNjk3MiBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTM3NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM0OCBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi04Ni45NDQgMTM1LjkzIFRkCi0odGhlbikgMTcuMTU1NiBUagotLTI3MSBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNzAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcxIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI3MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUpIDE2LjU5NzcgVGoKLS0yNzEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNzEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjcwIFRKbQotKGZ1bmN0aW9uKSAzMy4yMDUzIFRqCi0tMjcxIFRKbQotKFwoaWYpIDkuNDA0NjkgVGoKLS0yNzAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHlcKSkgOC4yOTg4NSBUagotLTI3MSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI3MSBUSm0KLShjb25zKSAxOC4yNjE0IFRqCi0xIFRKbQotKHUpIDQuOTgxMyBUagotLTEgVEptCi0obCkgMi43Njk2IFRqCi0xIFRKbQotKHRlZC4pIDE0LjY2NDkgVGoKLS03NDQgVEptCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDM2NS4wNzcgMTM1LjkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2NS4wNzcgLTEzNS45M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY1LjA3NyAxMzUuOTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgNDA2LjkyIDEzNS45M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDYuOTIgLTEzNS45M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA5LjYxNiAxMzUuOTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLVsxIDAgMCAxIDQxOC45NTYgMTM1LjkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxOC45NTYgLTEzNS45M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE4Ljk1NiAxMzUuOTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfSU9fRVJST1IpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQ4NC43MSAxMzUuOTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDg0LjcxIC0xMzUuOTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4NC43MSAxMzUuOTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI3MSBUSm0KLSh0aGVyZSkgMTkuOTE1MiBUagotLTI3MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNzEgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTg2Ljk0NCAxMjMuOTc1IFRkCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNDYgVEptCi0ocmVhZGluZy93cml0aW5nKSA2MS40Mjk0IFRqCi0tMjQ1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0NiBUSm0KLSh1bmRlcmx5aW5nKSA0My4xNjc5IFRqCi0tMjQ2IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNDUgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTI0NyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI0NSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNDYgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjQ2IFRKbQotKHRoZW4pIDE3LjE1NTYgVGoKLS0yNDUgVEptCi0oY29uc3VsdCkgMjguNzgyIFRqCi1bMSAwIDAgMSA0MTQuMDk2IDEyMy45NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE0LjA5NiAtMTIzLjk3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE0LjA5NiAxMjMuOTc1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGVycm5vKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA0NDMuOTg0IDEyMy45NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQzLjk4NCAtMTIzLjk3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQ2LjQzMiAxMjMuOTc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC8pIDIuNzY5NiBUagotWzEgMCAwIDEgNDUxLjY0OSAxMjMuOTc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1MS42NDkgLTEyMy45NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1MS42NDkgMTIzLjk3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShwZXJyb3IpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQ4Ny41MTQgMTIzLjk3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODcuNTE0IC0xMjMuOTc1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODkuOTYyIDEyMy45NzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI0NiBUSm0KLShkZXRlcm1pbmUpIDM5Ljg0MDQgVGoKLTg2Ljk0NCAxMTIuMDIgVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTYgVEptCi0oY2F1c2UpIDIyLjEyNjkgVGoKLS0zNTYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzU2IFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oXDAwMmN1bHR5KSAyNS40NjQ0IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyMDYuNTI4IDExMi4wMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDYuNTI4IC0xMTIuMDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwNi41MjggMTEyLjAyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDI0OC4zNzEgMTEyLjAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0OC4zNzEgLTExMi4wMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUxLjkxNiAxMTIuMDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0obWF5KSAxNy4xNTU2IFRqCi0tMzU2IFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLS0zNTYgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zNTUgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMzU2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNTYgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcmlvdXMpIDI0LjM0ODYgVGoKLS0zNTYgVEptCi0ob3RoZXIpIDIwLjQ3MzEgVGoKLS0zNTYgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczspIDIzLjI0MjcgVGoKLS00MDggVEptCi0ocHJlY2lzZSkgMjguMjE0MSBUagotLTM1NiBUSm0KLShkZXRhaWxzKSAyNi4wMTIzIFRqCi0tMzU2IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM1NiBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuKSA5LjQwNDY5IFRqCi0tMzU2IFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0zNTYgVEptCi0oYSkgNC40MjMzOSBUagotODYuOTQ0IDEwMC4wNjQgVGQKLShwZXIpIDEyLjcyMjIgVGoKLTIwIFRKbQotKC1mdW5jdGlvbikgMzYuNTIyOSBUagotLTI1MCBUSm0KLShiYXNpcykgMTkuOTI1MiBUagotLTI1MCBUSm0KLShiZWxvKSAxNy4xNTU2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgMTg2LjgzOSAxMDAuMDY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExNC44MzggLTQ5LjIxMjZdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MC45NTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUwLjk1MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMTgpIDkuOTYyNiBUagotWzEgMCAwIDEgNDUzLjI2OSA1MC44NTE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgOTMuNTk4NSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi4yNzY1IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotUQotc2hvd3BhZ2UKLSUlUGFnZVRyYWlsZXIKLXBkZkVuZFBhZ2UKLSUlUGFnZTogMjIgMjIKLSUlQmVnaW5QYWdlU2V0dXAKLSUlUGFnZU9yaWVudGF0aW9uOiBQb3J0cmFpdAotcGRmU3RhcnRQYWdlCi0wIDAgNjEyIDc5MiByZSBXCi0lJUVuZFBhZ2VTZXR1cAotW10gMCBkCi0xIGkKLTAgagotMCBKCi0xMCBNCi0xIHcKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLWZhbHNlIG9wCi1mYWxzZSBPUAotMCAwIDYxMiA3OTIgcmUKLVcKLXEKLVsxIDAgMCAxIDcyIDc0MS41NTRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAxNC40NDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTg3LjE5NyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IC04LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDc2LjQ5NzkgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDIuNTY5IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuMDY3IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk2LjU1NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni41NTYgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni41NTYgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ0LjM3NiA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zMS41MTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotWzEgMCAwIDEgOTUuOTU3NiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk1Ljk1NzYgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk1Ljk1NzYgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxMzcuODAxIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3LjgwMSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQwLjE3OSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGluZGljYXRlcykgMzUuNDE3IFRqCi0tMjM5IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjM4IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjM5IFRKbQotKFwoaWUsKSAxMy4wMDEyIFRqCi0tMjQxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5dGhpbmcpIDI1LjQ2NDQgVGoKLS0yMzkgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGNlcHQpIDIxLjU3OSBUagotWzEgMCAwIDEgMjkyLjIyNSA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5Mi4yMjUgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5Mi4yMjUgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMzIyLjExMyA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyMi4xMTMgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNC40OTIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzQxLjI1NiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0MS4yNTYgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0MS4yNTYgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSA0MTguOTY1IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE4Ljk2NSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE4Ljk2NSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpLCkgNS44MDgyIFRqCi0tMjM5IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTIzOSBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yMzggVEptCi0oaW1tZWRpYXRlbHkpIDQ5LjgxMyBUagotLTIzOSBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDg2Ljk0NCA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxNzYuNjA4IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc2LjYwOCAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc5LjM0MyA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwob3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDE5My42OTUgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTMuNjk1IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTMuNjk1IDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi1bMSAwIDAgMSAyODkuMzM3IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg5LjMzNyAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg5LjMzNyA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yODEgVEptCi0oZGVwZW5kaW5nKSA0MS41MDQyIFRqCi0tMjc0IFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNzUgVEptCi0od2hldGhlcikgMzIuMDg5NSBUagotLTI3NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNzUgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjc1IFRKbQotKGF0dGVtcHRpbmcpIDQyLjYyIFRqCi0tMjc0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNzUgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI3NCBUSm0KLShvcikgOC4yOTg4NSBUagotLTI3NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjc0IFRKbQotKHdyaXRlXCkpIDIzLjc5MDcgVGoKLTg2Ljk0NCA2ODYuMTI3IFRkCi0odG8pIDcuNzUwOSBUagotLTI0MiBUSm0KLShmcmVlKSAxNS40ODE5IFRqCi0tMjQyIFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yNDEgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNDIgVEptCi0ocmVzb3VyY2VzKSAzNy42MTg4IFRqCi0tMjQyIFRKbQotKGFzc29jaWF0ZWQpIDQwLjk0NjMgVGoKLS0yNDIgVEptCi0od2kpIDkuOTYyNiBUagotMSBUSm0KLSh0aCkgNy43NTA5IFRqCi0tMjQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MiBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi0tNjE0IFRKbQotKE9uY2UpIDIxLjAyMTEgVGoKLS0yNDIgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNDIgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNDIgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjQyIFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yNDEgVEptCi0oaW5kaWNhdGVkLCkgMzkuMDEzNSBUagotLTI0NCBUSm0KLShiZWhhKSAxOC44MDk0IFRqCi0yMCBUSm0KLSh2aW91cikgMjEuMDMxIFRqCi0tMjQxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjQyIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjQyIFRKbQotKGNhbGxzKSAxOC4yNjE0IFRqCi0tMjQyIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhjZXB0KSAyMS41NzkgVGoKLVsxIDAgMCAxIDg2Ljk0NCA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAxNzYuNjA4IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTc2LjYwOCAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc5LjcwNSA2NzQuMTcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAxODMuMDIyIDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgzLjAyMiAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgzLjAyMiA2NzQuMTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlQ2xvc2UpIDk1LjY0MSBUagotWzEgMCAwIDEgMjc4LjY2NCA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC42NjQgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3OC42NjQgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSkgMy4zMTc1NSBUagotLTMxMSBUSm0KLShpcykgNi42NDUwNSBUagotLTMxMSBUSm0KLSh1bmRlXDAwMm5lZC4pIDQxLjc4MzEgVGoKLS05ODUgVEptCi0oVGhlKSAxNS40OTE4IFRqCi0tMzExIFRKbQotKGltcGxpY2F0aW9uKSA0NS4zODk2IFRqCi0tMzEwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzExIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zMTEgVEptCi0oXCgxXCkpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDQ1NS45ODggNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NTUuOTg4IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTUuOTg4IDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgNDk3LjgzMSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ny44MzEgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwMC45MjggNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zMTEgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTg2Ljk0NCA2NjIuMjE3IFRkCi0oY2hlY2spIDIzLjIzMjggVGoKLTEwIFRKbQotKGVkKSA5LjQwNDY5IFRqCi0tMjkxIFRKbQotKGFmdGVyKSAxOC4yNTE1IFRqCi0tMjkxIFRKbQotKGVhY2gpIDE4LjI1MTUgVGoKLS0yOTEgVEptCi0oY2FsbCwpIDE2Ljg3NjYgVGoKLS0zMDEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTEgVEptCi0oXCgyXCkpIDExLjYxNjQgVGoKLS0yOTEgVEptCi0oaWYpIDYuMDg3MTUgVGoKLVsxIDAgMCAxIDIyNS4zNDcgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjUuMzQ3IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjUuMzQ3IDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjY3LjE5IDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjY3LjE5IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzAuMDkgNjYyLjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbmRpY2F0ZXMpIDM1LjQxNyBUagotLTI5MSBUSm0KLShhbikgOS40MDQ2OSBUagotLTI5MSBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMzQ1LjE2MSA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0NS4xNjEgLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0NS4xNjEgNjYyLjIxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDQzNC44MjQgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzQuODI0IC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzcuNzI0IDY2Mi4yMTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDQ0MS4wNDEgNjYyLjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDEuMDQxIC02NjIuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDEuMDQxIDY2Mi4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi1bMSAwIDAgMSA1MzYuNjgzIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM2LjY4MyAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM2LjY4MyA2NjIuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi04Ni45NDQgNjUwLjI2MiBUZAotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLSh0aGVuKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGNhbGxlZCkgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGNsZWFuKSAyMS4wMjExIFRqCi0tMjUwIFRKbQotKHVwLikgMTIuNDUzMyBUagotWzEgMCAwIDEgMjIwLjAzNCA2NTAuMjYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0OC4wMzQgLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC02MjguMzQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDYyOC4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA2MjguMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA2MjguMzQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotWzEgMCAwIDEgMTA2LjM2MiA2MjguMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwNi4zNjIgLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNi4zNjIgNjI4LjM0NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShGSUxFKSAyMy45MTAyIFRqCi0xMzAuMjczIDYyNi42IFRkCi0oKikgNS45Nzc1NiBUagotWzEgMCAwIDEgMTM2LjI1IDYyOC4zNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM2LjI1IC02MjguMzQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDAuMTc3IDYyOC4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYXIpIDcuNzQwOTQgVGoKLTE4IFRKbQotKGd1bWVudHMpIDMzLjc2MzMgVGoKLS0zOTQgVEptCi0ocGFzc2VkKSAyNi41NjAzIFRqCi0tMzk0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDIyNy41OTIgNjI4LjM0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjcuNTkyIC02MjguMzQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjcuNTkyIDYyOC4zNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLVsxIDAgMCAxIDMxMS4yNzggNjI4LjM0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTEuMjc4IC02MjguMzQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTUuMjA1IDYyOC4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLykgMi43Njk2IFRqCi1bMSAwIDAgMSAzMjEuOTAxIDYyOC4zNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzIxLjkwMSAtNjI4LjM0NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIxLjkwMSA2MjguMzQ0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotWzEgMCAwIDEgNDExLjU2NSA2MjguMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQxMS41NjUgLTYyOC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxNS40OTEgNjI4LjM0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0zOTQgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zOTQgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMzk0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zOTQgVEptCi0oYmluYXJ5KSAyNS40NTQ0IFRqCi0tMzk1IFRKbQotKG1vZGUuKSAyNC42Mjc1IFRqCi04Ni45NDQgNjE2LjM4OSBUZAotKE1vc3QpIDIwLjQ4MzEgVGoKLS0yMjkgVEptCi0oVW5peCkgMTkuOTI1MiBUagotLTIyOSBUSm0KLShzeXN0ZW1zKSAzMS41NTE2IFRqCi0tMjI4IFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yMjkgVEptCi0oZG8pIDkuOTYyNiBUagotLTIyOSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yMjkgVEptCi0oYnkpIDkuOTYyNiBUagotLTIyOSBUSm0KLShkZWYpIDEyLjcyMjIgVGoKLTEwIFRKbQotKGF1bHQsKSAxNy40MzQ2IFRqCi0tMjMzIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTIyOSBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTIyOSBUSm0KLShwbGF0Zm9ybXMsKSA0MC42NzczIFRqCi0tMjMzIFRKbQotKGluY2x1ZGluZykgMzcuNjM4NyBUagotLTIyOSBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbmRvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTIyOCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyOSBUSm0KLShNYWMsKSAyMC4xOTQyIFRqCi0tMjMzIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yMjkgVEptCi0obm90LikgMTUuMjIyOSBUagotLTYwNiBUSm0KLShJZikgNi42MzUwOSBUagotLTIyOSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMjkgVEptCi0ob21pdCkgMTguMjcxNCBUagotODYuOTQ0IDYwNC40MzMgVGQKLSh0aGlzLCkgMTYuODg2NiBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGVuY291bnRlcikgMzkuMjgyNSBUagotLTI1MCBUSm0KLShwcm9ibGVtcykgMzcuMDgwOCBUagotLTI1MCBUSm0KLSh3aGVuKSAyMS41NzkgVGoKLS0yNTAgVEptCi0obW8pIDEyLjczMjIgVGoKLTE1IFRKbQotKHZpbmcpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oY29kZSkgMTguODA5NCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MCBUSm0KLShwbGF0Zm9ybXMuKSA0MC42NzczIFRqCi1bMSAwIDAgMSAzNzIuNjYgNjA0LjQzM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDAuNjYgLTIxLjkxNzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC01ODIuNTE2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDU4Mi41MTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA1ODIuNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTU4Mi41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1ODIuNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1lbW9yeSkgMzQuMzExMiBUagotLTM0OCBUSm0KLShhbGxvY2F0aW9uKSAzOS4yOTI1IFRqCi0tMzQ4IFRKbQotKHJlcXVlc3RzKSAzMi42NDc0IFRqCi0tMzQ4IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM0OCBUSm0KLShoYW5kbGVkKSAzMS41NDE2IFRqCi0tMzQ4IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDI2Ny42NyA1ODIuNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2Ny42NyAtNTgyLjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY3LjY3IDU4Mi41MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obWFsbG9jKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzMDMuNTM1IDU4Mi41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAzLjUzNSAtNTgyLjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA3LjAwMyA1ODIuNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC8pIDIuNzY5NiBUagotWzEgMCAwIDEgMzEzLjI0MSA1ODIuNTE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxMy4yNDEgLTU4Mi41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxMy4yNDEgNTgyLjUxNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmcmVlKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzMzcuMTUxIDU4Mi41MTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM3LjE1MSAtNTgyLjUxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM3LjE1MSA1ODIuNTE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMjA5IFRKbQotKEF0KSA5Ljk2MjYgVGoKLS0zNDggVEptCi0ocHJlc2VudCkgMjguNzcyIFRqCi0tMzQ4IFRKbQotKHRoZXJlKSAxOS45MTUyIFRqCi0tMzQ4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzQ4IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0zNDggVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWNpbGl0eSkgMjQuOTA2NSBUagotLTM0OCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zNDggVEptCi0odXNlcikgMTYuNTk3NyBUagotMjAgVEptCi0oLWRlXDAwMm5lZCkgMzIuNjQ3NCBUagotODYuOTQ0IDU3MC41NiBUZAotKG1lbW9yeSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShhbGxvY2F0b3JzKSAzOC43MzQ2IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShJL08pIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKFwoY291bGQpIDI1LjQ1NDQgVGoKLS0yNTAgVEptCi0oZWFzaWx5KSAyMy4yNDI3IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGFkZGVkLCkgMjYuMjgxMyBUagotLTI1MCBUSm0KLSh0aG91Z2hcKS4pIDMzLjQ4NDMgVGoKLVsxIDAgMCAxIDM4Ny4xNjUgNTcwLjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxNS4xNjUgLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0OC40NzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUyOS45NzcgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuNC4xLikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCA1MjkuOTc3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTUyOS45NzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggNTI5Ljk3NyBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6UmVhZE9wZW4pIDE0NC42MDkgVGoKLVsxIDAgMCAxIDI2NC40NjggNTI5Ljk3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTIuNDY4IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC03Mi43MjcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDcxLjczMSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDY4LjE0NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01MTguMjc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1MTguMjc5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHR5cGVkZWYpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWkZJTEU7KSA0MS44NDI5IFRqCi05MCA0OTQuMzY5IFRkCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0xMzAuMTA5IDQ5Mi42MjUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzYuMDg3IDQ5NC4zNjkgVGQKLShCWjJfYnpSZWFkT3BlblwoKSA4OS42NjM0IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjUyLjE3MSA0OTIuNjI1IFRkCi0oKikgNS45Nzc1NiBUagotMjU4LjE0OSA0OTQuMzY5IFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oRklMRSkgMjMuOTEwMiBUagotMzM4LjM2OCA0OTIuNjI1IFRkCi0oKikgNS45Nzc1NiBUagotMzQ0LjM0NiA0OTQuMzY5IFRkCi0oZiwpIDExLjk1NTEgVGoKLTE5MS44NTUgNDgyLjQxNCBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHksKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzbWFsbCwpIDM1Ljg2NTQgVGoKLTE5MS44NTUgNDcwLjQ1OCBUZAotKHZvaWQpIDIzLjkxMDIgVGoKLTIyMC4wMSA0NjguNzE1IFRkCi0oKikgNS45Nzc1NiBUagotMjI1Ljk4NyA0NzAuNDU4IFRkCi0odW51c2VkLCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oblVudXNlZCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDQ1NC45MTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQ0Ljk1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDMyLjk5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcmVwYXJlKSAzMC40MjU4IFRqCi0tMjkwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODkgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI5MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjkwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yODkgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI5MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yODkgVEptCi0oaGFuZGxlKSAyNi41NjAzIFRqCi1bMSAwIDAgMSAyNzIuNjk3IDQzMi45OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjcyLjY5NyAtNDMyLjk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjcyLjY5NyA0MzIuOTk5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGYpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDI3OC42NzUgNDMyLjk5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguNjc1IC00MzIuOTk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzguNjc1IDQzMi45OTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgMjg1LjQzOSA0MzIuOTk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4NS40MzkgLTQzMi45OTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4NS40MzkgNDMyLjk5OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAyOTEuNDE3IDQzMi45OTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkxLjQxNyAtNDMyLjk5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk0LjMwMyA0MzIuOTk5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTI5MCBUSm0KLShyZWZlcikgMTguNzk5NCBUagotLTI4OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjkwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yOTAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjg5IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjkwIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI4OSBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMjkwIFRKbQotKG9wZW5lZCkgMjguNzcyIFRqCi0tMjkwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI4OSBUSm0KLShyZWFkaW5nLCkgMzIuMzY4NSBUagotLTMwMCBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgNDIxLjA0NCBUZAotKGZvcikgMTEuNjE2NCBUagotLTMwNiBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTMwNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0zMDYgVEptCi0oaW5kaWNhdG9yKSAzNS40MTcgVGoKLS0zMDUgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDE5My40NTcgNDIxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTMuNDU3IC00MjEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTMuNDU3IDQyMS4wNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmVycm9yXChmXCkpIDUzLjc5OCBUagotWzEgMCAwIDEgMjQ3LjI1NSA0MjEuMDQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0Ny4yNTUgLTQyMS4wNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0Ny4yNTUgNDIxLjA0NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKWlzKSA5Ljk2MjYgVGoKLS0zMDYgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzA1IFRKbQotKHNldC4pIDEzLjU1OTEgVGoKLS05NTQgVEptCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDMwOC43ODQgNDIxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDguNzg0IC00MjEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDguNzg0IDQyMS4wNDQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc21hbGwpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMzOC42NzEgNDIxLjA0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzguNjcxIC00MjEuMDQ0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDEuNzE3IDQyMS4wNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMDYgVEptCi0oMSwpIDcuNDcxOTUgVGoKLS0zMTkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA2IFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0zMDYgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTMwNSBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS0zMDYgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNiBUSm0KLShkZWMpIDEzLjgyODEgVGoKLTEgVEptCi0ob21wcmVzcykgMzMuMjA1MyBUagotLTMwNiBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMzA2IFRKbQotKGxlc3MpIDE0Ljk0MzkgVGoKLTcyIDQwOS4wODkgVGQKLShtZW1vcnkpIDMzLjIwNTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4cGVuc2UpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oc3BlZWQuKSAyNS4xNzU1IFRqCi1bMSAwIDAgMSA3MiA0MDYuOTMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTYuOTY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzODcuMTcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjI3IFRKbQotKHJlYXNvbnMpIDI5Ljg3NzggVGoKLS0yMjcgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHBsYWluZWQpIDM0LjMxMTIgVGoKLS0yMjggVEptCi0oYmVsbykgMTcuMTU1NiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDE4OS4xOTMgMzg3LjE3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODkuMTkzIC0zODcuMTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODkuMTkzIDM4Ny4xNzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjQ4Ljk2OSAzODcuMTcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0OC45NjkgLTM4Ny4xNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1MS4yMzIgMzg3LjE3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjI3IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0yMjcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSAzMzIuNzMyIDM4Ny4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMyLjczMiAtMzg3LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzMyLjczMiAzODcuMTcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5VbnVzZWQpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDM3NC41NzUgMzg3LjE3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzQuNTc1IC0zODcuMTcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzYuODM4IDM4Ny4xNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnl0ZXMpIDIxLjAzMSBUagotLTIyNyBUSm0KLShzdGFydGluZykgMjkuODg3OCBUagotLTIyNyBUSm0KLShhdCkgNy4xOTMgVGoKLVsxIDAgMCAxIDQ0MS43NCAzODcuMTcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MS43NCAtMzg3LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQxLjc0IDM4Ny4xNzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odW51c2VkKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0NzcuNjA1IDM4Ny4xNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDc3LjYwNSAtMzg3LjE3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDc3LjYwNSAzODcuMTcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yMzIgVEptCi0oYmVmb3JlKSAyNS40NDQ1IFRqCi0tMjI3IFRKbQotKHN0YXJ0aW5nKSAyOS44ODc4IFRqCi03MiAzNzUuMjE2IFRkCi0odG8pIDcuNzUwOSBUagotLTI4MCBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjc5IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjc5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgMTU1LjA5NCAzNzUuMjE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS4wOTQgLTM3NS4yMTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1NS4wOTQgMzc1LjIxNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxNjEuMDcyIDM3NS4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjA3MiAtMzc1LjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYxLjA3MiAzNzUuMjE1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS03OTcgVEptCi0oQXQpIDkuOTYyNiBUagotLTI4MCBUSm0KLShtb3N0KSAxOS4zNzczIFRqCi1bMSAwIDAgMSAyMDYuNDE0IDM3NS4yMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA2LjQxNCAtMzc1LjIxNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjA2LjQxNCAzNzUuMjE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01BWF9VTlVTRUQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDI4NC4xMjIgMzc1LjIxNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODQuMTIyIC0zNzUuMjE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODYuOTA3IDM3NS4yMTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI4MCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNzkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yODAgVEptCi0oc3VwcGxpZWQpIDMzLjc2MzMgVGoKLS0yNzkgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjgwIFRKbQotKHRoaXMuKSAxNi44ODY2IFRqCi0tNzk3IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjc5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI4MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhY2lsaXR5KSAyNC45MDY1IFRqCi0tMjc5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjgwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI3OSBUSm0KLShyZXF1aXJlZCwpIDM1LjY4NiBUagotNzIgMzYzLjI2IFRkCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShwYXNzKSAxNy4xNTU2IFRqCi1bMSAwIDAgMSAxMzguMTQxIDM2My4yNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzguMTQxIC0zNjMuMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzOC4xNDEgMzYzLjI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKE5VTEwpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDE2Mi4wNTIgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Mi4wNTIgLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY0LjU0MiAzNjMuMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDE4MS40MTkgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4MS40MTkgLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgxLjQxOSAzNjMuMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oMCkgNS45Nzc1NiBUagotWzEgMCAwIDEgMTg3LjM5NyAzNjMuMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTg3LjM5NyAtMzYzLjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODkuODg3IDM2My4yNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDIwMy45OTQgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIwMy45OTQgLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAzLjk5NCAzNjMuMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odW51c2VkKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAyMzkuODYgMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzOS44NiAtMzYzLjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDIuMzUxIDM2My4yNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShuKSA0Ljk4MTMgVGoKLVsxIDAgMCAxIDI2NC4yMDggMzYzLjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2NC4yMDggLTM2My4yNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjY0LjIwOCAzNjMuMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oVW51c2VkKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzMDAuMDc0IDM2My4yNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDAuMDc0IC0zNjMuMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMi41NjUgMzYzLjI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJlc3BlY3RpKSAzMC45ODM3IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVseSkgMTIuMTc0MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMzYxLjEwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzUxLjE0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzQxLjM0MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obWVhbmluZykgMzQuMzExMiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShwYXJhbWV0ZXJzKSA0My43MDU5IFRqCi1bMSAwIDAgMSAxOTYuNjMxIDM0MS4zNDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk2LjYzMSAtMzQxLjM0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk2LjYzMSAzNDEuMzQzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHNtYWxsKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMjYuNTE5IDM0MS4zNDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI2LjUxOSAtMzQxLjM0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI5LjAxIDM0MS4zNDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDI0NS44ODcgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDUuODg3IC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDUuODg3IDM0MS4zNDMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odmVyYm9zaXR5KSA1My43OTggVGoKLVsxIDAgMCAxIDI5OS42ODUgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTkuNjg1IC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTkuNjg1IDM0MS4zNDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLVsxIDAgMCAxIDMxOS44NzkgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTkuODc5IC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTkuODc5IDM0MS4zNDMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0luaXQpIDExOS41NTEgVGoKLVsxIDAgMCAxIDQzOS40MzEgMzQxLjM0M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzkuNDMxIC0zNDEuMzQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzkuNDMxIDM0MS4zNDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMzM5LjE4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI5LjIyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzE5LjQyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS00MDIgVEptCi0oYW1vdW50KSAyOS44ODc4IFRqCi0tNDAyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDAyIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTQwMiBUSm0KLShuZWVkZWQpIDI4LjIxNDEgVGoKLS00MDIgVEptCi0odG8pIDcuNzUwOSBUagotLTQwMiBUSm0KLShkZWNvbXByZXNzKSA0Ny4wMzM0IFRqCi0tNDAyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS00MDEgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tNDAyIFRKbQotKGNhbm5vdCkgMjYuNTYwMyBUagotLTQwMiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTQwMiBUSm0KLShkZXRlcm1pbmVkKSA0NC44MjE3IFRqCi0tNDAyIFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi0tNDAyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQwMiBUSm0KLShcMDAybGUnKSAxNi4wNDk3IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tNDAyIFRKbQotKGhlYWRlcikgMjYuNTUwMyBUagotLTQwMiBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS00MDIgVEptCi0oYmVlbikgMTguODA5NCBUagotLTQwMiBUSm0KLShyZWFkLikgMTkuNjM2MyBUagotNzIgMzA3LjQ3IFRkCi0oU28pIDEwLjUyMDUgVGoKLS00OTIgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS00OTEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS00OTIgVEptCi0ocG9zc2libGUpIDMyLjY1NzQgVGoKLS00OTIgVEptCi0odGhhdCkgMTQuOTQzOSBUagotWzEgMCAwIDEgMTY2Ljc5NyAzMDcuNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY2Ljc5NyAtMzA3LjQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjYuNzk3IDMwNy40NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkT3BlbikgODMuNjg1OCBUagotWzEgMCAwIDEgMjUwLjQ4MyAzMDcuNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUwLjQ4MyAtMzA3LjQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTUuMzgxIDMwNy40NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZXR1cm5zKSAyNy42NjYxIFRqCi1bMSAwIDAgMSAyODcuOTQ1IDMwNy40N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODcuOTQ1IC0zMDcuNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4Ny45NDUgMzA3LjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09LKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAzMTcuODMzIDMwNy40N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTcuODMzIC0zMDcuNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMi43MjkgMzA3LjQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTQ5MiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNDkxIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS00OTIgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tNDkyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MzEuMTM1IDMwNy40N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzEuMTM1IC0zMDcuNDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMS4xMzUgMzA3LjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDQ5MC45MTEgMzA3LjQ3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5MC45MTEgLTMwNy40N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk1LjgxIDMwNy40NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tNDkyIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotWzEgMCAwIDEgNzIgMjk1LjUxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk1LjUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjk1LjUxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9NRU1fRVJST1IpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDE0My43MzEgMjk1LjUxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDMuNzMxIC0yOTUuNTE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNDMuNzMxIDI5NS41MTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMjk0LjIwNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjg0LjI0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjczLjU5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShhc3NpZ25tZW50cykgNDguNzA3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjkuMTQ0IDI3My41OTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjE0NCAtMjczLjU5N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjE0NCAyNzMuNTk3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIxMC45ODcgMjczLjU5N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTg3IC0yNzMuNTk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTg3IDI3My41OTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiAyNzEuNDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xNjguMzY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDE2Ny4zNzIgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAxNjMuNzg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjYyLjA3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjYyLjA3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9DT05GSUdfRVJST1IpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgMjUwLjEyIFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxpYnJhcnkpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obWlzLWNvbXBpbGVkKSA3MS43MzA3IFRqCi05MCAyMzguMTY1IFRkCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLTk4LjQ4NzkgMjI2LjIwOSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGYpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotOTguNDg3OSAyMTQuMjU0IFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oc21hbGwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obmVpdGhlcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKG5vcikgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgxKSA1Ljk3NzU2IFRqCi05OC40ODc5IDIwMi4yOTkgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh1bnVzZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oPT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSgmJikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuVW51c2VkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCkpIDUuOTc3NTYgVGoKLTk4LjQ4NzkgMTkwLjM0NCBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHVudXNlZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKCYmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKCFcKDApIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oPD0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oblVudXNlZCkgNDEuODQyOSBUagotLTQyNiBUSm0KLSg8PSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9NQVhfVU5VU0VEXCkpIDgzLjY4NTggVGoKLS00MjYgVEptCi0oXCkpIDUuOTc3NTYgVGoKLTkwIDE3OC4zODkgVGQKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotOTguNDg3OSAxNjYuNDM0IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZmVycm9yXChmXCkpIDUzLjc5OCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShub256ZXJvKSA0MS44NDI5IFRqCi05MCAxNTQuNDc4IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDE0Mi41MjMgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCAxMzAuNTY4IFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgMTE4LjYxMyBUZAotKG90aGVyd2lzZS4pIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDcyIDEwMy4wNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtOTMuMTA4NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgODEuMTUzMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDgxLjA1MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zMC4yMDJdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAxLjg5MjkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMzc0LjM5NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDYuOTczN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQwLjU3MjYgLTYuNzU0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuODQxIC01MS4wNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTEuMDcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDE5KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDIzIDIzCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtODEuMzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKFBvaW50ZXIpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYWJzdHJhY3QpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi05MCA2ODcuNzIxIFRkCi0oTlVMTCkgMjMuOTEwMiBUagotOTguNDg3OSA2NzUuNzY2IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDY2MC4yMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjUwLjI2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjM4LjMwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3Rpb25zOikgMzAuOTkzNiBUagotWzEgMCAwIDEgNzIgNjM4LjIwN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC02MjguODQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA2MjguODQyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLTk4LjQ4NzkgNjE2Ljg4NyBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLTkwIDYwNC45MzIgVGQKLShCWjJfYnpDbG9zZSkgNjUuNzUzMiBUagotOTguNDg3OSA1OTIuOTc2IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDU3Ny40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjcuNDcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDYuODEzIFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjQuMi4pIDQzLjA3MjkgVGoKLVsxIDAgMCAxIDExOS44NTggNTQ2LjgxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTkuODU4IC01NDYuODEzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTkuODU4IDU0Ni44MTMgVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKEJaMl9ielJlYWQpIDEwMy4yOTIgVGoKLVsxIDAgMCAxIDIyMy4xNSA1NDYuODEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1MS4xNSAtMi4zMzI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTUzNS4xMTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDUzNS4xMTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yMDguNTk1IDUzMy4zNzMgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yMTQuNTcyIDUzNS4xMTYgVGQKLShiemVycm9yLCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTMwNi43NDcgNTMzLjM3MyBUZAotKCopIDUuOTc3NTYgVGoKLTMxMi43MjQgNTM1LjExNiBUZAotKGIsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZvaWQpIDIzLjkxMDIgVGoKLTM1Ny4wNzcgNTMzLjM3MyBUZAotKCopIDUuOTc3NTYgVGoKLTM2My4wNTUgNTM1LjExNiBUZAotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxlbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDUxOS41NzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTA5LjYxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDk3LjY1NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZWFkcykgMjQuMzQ4NiBUagotLTI4NSBUSm0KLSh1cCkgOS45NjI2IFRqCi0tMjg0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDEyMi41NjkgNDk3LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjIuNTY5IC00OTcuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjIuNTY5IDQ5Ny42NTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGVuKSAxNy45MzI3IFRqCi1bMSAwIDAgMSAxNDAuNTAxIDQ5Ny42NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQwLjUwMSAtNDk3LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQzLjMzNyA0OTcuNjU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwodW5jb21wcmVzc2VkXCkpIDYzLjYzMTEgVGoKLS0yODUgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI4NCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjg1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjg1IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgMzM2LjMxOSA0OTcuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNi4zMTkgLTQ5Ny42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzNi4zMTkgNDk3LjY1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAzNDIuMjk2IDQ5Ny42NTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjI5NiAtNDk3LjY1Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzQ1LjEzMiA0OTcuNjU2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGludG8pIDE1LjUwMTggVGoKLS0yODUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg0IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotWzEgMCAwIDEgNDA1LjIwNSA0OTcuNjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwNS4yMDUgLTQ5Ny42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwNS4yMDUgNDk3LjY1NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidWYpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDQyMy4xMzcgNDk3LjY1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjMuMTM3IC00OTcuNjU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjMuMTM3IDQ5Ny42NTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTgyOCBUSm0KLShJZikgNi42MzUwOSBUagotLTI4NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODUgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI4NSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yODQgVEptCi0oc3VjY2Vzc2Z1bCwpIDQzLjQzNjkgVGoKLVsxIDAgMCAxIDcyIDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ4NS43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ4NS43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMTEzLjg0MyA0ODUuNzAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy44NDMgLTQ4NS43MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExNy4zNiA0ODUuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzUzIFRKbQotKHNldCkgMTEuMDY4NCBUagotLTM1MyBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNTMuMzc0IDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUzLjM3NCAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTUzLjM3NCA0ODUuNzAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX09LKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxODMuMjYyIDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgzLjI2MiAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTg2Ljc3OCA0ODUuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi0tMzUzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTM1MyBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0zNTMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNTMgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTM1MyBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMzUzIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzUzIFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tMTIzOCBUSm0KLShJZikgNi42MzUwOSBUagotLTM1MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNTMgVEptCi0obG9naWNhbCkgMjcuMTE4MiBUagotLTM1MyBUSm0KLShlbmQtb2Ytc3RyZWFtKSA1NS44ODAyIFRqCi0tMzUzIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTM1MyBUSm0KLShkZXRlY3RlZCwpIDM1LjY4NiBUagotWzEgMCAwIDEgNzIgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDczLjc0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDczLjc0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAxMTMuODQzIDQ3My43NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEzLjg0MyAtNDczLjc0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE2Ljc5NSA0NzMuNzQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yOTYgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yOTcgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMjk2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE3Mi4zMjkgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzIuMzI5IC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuMzI5IDQ3My43NDYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMjUwLjAzNyA0NzMuNzQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1MC4wMzcgLTQ3My43NDZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1MC4wMzcgNDczLjc0NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjk2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjk3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NiBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yOTYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTcgVEptCi0oYnl0ZXMpIDIxLjAzMSBUagotLTI5NiBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjk2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk2IFRKbQotKHJldHVybmVkLikgMzUuNjg2IFRqCi0tODk4IFRKbQotKEFsbCkgMTIuNzMyMiBUagotLTI5NyBUSm0KLShvdGhlcikgMjAuNDczMSBUagotWzEgMCAwIDEgNDcwIDQ3My43NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcwIC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzAgNDczLjc0NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSA1MTEuODQzIDQ3My43NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTExLjg0MyAtNDczLjc0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTE0Ljc5NSA0NzMuNzQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMpIDIwLjQ3MzEgVGoKLTcyIDQ2MS43OTEgVGQKLShkZW5vdGUpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDQ2MS42OTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ1MS43MjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzOS44NzMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMTMxLjc3NiA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMS43NzYgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNC4yMjQgNDM5Ljg3MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjQ2IFRKbQotKHN1cHBseSkgMjYuNTcwMyBUagotWzEgMCAwIDEgMTgxLjE5MyA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE4MS4xOTMgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MS4xOTMgNDM5Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsZW4pIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDE5OS4xMjYgNDM5Ljg3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTkuMTI2IC00MzkuODczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDEuNTc1IDQzOS44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnl0ZXMsKSAyMy41MjE3IFRqCi0tMjQ3IFRKbQotKHVubGVzcykgMjQuOTA2NSBUagotLTI0NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDYgVEptCi0obG9naWNhbCkgMjcuMTE4MiBUagotLTI0NiBUSm0KLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0yNDYgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yNDUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNDYgVEptCi0oZGV0ZWN0ZWQpIDMzLjE5NTQgVGoKLS0yNDYgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNDYgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNDYgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNDUgVEptCi0ob2NjdXJzLikgMjguNDkzIFRqCi0tNjE3IFRKbQotKEJlY2F1c2UpIDMzLjE5NTQgVGoKLS0yNDYgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNDYgVEptCi0odGhpcywpIDE2Ljg4NjYgVGoKLS0yNDcgVEptCi0oaXQpIDUuNTM5MjEgVGoKLTcyIDQyNy45MTggVGQKLShpcykgNi42NDUwNSBUagotLTIzMSBUSm0KLShwb3NzaWJsZSkgMzIuNjU3NCBUagotLTIzMSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjMxIFRKbQotKGRldGVjdCkgMjMuNzkwNyBUagotLTIzMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzEgVEptCi0oc3RyZWFtKSAyNi41NjAzIFRqCi0tMjMxIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tMjMyIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yMzEgVEptCi0ob2JzZXJ2aW5nKSAzOS4yOTI1IFRqCi0tMjMxIFRKbQotKHdoZW4pIDIxLjU3OSBUagotLTIzMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzEgVEptCi0obnVtYmVyKSAzMC40MzU3IFRqCi0tMjMxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjMxIFRKbQotKGJ5dGVzKSAyMS4wMzEgVGoKLS0yMzEgVEptCi0ocmV0dXJuZWQpIDMzLjE5NTQgVGoKLS0yMzEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzEgVEptCi0obGVzcykgMTQuOTQzOSBUagotLTIzMSBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMjMyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzMSBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yMzEgVEptCi0ocmVxdWVzdGVkLikgNDAuNjY3MyBUagotNzIgNDE1Ljk2MyBUZAotKE5lKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVydGhlbGVzcywpIDM3LjM0OTggVGoKLS0zMDkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjk3IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk4IFRKbQotKHJlKSA3Ljc0MDk0IFRqCi0xNSBUSm0KLShnKSA0Ljk4MTMgVGoKLTUgVEptCi0oYXJkZWQpIDIyLjEyNjkgVGoKLS0yOTcgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yOTcgVEptCi0oaW5hZHZpc2FibGU7KSA0OC4xNDkyIFRqCi0tMzIxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI5OCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yOTcgVEptCi0oaW5zdGVhZCkgMjguMjI0IFRqCi0tMjk3IFRKbQotKGNoZWNrKSAyMy4yMzI4IFRqCi1bMSAwIDAgMSAzNjAuNjMxIDQxNS45NjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYwLjYzMSAtNDE1Ljk2M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYwLjYzMSA0MTUuOTYzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDQwMi40NzUgNDE1Ljk2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDIuNDc1IC00MTUuOTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDUuNDM3IDQxNS45NjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yOTcgVEptCi0oZSkgNC40MjMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnkpIDEyLjcyMjIgVGoKLS0yOTggVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjk3IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjk3IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhdGNoKSAxNi41OTc3IFRqCi0tMjk4IFRKbQotKG91dCkgMTIuNzMyMiBUagotLTI5NyBUSm0KLShmb3IpIDExLjYxNjQgVGoKLVsxIDAgMCAxIDcyIDQwNC4wMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQwNC4wMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQwNC4wMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMTQ5LjcwOSA0MDQuMDA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0OS43MDkgLTQwNC4wMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0OS43MDkgNDA0LjAwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA0MDIuNjk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zOTIuNzM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzODIuMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSW50ZXJuYWxseSkgMzguNzM0NiBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTE3LjU0MSAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE3LjU0MSAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTcuNTQxIDM4Mi4wOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxNzcuMzE3IDM4Mi4wOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzcuMzE3IC0zODIuMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MS43ODYgMzgyLjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvcGllcykgMjUuNDU0NCBUagotLTQ0OSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tNDQ4IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS00NDkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDQ4IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00NDkgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tNDQ4IFRKbQotKGluKSA3Ljc1MDkgVGoKLS00NDkgVEptCi0oY2h1bmtzKSAyOC4yMjQgVGoKLS00NDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS00NDggVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotWzEgMCAwIDEgNDE5LjYwMiAzODIuMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE5LjYwMiAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTkuNjAyIDM4Mi4wOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9NQVhfVU5VU0VEKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSA0OTcuMzEgMzgyLjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ny4zMSAtMzgyLjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDEuNzc4IDM4Mi4wOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcykgMjEuMDMxIFRqCi0tNDQ5IFRKbQotKGJlLSkgMTIuNzIyMiBUagotNzIgMzcwLjEzNSBUZAotKGZvcmUpIDE2LjAzOTggVGoKLS00MTQgVEptCi0oZGVjb21wcmVzc2luZykgNTkuNzY1NiBUagotLTQxNCBUSm0KLShpdC4pIDguMDI5ODYgVGoKLS0xNjA1IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tNDE1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQxNCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS00MTQgVEptCi0oY29udGFpbnMpIDMzLjIwNTMgVGoKLS00MTQgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTQxNCBUSm0KLShieXRlcykgMjEuMDMxIFRqCi0tNDE1IFRKbQotKHRoYW4pIDE3LjE1NTYgVGoKLS00MTQgVEptCi0oc3RyaWN0bHkpIDI3LjY3NjEgVGoKLS00MTQgVEptCi0obmVlZGVkKSAyOC4yMTQxIFRqCi0tNDE0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00MTQgVEptCi0ocmVhY2gpIDIxLjU2OSBUagotLTQxNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MTUgVEptCi0obG9naWNhbCkgMjcuMTE4MiBUagotLTQxNCBUSm0KLShlbmQtb2Ytc3RyZWFtLCkgNTguMzcwOSBUagotWzEgMCAwIDEgNzIgMzU4LjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0zNTguMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1OC4xOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzEuNzc2IDM1OC4xOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzEuNzc2IC0zNTguMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNC43NDkgMzU4LjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0yOTggVEptCi0oYWxtb3N0KSAyNi41NzAzIFRqCi0tMjk5IFRKbQotKGNlcnRhaW5seSkgMzQuODU5MSBUagotLTI5OCBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjk5IFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI5OCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI5OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yOTggVEptCi0odHJhaWxpbmcpIDI4Ljc4MiBUagotLTI5OCBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjk5IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTI5OCBUSm0KLShzaWduYWxsaW5nKSAzOS4zMDI1IFRqCi1bMSAwIDAgMSA0MTMuMTYyIDM1OC4xOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MTMuMTYyIC0zNTguMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMy4xNjIgMzU4LjE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VORCkgODkuNjYzNCBUagotWzEgMCAwIDEgNTAyLjgyNiAzNTguMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTAyLjgyNiAtMzU4LjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDIuODI2IDM1OC4xOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNTk3IFRKbQotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG8pIDQuOTgxMyBUagotLTI5OCBUSm0KLShjb2wtKSAxNS40OTE4IFRqCi03MiAzNDYuMjI0IFRkCi0obGVjdCkgMTQuMzg2IFRqCi0tMjQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0MiBUSm0KLShyZWFkKSAxNy4xNDU2IFRqCi0tMjQzIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI0MiBUSm0KLSh1bnVzZWQpIDI4LjIyNCBUagotLTI0MiBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjQyIFRKbQotKG9uY2UpIDE4LjgwOTQgVGoKLVsxIDAgMCAxIDIwOC43NTkgMzQ2LjIyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDguNzU5IC0zNDYuMjI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDguNzU5IDM0Ni4yMjQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU0VRVUVOQ0VfRU5EKSA4OS42NjM0IFRqCi1bMSAwIDAgMSAyOTguNDIzIDM0Ni4yMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk4LjQyMyAtMzQ2LjIyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAwLjgzNSAzNDYuMjI0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGhhcykgMTMuMjgwMSBUagotLTI0MiBUSm0KLShhcHBlYXJlZCwpIDM4LjQ0NTcgVGoKLS0yNDQgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAzNzQuMjAxIDM0Ni4yMjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzc0LjIwMSAtMzQ2LjIyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc0LjIwMSAzNDYuMjI0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDQ4Ny43NzUgMzQ2LjIyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODcuNzc1IC0zNDYuMjI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTAuMTg4IDM0Ni4yMjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW1tZWRpYXRlbHkpIDQ5LjgxMyBUagotNzIgMzM0LjI2OSBUZAotKGJlZm9yZSkgMjUuNDQ0NSBUagotWzEgMCAwIDEgOTkuOTM1IDMzNC4yNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTkuOTM1IC0zMzQuMjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05OS45MzUgMzM0LjI2OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE4OS41OTkgMzM0LjI2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODkuNTk5IC0zMzQuMjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODkuNTk5IDMzNC4yNjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMzMyLjk1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzIyLjk5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzEyLjM1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShhc3NpZ25tZW50cykgNDguNzA3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjkuMTQ0IDMxMi4zNTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjE0NCAtMzEyLjM1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjE0NCAzMTIuMzUxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIxMC45ODcgMzEyLjM1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTg3IC0zMTIuMzUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTg3IDMxMi4zNTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiAzMTAuMTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjU5LjM0M10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMCkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAyNCAyNAotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTI4NC41NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjYzLjAxNCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDI1OS40MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDY5OS42NzYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnVmKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obGVuKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotOTAgNjg3LjcyMSBUZAotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi05OC40ODc5IDY3NS43NjYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShvcGVuZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpXcml0ZU9wZW4pIDg5LjY2MzQgVGoKLTkwIDY2My44MTEgVGQKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotOTguNDg3OSA2NTEuODU2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlcmUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0ocmVhZGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGZpbGUpIDIzLjkxMDIgVGoKLTkwIDYzOS45IFRkCi0oQlpfVU5FWFBFQ1RFRF9FT0YpIDEwMS42MTkgVGoKLTk4LjQ4NzkgNjI3Ljk0NSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGZpbGUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oZW5kZWQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oYmVmb3JlKSAzNS44NjU0IFRqCi05OC40ODc5IDYxNS45OSBUZAotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsb2dpY2FsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGVuZC1vZi1zdHJlYW0pIDc3LjcwODMgVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRldGVjdGVkKSA0Ny44MjA1IFRqCi05MCA2MDQuMDM1IFRkCi0oQlpfREFUQV9FUlJPUikgNzcuNzA4MyBUagotOTguNDg3OSA1OTIuMDggVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50ZWdyaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRldGVjdGVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKHN0cmVhbSkgMzUuODY1NCBUagotOTAgNTgwLjEyNSBUZAotKEJaX0RBVEFfRVJST1JfTUFHSUMpIDExMy41NzQgVGoKLTk4LjQ4NzkgNTY4LjE2OSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzdHJlYW0pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZG9lcykgMjMuOTEwMiBUagotLTQyNiBUSm0KLShub3QpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYmVnaW4pIDI5Ljg4NzggVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ocmVxdWlzaXRlKSA1My43OTggVGoKLS00MjYgVEptCi0oaGVhZGVyKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGJ5dGVzKSAyOS44ODc4IFRqCi05OC40ODc5IDU1Ni4yMTQgVGQKLShcKGllLCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShub3QpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShiemlwMikgMjkuODg3OCBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGZpbGVcKS4pIDM1Ljg2NTQgVGoKLS04NTIgVEptCi0oVGhpcykgMjMuOTEwMiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShyZWFsbHkpIDM1Ljg2NTQgVGoKLTk4LjQ4NzkgNTQ0LjI1OSBUZAotKGEpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oc3BlY2lhbCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShjYXNlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX0RBVEFfRVJST1IuKSA4My42ODU4IFRqCi05MCA1MzIuMzA0IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDUyMC4zNDkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotOTAgNTA4LjM5NCBUZAotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLTk4LjQ4NzkgNDk2LjQzOCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsb2dpY2FsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGVuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShvZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzdHJlYW0pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRldGVjdGVkLikgNTMuNzk4IFRqCi05MCA0ODQuNDgzIFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNDcyLjUyOCBUZAotKG90aGVyd2lzZS4pIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDcyIDQ1Ni45ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQ3LjAyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDM1LjA2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDQzNC45NjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC02MC43NzIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDU5Ljc3NTggcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA1Ni4xODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNDI1LjYwNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNDI1LjYwNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShudW1iZXIpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnl0ZXMpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0ocmVhZCkgMjMuOTEwMiBUagotOTguNDg3OSA0MTMuNjQ5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi05MCA0MDEuNjk0IFRkCi0odW5kZWZpbmVkKSA1My43OTggVGoKLTk4LjQ4NzkgMzg5LjczOSBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAzNzQuMTk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM2NC4yMzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1Mi4yNzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQWxsbykgMTcuNzEzNSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWN0aW9uczopIDMwLjk5MzYgVGoKLVsxIDAgMCAxIDcyIDM1Mi4xOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTg0LjY4MjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggODMuNjg2MiByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDgwLjA5OTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0zNDIuODE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzNDIuODE1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGNvbGxlY3QpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotOTguNDg3OSAzMzAuODU5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotOTAgMzE4LjkwNCBUZAotKGNvbGxlY3QpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShmcm9tKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlbikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZEdldFVudXNlZCkgMTEzLjU3NCBUagotOTguNDg3OSAzMDYuOTQ5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9TRVFVRU5DRV9FTkQpIDg5LjY2MzQgVGoKLTkwIDI5NC45OTQgVGQKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgMjgzLjAzOSBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAyNjcuNDk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjU3LjUzNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjM2Ljg3NiBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjMuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDIzNi44NzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMjM2Ljg3Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAyMzYuODc2IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxOTYuMjU2IFRqCi1bMSAwIDAgMSAzMTYuMTE0IDIzNi44NzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQ0LjExNCAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzYuODYxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTIyNS4xNzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDIyNS4xNzggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpSZWFkR2V0VW51c2VkXCgpIDExOS41NTEgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNTkuODgzIDIyMy40MzUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNzAuMTA0IDIyNS4xNzggVGQKLShiemVycm9yLCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTM2Mi4yNzggMjIzLjQzNSBUZAotKCopIDUuOTc3NTYgVGoKLTM2OC4yNTYgMjI1LjE3OCBUZAotKGIsKSAxMS45NTUxIFRqCi0yMDAuMzQzIDIxMy4yMjMgVGQKLSh2b2lkKSAyMy45MTAyIFRqCi0yMjQuMjU0IDIxMS40OCBUZAotKCoqKSAxMS45NTUxIFRqCi0yNDAuNDUzIDIxMy4yMjMgVGQKLSh1bnVzZWQsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMzA0LjQ3MyAyMTEuNDggVGQKLSgqKSA1Ljk3NzU2IFRqCi0zMTQuNjk0IDIxMy4yMjMgVGQKLShuVW51c2VkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMTk3LjY4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xODcuNzE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzUuNzY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybnMpIDMwLjk5MzYgVGoKLS00MzUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTQzNSBUSm0KLSh3aGljaCkgMjQuMzQ4NiBUagotLTQzNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS00MzUgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTQzNSBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tNDM1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQzNSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tNDM1IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTQzNSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS00MzUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tNDM1IFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTQzNSBUSm0KLShuZWVkZWQpIDI4LjIxNDEgVGoKLS00MzUgVEptCi0odG8pIDcuNzUwOSBUagotLTQzNSBUSm0KLShnZXQpIDEyLjE3NDMgVGoKLS00MzUgVEptCi0odG8pIDcuNzUwOSBUagotLTQzNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MzUgVEptCi0obG9naWNhbCkgMjcuMTE4MiBUagotLTQzNSBUSm0KLShlbmQtb2Ytc3RyZWFtLikgNTguMzcwOSBUagotWzEgMCAwIDEgNzIgMTYzLjgwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTYzLjgwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTYyLjA2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgqKSA1Ljk3NzU2IFRqCi03Ny45Nzc2IDE2My44MDkgVGQKLSh1bnVzZWQpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDExMy44NDMgMTYzLjgwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuODQzIC0xNjMuODA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTcuMiAxNjMuODA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzM3IFRKbQotKHNldCkgMTEuMDY4NCBUagotLTMzNyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzM3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNyBUSm0KLShhZGRyZXNzKSAyOS44Nzc4IFRqCi0tMzM3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzM2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNyBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTM1OSBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMjY5LjA4OSAxNjMuODA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2OS4wODkgLTE2My44MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2OS4wODkgMTYyLjA2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgqKSA1Ljk3NzU2IFRqCi0yNzUuMDY3IDE2My44MDkgVGQKLShuVW51c2VkKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzMTYuOTEgMTYzLjgwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTYuOTEgLTE2My44MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMC4yNjcgMTYzLjgwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMzM3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNyBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0zMzcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zMzcgVEptCi0oYnl0ZXMuKSAyMy41MjE3IFRqCi1bMSAwIDAgMSA0MjcuMjQ3IDE2My44MDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI3LjI0NyAtMTYzLjgwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI3LjI0NyAxNjIuMDY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTQzMy4yMjUgMTYzLjgwOSBUZAotKG5VbnVzZWQpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDQ3NS4wNjggMTYzLjgwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzUuMDY4IC0xNjMuODA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzguNDI1IDE2My44MDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTMzNyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTMzNyBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0zMzcgVEptCi0odG8pIDcuNzUwOSBUagotLTMzNyBUSm0KLShhKSA0LjQyMzM5IFRqCi03MiAxNTEuODUzIFRkCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKGJldHdlZW4pIDMzLjE5NTQgVGoKLVsxIDAgMCAxIDEzMS41MDYgMTUxLjg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzEuNTA2IC0xNTEuODUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzEuNTA2IDE1MS44NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oMCkgNS45Nzc1NiBUagotWzEgMCAwIDEgMTM3LjQ4NCAxNTEuODUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy40ODQgLTE1MS44NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzOS45NzUgMTUxLjg1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMTU2Ljg1MSAxNTEuODUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1Ni44NTEgLTE1MS44NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1Ni44NTEgMTUxLjg1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9NQVhfVU5VU0VEKSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAyMzQuNTYgMTUxLjg1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuNTYgLTE1MS44NTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNy4wNSAxNTEuODUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGluY2x1c2kpIDI2LjU3MDMgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZS4pIDYuOTE0MDQgVGoKLVsxIDAgMCAxIDcyIDE1MC41NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE0MC41ODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEyOS45MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhpcykgMTcuNzEzNSBUagotLTg4MiBUSm0KLShmdW5jdGlvbikgMzMuMjA1MyBUagotLTg4MyBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS04ODIgVEptCi0ob25seSkgMTcuNzEzNSBUagotLTg4MyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTg4MiBUSm0KLShjYWxsZWQpIDIzLjc5MDcgVGoKLS04ODMgVEptCi0ob25jZSkgMTguODA5NCBUagotWzEgMCAwIDEgMjcxLjMzMiAxMjkuOTM1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3MS4zMzIgLTEyOS45MzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3MS4zMzIgMTI5LjkzNSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAzMzEuMTA4IDEyOS45MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzMxLjEwOCAtMTI5LjkzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM5LjkgMTI5LjkzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShoYXMpIDEzLjI4MDEgVGoKLS04ODIgVEptCi0oc2lnbmFsbGVkKSAzNS45NzQ5IFRqCi1bMSAwIDAgMSA0MDYuNzM3IDEyOS45MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA2LjczNyAtMTI5LjkzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA2LjczNyAxMjkuOTM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDQ4NC40NDYgMTI5LjkzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODQuNDQ2IC0xMjkuOTM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTMuMjMxIDEyOS45MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tODgyIFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotWzEgMCAwIDEgNzIgMTE3Ljk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMTcuOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDExNy45OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDg5LjY2MzQgVGoKLVsxIDAgMCAxIDE2MS42NjQgMTE3Ljk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS42NjQgLTExNy45OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYxLjY2NCAxMTcuOTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTE2LjY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMDYuNzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA5Ni4wNjI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKGFzc2lnbm1lbnRzKSA0OC43MDcyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE2OS4xNDQgOTYuMDYyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjkuMTQ0IC05Ni4wNjI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjkuMTQ0IDk2LjA2MjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjEwLjk4NyA5Ni4wNjI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC45ODcgLTk2LjA2MjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMC45ODcgOTYuMDYyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDcyIDkzLjkwNTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC00My4wNTM5XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuODUxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDI1IDI1Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTI5LjE1MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxMDcuNTk3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTA0LjAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNzExLjYzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNzExLjYzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSA2OTkuNjc2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDY4Ny43MjEgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh1bnVzZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShuVW51c2VkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLTkwIDY3NS43NjYgVGQKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotOTguNDg3OSA2NjMuODExIFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotLTQyNiBUSm0KLShoYXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obm90KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc2lnbmFsbGVkKSA1My43OTggVGoKLTk4LjQ4NzkgNjUxLjg1NiBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0od2FzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKG9wZW5lZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh3aXRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9ieldyaXRlT3BlbikgODkuNjYzNCBUagotOTAgNjM5LjkgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSA2MjcuOTQ1IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDYxMi40MDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjAyLjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTkwLjQ4NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3Rpb25zOikgMzAuOTkzNiBUagotWzEgMCAwIDEgNzIgNTkwLjM4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01ODEuMDIxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1ODEuMDIxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgNzIgNTY1LjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTU1LjUxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTM0Ljg1OCBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjQuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDUzNC44NThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtNTM0Ljg1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCA1MzQuODU4IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpSZWFkQ2xvc2UpIDE1NC45MzkgVGoKLVsxIDAgMCAxIDI3NC43OTcgNTM0Ljg1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDIuNzk3IC0yLjMzMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNTIzLjE2MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNTIzLjE2MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2b2lkKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI0NC40NiA1MjEuNDE3IFRkCi0oKikgNS45Nzc1NiBUagotMjUwLjQzOCA1MjMuMTYxIFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0zNDIuNjEyIDUyMS40MTcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNDguNTkgNTIzLjE2MSBUZAotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiA1MDcuNjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ5Ny42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ4NS43MDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVsZWFzZXMpIDM0Ljg1OTEgVGoKLS00MzAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS00MjkgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tNDMwIFRKbQotKHBlcnRhaW5pbmcpIDQwLjM5ODMgVGoKLS00MjkgVEptCi0odG8pIDcuNzUwOSBUagotLTQzMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00MjkgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTQzMCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDMwNC4zNTIgNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDQuMzUyIC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDQuMzUyIDQ4NS43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYikgNS45Nzc1NiBUagotWzEgMCAwIDEgMzEwLjMzIDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEwLjMzIC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTAuMzMgNDg1LjcwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMjEuMjc2IDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzIxLjI3NiAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzIxLjI3NiA0ODUuNzAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgNDEwLjk0IDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEwLjk0IC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MTUuMjIgNDg1LjcwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkb2VzKSAxOC4yNjE0IFRqCi0tNDMwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTQyOSBUSm0KLShjYWxsKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ3My40MzggNDg1LjcwMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzMuNDM4IC00ODUuNzAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzMuNDM4IDQ4NS43MDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmNsb3NlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA1MDkuMzA0IDQ4NS43MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA5LjMwNCAtNDg1LjcwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTEzLjU4NCA0ODUuNzAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG9uKSA5Ljk2MjYgVGoKLS00MzAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiA0NzMuNzQ2IFRkCi0odW5kZXJseWluZykgNDMuMTY3OSBUagotLTI2NCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNjQgVEptCi0oaGFuZGxlLCkgMjkuMDUwOSBUagotLTI2NyBUSm0KLShzbykgOC44NTY3NSBUagotLTI2NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNjQgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjY0IFRKbQotKGRvKSA5Ljk2MjYgVGoKLS0yNjQgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI2NCBUSm0KLSh5b3Vyc2VsZikgMzIuNjQ3NCBUagotLTI2NCBUSm0KLShpZikgNi4wODcxNSBUagotLTI2MyBUSm0KLShhcHByb3ByaWF0ZS4pIDQ3Ljg2MDMgVGoKLVsxIDAgMCAxIDM0OC42NTMgNDczLjc0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDguNjUzIC00NzMuNzQ2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDguNjUzIDQ3My43NDYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA0MzguMzE3IDQ3My43NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM4LjMxNyAtNDczLjc0Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQwLjk0NiA0NzMuNzQ2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNob3VsZCkgMjYuNTcwMyBUagotLTI2NCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI2NCBUSm0KLShjYWxsZWQpIDIzLjc5MDcgVGoKLS0yNjQgVEptCi0odG8pIDcuNzUwOSBUagotLTI2NCBUSm0KLShjbGVhbikgMjEuMDIxMSBUagotNzIgNDYxLjc5MSBUZAotKHVwKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0oc2l0dWF0aW9ucy4pIDQwLjY4NzMgVGoKLVsxIDAgMCAxIDcyIDQ1OS42MzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ0OS42NzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzOS44NzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUG9zc2libGUpIDMzLjIxNTMgVGoKLS0yNTAgVEptCi0oYXNzaWdubWVudHMpIDQ4LjcwNzIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMTY5LjE0NCA0MzkuODczXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2OS4xNDQgLTQzOS44NzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2OS4xNDQgNDM5Ljg3MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemVycm9yKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyMTAuOTg3IDQzOS44NzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjk4NyAtNDM5Ljg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEwLjk4NyA0MzkuODczIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotWzEgMCAwIDEgNzIgNDM3LjcxNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC00MjguMzUxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA0MjguMzUxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NFUVVFTkNFX0VSUk9SKSAxMDEuNjE5IFRqCi05OC40ODc5IDQxNi4zOTYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShvcGVuZWQpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0od2l0aCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpPcGVuV3JpdGUpIDg5LjY2MzQgVGoKLTkwIDQwNC40NDEgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSAzOTIuNDg2IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDM3Ni45NDRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzY2Ljk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzU1LjAyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBbGxvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYWJsZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShhY3Rpb25zOikgMzAuOTkzNiBUagotWzEgMCAwIDEgNzIgMzU0LjkyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0zNDUuNTYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzNDUuNTYyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG5vbmUpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDcyIDMzMC4wMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMyMC4wNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI5OS4zOTkgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuNC41LikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAyOTkuMzk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTI5OS4zOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMjk5LjM5OSBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6V3JpdGVPcGVuKSAxNTQuOTM5IFRqCi1bMSAwIDAgMSAyNzQuNzk3IDI5OS4zOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAyLjc5NyAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNDguODE2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA0Ny44MjA3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNDQuMjM0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTI4Ny43MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDI4Ny43MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0xMzAuMTA5IDI4NS45NTggVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMzYuMDg3IDI4Ny43MDIgVGQKLShCWjJfYnpXcml0ZU9wZW5cKCkgOTUuNjQxIFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjU4LjE0OSAyODUuOTU4IFRkCi0oKikgNS45Nzc1NiBUagotMjY0LjEyNyAyODcuNzAyIFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oRklMRSkgMjMuOTEwMiBUagotMzQ0LjM0NiAyODUuOTU4IFRkCi0oKikgNS45Nzc1NiBUagotMzUwLjMyMyAyODcuNzAyIFRkCi0oZiwpIDExLjk1NTEgVGoKLTE5Ni4wOTkgMjc1Ljc0NiBUZAotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrLCkgODMuNjg1OCBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5LCkgNTkuNzc1NiBUagotMTk2LjA5OSAyNjMuNzkxIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHdvcmtGYWN0b3IpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAyNDguMjQ5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzOC4yODddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDIyNi4zMzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJlcGFyZSkgMzAuNDI1OCBUagotLTI2OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY5IFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMjY4IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNjkgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI2OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI2OCBUSm0KLShoYW5kbGUpIDI2LjU2MDMgVGoKLVsxIDAgMCAxIDI2Mi43MiAyMjYuMzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2Mi43MiAtMjI2LjMzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjYyLjcyIDIyNi4zMzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZikgNS45Nzc1NiBUagotWzEgMCAwIDEgMjY4LjY5OCAyMjYuMzMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2OC42OTggLTIyNi4zMzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2OC42OTggMjI2LjMzMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNzQuODI5IDIyNi4zMzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc0LjgyOSAtMjI2LjMzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc0LjgyOSAyMjYuMzMyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGYpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDI4MC44MDcgMjI2LjMzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODAuODA3IC0yMjYuMzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODMuNDgxIDIyNi4zMzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjY4IFRKbQotKHJlZmVyKSAxOC43OTk0IFRqCi0tMjY5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjggVEptCi0oYSkgNC40MjMzOSBUagotLTI2OSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNjggVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNjkgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjY4IFRKbQotKGJlZW4pIDE4LjgwOTQgVGoKLS0yNjkgVEptCi0ob3BlbmVkKSAyOC43NzIgVGoKLS0yNjggVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjY5IFRKbQotKHdyaXRpbmcsKSAzMS4yNzI2IFRqCi0tMjczIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY4IFRKbQotKGZvcikgMTEuNjE2NCBUagotNzIgMjE0LjM3NyBUZAotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MCBUSm0KLShpbmRpY2F0b3IpIDM1LjQxNyBUagotLTI1MCBUSm0KLShcKCkgMy4zMTc1NSBUagotWzEgMCAwIDEgMTc2LjU3NyAyMTQuMzc2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ni41NzcgLTIxNC4zNzZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni41NzcgMjE0LjM3NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZXJyb3JcKGZcKSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAyMzAuMzc1IDIxNC4zNzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjMwLjM3NSAtMjE0LjM3Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMwLjM3NSAyMTQuMzc2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpaXMpIDkuOTYyNiBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oc2V0LikgMTMuNTU5MSBUagotWzEgMCAwIDEgNzIgMjEyLjU5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjAyLjYzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTkyLjQ1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTIyMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjQgVEptCi0obWVhbmluZykgMzQuMzExMiBUagotLTIyMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTIyNCBUSm0KLShwYXJhbWV0ZXJzKSA0My43MDU5IFRqCi1bMSAwIDAgMSAxOTUuMzA2IDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk1LjMwNiAtMTkyLjQ1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk1LjMwNiAxOTIuNDU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJsb2NrU2l6ZTEwMGspIDc3LjcwODMgVGoKLVsxIDAgMCAxIDI3My4wMTUgMTkyLjQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzMuMDE1IC0xOTIuNDU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzMuMDE1IDE5Mi40NTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjc3Ljc4NCAxOTIuNDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Ny43ODQgLTE5Mi40NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Ny43ODQgMTkyLjQ1OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMzMxLjU4MyAxOTIuNDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMS41ODMgLTE5Mi40NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMy44MDggMTkyLjQ1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzUwLjQyIDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUwLjQyIC0xOTIuNDU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTAuNDIgMTkyLjQ1OSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi1bMSAwIDAgMSA0MTAuMTk2IDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEwLjE5NiAtMTkyLjQ1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEwLjE5NiAxOTIuNDU5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yMjkgVEptCi0oc2VlKSAxMi43MjIyIFRqCi1bMSAwIDAgMSA0MjkuOTEzIDE5Mi40NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI5LjkxMyAtMTkyLjQ1OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI5LjkxMyAxOTIuNDU5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgNTM3LjUwOSAxOTIuNDU5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzNy41MDkgLTE5Mi40NTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNy41MDkgMTkyLjQ1OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAxOTAuMzAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xODAuMzM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNzAuNTQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbCkgMTIuNzMyMiBUagotLTM4MiBUSm0KLShyZXF1aXJlZCkgMzMuMTk1NCBUagotLTM4MiBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0zODIgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zODIgVEptCi0oYWxsb2NhdGVkKSAzNS45NjUgVGoKLS0zODMgVEptCi0oYXQpIDcuMTkzIFRqCi0tMzgyIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTM4MiBUSm0KLShzdGFnZSwpIDIyLjk2MzggVGoKLS00MTUgVEptCi0oc28pIDguODU2NzUgVGoKLS0zODIgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0zODIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzgyIFRKbQotKGNhbGwpIDE0LjM4NiBUagotLTM4MiBUSm0KLShjb21wbGV0ZXMpIDQwLjM5ODMgVGoKLS0zODIgVEptCi0oc3VjY2Vzc2Z1bGx5KSA0OC42OTcyIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0MjQuNjkxIDE3MC41NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI0LjY5MSAtMTcwLjU0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI0LjY5MSAxNzAuNTQxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotWzEgMCAwIDEgNDk2LjQyMiAxNzAuNTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Ni40MjIgLTE3MC41NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwMC4yMjggMTcwLjU0MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjYW5ub3QpIDI2LjU2MDMgVGoKLS0zODIgVEptCi0oYmUpIDkuNDA0NjkgVGoKLTcyIDE1OC41ODYgVGQKLShzaWduYWxsZWQpIDM1Ljk3NDkgVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS0yNTAgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDIwMy43MTUgMTU4LjU4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDMuNzE1IC0xNTguNTg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDMuNzE1IDE1OC41ODYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDI2OS40NjggMTU4LjU4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjkuNDY4IC0xNTguNTg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNjkuNDY4IDE1OC41ODYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTU2LjQyOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTQ2LjQ2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTM2LjY2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShhc3NpZ25tZW50cykgNDguNzA3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjkuMTQ0IDEzNi42NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjE0NCAtMTM2LjY2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjE0NCAxMzYuNjY4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIxMC45ODcgMTM2LjY2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTg3IC0xMzYuNjY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTg3IDEzNi42NjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiAxMzQuNTExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtODMuNjU5M10gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjg1MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuODUxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMikgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAyNiAyNgotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTE2NS4wMTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTQzLjQ2MiByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDEzOS44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX0NPTkZJR19FUlJPUikgODkuNjYzNCBUagotOTguNDg3OSA2OTkuNjc2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxpYnJhcnkpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaGFzKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGJlZW4pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0obWlzLWNvbXBpbGVkKSA3MS43MzA3IFRqCi05MCA2ODcuNzIxIFRkCi0oQlpfUEFSQU1fRVJST1IpIDgzLjY4NTggVGoKLTk4LjQ4NzkgNjc1Ljc2NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGYpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oTlVMTCkgMjMuOTEwMiBUagotOTguNDg3OSA2NjMuODExIFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYmxvY2tTaXplMTAwaykgNzcuNzA4MyBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDEpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYmxvY2tTaXplMTAwaykgNzcuNzA4MyBUagotLTQyNiBUSm0KLSg+KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDkpIDUuOTc3NTYgVGoKLTkwIDY1MS44NTYgVGQKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotOTguNDg3OSA2MzkuOSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGZlcnJvclwoZlwpKSA1My43OTggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0obm9uemVybykgNDEuODQyOSBUagotOTAgNjI3Ljk0NSBUZAotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotOTguNDg3OSA2MTUuOTkgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCA2MDQuMDM1IFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNTkyLjA4IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDU3Ni41MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTY2LjU3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTU0LjYyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWVzOikgMjMuMjQyNyBUagotWzEgMCAwIDEgNzIgNTU0LjUyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTYwLjc3MjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNTkuNzc1OCByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDU2LjE4OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01NDUuMTU2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1NDUuMTU2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKFBvaW50ZXIpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYWJzdHJhY3QpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi05OC40ODc5IDUzMy4yMDEgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShiemVycm9yKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX09LKSAyOS44ODc4IFRqCi05MCA1MjEuMjQ1IFRkCi0oTlVMTCkgMjMuOTEwMiBUagotOTguNDg3OSA1MDkuMjkgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgNDkzLjc0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODMuNzg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzEuODMxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFsbG8pIDE3LjcxMzUgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh4dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGFjdGlvbnM6KSAzMC45OTM2IFRqCi1bMSAwIDAgMSA3MiA0NzEuNzMxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtODQuNjgyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA4My42ODYyIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgODAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTQ2Mi4zNjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDQ2Mi4zNjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLTk4LjQ4NzkgNDUwLjQxMSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNDM4LjQ1NiBUZAotKFwoeW91KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGNvdWxkKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGdvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGRpcmVjdGx5KSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKHRvKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaMl9ieldyaXRlQ2xvc2UsKSAxMDEuNjE5IFRqCi0tNDI2IFRKbQotKGJ1dCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSh0aGlzKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHdvdWxkKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGJlKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHByZXR0eSkgMzUuODY1NCBUagotNDg1LjUwNSA0MzQuMjEyIFRkCi0vRjU2NF8wIDkuOTYyNiBUZgotKCApIDkuOTYyNiBUagotNDkzLjgwOCA0MzQuMjEyIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKC0pIDIuNzY5NiBUagotOTAgNDI2LjUwMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShwb2ludGxlc3NcKSkgNTkuNzc1NiBUagotOTAgNDE0LjU0NiBUZAotKEJaMl9ieldyaXRlQ2xvc2UpIDk1LjY0MSBUagotOTguNDg3OSA0MDIuNTkgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMzg3LjA0OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTM3Ny4wODZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDM1Ni40MjggVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKDMuNC42LikgNDMuMDcyOSBUagotWzEgMCAwIDEgMTE5Ljg1OCAzNTYuNDI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44NTggLTM1Ni40MjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44NTggMzU2LjQyOCBUZAotL0YzOTJfMCAxNy4yMTU0IFRmCi0oQloyX2J6V3JpdGUpIDExMy42MjIgVGoKLVsxIDAgMCAxIDIzMy40OCAzNTYuNDI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2MS40OCAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjQuOTA2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAyMy45MTAzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMjAuMzIzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTM0NC43M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzQ0LjczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZvaWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yMjAuNTUgMzQyLjk4NyBUZAotKCopIDUuOTc3NTYgVGoKLTIyNi41MjggMzQ0LjczIFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0zMTguNzAyIDM0Mi45ODcgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zMjQuNjc5IDM0NC43MyBUZAotKGIsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZvaWQpIDIzLjkxMDIgVGoKLTM2OS4wMzMgMzQyLjk4NyBUZAotKCopIDUuOTc3NTYgVGoKLTM3NS4wMSAzNDQuNzMgVGQKLShidWYsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsZW4pIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAzMjkuMTg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMxOS4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDMwNy4yNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBYnNvcmJzKSAzMy4yMDUzIFRqCi1bMSAwIDAgMSAxMDcuNjk2IDMwNy4yN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDcuNjk2IC0zMDcuMjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNy42OTYgMzA3LjI3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxlbikgMTcuOTMyNyBUagotWzEgMCAwIDEgMTI1LjYyOSAzMDcuMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTI1LjYyOSAtMzA3LjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjguMTE5IDMwNy4yNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShieXRlcykgMjEuMDMxIFRqCi0tMjUwIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotWzEgMCAwIDEgMjE0LjU0NCAzMDcuMjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE0LjU0NCAtMzA3LjI3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTQuNTQ0IDMwNy4yNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShidWYpIDE3LjkzMjcgVGoKLVsxIDAgMCAxIDIzMi40NzcgMzA3LjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzMi40NzcgLTMwNy4yN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMyLjQ3NyAzMDcuMjcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVudHVhbGx5KSAzMi4wOTk1IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLSh3cml0dGVuKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlLikgMTUuMjIyOSBUagotWzEgMCAwIDEgNzIgMzA1LjExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk1LjE1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjg1LjM1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShhc3NpZ25tZW50cykgNDguNzA3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSAxNjkuMTQ0IDI4NS4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY5LjE0NCAtMjg1LjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY5LjE0NCAyODUuMzUzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDIxMC45ODcgMjg1LjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuOTg3IC0yODUuMzUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTAuOTg3IDI4NS4zNTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiAyODMuMTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTA4LjU5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAxMDcuNTk3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTA0LjAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjczLjgzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjczLjgzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9QQVJBTV9FUlJPUikgODMuNjg1OCBUagotOTguNDg3OSAyNjEuODc2IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ1ZikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGxlbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLTkwIDI0OS45MjEgVGQKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotOTguNDg3OSAyMzcuOTY1IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ob3BlbmVkKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLTkwIDIyNi4wMSBUZAotKEJaX0lPX0VSUk9SKSA2NS43NTMyIFRqCi05OC40ODc5IDIxNC4wNTUgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGVyZSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotLTQyNiBUSm0KLSh3cml0aW5nKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGZpbGUuKSAyOS44ODc4IFRqCi05MCAyMDIuMSBUZAotKEJaX09LKSAyOS44ODc4IFRqCi05OC40ODc5IDE5MC4xNDUgVGQKLShvdGhlcndpc2UpIDUzLjc5OCBUagotWzEgMCAwIDEgNzIgMTc0LjYwM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE2NC42NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTQzLjk4MiBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjcuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDE0My45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMTQzLjk4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAxNDMuOTgyIFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpXcml0ZUNsb3NlKSAxNjUuMjY4IFRqCi1bMSAwIDAgMSAyODUuMTI2IDE0My45ODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEzLjEyNiAtMi4zMzI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOTAuNzk3NV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyMykgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAyNyAyNwotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTE2NS4wMTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMTQzLjQ2MiByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDEzOS44NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC03MTEuNjMxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA3MTEuNjMxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHZvaWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGVDbG9zZVwoKSAxMDEuNjE5IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjQ2LjE5NCA3MDkuODg4IFRkCi0oKikgNS45Nzc1NiBUagotMjUyLjE3MSA3MTEuNjMxIFRkCi0oYnplcnJvciwpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0zNDAuMTAyIDcwOS44ODggVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNTAuMzIzIDcxMS42MzEgVGQKLShmLCkgMTEuOTU1MSBUagotMTg3LjYxMSA2OTkuNjc2IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGFiYW5kb24sKSA0Ny44MjA1IFRqCi0xODcuNjExIDY4Ny43MjEgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI1Ny42MDkgNjg1Ljk3OCBUZAotKCopIDUuOTc3NTYgVGoKLTI2Ny44MyA2ODcuNzIxIFRkCi0obmJ5dGVzX2luLCkgNTkuNzc1NiBUagotMTg3LjYxMSA2NzUuNzY2IFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0yNTcuNjA5IDY3NC4wMjMgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yNjcuODMgNjc1Ljc2NiBUZAotKG5ieXRlc19vdXQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05MCA2NTEuODU2IFRkCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpXcml0ZUNsb3NlNjRcKCkgMTEzLjU3NCBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI1OC4xNDkgNjUwLjExMiBUZAotKCopIDUuOTc3NTYgVGoKLTI2NC4xMjcgNjUxLjg1NiBUZAotKGJ6ZXJyb3IsKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKEJaRklMRSkgMzUuODY1NCBUagotMzUyLjA1NyA2NTAuMTEyIFRkCi0oKikgNS45Nzc1NiBUagotMzYyLjI3OCA2NTEuODU2IFRkCi0oZiwpIDExLjk1NTEgVGoKLTE5Ni4wOTkgNjM5LjkgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYWJhbmRvbiwpIDQ3LjgyMDUgVGoKLTE5Ni4wOTkgNjI3Ljk0NSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjY2LjA5NyA2MjYuMjAyIFRkCi0oKikgNS45Nzc1NiBUagotMjc2LjMxOCA2MjcuOTQ1IFRkCi0obmJ5dGVzX2luX2xvMzIsKSA4OS42NjM0IFRqCi0xOTYuMDk5IDYxNS45OSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjY2LjA5NyA2MTQuMjQ3IFRkCi0oKikgNS45Nzc1NiBUagotMjc2LjMxOCA2MTUuOTkgVGQKLShuYnl0ZXNfaW5faGkzMiwpIDg5LjY2MzQgVGoKLTE5Ni4wOTkgNjA0LjAzNSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjY2LjA5NyA2MDIuMjkyIFRkCi0oKikgNS45Nzc1NiBUagotMjc2LjMxOCA2MDQuMDM1IFRkCi0obmJ5dGVzX291dF9sbzMyLCkgOTUuNjQxIFRqCi0xOTYuMDk5IDU5Mi4wOCBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjY2LjA5NyA1OTAuMzM2IFRkCi0oKikgNS45Nzc1NiBUagotMjc2LjMxOCA1OTIuMDggVGQKLShuYnl0ZXNfb3V0X2hpMzIpIDg5LjY2MzQgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiA1NzYuNTM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU2Ni41NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU1NC42MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShDb21wcmVzc2VzKSA0OC4xNDkyIFRqCi0tNDAzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tNDAyIFRKbQotKFwwMDN1c2hlcykgMjcuNjc2MSBUagotLTQwMyBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDAzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQwMiBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tNDAzIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTQwMyBUSm0KLShhKSA0LjQyMzM5IFRqCi0xIFRKbQotKGxsKSA1LjUzOTIxIFRqCi0tNDAzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS00MDMgVEptCi0oc28pIDguODU2NzUgVGoKLS00MDIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXIpIDcuNzQwOTQgVGoKLS00MDMgVEptCi0oc3VwcGxpZWQpIDMzLjc2MzMgVGoKLS00MDMgVEptCi0oYnkpIDkuOTYyNiBUagotWzEgMCAwIDEgMzg0LjE1MiA1NTQuNjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg0LjE1MiAtNTU0LjYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODQuMTUyIDU1NC42MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDQ5LjkwNiA1NTQuNjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ5LjkwNiAtNTU0LjYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDkuOTA2IDU1NC42MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNzY4IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTQwMyBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tNDAyIFRKbQotKGVuZC1vZi0pIDI5LjMxOTkgVGoKLTcyIDU0Mi42NjUgVGQKLShzdHJlYW0pIDI2LjU2MDMgVGoKLS0zNTIgVEptCi0obWFyaykgMjAuNDczMSBUagotMTAgVEptCi0oZXJzKSAxMS42MTY0IFRqCi0tMzUyIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTM1MyBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMzUyIFRKbQotKHdyaXR0ZW4sKSAzMC43MTQ3IFRqCi0tMzc4IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMzUyIFRKbQotKHN1YnNlcXVlbnQpIDQ0LjI3MzggVGoKLS0zNTIgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0zNTIgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMzAwLjQ1NiA1NDIuNjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMwMC40NTYgLTU0Mi42NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMwMC40NTYgNTQyLjY2NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMzY2LjIwOSA1NDIuNjY1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2Ni4yMDkgLTU0Mi42NjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2OS43MTggNTQyLjY2NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhcmUpIDEyLjE2NDMgVGoKLS0zNTIgVEptCi0oaWxsZSkgMTIuNzMyMiBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFsLikgOS42ODM2NSBUagotLTEyMzQgVEptCi0oQWxsKSAxMi43MzIyIFRqCi0tMzUyIFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotLTM1MiBUSm0KLShhc3NvY2lhdGVkKSA0MC45NDYzIFRqCi0tMzUyIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLTcyIDUzMC43MSBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotWzEgMCAwIDEgMTUxLjQxMSA1MzAuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUxLjQxMSAtNTMwLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTEuNDExIDUzMC43MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxNTcuMzg5IDUzMC43MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTcuMzg5IC01MzAuNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1OS44NzkgNTMwLjcxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHJlbGVhc2VkLikgMzUuMTI4MSBUagotWzEgMCAwIDEgMjA3LjIzMSA1MzAuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjA3LjIzMSAtNTMwLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDcuMjMxIDUzMC43MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZmx1c2gpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDI0My4wOTcgNTMwLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0My4wOTcgLTUzMC43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ1LjU4NyA1MzAuNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oY2FsbGVkKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi1bMSAwIDAgMSA0MjIuNzcxIDUzMC43MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjIuNzcxIC01MzAuNzFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMi43NzEgNTMwLjcxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZjbG9zZSkgMzUuODY1NCBUagotWzEgMCAwIDEgNDU4LjYzNiA1MzAuNzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDU4LjYzNiAtNTMwLjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NTguNjM2IDUzMC43MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgnKSAzLjMxNzU1IFRqCi01MCBUSm0KLShkLikgNy40NzE5NSBUagotWzEgMCAwIDEgNzIgNTI4LjU1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTE4LjU5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1MDguNzkyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi1bMSAwIDAgMSA4MS41NzQzIDUwOC43OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODEuNTc0MyAtNTA4Ljc5Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODEuNTc0MyA1MDguNzkyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlQ2xvc2UpIDk1LjY0MSBUagotWzEgMCAwIDEgMTc3LjIxNiA1MDguNzkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny4yMTYgLTUwOC43OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MC4xNTUgNTA4Ljc5MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTI5NSBUSm0KLShjYWxsZWQpIDIzLjc5MDcgVGoKLS0yOTUgVEptCi0odG8pIDcuNzUwOSBUagotLTI5NSBUSm0KLShjbGVhbikgMjEuMDIxMSBUagotLTI5NSBUSm0KLSh1cCkgOS45NjI2IFRqCi0tMjk1IFRKbQotKGFmdGVyKSAxOC4yNTE1IFRqCi0tMjk1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjk1IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzA2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NSBUSm0KLShvbmx5KSAxNy43MTM1IFRqCi0tMjk1IFRKbQotKGFjdGlvbikgMjQuMzQ4NiBUagotLTI5NSBUSm0KLShpcykgNi42NDUwNSBUagotLTI5NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk1IFRKbQotKHJlbGVhc2UpIDI3LjY1NjIgVGoKLS0yOTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjk1IFRKbQotKG1lbW9yeSkgMzMuMjA1MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTg5MSBUSm0KLShUaGUpIDE1LjQ5MTggVGoKLS0yOTUgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNzIgNDk2LjgzNyBUZAotKHJlY29yZHMpIDI5LjMxOTkgVGoKLS0yODkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg5IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjg5IFRKbQotKGNvZGVzKSAyMi42ODQ4IFRqCi0tMjg5IFRKbQotKGlzc3VlZCkgMjQuOTA2NSBUagotLTI4OSBUSm0KLShieSkgOS45NjI2IFRqCi0tMjg5IFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXMpIDIxLjU4OSBUagotLTI4OSBUSm0KLShjYWxscywpIDIwLjc1MjEgVGoKLS0yOTkgVEptCi0oc28pIDguODU2NzUgVGoKLS0yODkgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjg5IFRKbQotKHNpdHVhdGlvbikgMzQuMzIxMiBUagotLTI4OSBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjg5IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjg5IFRKbQotKGRldGVjdGVkKSAzMy4xOTU0IFRqCi0tMjg5IFRKbQotKGF1dG9tYXRpY2FsbHkpIDU0LjIzNjQgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS00MjcgVEptCi0oVGhlcmUpIDIzLjIzMjggVGoKLS0yODkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODkgVEptCi0obm8pIDkuOTYyNiBUagotLTI4OSBUSm0KLShhdHRlbXB0KSAyOS44ODc4IFRqCi03MiA0ODQuODgyIFRkCi0odG8pIDcuNzUwOSBUagotLTI2MyBUSm0KLShjb21wbGV0ZSkgMzYuNTIyOSBUagotLTI2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjMgVEptCi0oY29tcHJlc3Npb24pIDUwLjM2MDkgVGoKLS0yNjMgVEptCi0ob3BlcmF0aW9uLCkgNDAuMTE5NCBUagotLTI2NSBUSm0KLShub3IpIDEzLjI4MDEgVGoKLS0yNjMgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMjU4LjMwOCA0ODQuODgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1OC4zMDggLTQ4NC44ODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OC4zMDggNDg0Ljg4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmZmx1c2gpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDI5NC4xNzMgNDg0Ljg4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTQuMTczIC00ODQuODgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTYuNzkgNDg0Ljg4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjMgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI2MiBUSm0KLShcMDAybGUuKSAxNS4yMjI5IFRqCi0tNjk2IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI2MyBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNjMgVEptCi0oZm9yY2UpIDIwLjQ2MzIgVGoKLS0yNjIgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjYzIFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHZpb3VyKSAyMS4wMzEgVGoKLS0yNjMgVEptCi0odG8pIDcuNzUwOSBUagotLTI2MiBUSm0KLShoYXBwZW4pIDI4Ljc3MiBUagotNzIgNDcyLjkyNiBUZAotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY2FzZSkgMTcuMTQ1NiBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShubykgOS45NjI2IFRqCi0tMjUwIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0ocGFzc2luZykgMjkuODg3OCBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKG5vbnplcm8pIDMyLjA4OTUgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDMwNS4wMTQgNDcyLjkyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDUuMDE0IC00NzIuOTI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDUuMDE0IDQ3Mi45MjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYWJhbmRvbikgNDEuODQyOSBUagotWzEgMCAwIDEgMzQ2Ljg1OCA0NzIuOTI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Ni44NTggLTQ3Mi45MjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0Ni44NTggNDcyLjkyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA0NzAuNzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQ2MC44MDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQ1MS4wMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDgwLjU5NzQgNDUxLjAwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04MC41OTc0IC00NTEuMDA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04MC41OTc0IDQ1MS4wMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmJ5dGVzX2luKSA1My43OTggVGoKLVsxIDAgMCAxIDEzNC4zOTYgNDUxLjAwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzQuMzk2IC00NTEuMDA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzYuMzU4IDQ1MS4wMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0xOTcgVEptCi0obm9uLW51bGwsKSAzNi4yNTM5IFRqCi1bMSAwIDAgMSAxODMuMjg3IDQ1MS4wMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTgzLjI4NyAtNDUxLjAwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTgzLjI4NyA0NDkuMjY1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTE4OS4yNjUgNDUxLjAwOSBUZAotKG5ieXRlc19pbikgNTMuNzk4IFRqCi1bMSAwIDAgMSAyNDMuMDYzIDQ1MS4wMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQzLjA2MyAtNDUxLjAwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ1LjAyNSA0NTEuMDA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0xOTcgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0xOTcgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMTk3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0xOTcgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0xOTcgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMTk3IFRKbQotKHRvdGFsKSAxNy43MTM1IFRqCi0tMTk3IFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob2x1bWUpIDI0LjkwNjUgVGoKLS0xOTcgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0xOTcgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0xOTcgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTE5NyBUSm0KLShoYW5kbGVkLikgMzQuMDMyMiBUagotLTU4NCBUSm0KLShTaW1pbGFybHkpIDM3LjA5MDggVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDQzOS4wNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQzOS4wNTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQzOS4wNTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obmJ5dGVzX291dCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMTMxLjc3NiA0MzkuMDUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMS43NzYgLTQzOS4wNTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNC43MTYgNDM5LjA1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aWxsKSAxNS41MDE4IFRqCi0tMjk1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjk1IFRKbQotKHNldCkgMTEuMDY4NCBUagotLTI5NSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NSBUSm0KLSh0b3RhbCkgMTcuNzEzNSBUagotLTI5NSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTIwIFRKbQotKG9sdW1lKSAyNC45MDY1IFRqCi0tMjk2IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjk1IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yOTUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI5NSBUSm0KLSh3cml0dGVuLikgMzAuNzE0NyBUagotLTg5MCBUSm0KLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI5NSBUSm0KLShjb21wYXRpYmlsaXR5KSA1My4xNDA1IFRqCi0tMjk1IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yOTUgVEptCi0ob2xkZXIpIDIwLjQ3MzEgVGoKLS0yOTYgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb25zKSAyOC4yMjQgVGoKLS0yOTUgVEptCi0ob2YpIDguMjk4ODUgVGoKLTcyIDQyNy4wOTggVGQKLSh0aGUpIDEyLjE3NDMgVGoKLS0yODMgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTE4LjI5NCA0MjcuMDk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOC4yOTQgLTQyNy4wOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOC4yOTQgNDI3LjA5OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpXcml0ZUNsb3NlKSA5NS42NDEgVGoKLVsxIDAgMCAxIDIxMy45MzYgNDI3LjA5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTMuOTM2IC00MjcuMDk4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTYuNzUzIDQyNy4wOTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ob25seSkgMTcuNzEzNSBUagotLTI4MyBUSm0KLSh5aWVsZHMpIDIzLjgwMDcgVGoKLS0yODMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjgyIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHdlcikgMTQuOTMzOSBUagotLTI4MyBUSm0KLSgzMikgOS45NjI2IFRqCi0tMjgzIFRKbQotKGJpdHMpIDE0LjM5NiBUagotLTI4MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTI4MyBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI4MiBUSm0KLShjb3VudHMuKSAyOC41MDMgVGoKLS04MTcgVEptCi0oVXNlKSAxNS40OTE4IFRqCi1bMSAwIDAgMSA0MjMuNDk5IDQyNy4wOThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIzLjQ5OSAtNDI3LjA5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIzLjQ5OSA0MjcuMDk4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ieldyaXRlQ2xvc2U2NCkgMTA3LjU5NiBUagotWzEgMCAwIDEgNTMxLjA5NSA0MjcuMDk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzMS4wOTUgLTQyNy4wOThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzMy45MTMgNDI3LjA5OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpZikgNi4wODcxNSBUagotNzIgNDE1LjE0MyBUZAotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYW50KSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShmdWxsKSAxMy44MzgxIFRqCi0tMjUwIFRKbQotKDY0KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oYml0KSAxMC41MjA1IFRqCi0tMjUwIFRKbQotKGNvdW50cy4pIDI4LjUwMyBUagotLTYyMCBUSm0KLShUaGVzZSkgMjMuNzkwNyBUagotLTI1MCBUSm0KLSh0dykgOS45NjI2IFRqCi0xMCBUSm0KLShvKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tMjUwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLShvdGhlcndpc2UpIDM4LjczNDYgVGoKLS0yNTAgVEptCi0oYWJzb2x1dGVseSkgNDAuOTU2MiBUagotLTI1MCBUSm0KLShpZGVudGljYWwuKSAzNi44MDE4IFRqCi1bMSAwIDAgMSA3MiA0MTIuOTg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00MDMuMDI0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzOTMuMjI1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFBvc3NpYmxlKSAzMy4yMTUzIFRqCi0tMjUwIFRKbQotKGFzc2lnbm1lbnRzKSA0OC43MDcyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLVsxIDAgMCAxIDE2OS4xNDQgMzkzLjIyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjkuMTQ0IC0zOTMuMjI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjkuMTQ0IDM5My4yMjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnplcnJvcikgNDEuODQyOSBUagotWzEgMCAwIDEgMjEwLjk4NyAzOTMuMjI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxMC45ODcgLTM5My4yMjVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxMC45ODcgMzkzLjIyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDcyIDM5MS4wNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC04NC42ODI1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDgzLjY4NjIgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4MC4wOTk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMzgxLjcwNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMzgxLjcwNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9TRVFVRU5DRV9FUlJPUikgMTAxLjYxOSBUagotOTguNDg3OSAzNjkuNzQ4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh3YXMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ob3BlbmVkKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZE9wZW4pIDgzLjY4NTggVGoKLTkwIDM1Ny43OTMgVGQKLShCWl9JT19FUlJPUikgNjUuNzUzMiBUagotOTguNDg3OSAzNDUuODM4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlcmUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaXMpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0od3JpdGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcHJlc3NlZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShmaWxlKSAyMy45MTAyIFRqCi05MCAzMzMuODgzIFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgMzIxLjkyOCBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiAzMDYuMzg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjk2LjQyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjc1Ljc2NSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy40LjguKSA0My4wNzI5IFRqCi0tMjc4IFRKbQotKEhhbmRsaW5nKSA3My42NDc1IFRqCi0tMjc4IFRKbQotKGVtYmVkKSA1NS40ODUyIFRqCi0xMCBUSm0KLShkZWQpIDMwLjYwOSBUagotLTI3OCBUSm0KLShjb21wcmVzc2VkKSAxMDEuNDE2IFRqCi0tMjc4IFRKbQotKGRhdGEpIDM1LjM5NDkgVGoKLS0yNzggVEptCi0oc3RyZWFtcykgNjYuMDIxMSBUagotWzEgMCAwIDEgNzIgMjcxLjkzNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjYxLjk3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjUzLjg0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yMDMgVEptCi0oaGlnaC1sZSkgMjguMjI0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTIwMyBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjAzIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjaWxpdGF0ZXMpIDM1LjQxNyBUagotLTIwMyBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yMDMgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDIyNi40MDQgMjUzLjg0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjYuNDA0IC0yNTMuODQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjYuNDA0IDI1My44NDcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI1Ni4yOTIgMjUzLjg0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNTYuMjkyIC0yNTMuODQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNTguMzE2IDI1My44NDcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGF0YSkgMTYuNTk3NyBUagotLTIwMyBUSm0KLShzdHJlYW1zKSAzMC40MzU3IFRqCi0tMjAzIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjAzIFRKbQotKGZvcm0pIDE5LjM2NzMgVGoKLS0yMDMgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjAzIFRKbQotKHBhcnQpIDE1LjQ5MTggVGoKLS0yMDMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMDQgVEptCi0oYSkgNC40MjMzOSBUagotLTIwMyBUSm0KLShzdXJyb3VuZGluZywpIDUwLjYzOTkgVGoKLS0yMTIgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZXIpIDEyLjcyMjIgVGoKLS0yMDMgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTIwMyBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi1bMSAwIDAgMSA3MiAyNTEuNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOS43MjM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMjIxLjk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAyMjEuOTY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMjIxLjk2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0yMjEuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMjIxLjk2NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTI0MCBUSm0KLSh3cml0aW5nLCkgMzEuMjcyNiBUagotLTI0MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI0MSBUSm0KLSh0YWspIDEyLjE3NDMgVGoKLTEwIFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjQwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMjQxIFRKbQotKG9wZW4pIDE5LjM2NzMgVGoKLS0yNDAgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjQxIFRKbQotKGhhbmRsZSwpIDI5LjA1MDkgVGoKLS0yNDIgVEptCi0od3JpdGVzKSAyNC4zNDg2IFRqCi0tMjQxIFRKbQotKGNvbXByZXMpIDMzLjc1MzMgVGoKLTEgVEptCi0oc2VkKSAxMy4yODAxIFRqCi0tMjQxIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNDAgVEptCi0odG8pIDcuNzUwOSBUagotLTI0MSBUSm0KLShpdCwpIDguMDI5ODYgVGoKLVsxIDAgMCAxIDM5OC45MjYgMjIxLjk2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zOTguOTI2IC0yMjEuOTY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTguOTI2IDIyMS45NjcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmZsdXNoKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0MzQuNzkxIDIyMS45NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM0Ljc5MSAtMjIxLjk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM0Ljc5MSAyMjEuOTY3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGVzKSA4LjI5ODg1IFRqCi0tMjQwIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjQxIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI0MCBUSm0KLShkb2VzKSAxOC4yNjE0IFRqCi0tMjQxIFRKbQotKG5vdCkgMTIuNzMyMiBUagotWzEgMCAwIDEgNTA0LjEzNSAyMjEuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwNC4xMzUgLTIyMS45NjddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwNC4xMzUgMjIxLjk2NyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmY2xvc2UpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDU0MCAyMjEuOTY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMjIxLjk2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDIxMC4wMTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXQuKSA4LjAyOTg2IFRqCi0tNjEwIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTIzNSBUSm0KLShjYWxsaW5nKSAyNy4xMTgyIFRqCi0tMjM1IFRKbQotKGFwcGxpY2F0aW9uKSA0NC4yNzM4IFRqCi0tMjM1IFRKbQotKGNhbikgMTMuODI4MSBUagotLTIzNSBUSm0KLSh3cml0ZSkgMjAuNDczMSBUagotLTIzNSBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yMzUgVEptCi0obykgNC45ODEzIFRqCi0yNSBUSm0KLSh3bikgMTIuMTc0MyBUagotLTIzNSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjM1IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTIzNSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIzNSBUSm0KLShhZnRlcikgMTguMjUxNSBUagotLTIzNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzUgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTIzNSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjM1IFRKbQotKHN0cmVhbSwpIDI5LjA1MDkgVGoKLS0yMzggVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTIzNSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjM1IFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yMzUgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi04Ni45NDQgMTk4LjA1NiBUZAotKGhhbmRsZS4pIDI5LjA1MDkgVGoKLVsxIDAgMCAxIDExNS45OTUgMTk4LjA1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00My45OTQ4IC0yMS45MTc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtMTc2LjEzOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAxNzYuMTM5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggMTc2LjEzOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC0xNzYuMTM5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMTc2LjEzOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZWFkaW5nKSAzMy4yMDUzIFRqCi0tMjM2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjM2IFRKbQotKG1vcmUpIDIwLjQ3MzEgVGoKLS0yMzYgVEptCi0oY29tcGxlKSAyOS4zMjk5IFRqCi0xNSBUSm0KLSh4LCkgNy40NzE5NSBUagotLTIzOCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIzNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMzYgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWNpbGl0aWVzKSAzMC45OTM2IFRqCi0tMjM2IFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTIzNiBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yMzUgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yMzYgVEptCi0oZ2VuZXJhbCkgMjkuMzE5OSBUagotLTIzNiBUSm0KLShhcykgOC4yOTg4NSBUagotLTIzNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIzNiBUSm0KLShjb3VsZCkgMjIuMTM2OSBUagotLTIzNiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTIzNiBUSm0KLShzaW5jZSkgMjAuNDczMSBUagotLTIzNSBUSm0KLShnZW5lcmFsaXR5KSAzOS44NDA0IFRqCi0tMjM2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjM2IFRKbQotKGhhcmQpIDE3LjcwMzUgVGoKLS0yMzYgVEptCi0odG8pIDcuNzUwOSBUagotLTIzNiBUSm0KLShyZWNvbmNpbGUpIDM2LjUxMjkgVGoKLTg2Ljk0NCAxNjQuMTgzIFRkCi0od2l0aCkgMTcuNzEzNSBUagotLTQwNCBUSm0KLShlZikgNy43NDA5NCBUagotMjUgVEptCi0oXDAwMmNpZW5jKSAyNi41NjAzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDE2NC44MTEgMTY0LjE4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuODExIC0xNjQuMTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjQuODExIDE2NC4xODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotWzEgMCAwIDEgMjI0LjU4NyAxNjQuMTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyNC41ODcgLTE2NC4xODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyOC42MTQgMTY0LjE4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWFkcykgMjEuMDIxMSBUagotLTQwNCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tNDA1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQwNCBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tNDA0IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTQwNCBUSm0KLShpbikgNy43NTA5IFRqCi0tNDA1IFRKbQotKGJsb2NrcykgMjYuMDEyMyBUagotLTQwNCBUSm0KLShvZikgOC4yOTg4NSBUagotLTQwNCBUSm0KLShzaXplKSAxNS40OTE4IFRqCi1bMSAwIDAgMSA0MzQuNzQ0IDE2NC4xODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM0Ljc0NCAtMTY0LjE4M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM0Ljc0NCAxNjQuMTgzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX01BWF9VTlVTRUQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDUxMi40NTIgMTY0LjE4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTIuNDUyIC0xNjQuMTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTYuNDc5IDE2NC4xODMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYnl0ZXMsKSAyMy41MjE3IFRqCi04Ni45NDQgMTUyLjIyOCBUZAotKGFuZCkgMTQuMzg2IFRqCi0tNDEzIFRKbQotKGluKSA3Ljc1MDkgVGoKLS00MTMgVEptCi0oZG9pbmcpIDIyLjY5NDggVGoKLS00MTMgVEptCi0oc28pIDguODU2NzUgVGoKLS00MTMgVEptCi0ocHJvYmFibHkpIDM1LjQxNyBUagotLTQxMyBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tNDEzIFRKbQotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNob290KSAyOS4zMjk5IFRqCi0tNDEzIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQxMyBUSm0KLShsb2dpY2FsKSAyNy4xMTgyIFRqCi0tNDEzIFRKbQotKGVuZCkgMTQuMzg2IFRqCi0tNDEzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDEzIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00MTMgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotLTE1OTggVEptCi0oVCkgNi4wODcxNSBUagotODAgVEptCi0obykgNC45ODEzIFRqCi0tNDEzIFRKbQotKHJlY28pIDE3LjE0NTYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS00MTMgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tNDEzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS00MTMgVEptCi0ob25jZSkgMTguODA5NCBUagotODYuOTQ0IDE0MC4yNzMgVGQKLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi0tMjUyIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1MiBUSm0KLShlbmRlZCwpIDI2LjI4MTMgVGoKLS0yNTMgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyMTAuNzA1IDE0MC4yNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjcwNSAtMTQwLjI3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEwLjcwNSAxNDAuMjczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDMyNC4yNzkgMTQwLjI3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjQuMjc5IC0xNDAuMjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMjYuNzg5IDE0MC4yNzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYWZ0ZXIpIDE4LjI1MTUgVGoKLS0yNTIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUyIFRKbQotKGxhc3QpIDEzLjgzODEgVGoKLS0yNTIgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjUyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSA0MDYuMjkxIDE0MC4yNzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA2LjI5MSAtMTQwLjI3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA2LjI5MSAxNDAuMjczIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDQ2Ni4wNjcgMTQwLjI3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjYuMDY3IC0xNDAuMjczXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjguNTc4IDE0MC4yNzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCh0aGUpIDE1LjQ5MTggVGoKLS0yNTIgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yNTIgVEptCi0ocmV0dXJuaW5nKSAzNi41MjI5IFRqCi1bMSAwIDAgMSA4Ni45NDQgMTI4LjMxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTEyOC4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAxMjguMzE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDE2NC42NTMgMTI4LjMxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuNjUzIC0xMjguMzE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjQuNjUzIDEyOC4zMTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXCkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTI1MCBUSm0KLShjYWxsaW5nKSAyNy4xMTgyIFRqCi1bMSAwIDAgMSAyNDMuMDI4IDEyOC4zMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQzLjAyOCAtMTI4LjMxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQzLjAyOCAxMjguMzE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotWzEgMCAwIDEgMzMyLjY5MiAxMjguMzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMi42OTIgLTEyOC4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMi42OTIgMTI4LjMxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMzUuMTgyIDEyOC4zMThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjYzLjE4MiAtNzcuNDY2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuODUxOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC44NTE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI0KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDI4IDI4Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMjEuNTU0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNzIwXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoaXMpIDE3LjcxMzUgVGoKLS0yNzEgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjcyIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yNzEgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNzEgVEptCi0oZWFzeSkgMTcuNzAzNSBUagotLTI3MSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjcyIFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0yNzEgVEptCi0obXVsdGlwbGUpIDMzLjIxNTMgVGoKLVsxIDAgMCAxIDI5My4zMTIgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTMuMzEyIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTMuMzEyIDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMyMy4yIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzIzLjIgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNS45MDMgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzdHJlYW1zKSAzMC40MzU3IFRqCi0tMjcxIFRKbQotKHBsYWNlZCkgMjYuMDAyNCBUagotLTI3MiBUSm0KLShlbmQtdG8tZW5kLikgNDUuNjQ4NiBUagotLTM3NCBUSm0KLShBcykgMTEuMDY4NCBUagotLTI3MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzEgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yNzEgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNzIgVEptCi0ob25lKSAxNC4zODYgVGoKLS0yNzEgVEptCi0oc3RyZWFtLCkgMjkuMDUwOSBUagotNzIgNjk4LjA4MiBUZAotKHdoZW4pIDIxLjU3OSBUagotWzEgMCAwIDEgOTYuMTk0OCA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk2LjE5NDggLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk2LjE5NDggNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxNTUuOTcxIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU1Ljk3MSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjU4NiA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJldHVybnMpIDI3LjY2NjEgVGoKLVsxIDAgMCAxIDE4OC44NjggNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODguODY4IC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODguODY4IDY5OC4wODIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfU1RSRUFNX0VORCkgNzcuNzA4MyBUagotWzEgMCAwIDEgMjY2LjU3NyA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2Ni41NzcgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2Ni41NzcgNjk4LjA4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjYzIFRKbQotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgMjg4LjY4NSA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4OC42ODUgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4OC42ODUgNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkR2V0VW51c2VkKSAxMTMuNTc0IFRqCi1bMSAwIDAgMSA0MDIuMjU5IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDAyLjI1OSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA0Ljg3NSA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNjMgVEptCi0oY29sbGVjdCkgMjYuNTYwMyBUagotLTI2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjMgVEptCi0odW51c2VkKSAyOC4yMjQgVGoKLS0yNjIgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI2MyBUSm0KLShcKGNvcCkgMTcuNzAzNSBUagotMTAgVEptCi0oeSkgNC45ODEzIFRqCi0tMjYyIFRKbQotKGl0KSA1LjUzOTIxIFRqCi03MiA2ODYuMTI3IFRkCi0oaW50bykgMTUuNTAxOCBUagotLTI2NSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjY1IFRKbQotKG8pIDQuOTgxMyBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yNjUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMjY1IFRKbQotKHNvbWUpIDIxLjAzMSBUagotMjUgVEptCi0od2hlcmVcKS4pIDMwLjE0NjggVGoKLS03MTEgVEptCi0oVGhhdCkgMTguMjYxNCBUagotLTI2NSBUSm0KLShkYXRhKSAxNi41OTc3IFRqCi0tMjY1IFRKbQotKGZvcm1zKSAyMy4yNDI3IFRqCi0tMjY1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NSBUSm0KLShzdGFydCkgMTcuMTU1NiBUagotLTI2NSBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2NSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjUgVEptCi0obmUpIDkuNDA0NjkgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNjUgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI2NSBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi0tNzExIFRKbQotKFQpIDYuMDg3MTUgVGoKLTgwIFRKbQotKG8pIDQuOTgxMyBUagotLTI2NSBUSm0KLShzdGFydCkgMTcuMTU1NiBUagotLTI2NSBUSm0KLSh1bmNvbXByZXNzaW5nKSA2MC4zMjM1IFRqCi03MiA2NzQuMTcyIFRkCi0odGhhdCkgMTQuOTQzOSBUagotLTI0NiBUSm0KLShuZSkgOS40MDQ2OSBUagotMTUgVEptCi0oeHQpIDcuNzUwOSBUagotLTI0NiBUSm0KLShzdHJlYW0sKSAyOS4wNTA5IFRqCi0tMjQ3IFRKbQotKGNhbGwpIDE0LjM4NiBUagotWzEgMCAwIDEgMTU3LjIwNSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1Ny4yMDUgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1Ny4yMDUgNjc0LjE3MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpSZWFkT3BlbikgODMuNjg1OCBUagotWzEgMCAwIDEgMjQwLjg5MSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0MC44OTEgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0My4zNDQgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhZykgOS40MDQ2OSBUagotNSBUSm0KLShhaW4sKSAxNC42NjQ5IFRqCi0tMjQ3IFRKbQotKGZlZWRpbmcpIDI5Ljg3NzggVGoKLS0yNDYgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0NiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDcgVEptCi0odW51c2VkKSAyOC4yMjQgVGoKLS0yNDYgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI0NiBUSm0KLSh2aWEpIDEyLjE3NDMgVGoKLS0yNDYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSA0MDUuOTY3IDY3NC4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA1Ljk2NyAtNjc0LjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA1Ljk2NyA2NzQuMTcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHVudXNlZCkgMzUuODY1NCBUagotWzEgMCAwIDEgNDQxLjgzMyA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0MS44MzMgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ0NC4yODYgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgvKSAyLjc2OTYgVGoKLVsxIDAgMCAxIDQ0OS41MDggNjc0LjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDkuNTA4IC02NzQuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDkuNTA4IDY3NC4xNzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oblVudXNlZCkgNDEuODQyOSBUagotWzEgMCAwIDEgNDkxLjM1MSA2NzQuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5MS4zNTEgLTY3NC4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5My44MDQgNjc0LjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShwYXJhbWV0ZXJzLikgNDYuMTk2NiBUagotNzIgNjYyLjIxNyBUZAotKEspIDcuMTkzIFRqCi0yNSBUSm0KLShlZXApIDEzLjgyODEgVGoKLS0yNjMgVEptCi0oZG9pbmcpIDIyLjY5NDggVGoKLS0yNjMgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjY0IFRKbQotKHVudGlsKSAxOC4yNzE0IFRqCi1bMSAwIDAgMSAxNTguNjIyIDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjYyMiAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU4LjYyMiA2NjIuMjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUkVBTV9FTkQpIDc3LjcwODMgVGoKLVsxIDAgMCAxIDIzNi4zMyA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNi4zMyAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM4Ljk1MiA2NjIuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJldHVybikgMjMuNzkwNyBUagotLTI2MyBUSm0KLShjb2luY2lkZXMpIDM3LjYyODcgVGoKLS0yNjMgVEptCi0od2l0aCkgMTcuNzEzNSBUagotLTI2MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjQgVEptCi0ocGgpIDkuOTYyNiBUagotNSBUSm0KLSh5c2ljYWwpIDIzLjI0MjcgVGoKLS0yNjMgVEptCi0oZW5kKSAxNC4zODYgVGoKLS0yNjMgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNjMgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjYzIFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSA0MjMuMTI1IDY2Mi4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDIzLjEyNSAtNjYyLjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIzLjEyNSA2NjIuMjE3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZlb2ZcKGZcKSkgNDEuODQyOSBUagotWzEgMCAwIDEgNDY0Ljk2OCA2NjIuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2NC45NjggLTY2Mi4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2NC45NjggNjYyLjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKS4pIDUuODA4MiBUagotLTY5OSBUSm0KLShJbikgOC4yOTg4NSBUagotLTI2MyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjMgVEptCi0oc2l0dWF0aW9uKSAzNC4zMjEyIFRqCi1bMSAwIDAgMSA3MiA2NTAuMjYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NTAuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTAuMjYxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ielJlYWRHZXRVbnVzZWQpIDExMy41NzQgVGoKLVsxIDAgMCAxIDE4NS41NzQgNjUwLjI2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xODUuNTc0IC02NTAuMjYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xODguMDY1IDY1MC4yNjEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0od2lsbCkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjb3Vyc2UpIDI2LjAwMjQgVGoKLS0yNTAgVEptCi0ocmV0dXJuKSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZGF0YS4pIDE5LjA4ODMgVGoKLVsxIDAgMCAxIDcyIDY0OC45NTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzOC45ODldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyOC4zNDQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhpcykgMTcuNzEzNSBUagotLTI0MCBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNDEgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjQwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI0MSBUSm0KLShmZWVsKSAxNC45MzM5IFRqCi0tMjQwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI0MSBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI0MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDAgVEptCi0oaGlnaC1sZSkgMjguMjI0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsKSA3LjE5MyBUagotLTI0MSBUSm0KLShpbnRlcmYpIDIxLjU3OSBUagotMTAgVEptCi0oYWNlKSAxMy4yNzAyIFRqCi0tMjQwIFRKbQotKGNhbikgMTMuODI4MSBUagotLTI0MSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI0MCBUSm0KLSh1c2VkLikgMjAuNzUyMSBUagotLTYxNCBUSm0KLShJZikgNi42MzUwOSBUagotLTI0MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNDEgVEptCi0ocmVxdWlyZSkgMjguMjE0MSBUagotLTI0MCBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dHJhKSAxNS40OTE4IFRqCi0tMjQxIFRKbQotKFwwMDNlKSA5Ljk2MjYgVGoKLTE1IFRKbQotKHhpYmkpIDE1LjUwMTggVGoKLTEgVEptCi0obGl0eSkgMTMuMjkwMSBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI0MyBUSm0KLSh5b3UnKSAxOC4yNjE0IFRqCi0xMCBUSm0KLShsbCkgNS41MzkyMSBUagotLTI0MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjQxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDYxNi4zODkgVGQKLShiaXRlKSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVsbGV0KSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGdyaXBzKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UuKSAxNS43NjA4IFRqCi1bMSAwIDAgMSA3MiA2MTQuMjMyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MDQuMjY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1ODUuNzY3IFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjQuOS4pIDQzLjA3MjkgVGoKLS0yNzggVEptCi0oU3RhbmRhcikgNjQuMDkyOSBUagotMjAgVEptCi0oZCkgMTAuNTE4NiBUagotLTI3OCBUSm0KLShcMDAybGUtcmVhZGluZy93cml0aW5nKSAxNTQuMDA5IFRqCi0tMjc4IFRKbQotKGNvZGUpIDQwLjE4MDcgVGoKLVsxIDAgMCAxIDcyIDU4MS45MzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU3MS45NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2My44NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIZXJlJykgMjIuNjc0OSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI1MCBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI1MCBUSm0KLSh5b3UnKSAxOC4yNjE0IFRqCi01MCBUSm0KLShkKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0od3JpdGUpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGU6KSAxNS41MDE4IFRqCi1bMSAwIDAgMSA3MiA1NjEuNjkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzcxLjYwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNzAuNjEgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzNjcuMDI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNTUyLjMyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNTUyLjMyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShGSUxFKSAyMy45MTAyIFRqCi0xMTMuOTEgNTUwLjU4NCBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA1NTIuMzI4IFRkCi0oZjspIDExLjk1NTEgVGoKLTkwIDU0MC4zNzMgVGQKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTEyNS44NjUgNTM4LjYyOSBUZAotKCopIDUuOTc3NTYgVGoKLTEzNi4wODcgNTQwLjM3MyBUZAotKGI7KSAxMS45NTUxIFRqCi05MCA1MjguNDE4IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tMjEzMCBUSm0KLShuQnVmOykgMjkuODg3OCBUagotOTAgNTE2LjQ2MiBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLS0xNzA0IFRKbQotKGJ1ZlspIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oLykgNS45Nzc1NiBUagotMTY1LjAxOCA1MTQuNzE5IFRkCi0oKikgNS45Nzc1NiBUagotMTc1LjI0IDUxNi40NjIgVGQKLSh3aGF0ZXZlcikgNDcuODIwNSBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHlvdSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWtlKSAyMy45MTAyIFRqCi0zMDUuNzkgNTE0LjcxOSBUZAotKCopIDUuOTc3NTYgVGoKLTMxMS43NjcgNTE2LjQ2MiBUZAotKC8pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXTspIDExLjk1NTEgVGoKLTkwIDUwNC41MDcgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS0yMTMwIFRKbQotKGJ6ZXJyb3I7KSA0Ny44MjA1IFRqCi05MCA0OTIuNTUyIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tMjEzMCBUSm0KLShuV3JpdHRlbjspIDUzLjc5OCBUagotOTAgNDY4LjY0MiBUZAotKGYpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShmb3BlbikgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgibXlmaWxlLmJ6MiIsKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKCJ3IikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDQ1Ni42ODcgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSghZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi05NC4yNDQgNDQ0LjczMSBUZAotKC8pIDUuOTc3NTYgVGoKLTEwMC4yMjIgNDQyLjk4OCBUZAotKCopIDUuOTc3NTYgVGoKLTExMC40NDMgNDQ0LjczMSBUZAotKGhhbmRsZSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotMTg0LjY4NSA0NDIuOTg4IFRkCi0oKikgNS45Nzc1NiBUagotMTkwLjY2MiA0NDQuNzMxIFRkCi0oLykgNS45Nzc1NiBUagotOTAgNDMyLjc3NiBUZAotKH0pIDUuOTc3NTYgVGoKLTkwIDQyMC44MjEgVGQKLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGVPcGVuXCgpIDk1LjY0MSBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShmLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSg5KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTAgNDA4Ljg2NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwoYnplcnJvcikgNDcuODIwNSBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PS1wpKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk0LjI0NCAzOTYuOTExIFRkCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05NC4yNDQgMzg0Ljk1NiBUZAotKC8pIDUuOTc3NTYgVGoKLTEwMC4yMjIgMzgzLjIxMiBUZAotKCopIDUuOTc3NTYgVGoKLTExMC40NDMgMzg0Ljk1NiBUZAotKGhhbmRsZSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotMTg0LjY4NSAzODMuMjEyIFRkCi0oKikgNS45Nzc1NiBUagotMTkwLjY2MiAzODQuOTU2IFRkCi0oLykgNS45Nzc1NiBUagotOTAgMzczIFRkCi0ofSkgNS45Nzc1NiBUagotOTAgMzQ5LjA5IFRkCi0od2hpbGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oLykgNS45Nzc1NiBUagotMTQwLjMzMSAzNDcuMzQ3IFRkCi0oKikgNS45Nzc1NiBUagotMTUwLjU1MyAzNDkuMDkgVGQKLShjb25kaXRpb24pIDUzLjc5OCBUagotMjA4LjU5NSAzNDcuMzQ3IFRkCi0oKikgNS45Nzc1NiBUagotMjE0LjU3MiAzNDkuMDkgVGQKLSgvKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk0LjI0NCAzMzcuMTM1IFRkCi0oLykgNS45Nzc1NiBUagotMTAwLjIyMiAzMzUuMzkxIFRkCi0oKikgNS45Nzc1NiBUagotMTEwLjQ0MyAzMzcuMTM1IFRkCi0oZ2V0KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odG8pIDExLjk1NTEgVGoKLS00MjYgVEptCi0od3JpdGUpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oaW50bykgMjMuOTEwMiBUagotLTQyNiBUSm0KLShidWYsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGFuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzZXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obkJ1ZikgMjMuOTEwMiBUagotLTQyNiBUSm0KLShhcHByb3ByaWF0ZWx5KSA3Ny43MDgzIFRqCi00MjEuODc0IDMzNS4zOTEgVGQKLSgqKSA1Ljk3NzU2IFRqCi00MjcuODUyIDMzNy4xMzUgVGQKLSgvKSA1Ljk3NzU2IFRqCi05NC4yNDM5IDMyNS4xOCBUZAotKG5Xcml0dGVuKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQloyX2J6V3JpdGUpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oJmJ6ZXJyb3IsKSA1My43OTggVGoKLS00MjYgVEptCi0oYiwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnVmLCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShuQnVmKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTQuMjQzOSAzMTMuMjI1IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXChiemVycm9yKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKD09KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJaX0lPX0VSUk9SXCkpIDcxLjczMDcgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotMTAyLjczMiAzMDEuMjY5IFRkCi0oQloyX2J6V3JpdGVDbG9zZSkgOTUuNjQxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi0xMDIuNzMyIDI4OS4zMTQgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMDguNzA5IDI4Ny41NzEgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMTguOTMxIDI4OS4zMTQgVGQKLShoYW5kbGUpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLTE5My4xNzIgMjg3LjU3MSBUZAotKCopIDUuOTc3NTYgVGoKLTE5OS4xNSAyODkuMzE0IFRkCi0oLykgNS45Nzc1NiBUagotOTQuMjQzOSAyNzcuMzU5IFRkCi0ofSkgNS45Nzc1NiBUagotOTAgMjY1LjQwNCBUZAotKH0pIDUuOTc3NTYgVGoKLTkwIDI0MS40OTQgVGQKLShCWjJfYnpXcml0ZUNsb3NlXCgpIDEwMS42MTkgVGoKLS00MjYgVEptCi0oJmJ6ZXJyb3IsKSA1My43OTggVGoKLS00MjYgVEptCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDIyOS41MzggVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShcKGJ6ZXJyb3IpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oPT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfSU9fRVJST1JcKSkgNzEuNzMwNyBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi05NC4yNDM5IDIxNy41ODMgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMDAuMjIxIDIxNS44NCBUZAotKCopIDUuOTc3NTYgVGoKLTExMC40NDMgMjE3LjU4MyBUZAotKGhhbmRsZSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShlcnJvcikgMjkuODg3OCBUagotMTg0LjY4NCAyMTUuODQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xOTAuNjYyIDIxNy41ODMgVGQKLSgvKSA1Ljk3NzU2IFRqCi04OS45OTk5IDIwNS42MjggVGQKLSh9KSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSA3MiAxOTAuMDg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE4MC4xMjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE2OC4xNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oQW5kKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVhZCkgMTcuMTQ1NiBUagotLTI1MCBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGU6KSAxNS41MDE4IFRqCi1bMSAwIDAgMSA3MiAxNjYuMDEyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTE1LjE2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTEzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI1KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDI5IDI5Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQyLjU2OSAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE5LjA2NyA3NDkuMjQ1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFByb2dyYW1taW5nKSA1NC43OTQzIFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLVsxIDAgMCAxIDQ5Ni41NTYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTYuNTU2IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTYuNTU2IDc0OS4yNDUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDU0NC4zNzYgNzQ5LjI0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzguMzA1IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtNS4wMzYzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMC40OTgxXSBjbQotcQotW10gMCBkCi0wIEoKLTAuNDk4MSB3Ci0wIDAuMjQ5MSBtCi00NzUuNDY1IDAuMjQ5MSBsCi1TCi1RCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NzkuMjUxIDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1bMSAwIDAgMSAtMTMuMTQzNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMzkyLjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNzAuNjEgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzNjcuMDI0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNzExLjYzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNzExLjYzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShGSUxFKSAyMy45MTAyIFRqCi0xMTMuOTEgNzA5Ljg4OCBUZAotKCopIDUuOTc3NTYgVGoKLTEzMi42MiA3MTEuNjMxIFRkCi0oZjspIDExLjk1NTEgVGoKLTkwIDY5OS42NzYgVGQKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTEyNS44NjUgNjk3LjkzMyBUZAotKCopIDUuOTc3NTYgVGoKLTEzNi4wODcgNjk5LjY3NiBUZAotKGI7KSAxMS45NTUxIFRqCi05MCA2ODcuNzIxIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tMjEzMCBUSm0KLShuQnVmOykgMjkuODg3OCBUagotOTAgNjc1Ljc2NiBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLS0xNzA0IFRKbQotKGJ1ZlspIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oLykgNS45Nzc1NiBUagotMTY1LjAxOCA2NzQuMDIzIFRkCi0oKikgNS45Nzc1NiBUagotMTc1LjI0IDY3NS43NjYgVGQKLSh3aGF0ZXZlcikgNDcuODIwNSBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHlvdSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWtlKSAyMy45MTAyIFRqCi0zMDUuNzkgNjc0LjAyMyBUZAotKCopIDUuOTc3NTYgVGoKLTMxMS43NjcgNjc1Ljc2NiBUZAotKC8pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXTspIDExLjk1NTEgVGoKLTkwIDY2My44MTEgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS0yMTMwIFRKbQotKGJ6ZXJyb3I7KSA0Ny44MjA1IFRqCi05MCA2NTEuODU2IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tMjEzMCBUSm0KLShuV3JpdHRlbjspIDUzLjc5OCBUagotOTAgNjI3Ljk0NSBUZAotKGYpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oPSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShmb3BlbikgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgibXlmaWxlLmJ6MiIsKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKCJyIikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDYxNS45OSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCFmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTk4LjQ4OCA2MDQuMDM1IFRkCi0oLykgNS45Nzc1NiBUagotMTA0LjQ2NiA2MDIuMjkyIFRkCi0oKikgNS45Nzc1NiBUagotMTE0LjY4NyA2MDQuMDM1IFRkCi0oaGFuZGxlKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0xODguOTI5IDYwMi4yOTIgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xOTQuOTA2IDYwNC4wMzUgVGQKLSgvKSA1Ljk3NzU2IFRqCi05MCA1OTIuMDggVGQKLSh9KSA1Ljk3NzU2IFRqCi05MCA1ODAuMTI1IFRkCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaMl9ielJlYWRPcGVuKSA4My42ODU4IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGYsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDAsKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05MCA1NjguMTY5IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi05OC40ODggNTU2LjIxNCBUZAotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotOTguNDg4IDU0NC4yNTkgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMDQuNDY2IDU0Mi41MTYgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMTQuNjg3IDU0NC4yNTkgVGQKLShoYW5kbGUpIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oZXJyb3IpIDI5Ljg4NzggVGoKLTE4OC45MjkgNTQyLjUxNiBUZAotKCopIDUuOTc3NTYgVGoKLTE5NC45MDYgNTQ0LjI1OSBUZAotKC8pIDUuOTc3NTYgVGoKLTkwIDUzMi4zMDQgVGQKLSh9KSA1Ljk3NzU2IFRqCi05MCA1MDguMzk0IFRkCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSg9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaX09LOykgMzUuODY1NCBUagotOTAgNDk2LjQzOCBUZAotKHdoaWxlKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGJ6ZXJyb3IpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oPT0pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQlpfT0spIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oJiYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oLykgNS45Nzc1NiBUagotMjUyLjk0OCA0OTQuNjk1IFRkCi0oKikgNS45Nzc1NiBUagotMjYzLjE3IDQ5Ni40MzggVGQKLShhcmJpdHJhcnkpIDUzLjc5OCBUagotLTQyNiBUSm0KLShvdGhlcikgMjkuODg3OCBUagotLTQyNiBUSm0KLShjb25kaXRpb25zKSA1OS43NzU2IFRqCi00MTkuMzY0IDQ5NC42OTUgVGQKLSgqKSA1Ljk3NzU2IFRqCi00MjUuMzQxIDQ5Ni40MzggVGQKLSgvXCkpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotOTguNDg4IDQ4NC40ODMgVGQKLShuQnVmKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKD0pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQloyX2J6UmVhZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShiLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShidWYsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKC8pIDUuOTc3NTYgVGoKLTMxOS40NzggNDgyLjc0IFRkCi0oKikgNS45Nzc1NiBUagotMzI5LjcgNDg0LjQ4MyBUZAotKHNpemUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYnVmKSAxNy45MzI3IFRqCi0zOTYuMjMgNDgyLjc0IFRkCi0oKikgNS45Nzc1NiBUagotNDAyLjIwOCA0ODQuNDgzIFRkCi0oLykgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTk4LjQ4OCA0NzIuNTI4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSg9PSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9PSykgMjkuODg3OCBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSh7KSA1Ljk3NzU2IFRqCi0xMDYuOTc2IDQ2MC41NzMgVGQKLSgvKSA1Ljk3NzU2IFRqCi0xMTIuOTUzIDQ1OC44MjkgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xMjMuMTc1IDQ2MC41NzMgVGQKLShkbykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzb21ldGhpbmcpIDUzLjc5OCBUagotLTQyNiBUSm0KLSh3aXRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGJ1ZlswKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKC4uKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG5CdWYtMV0pIDQxLjg0MjkgVGoKLTMyMS45ODkgNDU4LjgyOSBUZAotKCopIDUuOTc3NTYgVGoKLTMyNy45NjYgNDYwLjU3MyBUZAotKC8pIDUuOTc3NTYgVGoKLTk4LjQ4NzkgNDQ4LjYxOCBUZAotKH0pIDUuOTc3NTYgVGoKLTkwIDQzNi42NjMgVGQKLSh9KSA1Ljk3NzU2IFRqCi05MCA0MjQuNzA3IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oYnplcnJvcikgNDEuODQyOSBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLShCWl9TVFJFQU1fRU5EKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKFwpKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKHspIDUuOTc3NTYgVGoKLTEwMi43MzIgNDEyLjc1MiBUZAotKEJaMl9ielJlYWRDbG9zZSkgODkuNjYzNCBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgmYnplcnJvciwpIDUzLjc5OCBUagotLTQyNiBUSm0KLShiKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotMTAyLjczMiA0MDAuNzk3IFRkCi0oLykgNS45Nzc1NiBUagotMTA4LjcwOSAzOTkuMDU0IFRkCi0oKikgNS45Nzc1NiBUagotMTE4LjkzMSA0MDAuNzk3IFRkCi0oaGFuZGxlKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0xOTMuMTcyIDM5OS4wNTQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xOTkuMTUgNDAwLjc5NyBUZAotKC8pIDUuOTc3NTYgVGoKLTkwIDM4OC44NDIgVGQKLSh9KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGVsc2UpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oeykgNS45Nzc1NiBUagotMTAyLjczMiAzNzYuODg3IFRkCi0oQloyX2J6UmVhZENsb3NlKSA4OS42NjM0IFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCZiemVycm9yLCkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05MCAzNjQuOTMyIFRkCi0ofSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNzIgMzQ5LjM5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzM5LjQyN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzE0LjYzNyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMy41LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShVdGlsaXR5KSA1Ny4zODkzIFRqCi0tMjc4IFRKbQotKGZ1bmN0aW9ucykgOTIuOTYzMyBUagotWzEgMCAwIDEgNzIgMzEwLjM2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzAwLjM5OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjg0LjAxNiBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy41LjEuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDI4NC4wMTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtMjg0LjAxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCAyODQuMDE2IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MpIDI0Ny45MDIgVGoKLVsxIDAgMCAxIDM2Ny43NiAyODQuMDE2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5NS43NiAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOTYuNjM3Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA5NS42NDEzIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOTIuMDU0OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTI3Mi4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDI3Mi4zMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzc1woKSAxNDkuNDM5IFRqCi0tNDI2IFRKbQotKGNoYXIpIDIzLjkxMDIgVGoKLTI4OS43NzEgMjcwLjU3NSBUZAotKCopIDUuOTc3NTYgVGoKLTMzMy45NDQgMjcyLjMxOCBUZAotKGRlc3QsKSAyOS44ODc4IFRqCi0yMTcuMzE5IDI2MC4zNjMgVGQKLSh1bnNpZ25lZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbnQpIDE3LjkzMjcgVGoKLTI4Ny4zMTcgMjU4LjYyIFRkCi0oKikgNS45Nzc1NiBUagotMjk3LjUzOCAyNjAuMzYzIFRkCi0oZGVzdExlbiwpIDQ3LjgyMDUgVGoKLTIxNy4zMTkgMjQ4LjQwOCBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLTI0MS4yMyAyNDYuNjY0IFRkCi0oKikgNS45Nzc1NiBUagotMjg1LjQwMyAyNDguNDA4IFRkCi0oc291cmNlLCkgNDEuODQyOSBUagotMjE3LjMxOSAyMzYuNDUzIFRkCi0odW5zaWduZWQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tODUyIFRKbQotKHNvdXJjZUxlbiwpIDU5Ljc3NTYgVGoKLTIxNy4zMTkgMjI0LjQ5OCBUZAotKGludCkgMTcuOTMyNyBUagotLTQ2ODYgVEptCi0oYmxvY2tTaXplMTAwaywpIDgzLjY4NTggVGoKLTIxNy4zMTkgMjEyLjU0MiBUZAotKGludCkgMTcuOTMyNyBUagotLTQ2ODYgVEptCi0odmVyYm9zaXR5LCkgNTkuNzc1NiBUagotMjE3LjMxOSAyMDAuNTg3IFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDY4NiBUSm0KLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMTg1LjA0NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNzUuMDgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNjMuMTI4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEF0dGVtcHRzKSAzNi41MzI5IFRqCi0tNDQyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS00NDIgVEptCi0oY29tcHJlc3MpIDM3LjYyODcgVGoKLS00NDMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDQyIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS00NDIgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgMjE2Ljg3IDE2My4xMjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE2Ljg3IC0xNjMuMTI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTYuODcgMTYzLjEyOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzb3VyY2VbMCkgNDcuODIwNSBUagotLTYwMCBUSm0KLSguLikgMTEuOTU1MSBUagotLTEyMDAgVEptCi0oc291cmNlTGVuLTFdKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAzNjYuMzEgMTYzLjEyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjYuMzEgLTE2My4xMjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3MC43MTUgMTYzLjEyOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpbnRvKSAxNS41MDE4IFRqCi0tNDQyIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQ0MiBUSm0KLShkZXN0aW5hdGlvbikgNDMuNzI1OSBUagotLTQ0MyBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDQ4Ni4yMDIgMTYzLjEyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODYuMjAyIC0xNjMuMTI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODYuMjAyIDE2My4xMjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZGVzdFswKSAzNS44NjU0IFRqCi0tNjAwIFRKbQotKC4uKSAxMS45NTUxIFRqCi03MiAxNDkuNDI5IFRkCi0oKikgNS45Nzc1NiBUagotNzcuOTc3NiAxNTEuMTczIFRkCi0oZGVzdExlbi0xXSkgNTkuNzc1NiBUagotWzEgMCAwIDEgMTM3Ljc1MyAxNTEuMTcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy43NTMgLTE1MS4xNzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzNy43NTMgMTUxLjE3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTM5MyBUSm0KLShJZikgNi42MzUwOSBUagotLTM3OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNzkgVEptCi0oZGVzdGluYXRpb24pIDQzLjcyNTkgVGoKLS0zNzkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tMzc4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzc5IFRKbQotKGJpZykgMTIuNzMyMiBUagotLTM3OSBUSm0KLShlbm91Z2gsKSAzMS44MjA1IFRqCi1bMSAwIDAgMSAzMTguNDg2IDE1MS4xNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE4LjQ4NiAtMTUxLjE3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzE4LjQ4NiAxNDkuNDI5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTMyNC40NjQgMTUxLjE3MyBUZAotKGRlc3RMZW4pIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDM2Ni4zMDcgMTUxLjE3Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjYuMzA3IC0xNTEuMTcyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzAuMDgxIDE1MS4xNzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0zNzkgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi0tMzc5IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNzggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc5IFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS0zNzkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zNzkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc5IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zNzkgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLTcyIDEzOS4yMTcgVGQKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgODkuNTI3MyAxMzkuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg5LjUyNzMgLTEzOS4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg5LjUyNzMgMTM5LjIxNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMTE5LjQxNSAxMzkuMjE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS40MTUgLTEzOS4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMi41NTYgMTM5LjIxNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMxNSBUSm0KLShyZXR1cm5lZC4pIDM1LjY4NiBUagotLTEwMTIgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zMTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE2IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zMTUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob24nKSAxMy4yODAxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zMTYgVEptCi0oXDAwMnQsKSAxMC43OTk1IFRqCi1bMSAwIDAgMSAzMTMuMzIyIDEzOS4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEzLjMyMiAtMTM5LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzEzLjMyMiAxMzcuNDc0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTMxOS4zIDEzOS4yMTcgVGQKLShkZXN0TGVuKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzNjEuMTQzIDEzOS4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYxLjE0MyAtMTM5LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY0LjI4NCAxMzkuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzE1IFRKbQotKHVuY2hhbmdlZCwpIDQ1LjY0ODYgVGoKLS0zMzIgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ0MC41NTEgMTM5LjIxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDAuNTUxIC0xMzkuMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDAuNTUxIDEzOS4yMTcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfT1VUQlVGRl9GVUxMKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA1MzAuMjE1IDEzOS4yMTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTMwLjIxNSAtMTM5LjIxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTMzLjM1NSAxMzkuMjE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi03MiAxMjcuMjYyIFRkCi0ocmV0dXJuZWQuKSAzNS42ODYgVGoKLVsxIDAgMCAxIDcyIDEyNy4xNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTExNy4yXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMDUuMzQ0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKENvbXByZXNzaW9uKSA1Mi41ODI2IFRqCi0tMjk3IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTcgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjk3IFRKbQotKG1hbm5lcikgMjkuODc3OCBUagotLTI5NyBUSm0KLShpcykgNi42NDUwNSBUagotLTI5NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjk3IFRKbQotKG9uZS1zaG90KSAzNC4zMTEyIFRqCi0tMjk3IFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50LCkgMTQuNjY0OSBUagotLTMwOSBUSm0KLShkb25lKSAxOS4zNjczIFRqCi0tMjk3IFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yOTcgVEptCi0oYSkgNC40MjMzOSBUagotLTI5NyBUSm0KLShzaW5nbGUpIDIzLjgwMDcgVGoKLS0yOTcgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjk3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTcgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjk3IFRKbQotKGZ1bmN0aW9uLikgMzUuNjk2IFRqCi0tOTAzIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI5NyBUSm0KLShyZXN1bHRpbmcpIDM0Ljg2OTEgVGoKLS0yOTcgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotNzIgOTMuMzg5MiBUZAotKGRhdGEpIDE2LjU5NzcgVGoKLS0yOTYgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yOTYgVEptCi0oYSkgNC40MjMzOSBUagotLTI5NiBUSm0KLShjb21wbGV0ZSkgMzYuNTIyOSBUagotWzEgMCAwIDEgMTQ3Ljk4OCA5My4zODkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Ny45ODggLTkzLjM4OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0Ny45ODggOTMuMzg5MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTc3Ljg3NSA5My4zODkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3Ny44NzUgLTkzLjM4OTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE4MC44MjUgOTMuMzg5MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0yOTYgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI5NiBUSm0KLShzdHJlYW0uKSAyOS4wNTA5IFRqCi0tODk3IFRKbQotKFRoZXJlKSAyMy4yMzI4IFRqCi0tMjk2IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjk2IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0yOTYgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjk2IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI5NiBUSm0KLShtYWtpbmcpIDI5Ljg4NzggVGoKLS0yOTYgVEptCi0oYWRkaXRpb25hbCkgMzkuODUwNCBUagotLTI5NiBUSm0KLShjYWxscykgMTguMjYxNCBUagotLTI5NiBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk2IFRKbQotKHBybykgMTMuMjgwMSBUagotMTUgVEptCi0odmlkZSkgMTcuMTU1NiBUagotLTI5NiBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4dHJhKSAxNS40OTE4IFRqCi03MiA4MS40MzQgVGQKLShpbnB1dCkgMjAuNDgzMSBUagotLTI1MCBUSm0KLShkYXRhLikgMTkuMDg4MyBUagotLTYyMCBUSm0KLShJZikgNi42MzUwOSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGtpbmQpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obWVjaGFuaXNtLCkgNDcuODcwMyBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxvKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHctbGUpIDE3LjcwMzUgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWwpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGludGVyZikgMjEuNTc5IFRqCi0xMCBUSm0KLShhY2UuKSAxNS43NjA4IFRqCi1bMSAwIDAgMSA3MiA3OS4yNzcyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjguNDI1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyNikgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzMCAzMAotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvcikgOC4yOTg4NSBUagotLTIyMyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yMjQgVEptCi0obWVhbmluZykgMzQuMzExMiBUagotLTIyMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTIyNCBUSm0KLShwYXJhbWV0ZXJzKSA0My43MDU5IFRqCi1bMSAwIDAgMSAxOTUuMzA2IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk1LjMwNiAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk1LjMwNiA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJsb2NrU2l6ZTEwMGspIDc3LjcwODMgVGoKLVsxIDAgMCAxIDI3My4wMTUgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNzMuMDE1IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzMuMDE1IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjc3Ljc4NCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Ny43ODQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Ny43ODQgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMzMxLjU4MyA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMS41ODMgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMy44MDggNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzUwLjQyIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUwLjQyIC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTAuNDIgNzEwLjAzNyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh3b3JrRmFjdG9yKSA1OS43NzU2IFRqCi1bMSAwIDAgMSA0MTAuMTk2IDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEwLjE5NiAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEwLjE5NiA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yMjkgVEptCi0oc2VlKSAxMi43MjIyIFRqCi1bMSAwIDAgMSA0MjkuOTEzIDcxMC4wMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI5LjkxMyAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI5LjkxMyA3MTAuMDM3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzSW5pdCkgMTA3LjU5NiBUagotWzEgMCAwIDEgNTM3LjUwOSA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUzNy41MDkgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNy41MDkgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA3MDcuODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY5Ny45MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY4OC4xMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUKSA2LjA4NzE1IFRqCi04MCBUSm0KLShvKSA0Ljk4MTMgVGoKLS00MTAgVEptCi0oZ3VhcmFudGVlKSAzOC43MjQ2IFRqCi0tNDEwIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS00MTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tNDEwIFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS00MTAgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTQxMCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tNDEwIFRKbQotKFwwMDJ0KSA4LjMwODgxIFRqCi0tNDEwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS00MTAgVEptCi0oaXRzKSA5LjQxNDY2IFRqCi0tNDEwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotLTQ1MCBUSm0KLShhbGxvY2F0ZSkgMzAuOTgzNyBUagotLTQxMCBUSm0KLShhbikgOS40MDQ2OSBUagotLTQxMCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS00MTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi0tNDExIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tNDEwIFRKbQotKHNpemUpIDE1LjQ5MTggVGoKLS00MTAgVEptCi0oMSUpIDEzLjI4MDEgVGoKLS00MTAgVEptCi0obGFyKSAxMC41MTA1IFRqCi0xOCBUSm0KLShnZXIpIDEyLjcyMjIgVGoKLS00MTAgVEptCi0odGhhbikgMTcuMTU1NiBUagotLTQxMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTcyIDY3Ni4xNjQgVGQKLSh1bmNvbXByZXNzZWQpIDU2Ljk5NiBUagotLTI1MCBUSm0KLShkYXRhLCkgMTkuMDg4MyBUagotLTI1MCBUSm0KLShwbHVzKSAxNi42MDc3IFRqCi0tMjUwIFRKbQotKHNpeCkgMTEuNjI2NCBUagotLTI1MCBUSm0KLShodW5kcmVkKSAzMi42NDc0IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHh0cmEpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0oYnl0ZXMuKSAyMy41MjE3IFRqCi1bMSAwIDAgMSA3MiA2NzQuMDA3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjQuMDQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NTQuMjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAxNTUuNDE3IFRqCi1bMSAwIDAgMSAyMjcuNDE3IDY1NC4yNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI3LjQxNyAtNjU0LjI0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMwLjU1MyA2NTQuMjQ3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0zMTUgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzE1IFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMzE0IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMTUgVEptCi0oYXQpIDcuMTkzIFRqCi0tMzE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5b25kKSAxOS45MjUyIFRqCi1bMSAwIDAgMSAzNjIuNDg0IDY1NC4yNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYyLjQ4NCAtNjU0LjI0N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYyLjQ4NCA2NTQuMjQ3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRlc3RbKSAyOS44ODc4IFRqCi0zOTIuMzcyIDY1Mi41MDMgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zOTguMzQ5IDY1NC4yNDcgVGQKLShkZXN0TGVuXSkgNDcuODIwNSBUagotWzEgMCAwIDEgNDQ2LjE3IDY1NC4yNDddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ2LjE3IC02NTQuMjQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDYuMTcgNjU0LjI0NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzMxIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0zMTUgVEptCi0oaW4pIDcuNzUwOSBUagotLTMxNSBUSm0KLShjYXNlKSAxNy4xNDU2IFRqCi0tMzE0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNzIgNjQyLjI5MSBUZAotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlclwwMDNvKSAxOC4yNjE0IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjQyLjE5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjMyLjIyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjIwLjM3NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDYyMC4yNzRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xNjguMzY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDE2Ny4zNzIgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAxNjMuNzg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNjEwLjkwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNjEwLjkwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9DT05GSUdfRVJST1IpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgNTk4Ljk1NCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWJyYXJ5KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG1pcy1jb21waWxlZCkgNzEuNzMwNyBUagotOTAgNTg2Ljk5OSBUZAotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDU3NS4wNDQgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShkZXN0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZGVzdExlbikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDU2My4wODggVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShibG9ja1NpemUxMDBrKSA3Ny43MDgzIFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oOSkgNS45Nzc1NiBUagotOTguNDg3OSA1NTEuMTMzIFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odmVyYm9zaXR5KSA1My43OTggVGoKLS00MjYgVEptCi0oPCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKD4pIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oNCkgNS45Nzc1NiBUagotOTguNDg3OSA1MzkuMTc4IFRkCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0od29ya0ZhY3RvcikgNTkuNzc1NiBUagotLTQyNiBUSm0KLSg8KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDApIDUuOTc3NTYgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0od29ya0ZhY3RvcikgNTkuNzc1NiBUagotLTQyNiBUSm0KLSg+KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDI1MCkgMTcuOTMyNyBUagotOTAgNTI3LjIyMyBUZAotKEJaX01FTV9FUlJPUikgNzEuNzMwNyBUagotOTguNDg3OSA1MTUuMjY4IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oaW5zdWZmaWNpZW50KSA3MS43MzA3IFRqCi0tNDI2IFRKbQotKG1lbW9yeSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShhdmFpbGFibGUpIDUzLjc5OCBUagotOTAgNTAzLjMxMyBUZAotKEJaX09VVEJVRkZfRlVMTCkgODkuNjYzNCBUagotOTguNDg3OSA0OTEuMzU3IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHNpemUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShleGNlZWRzKSA0MS44NDI5IFRqCi0zNDEuNjU1IDQ4OS42MTQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNDcuNjMzIDQ5MS4zNTcgVGQKLShkZXN0TGVuKSA0MS44NDI5IFRqCi05MCA0NzkuNDAyIFRkCi0oQlpfT0spIDI5Ljg4NzggVGoKLTk4LjQ4NzkgNDY3LjQ0NyBUZAotKG90aGVyd2lzZSkgNTMuNzk4IFRqCi1bMSAwIDAgMSA3MiA0NTEuOTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQxLjk0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDIxLjI4NCBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy41LjIuKSA0My4wNzI5IFRqCi1bMSAwIDAgMSAxMTkuODU4IDQyMS4yODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTE5Ljg1OCAtNDIxLjI4NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTE5Ljg1OCA0MjEuMjg0IFRkCi0vRjM5Ml8wIDE3LjIxNTQgVGYKLShCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcykgMjY4LjU2IFRqCi1bMSAwIDAgMSAzODguNDE5IDQyMS4yODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzE2LjQxOSAtMi4zMzI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtODQuNjgyNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA4My42ODYyIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgODAuMDk5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTQwOS41ODddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDQwOS41ODcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzXCgpIDE2MS4zOTQgVGoKLS00MjYgVEptCi0oY2hhcikgMjMuOTEwMiBUagotMzAxLjcyNiA0MDcuODQzIFRkCi0oKikgNS45Nzc1NiBUagotMzQ1Ljg5OSA0MDkuNTg3IFRkCi0oZGVzdCwpIDI5Ljg4NzggVGoKLTIyNS44MDcgMzk3LjYzMiBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotMjk1LjgwNSAzOTUuODg4IFRkCi0oKikgNS45Nzc1NiBUagotMzA2LjAyNiAzOTcuNjMyIFRkCi0oZGVzdExlbiwpIDQ3LjgyMDUgVGoKLTIyNS44MDcgMzg1LjY3NiBUZAotKGNoYXIpIDIzLjkxMDIgVGoKLTI0OS43MTggMzgzLjkzMyBUZAotKCopIDUuOTc3NTYgVGoKLTI5My44OTEgMzg1LjY3NiBUZAotKHNvdXJjZSwpIDQxLjg0MjkgVGoKLTIyNS44MDcgMzczLjcyMSBUZAotKHVuc2lnbmVkKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTg1MiBUSm0KLShzb3VyY2VMZW4sKSA1OS43NzU2IFRqCi0yMjUuODA3IDM2MS43NjYgVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00Njg2IFRKbQotKHNtYWxsLCkgMzUuODY1NCBUagotMjI1LjgwNyAzNDkuODExIFRkCi0oaW50KSAxNy45MzI3IFRqCi0tNDY4NiBUSm0KLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDMzNC4yNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI0LjMwNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzEyLjM1MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBdHRlbXB0cykgMzYuNTMyOSBUagotLTM1OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzU5IFRKbQotKGRlY29tcHJlc3MpIDQ3LjAzMzQgVGoKLS0zNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzU4IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zNTkgVEptCi0oaW4pIDcuNzUwOSBUagotWzEgMCAwIDEgMjIxLjI1OSAzMTIuMzUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMS4yNTkgLTMxMi4zNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMS4yNTkgMzEyLjM1MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShzb3VyY2VbMCkgNDcuODIwNSBUagotLTYwMCBUSm0KLSguLikgMTEuOTU1MSBUagotLTEyMDAgVEptCi0oc291cmNlTGVuLTFdKSA3MS43MzA3IFRqCi1bMSAwIDAgMSAzNzAuNjk4IDMxMi4zNTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzcwLjY5OCAtMzEyLjM1MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzc0LjI2OCAzMTIuMzUxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGludG8pIDE1LjUwMTggVGoKLS0zNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzU5IFRKbQotKGRlc3RpbmF0aW9uKSA0My43MjU5IFRqCi0tMzU4IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNDAgVEptCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDg2LjIwMiAzMTIuMzUxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4Ni4yMDIgLTMxMi4zNTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4Ni4yMDIgMzEyLjM1MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShkZXN0WzApIDM1Ljg2NTQgVGoKLS02MDAgVEptCi0oLi4pIDExLjk1NTEgVGoKLTcyIDI5OC42NTMgVGQKLSgqKSA1Ljk3NzU2IFRqCi03Ny45Nzc2IDMwMC4zOTYgVGQKLShkZXN0TGVuLTFdKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzcuNzUzIDMwMC4zOTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3Ljc1MyAtMzAwLjM5Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM3Ljc1MyAzMDAuMzk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS0xMTIzIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMzM0IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMzNCBUSm0KLShkZXN0aW5hdGlvbikgNDMuNzI1OSBUagotLTMzNCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0zMzQgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMzQgVEptCi0oYmlnKSAxMi43MzIyIFRqCi0tMzM0IFRKbQotKGVub3VnaCwpIDMxLjgyMDUgVGoKLVsxIDAgMCAxIDMxMi41NTQgMzAwLjM5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMTIuNTU0IC0zMDAuMzk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMTIuNTU0IDI5OC42NTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotMzE4LjUzMSAzMDAuMzk2IFRkCi0oZGVzdExlbikgNDEuODQyOSBUagotWzEgMCAwIDEgMzYwLjM3NCAzMDAuMzk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2MC4zNzQgLTMwMC4zOTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My43MDEgMzAwLjM5NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMzNCBUSm0KLShzZXQpIDExLjA2ODQgVGoKLS0zMzQgVEptCi0odG8pIDcuNzUwOSBUagotLTMzNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzQgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTMzMyBUSm0KLShvZikgOC4yOTg4NSBUagotLTMzNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMzQgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0zMzQgVEptCi0oZGF0YSwpIDE5LjA4ODMgVGoKLTcyIDI4OC40NDEgVGQKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgODkuNTI3MyAyODguNDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg5LjUyNzMgLTI4OC40NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg5LjUyNzMgMjg4LjQ0MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9PSykgMjkuODg3OCBUagotWzEgMCAwIDEgMTE5LjQxNSAyODguNDQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS40MTUgLTI4OC40NDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyMi41NTYgMjg4LjQ0MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMxNSBUSm0KLShyZXR1cm5lZC4pIDM1LjY4NiBUagotLTEwMTIgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zMTUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE2IFRKbQotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0zMTUgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTMxNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob24nKSAxMy4yODAxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zMTYgVEptCi0oXDAwMnQsKSAxMC43OTk1IFRqCi1bMSAwIDAgMSAzMTMuMzIyIDI4OC40NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEzLjMyMiAtMjg4LjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzEzLjMyMiAyODYuNjk4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKCopIDUuOTc3NTYgVGoKLTMxOS4zIDI4OC40NDEgVGQKLShkZXN0TGVuKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAzNjEuMTQzIDI4OC40NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYxLjE0MyAtMjg4LjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzY0LjI4NCAyODguNDQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzE1IFRKbQotKHVuY2hhbmdlZCwpIDQ1LjY0ODYgVGoKLS0zMzIgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ0MC41NTEgMjg4LjQ0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDAuNTUxIC0yODguNDQxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDAuNTUxIDI4OC40NDEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfT1VUQlVGRl9GVUxMKSA4OS42NjM0IFRqCi1bMSAwIDAgMSA1MzAuMjE1IDI4OC40NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTMwLjIxNSAtMjg4LjQ0MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTMzLjM1NSAyODguNDQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi03MiAyNzYuNDg2IFRkCi0ocmV0dXJuZWQuKSAzNS42ODYgVGoKLVsxIDAgMCAxIDcyIDI3Ni4zODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTI2Ni40MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI1NC41NjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc291cmNlKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxMDcuODY1IDI1NC41NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA3Ljg2NSAtMjU0LjU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTEwLjk4MSAyNTQuNTY4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMzEzIFRKbQotKGFzc3VtZWQpIDM0LjMxMTIgVGoKLS0zMTIgVEptCi0odG8pIDcuNzUwOSBUagotLTMxMyBUSm0KLShob2xkKSAxNy43MTM1IFRqCi0tMzEzIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMTMgVEptCi0oY29tcGxldGUpIDM2LjUyMjkgVGoKLVsxIDAgMCAxIDIzNy4wNCAyNTQuNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIzNy4wNCAtMjU0LjU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM3LjA0IDI1NC41NjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDI2Ni45MjggMjU0LjU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNjYuOTI4IC0yNTQuNTY4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNzAuMDQ0IDI1NC41NjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZm9ybWF0KSAyNi41NjAzIFRqCi0tMzEzIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMTIgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMzUzLjQ0NiAyNTQuNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1My40NDYgLTI1NC41NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1My40NDYgMjU0LjU2OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzcykgMTU1LjQxNyBUagotWzEgMCAwIDEgNTA4Ljg2MyAyNTQuNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwOC44NjMgLTI1NC41NjhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUxMS45NzggMjU0LjU2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0cmllcykgMTcuMTU1NiBUagotLTMxMyBUSm0KLSh0bykgNy43NTA5IFRqCi03MiAyNDIuNjEzIFRkCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oZW50aXJldHkpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHN0cmVhbSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShvdXRwdXQpIDI1LjQ2NDQgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZikgOC4yOTg4NSBUagotMjUgVEptCi0oZmVyKSAxMS4wNTg1IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyNDAuNDU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMzAuNDkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMjAuNjk1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShtZWFuaW5nKSAzNC4zMTEyIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHBhcmFtZXRlcnMpIDQzLjcwNTkgVGoKLVsxIDAgMCAxIDE5Ni42MzEgMjIwLjY5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xOTYuNjMxIC0yMjAuNjk1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTYuNjMxIDIyMC42OTUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc21hbGwpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIyNi41MTkgMjIwLjY5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjYuNTE5IC0yMjAuNjk1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjkuMDEgMjIwLjY5NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMjQ1Ljg4NyAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NS44ODcgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0NS44ODcgMjIwLjY5NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMjk5LjY4NSAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OS42ODUgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5OS42ODUgMjIwLjY5NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKHNlZSkgMTIuNzIyMiBUagotWzEgMCAwIDEgMzE5Ljg3OSAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxOS44NzkgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxOS44NzkgMjIwLjY5NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpEZWNvbXByZXNzSW5pdCkgMTE5LjU1MSBUagotWzEgMCAwIDEgNDM5LjQzMSAyMjAuNjk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzOS40MzEgLTIyMC42OTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzOS40MzEgMjIwLjY5NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyMTguNTM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yMDguNTc2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxOTguNzc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEJlY2F1c2UpIDMzLjE5NTQgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ5IFRKbQotKGNvbXByZXNzaW9uKSA1MC4zNjA5IFRqCi0tMjUwIFRKbQotKHJhdGlvKSAxOC4yNjE0IFRqCi0tMjQ5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI0OSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNDkgVEptCi0oY2Fubm90KSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGtubykgMTQuOTQzOSBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yNDkgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhZHYpIDE0LjM4NiBUagotMjUgVEptCi0oYW5jZSwpIDIwLjc0MjEgVGoKLS0yNDkgVEptCi0odGhlcmUpIDE5LjkxNTIgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNDkgVEptCi0obm8pIDkuOTYyNiBUagotLTI1MCBUSm0KLShlYXN5KSAxNy43MDM1IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheSkgOS40MDQ2OSBUagotLTI0OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGd1YXJhbnRlZSkgMzguNzI0NiBUagotNzIgMTg2LjgyMiBUZAotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yODYgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg3IFRKbQotKG91dHB1dCkgMjUuNDY0NCBUagotLTI4NiBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVmKSA4LjI5ODg1IFRqCi0yNSBUSm0KLShmZXIpIDExLjA1ODUgVGoKLS0yODcgVEptCi0od2lsbCkgMTUuNTAxOCBUagotLTI4NiBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI4NiBUSm0KLShiaWcpIDEyLjczMjIgVGoKLS0yODcgVEptCi0oZW5vdWdoLikgMzEuODIwNSBUagotLTgzOCBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yODcgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjg2IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjg3IFRKbQotKGNvdXJzZSkgMjYuMDAyNCBUagotLTI4NiBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODYgVEptCi0oYXJyYW5nZW1lbnRzKSA1My42Njg1IFRqCi0tMjg3IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yODYgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI4NyBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjg2IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODYgVEptCi0ocmVjb3JkKSAyNS40NDQ1IFRqCi0tMjg3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4NiBUSm0KLShzaXplKSAxNS40OTE4IFRqCi0tMjg3IFRKbQotKG9mKSA4LjI5ODg1IFRqCi03MiAxNzQuODY3IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHVuY29tcHJlc3NlZCkgNTYuOTk2IFRqCi0tMjUwIFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5b25kKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShzY29wZSkgMjIuNjg0OCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTcyLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNjIuNzQ3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNTIuOTQ5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAxNTUuNDE3IFRqCi1bMSAwIDAgMSAyMjcuNDE3IDE1Mi45NDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjI3LjQxNyAtMTUyLjk0OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjMwLjU1MyAxNTIuOTQ5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHdpbGwpIDE1LjUwMTggVGoKLS0zMTUgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzE1IFRKbQotKHdyaXRlKSAyMC40NzMxIFRqCi0tMzE0IFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0zMTUgVEptCi0oYXQpIDcuMTkzIFRqCi0tMzE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5b25kKSAxOS45MjUyIFRqCi1bMSAwIDAgMSAzNjIuNDg0IDE1Mi45NDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYyLjQ4NCAtMTUyLjk0OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYyLjQ4NCAxNTIuOTQ5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRlc3RbKSAyOS44ODc4IFRqCi0zOTIuMzcyIDE1MS4yMDYgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zOTguMzQ5IDE1Mi45NDkgVGQKLShkZXN0TGVuXSkgNDcuODIwNSBUagotWzEgMCAwIDEgNDQ2LjE3IDE1Mi45NDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ2LjE3IC0xNTIuOTQ5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDYuMTcgMTUyLjk0OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzMxIFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW4pIDkuNDA0NjkgVGoKLS0zMTUgVEptCi0oaW4pIDcuNzUwOSBUagotLTMxNSBUSm0KLShjYXNlKSAxNy4xNDU2IFRqCi0tMzE0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWYpIDguMjk4ODUgVGoKLTI1IFRKbQotKGZlcikgMTEuMDU4NSBUagotNzIgMTQwLjk5NCBUZAotKG8pIDQuOTgxMyBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlclwwMDNvKSAxOC4yNjE0IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTQwLjg5NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTMwLjkzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTE5LjA3NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQb3NzaWJsZSkgMzMuMjE1MyBUagotLTI1MCBUSm0KLShyZXR1cm4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVlczopIDIzLjI0MjcgVGoKLVsxIDAgMCAxIDcyIDExOC45NzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC02OC4xMjQ4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDI3KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDMxIDMxCi0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0LjM4MzYgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAtOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA4LjkxMTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA3Ni40OTc5IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzQ0LjQ2MiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDIwLjk2IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUHJvZ3JhbW1pbmcpIDU0Ljc5NDMgVGoKLS0yNTAgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgNDk4LjQ0OSA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5OC40NDkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC40NDkgNzQ5LjI0NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgNTQ2LjI2OSA3NDkuMjQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3OC4zMDUgLTIuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC01LjAzNjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0yNDguNzAyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIyNy4xNDggcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMjMuNTYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNzExLjYzMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNzExLjYzMSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9DT05GSUdfRVJST1IpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgNjk5LjY3NiBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsaWJyYXJ5KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGhhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShiZWVuKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG1pcy1jb21waWxlZCkgNzEuNzMwNyBUagotOTAgNjg3LjcyMSBUZAotKEJaX1BBUkFNX0VSUk9SKSA4My42ODU4IFRqCi05OC40ODc5IDY3NS43NjYgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShkZXN0KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKE5VTEwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0ob3IpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZGVzdExlbikgNDEuODQyOSBUagotLTQyNiBUSm0KLShpcykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShOVUxMKSAyMy45MTAyIFRqCi05OC40ODc5IDY2My44MTEgVGQKLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShzbWFsbCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSghPSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgwKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKCYmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHNtYWxsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKCE9KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKDEpIDUuOTc3NTYgVGoKLTk4LjQ4NzkgNjUxLjg1NiBUZAotKG9yKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHZlcmJvc2l0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKDwpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oMCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShvcikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotLTQyNiBUSm0KLSg+KSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKDQpIDUuOTc3NTYgVGoKLTkwIDYzOS45IFRkCi0oQlpfTUVNX0VSUk9SKSA3MS43MzA3IFRqCi05OC40ODc5IDYyNy45NDUgVGQKLShpZikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShpbnN1ZmZpY2llbnQpIDcxLjczMDcgVGoKLS00MjYgVEptCi0obWVtb3J5KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKGlzKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGF2YWlsYWJsZSkgNTMuNzk4IFRqCi05MCA2MTUuOTkgVGQKLShCWl9PVVRCVUZGX0ZVTEwpIDg5LjY2MzQgVGoKLTk4LjQ4NzkgNjA0LjAzNSBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShzaXplKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oZXhjZWVkcykgNDEuODQyOSBUagotMzQxLjY1NSA2MDIuMjkxIFRkCi0oKikgNS45Nzc1NiBUagotMzQ3LjYzMyA2MDQuMDM1IFRkCi0oZGVzdExlbikgNDEuODQyOSBUagotOTAgNTkyLjA4IFRkCi0oQlpfREFUQV9FUlJPUikgNzcuNzA4MyBUagotOTguNDg3OSA1ODAuMTI1IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYSkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGludGVncml0eSkgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGVycm9yKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdhcykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShkZXRlY3RlZCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShpbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcHJlc3NlZCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShkYXRhKSAyMy45MTAyIFRqCi05MCA1NjguMTY5IFRkCi0oQlpfREFUQV9FUlJPUl9NQUdJQykgMTEzLjU3NCBUagotOTguNDg3OSA1NTYuMjE0IFRkCi0oaWYpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGNvbXByZXNzZWQpIDU5Ljc3NTYgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShkb2Vzbid0KSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGJlZ2luKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHJpZ2h0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG1hZ2ljKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGJ5dGVzKSAyOS44ODc4IFRqCi05MCA1NDQuMjU5IFRkCi0oQlpfVU5FWFBFQ1RFRF9FT0YpIDEwMS42MTkgVGoKLTk4LjQ4NzkgNTMyLjMwNCBUZAotKGlmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21wcmVzc2VkKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGRhdGEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oZW5kcykgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh1bmV4cGVjdGVkbHkpIDcxLjczMDcgVGoKLTkwIDUyMC4zNDkgVGQKLShCWl9PSykgMjkuODg3OCBUagotOTguNDg3OSA1MDguMzk0IFRkCi0ob3RoZXJ3aXNlKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDQ5Mi44NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODIuODg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTguMDk5IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSgzLjYuKSAzNC40NTg0IFRqCi1bMSAwIDAgMSAxMTIuMjAxIDQ1OC4wOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTEyLjIwMSAtNDU4LjA5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTEyLjIwMSA0NTguMDk5IFRkCi0vRjM5Ml8wIDIwLjY1ODUgVGYKLSh6bGliKSA0OS41ODA0IFRqCi1bMSAwIDAgMSAxNjEuNzgxIDQ1OC4wOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYxLjc4MSAtNDU4LjA5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY3LjUyNCA0NTguMDk5IFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLShjb21wYXRpYmlsaXR5KSAxMjcuNDIyIFRqCi0tMjc4IFRKbQotKGZ1bmN0aW9ucykgOTIuOTYzMyBUagotWzEgMCAwIDEgNzIgNDUzLjgyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDQzLjg2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MzYuMTgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3NoaW9rYSkgMzAuOTkzNiBUagotLTYwNCBUSm0KLShUc3VuZW8pIDI5LjMyOTkgVGoKLS02MDQgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tNjA0IFRKbQotKGNvbnRyaWIpIDI4LjIyNCBUagotMjAgVEptCi0odXRlZCkgMTcuMTU1NiBUagotLTYwNCBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS02MDQgVEptCi0oZnVuY3Rpb25zKSAzNy4wODA4IFRqCi0tNjA0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS02MDQgVEptCi0oZ2kpIDcuNzUwOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tNjA0IFRKbQotKGJldHRlcikgMjIuNjg0OCBUagotWzEgMCAwIDEgMzU2LjM0NyA0MzYuMTgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1Ni4zNDcgLTQzNi4xODFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1Ni4zNDcgNDM2LjE4MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliKSAyMy45MTAyIFRqCi1bMSAwIDAgMSAzODAuMjU3IDQzNi4xODFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgwLjI1NyAtNDM2LjE4MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzg2LjI3NSA0MzYuMTgxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGNvbXBhdGliaWxpdHkpIDUzLjE0MDUgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS0xMzcyIFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tNjA0IFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTYwNCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLVsxIDAgMCAxIDcyIDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDQyNC4yMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6b3BlbikgNTkuNzc1NiBUagotWzEgMCAwIDEgMTMxLjc3NiA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMS43NzYgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMS43NzYgNDI0LjIyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxNDQuMjgzIDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ0LjI4MyAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ0LjI4MyA0MjQuMjI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9ienJlYWQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDIwNC4wNTkgNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuMDU5IC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDQuMDU5IDQyNC4yMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMjE2LjU2NiA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxNi41NjYgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIxNi41NjYgNDI0LjIyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnp3cml0ZSkgNjUuNzUzMiBUagotWzEgMCAwIDEgMjgyLjMyIDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjgyLjMyIC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODIuMzIgNDI0LjIyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyOTQuODI3IDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjk0LjgyNyAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk0LjgyNyA0MjQuMjI2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iemZsdXNoKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAzNjAuNTgxIDQyNC4yMjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYwLjU4MSAtNDI0LjIyNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYwLjU4MSA0MjQuMjI2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDM3My4wODggNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzMuMDg4IC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNzMuMDg4IDQyNC4yMjYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6Y2xvc2UpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQzOC44NDIgNDI0LjIyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzguODQyIC00MjQuMjI2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzguODQyIDQyNC4yMjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNDUxLjM0OSA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1MS4zNDkgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1MS4zNDkgNDI0LjIyNiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnplcnJvcikgNjUuNzUzMiBUagotWzEgMCAwIDEgNTE3LjEwMiA0MjQuMjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxNy4xMDIgLTQyNC4yMjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUyNS42MTQgNDI0LjIyNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNzIgNDEyLjI3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDEyLjI3MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDEyLjI3MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpsaWJWZXJzaW9uKSA5NS42NDEgVGoKLVsxIDAgMCAxIDE2Ny42NDEgNDEyLjI3MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjcuNjQxIC00MTIuMjcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjcuNjQxIDQxMi4yNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTE0MjAgVEptCi0oVGhlcykgMTkuMzY3MyBUagotMSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMzg0IFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTM4MyBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0zODMgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMzgzIFRKbQotKFwoeWV0XCkpIDE4LjgwOTQgVGoKLS0zODQgVEptCi0ob2YpIDguMjk4ODUgVGoKLTI1IFRKbQotKFwwMDJjaWFsbHkpIDI3LjY3NjEgVGoKLS0zODMgVEptCi0ocGFydCkgMTUuNDkxOCBUagotLTM4MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTM4MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zODQgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotLTE0MTkgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zODMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zODQgVEptCi0oYnJlYWssKSAyNC42MTc2IFRqCi0tNDE2IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTM4MyBUSm0KLShnZXQpIDEyLjE3NDMgVGoKLS0zODQgVEptCi0odG8pIDcuNzUwOSBUagotNzIgNDAwLjMxNiBUZAotKGspIDQuOTgxMyBUagotMTAgVEptCi0oZWVwKSAxMy44MjgxIFRqCi0tMjUwIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwaWVjZXMuKSAyNy4zODcyIFRqCi0tNjIwIFRKbQotKE5lKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVydGhlbGVzcywpIDM3LjM0OTggVGoKLS0yNTAgVEptCi0oSSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLSh0aGluaykgMjAuNDgzMSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKG9rLikgMTIuNDUzMyBUagotWzEgMCAwIDEgNzIgMzk4LjE1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTQ4LjgxNjldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggNDcuODIwNyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDQ0LjIzNDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0zODguNzk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAzODguNzk0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHR5cGVkZWYpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWkZJTEU7KSA0MS44NDI5IFRqCi05MCAzNjQuODg0IFRkCi0oY29uc3QpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oY2hhcikgMjMuOTEwMiBUagotMTUyLjI4NiAzNjMuMTQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xNjIuNTA4IDM2NC44ODQgVGQKLShCWjJfYnpsaWJWZXJzaW9uKSA5NS42NDEgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDM0OS4zNDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzM5LjM3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzI3LjQyNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShSZXR1cm5zKSAzMC45OTM2IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oc3RyaW5nKSAyMi42OTQ4IFRqCi0tMjUwIFRKbQotKGluZGljYXRpbmcpIDM5Ljg1MDQgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGxpYnJhcnkpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNpb24uKSAyNi44MzkyIFRqCi1bMSAwIDAgMSA3MiAzMjUuMjY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzYuODYxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTMxNS45MDJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDMxNS45MDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0xMzAuMTA5IDMxNC4xNTkgVGQKLSgqKSA1Ljk3NzU2IFRqCi0xNDAuMzMxIDMxNS45MDIgVGQKLShCWjJfYnpvcGVuKSA1OS43NzU2IFRqCi0tODUyIFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGNvbnN0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGNoYXIpIDIzLjkxMDIgVGoKLTI4MS4xMDMgMzE0LjE1OSBUZAotKCopIDUuOTc3NTYgVGoKLTI4Ny4wOCAzMTUuOTAyIFRkCi0ocGF0aCwpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oY29uc3QpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oY2hhcikgMjMuOTEwMiBUagotMzgzLjQ5OCAzMTQuMTU5IFRkCi0oKikgNS45Nzc1NiBUagotMzg5LjQ3NiAzMTUuOTAyIFRkCi0obW9kZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDMwMy45NDcgVGQKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTEzMC4xMDkgMzAyLjIwNCBUZAotKCopIDUuOTc3NTYgVGoKLTE0MC4zMzEgMzAzLjk0NyBUZAotKEJaMl9iemRvcGVuKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTM0MDggVEptCi0oZmQsKSAxNy45MzI3IFRqCi0tMTcwNCBUSm0KLShjb25zdCkgMjkuODg3OCBUagotLTQyNiBUSm0KLShjaGFyKSAyMy45MTAyIFRqCi0zNjkuNjI5IDMwMi4yMDQgVGQKLSgqKSA1Ljk3NzU2IFRqCi0zNzUuNjA3IDMwMy45NDcgVGQKLShtb2RlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKFwpOykgMTEuOTU1MSBUagotWzEgMCAwIDEgNzIgMjg4LjQwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNzguNDQzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNjYuNDg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE9wZW5zKSAyNS40NTQ0IFRqCi0tMjQzIFRKbQotKGEpIDQuNDIzMzkgVGoKLVsxIDAgMCAxIDEwNi43MTMgMjY2LjQ4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMDYuNzEzIC0yNjYuNDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMDYuNzEzIDI2Ni40ODggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLmJ6MikgMjMuOTEwMiBUagotWzEgMCAwIDEgMTMwLjYyNCAyNjYuNDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzMC42MjQgLTI2Ni40ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzMy4wNDEgMjY2LjQ4OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNDMgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMjQyIFRKbQotKHJlYWRpbmcpIDI5Ljg3NzggVGoKLS0yNDMgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNDMgVEptCi0od3JpdGluZywpIDMxLjI3MjYgVGoKLS0yNDQgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI0MyBUSm0KLShlaSkgNy4xOTMgVGoKLTEgVEptCi0odGhlcikgMTUuNDkxOCBUagotLTI0MyBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yNDMgVEptCi0obmFtZSkgMjEuNTc5IFRqCi0tMjQyIFRKbQotKG8pIDQuOTgxMyBUagotLTEgVEptCi0ocikgMy4zMTc1NSBUagotLTI0MiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQzIFRKbQotKHByZS1lKSAyMC40NjMyIFRqCi0xNSBUSm0KLSh4aXN0aW5nKSAyNy4xMjgyIFRqCi0tMjQzIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI0MiBUSm0KLShkZXNjcmlwdG9yKSAzOS44NDA0IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjE1IFRKbQotKEFuYWxvZ291cykgNDMuMTY3OSBUagotLTI0MyBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSA1MTAuMTEyIDI2Ni40ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTEwLjExMiAtMjY2LjQ4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTEwLjExMiAyNjYuNDg4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZvcGVuKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA1NDAgMjY2LjQ4OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTI2Ni40ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDI1NC41MzIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDg4Ljg3NjcgMjU0LjUzMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04OC44NzY3IC0yNTQuNTMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04OC44NzY3IDI1NC41MzIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZmRvcGVuKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAxMjQuNzQyIDI1NC41MzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTI0Ljc0MiAtMjU0LjUzMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTI0Ljc0MiAyNTQuNTMyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDI1Mi45OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zNi44NjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDM1Ljg2NTUgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzMi4yNzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjQzLjYzM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMjQzLjYzMyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6cmVhZCkgNTkuNzc1NiBUagotLTg1MiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTIyNi41MjggMjQxLjg5IFRkCi0oKikgNS45Nzc1NiBUagotMjM2Ljc0OSAyNDMuNjMzIFRkCi0oYiwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odm9pZCkgMjMuOTEwMiBUagotMjc2Ljg1OSAyNDEuODkgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yODcuMDggMjQzLjYzMyBUZAotKGJ1ZiwpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGxlbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLTkwIDIzMS42NzggVGQKLShpbnQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oQloyX2J6d3JpdGUpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oQlpGSUxFKSAzNS44NjU0IFRqCi0yMjguMjYxIDIyOS45MzUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yMzguNDgzIDIzMS42NzggVGQKLShiLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh2b2lkKSAyMy45MTAyIFRqCi0yNzguNTkyIDIyOS45MzUgVGQKLSgqKSA1Ljk3NzU2IFRqCi0yODguODE0IDIzMS42NzggVGQKLShidWYsKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKGludCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShsZW4pIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAyMTYuMTM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIwNi4xNzRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE5NC4yMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oUmVhZHMvd3JpdGVzKSA1MS40NjY4IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oZnJvbS90bykgMjkuODg3OCBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHByZSkgMTIuNzIyMiBUagotMjUgVEptCi0odmlvdXNseSkgMjkuMzM5OSBUagotLTI1MCBUSm0KLShvcGVuZWQpIDI4Ljc3MiBUagotWzEgMCAwIDEgMjU5LjkwMyAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI1OS45MDMgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI1OS45MDMgMTk0LjIxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDI5NS43NjkgMTk0LjIxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTUuNzY5IC0xOTQuMjE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTUuNzY5IDE5NC4yMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTUwMCBUSm0KLShBbmFsb2dvdXMpIDQzLjE2NzkgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotWzEgMCAwIDEgMzU5LjE0MSAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1OS4xNDEgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1OS4xNDEgMTk0LjIxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmcmVhZCkgMjkuODg3OCBUagotWzEgMCAwIDEgMzg5LjAyOSAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OS4wMjkgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5MS41MTkgMTk0LjIxOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDA4LjM5NiAxOTQuMjE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQwOC4zOTYgLTE5NC4yMTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQwOC4zOTYgMTk0LjIxOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmd3JpdGUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDQ0NC4yNjEgMTk0LjIxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NDQuMjYxIC0xOTQuMjE5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NDQuMjYxIDE5NC4yMTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTkyLjA2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTM2Ljg2MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMzUuODY1NSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMyLjI3ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0xODIuNjk3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAxODIuNjk3IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGludCkgMTcuOTMyNyBUagotLTg1MiBUSm0KLShCWjJfYnpmbHVzaCkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTIzMi41MDUgMTgwLjk1NCBUZAotKCopIDUuOTc3NTYgVGoKLTI0Mi43MjcgMTgyLjY5NyBUZAotKGIpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi05MCAxNzAuNzQyIFRkCi0odm9pZCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShCWjJfYnpjbG9zZSkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShcKCkgNS45Nzc1NiBUagotLTQyNiBUSm0KLShCWkZJTEUpIDM1Ljg2NTQgVGoKLTIzNC4yMzkgMTY4Ljk5OCBUZAotKCopIDUuOTc3NTYgVGoKLTI0NC40NiAxNzAuNzQyIFRkCi0oYikgNS45Nzc1NiBUagotLTQyNiBUSm0KLShcKTspIDExLjk1NTEgVGoKLVsxIDAgMCAxIDcyIDE1NS4yXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE0NS4yMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEzMy4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRmx1c2hlcy9jbG9zZXMpIDU3LjU2MzkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotWzEgMCAwIDEgMTM4Ljk2OCAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzOC45NjggLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEzOC45NjggMTMzLjI4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWkZJTEUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDE3NC44MzMgMTMzLjI4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzQuODMzIC0xMzMuMjgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzQuODMzIDEzMy4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgMTc5LjgxNSAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3OS44MTUgLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3OS44MTUgMTMzLjI4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpmbHVzaCkgNjUuNzUzMiBUagotWzEgMCAwIDEgMjQ1LjU2OCAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0NS41NjggLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0OC4wNTkgMTMzLjI4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkb2VzbicpIDI2LjU2MDMgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI1MCBUSm0KLShhY3R1YWxseSkgMzEuNTQxNiBUagotLTI1MCBUSm0KLShkbykgOS45NjI2IFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5dGhpbmcuKSAyNy45NTUxIFRqCi0tNjIwIFRKbQotKEFuYWxvZ291cykgNDMuMTY3OSBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi1bMSAwIDAgMSA0MjUuNDcyIDEzMy4yODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDI1LjQ3MiAtMTMzLjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDI1LjQ3MiAxMzMuMjgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGZmbHVzaCkgMzUuODY1NCBUagotWzEgMCAwIDEgNDYxLjMzOCAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2MS4zMzggLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2My44MjggMTMzLjI4MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDgwLjcwNSAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4MC43MDUgLTEzMy4yODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ4MC43MDUgMTMzLjI4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmY2xvc2UpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDUxNi41NyAxMzMuMjgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUxNi41NyAtMTMzLjI4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTE2LjU3IDEzMy4yODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTMxLjEyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTI0LjkwNjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gU0MKLTAgMCA0NjggMjMuOTEwMyByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDIwLjMyMzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC0xMjEuNzYxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAxMjEuNzYxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGNvbnN0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKGNoYXIpIDIzLjkxMDIgVGoKLTE1Mi4yODYgMTIwLjAxNyBUZAotKCopIDUuOTc3NTYgVGoKLTE2Mi41MDggMTIxLjc2MSBUZAotKEJaMl9iemVycm9yKSA2NS43NTMyIFRqCi0tNDI2IFRKbQotKFwoKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEJaRklMRSkgMzUuODY1NCBUagotMjgyLjgzNiAxMjAuMDE3IFRkCi0oKikgNS45Nzc1NiBUagotMjg4LjgxNCAxMjEuNzYxIFRkCi0oYiwpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0zMjcuMTkgMTIwLjAxNyBUZAotKCopIDUuOTc3NTYgVGoKLTMzMy4xNjcgMTIxLjc2MSBUZAotKGVycm51bSkgMzUuODY1NCBUagotLTQyNiBUSm0KLShcKSkgNS45Nzc1NiBUagotWzEgMCAwIDEgNzIgMTA2LjIxOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05Ni4yNTYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4NC4zMDExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJldHVybnMpIDMwLjk5MzYgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShzdHJpbmcpIDIyLjY5NDggVGoKLS0yNTAgVEptCi0oZGVzY3JpYmluZykgNDEuNTA0MiBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShyZWNlbnQpIDI0LjMzODYgVGoKLS0yNTAgVEptCi0oZXJyb3IpIDE5LjM1NzMgVGoKLS0yNTAgVEptCi0oc3RhdHVzKSAyMi42OTQ4IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi1bMSAwIDAgMSAzMDMuODU4IDg0LjMwMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAzLjg1OCAtODQuMzAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAzLjg1OCA4NC4zMDExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGIpIDUuOTc3NTYgVGoKLVsxIDAgMCAxIDMwOS44MzUgODQuMzAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDkuODM1IC04NC4zMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDkuODM1IDg0LjMwMTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMjUwIFRKbQotKHNldHMpIDE0Ljk0MzkgVGoKLVsxIDAgMCAxIDM2Ny42NjggODQuMzAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjcuNjY4IC04NC4zMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjcuNjY4IDgyLjU1NzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oKikgNS45Nzc1NiBUagotMzczLjY0NSA4NC4zMDExIFRkCi0oZXJybnVtKSAzNS44NjU0IFRqCi1bMSAwIDAgMSA0MDkuNTExIDg0LjMwMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDA5LjUxMSAtODQuMzAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDEyLjAwMSA4NC4zMDExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oaXRzKSA5LjQxNDY2IFRqCi0tMjUwIFRKbQotKG51bWVyaWNhbCkgMzkuODQwNCBUagotLTI1MCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFsdWUuKSAxOS4wODgzIFRqCi1bMSAwIDAgMSA3MiA4Mi4xNDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjEuMzI5OF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNC4zODM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5NS43MzQgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNi4zMDcgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOCkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTUuMTYxIDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xNS4wMzY1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzMiAzMgotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTc0MS41NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcwNC45MyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oMy43LikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShVc2luZykgNTcuMzg5MyBUagotLTI3OCBUSm0KLSh0aGUpIDMwLjk4NzcgVGoKLS0yNzggVEptCi0obGlicmFyKSA1MS42NjY5IFRqCi0tMTAgVEptCi0oeSkgMTEuNDg2MSBUagotLTI3OCBUSm0KLShpbikgMTguMzY1NCBUagotLTI3OCBUSm0KLShhKSAxMS40ODYxIFRqCi1bMSAwIDAgMSAzMjIuNTAxIDcwNC45M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMjIuNTAxIC03MDQuOTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyMi41MDEgNzA0LjkzIFRkCi0vRjM5Ml8wIDIwLjY1ODUgVGYKLShzdGRpbykgNjEuOTc1NSBUagotWzEgMCAwIDEgMzg0LjQ3NyA3MDQuOTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg0LjQ3NyAtNzA0LjkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODQuNDc3IDcwNC45MyBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oLWZyZWUpIDQ0Ljc2NyBUagotNzIgNjgwLjEzOSBUZAotKGVuKSAyNC4xMDg1IFRqCi00MCBUSm0KLSh2aXIpIDI1LjI2NTMgVGoKLTIwIFRKbQotKG9ubWVudCkgNzQuNTk3OCBUagotWzEgMCAwIDEgNzIgNjc5Ljg4MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NjkuOTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2NDkuNTgzIFRkCi0vRjEyMl8wIDE3LjIxNTQgVGYKLSgzLjcuMS4pIDQzLjA3MjkgVGoKLS0yNzggVEptCi0oR2V0dGluZykgNjAuMjUzOSBUagotLTI3OCBUSm0KLShyaWQpIDIyLjAwMTMgVGoKLS0yNzggVEptCi0ob2YpIDE2LjI1MTMgVGoKLVsxIDAgMCAxIDIzMi43MjEgNjQ5LjU4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzIuNzIxIC02NDkuNTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzIuNzIxIDY0OS41ODMgVGQKLS9GMzkyXzAgMTcuMjE1NCBUZgotKHN0ZGlvKSA1MS42NDYyIFRqCi1bMSAwIDAgMSAyODQuMzY3IDY0OS41ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEyLjM2NyAtMy44MzAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzNS44NTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYyNy43MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbikgOC4yOTg4NSBUagotLTMxOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzE5IFRKbQotKGRlZXBseSkgMjYuNTYwMyBUagotLTMxOSBUSm0KLShlbWJlZGRlZCkgNDAuOTQ2MyBUagotLTMxOSBUSm0KLShhcHBsaWNhdGlvbiwpIDQ2Ljc2NDQgVGoKLS0zMzYgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzE5IFRKbQotKG1pZ2h0KSAyMy4yNTI3IFRqCi0tMzE5IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0zMTkgVEptCi0odG8pIDcuNzUwOSBUagotLTMxOSBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0zMTkgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMzE5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMxOSBUSm0KLShtZW1vcnktdG8tbWVtb3J5KSA4MC43OTY3IFRqCi0tMzE5IFRKbQotKGZ1bmN0aW9ucy4pIDM5LjU3MTQgVGoKLS0xMDM1IFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTMxOSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0zMTkgVEptCi0oZG8pIDkuOTYyNiBUagotLTMxOSBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLTcyIDYxNS43NzUgVGQKLShjb24pIDE0LjM4NiBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbmllbnRseSkgMzIuMDk5NSBUagotLTMyNyBUSm0KLShieSkgOS45NjI2IFRqCi0tMzI3IFRKbQotKGNvbXBpbGluZykgNDAuNDA4MyBUagotLTMyNyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjcgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTMyNyBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzI4IFRKbQotKHByZXByb2NlcykgMzguNzI0NiBUagotMSBUSm0KLShzb3IpIDEyLjE3NDMgVGoKLS0zMjggVEptCi0oc3ltYm9sKSAyOS4zMzk5IFRqCi1bMSAwIDAgMSAzMzYuMDQ2IDYxNS43NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzM2LjA0NiAtNjE1Ljc3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM2LjA0NiA2MTUuNzc1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX05PX1NURElPKSA2NS43NTMyIFRqCi1bMSAwIDAgMSA0MDEuNzk5IDYxNS43NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDAxLjc5OSAtNjE1Ljc3NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDA1LjA1NyA2MTUuNzc1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGRlXDAwMm5lZC4pIDMxLjgyMDUgVGoKLS0xMDgzIFRKbQotKERvaW5nKSAyNC45MDY1IFRqCi0tMzI3IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTMyNyBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMzI3IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTMyNyBUSm0KLShhKSA0LjQyMzM5IFRqCi03MiA2MDMuODE5IFRkCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShjb250YWluaW5nKSA0Mi4wNjIxIFRqCi0tMjUwIFRKbQotKG9ubHkpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKGVpZ2h0KSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9uczopIDM5Ljg1MDQgVGoKLVsxIDAgMCAxIDcyIDYwMS42NjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTkxLjc2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTgxLjk2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzc0luaXQpIDEwNy41OTYgVGoKLVsxIDAgMCAxIDE3OS41OTYgNTgxLjk2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzkuNTk2IC01ODEuOTY2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzkuNTk2IDU4MS45NjYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTk5LjA3OSA1ODEuOTY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5OS4wNzkgLTU4MS45NjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5OS4wNzkgNTgxLjk2NiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWjJfYnpDb21wcmVzcykgODMuNjg1OCBUagotWzEgMCAwIDEgMjgyLjc2NSA1ODEuOTY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI4Mi43NjUgLTU4MS45NjZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI4Mi43NjUgNTgxLjk2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAzMDIuMjQ3IDU4MS45NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAyLjI0NyAtNTgxLjk2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAyLjI0NyA1ODEuOTY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekNvbXByZXNzRW5kKSAxMDEuNjE5IFRqCi1bMSAwIDAgMSA0MDMuODY2IDU4MS45NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxNC4wOTE1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDE3Ljk1OCAtNTgxLjk2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE3Ljk1OCA1ODEuOTY2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekRlY29tcHJlc3NJbml0KSAxMTkuNTUxIFRqCi1bMSAwIDAgMSA1MzcuNTA5IDU4MS45NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTM3LjUwOSAtNTgxLjk2Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM3LjUwOSA1ODEuOTY2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU3MC4wMTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU3MC4wMTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzcykgOTUuNjQxIFRqCi1bMSAwIDAgMSAxNjcuNjQxIDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY3LjY0MSAtNTcwLjAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTY3LjY0MSA1NzAuMDExIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDE3Mi4xNDQgNTcwLjAxMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNzIuMTQ0IC01NzAuMDExXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNzIuMTQ0IDU3MC4wMTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQloyX2J6RGVjb21wcmVzc0VuZCkgMTEzLjU3NCBUagotWzEgMCAwIDEgMjg1LjcxOSA1NzAuMDExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg3LjYxMSAtNTcwLjAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg3LjYxMSA1NzAuMDExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcykgMTQzLjQ2MSBUagotWzEgMCAwIDEgNDMxLjA3MyA1NzAuMDExXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQzMS4wNzMgLTU3MC4wMTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQzMS4wNzMgNTcwLjAxMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0MzUuNTc3IDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM1LjU3NyAtNTcwLjAxMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM1LjU3NyA1NzAuMDExIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKSAxNTUuNDE3IFRqCi1bMSAwIDAgMSA1OTAuOTk0IDU3MC4wMTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTE4Ljk5NCAtMS41MzQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OTgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NTguNTc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NDguMTU4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFdoZW4pIDIzLjc5MDcgVGoKLS0yNTAgVEptCi0oY29tcGlsZWQpIDM3LjA4MDggVGoKLS0yNTAgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHRoaXMsKSAxNi44ODY2IFRqCi0tMjUwIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9ucykgMzcuMDgwOCBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKGlnbm9yZSkgMjUuNDU0NCBUagotWzEgMCAwIDEgMjcyLjUyNiA1NDguMTU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi41MjYgLTU0OC4xNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Mi41MjYgNTQ4LjE1OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh2ZXJib3NpdHkpIDUzLjc5OCBUagotWzEgMCAwIDEgMzI2LjMyNCA1NDguMTU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyNi4zMjQgLTU0OC4xNThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyOC44MTUgNTQ4LjE1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShzZXR0aW5ncy4pIDMyLjkzNjQgVGoKLVsxIDAgMCAxIDcyIDU0Ni4wMDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTM2LjEwM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE3LjYwMSBUZAotL0YxMjJfMCAxNy4yMTU0IFRmCi0oMy43LjIuKSA0My4wNzI5IFRqCi0tMjc4IFRKbQotKENyaXRpY2FsKSA1OC4zNjAyIFRqCi0tMjc4IFRKbQotKGVycikgMjIuOTY1MyBUagotMjAgVEptCi0ob3IpIDE3LjIxNTQgVGoKLS0yNzggVEptCi0oaGFuZGxpbmcpIDcxLjczNjYgVGoKLVsxIDAgMCAxIDcyIDUxMy43NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTAzLjg3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDk1Ljc0OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShsaWJiemlwMikgNDcuODIwNSBUagotWzEgMCAwIDEgMTE5LjgyMSA0OTUuNzQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44MjEgLTQ5NS43NDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEyNC41MjkgNDk1Ljc0OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjb250YWlucykgMzMuMjA1MyBUagotLTQ3MyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tNDcyIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTQ3MyBUSm0KLShvZikgOC4yOTg4NSBUagotLTQ3MiBUSm0KLShpbnRlcm5hbCkgMzAuNDM1NyBUagotLTQ3MyBUSm0KLShhc3NlcnRpb24pIDM1LjQxNyBUagotLTQ3MiBUSm0KLShjaGVja3MpIDI3LjEwODIgVGoKLS00NzMgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS00NzIgVEptCi0oc2hvdWxkLCkgMjkuMDYwOSBUagotLTUyOSBUSm0KLShuZWVkbGVzcykgMzMuNzUzMyBUagotLTQ3MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDczIFRKbQotKHNheSkgMTMuMjgwMSBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTUyOCBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcikgNy43NDA5NCBUagotLTQ3MyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTQ3MiBUSm0KLShhY3RpKSAxNC4zODYgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXRlZC4pIDE5LjA4ODMgVGoKLTcyIDQ4My43OTMgVGQKLShOZSkgMTEuNjE2NCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnRoZWxlc3MsKSAzNy4zNDk4IFRqCi0tNTMzIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tNDc2IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tNDc2IFRKbQotKGFzc2VydGlvbikgMzUuNDE3IFRqCi0tNDc2IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTQ3NiBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaWwsKSAxMi40NTMzIFRqCi0tNTMyIFRKbQotKGJlaGEpIDE4LjgwOTQgVGoKLTIwIFRKbQotKHZpb3VyKSAyMS4wMzEgVGoKLS00NzYgVEptCi0oZGVwZW5kcykgMzIuNjQ3NCBUagotLTQ3NiBUSm0KLShvbikgOS45NjI2IFRqCi0tNDc2IFRKbQotKHdoZXRoZXIpIDMyLjA4OTUgVGoKLS00NzYgVEptCi0ob3IpIDguMjk4ODUgVGoKLS00NzcgVEptCi0obm90KSAxMi43MzIyIFRqCi0tNDc2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTQ3NiBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tNDc2IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTQ3NiBUSm0KLShjb21waWxlZCkgMzcuMDgwOCBUagotLTQ3NiBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA3MiA0NzEuODM4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NzEuODM4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzEuODM4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX05PX1NURElPKSA2NS43NTMyIFRqCi1bMSAwIDAgMSAxMzcuNzUzIDQ3MS44MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM3Ljc1MyAtNDcxLjgzOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQwLjI0NCA0NzEuODM4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHNldC4pIDEzLjU1OTEgVGoKLVsxIDAgMCAxIDcyIDQ3MC41MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDYwLjYzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NDkuOTg1IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0oY29tcGlsZSwpIDM0LjU5MDEgVGoKLS0yNTAgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0oYXNzZXJ0aW9uKSAzNS40MTcgVGoKLS0yNTAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlsdXJlKSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKHlpZWxkcykgMjMuODAwNyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obWVzc2FnZTopIDM2LjUyMjkgVGoKLVsxIDAgMCAxIDcyIDQ0Ny44MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM3LjkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0MjguMTMxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJ6aXAyL2xpYmJ6aXAyOikgNjAuMzMzNSBUagotLTMxMCBUSm0KLShpbnRlcm5hbCkgMzAuNDM1NyBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MCBUSm0KLShudW1iZXIpIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0oTi4pIDkuNjgzNjUgVGoKLVsxIDAgMCAxIDcyIDQyNS45NzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDE2LjA3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDA2LjI3OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMzMyIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzMxIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMzIgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi0tMzMyIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zMzEgVEptCi0oYnppcDIvbGliYnppcDIsKSA2MC4wNTQ2IFRqCi0tMzUyIFRKbQotKDEuMC41KSAxOS45MjUyIFRqCi0tMzMyIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzMyIFRKbQotKDEwKSA5Ljk2MjYgVGoKLS0zMzIgVEptCi0oRGVjZW1iZXIpIDQwLjkzNjMgVGoKLS0zMzEgVEptCi0oMjAwNy4pIDIyLjQxNTkgVGoKLS01NTUgVEptCi0oUGxlYXNlKSAyNS40NTQ0IFRqCi0tMzMyIFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTMzMiBUSm0KLShpdCkgNS41MzkyMSBUagotLTMzMSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzMyIFRKbQotKG1lKSAxMi4xNzQzIFRqCi0tMzMyIFRKbQotKGF0OikgOS45NjI2IFRqCi0tNDczIFRKbQotKGpzZSkgMTEuMDY4NCBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFyZEBiemlwLm9yKSA0OS44NDI5IFRqCi0xOCBUSm0KLShnLikgNy40NzE5NSBUagotLTExMTAgVEptCi0oSWYpIDYuNjM1MDkgVGoKLS0zMzIgVEptCi0odGhpcykgMTQuMzk2IFRqCi03MiAzOTQuMzIzIFRkCi0oaGFwcGVuZWQpIDM4LjE3NjcgVGoKLS0yOTcgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjk4IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI5NyBUSm0KLSh3ZXJlKSAxOS4zNTczIFRqCi0tMjk3IFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yOTcgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjk4IFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0yOTcgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yOTcgVEptCi0odXNlcykgMTcuMTU1NiBUagotLTI5NyBUSm0KLShsaWJiemlwMikgMzIuNjU3NCBUagotLTI5OCBUSm0KLShhcykgOC4yOTg4NSBUagotLTI5NyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjk3IFRKbQotKGNvbXBvbmVudCwpIDQ2Ljc2NDQgVGoKLS0zMDkgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjk4IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI5NyBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMjk3IFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTI5NyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yOTggVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi03MiAzODIuMzY4IFRkCi0odG8pIDcuNzUwOSBUagotLTI2NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjQgVEptCi0oYXV0aG9yXChzXCkpIDM1Ljk2NSBUagotLTI2NCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI2NCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjY0IFRKbQotKHByb2dyYW0uKSAzNi4yNDM5IFRqCi0tNzAzIFRKbQotKFBsZWFzZSkgMjUuNDU0NCBUagotLTI2NCBUSm0KLShtYWspIDE3LjE1NTYgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNjQgVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNjQgVEptCi0oZWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKGZvcnQpIDE0LjM4NiBUagotLTI2NCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjY0IFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTI2MyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjQgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZzspIDEyLjczMjIgVGoKLS0yNzEgVEptCi0odGltZWx5KSAyNS40NjQ0IFRqCi0tMjY0IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjY0IFRKbQotKGFjY3VyYXRlKSAzMy4xODU0IFRqCi0tMjY0IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWcpIDkuOTYyNiBUagotLTI2NCBUSm0KLShyZXBvcnRzKSAyNy42NjYxIFRqCi0tMjY0IFRKbQotKGUpIDQuNDIzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZW50dWFsbHkpIDMyLjA5OTUgVGoKLTcyIDM3MC40MTMgVGQKLShsZWFkKSAxNi41OTc3IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oaGlnaGVyKSAyNS40NTQ0IFRqCi0tMjUwIFRKbQotKHF1YWxpdHkpIDI3LjY3NjEgVGoKLS0yNTAgVEptCi0oc29mdHcpIDIyLjEzNjkgVGoKLTEwIFRKbQotKGFyZS4pIDE0LjY1NSBUagotLTYyMCBUSm0KLShUaGFua3MuKSAzMS44MjA1IFRqCi0tNjIwIFRKbQotKEp1bGlhbikgMjMuODAwNyBUagotLTI1MCBUSm0KLShTZSkgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXJkLCkgMTUuMjEyOSBUagotLTI1MCBUSm0KLSgxMCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKERlY2VtYmVyKSA0MC45MzYzIFRqCi0tMjUwIFRKbQotKDIwMDcuKSAyMi40MTU5IFRqCi1bMSAwIDAgMSA3MiAzNjguMjU2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzQ4LjU1N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzM4Ljc1OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh3aGVyZSkgMjQuMzM4NiBUagotWzEgMCAwIDEgOTguODMxMiAzMzguNzU4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTk4LjgzMTIgLTMzOC43NThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTk4LjgzMTIgMzM4Ljc1OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShOKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAxMDQuODA5IDMzOC43NThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA0LjgwOSAtMzM4Ljc1OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA3LjMwMiAzMzguNzU4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI1MSBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotLTYyMSBUSm0KLShJZikgNi42MzUwOSBUagotWzEgMCAwIDEgMjMwLjgxIDMzOC43NThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjMwLjgxIC0zMzguNzU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzAuODEgMzM4Ljc1OCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShOKSA1Ljk3NzU2IFRqCi0tNjAwIFRKbQotKD09KSAxMS45NTUxIFRqCi0tNjAwIFRKbQotKDEwMDcpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDI4NC42MDggMzM4Ljc1OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yODQuNjA4IC0zMzguNzU4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODQuNjA4IDMzOC43NTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShhbHNvKSAxNi4wNDk3IFRqCi0tMjUxIFRKbQotKHByaW50cykgMjIuNjk0OCBUagotLTI1MCBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeHRyYSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLSh0ZSkgNy4xOTMgVGoKLTE1IFRKbQotKHh0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYWR2aXNpbmcpIDMzLjc2MzMgVGoKLS0yNTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHJlYWRlcikgMjQuODg2NiBUagotLTI1MCBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKHVucmVsaWFibGUpIDM5Ljg0MDQgVGoKLTcyIDMyNi44MDMgVGQKLShtZW1vcnkpIDMzLjIwNTMgVGoKLS00MjUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS00MjQgVEptCi0ob2Z0ZW4pIDIwLjQ3MzEgVGoKLS00MjUgVEptCi0oYXNzb2NpYXRlZCkgNDAuOTQ2MyBUagotLTQyNSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDI0IFRKbQotKGludGVybmFsKSAzMC40MzU3IFRqCi0tNDI1IFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tNDI0IFRKbQotKDEwMDcuKSAyMi40MTU5IFRqCi0tODM0IFRKbQotKFwoVGhpcykgMjEuMDMxIFRqCi0tNDI1IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tNDI1IFRKbQotKGEpIDQuNDIzMzkgVGoKLS00MjQgVEptCi0oZnJlcXVlbnRseS1vYnNlcnYpIDcwLjgyNDEgVGoKLTE1IFRKbQotKGVkLXBoZW5vbWVub24pIDY0LjE4OSBUagotLTQyNSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tNDI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi03MiAzMTQuODQ4IFRkCi0oMS4wLjAvMS4wLjFcKS4pIDQ4LjQyODIgVGoKLVsxIDAgMCAxIDcyIDMxMy4wNjVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljg5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzAzLjE2N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjkyLjk5NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShleGl0XCgzXCkpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDExMy44NDMgMjkyLjk5NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTMuODQzIC0yOTIuOTk1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMTYuMzM0IDI5Mi45OTUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0odGhlbikgMTcuMTU1NiBUagotLTI1MCBUSm0KLShjYWxsZWQuKSAyNi4yODEzIFRqCi1bMSAwIDAgMSA3MiAyOTEuODk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OTgxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yODIuMDAxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyNzEuMTQyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEYpIDUuNTM5MjEgVGoKLTE1IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLVsxIDAgMCAxIDk1LjA5MzMgMjcxLjE0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05NS4wOTMzIC0yNzEuMTQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05NS4wOTMzIDI3MS4xNDIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oc3RkaW8pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEyNC45ODEgMjcxLjE0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjQuOTgxIC0yNzEuMTQyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjQuOTgxIDI3MS4xNDIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLWZyZWUpIDE4Ljc5OTQgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShhc3NlcnRpb24pIDM1LjQxNyBUagotLTI1MCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaWx1cmVzKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKHJlc3VsdCkgMjIuMTM2OSBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oY2FsbCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShmdW5jdGlvbikgMzMuMjA1MyBUagotLTI1MCBUSm0KLShkZWNsYXJlZCkgMzMuNzQzMyBUagotLTI1MCBUSm0KLShhczopIDExLjA2ODQgVGoKLVsxIDAgMCAxIDcyIDI2OC45ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMjU5LjYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCAyNTkuNjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZXh0ZXJuKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHZvaWQpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYnpfaW50ZXJuYWxfZXJyb3IpIDEwMS42MTkgVGoKLS00MjYgVEptCi0oXCgpIDUuOTc3NTYgVGoKLS00MjYgVEptCi0oaW50KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGVycmNvZGUpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oXCk7KSAxMS45NTUxIFRqCi1bMSAwIDAgMSA3MiAyNDQuMDc4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjQ4NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIzNC4xOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjIyLjIyNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yNTAgVEptCi0ocmVsZSkgMTQuOTMzOSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29kZSkgMTguODA5NCBUagotLTI1MCBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MCBUSm0KLShwYXNzZWQpIDI2LjU2MDMgVGoKLS0yNTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShwYXJhbWV0ZXIpIDM5LjgzMDUgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS02MjAgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjUwIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1MCBUSm0KLShzdXBwbHkpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oc3VjaCkgMTguMjYxNCBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGZ1bmN0aW9uLikgMzUuNjk2IFRqCi1bMSAwIDAgMSA3MiAyMjAuMDY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTIxMC4xN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjAwLjM3MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJbikgOC4yOTg4NSBUagotLTI5NCBUSm0KLShlaXRoZXIpIDIyLjY4NDggVGoKLS0yOTQgVEptCi0oY2FzZSwpIDE5LjYzNjMgVGoKLS0zMDYgVEptCi0ob25jZSkgMTguODA5NCBUagotLTI5NCBUSm0KLShhbikgOS40MDQ2OSBUagotLTI5NCBUSm0KLShhc3NlcnRpb24pIDM1LjQxNyBUagotLTI5NCBUSm0KLShmKSAzLjMxNzU1IFRqCi0xMCBUSm0KLShhaWx1cmUpIDIyLjY4NDggVGoKLS0yOTQgVEptCi0oaGFzKSAxMy4yODAxIFRqCi0tMjk1IFRKbQotKG9jY3VycmVkLCkgMzcuMzM5OCBUagotLTMwNSBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi1bMSAwIDAgMSAzMDYuNTQxIDIwMC4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzA2LjU0MSAtMjAwLjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzA2LjU0MSAyMDAuMzcyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6X3N0cmVhbSkgNTMuNzk4IFRqCi1bMSAwIDAgMSAzNjAuMzM5IDIwMC4zNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYwLjMzOSAtMjAwLjM3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYzLjI3MSAyMDAuMzcyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHJlY29yZHMpIDI5LjMxOTkgVGoKLS0yOTQgVEptCi0oaW4pIDcuNzUwOSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0yMCBUSm0KLShvbHYpIDEyLjczMjIgVGoKLTE1IFRKbQotKGVkKSA5LjQwNDY5IFRqCi0tMjk0IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI5NSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI5NCBUSm0KLShyZSkgNy43NDA5NCBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFyZGVkKSAyMi4xMjY5IFRqCi0tMjk0IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjk0IFRKbQotKGluKSA3Ljc1MDkgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWxpZC4pIDE3LjQzNDYgVGoKLTcyIDE4OC40MTcgVGQKLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTI1MCBUSm0KLShhdHRlbXB0KSAyOS44ODc4IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocmVzdW1lKSAyOC43NzIgVGoKLS0yNTAgVEptCi0obm9ybWFsKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0ob3BlcmF0aW9uKSAzNy42Mjg3IFRqCi0tMjUwIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0odGhlbS4pIDIyLjQxNTkgVGoKLVsxIDAgMCAxIDcyIDE4Ni4yNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNzYuMzYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNjYuNTY0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTI5OSBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yOTkgVEptCi0oY291cnNlLCkgMjguNDkzIFRqCi0tMzExIFRKbQotKGNoYW5nZSkgMjguMjE0MSBUagotLTI5OCBUSm0KLShjcml0aWNhbCkgMjcuNjY2MSBUagotLTI5OSBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI5OCBUSm0KLShoYW5kbGluZykgMzQuODY5MSBUagotLTI5OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk4IFRKbQotKHN1aXQpIDE0LjM5NiBUagotLTI5OSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjk4IFRKbQotKG5lZWRzLikgMjUuMTc1NSBUagotLTkxMiBUSm0KLShBcykgMTEuMDY4NCBUagotLTI5OCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjk5IFRKbQotKHNhaWQpIDE2LjA0OTcgVGoKLS0yOTggVEptCi0oYWJvKSAxNC4zODYgVGoKLTE1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSwpIDYuOTE0MDQgVGoKLS0zMTEgVEptCi0oY3JpdGljYWwpIDI3LjY2NjEgVGoKLS0yOTkgVEptCi0oZXJyb3JzKSAyMy4yMzI4IFRqCi0tMjk4IFRKbQotKGluZGljYXRlKSAzMS41NDE2IFRqCi0tMjk5IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWdzKSAxMy44MzgxIFRqCi03MiAxNTQuNjA4IFRkCi0oaW4pIDcuNzUwOSBUagotLTI2MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjMgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI2MyBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI2MyBUSm0KLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNjMgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjYzIFRKbQotKG9jY3VyKSAyMi4xMjY5IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjk3IFRKbQotKEFsbCkgMTIuNzMyMiBUagotLTI2MyBUSm0KLSgibm9ybWFsIikgMzYuMzUzNSBUagotLTI2MyBUSm0KLShlcnJvcikgMTkuMzU3MyBUagotLTI2MyBUSm0KLShzaXR1YXRpb25zKSAzOC4xOTY2IFRqCi0tMjYzIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI2MyBUSm0KLShpbmRpY2F0ZWQpIDM2LjUyMjkgVGoKLS0yNjMgVEptCi0odmlhKSAxMi4xNzQzIFRqCi0tMjYzIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMjYzIFRKbQotKHJldHVybikgMjMuNzkwNyBUagotLTI2MyBUSm0KLShjb2RlcykgMjIuNjg0OCBUagotLTI2MyBUSm0KLShmcm9tKSAxOS4zNjczIFRqCi0tMjYzIFRKbQotKGZ1bmN0aW9ucywpIDM5LjU3MTQgVGoKLTcyIDE0Mi42NTMgVGQKLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0ocmVjbykgMTcuMTQ1NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcmVkKSAxNy4xNDU2IFRqCi0tMjUwIFRKbQotKGZyb20uKSAyMS44NTc5IFRqCi1bMSAwIDAgMSA3MiAxNDIuNTU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS44OThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTEzMi42NTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEwNy45NjUgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDMuOC4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oTWFraW5nKSA3MS4xNjg1IFRqCi0tMjc4IFRKbQotKGEpIDExLjQ4NjEgVGoKLS0yNzggVEptCi0oV2luZG8pIDYzLjExMTcgVGoKLTE1IFRKbQotKHdzKSAyNy41NTg0IFRqCi0tMjc4IFRKbQotKERMTCkgNDAuMTYwMSBUagotWzEgMCAwIDEgNzIgMTAzLjM2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuODk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05My40NzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4Ni4xMTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRXYpIDExLjA2ODQgVGoKLTE1IFRKbQotKGVyeXRoaW5nKSAzMy4yMDUzIFRqCi0tMzI4IFRKbQotKHJlbGF0ZWQpIDI3LjEwODIgVGoKLS0zMjcgVEptCi0odG8pIDcuNzUwOSBUagotLTMyOCBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbmRvKSAxNy43MTM1IFRqCi0yNSBUSm0KLSh3cykgMTEuMDY4NCBUagotLTMyOCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0zMjcgVEptCi0oYmVlbikgMTguODA5NCBUagotLTMyOCBUSm0KLShjb250cmliKSAyOC4yMjQgVGoKLTIwIFRKbQotKHV0ZWQpIDE3LjE1NTYgVGoKLS0zMjggVEptCi0oYnkpIDkuOTYyNiBUagotLTMyNyBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG9zaGlva2EpIDMwLjk5MzYgVGoKLS0zMjggVEptCi0oVHN1bmVvKSAyOS4zMjk5IFRqCi0tMzI4IFRKbQotKFwoKSAzLjMxNzU1IFRqCi1bMSAwIDAgMSAzNzguMTM5IDg2LjExMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzguMTM5IC04Ni4xMTJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3OC4xMzkgODYuMTEyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHRzdW5lb0Byci5paWo0dS5vci5qcCkgMTI1LjUyOSBUagotWzEgMCAwIDEgNTAzLjY2OCA4Ni4xMTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTAzLjY2OCAtODYuMTEyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDMuNjY4IDg2LjExMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKSwpIDUuODA4MiBUagotLTM0NyBUSm0KLShzbykgOC44NTY3NSBUagotLTMyOCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLTcyIDc0LjE1NjggVGQKLShzaG91bGQpIDI2LjU3MDMgVGoKLS0yNTAgVEptCi0oc2VuZCkgMTguMjYxNCBUagotLTI1MCBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHF1ZXJpZXMpIDI4Ljc3MiBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKGhpbSkgMTUuNTAxOCBUagotLTI1MCBUSm0KLShcKGIpIDguMjk4ODUgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0ocGVyaGFwcykgMzAuOTgzNyBUagotLTI1MCBUSm0KLShDYzopIDEzLjgzODEgVGoKLS0zMTAgVEptCi0obWUsKSAxNC42NjQ5IFRqCi1bMSAwIDAgMSAyODcuOTU4IDc0LjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjg3Ljk1OCAtNzQuMTU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjg3Ljk1OCA3NC4xNTY4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGpzZXdhcmRAYnppcC5vcmcpIDk1LjY0MSBUagotWzEgMCAwIDEgMzgzLjYgNzQuMTU2OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zODMuNiAtNzQuMTU2OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzgzLjYgNzQuMTU2OCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKS4pIDUuODA4MiBUagotWzEgMCAwIDEgNzIgNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMS4xNDgyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljk3MzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTEuMDcxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzQuNDE0IDUxLjA3MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgyOSkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzMyAzMwotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTguOTExNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgOC45MTE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNzYuNDk3OSAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0Mi41NjkgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxOS4wNjcgNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9ncmFtbWluZykgNTQuNzk0MyBUagotLTI1MCBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi1bMSAwIDAgMSA0OTYuNTU2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk2LjU1NiAtNzQ5LjI0NV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk2LjU1NiA3NDkuMjQ1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGxpYmJ6aXAyKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA1NDQuMzc2IDc0OS4yNDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc4LjMwNSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTUuMDM2M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShNeSkgMTMuODM4MSBUagotLTM2NyBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGFndWUpIDE4LjgwOTQgVGoKLS0zNjcgVEptCi0odW5kZXJzdGFuZGluZykgNTYuNDQ4MSBUagotLTM2NyBUSm0KLShvZikgOC4yOTg4NSBUagotLTM2NyBUSm0KLSh3aGF0KSAxOS4zNjczIFRqCi0tMzY4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNjcgVEptCi0oZG8pIDkuOTYyNiBUagotLTM2NyBUSm0KLShpczopIDkuNDE0NjYgVGoKLS01NDQgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTM2NyBUSm0KLShWKSA3LjE5MyBUagotNjAgVEptCi0oaXN1YWwpIDE4LjgxOTQgVGoKLS0zNjcgVEptCi0oQysrKSAxNy44ODI5IFRqCi0tMzY3IFRKbQotKDUuMCwpIDE0Ljk0MzkgVGoKLS0zOTcgVEptCi0ob3BlbikgMTkuMzY3MyBUagotLTM2NyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zNjcgVEptCi0ocHJvamVjdCkgMjcuNjY2MSBUagotLTM2NyBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDQzMi45NjYgNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MzIuOTY2IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MzIuOTY2IDcxMC4wMzcgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnoyLmRzcCkgNTkuNzc1NiBUagotWzEgMCAwIDEgNDkyLjc0MiA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5Mi43NDIgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Mi43NDIgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzk2IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzY4IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWlsZC4pIDE3Ljk5MjUgVGoKLTcyIDY5OC4wODIgVGQKLShUaGF0JykgMjEuNTc5IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjUwIFRKbQotKGFsbC4pIDEyLjQ1MzMgVGoKLVsxIDAgMCAxIDcyIDY5Ny45ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY4OC4wMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI4NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yODQgVEptCi0oY2FuJykgMTcuMTQ1NiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjg1IFRKbQotKG9wZW4pIDE5LjM2NzMgVGoKLS0yODQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjg0IFRKbQotKHByb2plY3QpIDI3LjY2NjEgVGoKLS0yODQgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjg0IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI4NSBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yODQgVEptCi0ocmVhc29uLCkgMjguNDkzIFRqCi0tMjkzIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI4NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjg0IFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTI4NCBUSm0KLShvbmUsKSAxNi44NzY2IFRqCi0tMjkzIFRKbQotKG5hbWluZykgMjkuODg3OCBUagotLTI4NCBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI4NCBUSm0KLShcMDAybGVzOikgMTkuMzc3MyBUagotWzEgMCAwIDEgNDI0LjUwNSA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyNC41MDUgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNC41MDUgNjc2LjE2NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShibG9ja3NvcnQuYykgNjUuNzUzMiBUagotWzEgMCAwIDEgNDkwLjI1OSA2NzYuMTY0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5MC4yNTkgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5MC4yNTkgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA0OTUuNjY2IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDk1LjY2NiAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDk1LjY2NiA2NzYuMTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6bGliLmMpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDUzNy41MDkgNjc2LjE2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzcuNTA5IC02NzYuMTY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzcuNTA5IDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNjY0LjIwOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShjb21wcmVzcy5jKSA1OS43NzU2IFRqCi1bMSAwIDAgMSAxMzEuNzc2IDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTMxLjc3NiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTMxLjc3NiA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDEzNi40MzYgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzYuNDM2IC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzYuNDM2IDY2NC4yMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oY3JjdGFibGUuYykgNTkuNzc1NiBUagotWzEgMCAwIDEgMTk2LjIxMSA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Ni4yMTEgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5Ni4yMTEgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyMDAuODcxIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjAwLjg3MSAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjAwLjg3MSA2NjQuMjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRlY29tcHJlc3MuYykgNzEuNzMwNyBUagotWzEgMCAwIDEgMjcyLjYwMiA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3Mi42MDIgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3Mi42MDIgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAyNzcuMjYyIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc3LjI2MiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjc3LjI2MiA2NjQuMjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGh1ZmZtYW4uYykgNTMuNzk4IFRqCi1bMSAwIDAgMSAzMzEuMDYgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMzEuMDYgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMS4wNiA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDMzNS43MiA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNS43MiAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM1LjcyIDY2NC4yMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0ocmFuZHRhYmxlLmMpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQwMS40NzMgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDEuNDczIC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDMuNTYyIDY2NC4yMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQyMC4wMzcgNjY0LjIwOV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MjAuMDM3IC02NjQuMjA5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MjAuMDM3IDY2NC4yMDkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnoyLmRlZikgNTkuNzc1NiBUagotWzEgMCAwIDEgNDc5LjgxMiA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3OS44MTIgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ3OS44MTIgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNTkzIFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UpIDkuOTYyNiBUagotLTIxMCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjA5IFRKbQotKGFsc28pIDE2LjA0OTcgVGoKLTcyIDY1Mi4yNTQgVGQKLShuZWVkKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0obmFtZSkgMjEuNTc5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShoZWFkZXIpIDI2LjU1MDMgVGoKLS0yNTAgVEptCi0oXDAwMmxlcykgMTYuNjA3NyBUagotWzEgMCAwIDEgMTkwLjQxNSA2NTIuMjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5MC40MTUgLTY1Mi4yNTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5MC40MTUgNjUyLjI1NCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemxpYi5oKSA0MS44NDI5IFRqCi1bMSAwIDAgMSAyMzIuMjU4IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjMyLjI1OCAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjM0Ljc0OCA2NTIuMjU0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSAyNTEuNjI1IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjUxLjYyNSAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjUxLjYyNSA2NTIuMjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6bGliX3ByaXZhdGUuaCkgODkuNjYzNCBUagotWzEgMCAwIDEgMzQxLjI4OSA2NTIuMjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM0MS4yODkgLTY1Mi4yNTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM0MS4yODkgNjUyLjI1NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2NTAuNzJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY0MC43NTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzMC4zMzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGRvbicpIDE4LjI2MTQgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI1MCBUSm0KLSh1c2UpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oVkMrKywpIDI3LjU2NjUgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKG1heSkgMTcuMTU1NiBUagotLTI1MCBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oZGVcMDAybmUpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHByb3Byb2Nlc3NvcikgNTEuNDU2OCBUagotLTI1MCBUSm0KLShzeW1ib2wpIDI5LjMzOTkgVGoKLVsxIDAgMCAxIDM2My42MzQgNjMwLjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjMuNjM0IC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjMuNjM0IDYzMC4zMzYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oX1dJTjMyKSAzNS44NjU0IFRqCi1bMSAwIDAgMSAzOTkuNSA2MzAuMzM2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5OS41IC02MzAuMzM2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zOTkuNSA2MzAuMzM2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDYyOC4xNzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYxOC4yMTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYwOC40MTggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRmluYWxseSkgMjguMjM0IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSAxMDQuNTY4IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTA0LjU2OCAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjU2OCA2MDguNDE4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGRsbHRlc3QuYykgNTMuNzk4IFRqCi1bMSAwIDAgMSAxNTguMzY2IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTU4LjM2NiAtNjA4LjQxOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTYwLjg1NiA2MDguNDE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oc2FtcGxlKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTI1MCBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShETEwuKSAyMS44NTc5IFRqCi0tNTAwIFRKbQotKEl0KSA2LjA4NzE1IFRqCi0tMjUwIFRKbQotKGhhcykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHByb2plY3QpIDI3LjY2NjEgVGoKLS0yNTAgVEptCi0oXDAwMmxlLCkgMTUuMjIyOSBUagotWzEgMCAwIDEgMzg4LjU4IDYwOC40MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzg4LjU4IC02MDguNDE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zODguNTggNjA4LjQxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShkbGx0ZXN0LmRzcCkgNjUuNzUzMiBUagotWzEgMCAwIDEgNDU0LjMzMyA2MDguNDE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1NC4zMzMgLTYwOC40MThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1NC4zMzMgNjA4LjQxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2MDYuMjYyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01OTYuMjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1ODYuNTAxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZVwwMDJsZSkgMTcuMTU1NiBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0oVikgNy4xOTMgVGoKLTYwIFRKbQotKGlzdWFsKSAxOC44MTk0IFRqCi0tMjUwIFRKbQotKEMsKSA5LjEzNTcgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGxvb2spIDE3LjcxMzUgVGoKLS0yNTAgVEptCi0oYXQpIDcuMTkzIFRqCi1bMSAwIDAgMSAyOTIuMjEyIDU4Ni41MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjkyLjIxMiAtNTg2LjUwMV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjkyLjIxMiA1ODYuNTAxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKG1ha2VmaWxlLm1zYykgNzEuNzMwNyBUagotWzEgMCAwIDEgMzYzLjk0MyA1ODYuNTAxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM2My45NDMgLTU4Ni41MDFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM2My45NDMgNTg2LjUwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA1ODQuMzQ0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NzQuMzgxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA1NjQuNTgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEJlKSAxMS4wNjg0IFRqCi0tMjkxIFRKbQotKGEpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yOTEgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI5MSBUSm0KLShpZikgNi4wODcxNSBUagotLTI5MSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTEgVEptCi0oY29tcGlsZSkgMzIuMDk5NSBUagotWzEgMCAwIDEgMTkyLjA2OSA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Mi4wNjkgLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE5Mi4wNjkgNTY0LjU4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMjIxLjk1OCA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMS45NTggLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNC44NTcgNTY0LjU4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpdHNlbGYpIDE5LjkyNTIgVGoKLS0yOTEgVEptCi0ob24pIDkuOTYyNiBUagotLTI5MSBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpbjMyLCkgMjAuMjA0MiBUagotLTMwMSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTEgVEptCi0obXVzdCkgMTkuMzc3MyBUagotLTI5MSBUSm0KLShzZXQpIDExLjA2ODQgVGoKLVsxIDAgMCAxIDM0Ni44NDEgNTY0LjU4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNDYuODQxIC01NjQuNTgzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNDYuODQxIDU2NC41ODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfVU5JWCkgNDEuODQyOSBUagotWzEgMCAwIDEgMzg4LjY4NSA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4OC42ODUgLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5MS41ODMgNTY0LjU4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjkxIFRKbQotKDApIDQuOTgxMyBUagotLTI5MSBUSm0KLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgNDI3LjM5OSA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyNy4zOTkgLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyNy4zOTkgNTY0LjU4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShCWl9MQ0NXSU4zMikgNjUuNzUzMiBUagotWzEgMCAwIDEgNDkzLjE1MyA1NjQuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My4xNTMgLTU2NC41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5Ni4wNTIgNTY0LjU4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjkxIFRKbQotKDEsKSA3LjQ3MTk1IFRqCi0tMzAxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi03MiA1NTIuNjI4IFRkCi0oXDAwMmxlKSAxMi43MzIyIFRqCi1bMSAwIDAgMSA4Ny4yMjI3IDU1Mi42MjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODcuMjIyNyAtNTUyLjYyOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODcuMjIyNyA1NTIuNjI4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyLmMpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDEyOS4wNjYgNTUyLjYyOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjkuMDY2IC01NTIuNjI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjkuMDY2IDU1Mi42MjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotLTI1MCBUSm0KLShiZWZvcmUpIDI1LjQ0NDUgVGoKLS0yNTAgVEptCi0oY29tcGlsaW5nLikgNDIuODk5IFRqCi0tMzEwIFRKbQotKE90aGVyd2lzZSkgNDAuOTQ2MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocmVzdWx0aW5nKSAzNC44NjkxIFRqCi0tMjUwIFRKbQotKGJpbmFyeSkgMjUuNDU0NCBUagotLTI1MCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob24nKSAxMy4yODAxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShjb3JyZWN0bHkpIDM1LjQwNzEgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDU1MC40NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0MC41MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUzMC43MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuJykgMTIuNzIyMiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKHRyaWVkKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjUwIFRKbQotKHN0dWYpIDE0Ljk0MzkgVGoKLTI1IFRKbQotKGYpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0obXlzZWxmLCkgMjkuNjA4OCBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0obG9va3MpIDIxLjU4OSBUagotLTI1MCBUSm0KLShwbGF1c2libGUuKSAzOC40NjU2IFRqCi1bMSAwIDAgMSA3MiA1MjguNTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtNDc3LjcwMV0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMCkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzNCAzNAotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE0MC4zOTggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNDAuMzk4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyODAuNzk2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjk3NCAtMTMuOTQ3N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTIxLjU1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTcyMF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNzAxLjkxNiBUZAotL0YxMjJfMCAyNC43OTAyIFRmCi0oNC4pIDIwLjY3NSBUagotLTI3OCBUSm0KLShNaXNjZWxsYW5lYSkgMTM5LjE3MiBUagotWzEgMCAwIDEgNzIgNzAxLjYwNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDAgLTkuMTM0N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE0LjExNjFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3OC4zNTVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY1OC4wMDYgVGQKLS9GMTIyXzAgMTcuMjE1NCBUZgotKFQpIDEwLjUxODYgVGoKLTgwIFRKbQotKGFiKSAyMC4wOTA0IFRqCi0xMCBUSm0KLShsZSkgMTQuMzU3NiBUagotLTI3OCBUSm0KLShvZikgMTYuMjUxMyBUagotLTI3OCBUSm0KLShDb250ZW50cykgNzQuNTk0MyBUagotWzEgMCAwIDEgNzIgNjQ5LjE4M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTExLjc0MDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYzNy40NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYzNy40NDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC4xLikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShMaW1pdGF0aW9ucykgNDUuOTQ3NSBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oZm9ybWF0KSAyNi41NjAzIFRqCi1bMSAwIDAgMSAyNTUuMjMxIDYzNy40NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2MC4yMTIgLTYzNy40NDNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI2OS4xNTQgNjM3LjQ0MyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDYzNy40NDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNjM3LjQ0M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA2MzcuNDQzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMxKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MzcuNDQzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MjUuNDg4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MjUuNDg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuMi4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUG9ydGFiaWxpdHkpIDQyLjA3MjEgVGoKLS0yNTAgVEptCi0oaXNzdWVzKSAyMy44MDA3IFRqCi1bMSAwIDAgMSAxNTguMzk1IDYyNS40ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2My4zNzYgLTYyNS40ODhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Mi4wMyA2MjUuNDg4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDYyNS40ODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNjI1LjQ4OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA2MjUuNDg4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA2MjUuNDg4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS43OTg0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MTMuNTMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MTMuNTMzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDQuMy4pIDE0Ljk0MzkgVGoKLS0zMTAgVEptCi0oUmVwb3J0aW5nKSAzOS44NTA0IFRqCi0tMjUwIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWdzKSAxMy44MzgxIFRqCi1bMSAwIDAgMSAxNTAuOTkzIDYxMy41MzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE1NS45NzUgLTYxMy41MzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE2Ni4xMTUgNjEzLjUzMyBUZAotL0YxNDdfMCA5Ljk2MjYgVGYKLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNjEzLjUzM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC02MTMuNTMzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDYxMy41MzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzIpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDYxMy41MzNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTYwMS41NzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDYwMS41NzggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC40LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShEaWQpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUwIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocmlnaHQpIDE4LjgxOTQgVGoKLS0yNTAgVEptCi0ocGFja2FnZT8pIDM3LjA2MDkgVGoKLVsxIDAgMCAxIDIxMi42MDIgNjAxLjU3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDMuMDg4NCAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMy4wODg0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjE4Ljc3OCAtNjAxLjU3OF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjI5LjEwOSA2MDEuNTc4IFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLVsxIDAgMCAxIDUwNi4xMjcgNjAxLjU3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MDYuMTI3IC02MDEuNTc4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MDYuMTI3IDYwMS41NzggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oMzMpIDkuOTYyNiBUagotWzEgMCAwIDEgNTE2LjA5IDYwMS41NzhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQ0LjA5IC0yLjE1NjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljc5ODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU4OS42MjNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU4OS42MjMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oNC41LikgMTQuOTQzOSBUagotLTMxMCBUSm0KLShGdXJ0aGVyKSAyOS4zMjk5IFRqCi0tMjUwIFRKbQotKFJlYWRpbmcpIDMzLjIwNTMgVGoKLVsxIDAgMCAxIDE1NS4wNTggNTg5LjYyM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTYwLjAzOSAtNTg5LjYyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcwLjM2MSA1ODkuNjIzIFRkCi0vRjE0N18wIDkuOTYyNiBUZgotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi0tMTY2IFRKbQotKDopIDIuNzY5NiBUagotLTE2NyBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjYgVEptCi0oOikgMi43Njk2IFRqCi0tMTY3IFRKbQotKDopIDIuNzY5NiBUagotLTE2NiBUSm0KLSg6KSAyLjc2OTYgVGoKLS0xNjcgVEptCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA1MDYuMTI3IDU4OS42MjNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTA2LjEyNyAtNTg5LjYyM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTA2LjEyNyA1ODkuNjIzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDM0KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDUxNi4wOSA1ODkuNjIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ0NC4wOSAtMi4xNTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS4xMzQ4XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtOS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC01NjguN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTU4LjkwMSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGVzZSkgMjMuNzkwNyBUagotLTI1MCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTAgVEptCi0oanVzdCkgMTQuMzk2IFRqCi0tMjUwIFRKbQotKHNvbWUpIDIxLjAzMSBUagotLTI1MCBUSm0KLShyYW5kb20pIDMwLjQzNTcgVGoKLS0yNTAgVEptCi0odGhvdWdodHMpIDM0LjMyMTIgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obWluZS4pIDIyLjQxNTkgVGoKLS02MjAgVEptCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdXIpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0obWlsZWFnZSkgMzEuNTQxNiBUagotLTI1MCBUSm0KLShtYXkpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhcnkpIDEyLjcyMjIgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLVsxIDAgMCAxIDcyIDU1Ni43NDRdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05LjYzMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0Ny4xMTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUyNC40OCBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oNC4xLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShMaW1pdGF0aW9ucykgMTEwLjE5MiBUagotLTI3OCBUSm0KLShvZikgMTkuNTAxNiBUagotLTI3OCBUSm0KLSh0aGUpIDMwLjk4NzcgVGoKLS0yNzggVEptCi0oY29tcHJlc3NlZCkgMTIxLjY5OSBUagotLTI3OCBUSm0KLShcMDAybGUpIDI5Ljg1MTUgVGoKLS0yNzggVEptCi0oZikgNi44NzkyOCBUagotMjAgVEptCi0ob3JtYXQpIDU3LjM4OTMgVGoKLVsxIDAgMCAxIDcyIDUyMC4yMDNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05LjYzMTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTUxMC41NzJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDUwMi44OTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDItMS4wLlgpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDEzNy43NTMgNTAyLjg5M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMzcuNzUzIC01MDIuODkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMzcuNzUzIDUwMi44OTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLCkgMi40OTA2NSBUagotWzEgMCAwIDEgMTQzLjQwNSA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0My40MDUgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE0My40MDUgNTAyLjg5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgwLjkuNSkgMjkuODg3OCBUagotWzEgMCAwIDEgMTczLjI5MyA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3My4yOTMgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE3Ni40NTMgNTAyLjg5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMTk0IDUwMi44OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk0IC01MDIuODkzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xOTQgNTAyLjg5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgwLjkuMCkgMjkuODg3OCBUagotWzEgMCAwIDEgMjIzLjg4OCA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIyMy44ODggLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyNy4wNDggNTAyLjg5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1c2UpIDEzLjI4MDEgVGoKLS0zMTcgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGFjdGx5KSAyNC4zNDg2IFRqCi0tMzE3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMxOCBUSm0KLShzYW1lKSAyMC40NzMxIFRqCi0tMzE3IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTMxNyBUSm0KLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0zMTcgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zMTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzE3IFRKbQotKG9yaWdpbmFsKSAzMC45OTM2IFRqCi0tMzE3IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uLCkgMjYuODM5MiBUagotWzEgMCAwIDEgNDU1LjgwMSA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1NS44MDEgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ1NS44MDEgNTAyLjg5MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMi0wLjEpIDUzLjc5OCBUagotWzEgMCAwIDEgNTA5LjU5OSA1MDIuODkzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwOS41OTkgLTUwMi44OTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwOS41OTkgNTAyLjg5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tMTAyMyBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi03MiA0OTAuOTM4IFRkCi0oZGVjaXNpb24pIDMzLjIwNTMgVGoKLS0yMjIgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjIyIFRKbQotKG1hZGUpIDIxLjU3OSBUagotLTIyMiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjIxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyMiBUSm0KLShpbnRlcmVzdHMpIDMzLjIwNTMgVGoKLS0yMjIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMjIgVEptCi0oc3RhYmlsaXR5KSAzMi4xMDk1IFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjAxIFRKbQotKENyZWF0aW5nKSAzNC4zMTEyIFRqCi0tMjIyIFRKbQotKHlldCkgMTIuMTc0MyBUagotLTIyMiBUSm0KLShhbm90aGVyKSAyOS44Nzc4IFRqCi0tMjIyIFRKbQotKGluY29tcGF0aWJsZSkgNTIuMDI0NyBUagotLTIyMSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjIyIFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTIyMiBUSm0KLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0yMjIgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0yMjIgVEptCi0oY3JlYXRlKSAyMy43ODA3IFRqCi03MiA0NzguOTgzIFRkCi0oZnVydGhlcikgMjcuMTA4MiBUagotLTI1MCBUSm0KLShjb25mdXNpb24pIDM5LjI5MjUgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oZGlzcnVwdGlvbikgNDAuNDA4MyBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0odXNlcnMuKSAyMi45NjM4IFRqCi1bMSAwIDAgMSA3MiA0NzYuODI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00NjcuMTk0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NTcuMzk2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE5lKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVydGhlbGVzcywpIDM3LjM0OTggVGoKLS0yMzQgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjI5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjMwIFRKbQotKG5vdCkgMTIuNzMyMiBUagotLTIyOSBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjMwIFRKbQotKHBhaW5sZXNzKSAzMi4wOTk1IFRqCi0tMjI5IFRKbQotKGRlY2lzaW9uLikgMzUuNjk2IFRqCi0tNjA2IFRKbQotKERlKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVsb3BtZW50KSAzNy4wODA4IFRqCi0tMjMwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcmspIDEzLjI4MDEgVGoKLS0yMzAgVEptCi0oc2luY2UpIDIwLjQ3MzEgVGoKLS0yMjkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjMwIFRKbQotKHJlbGVhc2UpIDI3LjY1NjIgVGoKLS0yMjkgVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDQwNy4zMTcgNDU3LjM5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDcuMzE3IC00NTcuMzk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDcuMzE3IDQ1Ny4zOTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDItMC4xKSA1My43OTggVGoKLVsxIDAgMCAxIDQ2MS4xMTUgNDU3LjM5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjEuMTE1IC00NTcuMzk2XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjMuNDAyIDQ1Ny4zOTYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaW4pIDcuNzUwOSBUagotLTIzMCBUSm0KLShBdWd1c3QpIDI4Ljc4MiBUagotLTIyOSBUSm0KLSgxOTk3KSAxOS45MjUyIFRqCi0tMjMwIFRKbQotKGhhcykgMTMuMjgwMSBUagotNzIgNDQ1LjQ0MSBUZAotKHNobykgMTMuODM4MSBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yMjYgVEptCi0oY29tcGxlKSAyOS4zMjk5IFRqCi0xNSBUSm0KLSh4aXRpZXMpIDIxLjU4OSBUagotLTIyNiBUSm0KLShpbikgNy43NTA5IFRqCi0tMjI1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyNiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yMjYgVEptCi0oZm9ybWF0KSAyNi41NjAzIFRqCi0tMjI2IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjI2IFRKbQotKHNsbykgMTEuNjI2NCBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yMjUgVEptCi0oZG8pIDkuOTYyNiBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yMjYgVEptCi0oZGVjb21wcmVzc2lvbikgNTkuNzY1NiBUagotLTIyNiBUSm0KLShhbmQsKSAxNi44NzY2IFRqCi0tMjMxIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yMjYgVEptCi0ocmV0cm9zcGVjdCwpIDQxLjc3MzIgVGoKLS0yMzAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjI2IFRKbQotKHVubmVjZXNzYXJ5KSA0OC42ODcyIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjA0IFRKbQotKFRoZXNlKSAyMy43OTA3IFRqCi0tMjI2IFRKbQotKGFyZTopIDE0LjkzMzkgVGoKLVsxIDAgMCAxIDcyIDQ0My4yODRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOS4wNjEzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNDE0LjIyMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA0MTQuMjIyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNDE0LjIyMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC00MTQuMjIyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNDE0LjIyMiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGUpIDE1LjQ5MTggVGoKLS0yNjUgVEptCi0ocnVuLWxlbmd0aCkgNDEuNTA0MiBUagotLTI2NiBUSm0KLShlbmNvZGVyKSAzMS41MzE2IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjY5IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjY1IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjY1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NiBUSm0KLShcMDAycnN0KSAxNS41MDE4IFRqCi0tMjY1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI2NiBUSm0KLShjb21wcmVzc2lvbikgNTAuMzYwOSBUagotLTI2NSBUSm0KLSh0cmFuc2Zvcm1hdGlvbnMsKSA2NS4wMjU5IFRqCi0tMjY5IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjY1IFRKbQotKGVudGlyZWx5KSAzMC40MzU3IFRqCi0tMjY2IFRKbQotKGlycmVsZSkgMjEuMDIxMSBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbnQuKSAxNC42NjQ5IFRqCi0tNzExIFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTI2NiBUSm0KLShvcmlnaW5hbCkgMzAuOTkzNiBUagotODYuOTQ0IDQwMi4yNjcgVGQKLShwdXJwb3NlKSAzMS41NDE2IFRqCi0tMzAxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhcykgOC4yOTg4NSBUagotLTMwMSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMzAxIFRKbQotKHByb3RlY3QpIDI3LjY2NjEgVGoKLS0zMDEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAxIFRKbQotKHNvcnRpbmcpIDI3LjY3NjEgVGoKLS0zMDEgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMzAxIFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0zMDEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzAxIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5KSAxMi43MjIyIFRqCi0tMzAxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0KSAxNC45NDM5IFRqCi0tMzAxIFRKbQotKGNhc2UpIDE3LjE0NTYgVGoKLS0zMDEgVEptCi0oaW5wdXQ6KSAyMy4yNTI3IFRqCi0tNDEyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDEgVEptCi0oc3RyaW5nKSAyMi42OTQ4IFRqCi0tMzAxIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzAxIFRKbQotKHJlcGVhdGVkKSAzMy43NDMzIFRqCi0tMzAxIFRKbQotKHN5bWJvbHMuKSAzNS43MDYgVGoKLS05MjcgVEptCi0oQnV0KSAxNC4zOTYgVGoKLTg2Ljk0NCAzOTAuMzEyIFRkCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjc0IFRKbQotKHN0ZXBzKSAxOS45MjUyIFRqCi0tMjc1IFRKbQotKFE2YSkgMTYuNTk3NyBUagotLTI3NCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI3NCBUSm0KLShRNmIpIDE3LjE1NTYgVGoKLS0yNzUgVEptCi0oaW4pIDcuNzUwOSBUagotLTI3NCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNzQgVEptCi0ob3JpZ2luYWwpIDMwLjk5MzYgVGoKLS0yNzUgVEptCi0oQnVycm8pIDIzLjI0MjcgVGoKLTI1IFRKbQotKHdzLVdoZWVsKSA0MC4zODg0IFRqCi0xIFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjc1IFRKbQotKHRlY2huaWNhbCkgMzUuOTY1IFRqCi0tMjc0IFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTI3NCBUSm0KLShcKFNSQy0xMjRcKSkgNDMuNzI1OSBUagotLTI3NSBUSm0KLShzaG8pIDEzLjgzODEgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjc0IFRKbQotKGhvKSA5Ljk2MjYgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjc0IFRKbQotKHJlcGVhdHMpIDI4LjIxNDEgVGoKLS0yNzUgVEptCi0oY2FuKSAxMy44MjgxIFRqCi04Ni45NDQgMzc4LjM1NyBUZAotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGhhbmRsZWQpIDMxLjU0MTYgVGoKLS0yNTAgVEptCi0od2l0aG91dCkgMzAuNDQ1NyBUagotLTI1MCBUSm0KLShkaWYpIDExLjA2ODQgVGoKLTI1IFRKbQotKFwwMDJjdWx0eSkgMjUuNDY0NCBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKHNvcnRpbmcuKSAzMC4xNjY4IFRqCi1bMSAwIDAgMSAyNjkuNjE3IDM3OC4zNTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTk3LjYxNyAtMjEuNTg2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTM1Ni43N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSAzNTYuNzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAzNTYuNzddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtMzU2Ljc3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMzU2Ljc3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI5MyBUSm0KLShyYW5kb21pc2F0aW9uKSA1Ny4wMDYgVGoKLS0yOTMgVEptCi0obWVjaGFuaXNtKSA0NS4zNzk2IFRqCi0tMjkzIFRKbQotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjk0IFRKbQotKHJlYWxseSkgMjIuNjg0OCBUagotLTI5MyBUSm0KLShuZWVkKSAxOC44MDk0IFRqCi0tMjkzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTMgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yOTMgVEptCi0odGhlcmUuKSAyMi40MDU5IFRqCi0tODc5IFRKbQotKFVkaSkgMTQuOTQzOSBUagotLTI5NCBUSm0KLShNYW5iZXIpIDMwLjk4MzcgVGoKLS0yOTMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yOTMgVEptCi0oR2VuZSkgMjEuMDIxMSBUagotLTI5MyBUSm0KLShNeWVycykgMjUuNDU0NCBUagotLTI5MyBUSm0KLShwdWJsaXNoZWQpIDM4Ljc0NDYgVGoKLS0yOTQgVEptCi0oYSkgNC40MjMzOSBUagotLTI5MyBUSm0KLShzdWYpIDEyLjE3NDMgVGoKLTI1IFRKbQotKFwwMDJ4KSAxMC41MjA1IFRqCi04Ni45NDQgMzQ0LjgxNSBUZAotKGFycmF5KSAyMC40NjMyIFRqCi0tMjM4IFRKbQotKGNvbnN0cnVjdGlvbikgNDkuMjU1MSBUagotLTIzOSBUSm0KLShhbGdvcml0aG0pIDM4Ljc0NDYgVGoKLS0yMzggVEptCi0oYSkgNC40MjMzOSBUagotLTIzOCBUSm0KLShmZSkgNy43NDA5NCBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yMzkgVEptCi0oeWVhcnMpIDIxLjAyMTEgVGoKLS0yMzggVEptCi0oYmFjaywpIDIxLjMgVGoKLS0yNDEgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yMzggVEptCi0oY2FuKSAxMy44MjgxIFRqCi0tMjM4IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjM5IFRKbQotKGVtcGxvKSAyNC45MDY1IFRqCi0xMCBUSm0KLSh5ZWQpIDE0LjM4NiBUagotLTIzOCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjM4IFRKbQotKHNvcnQpIDE0Ljk0MzkgVGoKLS0yMzkgVEptCi0oYW4pIDkuNDA0NjkgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTIzOCBUSm0KLShibG9jaywpIDI0LjYyNzUgVGoKLS0yNDEgVEptCi0obm8pIDkuOTYyNiBUagotLTIzOCBUSm0KLShtYXR0ZXIpIDI1LjQ1NDQgVGoKLS0yMzggVEptCi0oaG8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yMzkgVEptCi0ocmVwZXRpdGkpIDI4LjIyNCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlLCkgNi45MTQwNCBUagotODYuOTQ0IDMzMi44NiBUZAotKGluKSA3Ljc1MDkgVGoKLS0yMjkgVEptCi0oT1woTikgMTcuNzAzNSBUagotLTIzMCBUSm0KLShsb2cpIDEyLjczMjIgVGoKLS0yMjkgVEptCi0oTlwpKSAxMC41MTA1IFRqCi0tMjMwIFRKbQotKHRpbWUuKSAyMC4yMDQyIFRqCi0tNjA2IFRKbQotKFN1YnNlcXVlbnQpIDQ1LjkzNzUgVGoKLS0yMzAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaykgMTMuMjgwMSBUagotLTIyOSBUSm0KLShieSkgOS45NjI2IFRqCi0tMjMwIFRKbQotKEspIDcuMTkzIFRqCi0xNSBUSm0KLSh1bmloaWspIDI1LjQ2NDQgVGoKLTEwIFRKbQotKG8pIDQuOTgxMyBUagotLTIyOSBUSm0KLShTYWRha2FuZSkgMzguMTc2NyBUagotLTIyOSBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yMzAgVEptCi0ocHJvZHVjZWQpIDM3LjA3MDggVGoKLS0yMjkgVEptCi0oYSkgNC40MjMzOSBUagotLTIzMCBUSm0KLShkZXJpKSAxNS40OTE4IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTI1IFRKbQotKGF0aSkgOS45NjI2IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yMjkgVEptCi0oT1woTikgMTcuNzAzNSBUagotLTIzMCBUSm0KLShcKGxvZykgMTYuMDQ5NyBUagotLTIyOSBUSm0KLShOXCleMlwpKSAyMy40ODE4IFRqCi0tMjMwIFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotODYuOTQ0IDMyMC45MDUgVGQKLSh3aGljaCkgMjQuMzQ4NiBUagotLTI1MCBUSm0KLSh1c3VhbGx5KSAyOC43ODIgVGoKLS0yNTAgVEptCi0ob3V0cGVyZm9ybXMpIDQ4LjY5NzIgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKE1hbmJlcikgMzAuOTgzNyBUagotMjAgVEptCi0oLU15ZXJzKSAyOC43NzIgVGoKLS0yNTAgVEptCi0oYWxnb3JpdGhtLikgNDEuMjM1MiBUagotWzEgMCAwIDEgMzE0LjE4OSAzMjAuOTA1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI0Mi4xODkgLTExLjc4ODNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTMwOS4xMTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAyOTkuMzE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEkpIDMuMzE3NTUgVGoKLS0yNDggVEptCi0oY291bGQpIDIyLjEzNjkgVGoKLS0yNDggVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI0OCBUSm0KLShjaGFuZ2VkKSAzMy4xOTU0IFRqCi0tMjQ4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDggVEptCi0oU2FkYWthbmUnKSA0MS40OTQyIFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjQ4IFRKbQotKGFsZ29yaXRobSwpIDQxLjIzNTIgVGoKLS0yNDkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjQ4IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNDggVEptCi0oXDAwMm5kKSAxNS41MDE4IFRqCi0tMjQ4IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMjQ4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDggVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0yNDggVEptCi0oc2xvKSAxMS42MjY0IFRqCi0yNSBUSm0KLSh3ZXIpIDE0LjkzMzkgVGoKLS0yNDggVEptCi0odGhhbikgMTcuMTU1NiBUagotWzEgMCAwIDEgMzkyLjQ0NCAyOTkuMzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM5Mi40NDQgLTI5OS4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM5Mi40NDQgMjk5LjMxOCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgNDIyLjMzMiAyOTkuMzE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQyMi4zMzIgLTI5OS4zMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQyMi4zMzIgMjk5LjMxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgnKSAzLjMxNzU1IFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi0tMjQ4IFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhpc3RpbmcpIDI3LjEyODIgVGoKLS0yNDggVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjQ4IFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI0OCBUSm0KLShtb3N0KSAxOS4zNzczIFRqCi04Ni45NDQgMjg3LjM2MyBUZAotKGlucHV0cywpIDI2Ljg0OTIgVGoKLS0zNzAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0zNDUgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ2IFRKbQotKHJhbmRvbWlzYXRpb24pIDU3LjAwNiBUagotLTM0NiBUSm0KLShtZWNoYW5pc20pIDQ1LjM3OTYgVGoKLS0zNDUgVEptCi0ocHJvdGVjdHMpIDMxLjU0MTYgVGoKLS0zNDYgVEptCi0oYWRlcXVhdGVseSkgNDMuMTU4IFRqCi0tMzQ1IFRKbQotKGFnKSA5LjQwNDY5IFRqCi01IFRKbQotKGFpbnN0KSAxOC44MTk0IFRqCi0tMzQ2IFRKbQotKGJhZCkgMTQuMzg2IFRqCi0tMzQ2IFRKbQotKGNhc2VzLikgMjMuNTExNyBUagotLTExOTQgVEptCi0oSSkgMy4zMTc1NSBUagotLTM0NSBUSm0KLShkaWRuJykgMjEuMDMxIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zNDYgVEptCi0odGhpbmspIDIwLjQ4MzEgVGoKLS0zNDYgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zNDUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzQ2IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zNDYgVEptCi0oZ29vZCkgMTkuOTI1MiBUagotODYuOTQ0IDI3NS40MDggVGQKLSh0cmFkZW9mKSAyOC4yMTQxIFRqCi0yNSBUSm0KLShmKSAzLjMxNzU1IFRqCi0tMjYyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjEgVEptCi0obWFrKSAxNy4xNTU2IFRqCi0xMCBUSm0KLShlLikgNi45MTQwNCBUagotLTY5MCBUSm0KLShQKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShhcnRseSkgMTguMjYxNCBUagotLTI2MiBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNjEgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjIgVEptCi0oZHVlKSAxNC4zODYgVGoKLS0yNjEgVEptCi0odG8pIDcuNzUwOSBUagotLTI2MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWN0KSAxMS42MTY0IFRqCi0tMjYxIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNjIgVEptCi0oSSkgMy4zMTc1NSBUagotLTI2MSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0yNjIgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjYyIFRKbQotKFwwMDNvb2RlZCkgMjkuODg3OCBUagotLTI2MSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMjYyIFRKbQotKGVtYWlsKSAyMi4xMzY5IFRqCi0tMjYxIFRKbQotKGNvbXBsYWludHMpIDQzLjcyNTkgVGoKLS0yNjIgVEptCi0oYWJvdXQpIDIyLjEzNjkgVGoKLVsxIDAgMCAxIDQ3OS41NTcgMjc1LjQwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzkuNTU3IC0yNzUuNDA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NzkuNTU3IDI3NS40MDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDItMC4xKSA1My43OTggVGoKLVsxIDAgMCAxIDUzMy4zNTUgMjc1LjQwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MzMuMzU1IC0yNzUuNDA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MzMuMzU1IDI3NS40MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oJykgMy4zMTc1NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotODYuOTQ0IDI2My40NTMgVGQKLShwZXJmb3JtYW5jZSkgNTAuMzQxIFRqCi0tMjUwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0ocmVwZXRpdGkpIDI4LjIyNCBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGRhdGEsKSAxOS4wODgzIFRqCi0tMjUwIFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMjUwIFRKbQotKHBlcmhhcHMpIDMwLjk4MzcgVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oaXNuJykgMTQuOTQzOSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0ocHJvYmxlbSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNTAgVEptCi0ocmVhbCkgMTQuOTMzOSBUagotLTI1MCBUSm0KLShpbnB1dHMuKSAyNi44NDkyIFRqCi1bMSAwIDAgMSA3MiAyNjEuMjk2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNTEuNjY0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgMjQxLjg2NiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShQcm9iYWJseSkgMzUuOTc0OSBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODggVEptCi0oYmVzdCkgMTYuMDQ5NyBUagotLTI4OSBUSm0KLShsb25nLXRlcm0pIDM5LjI5MjUgVGoKLS0yODkgVEptCi0oc29sdXRpb24sKSAzNC42MDAxIFRqCi0tMjk4IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjg5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI4OSBUSm0KLShvbmUpIDE0LjM4NiBUagotLTI4OCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjg5IFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yODkgVEptCi0oaW5jb3Jwb3JhdGVkKSA1MC4zNTEgVGoKLS0yODggVEptCi0oaW50bykgMTUuNTAxOCBUagotLTI4OSBUSm0KLSgwLjkuNSkgMTkuOTI1MiBUagotLTI4OSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4OCBUSm0KLShhYm8pIDE0LjM4NiBUagotMTUgVEptCi0odikgNC45ODEzIFRqCi0xNCBUSm0KLShlLCkgNi45MTQwNCBUagotLTI5OCBUSm0KLShpcykgNi42NDUwNSBUagotLTI4OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjg4IFRKbQotKHVzZSkgMTMuMjgwMSBUagotLTI4OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yODkgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGlzdGluZykgMjcuMTI4MiBUagotODYuOTQ0IDIyOS45MTEgVGQKLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tNDUxIFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTQ1MiBUSm0KLShpbml0aWFsbHkpIDMxLjAwMzYgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS01MDEgVEptCi0oYW5kKSAxNC4zODYgVGoKLS00NTIgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS00NTEgVEptCi0oYmFjaykgMTguODA5NCBUagotLTQ1MiBUSm0KLSh0bykgNy43NTA5IFRqCi0tNDUxIFRKbQotKGEpIDQuNDIzMzkgVGoKLS00NTEgVEptCi0oT1woTikgMTcuNzAzNSBUagotLTQ1MiBUSm0KLShcKGxvZykgMTYuMDQ5NyBUagotLTQ1MSBUSm0KLShOXCleMlwpKSAyMy40ODE4IFRqCi0tNDUxIFRKbQotKGFsZ29yaXRobSkgMzguNzQ0NiBUagotLTQ1MiBUSm0KLShpZikgNi4wODcxNSBUagotLTQ1MSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS00NTIgVEptCi0oc3RhbmRhcmQpIDMzLjc1MzMgVGoKLS00NTEgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tNDUxIFRKbQotKGdldHMpIDE2LjA0OTcgVGoKLS00NTIgVEptCi0oaW50bykgMTUuNTAxOCBUagotODYuOTQ0IDIxNy45NTYgVGQKLShkaWYpIDExLjA2ODQgVGoKLTI1IFRKbQotKFwwMDJjdWx0aWVzLikgMzQuMDQyMiBUagotWzEgMCAwIDEgNzIgMjE3Ljg1Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTIxLjQ4NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0xOTYuMzY5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDE5Ni4zNjkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAxOTYuMzY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTE5Ni4zNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAxOTYuMzY5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTI5OSBUSm0KLShjb21wcmVzc2VkKSA0Ny4wMzM0IFRqCi0tMjk5IFRKbQotKFwwMDJsZSkgMTIuNzMyMiBUagotLTI5OSBUSm0KLShmb3JtYXQpIDI2LjU2MDMgVGoKLS0yOTkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMzAwIFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyKSA3Ljc0MDk0IFRqCi0tMjk5IFRKbQotKGRlc2lnbmVkKSAzNS40MTcgVGoKLS0yOTkgVEptCi0odG8pIDcuNzUwOSBUagotLTI5OSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI5OSBUSm0KLShoYW5kbGVkKSAzMS41NDE2IFRqCi0tMjk5IFRKbQotKGJ5KSA5Ljk2MjYgVGoKLS0yOTkgVEptCi0oYSkgNC40MjMzOSBUagotLTI5OSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzEyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjk5IFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yOTkgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI5OSBUSm0KLShoYWQpIDE0LjM4NiBUagotLTI5OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk5IFRKbQotKGp1bXApIDIwLjQ4MzEgVGoKLS0zMDAgVEptCi0odGhvdWdoKSAyNy42NzYxIFRqCi0tMjk5IFRKbQotKHNvbWUpIDIxLjAzMSBUagotODYuOTQ0IDE4NC40MTQgVGQKLShob29wcykgMjMuODAwNyBUagotLTI3OCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjc3IFRKbQotKHByb2R1Y2UpIDMyLjA4OTUgVGoKLS0yNzggVEptCi0oYW4pIDkuNDA0NjkgVGoKLS0yNzggVEptCi0oZWYpIDcuNzQwOTQgVGoKLTI1IFRKbQotKFwwMDJjaWVudCkgMjQuOTA2NSBUagotLTI3NyBUSm0KLShpbXBsZW1lbnRhdGlvbikgNjIuNTQ1MiBUagotLTI3OCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3OCBUSm0KLShkZWNvbXByZXNzaW9uLikgNjIuMjU2MyBUagotLTc4NiBUSm0KLShJdCcpIDkuNDA0NjkgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yNzggVEptCi0oYSkgNC40MjMzOSBUagotLTI3NyBUSm0KLShiaXQpIDEwLjUyMDUgVGoKLS0yNzggVEptCi0oaGFpcnkpIDIwLjQ3MzEgVGoKLTY1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS03ODYgVEptCi0oVCkgNi4wODcxNSBUagotMzUgVEptCi0ocnkpIDguMjk4ODUgVGoKLS0yNzggVEptCi0ocGFzc2luZykgMjkuODg3OCBUagotWzEgMCAwIDEgNDY4LjI2OSAxODQuNDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OC4yNjkgLTE4NC40MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2OC4yNjkgMTg0LjQxNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShkZWNvbXByZXNzLmMpIDcxLjczMDcgVGoKLVsxIDAgMCAxIDU0MCAxODQuNDE0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtMTg0LjQxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDE3Mi40NTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odGhyb3VnaCkgMzAuOTkzNiBUagotLTI2OCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNjggVEptCi0oQykgNi42NDUwNSBUagotLTI2OCBUSm0KLShwcmVwcm9jZXNzb3IpIDUwLjg5ODkgVGoKLS0yNjkgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNjggVEptCi0oeW91JykgMTguMjYxNCBUagotMTAgVEptCi0obGwpIDUuNTM5MjEgVGoKLS0yNjggVEptCi0oc2VlKSAxMi43MjIyIFRqCi0tMjY4IFRKbQotKHdoYXQpIDE5LjM2NzMgVGoKLS0yNjggVEptCi0oSSkgMy4zMTc1NSBUagotLTI2OCBUSm0KLShtZWFuLikgMjQuMDY5NiBUagotLTcyOSBUSm0KLShNdWNoKSAyMy4yNDI3IFRqCi0tMjY4IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjY5IFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI2OCBUSm0KLShjb21wbGUpIDI5LjMyOTkgVGoKLTE1IFRKbQotKHhpdHkpIDE1LjUwMTggVGoKLS0yNjggVEptCi0oY291bGQpIDIyLjEzNjkgVGoKLS0yNjggVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI2OCBUSm0KLShiZWVuKSAxOC44MDk0IFRqCi0tMjY4IFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob2lkZWQpIDIyLjEzNjkgVGoKLS0yNjkgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNjggVEptCi0odGhlKSAxMi4xNzQzIFRqCi04Ni45NDQgMTYwLjUwMyBUZAotKGNvbXByZXNzZWQpIDQ3LjAzMzQgVGoKLS0yNTAgVEptCi0oc2l6ZSkgMTUuNDkxOCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShlYWNoKSAxOC4yNTE1IFRqCi0tMjUwIFRKbQotKGJsb2NrKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHJlY29yZGVkKSAzNC44NDkyIFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKGRhdGEpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0oc3RyZWFtLikgMjkuMDUwOSBUagotWzEgMCAwIDEgMzY4Ljc1NCAxNjAuNTAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5Ni43NTQgLTIxLjU4NjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC0xMzguOTE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDEzOC45MTcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCAxMzguOTE3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTEzOC45MTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCAxMzguOTE3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEFuKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKEFkbGVyKSAyMi42ODQ4IFRqCi0yMCBUSm0KLSgtMzIpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oY2hlY2tzdW0sKSA0Mi4zMzExIFRqCi0tMjUwIFRKbQotKHJhdGhlcikgMjMuMjMyOCBUagotLTI1MCBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oQ1JDMzIpIDI5Ljg5NzggVGoKLS0yNTAgVEptCi0oY2hlY2tzdW0sKSA0Mi4zMzExIFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvdWxkKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFzdGVyKSAxOC44MDk0IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oY29tcHV0ZS4pIDM2LjgwMTggVGoKLVsxIDAgMCAxIDQyNC45MzQgMTM4LjkxN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTIuOTM0IC0xMS43ODgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xMjcuMTI4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxMTcuMzMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSXQpIDYuMDg3MTUgVGoKLS0zNDkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG91bGQpIDE3LjcxMzUgVGoKLS0zNDkgVEptCi0oYmUpIDkuNDA0NjkgVGoKLS0zNDkgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlyKSAxMC41MTA1IFRqCi0tMzQ4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zNDkgVEptCi0oc2F5KSAxMy4yODAxIFRqCi0tMzQ5IFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0zNDkgVEptCi0odGhlKSAxMi4xNzQzIFRqCi1bMSAwIDAgMSAyMDEuOTc5IDExNy4zM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDEuOTc5IC0xMTcuMzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIwMS45NzkgMTE3LjMzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyMzEuODY3IDExNy4zM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzEuODY3IC0xMTcuMzNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIzNS4zNDIgMTE3LjMzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGZvcm1hdCkgMjYuNTYwMyBUagotLTM0OSBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0oYXMpIDguMjk4ODUgVGoKLS0zNDkgVEptCi0oZnJvemVuKSAyNS40NDQ1IFRqCi0tMzQ4IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTM0OSBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMzQ5IFRKbQotKHByb3Blcmx5KSAzMy43NTMzIFRqCi0tMzQ5IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMzQ5IFRKbQotKGZ1bGx5KSAxOC44MTk0IFRqCi0tMzQ5IFRKbQotKHVuZGVyc3Rvb2QpIDQ0LjI3MzggVGoKLS0zNDggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzQ5IFRKbQotKHBlcmZvcm1hbmNlKSA1MC4zNDEgVGoKLTcyIDEwNS4zNzUgVGQKLShjb25zZXF1ZW5jZXMpIDU0Ljc3NDQgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oZG9pbmcpIDIyLjY5NDggVGoKLS0yNTAgVEptCi0oc28uKSAxMS4zNDc0IFRqCi1bMSAwIDAgMSA3MiAxMDMuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC05My41ODY3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA4My43ODgzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEltcHJvKSAyNC4zNDg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVtZW50cykgMjguMjI0IFRqCi0tMjUwIFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKGFibGUpIDE2LjU5NzcgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShpbmNvcnBvcmF0ZSkgNDUuMzY5NyBUagotLTI1MCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKDAuOS4wLCkgMjIuNDE1OSBUagotLTI1MCBUSm0KLShkZXNwaXRlKSAyOC4yMjQgVGoKLS0yNTAgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oc2FtZSkgMjAuNDczMSBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oZm9ybWF0LCkgMjkuMDUwOSBUagotLTI1MCBUSm0KLShhcmU6KSAxNC45MzM5IFRqCi1bMSAwIDAgMSA3MiA4MS42MzE1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMzAuNzc5Nl0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxNCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzMSkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVQYWdlOiAzNSAzNQotJSVCZWdpblBhZ2VTZXR1cAotJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Ci1wZGZTdGFydFBhZ2UKLTAgMCA2MTIgNzkyIHJlIFcKLSUlRW5kUGFnZVNldHVwCi1bXSAwIGQKLTEgaQotMCBqCi0wIEoKLTEwIE0KLTEgdwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotZmFsc2Ugb3AKLWZhbHNlIE9QCi0wIDAgNjEyIDc5MiByZQotVwotcQotWzEgMCAwIDEgNzIgNzQxLjU1NF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDE0LjQ0NTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxODcuMTk3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgLTYuODU0MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTE2LjMyOCAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM4Mi40IC03NDkuMjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTguNzI4IDc0OS4yNDUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oTWlzY2VsbGFuZWEpIDQ4LjEzOTMgVGoKLVsxIDAgMCAxIDI2Ni4wNzEgNzQ5LjE0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDI4MC43OTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NzIuOTc0IC03LjA5MzZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0wLjQ5ODFdIGNtCi1xCi1bXSAwIGQKLTAgSgotMC40OTgxIHcKLTAgMC4yNDkxIG0KLTQ3NS40NjUgMC4yNDkxIGwKLVMKLVEKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ3OS4yNTEgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0zMS41MTY4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNzEwLjAzN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNzEwLjAzN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNzEwLjAzNyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShTaW5nbGUpIDI1LjQ2NDQgVGoKLS0yMDIgVEptCi0oYXJyYXkpIDIwLjQ2MzIgVGoKLS0yMDEgVEptCi0oaW1wbGVtZW50YXRpb24pIDYyLjU0NTIgVGoKLS0yMDIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMDIgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjAxIFRKbQotKGluKSA3Ljc1MDkgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzZSkgMTYuMDM5OCBUagotLTIwMiBUSm0KLShCV1QpIDIyLjEzNjkgVGoKLTc0IFRKbQotKC4pIDIuNDkwNjUgVGoKLS00MDMgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTIwMiBUSm0KLShzaWduaVwwMDJjYW50bHkpIDQ5LjI2NTEgVGoKLS0yMDEgVEptCi0oc3BlZWRzKSAyNi41NjAzIFRqCi0tMjAyIFRKbQotKHVwKSA5Ljk2MjYgVGoKLS0yMDIgVEptCi0oZGVjb21wcmVzc2lvbiwpIDYyLjI1NjMgVGoKLS0yMTEgVEptCi0ocHJlc3VtYWJseSkgNDYuNDg1NSBUagotLTIwMiBUSm0KLShiZWNhdXNlKSAzMS41MzE2IFRqCi04Ni45NDQgNjk4LjA4MiBUZAotKGl0KSA1LjUzOTIxIFRqCi0tMjUwIFRKbQotKHJlZHVjZXMpIDMwLjQyNTggVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKG51bWJlcikgMzAuNDM1NyBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShjYWNoZSkgMjIuNjc0OSBUagotLTI1MCBUSm0KLShtaXNzZXMuKSAyOS4wNjA5IFRqCi1bMSAwIDAgMSAyNDAuNDk2IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTY4LjQ5NiAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTY3Ni4xNjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNjc2LjE2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDY3Ni4xNjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNjc2LjE2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDY3Ni4xNjQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0oYXN0ZXIpIDE4LjgwOTQgVGoKLS0zMTQgVEptCi0oaW4pIDcuNzUwOSBUagotNDAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlcnNlKSAxNi4wMzk4IFRqCi0tMzE1IFRKbQotKE1URikgMjAuNDgzMSBUagotLTMxNCBUSm0KLSh0cmFuc2Zvcm0pIDM4LjczNDYgVGoKLS0zMTUgVEptCi0oZm9yKSAxMS42MTY0IFRqCi0tMzE0IFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLS0zMTUgVEptCi0oTVRGKSAyMC40ODMxIFRqCi0tMzE0IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMuKSAyMi45NjM4IFRqCi0tNTA0IFRKbQotKFRoZSkgMTUuNDkxOCBUagotLTMxNCBUSm0KLShuZSkgOS40MDQ2OSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0zMTQgVEptCi0oaW1wbGVtZW50YXRpb24pIDYyLjU0NTIgVGoKLS0zMTUgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0zMTQgVEptCi0oYmFzZWQpIDIyLjY4NDggVGoKLS0zMTUgVEptCi0ob24pIDkuOTYyNiBUagotLTMxNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTUgVEptCi0obm90aW9uKSAyNS40NjQ0IFRqCi0tMzE0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzE1IFRKbQotKHNsaWRpbmcpIDI3LjEyODIgVGoKLTg2Ljk0NCA2NjQuMjA5IFRkCi0oYmxvY2tzKSAyNi4wMTIzIFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWx1ZXMuKSAyMi45NjM4IFRqCi1bMSAwIDAgMSAxNTMuOTMyIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODEuOTMyMSAtMjEuOTE3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDY0Mi4yOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDItMC45LjApIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDE1Mi42OTcgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTIuNjk3IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTUuNDEyIDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0obm8pIDkuOTYyNiBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLS0yNzIgVEptCi0ocmVhZHMpIDIxLjAyMTEgVGoKLS0yNzMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNzIgVEptCi0od3JpdGVzKSAyNC4zNDg2IFRqCi0tMjczIFRKbQotKFwwMDJsZXMpIDE2LjYwNzcgVGoKLS0yNzIgVEptCi0od2l0aCkgMTcuNzEzNSBUagotWzEgMCAwIDEgMjgyLjY4IDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjgyLjY4IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yODIuNjggNjQyLjI5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmcmVhZCkgMjkuODg3OCBUagotWzEgMCAwIDEgMzEyLjU2OCA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMxMi41NjggLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMxNS4yODIgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotWzEgMCAwIDEgMzMyLjM4MyA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzMi4zODMgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMzMi4zODMgNjQyLjI5MSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShmd3JpdGUpIDM1Ljg2NTQgVGoKLVsxIDAgMCAxIDM2OC4yNDggNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjguMjQ4IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjguMjQ4IDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOykgMi43Njk2IFRqCi0tMjg0IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjcyIFRKbQotKDAuMSkgMTIuNDUzMyBUagotLTI3MyBUSm0KLSh1c2VkKSAxOC4yNjE0IFRqCi1bMSAwIDAgMSA0NDEuODgyIDY0Mi4yOTFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDQxLjg4MiAtNjQyLjI5MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDQxLjg4MiA2NDIuMjkxIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKHB1dGMpIDIzLjkxMDIgVGoKLVsxIDAgMCAxIDQ2NS43OTIgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjUuNzkyIC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjguNTA3IDY0Mi4yOTEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDQ4NS42MDcgNjQyLjI5MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00ODUuNjA3IC02NDIuMjkxXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00ODUuNjA3IDY0Mi4yOTEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ2V0YykgMjMuOTEwMiBUagotWzEgMCAwIDEgNTA5LjUxNyA2NDIuMjkxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwOS41MTcgLTY0Mi4yOTFdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwOS41MTcgNjQyLjI5MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSguKSAyLjQ5MDY1IFRqCi0tNzU1IFRKbQotKER1aCEpIDIwLjQ3MzEgVGoKLTg2Ljk0NCA2MzAuMzM2IFRkCi0oVykgOS40MDQ2OSBUagotODAgVEptCi0oZWxsLCkgMTIuNDUzMyBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0obGkpIDUuNTM5MjEgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI1MCBUSm0KLShsZWFybi4pIDIyLjQwNTkgVGoKLVsxIDAgMCAxIDE4NC4yNDggNjMwLjMzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMTIuMjQ4IC0xMi4xMTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02MTguMjE3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MDguNDE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKEZ1cnRoZXIpIDI5LjMyOTkgVGoKLS0zMDQgVEptCi0oYWhlYWQsKSAyNS43MjM0IFRqCi0tMzE4IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzA1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvdWxkKSAxNy43MTM1IFRqCi0tMzA0IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzA1IFRKbQotKG5pY2UpIDE2LjU5NzcgVGoKLS0zMDQgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNSBUSm0KLShiZSkgOS40MDQ2OSBUagotLTMwNCBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMzA0IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zMDUgVEptCi0oZG8pIDkuOTYyNiBUagotLTMwNCBUSm0KLShyYW5kb20pIDMwLjQzNTcgVGoKLS0zMDUgVEptCi0oYWNjZXNzKSAyNS40NDQ1IFRqCi0tMzA0IFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0zMDUgVEptCi0oXDAwMmxlcy4pIDE5LjA5ODMgVGoKLS05NDYgVEptCi0oVGhpcykgMTcuNzEzNSBUagotLTMwNSBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMzA0IFRKbQotKHJlcXVpcmUpIDI4LjIxNDEgVGoKLS0zMDQgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMzA1IFRKbQotKGNhcmVmdWwpIDI3LjY1NjIgVGoKLS0zMDQgVEptCi0oZGVzaWduKSAyNi4wMTIzIFRqCi0tMzA1IFRKbQotKG9mKSA4LjI5ODg1IFRqCi03MiA1OTYuNDYzIFRkCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oZm9ybWF0cy4pIDMyLjkyNjQgVGoKLVsxIDAgMCAxIDcyIDU5NC4zMDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU4NC4zNDRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2MS43MSBUZAotL0YxMjJfMCAyMC42NTg1IFRmCi0oNC4yLikgMzQuNDU4NCBUagotLTI3OCBUSm0KLShQKSAxMy43NzkyIFRqCi00MCBUSm0KLShvcikgMjAuNjU4NSBUagotLTIwIFRKbQotKHRhYmlsaXR5KSA2Ni41ODIzIFRqCi0tMjc4IFRKbQotKGlzc3VlcykgNjQuMzA5OSBUagotWzEgMCAwIDEgNzIgNTU3LjQzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTQ3LjQ3Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTM5Ljc5MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShBZnRlcikgMjEuMDIxMSBUagotLTI1MCBUSm0KLShzb21lKSAyMS4wMzEgVGoKLS0yNTAgVEptCi0oY29uc2lkZXJhdGlvbiwpIDU2LjE2OTEgVGoKLS0yNTAgVEptCi0oSSkgMy4zMTc1NSBUagotLTI1MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGRlY2lkZWQpIDMwLjk4MzcgVGoKLS0yNTAgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odXNlKSAxMy4yODAxIFRqCi0tMjUwIFRKbQotKEdOVSkgMjEuNTc5IFRqCi1bMSAwIDAgMSAzMDMuMjMxIDUzOS43OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzAzLjIzMSAtNTM5Ljc5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzAzLjIzMSA1MzkuNzkzIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF1dG9jb25mKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSAzNTEuMDUyIDUzOS43OTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzUxLjA1MiAtNTM5Ljc5M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzUzLjU0MiA1MzkuNzkzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oY29uXDAwMmd1cmUpIDM3LjYyODcgVGoKLS0yNTAgVEptCi0oMC45LjUpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oMS4wLikgMTQuOTQzOSBUagotWzEgMCAwIDEgNzIgNTM3LjYzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNTI3LjY3M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTE3Ljg3NSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShhdXRvY29uZikgNDcuODIwNSBUagotWzEgMCAwIDEgMTE5LjgyMSA1MTcuODc1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExOS44MjEgLTUxNy44NzVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExOS44MjEgNTE3Ljg3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tNTAyIFRKbQotKGFkbWlyYWJsZSkgMzkuODQwNCBUagotLTQ1MiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTQ1MiBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob25kZXJmdWwpIDMzLjc1MzMgVGoKLS00NTIgVEptCi0odGhvdWdoKSAyNy42NzYxIFRqCi0tNDUyIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tNDUyIFRKbQotKGlzLCkgOS4xMzU3IFRqCi0tNTAyIFRKbQotKG1haW5seSkgMjcuNjc2MSBUagotLTQ1MiBUSm0KLShhc3Npc3RzKSAyNS40NjQ0IFRqCi0tNDUyIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS00NTIgVEptCi0ocG9ydGFiaWxpdHkpIDQxLjUxNDIgVGoKLS00NTIgVEptCi0ocHJvYmxlbXMpIDM3LjA4MDggVGoKLS00NTIgVEptCi0oYmV0d2VlbikgMzMuMTk1NCBUagotLTQ1MiBUSm0KLShVbml4LWxpaykgMzMuNzYzMyBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotNzIgNTA1LjkyIFRkCi0ocGxhdGZvcm1zLikgNDAuNjc3MyBUagotLTEzOTggVEptCi0oQnV0KSAxNC4zOTYgVGoKLVsxIDAgMCAxIDE0NC43ODQgNTA1LjkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0NC43ODQgLTUwNS45Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ0Ljc4NCA1MDUuOTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE3NC42NzIgNTA1LjkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE3NC42NzIgLTUwNS45Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTc4LjQ1NSA1MDUuOTIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZG9lc24nKSAyNi41NjAzIFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0zODAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTM3OSBUSm0KLShtdWNoKSAyMi4xMzY5IFRqCi0tMzgwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc5IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheSkgOS40MDQ2OSBUagotLTM4MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTM4MCBUSm0KLShwb3J0YWJpbGl0eSkgNDEuNTE0MiBUagotLTM3OSBUSm0KLShwcm9ibGVtcykgMzcuMDgwOCBUagotLTM4MCBUSm0KLShvbikgOS45NjI2IFRqCi0tMzgwIFRKbQotKFVuaXg7KSAyMi42OTQ4IFRqCi0tNDQ0IFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLS0zODAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0zODAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzc5IFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oXDAwMmN1bHRpZXMpIDMxLjU1MTYgVGoKLTcyIDQ5My45NjQgVGQKLShhcHBlYXIpIDI2LjU1MDMgVGoKLS0yOTcgVEptCi0od2hlbikgMjEuNTc5IFRqCi0tMjk2IFRKbQotKHBvKSA5Ljk2MjYgVGoKLS0xIFRKbQotKHIpIDMuMzE3NTUgVGoKLTEgVEptCi0odGluZykgMTUuNTAxOCBUagotLTI5NyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjk3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NyBUSm0KLShNYWMsKSAyMC4xOTQyIFRqCi0tMzA4IFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMjk3IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yOTcgVEptCi0oTWljcm9zb2Z0JykgNDIuNjEgVGoKLTU1IFRKbQotKHMpIDMuODc1NDUgVGoKLS0yOTYgVEptCi0ob3BlcmF0aW5nKSAzNy42Mjg3IFRqCi0tMjk3IFRKbQotKHN5c3RlbXMuKSAzNC4wNDIyIFRqCi1bMSAwIDAgMSAzNjEuMzM5IDQ5My45NjRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzYxLjMzOSAtNDkzLjk2NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzYxLjMzOSA0OTMuOTY0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGF1dG9jb25mKSA0Ny44MjA1IFRqCi1bMSAwIDAgMSA0MDkuMTYgNDkzLjk2NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDkuMTYgLTQ5My45NjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQxMi4xMTYgNDkzLjk2NCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkb2VzbicpIDI2LjU2MDMgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTI5NyBUSm0KLShoZWxwKSAxNy4xNTU2IFRqCi0tMjk2IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yOTcgVEptCi0odGhvc2UpIDIxLjAzMSBUagotLTI5NyBUSm0KLShjYXNlcywpIDIzLjUxMTcgVGoKLS0zMDggVEptCi0oYW5kKSAxNC4zODYgVGoKLTcyIDQ4Mi4wMDkgVGQKLShicmluZ3MpIDI0LjkwNjUgVGoKLS0yNTAgVEptCi0oaW4pIDcuNzUwOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHdob2xlKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKGxvYWQpIDE3LjE1NTYgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi0tMjUwIFRKbQotKGNvbXBsZSkgMjkuMzI5OSBUagotMTUgVEptCi0oeGl0eSkgMTUuNTAxOCBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNDc5Ljg1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDY5Ljg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NjAuMDkxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE1vc3QpIDIwLjQ4MzEgVGoKLS0zOTIgVEptCi0ocGVvcGxlKSAyNi41NjAzIFRqCi0tMzkyIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTM5MyBUSm0KLShiZSkgOS40MDQ2OSBUagotLTM5MiBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMzkyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zOTIgVEptCi0oY29tcGlsZSkgMzIuMDk5NSBUagotLTM5MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zOTIgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTM5MiBUSm0KLShhbmQpIDE0LjM4NiBUagotLTM5MiBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMzkzIFRKbQotKHVuZGVyKSAyMi42ODQ4IFRqCi0tMzkyIFRKbQotKFVuaXgpIDE5LjkyNTIgVGoKLS0zOTIgVEptCi0oc3RyYWlnaHQpIDI5Ljg4NzggVGoKLS0zOTIgVEptCi0ob3V0LW9mLXRoZS1ib3gsKSA2MC41OTI1IFRqCi0tNDI4IFRKbQotKHNvKSA4Ljg1Njc1IFRqCi0tMzkyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0zOTMgVEptCi0oc3BlYWssKSAyNS4xNzU1IFRqCi03MiA0NDguMTM2IFRkCi0oZXNwZWNpYWxseSkgMzkuODQwNCBUagotLTI1MCBUSm0KLShpZikgNi4wODcxNSBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9uKSAyNC4zNDg2IFRqCi0tMjUwIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKEdOVSkgMjEuNTc5IFRqCi0tMjUwIFRKbQotKEMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlLikgMjkuMDUwOSBUagotWzEgMCAwIDEgNzIgNDQ1Ljk3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM2LjAxN10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDI2LjIxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGVyZSkgMjMuMjMyOCBUagotLTI1OSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNTggVEptCi0oYSkgNC40MjMzOSBUagotLTI1OSBUSm0KLShjb3VwbGUpIDI2LjU2MDMgVGoKLS0yNTggVEptCi0ob2YpIDguMjk4ODUgVGoKLVsxIDAgMCAxIDE1OS41NjEgNDI2LjIxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNTkuNTYxIC00MjYuMjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNTkuNTYxIDQyNi4yMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oX19pbmxpbmVfXykgNTkuNzc1NiBUagotWzEgMCAwIDEgMjE5LjMzNyA0MjYuMjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTIxOS4zMzcgLTQyNi4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTIyMS45MTMgNDI2LjIxOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShkaXJlY3RpKSAyNS40NTQ0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjU5IFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjU5IFRKbQotKGNvZGUuKSAyMS4zIFRqCi0tNjcxIFRKbQotKEdOVSkgMjEuNTc5IFRqCi0tMjU5IFRKbQotKEMpIDYuNjQ1MDUgVGoKLS0yNTggVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDM1Mi41ODcgNDI2LjIxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNTIuNTg3IC00MjYuMjE4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNTIuNTg3IDQyNi4yMTggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ2NjKSAxNy45MzI3IFRqCi1bMSAwIDAgMSAzNzAuNTIgNDI2LjIxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNzAuNTIgLTQyNi4yMThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM3MC41MiA0MjYuMjE4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwpKSAzLjMxNzU1IFRqCi0tMjU5IFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTI1OCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1OSBUSm0KLShhYmxlKSAxNi41OTc3IFRqCi0tMjU4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTkgVEptCi0oaGFuZGxlKSAyNi41NjAzIFRqCi0tMjU5IFRKbQotKHRoZW0uKSAyMi40MTU5IFRqCi0tNjcxIFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjU5IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKHJlKSA3Ljc0MDk0IFRqCi03MiA0MTQuMjYzIFRkCi0obm90KSAxMi43MzIyIFRqCi0tMjc5IFRKbQotKHVzaW5nKSAyMS41ODkgVGoKLS0yNzkgVEptCi0oR05VKSAyMS41NzkgVGoKLS0yNzkgVEptCi0oQywpIDkuMTM1NyBUagotLTI3OSBUSm0KLSh5b3VyKSAxOC4yNjE0IFRqCi0tMjc5IFRKbQotKEMpIDYuNjQ1MDUgVGoKLS0yNzkgVEptCi0oY29tcGlsZXIpIDM1LjQxNyBUagotLTI3OSBUSm0KLShzaG91bGRuJykgMzQuODY5MSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjc5IFRKbQotKHNlZSkgMTIuNzIyMiBUagotLTI3OSBUSm0KLSh0aGVtKSAxOS45MjUyIFRqCi0tMjc5IFRKbQotKGF0KSA3LjE5MyBUagotLTI3OSBUSm0KLShhbGwuKSAxMi40NTMzIFRqCi0tNzk0IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjc5IFRKbQotKHlvdXIpIDE4LjI2MTQgVGoKLS0yNzkgVEptCi0oY29tcGlsZXIpIDM1LjQxNyBUagotLTI3OSBUSm0KLShkb2VzLCkgMjAuNzUyMSBUagotLTI4NiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0yNzkgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjc5IFRKbQotKHJlYXNvbiwpIDI4LjQ5MyBUagotLTI4NyBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLS0yNzkgVEptCi0odGhlbSkgMTkuOTI1MiBUagotLTI3OSBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgNDAyLjMwOCBUZAotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjgzIFRKbQotKGxpaykgMTAuNTIwNSBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI4MyBUSm0KLSh0aGVtLCkgMjIuNDE1OSBUagotLTI5MSBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLVsxIDAgMCAxIDE2NC4xNjcgNDAyLjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjQuMTY3IC00MDIuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjQuMTY3IDQwMi4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oI2RlZmluZSkgNDEuODQyOSBUagotWzEgMCAwIDEgMjA2LjAxIDQwMi4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjgxOTYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDguODI5IC00MDIuMzA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDguODI5IDQwMi4zMDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oX19pbmxpbmVfXykgNTkuNzc1NiBUagotWzEgMCAwIDEgMjY4LjYwNSA0MDIuMzA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI2OC42MDUgLTQwMi4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI3MS40MjUgNDAyLjMwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0bykgNy43NTA5IFRqCi0tMjgzIFRKbQotKGJlKSA5LjQwNDY5IFRqCi1bMSAwIDAgMSAyOTQuMjIgNDAyLjMwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTQuMjIgLTQwMi4zMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI5NC4yMiA0MDIuMzA4IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC8pIDUuOTc3NTYgVGoKLTMwMC4xOTcgNDAwLjU2NSBUZAotKCopIDUuOTc3NTYgVGoKLS02MDAgVEptCi0oKikgNS45Nzc1NiBUagotMzE4LjEzIDQwMi4zMDggVGQKLSgvKSA1Ljk3NzU2IFRqCi1bMSAwIDAgMSAzMjQuMTA4IDQwMi4zMDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzI0LjEwOCAtNDAyLjMwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI0LjEwOCA0MDIuMzA4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKC4pIDIuNDkwNjUgVGoKLS04MTggVEptCi0oT25lKSAxNi41OTc3IFRqCi0tMjgzIFRKbQotKGVhc3kpIDE3LjcwMzUgVGoKLS0yODMgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGF5KSA5LjQwNDY5IFRqCi0tMjgzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yODMgVEptCi0oZG8pIDkuOTYyNiBUagotLTI4MyBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yODMgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yODMgVEptCi0odG8pIDcuNzUwOSBUagotLTI4MyBUSm0KLShjb21waWxlKSAzMi4wOTk1IFRqCi0tMjgzIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yODMgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjgzIFRKbQotKFwwMDNhZykgMTQuOTQzOSBUagotWzEgMCAwIDEgNzIgMzkwLjM1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzkwLjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzkwLjM1MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSgtRF9faW5saW5lX189KSA3Ny43MDgzIFRqCi1bMSAwIDAgMSAxNDkuNzA5IDM5MC4zNTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTQ5LjcwOSAtMzkwLjM1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTQ5LjcwOSAzOTAuMzUzIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yNTAgVEptCi0od2hpY2gpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi0tMjUwIFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMjUwIFRKbQotKHVuZGVyc3Rvb2QpIDQ0LjI3MzggVGoKLS0yNTAgVEptCi0oYnkpIDkuOTYyNiBUagotLTI1MCBUSm0KLShtb3N0KSAxOS4zNzczIFRqCi0tMjUwIFRKbQotKFVuaXgpIDE5LjkyNTIgVGoKLS0yNTAgVEptCi0oY29tcGlsZXJzLikgNDEuNzgzMSBUagotWzEgMCAwIDEgNzIgMzg4LjE5Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzc4LjIzM10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzY4LjQzNSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTMyMSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0zMjEgVEptCi0oc3RpbGwpIDE0Ljk1MzkgVGoKLS0zMjIgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTMyMSBUSm0KLShkaWYpIDExLjA2ODQgVGoKLTI1IFRKbQotKFwwMDJjdWx0aWVzLCkgMzQuMDQyMiBUagotLTMzOSBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS0zMjEgVEptCi0oY29tcGlsaW5nKSA0MC40MDgzIFRqCi0tMzIxIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0zMjIgVEptCi0odCkgMi43Njk2IFRqCi0xIFRKbQotKGhlKSA5LjQwNDY5IFRqCi0tMzIyIFRKbQotKG1hY3JvKSAyNC44OTY1IFRqCi1bMSAwIDAgMSAzMTAuMjk1IDM2OC40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzEwLjI5NSAtMzY4LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzEwLjI5NSAzNjguNDM1IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1NUUklDVF9BTlNJKSA4My42ODU4IFRqCi1bMSAwIDAgMSAzOTMuOTgxIDM2OC40MzVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzkzLjk4MSAtMzY4LjQzNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzk3LjE4IDM2OC40MzUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGVcMDAybmVkLikgMzEuODIwNSBUagotLTUyNCBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMzIxIFRKbQotKHNob3VsZCkgMjYuNTcwMyBUagotLTMyMSBUSm0KLShlbmFibGUpIDI2LjAwMjQgVGoKLS0zMjEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzIyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDM1Ni40OCBUZAotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWlsZCkgMTUuNTAxOCBUagotLTMyMSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMjEgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTMyMiBUSm0KLShpbikgNy43NTA5IFRqCi0tMzIxIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMjEgVEptCi0oc3RyaWN0bHkpIDI3LjY3NjEgVGoKLS0zMjEgVEptCi0oQU5TSSkgMjMuMjQyNyBUagotLTMyMSBUSm0KLShjb21wbGlhbnQpIDM5Ljg1MDQgVGoKLS0zMjIgVEptCi0oZW4pIDkuNDA0NjkgVGoKLTQwIFRKbQotKHZpcm9ubWVudC4pIDQzLjQ0NjkgVGoKLS0xMDQ3IFRKbQotKEJ1aWxkaW5nKSAzNC44NzkxIFRqCi0tMzIxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTMyMSBUSm0KLShwcm9ncmFtKSAzMy43NTMzIFRqCi0tMzIyIFRKbQotKGl0c2VsZikgMTkuOTI1MiBUagotLTMyMSBUSm0KLShsaWspIDEwLjUyMDUgVGoKLTEwIFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMjEgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMzIxIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMzIxIFRKbQotKGRhbmdlcm91cykgNDAuOTQ2MyBUagotLTMyMiBUSm0KLShhbmQpIDE0LjM4NiBUagotNzIgMzQ0LjUyNSBUZAotKG5vdCkgMTIuNzMyMiBUagotLTI2MCBUSm0KLShzdXBwb3J0ZWQsKSA0MS43ODMxIFRqCi0tMjYzIFRKbQotKHNpbmNlKSAyMC40NzMxIFRqCi0tMjYwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2MCBUSm0KLShyZW1vKSAyMC40NzMxIFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLVsxIDAgMCAxIDIwNC40OTggMzQ0LjUyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMDQuNDk4IC0zNDQuNTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMDQuNDk4IDM0NC41MjUgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIzNC4zODYgMzQ0LjUyNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMzQuMzg2IC0zNDQuNTI1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMzQuMzg2IDM0NC41MjUgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oJykgMy4zMTc1NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI2MCBUSm0KLShjaGVja3MpIDI3LjEwODIgVGoKLS0yNjAgVEptCi0oYWcpIDkuNDA0NjkgVGoKLTUgVEptCi0oYWluc3QpIDE4LjgxOTQgVGoKLS0yNjEgVEptCi0oY29tcHJlc3NpKSA0MC4zOTgzIFRqCi0xIFRKbQotKG5nKSA5Ljk2MjYgVGoKLS0yNjEgVEptCi0oZGlyZWN0b3JpZXMsKSA0NC41NDI4IFRqCi0tMjYyIFRKbQotKHN5bWJvbGljKSAzNi41MzI5IFRqCi0tMjYxIFRKbQotKGxpbmtzLCkgMjEuODY3OSBUagotLTI2MiBUSm0KLShkZSkgOS40MDQ2OSBUagotMjUgVEptCi0odmljZXMsKSAyMi45NjM4IFRqCi0tMjYzIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjYwIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi03MiAzMzIuNTcgVGQKLShub3QtcmVhbGx5LWEtXDAwMmxlKSA2Mi41MjUzIFRqCi0tMjUwIFRKbQotKGVudGl0aWVzLikgMzEuMjcyNiBUagotLTYyMCBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGNvdWxkKSAyMi4xMzY5IFRqCi0tMjUwIFRKbQotKGNhdXNlKSAyMi4xMjY5IFRqCi0tMjUwIFRKbQotKFwwMDJsZXN5c3RlbSkgNDAuNDA4MyBUagotLTI1MCBUSm0KLShjb3JydXB0aW9uISkgNDQuODIxNyBUagotWzEgMCAwIDEgNzIgMzMwLjQxM10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzIwLjQ1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTAuNjUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE9uZSkgMTYuNTk3NyBUagotLTM5MiBUSm0KLShvdGhlcikgMjAuNDczMSBUagotLTM5MSBUSm0KLSh0aGluZzopIDIzLjI1MjcgVGoKLS01OTQgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0zOTEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzkyIFRKbQotKGNyZWF0ZSkgMjMuNzgwNyBUagotLTM5MSBUSm0KLShhKSA0LjQyMzM5IFRqCi1bMSAwIDAgMSAyMTAuODc5IDMxMC42NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEwLjg3OSAtMzEwLjY1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEwLjg3OSAzMTAuNjUyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyNDAuNzY3IDMxMC42NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQwLjc2NyAtMzEwLjY1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQ0LjY2OSAzMTAuNjUyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGJpbmFyeSkgMjUuNDU0NCBUagotLTM5MiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLS0zOTEgVEptCi0ocHVibGljKSAyNC45MDY1IFRqCi0tMzkyIFRKbQotKGRpc3RyaWIpIDI1LjQ2NDQgVGoKLTIwIFRKbQotKHV0aW9uLCkgMjIuOTczOCBUagotLTQyNyBUSm0KLShwbGVhc2UpIDI0Ljg5NjUgVGoKLS0zOTIgVEptCi0oY29uc2lkZXIpIDMzLjc1MzMgVGoKLS0zOTEgVEptCi0obGlua2luZykgMjguMjM0IFRqCi0tMzkyIFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzkxIFRKbQotKHN0YXRpY2FsbHkpIDM1Ljk3NDkgVGoKLS0zOTIgVEptCi0oXCgpIDMuMzE3NTUgVGoKLVsxIDAgMCAxIDUyMi4wNjcgMzEwLjY1Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MjIuMDY3IC0zMTAuNjUyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MjIuMDY3IDMxMC42NTIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oZ2NjKSAxNy45MzI3IFRqCi03MiAyOTguNjk3IFRkCi0oLXN0YXRpYykgNDEuODQyOSBUagotWzEgMCAwIDEgMTEzLjg0MyAyOTguNjk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTExMy44NDMgLTI5OC42OTddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTExMy44NDMgMjk4LjY5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcKS4pIDUuODA4MiBUagotLTYyMCBUSm0KLShUaGlzKSAxNy43MTM1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob2lkcykgMTYuNjA3NyBUagotLTI1MCBUSm0KLShhbGwpIDkuOTYyNiBUagotLTI1MCBUSm0KLShzb3J0cykgMTguODE5NCBUagotLTI1MCBUSm0KLShvZikgOC4yOTg4NSBUagotLTI1MCBUSm0KLShsaWJyYXJ5LXYpIDM0Ljg1OTEgVGoKLTE1IFRKbQotKGVyc2lvbikgMjQuMzQ4NiBUagotLTI1MCBUSm0KLShpc3N1ZXMpIDIzLjgwMDcgVGoKLS0yNTAgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShvdGhlcnMpIDI0LjM0ODYgVGoKLS0yNTAgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjUwIFRKbQotKGVuY291bnRlcikgMzkuMjgyNSBUagotLTI1MCBUSm0KLShsYXRlcikgMTcuNzAzNSBUagotLTI1MCBUSm0KLShvbi4pIDEyLjQ1MzMgVGoKLVsxIDAgMCAxIDcyIDI5Ni41NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjg2LjU3N10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjc2Ljc3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJZikgNi42MzUwOSBUagotLTI5NiBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yOTYgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1aWxkKSAxNS41MDE4IFRqCi1bMSAwIDAgMSAxMjIuNzA5IDI3Ni43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTIyLjcwOSAtMjc2Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTIyLjcwOSAyNzYuNzc5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxNTIuNTk2IDI3Ni43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTUyLjU5NiAtMjc2Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTU1LjU0NSAyNzYuNzc5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKG9uKSA5Ljk2MjYgVGoKLS0yOTYgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaW4zMiwpIDIwLjIwNDIgVGoKLS0zMDcgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjk2IFRKbQotKG11c3QpIDE5LjM3NzMgVGoKLS0yOTYgVEptCi0oc2V0KSAxMS4wNjg0IFRqCi1bMSAwIDAgMSAyNTQuOTY1IDI3Ni43NzldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjU0Ljk2NSAtMjc2Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjU0Ljk2NSAyNzYuNzc5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKEJaX1VOSVgpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDI5Ni44MDggMjc2Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yOTYuODA4IC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yOTkuNzU2IDI3Ni43NzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI5NiBUSm0KLSgwKSA0Ljk4MTMgVGoKLS0yOTYgVEptCi0oYW5kKSAxNC4zODYgVGoKLVsxIDAgMCAxIDMzNS43MiAyNzYuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMzNS43MiAtMjc2Ljc3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzM1LjcyIDI3Ni43NzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oQlpfTENDV0lOMzIpIDY1Ljc1MzIgVGoKLVsxIDAgMCAxIDQwMS40NzMgMjc2Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00MDEuNDczIC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00MDQuNDIyIDI3Ni43NzkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0odG8pIDcuNzUwOSBUagotLTI5NiBUSm0KLSgxLCkgNy40NzE5NSBUagotLTMwNyBUSm0KLShpbikgNy43NTA5IFRqCi0tMjk2IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NiBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLVsxIDAgMCAxIDQ2Ny4xNTkgMjc2Ljc3OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjcuMTU5IC0yNzYuNzc5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00NjcuMTU5IDI3Ni43NzkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIuYykgNDEuODQyOSBUagotWzEgMCAwIDEgNTA5LjAwMiAyNzYuNzc5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTUwOS4wMDIgLTI3Ni43NzldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUwOS4wMDIgMjc2Ljc3OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgsKSAyLjQ5MDY1IFRqCi0tMzA3IFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotNzIgMjY0LjgyNCBUZAotKGNvbXBpbGluZy4pIDQyLjg5OSBUagotLTMxMCBUSm0KLShPdGhlcndpc2UpIDQwLjk0NjMgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHJlc3VsdGluZykgMzQuODY5MSBUagotLTI1MCBUSm0KLShiaW5hcnkpIDI1LjQ1NDQgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9uJykgMTMuMjgwMSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcmspIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oY29ycmVjdGx5KSAzNS40MDcxIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiAyNjIuNjY3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNTIuNzA0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzAuMDcxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSg0LjMuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKFJlcG9yKSA1OS42ODI0IFRqCi0tMjAgVEptCi0odGluZykgMzcuODY3IFRqCi0tMjc4IFRKbQotKGIpIDEyLjYyMjMgVGoKLTIwIFRKbQotKHVncykgMzYuNzMwOCBUagotWzEgMCAwIDEgNzIgMjI1LjQ3NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjE1LjUxMl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjA4LjE1MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShJKSAzLjMxNzU1IFRqCi0tMjI4IFRKbQotKHRyaWVkKSAxOC4yNjE0IFRqCi0tMjI4IFRKbQotKHByZXR0eSkgMjMuMjQyNyBUagotLTIyOCBUSm0KLShoYXJkKSAxNy43MDM1IFRqCi0tMjI4IFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yMjggVEptCi0obWFrKSAxNy4xNTU2IFRqCi0xMCBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjI4IFRKbQotKHN1cmUpIDE2LjU5NzcgVGoKLVsxIDAgMCAxIDE5Ni4yNSAyMDguMTUzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE5Ni4yNSAtMjA4LjE1M10gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTk2LjI1IDIwOC4xNTMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDIyNi4xMzggMjA4LjE1M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMjYuMTM4IC0yMDguMTUzXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMjguNDA5IDIwOC4xNTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMjggVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi0tMjI4IFRKbQotKGZyZWUsKSAxNy45NzI1IFRqCi0tMjMyIFRKbQotKGJvdGgpIDE3LjcxMzUgVGoKLS0yMjggVEptCi0oYnkpIDkuOTYyNiBUagotLTIyOCBUSm0KLShkZXNpZ24pIDI2LjAxMjMgVGoKLS0yMjggVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMjggVEptCi0oYnkpIDkuOTYyNiBUagotLTIyOCBUSm0KLSh0ZXN0aW5nLikgMjkuMDYwOSBUagotLTYwNSBUSm0KLShIb3BlZnVsbHkpIDQwLjM5ODMgVGoKLS0yMjggVEptCi0oeW91JykgMTguMjYxNCBUagotMTAgVEptCi0obGwpIDUuNTM5MjEgVGoKLS0yMjggVEptCi0obmUpIDkuNDA0NjkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLS0yMjggVEptCi0obmVlZCkgMTguODA5NCBUagotLTIyOCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjI4IFRKbQotKHJlYWQpIDE3LjE0NTYgVGoKLTcyIDE5Ni4xOTggVGQKLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0oc2VjdGlvbikgMjguMjI0IFRqCi0tMjUwIFRKbQotKGZvcikgMTEuNjE2NCBUagotLTI1MCBUSm0KLShyZWFsLikgMTcuNDI0NiBUagotWzEgMCAwIDEgNzIgMTk2LjA5OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTg2LjEzNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMTc0LjI4IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKE5lKSAxMS42MTY0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVydGhlbGVzcywpIDM3LjM0OTggVGoKLS0zMTMgVEptCi0oaWYpIDYuMDg3MTUgVGoKLVsxIDAgMCAxIDEzNy43NTEgMTc0LjI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEzNy43NTEgLTE3NC4yOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM3Ljc1MSAxNzQuMjggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDE2Ny42MzkgMTc0LjI4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2Ny42MzkgLTE3NC4yOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTcwLjYzNCAxNzQuMjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oZGllcykgMTYuMDQ5NyBUagotLTMwMSBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzAwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDEgVEptCi0oc2UpIDguMjk4ODUgVGoKLTE1IFRKbQotKGdtZW50YXRpb24pIDQ0LjgzMTcgVGoKLS0zMDAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYXVsdCwpIDE3LjQzNDYgVGoKLS0zMTQgVEptCi0oYSkgNC40MjMzOSBUagotLTMwMCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVzKSA4Ljg1Njc1IFRqCi0tMzAxIFRKbQotKGVycm9yKSAxOS4zNTczIFRqCi0tMzAwIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0tMzAxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMzAxIFRKbQotKGludGVybmFsKSAzMC40MzU3IFRqCi0tMzAwIFRKbQotKGFzc2VydGlvbikgMzUuNDE3IFRqCi0tMzAxIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFpbHVyZSwpIDI1LjE3NTUgVGoKLS0zMTMgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDEgVEptCi0od2lsKSAxMi43MzIyIFRqCi0xIFRKbQotKGwpIDIuNzY5NiBUagotLTMwMSBUSm0KLShhc2spIDEzLjI4MDEgVGoKLS0zMDEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMzAwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLTcyIDE2Mi4zMjUgVGQKLShlbWFpbCkgMjIuMTM2OSBUagotLTI0MiBUSm0KLShtZSkgMTIuMTc0MyBUagotLTI0MyBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQyIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWcpIDkuOTYyNiBUagotLTI0MyBUSm0KLShyZXBvcnQuKSAyNi4yODEzIFRqCi0tNjE1IFRKbQotKEV4cGVyaWVuY2UpIDQ0LjgxMTggVGoKLS0yNDIgVEptCi0oZnJvbSkgMTkuMzY3MyBUagotLTI0MyBUSm0KLSh5ZWFycykgMjEuMDIxMSBUagotLTI0MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI0MiBUSm0KLShmZWVkYmFjaykgMzUuOTU1IFRqCi0tMjQzIFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjQyIFRKbQotKGJ6aXAyKSAyMi4xMzY5IFRqCi0tMjQzIFRKbQotKHVzZXJzKSAyMC40NzMxIFRqCi0tMjQyIFRKbQotKGluZGljYXRlcykgMzUuNDE3IFRqCi0tMjQzIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNDIgVEptCi0oYWxtb3N0KSAyNi41NzAzIFRqCi0tMjQyIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjQzIFRKbQotKHRoZXNlKSAyMC40NzMxIFRqCi0tMjQyIFRKbQotKHByb2JsZW1zKSAzNy4wODA4IFRqCi0tMjQzIFRKbQotKGNhbikgMTMuODI4MSBUagotNzIgMTUwLjM3IFRkCi0oYmUpIDkuNDA0NjkgVGoKLS0yNTAgVEptCi0odHJhY2VkKSAyNC4zMzg2IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oZWl0aGVyKSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKGNvbXBpbGVyKSAzNS40MTcgVGoKLS0yNTAgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1Z3MpIDEzLjgzODEgVGoKLS0yNTAgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0oaGFyZHcpIDI0Ljg5NjUgVGoKLTEwIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI1MCBUSm0KLShwcm9ibGVtcy4pIDM5LjU3MTQgVGoKLVsxIDAgMCAxIDcyIDE0OC4yMTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ny4zNjExXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMyKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDM2IDM2Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMTYuMzI4IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgyLjQgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC43MjggNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShNaXNjZWxsYW5lYSkgNDguMTM5MyBUagotWzEgMCAwIDEgMjY2LjA3MSA3NDkuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTcuMDkzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTMxLjUxNjhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2Ljk3MzkgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03OC45NzM5IC03MTAuMDM3XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03OC45NzM5IDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oXDIyNSkgMy40ODY5MSBUagotWzEgMCAwIDEgODIuNDYwOCA3MTAuMDM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxLjk5MjUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC04Ni45NDQgLTcxMC4wMzddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA3MTAuMDM3IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFJlY29tcGlsZSkgNDMuMTY3OSBUagotLTMwNiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDYgVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTMwNiBUSm0KLSh3aXRoKSAxNy43MTM1IFRqCi0tMzA2IFRKbQotKG5vKSA5Ljk2MjYgVGoKLS0zMDYgVEptCi0ob3B0aW1pc2F0aW9uLCkgNTIuMzEzNiBUagotLTMyMCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTMwNiBUSm0KLShzZWUpIDEyLjcyMjIgVGoKLS0zMDYgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0zMDYgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0zMDYgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9ya3MuKSAxOS42NDYyIFRqCi0tOTU2IFRKbQotKEFuZC9vcikgMjguMjI0IFRqCi0tMzA2IFRKbQotKHRyeSkgMTEuMDY4NCBUagotLTMwNiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMzA2IFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oZmVyZW50KSAyMy4yMzI4IFRqCi0tMzA2IFRKbQotKGNvbXBpbGVyKSAzNS40MTcgVGoKLTU1IFRKbQotKC4pIDIuNDkwNjUgVGoKLS05NTYgVEptCi0oSSkgMy4zMTc1NSBUagotLTMwNiBUSm0KLShoZWFyZCkgMjIuMTI2OSBUagotLTMwNiBUSm0KLShhbGwpIDkuOTYyNiBUagotODYuOTQ0IDY5OC4wODIgVGQKLShzb3J0cykgMTguODE5NCBUagotLTI4MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI4MiBUSm0KLShzdG9yaWVzKSAyNi4wMTIzIFRqCi0tMjgyIFRKbQotKGFib3V0KSAyMi4xMzY5IFRqCi0tMjgzIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYXJpb3VzKSAyNC4zNDg2IFRqCi0tMjgyIFRKbQotKFwwMDNhKSA5Ljk2MjYgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjAgVEptCi0ob3VycykgMTcuMTU1NiBUagotLTI4MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI4MiBUSm0KLShHTlUpIDIxLjU3OSBUagotLTI4MiBUSm0KLShDKSA2LjY0NTA1IFRqCi0tMjgyIFRKbQotKFwoYW5kKSAxNy43MDM1IFRqCi0tMjgyIFRKbQotKG90aGVyKSAyMC40NzMxIFRqCi0tMjgzIFRKbQotKGNvbXBpbGVyc1wpKSA0Mi42MSBUagotLTI4MiBUSm0KLShnZW5lcmF0aW5nKSA0Mi4wNTIxIFRqCi0tMjgyIFRKbQotKGJhZCkgMTQuMzg2IFRqCi0tMjgyIFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLS0yODIgVEptCi0oZm9yKSAxMS42MTY0IFRqCi1bMSAwIDAgMSA0NzIuMTQxIDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDcyLjE0MSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDcyLjE0MSA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSA1MDIuMDI5IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNTAyLjAyOSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTAyLjAyOSA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKCwpIDIuNDkwNjUgVGoKLS0yOTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yODIgVEptCi0oSScpIDYuNjM1MDkgVGoKLTUwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotODYuOTQ0IDY4Ni4xMjcgVGQKLShydW4pIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oYWNyb3NzKSAyNC44OTY1IFRqCi0tMjUwIFRKbQotKHR3KSA5Ljk2MjYgVGoKLTEwIFRKbQotKG8pIDQuOTgxMyBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGUpIDQuNDIzMzkgVGoKLTE1IFRKbQotKHhhbXBsZXMpIDMzLjIwNTMgVGoKLS0yNTAgVEptCi0obXlzZWxmLikgMjkuNjA4OCBUagotWzEgMCAwIDEgMjM3Ljc2NyA2ODYuMTI3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE2NS43NjcgLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3NC4wMDddIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA2NjQuMjA5IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDIuNy5YKSAyMi4xMzY5IFRqCi0tMjgwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJzaW9ucykgMjguMjI0IFRqCi0tMjc5IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMjgwIFRKbQotKEdOVSkgMjEuNTc5IFRqCi0tMjc5IFRKbQotKEMpIDYuNjQ1MDUgVGoKLS0yODAgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjc5IFRKbQotKGtubykgMTQuOTQzOSBUagotMjUgVEptCi0od24pIDEyLjE3NDMgVGoKLS0yODAgVEptCi0odG8pIDcuNzUwOSBUagotLTI4MCBUSm0KLShnZW5lcmF0ZSkgMzMuNzQzMyBUagotLTI3OSBUSm0KLShiYWQpIDE0LjM4NiBUagotLTI4MCBUSm0KLShjb2RlKSAxOC44MDk0IFRqCi0tMjc5IFRKbQotKGZyb20pIDE5LjM2NzMgVGoKLS0yODAgVEptCi0odGltZSkgMTcuNzEzNSBUagotLTI3OSBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjgwIFRKbQotKHRpbWUsKSAyMC4yMDQyIFRqCi0tMjg3IFRKbQotKGF0KSA3LjE5MyBUagotLTI4MCBUSm0KLShoaWdoKSAxNy43MTM1IFRqCi0tMjc5IFRKbQotKG9wdGltaXNhdGlvbikgNDkuODIzIFRqCi0tMjgwIFRKbQotKGxlKSA3LjE5MyBUagotMjUgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlbHMuKSAxMy41NTkxIFRqCi0tNzk3IFRKbQotKElmKSA2LjYzNTA5IFRqCi0tMjgwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotODYuOTQ0IDY1Mi4yNTQgVGQKLShnZXQpIDEyLjE3NDMgVGoKLS0yOTUgVEptCi0ocHJvYmxlbXMsKSAzOS41NzE0IFRqCi0tMzA3IFRKbQotKHRyeSkgMTEuMDY4NCBUagotLTI5NiBUSm0KLSh1c2luZykgMjEuNTg5IFRqCi0tMjk1IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI5NiBUSm0KLShcMDAzYWdzKSAxOC44MTk0IFRqCi1bMSAwIDAgMSAyMjAuMTE2IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjIwLjExNiAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjIwLjExNiA2NTIuMjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1PMikgMTcuOTMyNyBUagotWzEgMCAwIDEgMjM4LjA0OSA2NTIuMjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi45NDM4IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjQwLjk5MyAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjQwLjk5MyA2NTIuMjU0IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKC1mb21pdC1mcmFtZS1wb2ludGVyKSAxMTkuNTUxIFRqCi1bMSAwIDAgMSAzNjAuNTQ0IDY1Mi4yNTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjk0MzggMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zNjMuNDg4IC02NTIuMjU0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zNjMuNDg4IDY1Mi4yNTQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWZuby1zdHJlbmd0aC1yZWR1Y2UpIDExOS41NTEgVGoKLVsxIDAgMCAxIDQ4My4wNCA2NTIuMjU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ4My4wNCAtNjUyLjI1NF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDgzLjA0IDY1Mi4yNTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTg5MyBUSm0KLShZKSA3LjE5MyBUagotMTEwIFRKbQotKG91KSA5Ljk2MjYgVGoKLS0yOTUgVEptCi0oc2hvdWxkKSAyNi41NzAzIFRqCi04Ni45NDQgNjQwLjI5OSBUZAotKHNwZWNpXDAwMmNhbGx5KSA0NS4zNzk2IFRqCi1bMSAwIDAgMSAxMzQuODE0IDY0MC4yOTldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTM0LjgxNCAtNjQwLjI5OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTM0LjgxNCA2NDAuMjk5IFRkCi0vRjYzN18wIDkuOTYyNiBUZgotKG5vdCkgMTIuNzMyMiBUagotWzEgMCAwIDEgMTQ3LjU0NiA2NDAuMjk5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTE0Ny41NDYgLTY0MC4yOTldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTE1MC4wMzYgNjQwLjI5OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh1c2UpIDEzLjI4MDEgVGoKLVsxIDAgMCAxIDE2NS44MDcgNjQwLjI5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjUuODA3IC02NDAuMjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjUuODA3IDY0MC4yOTkgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oLWZ1bnJvbGwtbG9vcHMpIDgzLjY4NTggVGoKLVsxIDAgMCAxIDI0OS40OTMgNjQwLjI5OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDkuNDkzIC02NDAuMjk5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yNDkuNDkzIDY0MC4yOTkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjM4LjE0Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjI4LjE3OV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDYxOC4zODEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oWSkgNy4xOTMgVGoKLTExMCBUSm0KLShvdSkgOS45NjI2IFRqCi0tMjQ5IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTI0OSBUSm0KLShub3RpY2UpIDI0LjM0ODYgVGoKLS0yNDggVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI0OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDkgVEptCi0oTWFrKSAxOC4yNjE0IFRqCi0xMCBUSm0KLShlXDAwMmxlKSAxNy4xNTU2IFRqCi0tMjQ5IFRKbQotKHJ1bnMpIDE3LjE1NTYgVGoKLS0yNDggVEptCi0oc2l4KSAxMS42MjY0IFRqCi0tMjQ5IFRKbQotKHRlc3RzKSAxNy43MTM1IFRqCi0tMjQ5IFRKbQotKGFzKSA4LjI5ODg1IFRqCi0tMjQ5IFRKbQotKHBhcnQpIDE1LjQ5MTggVGoKLS0yNDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNDggVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQ5IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odWlsZCkgMTUuNTAxOCBUagotLTI0OSBUSm0KLShwcm9jZXNzLikgMzIuMzY4NSBUagotLTYxOSBUSm0KLShJZikgNi42MzUwOSBUagotLTI0OSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDkgVEptCi0ocHJvZ3JhbSkgMzMuNzUzMyBUagotLTI0OCBUSm0KLShwYXNzZXMpIDI1LjQ1NDQgVGoKLS0yNDkgVEptCi0oYWxsKSA5Ljk2MjYgVGoKLS0yNDkgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNDkgVEptCi0odGhlc2UsKSAyMi45NjM4IFRqCi0tMjQ5IFRKbQotKGl0JykgOC44NTY3NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotODYuOTQ0IDYwNi40MjYgVGQKLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHByZXR0eSkgMjMuMjQyNyBUagotLTI1MCBUSm0KLShnb29kKSAxOS45MjUyIFRqCi0tMjUwIFRKbQotKFwoYikgOC4yOTg4NSBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTI1MCBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0oMTAwJVwpKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGluZGljYXRpb24pIDM5Ljg1MDQgVGoKLS0yNTAgVEptCi0odGhhdCkgMTQuOTQzOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oY29tcGlsZXIpIDM1LjQxNyBUagotLTI1MCBUSm0KLShoYXMpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oZG9uZSkgMTkuMzY3MyBUagotLTI1MCBUSm0KLShpdHMpIDkuNDE0NjYgVGoKLS0yNTAgVEptCi0oam9iKSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGNvcnJlY3RseSkgMzUuNDA3MSBUagotNjUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgNjA0LjI2OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTE5Ljc2MV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuOTczOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTc4Ljk3MzkgLTU4NC41MDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTc4Ljk3MzkgNTg0LjUwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShcMjI1KSAzLjQ4NjkxIFRqCi1bMSAwIDAgMSA4Mi40NjA4IDU4NC41MDhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDEuOTkyNSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTg2Ljk0NCAtNTg0LjUwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDU4NC41MDggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLVsxIDAgMCAxIDk1Ljk1NTggNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05NS45NTU4IC01ODQuNTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05NS45NTU4IDU4NC41MDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDEyNS44NDQgNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xMjUuODQ0IC01ODQuNTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xMjguMjIgNTg0LjUwOCBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShjcmFzaGVzKSAyOS4zMTk5IFRqCi0tMjM5IFRKbQotKHJhbmRvbWx5KSAzOC4xODY2IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjQwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzOSBUSm0KLShjcmFzaGUpIDI1LjQ0NDUgVGoKLTEgVEptCi0ocykgMy44NzU0NSBUagotLTIzOSBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yMzkgVEptCi0obm90KSAxMi43MzIyIFRqCi0tMjM4IFRKbQotKHJlcGVhdGFibGUsKSA0My40MjcgVGoKLS0yNDEgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjM5IFRKbQotKG1heSkgMTcuMTU1NiBUagotLTIzOCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjM5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yMzggVEptCi0oXDAwM2FrKSAxNC45NDM5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yMzkgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi0tMjM4IFRKbQotKHN1YnN5c3RlbS4pIDQ0LjAwNDggVGoKLVsxIDAgMCAxIDUxMC4xMTIgNTg0LjUwOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01MTAuMTEyIC01ODQuNTA4XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi01MTAuMTEyIDU4NC41MDggVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDU0MCA1ODQuNTA4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTU0MCAtNTg0LjUwOF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotODYuOTQ0IDU3Mi41NTMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0ocmVhbGx5KSAyMi42ODQ4IFRqCi0tMjU0IFRKbQotKGhhbW1lcnMpIDM2LjUyMjkgVGoKLS0yNTMgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI1NCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNTMgVEptCi0oaGllcmFyY2gpIDMyLjYzNzUgVGoKLTUgVEptCi0oeSkgNC45ODEzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjU1IFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUzIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjU0IFRKbQotKGl0JykgOC44NTY3NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI1NCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUzIFRKbQotKGJpdCkgMTAuNTIwNSBUagotLTI1NCBUSm0KLShtYXIpIDE1LjQ5MTggVGoKLTE4IFRKbQotKGdpbmFsLCkgMjIuNDE1OSBUagotLTI1NCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTQgVEptCi0obWF5KSAxNy4xNTU2IFRqCi0tMjUzIFRKbQotKGdldCkgMTIuMTc0MyBUagotLTI1NCBUSm0KLSh0aGVzZSkgMjAuNDczMSBUagotLTI1MyBUSm0KLShwcm9ibGVtcy4pIDM5LjU3MTQgVGoKLS02NDIgVEptCi0oRGl0dG8pIDIwLjQ4MzEgVGoKLS0yNTQgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0yNTMgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI1NCBUSm0KLShkaXNrKSAxNi42MDc3IFRqCi04Ni45NDQgNTYwLjU5OCBUZAotKG9yKSA4LjI5ODg1IFRqCi0tMjUwIFRKbQotKEkvTykgMTMuMjgwMSBUagotLTI1MCBUSm0KLShzdWJzeXN0ZW0pIDQxLjUxNDIgVGoKLS0yNTAgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oc2xvKSAxMS42MjY0IFRqCi0yNSBUSm0KLSh3bHkpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0oZikgMy4zMTc1NSBUagotMTAgVEptCi0oYWlsaW5nLikgMjUuMTg1NSBUagotLTYyMCBUSm0KLShZKSA3LjE5MyBUagotMTExIFRKbQotKHVwLCkgMTIuNDUzMyBUagotLTI1MCBUSm0KLSh0aGlzKSAxNC4zOTYgVGoKLS0yNTAgVEptCi0ocmVhbGx5KSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKGRvZXMpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0oaGFwcGVuLikgMzEuMjYyNiBUagotWzEgMCAwIDEgMzQ1LjE0MyA1NjAuNTk4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI3My4xNDMgLTEyLjExOTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU0OC40NzhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTg2Ljk0NCA1MzguNjggVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVCkgNi4wODcxNSBUagotMzUgVEptCi0ocnkpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odXNpbmcpIDIxLjU4OSBUagotLTI1MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKGRpZikgMTEuMDY4NCBUagotMjUgVEptCi0oZmVyZW50KSAyMy4yMzI4IFRqCi0tMjUwIFRKbQotKG1hY2hpbmUpIDMzLjc1MzMgVGoKLS0yNTAgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUwIFRKbQotKHNhbWUpIDIwLjQ3MzEgVGoKLS0yNTAgVEptCi0odHlwZSwpIDE5LjY0NjIgVGoKLS0yNTAgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oc2VlKSAxMi43MjIyIFRqCi0tMjUwIFRKbQotKGlmKSA2LjA4NzE1IFRqCi0tMjUwIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MCBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTAgVEptCi0ocmVwZWF0KSAyNC4zMzg2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShwcm9ibGVtLikgMzUuNjk2IFRqCi1bMSAwIDAgMSA3MiA1MzYuNTIzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMTkuNzYxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNi45NzM5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzguOTczOSAtNTE2Ljc2Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzguOTczOSA1MTYuNzYyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFwyMjUpIDMuNDg2OTEgVGoKLVsxIDAgMCAxIDgyLjQ2MDggNTE2Ljc2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMS45OTI1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtODYuOTQ0IC01MTYuNzYyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi04Ni45NDQgNTE2Ljc2MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGlzKSAxNy43MTM1IFRqCi0tMjI5IFRKbQotKGlzbicpIDE0Ljk0MzkgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTIzMCBUSm0KLShyZWFsbHkpIDIyLjY4NDggVGoKLS0yMjkgVEptCi0oYSkgNC40MjMzOSBUagotLTIyOSBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnLCkgMTIuNDUzMyBUagotLTIzNCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yMjkgVEptCi0oLi4uKSA3LjQ3MTk1IFRqCi0tMzAzIFRKbQotKElmKSA2LjYzNTA5IFRqCi1bMSAwIDAgMSAyMTIuMjMyIDUxNi43NjJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjEyLjIzMiAtNTE2Ljc2Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjEyLjIzMiA1MTYuNzYyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAyNDIuMTIgNTE2Ljc2Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yNDIuMTIgLTUxNi43NjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTI0NC40MDUgNTE2Ljc2MiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSh0ZWxscykgMTYuNjA3NyBUagotLTIyOSBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yMzAgVEptCi0oeW91cikgMTguMjYxNCBUagotLTIyOSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yMjkgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yMzAgVEptCi0oY29ycnVwdGVkKSAzOC4xNzY3IFRqCi0tMjI5IFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yMzAgVEptCi0oZGVjb21wcmVzc2lvbiwpIDYyLjI1NjMgVGoKLS0yMzMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMjkgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjMwIFRKbQotKG9idGFpbmVkKSAzNC4zMTEyIFRqCi0tMjI5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyOSBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLTg2Ljk0NCA1MDQuODA3IFRkCi0odmlhKSAxMi4xNzQzIFRqCi0tMjYyIFRKbQotKEZUUCkgMTcuMTY1NiBUagotMTExIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNjMgVEptCi0odGhlcmUpIDE5LjkxNTIgVGoKLS0yNjIgVEptCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNjIgVEptCi0oYSkgNC40MjMzOSBUagotLTI2MiBUSm0KLShwb3NzaWJpbGl0eSkgNDEuNTI0MSBUagotLTI2MyBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMjYyIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI2MiBUSm0KLShmb3IpIDExLjYxNjQgVGoKLTE4IFRKbQotKGdvdCkgMTIuNzMyMiBUagotLTI2MyBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjYyIFRKbQotKHRlbGwpIDEyLjczMjIgVGoKLS0yNjIgVEptCi0oRlRQKSAxNy4xNjU2IFRqCi0tMjYzIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNjIgVEptCi0oZG8pIDkuOTYyNiBUagotLTI2MiBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjYyIFRKbQotKGJpbmFyeSkgMjUuNDU0NCBUagotLTI2MyBUSm0KLShtb2RlKSAyMi4xMzY5IFRqCi0tMjYyIFRKbQotKHRyYW5zZmVyKSAzMC40MjU4IFRqCi01NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNjk0IFRKbQotKFRoYXQpIDE4LjI2MTQgVGoKLS0yNjIgVEptCi0oYWJzb2x1dGVseSkgNDAuOTU2MiBUagotLTI2MiBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjYzIFRKbQotKGNhdXNlKSAyMi4xMjY5IFRqCi04Ni45NDQgNDkyLjg1MiBUZAotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShcMDAybGUpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShiZSkgOS40MDQ2OSBUagotLTI1MCBUSm0KLShub24tZGVjb21wcmVzc2libGUuKSA4Mi43Mjk0IFRqCi0tNjIwIFRKbQotKFkpIDcuMTkzIFRqCi0xMTAgVEptCi0ob3UnKSAxMy4yODAxIFRqCi0xMCBUSm0KLShsbCkgNS41MzkyMSBUagotLTI1MCBUSm0KLShoYSkgOS40MDQ2OSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0xNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0tMjUwIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0odHJhbnNmZXIpIDMwLjQyNTggVGoKLS0yNTAgVEptCi0oaXQpIDUuNTM5MjEgVGoKLS0yNTAgVEptCi0oYWcpIDkuNDA0NjkgVGoKLTUgVEptCi0oYWluLikgMTQuNjY0OSBUagotWzEgMCAwIDEgMzUxLjM0IDQ5Mi44NTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMjc5LjM0IC0xMi4xMTk1XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC00ODAuNzMyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA0NzAuOTM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKElmKSA2LjYzNTA5IFRqCi0tMjM1IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTUwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTIzNiBUSm0KLShpbmNvcikgMjAuNDczMSBUagotMSBUSm0KLShwKSA0Ljk4MTMgVGoKLS0xIFRKbQotKG9yKSA4LjI5ODg1IFRqCi0xIFRKbQotKGF0ZWQpIDE2LjU5NzcgVGoKLVsxIDAgMCAxIDE2My4wMzYgNDcwLjkzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0xNjMuMDM2IC00NzAuOTM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0xNjMuMDM2IDQ3MC45MzQgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0obGliYnppcDIpIDQ3LjgyMDUgVGoKLVsxIDAgMCAxIDIxMC44NTYgNDcwLjkzNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0yMTAuODU2IC00NzAuOTM0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0yMTMuMiA0NzAuOTM0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGludG8pIDE1LjUwMTggVGoKLS0yMzUgVEptCi0oeW91cikgMTguMjYxNCBUagotLTIzNSBUSm0KLShvKSA0Ljk4MTMgVGoKLTI1IFRKbQotKHduKSAxMi4xNzQzIFRqCi0tMjM2IFRKbQotKHByb2dyYW0pIDMzLjc1MzMgVGoKLS0yMzUgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yMzUgVEptCi0oYXJlKSAxMi4xNjQzIFRqCi0tMjM2IFRKbQotKGdldCkgMTIuMTc0MyBUagotMSBUSm0KLSh0aW5nKSAxNS41MDE4IFRqCi0tMjM2IFRKbQotKHByb2JsZW1zLCkgMzkuNTcxNCBUagotLTIzOCBUSm0KLShwbGVhc2UsKSAyNy4zODcyIFRqCi0tMjM4IFRKbQotKHBsZWFzZSwpIDI3LjM4NzIgVGoKLS0yMzggVEptCi0ocGxlYXNlLCkgMjcuMzg3MiBUagotLTIzOCBUSm0KLShjaGVjaykgMjMuMjMyOCBUagotLTIzNiBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi03MiA0NTguOTc5IFRkCi0odGhlKSAxMi4xNzQzIFRqCi0tMjQyIFRKbQotKHBhcmFtZXRlcnMpIDQzLjcwNTkgVGoKLS0yNDMgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjQyIFRKbQotKGFyZSkgMTIuMTY0MyBUagotLTI0MiBUSm0KLShwYXNzaW5nKSAyOS44ODc4IFRqCi0tMjQzIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNDIgVEptCi0oY2FsbHMpIDE4LjI2MTQgVGoKLS0yNDIgVEptCi0odG8pIDcuNzUwOSBUagotLTI0MyBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDIgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotNjUgVEptCi0oLCkgMi40OTA2NSBUagotLTI0NCBUSm0KLShhcmUpIDEyLjE2NDMgVGoKLS0yNDIgVEptCi0oY29ycmVjdCwpIDMwLjE0NjggVGoKLS0yNDQgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNDMgVEptCi0oaW4pIDcuNzUwOSBUagotLTI0MiBUSm0KLShhY2NvcmRhbmNlKSA0NC44MDE4IFRqCi0tMjQyIFRKbQotKHdpdGgpIDE3LjcxMzUgVGoKLS0yNDMgVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI0MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNDIgVEptCi0oZG9jdW1lbnRhdGlvbikgNTkuMjE3NyBUagotLTI0MyBUSm0KLShzYXlzKSAxNy4xNTU2IFRqCi03MiA0NDcuMDI0IFRkCi0oaXMpIDYuNjQ1MDUgVGoKLS0yNTAgVEptCi0oYWxsbykgMTQuOTQzOSBUagotMjUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFibGUuKSAxOS4wODgzIFRqCi0tMzEwIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yNTAgVEptCi0oaGEpIDkuNDA0NjkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSh0cmllZCkgMTguMjYxNCBUagotLTI1MCBUSm0KLSh0bykgNy43NTA5IFRqCi0tMjUwIFRKbQotKG1haykgMTcuMTU1NiBUagotMTAgVEptCi0oZSkgNC40MjMzOSBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0obGlicmFyeSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShyb2IpIDEzLjI4MDEgVGoKLTIwIFRKbQotKHVzdCkgMTEuNjI2NCBUagotLTI1MCBUSm0KLShhZykgOS40MDQ2OSBUagotNSBUSm0KLShhaW5zdCkgMTguODE5NCBUagotLTI1MCBUSm0KLShzdWNoKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKHByb2JsZW1zLCkgMzkuNTcxNCBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHV0KSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oSSdtKSAxNC4zODYgVGoKLS0yNTAgVEptCi0oc3VyZSkgMTYuNTk3NyBUagotLTI1MCBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjUwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVuJykgMTIuNzIyMiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMjUwIFRKbQotKHN1Y2NlZWRlZC4pIDQzLjQyNyBUagotWzEgMCAwIDEgNzIgNDQ0Ljg2N10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNDM0LjkwNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNDI1LjEwNiBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGaW5hbGx5KSAyOC4yMzQgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0zMjQgVEptCi0oaWYpIDYuMDg3MTUgVGoKLS0zMTAgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMzA5IFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMDkgVEptCi0oY29tbWVudHMpIDQwLjk1NjIgVGoKLS0zMTAgVEptCi0oZG9uJykgMTguMjYxNCBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzA5IFRKbQotKGhlbHAsKSAxOS42NDYyIFRqCi0tMzI0IFRKbQotKHlvdScpIDE4LjI2MTQgVGoKLTEwIFRKbQotKGxsKSA1LjUzOTIxIFRqCi0tMzEwIFRKbQotKGhhKSA5LjQwNDY5IFRqCi0yMCBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0zMDkgVEptCi0odG8pIDcuNzUwOSBUagotLTMwOSBUSm0KLShzZW5kKSAxOC4yNjE0IFRqCi0tMzEwIFRKbQotKG1lKSAxMi4xNzQzIFRqCi0tMzA5IFRKbQotKGEpIDQuNDIzMzkgVGoKLS0zMDkgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1ZykgOS45NjI2IFRqCi0tMzEwIFRKbQotKHJlcG9ydC4pIDI2LjI4MTMgVGoKLS05NzYgVEptCi0oTm8pIDEyLjE3NDMgVGoKLTI1IFRKbQotKHcpIDcuMTkzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzI0IFRKbQotKGl0JykgOC44NTY3NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTMxMCBUSm0KLShqdXN0KSAxNC4zOTYgVGoKLS0zMDkgVEptCi0oYW1hemluZykgMzMuNzUzMyBUagotLTMwOSBUSm0KLShobykgOS45NjI2IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMxMCBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotNzIgNDEzLjE1MSBUZAotKHBlb3BsZSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLSh3aWxsKSAxNS41MDE4IFRqCi0tMjUwIFRKbQotKHNlbmQpIDE4LjI2MTQgVGoKLS0yNTAgVEptCi0obWUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotLTI1MCBUSm0KLShiKSA0Ljk4MTMgVGoKLTIwIFRKbQotKHVnKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0ocmVwb3J0KSAyMy43OTA3IFRqCi0tMjUwIFRKbQotKHNheWluZykgMjYuMDEyMyBUagotLTI1MCBUSm0KLShzb21ldGhpbmcpIDQxLjUxNDIgVGoKLS0yNTAgVEptCi0obGlrKSAxMC41MjA1IFRqCi0xMCBUSm0KLShlOikgNy4xOTMgVGoKLVsxIDAgMCAxIDcyIDQxMC45OTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yNC45MDY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTQ4OTkgMC45NDg5OSAwLjk3NjQ1Nl0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIFNDCi0wIDAgNDY4IDIzLjkxMDMgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAyMC4zMjM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNDAxLjYyOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNDAxLjYyOSBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotLTQyNiBUSm0KLShjcmFzaGVkKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKHdpdGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oc2VnbWVudGF0aW9uKSA3MS43MzA3IFRqCi0tNDI2IFRKbQotKGZhdWx0KSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKG9uKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG15KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKG1hY2hpbmUpIDQxLjg0MjkgVGoKLVsxIDAgMCAxIDcyIDM4Ni4wODddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzc2LjEyNV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMzY0LjE2OSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShhbmQpIDE0LjM4NiBUagotLTI0MSBUSm0KLShhYnNvbHV0ZWx5KSA0MC45NTYyIFRqCi0tMjQxIFRKbQotKG5vdGhpbmcpIDMwLjQ0NTcgVGoKLS0yNDEgVEptCi0oZWwpIDcuMTkzIFRqCi0xIFRKbQotKHNlLikgMTAuNzg5NSBUagotLTYxNCBUSm0KLShOZWVkbGVzcykgMzUuOTY1IFRqCi0tMjQxIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNDEgVEptCi0oc2F5KSAxMy4yODAxIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjQzIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNDEgVEptCi0oc3VjaCkgMTguMjYxNCBUagotLTI0MCBUSm0KLShhKSA0LjQyMzM5IFRqCi0tMjQxIFRKbQotKHJlcG9ydCkgMjMuNzkwNyBUagotLTI0MSBUSm0KLShpcykgNi42NDUwNSBUagotWzEgMCAwIDEgMzI0LjY4MSAzNjQuMTY5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyNC42ODEgLTM2NC4xNjldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTMyNC42ODEgMzY0LjE2OSBUZAotL0Y2MzdfMCA5Ljk2MjYgVGYKLSh0b3RhbGx5KSAyNS40NjQ0IFRqCi01NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjQzIFRKbQotKHV0dGVybHkpIDI2LjAxMjMgVGoKLTU1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNDIgVEptCi0oY29tcGxldGVseSkgNDMuMTU4IFRqCi0tMjQxIFRKbQotKGFuZCkgMTQuOTQzOSBUagotLTI0MSBUSm0KLShjb21wcikgMjUuNDU0NCBUagotMzcgVEptCi0oZWhlbnNpdmVseSkgNDEuNDk0MiBUagotLTI0MSBUSm0KLSgxMDAlKSAyMy4yNDI3IFRqCi03MiAzNTIuMjE0IFRkCi0odXNlbGVzczspIDMxLjU0MTYgVGoKLS0yNTcgVEptCi0oYSkgNC45ODEzIFRqCi0tMjU1IFRKbQotKHdhc3RlKSAyMi42OTQ4IFRqCi0tMjU1IFRKbQotKG9mKSA3Ljc1MDkgVGoKLS0yNTUgVEptCi0oeW91cikgMTguMjYxNCBUagotLTI1NSBUSm0KLSh0aW1lKSAxNy4xNTU2IFRqCi0xMCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjU2IFRKbQotKG15KSAxMS42MTY0IFRqCi0tMjU1IFRKbQotKHRpbWUpIDE3LjE1NTYgVGoKLTEwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTYgVEptCi0oYW5kKSAxNC45NDM5IFRqCi0tMjU1IFRKbQotKG5ldCkgMTIuMTc0MyBUagotLTI1NSBUSm0KLShiYW5kd2lkdGgpIDQyLjA3MjEgVGoKLVsxIDAgMCAxIDMwMi41NzQgMzUyLjIxNF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC0zMDIuNTc0IC0zNTIuMjE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi0zMDIuNTc0IDM1Mi4yMTQgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTY1MCBUSm0KLShXKSA5LjQwNDY5IFRqCi00MCBUSm0KLShpdGgpIDEwLjUyMDUgVGoKLS0yNTQgVEptCi0obm8pIDkuOTYyNiBUagotLTI1NSBUSm0KLShkZXRhaWxzKSAyNi4wMTIzIFRqCi0tMjU1IFRKbQotKGF0KSA3LjE5MyBUagotLTI1NSBUSm0KLShhbGwsKSAxMi40NTMzIFRqCi0tMjU2IFRKbQotKHRoZXJlJykgMjMuMjMyOCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI1NSBUSm0KLShubykgOS45NjI2IFRqCi0tMjU1IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShheSkgOS40MDQ2OSBUagotLTI1NSBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMjU1IFRKbQotKGNhbikgMTMuODI4MSBUagotLTI1NSBUSm0KLShwb3NzaWJseSkgMzMuMjE1MyBUagotLTI1NSBUSm0KLShiZSkgOS40MDQ2OSBUagotMTUgVEptCi0oZ2luKSAxMi43MzIyIFRqCi03MiAzNDAuMjU5IFRkCi0odG8pIDcuNzUwOSBUagotLTI1MCBUSm0KLShcMDAyZ3VyZSkgMjMuMjQyNyBUagotLTI1MCBUSm0KLShvdXQpIDEyLjczMjIgVGoKLS0yNTAgVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTAgVEptCi0ocHJvYmxlbSkgMzMuMjA1MyBUagotLTI1MCBUSm0KLShpcy4pIDkuMTM1NyBUagotWzEgMCAwIDEgNzIgMzM4LjEwMl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMzI4LjE0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAzMTguMzQxIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKFRoZSkgMTUuNDkxOCBUagotLTMwOSBUSm0KLShydWxlcykgMTkuMzY3MyBUagotLTMwOSBUSm0KLShvZikgOC4yOTg4NSBUagotLTMwOSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMTAgVEptCi0oZykgNC45ODEzIFRqCi01IFRKbQotKGFtZSkgMTYuNTk3NyBUagotLTMwOSBUSm0KLShhcmU6KSAxNC45MzM5IFRqCi0tNDI4IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjdHMsKSAxNy45ODI1IFRqCi0tMzI0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjdHMsKSAxNy45ODI1IFRqCi0tMzI0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFjdHMuKSAxNy45ODI1IFRqCi0tOTc1IFRKbQotKERvbicpIDIwLjQ3MzEgVGoKLTE4IFRKbQotKHQpIDIuNzY5NiBUagotLTMwOSBUSm0KLShvbWl0KSAxOC4yNzE0IFRqCi0tMzA5IFRKbQotKHRoZW0pIDE5LjkyNTIgVGoKLS0zMDkgVEptCi0oYmVjYXVzZSkgMzEuNTMxNiBUagotLTMwOSBUSm0KLSgib2gsKSAxNi41MTggVGoKLS0zMjQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0zMDkgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9uJykgMTMuMjgwMSBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzA5IFRKbQotKGJlKSA5LjQwNDY5IFRqCi0tMzEwIFRKbQotKHJlbGUpIDE0LjkzMzkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYW50Ii4pIDE4LjcyOTcgVGoKLS05NzQgVEptCi0oQXQpIDkuOTYyNiBUagotLTMxMCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDkgVEptCi0oYmFyZSkgMTcuMTQ1NiBUagotNzIgMzA2LjM4NiBUZAotKG1pbmltdW06KSA0MS41MjQxIFRqCi1bMSAwIDAgMSA3MiAzMDYuMjg3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNjAuNzcyMV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjk0ODk5IDAuOTQ4OTkgMC45NzY0NTZdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45NDg5OSAwLjk0ODk5IDAuOTc2NDU2XSBTQwotMCAwIDQ2OCA1OS43NzU4IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNTYuMTg5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTI5Ni45MjJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDI5Ni45MjIgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oTWFjaGluZSkgNDEuODQyOSBUagotLTQyNiBUSm0KLSh0eXBlLikgMjkuODg3OCBUagotLTg1MiBUSm0KLShPcGVyYXRpbmcpIDUzLjc5OCBUagotLTQyNiBUSm0KLShzeXN0ZW0pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0odmVyc2lvbi4pIDQ3LjgyMDUgVGoKLTkwIDI4NC45NjcgVGQKLShFeGFjdCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSh2ZXJzaW9uKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJ6aXAyKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFwoZG8pIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYnppcDIpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oLVZcKS4pIDIzLjkxMDIgVGoKLTkwIDI3My4wMTEgVGQKLShFeGFjdCkgMjkuODg3OCBUagotLTQyNiBUSm0KLSh2ZXJzaW9uKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShjb21waWxlcikgNDcuODIwNSBUagotLTQyNiBUSm0KLSh1c2VkLikgMjkuODg3OCBUagotOTAgMjYxLjA1NiBUZAotKEZsYWdzKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKHBhc3NlZCkgMzUuODY1NCBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oY29tcGlsZXIuKSA1My43OTggVGoKLVsxIDAgMCAxIDcyIDI0NS41MTRdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMTMuNTQ5Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMjM1LjU1Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgMjIzLjU5NyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShIbykgMTIuMTc0MyBUagotMjUgVEptCi0od2UpIDExLjYxNjQgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXIpIDcuNzQwOTQgVGoKLTQwIFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yNTQgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUyIFRKbQotKG1vc3QpIDE5LjM3NzMgVGoKLS0yNTMgVEptCi0oaW1wb3J0YW50KSAzOC43NDQ2IFRqCi0tMjUzIFRKbQotKHNpbmdsZSkgMjMuODAwNyBUagotLTI1MyBUSm0KLSh0aGluZykgMjAuNDgzMSBUagotLTI1MyBUSm0KLSh0KSAyLjc2OTYgVGoKLTEgVEptCi0oaGF0KSAxMi4xNzQzIFRqCi0tMjUzIFRKbQotKHdpbGwpIDE1LjUwMTggVGoKLS0yNTMgVEptCi0oaGVscCkgMTcuMTU1NiBUagotLTI1MyBUSm0KLShtZSkgMTIuMTc0MyBUagotLTI1MyBUSm0KLShpcykgNi42NDUwNSBUagotLTI1MiBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0yNTMgVEptCi0oXDAwMmxlKSAxMi43MzIyIFRqCi0tMjUzIFRKbQotKHRoYXQpIDE0Ljk0MzkgVGoKLS0yNTMgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjUzIFRKbQotKHdlcmUpIDE5LjM1NzMgVGoKLS0yNTMgVEptCi0odHJ5aW5nKSAyMy44MDA3IFRqCi0tMjUyIFRKbQotKHRvKSA3Ljc1MDkgVGoKLS0yNTMgVEptCi0oY29tcHJlc3MpIDM3LjYyODcgVGoKLS0yNTMgVEptCi0ob3IpIDguMjk4ODUgVGoKLS0yNTMgVEptCi0oZGVjb21wcmVzcykgNDcuMDMzNCBUagotNzIgMjExLjY0MSBUZAotKGF0KSA3LjE5MyBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDUgVEptCi0odGltZSkgMTcuNzEzNSBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDQgVEptCi0ocHJvYmxlbSkgMzMuMjA1MyBUagotLTMwNSBUSm0KLShoYXBwZW5lZC4pIDQwLjY2NzMgVGoKLS05NDYgVEptCi0oVykgOS40MDQ2OSBUagotNDAgVEptCi0oaXRob3V0KSAyMy4yNTI3IFRqCi0tMzA0IFRKbQotKHRoYXQsKSAxNy40MzQ2IFRqCi0tMzE4IFRKbQotKG15KSAxMi43MzIyIFRqCi0tMzA1IFRKbQotKGFiaWxpdHkpIDI1LjQ2NDQgVGoKLS0zMDQgVEptCi0odG8pIDcuNzUwOSBUagotLTMwNCBUSm0KLShkbykgOS45NjI2IFRqCi0tMzA1IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5dGhpbmcpIDI1LjQ2NDQgVGoKLS0zMDQgVEptCi0obW9yZSkgMjAuNDczMSBUagotLTMwNCBUSm0KLSh0aGFuKSAxNy4xNTU2IFRqCi0tMzA1IFRKbQotKHNwZWN1bGF0ZSkgMzcuMDcwOCBUagotLTMwNCBUSm0KLShhYm91dCkgMjIuMTM2OSBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDUgVEptCi0oY2F1c2UsKSAyNC42MTc2IFRqCi0tMzE4IFRKbQotKGlzKSA2LjY0NTA1IFRqCi03MiAxOTkuNjg2IFRkCi0obGltaXRlZC4pIDMwLjcyNDcgVGoKLVsxIDAgMCAxIDcyIDE5OS41ODddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE4OS42MjRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDE2NC45MzMgVGQKLS9GMTIyXzAgMjAuNjU4NSBUZgotKDQuNC4pIDM0LjQ1ODQgVGoKLS0yNzggVEptCi0oRGlkKSAzMy4yODA4IFRqCi0tMjc4IFRKbQotKHkpIDExLjQ4NjEgVGoKLTI1IFRKbQotKG91KSAyNS4yNDQ3IFRqCi0tMjc4IFRKbQotKGcpIDEyLjYyMjMgVGoKLS0xMCBUSm0KLShldCkgMTguMzY1NCBUagotLTI3OCBUSm0KLSh0aGUpIDMwLjk4NzcgVGoKLS0yNzggVEptCi0ocmlnaHQpIDQ1LjkwMzIgVGoKLS0yNzggVEptCi0ocGFjKSAzNS41OTQ2IFRqCi0yMCBUSm0KLShrYSkgMjIuOTcyMyBUagotMTAgVEptCi0oZykgMTIuNjIyMyBUagotLTEwIFRKbQotKGU/KSAyNC4xMDg1IFRqCi1bMSAwIDAgMSA3MiAxNjAuMzM3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0xNTAuMzc0XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAxNDMuMDE2IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGJ6aXAyKSAyOS44ODc4IFRqCi1bMSAwIDAgMSAxMDEuODg4IDE0My4wMTZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMTAxLjg4OCAtMTQzLjAxNl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMTA0LjYwMyAxNDMuMDE2IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGlzKSA2LjY0NTA1IFRqCi0tMjcyIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNzMgVEptCi0ocmVzb3VyY2UpIDMzLjc0MzMgVGoKLS0yNzIgVEptCi0oaG9nLikgMTcuNDM0NiBUagotLTM3OCBUSm0KLShJdCkgNi4wODcxNSBUagotLTI3MiBUSm0KLShzb2FrcykgMjIuMTM2OSBUagotLTI3MyBUSm0KLSh1cCkgOS45NjI2IFRqCi0tMjcyIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLS0yNzMgVEptCi0oYW1vdW50cykgMzMuNzYzMyBUagotLTI3MiBUSm0KLShvZikgOC4yOTg4NSBUagotLTI3MyBUSm0KLShDUFUpIDE5LjM3NzMgVGoKLS0yNzIgVEptCi0oYykgNC40MjMzOSBUagotMTUgVEptCi0oeWNsZXMpIDIwLjQ3MzEgVGoKLS0yNzMgVEptCi0oYW5kKSAxNC4zODYgVGoKLS0yNzIgVEptCi0obWVtb3J5KSAzMy4yMDUzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi0tNzU1IFRKbQotKEFsc28sKSAyMS4zMSBUagotLTI3OCBUSm0KLShpdCkgNS41MzkyMSBUagotLTI3MyBUSm0KLShnaSkgNy43NTA5IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVzKSA4LjI5ODg1IFRqCi0tMjcyIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXJ5KSAxMi43MjIyIFRqCi0tMjczIFRKbQotKGxhcikgMTAuNTEwNSBUagotMTggVEptCi0oZ2UpIDkuNDA0NjkgVGoKLS0yNzIgVEptCi0obGF0ZW5jaWVzLikgMzcuMzQ5OCBUagotNzIgMTMxLjA2IFRkCi0oSW4pIDguMjk4ODUgVGoKLS0yNTEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjUxIFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShvcnN0KSAxNC45NDM5IFRqCi0tMjUxIFRKbQotKGNhc2UsKSAxOS42MzYzIFRqCi0tMjUxIFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTI1MSBUSm0KLShjYW4pIDEzLjgyODEgVGoKLS0yNTEgVEptCi0oZmVlZCkgMTcuMTQ1NiBUagotLTI1MSBUSm0KLShtYW4pIDE3LjE1NTYgVGoKLTE1IFRKbQotKHkpIDQuOTgxMyBUagotLTI1MSBUSm0KLShtZSkgMTIuMTc0MyBUagotMTUgVEptCi0oZykgNC45ODEzIFRqCi00IFRKbQotKGFieXQpIDE3LjE1NTYgVGoKLTEgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yNTIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yNTEgVEptCi0odW5jb21wcmVzc2VkKSA1Ni45OTYgVGoKLS0yNTEgVEptCi0oZGF0YSkgMTYuNTk3NyBUagotLTI1MSBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjUxIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjUxIFRKbQotKGJlZm9yZSkgMjUuNDQ0NSBUagotLTI1MSBUSm0KLShnZXR0aW5nKSAyNy42NzYxIFRqCi0tMjUxIFRKbQotKGFuKSA5LjQwNDY5IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLS0yNTEgVEptCi0oY29tcHJlc3NlZCkgNDcuMDMzNCBUagotNzIgMTE5LjEwNSBUZAotKG91dHB1dCwpIDI3Ljk1NTEgVGoKLS0yNTAgVEptCi0oc28pIDguODU2NzUgVGoKLS0yNTAgVEptCi0odGhpcykgMTQuMzk2IFRqCi0tMjUwIFRKbQotKHByb2JhYmx5KSAzNS40MTcgVGoKLS0yNTAgVEptCi0ocnVsZXMpIDE5LjM2NzMgVGoKLS0yNTAgVEptCi0ob3V0KSAxMi43MzIyIFRqCi0tMjUwIFRKbQotKGFwcGxpY2F0aW9ucykgNDguMTQ5MiBUagotLTI1MCBUSm0KLShyZXF1aXJpbmcpIDM2LjUyMjkgVGoKLS0yNTAgVEptCi0oaW50ZXJhY3RpKSAzMi42NDc0IFRqCi0yNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0oYmVoYSkgMTguODA5NCBUagotMjAgVEptCi0odmlvdXIpIDIxLjAzMSBUagotNTUgVEptCi0oLikgMi40OTA2NSBUagotWzEgMCAwIDEgNzIgMTE2Ljk0OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyN10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtMTA2Ljk4Nl0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgOTcuMTg3NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShUaGVzZSkgMjMuNzkwNyBUagotLTMwNCBUSm0KLShhcmVuJykgMjAuNDYzMiBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzA0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGF1bHRzKSAxOC44MTk0IFRqCi0tMzA0IFRKbQotKG9mKSA4LjI5ODg1IFRqCi0tMzA0IFRKbQotKG15KSAxMi43MzIyIFRqCi0tMzA0IFRKbQotKGltcGxlbWVudGF0aW9uLCkgNjUuMDM1OSBUagotLTMxNyBUSm0KLShJKSAzLjMxNzU1IFRqCi0tMzA0IFRKbQotKGhvcGUsKSAyMS44NTc5IFRqCi0tMzE4IFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTMwNCBUSm0KLShtb3JlKSAyMC40NzMxIFRqCi0tMzA0IFRKbQotKGFuKSA5LjQwNDY5IFRqCi0tMzA0IFRKbQotKGludHJpbnNpYykgMzIuNjU3NCBUagotLTMwNCBUSm0KLShwcm9wZXJ0eSkgMzMuNzUzMyBUagotLTMwNCBUSm0KLShvZikgOC4yOTg4NSBUagotLTMwNCBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDQgVEptCi0oQnVycm8pIDIzLjI0MjcgVGoKLTI1IFRKbQotKHdzLVdoZWVsZXIpIDQ4LjEyOTMgVGoKLS0zMDQgVEptCi0odHJhbnNmb3JtKSAzOC43MzQ2IFRqCi03MiA4NS4yMzIzIFRkCi0oXCh1bmZvcnR1bmF0ZWx5XCkuKSA2Mi44MDQyIFRqCi0tNjIwIFRKbQotKE1heWJlKSAyNy42NjYxIFRqCi0tMjUwIFRKbQotKHRoaXMpIDE0LjM5NiBUagotLTI1MCBUSm0KLShpc24nKSAxNC45NDM5IFRqCi0xOCBUSm0KLSh0KSAyLjc2OTYgVGoKLS0yNTAgVEptCi0od2hhdCkgMTkuMzY3MyBUagotLTI1MCBUSm0KLSh5b3UpIDE0Ljk0MzkgVGoKLS0yNTAgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKGFudC4pIDE0LjY2NDkgVGoKLVsxIDAgMCAxIDcyIDgzLjA3NTVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yMi4yNjExXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDMzKSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDM3IDM3Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMTYuMzI4IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgyLjQgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC43MjggNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShNaXNjZWxsYW5lYSkgNDguMTM5MyBUagotWzEgMCAwIDEgMjY2LjA3MSA3NDkuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTcuMDkzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC01NDAgLTc0MS41NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSWYpIDYuNjM1MDkgVGoKLS0yNzUgVEptCi0oeW91KSAxNC45NDM5IFRqCi0tMjc0IFRKbQotKHcpIDcuMTkzIFRqCi0xMCBUSm0KLShhbnQpIDEyLjE3NDMgVGoKLS0yNzUgVEptCi0oYSkgNC40MjMzOSBUagotLTI3NCBUSm0KLShjb21wcmVzc29yKSA0NS45Mjc2IFRqCi0tMjc1IFRKbQotKGFuZC9vcikgMjUuNDU0NCBUagotLTI3NSBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi0tMjc0IFRKbQotKHdoaWNoKSAyNC4zNDg2IFRqCi0tMjc1IFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjc0IFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFzdGVyKSAxOC44MDk0IFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjgxIFRKbQotKHVzZXMpIDE3LjE1NTYgVGoKLS0yNzUgVEptCi0obGVzcykgMTQuOTQzOSBUagotLTI3NCBUSm0KLShtZW1vcnkpIDMzLjIwNTMgVGoKLS0yNzUgVEptCi0oYikgNC45ODEzIFRqCi0yMCBUSm0KLSh1dCkgNy43NTA5IFRqCi0tMjc1IFRKbQotKGdldHMpIDE2LjA0OTcgVGoKLS0yNzQgVEptCi0ocHJldHR5KSAyMy4yNDI3IFRqCi0tMjc1IFRKbQotKGdvb2QpIDE5LjkyNTIgVGoKLS0yNzQgVEptCi0oY29tcHJlc3Npb24sKSA1Mi44NTE2IFRqCi0tMjgxIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjc1IFRKbQotKGhhcykgMTMuMjgwMSBUagotNzIgNjk4LjA4MiBUZAotKG1pbmltYWwpIDMzLjIxNTMgVGoKLS0yODggVEptCi0obGF0ZW5jKSAyMy43OTA3IFRqCi0xNSBUSm0KLSh5KSA0Ljk4MTMgVGoKLTY1IFRKbQotKCwpIDIuNDkwNjUgVGoKLS0yOTcgVEptCi0oY29uc2lkZXIpIDMzLjc1MzMgVGoKLS0yODggVEptCi0oSmVhbi1sb3VwKSAzOC43MzQ2IFRqCi0tMjg4IFRKbQotKEdhaWxseScpIDI4LjIyNCBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI4OCBUSm0KLShhbmQpIDE0LjM4NiBUagotLTI4OCBUSm0KLShNYXJrKSAyMS41NzkgVGoKLS0yODggVEptCi0oQWRsKSAxNC45NDM5IFRqCi0xIFRKbQotKGVyJykgMTEuMDU4NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI4OCBUSm0KLSh3KSA3LjE5MyBUagotMTAgVEptCi0ob3JrLCkgMTUuNzcwOCBUagotWzEgMCAwIDEgMzUzLjg3OSA2OTguMDgyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTM1My44NzkgLTY5OC4wODJdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTM1My44NzkgNjk4LjA4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLSh6bGliLTEuMi4xKSA1OS43NzU2IFRqCi1bMSAwIDAgMSA0MTMuNjU1IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDEzLjY1NSAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDE2LjUyMyA2OTguMDgyIFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKGFuZCkgMTQuMzg2IFRqCi1bMSAwIDAgMSA0MzMuNzc3IDY5OC4wODJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDMzLjc3NyAtNjk4LjA4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDMzLjc3NyA2OTguMDgyIFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKGd6aXAtMS4yLjQpIDU5Ljc3NTYgVGoKLVsxIDAgMCAxIDQ5My41NTMgNjk4LjA4Ml0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00OTMuNTUzIC02OTguMDgyXSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi00OTMuNTUzIDY5OC4wODIgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oLikgMi40OTA2NSBUagotLTg0NyBUSm0KLShMb29rKSAyMS4wMzEgVGoKLS0yODggVEptCi0oZm9yKSAxMS42MTY0IFRqCi03MiA2ODYuMTI3IFRkCi0odGhlbSkgMTkuOTI1MiBUagotLTI1MCBUSm0KLShhdCkgNy4xOTMgVGoKLS0yNTAgVEptCi0oaHR0cDovL3d3dykgNDUuMzg5NiBUagotNjUgVEptCi0oLnpsaWIpIDE3LjQzNDYgVGoKLTQwIFRKbQotKC5vcikgMTAuNzg5NSBUagotMTggVEptCi0oZykgNC45ODEzIFRqCi0tMjUwIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tMjUwIFRKbQotKGh0dHA6Ly93d3cpIDQ1LjM4OTYgVGoKLTY1IFRKbQotKC5nemlwLm9yKSAzMC40MzU3IFRqCi0xOCBUSm0KLShnKSA0Ljk4MTMgVGoKLS0yNTAgVEptCi0ocmVzcGVjdGkpIDMwLjk4MzcgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZWx5KSAxMi4xNzQzIFRqCi02NSBUSm0KLSguKSAyLjQ5MDY1IFRqCi1bMSAwIDAgMSA3MiA2ODMuOTddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY3NC4wMDhdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY2NC4yMDkgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRikgNS41MzkyMSBUagotMTUgVEptCi0ob3IpIDguMjk4ODUgVGoKLS01ODIgVEptCi0oc29tZXRoaW5nKSA0MS41MTQyIFRqCi0tNTgzIFRKbQotKGYpIDMuMzE3NTUgVGoKLTEwIFRKbQotKGFzdGVyKSAxOC44MDk0IFRqCi0tNTgyIFRKbQotKGFuZCkgMTQuMzg2IFRqCi0tNTgyIFRKbQotKGxpZ2h0ZXIpIDI2LjAxMjMgVGoKLS01ODMgVEptCi0oc3RpbGwsKSAxNy40NDQ1IFRqCi0tNjY1IFRKbQotKHlvdSkgMTQuOTQzOSBUagotLTU4MiBUSm0KLShtaWdodCkgMjMuMjUyNyBUagotLTU4MyBUSm0KLSh0cnkpIDExLjA2ODQgVGoKLS01ODIgVEptCi0oTWFya3VzKSAzMC40MzU3IFRqCi0tNTgyIFRKbQotKEYpIDUuNTM5MjEgVGoKLS01ODIgVEptCi0oWCkgNy4xOTMgVGoKLS01ODIgVEptCi0oSikgMy44NzU0NSBUagotLTU4MiBUSm0KLShPYmVyaHVtZXInKSA0OC42ODcyIFRqCi01NSBUSm0KLShzKSAzLjg3NTQ1IFRqCi1bMSAwIDAgMSA0MzcuNDMzIDY2NC4yMDldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDM3LjQzMyAtNjY0LjIwOV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNDM3LjQzMyA2NjQuMjA5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKExaTykgMTcuOTMyNyBUagotWzEgMCAwIDEgNDU1LjM2NSA2NjQuMjA5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ1NS4zNjUgLTY2NC4yMDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ2MS4xNjMgNjY0LjIwOSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShyZWFsLXRpbWUpIDM1Ljk2NSBUagotLTU4MiBUSm0KLShjb21wcmVzLSkgMzcuMDcwOCBUagotNzIgNjUyLjI1NCBUZAotKHNpb24vZGVjb21wcmVzc2lvbikgNzkuMTQyOSBUagotLTI1MCBUSm0KLShsaWJyYXJ5KSAyNi41NjAzIFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjUwIFRKbQotKGF0KSA3LjE5MyBUagotLTI1MCBUSm0KLShodHRwOi8vd3d3KSA0NS4zODk2IFRqCi02NSBUSm0KLSgub2Jlcmh1bWVyKSA0NS42NDg2IFRqCi01NSBUSm0KLSguY29tL29wZW5zb3VyY2UuKSA3MC4yNzYyIFRqCi1bMSAwIDAgMSA3MiA2NTAuMDk3XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtOS45NjI2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC02NDAuMTM1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiA2MTcuNTAxIFRkCi0vRjEyMl8wIDIwLjY1ODUgVGYKLSg0LjUuKSAzNC40NTg0IFRqCi0tMjc4IFRKbQotKEZ1cikgMzMuMjgwOCBUagotLTIwIFRKbQotKHRoZXIpIDM5LjAyMzkgVGoKLS0yNzggVEptCi0oUmVhZGluZykgODEuNDk3OCBUagotWzEgMCAwIDEgNzIgNjEyLjkwNV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTkuOTYyNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC03MiAtNjAyLjk0Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNzIgNTk1LjU4MyBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShiemlwMikgMjkuODg3OCBUagotWzEgMCAwIDEgMTAxLjg4OCA1OTUuNTgzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTEwMS44ODggLTU5NS41ODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTEwNC45MjMgNTk1LjU4MyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShpcykgNi42NDUwNSBUagotLTMwNSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0zMDQgVEptCi0ocmVzZWFyY2gpIDMzLjE4NTQgVGoKLS0zMDUgVEptCi0odykgNy4xOTMgVGoKLTEwIFRKbQotKG9yaywpIDE1Ljc3MDggVGoKLS0zMTggVEptCi0oaW4pIDcuNzUwOSBUagotLTMwNSBUSm0KLSh0aGUpIDEyLjE3NDMgVGoKLS0zMDQgVEptCi0oc2Vuc2UpIDIxLjU3OSBUagotLTMwNSBUSm0KLSh0aGF0KSAxNC45NDM5IFRqCi0tMzA0IFRKbQotKGl0KSA1LjUzOTIxIFRqCi0tMzA1IFRKbQotKGRvZXNuJykgMjYuNTYwMyBUagotMTggVEptCi0odCkgMi43Njk2IFRqCi0tMzA1IFRKbQotKHByZXNlbnQpIDI4Ljc3MiBUagotLTMwNCBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMzA1IFRKbQotKG5lKSA5LjQwNDY5IFRqCi0yNSBUSm0KLSh3KSA3LjE5MyBUagotLTMwNCBUSm0KLShpZGVhcy4pIDIyLjk2MzggVGoKLS00NzQgVEptCi0oUmF0aGVyKSAyNi41NjAzIFRqCi00MCBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMzE4IFRKbQotKGl0JykgOC44NTY3NSBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTMwNSBUSm0KLShhbikgOS40MDQ2OSBUagotLTMwNSBUSm0KLShlbmdpbmVlcmkpIDM3LjA3MDggVGoKLTEgVEptCi0obmcpIDkuOTYyNiBUagotLTMwNSBUSm0KLShlKSA0LjQyMzM5IFRqCi0xNSBUSm0KLSh4KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGVyY2lzZSkgMjMuMjMyOCBUagotNzIgNTgzLjYyOCBUZAotKGJhc2VkKSAyMi42ODQ4IFRqCi0tMjUwIFRKbQotKG9uKSA5Ljk2MjYgVGoKLS0yNTAgVEptCi0oZSkgNC40MjMzOSBUagotMTUgVEptCi0oeGlzdGluZykgMjcuMTI4MiBUagotLTI1MCBUSm0KLShpZGVhcy4pIDIyLjk2MzggVGoKLVsxIDAgMCAxIDcyIDU4MS40NzFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC05Ljk2MjddIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTU3MS41MDldIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDU2MS43MSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShGKSA1LjUzOTIxIFRqCi0xNSBUSm0KLShvdXIpIDEzLjI4MDEgVGoKLS0yNTAgVEptCi0oZG9jdW1lbnRzKSA0My4xNjc5IFRqCi0tMjUwIFRKbQotKGRlc2NyaWJlKSAzMy4xOTU0IFRqCi0tMjUwIFRKbQotKGVzc2VudGlhbGx5KSA0Mi4wNjIxIFRqCi0tMjUwIFRKbQotKGFsbCkgOS45NjI2IFRqCi0tMjUwIFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTI1MCBUSm0KLShpZGVhcykgMjAuNDczMSBUagotLTI1MCBUSm0KLShiZWhpbmQpIDI3LjExODIgVGoKLVsxIDAgMCAxIDI5OC43NDcgNTYxLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTI5OC43NDcgLTU2MS43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMjk4Ljc0NyA1NjEuNzEgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oYnppcDIpIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDMyOC42MzUgNTYxLjcxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTMyOC42MzUgLTU2MS43MV0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotMzI4LjYzNSA1NjEuNzEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oOikgMi43Njk2IFRqCi1bMSAwIDAgMSA3MiA1NTkuNTU0XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtMjk5Ljg3NV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gU0MKLTAgMCA0NjggMjk4Ljg3OSByZQotZgotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDI5NS4yOTNdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxOCAtOC4zNjg2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTkwIC01NTAuMTg5XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi05MCA1NTAuMTg5IFRkCi0vRjEzNF8wIDkuOTYyNiBUZgotKE1pY2hhZWwpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oQnVycm93cykgNDEuODQyOSBUagotLTQyNiBUSm0KLShhbmQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oRC4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oSi4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oV2hlZWxlcjopIDQ3LjgyMDUgVGoKLTk4LjQ4NzkgNTM4LjIzNCBUZAotKCJBKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKGJsb2NrLXNvcnRpbmcpIDc3LjcwODMgVGoKLS00MjYgVEptCi0obG9zc2xlc3MpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oZGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShjb21wcmVzc2lvbikgNjUuNzUzMiBUagotLTQyNiBUSm0KLShhbGdvcml0aG0iKSA1OS43NzU2IFRqCi0xMDIuNzMyIDUyNi4yNzggVGQKLSgxMHRoKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKE1heSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgxOTk0LikgMjkuODg3OCBUagotMTAyLjczMiA1MTQuMzIzIFRkCi0oRGlnaXRhbCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShTUkMpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oUmVzZWFyY2gpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oUmVwb3J0KSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKDEyNC4pIDIzLjkxMDIgVGoKLTEwMi43MzIgNTAyLjM2OCBUZAotKGZ0cDovL2Z0cC5kaWdpdGFsLmNvbS9wdWIvREVDL1NSQy9yZXNlYXJjaC1yZXBvcnRzL1NSQy0xMjQucHMuZ1wKLXopIDM4Mi41NjQgVGoKLTEwMi43MzIgNDkwLjQxMyBUZAotKElmKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHlvdSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShoYXZlKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKHRyb3VibGUpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oZmluZGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLShpdCwpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0odHJ5KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKHNlYXJjaGluZykgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGF0KSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotMTAyLjczMiA0NzguNDU4IFRkCi0oTmV3KSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFplYWxhbmQpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oRGlnaXRhbCkgNDEuODQyOSBUagotLTQyNiBUSm0KLShMaWJyYXJ5LCkgNDcuODIwNSBUagotLTQyNiBUSm0KLShodHRwOi8vd3d3Lm56ZGwub3JnLikgMTE5LjU1MSBUagotOTAgNDU0LjU0NyBUZAotKERhbmllbCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShTLikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShIaXJzY2hiZXJnKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKGFuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShEZWJyYSkgMjkuODg3OCBUagotLTQyNiBUSm0KLShBLikgMTEuOTU1MSBUagotLTQyNiBUSm0KLShMZUxld2VyKSA0MS44NDI5IFRqCi05OC40ODc5IDQ0Mi41OTIgVGQKLSgiRWZmaWNpZW50KSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKERlY29kaW5nKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKFByZWZpeCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShDb2RlcyIpIDM1Ljg2NTQgVGoKLTEwMi43MzIgNDMwLjYzNyBUZAotKENvbW11bmljYXRpb25zKSA4My42ODU4IFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShBQ00sKSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKEFwcmlsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKDE5OTAsKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFZvbCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgzMywpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oTnVtYmVyKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKDQuKSAxMS45NTUxIFRqCi0xMDIuNzMyIDQxOC42ODIgVGQKLShZb3UpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0obWlnaHQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oYmUpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oYWJsZSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLSh0bykgMTEuOTU1MSBUagotLTQyNiBUSm0KLShnZXQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oYW4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oZWxlY3Ryb25pYykgNTkuNzc1NiBUagotLTQyNiBUSm0KLShjb3B5KSAyMy45MTAyIFRqCi0tNDI2IFRKbQotKG9mKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoaXMpIDIzLjkxMDIgVGoKLTEwMi43MzIgNDA2LjcyNyBUZAotKGZyb20pIDIzLjkxMDIgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEFDTSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShEaWdpdGFsKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKExpYnJhcnkuKSA0Ny44MjA1IFRqCi05MCAzODIuODE2IFRkCi0oRGF2aWQpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oSi4pIDExLjk1NTEgVGoKLS00MjYgVEptCi0oV2hlZWxlcikgNDEuODQyOSBUagotMTAyLjczMiAzNzAuODYxIFRkCi0oUHJvZ3JhbSkgNDEuODQyOSBUagotLTQyNiBUSm0KLShicmVkMy5jKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGFuZCkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShhY2NvbXBhbnlpbmcpIDcxLjczMDcgVGoKLS00MjYgVEptCi0oZG9jdW1lbnQpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0oYnJlZDMucHMuKSA1My43OTggVGoKLTEwMi43MzIgMzU4LjkwNiBUZAotKFRoaXMpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oY29udGFpbnMpIDQ3LjgyMDUgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKGlkZWEpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oYmVoaW5kKSAzNS44NjU0IFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShtdWx0aS10YWJsZSkgNjUuNzUzMiBUagotLTQyNiBUSm0KLShIdWZmbWFuKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKGNvZGluZykgMzUuODY1NCBUagotLTQyNiBUSm0KLShzY2hlbWUuKSA0MS44NDI5IFRqCi0xMDIuNzMyIDM0Ni45NTEgVGQKLShmdHA6Ly9mdHAuY2wuY2FtLmFjLnVrL3VzZXJzL2RqdzMvKSAyMDMuMjM3IFRqCi05MCAzMjMuMDQxIFRkCi0oSm9uKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKEwuKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKEJlbnRsZXkpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oYW5kKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFJvYmVydCkgMzUuODY1NCBUagotLTQyNiBUSm0KLShTZWRnZXdpY2spIDUzLjc5OCBUagotOTguNDg3OSAzMTEuMDg1IFRkCi0oIkZhc3QpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oQWxnb3JpdGhtcykgNTkuNzc1NiBUagotLTQyNiBUSm0KLShmb3IpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oU29ydGluZykgNDEuODQyOSBUagotLTQyNiBUSm0KLShhbmQpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oU2VhcmNoaW5nKSA1My43OTggVGoKLS00MjYgVEptCi0oU3RyaW5ncyIpIDQ3LjgyMDUgVGoKLTEwMi43MzIgMjk5LjEzIFRkCi0oQXZhaWxhYmxlKSA1My43OTggVGoKLS00MjYgVEptCi0oZnJvbSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShTZWRnZXdpY2sncykgNjUuNzUzMiBUagotLTQyNiBUSm0KLSh3ZWIpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0ocGFnZSwpIDI5Ljg4NzggVGoKLTEwMi43MzIgMjg3LjE3NSBUZAotKHd3dy5jcy5wcmluY2V0b24uZWR1L35ycykgMTQzLjQ2MSBUagotWzEgMCAwIDEgNzIgMjU5LjY3OF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDQ2OCAzLjU4NjZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDY4IC0xMy41NDkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTcyIC0yNDkuNzE1XSBjbQotWzEgMCAwIDEgMCAwXSBUbQotMCAwIFRkCi03MiAyMzcuNzYgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjM5IFRKbQotKGZvbGxvKSAxOC44MTk0IFRqCi0yNSBUSm0KLSh3aW5nKSAxOS45MjUyIFRqCi0tMjM4IFRKbQotKHBhcGVyKSAyMi4xMjY5IFRqCi0tMjM5IFRKbQotKGdpKSA3Ljc1MDkgVGoKLTI1IFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXMpIDguMjk4ODUgVGoKLS0yMzkgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhbHVhYmxlKSAyOC43NzIgVGoKLS0yMzggVEptCi0oYWRkaXRpb25hbCkgMzkuODUwNCBUagotLTIzOSBUSm0KLShpbnNpZ2h0cykgMzEuMDAzNiBUagotLTIzOCBUSm0KLShpbnRvKSAxNS41MDE4IFRqCi0tMjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzOSBUSm0KLShhbGdvcml0aG0sKSA0MS4yMzUyIFRqCi0tMjQxIFRKbQotKGIpIDQuOTgxMyBUagotMjAgVEptCi0odXQpIDcuNzUwOSBUagotLTIzOCBUSm0KLShpcykgNi42NDUwNSBUagotLTIzOSBUSm0KLShub3QpIDEyLjczMjIgVGoKLS0yMzkgVEptCi0oaW1tZWRpKSAzMC40NDU3IFRqCi0xIFRKbQotKGF0ZWx5KSAxOS4zNjczIFRqCi0tMjM5IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIzOSBUSm0KLShiYXNpcykgMTkuOTI1MiBUagotLTIzOCBUSm0KLShvZikgOC4yOTg4NSBUagotLTIzOSBUSm0KLShhbikgOS40MDQ2OSBUagotMTUgVEptCi0oeSkgNC45ODEzIFRqCi0tMjM5IFRKbQotKGNvZGUpIDE4LjgwOTQgVGoKLTcyIDIyNS44MDUgVGQKLSh1c2VkKSAxOC4yNjE0IFRqCi0tMjUwIFRKbQotKGluKSA3Ljc1MDkgVGoKLS0yNTAgVEptCi0oYnppcDIuKSAyNC42Mjc1IFRqCi1bMSAwIDAgMSA3MiAyMjMuNjQ4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAtNzIuNzI3M10gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswLjkyOTM5OCAwLjk2ODU5NyAwLjk1Njg0OF0gU0MKLTAgMCA0NjggNzEuNzMxIHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNjguMTQ0NF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTIxNC4yODNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDIxNC4yODMgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oUGV0ZXIpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oRmVud2ljazopIDQ3LjgyMDUgVGoKLTEwMi43MzIgMjAyLjMyOCBUZAotKEJsb2NrKSAyOS44ODc4IFRqCi0tNDI2IFRKbQotKFNvcnRpbmcpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oVGV4dCkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShDb21wcmVzc2lvbikgNjUuNzUzMiBUagotMTAyLjczMiAxOTAuMzczIFRkCi0oUHJvY2VlZGluZ3MpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKDE5dGgpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oQXVzdHJhbGFzaWFuKSA3MS43MzA3IFRqCi0tNDI2IFRKbQotKENvbXB1dGVyKSA0Ny44MjA1IFRqCi0tNDI2IFRKbQotKFNjaWVuY2UpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oQ29uZmVyZW5jZSwpIDY1Ljc1MzIgVGoKLTExMS4yMiAxNzguNDE4IFRkCi0oTWVsYm91cm5lLCkgNTkuNzc1NiBUagotLTQyNiBUSm0KLShBdXN0cmFsaWEuKSA1OS43NzU2IFRqCi0tODUyIFRKbQotKEphbikgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgzMSkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgtKSA1Ljk3NzU2IFRqCi0tNDI2IFRKbQotKEZlYikgMTcuOTMyNyBUagotLTQyNiBUSm0KLSgyLCkgMTEuOTU1MSBUagotLTQyNiBUSm0KLSgxOTk2LikgMjkuODg3OCBUagotMTAyLjczMiAxNjYuNDYzIFRkCi0oZnRwOi8vZnRwLmNzLmF1Y2tsYW5kLmFjLm56L3B1Yi9wZXRlci1mL0FDU0M5NnBhcGVyLnBzKSAzMjIuNzg4IFRqCi1bMSAwIDAgMSA3MiAxNTAuOTIxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTE0MC45NThdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDEyOS4wMDMgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oSykgNy4xOTMgVGoKLTE1IFRKbQotKHVuaWhpaykgMjUuNDY0NCBUagotMTAgVEptCi0obykgNC45ODEzIFRqCi0tMjUwIFRKbQotKFNhZGFrYW5lJykgNDEuNDk0MiBUagotNTUgVEptCi0ocykgMy44NzU0NSBUagotLTI1MCBUSm0KLShzb3J0aW5nKSAyNy42NzYxIFRqCi0tMjUwIFRKbQotKGFsZ29yaXRobSwpIDQxLjIzNTIgVGoKLS0yNTAgVEptCi0obWVudGlvbmVkKSA0Mi4wNjIxIFRqCi0tMjUwIFRKbQotKGFibykgMTQuMzg2IFRqCi0xNSBUSm0KLSh2KSA0Ljk4MTMgVGoKLTE1IFRKbQotKGUsKSA2LjkxNDA0IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLTIwIFRKbQotKHYpIDQuOTgxMyBUagotMjUgVEptCi0oYWlsYWJsZSkgMjYuNTYwMyBUagotLTI1MCBUSm0KLShmcm9tOikgMjIuMTM2OSBUagotWzEgMCAwIDEgNzIgMTI2Ljg0Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTM2Ljg2MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMC45MjkzOTggMC45Njg1OTcgMC45NTY4NDhdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMC45MjkzOTggMC45Njg1OTcgMC45NTY4NDhdIFNDCi0wIDAgNDY4IDM1Ljg2NTUgcmUKLWYKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCAzMi4yNzg5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtMTE3LjQ4Ml0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgMTE3LjQ4MiBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShodHRwOi8vbmFvbWkuaXMucy51LXRva3lvLmFjLmpwL35zYWRhL3BhcGVycy9TYWRhOThiLnBzLmd6KSAzNDYuNjk4IFRqCi1bMSAwIDAgMSA3MiA4OS45ODQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0yOS4xNzAyXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDM3NC4zOTQgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0MC41NzI2IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNDkzLjg0MSAtNTAuOTUxNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotNTM0LjQxNCA1MC45NTE0IFRkCi0vRjEzMF8wIDkuOTYyNiBUZgotKDM0KSA5Ljk2MjYgVGoKLVsxIDAgMCAxIDQ1My4yNjkgNTAuODUxOF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDkzLjU5ODUgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDYuMjc2NSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVEKLXNob3dwYWdlCi0lJVBhZ2VUcmFpbGVyCi1wZGZFbmRQYWdlCi0lJVBhZ2U6IDM4IDM4Ci0lJUJlZ2luUGFnZVNldHVwCi0lJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQKLXBkZlN0YXJ0UGFnZQotMCAwIDYxMiA3OTIgcmUgVwotJSVFbmRQYWdlU2V0dXAKLVtdIDAgZAotMSBpCi0wIGoKLTAgSgotMTAgTQotMSB3Ci0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1mYWxzZSBvcAotZmFsc2UgT1AKLTAgMCA2MTIgNzkyIHJlCi1XCi1xCi1bMSAwIDAgMSA3MiA3NDEuNTU0XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMS44OTI5IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMTQuNDQ1OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4Ny4xOTcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDIuNDkwNyAtNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMCA2Ljg1NDFdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAxMTYuMzI4IC02Ljc1NDZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtMzgyLjQgLTc0OS4yNDVdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTQ5OC43MjggNzQ5LjI0NSBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLShNaXNjZWxsYW5lYSkgNDguMTM5MyBUagotWzEgMCAwIDEgMjY2LjA3MSA3NDkuMTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMjgwLjc5NiAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ3Mi45NzQgLTcuMDkzNl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgLTAuNDk4MV0gY20KLXEKLVtdIDAgZAotMCBKCi0wLjQ5ODEgdwotMCAwLjI0OTEgbQotNDc1LjQ2NSAwLjI0OTEgbAotUwotUQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDc5LjI1MSAwXSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgLTEzLjE0MzYgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC01NDAgLTc0MS41NTRdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDcxMC4wMzcgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oVGhlKSAxNS40OTE4IFRqCi0tMjUwIFRKbQotKE1hbmJlcikgMzAuOTgzNyBUagotMjAgVEptCi0oLU15ZXJzKSAyOC43NzIgVGoKLS0yNTAgVEptCi0oc3VmKSAxMi4xNzQzIFRqCi0yNSBUSm0KLShcMDAyeCkgMTAuNTIwNSBUagotLTI1MCBUSm0KLShhcnJheSkgMjAuNDYzMiBUagotLTI1MCBUSm0KLShjb25zdHJ1Y3Rpb24pIDQ5LjI1NTEgVGoKLS0yNTAgVEptCi0oYWxnb3JpdGhtKSAzOC43NDQ2IFRqCi0tMjUwIFRKbQotKGlzKSA2LjY0NTA1IFRqCi0tMjUwIFRKbQotKGRlc2NyaWJlZCkgMzguMTc2NyBUagotLTI1MCBUSm0KLShpbikgNy43NTA5IFRqCi0tMjUwIFRKbQotKGEpIDQuNDIzMzkgVGoKLS0yNTAgVEptCi0ocGFwZXIpIDIyLjEyNjkgVGoKLS0yNTAgVEptCi0oYSkgNC40MjMzOSBUagotMjAgVEptCi0odikgNC45ODEzIFRqCi0yNSBUSm0KLShhaWxhYmxlKSAyNi41NjAzIFRqCi0tMjUwIFRKbQotKGZyb206KSAyMi4xMzY5IFRqCi1bMSAwIDAgMSA3MiA3MDcuODhdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0zNi44NjE4XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBTQwotMCAwIDQ2OCAzNS44NjU1IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMzIuMjc4OV0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDE4IC04LjM2ODVdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtOTAgLTY5OC41MTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTkwIDY5OC41MTYgVGQKLS9GMTM0XzAgOS45NjI2IFRmCi0oaHR0cDovL3d3dy5jcy5hcml6b25hLmVkdS9wZW9wbGUvZ2VuZS9QQVBFUlMvc3VmZml4LnBzKSAzMjIuNzg4IFRqCi1bMSAwIDAgMSA3MiA2NzEuMDE5XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDY4IDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC00NjggLTEzLjU0OTJdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAtNzIgLTY2MS4wNTZdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTcyIDY0OS4xMDEgVGQKLS9GMTMwXzAgOS45NjI2IFRmCi0oRmluYWxseSkgMjguMjM0IFRqCi02NSBUSm0KLSgsKSAyLjQ5MDY1IFRqCi0tMjI3IFRKbQotKHRoZSkgMTIuMTc0MyBUagotLTIyMSBUSm0KLShmb2xsbykgMTguODE5NCBUagotMjUgVEptCi0od2luZykgMTkuOTI1MiBUagotLTIyMiBUSm0KLShwYXBlcnMpIDI2LjAwMjQgVGoKLS0yMjEgVEptCi0oZG9jdW1lbnQpIDM5LjI5MjUgVGoKLS0yMjEgVEptCi0oc29tZSkgMjEuMDMxIFRqCi0tMjIyIFRKbQotKGluKSA3Ljc1MDkgVGoKLTQwIFRKbQotKHYpIDQuOTgxMyBUagotMTUgVEptCi0oZXN0aWcpIDE4LjgxOTQgVGoKLTUgVEptCi0oYXRpb25zKSAyMy44MDA3IFRqCi0tMjIxIFRKbQotKEkpIDMuMzE3NTUgVGoKLS0yMjEgVEptCi0obWFkZSkgMjEuNTc5IFRqCi0tMjIyIFRKbQotKGludG8pIDE1LjUwMTggVGoKLS0yMjEgVEptCi0odGhlKSAxMi4xNzQzIFRqCi0tMjIxIFRKbQotKHBlcmZvcm1hbmNlKSA1MC4zNDEgVGoKLS0yMjIgVEptCi0ob2YpIDguMjk4ODUgVGoKLS0yMjEgVEptCi0oc29ydGluZykgMjcuNjc2MSBUagotLTIyMSBUSm0KLShhbmQpIDE0LjM4NiBUagotLTIyMiBUSm0KLShkZWNvbXByZXNzaW9uKSA1OS43NjU2IFRqCi03MiA2MzcuMTQ2IFRkCi0oYWxnb3JpdGhtczopIDQ1LjM4OTYgVGoKLVsxIDAgMCAxIDcyIDYzNC45ODldIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIC0xMzIuNTAzXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAuOTI5Mzk4IDAuOTY4NTk3IDAuOTU2ODQ4XSBTQwotMCAwIDQ2OCAxMzEuNTA3IHJlCi1mCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAwIDMuNTg2Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgMTI3LjkyXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMTggLTguMzY4Nl0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIC05MCAtNjI1LjYyNF0gY20KLVsxIDAgMCAxIDAgMF0gVG0KLTAgMCBUZAotOTAgNjI1LjYyNCBUZAotL0YxMzRfMCA5Ljk2MjYgVGYKLShKdWxpYW4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oU2V3YXJkKSAzNS44NjU0IFRqCi0xMDIuNzMyIDYxMy42NjkgVGQKLShPbikgMTEuOTU1MSBUagotLTQyNiBUSm0KLSh0aGUpIDE3LjkzMjcgVGoKLS00MjYgVEptCi0oUGVyZm9ybWFuY2UpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0oQldUKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKFNvcnRpbmcpIDQxLjg0MjkgVGoKLS00MjYgVEptCi0oQWxnb3JpdGhtcykgNTkuNzc1NiBUagotMTAyLjczMiA2MDEuNzE0IFRkCi0oUHJvY2VlZGluZ3MpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKElFRUUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oRGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShDb21wcmVzc2lvbikgNjUuNzUzMiBUagotLTQyNiBUSm0KLShDb25mZXJlbmNlKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKDIwMDApIDIzLjkxMDIgVGoKLTExMS4yMiA1ODkuNzU5IFRkCi0oU25vd2JpcmQsKSA1My43OTggVGoKLS00MjYgVEptCi0oVXRhaC4pIDI5Ljg4NzggVGoKLS04NTIgVEptCi0oMjgtMzApIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oTWFyY2gpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oMjAwMC4pIDI5Ljg4NzggVGoKLTkwIDU2NS44NDggVGQKLShKdWxpYW4pIDM1Ljg2NTQgVGoKLS00MjYgVEptCi0oU2V3YXJkKSAzNS44NjU0IFRqCi0xMDIuNzMyIDU1My44OTMgVGQKLShTcGFjZS10aW1lKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKFRyYWRlb2ZmcykgNTMuNzk4IFRqCi0tNDI2IFRKbQotKGluKSAxMS45NTUxIFRqCi0tNDI2IFRKbQotKHRoZSkgMTcuOTMyNyBUagotLTQyNiBUSm0KLShJbnZlcnNlKSA0MS44NDI5IFRqCi0tNDI2IFRKbQotKEItVykgMTcuOTMyNyBUagotLTQyNiBUSm0KLShUcmFuc2Zvcm0pIDUzLjc5OCBUagotMTAyLjczMiA1NDEuOTM4IFRkCi0oUHJvY2VlZGluZ3MpIDY1Ljc1MzIgVGoKLS00MjYgVEptCi0ob2YpIDExLjk1NTEgVGoKLS00MjYgVEptCi0odGhlKSAxNy45MzI3IFRqCi0tNDI2IFRKbQotKElFRUUpIDIzLjkxMDIgVGoKLS00MjYgVEptCi0oRGF0YSkgMjMuOTEwMiBUagotLTQyNiBUSm0KLShDb21wcmVzc2lvbikgNjUuNzUzMiBUagotLTQyNiBUSm0KLShDb25mZXJlbmNlKSA1OS43NzU2IFRqCi0tNDI2IFRKbQotKDIwMDEpIDIzLjkxMDIgVGoKLTExMS4yMiA1MjkuOTgzIFRkCi0oU25vd2JpcmQsKSA1My43OTggVGoKLS00MjYgVEptCi0oVXRhaC4pIDI5Ljg4NzggVGoKLS04NTIgVEptCi0oMjctMjkpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oTWFyY2gpIDI5Ljg4NzggVGoKLS00MjYgVEptCi0oMjAwMS4pIDI5Ljg4NzggVGoKLVsxIDAgMCAxIDcyIDUwMi40ODZdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA0NjggMy41ODY2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ2OCAtMy41ODY2XSBjbQotL0RldmljZUdyYXkge30gY3MKLVswXSBzYwotL0RldmljZUdyYXkge30gQ1MKLVswXSBTQwotWzEgMCAwIDEgMCAtNDUxLjYzNF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIDEuODkyOSAwXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgMi40OTA3IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAzNzQuMzk0IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSAyLjQ5MDcgMF0gY20KLS9EZXZpY2VSR0Ige30gY3MKLVswIDAgMF0gc2MKLS9EZXZpY2VSR0Ige30gQ1MKLVswIDAgMF0gU0MKLVsxIDAgMCAxIDAgNi44NTQxXSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgNDAuNTcyNiAtNi43NTQ2XSBjbQotL0RldmljZVJHQiB7fSBjcwotWzAgMCAwXSBzYwotL0RldmljZVJHQiB7fSBDUwotWzAgMCAwXSBTQwotWzEgMCAwIDEgLTQ5My44NDEgLTUwLjk1MTNdIGNtCi1bMSAwIDAgMSAwIDBdIFRtCi0wIDAgVGQKLTUzNC40MTQgNTAuOTUxMyBUZAotL0YxMzBfMCA5Ljk2MjYgVGYKLSgzNSkgOS45NjI2IFRqCi1bMSAwIDAgMSA0NTMuMjY5IDUwLjg1MThdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA5My41OTg1IDBdIGNtCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi0vRGV2aWNlUkdCIHt9IGNzCi1bMCAwIDBdIHNjCi0vRGV2aWNlUkdCIHt9IENTCi1bMCAwIDBdIFNDCi1bMSAwIDAgMSA2LjI3NjUgMF0gY20KLS9EZXZpY2VHcmF5IHt9IGNzCi1bMF0gc2MKLS9EZXZpY2VHcmF5IHt9IENTCi1bMF0gU0MKLVsxIDAgMCAxIC0xMy4xNDM2IDBdIGNtCi0vRGV2aWNlR3JheSB7fSBjcwotWzBdIHNjCi0vRGV2aWNlR3JheSB7fSBDUwotWzBdIFNDCi1RCi1zaG93cGFnZQotJSVQYWdlVHJhaWxlcgotcGRmRW5kUGFnZQotJSVUcmFpbGVyCi1lbmQKLSUlRG9jdW1lbnRTdXBwbGllZFJlc291cmNlczoKLSUlKyBmb250IERUVVVIUCtOaW1idXNTYW5MLUJvbGQKLSUlKyBmb250IFZYQU1SVitOaW1idXNSb21ObzlMLVJlZ3UKLSUlKyBmb250IE1GRUNVUitOaW1idXNNb25MLVJlZ3UKLSUlKyBmb250IFpPVk1SRCtDTU1JMTAKLSUlKyBmb250IEVSVkJGVCtOaW1idXNNb25MLUJvbGQKLSUlKyBmb250IEJaWElFQitDTVNZMTAKLSUlKyBmb250IFdXV1VUVStOaW1idXNSb21ObzlMLVJlZ3VJdGFsCi0lJUVPRgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnhtbCBiL1V0aWxpdGllcy9jbWJ6aXAyL21hbnVhbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjQxMzYuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvbWFudWFsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5NjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+IDwhLS0gLSotIHNnbWwgLSotIC0tPgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgotICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIlsKLQotPCEtLSB2YXJpb3VzIHN0cmluZ3MsIGRhdGVzIGV0Yy4gY29tbW9uIHRvIGFsbCBkb2NzIC0tPgotPCFFTlRJVFkgJSBjb21tb24tZW50cyBTWVNURU0gImVudGl0aWVzLnhtbCI+ICVjb21tb24tZW50czsKLV0+Ci0KLTxib29rIGxhbmc9ImVuIiBpZD0idXNlcm1hbiIgeHJlZmxhYmVsPSJiemlwMiBNYW51YWwiPgotCi0gPGJvb2tpbmZvPgotICA8dGl0bGU+YnppcDIgYW5kIGxpYmJ6aXAyLCB2ZXJzaW9uIDEuMC41PC90aXRsZT4KLSAgPHN1YnRpdGxlPkEgcHJvZ3JhbSBhbmQgbGlicmFyeSBmb3IgZGF0YSBjb21wcmVzc2lvbjwvc3VidGl0bGU+Ci0gIDxjb3B5cmlnaHQ+Ci0gICA8eWVhcj4mYnotbGlmZXNwYW47PC95ZWFyPgotICAgPGhvbGRlcj5KdWxpYW4gU2V3YXJkPC9ob2xkZXI+Ci0gIDwvY29weXJpZ2h0PgotICA8cmVsZWFzZWluZm8+VmVyc2lvbiAmYnotdmVyc2lvbjsgb2YgJmJ6LWRhdGU7PC9yZWxlYXNlaW5mbz4KLQotICA8YXV0aG9yZ3JvdXA+Ci0gICA8YXV0aG9yPgotICAgIDxmaXJzdG5hbWU+SnVsaWFuPC9maXJzdG5hbWU+Ci0gICAgPHN1cm5hbWU+U2V3YXJkPC9zdXJuYW1lPgotICAgIDxhZmZpbGlhdGlvbj4KLSAgICAgPG9yZ25hbWU+JmJ6LXVybDs8L29yZ25hbWU+Ci0gICAgPC9hZmZpbGlhdGlvbj4KLSAgIDwvYXV0aG9yPgotICA8L2F1dGhvcmdyb3VwPgotCi0gIDxsZWdhbG5vdGljZT4KLQotICA8cGFyYT5UaGlzIHByb2dyYW0sIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+LCB0aGUKLSAgYXNzb2NpYXRlZCBsaWJyYXJ5IDxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQKLSAgYWxsIGRvY3VtZW50YXRpb24sIGFyZSBjb3B5cmlnaHQgJmNvcHk7ICZiei1saWZlc3BhbjsgSnVsaWFuIFNld2FyZC4KLSAgQWxsIHJpZ2h0cyByZXNlcnZlZC48L3BhcmE+Ci0KLSAgPHBhcmE+UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aAotICBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZQotICBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OjwvcGFyYT4KLQotICA8aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSAgIDxsaXN0aXRlbT48cGFyYT5SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlCi0gICBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCi0gICBmb2xsb3dpbmcgZGlzY2xhaW1lci48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZQotICAgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwKLSAgIHNvZnR3YXJlLiAgSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4KLSAgIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKLSAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT48cGFyYT5BbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkCi0gICBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsCi0gICBzb2Z0d2FyZS48L3BhcmE+PC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvCi0gICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gIDwvaXRlbWl6ZWRsaXN0PgotCi0gIDxwYXJhPlRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiAiQVMgSVMiIEFORCBBTlkKLSAgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKLSAgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLjwvcGFyYT4KLQotIDxwYXJhPlBBVEVOVFM6IFRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZSwKLSA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSA8Y29tcHV0ZXJvdXRwdXQ+bGliYnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkbyBub3QgdXNlIGFueSBwYXRlbnRlZAotIGFsZ29yaXRobXMuICBIb3dldmVyLCBJIGRvIG5vdCBoYXZlIHRoZSByZXNvdXJjZXMgdG8gY2FycnkKLSBvdXQgYSBwYXRlbnQgc2VhcmNoLiAgVGhlcmVmb3JlIEkgY2Fubm90IGdpdmUgYW55IGd1YXJhbnRlZSBvZgotIHRoZSBhYm92ZSBzdGF0ZW1lbnQuCi0gPC9wYXJhPgotCi08L2xlZ2Fsbm90aWNlPgotCi08L2Jvb2tpbmZvPgotCi0KLQotPGNoYXB0ZXIgaWQ9ImludHJvIiB4cmVmbGFiZWw9IkludHJvZHVjdGlvbiI+Ci08dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY29tcHJlc3NlcyBmaWxlcwotdXNpbmcgdGhlIEJ1cnJvd3MtV2hlZWxlciBibG9jay1zb3J0aW5nIHRleHQgY29tcHJlc3Npb24KLWFsZ29yaXRobSwgYW5kIEh1ZmZtYW4gY29kaW5nLiAgQ29tcHJlc3Npb24gaXMgZ2VuZXJhbGx5Ci1jb25zaWRlcmFibHkgYmV0dGVyIHRoYW4gdGhhdCBhY2hpZXZlZCBieSBtb3JlIGNvbnZlbnRpb25hbAotTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLCBhbmQgYXBwcm9hY2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YKLXRoZSBQUE0gZmFtaWx5IG9mIHN0YXRpc3RpY2FsIGNvbXByZXNzb3JzLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gaXMgYnVpbHQgb24gdG9wIG9mCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnppcDI8L2NvbXB1dGVyb3V0cHV0PiwgYSBmbGV4aWJsZSBsaWJyYXJ5IGZvcgotaGFuZGxpbmcgY29tcHJlc3NlZCBkYXRhIGluIHRoZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZm9ybWF0LiAgVGhpcyBtYW51YWwKLWRlc2NyaWJlcyBib3RoIGhvdyB0byB1c2UgdGhlIHByb2dyYW0gYW5kIGhvdyB0byB3b3JrIHdpdGggdGhlCi1saWJyYXJ5IGludGVyZmFjZS4gIE1vc3Qgb2YgdGhlIG1hbnVhbCBpcyBkZXZvdGVkIHRvIHRoaXMKLWxpYnJhcnksIG5vdCB0aGUgcHJvZ3JhbSwgd2hpY2ggaXMgZ29vZCBuZXdzIGlmIHlvdXIgaW50ZXJlc3QgaXMKLW9ubHkgaW4gdGhlIHByb2dyYW0uPC9wYXJhPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0idXNpbmciLz4gZGVzY3JpYmVzIGhvdyB0byB1c2UKLSA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PjsgdGhpcyBpcyB0aGUgb25seSBwYXJ0Ci0geW91IG5lZWQgdG8gcmVhZCBpZiB5b3UganVzdCB3YW50IHRvIGtub3cgaG93IHRvIG9wZXJhdGUgdGhlCi0gcHJvZ3JhbS48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJsaWJwcm9nIi8+IGRlc2NyaWJlcyB0aGUKLSBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGluIGRldGFpbCwgYW5kPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0ibWlzYyIvPiByZWNvcmRzIHNvbWUKLSBtaXNjZWxsYW5lb3VzIG5vdGVzIHdoaWNoIEkgdGhvdWdodCBvdWdodCB0byBiZSByZWNvcmRlZAotIHNvbWV3aGVyZS48L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTwvY2hhcHRlcj4KLQotCi08Y2hhcHRlciBpZD0idXNpbmciIHhyZWZsYWJlbD0iSG93IHRvIHVzZSBiemlwMiI+Ci08dGl0bGU+SG93IHRvIHVzZSBiemlwMjwvdGl0bGU+Ci0KLTxwYXJhPlRoaXMgY2hhcHRlciBjb250YWlucyBhIGNvcHkgb2YgdGhlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBtYW4gcGFnZSwgYW5kIG5vdGhpbmcKLWVsc2UuPC9wYXJhPgotCi08c2VjdDEgaWQ9Im5hbWUiIHhyZWZsYWJlbD0iTkFNRSI+Ci08dGl0bGU+TkFNRTwvdGl0bGU+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiwKLSAgPGNvbXB1dGVyb3V0cHV0PmJ1bnppcDI8L2NvbXB1dGVyb3V0cHV0PiAtIGEgYmxvY2stc29ydGluZyBmaWxlCi0gIGNvbXByZXNzb3IsIHYxLjAuNDwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5iemNhdDwvY29tcHV0ZXJvdXRwdXQ+IC0KLSAgIGRlY29tcHJlc3NlcyBmaWxlcyB0byBzdGRvdXQ8L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gLQotICAgcmVjb3ZlcnMgZGF0YSBmcm9tIGRhbWFnZWQgYnppcDIgZmlsZXM8L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJzeW5vcHNpcyIgeHJlZmxhYmVsPSJTWU5PUFNJUyI+Ci08dGl0bGU+U1lOT1BTSVM8L3RpdGxlPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gWwotICAtY2Rma3FzdHZ6VkwxMjM0NTY3ODkgXSBbIGZpbGVuYW1lcyAuLi4gIF08L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IFsKLSAgLWZrdnNWTCBdIFsgZmlsZW5hbWVzIC4uLiAgXTwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5iemNhdDwvY29tcHV0ZXJvdXRwdXQ+IFsgLXMgXSBbCi0gIGZpbGVuYW1lcyAuLi4gIF08L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4KLSAgZmlsZW5hbWU8L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJkZXNjcmlwdGlvbiIgeHJlZmxhYmVsPSJERVNDUklQVElPTiI+Ci08dGl0bGU+REVTQ1JJUFRJT048L3RpdGxlPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBjb21wcmVzc2VzIGZpbGVzCi11c2luZyB0aGUgQnVycm93cy1XaGVlbGVyIGJsb2NrIHNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbgotYWxnb3JpdGhtLCBhbmQgSHVmZm1hbiBjb2RpbmcuICBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkKLWNvbnNpZGVyYWJseSBiZXR0ZXIgdGhhbiB0aGF0IGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsCi1MWjc3L0xaNzgtYmFzZWQgY29tcHJlc3NvcnMsIGFuZCBhcHByb2FjaGVzIHRoZSBwZXJmb3JtYW5jZSBvZgotdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuPC9wYXJhPgotCi08cGFyYT5UaGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGRlbGliZXJhdGVseSB2ZXJ5IHNpbWlsYXIgdG8KLXRob3NlIG9mIEdOVSA8Y29tcHV0ZXJvdXRwdXQ+Z3ppcDwvY29tcHV0ZXJvdXRwdXQ+LCBidXQgdGhleSBhcmUKLW5vdCBpZGVudGljYWwuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBleHBlY3RzIGEgbGlzdCBvZgotZmlsZSBuYW1lcyB0byBhY2NvbXBhbnkgdGhlIGNvbW1hbmQtbGluZSBmbGFncy4gIEVhY2ggZmlsZSBpcwotcmVwbGFjZWQgYnkgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgaXRzZWxmLCB3aXRoIHRoZSBuYW1lCi08Y29tcHV0ZXJvdXRwdXQ+b3JpZ2luYWxfbmFtZS5iejI8L2NvbXB1dGVyb3V0cHV0Pi4gIEVhY2gKLWNvbXByZXNzZWQgZmlsZSBoYXMgdGhlIHNhbWUgbW9kaWZpY2F0aW9uIGRhdGUsIHBlcm1pc3Npb25zLCBhbmQsCi13aGVuIHBvc3NpYmxlLCBvd25lcnNoaXAgYXMgdGhlIGNvcnJlc3BvbmRpbmcgb3JpZ2luYWwsIHNvIHRoYXQKLXRoZXNlIHByb3BlcnRpZXMgY2FuIGJlIGNvcnJlY3RseSByZXN0b3JlZCBhdCBkZWNvbXByZXNzaW9uIHRpbWUuCi1GaWxlIG5hbWUgaGFuZGxpbmcgaXMgbmFpdmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhlcmUgaXMgbm8KLW1lY2hhbmlzbSBmb3IgcHJlc2VydmluZyBvcmlnaW5hbCBmaWxlIG5hbWVzLCBwZXJtaXNzaW9ucywKLW93bmVyc2hpcHMgb3IgZGF0ZXMgaW4gZmlsZXN5c3RlbXMgd2hpY2ggbGFjayB0aGVzZSBjb25jZXB0cywgb3IKLWhhdmUgc2VyaW91cyBmaWxlIG5hbWUgbGVuZ3RoIHJlc3RyaWN0aW9ucywgc3VjaCBhcwotTVMtRE9TLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYnkgZGVmYXVsdCBub3QKLW92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcy4gIElmIHlvdSB3YW50IHRoaXMgdG8gaGFwcGVuLCBzcGVjaWZ5Ci10aGUgPGNvbXB1dGVyb3V0cHV0Pi1mPC9jb21wdXRlcm91dHB1dD4gZmxhZy48L3BhcmE+Ci0KLTxwYXJhPklmIG5vIGZpbGUgbmFtZXMgYXJlIHNwZWNpZmllZCwKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGNvbXByZXNzZXMgZnJvbSBzdGFuZGFyZAotaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLAotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gd2lsbCBkZWNsaW5lIHRvIHdyaXRlCi1jb21wcmVzc2VkIG91dHB1dCB0byBhIHRlcm1pbmFsLCBhcyB0aGlzIHdvdWxkIGJlIGVudGlyZWx5Ci1pbmNvbXByZWhlbnNpYmxlIGFuZCB0aGVyZWZvcmUgcG9pbnRsZXNzLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ1bnppcDI8L2NvbXB1dGVyb3V0cHV0PiAob3IKLTxjb21wdXRlcm91dHB1dD5iemlwMiAtZDwvY29tcHV0ZXJvdXRwdXQ+KSBkZWNvbXByZXNzZXMgYWxsCi1zcGVjaWZpZWQgZmlsZXMuICBGaWxlcyB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGJ5Ci08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGJlIGRldGVjdGVkIGFuZAotaWdub3JlZCwgYW5kIGEgd2FybmluZyBpc3N1ZWQuCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBhdHRlbXB0cyB0byBndWVzcyB0aGUKLWZpbGVuYW1lIGZvciB0aGUgZGVjb21wcmVzc2VkIGZpbGUgZnJvbSB0aGF0IG9mIHRoZSBjb21wcmVzc2VkCi1maWxlIGFzIGZvbGxvd3M6PC9wYXJhPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lLmJ6MiA8L2NvbXB1dGVyb3V0cHV0PgotICBiZWNvbWVzCi0gIDxjb21wdXRlcm91dHB1dD5maWxlbmFtZTwvY29tcHV0ZXJvdXRwdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lLmJ6IDwvY29tcHV0ZXJvdXRwdXQ+Ci0gIGJlY29tZXMKLSAgPGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lPC9jb21wdXRlcm91dHB1dD48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT48Y29tcHV0ZXJvdXRwdXQ+ZmlsZW5hbWUudGJ6MjwvY29tcHV0ZXJvdXRwdXQ+Ci0gIGJlY29tZXMKLSAgPGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lLnRhcjwvY29tcHV0ZXJvdXRwdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+PGNvbXB1dGVyb3V0cHV0PmZpbGVuYW1lLnRieiA8L2NvbXB1dGVyb3V0cHV0PgotICBiZWNvbWVzCi0gIDxjb21wdXRlcm91dHB1dD5maWxlbmFtZS50YXI8L2NvbXB1dGVyb3V0cHV0PjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5hbnlvdGhlcm5hbWUgPC9jb21wdXRlcm91dHB1dD4KLSAgYmVjb21lcwotICA8Y29tcHV0ZXJvdXRwdXQ+YW55b3RoZXJuYW1lLm91dDwvY29tcHV0ZXJvdXRwdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLTwvaXRlbWl6ZWRsaXN0PgotCi08cGFyYT5JZiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gb25lIG9mIHRoZSByZWNvZ25pc2VkIGVuZGluZ3MsCi08Y29tcHV0ZXJvdXRwdXQ+LmJ6MjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0Pi5iejwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0Pi50YnoyPC9jb21wdXRlcm91dHB1dD4gb3IKLTxjb21wdXRlcm91dHB1dD4udGJ6PC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBjb21wbGFpbnMgdGhhdCBpdCBjYW5ub3QKLWd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwgbmFtZQotd2l0aCA8Y29tcHV0ZXJvdXRwdXQ+Lm91dDwvY29tcHV0ZXJvdXRwdXQ+IGFwcGVuZGVkLjwvcGFyYT4KLQotPHBhcmE+QXMgd2l0aCBjb21wcmVzc2lvbiwgc3VwcGx5aW5nIG5vIGZpbGVuYW1lcyBjYXVzZXMKLWRlY29tcHJlc3Npb24gZnJvbSBzdGFuZGFyZCBpbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgY29ycmVjdGx5Ci1kZWNvbXByZXNzIGEgZmlsZSB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0d28gb3IgbW9yZQotY29tcHJlc3NlZCBmaWxlcy4gIFRoZSByZXN1bHQgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlCi1jb3JyZXNwb25kaW5nIHVuY29tcHJlc3NlZCBmaWxlcy4gIEludGVncml0eSB0ZXN0aW5nCi0oPGNvbXB1dGVyb3V0cHV0Pi10PC9jb21wdXRlcm91dHB1dD4pIG9mIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkCi1maWxlcyBpcyBhbHNvIHN1cHBvcnRlZC48L3BhcmE+Ci0KLTxwYXJhPllvdSBjYW4gYWxzbyBjb21wcmVzcyBvciBkZWNvbXByZXNzIGZpbGVzIHRvIHRoZSBzdGFuZGFyZAotb3V0cHV0IGJ5IGdpdmluZyB0aGUgPGNvbXB1dGVyb3V0cHV0Pi1jPC9jb21wdXRlcm91dHB1dD4gZmxhZy4KLU11bHRpcGxlIGZpbGVzIG1heSBiZSBjb21wcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlCi1yZXN1bHRpbmcgb3V0cHV0cyBhcmUgZmVkIHNlcXVlbnRpYWxseSB0byBzdGRvdXQuICBDb21wcmVzc2lvbiBvZgotbXVsdGlwbGUgZmlsZXMgaW4gdGhpcyBtYW5uZXIgZ2VuZXJhdGVzIGEgc3RyZWFtIGNvbnRhaW5pbmcKLW11bHRpcGxlIGNvbXByZXNzZWQgZmlsZSByZXByZXNlbnRhdGlvbnMuICBTdWNoIGEgc3RyZWFtIGNhbiBiZQotZGVjb21wcmVzc2VkIGNvcnJlY3RseSBvbmx5IGJ5Ci08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB2ZXJzaW9uIDAuOS4wIG9yIGxhdGVyLgotRWFybGllciB2ZXJzaW9ucyBvZiA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB3aWxsCi1zdG9wIGFmdGVyIGRlY29tcHJlc3NpbmcgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIHN0cmVhbS48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemNhdDwvY29tcHV0ZXJvdXRwdXQ+IChvcgotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyIC1kYzwvY29tcHV0ZXJvdXRwdXQ+KSBkZWNvbXByZXNzZXMgYWxsCi1zcGVjaWZpZWQgZmlsZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgcmVhZCBhcmd1bWVudHMKLWZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcwotPGNvbXB1dGVyb3V0cHV0PkJaSVAyPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QlpJUDwvY29tcHV0ZXJvdXRwdXQ+LCBpbiB0aGF0IG9yZGVyLCBhbmQgd2lsbAotcHJvY2VzcyB0aGVtIGJlZm9yZSBhbnkgYXJndW1lbnRzIHJlYWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgotVGhpcyBnaXZlcyBhIGNvbnZlbmllbnQgd2F5IHRvIHN1cHBseSBkZWZhdWx0IGFyZ3VtZW50cy48L3BhcmE+Ci0KLTxwYXJhPkNvbXByZXNzaW9uIGlzIGFsd2F5cyBwZXJmb3JtZWQsIGV2ZW4gaWYgdGhlIGNvbXByZXNzZWQKLWZpbGUgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcyB0aGFuCi1hYm91dCBvbmUgaHVuZHJlZCBieXRlcyB0ZW5kIHRvIGdldCBsYXJnZXIsIHNpbmNlIHRoZSBjb21wcmVzc2lvbgotbWVjaGFuaXNtIGhhcyBhIGNvbnN0YW50IG92ZXJoZWFkIGluIHRoZSByZWdpb24gb2YgNTAgYnl0ZXMuCi1SYW5kb20gZGF0YSAoaW5jbHVkaW5nIHRoZSBvdXRwdXQgb2YgbW9zdCBmaWxlIGNvbXByZXNzb3JzKSBpcwotY29kZWQgYXQgYWJvdXQgOC4wNSBiaXRzIHBlciBieXRlLCBnaXZpbmcgYW4gZXhwYW5zaW9uIG9mIGFyb3VuZAotMC41JS48L3BhcmE+Ci0KLTxwYXJhPkFzIGEgc2VsZi1jaGVjayBmb3IgeW91ciBwcm90ZWN0aW9uLAotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gdXNlcyAzMi1iaXQgQ1JDcyB0byBtYWtlCi1zdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZSBpcyBpZGVudGljYWwgdG8gdGhlCi1vcmlnaW5hbC4gIFRoaXMgZ3VhcmRzIGFnYWluc3QgY29ycnVwdGlvbiBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLAotYW5kIGFnYWluc3QgdW5kZXRlY3RlZCBidWdzIGluCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiAoaG9wZWZ1bGx5IHZlcnkgdW5saWtlbHkpLgotVGhlIGNoYW5jZXMgb2YgZGF0YSBjb3JydXB0aW9uIGdvaW5nIHVuZGV0ZWN0ZWQgaXMgbWljcm9zY29waWMsCi1hYm91dCBvbmUgY2hhbmNlIGluIGZvdXIgYmlsbGlvbiBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4gIEJlCi1hd2FyZSwgdGhvdWdoLCB0aGF0IHRoZSBjaGVjayBvY2N1cnMgdXBvbiBkZWNvbXByZXNzaW9uLCBzbyBpdAotY2FuIG9ubHkgdGVsbCB5b3UgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmcuICBJdCBjYW4ndCBoZWxwIHlvdQotcmVjb3ZlciB0aGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkIGRhdGEuICBZb3UgY2FuIHVzZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAycmVjb3ZlcjwvY29tcHV0ZXJvdXRwdXQ+IHRvIHRyeSB0byByZWNvdmVyCi1kYXRhIGZyb20gZGFtYWdlZCBmaWxlcy48L3BhcmE+Ci0KLTxwYXJhPlJldHVybiB2YWx1ZXM6IDAgZm9yIGEgbm9ybWFsIGV4aXQsIDEgZm9yIGVudmlyb25tZW50YWwKLXByb2JsZW1zIChmaWxlIG5vdCBmb3VuZCwgaW52YWxpZCBmbGFncywgSS9PIGVycm9ycywgZXRjLiksIDIKLXRvIGluZGljYXRlIGEgY29ycnVwdCBjb21wcmVzc2VkIGZpbGUsIDMgZm9yIGFuIGludGVybmFsCi1jb25zaXN0ZW5jeSBlcnJvciAoZWcsIGJ1Zykgd2hpY2ggY2F1c2VkCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB0byBwYW5pYy48L3BhcmE+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJvcHRpb25zIiB4cmVmbGFiZWw9Ik9QVElPTlMiPgotPHRpdGxlPk9QVElPTlM8L3RpdGxlPgotCi08dmFyaWFibGVsaXN0PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LWMgLS1zdGRvdXQ8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+Q29tcHJlc3Mgb3IgZGVjb21wcmVzcyB0byBzdGFuZGFyZAotICBvdXRwdXQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tZCAtLWRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+Rm9yY2UgZGVjb21wcmVzc2lvbi4KLSAgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4sCi0gIDxjb21wdXRlcm91dHB1dD5idW56aXAyPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gIDxjb21wdXRlcm91dHB1dD5iemNhdDwvY29tcHV0ZXJvdXRwdXQ+IGFyZSByZWFsbHkgdGhlIHNhbWUKLSAgcHJvZ3JhbSwgYW5kIHRoZSBkZWNpc2lvbiBhYm91dCB3aGF0IGFjdGlvbnMgdG8gdGFrZSBpcyBkb25lIG9uCi0gIHRoZSBiYXNpcyBvZiB3aGljaCBuYW1lIGlzIHVzZWQuICBUaGlzIGZsYWcgb3ZlcnJpZGVzIHRoYXQKLSAgbWVjaGFuaXNtLCBhbmQgZm9yY2VzIGJ6aXAyIHRvIGRlY29tcHJlc3MuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4teiAtLWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlRoZSBjb21wbGVtZW50IHRvCi0gIDxjb21wdXRlcm91dHB1dD4tZDwvY29tcHV0ZXJvdXRwdXQ+OiBmb3JjZXMgY29tcHJlc3Npb24sCi0gIHJlZ2FyZGxlc3Mgb2YgdGhlIGludm9rYXRpb24gbmFtZS48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi10IC0tdGVzdDwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDxsaXN0aXRlbT48cGFyYT5DaGVjayBpbnRlZ3JpdHkgb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpLCBidXQKLSAgZG9uJ3QgZGVjb21wcmVzcyB0aGVtLiAgVGhpcyByZWFsbHkgcGVyZm9ybXMgYSB0cmlhbAotICBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LWYgLS1mb3JjZTwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDxsaXN0aXRlbT48cGFyYT5Gb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGVzLiAgTm9ybWFsbHksCi0gIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgbm90IG92ZXJ3cml0ZQotICBleGlzdGluZyBvdXRwdXQgZmlsZXMuICBBbHNvIGZvcmNlcwotICA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiB0byBicmVhayBoYXJkIGxpbmtzIHRvCi0gIGZpbGVzLCB3aGljaCBpdCBvdGhlcndpc2Ugd291bGRuJ3QgZG8uPC9wYXJhPgotICA8cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBub3JtYWxseSBkZWNsaW5lcwotICB0byBkZWNvbXByZXNzIGZpbGVzIHdoaWNoIGRvbid0IGhhdmUgdGhlIGNvcnJlY3QgbWFnaWMgaGVhZGVyCi0gIGJ5dGVzLiBJZiBmb3JjZWQgKDxjb21wdXRlcm91dHB1dD4tZjwvY29tcHV0ZXJvdXRwdXQ+KSwKLSAgaG93ZXZlciwgaXQgd2lsbCBwYXNzIHN1Y2ggZmlsZXMgdGhyb3VnaCB1bm1vZGlmaWVkLiBUaGlzIGlzCi0gIGhvdyBHTlUgPGNvbXB1dGVyb3V0cHV0Pmd6aXA8L2NvbXB1dGVyb3V0cHV0PiBiZWhhdmVzLjwvcGFyYT4KLSA8L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LWsgLS1rZWVwPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPktlZXAgKGRvbid0IGRlbGV0ZSkgaW5wdXQgZmlsZXMgZHVyaW5nCi0gIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tcyAtLXNtYWxsPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlJlZHVjZSBtZW1vcnkgdXNhZ2UsIGZvciBjb21wcmVzc2lvbiwKLSAgZGVjb21wcmVzc2lvbiBhbmQgdGVzdGluZy4gIEZpbGVzIGFyZSBkZWNvbXByZXNzZWQgYW5kIHRlc3RlZAotICB1c2luZyBhIG1vZGlmaWVkIGFsZ29yaXRobSB3aGljaCBvbmx5IHJlcXVpcmVzIDIuNSBieXRlcyBwZXIKLSAgYmxvY2sgYnl0ZS4gIFRoaXMgbWVhbnMgYW55IGZpbGUgY2FuIGJlIGRlY29tcHJlc3NlZCBpbiAyMzAwawotICBvZiBtZW1vcnksIGFsYmVpdCBhdCBhYm91dCBoYWxmIHRoZSBub3JtYWwgc3BlZWQuPC9wYXJhPgotICA8cGFyYT5EdXJpbmcgY29tcHJlc3Npb24sIDxjb21wdXRlcm91dHB1dD4tczwvY29tcHV0ZXJvdXRwdXQ+Ci0gIHNlbGVjdHMgYSBibG9jayBzaXplIG9mIDIwMGssIHdoaWNoIGxpbWl0cyBtZW1vcnkgdXNlIHRvIGFyb3VuZAotICB0aGUgc2FtZSBmaWd1cmUsIGF0IHRoZSBleHBlbnNlIG9mIHlvdXIgY29tcHJlc3Npb24gcmF0aW8uICBJbgotICBzaG9ydCwgaWYgeW91ciBtYWNoaW5lIGlzIGxvdyBvbiBtZW1vcnkgKDggbWVnYWJ5dGVzIG9yIGxlc3MpLAotICB1c2UgPGNvbXB1dGVyb3V0cHV0Pi1zPC9jb21wdXRlcm91dHB1dD4gZm9yIGV2ZXJ5dGhpbmcuICBTZWUKLSAgPHhyZWYgbGlua2VuZD0ibWVtb3J5LW1hbmFnZW1lbnQiLz4gYmVsb3cuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tcSAtLXF1aWV0PC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlN1cHByZXNzIG5vbi1lc3NlbnRpYWwgd2FybmluZyBtZXNzYWdlcy4KLSAgTWVzc2FnZXMgcGVydGFpbmluZyB0byBJL08gZXJyb3JzIGFuZCBvdGhlciBjcml0aWNhbCBldmVudHMKLSAgd2lsbCBub3QgYmUgc3VwcHJlc3NlZC48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi12IC0tdmVyYm9zZTwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotIDxsaXN0aXRlbT48cGFyYT5WZXJib3NlIG1vZGUgLS0gc2hvdyB0aGUgY29tcHJlc3Npb24gcmF0aW8gZm9yCi0gIGVhY2ggZmlsZSBwcm9jZXNzZWQuICBGdXJ0aGVyCi0gIDxjb21wdXRlcm91dHB1dD4tdjwvY29tcHV0ZXJvdXRwdXQ+J3MgaW5jcmVhc2UgdGhlIHZlcmJvc2l0eQotICBsZXZlbCwgc3Bld2luZyBvdXQgbG90cyBvZiBpbmZvcm1hdGlvbiB3aGljaCBpcyBwcmltYXJpbHkgb2YKLSAgaW50ZXJlc3QgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tTCAtLWxpY2Vuc2UgLVYgLS12ZXJzaW9uPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPkRpc3BsYXkgdGhlIHNvZnR3YXJlIHZlcnNpb24sIGxpY2Vuc2UgdGVybXMgYW5kCi0gIGNvbmRpdGlvbnMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLSA8dmFybGlzdGVudHJ5PgotIDx0ZXJtPjxjb21wdXRlcm91dHB1dD4tMTwvY29tcHV0ZXJvdXRwdXQ+IChvcgotIDxjb21wdXRlcm91dHB1dD4tLWZhc3Q8L2NvbXB1dGVyb3V0cHV0PikgdG8KLSA8Y29tcHV0ZXJvdXRwdXQ+LTk8L2NvbXB1dGVyb3V0cHV0PiAob3IKLSA8Y29tcHV0ZXJvdXRwdXQ+LWJlc3Q8L2NvbXB1dGVyb3V0cHV0Pik8L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlNldCB0aGUgYmxvY2sgc2l6ZSB0byAxMDAgaywgMjAwIGsgLi4uICA5MDAgawotICB3aGVuIGNvbXByZXNzaW5nLiAgSGFzIG5vIGVmZmVjdCB3aGVuIGRlY29tcHJlc3NpbmcuICBTZWUgPHhyZWYKLSAgbGlua2VuZD0ibWVtb3J5LW1hbmFnZW1lbnQiIC8+IGJlbG93LiAgVGhlCi0gIDxjb21wdXRlcm91dHB1dD4tLWZhc3Q8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgPGNvbXB1dGVyb3V0cHV0Pi0tYmVzdDwvY29tcHV0ZXJvdXRwdXQ+IGFsaWFzZXMgYXJlIHByaW1hcmlseQotICBmb3IgR05VIDxjb21wdXRlcm91dHB1dD5nemlwPC9jb21wdXRlcm91dHB1dD4gY29tcGF0aWJpbGl0eS4KLSAgSW4gcGFydGljdWxhciwgPGNvbXB1dGVyb3V0cHV0Pi0tZmFzdDwvY29tcHV0ZXJvdXRwdXQ+IGRvZXNuJ3QKLSAgbWFrZSB0aGluZ3Mgc2lnbmlmaWNhbnRseSBmYXN0ZXIuICBBbmQKLSAgPGNvbXB1dGVyb3V0cHV0Pi0tYmVzdDwvY29tcHV0ZXJvdXRwdXQ+IG1lcmVseSBzZWxlY3RzIHRoZQotICBkZWZhdWx0IGJlaGF2aW91ci48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gPHRlcm0+PGNvbXB1dGVyb3V0cHV0Pi0tPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gPGxpc3RpdGVtPjxwYXJhPlRyZWF0cyBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXMgZmlsZSBuYW1lcywKLSAgZXZlbiBpZiB0aGV5IHN0YXJ0IHdpdGggYSBkYXNoLiAgVGhpcyBpcyBzbyB5b3UgY2FuIGhhbmRsZQotICBmaWxlcyB3aXRoIG5hbWVzIGJlZ2lubmluZyB3aXRoIGEgZGFzaCwgZm9yIGV4YW1wbGU6Ci0gIDxjb21wdXRlcm91dHB1dD5iemlwMiAtLQotICAtbXlmaWxlbmFtZTwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LS1yZXBldGl0aXZlLWZhc3Q8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+LS1yZXBldGl0aXZlLWJlc3Q8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSA8bGlzdGl0ZW0+PHBhcmE+VGhlc2UgZmxhZ3MgYXJlIHJlZHVuZGFudCBpbiB2ZXJzaW9ucyAwLjkuNSBhbmQKLSAgYWJvdmUuICBUaGV5IHByb3ZpZGVkIHNvbWUgY29hcnNlIGNvbnRyb2wgb3ZlciB0aGUgYmVoYXZpb3VyIG9mCi0gIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBpbiBlYXJsaWVyIHZlcnNpb25zLCB3aGljaCB3YXMgc29tZXRpbWVzCi0gIHVzZWZ1bC4gIDAuOS41IGFuZCBhYm92ZSBoYXZlIGFuIGltcHJvdmVkIGFsZ29yaXRobSB3aGljaAotICByZW5kZXJzIHRoZXNlIGZsYWdzIGlycmVsZXZhbnQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gPC92YXJsaXN0ZW50cnk+Ci0KLTwvdmFyaWFibGVsaXN0PgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0ibWVtb3J5LW1hbmFnZW1lbnQiIHhyZWZsYWJlbD0iTUVNT1JZIE1BTkFHRU1FTlQiPgotPHRpdGxlPk1FTU9SWSBNQU5BR0VNRU5UPC90aXRsZT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY29tcHJlc3NlcyBsYXJnZQotZmlsZXMgaW4gYmxvY2tzLiAgVGhlIGJsb2NrIHNpemUgYWZmZWN0cyBib3RoIHRoZSBjb21wcmVzc2lvbgotcmF0aW8gYWNoaWV2ZWQsIGFuZCB0aGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIGNvbXByZXNzaW9uCi1hbmQgZGVjb21wcmVzc2lvbi4gIFRoZSBmbGFncyA8Y29tcHV0ZXJvdXRwdXQ+LTE8L2NvbXB1dGVyb3V0cHV0PgotdGhyb3VnaCA8Y29tcHV0ZXJvdXRwdXQ+LTk8L2NvbXB1dGVyb3V0cHV0PiBzcGVjaWZ5IHRoZSBibG9jawotc2l6ZSB0byBiZSAxMDAsMDAwIGJ5dGVzIHRocm91Z2ggOTAwLDAwMCBieXRlcyAodGhlIGRlZmF1bHQpCi1yZXNwZWN0aXZlbHkuICBBdCBkZWNvbXByZXNzaW9uIHRpbWUsIHRoZSBibG9jayBzaXplIHVzZWQgZm9yCi1jb21wcmVzc2lvbiBpcyByZWFkIGZyb20gdGhlIGhlYWRlciBvZiB0aGUgY29tcHJlc3NlZCBmaWxlLCBhbmQKLTxjb21wdXRlcm91dHB1dD5idW56aXAyPC9jb21wdXRlcm91dHB1dD4gdGhlbiBhbGxvY2F0ZXMgaXRzZWxmCi1qdXN0IGVub3VnaCBtZW1vcnkgdG8gZGVjb21wcmVzcyB0aGUgZmlsZS4gIFNpbmNlIGJsb2NrIHNpemVzIGFyZQotc3RvcmVkIGluIGNvbXByZXNzZWQgZmlsZXMsIGl0IGZvbGxvd3MgdGhhdCB0aGUgZmxhZ3MKLTxjb21wdXRlcm91dHB1dD4tMTwvY29tcHV0ZXJvdXRwdXQ+IHRvCi08Y29tcHV0ZXJvdXRwdXQ+LTk8L2NvbXB1dGVyb3V0cHV0PiBhcmUgaXJyZWxldmFudCB0byBhbmQgc28KLWlnbm9yZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uPC9wYXJhPgotCi08cGFyYT5Db21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiByZXF1aXJlbWVudHMsIGluIGJ5dGVzLCBjYW4gYmUKLWVzdGltYXRlZCBhczo8L3BhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci1Db21wcmVzc2lvbjogICA0MDBrICsgKCA4IHggYmxvY2sgc2l6ZSApCi0KLURlY29tcHJlc3Npb246IDEwMGsgKyAoIDQgeCBibG9jayBzaXplICksIG9yCi0gICAgICAgICAgICAgICAxMDBrICsgKCAyLjUgeCBibG9jayBzaXplICkKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkxhcmdlciBibG9jayBzaXplcyBnaXZlIHJhcGlkbHkgZGltaW5pc2hpbmcgbWFyZ2luYWwKLXJldHVybnMuICBNb3N0IG9mIHRoZSBjb21wcmVzc2lvbiBjb21lcyBmcm9tIHRoZSBmaXJzdCB0d28gb3IKLXRocmVlIGh1bmRyZWQgayBvZiBibG9jayBzaXplLCBhIGZhY3Qgd29ydGggYmVhcmluZyBpbiBtaW5kIHdoZW4KLXVzaW5nIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IG9uIHNtYWxsIG1hY2hpbmVzLgotSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gYXBwcmVjaWF0ZSB0aGF0IHRoZSBkZWNvbXByZXNzaW9uIG1lbW9yeQotcmVxdWlyZW1lbnQgaXMgc2V0IGF0IGNvbXByZXNzaW9uIHRpbWUgYnkgdGhlIGNob2ljZSBvZiBibG9jawotc2l6ZS48L3BhcmE+Ci0KLTxwYXJhPkZvciBmaWxlcyBjb21wcmVzc2VkIHdpdGggdGhlIGRlZmF1bHQgOTAwayBibG9jayBzaXplLAotPGNvbXB1dGVyb3V0cHV0PmJ1bnppcDI8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIHJlcXVpcmUgYWJvdXQgMzcwMAota2J5dGVzIHRvIGRlY29tcHJlc3MuICBUbyBzdXBwb3J0IGRlY29tcHJlc3Npb24gb2YgYW55IGZpbGUgb24gYQotNCBtZWdhYnl0ZSBtYWNoaW5lLCA8Y29tcHV0ZXJvdXRwdXQ+YnVuemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGhhcwotYW4gb3B0aW9uIHRvIGRlY29tcHJlc3MgdXNpbmcgYXBwcm94aW1hdGVseSBoYWxmIHRoaXMgYW1vdW50IG9mCi1tZW1vcnksIGFib3V0IDIzMDAga2J5dGVzLiAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyBhbHNvIGhhbHZlZCwKLXNvIHlvdSBzaG91bGQgdXNlIHRoaXMgb3B0aW9uIG9ubHkgd2hlcmUgbmVjZXNzYXJ5LiAgVGhlIHJlbGV2YW50Ci1mbGFnIGlzIDxjb21wdXRlcm91dHB1dD4tczwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+SW4gZ2VuZXJhbCwgdHJ5IGFuZCB1c2UgdGhlIGxhcmdlc3QgYmxvY2sgc2l6ZSBtZW1vcnkKLWNvbnN0cmFpbnRzIGFsbG93LCBzaW5jZSB0aGF0IG1heGltaXNlcyB0aGUgY29tcHJlc3Npb24gYWNoaWV2ZWQuCi1Db21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZCBhcmUgdmlydHVhbGx5IHVuYWZmZWN0ZWQgYnkKLWJsb2NrIHNpemUuPC9wYXJhPgotCi08cGFyYT5Bbm90aGVyIHNpZ25pZmljYW50IHBvaW50IGFwcGxpZXMgdG8gZmlsZXMgd2hpY2ggZml0IGluIGEKLXNpbmdsZSBibG9jayAtLSB0aGF0IG1lYW5zIG1vc3QgZmlsZXMgeW91J2QgZW5jb3VudGVyIHVzaW5nIGEKLWxhcmdlIGJsb2NrIHNpemUuICBUaGUgYW1vdW50IG9mIHJlYWwgbWVtb3J5IHRvdWNoZWQgaXMKLXByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgc2luY2UgdGhlIGZpbGUgaXMgc21hbGxlcgotdGhhbiBhIGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbXByZXNzaW5nIGEgZmlsZSAyMCwwMDAgYnl0ZXMgbG9uZwotd2l0aCB0aGUgZmxhZyA8Y29tcHV0ZXJvdXRwdXQ+LTk8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGNhdXNlIHRoZQotY29tcHJlc3NvciB0byBhbGxvY2F0ZSBhcm91bmQgNzYwMGsgb2YgbWVtb3J5LCBidXQgb25seSB0b3VjaAotNDAwayArIDIwMDAwICogOCA9IDU2MCBrYnl0ZXMgb2YgaXQuICBTaW1pbGFybHksIHRoZSBkZWNvbXByZXNzb3IKLXdpbGwgYWxsb2NhdGUgMzcwMGsgYnV0IG9ubHkgdG91Y2ggMTAwayArIDIwMDAwICogNCA9IDE4MAota2J5dGVzLjwvcGFyYT4KLQotPHBhcmE+SGVyZSBpcyBhIHRhYmxlIHdoaWNoIHN1bW1hcmlzZXMgdGhlIG1heGltdW0gbWVtb3J5IHVzYWdlCi1mb3IgZGlmZmVyZW50IGJsb2NrIHNpemVzLiAgQWxzbyByZWNvcmRlZCBpcyB0aGUgdG90YWwgY29tcHJlc3NlZAotc2l6ZSBmb3IgMTQgZmlsZXMgb2YgdGhlIENhbGdhcnkgVGV4dCBDb21wcmVzc2lvbiBDb3JwdXMKLXRvdGFsbGluZyAzLDE0MSw2MjIgYnl0ZXMuICBUaGlzIGNvbHVtbiBnaXZlcyBzb21lIGZlZWwgZm9yIGhvdwotY29tcHJlc3Npb24gdmFyaWVzIHdpdGggYmxvY2sgc2l6ZS4gIFRoZXNlIGZpZ3VyZXMgdGVuZCB0bwotdW5kZXJzdGF0ZSB0aGUgYWR2YW50YWdlIG9mIGxhcmdlciBibG9jayBzaXplcyBmb3IgbGFyZ2VyIGZpbGVzLAotc2luY2UgdGhlIENvcnB1cyBpcyBkb21pbmF0ZWQgYnkgc21hbGxlciBmaWxlcy48L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLSAgICAgICAgQ29tcHJlc3MgICBEZWNvbXByZXNzICAgRGVjb21wcmVzcyAgIENvcnB1cwotRmxhZyAgICAgdXNhZ2UgICAgICB1c2FnZSAgICAgICAtcyB1c2FnZSAgICAgU2l6ZQotCi0gLTEgICAgICAxMjAwayAgICAgICA1MDBrICAgICAgICAgMzUwayAgICAgIDkxNDcwNAotIC0yICAgICAgMjAwMGsgICAgICAgOTAwayAgICAgICAgIDYwMGsgICAgICA4Nzc3MDMKLSAtMyAgICAgIDI4MDBrICAgICAgMTMwMGsgICAgICAgICA4NTBrICAgICAgODYwMzM4Ci0gLTQgICAgICAzNjAwayAgICAgIDE3MDBrICAgICAgICAxMTAwayAgICAgIDg0Njg5OQotIC01ICAgICAgNDQwMGsgICAgICAyMTAwayAgICAgICAgMTM1MGsgICAgICA4NDUxNjAKLSAtNiAgICAgIDUyMDBrICAgICAgMjUwMGsgICAgICAgIDE2MDBrICAgICAgODM4NjI2Ci0gLTcgICAgICA2MTAwayAgICAgIDI5MDBrICAgICAgICAxODUwayAgICAgIDgzNDA5NgotIC04ICAgICAgNjgwMGsgICAgICAzMzAwayAgICAgICAgMjEwMGsgICAgICA4Mjg2NDIKLSAtOSAgICAgIDc2MDBrICAgICAgMzcwMGsgICAgICAgIDIzNTBrICAgICAgODI4NjQyCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0icmVjb3ZlcmluZyIgeHJlZmxhYmVsPSJSRUNPVkVSSU5HIERBVEEgRlJPTSBEQU1BR0VEIEZJTEVTIj4KLTx0aXRsZT5SRUNPVkVSSU5HIERBVEEgRlJPTSBEQU1BR0VEIEZJTEVTPC90aXRsZT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY29tcHJlc3NlcyBmaWxlcyBpbgotYmxvY2tzLCB1c3VhbGx5IDkwMGtieXRlcyBsb25nLiAgRWFjaCBibG9jayBpcyBoYW5kbGVkCi1pbmRlcGVuZGVudGx5LiAgSWYgYSBtZWRpYSBvciB0cmFuc21pc3Npb24gZXJyb3IgY2F1c2VzIGEKLW11bHRpLWJsb2NrIDxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4gZmlsZSB0byBiZWNvbWUKLWRhbWFnZWQsIGl0IG1heSBiZSBwb3NzaWJsZSB0byByZWNvdmVyIGRhdGEgZnJvbSB0aGUgdW5kYW1hZ2VkCi1ibG9ja3MgaW4gdGhlIGZpbGUuPC9wYXJhPgotCi08cGFyYT5UaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrIGlzIGRlbGltaXRlZCBieQotYSA0OC1iaXQgcGF0dGVybiwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gZmluZCB0aGUgYmxvY2sKLWJvdW5kYXJpZXMgd2l0aCByZWFzb25hYmxlIGNlcnRhaW50eS4gIEVhY2ggYmxvY2sgYWxzbyBjYXJyaWVzCi1pdHMgb3duIDMyLWJpdCBDUkMsIHNvIGRhbWFnZWQgYmxvY2tzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20KLXVuZGFtYWdlZCBvbmVzLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmJ6aXAycmVjb3ZlcjwvY29tcHV0ZXJvdXRwdXQ+IGlzIGEgc2ltcGxlCi1wcm9ncmFtIHdob3NlIHB1cnBvc2UgaXMgdG8gc2VhcmNoIGZvciBibG9ja3MgaW4KLTxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4gZmlsZXMsIGFuZCB3cml0ZSBlYWNoIGJsb2NrCi1vdXQgaW50byBpdHMgb3duIDxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4gZmlsZS4gIFlvdQotY2FuIHRoZW4gdXNlIDxjb21wdXRlcm91dHB1dD5iemlwMiAtdDwvY29tcHV0ZXJvdXRwdXQ+IHRvIHRlc3QKLXRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc3VsdGluZyBmaWxlcywgYW5kIGRlY29tcHJlc3MgdGhvc2Ugd2hpY2gKLWFyZSB1bmRhbWFnZWQuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gdGFrZXMgYQotc2luZ2xlIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgZGFtYWdlZCBmaWxlLCBhbmQgd3JpdGVzIGEKLW51bWJlciBvZiBmaWxlcyA8Y29tcHV0ZXJvdXRwdXQ+cmVjMDAwMWZpbGUuYnoyPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+cmVjMDAwMmZpbGUuYnoyPC9jb21wdXRlcm91dHB1dD4sIGV0YywgY29udGFpbmluZwotdGhlIGV4dHJhY3RlZCBibG9ja3MuICBUaGUgb3V0cHV0IGZpbGVuYW1lcyBhcmUgZGVzaWduZWQgc28gdGhhdAotdGhlIHVzZSBvZiB3aWxkY2FyZHMgaW4gc3Vic2VxdWVudCBwcm9jZXNzaW5nIC0tIGZvciBleGFtcGxlLAotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyIC1kYyByZWMqZmlsZS5iejIgJiM2MjsKLXJlY292ZXJlZF9kYXRhPC9jb21wdXRlcm91dHB1dD4gLS0gbGlzdHMgdGhlIGZpbGVzIGluIHRoZSBjb3JyZWN0Ci1vcmRlci48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMnJlY292ZXI8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgYmUgb2YKLW1vc3QgdXNlIGRlYWxpbmcgd2l0aCBsYXJnZSA8Y29tcHV0ZXJvdXRwdXQ+LmJ6MjwvY29tcHV0ZXJvdXRwdXQ+Ci1maWxlcywgYXMgdGhlc2Ugd2lsbCBjb250YWluIG1hbnkgYmxvY2tzLiAgSXQgaXMgY2xlYXJseSBmdXRpbGUKLXRvIHVzZSBpdCBvbiBkYW1hZ2VkIHNpbmdsZS1ibG9jayBmaWxlcywgc2luY2UgYSBkYW1hZ2VkIGJsb2NrCi1jYW5ub3QgYmUgcmVjb3ZlcmVkLiAgSWYgeW91IHdpc2ggdG8gbWluaW1pc2UgYW55IHBvdGVudGlhbCBkYXRhCi1sb3NzIHRocm91Z2ggbWVkaWEgb3IgdHJhbnNtaXNzaW9uIGVycm9ycywgeW91IG1pZ2h0IGNvbnNpZGVyCi1jb21wcmVzc2luZyB3aXRoIGEgc21hbGxlciBibG9jayBzaXplLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9InBlcmZvcm1hbmNlIiB4cmVmbGFiZWw9IlBFUkZPUk1BTkNFIE5PVEVTIj4KLTx0aXRsZT5QRVJGT1JNQU5DRSBOT1RFUzwvdGl0bGU+Ci0KLTxwYXJhPlRoZSBzb3J0aW5nIHBoYXNlIG9mIGNvbXByZXNzaW9uIGdhdGhlcnMgdG9nZXRoZXIgc2ltaWxhcgotc3RyaW5ncyBpbiB0aGUgZmlsZS4gIEJlY2F1c2Ugb2YgdGhpcywgZmlsZXMgY29udGFpbmluZyB2ZXJ5IGxvbmcKLXJ1bnMgb2YgcmVwZWF0ZWQgc3ltYm9scywgbGlrZSAiYWFiYWFiYWFiYWFiIC4uLiIgIChyZXBlYXRlZAotc2V2ZXJhbCBodW5kcmVkIHRpbWVzKSBtYXkgY29tcHJlc3MgbW9yZSBzbG93bHkgdGhhbiBub3JtYWwuCi1WZXJzaW9ucyAwLjkuNSBhbmQgYWJvdmUgZmFyZSBtdWNoIGJldHRlciB0aGFuIHByZXZpb3VzIHZlcnNpb25zCi1pbiB0aGlzIHJlc3BlY3QuICBUaGUgcmF0aW8gYmV0d2VlbiB3b3JzdC1jYXNlIGFuZCBhdmVyYWdlLWNhc2UKLWNvbXByZXNzaW9uIHRpbWUgaXMgaW4gdGhlIHJlZ2lvbiBvZiAxMDoxLiAgRm9yIHByZXZpb3VzCi12ZXJzaW9ucywgdGhpcyBmaWd1cmUgd2FzIG1vcmUgbGlrZSAxMDA6MS4gIFlvdSBjYW4gdXNlIHRoZQotPGNvbXB1dGVyb3V0cHV0Pi12dnZ2PC9jb21wdXRlcm91dHB1dD4gb3B0aW9uIHRvIG1vbml0b3IgcHJvZ3Jlc3MKLWluIGdyZWF0IGRldGFpbCwgaWYgeW91IHdhbnQuPC9wYXJhPgotCi08cGFyYT5EZWNvbXByZXNzaW9uIHNwZWVkIGlzIHVuYWZmZWN0ZWQgYnkgdGhlc2UKLXBoZW5vbWVuYS48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHVzdWFsbHkgYWxsb2NhdGVzCi1zZXZlcmFsIG1lZ2FieXRlcyBvZiBtZW1vcnkgdG8gb3BlcmF0ZSBpbiwgYW5kIHRoZW4gY2hhcmdlcyBhbGwKLW92ZXIgaXQgaW4gYSBmYWlybHkgcmFuZG9tIGZhc2hpb24uICBUaGlzIG1lYW5zIHRoYXQgcGVyZm9ybWFuY2UsCi1ib3RoIGZvciBjb21wcmVzc2luZyBhbmQgZGVjb21wcmVzc2luZywgaXMgbGFyZ2VseSBkZXRlcm1pbmVkIGJ5Ci10aGUgc3BlZWQgYXQgd2hpY2ggeW91ciBtYWNoaW5lIGNhbiBzZXJ2aWNlIGNhY2hlIG1pc3Nlcy4KLUJlY2F1c2Ugb2YgdGhpcywgc21hbGwgY2hhbmdlcyB0byB0aGUgY29kZSB0byByZWR1Y2UgdGhlIG1pc3MKLXJhdGUgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGdpdmUgZGlzcHJvcG9ydGlvbmF0ZWx5IGxhcmdlCi1wZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuICBJIGltYWdpbmUKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgcGVyZm9ybSBiZXN0IG9uCi1tYWNoaW5lcyB3aXRoIHZlcnkgbGFyZ2UgY2FjaGVzLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi0KLTxzZWN0MSBpZD0iY2F2ZWF0cyIgeHJlZmxhYmVsPSJDQVZFQVRTIj4KLTx0aXRsZT5DQVZFQVRTPC90aXRsZT4KLQotPHBhcmE+SS9PIGVycm9yIG1lc3NhZ2VzIGFyZSBub3QgYXMgaGVscGZ1bCBhcyB0aGV5IGNvdWxkIGJlLgotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gdHJpZXMgaGFyZCB0byBkZXRlY3QgSS9PCi1lcnJvcnMgYW5kIGV4aXQgY2xlYW5seSwgYnV0IHRoZSBkZXRhaWxzIG9mIHdoYXQgdGhlIHByb2JsZW0gaXMKLXNvbWV0aW1lcyBzZWVtIHJhdGhlciBtaXNsZWFkaW5nLjwvcGFyYT4KLQotPHBhcmE+VGhpcyBtYW51YWwgcGFnZSBwZXJ0YWlucyB0byB2ZXJzaW9uICZiei12ZXJzaW9uOyBvZgotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4uICBDb21wcmVzc2VkIGRhdGEgY3JlYXRlZCBieQotdGhpcyB2ZXJzaW9uIGlzIGVudGlyZWx5IGZvcndhcmRzIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZQotcHJldmlvdXMgcHVibGljIHJlbGVhc2VzLCB2ZXJzaW9ucyAwLjFwbDIsIDAuOS4wIGFuZCAwLjkuNSwgMS4wLjAsCi0xLjAuMSwgMS4wLjIgYW5kIDEuMC4zLCBidXQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjogMC45LjAgYW5kCi1hYm92ZSBjYW4gY29ycmVjdGx5IGRlY29tcHJlc3MgbXVsdGlwbGUgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuCi0wLjFwbDIgY2Fubm90IGRvIHRoaXM7IGl0IHdpbGwgc3RvcCBhZnRlciBkZWNvbXByZXNzaW5nIGp1c3QgdGhlIGZpcnN0Ci1maWxlIGluIHRoZSBzdHJlYW0uPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gdmVyc2lvbnMKLXByaW9yIHRvIDEuMC4yIHVzZWQgMzItYml0IGludGVnZXJzIHRvIHJlcHJlc2VudCBiaXQgcG9zaXRpb25zIGluCi1jb21wcmVzc2VkIGZpbGVzLCBzbyBpdCBjb3VsZCBub3QgaGFuZGxlIGNvbXByZXNzZWQgZmlsZXMgbW9yZQotdGhhbiA1MTIgbWVnYWJ5dGVzIGxvbmcuICBWZXJzaW9ucyAxLjAuMiBhbmQgYWJvdmUgdXNlIDY0LWJpdCBpbnRzCi1vbiBzb21lIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHRoZW0gKEdOVSBzdXBwb3J0ZWQgdGFyZ2V0cywgYW5kCi1XaW5kb3dzKS4gVG8gZXN0YWJsaXNoIHdoZXRoZXIgb3Igbm90Ci08Y29tcHV0ZXJvdXRwdXQ+YnppcDJyZWNvdmVyPC9jb21wdXRlcm91dHB1dD4gd2FzIGJ1aWx0IHdpdGggc3VjaAotYSBsaW1pdGF0aW9uLCBydW4gaXQgd2l0aG91dCBhcmd1bWVudHMuIEluIGFueSBldmVudCB5b3UgY2FuCi1idWlsZCB5b3Vyc2VsZiBhbiB1bmxpbWl0ZWQgdmVyc2lvbiBpZiB5b3UgY2FuIHJlY29tcGlsZSBpdCB3aXRoCi08Y29tcHV0ZXJvdXRwdXQ+TWF5YmVVSW50NjQ8L2NvbXB1dGVyb3V0cHV0PiBzZXQgdG8gYmUgYW4KLXVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi0KLTxzZWN0MSBpZD0iYXV0aG9yIiB4cmVmbGFiZWw9IkFVVEhPUiI+Ci08dGl0bGU+QVVUSE9SPC90aXRsZT4KLQotPHBhcmE+SnVsaWFuIFNld2FyZCwKLTxjb21wdXRlcm91dHB1dD4mYnotZW1haWw7PC9jb21wdXRlcm91dHB1dD48L3BhcmE+Ci0KLTxwYXJhPlRoZSBpZGVhcyBlbWJvZGllZCBpbgotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gYXJlIGR1ZSB0byAoYXQgbGVhc3QpIHRoZQotZm9sbG93aW5nIHBlb3BsZTogTWljaGFlbCBCdXJyb3dzIGFuZCBEYXZpZCBXaGVlbGVyIChmb3IgdGhlCi1ibG9jayBzb3J0aW5nIHRyYW5zZm9ybWF0aW9uKSwgRGF2aWQgV2hlZWxlciAoYWdhaW4sIGZvciB0aGUKLUh1ZmZtYW4gY29kZXIpLCBQZXRlciBGZW53aWNrIChmb3IgdGhlIHN0cnVjdHVyZWQgY29kaW5nIG1vZGVsIGluCi10aGUgb3JpZ2luYWwgPGNvbXB1dGVyb3V0cHV0PmJ6aXA8L2NvbXB1dGVyb3V0cHV0PiwgYW5kIG1hbnkKLXJlZmluZW1lbnRzKSwgYW5kIEFsaXN0YWlyIE1vZmZhdCwgUmFkZm9yZCBOZWFsIGFuZCBJYW4gV2l0dGVuCi0oZm9yIHRoZSBhcml0aG1ldGljIGNvZGVyIGluIHRoZSBvcmlnaW5hbAotPGNvbXB1dGVyb3V0cHV0PmJ6aXA8L2NvbXB1dGVyb3V0cHV0PikuICBJIGFtIG11Y2ggaW5kZWJ0ZWQgZm9yCi10aGVpciBoZWxwLCBzdXBwb3J0IGFuZCBhZHZpY2UuICBTZWUgdGhlIG1hbnVhbCBpbiB0aGUgc291cmNlCi1kaXN0cmlidXRpb24gZm9yIHBvaW50ZXJzIHRvIHNvdXJjZXMgb2YgZG9jdW1lbnRhdGlvbi4gIENocmlzdGlhbgotdm9uIFJvcXVlcyBlbmNvdXJhZ2VkIG1lIHRvIGxvb2sgZm9yIGZhc3RlciBzb3J0aW5nIGFsZ29yaXRobXMsCi1zbyBhcyB0byBzcGVlZCB1cCBjb21wcmVzc2lvbi4gIEJlbGEgTHVia2luIGVuY291cmFnZWQgbWUgdG8KLWltcHJvdmUgdGhlIHdvcnN0LWNhc2UgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuICAKLURvbm5hIFJvYmluc29uIFhNTGlzZWQgdGhlIGRvY3VtZW50YXRpb24uCi1NYW55IHBlb3BsZSBzZW50Ci1wYXRjaGVzLCBoZWxwZWQgd2l0aCBwb3J0YWJpbGl0eSBwcm9ibGVtcywgbGVudCBtYWNoaW5lcywgZ2F2ZQotYWR2aWNlIGFuZCB3ZXJlIGdlbmVyYWxseSBoZWxwZnVsLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotPC9jaGFwdGVyPgotCi0KLQotPGNoYXB0ZXIgaWQ9ImxpYnByb2ciIHhyZWZsYWJlbD0iUHJvZ3JhbW1pbmcgd2l0aCBsaWJiemlwMiI+Ci08dGl0bGU+Ci1Qcm9ncmFtbWluZyB3aXRoIDxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+Ci08L3RpdGxlPgotCi08cGFyYT5UaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBwcm9ncmFtbWluZyBpbnRlcmZhY2UgdG8KLTxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+Rm9yIGdlbmVyYWwgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiwgcGFydGljdWxhcmx5IGFib3V0Ci1tZW1vcnkgdXNlIGFuZCBwZXJmb3JtYW5jZSBhc3BlY3RzLCB5b3UnZCBiZSB3ZWxsIGFkdmlzZWQgdG8gcmVhZAotPHhyZWYgbGlua2VuZD0idXNpbmciLz4gYXMgd2VsbC48L3BhcmE+Ci0KLQotPHNlY3QxIGlkPSJ0b3AtbGV2ZWwiIHhyZWZsYWJlbD0iVG9wLWxldmVsIHN0cnVjdHVyZSI+Ci08dGl0bGU+VG9wLWxldmVsIHN0cnVjdHVyZTwvdGl0bGU+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGlzIGEgZmxleGlibGUKLWxpYnJhcnkgZm9yIGNvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nIGRhdGEgaW4gdGhlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkYXRhIGZvcm1hdC4gIEFsdGhvdWdoCi1wYWNrYWdlZCBhcyBhIHNpbmdsZSBlbnRpdHksIGl0IGhlbHBzIHRvIHJlZ2FyZCB0aGUgbGlicmFyeSBhcwotdGhyZWUgc2VwYXJhdGUgcGFydHM6IHRoZSBsb3cgbGV2ZWwgaW50ZXJmYWNlLCBhbmQgdGhlIGhpZ2ggbGV2ZWwKLWludGVyZmFjZSwgYW5kIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMuPC9wYXJhPgotCi08cGFyYT5UaGUgc3RydWN0dXJlIG9mCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnppcDI8L2NvbXB1dGVyb3V0cHV0PidzIGludGVyZmFjZXMgaXMgc2ltaWxhcgotdG8gdGhhdCBvZiBKZWFuLWxvdXAgR2FpbGx5J3MgYW5kIE1hcmsgQWRsZXIncyBleGNlbGxlbnQKLTxjb21wdXRlcm91dHB1dD56bGliPC9jb21wdXRlcm91dHB1dD4gbGlicmFyeS48L3BhcmE+Ci0KLTxwYXJhPkFsbCBleHRlcm5hbGx5IHZpc2libGUgc3ltYm9scyBoYXZlIG5hbWVzIGJlZ2lubmluZwotPGNvbXB1dGVyb3V0cHV0PkJaMl88L2NvbXB1dGVyb3V0cHV0Pi4gIFRoaXMgaXMgbmV3IGluIHZlcnNpb24KLTEuMC4gIFRoZSBpbnRlbnRpb24gaXMgdG8gbWluaW1pc2UgcG9sbHV0aW9uIG9mIHRoZSBuYW1lc3BhY2VzIG9mCi1saWJyYXJ5IGNsaWVudHMuPC9wYXJhPgotCi08cGFyYT5UbyB1c2UgYW55IHBhcnQgb2YgdGhlIGxpYnJhcnksIHlvdSBuZWVkIHRvCi08Y29tcHV0ZXJvdXRwdXQ+I2luY2x1ZGUgJmx0O2J6bGliLmgmZ3Q7PC9jb21wdXRlcm91dHB1dD4KLWludG8geW91ciBzb3VyY2VzLjwvcGFyYT4KLQotCi0KLTxzZWN0MiBpZD0ibGwtc3VtbWFyeSIgeHJlZmxhYmVsPSJMb3ctbGV2ZWwgc3VtbWFyeSI+Ci08dGl0bGU+TG93LWxldmVsIHN1bW1hcnk8L3RpdGxlPgotCi08cGFyYT5UaGlzIGludGVyZmFjZSBwcm92aWRlcyBzZXJ2aWNlcyBmb3IgY29tcHJlc3NpbmcgYW5kCi1kZWNvbXByZXNzaW5nIGRhdGEgaW4gbWVtb3J5LiAgVGhlcmUncyBubyBwcm92aXNpb24gZm9yIGRlYWxpbmcKLXdpdGggZmlsZXMsIHN0cmVhbXMgb3IgYW55IG90aGVyIEkvTyBtZWNoYW5pc21zLCBqdXN0IHN0cmFpZ2h0Ci1tZW1vcnktdG8tbWVtb3J5IHdvcmsuICBJbiBmYWN0LCB0aGlzIHBhcnQgb2YgdGhlIGxpYnJhcnkgY2FuIGJlCi1jb21waWxlZCB3aXRob3V0IGluY2x1c2lvbiBvZgotPGNvbXB1dGVyb3V0cHV0PnN0ZGlvLmg8L2NvbXB1dGVyb3V0cHV0Piwgd2hpY2ggbWF5IGJlIGhlbHBmdWwKLWZvciBlbWJlZGRlZCBhcHBsaWNhdGlvbnMuPC9wYXJhPgotCi08cGFyYT5UaGUgbG93LWxldmVsIHBhcnQgb2YgdGhlIGxpYnJhcnkgaGFzIG5vIGdsb2JhbCB2YXJpYWJsZXMKLWFuZCBpcyB0aGVyZWZvcmUgdGhyZWFkLXNhZmUuPC9wYXJhPgotCi08cGFyYT5TaXggcm91dGluZXMgbWFrZSB1cCB0aGUgbG93IGxldmVsIGludGVyZmFjZToKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0VuZDwvY29tcHV0ZXJvdXRwdXQ+IGZvcgotY29tcHJlc3Npb24sIGFuZCBhIGNvcnJlc3BvbmRpbmcgdHJpbwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PiBmb3IKLWRlY29tcHJlc3Npb24uICBUaGUgPGNvbXB1dGVyb3V0cHV0PipJbml0PC9jb21wdXRlcm91dHB1dD4KLWZ1bmN0aW9ucyBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gYW5kIGRvCi1vdGhlciBpbml0aWFsaXNhdGlvbnMsIHdoaWxzdCB0aGUKLTxjb21wdXRlcm91dHB1dD4qRW5kPC9jb21wdXRlcm91dHB1dD4gZnVuY3Rpb25zIGNsb3NlIGRvd24KLW9wZXJhdGlvbnMgYW5kIHJlbGVhc2UgbWVtb3J5LjwvcGFyYT4KLQotPHBhcmE+VGhlIHJlYWwgd29yayBpcyBkb25lIGJ5Ci08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4uICBUaGVzZQotY29tcHJlc3MgYW5kIGRlY29tcHJlc3MgZGF0YSBmcm9tIGEgdXNlci1zdXBwbGllZCBpbnB1dCBidWZmZXIgdG8KLWEgdXNlci1zdXBwbGllZCBvdXRwdXQgYnVmZmVyLiAgVGhlc2UgYnVmZmVycyBjYW4gYmUgYW55IHNpemU7Ci1hcmJpdHJhcnkgcXVhbnRpdGllcyBvZiBkYXRhIGFyZSBoYW5kbGVkIGJ5IG1ha2luZyByZXBlYXRlZCBjYWxscwotdG8gdGhlc2UgZnVuY3Rpb25zLiAgVGhpcyBpcyBhIGZsZXhpYmxlIG1lY2hhbmlzbSBhbGxvd2luZyBhCi1jb25zdW1lci1wdWxsIHN0eWxlIG9mIGFjdGl2aXR5LCBvciBwcm9kdWNlci1wdXNoLCBvciBhIG1peHR1cmUKLW9mIGJvdGguPC9wYXJhPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iaGwtc3VtbWFyeSIgeHJlZmxhYmVsPSJIaWdoLWxldmVsIHN1bW1hcnkiPgotPHRpdGxlPkhpZ2gtbGV2ZWwgc3VtbWFyeTwvdGl0bGU+Ci0KLTxwYXJhPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIHNvbWUgaGFuZHkgd3JhcHBlcnMgYXJvdW5kIHRoZQotbG93LWxldmVsIGludGVyZmFjZSB0byBmYWNpbGl0YXRlIHJlYWRpbmcgYW5kIHdyaXRpbmcKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGZvcm1hdCBmaWxlcwotKDxjb21wdXRlcm91dHB1dD4uYnoyPC9jb21wdXRlcm91dHB1dD4gZmlsZXMpLiAgVGhlIHJvdXRpbmVzCi1wcm92aWRlIGhvb2tzIHRvIGZhY2lsaXRhdGUgcmVhZGluZyBmaWxlcyBpbiB3aGljaCB0aGUKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGRhdGEgc3RyZWFtIGlzIGVtYmVkZGVkCi13aXRoaW4gc29tZSBsYXJnZXItc2NhbGUgZmlsZSBzdHJ1Y3R1cmUsIG9yIHdoZXJlIHRoZXJlIGFyZQotbXVsdGlwbGUgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZGF0YSBzdHJlYW1zCi1jb25jYXRlbmF0ZWQgZW5kLXRvLWVuZC48L3BhcmE+Ci0KLTxwYXJhPkZvciByZWFkaW5nIGZpbGVzLAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRPcGVuPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IGFuZCAKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb21wdXRlcm91dHB1dD4gYXJlCi1zdXBwbGllZC4gIEZvciB3cml0aW5nIGZpbGVzLAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlT3BlbjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVGaW5pc2g8L2NvbXB1dGVyb3V0cHV0PiBhcmUKLWF2YWlsYWJsZS48L3BhcmE+Ci0KLTxwYXJhPkFzIHdpdGggdGhlIGxvdy1sZXZlbCBsaWJyYXJ5LCBubyBnbG9iYWwgdmFyaWFibGVzIGFyZSB1c2VkCi1zbyB0aGUgbGlicmFyeSBpcyBwZXIgc2UgdGhyZWFkLXNhZmUuICBIb3dldmVyLCBpZiBJL08gZXJyb3JzCi1vY2N1ciB3aGlsc3QgcmVhZGluZyBvciB3cml0aW5nIHRoZSB1bmRlcmx5aW5nIGNvbXByZXNzZWQgZmlsZXMsCi15b3UgbWF5IGhhdmUgdG8gY29uc3VsdCA8Y29tcHV0ZXJvdXRwdXQ+ZXJybm88L2NvbXB1dGVyb3V0cHV0PiB0bwotZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuICBJbiB0aGF0IGNhc2UsIHlvdSdkIG5lZWQgYSBDCi1saWJyYXJ5IHdoaWNoIGNvcnJlY3RseSBzdXBwb3J0cwotPGNvbXB1dGVyb3V0cHV0PmVycm5vPC9jb21wdXRlcm91dHB1dD4gaW4gYSBtdWx0aXRocmVhZGVkCi1lbnZpcm9ubWVudC48L3BhcmE+Ci0KLTxwYXJhPlRvIG1ha2UgdGhlIGxpYnJhcnkgYSBsaXR0bGUgc2ltcGxlciBhbmQgbW9yZSBwb3J0YWJsZSwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkT3BlbjwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlT3BlbjwvY29tcHV0ZXJvdXRwdXQ+IHJlcXVpcmUgeW91IHRvCi1wYXNzIHRoZW0gZmlsZSBoYW5kbGVzICg8Y29tcHV0ZXJvdXRwdXQ+RklMRSo8L2NvbXB1dGVyb3V0cHV0PnMpCi13aGljaCBoYXZlIHByZXZpb3VzbHkgYmVlbiBvcGVuZWQgZm9yIHJlYWRpbmcgb3Igd3JpdGluZwotcmVzcGVjdGl2ZWx5LiAgVGhhdCBhdm9pZHMgcG9ydGFiaWxpdHkgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoCi1maWxlIG9wZXJhdGlvbnMgYW5kIGZpbGUgYXR0cmlidXRlcywgd2hpbHN0IG5vdCBiZWluZyBtdWNoIG9mIGFuCi1pbXBvc2l0aW9uIG9uIHRoZSBwcm9ncmFtbWVyLjwvcGFyYT4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9InV0aWwtZm5zLXN1bW1hcnkiIHhyZWZsYWJlbD0iVXRpbGl0eSBmdW5jdGlvbnMgc3VtbWFyeSI+Ci08dGl0bGU+VXRpbGl0eSBmdW5jdGlvbnMgc3VtbWFyeTwvdGl0bGU+Ci0KLTxwYXJhPkZvciB2ZXJ5IHNpbXBsZSBuZWVkcywKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGFyZQotcHJvdmlkZWQuICBUaGVzZSBjb21wcmVzcyBkYXRhIGluIG1lbW9yeSBmcm9tIG9uZSBidWZmZXIgdG8KLWFub3RoZXIgYnVmZmVyIGluIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuICBZb3Ugc2hvdWxkIGFzc2Vzcwotd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgZnVsZmlsbCB5b3VyIG1lbW9yeS10by1tZW1vcnkKLWNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcmVxdWlyZW1lbnRzIGJlZm9yZSBpbnZlc3RpbmcgZWZmb3J0IGluCi11bmRlcnN0YW5kaW5nIHRoZSBtb3JlIGdlbmVyYWwgYnV0IG1vcmUgY29tcGxleCBsb3ctbGV2ZWwKLWludGVyZmFjZS48L3BhcmE+Ci0KLTxwYXJhPllvc2hpb2thIFRzdW5lbwotKDxjb21wdXRlcm91dHB1dD50c3VuZW9AcnIuaWlqNHUub3IuanA8L2NvbXB1dGVyb3V0cHV0PikgaGFzCi1jb250cmlidXRlZCBzb21lIGZ1bmN0aW9ucyB0byBnaXZlIGJldHRlcgotPGNvbXB1dGVyb3V0cHV0PnpsaWI8L2NvbXB1dGVyb3V0cHV0PiBjb21wYXRpYmlsaXR5LiAgVGhlc2UKLWZ1bmN0aW9ucyBhcmUgPGNvbXB1dGVyb3V0cHV0PkJaMl9iem9wZW48L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpyZWFkPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6d3JpdGU8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpmbHVzaDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iemNsb3NlPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpsaWJWZXJzaW9uPC9jb21wdXRlcm91dHB1dD4uICBZb3UgbWF5IGZpbmQKLXRoZXNlIGZ1bmN0aW9ucyBtb3JlIGNvbnZlbmllbnQgZm9yIHNpbXBsZSBmaWxlIHJlYWRpbmcgYW5kCi13cml0aW5nLCB0aGFuIHRob3NlIGluIHRoZSBoaWdoLWxldmVsIGludGVyZmFjZS4gIFRoZXNlIGZ1bmN0aW9ucwotYXJlIG5vdCAoeWV0KSBvZmZpY2lhbGx5IHBhcnQgb2YgdGhlIGxpYnJhcnksIGFuZCBhcmUgbWluaW1hbGx5Ci1kb2N1bWVudGVkIGhlcmUuICBJZiB0aGV5IGJyZWFrLCB5b3UgZ2V0IHRvIGtlZXAgYWxsIHRoZSBwaWVjZXMuCi1JIGhvcGUgdG8gZG9jdW1lbnQgdGhlbSBwcm9wZXJseSB3aGVuIHRpbWUgcGVybWl0cy48L3BhcmE+Ci0KLTxwYXJhPllvc2hpb2thIGFsc28gY29udHJpYnV0ZWQgbW9kaWZpY2F0aW9ucyB0byBhbGxvdyB0aGUKLWxpYnJhcnkgdG8gYmUgYnVpbHQgYXMgYSBXaW5kb3dzIERMTC48L3BhcmE+Ci0KLTwvc2VjdDI+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJlcnItaGFuZGxpbmciIHhyZWZsYWJlbD0iRXJyb3IgaGFuZGxpbmciPgotPHRpdGxlPkVycm9yIGhhbmRsaW5nPC90aXRsZT4KLQotPHBhcmE+VGhlIGxpYnJhcnkgaXMgZGVzaWduZWQgdG8gcmVjb3ZlciBjbGVhbmx5IGluIGFsbAotc2l0dWF0aW9ucywgaW5jbHVkaW5nIHRoZSB3b3JzdC1jYXNlIHNpdHVhdGlvbiBvZiBkZWNvbXByZXNzaW5nCi1yYW5kb20gZGF0YS4gIEknbSBub3QgMTAwJSBzdXJlIHRoYXQgaXQgY2FuIGFsd2F5cyBkbyB0aGlzLCBzbwoteW91IG1pZ2h0IHdhbnQgdG8gYWRkIGEgc2lnbmFsIGhhbmRsZXIgdG8gY2F0Y2ggc2VnbWVudGF0aW9uCi12aW9sYXRpb25zIGR1cmluZyBkZWNvbXByZXNzaW9uIGlmIHlvdSBhcmUgZmVlbGluZyBlc3BlY2lhbGx5Ci1wYXJhbm9pZC4gIEkgd291bGQgYmUgaW50ZXJlc3RlZCBpbiBoZWFyaW5nIG1vcmUgYWJvdXQgdGhlCi1yb2J1c3RuZXNzIG9mIHRoZSBsaWJyYXJ5IHRvIGNvcnJ1cHRlZCBjb21wcmVzc2VkIGRhdGEuPC9wYXJhPgotCi08cGFyYT5WZXJzaW9uIDEuMC4zIG1vcmUgcm9idXN0IGluIHRoaXMgcmVzcGVjdCB0aGFuIGFueQotcHJldmlvdXMgdmVyc2lvbi4gIEludmVzdGlnYXRpb25zIHdpdGggVmFsZ3JpbmQgKGEgdG9vbCBmb3IgZGV0ZWN0aW5nCi1wcm9ibGVtcyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50KSBpbmRpY2F0ZQotdGhhdCwgYXQgbGVhc3QgZm9yIHRoZSBmZXcgZmlsZXMgSSB0ZXN0ZWQsIGFsbCBzaW5nbGUtYml0IGVycm9ycwotaW4gdGhlIGRlY29tcHJlc3NlZCBkYXRhIGFyZSBjYXVnaHQgcHJvcGVybHksIHdpdGggbm8KLXNlZ21lbnRhdGlvbiBmYXVsdHMsIG5vIHVzZXMgb2YgdW5pbml0aWFsaXNlZCBkYXRhLCBubyBvdXQgb2YKLXJhbmdlIHJlYWRzIG9yIHdyaXRlcywgYW5kIG5vIGluZmluaXRlIGxvb3BpbmcgaW4gdGhlIGRlY29tcHJlc3Nvci4KLVNvIGl0J3MgY2VydGFpbmx5IHByZXR0eSByb2J1c3QsIGFsdGhvdWdoCi1JIHdvdWxkbid0IGNsYWltIGl0IHRvIGJlIHRvdGFsbHkgYm9tYnByb29mLjwvcGFyYT4KLQotPHBhcmE+VGhlIGZpbGUgPGNvbXB1dGVyb3V0cHV0PmJ6bGliLmg8L2NvbXB1dGVyb3V0cHV0PiBjb250YWlucwotYWxsIGRlZmluaXRpb25zIG5lZWRlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBJbiBwYXJ0aWN1bGFyLCB5b3UKLXNob3VsZCBkZWZpbml0ZWx5IG5vdCBpbmNsdWRlCi08Y29tcHV0ZXJvdXRwdXQ+YnpsaWJfcHJpdmF0ZS5oPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JbiA8Y29tcHV0ZXJvdXRwdXQ+YnpsaWIuaDwvY29tcHV0ZXJvdXRwdXQ+LCB0aGUgdmFyaW91cwotcmV0dXJuIHZhbHVlcyBhcmUgZGVmaW5lZC4gIFRoZSBmb2xsb3dpbmcgbGlzdCBpcyBub3QgaW50ZW5kZWQgYXMKLWFuIGV4aGF1c3RpdmUgZGVzY3JpcHRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggYSBnaXZlbgotdmFsdWUgbWF5IGJlIHJldHVybmVkIC0tIHRob3NlIGRlc2NyaXB0aW9ucyBhcmUgZ2l2ZW4gbGF0ZXIuCi1SYXRoZXIsIGl0IGlzIGludGVuZGVkIHRvIGNvbnZleSB0aGUgcm91Z2ggbWVhbmluZyBvZiBlYWNoIHJldHVybgotdmFsdWUuICBUaGUgZmlyc3QgZml2ZSBhY3Rpb25zIGFyZSBub3JtYWwgYW5kIG5vdCBpbnRlbmRlZCB0bwotZGVub3RlIGFuIGVycm9yIHNpdHVhdGlvbi48L3BhcmE+Ci0KLTx2YXJpYWJsZWxpc3Q+Ci0KLSA8dmFybGlzdGVudHJ5PgotICA8dGVybT48Y29tcHV0ZXJvdXRwdXQ+QlpfT0s8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1ZXN0ZWQgYWN0aW9uIHdhcyBjb21wbGV0ZWQKLSAgIHN1Y2Nlc3NmdWxseS48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9SVU5fT0ssIEJaX0ZMVVNIX09LLAotICAgIEJaX0ZJTklTSF9PSzwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+SW4gCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiwgdGhlIHJlcXVlc3RlZAotICAgZmx1c2gvZmluaXNoL25vdGhpbmctc3BlY2lhbCBhY3Rpb24gd2FzIGNvbXBsZXRlZAotICAgc3VjY2Vzc2Z1bGx5LjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPkNvbXByZXNzaW9uIG9mIGRhdGEgd2FzIGNvbXBsZXRlZCwgb3IgdGhlCi0gICBsb2dpY2FsIHN0cmVhbSBlbmQgd2FzIGRldGVjdGVkIGR1cmluZwotICAgZGVjb21wcmVzc2lvbi48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotPC92YXJpYWJsZWxpc3Q+Ci0KLTxwYXJhPlRoZSBmb2xsb3dpbmcgcmV0dXJuIHZhbHVlcyBpbmRpY2F0ZSBhbiBlcnJvciBvZiBzb21lCi1raW5kLjwvcGFyYT4KLQotPHZhcmlhYmxlbGlzdD4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9DT05GSUdfRVJST1I8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPkluZGljYXRlcyB0aGF0IHRoZSBsaWJyYXJ5IGhhcyBiZWVuIGltcHJvcGVybHkKLSAgIGNvbXBpbGVkIG9uIHlvdXIgcGxhdGZvcm0gLS0gYSBtYWpvciBjb25maWd1cmF0aW9uIGVycm9yLgotICAgU3BlY2lmaWNhbGx5LCBpdCBtZWFucyB0aGF0Ci0gICA8Y29tcHV0ZXJvdXRwdXQ+c2l6ZW9mKGNoYXIpPC9jb21wdXRlcm91dHB1dD4sCi0gICA8Y29tcHV0ZXJvdXRwdXQ+c2l6ZW9mKHNob3J0KTwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICAgPGNvbXB1dGVyb3V0cHV0PnNpemVvZihpbnQpPC9jb21wdXRlcm91dHB1dD4gYXJlIG5vdCAxLCAyIGFuZAotICAgNCByZXNwZWN0aXZlbHksIGFzIHRoZXkgc2hvdWxkIGJlLiAgTm90ZSB0aGF0IHRoZSBsaWJyYXJ5Ci0gICBzaG91bGQgc3RpbGwgd29yayBwcm9wZXJseSBvbiA2NC1iaXQgcGxhdGZvcm1zIHdoaWNoIGZvbGxvdwotICAgdGhlIExQNjQgcHJvZ3JhbW1pbmcgbW9kZWwgLS0gdGhhdCBpcywgd2hlcmUKLSAgIDxjb21wdXRlcm91dHB1dD5zaXplb2YobG9uZyk8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgIDxjb21wdXRlcm91dHB1dD5zaXplb2Yodm9pZCopPC9jb21wdXRlcm91dHB1dD4gYXJlIDguICBVbmRlcgotICAgTFA2NCwgPGNvbXB1dGVyb3V0cHV0PnNpemVvZihpbnQpPC9jb21wdXRlcm91dHB1dD4gaXMgc3RpbGwgNCwKLSAgIHNvIDxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+LCB3aGljaCBkb2Vzbid0Ci0gICB1c2UgdGhlIDxjb21wdXRlcm91dHB1dD5sb25nPC9jb21wdXRlcm91dHB1dD4gdHlwZSwgaXMKLSAgIE9LLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX1NFUVVFTkNFX0VSUk9SPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5XaGVuIHVzaW5nIHRoZSBsaWJyYXJ5LCBpdCBpcyBpbXBvcnRhbnQgdG8gY2FsbAotICAgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgY29ycmVjdCBzZXF1ZW5jZSBhbmQgd2l0aCBkYXRhIHN0cnVjdHVyZXMKLSAgIChidWZmZXJzIGV0YykgaW4gdGhlIGNvcnJlY3Qgc3RhdGVzLgotICAgPGNvbXB1dGVyb3V0cHV0PmxpYmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gY2hlY2tzIGFzIG11Y2ggYXMgaXQKLSAgIGNhbiB0byBlbnN1cmUgdGhpcyBpcyBoYXBwZW5pbmcsIGFuZCByZXR1cm5zCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QlpfU0VRVUVOQ0VfRVJST1I8L2NvbXB1dGVyb3V0cHV0PiBpZiBub3QuCi0gICBDb2RlIHdoaWNoIGNvbXBsaWVzIHByZWNpc2VseSB3aXRoIHRoZSBmdW5jdGlvbiBzZW1hbnRpY3MsIGFzCi0gICBkZXRhaWxlZCBiZWxvdywgc2hvdWxkIG5ldmVyIHJlY2VpdmUgdGhpcyB2YWx1ZTsgc3VjaCBhbiBldmVudAotICAgZGVub3RlcyBidWdneSBjb2RlIHdoaWNoIHlvdSBzaG91bGQKLSAgIGludmVzdGlnYXRlLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX1BBUkFNX0VSUk9SPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5SZXR1cm5lZCB3aGVuIGEgcGFyYW1ldGVyIHRvIGEgZnVuY3Rpb24gY2FsbCBpcwotICAgb3V0IG9mIHJhbmdlIG9yIG90aGVyd2lzZSBtYW5pZmVzdGx5IGluY29ycmVjdC4gIEFzIHdpdGgKLSAgIDxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+LCB0aGlzCi0gICBkZW5vdGVzIGEgYnVnIGluIHRoZSBjbGllbnQgY29kZS4gIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QlpfUEFSQU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgIDxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+IGlzIGEgYml0Ci0gICBoYXp5LCBidXQgc3RpbGwgd29ydGggbWFraW5nLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX01FTV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+UmV0dXJuZWQgd2hlbiBhIHJlcXVlc3QgdG8gYWxsb2NhdGUgbWVtb3J5Ci0gICBmYWlsZWQuICBOb3RlIHRoYXQgdGhlIHF1YW50aXR5IG9mIG1lbW9yeSBuZWVkZWQgdG8gZGVjb21wcmVzcwotICAgYSBzdHJlYW0gY2Fubm90IGJlIGRldGVybWluZWQgdW50aWwgdGhlIHN0cmVhbSdzIGhlYWRlciBoYXMKLSAgIGJlZW4gcmVhZC4gIFNvCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PiBtYXkgcmV0dXJuCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QlpfTUVNX0VSUk9SPC9jb21wdXRlcm91dHB1dD4gZXZlbiB0aG91Z2ggc29tZQotICAgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMgYmVlbiByZWFkLiAgVGhlIHNhbWUgaXMgbm90IHRydWUKLSAgIGZvciBjb21wcmVzc2lvbjsgb25jZQotICAgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+IG9yCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVPcGVuPC9jb21wdXRlcm91dHB1dD4gaGF2ZQotICAgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCwKLSAgIDxjb21wdXRlcm91dHB1dD5CWl9NRU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0PiBjYW5ub3QKLSAgIG9jY3VyLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX0RBVEFfRVJST1I8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPlJldHVybmVkIHdoZW4gYSBkYXRhIGludGVncml0eSBlcnJvciBpcwotICAgZGV0ZWN0ZWQgZHVyaW5nIGRlY29tcHJlc3Npb24uICBNb3N0IGltcG9ydGFudGx5LCB0aGlzIG1lYW5zCi0gICB3aGVuIHN0b3JlZCBhbmQgY29tcHV0ZWQgQ1JDcyBmb3IgdGhlIGRhdGEgZG8gbm90IG1hdGNoLiAgVGhpcwotICAgdmFsdWUgaXMgYWxzbyByZXR1cm5lZCB1cG9uIGRldGVjdGlvbiBvZiBhbnkgb3RoZXIgYW5vbWFseSBpbgotICAgdGhlIGNvbXByZXNzZWQgZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9EQVRBX0VSUk9SX01BR0lDPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5BcyBhIHNwZWNpYWwgY2FzZSBvZgotICAgPGNvbXB1dGVyb3V0cHV0PkJaX0RBVEFfRVJST1I8L2NvbXB1dGVyb3V0cHV0PiwgaXQgaXMKLSAgIHNvbWV0aW1lcyB1c2VmdWwgdG8ga25vdyB3aGVuIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBkb2VzIG5vdAotICAgc3RhcnQgd2l0aCB0aGUgY29ycmVjdCBtYWdpYyBieXRlcyAoPGNvbXB1dGVyb3V0cHV0PidCJyAnWicKLSAgICdoJzwvY29tcHV0ZXJvdXRwdXQ+KS48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9JT19FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+PC90ZXJtPgotICA8bGlzdGl0ZW0+PHBhcmE+UmV0dXJuZWQgYnkKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGU8L2NvbXB1dGVyb3V0cHV0PiB3aGVuIHRoZXJlIGlzIGFuCi0gICBlcnJvciByZWFkaW5nIG9yIHdyaXRpbmcgaW4gdGhlIGNvbXByZXNzZWQgZmlsZSwgYW5kIGJ5Ci0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZE9wZW48L2NvbXB1dGVyb3V0cHV0PiBhbmQKLSAgIDxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZU9wZW48L2NvbXB1dGVyb3V0cHV0PiBmb3IgYXR0ZW1wdHMKLSAgIHRvIHVzZSBhIGZpbGUgZm9yIHdoaWNoIHRoZSBlcnJvciBpbmRpY2F0b3IgKHZpeiwKLSAgIDxjb21wdXRlcm91dHB1dD5mZXJyb3IoZik8L2NvbXB1dGVyb3V0cHV0PikgaXMgc2V0LiAgT24KLSAgIHJlY2VpcHQgb2YgPGNvbXB1dGVyb3V0cHV0PkJaX0lPX0VSUk9SPC9jb21wdXRlcm91dHB1dD4sIHRoZQotICAgY2FsbGVyIHNob3VsZCBjb25zdWx0IDxjb21wdXRlcm91dHB1dD5lcnJubzwvY29tcHV0ZXJvdXRwdXQ+Ci0gICBhbmQvb3IgPGNvbXB1dGVyb3V0cHV0PnBlcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IHRvIGFjcXVpcmUKLSAgIG9wZXJhdGluZy1zeXN0ZW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gICBwcm9ibGVtLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi0gPHZhcmxpc3RlbnRyeT4KLSAgPHRlcm0+PGNvbXB1dGVyb3V0cHV0PkJaX1VORVhQRUNURURfRU9GPC9jb21wdXRlcm91dHB1dD48L3Rlcm0+Ci0gIDxsaXN0aXRlbT48cGFyYT5SZXR1cm5lZCBieQotICAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PiB3aGVuIHRoZQotICAgY29tcHJlc3NlZCBmaWxlIGZpbmlzaGVzIGJlZm9yZSB0aGUgbG9naWNhbCBlbmQgb2Ygc3RyZWFtIGlzCi0gICBkZXRlY3RlZC48L3BhcmE+PC9saXN0aXRlbT4KLSA8L3Zhcmxpc3RlbnRyeT4KLQotIDx2YXJsaXN0ZW50cnk+Ci0gIDx0ZXJtPjxjb21wdXRlcm91dHB1dD5CWl9PVVRCVUZGX0ZVTEw8L2NvbXB1dGVyb3V0cHV0PjwvdGVybT4KLSAgPGxpc3RpdGVtPjxwYXJhPlJldHVybmVkIGJ5Ci0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6QnVmZlRvQnVmZkNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gYW5kCi0gICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB0bwotICAgaW5kaWNhdGUgdGhhdCB0aGUgb3V0cHV0IGRhdGEgd2lsbCBub3QgZml0IGludG8gdGhlIG91dHB1dAotICAgYnVmZmVyIHByb3ZpZGVkLjwvcGFyYT48L2xpc3RpdGVtPgotIDwvdmFybGlzdGVudHJ5PgotCi08L3ZhcmlhYmxlbGlzdD4KLQotPC9zZWN0MT4KLQotCi0KLTxzZWN0MSBpZD0ibG93LWxldmVsIiB4cmVmbGFiZWw9Ij5Mb3ctbGV2ZWwgaW50ZXJmYWNlIj4KLTx0aXRsZT5Mb3ctbGV2ZWwgaW50ZXJmYWNlPC90aXRsZT4KLQotCi08c2VjdDIgaWQ9ImJ6Y29tcHJlc3MtaW5pdCIgeHJlZmxhYmVsPSJCWjJfYnpDb21wcmVzc0luaXQiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLXR5cGVkZWYgc3RydWN0IHsKLSAgY2hhciAqbmV4dF9pbjsKLSAgdW5zaWduZWQgaW50IGF2YWlsX2luOwotICB1bnNpZ25lZCBpbnQgdG90YWxfaW5fbG8zMjsKLSAgdW5zaWduZWQgaW50IHRvdGFsX2luX2hpMzI7Ci0KLSAgY2hhciAqbmV4dF9vdXQ7Ci0gIHVuc2lnbmVkIGludCBhdmFpbF9vdXQ7Ci0gIHVuc2lnbmVkIGludCB0b3RhbF9vdXRfbG8zMjsKLSAgdW5zaWduZWQgaW50IHRvdGFsX291dF9oaTMyOwotCi0gIHZvaWQgKnN0YXRlOwotCi0gIHZvaWQgKigqYnphbGxvYykodm9pZCAqLGludCxpbnQpOwotICB2b2lkICgqYnpmcmVlKSh2b2lkICosdm9pZCAqKTsKLSAgdm9pZCAqb3BhcXVlOwotfSBiel9zdHJlYW07Ci0KLWludCBCWjJfYnpDb21wcmVzc0luaXQgKCBiel9zdHJlYW0gKnN0cm0sIAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja1NpemUxMDBrLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmVyYm9zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3b3JrRmFjdG9yICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5QcmVwYXJlcyBmb3IgY29tcHJlc3Npb24uICBUaGUKLTxjb21wdXRlcm91dHB1dD5iel9zdHJlYW08L2NvbXB1dGVyb3V0cHV0PiBzdHJ1Y3R1cmUgaG9sZHMgYWxsCi1kYXRhIHBlcnRhaW5pbmcgdG8gdGhlIGNvbXByZXNzaW9uIGFjdGl2aXR5LiAgQQotPGNvbXB1dGVyb3V0cHV0PmJ6X3N0cmVhbTwvY29tcHV0ZXJvdXRwdXQ+IHN0cnVjdHVyZSBzaG91bGQgYmUKLWFsbG9jYXRlZCBhbmQgaW5pdGlhbGlzZWQgcHJpb3IgdG8gdGhlIGNhbGwuICBUaGUgZmllbGRzIG9mCi08Y29tcHV0ZXJvdXRwdXQ+Ynpfc3RyZWFtPC9jb21wdXRlcm91dHB1dD4gY29tcHJpc2UgdGhlIGVudGlyZXR5Ci1vZiB0aGUgdXNlci12aXNpYmxlIGRhdGEuICA8Y29tcHV0ZXJvdXRwdXQ+c3RhdGU8L2NvbXB1dGVyb3V0cHV0PgotaXMgYSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCBmb3IKLWNvbXByZXNzaW9uLjwvcGFyYT4KLQotPHBhcmE+Q3VzdG9tIG1lbW9yeSBhbGxvY2F0b3JzIGFyZSBzdXBwb3J0ZWQsIHZpYSBmaWVsZHMKLTxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4sIGFuZAotPGNvbXB1dGVyb3V0cHV0Pm9wYXF1ZTwvY29tcHV0ZXJvdXRwdXQ+LiAgVGhlIHZhbHVlCi08Y29tcHV0ZXJvdXRwdXQ+b3BhcXVlPC9jb21wdXRlcm91dHB1dD4gaXMgcGFzc2VkIHRvIGFzIHRoZSBmaXJzdAotYXJndW1lbnQgdG8gYWxsIGNhbGxzIHRvIDxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4KLWFuZCA8Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4sIGJ1dCBpcyBvdGhlcndpc2UKLWlnbm9yZWQgYnkgdGhlIGxpYnJhcnkuICBUaGUgY2FsbCA8Y29tcHV0ZXJvdXRwdXQ+YnphbGxvYyAoCi1vcGFxdWUsIG4sIG0gKTwvY29tcHV0ZXJvdXRwdXQ+IGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIHBvaW50ZXIKLTxjb21wdXRlcm91dHB1dD5wPC9jb21wdXRlcm91dHB1dD4gdG8gPGNvbXB1dGVyb3V0cHV0Pm4gKgotbTwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzIG9mIG1lbW9yeSwgYW5kIDxjb21wdXRlcm91dHB1dD5iemZyZWUgKAotb3BhcXVlLCBwICk8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgZnJlZSB0aGF0IG1lbW9yeS48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSBkb24ndCB3YW50IHRvIHVzZSBhIGN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yLCBzZXQKLTxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+b3BhcXVlPC9jb21wdXRlcm91dHB1dD4gdG8KLTxjb21wdXRlcm91dHB1dD5OVUxMPC9jb21wdXRlcm91dHB1dD4sIGFuZCB0aGUgbGlicmFyeSB3aWxsIHRoZW4KLXVzZSB0aGUgc3RhbmRhcmQgPGNvbXB1dGVyb3V0cHV0Pm1hbGxvYzwvY29tcHV0ZXJvdXRwdXQ+IC8KLTxjb21wdXRlcm91dHB1dD5mcmVlPC9jb21wdXRlcm91dHB1dD4gcm91dGluZXMuPC9wYXJhPgotCi08cGFyYT5CZWZvcmUgY2FsbGluZwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LCBmaWVsZHMKLTxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+b3BhcXVlPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIGJlIGZpbGxlZAotYXBwcm9wcmlhdGVseSwgYXMganVzdCBkZXNjcmliZWQuICBVcG9uIHJldHVybiwgdGhlIGludGVybmFsCi1zdGF0ZSB3aWxsIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpc2VkLCBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9pbl9sbzMyPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfaW5faGkzMjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PnRvdGFsX291dF9sbzMyPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfb3V0X2hpMzI8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGhhdmUgYmVlbgotc2V0IHRvIHplcm8uICBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgbGlicmFyeSB0byBpbmZvcm0KLXRoZSBjYWxsZXIgb2YgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHBhc3NlZCBpbnRvIGFuZCBvdXQgb2YgdGhlCi1saWJyYXJ5LCByZXNwZWN0aXZlbHkuICBZb3Ugc2hvdWxkIG5vdCB0cnkgdG8gY2hhbmdlIHRoZW0uICBBcyBvZgotdmVyc2lvbiAxLjAsIDY0LWJpdCBjb3VudHMgYXJlIG1haW50YWluZWQsIGV2ZW4gb24gMzItYml0Ci1wbGF0Zm9ybXMsIHVzaW5nIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+X2hpMzI8L2NvbXB1dGVyb3V0cHV0PgotZmllbGRzIHRvIHN0b3JlIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSBjb3VudC4gIFNvLCBmb3IgZXhhbXBsZSwKLXRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBpbiBpcyA8Y29tcHV0ZXJvdXRwdXQ+KHRvdGFsX2luX2hpMzIKLSYjNjA7JiM2MDsgMzIpICsgdG90YWxfaW5fbG8zMjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+UGFyYW1ldGVyIDxjb21wdXRlcm91dHB1dD5ibG9ja1NpemUxMDBrPC9jb21wdXRlcm91dHB1dD4KLXNwZWNpZmllcyB0aGUgYmxvY2sgc2l6ZSB0byBiZSB1c2VkIGZvciBjb21wcmVzc2lvbi4gIEl0IHNob3VsZAotYmUgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDkgaW5jbHVzaXZlLCBhbmQgdGhlIGFjdHVhbCBibG9jayBzaXplCi11c2VkIGlzIDEwMDAwMCB4IHRoaXMgZmlndXJlLiAgOSBnaXZlcyB0aGUgYmVzdCBjb21wcmVzc2lvbiBidXQKLXRha2VzIG1vc3QgbWVtb3J5LjwvcGFyYT4KLQotPHBhcmE+UGFyYW1ldGVyIDxjb21wdXRlcm91dHB1dD52ZXJib3NpdHk8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQKLWJlIHNldCB0byBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDQgaW5jbHVzaXZlLiAgMCBpcyBzaWxlbnQsIGFuZAotZ3JlYXRlciBudW1iZXJzIGdpdmUgaW5jcmVhc2luZ2x5IHZlcmJvc2UgbW9uaXRvcmluZy9kZWJ1Z2dpbmcKLW91dHB1dC4gIElmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIGNvbXBpbGVkIHdpdGgKLTxjb21wdXRlcm91dHB1dD4tREJaX05PX1NURElPPC9jb21wdXRlcm91dHB1dD4sIG5vIHN1Y2ggb3V0cHV0Ci13aWxsIGFwcGVhciBmb3IgYW55IHZlcmJvc2l0eSBzZXR0aW5nLjwvcGFyYT4KLQotPHBhcmE+UGFyYW1ldGVyIDxjb21wdXRlcm91dHB1dD53b3JrRmFjdG9yPC9jb21wdXRlcm91dHB1dD4KLWNvbnRyb2xzIGhvdyB0aGUgY29tcHJlc3Npb24gcGhhc2UgYmVoYXZlcyB3aGVuIHByZXNlbnRlZCB3aXRoCi13b3JzdCBjYXNlLCBoaWdobHkgcmVwZXRpdGl2ZSwgaW5wdXQgZGF0YS4gIElmIGNvbXByZXNzaW9uIHJ1bnMKLWludG8gZGlmZmljdWx0aWVzIGNhdXNlZCBieSByZXBldGl0aXZlIGRhdGEsIHRoZSBsaWJyYXJ5IHN3aXRjaGVzCi1mcm9tIHRoZSBzdGFuZGFyZCBzb3J0aW5nIGFsZ29yaXRobSB0byBhIGZhbGxiYWNrIGFsZ29yaXRobS4gIFRoZQotZmFsbGJhY2sgaXMgc2xvd2VyIHRoYW4gdGhlIHN0YW5kYXJkIGFsZ29yaXRobSBieSBwZXJoYXBzIGEKLWZhY3RvciBvZiB0aHJlZSwgYnV0IGFsd2F5cyBiZWhhdmVzIHJlYXNvbmFibHksIG5vIG1hdHRlciBob3cgYmFkCi10aGUgaW5wdXQuPC9wYXJhPgotCi08cGFyYT5Mb3dlciB2YWx1ZXMgb2YgPGNvbXB1dGVyb3V0cHV0PndvcmtGYWN0b3I8L2NvbXB1dGVyb3V0cHV0PgotcmVkdWNlIHRoZSBhbW91bnQgb2YgZWZmb3J0IHRoZSBzdGFuZGFyZCBhbGdvcml0aG0gd2lsbCBleHBlbmQKLWJlZm9yZSByZXNvcnRpbmcgdG8gdGhlIGZhbGxiYWNrLiAgWW91IHNob3VsZCBzZXQgdGhpcyBwYXJhbWV0ZXIKLWNhcmVmdWxseTsgdG9vIGxvdywgYW5kIG1hbnkgaW5wdXRzIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUKLWZhbGxiYWNrIGFsZ29yaXRobSBhbmQgc28gY29tcHJlc3MgcmF0aGVyIHNsb3dseSwgdG9vIGhpZ2gsIGFuZAoteW91ciBhdmVyYWdlLXRvLXdvcnN0IGNhc2UgY29tcHJlc3Npb24gdGltZXMgY2FuIGJlY29tZSB2ZXJ5Ci1sYXJnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDMwIGdpdmVzIHJlYXNvbmFibGUgYmVoYXZpb3VyIG92ZXIgYQotd2lkZSByYW5nZSBvZiBjaXJjdW1zdGFuY2VzLjwvcGFyYT4KLQotPHBhcmE+QWxsb3dhYmxlIHZhbHVlcyByYW5nZSBmcm9tIDAgdG8gMjUwIGluY2x1c2l2ZS4gIDAgaXMgYQotc3BlY2lhbCBjYXNlLCBlcXVpdmFsZW50IHRvIHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDMwLjwvcGFyYT4KLQotPHBhcmE+Tm90ZSB0aGF0IHRoZSBjb21wcmVzc2VkIG91dHB1dCBnZW5lcmF0ZWQgaXMgdGhlIHNhbWUKLXJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlIGZhbGxiYWNrIGFsZ29yaXRobSBpcwotdXNlZC48L3BhcmE+Ci0KLTxwYXJhPkJlIGF3YXJlIGFsc28gdGhhdCB0aGlzIHBhcmFtZXRlciBtYXkgZGlzYXBwZWFyIGVudGlyZWx5IGluCi1mdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkuICBJbiBwcmluY2lwbGUgaXQgc2hvdWxkIGJlCi1wb3NzaWJsZSB0byBkZXZpc2UgYSBnb29kIHdheSB0byBhdXRvbWF0aWNhbGx5IGNob29zZSB3aGljaAotYWxnb3JpdGhtIHRvIHVzZS4gIFN1Y2ggYSBtZWNoYW5pc20gd291bGQgcmVuZGVyIHRoZSBwYXJhbWV0ZXIKLW9ic29sZXRlLjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIHN0cm0gaXMgTlVMTCAKLSAgb3IgYmxvY2tTaXplIDwgMSBvciBibG9ja1NpemUgPiA5Ci0gIG9yIHZlcmJvc2l0eSA8IDAgb3IgdmVyYm9zaXR5ID4gNAotICBvciB3b3JrRmFjdG9yIDwgMCBvciB3b3JrRmFjdG9yID4gMjUwCi1CWl9NRU1fRVJST1IgCi0gIGlmIG5vdCBlbm91Z2ggbWVtb3J5IGlzIGF2YWlsYWJsZQotQlpfT0sgCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaMl9iekNvbXByZXNzCi0gIGlmIEJaX09LIGlzIHJldHVybmVkCi0gIG5vIHNwZWNpZmljIGFjdGlvbiBuZWVkZWQgaW4gY2FzZSBvZiBlcnJvcgotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6Q29tcHJlc3MiIHhyZWZsYWJlbD0iQloyX2J6Q29tcHJlc3MiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekNvbXByZXNzICggYnpfc3RyZWFtICpzdHJtLCBpbnQgYWN0aW9uICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5Qcm92aWRlcyBtb3JlIGlucHV0IGFuZC9vciBvdXRwdXQgYnVmZmVyIHNwYWNlIGZvciB0aGUKLWxpYnJhcnkuICBUaGUgY2FsbGVyIG1haW50YWlucyBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMsIGFuZAotY2FsbHMgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gdG8gdHJhbnNmZXIKLWRhdGEgYmV0d2VlbiB0aGVtLjwvcGFyYT4KLQotPHBhcmE+QmVmb3JlIGVhY2ggY2FsbCB0bwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9pbjwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBwb2ludCBhdCB0aGUgZGF0YQotdG8gYmUgY29tcHJlc3NlZCwgYW5kIDxjb21wdXRlcm91dHB1dD5hdmFpbF9pbjwvY29tcHV0ZXJvdXRwdXQ+Ci1zaG91bGQgaW5kaWNhdGUgaG93IG1hbnkgYnl0ZXMgdGhlIGxpYnJhcnkgbWF5IHJlYWQuCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB1cGRhdGVzCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9pbjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmF2YWlsX2luPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfaW48L2NvbXB1dGVyb3V0cHV0PiB0byByZWZsZWN0IHRoZSBudW1iZXIKLW9mIGJ5dGVzIGl0IGhhcyByZWFkLjwvcGFyYT4KLQotPHBhcmE+U2ltaWxhcmx5LCA8Y29tcHV0ZXJvdXRwdXQ+bmV4dF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQKLXBvaW50IHRvIGEgYnVmZmVyIGluIHdoaWNoIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgdG8gYmUgcGxhY2VkLAotd2l0aCA8Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfb3V0PC9jb21wdXRlcm91dHB1dD4gaW5kaWNhdGluZyBob3cKLW11Y2ggb3V0cHV0IHNwYWNlIGlzIGF2YWlsYWJsZS4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHVwZGF0ZXMKLTxjb21wdXRlcm91dHB1dD5uZXh0X291dDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmF2YWlsX291dDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PnRvdGFsX291dDwvY29tcHV0ZXJvdXRwdXQ+IHRvIHJlZmxlY3QgdGhlIG51bWJlcgotb2YgYnl0ZXMgb3V0cHV0LjwvcGFyYT4KLQotPHBhcmE+WW91IG1heSBwcm92aWRlIGFuZCByZW1vdmUgYXMgbGl0dGxlIG9yIGFzIG11Y2ggZGF0YSBhcyB5b3UKLWxpa2Ugb24gZWFjaCBjYWxsIG9mCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pi4gIEluIHRoZSBsaW1pdCwKLWl0IGlzIGFjY2VwdGFibGUgdG8gc3VwcGx5IGFuZCByZW1vdmUgZGF0YSBvbmUgYnl0ZSBhdCBhIHRpbWUsCi1hbHRob3VnaCB0aGlzIHdvdWxkIGJlIHRlcnJpYmx5IGluZWZmaWNpZW50LiAgWW91IHNob3VsZCBhbHdheXMKLWVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBieXRlIG9mIG91dHB1dCBzcGFjZSBpcyBhdmFpbGFibGUgYXQKLWVhY2ggY2FsbC48L3BhcmE+Ci0KLTxwYXJhPkEgc2Vjb25kIHB1cnBvc2Ugb2YKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGlzIHRvIHJlcXVlc3QgYQotY2hhbmdlIG9mIG1vZGUgb2YgdGhlIGNvbXByZXNzZWQgc3RyZWFtLjwvcGFyYT4KLQotPHBhcmE+Q29uY2VwdHVhbGx5LCBhIGNvbXByZXNzZWQgc3RyZWFtIGNhbiBiZSBpbiBvbmUgb2YgZm91cgotc3RhdGVzOiBJRExFLCBSVU5OSU5HLCBGTFVTSElORyBhbmQgRklOSVNISU5HLiAgQmVmb3JlCi1pbml0aWFsaXNhdGlvbgotKDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PikgYW5kIGFmdGVyCi10ZXJtaW5hdGlvbiAoPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4pLAotYSBzdHJlYW0gaXMgcmVnYXJkZWQgYXMgSURMRS48L3BhcmE+Ci0KLTxwYXJhPlVwb24gaW5pdGlhbGlzYXRpb24KLSg8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4pLCB0aGUgc3RyZWFtCi1pcyBwbGFjZWQgaW4gdGhlIFJVTk5JTkcgc3RhdGUuICBTdWJzZXF1ZW50IGNhbGxzIHRvCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgcGFzcwotPGNvbXB1dGVyb3V0cHV0PkJaX1JVTjwvY29tcHV0ZXJvdXRwdXQ+IGFzIHRoZSByZXF1ZXN0ZWQgYWN0aW9uOwotb3RoZXIgYWN0aW9ucyBhcmUgaWxsZWdhbCBhbmQgd2lsbCByZXN1bHQgaW4KLTxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+QXQgc29tZSBwb2ludCwgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3aWxsIGhhdmUgcHJvdmlkZWQgYWxsCi10aGUgaW5wdXQgZGF0YSBpdCB3YW50cyB0by4gIEl0IHdpbGwgdGhlbiB3YW50IHRvIGZpbmlzaCB1cCAtLSBpbgotZWZmZWN0LCBhc2tpbmcgdGhlIGxpYnJhcnkgdG8gcHJvY2VzcyBhbnkgZGF0YSBpdCBtaWdodCBoYXZlCi1idWZmZXJlZCBpbnRlcm5hbGx5LiAgSW4gdGhpcyBzdGF0ZSwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgbm8gbG9uZ2VyCi1hdHRlbXB0IHRvIHJlYWQgZGF0YSBmcm9tCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9pbjwvY29tcHV0ZXJvdXRwdXQ+LCBidXQgaXQgd2lsbCB3YW50IHRvCi13cml0ZSBkYXRhIHRvIDxjb21wdXRlcm91dHB1dD5uZXh0X291dDwvY29tcHV0ZXJvdXRwdXQ+LiAgQmVjYXVzZQotdGhlIG91dHB1dCBidWZmZXIgc3VwcGxpZWQgYnkgdGhlIHVzZXIgY2FuIGJlIGFyYml0cmFyaWx5IHNtYWxsLAotdGhlIGZpbmlzaGluZy11cCBvcGVyYXRpb24gY2Fubm90IG5lY2Vzc2FyaWx5IGJlIGRvbmUgd2l0aCBhCi1zaW5nbGUgY2FsbCBvZgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JbnN0ZWFkLCB0aGUgY2FsbGluZyBwcm9ncmFtIHBhc3NlcwotPGNvbXB1dGVyb3V0cHV0PkJaX0ZJTklTSDwvY29tcHV0ZXJvdXRwdXQ+IGFzIGFuIGFjdGlvbiB0bwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4uICBUaGlzIGNoYW5nZXMKLXRoZSBzdHJlYW0ncyBzdGF0ZSB0byBGSU5JU0hJTkcuICBBbnkgcmVtYWluaW5nIGlucHV0IChpZSwKLTxjb21wdXRlcm91dHB1dD5uZXh0X2luWzAgLi4gYXZhaWxfaW4tMV08L2NvbXB1dGVyb3V0cHV0PikgaXMKLWNvbXByZXNzZWQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgVG8gZG8gdGhpcywKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IG11c3QgYmUgY2FsbGVkCi1yZXBlYXRlZGx5IHVudGlsIGFsbCB0aGUgb3V0cHV0IGhhcyBiZWVuIGNvbnN1bWVkLiAgQXQgdGhhdAotcG9pbnQsIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHJldHVybnMKLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4sIGFuZCB0aGUgc3RyZWFtJ3MKLXN0YXRlIGlzIHNldCBiYWNrIHRvIElETEUuCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgdGhlbiBiZQotY2FsbGVkLjwvcGFyYT4KLQotPHBhcmE+SnVzdCB0byBtYWtlIHN1cmUgdGhlIGNhbGxpbmcgcHJvZ3JhbSBkb2VzIG5vdCBjaGVhdCwgdGhlCi1saWJyYXJ5IG1ha2VzIGEgbm90ZSBvZiA8Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfaW48L2NvbXB1dGVyb3V0cHV0PgotYXQgdGhlIHRpbWUgb2YgdGhlIGZpcnN0IGNhbGwgdG8KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IHdoaWNoIGhhcwotPGNvbXB1dGVyb3V0cHV0PkJaX0ZJTklTSDwvY29tcHV0ZXJvdXRwdXQ+IGFzIGFuIGFjdGlvbiAoaWUsIGF0Ci10aGUgdGltZSB0aGUgcHJvZ3JhbSBoYXMgYW5ub3VuY2VkIGl0cyBpbnRlbnRpb24gdG8gbm90IHN1cHBseQotYW55IG1vcmUgaW5wdXQpLiAgQnkgY29tcGFyaW5nIHRoaXMgdmFsdWUgd2l0aCB0aGF0IG9mCi08Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfaW48L2NvbXB1dGVyb3V0cHV0PiBvdmVyIHN1YnNlcXVlbnQgY2FsbHMKLXRvIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LCB0aGUgbGlicmFyeQotY2FuIGRldGVjdCBhbnkgYXR0ZW1wdHMgdG8gc2xpcCBpbiBtb3JlIGRhdGEgdG8gY29tcHJlc3MuICBBbnkKLWNhbGxzIGZvciB3aGljaCB0aGlzIGlzIGRldGVjdGVkIHdpbGwgcmV0dXJuCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU0VRVUVOQ0VfRVJST1I8L2NvbXB1dGVyb3V0cHV0Pi4gIFRoaXMKLWluZGljYXRlcyBhIHByb2dyYW1taW5nIG1pc3Rha2Ugd2hpY2ggc2hvdWxkIGJlIGNvcnJlY3RlZC48L3BhcmE+Ci0KLTxwYXJhPkluc3RlYWQgb2YgYXNraW5nIHRvIGZpbmlzaCwgdGhlIGNhbGxpbmcgcHJvZ3JhbSBtYXkgYXNrCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB0byB0YWtlIGFsbCB0aGUKLXJlbWFpbmluZyBpbnB1dCwgY29tcHJlc3MgaXQgYW5kIHRlcm1pbmF0ZSB0aGUgY3VycmVudAotKEJ1cnJvd3MtV2hlZWxlcikgY29tcHJlc3Npb24gYmxvY2suICBUaGlzIGNvdWxkIGJlIHVzZWZ1bCBmb3IKLWVycm9yIGNvbnRyb2wgcHVycG9zZXMuICBUaGUgbWVjaGFuaXNtIGlzIGFuYWxvZ291cyB0byB0aGF0IGZvcgotZmluaXNoaW5nOiBjYWxsIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+Ci13aXRoIGFuIGFjdGlvbiBvZiA8Y29tcHV0ZXJvdXRwdXQ+QlpfRkxVU0g8L2NvbXB1dGVyb3V0cHV0PiwKLXJlbW92ZSBvdXRwdXQgZGF0YSwgYW5kIHBlcnNpc3Qgd2l0aCB0aGUKLTxjb21wdXRlcm91dHB1dD5CWl9GTFVTSDwvY29tcHV0ZXJvdXRwdXQ+IGFjdGlvbiB1bnRpbCB0aGUgdmFsdWUKLTxjb21wdXRlcm91dHB1dD5CWl9SVU48L2NvbXB1dGVyb3V0cHV0PiBpcyByZXR1cm5lZC4gIEFzIHdpdGgKLWZpbmlzaGluZywgPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4KLWRldGVjdHMgYW55IGF0dGVtcHQgdG8gcHJvdmlkZSBtb3JlIGlucHV0IGRhdGEgb25jZSB0aGUgZmx1c2ggaGFzCi1iZWd1bi48L3BhcmE+Ci0KLTxwYXJhPk9uY2UgdGhlIGZsdXNoIGlzIGNvbXBsZXRlLCB0aGUgc3RyZWFtIHJldHVybnMgdG8gdGhlCi1ub3JtYWwgUlVOTklORyBzdGF0ZS48L3BhcmE+Ci0KLTxwYXJhPlRoaXMgYWxsIHNvdW5kcyBwcmV0dHkgY29tcGxleCwgYnV0IGlzbid0IHJlYWxseS4gIEhlcmUncyBhCi10YWJsZSB3aGljaCBzaG93cyB3aGljaCBhY3Rpb25zIGFyZSBhbGxvd2FibGUgaW4gZWFjaCBzdGF0ZSwgd2hhdAotYWN0aW9uIHdpbGwgYmUgdGFrZW4sIHdoYXQgdGhlIG5leHQgc3RhdGUgaXMsIGFuZCB3aGF0IHRoZQotbm9uLWVycm9yIHJldHVybiB2YWx1ZXMgYXJlLiAgTm90ZSB0aGF0IHlvdSBjYW4ndCBleHBsaWNpdGx5IGFzawotd2hhdCBzdGF0ZSB0aGUgc3RyZWFtIGlzIGluLCBidXQgbm9yIGRvIHlvdSBuZWVkIHRvIC0tIGl0IGNhbiBiZQotaW5mZXJyZWQgZnJvbSB0aGUgdmFsdWVzIHJldHVybmVkIGJ5Ci08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUlETEUvYW55Ci0gIElsbGVnYWwuICBJRExFIHN0YXRlIG9ubHkgZXhpc3RzIGFmdGVyIEJaMl9iekNvbXByZXNzRW5kIG9yCi0gIGJlZm9yZSBCWjJfYnpDb21wcmVzc0luaXQuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SCi0KLVJVTk5JTkcvQlpfUlVOCi0gIENvbXByZXNzIGZyb20gbmV4dF9pbiB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLgotICBOZXh0IHN0YXRlID0gUlVOTklORwotICBSZXR1cm4gdmFsdWUgPSBCWl9SVU5fT0sKLQotUlVOTklORy9CWl9GTFVTSAotICBSZW1lbWJlciBjdXJyZW50IHZhbHVlIG9mIG5leHRfaW4uIENvbXByZXNzIGZyb20gbmV4dF9pbgotICB0byBuZXh0X291dCBhcyBtdWNoIGFzIHBvc3NpYmxlLCBidXQgZG8gbm90IGFjY2VwdCBhbnkgbW9yZSBpbnB1dC4KLSAgTmV4dCBzdGF0ZSA9IEZMVVNISU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX0ZMVVNIX09LCi0KLVJVTk5JTkcvQlpfRklOSVNICi0gIFJlbWVtYmVyIGN1cnJlbnQgdmFsdWUgb2YgbmV4dF9pbi4gQ29tcHJlc3MgZnJvbSBuZXh0X2luCi0gIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBOZXh0IHN0YXRlID0gRklOSVNISU5HCi0gIFJldHVybiB2YWx1ZSA9IEJaX0ZJTklTSF9PSwotCi1GTFVTSElORy9CWl9GTFVTSAotICBDb21wcmVzcyBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQgYXMgbXVjaCBhcyBwb3NzaWJsZSwgCi0gIGJ1dCBkbyBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LgotICBJZiBhbGwgdGhlIGV4aXN0aW5nIGlucHV0IGhhcyBiZWVuIHVzZWQgdXAgYW5kIGFsbCBjb21wcmVzc2VkCi0gIG91dHB1dCBoYXMgYmVlbiByZW1vdmVkCi0gICAgTmV4dCBzdGF0ZSA9IFJVTk5JTkc7IFJldHVybiB2YWx1ZSA9IEJaX1JVTl9PSwotICBlbHNlCi0gICAgTmV4dCBzdGF0ZSA9IEZMVVNISU5HOyBSZXR1cm4gdmFsdWUgPSBCWl9GTFVTSF9PSwotCi1GTFVTSElORy9vdGhlciAgICAgCi0gIElsbGVnYWwuCi0gIFJldHVybiB2YWx1ZSA9IEJaX1NFUVVFTkNFX0VSUk9SCi0KLUZJTklTSElORy9CWl9GSU5JU0gKLSAgQ29tcHJlc3MgZnJvbSBuZXh0X2luIHRvIG5leHRfb3V0IGFzIG11Y2ggYXMgcG9zc2libGUsCi0gIGJ1dCB0byBub3QgYWNjZXB0IGFueSBtb3JlIGlucHV0LiAgCi0gIElmIGFsbCB0aGUgZXhpc3RpbmcgaW5wdXQgaGFzIGJlZW4gdXNlZCB1cCBhbmQgYWxsIGNvbXByZXNzZWQKLSAgb3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQKLSAgICBOZXh0IHN0YXRlID0gSURMRTsgUmV0dXJuIHZhbHVlID0gQlpfU1RSRUFNX0VORAotICBlbHNlCi0gICAgTmV4dCBzdGF0ZSA9IEZJTklTSElORzsgUmV0dXJuIHZhbHVlID0gQlpfRklOSVNIX09LCi0KLUZJTklTSElORy9vdGhlcgotICBJbGxlZ2FsLgotICBSZXR1cm4gdmFsdWUgPSBCWl9TRVFVRU5DRV9FUlJPUgotPC9wcm9ncmFtbGlzdGluZz4KLQotCi08cGFyYT5UaGF0IHN0aWxsIGxvb2tzIGNvbXBsaWNhdGVkPyAgV2VsbCwgZmFpciBlbm91Z2guICBUaGUKLXVzdWFsIHNlcXVlbmNlIG9mIGNhbGxzIGZvciBjb21wcmVzc2luZyBhIGxvYWQgb2YgZGF0YSBpczo8L3BhcmE+Ci0KLTxvcmRlcmVkbGlzdD4KLQotIDxsaXN0aXRlbT48cGFyYT5HZXQgc3RhcnRlZCB3aXRoCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5TaG92ZWwgZGF0YSBpbiBhbmQgc2hsdXJwIG91dCBpdHMgY29tcHJlc3NlZCBmb3JtCi0gIHVzaW5nIHplcm8gb3IgbW9yZSBjYWxscyBvZgotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB3aXRoIGFjdGlvbiA9Ci0gIDxjb21wdXRlcm91dHB1dD5CWl9SVU48L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5GaW5pc2ggdXAuIFJlcGVhdGVkbHkgY2FsbAotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB3aXRoIGFjdGlvbiA9Ci0gIDxjb21wdXRlcm91dHB1dD5CWl9GSU5JU0g8L2NvbXB1dGVyb3V0cHV0PiwgY29weWluZyBvdXQgdGhlCi0gIGNvbXByZXNzZWQgb3V0cHV0LCB1bnRpbAotICA8Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+IGlzCi0gIHJldHVybmVkLjwvcGFyYT48L2xpc3RpdGVtPiA8bGlzdGl0ZW0+PHBhcmE+Q2xvc2UgdXAgYW5kIGdvIGhvbWUuICBDYWxsCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0VuZDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT48L2xpc3RpdGVtPgotCi08L29yZGVyZWRsaXN0PgotCi08cGFyYT5JZiB0aGUgZGF0YSB5b3Ugd2FudCB0byBjb21wcmVzcyBmaXRzIGludG8geW91ciBpbnB1dAotYnVmZmVyIGFsbCBhdCBvbmNlLCB5b3UgY2FuIHNraXAgdGhlIGNhbGxzIG9mCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3MgKCAuLi4sIEJaX1JVTiApPC9jb21wdXRlcm91dHB1dD4KLWFuZCBqdXN0IGRvIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3MgKCAuLi4sIEJaX0ZJTklTSAotKTwvY29tcHV0ZXJvdXRwdXQ+IGNhbGxzLjwvcGFyYT4KLQotPHBhcmE+QWxsIHJlcXVpcmVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0Pi4gIFRoZQotY29tcHJlc3Npb24gbGlicmFyeSBjYW4gYWNjZXB0IGFueSBkYXRhIGF0IGFsbCAob2J2aW91c2x5KS4gIFNvCi15b3Ugc2hvdWxkbid0IGdldCBhbnkgZXJyb3IgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gY2FsbHMuICBJZiB5b3UKLWRvLCB0aGV5IHdpbGwgYmUKLTxjb21wdXRlcm91dHB1dD5CWl9TRVFVRU5DRV9FUlJPUjwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQgaW5kaWNhdGUKLWEgYnVnIGluIHlvdXIgcHJvZ3JhbW1pbmcuPC9wYXJhPgotCi08cGFyYT5Ucml2aWFsIG90aGVyIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9QQVJBTV9FUlJPUgotICBpZiBzdHJtIGlzIE5VTEwsIG9yIHN0cm0tPnMgaXMgTlVMTAotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6Q29tcHJlc3MtZW5kIiB4cmVmbGFiZWw9IkJaMl9iekNvbXByZXNzRW5kIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWludCBCWjJfYnpDb21wcmVzc0VuZCAoIGJ6X3N0cmVhbSAqc3RybSApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UmVsZWFzZXMgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBjb21wcmVzc2lvbgotc3RyZWFtLjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SICBpZiBzdHJtIGlzIE5VTEwgb3Igc3RybS0+cyBpcyBOVUxMCi1CWl9PSyAgICAgICAgICAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnpEZWNvbXByZXNzLWluaXQiIHhyZWZsYWJlbD0iQloyX2J6RGVjb21wcmVzc0luaXQiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekRlY29tcHJlc3NJbml0ICggYnpfc3RyZWFtICpzdHJtLCBpbnQgdmVyYm9zaXR5LCBpbnQgc21hbGwgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlByZXBhcmVzIGZvciBkZWNvbXByZXNzaW9uLiAgQXMgd2l0aAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LCBhCi08Y29tcHV0ZXJvdXRwdXQ+Ynpfc3RyZWFtPC9jb21wdXRlcm91dHB1dD4gcmVjb3JkIHNob3VsZCBiZQotYWxsb2NhdGVkIGFuZCBpbml0aWFsaXNlZCBiZWZvcmUgdGhlIGNhbGwuICBGaWVsZHMKLTxjb21wdXRlcm91dHB1dD5iemFsbG9jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+YnpmcmVlPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+b3BhcXVlPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIGJlIHNldCBpZiBhIGN1c3RvbQotbWVtb3J5IGFsbG9jYXRvciBpcyByZXF1aXJlZCwgb3IgbWFkZQotPGNvbXB1dGVyb3V0cHV0Pk5VTEw8L2NvbXB1dGVyb3V0cHV0PiBmb3IgdGhlIG5vcm1hbAotPGNvbXB1dGVyb3V0cHV0Pm1hbGxvYzwvY29tcHV0ZXJvdXRwdXQ+IC8KLTxjb21wdXRlcm91dHB1dD5mcmVlPC9jb21wdXRlcm91dHB1dD4gcm91dGluZXMuICBVcG9uIHJldHVybiwgdGhlCi1pbnRlcm5hbCBzdGF0ZSB3aWxsIGhhdmUgYmVlbiBpbml0aWFsaXNlZCwgYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfaW48L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIGJlIHplcm8uPC9wYXJhPgotCi08cGFyYT5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVyCi08Y29tcHV0ZXJvdXRwdXQ+dmVyYm9zaXR5PC9jb21wdXRlcm91dHB1dD4sIHNlZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+SWYgPGNvbXB1dGVyb3V0cHV0PnNtYWxsPC9jb21wdXRlcm91dHB1dD4gaXMgbm9uemVybywgdGhlCi1saWJyYXJ5IHdpbGwgdXNlIGFuIGFsdGVybmF0aXZlIGRlY29tcHJlc3Npb24gYWxnb3JpdGhtIHdoaWNoCi11c2VzIGxlc3MgbWVtb3J5IGJ1dCBhdCB0aGUgY29zdCBvZiBkZWNvbXByZXNzaW5nIG1vcmUgc2xvd2x5Ci0ocm91Z2hseSBzcGVha2luZywgaGFsZiB0aGUgc3BlZWQsIGJ1dCB0aGUgbWF4aW11bSBtZW1vcnkKLXJlcXVpcmVtZW50IGRyb3BzIHRvIGFyb3VuZCAyMzAwaykuICBTZWUgPHhyZWYgbGlua2VuZD0idXNpbmciLz4KLWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIG1lbW9yeSBtYW5hZ2VtZW50LjwvcGFyYT4KLQotPHBhcmE+Tm90ZSB0aGF0IHRoZSBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCB0byBkZWNvbXByZXNzIGEKLXN0cmVhbSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB1bnRpbCB0aGUgc3RyZWFtJ3MgaGVhZGVyIGhhcyBiZWVuCi1yZWFkLCBzbyBldmVuIGlmCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PiBzdWNjZWVkcywgYQotc3Vic2VxdWVudCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+Ci1jb3VsZCBmYWlsIHdpdGgKLTxjb21wdXRlcm91dHB1dD5CWl9NRU1fRVJST1I8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiAoIHNtYWxsICE9IDAgJiYgc21hbGwgIT0gMSApCi0gIG9yICh2ZXJib3NpdHkgPDsgMCB8fCB2ZXJib3NpdHkgPiA0KQotQlpfTUVNX0VSUk9SCi0gIGlmIGluc3VmZmljaWVudCBtZW1vcnkgaXMgYXZhaWxhYmxlCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQloyX2J6RGVjb21wcmVzcwotICBpZiBCWl9PSyB3YXMgcmV0dXJuZWQKLSAgbm8gc3BlY2lmaWMgYWN0aW9uIHJlcXVpcmVkIGluIGNhc2Ugb2YgZXJyb3IKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJiekRlY29tcHJlc3MiIHhyZWZsYWJlbD0iQloyX2J6RGVjb21wcmVzcyI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWludCBCWjJfYnpEZWNvbXByZXNzICggYnpfc3RyZWFtICpzdHJtICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5Qcm92aWRlcyBtb3JlIGlucHV0IGFuZC9vdXQgb3V0cHV0IGJ1ZmZlciBzcGFjZSBmb3IgdGhlCi1saWJyYXJ5LiAgVGhlIGNhbGxlciBtYWludGFpbnMgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLCBhbmQgdXNlcwotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB0byB0cmFuc2ZlcgotZGF0YSBiZXR3ZWVuIHRoZW0uPC9wYXJhPgotCi08cGFyYT5CZWZvcmUgZWFjaCBjYWxsIHRvCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0Pm5leHRfaW48L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgcG9pbnQgYXQgdGhlCi1jb21wcmVzc2VkIGRhdGEsIGFuZCA8Y29tcHV0ZXJvdXRwdXQ+YXZhaWxfaW48L2NvbXB1dGVyb3V0cHV0Pgotc2hvdWxkIGluZGljYXRlIGhvdyBtYW55IGJ5dGVzIHRoZSBsaWJyYXJ5IG1heSByZWFkLgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB1cGRhdGVzCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9pbjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmF2YWlsX2luPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+dG90YWxfaW48L2NvbXB1dGVyb3V0cHV0PiB0byByZWZsZWN0IHRoZSBudW1iZXIKLW9mIGJ5dGVzIGl0IGhhcyByZWFkLjwvcGFyYT4KLQotPHBhcmE+U2ltaWxhcmx5LCA8Y29tcHV0ZXJvdXRwdXQ+bmV4dF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQKLXBvaW50IHRvIGEgYnVmZmVyIGluIHdoaWNoIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IGlzIHRvIGJlCi1wbGFjZWQsIHdpdGggPGNvbXB1dGVyb3V0cHV0PmF2YWlsX291dDwvY29tcHV0ZXJvdXRwdXQ+Ci1pbmRpY2F0aW5nIGhvdyBtdWNoIG91dHB1dCBzcGFjZSBpcyBhdmFpbGFibGUuCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB1cGRhdGVzCi08Y29tcHV0ZXJvdXRwdXQ+bmV4dF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5hdmFpbF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD50b3RhbF9vdXQ8L2NvbXB1dGVyb3V0cHV0PiB0byByZWZsZWN0IHRoZSBudW1iZXIKLW9mIGJ5dGVzIG91dHB1dC48L3BhcmE+Ci0KLTxwYXJhPllvdSBtYXkgcHJvdmlkZSBhbmQgcmVtb3ZlIGFzIGxpdHRsZSBvciBhcyBtdWNoIGRhdGEgYXMgeW91Ci1saWtlIG9uIGVhY2ggY2FsbCBvZgotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0Pi4gIEluIHRoZSBsaW1pdCwKLWl0IGlzIGFjY2VwdGFibGUgdG8gc3VwcGx5IGFuZCByZW1vdmUgZGF0YSBvbmUgYnl0ZSBhdCBhIHRpbWUsCi1hbHRob3VnaCB0aGlzIHdvdWxkIGJlIHRlcnJpYmx5IGluZWZmaWNpZW50LiAgWW91IHNob3VsZCBhbHdheXMKLWVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBieXRlIG9mIG91dHB1dCBzcGFjZSBpcyBhdmFpbGFibGUgYXQKLWVhY2ggY2FsbC48L3BhcmE+Ci0KLTxwYXJhPlVzZSBvZiA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+IGlzCi1zaW1wbGVyIHRoYW4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+WW91IHNob3VsZCBwcm92aWRlIGlucHV0IGFuZCByZW1vdmUgb3V0cHV0IGFzIGRlc2NyaWJlZAotYWJvdmUsIGFuZCByZXBlYXRlZGx5IGNhbGwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gdW50aWwKLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4gaXMgcmV0dXJuZWQuCi1BcHBlYXJhbmNlIG9mIDxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4KLWRlbm90ZXMgdGhhdCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+Ci1oYXMgZGV0ZWN0ZWQgdGhlIGxvZ2ljYWwgZW5kIG9mIHRoZSBjb21wcmVzc2VkIHN0cmVhbS4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4gd2lsbCBub3QKLXByb2R1Y2UgPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PiB1bnRpbCBhbGwKLW91dHB1dCBkYXRhIGhhcyBiZWVuIHBsYWNlZCBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLCBzbyBvbmNlCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+IGFwcGVhcnMsIHlvdSBhcmUKLWd1YXJhbnRlZWQgdG8gaGF2ZSBhdmFpbGFibGUgYWxsIHRoZSBkZWNvbXByZXNzZWQgb3V0cHV0LCBhbmQKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4gY2FuIHNhZmVseQotYmUgY2FsbGVkLjwvcGFyYT4KLQotPHBhcmE+SWYgY2FzZSBvZiBhbiBlcnJvciByZXR1cm4gdmFsdWUsIHlvdSBzaG91bGQgY2FsbAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PiB0byBjbGVhbiB1cAotYW5kIHJlbGVhc2UgbWVtb3J5LjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SCi0gIGlmIHN0cm0gaXMgTlVMTCBvciBzdHJtLT5zIGlzIE5VTEwKLSAgb3Igc3RybS0+YXZhaWxfb3V0IDwgMQotQlpfREFUQV9FUlJPUgotICBpZiBhIGRhdGEgaW50ZWdyaXR5IGVycm9yIGlzIGRldGVjdGVkIGluIHRoZSBjb21wcmVzc2VkIHN0cmVhbQotQlpfREFUQV9FUlJPUl9NQUdJQwotICBpZiB0aGUgY29tcHJlc3NlZCBzdHJlYW0gZG9lc24ndCBiZWdpbiB3aXRoIHRoZSByaWdodCBtYWdpYyBieXRlcwotQlpfTUVNX0VSUk9SCi0gIGlmIHRoZXJlIHdhc24ndCBlbm91Z2ggbWVtb3J5IGF2YWlsYWJsZQotQlpfU1RSRUFNX0VORAotICBpZiB0aGUgbG9naWNhbCBlbmQgb2YgdGhlIGRhdGEgc3RyZWFtIHdhcyBkZXRlY3RlZCBhbmQgYWxsCi0gIG91dHB1dCBpbiBoYXMgYmVlbiBjb25zdW1lZCwgZWcgcy0tPmF2YWlsX291dCA+IDAKLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaMl9iekRlY29tcHJlc3MKLSAgaWYgQlpfT0sgd2FzIHJldHVybmVkCi1CWjJfYnpEZWNvbXByZXNzRW5kCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6RGVjb21wcmVzcy1lbmQiIHhyZWZsYWJlbD0iQloyX2J6RGVjb21wcmVzc0VuZCI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3NFbmQ8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWludCBCWjJfYnpEZWNvbXByZXNzRW5kICggYnpfc3RyZWFtICpzdHJtICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5SZWxlYXNlcyBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIGRlY29tcHJlc3Npb24KLXN0cmVhbS48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9QQVJBTV9FUlJPUgotICBpZiBzdHJtIGlzIE5VTEwgb3Igc3RybS0+cyBpcyBOVUxMCi1CWl9PSwotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci0gIE5vbmUuCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0iaGwtaW50ZXJmYWNlIiB4cmVmbGFiZWw9IkhpZ2gtbGV2ZWwgaW50ZXJmYWNlIj4KLTx0aXRsZT5IaWdoLWxldmVsIGludGVyZmFjZTwvdGl0bGU+Ci0KLTxwYXJhPlRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZwotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZm9ybWF0IGZpbGVzLiAgRmlyc3QsIHNvbWUKLWdlbmVyYWwgcG9pbnRzLjwvcGFyYT4KLQotPGl0ZW1pemVkbGlzdCBtYXJrPSdidWxsZXQnPgotCi0gPGxpc3RpdGVtPjxwYXJhPkFsbCBvZiB0aGUgZnVuY3Rpb25zIHRha2UgYW4KLSAgPGNvbXB1dGVyb3V0cHV0PmludCo8L2NvbXB1dGVyb3V0cHV0PiBmaXJzdCBhcmd1bWVudCwKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pi4gIEFmdGVyIGVhY2ggY2FsbCwKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgYmUgY29uc3VsdGVkCi0gIGZpcnN0IHRvIGRldGVybWluZSB0aGUgb3V0Y29tZSBvZiB0aGUgY2FsbC4gIElmCi0gIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gaXMKLSAgPGNvbXB1dGVyb3V0cHV0PkJaX09LPC9jb21wdXRlcm91dHB1dD4sIHRoZSBjYWxsIGNvbXBsZXRlZAotICBzdWNjZXNzZnVsbHksIGFuZCBvbmx5IHRoZW4gc2hvdWxkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCi0gIGZ1bmN0aW9uIChpZiBhbnkpIGJlIGNvbnN1bHRlZC4gIElmCi0gIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gaXMKLSAgPGNvbXB1dGVyb3V0cHV0PkJaX0lPX0VSUk9SPC9jb21wdXRlcm91dHB1dD4sIHRoZXJlIHdhcyBhbgotICBlcnJvciByZWFkaW5nL3dyaXRpbmcgdGhlIHVuZGVybHlpbmcgY29tcHJlc3NlZCBmaWxlLCBhbmQgeW91Ci0gIHNob3VsZCB0aGVuIGNvbnN1bHQgPGNvbXB1dGVyb3V0cHV0PmVycm5vPC9jb21wdXRlcm91dHB1dD4gLwotICA8Y29tcHV0ZXJvdXRwdXQ+cGVycm9yPC9jb21wdXRlcm91dHB1dD4gdG8gZGV0ZXJtaW5lIHRoZSBjYXVzZQotICBvZiB0aGUgZGlmZmljdWx0eS4gIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4KLSAgbWF5IGFsc28gYmUgc2V0IHRvIHZhcmlvdXMgb3RoZXIgdmFsdWVzOyBwcmVjaXNlIGRldGFpbHMgYXJlCi0gIGdpdmVuIG9uIGEgcGVyLWZ1bmN0aW9uIGJhc2lzIGJlbG93LjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPklmIDxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gaW5kaWNhdGVzCi0gIGFuIGVycm9yIChpZSwgYW55dGhpbmcgZXhjZXB0Ci0gIDxjb21wdXRlcm91dHB1dD5CWl9PSzwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICA8Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+KSwgeW91IHNob3VsZAotICBpbW1lZGlhdGVseSBjYWxsCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PiAob3IKLSAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PiwgZGVwZW5kaW5nIG9uCi0gIHdoZXRoZXIgeW91IGFyZSBhdHRlbXB0aW5nIHRvIHJlYWQgb3IgdG8gd3JpdGUpIHRvIGZyZWUgdXAgYWxsCi0gIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0cmVhbS4gIE9uY2UgYW4gZXJyb3IgaGFzIGJlZW4KLSAgaW5kaWNhdGVkLCBiZWhhdmlvdXIgb2YgYWxsIGNhbGxzIGV4Y2VwdAotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZENsb3NlPC9jb21wdXRlcm91dHB1dD4KLSAgKDxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZUNsb3NlPC9jb21wdXRlcm91dHB1dD4pIGlzCi0gIHVuZGVmaW5lZC4gIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0ICgxKQotICA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCBiZSBjaGVja2VkCi0gIGFmdGVyIGVhY2ggY2FsbCwgYW5kICgyKSBpZgotICA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IGluZGljYXRlcyBhbiBlcnJvciwKLSAgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+Ci0gICg8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+KSBzaG91bGQgdGhlbgotICBiZSBjYWxsZWQgdG8gY2xlYW4gdXAuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxjb21wdXRlcm91dHB1dD5GSUxFKjwvY29tcHV0ZXJvdXRwdXQ+IGFyZ3VtZW50cwotICBwYXNzZWQgdG8gPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRPcGVuPC9jb21wdXRlcm91dHB1dD4gLwotICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVPcGVuPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIGJlIHNldAotICB0byBiaW5hcnkgbW9kZS4gIE1vc3QgVW5peCBzeXN0ZW1zIHdpbGwgZG8gdGhpcyBieSBkZWZhdWx0LCBidXQKLSAgb3RoZXIgcGxhdGZvcm1zLCBpbmNsdWRpbmcgV2luZG93cyBhbmQgTWFjLCB3aWxsIG5vdC4gIElmIHlvdQotICBvbWl0IHRoaXMsIHlvdSBtYXkgZW5jb3VudGVyIHByb2JsZW1zIHdoZW4gbW92aW5nIGNvZGUgdG8gbmV3Ci0gIHBsYXRmb3Jtcy48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5NZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgaGFuZGxlZCBieQotICA8Y29tcHV0ZXJvdXRwdXQ+bWFsbG9jPC9jb21wdXRlcm91dHB1dD4gLwotICA8Y29tcHV0ZXJvdXRwdXQ+ZnJlZTwvY29tcHV0ZXJvdXRwdXQ+LiAgQXQgcHJlc2VudCB0aGVyZSBpcyBubwotICBmYWNpbGl0eSBmb3IgdXNlci1kZWZpbmVkIG1lbW9yeSBhbGxvY2F0b3JzIGluIHRoZSBmaWxlIEkvTwotICBmdW5jdGlvbnMgKGNvdWxkIGVhc2lseSBiZSBhZGRlZCwgdGhvdWdoKS48L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLQotCi08c2VjdDIgaWQ9ImJ6cmVhZG9wZW4iIHhyZWZsYWJlbD0iQloyX2J6UmVhZE9wZW4iPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkT3BlbjwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotdHlwZWRlZiB2b2lkIEJaRklMRTsKLQotQlpGSUxFICpCWjJfYnpSZWFkT3BlbiggaW50ICpiemVycm9yLCBGSUxFICpmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJib3NpdHksIGludCBzbWFsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVudXNlZCwgaW50IG5VbnVzZWQgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlByZXBhcmUgdG8gcmVhZCBjb21wcmVzc2VkIGRhdGEgZnJvbSBmaWxlIGhhbmRsZQotPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0Pi4KLTxjb21wdXRlcm91dHB1dD5mPC9jb21wdXRlcm91dHB1dD4gc2hvdWxkIHJlZmVyIHRvIGEgZmlsZSB3aGljaAotaGFzIGJlZW4gb3BlbmVkIGZvciByZWFkaW5nLCBhbmQgZm9yIHdoaWNoIHRoZSBlcnJvciBpbmRpY2F0b3IKLSg8Y29tcHV0ZXJvdXRwdXQ+ZmVycm9yKGYpPC9jb21wdXRlcm91dHB1dD4paXMgbm90IHNldC4gIElmCi08Y29tcHV0ZXJvdXRwdXQ+c21hbGw8L2NvbXB1dGVyb3V0cHV0PiBpcyAxLCB0aGUgbGlicmFyeSB3aWxsIHRyeQotdG8gZGVjb21wcmVzcyB1c2luZyBsZXNzIG1lbW9yeSwgYXQgdGhlIGV4cGVuc2Ugb2Ygc3BlZWQuPC9wYXJhPgotCi08cGFyYT5Gb3IgcmVhc29ucyBleHBsYWluZWQgYmVsb3csCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgZGVjb21wcmVzcyB0aGUKLTxjb21wdXRlcm91dHB1dD5uVW51c2VkPC9jb21wdXRlcm91dHB1dD4gYnl0ZXMgc3RhcnRpbmcgYXQKLTxjb21wdXRlcm91dHB1dD51bnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiwgYmVmb3JlIHN0YXJ0aW5nIHRvIHJlYWQKLWZyb20gdGhlIGZpbGUgPGNvbXB1dGVyb3V0cHV0PmY8L2NvbXB1dGVyb3V0cHV0Pi4gIEF0IG1vc3QKLTxjb21wdXRlcm91dHB1dD5CWl9NQVhfVU5VU0VEPC9jb21wdXRlcm91dHB1dD4gYnl0ZXMgbWF5IGJlCi1zdXBwbGllZCBsaWtlIHRoaXMuICBJZiB0aGlzIGZhY2lsaXR5IGlzIG5vdCByZXF1aXJlZCwgeW91IHNob3VsZAotcGFzcyA8Y29tcHV0ZXJvdXRwdXQ+TlVMTDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PjA8L2NvbXB1dGVyb3V0cHV0PiBmb3IKLTxjb21wdXRlcm91dHB1dD51bnVzZWQ8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLW48Y29tcHV0ZXJvdXRwdXQ+VW51c2VkPC9jb21wdXRlcm91dHB1dD4gcmVzcGVjdGl2ZWx5LjwvcGFyYT4KLQotPHBhcmE+Rm9yIHRoZSBtZWFuaW5nIG9mIHBhcmFtZXRlcnMKLTxjb21wdXRlcm91dHB1dD5zbWFsbDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PnZlcmJvc2l0eTwvY29tcHV0ZXJvdXRwdXQ+LCBzZWUKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+VGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIHRvIGRlY29tcHJlc3MgYSBmaWxlIGNhbm5vdCBiZQotZGV0ZXJtaW5lZCB1bnRpbCB0aGUgZmlsZSdzIGhlYWRlciBoYXMgYmVlbiByZWFkLiAgU28gaXQgaXMKLXBvc3NpYmxlIHRoYXQgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRPcGVuPC9jb21wdXRlcm91dHB1dD4KLXJldHVybnMgPGNvbXB1dGVyb3V0cHV0PkJaX09LPC9jb21wdXRlcm91dHB1dD4gYnV0IGEgc3Vic2VxdWVudAotY2FsbCBvZiA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgcmV0dXJuCi08Y29tcHV0ZXJvdXRwdXQ+QlpfTUVNX0VSUk9SPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGYgaXMgTlVMTAotICBvciBzbWFsbCBpcyBuZWl0aGVyIDAgbm9yIDEKLSAgb3IgKCB1bnVzZWQgPT0gTlVMTCAmJiBuVW51c2VkICE9IDAgKQotICBvciAoIHVudXNlZCAhPSBOVUxMICYmICEoMCA8PSBuVW51c2VkIDw9IEJaX01BWF9VTlVTRUQpICkKLUJaX0lPX0VSUk9SCi0gIGlmIGZlcnJvcihmKSBpcyBub256ZXJvCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUKLUJaX09LCi0gIG90aGVyd2lzZS4KLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlBvc3NpYmxlIHJldHVybiB2YWx1ZXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1Qb2ludGVyIHRvIGFuIGFic3RyYWN0IEJaRklMRQotICBpZiBiemVycm9yIGlzIEJaX09LCi1OVUxMCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaMl9ielJlYWQKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotQloyX2J6Q2xvc2UKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnpyZWFkIiB4cmVmbGFiZWw9IkJaMl9ielJlYWQiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1pbnQgQloyX2J6UmVhZCAoIGludCAqYnplcnJvciwgQlpGSUxFICpiLCB2b2lkICpidWYsIGludCBsZW4gKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJlYWRzIHVwIHRvIDxjb21wdXRlcm91dHB1dD5sZW48L2NvbXB1dGVyb3V0cHV0PgotKHVuY29tcHJlc3NlZCkgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlCi08Y29tcHV0ZXJvdXRwdXQ+YjwvY29tcHV0ZXJvdXRwdXQ+IGludG8gdGhlIGJ1ZmZlcgotPGNvbXB1dGVyb3V0cHV0PmJ1ZjwvY29tcHV0ZXJvdXRwdXQ+LiAgSWYgdGhlIHJlYWQgd2FzCi1zdWNjZXNzZnVsLCA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHNldCB0bwotPGNvbXB1dGVyb3V0cHV0PkJaX09LPC9jb21wdXRlcm91dHB1dD4gYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMKLXJlYWQgaXMgcmV0dXJuZWQuICBJZiB0aGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIHdhcyBkZXRlY3RlZCwKLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD4gd2lsbCBiZSBzZXQgdG8KLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4sIGFuZCB0aGUgbnVtYmVyIG9mCi1ieXRlcyByZWFkIGlzIHJldHVybmVkLiAgQWxsIG90aGVyCi08Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IHZhbHVlcyBkZW5vdGUgYW4KLWVycm9yLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PiB3aWxsIHN1cHBseQotPGNvbXB1dGVyb3V0cHV0PmxlbjwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzLCB1bmxlc3MgdGhlIGxvZ2ljYWwKLXN0cmVhbSBlbmQgaXMgZGV0ZWN0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLiAgQmVjYXVzZSBvZiB0aGlzLCBpdAotaXMgcG9zc2libGUgdG8gZGV0ZWN0IHRoZSBzdHJlYW0gZW5kIGJ5IG9ic2VydmluZyB3aGVuIHRoZSBudW1iZXIKLW9mIGJ5dGVzIHJldHVybmVkIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZC4KLU5ldmVydGhlbGVzcywgdGhpcyBpcyByZWdhcmRlZCBhcyBpbmFkdmlzYWJsZTsgeW91IHNob3VsZCBpbnN0ZWFkCi1jaGVjayA8Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IGFmdGVyIGV2ZXJ5IGNhbGwKLWFuZCB3YXRjaCBvdXQgZm9yCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+SW50ZXJuYWxseSwgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PgotY29waWVzIGRhdGEgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIGluIGNodW5rcyBvZiBzaXplCi08Y29tcHV0ZXJvdXRwdXQ+QlpfTUFYX1VOVVNFRDwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzIGJlZm9yZQotZGVjb21wcmVzc2luZyBpdC4gIElmIHRoZSBmaWxlIGNvbnRhaW5zIG1vcmUgYnl0ZXMgdGhhbiBzdHJpY3RseQotbmVlZGVkIHRvIHJlYWNoIHRoZSBsb2dpY2FsIGVuZC1vZi1zdHJlYW0sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYWxtb3N0IGNlcnRhaW5seQotcmVhZCBzb21lIG9mIHRoZSB0cmFpbGluZyBkYXRhIGJlZm9yZSBzaWduYWxsaW5nCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU0VRVUVOQ0VfRU5EPC9jb21wdXRlcm91dHB1dD4uICBUbyBjb2xsZWN0IHRoZQotcmVhZCBidXQgdW51c2VkIGRhdGEgb25jZQotPGNvbXB1dGVyb3V0cHV0PkJaX1NFUVVFTkNFX0VORDwvY29tcHV0ZXJvdXRwdXQ+IGhhcyBhcHBlYXJlZCwKLWNhbGwgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PgotaW1tZWRpYXRlbHkgYmVmb3JlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZENsb3NlPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGIgaXMgTlVMTCBvciBidWYgaXMgTlVMTCBvciBsZW4gPCAwCi1CWl9TRVFVRU5DRV9FUlJPUgotICBpZiBiIHdhcyBvcGVuZWQgd2l0aCBCWjJfYnpXcml0ZU9wZW4KLUJaX0lPX0VSUk9SCi0gIGlmIHRoZXJlIGlzIGFuIGVycm9yIHJlYWRpbmcgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlCi1CWl9VTkVYUEVDVEVEX0VPRgotICBpZiB0aGUgY29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSAKLSAgdGhlIGxvZ2ljYWwgZW5kLW9mLXN0cmVhbSB3YXMgZGV0ZWN0ZWQKLUJaX0RBVEFfRVJST1IKLSAgaWYgYSBkYXRhIGludGVncml0eSBlcnJvciB3YXMgZGV0ZWN0ZWQgaW4gdGhlIGNvbXByZXNzZWQgc3RyZWFtCi1CWl9EQVRBX0VSUk9SX01BR0lDCi0gIGlmIHRoZSBzdHJlYW0gZG9lcyBub3QgYmVnaW4gd2l0aCB0aGUgcmVxdWlzaXRlIGhlYWRlciBieXRlcyAKLSAgKGllLCBpcyBub3QgYSBiemlwMiBkYXRhIGZpbGUpLiAgVGhpcyBpcyByZWFsbHkgCi0gIGEgc3BlY2lhbCBjYXNlIG9mIEJaX0RBVEFfRVJST1IuCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSB3YXMgYXZhaWxhYmxlCi1CWl9TVFJFQU1fRU5ECi0gIGlmIHRoZSBsb2dpY2FsIGVuZCBvZiBzdHJlYW0gd2FzIGRldGVjdGVkLgotQlpfT0sKLSAgb3RoZXJ3aXNlLgotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLW51bWJlciBvZiBieXRlcyByZWFkCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sgb3IgQlpfU1RSRUFNX0VORAotdW5kZWZpbmVkCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QWxsb3dhYmxlIG5leHQgYWN0aW9uczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWNvbGxlY3QgZGF0YSBmcm9tIGJ1ZiwgdGhlbiBCWjJfYnpSZWFkIG9yIEJaMl9ielJlYWRDbG9zZQotICBpZiBiemVycm9yIGlzIEJaX09LCi1jb2xsZWN0IGRhdGEgZnJvbSBidWYsIHRoZW4gQloyX2J6UmVhZENsb3NlIG9yIEJaMl9ielJlYWRHZXRVbnVzZWQKLSAgaWYgYnplcnJvciBpcyBCWl9TRVFVRU5DRV9FTkQKLUJaMl9ielJlYWRDbG9zZQotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJienJlYWRnZXR1bnVzZWQiIHhyZWZsYWJlbD0iQloyX2J6UmVhZEdldFVudXNlZCI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRHZXRVbnVzZWQ8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQgQloyX2J6UmVhZEdldFVudXNlZCggaW50KiBiemVycm9yLCBCWkZJTEUgKmIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogdW51c2VkLCBpbnQqIG5VbnVzZWQgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJldHVybnMgZGF0YSB3aGljaCB3YXMgcmVhZCBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgYnV0Ci13YXMgbm90IG5lZWRlZCB0byBnZXQgdG8gdGhlIGxvZ2ljYWwgZW5kLW9mLXN0cmVhbS4KLTxjb21wdXRlcm91dHB1dD4qdW51c2VkPC9jb21wdXRlcm91dHB1dD4gaXMgc2V0IHRvIHRoZSBhZGRyZXNzIG9mCi10aGUgZGF0YSwgYW5kIDxjb21wdXRlcm91dHB1dD4qblVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+IHRvIHRoZQotbnVtYmVyIG9mIGJ5dGVzLiAgPGNvbXB1dGVyb3V0cHV0PipuVW51c2VkPC9jb21wdXRlcm91dHB1dD4gd2lsbAotYmUgc2V0IHRvIGEgdmFsdWUgYmV0d2VlbiA8Y29tcHV0ZXJvdXRwdXQ+MDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaX01BWF9VTlVTRUQ8L2NvbXB1dGVyb3V0cHV0PiBpbmNsdXNpdmUuPC9wYXJhPgotCi08cGFyYT5UaGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+IGhhcyBzaWduYWxsZWQKLTxjb21wdXRlcm91dHB1dD5CWl9TVFJFQU1fRU5EPC9jb21wdXRlcm91dHB1dD4gYnV0IGJlZm9yZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD46PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9QQVJBTV9FUlJPUgotICBpZiBiIGlzIE5VTEwKLSAgb3IgdW51c2VkIGlzIE5VTEwgb3IgblVudXNlZCBpcyBOVUxMCi1CWl9TRVFVRU5DRV9FUlJPUgotICBpZiBCWl9TVFJFQU1fRU5EIGhhcyBub3QgYmVlbiBzaWduYWxsZWQKLSAgb3IgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6V3JpdGVPcGVuCi1CWl9PSwotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWjJfYnpSZWFkQ2xvc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJienJlYWRjbG9zZSIgeHJlZmxhYmVsPSJCWjJfYnpSZWFkQ2xvc2UiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQgQloyX2J6UmVhZENsb3NlICggaW50ICpiemVycm9yLCBCWkZJTEUgKmIgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJlbGVhc2VzIGFsbCBtZW1vcnkgcGVydGFpbmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlCi08Y29tcHV0ZXJvdXRwdXQ+YjwvY29tcHV0ZXJvdXRwdXQ+LgotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWRDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IGRvZXMgbm90IGNhbGwKLTxjb21wdXRlcm91dHB1dD5mY2xvc2U8L2NvbXB1dGVyb3V0cHV0PiBvbiB0aGUgdW5kZXJseWluZyBmaWxlCi1oYW5kbGUsIHNvIHlvdSBzaG91bGQgZG8gdGhhdCB5b3Vyc2VsZiBpZiBhcHByb3ByaWF0ZS4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PiBzaG91bGQgYmUgY2FsbGVkCi10byBjbGVhbiB1cCBhZnRlciBhbGwgZXJyb3Igc2l0dWF0aW9ucy48L3BhcmE+Ci0KLTxwYXJhPlBvc3NpYmxlIGFzc2lnbm1lbnRzIHRvCi08Y29tcHV0ZXJvdXRwdXQ+YnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+OjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6T3BlbldyaXRlCi1CWl9PSwotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFsbG93YWJsZSBuZXh0IGFjdGlvbnM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1ub25lCi08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi0KLTxzZWN0MiBpZD0iYnp3cml0ZW9wZW4iIHhyZWZsYWJlbD0iQloyX2J6V3JpdGVPcGVuIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVPcGVuPC9jb21wdXRlcm91dHB1dD48L3RpdGxlPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWkZJTEUgKkJaMl9ieldyaXRlT3BlbiggaW50ICpiemVycm9yLCBGSUxFICpmLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplMTAwaywgaW50IHZlcmJvc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd29ya0ZhY3RvciApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UHJlcGFyZSB0byB3cml0ZSBjb21wcmVzc2VkIGRhdGEgdG8gZmlsZSBoYW5kbGUKLTxjb21wdXRlcm91dHB1dD5mPC9jb21wdXRlcm91dHB1dD4uCi08Y29tcHV0ZXJvdXRwdXQ+ZjwvY29tcHV0ZXJvdXRwdXQ+IHNob3VsZCByZWZlciB0byBhIGZpbGUgd2hpY2gKLWhhcyBiZWVuIG9wZW5lZCBmb3Igd3JpdGluZywgYW5kIGZvciB3aGljaCB0aGUgZXJyb3IgaW5kaWNhdG9yCi0oPGNvbXB1dGVyb3V0cHV0PmZlcnJvcihmKTwvY29tcHV0ZXJvdXRwdXQ+KWlzIG5vdCBzZXQuPC9wYXJhPgotCi08cGFyYT5Gb3IgdGhlIG1lYW5pbmcgb2YgcGFyYW1ldGVycwotPGNvbXB1dGVyb3V0cHV0PmJsb2NrU2l6ZTEwMGs8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD52ZXJib3NpdHk8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD53b3JrRmFjdG9yPC9jb21wdXRlcm91dHB1dD4sIHNlZQotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+QWxsIHJlcXVpcmVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYXQgdGhpcyBzdGFnZSwgc28gaWYgdGhlCi1jYWxsIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksCi08Y29tcHV0ZXJvdXRwdXQ+QlpfTUVNX0VSUk9SPC9jb21wdXRlcm91dHB1dD4gY2Fubm90IGJlIHNpZ25hbGxlZAotYnkgYSBzdWJzZXF1ZW50IGNhbGwgdG8KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZTwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD46PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9DT05GSUdfRVJST1IKLSAgaWYgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbWlzLWNvbXBpbGVkCi1CWl9QQVJBTV9FUlJPUgotICBpZiBmIGlzIE5VTEwKLSAgb3IgYmxvY2tTaXplMTAwayA8IDEgb3IgYmxvY2tTaXplMTAwayA+IDkKLUJaX0lPX0VSUk9SCi0gIGlmIGZlcnJvcihmKSBpcyBub256ZXJvCi1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUKLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLVBvaW50ZXIgdG8gYW4gYWJzdHJhY3QgQlpGSUxFCi0gIGlmIGJ6ZXJyb3IgaXMgQlpfT0sKLU5VTEwKLSAgb3RoZXJ3aXNlCi08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BbGxvd2FibGUgbmV4dCBhY3Rpb25zOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQloyX2J6V3JpdGUKLSAgaWYgYnplcnJvciBpcyBCWl9PSwotICAoeW91IGNvdWxkIGdvIGRpcmVjdGx5IHRvIEJaMl9ieldyaXRlQ2xvc2UsIGJ1dCB0aGlzIHdvdWxkIGJlIHByZXR0eSBwb2ludGxlc3MpCi1CWjJfYnpXcml0ZUNsb3NlCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6d3JpdGUiIHhyZWZsYWJlbD0iQloyX2J6V3JpdGUiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZTwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotdm9pZCBCWjJfYnpXcml0ZSAoIGludCAqYnplcnJvciwgQlpGSUxFICpiLCB2b2lkICpidWYsIGludCBsZW4gKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFic29yYnMgPGNvbXB1dGVyb3V0cHV0PmxlbjwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzIGZyb20gdGhlCi1idWZmZXIgPGNvbXB1dGVyb3V0cHV0PmJ1ZjwvY29tcHV0ZXJvdXRwdXQ+LCBldmVudHVhbGx5IHRvIGJlCi1jb21wcmVzc2VkIGFuZCB3cml0dGVuIHRvIHRoZSBmaWxlLjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgYXNzaWdubWVudHMgdG8KLTxjb21wdXRlcm91dHB1dD5iemVycm9yPC9jb21wdXRlcm91dHB1dD46PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1CWl9QQVJBTV9FUlJPUgotICBpZiBiIGlzIE5VTEwgb3IgYnVmIGlzIE5VTEwgb3IgbGVuIDwgMAotQlpfU0VRVUVOQ0VfRVJST1IKLSAgaWYgYiB3YXMgb3BlbmVkIHdpdGggQloyX2J6UmVhZE9wZW4KLUJaX0lPX0VSUk9SCi0gIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdGhlIGNvbXByZXNzZWQgZmlsZS4KLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6d3JpdGVjbG9zZSIgeHJlZmxhYmVsPSJCWjJfYnpXcml0ZUNsb3NlIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotdm9pZCBCWjJfYnpXcml0ZUNsb3NlKCBpbnQgKmJ6ZXJyb3IsIEJaRklMRSogZiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGFiYW5kb24sCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX2luLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXQgKTsKLQotdm9pZCBCWjJfYnpXcml0ZUNsb3NlNjQoIGludCAqYnplcnJvciwgQlpGSUxFKiBmLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhYmFuZG9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogbmJ5dGVzX2luX2xvMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBuYnl0ZXNfaW5faGkzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXRfbG8zMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIG5ieXRlc19vdXRfaGkzMiApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+Q29tcHJlc3NlcyBhbmQgZmx1c2hlcyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIGFsbCBkYXRhIHNvCi1mYXIgc3VwcGxpZWQgYnkgPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlPC9jb21wdXRlcm91dHB1dD4uCi1UaGUgbG9naWNhbCBlbmQtb2Ytc3RyZWFtIG1hcmtlcnMgYXJlIGFsc28gd3JpdHRlbiwgc28gc3Vic2VxdWVudAotY2FsbHMgdG8gPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlPC9jb21wdXRlcm91dHB1dD4gYXJlCi1pbGxlZ2FsLiAgQWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXByZXNzZWQgZmlsZQotPGNvbXB1dGVyb3V0cHV0PmI8L2NvbXB1dGVyb3V0cHV0PiBpcyByZWxlYXNlZC4KLTxjb21wdXRlcm91dHB1dD5mZmx1c2g8L2NvbXB1dGVyb3V0cHV0PiBpcyBjYWxsZWQgb24gdGhlCi1jb21wcmVzc2VkIGZpbGUsIGJ1dCBpdCBpcyBub3QKLTxjb21wdXRlcm91dHB1dD5mY2xvc2U8L2NvbXB1dGVyb3V0cHV0PidkLjwvcGFyYT4KLQotPHBhcmE+SWYgPGNvbXB1dGVyb3V0cHV0PkJaMl9ieldyaXRlQ2xvc2U8L2NvbXB1dGVyb3V0cHV0PiBpcwotY2FsbGVkIHRvIGNsZWFuIHVwIGFmdGVyIGFuIGVycm9yLCB0aGUgb25seSBhY3Rpb24gaXMgdG8gcmVsZWFzZQotdGhlIG1lbW9yeS4gIFRoZSBsaWJyYXJ5IHJlY29yZHMgdGhlIGVycm9yIGNvZGVzIGlzc3VlZCBieQotcHJldmlvdXMgY2FsbHMsIHNvIHRoaXMgc2l0dWF0aW9uIHdpbGwgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS4KLVRoZXJlIGlzIG5vIGF0dGVtcHQgdG8gY29tcGxldGUgdGhlIGNvbXByZXNzaW9uIG9wZXJhdGlvbiwgbm9yIHRvCi08Y29tcHV0ZXJvdXRwdXQ+ZmZsdXNoPC9jb21wdXRlcm91dHB1dD4gdGhlIGNvbXByZXNzZWQgZmlsZS4gIFlvdQotY2FuIGZvcmNlIHRoaXMgYmVoYXZpb3VyIHRvIGhhcHBlbiBldmVuIGluIHRoZSBjYXNlIG9mIG5vIGVycm9yLAotYnkgcGFzc2luZyBhIG5vbnplcm8gdmFsdWUgdG8KLTxjb21wdXRlcm91dHB1dD5hYmFuZG9uPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JZiA8Y29tcHV0ZXJvdXRwdXQ+bmJ5dGVzX2luPC9jb21wdXRlcm91dHB1dD4gaXMgbm9uLW51bGwsCi08Y29tcHV0ZXJvdXRwdXQ+Km5ieXRlc19pbjwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYmUgc2V0IHRvIGJlIHRoZQotdG90YWwgdm9sdW1lIG9mIHVuY29tcHJlc3NlZCBkYXRhIGhhbmRsZWQuICBTaW1pbGFybHksCi08Y29tcHV0ZXJvdXRwdXQ+bmJ5dGVzX291dDwvY29tcHV0ZXJvdXRwdXQ+IHdpbGwgYmUgc2V0IHRvIHRoZQotdG90YWwgdm9sdW1lIG9mIGNvbXByZXNzZWQgZGF0YSB3cml0dGVuLiAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aAotb2xkZXIgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnksCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6V3JpdGVDbG9zZTwvY29tcHV0ZXJvdXRwdXQ+IG9ubHkgeWllbGRzIHRoZQotbG93ZXIgMzIgYml0cyBvZiB0aGVzZSBjb3VudHMuICBVc2UKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpXcml0ZUNsb3NlNjQ8L2NvbXB1dGVyb3V0cHV0PiBpZiB5b3Ugd2FudAotdGhlIGZ1bGwgNjQgYml0IGNvdW50cy4gIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIG90aGVyd2lzZQotYWJzb2x1dGVseSBpZGVudGljYWwuPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSBhc3NpZ25tZW50cyB0bwotPGNvbXB1dGVyb3V0cHV0PmJ6ZXJyb3I8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX1NFUVVFTkNFX0VSUk9SCi0gIGlmIGIgd2FzIG9wZW5lZCB3aXRoIEJaMl9ielJlYWRPcGVuCi1CWl9JT19FUlJPUgotICBpZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nIHRoZSBjb21wcmVzc2VkIGZpbGUKLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImVtYmVkIiB4cmVmbGFiZWw9IkhhbmRsaW5nIGVtYmVkZGVkIGNvbXByZXNzZWQgZGF0YSBzdHJlYW1zIj4KLTx0aXRsZT5IYW5kbGluZyBlbWJlZGRlZCBjb21wcmVzc2VkIGRhdGEgc3RyZWFtczwvdGl0bGU+Ci0KLTxwYXJhPlRoZSBoaWdoLWxldmVsIGxpYnJhcnkgZmFjaWxpdGF0ZXMgdXNlIG9mCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkYXRhIHN0cmVhbXMgd2hpY2ggZm9ybQotc29tZSBwYXJ0IG9mIGEgc3Vycm91bmRpbmcsIGxhcmdlciBkYXRhIHN0cmVhbS48L3BhcmE+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT5Gb3Igd3JpdGluZywgdGhlIGxpYnJhcnkgdGFrZXMgYW4gb3BlbiBmaWxlIGhhbmRsZSwKLSAgd3JpdGVzIGNvbXByZXNzZWQgZGF0YSB0byBpdCwKLSAgPGNvbXB1dGVyb3V0cHV0PmZmbHVzaDwvY29tcHV0ZXJvdXRwdXQ+ZXMgaXQgYnV0IGRvZXMgbm90Ci0gIDxjb21wdXRlcm91dHB1dD5mY2xvc2U8L2NvbXB1dGVyb3V0cHV0PiBpdC4gIFRoZSBjYWxsaW5nCi0gIGFwcGxpY2F0aW9uIGNhbiB3cml0ZSBpdHMgb3duIGRhdGEgYmVmb3JlIGFuZCBhZnRlciB0aGUKLSAgY29tcHJlc3NlZCBkYXRhIHN0cmVhbSwgdXNpbmcgdGhhdCBzYW1lIGZpbGUgaGFuZGxlLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPlJlYWRpbmcgaXMgbW9yZSBjb21wbGV4LCBhbmQgdGhlIGZhY2lsaXRpZXMgYXJlIG5vdCBhcwotICBnZW5lcmFsIGFzIHRoZXkgY291bGQgYmUgc2luY2UgZ2VuZXJhbGl0eSBpcyBoYXJkIHRvIHJlY29uY2lsZQotICB3aXRoIGVmZmljaWVuY3kuICA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZDwvY29tcHV0ZXJvdXRwdXQ+Ci0gIHJlYWRzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSBpbiBibG9ja3Mgb2Ygc2l6ZQotICA8Y29tcHV0ZXJvdXRwdXQ+QlpfTUFYX1VOVVNFRDwvY29tcHV0ZXJvdXRwdXQ+IGJ5dGVzLCBhbmQgaW4KLSAgZG9pbmcgc28gcHJvYmFibHkgd2lsbCBvdmVyc2hvb3QgdGhlIGxvZ2ljYWwgZW5kIG9mIGNvbXByZXNzZWQKLSAgc3RyZWFtLiAgVG8gcmVjb3ZlciB0aGlzIGRhdGEgb25jZSBkZWNvbXByZXNzaW9uIGhhcyBlbmRlZCwKLSAgY2FsbCA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZEdldFVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+IGFmdGVyCi0gIHRoZSBsYXN0IGNhbGwgb2YgPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PgotICAodGhlIG9uZSByZXR1cm5pbmcKLSAgPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PikgYnV0IGJlZm9yZQotICBjYWxsaW5nCi0gIDxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkQ2xvc2U8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+PC9saXN0aXRlbT4KLQotPC9pdGVtaXplZGxpc3Q+Ci0KLTxwYXJhPlRoaXMgbWVjaGFuaXNtIG1ha2VzIGl0IGVhc3kgdG8gZGVjb21wcmVzcyBtdWx0aXBsZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gc3RyZWFtcyBwbGFjZWQgZW5kLXRvLWVuZC4KLUFzIHRoZSBlbmQgb2Ygb25lIHN0cmVhbSwgd2hlbgotPGNvbXB1dGVyb3V0cHV0PkJaMl9ielJlYWQ8L2NvbXB1dGVyb3V0cHV0PiByZXR1cm5zCi08Y29tcHV0ZXJvdXRwdXQ+QlpfU1RSRUFNX0VORDwvY29tcHV0ZXJvdXRwdXQ+LCBjYWxsCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZEdldFVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+IHRvIGNvbGxlY3QKLXRoZSB1bnVzZWQgZGF0YSAoY29weSBpdCBpbnRvIHlvdXIgb3duIGJ1ZmZlciBzb21ld2hlcmUpLiAgVGhhdAotZGF0YSBmb3JtcyB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tcHJlc3NlZCBzdHJlYW0uICBUbyBzdGFydAotdW5jb21wcmVzc2luZyB0aGF0IG5leHQgc3RyZWFtLCBjYWxsCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6UmVhZE9wZW48L2NvbXB1dGVyb3V0cHV0PiBhZ2FpbiwgZmVlZGluZyBpbgotdGhlIHVudXNlZCBkYXRhIHZpYSB0aGUgPGNvbXB1dGVyb3V0cHV0PnVudXNlZDwvY29tcHV0ZXJvdXRwdXQ+IC8KLTxjb21wdXRlcm91dHB1dD5uVW51c2VkPC9jb21wdXRlcm91dHB1dD4gcGFyYW1ldGVycy4gIEtlZXAgZG9pbmcKLXRoaXMgdW50aWwgPGNvbXB1dGVyb3V0cHV0PkJaX1NUUkVBTV9FTkQ8L2NvbXB1dGVyb3V0cHV0PiByZXR1cm4KLWNvaW5jaWRlcyB3aXRoIHRoZSBwaHlzaWNhbCBlbmQgb2YgZmlsZQotKDxjb21wdXRlcm91dHB1dD5mZW9mKGYpPC9jb21wdXRlcm91dHB1dD4pLiAgSW4gdGhpcyBzaXR1YXRpb24KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpSZWFkR2V0VW51c2VkPC9jb21wdXRlcm91dHB1dD4gd2lsbCBvZgotY291cnNlIHJldHVybiBubyBkYXRhLjwvcGFyYT4KLQotPHBhcmE+VGhpcyBzaG91bGQgZ2l2ZSBzb21lIGZlZWwgZm9yIGhvdyB0aGUgaGlnaC1sZXZlbCBpbnRlcmZhY2UKLWNhbiBiZSB1c2VkLiAgSWYgeW91IHJlcXVpcmUgZXh0cmEgZmxleGliaWxpdHksIHlvdSdsbCBoYXZlIHRvCi1iaXRlIHRoZSBidWxsZXQgYW5kIGdldCB0byBncmlwcyB3aXRoIHRoZSBsb3ctbGV2ZWwKLWludGVyZmFjZS48L3BhcmE+Ci0KLTwvc2VjdDI+Ci0KLQotPHNlY3QyIGlkPSJzdGQtcmR3ciIgeHJlZmxhYmVsPSJTdGFuZGFyZCBmaWxlLXJlYWRpbmcvd3JpdGluZyBjb2RlIj4KLTx0aXRsZT5TdGFuZGFyZCBmaWxlLXJlYWRpbmcvd3JpdGluZyBjb2RlPC90aXRsZT4KLQotPHBhcmE+SGVyZSdzIGhvdyB5b3UnZCB3cml0ZSBkYXRhIHRvIGEgY29tcHJlc3NlZCBmaWxlOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotRklMRSogICBmOwotQlpGSUxFKiBiOwotaW50ICAgICBuQnVmOwotY2hhciAgICBidWZbIC8qIHdoYXRldmVyIHNpemUgeW91IGxpa2UgKi8gXTsKLWludCAgICAgYnplcnJvcjsKLWludCAgICAgbldyaXR0ZW47Ci0KLWYgPSBmb3BlbiAoICJteWZpbGUuYnoyIiwgInciICk7Ci1pZiAoICFmICkgewotIC8qIGhhbmRsZSBlcnJvciAqLwotfQotYiA9IEJaMl9ieldyaXRlT3BlbiggJmJ6ZXJyb3IsIGYsIDkgKTsKLWlmIChiemVycm9yICE9IEJaX09LKSB7Ci0gQloyX2J6V3JpdGVDbG9zZSAoIGIgKTsKLSAvKiBoYW5kbGUgZXJyb3IgKi8KLX0KLQotd2hpbGUgKCAvKiBjb25kaXRpb24gKi8gKSB7Ci0gLyogZ2V0IGRhdGEgdG8gd3JpdGUgaW50byBidWYsIGFuZCBzZXQgbkJ1ZiBhcHByb3ByaWF0ZWx5ICovCi0gbldyaXR0ZW4gPSBCWjJfYnpXcml0ZSAoICZiemVycm9yLCBiLCBidWYsIG5CdWYgKTsKLSBpZiAoYnplcnJvciA9PSBCWl9JT19FUlJPUikgeyAKLSAgIEJaMl9ieldyaXRlQ2xvc2UgKCAmYnplcnJvciwgYiApOwotICAgLyogaGFuZGxlIGVycm9yICovCi0gfQotfQotCi1CWjJfYnpXcml0ZUNsb3NlKCAmYnplcnJvciwgYiApOwotaWYgKGJ6ZXJyb3IgPT0gQlpfSU9fRVJST1IpIHsKLSAvKiBoYW5kbGUgZXJyb3IgKi8KLX0KLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPkFuZCB0byByZWFkIGZyb20gYSBjb21wcmVzc2VkIGZpbGU6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1GSUxFKiAgIGY7Ci1CWkZJTEUqIGI7Ci1pbnQgICAgIG5CdWY7Ci1jaGFyICAgIGJ1ZlsgLyogd2hhdGV2ZXIgc2l6ZSB5b3UgbGlrZSAqLyBdOwotaW50ICAgICBiemVycm9yOwotaW50ICAgICBuV3JpdHRlbjsKLQotZiA9IGZvcGVuICggIm15ZmlsZS5iejIiLCAiciIgKTsKLWlmICggIWYgKSB7Ci0gIC8qIGhhbmRsZSBlcnJvciAqLwotfQotYiA9IEJaMl9ielJlYWRPcGVuICggJmJ6ZXJyb3IsIGYsIDAsIE5VTEwsIDAgKTsKLWlmICggYnplcnJvciAhPSBCWl9PSyApIHsKLSAgQloyX2J6UmVhZENsb3NlICggJmJ6ZXJyb3IsIGIgKTsKLSAgLyogaGFuZGxlIGVycm9yICovCi19Ci0KLWJ6ZXJyb3IgPSBCWl9PSzsKLXdoaWxlICggYnplcnJvciA9PSBCWl9PSyAmJiAvKiBhcmJpdHJhcnkgb3RoZXIgY29uZGl0aW9ucyAqLykgewotICBuQnVmID0gQloyX2J6UmVhZCAoICZiemVycm9yLCBiLCBidWYsIC8qIHNpemUgb2YgYnVmICovICk7Ci0gIGlmICggYnplcnJvciA9PSBCWl9PSyApIHsKLSAgICAvKiBkbyBzb21ldGhpbmcgd2l0aCBidWZbMCAuLiBuQnVmLTFdICovCi0gIH0KLX0KLWlmICggYnplcnJvciAhPSBCWl9TVFJFQU1fRU5EICkgewotICAgQloyX2J6UmVhZENsb3NlICggJmJ6ZXJyb3IsIGIgKTsKLSAgIC8qIGhhbmRsZSBlcnJvciAqLwotfSBlbHNlIHsKLSAgIEJaMl9ielJlYWRDbG9zZSAoICZiemVycm9yLCBiICk7Ci19Ci08L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QyPgotCi08L3NlY3QxPgotCi0KLTxzZWN0MSBpZD0idXRpbC1mbnMiIHhyZWZsYWJlbD0iVXRpbGl0eSBmdW5jdGlvbnMiPgotPHRpdGxlPlV0aWxpdHkgZnVuY3Rpb25zPC90aXRsZT4KLQotCi08c2VjdDIgaWQ9ImJ6YnVmZnRvYnVmZmNvbXByZXNzIiB4cmVmbGFiZWw9IkJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcyI+Ci08dGl0bGU+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekJ1ZmZUb0J1ZmZDb21wcmVzcyggY2hhciogICAgICAgICBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBkZXN0TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgIHNvdXJjZUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgYmxvY2tTaXplMTAwaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgdmVyYm9zaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICB3b3JrRmFjdG9yICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5BdHRlbXB0cyB0byBjb21wcmVzcyB0aGUgZGF0YSBpbiA8Y29tcHV0ZXJvdXRwdXQ+c291cmNlWzAKLS4uIHNvdXJjZUxlbi0xXTwvY29tcHV0ZXJvdXRwdXQ+IGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwKLTxjb21wdXRlcm91dHB1dD5kZXN0WzAgLi4gKmRlc3RMZW4tMV08L2NvbXB1dGVyb3V0cHV0Pi4gIElmIHRoZQotZGVzdGluYXRpb24gYnVmZmVyIGlzIGJpZyBlbm91Z2gsCi08Y29tcHV0ZXJvdXRwdXQ+KmRlc3RMZW48L2NvbXB1dGVyb3V0cHV0PiBpcyBzZXQgdG8gdGhlIHNpemUgb2YKLXRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCA8Y29tcHV0ZXJvdXRwdXQ+QlpfT0s8L2NvbXB1dGVyb3V0cHV0PgotaXMgcmV0dXJuZWQuICBJZiB0aGUgY29tcHJlc3NlZCBkYXRhIHdvbid0IGZpdCwKLTxjb21wdXRlcm91dHB1dD4qZGVzdExlbjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHVuY2hhbmdlZCwgYW5kCi08Y29tcHV0ZXJvdXRwdXQ+QlpfT1VUQlVGRl9GVUxMPC9jb21wdXRlcm91dHB1dD4gaXMKLXJldHVybmVkLjwvcGFyYT4KLQotPHBhcmE+Q29tcHJlc3Npb24gaW4gdGhpcyBtYW5uZXIgaXMgYSBvbmUtc2hvdCBldmVudCwgZG9uZSB3aXRoIGEKLXNpbmdsZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uICBUaGUgcmVzdWx0aW5nIGNvbXByZXNzZWQgZGF0YSBpcyBhCi1jb21wbGV0ZSA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBmb3JtYXQgZGF0YQotc3RyZWFtLiAgVGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBtYWtpbmcgYWRkaXRpb25hbCBjYWxscyB0bwotcHJvdmlkZSBleHRyYSBpbnB1dCBkYXRhLiAgSWYgeW91IHdhbnQgdGhhdCBraW5kIG9mIG1lY2hhbmlzbSwKLXVzZSB0aGUgbG93LWxldmVsIGludGVyZmFjZS48L3BhcmE+Ci0KLTxwYXJhPkZvciB0aGUgbWVhbmluZyBvZiBwYXJhbWV0ZXJzCi08Y29tcHV0ZXJvdXRwdXQ+YmxvY2tTaXplMTAwazwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PnZlcmJvc2l0eTwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PndvcmtGYWN0b3I8L2NvbXB1dGVyb3V0cHV0Piwgc2VlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Q29tcHJlc3NJbml0PC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5UbyBndWFyYW50ZWUgdGhhdCB0aGUgY29tcHJlc3NlZCBkYXRhIHdpbGwgZml0IGluIGl0cwotYnVmZmVyLCBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIG9mIHNpemUgMSUgbGFyZ2VyIHRoYW4gdGhlCi11bmNvbXByZXNzZWQgZGF0YSwgcGx1cyBzaXggaHVuZHJlZCBleHRyYSBieXRlcy48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+Ci13aWxsIG5vdCB3cml0ZSBkYXRhIGF0IG9yIGJleW9uZAotPGNvbXB1dGVyb3V0cHV0PmRlc3RbKmRlc3RMZW5dPC9jb21wdXRlcm91dHB1dD4sIGV2ZW4gaW4gY2FzZSBvZgotYnVmZmVyIG92ZXJmbG93LjwvcGFyYT4KLQotPHBhcmE+UG9zc2libGUgcmV0dXJuIHZhbHVlczo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLUJaX0NPTkZJR19FUlJPUgotICBpZiB0aGUgbGlicmFyeSBoYXMgYmVlbiBtaXMtY29tcGlsZWQKLUJaX1BBUkFNX0VSUk9SCi0gIGlmIGRlc3QgaXMgTlVMTCBvciBkZXN0TGVuIGlzIE5VTEwKLSAgb3IgYmxvY2tTaXplMTAwayA8IDEgb3IgYmxvY2tTaXplMTAwayA+IDkKLSAgb3IgdmVyYm9zaXR5IDwgMCBvciB2ZXJib3NpdHkgPiA0Ci0gIG9yIHdvcmtGYWN0b3IgPCAwIG9yIHdvcmtGYWN0b3IgPiAyNTAKLUJaX01FTV9FUlJPUgotICBpZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGlzIGF2YWlsYWJsZSAKLUJaX09VVEJVRkZfRlVMTAotICBpZiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGV4Y2VlZHMgKmRlc3RMZW4KLUJaX09LCi0gIG90aGVyd2lzZQotPC9wcm9ncmFtbGlzdGluZz4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImJ6YnVmZnRvYnVmZmRlY29tcHJlc3MiIHhyZWZsYWJlbD0iQloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3MiPgotPHRpdGxlPjxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC90aXRsZT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50IEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKCBjaGFyKiAgICAgICAgIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZGVzdExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgc291cmNlTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHNtYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHZlcmJvc2l0eSApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+QXR0ZW1wdHMgdG8gZGVjb21wcmVzcyB0aGUgZGF0YSBpbiA8Y29tcHV0ZXJvdXRwdXQ+c291cmNlWzAKLS4uIHNvdXJjZUxlbi0xXTwvY29tcHV0ZXJvdXRwdXQ+IGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwKLTxjb21wdXRlcm91dHB1dD5kZXN0WzAgLi4gKmRlc3RMZW4tMV08L2NvbXB1dGVyb3V0cHV0Pi4gIElmIHRoZQotZGVzdGluYXRpb24gYnVmZmVyIGlzIGJpZyBlbm91Z2gsCi08Y29tcHV0ZXJvdXRwdXQ+KmRlc3RMZW48L2NvbXB1dGVyb3V0cHV0PiBpcyBzZXQgdG8gdGhlIHNpemUgb2YKLXRoZSB1bmNvbXByZXNzZWQgZGF0YSwgYW5kIDxjb21wdXRlcm91dHB1dD5CWl9PSzwvY29tcHV0ZXJvdXRwdXQ+Ci1pcyByZXR1cm5lZC4gIElmIHRoZSBjb21wcmVzc2VkIGRhdGEgd29uJ3QgZml0LAotPGNvbXB1dGVyb3V0cHV0PipkZXN0TGVuPC9jb21wdXRlcm91dHB1dD4gaXMgdW5jaGFuZ2VkLCBhbmQKLTxjb21wdXRlcm91dHB1dD5CWl9PVVRCVUZGX0ZVTEw8L2NvbXB1dGVyb3V0cHV0PiBpcwotcmV0dXJuZWQuPC9wYXJhPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+c291cmNlPC9jb21wdXRlcm91dHB1dD4gaXMgYXNzdW1lZCB0byBob2xkCi1hIGNvbXBsZXRlIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGZvcm1hdCBkYXRhCi1zdHJlYW0uCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6QnVmZlRvQnVmZkRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiB0cmllcwotdG8gZGVjb21wcmVzcyB0aGUgZW50aXJldHkgb2YgdGhlIHN0cmVhbSBpbnRvIHRoZSBvdXRwdXQKLWJ1ZmZlci48L3BhcmE+Ci0KLTxwYXJhPkZvciB0aGUgbWVhbmluZyBvZiBwYXJhbWV0ZXJzCi08Y29tcHV0ZXJvdXRwdXQ+c21hbGw8L2NvbXB1dGVyb3V0cHV0PiBhbmQKLTxjb21wdXRlcm91dHB1dD52ZXJib3NpdHk8L2NvbXB1dGVyb3V0cHV0Piwgc2VlCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6RGVjb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPkJlY2F1c2UgdGhlIGNvbXByZXNzaW9uIHJhdGlvIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgY2Fubm90Ci1iZSBrbm93biBpbiBhZHZhbmNlLCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBndWFyYW50ZWUgdGhhdCB0aGUKLW91dHB1dCBidWZmZXIgd2lsbCBiZSBiaWcgZW5vdWdoLiAgWW91IG1heSBvZiBjb3Vyc2UgbWFrZQotYXJyYW5nZW1lbnRzIGluIHlvdXIgY29kZSB0byByZWNvcmQgdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZAotZGF0YSwgYnV0IHN1Y2ggYSBtZWNoYW5pc20gaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzCi1saWJyYXJ5LjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PkJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzPC9jb21wdXRlcm91dHB1dD4KLXdpbGwgbm90IHdyaXRlIGRhdGEgYXQgb3IgYmV5b25kCi08Y29tcHV0ZXJvdXRwdXQ+ZGVzdFsqZGVzdExlbl08L2NvbXB1dGVyb3V0cHV0PiwgZXZlbiBpbiBjYXNlIG9mCi1idWZmZXIgb3ZlcmZsb3cuPC9wYXJhPgotCi08cGFyYT5Qb3NzaWJsZSByZXR1cm4gdmFsdWVzOjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpfQ09ORklHX0VSUk9SCi0gIGlmIHRoZSBsaWJyYXJ5IGhhcyBiZWVuIG1pcy1jb21waWxlZAotQlpfUEFSQU1fRVJST1IKLSAgaWYgZGVzdCBpcyBOVUxMIG9yIGRlc3RMZW4gaXMgTlVMTAotICBvciBzbWFsbCAhPSAwICYmIHNtYWxsICE9IDEKLSAgb3IgdmVyYm9zaXR5IDwgMCBvciB2ZXJib3NpdHkgPiA0Ci1CWl9NRU1fRVJST1IKLSAgaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBpcyBhdmFpbGFibGUgCi1CWl9PVVRCVUZGX0ZVTEwKLSAgaWYgdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBleGNlZWRzICpkZXN0TGVuCi1CWl9EQVRBX0VSUk9SCi0gIGlmIGEgZGF0YSBpbnRlZ3JpdHkgZXJyb3Igd2FzIGRldGVjdGVkIGluIHRoZSBjb21wcmVzc2VkIGRhdGEKLUJaX0RBVEFfRVJST1JfTUFHSUMKLSAgaWYgdGhlIGNvbXByZXNzZWQgZGF0YSBkb2Vzbid0IGJlZ2luIHdpdGggdGhlIHJpZ2h0IG1hZ2ljIGJ5dGVzCi1CWl9VTkVYUEVDVEVEX0VPRgotICBpZiB0aGUgY29tcHJlc3NlZCBkYXRhIGVuZHMgdW5leHBlY3RlZGx5Ci1CWl9PSwotICBvdGhlcndpc2UKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwvc2VjdDI+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJ6bGliLWNvbXBhdCIgeHJlZmxhYmVsPSJ6bGliIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIj4KLTx0aXRsZT48Y29tcHV0ZXJvdXRwdXQ+emxpYjwvY29tcHV0ZXJvdXRwdXQ+IGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zPC90aXRsZT4KLQotPHBhcmE+WW9zaGlva2EgVHN1bmVvIGhhcyBjb250cmlidXRlZCBzb21lIGZ1bmN0aW9ucyB0byBnaXZlCi1iZXR0ZXIgPGNvbXB1dGVyb3V0cHV0PnpsaWI8L2NvbXB1dGVyb3V0cHV0PiBjb21wYXRpYmlsaXR5LgotVGhlc2UgZnVuY3Rpb25zIGFyZSA8Y29tcHV0ZXJvdXRwdXQ+QloyX2J6b3BlbjwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9ienJlYWQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnp3cml0ZTwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iemZsdXNoPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Y2xvc2U8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnplcnJvcjwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iemxpYlZlcnNpb248L2NvbXB1dGVyb3V0cHV0Pi4gIFRoZXNlCi1mdW5jdGlvbnMgYXJlIG5vdCAoeWV0KSBvZmZpY2lhbGx5IHBhcnQgb2YgdGhlIGxpYnJhcnkuICBJZiB0aGV5Ci1icmVhaywgeW91IGdldCB0byBrZWVwIGFsbCB0aGUgcGllY2VzLiAgTmV2ZXJ0aGVsZXNzLCBJIHRoaW5rCi10aGV5IHdvcmsgb2suPC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci10eXBlZGVmIHZvaWQgQlpGSUxFOwotCi1jb25zdCBjaGFyICogQloyX2J6bGliVmVyc2lvbiAoIHZvaWQgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJldHVybnMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgbGlicmFyeSB2ZXJzaW9uLjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotQlpGSUxFICogQloyX2J6b3BlbiAgKCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlICk7Ci1CWkZJTEUgKiBCWjJfYnpkb3BlbiAoIGludCAgICAgICAgZmQsICAgIGNvbnN0IGNoYXIgKm1vZGUgKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPk9wZW5zIGEgPGNvbXB1dGVyb3V0cHV0Pi5iejI8L2NvbXB1dGVyb3V0cHV0PiBmaWxlIGZvcgotcmVhZGluZyBvciB3cml0aW5nLCB1c2luZyBlaXRoZXIgaXRzIG5hbWUgb3IgYSBwcmUtZXhpc3RpbmcgZmlsZQotZGVzY3JpcHRvci4gIEFuYWxvZ291cyB0byA8Y29tcHV0ZXJvdXRwdXQ+Zm9wZW48L2NvbXB1dGVyb3V0cHV0PgotYW5kIDxjb21wdXRlcm91dHB1dD5mZG9wZW48L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLWludCBCWjJfYnpyZWFkICAoIEJaRklMRSogYiwgdm9pZCogYnVmLCBpbnQgbGVuICk7Ci1pbnQgQloyX2J6d3JpdGUgKCBCWkZJTEUqIGIsIHZvaWQqIGJ1ZiwgaW50IGxlbiApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+UmVhZHMvd3JpdGVzIGRhdGEgZnJvbS90byBhIHByZXZpb3VzbHkgb3BlbmVkCi08Y29tcHV0ZXJvdXRwdXQ+QlpGSUxFPC9jb21wdXRlcm91dHB1dD4uICBBbmFsb2dvdXMgdG8KLTxjb21wdXRlcm91dHB1dD5mcmVhZDwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0PmZ3cml0ZTwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHByb2dyYW1saXN0aW5nPgotaW50ICBCWjJfYnpmbHVzaCAoIEJaRklMRSogYiApOwotdm9pZCBCWjJfYnpjbG9zZSAoIEJaRklMRSogYiApOwotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+Rmx1c2hlcy9jbG9zZXMgYSA8Y29tcHV0ZXJvdXRwdXQ+QlpGSUxFPC9jb21wdXRlcm91dHB1dD4uCi08Y29tcHV0ZXJvdXRwdXQ+QloyX2J6Zmx1c2g8L2NvbXB1dGVyb3V0cHV0PiBkb2Vzbid0IGFjdHVhbGx5IGRvCi1hbnl0aGluZy4gIEFuYWxvZ291cyB0byA8Y29tcHV0ZXJvdXRwdXQ+ZmZsdXNoPC9jb21wdXRlcm91dHB1dD4KLWFuZCA8Y29tcHV0ZXJvdXRwdXQ+ZmNsb3NlPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1jb25zdCBjaGFyICogQloyX2J6ZXJyb3IgKCBCWkZJTEUgKmIsIGludCAqZXJybnVtICkKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPlJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgbW9yZSByZWNlbnQgZXJyb3Igc3RhdHVzIG9mCi08Y29tcHV0ZXJvdXRwdXQ+YjwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQgYWxzbyBzZXRzCi08Y29tcHV0ZXJvdXRwdXQ+KmVycm51bTwvY29tcHV0ZXJvdXRwdXQ+IHRvIGl0cyBudW1lcmljYWwKLXZhbHVlLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9InN0ZGlvLWZyZWUiIAotICAgICAgIHhyZWZsYWJlbD0iVXNpbmcgdGhlIGxpYnJhcnkgaW4gYSBzdGRpby1mcmVlIGVudmlyb25tZW50Ij4KLTx0aXRsZT5Vc2luZyB0aGUgbGlicmFyeSBpbiBhIDxjb21wdXRlcm91dHB1dD5zdGRpbzwvY29tcHV0ZXJvdXRwdXQ+LWZyZWUgZW52aXJvbm1lbnQ8L3RpdGxlPgotCi0KLTxzZWN0MiBpZD0ic3RkaW8tYnllIiB4cmVmbGFiZWw9IkdldHRpbmcgcmlkIG9mIHN0ZGlvIj4KLTx0aXRsZT5HZXR0aW5nIHJpZCBvZiA8Y29tcHV0ZXJvdXRwdXQ+c3RkaW88L2NvbXB1dGVyb3V0cHV0PjwvdGl0bGU+Ci0KLTxwYXJhPkluIGEgZGVlcGx5IGVtYmVkZGVkIGFwcGxpY2F0aW9uLCB5b3UgbWlnaHQgd2FudCB0byB1c2UKLWp1c3QgdGhlIG1lbW9yeS10by1tZW1vcnkgZnVuY3Rpb25zLiAgWW91IGNhbiBkbyB0aGlzCi1jb252ZW5pZW50bHkgYnkgY29tcGlsaW5nIHRoZSBsaWJyYXJ5IHdpdGggcHJlcHJvY2Vzc29yIHN5bWJvbAotPGNvbXB1dGVyb3V0cHV0PkJaX05PX1NURElPPC9jb21wdXRlcm91dHB1dD4gZGVmaW5lZC4gIERvaW5nIHRoaXMKLWdpdmVzIHlvdSBhIGxpYnJhcnkgY29udGFpbmluZyBvbmx5IHRoZSBmb2xsb3dpbmcgZWlnaHQKLWZ1bmN0aW9uczo8L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzc0luaXQ8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpDb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzSW5pdDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PkJaMl9iekRlY29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpEZWNvbXByZXNzRW5kPC9jb21wdXRlcm91dHB1dD4KLTxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3M8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5CWjJfYnpCdWZmVG9CdWZmRGVjb21wcmVzczwvY29tcHV0ZXJvdXRwdXQ+PC9wYXJhPgotCi08cGFyYT5XaGVuIGNvbXBpbGVkIGxpa2UgdGhpcywgYWxsIGZ1bmN0aW9ucyB3aWxsIGlnbm9yZQotPGNvbXB1dGVyb3V0cHV0PnZlcmJvc2l0eTwvY29tcHV0ZXJvdXRwdXQ+IHNldHRpbmdzLjwvcGFyYT4KLQotPC9zZWN0Mj4KLQotCi08c2VjdDIgaWQ9ImNyaXRpY2FsLWVycm9yIiB4cmVmbGFiZWw9IkNyaXRpY2FsIGVycm9yIGhhbmRsaW5nIj4KLTx0aXRsZT5Dcml0aWNhbCBlcnJvciBoYW5kbGluZzwvdGl0bGU+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5saWJiemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGNvbnRhaW5zIGEgbnVtYmVyCi1vZiBpbnRlcm5hbCBhc3NlcnRpb24gY2hlY2tzIHdoaWNoIHNob3VsZCwgbmVlZGxlc3MgdG8gc2F5LCBuZXZlcgotYmUgYWN0aXZhdGVkLiAgTmV2ZXJ0aGVsZXNzLCBpZiBhbiBhc3NlcnRpb24gc2hvdWxkIGZhaWwsCi1iZWhhdmlvdXIgZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgbGlicmFyeSB3YXMgY29tcGlsZWQgd2l0aAotPGNvbXB1dGVyb3V0cHV0PkJaX05PX1NURElPPC9jb21wdXRlcm91dHB1dD4gc2V0LjwvcGFyYT4KLQotPHBhcmE+Rm9yIGEgbm9ybWFsIGNvbXBpbGUsIGFuIGFzc2VydGlvbiBmYWlsdXJlIHlpZWxkcyB0aGUKLW1lc3NhZ2U6PC9wYXJhPgotCi08YmxvY2txdW90ZT4KLTxwYXJhPmJ6aXAyL2xpYmJ6aXAyOiBpbnRlcm5hbCBlcnJvciBudW1iZXIgTi48L3BhcmE+Ci08cGFyYT5UaGlzIGlzIGEgYnVnIGluIGJ6aXAyL2xpYmJ6aXAyLCAmYnotdmVyc2lvbjsgb2YgJmJ6LWRhdGU7LgotUGxlYXNlIHJlcG9ydCBpdCB0byBtZSBhdDogJmJ6LWVtYWlsOy4gIElmIHRoaXMgaGFwcGVuZWQKLXdoZW4geW91IHdlcmUgdXNpbmcgc29tZSBwcm9ncmFtIHdoaWNoIHVzZXMgbGliYnppcDIgYXMgYQotY29tcG9uZW50LCB5b3Ugc2hvdWxkIGFsc28gcmVwb3J0IHRoaXMgYnVnIHRvIHRoZSBhdXRob3IocykKLW9mIHRoYXQgcHJvZ3JhbS4gIFBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byByZXBvcnQgdGhpcyBidWc7Ci10aW1lbHkgYW5kIGFjY3VyYXRlIGJ1ZyByZXBvcnRzIGV2ZW50dWFsbHkgbGVhZCB0byBoaWdoZXIKLXF1YWxpdHkgc29mdHdhcmUuICBUaGFua3MuICBKdWxpYW4gU2V3YXJkLCAmYnotZGF0ZTsuCi08L3BhcmE+PC9ibG9ja3F1b3RlPgotCi08cGFyYT53aGVyZSA8Y29tcHV0ZXJvdXRwdXQ+TjwvY29tcHV0ZXJvdXRwdXQ+IGlzIHNvbWUgZXJyb3IgY29kZQotbnVtYmVyLiAgSWYgPGNvbXB1dGVyb3V0cHV0Pk4gPT0gMTAwNzwvY29tcHV0ZXJvdXRwdXQ+LCBpdCBhbHNvCi1wcmludHMgc29tZSBleHRyYSB0ZXh0IGFkdmlzaW5nIHRoZSByZWFkZXIgdGhhdCB1bnJlbGlhYmxlIG1lbW9yeQotaXMgb2Z0ZW4gYXNzb2NpYXRlZCB3aXRoIGludGVybmFsIGVycm9yIDEwMDcuIChUaGlzIGlzIGEKLWZyZXF1ZW50bHktb2JzZXJ2ZWQtcGhlbm9tZW5vbiB3aXRoIHZlcnNpb25zIDEuMC4wLzEuMC4xKS48L3BhcmE+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5leGl0KDMpPC9jb21wdXRlcm91dHB1dD4gaXMgdGhlbgotY2FsbGVkLjwvcGFyYT4KLQotPHBhcmE+Rm9yIGEgPGNvbXB1dGVyb3V0cHV0PnN0ZGlvPC9jb21wdXRlcm91dHB1dD4tZnJlZSBsaWJyYXJ5LAotYXNzZXJ0aW9uIGZhaWx1cmVzIHJlc3VsdCBpbiBhIGNhbGwgdG8gYSBmdW5jdGlvbiBkZWNsYXJlZAotYXM6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1leHRlcm4gdm9pZCBiel9pbnRlcm5hbF9lcnJvciAoIGludCBlcnJjb2RlICk7Ci08L3Byb2dyYW1saXN0aW5nPgotCi08cGFyYT5UaGUgcmVsZXZhbnQgY29kZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuICBZb3Ugc2hvdWxkCi1zdXBwbHkgc3VjaCBhIGZ1bmN0aW9uLjwvcGFyYT4KLQotPHBhcmE+SW4gZWl0aGVyIGNhc2UsIG9uY2UgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaGFzIG9jY3VycmVkLCBhbnkKLTxjb21wdXRlcm91dHB1dD5iel9zdHJlYW08L2NvbXB1dGVyb3V0cHV0PiByZWNvcmRzIGludm9sdmVkIGNhbgotYmUgcmVnYXJkZWQgYXMgaW52YWxpZC4gIFlvdSBzaG91bGQgbm90IGF0dGVtcHQgdG8gcmVzdW1lIG5vcm1hbAotb3BlcmF0aW9uIHdpdGggdGhlbS48L3BhcmE+Ci0KLTxwYXJhPllvdSBtYXksIG9mIGNvdXJzZSwgY2hhbmdlIGNyaXRpY2FsIGVycm9yIGhhbmRsaW5nIHRvIHN1aXQKLXlvdXIgbmVlZHMuICBBcyBJIHNhaWQgYWJvdmUsIGNyaXRpY2FsIGVycm9ycyBpbmRpY2F0ZSBidWdzIGluCi10aGUgbGlicmFyeSBhbmQgc2hvdWxkIG5vdCBvY2N1ci4gIEFsbCAibm9ybWFsIiBlcnJvciBzaXR1YXRpb25zCi1hcmUgaW5kaWNhdGVkIHZpYSBlcnJvciByZXR1cm4gY29kZXMgZnJvbSBmdW5jdGlvbnMsIGFuZCBjYW4gYmUKLXJlY292ZXJlZCBmcm9tLjwvcGFyYT4KLQotPC9zZWN0Mj4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9Indpbi1kbGwiIHhyZWZsYWJlbD0iTWFraW5nIGEgV2luZG93cyBETEwiPgotPHRpdGxlPk1ha2luZyBhIFdpbmRvd3MgRExMPC90aXRsZT4KLQotPHBhcmE+RXZlcnl0aGluZyByZWxhdGVkIHRvIFdpbmRvd3MgaGFzIGJlZW4gY29udHJpYnV0ZWQgYnkKLVlvc2hpb2thIFRzdW5lbwotKDxjb21wdXRlcm91dHB1dD50c3VuZW9AcnIuaWlqNHUub3IuanA8L2NvbXB1dGVyb3V0cHV0PiksIHNvCi15b3Ugc2hvdWxkIHNlbmQgeW91ciBxdWVyaWVzIHRvIGhpbSAoYnV0IHBlcmhhcHMgQ2M6IG1lLAotPGNvbXB1dGVyb3V0cHV0PiZiei1lbWFpbDs8L2NvbXB1dGVyb3V0cHV0PikuPC9wYXJhPgotCi08cGFyYT5NeSB2YWd1ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdG8gZG8gaXM6IHVzaW5nIFZpc3VhbCBDKysKLTUuMCwgb3BlbiB0aGUgcHJvamVjdCBmaWxlCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnoyLmRzcDwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQgYnVpbGQuICBUaGF0J3MKLWFsbC48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSBjYW4ndCBvcGVuIHRoZSBwcm9qZWN0IGZpbGUgZm9yIHNvbWUgcmVhc29uLCBtYWtlIGEKLW5ldyBvbmUsIG5hbWluZyB0aGVzZSBmaWxlczoKLTxjb21wdXRlcm91dHB1dD5ibG9ja3NvcnQuYzwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmJ6bGliLmM8L2NvbXB1dGVyb3V0cHV0PiwKLTxjb21wdXRlcm91dHB1dD5jb21wcmVzcy5jPC9jb21wdXRlcm91dHB1dD4sCi08Y29tcHV0ZXJvdXRwdXQ+Y3JjdGFibGUuYzwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PmRlY29tcHJlc3MuYzwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0Pmh1ZmZtYW4uYzwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PnJhbmR0YWJsZS5jPC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnoyLmRlZjwvY29tcHV0ZXJvdXRwdXQ+LiAgWW91IHdpbGwgYWxzbyBuZWVkCi10byBuYW1lIHRoZSBoZWFkZXIgZmlsZXMgPGNvbXB1dGVyb3V0cHV0PmJ6bGliLmg8L2NvbXB1dGVyb3V0cHV0PgotYW5kIDxjb21wdXRlcm91dHB1dD5iemxpYl9wcml2YXRlLmg8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSBkb24ndCB1c2UgVkMrKywgeW91IG1heSBuZWVkIHRvIGRlZmluZSB0aGUKLXByb3Byb2Nlc3NvciBzeW1ib2wKLTxjb21wdXRlcm91dHB1dD5fV0lOMzI8L2NvbXB1dGVyb3V0cHV0Pi48L3BhcmE+Ci0KLTxwYXJhPkZpbmFsbHksIDxjb21wdXRlcm91dHB1dD5kbGx0ZXN0LmM8L2NvbXB1dGVyb3V0cHV0PiBpcyBhCi1zYW1wbGUgcHJvZ3JhbSB1c2luZyB0aGUgRExMLiAgSXQgaGFzIGEgcHJvamVjdCBmaWxlLAotPGNvbXB1dGVyb3V0cHV0PmRsbHRlc3QuZHNwPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi08cGFyYT5JZiB5b3UganVzdCB3YW50IGEgbWFrZWZpbGUgZm9yIFZpc3VhbCBDLCBoYXZlIGEgbG9vayBhdAotPGNvbXB1dGVyb3V0cHV0Pm1ha2VmaWxlLm1zYzwvY29tcHV0ZXJvdXRwdXQ+LjwvcGFyYT4KLQotPHBhcmE+QmUgYXdhcmUgdGhhdCBpZiB5b3UgY29tcGlsZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gaXRzZWxmIG9uIFdpbjMyLCB5b3UgbXVzdAotc2V0IDxjb21wdXRlcm91dHB1dD5CWl9VTklYPC9jb21wdXRlcm91dHB1dD4gdG8gMCBhbmQKLTxjb21wdXRlcm91dHB1dD5CWl9MQ0NXSU4zMjwvY29tcHV0ZXJvdXRwdXQ+IHRvIDEsIGluIHRoZSBmaWxlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDIuYzwvY29tcHV0ZXJvdXRwdXQ+LCBiZWZvcmUgY29tcGlsaW5nLgotT3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgYmluYXJ5IHdvbid0IHdvcmsgY29ycmVjdGx5LjwvcGFyYT4KLQotPHBhcmE+SSBoYXZlbid0IHRyaWVkIGFueSBvZiB0aGlzIHN0dWZmIG15c2VsZiwgYnV0IGl0IGFsbCBsb29rcwotcGxhdXNpYmxlLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotPC9jaGFwdGVyPgotCi0KLQotPGNoYXB0ZXIgaWQ9Im1pc2MiIHhyZWZsYWJlbD0iTWlzY2VsbGFuZWEiPgotPHRpdGxlPk1pc2NlbGxhbmVhPC90aXRsZT4KLQotPHBhcmE+VGhlc2UgYXJlIGp1c3Qgc29tZSByYW5kb20gdGhvdWdodHMgb2YgbWluZS4gIFlvdXIgbWlsZWFnZQotbWF5IHZhcnkuPC9wYXJhPgotCi0KLTxzZWN0MSBpZD0ibGltaXRzIiB4cmVmbGFiZWw9IkxpbWl0YXRpb25zIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0Ij4KLTx0aXRsZT5MaW1pdGF0aW9ucyBvZiB0aGUgY29tcHJlc3NlZCBmaWxlIGZvcm1hdDwvdGl0bGU+Ci0KLTxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMi0xLjAuWDwvY29tcHV0ZXJvdXRwdXQ+LAotPGNvbXB1dGVyb3V0cHV0PjAuOS41PC9jb21wdXRlcm91dHB1dD4gYW5kCi08Y29tcHV0ZXJvdXRwdXQ+MC45LjA8L2NvbXB1dGVyb3V0cHV0PiB1c2UgZXhhY3RseSB0aGUgc2FtZSBmaWxlCi1mb3JtYXQgYXMgdGhlIG9yaWdpbmFsIHZlcnNpb24sCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDItMC4xPC9jb21wdXRlcm91dHB1dD4uICBUaGlzIGRlY2lzaW9uIHdhcwotbWFkZSBpbiB0aGUgaW50ZXJlc3RzIG9mIHN0YWJpbGl0eS4gIENyZWF0aW5nIHlldCBhbm90aGVyCi1pbmNvbXBhdGlibGUgY29tcHJlc3NlZCBmaWxlIGZvcm1hdCB3b3VsZCBjcmVhdGUgZnVydGhlcgotY29uZnVzaW9uIGFuZCBkaXNydXB0aW9uIGZvciB1c2Vycy48L3BhcmE+Ci0KLTxwYXJhPk5ldmVydGhlbGVzcywgdGhpcyBpcyBub3QgYSBwYWlubGVzcyBkZWNpc2lvbi4gIERldmVsb3BtZW50Ci13b3JrIHNpbmNlIHRoZSByZWxlYXNlIG9mCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDItMC4xPC9jb21wdXRlcm91dHB1dD4gaW4gQXVndXN0IDE5OTcgaGFzCi1zaG93biBjb21wbGV4aXRpZXMgaW4gdGhlIGZpbGUgZm9ybWF0IHdoaWNoIHNsb3cgZG93bgotZGVjb21wcmVzc2lvbiBhbmQsIGluIHJldHJvc3BlY3QsIGFyZSB1bm5lY2Vzc2FyeS4gIFRoZXNlCi1hcmU6PC9wYXJhPgotCi08aXRlbWl6ZWRsaXN0IG1hcms9J2J1bGxldCc+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJ1bi1sZW5ndGggZW5jb2Rlciwgd2hpY2ggaXMgdGhlIGZpcnN0IG9mIHRoZQotICAgY29tcHJlc3Npb24gdHJhbnNmb3JtYXRpb25zLCBpcyBlbnRpcmVseSBpcnJlbGV2YW50LiAgVGhlCi0gICBvcmlnaW5hbCBwdXJwb3NlIHdhcyB0byBwcm90ZWN0IHRoZSBzb3J0aW5nIGFsZ29yaXRobSBmcm9tIHRoZQotICAgdmVyeSB3b3JzdCBjYXNlIGlucHV0OiBhIHN0cmluZyBvZiByZXBlYXRlZCBzeW1ib2xzLiAgQnV0Ci0gICBhbGdvcml0aG0gc3RlcHMgUTZhIGFuZCBRNmIgaW4gdGhlIG9yaWdpbmFsIEJ1cnJvd3MtV2hlZWxlcgotICAgdGVjaG5pY2FsIHJlcG9ydCAoU1JDLTEyNCkgc2hvdyBob3cgcmVwZWF0cyBjYW4gYmUgaGFuZGxlZAotICAgd2l0aG91dCBkaWZmaWN1bHR5IGluIGJsb2NrIHNvcnRpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJhbmRvbWlzYXRpb24gbWVjaGFuaXNtIGRvZXNuJ3QgcmVhbGx5IG5lZWQgdG8gYmUKLSAgIHRoZXJlLiAgVWRpIE1hbmJlciBhbmQgR2VuZSBNeWVycyBwdWJsaXNoZWQgYSBzdWZmaXggYXJyYXkKLSAgIGNvbnN0cnVjdGlvbiBhbGdvcml0aG0gYSBmZXcgeWVhcnMgYmFjaywgd2hpY2ggY2FuIGJlIGVtcGxveWVkCi0gICB0byBzb3J0IGFueSBibG9jaywgbm8gbWF0dGVyIGhvdyByZXBldGl0aXZlLCBpbiBPKE4gbG9nIE4pCi0gICB0aW1lLiAgU3Vic2VxdWVudCB3b3JrIGJ5IEt1bmloaWtvIFNhZGFrYW5lIGhhcyBwcm9kdWNlZCBhCi0gICBkZXJpdmF0aXZlIE8oTiAobG9nIE4pXjIpIGFsZ29yaXRobSB3aGljaCB1c3VhbGx5IG91dHBlcmZvcm1zCi0gICB0aGUgTWFuYmVyLU15ZXJzIGFsZ29yaXRobS48L3BhcmE+Ci0KLSAgIDxwYXJhPkkgY291bGQgaGF2ZSBjaGFuZ2VkIHRvIFNhZGFrYW5lJ3MgYWxnb3JpdGhtLCBidXQgSSBmaW5kCi0gICBpdCB0byBiZSBzbG93ZXIgdGhhbiA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PidzCi0gICBleGlzdGluZyBhbGdvcml0aG0gZm9yIG1vc3QgaW5wdXRzLCBhbmQgdGhlIHJhbmRvbWlzYXRpb24KLSAgIG1lY2hhbmlzbSBwcm90ZWN0cyBhZGVxdWF0ZWx5IGFnYWluc3QgYmFkIGNhc2VzLiAgSSBkaWRuJ3QKLSAgIHRoaW5rIGl0IHdhcyBhIGdvb2QgdHJhZGVvZmYgdG8gbWFrZS4gIFBhcnRseSB0aGlzIGlzIGR1ZSB0bwotICAgdGhlIGZhY3QgdGhhdCBJIHdhcyBub3QgZmxvb2RlZCB3aXRoIGVtYWlsIGNvbXBsYWludHMgYWJvdXQKLSAgIDxjb21wdXRlcm91dHB1dD5iemlwMi0wLjE8L2NvbXB1dGVyb3V0cHV0PidzIHBlcmZvcm1hbmNlIG9uCi0gICByZXBldGl0aXZlIGRhdGEsIHNvIHBlcmhhcHMgaXQgaXNuJ3QgYSBwcm9ibGVtIGZvciByZWFsCi0gICBpbnB1dHMuPC9wYXJhPgotCi0gICA8cGFyYT5Qcm9iYWJseSB0aGUgYmVzdCBsb25nLXRlcm0gc29sdXRpb24sIGFuZCB0aGUgb25lIEkgaGF2ZQotICAgaW5jb3Jwb3JhdGVkIGludG8gMC45LjUgYW5kIGFib3ZlLCBpcyB0byB1c2UgdGhlIGV4aXN0aW5nCi0gICBzb3J0aW5nIGFsZ29yaXRobSBpbml0aWFsbHksIGFuZCBmYWxsIGJhY2sgdG8gYSBPKE4gKGxvZyBOKV4yKQotICAgYWxnb3JpdGhtIGlmIHRoZSBzdGFuZGFyZCBhbGdvcml0aG0gZ2V0cyBpbnRvCi0gICBkaWZmaWN1bHRpZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLSAgPGxpc3RpdGVtPjxwYXJhPlRoZSBjb21wcmVzc2VkIGZpbGUgZm9ybWF0IHdhcyBuZXZlciBkZXNpZ25lZCB0byBiZQotICAgaGFuZGxlZCBieSBhIGxpYnJhcnksIGFuZCBJIGhhdmUgaGFkIHRvIGp1bXAgdGhvdWdoIHNvbWUgaG9vcHMKLSAgIHRvIHByb2R1Y2UgYW4gZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mIGRlY29tcHJlc3Npb24uICBJdCdzCi0gICBhIGJpdCBoYWlyeS4gIFRyeSBwYXNzaW5nCi0gICA8Y29tcHV0ZXJvdXRwdXQ+ZGVjb21wcmVzcy5jPC9jb21wdXRlcm91dHB1dD4gdGhyb3VnaCB0aGUgQwotICAgcHJlcHJvY2Vzc29yIGFuZCB5b3UnbGwgc2VlIHdoYXQgSSBtZWFuLiAgTXVjaCBvZiB0aGlzCi0gICBjb21wbGV4aXR5IGNvdWxkIGhhdmUgYmVlbiBhdm9pZGVkIGlmIHRoZSBjb21wcmVzc2VkIHNpemUgb2YKLSAgIGVhY2ggYmxvY2sgb2YgZGF0YSB3YXMgcmVjb3JkZWQgaW4gdGhlIGRhdGEgc3RyZWFtLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPkFuIEFkbGVyLTMyIGNoZWNrc3VtLCByYXRoZXIgdGhhbiBhIENSQzMyIGNoZWNrc3VtLAotICAgd291bGQgYmUgZmFzdGVyIHRvIGNvbXB1dGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLTwvaXRlbWl6ZWRsaXN0PgotCi08cGFyYT5JdCB3b3VsZCBiZSBmYWlyIHRvIHNheSB0aGF0IHRoZQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZm9ybWF0IHdhcyBmcm96ZW4gYmVmb3JlIEkKLXByb3Blcmx5IGFuZCBmdWxseSB1bmRlcnN0b29kIHRoZSBwZXJmb3JtYW5jZSBjb25zZXF1ZW5jZXMgb2YKLWRvaW5nIHNvLjwvcGFyYT4KLQotPHBhcmE+SW1wcm92ZW1lbnRzIHdoaWNoIEkgd2FzIGFibGUgdG8gaW5jb3Jwb3JhdGUgaW50byAwLjkuMCwKLWRlc3BpdGUgdXNpbmcgdGhlIHNhbWUgZmlsZSBmb3JtYXQsIGFyZTo8L3BhcmE+Ci0KLTxpdGVtaXplZGxpc3QgbWFyaz0nYnVsbGV0Jz4KLQotIDxsaXN0aXRlbT48cGFyYT5TaW5nbGUgYXJyYXkgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludmVyc2UgQldULiAgVGhpcwotICBzaWduaWZpY2FudGx5IHNwZWVkcyB1cCBkZWNvbXByZXNzaW9uLCBwcmVzdW1hYmx5IGJlY2F1c2UgaXQKLSAgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNhY2hlIG1pc3Nlcy48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5GYXN0ZXIgaW52ZXJzZSBNVEYgdHJhbnNmb3JtIGZvciBsYXJnZSBNVEYgdmFsdWVzLgotICBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBub3Rpb24gb2Ygc2xpZGluZyBibG9ja3MKLSAgb2YgdmFsdWVzLjwvcGFyYT48L2xpc3RpdGVtPgotCi0gPGxpc3RpdGVtPjxwYXJhPjxjb21wdXRlcm91dHB1dD5iemlwMi0wLjkuMDwvY29tcHV0ZXJvdXRwdXQ+IG5vdyByZWFkcwotICBhbmQgd3JpdGVzIGZpbGVzIHdpdGggPGNvbXB1dGVyb3V0cHV0PmZyZWFkPC9jb21wdXRlcm91dHB1dD4KLSAgYW5kIDxjb21wdXRlcm91dHB1dD5md3JpdGU8L2NvbXB1dGVyb3V0cHV0PjsgdmVyc2lvbiAwLjEgdXNlZAotICA8Y29tcHV0ZXJvdXRwdXQ+cHV0YzwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotICA8Y29tcHV0ZXJvdXRwdXQ+Z2V0YzwvY29tcHV0ZXJvdXRwdXQ+LiAgRHVoISAgV2VsbCwgeW91IGxpdmUKLSAgYW5kIGxlYXJuLjwvcGFyYT48L2xpc3RpdGVtPgotCi08L2l0ZW1pemVkbGlzdD4KLQotPHBhcmE+RnVydGhlciBhaGVhZCwgaXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGRvIHJhbmRvbQotYWNjZXNzIGludG8gZmlsZXMuICBUaGlzIHdpbGwgcmVxdWlyZSBzb21lIGNhcmVmdWwgZGVzaWduIG9mCi1jb21wcmVzc2VkIGZpbGUgZm9ybWF0cy48L3BhcmE+Ci0KLTwvc2VjdDE+Ci0KLQotPHNlY3QxIGlkPSJwb3J0LWlzc3VlcyIgeHJlZmxhYmVsPSJQb3J0YWJpbGl0eSBpc3N1ZXMiPgotPHRpdGxlPlBvcnRhYmlsaXR5IGlzc3VlczwvdGl0bGU+Ci0KLTxwYXJhPkFmdGVyIHNvbWUgY29uc2lkZXJhdGlvbiwgSSBoYXZlIGRlY2lkZWQgbm90IHRvIHVzZSBHTlUKLTxjb21wdXRlcm91dHB1dD5hdXRvY29uZjwvY29tcHV0ZXJvdXRwdXQ+IHRvIGNvbmZpZ3VyZSAwLjkuNSBvcgotMS4wLjwvcGFyYT4KLQotPHBhcmE+PGNvbXB1dGVyb3V0cHV0PmF1dG9jb25mPC9jb21wdXRlcm91dHB1dD4sIGFkbWlyYWJsZSBhbmQKLXdvbmRlcmZ1bCB0aG91Z2ggaXQgaXMsIG1haW5seSBhc3Npc3RzIHdpdGggcG9ydGFiaWxpdHkgcHJvYmxlbXMKLWJldHdlZW4gVW5peC1saWtlIHBsYXRmb3Jtcy4gIEJ1dAotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gZG9lc24ndCBoYXZlIG11Y2ggaW4gdGhlCi13YXkgb2YgcG9ydGFiaWxpdHkgcHJvYmxlbXMgb24gVW5peDsgbW9zdCBvZiB0aGUgZGlmZmljdWx0aWVzCi1hcHBlYXIgd2hlbiBwb3J0aW5nIHRvIHRoZSBNYWMsIG9yIHRvIE1pY3Jvc29mdCdzIG9wZXJhdGluZwotc3lzdGVtcy4gIDxjb21wdXRlcm91dHB1dD5hdXRvY29uZjwvY29tcHV0ZXJvdXRwdXQ+IGRvZXNuJ3QgaGVscAotaW4gdGhvc2UgY2FzZXMsIGFuZCBicmluZ3MgaW4gYSB3aG9sZSBsb2FkIG9mIG5ldwotY29tcGxleGl0eS48L3BhcmE+Ci0KLTxwYXJhPk1vc3QgcGVvcGxlIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhlIGxpYnJhcnkgYW5kCi1wcm9ncmFtIHVuZGVyIFVuaXggc3RyYWlnaHQgb3V0LW9mLXRoZS1ib3gsIHNvIHRvIHNwZWFrLAotZXNwZWNpYWxseSBpZiB5b3UgaGF2ZSBhIHZlcnNpb24gb2YgR05VIEMgYXZhaWxhYmxlLjwvcGFyYT4KLQotPHBhcmE+VGhlcmUgYXJlIGEgY291cGxlIG9mCi08Y29tcHV0ZXJvdXRwdXQ+X19pbmxpbmVfXzwvY29tcHV0ZXJvdXRwdXQ+IGRpcmVjdGl2ZXMgaW4gdGhlCi1jb2RlLiAgR05VIEMgKDxjb21wdXRlcm91dHB1dD5nY2M8L2NvbXB1dGVyb3V0cHV0Pikgc2hvdWxkIGJlCi1hYmxlIHRvIGhhbmRsZSB0aGVtLiAgSWYgeW91J3JlIG5vdCB1c2luZyBHTlUgQywgeW91ciBDIGNvbXBpbGVyCi1zaG91bGRuJ3Qgc2VlIHRoZW0gYXQgYWxsLiAgSWYgeW91ciBjb21waWxlciBkb2VzLCBmb3Igc29tZQotcmVhc29uLCBzZWUgdGhlbSBhbmQgZG9lc24ndCBsaWtlIHRoZW0sIGp1c3QKLTxjb21wdXRlcm91dHB1dD4jZGVmaW5lPC9jb21wdXRlcm91dHB1dD4KLTxjb21wdXRlcm91dHB1dD5fX2lubGluZV9fPC9jb21wdXRlcm91dHB1dD4gdG8gYmUKLTxjb21wdXRlcm91dHB1dD4vKiAqLzwvY29tcHV0ZXJvdXRwdXQ+LiAgT25lIGVhc3kgd2F5IHRvIGRvIHRoaXMKLWlzIHRvIGNvbXBpbGUgd2l0aCB0aGUgZmxhZwotPGNvbXB1dGVyb3V0cHV0Pi1EX19pbmxpbmVfXz08L2NvbXB1dGVyb3V0cHV0Piwgd2hpY2ggc2hvdWxkIGJlCi11bmRlcnN0b29kIGJ5IG1vc3QgVW5peCBjb21waWxlcnMuPC9wYXJhPgotCi08cGFyYT5JZiB5b3Ugc3RpbGwgaGF2ZSBkaWZmaWN1bHRpZXMsIHRyeSBjb21waWxpbmcgd2l0aCB0aGUKLW1hY3JvIDxjb21wdXRlcm91dHB1dD5CWl9TVFJJQ1RfQU5TSTwvY29tcHV0ZXJvdXRwdXQ+IGRlZmluZWQuCi1UaGlzIHNob3VsZCBlbmFibGUgeW91IHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGluIGEgc3RyaWN0bHkgQU5TSQotY29tcGxpYW50IGVudmlyb25tZW50LiAgQnVpbGRpbmcgdGhlIHByb2dyYW0gaXRzZWxmIGxpa2UgdGhpcyBpcwotZGFuZ2Vyb3VzIGFuZCBub3Qgc3VwcG9ydGVkLCBzaW5jZSB5b3UgcmVtb3ZlCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PidzIGNoZWNrcyBhZ2FpbnN0Ci1jb21wcmVzc2luZyBkaXJlY3Rvcmllcywgc3ltYm9saWMgbGlua3MsIGRldmljZXMsIGFuZCBvdGhlcgotbm90LXJlYWxseS1hLWZpbGUgZW50aXRpZXMuICBUaGlzIGNvdWxkIGNhdXNlIGZpbGVzeXN0ZW0KLWNvcnJ1cHRpb24hPC9wYXJhPgotCi08cGFyYT5PbmUgb3RoZXIgdGhpbmc6IGlmIHlvdSBjcmVhdGUgYQotPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gYmluYXJ5IGZvciBwdWJsaWMgZGlzdHJpYnV0aW9uLAotcGxlYXNlIGNvbnNpZGVyIGxpbmtpbmcgaXQgc3RhdGljYWxseSAoPGNvbXB1dGVyb3V0cHV0PmdjYwotLXN0YXRpYzwvY29tcHV0ZXJvdXRwdXQ+KS4gIFRoaXMgYXZvaWRzIGFsbCBzb3J0cyBvZiBsaWJyYXJ5LXZlcnNpb24KLWlzc3VlcyB0aGF0IG90aGVycyBtYXkgZW5jb3VudGVyIGxhdGVyIG9uLjwvcGFyYT4KLQotPHBhcmE+SWYgeW91IGJ1aWxkIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IG9uCi1XaW4zMiwgeW91IG11c3Qgc2V0IDxjb21wdXRlcm91dHB1dD5CWl9VTklYPC9jb21wdXRlcm91dHB1dD4gdG8gMAotYW5kIDxjb21wdXRlcm91dHB1dD5CWl9MQ0NXSU4zMjwvY29tcHV0ZXJvdXRwdXQ+IHRvIDEsIGluIHRoZQotZmlsZSA8Y29tcHV0ZXJvdXRwdXQ+YnppcDIuYzwvY29tcHV0ZXJvdXRwdXQ+LCBiZWZvcmUgY29tcGlsaW5nLgotT3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgYmluYXJ5IHdvbid0IHdvcmsgY29ycmVjdGx5LjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9ImJ1Z3MiIHhyZWZsYWJlbD0iUmVwb3J0aW5nIGJ1Z3MiPgotPHRpdGxlPlJlcG9ydGluZyBidWdzPC90aXRsZT4KLQotPHBhcmE+SSB0cmllZCBwcmV0dHkgaGFyZCB0byBtYWtlIHN1cmUKLTxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+IGlzIGJ1ZyBmcmVlLCBib3RoIGJ5Ci1kZXNpZ24gYW5kIGJ5IHRlc3RpbmcuICBIb3BlZnVsbHkgeW91J2xsIG5ldmVyIG5lZWQgdG8gcmVhZCB0aGlzCi1zZWN0aW9uIGZvciByZWFsLjwvcGFyYT4KLQotPHBhcmE+TmV2ZXJ0aGVsZXNzLCBpZiA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBkaWVzCi13aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0LCBhIGJ1cyBlcnJvciBvciBhbiBpbnRlcm5hbCBhc3NlcnRpb24KLWZhaWx1cmUsIGl0IHdpbGwgYXNrIHlvdSB0byBlbWFpbCBtZSBhIGJ1ZyByZXBvcnQuICBFeHBlcmllbmNlIGZyb20KLXllYXJzIG9mIGZlZWRiYWNrIG9mIGJ6aXAyIHVzZXJzIGluZGljYXRlcyB0aGF0IGFsbW9zdCBhbGwgdGhlc2UKLXByb2JsZW1zIGNhbiBiZSB0cmFjZWQgdG8gZWl0aGVyIGNvbXBpbGVyIGJ1Z3Mgb3IgaGFyZHdhcmUKLXByb2JsZW1zLjwvcGFyYT4KLQotPGl0ZW1pemVkbGlzdCBtYXJrPSdidWxsZXQnPgotCi0gPGxpc3RpdGVtPjxwYXJhPlJlY29tcGlsZSB0aGUgcHJvZ3JhbSB3aXRoIG5vIG9wdGltaXNhdGlvbiwgYW5kCi0gIHNlZSBpZiBpdCB3b3Jrcy4gIEFuZC9vciB0cnkgYSBkaWZmZXJlbnQgY29tcGlsZXIuICBJIGhlYXJkIGFsbAotICBzb3J0cyBvZiBzdG9yaWVzIGFib3V0IHZhcmlvdXMgZmxhdm91cnMgb2YgR05VIEMgKGFuZCBvdGhlcgotICBjb21waWxlcnMpIGdlbmVyYXRpbmcgYmFkIGNvZGUgZm9yCi0gIDxjb21wdXRlcm91dHB1dD5iemlwMjwvY29tcHV0ZXJvdXRwdXQ+LCBhbmQgSSd2ZSBydW4gYWNyb3NzIHR3bwotICBzdWNoIGV4YW1wbGVzIG15c2VsZi48L3BhcmE+Ci0KLSAgPHBhcmE+Mi43LlggdmVyc2lvbnMgb2YgR05VIEMgYXJlIGtub3duIHRvIGdlbmVyYXRlIGJhZCBjb2RlCi0gIGZyb20gdGltZSB0byB0aW1lLCBhdCBoaWdoIG9wdGltaXNhdGlvbiBsZXZlbHMuICBJZiB5b3UgZ2V0Ci0gIHByb2JsZW1zLCB0cnkgdXNpbmcgdGhlIGZsYWdzCi0gIDxjb21wdXRlcm91dHB1dD4tTzI8L2NvbXB1dGVyb3V0cHV0PgotICA8Y29tcHV0ZXJvdXRwdXQ+LWZvbWl0LWZyYW1lLXBvaW50ZXI8L2NvbXB1dGVyb3V0cHV0PgotICA8Y29tcHV0ZXJvdXRwdXQ+LWZuby1zdHJlbmd0aC1yZWR1Y2U8L2NvbXB1dGVyb3V0cHV0Pi4gIFlvdQotICBzaG91bGQgc3BlY2lmaWNhbGx5IDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiB1c2UKLSAgPGNvbXB1dGVyb3V0cHV0Pi1mdW5yb2xsLWxvb3BzPC9jb21wdXRlcm91dHB1dD4uPC9wYXJhPgotCi0gIDxwYXJhPllvdSBtYXkgbm90aWNlIHRoYXQgdGhlIE1ha2VmaWxlIHJ1bnMgc2l4IHRlc3RzIGFzIHBhcnQKLSAgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuICBJZiB0aGUgcHJvZ3JhbSBwYXNzZXMgYWxsIG9mIHRoZXNlLCBpdCdzCi0gIGEgcHJldHR5IGdvb2QgKGJ1dCBub3QgMTAwJSkgaW5kaWNhdGlvbiB0aGF0IHRoZSBjb21waWxlciBoYXMKLSAgZG9uZSBpdHMgam9iIGNvcnJlY3RseS48L3BhcmE+PC9saXN0aXRlbT4KLQotIDxsaXN0aXRlbT48cGFyYT5JZiA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PgotICBjcmFzaGVzIHJhbmRvbWx5LCBhbmQgdGhlIGNyYXNoZXMgYXJlIG5vdCByZXBlYXRhYmxlLCB5b3UgbWF5Ci0gIGhhdmUgYSBmbGFreSBtZW1vcnkgc3Vic3lzdGVtLgotICA8Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiByZWFsbHkgaGFtbWVycyB5b3VyCi0gIG1lbW9yeSBoaWVyYXJjaHksIGFuZCBpZiBpdCdzIGEgYml0IG1hcmdpbmFsLCB5b3UgbWF5IGdldCB0aGVzZQotICBwcm9ibGVtcy4gIERpdHRvIGlmIHlvdXIgZGlzayBvciBJL08gc3Vic3lzdGVtIGlzIHNsb3dseQotICBmYWlsaW5nLiAgWXVwLCB0aGlzIHJlYWxseSBkb2VzIGhhcHBlbi48L3BhcmE+Ci0KLSAgPHBhcmE+VHJ5IHVzaW5nIGEgZGlmZmVyZW50IG1hY2hpbmUgb2YgdGhlIHNhbWUgdHlwZSwgYW5kIHNlZQotICBpZiB5b3UgY2FuIHJlcGVhdCB0aGUgcHJvYmxlbS48L3BhcmE+PC9saXN0aXRlbT4KLQotICA8bGlzdGl0ZW0+PHBhcmE+VGhpcyBpc24ndCByZWFsbHkgYSBidWcsIGJ1dCAuLi4gSWYKLSAgPGNvbXB1dGVyb3V0cHV0PmJ6aXAyPC9jb21wdXRlcm91dHB1dD4gdGVsbHMgeW91IHlvdXIgZmlsZSBpcwotICBjb3JydXB0ZWQgb24gZGVjb21wcmVzc2lvbiwgYW5kIHlvdSBvYnRhaW5lZCB0aGUgZmlsZSB2aWEgRlRQLAotICB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgeW91IGZvcmdvdCB0byB0ZWxsIEZUUCB0byBkbyBhCi0gIGJpbmFyeSBtb2RlIHRyYW5zZmVyLiAgVGhhdCBhYnNvbHV0ZWx5IHdpbGwgY2F1c2UgdGhlIGZpbGUgdG8KLSAgYmUgbm9uLWRlY29tcHJlc3NpYmxlLiAgWW91J2xsIGhhdmUgdG8gdHJhbnNmZXIgaXQKLSAgYWdhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0KLTwvaXRlbWl6ZWRsaXN0PgotCi08cGFyYT5JZiB5b3UndmUgaW5jb3Jwb3JhdGVkCi08Y29tcHV0ZXJvdXRwdXQ+bGliYnppcDI8L2NvbXB1dGVyb3V0cHV0PiBpbnRvIHlvdXIgb3duIHByb2dyYW0KLWFuZCBhcmUgZ2V0dGluZyBwcm9ibGVtcywgcGxlYXNlLCBwbGVhc2UsIHBsZWFzZSwgY2hlY2sgdGhhdCB0aGUKLXBhcmFtZXRlcnMgeW91IGFyZSBwYXNzaW5nIGluIGNhbGxzIHRvIHRoZSBsaWJyYXJ5LCBhcmUgY29ycmVjdCwKLWFuZCBpbiBhY2NvcmRhbmNlIHdpdGggd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIGlzIGFsbG93YWJsZS4KLUkgaGF2ZSB0cmllZCB0byBtYWtlIHRoZSBsaWJyYXJ5IHJvYnVzdCBhZ2FpbnN0IHN1Y2ggcHJvYmxlbXMsCi1idXQgSSdtIHN1cmUgSSBoYXZlbid0IHN1Y2NlZWRlZC48L3BhcmE+Ci0KLTxwYXJhPkZpbmFsbHksIGlmIHRoZSBhYm92ZSBjb21tZW50cyBkb24ndCBoZWxwLCB5b3UnbGwgaGF2ZSB0bwotc2VuZCBtZSBhIGJ1ZyByZXBvcnQuICBOb3csIGl0J3MganVzdCBhbWF6aW5nIGhvdyBtYW55IHBlb3BsZQotd2lsbCBzZW5kIG1lIGEgYnVnIHJlcG9ydCBzYXlpbmcgc29tZXRoaW5nIGxpa2U6PC9wYXJhPgotCi08cHJvZ3JhbWxpc3Rpbmc+Ci1iemlwMiBjcmFzaGVkIHdpdGggc2VnbWVudGF0aW9uIGZhdWx0IG9uIG15IG1hY2hpbmUKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxwYXJhPmFuZCBhYnNvbHV0ZWx5IG5vdGhpbmcgZWxzZS4gIE5lZWRsZXNzIHRvIHNheSwgYSBzdWNoIGEKLXJlcG9ydCBpcyA8ZW1waGFzaXM+dG90YWxseSwgdXR0ZXJseSwgY29tcGxldGVseSBhbmQKLWNvbXByZWhlbnNpdmVseSAxMDAlIHVzZWxlc3M7IGEgd2FzdGUgb2YgeW91ciB0aW1lLCBteSB0aW1lLCBhbmQKLW5ldCBiYW5kd2lkdGg8L2VtcGhhc2lzPi4gIFdpdGggbm8gZGV0YWlscyBhdCBhbGwsIHRoZXJlJ3Mgbm8gd2F5Ci1JIGNhbiBwb3NzaWJseSBiZWdpbiB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHByb2JsZW0gaXMuPC9wYXJhPgotCi08cGFyYT5UaGUgcnVsZXMgb2YgdGhlIGdhbWUgYXJlOiBmYWN0cywgZmFjdHMsIGZhY3RzLiAgRG9uJ3Qgb21pdAotdGhlbSBiZWNhdXNlICJvaCwgdGhleSB3b24ndCBiZSByZWxldmFudCIuICBBdCB0aGUgYmFyZQotbWluaW11bTo8L3BhcmE+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLU1hY2hpbmUgdHlwZS4gIE9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbi4gIAotRXhhY3QgdmVyc2lvbiBvZiBiemlwMiAoZG8gYnppcDIgLVYpLiAgCi1FeGFjdCB2ZXJzaW9uIG9mIHRoZSBjb21waWxlciB1c2VkLiAgCi1GbGFncyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLgotPC9wcm9ncmFtbGlzdGluZz4KLQotPHBhcmE+SG93ZXZlciwgdGhlIG1vc3QgaW1wb3J0YW50IHNpbmdsZSB0aGluZyB0aGF0IHdpbGwgaGVscCBtZQotaXMgdGhlIGZpbGUgdGhhdCB5b3Ugd2VyZSB0cnlpbmcgdG8gY29tcHJlc3Mgb3IgZGVjb21wcmVzcyBhdCB0aGUKLXRpbWUgdGhlIHByb2JsZW0gaGFwcGVuZWQuICBXaXRob3V0IHRoYXQsIG15IGFiaWxpdHkgdG8gZG8KLWFueXRoaW5nIG1vcmUgdGhhbiBzcGVjdWxhdGUgYWJvdXQgdGhlIGNhdXNlLCBpcyBsaW1pdGVkLjwvcGFyYT4KLQotPC9zZWN0MT4KLQotCi08c2VjdDEgaWQ9InBhY2thZ2UiIHhyZWZsYWJlbD0iRGlkIHlvdSBnZXQgdGhlIHJpZ2h0IHBhY2thZ2U/Ij4KLTx0aXRsZT5EaWQgeW91IGdldCB0aGUgcmlnaHQgcGFja2FnZT88L3RpdGxlPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBpcyBhIHJlc291cmNlIGhvZy4KLUl0IHNvYWtzIHVwIGxhcmdlIGFtb3VudHMgb2YgQ1BVIGN5Y2xlcyBhbmQgbWVtb3J5LiAgQWxzbywgaXQKLWdpdmVzIHZlcnkgbGFyZ2UgbGF0ZW5jaWVzLiAgSW4gdGhlIHdvcnN0IGNhc2UsIHlvdSBjYW4gZmVlZCBtYW55Ci1tZWdhYnl0ZXMgb2YgdW5jb21wcmVzc2VkIGRhdGEgaW50byB0aGUgbGlicmFyeSBiZWZvcmUgZ2V0dGluZwotYW55IGNvbXByZXNzZWQgb3V0cHV0LCBzbyB0aGlzIHByb2JhYmx5IHJ1bGVzIG91dCBhcHBsaWNhdGlvbnMKLXJlcXVpcmluZyBpbnRlcmFjdGl2ZSBiZWhhdmlvdXIuPC9wYXJhPgotCi08cGFyYT5UaGVzZSBhcmVuJ3QgZmF1bHRzIG9mIG15IGltcGxlbWVudGF0aW9uLCBJIGhvcGUsIGJ1dCBtb3JlCi1hbiBpbnRyaW5zaWMgcHJvcGVydHkgb2YgdGhlIEJ1cnJvd3MtV2hlZWxlciB0cmFuc2Zvcm0KLSh1bmZvcnR1bmF0ZWx5KS4gIE1heWJlIHRoaXMgaXNuJ3Qgd2hhdCB5b3Ugd2FudC48L3BhcmE+Ci0KLTxwYXJhPklmIHlvdSB3YW50IGEgY29tcHJlc3NvciBhbmQvb3IgbGlicmFyeSB3aGljaCBpcyBmYXN0ZXIsCi11c2VzIGxlc3MgbWVtb3J5IGJ1dCBnZXRzIHByZXR0eSBnb29kIGNvbXByZXNzaW9uLCBhbmQgaGFzCi1taW5pbWFsIGxhdGVuY3ksIGNvbnNpZGVyIEplYW4tbG91cCBHYWlsbHkncyBhbmQgTWFyayBBZGxlcidzCi13b3JrLCA8Y29tcHV0ZXJvdXRwdXQ+emxpYi0xLjIuMTwvY29tcHV0ZXJvdXRwdXQ+IGFuZAotPGNvbXB1dGVyb3V0cHV0Pmd6aXAtMS4yLjQ8L2NvbXB1dGVyb3V0cHV0Pi4gIExvb2sgZm9yIHRoZW0gYXQgCi08dWxpbmsgdXJsPSJodHRwOi8vd3d3LnpsaWIub3JnIj5odHRwOi8vd3d3LnpsaWIub3JnPC91bGluaz4gYW5kIAotPHVsaW5rIHVybD0iaHR0cDovL3d3dy5nemlwLm9yZyI+aHR0cDovL3d3dy5nemlwLm9yZzwvdWxpbms+Ci1yZXNwZWN0aXZlbHkuPC9wYXJhPgotCi08cGFyYT5Gb3Igc29tZXRoaW5nIGZhc3RlciBhbmQgbGlnaHRlciBzdGlsbCwgeW91IG1pZ2h0IHRyeSBNYXJrdXMgRgotWCBKIE9iZXJodW1lcidzIDxjb21wdXRlcm91dHB1dD5MWk88L2NvbXB1dGVyb3V0cHV0PiByZWFsLXRpbWUKLWNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGlicmFyeSwgYXQgCi08dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZSI+aHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2U8L3VsaW5rPi48L3BhcmE+Ci0KLTwvc2VjdDE+Ci0KLQotCi08c2VjdDEgaWQ9InJlYWRpbmciIHhyZWZsYWJlbD0iRnVydGhlciBSZWFkaW5nIj4KLTx0aXRsZT5GdXJ0aGVyIFJlYWRpbmc8L3RpdGxlPgotCi08cGFyYT48Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0PiBpcyBub3QgcmVzZWFyY2gKLXdvcmssIGluIHRoZSBzZW5zZSB0aGF0IGl0IGRvZXNuJ3QgcHJlc2VudCBhbnkgbmV3IGlkZWFzLgotUmF0aGVyLCBpdCdzIGFuIGVuZ2luZWVyaW5nIGV4ZXJjaXNlIGJhc2VkIG9uIGV4aXN0aW5nCi1pZGVhcy48L3BhcmE+Ci0KLTxwYXJhPkZvdXIgZG9jdW1lbnRzIGRlc2NyaWJlIGVzc2VudGlhbGx5IGFsbCB0aGUgaWRlYXMgYmVoaW5kCi08Y29tcHV0ZXJvdXRwdXQ+YnppcDI8L2NvbXB1dGVyb3V0cHV0Pjo8L3BhcmE+Ci0KLTxsaXRlcmFsbGF5b3V0Pk1pY2hhZWwgQnVycm93cyBhbmQgRC4gSi4gV2hlZWxlcjoKLSAgIkEgYmxvY2stc29ydGluZyBsb3NzbGVzcyBkYXRhIGNvbXByZXNzaW9uIGFsZ29yaXRobSIKLSAgIDEwdGggTWF5IDE5OTQuIAotICAgRGlnaXRhbCBTUkMgUmVzZWFyY2ggUmVwb3J0IDEyNC4KLSAgIGZ0cDovL2Z0cC5kaWdpdGFsLmNvbS9wdWIvREVDL1NSQy9yZXNlYXJjaC1yZXBvcnRzL1NSQy0xMjQucHMuZ3oKLSAgIElmIHlvdSBoYXZlIHRyb3VibGUgZmluZGluZyBpdCwgdHJ5IHNlYXJjaGluZyBhdCB0aGUKLSAgIE5ldyBaZWFsYW5kIERpZ2l0YWwgTGlicmFyeSwgaHR0cDovL3d3dy5uemRsLm9yZy4KLQotRGFuaWVsIFMuIEhpcnNjaGJlcmcgYW5kIERlYnJhIEEuIExlTGV3ZXIKLSAgIkVmZmljaWVudCBEZWNvZGluZyBvZiBQcmVmaXggQ29kZXMiCi0gICBDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNLCBBcHJpbCAxOTkwLCBWb2wgMzMsIE51bWJlciA0LgotICAgWW91IG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGFuIGVsZWN0cm9uaWMgY29weSBvZiB0aGlzCi0gICBmcm9tIHRoZSBBQ00gRGlnaXRhbCBMaWJyYXJ5LgotCi1EYXZpZCBKLiBXaGVlbGVyCi0gICBQcm9ncmFtIGJyZWQzLmMgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudCBicmVkMy5wcy4KLSAgIFRoaXMgY29udGFpbnMgdGhlIGlkZWEgYmVoaW5kIHRoZSBtdWx0aS10YWJsZSBIdWZmbWFuIGNvZGluZyBzY2hlbWUuCi0gICBmdHA6Ly9mdHAuY2wuY2FtLmFjLnVrL3VzZXJzL2RqdzMvCi0KLUpvbiBMLiBCZW50bGV5IGFuZCBSb2JlcnQgU2VkZ2V3aWNrCi0gICJGYXN0IEFsZ29yaXRobXMgZm9yIFNvcnRpbmcgYW5kIFNlYXJjaGluZyBTdHJpbmdzIgotICAgQXZhaWxhYmxlIGZyb20gU2VkZ2V3aWNrJ3Mgd2ViIHBhZ2UsCi0gICB3d3cuY3MucHJpbmNldG9uLmVkdS9+cnMKLTwvbGl0ZXJhbGxheW91dD4KLQotPHBhcmE+VGhlIGZvbGxvd2luZyBwYXBlciBnaXZlcyB2YWx1YWJsZSBhZGRpdGlvbmFsIGluc2lnaHRzIGludG8KLXRoZSBhbGdvcml0aG0sIGJ1dCBpcyBub3QgaW1tZWRpYXRlbHkgdGhlIGJhc2lzIG9mIGFueSBjb2RlIHVzZWQKLWluIGJ6aXAyLjwvcGFyYT4KLQotPGxpdGVyYWxsYXlvdXQ+UGV0ZXIgRmVud2ljazoKLSAgIEJsb2NrIFNvcnRpbmcgVGV4dCBDb21wcmVzc2lvbgotICAgUHJvY2VlZGluZ3Mgb2YgdGhlIDE5dGggQXVzdHJhbGFzaWFuIENvbXB1dGVyIFNjaWVuY2UgQ29uZmVyZW5jZSwKLSAgICAgTWVsYm91cm5lLCBBdXN0cmFsaWEuICBKYW4gMzEgLSBGZWIgMiwgMTk5Ni4KLSAgIGZ0cDovL2Z0cC5jcy5hdWNrbGFuZC5hYy5uei9wdWIvcGV0ZXItZi9BQ1NDOTZwYXBlci5wczwvbGl0ZXJhbGxheW91dD4KLQotPHBhcmE+S3VuaWhpa28gU2FkYWthbmUncyBzb3J0aW5nIGFsZ29yaXRobSwgbWVudGlvbmVkIGFib3ZlLCBpcwotYXZhaWxhYmxlIGZyb206PC9wYXJhPgotCi08bGl0ZXJhbGxheW91dD5odHRwOi8vbmFvbWkuaXMucy51LXRva3lvLmFjLmpwL35zYWRhL3BhcGVycy9TYWRhOThiLnBzLmd6Ci08L2xpdGVyYWxsYXlvdXQ+Ci0KLTxwYXJhPlRoZSBNYW5iZXItTXllcnMgc3VmZml4IGFycmF5IGNvbnN0cnVjdGlvbiBhbGdvcml0aG0gaXMKLWRlc2NyaWJlZCBpbiBhIHBhcGVyIGF2YWlsYWJsZSBmcm9tOjwvcGFyYT4KLQotPGxpdGVyYWxsYXlvdXQ+aHR0cDovL3d3dy5jcy5hcml6b25hLmVkdS9wZW9wbGUvZ2VuZS9QQVBFUlMvc3VmZml4LnBzCi08L2xpdGVyYWxsYXlvdXQ+Ci0KLTxwYXJhPkZpbmFsbHksIHRoZSBmb2xsb3dpbmcgcGFwZXJzIGRvY3VtZW50IHNvbWUKLWludmVzdGlnYXRpb25zIEkgbWFkZSBpbnRvIHRoZSBwZXJmb3JtYW5jZSBvZiBzb3J0aW5nCi1hbmQgZGVjb21wcmVzc2lvbiBhbGdvcml0aG1zOjwvcGFyYT4KLQotPGxpdGVyYWxsYXlvdXQ+SnVsaWFuIFNld2FyZAotICAgT24gdGhlIFBlcmZvcm1hbmNlIG9mIEJXVCBTb3J0aW5nIEFsZ29yaXRobXMKLSAgIFByb2NlZWRpbmdzIG9mIHRoZSBJRUVFIERhdGEgQ29tcHJlc3Npb24gQ29uZmVyZW5jZSAyMDAwCi0gICAgIFNub3diaXJkLCBVdGFoLiAgMjgtMzAgTWFyY2ggMjAwMC4KLQotSnVsaWFuIFNld2FyZAotICAgU3BhY2UtdGltZSBUcmFkZW9mZnMgaW4gdGhlIEludmVyc2UgQi1XIFRyYW5zZm9ybQotICAgUHJvY2VlZGluZ3Mgb2YgdGhlIElFRUUgRGF0YSBDb21wcmVzc2lvbiBDb25mZXJlbmNlIDIwMDEKLSAgICAgU25vd2JpcmQsIFV0YWguICAyNy0yOSBNYXJjaCAyMDAxLgotPC9saXRlcmFsbGF5b3V0PgotCi08L3NlY3QxPgotCi08L2NoYXB0ZXI+Ci0KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL21rMjUxLmMgYi9VdGlsaXRpZXMvY21iemlwMi9tazI1MS5jCmluZGV4IDM5ZTk0YzAuLjZjNWJiZjkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL21rMjUxLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvbWsyNTEuYwpAQCAtOSw4ICs5LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3JhbmR0YWJsZS5jIGIvVXRpbGl0aWVzL2NtYnppcDIvcmFuZHRhYmxlLmMKaW5kZXggMDY4Yjc2My4uYmRjNmQ0YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvcmFuZHRhYmxlLmMKKysrIGIvVXRpbGl0aWVzL2NtYnppcDIvcmFuZHRhYmxlLmMKQEAgLTgsOCArOCw4IEBACiAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBiemlwMi9saWJiemlwMiwgYSBwcm9ncmFtIGFuZCBsaWJyYXJ5IGZvcgogICAgbG9zc2xlc3MsIGJsb2NrLXNvcnRpbmcgZGF0YSBjb21wcmVzc2lvbi4KIAotICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0gICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgorICAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuOCBvZiAxMyBKdWx5IDIwMTkKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE5IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYWNtLm9yZz4KIAogICAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAogICAgUkVBRE1FIGZpbGUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUxLnJiMiBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTEucmIyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWRkYTM2Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTEucmIyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMS5yZWYgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUxLnJlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM4NjllZS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUxLnJlZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTEudHN0IGIvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMS50c3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjODY5ZWUuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMS50c3QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUyLnJiMiBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTIucmIyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTU0Mjk3Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTIucmIyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMi5yZWYgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUyLnJlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlNWI1OC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUyLnJlZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTIudHN0IGIvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMi50c3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZTViNTguLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMi50c3QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnJiMiBiL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTMucmIyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzliMDhjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3NhbXBsZTMucmIyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMy5yZWYgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnJlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc1YTJmNi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnJlZgorKysgL2Rldi9udWxsCkBAIC0xLDMwMDA3ICswLDAgQEAKLVRoaXMgZmlsZSBpcyBleGNlZWRpbmdseSBib3JpbmcuICBJZiB5b3UgZmluZCB5b3Vyc2VsZgotcmVhZGluZyBpdCwgcGxlYXNlICgxKSB0YWtlIGl0IGZyb20gbWUgdGhhdCB5b3UgY2FuIHNhZmVseQotZ3Vlc3Mgd2hhdCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBzYXlzLCBhbmQgKDIpIHNlZWsgcHJvZmVzc2lvbmFsCi1oZWxwLgotCi1wcy4gIHRoZXJlIGFyZSBubyBmdXJ0aGVyIHNhcmNhc3RpYyByZW1hcmtzIGluIHRoaXMgZmlsZS4KLQotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc2FtcGxlMy50c3QgYi9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnRzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc1YTJmNi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi9zYW1wbGUzLnRzdAorKysgL2Rldi9udWxsCkBAIC0xLDMwMDA3ICswLDAgQEAKLVRoaXMgZmlsZSBpcyBleGNlZWRpbmdseSBib3JpbmcuICBJZiB5b3UgZmluZCB5b3Vyc2VsZgotcmVhZGluZyBpdCwgcGxlYXNlICgxKSB0YWtlIGl0IGZyb20gbWUgdGhhdCB5b3UgY2FuIHNhZmVseQotZ3Vlc3Mgd2hhdCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBzYXlzLCBhbmQgKDIpIHNlZWsgcHJvZmVzc2lvbmFsCi1oZWxwLgotCi1wcy4gIHRoZXJlIGFyZSBubyBmdXJ0aGVyIHNhcmNhc3RpYyByZW1hcmtzIGluIHRoaXMgZmlsZS4KLQotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaAotdWdoCi11Z2gKLXVnaApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvc3Bld0cuYyBiL1V0aWxpdGllcy9jbWJ6aXAyL3NwZXdHLmMKaW5kZXggN2JkMTI4NC4uNjVkMjRjOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvc3Bld0cuYworKysgYi9VdGlsaXRpZXMvY21iemlwMi9zcGV3Ry5jCkBAIC0xMywxNSArMTMsMTUgQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KIAogICAgVGhpcyBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBjb250YWluZWQKICAgIGluIHRoZSBmaWxlIExJQ0VOU0UuCi0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCiAjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi91bnpjcmFzaC5jIGIvVXRpbGl0aWVzL2NtYnppcDIvdW56Y3Jhc2guYwppbmRleCBhMWI3NTQ2Li5jNjhmOTNjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi91bnpjcmFzaC5jCisrKyBiL1V0aWxpdGllcy9jbWJ6aXAyL3VuemNyYXNoLmMKQEAgLTE3LDggKzE3LDggQEAKICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCiAgICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgogCi0gICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC41IG9mIDEwIERlY2VtYmVyIDIwMDcKLSAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQgPGpzZXdhcmRAYnppcC5vcmc+CisgICBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC44IG9mIDEzIEp1bHkgMjAxOQorICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgSnVsaWFuIFNld2FyZCA8anNld2FyZEBhY20ub3JnPgogCiAgICBQbGVhc2UgcmVhZCB0aGUgV0FSTklORywgRElTQ0xBSU1FUiBhbmQgUEFURU5UUyBzZWN0aW9ucyBpbiB0aGUgCiAgICBSRUFETUUgZmlsZS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMCBiL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmNDQyYS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi93b3JkczAKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotSWYgY29tcGlsYXRpb24gcHJvZHVjZXMgZXJyb3JzLCBvciBhIGxhcmdlIG51bWJlciBvZiB3YXJuaW5ncywKLXBsZWFzZSByZWFkIFJFQURNRS5DT01QSUxBVElPTi5QUk9CTEVNUyAtLSB5b3UgbWlnaHQgYmUgYWJsZSB0bwotYWRqdXN0IHRoZSBmbGFncyBpbiB0aGlzIE1ha2VmaWxlIHRvIGltcHJvdmUgbWF0dGVycy4KLQotQWxzbyBpbiBSRUFETUUuQ09NUElMQVRJT04uUFJPQkxFTVMgYXJlIHNvbWUgaGludHMgdGhhdCBtYXkgaGVscAotaWYgeW91ciBidWlsZCBwcm9kdWNlcyBhbiBleGVjdXRhYmxlIHdoaWNoIGlzIHVuYWJsZSB0byBjb3JyZWN0bHkKLWhhbmRsZSBzby1jYWxsZWQgJ2xhcmdlIGZpbGVzJyAtLSBmaWxlcyBvZiBzaXplIDJHQiBvciBtb3JlLgotCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21iemlwMi93b3JkczEgYi9VdGlsaXRpZXMvY21iemlwMi93b3JkczEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODNkZTkuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMxCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLURvaW5nIDYgdGVzdHMgKDMgY29tcHJlc3MsIDMgdW5jb21wcmVzcykgLi4uCi1JZiB0aGVyZSdzIGEgcHJvYmxlbSwgdGhpbmdzIG1pZ2h0IHN0b3AgYXQgdGhpcyBwb2ludC4KLSAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMiBiL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FkZGNmNC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21iemlwMi93b3JkczIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLQotQ2hlY2tpbmcgdGVzdCByZXN1bHRzLiAgSWYgYW55IG9mIHRoZSBmb3VyICJjbXAicyB3aGljaCBmb2xsb3cKLXJlcG9ydCBhbnkgZGlmZmVyZW5jZXMsIHNvbWV0aGluZyBpcyB3cm9uZy4gIElmIHlvdSBjYW4ndCBlYXNpbHkKLWZpZ3VyZSBvdXQgd2hhdCwgcGxlYXNlIGxldCBtZSBrbm93IChqc2V3YXJkQGJ6aXAub3JnKS4KLQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMzIGIvVXRpbGl0aWVzL2NtYnppcDIvd29yZHMzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTcyNjY5Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3dvcmRzMworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLQotSWYgeW91IGdvdCB0aGlzIGZhciBhbmQgdGhlICdjbXAncyBkaWRuJ3QgY29tcGxhaW4sIGl0IGxvb2tzCi1saWtlIHlvdSdyZSBpbiBidXNpbmVzcy4gIAotCi1UbyBpbnN0YWxsIGluIC91c3IvbG9jYWwvYmluLCAvdXNyL2xvY2FsL2xpYiwgL3Vzci9sb2NhbC9tYW4gYW5kIAotL3Vzci9sb2NhbC9pbmNsdWRlLCB0eXBlCi0KLSAgIG1ha2UgaW5zdGFsbAotCi1UbyBpbnN0YWxsIHNvbWV3aGVyZSBlbHNlLCBlZywgL3h4eC95eXkve2JpbixsaWIsbWFuLGluY2x1ZGV9LCB0eXBlIAotCi0gICBtYWtlIGluc3RhbGwgUFJFRklYPS94eHgveXl5Ci0KLUlmIHlvdSBhcmUgKGp1c3RpZmlhYmx5KSBwYXJhbm9pZCBhbmQgd2FudCB0byBzZWUgd2hhdCAnbWFrZSBpbnN0YWxsJwotaXMgZ29pbmcgdG8gZG8sIHlvdSBjYW4gZmlyc3QgZG8KLQotICAgbWFrZSAtbiBpbnN0YWxsICAgICAgICAgICAgICAgICAgICAgIG9yCi0gICBtYWtlIC1uIGluc3RhbGwgUFJFRklYPS94eHgveXl5ICAgICAgcmVzcGVjdGl2ZWx5LgotCi1UaGUgLW4gaW5zdHJ1Y3RzIG1ha2UgdG8gc2hvdyB0aGUgY29tbWFuZHMgaXQgd291bGQgZXhlY3V0ZSwgYnV0Ci1ub3QgYWN0dWFsbHkgZXhlY3V0ZSB0aGVtLgotCi1JbnN0cnVjdGlvbnMgZm9yIHVzZSBhcmUgaW4gdGhlIHByZWZvcm1hdHRlZCBtYW51YWwgcGFnZSwgaW4gdGhlIGZpbGUKLWJ6aXAyLnR4dC4gIEZvciBtb3JlIGRldGFpbGVkIGRvY3VtZW50YXRpb24sIHJlYWQgdGhlIGZ1bGwgbWFudWFsLiAgCi1JdCBpcyBhdmFpbGFibGUgaW4gUG9zdHNjcmlwdCBmb3JtIChtYW51YWwucHMpLCBQREYgZm9ybSAobWFudWFsLnBkZiksCi1hbmQgSFRNTCBmb3JtIChtYW51YWwuaHRtbCkuCi0KLVlvdSBjYW4gYWxzbyBkbyAiYnppcDIgLS1oZWxwIiB0byBzZWUgc29tZSBoZWxwZnVsIGluZm9ybWF0aW9uLiAKLSJiemlwMiAtTCIgZGlzcGxheXMgdGhlIHNvZnR3YXJlIGxpY2Vuc2UuCi0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWJ6aXAyL3htbHByb2Muc2ggYi9VdGlsaXRpZXMvY21iemlwMi94bWxwcm9jLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1Mzg0MTc3Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWJ6aXAyL3htbHByb2Muc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotIyEvYmluL2Jhc2gKLSMgc2VlIHRoZSBSRUFETUUgZmlsZSBmb3IgdXNhZ2UgZXRjLgotIwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJ6aXAyL2xpYmJ6aXAyLCBhIHByb2dyYW0gYW5kIGxpYnJhcnkgZm9yCi0jICBsb3NzbGVzcywgYmxvY2stc29ydGluZyBkYXRhIGNvbXByZXNzaW9uLgotIwotIyAgYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3Ci0jICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNyBKdWxpYW4gU2V3YXJkIDxqc2V3YXJkQGJ6aXAub3JnPgotIwotIyAgUGxlYXNlIHJlYWQgdGhlIFdBUk5JTkcsIERJU0NMQUlNRVIgYW5kIFBBVEVOVFMgc2VjdGlvbnMgaW4gdGhlIAotIyAgUkVBRE1FIGZpbGUuCi0jCi0jICBUaGlzIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5lZAotIyAgaW4gdGhlIGZpbGUgTElDRU5TRS4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLXVzYWdlKCkgewotICBlY2hvICcnOwotICBlY2hvICdVc2FnZTogeG1scHJvYy5zaCAtW29wdGlvbl0gPGZpbGVuYW1lLnhtbD4nOwotICBlY2hvICdTcGVjaWZ5IGEgdGFyZ2V0IGZyb206JzsKLSAgZWNobyAnLXYgICAgICB2ZXJpZnkgeG1sIGZpbGUgY29uZm9ybXMgdG8gZHRkJzsKLSAgZWNobyAnLWh0bWwgICBvdXRwdXQgaW4gaHRtbCBmb3JtYXQgKHNpbmdsZSBmaWxlKSc7Ci0gIGVjaG8gJy1wcyAgICAgb3V0cHV0IGluIHBvc3RzY3JpcHQgZm9ybWF0JzsKLSAgZWNobyAnLXBkZiAgICBvdXRwdXQgaW4gcGRmIGZvcm1hdCc7Ci0gIGV4aXQ7Ci19Ci0KLWlmIHRlc3QgJCMgLW5lIDI7IHRoZW4KLSAgdXNhZ2UKLWZpCi0jIGFzc2lnbiB0aGUgdmFyaWFibGUgZm9yIHRoZSBvdXRwdXQgdHlwZQotYWN0aW9uPSQxOyBzaGlmdAotIyBhc3NpZ24gdGhlIG91dHB1dCBmaWxlbmFtZQoteG1sZmlsZT0kMTsgc2hpZnQKLSMgYW5kIGNoZWNrIHVzZXIgaW5wdXQgaXQgY29ycmVjdAotaWYgISh0ZXN0IC1mICR4bWxmaWxlKTsgdGhlbgotICBlY2hvICJObyBzdWNoIGZpbGU6ICR4bWxmaWxlIjsKLSAgZXhpdDsKLWZpCi0jIHNvbWUgb3RoZXIgc3R1ZmYgd2Ugd2lsbCB1c2UKLU9VVD1vdXRwdXQKLXhzbF9mbz1iei1mby54c2wKLXhzbF9odG1sPWJ6LWh0bWwueHNsCi0KLWJhc2VuYW1lPSR4bWxmaWxlCi1iYXNlbmFtZT0ke2Jhc2VuYW1lLy8nLnhtbCcvJyd9Ci0KLWZvZmlsZT0iJHtiYXNlbmFtZX0uZm8iCi1odG1sZmlsZT0iJHtiYXNlbmFtZX0uaHRtbCIKLXBkZmZpbGU9IiR7YmFzZW5hbWV9LnBkZiIKLXBzZmlsZT0iJHtiYXNlbmFtZX0ucHMiCi14bWxmbXRmaWxlPSIke2Jhc2VuYW1lfS5mbXQiCi0KLSMgZmlyc3QgcHJvY2VzcyB0aGUgeG1sZmlsZSB3aXRoIENEQVRBIHRhZ3MKLS4vZm9ybWF0LnBsICR4bWxmaWxlICR4bWxmbXRmaWxlCi0jIHNvIHRoZSBzaGVsbCBrbm93cyB3aGVyZSB0aGUgY2F0YWxvZ3MgbGl2ZQotZXhwb3J0IFhNTF9DQVRBTE9HX0ZJTEVTPS9ldGMveG1sL2NhdGFsb2cKLQotIyBwb3N0LXByb2Nlc3NpbmcgdGlkeSB1cAotY2xlYW51cCgpIHsKLSAgZWNobyAiQ2xlYW5pbmcgdXA6ICRAIiAKLSAgd2hpbGUgWyAkIyAhPSAwIF0KLSAgZG8KLSAgICBhcmc9JDE7IHNoaWZ0OwotICAgIGVjaG8gIiAgZGVsZXRpbmcgJGFyZyI7Ci0gICAgcm0gJGFyZwotICBkb25lCi19Ci0KLWNhc2UgJGFjdGlvbiBpbgotICAtdikKLSAgIGZsYWdzPSctLW5vb3V0IC0teGluY2x1ZGUgLS1ub2JsYW5rcyAtLXBvc3R2YWxpZCcKLSAgIGR0ZD0nLS1kdGR2YWxpZCBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQnCi0gICB4bWxsaW50ICRmbGFncyAkZHRkICR4bWxmbXRmaWxlIDI+ICRPVVQgCi0gICBlZ3JlcCAnZXJyb3InICRPVVQgCi0gICBybSAkT1VUCi0gIDs7Ci0KLSAgLWh0bWwpCi0gICBlY2hvICJDcmVhdGluZyAkaHRtbGZpbGUgLi4uIgotICAgeHNsdHByb2MgLS1ub25ldCAtLXhpbmNsdWRlICAtbyAkaHRtbGZpbGUgJHhzbF9odG1sICR4bWxmbXRmaWxlCi0gICBjbGVhbnVwICR4bWxmbXRmaWxlCi0gIDs7Ci0KLSAgLXBkZikKLSAgIGVjaG8gIkNyZWF0aW5nICRwZGZmaWxlIC4uLiIKLSAgIHhzbHRwcm9jIC0tbm9uZXQgLS14aW5jbHVkZSAtbyAkZm9maWxlICR4c2xfZm8gJHhtbGZtdGZpbGUKLSAgIHBkZnhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSAgIHBkZnhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSAgIHBkZnhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSAgIGNsZWFudXAgJE9VVCAkeG1sZm10ZmlsZSAqLmF1eCAqLmZvICoubG9nICoub3V0Ci0gIDs7Ci0KLSAgLXBzKQotICAgZWNobyAiQ3JlYXRpbmcgJHBzZmlsZSAuLi4iCi0gICB4c2x0cHJvYyAtLW5vbmV0IC0teGluY2x1ZGUgLW8gJGZvZmlsZSAkeHNsX2ZvICR4bWxmbXRmaWxlCi0gICBwZGZ4bWx0ZXggJGZvZmlsZSA+JE9VVCA8L2Rldi9udWxsCi0gICBwZGZ4bWx0ZXggJGZvZmlsZSA+JE9VVCA8L2Rldi9udWxsCi0gICBwZGZ4bWx0ZXggJGZvZmlsZSA+JE9VVCA8L2Rldi9udWxsCi0gICBwZGZ0b3BzICRwZGZmaWxlICRwc2ZpbGUKLSAgIGNsZWFudXAgJE9VVCAkeG1sZm10ZmlsZSAkcGRmZmlsZSAqLmF1eCAqLmZvICoubG9nICoub3V0Ci0jICBwYXNzaXZldGV4IGlzIGJyb2tlbiwgc28gd2UgY2FuJ3QgZ28gdGhpcyByb3V0ZSB5ZXQuCi0jICAgeG1sdGV4ICRmb2ZpbGUgPiRPVVQgPC9kZXYvbnVsbAotIyAgIHhtbHRleCAkZm9maWxlID4kT1VUIDwvZGV2L251bGwKLSMgICB4bWx0ZXggJGZvZmlsZSA+JE9VVCA8L2Rldi9udWxsCi0jICAgZHZpcHMgLVIgLXEgLW8gYnppcC1tYW51YWwucHMgKi5kdmkKLSAgOzsKLQotICAqKQotICB1c2FnZQotICA7OwotZXNhYwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9DTWFrZUNvbmZpZ3VyYWJsZUZpbGUuaW4gYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0NNYWtlQ29uZmlndXJhYmxlRmlsZS5pbgppbmRleCBkZjJjMzgyLi4yYmFmZTJjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0NNYWtlQ29uZmlndXJhYmxlRmlsZS5pbgorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0NNYWtlQ29uZmlndXJhYmxlRmlsZS5pbgpAQCAtMSArMSwyMiBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogQENNQUtFX0NPTkZJR1VSQUJMRV9GSUxFX0NPTlRFTlRACmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0N1cmxTeW1ib2xIaWRpbmcuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0N1cmxTeW1ib2xIaWRpbmcuY21ha2UKaW5kZXggNjBlZThlNi4uYWFhYzlmZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9DdXJsU3ltYm9sSGlkaW5nLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ3VybFN5bWJvbEhpZGluZy5jbWFrZQpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpbmNsdWRlKENoZWNrQ1NvdXJjZUNvbXBpbGVzKQogCiBvcHRpb24oQ1VSTF9ISURERU5fU1lNQk9MUyAiU2V0IHRvIE9OIHRvIGhpZGUgbGliY3VybCBpbnRlcm5hbCBzeW1ib2xzICg9aGlkZSBhbGwgc3ltYm9scyB0aGF0IGFyZW4ndCBvZmZpY2lhbGx5IGV4dGVybmFsKS4iIE9OKQpAQCAtMTEsMTMgKzMyLDcgQEAKICAgICBzZXQoX1NZTUJPTF9FWFRFUk4gIl9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoXCJkZWZhdWx0XCIpKSkiKQogICAgIHNldChfQ0ZMQUdfU1lNQk9MU19ISURFICItZnZpc2liaWxpdHk9aGlkZGVuIikKICAgZWxzZWlmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDKQotICAgIGlmKE5PVCBDTUFLRV9WRVJTSU9OIFZFUlNJT05fTEVTUyAyLjguMTApCi0gICAgICBzZXQoR0NDX1ZFUlNJT04gJHtDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT059KQotICAgIGVsc2UoKQotICAgICAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DX0NPTVBJTEVSfSAtZHVtcHZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgR0NDX1ZFUlNJT04pCi0gICAgZW5kaWYoKQotICAgIGlmKE5PVCBHQ0NfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy40KQorICAgIGlmKE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuNCkKICAgICAgICMgbm90ZTogdGhpcyBpcyBjb25zaWRlcmVkIGJ1Z2d5IHByaW9yIHRvIDQuMCBidXQgdGhlIGF1dG90b29scyBkb24ndCBjYXJlLCBzbyBsZXQncyBpZ25vcmUgdGhhdCBmYWN0CiAgICAgICBzZXQoU1VQUE9SVFNfU1lNQk9MX0hJRElORyBUUlVFKQogICAgICAgc2V0KF9TWU1CT0xfRVhURVJOICJfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18gKFwiZGVmYXVsdFwiKSkpIikKQEAgLTI5LDcgKzQ0LDcgQEAKICAgICBzZXQoX0NGTEFHX1NZTUJPTFNfSElERSAiLXhsZHNjb3BlPWhpZGRlbiIpCiAgIGVsc2VpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIkludGVsIiBBTkQgTk9UIENNQUtFX0NfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgOS4wKQogICAgICMgbm90ZTogdGhpcyBzaG91bGQgcHJvYmFibHkganVzdCBjaGVjayBmb3IgdmVyc2lvbiA5LjEuMDQ1IGJ1dCBJJ20gbm90IDEwMCUgc3VyZQotICAgICMgICAgICAgc28gbGV0J3MgdG8gaXQgdGhlIHNhbWUgd2F5IGF1dG90b29scyBkby4KKyAgICAjICAgICAgIHNvIGxldCdzIGRvIGl0IHRoZSBzYW1lIHdheSBhdXRvdG9vbHMgZG8uCiAgICAgc2V0KFNVUFBPUlRTX1NZTUJPTF9ISURJTkcgVFJVRSkKICAgICBzZXQoX1NZTUJPTF9FWFRFUk4gIl9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoXCJkZWZhdWx0XCIpKSkiKQogICAgIHNldChfQ0ZMQUdfU1lNQk9MU19ISURFICItZnZpc2liaWxpdHk9aGlkZGVuIikKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ3VybFRlc3RzLmMgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0N1cmxUZXN0cy5jCmluZGV4IDA3YjUxNmIuLjNlZjM1ZjAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvQ3VybFRlc3RzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9DdXJsVGVzdHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTI1LDYgKzEyNSw3IEBACiAjaWYgICBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZQUREUl9SXzUpIHx8IFwKICAgICAgIGRlZmluZWQoSEFWRV9HRVRIT1NUQllBRERSX1JfNV9SRUVOVFJBTlQpCiAgIHJjID0gZ2V0aG9zdGJ5YWRkcl9yKGFkZHJlc3MsIGxlbmd0aCwgdHlwZSwgJmgsICZoZGF0YSk7CisgICh2b2lkKXJjOwogI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWUFERFJfUl83KSB8fCBcCiAgICAgICBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZQUREUl9SXzdfUkVFTlRSQU5UKQogICBocCA9IGdldGhvc3RieWFkZHJfcihhZGRyZXNzLCBsZW5ndGgsIHR5cGUsICZoLCBidWZmZXIsIDgxOTIsICZoX2Vycm5vcCk7CkBAIC0xMzIsNiArMTMzLDcgQEAKICNlbGlmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllBRERSX1JfOCkgfHwgXAogICAgICAgZGVmaW5lZChIQVZFX0dFVEhPU1RCWUFERFJfUl84X1JFRU5UUkFOVCkKICAgcmMgPSBnZXRob3N0YnlhZGRyX3IoYWRkcmVzcywgbGVuZ3RoLCB0eXBlLCAmaCwgYnVmZmVyLCA4MTkyLCAmaHAsICZoX2Vycm5vcCk7CisgICh2b2lkKXJjOwogI2VuZGlmCiAKICNpZiAgIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1JfMykgfHwgXApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQmVhclNTTC5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZEJlYXJTU0wuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmNzJjOQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZEJlYXJTU0wuY21ha2UKQEAgLTAsMCArMSwzMCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmluZF9wYXRoKEJFQVJTU0xfSU5DTFVERV9ESVJTIGJlYXJzc2wuaCkKKworZmluZF9saWJyYXJ5KEJFQVJTU0xfTElCUkFSWSBiZWFyc3NsKQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKEJFQVJTU0wgREVGQVVMVF9NU0cKKyAgICBCRUFSU1NMX0lOQ0xVREVfRElSUyBCRUFSU1NMX0xJQlJBUlkpCisKK21hcmtfYXNfYWR2YW5jZWQoQkVBUlNTTF9JTkNMVURFX0RJUlMgQkVBUlNTTF9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQnJvdGxpLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQnJvdGxpLmNtYWtlCmluZGV4IDM1MWI4ZjcuLmM0MzE3MmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZEJyb3RsaS5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRCcm90bGkuY21ha2UKQEAgLTEsMyArMSwyNCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKIAogZmluZF9wYXRoKEJST1RMSV9JTkNMVURFX0RJUiAiYnJvdGxpL2RlY29kZS5oIikKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZENBUkVTLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQ0FSRVMuY21ha2UKaW5kZXggNzIzMDQ0YS4uOTE2MGFlNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQ0FSRVMuY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kQ0FSRVMuY21ha2UKQEAgLTEsMyArMSwyNCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyAtIEZpbmQgYy1hcmVzCiAjIEZpbmQgdGhlIGMtYXJlcyBpbmNsdWRlcyBhbmQgbGlicmFyeQogIyBUaGlzIG1vZHVsZSBkZWZpbmVzCkBAIC03LDM0ICsyOCwxNiBAQAogIyBhbHNvIGRlZmluZWQsIGJ1dCBub3QgZm9yIGdlbmVyYWwgdXNlIGFyZQogIyBDQVJFU19MSUJSQVJZLCB3aGVyZSB0byBmaW5kIHRoZSBjLWFyZXMgbGlicmFyeS4KIAotZmluZF9wYXRoKENBUkVTX0lOQ0xVREVfRElSIGFyZXMuaAotICAvdXNyL2xvY2FsL2luY2x1ZGUKLSAgL3Vzci9pbmNsdWRlCi0gICkKK2ZpbmRfcGF0aChDQVJFU19JTkNMVURFX0RJUiBhcmVzLmgpCiAKIHNldChDQVJFU19OQU1FUyAke0NBUkVTX05BTUVTfSBjYXJlcykKIGZpbmRfbGlicmFyeShDQVJFU19MSUJSQVJZCiAgIE5BTUVTICR7Q0FSRVNfTkFNRVN9Ci0gIFBBVEhTIC91c3IvbGliIC91c3IvbG9jYWwvbGliCiAgICkKIAotaWYoQ0FSRVNfTElCUkFSWSBBTkQgQ0FSRVNfSU5DTFVERV9ESVIpCi0gIHNldChDQVJFU19MSUJSQVJJRVMgJHtDQVJFU19MSUJSQVJZfSkKLSAgc2V0KENBUkVTX0ZPVU5EICJZRVMiKQotZWxzZSgpCi0gIHNldChDQVJFU19GT1VORCAiTk8iKQotZW5kaWYoKQotCi0KLWlmKENBUkVTX0ZPVU5EKQotICBpZihOT1QgQ0FSRVNfRklORF9RVUlFVExZKQotICAgIG1lc3NhZ2UoU1RBVFVTICJGb3VuZCBjLWFyZXM6ICR7Q0FSRVNfTElCUkFSSUVTfSIpCi0gIGVuZGlmKCkKLWVsc2UoKQotICBpZihDQVJFU19GSU5EX1JFUVVJUkVEKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIGMtYXJlcyBsaWJyYXJ5IikKLSAgZW5kaWYoKQotZW5kaWYoKQoraW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhDQVJFUworICAgIFJFUVVJUkVEX1ZBUlMgQ0FSRVNfTElCUkFSWSBDQVJFU19JTkNMVURFX0RJUikKIAogbWFya19hc19hZHZhbmNlZCgKICAgQ0FSRVNfTElCUkFSWQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kR1NTLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kR1NTLmNtYWtlCmluZGV4IDhhMjhmMmYuLjAyMTExYTIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZEdTUy5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRHU1MuY21ha2UKQEAgLTEsMyArMSwyNCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyAtIFRyeSB0byBmaW5kIHRoZSBHU1MgS2VyYmVyb3MgbGlicmFyeQogIyBPbmNlIGRvbmUgdGhpcyB3aWxsIGRlZmluZQogIwpAQCAtNjIsNiArODMsNyBAQAogICAgICAgICAgIENPTU1BTkQgJHtfR1NTX0NPTkZJR1VSRV9TQ1JJUFR9ICItLWNmbGFncyIgImdzc2FwaSIKICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX0dTU19DRkxBR1MKICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX0dTU19DT05GSUdVUkVfRkFJTEVECisgICAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKICAgICAgICkKICAgICBtZXNzYWdlKFNUQVRVUyAiQ0ZMQUdTOiAke19HU1NfQ0ZMQUdTfSIpCiAgICAgaWYoTk9UIF9HU1NfQ09ORklHVVJFX0ZBSUxFRCkgIyAwIG1lYW5zIHN1Y2Nlc3MKQEAgLTg0LDYgKzEwNiw3IEBACiAgICAgICAgIENPTU1BTkQgJHtfR1NTX0NPTkZJR1VSRV9TQ1JJUFR9ICItLWxpYnMiICJnc3NhcGkiCiAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfR1NTX0xJQl9GTEFHUwogICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX0dTU19DT05GSUdVUkVfRkFJTEVECisgICAgICAgIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFCiAgICAgKQogICAgIG1lc3NhZ2UoU1RBVFVTICJMREZMQUdTOiAke19HU1NfTElCX0ZMQUdTfSIpCiAKQEAgLTExMCw2ICsxMzMsNyBAQAogICAgICAgICBDT01NQU5EICR7X0dTU19DT05GSUdVUkVfU0NSSVBUfSAiLS12ZXJzaW9uIgogICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX0dTU19WRVJTSU9OCiAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfR1NTX0NPTkZJR1VSRV9GQUlMRUQKKyAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKICAgICApCiAKICAgICAjIG9sZGVyIHZlcnNpb25zIG1heSBub3QgaGF2ZSB0aGUgIi0tdmVyc2lvbiIgcGFyYW1ldGVyLiBJbiB0aGlzIGNhc2Ugd2UganVzdCBkb24ndCBjYXJlLgpAQCAtMTIxLDYgKzE0NSw3IEBACiAgICAgICAgIENPTU1BTkQgJHtfR1NTX0NPTkZJR1VSRV9TQ1JJUFR9ICItLXZlbmRvciIKICAgICAgICAgT1VUUFVUX1ZBUklBQkxFIF9HU1NfVkVORE9SCiAgICAgICAgIFJFU1VMVF9WQVJJQUJMRSBfR1NTX0NPTkZJR1VSRV9GQUlMRUQKKyAgICAgICAgT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dISVRFU1BBQ0UKICAgICApCiAKICAgICAjIG9sZGVyIHZlcnNpb25zIG1heSBub3QgaGF2ZSB0aGUgIi0tdmVuZG9yIiBwYXJhbWV0ZXIuIEluIHRoaXMgY2FzZSB3ZSBqdXN0IGRvbid0IGNhcmUuCkBAIC0xMzQsNyArMTU5LDcgQEAKICAgICAgIGVuZGlmKCkKICAgICBlbmRpZigpCiAKLSAgZWxzZSgpICMgZWl0aGVyIHRoZXJlIGlzIG5vIGNvbmZpZyBzY3JpcHQgb3Igd2UgYXJlIG9uIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBwcm92aWRlIG9uZSAoV2luZG93cz8pCisgIGVsc2UoKSAjIGVpdGhlciB0aGVyZSBpcyBubyBjb25maWcgc2NyaXB0IG9yIHdlIGFyZSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBwcm92aWRlIG9uZSAoV2luZG93cz8pCiAKICAgICBmaW5kX3BhdGgoX0dTU19JTkNMVURFX0RJUgogICAgICAgICBOQU1FUwpAQCAtMTY0LDcgKzE4OSw3IEBACiAgICAgICAgIHNldChDTUFLRV9SRVFVSVJFRF9ERUZJTklUSU9OUyAiIikKICAgICAgIGVuZGlmKCkKICAgICBlbHNlKCkKLSAgICAgICMgSSdtIG5vdCBjb252aWVuY2VkIGlmIHRoaXMgaXMgdGhlIHJpZ2h0IHdheSBidXQgdGhpcyBpcyB3aGF0IGF1dG90b29scyBkbyBhdCB0aGUgbW9tZW50CisgICAgICAjIEknbSBub3QgY29udmluY2VkIGlmIHRoaXMgaXMgdGhlIHJpZ2h0IHdheSBidXQgdGhpcyBpcyB3aGF0IGF1dG90b29scyBkbyBhdCB0aGUgbW9tZW50CiAgICAgICBmaW5kX3BhdGgoX0dTU19JTkNMVURFX0RJUgogICAgICAgICAgIE5BTUVTCiAgICAgICAgICAgICAgICJnc3NhcGkuaCIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZExpYlNTSDIuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRMaWJTU0gyLmNtYWtlCmluZGV4IDg0ODIyZGIuLjRjZGYzZTMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZExpYlNTSDIuY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTGliU1NIMi5jbWFrZQpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIC0gVHJ5IHRvIGZpbmQgdGhlIGxpYnNzaDIgbGlicmFyeQogIyBPbmNlIGRvbmUgdGhpcyB3aWxsIGRlZmluZQogIwpAQCAtNSwzMSArMjYsMTggQEAKICMgTElCU1NIMl9JTkNMVURFX0RJUiAtIHRoZSBsaWJzc2gyIGluY2x1ZGUgZGlyZWN0b3J5CiAjIExJQlNTSDJfTElCUkFSWSAtIHRoZSBsaWJzc2gyIGxpYnJhcnkgbmFtZQogCi1pZihMSUJTU0gyX0lOQ0xVREVfRElSIEFORCBMSUJTU0gyX0xJQlJBUlkpCi0gIHNldChMaWJTU0gyX0ZJTkRfUVVJRVRMWSBUUlVFKQotZW5kaWYoKQorZmluZF9wYXRoKExJQlNTSDJfSU5DTFVERV9ESVIgbGlic3NoMi5oKQogCi1maW5kX3BhdGgoTElCU1NIMl9JTkNMVURFX0RJUiBsaWJzc2gyLmgKLSkKLQotZmluZF9saWJyYXJ5KExJQlNTSDJfTElCUkFSWSBOQU1FUyBzc2gyCi0pCitmaW5kX2xpYnJhcnkoTElCU1NIMl9MSUJSQVJZIE5BTUVTIHNzaDIgbGlic3NoMikKIAogaWYoTElCU1NIMl9JTkNMVURFX0RJUikKLSAgZmlsZShTVFJJTkdTICIke0xJQlNTSDJfSU5DTFVERV9ESVJ9L2xpYnNzaDIuaCIgbGlic3NoMl92ZXJzaW9uX3N0ciBSRUdFWCAiXiNkZWZpbmVbXHQgXStMSUJTU0gyX1ZFUlNJT05fTlVNW1x0IF0rMHhbMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV0uKiIpCi0KLSAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4uKkxJQlNTSDJfVkVSU0lPTl9OVU1bXHQgXSsweChbMC05XVswLTldKS4qJCIgIlxcMSIgTElCU1NIMl9WRVJTSU9OX01BSk9SICIke2xpYnNzaDJfdmVyc2lvbl9zdHJ9IikKLSAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4uKkxJQlNTSDJfVkVSU0lPTl9OVU1bXHQgXSsweFswLTldWzAtOV0oWzAtOV1bMC05XSkuKiQiICJcXDEiIExJQlNTSDJfVkVSU0lPTl9NSU5PUiAgIiR7bGlic3NoMl92ZXJzaW9uX3N0cn0iKQotICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi4qTElCU1NIMl9WRVJTSU9OX05VTVtcdCBdKzB4WzAtOV1bMC05XVswLTldWzAtOV0oWzAtOV1bMC05XSkuKiQiICJcXDEiIExJQlNTSDJfVkVSU0lPTl9QQVRDSCAiJHtsaWJzc2gyX3ZlcnNpb25fc3RyfSIpCi0KLSAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4wKC4rKSIgIlxcMSIgTElCU1NIMl9WRVJTSU9OX01BSk9SICIke0xJQlNTSDJfVkVSU0lPTl9NQUpPUn0iKQotICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXjAoLispIiAiXFwxIiBMSUJTU0gyX1ZFUlNJT05fTUlOT1IgIiR7TElCU1NIMl9WRVJTSU9OX01JTk9SfSIpCi0gIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeMCguKykiICJcXDEiIExJQlNTSDJfVkVSU0lPTl9QQVRDSCAiJHtMSUJTU0gyX1ZFUlNJT05fUEFUQ0h9IikKLQotICBzZXQoTElCU1NIMl9WRVJTSU9OICIke0xJQlNTSDJfVkVSU0lPTl9NQUpPUn0uJHtMSUJTU0gyX1ZFUlNJT05fTUlOT1J9LiR7TElCU1NIMl9WRVJTSU9OX1BBVENIfSIpCisgIGZpbGUoU1RSSU5HUyAiJHtMSUJTU0gyX0lOQ0xVREVfRElSfS9saWJzc2gyLmgiIGxpYnNzaDJfdmVyc2lvbl9zdHIgUkVHRVggIl4jZGVmaW5lW1x0IF0rTElCU1NIMl9WRVJTSU9OW1x0IF0rXCIoLiopXCIiKQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi4qXCIoW15cIl0rKVwiIiAiXFwxIiAgTElCU1NIMl9WRVJTSU9OICIke2xpYnNzaDJfdmVyc2lvbl9zdHJ9IikKIGVuZGlmKCkKIAogaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKLWZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhMaWJTU0gyIERFRkFVTFRfTVNHIExJQlNTSDJfSU5DTFVERV9ESVIgTElCU1NIMl9MSUJSQVJZICkKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhMaWJTU0gyCisgICAgUkVRVUlSRURfVkFSUyBMSUJTU0gyX0xJQlJBUlkgTElCU1NIMl9JTkNMVURFX0RJUgorICAgIFZFUlNJT05fVkFSIExJQlNTSDJfVkVSU0lPTikKIAotbWFya19hc19hZHZhbmNlZChMSUJTU0gyX0lOQ0xVREVfRElSIExJQlNTSDJfTElCUkFSWSBMSUJTU0gyX1ZFUlNJT05fTUFKT1IgTElCU1NIMl9WRVJTSU9OX01JTk9SIExJQlNTSDJfVkVSU0lPTl9QQVRDSCBMSUJTU0gyX1ZFUlNJT04pCittYXJrX2FzX2FkdmFuY2VkKExJQlNTSDJfSU5DTFVERV9ESVIgTElCU1NIMl9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTWJlZFRMUy5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE1iZWRUTFMuY21ha2UKaW5kZXggYTkxNjM5NS4uMmViZTcyMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTWJlZFRMUy5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRNYmVkVExTLmNtYWtlCkBAIC0xLDMgKzEsMjQgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGZpbmRfcGF0aChNQkVEVExTX0lOQ0xVREVfRElSUyBtYmVkdGxzL3NzbC5oKQogCiBmaW5kX2xpYnJhcnkoTUJFRFRMU19MSUJSQVJZIG1iZWR0bHMpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROR0hUVFAyLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTkdIVFRQMi5jbWFrZQppbmRleCAzNDhiOTYxLi5lMWViYTA1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROR0hUVFAyLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5HSFRUUDIuY21ha2UKQEAgLTEsMyArMSwyNCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKIAogZmluZF9wYXRoKE5HSFRUUDJfSU5DTFVERV9ESVIgIm5naHR0cDIvbmdodHRwMi5oIikKQEAgLTEwLDkgKzMxLDkgQEAKICAgICBSRVFVSVJFRF9WQVJTCiAgICAgICBOR0hUVFAyX0xJQlJBUlkKICAgICAgIE5HSFRUUDJfSU5DTFVERV9ESVIKLSAgICBGQUlMX01FU1NBR0UKLSAgICAgICJDb3VsZCBOT1QgZmluZCBOR0hUVFAyIgogKQogCiBzZXQoTkdIVFRQMl9JTkNMVURFX0RJUlMgJHtOR0hUVFAyX0lOQ0xVREVfRElSfSkKIHNldChOR0hUVFAyX0xJQlJBUklFUyAke05HSFRUUDJfTElCUkFSWX0pCisKK21hcmtfYXNfYWR2YW5jZWQoTkdIVFRQMl9JTkNMVURFX0RJUlMgTkdIVFRQMl9MSUJSQVJJRVMpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROR0hUVFAzLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTkdIVFRQMy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2NlOWUxCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTkdIVFRQMy5jbWFrZQpAQCAtMCwwICsxLDc2IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyNbPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1bLnJzdDoKK0ZpbmROR0hUVFAzCistLS0tLS0tLS0tCisKK0ZpbmQgdGhlIG5naHR0cDMgbGlicmFyeQorCitSZXN1bHQgVmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl5eCisKK2BgTkdIVFRQM19GT1VORGBgCisgIFN5c3RlbSBoYXMgbmdodHRwMworYGBOR0hUVFAzX0lOQ0xVREVfRElSU2BgCisgIFRoZSBuZ2h0dHAzIGluY2x1ZGUgZGlyZWN0b3JpZXMuCitgYE5HSFRUUDNfTElCUkFSSUVTYGAKKyAgVGhlIGxpYnJhcmllcyBuZWVkZWQgdG8gdXNlIG5naHR0cDMKK2BgTkdIVFRQM19WRVJTSU9OYGAKKyAgdmVyc2lvbiBvZiBuZ2h0dHAzLgorI109PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0KKworaWYoVU5JWCkKKyAgZmluZF9wYWNrYWdlKFBrZ0NvbmZpZyBRVUlFVCkKKyAgcGtnX3NlYXJjaF9tb2R1bGUoUENfTkdIVFRQMyBsaWJuZ2h0dHAzKQorZW5kaWYoKQorCitmaW5kX3BhdGgoTkdIVFRQM19JTkNMVURFX0RJUiBuZ2h0dHAzL25naHR0cDMuaAorICBISU5UUworICAgICR7UENfTkdIVFRQM19JTkNMVURFRElSfQorICAgICR7UENfTkdIVFRQM19JTkNMVURFX0RJUlN9CispCisKK2ZpbmRfbGlicmFyeShOR0hUVFAzX0xJQlJBUlkgTkFNRVMgbmdodHRwMworICBISU5UUworICAgICR7UENfTkdIVFRQM19MSUJESVJ9CisgICAgJHtQQ19OR0hUVFAzX0xJQlJBUllfRElSU30KKykKKworaWYoUENfTkdIVFRQM19WRVJTSU9OKQorICBzZXQoTkdIVFRQM19WRVJTSU9OICR7UENfTkdIVFRQM19WRVJTSU9OfSkKK2VuZGlmKCkKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhOR0hUVFAzCisgIFJFUVVJUkVEX1ZBUlMKKyAgICBOR0hUVFAzX0xJQlJBUlkKKyAgICBOR0hUVFAzX0lOQ0xVREVfRElSCisgIFZFUlNJT05fVkFSIE5HSFRUUDNfVkVSU0lPTgorKQorCitpZihOR0hUVFAzX0ZPVU5EKQorICBzZXQoTkdIVFRQM19MSUJSQVJJRVMgICAgJHtOR0hUVFAzX0xJQlJBUll9KQorICBzZXQoTkdIVFRQM19JTkNMVURFX0RJUlMgJHtOR0hUVFAzX0lOQ0xVREVfRElSfSkKK2VuZGlmKCkKKworbWFya19hc19hZHZhbmNlZChOR0hUVFAzX0lOQ0xVREVfRElSUyBOR0hUVFAzX0xJQlJBUklFUykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5HVENQMi5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5HVENQMi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWVkOGNkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kTkdUQ1AyLmNtYWtlCkBAIC0wLDAgKzEsMTEzIEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyNbPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1bLnJzdDoKK0ZpbmROR1RDUDIKKy0tLS0tLS0tLS0KKworRmluZCB0aGUgbmd0Y3AyIGxpYnJhcnkKKworVGhpcyBtb2R1bGUgYWNjZXB0cyBvcHRpb25hbCBDT01QT05FTlRTIHRvIGNvbnRyb2wgdGhlIGNyeXB0byBsaWJyYXJ5ICh0aGVzZSBhcmUKK211dHVhbGx5IGV4Y2x1c2l2ZSk6OgorCisgIE9wZW5TU0w6ICBVc2UgbGlibmd0Y3AyX2NyeXB0b19vcGVuc3NsCisgIEdudVRMUzogICBVc2UgbGlibmd0Y3AyX2NyeXB0b19nbnV0bHMKKworUmVzdWx0IFZhcmlhYmxlcworXl5eXl5eXl5eXl5eXl5eXgorCitgYE5HVENQMl9GT1VORGBgCisgIFN5c3RlbSBoYXMgbmd0Y3AyCitgYE5HVENQMl9JTkNMVURFX0RJUlNgYAorICBUaGUgbmd0Y3AyIGluY2x1ZGUgZGlyZWN0b3JpZXMuCitgYE5HVENQMl9MSUJSQVJJRVNgYAorICBUaGUgbGlicmFyaWVzIG5lZWRlZCB0byB1c2Ugbmd0Y3AyCitgYE5HVENQMl9WRVJTSU9OYGAKKyAgdmVyc2lvbiBvZiBuZ3RjcDIuCisjXT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XQorCitpZihVTklYKQorICBmaW5kX3BhY2thZ2UoUGtnQ29uZmlnIFFVSUVUKQorICBwa2dfc2VhcmNoX21vZHVsZShQQ19OR1RDUDIgbGlibmd0Y3AyKQorZW5kaWYoKQorCitmaW5kX3BhdGgoTkdUQ1AyX0lOQ0xVREVfRElSIG5ndGNwMi9uZ3RjcDIuaAorICBISU5UUworICAgICR7UENfTkdUQ1AyX0lOQ0xVREVESVJ9CisgICAgJHtQQ19OR1RDUDJfSU5DTFVERV9ESVJTfQorKQorCitmaW5kX2xpYnJhcnkoTkdUQ1AyX0xJQlJBUlkgTkFNRVMgbmd0Y3AyCisgIEhJTlRTCisgICAgJHtQQ19OR1RDUDJfTElCRElSfQorICAgICR7UENfTkdUQ1AyX0xJQlJBUllfRElSU30KKykKKworaWYoUENfTkdUQ1AyX1ZFUlNJT04pCisgIHNldChOR1RDUDJfVkVSU0lPTiAke1BDX05HVENQMl9WRVJTSU9OfSkKK2VuZGlmKCkKKworaWYoTkdUQ1AyX0ZJTkRfQ09NUE9ORU5UUykKKyAgc2V0KE5HVENQMl9DUllQVE9fQkFDS0VORCAiIikKKyAgZm9yZWFjaChjb21wb25lbnQgSU4gTElTVFMgTkdUQ1AyX0ZJTkRfQ09NUE9ORU5UUykKKyAgICBpZihjb21wb25lbnQgTUFUQ0hFUyAiXihPcGVuU1NMfEdudVRMUykiKQorICAgICAgaWYoTkdUQ1AyX0NSWVBUT19CQUNLRU5EKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJOR1RDUDI6IE9ubHkgb25lIGNyeXB0byBsaWJyYXJ5IGNhbiBiZSBzZWxlY3RlZCIpCisgICAgICBlbmRpZigpCisgICAgICBzZXQoTkdUQ1AyX0NSWVBUT19CQUNLRU5EICR7Y29tcG9uZW50fSkKKyAgICBlbmRpZigpCisgIGVuZGZvcmVhY2goKQorCisgIGlmKE5HVENQMl9DUllQVE9fQkFDS0VORCkKKyAgICBzdHJpbmcoVE9MT1dFUiAibmd0Y3AyX2NyeXB0b18ke05HVENQMl9DUllQVE9fQkFDS0VORH0iIF9jcnlwdG9fbGlicmFyeSkKKyAgICBpZihVTklYKQorICAgICAgcGtnX3NlYXJjaF9tb2R1bGUoUENfJHtfY3J5cHRvX2xpYnJhcnl9IGxpYiR7X2NyeXB0b19saWJyYXJ5fSkKKyAgICBlbmRpZigpCisgICAgZmluZF9saWJyYXJ5KCR7X2NyeXB0b19saWJyYXJ5fV9MSUJSQVJZCisgICAgICBOQU1FUworICAgICAgICAke19jcnlwdG9fbGlicmFyeX0KKyAgICAgIEhJTlRTCisgICAgICAgICR7UENfJHtfY3J5cHRvX2xpYnJhcnl9X0xJQkRJUn0KKyAgICAgICAgJHtQQ18ke19jcnlwdG9fbGlicmFyeX1fTElCUkFSWV9ESVJTfQorICAgICkKKyAgICBpZigke19jcnlwdG9fbGlicmFyeX1fTElCUkFSWSkKKyAgICAgIHNldChOR1RDUDJfJHtOR1RDUDJfQ1JZUFRPX0JBQ0tFTkR9X0ZPVU5EIFRSVUUpCisgICAgICBzZXQoTkdUQ1AyX0NSWVBUT19MSUJSQVJZICR7JHtfY3J5cHRvX2xpYnJhcnl9X0xJQlJBUll9KQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorZW5kaWYoKQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE5HVENQMgorICBSRVFVSVJFRF9WQVJTCisgICAgTkdUQ1AyX0xJQlJBUlkKKyAgICBOR1RDUDJfSU5DTFVERV9ESVIKKyAgVkVSU0lPTl9WQVIgTkdUQ1AyX1ZFUlNJT04KKyAgSEFORExFX0NPTVBPTkVOVFMKKykKKworaWYoTkdUQ1AyX0ZPVU5EKQorICBzZXQoTkdUQ1AyX0xJQlJBUklFUyAgICAke05HVENQMl9MSUJSQVJZfSAke05HVENQMl9DUllQVE9fTElCUkFSWX0pCisgIHNldChOR1RDUDJfSU5DTFVERV9ESVJTICR7TkdUQ1AyX0lOQ0xVREVfRElSfSkKK2VuZGlmKCkKKworbWFya19hc19hZHZhbmNlZChOR1RDUDJfSU5DTFVERV9ESVJTIE5HVENQMl9MSUJSQVJJRVMpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROU1MuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmROU1MuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkYjJiNwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZE5TUy5jbWFrZQpAQCAtMCwwICsxLDM4IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZihVTklYKQorICBmaW5kX3BhY2thZ2UoUGtnQ29uZmlnIFFVSUVUKQorICBwa2dfc2VhcmNoX21vZHVsZShQQ19OU1MgbnNzKQorZW5kaWYoKQoraWYoTk9UIFBDX05TU19GT1VORCkKKyAgcmV0dXJuKCkKK2VuZGlmKCkKKworc2V0KE5TU19MSUJSQVJJRVMgJHtQQ19OU1NfTElOS19MSUJSQVJJRVN9KQorc2V0KE5TU19JTkNMVURFX0RJUlMgJHtQQ19OU1NfSU5DTFVERV9ESVJTfSkKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhOU1MKKyAgICBSRVFVSVJFRF9WQVJTIE5TU19MSUJSQVJJRVMgTlNTX0lOQ0xVREVfRElSUworICAgIFZFUlNJT05fVkFSIFBDX05TU19WRVJTSU9OKQorCittYXJrX2FzX2FkdmFuY2VkKE5TU19JTkNMVURFX0RJUlMgTlNTX0xJQlJBUklFUykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZFFVSUNIRS5jbWFrZSBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZFFVSUNIRS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQxNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9GaW5kUVVJQ0hFLmNtYWtlCkBAIC0wLDAgKzEsNjggQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI1s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVsucnN0OgorRmluZFFVSUNIRQorLS0tLS0tLS0tLQorCitGaW5kIHRoZSBxdWljaGUgbGlicmFyeQorCitSZXN1bHQgVmFyaWFibGVzCiteXl5eXl5eXl5eXl5eXl5eCisKK2BgUVVJQ0hFX0ZPVU5EYGAKKyAgU3lzdGVtIGhhcyBxdWljaGUKK2BgUVVJQ0hFX0lOQ0xVREVfRElSU2BgCisgIFRoZSBxdWljaGUgaW5jbHVkZSBkaXJlY3Rvcmllcy4KK2BgUVVJQ0hFX0xJQlJBUklFU2BgCisgIFRoZSBsaWJyYXJpZXMgbmVlZGVkIHRvIHVzZSBxdWljaGUKKyNdPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dCitpZihVTklYKQorICBmaW5kX3BhY2thZ2UoUGtnQ29uZmlnIFFVSUVUKQorICBwa2dfc2VhcmNoX21vZHVsZShQQ19RVUlDSEUgcXVpY2hlKQorZW5kaWYoKQorCitmaW5kX3BhdGgoUVVJQ0hFX0lOQ0xVREVfRElSIHF1aWNoZS5oCisgIEhJTlRTCisgICAgJHtQQ19RVUlDSEVfSU5DTFVERURJUn0KKyAgICAke1BDX1FVSUNIRV9JTkNMVURFX0RJUlN9CispCisKK2ZpbmRfbGlicmFyeShRVUlDSEVfTElCUkFSWSBOQU1FUyBxdWljaGUKKyAgSElOVFMKKyAgICAke1BDX1FVSUNIRV9MSUJESVJ9CisgICAgJHtQQ19RVUlDSEVfTElCUkFSWV9ESVJTfQorKQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKFFVSUNIRQorICBSRVFVSVJFRF9WQVJTCisgICAgUVVJQ0hFX0xJQlJBUlkKKyAgICBRVUlDSEVfSU5DTFVERV9ESVIKKykKKworaWYoUVVJQ0hFX0ZPVU5EKQorICBzZXQoUVVJQ0hFX0xJQlJBUklFUyAgICAke1FVSUNIRV9MSUJSQVJZfSkKKyAgc2V0KFFVSUNIRV9JTkNMVURFX0RJUlMgJHtRVUlDSEVfSU5DTFVERV9ESVJ9KQorZW5kaWYoKQorCittYXJrX2FzX2FkdmFuY2VkKFFVSUNIRV9JTkNMVURFX0RJUlMgUVVJQ0hFX0xJQlJBUklFUykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvRmluZFdvbGZTU0wuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRXb2xmU1NMLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGYxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL0ZpbmRXb2xmU1NMLmNtYWtlCkBAIC0wLDAgKzEsMzQgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZpbmRfcGF0aChXb2xmU1NMX0lOQ0xVREVfRElSIE5BTUVTIHdvbGZzc2wvc3NsLmgpCitmaW5kX2xpYnJhcnkoV29sZlNTTF9MSUJSQVJZIE5BTUVTIHdvbGZzc2wpCittYXJrX2FzX2FkdmFuY2VkKFdvbGZTU0xfSU5DTFVERV9ESVIgV29sZlNTTF9MSUJSQVJZKQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKFdvbGZTU0wKKyAgUkVRVUlSRURfVkFSUyBXb2xmU1NMX0lOQ0xVREVfRElSIFdvbGZTU0xfTElCUkFSWQorICApCisKK2lmKFdvbGZTU0xfRk9VTkQpCisgIHNldChXb2xmU1NMX0lOQ0xVREVfRElSUyAke1dvbGZTU0xfSU5DTFVERV9ESVJ9KQorICBzZXQoV29sZlNTTF9MSUJSQVJJRVMgJHtXb2xmU1NMX0xJQlJBUll9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9NYWNyb3MuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL01hY3Jvcy5jbWFrZQppbmRleCA3ZjcxMzQ1Li42NWE0MWU0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL01hY3Jvcy5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL01hY3Jvcy5jbWFrZQpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjRmlsZSBkZWZpbmVzIGNvbnZlbmllbmNlIG1hY3JvcyBmb3IgYXZhaWxhYmxlIGZlYXR1cmUgdGVzdGluZwogCiAjIFRoaXMgbWFjcm8gY2hlY2tzIGlmIHRoZSBzeW1ib2wgZXhpc3RzIGluIHRoZSBsaWJyYXJ5IGFuZCBpZiBpdApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9PdGhlclRlc3RzLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9PdGhlclRlc3RzLmNtYWtlCmluZGV4IGMxYzlhYTMuLjhjOWE0OTEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvT3RoZXJUZXN0cy5jbWFrZQorKysgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL090aGVyVGVzdHMuY21ha2UKQEAgLTEsMyArMSwyNCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogaW5jbHVkZShDaGVja0NTb3VyY2VDb21waWxlcykKICMgVGhlIGJlZ2luIG9mIHRoZSBzb3VyY2VzIChtYWNyb3MgYW5kIGluY2x1ZGVzKQogc2V0KF9zb3VyY2VfZXBpbG9ndWUgIiN1bmRlZiBpbmxpbmUiKQpAQCAtMjYsMTMgKzQ3LDIwIEBACiAKIHNldChDTUFLRV9UUllfQ09NUElMRV9UQVJHRVRfVFlQRSBTVEFUSUNfTElCUkFSWSkKIAoraWYoMSkgIyBDTWFrZSBoYXJkLWNvZGVzIHRoZXNlCisgIHNldChSRUNWX1RZUEVfQVJHMSAiY3VybF9zb2NrZXRfdCIpCisgIHNldChSRUNWX1RZUEVfQVJHMiAiY2hhciAqIikKKyAgc2V0KFJFQ1ZfVFlQRV9BUkczICJzaXplX3QiKQorICBzZXQoUkVDVl9UWVBFX0FSRzQgImludCIpCisgIHNldChSRUNWX1RZUEVfUkVUViAic3NpemVfdCIpCitlbHNlKCkKIGNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIke19zb3VyY2VfZXBpbG9ndWV9CiBpbnQgbWFpbih2b2lkKSB7CiAgICAgcmVjdigwLCAwLCAwLCAwKTsKICAgICByZXR1cm4gMDsKIH0iIGN1cmxfY3ZfcmVjdikKIGlmKGN1cmxfY3ZfcmVjdikKLSAgaWYoTk9UIERFRklORUQgY3VybF9jdl9mdW5jX3JlY3ZfYXJncyBPUiAiJHtjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzfSIgU1RSRVFVQUwgInVua25vd24iKQorICBpZihOT1QgREVGSU5FRCBjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzIE9SIGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MgU1RSRVFVQUwgInVua25vd24iKQogICAgIGZvcmVhY2gocmVjdl9yZXR2ICJpbnQiICJzc2l6ZV90IiApCiAgICAgICBmb3JlYWNoKHJlY3ZfYXJnMSAiU09DS0VUIiAiaW50IiApCiAgICAgICAgIGZvcmVhY2gocmVjdl9hcmcyICJjaGFyICoiICJ2b2lkICoiICkKQEAgLTQyLDYgKzcwLDkgQEAKICAgICAgICAgICAgICAgICB1bnNldChjdXJsX2N2X2Z1bmNfcmVjdl90ZXN0IENBQ0hFKQogICAgICAgICAgICAgICAgIGNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIKICAgICAgICAgICAgICAgICAgICR7X3NvdXJjZV9lcGlsb2d1ZX0KKyAgICAgICAgICAgICAgICAgICNpZmRlZiBXSU5TT0NLX0FQSV9MSU5LQUdFCisgICAgICAgICAgICAgICAgICBXSU5TT0NLX0FQSV9MSU5LQUdFCisgICAgICAgICAgICAgICAgICAjZW5kaWYKICAgICAgICAgICAgICAgICAgIGV4dGVybiAke3JlY3ZfcmV0dn0gJHtzaWduYXR1cmVfY2FsbF9jb252fQogICAgICAgICAgICAgICAgICAgcmVjdigke3JlY3ZfYXJnMX0sICR7cmVjdl9hcmcyfSwgJHtyZWN2X2FyZzN9LCAke3JlY3ZfYXJnNH0pOwogICAgICAgICAgICAgICAgICAgaW50IG1haW4odm9pZCkgewpAQCAtODEsMTUgKzExMiwyNCBAQAogICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeW14sXSosW14sXSosW14sXSosW14sXSosKFteLF0qKSQiICJcXDEiIFJFQ1ZfVFlQRV9SRVRWICIke2N1cmxfY3ZfZnVuY19yZWN2X2FyZ3N9IikKICAgZW5kaWYoKQogCi0gIGlmKCIke2N1cmxfY3ZfZnVuY19yZWN2X2FyZ3N9IiBTVFJFUVVBTCAidW5rbm93biIpCisgIGlmKGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MgU1RSRVFVQUwgInVua25vd24iKQogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIHJlY3YgYXJncyIpCiAgIGVuZGlmKCkKIGVsc2UoKQogICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmFibGUgdG8gbGluayBmdW5jdGlvbiByZWN2IikKIGVuZGlmKCkKIHNldChjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzICIke2N1cmxfY3ZfZnVuY19yZWN2X2FyZ3N9IiBDQUNIRSBJTlRFUk5BTCAiQXJndW1lbnRzIGZvciByZWN2IikKK2VuZGlmKCkKIHNldChIQVZFX1JFQ1YgMSkKIAoraWYoMSkgIyBDTWFrZSBoYXJkLWNvZGVzIHRoZXNlCisgIHNldChTRU5EX1FVQUxfQVJHMiAiICIpCisgIHNldChTRU5EX1RZUEVfQVJHMSAiY3VybF9zb2NrZXRfdCIpCisgIHNldChTRU5EX1RZUEVfQVJHMiAiY2hhciAqIikKKyAgc2V0KFNFTkRfVFlQRV9BUkczICJzaXplX3QiKQorICBzZXQoU0VORF9UWVBFX0FSRzQgImludCIpCisgIHNldChTRU5EX1RZUEVfUkVUViAic3NpemVfdCIpCitlbHNlKCkKIGNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIke19zb3VyY2VfZXBpbG9ndWV9CiBpbnQgbWFpbih2b2lkKSB7CiAgICAgc2VuZCgwLCAwLCAwLCAwKTsKQEAgLTEwNiw2ICsxNDYsOSBAQAogICAgICAgICAgICAgICAgIHVuc2V0KGN1cmxfY3ZfZnVuY19zZW5kX3Rlc3QgQ0FDSEUpCiAgICAgICAgICAgICAgICAgY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoIgogICAgICAgICAgICAgICAgICAgJHtfc291cmNlX2VwaWxvZ3VlfQorICAgICAgICAgICAgICAgICAgI2lmZGVmIFdJTlNPQ0tfQVBJX0xJTktBR0UKKyAgICAgICAgICAgICAgICAgIFdJTlNPQ0tfQVBJX0xJTktBR0UKKyAgICAgICAgICAgICAgICAgICNlbmRpZgogICAgICAgICAgICAgICAgICAgZXh0ZXJuICR7c2VuZF9yZXR2fSAke3NpZ25hdHVyZV9jYWxsX2NvbnZ9CiAgICAgICAgICAgICAgICAgICBzZW5kKCR7c2VuZF9hcmcxfSwgJHtzZW5kX2FyZzJ9LCAke3NlbmRfYXJnM30sICR7c2VuZF9hcmc0fSk7CiAgICAgICAgICAgICAgICAgICBpbnQgbWFpbih2b2lkKSB7CkBAIC0xNTYsNiArMTk5LDcgQEAKICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiVW5hYmxlIHRvIGxpbmsgZnVuY3Rpb24gc2VuZCIpCiBlbmRpZigpCiBzZXQoY3VybF9jdl9mdW5jX3NlbmRfYXJncyAiJHtjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzfSIgQ0FDSEUgSU5URVJOQUwgIkFyZ3VtZW50cyBmb3Igc2VuZCIpCitlbmRpZigpCiBzZXQoSEFWRV9TRU5EIDEpCiAKIGNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIke19zb3VyY2VfZXBpbG9ndWV9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL1BsYXRmb3Jtcy9XaW5kb3dzQ2FjaGUuY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL1BsYXRmb3Jtcy9XaW5kb3dzQ2FjaGUuY21ha2UKaW5kZXggMmRiZTFiYi4uN2MwMjBiZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9QbGF0Zm9ybXMvV2luZG93c0NhY2hlLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvUGxhdGZvcm1zL1dpbmRvd3NDYWNoZS5jbWFrZQpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpZihOT1QgVU5JWCkKICAgaWYoV0lOMzIpCiAgICAgc2V0KEhBVkVfTElCREwgMCkKQEAgLTcsNyArMjgsNiBAQAogICAgIHNldChIQVZFX0xJQk5TTCAwKQogICAgIHNldChIQVZFX0dFVEhPU1ROQU1FIDEpCiAgICAgc2V0KEhBVkVfTElCWiAwKQotICAgIHNldChIQVZFX0xJQkNSWVBUTyAwKQogCiAgICAgc2V0KEhBVkVfRExPUEVOIDApCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvVXRpbGl0aWVzLmNtYWtlIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9VdGlsaXRpZXMuY21ha2UKaW5kZXggNWNiMWQ0NC4uNTliMTdkMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9VdGlsaXRpZXMuY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9VdGlsaXRpZXMuY21ha2UKQEAgLTEsMTMgKzEsMzMgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgRmlsZSBjb250YWluaW5nIHZhcmlvdXMgdXRpbGl0aWVzCiAKICMgUmV0dXJucyBhIGxpc3Qgb2YgYXJndW1lbnRzIHRoYXQgZXZhbHVhdGUgdG8gdHJ1ZQogZnVuY3Rpb24oY291bnRfdHJ1ZSBvdXRwdXRfY291bnRfdmFyKQotICBzZXQobHN0KQorICBzZXQobHN0X2xlbiAwKQogICBmb3JlYWNoKG9wdGlvbl92YXIgSU4gTElTVFMgQVJHTikKICAgICBpZigke29wdGlvbl92YXJ9KQotICAgICAgbGlzdChBUFBFTkQgbHN0ICR7b3B0aW9uX3Zhcn0pCisgICAgICBtYXRoKEVYUFIgbHN0X2xlbiAiJHtsc3RfbGVufSArIDEiKQogICAgIGVuZGlmKCkKICAgZW5kZm9yZWFjaCgpCi0gIGxpc3QoTEVOR1RIIGxzdCBsc3RfbGVuKQogICBzZXQoJHtvdXRwdXRfY291bnRfdmFyfSAke2xzdF9sZW59IFBBUkVOVF9TQ09QRSkKIGVuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvY21ha2VfdW5pbnN0YWxsLmNtYWtlLmluIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KaW5kZXggZGI4ZTUzNi4uNzRlNTZhMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KQEAgLTEsMyArMSwyNCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogaWYoTk9UIEVYSVNUUyAiQENNQUtFX0NVUlJFTlRfQklOQVJZX0RJUkAvaW5zdGFsbF9tYW5pZmVzdC50eHQiKQogICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDYW5ub3QgZmluZCBpbnN0YWxsIG1hbmlmZXN0OiBAQ01BS0VfQ1VSUkVOVF9CSU5BUllfRElSQC9pbnN0YWxsX21hbmlmZXN0LnR4dCIpCiBlbmRpZigpCkBAIC0xMyw3ICszNCw3IEBACiAgIG1lc3NhZ2UoU1RBVFVTICJVbmluc3RhbGxpbmcgJEVOVntERVNURElSfSR7ZmlsZX0iKQogICBpZihJU19TWU1MSU5LICIkRU5We0RFU1RESVJ9JHtmaWxlfSIgT1IgRVhJU1RTICIkRU5We0RFU1RESVJ9JHtmaWxlfSIpCiAgICAgZXhlY19wcm9ncmFtKAotICAgICAgIkBDTUFLRV9DT01NQU5EQCIgQVJHUyAiLUUgcmVtb3ZlIFwiJEVOVntERVNURElSfSR7ZmlsZX1cIiIKKyAgICAgICJAQ01BS0VfQ09NTUFOREAiIEFSR1MgIi1FIHJtIC1mIFwiJEVOVntERVNURElSfSR7ZmlsZX1cIiIKICAgICAgIE9VVFBVVF9WQVJJQUJMRSBybV9vdXQKICAgICAgIFJFVFVSTl9WQUxVRSBybV9yZXR2YWwKICAgICAgICkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvY3VybC1jb25maWcuY21ha2UuaW4gYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlL2N1cmwtY29uZmlnLmNtYWtlLmluCmluZGV4IDEyOTRlMTcuLmFlOGNjMzAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2UvY3VybC1jb25maWcuY21ha2UuaW4KKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZS9jdXJsLWNvbmZpZy5jbWFrZS5pbgpAQCAtMSwzICsxLDI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBAUEFDS0FHRV9JTklUQAogCiBpbmNsdWRlKENNYWtlRmluZERlcGVuZGVuY3lNYWNybykKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvY21jdXJsL0NNYWtlTGlzdHMudHh0CmluZGV4IGJjOGE3ZGMuLmQzMjdmNTUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9DTWFrZUxpc3RzLnR4dApAQCAtNSw2ICs1LDcgQEAKIHNldChCVUlMRF9TSEFSRURfTElCUyBPRkYgQ0FDSEUgSU5URVJOQUwgIkJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiKQogc2V0KENNQUtFX1VTRV9HU1NBUEkgT0ZGIENBQ0hFIElOVEVSTkFMICJEaXNhYmxlIGN1cmwgZ3NzYXBpIikKIHNldChDTUFLRV9VU0VfTElCU1NIMiBPRkYgQ0FDSEUgSU5URVJOQUwgIkRpc2FibGUgY3VybCBsaWJzc2gyIikKK3NldChDTUFLRV9VU0VfTElCU1NIIE9GRikKIHNldChDTUFLRV9VU0VfT1BFTkxEQVAgT0ZGIENBQ0hFIElOVEVSTkFMICJObyBjdXJsIE9wZW5MREFQIikKIHNldChDVVJMX0RJU0FCTEVfQ09PS0lFUyBPRkYgQ0FDSEUgSU5URVJOQUwgIkRvIG5vdCBkaXNhYmxlIGN1cmwgY29va2llIHN1cHBvcnQiKQogc2V0KENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCBPRkYgQ0FDSEUgSU5URVJOQUwgIkRvIG5vdCBkaXNhYmxlIGN1cmwgY3J5cHRvIGF1dGgiKQpAQCAtMjMsMTggKzI0LDI2IEBACiBzZXQoQ1VSTF9ESVNBQkxFX1RFTE5FVCBPTiBDQUNIRSBJTlRFUk5BTCAiRGlzYWJsZSBjdXJsIHRlbG5ldCBwcm90b2NvbD8iKQogc2V0KENVUkxfRElTQUJMRV9URlRQIE9OIENBQ0hFIElOVEVSTkFMICJEaXNhYmxlIGN1cmwgdGZ0cCBwcm90b2NvbD8iKQogc2V0KENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MgT0ZGIENBQ0hFIElOVEVSTkFMICJEbyBub3QgZGlzYWJsZSBjdXJsIHZlcmJvc2l0eSIpCitzZXQoQ1VSTF9FTkFCTEVfTVFUVCBPRkYpCiBzZXQoQ1VSTF9ISURERU5fU1lNQk9MUyBPRkYgQ0FDSEUgSU5URVJOQUwgIk5vIGN1cmwgaGlkZGVuIHN5bWJvbHMiKQorc2V0KENVUkxfTFRPIE9GRiBDQUNIRSBJTlRFUk5BTCAiVHVybiBvbiBjb21waWxlciBMaW5rIFRpbWUgT3B0aW1pemF0aW9ucyIpCitzZXQoQ1VSTF9TVEFUSUNfQ1JUIE9GRiBDQUNIRSBJTlRFUk5BTCAiU2V0IHRvIE9OIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBzdGF0aWMgQ1JUIG9uIFdpbmRvd3MgKC9NVCkuIikKIHNldChDVVJMX1dFUlJPUiBPRkYgQ0FDSEUgSU5URVJOQUwgIlR1cm4gY29tcGlsZXIgd2FybmluZ3MgaW50byBlcnJvcnMiKQogc2V0KERJU0FCTEVEX1RIUkVBRFNBRkUgT0ZGIENBQ0hFIElOVEVSTkFMICJDdXJsIGNhbiB1c2UgdGhyZWFkLXNhZmUgZnVuY3Rpb25zIikKIHNldChFTkFCTEVfQVJFUyBPRkYgQ0FDSEUgSU5URVJOQUwgIk5vIGN1cmwgYy1hcmVzIHN1cHBvcnQiKQorc2V0KEVOQUJMRV9BTFRfU1ZDIE9GRikKIHNldChFTkFCTEVfQ1VSTERFQlVHIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBUcmFja01lbW9yeSBmZWF0dXJlcyIpCiBzZXQoRU5BQkxFX0RFQlVHIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBkZWJ1ZyBmZWF0dXJlcyIpCitzZXQoRU5BQkxFX0lORVRfUFRPTiBPRkYgQ0FDSEUgSU5URVJOQUwgIlNldCB0byBPRkYgdG8gcHJldmVudCB1c2FnZSBvZiBpbmV0X3B0b24gd2hlbiBidWlsZGluZyBhZ2FpbnN0IG1vZGVybiBTREtzIHdoaWxlIHN0aWxsIHJlcXVpcmluZyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgV2luZG93cyB2ZXJzaW9ucywgc3VjaCBhcyBXaW5kb3dzIFhQLCBXaW5kb3dzIFNlcnZlciAyMDAzIGV0Yy4iKQogc2V0KEVOQUJMRV9JUFY2IE9OIENBQ0hFIElOVEVSTkFMICJFbmFibGUgY3VybCBJUHY2IHN1cHBvcnQgZGV0ZWN0aW9uIikKIHNldChFTkFCTEVfTUFOVUFMIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBidWlsdC1pbiBtYW51YWwiKQogc2V0KEVOQUJMRV9USFJFQURFRF9SRVNPTFZFUiBPRkYgQ0FDSEUgSU5URVJOQUwgIk5vIGN1cmwgUE9TSVggdGhyZWFkZWQgRE5TIGxvb2t1cCIpCiBzZXQoRU5BQkxFX1VOSVhfU09DS0VUUyBPRkYgQ0FDSEUgSU5URVJOQUwgIk5vIGN1cmwgVW5peCBkb21haW4gc29ja2V0cyBzdXBwb3J0IikKIHNldChIVFRQX09OTFkgT0ZGIENBQ0hFIElOVEVSTkFMICJDdXJsIGlzIG5vdCBodHRwLW9ubHkiKQogc2V0KFBJQ0tZX0NPTVBJTEVSIE9GRiBDQUNIRSBJTlRFUk5BTCAiRW5hYmxlIHBpY2t5IGNvbXBpbGVyIG9wdGlvbnMiKQorc2V0KFVTRV9OR0hUVFAyIE9OKQorc2V0KFVTRV9OR1RDUDIgT0ZGKQorc2V0KFVTRV9RVUlDSEUgT0ZGKQogc2V0KFVTRV9XSU4zMl9MREFQIE9GRiBDQUNIRSBJTlRFUk5BTCAiTm8gY3VybCBXaW5kb3dzIExEQVAiKQogaWYoQ01BS0VfVVNFX09QRU5TU0wpCiBlbHNlaWYoV0lOMzIpCkBAIC02MCw2ICs2OSw5IEBACiAgIHVuc2V0KENNQUtFX1VTRV9EQVJXSU5TU0wgQ0FDSEUpCiBlbmRpZigpCiBzZXQoQ01BS0VfVVNFX01CRURUTFMgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgbWJlZFRMUyBmb3IgU1NML1RMUyIpCitzZXQoQ01BS0VfVVNFX0JFQVJTU0wgT0ZGIENBQ0hFIElOVEVSTkFMICJFbmFibGUgQmVhclNTTCBmb3IgU1NML1RMUyIpCitzZXQoQ01BS0VfVVNFX05TUyBPRkYgQ0FDSEUgSU5URVJOQUwgIkVuYWJsZSBOU1MgZm9yIFNTTC9UTFMiKQorc2V0KENNQUtFX1VTRV9XT0xGU1NMIE9GRikKIAogIyBXaW5kb3dzIFZpc3RhIGFuZCBhYm92ZSBoYXZlIGluZXRfcHRvbiwgYnV0IHRoaXMgd2lsbCBsaW5rIG9uCiAjIG9sZGVyIHZlcnNpb25zIGFuZCB0aGVuIHRoZSBleGVjdXRhYmxlIHdpbGwgZmFpbCB0byBsYXVuY2ggYXQKQEAgLTkxLDcgKzEwMyw3IEBACiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogIwotIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogIwogIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMTIsNyArMTI0LDYgQEAKICMgVGhlIG91dHB1dCAuc28gZmlsZSBsYWNrcyB0aGUgc29uYW1lIG51bWJlciB3aGljaCB3ZSBjdXJyZW50bHkgaGF2ZSB3aXRoaW4gdGhlIGxpYi9NYWtlZmlsZS5hbSBmaWxlCiAjIEFkZCBmdWxsICg0IG9yIDUgbGlicykgU1NMIHN1cHBvcnQKICMgQWRkIElOU1RBTEwgdGFyZ2V0IChFWFRSQV9ESVNUIHZhcmlhYmxlcyBpbiBNYWtlZmlsZS5hbSBtYXkgYmUgbW92ZWQgdG8gTWFrZWZpbGUuaW5jIHNvIHRoYXQgQ01ha2UvQ1BhY2sgaXMgYXdhcmUgb2Ygd2hhdCdzIHRvIGluY2x1ZGUpLgotIyBBZGQgQ1Rlc3RzKD8pCiAjIENoZWNrIG9uIGFsbCBwb3NzaWJsZSBwbGF0Zm9ybXMKICMgVGVzdCB3aXRoIGFzIG1hbnkgY29uZmlndXJhdGlvbnMgcG9zc2libGUgKFdpdGggb3Igd2l0aG91dCBhbnkgb3B0aW9uKQogIyBDcmVhdGUgc2NyaXB0cyB0aGF0IGhlbHAga2VlcGluZyB0aGUgQ01ha2UgYnVpbGQgc3lzdGVtIHVwIHRvIGRhdGUgKHRvIHJlZHVjZSBtYWludGVuYW5jZSkuIEFjY29yZGluZyB0byBUZXRldGVzdDoKQEAgLTEzNiw3ICsxNDcsNyBAQAogbWVzc2FnZShXQVJOSU5HICJ0aGUgY3VybCBjbWFrZSBidWlsZCBzeXN0ZW0gaXMgcG9vcmx5IG1haW50YWluZWQuIEJlIGF3YXJlIikKIGVuZGlmKCkKIAotZmlsZShSRUFEICR7Q1VSTF9TT1VSQ0VfRElSfS9pbmNsdWRlL2N1cmwvY3VybHZlci5oIENVUkxfVkVSU0lPTl9IX0NPTlRFTlRTKQorZmlsZShTVFJJTkdTICR7Q1VSTF9TT1VSQ0VfRElSfS9pbmNsdWRlL2N1cmwvY3VybHZlci5oIENVUkxfVkVSU0lPTl9IX0NPTlRFTlRTIFJFR0VYICIjZGVmaW5lIExJQkNVUkxfVkVSU0lPTiggfF9OVU0gKSIpCiBzdHJpbmcoUkVHRVggTUFUQ0ggIiNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OIFwiW15cIl0qIgogICBDVVJMX1ZFUlNJT04gJHtDVVJMX1ZFUlNJT05fSF9DT05URU5UU30pCiBzdHJpbmcoUkVHRVggUkVQTEFDRSAiW15cIl0rXCIiICIiIENVUkxfVkVSU0lPTiAke0NVUkxfVkVSU0lPTn0pCkBAIC0xNjgsNyArMTc5LDIwIEBACiBpZihXSU4zMikKICAgb3B0aW9uKENVUkxfU1RBVElDX0NSVCAiU2V0IHRvIE9OIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBzdGF0aWMgQ1JUIG9uIFdpbmRvd3MgKC9NVCkuIiBPRkYpCiAgIG9wdGlvbihFTkFCTEVfSU5FVF9QVE9OICJTZXQgdG8gT0ZGIHRvIHByZXZlbnQgdXNhZ2Ugb2YgaW5ldF9wdG9uIHdoZW4gYnVpbGRpbmcgYWdhaW5zdCBtb2Rlcm4gU0RLcyB3aGlsZSBzdGlsbCByZXF1aXJpbmcgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIFdpbmRvd3MgdmVyc2lvbnMsIHN1Y2ggYXMgV2luZG93cyBYUCwgV2luZG93cyBTZXJ2ZXIgMjAwMyBldGMuIiBPTikKKyAgaWYoMCkgIyBUaGlzIGNvZGUgbm90IG5lZWRlZCBmb3IgYnVpbGRpbmcgd2l0aGluIENNYWtlLgorICBzZXQoQ1VSTF9UQVJHRVRfV0lORE9XU19WRVJTSU9OICIiIENBQ0hFIFNUUklORyAiTWluaW11bSB0YXJnZXQgV2luZG93cyB2ZXJzaW9uIGFzIGhleCBzdHJpbmciKQorICBpZihDVVJMX1RBUkdFVF9XSU5ET1dTX1ZFUlNJT04pCisgICAgYWRkX2RlZmluaXRpb25zKC1EX1dJTjMyX1dJTk5UPSR7Q1VSTF9UQVJHRVRfV0lORE9XU19WRVJTSU9OfSkKKyAgZWxzZWlmKEVOQUJMRV9JTkVUX1BUT04pCisgICAgIyBfV0lOMzJfV0lOTlRfVklTVEEgKDB4MDYwMCkKKyAgICBhZGRfZGVmaW5pdGlvbnMoLURfV0lOMzJfV0lOTlQ9MHgwNjAwKQorICBlbHNlKCkKKyAgICAjIF9XSU4zMl9XSU5OVF9XSU5YUCAoMHgwNTAxKQorICAgIGFkZF9kZWZpbml0aW9ucygtRF9XSU4zMl9XSU5OVD0weDA1MDEpCisgIGVuZGlmKCkKKyAgZW5kaWYoKQogZW5kaWYoKQorb3B0aW9uKENVUkxfTFRPICJUdXJuIG9uIGNvbXBpbGVyIExpbmsgVGltZSBPcHRpbWl6YXRpb25zIiBPRkYpCiAKIGlmKDApICMgVGhpcyBjb2RlIG5vdCBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGhpbiBDTWFrZS4KIGNtYWtlX2RlcGVuZGVudF9vcHRpb24oRU5BQkxFX1RIUkVBREVEX1JFU09MVkVSICJTZXQgdG8gT04gdG8gZW5hYmxlIHRocmVhZGVkIEROUyBsb29rdXAiCkBAIC0xODQsOCArMjA4LDkgQEAKICAgICBmb3JlYWNoKF9DQ09QVCAtcGVkYW50aWMgLVdhbGwgLVcgLVdwb2ludGVyLWFyaXRoIC1Xd3JpdGUtc3RyaW5ncyAtV3VudXNlZCAtV3NoYWRvdyAtV2lubGluZSAtV25lc3RlZC1leHRlcm5zIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVdmbG9hdC1lcXVhbCAtV25vLW11bHRpY2hhciAtV3NpZ24tY29tcGFyZSAtV3VuZGVmIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwgLVdlbmRpZi1sYWJlbHMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV3N0cmljdC1hbGlhc2luZz0zIC1XY2FzdC1hbGlnbiAtV3R5cGUtbGltaXRzIC1Xb2xkLXN0eWxlLWRlY2xhcmF0aW9uIC1XbWlzc2luZy1wYXJhbWV0ZXItdHlwZSAtV2VtcHR5LWJvZHkgLVdjbG9iYmVyZWQgLVdpZ25vcmVkLXF1YWxpZmllcnMgLVdjb252ZXJzaW9uIC1Xbm8tc2lnbi1jb252ZXJzaW9uIC1XdmxhIC1XZG91YmxlLXByb21vdGlvbiAtV25vLXN5c3RlbS1oZWFkZXJzIC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0KQogICAgICAgIyBzdXJwcmlzaW5nbHksIENIRUNLX0NfQ09NUElMRVJfRkxBRyBuZWVkcyBhIG5ldyB2YXJpYWJsZSB0byBzdG9yZSBlYWNoIG5ldwogICAgICAgIyB0ZXN0IHJlc3VsdCBpbi4KLSAgICAgIGNoZWNrX2NfY29tcGlsZXJfZmxhZygke19DQ09QVH0gT1BUJHtfQ0NPUFR9KQotICAgICAgaWYoT1BUJHtfQ0NPUFR9KQorICAgICAgc3RyaW5nKE1BS0VfQ19JREVOVElGSUVSICJPUFQke19DQ09QVH0iIF9vcHR2YXJuYW1lKQorICAgICAgY2hlY2tfY19jb21waWxlcl9mbGFnKCR7X0NDT1BUfSAke19vcHR2YXJuYW1lfSkKKyAgICAgIGlmKCR7X29wdHZhcm5hbWV9KQogICAgICAgICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAke19DQ09QVH0iKQogICAgICAgZW5kaWYoKQogICAgIGVuZGZvcmVhY2goKQpAQCAtMjE2LDcgKzI0MSw2IEBACiAgIHNldChVU0VfQVJFUyAxKQogICBmaW5kX3BhY2thZ2UoQ0FSRVMgUkVRVUlSRUQpCiAgIGxpc3QoQVBQRU5EIENVUkxfTElCUyAke0NBUkVTX0xJQlJBUll9KQotICBzZXQoQ1VSTF9MSUJTICR7Q1VSTF9MSUJTfSAke0NBUkVTX0xJQlJBUll9KQogZW5kaWYoKQogCiBpZigwKSAjIFRoaXMgY29kZSBub3QgbmVlZGVkIGZvciBidWlsZGluZyB3aXRoaW4gQ01ha2UuCkBAIC0yNTUsNiArMjc5LDggQEAKIG1hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX1NNVFApCiBvcHRpb24oQ1VSTF9ESVNBQkxFX0dPUEhFUiAidG8gZGlzYWJsZSBHb3BoZXIiIE9GRikKIG1hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX0dPUEhFUikKK29wdGlvbihDVVJMX0VOQUJMRV9NUVRUICJ0byBlbmFibGUgTVFUVCIgT0ZGKQorbWFya19hc19hZHZhbmNlZChDVVJMX0VOQUJMRV9NUVRUKQogCiBpZihIVFRQX09OTFkpCiAgIHNldChDVVJMX0RJU0FCTEVfRlRQIE9OKQpAQCAtMjY3LDYgKzI5Myw3IEBACiAgIHNldChDVVJMX0RJU0FCTEVfUlRTUCBPTikKICAgc2V0KENVUkxfRElTQUJMRV9QT1AzIE9OKQogICBzZXQoQ1VSTF9ESVNBQkxFX0lNQVAgT04pCisgIHNldChDVVJMX0RJU0FCTEVfU01CIE9OKQogICBzZXQoQ1VSTF9ESVNBQkxFX1NNVFAgT04pCiAgIHNldChDVVJMX0RJU0FCTEVfR09QSEVSIE9OKQogZW5kaWYoKQpAQCAtMzAzLDEwICszMzAsNiBAQAogICAgIE9OICJOUk9GRl9VU0VGVUw7UEVSTF9GT1VORCIKICAgICBPRkYpCiAKLWlmKE5PVCBQRVJMX0ZPVU5EKQotICBtZXNzYWdlKFNUQVRVUyAiUGVybCBub3QgZm91bmQsIHRlc3RpbmcgZGlzYWJsZWQuIikKLSAgc2V0KEJVSUxEX1RFU1RJTkcgT0ZGKQotZW5kaWYoKQogaWYoRU5BQkxFX01BTlVBTCkKICAgc2V0KFVTRV9NQU5VQUwgT04pCiBlbmRpZigpCkBAIC0zMTcsNiArMzQwLDcgQEAKIHNldChDTUFLRV9SRVFVSVJFRF9GTEFHUyAke0NNQUtFX0FOU0lfQ0ZMQUdTfSkKIAogaWYoQ1VSTF9TVEFUSUNfQ1JUKQorICBzZXQoQ01BS0VfTVNWQ19SVU5USU1FX0xJQlJBUlkgIk11bHRpVGhyZWFkZWQkPCQ8Q09ORklHOkRlYnVnPjpEZWJ1Zz4iKQogICBzZXQoQ01BS0VfQ19GTEFHU19SRUxFQVNFICIke0NNQUtFX0NfRkxBR1NfUkVMRUFTRX0gL01UIikKICAgc2V0KENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL01UZCIpCiBlbmRpZigpCkBAIC0zMzIsNiArMzU2LDcgQEAKIGVuZGlmKCkKIAogIyBJbmNsdWRlIGFsbCB0aGUgbmVjZXNzYXJ5IGZpbGVzIGZvciBtYWNyb3MKK2luY2x1ZGUoQ01ha2VQdXNoQ2hlY2tTdGF0ZSkKIGluY2x1ZGUoQ2hlY2tGdW5jdGlvbkV4aXN0cykKIGluY2x1ZGUoQ2hlY2tJbmNsdWRlRmlsZSkKIGluY2x1ZGUoQ2hlY2tJbmNsdWRlRmlsZXMpCkBAIC0zNTksNyArMzg0LDcgQEAKIAogIyBDaGVjayBmb3IgYWxsIG5lZWRlZCBsaWJyYXJpZXMKIGlmKDApICMgVGhpcyBjb2RlIG5vdCBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGhpbiBDTWFrZS4KLWNoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgiZGwiICAgICBkbG9wZW4gICAgICAgSEFWRV9MSUJETCkKK2NoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgiJHtDTUFLRV9ETF9MSUJTfSIgZGxvcGVuIEhBVkVfTElCREwpCiBlbHNlKCkKICAgIyBVc2UgdGhlIGNtYWtlLWRlZmluZWQgZGwgbGlicyBhcyBkbCBpcyBzaG91bGQgbm90IGJlIHVzZWQKICAgIyBvbiBIUFVYLCBidXQgcmF0aGVyIGRsZCB0aGlzIGF2b2lkcyBhIHdhcm5pbmcKQEAgLTM5MCw3ICs0MTUsNyBAQAogZW5kaWYoKQogCiAjIGNoZWNrIFNTTCBsaWJyYXJpZXMKLSMgVE9ETyBzdXBwb3J0IEdOVVRMUywgTlNTLCBQT0xBUlNTTCwgQ1lBU1NMCisjIFRPRE8gc3VwcG9ydCBHbnVUTFMKIAogaWYoQVBQTEUpCiAgIG9wdGlvbihDTUFLRV9VU0VfU0VDVFJBTlNQICJlbmFibGUgQXBwbGUgT1MgbmF0aXZlIFNTTC9UTFMiIE9GRikKQEAgLTQwMSw5ICs0MjYsMTIgQEAKICAgICBDTUFLRV9VU0VfV0lOU1NMIE9GRikKIGVuZGlmKCkKIG9wdGlvbihDTUFLRV9VU0VfTUJFRFRMUyAiRW5hYmxlIG1iZWRUTFMgZm9yIFNTTC9UTFMiIE9GRikKK29wdGlvbihDTUFLRV9VU0VfQkVBUlNTTCAiRW5hYmxlIEJlYXJTU0wgZm9yIFNTTC9UTFMiIE9GRikKK29wdGlvbihDTUFLRV9VU0VfTlNTICJFbmFibGUgTlNTIGZvciBTU0wvVExTIiBPRkYpCitvcHRpb24oQ01BS0VfVVNFX1dPTEZTU0wgImVuYWJsZSB3b2xmU1NMIGZvciBTU0wvVExTIiBPRkYpCiAKIHNldChvcGVuc3NsX2RlZmF1bHQgT04pCi1pZihXSU4zMiBPUiBDTUFLRV9VU0VfU0VDVFJBTlNQIE9SIENNQUtFX1VTRV9XSU5TU0wgT1IgQ01BS0VfVVNFX01CRURUTFMpCitpZihXSU4zMiBPUiBDTUFLRV9VU0VfU0VDVFJBTlNQIE9SIENNQUtFX1VTRV9XSU5TU0wgT1IgQ01BS0VfVVNFX01CRURUTFMgT1IgQ01BS0VfVVNFX05TUyBPUiBDTUFLRV9VU0VfV09MRlNTTCkKICAgc2V0KG9wZW5zc2xfZGVmYXVsdCBPRkYpCiBlbmRpZigpCiAKQEAgLTQxMiw2ICs0NDAsOSBAQAogICBDTUFLRV9VU0VfU0VDVFJBTlNQCiAgIENNQUtFX1VTRV9PUEVOU1NMCiAgIENNQUtFX1VTRV9NQkVEVExTCisgIENNQUtFX1VTRV9CRUFSU1NMCisgIENNQUtFX1VTRV9OU1MKKyAgQ01BS0VfVVNFX1dPTEZTU0wKICkKIGlmKGVuYWJsZWRfc3NsX29wdGlvbnNfY291bnQgR1JFQVRFUiAiMSIpCiAgIHNldChDVVJMX1dJVEhfTVVMVElfU1NMIE9OKQpAQCAtNDU3LDggKzQ4OCw2IEBACiAgIGVuZGlmKCkKICAgc2V0KFNTTF9FTkFCTEVEIE9OKQogICBzZXQoVVNFX09QRU5TU0wgT04pCi0gIHNldChIQVZFX0xJQkNSWVBUTyBPTikKLSAgc2V0KEhBVkVfTElCU1NMIE9OKQogICBsaXN0KEFQUEVORCBDVVJMX0xJQlMgJHtPUEVOU1NMX0xJQlJBUklFU30pCiAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtPUEVOU1NMX0lOQ0xVREVfRElSfSkKIApAQCAtNDkyLDYgKzUyMSwzNSBAQAogICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7TUJFRFRMU19JTkNMVURFX0RJUlN9KQogZW5kaWYoKQogCitpZihDTUFLRV9VU0VfQkVBUlNTTCkKKyAgZmluZF9wYWNrYWdlKEJlYXJTU0wgUkVRVUlSRUQpCisgIHNldChTU0xfRU5BQkxFRCBPTikKKyAgc2V0KFVTRV9CRUFSU1NMIE9OKQorICBsaXN0KEFQUEVORCBDVVJMX0xJQlMgJHtCRUFSU1NMX0xJQlJBUll9KQorICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7QkVBUlNTTF9JTkNMVURFX0RJUlN9KQorZW5kaWYoKQorCitpZihDTUFLRV9VU0VfV09MRlNTTCkKKyAgZmluZF9wYWNrYWdlKFdvbGZTU0wgUkVRVUlSRUQpCisgIHNldChTU0xfRU5BQkxFRCBPTikKKyAgc2V0KFVTRV9XT0xGU1NMIE9OKQorICBsaXN0KEFQUEVORCBDVVJMX0xJQlMgJHtXb2xmU1NMX0xJQlJBUklFU30pCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtXb2xmU1NMX0lOQ0xVREVfRElSU30pCitlbmRpZigpCisKK2lmKENNQUtFX1VTRV9OU1MpCisgIGZpbmRfcGFja2FnZShOU1MgUkVRVUlSRUQpCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtOU1NfSU5DTFVERV9ESVJTfSkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TlNTX0xJQlJBUklFU30pCisgIHNldChTU0xfRU5BQkxFRCBPTikKKyAgc2V0KFVTRV9OU1MgT04pCisgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQorICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtOU1NfSU5DTFVERV9ESVJTfSkKKyAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke05TU19MSUJSQVJJRVN9KQorICBjaGVja19zeW1ib2xfZXhpc3RzKFBLMTFfQ3JlYXRlTWFuYWdlZEdlbmVyaWNPYmplY3QgInBrMTFwdWIuaCIgSEFWRV9QSzExX0NSRUFURU1BTkFHRURHRU5FUklDT0JKRUNUKQorICBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQorZW5kaWYoKQorCiBvcHRpb24oVVNFX05HSFRUUDIgIlVzZSBOZ2h0dHAyIGxpYnJhcnkiIE9GRikKIGlmKFVTRV9OR0hUVFAyKQogICBmaW5kX3BhY2thZ2UoTkdIVFRQMiBSRVFVSVJFRCkKQEAgLTQ5OSw2ICs1NTcsNjAgQEAKICAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TkdIVFRQMl9MSUJSQVJJRVN9KQogZW5kaWYoKQogCitmdW5jdGlvbihDaGVja1F1aWNTdXBwb3J0SW5PcGVuU1NMKQorICAjIEJlIHN1cmUgdGhhdCB0aGUgT3BlblNTTCBsaWJyYXJ5IGFjdHVhbGx5IHN1cHBvcnRzIFFVSUMuCisgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQorICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgICAiJHtPUEVOU1NMX0lOQ0xVREVfRElSfSIpCisgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgICIke09QRU5TU0xfTElCUkFSSUVTfSIpCisgIGNoZWNrX3N5bWJvbF9leGlzdHMoU1NMX0NUWF9zZXRfcXVpY19tZXRob2QgIm9wZW5zc2wvc3NsLmgiIEhBVkVfU1NMX0NUWF9TRVRfUVVJQ19NRVRIT0QpCisgIGlmKE5PVCBIQVZFX1NTTF9DVFhfU0VUX1FVSUNfTUVUSE9EKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlFVSUMgc3VwcG9ydCBpcyBtaXNzaW5nIGluIE9wZW5TU0wvYm9yaW5nc3NsLiBUcnkgc2V0dGluZyAtRE9QRU5TU0xfUk9PVF9ESVIiKQorICBlbmRpZigpCisgIGNtYWtlX3BvcF9jaGVja19zdGF0ZSgpCitlbmRmdW5jdGlvbigpCisKK29wdGlvbihVU0VfTkdUQ1AyICJVc2Ugbmd0Y3AyIGFuZCBuZ2h0dHAzIGxpYnJhcmllcyBmb3IgSFRUUC8zIHN1cHBvcnQiIE9GRikKK2lmKFVTRV9OR1RDUDIpCisgIGlmKFVTRV9PUEVOU1NMKQorICAgIGZpbmRfcGFja2FnZShOR1RDUDIgUkVRVUlSRUQgT3BlblNTTCkKKyAgICBDaGVja1F1aWNTdXBwb3J0SW5PcGVuU1NMKCkKKyAgZWxzZWlmKFVTRV9HTlVUTFMpCisgICAgIyBUT0RPIGFkZCBHbnVUTFMgc3VwcG9ydCBhcyB2dGxzIGxpYnJhcnkuCisgICAgZmluZF9wYWNrYWdlKE5HVENQMiBSRVFVSVJFRCBHbnVUTFMpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIm5ndGNwMiByZXF1aXJlcyBPcGVuU1NMIG9yIEdudVRMUyIpCisgIGVuZGlmKCkKKyAgc2V0KFVTRV9OR1RDUDIgT04pCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtOR1RDUDJfSU5DTFVERV9ESVJTfSkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TkdUQ1AyX0xJQlJBUklFU30pCisKKyAgZmluZF9wYWNrYWdlKE5HSFRUUDMgUkVRVUlSRUQpCisgIHNldChVU0VfTkdIVFRQMyBPTikKKyAgaW5jbHVkZV9kaXJlY3Rvcmllcygke05HSFRUUDNfSU5DTFVERV9ESVJTfSkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7TkdIVFRQM19MSUJSQVJJRVN9KQorZW5kaWYoKQorCitvcHRpb24oVVNFX1FVSUNIRSAiVXNlIHF1aWNoZSBsaWJyYXJ5IGZvciBIVFRQLzMgc3VwcG9ydCIgT0ZGKQoraWYoVVNFX1FVSUNIRSkKKyAgaWYoVVNFX05HVENQMikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJPbmx5IG9uZSBIVFRQLzMgYmFja2VuZCBjYW4gYmUgc2VsZWN0ZWQhIikKKyAgZW5kaWYoKQorICBmaW5kX3BhY2thZ2UoUVVJQ0hFIFJFUVVJUkVEKQorICBDaGVja1F1aWNTdXBwb3J0SW5PcGVuU1NMKCkKKyAgc2V0KFVTRV9RVUlDSEUgT04pCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtRVUlDSEVfSU5DTFVERV9ESVJTfSkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7UVVJQ0hFX0xJQlJBUklFU30pCisgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQorICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgICAiJHtRVUlDSEVfSU5DTFVERV9ESVJTfSIpCisgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgICIke1FVSUNIRV9MSUJSQVJJRVN9IikKKyAgY2hlY2tfc3ltYm9sX2V4aXN0cyhxdWljaGVfY29ubl9zZXRfcWxvZ19mZCAicXVpY2hlLmgiIEhBVkVfUVVJQ0hFX0NPTk5fU0VUX1FMT0dfRkQpCisgIGNtYWtlX3BvcF9jaGVja19zdGF0ZSgpCitlbmRpZigpCisKK2lmKFdJTjMyKQorICBzZXQoVVNFX1dJTjMyX0NSWVBUTyBPTikKK2VuZGlmKCkKKwogaWYoTk9UIENVUkxfRElTQUJMRV9MREFQKQogICBpZihXSU4zMikKICAgICBvcHRpb24oVVNFX1dJTjMyX0xEQVAgIlVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24iIE9OKQpAQCAtNjUzLDcgKzc2NSw3IEBACiBvcHRpb24oQ1VSTF9CUk9UTEkgIlNldCB0byBPTiB0byBlbmFibGUgYnVpbGRpbmcgY3VybCB3aXRoIGJyb3RsaSBzdXBwb3J0LiIgT0ZGKQogc2V0KEhBVkVfQlJPVExJIE9GRikKIGlmKENVUkxfQlJPVExJKQotICBmaW5kX3BhY2thZ2UoQlJPVExJIFFVSUVUKQorICBmaW5kX3BhY2thZ2UoQnJvdGxpIFFVSUVUKQogICBpZihCUk9UTElfRk9VTkQpCiAgICAgc2V0KEhBVkVfQlJPVExJIE9OKQogICAgIGxpc3QoQVBQRU5EIENVUkxfTElCUyAke0JST1RMSV9MSUJSQVJJRVN9KQpAQCAtNjk2LDYgKzgwOCwyMCBAQAogICBlbmRpZigpCiBlbmRpZigpCiAKKyMgbGlic3NoCitvcHRpb24oQ01BS0VfVVNFX0xJQlNTSCAiVXNlIGxpYlNTSCIgT0ZGKQorbWFya19hc19hZHZhbmNlZChDTUFLRV9VU0VfTElCU1NIKQoraWYoTk9UIEhBVkVfTElCU1NIMiBBTkQgQ01BS0VfVVNFX0xJQlNTSCkKKyAgZmluZF9wYWNrYWdlKGxpYnNzaCBDT05GSUcpCisgIGlmKGxpYnNzaF9GT1VORCkKKyAgICBtZXNzYWdlKFNUQVRVUyAiRm91bmQgbGlic3NoICR7bGlic3NoX1ZFUlNJT059IikKKyAgICAjIFVzZSBpbXBvcnRlZCB0YXJnZXQgZm9yIGluY2x1ZGUgYW5kIGxpYnJhcnkgcGF0aHMuCisgICAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTIHNzaCkKKyAgICBzZXQoVVNFX0xJQlNTSCBPTikKKyAgICBzZXQoSEFWRV9MSUJTU0hfTElCU1NIX0ggMSkKKyAgZW5kaWYoKQorZW5kaWYoKQorCiBvcHRpb24oQ01BS0VfVVNFX0dTU0FQSSAiVXNlIEdTU0FQSSBpbXBsZW1lbnRhdGlvbiAocmlnaHQgbm93IG9ubHkgSGVpbWRhbCBpcyBzdXBwb3J0ZWQgd2l0aCBDTWFrZSBidWlsZCkiIE9GRikKIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfVVNFX0dTU0FQSSkKIApAQCAtNzY0LDYgKzg5MCw4IEBACiAgIHVuc2V0KFVTRV9VTklYX1NPQ0tFVFMgQ0FDSEUpCiBlbmRpZigpCiAKK29wdGlvbihFTkFCTEVfQUxUX1NWQyAiRW5hYmxlIGFsdC1zdmMgc3VwcG9ydCIgT0ZGKQorc2V0KFVTRV9BTFRTVkMgJHtFTkFCTEVfQUxUX1NWQ30pCiAKIGlmKDApICMgVGhpcyBjb2RlIG5vdCBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGhpbiBDTWFrZS4KICMKQEAgLTc5Myw3ICs5MjEsOSBAQAogICB1bnNldChDVVJMX0NBX1BBVEggQ0FDSEUpCiBlbHNlaWYoIiR7Q1VSTF9DQV9QQVRIfSIgU1RSRVFVQUwgImF1dG8iKQogICB1bnNldChDVVJMX0NBX1BBVEggQ0FDSEUpCi0gIHNldChDVVJMX0NBX1BBVEhfQVVUT0RFVEVDVCBUUlVFKQorICBpZihOT1QgVVNFX05TUykKKyAgICBzZXQoQ1VSTF9DQV9QQVRIX0FVVE9ERVRFQ1QgVFJVRSkKKyAgZW5kaWYoKQogZWxzZSgpCiAgIHNldChDVVJMX0NBX1BBVEhfU0VUIFRSVUUpCiBlbmRpZigpCkBAIC04MzIsNyArOTYyLDcgQEAKIGVuZGlmKCkKIAogaWYoQ1VSTF9DQV9QQVRIX1NFVCBBTkQgTk9UIFVTRV9PUEVOU1NMIEFORCBOT1QgVVNFX01CRURUTFMpCi0gIG1lc3NhZ2UoRkFUQUxfRVJST1IKKyAgbWVzc2FnZShTVEFUVVMKICAgICAgICAgICAiQ0EgcGF0aCBvbmx5IHN1cHBvcnRlZCBieSBPcGVuU1NMLCBHbnVUTFMgb3IgbWJlZCBUTFMuICIKICAgICAgICAgICAiU2V0IENVUkxfQ0FfUEFUSD1ub25lIG9yIGVuYWJsZSBvbmUgb2YgdGhvc2UgVExTIGJhY2tlbmRzLiIpCiBlbmRpZigpCkBAIC04NzYsNyArMTAwNiw2IEBACiBjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJhcnBhL3RmdHAuaCIgICAgICBIQVZFX0FSUEFfVEZUUF9IKQogY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiYXNzZXJ0LmgiICAgICAgICAgSEFWRV9BU1NFUlRfSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImNyeXB0by5oIiAgICAgICAgIEhBVkVfQ1JZUFRPX0gpCi1jaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJkZXMuaCIgICAgICAgICAgICBIQVZFX0RFU19IKQogY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiZXJyLmgiICAgICAgICAgICAgSEFWRV9FUlJfSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImVycm5vLmgiICAgICAgICAgIEhBVkVfRVJSTk9fSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImZjbnRsLmgiICAgICAgICAgIEhBVkVfRkNOVExfSCkKQEAgLTkyNSwxOCArMTA1NCw4IEBACiAKIGNoZWNrX3R5cGVfc2l6ZShzaXplX3QgIFNJWkVPRl9TSVpFX1QpCiBjaGVja190eXBlX3NpemUoc3NpemVfdCAgU0laRU9GX1NTSVpFX1QpCi1jaGVja190eXBlX3NpemUoImxvbmcgbG9uZyIgIFNJWkVPRl9MT05HX0xPTkcpCi1jaGVja190eXBlX3NpemUoImxvbmciICBTSVpFT0ZfTE9ORykKLWNoZWNrX3R5cGVfc2l6ZSgic2hvcnQiICBTSVpFT0ZfU0hPUlQpCi1jaGVja190eXBlX3NpemUoImludCIgIFNJWkVPRl9JTlQpCi1jaGVja190eXBlX3NpemUoIl9faW50NjQiICBTSVpFT0ZfX19JTlQ2NCkKIGNoZWNrX3R5cGVfc2l6ZSgidGltZV90IiAgU0laRU9GX1RJTUVfVCkKIAotaWYoSEFWRV9TSVpFT0ZfTE9OR19MT05HKQotICBzZXQoSEFWRV9MT05HTE9ORyAxKQotICBzZXQoSEFWRV9MTCAxKQotZW5kaWYoKQotCiBmaW5kX2ZpbGUoUkFORE9NX0ZJTEUgdXJhbmRvbSAvZGV2KQogbWFya19hc19hZHZhbmNlZChSQU5ET01fRklMRSkKIApAQCAtOTgzLDYgKzExMDIsNyBAQAogY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRwd3VpZCAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFBXVUlEKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRwd3VpZF9yICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFBXVUlEX1IpCiBjaGVja19zeW1ib2xfZXhpc3RzKGdldGV1aWQgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VURVVJRCkKK2NoZWNrX3N5bWJvbF9leGlzdHModXNsZWVwICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9VU0xFRVApCiBjaGVja19zeW1ib2xfZXhpc3RzKHV0aW1lICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfVVRJTUUpCiBjaGVja19zeW1ib2xfZXhpc3RzKGdtdGltZV9yICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR01USU1FX1IpCiBjaGVja19zeW1ib2xfZXhpc3RzKGxvY2FsdGltZV9yICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfTE9DQUxUSU1FX1IpCkBAIC0xMDEwLDYgKzExMzAsNyBAQAogY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRwcm90b2J5bmFtZSAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRQUk9UT0JZTkFNRSkKIGNoZWNrX3N5bWJvbF9leGlzdHMoZ2V0cGVlcm5hbWUgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUEVFUk5BTUUpCiBjaGVja19zeW1ib2xfZXhpc3RzKGdldHNvY2tuYW1lICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFNPQ0tOQU1FKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhpZl9uYW1ldG9pbmRleCAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9JRl9OQU1FVE9JTkRFWCkKIGNoZWNrX3N5bWJvbF9leGlzdHMoZ2V0cmxpbWl0ICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUkxJTUlUKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhzZXRsb2NhbGUgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TRVRMT0NBTEUpCiBjaGVja19zeW1ib2xfZXhpc3RzKHNldG1vZGUgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFVE1PREUpCkBAIC0xMDE4LDIwICsxMTM5LDcgQEAKIGNoZWNrX3N5bWJvbF9leGlzdHMoaW9jdGwgICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfSU9DVEwpCiBjaGVja19zeW1ib2xfZXhpc3RzKHNldHNvY2tvcHQgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFVFNPQ0tPUFQpCiBjaGVja19mdW5jdGlvbl9leGlzdHMobWFjaF9hYnNvbHV0ZV90aW1lIEhBVkVfTUFDSF9BQlNPTFVURV9USU1FKQotCi0jIHN5bWJvbCBleGlzdHMgaW4gd2luMzIsIGJ1dCBmdW5jdGlvbiBkb2VzIG5vdC4KLWlmKFdJTjMyKQotICBpZihFTkFCTEVfSU5FVF9QVE9OKQotICAgIGNoZWNrX2Z1bmN0aW9uX2V4aXN0cyhpbmV0X3B0b24gSEFWRV9JTkVUX1BUT04pCi0gICAgIyBfV0lOMzJfV0lOTlRfVklTVEEgKDB4MDYwMCkKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURfV0lOMzJfV0lOTlQ9MHgwNjAwKQotICBlbHNlKCkKLSAgICAjIF9XSU4zMl9XSU5OVF9XSU5YUCAoMHgwNTAxKQotICAgIGFkZF9kZWZpbml0aW9ucygtRF9XSU4zMl9XSU5OVD0weDA1MDEpCi0gIGVuZGlmKCkKLWVsc2UoKQotICBjaGVja19mdW5jdGlvbl9leGlzdHMoaW5ldF9wdG9uIEhBVkVfSU5FVF9QVE9OKQotZW5kaWYoKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhpbmV0X3B0b24gICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9JTkVUX1BUT04pCiAKIGNoZWNrX3N5bWJvbF9leGlzdHMoZnNldHhhdHRyICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0ZTRVRYQVRUUikKIGlmKEhBVkVfRlNFVFhBVFRSKQpAQCAtMTI1NSw2ICsxMzYzLDIzIEBACiAgIGVuZGlmKCkKIGVuZGlmKCkKIAoraWYoQ1VSTF9MVE8pCisgIGlmKENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuOSkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJSZXF1ZXN0ZWQgTFRPIGJ1dCB5b3VyIGNtYWtlIHZlcnNpb24gJHtDTUFLRV9WRVJTSU9OfSBpcyB0byBvbGQuIFlvdSBuZWVkIGF0IGxlYXN0IDMuOSIpCisgIGVuZGlmKCkKKworICBjbWFrZV9wb2xpY3koU0VUIENNUDAwNjkgTkVXKQorCisgIGluY2x1ZGUoQ2hlY2tJUE9TdXBwb3J0ZWQpCisgIGNoZWNrX2lwb19zdXBwb3J0ZWQoUkVTVUxUIENVUkxfSEFTX0xUTyBPVVRQVVQgQ1VSTF9MVE9fRVJST1IgTEFOR1VBR0VTIEMpCisgIGlmKENVUkxfSEFTX0xUTykKKyAgICBtZXNzYWdlKFNUQVRVUyAiTFRPIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCIpCisgIGVsc2UoKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkxUTyB3YXMgcmVxdWVzdGVkIC0gYnV0IGNvbXBpbGVyIGRvZXNuJ3Qgc3VwcG9ydCBpdFxuJHtDVVJMX0xUT19FUlJPUn0iKQorICBlbmRpZigpCitlbmRpZigpCisKKwogIyBVZ2x5IChidXQgZnVuY3Rpb25hbCkgd2F5IHRvIGluY2x1ZGUgIk1ha2VmaWxlLmluYyIgYnkgdHJhbnNmb3JtaW5nIGl0ICg9IHJlZ2VuZXJhdGUgaXQpLgogZnVuY3Rpb24odHJhbnNmb3JtX21ha2VmaWxlX2luYyBJTlBVVF9GSUxFIE9VVFBVVF9GSUxFKQogICBmaWxlKFJFQUQgJHtJTlBVVF9GSUxFfSBNQUtFRklMRV9JTkNfVEVYVCkKQEAgLTEyNjgsNyArMTM5Myw3IEBACiAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJcXCRcXCgoW2EtekEtWl9dW2EtekEtWjAtOV9dKilcXCkiICJcJHtcXDF9IiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkgICAgIyBSZXBsYWNlICQoKSB3aXRoICR7fQogICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiQChbYS16QS1aX11bYS16QS1aMC05X10qKUAiICJcJHtcXDF9IiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkgICAgIyBSZXBsYWNlIEBAIHdpdGggJHt9LCBldmVuIGlmIHRoYXQgbWF5IG5vdCBiZSByZWFkIGJ5IENNYWtlIHNjcmlwdHMuCiAgIGZpbGUoV1JJVEUgJHtPVVRQVVRfRklMRX0gJHtNQUtFRklMRV9JTkNfVEVYVH0pCi0KKyAgc2V0X3Byb3BlcnR5KERJUkVDVE9SWSBBUFBFTkQgUFJPUEVSVFkgQ01BS0VfQ09ORklHVVJFX0RFUEVORFMgIiR7SU5QVVRfRklMRX0iKQogZW5kZnVuY3Rpb24oKQogCiBpZigwKSAjIFRoaXMgY29kZSBub3QgbmVlZGVkIGZvciBidWlsZGluZyB3aXRoaW4gQ01ha2UuCkBAIC0xMzA0LDE5ICsxNDI5LDI5IEBACiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogaWYoMCkgIyBUaGlzIGNvZGUgbm90IG5lZWRlZCBmb3IgYnVpbGRpbmcgd2l0aGluIENNYWtlLgotaW5jbHVkZShDVGVzdCkKLWlmKEJVSUxEX1RFU1RJTkcpCitvcHRpb24oQlVJTERfVEVTVElORyAiQnVpbGQgdGVzdHMiICIke1BFUkxfRk9VTkR9IikKK2lmKE5PVCBQRVJMX0ZPVU5EKQorICBtZXNzYWdlKFNUQVRVUyAiUGVybCBub3QgZm91bmQsIHRlc3RpbmcgZGlzYWJsZWQuIikKK2Vsc2VpZihCVUlMRF9URVNUSU5HKQogICBhZGRfc3ViZGlyZWN0b3J5KHRlc3RzKQogZW5kaWYoKQogCisjIE5UTE0gc3VwcG9ydCByZXF1aXJlcyBjcnlwdG8gZnVuY3Rpb24gYWRhcHRpb25zIGZyb20gdmFyaW91cyBTU0wgbGlicworIyBUT0RPIGFsdGVybmF0aXZlIFNTTCBsaWJzIHRlc3RzIGZvciBTU1AxLCBHTlVUTFMsIE5TUworaWYoTk9UIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCBBTkQgKFVTRV9PUEVOU1NMIE9SIFVTRV9XSU5ET1dTX1NTUEkgT1IgVVNFX0RBUldJTlNTTCBPUiBVU0VfTUJFRFRMUyBPUiBVU0VfV0lOMzJfQ1JZUFRPKSkKKyAgc2V0KHVzZV9udGxtIE9OKQorZWxzZSgpCisgIHNldCh1c2VfbnRsbSBPRkYpCitlbmRpZigpCisKICMgSGVscGVyIHRvIHBvcHVsYXRlIGEgbGlzdCAoX2l0ZW1zKSB3aXRoIGEgbGFiZWwgd2hlbiBjb25kaXRpb25zICh0aGUgcmVtYWluaW5nCiAjIGFyZ3MpIGFyZSBzYXRpc2ZpZWQKLWZ1bmN0aW9uKF9hZGRfaWYgbGFiZWwpCi0gICMgVE9ETyBuZWVkIHRvIGRpc2FibGUgcG9saWN5IENNUDAwNTQgKENNYWtlIDMuMSkgdG8gYWxsb3cgdGhpcyBpbmRpcmVjdGlvbgorbWFjcm8oX2FkZF9pZiBsYWJlbCkKKyAgIyBuZWVkcyB0byBiZSBhIG1hY3JvIHRvIGFsbG93IHRoaXMgaW5kaXJlY3Rpb24KICAgaWYoJHtBUkdOfSkKLSAgICBzZXQoX2l0ZW1zICR7X2l0ZW1zfSAiJHtsYWJlbH0iIFBBUkVOVF9TQ09QRSkKKyAgICBzZXQoX2l0ZW1zICR7X2l0ZW1zfSAiJHtsYWJlbH0iKQogICBlbmRpZigpCi1lbmRmdW5jdGlvbigpCitlbmRtYWNybygpCiAKICMgQ2xlYXIgbGlzdCBhbmQgdHJ5IHRvIGRldGVjdCBhdmFpbGFibGUgZmVhdHVyZXMKIHNldChfaXRlbXMpCkBAIC0xMzMxLDYgKzE0NjYsNyBAQAogIyBUT0RPIFNTUDEgKFdpblNTTCkgY2hlY2sgaXMgbWlzc2luZwogX2FkZF9pZigiU1NQSSIgICAgICAgICAgVVNFX1dJTkRPV1NfU1NQSSkKIF9hZGRfaWYoIkdTUy1BUEkiICAgICAgIEhBVkVfR1NTQVBJKQorX2FkZF9pZigiYWx0LXN2YyIgICAgICAgRU5BQkxFX0FMVF9TVkMpCiAjIFRPRE8gU1NQMSBtaXNzaW5nIGZvciBTUE5FR08KIF9hZGRfaWYoIlNQTkVHTyIgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggQU5ECiAgICAgICAgICAgICAgICAgICAgICAgICAoSEFWRV9HU1NBUEkgT1IgVVNFX1dJTkRPV1NfU1NQSSkpCkBAIC0xMzM4LDE1ICsxNDc0LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoSEFWRV9HU1NBUEkgT1IgVVNFX1dJTkRPV1NfU1NQSSkpCiAjIE5UTE0gc3VwcG9ydCByZXF1aXJlcyBjcnlwdG8gZnVuY3Rpb24gYWRhcHRpb25zIGZyb20gdmFyaW91cyBTU0wgbGlicwogIyBUT0RPIGFsdGVybmF0aXZlIFNTTCBsaWJzIHRlc3RzIGZvciBTU1AxLCBHTlVUTFMsIE5TUwotaWYoTk9UIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCBBTkQgKFVTRV9PUEVOU1NMIE9SIFVTRV9XSU5ET1dTX1NTUEkgT1IgVVNFX1NFQ1RSQU5TUCBPUiBVU0VfTUJFRFRMUykpCi0gIF9hZGRfaWYoIk5UTE0iICAgICAgICAxKQotICAjIFRPRE8gbWlzc2luZyBvcHRpb24gKGF1dG9jb25mOiAtLWVuYWJsZS1udGxtLXdiKQotICBfYWRkX2lmKCJOVExNX1dCIiAgICAgTk9UIENVUkxfRElTQUJMRV9IVFRQIEFORCBOVExNX1dCX0VOQUJMRUQpCi1lbmRpZigpCitfYWRkX2lmKCJOVExNIiAgICAgICAgdXNlX250bG0pCisjIFRPRE8gbWlzc2luZyBvcHRpb24gKGF1dG9jb25mOiAtLWVuYWJsZS1udGxtLXdiKQorX2FkZF9pZigiTlRMTV9XQiIgICAgIHVzZV9udGxtIEFORCBOT1QgQ1VSTF9ESVNBQkxFX0hUVFAgQU5EIE5UTE1fV0JfRU5BQkxFRCkKICMgVE9ETyBtaXNzaW5nIG9wdGlvbiAoLS1lbmFibGUtdGxzLXNycCksIGRlcGVuZHMgb24gR05VVExTX1NSUC9PUEVOU1NMX1NSUAogX2FkZF9pZigiVExTLVNSUCIgICAgICAgVVNFX1RMU19TUlApCiAjIFRPRE8gb3B0aW9uIC0td2l0aC1uZ2h0dHAyIHRlc3RzIGZvciBuZ2h0dHAyIGxpYiBhbmQgbmdodHRwMi9uZ2h0dHAyLmggaGVhZGVyCiBfYWRkX2lmKCJIVFRQMiIgICAgICAgICBVU0VfTkdIVFRQMikKK19hZGRfaWYoIkhUVFAzIiAgICAgICAgIFVTRV9OR1RDUDIgT1IgVVNFX1FVSUNIRSkKK19hZGRfaWYoIk11bHRpU1NMIiAgICAgIENVUkxfV0lUSF9NVUxUSV9TU0wpCitfYWRkX2lmKCJIVFRQUy1wcm94eSIgICBTU0xfRU5BQkxFRCBBTkQgKFVTRV9PUEVOU1NMIE9SIFVTRV9HTlVUTFMgT1IgVVNFX05TUykpCiBzdHJpbmcoUkVQTEFDRSAiOyIgIiAiIFNVUFBPUlRfRkVBVFVSRVMgIiR7X2l0ZW1zfSIpCiBtZXNzYWdlKFNUQVRVUyAiRW5hYmxlZCBmZWF0dXJlczogJHtTVVBQT1JUX0ZFQVRVUkVTfSIpCiAKQEAgLTEzNzEsMTIgKzE1MDgsMTUgQEAKIF9hZGRfaWYoIlBPUDNTIiAgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfUE9QMyBBTkQgU1NMX0VOQUJMRUQpCiBfYWRkX2lmKCJJTUFQIiAgICAgICAgICBOT1QgQ1VSTF9ESVNBQkxFX0lNQVApCiBfYWRkX2lmKCJJTUFQUyIgICAgICAgICBOT1QgQ1VSTF9ESVNBQkxFX0lNQVAgQU5EIFNTTF9FTkFCTEVEKQorX2FkZF9pZigiU01CIiAgICAgICAgICAgTk9UIENVUkxfRElTQUJMRV9TTUIgQU5EIHVzZV9udGxtKQorX2FkZF9pZigiU01CUyIgICAgICAgICAgTk9UIENVUkxfRElTQUJMRV9TTUIgQU5EIFNTTF9FTkFCTEVEIEFORCB1c2VfbnRsbSkKIF9hZGRfaWYoIlNNVFAiICAgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfU01UUCkKIF9hZGRfaWYoIlNNVFBTIiAgICAgICAgIE5PVCBDVVJMX0RJU0FCTEVfU01UUCBBTkQgU1NMX0VOQUJMRUQpCi1fYWRkX2lmKCJTQ1AiICAgICAgICAgICBVU0VfTElCU1NIMikKLV9hZGRfaWYoIlNGVFAiICAgICAgICAgIFVTRV9MSUJTU0gyKQorX2FkZF9pZigiU0NQIiAgICAgICAgICAgVVNFX0xJQlNTSDIgT1IgVVNFX0xJQlNTSCkKK19hZGRfaWYoIlNGVFAiICAgICAgICAgIFVTRV9MSUJTU0gyIE9SIFVTRV9MSUJTU0gpCiBfYWRkX2lmKCJSVFNQIiAgICAgICAgICBOT1QgQ1VSTF9ESVNBQkxFX1JUU1ApCiBfYWRkX2lmKCJSVE1QIiAgICAgICAgICBVU0VfTElCUlRNUCkKK19hZGRfaWYoIk1RVFQiICAgICAgICAgIENVUkxfRU5BQkxFX01RVFQpCiBpZihfaXRlbXMpCiAgIGxpc3QoU09SVCBfaXRlbXMpCiBlbmRpZigpCkBAIC0xMzg5LDYgKzE1MjksOSBAQAogX2FkZF9pZigiT3BlblNTTCIgICAgICAgICAgU1NMX0VOQUJMRUQgQU5EIFVTRV9PUEVOU1NMKQogX2FkZF9pZigiU2VjdXJlIFRyYW5zcG9ydCIgU1NMX0VOQUJMRUQgQU5EIFVTRV9TRUNUUkFOU1ApCiBfYWRkX2lmKCJtYmVkVExTIiAgICAgICAgICBTU0xfRU5BQkxFRCBBTkQgVVNFX01CRURUTFMpCitfYWRkX2lmKCJCZWFyU1NMIiAgICAgICAgICBTU0xfRU5BQkxFRCBBTkQgVVNFX0JFQVJTU0wpCitfYWRkX2lmKCJOU1MiICAgICAgICAgICAgICBTU0xfRU5BQkxFRCBBTkQgVVNFX05TUykKK19hZGRfaWYoIndvbGZTU0wiICAgICAgICAgIFNTTF9FTkFCTEVEIEFORCBVU0VfV09MRlNTTCkKIGlmKF9pdGVtcykKICAgbGlzdChTT1JUIF9pdGVtcykKIGVuZGlmKCkKQEAgLTE0MDIsMjUgKzE1NDUsNDMgQEAKICMgVE9ETyB3aGVuIHRvIHNldCAiLURDVVJMX1NUQVRJQ0xJQiIgZm9yIENQUEZMQUdfQ1VSTF9TVEFUSUNMSUI/CiBzZXQoQ1BQRkxBR19DVVJMX1NUQVRJQ0xJQiAgIiIpCiBzZXQoQ1VSTFZFUlNJT04gICAgICAgICAgICAgIiR7Q1VSTF9WRVJTSU9OfSIpCi1pZihCVUlMRF9TSEFSRURfTElCUykKLSAgc2V0KEVOQUJMRV9TSEFSRUQgICAgICAgICAieWVzIikKLSAgc2V0KEVOQUJMRV9TVEFUSUMgICAgICAgICAibm8iKQotZWxzZSgpCi0gIHNldChFTkFCTEVfU0hBUkVEICAgICAgICAgIm5vIikKLSAgc2V0KEVOQUJMRV9TVEFUSUMgICAgICAgICAieWVzIikKLWVuZGlmKCkKIHNldChleGVjX3ByZWZpeCAgICAgICAgICAgICAiXCR7cHJlZml4fSIpCiBzZXQoaW5jbHVkZWRpciAgICAgICAgICAgICAgIlwke3ByZWZpeH0vaW5jbHVkZSIpCiBzZXQoTERGTEFHUyAgICAgICAgICAgICAgICAgIiR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFHU30iKQogc2V0KExJQkNVUkxfTElCUyAgICAgICAgICAgICIiKQogc2V0KGxpYmRpciAgICAgICAgICAgICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIiKQogZm9yZWFjaChfbGliICR7Q01BS0VfQ19JTVBMSUNJVF9MSU5LX0xJQlJBUklFU30gJHtDVVJMX0xJQlN9KQorICBpZihUQVJHRVQgIiR7X2xpYn0iKQorICAgIHNldChfbGlibmFtZSAiJHtfbGlifSIpCisgICAgZ2V0X3RhcmdldF9wcm9wZXJ0eShfbGlidHlwZSAiJHtfbGlibmFtZX0iIFRZUEUpCisgICAgaWYoX2xpYnR5cGUgU1RSRVFVQUwgSU5URVJGQUNFX0xJQlJBUlkpCisgICAgICAjIEludGVyZmFjZSBsaWJyYXJpZXMgY2FuIG9jY3VyIHdoZW4gYW4gZXh0ZXJuYWwgcHJvamVjdCBlbWJlZHMgY3VybCBhbmQKKyAgICAgICMgZGVmaW5lZCB0YXJnZXRzIHN1Y2ggYXMgWkxJQjo6WkxJQiBieSB0aGVtc2VsdmVzLiBJZ25vcmUgdGhlc2UgYXMKKyAgICAgICMgcmVhZGluZyB0aGUgTE9DQVRJT04gcHJvcGVydHkgd2lsbCBlcnJvciBvdXQuIEFzc3VtZSB0aGUgdXNlciB3b24ndCBuZWVkCisgICAgICAjIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIC5wYyBmaWxlLgorICAgICAgY29udGludWUoKQorICAgIGVuZGlmKCkKKyAgICBnZXRfdGFyZ2V0X3Byb3BlcnR5KF9saWIgIiR7X2xpYm5hbWV9IiBMT0NBVElPTikKKyAgICBpZihOT1QgX2xpYikKKyAgICAgIG1lc3NhZ2UoV0FSTklORyAiQmFkIGxpYiBpbiBsaWJyYXJ5IGxpc3Q6ICR7X2xpYm5hbWV9IikKKyAgICAgIGNvbnRpbnVlKCkKKyAgICBlbmRpZigpCisgIGVuZGlmKCkKICAgaWYoX2xpYiBNQVRDSEVTICIuKi8uKiIgT1IgX2xpYiBNQVRDSEVTICJeLSIpCiAgICAgc2V0KExJQkNVUkxfTElCUyAgICAgICAgICAiJHtMSUJDVVJMX0xJQlN9ICR7X2xpYn0iKQogICBlbHNlKCkKICAgICBzZXQoTElCQ1VSTF9MSUJTICAgICAgICAgICIke0xJQkNVUkxfTElCU30gLWwke19saWJ9IikKICAgZW5kaWYoKQogZW5kZm9yZWFjaCgpCitpZihCVUlMRF9TSEFSRURfTElCUykKKyAgc2V0KEVOQUJMRV9TSEFSRUQgICAgICAgICAieWVzIikKKyAgc2V0KEVOQUJMRV9TVEFUSUMgICAgICAgICAibm8iKQorICBzZXQoTElCQ1VSTF9OT19TSEFSRUQgICAgICIiKQorZWxzZSgpCisgIHNldChFTkFCTEVfU0hBUkVEICAgICAgICAgIm5vIikKKyAgc2V0KEVOQUJMRV9TVEFUSUMgICAgICAgICAieWVzIikKKyAgc2V0KExJQkNVUkxfTk9fU0hBUkVEICAgICAiJHtMSUJDVVJMX0xJQlN9IikKK2VuZGlmKCkKICMgImEiIChMaW51eCkgb3IgImxpYiIgKFdpbmRvd3MpCiBzdHJpbmcoUkVQTEFDRSAiLiIgIiIgbGliZXh0ICIke0NNQUtFX1NUQVRJQ19MSUJSQVJZX1NVRkZJWH0iKQogc2V0KHByZWZpeCAgICAgICAgICAgICAgICAgICIke0NNQUtFX0lOU1RBTExfUFJFRklYfSIpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL0NPUFlJTkcgYi9VdGlsaXRpZXMvY21jdXJsL0NPUFlJTkcKaW5kZXggMzUyOGJkNy4uOWQ5ZTRhZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9DT1BZSU5HCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvQ09QWUlORwpAQCAtMSw2ICsxLDYgQEAKIENPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UKIAotQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBhbmQgbWFueQorQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBhbmQgbWFueQogY29udHJpYnV0b3JzLCBzZWUgdGhlIFRIQU5LUyBmaWxlLgogCiBBbGwgcmlnaHRzIHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvY3VybC5oIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvY3VybC5oCmluZGV4IDA4OWM0MjcuLjE5NGI1NzggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2N1cmwuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9jdXJsLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9fQ1VSTF9DVVJMX0gKLSNkZWZpbmUgX19DVVJMX0NVUkxfSAorI2lmbmRlZiBDVVJMSU5DX0NVUkxfSAorI2RlZmluZSBDVVJMSU5DX0NVUkxfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM4LDEyICszOCwxMiBAQAogI2luY2x1ZGUgInN5c3RlbS5oIiAgICAgICAgICAvKiBkZXRlcm1pbmUgdGhpbmdzIHJ1bi10aW1lICovCiAKIC8qCi0gKiBEZWZpbmUgV0lOMzIgd2hlbiBidWlsZCB0YXJnZXQgaXMgV2luMzIgQVBJCisgKiBEZWZpbmUgQ1VSTF9XSU4zMiB3aGVuIGJ1aWxkIHRhcmdldCBpcyBXaW4zMiBBUEkKICAqLwogCi0jaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykpICYmIFwKLSAgICAgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fU1lNQklBTjMyX18pCi0jZGVmaW5lIFdJTjMyCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChXSU4zMikpICYmICAgICAgICBcCisgICFkZWZpbmVkKF9fU1lNQklBTjMyX18pCisjZGVmaW5lIENVUkxfV0lOMzIKICNlbmRpZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTU4LDcgKzU4LDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAKLSNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorI2lmIGRlZmluZWQoQ1VSTF9XSU4zMikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICNpZiAhKGRlZmluZWQoX1dJTlNPQ0tBUElfKSB8fCBkZWZpbmVkKF9XSU5TT0NLX0gpIHx8IFwKICAgICAgIGRlZmluZWQoX19MV0lQX09QVF9IX18pIHx8IGRlZmluZWQoTFdJUF9IRFJfT1BUX0gpKQogLyogVGhlIGNoZWNrIGFib3ZlIHByZXZlbnRzIHRoZSB3aW5zb2NrMiBpbmNsdXNpb24gaWYgd2luc29jay5oIGFscmVhZHkgd2FzCkBAIC03OSwxMSArNzksMTEgQEAKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKQorI2lmICFkZWZpbmVkKENVUkxfV0lOMzIpICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKF9fVlhXT1JLU19fKQorI2lmICFkZWZpbmVkKENVUkxfV0lOMzIpICYmICFkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChfX1ZYV09SS1NfXykKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCiAKQEAgLTExNCw3ICsxMTQsNyBAQAogCiAjaWZkZWYgQ1VSTF9TVEFUSUNMSUIKICMgIGRlZmluZSBDVVJMX0VYVEVSTgotI2VsaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX1NZTUJJQU4zMl9fKSB8fCBcCisjZWxpZiBkZWZpbmVkKENVUkxfV0lOMzIpIHx8IGRlZmluZWQoX19TWU1CSUFOMzJfXykgfHwgXAogICAgICAoX19oYXNfZGVjbHNwZWNfYXR0cmlidXRlKGRsbGV4cG9ydCkgJiYgXAogICAgICAgX19oYXNfZGVjbHNwZWNfYXR0cmlidXRlKGRsbGltcG9ydCkpCiAjICBpZiBkZWZpbmVkKEJVSUxESU5HX0xJQkNVUkwpCkBAIC0xMzAsNyArMTMwLDcgQEAKIAogI2lmbmRlZiBjdXJsX3NvY2tldF90eXBlZGVmCiAvKiBzb2NrZXQgdHlwZWRlZiAqLwotI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fTFdJUF9PUFRfSF9fKSAmJiAhZGVmaW5lZChMV0lQX0hEUl9PUFRfSCkKKyNpZiBkZWZpbmVkKENVUkxfV0lOMzIpICYmICFkZWZpbmVkKF9fTFdJUF9PUFRfSF9fKSAmJiAhZGVmaW5lZChMV0lQX0hEUl9PUFRfSCkKIHR5cGVkZWYgU09DS0VUIGN1cmxfc29ja2V0X3Q7CiAjZGVmaW5lIENVUkxfU09DS0VUX0JBRCBJTlZBTElEX1NPQ0tFVAogI2Vsc2UKQEAgLTE1NCw3ICsxNTQsOCBAQAogICBDVVJMU1NMQkFDS0VORF9TRUNVUkVUUkFOU1BPUlQgPSA5LAogICBDVVJMU1NMQkFDS0VORF9BWFRMUyA9IDEwLCAvKiBuZXZlciB1c2VkIHNpbmNlIDcuNjMuMCAqLwogICBDVVJMU1NMQkFDS0VORF9NQkVEVExTID0gMTEsCi0gIENVUkxTU0xCQUNLRU5EX01FU0FMSU5LID0gMTIKKyAgQ1VSTFNTTEJBQ0tFTkRfTUVTQUxJTksgPSAxMiwKKyAgQ1VSTFNTTEJBQ0tFTkRfQkVBUlNTTCA9IDEzCiB9IGN1cmxfc3NsYmFja2VuZDsKIAogLyogYWxpYXNlcyBmb3IgbGlicmFyeSBjbG9uZXMgYW5kIHJlbmFtZXMgKi8KQEAgLTIwOSwxNiArMjEwLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuIEFkZGVkIGluIDcuNDYuMCAqLwogfTsKIAotLyogVGhpcyBpcyB0aGUgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OIGNhbGxiYWNrIHByb3RvLiBJdCBpcyBub3cgY29uc2lkZXJlZAotICAgZGVwcmVjYXRlZCBidXQgd2FzIHRoZSBvbmx5IGNob2ljZSB1cCB1bnRpbCA3LjMxLjAgKi8KKworLyogVGhpcyBpcyBhIHJldHVybiBjb2RlIGZvciB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2sgdGhhdCwgd2hlbiByZXR1cm5lZCwgd2lsbAorICAgc2lnbmFsIGxpYmN1cmwgdG8gY29udGludWUgZXhlY3V0aW5nIHRoZSBkZWZhdWx0IHByb2dyZXNzIGZ1bmN0aW9uICovCisjZGVmaW5lIENVUkxfUFJPR1JFU1NGVU5DX0NPTlRJTlVFIDB4MTAwMDAwMDEKKworLyogVGhpcyBpcyB0aGUgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OIGNhbGxiYWNrIHByb3RvdHlwZS4gSXQgaXMgbm93CisgICBjb25zaWRlcmVkIGRlcHJlY2F0ZWQgYnV0IHdhcyB0aGUgb25seSBjaG9pY2UgdXAgdW50aWwgNy4zMS4wICovCiB0eXBlZGVmIGludCAoKmN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2spKHZvaWQgKmNsaWVudHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkbHRvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGxub3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1bHRvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdWxub3cpOwogCi0vKiBUaGlzIGlzIHRoZSBDVVJMT1BUX1hGRVJJTkZPRlVOQ1RJT04gY2FsbGJhY2sgcHJvdG8uIEl0IHdhcyBpbnRyb2R1Y2VkIGluCi0gICA3LjMyLjAsIGl0IGF2b2lkcyBmbG9hdGluZyBwb2ludCBhbmQgcHJvdmlkZXMgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbi4gKi8KKy8qIFRoaXMgaXMgdGhlIENVUkxPUFRfWEZFUklORk9GVU5DVElPTiBjYWxsYmFjayBwcm90b3R5cGUuIEl0IHdhcyBpbnRyb2R1Y2VkCisgICBpbiA3LjMyLjAsIGF2b2lkcyB0aGUgdXNlIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgYW5kIHByb3ZpZGVzIG1vcmUKKyAgIGRldGFpbGVkIGluZm9ybWF0aW9uLiAqLwogdHlwZWRlZiBpbnQgKCpjdXJsX3hmZXJpbmZvX2NhbGxiYWNrKSh2b2lkICpjbGllbnRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90IGRsdG90YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgZGxub3csCkBAIC0yODMsMTAgKzI5MCw3IEBACiAjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fU0laRSAgICAgICAgKDE8PDYpCiAjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fSExJTktDT1VOVCAgKDE8PDcpCiAKLS8qIENvbnRlbnQgb2YgdGhpcyBzdHJ1Y3R1cmUgZGVwZW5kcyBvbiBpbmZvcm1hdGlvbiB3aGljaCBpcyBrbm93biBhbmQgaXMKLSAgIGFjaGlldmFibGUgKGUuZy4gYnkgRlRQIExJU1QgcGFyc2luZykuIFBsZWFzZSBzZWUgdGhlIHVybF9lYXN5X3NldG9wdCgzKSBtYW4KLSAgIHBhZ2UgZm9yIGNhbGxiYWNrcyByZXR1cm5pbmcgdGhpcyBzdHJ1Y3R1cmUgLS0gc29tZSBmaWVsZHMgYXJlIG1hbmRhdG9yeSwKLSAgIHNvbWUgb3RoZXJzIGFyZSBvcHRpb25hbC4gVGhlIEZMQUcgZmllbGQgaGFzIHNwZWNpYWwgbWVhbmluZy4gKi8KKy8qIEluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIGZpbGUsIHVzZWQgd2hlbiBkb2luZyBGVFAgd2lsZGNhcmQgbWF0Y2hpbmcgKi8KIHN0cnVjdCBjdXJsX2ZpbGVpbmZvIHsKICAgY2hhciAqZmlsZW5hbWU7CiAgIGN1cmxmaWxldHlwZSBmaWxldHlwZTsKQEAgLTYwMiw2ICs2MDYsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIENVUkxFX1JFQ1VSU0lWRV9BUElfQ0FMTCwgICAgICAvKiA5MyAtIGFuIGFwaSBmdW5jdGlvbiB3YXMgY2FsbGVkIGZyb20KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSBhIGNhbGxiYWNrICovCisgIENVUkxFX0FVVEhfRVJST1IsICAgICAgICAgICAgICAvKiA5NCAtIGFuIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIHJldHVybmVkIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciAqLworICBDVVJMRV9IVFRQMywgICAgICAgICAgICAgICAgICAgLyogOTUgLSBBbiBIVFRQLzMgbGF5ZXIgcHJvYmxlbSAqLworICBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1IsICAgICAgLyogOTYgLSBRVUlDIGNvbm5lY3Rpb24gZXJyb3IgKi8KICAgQ1VSTF9MQVNUIC8qIG5ldmVyIHVzZSEgKi8KIH0gQ1VSTGNvZGU7CiAKQEAgLTY4NSw4ICs2OTMsMTAgQEAKIHR5cGVkZWYgQ1VSTGNvZGUgKCpjdXJsX2NvbnZfY2FsbGJhY2spKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CiAKIHR5cGVkZWYgQ1VSTGNvZGUgKCpjdXJsX3NzbF9jdHhfY2FsbGJhY2spKENVUkwgKmN1cmwsICAgIC8qIGVhc3kgaGFuZGxlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzc2xfY3R4LCAvKiBhY3R1YWxseSBhbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblNTTCBTU0xfQ1RYICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzc2xfY3R4LCAvKiBhY3R1YWxseSBhbiBPcGVuU1NMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBXb2xmU1NMIFNTTF9DVFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhbiBtYmVkVExTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfY29uZmlnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VycHRyKTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTc2NCw3ICs3NzQsNyBAQAogfTsKIAogc3RydWN0IGN1cmxfa2hrZXkgewotICBjb25zdCBjaGFyICprZXk7IC8qIHBvaW50cyB0byBhIHplcm8tdGVybWluYXRlZCBzdHJpbmcgZW5jb2RlZCB3aXRoIGJhc2U2NAorICBjb25zdCBjaGFyICprZXk7IC8qIHBvaW50cyB0byBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgZW5jb2RlZCB3aXRoIGJhc2U2NAogICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbiBpcyB6ZXJvLCBvdGhlcndpc2UgdG8gdGhlICJyYXciIGRhdGEgKi8KICAgc2l6ZV90IGxlbjsKICAgZW51bSBjdXJsX2todHlwZSBrZXl0eXBlOwpAQCAtODE5LDYgKzgyOSwxOSBAQAogICAgU1NMIGJhY2tlbmRzIHdoZXJlIHN1Y2ggYmVoYXZpb3IgaXMgcHJlc2VudC4gKi8KICNkZWZpbmUgQ1VSTFNTTE9QVF9OT19SRVZPS0UgKDE8PDEpCiAKKy8qIC0gTk9fUEFSVElBTENIQUlOIHRlbGxzIGxpYmN1cmwgdG8gKk5PVCogYWNjZXB0IGEgcGFydGlhbCBjZXJ0aWZpY2F0ZSBjaGFpbgorICAgaWYgcG9zc2libGUuIFRoZSBPcGVuU1NMIGJhY2tlbmQgaGFzIHRoaXMgYWJpbGl0eS4gKi8KKyNkZWZpbmUgQ1VSTFNTTE9QVF9OT19QQVJUSUFMQ0hBSU4gKDE8PDIpCisKKy8qIC0gUkVWT0tFX0JFU1RfRUZGT1JUIHRlbGxzIGxpYmN1cmwgdG8gaWdub3JlIGNlcnRpZmljYXRlIHJldm9jYXRpb24gb2ZmbGluZQorICAgY2hlY2tzIGFuZCBpZ25vcmUgbWlzc2luZyByZXZvY2F0aW9uIGxpc3QgZm9yIHRob3NlIFNTTCBiYWNrZW5kcyB3aGVyZSBzdWNoCisgICBiZWhhdmlvciBpcyBwcmVzZW50LiAqLworI2RlZmluZSBDVVJMU1NMT1BUX1JFVk9LRV9CRVNUX0VGRk9SVCAoMTw8MykKKworLyogLSBDVVJMU1NMT1BUX05BVElWRV9DQSB0ZWxscyBsaWJjdXJsIHRvIHVzZSBzdGFuZGFyZCBjZXJ0aWZpY2F0ZSBzdG9yZSBvZgorICAgb3BlcmF0aW5nIHN5c3RlbS4gQ3VycmVudGx5IGltcGxlbWVudGVkIHVuZGVyIE1TLVdpbmRvd3MuICovCisjZGVmaW5lIENVUkxTU0xPUFRfTkFUSVZFX0NBICgxPDw0KQorCiAvKiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGF0dGVtcHQgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGZvciBoYXBweSBleWViYWxscy4KICAgIENVUkxPUFRfSEFQUFlfRVlFQkFMTFNfVElNRU9VVF9NUy4zIGFuZCBoYXBweS1leWViYWxscy10aW1lb3V0LW1zLmQgZG9jdW1lbnQKICAgIHRoaXMgdmFsdWUsIGtlZXAgdGhlbSBpbiBzeW5jLiAqLwpAQCAtODgzLDcgKzkwNiw3IEBACiAKIC8qIENVUkxBTFRTVkNfKiBhcmUgYml0cyBmb3IgdGhlIENVUkxPUFRfQUxUU1ZDX0NUUkwgb3B0aW9uICovCiAjZGVmaW5lIENVUkxBTFRTVkNfSU1NRURJQVRFTFkgICgxPDwwKQotI2RlZmluZSBDVVJMQUxUU1ZDX0FMVFVTRUQgICAgICAoMTw8MSkKKwogI2RlZmluZSBDVVJMQUxUU1ZDX1JFQURPTkxZRklMRSAoMTw8MikKICNkZWZpbmUgQ1VSTEFMVFNWQ19IMSAgICAgICAgICAgKDE8PDMpCiAjZGVmaW5lIENVUkxBTFRTVkNfSDIgICAgICAgICAgICgxPDw0KQpAQCAtOTE4LDg1ICs5NDEsNzIgQEAKICNkZWZpbmUgQ1VSTFBST1RPX0dPUEhFUiAoMTw8MjUpCiAjZGVmaW5lIENVUkxQUk9UT19TTUIgICAgKDE8PDI2KQogI2RlZmluZSBDVVJMUFJPVE9fU01CUyAgICgxPDwyNykKKyNkZWZpbmUgQ1VSTFBST1RPX01RVFQgICAoMTw8MjgpCiAjZGVmaW5lIENVUkxQUk9UT19BTEwgICAgKH4wKSAvKiBlbmFibGUgZXZlcnl0aGluZyAqLwogCiAvKiBsb25nIG1heSBiZSAzMiBvciA2NCBiaXRzLCBidXQgd2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlCiAgICBidXQgMzIgKi8KICNkZWZpbmUgQ1VSTE9QVFRZUEVfTE9ORyAgICAgICAgICAwCiAjZGVmaW5lIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UICAgMTAwMDAKLSNkZWZpbmUgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQgICAxMDAwMAogI2RlZmluZSBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5UIDIwMDAwCiAjZGVmaW5lIENVUkxPUFRUWVBFX09GRl9UICAgICAgICAgMzAwMDAKKyNkZWZpbmUgQ1VSTE9QVFRZUEVfQkxPQiAgICAgICAgICA0MDAwMAogCiAvKiAqU1RSSU5HUE9JTlQgaXMgYW4gYWxpYXMgZm9yIE9CSkVDVFBPSU5UIHRvIGFsbG93IHRvb2xzIHRvIGV4dHJhY3QgdGhlCiAgICBzdHJpbmcgb3B0aW9ucyBmcm9tIHRoZSBoZWFkZXIgZmlsZSAqLwogCi0vKiBuYW1lIGlzIHVwcGVyY2FzZSBDVVJMT1BUXzxuYW1lPiwKLSAgIHR5cGUgaXMgb25lIG9mIHRoZSBkZWZpbmVkIENVUkxPUFRUWVBFXzx0eXBlPgotICAgbnVtYmVyIGlzIHVuaXF1ZSBpZGVudGlmaWVyICovCi0jaWZkZWYgQ0lOSVQKLSN1bmRlZiBDSU5JVAotI2VuZGlmCiAKLSNpZmRlZiBDVVJMX0lTT0NQUAotI2RlZmluZSBDSU5JVChuYSx0LG51KSBDVVJMT1BUXyAjIyBuYSA9IENVUkxPUFRUWVBFXyAjIyB0ICsgbnUKLSNlbHNlCi0vKiBUaGUgbWFjcm8gIiMjIiBpcyBJU08gQywgd2UgYXNzdW1lIHByZS1JU08gQyBkb2Vzbid0IHN1cHBvcnQgaXQuICovCi0jZGVmaW5lIExPTkcgICAgICAgICAgQ1VSTE9QVFRZUEVfTE9ORwotI2RlZmluZSBPQkpFQ1RQT0lOVCAgIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UCi0jZGVmaW5lIFNUUklOR1BPSU5UICAgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQKLSNkZWZpbmUgRlVOQ1RJT05QT0lOVCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5UCi0jZGVmaW5lIE9GRl9UICAgICAgICAgQ1VSTE9QVFRZUEVfT0ZGX1QKLSNkZWZpbmUgQ0lOSVQobmFtZSx0eXBlLG51bWJlcikgQ1VSTE9QVF8vKiovbmFtZSA9IHR5cGUgKyBudW1iZXIKLSNlbmRpZgorI2RlZmluZSBDVVJMT1BUKG5hLHQsbnUpIG5hID0gdCArIG51CisKKy8qIGhhbmR5IGFsaWFzZXMgdGhhdCBtYWtlIG5vIHJ1bi10aW1lIGRpZmZlcmVuY2UgKi8KKyNkZWZpbmUgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQgIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UCisjZGVmaW5lIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQgIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UCiAKIC8qCi0gKiBUaGlzIG1hY3JvLW1hbmlhIGJlbG93IHNldHVwcyB0aGUgQ1VSTE9QVF9bd2hhdF0gZW51bSwgdG8gYmUgdXNlZCB3aXRoCi0gKiBjdXJsX2Vhc3lfc2V0b3B0KCkuIFRoZSBmaXJzdCBhcmd1bWVudCBpbiB0aGUgQ0lOSVQoKSBtYWNybyBpcyB0aGUgW3doYXRdCi0gKiB3b3JkLgorICogQWxsIENVUkxPUFRfKiB2YWx1ZXMuCiAgKi8KIAogdHlwZWRlZiBlbnVtIHsKICAgLyogVGhpcyBpcyB0aGUgRklMRSAqIG9yIHZvaWQgKiB0aGUgcmVndWxhciBvdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8uICovCi0gIENJTklUKFdSSVRFREFUQSwgT0JKRUNUUE9JTlQsIDEpLAorICBDVVJMT1BUKENVUkxPUFRfV1JJVEVEQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMSksCiAKICAgLyogVGhlIGZ1bGwgVVJMIHRvIGdldC9wdXQgKi8KLSAgQ0lOSVQoVVJMLCBTVFJJTkdQT0lOVCwgMiksCisgIENVUkxPUFQoQ1VSTE9QVF9VUkwsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyKSwKIAogICAvKiBQb3J0IG51bWJlciB0byBjb25uZWN0IHRvLCBpZiBvdGhlciB0aGFuIGRlZmF1bHQuICovCi0gIENJTklUKFBPUlQsIExPTkcsIDMpLAorICBDVVJMT1BUKENVUkxPUFRfUE9SVCwgQ1VSTE9QVFRZUEVfTE9ORywgMyksCiAKICAgLyogTmFtZSBvZiBwcm94eSB0byB1c2UuICovCi0gIENJTklUKFBST1hZLCBTVFJJTkdQT0lOVCwgNCksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDQpLAogCiAgIC8qICJ1c2VyOnBhc3N3b3JkO29wdGlvbnMiIHRvIHVzZSB3aGVuIGZldGNoaW5nLiAqLwotICBDSU5JVChVU0VSUFdELCBTVFJJTkdQT0lOVCwgNSksCisgIENVUkxPUFQoQ1VSTE9QVF9VU0VSUFdELCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNSksCiAKICAgLyogInVzZXI6cGFzc3dvcmQiIHRvIHVzZSB3aXRoIHByb3h5LiAqLwotICBDSU5JVChQUk9YWVVTRVJQV0QsIFNUUklOR1BPSU5ULCA2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZVVNFUlBXRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDYpLAogCiAgIC8qIFJhbmdlIHRvIGdldCwgc3BlY2lmaWVkIGFzIGFuIEFTQ0lJIHN0cmluZy4gKi8KLSAgQ0lOSVQoUkFOR0UsIFNUUklOR1BPSU5ULCA3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JBTkdFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNyksCiAKICAgLyogbm90IHVzZWQgKi8KIAogICAvKiBTcGVjaWZpZWQgZmlsZSBzdHJlYW0gdG8gdXBsb2FkIGZyb20gKHVzZSBhcyBpbnB1dCk6ICovCi0gIENJTklUKFJFQUREQVRBLCBPQkpFQ1RQT0lOVCwgOSksCisgIENVUkxPUFQoQ1VSTE9QVF9SRUFEREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDkpLAogCiAgIC8qIEJ1ZmZlciB0byByZWNlaXZlIGVycm9yIG1lc3NhZ2VzIGluLCBtdXN0IGJlIGF0IGxlYXN0IENVUkxfRVJST1JfU0laRQogICAgKiBieXRlcyBiaWcuICovCi0gIENJTklUKEVSUk9SQlVGRkVSLCBPQkpFQ1RQT0lOVCwgMTApLAorICBDVVJMT1BUKENVUkxPUFRfRVJST1JCVUZGRVIsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxMCksCiAKICAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBzdG9yZSB0aGUgb3V0cHV0IChpbnN0ZWFkIG9mIGZ3cml0ZSkuIFRoZQogICAgKiBwYXJhbWV0ZXJzIHdpbGwgdXNlIGZ3cml0ZSgpIHN5bnRheCwgbWFrZSBzdXJlIHRvIGZvbGxvdyB0aGVtLiAqLwotICBDSU5JVChXUklURUZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxMSksCisgIENVUkxPUFQoQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxMSksCiAKICAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byByZWFkIHRoZSBpbnB1dCAoaW5zdGVhZCBvZiBmcmVhZCkuIFRoZQogICAgKiBwYXJhbWV0ZXJzIHdpbGwgdXNlIGZyZWFkKCkgc3ludGF4LCBtYWtlIHN1cmUgdG8gZm9sbG93IHRoZW0uICovCi0gIENJTklUKFJFQURGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTIpLAorICBDVVJMT1BUKENVUkxPUFRfUkVBREZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxMiksCiAKICAgLyogVGltZS1vdXQgdGhlIHJlYWQgb3BlcmF0aW9uIGFmdGVyIHRoaXMgYW1vdW50IG9mIHNlY29uZHMgKi8KLSAgQ0lOSVQoVElNRU9VVCwgTE9ORywgMTMpLAorICBDVVJMT1BUKENVUkxPUFRfVElNRU9VVCwgQ1VSTE9QVFRZUEVfTE9ORywgMTMpLAogCiAgIC8qIElmIHRoZSBDVVJMT1BUX0lORklMRSBpcyB1c2VkLCB0aGlzIGNhbiBiZSB1c2VkIHRvIGluZm9ybSBsaWJjdXJsIGFib3V0CiAgICAqIGhvdyBsYXJnZSB0aGUgZmlsZSBiZWluZyBzZW50IHJlYWxseSBpcy4gVGhhdCBhbGxvd3MgYmV0dGVyIGVycm9yCkBAIC0xMDA3LDIwICsxMDE3LDIwIEBACiAgICAqIHdoaWNoIHRha2VzIGFuIG9mZl90IHR5cGUsIGFsbG93aW5nIHBsYXRmb3JtcyB3aXRoIGxhcmdlciBvZmZfdAogICAgKiBzaXplcyB0byBoYW5kbGUgbGFyZ2VyIGZpbGVzLiAgU2VlIGJlbG93IGZvciBJTkZJTEVTSVpFX0xBUkdFLgogICAgKi8KLSAgQ0lOSVQoSU5GSUxFU0laRSwgTE9ORywgMTQpLAorICBDVVJMT1BUKENVUkxPUFRfSU5GSUxFU0laRSwgQ1VSTE9QVFRZUEVfTE9ORywgMTQpLAogCiAgIC8qIFBPU1Qgc3RhdGljIGlucHV0IGZpZWxkcy4gKi8KLSAgQ0lOSVQoUE9TVEZJRUxEUywgT0JKRUNUUE9JTlQsIDE1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BPU1RGSUVMRFMsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxNSksCiAKICAgLyogU2V0IHRoZSByZWZlcnJlciBwYWdlIChuZWVkZWQgYnkgc29tZSBDR0lzKSAqLwotICBDSU5JVChSRUZFUkVSLCBTVFJJTkdQT0lOVCwgMTYpLAorICBDVVJMT1BUKENVUkxPUFRfUkVGRVJFUiwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE2KSwKIAogICAvKiBTZXQgdGhlIEZUUCBQT1JUIHN0cmluZyAoaW50ZXJmYWNlIG5hbWUsIG5hbWVkIG9yIG51bWVyaWNhbCBJUCBhZGRyZXNzKQogICAgICBVc2UgaS5lICctJyB0byB1c2UgZGVmYXVsdCBhZGRyZXNzLiAqLwotICBDSU5JVChGVFBQT1JULCBTVFJJTkdQT0lOVCwgMTcpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQUE9SVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3KSwKIAogICAvKiBTZXQgdGhlIFVzZXItQWdlbnQgc3RyaW5nIChleGFtaW5lZCBieSBzb21lIENHSXMpICovCi0gIENJTklUKFVTRVJBR0VOVCwgU1RSSU5HUE9JTlQsIDE4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1VTRVJBR0VOVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE4KSwKIAogICAvKiBJZiB0aGUgZG93bmxvYWQgcmVjZWl2ZXMgbGVzcyB0aGFuICJsb3cgc3BlZWQgbGltaXQiIGJ5dGVzL3NlY29uZAogICAgKiBkdXJpbmcgImxvdyBzcGVlZCB0aW1lIiBzZWNvbmRzLCB0aGUgb3BlcmF0aW9ucyBpcyBhYm9ydGVkLgpAQCAtMTAyOSwxMCArMTAzOSwxMCBAQAogICAgKi8KIAogICAvKiBTZXQgdGhlICJsb3cgc3BlZWQgbGltaXQiICovCi0gIENJTklUKExPV19TUEVFRF9MSU1JVCwgTE9ORywgMTkpLAorICBDVVJMT1BUKENVUkxPUFRfTE9XX1NQRUVEX0xJTUlULCBDVVJMT1BUVFlQRV9MT05HLCAxOSksCiAKICAgLyogU2V0IHRoZSAibG93IHNwZWVkIHRpbWUiICovCi0gIENJTklUKExPV19TUEVFRF9USU1FLCBMT05HLCAyMCksCisgIENVUkxPUFQoQ1VSTE9QVF9MT1dfU1BFRURfVElNRSwgQ1VSTE9QVFRZUEVfTE9ORywgMjApLAogCiAgIC8qIFNldCB0aGUgY29udGludWF0aW9uIG9mZnNldC4KICAgICoKQEAgLTEwNDAsNDggKzEwNTAsNDggQEAKICAgICogb2ZmX3QgdHlwZXMsIGFsbG93aW5nIGZvciBsYXJnZSBmaWxlIG9mZnNldHMgb24gcGxhdGZvcm1zIHdoaWNoCiAgICAqIHVzZSBsYXJnZXItdGhhbi0zMi1iaXQgb2ZmX3Qncy4gIExvb2sgYmVsb3cgZm9yIFJFU1VNRV9GUk9NX0xBUkdFLgogICAgKi8KLSAgQ0lOSVQoUkVTVU1FX0ZST00sIExPTkcsIDIxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFU1VNRV9GUk9NLCBDVVJMT1BUVFlQRV9MT05HLCAyMSksCiAKICAgLyogU2V0IGNvb2tpZSBpbiByZXF1ZXN0OiAqLwotICBDSU5JVChDT09LSUUsIFNUUklOR1BPSU5ULCAyMiksCisgIENVUkxPUFQoQ1VSTE9QVF9DT09LSUUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMiksCiAKICAgLyogVGhpcyBwb2ludHMgdG8gYSBsaW5rZWQgbGlzdCBvZiBoZWFkZXJzLCBzdHJ1Y3QgY3VybF9zbGlzdCBraW5kLiBUaGlzCiAgICAgIGxpc3QgaXMgYWxzbyB1c2VkIGZvciBSVFNQIChpbiBzcGl0ZSBvZiBpdHMgbmFtZSkgKi8KLSAgQ0lOSVQoSFRUUEhFQURFUiwgT0JKRUNUUE9JTlQsIDIzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFBIRUFERVIsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDIzKSwKIAogICAvKiBUaGlzIHBvaW50cyB0byBhIGxpbmtlZCBsaXN0IG9mIHBvc3QgZW50cmllcywgc3RydWN0IGN1cmxfaHR0cHBvc3QgKi8KLSAgQ0lOSVQoSFRUUFBPU1QsIE9CSkVDVFBPSU5ULCAyNCksCisgIENVUkxPUFQoQ1VSTE9QVF9IVFRQUE9TVCwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDI0KSwKIAogICAvKiBuYW1lIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1jZXJ0aWZpY2F0ZSAqLwotICBDSU5JVChTU0xDRVJULCBTVFJJTkdQT0lOVCwgMjUpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMQ0VSVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI1KSwKIAogICAvKiBwYXNzd29yZCBmb3IgdGhlIFNTTCBvciBTU0ggcHJpdmF0ZSBrZXkgKi8KLSAgQ0lOSVQoS0VZUEFTU1dELCBTVFJJTkdQT0lOVCwgMjYpLAorICBDVVJMT1BUKENVUkxPUFRfS0VZUEFTU1dELCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjYpLAogCiAgIC8qIHNlbmQgVFlQRSBwYXJhbWV0ZXI/ICovCi0gIENJTklUKENSTEYsIExPTkcsIDI3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NSTEYsIENVUkxPUFRUWVBFX0xPTkcsIDI3KSwKIAogICAvKiBzZW5kIGxpbmtlZC1saXN0IG9mIFFVT1RFIGNvbW1hbmRzICovCi0gIENJTklUKFFVT1RFLCBPQkpFQ1RQT0lOVCwgMjgpLAorICBDVVJMT1BUKENVUkxPUFRfUVVPVEUsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDI4KSwKIAogICAvKiBzZW5kIEZJTEUgKiBvciB2b2lkICogdG8gc3RvcmUgaGVhZGVycyB0bywgaWYgeW91IHVzZSBhIGNhbGxiYWNrIGl0CiAgICAgIGlzIHNpbXBseSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHVubW9kaWZpZWQgKi8KLSAgQ0lOSVQoSEVBREVSREFUQSwgT0JKRUNUUE9JTlQsIDI5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hFQURFUkRBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyOSksCiAKICAgLyogcG9pbnQgdG8gYSBmaWxlIHRvIHJlYWQgdGhlIGluaXRpYWwgY29va2llcyBmcm9tLCBhbHNvIGVuYWJsZXMKICAgICAgImNvb2tpZSBhd2FyZW5lc3MiICovCi0gIENJTklUKENPT0tJRUZJTEUsIFNUUklOR1BPSU5ULCAzMSksCisgIENVUkxPUFQoQ1VSTE9QVF9DT09LSUVGSUxFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMzEpLAogCiAgIC8qIFdoYXQgdmVyc2lvbiB0byBzcGVjaWZpY2FsbHkgdHJ5IHRvIHVzZS4KICAgICAgU2VlIENVUkxfU1NMVkVSU0lPTiBkZWZpbmVzIGJlbG93LiAqLwotICBDSU5JVChTU0xWRVJTSU9OLCBMT05HLCAzMiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xWRVJTSU9OLCBDVVJMT1BUVFlQRV9MT05HLCAzMiksCiAKICAgLyogV2hhdCBraW5kIG9mIEhUVFAgdGltZSBjb25kaXRpb24gdG8gdXNlLCBzZWUgZGVmaW5lcyAqLwotICBDSU5JVChUSU1FQ09ORElUSU9OLCBMT05HLCAzMyksCisgIENVUkxPUFQoQ1VSTE9QVF9USU1FQ09ORElUSU9OLCBDVVJMT1BUVFlQRV9MT05HLCAzMyksCiAKICAgLyogVGltZSB0byB1c2Ugd2l0aCB0aGUgYWJvdmUgY29uZGl0aW9uLiBTcGVjaWZpZWQgaW4gbnVtYmVyIG9mIHNlY29uZHMKICAgICAgc2luY2UgMSBKYW4gMTk3MCAqLwotICBDSU5JVChUSU1FVkFMVUUsIExPTkcsIDM0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RJTUVWQUxVRSwgQ1VSTE9QVFRZUEVfTE9ORywgMzQpLAogCiAgIC8qIDM1ID0gT0JTT0xFVEUgKi8KIApAQCAtMTA4OSwzNyArMTA5OSw1OCBAQAogICAgICBIVFRQOiBERUxFVEUsIFRSQUNFIGFuZCBvdGhlcnMKICAgICAgRlRQOiB0byB1c2UgYSBkaWZmZXJlbnQgbGlzdCBjb21tYW5kCiAgICAgICovCi0gIENJTklUKENVU1RPTVJFUVVFU1QsIFNUUklOR1BPSU5ULCAzNiksCisgIENVUkxPUFQoQ1VSTE9QVF9DVVNUT01SRVFVRVNULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMzYpLAogCiAgIC8qIEZJTEUgaGFuZGxlIHRvIHVzZSBpbnN0ZWFkIG9mIHN0ZGVyciAqLwotICBDSU5JVChTVERFUlIsIE9CSkVDVFBPSU5ULCAzNyksCisgIENVUkxPUFQoQ1VSTE9QVF9TVERFUlIsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAzNyksCiAKICAgLyogMzggaXMgbm90IHVzZWQgKi8KIAogICAvKiBzZW5kIGxpbmtlZC1saXN0IG9mIHBvc3QtdHJhbnNmZXIgUVVPVEUgY29tbWFuZHMgKi8KLSAgQ0lOSVQoUE9TVFFVT1RFLCBPQkpFQ1RQT0lOVCwgMzkpLAorICBDVVJMT1BUKENVUkxPUFRfUE9TVFFVT1RFLCBDVVJMT1BUVFlQRV9TTElTVFBPSU5ULCAzOSksCiAKLSAgQ0lOSVQoT0JTT0xFVEU0MCwgT0JKRUNUUE9JTlQsIDQwKSwgLyogT0JTT0xFVEUsIGRvIG5vdCB1c2UhICovCisgICAvKiBPQlNPTEVURSwgZG8gbm90IHVzZSEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX09CU09MRVRFNDAsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCA0MCksCiAKLSAgQ0lOSVQoVkVSQk9TRSwgTE9ORywgNDEpLCAgICAgIC8qIHRhbGsgYSBsb3QgKi8KLSAgQ0lOSVQoSEVBREVSLCBMT05HLCA0MiksICAgICAgIC8qIHRocm93IHRoZSBoZWFkZXIgb3V0IHRvbyAqLwotICBDSU5JVChOT1BST0dSRVNTLCBMT05HLCA0MyksICAgLyogc2h1dCBvZmYgdGhlIHByb2dyZXNzIG1ldGVyICovCi0gIENJTklUKE5PQk9EWSwgTE9ORywgNDQpLCAgICAgICAvKiB1c2UgSEVBRCB0byBnZXQgaHR0cCBkb2N1bWVudCAqLwotICBDSU5JVChGQUlMT05FUlJPUiwgTE9ORywgNDUpLCAgLyogbm8gb3V0cHV0IG9uIGh0dHAgZXJyb3IgY29kZXMgPj0gNDAwICovCi0gIENJTklUKFVQTE9BRCwgTE9ORywgNDYpLCAgICAgICAvKiB0aGlzIGlzIGFuIHVwbG9hZCAqLwotICBDSU5JVChQT1NULCBMT05HLCA0NyksICAgICAgICAgLyogSFRUUCBQT1NUIG1ldGhvZCAqLwotICBDSU5JVChESVJMSVNUT05MWSwgTE9ORywgNDgpLCAgLyogYmFyZSBuYW1lcyB3aGVuIGxpc3RpbmcgZGlyZWN0b3JpZXMgKi8KKyAgLyogdGFsayBhIGxvdCAqLworICBDVVJMT1BUKENVUkxPUFRfVkVSQk9TRSwgQ1VSTE9QVFRZUEVfTE9ORywgNDEpLAogCi0gIENJTklUKEFQUEVORCwgTE9ORywgNTApLCAgICAgICAvKiBBcHBlbmQgaW5zdGVhZCBvZiBvdmVyd3JpdGUgb24gdXBsb2FkISAqLworICAvKiB0aHJvdyB0aGUgaGVhZGVyIG91dCB0b28gKi8KKyAgQ1VSTE9QVChDVVJMT1BUX0hFQURFUiwgQ1VSTE9QVFRZUEVfTE9ORywgNDIpLAorCisgIC8qIHNodXQgb2ZmIHRoZSBwcm9ncmVzcyBtZXRlciAqLworICBDVVJMT1BUKENVUkxPUFRfTk9QUk9HUkVTUywgQ1VSTE9QVFRZUEVfTE9ORywgNDMpLAorCisgIC8qIHVzZSBIRUFEIHRvIGdldCBodHRwIGRvY3VtZW50ICovCisgIENVUkxPUFQoQ1VSTE9QVF9OT0JPRFksIENVUkxPUFRUWVBFX0xPTkcsIDQ0KSwKKworICAvKiBubyBvdXRwdXQgb24gaHR0cCBlcnJvciBjb2RlcyA+PSA0MDAgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX0ZBSUxPTkVSUk9SLCBDVVJMT1BUVFlQRV9MT05HLCA0NSksCisKKyAgLyogdGhpcyBpcyBhbiB1cGxvYWQgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1VQTE9BRCwgQ1VSTE9QVFRZUEVfTE9ORywgNDYpLAorCisgIC8qIEhUVFAgUE9TVCBtZXRob2QgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1BPU1QsIENVUkxPUFRUWVBFX0xPTkcsIDQ3KSwKKworICAvKiBiYXJlIG5hbWVzIHdoZW4gbGlzdGluZyBkaXJlY3RvcmllcyAqLworICBDVVJMT1BUKENVUkxPUFRfRElSTElTVE9OTFksIENVUkxPUFRUWVBFX0xPTkcsIDQ4KSwKKworICAvKiBBcHBlbmQgaW5zdGVhZCBvZiBvdmVyd3JpdGUgb24gdXBsb2FkISAqLworICBDVVJMT1BUKENVUkxPUFRfQVBQRU5ELCBDVVJMT1BUVFlQRV9MT05HLCA1MCksCiAKICAgLyogU3BlY2lmeSB3aGV0aGVyIHRvIHJlYWQgdGhlIHVzZXIrcGFzc3dvcmQgZnJvbSB0aGUgLm5ldHJjIG9yIHRoZSBVUkwuCiAgICAqIFRoaXMgbXVzdCBiZSBvbmUgb2YgdGhlIENVUkxfTkVUUkNfKiBlbnVtcyBiZWxvdy4gKi8KLSAgQ0lOSVQoTkVUUkMsIExPTkcsIDUxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX05FVFJDLCBDVVJMT1BUVFlQRV9MT05HLCA1MSksCiAKLSAgQ0lOSVQoRk9MTE9XTE9DQVRJT04sIExPTkcsIDUyKSwgIC8qIHVzZSBMb2NhdGlvbjogTHVrZSEgKi8KKyAgLyogdXNlIExvY2F0aW9uOiBMdWtlISAqLworICBDVVJMT1BUKENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIENVUkxPUFRUWVBFX0xPTkcsIDUyKSwKIAotICBDSU5JVChUUkFOU0ZFUlRFWFQsIExPTkcsIDUzKSwgLyogdHJhbnNmZXIgZGF0YSBpbiB0ZXh0L0FTQ0lJIGZvcm1hdCAqLwotICBDSU5JVChQVVQsIExPTkcsIDU0KSwgICAgICAgICAgLyogSFRUUCBQVVQgKi8KKyAgIC8qIHRyYW5zZmVyIGRhdGEgaW4gdGV4dC9BU0NJSSBmb3JtYXQgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1RSQU5TRkVSVEVYVCwgQ1VSTE9QVFRZUEVfTE9ORywgNTMpLAorCisgIC8qIEhUVFAgUFVUICovCisgIENVUkxPUFQoQ1VSTE9QVF9QVVQsIENVUkxPUFRUWVBFX0xPTkcsIDU0KSwKIAogICAvKiA1NSA9IE9CU09MRVRFICovCiAKQEAgLTExMjcsMjY1ICsxMTU4LDI2NyBAQAogICAgKiBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlIGludGVybmFsIHByb2dyZXNzIGRpc3BsYXkKICAgICogZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sKICAgICogcHJvdG90eXBlIGRlZmluZXMuICovCi0gIENJTklUKFBST0dSRVNTRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDU2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDU2KSwKIAogICAvKiBEYXRhIHBhc3NlZCB0byB0aGUgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OIGFuZCBDVVJMT1BUX1hGRVJJTkZPRlVOQ1RJT04KICAgICAgY2FsbGJhY2tzICovCi0gIENJTklUKFBST0dSRVNTREFUQSwgT0JKRUNUUE9JTlQsIDU3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST0dSRVNTREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDU3KSwKICNkZWZpbmUgQ1VSTE9QVF9YRkVSSU5GT0RBVEEgQ1VSTE9QVF9QUk9HUkVTU0RBVEEKIAogICAvKiBXZSB3YW50IHRoZSByZWZlcnJlciBmaWVsZCBzZXQgYXV0b21hdGljYWxseSB3aGVuIGZvbGxvd2luZyBsb2NhdGlvbnMgKi8KLSAgQ0lOSVQoQVVUT1JFRkVSRVIsIExPTkcsIDU4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0FVVE9SRUZFUkVSLCBDVVJMT1BUVFlQRV9MT05HLCA1OCksCiAKICAgLyogUG9ydCBvZiB0aGUgcHJveHksIGNhbiBiZSBzZXQgaW4gdGhlIHByb3h5IHN0cmluZyBhcyB3ZWxsIHdpdGg6CiAgICAgICJbaG9zdF06W3BvcnRdIiAqLwotICBDSU5JVChQUk9YWVBPUlQsIExPTkcsIDU5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZUE9SVCwgQ1VSTE9QVFRZUEVfTE9ORywgNTkpLAogCiAgIC8qIHNpemUgb2YgdGhlIFBPU1QgaW5wdXQgZGF0YSwgaWYgc3RybGVuKCkgaXMgbm90IGdvb2QgdG8gdXNlICovCi0gIENJTklUKFBPU1RGSUVMRFNJWkUsIExPTkcsIDYwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDYwKSwKIAogICAvKiB0dW5uZWwgbm9uLWh0dHAgb3BlcmF0aW9ucyB0aHJvdWdoIGEgSFRUUCBwcm94eSAqLwotICBDSU5JVChIVFRQUFJPWFlUVU5ORUwsIExPTkcsIDYxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTCwgQ1VSTE9QVFRZUEVfTE9ORywgNjEpLAogCiAgIC8qIFNldCB0aGUgaW50ZXJmYWNlIHN0cmluZyB0byB1c2UgYXMgb3V0Z29pbmcgbmV0d29yayBpbnRlcmZhY2UgKi8KLSAgQ0lOSVQoSU5URVJGQUNFLCBTVFJJTkdQT0lOVCwgNjIpLAorICBDVVJMT1BUKENVUkxPUFRfSU5URVJGQUNFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNjIpLAogCiAgIC8qIFNldCB0aGUga3JiNC81IHNlY3VyaXR5IGxldmVsLCB0aGlzIGFsc28gZW5hYmxlcyBrcmI0LzUgYXdhcmVuZXNzLiAgVGhpcwogICAgKiBpcyBhIHN0cmluZywgJ2NsZWFyJywgJ3NhZmUnLCAnY29uZmlkZW50aWFsJyBvciAncHJpdmF0ZScuICBJZiB0aGUgc3RyaW5nCiAgICAqIGlzIHNldCBidXQgZG9lc24ndCBtYXRjaCBvbmUgb2YgdGhlc2UsICdwcml2YXRlJyB3aWxsIGJlIHVzZWQuICAqLwotICBDSU5JVChLUkJMRVZFTCwgU1RSSU5HUE9JTlQsIDYzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0tSQkxFVkVMLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNjMpLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBwZWVyIGluIHNzbCBoYW5kc2hha2UsIHNldCAxIHRvIHZlcmlmeS4gKi8KLSAgQ0lOSVQoU1NMX1ZFUklGWVBFRVIsIExPTkcsIDY0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBDVVJMT1BUVFlQRV9MT05HLCA2NCksCiAKICAgLyogVGhlIENBcGF0aCBvciBDQWZpbGUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgcGVlciBjZXJ0aWZpY2F0ZQogICAgICB0aGlzIG9wdGlvbiBpcyB1c2VkIG9ubHkgaWYgU1NMX1ZFUklGWVBFRVIgaXMgdHJ1ZSAqLwotICBDSU5JVChDQUlORk8sIFNUUklOR1BPSU5ULCA2NSksCisgIENVUkxPUFQoQ1VSTE9QVF9DQUlORk8sIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA2NSksCiAKICAgLyogNjYgPSBPQlNPTEVURSAqLwogICAvKiA2NyA9IE9CU09MRVRFICovCiAKICAgLyogTWF4aW11bSBudW1iZXIgb2YgaHR0cCByZWRpcmVjdHMgdG8gZm9sbG93ICovCi0gIENJTklUKE1BWFJFRElSUywgTE9ORywgNjgpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYUkVESVJTLCBDVVJMT1BUVFlQRV9MT05HLCA2OCksCiAKICAgLyogUGFzcyBhIGxvbmcgc2V0IHRvIDEgdG8gZ2V0IHRoZSBkYXRlIG9mIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnQgKGlmCiAgICAgIHBvc3NpYmxlKSEgUGFzcyBhIHplcm8gdG8gc2h1dCBpdCBvZmYuICovCi0gIENJTklUKEZJTEVUSU1FLCBMT05HLCA2OSksCisgIENVUkxPUFQoQ1VSTE9QVF9GSUxFVElNRSwgQ1VSTE9QVFRZUEVfTE9ORywgNjkpLAogCiAgIC8qIFRoaXMgcG9pbnRzIHRvIGEgbGlua2VkIGxpc3Qgb2YgdGVsbmV0IG9wdGlvbnMgKi8KLSAgQ0lOSVQoVEVMTkVUT1BUSU9OUywgT0JKRUNUUE9JTlQsIDcwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RFTE5FVE9QVElPTlMsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDcwKSwKIAogICAvKiBNYXggYW1vdW50IG9mIGNhY2hlZCBhbGl2ZSBjb25uZWN0aW9ucyAqLwotICBDSU5JVChNQVhDT05ORUNUUywgTE9ORywgNzEpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYQ09OTkVDVFMsIENVUkxPUFRUWVBFX0xPTkcsIDcxKSwKIAotICBDSU5JVChPQlNPTEVURTcyLCBMT05HLCA3MiksIC8qIE9CU09MRVRFLCBkbyBub3QgdXNlISAqLworICAvKiBPQlNPTEVURSwgZG8gbm90IHVzZSEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX09CU09MRVRFNzIsIENVUkxPUFRUWVBFX0xPTkcsIDcyKSwKIAogICAvKiA3MyA9IE9CU09MRVRFICovCiAKICAgLyogU2V0IHRvIGV4cGxpY2l0bHkgdXNlIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoZSB1cGNvbWluZyB0cmFuc2Zlci4KICAgICAgRG8gbm90IHVzZSB0aGlzIHVubGVzcyB5b3UncmUgYWJzb2x1dGVseSBzdXJlIG9mIHRoaXMsIGFzIGl0IG1ha2VzIHRoZQogICAgICBvcGVyYXRpb24gc2xvd2VyIGFuZCBpcyBsZXNzIGZyaWVuZGx5IGZvciB0aGUgbmV0d29yay4gKi8KLSAgQ0lOSVQoRlJFU0hfQ09OTkVDVCwgTE9ORywgNzQpLAorICBDVVJMT1BUKENVUkxPUFRfRlJFU0hfQ09OTkVDVCwgQ1VSTE9QVFRZUEVfTE9ORywgNzQpLAogCiAgIC8qIFNldCB0byBleHBsaWNpdGx5IGZvcmJpZCB0aGUgdXBjb21pbmcgdHJhbnNmZXIncyBjb25uZWN0aW9uIHRvIGJlIHJlLXVzZWQKICAgICAgd2hlbiBkb25lLiBEbyBub3QgdXNlIHRoaXMgdW5sZXNzIHlvdSdyZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhpcywgYXMgaXQKICAgICAgbWFrZXMgdGhlIG9wZXJhdGlvbiBzbG93ZXIgYW5kIGlzIGxlc3MgZnJpZW5kbHkgZm9yIHRoZSBuZXR3b3JrLiAqLwotICBDSU5JVChGT1JCSURfUkVVU0UsIExPTkcsIDc1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZPUkJJRF9SRVVTRSwgQ1VSTE9QVFRZUEVfTE9ORywgNzUpLAogCiAgIC8qIFNldCB0byBhIGZpbGUgbmFtZSB0aGF0IGNvbnRhaW5zIHJhbmRvbSBkYXRhIGZvciBsaWJjdXJsIHRvIHVzZSB0bwogICAgICBzZWVkIHRoZSByYW5kb20gZW5naW5lIHdoZW4gZG9pbmcgU1NMIGNvbm5lY3RzLiAqLwotICBDSU5JVChSQU5ET01fRklMRSwgU1RSSU5HUE9JTlQsIDc2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JBTkRPTV9GSUxFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgNzYpLAogCiAgIC8qIFNldCB0byB0aGUgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldCBwYXRobmFtZSAqLwotICBDSU5JVChFR0RTT0NLRVQsIFNUUklOR1BPSU5ULCA3NyksCisgIENVUkxPUFQoQ1VSTE9QVF9FR0RTT0NLRVQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA3NyksCiAKICAgLyogVGltZS1vdXQgY29ubmVjdCBvcGVyYXRpb25zIGFmdGVyIHRoaXMgYW1vdW50IG9mIHNlY29uZHMsIGlmIGNvbm5lY3RzIGFyZQogICAgICBPSyB3aXRoaW4gdGhpcyB0aW1lLCB0aGVuIGZpbmUuLi4gVGhpcyBvbmx5IGFib3J0cyB0aGUgY29ubmVjdCBwaGFzZS4gKi8KLSAgQ0lOSVQoQ09OTkVDVFRJTUVPVVQsIExPTkcsIDc4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCBDVVJMT1BUVFlQRV9MT05HLCA3OCksCiAKICAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBzdG9yZSBoZWFkZXJzIChpbnN0ZWFkIG9mIGZ3cml0ZSkuIFRoZQogICAgKiBwYXJhbWV0ZXJzIHdpbGwgdXNlIGZ3cml0ZSgpIHN5bnRheCwgbWFrZSBzdXJlIHRvIGZvbGxvdyB0aGVtLiAqLwotICBDSU5JVChIRUFERVJGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgNzkpLAorICBDVVJMT1BUKENVUkxPUFRfSEVBREVSRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDc5KSwKIAogICAvKiBTZXQgdGhpcyB0byBmb3JjZSB0aGUgSFRUUCByZXF1ZXN0IHRvIGdldCBiYWNrIHRvIEdFVC4gT25seSByZWFsbHkgdXNhYmxlCiAgICAgIGlmIFBPU1QsIFBVVCBvciBhIGN1c3RvbSByZXF1ZXN0IGhhdmUgYmVlbiB1c2VkIGZpcnN0LgogICAgKi8KLSAgQ0lOSVQoSFRUUEdFVCwgTE9ORywgODApLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUEdFVCwgQ1VSTE9QVFRZUEVfTE9ORywgODApLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBDb21tb24gbmFtZSBmcm9tIHRoZSBwZWVyIGNlcnRpZmljYXRlIGluIHNzbAogICAgKiBoYW5kc2hha2UsIHNldCAxIHRvIGNoZWNrIGV4aXN0ZW5jZSwgMiB0byBlbnN1cmUgdGhhdCBpdCBtYXRjaGVzIHRoZQogICAgKiBwcm92aWRlZCBob3N0bmFtZS4gKi8KLSAgQ0lOSVQoU1NMX1ZFUklGWUhPU1QsIExPTkcsIDgxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9WRVJJRllIT1NULCBDVVJMT1BUVFlQRV9MT05HLCA4MSksCiAKICAgLyogU3BlY2lmeSB3aGljaCBmaWxlIG5hbWUgdG8gd3JpdGUgYWxsIGtub3duIGNvb2tpZXMgaW4gYWZ0ZXIgY29tcGxldGVkCiAgICAgIG9wZXJhdGlvbi4gU2V0IGZpbGUgbmFtZSB0byAiLSIgKGRhc2gpIHRvIG1ha2UgaXQgZ28gdG8gc3Rkb3V0LiAqLwotICBDSU5JVChDT09LSUVKQVIsIFNUUklOR1BPSU5ULCA4MiksCisgIENVUkxPUFQoQ1VSTE9QVF9DT09LSUVKQVIsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA4MiksCiAKICAgLyogU3BlY2lmeSB3aGljaCBTU0wgY2lwaGVycyB0byB1c2UgKi8KLSAgQ0lOSVQoU1NMX0NJUEhFUl9MSVNULCBTVFJJTkdQT0lOVCwgODMpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMX0NJUEhFUl9MSVNULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgODMpLAogCiAgIC8qIFNwZWNpZnkgd2hpY2ggSFRUUCB2ZXJzaW9uIHRvIHVzZSEgVGhpcyBtdXN0IGJlIHNldCB0byBvbmUgb2YgdGhlCiAgICAgIENVUkxfSFRUUF9WRVJTSU9OKiBlbnVtcyBzZXQgYmVsb3cuICovCi0gIENJTklUKEhUVFBfVkVSU0lPTiwgTE9ORywgODQpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUF9WRVJTSU9OLCBDVVJMT1BUVFlQRV9MT05HLCA4NCksCiAKICAgLyogU3BlY2lmaWNhbGx5IHN3aXRjaCBvbiBvciBvZmYgdGhlIEZUUCBlbmdpbmUncyB1c2Ugb2YgdGhlIEVQU1YgY29tbWFuZC4gQnkKICAgICAgZGVmYXVsdCwgdGhhdCBvbmUgd2lsbCBhbHdheXMgYmUgYXR0ZW1wdGVkIGJlZm9yZSB0aGUgbW9yZSB0cmFkaXRpb25hbAogICAgICBQQVNWIGNvbW1hbmQuICovCi0gIENJTklUKEZUUF9VU0VfRVBTViwgTE9ORywgODUpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX1VTRV9FUFNWLCBDVVJMT1BUVFlQRV9MT05HLCA4NSksCiAKICAgLyogdHlwZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgU1NMLWNlcnRpZmljYXRlICgiREVSIiwgIlBFTSIsICJFTkciKSAqLwotICBDSU5JVChTU0xDRVJUVFlQRSwgU1RSSU5HUE9JTlQsIDg2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTENFUlRUWVBFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgODYpLAogCiAgIC8qIG5hbWUgb2YgdGhlIGZpbGUga2VlcGluZyB5b3VyIHByaXZhdGUgU1NMLWtleSAqLwotICBDSU5JVChTU0xLRVksIFNUUklOR1BPSU5ULCA4NyksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xLRVksIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA4NyksCiAKICAgLyogdHlwZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgcHJpdmF0ZSBTU0wta2V5ICgiREVSIiwgIlBFTSIsICJFTkciKSAqLwotICBDSU5JVChTU0xLRVlUWVBFLCBTVFJJTkdQT0lOVCwgODgpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMS0VZVFlQRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDg4KSwKIAogICAvKiBjcnlwdG8gZW5naW5lIGZvciB0aGUgU1NMLXN1YiBzeXN0ZW0gKi8KLSAgQ0lOSVQoU1NMRU5HSU5FLCBTVFJJTkdQT0lOVCwgODkpLAorICBDVVJMT1BUKENVUkxPUFRfU1NMRU5HSU5FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgODkpLAogCiAgIC8qIHNldCB0aGUgY3J5cHRvIGVuZ2luZSBmb3IgdGhlIFNTTC1zdWIgc3lzdGVtIGFzIGRlZmF1bHQKICAgICAgdGhlIHBhcmFtIGhhcyBubyBtZWFuaW5nLi4uCiAgICAqLwotICBDSU5JVChTU0xFTkdJTkVfREVGQVVMVCwgTE9ORywgOTApLAorICBDVVJMT1BUKENVUkxPUFRfU1NMRU5HSU5FX0RFRkFVTFQsIENVUkxPUFRUWVBFX0xPTkcsIDkwKSwKIAogICAvKiBOb24temVybyB2YWx1ZSBtZWFucyB0byB1c2UgdGhlIGdsb2JhbCBkbnMgY2FjaGUgKi8KLSAgQ0lOSVQoRE5TX1VTRV9HTE9CQUxfQ0FDSEUsIExPTkcsIDkxKSwgLyogREVQUkVDQVRFRCwgZG8gbm90IHVzZSEgKi8KKyAgLyogREVQUkVDQVRFRCwgZG8gbm90IHVzZSEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX0ROU19VU0VfR0xPQkFMX0NBQ0hFLCBDVVJMT1BUVFlQRV9MT05HLCA5MSksCiAKICAgLyogRE5TIGNhY2hlIHRpbWVvdXQgKi8KLSAgQ0lOSVQoRE5TX0NBQ0hFX1RJTUVPVVQsIExPTkcsIDkyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ROU19DQUNIRV9USU1FT1VULCBDVVJMT1BUVFlQRV9MT05HLCA5MiksCiAKICAgLyogc2VuZCBsaW5rZWQtbGlzdCBvZiBwcmUtdHJhbnNmZXIgUVVPVEUgY29tbWFuZHMgKi8KLSAgQ0lOSVQoUFJFUVVPVEUsIE9CSkVDVFBPSU5ULCA5MyksCisgIENVUkxPUFQoQ1VSTE9QVF9QUkVRVU9URSwgQ1VSTE9QVFRZUEVfU0xJU1RQT0lOVCwgOTMpLAogCiAgIC8qIHNldCB0aGUgZGVidWcgZnVuY3Rpb24gKi8KLSAgQ0lOSVQoREVCVUdGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgOTQpLAorICBDVVJMT1BUKENVUkxPUFRfREVCVUdGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgOTQpLAogCiAgIC8qIHNldCB0aGUgZGF0YSBmb3IgdGhlIGRlYnVnIGZ1bmN0aW9uICovCi0gIENJTklUKERFQlVHREFUQSwgT0JKRUNUUE9JTlQsIDk1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0RFQlVHREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDk1KSwKIAogICAvKiBtYXJrIHRoaXMgYXMgc3RhcnQgb2YgYSBjb29raWUgc2Vzc2lvbiAqLwotICBDSU5JVChDT09LSUVTRVNTSU9OLCBMT05HLCA5NiksCisgIENVUkxPUFQoQ1VSTE9QVF9DT09LSUVTRVNTSU9OLCBDVVJMT1BUVFlQRV9MT05HLCA5NiksCiAKICAgLyogVGhlIENBcGF0aCBkaXJlY3RvcnkgdXNlZCB0byB2YWxpZGF0ZSB0aGUgcGVlciBjZXJ0aWZpY2F0ZQogICAgICB0aGlzIG9wdGlvbiBpcyB1c2VkIG9ubHkgaWYgU1NMX1ZFUklGWVBFRVIgaXMgdHJ1ZSAqLwotICBDSU5JVChDQVBBVEgsIFNUUklOR1BPSU5ULCA5NyksCisgIENVUkxPUFQoQ1VSTE9QVF9DQVBBVEgsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCA5NyksCiAKICAgLyogSW5zdHJ1Y3QgbGliY3VybCB0byB1c2UgYSBzbWFsbGVyIHJlY2VpdmUgYnVmZmVyICovCi0gIENJTklUKEJVRkZFUlNJWkUsIExPTkcsIDk4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0JVRkZFUlNJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDk4KSwKIAogICAvKiBJbnN0cnVjdCBsaWJjdXJsIHRvIG5vdCB1c2UgYW55IHNpZ25hbC9hbGFybSBoYW5kbGVycywgZXZlbiB3aGVuIHVzaW5nCiAgICAgIHRpbWVvdXRzLiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgZm9yIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4KICAgICAgU2VlIGxpYmN1cmwtdGhlLWd1aWRlIGZvciBtb3JlIGJhY2tncm91bmQgaW5mb3JtYXRpb24uICovCi0gIENJTklUKE5PU0lHTkFMLCBMT05HLCA5OSksCisgIENVUkxPUFQoQ1VSTE9QVF9OT1NJR05BTCwgQ1VSTE9QVFRZUEVfTE9ORywgOTkpLAogCiAgIC8qIFByb3ZpZGUgYSBDVVJMU2hhcmUgZm9yIG11dGV4aW5nIG5vbi10cyBkYXRhICovCi0gIENJTklUKFNIQVJFLCBPQkpFQ1RQT0lOVCwgMTAwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NIQVJFLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTAwKSwKIAogICAvKiBpbmRpY2F0ZXMgdHlwZSBvZiBwcm94eS4gYWNjZXB0ZWQgdmFsdWVzIGFyZSBDVVJMUFJPWFlfSFRUUCAoZGVmYXVsdCksCiAgICAgIENVUkxQUk9YWV9IVFRQUywgQ1VSTFBST1hZX1NPQ0tTNCwgQ1VSTFBST1hZX1NPQ0tTNEEgYW5kCiAgICAgIENVUkxQUk9YWV9TT0NLUzUuICovCi0gIENJTklUKFBST1hZVFlQRSwgTE9ORywgMTAxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZVFlQRSwgQ1VSTE9QVFRZUEVfTE9ORywgMTAxKSwKIAogICAvKiBTZXQgdGhlIEFjY2VwdC1FbmNvZGluZyBzdHJpbmcuIFVzZSB0aGlzIHRvIHRlbGwgYSBzZXJ2ZXIgeW91IHdvdWxkIGxpa2UKICAgICAgdGhlIHJlc3BvbnNlIHRvIGJlIGNvbXByZXNzZWQuIEJlZm9yZSA3LjIxLjYsIHRoaXMgd2FzIGtub3duIGFzCiAgICAgIENVUkxPUFRfRU5DT0RJTkcgKi8KLSAgQ0lOSVQoQUNDRVBUX0VOQ09ESU5HLCBTVFJJTkdQT0lOVCwgMTAyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0FDQ0VQVF9FTkNPRElORywgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDEwMiksCiAKICAgLyogU2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0gIENJTklUKFBSSVZBVEUsIE9CSkVDVFBPSU5ULCAxMDMpLAorICBDVVJMT1BUKENVUkxPUFRfUFJJVkFURSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDEwMyksCiAKICAgLyogU2V0IGFsaWFzZXMgZm9yIEhUVFAgMjAwIGluIHRoZSBIVFRQIFJlc3BvbnNlIGhlYWRlciAqLwotICBDSU5JVChIVFRQMjAwQUxJQVNFUywgT0JKRUNUUE9JTlQsIDEwNCksCisgIENVUkxPUFQoQ1VSTE9QVF9IVFRQMjAwQUxJQVNFUywgQ1VSTE9QVFRZUEVfU0xJU1RQT0lOVCwgMTA0KSwKIAogICAvKiBDb250aW51ZSB0byBzZW5kIGF1dGhlbnRpY2F0aW9uICh1c2VyK3Bhc3N3b3JkKSB3aGVuIGZvbGxvd2luZyBsb2NhdGlvbnMsCiAgICAgIGV2ZW4gd2hlbiBob3N0bmFtZSBjaGFuZ2VkLiBUaGlzIGNhbiBwb3RlbnRpYWxseSBzZW5kIG9mZiB0aGUgbmFtZQogICAgICBhbmQgcGFzc3dvcmQgdG8gd2hhdGV2ZXIgaG9zdCB0aGUgc2VydmVyIGRlY2lkZXMuICovCi0gIENJTklUKFVOUkVTVFJJQ1RFRF9BVVRILCBMT05HLCAxMDUpLAorICBDVVJMT1BUKENVUkxPUFRfVU5SRVNUUklDVEVEX0FVVEgsIENVUkxPUFRUWVBFX0xPTkcsIDEwNSksCiAKICAgLyogU3BlY2lmaWNhbGx5IHN3aXRjaCBvbiBvciBvZmYgdGhlIEZUUCBlbmdpbmUncyB1c2Ugb2YgdGhlIEVQUlQgY29tbWFuZCAoCiAgICAgIGl0IGFsc28gZGlzYWJsZXMgdGhlIExQUlQgYXR0ZW1wdCkuIEJ5IGRlZmF1bHQsIHRob3NlIG9uZXMgd2lsbCBhbHdheXMgYmUKICAgICAgYXR0ZW1wdGVkIGJlZm9yZSB0aGUgZ29vZCBvbGQgdHJhZGl0aW9uYWwgUE9SVCBjb21tYW5kLiAqLwotICBDSU5JVChGVFBfVVNFX0VQUlQsIExPTkcsIDEwNiksCisgIENVUkxPUFQoQ1VSTE9QVF9GVFBfVVNFX0VQUlQsIENVUkxPUFRUWVBFX0xPTkcsIDEwNiksCiAKICAgLyogU2V0IHRoaXMgdG8gYSBiaXRtYXNrIHZhbHVlIHRvIGVuYWJsZSB0aGUgcGFydGljdWxhciBhdXRoZW50aWNhdGlvbnMKICAgICAgbWV0aG9kcyB5b3UgbGlrZS4gVXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCBDVVJMT1BUX1VTRVJQV0QuCiAgICAgIE5vdGUgdGhhdCBzZXR0aW5nIG11bHRpcGxlIGJpdHMgbWF5IGNhdXNlIGV4dHJhIG5ldHdvcmsgcm91bmQtdHJpcHMuICovCi0gIENJTklUKEhUVFBBVVRILCBMT05HLCAxMDcpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUEFVVEgsIENVUkxPUFRUWVBFX0xPTkcsIDEwNyksCiAKLSAgLyogU2V0IHRoZSBzc2wgY29udGV4dCBjYWxsYmFjayBmdW5jdGlvbiwgY3VycmVudGx5IG9ubHkgZm9yIE9wZW5TU0wgc3NsX2N0eAotICAgICBpbiBzZWNvbmQgYXJndW1lbnQuIFRoZSBmdW5jdGlvbiBtdXN0IGJlIG1hdGNoaW5nIHRoZQotICAgICBjdXJsX3NzbF9jdHhfY2FsbGJhY2sgcHJvdG8uICovCi0gIENJTklUKFNTTF9DVFhfRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDEwOCksCisgIC8qIFNldCB0aGUgc3NsIGNvbnRleHQgY2FsbGJhY2sgZnVuY3Rpb24sIGN1cnJlbnRseSBvbmx5IGZvciBPcGVuU1NMIG9yCisgICAgIFdvbGZTU0wgc3NsX2N0eCwgb3IgbWJlZFRMUyBtYmVkdGxzX3NzbF9jb25maWcgaW4gdGhlIHNlY29uZCBhcmd1bWVudC4KKyAgICAgVGhlIGZ1bmN0aW9uIG11c3QgbWF0Y2ggdGhlIGN1cmxfc3NsX2N0eF9jYWxsYmFjayBwcm90b3R5cGUuICovCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxMDgpLAogCiAgIC8qIFNldCB0aGUgdXNlcmRhdGEgZm9yIHRoZSBzc2wgY29udGV4dCBjYWxsYmFjayBmdW5jdGlvbidzIHRoaXJkCiAgICAgIGFyZ3VtZW50ICovCi0gIENJTklUKFNTTF9DVFhfREFUQSwgT0JKRUNUUE9JTlQsIDEwOSksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfQ1RYX0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxMDkpLAogCiAgIC8qIEZUUCBPcHRpb24gdGhhdCBjYXVzZXMgbWlzc2luZyBkaXJzIHRvIGJlIGNyZWF0ZWQgb24gdGhlIHJlbW90ZSBzZXJ2ZXIuCiAgICAgIEluIDcuMTkuNCB3ZSBpbnRyb2R1Y2VkIHRoZSBjb252ZW5pZW5jZSBlbnVtcyBmb3IgdGhpcyBvcHRpb24gdXNpbmcgdGhlCiAgICAgIENVUkxGVFBfQ1JFQVRFX0RJUiBwcmVmaXguCiAgICovCi0gIENJTklUKEZUUF9DUkVBVEVfTUlTU0lOR19ESVJTLCBMT05HLCAxMTApLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX0NSRUFURV9NSVNTSU5HX0RJUlMsIENVUkxPUFRUWVBFX0xPTkcsIDExMCksCiAKICAgLyogU2V0IHRoaXMgdG8gYSBiaXRtYXNrIHZhbHVlIHRvIGVuYWJsZSB0aGUgcGFydGljdWxhciBhdXRoZW50aWNhdGlvbnMKICAgICAgbWV0aG9kcyB5b3UgbGlrZS4gVXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCBDVVJMT1BUX1BST1hZVVNFUlBXRC4KICAgICAgTm90ZSB0aGF0IHNldHRpbmcgbXVsdGlwbGUgYml0cyBtYXkgY2F1c2UgZXh0cmEgbmV0d29yayByb3VuZC10cmlwcy4gKi8KLSAgQ0lOSVQoUFJPWFlBVVRILCBMT05HLCAxMTEpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlBVVRILCBDVVJMT1BUVFlQRV9MT05HLCAxMTEpLAogCiAgIC8qIEZUUCBvcHRpb24gdGhhdCBjaGFuZ2VzIHRoZSB0aW1lb3V0LCBpbiBzZWNvbmRzLCBhc3NvY2lhdGVkIHdpdGgKICAgICAgZ2V0dGluZyBhIHJlc3BvbnNlLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0cmFuc2ZlciB0aW1lb3V0IHRpbWUgYW5kCiAgICAgIGVzc2VudGlhbGx5IHBsYWNlcyBhIGRlbWFuZCBvbiB0aGUgRlRQIHNlcnZlciB0byBhY2tub3dsZWRnZSBjb21tYW5kcwogICAgICBpbiBhIHRpbWVseSBtYW5uZXIuICovCi0gIENJTklUKEZUUF9SRVNQT05TRV9USU1FT1VULCBMT05HLCAxMTIpLAorICBDVVJMT1BUKENVUkxPUFRfRlRQX1JFU1BPTlNFX1RJTUVPVVQsIENVUkxPUFRUWVBFX0xPTkcsIDExMiksCiAjZGVmaW5lIENVUkxPUFRfU0VSVkVSX1JFU1BPTlNFX1RJTUVPVVQgQ1VSTE9QVF9GVFBfUkVTUE9OU0VfVElNRU9VVAogCiAgIC8qIFNldCB0aGlzIG9wdGlvbiB0byBvbmUgb2YgdGhlIENVUkxfSVBSRVNPTFZFXyogZGVmaW5lcyAoc2VlIGJlbG93KSB0bwogICAgICB0ZWxsIGxpYmN1cmwgdG8gcmVzb2x2ZSBuYW1lcyB0byB0aG9zZSBJUCB2ZXJzaW9ucyBvbmx5LiBUaGlzIG9ubHkgaGFzCiAgICAgIGFmZmVjdCBvbiBzeXN0ZW1zIHdpdGggc3VwcG9ydCBmb3IgbW9yZSB0aGFuIG9uZSwgaS5lIElQdjQgX2FuZF8gSVB2Ni4gKi8KLSAgQ0lOSVQoSVBSRVNPTFZFLCBMT05HLCAxMTMpLAorICBDVVJMT1BUKENVUkxPUFRfSVBSRVNPTFZFLCBDVVJMT1BUVFlQRV9MT05HLCAxMTMpLAogCiAgIC8qIFNldCB0aGlzIG9wdGlvbiB0byBsaW1pdCB0aGUgc2l6ZSBvZiBhIGZpbGUgdGhhdCB3aWxsIGJlIGRvd25sb2FkZWQgZnJvbQogICAgICBhbiBIVFRQIG9yIEZUUCBzZXJ2ZXIuCiAKICAgICAgTm90ZSB0aGVyZSBpcyBhbHNvIF9MQVJHRSB2ZXJzaW9uIHdoaWNoIGFkZHMgbGFyZ2UgZmlsZSBzdXBwb3J0IGZvcgogICAgICBwbGF0Zm9ybXMgd2hpY2ggaGF2ZSBsYXJnZXIgb2ZmX3Qgc2l6ZXMuICBTZWUgTUFYRklMRVNJWkVfTEFSR0UgYmVsb3cuICovCi0gIENJTklUKE1BWEZJTEVTSVpFLCBMT05HLCAxMTQpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYRklMRVNJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDExNCksCiAKICAgLyogU2VlIHRoZSBjb21tZW50IGZvciBJTkZJTEVTSVpFIGFib3ZlLCBidXQgaW4gc2hvcnQsIHNwZWNpZmllcwogICAgKiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBiZWluZyB1cGxvYWRlZC4gIC0xIG1lYW5zIHVua25vd24uCiAgICAqLwotICBDSU5JVChJTkZJTEVTSVpFX0xBUkdFLCBPRkZfVCwgMTE1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lORklMRVNJWkVfTEFSR0UsIENVUkxPUFRUWVBFX09GRl9ULCAxMTUpLAogCi0gIC8qIFNldHMgdGhlIGNvbnRpbnVhdGlvbiBvZmZzZXQuICBUaGVyZSBpcyBhbHNvIGEgTE9ORyB2ZXJzaW9uIG9mIHRoaXM7Ci0gICAqIGxvb2sgYWJvdmUgZm9yIFJFU1VNRV9GUk9NLgorICAvKiBTZXRzIHRoZSBjb250aW51YXRpb24gb2Zmc2V0LiAgVGhlcmUgaXMgYWxzbyBhIENVUkxPUFRUWVBFX0xPTkcgdmVyc2lvbgorICAgKiBvZiB0aGlzOyBsb29rIGFib3ZlIGZvciBSRVNVTUVfRlJPTS4KICAgICovCi0gIENJTklUKFJFU1VNRV9GUk9NX0xBUkdFLCBPRkZfVCwgMTE2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFU1VNRV9GUk9NX0xBUkdFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMTE2KSwKIAogICAvKiBTZXRzIHRoZSBtYXhpbXVtIHNpemUgb2YgZGF0YSB0aGF0IHdpbGwgYmUgZG93bmxvYWRlZCBmcm9tCiAgICAqIGFuIEhUVFAgb3IgRlRQIHNlcnZlci4gIFNlZSBNQVhGSUxFU0laRSBhYm92ZSBmb3IgdGhlIExPTkcgdmVyc2lvbi4KICAgICovCi0gIENJTklUKE1BWEZJTEVTSVpFX0xBUkdFLCBPRkZfVCwgMTE3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX01BWEZJTEVTSVpFX0xBUkdFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMTE3KSwKIAogICAvKiBTZXQgdGhpcyBvcHRpb24gdG8gdGhlIGZpbGUgbmFtZSBvZiB5b3VyIC5uZXRyYyBmaWxlIHlvdSB3YW50IGxpYmN1cmwKICAgICAgdG8gcGFyc2UgKHVzaW5nIHRoZSBDVVJMT1BUX05FVFJDIG9wdGlvbikuIElmIG5vdCBzZXQsIGxpYmN1cmwgd2lsbCBkbwogICAgICBhIHBvb3IgYXR0ZW1wdCB0byBmaW5kIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYW5kIGNoZWNrIGZvciBhIC5uZXRyYwogICAgICBmaWxlIGluIHRoZXJlLiAqLwotICBDSU5JVChORVRSQ19GSUxFLCBTVFJJTkdQT0lOVCwgMTE4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX05FVFJDX0ZJTEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxMTgpLAogCiAgIC8qIEVuYWJsZSBTU0wvVExTIGZvciBGVFAsIHBpY2sgb25lIG9mOgogICAgICBDVVJMVVNFU1NMX1RSWSAgICAgLSB0cnkgdXNpbmcgU1NMLCBwcm9jZWVkIGFueXdheSBvdGhlcndpc2UKICAgICAgQ1VSTFVTRVNTTF9DT05UUk9MIC0gU1NMIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uIG9yIGZhaWwKICAgICAgQ1VSTFVTRVNTTF9BTEwgICAgIC0gU1NMIGZvciBhbGwgY29tbXVuaWNhdGlvbiBvciBmYWlsCiAgICovCi0gIENJTklUKFVTRV9TU0wsIExPTkcsIDExOSksCisgIENVUkxPUFQoQ1VSTE9QVF9VU0VfU1NMLCBDVVJMT1BUVFlQRV9MT05HLCAxMTkpLAogCiAgIC8qIFRoZSBfTEFSR0UgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQgUE9TVEZJRUxEU0laRSBvcHRpb24gKi8KLSAgQ0lOSVQoUE9TVEZJRUxEU0laRV9MQVJHRSwgT0ZGX1QsIDEyMCksCisgIENVUkxPUFQoQ1VSTE9QVF9QT1NURklFTERTSVpFX0xBUkdFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMTIwKSwKIAogICAvKiBFbmFibGUvZGlzYWJsZSB0aGUgVENQIE5hZ2xlIGFsZ29yaXRobSAqLwotICBDSU5JVChUQ1BfTk9ERUxBWSwgTE9ORywgMTIxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RDUF9OT0RFTEFZLCBDVVJMT1BUVFlQRV9MT05HLCAxMjEpLAogCiAgIC8qIDEyMiBPQlNPTEVURSwgdXNlZCBpbiA3LjEyLjMuIEdvbmUgaW4gNy4xMy4wICovCiAgIC8qIDEyMyBPQlNPTEVURS4gR29uZSBpbiA3LjE2LjAgKi8KQEAgLTE0MDUsMTQzICsxNDM4LDE0MyBAQAogICAgICBDVVJMRlRQQVVUSF9TU0wgICAgIC0gdHJ5ICJBVVRIIFNTTCIgZmlyc3QsIHRoZW4gVExTCiAgICAgIENVUkxGVFBBVVRIX1RMUyAgICAgLSB0cnkgIkFVVEggVExTIiBmaXJzdCwgdGhlbiBTU0wKICAgKi8KLSAgQ0lOSVQoRlRQU1NMQVVUSCwgTE9ORywgMTI5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUFNTTEFVVEgsIENVUkxPUFRUWVBFX0xPTkcsIDEyOSksCiAKLSAgQ0lOSVQoSU9DVExGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTMwKSwKLSAgQ0lOSVQoSU9DVExEQVRBLCBPQkpFQ1RQT0lOVCwgMTMxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lPQ1RMRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDEzMCksCisgIENVUkxPUFQoQ1VSTE9QVF9JT0NUTERBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxMzEpLAogCiAgIC8qIDEzMiBPQlNPTEVURS4gR29uZSBpbiA3LjE2LjAgKi8KICAgLyogMTMzIE9CU09MRVRFLiBHb25lIGluIDcuMTYuMCAqLwogCi0gIC8qIHplcm8gdGVybWluYXRlZCBzdHJpbmcgZm9yIHBhc3Mgb24gdG8gdGhlIEZUUCBzZXJ2ZXIgd2hlbiBhc2tlZCBmb3IKKyAgLyogbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBmb3IgcGFzcyBvbiB0byB0aGUgRlRQIHNlcnZlciB3aGVuIGFza2VkIGZvcgogICAgICAiYWNjb3VudCIgaW5mbyAqLwotICBDSU5JVChGVFBfQUNDT1VOVCwgU1RSSU5HUE9JTlQsIDEzNCksCisgIENVUkxPUFQoQ1VSTE9QVF9GVFBfQUNDT1VOVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDEzNCksCiAKICAgLyogZmVlZCBjb29raWUgaW50byBjb29raWUgZW5naW5lICovCi0gIENJTklUKENPT0tJRUxJU1QsIFNUUklOR1BPSU5ULCAxMzUpLAorICBDVVJMT1BUKENVUkxPUFRfQ09PS0lFTElTVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDEzNSksCiAKICAgLyogaWdub3JlIENvbnRlbnQtTGVuZ3RoICovCi0gIENJTklUKElHTk9SRV9DT05URU5UX0xFTkdUSCwgTE9ORywgMTM2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lHTk9SRV9DT05URU5UX0xFTkdUSCwgQ1VSTE9QVFRZUEVfTE9ORywgMTM2KSwKIAogICAvKiBTZXQgdG8gbm9uLXplcm8gdG8gc2tpcCB0aGUgSVAgYWRkcmVzcyByZWNlaXZlZCBpbiBhIDIyNyBQQVNWIEZUUCBzZXJ2ZXIKICAgICAgcmVzcG9uc2UuIFR5cGljYWxseSB1c2VkIGZvciBGVFAtU1NMIHB1cnBvc2VzIGJ1dCBpcyBub3QgcmVzdHJpY3RlZCB0bwogICAgICB0aGF0LiBsaWJjdXJsIHdpbGwgdGhlbiBpbnN0ZWFkIHVzZSB0aGUgc2FtZSBJUCBhZGRyZXNzIGl0IHVzZWQgZm9yIHRoZQogICAgICBjb250cm9sIGNvbm5lY3Rpb24uICovCi0gIENJTklUKEZUUF9TS0lQX1BBU1ZfSVAsIExPTkcsIDEzNyksCisgIENVUkxPUFQoQ1VSTE9QVF9GVFBfU0tJUF9QQVNWX0lQLCBDVVJMT1BUVFlQRV9MT05HLCAxMzcpLAogCiAgIC8qIFNlbGVjdCAiZmlsZSBtZXRob2QiIHRvIHVzZSB3aGVuIGRvaW5nIEZUUCwgc2VlIHRoZSBjdXJsX2Z0cG1ldGhvZAogICAgICBhYm92ZS4gKi8KLSAgQ0lOSVQoRlRQX0ZJTEVNRVRIT0QsIExPTkcsIDEzOCksCisgIENVUkxPUFQoQ1VSTE9QVF9GVFBfRklMRU1FVEhPRCwgQ1VSTE9QVFRZUEVfTE9ORywgMTM4KSwKIAogICAvKiBMb2NhbCBwb3J0IG51bWJlciB0byBiaW5kIHRoZSBzb2NrZXQgdG8gKi8KLSAgQ0lOSVQoTE9DQUxQT1JULCBMT05HLCAxMzkpLAorICBDVVJMT1BUKENVUkxPUFRfTE9DQUxQT1JULCBDVVJMT1BUVFlQRV9MT05HLCAxMzkpLAogCiAgIC8qIE51bWJlciBvZiBwb3J0cyB0byB0cnksIGluY2x1ZGluZyB0aGUgZmlyc3Qgb25lIHNldCB3aXRoIExPQ0FMUE9SVC4KICAgICAgVGh1cywgc2V0dGluZyBpdCB0byAxIHdpbGwgbWFrZSBubyBhZGRpdGlvbmFsIGF0dGVtcHRzIGJ1dCB0aGUgZmlyc3QuCiAgICovCi0gIENJTklUKExPQ0FMUE9SVFJBTkdFLCBMT05HLCAxNDApLAorICBDVVJMT1BUKENVUkxPUFRfTE9DQUxQT1JUUkFOR0UsIENVUkxPUFRUWVBFX0xPTkcsIDE0MCksCiAKICAgLyogbm8gdHJhbnNmZXIsIHNldCB1cCBjb25uZWN0aW9uIGFuZCBsZXQgYXBwbGljYXRpb24gdXNlIHRoZSBzb2NrZXQgYnkKICAgICAgZXh0cmFjdGluZyBpdCB3aXRoIENVUkxJTkZPX0xBU1RTT0NLRVQgKi8KLSAgQ0lOSVQoQ09OTkVDVF9PTkxZLCBMT05HLCAxNDEpLAorICBDVVJMT1BUKENVUkxPUFRfQ09OTkVDVF9PTkxZLCBDVVJMT1BUVFlQRV9MT05HLCAxNDEpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBmcm9tIHRoZQogICAgICBuZXR3b3JrIGVuY29kaW5nIChpbnN0ZWFkIG9mIHVzaW5nIHRoZSBpY29udiBjYWxscyBpbiBsaWJjdXJsKSAqLwotICBDSU5JVChDT05WX0ZST01fTkVUV09SS19GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTQyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNDIpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCB0byB0aGUKICAgICAgbmV0d29yayBlbmNvZGluZyAoaW5zdGVhZCBvZiB1c2luZyB0aGUgaWNvbnYgY2FsbHMgaW4gbGliY3VybCkgKi8KLSAgQ0lOSVQoQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxNDMpLAorICBDVVJMT1BUKENVUkxPUFRfQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNDMpLAogCiAgIC8qIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBmcm9tIFVURjgKICAgICAgKGluc3RlYWQgb2YgdXNpbmcgdGhlIGljb252IGNhbGxzIGluIGxpYmN1cmwpCiAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHVzZWQgb25seSBmb3IgU1NMIGNlcnRpZmljYXRlIHByb2Nlc3NpbmcgKi8KLSAgQ0lOSVQoQ09OVl9GUk9NX1VURjhfRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE0NCksCisgIENVUkxPUFQoQ1VSTE9QVF9DT05WX0ZST01fVVRGOF9GVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTQ0KSwKIAogICAvKiBpZiB0aGUgY29ubmVjdGlvbiBwcm9jZWVkcyB0b28gcXVpY2tseSB0aGVuIG5lZWQgdG8gc2xvdyBpdCBkb3duICovCiAgIC8qIGxpbWl0LXJhdGU6IG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQgdG8gc2VuZCBvciByZWNlaXZlICovCi0gIENJTklUKE1BWF9TRU5EX1NQRUVEX0xBUkdFLCBPRkZfVCwgMTQ1KSwKLSAgQ0lOSVQoTUFYX1JFQ1ZfU1BFRURfTEFSR0UsIE9GRl9ULCAxNDYpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYX1NFTkRfU1BFRURfTEFSR0UsIENVUkxPUFRUWVBFX09GRl9ULCAxNDUpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYX1JFQ1ZfU1BFRURfTEFSR0UsIENVUkxPUFRUWVBFX09GRl9ULCAxNDYpLAogCiAgIC8qIFBvaW50ZXIgdG8gY29tbWFuZCBzdHJpbmcgdG8gc2VuZCBpZiBVU0VSL1BBU1MgZmFpbHMuICovCi0gIENJTklUKEZUUF9BTFRFUk5BVElWRV9UT19VU0VSLCBTVFJJTkdQT0lOVCwgMTQ3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9BTFRFUk5BVElWRV9UT19VU0VSLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTQ3KSwKIAogICAvKiBjYWxsYmFjayBmdW5jdGlvbiBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyAqLwotICBDSU5JVChTT0NLT1BURlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE0OCksCi0gIENJTklUKFNPQ0tPUFREQVRBLCBPQkpFQ1RQT0lOVCwgMTQ5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTQ4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tPUFREQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTQ5KSwKIAogICAvKiBzZXQgdG8gMCB0byBkaXNhYmxlIHNlc3Npb24gSUQgcmUtdXNlIGZvciB0aGlzIHRyYW5zZmVyLCBkZWZhdWx0IGlzCiAgICAgIGVuYWJsZWQgKD09IDEpICovCi0gIENJTklUKFNTTF9TRVNTSU9OSURfQ0FDSEUsIExPTkcsIDE1MCksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfU0VTU0lPTklEX0NBQ0hFLCBDVVJMT1BUVFlQRV9MT05HLCAxNTApLAogCiAgIC8qIGFsbG93ZWQgU1NIIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKi8KLSAgQ0lOSVQoU1NIX0FVVEhfVFlQRVMsIExPTkcsIDE1MSksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfQVVUSF9UWVBFUywgQ1VSTE9QVFRZUEVfTE9ORywgMTUxKSwKIAogICAvKiBVc2VkIGJ5IHNjcC9zZnRwIHRvIGRvIHB1YmxpYy9wcml2YXRlIGtleSBhdXRoZW50aWNhdGlvbiAqLwotICBDSU5JVChTU0hfUFVCTElDX0tFWUZJTEUsIFNUUklOR1BPSU5ULCAxNTIpLAotICBDSU5JVChTU0hfUFJJVkFURV9LRVlGSUxFLCBTVFJJTkdQT0lOVCwgMTUzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE1MiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfUFJJVkFURV9LRVlGSUxFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTUzKSwKIAogICAvKiBTZW5kIENDQyAoQ2xlYXIgQ29tbWFuZCBDaGFubmVsKSBhZnRlciBhdXRoZW50aWNhdGlvbiAqLwotICBDSU5JVChGVFBfU1NMX0NDQywgTE9ORywgMTU0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9TU0xfQ0NDLCBDVVJMT1BUVFlQRV9MT05HLCAxNTQpLAogCiAgIC8qIFNhbWUgYXMgVElNRU9VVCBhbmQgQ09OTkVDVFRJTUVPVVQsIGJ1dCB3aXRoIG1zIHJlc29sdXRpb24gKi8KLSAgQ0lOSVQoVElNRU9VVF9NUywgTE9ORywgMTU1KSwKLSAgQ0lOSVQoQ09OTkVDVFRJTUVPVVRfTVMsIExPTkcsIDE1NiksCisgIENVUkxPUFQoQ1VSTE9QVF9USU1FT1VUX01TLCBDVVJMT1BUVFlQRV9MT05HLCAxNTUpLAorICBDVVJMT1BUKENVUkxPUFRfQ09OTkVDVFRJTUVPVVRfTVMsIENVUkxPUFRUWVBFX0xPTkcsIDE1NiksCiAKICAgLyogc2V0IHRvIHplcm8gdG8gZGlzYWJsZSB0aGUgbGliY3VybCdzIGRlY29kaW5nIGFuZCB0aHVzIHBhc3MgdGhlIHJhdyBib2R5CiAgICAgIGRhdGEgdG8gdGhlIGFwcGxpY2F0aW9uIGV2ZW4gd2hlbiBpdCBpcyBlbmNvZGVkL2NvbXByZXNzZWQgKi8KLSAgQ0lOSVQoSFRUUF9UUkFOU0ZFUl9ERUNPRElORywgTE9ORywgMTU3KSwKLSAgQ0lOSVQoSFRUUF9DT05URU5UX0RFQ09ESU5HLCBMT05HLCAxNTgpLAorICBDVVJMT1BUKENVUkxPUFRfSFRUUF9UUkFOU0ZFUl9ERUNPRElORywgQ1VSTE9QVFRZUEVfTE9ORywgMTU3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFBfQ09OVEVOVF9ERUNPRElORywgQ1VSTE9QVFRZUEVfTE9ORywgMTU4KSwKIAogICAvKiBQZXJtaXNzaW9uIHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9uIHRoZSByZW1vdGUKICAgICAgc2VydmVyIGZvciBwcm90b2NvbHMgdGhhdCBzdXBwb3J0IGl0LCBTRlRQL1NDUC9GSUxFICovCi0gIENJTklUKE5FV19GSUxFX1BFUk1TLCBMT05HLCAxNTkpLAotICBDSU5JVChORVdfRElSRUNUT1JZX1BFUk1TLCBMT05HLCAxNjApLAorICBDVVJMT1BUKENVUkxPUFRfTkVXX0ZJTEVfUEVSTVMsIENVUkxPUFRUWVBFX0xPTkcsIDE1OSksCisgIENVUkxPUFQoQ1VSTE9QVF9ORVdfRElSRUNUT1JZX1BFUk1TLCBDVVJMT1BUVFlQRV9MT05HLCAxNjApLAogCiAgIC8qIFNldCB0aGUgYmVoYXZpb3VyIG9mIFBPU1Qgd2hlbiByZWRpcmVjdGluZy4gVmFsdWVzIG11c3QgYmUgc2V0IHRvIG9uZQogICAgICBvZiBDVVJMX1JFRElSKiBkZWZpbmVzIGJlbG93LiBUaGlzIHVzZWQgdG8gYmUgY2FsbGVkIENVUkxPUFRfUE9TVDMwMSAqLwotICBDSU5JVChQT1NUUkVESVIsIExPTkcsIDE2MSksCisgIENVUkxPUFQoQ1VSTE9QVF9QT1NUUkVESVIsIENVUkxPUFRUWVBFX0xPTkcsIDE2MSksCiAKICAgLyogdXNlZCBieSBzY3Avc2Z0cCB0byB2ZXJpZnkgdGhlIGhvc3QncyBwdWJsaWMga2V5ICovCi0gIENJTklUKFNTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1LCBTVFJJTkdQT0lOVCwgMTYyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1LCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTYyKSwKIAogICAvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igb3BlbmluZyBzb2NrZXQgKGluc3RlYWQgb2Ygc29ja2V0KDIpKS4gT3B0aW9uYWxseSwKICAgICAgY2FsbGJhY2sgaXMgYWJsZSBjaGFuZ2UgdGhlIGFkZHJlc3Mgb3IgcmVmdXNlIHRvIGNvbm5lY3QgcmV0dXJuaW5nCiAgICAgIENVUkxfU09DS0VUX0JBRC4gIFRoZSBjYWxsYmFjayBzaG91bGQgaGF2ZSB0eXBlCiAgICAgIGN1cmxfb3BlbnNvY2tldF9jYWxsYmFjayAqLwotICBDSU5JVChPUEVOU09DS0VURlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE2MyksCi0gIENJTklUKE9QRU5TT0NLRVREQVRBLCBPQkpFQ1RQT0lOVCwgMTY0KSwKKyAgQ1VSTE9QVChDVVJMT1BUX09QRU5TT0NLRVRGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTYzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX09QRU5TT0NLRVREQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTY0KSwKIAogICAvKiBQT1NUIHZvbGF0aWxlIGlucHV0IGZpZWxkcy4gKi8KLSAgQ0lOSVQoQ09QWVBPU1RGSUVMRFMsIE9CSkVDVFBPSU5ULCAxNjUpLAorICBDVVJMT1BUKENVUkxPUFRfQ09QWVBPU1RGSUVMRFMsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxNjUpLAogCiAgIC8qIHNldCB0cmFuc2ZlciBtb2RlICg7dHlwZT08YXxpPikgd2hlbiBkb2luZyBGVFAgdmlhIGFuIEhUVFAgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfVFJBTlNGRVJfTU9ERSwgTE9ORywgMTY2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1RSQU5TRkVSX01PREUsIENVUkxPUFRUWVBFX0xPTkcsIDE2NiksCiAKICAgLyogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHNlZWtpbmcgaW4gdGhlIGlucHV0IHN0cmVhbSAqLwotICBDSU5JVChTRUVLRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE2NyksCi0gIENJTklUKFNFRUtEQVRBLCBPQkpFQ1RQT0lOVCwgMTY4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NFRUtGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTY3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NFRUtEQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTY4KSwKIAogICAvKiBDUkwgZmlsZSAqLwotICBDSU5JVChDUkxGSUxFLCBTVFJJTkdQT0lOVCwgMTY5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NSTEZJTEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNjkpLAogCiAgIC8qIElzc3VlciBjZXJ0aWZpY2F0ZSAqLwotICBDSU5JVChJU1NVRVJDRVJULCBTVFJJTkdQT0lOVCwgMTcwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0lTU1VFUkNFUlQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNzApLAogCiAgIC8qIChJUHY2KSBBZGRyZXNzIHNjb3BlICovCi0gIENJTklUKEFERFJFU1NfU0NPUEUsIExPTkcsIDE3MSksCisgIENVUkxPUFQoQ1VSTE9QVF9BRERSRVNTX1NDT1BFLCBDVVJMT1BUVFlQRV9MT05HLCAxNzEpLAogCiAgIC8qIENvbGxlY3QgY2VydGlmaWNhdGUgY2hhaW4gaW5mbyBhbmQgYWxsb3cgaXQgdG8gZ2V0IHJldHJpZXZhYmxlIHdpdGgKICAgICAgQ1VSTElORk9fQ0VSVElORk8gYWZ0ZXIgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiAqLwotICBDSU5JVChDRVJUSU5GTywgTE9ORywgMTcyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NFUlRJTkZPLCBDVVJMT1BUVFlQRV9MT05HLCAxNzIpLAogCiAgIC8qICJuYW1lIiBhbmQgInB3ZCIgdG8gdXNlIHdoZW4gZmV0Y2hpbmcuICovCi0gIENJTklUKFVTRVJOQU1FLCBTVFJJTkdQT0lOVCwgMTczKSwKLSAgQ0lOSVQoUEFTU1dPUkQsIFNUUklOR1BPSU5ULCAxNzQpLAorICBDVVJMT1BUKENVUkxPUFRfVVNFUk5BTUUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNzMpLAorICBDVVJMT1BUKENVUkxPUFRfUEFTU1dPUkQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNzQpLAogCiAgICAgLyogIm5hbWUiIGFuZCAicHdkIiB0byB1c2Ugd2l0aCBQcm94eSB3aGVuIGZldGNoaW5nLiAqLwotICBDSU5JVChQUk9YWVVTRVJOQU1FLCBTVFJJTkdQT0lOVCwgMTc1KSwKLSAgQ0lOSVQoUFJPWFlQQVNTV09SRCwgU1RSSU5HUE9JTlQsIDE3NiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWVVTRVJOQU1FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTc1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZUEFTU1dPUkQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxNzYpLAogCiAgIC8qIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGhvc3RuYW1lcyBkZWZpbmluZyBuby1wcm94eSB6b25lcy4gVGhlc2Ugc2hvdWxkCiAgICAgIG1hdGNoIGJvdGggaG9zdG5hbWVzIGRpcmVjdGx5LCBhbmQgaG9zdG5hbWVzIHdpdGhpbiBhIGRvbWFpbi4gRm9yCkBAIC0xNTUwLDEwMyArMTU4MywxMDMgQEAKICAgICAgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMsIC5sb2NhbC5jb20gd2lsbCBiZSBjb25zaWRlcmVkIHRvIGJlIHRoZSBzYW1lIGFzCiAgICAgIGxvY2FsLmNvbS4gQSBzaW5nbGUgKiBpcyB0aGUgb25seSB2YWxpZCB3aWxkY2FyZCwgYW5kIGVmZmVjdGl2ZWx5CiAgICAgIGRpc2FibGVzIHRoZSB1c2Ugb2YgcHJveHkuICovCi0gIENJTklUKE5PUFJPWFksIFNUUklOR1BPSU5ULCAxNzcpLAorICBDVVJMT1BUKENVUkxPUFRfTk9QUk9YWSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3NyksCiAKICAgLyogYmxvY2sgc2l6ZSBmb3IgVEZUUCB0cmFuc2ZlcnMgKi8KLSAgQ0lOSVQoVEZUUF9CTEtTSVpFLCBMT05HLCAxNzgpLAorICBDVVJMT1BUKENVUkxPUFRfVEZUUF9CTEtTSVpFLCBDVVJMT1BUVFlQRV9MT05HLCAxNzgpLAogCiAgIC8qIFNvY2tzIFNlcnZpY2UgKi8KLSAgQ0lOSVQoU09DS1M1X0dTU0FQSV9TRVJWSUNFLCBTVFJJTkdQT0lOVCwgMTc5KSwgLyogREVQUkVDQVRFRCwgZG8gbm90IHVzZSEgKi8KKyAgLyogREVQUkVDQVRFRCwgZG8gbm90IHVzZSEgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tTNV9HU1NBUElfU0VSVklDRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE3OSksCiAKICAgLyogU29ja3MgU2VydmljZSAqLwotICBDSU5JVChTT0NLUzVfR1NTQVBJX05FQywgTE9ORywgMTgwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tTNV9HU1NBUElfTkVDLCBDVVJMT1BUVFlQRV9MT05HLCAxODApLAogCiAgIC8qIHNldCB0aGUgYml0bWFzayBmb3IgdGhlIHByb3RvY29scyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgZm9yIHRoZQogICAgICB0cmFuc2Zlciwgd2hpY2ggdGh1cyBoZWxwcyB0aGUgYXBwIHdoaWNoIHRha2VzIFVSTHMgZnJvbSB1c2VycyBvciBvdGhlcgogICAgICBleHRlcm5hbCBpbnB1dHMgYW5kIHdhbnQgdG8gcmVzdHJpY3Qgd2hhdCBwcm90b2NvbChzKSB0byBkZWFsCiAgICAgIHdpdGguIERlZmF1bHRzIHRvIENVUkxQUk9UT19BTEwuICovCi0gIENJTklUKFBST1RPQ09MUywgTE9ORywgMTgxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1RPQ09MUywgQ1VSTE9QVFRZUEVfTE9ORywgMTgxKSwKIAogICAvKiBzZXQgdGhlIGJpdG1hc2sgZm9yIHRoZSBwcm90b2NvbHMgdGhhdCBsaWJjdXJsIGlzIGFsbG93ZWQgdG8gZm9sbG93IHRvLAogICAgICBhcyBhIHN1YnNldCBvZiB0aGUgQ1VSTE9QVF9QUk9UT0NPTFMgb25lcy4gVGhhdCBtZWFucyB0aGUgcHJvdG9jb2wgbmVlZHMKLSAgICAgdG8gYmUgc2V0IGluIGJvdGggYml0bWFza3MgdG8gYmUgYWxsb3dlZCB0byBnZXQgcmVkaXJlY3RlZCB0by4gRGVmYXVsdHMKLSAgICAgdG8gYWxsIHByb3RvY29scyBleGNlcHQgRklMRSBhbmQgU0NQLiAqLwotICBDSU5JVChSRURJUl9QUk9UT0NPTFMsIExPTkcsIDE4MiksCisgICAgIHRvIGJlIHNldCBpbiBib3RoIGJpdG1hc2tzIHRvIGJlIGFsbG93ZWQgdG8gZ2V0IHJlZGlyZWN0ZWQgdG8uICovCisgIENVUkxPUFQoQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMsIENVUkxPUFRUWVBFX0xPTkcsIDE4MiksCiAKICAgLyogc2V0IHRoZSBTU0gga25vd25ob3N0IGZpbGUgbmFtZSB0byB1c2UgKi8KLSAgQ0lOSVQoU1NIX0tOT1dOSE9TVFMsIFNUUklOR1BPSU5ULCAxODMpLAorICBDVVJMT1BUKENVUkxPUFRfU1NIX0tOT1dOSE9TVFMsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxODMpLAogCiAgIC8qIHNldCB0aGUgU1NIIGhvc3Qga2V5IGNhbGxiYWNrLCBtdXN0IHBvaW50IHRvIGEgY3VybF9zc2hrZXljYWxsYmFjawogICAgICBmdW5jdGlvbiAqLwotICBDSU5JVChTU0hfS0VZRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE4NCksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfS0VZRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDE4NCksCiAKICAgLyogc2V0IHRoZSBTU0ggaG9zdCBrZXkgY2FsbGJhY2sgY3VzdG9tIHBvaW50ZXIgKi8KLSAgQ0lOSVQoU1NIX0tFWURBVEEsIE9CSkVDVFBPSU5ULCAxODUpLAorICBDVVJMT1BUKENVUkxPUFRfU1NIX0tFWURBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAxODUpLAogCiAgIC8qIHNldCB0aGUgU01UUCBtYWlsIG9yaWdpbmF0b3IgKi8KLSAgQ0lOSVQoTUFJTF9GUk9NLCBTVFJJTkdQT0lOVCwgMTg2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX01BSUxfRlJPTSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE4NiksCiAKICAgLyogc2V0IHRoZSBsaXN0IG9mIFNNVFAgbWFpbCByZWNlaXZlcihzKSAqLwotICBDSU5JVChNQUlMX1JDUFQsIE9CSkVDVFBPSU5ULCAxODcpLAorICBDVVJMT1BUKENVUkxPUFRfTUFJTF9SQ1BULCBDVVJMT1BUVFlQRV9TTElTVFBPSU5ULCAxODcpLAogCiAgIC8qIEZUUDogc2VuZCBQUkVUIGJlZm9yZSBQQVNWICovCi0gIENJTklUKEZUUF9VU0VfUFJFVCwgTE9ORywgMTg4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZUUF9VU0VfUFJFVCwgQ1VSTE9QVFRZUEVfTE9ORywgMTg4KSwKIAogICAvKiBSVFNQIHJlcXVlc3QgbWV0aG9kIChPUFRJT05TLCBTRVRVUCwgUExBWSwgZXRjLi4uKSAqLwotICBDSU5JVChSVFNQX1JFUVVFU1QsIExPTkcsIDE4OSksCisgIENVUkxPUFQoQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxPUFRUWVBFX0xPTkcsIDE4OSksCiAKICAgLyogVGhlIFJUU1Agc2Vzc2lvbiBpZGVudGlmaWVyICovCi0gIENJTklUKFJUU1BfU0VTU0lPTl9JRCwgU1RSSU5HUE9JTlQsIDE5MCksCisgIENVUkxPUFQoQ1VSTE9QVF9SVFNQX1NFU1NJT05fSUQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAxOTApLAogCiAgIC8qIFRoZSBSVFNQIHN0cmVhbSBVUkkgKi8KLSAgQ0lOSVQoUlRTUF9TVFJFQU1fVVJJLCBTVFJJTkdQT0lOVCwgMTkxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDE5MSksCiAKICAgLyogVGhlIFRyYW5zcG9ydDogaGVhZGVyIHRvIHVzZSBpbiBSVFNQIHJlcXVlc3RzICovCi0gIENJTklUKFJUU1BfVFJBTlNQT1JULCBTVFJJTkdQT0lOVCwgMTkyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JUU1BfVFJBTlNQT1JULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMTkyKSwKIAogICAvKiBNYW51YWxseSBpbml0aWFsaXplIHRoZSBjbGllbnQgUlRTUCBDU2VxIGZvciB0aGlzIGhhbmRsZSAqLwotICBDSU5JVChSVFNQX0NMSUVOVF9DU0VRLCBMT05HLCAxOTMpLAorICBDVVJMT1BUKENVUkxPUFRfUlRTUF9DTElFTlRfQ1NFUSwgQ1VSTE9QVFRZUEVfTE9ORywgMTkzKSwKIAogICAvKiBNYW51YWxseSBpbml0aWFsaXplIHRoZSBzZXJ2ZXIgUlRTUCBDU2VxIGZvciB0aGlzIGhhbmRsZSAqLwotICBDSU5JVChSVFNQX1NFUlZFUl9DU0VRLCBMT05HLCAxOTQpLAorICBDVVJMT1BUKENVUkxPUFRfUlRTUF9TRVJWRVJfQ1NFUSwgQ1VSTE9QVFRZUEVfTE9ORywgMTk0KSwKIAogICAvKiBUaGUgc3RyZWFtIHRvIHBhc3MgdG8gSU5URVJMRUFWRUZVTkNUSU9OLiAqLwotICBDSU5JVChJTlRFUkxFQVZFREFUQSwgT0JKRUNUUE9JTlQsIDE5NSksCisgIENVUkxPUFQoQ1VSTE9QVF9JTlRFUkxFQVZFREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDE5NSksCiAKICAgLyogTGV0IHRoZSBhcHBsaWNhdGlvbiBkZWZpbmUgYSBjdXN0b20gd3JpdGUgbWV0aG9kIGZvciBSVFAgZGF0YSAqLwotICBDSU5JVChJTlRFUkxFQVZFRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE5NiksCisgIENVUkxPUFQoQ1VSTE9QVF9JTlRFUkxFQVZFRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDE5NiksCiAKICAgLyogVHVybiBvbiB3aWxkY2FyZCBtYXRjaGluZyAqLwotICBDSU5JVChXSUxEQ0FSRE1BVENILCBMT05HLCAxOTcpLAorICBDVVJMT1BUKENVUkxPUFRfV0lMRENBUkRNQVRDSCwgQ1VSTE9QVFRZUEVfTE9ORywgMTk3KSwKIAogICAvKiBEaXJlY3RvcnkgbWF0Y2hpbmcgY2FsbGJhY2sgY2FsbGVkIGJlZm9yZSBkb3dubG9hZGluZyBvZiBhbgogICAgICBpbmRpdmlkdWFsIGZpbGUgKGNodW5rKSBzdGFydGVkICovCi0gIENJTklUKENIVU5LX0JHTl9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTk4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NIVU5LX0JHTl9GVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMTk4KSwKIAogICAvKiBEaXJlY3RvcnkgbWF0Y2hpbmcgY2FsbGJhY2sgY2FsbGVkIGFmdGVyIHRoZSBmaWxlIChjaHVuaykKICAgICAgd2FzIGRvd25sb2FkZWQsIG9yIHNraXBwZWQgKi8KLSAgQ0lOSVQoQ0hVTktfRU5EX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxOTkpLAorICBDVVJMT1BUKENVUkxPUFRfQ0hVTktfRU5EX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxOTkpLAogCiAgIC8qIENoYW5nZSBtYXRjaCAoZm5tYXRjaC1saWtlKSBjYWxsYmFjayBmb3Igd2lsZGNhcmQgbWF0Y2hpbmcgKi8KLSAgQ0lOSVQoRk5NQVRDSF9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMjAwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ZOTUFUQ0hfRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDIwMCksCiAKICAgLyogTGV0IHRoZSBhcHBsaWNhdGlvbiBkZWZpbmUgY3VzdG9tIGNodW5rIGRhdGEgcG9pbnRlciAqLwotICBDSU5JVChDSFVOS19EQVRBLCBPQkpFQ1RQT0lOVCwgMjAxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NIVU5LX0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyMDEpLAogCiAgIC8qIEZOTUFUQ0hfRlVOQ1RJT04gdXNlciBwb2ludGVyICovCi0gIENJTklUKEZOTUFUQ0hfREFUQSwgT0JKRUNUUE9JTlQsIDIwMiksCisgIENVUkxPUFQoQ1VSTE9QVF9GTk1BVENIX0RBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyMDIpLAogCiAgIC8qIHNlbmQgbGlua2VkLWxpc3Qgb2YgbmFtZTpwb3J0OmFkZHJlc3Mgc2V0cyAqLwotICBDSU5JVChSRVNPTFZFLCBPQkpFQ1RQT0lOVCwgMjAzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFU09MVkUsIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDIwMyksCiAKICAgLyogU2V0IGEgdXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0ZWQgVExTICovCi0gIENJTklUKFRMU0FVVEhfVVNFUk5BTUUsIFNUUklOR1BPSU5ULCAyMDQpLAorICBDVVJMT1BUKENVUkxPUFRfVExTQVVUSF9VU0VSTkFNRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIwNCksCiAKICAgLyogU2V0IGEgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0ZWQgVExTICovCi0gIENJTklUKFRMU0FVVEhfUEFTU1dPUkQsIFNUUklOR1BPSU5ULCAyMDUpLAorICBDVVJMT1BUKENVUkxPUFRfVExTQVVUSF9QQVNTV09SRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIwNSksCiAKICAgLyogU2V0IGF1dGhlbnRpY2F0aW9uIHR5cGUgZm9yIGF1dGhlbnRpY2F0ZWQgVExTICovCi0gIENJTklUKFRMU0FVVEhfVFlQRSwgU1RSSU5HUE9JTlQsIDIwNiksCisgIENVUkxPUFQoQ1VSTE9QVF9UTFNBVVRIX1RZUEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMDYpLAogCiAgIC8qIFNldCB0byAxIHRvIGVuYWJsZSB0aGUgIlRFOiIgaGVhZGVyIGluIEhUVFAgcmVxdWVzdHMgdG8gYXNrIGZvcgogICAgICBjb21wcmVzc2VkIHRyYW5zZmVyLWVuY29kZWQgcmVzcG9uc2VzLiBTZXQgdG8gMCB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgVEU6CkBAIC0xNjU4LDI2OCArMTY5MSwyODUgQEAKICAgICAgb3B0aW9uIGlzIHNldCB0byAxLgogCiAgICovCi0gIENJTklUKFRSQU5TRkVSX0VOQ09ESU5HLCBMT05HLCAyMDcpLAorICBDVVJMT1BUKENVUkxPUFRfVFJBTlNGRVJfRU5DT0RJTkcsIENVUkxPUFRUWVBFX0xPTkcsIDIwNyksCiAKICAgLyogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGNsb3Npbmcgc29ja2V0IChpbnN0ZWFkIG9mIGNsb3NlKDIpKS4gVGhlIGNhbGxiYWNrCiAgICAgIHNob3VsZCBoYXZlIHR5cGUgY3VybF9jbG9zZXNvY2tldF9jYWxsYmFjayAqLwotICBDSU5JVChDTE9TRVNPQ0tFVEZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAyMDgpLAotICBDSU5JVChDTE9TRVNPQ0tFVERBVEEsIE9CSkVDVFBPSU5ULCAyMDkpLAorICBDVVJMT1BUKENVUkxPUFRfQ0xPU0VTT0NLRVRGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMjA4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NMT1NFU09DS0VUREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDIwOSksCiAKICAgLyogYWxsb3cgR1NTQVBJIGNyZWRlbnRpYWwgZGVsZWdhdGlvbiAqLwotICBDSU5JVChHU1NBUElfREVMRUdBVElPTiwgTE9ORywgMjEwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0dTU0FQSV9ERUxFR0FUSU9OLCBDVVJMT1BUVFlQRV9MT05HLCAyMTApLAogCiAgIC8qIFNldCB0aGUgbmFtZSBzZXJ2ZXJzIHRvIHVzZSBmb3IgRE5TIHJlc29sdXRpb24gKi8KLSAgQ0lOSVQoRE5TX1NFUlZFUlMsIFNUUklOR1BPSU5ULCAyMTEpLAorICBDVVJMT1BUKENVUkxPUFRfRE5TX1NFUlZFUlMsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMTEpLAogCiAgIC8qIFRpbWUtb3V0IGFjY2VwdCBvcGVyYXRpb25zIChjdXJyZW50bHkgZm9yIEZUUCBvbmx5KSBhZnRlciB0aGlzIGFtb3VudAogICAgICBvZiBtaWxsaXNlY29uZHMuICovCi0gIENJTklUKEFDQ0VQVFRJTUVPVVRfTVMsIExPTkcsIDIxMiksCisgIENVUkxPUFQoQ1VSTE9QVF9BQ0NFUFRUSU1FT1VUX01TLCBDVVJMT1BUVFlQRV9MT05HLCAyMTIpLAogCiAgIC8qIFNldCBUQ1Aga2VlcGFsaXZlICovCi0gIENJTklUKFRDUF9LRUVQQUxJVkUsIExPTkcsIDIxMyksCisgIENVUkxPUFQoQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFLCBDVVJMT1BUVFlQRV9MT05HLCAyMTMpLAogCiAgIC8qIG5vbi11bml2ZXJzYWwga2VlcGFsaXZlIGtub2JzIChMaW51eCwgQUlYLCBIUC1VWCwgbW9yZSkgKi8KLSAgQ0lOSVQoVENQX0tFRVBJRExFLCBMT05HLCAyMTQpLAotICBDSU5JVChUQ1BfS0VFUElOVFZMLCBMT05HLCAyMTUpLAorICBDVVJMT1BUKENVUkxPUFRfVENQX0tFRVBJRExFLCBDVVJMT1BUVFlQRV9MT05HLCAyMTQpLAorICBDVVJMT1BUKENVUkxPUFRfVENQX0tFRVBJTlRWTCwgQ1VSTE9QVFRZUEVfTE9ORywgMjE1KSwKIAogICAvKiBFbmFibGUvZGlzYWJsZSBzcGVjaWZpYyBTU0wgZmVhdHVyZXMgd2l0aCBhIGJpdG1hc2ssIHNlZSBDVVJMU1NMT1BUXyogKi8KLSAgQ0lOSVQoU1NMX09QVElPTlMsIExPTkcsIDIxNiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfT1BUSU9OUywgQ1VSTE9QVFRZUEVfTE9ORywgMjE2KSwKIAogICAvKiBTZXQgdGhlIFNNVFAgYXV0aCBvcmlnaW5hdG9yICovCi0gIENJTklUKE1BSUxfQVVUSCwgU1RSSU5HUE9JTlQsIDIxNyksCisgIENVUkxPUFQoQ1VSTE9QVF9NQUlMX0FVVEgsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMTcpLAogCiAgIC8qIEVuYWJsZS9kaXNhYmxlIFNBU0wgaW5pdGlhbCByZXNwb25zZSAqLwotICBDSU5JVChTQVNMX0lSLCBMT05HLCAyMTgpLAorICBDVVJMT1BUKENVUkxPUFRfU0FTTF9JUiwgQ1VSTE9QVFRZUEVfTE9ORywgMjE4KSwKIAogICAvKiBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlIGludGVybmFsIHByb2dyZXNzIGRpc3BsYXkKICAgICogZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGN1cmxfeGZlcmluZm9fY2FsbGJhY2sKICAgICogcHJvdG90eXBlIGRlZmluZXMuIChEZXByZWNhdGVzIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTikgKi8KLSAgQ0lOSVQoWEZFUklORk9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMjE5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1hGRVJJTkZPRlVOQ1RJT04sIENVUkxPUFRUWVBFX0ZVTkNUSU9OUE9JTlQsIDIxOSksCiAKICAgLyogVGhlIFhPQVVUSDIgYmVhcmVyIHRva2VuICovCi0gIENJTklUKFhPQVVUSDJfQkVBUkVSLCBTVFJJTkdQT0lOVCwgMjIwKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1hPQVVUSDJfQkVBUkVSLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjIwKSwKIAogICAvKiBTZXQgdGhlIGludGVyZmFjZSBzdHJpbmcgdG8gdXNlIGFzIG91dGdvaW5nIG5ldHdvcmsKICAgICogaW50ZXJmYWNlIGZvciBETlMgcmVxdWVzdHMuCiAgICAqIE9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBjLWFyZXMgRE5TIGJhY2tlbmQgKi8KLSAgQ0lOSVQoRE5TX0lOVEVSRkFDRSwgU1RSSU5HUE9JTlQsIDIyMSksCisgIENVUkxPUFQoQ1VSTE9QVF9ETlNfSU5URVJGQUNFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjIxKSwKIAogICAvKiBTZXQgdGhlIGxvY2FsIElQdjQgYWRkcmVzcyB0byB1c2UgZm9yIG91dGdvaW5nIEROUyByZXF1ZXN0cy4KICAgICogT25seSBzdXBwb3J0ZWQgYnkgdGhlIGMtYXJlcyBETlMgYmFja2VuZCAqLwotICBDSU5JVChETlNfTE9DQUxfSVA0LCBTVFJJTkdQT0lOVCwgMjIyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ROU19MT0NBTF9JUDQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMjIpLAogCiAgIC8qIFNldCB0aGUgbG9jYWwgSVB2NiBhZGRyZXNzIHRvIHVzZSBmb3Igb3V0Z29pbmcgRE5TIHJlcXVlc3RzLgogICAgKiBPbmx5IHN1cHBvcnRlZCBieSB0aGUgYy1hcmVzIEROUyBiYWNrZW5kICovCi0gIENJTklUKEROU19MT0NBTF9JUDYsIFNUUklOR1BPSU5ULCAyMjMpLAorICBDVVJMT1BUKENVUkxPUFRfRE5TX0xPQ0FMX0lQNiwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIyMyksCiAKICAgLyogU2V0IGF1dGhlbnRpY2F0aW9uIG9wdGlvbnMgZGlyZWN0bHkgKi8KLSAgQ0lOSVQoTE9HSU5fT1BUSU9OUywgU1RSSU5HUE9JTlQsIDIyNCksCisgIENVUkxPUFQoQ1VSTE9QVF9MT0dJTl9PUFRJT05TLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjI0KSwKIAogICAvKiBFbmFibGUvZGlzYWJsZSBUTFMgTlBOIGV4dGVuc2lvbiAoaHR0cDIgb3ZlciBzc2wgbWlnaHQgZmFpbCB3aXRob3V0KSAqLwotICBDSU5JVChTU0xfRU5BQkxFX05QTiwgTE9ORywgMjI1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTF9FTkFCTEVfTlBOLCBDVVJMT1BUVFlQRV9MT05HLCAyMjUpLAogCiAgIC8qIEVuYWJsZS9kaXNhYmxlIFRMUyBBTFBOIGV4dGVuc2lvbiAoaHR0cDIgb3ZlciBzc2wgbWlnaHQgZmFpbCB3aXRob3V0KSAqLwotICBDSU5JVChTU0xfRU5BQkxFX0FMUE4sIExPTkcsIDIyNiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfRU5BQkxFX0FMUE4sIENVUkxPUFRUWVBFX0xPTkcsIDIyNiksCiAKICAgLyogVGltZSB0byB3YWl0IGZvciBhIHJlc3BvbnNlIHRvIGEgSFRUUCByZXF1ZXN0IGNvbnRhaW5pbmcgYW4KICAgICogRXhwZWN0OiAxMDAtY29udGludWUgaGVhZGVyIGJlZm9yZSBzZW5kaW5nIHRoZSBkYXRhIGFueXdheS4gKi8KLSAgQ0lOSVQoRVhQRUNUXzEwMF9USU1FT1VUX01TLCBMT05HLCAyMjcpLAorICBDVVJMT1BUKENVUkxPUFRfRVhQRUNUXzEwMF9USU1FT1VUX01TLCBDVVJMT1BUVFlQRV9MT05HLCAyMjcpLAogCiAgIC8qIFRoaXMgcG9pbnRzIHRvIGEgbGlua2VkIGxpc3Qgb2YgaGVhZGVycyB1c2VkIGZvciBwcm94eSByZXF1ZXN0cyBvbmx5LAogICAgICBzdHJ1Y3QgY3VybF9zbGlzdCBraW5kICovCi0gIENJTklUKFBST1hZSEVBREVSLCBPQkpFQ1RQT0lOVCwgMjI4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZSEVBREVSLCBDVVJMT1BUVFlQRV9TTElTVFBPSU5ULCAyMjgpLAogCiAgIC8qIFBhc3MgaW4gYSBiaXRtYXNrIG9mICJoZWFkZXIgb3B0aW9ucyIgKi8KLSAgQ0lOSVQoSEVBREVST1BULCBMT05HLCAyMjkpLAorICBDVVJMT1BUKENVUkxPUFRfSEVBREVST1BULCBDVVJMT1BUVFlQRV9MT05HLCAyMjkpLAogCiAgIC8qIFRoZSBwdWJsaWMga2V5IGluIERFUiBmb3JtIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHBlZXIgcHVibGljIGtleQogICAgICB0aGlzIG9wdGlvbiBpcyB1c2VkIG9ubHkgaWYgU1NMX1ZFUklGWVBFRVIgaXMgdHJ1ZSAqLwotICBDSU5JVChQSU5ORURQVUJMSUNLRVksIFNUUklOR1BPSU5ULCAyMzApLAorICBDVVJMT1BUKENVUkxPUFRfUElOTkVEUFVCTElDS0VZLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjMwKSwKIAogICAvKiBQYXRoIHRvIFVuaXggZG9tYWluIHNvY2tldCAqLwotICBDSU5JVChVTklYX1NPQ0tFVF9QQVRILCBTVFJJTkdQT0lOVCwgMjMxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1VOSVhfU09DS0VUX1BBVEgsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMzEpLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBzdGF0dXMuICovCi0gIENJTklUKFNTTF9WRVJJRllTVEFUVVMsIExPTkcsIDIzMiksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfVkVSSUZZU1RBVFVTLCBDVVJMT1BUVFlQRV9MT05HLCAyMzIpLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgZW5hYmxlIFRMUyBmYWxzZSBzdGFydC4gKi8KLSAgQ0lOSVQoU1NMX0ZBTFNFU1RBUlQsIExPTkcsIDIzMyksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0xfRkFMU0VTVEFSVCwgQ1VSTE9QVFRZUEVfTE9ORywgMjMzKSwKIAogICAvKiBEbyBub3Qgc3F1YXNoIGRvdC1kb3Qgc2VxdWVuY2VzICovCi0gIENJTklUKFBBVEhfQVNfSVMsIExPTkcsIDIzNCksCisgIENVUkxPUFQoQ1VSTE9QVF9QQVRIX0FTX0lTLCBDVVJMT1BUVFlQRV9MT05HLCAyMzQpLAogCiAgIC8qIFByb3h5IFNlcnZpY2UgTmFtZSAqLwotICBDSU5JVChQUk9YWV9TRVJWSUNFX05BTUUsIFNUUklOR1BPSU5ULCAyMzUpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU0VSVklDRV9OQU1FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjM1KSwKIAogICAvKiBTZXJ2aWNlIE5hbWUgKi8KLSAgQ0lOSVQoU0VSVklDRV9OQU1FLCBTVFJJTkdQT0lOVCwgMjM2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NFUlZJQ0VfTkFNRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDIzNiksCiAKICAgLyogV2FpdC9kb24ndCB3YWl0IGZvciBwaXBlL211dGV4IHRvIGNsYXJpZnkgKi8KLSAgQ0lOSVQoUElQRVdBSVQsIExPTkcsIDIzNyksCisgIENVUkxPUFQoQ1VSTE9QVF9QSVBFV0FJVCwgQ1VSTE9QVFRZUEVfTE9ORywgMjM3KSwKIAogICAvKiBTZXQgdGhlIHByb3RvY29sIHVzZWQgd2hlbiBjdXJsIGlzIGdpdmVuIGEgVVJMIHdpdGhvdXQgYSBwcm90b2NvbCAqLwotICBDSU5JVChERUZBVUxUX1BST1RPQ09MLCBTVFJJTkdQT0lOVCwgMjM4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0RFRkFVTFRfUFJPVE9DT0wsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyMzgpLAogCiAgIC8qIFNldCBzdHJlYW0gd2VpZ2h0LCAxIC0gMjU2IChkZWZhdWx0IGlzIDE2KSAqLwotICBDSU5JVChTVFJFQU1fV0VJR0hULCBMT05HLCAyMzkpLAorICBDVVJMT1BUKENVUkxPUFRfU1RSRUFNX1dFSUdIVCwgQ1VSTE9QVFRZUEVfTE9ORywgMjM5KSwKIAogICAvKiBTZXQgc3RyZWFtIGRlcGVuZGVuY3kgb24gYW5vdGhlciBDVVJMIGhhbmRsZSAqLwotICBDSU5JVChTVFJFQU1fREVQRU5EUywgT0JKRUNUUE9JTlQsIDI0MCksCisgIENVUkxPUFQoQ1VSTE9QVF9TVFJFQU1fREVQRU5EUywgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDI0MCksCiAKICAgLyogU2V0IEUteGNsdXNpdmUgc3RyZWFtIGRlcGVuZGVuY3kgb24gYW5vdGhlciBDVVJMIGhhbmRsZSAqLwotICBDSU5JVChTVFJFQU1fREVQRU5EU19FLCBPQkpFQ1RQT0lOVCwgMjQxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NUUkVBTV9ERVBFTkRTX0UsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyNDEpLAogCiAgIC8qIERvIG5vdCBzZW5kIGFueSB0ZnRwIG9wdGlvbiByZXF1ZXN0cyB0byB0aGUgc2VydmVyICovCi0gIENJTklUKFRGVFBfTk9fT1BUSU9OUywgTE9ORywgMjQyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RGVFBfTk9fT1BUSU9OUywgQ1VSTE9QVFRZUEVfTE9ORywgMjQyKSwKIAogICAvKiBMaW5rZWQtbGlzdCBvZiBob3N0OnBvcnQ6Y29ubmVjdC10by1ob3N0OmNvbm5lY3QtdG8tcG9ydCwKICAgICAgb3ZlcnJpZGVzIHRoZSBVUkwncyBob3N0OnBvcnQgKG9ubHkgZm9yIHRoZSBuZXR3b3JrIGxheWVyKSAqLwotICBDSU5JVChDT05ORUNUX1RPLCBPQkpFQ1RQT0lOVCwgMjQzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX0NPTk5FQ1RfVE8sIENVUkxPUFRUWVBFX1NMSVNUUE9JTlQsIDI0MyksCiAKICAgLyogU2V0IFRDUCBGYXN0IE9wZW4gKi8KLSAgQ0lOSVQoVENQX0ZBU1RPUEVOLCBMT05HLCAyNDQpLAorICBDVVJMT1BUKENVUkxPUFRfVENQX0ZBU1RPUEVOLCBDVVJMT1BUVFlQRV9MT05HLCAyNDQpLAogCiAgIC8qIENvbnRpbnVlIHRvIHNlbmQgZGF0YSBpZiB0aGUgc2VydmVyIHJlc3BvbmRzIGVhcmx5IHdpdGggYW4KICAgICogSFRUUCBzdGF0dXMgY29kZSA+PSAzMDAgKi8KLSAgQ0lOSVQoS0VFUF9TRU5ESU5HX09OX0VSUk9SLCBMT05HLCAyNDUpLAorICBDVVJMT1BUKENVUkxPUFRfS0VFUF9TRU5ESU5HX09OX0VSUk9SLCBDVVJMT1BUVFlQRV9MT05HLCAyNDUpLAogCiAgIC8qIFRoZSBDQXBhdGggb3IgQ0FmaWxlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHByb3h5IGNlcnRpZmljYXRlCiAgICAgIHRoaXMgb3B0aW9uIGlzIHVzZWQgb25seSBpZiBQUk9YWV9TU0xfVkVSSUZZUEVFUiBpcyB0cnVlICovCi0gIENJTklUKFBST1hZX0NBSU5GTywgU1RSSU5HUE9JTlQsIDI0NiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9DQUlORk8sIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNDYpLAogCiAgIC8qIFRoZSBDQXBhdGggZGlyZWN0b3J5IHVzZWQgdG8gdmFsaWRhdGUgdGhlIHByb3h5IGNlcnRpZmljYXRlCiAgICAgIHRoaXMgb3B0aW9uIGlzIHVzZWQgb25seSBpZiBQUk9YWV9TU0xfVkVSSUZZUEVFUiBpcyB0cnVlICovCi0gIENJTklUKFBST1hZX0NBUEFUSCwgU1RSSU5HUE9JTlQsIDI0NyksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9DQVBBVEgsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNDcpLAogCiAgIC8qIFNldCBpZiB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBwcm94eSBpbiBzc2wgaGFuZHNoYWtlLAogICAgICBzZXQgMSB0byB2ZXJpZnkuICovCi0gIENJTklUKFBST1hZX1NTTF9WRVJJRllQRUVSLCBMT05HLCAyNDgpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIsIENVUkxPUFRUWVBFX0xPTkcsIDI0OCksCiAKICAgLyogU2V0IGlmIHdlIHNob3VsZCB2ZXJpZnkgdGhlIENvbW1vbiBuYW1lIGZyb20gdGhlIHByb3h5IGNlcnRpZmljYXRlIGluIHNzbAogICAgKiBoYW5kc2hha2UsIHNldCAxIHRvIGNoZWNrIGV4aXN0ZW5jZSwgMiB0byBlbnN1cmUgdGhhdCBpdCBtYXRjaGVzCiAgICAqIHRoZSBwcm92aWRlZCBob3N0bmFtZS4gKi8KLSAgQ0lOSVQoUFJPWFlfU1NMX1ZFUklGWUhPU1QsIExPTkcsIDI0OSksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZSE9TVCwgQ1VSTE9QVFRZUEVfTE9ORywgMjQ5KSwKIAogICAvKiBXaGF0IHZlcnNpb24gdG8gc3BlY2lmaWNhbGx5IHRyeSB0byB1c2UgZm9yIHByb3h5LgogICAgICBTZWUgQ1VSTF9TU0xWRVJTSU9OIGRlZmluZXMgYmVsb3cuICovCi0gIENJTklUKFBST1hZX1NTTFZFUlNJT04sIExPTkcsIDI1MCksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xWRVJTSU9OLCBDVVJMT1BUVFlQRV9MT05HLCAyNTApLAogCiAgIC8qIFNldCBhIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGVkIFRMUyBmb3IgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfVExTQVVUSF9VU0VSTkFNRSwgU1RSSU5HUE9JTlQsIDI1MSksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1VTRVJOQU1FLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjUxKSwKIAogICAvKiBTZXQgYSBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRlZCBUTFMgZm9yIHByb3h5ICovCi0gIENJTklUKFBST1hZX1RMU0FVVEhfUEFTU1dPUkQsIFNUUklOR1BPSU5ULCAyNTIpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfVExTQVVUSF9QQVNTV09SRCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI1MiksCiAKICAgLyogU2V0IGF1dGhlbnRpY2F0aW9uIHR5cGUgZm9yIGF1dGhlbnRpY2F0ZWQgVExTIGZvciBwcm94eSAqLwotICBDSU5JVChQUk9YWV9UTFNBVVRIX1RZUEUsIFNUUklOR1BPSU5ULCAyNTMpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjUzKSwKIAogICAvKiBuYW1lIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1jZXJ0aWZpY2F0ZSBmb3IgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfU1NMQ0VSVCwgU1RSSU5HUE9JTlQsIDI1NCksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xDRVJULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjU0KSwKIAogICAvKiB0eXBlIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBTU0wtY2VydGlmaWNhdGUgKCJERVIiLCAiUEVNIiwgIkVORyIpIGZvcgogICAgICBwcm94eSAqLwotICBDSU5JVChQUk9YWV9TU0xDRVJUVFlQRSwgU1RSSU5HUE9JTlQsIDI1NSksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9TU0xDRVJUVFlQRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI1NSksCiAKICAgLyogbmFtZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgcHJpdmF0ZSBTU0wta2V5IGZvciBwcm94eSAqLwotICBDSU5JVChQUk9YWV9TU0xLRVksIFNUUklOR1BPSU5ULCAyNTYpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMS0VZLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjU2KSwKIAogICAvKiB0eXBlIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1rZXkgKCJERVIiLCAiUEVNIiwgIkVORyIpIGZvcgogICAgICBwcm94eSAqLwotICBDSU5JVChQUk9YWV9TU0xLRVlUWVBFLCBTVFJJTkdQT0lOVCwgMjU3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNTcpLAogCiAgIC8qIHBhc3N3b3JkIGZvciB0aGUgU1NMIHByaXZhdGUga2V5IGZvciBwcm94eSAqLwotICBDSU5JVChQUk9YWV9LRVlQQVNTV0QsIFNUUklOR1BPSU5ULCAyNTgpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfS0VZUEFTU1dELCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjU4KSwKIAogICAvKiBTcGVjaWZ5IHdoaWNoIFNTTCBjaXBoZXJzIHRvIHVzZSBmb3IgcHJveHkgKi8KLSAgQ0lOSVQoUFJPWFlfU1NMX0NJUEhFUl9MSVNULCBTVFJJTkdQT0lOVCwgMjU5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI1OSksCiAKICAgLyogQ1JMIGZpbGUgZm9yIHByb3h5ICovCi0gIENJTklUKFBST1hZX0NSTEZJTEUsIFNUUklOR1BPSU5ULCAyNjApLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfQ1JMRklMRSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI2MCksCiAKICAgLyogRW5hYmxlL2Rpc2FibGUgc3BlY2lmaWMgU1NMIGZlYXR1cmVzIHdpdGggYSBiaXRtYXNrIGZvciBwcm94eSwgc2VlCiAgICAgIENVUkxTU0xPUFRfKiAqLwotICBDSU5JVChQUk9YWV9TU0xfT1BUSU9OUywgTE9ORywgMjYxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BST1hZX1NTTF9PUFRJT05TLCBDVVJMT1BUVFlQRV9MT05HLCAyNjEpLAogCiAgIC8qIE5hbWUgb2YgcHJlIHByb3h5IHRvIHVzZS4gKi8KLSAgQ0lOSVQoUFJFX1BST1hZLCBTVFJJTkdQT0lOVCwgMjYyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1BSRV9QUk9YWSwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI2MiksCiAKICAgLyogVGhlIHB1YmxpYyBrZXkgaW4gREVSIGZvcm0gdXNlZCB0byB2YWxpZGF0ZSB0aGUgcHJveHkgcHVibGljIGtleQogICAgICB0aGlzIG9wdGlvbiBpcyB1c2VkIG9ubHkgaWYgUFJPWFlfU1NMX1ZFUklGWVBFRVIgaXMgdHJ1ZSAqLwotICBDSU5JVChQUk9YWV9QSU5ORURQVUJMSUNLRVksIFNUUklOR1BPSU5ULCAyNjMpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfUElOTkVEUFVCTElDS0VZLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjYzKSwKIAogICAvKiBQYXRoIHRvIGFuIGFic3RyYWN0IFVuaXggZG9tYWluIHNvY2tldCAqLwotICBDSU5JVChBQlNUUkFDVF9VTklYX1NPQ0tFVCwgU1RSSU5HUE9JTlQsIDI2NCksCisgIENVUkxPUFQoQ1VSTE9QVF9BQlNUUkFDVF9VTklYX1NPQ0tFVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI2NCksCiAKICAgLyogU3VwcHJlc3MgcHJveHkgQ09OTkVDVCByZXNwb25zZSBoZWFkZXJzIGZyb20gdXNlciBjYWxsYmFja3MgKi8KLSAgQ0lOSVQoU1VQUFJFU1NfQ09OTkVDVF9IRUFERVJTLCBMT05HLCAyNjUpLAorICBDVVJMT1BUKENVUkxPUFRfU1VQUFJFU1NfQ09OTkVDVF9IRUFERVJTLCBDVVJMT1BUVFlQRV9MT05HLCAyNjUpLAogCiAgIC8qIFRoZSByZXF1ZXN0IHRhcmdldCwgaW5zdGVhZCBvZiBleHRyYWN0ZWQgZnJvbSB0aGUgVVJMICovCi0gIENJTklUKFJFUVVFU1RfVEFSR0VULCBTVFJJTkdQT0lOVCwgMjY2KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFUVVFU1RfVEFSR0VULCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjY2KSwKIAogICAvKiBiaXRtYXNrIG9mIGFsbG93ZWQgYXV0aCBtZXRob2RzIGZvciBjb25uZWN0aW9ucyB0byBTT0NLUzUgcHJveGllcyAqLwotICBDSU5JVChTT0NLUzVfQVVUSCwgTE9ORywgMjY3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NPQ0tTNV9BVVRILCBDVVJMT1BUVFlQRV9MT05HLCAyNjcpLAogCiAgIC8qIEVuYWJsZS9kaXNhYmxlIFNTSCBjb21wcmVzc2lvbiAqLwotICBDSU5JVChTU0hfQ09NUFJFU1NJT04sIExPTkcsIDI2OCksCisgIENVUkxPUFQoQ1VSTE9QVF9TU0hfQ09NUFJFU1NJT04sIENVUkxPUFRUWVBFX0xPTkcsIDI2OCksCiAKICAgLyogUG9zdCBNSU1FIGRhdGEuICovCi0gIENJTklUKE1JTUVQT1NULCBPQkpFQ1RQT0lOVCwgMjY5KSwKKyAgQ1VSTE9QVChDVVJMT1BUX01JTUVQT1NULCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMjY5KSwKIAogICAvKiBUaW1lIHRvIHVzZSB3aXRoIHRoZSBDVVJMT1BUX1RJTUVDT05ESVRJT04uIFNwZWNpZmllZCBpbiBudW1iZXIgb2YKICAgICAgc2Vjb25kcyBzaW5jZSAxIEphbiAxOTcwLiAqLwotICBDSU5JVChUSU1FVkFMVUVfTEFSR0UsIE9GRl9ULCAyNzApLAorICBDVVJMT1BUKENVUkxPUFRfVElNRVZBTFVFX0xBUkdFLCBDVVJMT1BUVFlQRV9PRkZfVCwgMjcwKSwKIAogICAvKiBIZWFkIHN0YXJ0IGluIG1pbGxpc2Vjb25kcyB0byBnaXZlIGhhcHB5IGV5ZWJhbGxzLiAqLwotICBDSU5JVChIQVBQWV9FWUVCQUxMU19USU1FT1VUX01TLCBMT05HLCAyNzEpLAorICBDVVJMT1BUKENVUkxPUFRfSEFQUFlfRVlFQkFMTFNfVElNRU9VVF9NUywgQ1VSTE9QVFRZUEVfTE9ORywgMjcxKSwKIAogICAvKiBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBhIHJlc29sdmVyIHJlcXVlc3QgaXMgbWFkZSAqLwotICBDSU5JVChSRVNPTFZFUl9TVEFSVF9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMjcyKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1JFU09MVkVSX1NUQVJUX0ZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAyNzIpLAogCiAgIC8qIFVzZXIgZGF0YSB0byBwYXNzIHRvIHRoZSByZXNvbHZlciBzdGFydCBjYWxsYmFjay4gKi8KLSAgQ0lOSVQoUkVTT0xWRVJfU1RBUlRfREFUQSwgT0JKRUNUUE9JTlQsIDI3MyksCisgIENVUkxPUFQoQ1VSTE9QVF9SRVNPTFZFUl9TVEFSVF9EQVRBLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMjczKSwKIAogICAvKiBzZW5kIEhBUHJveHkgUFJPWFkgcHJvdG9jb2wgaGVhZGVyPyAqLwotICBDSU5JVChIQVBST1hZUFJPVE9DT0wsIExPTkcsIDI3NCksCisgIENVUkxPUFQoQ1VSTE9QVF9IQVBST1hZUFJPVE9DT0wsIENVUkxPUFRUWVBFX0xPTkcsIDI3NCksCiAKICAgLyogc2h1ZmZsZSBhZGRyZXNzZXMgYmVmb3JlIHVzZSB3aGVuIEROUyByZXR1cm5zIG11bHRpcGxlICovCi0gIENJTklUKEROU19TSFVGRkxFX0FERFJFU1NFUywgTE9ORywgMjc1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0ROU19TSFVGRkxFX0FERFJFU1NFUywgQ1VSTE9QVFRZUEVfTE9ORywgMjc1KSwKIAogICAvKiBTcGVjaWZ5IHdoaWNoIFRMUyAxLjMgY2lwaGVycyBzdWl0ZXMgdG8gdXNlICovCi0gIENJTklUKFRMUzEzX0NJUEhFUlMsIFNUUklOR1BPSU5ULCAyNzYpLAotICBDSU5JVChQUk9YWV9UTFMxM19DSVBIRVJTLCBTVFJJTkdQT0lOVCwgMjc3KSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RMUzEzX0NJUEhFUlMsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyNzYpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfVExTMTNfQ0lQSEVSUywgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI3NyksCiAKICAgLyogRGlzYWxsb3cgc3BlY2lmeWluZyB1c2VybmFtZS9sb2dpbiBpbiBVUkwuICovCi0gIENJTklUKERJU0FMTE9XX1VTRVJOQU1FX0lOX1VSTCwgTE9ORywgMjc4KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0RJU0FMTE9XX1VTRVJOQU1FX0lOX1VSTCwgQ1VSTE9QVFRZUEVfTE9ORywgMjc4KSwKIAogICAvKiBETlMtb3Zlci1IVFRQUyBVUkwgKi8KLSAgQ0lOSVQoRE9IX1VSTCwgU1RSSU5HUE9JTlQsIDI3OSksCisgIENVUkxPUFQoQ1VSTE9QVF9ET0hfVVJMLCBDVVJMT1BUVFlQRV9TVFJJTkdQT0lOVCwgMjc5KSwKIAogICAvKiBQcmVmZXJyZWQgYnVmZmVyIHNpemUgdG8gdXNlIGZvciB1cGxvYWRzICovCi0gIENJTklUKFVQTE9BRF9CVUZGRVJTSVpFLCBMT05HLCAyODApLAorICBDVVJMT1BUKENVUkxPUFRfVVBMT0FEX0JVRkZFUlNJWkUsIENVUkxPUFRUWVBFX0xPTkcsIDI4MCksCiAKICAgLyogVGltZSBpbiBtcyBiZXR3ZWVuIGNvbm5lY3Rpb24gdXBrZWVwIGNhbGxzIGZvciBsb25nLWxpdmVkIGNvbm5lY3Rpb25zLiAqLwotICBDSU5JVChVUEtFRVBfSU5URVJWQUxfTVMsIExPTkcsIDI4MSksCisgIENVUkxPUFQoQ1VSTE9QVF9VUEtFRVBfSU5URVJWQUxfTVMsIENVUkxPUFRUWVBFX0xPTkcsIDI4MSksCiAKICAgLyogU3BlY2lmeSBVUkwgdXNpbmcgQ1VSTCBVUkwgQVBJLiAqLwotICBDSU5JVChDVVJMVSwgT0JKRUNUUE9JTlQsIDI4MiksCisgIENVUkxPUFQoQ1VSTE9QVF9DVVJMVSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDI4MiksCiAKICAgLyogYWRkIHRyYWlsaW5nIGRhdGEganVzdCBhZnRlciBubyBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlICovCi0gIENJTklUKFRSQUlMRVJGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMjgzKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1RSQUlMRVJGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMjgzKSwKIAogICAvKiBwb2ludGVyIHRvIGJlIHBhc3NlZCB0byBIVFRQX1RSQUlMRVJfRlVOQ1RJT04gKi8KLSAgQ0lOSVQoVFJBSUxFUkRBVEEsIE9CSkVDVFBPSU5ULCAyODQpLAorICBDVVJMT1BUKENVUkxPUFRfVFJBSUxFUkRBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyODQpLAogCiAgIC8qIHNldCB0aGlzIHRvIDFMIHRvIGFsbG93IEhUVFAvMC45IHJlc3BvbnNlcyBvciAwTCB0byBkaXNhbGxvdyAqLwotICBDSU5JVChIVFRQMDlfQUxMT1dFRCwgTE9ORywgMjg1KSwKKyAgQ1VSTE9QVChDVVJMT1BUX0hUVFAwOV9BTExPV0VELCBDVVJMT1BUVFlQRV9MT05HLCAyODUpLAogCiAgIC8qIGFsdC1zdmMgY29udHJvbCBiaXRtYXNrICovCi0gIENJTklUKEFMVFNWQ19DVFJMLCBMT05HLCAyODYpLAorICBDVVJMT1BUKENVUkxPUFRfQUxUU1ZDX0NUUkwsIENVUkxPUFRUWVBFX0xPTkcsIDI4NiksCiAKICAgLyogYWx0LXN2YyBjYWNoZSBmaWxlIG5hbWUgdG8gcG9zc2libHkgcmVhZCBmcm9tL3dyaXRlIHRvICovCi0gIENJTklUKEFMVFNWQywgU1RSSU5HUE9JTlQsIDI4NyksCisgIENVUkxPUFQoQ1VSTE9QVF9BTFRTVkMsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyODcpLAogCiAgIC8qIG1heGltdW0gYWdlIG9mIGEgY29ubmVjdGlvbiB0byBjb25zaWRlciBpdCBmb3IgcmV1c2UgKGluIHNlY29uZHMpICovCi0gIENJTklUKE1BWEFHRV9DT05OLCBMT05HLCAyODgpLAorICBDVVJMT1BUKENVUkxPUFRfTUFYQUdFX0NPTk4sIENVUkxPUFRUWVBFX0xPTkcsIDI4OCksCisKKyAgLyogU0FTTCBhdXRob3Jpc2F0aW9uIGlkZW50aXR5ICovCisgIENVUkxPUFQoQ1VSTE9QVF9TQVNMX0FVVEhaSUQsIENVUkxPUFRUWVBFX1NUUklOR1BPSU5ULCAyODkpLAorCisgIC8qIGFsbG93IFJDUFQgVE8gY29tbWFuZCB0byBmYWlsIGZvciBzb21lIHJlY2lwaWVudHMgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX01BSUxfUkNQVF9BTExMT1dGQUlMUywgQ1VSTE9QVFRZUEVfTE9ORywgMjkwKSwKKworICAvKiB0aGUgcHJpdmF0ZSBTU0wtY2VydGlmaWNhdGUgYXMgYSAiYmxvYiIgKi8KKyAgQ1VSTE9QVChDVVJMT1BUX1NTTENFUlRfQkxPQiwgQ1VSTE9QVFRZUEVfQkxPQiwgMjkxKSwKKyAgQ1VSTE9QVChDVVJMT1BUX1NTTEtFWV9CTE9CLCBDVVJMT1BUVFlQRV9CTE9CLCAyOTIpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMQ0VSVF9CTE9CLCBDVVJMT1BUVFlQRV9CTE9CLCAyOTMpLAorICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfU1NMS0VZX0JMT0IsIENVUkxPUFRUWVBFX0JMT0IsIDI5NCksCisgIENVUkxPUFQoQ1VSTE9QVF9JU1NVRVJDRVJUX0JMT0IsIENVUkxPUFRUWVBFX0JMT0IsIDI5NSksCisKKyAgLyogSXNzdWVyIGNlcnRpZmljYXRlIGZvciBwcm94eSAqLworICBDVVJMT1BUKENVUkxPUFRfUFJPWFlfSVNTVUVSQ0VSVCwgQ1VSTE9QVFRZUEVfU1RSSU5HUE9JTlQsIDI5NiksCisgIENVUkxPUFQoQ1VSTE9QVF9QUk9YWV9JU1NVRVJDRVJUX0JMT0IsIENVUkxPUFRUWVBFX0JMT0IsIDI5NyksCiAKICAgQ1VSTE9QVF9MQVNURU5UUlkgLyogdGhlIGxhc3QgdW51c2VkICovCiB9IENVUkxvcHRpb247CkBAIC0xOTc0LDcgKzIwMjQsOCBAQAogICBDVVJMX0hUVFBfVkVSU0lPTl8yVExTLCAvKiB1c2UgdmVyc2lvbiAyIGZvciBIVFRQUywgdmVyc2lvbiAxLjEgZm9yIEhUVFAgKi8KICAgQ1VSTF9IVFRQX1ZFUlNJT05fMl9QUklPUl9LTk9XTEVER0UsICAvKiBwbGVhc2UgdXNlIEhUVFAgMiB3aXRob3V0IEhUVFAvMS4xCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBncmFkZSAqLwotCisgIENVUkxfSFRUUF9WRVJTSU9OXzMgPSAzMCwgLyogTWFrZXMgdXNlIG9mIGV4cGxpY2l0IEhUVFAvMyB3aXRob3V0IGZhbGxiYWNrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBDVVJMT1BUX0FMVFNWQyB0byBlbmFibGUgSFRUUC8zIHVwZ3JhZGUgKi8KICAgQ1VSTF9IVFRQX1ZFUlNJT05fTEFTVCAvKiAqSUxMRUdBTCogaHR0cCB2ZXJzaW9uICovCiB9OwogCkBAIC0yMDY3LDcgKzIxMTgsNyBAQAogICBDVVJMX1RJTUVDT05EX0xBU1QKIH0gY3VybF9UaW1lQ29uZDsKIAotLyogU3BlY2lhbCBzaXplX3QgdmFsdWUgc2lnbmFsaW5nIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZy4gKi8KKy8qIFNwZWNpYWwgc2l6ZV90IHZhbHVlIHNpZ25hbGluZyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuICovCiAjZGVmaW5lIENVUkxfWkVST19URVJNSU5BVEVEICgoc2l6ZV90KSAtMSkKIAogLyogY3VybF9zdHJlcXVhbCgpIGFuZCBjdXJsX3N0cm5lcXVhbCgpIGFyZSBzdWJqZWN0IGZvciByZW1vdmFsIGluIGEgZnV0dXJlCkBAIC0yMDc2LDggKzIxMjcsOCBAQAogQ1VSTF9FWFRFUk4gaW50IGN1cmxfc3RybmVxdWFsKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pOwogCiAvKiBNaW1lL2Zvcm0gaGFuZGxpbmcgc3VwcG9ydC4gKi8KLXR5cGVkZWYgc3RydWN0IGN1cmxfbWltZV9zICAgICAgY3VybF9taW1lOyAgICAgIC8qIE1pbWUgY29udGV4dC4gKi8KLXR5cGVkZWYgc3RydWN0IGN1cmxfbWltZXBhcnRfcyAgY3VybF9taW1lcGFydDsgIC8qIE1pbWUgcGFydCBjb250ZXh0LiAqLwordHlwZWRlZiBzdHJ1Y3QgY3VybF9taW1lICAgICAgY3VybF9taW1lOyAgICAgIC8qIE1pbWUgY29udGV4dC4gKi8KK3R5cGVkZWYgc3RydWN0IGN1cmxfbWltZXBhcnQgIGN1cmxfbWltZXBhcnQ7ICAvKiBNaW1lIHBhcnQgY29udGV4dC4gKi8KIAogLyoKICAqIE5BTUUgY3VybF9taW1lX2luaXQoKQpAQCAtMjIwMCw1MiArMjI1MSwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFrZV9vd25lcnNoaXApOwogCi0vKiBPbGQgZm9ybSBBUEkuICovCi0vKiBuYW1lIGlzIHVwcGVyY2FzZSBDVVJMRk9STV88bmFtZT4gKi8KLSNpZmRlZiBDRklOSVQKLSN1bmRlZiBDRklOSVQKLSNlbmRpZgotCi0jaWZkZWYgQ1VSTF9JU09DUFAKLSNkZWZpbmUgQ0ZJTklUKG5hbWUpIENVUkxGT1JNXyAjIyBuYW1lCi0jZWxzZQotLyogVGhlIG1hY3JvICIjIyIgaXMgSVNPIEMsIHdlIGFzc3VtZSBwcmUtSVNPIEMgZG9lc24ndCBzdXBwb3J0IGl0LiAqLwotI2RlZmluZSBDRklOSVQobmFtZSkgQ1VSTEZPUk1fLyoqL25hbWUKLSNlbmRpZgotCiB0eXBlZGVmIGVudW0gewotICBDRklOSVQoTk9USElORyksICAgICAgICAvKioqKioqKioqIHRoZSBmaXJzdCBvbmUgaXMgdW51c2VkICoqKioqKioqKioqKi8KKyAgQ1VSTEZPUk1fTk9USElORywgICAgICAgIC8qKioqKioqKiogdGhlIGZpcnN0IG9uZSBpcyB1bnVzZWQgKioqKioqKioqKioqLworICBDVVJMRk9STV9DT1BZTkFNRSwKKyAgQ1VSTEZPUk1fUFRSTkFNRSwKKyAgQ1VSTEZPUk1fTkFNRUxFTkdUSCwKKyAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLAorICBDVVJMRk9STV9QVFJDT05URU5UUywKKyAgQ1VSTEZPUk1fQ09OVEVOVFNMRU5HVEgsCisgIENVUkxGT1JNX0ZJTEVDT05URU5ULAorICBDVVJMRk9STV9BUlJBWSwKKyAgQ1VSTEZPUk1fT0JTT0xFVEUsCisgIENVUkxGT1JNX0ZJTEUsCiAKLSAgLyogICovCi0gIENGSU5JVChDT1BZTkFNRSksCi0gIENGSU5JVChQVFJOQU1FKSwKLSAgQ0ZJTklUKE5BTUVMRU5HVEgpLAotICBDRklOSVQoQ09QWUNPTlRFTlRTKSwKLSAgQ0ZJTklUKFBUUkNPTlRFTlRTKSwKLSAgQ0ZJTklUKENPTlRFTlRTTEVOR1RIKSwKLSAgQ0ZJTklUKEZJTEVDT05URU5UKSwKLSAgQ0ZJTklUKEFSUkFZKSwKLSAgQ0ZJTklUKE9CU09MRVRFKSwKLSAgQ0ZJTklUKEZJTEUpLAorICBDVVJMRk9STV9CVUZGRVIsCisgIENVUkxGT1JNX0JVRkZFUlBUUiwKKyAgQ1VSTEZPUk1fQlVGRkVSTEVOR1RILAogCi0gIENGSU5JVChCVUZGRVIpLAotICBDRklOSVQoQlVGRkVSUFRSKSwKLSAgQ0ZJTklUKEJVRkZFUkxFTkdUSCksCisgIENVUkxGT1JNX0NPTlRFTlRUWVBFLAorICBDVVJMRk9STV9DT05URU5USEVBREVSLAorICBDVVJMRk9STV9GSUxFTkFNRSwKKyAgQ1VSTEZPUk1fRU5ELAorICBDVVJMRk9STV9PQlNPTEVURTIsCiAKLSAgQ0ZJTklUKENPTlRFTlRUWVBFKSwKLSAgQ0ZJTklUKENPTlRFTlRIRUFERVIpLAotICBDRklOSVQoRklMRU5BTUUpLAotICBDRklOSVQoRU5EKSwKLSAgQ0ZJTklUKE9CU09MRVRFMiksCi0KLSAgQ0ZJTklUKFNUUkVBTSksCi0gIENGSU5JVChDT05URU5UTEVOKSwgLyogYWRkZWQgaW4gNy40Ni4wLCBwcm92aWRlIGEgY3VybF9vZmZfdCBsZW5ndGggKi8KKyAgQ1VSTEZPUk1fU1RSRUFNLAorICBDVVJMRk9STV9DT05URU5UTEVOLCAvKiBhZGRlZCBpbiA3LjQ2LjAsIHByb3ZpZGUgYSBjdXJsX29mZl90IGxlbmd0aCAqLwogCiAgIENVUkxGT1JNX0xBU1RFTlRSWSAvKiB0aGUgbGFzdCB1bnVzZWQgKi8KIH0gQ1VSTGZvcm1vcHRpb247CiAKLSN1bmRlZiBDRklOSVQgLyogZG9uZSAqLwotCiAvKiBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBhcyBwYXJhbWV0ZXIgZm9yIENVUkxGT1JNX0FSUkFZICovCiBzdHJ1Y3QgY3VybF9mb3JtcyB7CiAgIENVUkxmb3Jtb3B0aW9uIG9wdGlvbjsKQEAgLTI0MTYsNyArMjQ1MCw3IEBACiAgKiBpbml0aWFsaXplIGxpYmN1cmwgYW5kIHNldCB1c2VyIGRlZmluZWQgbWVtb3J5IG1hbmFnZW1lbnQgY2FsbGJhY2sKICAqIGZ1bmN0aW9ucy4gIFVzZXJzIGNhbiBpbXBsZW1lbnQgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgdG8gY2hlY2sgZm9yCiAgKiBtZW1vcnkgbGVha3MsIGNoZWNrIGZvciBtaXMtdXNlIG9mIHRoZSBjdXJsIGxpYnJhcnkgZXRjLiAgVXNlciByZWdpc3RlcmVkCi0gKiBjYWxsYmFjayByb3V0aW5lcyB3aXRoIGJlIGludm9rZWQgYnkgdGhpcyBsaWJyYXJ5IGluc3RlYWQgb2YgdGhlIHN5c3RlbQorICogY2FsbGJhY2sgcm91dGluZXMgd2lsbCBiZSBpbnZva2VkIGJ5IHRoaXMgbGlicmFyeSBpbnN0ZWFkIG9mIHRoZSBzeXN0ZW0KICAqIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzIGxpa2UgbWFsbG9jLCBmcmVlIGV0Yy4KICAqLwogQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9nbG9iYWxfaW5pdF9tZW0obG9uZyBmbGFncywKQEAgLTI0NjgsMTAgKzI1MDIsMTEgQEAKICAqIHN1YnNlcXVlbnQgYXR0ZW1wdCB0byBjaGFuZ2UgaXQgd2lsbCByZXN1bHQgaW4gYSBDVVJMU1NMU0VUX1RPT19MQVRFLgogICovCiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBjdXJsX3NzbF9iYWNrZW5kIHsKICAgY3VybF9zc2xiYWNrZW5kIGlkOwogICBjb25zdCBjaGFyICpuYW1lOwotfSBjdXJsX3NzbF9iYWNrZW5kOworfTsKK3R5cGVkZWYgc3RydWN0IGN1cmxfc3NsX2JhY2tlbmQgY3VybF9zc2xfYmFja2VuZDsKIAogdHlwZWRlZiBlbnVtIHsKICAgQ1VSTFNTTFNFVF9PSyA9IDAsCkBAIC0yNTE0LDggKzI1NDksOCBAQAogICovCiBDVVJMX0VYVEVSTiB0aW1lX3QgY3VybF9nZXRkYXRlKGNvbnN0IGNoYXIgKnAsIGNvbnN0IHRpbWVfdCAqdW51c2VkKTsKIAotLyogaW5mbyBhYm91dCB0aGUgY2VydGlmaWNhdGUgY2hhaW4sIG9ubHkgZm9yIE9wZW5TU0wgYnVpbGRzLiBBc2tlZAotICAgZm9yIHdpdGggQ1VSTE9QVF9DRVJUSU5GTyAvIENVUkxJTkZPX0NFUlRJTkZPICovCisvKiBpbmZvIGFib3V0IHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiwgb25seSBmb3IgT3BlblNTTCwgR251VExTLCBTY2hhbm5lbCwgTlNTCisgICBhbmQgR1NLaXQgYnVpbGRzLiBBc2tlZCBmb3Igd2l0aCBDVVJMT1BUX0NFUlRJTkZPIC8gQ1VSTElORk9fQ0VSVElORk8gKi8KIHN0cnVjdCBjdXJsX2NlcnRpbmZvIHsKICAgaW50IG51bV9vZl9jZXJ0czsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNlcnRpZmljYXRlcyB3aXRoIGluZm9ybWF0aW9uICovCiAgIHN0cnVjdCBjdXJsX3NsaXN0ICoqY2VydGluZm87IC8qIGZvciBlYWNoIGluZGV4IGluIHRoaXMgYXJyYXksIHRoZXJlJ3MgYQpAQCAtMjYxMCw4ICsyNjQ1LDkgQEAKICAgQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FX1QgPSBDVVJMSU5GT19PRkZfVCArIDU0LAogICBDVVJMSU5GT19SRURJUkVDVF9USU1FX1QgID0gQ1VSTElORk9fT0ZGX1QgKyA1NSwKICAgQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FX1QgPSBDVVJMSU5GT19PRkZfVCArIDU2LAorICBDVVJMSU5GT19SRVRSWV9BRlRFUiAgICAgID0gQ1VSTElORk9fT0ZGX1QgKyA1NywKIAotICBDVVJMSU5GT19MQVNUT05FICAgICAgICAgID0gNTYKKyAgQ1VSTElORk9fTEFTVE9ORSAgICAgICAgICA9IDU3CiB9IENVUkxJTkZPOwogCiAvKiBDVVJMSU5GT19SRVNQT05TRV9DT0RFIGlzIHRoZSBuZXcgbmFtZSBmb3IgdGhlIG9wdGlvbiBwcmV2aW91c2x5IGtub3duIGFzCkBAIC0yNzEwLDYgKzI3NDYsOCBAQAogICBDVVJMVkVSU0lPTl9USElSRCwKICAgQ1VSTFZFUlNJT05fRk9VUlRILAogICBDVVJMVkVSU0lPTl9GSUZUSCwKKyAgQ1VSTFZFUlNJT05fU0lYVEgsCisgIENVUkxWRVJTSU9OX1NFVkVOVEgsCiAgIENVUkxWRVJTSU9OX0xBU1QgLyogbmV2ZXIgYWN0dWFsbHkgdXNlIHRoaXMgKi8KIH0gQ1VSTHZlcnNpb247CiAKQEAgLTI3MTgsOSArMjc1Niw5IEBACiAgICBtZWFudCB0byBiZSBhIGJ1aWx0LWluIHZlcnNpb24gbnVtYmVyIGZvciB3aGF0IGtpbmQgb2Ygc3RydWN0IHRoZSBjYWxsZXIKICAgIGV4cGVjdHMuIElmIHRoZSBzdHJ1Y3QgZXZlciBjaGFuZ2VzLCB3ZSByZWRlZmluZSB0aGUgTk9XIHRvIGFub3RoZXIgZW51bQogICAgZnJvbSBhYm92ZS4gKi8KLSNkZWZpbmUgQ1VSTFZFUlNJT05fTk9XIENVUkxWRVJTSU9OX0ZJRlRICisjZGVmaW5lIENVUkxWRVJTSU9OX05PVyBDVVJMVkVSU0lPTl9TRVZFTlRICiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBjdXJsX3ZlcnNpb25faW5mb19kYXRhIHsKICAgQ1VSTHZlcnNpb24gYWdlOyAgICAgICAgICAvKiBhZ2Ugb2YgdGhlIHJldHVybmVkIHN0cnVjdCAqLwogICBjb25zdCBjaGFyICp2ZXJzaW9uOyAgICAgIC8qIExJQkNVUkxfVkVSU0lPTiAqLwogICB1bnNpZ25lZCBpbnQgdmVyc2lvbl9udW07IC8qIExJQkNVUkxfVkVSU0lPTl9OVU0gKi8KQEAgLTI3NDcsMTIgKzI3ODUsMjUgQEAKICAgY29uc3QgY2hhciAqbGlic3NoX3ZlcnNpb247IC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZyAqLwogCiAgIC8qIFRoZXNlIGZpZWxkcyB3ZXJlIGFkZGVkIGluIENVUkxWRVJTSU9OX0ZJRlRIICovCi0KICAgdW5zaWduZWQgaW50IGJyb3RsaV92ZXJfbnVtOyAvKiBOdW1lcmljIEJyb3RsaSB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BSk9SIDw8IDI0KSB8IChNSU5PUiA8PCAxMikgfCBQQVRDSCAqLwogICBjb25zdCBjaGFyICpicm90bGlfdmVyc2lvbjsgLyogaHVtYW4gcmVhZGFibGUgc3RyaW5nLiAqLwogCi19IGN1cmxfdmVyc2lvbl9pbmZvX2RhdGE7CisgIC8qIFRoZXNlIGZpZWxkcyB3ZXJlIGFkZGVkIGluIENVUkxWRVJTSU9OX1NJWFRIICovCisgIHVuc2lnbmVkIGludCBuZ2h0dHAyX3Zlcl9udW07IC8qIE51bWVyaWMgbmdodHRwMiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNQUpPUiA8PCAxNikgfCAoTUlOT1IgPDwgOCkgfCBQQVRDSCAqLworICBjb25zdCBjaGFyICpuZ2h0dHAyX3ZlcnNpb247IC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZy4gKi8KKyAgY29uc3QgY2hhciAqcXVpY192ZXJzaW9uOyAgICAvKiBodW1hbiByZWFkYWJsZSBxdWljICgrIEhUVFAvMykgbGlicmFyeSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvciBOVUxMICovCisKKyAgLyogVGhlc2UgZmllbGRzIHdlcmUgYWRkZWQgaW4gQ1VSTFZFUlNJT05fU0VWRU5USCAqLworICBjb25zdCBjaGFyICpjYWluZm87ICAgICAgICAgIC8qIHRoZSBidWlsdC1pbiBkZWZhdWx0IENVUkxPUFRfQ0FJTkZPLCBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIE5VTEwgKi8KKyAgY29uc3QgY2hhciAqY2FwYXRoOyAgICAgICAgICAvKiB0aGUgYnVpbHQtaW4gZGVmYXVsdCBDVVJMT1BUX0NBUEFUSCwgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBOVUxMICovCisKK307Cit0eXBlZGVmIHN0cnVjdCBjdXJsX3ZlcnNpb25faW5mb19kYXRhIGN1cmxfdmVyc2lvbl9pbmZvX2RhdGE7CiAKICNkZWZpbmUgQ1VSTF9WRVJTSU9OX0lQVjYgICAgICAgICAoMTw8MCkgIC8qIElQdjYtZW5hYmxlZCAqLwogI2RlZmluZSBDVVJMX1ZFUlNJT05fS0VSQkVST1M0ICAgICgxPDwxKSAgLyogS2VyYmVyb3MgVjQgYXV0aCBpcyBzdXBwb3J0ZWQKQEAgLTI3ODQsNiArMjgzNSw3IEBACiAjZGVmaW5lIENVUkxfVkVSU0lPTl9NVUxUSV9TU0wgICAgKDE8PDIyKSAvKiBNdWx0aXBsZSBTU0wgYmFja2VuZHMgYXZhaWxhYmxlICovCiAjZGVmaW5lIENVUkxfVkVSU0lPTl9CUk9UTEkgICAgICAgKDE8PDIzKSAvKiBCcm90bGkgZmVhdHVyZXMgYXJlIHByZXNlbnQuICovCiAjZGVmaW5lIENVUkxfVkVSU0lPTl9BTFRTVkMgICAgICAgKDE8PDI0KSAvKiBBbHQtU3ZjIGhhbmRsaW5nIGJ1aWx0LWluICovCisjZGVmaW5lIENVUkxfVkVSU0lPTl9IVFRQMyAgICAgICAgKDE8PDI1KSAvKiBIVFRQMyBzdXBwb3J0IGJ1aWx0LWluICovCiAKICAvKgogICogTkFNRSBjdXJsX3ZlcnNpb25faW5mbygpCkBAIC0yODY2LDQgKzI5MTgsNCBAQAogI2VuZGlmIC8qIF9fU1REQ19fID49IDEgKi8KICNlbmRpZiAvKiBnY2MgPj0gNC4zICYmICFfX2NwbHVzcGx1cyAqLwogCi0jZW5kaWYgLyogX19DVVJMX0NVUkxfSCAqLworI2VuZGlmIC8qIENVUkxJTkNfQ1VSTF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9jdXJsdmVyLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9jdXJsdmVyLmgKaW5kZXggMDRlZmI5My4uOTdhOGJkOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvY3VybHZlci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX0NVUkxWRVJfSAotI2RlZmluZSBfX0NVUkxfQ1VSTFZFUl9ICisjaWZuZGVmIENVUkxJTkNfQ1VSTFZFUl9ICisjZGVmaW5lIENVUkxJTkNfQ1VSTFZFUl9ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsMjAgKzI2LDIwIEBACiAgICBhIHNjcmlwdCBhdCByZWxlYXNlLXRpbWUuIFRoaXMgd2FzIG1hZGUgaXRzIG93biBoZWFkZXIgZmlsZSBpbiA3LjExLjIgKi8KIAogLyogVGhpcyBpcyB0aGUgZ2xvYmFsIHBhY2thZ2UgY29weXJpZ2h0ICovCi0jZGVmaW5lIExJQkNVUkxfQ09QWVJJR0hUICIxOTk2IC0gMjAxOSBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4uIgorI2RlZmluZSBMSUJDVVJMX0NPUFlSSUdIVCAiMTk5NiAtIDIwMjAgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LiIKIAogLyogVGhpcyBpcyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYmN1cmwgcGFja2FnZSBmcm9tIHdoaWNoIHRoaXMgaGVhZGVyCiAgICBmaWxlIG9yaWdpbnM6ICovCi0jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAiNy42NS4wIgorI2RlZmluZSBMSUJDVVJMX1ZFUlNJT04gIjcuNzEuMSIKIAogLyogVGhlIG51bWVyaWMgdmVyc2lvbiBudW1iZXIgaXMgYWxzbyBhdmFpbGFibGUgImluIHBhcnRzIiBieSB1c2luZyB0aGVzZQogICAgZGVmaW5lczogKi8KICNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01BSk9SIDcKLSNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01JTk9SIDY1Ci0jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9QQVRDSCAwCisjZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9NSU5PUiA3MQorI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fUEFUQ0ggMQogCiAvKiBUaGlzIGlzIHRoZSBudW1lcmljIHZlcnNpb24gb2YgdGhlIGxpYmN1cmwgdmVyc2lvbiBudW1iZXIsIG1lYW50IGZvciBlYXNpZXIKLSAgIHBhcnNpbmcgYW5kIGNvbXBhcmlvbnMgYnkgcHJvZ3JhbXMuIFRoZSBMSUJDVVJMX1ZFUlNJT05fTlVNIGRlZmluZSB3aWxsCisgICBwYXJzaW5nIGFuZCBjb21wYXJpc29ucyBieSBwcm9ncmFtcy4gVGhlIExJQkNVUkxfVkVSU0lPTl9OVU0gZGVmaW5lIHdpbGwKICAgIGFsd2F5cyBmb2xsb3cgdGhpcyBzeW50YXg6CiAKICAgICAgICAgIDB4WFhZWVpaCkBAIC01Nyw3ICs1Nyw3IEBACiAgICBDVVJMX1ZFUlNJT05fQklUUygpIG1hY3JvIHNpbmNlIGN1cmwncyBvd24gY29uZmlndXJlIHNjcmlwdCBncmVwcyBmb3IgaXQKICAgIGFuZCBuZWVkcyBpdCB0byBjb250YWluIHRoZSBmdWxsIG51bWJlci4KICovCi0jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9OVU0gMHgwNzQxMDAKKyNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX05VTSAweDA3NDcwMQogCiAvKgogICogVGhpcyBpcyB0aGUgZGF0ZSBhbmQgdGltZSB3aGVuIHRoZSBmdWxsIHNvdXJjZSBwYWNrYWdlIHdhcyBjcmVhdGVkLiBUaGUKQEAgLTc0LDQgKzc0LDQgQEAKICNkZWZpbmUgQ1VSTF9BVF9MRUFTVF9WRVJTSU9OKHgseSx6KSBcCiAgIChMSUJDVVJMX1ZFUlNJT05fTlVNID49IENVUkxfVkVSU0lPTl9CSVRTKHgsIHksIHopKQogCi0jZW5kaWYgLyogX19DVVJMX0NVUkxWRVJfSCAqLworI2VuZGlmIC8qIENVUkxJTkNfQ1VSTFZFUl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9lYXN5LmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9lYXN5LmgKaW5kZXggZjQyYThhOS4uOWFlZjEzMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvZWFzeS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL2Vhc3kuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX0VBU1lfSAotI2RlZmluZSBfX0NVUkxfRUFTWV9ICisjaWZuZGVmIENVUkxJTkNfRUFTWV9ICisjZGVmaW5lIENVUkxJTkNfRUFTWV9ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjUsNiArMjUsMTcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKy8qIEZsYWcgYml0cyBpbiB0aGUgY3VybF9ibG9iIHN0cnVjdDogKi8KKyNkZWZpbmUgQ1VSTF9CTE9CX0NPUFkgICAxIC8qIHRlbGwgbGliY3VybCB0byBjb3B5IHRoZSBkYXRhICovCisjZGVmaW5lIENVUkxfQkxPQl9OT0NPUFkgMCAvKiB0ZWxsIGxpYmN1cmwgdG8gTk9UIGNvcHkgdGhlIGRhdGEgKi8KKworc3RydWN0IGN1cmxfYmxvYiB7CisgIHZvaWQgKmRhdGE7CisgIHNpemVfdCBsZW47CisgIHVuc2lnbmVkIGludCBmbGFnczsgLyogYml0IDAgaXMgZGVmaW5lZCwgdGhlIHJlc3QgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IHplcm9lcyAqLworfTsKKwogQ1VSTF9FWFRFUk4gQ1VSTCAqY3VybF9lYXN5X2luaXQodm9pZCk7CiBDVVJMX0VYVEVSTiBDVVJMY29kZSBjdXJsX2Vhc3lfc2V0b3B0KENVUkwgKmN1cmwsIENVUkxvcHRpb24gb3B0aW9uLCAuLi4pOwogQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9lYXN5X3BlcmZvcm0oQ1VSTCAqY3VybCk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9tcHJpbnRmLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9tcHJpbnRmLmgKaW5kZXggZTIwZjU0Ni4uZjYxNWVkNyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvbXByaW50Zi5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL21wcmludGYuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX01QUklOVEZfSAotI2RlZmluZSBfX0NVUkxfTVBSSU5URl9ICisjaWZuZGVmIENVUkxJTkNfTVBSSU5URl9ICisjZGVmaW5lIENVUkxJTkNfTVBSSU5URl9ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDcsNCArNDcsNCBAQAogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0NVUkxfTVBSSU5URl9IICovCisjZW5kaWYgLyogQ1VSTElOQ19NUFJJTlRGX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL211bHRpLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9tdWx0aS5oCmluZGV4IGIxOWRiYWYuLjJlNmJiNzIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL211bHRpLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvbXVsdGkuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX01VTFRJX0gKLSNkZWZpbmUgX19DVVJMX01VTFRJX0gKKyNpZm5kZWYgQ1VSTElOQ19NVUxUSV9ICisjZGVmaW5lIENVUkxJTkNfTVVMVElfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTcyLDYgKzcyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ZWQgdG8gZ2V0IGFkZGVkIC0gYWdhaW4gKi8KICAgQ1VSTE1fUkVDVVJTSVZFX0FQSV9DQUxMLCAvKiBhbiBhcGkgZnVuY3Rpb24gd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgKi8KKyAgQ1VSTE1fV0FLRVVQX0ZBSUxVUkUsICAvKiB3YWtldXAgaXMgdW5hdmFpbGFibGUgb3IgZmFpbGVkICovCisgIENVUkxNX0JBRF9GVU5DVElPTl9BUkdVTUVOVCwgIC8qIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIGEgYmFkIHBhcmFtZXRlciAqLwogICBDVVJMTV9MQVNUCiB9IENVUkxNY29kZTsKIApAQCAtMTczLDYgKzE3NSwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dF9tcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZXQpOwogCisvKgorICogTmFtZTogICAgIGN1cmxfbXVsdGlfcG9sbCgpCisgKgorICogRGVzYzogICAgIFBvbGwgb24gYWxsIGZkcyB3aXRoaW4gYSBDVVJMTSBzZXQgYXMgd2VsbCBhcyBhbnkKKyAqICAgICAgICAgICBhZGRpdGlvbmFsIGZkcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6ICBDVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBtdWx0aSBlcnJvciBjb2RlLgorICovCitDVVJMX0VYVEVSTiBDVVJMTWNvZGUgY3VybF9tdWx0aV9wb2xsKENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3dhaXRmZCBleHRyYV9mZHNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCk7CisKKy8qCisgKiBOYW1lOiAgICAgY3VybF9tdWx0aV93YWtldXAoKQorICoKKyAqIERlc2M6ICAgICB3YWtlcyB1cCBhIHNsZWVwaW5nIGN1cmxfbXVsdGlfcG9sbCBjYWxsLgorICoKKyAqIFJldHVybnM6ICBDVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBtdWx0aSBlcnJvciBjb2RlLgorICovCitDVVJMX0VYVEVSTiBDVVJMTWNvZGUgY3VybF9tdWx0aV93YWtldXAoQ1VSTE0gKm11bHRpX2hhbmRsZSk7CisKICAvKgogICAqIE5hbWU6ICAgIGN1cmxfbXVsdGlfcGVyZm9ybSgpCiAgICoKQEAgLTI0Miw3ICsyNjcsNyBAQAogICogICAgICAgICAgdmFsdWUgaW50byB0aGUgZXF1aXZhbGVudCBodW1hbiByZWFkYWJsZSBlcnJvciBzdHJpbmcuICBUaGlzIGlzCiAgKiAgICAgICAgICB1c2VmdWwgZm9yIHByaW50aW5nIG1lYW5pbmdmdWwgZXJyb3IgbWVzc2FnZXMuCiAgKgotICogUmV0dXJuczogQSBwb2ludGVyIHRvIGEgemVyby10ZXJtaW5hdGVkIGVycm9yIG1lc3NhZ2UuCisgKiBSZXR1cm5zOiBBIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQgZXJyb3IgbWVzc2FnZS4KICAqLwogQ1VSTF9FWFRFUk4gY29uc3QgY2hhciAqY3VybF9tdWx0aV9zdHJlcnJvcihDVVJMTWNvZGUpOwogCkBAIC0zMTksNjggKzM0NCw1NiBAQAogQ1VSTF9FWFRFUk4gQ1VSTE1jb2RlIGN1cmxfbXVsdGlfdGltZW91dChDVVJMTSAqbXVsdGlfaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICptaWxsaXNlY29uZHMpOwogCi0jdW5kZWYgQ0lOSVQgLyogcmUtdXNpbmcgdGhlIHNhbWUgbmFtZSBhcyBpbiBjdXJsLmggKi8KLQotI2lmZGVmIENVUkxfSVNPQ1BQCi0jZGVmaW5lIENJTklUKG5hbWUsdHlwZSxudW0pIENVUkxNT1BUXyAjIyBuYW1lID0gQ1VSTE9QVFRZUEVfICMjIHR5cGUgKyBudW0KLSNlbHNlCi0vKiBUaGUgbWFjcm8gIiMjIiBpcyBJU08gQywgd2UgYXNzdW1lIHByZS1JU08gQyBkb2Vzbid0IHN1cHBvcnQgaXQuICovCi0jZGVmaW5lIExPTkcgICAgICAgICAgQ1VSTE9QVFRZUEVfTE9ORwotI2RlZmluZSBPQkpFQ1RQT0lOVCAgIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UCi0jZGVmaW5lIEZVTkNUSU9OUE9JTlQgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVAotI2RlZmluZSBPRkZfVCAgICAgICAgIENVUkxPUFRUWVBFX09GRl9UCi0jZGVmaW5lIENJTklUKG5hbWUsdHlwZSxudW1iZXIpIENVUkxNT1BUXy8qKi9uYW1lID0gdHlwZSArIG51bWJlcgotI2VuZGlmCi0KIHR5cGVkZWYgZW51bSB7CiAgIC8qIFRoaXMgaXMgdGhlIHNvY2tldCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyICovCi0gIENJTklUKFNPQ0tFVEZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxKSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiwgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCwgMSksCiAKICAgLyogVGhpcyBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBzb2NrZXQgY2FsbGJhY2sgKi8KLSAgQ0lOSVQoU09DS0VUREFUQSwgT0JKRUNUUE9JTlQsIDIpLAorICBDVVJMT1BUKENVUkxNT1BUX1NPQ0tFVERBVEEsIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULCAyKSwKIAogICAgIC8qIHNldCB0byAxIHRvIGVuYWJsZSBwaXBlbGluaW5nIGZvciB0aGlzIG11bHRpIGhhbmRsZSAqLwotICBDSU5JVChQSVBFTElOSU5HLCBMT05HLCAzKSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9QSVBFTElOSU5HLCBDVVJMT1BUVFlQRV9MT05HLCAzKSwKIAogICAgLyogVGhpcyBpcyB0aGUgdGltZXIgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciAqLwotICBDSU5JVChUSU1FUkZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCA0KSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9USU1FUkZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCA0KSwKIAogICAvKiBUaGlzIGlzIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIHRpbWVyIGNhbGxiYWNrICovCi0gIENJTklUKFRJTUVSREFUQSwgT0JKRUNUUE9JTlQsIDUpLAorICBDVVJMT1BUKENVUkxNT1BUX1RJTUVSREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDUpLAogCiAgIC8qIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KLSAgQ0lOSVQoTUFYQ09OTkVDVFMsIExPTkcsIDYpLAorICBDVVJMT1BUKENVUkxNT1BUX01BWENPTk5FQ1RTLCBDVVJMT1BUVFlQRV9MT05HLCA2KSwKIAogICAvKiBtYXhpbXVtIG51bWJlciBvZiAocGlwZWxpbmluZykgY29ubmVjdGlvbnMgdG8gb25lIGhvc3QgKi8KLSAgQ0lOSVQoTUFYX0hPU1RfQ09OTkVDVElPTlMsIExPTkcsIDcpLAorICBDVVJMT1BUKENVUkxNT1BUX01BWF9IT1NUX0NPTk5FQ1RJT05TLCBDVVJMT1BUVFlQRV9MT05HLCA3KSwKIAogICAvKiBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyBpbiBhIHBpcGVsaW5lICovCi0gIENJTklUKE1BWF9QSVBFTElORV9MRU5HVEgsIExPTkcsIDgpLAorICBDVVJMT1BUKENVUkxNT1BUX01BWF9QSVBFTElORV9MRU5HVEgsIENVUkxPUFRUWVBFX0xPTkcsIDgpLAogCiAgIC8qIGEgY29ubmVjdGlvbiB3aXRoIGEgY29udGVudC1sZW5ndGggbG9uZ2VyIHRoYW4gdGhpcwogICAgICB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGZvciBwaXBlbGluaW5nICovCi0gIENJTklUKENPTlRFTlRfTEVOR1RIX1BFTkFMVFlfU0laRSwgT0ZGX1QsIDkpLAorICBDVVJMT1BUKENVUkxNT1BUX0NPTlRFTlRfTEVOR1RIX1BFTkFMVFlfU0laRSwgQ1VSTE9QVFRZUEVfT0ZGX1QsIDkpLAogCiAgIC8qIGEgY29ubmVjdGlvbiB3aXRoIGEgY2h1bmsgbGVuZ3RoIGxvbmdlciB0aGFuIHRoaXMKICAgICAgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBmb3IgcGlwZWxpbmluZyAqLwotICBDSU5JVChDSFVOS19MRU5HVEhfUEVOQUxUWV9TSVpFLCBPRkZfVCwgMTApLAorICBDVVJMT1BUKENVUkxNT1BUX0NIVU5LX0xFTkdUSF9QRU5BTFRZX1NJWkUsIENVUkxPUFRUWVBFX09GRl9ULCAxMCksCiAKLSAgLyogYSBsaXN0IG9mIHNpdGUgbmFtZXMoK3BvcnQpIHRoYXQgYXJlIGJsYWNrbGlzdGVkIGZyb20KLSAgICAgcGlwZWxpbmluZyAqLwotICBDSU5JVChQSVBFTElOSU5HX1NJVEVfQkwsIE9CSkVDVFBPSU5ULCAxMSksCisgIC8qIGEgbGlzdCBvZiBzaXRlIG5hbWVzKCtwb3J0KSB0aGF0IGFyZSBibG9ja2VkIGZyb20gcGlwZWxpbmluZyAqLworICBDVVJMT1BUKENVUkxNT1BUX1BJUEVMSU5JTkdfU0lURV9CTCwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDExKSwKIAotICAvKiBhIGxpc3Qgb2Ygc2VydmVyIHR5cGVzIHRoYXQgYXJlIGJsYWNrbGlzdGVkIGZyb20KLSAgICAgcGlwZWxpbmluZyAqLwotICBDSU5JVChQSVBFTElOSU5HX1NFUlZFUl9CTCwgT0JKRUNUUE9JTlQsIDEyKSwKKyAgLyogYSBsaXN0IG9mIHNlcnZlciB0eXBlcyB0aGF0IGFyZSBibG9ja2VkIGZyb20gcGlwZWxpbmluZyAqLworICBDVVJMT1BUKENVUkxNT1BUX1BJUEVMSU5JTkdfU0VSVkVSX0JMLCBDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCwgMTIpLAogCiAgIC8qIG1heGltdW0gbnVtYmVyIG9mIG9wZW4gY29ubmVjdGlvbnMgaW4gdG90YWwgKi8KLSAgQ0lOSVQoTUFYX1RPVEFMX0NPTk5FQ1RJT05TLCBMT05HLCAxMyksCisgIENVUkxPUFQoQ1VSTE1PUFRfTUFYX1RPVEFMX0NPTk5FQ1RJT05TLCBDVVJMT1BUVFlQRV9MT05HLCAxMyksCiAKICAgIC8qIFRoaXMgaXMgdGhlIHNlcnZlciBwdXNoIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgKi8KLSAgQ0lOSVQoUFVTSEZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxNCksCisgIENVUkxPUFQoQ1VSTE1PUFRfUFVTSEZVTkNUSU9OLCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULCAxNCksCiAKICAgLyogVGhpcyBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIgcHVzaCBjYWxsYmFjayAqLwotICBDSU5JVChQVVNIREFUQSwgT0JKRUNUUE9JTlQsIDE1KSwKKyAgQ1VSTE9QVChDVVJMTU9QVF9QVVNIREFUQSwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQsIDE1KSwKKworICAvKiBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHN0cmVhbXMgdG8gc3VwcG9ydCBvbiBhIGNvbm5lY3Rpb24gKi8KKyAgQ1VSTE9QVChDVVJMTU9QVF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TLCBDVVJMT1BUVFlQRV9MT05HLCAxNiksCiAKICAgQ1VSTE1PUFRfTEFTVEVOVFJZIC8qIHRoZSBsYXN0IHVudXNlZCAqLwogfSBDVVJMTW9wdGlvbjsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N0ZGNoZWFkZXJzLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9zdGRjaGVhZGVycy5oCmluZGV4IDAyN2I2ZjQuLmE2YmRjMWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N0ZGNoZWFkZXJzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvc3RkY2hlYWRlcnMuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19TVERDX0hFQURFUlNfSAotI2RlZmluZSBfX1NURENfSEVBREVSU19ICisjaWZuZGVmIENVUkxJTkNfU1REQ0hFQURFUlNfSAorI2RlZmluZSBDVVJMSU5DX1NURENIRUFERVJTX0gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMCw0ICszMCw0IEBACiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBpbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAKLSNlbmRpZiAvKiBfX1NURENfSEVBREVSU19IICovCisjZW5kaWYgLyogQ1VSTElOQ19TVERDSEVBREVSU19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC9zeXN0ZW0uaCBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N5c3RlbS5oCmluZGV4IDFlNTU1ZWMuLjg2N2FmNjEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N5c3RlbS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3N5c3RlbS5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfX0NVUkxfU1lTVEVNX0gKLSNkZWZpbmUgX19DVVJMX1NZU1RFTV9ICisjaWZuZGVmIENVUkxJTkNfU1lTVEVNX0gKKyNkZWZpbmUgQ1VSTElOQ19TWVNURU1fSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTEzNywxNSArMTM3LDI2IEBACiAjICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9TT0NLTEVOX1QgaW50CiAKICNlbGlmIGRlZmluZWQoX19MQ0NfXykKLSMgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UICAgICBsb25nCi0jICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAgICAgImxkIgotIyAgZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICAgICJsdSIKLSMgIGRlZmluZSBDVVJMX1NVRkZJWF9DVVJMX09GRl9UICAgICBMCi0jICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUgICAgVUwKLSMgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCBpbnQKKyMgIGlmIGRlZmluZWQoX19lMmtfXykgLyogTUNTVCBlTGJydXMgQyBDb21waWxlciAqLworIyAgICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAgICAgbG9uZworIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAgICAgImxkIgorIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgICAgImx1IgorIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCAgICAgTAorIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUgICAgVUwKKyMgICAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIHNvY2tsZW5fdAorIyAgICBkZWZpbmUgQ1VSTF9QVUxMX1NZU19UWVBFU19IICAgICAgMQorIyAgICBkZWZpbmUgQ1VSTF9QVUxMX1NZU19TT0NLRVRfSCAgICAgMQorIyAgZWxzZSAgICAgICAgICAgICAgICAvKiBMb2NhbCAob3IgTGl0dGxlKSBDIENvbXBpbGVyICovCisjICAgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UICAgICBsb25nCisjICAgIGRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICAgICAibGQiCisjICAgIGRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UVSAgICAibHUiCisjICAgIGRlZmluZSBDVVJMX1NVRkZJWF9DVVJMX09GRl9UICAgICBMCisjICAgIGRlZmluZSBDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSAgICBVTAorIyAgICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9TT0NLTEVOX1QgaW50CisjICBlbmRpZgogCiAjZWxpZiBkZWZpbmVkKF9fU1lNQklBTjMyX18pCi0jICBpZiBkZWZpbmVkKF9fRUFCSV9fKSAgLyogVHJlYXQgYWxsIEFSTSBjb21waWxlcnMgZXF1YWxseSAqLworIyAgaWYgZGVmaW5lZChfX0VBQklfXykgLyogVHJlYXQgYWxsIEFSTSBjb21waWxlcnMgZXF1YWxseSAqLwogIyAgICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAgICAgbG9uZyBsb25nCiAjICAgIGRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICAgICAibGxkIgogIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgICAgImxsdSIKQEAgLTI4OCw3ICsyOTksNiBAQAogIyAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIGludAogCiAjZWxpZiBkZWZpbmVkKF9fVElOWUNfXykgLyogYWxzbyBrbm93biBhcyB0Y2MgKi8KLQogIyAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgICAgIGxvbmcgbG9uZwogIyAgZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgICAgICJsbGQiCiAjICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgICAgImxsdSIKQEAgLTM3Nyw2ICszODcsNyBAQAogIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUgICAgVUxMCiAjICBlbGlmIGRlZmluZWQoX19MUDY0X18pIHx8IFwKICAgICAgICAgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fcHBjNjRfXykgfHwgZGVmaW5lZChfX3NwYXJjNjRfXykgfHwgXAorICAgICAgICBkZWZpbmVkKF9fZTJrX18pIHx8IFwKICAgICAgICAgKGRlZmluZWQoX19TSVpFT0ZfTE9OR19fKSAmJiBfX1NJWkVPRl9MT05HX18gPT0gOCkgfHwgXAogICAgICAgICAoZGVmaW5lZChfX0xPTkdfTUFYX18pICYmIF9fTE9OR19NQVhfXyA9PSA5MjIzMzcyMDM2ODU0Nzc1ODA3TCkKICMgICAgZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgICAgIGxvbmcKQEAgLTQ3MywyMSArNDg0LDIxIEBACiAgKi8KIAogI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoX19CT1JMQU5EQ19fID09IDB4MDU1MSkKLSMgIGRlZmluZSBfX0NVUkxfT0ZGX1RfQ19ITFBSMih4KSB4Ci0jICBkZWZpbmUgX19DVVJMX09GRl9UX0NfSExQUjEoeCkgX19DVVJMX09GRl9UX0NfSExQUjIoeCkKLSMgIGRlZmluZSBDVVJMX09GRl9UX0MoVmFsKSAgX19DVVJMX09GRl9UX0NfSExQUjEoVmFsKSAjIyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQ1VSTF9PRkZfVF9DX0hMUFIxKENVUkxfU1VGRklYX0NVUkxfT0ZGX1QpCi0jICBkZWZpbmUgQ1VSTF9PRkZfVFVfQyhWYWwpIF9fQ1VSTF9PRkZfVF9DX0hMUFIxKFZhbCkgIyMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0NVUkxfT0ZGX1RfQ19ITFBSMShDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSkKKyMgIGRlZmluZSBDVVJMSU5DX09GRl9UX0NfSExQUjIoeCkgeAorIyAgZGVmaW5lIENVUkxJTkNfT0ZGX1RfQ19ITFBSMSh4KSBDVVJMSU5DX09GRl9UX0NfSExQUjIoeCkKKyMgIGRlZmluZSBDVVJMX09GRl9UX0MoVmFsKSAgQ1VSTElOQ19PRkZfVF9DX0hMUFIxKFZhbCkgIyMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5DX09GRl9UX0NfSExQUjEoQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCkKKyMgIGRlZmluZSBDVVJMX09GRl9UVV9DKFZhbCkgQ1VSTElOQ19PRkZfVF9DX0hMUFIxKFZhbCkgIyMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5DX09GRl9UX0NfSExQUjEoQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUpCiAjZWxzZQogIyAgaWZkZWYgQ1VSTF9JU09DUFAKLSMgICAgZGVmaW5lIF9fQ1VSTF9PRkZfVF9DX0hMUFIyKFZhbCxTdWZmaXgpIFZhbCAjIyBTdWZmaXgKKyMgICAgZGVmaW5lIENVUkxJTkNfT0ZGX1RfQ19ITFBSMihWYWwsU3VmZml4KSBWYWwgIyMgU3VmZml4CiAjICBlbHNlCi0jICAgIGRlZmluZSBfX0NVUkxfT0ZGX1RfQ19ITFBSMihWYWwsU3VmZml4KSBWYWwvKiovU3VmZml4CisjICAgIGRlZmluZSBDVVJMSU5DX09GRl9UX0NfSExQUjIoVmFsLFN1ZmZpeCkgVmFsLyoqL1N1ZmZpeAogIyAgZW5kaWYKLSMgIGRlZmluZSBfX0NVUkxfT0ZGX1RfQ19ITFBSMShWYWwsU3VmZml4KSBfX0NVUkxfT0ZGX1RfQ19ITFBSMihWYWwsU3VmZml4KQotIyAgZGVmaW5lIENVUkxfT0ZGX1RfQyhWYWwpICBfX0NVUkxfT0ZGX1RfQ19ITFBSMShWYWwsQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCkKLSMgIGRlZmluZSBDVVJMX09GRl9UVV9DKFZhbCkgX19DVVJMX09GRl9UX0NfSExQUjEoVmFsLENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVKQorIyAgZGVmaW5lIENVUkxJTkNfT0ZGX1RfQ19ITFBSMShWYWwsU3VmZml4KSBDVVJMSU5DX09GRl9UX0NfSExQUjIoVmFsLFN1ZmZpeCkKKyMgIGRlZmluZSBDVVJMX09GRl9UX0MoVmFsKSAgQ1VSTElOQ19PRkZfVF9DX0hMUFIxKFZhbCxDVVJMX1NVRkZJWF9DVVJMX09GRl9UKQorIyAgZGVmaW5lIENVUkxfT0ZGX1RVX0MoVmFsKSBDVVJMSU5DX09GRl9UX0NfSExQUjEoVmFsLENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVKQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0NVUkxfU1lTVEVNX0ggKi8KKyNlbmRpZiAvKiBDVVJMSU5DX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC90eXBlY2hlY2stZ2NjLmggYi9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC90eXBlY2hlY2stZ2NjLmgKaW5kZXggMmQxZGU0ZC4uZjhjYjkyMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9pbmNsdWRlL2N1cmwvdHlwZWNoZWNrLWdjYy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3R5cGVjaGVjay1nY2MuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19DVVJMX1RZUEVDSEVDS19HQ0NfSAotI2RlZmluZSBfX0NVUkxfVFlQRUNIRUNLX0dDQ19ICisjaWZuZGVmIENVUkxJTkNfVFlQRUNIRUNLX0dDQ19ICisjZGVmaW5lIENVUkxJTkNfVFlQRUNIRUNLX0dDQ19ICiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCiAgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjUsMTAgKzI1LDEwIEBACiAvKiB3cmFwcyBjdXJsX2Vhc3lfc2V0b3B0KCkgd2l0aCB0eXBlY2hlY2tpbmcgKi8KIAogLyogVG8gYWRkIGEgbmV3IGtpbmQgb2Ygd2FybmluZywgYWRkIGFuCi0gKiAgIGlmKF9jdXJsX2lzX3NvbWV0eXBlX29wdGlvbihfY3VybF9vcHQpKQotICogICAgIGlmKCFfY3VybF9pc19zb21ldHlwZSh2YWx1ZSkpCisgKiAgIGlmKGN1cmxjaGVja19zb21ldHlwZV9vcHRpb24oX2N1cmxfb3B0KSkKKyAqICAgICBpZighY3VybGNoZWNrX3NvbWV0eXBlKHZhbHVlKSkKICAqICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zb21ldHlwZSgpOwotICogYmxvY2sgYW5kIGRlZmluZSBfY3VybF9pc19zb21ldHlwZV9vcHRpb24sIF9jdXJsX2lzX3NvbWV0eXBlIGFuZAorICogYmxvY2sgYW5kIGRlZmluZSBjdXJsY2hlY2tfc29tZXR5cGVfb3B0aW9uLCBjdXJsY2hlY2tfc29tZXR5cGUgYW5kCiAgKiBfY3VybF9lYXN5X3NldG9wdF9lcnJfc29tZXR5cGUgYmVsb3cKICAqCiAgKiBOT1RFOiBXZSB1c2UgdHdvIG5lc3RlZCAnaWYnIHN0YXRlbWVudHMgaGVyZSBpbnN0ZWFkIG9mIHRoZSAmJiBvcGVyYXRvciwgaW4KQEAgLTM4LDExMiArMzgsMTEyIEBACiAgKiBUbyBhZGQgYW4gb3B0aW9uIHRoYXQgdXNlcyB0aGUgc2FtZSB0eXBlIGFzIGFuIGV4aXN0aW5nIG9wdGlvbiwgeW91J2xsIGp1c3QKICAqIG5lZWQgdG8gZXh0ZW5kIHRoZSBhcHByb3ByaWF0ZSBfY3VybF8qX29wdGlvbiBtYWNybwogICovCi0jZGVmaW5lIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBvcHRpb24sIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1fX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fdHlwZW9mX18ob3B0aW9uKSBfY3VybF9vcHQgPSBvcHRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYoX19idWlsdGluX2NvbnN0YW50X3AoX2N1cmxfb3B0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19sb25nX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19sb25nKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2xvbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19vZmZfdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19vZmZfdCh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfb2ZmX3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19zdHJpbmdfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19zdHJpbmcodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3N0cmluZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc193cml0ZV9jYl9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc193cml0ZV9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3dyaXRlX2NhbGxiYWNrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1JFU09MVkVSX1NUQVJUX0ZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19yZXNvbHZlcl9zdGFydF9jYWxsYmFjayh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Jlc29sdmVyX3N0YXJ0X2NhbGxiYWNrKCk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1JFQURGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19yZWFkX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3JlYWRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19pb2N0bF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2lvY3RsX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19zb2Nrb3B0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NvY2tvcHRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX09QRU5TT0NLRVRGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19vcGVuc29ja2V0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX29wZW5zb2NrZXRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19wcm9ncmVzc19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Byb2dyZXNzX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0RFQlVHRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19kZWJ1Z19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2RlYnVnX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19zc2xfY3R4X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NzbF9jdHhfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19jb252X2NiX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19jb252X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NvbnZfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NFRUtGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19zZWVrX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NlZWtfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19jYl9kYXRhX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19jYl9kYXRhKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NiX2RhdGEoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0VSUk9SQlVGRkVSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19lcnJvcl9idWZmZXIodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2Vycm9yX2J1ZmZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NUREVSUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19GSUxFKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0ZJTEUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19wb3N0ZmllbGRzX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19wb3N0ZmllbGRzKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Bvc3RmaWVsZHMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0hUVFBQT1NUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfaHR0cHBvc3QpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfaHR0cG9zdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX01JTUVQT1NUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19wdHIoKHZhbHVlKSwgY3VybF9taW1lKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfbWltZXBvc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZihfY3VybF9pc19zbGlzdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfc2xpc3QpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfc2xpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NIQVJFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmKCFfY3VybF9pc19wdHIoKHZhbHVlKSwgQ1VSTFNIKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0NVUkxTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIF9jdXJsX29wdCwgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCisjZGVmaW5lIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBvcHRpb24sIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfX3R5cGVvZl9fKG9wdGlvbikgX2N1cmxfb3B0ID0gb3B0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZihfX2J1aWx0aW5fY29uc3RhbnRfcChfY3VybF9vcHQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19sb25nX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19sb25nKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfbG9uZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19vZmZfdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19vZmZfdCh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9vZmZfdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19zdHJpbmdfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19zdHJpbmcodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfc3RyaW5nKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja193cml0ZV9jYl9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja193cml0ZV9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfd3JpdGVfY2FsbGJhY2soKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfUkVTT0xWRVJfU1RBUlRfRlVOQ1RJT04pICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19yZXNvbHZlcl9zdGFydF9jYWxsYmFjayh2YWx1ZSkpICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2soKTsgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfUkVBREZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19yZWFkX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfcmVhZF9jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfSU9DVExGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19pb2N0bF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfaW9jdGxfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU09DS09QVEZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19zb2Nrb3B0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfc29ja29wdF9jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19vcGVuc29ja2V0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfb3BlbnNvY2tldF9jYigpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19wcm9ncmVzc19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfcHJvZ3Jlc3NfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfREVCVUdGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19kZWJ1Z19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfZGVidWdfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19zc2xfY3R4X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfc3NsX2N0eF9jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19jb252X2NiX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19jb252X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY29udl9jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU0VFS0ZVTkNUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19zZWVrX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfc2Vla19jYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19jYl9kYXRhX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19jYl9kYXRhKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY2JfZGF0YSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfRVJST1JCVUZGRVIpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19lcnJvcl9idWZmZXIodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfZXJyb3JfYnVmZmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU1RERVJSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19GSUxFKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfRklMRSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19wb3N0ZmllbGRzX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19wb3N0ZmllbGRzKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfcG9zdGZpZWxkcygpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfSFRUUFBPU1QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfaHR0cHBvc3QpKSAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9odHRwb3N0KCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfTUlNRVBPU1QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19wdHIoKHZhbHVlKSwgY3VybF9taW1lKSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9taW1lcG9zdCgpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKGN1cmxjaGVja19zbGlzdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfc2xpc3QpKSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9zbGlzdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKChfY3VybF9vcHQpID09IENVUkxPUFRfU0hBUkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaWYoIWN1cmxjaGVja19wdHIoKHZhbHVlKSwgQ1VSTFNIKSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfY3VybF9lYXN5X3NldG9wdF9lcnJfQ1VSTFNIKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgX2N1cmxfb3B0LCB2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKIAogLyogd3JhcHMgY3VybF9lYXN5X2dldGluZm8oKSB3aXRoIHR5cGVjaGVja2luZyAqLwotI2RlZmluZSBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIGluZm8sIGFyZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX3R5cGVvZl9fKGluZm8pIF9jdXJsX2luZm8gPSBpbmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZihfX2J1aWx0aW5fY29uc3RhbnRfcChfY3VybF9pbmZvKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX3N0cmluZ19pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgY2hhciAqKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX3N0cmluZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX2xvbmdfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgbG9uZykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2xvbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX2RvdWJsZV9pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgZG91YmxlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2RvdWJsZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX3NsaXN0X2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgc3RydWN0IGN1cmxfc2xpc3QgKikpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc2xpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX3Rsc3Nlc3Npb25pbmZvX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgc3RydWN0IGN1cmxfdGxzc2Vzc2lvbmluZm8gKikpICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfdGxzc2Vzc3Npb25pbmZvKCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX2NlcnRpbmZvX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgc3RydWN0IGN1cmxfY2VydGluZm8gKikpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfY2VydGluZm8oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX3NvY2tldF9pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgY3VybF9zb2NrZXRfdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc29ja2V0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmKF9jdXJsX2lzX29mZl90X2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgY3VybF9vZmZfdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfb2ZmX3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIF9jdXJsX2luZm8sIGFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSkKKyNkZWZpbmUgY3VybF9lYXN5X2dldGluZm8oaGFuZGxlLCBpbmZvLCBhcmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX190eXBlb2ZfXyhpbmZvKSBfY3VybF9pbmZvID0gaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYoX19idWlsdGluX2NvbnN0YW50X3AoX2N1cmxfaW5mbykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfc3RyaW5nX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBjaGFyICopKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9zdHJpbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfbG9uZ19pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBsb25nKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9sb25nKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfZG91YmxlX2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBkb3VibGUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9kb3VibGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfc2xpc3RfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBzdHJ1Y3QgY3VybF9zbGlzdCAqKSkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3NsaXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfdGxzc2Vzc2lvbmluZm9faW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBzdHJ1Y3QgY3VybF90bHNzZXNzaW9uaW5mbyAqKSkgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3Rsc3Nlc3NzaW9uaW5mbygpOyAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfY2VydGluZm9faW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBzdHJ1Y3QgY3VybF9jZXJ0aW5mbyAqKSkgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX2NlcnRpbmZvKCk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfc29ja2V0X2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBjdXJsX3NvY2tldF90KSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX3NvY2tldCgpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihjdXJsY2hlY2tfb2ZmX3RfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGlmKCFjdXJsY2hlY2tfYXJyKChhcmcpLCBjdXJsX29mZl90KSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX29mZl90KCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgY3VybF9lYXN5X2dldGluZm8oaGFuZGxlLCBfY3VybF9pbmZvLCBhcmcpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0pCiAKIC8qCiAgKiBGb3Igbm93LCBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50cwpAQCAtMTU2LDgzICsxNTYsODMgQEAKICAqIGZ1bmN0aW9ucyAqLwogCiAvKiBUbyBkZWZpbmUgYSBuZXcgd2FybmluZywgdXNlIF9DVVJMX1dBUk5JTkcoaWRlbnRpZmllciwgIm1lc3NhZ2UiKSAqLwotI2RlZmluZSBfQ1VSTF9XQVJOSU5HKGlkLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3dhcm5pbmdfXyhtZXNzYWdlKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBDVVJMV0FSTklORyhpZCwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3dhcm5pbmdfXyhtZXNzYWdlKSkpICAgICAgICAgICAgICAgICAgICAgXAorICBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgICAgICAgICAgICAgXAogICBpZCh2b2lkKSB7IF9fYXNtX18oIiIpOyB9CiAKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2xvbmcsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfbG9uZywKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGxvbmcgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfb2ZmX3QsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9vZmZfdCwKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfb2ZmX3QgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3N0cmluZywKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zdHJpbmcsCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAiCiAgICAgICAgICAgICAgICJzdHJpbmcgKCdjaGFyIConIG9yIGNoYXJbXSkgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIgogICApCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl93cml0ZV9jYWxsYmFjaywKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl93cml0ZV9jYWxsYmFjaywKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfd3JpdGVfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Jlc29sdmVyX3N0YXJ0X2NhbGxiYWNrLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Jlc29sdmVyX3N0YXJ0X2NhbGxiYWNrLAogICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgIgogICAgICAgICAgICAgICAiY3VybF9yZXNvbHZlcl9zdGFydF9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iCiAgICkKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3JlYWRfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfcmVhZF9jYiwKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfcmVhZF9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfaW9jdGxfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfaW9jdGxfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX2lvY3RsX2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zb2Nrb3B0X2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NvY2tvcHRfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX3NvY2tvcHRfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX29wZW5zb2NrZXRfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfb3BlbnNvY2tldF9jYiwKICAgICAgICAgICAgICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICIKICAgICAgICAgICAgICAgImN1cmxfb3BlbnNvY2tldF9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iCiAgICkKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Byb2dyZXNzX2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Byb2dyZXNzX2NiLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9wcm9ncmVzc19jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfZGVidWdfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfZGVidWdfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX2RlYnVnX2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zc2xfY3R4X2NiLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NzbF9jdHhfY2IsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX3NzbF9jdHhfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NvbnZfY2IsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY29udl9jYiwKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfY29udl9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfc2Vla19jYiwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zZWVrX2NiLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9zZWVrX2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jYl9kYXRhLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NiX2RhdGEsCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAiCiAgICAgICAgICAgICAgICJwcml2YXRlIGRhdGEgcG9pbnRlciBhcyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfZXJyb3JfYnVmZmVyLAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2Vycm9yX2J1ZmZlciwKICAgICAgICAgICAgICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICIKICAgICAgICAgICAgICAgImNoYXIgYnVmZmVyIG9mIENVUkxfRVJST1JfU0laRSBhcyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfRklMRSwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9GSUxFLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgJ0ZJTEUgKicgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Bvc3RmaWVsZHMsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfcG9zdGZpZWxkcywKICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICd2b2lkIConIG9yICdjaGFyIConIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX2h0dHBvc3QsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9odHRwb3N0LAogICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgJ3N0cnVjdCBjdXJsX2h0dHBwb3N0IConICIKICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX21pbWVwb3N0LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfbWltZXBvc3QsCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAnY3VybF9taW1lIConICIKICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX3NsaXN0LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfc2xpc3QsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAnc3RydWN0IGN1cmxfc2xpc3QgKicgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0NVUkxTSCwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9DVVJMU0gsCiAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBDVVJMU0gqIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCiAKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9zdHJpbmcsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX3N0cmluZywKICAgImN1cmxfZWFzeV9nZXRpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvICdjaGFyIConIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2xvbmcsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2xvbmcsCiAgICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBsb25nIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2RvdWJsZSwKK0NVUkxXQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfZG91YmxlLAogICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gZG91YmxlIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc2xpc3QsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc2xpc3QsCiAgICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byAnc3RydWN0IGN1cmxfc2xpc3QgKicgZm9yIHRoaXMgaW5mbyIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF90bHNzZXNzc2lvbmluZm8sCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfdGxzc2Vzc3Npb25pbmZvLAogICAgICAgICAgICAgICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gIgogICAgICAgICAgICAgICAiJ3N0cnVjdCBjdXJsX3Rsc3Nlc3Npb25pbmZvIConIGZvciB0aGlzIGluZm8iKQotX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfY2VydGluZm8sCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfY2VydGluZm8sCiAgICAgICAgICAgICAgICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byAiCiAgICAgICAgICAgICAgICInc3RydWN0IGN1cmxfY2VydGluZm8gKicgZm9yIHRoaXMgaW5mbyIpCi1fQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfY3VybF9zb2NrZXQsCitDVVJMV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc29ja2V0LAogICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gY3VybF9zb2NrZXRfdCBmb3IgdGhpcyBpbmZvIikKLV9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX29mZl90LAorQ1VSTFdBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9jdXJsX29mZl90LAogICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gY3VybF9vZmZfdCBmb3IgdGhpcyBpbmZvIikKIAogLyogZ3JvdXBzIG9mIGN1cmxfZWFzeV9zZXRvcHMgb3B0aW9ucyB0aGF0IHRha2UgdGhlIHNhbWUgdHlwZSBvZiBhcmd1bWVudCAqLwpAQCAtMjQ0LDE0ICsyNDQsMTQgQEAKICAqLwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBsb25nIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX2xvbmdfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19sb25nX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgIFwKICAgKDAgPCAob3B0aW9uKSAmJiAob3B0aW9uKSA8IENVUkxPUFRUWVBFX09CSkVDVFBPSU5UKQogCi0jZGVmaW5lIF9jdXJsX2lzX29mZl90X29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgob3B0aW9uKSA+IENVUkxPUFRUWVBFX09GRl9UKQorI2RlZmluZSBjdXJsY2hlY2tfb2ZmX3Rfb3B0aW9uKG9wdGlvbikgICAgICAgICAgXAorICAoKChvcHRpb24pID4gQ1VSTE9QVFRZUEVfT0ZGX1QpICYmICgob3B0aW9uKSA8IENVUkxPUFRUWVBFX0JMT0IpKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBjaGFyKiBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19zdHJpbmdfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfc3RyaW5nX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKG9wdGlvbikgPT0gQ1VSTE9QVF9BQlNUUkFDVF9VTklYX1NPQ0tFVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9BQ0NFUFRfRU5DT0RJTkcgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9BTFRTVkMgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzAwLDE1ICszMDAsMTggQEAKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfU1NMS0VZIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfU1NMS0VZVFlQRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfU1NMX0NJUEhFUl9MSVNUIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTMTNfQ0lQSEVSUyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTQVVUSF9QQVNTV09SRCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUkFORE9NX0ZJTEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUkFOR0UgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUkVGRVJFUiB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfUkVRVUVTVF9UQVJHRVQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUlRTUF9TRVNTSU9OX0lEIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUlRTUF9UUkFOU1BPUlQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfU0FTTF9BVVRIWklEIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfU0VSVklDRV9OQU1FIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfU09DS1M1X0dTU0FQSV9TRVJWSUNFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTMyMSw2ICszMjQsNyBAQAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9TU0xLRVkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9TU0xLRVlUWVBFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9UTFMxM19DSVBIRVJTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JEIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9UTFNBVVRIX1RZUEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9UTFNBVVRIX1VTRVJOQU1FIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzMzLDE4ICszMzcsMTggQEAKICAgIDApCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIG9wdGlvbiB0YWtlcyBhIGN1cmxfd3JpdGVfY2FsbGJhY2sgYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfd3JpdGVfY2Jfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKChvcHRpb24pID09IENVUkxPUFRfSEVBREVSRlVOQ1RJT04gfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX3dyaXRlX2NiX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChvcHRpb24pID09IENVUkxPUFRfSEVBREVSRlVOQ1RJT04gfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfV1JJVEVGVU5DVElPTikKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgb3B0aW9uIHRha2VzIGEgY3VybF9jb252X2NhbGxiYWNrIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX2NvbnZfY2Jfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfVE9fTkVUV09SS19GVU5DVElPTiB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19jb252X2NiX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfVE9fTkVUV09SS19GVU5DVElPTiB8fCAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OIHx8ICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPTlZfRlJPTV9VVEY4X0ZVTkNUSU9OKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBkYXRhIGFyZ3VtZW50IHRvIHBhc3MgdG8gYSBjYWxsYmFjayAqLwotI2RlZmluZSBfY3VybF9pc19jYl9kYXRhX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfY2JfZGF0YV9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKG9wdGlvbikgPT0gQ1VSTE9QVF9DSFVOS19EQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DTE9TRVNPQ0tFVERBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9ERUJVR0RBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzYyLDE3ICszNjYsMTcgQEAKICAgIChvcHRpb24pID09IENVUkxPUFRfU1NMX0NUWF9EQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfV1JJVEVEQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChvcHRpb24pID09IENVUkxPUFRfUkVTT0xWRVJfU1RBUlRfREFUQSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIChvcHRpb24pID09IENVUkxPUFRfQ1VSTFUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfVFJBSUxFUkRBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDApCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIG9wdGlvbiB0YWtlcyBhIFBPU1QgZGF0YSBhcmd1bWVudCAodm9pZCogb3IgY2hhciopICovCi0jZGVmaW5lIF9jdXJsX2lzX3Bvc3RmaWVsZHNfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19wb3N0ZmllbGRzX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgob3B0aW9uKSA9PSBDVVJMT1BUX1BPU1RGSUVMRFMgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPUFlQT1NURklFTERTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBzdHJ1Y3QgY3VybF9zbGlzdCAqIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX3NsaXN0X29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19zbGlzdF9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgob3B0aW9uKSA9PSBDVVJMT1BUX0hUVFAyMDBBTElBU0VTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX0hUVFBIRUFERVIgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAob3B0aW9uKSA9PSBDVVJMT1BUX01BSUxfUkNQVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zODIsNDUgKzM4Niw0NyBAQAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9RVU9URSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9SRVNPTFZFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9URUxORVRPUFRJT05TIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05ORUNUX1RPIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCkKIAogLyogZ3JvdXBzIG9mIGN1cmxfZWFzeV9nZXRpbmZvIGluZm9zIHRoYXQgdGFrZSB0aGUgc2FtZSB0eXBlIG9mIGFyZ3VtZW50ICovCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gY2hhciAqIGFyZ3VtZW50ICovCi0jZGVmaW5lIF9jdXJsX2lzX3N0cmluZ19pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChDVVJMSU5GT19TVFJJTkcgPCAoaW5mbykgJiYgKGluZm8pIDwgQ1VSTElORk9fTE9ORykKKyNkZWZpbmUgY3VybGNoZWNrX3N0cmluZ19pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChDVVJMSU5GT19TVFJJTkcgPCAoaW5mbykgJiYgKGluZm8pIDwgQ1VSTElORk9fTE9ORyAmJiAgICAgICAgXAorICAgKGluZm8pICE9IENVUkxJTkZPX1BSSVZBVEUpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gbG9uZyBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19sb25nX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfbG9uZ19pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICBcCiAgIChDVVJMSU5GT19MT05HIDwgKGluZm8pICYmIChpbmZvKSA8IENVUkxJTkZPX0RPVUJMRSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgaW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBkb3VibGUgYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfZG91YmxlX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX2RvdWJsZV9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgXAogICAoQ1VSTElORk9fRE9VQkxFIDwgKGluZm8pICYmIChpbmZvKSA8IENVUkxJTkZPX1NMSVNUKQogCiAvKiB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3RydWN0IGN1cmxfc2xpc3QgKiBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19zbGlzdF9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfc2xpc3RfaW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKChpbmZvKSA9PSBDVVJMSU5GT19TU0xfRU5HSU5FUykgfHwgKChpbmZvKSA9PSBDVVJMSU5GT19DT09LSUVMSVNUKSkKIAogLyogdHJ1ZSBpZiBpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIHN0cnVjdCBjdXJsX3Rsc3Nlc3Npb25pbmZvICogYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfdGxzc2Vzc2lvbmluZm9faW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX3Rsc3Nlc3Npb25pbmZvX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgoKGluZm8pID09IENVUkxJTkZPX1RMU19TU0xfUFRSKSB8fCAoKGluZm8pID09IENVUkxJTkZPX1RMU19TRVNTSU9OKSkKIAogLyogdHJ1ZSBpZiBpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIHN0cnVjdCBjdXJsX2NlcnRpbmZvICogYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfY2VydGluZm9faW5mbyhpbmZvKSAoKGluZm8pID09IENVUkxJTkZPX0NFUlRJTkZPKQorI2RlZmluZSBjdXJsY2hlY2tfY2VydGluZm9faW5mbyhpbmZvKSAoKGluZm8pID09IENVUkxJTkZPX0NFUlRJTkZPKQogCiAvKiB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3RydWN0IGN1cmxfc29ja2V0X3QgYXJndW1lbnQgKi8KLSNkZWZpbmUgX2N1cmxfaXNfc29ja2V0X2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX3NvY2tldF9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgXAogICAoQ1VSTElORk9fU09DS0VUIDwgKGluZm8pICYmIChpbmZvKSA8IENVUkxJTkZPX09GRl9UKQogCiAvKiB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gY3VybF9vZmZfdCBhcmd1bWVudCAqLwotI2RlZmluZSBfY3VybF9pc19vZmZfdF9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfb2ZmX3RfaW5mbyhpbmZvKSAgICAgICAgICAgICAgXAogICAoQ1VSTElORk9fT0ZGX1QgPCAoaW5mbykpCiAKIAogLyogdHlwZWNoZWNrIGhlbHBlcnMgLS0gY2hlY2sgd2hldGhlciBnaXZlbiBleHByZXNzaW9uIGhhcyByZXF1ZXN0ZWQgdHlwZSovCiAKLS8qIEZvciBwb2ludGVycywgeW91IGNhbiB1c2UgdGhlIF9jdXJsX2lzX3B0ci9fY3VybF9pc19hcnIgbWFjcm9zLAorLyogRm9yIHBvaW50ZXJzLCB5b3UgY2FuIHVzZSB0aGUgY3VybGNoZWNrX3B0ci9jdXJsY2hlY2tfYXJyIG1hY3JvcywKICAqIG90aGVyd2lzZSBkZWZpbmUgYSBuZXcgbWFjcm8uIFNlYXJjaCBmb3IgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcAogICogaW4gdGhlIEdDQyBtYW51YWwuCiAgKiBOT1RFOiB0aGVzZSBtYWNyb3MgTVVTVCBOT1QgRVZBTFVBVEUgdGhlaXIgYXJndW1lbnRzISBUaGUgYXJndW1lbnQgaXMKQEAgLTQzMCwzNSArNDM2LDM1IEBACiAgKi8KIAogLyogWFhYOiBzaG91bGQgZXZhbHVhdGUgdG8gdHJ1ZSBpZiBleHByIGlzIGEgcG9pbnRlciAqLwotI2RlZmluZSBfY3VybF9pc19hbnlfcHRyKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfYW55X3B0cihleHByKSAgICAgICAgICAgICAgICAgXAogICAoc2l6ZW9mKGV4cHIpID09IHNpemVvZih2b2lkICopKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIE5VTEwgKi8KIC8qIFhYWDogbXVzdCBub3QgZXZhbHVhdGUgZXhwciwgc28gdGhpcyBjaGVjayBpcyBub3QgYWNjdXJhdGUgKi8KLSNkZWZpbmUgX2N1cmxfaXNfTlVMTChleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX05VTEwoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgX190eXBlb2ZfXyhOVUxMKSkpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgdHlwZSosIGNvbnN0IHR5cGUqIG9yIE5VTEwgKi8KLSNkZWZpbmUgX2N1cmxfaXNfcHRyKGV4cHIsIHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdHlwZSAqKSB8fCAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX3B0cihleHByLCB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdHlwZSAqKSB8fCAgICAgICAgICAgIFwKICAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY29uc3QgdHlwZSAqKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvbmUgb2YgdHlwZVtdLCB0eXBlKiwgTlVMTCBvciBjb25zdCB0eXBlKiAqLwotI2RlZmluZSBfY3VybF9pc19hcnIoZXhwciwgdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfcHRyKChleHByKSwgdHlwZSkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfYXJyKGV4cHIsIHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX3B0cigoZXhwciksIHR5cGUpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCB0eXBlIFtdKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBhIHN0cmluZyAqLwotI2RlZmluZSBfY3VybF9pc19zdHJpbmcoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfYXJyKChleHByKSwgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfaXNfYXJyKChleHByKSwgc2lnbmVkIGNoYXIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfaXNfYXJyKChleHByKSwgdW5zaWduZWQgY2hhcikpCisjZGVmaW5lIGN1cmxjaGVja19zdHJpbmcoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfYXJyKChleHByKSwgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfYXJyKChleHByKSwgc2lnbmVkIGNoYXIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfYXJyKChleHByKSwgdW5zaWduZWQgY2hhcikpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgYSBsb25nIChubyBtYXR0ZXIgdGhlIHNpZ25lZG5lc3MpCiAgKiBYWFg6IGZvciBub3csIGludCBpcyBhbHNvIGFjY2VwdGVkIChhbmQgdGhlcmVmb3JlIHNob3J0IGFuZCBjaGFyLCB3aGljaAogICogYXJlIHByb21vdGVkIHRvIGludCB3aGVuIHBhc3NlZCB0byBhIHZhcmlhZGljIGZ1bmN0aW9uKSAqLwotI2RlZmluZSBfY3VybF9pc19sb25nKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfbG9uZyhleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBsb25nKSB8fCAgICAgICAgICAgICAgICAgICAgXAogICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBzaWduZWQgbG9uZykgfHwgICAgICAgICAgICAgXAogICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCB1bnNpZ25lZCBsb25nKSB8fCAgICAgICAgICAgXApAQCAtNDczLDU5ICs0NzksNTkgQEAKICAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdW5zaWduZWQgY2hhcikpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX29mZl90ICovCi0jZGVmaW5lIF9jdXJsX2lzX29mZl90KGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19vZmZfdChleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBjdXJsX29mZl90KSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBhYnVmZmVyIHN1aXRhYmxlIGZvciBDVVJMT1BUX0VSUk9SQlVGRkVSICovCiAvKiBYWFg6IGFsc28gY2hlY2sgc2l6ZSBvZiBhbiBjaGFyW10gYXJyYXk/ICovCi0jZGVmaW5lIF9jdXJsX2lzX2Vycm9yX2J1ZmZlcihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGNoYXIgKikgfHwgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIGN1cmxjaGVja19lcnJvcl9idWZmZXIoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGNoYXIgKikgfHwgICAgICAgICAgICBcCiAgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGNoYXJbXSkpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSAoY29uc3QpIHZvaWQqIG9yIChjb25zdCkgRklMRSogKi8KICNpZiAwCi0jZGVmaW5lIF9jdXJsX2lzX2NiX2RhdGEoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19wdHIoKGV4cHIpLCB2b2lkKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9pc19wdHIoKGV4cHIpLCBGSUxFKSkKKyNkZWZpbmUgY3VybGNoZWNrX2NiX2RhdGEoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19wdHIoKGV4cHIpLCB2b2lkKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19wdHIoKGV4cHIpLCBGSUxFKSkKICNlbHNlIC8qIGJlIGxlc3Mgc3RyaWN0ICovCi0jZGVmaW5lIF9jdXJsX2lzX2NiX2RhdGEoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9jdXJsX2lzX2FueV9wdHIoZXhwcikKKyNkZWZpbmUgY3VybGNoZWNrX2NiX2RhdGEoZXhwcikgICAgICAgICAgICAgICAgIFwKKyAgY3VybGNoZWNrX2FueV9wdHIoZXhwcikKICNlbmRpZgogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgRklMRSogKi8KLSNkZWZpbmUgX2N1cmxfaXNfRklMRShleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjdXJsY2hlY2tfRklMRShleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgRklMRSAqKSkpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgY2FuIGJlIHBhc3NlZCBhcyBQT1NUIGRhdGEgKHZvaWQqIG9yIGNoYXIqKSAqLwotI2RlZmluZSBfY3VybF9pc19wb3N0ZmllbGRzKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfcHRyKChleHByKSwgdm9pZCkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfaXNfYXJyKChleHByKSwgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfaXNfYXJyKChleHByKSwgdW5zaWduZWQgY2hhcikpCisjZGVmaW5lIGN1cmxjaGVja19wb3N0ZmllbGRzKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfcHRyKChleHByKSwgdm9pZCkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfYXJyKChleHByKSwgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfYXJyKChleHByKSwgdW5zaWduZWQgY2hhcikpCiAKIC8qIGhlbHBlcjogX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gZnVuY3Rpb25zIGFuZAogICogZnVuY3Rpb24gcG9pbnRlcnMsIGhpZGUgaXQgKi8KLSNkZWZpbmUgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZShmdW5jLCB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhmdW5jKSwgdHlwZSkgfHwgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoZnVuYywgdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhmdW5jKSwgdHlwZSkgfHwgICAgICAgICAgICAgIFwKICAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhmdW5jKSAqLCB0eXBlKSkKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2sgKi8KLSNkZWZpbmUgX2N1cmxfaXNfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2soZXhwcikgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9yZXNvbHZlcl9zdGFydF9jYWxsYmFjaykpCisjZGVmaW5lIGN1cmxjaGVja19yZXNvbHZlcl9zdGFydF9jYWxsYmFjayhleHByKSAgICAgICBcCisgIChjdXJsY2hlY2tfTlVMTChleHByKSB8fCBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfcmVzb2x2ZXJfc3RhcnRfY2FsbGJhY2spKQogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9yZWFkX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwotI2RlZmluZSBfY3VybF9pc19yZWFkX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9fdHlwZW9mX18oZnJlYWQpICopIHx8ICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfcmVhZF9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3JlYWRfY2FsbGJhY2s2KSkKKyNkZWZpbmUgY3VybGNoZWNrX3JlYWRfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX190eXBlb2ZfXyhmcmVhZCkgKikgfHwgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9yZWFkX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazQpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazUpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazYpKQogdHlwZWRlZiBzaXplX3QgKCpfY3VybF9yZWFkX2NhbGxiYWNrMSkoY2hhciAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKIHR5cGVkZWYgc2l6ZV90ICgqX2N1cmxfcmVhZF9jYWxsYmFjazIpKGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQgKik7CiB0eXBlZGVmIHNpemVfdCAoKl9jdXJsX3JlYWRfY2FsbGJhY2szKShjaGFyICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOwpAQCAtNTM0LDE2ICs1NDAsMTYgQEAKIHR5cGVkZWYgc2l6ZV90ICgqX2N1cmxfcmVhZF9jYWxsYmFjazYpKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX3dyaXRlX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwotI2RlZmluZSBfY3VybF9pc193cml0ZV9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfcmVhZF9jYihleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9fdHlwZW9mX18oZndyaXRlKSAqKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfd3JpdGVfY2FsbGJhY2spIHx8ICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMikgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMykgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNCkgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNSkgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNikpCisjZGVmaW5lIGN1cmxjaGVja193cml0ZV9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfcmVhZF9jYihleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9fdHlwZW9mX18oZndyaXRlKSAqKSB8fCAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfd3JpdGVfY2FsbGJhY2spIHx8ICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMSkgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMikgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrMykgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNCkgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNSkgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3dyaXRlX2NhbGxiYWNrNikpCiB0eXBlZGVmIHNpemVfdCAoKl9jdXJsX3dyaXRlX2NhbGxiYWNrMSkoY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKIHR5cGVkZWYgc2l6ZV90ICgqX2N1cmxfd3JpdGVfY2FsbGJhY2syKShjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqKTsKQEAgLTU1NCwzNyArNTYwLDM3IEBACiB0eXBlZGVmIHNpemVfdCAoKl9jdXJsX3dyaXRlX2NhbGxiYWNrNikoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfaW9jdGxfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX2lvY3RsX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9pb2N0bF9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2s0KSkKKyNkZWZpbmUgY3VybGNoZWNrX2lvY3RsX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9pb2N0bF9jYWxsYmFjaykgfHwgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2syKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2szKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfaW9jdGxfY2FsbGJhY2s0KSkKIHR5cGVkZWYgY3VybGlvZXJyICgqX2N1cmxfaW9jdGxfY2FsbGJhY2sxKShDVVJMICosIGludCwgdm9pZCAqKTsKIHR5cGVkZWYgY3VybGlvZXJyICgqX2N1cmxfaW9jdGxfY2FsbGJhY2syKShDVVJMICosIGludCwgY29uc3Qgdm9pZCAqKTsKIHR5cGVkZWYgY3VybGlvZXJyICgqX2N1cmxfaW9jdGxfY2FsbGJhY2szKShDVVJMICosIGN1cmxpb2NtZCwgdm9pZCAqKTsKIHR5cGVkZWYgY3VybGlvZXJyICgqX2N1cmxfaW9jdGxfY2FsbGJhY2s0KShDVVJMICosIGN1cmxpb2NtZCwgY29uc3Qgdm9pZCAqKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfc29ja29wdF9jYWxsYmFjayBvciAic2ltaWxhciIgKi8KLSNkZWZpbmUgX2N1cmxfaXNfc29ja29wdF9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX3NvY2tvcHRfY2FsbGJhY2spIHx8ICAgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zb2Nrb3B0X2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgIFwKLSAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zb2Nrb3B0X2NhbGxiYWNrMikpCisjZGVmaW5lIGN1cmxjaGVja19zb2Nrb3B0X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChjdXJsY2hlY2tfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfc29ja29wdF9jYWxsYmFjaykgfHwgICAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NvY2tvcHRfY2FsbGJhY2sxKSB8fCAgICAgICAgICBcCisgICBjdXJsY2hlY2tfY2JfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NvY2tvcHRfY2FsbGJhY2syKSkKIHR5cGVkZWYgaW50ICgqX2N1cmxfc29ja29wdF9jYWxsYmFjazEpKHZvaWQgKiwgY3VybF9zb2NrZXRfdCwgY3VybHNvY2t0eXBlKTsKIHR5cGVkZWYgaW50ICgqX2N1cmxfc29ja29wdF9jYWxsYmFjazIpKGNvbnN0IHZvaWQgKiwgY3VybF9zb2NrZXRfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHNvY2t0eXBlKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfb3BlbnNvY2tldF9jYWxsYmFjayBvcgogICAgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX29wZW5zb2NrZXRfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrKSB8fCAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazEpIHx8ICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazIpIHx8ICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazMpIHx8ICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazQpKQorI2RlZmluZSBjdXJsY2hlY2tfb3BlbnNvY2tldF9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoY3VybGNoZWNrX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2spIHx8ICAgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMSkgfHwgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMikgfHwgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMykgfHwgICAgICAgXAorICAgY3VybGNoZWNrX2NiX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrNCkpCiB0eXBlZGVmIGN1cmxfc29ja2V0X3QgKCpfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMSkKICAgKHZvaWQgKiwgY3VybHNvY2t0eXBlLCBzdHJ1Y3QgY3VybF9zb2NrYWRkciAqKTsKIHR5cGVkZWYgY3VybF9zb2NrZXRfdCAoKl9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2syKQpAQCAtNTk1LDI4ICs2MDEsMjggQEAKICAgKGNvbnN0IHZvaWQgKiwgY3VybHNvY2t0eXBlLCBjb25zdCBzdHJ1Y3QgY3VybF9zb2NrYWRkciAqKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX3Byb2dyZXNzX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9wcm9ncmVzc19jYWxsYmFjaykgfHwgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2syKSkKKyNkZWZpbmUgY3VybGNoZWNrX3Byb2dyZXNzX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9wcm9ncmVzc19jYWxsYmFjaykgfHwgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sxKSB8fCAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2syKSkKIHR5cGVkZWYgaW50ICgqX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sxKSh2b2lkICosCiAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKIHR5cGVkZWYgaW50ICgqX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2syKShjb25zdCB2b2lkICosCiAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKIAogLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfZGVidWdfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCi0jZGVmaW5lIF9jdXJsX2lzX2RlYnVnX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgY3VybF9kZWJ1Z19jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s2KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s3KSB8fCAgICAgICAgICAgICAgICBcCi0gICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s4KSkKKyNkZWZpbmUgY3VybGNoZWNrX2RlYnVnX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9kZWJ1Z19jYWxsYmFjaykgfHwgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2syKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2szKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s2KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s3KSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfZGVidWdfY2FsbGJhY2s4KSkKIHR5cGVkZWYgaW50ICgqX2N1cmxfZGVidWdfY2FsbGJhY2sxKSAoQ1VSTCAqLAogICAgIGN1cmxfaW5mb3R5cGUsIGNoYXIgKiwgc2l6ZV90LCB2b2lkICopOwogdHlwZWRlZiBpbnQgKCpfY3VybF9kZWJ1Z19jYWxsYmFjazIpIChDVVJMICosCkBAIC02MzYsMTcgKzY0MiwxNyBAQAogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9zc2xfY3R4X2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwogLyogdGhpcyBpcyBnZXR0aW5nIGV2ZW4gbWVzc2llci4uLiAqLwotI2RlZmluZSBfY3VybF9pc19zc2xfY3R4X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfc3NsX2N0eF9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s0KSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s1KSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s2KSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s3KSB8fCAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s4KSkKKyNkZWZpbmUgY3VybGNoZWNrX3NzbF9jdHhfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9zc2xfY3R4X2NhbGxiYWNrKSB8fCAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazEpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazIpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazMpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazQpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazUpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazYpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazcpIHx8ICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazgpKQogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX3NzbF9jdHhfY2FsbGJhY2sxKShDVVJMICosIHZvaWQgKiwgdm9pZCAqKTsKIHR5cGVkZWYgQ1VSTGNvZGUgKCpfY3VybF9zc2xfY3R4X2NhbGxiYWNrMikoQ1VSTCAqLCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfc3NsX2N0eF9jYWxsYmFjazMpKENVUkwgKiwgY29uc3Qgdm9pZCAqLCB2b2lkICopOwpAQCAtNjY5LDI2ICs2NzUsMjYgQEAKICNlbmRpZgogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9jb252X2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwotI2RlZmluZSBfY3VybF9pc19jb252X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfY29udl9jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2s0KSkKKyNkZWZpbmUgY3VybGNoZWNrX2NvbnZfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9jb252X2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfY29udl9jYWxsYmFjazQpKQogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX2NvbnZfY2FsbGJhY2sxKShjaGFyICosIHNpemVfdCBsZW5ndGgpOwogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX2NvbnZfY2FsbGJhY2syKShjb25zdCBjaGFyICosIHNpemVfdCBsZW5ndGgpOwogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX2NvbnZfY2FsbGJhY2szKSh2b2lkICosIHNpemVfdCBsZW5ndGgpOwogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX2NvbnZfY2FsbGJhY2s0KShjb25zdCB2b2lkICosIHNpemVfdCBsZW5ndGgpOwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9zZWVrX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwotI2RlZmluZSBfY3VybF9pc19zZWVrX2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIGN1cmxfc2Vla19jYWxsYmFjaykgfHwgICAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NlZWtfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICAgXAotICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NlZWtfY2FsbGJhY2syKSkKKyNkZWZpbmUgY3VybGNoZWNrX3NlZWtfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGN1cmxjaGVja19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgY3VybF9zZWVrX2NhbGxiYWNrKSB8fCAgICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc2Vla19jYWxsYmFjazEpIHx8ICAgICAgICAgICAgIFwKKyAgIGN1cmxjaGVja19jYl9jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc2Vla19jYWxsYmFjazIpKQogdHlwZWRlZiBDVVJMY29kZSAoKl9jdXJsX3NlZWtfY2FsbGJhY2sxKSh2b2lkICosIGN1cmxfb2ZmX3QsIGludCk7CiB0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfc2Vla19jYWxsYmFjazIpKGNvbnN0IHZvaWQgKiwgY3VybF9vZmZfdCwgaW50KTsKIAogCi0jZW5kaWYgLyogX19DVVJMX1RZUEVDSEVDS19HQ0NfSCAqLworI2VuZGlmIC8qIENVUkxJTkNfVFlQRUNIRUNLX0dDQ19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2luY2x1ZGUvY3VybC91cmxhcGkuaCBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3VybGFwaS5oCmluZGV4IDU4ZTg5ZDguLmYyZDA2NzcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3VybGFwaS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvaW5jbHVkZS9jdXJsL3VybGFwaS5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfX0NVUkxfVVJMQVBJX0gKLSNkZWZpbmUgX19DVVJMX1VSTEFQSV9ICisjaWZuZGVmIENVUkxJTkNfVVJMQVBJX0gKKyNkZWZpbmUgQ1VSTElOQ19VUkxBUElfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTc3LDYgKzc3LDggQEAKICNkZWZpbmUgQ1VSTFVfVVJMRU5DT0RFICgxPDw3KSAgICAgICAgICAvKiBVUkwgZW5jb2RlIG9uIHNldCAqLwogI2RlZmluZSBDVVJMVV9BUFBFTkRRVUVSWSAoMTw8OCkgICAgICAgIC8qIGFwcGVuZCBhIGZvcm0gc3R5bGUgcGFydCAqLwogI2RlZmluZSBDVVJMVV9HVUVTU19TQ0hFTUUgKDE8PDkpICAgICAgIC8qIGxlZ2FjeSBjdXJsLXN0eWxlIGd1ZXNzaW5nICovCisjZGVmaW5lIENVUkxVX05PX0FVVEhPUklUWSAoMTw8MTApICAgICAgLyogQWxsb3cgZW1wdHkgYXV0aG9yaXR5IHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lIGlzIHVua25vd24uICovCiAKIHR5cGVkZWYgc3RydWN0IEN1cmxfVVJMIENVUkxVOwogCkBAIC0xMjAsNCArMTIyLDQgQEAKIH0gLyogZW5kIG9mIGV4dGVybiAiQyIgKi8KICNlbmRpZgogCi0jZW5kaWYKKyNlbmRpZiAvKiBDVVJMSU5DX1VSTEFQSV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL0NNYWtlTGlzdHMudHh0CmluZGV4IDJhNjI3OWMuLjMyYmVhNjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL0NNYWtlTGlzdHMudHh0CkBAIC0xLDMgKzEsMjQgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIHNldChMSUJfTkFNRSBjbWN1cmwpCiAKIGlmKEJVSUxEX1NIQVJFRF9MSUJTKQpAQCAtMjAsNyArNDEsNiBAQAogCiBpZihNU1ZDIEFORCBOT1QgQ1VSTF9TVEFUSUNMSUIpCiAgIGxpc3QoQVBQRU5EIENTT1VSQ0VTIGxpYmN1cmwucmMpCi0gIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC93ZDQxMjciKQogZW5kaWYoKQogCiAjIFNFVChDU09VUkNFUwpAQCAtOTcsMTEgKzExNywxNiBAQAogICAke0NNQUtFX0NVUkxfU1NMX0RMTFN9CiAgICkKIAorYWRkX2xpYnJhcnkoCisgICR7UFJPSkVDVF9OQU1FfTo6JHtMSUJfTkFNRX0KKyAgQUxJQVMgJHtMSUJfTkFNRX0KKyAgKQorCiBpZihOT1QgQlVJTERfU0hBUkVEX0xJQlMpCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMgQ1VSTF9TVEFUSUNMSUIpCiBlbmRpZigpCiAKLXRhcmdldF9saW5rX2xpYnJhcmllcygke0xJQl9OQU1FfSAke0NVUkxfTElCU30pCit0YXJnZXRfbGlua19saWJyYXJpZXMoJHtMSUJfTkFNRX0gUFJJVkFURSAke0NVUkxfTElCU30pCiAKIGlmKDApICMgVGhpcyBjb2RlIG5vdCBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGhpbiBDTWFrZS4KIGlmKFdJTjMyKQpAQCAtMTIxLDYgKzE0NiwxMiBAQAogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgUFJFRklYICIiKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgSU1QT1JUX1BSRUZJWCAiIikKIAoraWYoQ1VSTF9IQVNfTFRPKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtMSUJfTkFNRX0gUFJPUEVSVElFUworICAgIElOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT05fUkVMRUFTRSBUUlVFCisgICAgSU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTl9SRUxXSVRIREVCSU5GTyBUUlVFKQorZW5kaWYoKQorCiBpZihXSU4zMikKICAgaWYoQlVJTERfU0hBUkVEX0xJQlMpCiAgICAgIyBBZGQgIl9pbXAiIGFzIGEgc3VmZml4IGJlZm9yZSB0aGUgZXh0ZW5zaW9uIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggdGhlIHN0YXRpY2FsbHkgbGlua2VkICJsaWJjdXJsLmxpYiIKQEAgLTE0MSw3ICsxNzIsNyBAQAogCiBleHBvcnQoVEFSR0VUUyAke0xJQl9OQU1FfQogICAgICAgIEFQUEVORCBGSUxFICR7UFJPSkVDVF9CSU5BUllfRElSfS9saWJjdXJsLXRhcmdldC5jbWFrZQotICAgICAgIE5BTUVTUEFDRSBDVVJMOjoKKyAgICAgICBOQU1FU1BBQ0UgJHtQUk9KRUNUX05BTUV9OjoKICkKIAogZW5kaWYoKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvTWFrZWZpbGUuaW5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvTWFrZWZpbGUuaW5jCmluZGV4IDIzNWI4MmIuLjcyM2I4MjYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL01ha2VmaWxlLmluYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9NYWtlZmlsZS5pbmMKQEAgLTUsNyArNSw3IEBACiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogIwotIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogIwogIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMCw2NSArMjAsNzAgQEAKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1MSUJfVkFVVEhfQ0ZJTEVTID0gdmF1dGgvdmF1dGguYyB2YXV0aC9jbGVhcnRleHQuYyB2YXV0aC9jcmFtLmMgICAgICAgICBcCi0gIHZhdXRoL2RpZ2VzdC5jIHZhdXRoL2RpZ2VzdF9zc3BpLmMgdmF1dGgva3JiNV9nc3NhcGkuYyAgICAgICAgICAgICAgICBcCi0gIHZhdXRoL2tyYjVfc3NwaS5jIHZhdXRoL250bG0uYyB2YXV0aC9udGxtX3NzcGkuYyB2YXV0aC9vYXV0aDIuYyAgICAgICBcCi0gIHZhdXRoL3NwbmVnb19nc3NhcGkuYyB2YXV0aC9zcG5lZ29fc3NwaS5jCitMSUJfVkFVVEhfQ0ZJTEVTID0gdmF1dGgvY2xlYXJ0ZXh0LmMgdmF1dGgvY3JhbS5jIHZhdXRoL2RpZ2VzdC5jICAgICAgICAgICAgIFwKKyAgdmF1dGgvZGlnZXN0X3NzcGkuYyB2YXV0aC9rcmI1X2dzc2FwaS5jIHZhdXRoL2tyYjVfc3NwaS5jIHZhdXRoL250bG0uYyAgICAgXAorICB2YXV0aC9udGxtX3NzcGkuYyB2YXV0aC9vYXV0aDIuYyB2YXV0aC9zcG5lZ29fZ3NzYXBpLmMgdmF1dGgvc3BuZWdvX3NzcGkuYyBcCisgIHZhdXRoL3ZhdXRoLmMKIAotTElCX1ZBVVRIX0hGSUxFUyA9IHZhdXRoL3ZhdXRoLmggdmF1dGgvZGlnZXN0LmggdmF1dGgvbnRsbS5oCitMSUJfVkFVVEhfSEZJTEVTID0gdmF1dGgvZGlnZXN0LmggdmF1dGgvbnRsbS5oIHZhdXRoL3ZhdXRoLmgKIAotTElCX1ZUTFNfQ0ZJTEVTID0gdnRscy9vcGVuc3NsLmMgdnRscy9ndGxzLmMgdnRscy92dGxzLmMgdnRscy9uc3MuYyAgICAgXAotICB2dGxzL3BvbGFyc3NsLmMgdnRscy9wb2xhcnNzbF90aHJlYWRsb2NrLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB2dGxzL2N5YXNzbC5jIHZ0bHMvc2NoYW5uZWwuYyB2dGxzL3NjaGFubmVsX3ZlcmlmeS5jICAgICAgICAgICAgICAgICAgXAotICB2dGxzL3NlY3RyYW5zcC5jIHZ0bHMvZ3NraXQuYyB2dGxzL21iZWR0bHMuYyB2dGxzL21lc2FsaW5rLmMKK0xJQl9WVExTX0NGSUxFUyA9IHZ0bHMvYmVhcnNzbC5jIHZ0bHMvZ3NraXQuYyB2dGxzL2d0bHMuYyB2dGxzL2tleWxvZy5jICBcCisgIHZ0bHMvbWJlZHRscy5jIHZ0bHMvbWJlZHRsc190aHJlYWRsb2NrLmMgdnRscy9tZXNhbGluay5jIHZ0bHMvbnNzLmMgICAgXAorICB2dGxzL29wZW5zc2wuYyB2dGxzL3NjaGFubmVsLmMgdnRscy9zY2hhbm5lbF92ZXJpZnkuYyB2dGxzL3NlY3RyYW5zcC5jIFwKKyAgdnRscy92dGxzLmMgdnRscy93b2xmc3NsLmMKIAotTElCX1ZUTFNfSEZJTEVTID0gdnRscy9vcGVuc3NsLmggdnRscy92dGxzLmggdnRscy9ndGxzLmggICAgICAgICAgICAgICAgXAotICB2dGxzL25zc2cuaCB2dGxzL3BvbGFyc3NsLmggdnRscy9wb2xhcnNzbF90aHJlYWRsb2NrLmggICAgICAgICAgICAgICAgXAotICB2dGxzL2N5YXNzbC5oIHZ0bHMvc2NoYW5uZWwuaCB2dGxzL3NlY3RyYW5zcC5oIHZ0bHMvZ3NraXQuaCAgICAgICAgICAgXAotICB2dGxzL21iZWR0bHMuaCB2dGxzL21lc2FsaW5rLmgKK0xJQl9WVExTX0hGSUxFUyA9IHZ0bHMvYmVhcnNzbC5oIHZ0bHMvZ3NraXQuaCB2dGxzL2d0bHMuaCB2dGxzL2tleWxvZy5oICAgICAgXAorICB2dGxzL21iZWR0bHMuaCB2dGxzL21iZWR0bHNfdGhyZWFkbG9jay5oIHZ0bHMvbWVzYWxpbmsuaCB2dGxzL25zc2cuaCAgICAgICBcCisgIHZ0bHMvb3BlbnNzbC5oIHZ0bHMvc2NoYW5uZWwuaCB2dGxzL3NlY3RyYW5zcC5oIHZ0bHMvdnRscy5oIHZ0bHMvd29sZnNzbC5oCiAKLUxJQl9DRklMRVMgPSBmaWxlLmMgdGltZXZhbC5jIGJhc2U2NC5jIGhvc3RpcC5jIHByb2dyZXNzLmMgZm9ybWRhdGEuYyAgIFwKLSAgY29va2llLmMgaHR0cC5jIHNlbmRmLmMgZnRwLmMgdXJsLmMgZGljdC5jIGlmMmlwLmMgc3BlZWRjaGVjay5jICAgICAgIFwKLSAgbGRhcC5jIHZlcnNpb24uYyBnZXRlbnYuYyBlc2NhcGUuYyBtcHJpbnRmLmMgdGVsbmV0LmMgbmV0cmMuYyAgICAgICAgIFwKLSAgZ2V0aW5mby5jIHRyYW5zZmVyLmMgc3RyY2FzZS5jIGVhc3kuYyBzZWN1cml0eS5jIGN1cmxfZm5tYXRjaC5jICAgICAgIFwKLSAgZmlsZWluZm8uYyBmdHBsaXN0cGFyc2VyLmMgd2lsZGNhcmQuYyBrcmI1LmMgbWVtZGVidWcuYyBodHRwX2NodW5rcy5jIFwKLSAgc3RydG9rLmMgY29ubmVjdC5jIGxsaXN0LmMgaGFzaC5jIG11bHRpLmMgY29udGVudF9lbmNvZGluZy5jIHNoYXJlLmMgIFwKLSAgaHR0cF9kaWdlc3QuYyBtZDQuYyBtZDUuYyBodHRwX25lZ290aWF0ZS5jIGluZXRfcHRvbi5jIHN0cnRvb2ZmdC5jICAgIFwKLSAgc3RyZXJyb3IuYyBhbWlnYW9zLmMgaG9zdGFzeW4uYyBob3N0aXA0LmMgaG9zdGlwNi5jIGhvc3RzeW4uYyAgICAgICAgIFwKLSAgaW5ldF9udG9wLmMgcGFyc2VkYXRlLmMgc2VsZWN0LmMgdGZ0cC5jIHNwbGF5LmMgc3RyZHVwLmMgc29ja3MuYyAgICAgIFwKLSAgc3NoLmMgc3NoLWxpYnNzaC5jIGN1cmxfYWRkcmluZm8uYyBzb2Nrc19nc3NhcGkuYyBzb2Nrc19zc3BpLmMgICAgICAgIFwKLSAgY3VybF9zc3BpLmMgc2xpc3QuYyBub25ibG9jay5jIGN1cmxfbWVtcmNoci5jIGltYXAuYyBwb3AzLmMgc210cC5jICAgIFwKLSAgcGluZ3BvbmcuYyBydHNwLmMgY3VybF90aHJlYWRzLmMgd2Fybmxlc3MuYyBobWFjLmMgY3VybF9ydG1wLmMgICAgICAgIFwKLSAgb3BlbmxkYXAuYyBjdXJsX2dldGhvc3RuYW1lLmMgZ29waGVyLmMgaWRuX3dpbjMyLmMgICAgICAgICAgICAgICAgICAgIFwKLSAgaHR0cF9wcm94eS5jIG5vbi1hc2NpaS5jIGFzeW4tYXJlcy5jIGFzeW4tdGhyZWFkLmMgY3VybF9nc3NhcGkuYyAgICAgIFwKLSAgaHR0cF9udGxtLmMgY3VybF9udGxtX3diLmMgY3VybF9udGxtX2NvcmUuYyBjdXJsX3Nhc2wuYyByYW5kLmMgICAgICAgIFwKLSAgY3VybF9tdWx0aWJ5dGUuYyBob3N0Y2hlY2suYyBjb25uY2FjaGUuYyBkb3Rkb3QuYyAgICAgICAgICAgICAgICAgICAgIFwKLSAgeDUwOWFzbjEuYyBodHRwMi5jIHNtYi5jIGN1cmxfZW5kaWFuLmMgY3VybF9kZXMuYyBzeXN0ZW1fd2luMzIuYyAgICAgIFwKLSAgbWltZS5jIHNoYTI1Ni5jIHNldG9wdC5jIGN1cmxfcGF0aC5jIGN1cmxfY3R5cGUuYyBjdXJsX3JhbmdlLmMgcHNsLmMgIFwKLSAgZG9oLmMgdXJsYXBpLmMgY3VybF9nZXRfbGluZS5jIGFsdHN2Yy5jCitMSUJfVlFVSUNfQ0ZJTEVTID0gdnF1aWMvbmd0Y3AyLmMgdnF1aWMvcXVpY2hlLmMgdnF1aWMvdnF1aWMuYwogCi1MSUJfSEZJTEVTID0gYXJwYV90ZWxuZXQuaCBuZXRyYy5oIGZpbGUuaCB0aW1ldmFsLmggaG9zdGlwLmggcHJvZ3Jlc3MuaCBcCi0gIGZvcm1kYXRhLmggY29va2llLmggaHR0cC5oIHNlbmRmLmggZnRwLmggdXJsLmggZGljdC5oIGlmMmlwLmggICAgICAgICBcCi0gIHNwZWVkY2hlY2suaCB1cmxkYXRhLmggY3VybF9sZGFwLmggZXNjYXBlLmggdGVsbmV0LmggZ2V0aW5mby5oICAgICAgICBcCi0gIHN0cmNhc2UuaCBjdXJsX3NlYy5oIG1lbWRlYnVnLmggaHR0cF9jaHVua3MuaCBjdXJsX2ZubWF0Y2guaCAgICAgICAgICBcCi0gIHdpbGRjYXJkLmggZmlsZWluZm8uaCBmdHBsaXN0cGFyc2VyLmggc3RydG9rLmggY29ubmVjdC5oIGxsaXN0LmggICAgICBcCi0gIGhhc2guaCBjb250ZW50X2VuY29kaW5nLmggc2hhcmUuaCBjdXJsX21kNC5oIGN1cmxfbWQ1LmggaHR0cF9kaWdlc3QuaCBcCi0gIGh0dHBfbmVnb3RpYXRlLmggaW5ldF9wdG9uLmggYW1pZ2Fvcy5oIHN0cnRvb2ZmdC5oIHN0cmVycm9yLmggICAgICAgICBcCi0gIGluZXRfbnRvcC5oIGN1cmx4LmggY3VybF9tZW1vcnkuaCBjdXJsX3NldHVwLmggdHJhbnNmZXIuaCBzZWxlY3QuaCAgICBcCi0gIGVhc3lpZi5oIG11bHRpaWYuaCBwYXJzZWRhdGUuaCB0ZnRwLmggc29ja2FkZHIuaCBzcGxheS5oIHN0cmR1cC5oICAgICBcCi0gIHNvY2tzLmggc3NoLmggY3VybF9iYXNlNjQuaCBjdXJsX2FkZHJpbmZvLmggY3VybF9zc3BpLmggICAgICBcCi0gIHNsaXN0Lmggbm9uYmxvY2suaCBjdXJsX21lbXJjaHIuaCBpbWFwLmggcG9wMy5oIHNtdHAuaCBwaW5ncG9uZy5oICAgICBcCi0gIHJ0c3AuaCBjdXJsX3RocmVhZHMuaCB3YXJubGVzcy5oIGN1cmxfaG1hYy5oIGN1cmxfcnRtcC5oICAgICAgICAgICAgICBcCi0gIGN1cmxfZ2V0aG9zdG5hbWUuaCBnb3BoZXIuaCBodHRwX3Byb3h5Lmggbm9uLWFzY2lpLmggYXN5bi5oICAgICAgICAgICBcCi0gIGh0dHBfbnRsbS5oIGN1cmxfZ3NzYXBpLmggY3VybF9udGxtX3diLmggY3VybF9udGxtX2NvcmUuaCAgICAgICAgICAgICBcCi0gIGN1cmxfc2FzbC5oIGN1cmxfbXVsdGlieXRlLmggaG9zdGNoZWNrLmggY29ubmNhY2hlLmggICAgICAgICAgICAgICAgICBcCi0gIGN1cmxfc2V0dXBfb25jZS5oIG11bHRpaGFuZGxlLmggc2V0dXAtdm1zLmggZG90ZG90LmggICAgICAgICAgICAgICAgICBcCi0gIHg1MDlhc24xLmggaHR0cDIuaCBzaWdwaXBlLmggc21iLmggY3VybF9lbmRpYW4uaCBjdXJsX2Rlcy5oICAgICAgICAgICBcCi0gIGN1cmxfcHJpbnRmLmggc3lzdGVtX3dpbjMyLmggcmFuZC5oIG1pbWUuaCBjdXJsX3NoYTI1Ni5oIHNldG9wdC5oICAgICBcCi0gIGN1cmxfcGF0aC5oIGN1cmxfY3R5cGUuaCBjdXJsX3JhbmdlLmggcHNsLmggZG9oLmggdXJsYXBpLWludC5oICAgICAgICBcCi0gIGN1cmxfZ2V0X2xpbmUuaCBhbHRzdmMuaAorTElCX1ZRVUlDX0hGSUxFUyA9IHZxdWljL25ndGNwMi5oIHZxdWljL3F1aWNoZS5oIHZxdWljL3ZxdWljLmgKKworTElCX1ZTU0hfQ0ZJTEVTID0gdnNzaC9saWJzc2guYyB2c3NoL2xpYnNzaDIuYyB2c3NoL3dvbGZzc2guYworCitMSUJfVlNTSF9IRklMRVMgPSB2c3NoL3NzaC5oCisKK0xJQl9DRklMRVMgPSBhbHRzdmMuYyBhbWlnYW9zLmMgYXN5bi1hcmVzLmMgYXN5bi10aHJlYWQuYyBiYXNlNjQuYyAgICAgICAgICAgIFwKKyAgY29ubmNhY2hlLmMgY29ubmVjdC5jIGNvbnRlbnRfZW5jb2RpbmcuYyBjb29raWUuYyBjdXJsX2FkZHJpbmZvLmMgICAgICAgICAgIFwKKyAgY3VybF9jdHlwZS5jIGN1cmxfZGVzLmMgY3VybF9lbmRpYW4uYyBjdXJsX2ZubWF0Y2guYyBjdXJsX2dldF9saW5lLmMgICAgICAgIFwKKyAgY3VybF9nZXRob3N0bmFtZS5jIGN1cmxfZ3NzYXBpLmMgY3VybF9tZW1yY2hyLmMgY3VybF9tdWx0aWJ5dGUuYyAgICAgICAgICAgIFwKKyAgY3VybF9udGxtX2NvcmUuYyBjdXJsX250bG1fd2IuYyBjdXJsX3BhdGguYyBjdXJsX3JhbmdlLmMgY3VybF9ydG1wLmMgICAgICAgIFwKKyAgY3VybF9zYXNsLmMgY3VybF9zc3BpLmMgY3VybF90aHJlYWRzLmMgZGljdC5jIGRvdGRvdC5jIGVhc3kuYyBlc2NhcGUuYyAgICAgIFwKKyAgZmlsZS5jIGZpbGVpbmZvLmMgZm9ybWRhdGEuYyBmdHAuYyB1cmwuYyBmdHBsaXN0cGFyc2VyLmMgZ2V0ZW52LmMgZ2V0aW5mby5jIFwKKyAgZ29waGVyLmMgaGFzaC5jIGhtYWMuYyBob3N0YXN5bi5jIGhvc3RjaGVjay5jIGhvc3RpcC5jIGhvc3RpcDQuYyBob3N0aXA2LmMgIFwKKyAgaG9zdHN5bi5jIGh0dHAuYyBodHRwMi5jIGh0dHBfY2h1bmtzLmMgaHR0cF9kaWdlc3QuYyBodHRwX25lZ290aWF0ZS5jICAgICAgIFwKKyAgaHR0cF9udGxtLmMgaHR0cF9wcm94eS5jIGlkbl93aW4zMi5jIGlmMmlwLmMgaW1hcC5jIGluZXRfbnRvcC5jIGluZXRfcHRvbi5jIFwKKyAga3JiNS5jIGxkYXAuYyBsbGlzdC5jIG1kNC5jIG1kNS5jIG1lbWRlYnVnLmMgbWltZS5jIG1wcmludGYuYyBtcXR0LmMgICAgICAgIFwKKyAgbXVsdGkuYyBuZXRyYy5jIG5vbi1hc2NpaS5jIG5vbmJsb2NrLmMgb3BlbmxkYXAuYyBwYXJzZWRhdGUuYyBwaW5ncG9uZy5jICAgIFwKKyAgcG9wMy5jIHByb2dyZXNzLmMgcHNsLmMgZG9oLmMgcmFuZC5jIHJlbmFtZS5jIHJ0c3AuYyBzZWN1cml0eS5jIHNlbGVjdC5jICAgIFwKKyAgc2VuZGYuYyBzZXRvcHQuYyBzaGEyNTYuYyBzaGFyZS5jIHNsaXN0LmMgc21iLmMgc210cC5jIHNvY2tldHBhaXIuYyBzb2Nrcy5jIFwKKyAgc29ja3NfZ3NzYXBpLmMgc29ja3Nfc3NwaS5jIHNwZWVkY2hlY2suYyBzcGxheS5jIHN0cmNhc2UuYyBzdHJkdXAuYyAgICAgICAgIFwKKyAgc3RyZXJyb3IuYyBzdHJ0b2suYyBzdHJ0b29mZnQuYyBzeXN0ZW1fd2luMzIuYyB0ZWxuZXQuYyB0ZnRwLmMgdGltZXZhbC5jICAgIFwKKyAgdHJhbnNmZXIuYyB1cmxhcGkuYyB2ZXJzaW9uLmMgd2Fybmxlc3MuYyB3aWxkY2FyZC5jIHg1MDlhc24xLmMgZHluYnVmLmMKKworTElCX0hGSUxFUyA9IGFsdHN2Yy5oIGFtaWdhb3MuaCBhcnBhX3RlbG5ldC5oIGFzeW4uaCBjb25uY2FjaGUuaCBjb25uZWN0LmggICAgXAorICBjb250ZW50X2VuY29kaW5nLmggY29va2llLmggY3VybF9hZGRyaW5mby5oIGN1cmxfYmFzZTY0LmggY3VybF9jdHlwZS5oICAgICAgXAorICBjdXJsX2Rlcy5oIGN1cmxfZW5kaWFuLmggY3VybF9mbm1hdGNoLmggY3VybF9nZXRfbGluZS5oIGN1cmxfZ2V0aG9zdG5hbWUuaCAgXAorICBjdXJsX2dzc2FwaS5oIGN1cmxfaG1hYy5oIGN1cmxfbGRhcC5oIGN1cmxfbWQ0LmggY3VybF9tZDUuaCBjdXJsX21lbW9yeS5oICAgXAorICBjdXJsX21lbXJjaHIuaCBjdXJsX211bHRpYnl0ZS5oIGN1cmxfbnRsbV9jb3JlLmggY3VybF9udGxtX3diLmggY3VybF9wYXRoLmggXAorICBjdXJsX3ByaW50Zi5oIGN1cmxfcmFuZ2UuaCBjdXJsX3J0bXAuaCBjdXJsX3Nhc2wuaCBjdXJsX3NlYy5oIGN1cmxfc2V0dXAuaCAgXAorICBjdXJsX3NldHVwX29uY2UuaCBjdXJsX3NoYTI1Ni5oIGN1cmxfc3NwaS5oIGN1cmxfdGhyZWFkcy5oIGN1cmx4LmggZGljdC5oICAgXAorICBkb3Rkb3QuaCBlYXN5aWYuaCBlc2NhcGUuaCBmaWxlLmggZmlsZWluZm8uaCBmb3JtZGF0YS5oIGZ0cC5oIHVybC5oICAgICAgICAgXAorICBmdHBsaXN0cGFyc2VyLmggZ2V0aW5mby5oIGdvcGhlci5oIGhhc2guaCBob3N0Y2hlY2suaCBob3N0aXAuaCBodHRwLmggICAgICAgXAorICBodHRwMi5oIGh0dHBfY2h1bmtzLmggaHR0cF9kaWdlc3QuaCBodHRwX25lZ290aWF0ZS5oIGh0dHBfbnRsbS5oICAgICAgICAgICAgXAorICBodHRwX3Byb3h5LmggaWYyaXAuaCBpbWFwLmggaW5ldF9udG9wLmggaW5ldF9wdG9uLmggbGxpc3QuaCBtZW1kZWJ1Zy5oICAgICAgXAorICBtaW1lLmggbXF0dC5oIG11bHRpaGFuZGxlLmggbXVsdGlpZi5oIG5ldHJjLmggbm9uLWFzY2lpLmggbm9uYmxvY2suaCAgICAgICAgXAorICBwYXJzZWRhdGUuaCBwaW5ncG9uZy5oIHBvcDMuaCBwcm9ncmVzcy5oIHBzbC5oIGRvaC5oIHF1aWMuaCByYW5kLmggcmVuYW1lLmggXAorICBydHNwLmggc2VsZWN0Lmggc2VuZGYuaCBzZXRvcHQuaCBzZXR1cC12bXMuaCBzaGFyZS5oIHNpZ3BpcGUuaCBzbGlzdC5oICAgICAgXAorICBzbWIuaCBzbXRwLmggc29ja2FkZHIuaCBzb2NrZXRwYWlyLmggc29ja3MuaCBzcGVlZGNoZWNrLmggc3BsYXkuaCBzdHJjYXNlLmggXAorICBzdHJkdXAuaCBzdHJlcnJvci5oIHN0cnRvay5oIHN0cnRvb2ZmdC5oIHN5c3RlbV93aW4zMi5oIHRlbG5ldC5oIHRmdHAuaCAgICAgXAorICB0aW1ldmFsLmggdHJhbnNmZXIuaCB1cmxhcGktaW50LmggdXJsZGF0YS5oIHdhcm5sZXNzLmggd2lsZGNhcmQuaCAgICAgICAgICAgXAorICB4NTA5YXNuMS5oIGR5bmJ1Zi5oCiAKIExJQl9SQ0ZJTEVTID0gbGliY3VybC5yYwogCi1DU09VUkNFUyA9ICQoTElCX0NGSUxFUykgJChMSUJfVkFVVEhfQ0ZJTEVTKSAkKExJQl9WVExTX0NGSUxFUykKLUhIRUFERVJTID0gJChMSUJfSEZJTEVTKSAkKExJQl9WQVVUSF9IRklMRVMpICQoTElCX1ZUTFNfSEZJTEVTKQorQ1NPVVJDRVMgPSAkKExJQl9DRklMRVMpICQoTElCX1ZBVVRIX0NGSUxFUykgJChMSUJfVlRMU19DRklMRVMpIFwKKyAgJChMSUJfVlFVSUNfQ0ZJTEVTKSAkKExJQl9WU1NIX0NGSUxFUykKK0hIRUFERVJTID0gJChMSUJfSEZJTEVTKSAkKExJQl9WQVVUSF9IRklMRVMpICQoTElCX1ZUTFNfSEZJTEVTKSBcCisgICQoTElCX1ZRVUlDX0hGSUxFUykgJChMSUJfVlNTSF9IRklMRVMpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2FsdHN2Yy5jCmluZGV4IDg1YTRlMDEuLmMyZWM0ODkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FsdHN2Yy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2FsdHN2Yy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlICJwYXJzZWRhdGUuaCIKICNpbmNsdWRlICJzZW5kZi5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAicmFuZC5oIgorI2luY2x1ZGUgInJlbmFtZS5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTQ4LDE1ICs1MCwyMSBAQAogI2RlZmluZSBNQVhfQUxUU1ZDX0FMUE5MRU5TVFIgIjEwIgogI2RlZmluZSBNQVhfQUxUU1ZDX0FMUE5MRU4gMTAKIAorI2lmIGRlZmluZWQoVVNFX1FVSUNIRSkgJiYgIWRlZmluZWQoVU5JVFRFU1RTKQorI2RlZmluZSBIM1ZFUlNJT04gImgzLTI5IgorI2VsaWYgZGVmaW5lZChVU0VfTkdUQ1AyKSAmJiAhZGVmaW5lZChVTklUVEVTVFMpCisjZGVmaW5lIEgzVkVSU0lPTiAiaDMtMjkiCisjZWxzZQorI2RlZmluZSBIM1ZFUlNJT04gImgzIgorI2VuZGlmCisKIHN0YXRpYyBlbnVtIGFscG5pZCBhbHBuMmFscG5pZChjaGFyICpuYW1lKQogewogICBpZihzdHJjYXNlY29tcGFyZShuYW1lLCAiaDEiKSkKICAgICByZXR1cm4gQUxQTl9oMTsKICAgaWYoc3RyY2FzZWNvbXBhcmUobmFtZSwgImgyIikpCiAgICAgcmV0dXJuIEFMUE5faDI7Ci0gIGlmKHN0cmNhc2Vjb21wYXJlKG5hbWUsICJoMmMiKSkKLSAgICByZXR1cm4gQUxQTl9oMmM7Ci0gIGlmKHN0cmNhc2Vjb21wYXJlKG5hbWUsICJoMyIpKQorICBpZihzdHJjYXNlY29tcGFyZShuYW1lLCBIM1ZFUlNJT04pKQogICAgIHJldHVybiBBTFBOX2gzOwogICByZXR1cm4gQUxQTl9ub25lOyAvKiB1bmtub3duLCBwcm9iYWJseSBydWJiaXNoIGlucHV0ICovCiB9CkBAIC02OSwxMCArNzcsOCBAQAogICAgIHJldHVybiAiaDEiOwogICBjYXNlIEFMUE5faDI6CiAgICAgcmV0dXJuICJoMiI7Ci0gIGNhc2UgQUxQTl9oMmM6Ci0gICAgcmV0dXJuICJoMmMiOwogICBjYXNlIEFMUE5faDM6Ci0gICAgcmV0dXJuICJoMyI7CisgICAgcmV0dXJuIEgzVkVSU0lPTjsKICAgZGVmYXVsdDoKICAgICByZXR1cm4gIiI7IC8qIGJhZCAqLwogICB9CkBAIC04MSw4ICs4Nyw4IEBACiAKIHN0YXRpYyB2b2lkIGFsdHN2Y19mcmVlKHN0cnVjdCBhbHRzdmMgKmFzKQogewotICBmcmVlKGFzLT5zcmNob3N0KTsKLSAgZnJlZShhcy0+ZHN0aG9zdCk7CisgIGZyZWUoYXMtPnNyYy5ob3N0KTsKKyAgZnJlZShhcy0+ZHN0Lmhvc3QpOwogICBmcmVlKGFzKTsKIH0KIApAQCAtOTcsMTcgKzEwMywxNyBAQAogICBpZighYXMpCiAgICAgcmV0dXJuIE5VTEw7CiAKLSAgYXMtPnNyY2hvc3QgPSBzdHJkdXAoc3JjaG9zdCk7Ci0gIGlmKCFhcy0+c3JjaG9zdCkKKyAgYXMtPnNyYy5ob3N0ID0gc3RyZHVwKHNyY2hvc3QpOworICBpZighYXMtPnNyYy5ob3N0KQogICAgIGdvdG8gZXJyb3I7Ci0gIGFzLT5kc3Rob3N0ID0gc3RyZHVwKGRzdGhvc3QpOwotICBpZighYXMtPmRzdGhvc3QpCisgIGFzLT5kc3QuaG9zdCA9IHN0cmR1cChkc3Rob3N0KTsKKyAgaWYoIWFzLT5kc3QuaG9zdCkKICAgICBnb3RvIGVycm9yOwogCi0gIGFzLT5zcmNhbHBuaWQgPSBzcmNhbHBuaWQ7Ci0gIGFzLT5kc3RhbHBuaWQgPSBkc3RhbHBuaWQ7Ci0gIGFzLT5zcmNwb3J0ID0gY3VybHhfdWx0b3VzKHNyY3BvcnQpOwotICBhcy0+ZHN0cG9ydCA9IGN1cmx4X3VsdG91cyhkc3Rwb3J0KTsKKyAgYXMtPnNyYy5hbHBuaWQgPSBzcmNhbHBuaWQ7CisgIGFzLT5kc3QuYWxwbmlkID0gZHN0YWxwbmlkOworICBhcy0+c3JjLnBvcnQgPSBjdXJseF91bHRvdXMoc3JjcG9ydCk7CisgIGFzLT5kc3QucG9ydCA9IGN1cmx4X3VsdG91cyhkc3Rwb3J0KTsKIAogICByZXR1cm4gYXM7CiAgIGVycm9yOgpAQCAtMTU2LDE0ICsxNjIsMTMgQEAKICAgICAgICAgICAgICAgZGF0ZSwgJnBlcnNpc3QsICZwcmlvKTsKICAgaWYoOSA9PSByYykgewogICAgIHN0cnVjdCBhbHRzdmMgKmFzOwotICAgIHRpbWVfdCBleHBpcmVzID0gY3VybF9nZXRkYXRlKGRhdGUsIE5VTEwpOworICAgIHRpbWVfdCBleHBpcmVzID0gQ3VybF9nZXRkYXRlX2NhcHBlZChkYXRlKTsKICAgICBhcyA9IGFsdHN2Y19jcmVhdGUoc3JjaG9zdCwgZHN0aG9zdCwgc3JjYWxwbiwgZHN0YWxwbiwgc3JjcG9ydCwgZHN0cG9ydCk7CiAgICAgaWYoYXMpIHsKICAgICAgIGFzLT5leHBpcmVzID0gZXhwaXJlczsKICAgICAgIGFzLT5wcmlvID0gcHJpbzsKICAgICAgIGFzLT5wZXJzaXN0ID0gcGVyc2lzdCA/IDEgOiAwOwogICAgICAgQ3VybF9sbGlzdF9pbnNlcnRfbmV4dCgmYXNpLT5saXN0LCBhc2ktPmxpc3QudGFpbCwgYXMsICZhcy0+bm9kZSk7Ci0gICAgICBhc2ktPm51bSsrOyAvKiBvbmUgbW9yZSBlbnRyeSAqLwogICAgIH0KICAgfQogCkBAIC0xODMsNyArMTg4LDE2IEBACiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBjaGFyICpsaW5lID0gTlVMTDsKLSAgRklMRSAqZnAgPSBmb3BlbihmaWxlLCBGT1BFTl9SRUFEVEVYVCk7CisgIEZJTEUgKmZwOworCisgIC8qIHdlIG5lZWQgYSBwcml2YXRlIGNvcHkgb2YgdGhlIGZpbGUgbmFtZSBzbyB0aGF0IHRoZSBhbHRzdmMgY2FjaGUgZmlsZQorICAgICBuYW1lIHN1cnZpdmVzIGFuIGVhc3kgaGFuZGxlIHJlc2V0ICovCisgIGZyZWUoYXNpLT5maWxlbmFtZSk7CisgIGFzaS0+ZmlsZW5hbWUgPSBzdHJkdXAoZmlsZSk7CisgIGlmKCFhc2ktPmZpbGVuYW1lKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIGZwID0gZm9wZW4oZmlsZSwgRk9QRU5fUkVBRFRFWFQpOwogICBpZihmcCkgewogICAgIGxpbmUgPSBtYWxsb2MoTUFYX0FMVFNWQ19MSU5FKTsKICAgICBpZighbGluZSkKQEAgLTIwNCw2ICsyMTgsNyBAQAogICByZXR1cm4gcmVzdWx0OwogCiAgIGZhaWw6CisgIEN1cmxfc2FmZWZyZWUoYXNpLT5maWxlbmFtZSk7CiAgIGZyZWUobGluZSk7CiAgIGZjbG9zZShmcCk7CiAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtMjI2LDggKzI0MSw4IEBACiAgICAgICAgICAgIlwiJWQlMDJkJTAyZCAiCiAgICAgICAgICAgIiUwMmQ6JTAyZDolMDJkXCIgIgogICAgICAgICAgICIldSAlZFxuIiwKLSAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPnNyY2FscG5pZCksIGFzLT5zcmNob3N0LCBhcy0+c3JjcG9ydCwKLSAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPmRzdGFscG5pZCksIGFzLT5kc3Rob3N0LCBhcy0+ZHN0cG9ydCwKKyAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPnNyYy5hbHBuaWQpLCBhcy0+c3JjLmhvc3QsIGFzLT5zcmMucG9ydCwKKyAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoYXMtPmRzdC5hbHBuaWQpLCBhcy0+ZHN0Lmhvc3QsIGFzLT5kc3QucG9ydCwKICAgICAgICAgICBzdGFtcC50bV95ZWFyICsgMTkwMCwgc3RhbXAudG1fbW9uICsgMSwgc3RhbXAudG1fbWRheSwKICAgICAgICAgICBzdGFtcC50bV9ob3VyLCBzdGFtcC50bV9taW4sIHN0YW1wLnRtX3NlYywKICAgICAgICAgICBhcy0+cGVyc2lzdCwgYXMtPnByaW8pOwpAQCAtMjUyLDcgKzI2Nyw3IEBACiAjaWZkZWYgVVNFX05HSFRUUDIKICAgICB8IENVUkxBTFRTVkNfSDIKICNlbmRpZgotI2lmZGVmIFVTRV9IVFRQMworI2lmZGVmIEVOQUJMRV9RVUlDCiAgICAgfCBDVVJMQUxUU1ZDX0gzCiAjZW5kaWYKICAgICA7CkBAIC0yOTcsNiArMzEyLDcgQEAKICAgICAgIG4gPSBlLT5uZXh0OwogICAgICAgYWx0c3ZjX2ZyZWUoYXMpOwogICAgIH0KKyAgICBmcmVlKGFsdHN2Yy0+ZmlsZW5hbWUpOwogICAgIGZyZWUoYWx0c3ZjKTsKICAgfQogfQpAQCAtMzA0LDM0ICszMjAsNTcgQEAKIC8qCiAgKiBDdXJsX2FsdHN2Y19zYXZlKCkgd3JpdGVzIHRoZSBhbHRzdmMgY2FjaGUgdG8gYSBmaWxlLgogICovCi1DVVJMY29kZSBDdXJsX2FsdHN2Y19zYXZlKHN0cnVjdCBhbHRzdmNpbmZvICphbHRzdmMsIGNvbnN0IGNoYXIgKmZpbGUpCitDVVJMY29kZSBDdXJsX2FsdHN2Y19zYXZlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbHRzdmNpbmZvICphbHRzdmMsIGNvbnN0IGNoYXIgKmZpbGUpCiB7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmU7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKm47CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBGSUxFICpvdXQ7CisgIGNoYXIgKnRlbXBzdG9yZTsKKyAgdW5zaWduZWQgY2hhciByYW5kc3VmZml4WzldOwogCiAgIGlmKCFhbHRzdmMpCiAgICAgLyogbm8gY2FjaGUgYWN0aXZhdGVkICovCiAgICAgcmV0dXJuIENVUkxFX09LOwogCi0gIGlmKChhbHRzdmMtPmZsYWdzICYgQ1VSTEFMVFNWQ19SRUFET05MWUZJTEUpIHx8ICFmaWxlWzBdKQotICAgIC8qIG1hcmtlZCBhcyByZWFkLW9ubHkgb3IgemVybyBsZW5ndGggZmlsZSBuYW1lICovCisgIC8qIGlmIG5vdCBuZXcgbmFtZSBpcyBnaXZlbiwgdXNlIHRoZSBvbmUgd2Ugc3RvcmVkIGZyb20gdGhlIGxvYWQgKi8KKyAgaWYoIWZpbGUgJiYgYWx0c3ZjLT5maWxlbmFtZSkKKyAgICBmaWxlID0gYWx0c3ZjLT5maWxlbmFtZTsKKworICBpZigoYWx0c3ZjLT5mbGFncyAmIENVUkxBTFRTVkNfUkVBRE9OTFlGSUxFKSB8fCAhZmlsZSB8fCAhZmlsZVswXSkKKyAgICAvKiBtYXJrZWQgYXMgcmVhZC1vbmx5LCBubyBmaWxlIG9yIHplcm8gbGVuZ3RoIGZpbGUgbmFtZSAqLwogICAgIHJldHVybiBDVVJMRV9PSzsKLSAgb3V0ID0gZm9wZW4oZmlsZSwgRk9QRU5fV1JJVEVURVhUKTsKKworICBpZihDdXJsX3JhbmRfaGV4KGRhdGEsIHJhbmRzdWZmaXgsIHNpemVvZihyYW5kc3VmZml4KSkpCisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworCisgIHRlbXBzdG9yZSA9IGFwcmludGYoIiVzLiVzLnRtcCIsIGZpbGUsIHJhbmRzdWZmaXgpOworICBpZighdGVtcHN0b3JlKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIG91dCA9IGZvcGVuKHRlbXBzdG9yZSwgRk9QRU5fV1JJVEVURVhUKTsKICAgaWYoIW91dCkKLSAgICByZXR1cm4gQ1VSTEVfV1JJVEVfRVJST1I7Ci0gIGZwdXRzKCIjIFlvdXIgYWx0LXN2YyBjYWNoZS4gaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9hbHQtc3ZjLmh0bWxcbiIKLSAgICAgICAgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbGliY3VybCEgRWRpdCBhdCB5b3VyIG93biByaXNrLlxuIiwKLSAgICAgICAgb3V0KTsKLSAgZm9yKGUgPSBhbHRzdmMtPmxpc3QuaGVhZDsgZTsgZSA9IG4pIHsKLSAgICBzdHJ1Y3QgYWx0c3ZjICphcyA9IGUtPnB0cjsKLSAgICBuID0gZS0+bmV4dDsKLSAgICByZXN1bHQgPSBhbHRzdmNfb3V0KGFzLCBvdXQpOworICAgIHJlc3VsdCA9IENVUkxFX1dSSVRFX0VSUk9SOworICBlbHNlIHsKKyAgICBmcHV0cygiIyBZb3VyIGFsdC1zdmMgY2FjaGUuIGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvYWx0LXN2Yy5odG1sXG4iCisgICAgICAgICAgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbGliY3VybCEgRWRpdCBhdCB5b3VyIG93biByaXNrLlxuIiwKKyAgICAgICAgICBvdXQpOworICAgIGZvcihlID0gYWx0c3ZjLT5saXN0LmhlYWQ7IGU7IGUgPSBuKSB7CisgICAgICBzdHJ1Y3QgYWx0c3ZjICphcyA9IGUtPnB0cjsKKyAgICAgIG4gPSBlLT5uZXh0OworICAgICAgcmVzdWx0ID0gYWx0c3ZjX291dChhcywgb3V0KTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGZjbG9zZShvdXQpOworICAgIGlmKCFyZXN1bHQgJiYgQ3VybF9yZW5hbWUodGVtcHN0b3JlLCBmaWxlKSkKKyAgICAgIHJlc3VsdCA9IENVUkxFX1dSSVRFX0VSUk9SOworCiAgICAgaWYocmVzdWx0KQotICAgICAgYnJlYWs7CisgICAgICB1bmxpbmsodGVtcHN0b3JlKTsKICAgfQotICBmY2xvc2Uob3V0KTsKKyAgZnJlZSh0ZW1wc3RvcmUpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zNDMsMTUgKzM4MiwxNSBAQAogICB3aGlsZSgqcCAmJiBJU0JMQU5LKCpwKSkKICAgICBwKys7CiAgIHByb3RvcCA9IHA7Ci0gIHdoaWxlKCpwICYmIElTQUxOVU0oKnApKQorICB3aGlsZSgqcCAmJiAhSVNCTEFOSygqcCkgJiYgKCpwICE9ICc7JykgJiYgKCpwICE9ICc9JykpCiAgICAgcCsrOwogICBsZW4gPSBwIC0gcHJvdG9wOworICAqcHRyID0gcDsKIAogICBpZighbGVuIHx8IChsZW4gPj0gYnVmbGVuKSkKICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwogICBtZW1jcHkoYWxwbmJ1ZiwgcHJvdG9wLCBsZW4pOwogICBhbHBuYnVmW2xlbl0gPSAwOwotICAqcHRyID0gcDsKICAgcmV0dXJuIENVUkxFX09LOwogfQogCkBAIC0zNjUsMTIgKzQwNCwxMSBAQAogICBmb3IoZSA9IGFzaS0+bGlzdC5oZWFkOyBlOyBlID0gbikgewogICAgIHN0cnVjdCBhbHRzdmMgKmFzID0gZS0+cHRyOwogICAgIG4gPSBlLT5uZXh0OwotICAgIGlmKChzcmNhbHBuaWQgPT0gYXMtPnNyY2FscG5pZCkgJiYKLSAgICAgICAoc3JjcG9ydCA9PSBhcy0+c3JjcG9ydCkgJiYKLSAgICAgICBzdHJjYXNlY29tcGFyZShzcmNob3N0LCBhcy0+c3JjaG9zdCkpIHsKKyAgICBpZigoc3JjYWxwbmlkID09IGFzLT5zcmMuYWxwbmlkKSAmJgorICAgICAgIChzcmNwb3J0ID09IGFzLT5zcmMucG9ydCkgJiYKKyAgICAgICBzdHJjYXNlY29tcGFyZShzcmNob3N0LCBhcy0+c3JjLmhvc3QpKSB7CiAgICAgICBDdXJsX2xsaXN0X3JlbW92ZSgmYXNpLT5saXN0LCBlLCBOVUxMKTsKICAgICAgIGFsdHN2Y19mcmVlKGFzKTsKLSAgICAgIGFzaS0+bnVtLS07CiAgICAgfQogICB9CiB9CkBAIC0zOTEsMTIgKzQyOSwxOCBAQAogI2RlZmluZSB0aW1lKHgpIGRlYnVndGltZSh4KQogI2VuZGlmCiAKKyNkZWZpbmUgSVNORVdMSU5FKHgpICgoKHgpID09ICdcbicpIHx8ICh4KSA9PSAnXHInKQorCiAvKgogICogQ3VybF9hbHRzdmNfcGFyc2UoKSB0YWtlcyBhbiBpbmNvbWluZyBhbHQtc3ZjIHJlc3BvbnNlIGhlYWRlciBhbmQgc3RvcmVzCiAgKiB0aGUgZGF0YSBjb3JyZWN0bHkgaW4gdGhlIGNhY2hlLgogICoKICAqICd2YWx1ZScgcG9pbnRzIHRvIHRoZSBoZWFkZXIgKnZhbHVlKi4gVGhhdCdzIGNvbnRlbnRzIHRvIHRoZSByaWdodCBvZiB0aGUKICAqIGhlYWRlciBuYW1lLgorICoKKyAqIEN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIHJlamVjdHMgaW52YWxpZCBkYXRhIHdpdGhvdXQgcmV0dXJuaW5nIGFuIGVycm9yLgorICogSW52YWxpZCBob3N0IG5hbWUsIHBvcnQgbnVtYmVyIHdpbGwgcmVzdWx0IGluIHRoZSBzcGVjaWZpYyBhbHRlcm5hdGl2ZQorICogYmVpbmcgcmVqZWN0ZWQuIFVua25vd24gcHJvdG9jb2xzIGFyZSBza2lwcGVkLgogICovCiBDVVJMY29kZSBDdXJsX2FsdHN2Y19wYXJzZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFsdHN2Y2luZm8gKmFzaSwgY29uc3QgY2hhciAqdmFsdWUsCkBAIC00MTAsMTIgKzQ1NCwxMSBAQAogICBjaGFyIGFscG5idWZbTUFYX0FMVFNWQ19BTFBOTEVOXSA9ICIiOwogICBzdHJ1Y3QgYWx0c3ZjICphczsKICAgdW5zaWduZWQgc2hvcnQgZHN0cG9ydCA9IHNyY3BvcnQ7IC8qIHRoZSBzYW1lIGJ5IGRlZmF1bHQgKi8KLSAgY29uc3QgY2hhciAqc2VtaXA7Ci0gIHRpbWVfdCBtYXhhZ2UgPSAyNCAqIDM2MDA7IC8qIGRlZmF1bHQgaXMgMjQgaG91cnMgKi8KLSAgYm9vbCBwZXJzaXN0ID0gRkFMU0U7CiAgIENVUkxjb2RlIHJlc3VsdCA9IGdldGFsbnVtKCZwLCBhbHBuYnVmLCBzaXplb2YoYWxwbmJ1ZikpOwotICBpZihyZXN1bHQpCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgaWYocmVzdWx0KSB7CisgICAgaW5mb2YoZGF0YSwgIkV4Y2Vzc2l2ZSBhbHQtc3ZjIGhlYWRlciwgaWdub3JpbmcuLi5cbiIpOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQogCiAgIERFQlVHQVNTRVJUKGFzaSk7CiAKQEAgLTQyNyw0NyArNDcwLDIwIEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogICB9CiAKLSAgLyogVGhlICdtYScgYW5kICdwZXJzaXN0JyBmbGFncyBhcmUgYW5ub3lpbmdseSBtZWFudCBmb3IgYWxsIGFsdGVybmF0aXZlcwotICAgICBidXQgYXJlIHNldCBhZnRlciB0aGUgbGlzdCBvbiB0aGUgbGluZS4gU2NhbiBmb3IgdGhlIHNlbWljb2xvbnMgYW5kIGdldAotICAgICB0aG9zZSBmaWVsZHMgZmlyc3QhICovCi0gIHNlbWlwID0gcDsKLSAgZG8gewotICAgIHNlbWlwID0gc3RyY2hyKHNlbWlwLCAnOycpOwotICAgIGlmKHNlbWlwKSB7Ci0gICAgICBjaGFyIG9wdGlvblszMl07Ci0gICAgICB1bnNpZ25lZCBsb25nIG51bTsKLSAgICAgIGNoYXIgKmVuZF9wdHI7Ci0gICAgICBzZW1pcCsrOyAvKiBwYXNzIHRoZSBzZW1pY29sb24gKi8KLSAgICAgIHJlc3VsdCA9IGdldGFsbnVtKCZzZW1pcCwgb3B0aW9uLCBzaXplb2Yob3B0aW9uKSk7Ci0gICAgICBpZihyZXN1bHQpCi0gICAgICAgIGJyZWFrOwotICAgICAgd2hpbGUoKnNlbWlwICYmIElTQkxBTksoKnNlbWlwKSkKLSAgICAgICAgc2VtaXArKzsKLSAgICAgIGlmKCpzZW1pcCAhPSAnPScpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgc2VtaXArKzsKLSAgICAgIG51bSA9IHN0cnRvdWwoc2VtaXAsICZlbmRfcHRyLCAxMCk7Ci0gICAgICBpZihudW0gPCBVTE9OR19NQVgpIHsKLSAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoIm1hIiwgb3B0aW9uKSkKLSAgICAgICAgICBtYXhhZ2UgPSBudW07Ci0gICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoInBlcnNpc3QiLCBvcHRpb24pICYmIChudW0gPT0gMSkpCi0gICAgICAgICAgcGVyc2lzdCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBzZW1pcCA9IGVuZF9wdHI7Ci0gICAgfQotICB9IHdoaWxlKHNlbWlwKTsKLQogICBkbyB7CiAgICAgaWYoKnAgPT0gJz0nKSB7CiAgICAgICAvKiBbcHJvdG9jb2xdPSJbaG9zdF1bOnBvcnRdIiAqLwogICAgICAgZHN0YWxwbmlkID0gYWxwbjJhbHBuaWQoYWxwbmJ1Zik7Ci0gICAgICBpZighZHN0YWxwbmlkKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJVbmtub3duIGFsdC1zdmMgcHJvdG9jb2wgXCIlc1wiLCBpZ25vcmluZy4uLlxuIiwgYWxwbmJ1Zik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICAgIH0KICAgICAgIHArKzsKICAgICAgIGlmKCpwID09ICdcIicpIHsKLSAgICAgICAgY29uc3QgY2hhciAqZHN0aG9zdDsKKyAgICAgICAgY29uc3QgY2hhciAqZHN0aG9zdCA9ICIiOworICAgICAgICBjb25zdCBjaGFyICp2YWx1ZV9wdHI7CisgICAgICAgIGNoYXIgb3B0aW9uWzMyXTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBudW07CisgICAgICAgIGNoYXIgKmVuZF9wdHI7CisgICAgICAgIGJvb2wgcXVvdGVkID0gRkFMU0U7CisgICAgICAgIHRpbWVfdCBtYXhhZ2UgPSAyNCAqIDM2MDA7IC8qIGRlZmF1bHQgaXMgMjQgaG91cnMgKi8KKyAgICAgICAgYm9vbCBwZXJzaXN0ID0gRkFMU0U7CiAgICAgICAgIHArKzsKICAgICAgICAgaWYoKnAgIT0gJzonKSB7CiAgICAgICAgICAgLyogaG9zdCBuYW1lIHN0YXJ0cyBoZXJlICovCkBAIC00NzUsMTEgKzQ5MSwxNSBAQAogICAgICAgICAgIHdoaWxlKCpwICYmIChJU0FMTlVNKCpwKSB8fCAoKnAgPT0gJy4nKSB8fCAoKnAgPT0gJy0nKSkpCiAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgbGVuID0gcCAtIGhvc3RwOwotICAgICAgICAgIGlmKCFsZW4gfHwgKGxlbiA+PSBNQVhfQUxUU1ZDX0hPU1RMRU4pKQotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKLSAgICAgICAgICBtZW1jcHkobmFtZWJ1ZiwgaG9zdHAsIGxlbik7Ci0gICAgICAgICAgbmFtZWJ1ZltsZW5dID0gMDsKLSAgICAgICAgICBkc3Rob3N0ID0gbmFtZWJ1ZjsKKyAgICAgICAgICBpZighbGVuIHx8IChsZW4gPj0gTUFYX0FMVFNWQ19IT1NUTEVOKSkgeworICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkV4Y2Vzc2l2ZSBhbHQtc3ZjIGhvc3QgbmFtZSwgaWdub3JpbmcuLi5cbiIpOworICAgICAgICAgICAgZHN0YWxwbmlkID0gQUxQTl9ub25lOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1lbWNweShuYW1lYnVmLCBob3N0cCwgbGVuKTsKKyAgICAgICAgICAgIG5hbWVidWZbbGVuXSA9IDA7CisgICAgICAgICAgICBkc3Rob3N0ID0gbmFtZWJ1ZjsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgLyogbm8gZGVzdGluYXRpb24gbmFtZSwgdXNlIHNvdXJjZSBob3N0ICovCkBAIC00ODcsMzEgKzUwNyw4NSBAQAogICAgICAgICB9CiAgICAgICAgIGlmKCpwID09ICc6JykgewogICAgICAgICAgIC8qIGEgcG9ydCBudW1iZXIgKi8KLSAgICAgICAgICBjaGFyICplbmRfcHRyOwogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydCA9IHN0cnRvdWwoKytwLCAmZW5kX3B0ciwgMTApOwogICAgICAgICAgIGlmKHBvcnQgPiBVU0hSVF9NQVggfHwgZW5kX3B0ciA9PSBwIHx8ICplbmRfcHRyICE9ICdcIicpIHsKICAgICAgICAgICAgIGluZm9mKGRhdGEsICJVbmtub3duIGFsdC1zdmMgcG9ydCBudW1iZXIsIGlnbm9yaW5nLi4uXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgICAgIGRzdGFscG5pZCA9IEFMUE5fbm9uZTsKICAgICAgICAgICB9CiAgICAgICAgICAgcCA9IGVuZF9wdHI7CiAgICAgICAgICAgZHN0cG9ydCA9IGN1cmx4X3VsdG91cyhwb3J0KTsKICAgICAgICAgfQogICAgICAgICBpZigqcCsrICE9ICdcIicpCi0gICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKLSAgICAgICAgYXMgPSBhbHRzdmNfY3JlYXRlaWQoc3JjaG9zdCwgZHN0aG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjYWxwbmlkLCBkc3RhbHBuaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3BvcnQsIGRzdHBvcnQpOwotICAgICAgICBpZihhcykgewotICAgICAgICAgIC8qIFRoZSBleHBpcmVzIHRpbWUgYWxzbyBuZWVkcyB0byB0YWtlIHRoZSBBZ2U6IHZhbHVlIChpZiBhbnkpIGludG8KLSAgICAgICAgICAgICBhY2NvdW50LiBbU2VlIFJGQyA3ODM4IHNlY3Rpb24gMy4xXSAqLwotICAgICAgICAgIGFzLT5leHBpcmVzID0gbWF4YWdlICsgdGltZShOVUxMKTsKLSAgICAgICAgICBhcy0+cGVyc2lzdCA9IHBlcnNpc3Q7Ci0gICAgICAgICAgQ3VybF9sbGlzdF9pbnNlcnRfbmV4dCgmYXNpLT5saXN0LCBhc2ktPmxpc3QudGFpbCwgYXMsICZhcy0+bm9kZSk7Ci0gICAgICAgICAgYXNpLT5udW0rKzsgLyogb25lIG1vcmUgZW50cnkgKi8KLSAgICAgICAgICBpbmZvZihkYXRhLCAiQWRkZWQgYWx0LXN2YzogJXM6JWQgb3ZlciAlc1xuIiwgZHN0aG9zdCwgZHN0cG9ydCwKLSAgICAgICAgICAgICAgICBDdXJsX2FscG5pZDJzdHIoZHN0YWxwbmlkKSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIEhhbmRsZSB0aGUgb3B0aW9uYWwgJ21hJyBhbmQgJ3BlcnNpc3QnIGZsYWdzLiBVbmtub3duIGZsYWdzCisgICAgICAgICAgIGFyZSBza2lwcGVkLiAqLworICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICB3aGlsZShJU0JMQU5LKCpwKSkKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICBpZigqcCAhPSAnOycpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBwKys7IC8qIHBhc3MgdGhlIHNlbWljb2xvbiAqLworICAgICAgICAgIGlmKCEqcCB8fCBJU05FV0xJTkUoKnApKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgcmVzdWx0ID0gZ2V0YWxudW0oJnAsIG9wdGlvbiwgc2l6ZW9mKG9wdGlvbikpOworICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgLyogc2tpcCBvcHRpb24gaWYgbmFtZSBpcyB0b28gbG9uZyAqLworICAgICAgICAgICAgb3B0aW9uWzBdID0gJ1wwJzsKKyAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUoKnAgJiYgSVNCTEFOSygqcCkpCisgICAgICAgICAgICBwKys7CisgICAgICAgICAgaWYoKnAgIT0gJz0nKQorICAgICAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgICAgIHArKzsKKyAgICAgICAgICB3aGlsZSgqcCAmJiBJU0JMQU5LKCpwKSkKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICBpZighKnApCisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgICAgaWYoKnAgPT0gJ1wiJykgeworICAgICAgICAgICAgLyogcXVvdGVkIHZhbHVlICovCisgICAgICAgICAgICBwKys7CisgICAgICAgICAgICBxdW90ZWQgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgICB2YWx1ZV9wdHIgPSBwOworICAgICAgICAgIGlmKHF1b3RlZCkgeworICAgICAgICAgICAgd2hpbGUoKnAgJiYgKnAgIT0gJ1wiJykKKyAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgaWYoISpwKyspCisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB3aGlsZSgqcCAmJiAhSVNCTEFOSygqcCkgJiYgKnAhPSAnOycgJiYgKnAgIT0gJywnKQorICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgfQorICAgICAgICAgIG51bSA9IHN0cnRvdWwodmFsdWVfcHRyLCAmZW5kX3B0ciwgMTApOworICAgICAgICAgIGlmKChlbmRfcHRyICE9IHZhbHVlX3B0cikgJiYgKG51bSA8IFVMT05HX01BWCkpIHsKKyAgICAgICAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKCJtYSIsIG9wdGlvbikpCisgICAgICAgICAgICAgIG1heGFnZSA9IG51bTsKKyAgICAgICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoInBlcnNpc3QiLCBvcHRpb24pICYmIChudW0gPT0gMSkpCisgICAgICAgICAgICAgIHBlcnNpc3QgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihkc3RhbHBuaWQpIHsKKyAgICAgICAgICBhcyA9IGFsdHN2Y19jcmVhdGVpZChzcmNob3N0LCBkc3Rob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2FscG5pZCwgZHN0YWxwbmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3BvcnQsIGRzdHBvcnQpOworICAgICAgICAgIGlmKGFzKSB7CisgICAgICAgICAgICAvKiBUaGUgZXhwaXJlcyB0aW1lIGFsc28gbmVlZHMgdG8gdGFrZSB0aGUgQWdlOiB2YWx1ZSAoaWYgYW55KSBpbnRvCisgICAgICAgICAgICAgICBhY2NvdW50LiBbU2VlIFJGQyA3ODM4IHNlY3Rpb24gMy4xXSAqLworICAgICAgICAgICAgYXMtPmV4cGlyZXMgPSBtYXhhZ2UgKyB0aW1lKE5VTEwpOworICAgICAgICAgICAgYXMtPnBlcnNpc3QgPSBwZXJzaXN0OworICAgICAgICAgICAgQ3VybF9sbGlzdF9pbnNlcnRfbmV4dCgmYXNpLT5saXN0LCBhc2ktPmxpc3QudGFpbCwgYXMsICZhcy0+bm9kZSk7CisgICAgICAgICAgICBpbmZvZihkYXRhLCAiQWRkZWQgYWx0LXN2YzogJXM6JWQgb3ZlciAlc1xuIiwgZHN0aG9zdCwgZHN0cG9ydCwKKyAgICAgICAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihkc3RhbHBuaWQpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIlVua25vd24gYWx0LXN2YyBwcm90b2NvbCBcIiVzXCIsIHNraXBwaW5nLi4uXG4iLAorICAgICAgICAgICAgICAgIGFscG5idWYpOwogICAgICAgICB9CiAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGJyZWFrOwogICAgICAgLyogYWZ0ZXIgdGhlIGRvdWJsZSBxdW90ZSB0aGVyZSBjYW4gYmUgYSBjb21tYSBpZiB0aGVyZSdzIGFub3RoZXIKICAgICAgICAgIHN0cmluZyBvciBhIHNlbWljb2xvbiBpZiBubyBtb3JlICovCiAgICAgICBpZigqcCA9PSAnLCcpIHsKQEAgLTUxOSwxMSArNTkzLDExIEBACiAgICAgICAgIHArKzsKICAgICAgICAgcmVzdWx0ID0gZ2V0YWxudW0oJnAsIGFscG5idWYsIHNpemVvZihhbHBuYnVmKSk7CiAgICAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgICAvKiBmYWlsZWQgdG8gcGFyc2UsIGJ1dCBzaW5jZSB3ZSBhbHJlYWR5IGRpZCBhdCBsZWFzdCBvbmUgaG9zdCB3ZQotICAgICAgICAgICAgIHJldHVybiBPSyAqLwotICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9CisgICAgZWxzZQorICAgICAgYnJlYWs7CiAgIH0gd2hpbGUoKnAgJiYgKCpwICE9ICc7JykgJiYgKCpwICE9ICdcbicpICYmICgqcCAhPSAnXHInKSk7CiAKICAgcmV0dXJuIENVUkxFX09LOwpAQCAtNTM1LDMxICs2MDksMzEgQEAKIGJvb2wgQ3VybF9hbHRzdmNfbG9va3VwKHN0cnVjdCBhbHRzdmNpbmZvICphc2ksCiAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGFscG5pZCBzcmNhbHBuaWQsIGNvbnN0IGNoYXIgKnNyY2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gYWxwbmlkICpkc3RhbHBuaWQsIGNvbnN0IGNoYXIgKipkc3Rob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkc3Rwb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFsdHN2YyAqKmRzdGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHZlcnNpb25zKSAvKiBvbmUgb3IgbW9yZSBiaXRzICovCiB7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmU7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKm47CiAgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOwogICBERUJVR0FTU0VSVChhc2kpOwogICBERUJVR0FTU0VSVChzcmNob3N0KTsKLSAgREVCVUdBU1NFUlQoZHN0aG9zdCk7CisgIERFQlVHQVNTRVJUKGRzdGVudHJ5KTsKIAogICBmb3IoZSA9IGFzaS0+bGlzdC5oZWFkOyBlOyBlID0gbikgewogICAgIHN0cnVjdCBhbHRzdmMgKmFzID0gZS0+cHRyOwogICAgIG4gPSBlLT5uZXh0OwogICAgIGlmKGFzLT5leHBpcmVzIDwgbm93KSB7CiAgICAgICAvKiBhbiBleHBpcmVkIGVudHJ5LCByZW1vdmUgKi8KKyAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKCZhc2ktPmxpc3QsIGUsIE5VTEwpOwogICAgICAgYWx0c3ZjX2ZyZWUoYXMpOwogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGlmKChhcy0+c3JjYWxwbmlkID09IHNyY2FscG5pZCkgJiYKLSAgICAgICBzdHJjYXNlY29tcGFyZShhcy0+c3JjaG9zdCwgc3JjaG9zdCkgJiYKLSAgICAgICBhcy0+c3JjcG9ydCA9PSBzcmNwb3J0KSB7CisgICAgaWYoKGFzLT5zcmMuYWxwbmlkID09IHNyY2FscG5pZCkgJiYKKyAgICAgICBzdHJjYXNlY29tcGFyZShhcy0+c3JjLmhvc3QsIHNyY2hvc3QpICYmCisgICAgICAgKGFzLT5zcmMucG9ydCA9PSBzcmNwb3J0KSAmJgorICAgICAgICh2ZXJzaW9ucyAmIGFzLT5kc3QuYWxwbmlkKSkgewogICAgICAgLyogbWF0Y2ggKi8KLSAgICAgICpkc3RhbHBuaWQgPSBhcy0+ZHN0YWxwbmlkOwotICAgICAgKmRzdGhvc3QgPSBhcy0+ZHN0aG9zdDsKLSAgICAgICpkc3Rwb3J0ID0gYXMtPmRzdHBvcnQ7CisgICAgICAqZHN0ZW50cnkgPSBhczsKICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYWx0c3ZjLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuaAppbmRleCBlZWZiNDViLi41NzhhNGZiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hbHRzdmMuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yOCwyMCArMjgsMjEgQEAKICNpbmNsdWRlICJsbGlzdC5oIgogCiBlbnVtIGFscG5pZCB7Ci0gIEFMUE5fbm9uZSwKLSAgQUxQTl9oMSwKLSAgQUxQTl9oMiwKLSAgQUxQTl9oMmMsCi0gIEFMUE5faDMKKyAgQUxQTl9ub25lID0gMCwKKyAgQUxQTl9oMSA9IENVUkxBTFRTVkNfSDEsCisgIEFMUE5faDIgPSBDVVJMQUxUU1ZDX0gyLAorICBBTFBOX2gzID0gQ1VSTEFMVFNWQ19IMworfTsKKworc3RydWN0IGFsdGhvc3QgeworICBjaGFyICpob3N0OworICB1bnNpZ25lZCBzaG9ydCBwb3J0OworICBlbnVtIGFscG5pZCBhbHBuaWQ7CiB9OwogCiBzdHJ1Y3QgYWx0c3ZjIHsKLSAgY2hhciAqc3JjaG9zdDsKLSAgY2hhciAqZHN0aG9zdDsKLSAgdW5zaWduZWQgc2hvcnQgc3JjcG9ydDsKLSAgdW5zaWduZWQgc2hvcnQgZHN0cG9ydDsKLSAgZW51bSBhbHBuaWQgc3JjYWxwbmlkOwotICBlbnVtIGFscG5pZCBkc3RhbHBuaWQ7CisgIHN0cnVjdCBhbHRob3N0IHNyYzsKKyAgc3RydWN0IGFsdGhvc3QgZHN0OwogICB0aW1lX3QgZXhwaXJlczsKICAgYm9vbCBwZXJzaXN0OwogICBpbnQgcHJpbzsKQEAgLTUxLDE0ICs1MiwxNCBAQAogc3RydWN0IGFsdHN2Y2luZm8gewogICBjaGFyICpmaWxlbmFtZTsKICAgc3RydWN0IGN1cmxfbGxpc3QgbGlzdDsgLyogbGlzdCBvZiBlbnRyaWVzICovCi0gIHNpemVfdCBudW07IC8qIG51bWJlciBvZiBhbHQtc3ZjIGVudHJpZXMgKi8KICAgbG9uZyBmbGFnczsgLyogdGhlIHB1YmxpY2x5IHNldCBiaXRtYXNrICovCiB9OwogCiBjb25zdCBjaGFyICpDdXJsX2FscG5pZDJzdHIoZW51bSBhbHBuaWQgaWQpOwogc3RydWN0IGFsdHN2Y2luZm8gKkN1cmxfYWx0c3ZjX2luaXQodm9pZCk7CiBDVVJMY29kZSBDdXJsX2FsdHN2Y19sb2FkKHN0cnVjdCBhbHRzdmNpbmZvICphc2ksIGNvbnN0IGNoYXIgKmZpbGUpOwotQ1VSTGNvZGUgQ3VybF9hbHRzdmNfc2F2ZShzdHJ1Y3QgYWx0c3ZjaW5mbyAqYXNpLCBjb25zdCBjaGFyICpmaWxlKTsKK0NVUkxjb2RlIEN1cmxfYWx0c3ZjX3NhdmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFsdHN2Y2luZm8gKmFzaSwgY29uc3QgY2hhciAqZmlsZSk7CiBDVVJMY29kZSBDdXJsX2FsdHN2Y19jdHJsKHN0cnVjdCBhbHRzdmNpbmZvICphc2ksIGNvbnN0IGxvbmcgY3RybCk7CiB2b2lkIEN1cmxfYWx0c3ZjX2NsZWFudXAoc3RydWN0IGFsdHN2Y2luZm8gKmFsdHN2Yyk7CiBDVVJMY29kZSBDdXJsX2FsdHN2Y19wYXJzZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLApAQCAtNjgsMTAgKzY5LDEwIEBACiBib29sIEN1cmxfYWx0c3ZjX2xvb2t1cChzdHJ1Y3QgYWx0c3ZjaW5mbyAqYXNpLAogICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBhbHBuaWQgc3JjYWxwbmlkLCBjb25zdCBjaGFyICpzcmNob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGFscG5pZCAqZHN0YWxwbmlkLCBjb25zdCBjaGFyICoqZHN0aG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZHN0cG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWx0c3ZjICoqZHN0ZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgdmVyc2lvbnMpOyAvKiBDVVJMQUxUU1ZDX0gqIGJpdHMgKi8KICNlbHNlCiAvKiBkaXNhYmxlZCAqLwotI2RlZmluZSBDdXJsX2FsdHN2Y19zYXZlKGEsYikKKyNkZWZpbmUgQ3VybF9hbHRzdmNfc2F2ZShhLGIsYykKICNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfSFRUUCB8fCBVU0VfQUxUU1ZDICovCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfQUxUU1ZDX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4tYXJlcy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi1hcmVzLmMKaW5kZXggODU2MWE0Ny4uYmE1MTYwYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi1hcmVzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi1hcmVzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTg3LDcgKzg3LDggQEAKIAogc3RydWN0IFJlc29sdmVyUmVzdWx0cyB7CiAgIGludCBudW1fcGVuZGluZzsgLyogbnVtYmVyIG9mIGFyZXNfZ2V0aG9zdGJ5bmFtZSgpIHJlcXVlc3RzICovCi0gIEN1cmxfYWRkcmluZm8gKnRlbXBfYWk7IC8qIGludGVybWVkaWFyeSByZXN1bHQgd2hpbGUgZmV0Y2hpbmcgYy1hcmVzIHBhcnRzICovCisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICp0ZW1wX2FpOyAvKiBpbnRlcm1lZGlhcnkgcmVzdWx0IHdoaWxlIGZldGNoaW5nIGMtYXJlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgKi8KICAgaW50IGxhc3Rfc3RhdHVzOwogICBzdHJ1Y3QgY3VybHRpbWUgaGFwcHlfZXllYmFsbHNfZG5zX3RpbWU7IC8qIHdoZW4gdGhpcyB0aW1lciBzdGFydGVkLCBvciAwICovCiB9OwpAQCAtMjUzLDE2ICsyNTQsMTQgQEAKICAqLwogCiBpbnQgQ3VybF9yZXNvbHZlcl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKLQorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKICAgc3RydWN0IHRpbWV2YWwgbWF4dGltZTsKICAgc3RydWN0IHRpbWV2YWwgdGltZWJ1ZjsKICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQ7CiAgIGxvbmcgbWlsbGk7CiAgIGludCBtYXggPSBhcmVzX2dldHNvY2soKGFyZXNfY2hhbm5lbCljb25uLT5kYXRhLT5zdGF0ZS5yZXNvbHZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYXJlc19zb2NrZXRfdCAqKXNvY2tzLCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZXNfc29ja2V0X3QgKilzb2NrcywgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRSk7CiAKICAgbWF4dGltZS50dl9zZWMgPSBDVVJMX1RJTUVPVVRfUkVTT0xWRTsKICAgbWF4dGltZS50dl91c2VjID0gMDsKQEAgLTI4Nyw3ICsyODYsNyBAQAogICogcmV0dXJuIG51bWJlciBvZiBzb2NrZXRzIGl0IHdvcmtlZCBvbgogICovCiAKLXN0YXRpYyBpbnQgd2FpdHBlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgdGltZW91dF9tcykKK3N0YXRpYyBpbnQgd2FpdHBlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCB0aW1lZGlmZl90IHRpbWVvdXRfbXMpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBpbnQgbmZkczsKQEAgLTM1NCw4ICszNTMsOCBAQAogICAgIGNvbm4tPmFzeW5jLm9zX3NwZWNpZmljOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAotICBpZihkbnMpCi0gICAgKmRucyA9IE5VTEw7CisgIERFQlVHQVNTRVJUKGRucyk7CisgICpkbnMgPSBOVUxMOwogCiAgIHdhaXRwZXJmb3JtKGNvbm4sIDApOwogCkBAIC0zODMsMTkgKzM4MiwxOCBAQAogICB9CiAKICAgaWYocmVzICYmICFyZXMtPm51bV9wZW5kaW5nKSB7Ci0gICAgaWYoZG5zKSB7Ci0gICAgICAodm9pZClDdXJsX2FkZHJpbmZvX2NhbGxiYWNrKGNvbm4sIHJlcy0+bGFzdF9zdGF0dXMsIHJlcy0+dGVtcF9haSk7Ci0gICAgICAvKiB0ZW1wX2FpIG93bmVyc2hpcCBpcyBtb3ZlZCB0byB0aGUgY29ubmVjdGlvbiwgc28gd2UgbmVlZCBub3QgZnJlZS11cAotICAgICAgICAgdGhlbSAqLwotICAgICAgcmVzLT50ZW1wX2FpID0gTlVMTDsKLSAgICB9CisgICAgKHZvaWQpQ3VybF9hZGRyaW5mb19jYWxsYmFjayhjb25uLCByZXMtPmxhc3Rfc3RhdHVzLCByZXMtPnRlbXBfYWkpOworICAgIC8qIHRlbXBfYWkgb3duZXJzaGlwIGlzIG1vdmVkIHRvIHRoZSBjb25uZWN0aW9uLCBzbyB3ZSBuZWVkIG5vdCBmcmVlLXVwCisgICAgICAgdGhlbSAqLworICAgIHJlcy0+dGVtcF9haSA9IE5VTEw7CisKICAgICBpZighY29ubi0+YXN5bmMuZG5zKSB7CiAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHJlc29sdmU6ICVzICglcykiLAogICAgICAgICAgICAgY29ubi0+YXN5bmMuaG9zdG5hbWUsIGFyZXNfc3RyZXJyb3IoY29ubi0+YXN5bmMuc3RhdHVzKSk7CiAgICAgICByZXN1bHQgPSBjb25uLT5iaXRzLnByb3h5P0NVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWToKICAgICAgICAgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CiAgICAgfQotICAgIGVsc2UgaWYoZG5zKQorICAgIGVsc2UKICAgICAgICpkbnMgPSBjb25uLT5hc3luYy5kbnM7CiAKICAgICBkZXN0cm95X2FzeW5jX2RhdGEoJmNvbm4tPmFzeW5jKTsKQEAgLTQxMCw3ICs0MDgsNyBAQAogICogV2FpdHMgZm9yIGEgcmVzb2x2ZSB0byBmaW5pc2guIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGF2b2lkZWQgc2luY2UgdXNpbmcKICAqIHRoaXMgcmlzayBnZXR0aW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gImhhbmciLgogICoKLSAqIElmICdlbnRyeScgaXMgbm9uLU5VTEwsIG1ha2UgaXQgcG9pbnQgdG8gdGhlIHJlc29sdmVkIGRucyBlbnRyeQorICogJ2VudHJ5JyBNVVNUIGJlIG5vbi1OVUxMLgogICoKICAqIFJldHVybnMgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1QgaWYgdGhlIGhvc3Qgd2FzIG5vdCByZXNvbHZlZCwKICAqIENVUkxFX09QRVJBVElPTl9USU1FRE9VVCBpZiBhIHRpbWUtb3V0IG9jY3VycmVkLCBvciBvdGhlciBlcnJvcnMuCkBAIC00MjIsMTAgKzQyMCw5IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICB0aW1lZGlmZl90IHRpbWVvdXQ7CiAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKnRlbXBfZW50cnk7CiAKLSAgaWYoZW50cnkpCi0gICAgKmVudHJ5ID0gTlVMTDsgLyogY2xlYXIgb24gZW50cnkgKi8KKyAgREVCVUdBU1NFUlQoZW50cnkpOworICAqZW50cnkgPSBOVUxMOyAvKiBjbGVhciBvbiBlbnRyeSAqLwogCiAgIHRpbWVvdXQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csIFRSVUUpOwogICBpZih0aW1lb3V0IDwgMCkgewpAQCAtNDQwLDkgKzQzNywxMyBAQAogICB3aGlsZSghcmVzdWx0KSB7CiAgICAgc3RydWN0IHRpbWV2YWwgKnR2cCwgdHYsIHN0b3JlOwogICAgIGludCBpdGltZW91dDsKLSAgICBpbnQgdGltZW91dF9tczsKKyAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAKLSAgICBpdGltZW91dCA9ICh0aW1lb3V0ID4gKGxvbmcpSU5UX01BWCkgPyBJTlRfTUFYIDogKGludCl0aW1lb3V0OworI2lmIFRJTUVESUZGX1RfTUFYID4gSU5UX01BWAorICAgIGl0aW1lb3V0ID0gKHRpbWVvdXQgPiBJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KXRpbWVvdXQ7CisjZWxzZQorICAgIGl0aW1lb3V0ID0gKGludCl0aW1lb3V0OworI2VuZGlmCiAKICAgICBzdG9yZS50dl9zZWMgPSBpdGltZW91dC8xMDAwOwogICAgIHN0b3JlLnR2X3VzZWMgPSAoaXRpbWVvdXQlMTAwMCkqMTAwMDsKQEAgLTQ1MywxMiArNDU0LDEyIEBACiAgICAgICAgc2Vjb25kIGlzIGxlZnQsIG90aGVyd2lzZSBqdXN0IHVzZSAxMDAwbXMgdG8gbWFrZSBzdXJlIHRoZSBwcm9ncmVzcwogICAgICAgIGNhbGxiYWNrIGdldHMgY2FsbGVkIGZyZXF1ZW50IGVub3VnaCAqLwogICAgIGlmKCF0dnAtPnR2X3NlYykKLSAgICAgIHRpbWVvdXRfbXMgPSAoaW50KSh0dnAtPnR2X3VzZWMvMTAwMCk7CisgICAgICB0aW1lb3V0X21zID0gKHRpbWVkaWZmX3QpKHR2cC0+dHZfdXNlYy8xMDAwKTsKICAgICBlbHNlCiAgICAgICB0aW1lb3V0X21zID0gMTAwMDsKIAogICAgIHdhaXRwZXJmb3JtKGNvbm4sIHRpbWVvdXRfbXMpOwotICAgIHJlc3VsdCA9IEN1cmxfcmVzb2x2ZXJfaXNfcmVzb2x2ZWQoY29ubiwgZW50cnk/JnRlbXBfZW50cnk6TlVMTCk7CisgICAgcmVzdWx0ID0gQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZChjb25uLCBlbnRyeSk7CiAKICAgICBpZihyZXN1bHQgfHwgY29ubi0+YXN5bmMuZG9uZSkKICAgICAgIGJyZWFrOwpAQCAtNDczLDcgKzQ3NCw3IEBACiAgICAgICBlbHNlIGlmKHRpbWVkaWZmID4gdGltZW91dCkKICAgICAgICAgdGltZW91dCA9IC0xOwogICAgICAgZWxzZQotICAgICAgICB0aW1lb3V0IC09IChsb25nKXRpbWVkaWZmOworICAgICAgICB0aW1lb3V0IC09IHRpbWVkaWZmOwogICAgICAgbm93ID0gbm93MjsgLyogZm9yIG5leHQgbG9vcCAqLwogICAgIH0KICAgICBpZih0aW1lb3V0IDwgMCkKQEAgLTQ5OCw5ICs0OTksOSBAQAogCiAvKiBDb25uZWN0cyByZXN1bHRzIHRvIHRoZSBsaXN0ICovCiBzdGF0aWMgdm9pZCBjb21wb3VuZF9yZXN1bHRzKHN0cnVjdCBSZXNvbHZlclJlc3VsdHMgKnJlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqYWkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSkKIHsKLSAgQ3VybF9hZGRyaW5mbyAqYWlfdGFpbDsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpX3RhaWw7CiAgIGlmKCFhaSkKICAgICByZXR1cm47CiAgIGFpX3RhaWwgPSBhaTsKQEAgLTU0Miw3ICs1NDMsNyBAQAogICAgIHJlcy0+bnVtX3BlbmRpbmctLTsKIAogICAgIGlmKENVUkxfQVNZTkNfU1VDQ0VTUyA9PSBzdGF0dXMpIHsKLSAgICAgIEN1cmxfYWRkcmluZm8gKmFpID0gQ3VybF9oZTJhaShob3N0ZW50LCBjb25uLT5hc3luYy5wb3J0KTsKKyAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSA9IEN1cmxfaGUyYWkoaG9zdGVudCwgY29ubi0+YXN5bmMucG9ydCk7CiAgICAgICBpZihhaSkgewogICAgICAgICBjb21wb3VuZF9yZXN1bHRzKHJlcywgYWkpOwogICAgICAgfQpAQCAtNjIxLDMzICs2MjIsMTggQEAKICAqIG1lbW9yeSB3ZSBuZWVkIHRvIGZyZWUgYWZ0ZXIgdXNlLiBUaGF0IG1lbW9yeSAqTVVTVCogYmUgZnJlZWQgd2l0aAogICogQ3VybF9mcmVlYWRkcmluZm8oKSwgbm90aGluZyBlbHNlLgogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfcmVzb2x2ZXJfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCiB7CiAgIGNoYXIgKmJ1ZnA7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3QgaW5fYWRkciBpbjsKICAgaW50IGZhbWlseSA9IFBGX0lORVQ7Ci0jaWZkZWYgRU5BQkxFX0lQVjYgLyogQ1VSTFJFU19JUFY2ICovCi0gIHN0cnVjdCBpbjZfYWRkciBpbjY7Ci0jZW5kaWYgLyogQ1VSTFJFU19JUFY2ICovCiAKICAgKndhaXRwID0gMDsgLyogZGVmYXVsdCB0byBzeW5jaHJvbm91cyByZXNwb25zZSAqLwogCi0gIC8qIEZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgYW4gSVB2NCBhZGRyZXNzIHN0cmluZyAqLwotICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmluKSA+IDApIHsKLSAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKLSAgfQotCiAjaWZkZWYgRU5BQkxFX0lQVjYgLyogQ1VSTFJFU19JUFY2ICovCi0gIC8qIE90aGVyd2lzZSwgY2hlY2sgaWYgdGhpcyBpcyBhbiBJUHY2IGFkZHJlc3Mgc3RyaW5nICovCi0gIGlmKEN1cmxfaW5ldF9wdG9uIChBRl9JTkVUNiwgaG9zdG5hbWUsICZpbjYpID4gMCkKLSAgICAvKiBUaGlzIG11c3QgYmUgYW4gSVB2NiBhZGRyZXNzIGxpdGVyYWwuICAqLwotICAgIHJldHVybiBDdXJsX2lwMmFkZHIoQUZfSU5FVDYsICZpbjYsIGhvc3RuYW1lLCBwb3J0KTsKLQogICBzd2l0Y2goY29ubi0+aXBfdmVyc2lvbikgewogICBkZWZhdWx0OgogI2lmIEFSRVNfVkVSU0lPTiA+PSAweDAxMDYwMQpAQCAtNjg2LDcgKzY3Miw3IEBACiAgICAgcmVzLT5sYXN0X3N0YXR1cyA9IEFSRVNfRU5PVEZPVU5EOwogI2lmZGVmIEVOQUJMRV9JUFY2IC8qIENVUkxSRVNfSVBWNiAqLwogICAgIGlmKGZhbWlseSA9PSBQRl9VTlNQRUMpIHsKLSAgICAgIGlmKEN1cmxfaXB2NndvcmtzKCkpIHsKKyAgICAgIGlmKEN1cmxfaXB2NndvcmtzKGNvbm4pKSB7CiAgICAgICAgIHJlcy0+bnVtX3BlbmRpbmcgPSAyOwogCiAgICAgICAgIC8qIGFyZXNjaGFubmVsIGlzIGFscmVhZHkgc2V0dXAgaW4gdGhlIEN1cmxfb3BlbigpIGZ1bmN0aW9uICovCkBAIC03MzQsNyArNzIwLDExIEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogCiAjaWYgKEFSRVNfVkVSU0lPTiA+PSAweDAxMDcwNCkKKyNpZiAoQVJFU19WRVJTSU9OID49IDB4MDEwYjAwKQorICBhcmVzX3Jlc3VsdCA9IGFyZXNfc2V0X3NlcnZlcnNfcG9ydHNfY3N2KGRhdGEtPnN0YXRlLnJlc29sdmVyLCBzZXJ2ZXJzKTsKKyNlbHNlCiAgIGFyZXNfcmVzdWx0ID0gYXJlc19zZXRfc2VydmVyc19jc3YoZGF0YS0+c3RhdGUucmVzb2x2ZXIsIHNlcnZlcnMpOworI2VuZGlmCiAgIHN3aXRjaChhcmVzX3Jlc3VsdCkgewogICBjYXNlIEFSRVNfU1VDQ0VTUzoKICAgICByZXN1bHQgPSBDVVJMRV9PSzsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4tdGhyZWFkLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLXRocmVhZC5jCmluZGV4IDU1ZTA4MTEuLmE2MGY0ZjAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4tdGhyZWFkLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi10aHJlYWQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjEsNiArMjEsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogT25seSBmb3IgdGhyZWFkZWQgbmFtZSByZXNvbHZlcyBidWlsZHMKQEAgLTcwLDEwICs3MSwxMCBAQAogI2luY2x1ZGUgInN0cmVycm9yLmgiCiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgotI2luY2x1ZGUgImluZXRfcHRvbi5oIgogI2luY2x1ZGUgImluZXRfbnRvcC5oIgogI2luY2x1ZGUgImN1cmxfdGhyZWFkcy5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtMTU3LDE0ICsxNTgsMTggQEAKIAogLyogRGF0YSBmb3Igc3luY2hyb25pemF0aW9uIGJldHdlZW4gcmVzb2x2ZXIgdGhyZWFkIGFuZCBpdHMgcGFyZW50ICovCiBzdHJ1Y3QgdGhyZWFkX3N5bmNfZGF0YSB7Ci0gIGN1cmxfbXV0ZXhfdCAqIG10eDsKKyAgY3VybF9tdXRleF90ICptdHg7CiAgIGludCBkb25lOwogCiAgIGNoYXIgKmhvc3RuYW1lOyAgICAgICAgLyogaG9zdG5hbWUgdG8gcmVzb2x2ZSwgQ3VybF9hc3luYy5ob3N0bmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSAqLwogICBpbnQgcG9ydDsKKyNpZmRlZiBVU0VfU09DS0VUUEFJUgorICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47CisgIGN1cmxfc29ja2V0X3Qgc29ja19wYWlyWzJdOyAvKiBzb2NrZXQgcGFpciAqLworI2VuZGlmCiAgIGludCBzb2NrX2Vycm9yOwotICBDdXJsX2FkZHJpbmZvICpyZXM7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpyZXM7CiAjaWZkZWYgSEFWRV9HRVRBRERSSU5GTwogICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7CiAjZW5kaWYKQEAgLTE3NCw3ICsxNzksNyBAQAogc3RydWN0IHRocmVhZF9kYXRhIHsKICAgY3VybF90aHJlYWRfdCB0aHJlYWRfaG5kOwogICB1bnNpZ25lZCBpbnQgcG9sbF9pbnRlcnZhbDsKLSAgdGltZV90IGludGVydmFsX2VuZDsKKyAgdGltZWRpZmZfdCBpbnRlcnZhbF9lbmQ7CiAgIHN0cnVjdCB0aHJlYWRfc3luY19kYXRhIHRzZDsKIH07CiAKQEAgLTE4NSw3ICsxOTAsNyBAQAogCiAvKiBEZXN0cm95IHJlc29sdmVyIHRocmVhZCBzeW5jaHJvbml6YXRpb24gZGF0YSAqLwogc3RhdGljCi12b2lkIGRlc3Ryb3lfdGhyZWFkX3N5bmNfZGF0YShzdHJ1Y3QgdGhyZWFkX3N5bmNfZGF0YSAqIHRzZCkKK3ZvaWQgZGVzdHJveV90aHJlYWRfc3luY19kYXRhKHN0cnVjdCB0aHJlYWRfc3luY19kYXRhICp0c2QpCiB7CiAgIGlmKHRzZC0+bXR4KSB7CiAgICAgQ3VybF9tdXRleF9kZXN0cm95KHRzZC0+bXR4KTsKQEAgLTE5NywxMiArMjAyLDIxIEBACiAgIGlmKHRzZC0+cmVzKQogICAgIEN1cmxfZnJlZWFkZHJpbmZvKHRzZC0+cmVzKTsKIAorI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIC8qCisgICAqIGNsb3NlIG9uZSBlbmQgb2YgdGhlIHNvY2tldCBwYWlyIChtYXkgYmUgZG9uZSBpbiByZXNvbHZlciB0aHJlYWQpOworICAgKiB0aGUgb3RoZXIgZW5kIChmb3IgcmVhZGluZykgaXMgYWx3YXlzIGNsb3NlZCBpbiB0aGUgcGFyZW50IHRocmVhZC4KKyAgICovCisgIGlmKHRzZC0+c29ja19wYWlyWzFdICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgIHNjbG9zZSh0c2QtPnNvY2tfcGFpclsxXSk7CisgIH0KKyNlbmRpZgogICBtZW1zZXQodHNkLCAwLCBzaXplb2YoKnRzZCkpOwogfQogCiAvKiBJbml0aWFsaXplIHJlc29sdmVyIHRocmVhZCBzeW5jaHJvbml6YXRpb24gZGF0YSAqLwogc3RhdGljCi1pbnQgaW5pdF90aHJlYWRfc3luY19kYXRhKHN0cnVjdCB0aHJlYWRfZGF0YSAqIHRkLAoraW50IGluaXRfdGhyZWFkX3N5bmNfZGF0YShzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMpCkBAIC0yMzAsNiArMjQ0LDE0IEBACiAKICAgQ3VybF9tdXRleF9pbml0KHRzZC0+bXR4KTsKIAorI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIC8qIGNyZWF0ZSBzb2NrZXQgcGFpciwgYXZvaWQgQUZfTE9DQUwgc2luY2UgaXQgZG9lc24ndCBidWlsZCBvbiBTb2xhcmlzICovCisgIGlmKEN1cmxfc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgJnRzZC0+c29ja19wYWlyWzBdKSA8IDApIHsKKyAgICB0c2QtPnNvY2tfcGFpclswXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICB0c2QtPnNvY2tfcGFpclsxXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICBnb3RvIGVycl9leGl0OworICB9CisjZW5kaWYKICAgdHNkLT5zb2NrX2Vycm9yID0gQ1VSTF9BU1lOQ19TVUNDRVNTOwogCiAgIC8qIENvcHlpbmcgaG9zdG5hbWUgc3RyaW5nIGJlY2F1c2Ugb3JpZ2luYWwgY2FuIGJlIGRlc3Ryb3llZCBieSBwYXJlbnQKQEAgLTI3Niw2ICsyOTgsOSBAQAogICBzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRkID0gdHNkLT50ZDsKICAgY2hhciBzZXJ2aWNlWzEyXTsKICAgaW50IHJjOworI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIGNoYXIgYnVmWzFdOworI2VuZGlmCiAKICAgbXNucHJpbnRmKHNlcnZpY2UsIHNpemVvZihzZXJ2aWNlKSwgIiVkIiwgdHNkLT5wb3J0KTsKIApAQCAtMjk4LDYgKzMyMywxNiBAQAogICAgIGZyZWUodGQpOwogICB9CiAgIGVsc2UgeworI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgICAgaWYodHNkLT5zb2NrX3BhaXJbMV0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAvKiBETlMgaGFzIGJlZW4gcmVzb2x2ZWQsIHNpZ25hbCBjbGllbnQgdGFzayAqLworICAgICAgYnVmWzBdID0gMTsKKyAgICAgIGlmKHN3cml0ZSh0c2QtPnNvY2tfcGFpclsxXSwgIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCkgeworICAgICAgICAvKiB1cGRhdGUgc29ja19lcnJvIHRvIGVycm5vICovCisgICAgICAgIHRzZC0+c29ja19lcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYKICAgICB0c2QtPmRvbmUgPSAxOwogICAgIEN1cmxfbXV0ZXhfcmVsZWFzZSh0c2QtPm10eCk7CiAgIH0KQEAgLTM0OCw2ICszODMsMTAgQEAKICAgaWYoYXN5bmMtPm9zX3NwZWNpZmljKSB7CiAgICAgc3RydWN0IHRocmVhZF9kYXRhICp0ZCA9IChzdHJ1Y3QgdGhyZWFkX2RhdGEqKSBhc3luYy0+b3Nfc3BlY2lmaWM7CiAgICAgaW50IGRvbmU7CisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgICBjdXJsX3NvY2tldF90IHNvY2tfcmQgPSB0ZC0+dHNkLnNvY2tfcGFpclswXTsKKyAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSB0ZC0+dHNkLmNvbm47CisjZW5kaWYKIAogICAgIC8qCiAgICAgICogaWYgdGhlIHRocmVhZCBpcyBzdGlsbCBibG9ja2luZyBpbiB0aGUgcmVzb2x2ZSBzeXNjYWxsLCBkZXRhY2ggaXQgYW5kCkBAIC0zNjksNiArNDA4LDE1IEBACiAKICAgICAgIGZyZWUoYXN5bmMtPm9zX3NwZWNpZmljKTsKICAgICB9CisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgICAvKgorICAgICAqIGVuc3VyZSBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiBmaXJlcyBDVVJMX1BPTExfUkVNT1ZFCisgICAgICogYmVmb3JlIHRoZSBGRCBpcyBpbnZhbGlkYXRlZCB0byBhdm9pZCBFQkFERiBvbiBFUE9MTF9DVExfREVMCisgICAgICovCisgICAgaWYoY29ubikKKyAgICAgIEN1cmxfbXVsdGlfY2xvc2VkKGNvbm4tPmRhdGEsIHNvY2tfcmQpOworICAgIHNjbG9zZShzb2NrX3JkKTsKKyNlbmRpZgogICB9CiAgIGFzeW5jLT5vc19zcGVjaWZpYyA9IE5VTEw7CiAKQEAgLTQ0NiwxMSArNDk0LDE0IEBACiAgIGNvbnN0IGNoYXIgKmhvc3Rfb3JfcHJveHk7CiAgIENVUkxjb2RlIHJlc3VsdDsKIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgaWYoY29ubi0+Yml0cy5odHRwcHJveHkpIHsKICAgICBob3N0X29yX3Byb3h5ID0gInByb3h5IjsKICAgICByZXN1bHQgPSBDVVJMRV9DT1VMRE5UX1JFU09MVkVfUFJPWFk7CiAgIH0KLSAgZWxzZSB7CisgIGVsc2UKKyNlbmRpZgorICB7CiAgICAgaG9zdF9vcl9wcm94eSA9ICJob3N0IjsKICAgICByZXN1bHQgPSBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVDsKICAgfQpAQCAtNDYxLDYgKzUxMiw5IEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiAnZW50cnknIG1heSBiZSBOVUxMIGFuZCB0aGVuIG5vIGRhdGEgaXMgcmV0dXJuZWQKKyAqLwogc3RhdGljIENVUkxjb2RlIHRocmVhZF93YWl0X3Jlc29sdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlcG9ydCkKQEAgLTU0NSw2ICs1OTksNyBAQAogICBzdHJ1Y3QgdGhyZWFkX2RhdGEgICAqdGQgPSAoc3RydWN0IHRocmVhZF9kYXRhKikgY29ubi0+YXN5bmMub3Nfc3BlY2lmaWM7CiAgIGludCBkb25lID0gMDsKIAorICBERUJVR0FTU0VSVChlbnRyeSk7CiAgICplbnRyeSA9IE5VTEw7CiAKICAgaWYoIXRkKSB7CkBAIC01NjksNiArNjI0LDcgQEAKICAgfQogICBlbHNlIHsKICAgICAvKiBwb2xsIGZvciBuYW1lIGxvb2t1cCBkb25lIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiB1cCB0byAyNTBtcyAqLworICAgIC8qIHNob3VsZCBiZSBmaW5lIGV2ZW4gaWYgdGhpcyBjb252ZXJ0cyB0byAzMiBiaXQgKi8KICAgICB0aW1lZGlmZl90IGVsYXBzZWQgPSBDdXJsX3RpbWVkaWZmKEN1cmxfbm93KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy50X3N0YXJ0c2luZ2xlKTsKICAgICBpZihlbGFwc2VkIDwgMCkKQEAgLTU5Miw0NyArNjQ4LDYxIEBACiB9CiAKIGludCBDdXJsX3Jlc29sdmVyX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgdGltZV90IG1pbGxpOworICBpbnQgcmV0X3ZhbCA9IDA7CisgIHRpbWVkaWZmX3QgbWlsbGk7CiAgIHRpbWVkaWZmX3QgbXM7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgcmVzZGF0YSAqcmVzbHYgPSAoc3RydWN0IHJlc2RhdGEgKilkYXRhLT5zdGF0ZS5yZXNvbHZlcjsKKyNpZmRlZiBVU0VfU09DS0VUUEFJUgorICBzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRkID0gKHN0cnVjdCB0aHJlYWRfZGF0YSopY29ubi0+YXN5bmMub3Nfc3BlY2lmaWM7CisjZWxzZQogICAodm9pZClzb2NrczsKLSAgKHZvaWQpbnVtc29ja3M7Ci0gIG1zID0gQ3VybF90aW1lZGlmZihDdXJsX25vdygpLCByZXNsdi0+c3RhcnQpOwotICBpZihtcyA8IDMpCi0gICAgbWlsbGkgPSAwOwotICBlbHNlIGlmKG1zIDw9IDUwKQotICAgIG1pbGxpID0gbXMvMzsKLSAgZWxzZSBpZihtcyA8PSAyNTApCi0gICAgbWlsbGkgPSA1MDsKLSAgZWxzZQotICAgIG1pbGxpID0gMjAwOwotICBDdXJsX2V4cGlyZShkYXRhLCBtaWxsaSwgRVhQSVJFX0FTWU5DX05BTUUpOwotICByZXR1cm4gMDsKKyNlbmRpZgorCisjaWZkZWYgVVNFX1NPQ0tFVFBBSVIKKyAgaWYodGQpIHsKKyAgICAvKiByZXR1cm4gcmVhZCBmZCB0byBjbGllbnQgZm9yIHBvbGxpbmcgdGhlIEROUyByZXNvbHV0aW9uIHN0YXR1cyAqLworICAgIHNvY2tzWzBdID0gdGQtPnRzZC5zb2NrX3BhaXJbMF07CisgICAgREVCVUdBU1NFUlQodGQtPnRzZC5jb25uID09IGNvbm4gfHwgIXRkLT50c2QuY29ubik7CisgICAgdGQtPnRzZC5jb25uID0gY29ubjsKKyAgICByZXRfdmFsID0gR0VUU09DS19SRUFEU09DSygwKTsKKyAgfQorICBlbHNlIHsKKyNlbmRpZgorICAgIG1zID0gQ3VybF90aW1lZGlmZihDdXJsX25vdygpLCByZXNsdi0+c3RhcnQpOworICAgIGlmKG1zIDwgMykKKyAgICAgIG1pbGxpID0gMDsKKyAgICBlbHNlIGlmKG1zIDw9IDUwKQorICAgICAgbWlsbGkgPSBtcy8zOworICAgIGVsc2UgaWYobXMgPD0gMjUwKQorICAgICAgbWlsbGkgPSA1MDsKKyAgICBlbHNlCisgICAgICBtaWxsaSA9IDIwMDsKKyAgICBDdXJsX2V4cGlyZShkYXRhLCBtaWxsaSwgRVhQSVJFX0FTWU5DX05BTUUpOworI2lmZGVmIFVTRV9TT0NLRVRQQUlSCisgIH0KKyNlbmRpZgorCisKKyAgcmV0dXJuIHJldF92YWw7CiB9CiAKICNpZm5kZWYgSEFWRV9HRVRBRERSSU5GTwogLyoKICAqIEN1cmxfZ2V0YWRkcmluZm8oKSAtIGZvciBwbGF0Zm9ybXMgd2l0aG91dCBnZXRhZGRyaW5mbwogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfcmVzb2x2ZXJfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCiB7Ci0gIHN0cnVjdCBpbl9hZGRyIGluOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHJlc2RhdGEgKnJlc2x2ID0gKHN0cnVjdCByZXNkYXRhICopZGF0YS0+c3RhdGUucmVzb2x2ZXI7CiAKICAgKndhaXRwID0gMDsgLyogZGVmYXVsdCB0byBzeW5jaHJvbm91cyByZXNwb25zZSAqLwogCi0gIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmaW4pID4gMCkKLSAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKLQogICByZXNsdi0+c3RhcnQgPSBDdXJsX25vdygpOwogCiAgIC8qIGZpcmUgdXAgYSBuZXcgcmVzb2x2ZXIgdGhyZWFkISAqLwpAQCAtNjUxLDM4ICs3MjEsMTggQEAKIC8qCiAgKiBDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKCkgLSBmb3IgZ2V0YWRkcmluZm8KICAqLwotQ3VybF9hZGRyaW5mbyAqQ3VybF9yZXNvbHZlcl9nZXRhZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQogewogICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7Ci0gIGNoYXIgc2J1ZlsxMl07CiAgIGludCBwZiA9IFBGX0lORVQ7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgcmVzZGF0YSAqcmVzbHYgPSAoc3RydWN0IHJlc2RhdGEgKilkYXRhLT5zdGF0ZS5yZXNvbHZlcjsKIAogICAqd2FpdHAgPSAwOyAvKiBkZWZhdWx0IHRvIHN5bmNocm9ub3VzIHJlc3BvbnNlICovCiAKLSNpZm5kZWYgVVNFX1JFU09MVkVfT05fSVBTCi0gIHsKLSAgICBzdHJ1Y3QgaW5fYWRkciBpbjsKLSAgICAvKiBGaXJzdCBjaGVjayBpZiB0aGlzIGlzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcgKi8KLSAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmluKSA+IDApCi0gICAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgICByZXR1cm4gQ3VybF9pcDJhZGRyKEFGX0lORVQsICZpbiwgaG9zdG5hbWUsIHBvcnQpOwotICB9Ci0jaWZkZWYgQ1VSTFJFU19JUFY2Ci0gIHsKLSAgICBzdHJ1Y3QgaW42X2FkZHIgaW42OwotICAgIC8qIGNoZWNrIGlmIHRoaXMgaXMgYW4gSVB2NiBhZGRyZXNzIHN0cmluZyAqLwotICAgIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgJmluNikgPiAwKQotICAgICAgLyogVGhpcyBpcyBhbiBJUHY2IGFkZHJlc3MgbGl0ZXJhbCAqLwotICAgICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVUNiwgJmluNiwgaG9zdG5hbWUsIHBvcnQpOwotICB9Ci0jZW5kaWYgLyogQ1VSTFJFU19JUFY2ICovCi0jZW5kaWYgLyogIVVTRV9SRVNPTFZFX09OX0lQUyAqLwotCiAjaWZkZWYgQ1VSTFJFU19JUFY2CiAgIC8qCiAgICAqIENoZWNrIGlmIGEgbGltaXRlZCBuYW1lIHJlc29sdmUgaGFzIGJlZW4gcmVxdWVzdGVkLgpAQCAtNjk5LDE2ICs3NDksMTUgQEAKICAgICBicmVhazsKICAgfQogCi0gIGlmKChwZiAhPSBQRl9JTkVUKSAmJiAhQ3VybF9pcHY2d29ya3MoKSkKKyAgaWYoKHBmICE9IFBGX0lORVQpICYmICFDdXJsX2lwdjZ3b3Jrcyhjb25uKSkKICAgICAvKiBUaGUgc3RhY2sgc2VlbXMgdG8gYmUgYSBub24tSVB2NiBvbmUgKi8KICAgICBwZiA9IFBGX0lORVQ7CiAjZW5kaWYgLyogQ1VSTFJFU19JUFY2ICovCiAKICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAgIGhpbnRzLmFpX2ZhbWlseSA9IHBmOwotICBoaW50cy5haV9zb2NrdHlwZSA9IGNvbm4tPnNvY2t0eXBlOwotCi0gIG1zbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIlZCIsIHBvcnQpOworICBoaW50cy5haV9zb2NrdHlwZSA9IChjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9UQ1ApPworICAgIFNPQ0tfU1RSRUFNIDogU09DS19ER1JBTTsKIAogICByZXNsdi0+c3RhcnQgPSBDdXJsX25vdygpOwogICAvKiBmaXJlIHVwIGEgbmV3IHJlc29sdmVyIHRocmVhZCEgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4uaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2FzeW4uaAppbmRleCBjY2Q0YjFmLi5iZTI3OTZjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9hc3luLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvYXN5bi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMTQsOCArMTE0LDcgQEAKICAqIHJldHVybiBiaXRtYXNrIGluZGljYXRpbmcgd2hhdCBmaWxlIGRlc2NyaXB0b3JzIChyZWZlcnJpbmcgdG8gYXJyYXkgaW5kZXhlcwogICogaW4gdGhlICdzb2NrJyBhcnJheSkgdG8gd2FpdCBmb3IsIHJlYWQvd3JpdGUuCiAgKi8KLWludCBDdXJsX3Jlc29sdmVyX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworaW50IEN1cmxfcmVzb2x2ZXJfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2spOwogCiAvKgogICogQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZCgpCkBAIC0xNTQsMTAgKzE1MywxMCBAQAogICogRWFjaCByZXNvbHZlciBiYWNrZW5kIG11c3Qgb2YgY291cnNlIG1ha2Ugc3VyZSB0byByZXR1cm4gZGF0YSBpbiB0aGUKICAqIGNvcnJlY3QgZm9ybWF0IHRvIGNvbXBseSB3aXRoIHRoaXMuCiAgKi8KLUN1cmxfYWRkcmluZm8gKkN1cmxfcmVzb2x2ZXJfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfcmVzb2x2ZXJfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOwogCiAjaWZuZGVmIENVUkxSRVNfQVNZTkNICiAvKiBjb252ZXJ0IHRoZXNlIGZ1bmN0aW9ucyBpZiBhbiBhc3luY2ggcmVzb2x2ZXIgaXNuJ3QgdXNlZCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvYmFzZTY0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9iYXNlNjQuYwppbmRleCBmYjA4MWE2Li42NDNjZWY2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9iYXNlNjQuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9iYXNlNjQuYwpAQCAtMjQsOCArMjQsOCBAQAogCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCi0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFBfQVVUSCkgfHwgZGVmaW5lZChVU0VfTElCU1NIMikgfHwgXAotICBkZWZpbmVkKFVTRV9MSUJTU0gpIHx8ICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKSB8fCBcCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFBfQVVUSCkgfHwgZGVmaW5lZChVU0VfU1NIKSB8fCBcCisgICFkZWZpbmVkKENVUkxfRElTQUJMRV9MREFQKSB8fCBcCiAgICFkZWZpbmVkKENVUkxfRElTQUJMRV9ET0gpIHx8IGRlZmluZWQoVVNFX1NTTCkKIAogI2luY2x1ZGUgInVybGRhdGEuaCIgLyogZm9yIHRoZSBDdXJsX2Vhc3kgZGVmaW5pdGlvbiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29ubmNhY2hlLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuYwppbmRleCA1MzUwOTE5Li5kMjFhMDBjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKICAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIExpbnVzIE5pZWxzZW4gRmVsdHppbmcsIDxsaW51c0BoYXh4LnNlPgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQwLDI2ICs0MCw3IEBACiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCi0jaWZkZWYgQ1VSTERFQlVHCi0vKiB0aGUgZGVidWcgdmVyc2lvbnMgb2YgdGhlc2UgbWFjcm9zIG1ha2UgZXh0cmEgY2VydGFpbiB0aGF0IHRoZSBsb2NrIGlzCi0gICBuZXZlciBkb3VibHkgbG9ja2VkIG9yIHVubG9ja2VkICovCi0jZGVmaW5lIENPTk5fTE9DSyh4KSBpZigoeCktPnNoYXJlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ3VybF9zaGFyZV9sb2NrKCh4KSwgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVCwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOyBcCi0gICAgREVCVUdBU1NFUlQoISh4KS0+c3RhdGUuY29ubmNhY2hlX2xvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBDT05OX1VOTE9DSyh4KSBpZigoeCktPnNoYXJlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERFQlVHQVNTRVJUKCh4KS0+c3RhdGUuY29ubmNhY2hlX2xvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICh4KS0+c3RhdGUuY29ubmNhY2hlX2xvY2sgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEN1cmxfc2hhcmVfdW5sb2NrKCh4KSwgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVCk7ICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0jZWxzZQotI2RlZmluZSBDT05OX0xPQ0soeCkgaWYoKHgpLT5zaGFyZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEN1cmxfc2hhcmVfbG9jaygoeCksIENVUkxfTE9DS19EQVRBX0NPTk5FQ1QsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKQotI2RlZmluZSBDT05OX1VOTE9DSyh4KSBpZigoeCktPnNoYXJlKSAgICAgICAgICAgICAgICAgICBcCi0gICAgQ3VybF9zaGFyZV91bmxvY2soKHgpLCBDVVJMX0xPQ0tfREFUQV9DT05ORUNUKQotI2VuZGlmCisjZGVmaW5lIEhBU0hLRVlfU0laRSAxMjgKIAogc3RhdGljIHZvaWQgY29ubl9sbGlzdF9kdG9yKHZvaWQgKnVzZXIsIHZvaWQgKmVsZW1lbnQpCiB7CkBAIC02OCw1OCArNDksNTcgQEAKICAgY29ubi0+YnVuZGxlID0gTlVMTDsKIH0KIAotc3RhdGljIENVUkxjb2RlIGJ1bmRsZV9jcmVhdGUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0YnVuZGxlICoqY2JfcHRyKQorc3RhdGljIENVUkxjb2RlIGJ1bmRsZV9jcmVhdGUoc3RydWN0IGNvbm5lY3RidW5kbGUgKipidW5kbGVwKQogewotICAodm9pZClkYXRhOwotICBERUJVR0FTU0VSVCgqY2JfcHRyID09IE5VTEwpOwotICAqY2JfcHRyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29ubmVjdGJ1bmRsZSkpOwotICBpZighKmNiX3B0cikKKyAgREVCVUdBU1NFUlQoKmJ1bmRsZXAgPT0gTlVMTCk7CisgICpidW5kbGVwID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29ubmVjdGJ1bmRsZSkpOworICBpZighKmJ1bmRsZXApCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKLSAgKCpjYl9wdHIpLT5udW1fY29ubmVjdGlvbnMgPSAwOwotICAoKmNiX3B0ciktPm11bHRpdXNlID0gQlVORExFX1VOS05PV047CisgICgqYnVuZGxlcCktPm51bV9jb25uZWN0aW9ucyA9IDA7CisgICgqYnVuZGxlcCktPm11bHRpdXNlID0gQlVORExFX1VOS05PV047CiAKLSAgQ3VybF9sbGlzdF9pbml0KCYoKmNiX3B0ciktPmNvbm5fbGlzdCwgKGN1cmxfbGxpc3RfZHRvcikgY29ubl9sbGlzdF9kdG9yKTsKKyAgQ3VybF9sbGlzdF9pbml0KCYoKmJ1bmRsZXApLT5jb25uX2xpc3QsIChjdXJsX2xsaXN0X2R0b3IpIGNvbm5fbGxpc3RfZHRvcik7CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotc3RhdGljIHZvaWQgYnVuZGxlX2Rlc3Ryb3koc3RydWN0IGNvbm5lY3RidW5kbGUgKmNiX3B0cikKK3N0YXRpYyB2b2lkIGJ1bmRsZV9kZXN0cm95KHN0cnVjdCBjb25uZWN0YnVuZGxlICpidW5kbGUpCiB7Ci0gIGlmKCFjYl9wdHIpCisgIGlmKCFidW5kbGUpCiAgICAgcmV0dXJuOwogCi0gIEN1cmxfbGxpc3RfZGVzdHJveSgmY2JfcHRyLT5jb25uX2xpc3QsIE5VTEwpOworICBDdXJsX2xsaXN0X2Rlc3Ryb3koJmJ1bmRsZS0+Y29ubl9saXN0LCBOVUxMKTsKIAotICBmcmVlKGNiX3B0cik7CisgIGZyZWUoYnVuZGxlKTsKIH0KIAogLyogQWRkIGEgY29ubmVjdGlvbiB0byBhIGJ1bmRsZSAqLwotc3RhdGljIHZvaWQgYnVuZGxlX2FkZF9jb25uKHN0cnVjdCBjb25uZWN0YnVuZGxlICpjYl9wdHIsCitzdGF0aWMgdm9pZCBidW5kbGVfYWRkX2Nvbm4oc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIEN1cmxfbGxpc3RfaW5zZXJ0X25leHQoJmNiX3B0ci0+Y29ubl9saXN0LCBjYl9wdHItPmNvbm5fbGlzdC50YWlsLCBjb25uLAorICBDdXJsX2xsaXN0X2luc2VydF9uZXh0KCZidW5kbGUtPmNvbm5fbGlzdCwgYnVuZGxlLT5jb25uX2xpc3QudGFpbCwgY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+YnVuZGxlX25vZGUpOwotICBjb25uLT5idW5kbGUgPSBjYl9wdHI7Ci0gIGNiX3B0ci0+bnVtX2Nvbm5lY3Rpb25zKys7CisgIGNvbm4tPmJ1bmRsZSA9IGJ1bmRsZTsKKyAgYnVuZGxlLT5udW1fY29ubmVjdGlvbnMrKzsKIH0KIAogLyogUmVtb3ZlIGEgY29ubmVjdGlvbiBmcm9tIGEgYnVuZGxlICovCi1zdGF0aWMgaW50IGJ1bmRsZV9yZW1vdmVfY29ubihzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqY2JfcHRyLAorc3RhdGljIGludCBidW5kbGVfcmVtb3ZlX2Nvbm4oc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqY3VycjsKIAotICBjdXJyID0gY2JfcHRyLT5jb25uX2xpc3QuaGVhZDsKKyAgY3VyciA9IGJ1bmRsZS0+Y29ubl9saXN0LmhlYWQ7CiAgIHdoaWxlKGN1cnIpIHsKICAgICBpZihjdXJyLT5wdHIgPT0gY29ubikgewotICAgICAgQ3VybF9sbGlzdF9yZW1vdmUoJmNiX3B0ci0+Y29ubl9saXN0LCBjdXJyLCBOVUxMKTsKLSAgICAgIGNiX3B0ci0+bnVtX2Nvbm5lY3Rpb25zLS07CisgICAgICBDdXJsX2xsaXN0X3JlbW92ZSgmYnVuZGxlLT5jb25uX2xpc3QsIGN1cnIsIE5VTEwpOworICAgICAgYnVuZGxlLT5udW1fY29ubmVjdGlvbnMtLTsKICAgICAgIGNvbm4tPmJ1bmRsZSA9IE5VTEw7CiAgICAgICByZXR1cm4gMTsgLyogd2UgcmVtb3ZlZCBhIGhhbmRsZSAqLwogICAgIH0KICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAgfQorICBERUJVR0FTU0VSVCgwKTsKICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE0MSwxMCArMTIxLDggQEAKIAogICByYyA9IEN1cmxfaGFzaF9pbml0KCZjb25uYy0+aGFzaCwgc2l6ZSwgQ3VybF9oYXNoX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3N0cl9rZXlfY29tcGFyZSwgZnJlZV9idW5kbGVfaGFzaF9lbnRyeSk7Ci0gIGlmKHJjKSB7Ci0gICAgQ3VybF9jbG9zZShjb25uYy0+Y2xvc3VyZV9oYW5kbGUpOwotICAgIGNvbm5jLT5jbG9zdXJlX2hhbmRsZSA9IE5VTEw7Ci0gIH0KKyAgaWYocmMpCisgICAgQ3VybF9jbG9zZSgmY29ubmMtPmNsb3N1cmVfaGFuZGxlKTsKICAgZWxzZQogICAgIGNvbm5jLT5jbG9zdXJlX2hhbmRsZS0+c3RhdGUuY29ubl9jYWNoZSA9IGNvbm5jOwogCkBAIC0xNTksMjggKzEzNywzMCBAQAogCiAvKiBjcmVhdGVzIGEga2V5IHRvIGZpbmQgYSBidW5kbGUgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwogc3RhdGljIHZvaWQgaGFzaGtleShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikgLyogc29tZXRoaW5nIGxpa2UgMTI4IGlzIGZpbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgIC8qIHNvbWV0aGluZyBsaWtlIDEyOCBpcyBmaW5lICovCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipob3N0cCkKIHsKICAgY29uc3QgY2hhciAqaG9zdG5hbWU7CisgIGxvbmcgcG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0OwogCi0gIGlmKGNvbm4tPmJpdHMuc29ja3Nwcm94eSkKLSAgICBob3N0bmFtZSA9IGNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QubmFtZTsKLSAgZWxzZSBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmICFjb25uLT5iaXRzLnR1bm5lbF9wcm94eSkgewogICAgIGhvc3RuYW1lID0gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWU7Ci0gIGVsc2UgaWYoY29ubi0+Yml0cy5jb25uX3RvX2hvc3QpCi0gICAgaG9zdG5hbWUgPSBjb25uLT5jb25uX3RvX2hvc3QubmFtZTsKKyAgICBwb3J0ID0gY29ubi0+cG9ydDsKKyAgfQorICBlbHNlCisjZW5kaWYKKyAgICBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKKyAgICAgIGhvc3RuYW1lID0gY29ubi0+Y29ubl90b19ob3N0Lm5hbWU7CiAgIGVsc2UKICAgICBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKIAotICBERUJVR0FTU0VSVChsZW4gPiAzMik7CisgIGlmKGhvc3RwKQorICAgIC8qIHJlcG9ydCBiYWNrIHdoaWNoIG5hbWUgd2UgdXNlZCAqLworICAgICpob3N0cCA9IGhvc3RuYW1lOwogCiAgIC8qIHB1dCB0aGUgbnVtYmVyIGZpcnN0IHNvIHRoYXQgdGhlIGhvc3RuYW1lIGdldHMgY3V0IG9mZiBpZiB0b28gbG9uZyAqLwotICBtc25wcmludGYoYnVmLCBsZW4sICIlbGQlcyIsIGNvbm4tPnBvcnQsIGhvc3RuYW1lKTsKLX0KLQotdm9pZCBDdXJsX2Nvbm5jYWNoZV91bmxvY2soc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKLXsKLSAgQ09OTl9VTkxPQ0soZGF0YSk7CisgIG1zbnByaW50ZihidWYsIGxlbiwgIiVsZCVzIiwgcG9ydCwgaG9zdG5hbWUpOwogfQogCiAvKiBSZXR1cm5zIG51bWJlciBvZiBjb25uZWN0aW9ucyBjdXJyZW50bHkgaGVsZCBpbiB0aGUgY29ubmVjdGlvbiBjYWNoZS4KQEAgLTE4OSwyMSArMTY5LDkgQEAKIHNpemVfdCBDdXJsX2Nvbm5jYWNoZV9zaXplKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpCiB7CiAgIHNpemVfdCBudW07Ci0gIENPTk5fTE9DSyhkYXRhKTsKKyAgQ09OTkNBQ0hFX0xPQ0soZGF0YSk7CiAgIG51bSA9IGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUtPm51bV9jb25uOwotICBDT05OX1VOTE9DSyhkYXRhKTsKLSAgcmV0dXJuIG51bTsKLX0KLQotLyogUmV0dXJucyBudW1iZXIgb2YgY29ubmVjdGlvbnMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvbm5lY3Rpb25zJ3MgYnVuZGxlCi0gICBMb2Nrcy91bmxvY2tzIHRoZSBjYWNoZSBpdHNlbGYhCi0qLwotc2l6ZV90IEN1cmxfY29ubmNhY2hlX2J1bmRsZV9zaXplKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgc2l6ZV90IG51bTsKLSAgQ09OTl9MT0NLKGNvbm4tPmRhdGEpOwotICBudW0gPSBjb25uLT5idW5kbGUtPm51bV9jb25uZWN0aW9uczsKLSAgQ09OTl9VTkxPQ0soY29ubi0+ZGF0YSk7CisgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgIHJldHVybiBudW07CiB9CiAKQEAgLTIxMiwxMyArMTgwLDE0IEBACiAKICAgICoqTk9URSoqOiBXaGVuIGl0IHJldHVybnMsIGl0IGhvbGRzIHRoZSBjb25uZWN0aW9uIGNhY2hlIGxvY2shICovCiBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqQ3VybF9jb25uY2FjaGVfZmluZF9idW5kbGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipob3N0cCkKIHsKICAgc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZSA9IE5VTEw7Ci0gIENPTk5fTE9DSyhjb25uLT5kYXRhKTsKKyAgQ09OTkNBQ0hFX0xPQ0soY29ubi0+ZGF0YSk7CiAgIGlmKGNvbm5jKSB7Ci0gICAgY2hhciBrZXlbMTI4XTsKLSAgICBoYXNoa2V5KGNvbm4sIGtleSwgc2l6ZW9mKGtleSkpOworICAgIGNoYXIga2V5W0hBU0hLRVlfU0laRV07CisgICAgaGFzaGtleShjb25uLCBrZXksIHNpemVvZihrZXkpLCBob3N0cCk7CiAgICAgYnVuZGxlID0gQ3VybF9oYXNoX3BpY2soJmNvbm5jLT5oYXNoLCBrZXksIHN0cmxlbihrZXkpKTsKICAgfQogCkBAIC0yNjIsMzAgKzIzMSwyOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZTsKLSAgc3RydWN0IGNvbm5lY3RidW5kbGUgKm5ld19idW5kbGUgPSBOVUxMOworICBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqYnVuZGxlID0gTlVMTDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKICAgLyogKmZpbmRfYnVuZGxlKCkgbG9ja3MgdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KLSAgYnVuZGxlID0gQ3VybF9jb25uY2FjaGVfZmluZF9idW5kbGUoY29ubiwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSk7CisgIGJ1bmRsZSA9IEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKGNvbm4sIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUsIE5VTEwpOwogICBpZighYnVuZGxlKSB7CiAgICAgaW50IHJjOwotICAgIGNoYXIga2V5WzEyOF07CisgICAgY2hhciBrZXlbSEFTSEtFWV9TSVpFXTsKIAotICAgIHJlc3VsdCA9IGJ1bmRsZV9jcmVhdGUoZGF0YSwgJm5ld19idW5kbGUpOworICAgIHJlc3VsdCA9IGJ1bmRsZV9jcmVhdGUoJmJ1bmRsZSk7CiAgICAgaWYocmVzdWx0KSB7CiAgICAgICBnb3RvIHVubG9jazsKICAgICB9CiAKLSAgICBoYXNoa2V5KGNvbm4sIGtleSwgc2l6ZW9mKGtleSkpOwotICAgIHJjID0gY29ubmNhY2hlX2FkZF9idW5kbGUoZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwga2V5LCBuZXdfYnVuZGxlKTsKKyAgICBoYXNoa2V5KGNvbm4sIGtleSwgc2l6ZW9mKGtleSksIE5VTEwpOworICAgIHJjID0gY29ubmNhY2hlX2FkZF9idW5kbGUoZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwga2V5LCBidW5kbGUpOwogCiAgICAgaWYoIXJjKSB7Ci0gICAgICBidW5kbGVfZGVzdHJveShuZXdfYnVuZGxlKTsKKyAgICAgIGJ1bmRsZV9kZXN0cm95KGJ1bmRsZSk7CiAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgZ290byB1bmxvY2s7CiAgICAgfQotICAgIGJ1bmRsZSA9IG5ld19idW5kbGU7CiAgIH0KIAogICBidW5kbGVfYWRkX2Nvbm4oYnVuZGxlLCBjb25uKTsKQEAgLTI5NywxNSArMjY0LDE3IEBACiAgICAgICAgICAgICAgICBjb25uLT5jb25uZWN0aW9uX2lkLCBjb25uYy0+bnVtX2Nvbm4pKTsKIAogICB1bmxvY2s6Ci0gIENPTk5fVU5MT0NLKGRhdGEpOworICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8qCi0gKiBSZW1vdmVzIHRoZSBjb25uZWN0ZGF0YSBvYmplY3QgZnJvbSB0aGUgY29ubmVjdGlvbiBjYWNoZSAqYW5kKiBjbGVhcnMgdGhlCi0gKiAtPmRhdGEgcG9pbnRlciBhc3NvY2lhdGlvbi4gUGFzcyBUUlVFL0ZBTFNFIGluIHRoZSAnbG9jaycgYXJndW1lbnQKLSAqIGRlcGVuZGluZyBvbiBpZiB0aGUgcGFyZW50IGZ1bmN0aW9uIGFscmVhZHkgaG9sZHMgdGhlIGxvY2sgb3Igbm90LgorICogUmVtb3ZlcyB0aGUgY29ubmVjdGRhdGEgb2JqZWN0IGZyb20gdGhlIGNvbm5lY3Rpb24gY2FjaGUsIGJ1dCBkb2VzICpub3QqCisgKiBjbGVhciB0aGUgY29ubi0+ZGF0YSBhc3NvY2lhdGlvbi4gVGhlIHRyYW5zZmVyIHN0aWxsIG93bnMgdGhpcyBjb25uZWN0aW9uLgorICoKKyAqIFBhc3MgVFJVRS9GQUxTRSBpbiB0aGUgJ2xvY2snIGFyZ3VtZW50IGRlcGVuZGluZyBvbiBpZiB0aGUgcGFyZW50IGZ1bmN0aW9uCisgKiBhbHJlYWR5IGhvbGRzIHRoZSBsb2NrIG9yIG5vdC4KICAqLwogdm9pZCBDdXJsX2Nvbm5jYWNoZV9yZW1vdmVfY29ubihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgbG9jaykKQEAgLTMxNyw3ICsyODYsNyBAQAogICAgICBkdWUgdG8gYSBmYWlsZWQgY29ubmVjdGlvbiBhdHRlbXB0LCBiZWZvcmUgYmVpbmcgYWRkZWQgdG8gYSBidW5kbGUgKi8KICAgaWYoYnVuZGxlKSB7CiAgICAgaWYobG9jaykgewotICAgICAgQ09OTl9MT0NLKGRhdGEpOworICAgICAgQ09OTkNBQ0hFX0xPQ0soZGF0YSk7CiAgICAgfQogICAgIGJ1bmRsZV9yZW1vdmVfY29ubihidW5kbGUsIGNvbm4pOwogICAgIGlmKGJ1bmRsZS0+bnVtX2Nvbm5lY3Rpb25zID09IDApCkBAIC0zMjgsOSArMjk3LDggQEAKICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiVGhlIGNhY2hlIG5vdyBjb250YWlucyAlenUgbWVtYmVyc1xuIiwKICAgICAgICAgICAgICAgICAgICBjb25uYy0+bnVtX2Nvbm4pKTsKICAgICB9Ci0gICAgY29ubi0+ZGF0YSA9IE5VTEw7IC8qIGNsZWFyIHRoZSBhc3NvY2lhdGlvbiAqLwogICAgIGlmKGxvY2spIHsKLSAgICAgIENPTk5fVU5MT0NLKGRhdGEpOworICAgICAgQ09OTkNBQ0hFX1VOTE9DSyhkYXRhKTsKICAgICB9CiAgIH0KIH0KQEAgLTM1OSw3ICszMjcsNyBAQAogICBpZighY29ubmMpCiAgICAgcmV0dXJuIEZBTFNFOwogCi0gIENPTk5fTE9DSyhkYXRhKTsKKyAgQ09OTkNBQ0hFX0xPQ0soZGF0YSk7CiAgIEN1cmxfaGFzaF9zdGFydF9pdGVyYXRlKCZjb25uYy0+aGFzaCwgJml0ZXIpOwogCiAgIGhlID0gQ3VybF9oYXNoX25leHRfZWxlbWVudCgmaXRlcik7CkBAIC0zNzcsMTIgKzM0NSwxMiBAQAogICAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAKICAgICAgIGlmKDEgPT0gZnVuYyhjb25uLCBwYXJhbSkpIHsKLSAgICAgICAgQ09OTl9VTkxPQ0soZGF0YSk7CisgICAgICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgfQogICAgIH0KICAgfQotICBDT05OX1VOTE9DSyhkYXRhKTsKKyAgQ09OTkNBQ0hFX1VOTE9DSyhkYXRhKTsKICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC00MjMsMTcgKzM5MSwxNSBAQAogICoKICAqIFJldHVybiBUUlVFIGlmIHN0b3JlZCwgRkFMU0UgaWYgY2xvc2VkLgogICovCi1ib29sIEN1cmxfY29ubmNhY2hlX3JldHVybl9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK2Jvb2wgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLQogICAvKiBkYXRhLT5tdWx0aS0+bWF4Y29ubmVjdHMgY2FuIGJlIG5lZ2F0aXZlLCBkZWFsIHdpdGggaXQuICovCiAgIHNpemVfdCBtYXhjb25uZWN0cyA9CiAgICAgKGRhdGEtPm11bHRpLT5tYXhjb25uZWN0cyA8IDApID8gZGF0YS0+bXVsdGktPm51bV9lYXN5ICogNDoKICAgICBkYXRhLT5tdWx0aS0+bWF4Y29ubmVjdHM7CiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubl9jYW5kaWRhdGUgPSBOVUxMOwogCi0gIGNvbm4tPmRhdGEgPSBOVUxMOyAvKiBubyBvd25lciBhbnltb3JlICovCiAgIGNvbm4tPmxhc3R1c2VkID0gQ3VybF9ub3coKTsgLyogaXQgd2FzIHVzZWQgdXAgdW50aWwgbm93ICovCiAgIGlmKG1heGNvbm5lY3RzID4gMCAmJgogICAgICBDdXJsX2Nvbm5jYWNoZV9zaXplKGRhdGEpID4gbWF4Y29ubmVjdHMpIHsKQEAgLTUyMyw3ICs0ODksNyBAQAogCiAgIG5vdyA9IEN1cmxfbm93KCk7CiAKLSAgQ09OTl9MT0NLKGRhdGEpOworICBDT05OQ0FDSEVfTE9DSyhkYXRhKTsKICAgQ3VybF9oYXNoX3N0YXJ0X2l0ZXJhdGUoJmNvbm5jLT5oYXNoLCAmaXRlcik7CiAKICAgaGUgPSBDdXJsX2hhc2hfbmV4dF9lbGVtZW50KCZpdGVyKTsKQEAgLTUzNiw3ICs1MDIsOCBAQAogICAgIHdoaWxlKGN1cnIpIHsKICAgICAgIGNvbm4gPSBjdXJyLT5wdHI7CiAKLSAgICAgIGlmKCFDT05OX0lOVVNFKGNvbm4pICYmICFjb25uLT5kYXRhKSB7CisgICAgICBpZighQ09OTl9JTlVTRShjb25uKSAmJiAhY29ubi0+ZGF0YSAmJiAhY29ubi0+Yml0cy5jbG9zZSAmJgorICAgICAgICAgIWNvbm4tPmJpdHMuY29ubmVjdF9vbmx5KSB7CiAgICAgICAgIC8qIFNldCBoaWdoZXIgc2NvcmUgZm9yIHRoZSBhZ2UgcGFzc2VkIHNpbmNlIHRoZSBjb25uZWN0aW9uIHdhcyB1c2VkICovCiAgICAgICAgIHNjb3JlID0gQ3VybF90aW1lZGlmZihub3csIGNvbm4tPmxhc3R1c2VkKTsKIApAQCAtNTU5LDcgKzUyNiw3IEBACiAgICAgICAgICAgICAgICAgIGNvbm5jLT5udW1fY29ubikpOwogICAgIGNvbm5fY2FuZGlkYXRlLT5kYXRhID0gZGF0YTsgLyogYXNzb2NpYXRlISAqLwogICB9Ci0gIENPTk5fVU5MT0NLKGRhdGEpOworICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogCiAgIHJldHVybiBjb25uX2NhbmRpZGF0ZTsKIH0KQEAgLTU2Nyw2ICs1MzQsMTEgQEAKIHZvaWQgQ3VybF9jb25uY2FjaGVfY2xvc2VfYWxsX2Nvbm5lY3Rpb25zKHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47CisgIGNoYXIgYnVmZmVyW1JFQURCVUZGRVJfTUlOICsgMV07CisgIGlmKCFjb25uYy0+Y2xvc3VyZV9oYW5kbGUpCisgICAgcmV0dXJuOworICBjb25uYy0+Y2xvc3VyZV9oYW5kbGUtPnN0YXRlLmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgY29ubmMtPmNsb3N1cmVfaGFuZGxlLT5zZXQuYnVmZmVyX3NpemUgPSBSRUFEQlVGRkVSX01JTjsKIAogICBjb25uID0gY29ubmNhY2hlX2ZpbmRfZmlyc3RfY29ubmVjdGlvbihjb25uYyk7CiAgIHdoaWxlKGNvbm4pIHsKQEAgLTU3NiwxOSArNTQ4LDIxIEBACiAgICAgc2lncGlwZV9pZ25vcmUoY29ubi0+ZGF0YSwgJnBpcGVfc3QpOwogICAgIC8qIFRoaXMgd2lsbCByZW1vdmUgdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgY2FjaGUgKi8KICAgICBjb25uY2xvc2UoY29ubiwgImtpbGwgYWxsIik7CisgICAgQ3VybF9jb25uY2FjaGVfcmVtb3ZlX2Nvbm4oY29ubi0+ZGF0YSwgY29ubiwgVFJVRSk7CiAgICAgKHZvaWQpQ3VybF9kaXNjb25uZWN0KGNvbm5jLT5jbG9zdXJlX2hhbmRsZSwgY29ubiwgRkFMU0UpOwogICAgIHNpZ3BpcGVfcmVzdG9yZSgmcGlwZV9zdCk7CiAKICAgICBjb25uID0gY29ubmNhY2hlX2ZpbmRfZmlyc3RfY29ubmVjdGlvbihjb25uYyk7CiAgIH0KIAorICBjb25uYy0+Y2xvc3VyZV9oYW5kbGUtPnN0YXRlLmJ1ZmZlciA9IE5VTEw7CiAgIGlmKGNvbm5jLT5jbG9zdXJlX2hhbmRsZSkgewogICAgIFNJR1BJUEVfVkFSSUFCTEUocGlwZV9zdCk7CiAgICAgc2lncGlwZV9pZ25vcmUoY29ubmMtPmNsb3N1cmVfaGFuZGxlLCAmcGlwZV9zdCk7CiAKICAgICBDdXJsX2hvc3RjYWNoZV9jbGVhbihjb25uYy0+Y2xvc3VyZV9oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmMtPmNsb3N1cmVfaGFuZGxlLT5kbnMuaG9zdGNhY2hlKTsKLSAgICBDdXJsX2Nsb3NlKGNvbm5jLT5jbG9zdXJlX2hhbmRsZSk7CisgICAgQ3VybF9jbG9zZSgmY29ubmMtPmNsb3N1cmVfaGFuZGxlKTsKICAgICBzaWdwaXBlX3Jlc3RvcmUoJnBpcGVfc3QpOwogICB9CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uY2FjaGUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5jYWNoZS5oCmluZGV4IDM1YmU5ZTAuLjNkZGEyMWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5jYWNoZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5jYWNoZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNCwgTGludXMgTmllbHNlbiBGZWx0emluZywgPGxpbnVzQGhheHguc2U+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKQEAgLTQyLDYgKzQyLDI3IEBACiAjZGVmaW5lIEJVTkRMRV9VTktOT1dOICAgICAwICAvKiBpbml0aWFsIHZhbHVlICovCiAjZGVmaW5lIEJVTkRMRV9NVUxUSVBMRVggICAyCiAKKyNpZmRlZiBDVVJMREVCVUcKKy8qIHRoZSBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGVzZSBtYWNyb3MgbWFrZSBleHRyYSBjZXJ0YWluIHRoYXQgdGhlIGxvY2sgaXMKKyAgIG5ldmVyIGRvdWJseSBsb2NrZWQgb3IgdW5sb2NrZWQgKi8KKyNkZWZpbmUgQ09OTkNBQ0hFX0xPQ0soeCkgaWYoKHgpLT5zaGFyZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBDdXJsX3NoYXJlX2xvY2soKHgpLCBDVVJMX0xPQ0tfREFUQV9DT05ORUNULCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7IFwKKyAgICBERUJVR0FTU0VSVCghKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeCktPnN0YXRlLmNvbm5jYWNoZV9sb2NrID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZGVmaW5lIENPTk5DQUNIRV9VTkxPQ0soeCkgaWYoKHgpLT5zaGFyZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgREVCVUdBU1NFUlQoKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHgpLT5zdGF0ZS5jb25uY2FjaGVfbG9jayA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ3VybF9zaGFyZV91bmxvY2soKHgpLCBDVVJMX0xPQ0tfREFUQV9DT05ORUNUKTsgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKyNlbHNlCisjZGVmaW5lIENPTk5DQUNIRV9MT0NLKHgpIGlmKCh4KS0+c2hhcmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQ3VybF9zaGFyZV9sb2NrKCh4KSwgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVCwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpCisjZGVmaW5lIENPTk5DQUNIRV9VTkxPQ0soeCkgaWYoKHgpLT5zaGFyZSkgICAgICAgICAgICAgIFwKKyAgICBDdXJsX3NoYXJlX3VubG9jaygoeCksIENVUkxfTE9DS19EQVRBX0NPTk5FQ1QpCisjZW5kaWYKKwogc3RydWN0IGNvbm5lY3RidW5kbGUgewogICBpbnQgbXVsdGl1c2U7ICAgICAgICAgICAgICAgICAvKiBzdXBwb3J0cyBtdWx0aS11c2UgKi8KICAgc2l6ZV90IG51bV9jb25uZWN0aW9uczsgICAgICAgLyogTnVtYmVyIG9mIGNvbm5lY3Rpb25zIGluIHRoZSBidW5kbGUgKi8KQEAgLTU0LDEzICs3NSwxMyBAQAogCiAvKiByZXR1cm4gdGhlIGNvcnJlY3QgYnVuZGxlLCB0byBhIGhvc3Qgb3IgYSBwcm94eSAqLwogc3RydWN0IGNvbm5lY3RidW5kbGUgKkN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmNhY2hlICpjb25uYyk7Ci12b2lkIEN1cmxfY29ubmNhY2hlX3VubG9jayhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmNhY2hlICpjb25uYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqaG9zdHApOwogLyogcmV0dXJucyBudW1iZXIgb2YgY29ubmVjdGlvbnMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KIHNpemVfdCBDdXJsX2Nvbm5jYWNoZV9zaXplKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotc2l6ZV90IEN1cmxfY29ubmNhY2hlX2J1bmRsZV9zaXplKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAKLWJvb2wgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK2Jvb2wgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIENVUkxjb2RlIEN1cmxfY29ubmNhY2hlX2FkZF9jb25uKHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKSBXQVJOX1VOVVNFRF9SRVNVTFQ7CiB2b2lkIEN1cmxfY29ubmNhY2hlX3JlbW92ZV9jb25uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmMKaW5kZXggMDAyNTM1Yi4uMjkyOTNmMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29ubmVjdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5lY3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzUsNiArNzUsOCBAQAogI2luY2x1ZGUgImNvbm5jYWNoZS5oIgogI2luY2x1ZGUgIm11bHRpaGFuZGxlLmgiCiAjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCisjaW5jbHVkZSAicXVpYy5oIgorI2luY2x1ZGUgInNvY2tzLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtMTY0LDEyICsxNjYsMTMgQEAKIAogc3RhdGljIENVUkxjb2RlCiBzaW5nbGVpcGNvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgIGNvbnN0IEN1cmxfYWRkcmluZm8gKmFpLCAvKiBzdGFydCBjb25uZWN0aW5nIHRvIHRoaXMgKi8KLSAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKTsKKyAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWksIC8qIHN0YXJ0IGNvbm5lY3RpbmcgdG8gdGhpcyAqLworICAgICAgICAgICAgICAgIGludCB0ZW1waW5kZXgpOyAgICAgICAgICAvKiAwIG9yIDEgYW1vbmcgdGhlIHRlbXAgb25lcyAqLwogCiAvKgogICogQ3VybF90aW1lbGVmdCgpIHJldHVybnMgdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbGVmdCBhbGxvd2VkIGZvciB0aGUKLSAqIHRyYW5zZmVyL2Nvbm5lY3Rpb24uIElmIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSwgdGhlIHRpbWVvdXQgdGltZSBoYXMgYWxyZWFkeQorICogdHJhbnNmZXIvY29ubmVjdGlvbi4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZXJlJ3Mgbm8gdGltZW91dCAoaWUgdGhlcmUncworICogaW5maW5pdGUgdGltZSBsZWZ0KS4gSWYgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLCB0aGUgdGltZW91dCB0aW1lIGhhcyBhbHJlYWR5CiAgKiBlbGFwc2VkLgogICoKICAqIFRoZSBzdGFydCB0aW1lIGlzIHN0b3JlZCBpbiBwcm9ncmVzcy50X3N0YXJ0c2luZ2xlIC0gYXMgc2V0IHdpdGgKQEAgLTM2OCw2ICszNzEsMTEgQEAKICAgICAgICAgaW5mb2YoZGF0YSwgIk5hbWUgJyVzJyBmYW1pbHkgJWkgcmVzb2x2ZWQgdG8gJyVzJyBmYW1pbHkgJWlcbiIsCiAgICAgICAgICAgICAgIGRldiwgYWYsIG15aG9zdCwgaC0+YWRkci0+YWlfZmFtaWx5KTsKICAgICAgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGgpOworICAgICAgICBpZihhZiAhPSBoLT5hZGRyLT5haV9mYW1pbHkpIHsKKyAgICAgICAgICAvKiBiYWQgSVAgdmVyc2lvbiBjb21ibywgc2lnbmFsIHRoZSBjYWxsZXIgdG8gdHJ5IGFub3RoZXIgYWRkcmVzcworICAgICAgICAgICAgIGZhbWlseSBpZiBhdmFpbGFibGUgKi8KKyAgICAgICAgICByZXR1cm4gQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0w7CisgICAgICAgIH0KICAgICAgICAgZG9uZSA9IDE7CiAgICAgICB9CiAgICAgICBlbHNlIHsKQEAgLTU0OCwxMyArNTU2LDI3IEBACiAgIHJldHVybiByYzsKIH0KIAotLyogVXNlZCB3aXRoaW4gdGhlIG11bHRpIGludGVyZmFjZS4gVHJ5IG5leHQgSVAgYWRkcmVzcywgcmV0dXJuIFRSVUUgaWYgbm8KKy8qIHVwZGF0ZSB0ZW1wYWRkclt0ZW1waW5kZXhdICh0byB0aGUgbmV4dCBlbnRyeSksIG1ha2VzIHN1cmUgdG8gc3RpY2sKKyAgIHRvIHRoZSBjb3JyZWN0IGZhbWlseSAqLworc3RhdGljIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaW5leHQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRlbXBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmV4dCkgLyogdXNlIG5leHQgZW50cnk/ICovCit7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSA9IGNvbm4tPnRlbXBhZGRyW3RlbXBpbmRleF07CisgIGlmKGFpICYmIG5leHQpCisgICAgYWkgPSBhaS0+YWlfbmV4dDsKKyAgd2hpbGUoYWkgJiYgKGFpLT5haV9mYW1pbHkgIT0gY29ubi0+dGVtcGZhbWlseVt0ZW1waW5kZXhdKSkKKyAgICBhaSA9IGFpLT5haV9uZXh0OworICBjb25uLT50ZW1wYWRkclt0ZW1waW5kZXhdID0gYWk7CisgIHJldHVybiBhaTsKK30KKworLyogVXNlZCB3aXRoaW4gdGhlIG11bHRpIGludGVyZmFjZS4gVHJ5IG5leHQgSVAgYWRkcmVzcywgcmV0dXJucyBlcnJvciBpZiBubwogICAgbW9yZSBhZGRyZXNzIGV4aXN0cyBvciBlcnJvciAqLwogc3RhdGljIENVUkxjb2RlIHRyeW5leHRpcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1waW5kZXgpCiB7Ci0gIGNvbnN0IGludCBvdGhlciA9IHRlbXBpbmRleCBeIDE7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfQ09OTkVDVDsKIAogICAvKiBGaXJzdCBjbGVhbiB1cCBhZnRlciB0aGUgZmFpbGVkIHNvY2tldC4KQEAgLTU2NSwzOCArNTg3LDE1IEBACiAgIGNvbm4tPnRlbXBzb2NrW3RlbXBpbmRleF0gPSBDVVJMX1NPQ0tFVF9CQUQ7CiAKICAgaWYoc29ja2luZGV4ID09IEZJUlNUU09DS0VUKSB7Ci0gICAgQ3VybF9hZGRyaW5mbyAqYWkgPSBOVUxMOwotICAgIGludCBmYW1pbHkgPSBBRl9VTlNQRUM7Ci0KLSAgICBpZihjb25uLT50ZW1wYWRkclt0ZW1waW5kZXhdKSB7Ci0gICAgICAvKiBmaW5kIG5leHQgYWRkcmVzcyBpbiB0aGUgc2FtZSBwcm90b2NvbCBmYW1pbHkgKi8KLSAgICAgIGZhbWlseSA9IGNvbm4tPnRlbXBhZGRyW3RlbXBpbmRleF0tPmFpX2ZhbWlseTsKLSAgICAgIGFpID0gY29ubi0+dGVtcGFkZHJbdGVtcGluZGV4XS0+YWlfbmV4dDsKLSAgICB9Ci0jaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBlbHNlIGlmKGNvbm4tPnRlbXBhZGRyWzBdKSB7Ci0gICAgICAvKiBoYXBweSBleWViYWxscyAtIHRyeSB0aGUgb3RoZXIgcHJvdG9jb2wgZmFtaWx5ICovCi0gICAgICBpbnQgZmlyc3RmYW1pbHkgPSBjb25uLT50ZW1wYWRkclswXS0+YWlfZmFtaWx5OwotICAgICAgZmFtaWx5ID0gKGZpcnN0ZmFtaWx5ID09IEFGX0lORVQpID8gQUZfSU5FVDYgOiBBRl9JTkVUOwotICAgICAgYWkgPSBjb25uLT50ZW1wYWRkclswXS0+YWlfbmV4dDsKLSAgICB9Ci0jZW5kaWYKKyAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWkgPSBjb25uLT50ZW1wYWRkclt0ZW1waW5kZXhdOwogCiAgICAgd2hpbGUoYWkpIHsKLSAgICAgIGlmKGNvbm4tPnRlbXBhZGRyW290aGVyXSkgewotICAgICAgICAvKiB3ZSBjYW4gc2FmZWx5IHNraXAgYWRkcmVzc2VzIG9mIHRoZSBvdGhlciBwcm90b2NvbCBmYW1pbHkgKi8KLSAgICAgICAgd2hpbGUoYWkgJiYgYWktPmFpX2ZhbWlseSAhPSBmYW1pbHkpCi0gICAgICAgICAgYWkgPSBhaS0+YWlfbmV4dDsKLSAgICAgIH0KLQogICAgICAgaWYoYWkpIHsKLSAgICAgICAgcmVzdWx0ID0gc2luZ2xlaXBjb25uZWN0KGNvbm4sIGFpLCAmY29ubi0+dGVtcHNvY2tbdGVtcGluZGV4XSk7CisgICAgICAgIHJlc3VsdCA9IHNpbmdsZWlwY29ubmVjdChjb25uLCBhaSwgdGVtcGluZGV4KTsKICAgICAgICAgaWYocmVzdWx0ID09IENVUkxFX0NPVUxETlRfQ09OTkVDVCkgewotICAgICAgICAgIGFpID0gYWktPmFpX25leHQ7CisgICAgICAgICAgYWkgPSBhaW5leHQoY29ubiwgdGVtcGluZGV4LCBUUlVFKTsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotCi0gICAgICAgIGNvbm4tPnRlbXBhZGRyW3RlbXBpbmRleF0gPSBhaTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTYyMCwxMyArNjE5LDEwIEBACiAgIGNvbm4tPmRhdGEtPmluZm8uY29ubl9sb2NhbF9wb3J0ID0gY29ubi0+bG9jYWxfcG9ydDsKIH0KIAotVU5JVFRFU1QgYm9vbCBnZXRhZGRyZXNzaW5mbyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpwb3J0KTsKLQogLyogcmV0cmlldmVzIGlwIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSBhIHNvY2thZGRyIHN0cnVjdHVyZS4KICAgIG5vdGUgaXQgY2FsbHMgQ3VybF9pbmV0X250b3Agd2hpY2ggc2V0cyBlcnJubyBvbiBmYWlsLCBub3QgU09DS0VSUk5PLiAqLwotVU5JVFRFU1QgYm9vbCBnZXRhZGRyZXNzaW5mbyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpwb3J0KQorYm9vbCBDdXJsX2FkZHIyc3RyaW5nKHN0cnVjdCBzb2NrYWRkciAqc2EsIGN1cmxfc29ja2xlbl90IHNhbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZHIsIGxvbmcgKnBvcnQpCiB7CiAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2kgPSBOVUxMOwogI2lmZGVmIEVOQUJMRV9JUFY2CkBAIC02MzQsNiArNjMwLDggQEAKICNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9TWVNfVU5fSCkgJiYgZGVmaW5lZChBRl9VTklYKQogICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnN1ID0gTlVMTDsKKyNlbHNlCisgICh2b2lkKXNhbGVuOwogI2VuZGlmCiAKICAgc3dpdGNoKHNhLT5zYV9mYW1pbHkpIHsKQEAgLTY1OSw4ICs2NTcsMTIgQEAKICNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9TWVNfVU5fSCkgJiYgZGVmaW5lZChBRl9VTklYKQogICAgIGNhc2UgQUZfVU5JWDoKLSAgICAgIHN1ID0gKHN0cnVjdCBzb2NrYWRkcl91biopc2E7Ci0gICAgICBtc25wcmludGYoYWRkciwgTUFYX0lQQURSX0xFTiwgIiVzIiwgc3UtPnN1bl9wYXRoKTsKKyAgICAgIGlmKHNhbGVuID4gKGN1cmxfc29ja2xlbl90KXNpemVvZihzYV9mYW1pbHlfdCkpIHsKKyAgICAgICAgc3UgPSAoc3RydWN0IHNvY2thZGRyX3VuKilzYTsKKyAgICAgICAgbXNucHJpbnRmKGFkZHIsIE1BWF9JUEFEUl9MRU4sICIlcyIsIHN1LT5zdW5fcGF0aCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGFkZHJbMF0gPSAwOyAvKiBzb2NrZXQgd2l0aCBubyBuYW1lICovCiAgICAgICAqcG9ydCA9IDA7CiAgICAgICByZXR1cm4gVFJVRTsKICNlbmRpZgpAQCAtNjc4LDYyICs2ODAsMTM2IEBACiAgICBjb25uZWN0aW9uICovCiB2b2lkIEN1cmxfdXBkYXRlY29ubmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IHNvY2tmZCkKIHsKLSAgaWYoY29ubi0+c29ja3R5cGUgPT0gU09DS19ER1JBTSkKLSAgICAvKiB0aGVyZSdzIG5vIGNvbm5lY3Rpb24hICovCi0gICAgcmV0dXJuOwotCisgIGlmKGNvbm4tPnRyYW5zcG9ydCA9PSBUUk5TUFJUX1RDUCkgewogI2lmIGRlZmluZWQoSEFWRV9HRVRQRUVSTkFNRSkgfHwgZGVmaW5lZChIQVZFX0dFVFNPQ0tOQU1FKQotICBpZighY29ubi0+Yml0cy5yZXVzZSAmJiAhY29ubi0+Yml0cy50Y3BfZmFzdG9wZW4pIHsKLSAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwotICAgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3NyZW07Ci0gICAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBzc2xvYzsKLSAgICBjdXJsX3NvY2tsZW5fdCBsZW47CisgICAgaWYoIWNvbm4tPmJpdHMucmV1c2UgJiYgIWNvbm4tPmJpdHMudGNwX2Zhc3RvcGVuKSB7CisgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CisgICAgICBzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9zdG9yYWdlIHNzcmVtOworICAgICAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBzc2xvYzsKKyAgICAgIGN1cmxfc29ja2xlbl90IHBsZW47CisgICAgICBjdXJsX3NvY2tsZW5fdCBzbGVuOwogI2lmZGVmIEhBVkVfR0VUUEVFUk5BTUUKLSAgICBsZW4gPSBzaXplb2Yoc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSk7Ci0gICAgaWYoZ2V0cGVlcm5hbWUoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyKikgJnNzcmVtLCAmbGVuKSkgewotICAgICAgaW50IGVycm9yID0gU09DS0VSUk5POwotICAgICAgZmFpbGYoZGF0YSwgImdldHBlZXJuYW1lKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKLSAgICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGVycm9yLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQorICAgICAgcGxlbiA9IHNpemVvZihzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9zdG9yYWdlKTsKKyAgICAgIGlmKGdldHBlZXJuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciopICZzc3JlbSwgJnBsZW4pKSB7CisgICAgICAgIGludCBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgZmFpbGYoZGF0YSwgImdldHBlZXJuYW1lKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICAgICAgZXJyb3IsIEN1cmxfc3RyZXJyb3IoZXJyb3IsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQogI2VuZGlmCiAjaWZkZWYgSEFWRV9HRVRTT0NLTkFNRQotICAgIGxlbiA9IHNpemVvZihzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9zdG9yYWdlKTsKLSAgICBtZW1zZXQoJnNzbG9jLCAwLCBzaXplb2Yoc3Nsb2MpKTsKLSAgICBpZihnZXRzb2NrbmFtZShzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc3Nsb2MsICZsZW4pKSB7Ci0gICAgICBpbnQgZXJyb3IgPSBTT0NLRVJSTk87Ci0gICAgICBmYWlsZihkYXRhLCAiZ2V0c29ja25hbWUoKSBmYWlsZWQgd2l0aCBlcnJubyAlZDogJXMiLAotICAgICAgICAgICAgZXJyb3IsIEN1cmxfc3RyZXJyb3IoZXJyb3IsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICAgIHJldHVybjsKLSAgICB9CisgICAgICBzbGVuID0gc2l6ZW9mKHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UpOworICAgICAgbWVtc2V0KCZzc2xvYywgMCwgc2l6ZW9mKHNzbG9jKSk7CisgICAgICBpZihnZXRzb2NrbmFtZShzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc3Nsb2MsICZzbGVuKSkgeworICAgICAgICBpbnQgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgICAgIGZhaWxmKGRhdGEsICJnZXRzb2NrbmFtZSgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGVycm9yLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KICNlbmRpZgogI2lmZGVmIEhBVkVfR0VUUEVFUk5BTUUKLSAgICBpZighZ2V0YWRkcmVzc2luZm8oKHN0cnVjdCBzb2NrYWRkciopJnNzcmVtLAotICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5wcmltYXJ5X2lwLCAmY29ubi0+cHJpbWFyeV9wb3J0KSkgewotICAgICAgZmFpbGYoZGF0YSwgInNzcmVtIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCi0gICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtZW1jcHkoY29ubi0+aXBfYWRkcl9zdHIsIGNvbm4tPnByaW1hcnlfaXAsIE1BWF9JUEFEUl9MRU4pOworICAgICAgaWYoIUN1cmxfYWRkcjJzdHJpbmcoKHN0cnVjdCBzb2NrYWRkciopJnNzcmVtLCBwbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cHJpbWFyeV9pcCwgJmNvbm4tPnByaW1hcnlfcG9ydCkpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgInNzcmVtIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgICAgIGVycm5vLCBDdXJsX3N0cmVycm9yKGVycm5vLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIG1lbWNweShjb25uLT5pcF9hZGRyX3N0ciwgY29ubi0+cHJpbWFyeV9pcCwgTUFYX0lQQURSX0xFTik7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0dFVFNPQ0tOQU1FCi0gICAgaWYoIWdldGFkZHJlc3NpbmZvKChzdHJ1Y3Qgc29ja2FkZHIqKSZzc2xvYywKLSAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+bG9jYWxfaXAsICZjb25uLT5sb2NhbF9wb3J0KSkgewotICAgICAgZmFpbGYoZGF0YSwgInNzbG9jIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCi0gICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwotICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKSZzc2xvYywgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmxvY2FsX2lwLCAmY29ubi0+bG9jYWxfcG9ydCkpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgInNzbG9jIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgICAgIGVycm5vLCBDdXJsX3N0cmVycm9yKGVycm5vLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KICNlbmRpZgotICB9CisgICAgfQogI2Vsc2UgLyogIUhBVkVfR0VUU09DS05BTUUgJiYgIUhBVkVfR0VUUEVFUk5BTUUgKi8KLSAgKHZvaWQpc29ja2ZkOyAvKiB1bnVzZWQgKi8KKyAgICAodm9pZClzb2NrZmQ7IC8qIHVudXNlZCAqLwogI2VuZGlmCisgIH0gLyogZW5kIG9mIFRDUC1vbmx5IHNlY3Rpb24gKi8KIAogICAvKiBwZXJzaXN0IGNvbm5lY3Rpb24gaW5mbyBpbiBzZXNzaW9uIGhhbmRsZSAqLwogICBDdXJsX3BlcnNpc3Rjb25uaW5mbyhjb25uKTsKIH0KIAorLyogQWZ0ZXIgYSBUQ1AgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgaGFzIGJlZW4gdmVyaWZpZWQsIHRoaXMgZnVuY3Rpb24gZG9lcworICAgdGhlIG5leHQgbWFnaWMgc3RlcHMuIElmICdkb25lJyBpc24ndCBzZXQgVFJVRSwgaXQgaXMgbm90IGRvbmUgeWV0IGFuZAorICAgbXVzdCBiZSBjYWxsZWQgYWdhaW4uCisKKyAgIE5vdGU6IHRoaXMgZnVuY3Rpb24ncyBzdWItZnVuY3Rpb25zIGNhbGwgZmFpbGYoKQorCisqLworc3RhdGljIENVUkxjb2RlIGNvbm5lY3RfU09DS1Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIGlmKGNvbm4tPmJpdHMuc29ja3Nwcm94eSkgeworICAgIC8qIGZvciB0aGUgc2Vjb25kYXJ5IHNvY2tldCAoRlRQKSwgdXNlIHRoZSAiY29ubmVjdCB0byBob3N0IgorICAgICAqIGJ1dCBpZ25vcmUgdGhlICJjb25uZWN0IHRvIHBvcnQiICh1c2UgdGhlIHNlY29uZGFyeSBwb3J0KQorICAgICAqLworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0ID0KKyAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ID8KKyAgICAgIGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICAgIGNvbm4tPmJpdHMuY29ubl90b19ob3N0ID8KKyAgICAgIGNvbm4tPmNvbm5fdG9faG9zdC5uYW1lIDoKKyAgICAgIHNvY2tpbmRleCA9PSBTRUNPTkRBUllTT0NLRVQgPworICAgICAgY29ubi0+c2Vjb25kYXJ5aG9zdG5hbWUgOiBjb25uLT5ob3N0Lm5hbWU7CisgICAgY29uc3QgaW50IHBvcnQgPQorICAgICAgY29ubi0+Yml0cy5odHRwcHJveHkgPyAoaW50KWNvbm4tPmh0dHBfcHJveHkucG9ydCA6CisgICAgICBzb2NraW5kZXggPT0gU0VDT05EQVJZU09DS0VUID8gY29ubi0+c2Vjb25kYXJ5X3BvcnQgOgorICAgICAgY29ubi0+Yml0cy5jb25uX3RvX3BvcnQgPyBjb25uLT5jb25uX3RvX3BvcnQgOgorICAgICAgY29ubi0+cmVtb3RlX3BvcnQ7CisgICAgc3dpdGNoKGNvbm4tPnNvY2tzX3Byb3h5LnByb3h5dHlwZSkgeworICAgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNToKKyAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUU6CisgICAgICByZXN1bHQgPSBDdXJsX1NPQ0tTNShjb25uLT5zb2Nrc19wcm94eS51c2VyLCBjb25uLT5zb2Nrc19wcm94eS5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBzb2NraW5kZXgsIGNvbm4sIGRvbmUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzQ6CisgICAgY2FzZSBDVVJMUFJPWFlfU09DS1M0QToKKyAgICAgIHJlc3VsdCA9IEN1cmxfU09DS1M0KGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIsIGhvc3QsIHBvcnQsIHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4sIGRvbmUpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInVua25vd24gcHJveHl0eXBlIG9wdGlvbiBnaXZlbiIpOworICAgICAgcmVzdWx0ID0gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0gLyogc3dpdGNoIHByb3h5dHlwZSAqLworICB9CisgIGVsc2UKKyNlbHNlCisgICAgKHZvaWQpY29ubjsKKyAgICAodm9pZClzb2NraW5kZXg7CisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCisgICAgKmRvbmUgPSBUUlVFOyAvKiBubyBTT0NLUyBwcm94eSwgc28gY29uc2lkZXIgdXMgY29ubmVjdGVkICovCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHBvc3RfU09DS1MoKSBpcyBjYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNvbm5lY3QgdG8gdGhlIHBlZXIsIHdoaWNoCisgKiAqY291bGQqIGJlIGEgU09DS1MgcHJveHkKKyAqLworc3RhdGljIHZvaWQgcG9zdF9TT0NLUyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCkKK3sKKyAgY29ubi0+Yml0cy50Y3Bjb25uZWN0W3NvY2tpbmRleF0gPSBUUlVFOworCisgICpjb25uZWN0ZWQgPSBUUlVFOworICBpZihzb2NraW5kZXggPT0gRklSU1RTT0NLRVQpCisgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9DT05ORUNUKTsgLyogY29ubmVjdCBkb25lICovCisgIEN1cmxfdXBkYXRlY29ubmluZm8oY29ubiwgY29ubi0+c29ja1tzb2NraW5kZXhdKTsKKyAgQ3VybF92ZXJib3NlY29ubmVjdChjb25uKTsKKyAgY29ubi0+ZGF0YS0+aW5mby5udW1jb25uZWN0cysrOyAvKiB0byB0cmFjayB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIG1hZGUgKi8KK30KKwogLyoKICAqIEN1cmxfaXNfY29ubmVjdGVkKCkgY2hlY2tzIGlmIHRoZSBzb2NrZXQgaGFzIGNvbm5lY3RlZC4KICAqLwpAQCAtNzQ3LDggKzgyMyw4IEBACiAgIHRpbWVkaWZmX3QgYWxsb3c7CiAgIGludCBlcnJvciA9IDA7CiAgIHN0cnVjdCBjdXJsdGltZSBub3c7Ci0gIGludCByYzsKLSAgaW50IGk7CisgIGludCByYyA9IDA7CisgIHVuc2lnbmVkIGludCBpOwogCiAgIERFQlVHQVNTRVJUKHNvY2tpbmRleCA+PSBGSVJTVFNPQ0tFVCAmJiBzb2NraW5kZXggPD0gU0VDT05EQVJZU09DS0VUKTsKIApAQCAtNzcxLDMzICs4NDcsNjIgQEAKICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogICB9CiAKKyAgaWYoU09DS1NfU1RBVEUoY29ubi0+Y25uY3Quc3RhdGUpKSB7CisgICAgLyogc3RpbGwgZG9pbmcgU09DS1MgKi8KKyAgICByZXN1bHQgPSBjb25uZWN0X1NPQ0tTKGNvbm4sIHNvY2tpbmRleCwgY29ubmVjdGVkKTsKKyAgICBpZighcmVzdWx0ICYmICpjb25uZWN0ZWQpCisgICAgICBwb3N0X1NPQ0tTKGNvbm4sIHNvY2tpbmRleCwgY29ubmVjdGVkKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKICAgZm9yKGkgPSAwOyBpPDI7IGkrKykgewogICAgIGNvbnN0IGludCBvdGhlciA9IGkgXiAxOwogICAgIGlmKGNvbm4tPnRlbXBzb2NrW2ldID09IENVUkxfU09DS0VUX0JBRCkKICAgICAgIGNvbnRpbnVlOwotCisgICAgZXJyb3IgPSAwOworI2lmZGVmIEVOQUJMRV9RVUlDCisgICAgaWYoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfUVVJQykgeworICAgICAgcmVzdWx0ID0gQ3VybF9xdWljX2lzX2Nvbm5lY3RlZChjb25uLCBpLCBjb25uZWN0ZWQpOworICAgICAgaWYoIXJlc3VsdCAmJiAqY29ubmVjdGVkKSB7CisgICAgICAgIC8qIHVzZSB0aGlzIHNvY2tldCBmcm9tIG5vdyBvbiAqLworICAgICAgICBjb25uLT5zb2NrW3NvY2tpbmRleF0gPSBjb25uLT50ZW1wc29ja1tpXTsKKyAgICAgICAgY29ubi0+aXBfYWRkciA9IGNvbm4tPnRlbXBhZGRyW2ldOworICAgICAgICBjb25uLT50ZW1wc29ja1tpXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgICAgcG9zdF9TT0NLUyhjb25uLCBzb2NraW5kZXgsIGNvbm5lY3RlZCk7CisgICAgICAgIGNvbm5rZWVwKGNvbm4sICJIVFRQLzMgZGVmYXVsdCIpOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIGVycm9yID0gU09DS0VSUk5POworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CiAjaWZkZWYgbXBlaXgKLSAgICAvKiBDYWxsIHRoaXMgZnVuY3Rpb24gb25jZSBub3csIGFuZCBpZ25vcmUgdGhlIHJlc3VsdHMuIFdlIGRvIHRoaXMgdG8KLSAgICAgICAiY2xlYXIiIHRoZSBlcnJvciBzdGF0ZSBvbiB0aGUgc29ja2V0IHNvIHRoYXQgd2UgY2FuIGxhdGVyIHJlYWQgaXQKLSAgICAgICByZWxpYWJseS4gVGhpcyBpcyByZXBvcnRlZCBuZWNlc3Nhcnkgb24gdGhlIE1QRS9pWCBvcGVyYXRpbmcgc3lzdGVtLiAqLwotICAgICh2b2lkKXZlcmlmeWNvbm5lY3QoY29ubi0+dGVtcHNvY2tbaV0sIE5VTEwpOworICAgICAgLyogQ2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2Ugbm93LCBhbmQgaWdub3JlIHRoZSByZXN1bHRzLiBXZSBkbyB0aGlzIHRvCisgICAgICAgICAiY2xlYXIiIHRoZSBlcnJvciBzdGF0ZSBvbiB0aGUgc29ja2V0IHNvIHRoYXQgd2UgY2FuIGxhdGVyIHJlYWQgaXQKKyAgICAgICAgIHJlbGlhYmx5LiBUaGlzIGlzIHJlcG9ydGVkIG5lY2Vzc2FyeSBvbiB0aGUgTVBFL2lYIG9wZXJhdGluZworICAgICAgICAgc3lzdGVtLiAqLworICAgICAgKHZvaWQpdmVyaWZ5Y29ubmVjdChjb25uLT50ZW1wc29ja1tpXSwgTlVMTCk7CiAjZW5kaWYKIAotICAgIC8qIGNoZWNrIHNvY2tldCBmb3IgY29ubmVjdCAqLwotICAgIHJjID0gU09DS0VUX1dSSVRBQkxFKGNvbm4tPnRlbXBzb2NrW2ldLCAwKTsKKyAgICAgIC8qIGNoZWNrIHNvY2tldCBmb3IgY29ubmVjdCAqLworICAgICAgcmMgPSBTT0NLRVRfV1JJVEFCTEUoY29ubi0+dGVtcHNvY2tbaV0sIDApOworICAgIH0KIAogICAgIGlmKHJjID09IDApIHsgLyogbm8gY29ubmVjdGlvbiB5ZXQgKi8KLSAgICAgIGVycm9yID0gMDsKLSAgICAgIGlmKEN1cmxfdGltZWRpZmYobm93LCBjb25uLT5jb25uZWN0dGltZSkgPj0gY29ubi0+dGltZW91dG1zX3Blcl9hZGRyKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJBZnRlciAlbGRtcyBjb25uZWN0IHRpbWUsIG1vdmUgb24hXG4iLAotICAgICAgICAgICAgICBjb25uLT50aW1lb3V0bXNfcGVyX2FkZHIpOworICAgICAgaWYoQ3VybF90aW1lZGlmZihub3csIGNvbm4tPmNvbm5lY3R0aW1lKSA+PQorICAgICAgICAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyW2ldKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJBZnRlciAlIiBDVVJMX0ZPUk1BVF9USU1FRElGRl9UCisgICAgICAgICAgICAgICJtcyBjb25uZWN0IHRpbWUsIG1vdmUgb24hXG4iLCBjb25uLT50aW1lb3V0bXNfcGVyX2FkZHJbaV0pOwogICAgICAgICBlcnJvciA9IEVUSU1FRE9VVDsKICAgICAgIH0KIAogICAgICAgLyogc2hvdWxkIHdlIHRyeSBhbm90aGVyIHByb3RvY29sIGZhbWlseT8gKi8KLSAgICAgIGlmKGkgPT0gMCAmJiBjb25uLT50ZW1wYWRkclsxXSA9PSBOVUxMICYmCisgICAgICBpZihpID09IDAgJiYgIWNvbm4tPmJpdHMucGFyYWxsZWxfY29ubmVjdCAmJgogICAgICAgICAgKEN1cmxfdGltZWRpZmYobm93LCBjb25uLT5jb25uZWN0dGltZSkgPj0KICAgICAgICAgICBkYXRhLT5zZXQuaGFwcHlfZXllYmFsbHNfdGltZW91dCkpIHsKKyAgICAgICAgY29ubi0+Yml0cy5wYXJhbGxlbF9jb25uZWN0ID0gVFJVRTsgLyogc3RhcnRpbmcgbm93ICovCiAgICAgICAgIHRyeW5leHRpcChjb25uLCBzb2NraW5kZXgsIDEpOwogICAgICAgfQogICAgIH0KQEAgLTgxOSwxOCArOTI0LDEzIEBACiAgICAgICAgICAgY29ubi0+dGVtcHNvY2tbb3RoZXJdID0gQ1VSTF9TT0NLRVRfQkFEOwogICAgICAgICB9CiAKLSAgICAgICAgLyogc2VlIGlmIHdlIG5lZWQgdG8gZG8gYW55IHByb3h5IG1hZ2ljIGZpcnN0IG9uY2Ugd2UgY29ubmVjdGVkICovCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfY29ubmVjdGVkX3Byb3h5KGNvbm4sIHNvY2tpbmRleCk7Ci0gICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgLyogc2VlIGlmIHdlIG5lZWQgdG8ga2ljayBvZmYgYW55IFNPQ0tTIHByb3h5IG1hZ2ljIG9uY2Ugd2UKKyAgICAgICAgICAgY29ubmVjdGVkICovCisgICAgICAgIHJlc3VsdCA9IGNvbm5lY3RfU09DS1MoY29ubiwgc29ja2luZGV4LCBjb25uZWN0ZWQpOworICAgICAgICBpZihyZXN1bHQgfHwgISpjb25uZWN0ZWQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgICAgICBjb25uLT5iaXRzLnRjcGNvbm5lY3Rbc29ja2luZGV4XSA9IFRSVUU7Ci0KLSAgICAgICAgKmNvbm5lY3RlZCA9IFRSVUU7Ci0gICAgICAgIGlmKHNvY2tpbmRleCA9PSBGSVJTVFNPQ0tFVCkKLSAgICAgICAgICBDdXJsX3BncnNUaW1lKGRhdGEsIFRJTUVSX0NPTk5FQ1QpOyAvKiBjb25uZWN0IGRvbmUgKi8KLSAgICAgICAgQ3VybF91cGRhdGVjb25uaW5mbyhjb25uLCBjb25uLT5zb2NrW3NvY2tpbmRleF0pOwotICAgICAgICBDdXJsX3ZlcmJvc2Vjb25uZWN0KGNvbm4pOworICAgICAgICBwb3N0X1NPQ0tTKGNvbm4sIHNvY2tpbmRleCwgY29ubmVjdGVkKTsKIAogICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgICB9CkBAIC04NDgsNTEgKzk0OCw3MCBAQAogICAgICAgU0VUX1NPQ0tFUlJOTyhlcnJvcik7CiAgICAgICBpZihjb25uLT50ZW1wYWRkcltpXSkgewogICAgICAgICBDVVJMY29kZSBzdGF0dXM7CisjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKICAgICAgICAgY2hhciBpcGFkZHJlc3NbTUFYX0lQQURSX0xFTl07CiAgICAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07Ci0gICAgICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29ubi0+dGVtcGFkZHJbaV0sIGlwYWRkcmVzcywgTUFYX0lQQURSX0xFTik7CisgICAgICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29ubi0+dGVtcGFkZHJbaV0sIGlwYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaXBhZGRyZXNzKSk7CiAgICAgICAgIGluZm9mKGRhdGEsICJjb25uZWN0IHRvICVzIHBvcnQgJWxkIGZhaWxlZDogJXNcbiIsCiAgICAgICAgICAgICAgIGlwYWRkcmVzcywgY29ubi0+cG9ydCwKICAgICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihlcnJvciwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworI2VuZGlmCiAKLSAgICAgICAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyID0gY29ubi0+dGVtcGFkZHJbaV0tPmFpX25leHQgPT0gTlVMTCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IDogYWxsb3cgLyAyOwotCisgICAgICAgIGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkcltpXSA9IGNvbm4tPnRlbXBhZGRyW2ldLT5haV9uZXh0ID09IE5VTEwgPworICAgICAgICAgIGFsbG93IDogYWxsb3cgLyAyOworICAgICAgICBhaW5leHQoY29ubiwgaSwgVFJVRSk7CiAgICAgICAgIHN0YXR1cyA9IHRyeW5leHRpcChjb25uLCBzb2NraW5kZXgsIGkpOwotICAgICAgICBpZihzdGF0dXMgIT0gQ1VSTEVfQ09VTEROVF9DT05ORUNUCi0gICAgICAgICAgICB8fCBjb25uLT50ZW1wc29ja1tvdGhlcl0gPT0gQ1VSTF9TT0NLRVRfQkFEKQorICAgICAgICBpZigoc3RhdHVzICE9IENVUkxFX0NPVUxETlRfQ09OTkVDVCkgfHwKKyAgICAgICAgICAgY29ubi0+dGVtcHNvY2tbb3RoZXJdID09IENVUkxfU09DS0VUX0JBRCkKICAgICAgICAgICAvKiB0aGUgbGFzdCBhdHRlbXB0IGZhaWxlZCBhbmQgbm8gb3RoZXIgc29ja2V0cyByZW1haW4gb3BlbiAqLwogICAgICAgICAgIHJlc3VsdCA9IHN0YXR1czsKICAgICAgIH0KICAgICB9CiAgIH0KIAotICBpZihyZXN1bHQpIHsKKyAgaWYocmVzdWx0ICYmCisgICAgIChjb25uLT50ZW1wc29ja1swXSA9PSBDVVJMX1NPQ0tFVF9CQUQpICYmCisgICAgIChjb25uLT50ZW1wc29ja1sxXSA9PSBDVVJMX1NPQ0tFVF9CQUQpKSB7CiAgICAgLyogbm8gbW9yZSBhZGRyZXNzZXMgdG8gdHJ5ICovCiAgICAgY29uc3QgY2hhciAqaG9zdG5hbWU7CiAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKIAotICAgIC8qIGlmIHRoZSBmaXJzdCBhZGRyZXNzIGZhbWlseSBydW5zIG91dCBvZiBhZGRyZXNzZXMgdG8gdHJ5IGJlZm9yZQotICAgICAgIHRoZSBoYXBweSBleWViYWxsIHRpbWVvdXQsIGdvIGFoZWFkIGFuZCB0cnkgdGhlIG5leHQgZmFtaWx5IG5vdyAqLwotICAgIGlmKGNvbm4tPnRlbXBhZGRyWzFdID09IE5VTEwpIHsKLSAgICAgIHJlc3VsdCA9IHRyeW5leHRpcChjb25uLCBzb2NraW5kZXgsIDEpOwotICAgICAgaWYoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgLyogaWYgdGhlIGZpcnN0IGFkZHJlc3MgZmFtaWx5IHJ1bnMgb3V0IG9mIGFkZHJlc3NlcyB0byB0cnkgYmVmb3JlIHRoZQorICAgICAgIGhhcHB5IGV5ZWJhbGwgdGltZW91dCwgZ28gYWhlYWQgYW5kIHRyeSB0aGUgbmV4dCBmYW1pbHkgbm93ICovCisgICAgcmVzdWx0ID0gdHJ5bmV4dGlwKGNvbm4sIHNvY2tpbmRleCwgMSk7CisgICAgaWYoIXJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgICAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KQogICAgICAgaG9zdG5hbWUgPSBjb25uLT5zb2Nrc19wcm94eS5ob3N0Lm5hbWU7CiAgICAgZWxzZSBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKICAgICAgIGhvc3RuYW1lID0gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWU7Ci0gICAgZWxzZSBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKLSAgICAgIGhvc3RuYW1lID0gY29ubi0+Y29ubl90b19ob3N0Lm5hbWU7CisgICAgZWxzZQorI2VuZGlmCisgICAgICBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKKyAgICAgICAgaG9zdG5hbWUgPSBjb25uLT5jb25uX3RvX2hvc3QubmFtZTsKICAgICBlbHNlCiAgICAgICBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKIAogICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gY29ubmVjdCB0byAlcyBwb3J0ICVsZDogJXMiLAogICAgICAgICAgIGhvc3RuYW1lLCBjb25uLT5wb3J0LAogICAgICAgICAgIEN1cmxfc3RyZXJyb3IoZXJyb3IsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKworICAgIEN1cmxfcXVpY19kaXNjb25uZWN0KGNvbm4sIDApOworICAgIEN1cmxfcXVpY19kaXNjb25uZWN0KGNvbm4sIDEpOworCisjaWZkZWYgV1NBRVRJTUVET1VUCisgICAgaWYoV1NBRVRJTUVET1VUID09IGRhdGEtPnN0YXRlLm9zX2Vycm5vKQorICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworI2VsaWYgZGVmaW5lZChFVElNRURPVVQpCisgICAgaWYoRVRJTUVET1VUID09IGRhdGEtPnN0YXRlLm9zX2Vycm5vKQorICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworI2VuZGlmCiAgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IENVUkxFX09LOyAvKiBzdGlsbCB0cnlpbmcgKi8KIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtOTAwLDE0ICsxMDE5LDEyIEBACiBzdGF0aWMgdm9pZCB0Y3Bub2RlbGF5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQpCiB7CiAjaWYgZGVmaW5lZChUQ1BfTk9ERUxBWSkKLSNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSNlbmRpZgogICBjdXJsX3NvY2tsZW5fdCBvbm9mZiA9IChjdXJsX3NvY2tsZW5fdCkgMTsKICAgaW50IGxldmVsID0gSVBQUk9UT19UQ1A7CisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07Ci0KLSNpZiBkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisjZWxzZQogICAodm9pZCkgY29ubjsKICNlbmRpZgogCkBAIC05MTUsOCArMTAzMiw2IEBACiAgICAgICAgICAgICAgICAgc2l6ZW9mKG9ub2ZmKSkgPCAwKQogICAgIGluZm9mKGRhdGEsICJDb3VsZCBub3Qgc2V0IFRDUF9OT0RFTEFZOiAlc1xuIiwKICAgICAgICAgICBDdXJsX3N0cmVycm9yKFNPQ0tFUlJOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwotICBlbHNlCi0gICAgaW5mb2YoZGF0YSwgIlRDUF9OT0RFTEFZIHNldFxuIik7CiAjZWxzZQogICAodm9pZCljb25uOwogICAodm9pZClzb2NrZmQ7CkBAIC05OTgsOCArMTExMyw4IEBACiAgKiBoYXZpbmcgY29ubmVjdGVkLgogICovCiBzdGF0aWMgQ1VSTGNvZGUgc2luZ2xlaXBjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2twKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1waW5kZXgpCiB7CiAgIHN0cnVjdCBDdXJsX3NvY2thZGRyX2V4IGFkZHI7CiAgIGludCByYyA9IC0xOwpAQCAtMTAxNSwxOSArMTEzMCwxNiBAQAogICBpbnQgb3B0dmFsID0gMTsKICNlbmRpZgogICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwotCisgIGN1cmxfc29ja2V0X3QgKnNvY2twID0gJmNvbm4tPnRlbXBzb2NrW3RlbXBpbmRleF07CiAgICpzb2NrcCA9IENVUkxfU09DS0VUX0JBRDsKIAogICByZXN1bHQgPSBDdXJsX3NvY2tldChjb25uLCBhaSwgJmFkZHIsICZzb2NrZmQpOwogICBpZihyZXN1bHQpCi0gICAgLyogRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc29ja2V0LCBidXQgc3RpbGwgcmV0dXJuIE9LIHNpbmNlIHdlIHNpZ25hbCB0aGUKLSAgICAgICBsYWNrIG9mIHNvY2tldCBhcyB3ZWxsLiBUaGlzIGFsbG93cyB0aGUgcGFyZW50IGZ1bmN0aW9uIHRvIGtlZXAgbG9vcGluZwotICAgICAgIG92ZXIgYWx0ZXJuYXRpdmUgYWRkcmVzc2VzL3NvY2tldCBmYW1pbGllcyBldGMuICovCi0gICAgcmV0dXJuIENVUkxFX09LOworICAgIHJldHVybiByZXN1bHQ7CiAKICAgLyogc3RvcmUgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQgdXNlZCBpbiB0aGlzIGNvbm5lY3Rpb24gYXR0ZW1wdCAqLwotICBpZighZ2V0YWRkcmVzc2luZm8oKHN0cnVjdCBzb2NrYWRkciopJmFkZHIuc2FfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcywgJnBvcnQpKSB7CisgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLnNhX2FkZHIsIGFkZHIuYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLCAmcG9ydCkpIHsKICAgICAvKiBtYWxmb3JtZWQgYWRkcmVzcyBvciBidWcgaW4gaW5ldF9udG9wLCB0cnkgbmV4dCBhZGRyZXNzICovCiAgICAgZmFpbGYoZGF0YSwgInNhX2FkZHIgaW5ldF9udG9wKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwpAQCAtMTA5MSwxMSArMTIwMywxMyBAQAogICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrZmQsIFRSVUUpOwogCiAgIGNvbm4tPmNvbm5lY3R0aW1lID0gQ3VybF9ub3coKTsKLSAgaWYoY29ubi0+bnVtX2FkZHIgPiAxKQotICAgIEN1cmxfZXhwaXJlKGRhdGEsIGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkciwgRVhQSVJFX0ROU19QRVJfTkFNRSk7CisgIGlmKGNvbm4tPm51bV9hZGRyID4gMSkgeworICAgIEN1cmxfZXhwaXJlKGRhdGEsIGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkclswXSwgRVhQSVJFX0ROU19QRVJfTkFNRSk7CisgICAgQ3VybF9leHBpcmUoZGF0YSwgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyWzFdLCBFWFBJUkVfRE5TX1BFUl9OQU1FMik7CisgIH0KIAotICAvKiBDb25uZWN0IFRDUCBzb2NrZXRzLCBiaW5kIFVEUCAqLwotICBpZighaXNjb25uZWN0ZWQgJiYgKGNvbm4tPnNvY2t0eXBlID09IFNPQ0tfU1RSRUFNKSkgeworICAvKiBDb25uZWN0IFRDUCBhbmQgUVVJQyBzb2NrZXRzICovCisgIGlmKCFpc2Nvbm5lY3RlZCAmJiAoY29ubi0+dHJhbnNwb3J0ICE9IFRSTlNQUlRfVURQKSkgewogICAgIGlmKGNvbm4tPmJpdHMudGNwX2Zhc3RvcGVuKSB7CiAjaWYgZGVmaW5lZChDT05ORUNUX0RBVEFfSURFTVBPVEVOVCkgLyogRGFyd2luICovCiAjICBpZiBkZWZpbmVkKEhBVkVfQlVJTFRJTl9BVkFJTEFCTEUpCkBAIC0xMTI0LDggKzEyMzgsNiBAQAogICAgICAgaWYoc2V0c29ja29wdChzb2NrZmQsIElQUFJPVE9fVENQLCBUQ1BfRkFTVE9QRU5fQ09OTkVDVCwKICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikmb3B0dmFsLCBzaXplb2Yob3B0dmFsKSkgPCAwKQogICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGVuYWJsZSBUQ1AgRmFzdCBPcGVuIG9uIGZkICVkXG4iLCBzb2NrZmQpOwotICAgICAgZWxzZQotICAgICAgICBpbmZvZihkYXRhLCAiVENQX0ZBU1RPUEVOX0NPTk5FQ1Qgc2V0XG4iKTsKIAogICAgICAgcmMgPSBjb25uZWN0KHNvY2tmZCwgJmFkZHIuc2FfYWRkciwgYWRkci5hZGRybGVuKTsKICNlbGlmIGRlZmluZWQoTVNHX0ZBU1RPUEVOKSAvKiBvbGQgTGludXggKi8KQEAgLTExNDEsNiArMTI1MywxNiBAQAogCiAgICAgaWYoLTEgPT0gcmMpCiAgICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyNpZmRlZiBFTkFCTEVfUVVJQworICAgIGVsc2UgaWYoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfUVVJQykgeworICAgICAgLyogcGFzcyBpbiAnc29ja2ZkJyBzZXBhcmF0ZWx5IHNpbmNlIGl0IGhhc24ndCBiZWVuIHB1dCBpbnRvIHRoZQorICAgICAgICAgdGVtcHNvY2sgYXJyYXkgYXQgdGhpcyBwb2ludCAqLworICAgICAgcmVzdWx0ID0gQ3VybF9xdWljX2Nvbm5lY3QoY29ubiwgc29ja2ZkLCB0ZW1waW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkci5zYV9hZGRyLCBhZGRyLmFkZHJsZW4pOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICB9CisjZW5kaWYKICAgfQogICBlbHNlIHsKICAgICAqc29ja3AgPSBzb2NrZmQ7CkBAIC0xMTkzLDcgKzEzMTUsNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IGN1cmx0aW1lIGJlZm9yZSA9IEN1cmxfbm93KCk7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLQorICBpbnQgaTsKICAgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCAmYmVmb3JlLCBUUlVFKTsKIAogICBpZih0aW1lb3V0X21zIDwgMCkgewpAQCAtMTIwMywzMCArMTMyNSwzNyBAQAogICB9CiAKICAgY29ubi0+bnVtX2FkZHIgPSBDdXJsX251bV9hZGRyZXNzZXMocmVtb3RlaG9zdC0+YWRkcik7Ci0gIGNvbm4tPnRlbXBhZGRyWzBdID0gcmVtb3RlaG9zdC0+YWRkcjsKLSAgY29ubi0+dGVtcGFkZHJbMV0gPSBOVUxMOwotICBjb25uLT50ZW1wc29ja1swXSA9IENVUkxfU09DS0VUX0JBRDsKLSAgY29ubi0+dGVtcHNvY2tbMV0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIGNvbm4tPnRlbXBhZGRyWzBdID0gY29ubi0+dGVtcGFkZHJbMV0gPSByZW1vdGVob3N0LT5hZGRyOworICBjb25uLT50ZW1wc29ja1swXSA9IGNvbm4tPnRlbXBzb2NrWzFdID0gQ1VSTF9TT0NLRVRfQkFEOwogCiAgIC8qIE1heCB0aW1lIGZvciB0aGUgbmV4dCBjb25uZWN0aW9uIGF0dGVtcHQgKi8KLSAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyID0KKyAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyWzBdID0KICAgICBjb25uLT50ZW1wYWRkclswXS0+YWlfbmV4dCA9PSBOVUxMID8gdGltZW91dF9tcyA6IHRpbWVvdXRfbXMgLyAyOworICBjb25uLT50aW1lb3V0bXNfcGVyX2FkZHJbMV0gPQorICAgIGNvbm4tPnRlbXBhZGRyWzFdLT5haV9uZXh0ID09IE5VTEwgPyB0aW1lb3V0X21zIDogdGltZW91dF9tcyAvIDI7CiAKLSAgLyogc3RhcnQgY29ubmVjdGluZyB0byBmaXJzdCBJUCAqLwotICB3aGlsZShjb25uLT50ZW1wYWRkclswXSkgewotICAgIHJlc3VsdCA9IHNpbmdsZWlwY29ubmVjdChjb25uLCBjb25uLT50ZW1wYWRkclswXSwgJihjb25uLT50ZW1wc29ja1swXSkpOwotICAgIGlmKCFyZXN1bHQpCi0gICAgICBicmVhazsKLSAgICBjb25uLT50ZW1wYWRkclswXSA9IGNvbm4tPnRlbXBhZGRyWzBdLT5haV9uZXh0OworICBjb25uLT50ZW1wZmFtaWx5WzBdID0gY29ubi0+dGVtcGFkZHJbMF0/CisgICAgY29ubi0+dGVtcGFkZHJbMF0tPmFpX2ZhbWlseTowOworICBjb25uLT50ZW1wZmFtaWx5WzFdID0gY29ubi0+dGVtcGZhbWlseVswXSA9PSBBRl9JTkVUNiA/CisgICAgQUZfSU5FVCA6IEFGX0lORVQ2OworICBhaW5leHQoY29ubiwgMSwgRkFMU0UpOyAvKiBhc3NpZ25zIGNvbm4tPnRlbXBhZGRyWzFdIGFjY29yZGluZ2x5ICovCisKKyAgREVCVUdGKGluZm9mKGRhdGEsICJmYW1pbHkwID09ICVzLCBmYW1pbHkxID09ICVzXG4iLAorICAgICAgICAgICAgICAgY29ubi0+dGVtcGZhbWlseVswXSA9PSBBRl9JTkVUID8gInY0IiA6ICJ2NiIsCisgICAgICAgICAgICAgICBjb25uLT50ZW1wZmFtaWx5WzFdID09IEFGX0lORVQgPyAidjQiIDogInY2IikpOworCisgIC8qIGdldCB0aHJvdWdoIHRoZSBsaXN0IGluIGZhbWlseSBvcmRlciBpbiBjYXNlIG9mIHF1aWNrIGZhaWx1cmVzICovCisgIGZvcihpID0gMDsgKGkgPCAyKSAmJiByZXN1bHQ7IGkrKykgeworICAgIHdoaWxlKGNvbm4tPnRlbXBhZGRyW2ldKSB7CisgICAgICByZXN1bHQgPSBzaW5nbGVpcGNvbm5lY3QoY29ubiwgY29ubi0+dGVtcGFkZHJbaV0sIGkpOworICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisgICAgICBhaW5leHQoY29ubiwgaSwgVFJVRSk7CisgICAgfQogICB9Ci0KLSAgaWYoY29ubi0+dGVtcHNvY2tbMF0gPT0gQ1VSTF9TT0NLRVRfQkFEKSB7Ci0gICAgaWYoIXJlc3VsdCkKLSAgICAgIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KIAotICBkYXRhLT5pbmZvLm51bWNvbm5lY3RzKys7IC8qIHRvIHRyYWNrIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgbWFkZSAqLwogICBDdXJsX2V4cGlyZShjb25uLT5kYXRhLCBkYXRhLT5zZXQuaGFwcHlfZXllYmFsbHNfdGltZW91dCwKICAgICAgICAgICAgICAgRVhQSVJFX0hBUFBZX0VZRUJBTExTKTsKIApAQCAtMTMyNiwxMiArMTQ1NSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29jaykKIHsKICAgaWYoY29ubiAmJiBjb25uLT5mY2xvc2Vzb2NrZXQpIHsKLSAgICBpZigoc29jayA9PSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pICYmCi0gICAgICAgY29ubi0+c29ja19hY2NlcHRlZFtTRUNPTkRBUllTT0NLRVRdKQorICAgIGlmKChzb2NrID09IGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSkgJiYgY29ubi0+Yml0cy5zb2NrX2FjY2VwdGVkKQogICAgICAgLyogaWYgdGhpcyBzb2NrZXQgbWF0Y2hlcyB0aGUgc2Vjb25kIHNvY2tldCwgYW5kIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aAogICAgICAgICAgYWNjZXB0LCB0aGVuIHdlIE1VU1QgTk9UIGNhbGwgdGhlIGNhbGxiYWNrIGJ1dCBjbGVhciB0aGUgYWNjZXB0ZWQKICAgICAgICAgIHN0YXR1cyAqLwotICAgICAgY29ubi0+c29ja19hY2NlcHRlZFtTRUNPTkRBUllTT0NLRVRdID0gRkFMU0U7CisgICAgICBjb25uLT5iaXRzLnNvY2tfYWNjZXB0ZWQgPSBGQUxTRTsKICAgICBlbHNlIHsKICAgICAgIGludCByYzsKICAgICAgIEN1cmxfbXVsdGlfY2xvc2VkKGNvbm4tPmRhdGEsIHNvY2spOwpAQCAtMTM2MSw3ICsxNDg5LDcgQEAKICAqCiAgKi8KIENVUkxjb2RlIEN1cmxfc29ja2V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEN1cmxfYWRkcmluZm8gKmFpLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfc29ja2FkZHJfZXggKmFkZHIsCiAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrZmQpCiB7CkBAIC0xMzgxLDggKzE1MDksOSBAQAogICAgKi8KIAogICBhZGRyLT5mYW1pbHkgPSBhaS0+YWlfZmFtaWx5OwotICBhZGRyLT5zb2NrdHlwZSA9IGNvbm4tPnNvY2t0eXBlOwotICBhZGRyLT5wcm90b2NvbCA9IGNvbm4tPnNvY2t0eXBlID09IFNPQ0tfREdSQU0/SVBQUk9UT19VRFA6YWktPmFpX3Byb3RvY29sOworICBhZGRyLT5zb2NrdHlwZSA9IChjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9UQ1ApID8gU09DS19TVFJFQU0gOiBTT0NLX0RHUkFNOworICBhZGRyLT5wcm90b2NvbCA9IGNvbm4tPnRyYW5zcG9ydCAhPSBUUk5TUFJUX1RDUCA/IElQUFJPVE9fVURQIDoKKyAgICBhaS0+YWlfcHJvdG9jb2w7CiAgIGFkZHItPmFkZHJsZW4gPSBhaS0+YWlfYWRkcmxlbjsKIAogICBpZihhZGRyLT5hZGRybGVuID4gc2l6ZW9mKHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UpKQpAQCAtMTQxMyw2ICsxNTQyLDExIEBACiAgICAgLyogbm8gc29ja2V0LCBubyBjb25uZWN0aW9uICovCiAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKIAorICBpZihjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9RVUlDKSB7CisgICAgLyogUVVJQyBzb2NrZXRzIG5lZWQgdG8gYmUgbm9uYmxvY2tpbmcgKi8KKyAgICAodm9pZCljdXJseF9ub25ibG9jaygqc29ja2ZkLCBUUlVFKTsKKyAgfQorCiAjaWYgZGVmaW5lZChFTkFCTEVfSVBWNikgJiYgZGVmaW5lZChIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEKQogICBpZihjb25uLT5zY29wZV9pZCAmJiAoYWRkci0+ZmFtaWx5ID09IEFGX0lORVQ2KSkgewogICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKiBjb25zdCBzYTYgPSAodm9pZCAqKSZhZGRyLT5zYV9hZGRyOwpAQCAtMTQzNyw2ICsxNTcxLDcgQEAKICAgLyogY2xvc2UgaWYgYSBjb25uZWN0aW9uLCBvciBhIHN0cmVhbSB0aGF0IGlzbid0IG11bHRpcGxleGVkICovCiAgIGJvb2wgY2xvc2VpdCA9IChjdHJsID09IENPTk5DVFJMX0NPTk5FQ1RJT04pIHx8CiAgICAgKChjdHJsID09IENPTk5DVFJMX1NUUkVBTSkgJiYgIShjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1RSRUFNKSk7CisgIERFQlVHQVNTRVJUKGNvbm4pOwogICBpZigoY3RybCA9PSBDT05OQ1RSTF9TVFJFQU0pICYmCiAgICAgIChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1RSRUFNKSkKICAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIktpbGwgc3RyZWFtOiAlc1xuIiwgcmVhc29uKSk7CkBAIC0xNDUyLDYgKzE1ODcsNyBAQAogYm9vbCBDdXJsX2Nvbm5fZGF0YV9wZW5kaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgaW50IHJlYWRhYmxlOworICBERUJVR0FTU0VSVChjb25uKTsKIAogICBpZihDdXJsX3NzbF9kYXRhX3BlbmRpbmcoY29ubiwgc29ja2luZGV4KSB8fAogICAgICBDdXJsX3JlY3ZfaGFzX3Bvc3Rwb25lZF9kYXRhKGNvbm4sIHNvY2tpbmRleCkpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb25uZWN0LmgKaW5kZXggNmE1Yzc1NS4uNmZkOWVhOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29ubmVjdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvbm5lY3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTEsNiArNTEsOSBAQAogY3VybF9zb2NrZXRfdCBDdXJsX2dldGNvbm5lY3RpbmZvKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnApOwogCitib29sIEN1cmxfYWRkcjJzdHJpbmcoc3RydWN0IHNvY2thZGRyICpzYSwgY3VybF9zb2NrbGVuX3Qgc2FsZW4sCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkciwgbG9uZyAqcG9ydCk7CisKIC8qCiAgKiBDaGVjayBpZiBhIGNvbm5lY3Rpb24gc2VlbXMgdG8gYmUgYWxpdmUuCiAgKi8KQEAgLTEwMiw3ICsxMDUsNyBAQAogICoKICAqLwogQ1VSTGNvZGUgQ3VybF9zb2NrZXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWksCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9leCAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tmZCk7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2NvbnRlbnRfZW5jb2RpbmcuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2NvbnRlbnRfZW5jb2RpbmcuYwppbmRleCA2ZDQ3NTM3Li5lMmU2OGExIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb250ZW50X2VuY29kaW5nLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29udGVudF9lbmNvZGluZy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC04MSwxMSArODEsMTEgQEAKIH0gemxpYkluaXRTdGF0ZTsKIAogLyogV3JpdGVyIHBhcmFtZXRlcnMuICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgemxpYl9wYXJhbXMgewogICB6bGliSW5pdFN0YXRlIHpsaWJfaW5pdDsgICAvKiB6bGliIGluaXQgc3RhdGUgKi8KICAgdUludCB0cmFpbGVybGVuOyAgICAgICAgICAgLyogUmVtYWluaW5nIHRyYWlsZXIgYnl0ZSBjb3VudC4gKi8KICAgel9zdHJlYW0gejsgICAgICAgICAgICAgICAgLyogU3RhdGUgc3RydWN0dXJlIGZvciB6bGliLiAqLwotfSAgemxpYl9wYXJhbXM7Cit9OwogCiAKIHN0YXRpYyB2b2lkcGYKQEAgLTEzMyw3ICsxMzMsOCBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgQ1VSTGNvZGUgcHJvY2Vzc190cmFpbGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgemxpYl9wYXJhbXMgKnpwKQorc3RhdGljIENVUkxjb2RlIHByb2Nlc3NfdHJhaWxlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB6bGliX3BhcmFtcyAqenApCiB7CiAgIHpfc3RyZWFtICp6ID0gJnpwLT56OwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKQEAgLTE1Nyw5ICsxNTgsMTAgQEAKIH0KIAogc3RhdGljIENVUkxjb2RlIGluZmxhdGVfc3RyZWFtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW5jX3dyaXRlciAqd3JpdGVyLCB6bGliSW5pdFN0YXRlIHN0YXJ0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYkluaXRTdGF0ZSBzdGFydGVkKQogewotICB6bGliX3BhcmFtcyAqenAgPSAoemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOworICBzdHJ1Y3QgemxpYl9wYXJhbXMgKnpwID0gKHN0cnVjdCB6bGliX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CiAgIHpfc3RyZWFtICp6ID0gJnpwLT56OyAgICAgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAgIHVJbnQgbnJlYWQgPSB6LT5hdmFpbF9pbjsKICAgQnl0ZWYgKm9yaWdfaW4gPSB6LT5uZXh0X2luOwpAQCAtMjU5LDkgKzI2MSw5IEBACiAKIC8qIERlZmxhdGUgaGFuZGxlci4gKi8KIHN0YXRpYyBDVVJMY29kZSBkZWZsYXRlX2luaXRfd3JpdGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcikKIHsKLSAgemxpYl9wYXJhbXMgKnpwID0gKHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKKyAgc3RydWN0IHpsaWJfcGFyYW1zICp6cCA9IChzdHJ1Y3QgemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwogICB6X3N0cmVhbSAqeiA9ICZ6cC0+ejsgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAKICAgaWYoIXdyaXRlci0+ZG93bnN0cmVhbSkKQEAgLTI3OCwxMCArMjgwLDEwIEBACiB9CiAKIHN0YXRpYyBDVVJMY29kZSBkZWZsYXRlX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKLSAgemxpYl9wYXJhbXMgKnpwID0gKHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKKyAgc3RydWN0IHpsaWJfcGFyYW1zICp6cCA9IChzdHJ1Y3QgemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwogICB6X3N0cmVhbSAqeiA9ICZ6cC0+ejsgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAKICAgLyogU2V0IHRoZSBjb21wcmVzc2VkIGlucHV0IHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKi8KQEAgLTI5NiwyOSArMjk4LDI5IEBACiB9CiAKIHN0YXRpYyB2b2lkIGRlZmxhdGVfY2xvc2Vfd3JpdGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcikKIHsKLSAgemxpYl9wYXJhbXMgKnpwID0gKHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKKyAgc3RydWN0IHpsaWJfcGFyYW1zICp6cCA9IChzdHJ1Y3QgemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwogICB6X3N0cmVhbSAqeiA9ICZ6cC0+ejsgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAKICAgZXhpdF96bGliKGNvbm4sIHosICZ6cC0+emxpYl9pbml0LCBDVVJMRV9PSyk7CiB9CiAKLXN0YXRpYyBjb25zdCBjb250ZW50X2VuY29kaW5nIGRlZmxhdGVfZW5jb2RpbmcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgZGVmbGF0ZV9lbmNvZGluZyA9IHsKICAgImRlZmxhdGUiLAogICBOVUxMLAogICBkZWZsYXRlX2luaXRfd3JpdGVyLAogICBkZWZsYXRlX3VuZW5jb2RlX3dyaXRlLAogICBkZWZsYXRlX2Nsb3NlX3dyaXRlciwKLSAgc2l6ZW9mKHpsaWJfcGFyYW1zKQorICBzaXplb2Yoc3RydWN0IHpsaWJfcGFyYW1zKQogfTsKIAogCiAvKiBHemlwIGhhbmRsZXIuICovCiBzdGF0aWMgQ1VSTGNvZGUgZ3ppcF9pbml0X3dyaXRlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW5jX3dyaXRlciAqd3JpdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7Ci0gIHpsaWJfcGFyYW1zICp6cCA9ICh6bGliX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CisgIHN0cnVjdCB6bGliX3BhcmFtcyAqenAgPSAoc3RydWN0IHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKICAgel9zdHJlYW0gKnogPSAmenAtPno7ICAgICAvKiB6bGliIHN0YXRlIHN0cnVjdHVyZSAqLwogCiAgIGlmKCF3cml0ZXItPmRvd25zdHJlYW0pCkBAIC00MzIsMTAgKzQzNCwxMCBAQAogI2VuZGlmCiAKIHN0YXRpYyBDVVJMY29kZSBnemlwX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKLSAgemxpYl9wYXJhbXMgKnpwID0gKHpsaWJfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKKyAgc3RydWN0IHpsaWJfcGFyYW1zICp6cCA9IChzdHJ1Y3QgemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwogICB6X3N0cmVhbSAqeiA9ICZ6cC0+ejsgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCiAKICAgaWYoenAtPnpsaWJfaW5pdCA9PSBaTElCX0lOSVRfR1pJUCkgewpAQCAtNTYwLDMzICs1NjIsMzEgQEAKIH0KIAogc3RhdGljIHZvaWQgZ3ppcF9jbG9zZV93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKQogewotICB6bGliX3BhcmFtcyAqenAgPSAoemxpYl9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOworICBzdHJ1Y3QgemxpYl9wYXJhbXMgKnpwID0gKHN0cnVjdCB6bGliX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CiAgIHpfc3RyZWFtICp6ID0gJnpwLT56OyAgICAgLyogemxpYiBzdGF0ZSBzdHJ1Y3R1cmUgKi8KIAogICBleGl0X3psaWIoY29ubiwgeiwgJnpwLT56bGliX2luaXQsIENVUkxFX09LKTsKIH0KIAotc3RhdGljIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgZ3ppcF9lbmNvZGluZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyBnemlwX2VuY29kaW5nID0gewogICAiZ3ppcCIsCiAgICJ4LWd6aXAiLAogICBnemlwX2luaXRfd3JpdGVyLAogICBnemlwX3VuZW5jb2RlX3dyaXRlLAogICBnemlwX2Nsb3NlX3dyaXRlciwKLSAgc2l6ZW9mKHpsaWJfcGFyYW1zKQorICBzaXplb2Yoc3RydWN0IHpsaWJfcGFyYW1zKQogfTsKIAogI2VuZGlmIC8qIEhBVkVfTElCWiAqLwogCiAKICNpZmRlZiBIQVZFX0JST1RMSQotCiAvKiBXcml0ZXIgcGFyYW1ldGVycy4gKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBicm90bGlfcGFyYW1zIHsKICAgQnJvdGxpRGVjb2RlclN0YXRlICpicjsgICAgLyogU3RhdGUgc3RydWN0dXJlIGZvciBicm90bGkuICovCi19ICBicm90bGlfcGFyYW1zOwotCit9OwogCiBzdGF0aWMgQ1VSTGNvZGUgYnJvdGxpX21hcF9lcnJvcihCcm90bGlEZWNvZGVyRXJyb3JDb2RlIGJlKQogewpAQCAtNjI3LDEwICs2MjcsOSBAQAogfQogCiBzdGF0aWMgQ1VSTGNvZGUgYnJvdGxpX2luaXRfd3JpdGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7Ci0gIGJyb3RsaV9wYXJhbXMgKmJwID0gKGJyb3RsaV9wYXJhbXMgKikgJndyaXRlci0+cGFyYW1zOwotCisgIHN0cnVjdCBicm90bGlfcGFyYW1zICpicCA9IChzdHJ1Y3QgYnJvdGxpX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CiAgICh2b2lkKSBjb25uOwogCiAgIGlmKCF3cml0ZXItPmRvd25zdHJlYW0pCkBAIC02NDEsMTAgKzY0MCwxMCBAQAogfQogCiBzdGF0aWMgQ1VSTGNvZGUgYnJvdGxpX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKLSAgYnJvdGxpX3BhcmFtcyAqYnAgPSAoYnJvdGxpX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CisgIHN0cnVjdCBicm90bGlfcGFyYW1zICpicCA9IChzdHJ1Y3QgYnJvdGxpX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7CiAgIGNvbnN0IHVpbnQ4X3QgKnNyYyA9IChjb25zdCB1aW50OF90ICopIGJ1ZjsKICAgY2hhciAqZGVjb21wOwogICB1aW50OF90ICpkc3Q7CkBAIC02ODksMTAgKzY4OCw5IEBACiB9CiAKIHN0YXRpYyB2b2lkIGJyb3RsaV9jbG9zZV93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW5jX3dyaXRlciAqd3JpdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcikKIHsKLSAgYnJvdGxpX3BhcmFtcyAqYnAgPSAoYnJvdGxpX3BhcmFtcyAqKSAmd3JpdGVyLT5wYXJhbXM7Ci0KKyAgc3RydWN0IGJyb3RsaV9wYXJhbXMgKmJwID0gKHN0cnVjdCBicm90bGlfcGFyYW1zICopICZ3cml0ZXItPnBhcmFtczsKICAgKHZvaWQpIGNvbm47CiAKICAgaWYoYnAtPmJyKSB7CkBAIC03MDEsNDAgKzY5OSw0MCBAQAogICB9CiB9CiAKLXN0YXRpYyBjb25zdCBjb250ZW50X2VuY29kaW5nIGJyb3RsaV9lbmNvZGluZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyBicm90bGlfZW5jb2RpbmcgPSB7CiAgICJiciIsCiAgIE5VTEwsCiAgIGJyb3RsaV9pbml0X3dyaXRlciwKICAgYnJvdGxpX3VuZW5jb2RlX3dyaXRlLAogICBicm90bGlfY2xvc2Vfd3JpdGVyLAotICBzaXplb2YoYnJvdGxpX3BhcmFtcykKKyAgc2l6ZW9mKHN0cnVjdCBicm90bGlfcGFyYW1zKQogfTsKICNlbmRpZgogCiAKIC8qIElkZW50aXR5IGhhbmRsZXIuICovCiBzdGF0aWMgQ1VSTGNvZGUgaWRlbnRpdHlfaW5pdF93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICByZXR1cm4gd3JpdGVyLT5kb3duc3RyZWFtPyBDVVJMRV9PSzogQ1VSTEVfV1JJVEVfRVJST1I7CiB9CiAKIHN0YXRpYyBDVVJMY29kZSBpZGVudGl0eV91bmVuY29kZV93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMpCiB7CiAgIHJldHVybiBDdXJsX3VuZW5jb2RlX3dyaXRlKGNvbm4sIHdyaXRlci0+ZG93bnN0cmVhbSwgYnVmLCBuYnl0ZXMpOwogfQogCiBzdGF0aWMgdm9pZCBpZGVudGl0eV9jbG9zZV93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICAodm9pZCkgd3JpdGVyOwogfQogCi1zdGF0aWMgY29uc3QgY29udGVudF9lbmNvZGluZyBpZGVudGl0eV9lbmNvZGluZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyBpZGVudGl0eV9lbmNvZGluZyA9IHsKICAgImlkZW50aXR5IiwKICAgIm5vbmUiLAogICBpZGVudGl0eV9pbml0X3dyaXRlciwKQEAgLTc0NSw3ICs3NDMsNyBAQAogCiAKIC8qIHN1cHBvcnRlZCBjb250ZW50IGVuY29kaW5ncyB0YWJsZS4gKi8KLXN0YXRpYyBjb25zdCBjb250ZW50X2VuY29kaW5nICogY29uc3QgZW5jb2RpbmdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgKiBjb25zdCBlbmNvZGluZ3NbXSA9IHsKICAgJmlkZW50aXR5X2VuY29kaW5nLAogI2lmZGVmIEhBVkVfTElCWgogICAmZGVmbGF0ZV9lbmNvZGluZywKQEAgLTc2Miw4ICs3NjAsOCBAQAogY2hhciAqQ3VybF9hbGxfY29udGVudF9lbmNvZGluZ3Modm9pZCkKIHsKICAgc2l6ZV90IGxlbiA9IDA7Ci0gIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgKiBjb25zdCAqY2VwOwotICBjb25zdCBjb250ZW50X2VuY29kaW5nICpjZTsKKyAgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgKiBjb25zdCAqY2VwOworICBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyAqY2U7CiAgIGNoYXIgKmFjZTsKIAogICBmb3IoY2VwID0gZW5jb2RpbmdzOyAqY2VwOyBjZXArKykgewpAQCAtNzk2LDE0ICs3OTQsMTQgQEAKIAogLyogUmVhbCBjbGllbnQgd3JpdGVyOiBubyBkb3duc3RyZWFtLiAqLwogc3RhdGljIENVUkxjb2RlIGNsaWVudF9pbml0X3dyaXRlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKQogewogICAodm9pZCkgY29ubjsKICAgcmV0dXJuIHdyaXRlci0+ZG93bnN0cmVhbT8gQ1VSTEVfV1JJVEVfRVJST1I6IENVUkxFX09LOwogfQogCiBzdGF0aWMgQ1VSTGNvZGUgY2xpZW50X3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CkBAIC04MTgsMTMgKzgxNiwxMyBAQAogfQogCiBzdGF0aWMgdm9pZCBjbGllbnRfY2xvc2Vfd3JpdGVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICAodm9pZCkgd3JpdGVyOwogfQogCi1zdGF0aWMgY29uc3QgY29udGVudF9lbmNvZGluZyBjbGllbnRfZW5jb2RpbmcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgY2xpZW50X2VuY29kaW5nID0gewogICBOVUxMLAogICBOVUxMLAogICBjbGllbnRfaW5pdF93cml0ZXIsCkBAIC04MzYsMTQgKzgzNCwxNCBAQAogCiAvKiBEZWZlcnJlZCBlcnJvciBkdW1teSB3cml0ZXIuICovCiBzdGF0aWMgQ1VSTGNvZGUgZXJyb3JfaW5pdF93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICByZXR1cm4gd3JpdGVyLT5kb3duc3RyZWFtPyBDVVJMRV9PSzogQ1VSTEVfV1JJVEVfRVJST1I7CiB9CiAKIHN0YXRpYyBDVVJMY29kZSBlcnJvcl91bmVuY29kZV93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVuY193cml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMpCiB7CiAgIGNoYXIgKmFsbCA9IEN1cmxfYWxsX2NvbnRlbnRfZW5jb2RpbmdzKCk7CkBAIC04NjEsMTMgKzg1OSwxMyBAQAogfQogCiBzdGF0aWMgdm9pZCBlcnJvcl9jbG9zZV93cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIpCiB7CiAgICh2b2lkKSBjb25uOwogICAodm9pZCkgd3JpdGVyOwogfQogCi1zdGF0aWMgY29uc3QgY29udGVudF9lbmNvZGluZyBlcnJvcl9lbmNvZGluZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyBlcnJvcl9lbmNvZGluZyA9IHsKICAgTlVMTCwKICAgTlVMTCwKICAgZXJyb3JfaW5pdF93cml0ZXIsCkBAIC04NzcsMTIgKzg3NSwxMyBAQAogfTsKIAogLyogQ3JlYXRlIGFuIHVuZW5jb2Rpbmcgd3JpdGVyIHN0YWdlIHVzaW5nIHRoZSBnaXZlbiBoYW5kbGVyLiAqLwotc3RhdGljIGNvbnRlbmNfd3JpdGVyICpuZXdfdW5lbmNvZGluZ193cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudF9lbmNvZGluZyAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbmNfd3JpdGVyICpkb3duc3RyZWFtKQorc3RhdGljIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqCituZXdfdW5lbmNvZGluZ193cml0ZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjb250ZW50X2VuY29kaW5nICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqZG93bnN0cmVhbSkKIHsKLSAgc2l6ZV90IHN6ID0gb2Zmc2V0b2YoY29udGVuY193cml0ZXIsIHBhcmFtcykgKyBoYW5kbGVyLT5wYXJhbXNpemU7Ci0gIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIgPSAoY29udGVuY193cml0ZXIgKikgY2FsbG9jKDEsIHN6KTsKKyAgc2l6ZV90IHN6ID0gb2Zmc2V0b2Yoc3RydWN0IGNvbnRlbmNfd3JpdGVyLCBwYXJhbXMpICsgaGFuZGxlci0+cGFyYW1zaXplOworICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciA9IChzdHJ1Y3QgY29udGVuY193cml0ZXIgKiljYWxsb2MoMSwgc3opOwogCiAgIGlmKHdyaXRlcikgewogICAgIHdyaXRlci0+aGFuZGxlciA9IGhhbmRsZXI7CkBAIC04OTcsNyArODk2LDggQEAKIH0KIAogLyogV3JpdGUgZGF0YSB1c2luZyBhbiB1bmVuY29kaW5nIHdyaXRlciBzdGFjay4gKi8KLUNVUkxjb2RlIEN1cmxfdW5lbmNvZGVfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb250ZW5jX3dyaXRlciAqd3JpdGVyLAorQ1VSTGNvZGUgQ3VybF91bmVuY29kZV93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMpCiB7CiAgIGlmKCFuYnl0ZXMpCkBAIC05MTAsNyArOTEwLDcgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKLSAgY29udGVuY193cml0ZXIgKndyaXRlciA9IGstPndyaXRlcl9zdGFjazsKKyAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIgPSBrLT53cml0ZXJfc3RhY2s7CiAKICAgd2hpbGUod3JpdGVyKSB7CiAgICAgay0+d3JpdGVyX3N0YWNrID0gd3JpdGVyLT5kb3duc3RyZWFtOwpAQCAtOTIxLDEyICs5MjEsMTMgQEAKIH0KIAogLyogRmluZCB0aGUgY29udGVudCBlbmNvZGluZyBieSBuYW1lLiAqLwotc3RhdGljIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgKmZpbmRfZW5jb2RpbmcoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyAqZmluZF9lbmNvZGluZyhjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCiB7Ci0gIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgKiBjb25zdCAqY2VwOworICBjb25zdCBzdHJ1Y3QgY29udGVudF9lbmNvZGluZyAqIGNvbnN0ICpjZXA7CiAKICAgZm9yKGNlcCA9IGVuY29kaW5nczsgKmNlcDsgY2VwKyspIHsKLSAgICBjb25zdCBjb250ZW50X2VuY29kaW5nICpjZSA9ICpjZXA7CisgICAgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgKmNlID0gKmNlcDsKICAgICBpZigoc3RybmNhc2Vjb21wYXJlKG5hbWUsIGNlLT5uYW1lLCBsZW4pICYmICFjZS0+bmFtZVtsZW5dKSB8fAogICAgICAgIChjZS0+YWxpYXMgJiYgc3RybmNhc2Vjb21wYXJlKG5hbWUsIGNlLT5hbGlhcywgbGVuKSAmJiAhY2UtPmFsaWFzW2xlbl0pKQogICAgICAgcmV0dXJuIGNlOwpAQCAtOTYyLDggKzk2Myw4IEBACiAgICAgICBDdXJsX2h0dHBjaHVua19pbml0KGNvbm4pOyAgIC8qIGluaXQgb3VyIGNodW5reSBlbmdpbmUuICovCiAgICAgfQogICAgIGVsc2UgaWYobmFtZWxlbikgewotICAgICAgY29uc3QgY29udGVudF9lbmNvZGluZyAqZW5jb2RpbmcgPSBmaW5kX2VuY29kaW5nKG5hbWUsIG5hbWVsZW4pOwotICAgICAgY29udGVuY193cml0ZXIgKndyaXRlcjsKKyAgICAgIGNvbnN0IHN0cnVjdCBjb250ZW50X2VuY29kaW5nICplbmNvZGluZyA9IGZpbmRfZW5jb2RpbmcobmFtZSwgbmFtZWxlbik7CisgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcjsKIAogICAgICAgaWYoIWstPndyaXRlcl9zdGFjaykgewogICAgICAgICBrLT53cml0ZXJfc3RhY2sgPSBuZXdfdW5lbmNvZGluZ193cml0ZXIoY29ubiwgJmNsaWVudF9lbmNvZGluZywgTlVMTCk7CkBAIC05OTcsNyArOTk4LDggQEAKICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKIH0KIAotQ1VSTGNvZGUgQ3VybF91bmVuY29kZV93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCitDVVJMY29kZSBDdXJsX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbnRlbmNfd3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcykKIHsKICAgKHZvaWQpIGNvbm47CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb250ZW50X2VuY29kaW5nLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jb250ZW50X2VuY29kaW5nLmgKaW5kZXggNGNkNTJiZS4uYmRkM2YxYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29udGVudF9lbmNvZGluZy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2NvbnRlbnRfZW5jb2RpbmcuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjMsMzEgKzIzLDMxIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKIAotLyogRGVjb2Rpbmcgd3JpdGVyLiAqLwotdHlwZWRlZiBzdHJ1Y3QgY29udGVuY193cml0ZXJfcyBjb250ZW5jX3dyaXRlcjsKLXR5cGVkZWYgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmdfcyBjb250ZW50X2VuY29kaW5nOwotCi1zdHJ1Y3QgY29udGVuY193cml0ZXJfcyB7Ci0gIGNvbnN0IGNvbnRlbnRfZW5jb2RpbmcgKmhhbmRsZXI7ICAvKiBFbmNvZGluZyBoYW5kbGVyLiAqLwotICBjb250ZW5jX3dyaXRlciAqZG93bnN0cmVhbTsgIC8qIERvd25zdHJlYW0gd3JpdGVyLiAqLworc3RydWN0IGNvbnRlbmNfd3JpdGVyIHsKKyAgY29uc3Qgc3RydWN0IGNvbnRlbnRfZW5jb2RpbmcgKmhhbmRsZXI7ICAvKiBFbmNvZGluZyBoYW5kbGVyLiAqLworICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKmRvd25zdHJlYW07ICAvKiBEb3duc3RyZWFtIHdyaXRlci4gKi8KICAgdm9pZCAqcGFyYW1zOyAgLyogRW5jb2Rpbmctc3BlY2lmaWMgc3RvcmFnZSAodmFyaWFibGUgbGVuZ3RoKS4gKi8KIH07CiAKIC8qIENvbnRlbnQgZW5jb2Rpbmcgd3JpdGVyLiAqLwotc3RydWN0IGNvbnRlbnRfZW5jb2RpbmdfcyB7CitzdHJ1Y3QgY29udGVudF9lbmNvZGluZyB7CiAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgICAvKiBFbmNvZGluZyBuYW1lLiAqLwogICBjb25zdCBjaGFyICphbGlhczsgICAgICAgLyogRW5jb2RpbmcgbmFtZSBhbGlhcy4gKi8KLSAgQ1VSTGNvZGUgKCppbml0X3dyaXRlcikoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKTsKLSAgQ1VSTGNvZGUgKCp1bmVuY29kZV93cml0ZSkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb250ZW5jX3dyaXRlciAqd3JpdGVyLAorICBDVVJMY29kZSAoKmluaXRfd3JpdGVyKShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKTsKKyAgQ1VSTGNvZGUgKCp1bmVuY29kZV93cml0ZSkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzKTsKLSAgdm9pZCAoKmNsb3NlX3dyaXRlcikoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb250ZW5jX3dyaXRlciAqd3JpdGVyKTsKKyAgdm9pZCAoKmNsb3NlX3dyaXRlcikoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlcik7CiAgIHNpemVfdCBwYXJhbXNpemU7CiB9OwogCiAKIENVUkxjb2RlIEN1cmxfYnVpbGRfdW5lbmNvZGluZ19zdGFjayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jbGlzdCwgaW50IG1heWJlY2h1bmtlZCk7Ci1DVVJMY29kZSBDdXJsX3VuZW5jb2RlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29udGVuY193cml0ZXIgKndyaXRlciwKK0NVUkxjb2RlIEN1cmxfdW5lbmNvZGVfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29udGVuY193cml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzKTsKIHZvaWQgQ3VybF91bmVuY29kZV9jbGVhbnVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBjaGFyICpDdXJsX2FsbF9jb250ZW50X2VuY29kaW5ncyh2b2lkKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvb2tpZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmMKaW5kZXggOWE5ZTE0ZC4uY2I3ZDk0YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTk2LDYgKzk2LDkgQEAKICNpbmNsdWRlICJjdXJsX2dldF9saW5lLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1yY2hyLmgiCiAjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiCisjaW5jbHVkZSAicmFuZC5oIgorI2luY2x1ZGUgInJlbmFtZS5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTI0MiwxOCArMjQ1LDE3IEBACiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfdG9wX2RvbWFpbihjb25zdCBjaGFyICogY29uc3QgZG9tYWluLCBzaXplX3QgKm91dGxlbikKIHsKLSAgc2l6ZV90IGxlbjsKKyAgc2l6ZV90IGxlbiA9IDA7CiAgIGNvbnN0IGNoYXIgKmZpcnN0ID0gTlVMTCwgKmxhc3Q7CiAKLSAgaWYoIWRvbWFpbikKLSAgICByZXR1cm4gTlVMTDsKLQotICBsZW4gPSBzdHJsZW4oZG9tYWluKTsKLSAgbGFzdCA9IG1lbXJjaHIoZG9tYWluLCAnLicsIGxlbik7Ci0gIGlmKGxhc3QpIHsKLSAgICBmaXJzdCA9IG1lbXJjaHIoZG9tYWluLCAnLicsIChsYXN0IC0gZG9tYWluKSk7Ci0gICAgaWYoZmlyc3QpCi0gICAgICBsZW4gLT0gKCsrZmlyc3QgLSBkb21haW4pOworICBpZihkb21haW4pIHsKKyAgICBsZW4gPSBzdHJsZW4oZG9tYWluKTsKKyAgICBsYXN0ID0gbWVtcmNocihkb21haW4sICcuJywgbGVuKTsKKyAgICBpZihsYXN0KSB7CisgICAgICBmaXJzdCA9IG1lbXJjaHIoZG9tYWluLCAnLicsIChsYXN0IC0gZG9tYWluKSk7CisgICAgICBpZihmaXJzdCkKKyAgICAgICAgbGVuIC09ICgrK2ZpcnN0IC0gZG9tYWluKTsKKyAgICB9CiAgIH0KIAogICBpZihvdXRsZW4pCkBAIC01MzYsOSArNTM4LDkgQEAKICAgICAgICAgICogb25seSB0ZXN0IGZvciBuYW1lcyB3aGVyZSB0aGF0IGNhbiBwb3NzaWJseSBiZSB0cnVlLgogICAgICAgICAgKi8KICAgICAgICAgaWYobmxlbiA+IDMgJiYgbmFtZVswXSA9PSAnXycgJiYgbmFtZVsxXSA9PSAnXycpIHsKLSAgICAgICAgICBpZihzdHJuY2FzZWNvbXBhcmUoIl9fU2VjdXJlLSIsIG5hbWUsIDkpKQorICAgICAgICAgIGlmKCFzdHJuY21wKCJfX1NlY3VyZS0iLCBuYW1lLCA5KSkKICAgICAgICAgICAgIGNvLT5wcmVmaXggfD0gQ09PS0lFX1BSRUZJWF9fU0VDVVJFOwotICAgICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKCJfX0hvc3QtIiwgbmFtZSwgNykpCisgICAgICAgICAgZWxzZSBpZighc3RybmNtcCgiX19Ib3N0LSIsIG5hbWUsIDcpKQogICAgICAgICAgICAgY28tPnByZWZpeCB8PSBDT09LSUVfUFJFRklYX19IT1NUOwogICAgICAgICB9CiAKQEAgLTcxNSw3ICs3MTcsNyBAQAogICAgIGVsc2UgaWYoY28tPmV4cGlyZXN0cikgewogICAgICAgLyogTm90ZSB0aGF0IGlmIHRoZSBkYXRlIGNvdWxkbid0IGdldCBwYXJzZWQgZm9yIHdoYXRldmVyIHJlYXNvbiwKICAgICAgICAgIHRoZSBjb29raWUgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2Vzc2lvbiBjb29raWUgKi8KLSAgICAgIGNvLT5leHBpcmVzID0gY3VybF9nZXRkYXRlKGNvLT5leHBpcmVzdHIsIE5VTEwpOworICAgICAgY28tPmV4cGlyZXMgPSBDdXJsX2dldGRhdGVfY2FwcGVkKGNvLT5leHBpcmVzdHIpOwogCiAgICAgICAvKiBTZXNzaW9uIGNvb2tpZXMgaGF2ZSBleHBpcmVzIHNldCB0byAwIHNvIGlmIHdlIGdldCB0aGF0IGJhY2sKICAgICAgICAgIGZyb20gdGhlIGRhdGUgcGFyc2VyIGxldCdzIGFkZCBhIHNlY29uZCB0byBtYWtlIGl0IGEKQEAgLTc1Myw3ICs3NTUsNyBAQAogICAgICAgICBjby0+cGF0aCA9IG1hbGxvYyhwYXRobGVuICsgMSk7IC8qIG9uZSBleHRyYSBmb3IgdGhlIHplcm8gYnl0ZSAqLwogICAgICAgICBpZihjby0+cGF0aCkgewogICAgICAgICAgIG1lbWNweShjby0+cGF0aCwgcGF0aCwgcGF0aGxlbik7Ci0gICAgICAgICAgY28tPnBhdGhbcGF0aGxlbl0gPSAwOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworICAgICAgICAgIGNvLT5wYXRoW3BhdGhsZW5dID0gMDsgLyogbnVsbC10ZXJtaW5hdGUgKi8KICAgICAgICAgICBjby0+c3BhdGggPSBzYW5pdGl6ZV9jb29raWVfcGF0aChjby0+cGF0aCk7CiAgICAgICAgICAgaWYoIWNvLT5zcGF0aCkKICAgICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7IC8qIG91dCBvZiBtZW1vcnkgYmFkICovCkBAIC04MTksMjIgKzgyMSwxNCBAQAogICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAxOgotICAgICAgICAvKiBUaGlzIGZpZWxkIGdvdCBpdHMgZXhwbGFuYXRpb24gb24gdGhlIDIzcmQgb2YgTWF5IDIwMDEgYnkKLSAgICAgICAgICAgQW5kcsOpcyBHYXJjw61hOgotCi0gICAgICAgICAgIGZsYWc6IEEgVFJVRS9GQUxTRSB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFsbCBtYWNoaW5lcyB3aXRoaW4gYSBnaXZlbgotICAgICAgICAgICBkb21haW4gY2FuIGFjY2VzcyB0aGUgdmFyaWFibGUuIFRoaXMgdmFsdWUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgYnkKLSAgICAgICAgICAgdGhlIGJyb3dzZXIsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgeW91IHNldCBmb3IgdGhlIGRvbWFpbi4KLQotICAgICAgICAgICBBcyBmYXIgYXMgSSBjYW4gc2VlLCBpdCBpcyBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBjb29raWUgc2F5cworICAgICAgICAvKiBmbGFnOiBBIFRSVUUvRkFMU0UgdmFsdWUgaW5kaWNhdGluZyBpZiBhbGwgbWFjaGluZXMgd2l0aGluIGEgZ2l2ZW4KKyAgICAgICAgICAgZG9tYWluIGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlLiBTZXQgVFJVRSB3aGVuIHRoZSBjb29raWUgc2F5cwogICAgICAgICAgICAuZG9tYWluLmNvbSBhbmQgdG8gZmFsc2Ugd2hlbiB0aGUgZG9tYWluIGlzIGNvbXBsZXRlIHd3dy5kb21haW4uY29tCiAgICAgICAgICovCiAgICAgICAgIGNvLT50YWlsbWF0Y2ggPSBzdHJjYXNlY29tcGFyZShwdHIsICJUUlVFIik/VFJVRTpGQUxTRTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIDI6Ci0gICAgICAgIC8qIEl0IHR1cm5zIG91dCwgdGhhdCBzb21ldGltZXMgdGhlIGZpbGUgZm9ybWF0IGFsbG93cyB0aGUgcGF0aAotICAgICAgICAgICBmaWVsZCB0byByZW1haW4gbm90IGZpbGxlZCBpbiwgd2UgdHJ5IHRvIGRldGVjdCB0aGlzIGFuZCB3b3JrCi0gICAgICAgICAgIGFyb3VuZCBpdCEgQW5kcsOpcyBHYXJjw61hIG1hZGUgdXMgYXdhcmUgb2YgdGhpcy4uLiAqLworICAgICAgICAvKiBUaGUgZmlsZSBmb3JtYXQgYWxsb3dzIHRoZSBwYXRoIGZpZWxkIHRvIHJlbWFpbiBub3QgZmlsbGVkIGluICovCiAgICAgICAgIGlmKHN0cmNtcCgiVFJVRSIsIHB0cikgJiYgc3RyY21wKCJGQUxTRSIsIHB0cikpIHsKICAgICAgICAgICAvKiBvbmx5IGlmIHRoZSBwYXRoIGRvZXNuJ3QgbG9vayBsaWtlIGEgYm9vbGVhbiBvcHRpb24hICovCiAgICAgICAgICAgY28tPnBhdGggPSBzdHJkdXAocHRyKTsKQEAgLTEwNTMsNyArMTA0Nyw3IEBACiAKICAgICAgICAgKmNsaXN0ID0gKmNvOyAgLyogdGhlbiBzdG9yZSBhbGwgdGhlIG5ldyBkYXRhICovCiAKLSAgICAgICAgZnJlZShjbyk7ICAgLyogZnJlZSB0aGUgbmV3bHkgYWxsb2NlZCBtZW1vcnkgKi8KKyAgICAgICAgZnJlZShjbyk7ICAgLyogZnJlZSB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSAqLwogICAgICAgICBjbyA9IGNsaXN0OyAvKiBwb2ludCB0byB0aGUgcHJldmlvdXMgc3RydWN0IGluc3RlYWQgKi8KIAogICAgICAgICAvKiBXZSBoYXZlIHJlcGxhY2VkIGEgY29va2llLCBub3cgc2tpcCB0aGUgcmVzdCBvZiB0aGUgbGlzdCBidXQKQEAgLTEwOTgsNiArMTA5Miw4IEBACiAgKgogICogSWYgJ25ld3Nlc3Npb24nIGlzIFRSVUUsIGRpc2NhcmQgYWxsICJzZXNzaW9uIGNvb2tpZXMiIG9uIHJlYWQgZnJvbSBmaWxlLgogICoKKyAqIE5vdGUgdGhhdCAnZGF0YScgbWlnaHQgYmUgY2FsbGVkIGFzIE5VTEwgcG9pbnRlci4KKyAqCiAgKiBSZXR1cm5zIE5VTEwgb24gb3V0IG9mIG1lbW9yeS4gSW52YWxpZCBjb29raWVzIGFyZSBpZ25vcmVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgQ29va2llSW5mbyAqQ3VybF9jb29raWVfaW5pdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLApAQCAtMTE2OCw2ICsxMTY0LDggQEAKICAgfQogCiAgIGMtPnJ1bm5pbmcgPSBUUlVFOyAgICAgICAgICAvKiBub3csIHdlJ3JlIHJ1bm5pbmcgKi8KKyAgaWYoZGF0YSkKKyAgICBkYXRhLT5zdGF0ZS5jb29raWVfZW5naW5lID0gVFJVRTsKIAogICByZXR1cm4gYzsKIApAQCAtMTUwNCwxMSArMTUwMiwxNCBAQAogICoKICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvIG9uIHdyaXRlIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgY29va2llX291dHB1dChzdHJ1Y3QgQ29va2llSW5mbyAqYywgY29uc3QgY2hhciAqZHVtcGhlcmUpCitzdGF0aWMgaW50IGNvb2tpZV9vdXRwdXQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29va2llSW5mbyAqYywgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAgIHN0cnVjdCBDb29raWUgKmNvOwotICBGSUxFICpvdXQ7CisgIEZJTEUgKm91dCA9IE5VTEw7CiAgIGJvb2wgdXNlX3N0ZG91dCA9IEZBTFNFOworICBjaGFyICp0ZW1wc3RvcmUgPSBOVUxMOworICBib29sIGVycm9yID0gZmFsc2U7CiAKICAgaWYoIWMpCiAgICAgLyogbm8gY29va2llIGVuZ2luZSBhbGl2ZSAqLwpAQCAtMTUxNywxNiArMTUxOCwyNCBAQAogICAvKiBhdCBmaXJzdCwgcmVtb3ZlIGV4cGlyZWQgY29va2llcyAqLwogICByZW1vdmVfZXhwaXJlZChjKTsKIAotICBpZighc3RyY21wKCItIiwgZHVtcGhlcmUpKSB7CisgIGlmKCFzdHJjbXAoIi0iLCBmaWxlbmFtZSkpIHsKICAgICAvKiB1c2Ugc3Rkb3V0ICovCiAgICAgb3V0ID0gc3Rkb3V0OwogICAgIHVzZV9zdGRvdXQgPSBUUlVFOwogICB9CiAgIGVsc2UgewotICAgIG91dCA9IGZvcGVuKGR1bXBoZXJlLCBGT1BFTl9XUklURVRFWFQpOwotICAgIGlmKCFvdXQpIHsKLSAgICAgIHJldHVybiAxOyAvKiBmYWlsdXJlICovCi0gICAgfQorICAgIHVuc2lnbmVkIGNoYXIgcmFuZHN1ZmZpeFs5XTsKKworICAgIGlmKEN1cmxfcmFuZF9oZXgoZGF0YSwgcmFuZHN1ZmZpeCwgc2l6ZW9mKHJhbmRzdWZmaXgpKSkKKyAgICAgIHJldHVybiAyOworCisgICAgdGVtcHN0b3JlID0gYXByaW50ZigiJXMuJXMudG1wIiwgZmlsZW5hbWUsIHJhbmRzdWZmaXgpOworICAgIGlmKCF0ZW1wc3RvcmUpCisgICAgICByZXR1cm4gMTsKKworICAgIG91dCA9IGZvcGVuKHRlbXBzdG9yZSwgRk9QRU5fV1JJVEVURVhUKTsKKyAgICBpZighb3V0KQorICAgICAgZ290byBlcnJvcjsKICAgfQogCiAgIGZwdXRzKCIjIE5ldHNjYXBlIEhUVFAgQ29va2llIEZpbGVcbiIKQEAgLTE1MzYsMzUgKzE1NDUsMzEgQEAKIAogICBpZihjLT5udW1jb29raWVzKSB7CiAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgdW5zaWduZWQgaW50IGo7CisgICAgc2l6ZV90IG52YWxpZCA9IDA7CiAgICAgc3RydWN0IENvb2tpZSAqKmFycmF5OwogCi0gICAgYXJyYXkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBDb29raWUgKikgKiBjLT5udW1jb29raWVzKTsKKyAgICBhcnJheSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IENvb2tpZSAqKSAqIGMtPm51bWNvb2tpZXMpOwogICAgIGlmKCFhcnJheSkgewotICAgICAgaWYoIXVzZV9zdGRvdXQpCi0gICAgICAgIGZjbG9zZShvdXQpOwotICAgICAgcmV0dXJuIDE7CisgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGogPSAwOworICAgIC8qIG9ubHkgc29ydCB0aGUgY29va2llcyB3aXRoIGEgZG9tYWluIHByb3BlcnR5ICovCiAgICAgZm9yKGkgPSAwOyBpIDwgQ09PS0lFX0hBU0hfU0laRTsgaSsrKSB7CiAgICAgICBmb3IoY28gPSBjLT5jb29raWVzW2ldOyBjbzsgY28gPSBjby0+bmV4dCkgewogICAgICAgICBpZighY28tPmRvbWFpbikKICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXJyYXlbaisrXSA9IGNvOworICAgICAgICBhcnJheVtudmFsaWQrK10gPSBjbzsKICAgICAgIH0KICAgICB9CiAKLSAgICBxc29ydChhcnJheSwgYy0+bnVtY29va2llcywgc2l6ZW9mKHN0cnVjdCBDb29raWUgKiksIGNvb2tpZV9zb3J0X2N0KTsKKyAgICBxc29ydChhcnJheSwgbnZhbGlkLCBzaXplb2Yoc3RydWN0IENvb2tpZSAqKSwgY29va2llX3NvcnRfY3QpOwogCi0gICAgZm9yKGkgPSAwOyBpIDwgajsgaSsrKSB7CisgICAgZm9yKGkgPSAwOyBpIDwgbnZhbGlkOyBpKyspIHsKICAgICAgIGNoYXIgKmZvcm1hdF9wdHIgPSBnZXRfbmV0c2NhcGVfZm9ybWF0KGFycmF5W2ldKTsKICAgICAgIGlmKGZvcm1hdF9wdHIgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKG91dCwgIiNcbiMgRmF0YWwgbGliY3VybCBlcnJvclxuIik7CiAgICAgICAgIGZyZWUoYXJyYXkpOwotICAgICAgICBpZighdXNlX3N0ZG91dCkKLSAgICAgICAgICBmY2xvc2Uob3V0KTsKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICB9CiAgICAgICBmcHJpbnRmKG91dCwgIiVzXG4iLCBmb3JtYXRfcHRyKTsKICAgICAgIGZyZWUoZm9ybWF0X3B0cik7CkBAIC0xNTcyLDEwICsxNTc3LDI0IEBACiAKICAgICBmcmVlKGFycmF5KTsKICAgfQotICBpZighdXNlX3N0ZG91dCkKLSAgICBmY2xvc2Uob3V0KTsKIAotICByZXR1cm4gMDsKKyAgaWYoIXVzZV9zdGRvdXQpIHsKKyAgICBmY2xvc2Uob3V0KTsKKyAgICBvdXQgPSBOVUxMOworICAgIGlmKEN1cmxfcmVuYW1lKHRlbXBzdG9yZSwgZmlsZW5hbWUpKSB7CisgICAgICB1bmxpbmsodGVtcHN0b3JlKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICB9CisKKyAgZ290byBjbGVhbnVwOworZXJyb3I6CisgIGVycm9yID0gdHJ1ZTsKK2NsZWFudXA6CisgIGlmKG91dCAmJiAhdXNlX3N0ZG91dCkKKyAgICBmY2xvc2Uob3V0KTsKKyAgZnJlZSh0ZW1wc3RvcmUpOworICByZXR1cm4gZXJyb3IgPyAxIDogMDsKIH0KIAogc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpjb29raWVfbGlzdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQpAQCAtMTYyMSw3ICsxNjQwLDcgQEAKICAgcmV0dXJuIGxpc3Q7CiB9CiAKLXZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjbGVhbnVwKQordm9pZCBDdXJsX2ZsdXNoX2Nvb2tpZXMoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBjbGVhbnVwKQogewogICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKSB7CiAgICAgaWYoZGF0YS0+Y2hhbmdlLmNvb2tpZWxpc3QpIHsKQEAgLTE2MzQsNyArMTY1Myw3IEBACiAgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0NPT0tJRSwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOwogCiAgICAgLyogaWYgd2UgaGF2ZSBhIGRlc3RpbmF0aW9uIGZpbGUgZm9yIGFsbCB0aGUgY29va2llcyB0byBnZXQgZHVtcGVkIHRvICovCi0gICAgaWYoY29va2llX291dHB1dChkYXRhLT5jb29raWVzLCBkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKSkKKyAgICBpZihjb29raWVfb3V0cHV0KGRhdGEsIGRhdGEtPmNvb2tpZXMsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NPT0tJRUpBUl0pKQogICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBzYXZlIGNvb2tpZXMgaW4gJXNcbiIsCiAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKTsKICAgfQpAQCAtMTY1MCw2ICsxNjY5LDcgQEAKIAogICBpZihjbGVhbnVwICYmICghZGF0YS0+c2hhcmUgfHwgKGRhdGEtPmNvb2tpZXMgIT0gZGF0YS0+c2hhcmUtPmNvb2tpZXMpKSkgewogICAgIEN1cmxfY29va2llX2NsZWFudXAoZGF0YS0+Y29va2llcyk7CisgICAgZGF0YS0+Y29va2llcyA9IE5VTEw7CiAgIH0KICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Nvb2tpZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmgKaW5kZXggYjI3MzBjZi4uYjM4NjVlNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY29va2llLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogI2RlZmluZSBDdXJsX2Nvb2tpZV9jbGVhbnVwKHgpIEN1cmxfbm9wX3N0bXQKICNkZWZpbmUgQ3VybF9mbHVzaF9jb29raWVzKHgseSkgQ3VybF9ub3Bfc3RtdAogI2Vsc2UKLXZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjbGVhbnVwKTsKK3ZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgY2xlYW51cCk7CiB2b2lkIEN1cmxfY29va2llX2NsZWFudXAoc3RydWN0IENvb2tpZUluZm8gKik7CiBzdHJ1Y3QgQ29va2llSW5mbyAqQ3VybF9jb29raWVfaW5pdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBzdHJ1Y3QgQ29va2llSW5mbyAqLCBib29sKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYWRkcmluZm8uYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYWRkcmluZm8uYwppbmRleCAxNmM0Nzc5Li45NDdkMGQzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2FkZHJpbmZvLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9hZGRyaW5mby5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01MCwxMCArNTAsNiBAQAogIyAgZGVmaW5lIGluX2FkZHJfdCB1bnNpZ25lZCBsb25nCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoVVNFX1VOSVhfU09DS0VUUykKLSNpbmNsdWRlIDxhZnVuaXguaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKICNpbmNsdWRlICJjdXJsX2FkZHJpbmZvLmgiCkBAIC04MiwxNiArNzgsMTMgQEAKICNlbmRpZgogCiB2b2lkCi1DdXJsX2ZyZWVhZGRyaW5mbyhDdXJsX2FkZHJpbmZvICpjYWhlYWQpCitDdXJsX2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqY2FoZWFkKQogewotICBDdXJsX2FkZHJpbmZvICp2cXVhbGlmaWVyIGNhbmV4dDsKLSAgQ3VybF9hZGRyaW5mbyAqY2E7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICp2cXVhbGlmaWVyIGNhbmV4dDsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmNhOwogCi0gIGZvcihjYSA9IGNhaGVhZDsgY2EgIT0gTlVMTDsgY2EgPSBjYW5leHQpIHsKLSAgICBmcmVlKGNhLT5haV9hZGRyKTsKLSAgICBmcmVlKGNhLT5haV9jYW5vbm5hbWUpOworICBmb3IoY2EgPSBjYWhlYWQ7IGNhOyBjYSA9IGNhbmV4dCkgewogICAgIGNhbmV4dCA9IGNhLT5haV9uZXh0OwotCiAgICAgZnJlZShjYSk7CiAgIH0KIH0KQEAgLTExNiwxMyArMTA5LDEzIEBACiBDdXJsX2dldGFkZHJpbmZvX2V4KGNvbnN0IGNoYXIgKm5vZGVuYW1lLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywKLSAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqKnJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKipyZXN1bHQpCiB7CiAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYWk7CiAgIHN0cnVjdCBhZGRyaW5mbyAqYWloZWFkOwotICBDdXJsX2FkZHJpbmZvICpjYWZpcnN0ID0gTlVMTDsKLSAgQ3VybF9hZGRyaW5mbyAqY2FsYXN0ID0gTlVMTDsKLSAgQ3VybF9hZGRyaW5mbyAqY2E7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpjYWZpcnN0ID0gTlVMTDsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmNhbGFzdCA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpjYTsKICAgc2l6ZV90IHNzX3NpemU7CiAgIGludCBlcnJvcjsKIApAQCAtMTM1LDcgKzEyOCw3IEBACiAgIC8qIHRyYXZlcnNlIHRoZSBhZGRyaW5mbyBsaXN0ICovCiAKICAgZm9yKGFpID0gYWloZWFkOyBhaSAhPSBOVUxMOyBhaSA9IGFpLT5haV9uZXh0KSB7Ci0KKyAgICBzaXplX3QgbmFtZWxlbiA9IGFpLT5haV9jYW5vbm5hbWUgPyBzdHJsZW4oYWktPmFpX2Nhbm9ubmFtZSkgKyAxIDogMDsKICAgICAvKiBpZ25vcmUgZWxlbWVudHMgd2l0aCB1bnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseSwgKi8KICAgICAvKiBzZXR0bGUgZmFtaWx5LXNwZWNpZmljIHNvY2thZGRyIHN0cnVjdHVyZSBzaXplLiAgKi8KICAgICBpZihhaS0+YWlfZmFtaWx5ID09IEFGX0lORVQpCkBAIC0xNTUsNyArMTQ4LDcgQEAKICAgICBpZigoc2l6ZV90KWFpLT5haV9hZGRybGVuIDwgc3Nfc2l6ZSkKICAgICAgIGNvbnRpbnVlOwogCi0gICAgY2EgPSBtYWxsb2Moc2l6ZW9mKEN1cmxfYWRkcmluZm8pKTsKKyAgICBjYSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IEN1cmxfYWRkcmluZm8pICsgc3Nfc2l6ZSArIG5hbWVsZW4pOwogICAgIGlmKCFjYSkgewogICAgICAgZXJyb3IgPSBFQUlfTUVNT1JZOwogICAgICAgYnJlYWs7CkBAIC0xNzMsMjIgKzE2NiwxMiBAQAogICAgIGNhLT5haV9jYW5vbm5hbWUgPSBOVUxMOwogICAgIGNhLT5haV9uZXh0ICAgICAgPSBOVUxMOwogCi0gICAgY2EtPmFpX2FkZHIgPSBtYWxsb2Moc3Nfc2l6ZSk7Ci0gICAgaWYoIWNhLT5haV9hZGRyKSB7Ci0gICAgICBlcnJvciA9IEVBSV9NRU1PUlk7Ci0gICAgICBmcmVlKGNhKTsKLSAgICAgIGJyZWFrOwotICAgIH0KKyAgICBjYS0+YWlfYWRkciA9ICh2b2lkICopKChjaGFyICopY2EgKyBzaXplb2Yoc3RydWN0IEN1cmxfYWRkcmluZm8pKTsKICAgICBtZW1jcHkoY2EtPmFpX2FkZHIsIGFpLT5haV9hZGRyLCBzc19zaXplKTsKIAotICAgIGlmKGFpLT5haV9jYW5vbm5hbWUgIT0gTlVMTCkgewotICAgICAgY2EtPmFpX2Nhbm9ubmFtZSA9IHN0cmR1cChhaS0+YWlfY2Fub25uYW1lKTsKLSAgICAgIGlmKCFjYS0+YWlfY2Fub25uYW1lKSB7Ci0gICAgICAgIGVycm9yID0gRUFJX01FTU9SWTsKLSAgICAgICAgZnJlZShjYS0+YWlfYWRkcik7Ci0gICAgICAgIGZyZWUoY2EpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICBpZihuYW1lbGVuKSB7CisgICAgICBjYS0+YWlfY2Fub25uYW1lID0gKHZvaWQgKikoKGNoYXIgKiljYS0+YWlfYWRkciArIHNzX3NpemUpOworICAgICAgbWVtY3B5KGNhLT5haV9jYW5vbm5hbWUsIGFpLT5haV9jYW5vbm5hbWUsIG5hbWVsZW4pOwogICAgIH0KIAogICAgIC8qIGlmIHRoZSByZXR1cm4gbGlzdCBpcyBlbXB0eSwgdGhpcyBiZWNvbWVzIHRoZSBmaXJzdCBlbGVtZW50ICovCkBAIC0yNTYsNyArMjM5LDYgQEAKICAqICAgICAgIHN0cnVjdCBzb2NrYWRkciAgICAgICphaV9hZGRyOwogICogICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpX25leHQ7CiAgKiAgICAgfTsKLSAqICAgICB0eXBlZGVmIHN0cnVjdCBDdXJsX2FkZHJpbmZvIEN1cmxfYWRkcmluZm87CiAgKgogICogICBob3N0ZW50IGRlZmluZWQgaW4gPG5ldGRiLmg+CiAgKgpAQCAtMjczLDEyICsyNTUsMTIgQEAKICAqICAgICAjZGVmaW5lIGhfYWRkciAgaF9hZGRyX2xpc3RbMF0KICAqLwogCi1DdXJsX2FkZHJpbmZvICoKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICoKIEN1cmxfaGUyYWkoY29uc3Qgc3RydWN0IGhvc3RlbnQgKmhlLCBpbnQgcG9ydCkKIHsKLSAgQ3VybF9hZGRyaW5mbyAqYWk7Ci0gIEN1cmxfYWRkcmluZm8gKnByZXZhaSA9IE5VTEw7Ci0gIEN1cmxfYWRkcmluZm8gKmZpcnN0YWkgPSBOVUxMOworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWk7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpwcmV2YWkgPSBOVUxMOworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqZmlyc3RhaSA9IE5VTEw7CiAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjsKICNpZmRlZiBFTkFCTEVfSVBWNgogICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNjsKQEAgLTI5NCw4ICsyNzYsOCBAQAogICBERUJVR0FTU0VSVCgoaGUtPmhfbmFtZSAhPSBOVUxMKSAmJiAoaGUtPmhfYWRkcl9saXN0ICE9IE5VTEwpKTsKIAogICBmb3IoaSA9IDA7IChjdXJyID0gaGUtPmhfYWRkcl9saXN0W2ldKSAhPSBOVUxMOyBpKyspIHsKLQogICAgIHNpemVfdCBzc19zaXplOworICAgIHNpemVfdCBuYW1lbGVuID0gc3RybGVuKGhlLT5oX25hbWUpICsgMTsgLyogaW5jbHVkZSB6ZXJvIHRlcm1pbmF0aW9uICovCiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgICBpZihoZS0+aF9hZGRydHlwZSA9PSBBRl9JTkVUNikKICAgICAgIHNzX3NpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CkBAIC0zMDMsMjQgKzI4NSwxNyBAQAogI2VuZGlmCiAgICAgICBzc19zaXplID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiAKLSAgICBhaSA9IGNhbGxvYygxLCBzaXplb2YoQ3VybF9hZGRyaW5mbykpOworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSB0byB0b2xkIHRoZSBzdHJ1Y3QsIHRoZSBhZGRyZXNzIGFuZCB0aGUgbmFtZSAqLworICAgIGFpID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgQ3VybF9hZGRyaW5mbykgKyBzc19zaXplICsgbmFtZWxlbik7CiAgICAgaWYoIWFpKSB7CiAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFpLT5haV9jYW5vbm5hbWUgPSBzdHJkdXAoaGUtPmhfbmFtZSk7Ci0gICAgaWYoIWFpLT5haV9jYW5vbm5hbWUpIHsKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICBmcmVlKGFpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBhaS0+YWlfYWRkciA9IGNhbGxvYygxLCBzc19zaXplKTsKLSAgICBpZighYWktPmFpX2FkZHIpIHsKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICBmcmVlKGFpLT5haV9jYW5vbm5hbWUpOwotICAgICAgZnJlZShhaSk7Ci0gICAgICBicmVhazsKLSAgICB9CisgICAgLyogcHV0IHRoZSBhZGRyZXNzIGFmdGVyIHRoZSBzdHJ1Y3QgKi8KKyAgICBhaS0+YWlfYWRkciA9ICh2b2lkICopKChjaGFyICopYWkgKyBzaXplb2Yoc3RydWN0IEN1cmxfYWRkcmluZm8pKTsKKyAgICAvKiB0aGVuIHB1dCB0aGUgbmFtZSBhZnRlciB0aGUgYWRkcmVzcyAqLworICAgIGFpLT5haV9jYW5vbm5hbWUgPSAoY2hhciAqKWFpLT5haV9hZGRyICsgc3Nfc2l6ZTsKKyAgICBtZW1jcHkoYWktPmFpX2Nhbm9ubmFtZSwgaGUtPmhfbmFtZSwgbmFtZWxlbik7CiAKICAgICBpZighZmlyc3RhaSkKICAgICAgIC8qIHN0b3JlIHRoZSBwb2ludGVyIHdlIHdhbnQgdG8gcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiAqLwpAQCAtMzkzLDEwICszNjgsMTAgQEAKICAqIGdpdmVuIGFkZHJlc3MvaG9zdAogICovCiAKLUN1cmxfYWRkcmluZm8gKgorc3RydWN0IEN1cmxfYWRkcmluZm8gKgogQ3VybF9pcDJhZGRyKGludCBhZiwgY29uc3Qgdm9pZCAqaW5hZGRyLCBjb25zdCBjaGFyICpob3N0bmFtZSwgaW50IHBvcnQpCiB7Ci0gIEN1cmxfYWRkcmluZm8gKmFpOworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWk7CiAKICNpZiBkZWZpbmVkKF9fVk1TKSAmJiBcCiAgICAgZGVmaW5lZChfX0lOSVRJQUxfUE9JTlRFUl9TSVpFKSAmJiAoX19JTklUSUFMX1BPSU5URVJfU0laRSA9PSA2NCkKQEAgLTQ2OSw3ICs0NDQsNyBAQAogICogR2l2ZW4gYW4gSVB2NCBvciBJUHY2IGRvdHRlZCBzdHJpbmcgYWRkcmVzcywgdGhpcyBjb252ZXJ0cyBpdCB0byBhIHByb3BlcgogICogYWxsb2NhdGVkIEN1cmxfYWRkcmluZm8gc3RydWN0IGFuZCByZXR1cm5zIGl0LgogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX3N0cjJhZGRyKGNoYXIgKmFkZHJlc3MsIGludCBwb3J0KQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfc3RyMmFkZHIoY2hhciAqYWRkcmVzcywgaW50IHBvcnQpCiB7CiAgIHN0cnVjdCBpbl9hZGRyIGluOwogICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBhZGRyZXNzLCAmaW4pID4gMCkKQEAgLTQ5MiwyMiArNDY3LDE5IEBACiAgKiBzdHJ1Y3QgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIHBhdGguCiAgKiBTZXQgJypsb25ncGF0aCcgdG8gVFJVRSBpZiB0aGUgZXJyb3IgaXMgYSB0b28gbG9uZyBwYXRoLgogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX3VuaXgyYWRkcihjb25zdCBjaGFyICpwYXRoLCBib29sICpsb25ncGF0aCwgYm9vbCBhYnN0cmFjdCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX3VuaXgyYWRkcihjb25zdCBjaGFyICpwYXRoLCBib29sICpsb25ncGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFic3RyYWN0KQogewotICBDdXJsX2FkZHJpbmZvICphaTsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpOwogICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnNhX3VuOwogICBzaXplX3QgcGF0aF9sZW47CiAKICAgKmxvbmdwYXRoID0gRkFMU0U7CiAKLSAgYWkgPSBjYWxsb2MoMSwgc2l6ZW9mKEN1cmxfYWRkcmluZm8pKTsKKyAgYWkgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBDdXJsX2FkZHJpbmZvKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsKICAgaWYoIWFpKQogICAgIHJldHVybiBOVUxMOwotICBhaS0+YWlfYWRkciA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSk7Ci0gIGlmKCFhaS0+YWlfYWRkcikgewotICAgIGZyZWUoYWkpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGFpLT5haV9hZGRyID0gKHZvaWQgKikoKGNoYXIgKilhaSArIHNpemVvZihzdHJ1Y3QgQ3VybF9hZGRyaW5mbykpOwogCiAgIHNhX3VuID0gKHZvaWQgKikgYWktPmFpX2FkZHI7CiAgIHNhX3VuLT5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKQEAgLTUxNSw3ICs0ODcsNiBAQAogICAvKiBzdW5fcGF0aCBtdXN0IGJlIGFibGUgdG8gc3RvcmUgdGhlIE5VTC10ZXJtaW5hdGVkIHBhdGggKi8KICAgcGF0aF9sZW4gPSBzdHJsZW4ocGF0aCkgKyAxOwogICBpZihwYXRoX2xlbiA+IHNpemVvZihzYV91bi0+c3VuX3BhdGgpKSB7Ci0gICAgZnJlZShhaS0+YWlfYWRkcik7CiAgICAgZnJlZShhaSk7CiAgICAgKmxvbmdwYXRoID0gVFJVRTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTU5OCw5ICs1NjksOSBAQAogICogV29yay1hcm91bmRzIHRoZSBzaW42X3BvcnQgaXMgYWx3YXlzIHplcm8gYnVnIG9uIGlPUyA5LjMuMiBhbmQgTWFjIE9TIFgKICAqIDEwLjExLjUuCiAgKi8KLXZvaWQgQ3VybF9hZGRyaW5mb19zZXRfcG9ydChDdXJsX2FkZHJpbmZvICphZGRyaW5mbywgaW50IHBvcnQpCit2b2lkIEN1cmxfYWRkcmluZm9fc2V0X3BvcnQoc3RydWN0IEN1cmxfYWRkcmluZm8gKmFkZHJpbmZvLCBpbnQgcG9ydCkKIHsKLSAgQ3VybF9hZGRyaW5mbyAqY2E7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpjYTsKICAgc3RydWN0IHNvY2thZGRyX2luICphZGRyOwogI2lmZGVmIEVOQUJMRV9JUFY2CiAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9hZGRyaW5mby5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9hZGRyaW5mby5oCmluZGV4IDIwNWUxMjEuLmEwY2FkZTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYWRkcmluZm8uaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2FkZHJpbmZvLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQwLDcgKzQwLDYgQEAKICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAKLQogLyoKICAqIEN1cmxfYWRkcmluZm8gaXMgb3VyIGludGVybmFsIHN0cnVjdCBkZWZpbml0aW9uIHRoYXQgd2UgdXNlIHRvIGFsbG93CiAgKiBjb25zaXN0ZW50IGludGVybmFsIGhhbmRsaW5nIG9mIHRoaXMgZGF0YS4gV2UgdXNlIHRoaXMgZXZlbiB3aGVuIHRoZQpAQCAtNTgsMjkgKzU3LDI5IEBACiAgIHN0cnVjdCBzb2NrYWRkciAgICAgICphaV9hZGRyOwogICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWlfbmV4dDsKIH07Ci10eXBlZGVmIHN0cnVjdCBDdXJsX2FkZHJpbmZvIEN1cmxfYWRkcmluZm87CiAKIHZvaWQKLUN1cmxfZnJlZWFkZHJpbmZvKEN1cmxfYWRkcmluZm8gKmNhaGVhZCk7CitDdXJsX2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqY2FoZWFkKTsKIAogI2lmZGVmIEhBVkVfR0VUQUREUklORk8KIGludAogQ3VybF9nZXRhZGRyaW5mb19leChjb25zdCBjaGFyICpub2RlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2Vydm5hbWUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsCi0gICAgICAgICAgICAgICAgICAgIEN1cmxfYWRkcmluZm8gKipyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqKnJlc3VsdCk7CiAjZW5kaWYKIAotQ3VybF9hZGRyaW5mbyAqCitzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqCiBDdXJsX2hlMmFpKGNvbnN0IHN0cnVjdCBob3N0ZW50ICpoZSwgaW50IHBvcnQpOwogCi1DdXJsX2FkZHJpbmZvICoKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICoKIEN1cmxfaXAyYWRkcihpbnQgYWYsIGNvbnN0IHZvaWQgKmluYWRkciwgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0KTsKIAotQ3VybF9hZGRyaW5mbyAqQ3VybF9zdHIyYWRkcihjaGFyICpkb3R0ZWQsIGludCBwb3J0KTsKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX3N0cjJhZGRyKGNoYXIgKmRvdHRlZCwgaW50IHBvcnQpOwogCiAjaWZkZWYgVVNFX1VOSVhfU09DS0VUUwotQ3VybF9hZGRyaW5mbyAqQ3VybF91bml4MmFkZHIoY29uc3QgY2hhciAqcGF0aCwgYm9vbCAqbG9uZ3BhdGgsIGJvb2wgYWJzdHJhY3QpOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfdW5peDJhZGRyKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgKmxvbmdwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWJzdHJhY3QpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENVUkxERUJVRykgJiYgZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSAmJiBcCkBAIC05OCw3ICs5Nyw3IEBACiAKICNpZmRlZiBIQVZFX0dFVEFERFJJTkZPCiAjaWZkZWYgVVNFX1JFU09MVkVfT05fSVBTCi12b2lkIEN1cmxfYWRkcmluZm9fc2V0X3BvcnQoQ3VybF9hZGRyaW5mbyAqYWRkcmluZm8sIGludCBwb3J0KTsKK3ZvaWQgQ3VybF9hZGRyaW5mb19zZXRfcG9ydChzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWRkcmluZm8sIGludCBwb3J0KTsKICNlbHNlCiAjZGVmaW5lIEN1cmxfYWRkcmluZm9fc2V0X3BvcnQoeCx5KQogI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Jhc2U2NC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9iYXNlNjQuaAppbmRleCA3ZTlmYzI2Li5jZmI2ZWU3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Jhc2U2NC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfYmFzZTY0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfY29uZmlnLmguY21ha2UgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2NvbmZpZy5oLmNtYWtlCmluZGV4IGIyODVjM2YuLjAwYWU2NTggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfY29uZmlnLmguY21ha2UKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9jb25maWcuaC5jbWFrZQpAQCAtMSw1ICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBsaWIvY3VybF9jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBzb21laG93IGJ5IGNtYWtlLiAgKi8KIAorI2luY2x1ZGUgPGNtM3Ava3dpbWwvYWJpLmg+CisKIC8qIHdoZW4gYnVpbGRpbmcgbGliY3VybCBpdHNlbGYgKi8KICNjbWFrZWRlZmluZSBCVUlMRElOR19MSUJDVVJMIDEKIApAQCAtMzMsNiArNTYsOSBAQAogLyogdG8gZGlzYWJsZSBMREFQUyAqLwogI2NtYWtlZGVmaW5lIENVUkxfRElTQUJMRV9MREFQUyAxCiAKKy8qIHRvIGVuYWJsZSBNUVRUICovCisjdW5kZWYgQ1VSTF9FTkFCTEVfTVFUVAorCiAvKiB0byBkaXNhYmxlIFBPUDMgKi8KICNjbWFrZWRlZmluZSBDVVJMX0RJU0FCTEVfUE9QMyAxCiAKQEAgLTY0LDYgKzkwLDkgQEAKICNkZWZpbmUgQ1VSTF9FWFRFUk5fU1lNQk9MCiAjZW5kaWYKIAorLyogQWxsb3cgU01CIHRvIHdvcmsgb24gV2luZG93cyAqLworI2NtYWtlZGVmaW5lIFVTRV9XSU4zMl9DUllQVE8KKwogLyogVXNlIFdpbmRvd3MgTERBUCBpbXBsZW1lbnRhdGlvbiAqLwogI2NtYWtlZGVmaW5lIFVTRV9XSU4zMl9MREFQIDEKIApAQCAtMTMzLDE1ICsxNjIsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9DUllQVE9fSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfREVTX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfRExGQ05fSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzJyBmdW5jdGlvbi4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0VOR0lORV9MT0FEX0JVSUxUSU5fRU5HSU5FUyAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9FUlJOT19IIDEKIApAQCAtMjMyLDYgKzI1NSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHNvY2tuYW1lJyBmdW5jdGlvbi4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0dFVFNPQ0tOQU1FIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZl9uYW1ldG9pbmRleCcgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9JRl9OQU1FVE9JTkRFWCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHd1aWQnIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfR0VUUFdVSUQgMQogCkBAIC0zOTUsOCArNDIxLDggQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGlic3NoMi5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQlNTSDJfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NsJyBsaWJyYXJ5ICgtbHNzbCkuICovCi0jY21ha2VkZWZpbmUgSEFWRV9MSUJTU0wgMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJzc2gvbGlic3NoLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTElCU1NIX0xJQlNTSF9IIDEKIAogLyogaWYgemxpYiBpcyBhdmFpbGFibGUgKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQlogMQpAQCAtNDA0LDkgKzQzMCw2IEBACiAvKiBpZiBicm90bGkgaXMgYXZhaWxhYmxlICovCiAjY21ha2VkZWZpbmUgSEFWRV9CUk9UTEkgMQogCi0vKiBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIExMICovCi0jY21ha2VkZWZpbmUgSEFWRV9MTCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQogCkBAIC00MTQsNyArNDM3LDkgQEAKICNjbWFrZWRlZmluZSBIQVZFX0xPQ0FMVElNRV9SIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBsb25nJyBkYXRhIHR5cGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9MT05HTE9ORyAxCisjaWYgS1dJTUxfQUJJX1NJWkVPRl9MT05HX0xPTkcKKyMgIGRlZmluZSBIQVZFX0xPTkdMT05HIDEKKyNlbmRpZgogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCkBAIC00NDYsOSArNDcxLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9jcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9PUEVOU1NMX0NSWVBUT19IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2VuZ2luZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX09QRU5TU0xfRU5HSU5FX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXJyLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfT1BFTlNTTF9FUlJfSCAxCiAKQEAgLTU3NSw5ICs1OTcsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfU09DS0VUIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBTU0xfZ2V0X3NodXRkb3duJyBmdW5jdGlvbi4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX1NTTF9HRVRfU0hVVERPV04gMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNzbC5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1NTTF9IIDEKIApAQCAtODc5LDM1ICs4OTgsNDYgQEAKIC8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHNlbmQuICovCiAjY21ha2VkZWZpbmUgU0VORF9UWVBFX1JFVFYgJHtTRU5EX1RZUEVfUkVUVn0KIAorLyoKKyBOb3RlOiBTSVpFT0ZfKiB2YXJpYWJsZXMgYXJlIGZldGNoZWQgd2l0aCBDTWFrZSB0aHJvdWdoIGNoZWNrX3R5cGVfc2l6ZSgpLgorIEFzIHBlciBDTWFrZSBkb2N1bWVudGF0aW9uIG9uIENoZWNrVHlwZVNpemUsIEMgcHJlcHJvY2Vzc29yIGNvZGUgaXMKKyBnZW5lcmF0ZWQgYnkgQ01ha2UgaW50byBTSVpFT0ZfKl9DT0RFLiBUaGlzIGlzIHdoYXQgd2UgdXNlIGluIHRoZQorIGZvbGxvd2luZyBzdGF0ZW1lbnRzLgorCisgUmVmZXJlbmNlOiBodHRwczovL2NtYWtlLm9yZy9jbWFrZS9oZWxwL2xhdGVzdC9tb2R1bGUvQ2hlY2tUeXBlU2l6ZS5odG1sCisqLworCiAvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9JTlRfQ09ERUAKKyNkZWZpbmUgU0laRU9GX0lOVCBLV0lNTF9BQklfU0laRU9GX0lOVAogCiAvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi1AU0laRU9GX1NIT1JUX0NPREVACisjZGVmaW5lIFNJWkVPRl9TSE9SVCBLV0lNTF9BQklfU0laRU9GX1NIT1JUCiAKIC8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9MT05HX0NPREVACisjZGVmaW5lIFNJWkVPRl9MT05HIEtXSU1MX0FCSV9TSVpFT0ZfTE9ORwogCiAvKiBUaGUgc2l6ZSBvZiBgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9MT05HX0xPTkdfQ09ERUAKKyNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyBLV0lNTF9BQklfU0laRU9GX0xPTkdfTE9ORwogCiAvKiBUaGUgc2l6ZSBvZiBgX19pbnQ2NCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLUBTSVpFT0ZfX19JTlQ2NF9DT0RFQAorI2lmIEtXSU1MX0FCSV9TSVpFT0ZfX19JTlQ2NAorIyAgZGVmaW5lIFNJWkVPRl9fX0lOVDY0IEtXSU1MX0FCSV9TSVpFT0ZfX19JTlQ2NAorI2VuZGlmCiAKIC8qIFRoZSBzaXplIG9mIGBvZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLUBTSVpFT0ZfT0ZGX1RfQ09ERUAKKyR7U0laRU9GX09GRl9UX0NPREV9CiAKIC8qIFRoZSBzaXplIG9mIGBjdXJsX29mZl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9DVVJMX09GRl9UX0NPREVACiske1NJWkVPRl9DVVJMX09GRl9UX0NPREV9CiAKIC8qIFRoZSBzaXplIG9mIGBzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi1AU0laRU9GX1NJWkVfVF9DT0RFQAorJHtTSVpFT0ZfU0laRV9UX0NPREV9CiAKIC8qIFRoZSBzaXplIG9mIGBzc2l6ZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotQFNJWkVPRl9TU0laRV9UX0NPREVACiske1NJWkVPRl9TU0laRV9UX0NPREV9CiAKIC8qIFRoZSBzaXplIG9mIGB0aW1lX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi1AU0laRU9GX1RJTUVfVF9DT0RFQAorJHtTSVpFT0ZfVElNRV9UX0NPREV9CiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLwogI2NtYWtlZGVmaW5lIFNURENfSEVBREVSUyAxCkBAIC05MzMsMTUgKzk2MywyMSBAQAogLyogaWYgR251VExTIGlzIGVuYWJsZWQgKi8KICNjbWFrZWRlZmluZSBVU0VfR05VVExTIDEKIAotLyogaWYgUG9sYXJTU0wgaXMgZW5hYmxlZCAqLwotI2NtYWtlZGVmaW5lIFVTRV9QT0xBUlNTTCAxCi0KIC8qIGlmIFNlY3VyZSBUcmFuc3BvcnQgaXMgZW5hYmxlZCAqLwogI2NtYWtlZGVmaW5lIFVTRV9TRUNUUkFOU1AgMQogCiAvKiBpZiBtYmVkVExTIGlzIGVuYWJsZWQgKi8KICNjbWFrZWRlZmluZSBVU0VfTUJFRFRMUyAxCiAKKy8qIGlmIEJlYXJTU0wgaXMgZW5hYmxlZCAqLworI2NtYWtlZGVmaW5lIFVTRV9CRUFSU1NMIDEKKworLyogaWYgV29sZlNTTCBpcyBlbmFibGVkICovCisjY21ha2VkZWZpbmUgVVNFX1dPTEZTU0wgMQorCisvKiBpZiBsaWJTU0ggaXMgaW4gdXNlICovCisjY21ha2VkZWZpbmUgVVNFX0xJQlNTSCAxCisKIC8qIGlmIGxpYlNTSDIgaXMgaW4gdXNlICovCiAjY21ha2VkZWZpbmUgVVNFX0xJQlNTSDIgMQogCkBAIC05NTEsNiArOTg3LDkgQEAKIC8qIGlmIE5TUyBpcyBlbmFibGVkICovCiAjY21ha2VkZWZpbmUgVVNFX05TUyAxCiAKKy8qIGlmIHlvdSBoYXZlIHRoZSBQSzExX0NyZWF0ZU1hbmFnZWRHZW5lcmljT2JqZWN0IGZ1bmN0aW9uICovCisjY21ha2VkZWZpbmUgSEFWRV9QSzExX0NSRUFURU1BTkFHRURHRU5FUklDT0JKRUNUIDEKKwogLyogaWYgeW91IHdhbnQgdG8gdXNlIE9wZW5MREFQIGNvZGUgaW5zdGVhZCBvZiBsZWdhY3kgbGRhcCBpbXBsZW1lbnRhdGlvbiAqLwogI2NtYWtlZGVmaW5lIFVTRV9PUEVOTERBUCAxCiAKQEAgLTk2MCw5ICs5OTksMjQgQEAKIC8qIHRvIGVuYWJsZSBOR0hUVFAyICAqLwogI2NtYWtlZGVmaW5lIFVTRV9OR0hUVFAyIDEKIAorLyogdG8gZW5hYmxlIE5HVENQMiAqLworI2NtYWtlZGVmaW5lIFVTRV9OR1RDUDIgMQorCisvKiB0byBlbmFibGUgTkdIVFRQMyAgKi8KKyNjbWFrZWRlZmluZSBVU0VfTkdIVFRQMyAxCisKKy8qIHRvIGVuYWJsZSBxdWljaGUgKi8KKyNjbWFrZWRlZmluZSBVU0VfUVVJQ0hFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHF1aWNoZV9jb25uX3NldF9xbG9nX2ZkIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfUVVJQ0hFX0NPTk5fU0VUX1FMT0dfRkQgMQorCiAvKiBpZiBVbml4IGRvbWFpbiBzb2NrZXRzIGFyZSBlbmFibGVkICAqLwogI2NtYWtlZGVmaW5lIFVTRV9VTklYX1NPQ0tFVFMKIAorLyogdG8gZW5hYmxlIGFsdC1zdmMgKi8KKyNjbWFrZWRlZmluZSBVU0VfQUxUU1ZDIDEKKwogLyogdG8gZW5hYmxlIFNTUEkgc3VwcG9ydCAqLwogI2NtYWtlZGVmaW5lIFVTRV9XSU5ET1dTX1NTUEkgMQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9kZXMuYwppbmRleCBiMTIzYTAwLi4zOWMwZjM1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZGVzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTksIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9kZXMuaAppbmRleCAxMjkwNjBmLi5hNDJlZWI1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2Rlcy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZGVzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTksIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2VuZGlhbi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9lbmRpYW4uYwppbmRleCBiNzU2M2IzLi5hNzc0ZDEzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2VuZGlhbi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZW5kaWFuLmMKQEAgLTgxLDYgKzgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydClidWZbMV0pKTsKIH0KIAorI2lmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID4gNCkKIC8qCiAgKiB3cml0ZTMyX2xlKCkKICAqCkBAIC0xMDAsNyArMTAxLDYgQEAKICAgYnVmZmVyWzNdID0gKGNoYXIpKCh2YWx1ZSAmIDB4RkYwMDAwMDApID4+IDI0KTsKIH0KIAotI2lmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID4gNCkKIC8qCiAgKiBDdXJsX3dyaXRlNjRfbGUoKQogICoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZW5kaWFuLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2VuZGlhbi5oCmluZGV4IDRmMzQ1YTYuLjk4MzBlNTggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZW5kaWFuLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9lbmRpYW4uaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzEsOSArMzEsNiBAQAogLyogQ29udmVydHMgYSAxNi1iaXQgaW50ZWdlciBmcm9tIGJpZyBlbmRpYW4gKi8KIHVuc2lnbmVkIHNob3J0IEN1cmxfcmVhZDE2X2JlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Zik7CiAKLS8qIENvbnZlcnRzIGEgMzItYml0IGludGVnZXIgdG8gbGl0dGxlIGVuZGlhbiAqLwotdm9pZCBDdXJsX3dyaXRlMzJfbGUoY29uc3QgaW50IHZhbHVlLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpOwotCiAjaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPiA0KQogLyogQ29udmVydHMgYSA2NC1iaXQgaW50ZWdlciB0byBsaXR0bGUgZW5kaWFuICovCiAjaWYgZGVmaW5lZChIQVZFX0xPTkdMT05HKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9mbm1hdGNoLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2ZubWF0Y2guaAppbmRleCA2OWZmZTM5Li4zNGZjY2FlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2ZubWF0Y2guaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2ZubWF0Y2guaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9nZXRob3N0bmFtZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9nZXRob3N0bmFtZS5oCmluZGV4IDA3NTE3YzUuLjhhZTE1ZTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfZ2V0aG9zdG5hbWUuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2dldGhvc3RuYW1lLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfaG1hYy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9obWFjLmgKaW5kZXggNzU2ZGM5ZS4uOWI3MGM4NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9obWFjLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9obWFjLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI0LDYgKzI0LDggQEAKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKIAorI2RlZmluZSBITUFDX01ENV9MRU5HVEggMTYKKwogdHlwZWRlZiB2b2lkICAgICgqIEhNQUNfaGluaXRfZnVuYykodm9pZCAqY29udGV4dCk7CiB0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19odXBkYXRlX2Z1bmMpKHZvaWQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCkBAIC0zMiwzNSArMzQsMzggQEAKIAogCiAvKiBQZXItaGFzaCBmdW5jdGlvbiBITUFDIHBhcmFtZXRlcnMuICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgSE1BQ19oaW5pdF9mdW5jICAgICAgIGhtYWNfaGluaXQ7ICAgICAvKiBJbml0aWFsaXplIGNvbnRleHQgcHJvY2VkdXJlLiAqLworc3RydWN0IEhNQUNfcGFyYW1zIHsKKyAgSE1BQ19oaW5pdF9mdW5jCisgIGhtYWNfaGluaXQ7ICAgICAvKiBJbml0aWFsaXplIGNvbnRleHQgcHJvY2VkdXJlLiAqLwogICBITUFDX2h1cGRhdGVfZnVuYyAgICAgaG1hY19odXBkYXRlOyAgIC8qIFVwZGF0ZSBjb250ZXh0IHdpdGggZGF0YS4gKi8KICAgSE1BQ19oZmluYWxfZnVuYyAgICAgIGhtYWNfaGZpbmFsOyAgICAvKiBHZXQgZmluYWwgcmVzdWx0IHByb2NlZHVyZS4gKi8KICAgdW5zaWduZWQgaW50ICAgICAgICAgIGhtYWNfY3R4dHNpemU7ICAvKiBDb250ZXh0IHN0cnVjdHVyZSBzaXplLiAqLwogICB1bnNpZ25lZCBpbnQgICAgICAgICAgaG1hY19tYXhrZXlsZW47IC8qIE1heGltdW0ga2V5IGxlbmd0aCAoYnl0ZXMpLiAqLwogICB1bnNpZ25lZCBpbnQgICAgICAgICAgaG1hY19yZXN1bHRsZW47IC8qIFJlc3VsdCBsZW5ndGggKGJ5dGVzKS4gKi8KLX0gSE1BQ19wYXJhbXM7Cit9OwogCiAKIC8qIEhNQUMgY29tcHV0YXRpb24gY29udGV4dC4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBITUFDX3BhcmFtcyAqaG1hY19oYXNoOyAvKiBIYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24uICovCitzdHJ1Y3QgSE1BQ19jb250ZXh0IHsKKyAgY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zICpobWFjX2hhc2g7IC8qIEhhc2ggZnVuY3Rpb24gZGVmaW5pdGlvbi4gKi8KICAgdm9pZCAqaG1hY19oYXNoY3R4dDE7ICAgICAgICAgLyogSGFzaCBmdW5jdGlvbiBjb250ZXh0IDEuICovCiAgIHZvaWQgKmhtYWNfaGFzaGN0eHQyOyAgICAgICAgIC8qIEhhc2ggZnVuY3Rpb24gY29udGV4dCAyLiAqLwotfSBITUFDX2NvbnRleHQ7Cit9OwogCiAKIC8qIFByb3RvdHlwZXMuICovCi0KLUhNQUNfY29udGV4dCAqIEN1cmxfSE1BQ19pbml0KGNvbnN0IEhNQUNfcGFyYW1zICpoYXNocGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7Ci1pbnQgQ3VybF9ITUFDX3VwZGF0ZShITUFDX2NvbnRleHQgKmNvbnRleHQsCitzdHJ1Y3QgSE1BQ19jb250ZXh0ICpDdXJsX0hNQUNfaW5pdChjb25zdCBzdHJ1Y3QgSE1BQ19wYXJhbXMgKmhhc2hwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKTsKK2ludCBDdXJsX0hNQUNfdXBkYXRlKHN0cnVjdCBITUFDX2NvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbik7Ci1pbnQgQ3VybF9ITUFDX2ZpbmFsKEhNQUNfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqcmVzdWx0KTsKK2ludCBDdXJsX0hNQUNfZmluYWwoc3RydWN0IEhNQUNfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqcmVzdWx0KTsKKworQ1VSTGNvZGUgQ3VybF9obWFjaXQoY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zICpoYXNocGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBzaXplX3Qga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgY29uc3Qgc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQpOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9sZGFwLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2xkYXAuaAppbmRleCA5NGMwMDI5Li45MTJlMTMxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2xkYXAuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX2xkYXAuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tZDQuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWQ0LmgKaW5kZXggMzkyMjAzZi4uYzdiYjIwOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tZDQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21kNC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNCwxNCArMjQsMTMgQEAKIAogI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKIAotI2lmIGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChPUEVOU1NMX05PX01ENCkpIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykpCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKQogCi12b2lkIEN1cmxfbWQ0aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGxlbik7CisjZGVmaW5lIE1ENF9ESUdFU1RfTEVOR1RIIDE2CiAKLSNlbmRpZiAvKiBkZWZpbmVkKFVTRV9OU1MpIHx8IGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKSB8fAotICAgIChkZWZpbmVkKFVTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKE9QRU5TU0xfTk9fTUQ0KSkgfHwKLSAgICAoZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykpICovCit2b2lkIEN1cmxfbWQ0aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuKTsKKworI2VuZGlmIC8qICFkZWZpbmVkKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCkgKi8KIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX01ENF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21kNS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tZDUuaAppbmRleCBhYWYyNWY2Li5lMDZjNjhlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21kNS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWQ1LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMzLDMwICszMywzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKIHR5cGVkZWYgdm9pZCAoKiBDdXJsX01ENV9maW5hbF9mdW5jKSh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIHZvaWQgKmNvbnRleHQpOwogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgTUQ1X3BhcmFtcyB7CiAgIEN1cmxfTUQ1X2luaXRfZnVuYyAgICAgbWQ1X2luaXRfZnVuYzsgICAvKiBJbml0aWFsaXplIGNvbnRleHQgcHJvY2VkdXJlICovCiAgIEN1cmxfTUQ1X3VwZGF0ZV9mdW5jICAgbWQ1X3VwZGF0ZV9mdW5jOyAvKiBVcGRhdGUgY29udGV4dCB3aXRoIGRhdGEgKi8KICAgQ3VybF9NRDVfZmluYWxfZnVuYyAgICBtZDVfZmluYWxfZnVuYzsgIC8qIEdldCBmaW5hbCByZXN1bHQgcHJvY2VkdXJlICovCiAgIHVuc2lnbmVkIGludCAgICAgICAgICAgbWQ1X2N0eHRzaXplOyAgLyogQ29udGV4dCBzdHJ1Y3R1cmUgc2l6ZSAqLwogICB1bnNpZ25lZCBpbnQgICAgICAgICAgIG1kNV9yZXN1bHRsZW47IC8qIFJlc3VsdCBsZW5ndGggKGJ5dGVzKSAqLwotfSBNRDVfcGFyYW1zOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBNRDVfcGFyYW1zICAgICAgKm1kNV9oYXNoOyAgICAgIC8qIEhhc2ggZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworc3RydWN0IE1ENV9jb250ZXh0IHsKKyAgY29uc3Qgc3RydWN0IE1ENV9wYXJhbXMgKm1kNV9oYXNoOyAgICAvKiBIYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KICAgdm9pZCAgICAgICAgICAgICAgICAgICptZDVfaGFzaGN0eDsgICAvKiBIYXNoIGZ1bmN0aW9uIGNvbnRleHQgKi8KLX0gTUQ1X2NvbnRleHQ7Cit9OwogCi1leHRlcm4gY29uc3QgTUQ1X3BhcmFtcyBDdXJsX0RJR0VTVF9NRDVbMV07Ci1leHRlcm4gY29uc3QgSE1BQ19wYXJhbXMgQ3VybF9ITUFDX01ENVsxXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgTUQ1X3BhcmFtcyBDdXJsX0RJR0VTVF9NRDVbMV07CitleHRlcm4gY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zIEN1cmxfSE1BQ19NRDVbMV07CiAKLXZvaWQgQ3VybF9tZDVpdCh1bnNpZ25lZCBjaGFyICpvdXRwdXQsCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQpOwordm9pZCBDdXJsX21kNWl0KHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGxlbik7CiAKLU1ENV9jb250ZXh0ICogQ3VybF9NRDVfaW5pdChjb25zdCBNRDVfcGFyYW1zICptZDVwYXJhbXMpOwotQ1VSTGNvZGUgQ3VybF9NRDVfdXBkYXRlKE1ENV9jb250ZXh0ICpjb250ZXh0LAorc3RydWN0IE1ENV9jb250ZXh0ICpDdXJsX01ENV9pbml0KGNvbnN0IHN0cnVjdCBNRDVfcGFyYW1zICptZDVwYXJhbXMpOworQ1VSTGNvZGUgQ3VybF9NRDVfdXBkYXRlKHN0cnVjdCBNRDVfY29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pOwotQ1VSTGNvZGUgQ3VybF9NRDVfZmluYWwoTUQ1X2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCk7CitDVVJMY29kZSBDdXJsX01ENV9maW5hbChzdHJ1Y3QgTUQ1X2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX21lbXJjaHIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWVtcmNoci5oCmluZGV4IDc0NzUwOWMuLjkwYThhMDcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWVtcmNoci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbWVtcmNoci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tdWx0aWJ5dGUuYwppbmRleCBlNDgzMzRmLi4yYzg5MjViNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tdWx0aWJ5dGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMCwyNCArMjAsMjEgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKgorICogVGhpcyBmaWxlIGlzICdtZW0taW5jbHVkZS1zY2FuJyBjbGVhbi4gU2VlIHRlc3QgMTEzMi4KKyAqLworCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCi0jaW5jbHVkZSA8Y3VybC9jdXJsLmg+Ci0KLSNpZiBkZWZpbmVkKFVTRV9XSU4zMl9JRE4pIHx8ICgoZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApKSAmJiBkZWZpbmVkKFVOSUNPREUpKQotCi0gLyoKLSAgKiBNdWx0aUJ5dGUgY29udmVyc2lvbnMgdXNpbmcgV2luZG93cyBrZXJuZWwzMiBsaWJyYXJ5LgotICAqLworI2lmIGRlZmluZWQoV0lOMzIpCiAKICNpbmNsdWRlICJjdXJsX211bHRpYnl0ZS5oIgotI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAKLS8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisvKgorICogTXVsdGlCeXRlIGNvbnZlcnNpb25zIHVzaW5nIFdpbmRvd3Mga2VybmVsMzIgbGlicmFyeS4KKyAqLwogCi13Y2hhcl90ICpDdXJsX2NvbnZlcnRfVVRGOF90b193Y2hhcihjb25zdCBjaGFyICpzdHJfdXRmOCkKK3djaGFyX3QgKmN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihjb25zdCBjaGFyICpzdHJfdXRmOCkKIHsKICAgd2NoYXJfdCAqc3RyX3cgPSBOVUxMOwogCkBAIC01OSw3ICs1Niw3IEBACiAgIHJldHVybiBzdHJfdzsKIH0KIAotY2hhciAqQ3VybF9jb252ZXJ0X3djaGFyX3RvX1VURjgoY29uc3Qgd2NoYXJfdCAqc3RyX3cpCitjaGFyICpjdXJseF9jb252ZXJ0X3djaGFyX3RvX1VURjgoY29uc3Qgd2NoYXJfdCAqc3RyX3cpCiB7CiAgIGNoYXIgKnN0cl91dGY4ID0gTlVMTDsKIApAQCAtODEsNCArNzgsNzYgQEAKICAgcmV0dXJuIHN0cl91dGY4OwogfQogCi0jZW5kaWYgLyogVVNFX1dJTjMyX0lETiB8fCAoKFVTRV9XSU5ET1dTX1NTUEkgfHwgVVNFX1dJTjMyX0xEQVApICYmIFVOSUNPREUpICovCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xBUkdFX0ZJTEVTKSB8fCBkZWZpbmVkKFVTRV9XSU4zMl9TTUFMTF9GSUxFUykKKworRklMRSAqY3VybHhfd2luMzJfZm9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisjaWZkZWYgX1VOSUNPREUKKyAgRklMRSAqcmVzdWx0ID0gTlVMTDsKKyAgd2NoYXJfdCAqZmlsZW5hbWVfdyA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihmaWxlbmFtZSk7CisgIHdjaGFyX3QgKm1vZGVfdyA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihtb2RlKTsKKyAgaWYoZmlsZW5hbWVfdyAmJiBtb2RlX3cpCisgICAgcmVzdWx0ID0gX3dmb3BlbihmaWxlbmFtZV93LCBtb2RlX3cpOworICBmcmVlKGZpbGVuYW1lX3cpOworICBmcmVlKG1vZGVfdyk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCisKKyAgcmV0dXJuIChmb3BlbikoZmlsZW5hbWUsIG1vZGUpOworfQorCitpbnQgY3VybHhfd2luMzJfc3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Rfc3RhdCAqYnVmZmVyKQoreworICBpbnQgcmVzdWx0ID0gLTE7CisjaWZkZWYgX1VOSUNPREUKKyAgd2NoYXJfdCAqcGF0aF93ID0gY3VybHhfY29udmVydF9VVEY4X3RvX3djaGFyKHBhdGgpOworI2VuZGlmIC8qIF9VTklDT0RFICovCisKKyNpZiBkZWZpbmVkKFVTRV9XSU4zMl9TTUFMTF9GSUxFUykKKyNpZiBkZWZpbmVkKF9VTklDT0RFKQorICBpZihwYXRoX3cpCisgICAgcmVzdWx0ID0gX3dzdGF0KHBhdGhfdywgYnVmZmVyKTsKKyAgZWxzZQorI2VuZGlmIC8qIF9VTklDT0RFICovCisgICAgcmVzdWx0ID0gX3N0YXQocGF0aCwgYnVmZmVyKTsKKyNlbHNlIC8qIFVTRV9XSU4zMl9TTUFMTF9GSUxFUyAqLworI2lmIGRlZmluZWQoX1VOSUNPREUpCisgIGlmKHBhdGhfdykKKyAgICByZXN1bHQgPSBfd3N0YXRpNjQocGF0aF93LCBidWZmZXIpOworICBlbHNlCisjZW5kaWYgLyogX1VOSUNPREUgKi8KKyAgICByZXN1bHQgPSBfc3RhdGk2NChwYXRoLCBidWZmZXIpOworI2VuZGlmIC8qIFVTRV9XSU4zMl9TTUFMTF9GSUxFUyAqLworCisjaWZkZWYgX1VOSUNPREUKKyAgZnJlZShwYXRoX3cpOworI2VuZGlmCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGN1cmx4X3dpbjMyX2FjY2Vzcyhjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0gLTE7CisjaWZkZWYgX1VOSUNPREUKKyAgICB3Y2hhcl90ICpwYXRoX3cgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fd2NoYXIocGF0aCk7CisjZW5kaWYgLyogX1VOSUNPREUgKi8KKworI2lmIGRlZmluZWQoX1VOSUNPREUpCisgICAgaWYocGF0aF93KQorICAgICAgICByZXN1bHQgPSBfd2FjY2VzcyhwYXRoX3csIG1vZGUpOworICAgIGVsc2UKKyNlbmRpZiAvKiBfVU5JQ09ERSAqLworICAgICAgICByZXN1bHQgPSBfYWNjZXNzKHBhdGgsIG1vZGUpOworCisjaWZkZWYgX1VOSUNPREUKKyAgICBmcmVlKHBhdGhfdyk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBVU0VfV0lOMzJfTEFSR0VfRklMRVMgfHwgVVNFX1dJTjMyX1NNQUxMX0ZJTEVTICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9tdWx0aWJ5dGUuaAppbmRleCA2MTVmNWMwLi41ZjhjMDVhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX211bHRpYnl0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbXVsdGlieXRlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIzLDQ2ICsyMyw0NiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKLSNpZiBkZWZpbmVkKFVTRV9XSU4zMl9JRE4pIHx8ICgoZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApKSAmJiBkZWZpbmVkKFVOSUNPREUpKQorI2lmIGRlZmluZWQoV0lOMzIpCiAKICAvKgogICAqIE11bHRpQnl0ZSBjb252ZXJzaW9ucyB1c2luZyBXaW5kb3dzIGtlcm5lbDMyIGxpYnJhcnkuCiAgICovCiAKLXdjaGFyX3QgKkN1cmxfY29udmVydF9VVEY4X3RvX3djaGFyKGNvbnN0IGNoYXIgKnN0cl91dGY4KTsKLWNoYXIgKkN1cmxfY29udmVydF93Y2hhcl90b19VVEY4KGNvbnN0IHdjaGFyX3QgKnN0cl93KTsKK3djaGFyX3QgKmN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihjb25zdCBjaGFyICpzdHJfdXRmOCk7CitjaGFyICpjdXJseF9jb252ZXJ0X3djaGFyX3RvX1VURjgoY29uc3Qgd2NoYXJfdCAqc3RyX3cpOwogCi0jZW5kaWYgLyogVVNFX1dJTjMyX0lETiB8fCAoKFVTRV9XSU5ET1dTX1NTUEkgfHwgVVNFX1dJTjMyX0xEQVApICYmIFVOSUNPREUpICovCi0KLQotI2lmIGRlZmluZWQoVVNFX1dJTjMyX0lETikgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBcCi0gICAgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKKyNlbmRpZiAvKiBXSU4zMiAqLwogCiAvKgotICogTWFjcm9zIEN1cmxfY29udmVydF9VVEY4X3RvX3RjaGFyKCksIEN1cmxfY29udmVydF90Y2hhcl90b19VVEY4KCkKLSAqIGFuZCBDdXJsX3VuaWNvZGVmcmVlKCkgbWFpbiBwdXJwb3NlIGlzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YKKyAqIE1hY3JvcyBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKSwgY3VybHhfY29udmVydF90Y2hhcl90b19VVEY4KCkKKyAqIGFuZCBjdXJseF91bmljb2RlZnJlZSgpIG1haW4gcHVycG9zZSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mCiAgKiBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwgZGlyZWN0aXZlcyBuZWVkZWQgYnkgY29kZSB1c2luZyB0aGVzZQogICogdG8gZGlmZmVyZW50aWF0ZSBVTklDT0RFIGZyb20gbm9uLVVOSUNPREUgYnVpbGRzLgogICoKLSAqIFdoZW4gYnVpbGRpbmcgd2l0aCBVTklDT0RFIGRlZmluZWQsIHRoaXMgdHdvIG1hY3JvcwotICogQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKSBhbmQgQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgoKQorICogV2hlbiBidWlsZGluZyB3aXRoIFVOSUNPREUgZGVmaW5lZCwgdGhlc2UgdHdvIG1hY3JvcworICogY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKCkgYW5kIGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOCgpCiAgKiByZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcmVhIGhvbGRpbmcgcmVzdWx0LgogICogV2hlbiB0aGUgcmVzdWx0IGlzIG5vIGxvbmdlciBuZWVkZWQsIGFsbG9jYXRlZCBtZW1vcnkgaXMgaW50ZW5kZWQKLSAqIHRvIGJlIGZyZWUnZWQgd2l0aCBDdXJsX3VuaWNvZGVmcmVlKCkuCisgKiB0byBiZSBmcmVlJ2VkIHdpdGggY3VybHhfdW5pY29kZWZyZWUoKS4KICAqCiAgKiBXaGVuIGJ1aWxkaW5nIHdpdGhvdXQgVU5JQ09ERSBkZWZpbmVkLCB0aGlzIG1hY3JvcwotICogQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKSBhbmQgQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgoKQotICogcmV0dXJuIHRoZSBwb2ludGVyIHJlY2VpdmVkIGFzIGFyZ3VtZW50LiBDdXJsX3VuaWNvZGVmcmVlKCkgZG9lcworICogY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKCkgYW5kIGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOCgpCisgKiByZXR1cm4gdGhlIHBvaW50ZXIgcmVjZWl2ZWQgYXMgYXJndW1lbnQuIGN1cmx4X3VuaWNvZGVmcmVlKCkgZG9lcwogICogbm8gYWN0dWFsIGZyZWUnaW5nIG9mIHRoaXMgcG9pbnRlciBpdCBpcyBzaW1wbHkgc2V0IHRvIE5VTEwuCiAgKi8KIAotI2lmZGVmIFVOSUNPREUKKyNpZiBkZWZpbmVkKFVOSUNPREUpICYmIGRlZmluZWQoV0lOMzIpCiAKLSNkZWZpbmUgQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIocHRyKSBDdXJsX2NvbnZlcnRfVVRGOF90b193Y2hhcigocHRyKSkKLSNkZWZpbmUgQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgocHRyKSBDdXJsX2NvbnZlcnRfd2NoYXJfdG9fVVRGOCgocHRyKSkKLSNkZWZpbmUgQ3VybF91bmljb2RlZnJlZShwdHIpIFwKLSAgZG8ge2lmKChwdHIpKSB7ZnJlZSgocHRyKSk7IChwdHIpID0gTlVMTDt9fSBXSElMRV9GQUxTRQorI2RlZmluZSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIocHRyKSBjdXJseF9jb252ZXJ0X1VURjhfdG9fd2NoYXIoKHB0cikpCisjZGVmaW5lIGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOChwdHIpIGN1cmx4X2NvbnZlcnRfd2NoYXJfdG9fVVRGOCgocHRyKSkKKyNkZWZpbmUgY3VybHhfdW5pY29kZWZyZWUocHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYocHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChmcmVlKShwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAocHRyKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlKDApCiAKIHR5cGVkZWYgdW5pb24gewogICB1bnNpZ25lZCBzaG9ydCAgICAgICAqdGNoYXJfcHRyOwpAQCAtNzMsMTAgKzczLDEwIEBACiAKICNlbHNlCiAKLSNkZWZpbmUgQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIocHRyKSAocHRyKQotI2RlZmluZSBDdXJsX2NvbnZlcnRfdGNoYXJfdG9fVVRGOChwdHIpIChwdHIpCi0jZGVmaW5lIEN1cmxfdW5pY29kZWZyZWUocHRyKSBcCi0gIGRvIHsocHRyKSA9IE5VTEw7fSBXSElMRV9GQUxTRQorI2RlZmluZSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIocHRyKSAocHRyKQorI2RlZmluZSBjdXJseF9jb252ZXJ0X3RjaGFyX3RvX1VURjgocHRyKSAocHRyKQorI2RlZmluZSBjdXJseF91bmljb2RlZnJlZShwdHIpIFwKKyAgZG8geyhwdHIpID0gTlVMTDt9IHdoaWxlKDApCiAKIHR5cGVkZWYgdW5pb24gewogICBjaGFyICAgICAgICAgICAgICAgICp0Y2hhcl9wdHI7CkBAIC04NSw4ICs4NSw2IEBACiAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0X3RieXRlX3B0cjsKIH0geGNoYXJwX3U7CiAKLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNlbmRpZiAvKiBVU0VfV0lOMzJfSUROIHx8IFVTRV9XSU5ET1dTX1NTUEkgfHwgVVNFX1dJTjMyX0xEQVAgKi8KKyNlbmRpZiAvKiBVTklDT0RFICYmIFdJTjMyICovCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NVUxUSUJZVEVfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9udGxtX2NvcmUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV9jb3JlLmMKaW5kZXggYjZkZjM4Zi4uMGVlZmIxNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9udGxtX2NvcmUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01MiwxOCArNTIsMTggQEAKIAogI2lmICFkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpIHx8IGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKIAotI2lmZGVmIFVTRV9PUEVOU1NMCisjaWYgZGVmaW5lZChVU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChVU0VfV09MRlNTTCkKKworI2lmZGVmIFVTRV9XT0xGU1NMCisjaW5jbHVkZSA8d29sZnNzbC9vcHRpb25zLmg+CisjZW5kaWYKIAogIyAgaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSMgIGlmbmRlZiBPUEVOU1NMX05PX01ENAotIyAgICBpbmNsdWRlIDxvcGVuc3NsL21kNC5oPgotIyAgZWxzZQotIyAgICBpbmNsdWRlICJjdXJsX21kNC5oIgotIyAgZW5kaWYKICMgIGluY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+CiAjICBpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogIyAgaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0jICBpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MDA5MDcwMDFMKQorIyAgaWYgKGRlZmluZWQoT1BFTlNTTF9WRVJTSU9OX05VTUJFUikgJiYgXAorICAgICAgIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgwMDkwNzAwMUwpKSAmJiAhZGVmaW5lZChVU0VfV09MRlNTTCkKICMgICAgZGVmaW5lIERFU19rZXlfc2NoZWR1bGUgZGVzX2tleV9zY2hlZHVsZQogIyAgICBkZWZpbmUgREVTX2NibG9jayBkZXNfY2Jsb2NrCiAjICAgIGRlZmluZSBERVNfc2V0X29kZF9wYXJpdHkgZGVzX3NldF9vZGRfcGFyaXR5CkBAIC03OSwyOSArNzksMjEgQEAKICNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCiAKICMgIGluY2x1ZGUgPG5ldHRsZS9kZXMuaD4KLSMgIGluY2x1ZGUgPG5ldHRsZS9tZDQuaD4KIAogI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQogCiAjICBpbmNsdWRlIDxnY3J5cHQuaD4KLSMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCAxNgotIyAgZGVmaW5lIE1ENF9ESUdFU1RfTEVOR1RIIDE2CiAKICNlbGlmIGRlZmluZWQoVVNFX05TUykKIAogIyAgaW5jbHVkZSA8bnNzLmg+CiAjICBpbmNsdWRlIDxwazExcHViLmg+CiAjICBpbmNsdWRlIDxoYXNodC5oPgotIyAgaW5jbHVkZSAiY3VybF9tZDQuaCIKLSMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCBNRDVfTEVOR1RICiAKICNlbGlmIGRlZmluZWQoVVNFX01CRURUTFMpCiAKICMgIGluY2x1ZGUgPG1iZWR0bHMvZGVzLmg+Ci0jICBpbmNsdWRlIDxtYmVkdGxzL21kNC5oPgotIyAgaWYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykKLSMgICAgaW5jbHVkZSAiY3VybF9tZDQuaCIKLSMgIGVuZGlmCisjICBpbmNsdWRlICJjdXJsX21kNC5oIgogCiAjZWxpZiBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApCiAKQEAgLTExMCw3ICsxMDIsNiBAQAogCiAjZWxpZiBkZWZpbmVkKFVTRV9PUzQwMENSWVBUTykKICMgIGluY2x1ZGUgImNpcGhlci5taWgiICAvKiBtaWgvY2lwaGVyICovCi0jICBpbmNsdWRlICJjdXJsX21kNC5oIgogI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKQogIyAgaW5jbHVkZSA8d2luY3J5cHQuaD4KICNlbHNlCkBAIC0xMjYsMTIgKzExNywxMiBAQAogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAiY3VybF9lbmRpYW4uaCIKICNpbmNsdWRlICJjdXJsX2Rlcy5oIgorI2luY2x1ZGUgImN1cmxfbWQ0LmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKLSNkZWZpbmUgTlRMTV9ITUFDX01ENV9MRU4gICAgICgxNikKICNkZWZpbmUgTlRMTXYyX0JMT0JfU0lHTkFUVVJFICJceDAxXHgwMVx4MDBceDAwIgogI2RlZmluZSBOVExNdjJfQkxPQl9MRU4gICAgICAgKDQ0IC0xNiArIG50bG0tPnRhcmdldF9pbmZvX2xlbiArIDQpCiAKQEAgLTE1MCw3ICsxNDEsNyBAQAogICBrZXlbN10gPSAodW5zaWduZWQgY2hhcikgKChrZXlfNTZbNl0gPDwgMSkgJiAweEZGKTsKIH0KIAotI2lmZGVmIFVTRV9PUEVOU1NMCisjaWYgZGVmaW5lZChVU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChVU0VfV09MRlNTTCkKIC8qCiAgKiBUdXJucyBhIDU2IGJpdCBrZXkgaW50byB0aGUgNjQgYml0LCBvZGQgcGFyaXR5IGtleSBhbmQgc2V0cyB0aGUga2V5LiAgVGhlCiAgKiBrZXkgc2NoZWR1bGUga3MgaXMgYWxzbyBzZXQuCkBAIC0yMTgsNyArMjA5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV81NikKIHsKICAgY29uc3QgQ0tfTUVDSEFOSVNNX1RZUEUgbWVjaCA9IENLTV9ERVNfRUNCOyAvKiBERVMgY2lwaGVyIGluIEVDQiBtb2RlICovCi0gIFBLMTFTbG90SW5mbyAqc2xvdCA9IE5VTEw7CiAgIGNoYXIga2V5WzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhwYW5kZWQgNjQgYml0IGtleSAqLwogICBTRUNJdGVtIGtleV9pdGVtOwogICBQSzExU3ltS2V5ICpzeW1rZXkgPSBOVUxMOwpAQCAtMjI4LDcgKzIxOCw3IEBACiAgIGJvb2wgcnYgPSBGQUxTRTsKIAogICAvKiB1c2UgaW50ZXJuYWwgc2xvdCBmb3IgREVTIGVuY3J5cHRpb24gKHJlcXVpcmVzIE5TUyB0byBiZSBpbml0aWFsaXplZCkgKi8KLSAgc2xvdCA9IFBLMTFfR2V0SW50ZXJuYWxLZXlTbG90KCk7CisgIFBLMTFTbG90SW5mbyAqc2xvdCA9IFBLMTFfR2V0SW50ZXJuYWxLZXlTbG90KCk7CiAgIGlmKCFzbG90KQogICAgIHJldHVybiBGQUxTRTsKIApAQCAtMzU1LDcgKzM0NSw3IEBACiAKICAgLyogQWNxdWlyZSB0aGUgY3J5cHRvIHByb3ZpZGVyICovCiAgIGlmKCFDcnlwdEFjcXVpcmVDb250ZXh0KCZocHJvdiwgTlVMTCwgTlVMTCwgUFJPVl9SU0FfRlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUX1ZFUklGWUNPTlRFWFQgfCBDUllQVF9TSUxFTlQpKQogICAgIHJldHVybiBGQUxTRTsKIAogICAvKiBTZXR1cCB0aGUga2V5IGJsb2Igc3RydWN0dXJlICovCkBAIC00MDAsNyArMzkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcmVzdWx0cykKIHsKLSNpZmRlZiBVU0VfT1BFTlNTTAorI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoVVNFX1dPTEZTU0wpCiAgIERFU19rZXlfc2NoZWR1bGUga3M7CiAKICAgc2V0dXBfZGVzX2tleShrZXlzLCBERVNLRVkoa3MpKTsKQEAgLTQ3NSw3ICs0NjUsNyBAQAogICB7CiAgICAgLyogQ3JlYXRlIExhbk1hbmFnZXIgaGFzaGVkIHBhc3N3b3JkLiAqLwogCi0jaWZkZWYgVVNFX09QRU5TU0wKKyNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKFVTRV9XT0xGU1NMKQogICAgIERFU19rZXlfc2NoZWR1bGUga3M7CiAKICAgICBzZXR1cF9kZXNfa2V5KHB3LCBERVNLRVkoa3MpKTsKQEAgLTU1Myw3ICs1NDMsNyBAQAogICBDVVJMY29kZSByZXN1bHQ7CiAgIGlmKGxlbiA+IFNJWkVfVF9NQVgvMikgLyogYXZvaWQgaW50ZWdlciBvdmVyZmxvdyAqLwogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICBwdyA9IGxlbiA/IG1hbGxvYyhsZW4gKiAyKSA6IHN0cmR1cCgiIik7CisgIHB3ID0gbGVuID8gbWFsbG9jKGxlbiAqIDIpIDogKHVuc2lnbmVkIGNoYXIgKilzdHJkdXAoIiIpOwogICBpZighcHcpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKQEAgLTU2Nyw1NyArNTU3LDEwIEBACiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCi0gIHsKLSAgICAvKiBDcmVhdGUgTlQgaGFzaGVkIHBhc3N3b3JkLiAqLwotI2lmZGVmIFVTRV9PUEVOU1NMCi0jaWYgIWRlZmluZWQoT1BFTlNTTF9OT19NRDQpCi0gICAgTUQ0X0NUWCBNRDRwdzsKLSAgICBNRDRfSW5pdCgmTUQ0cHcpOwotICAgIE1ENF9VcGRhdGUoJk1ENHB3LCBwdywgMiAqIGxlbik7Ci0gICAgTUQ0X0ZpbmFsKG50YnVmZmVyLCAmTUQ0cHcpOwotI2Vsc2UKLSAgICBDdXJsX21kNGl0KG50YnVmZmVyLCBwdywgMiAqIGxlbik7Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCi0gICAgc3RydWN0IG1kNF9jdHggTUQ0cHc7Ci0gICAgbWQ0X2luaXQoJk1ENHB3KTsKLSAgICBtZDRfdXBkYXRlKCZNRDRwdywgKHVuc2lnbmVkIGludCkoMiAqIGxlbiksIHB3KTsKLSAgICBtZDRfZGlnZXN0KCZNRDRwdywgTUQ0X0RJR0VTVF9TSVpFLCBudGJ1ZmZlcik7Ci0jZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFMpCi0gICAgZ2NyeV9tZF9oZF90IE1ENHB3OwotICAgIGdjcnlfbWRfb3BlbigmTUQ0cHcsIEdDUllfTURfTUQ0LCAwKTsKLSAgICBnY3J5X21kX3dyaXRlKE1ENHB3LCBwdywgMiAqIGxlbik7Ci0gICAgbWVtY3B5KG50YnVmZmVyLCBnY3J5X21kX3JlYWQoTUQ0cHcsIDApLCBNRDRfRElHRVNUX0xFTkdUSCk7Ci0gICAgZ2NyeV9tZF9jbG9zZShNRDRwdyk7Ci0jZWxpZiBkZWZpbmVkKFVTRV9OU1MpCi0gICAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwotI2VsaWYgZGVmaW5lZChVU0VfTUJFRFRMUykKLSNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCi0gICAgbWJlZHRsc19tZDQocHcsIDIgKiBsZW4sIG50YnVmZmVyKTsKLSNlbHNlCi0gICAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApCi0gICAgKHZvaWQpQ0NfTUQ0KHB3LCAoQ0NfTE9ORykoMiAqIGxlbiksIG50YnVmZmVyKTsKLSNlbGlmIGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKQotICAgIEN1cmxfbWQ0aXQobnRidWZmZXIsIHB3LCAyICogbGVuKTsKLSNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKLSAgICBIQ1JZUFRQUk9WIGhwcm92OwotICAgIGlmKENyeXB0QWNxdWlyZUNvbnRleHQoJmhwcm92LCBOVUxMLCBOVUxMLCBQUk9WX1JTQV9GVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpIHsKLSAgICAgIEhDUllQVEhBU0ggaGhhc2g7Ci0gICAgICBpZihDcnlwdENyZWF0ZUhhc2goaHByb3YsIENBTEdfTUQ0LCAwLCAwLCAmaGhhc2gpKSB7Ci0gICAgICAgIERXT1JEIGxlbmd0aCA9IDE2OwotICAgICAgICBDcnlwdEhhc2hEYXRhKGhoYXNoLCBwdywgKHVuc2lnbmVkIGludClsZW4gKiAyLCAwKTsKLSAgICAgICAgQ3J5cHRHZXRIYXNoUGFyYW0oaGhhc2gsIEhQX0hBU0hWQUwsIG50YnVmZmVyLCAmbGVuZ3RoLCAwKTsKLSAgICAgICAgQ3J5cHREZXN0cm95SGFzaChoaGFzaCk7Ci0gICAgICB9Ci0gICAgICBDcnlwdFJlbGVhc2VDb250ZXh0KGhwcm92LCAwKTsKLSAgICB9Ci0jZW5kaWYKKyAgLyogQ3JlYXRlIE5UIGhhc2hlZCBwYXNzd29yZC4gKi8KKyAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwogCi0gICAgbWVtc2V0KG50YnVmZmVyICsgMTYsIDAsIDIxIC0gMTYpOwotICB9CisgIG1lbXNldChudGJ1ZmZlciArIDE2LCAwLCAyMSAtIDE2KTsKIAogICBmcmVlKHB3KTsKIApAQCAtNjI2LDI1ICs1NjksNiBAQAogCiAjaWYgZGVmaW5lZChVU0VfTlRMTV9WMikgJiYgIWRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKIAotLyogVGhpcyByZXR1cm5zIHRoZSBITUFDIE1ENSBkaWdlc3QgKi8KLXN0YXRpYyBDVVJMY29kZSBobWFjX21kNShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0KQotewotICBITUFDX2NvbnRleHQgKmN0eHQgPSBDdXJsX0hNQUNfaW5pdChDdXJsX0hNQUNfTUQ1LCBrZXksIGtleWxlbik7Ci0KLSAgaWYoIWN0eHQpCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0KLSAgLyogVXBkYXRlIHRoZSBkaWdlc3Qgd2l0aCB0aGUgZ2l2ZW4gY2hhbGxlbmdlICovCi0gIEN1cmxfSE1BQ191cGRhdGUoY3R4dCwgZGF0YSwgZGF0YWxlbik7Ci0KLSAgLyogRmluYWxpc2UgdGhlIGRpZ2VzdCAqLwotICBDdXJsX0hNQUNfZmluYWwoY3R4dCwgb3V0cHV0KTsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KIC8qIFRoaXMgY3JlYXRlcyB0aGUgTlRMTXYyIGhhc2ggYnkgdXNpbmcgTlRMTSBoYXNoIGFzIHRoZSBrZXkgYW5kIFVuaWNvZGUKICAqICh1cHBlcmNhc2UgVXNlck5hbWUgKyBEb21haW4pIGFzIHRoZSBkYXRhCiAgKi8KQEAgLTY3NCw4ICs1OTgsOCBAQAogICBhc2NpaV91cHBlcmNhc2VfdG9fdW5pY29kZV9sZShpZGVudGl0eSwgdXNlciwgdXNlcmxlbik7CiAgIGFzY2lpX3RvX3VuaWNvZGVfbGUoaWRlbnRpdHkgKyAodXNlcmxlbiA8PCAxKSwgZG9tYWluLCBkb21sZW4pOwogCi0gIHJlc3VsdCA9IGhtYWNfbWQ1KG50bG1oYXNoLCAxNiwgaWRlbnRpdHksIGN1cmx4X3V6dG91aShpZGVudGl0eV9sZW4pLAotICAgICAgICAgICAgICAgICAgICBudGxtdjJoYXNoKTsKKyAgcmVzdWx0ID0gQ3VybF9obWFjaXQoQ3VybF9ITUFDX01ENSwgbnRsbWhhc2gsIDE2LCBpZGVudGl0eSwgaWRlbnRpdHlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBudGxtdjJoYXNoKTsKICAgZnJlZShpZGVudGl0eSk7CiAKICAgcmV0dXJuIHJlc3VsdDsKQEAgLTcyMSw3ICs2NDUsNyBAQAogCiAgIHVuc2lnbmVkIGludCBsZW4gPSAwOwogICB1bnNpZ25lZCBjaGFyICpwdHIgPSBOVUxMOwotICB1bnNpZ25lZCBjaGFyIGhtYWNfb3V0cHV0W05UTE1fSE1BQ19NRDVfTEVOXTsKKyAgdW5zaWduZWQgY2hhciBobWFjX291dHB1dFtITUFDX01ENV9MRU5HVEhdOwogICBjdXJsX29mZl90IHR3OwogCiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwpAQCAtNzQwLDcgKzY2NCw3IEBACiAgICAgdHcgPSAoKGN1cmxfb2ZmX3QpdGltZShOVUxMKSArIENVUkxfT0ZGX1RfQygxMTY0NDQ3MzYwMCkpICogMTAwMDAwMDA7CiAKICAgLyogQ2FsY3VsYXRlIHRoZSByZXNwb25zZSBsZW4gKi8KLSAgbGVuID0gTlRMTV9ITUFDX01ENV9MRU4gKyBOVExNdjJfQkxPQl9MRU47CisgIGxlbiA9IEhNQUNfTUQ1X0xFTkdUSCArIE5UTE12Ml9CTE9CX0xFTjsKIAogICAvKiBBbGxvY2F0ZSB0aGUgcmVzcG9uc2UgKi8KICAgcHRyID0gY2FsbG9jKDEsIGxlbik7CkBAIC03NDgsNyArNjcyLDcgQEAKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICAvKiBDcmVhdGUgdGhlIEJMT0Igc3RydWN0dXJlICovCi0gIG1zbnByaW50ZigoY2hhciAqKXB0ciArIE5UTE1fSE1BQ19NRDVfTEVOLCBOVExNdjJfQkxPQl9MRU4sCisgIG1zbnByaW50ZigoY2hhciAqKXB0ciArIEhNQUNfTUQ1X0xFTkdUSCwgTlRMTXYyX0JMT0JfTEVOLAogICAgICAgICAgICAgIiVjJWMlYyVjIiAgIC8qIE5UTE12Ml9CTE9CX1NJR05BVFVSRSAqLwogICAgICAgICAgICAgIiVjJWMlYyVjIiwgIC8qIFJlc2VydmVkID0gMCAqLwogICAgICAgICAgICAgTlRMTXYyX0JMT0JfU0lHTkFUVVJFWzBdLCBOVExNdjJfQkxPQl9TSUdOQVRVUkVbMV0sCkBAIC03NjEsNyArNjg1LDcgQEAKIAogICAvKiBDb25jYXRlbmF0ZSB0aGUgVHlwZSAyIGNoYWxsZW5nZSB3aXRoIHRoZSBCTE9CIGFuZCBkbyBITUFDIE1ENSAqLwogICBtZW1jcHkocHRyICsgOCwgJm50bG0tPm5vbmNlWzBdLCA4KTsKLSAgcmVzdWx0ID0gaG1hY19tZDUobnRsbXYyaGFzaCwgTlRMTV9ITUFDX01ENV9MRU4sIHB0ciArIDgsCisgIHJlc3VsdCA9IEN1cmxfaG1hY2l0KEN1cmxfSE1BQ19NRDUsIG50bG12Mmhhc2gsIEhNQUNfTUQ1X0xFTkdUSCwgcHRyICsgOCwKICAgICAgICAgICAgICAgICAgICAgTlRMTXYyX0JMT0JfTEVOICsgOCwgaG1hY19vdXRwdXQpOwogICBpZihyZXN1bHQpIHsKICAgICBmcmVlKHB0cik7CkBAIC03NjksNyArNjkzLDcgQEAKICAgfQogCiAgIC8qIENvbmNhdGVuYXRlIHRoZSBITUFDIE1ENSBvdXRwdXQgIHdpdGggdGhlIEJMT0IgKi8KLSAgbWVtY3B5KHB0ciwgaG1hY19vdXRwdXQsIE5UTE1fSE1BQ19NRDVfTEVOKTsKKyAgbWVtY3B5KHB0ciwgaG1hY19vdXRwdXQsIEhNQUNfTUQ1X0xFTkdUSCk7CiAKICAgLyogUmV0dXJuIHRoZSByZXNwb25zZSAqLwogICAqbnRyZXNwID0gcHRyOwpAQCAtODA0LDcgKzcyOCw4IEBACiAgIG1lbWNweSgmZGF0YVswXSwgY2hhbGxlbmdlX3NlcnZlciwgOCk7CiAgIG1lbWNweSgmZGF0YVs4XSwgY2hhbGxlbmdlX2NsaWVudCwgOCk7CiAKLSAgcmVzdWx0ID0gaG1hY19tZDUobnRsbXYyaGFzaCwgMTYsICZkYXRhWzBdLCAxNiwgaG1hY19vdXRwdXQpOworICByZXN1bHQgPSBDdXJsX2htYWNpdChDdXJsX0hNQUNfTUQ1LCBudGxtdjJoYXNoLCAxNiwgJmRhdGFbMF0sIDE2LAorICAgICAgICAgICAgICAgICAgICAgICBobWFjX291dHB1dCk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9udGxtX2NvcmUuaAppbmRleCAzYjRiODA1Li43ODk1YjY0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fY29yZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV9jb3JlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI5LDYgKzI5LDcgQEAKIC8qIElmIE5TUyBpcyB0aGUgZmlyc3QgYXZhaWxhYmxlIFNTTCBiYWNrZW5kIChzZWUgb3JkZXIgaW4gY3VybF9udGxtX2NvcmUuYykKICAgIHRoZW4gaXQgbXVzdCBiZSBpbml0aWFsaXplZCB0byBiZSB1c2VkIGJ5IE5UTE0uICovCiAjaWYgIWRlZmluZWQoVVNFX09QRU5TU0wpICYmIFwKKyAgICAhZGVmaW5lZChVU0VfV09MRlNTTCkgJiYgXAogICAgICFkZWZpbmVkKFVTRV9HTlVUTFNfTkVUVExFKSAmJiBcCiAgICAgIWRlZmluZWQoVVNFX0dOVVRMUykgJiYgXAogICAgIGRlZmluZWQoVVNFX05TUykKQEAgLTM3LDcgKzM4LDEwIEBACiAKICNpZiAhZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBkZWZpbmVkKFVTRV9XSU4zMl9DUllQVE8pCiAKLSNpZmRlZiBVU0VfT1BFTlNTTAorI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoVVNFX1dPTEZTU0wpCisjaWZkZWYgVVNFX1dPTEZTU0wKKyMgIGluY2x1ZGUgPHdvbGZzc2wvb3B0aW9ucy5oPgorI2VuZGlmCiAjICBpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogI2VuZGlmCiAKQEAgLTQ2LDkgKzUwLDkgQEAKICNkZWZpbmUgVVNFX05UUkVTUE9OU0VTCiAKIC8qIERlZmluZSBVU0VfTlRMTTJTRVNTSU9OIGluIG9yZGVyIHRvIG1ha2UgdGhlIHR5cGUtMyBtZXNzYWdlIGluY2x1ZGUgdGhlCi0gICBOVExNMlNlc3Npb24gcmVzcG9uc2UgbWVzc2FnZSwgcmVxdWlyZXMgVVNFX05UUkVTUE9OU0VTIGRlZmluZWQgdG8gMSBhbmQgYQotICAgQ3J5cHRvIGVuZ2luZSB0aGF0IHdlIGhhdmUgY3VybF9zc2xfbWQ1c3VtKCkgZm9yLiAqLwotI2lmIGRlZmluZWQoVVNFX05UUkVTUE9OU0VTKSAmJiAhZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKQorICAgTlRMTTJTZXNzaW9uIHJlc3BvbnNlIG1lc3NhZ2UsIHJlcXVpcmVzIFVTRV9OVFJFU1BPTlNFUyBkZWZpbmVkIHRvIDEgYW5kCisgICBNRDUgc3VwcG9ydCAqLworI2lmIGRlZmluZWQoVVNFX05UUkVTUE9OU0VTKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgpCiAjZGVmaW5lIFVTRV9OVExNMlNFU1NJT04KICNlbmRpZgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX250bG1fd2IuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV93Yi5jCmluZGV4IDgwMjY2ZTIuLjE3YTkyZjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV93Yi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfbnRsbV93Yi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03NiwyMiArNzYsMjIgQEAKICMgIGRlZmluZSBzY2xvc2Vfbm9sb2coeCkgIGNsb3NlKCh4KSkKICNlbmRpZgogCi12b2lkIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbnRsbV93YihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCitzdGF0aWMgdm9pZCBudGxtX3diX2NsZWFudXAoc3RydWN0IG50bG1kYXRhICpudGxtKQogewotICBpZihjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7Ci0gICAgc2Nsb3NlKGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCk7Ci0gICAgY29ubi0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gQ1VSTF9TT0NLRVRfQkFEOworICBpZihudGxtLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgc2Nsb3NlKG50bG0tPm50bG1fYXV0aF9obHByX3NvY2tldCk7CisgICAgbnRsbS0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gQ1VSTF9TT0NLRVRfQkFEOwogICB9CiAKLSAgaWYoY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkKSB7CisgIGlmKG50bG0tPm50bG1fYXV0aF9obHByX3BpZCkgewogICAgIGludCBpOwogICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgcGlkX3QgcmV0ID0gd2FpdHBpZChjb25uLT5udGxtX2F1dGhfaGxwcl9waWQsIE5VTEwsIFdOT0hBTkcpOwotICAgICAgaWYocmV0ID09IGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCB8fCBlcnJubyA9PSBFQ0hJTEQpCisgICAgICBwaWRfdCByZXQgPSB3YWl0cGlkKG50bG0tPm50bG1fYXV0aF9obHByX3BpZCwgTlVMTCwgV05PSEFORyk7CisgICAgICBpZihyZXQgPT0gbnRsbS0+bnRsbV9hdXRoX2hscHJfcGlkIHx8IGVycm5vID09IEVDSElMRCkKICAgICAgICAgYnJlYWs7CiAgICAgICBzd2l0Y2goaSkgewogICAgICAgY2FzZSAwOgotICAgICAgICBraWxsKGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCwgU0lHVEVSTSk7CisgICAgICAgIGtpbGwobnRsbS0+bnRsbV9hdXRoX2hscHJfcGlkLCBTSUdURVJNKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIDE6CiAgICAgICAgIC8qIEdpdmUgdGhlIHByb2Nlc3MgYW5vdGhlciBtb21lbnQgdG8gc2h1dCBkb3duIGNsZWFubHkgYmVmb3JlCkBAIC05OSwyMiArOTksMjEgQEAKICAgICAgICAgQ3VybF93YWl0X21zKDEpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgMjoKLSAgICAgICAga2lsbChjb25uLT5udGxtX2F1dGhfaGxwcl9waWQsIFNJR0tJTEwpOworICAgICAgICBraWxsKG50bG0tPm50bG1fYXV0aF9obHByX3BpZCwgU0lHS0lMTCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAzOgogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9Ci0gICAgY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkID0gMDsKKyAgICBudGxtLT5udGxtX2F1dGhfaGxwcl9waWQgPSAwOwogICB9CiAKLSAgZnJlZShjb25uLT5jaGFsbGVuZ2VfaGVhZGVyKTsKLSAgY29ubi0+Y2hhbGxlbmdlX2hlYWRlciA9IE5VTEw7Ci0gIGZyZWUoY29ubi0+cmVzcG9uc2VfaGVhZGVyKTsKLSAgY29ubi0+cmVzcG9uc2VfaGVhZGVyID0gTlVMTDsKKyAgQ3VybF9zYWZlZnJlZShudGxtLT5jaGFsbGVuZ2UpOworICBDdXJsX3NhZmVmcmVlKG50bG0tPnJlc3BvbnNlKTsKIH0KIAotc3RhdGljIENVUkxjb2RlIG50bG1fd2JfaW5pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJwKQorc3RhdGljIENVUkxjb2RlIG50bG1fd2JfaW5pdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBzdHJ1Y3QgbnRsbWRhdGEgKm50bG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzZXJwKQogewogICBjdXJsX3NvY2tldF90IHNvY2tmZHNbMl07CiAgIHBpZF90IGNoaWxkX3BpZDsKQEAgLTEyOCw5ICsxMjcsMTMgQEAKICNlbmRpZgogICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogCisjaWYgZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAodm9pZCkgZGF0YTsKKyNlbmRpZgorCiAgIC8qIFJldHVybiBpZiBjb21tdW5pY2F0aW9uIHdpdGggbnRsbV9hdXRoIGFscmVhZHkgc2V0IHVwICovCi0gIGlmKGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCAhPSBDVVJMX1NPQ0tFVF9CQUQgfHwKLSAgICAgY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkKQorICBpZihudGxtLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgIT0gQ1VSTF9TT0NLRVRfQkFEIHx8CisgICAgIG50bG0tPm50bG1fYXV0aF9obHByX3BpZCkKICAgICByZXR1cm4gQ1VSTEVfT0s7CiAKICAgdXNlcm5hbWUgPSB1c2VycDsKQEAgLTE4MSwxMyArMTg0LDEzIEBACiAgICAgbnRsbV9hdXRoID0gTlRMTV9XQl9GSUxFOwogCiAgIGlmKGFjY2VzcyhudGxtX2F1dGgsIFhfT0spICE9IDApIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiQ291bGQgbm90IGFjY2VzcyBudGxtX2F1dGg6ICVzIGVycm5vICVkOiAlcyIsCisgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBhY2Nlc3MgbnRsbV9hdXRoOiAlcyBlcnJubyAlZDogJXMiLAogICAgICAgICAgIG50bG1fYXV0aCwgZXJybm8sIEN1cmxfc3RyZXJyb3IoZXJybm8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICBnb3RvIGRvbmU7CiAgIH0KIAotICBpZihzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZmRzKSkgewotICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3Qgb3BlbiBzb2NrZXQgcGFpci4gZXJybm8gJWQ6ICVzIiwKKyAgaWYoQ3VybF9zb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZmRzKSkgeworICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiBzb2NrZXQgcGFpci4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIGdvdG8gZG9uZTsKICAgfQpAQCAtMTk2LDcgKzE5OSw3IEBACiAgIGlmKGNoaWxkX3BpZCA9PSAtMSkgewogICAgIHNjbG9zZShzb2NrZmRzWzBdKTsKICAgICBzY2xvc2Uoc29ja2Zkc1sxXSk7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIkNvdWxkIG5vdCBmb3JrLiBlcnJubyAlZDogJXMiLAorICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgZm9yay4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIGdvdG8gZG9uZTsKICAgfQpAQCAtMjA4LDEzICsyMTEsMTMgQEAKICAgICAvKiBEb24ndCB1c2Ugc2Nsb3NlIGluIHRoZSBjaGlsZCBzaW5jZSBpdCBmb29scyB0aGUgc29ja2V0IGxlYWsgZGV0ZWN0b3IgKi8KICAgICBzY2xvc2Vfbm9sb2coc29ja2Zkc1swXSk7CiAgICAgaWYoZHVwMihzb2NrZmRzWzFdLCBTVERJTl9GSUxFTk8pID09IC0xKSB7Ci0gICAgICBmYWlsZihjb25uLT5kYXRhLCAiQ291bGQgbm90IHJlZGlyZWN0IGNoaWxkIHN0ZGluLiBlcnJubyAlZDogJXMiLAorICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCByZWRpcmVjdCBjaGlsZCBzdGRpbi4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICAgIGVycm5vLCBDdXJsX3N0cmVycm9yKGVycm5vLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICBleGl0KDEpOwogICAgIH0KIAogICAgIGlmKGR1cDIoc29ja2Zkc1sxXSwgU1RET1VUX0ZJTEVOTykgPT0gLTEpIHsKLSAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3QgcmVkaXJlY3QgY2hpbGQgc3Rkb3V0LiBlcnJubyAlZDogJXMiLAorICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCByZWRpcmVjdCBjaGlsZCBzdGRvdXQuIGVycm5vICVkOiAlcyIsCiAgICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgICAgZXhpdCgxKTsKICAgICB9CkBAIC0yMzQsMTQgKzIzNywxNCBAQAogICAgICAgICAgICAgTlVMTCk7CiAKICAgICBzY2xvc2Vfbm9sb2coc29ja2Zkc1sxXSk7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIkNvdWxkIG5vdCBleGVjbCgpLiBlcnJubyAlZDogJXMiLAorICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgZXhlY2woKS4gZXJybm8gJWQ6ICVzIiwKICAgICAgICAgICBlcnJubywgQ3VybF9zdHJlcnJvcihlcnJubywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIGV4aXQoMSk7CiAgIH0KIAogICBzY2xvc2Uoc29ja2Zkc1sxXSk7Ci0gIGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCA9IHNvY2tmZHNbMF07Ci0gIGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCA9IGNoaWxkX3BpZDsKKyAgbnRsbS0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gc29ja2Zkc1swXTsKKyAgbnRsbS0+bnRsbV9hdXRoX2hscHJfcGlkID0gY2hpbGRfcGlkOwogICBmcmVlKGRvbWFpbik7CiAgIGZyZWUobnRsbV9hdXRoX2FsbG9jKTsKICAgcmV0dXJuIENVUkxFX09LOwpAQCAtMjU1LDE3ICsyNTgsMTcgQEAKIC8qIGlmIGxhcmdlciB0aGFuIHRoaXMsIHNvbWV0aGluZyBpcyBzZXJpb3VzbHkgd3JvbmcgKi8KICNkZWZpbmUgTUFYX05UTE1fV0JfUkVTUE9OU0UgMTAwMDAwCiAKLXN0YXRpYyBDVVJMY29kZSBudGxtX3diX3Jlc3BvbnNlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKK3N0YXRpYyBDVVJMY29kZSBudGxtX3diX3Jlc3BvbnNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHN0cnVjdCBudGxtZGF0YSAqbnRsbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0LCBjdXJsbnRsbSBzdGF0ZSkKIHsKLSAgY2hhciAqYnVmID0gbWFsbG9jKE5UTE1fQlVGU0laRSk7CiAgIHNpemVfdCBsZW5faW4gPSBzdHJsZW4oaW5wdXQpLCBsZW5fb3V0ID0gMDsKLQotICBpZighYnVmKQotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBzdHJ1Y3QgZHluYnVmIGI7CisgIGNoYXIgKnB0ciA9IE5VTEw7CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopZGF0YS0+c3RhdGUuYnVmZmVyOworICBDdXJsX2R5bl9pbml0KCZiLCBNQVhfTlRMTV9XQl9SRVNQT05TRSk7CiAKICAgd2hpbGUobGVuX2luID4gMCkgewotICAgIHNzaXplX3Qgd3JpdHRlbiA9IHN3cml0ZShjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQsIGlucHV0LCBsZW5faW4pOworICAgIHNzaXplX3Qgd3JpdHRlbiA9IHN3cml0ZShudGxtLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQsIGlucHV0LCBsZW5faW4pOwogICAgIGlmKHdyaXR0ZW4gPT0gLTEpIHsKICAgICAgIC8qIEludGVycnVwdGVkIGJ5IGEgc2lnbmFsLCByZXRyeSBpdCAqLwogICAgICAgaWYoZXJybm8gPT0gRUlOVFIpCkBAIC0yNzgsMTAgKzI4MSw4IEBACiAgIH0KICAgLyogUmVhZCBvbmUgbGluZSAqLwogICB3aGlsZSgxKSB7Ci0gICAgc3NpemVfdCBzaXplOwotICAgIGNoYXIgKm5ld2J1ZjsKLQotICAgIHNpemUgPSBzcmVhZChjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQsIGJ1ZiArIGxlbl9vdXQsIE5UTE1fQlVGU0laRSk7CisgICAgc3NpemVfdCBzaXplID0KKyAgICAgIHNyZWFkKG50bG0tPm50bG1fYXV0aF9obHByX3NvY2tldCwgYnVmLCBkYXRhLT5zZXQuYnVmZmVyX3NpemUpOwogICAgIGlmKHNpemUgPT0gLTEpIHsKICAgICAgIGlmKGVycm5vID09IEVJTlRSKQogICAgICAgICBjb250aW51ZTsKQEAgLTI5MCw0OCArMjkxLDQxIEBACiAgICAgZWxzZSBpZihzaXplID09IDApCiAgICAgICBnb3RvIGRvbmU7CiAKLSAgICBsZW5fb3V0ICs9IHNpemU7Ci0gICAgaWYoYnVmW2xlbl9vdXQgLSAxXSA9PSAnXG4nKSB7Ci0gICAgICBidWZbbGVuX291dCAtIDFdID0gJ1wwJzsKLSAgICAgIGJyZWFrOworICAgIGlmKEN1cmxfZHluX2FkZG4oJmIsIGJ1Ziwgc2l6ZSkpCisgICAgICBnb3RvIGRvbmU7CisKKyAgICBsZW5fb3V0ID0gQ3VybF9keW5fbGVuKCZiKTsKKyAgICBwdHIgPSBDdXJsX2R5bl9wdHIoJmIpOworICAgIGlmKGxlbl9vdXQgJiYgcHRyW2xlbl9vdXQgLSAxXSA9PSAnXG4nKSB7CisgICAgICBwdHJbbGVuX291dCAtIDFdID0gJ1wwJzsKKyAgICAgIGJyZWFrOyAvKiBkb25lISAqLwogICAgIH0KLQotICAgIGlmKGxlbl9vdXQgPiBNQVhfTlRMTV9XQl9SRVNQT05TRSkgewotICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInRvbyBsYXJnZSBudGxtX3diIHJlc3BvbnNlISIpOwotICAgICAgZnJlZShidWYpOwotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotCi0gICAgbmV3YnVmID0gQ3VybF9zYWZlcmVhbGxvYyhidWYsIGxlbl9vdXQgKyBOVExNX0JVRlNJWkUpOwotICAgIGlmKCFuZXdidWYpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQotICAgIGJ1ZiA9IG5ld2J1ZjsKKyAgICAvKiBsb29wICovCiAgIH0KIAogICAvKiBTYW1iYS93aW5iaW5kIGluc3RhbGxlZCBidXQgbm90IGNvbmZpZ3VyZWQgKi8KICAgaWYoc3RhdGUgPT0gTlRMTVNUQVRFX1RZUEUxICYmCiAgICAgIGxlbl9vdXQgPT0gMyAmJgotICAgICBidWZbMF0gPT0gJ1AnICYmIGJ1ZlsxXSA9PSAnVycpCisgICAgIHB0clswXSA9PSAnUCcgJiYgcHRyWzFdID09ICdXJykKICAgICBnb3RvIGRvbmU7CiAgIC8qIGludmFsaWQgcmVzcG9uc2UgKi8KICAgaWYobGVuX291dCA8IDQpCiAgICAgZ290byBkb25lOwogICBpZihzdGF0ZSA9PSBOVExNU1RBVEVfVFlQRTEgJiYKLSAgICAgKGJ1ZlswXSE9J1knIHx8IGJ1ZlsxXSE9J1InIHx8IGJ1ZlsyXSE9JyAnKSkKKyAgICAgKHB0clswXSE9J1knIHx8IHB0clsxXSE9J1InIHx8IHB0clsyXSE9JyAnKSkKICAgICBnb3RvIGRvbmU7CiAgIGlmKHN0YXRlID09IE5UTE1TVEFURV9UWVBFMiAmJgotICAgICAoYnVmWzBdIT0nSycgfHwgYnVmWzFdIT0nSycgfHwgYnVmWzJdIT0nICcpICYmCi0gICAgIChidWZbMF0hPSdBJyB8fCBidWZbMV0hPSdGJyB8fCBidWZbMl0hPScgJykpCisgICAgIChwdHJbMF0hPSdLJyB8fCBwdHJbMV0hPSdLJyB8fCBwdHJbMl0hPScgJykgJiYKKyAgICAgKHB0clswXSE9J0EnIHx8IHB0clsxXSE9J0YnIHx8IHB0clsyXSE9JyAnKSkKICAgICBnb3RvIGRvbmU7CiAKLSAgY29ubi0+cmVzcG9uc2VfaGVhZGVyID0gYXByaW50ZigiTlRMTSAlLipzIiwgbGVuX291dCAtIDQsIGJ1ZiArIDMpOwotICBmcmVlKGJ1Zik7Ci0gIGlmKCFjb25uLT5yZXNwb25zZV9oZWFkZXIpCisgIG50bG0tPnJlc3BvbnNlID0gc3RyZHVwKHB0ciArIDMpOworICBDdXJsX2R5bl9mcmVlKCZiKTsKKyAgaWYoIW50bG0tPnJlc3BvbnNlKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICByZXR1cm4gQ1VSTEVfT0s7CiBkb25lOgotICBmcmVlKGJ1Zik7CisgIEN1cmxfZHluX2ZyZWUoJmIpOwogICByZXR1cm4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CiB9CiAKQEAgLTMzOSw2ICszMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJveHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaGVhZGVyKQogeworICBzdHJ1Y3QgbnRsbWRhdGEgKm50bG0gPSBwcm94eSA/ICZjb25uLT5wcm94eW50bG0gOiAmY29ubi0+bnRsbTsKICAgY3VybG50bG0gKnN0YXRlID0gcHJveHkgPyAmY29ubi0+cHJveHlfbnRsbV9zdGF0ZSA6ICZjb25uLT5odHRwX250bG1fc3RhdGU7CiAKICAgaWYoIWNoZWNrcHJlZml4KCJOVExNIiwgaGVhZGVyKSkKQEAgLTM0OSw4ICszNDQsOCBAQAogICAgIGhlYWRlcisrOwogCiAgIGlmKCpoZWFkZXIpIHsKLSAgICBjb25uLT5jaGFsbGVuZ2VfaGVhZGVyID0gc3RyZHVwKGhlYWRlcik7Ci0gICAgaWYoIWNvbm4tPmNoYWxsZW5nZV9oZWFkZXIpCisgICAgbnRsbS0+Y2hhbGxlbmdlID0gc3RyZHVwKGhlYWRlcik7CisgICAgaWYoIW50bG0tPmNoYWxsZW5nZSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgICAgKnN0YXRlID0gTlRMTVNUQVRFX1RZUEUyOyAvKiBXZSBnb3QgYSB0eXBlLTIgbWVzc2FnZSAqLwpAQCAtMzgxLDMyICszNzYsMzggQEAKICAqIFRoaXMgaXMgZm9yIGNyZWF0aW5nIG50bG0gaGVhZGVyIG91dHB1dCBieSBkZWxlZ2F0aW5nIGNoYWxsZW5nZS9yZXNwb25zZQogICogdG8gU2FtYmEncyB3aW5iaW5kIGRhZW1vbiBoZWxwZXIgbnRsbV9hdXRoLgogICovCi1DVVJMY29kZSBDdXJsX291dHB1dF9udGxtX3diKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJveHkpCitDVVJMY29kZSBDdXJsX291dHB1dF9udGxtX3diKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSkKIHsKICAgLyogcG9pbnQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIgdGhhdCBob2xkcyB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlCiAgICAgIHNlcnZlciwgd2hpY2ggaXMgZm9yIGEgcGxhaW4gaG9zdCBvciBmb3IgYSBIVFRQIHByb3h5ICovCiAgIGNoYXIgKiphbGxvY3VzZXJwd2Q7CiAgIC8qIHBvaW50IHRvIHRoZSBuYW1lIGFuZCBwYXNzd29yZCBmb3IgdGhpcyAqLwogICBjb25zdCBjaGFyICp1c2VycDsKKyAgc3RydWN0IG50bG1kYXRhICpudGxtOwogICBjdXJsbnRsbSAqc3RhdGU7CiAgIHN0cnVjdCBhdXRoICphdXRocDsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKICAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7Ci0gIGNoYXIgKmlucHV0OwogCiAgIERFQlVHQVNTRVJUKGNvbm4pOwogICBERUJVR0FTU0VSVChjb25uLT5kYXRhKTsKIAogICBpZihwcm94eSkgewotICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2Q7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgIGFsbG9jdXNlcnB3ZCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZDsKICAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKKyAgICBudGxtID0gJmNvbm4tPnByb3h5bnRsbTsKICAgICBzdGF0ZSA9ICZjb25uLT5wcm94eV9udGxtX3N0YXRlOwogICAgIGF1dGhwID0gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKKyNlbHNlCisgICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKyNlbmRpZgogICB9CiAgIGVsc2UgewotICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci51c2VycHdkOworICAgIGFsbG9jdXNlcnB3ZCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2Q7CiAgICAgdXNlcnAgPSBjb25uLT51c2VyOworICAgIG50bG0gPSAmY29ubi0+bnRsbTsKICAgICBzdGF0ZSA9ICZjb25uLT5odHRwX250bG1fc3RhdGU7CiAgICAgYXV0aHAgPSAmY29ubi0+ZGF0YS0+c3RhdGUuYXV0aGhvc3Q7CiAgIH0KQEAgLTQzMiwzOCArNDMzLDM2IEBACiAgICAgICogcmVxdWVzdCBoYW5kbGluZyBwcm9jZXNzLgogICAgICAqLwogICAgIC8qIENyZWF0ZSBjb21tdW5pY2F0aW9uIHdpdGggbnRsbV9hdXRoICovCi0gICAgcmVzID0gbnRsbV93Yl9pbml0KGNvbm4sIHVzZXJwKTsKKyAgICByZXMgPSBudGxtX3diX2luaXQoY29ubi0+ZGF0YSwgbnRsbSwgdXNlcnApOwogICAgIGlmKHJlcykKICAgICAgIHJldHVybiByZXM7Ci0gICAgcmVzID0gbnRsbV93Yl9yZXNwb25zZShjb25uLCAiWVJcbiIsICpzdGF0ZSk7CisgICAgcmVzID0gbnRsbV93Yl9yZXNwb25zZShjb25uLT5kYXRhLCBudGxtLCAiWVJcbiIsICpzdGF0ZSk7CiAgICAgaWYocmVzKQogICAgICAgcmV0dXJuIHJlczsKIAogICAgIGZyZWUoKmFsbG9jdXNlcnB3ZCk7Ci0gICAgKmFsbG9jdXNlcnB3ZCA9IGFwcmludGYoIiVzQXV0aG9yaXphdGlvbjogJXNcclxuIiwKKyAgICAqYWxsb2N1c2VycHdkID0gYXByaW50ZigiJXNBdXRob3JpemF0aW9uOiBOVExNICVzXHJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHkgPyAiUHJveHktIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlc3BvbnNlX2hlYWRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRsbS0+cmVzcG9uc2UpOwogICAgIERFQlVHX09VVChmcHJpbnRmKHN0ZGVyciwgIioqKiogSGVhZGVyICVzXG4gIiwgKmFsbG9jdXNlcnB3ZCkpOwotICAgIGZyZWUoY29ubi0+cmVzcG9uc2VfaGVhZGVyKTsKKyAgICBDdXJsX3NhZmVmcmVlKG50bG0tPnJlc3BvbnNlKTsKICAgICBpZighKmFsbG9jdXNlcnB3ZCkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgIGNvbm4tPnJlc3BvbnNlX2hlYWRlciA9IE5VTEw7CiAgICAgYnJlYWs7CiAKLSAgY2FzZSBOVExNU1RBVEVfVFlQRTI6Ci0gICAgaW5wdXQgPSBhcHJpbnRmKCJUVCAlc1xuIiwgY29ubi0+Y2hhbGxlbmdlX2hlYWRlcik7CisgIGNhc2UgTlRMTVNUQVRFX1RZUEUyOiB7CisgICAgY2hhciAqaW5wdXQgPSBhcHJpbnRmKCJUVCAlc1xuIiwgbnRsbS0+Y2hhbGxlbmdlKTsKICAgICBpZighaW5wdXQpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICByZXMgPSBudGxtX3diX3Jlc3BvbnNlKGNvbm4sIGlucHV0LCAqc3RhdGUpOworICAgIHJlcyA9IG50bG1fd2JfcmVzcG9uc2UoY29ubi0+ZGF0YSwgbnRsbSwgaW5wdXQsICpzdGF0ZSk7CiAgICAgZnJlZShpbnB1dCk7Ci0gICAgaW5wdXQgPSBOVUxMOwogICAgIGlmKHJlcykKICAgICAgIHJldHVybiByZXM7CiAKICAgICBmcmVlKCphbGxvY3VzZXJwd2QpOwotICAgICphbGxvY3VzZXJwd2QgPSBhcHJpbnRmKCIlc0F1dGhvcml6YXRpb246ICVzXHJcbiIsCisgICAgKmFsbG9jdXNlcnB3ZCA9IGFwcmludGYoIiVzQXV0aG9yaXphdGlvbjogTlRMTSAlc1xyXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5ID8gIlByb3h5LSIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5yZXNwb25zZV9oZWFkZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50bG0tPnJlc3BvbnNlKTsKICAgICBERUJVR19PVVQoZnByaW50ZihzdGRlcnIsICIqKioqICVzXG4gIiwgKmFsbG9jdXNlcnB3ZCkpOwogICAgICpzdGF0ZSA9IE5UTE1TVEFURV9UWVBFMzsgLyogd2Ugc2VudCBhIHR5cGUtMyAqLwogICAgIGF1dGhwLT5kb25lID0gVFJVRTsKQEAgLTQ3MSw3ICs0NzAsNyBAQAogICAgIGlmKCEqYWxsb2N1c2VycHdkKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgYnJlYWs7Ci0KKyAgfQogICBjYXNlIE5UTE1TVEFURV9UWVBFMzoKICAgICAvKiBjb25uZWN0aW9uIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZCwKICAgICAgKiBkb24ndCBzZW5kIGEgaGVhZGVyIGluIGZ1dHVyZSByZXF1ZXN0cyAqLwpAQCAtNDg2LDQgKzQ4NSwxMCBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKK3ZvaWQgQ3VybF9odHRwX2F1dGhfY2xlYW51cF9udGxtX3diKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgbnRsbV93Yl9jbGVhbnVwKCZjb25uLT5udGxtKTsKKyAgbnRsbV93Yl9jbGVhbnVwKCZjb25uLT5wcm94eW50bG0pOworfQorCiAjZW5kaWYgLyogIUNVUkxfRElTQUJMRV9IVFRQICYmIFVTRV9OVExNICYmIE5UTE1fV0JfRU5BQkxFRCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9wYXRoLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3BhdGguYwppbmRleCA4NWRkZGNlLi5mYmQ5OGNiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3BhdGguYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3BhdGguYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDIsNyArNDIsNyBAQAogICBzaXplX3Qgd29ya2luZ19wYXRoX2xlbjsKICAgQ1VSTGNvZGUgcmVzdWx0ID0KICAgICBDdXJsX3VybGRlY29kZShkYXRhLCBkYXRhLT5zdGF0ZS51cC5wYXRoLCAwLCAmd29ya2luZ19wYXRoLAotICAgICAgICAgICAgICAgICAgICZ3b3JraW5nX3BhdGhfbGVuLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgJndvcmtpbmdfcGF0aF9sZW4sIFJFSkVDVF9aRVJPKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAgICAgaWYoKHdvcmtpbmdfcGF0aF9sZW4gPiAzKSAmJiAoIW1lbWNtcCh3b3JraW5nX3BhdGgsICIvfi8iLCAzKSkpCiAgICAgICAvKiBJdCBpcyByZWZlcmVuY2VkIHRvIHRoZSBob21lIGRpcmVjdG9yeSwgc28gc3RyaXAgdGhlIGxlYWRpbmcgJy9+LycgKi8KLSAgICAgIG1lbWNweShyZWFsX3BhdGgsIHdvcmtpbmdfcGF0aCArIDMsIDQgKyB3b3JraW5nX3BhdGhfbGVuLTMpOworICAgICAgbWVtY3B5KHJlYWxfcGF0aCwgd29ya2luZ19wYXRoICsgMywgd29ya2luZ19wYXRoX2xlbiAtIDIpOwogICAgIGVsc2UKICAgICAgIG1lbWNweShyZWFsX3BhdGgsIHdvcmtpbmdfcGF0aCwgMSArIHdvcmtpbmdfcGF0aF9sZW4pOwogICB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3J0bXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5jCmluZGV4IDE2YjFkZTEuLmRmOGYyYjEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5jCkBAIC0xOTksMTMgKzE5OSwxMyBAQAogICAgIFJUTVBfRnJlZShyKTsKICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKICAgfQotICBjb25uLT5wcm90by5nZW5lcmljID0gcjsKKyAgY29ubi0+cHJvdG8ucnRtcCA9IHI7CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAogc3RhdGljIENVUkxjb2RlIHJ0bXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIFJUTVAgKnIgPSBjb25uLT5wcm90by5nZW5lcmljOworICBSVE1QICpyID0gY29ubi0+cHJvdG8ucnRtcDsKICAgU0VUX1JDVlRJTUVPKHR2LCAxMCk7CiAKICAgci0+bV9zYi5zYl9zb2NrZXQgPSAoaW50KWNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwpAQCAtMjQwLDcgKzI0MCw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgcnRtcF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLnJ0bXA7CiAKICAgaWYoIVJUTVBfQ29ubmVjdFN0cmVhbShyLCAwKSkKICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CkBAIC0yNjgsMTAgKzI2OCwxMCBAQAogc3RhdGljIENVUkxjb2RlIHJ0bXBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKQogewotICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLnJ0bXA7CiAgICh2b2lkKWRlYWRfY29ubmVjdGlvbjsKICAgaWYocikgewotICAgIGNvbm4tPnByb3RvLmdlbmVyaWMgPSBOVUxMOworICAgIGNvbm4tPnByb3RvLnJ0bXAgPSBOVUxMOwogICAgIFJUTVBfQ2xvc2Uocik7CiAgICAgUlRNUF9GcmVlKHIpOwogICB9CkBAIC0yODEsNyArMjgxLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJ0bXBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsIGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQogewotICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLnJ0bXA7CiAgIHNzaXplX3QgbnJlYWQ7CiAKICAgKHZvaWQpc29ja2luZGV4OyAvKiB1bnVzZWQgKi8KQEAgLTMwMiw3ICszMDIsNyBAQAogc3RhdGljIHNzaXplX3QgcnRtcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7Ci0gIFJUTVAgKnIgPSBjb25uLT5wcm90by5nZW5lcmljOworICBSVE1QICpyID0gY29ubi0+cHJvdG8ucnRtcDsKICAgc3NpemVfdCBudW07CiAKICAgKHZvaWQpc29ja2luZGV4OyAvKiB1bnVzZWQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfcnRtcC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9ydG1wLmgKaW5kZXggMzMwNmUyMi4uODZhMDEzOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9ydG1wLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9ydG1wLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb3dhcmQgQ2h1LCA8aHljQGhpZ2hsYW5kc3VuLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTksIEhvd2FyZCBDaHUsIDxoeWNAaGlnaGxhbmRzdW4uY29tPgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3Nhc2wuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2FzbC5jCmluZGV4IDAxOGU0MjIuLjgzZmU4OTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2FzbC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2FzbC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNjQsMTQgKzI2NCwyMCBAQAogICBzaXplX3QgbGVuID0gMDsKICAgc2FzbHN0YXRlIHN0YXRlMSA9IFNBU0xfU1RPUDsKICAgc2FzbHN0YXRlIHN0YXRlMiA9IFNBU0xfRklOQUw7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKICAgICBjb25uLT5ob3N0Lm5hbWU7CiAgIGNvbnN0IGxvbmcgaW50IHBvcnQgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0OworI2VuZGlmCiAjaWYgZGVmaW5lZChVU0VfS0VSQkVST1M1KSB8fCBkZWZpbmVkKFVTRV9OVExNKQogICBjb25zdCBjaGFyICpzZXJ2aWNlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VSVklDRV9OQU1FXSA/CiAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VSVklDRV9OQU1FXSA6CiAgICAgc2FzbC0+cGFyYW1zLT5zZXJ2aWNlOwogI2VuZGlmCisgIGNvbnN0IGNoYXIgKm9hdXRoX2JlYXJlciA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0JFQVJFUl07CiAKICAgc2FzbC0+Zm9yY2VfaXIgPSBmb3JjZV9pcjsgICAgLyogTGF0Y2ggZm9yIGZ1dHVyZSB1c2UgKi8KICAgc2FzbC0+YXV0aHVzZWQgPSAwOyAgICAgICAgICAgLyogTm8gbWVjaGFuaXNtIHVzZWQgeWV0ICovCkBAIC0zNDEsNyArMzQ3LDcgQEAKICAgICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICBpZigoZW5hYmxlZG1lY2hzICYgU0FTTF9NRUNIX09BVVRIQkVBUkVSKSAmJiBjb25uLT5vYXV0aF9iZWFyZXIpIHsKKyAgICBpZigoZW5hYmxlZG1lY2hzICYgU0FTTF9NRUNIX09BVVRIQkVBUkVSKSAmJiBvYXV0aF9iZWFyZXIpIHsKICAgICAgIG1lY2ggPSBTQVNMX01FQ0hfU1RSSU5HX09BVVRIQkVBUkVSOwogICAgICAgc3RhdGUxID0gU0FTTF9PQVVUSDI7CiAgICAgICBzdGF0ZTIgPSBTQVNMX09BVVRIMl9SRVNQOwpAQCAtMzUxLDE3ICszNTcsMTcgQEAKICAgICAgICAgcmVzdWx0ID0gQ3VybF9hdXRoX2NyZWF0ZV9vYXV0aF9iZWFyZXJfbWVzc2FnZShkYXRhLCBjb25uLT51c2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+b2F1dGhfYmVhcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9hdXRoX2JlYXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcCwgJmxlbik7CiAgICAgfQotICAgIGVsc2UgaWYoKGVuYWJsZWRtZWNocyAmIFNBU0xfTUVDSF9YT0FVVEgyKSAmJiBjb25uLT5vYXV0aF9iZWFyZXIpIHsKKyAgICBlbHNlIGlmKChlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfWE9BVVRIMikgJiYgb2F1dGhfYmVhcmVyKSB7CiAgICAgICBtZWNoID0gU0FTTF9NRUNIX1NUUklOR19YT0FVVEgyOwogICAgICAgc3RhdGUxID0gU0FTTF9PQVVUSDI7CiAgICAgICBzYXNsLT5hdXRodXNlZCA9IFNBU0xfTUVDSF9YT0FVVEgyOwogCiAgICAgICBpZihmb3JjZV9pciB8fCBkYXRhLT5zZXQuc2FzbF9pcikKICAgICAgICAgcmVzdWx0ID0gQ3VybF9hdXRoX2NyZWF0ZV94b2F1dGhfYmVhcmVyX21lc3NhZ2UoZGF0YSwgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+b2F1dGhfYmVhcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYXV0aF9iZWFyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXNwLCAmbGVuKTsKICAgICB9CiAgICAgZWxzZSBpZihlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfUExBSU4pIHsKQEAgLTM3MCw4ICszNzYsOSBAQAogICAgICAgc2FzbC0+YXV0aHVzZWQgPSBTQVNMX01FQ0hfUExBSU47CiAKICAgICAgIGlmKGZvcmNlX2lyIHx8IGRhdGEtPnNldC5zYXNsX2lyKQotICAgICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX3BsYWluX21lc3NhZ2UoZGF0YSwgTlVMTCwgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnBhc3N3ZCwgJnJlc3AsICZsZW4pOworICAgICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX3BsYWluX21lc3NhZ2UoZGF0YSwgY29ubi0+c2FzbF9hdXRoemlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwgY29ubi0+cGFzc3dkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3AsICZsZW4pOwogICAgIH0KICAgICBlbHNlIGlmKGVuYWJsZWRtZWNocyAmIFNBU0xfTUVDSF9MT0dJTikgewogICAgICAgbWVjaCA9IFNBU0xfTUVDSF9TVFJJTkdfTE9HSU47CkBAIC00MTUsMjEgKzQyMiwyNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc2FzbHN0YXRlIG5ld3N0YXRlID0gU0FTTF9GSU5BTDsKICAgY2hhciAqcmVzcCA9IE5VTEw7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKICAgICBjb25uLT5ob3N0Lm5hbWU7CiAgIGNvbnN0IGxvbmcgaW50IHBvcnQgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0OworI2VuZGlmCiAjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKQogICBjaGFyICpjaGxnID0gTlVMTDsKICAgc2l6ZV90IGNobGdsZW4gPSAwOwogI2VuZGlmCi0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKSB8fCBkZWZpbmVkKFVTRV9LRVJCRVJPUzUpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9OVExNKQorI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCkgfHwgZGVmaW5lZChVU0VfS0VSQkVST1M1KSB8fCAgICAgXAorICBkZWZpbmVkKFVTRV9OVExNKQogICBjb25zdCBjaGFyICpzZXJ2aWNlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VSVklDRV9OQU1FXSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVJWSUNFX05BTUVdIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNhc2wtPnBhcmFtcy0+c2VydmljZTsKKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVJWSUNFX05BTUVdIDoKKyAgICBzYXNsLT5wYXJhbXMtPnNlcnZpY2U7CiAgIGNoYXIgKnNlcnZlcmRhdGE7CiAjZW5kaWYKICAgc2l6ZV90IGxlbiA9IDA7CisgIGNvbnN0IGNoYXIgKm9hdXRoX2JlYXJlciA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0JFQVJFUl07CiAKICAgKnByb2dyZXNzID0gU0FTTF9JTlBST0dSRVNTOwogCkBAIC00NTMsOCArNDY2LDkgQEAKICAgICAqcHJvZ3Jlc3MgPSBTQVNMX0RPTkU7CiAgICAgcmV0dXJuIHJlc3VsdDsKICAgY2FzZSBTQVNMX1BMQUlOOgotICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfcGxhaW5fbWVzc2FnZShkYXRhLCBOVUxMLCBjb25uLT51c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5wYXNzd2QsICZyZXNwLCAmbGVuKTsKKyAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX3BsYWluX21lc3NhZ2UoZGF0YSwgY29ubi0+c2FzbF9hdXRoemlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT51c2VyLCBjb25uLT5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXNwLCAmbGVuKTsKICAgICBicmVhazsKICAgY2FzZSBTQVNMX0xPR0lOOgogICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfbG9naW5fbWVzc2FnZShkYXRhLCBjb25uLT51c2VyLCAmcmVzcCwgJmxlbik7CkBAIC01NTYsNyArNTcwLDcgQEAKICAgICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfb2F1dGhfYmVhcmVyX21lc3NhZ2UoZGF0YSwgY29ubi0+dXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPm9hdXRoX2JlYXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2F1dGhfYmVhcmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcCwgJmxlbik7CiAKICAgICAgIC8qIEZhaWx1cmVzIG1heWJlIHNlbnQgYnkgdGhlIHNlcnZlciBhcyBjb250aW51YXRpb25zIGZvciBPQVVUSEJFQVJFUiAqLwpAQCAtNTY0LDcgKzU3OCw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfeG9hdXRoX2JlYXJlcl9tZXNzYWdlKGRhdGEsIGNvbm4tPnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5vYXV0aF9iZWFyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYXV0aF9iZWFyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcCwgJmxlbik7CiAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXAuaAppbmRleCBlZmJhNWRkLi5kYWRmZmY5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NldHVwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zZXR1cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNyw2ICsyNywxNCBAQAogI2VuZGlmCiAKIC8qCisgKiBEaXNhYmxlIFZpc3VhbCBTdHVkaW8gd2FybmluZ3M6CisgKiA0MTI3ICJjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50IgorICovCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxMjcpCisjZW5kaWYKKworLyoKICAqIERlZmluZSBXSU4zMiB3aGVuIGJ1aWxkIHRhcmdldCBpcyBXaW4zMiBBUEkKICAqLwogCkBAIC05Niw2ICsxMDQsMTAgQEAKICMgIGluY2x1ZGUgImNvbmZpZy12eHdvcmtzLmgiCiAjZW5kaWYKIAorI2lmZGVmIF9fUExBTjlfXworIyAgaW5jbHVkZSAiY29uZmlnLXBsYW45LmgiCisjZW5kaWYKKwogI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KIAogI2lmIGRlZmluZWQoX01TQ19WRVIpCkBAIC0yMjMsNiArMjM1LDE0IEBACiAjZW5kaWYKIAogLyoKKyAqIFdpbmRvd3Mgc2V0dXAgZmlsZSBpbmNsdWRlcyBzb21lIHN5c3RlbSBoZWFkZXJzLgorICovCisKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorIyAgaW5jbHVkZSAic2V0dXAtd2luMzIuaCIKKyNlbmRpZgorCisvKgogICogVXNlIGdldGFkZHJpbmZvIHRvIHJlc29sdmUgdGhlIElQdjQgYWRkcmVzcyBsaXRlcmFsLiBJZiB0aGUgY3VycmVudCBuZXR3b3JrCiAgKiBpbnRlcmZhY2UgZG9lc24ndCBzdXBwb3J0IElQdjQsIGJ1dCBzdXBwb3J0cyBJUHY2LCBOQVQ2NCwgYW5kIEROUzY0LAogICogcGVyZm9ybWluZyB0aGlzIHRhc2sgd2lsbCByZXN1bHQgaW4gYSBzeW50aGVzaXplZCBJUHY2IGFkZHJlc3MuCkBAIC0yMzEsNTggKzI1MSw2IEBACiAjZGVmaW5lIFVTRV9SRVNPTFZFX09OX0lQUyAxCiAjZW5kaWYKIAotLyoKLSAqIEluY2x1ZGUgaGVhZGVyIGZpbGVzIGZvciB3aW5kb3dzIGJ1aWxkcyBiZWZvcmUgcmVkZWZpbmluZyBhbnl0aGluZy4KLSAqIFVzZSB0aGlzIHByZXByb2Nlc3NvciBibG9jayBvbmx5IHRvIGluY2x1ZGUgb3IgZXhjbHVkZSB3aW5kb3dzLmgsCi0gKiB3aW5zb2NrMi5oLCB3czJ0Y3BpcC5oIG9yIHdpbnNvY2suaC4gQW55IG90aGVyIHdpbmRvd3MgdGhpbmcgYmVsb25ncwotICogdG8gYW55IG90aGVyIGZ1cnRoZXIgYW5kIGluZGVwZW5kZW50IGJsb2NrLiAgVW5kZXIgQ3lnd2luIHRoaW5ncyB3b3JrCi0gKiBqdXN0IGFzIHVuZGVyIGxpbnV4IChlLmcuIDxzeXMvc29ja2V0Lmg+KSBhbmQgdGhlIHdpbnNvY2sgaGVhZGVycyBzaG91bGQKLSAqIG5ldmVyIGJlIGluY2x1ZGVkIHdoZW4gX19DWUdXSU5fXyBpcyBkZWZpbmVkLiAgY29uZmlndXJlIHNjcmlwdCB0YWtlcwotICogY2FyZSBvZiB0aGlzLCBub3QgZGVmaW5pbmcgSEFWRV9XSU5ET1dTX0gsIEhBVkVfV0lOU09DS19ILCBIQVZFX1dJTlNPQ0syX0gsCi0gKiBuZWl0aGVyIEhBVkVfV1MyVENQSVBfSCB3aGVuIF9fQ1lHV0lOX18gaXMgZGVmaW5lZC4KLSAqLwotCi0jaWZkZWYgSEFWRV9XSU5ET1dTX0gKLSMgIGlmIGRlZmluZWQoVU5JQ09ERSkgJiYgIWRlZmluZWQoX1VOSUNPREUpCi0jICAgIGRlZmluZSBfVU5JQ09ERQotIyAgZW5kaWYKLSMgIGlmIGRlZmluZWQoX1VOSUNPREUpICYmICFkZWZpbmVkKFVOSUNPREUpCi0jICAgIGRlZmluZSBVTklDT0RFCi0jICBlbmRpZgotIyAgaW5jbHVkZSA8d2luZXJyb3IuaD4KLSMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAotIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgotIyAgICBpZmRlZiBIQVZFX1dTMlRDUElQX0gKLSMgICAgICBpbmNsdWRlIDx3czJ0Y3BpcC5oPgotIyAgICBlbmRpZgotIyAgZWxzZQotIyAgICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAotIyAgICAgIGluY2x1ZGUgPHdpbnNvY2suaD4KLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpbmNsdWRlIDx0Y2hhci5oPgotIyAgaWZkZWYgVU5JQ09ERQotICAgICB0eXBlZGVmIHdjaGFyX3QgKigqY3VybF93Y3NkdXBfY2FsbGJhY2spKGNvbnN0IHdjaGFyX3QgKnN0cik7Ci0jICBlbmRpZgotI2VuZGlmCi0KLS8qCi0gKiBEZWZpbmUgVVNFX1dJTlNPQ0sgdG8gMiBpZiB3ZSBoYXZlIGFuZCB1c2UgV0lOU09DSzIgQVBJLCBlbHNlCi0gKiBkZWZpbmUgVVNFX1dJTlNPQ0sgdG8gMSBpZiB3ZSBoYXZlIGFuZCB1c2UgV0lOU09DSyAgQVBJLCBlbHNlCi0gKiB1bmRlZmluZSBVU0VfV0lOU09DSy4KLSAqLwotCi0jdW5kZWYgVVNFX1dJTlNPQ0sKLQotI2lmZGVmIEhBVkVfV0lOU09DSzJfSAotIyAgZGVmaW5lIFVTRV9XSU5TT0NLIDIKLSNlbHNlCi0jICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAotIyAgICBkZWZpbmUgVVNFX1dJTlNPQ0sgMQotIyAgZW5kaWYKLSNlbmRpZgotCiAjaWZkZWYgVVNFX0xXSVBTT0NLCiAjICBpbmNsdWRlIDxsd2lwL2luaXQuaD4KICMgIGluY2x1ZGUgPGx3aXAvc29ja2V0cy5oPgpAQCAtMzc4LDkgKzM0NiwxNCBAQAogIyAgdW5kZWYgIGZzdGF0CiAjICBkZWZpbmUgZnN0YXQoZmRlcyxzdHApICAgICAgICAgICAgX2ZzdGF0aTY0KGZkZXMsIHN0cCkKICMgIHVuZGVmICBzdGF0Ci0jICBkZWZpbmUgc3RhdChmbmFtZSxzdHApICAgICAgICAgICAgX3N0YXRpNjQoZm5hbWUsIHN0cCkKKyMgIGRlZmluZSBzdGF0KGZuYW1lLHN0cCkgICAgICAgICAgICBjdXJseF93aW4zMl9zdGF0KGZuYW1lLCBzdHApCiAjICBkZWZpbmUgc3RydWN0X3N0YXQgICAgICAgICAgICAgICAgc3RydWN0IF9zdGF0aTY0CiAjICBkZWZpbmUgTFNFRUtfRVJST1IgICAgICAgICAgICAgICAgKF9faW50NjQpLTEKKyMgIGRlZmluZSBmb3BlbihmbmFtZSxtb2RlKSAgICAgICAgICBjdXJseF93aW4zMl9mb3BlbihmbmFtZSwgbW9kZSkKKyMgIGRlZmluZSBhY2Nlc3MoZm5hbWUsbW9kZSkgICAgICAgICBjdXJseF93aW4zMl9hY2Nlc3MoZm5hbWUsIG1vZGUpCisgICBpbnQgY3VybHhfd2luMzJfc3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Rfc3RhdCAqYnVmZmVyKTsKKyAgIEZJTEUgKmN1cmx4X3dpbjMyX2ZvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKKyAgIGludCBjdXJseF93aW4zMl9hY2Nlc3MoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpOwogI2VuZGlmCiAKIC8qCkBAIC0zOTUsOCArMzY4LDEzIEBACiAjICAgIHVuZGVmICBsc2VlawogIyAgICBkZWZpbmUgbHNlZWsoZmRlcyxvZmZzZXQsd2hlbmNlKSAgX2xzZWVrKGZkZXMsIChsb25nKW9mZnNldCwgd2hlbmNlKQogIyAgICBkZWZpbmUgZnN0YXQoZmRlcyxzdHApICAgICAgICAgICAgX2ZzdGF0KGZkZXMsIHN0cCkKLSMgICAgZGVmaW5lIHN0YXQoZm5hbWUsc3RwKSAgICAgICAgICAgIF9zdGF0KGZuYW1lLCBzdHApCisjICAgIGRlZmluZSBzdGF0KGZuYW1lLHN0cCkgICAgICAgICAgICBjdXJseF93aW4zMl9zdGF0KGZuYW1lLCBzdHApCiAjICAgIGRlZmluZSBzdHJ1Y3Rfc3RhdCAgICAgICAgICAgICAgICBzdHJ1Y3QgX3N0YXQKKyMgICAgZGVmaW5lIGZvcGVuKGZuYW1lLG1vZGUpICAgICAgICAgIGN1cmx4X3dpbjMyX2ZvcGVuKGZuYW1lLCBtb2RlKQorIyAgICBkZWZpbmUgYWNjZXNzKGZuYW1lLG1vZGUpICAgICAgICAgY3VybHhfd2luMzJfYWNjZXNzKGZuYW1lLCBtb2RlKQorICAgICBpbnQgY3VybHhfd2luMzJfc3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Rfc3RhdCAqYnVmZmVyKTsKKyAgICAgRklMRSAqY3VybHhfd2luMzJfZm9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOworICAgICBpbnQgY3VybHhfd2luMzJfYWNjZXNzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKTsKICMgIGVuZGlmCiAjICBkZWZpbmUgTFNFRUtfRVJST1IgICAgICAgICAgICAgICAgKGxvbmcpLTEKICNlbmRpZgpAQCAtNDk3LDcgKzQ3NSw2IEBACiAjaWZkZWYgV0lOMzIKIAogIyAgZGVmaW5lIERJUl9DSEFSICAgICAgIlxcIgotIyAgZGVmaW5lIERPVF9DSEFSICAgICAgIl8iCiAKICNlbHNlIC8qIFdJTjMyICovCiAKQEAgLTUyMywxNCArNTAwLDYgQEAKICMgIGVuZGlmCiAKICMgIGRlZmluZSBESVJfQ0hBUiAgICAgICIvIgotIyAgaWZuZGVmIERPVF9DSEFSCi0jICAgIGRlZmluZSBET1RfQ0hBUiAgICAgICIuIgotIyAgZW5kaWYKLQotIyAgaWZkZWYgTVNET1MKLSMgICAgdW5kZWYgRE9UX0NIQVIKLSMgICAgZGVmaW5lIERPVF9DSEFSICAgICAgIl8iCi0jICBlbmRpZgogCiAjICBpZm5kZWYgZmlsZW5vIC8qIHN1bm9zIDQgaGF2ZSB0aGlzIGFzIGEgbWFjcm8hICovCiAgICAgIGludCBmaWxlbm8oRklMRSAqc3RyZWFtKTsKQEAgLTU4Myw2ICs1NTIsMTIgQEAKICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSBDVVJMUkVTXyogZGVmaW5pdGlvbnMuCiAgKi8KIAorI2lmIGRlZmluZWQoRU5BQkxFX0lQVjYpICYmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykKKyMgIGRlZmluZSBDVVJMUkVTX0lQVjYKKyNlbHNlCisjICBkZWZpbmUgQ1VSTFJFU19JUFY0CisjZW5kaWYKKwogI2lmZGVmIFVTRV9BUkVTCiAjICBkZWZpbmUgQ1VSTFJFU19BU1lOQ0gKICMgIGRlZmluZSBDVVJMUkVTX0FSRVMKQEAgLTU5NywxMiArNTcyLDYgQEAKICMgIGRlZmluZSBDVVJMUkVTX1NZTkNICiAjZW5kaWYKIAotI2lmZGVmIEVOQUJMRV9JUFY2Ci0jICBkZWZpbmUgQ1VSTFJFU19JUFY2Ci0jZWxzZQotIyAgZGVmaW5lIENVUkxSRVNfSVBWNAotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKQEAgLTY2Miw5ICs2MzEsMTAgQEAKICNkZWZpbmUgTElCSUROX1JFUVVJUkVEX1ZFUlNJT04gIjAuNC4xIgogCiAjaWYgZGVmaW5lZChVU0VfR05VVExTKSB8fCBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKFVTRV9OU1MpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9QT0xBUlNTTCkgfHwgZGVmaW5lZChVU0VfTUJFRFRMUykgfHwgXAotICAgIGRlZmluZWQoVVNFX0NZQVNTTCkgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApIHx8IGRlZmluZWQoVVNFX0dTS0lUKSB8fCBkZWZpbmVkKFVTRV9NRVNBTElOSykKKyAgICBkZWZpbmVkKFVTRV9NQkVEVExTKSB8fCBcCisgICAgZGVmaW5lZChVU0VfV09MRlNTTCkgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpIHx8IFwKKyAgICBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApIHx8IGRlZmluZWQoVVNFX0dTS0lUKSB8fCBkZWZpbmVkKFVTRV9NRVNBTElOSykgfHwgXAorICAgIGRlZmluZWQoVVNFX0JFQVJTU0wpCiAjZGVmaW5lIFVTRV9TU0wgICAgLyogU1NMIHN1cHBvcnQgaGFzIGJlZW4gZW5hYmxlZCAqLwogI2VuZGlmCiAKQEAgLTY4MiwxMCArNjUyLDExIEBACiAKIC8qIFNpbmdsZSBwb2ludCB3aGVyZSBVU0VfTlRMTSBkZWZpbml0aW9uIG1pZ2h0IGJlIGRlZmluZWQgKi8KICNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfTlRMTSkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKQotI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkgfHwgXAotICAgIGRlZmluZWQoVVNFX0dOVVRMUykgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9TRUNUUkFOU1ApIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9PUzQwMENSWVBUTykgfHwgZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKSB8fCBcCi0gICAgZGVmaW5lZChVU0VfTUJFRFRMUykKKyNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpIHx8ICAgICAgICAgICAgICAgIFwKKyAgZGVmaW5lZChVU0VfR05VVExTKSB8fCBkZWZpbmVkKFVTRV9OU1MpIHx8IGRlZmluZWQoVVNFX1NFQ1RSQU5TUCkgfHwgIFwKKyAgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8IGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykgfHwgICAgICAgICAgICAgIFwKKyAgZGVmaW5lZChVU0VfTUJFRFRMUykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKGRlZmluZWQoVVNFX1dPTEZTU0wpICYmIGRlZmluZWQoSEFWRV9XT0xGU1NMX0RFU19TRVRfT0REX1BBUklUWSkpCiAKICNkZWZpbmUgVVNFX05UTE0KIApAQCAtNzMzLDcgKzcwNCw3IEBACiAgKi8KIAogI2lmbmRlZiBDdXJsX25vcF9zdG10Ci0jICBkZWZpbmUgQ3VybF9ub3Bfc3RtdCBkbyB7IH0gV0hJTEVfRkFMU0UKKyMgIGRlZmluZSBDdXJsX25vcF9zdG10IGRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKIC8qCkBAIC04NDIsNCArODEzLDggQEAKICNkZWZpbmUgVU5JVFRFU1Qgc3RhdGljCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoVVNFX05HVENQMikgfHwgZGVmaW5lZChVU0VfUVVJQ0hFKQorI2RlZmluZSBFTkFCTEVfUVVJQworI2VuZGlmCisKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TRVRVUF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NldHVwX29uY2UuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXBfb25jZS5oCmluZGV4IDQxM2NjZWEuLmU3YzAwZGUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXBfb25jZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2V0dXBfb25jZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMzAsMjcgKzMzMCw2IEBACiAjaW5jbHVkZSAiY3VybF9jdHlwZS5oIgogCiAvKgotICogTWFjcm8gV0hJTEVfRkFMU0UgbWF5IGJlIHVzZWQgdG8gYnVpbGQgc2luZ2xlLWl0ZXJhdGlvbiBkby13aGlsZSBsb29wcywKLSAqIGF2b2lkaW5nIGNvbXBpbGVyIHdhcm5pbmdzLiBNb3N0bHkgaW50ZW5kZWQgZm9yIG90aGVyIG1hY3JvIGRlZmluaXRpb25zLgotICovCi0KLSNkZWZpbmUgV0hJTEVfRkFMU0UgIHdoaWxlKDApCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX1BPQ0NfXykKLSMgIHVuZGVmIFdISUxFX0ZBTFNFCi0jICBpZiAoX01TQ19WRVIgPCAxNTAwKQotIyAgICBkZWZpbmUgV0hJTEVfRkFMU0UgIHdoaWxlKDEsIDApCi0jICBlbHNlCi0jICAgIGRlZmluZSBXSElMRV9GQUxTRSBcCi1fX3ByYWdtYSh3YXJuaW5nKHB1c2gpKSBcCi1fX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6NDEyNykpIFwKLXdoaWxlKDApIFwKLV9fcHJhZ21hKHdhcm5pbmcocG9wKSkKLSMgIGVuZGlmCi0jZW5kaWYKLQotCi0vKgogICogVHlwZWRlZiB0byAnaW50JyBpZiBzaWdfYXRvbWljX3QgaXMgbm90IGFuIGF2YWlsYWJsZSAndHlwZWRlZmVkJyB0eXBlLgogICovCiAKQEAgLTM4Nyw3ICszNjYsNyBAQAogI2lmZGVmIERFQlVHQlVJTEQKICNkZWZpbmUgREVCVUdGKHgpIHgKICNlbHNlCi0jZGVmaW5lIERFQlVHRih4KSBkbyB7IH0gV0hJTEVfRkFMU0UKKyNkZWZpbmUgREVCVUdGKHgpIGRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKIApAQCAtMzk1LDEwICszNzQsMTEgQEAKICAqIE1hY3JvIHVzZWQgdG8gaW5jbHVkZSBhc3NlcnRpb24gY29kZSBvbmx5IGluIGRlYnVnIGJ1aWxkcy4KICAqLwogCisjdW5kZWYgREVCVUdBU1NFUlQKICNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmIGRlZmluZWQoSEFWRV9BU1NFUlRfSCkKICNkZWZpbmUgREVCVUdBU1NFUlQoeCkgYXNzZXJ0KHgpCiAjZWxzZQotI2RlZmluZSBERUJVR0FTU0VSVCh4KSBkbyB7IH0gV0hJTEVfRkFMU0UKKyNkZWZpbmUgREVCVUdBU1NFUlQoeCkgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAogCkBAIC01MDEsNiArNDgxLDggQEAKIAogI2lmZGVmIF9fVk1TCiAjZGVmaW5lIGFyZ3ZfaXRlbV90ICBfX2NoYXJfcHRyMzIKKyNlbGlmIGRlZmluZWQoX1VOSUNPREUpCisjZGVmaW5lIGFyZ3ZfaXRlbV90IHdjaGFyX3QgKgogI2Vsc2UKICNkZWZpbmUgYXJndl9pdGVtX3QgIGNoYXIgKgogI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NoYTI1Ni5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zaGEyNTYuaAppbmRleCA2ZGI0YjA0Li4zNWQyODZjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NoYTI1Ni5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmxfc2hhMjU2LmgKQEAgLTcsNyArNyw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRmxvcmluIFBldHJpdWMsIDxwZXRyaXVjLmZsb3JpbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIEZsb3JpbiBQZXRyaXVjLCA8cGV0cml1Yy5mbG9yaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjQsOCArMjUsMTAgQEAKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKIAotdm9pZCBDdXJsX3NoYTI1Nml0KHVuc2lnbmVkIGNoYXIgKm91dGJ1ZmZlciwKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCk7CisjZGVmaW5lIFNIQTI1Nl9ESUdFU1RfTEVOR1RIIDMyCisKK3ZvaWQgQ3VybF9zaGEyNTZpdCh1bnNpZ25lZCBjaGFyICpvdXRidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBsZW4pOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuYwppbmRleCAxZDBkZTRlLi44M2VjZTlhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTUxLDcgKzE1MSw3IEBACiAgIC8qIEluaXRpYWxpemUgdGhlIGlkZW50aXR5ICovCiAgIG1lbXNldChpZGVudGl0eSwgMCwgc2l6ZW9mKCppZGVudGl0eSkpOwogCi0gIHVzZXJhbmRkb21haW4udGNoYXJfcHRyID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKil1c2VycCk7CisgIHVzZXJhbmRkb21haW4udGNoYXJfcHRyID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKChjaGFyICopdXNlcnApOwogICBpZighdXNlcmFuZGRvbWFpbi50Y2hhcl9wdHIpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAvKiBTZXR1cCB0aGUgaWRlbnRpdHkncyB1c2VyIGFuZCBsZW5ndGggKi8KICAgZHVwX3VzZXIudGNoYXJfcHRyID0gX3Rjc2R1cCh1c2VyLnRjaGFyX3B0cik7CiAgIGlmKCFkdXBfdXNlci50Y2hhcl9wdHIpIHsKLSAgICBDdXJsX3VuaWNvZGVmcmVlKHVzZXJhbmRkb21haW4udGNoYXJfcHRyKTsKKyAgICBjdXJseF91bmljb2RlZnJlZSh1c2VyYW5kZG9tYWluLnRjaGFyX3B0cik7CiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIH0KICAgaWRlbnRpdHktPlVzZXIgPSBkdXBfdXNlci50Ynl0ZV9wdHI7CkBAIC0xODMsNyArMTgzLDcgQEAKICAgLyogU2V0dXAgdGhlIGlkZW50aXR5J3MgZG9tYWluIGFuZCBsZW5ndGggKi8KICAgZHVwX2RvbWFpbi50Y2hhcl9wdHIgPSBtYWxsb2Moc2l6ZW9mKFRDSEFSKSAqIChkb21sZW4gKyAxKSk7CiAgIGlmKCFkdXBfZG9tYWluLnRjaGFyX3B0cikgewotICAgIEN1cmxfdW5pY29kZWZyZWUodXNlcmFuZGRvbWFpbi50Y2hhcl9wdHIpOworICAgIGN1cmx4X3VuaWNvZGVmcmVlKHVzZXJhbmRkb21haW4udGNoYXJfcHRyKTsKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogICBfdGNzbmNweShkdXBfZG9tYWluLnRjaGFyX3B0ciwgZG9tYWluLnRjaGFyX3B0ciwgZG9tbGVuKTsKQEAgLTE5MiwyMiArMTkyLDIyIEBACiAgIGlkZW50aXR5LT5Eb21haW5MZW5ndGggPSBjdXJseF91enRvdWwoZG9tbGVuKTsKICAgZHVwX2RvbWFpbi50Y2hhcl9wdHIgPSBOVUxMOwogCi0gIEN1cmxfdW5pY29kZWZyZWUodXNlcmFuZGRvbWFpbi50Y2hhcl9wdHIpOworICBjdXJseF91bmljb2RlZnJlZSh1c2VyYW5kZG9tYWluLnRjaGFyX3B0cik7CiAKICAgLyogU2V0dXAgdGhlIGlkZW50aXR5J3MgcGFzc3dvcmQgYW5kIGxlbmd0aCAqLwotICBwYXNzd2QudGNoYXJfcHRyID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKilwYXNzd2RwKTsKKyAgcGFzc3dkLnRjaGFyX3B0ciA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKXBhc3N3ZHApOwogICBpZighcGFzc3dkLnRjaGFyX3B0cikKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgZHVwX3Bhc3N3ZC50Y2hhcl9wdHIgPSBfdGNzZHVwKHBhc3N3ZC50Y2hhcl9wdHIpOwogICBpZighZHVwX3Bhc3N3ZC50Y2hhcl9wdHIpIHsKLSAgICBDdXJsX3VuaWNvZGVmcmVlKHBhc3N3ZC50Y2hhcl9wdHIpOworICAgIGN1cmx4X3VuaWNvZGVmcmVlKHBhc3N3ZC50Y2hhcl9wdHIpOwogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAgIGlkZW50aXR5LT5QYXNzd29yZCA9IGR1cF9wYXNzd2QudGJ5dGVfcHRyOwogICBpZGVudGl0eS0+UGFzc3dvcmRMZW5ndGggPSBjdXJseF91enRvdWwoX3Rjc2xlbihkdXBfcGFzc3dkLnRjaGFyX3B0cikpOwogICBkdXBfcGFzc3dkLnRjaGFyX3B0ciA9IE5VTEw7CiAKLSAgQ3VybF91bmljb2RlZnJlZShwYXNzd2QudGNoYXJfcHRyKTsKKyAgY3VybHhfdW5pY29kZWZyZWUocGFzc3dkLnRjaGFyX3B0cik7CiAKICAgLyogU2V0dXAgdGhlIGlkZW50aXR5J3MgZmxhZ3MgKi8KICAgaWRlbnRpdHktPkZsYWdzID0gU0VDRkxBR19XSU5OVF9BVVRIX0lERU5USVRZOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9zc3BpLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuaAppbmRleCAyYmJmOTQ3Li5jMDkwMjZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3NzcGkuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuYwppbmRleCA4ZTU5MzdhLi5iNWYxMGEyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdm9pZCAqY3VybF90aHJlYWRfY3JlYXRlX3RodW5rKHZvaWQgKmFyZykKIHsKLSAgc3RydWN0IGN1cmxfYWN0dWFsX2NhbGwgKiBhYyA9IGFyZzsKKyAgc3RydWN0IGN1cmxfYWN0dWFsX2NhbGwgKmFjID0gYXJnOwogICB1bnNpZ25lZCBpbnQgKCpmdW5jKSh2b2lkICopID0gYWMtPmZ1bmM7CiAgIHZvaWQgKnJlYWxfYXJnID0gYWMtPmFyZzsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF90aHJlYWRzLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuaAppbmRleCAyYTkzNjQ0Li42NWQxYTc5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJsX3RocmVhZHMuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybHguaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2N1cmx4LmgKaW5kZXggM2U5YjUxNi4uYThiYWUxNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybHguaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9jdXJseC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01Myw2ICs1MywxNiBAQAogICBjdXJseF91enRvc2koKQogKi8KIAorI2luY2x1ZGUgImN1cmxfbXVsdGlieXRlLmgiCisvKiAiY3VybF9tdWx0aWJ5dGUuaCIgcHJvdmlkZXMgdGhlc2UgZnVuY3Rpb25zIGFuZCBtYWNyb3M6CisKKyAgY3VybHhfY29udmVydF9VVEY4X3RvX3djaGFyKCkKKyAgY3VybHhfY29udmVydF93Y2hhcl90b19VVEY4KCkKKyAgY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKCkKKyAgY3VybHhfY29udmVydF90Y2hhcl90b19VVEY4KCkKKyAgY3VybHhfdW5pY29kZWZyZWUoKQorKi8KKwogLyogTm93IHNldHVwIGN1cmx4XyAqIG5hbWVzIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHRvIGJlY29tZSBjdXJseF8gYW5kCiAgICBiZSByZW1vdmVkIGZyb20gYSBmdXR1cmUgbGliY3VybCBvZmZpY2lhbCBBUEk6CiAgICBjdXJseF9nZXRlbnYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2RpY3QuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RpY3QuYwppbmRleCAyMDhhMjMzLi5mNTI5YjQ4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kaWN0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZGljdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00Niw2ICs0Niw4IEBACiAKICNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9VTklTVERfSCkKKyNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgpAQCAtOTcsNyArOTksOCBAQAogICBjaGFyICpkaWN0cDsKICAgc2l6ZV90IGxlbjsKIAotICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBpbnB1dGJ1ZmYsIDAsICZuZXdwLCAmbGVuLCBGQUxTRSk7CisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGlucHV0YnVmZiwgMCwgJm5ld3AsICZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9OQURBKTsKICAgaWYoIW5ld3AgfHwgcmVzdWx0KQogICAgIHJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kaWN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kaWN0LmgKaW5kZXggMTJjMGYzMy4uMzhhNTVhYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZGljdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RpY3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZG9oLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guYwppbmRleCA2ZDFmMzMwLi5lYmIyYzI0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzUsMTMgKzM1LDEzIEBACiAjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAiZHluYnVmLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKICNkZWZpbmUgRE5TX0NMQVNTX0lOIDB4MDEKLSNkZWZpbmUgRE9IX01BWF9SRVNQT05TRV9TSVpFIDMwMDAgLyogYnl0ZXMgKi8KIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVycm9yc1tdPXsKQEAgLTc0LDE3ICs3NCw1MCBAQAogI2RlZmluZSBVTklUVEVTVCBzdGF0aWMKICNlbmRpZgogCisvKiBAdW5pdHRlc3QgMTY1NQorICovCiBVTklUVEVTVCBET0hjb2RlIGRvaF9lbmNvZGUoY29uc3QgY2hhciAqaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETlN0eXBlIGRuc3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZG5zcCwgLyogYnVmZmVyICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgIC8qIGJ1ZmZlciBzaXplICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuKSAvKiBvdXRwdXQgbGVuZ3RoICovCiB7Ci0gIHNpemVfdCBob3N0bGVuID0gc3RybGVuKGhvc3QpOworICBjb25zdCBzaXplX3QgaG9zdGxlbiA9IHN0cmxlbihob3N0KTsKICAgdW5zaWduZWQgY2hhciAqb3JpZyA9IGRuc3A7CiAgIGNvbnN0IGNoYXIgKmhvc3RwID0gaG9zdDsKIAotICBpZihsZW4gPCAoMTIgKyBob3N0bGVuICsgNCkpCisgIC8qIFRoZSBleHBlY3RlZCBvdXRwdXQgbGVuZ3RoIGlzIDE2IGJ5dGVzIG1vcmUgdGhhbiB0aGUgbGVuZ3RoIG9mCisgICAqIHRoZSBRTkFNRS1lbmNvZGluZyBvZiB0aGUgaG9zdCBuYW1lLgorICAgKgorICAgKiBBIHZhbGlkIEROUyBuYW1lIG1heSBub3QgY29udGFpbiBhIHplcm8tbGVuZ3RoIGxhYmVsLCBleGNlcHQgYXQKKyAgICogdGhlIGVuZC4gIEZvciB0aGlzIHJlYXNvbiwgYSBuYW1lIGJlZ2lubmluZyB3aXRoIGEgZG90LCBvcgorICAgKiBjb250YWluaW5nIGEgc2VxdWVuY2Ugb2YgdHdvIG9yIG1vcmUgY29uc2VjdXRpdmUgZG90cywgaXMgaW52YWxpZAorICAgKiBhbmQgY2Fubm90IGJlIGVuY29kZWQgYXMgYSBRTkFNRS4KKyAgICoKKyAgICogSWYgdGhlIGhvc3QgbmFtZSBlbmRzIHdpdGggYSB0cmFpbGluZyBkb3QsIHRoZSBjb3JyZXNwb25kaW5nCisgICAqIFFOQU1FLWVuY29kaW5nIGlzIG9uZSBieXRlIGxvbmdlciB0aGFuIHRoZSBob3N0IG5hbWUuIElmIChhcyBpcworICAgKiBhbHNvIHZhbGlkKSB0aGUgaG9zdG5hbWUgaXMgc2hvcnRlbmVkIGJ5IHRoZSBvbWlzc2lvbiBvZiB0aGUKKyAgICogdHJhaWxpbmcgZG90LCB0aGVuIGl0cyBRTkFNRS1lbmNvZGluZyB3aWxsIGJlIHR3byBieXRlcyBsb25nZXIKKyAgICogdGhhbiB0aGUgaG9zdCBuYW1lLgorICAgKgorICAgKiBFYWNoIFsgbGFiZWwsIGRvdCBdIHBhaXIgaXMgZW5jb2RlZCBhcyBbIGxlbmd0aCwgbGFiZWwgXSwKKyAgICogcHJlc2VydmluZyBvdmVyYWxsIGxlbmd0aC4gIEEgZmluYWwgWyBsYWJlbCBdIHdpdGhvdXQgYSBkb3QgaXMKKyAgICogYWxzbyBlbmNvZGVkIGFzIFsgbGVuZ3RoLCBsYWJlbCBdLCBpbmNyZWFzaW5nIG92ZXJhbGwgbGVuZ3RoCisgICAqIGJ5IG9uZS4gVGhlIGVuY29kaW5nIGlzIGNvbXBsZXRlZCBieSBhcHBlbmRpbmcgYSB6ZXJvIGJ5dGUsCisgICAqIHJlcHJlc2VudGluZyB0aGUgemVyby1sZW5ndGggcm9vdCBsYWJlbCwgYWdhaW4gaW5jcmVhc2luZworICAgKiB0aGUgb3ZlcmFsbCBsZW5ndGggYnkgb25lLgorICAgKi8KKworICBzaXplX3QgZXhwZWN0ZWRfbGVuOworICBERUJVR0FTU0VSVChob3N0bGVuKTsKKyAgZXhwZWN0ZWRfbGVuID0gMTIgKyAxICsgaG9zdGxlbiArIDQ7CisgIGlmKGhvc3RbaG9zdGxlbi0xXSE9Jy4nKQorICAgIGV4cGVjdGVkX2xlbisrOworCisgIGlmKGV4cGVjdGVkX2xlbiA+ICgyNTYgKyAxNikpIC8qIFJGQ3MgMTAzNCwgMTAzNSAqLworICAgIHJldHVybiBET0hfRE5TX05BTUVfVE9PX0xPTkc7CisKKyAgaWYobGVuIDwgZXhwZWN0ZWRfbGVuKQogICAgIHJldHVybiBET0hfVE9PX1NNQUxMX0JVRkZFUjsKIAogICAqZG5zcCsrID0gMDsgLyogMTYgYml0IGlkICovCkBAIC0xMDAsNTkgKzEzMyw1NSBAQAogICAqZG5zcCsrID0gJ1wwJzsKICAgKmRuc3ArKyA9ICdcMCc7IC8qIEFSQ09VTlQgKi8KIAotICAvKiBzdG9yZSBhIFFOQU1FICovCi0gIGRvIHsKLSAgICBjaGFyICpkb3QgPSBzdHJjaHIoaG9zdHAsICcuJyk7CisgIC8qIGVuY29kZSBlYWNoIGxhYmVsIGFuZCBzdG9yZSBpdCBpbiB0aGUgUU5BTUUgKi8KKyAgd2hpbGUoKmhvc3RwKSB7CiAgICAgc2l6ZV90IGxhYmVsbGVuOwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBpZihkb3QpIHsKLSAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICBjaGFyICpkb3QgPSBzdHJjaHIoaG9zdHAsICcuJyk7CisgICAgaWYoZG90KQogICAgICAgbGFiZWxsZW4gPSBkb3QgLSBob3N0cDsKLSAgICB9CiAgICAgZWxzZQogICAgICAgbGFiZWxsZW4gPSBzdHJsZW4oaG9zdHApOwotICAgIGlmKGxhYmVsbGVuID4gNjMpIHsKLSAgICAgIC8qIHRvbyBsb25nIGxhYmVsLCBlcnJvciBvdXQgKi8KKyAgICBpZigobGFiZWxsZW4gPiA2MykgfHwgKCFsYWJlbGxlbikpIHsKKyAgICAgIC8qIGxhYmVsIGlzIHRvbyBsb25nIG9yIHRvbyBzaG9ydCwgZXJyb3Igb3V0ICovCiAgICAgICAqb2xlbiA9IDA7CiAgICAgICByZXR1cm4gRE9IX0ROU19CQURfTEFCRUw7CiAgICAgfQorICAgIC8qIGxhYmVsIGlzIG5vbi1lbXB0eSwgcHJvY2VzcyBpdCAqLwogICAgICpkbnNwKysgPSAodW5zaWduZWQgY2hhcilsYWJlbGxlbjsKICAgICBtZW1jcHkoZG5zcCwgaG9zdHAsIGxhYmVsbGVuKTsKICAgICBkbnNwICs9IGxhYmVsbGVuOwotICAgIGhvc3RwICs9IGxhYmVsbGVuICsgMTsKLSAgICBpZighZm91bmQpIHsKLSAgICAgICpkbnNwKysgPSAwOyAvKiB0ZXJtaW5hdGluZyB6ZXJvICovCi0gICAgICBicmVhazsKLSAgICB9Ci0gIH0gd2hpbGUoMSk7CisgICAgaG9zdHAgKz0gbGFiZWxsZW47CisgICAgLyogYWR2YW5jZSBwYXN0IGRvdCwgYnV0IG9ubHkgaWYgdGhlcmUgaXMgb25lICovCisgICAgaWYoZG90KQorICAgICAgaG9zdHArKzsKKyAgfSAvKiBuZXh0IGxhYmVsICovCiAKLSAgKmRuc3ArKyA9ICdcMCc7IC8qIHVwcGVyIDggYml0IFRZUEUgKi8KLSAgKmRuc3ArKyA9ICh1bnNpZ25lZCBjaGFyKWRuc3R5cGU7CisgICpkbnNwKysgPSAwOyAvKiBhcHBlbmQgemVyby1sZW5ndGggbGFiZWwgZm9yIHJvb3QgKi8KKworICAvKiBUaGVyZSBhcmUgYXNzaWduZWQgVFlQRSBjb2RlcyBiZXlvbmQgMjU1OiB1c2UgcmFuZ2UgWzEuLjY1NTM1XSAgKi8KKyAgKmRuc3ArKyA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgJiAoZG5zdHlwZT4+OCkpOyAvKiB1cHBlciA4IGJpdCBUWVBFICovCisgICpkbnNwKysgPSAodW5zaWduZWQgY2hhcikoMjU1ICYgZG5zdHlwZSk7ICAgICAgLyogbG93ZXIgOCBiaXQgVFlQRSAqLworCiAgICpkbnNwKysgPSAnXDAnOyAvKiB1cHBlciA4IGJpdCBDTEFTUyAqLwogICAqZG5zcCsrID0gRE5TX0NMQVNTX0lOOyAvKiBJTiAtICJ0aGUgSW50ZXJuZXQiICovCiAKICAgKm9sZW4gPSBkbnNwIC0gb3JpZzsKKworICAvKiB2ZXJpZnkgdGhhdCBvdXIgZXN0aW1hdGlvbiBvZiBsZW5ndGggaXMgdmFsaWQsIHNpbmNlCisgICAqIHRoaXMgaGFzIGxlZCB0byBidWZmZXIgb3ZlcmZsb3dzIGluIHRoaXMgZnVuY3Rpb24gKi8KKyAgREVCVUdBU1NFUlQoKm9sZW4gPT0gZXhwZWN0ZWRfbGVuKTsKICAgcmV0dXJuIERPSF9PSzsKIH0KIAogc3RhdGljIHNpemVfdAotZG9oX3dyaXRlX2NiKHZvaWQgKmNvbnRlbnRzLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VycCkKK2RvaF93cml0ZV9jYihjb25zdCB2b2lkICpjb250ZW50cywgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqdXNlcnApCiB7CiAgIHNpemVfdCByZWFsc2l6ZSA9IHNpemUgKiBubWVtYjsKLSAgc3RydWN0IGRvaHJlc3BvbnNlICptZW0gPSAoc3RydWN0IGRvaHJlc3BvbnNlICopdXNlcnA7CisgIHN0cnVjdCBkeW5idWYgKm1lbSA9IChzdHJ1Y3QgZHluYnVmICopdXNlcnA7CiAKLSAgaWYoKG1lbS0+c2l6ZSArIHJlYWxzaXplKSA+IERPSF9NQVhfUkVTUE9OU0VfU0laRSkKLSAgICAvKiBzdXNwaWNpb3VzbHkgbXVjaCBmb3IgdXMgKi8KKyAgaWYoQ3VybF9keW5fYWRkbihtZW0sIGNvbnRlbnRzLCByZWFsc2l6ZSkpCiAgICAgcmV0dXJuIDA7CiAKLSAgbWVtLT5tZW1vcnkgPSBDdXJsX3NhZmVyZWFsbG9jKG1lbS0+bWVtb3J5LCBtZW0tPnNpemUgKyByZWFsc2l6ZSk7Ci0gIGlmKCFtZW0tPm1lbW9yeSkKLSAgICAvKiBvdXQgb2YgbWVtb3J5ISAqLwotICAgIHJldHVybiAwOwotCi0gIG1lbWNweSgmKG1lbS0+bWVtb3J5W21lbS0+c2l6ZV0pLCBjb250ZW50cywgcmVhbHNpemUpOwotICBtZW0tPnNpemUgKz0gcmVhbHNpemU7Ci0KICAgcmV0dXJuIHJlYWxzaXplOwogfQogCkBAIC0xODAsNyArMjA5LDcgQEAKICAgcmVzdWx0ID0gY3VybF9lYXN5X3NldG9wdChkb2gsIHgsIHkpOyAgIFwKICAgaWYocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBnb3RvIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gV0hJTEVfRkFMU0UKK30gd2hpbGUoMCkKIAogc3RhdGljIENVUkxjb2RlIGRvaHByb2JlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRuc3Byb2JlICpwLCBETlN0eXBlIGRuc3R5cGUsCkBAIC0yMDAsMTAgKzIyOSw3IEBACiAgIH0KIAogICBwLT5kbnN0eXBlID0gZG5zdHlwZTsKLSAgcC0+c2VydmVyZG9oLm1lbW9yeSA9IE5VTEw7Ci0gIC8qIHRoZSBtZW1vcnkgd2lsbCBiZSBncm93biBhcyBuZWVkZWQgYnkgcmVhbGxvYyBpbiB0aGUgZG9oX3dyaXRlX2NiCi0gICAgIGZ1bmN0aW9uICovCi0gIHAtPnNlcnZlcmRvaC5zaXplID0gMDsKKyAgQ3VybF9keW5faW5pdCgmcC0+c2VydmVyZG9oLCBEWU5fRE9IX1JFU1BPTlNFKTsKIAogICAvKiBOb3RlOiB0aGlzIGlzIGNvZGUgZm9yIHNlbmRpbmcgdGhlIERvSCByZXF1ZXN0IHdpdGggR0VUIGJ1dCB0aGVyZSdzIHN0aWxsCiAgICAgIG5vIGxvZ2ljIHRoYXQgYWN0dWFsbHkgZW5hYmxlcyB0aGlzLiBXZSBzaG91bGQgZWl0aGVyIGFkZCB0aGF0IGFiaWxpdHkgb3IKQEAgLTIyNSwxMyArMjUxLDE2IEBACiAgIH0KIAogICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKLQorICBpZih0aW1lb3V0X21zIDw9IDApIHsKKyAgICByZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgZ290byBlcnJvcjsKKyAgfQogICAvKiBDdXJsX29wZW4oKSBpcyB0aGUgaW50ZXJuYWwgdmVyc2lvbiBvZiBjdXJsX2Vhc3lfaW5pdCgpICovCiAgIHJlc3VsdCA9IEN1cmxfb3BlbigmZG9oKTsKICAgaWYoIXJlc3VsdCkgewogICAgIC8qIHBhc3MgaW4gdGhlIHN0cnVjdCBwb2ludGVyIHZpYSBhIGxvY2FsIHZhcmlhYmxlIHRvIHBsZWFzZSBjb3Zlcml0eSBhbmQKICAgICAgICB0aGUgZ2NjIHR5cGVjaGVjayBoZWxwZXJzICovCi0gICAgc3RydWN0IGRvaHJlc3BvbnNlICpyZXNwID0gJnAtPnNlcnZlcmRvaDsKKyAgICBzdHJ1Y3QgZHluYnVmICpyZXNwID0gJnAtPnNlcnZlcmRvaDsKICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9VUkwsIHVybCk7CiAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZG9oX3dyaXRlX2NiKTsKICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9XUklURURBVEEsIHJlc3ApOwpAQCAtMjQ2LDYgKzI3NSw5IEBACiAjaWZuZGVmIENVUkxERUJVRwogICAgIC8qIGVuZm9yY2UgSFRUUFMgaWYgbm90IGRlYnVnICovCiAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPVE9DT0xTLCBDVVJMUFJPVE9fSFRUUFMpOworI2Vsc2UKKyAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBhbHNvIGFsbG93IGh0dHAgKi8KKyAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9UT0NPTFMsIENVUkxQUk9UT19IVFRQfENVUkxQUk9UT19IVFRQUyk7CiAjZW5kaWYKICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9USU1FT1VUX01TLCAobG9uZyl0aW1lb3V0X21zKTsKICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkKQEAgLTI1OSwzOCArMjkxLDQ1IEBACiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfRkFMU0VTVEFSVCwgMUwpOwogICAgIGlmKGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJpZnlob3N0KQogICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDJMKTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgICAgaWYoZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeWhvc3QpCiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZSE9TVCwgMkwpOwotICAgIGlmKGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJpZnlwZWVyKQotICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDFMKTsKICAgICBpZihkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkudmVyaWZ5cGVlcikKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllQRUVSLCAxTCk7CisgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV9QUk9YWV0pIHsKKyAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1BST1hZX0NBSU5GTywKKyAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV9QUk9YWV0pOworICAgIH0KKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV9QUk9YWV0pIHsKKyAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1BST1hZX0NSTEZJTEUsCisgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX1BST1hZXSk7CisgICAgfQorICAgIGlmKGRhdGEtPnNldC5wcm94eV9zc2wubm9fcmV2b2tlKQorICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMsIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBlbHNlIGlmKGRhdGEtPnNldC5wcm94eV9zc2wucmV2b2tlX2Jlc3RfZWZmb3J0KQorICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTFNTTE9QVF9SRVZPS0VfQkVTVF9FRkZPUlQpOworICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKSB7CisgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9DQVBBVEgsCisgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZihkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5cGVlcikKKyAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAxTCk7CiAgICAgaWYoZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeXN0YXR1cykKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX1NTTF9WRVJJRllTVEFUVVMsIDFMKTsKICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX09SSUddKSB7CiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9DQUlORk8sCiAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfT1JJR10pOwogICAgIH0KLSAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXSkgewotICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfQ0FJTkZPLAotICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXSk7Ci0gICAgfQogICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfT1JJR10pIHsKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX0NBUEFUSCwKICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF9PUklHXSk7CiAgICAgfQotICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKSB7Ci0gICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9DQVBBVEgsCi0gICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldKTsKLSAgICB9CiAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfT1JJR10pIHsKICAgICAgIEVSUk9SX0NIRUNLX1NFVE9QVChDVVJMT1BUX0NSTEZJTEUsCiAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX09SSUddKTsKICAgICB9Ci0gICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfUFJPWFldKSB7Ci0gICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9QUk9YWV9DUkxGSUxFLAotICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV9QUk9YWV0pOwotICAgIH0KICAgICBpZihkYXRhLT5zZXQuc3NsLmNlcnRpbmZvKQogICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfQ0VSVElORk8sIDFMKTsKICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUkFORE9NX0ZJTEVdKSB7CkBAIC0zMDMsOCArMzQyLDggQEAKICAgICB9CiAgICAgaWYoZGF0YS0+c2V0LnNzbC5ub19yZXZva2UpCiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfT1BUSU9OUywgQ1VSTFNTTE9QVF9OT19SRVZPS0UpOwotICAgIGlmKGRhdGEtPnNldC5wcm94eV9zc2wubm9fcmV2b2tlKQotICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMsIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBlbHNlIGlmKGRhdGEtPnNldC5zc2wucmV2b2tlX2Jlc3RfZWZmb3J0KQorICAgICAgRVJST1JfQ0hFQ0tfU0VUT1BUKENVUkxPUFRfU1NMX09QVElPTlMsIENVUkxTU0xPUFRfUkVWT0tFX0JFU1RfRUZGT1JUKTsKICAgICBpZihkYXRhLT5zZXQuc3NsLmZzc2xjdHgpCiAgICAgICBFUlJPUl9DSEVDS19TRVRPUFQoQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBkYXRhLT5zZXQuc3NsLmZzc2xjdHgpOwogICAgIGlmKGRhdGEtPnNldC5zc2wuZnNzbGN0eHApCkBAIC0zMjUsNyArMzY0LDcgQEAKIAogICBlcnJvcjoKICAgZnJlZShudXJsKTsKLSAgQ3VybF9jbG9zZShkb2gpOworICBDdXJsX2Nsb3NlKCZkb2gpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMzQsMTMgKzM3MywxNCBAQAogICogJ0N1cmxfYWRkcmluZm8gKicgd2l0aCB0aGUgYWRkcmVzcyBpbmZvcm1hdGlvbi4KICAqLwogCi1DdXJsX2FkZHJpbmZvICpDdXJsX2RvaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX2RvaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBpbnQgc2xvdDsKICAgKndhaXRwID0gVFJVRTsgLyogdGhpcyBuZXZlciByZXR1cm5zIHN5bmNocm9ub3VzbHkgKi8KICAgKHZvaWQpY29ubjsKICAgKHZvaWQpaG9zdG5hbWU7CkBAIC0zNDksNiArMzg5LDcgQEAKICAgLyogc3RhcnQgY2xlYW4sIGNvbnNpZGVyIGFsbG9jYXRpbmcgdGhpcyBzdHJ1Y3Qgb24gZGVtYW5kICovCiAgIG1lbXNldCgmZGF0YS0+cmVxLmRvaCwgMCwgc2l6ZW9mKHN0cnVjdCBkb2hkYXRhKSk7CiAKKyAgY29ubi0+Yml0cy5kb2ggPSBUUlVFOwogICBkYXRhLT5yZXEuZG9oLmhvc3QgPSBob3N0bmFtZTsKICAgZGF0YS0+cmVxLmRvaC5wb3J0ID0gcG9ydDsKICAgZGF0YS0+cmVxLmRvaC5oZWFkZXJzID0KQEAgLTM1OSw4ICs0MDAsOCBAQAogCiAgIGlmKGNvbm4tPmlwX3ZlcnNpb24gIT0gQ1VSTF9JUFJFU09MVkVfVjYpIHsKICAgICAvKiBjcmVhdGUgSVB2NCBET0ggcmVxdWVzdCAqLwotICAgIHJlc3VsdCA9IGRvaHByb2JlKGRhdGEsICZkYXRhLT5yZXEuZG9oLnByb2JlWzBdLCBETlNfVFlQRV9BLAotICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ET0hdLAorICAgIHJlc3VsdCA9IGRvaHByb2JlKGRhdGEsICZkYXRhLT5yZXEuZG9oLnByb2JlW0RPSF9QUk9CRV9TTE9UX0lQQUREUl9WNF0sCisgICAgICAgICAgICAgICAgICAgICAgRE5TX1RZUEVfQSwgaG9zdG5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0RPSF0sCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bXVsdGksIGRhdGEtPnJlcS5kb2guaGVhZGVycyk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZ290byBlcnJvcjsKQEAgLTM2OSw4ICs0MTAsOCBAQAogCiAgIGlmKGNvbm4tPmlwX3ZlcnNpb24gIT0gQ1VSTF9JUFJFU09MVkVfVjQpIHsKICAgICAvKiBjcmVhdGUgSVB2NiBET0ggcmVxdWVzdCAqLwotICAgIHJlc3VsdCA9IGRvaHByb2JlKGRhdGEsICZkYXRhLT5yZXEuZG9oLnByb2JlWzFdLCBETlNfVFlQRV9BQUFBLAotICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ET0hdLAorICAgIHJlc3VsdCA9IGRvaHByb2JlKGRhdGEsICZkYXRhLT5yZXEuZG9oLnByb2JlW0RPSF9QUk9CRV9TTE9UX0lQQUREUl9WNl0sCisgICAgICAgICAgICAgICAgICAgICAgRE5TX1RZUEVfQUFBQSwgaG9zdG5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0RPSF0sCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bXVsdGksIGRhdGEtPnJlcS5kb2guaGVhZGVycyk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZ290byBlcnJvcjsKQEAgLTM4MSwxNCArNDIyLDEzIEBACiAgIGVycm9yOgogICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdGEtPnJlcS5kb2guaGVhZGVycyk7CiAgIGRhdGEtPnJlcS5kb2guaGVhZGVycyA9IE5VTEw7Ci0gIGN1cmxfZWFzeV9jbGVhbnVwKGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uZWFzeSk7Ci0gIGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uZWFzeSA9IE5VTEw7Ci0gIGN1cmxfZWFzeV9jbGVhbnVwKGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZWFzeSk7Ci0gIGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZWFzeSA9IE5VTEw7CisgIGZvcihzbG90ID0gMDsgc2xvdCA8IERPSF9QUk9CRV9TTE9UUzsgc2xvdCsrKSB7CisgICAgQ3VybF9jbG9zZSgmZGF0YS0+cmVxLmRvaC5wcm9iZVtzbG90XS5lYXN5KTsKKyAgfQogICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIERPSGNvZGUgc2tpcHFuYW1lKHVuc2lnbmVkIGNoYXIgKmRvaCwgc2l6ZV90IGRvaGxlbiwKK3N0YXRpYyBET0hjb2RlIHNraXBxbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpkb2gsIHNpemVfdCBkb2hsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICppbmRleHApCiB7CiAgIHVuc2lnbmVkIGNoYXIgbGVuZ3RoOwpAQCAtNDEyLDE4ICs0NTIsMjQgQEAKICAgcmV0dXJuIERPSF9PSzsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldDE2Yml0KHVuc2lnbmVkIGNoYXIgKmRvaCwgaW50IGluZGV4KQorc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldDE2Yml0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvaCwgaW50IGluZGV4KQogewogICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSgoZG9oW2luZGV4XSA8PCA4KSB8IGRvaFtpbmRleCArIDFdKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXQzMmJpdCh1bnNpZ25lZCBjaGFyICpkb2gsIGludCBpbmRleCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0MzJiaXQoY29uc3QgdW5zaWduZWQgY2hhciAqZG9oLCBpbnQgaW5kZXgpCiB7Ci0gIHJldHVybiAoZG9oW2luZGV4XSA8PCAyNCkgfCAoZG9oW2luZGV4ICsgMV0gPDwgMTYpIHwKLSAgICAoZG9oW2luZGV4ICsgMl0gPDwgOCkgfCBkb2hbaW5kZXggKyAzXTsKKyAgIC8qIG1ha2UgY2xhbmcgYW5kIGdjYyBvcHRpbWl6ZSB0aGlzIHRvIGJzd2FwIGJ5IGluY3JlbWVudGluZworICAgICAgdGhlIHBvaW50ZXIgZmlyc3QuICovCisgICBkb2ggKz0gaW5kZXg7CisKKyAgIC8qIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvdXIgYnkgY2FzdGluZyB0byB1bnNpZ25lZCBiZWZvcmUgc2hpZnRpbmcKKyAgICAgIDI0IGJpdHMsIHBvc3NpYmx5IGludG8gdGhlIHNpZ24gYml0LiBjb2RlZ2VuIGlzIHNhbWUsIGJ1dAorICAgICAgdWIgc2FuaXRpemVyIHdvbid0IGJlIHVwc2V0ICovCisgIHJldHVybiAoICh1bnNpZ25lZClkb2hbMF0gPDwgMjQpIHwgKGRvaFsxXSA8PCAxNikgfChkb2hbMl0gPDwgOCkgfCBkb2hbM107CiB9CiAKLXN0YXRpYyBET0hjb2RlIHN0b3JlX2EodW5zaWduZWQgY2hhciAqZG9oLCBpbnQgaW5kZXgsIHN0cnVjdCBkb2hlbnRyeSAqZCkKK3N0YXRpYyBET0hjb2RlIHN0b3JlX2EoY29uc3QgdW5zaWduZWQgY2hhciAqZG9oLCBpbnQgaW5kZXgsIHN0cnVjdCBkb2hlbnRyeSAqZCkKIHsKICAgLyogc2lsZW50bHkgaWdub3JlIGFkZHJlc3NlcyBvdmVyIHRoZSBsaW1pdCAqLwogICBpZihkLT5udW1hZGRyIDwgRE9IX01BWF9BRERSKSB7CkBAIC00MzUsNyArNDgxLDkgQEAKICAgcmV0dXJuIERPSF9PSzsKIH0KIAotc3RhdGljIERPSGNvZGUgc3RvcmVfYWFhYSh1bnNpZ25lZCBjaGFyICpkb2gsIGludCBpbmRleCwgc3RydWN0IGRvaGVudHJ5ICpkKQorc3RhdGljIERPSGNvZGUgc3RvcmVfYWFhYShjb25zdCB1bnNpZ25lZCBjaGFyICpkb2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRvaGVudHJ5ICpkKQogewogICAvKiBzaWxlbnRseSBpZ25vcmUgYWRkcmVzc2VzIG92ZXIgdGhlIGxpbWl0ICovCiAgIGlmKGQtPm51bWFkZHIgPCBET0hfTUFYX0FERFIpIHsKQEAgLTQ0NywzOCArNDk1LDEyIEBACiAgIHJldHVybiBET0hfT0s7CiB9CiAKLXN0YXRpYyBET0hjb2RlIGNuYW1lYXBwZW5kKHN0cnVjdCBjbmFtZXN0b3JlICpjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKLXsKLSAgaWYoIWMtPmFsbG9jKSB7Ci0gICAgYy0+YWxsb2NzaXplID0gbGVuICsgMTsKLSAgICBjLT5hbGxvYyA9IG1hbGxvYyhjLT5hbGxvY3NpemUpOwotICAgIGlmKCFjLT5hbGxvYykKLSAgICAgIHJldHVybiBET0hfT1VUX09GX01FTTsKLSAgfQotICBlbHNlIGlmKGMtPmFsbG9jc2l6ZSA8IChjLT5hbGxvY3NpemUgKyBsZW4gKyAxKSkgewotICAgIGNoYXIgKnB0cjsKLSAgICBjLT5hbGxvY3NpemUgKz0gbGVuICsgMTsKLSAgICBwdHIgPSByZWFsbG9jKGMtPmFsbG9jLCBjLT5hbGxvY3NpemUpOwotICAgIGlmKCFwdHIpIHsKLSAgICAgIGZyZWUoYy0+YWxsb2MpOwotICAgICAgcmV0dXJuIERPSF9PVVRfT0ZfTUVNOwotICAgIH0KLSAgICBjLT5hbGxvYyA9IHB0cjsKLSAgfQotICBtZW1jcHkoJmMtPmFsbG9jW2MtPmxlbl0sIHNyYywgbGVuKTsKLSAgYy0+bGVuICs9IGxlbjsKLSAgYy0+YWxsb2NbYy0+bGVuXSA9IDA7IC8qIGtlZXAgaXQgemVybyB0ZXJtaW5hdGVkICovCi0gIHJldHVybiBET0hfT0s7Ci19Ci0KLXN0YXRpYyBET0hjb2RlIHN0b3JlX2NuYW1lKHVuc2lnbmVkIGNoYXIgKmRvaCwKK3N0YXRpYyBET0hjb2RlIHN0b3JlX2NuYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkb2hsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG9oZW50cnkgKmQpCiB7Ci0gIHN0cnVjdCBjbmFtZXN0b3JlICpjOworICBzdHJ1Y3QgZHluYnVmICpjOwogICB1bnNpZ25lZCBpbnQgbG9vcCA9IDEyODsgLyogYSB2YWxpZCBETlMgbmFtZSBjYW4gbmV2ZXIgbG9vcCB0aGlzIG11Y2ggKi8KICAgdW5zaWduZWQgY2hhciBsZW5ndGg7CiAKQEAgLTQ5Niw3ICs1MTgsNyBAQAogICAgICAgaWYoKGluZGV4ICsgMSkgPj0gZG9obGVuKQogICAgICAgICByZXR1cm4gRE9IX0ROU19PVVRfT0ZfUkFOR0U7CiAKLSAgICAgIC8qIG1vdmUgdG8gdGhlIHRoZSBuZXcgaW5kZXggKi8KKyAgICAgIC8qIG1vdmUgdG8gdGhlIG5ldyBpbmRleCAqLwogICAgICAgbmV3cG9zID0gKGxlbmd0aCAmIDB4M2YpIDw8IDggfCBkb2hbaW5kZXggKyAxXTsKICAgICAgIGluZGV4ID0gbmV3cG9zOwogICAgICAgY29udGludWU7CkBAIC01MDcsMTggKzUyOSwxNSBAQAogICAgICAgaW5kZXgrKzsKIAogICAgIGlmKGxlbmd0aCkgewotICAgICAgRE9IY29kZSByYzsKLSAgICAgIGlmKGMtPmxlbikgewotICAgICAgICByYyA9IGNuYW1lYXBwZW5kKGMsICh1bnNpZ25lZCBjaGFyICopIi4iLCAxKTsKLSAgICAgICAgaWYocmMpCi0gICAgICAgICAgcmV0dXJuIHJjOworICAgICAgaWYoQ3VybF9keW5fbGVuKGMpKSB7CisgICAgICAgIGlmKEN1cmxfZHluX2FkZChjLCAiLiIpKQorICAgICAgICAgIHJldHVybiBET0hfT1VUX09GX01FTTsKICAgICAgIH0KICAgICAgIGlmKChpbmRleCArIGxlbmd0aCkgPiBkb2hsZW4pCiAgICAgICAgIHJldHVybiBET0hfRE5TX0JBRF9MQUJFTDsKIAotICAgICAgcmMgPSBjbmFtZWFwcGVuZChjLCAmZG9oW2luZGV4XSwgbGVuZ3RoKTsKLSAgICAgIGlmKHJjKQotICAgICAgICByZXR1cm4gcmM7CisgICAgICBpZihDdXJsX2R5bl9hZGRuKGMsICZkb2hbaW5kZXhdLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gRE9IX09VVF9PRl9NRU07CiAgICAgICBpbmRleCArPSBsZW5ndGg7CiAgICAgfQogICB9IHdoaWxlKGxlbmd0aCAmJiAtLWxvb3ApOwpAQCAtNTI4LDcgKzU0Nyw3IEBACiAgIHJldHVybiBET0hfT0s7CiB9CiAKLXN0YXRpYyBET0hjb2RlIHJkYXRhKHVuc2lnbmVkIGNoYXIgKmRvaCwKK3N0YXRpYyBET0hjb2RlIHJkYXRhKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvaCwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkb2hsZW4sCiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCkBAIC01NjEsNiArNTgwLDkgQEAKICAgICBpZihyYykKICAgICAgIHJldHVybiByYzsKICAgICBicmVhazsKKyAgY2FzZSBETlNfVFlQRV9ETkFNRToKKyAgICAvKiBleHBsaWNpdCBmb3IgY2xhcml0eTsganVzdCBza2lwOyByZWx5IG9uIHN5bnRoZXNpemVkIENOQU1FICAqLworICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIC8qIHVuc3VwcG9ydGVkIHR5cGUsIGp1c3Qgc2tpcCBpdCAqLwogICAgIGJyZWFrOwpAQCAtNTY4LDE0ICs1OTAsMTcgQEAKICAgcmV0dXJuIERPSF9PSzsKIH0KIAotc3RhdGljIHZvaWQgaW5pdF9kb2hlbnRyeShzdHJ1Y3QgZG9oZW50cnkgKmRlKQorVU5JVFRFU1Qgdm9pZCBkZV9pbml0KHN0cnVjdCBkb2hlbnRyeSAqZGUpCiB7CisgIGludCBpOwogICBtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpKTsKICAgZGUtPnR0bCA9IElOVF9NQVg7CisgIGZvcihpID0gMDsgaSA8IERPSF9NQVhfQ05BTUU7IGkrKykKKyAgICBDdXJsX2R5bl9pbml0KCZkZS0+Y25hbWVbaV0sIERZTl9ET0hfQ05BTUUpOwogfQogCiAKLVVOSVRURVNUIERPSGNvZGUgZG9oX2RlY29kZSh1bnNpZ25lZCBjaGFyICpkb2gsCitVTklUVEVTVCBET0hjb2RlIGRvaF9kZWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqZG9oLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkb2hsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE5TdHlwZSBkbnN0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb2hlbnRyeSAqZCkKQEAgLTYyMiw4ICs2NDcsMTAgQEAKICAgICAgIHJldHVybiBET0hfRE5TX09VVF9PRl9SQU5HRTsKIAogICAgIHR5cGUgPSBnZXQxNmJpdChkb2gsIGluZGV4KTsKLSAgICBpZigodHlwZSAhPSBETlNfVFlQRV9DTkFNRSkgJiYgKHR5cGUgIT0gZG5zdHlwZSkpCi0gICAgICAvKiBOb3QgdGhlIHNhbWUgdHlwZSBhcyB3YXMgYXNrZWQgZm9yIG5vciBDTkFNRSAqLworICAgIGlmKCh0eXBlICE9IEROU19UWVBFX0NOQU1FKSAgICAvKiBtYXkgYmUgc3ludGhlc2l6ZWQgZnJvbSBETkFNRSAqLworICAgICAgICYmICh0eXBlICE9IEROU19UWVBFX0ROQU1FKSAvKiBpZiBwcmVzZW50LCBhY2NlcHQgYW5kIGlnbm9yZSAqLworICAgICAgICYmICh0eXBlICE9IGRuc3R5cGUpKQorICAgICAgLyogTm90IHRoZSBzYW1lIHR5cGUgYXMgd2FzIGFza2VkIGZvciBub3IgQ05BTUUgbm9yIEROQU1FICovCiAgICAgICByZXR1cm4gRE9IX0ROU19VTkVYUEVDVEVEX1RZUEU7CiAgICAgaW5kZXggKz0gMjsKIApAQCAtNzEzLDEyICs3NDAsMTIgQEAKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiBzdGF0aWMgdm9pZCBzaG93ZG9oKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb2hlbnRyeSAqZCkKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRvaGVudHJ5ICpkKQogewogICBpbnQgaTsKICAgaW5mb2YoZGF0YSwgIlRUTDogJXUgc2Vjb25kc1xuIiwgZC0+dHRsKTsKICAgZm9yKGkgPSAwOyBpIDwgZC0+bnVtYWRkcjsgaSsrKSB7Ci0gICAgc3RydWN0IGRvaGFkZHIgKmEgPSAmZC0+YWRkcltpXTsKKyAgICBjb25zdCBzdHJ1Y3QgZG9oYWRkciAqYSA9ICZkLT5hZGRyW2ldOwogICAgIGlmKGEtPnR5cGUgPT0gRE5TX1RZUEVfQSkgewogICAgICAgaW5mb2YoZGF0YSwgIkRPSCBBOiAldS4ldS4ldS4ldVxuIiwKICAgICAgICAgICAgIGEtPmlwLnY0WzBdLCBhLT5pcC52NFsxXSwKQEAgLTc0NCw3ICs3NzEsNyBAQAogICAgIH0KICAgfQogICBmb3IoaSA9IDA7IGkgPCBkLT5udW1jbmFtZTsgaSsrKSB7Ci0gICAgaW5mb2YoZGF0YSwgIkNOQU1FOiAlc1xuIiwgZC0+Y25hbWVbaV0uYWxsb2MpOworICAgIGluZm9mKGRhdGEsICJDTkFNRTogJXNcbiIsIEN1cmxfZHluX3B0cigmZC0+Y25hbWVbaV0pKTsKICAgfQogfQogI2Vsc2UKQEAgLTc2NCwxOCArNzkxLDE5IEBACiAgKiBtdXN0IGJlIGFuIGFzc29jaWF0ZWQgY2FsbCBsYXRlciB0byBDdXJsX2ZyZWVhZGRyaW5mbygpLgogICovCiAKLXN0YXRpYyBDdXJsX2FkZHJpbmZvICoKK3N0YXRpYyBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqCiBkb2gyYWkoY29uc3Qgc3RydWN0IGRvaGVudHJ5ICpkZSwgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0KQogewotICBDdXJsX2FkZHJpbmZvICphaTsKLSAgQ3VybF9hZGRyaW5mbyAqcHJldmFpID0gTlVMTDsKLSAgQ3VybF9hZGRyaW5mbyAqZmlyc3RhaSA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaTsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKnByZXZhaSA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpmaXJzdGFpID0gTlVMTDsKICAgc3RydWN0IHNvY2thZGRyX2luICphZGRyOwogI2lmZGVmIEVOQUJMRV9JUFY2CiAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2OwogI2VuZGlmCiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBpbnQgaTsKKyAgc2l6ZV90IGhvc3RsZW4gPSBzdHJsZW4oaG9zdG5hbWUpICsgMTsgLyogaW5jbHVkZSB6ZXJvIHRlcm1pbmF0b3IgKi8KIAogICBpZighZGUpCiAgICAgLyogbm8gaW5wdXQgPT0gbm8gb3V0cHV0ISAqLwpAQCAtNzk4LDI0ICs4MjYsMTQgQEAKICAgICAgIGFkZHJ0eXBlID0gQUZfSU5FVDsKICAgICB9CiAKLSAgICBhaSA9IGNhbGxvYygxLCBzaXplb2YoQ3VybF9hZGRyaW5mbykpOworICAgIGFpID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgQ3VybF9hZGRyaW5mbykgKyBzc19zaXplICsgaG9zdGxlbik7CiAgICAgaWYoIWFpKSB7CiAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFpLT5haV9jYW5vbm5hbWUgPSBzdHJkdXAoaG9zdG5hbWUpOwotICAgIGlmKCFhaS0+YWlfY2Fub25uYW1lKSB7Ci0gICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgZnJlZShhaSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgYWktPmFpX2FkZHIgPSBjYWxsb2MoMSwgc3Nfc2l6ZSk7Ci0gICAgaWYoIWFpLT5haV9hZGRyKSB7Ci0gICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgZnJlZShhaS0+YWlfY2Fub25uYW1lKTsKLSAgICAgIGZyZWUoYWkpOwotICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGFpLT5haV9hZGRyID0gKHZvaWQgKikoKGNoYXIgKilhaSArIHNpemVvZihzdHJ1Y3QgQ3VybF9hZGRyaW5mbykpOworICAgIGFpLT5haV9jYW5vbm5hbWUgPSAodm9pZCAqKSgoY2hhciAqKWFpLT5haV9hZGRyICsgc3Nfc2l6ZSk7CisgICAgbWVtY3B5KGFpLT5haV9jYW5vbm5hbWUsIGhvc3RuYW1lLCBob3N0bGVuKTsKIAogICAgIGlmKCFmaXJzdGFpKQogICAgICAgLyogc3RvcmUgdGhlIHBvaW50ZXIgd2Ugd2FudCB0byByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uICovCkBAIC04NzcsNTQgKzg5NSw1NCBAQAogewogICBpbnQgaSA9IDA7CiAgIGZvcihpID0gMDsgaSA8IGQtPm51bWNuYW1lOyBpKyspIHsKLSAgICBmcmVlKGQtPmNuYW1lW2ldLmFsbG9jKTsKKyAgICBDdXJsX2R5bl9mcmVlKCZkLT5jbmFtZVtpXSk7CiAgIH0KIH0KIAogQ1VSTGNvZGUgQ3VybF9kb2hfaXNfcmVzb2x2ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zcCkKIHsKKyAgQ1VSTGNvZGUgcmVzdWx0OwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgKmRuc3AgPSBOVUxMOyAvKiBkZWZhdWx0cyB0byBubyByZXNwb25zZSAqLwogCi0gIGlmKCFkYXRhLT5yZXEuZG9oLnByb2JlWzBdLmVhc3kgJiYgIWRhdGEtPnJlcS5kb2gucHJvYmVbMV0uZWFzeSkgeworICBpZighZGF0YS0+cmVxLmRvaC5wcm9iZVtET0hfUFJPQkVfU0xPVF9JUEFERFJfVjRdLmVhc3kgJiYKKyAgICAgIWRhdGEtPnJlcS5kb2gucHJvYmVbRE9IX1BST0JFX1NMT1RfSVBBRERSX1Y2XS5lYXN5KSB7CiAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBET0gtcmVzb2x2ZTogJXMiLCBjb25uLT5hc3luYy5ob3N0bmFtZSk7CiAgICAgcmV0dXJuIGNvbm4tPmJpdHMucHJveHk/Q1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZOgogICAgICAgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CiAgIH0KICAgZWxzZSBpZighZGF0YS0+cmVxLmRvaC5wZW5kaW5nKSB7Ci0gICAgRE9IY29kZSByYzsKLSAgICBET0hjb2RlIHJjMjsKKyAgICBET0hjb2RlIHJjW0RPSF9QUk9CRV9TTE9UU10gPSB7CisgICAgICBET0hfT0ssIERPSF9PSworICAgIH07CiAgICAgc3RydWN0IGRvaGVudHJ5IGRlOworICAgIGludCBzbG90OwogICAgIC8qIHJlbW92ZSBET0ggaGFuZGxlcyBmcm9tIG11bHRpIGhhbmRsZSBhbmQgY2xvc2UgdGhlbSAqLwotICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShkYXRhLT5tdWx0aSwgZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5lYXN5KTsKLSAgICBDdXJsX2Nsb3NlKGRhdGEtPnJlcS5kb2gucHJvYmVbMF0uZWFzeSk7Ci0gICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGRhdGEtPm11bHRpLCBkYXRhLT5yZXEuZG9oLnByb2JlWzFdLmVhc3kpOwotICAgIEN1cmxfY2xvc2UoZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5lYXN5KTsKLQorICAgIGZvcihzbG90ID0gMDsgc2xvdCA8IERPSF9QUk9CRV9TTE9UUzsgc2xvdCsrKSB7CisgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoZGF0YS0+bXVsdGksIGRhdGEtPnJlcS5kb2gucHJvYmVbc2xvdF0uZWFzeSk7CisgICAgICBDdXJsX2Nsb3NlKCZkYXRhLT5yZXEuZG9oLnByb2JlW3Nsb3RdLmVhc3kpOworICAgIH0KICAgICAvKiBwYXJzZSB0aGUgcmVzcG9uc2VzLCBjcmVhdGUgdGhlIHN0cnVjdCBhbmQgcmV0dXJuIGl0ISAqLwotICAgIGluaXRfZG9oZW50cnkoJmRlKTsKLSAgICByYyA9IGRvaF9kZWNvZGUoZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5zZXJ2ZXJkb2gubWVtb3J5LAotICAgICAgICAgICAgICAgICAgICBkYXRhLT5yZXEuZG9oLnByb2JlWzBdLnNlcnZlcmRvaC5zaXplLAotICAgICAgICAgICAgICAgICAgICBkYXRhLT5yZXEuZG9oLnByb2JlWzBdLmRuc3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICZkZSk7Ci0gICAgZnJlZShkYXRhLT5yZXEuZG9oLnByb2JlWzBdLnNlcnZlcmRvaC5tZW1vcnkpOwotICAgIGlmKHJjKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiRE9IOiAlcyB0eXBlICVzIGZvciAlc1xuIiwgZG9oX3N0cmVycm9yKHJjKSwKLSAgICAgICAgICAgIHR5cGUybmFtZShkYXRhLT5yZXEuZG9oLnByb2JlWzBdLmRuc3R5cGUpLAotICAgICAgICAgICAgZGF0YS0+cmVxLmRvaC5ob3N0KTsKLSAgICB9Ci0gICAgcmMyID0gZG9oX2RlY29kZShkYXRhLT5yZXEuZG9oLnByb2JlWzFdLnNlcnZlcmRvaC5tZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICBkYXRhLT5yZXEuZG9oLnByb2JlWzFdLnNlcnZlcmRvaC5zaXplLAotICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5kbnN0eXBlLAotICAgICAgICAgICAgICAgICAgICAgJmRlKTsKLSAgICBmcmVlKGRhdGEtPnJlcS5kb2gucHJvYmVbMV0uc2VydmVyZG9oLm1lbW9yeSk7Ci0gICAgaWYocmMyKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiRE9IOiAlcyB0eXBlICVzIGZvciAlc1xuIiwgZG9oX3N0cmVycm9yKHJjMiksCi0gICAgICAgICAgICB0eXBlMm5hbWUoZGF0YS0+cmVxLmRvaC5wcm9iZVsxXS5kbnN0eXBlKSwKLSAgICAgICAgICAgIGRhdGEtPnJlcS5kb2guaG9zdCk7Ci0gICAgfQotICAgIGlmKCFyYyB8fCAhcmMyKSB7CisgICAgZGVfaW5pdCgmZGUpOworICAgIGZvcihzbG90ID0gMDsgc2xvdCA8IERPSF9QUk9CRV9TTE9UUzsgc2xvdCsrKSB7CisgICAgICBzdHJ1Y3QgZG5zcHJvYmUgKnAgPSAmZGF0YS0+cmVxLmRvaC5wcm9iZVtzbG90XTsKKyAgICAgIGlmKCFwLT5kbnN0eXBlKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIHJjW3Nsb3RdID0gZG9oX2RlY29kZShDdXJsX2R5bl91cHRyKCZwLT5zZXJ2ZXJkb2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmcC0+c2VydmVyZG9oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5kbnN0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZSk7CisgICAgICBDdXJsX2R5bl9mcmVlKCZwLT5zZXJ2ZXJkb2gpOworICAgICAgaWYocmNbc2xvdF0pIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkRPSDogJXMgdHlwZSAlcyBmb3IgJXNcbiIsIGRvaF9zdHJlcnJvcihyY1tzbG90XSksCisgICAgICAgICAgICAgIHR5cGUybmFtZShwLT5kbnN0eXBlKSwgZGF0YS0+cmVxLmRvaC5ob3N0KTsKKyAgICAgIH0KKyAgICB9IC8qIG5leHQgc2xvdCAqLworCisgICAgcmVzdWx0ID0gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7IC8qIHVudGlsIHdlIGtub3cgYmV0dGVyICovCisgICAgaWYoIXJjW0RPSF9QUk9CRV9TTE9UX0lQQUREUl9WNF0gfHwgIXJjW0RPSF9QUk9CRV9TTE9UX0lQQUREUl9WNl0pIHsKKyAgICAgIC8qIHdlIGhhdmUgYW4gYWRkcmVzcywgb2Ygb25lIGtpbmQgb3Igb3RoZXIgKi8KICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zOwogICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpOwogCkBAIC05NDYsMjEgKzk2NCwyNiBAQAogICAgICAgaWYoZGF0YS0+c2hhcmUpCiAgICAgICAgIEN1cmxfc2hhcmVfdW5sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0ROUyk7CiAKLSAgICAgIGRlX2NsZWFudXAoJmRlKTsKLSAgICAgIGlmKCFkbnMpCisgICAgICBpZighZG5zKSB7CiAgICAgICAgIC8qIHJldHVybmVkIGZhaWx1cmUsIGJhaWwgb3V0IG5pY2VseSAqLwogICAgICAgICBDdXJsX2ZyZWVhZGRyaW5mbyhhaSk7CisgICAgICB9CiAgICAgICBlbHNlIHsKICAgICAgICAgY29ubi0+YXN5bmMuZG5zID0gZG5zOwogICAgICAgICAqZG5zcCA9IGRuczsKLSAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgICByZXN1bHQgPSBDVVJMRV9PSzsgICAgICAvKiBhZGRyZXNzIHJlc29sdXRpb24gT0sgKi8KICAgICAgIH0KLSAgICB9CisgICAgfSAvKiBhZGRyZXNzIHByb2Nlc3NpbmcgZG9uZSAqLworCisgICAgLyogTm93IHByb2Nlc3MgYW55IGJ1aWxkLXNwZWNpZmljIGF0dHJpYnV0ZXMgcmV0cmlldmVkIGZyb20gRE5TICovCisKKyAgICAvKiBBbGwgZG9uZSAqLwogICAgIGRlX2NsZWFudXAoJmRlKTsKKyAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwotICB9CisgIH0gLyogIWRhdGEtPnJlcS5kb2gucGVuZGluZyAqLwogCisgIC8qIGVsc2Ugd2FpdCBmb3IgcGVuZGluZyBET0ggdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlICovCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZG9oLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guaAppbmRleCAzNGJmYTZmLi5iYmQ0YzFhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb2guaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzIsMTYgKzMyLDE1IEBACiAgKiBhbmQgcmV0dXJucyBhICdDdXJsX2FkZHJpbmZvIConIHdpdGggdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24uCiAgKi8KIAotQ3VybF9hZGRyaW5mbyAqQ3VybF9kb2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfZG9oKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKTsKIAogQ1VSTGNvZGUgQ3VybF9kb2hfaXNfcmVzb2x2ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zKTsKIAotaW50IEN1cmxfZG9oX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitpbnQgQ3VybF9kb2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogdHlwZWRlZiBlbnVtIHsKICAgRE9IX09LLApAQCAtNTYsMjUgKzU1LDIxIEBACiAgIERPSF9ETlNfVU5FWFBFQ1RFRF9UWVBFLCAgLyogOSAqLwogICBET0hfRE5TX1VORVhQRUNURURfQ0xBU1MsIC8qIDEwICovCiAgIERPSF9OT19DT05URU5ULCAgICAgICAgICAgLyogMTEgKi8KLSAgRE9IX0ROU19CQURfSUQgICAgICAgICAgICAvKiAxMiAqLworICBET0hfRE5TX0JBRF9JRCwgICAgICAgICAgIC8qIDEyICovCisgIERPSF9ETlNfTkFNRV9UT09fTE9ORyAgICAgLyogMTMgKi8KIH0gRE9IY29kZTsKIAogdHlwZWRlZiBlbnVtIHsKICAgRE5TX1RZUEVfQSA9IDEsCiAgIEROU19UWVBFX05TID0gMiwKICAgRE5TX1RZUEVfQ05BTUUgPSA1LAotICBETlNfVFlQRV9BQUFBID0gMjgKKyAgRE5TX1RZUEVfQUFBQSA9IDI4LAorICBETlNfVFlQRV9ETkFNRSA9IDM5ICAgICAgICAgICAvKiBSRkM2NjcyICovCiB9IEROU3R5cGU7CiAKICNkZWZpbmUgRE9IX01BWF9BRERSIDI0CiAjZGVmaW5lIERPSF9NQVhfQ05BTUUgNAogCi1zdHJ1Y3QgY25hbWVzdG9yZSB7Ci0gIHNpemVfdCBsZW47ICAgICAgIC8qIGxlbmd0aCBvZiBjbmFtZSAqLwotICBjaGFyICphbGxvYzsgICAgICAvKiBhbGxvY2F0ZWQgcG9pbnRlciAqLwotICBzaXplX3QgYWxsb2NzaXplOyAvKiBhbGxvY2F0ZWQgc2l6ZSAqLwotfTsKLQogc3RydWN0IGRvaGFkZHIgewogICBpbnQgdHlwZTsKICAgdW5pb24gewpAQCAtODQsMTEgKzc5LDExIEBACiB9OwogCiBzdHJ1Y3QgZG9oZW50cnkgewotICB1bnNpZ25lZCBpbnQgdHRsOwotICBpbnQgbnVtYWRkcjsKKyAgc3RydWN0IGR5bmJ1ZiBjbmFtZVtET0hfTUFYX0NOQU1FXTsKICAgc3RydWN0IGRvaGFkZHIgYWRkcltET0hfTUFYX0FERFJdOworICBpbnQgbnVtYWRkcjsKKyAgdW5zaWduZWQgaW50IHR0bDsKICAgaW50IG51bWNuYW1lOwotICBzdHJ1Y3QgY25hbWVzdG9yZSBjbmFtZVtET0hfTUFYX0NOQU1FXTsKIH07CiAKIApAQCAtOTgsMTAgKzkzLDExIEBACiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZG5zcCwgLyogYnVmZmVyICovCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgIC8qIGJ1ZmZlciBzaXplICovCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvbGVuKTsgLyogb3V0cHV0IGxlbmd0aCAqLwotRE9IY29kZSBkb2hfZGVjb2RlKHVuc2lnbmVkIGNoYXIgKmRvaCwKK0RPSGNvZGUgZG9oX2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICpkb2gsCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRvaGxlbiwKICAgICAgICAgICAgICAgICAgICBETlN0eXBlIGRuc3R5cGUsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRvaGVudHJ5ICpkKTsKK3ZvaWQgZGVfaW5pdChzdHJ1Y3QgZG9oZW50cnkgKmQpOwogdm9pZCBkZV9jbGVhbnVwKHN0cnVjdCBkb2hlbnRyeSAqZCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZG90ZG90LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuYwppbmRleCAyYzYxNzdhLi5jZTlhMDUyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzksNyArMzksNyBAQAogICogQ3VybF9kZWRvdGRvdGlmeSgpCiAgKiBAdW5pdHRlc3Q6IDEzOTUKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgYSB6ZXJvLXRlcm1pbmF0ZWQgcGF0aCB3aXRoIGRvdCBhbmQgZG90ZG90IHNlcXVlbmNlcworICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgbnVsbC10ZXJtaW5hdGVkIHBhdGggd2l0aCBkb3QgYW5kIGRvdGRvdCBzZXF1ZW5jZXMKICAqIHBhc3NlZCBpbiBhbmQgc3RyaXBzIHRoZW0gb2ZmIGFjY29yZGluZyB0byB0aGUgcnVsZXMgaW4gUkZDIDM5ODYgc2VjdGlvbgogICogNS4yLjQuCiAgKgpAQCAtNjIsNyArNjIsNyBAQAogICBpZighb3V0KQogICAgIHJldHVybiBOVUxMOyAvKiBvdXQgb2YgbWVtb3J5ICovCiAKLSAgKm91dCA9IDA7IC8qIHplcm8gdGVybWluYXRlcywgZm9yIGlucHV0cyBsaWtlICIuLyIgKi8KKyAgKm91dCA9IDA7IC8qIG51bGwtdGVybWluYXRlcywgZm9yIGlucHV0cyBsaWtlICIuLyIgKi8KIAogICAvKiBnZXQgYSBjbG9uZWQgY29weSBvZiB0aGUgaW5wdXQgKi8KICAgY2xvbmUgPSBzdHJkdXAoaW5wdXQpOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIGlmKCpvdXRwdHIgPT0gJy8nKQogICAgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgICAgKm91dHB0ciA9IDA7IC8qIHplcm8tdGVybWluYXRlIHdoZXJlIGl0IHN0b3BzICovCisgICAgICAqb3V0cHRyID0gMDsgLyogbnVsbC10ZXJtaW5hdGUgd2hlcmUgaXQgc3RvcHMgKi8KICAgICB9CiAgICAgZWxzZSBpZighc3RyY21wKCIvLi4iLCBjbG9uZSkpIHsKICAgICAgIGNsb25lWzJdPScvJzsKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBpZigqb3V0cHRyID09ICcvJykKICAgICAgICAgICBicmVhazsKICAgICAgIH0KLSAgICAgICpvdXRwdHIgPSAwOyAvKiB6ZXJvLXRlcm1pbmF0ZSB3aGVyZSBpdCBzdG9wcyAqLworICAgICAgKm91dHB0ciA9IDA7IC8qIG51bGwtdGVybWluYXRlIHdoZXJlIGl0IHN0b3BzICovCiAgICAgfQogCiAgICAgLyogIEQuICBpZiB0aGUgaW5wdXQgYnVmZmVyIGNvbnNpc3RzIG9ubHkgb2YgIi4iIG9yICIuLiIsIHRoZW4gcmVtb3ZlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9kb3Rkb3QuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvdGRvdC5oCmluZGV4IDEyNWFmNDMuLmY3MGIxZGIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvdGRvdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2RvdGRvdC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9keW5idWYuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2R5bmJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDM3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9keW5idWYuYwpAQCAtMCwwICsxLDIyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAiZHluYnVmLmgiCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBNSU5fRklSU1RfQUxMT0MgMzIKKworI2RlZmluZSBEWU5JTklUIDB4YmVlNTFkYSAvKiByYW5kb20gcGF0dGVybiAqLworCisvKgorICogSW5pdCBhIGR5bmJ1ZiBzdHJ1Y3QuCisgKi8KK3ZvaWQgQ3VybF9keW5faW5pdChzdHJ1Y3QgZHluYnVmICpzLCBzaXplX3QgdG9vYmlnKQoreworICBERUJVR0FTU0VSVChzKTsKKyAgREVCVUdBU1NFUlQodG9vYmlnKTsKKyAgcy0+YnVmciA9IE5VTEw7CisgIHMtPmxlbmcgPSAwOworICBzLT5hbGxjID0gMDsKKyAgcy0+dG9vYmlnID0gdG9vYmlnOworI2lmZGVmIERFQlVHQlVJTEQKKyAgcy0+aW5pdCA9IERZTklOSVQ7CisjZW5kaWYKK30KKworLyoKKyAqIGZyZWUgdGhlIGJ1ZmZlciBhbmQgcmUtaW5pdCB0aGUgbmVjZXNzYXJ5IGZpZWxkcy4gSXQgZG9lc24ndCB0b3VjaCB0aGUKKyAqICdpbml0JyBmaWVsZCBhbmQgdGh1cyB0aGlzIGJ1ZmZlciBjYW4gYmUgcmV1c2VkIHRvIGFkZCBkYXRhIHRvIGFnYWluLgorICovCit2b2lkIEN1cmxfZHluX2ZyZWUoc3RydWN0IGR5bmJ1ZiAqcykKK3sKKyAgREVCVUdBU1NFUlQocyk7CisgIEN1cmxfc2FmZWZyZWUocy0+YnVmcik7CisgIHMtPmxlbmcgPSBzLT5hbGxjID0gMDsKK30KKworLyoKKyAqIFN0b3JlL2FwcGVuZCBhbiBjaHVuayBvZiBtZW1vcnkgdG8gdGhlIGR5bmJ1Zi4KKyAqLworc3RhdGljIENVUkxjb2RlIGR5bl9uYXBwZW5kKHN0cnVjdCBkeW5idWYgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWVtLCBzaXplX3QgbGVuKQoreworICBzaXplX3QgaW5keCA9IHMtPmxlbmc7CisgIHNpemVfdCBhID0gcy0+YWxsYzsKKyAgc2l6ZV90IGZpdCA9IGxlbiArIGluZHggKyAxOyAvKiBuZXcgc3RyaW5nICsgb2xkIHN0cmluZyArIHplcm8gYnl0ZSAqLworCisgIC8qIHRyeSB0byBkZXRlY3QgaWYgdGhlcmUncyBydWJiaXNoIGluIHRoZSBzdHJ1Y3QgKi8KKyAgREVCVUdBU1NFUlQocy0+aW5pdCA9PSBEWU5JTklUKTsKKyAgREVCVUdBU1NFUlQocy0+dG9vYmlnKTsKKyAgREVCVUdBU1NFUlQoaW5keCA8IHMtPnRvb2JpZyk7CisgIERFQlVHQVNTRVJUKCFzLT5sZW5nIHx8IHMtPmJ1ZnIpOworCisgIGlmKGZpdCA+IHMtPnRvb2JpZykgeworICAgIEN1cmxfZHluX2ZyZWUocyk7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKyAgZWxzZSBpZighYSkgeworICAgIERFQlVHQVNTRVJUKCFpbmR4KTsKKyAgICAvKiBmaXJzdCBpbnZva2UgKi8KKyAgICBpZihmaXQgPCBNSU5fRklSU1RfQUxMT0MpCisgICAgICBhID0gTUlOX0ZJUlNUX0FMTE9DOworICAgIGVsc2UKKyAgICAgIGEgPSBmaXQ7CisgIH0KKyAgZWxzZSB7CisgICAgd2hpbGUoYSA8IGZpdCkKKyAgICAgIGEgKj0gMjsKKyAgfQorCisgIGlmKGEgIT0gcy0+YWxsYykgeworICAgIHMtPmJ1ZnIgPSBDdXJsX3NhZmVyZWFsbG9jKHMtPmJ1ZnIsIGEpOworICAgIGlmKCFzLT5idWZyKSB7CisgICAgICBzLT5sZW5nID0gcy0+YWxsYyA9IDA7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgICAgcy0+YWxsYyA9IGE7CisgIH0KKworICBpZihsZW4pCisgICAgbWVtY3B5KCZzLT5idWZyW2luZHhdLCBtZW0sIGxlbik7CisgIHMtPmxlbmcgPSBpbmR4ICsgbGVuOworICBzLT5idWZyW3MtPmxlbmddID0gMDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogQ2xlYXJzIHRoZSBzdHJpbmcsIGtlZXBzIHRoZSBhbGxvY2F0aW9uLiBUaGlzIGNhbiBhbHNvIGJlIGNhbGxlZCBvbiBhCisgKiBidWZmZXIgdGhhdCBhbHJlYWR5IHdhcyBmcmVlZC4KKyAqLwordm9pZCBDdXJsX2R5bl9yZXNldChzdHJ1Y3QgZHluYnVmICpzKQoreworICBERUJVR0FTU0VSVChzKTsKKyAgREVCVUdBU1NFUlQocy0+aW5pdCA9PSBEWU5JTklUKTsKKyAgREVCVUdBU1NFUlQoIXMtPmxlbmcgfHwgcy0+YnVmcik7CisgIGlmKHMtPmxlbmcpCisgICAgcy0+YnVmclswXSA9IDA7CisgIHMtPmxlbmcgPSAwOworfQorCisjaWZkZWYgVVNFX05HVENQMgorLyoKKyAqIFNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIHRhaWwgdG8ga2VlcCAobnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIGVuZCBvZiB0aGUKKyAqIGJ1ZmZlcikuIFRoZSByZXN0IHdpbGwgYmUgZHJvcHBlZC4KKyAqLworQ1VSTGNvZGUgQ3VybF9keW5fdGFpbChzdHJ1Y3QgZHluYnVmICpzLCBzaXplX3QgdHJhaWwpCit7CisgIERFQlVHQVNTRVJUKHMpOworICBERUJVR0FTU0VSVChzLT5pbml0ID09IERZTklOSVQpOworICBERUJVR0FTU0VSVCghcy0+bGVuZyB8fCBzLT5idWZyKTsKKyAgaWYodHJhaWwgPiBzLT5sZW5nKQorICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgIGVsc2UgaWYodHJhaWwgPT0gcy0+bGVuZykKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGVsc2UgaWYoIXRyYWlsKSB7CisgICAgQ3VybF9keW5fcmVzZXQocyk7CisgIH0KKyAgZWxzZSB7CisgICAgbWVtbW92ZSgmcy0+YnVmclswXSwgJnMtPmJ1ZnJbcy0+bGVuZyAtIHRyYWlsXSwgdHJhaWwpOworICAgIHMtPmxlbmcgPSB0cmFpbDsKKyAgfQorICByZXR1cm4gQ1VSTEVfT0s7CisKK30KKyNlbmRpZgorCisvKgorICogQXBwZW5kcyBhIGJ1ZmZlciB3aXRoIGxlbmd0aC4KKyAqLworQ1VSTGNvZGUgQ3VybF9keW5fYWRkbihzdHJ1Y3QgZHluYnVmICpzLCBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4pCit7CisgIERFQlVHQVNTRVJUKHMpOworICBERUJVR0FTU0VSVChzLT5pbml0ID09IERZTklOSVQpOworICBERUJVR0FTU0VSVCghcy0+bGVuZyB8fCBzLT5idWZyKTsKKyAgcmV0dXJuIGR5bl9uYXBwZW5kKHMsIG1lbSwgbGVuKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgYXQgdGhlIGVuZC4KKyAqLworQ1VSTGNvZGUgQ3VybF9keW5fYWRkKHN0cnVjdCBkeW5idWYgKnMsIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgc2l6ZV90IG4gPSBzdHJsZW4oc3RyKTsKKyAgREVCVUdBU1NFUlQocyk7CisgIERFQlVHQVNTRVJUKHMtPmluaXQgPT0gRFlOSU5JVCk7CisgIERFQlVHQVNTRVJUKCFzLT5sZW5nIHx8IHMtPmJ1ZnIpOworICByZXR1cm4gZHluX25hcHBlbmQocywgKHVuc2lnbmVkIGNoYXIgKilzdHIsIG4pOworfQorCisvKgorICogQXBwZW5kIGEgc3RyaW5nIHByaW50ZigpLXN0eWxlCisgKi8KK0NVUkxjb2RlIEN1cmxfZHluX2FkZGYoc3RydWN0IGR5bmJ1ZiAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIGNoYXIgKnN0cjsKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQoYXAsIGZtdCk7CisgIHN0ciA9IHZhcHJpbnRmKGZtdCwgYXApOyAvKiB0aGlzIGFsbG9jcyBhIG5ldyBzdHJpbmcgdG8gYXBwZW5kICovCisgIHZhX2VuZChhcCk7CisKKyAgaWYoc3RyKSB7CisgICAgQ1VSTGNvZGUgcmVzdWx0ID0gZHluX25hcHBlbmQocywgKHVuc2lnbmVkIGNoYXIgKilzdHIsIHN0cmxlbihzdHIpKTsKKyAgICBmcmVlKHN0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICAvKiBJZiB3ZSBmYWlsZWQsIHdlIGNsZWFudXAgdGhlIHdob2xlIGJ1ZmZlciBhbmQgcmV0dXJuIGVycm9yICovCisgIEN1cmxfZHluX2ZyZWUocyk7CisgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworfQorCisvKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqLworY2hhciAqQ3VybF9keW5fcHRyKGNvbnN0IHN0cnVjdCBkeW5idWYgKnMpCit7CisgIERFQlVHQVNTRVJUKHMpOworICBERUJVR0FTU0VSVChzLT5pbml0ID09IERZTklOSVQpOworICBERUJVR0FTU0VSVCghcy0+bGVuZyB8fCBzLT5idWZyKTsKKyAgcmV0dXJuIHMtPmJ1ZnI7Cit9CisKKy8qCisgKiBSZXR1cm5zIGFuIHVuc2lnbmVkIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqLwordW5zaWduZWQgY2hhciAqQ3VybF9keW5fdXB0cihjb25zdCBzdHJ1Y3QgZHluYnVmICpzKQoreworICBERUJVR0FTU0VSVChzKTsKKyAgREVCVUdBU1NFUlQocy0+aW5pdCA9PSBEWU5JTklUKTsKKyAgREVCVUdBU1NFUlQoIXMtPmxlbmcgfHwgcy0+YnVmcik7CisgIHJldHVybiAodW5zaWduZWQgY2hhciAqKXMtPmJ1ZnI7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4KKyAqLworc2l6ZV90IEN1cmxfZHluX2xlbihjb25zdCBzdHJ1Y3QgZHluYnVmICpzKQoreworICBERUJVR0FTU0VSVChzKTsKKyAgREVCVUdBU1NFUlQocy0+aW5pdCA9PSBEWU5JTklUKTsKKyAgREVCVUdBU1NFUlQoIXMtPmxlbmcgfHwgcy0+YnVmcik7CisgIHJldHVybiBzLT5sZW5nOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZHluYnVmLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9keW5idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODAyMzllCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZHluYnVmLmgKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9EWU5CVUZfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9EWU5CVUZfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBkeW5idWYgeworICBjaGFyICpidWZyOyAgICAvKiBwb2ludCB0byBhIG51bGwtdGVybWluYXRlZCBhbGxvY2F0ZWQgYnVmZmVyICovCisgIHNpemVfdCBsZW5nOyAgIC8qIG51bWJlciBvZiBieXRlcyAqRVhDTFVESU5HKiB0aGUgemVybyB0ZXJtaW5hdG9yICovCisgIHNpemVfdCBhbGxjOyAgIC8qIHNpemUgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiAqLworICBzaXplX3QgdG9vYmlnOyAvKiBzaXplIGxpbWl0IGZvciB0aGUgYnVmZmVyICovCisjaWZkZWYgREVCVUdCVUlMRAorICBpbnQgaW5pdDsgICAgIC8qIGRldGVjdCBBUEkgdXNhZ2UgbWlzdGFrZXMgKi8KKyNlbmRpZgorfTsKKwordm9pZCBDdXJsX2R5bl9pbml0KHN0cnVjdCBkeW5idWYgKnMsIHNpemVfdCB0b29iaWcpOwordm9pZCBDdXJsX2R5bl9mcmVlKHN0cnVjdCBkeW5idWYgKnMpOworQ1VSTGNvZGUgQ3VybF9keW5fYWRkbihzdHJ1Y3QgZHluYnVmICpzLCBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4pCisgIFdBUk5fVU5VU0VEX1JFU1VMVDsKK0NVUkxjb2RlIEN1cmxfZHluX2FkZChzdHJ1Y3QgZHluYnVmICpzLCBjb25zdCBjaGFyICpzdHIpCisgIFdBUk5fVU5VU0VEX1JFU1VMVDsKK0NVUkxjb2RlIEN1cmxfZHluX2FkZGYoc3RydWN0IGR5bmJ1ZiAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCisgIFdBUk5fVU5VU0VEX1JFU1VMVDsKK3ZvaWQgQ3VybF9keW5fcmVzZXQoc3RydWN0IGR5bmJ1ZiAqcyk7CitDVVJMY29kZSBDdXJsX2R5bl90YWlsKHN0cnVjdCBkeW5idWYgKnMsIHNpemVfdCB0cmFpbCk7CitjaGFyICpDdXJsX2R5bl9wdHIoY29uc3Qgc3RydWN0IGR5bmJ1ZiAqcyk7Cit1bnNpZ25lZCBjaGFyICpDdXJsX2R5bl91cHRyKGNvbnN0IHN0cnVjdCBkeW5idWYgKnMpOworc2l6ZV90IEN1cmxfZHluX2xlbihjb25zdCBzdHJ1Y3QgZHluYnVmICpzKTsKKworLyogRHluYW1pYyBidWZmZXIgbWF4IHNpemVzICovCisjZGVmaW5lIERZTl9ET0hfUkVTUE9OU0UgICAgMzAwMAorI2RlZmluZSBEWU5fRE9IX0NOQU1FICAgICAgIDI1NgorI2RlZmluZSBEWU5fUEFVU0VfQlVGRkVSICAgICg2NCAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBEWU5fSEFYUFJPWFkgICAgICAgIDIwNDgKKyNkZWZpbmUgRFlOX0hUVFBfUkVRVUVTVCAgICAoMTI4KjEwMjQpCisjZGVmaW5lIERZTl9IMl9IRUFERVJTICAgICAgKDEyOCoxMDI0KQorI2RlZmluZSBEWU5fSDJfVFJBSUxFUiAgICAgIDQwOTYKKyNkZWZpbmUgRFlOX0FQUklOVEYgICAgICAgICA4MDAwMDAwCisjZGVmaW5lIERZTl9SVFNQX1JFUV9IRUFERVIgKDY0KjEwMjQpCisjZGVmaW5lIERZTl9UUkFJTEVSUyAgICAgICAgKDY0KjEwMjQpCisjZGVmaW5lIERZTl9QUk9YWV9DT05ORUNUX0hFQURFUlMgMTYzODQKKyNkZWZpbmUgRFlOX1FMT0dfTkFNRSAgICAgICAxMDI0CisjZGVmaW5lIERZTl9IMV9UUkFJTEVSICAgICAgRFlOX0gyX1RSQUlMRVIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZWFzeS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZWFzeS5jCmluZGV4IDRhNmY5NjUuLjI5MmNjYTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Vhc3kuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTcyLDE4ICs3MiwxOCBAQAogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInNpZ3BpcGUuaCIKLSNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ2c3NoL3NzaC5oIgogI2luY2x1ZGUgInNldG9wdC5oIgogI2luY2x1ZGUgImh0dHBfZGlnZXN0LmgiCiAjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCisjaW5jbHVkZSAiaHR0cDIuaCIKKyNpbmNsdWRlICJkeW5idWYuaCIKIAogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCi12b2lkIEN1cmxfdmVyc2lvbl9pbml0KHZvaWQpOwotCiAvKiB0cnVlIGdsb2JhbHMgLS0gZm9yIGN1cmxfZ2xvYmFsX2luaXQoKSBhbmQgY3VybF9nbG9iYWxfY2xlYW51cCgpICovCiBzdGF0aWMgdW5zaWduZWQgaW50ICBpbml0aWFsaXplZDsKIHN0YXRpYyBsb25nICAgICAgICAgIGluaXRfZmxhZ3M7CkBAIC0xNTcsMjAgKzE1NywyMCBAQAogCiAgIGlmKCFDdXJsX3NzbF9pbml0KCkpIHsKICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ3VybF9zc2xfaW5pdCBmYWlsZWRcbiIpKTsKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byBmYWlsOwogICB9CiAKICNpZmRlZiBXSU4zMgogICBpZihDdXJsX3dpbjMyX2luaXQoZmxhZ3MpKSB7CiAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHdpbjMyX2luaXQgZmFpbGVkXG4iKSk7Ci0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIGdvdG8gZmFpbDsKICAgfQogI2VuZGlmCiAKICNpZmRlZiBfX0FNSUdBX18KICAgaWYoIUN1cmxfYW1pZ2FfaW5pdCgpKSB7CiAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IEN1cmxfYW1pZ2FfaW5pdCBmYWlsZWRcbiIpKTsKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byBmYWlsOwogICB9CiAjZW5kaWYKIApAQCAtMTgyLDMzICsxODIsMjkgQEAKIAogICBpZihDdXJsX3Jlc29sdmVyX2dsb2JhbF9pbml0KCkpIHsKICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogcmVzb2x2ZXJfZ2xvYmFsX2luaXQgZmFpbGVkXG4iKSk7Ci0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIGdvdG8gZmFpbDsKICAgfQogCi0gICh2b2lkKUN1cmxfaXB2NndvcmtzKCk7Ci0KLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NIMl9JTklUKQotICBpZihsaWJzc2gyX2luaXQoMCkpIHsKLSAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoMl9pbml0IGZhaWxlZFxuIikpOwotICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyNpZiBkZWZpbmVkKFVTRV9TU0gpCisgIGlmKEN1cmxfc3NoX2luaXQoKSkgeworICAgIGdvdG8gZmFpbDsKICAgfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gpCi0gIGlmKHNzaF9pbml0KCkpIHsKLSAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoX2luaXQgZmFpbGVkXG4iKSk7CisjaWZkZWYgVVNFX1dPTEZTU0gKKyAgaWYoV1NfU1VDQ0VTUyAhPSB3b2xmU1NIX0luaXQoKSkgeworICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiB3b2xmU1NIX0luaXQgZmFpbGVkXG4iKSk7CiAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwogICB9CiAjZW5kaWYKIAotICBpZihmbGFncyAmIENVUkxfR0xPQkFMX0FDS19FSU5UUikKLSAgICBDdXJsX2Fja19laW50ciA9IDE7Ci0KICAgaW5pdF9mbGFncyA9IGZsYWdzOwogCi0gIEN1cmxfdmVyc2lvbl9pbml0KCk7Ci0KICAgcmV0dXJuIENVUkxFX09LOworCisgIGZhaWw6CisgIGluaXRpYWxpemVkLS07IC8qIHVuZG8gdGhlIGluY3JlYXNlICovCisgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKIH0KIAogCkBAIC0yNzQsMTIgKzI3MCwxMCBAQAogCiAgIEN1cmxfYW1pZ2FfY2xlYW51cCgpOwogCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIMikgJiYgZGVmaW5lZChIQVZFX0xJQlNTSDJfRVhJVCkKLSAgKHZvaWQpbGlic3NoMl9leGl0KCk7Ci0jZW5kaWYKKyAgQ3VybF9zc2hfY2xlYW51cCgpOwogCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIKQotICAodm9pZClzc2hfZmluYWxpemUoKTsKKyNpZmRlZiBVU0VfV09MRlNTSAorICAodm9pZCl3b2xmU1NIX0NsZWFudXAoKTsKICNlbmRpZgogCiAgIGluaXRfZmxhZ3MgID0gMDsKQEAgLTUxNiw3ICs1MTAsNyBAQAogICAgIGJlZm9yZSA9IEN1cmxfbm93KCk7CiAKICAgICAvKiB3YWl0IGZvciBhY3Rpdml0eSBvciB0aW1lb3V0ICovCi0gICAgcG9sbHJjID0gQ3VybF9wb2xsKGZkcywgbnVtZmRzLCAoaW50KWV2LT5tcyk7CisgICAgcG9sbHJjID0gQ3VybF9wb2xsKGZkcywgbnVtZmRzLCBldi0+bXMpOwogCiAgICAgYWZ0ZXIgPSBDdXJsX25vdygpOwogCkBAIC02MDIsMjcgKzU5NiwxMSBAQAogCiAgIHdoaWxlKCFkb25lICYmICFtY29kZSkgewogICAgIGludCBzdGlsbF9ydW5uaW5nID0gMDsKLSAgICBib29sIGdvdHNvY2tldCA9IEZBTFNFOwogCi0gICAgbWNvZGUgPSBDdXJsX211bHRpX3dhaXQobXVsdGksIE5VTEwsIDAsIDEwMDAsIE5VTEwsICZnb3Rzb2NrZXQpOworICAgIG1jb2RlID0gY3VybF9tdWx0aV9wb2xsKG11bHRpLCBOVUxMLCAwLCAxMDAwLCBOVUxMKTsKIAotICAgIGlmKCFtY29kZSkgewotICAgICAgaWYoIWdvdHNvY2tldCkgewotICAgICAgICBsb25nIHNsZWVwX21zOwotCi0gICAgICAgIC8qIElmIGl0IHJldHVybnMgd2l0aG91dCBhbnkgZmlsZWRlc2NyaXB0b3IgaW5zdGFudGx5LCB3ZSBuZWVkIHRvCi0gICAgICAgICAgIGF2b2lkIGJ1c3ktbG9vcGluZyBkdXJpbmcgcGVyaW9kcyB3aGVyZSBpdCBoYXMgbm90aGluZyBwYXJ0aWN1bGFyCi0gICAgICAgICAgIHRvIHdhaXQgZm9yICovCi0gICAgICAgIGN1cmxfbXVsdGlfdGltZW91dChtdWx0aSwgJnNsZWVwX21zKTsKLSAgICAgICAgaWYoc2xlZXBfbXMpIHsKLSAgICAgICAgICBpZihzbGVlcF9tcyA+IDEwMDApCi0gICAgICAgICAgICBzbGVlcF9tcyA9IDEwMDA7Ci0gICAgICAgICAgQ3VybF93YWl0X21zKChpbnQpc2xlZXBfbXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0KKyAgICBpZighbWNvZGUpCiAgICAgICBtY29kZSA9IGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aSwgJnN0aWxsX3J1bm5pbmcpOwotICAgIH0KIAogICAgIC8qIG9ubHkgcmVhZCAnc3RpbGxfcnVubmluZycgaWYgY3VybF9tdWx0aV9wZXJmb3JtKCkgcmV0dXJuIE9LICovCiAgICAgaWYoIW1jb2RlICYmICFzdGlsbF9ydW5uaW5nKSB7CkBAIC03MDMsNiArNjgxLDcgQEAKICAgbWNvZGUgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUobXVsdGksIGRhdGEpOwogICBpZihtY29kZSkgewogICAgIGN1cmxfbXVsdGlfY2xlYW51cChtdWx0aSk7CisgICAgZGF0YS0+bXVsdGlfZWFzeSA9IE5VTEw7CiAgICAgaWYobWNvZGUgPT0gQ1VSTE1fT1VUX09GX01FTU9SWSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKQEAgLTcxMCwxMCArNjg5LDYgQEAKIAogICBzaWdwaXBlX2lnbm9yZShkYXRhLCAmcGlwZV9zdCk7CiAKLSAgLyogYXNzaWduIHRoaXMgYWZ0ZXIgY3VybF9tdWx0aV9hZGRfaGFuZGxlKCkgc2luY2UgdGhhdCBmdW5jdGlvbiBjaGVja3MgZm9yCi0gICAgIGl0IGFuZCByZWplY3RzIHRoaXMgaGFuZGxlIG90aGVyd2lzZSAqLwotICBkYXRhLT5tdWx0aSA9IG11bHRpOwotCiAgIC8qIHJ1biB0aGUgdHJhbnNmZXIgKi8KICAgcmVzdWx0ID0gZXZlbnRzID8gZWFzeV9ldmVudHMobXVsdGkpIDogZWFzeV90cmFuc2ZlcihtdWx0aSk7CiAKQEAgLTc2MSw3ICs3MzYsNyBAQAogICAgIHJldHVybjsKIAogICBzaWdwaXBlX2lnbm9yZShkYXRhLCAmcGlwZV9zdCk7Ci0gIEN1cmxfY2xvc2UoZGF0YSk7CisgIEN1cmxfY2xvc2UoJmRhdGEpOwogICBzaWdwaXBlX3Jlc3RvcmUoJnBpcGVfc3QpOwogfQogCkBAIC03ODksNiArNzY0LDcgQEAKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIGVudW0gZHVwc3RyaW5nIGk7CisgIGVudW0gZHVwYmxvYiBqOwogCiAgIC8qIENvcHkgc3JjLT5zZXQgaW50byBkc3QtPnNldCBmaXJzdCwgdGhlbiBkZWFsIHdpdGggdGhlIHN0cmluZ3MKICAgICAgYWZ0ZXJ3YXJkcyAqLwpAQCAtODA1LDYgKzc4MSwxNiBAQAogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCisgIC8qIGNsZWFyIGFsbCBibG9iIHBvaW50ZXJzIGZpcnN0ICovCisgIG1lbXNldChkc3QtPnNldC5ibG9icywgMCwgQkxPQl9MQVNUICogc2l6ZW9mKHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAvKiBkdXBsaWNhdGUgYWxsIGJsb2JzICovCisgIGZvcihqID0gKGVudW0gZHVwYmxvYikwOyBqIDwgQkxPQl9MQVNUOyBqKyspIHsKKyAgICByZXN1bHQgPSBDdXJsX3NldGJsb2JvcHQoJmRzdC0+c2V0LmJsb2JzW2pdLCBzcmMtPnNldC5ibG9ic1tqXSk7CisgICAgLyogQ3VybF9zZXRzdHJvcHQgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVCB3aXRoIGJsb2IgKi8KKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisKICAgLyogZHVwbGljYXRlIG1lbW9yeSBhcmVhcyBwb2ludGVkIHRvICovCiAgIGkgPSBTVFJJTkdfQ09QWVBPU1RGSUVMRFM7CiAgIGlmKHNyYy0+c2V0LnBvc3RmaWVsZHNpemUgJiYgc3JjLT5zZXQuc3RyW2ldKSB7CkBAIC04NDMsMTkgKzgyOSwxMyBAQAogICAgKiB0aGUgbGlrZWxpbmVzcyBvZiB1cyBmb3JnZXR0aW5nIHRvIGluaXQgYSBidWZmZXIgaGVyZSBpbiB0aGUgZnV0dXJlLgogICAgKi8KICAgb3V0Y3VybC0+c2V0LmJ1ZmZlcl9zaXplID0gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplOwotICBvdXRjdXJsLT5zdGF0ZS5idWZmZXIgPSBtYWxsb2Mob3V0Y3VybC0+c2V0LmJ1ZmZlcl9zaXplICsgMSk7Ci0gIGlmKCFvdXRjdXJsLT5zdGF0ZS5idWZmZXIpCi0gICAgZ290byBmYWlsOwotCi0gIG91dGN1cmwtPnN0YXRlLmhlYWRlcmJ1ZmYgPSBtYWxsb2MoSEVBREVSU0laRSk7Ci0gIGlmKCFvdXRjdXJsLT5zdGF0ZS5oZWFkZXJidWZmKQotICAgIGdvdG8gZmFpbDsKLSAgb3V0Y3VybC0+c3RhdGUuaGVhZGVyc2l6ZSA9IEhFQURFUlNJWkU7CiAKICAgLyogY29weSBhbGwgdXNlcmRlZmluZWQgdmFsdWVzICovCiAgIGlmKGR1cHNldChvdXRjdXJsLCBkYXRhKSkKICAgICBnb3RvIGZhaWw7CiAKKyAgQ3VybF9keW5faW5pdCgmb3V0Y3VybC0+c3RhdGUuaGVhZGVyYiwgQ1VSTF9NQVhfSFRUUF9IRUFERVIpOworCiAgIC8qIHRoZSBjb25uZWN0aW9uIGNhY2hlIGlzIHNldHVwIG9uIGRlbWFuZCAqLwogICBvdXRjdXJsLT5zdGF0ZS5jb25uX2NhY2hlID0gTlVMTDsKIApAQCAtOTEwLDYgKzg5MCwyOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXNvbHZlcikpCiAgICAgZ290byBmYWlsOwogCisjaWZkZWYgVVNFX0FSRVMKKyAgeworICAgIENVUkxjb2RlIHJjOworCisgICAgcmMgPSBDdXJsX3NldF9kbnNfc2VydmVycyhvdXRjdXJsLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfU0VSVkVSU10pOworICAgIGlmKHJjICYmIHJjICE9IENVUkxFX05PVF9CVUlMVF9JTikKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIHJjID0gQ3VybF9zZXRfZG5zX2ludGVyZmFjZShvdXRjdXJsLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfSU5URVJGQUNFXSk7CisgICAgaWYocmMgJiYgcmMgIT0gQ1VSTEVfTk9UX0JVSUxUX0lOKQorICAgICAgZ290byBmYWlsOworCisgICAgcmMgPSBDdXJsX3NldF9kbnNfbG9jYWxfaXA0KG91dGN1cmwsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0ROU19MT0NBTF9JUDRdKTsKKyAgICBpZihyYyAmJiByYyAhPSBDVVJMRV9OT1RfQlVJTFRfSU4pCisgICAgICBnb3RvIGZhaWw7CisKKyAgICByYyA9IEN1cmxfc2V0X2Ruc19sb2NhbF9pcDYob3V0Y3VybCwgZGF0YS0+c2V0LnN0cltTVFJJTkdfRE5TX0xPQ0FMX0lQNl0pOworICAgIGlmKHJjICYmIHJjICE9IENVUkxFX05PVF9CVUlMVF9JTikKKyAgICAgIGdvdG8gZmFpbDsKKyAgfQorI2VuZGlmIC8qIFVTRV9BUkVTICovCisKICAgQ3VybF9jb252ZXJ0X3NldHVwKG91dGN1cmwpOwogCiAgIEN1cmxfaW5pdGluZm8ob3V0Y3VybCk7CkBAIC05MjYsNyArOTI4LDcgQEAKICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKG91dGN1cmwtPmNoYW5nZS5jb29raWVsaXN0KTsKICAgICBvdXRjdXJsLT5jaGFuZ2UuY29va2llbGlzdCA9IE5VTEw7CiAgICAgQ3VybF9zYWZlZnJlZShvdXRjdXJsLT5zdGF0ZS5idWZmZXIpOwotICAgIEN1cmxfc2FmZWZyZWUob3V0Y3VybC0+c3RhdGUuaGVhZGVyYnVmZik7CisgICAgQ3VybF9keW5fZnJlZSgmb3V0Y3VybC0+c3RhdGUuaGVhZGVyYik7CiAgICAgQ3VybF9zYWZlZnJlZShvdXRjdXJsLT5jaGFuZ2UudXJsKTsKICAgICBDdXJsX3NhZmVmcmVlKG91dGN1cmwtPmNoYW5nZS5yZWZlcmVyKTsKICAgICBDdXJsX2ZyZWVzZXQob3V0Y3VybCk7CkBAIC05ODIsNjggKzk4NCwxMDEgQEAKICAqLwogQ1VSTGNvZGUgY3VybF9lYXN5X3BhdXNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBhY3Rpb24pCiB7Ci0gIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKms7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBpbnQgb2xkc3RhdGU7CisgIGludCBuZXdzdGF0ZTsKIAotICAvKiBmaXJzdCBzd2l0Y2ggb2ZmIGJvdGggcGF1c2UgYml0cyAqLwotICBpbnQgbmV3c3RhdGUgPSBrLT5rZWVwb24gJn4gKEtFRVBfUkVDVl9QQVVTRXwgS0VFUF9TRU5EX1BBVVNFKTsKKyAgaWYoIUdPT0RfRUFTWV9IQU5ETEUoZGF0YSkgfHwgIWRhdGEtPmNvbm4pCisgICAgLyogY3JhenkgaW5wdXQsIGRvbid0IGNvbnRpbnVlICovCisgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKIAotICAvKiBzZXQgdGhlIG5ldyBkZXNpcmVkIHBhdXNlIGJpdHMgKi8KLSAgbmV3c3RhdGUgfD0gKChhY3Rpb24gJiBDVVJMUEFVU0VfUkVDVik/S0VFUF9SRUNWX1BBVVNFOjApIHwKKyAgayA9ICZkYXRhLT5yZXE7CisgIG9sZHN0YXRlID0gay0+a2VlcG9uICYgKEtFRVBfUkVDVl9QQVVTRXwgS0VFUF9TRU5EX1BBVVNFKTsKKworICAvKiBmaXJzdCBzd2l0Y2ggb2ZmIGJvdGggcGF1c2UgYml0cyB0aGVuIHNldCB0aGUgbmV3IHBhdXNlIGJpdHMgKi8KKyAgbmV3c3RhdGUgPSAoay0+a2VlcG9uICZ+IChLRUVQX1JFQ1ZfUEFVU0V8IEtFRVBfU0VORF9QQVVTRSkpIHwKKyAgICAoKGFjdGlvbiAmIENVUkxQQVVTRV9SRUNWKT9LRUVQX1JFQ1ZfUEFVU0U6MCkgfAogICAgICgoYWN0aW9uICYgQ1VSTFBBVVNFX1NFTkQpP0tFRVBfU0VORF9QQVVTRTowKTsKIAorICBpZigobmV3c3RhdGUgJiAoS0VFUF9SRUNWX1BBVVNFfCBLRUVQX1NFTkRfUEFVU0UpKSA9PSBvbGRzdGF0ZSkgeworICAgIC8qIE5vdCBjaGFuZ2luZyBhbnkgcGF1c2Ugc3RhdGUsIHJldHVybiAqLworICAgIERFQlVHRihpbmZvZihkYXRhLCAicGF1c2U6IG5vIGNoYW5nZSwgZWFybHkgcmV0dXJuXG4iKSk7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgLyogVW5wYXVzZSBwYXJ0cyBpbiBhY3RpdmUgbWltZSB0cmVlLiAqLworICBpZigoay0+a2VlcG9uICYgfm5ld3N0YXRlICYgS0VFUF9TRU5EX1BBVVNFKSAmJgorICAgICAoZGF0YS0+bXN0YXRlID09IENVUkxNX1NUQVRFX1BFUkZPUk0gfHwKKyAgICAgIGRhdGEtPm1zdGF0ZSA9PSBDVVJMTV9TVEFURV9UT09GQVNUKSAmJgorICAgICBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jID09IChjdXJsX3JlYWRfY2FsbGJhY2spIEN1cmxfbWltZV9yZWFkKSB7CisgICAgQ3VybF9taW1lX3VucGF1c2UoZGF0YS0+c3RhdGUuaW4pOworICB9CisKICAgLyogcHV0IGl0IGJhY2sgaW4gdGhlIGtlZXBvbiAqLwogICBrLT5rZWVwb24gPSBuZXdzdGF0ZTsKIAotICBpZighKG5ld3N0YXRlICYgS0VFUF9SRUNWX1BBVVNFKSAmJiBkYXRhLT5zdGF0ZS50ZW1wY291bnQpIHsKLSAgICAvKiB0aGVyZSBhcmUgYnVmZmVycyBmb3Igc2VuZGluZyB0aGF0IGNhbiBiZSBkZWxpdmVyZWQgYXMgdGhlIHJlY2VpdmUKLSAgICAgICBwYXVzaW5nIGlzIGxpZnRlZCEgKi8KLSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBkYXRhLT5zdGF0ZS50ZW1wY291bnQ7Ci0gICAgc3RydWN0IHRlbXBidWYgd3JpdGVidWZbM107IC8qIHRoZXJlIGNhbiBvbmx5IGJlIHRocmVlICovCi0gICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gZGF0YS0+Y29ubjsKLSAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpzYXZlZF9kYXRhID0gTlVMTDsKKyAgaWYoIShuZXdzdGF0ZSAmIEtFRVBfUkVDVl9QQVVTRSkpIHsKKyAgICBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZShkYXRhLCBGQUxTRSk7CiAKLSAgICAvKiBjb3B5IHRoZSBzdHJ1Y3RzIHRvIGFsbG93IGZvciBpbW1lZGlhdGUgcmUtcGF1c2luZyAqLwotICAgIGZvcihpID0gMDsgaSA8IGRhdGEtPnN0YXRlLnRlbXBjb3VudDsgaSsrKSB7Ci0gICAgICB3cml0ZWJ1ZltpXSA9IGRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXTsKLSAgICAgIGRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXS5idWYgPSBOVUxMOworICAgIGlmKGRhdGEtPnN0YXRlLnRlbXBjb3VudCkgeworICAgICAgLyogdGhlcmUgYXJlIGJ1ZmZlcnMgZm9yIHNlbmRpbmcgdGhhdCBjYW4gYmUgZGVsaXZlcmVkIGFzIHRoZSByZWNlaXZlCisgICAgICAgICBwYXVzaW5nIGlzIGxpZnRlZCEgKi8KKyAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gZGF0YS0+c3RhdGUudGVtcGNvdW50OworICAgICAgc3RydWN0IHRlbXBidWYgd3JpdGVidWZbM107IC8qIHRoZXJlIGNhbiBvbmx5IGJlIHRocmVlICovCisgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBkYXRhLT5jb25uOworICAgICAgc3RydWN0IEN1cmxfZWFzeSAqc2F2ZWRfZGF0YSA9IE5VTEw7CisKKyAgICAgIC8qIGNvcHkgdGhlIHN0cnVjdHMgdG8gYWxsb3cgZm9yIGltbWVkaWF0ZSByZS1wYXVzaW5nICovCisgICAgICBmb3IoaSA9IDA7IGkgPCBkYXRhLT5zdGF0ZS50ZW1wY291bnQ7IGkrKykgeworICAgICAgICB3cml0ZWJ1ZltpXSA9IGRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXTsKKyAgICAgICAgQ3VybF9keW5faW5pdCgmZGF0YS0+c3RhdGUudGVtcHdyaXRlW2ldLmIsIERZTl9QQVVTRV9CVUZGRVIpOworICAgICAgfQorICAgICAgZGF0YS0+c3RhdGUudGVtcGNvdW50ID0gMDsKKworICAgICAgLyogc2V0IHRoZSBjb25uZWN0aW9uJ3MgY3VycmVudCBvd25lciAqLworICAgICAgaWYoY29ubi0+ZGF0YSAhPSBkYXRhKSB7CisgICAgICAgIHNhdmVkX2RhdGEgPSBjb25uLT5kYXRhOworICAgICAgICBjb25uLT5kYXRhID0gZGF0YTsKKyAgICAgIH0KKworICAgICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAvKiBldmVuIGlmIG9uZSBmdW5jdGlvbiByZXR1cm5zIGVycm9yLCB0aGlzIGxvb3BzIHRocm91Z2ggYW5kIGZyZWVzCisgICAgICAgICAgIGFsbCBidWZmZXJzICovCisgICAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgd3JpdGVidWZbaV0udHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9wdHIoJndyaXRlYnVmW2ldLmIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmd3JpdGVidWZbaV0uYikpOworICAgICAgICBDdXJsX2R5bl9mcmVlKCZ3cml0ZWJ1ZltpXS5iKTsKKyAgICAgIH0KKworICAgICAgLyogcmVjb3ZlciBwcmV2aW91cyBvd25lciBvZiB0aGUgY29ubmVjdGlvbiAqLworICAgICAgaWYoc2F2ZWRfZGF0YSkKKyAgICAgICAgY29ubi0+ZGF0YSA9IHNhdmVkX2RhdGE7CisKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgZGF0YS0+c3RhdGUudGVtcGNvdW50ID0gMDsKLQotICAgIC8qIHNldCB0aGUgY29ubmVjdGlvbidzIGN1cnJlbnQgb3duZXIgKi8KLSAgICBpZihjb25uLT5kYXRhICE9IGRhdGEpIHsKLSAgICAgIHNhdmVkX2RhdGEgPSBjb25uLT5kYXRhOwotICAgICAgY29ubi0+ZGF0YSA9IGRhdGE7Ci0gICAgfQotCi0gICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgLyogZXZlbiBpZiBvbmUgZnVuY3Rpb24gcmV0dXJucyBlcnJvciwgdGhpcyBsb29wcyB0aHJvdWdoIGFuZCBmcmVlcyBhbGwKLSAgICAgICAgIGJ1ZmZlcnMgKi8KLSAgICAgIGlmKCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIHdyaXRlYnVmW2ldLnR5cGUsIHdyaXRlYnVmW2ldLmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVidWZbaV0ubGVuKTsKLSAgICAgIGZyZWUod3JpdGVidWZbaV0uYnVmKTsKLSAgICB9Ci0KLSAgICAvKiByZWNvdmVyIHByZXZpb3VzIG93bmVyIG9mIHRoZSBjb25uZWN0aW9uICovCi0gICAgaWYoc2F2ZWRfZGF0YSkKLSAgICAgIGNvbm4tPmRhdGEgPSBzYXZlZF9kYXRhOwotCi0gICAgaWYocmVzdWx0KQotICAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCiAgIC8qIGlmIHRoZXJlJ3Mgbm8gZXJyb3IgYW5kIHdlJ3JlIG5vdCBwYXVzaW5nIGJvdGggZGlyZWN0aW9ucywgd2Ugd2FudAogICAgICB0byBoYXZlIHRoaXMgaGFuZGxlIGNoZWNrZWQgc29vbiAqLwotICBpZighcmVzdWx0ICYmCi0gICAgICgobmV3c3RhdGUmKEtFRVBfUkVDVl9QQVVTRXxLRUVQX1NFTkRfUEFVU0UpKSAhPQotICAgICAgKEtFRVBfUkVDVl9QQVVTRXxLRUVQX1NFTkRfUEFVU0UpKSApCisgIGlmKChuZXdzdGF0ZSAmIChLRUVQX1JFQ1ZfUEFVU0V8S0VFUF9TRU5EX1BBVVNFKSkgIT0KKyAgICAgKEtFRVBfUkVDVl9QQVVTRXxLRUVQX1NFTkRfUEFVU0UpKSB7CiAgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1JVTl9OT1cpOyAvKiBnZXQgdGhpcyBoYW5kbGUgZ29pbmcgYWdhaW4gKi8KIAotICAvKiBUaGlzIHRyYW5zZmVyIG1heSBoYXZlIGJlZW4gbW92ZWQgaW4gb3Igb3V0IG9mIHRoZSBidW5kbGUsIHVwZGF0ZQotICAgICB0aGUgY29ycmVzcG9uZGluZyBzb2NrZXQgY2FsbGJhY2ssIGlmIHVzZWQgKi8KLSAgQ3VybF91cGRhdGVzb2NrZXQoZGF0YSk7CisgICAgLyogZm9yY2UgYSByZWN2L3NlbmQgY2hlY2sgb2YgdGhpcyBjb25uZWN0aW9uLCBhcyB0aGUgZGF0YSBtaWdodCd2ZSBiZWVuCisgICAgICAgcmVhZCBvZmYgdGhlIHNvY2tldCBhbHJlYWR5ICovCisgICAgZGF0YS0+Y29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOIHwgQ1VSTF9DU0VMRUNUX09VVDsKKyAgICBpZihkYXRhLT5tdWx0aSkKKyAgICAgIEN1cmxfdXBkYXRlX3RpbWVyKGRhdGEtPm11bHRpKTsKKyAgfQorCisgIGlmKCFkYXRhLT5zdGF0ZS5kb25lKQorICAgIC8qIFRoaXMgdHJhbnNmZXIgbWF5IGhhdmUgYmVlbiBtb3ZlZCBpbiBvciBvdXQgb2YgdGhlIGJ1bmRsZSwgdXBkYXRlIHRoZQorICAgICAgIGNvcnJlc3BvbmRpbmcgc29ja2V0IGNhbGxiYWNrLCBpZiB1c2VkICovCisgICAgQ3VybF91cGRhdGVzb2NrZXQoZGF0YSk7CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExMzgsNiArMTE3MywzNSBAQAogfQogCiAvKgorICogV3JhcHBlciB0byBjYWxsIGZ1bmN0aW9ucyBpbiBDdXJsX2Nvbm5jYWNoZV9mb3JlYWNoKCkKKyAqCisgKiBSZXR1cm5zIGFsd2F5cyAwLgorICovCitzdGF0aWMgaW50IGNvbm5fdXBrZWVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyYW0pCit7CisgIC8qIFBhcmFtIGlzIHVudXNlZC4gKi8KKyAgKHZvaWQpcGFyYW07CisKKyAgaWYoY29ubi0+aGFuZGxlci0+Y29ubmVjdGlvbl9jaGVjaykgeworICAgIC8qIERvIGEgcHJvdG9jb2wtc3BlY2lmaWMga2VlcGFsaXZlIGNoZWNrIG9uIHRoZSBjb25uZWN0aW9uLiAqLworICAgIGNvbm4tPmhhbmRsZXItPmNvbm5lY3Rpb25fY2hlY2soY29ubiwgQ09OTkNIRUNLX0tFRVBBTElWRSk7CisgIH0KKworICByZXR1cm4gMDsgLyogY29udGludWUgaXRlcmF0aW9uICovCit9CisKK3N0YXRpYyBDVVJMY29kZSB1cGtlZXAoc3RydWN0IGNvbm5jYWNoZSAqY29ubl9jYWNoZSwgdm9pZCAqZGF0YSkKK3sKKyAgLyogTG9vcCBvdmVyIGV2ZXJ5IGNvbm5lY3Rpb24gYW5kIG1ha2UgY29ubmVjdGlvbiBhbGl2ZS4gKi8KKyAgQ3VybF9jb25uY2FjaGVfZm9yZWFjaChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5fY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25uX3Vwa2VlcCk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKICAqIFBlcmZvcm1zIGNvbm5lY3Rpb24gdXBrZWVwIGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbiBoYW5kbGUuCiAgKi8KIENVUkxjb2RlIGN1cmxfZWFzeV91cGtlZXAoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKQEAgLTExNDgsNyArMTIxMiw3IEBACiAKICAgaWYoZGF0YS0+bXVsdGlfZWFzeSkgewogICAgIC8qIFVzZSB0aGUgY29tbW9uIGZ1bmN0aW9uIHRvIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUuICovCi0gICAgcmV0dXJuIEN1cmxfdXBrZWVwKCZkYXRhLT5tdWx0aV9lYXN5LT5jb25uX2NhY2hlLCBkYXRhKTsKKyAgICByZXR1cm4gdXBrZWVwKCZkYXRhLT5tdWx0aV9lYXN5LT5jb25uX2NhY2hlLCBkYXRhKTsKICAgfQogICBlbHNlIHsKICAgICAvKiBObyBjb25uZWN0aW9ucywgc28ganVzdCByZXR1cm4gc3VjY2VzcyAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZWFzeWlmLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5aWYuaAppbmRleCA2YmE3ZTU0Li5lZGEwZDYyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5aWYuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lYXN5aWYuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZXNjYXBlLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lc2NhcGUuYwppbmRleCA3MTIxZGIzLi4yYmVhMTQ1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9lc2NhcGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9lc2NhcGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzksODIgKzc5LDgzIEBACiBjaGFyICpjdXJsX2Vhc3lfZXNjYXBlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGNvbnN0IGNoYXIgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlubGVuZ3RoKQogewotICBzaXplX3QgYWxsb2M7Ci0gIGNoYXIgKm5zOwotICBjaGFyICp0ZXN0aW5nX3B0ciA9IE5VTEw7Ci0gIHNpemVfdCBuZXdsZW47Ci0gIHNpemVfdCBzdHJpbmRleCA9IDA7CiAgIHNpemVfdCBsZW5ndGg7CiAgIENVUkxjb2RlIHJlc3VsdDsKKyAgc3RydWN0IGR5bmJ1ZiBkOwogCiAgIGlmKGlubGVuZ3RoIDwgMCkKICAgICByZXR1cm4gTlVMTDsKIAotICBhbGxvYyA9IChpbmxlbmd0aD8oc2l6ZV90KWlubGVuZ3RoOnN0cmxlbihzdHJpbmcpKSArIDE7Ci0gIG5ld2xlbiA9IGFsbG9jOworICBDdXJsX2R5bl9pbml0KCZkLCBDVVJMX01BWF9JTlBVVF9MRU5HVEgpOwogCi0gIG5zID0gbWFsbG9jKGFsbG9jKTsKLSAgaWYoIW5zKQotICAgIHJldHVybiBOVUxMOworICBsZW5ndGggPSAoaW5sZW5ndGg/KHNpemVfdClpbmxlbmd0aDpzdHJsZW4oc3RyaW5nKSk7CisgIGlmKCFsZW5ndGgpCisgICAgcmV0dXJuIHN0cmR1cCgiIik7CiAKLSAgbGVuZ3RoID0gYWxsb2MtMTsKICAgd2hpbGUobGVuZ3RoLS0pIHsKICAgICB1bnNpZ25lZCBjaGFyIGluID0gKnN0cmluZzsgLyogd2UgbmVlZCB0byB0cmVhdCB0aGUgY2hhcmFjdGVycyB1bnNpZ25lZCAqLwogCi0gICAgaWYoQ3VybF9pc3VucmVzZXJ2ZWQoaW4pKQotICAgICAgLyoganVzdCBjb3B5IHRoaXMgKi8KLSAgICAgIG5zW3N0cmluZGV4KytdID0gaW47CisgICAgaWYoQ3VybF9pc3VucmVzZXJ2ZWQoaW4pKSB7CisgICAgICAvKiBhcHBlbmQgdGhpcyAqLworICAgICAgaWYoQ3VybF9keW5fYWRkbigmZCwgJmluLCAxKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGVsc2UgewogICAgICAgLyogZW5jb2RlIGl0ICovCi0gICAgICBuZXdsZW4gKz0gMjsgLyogdGhlIHNpemUgZ3Jvd3Mgd2l0aCB0d28sIHNpbmNlIHRoaXMnbGwgYmVjb21lIGEgJVhYICovCi0gICAgICBpZihuZXdsZW4gPiBhbGxvYykgewotICAgICAgICBhbGxvYyAqPSAyOwotICAgICAgICB0ZXN0aW5nX3B0ciA9IEN1cmxfc2FmZXJlYWxsb2MobnMsIGFsbG9jKTsKLSAgICAgICAgaWYoIXRlc3RpbmdfcHRyKQotICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBucyA9IHRlc3RpbmdfcHRyOwotICAgICAgfQotCisgICAgICBjaGFyIGVuY29kZWRbNF07CiAgICAgICByZXN1bHQgPSBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayhkYXRhLCAoY2hhciAqKSZpbiwgMSk7CiAgICAgICBpZihyZXN1bHQpIHsKICAgICAgICAgLyogQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCi0gICAgICAgIGZyZWUobnMpOworICAgICAgICBDdXJsX2R5bl9mcmVlKCZkKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICB9CiAKLSAgICAgIG1zbnByaW50ZigmbnNbc3RyaW5kZXhdLCA0LCAiJSUlMDJYIiwgaW4pOwotCi0gICAgICBzdHJpbmRleCArPSAzOworICAgICAgbXNucHJpbnRmKGVuY29kZWQsIHNpemVvZihlbmNvZGVkKSwgIiUlJTAyWCIsIGluKTsKKyAgICAgIGlmKEN1cmxfZHluX2FkZCgmZCwgZW5jb2RlZCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBzdHJpbmcrKzsKICAgfQotICBuc1tzdHJpbmRleF0gPSAwOyAvKiB0ZXJtaW5hdGUgaXQgKi8KLSAgcmV0dXJuIG5zOworCisgIHJldHVybiBDdXJsX2R5bl9wdHIoJmQpOwogfQogCiAvKgogICogQ3VybF91cmxkZWNvZGUoKSBVUkwgZGVjb2RlcyB0aGUgZ2l2ZW4gc3RyaW5nLgogICoKLSAqIE9wdGlvbmFsbHkgZGV0ZWN0cyBjb250cm9sIGNoYXJhY3RlcnMgKGJ5dGUgY29kZXMgbG93ZXIgdGhhbiAzMikgaW4gdGhlCi0gKiBkYXRhIGFuZCByZWplY3RzIHN1Y2ggZGF0YS4KLSAqCiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG1hbGxvY2VkIHN0cmluZyBpbiAqb3N0cmluZyB3aXRoIGxlbmd0aCBnaXZlbiBpbgogICogKm9sZW4uIElmIGxlbmd0aCA9PSAwLCB0aGUgbGVuZ3RoIGlzIGFzc3VtZWQgdG8gYmUgc3RybGVuKHN0cmluZykuCiAgKgogICogJ2RhdGEnIGNhbiBiZSBzZXQgdG8gTlVMTCBidXQgdGhlbiB0aGlzIGZ1bmN0aW9uIGNhbid0IGNvbnZlcnQgbmV0d29yawogICogZGF0YSB0byBob3N0IGZvciBub24tYXNjaWkuCisgKgorICogY3RybCBvcHRpb25zOgorICogLSBSRUpFQ1RfTkFEQTogYWNjZXB0IGV2ZXJ5dGhpbmcKKyAqIC0gUkVKRUNUX0NUUkw6IHJlamVjdHMgY29udHJvbCBjaGFyYWN0ZXJzIChieXRlIGNvZGVzIGxvd2VyIHRoYW4gMzIpIGluCisgKiAgICAgICAgICAgICAgICB0aGUgZGF0YQorICogLSBSRUpFQ1RfWkVSTzogcmVqZWN0cyBkZWNvZGVkIHplcm8gYnl0ZXMKKyAqCisgKiBUaGUgdmFsdWVzIGZvciB0aGUgZW51bSBzdGFydHMgYXQgMiwgdG8gbWFrZSB0aGUgYXNzZXJ0IGRldGVjdCBsZWdhY3kKKyAqIGludm9rZXMgdGhhdCB1c2VkIFRSVUUvRkFMU0UgKDAgYW5kIDEpLgogICovCisKIENVUkxjb2RlIEN1cmxfdXJsZGVjb2RlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3N0cmluZywgc2l6ZV90ICpvbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWplY3RfY3RybCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdXJscmVqZWN0IGN0cmwpCiB7Ci0gIHNpemVfdCBhbGxvYyA9IChsZW5ndGg/bGVuZ3RoOnN0cmxlbihzdHJpbmcpKSArIDE7Ci0gIGNoYXIgKm5zID0gbWFsbG9jKGFsbG9jKTsKKyAgc2l6ZV90IGFsbG9jOworICBjaGFyICpuczsKICAgc2l6ZV90IHN0cmluZGV4ID0gMDsKICAgdW5zaWduZWQgbG9uZyBoZXg7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogCisgIERFQlVHQVNTRVJUKHN0cmluZyk7CisgIERFQlVHQVNTRVJUKGN0cmwgPj0gUkVKRUNUX05BREEpOyAvKiBjcmFzaCBvbiBUUlVFL0ZBTFNFICovCisKKyAgYWxsb2MgPSAobGVuZ3RoP2xlbmd0aDpzdHJsZW4oc3RyaW5nKSkgKyAxOworICBucyA9IG1hbGxvYyhhbGxvYyk7CisKICAgaWYoIW5zKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC0xODYsNyArMTg3LDggQEAKICAgICAgIGFsbG9jIC09IDI7CiAgICAgfQogCi0gICAgaWYocmVqZWN0X2N0cmwgJiYgKGluIDwgMHgyMCkpIHsKKyAgICBpZigoKGN0cmwgPT0gUkVKRUNUX0NUUkwpICYmIChpbiA8IDB4MjApKSB8fAorICAgICAgICgoY3RybCA9PSBSRUpFQ1RfWkVSTykgJiYgKGluID09IDApKSkgewogICAgICAgZnJlZShucyk7CiAgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKICAgICB9CkBAIC0yMjAsNyArMjIyLDcgQEAKICAgICBzaXplX3QgaW5wdXRsZW4gPSBsZW5ndGg7CiAgICAgc2l6ZV90IG91dHB1dGxlbjsKICAgICBDVVJMY29kZSByZXMgPSBDdXJsX3VybGRlY29kZShkYXRhLCBzdHJpbmcsIGlucHV0bGVuLCAmc3RyLCAmb3V0cHV0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfTkFEQSk7CiAgICAgaWYocmVzKQogICAgICAgcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2VzY2FwZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZXNjYXBlLmgKaW5kZXggZDhiYmU1Yy4uNTg2ZGI3ZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZXNjYXBlLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZXNjYXBlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI1LDkgKzI1LDE2IEBACiAgKiBhbGxvY2F0ZWQgc3RyaW5nIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICAqLwogCiBib29sIEN1cmxfaXN1bnJlc2VydmVkKHVuc2lnbmVkIGNoYXIgaW4pOworCitlbnVtIHVybHJlamVjdCB7CisgIFJFSkVDVF9OQURBID0gMiwKKyAgUkVKRUNUX0NUUkwsCisgIFJFSkVDVF9aRVJPCit9OworCiBDVVJMY29kZSBDdXJsX3VybGRlY29kZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm9zdHJpbmcsIHNpemVfdCAqb2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVqZWN0X2NybGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB1cmxyZWplY3QgY3RybCk7CiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9FU0NBUEVfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5jCmluZGV4IGQzNDljZDkuLmNkM2U0OWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ZpbGUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9maWxlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTE0NCw3ICsxNDQsNyBAQAogICBzaXplX3QgcmVhbF9wYXRoX2xlbjsKIAogICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBkYXRhLT5zdGF0ZS51cC5wYXRoLCAwLCAmcmVhbF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVhbF9wYXRoX2xlbiwgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVhbF9wYXRoX2xlbiwgUkVKRUNUX1pFUk8pOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZmlsZS5oCmluZGV4IDIwODI4YWQuLmY2Yjc0YTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ZpbGUuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9maWxlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Zvcm1kYXRhLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mb3JtZGF0YS5jCmluZGV4IDQyOWQ0NzkuLjFjYWIyYzUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Zvcm1kYXRhLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZm9ybWRhdGEuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTIzLDExICsxMjMsMTEgQEAKICAqIHBhcmVudF9mb3JtX2luZm8gaXMgTlVMTC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIEZvcm1JbmZvICogQWRkRm9ybUluZm8oY2hhciAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjb250ZW50dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1JbmZvICpwYXJlbnRfZm9ybV9pbmZvKQorc3RhdGljIHN0cnVjdCBGb3JtSW5mbyAqQWRkRm9ybUluZm8oY2hhciAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjb250ZW50dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBGb3JtSW5mbyAqcGFyZW50X2Zvcm1faW5mbykKIHsKLSAgRm9ybUluZm8gKmZvcm1faW5mbzsKKyAgc3RydWN0IEZvcm1JbmZvICpmb3JtX2luZm87CiAgIGZvcm1faW5mbyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IEZvcm1JbmZvKSk7CiAgIGlmKGZvcm1faW5mbykgewogICAgIGlmKHZhbHVlKQpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmxhc3RfcG9zdCwKICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgcGFyYW1zKQogewotICBGb3JtSW5mbyAqZmlyc3RfZm9ybSwgKmN1cnJlbnRfZm9ybSwgKmZvcm0gPSBOVUxMOworICBzdHJ1Y3QgRm9ybUluZm8gKmZpcnN0X2Zvcm0sICpjdXJyZW50X2Zvcm0sICpmb3JtID0gTlVMTDsKICAgQ1VSTEZPUk1jb2RlIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9PSzsKICAgY29uc3QgY2hhciAqcHJldnR5cGUgPSBOVUxMOwogICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqcG9zdCA9IE5VTEw7CkBAIC01MjEsNyArNTIxLDcgQEAKICAgaWYoQ1VSTF9GT1JNQUREX09LICE9IHJldHVybl92YWx1ZSkgewogICAgIC8qIE9uIGVycm9yLCBmcmVlIGFsbG9jYXRlZCBmaWVsZHMgZm9yIGFsbCBub2RlcyBvZiB0aGUgRm9ybUluZm8gbGlua2VkCiAgICAgICAgbGlzdCB3aXRob3V0IGRlYWxsb2NhdGluZyBub2Rlcy4gTGlzdCBub2RlcyBhcmUgZGVhbGxvY2F0ZWQgbGF0ZXIgb24gKi8KLSAgICBGb3JtSW5mbyAqcHRyOworICAgIHN0cnVjdCBGb3JtSW5mbyAqcHRyOwogICAgIGZvcihwdHIgPSBmaXJzdF9mb3JtOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5tb3JlKSB7CiAgICAgICBpZihwdHItPm5hbWVfYWxsb2MpIHsKICAgICAgICAgQ3VybF9zYWZlZnJlZShwdHItPm5hbWUpOwpAQCAtNjAyLDcgKzYwMiw3IEBACiAgICAgICAgIC8qIE5vdGUgdGhhdCB0aGVyZSdzIHNtYWxsIHJpc2sgdGhhdCBmb3JtLT5uYW1lIGlzIE5VTEwgaGVyZSBpZiB0aGUKICAgICAgICAgICAgYXBwIHBhc3NlZCBpbiBhIGJhZCBjb21ibywgc28gd2UgYmV0dGVyIGNoZWNrIGZvciB0aGF0IGZpcnN0LiAqLwogICAgICAgICBpZihmb3JtLT5uYW1lKSB7Ci0gICAgICAgICAgLyogY29weSBuYW1lICh3aXRob3V0IHN0cmR1cDsgcG9zc2libHkgbm90IG51bC10ZXJtaW5hdGVkKSAqLworICAgICAgICAgIC8qIGNvcHkgbmFtZSAod2l0aG91dCBzdHJkdXA7IHBvc3NpYmx5IG5vdCBudWxsLXRlcm1pbmF0ZWQpICovCiAgICAgICAgICAgZm9ybS0+bmFtZSA9IEN1cmxfbWVtZHVwKGZvcm0tPm5hbWUsIGZvcm0tPm5hbWVsZW5ndGg/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0tPm5hbWVsZW5ndGg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihmb3JtLT5uYW1lKSArIDEpOwpAQCAtNjUwLDcgKzY1MCw3IEBACiAgICAgICAvKiBPbiBlcnJvciwgZnJlZSBhbGxvY2F0ZWQgZmllbGRzIGZvciBub2RlcyBvZiB0aGUgRm9ybUluZm8gbGlua2VkCiAgICAgICAgICBsaXN0IHdoaWNoIGFyZSBub3QgYWxyZWFkeSBvd25lZCBieSB0aGUgaHR0cHBvc3QgbGlua2VkIGxpc3QKICAgICAgICAgIHdpdGhvdXQgZGVhbGxvY2F0aW5nIG5vZGVzLiBMaXN0IG5vZGVzIGFyZSBkZWFsbG9jYXRlZCBsYXRlciBvbiAqLwotICAgICAgRm9ybUluZm8gKnB0cjsKKyAgICAgIHN0cnVjdCBGb3JtSW5mbyAqcHRyOwogICAgICAgZm9yKHB0ciA9IGZvcm07IHB0ciAhPSBOVUxMOyBwdHIgPSBwdHItPm1vcmUpIHsKICAgICAgICAgaWYocHRyLT5uYW1lX2FsbG9jKSB7CiAgICAgICAgICAgQ3VybF9zYWZlZnJlZShwdHItPm5hbWUpOwpAQCAtNjc2LDcgKzY3Niw3IEBACiAgICAgIGZpZWxkcyBnaXZlbiB0aGF0IHRoZXNlIGhhdmUgZWl0aGVyIGJlZW4gZGVhbGxvY2F0ZWQgb3IgYXJlIG93bmVkCiAgICAgIG5vdyBieSB0aGUgaHR0cHBvc3QgbGlua2VkIGxpc3QgKi8KICAgd2hpbGUoZmlyc3RfZm9ybSkgewotICAgIEZvcm1JbmZvICpwdHIgPSBmaXJzdF9mb3JtLT5tb3JlOworICAgIHN0cnVjdCBGb3JtSW5mbyAqcHRyID0gZmlyc3RfZm9ybS0+bW9yZTsKICAgICBmcmVlKGZpcnN0X2Zvcm0pOwogICAgIGZpcnN0X2Zvcm0gPSBwdHI7CiAgIH0KQEAgLTcyOCwxNCArNzI4LDEwIEBACiAgICAgaWYoIW5yZWFkKQogICAgICAgYnJlYWs7CiAKLSAgICBzd2l0Y2gobnJlYWQpIHsKLSAgICBkZWZhdWx0OgotICAgICAgaWYoYXBwZW5kKGFyZywgYnVmZmVyLCBucmVhZCkgIT0gbnJlYWQpCi0gICAgICAgIHJlc3VsdCA9IENVUkxFX1JFQURfRVJST1I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENVUkxfUkVBREZVTkNfQUJPUlQ6Ci0gICAgY2FzZSBDVVJMX1JFQURGVU5DX1BBVVNFOgotICAgICAgYnJlYWs7CisgICAgaWYobnJlYWQgPiBzaXplb2YoYnVmZmVyKSB8fCBhcHBlbmQoYXJnLCBidWZmZXIsIG5yZWFkKSAhPSBucmVhZCkgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfUkVBRF9FUlJPUjsKKyAgICAgIGlmKG5yZWFkID09IENVUkxfUkVBREZVTkNfQUJPUlQpCisgICAgICAgIHJlc3VsdCA9IENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CiAgICAgfQogICB9CiAKQEAgLTc3NSw3ICs3NzEsNyBAQAogfQogCiAKLS8qIFNldCBtaW1lIHBhcnQgbmFtZSwgdGFraW5nIGNhcmUgb2Ygbm9uIG51bC10ZXJtaW5hdGVkIG5hbWUgc3RyaW5nLiAqLworLyogU2V0IG1pbWUgcGFydCBuYW1lLCB0YWtpbmcgY2FyZSBvZiBub24gbnVsbC10ZXJtaW5hdGVkIG5hbWUgc3RyaW5nLiAqLwogc3RhdGljIENVUkxjb2RlIHNldG5hbWUoY3VybF9taW1lcGFydCAqcGFydCwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKIHsKICAgY2hhciAqem5hbWU7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mb3JtZGF0YS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZm9ybWRhdGEuaAppbmRleCBjYjIwODA1Li4zNzY2ZDM4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mb3JtZGF0YS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Zvcm1kYXRhLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX01JTUUKIAogLyogdXNlZCBieSBGb3JtQWRkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZSAqLwotdHlwZWRlZiBzdHJ1Y3QgRm9ybUluZm8geworc3RydWN0IEZvcm1JbmZvIHsKICAgY2hhciAqbmFtZTsKICAgYm9vbCBuYW1lX2FsbG9jOwogICBzaXplX3QgbmFtZWxlbmd0aDsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgY2hhciAqdXNlcnA7ICAgICAgICAvKiBwb2ludGVyIGZvciB0aGUgcmVhZCBjYWxsYmFjayAqLwogICBzdHJ1Y3QgY3VybF9zbGlzdCAqY29udGVudGhlYWRlcjsKICAgc3RydWN0IEZvcm1JbmZvICptb3JlOwotfSBGb3JtSW5mbzsKK307CiAKIENVUkxjb2RlIEN1cmxfZ2V0Zm9ybWRhdGEoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9taW1lcGFydCAqLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuYwppbmRleCA1MzUxMGY4Li5jZmQ3MGE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTUsNyArNTUsNiBAQAogI2luY2x1ZGUgInRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiZXNjYXBlLmgiCiAjaW5jbHVkZSAiaHR0cC5oIiAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KLSNpbmNsdWRlICJzb2Nrcy5oIgogI2luY2x1ZGUgImZ0cC5oIgogI2luY2x1ZGUgImZpbGVpbmZvLmgiCiAjaW5jbHVkZSAiZnRwbGlzdHBhcnNlci5oIgpAQCAtNzgsNiArNzcsNyBAQAogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAiaHR0cF9wcm94eS5oIgogI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgorI2luY2x1ZGUgInNvY2tzLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtMTEzLDcgKzExMyw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgZnRwX3JlZ3VsYXJfdHJhbnNmZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogc3RhdGljIHZvaWQgZnRwX3Bhc3ZfdmVyYm9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfYWRkcmluZm8gKmFpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ld2hvc3QsIC8qIGFzY2lpIHZlcnNpb24gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQpOwogI2VuZGlmCkBAIC0xMzIsMTMgKzEzMiwxMSBAQAogc3RhdGljIENVUkxjb2RlIGZ0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pOwogc3RhdGljIENVUkxjb2RlIGZ0cF9kb19tb3JlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50ICpjb21wbGV0ZWQpOwogc3RhdGljIENVUkxjb2RlIGZ0cF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLXN0YXRpYyBpbnQgZnRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKLXN0YXRpYyBpbnQgZnRwX2RvbW9yZV9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIGludCBmdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKK3N0YXRpYyBpbnQgZnRwX2RvbW9yZV9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIENVUkxjb2RlIGZ0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgZnRwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICogY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgZnRwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIAogc3RhdGljIENVUkxjb2RlIGluaXRfd2NfZGF0YShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIENVUkxjb2RlIHdjX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwpAQCAtMjIzLDYgKzIyMSw5IEBACiAgICAgY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdID0gQ1VSTF9TT0NLRVRfQkFEOwogICB9CiAgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtTRUNPTkRBUllTT0NLRVRdID0gRkFMU0U7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICBjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbU0VDT05EQVJZU09DS0VUXSA9IEZBTFNFOworI2VuZGlmCiB9CiAKIC8qCkBAIC0yNTUsMTggKzI1Niw2IEBACiAgIEN1cmxfc2FmZWZyZWUoZnRwYy0+bmV3aG9zdCk7CiB9CiAKLS8qIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIGdpdmVuIHN0cmluZyBjb250YWlucyBDUiAoXHIpIG9yIExGIChcbiksCi0gICB3aGljaCBhcmUgbm90IGFsbG93ZWQgd2l0aGluIFJGQyA5NTkgPHN0cmluZz4uCi0gICBOb3RlOiBUaGUgaW5wdXQgc3RyaW5nIGlzIGluIHRoZSBjbGllbnQncyBlbmNvZGluZyB3aGljaCBtaWdodAotICAgbm90IGJlIEFTQ0lJLCBzbyBlc2NhcGUgc2VxdWVuY2VzIFxyICYgXG4gbXVzdCBiZSB1c2VkIGluc3RlYWQKLSAgIG9mIGhleCB2YWx1ZXMgMHgwZCAmIDB4MGEuCi0qLwotc3RhdGljIGJvb2wgaXNCYWRGdHBTdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nKQotewotICByZXR1cm4gKChOVUxMICE9IHN0cmNocihzdHJpbmcsICdccicpKSB8fAotICAgICAgICAgIChOVUxMICE9IHN0cmNocihzdHJpbmcsICdcbicpKSkgPyBUUlVFIDogRkFMU0U7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEFjY2VwdFNlcnZlckNvbm5lY3QoKQpAQCAtMzA1LDcgKzI5NCw3IEBACiAKICAgY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdID0gczsKICAgKHZvaWQpY3VybHhfbm9uYmxvY2socywgVFJVRSk7IC8qIGVuYWJsZSBub24tYmxvY2tpbmcgKi8KLSAgY29ubi0+c29ja19hY2NlcHRlZFtTRUNPTkRBUllTT0NLRVRdID0gVFJVRTsKKyAgY29ubi0+Yml0cy5zb2NrX2FjY2VwdGVkID0gVFJVRTsKIAogICBpZihkYXRhLT5zZXQuZnNvY2tvcHQpIHsKICAgICBpbnQgZXJyb3IgPSAwOwpAQCAtMzQ4LDcgKzMzNyw3IEBACiAgIG5vdyA9IEN1cmxfbm93KCk7CiAKICAgLyogY2hlY2sgaWYgdGhlIGdlbmVyaWMgdGltZW91dCBwb3NzaWJseSBpcyBzZXQgc2hvcnRlciAqLwotICBvdGhlciA9ICBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csIEZBTFNFKTsKKyAgb3RoZXIgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csIEZBTFNFKTsKICAgaWYob3RoZXIgJiYgKG90aGVyIDwgdGltZW91dF9tcykpCiAgICAgLyogbm90ZSB0aGF0IHRoaXMgYWxzbyB3b3JrcyBmaW5lIGZvciB3aGVuIG90aGVyIGhhcHBlbnMgdG8gYmUgbmVnYXRpdmUKICAgICAgICBkdWUgdG8gaXQgYWxyZWFkeSBoYXZpbmcgZWxhcHNlZCAqLwpAQCAtMzgyLDcgKzM3MSw3IEBACiAgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOwogICBzdHJ1Y3QgcGluZ3BvbmcgKnBwID0gJmZ0cGMtPnBwOwogICBpbnQgcmVzdWx0OwotICB0aW1lX3QgdGltZW91dF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zOwogICBzc2l6ZV90IG5yZWFkOwogICBpbnQgZnRwY29kZTsKIApAQCAtNDAwLDcgKzM4OSw3IEBACiAgIGlmKHBwLT5jYWNoZV9zaXplICYmIHBwLT5jYWNoZSAmJiBwcC0+Y2FjaGVbMF0gPiAnMycpIHsKICAgICAvKiBEYXRhIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBsZXQncyByZXR1cm4gKi8KICAgICBpbmZvZihkYXRhLCAiVGhlcmUgaXMgbmVnYXRpdmUgcmVzcG9uc2UgaW4gY2FjaGUgd2hpbGUgc2VydiBjb25uZWN0XG4iKTsKLSAgICBDdXJsX0dldEZUUFJlc3BvbnNlKCZucmVhZCwgY29ubiwgJmZ0cGNvZGUpOworICAgICh2b2lkKUN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwY29kZSk7CiAgICAgcmV0dXJuIENVUkxFX0ZUUF9BQ0NFUFRfRkFJTEVEOwogICB9CiAKQEAgLTQyMiw3ICs0MTEsNyBAQAogICAgIH0KICAgICBlbHNlIGlmKHJlc3VsdCAmIENVUkxfQ1NFTEVDVF9JTikgewogICAgICAgaW5mb2YoZGF0YSwgIkN0cmwgY29ubiBoYXMgZGF0YSB3aGlsZSB3YWl0aW5nIGZvciBkYXRhIGNvbm5cbiIpOwotICAgICAgQ3VybF9HZXRGVFBSZXNwb25zZSgmbnJlYWQsIGNvbm4sICZmdHBjb2RlKTsKKyAgICAgICh2b2lkKUN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwY29kZSk7CiAKICAgICAgIGlmKGZ0cGNvZGUvMTAwID4gMykKICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9BQ0NFUFRfRkFJTEVEOwpAQCAtNDkzLDcgKzQ4Miw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgQWxsb3dTZXJ2ZXJDb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqY29ubmVjdGVkKQogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgdGltZV90IHRpbWVvdXRfbXM7CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAKICAgKmNvbm5lY3RlZCA9IEZBTFNFOwpAQCAtNTI1LDcgKzUxNCw3IEBACiAgIH0KICAgZWxzZSB7CiAgICAgLyogQWRkIHRpbWVvdXQgdG8gbXVsdGkgaGFuZGxlIGFuZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgKi8KLSAgICBpZighcmVzdWx0ICYmICpjb25uZWN0ZWQgPT0gRkFMU0UpIHsKKyAgICBpZigqY29ubmVjdGVkID09IEZBTFNFKSB7CiAgICAgICBDdXJsX2V4cGlyZShkYXRhLCBkYXRhLT5zZXQuYWNjZXB0dGltZW91dCA+IDAgPwogICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LmFjY2VwdHRpbWVvdXQ6IERFRkFVTFRfQUNDRVBUX1RJTUVPVVQsIDApOwogICAgIH0KQEAgLTU2NSwxMCArNTU0LDggQEAKICNpZmRlZiBIQVZFX0dTU0FQSQogICBjaGFyICogY29uc3QgYnVmID0gZGF0YS0+c3RhdGUuYnVmZmVyOwogI2VuZGlmCi0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBpbnQgY29kZTsKLQotICByZXN1bHQgPSBDdXJsX3BwX3JlYWRyZXNwKHNvY2tmZCwgcHAsICZjb2RlLCBzaXplKTsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9wcF9yZWFkcmVzcChzb2NrZmQsIHBwLCAmY29kZSwgc2l6ZSk7CiAKICNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKQogICAvKiBoYW5kbGUgdGhlIHNlY3VyaXR5LW9yaWVudGVkIHJlc3BvbnNlcyA2eHggKioqLwpAQCAtNjQ4LDggKzYzNSw4IEBACiAKICAgd2hpbGUoISpmdHBjb2RlICYmICFyZXN1bHQpIHsKICAgICAvKiBjaGVjayBhbmQgcmVzZXQgdGltZW91dCB2YWx1ZSBldmVyeSBsYXAgKi8KLSAgICB0aW1lX3QgdGltZW91dCA9IEN1cmxfcHBfc3RhdGVfdGltZW91dChwcCwgRkFMU0UpOwotICAgIHRpbWVfdCBpbnRlcnZhbF9tczsKKyAgICB0aW1lZGlmZl90IHRpbWVvdXQgPSBDdXJsX3BwX3N0YXRlX3RpbWVvdXQocHAsIEZBTFNFKTsKKyAgICB0aW1lZGlmZl90IGludGVydmFsX21zOwogCiAgICAgaWYodGltZW91dCA8PSAwKSB7CiAgICAgICBmYWlsZihkYXRhLCAiRlRQIHJlc3BvbnNlIHRpbWVvdXQiKTsKQEAgLTc4OSw5ICs3NzYsOCBAQAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV91c2VyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgQ1VSTGNvZGUgcmVzdWx0OwotICBzdHJ1Y3QgRlRQICpmdHAgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOwogICAvKiBzZW5kIFVTRVIgKi8KLSAgUFBTRU5ERigmY29ubi0+cHJvdG8uZnRwYy5wcCwgIlVTRVIgJXMiLCBmdHAtPnVzZXI/ZnRwLT51c2VyOiIiKTsKKyAgUFBTRU5ERigmY29ubi0+cHJvdG8uZnRwYy5wcCwgIlVTRVIgJXMiLCBjb25uLT51c2VyP2Nvbm4tPnVzZXI6IiIpOwogCiAgIHN0YXRlKGNvbm4sIEZUUF9VU0VSKTsKICAgY29ubi0+ZGF0YS0+c3RhdGUuZnRwX3RyeWluZ19hbHRlcm5hdGl2ZSA9IEZBTFNFOwpAQCAtODEyLDI4ICs3OTgsMjcgQEAKIAogLyogRm9yIHRoZSBGVFAgInByb3RvY29sIGNvbm5lY3QiIGFuZCAiZG9pbmciIHBoYXNlcyBvbmx5ICovCiBzdGF0aWMgaW50IGZ0cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLmZ0cGMucHAsIHNvY2tzLCBudW1zb2Nrcyk7CisgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLmZ0cGMucHAsIHNvY2tzKTsKIH0KIAogLyogRm9yIHRoZSBGVFAgIkRPX01PUkUiIHBoYXNlIG9ubHkgKi8KLXN0YXRpYyBpbnQgZnRwX2RvbW9yZV9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCitzdGF0aWMgaW50IGZ0cF9kb21vcmVfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKIAotICBpZighbnVtc29ja3MpCi0gICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KICAgLyogV2hlbiBpbiBET19NT1JFIHN0YXRlLCB3ZSBjb3VsZCBiZSBlaXRoZXIgd2FpdGluZyBmb3IgdXMgdG8gY29ubmVjdCB0byBhCiAgICAqIHJlbW90ZSBzaXRlLCBvciB3ZSBjb3VsZCB3YWl0IGZvciB0aGF0IHNpdGUgdG8gY29ubmVjdCB0byB1cy4gT3IganVzdAogICAgKiBoYW5kbGUgb3JkaW5hcnkgY29tbWFuZHMuCiAgICAqLwogCisgIGlmKFNPQ0tTX1NUQVRFKGNvbm4tPmNubmN0LnN0YXRlKSkKKyAgICByZXR1cm4gQ3VybF9TT0NLU19nZXRzb2NrKGNvbm4sIHNvY2tzLCBTRUNPTkRBUllTT0NLRVQpOworCiAgIGlmKEZUUF9TVE9QID09IGZ0cGMtPnN0YXRlKSB7CiAgICAgaW50IGJpdHMgPSBHRVRTT0NLX1JFQURTT0NLKDApOworICAgIGJvb2wgYW55ID0gRkFMU0U7CiAKICAgICAvKiBpZiBzdG9wcGVkIGFuZCBzdGlsbCBpbiB0aGlzIHN0YXRlLCB0aGVuIHdlJ3JlIGFsc28gd2FpdGluZyBmb3IgYQogICAgICAgIGNvbm5lY3Qgb24gdGhlIHNlY29uZGFyeSBjb25uZWN0aW9uICovCkBAIC04NDgsMTcgKzgzMywxOCBAQAogICAgICAgICBpZihjb25uLT50ZW1wc29ja1tpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKICAgICAgICAgICBzb2Nrc1tzXSA9IGNvbm4tPnRlbXBzb2NrW2ldOwogICAgICAgICAgIGJpdHMgfD0gR0VUU09DS19XUklURVNPQ0socysrKTsKKyAgICAgICAgICBhbnkgPSBUUlVFOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQotICAgIGVsc2UgeworICAgIGlmKCFhbnkpIHsKICAgICAgIHNvY2tzWzFdID0gY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdOwogICAgICAgYml0cyB8PSBHRVRTT0NLX1dSSVRFU09DSygxKSB8IEdFVFNPQ0tfUkVBRFNPQ0soMSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGJpdHM7CiAgIH0KLSAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uZnRwYy5wcCwgc29ja3MsIG51bXNvY2tzKTsKKyAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uZnRwYy5wcCwgc29ja3MpOwogfQogCiAvKiBUaGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgRlRQX1FVT1RFIHN0YXRlIGlzIHBhc3NlZC4KQEAgLTg3Niw2ICs4NjIsMTAgQEAKICAgICAvKiBhbHJlYWR5IGRvbmUgYW5kIGZpbmUgKi8KICAgICByZXN1bHQgPSBmdHBfc3RhdGVfbWR0bShjb25uKTsKICAgZWxzZSB7CisgICAgLyogRlRQRklMRV9OT0NXRCB3aXRoIGZ1bGwgcGF0aDogZXhwZWN0IGZ0cGMtPmN3ZGRvbmUhICovCisgICAgREVCVUdBU1NFUlQoKGNvbm4tPmRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCAhPSBGVFBGSUxFX05PQ1dEKSB8fAorICAgICAgICAgICAgICAgICEoZnRwYy0+ZGlyZGVwdGggJiYgZnRwYy0+ZGlyc1swXVswXSA9PSAnLycpKTsKKwogICAgIGZ0cGMtPmNvdW50MiA9IDA7IC8qIGNvdW50MiBjb3VudHMgZmFpbGVkIENXRHMgKi8KIAogICAgIC8qIGNvdW50MyBpcyBzZXQgdG8gYWxsb3cgYSBNS0QgdG8gZmFpbCBvbmNlLiBJbiB0aGUgY2FzZSB3aGVuIGZpcnN0IENXRApAQCAtODgzLDEwICs4NzMsOSBAQAogICAgICAgIGRpcikgdGhpcyB0aGVuIGFsbG93cyBmb3IgYSBzZWNvbmQgdHJ5IHRvIENXRCB0byBpdCAqLwogICAgIGZ0cGMtPmNvdW50MyA9IChjb25uLT5kYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgPT0gMik/MTowOwogCi0gICAgaWYoKGNvbm4tPmRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCA9PSBGVFBGSUxFX05PQ1dEKSAmJiAhZnRwYy0+Y3dkY291bnQpCi0gICAgICAvKiBObyBDV0QgbmVjZXNzYXJ5ICovCi0gICAgICByZXN1bHQgPSBmdHBfc3RhdGVfbWR0bShjb25uKTsKLSAgICBlbHNlIGlmKGNvbm4tPmJpdHMucmV1c2UgJiYgZnRwYy0+ZW50cnlwYXRoKSB7CisgICAgaWYoY29ubi0+Yml0cy5yZXVzZSAmJiBmdHBjLT5lbnRyeXBhdGggJiYKKyAgICAgICAvKiBubyBuZWVkIHRvIGdvIHRvIGVudHJ5cGF0aCB3aGVuIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCAqLworICAgICAgICEoZnRwYy0+ZGlyZGVwdGggJiYgZnRwYy0+ZGlyc1swXVswXSA9PSAnLycpKSB7CiAgICAgICAvKiBUaGlzIGlzIGEgcmUtdXNlZCBjb25uZWN0aW9uLiBTaW5jZSB3ZSBjaGFuZ2UgZGlyZWN0b3J5IHRvIHdoZXJlIHRoZQogICAgICAgICAgdHJhbnNmZXIgaXMgdGFraW5nIHBsYWNlLCB3ZSBtdXN0IGZpcnN0IGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBkaXIKICAgICAgICAgIHdoZXJlIHdlIGVuZGVkIHVwIGFmdGVyIGxvZ2luOiAqLwpAQCAtOTI2LDEwICs5MTUsMTAgQEAKICAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjdXJsX3NvY2tldF90IHBvcnRzb2NrID0gQ1VSTF9TT0NLRVRfQkFEOwotICBjaGFyIG15aG9zdFsyNTZdID0gIiI7CisgIGNoYXIgbXlob3N0W01BWF9JUEFEUl9MRU4gKyAxXSA9ICIiOwogCiAgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3M7Ci0gIEN1cmxfYWRkcmluZm8gKnJlcywgKmFpOworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqcmVzLCAqYWk7CiAgIGN1cmxfc29ja2xlbl90IHNzbGVuOwogICBjaGFyIGhidWZbTklfTUFYSE9TVF07CiAgIHN0cnVjdCBzb2NrYWRkciAqc2EgPSAoc3RydWN0IHNvY2thZGRyICopJnNzOwpAQCAtOTM3LDkgKzkyNiw4IEBACiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgc3RydWN0IHNvY2thZGRyX2luNiAqIGNvbnN0IHNhNiA9ICh2b2lkICopc2E7CiAjZW5kaWYKLSAgY2hhciB0bXBbMTAyNF07CiAgIHN0YXRpYyBjb25zdCBjaGFyIG1vZGVbXVs1XSA9IHsgIkVQUlQiLCAiUE9SVCIgfTsKLSAgaW50IHJjOworICBlbnVtIHJlc29sdmVfdCByYzsKICAgaW50IGVycm9yOwogICBjaGFyICpob3N0ID0gTlVMTDsKICAgY2hhciAqc3RyaW5nX2Z0cHBvcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19GVFBQT1JUXTsKQEAgLTEwNTUsNiArMTA0Myw3IEBACiAgIH0gLyogZGF0YS0+c2V0LmZ0cHBvcnQgKi8KIAogICBpZighaG9zdCkgeworICAgIGNvbnN0IGNoYXIgKnI7CiAgICAgLyogbm90IGFuIGludGVyZmFjZSBhbmQgbm90IGEgaG9zdCBuYW1lLCBnZXQgZGVmYXVsdCBieSBleHRyYWN0aW5nCiAgICAgICAgdGhlIElQIGZyb20gdGhlIGNvbnRyb2wgY29ubmVjdGlvbiAqLwogICAgIHNzbGVuID0gc2l6ZW9mKHNzKTsKQEAgLTEwNjcsMTMgKzEwNTYsMTUgQEAKICAgICBzd2l0Y2goc2EtPnNhX2ZhbWlseSkgewogI2lmZGVmIEVOQUJMRV9JUFY2CiAgICAgY2FzZSBBRl9JTkVUNjoKLSAgICAgIEN1cmxfaW5ldF9udG9wKHNhLT5zYV9mYW1pbHksICZzYTYtPnNpbjZfYWRkciwgaGJ1Ziwgc2l6ZW9mKGhidWYpKTsKKyAgICAgIHIgPSBDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2E2LT5zaW42X2FkZHIsIGhidWYsIHNpemVvZihoYnVmKSk7CiAgICAgICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6Ci0gICAgICBDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2E0LT5zaW5fYWRkciwgaGJ1Ziwgc2l6ZW9mKGhidWYpKTsKKyAgICAgIHIgPSBDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2E0LT5zaW5fYWRkciwgaGJ1Ziwgc2l6ZW9mKGhidWYpKTsKICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBpZighcikKKyAgICAgIHJldHVybiBDVVJMRV9GVFBfUE9SVF9GQUlMRUQ7CiAgICAgaG9zdCA9IGhidWY7IC8qIHVzZSB0aGlzIGhvc3QgbmFtZSAqLwogICAgIHBvc3NpYmx5X25vbl9sb2NhbCA9IEZBTFNFOyAvKiB3ZSBrbm93IGl0IGlzIGxvY2FsIG5vdyAqLwogICB9CkBAIC0xMjUyLDggKzEyNDMsMTAgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZihQT1JUID09IGZjbWQpIHsKKyAgICAgIC8qIGxhcmdlIGVub3VnaCBmb3IgW0lQIGFkZHJlc3NdLFtudW1dLFtudW1dICovCisgICAgICBjaGFyIHRhcmdldFtzaXplb2YobXlob3N0KSArIDIwXTsKICAgICAgIGNoYXIgKnNvdXJjZSA9IG15aG9zdDsKLSAgICAgIGNoYXIgKmRlc3QgPSB0bXA7CisgICAgICBjaGFyICpkZXN0ID0gdGFyZ2V0OwogCiAgICAgICAvKiB0cmFuc2xhdGUgeC54LngueCB0byB4LHgseCx4ICovCiAgICAgICB3aGlsZShzb3VyY2UgJiYgKnNvdXJjZSkgewpAQCAtMTI2Nyw3ICsxMjYwLDcgQEAKICAgICAgICpkZXN0ID0gMDsKICAgICAgIG1zbnByaW50ZihkZXN0LCAyMCwgIiwlZCwlZCIsIChpbnQpKHBvcnQ+PjgpLCAoaW50KShwb3J0JjB4ZmYpKTsKIAotICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmZnRwYy0+cHAsICIlcyAlcyIsIG1vZGVbZmNtZF0sIHRtcCk7CisgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZmdHBjLT5wcCwgIiVzICVzIiwgbW9kZVtmY21kXSwgdGFyZ2V0KTsKICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBzZW5kaW5nIFBPUlQgY29tbWFuZDogJXMiLAogICAgICAgICAgICAgICBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzdWx0KSk7CkBAIC0xMzA4LDcgKzEzMDEsNyBAQAogICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIC8qCi0gICAgSGVyZSdzIHRoZSBleGNlY3V0aXZlIHN1bW1hcnkgb24gd2hhdCB0byBkbzoKKyAgICBIZXJlJ3MgdGhlIGV4ZWN1dGl2ZSBzdW1tYXJ5IG9uIHdoYXQgdG8gZG86CiAKICAgICBQQVNWIGlzIFJGQzk1OSwgZXhwZWN0OgogICAgIDIyNyBFbnRlcmluZyBQYXNzaXZlIE1vZGUgKGExLGEyLGEzLGE0LHAxLHAyKQpAQCAtMTQ0NSwzMSArMTQzOCwzNyBAQAogICAgICBzZXJ2ZXJzIGVpdGhlci4uLiAqLwogCiAgIC8qCi0gICAgIGlmIEZUUEZJTEVfTk9DV0Qgd2FzIHNwZWNpZmllZCwgd2UgYXJlIGN1cnJlbnRseSBpbgotICAgICB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LCBzbyB3ZSBzaG91bGQgYWRkIHRoZSBwYXRoCisgICAgIGlmIEZUUEZJTEVfTk9DV0Qgd2FzIHNwZWNpZmllZCwgd2Ugc2hvdWxkIGFkZCB0aGUgcGF0aAogICAgICBhcyBhcmd1bWVudCBmb3IgdGhlIExJU1QgLyBOTFNUIC8gb3IgY3VzdG9tIGNvbW1hbmQuCiAgICAgIFdoZXRoZXIgdGhlIHNlcnZlciB3aWxsIHN1cHBvcnQgdGhpcywgaXMgdW5jZXJ0YWluLgogCiAgICAgIFRoZSBvdGhlciBmdHBfZmlsZW1ldGhvZHMgd2lsbCBDV0QgaW50byBkaXIvZGlyLyBmaXJzdCBhbmQKICAgICAgdGhlbiBqdXN0IGRvIExJU1QgKGluIHRoYXQgY2FzZTogbm90aGluZyB0byBkbyBoZXJlKQogICAqLwotICBjaGFyICpjbWQsICpsc3RBcmcsICpzbGFzaFBvczsKLSAgY29uc3QgY2hhciAqaW5wYXRoID0gZnRwLT5wYXRoOworICBjaGFyICpsc3RBcmcgPSBOVUxMOworICBjaGFyICpjbWQ7CiAKLSAgbHN0QXJnID0gTlVMTDsKLSAgaWYoKGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCA9PSBGVFBGSUxFX05PQ1dEKSAmJgotICAgICBpbnBhdGggJiYgaW5wYXRoWzBdICYmIHN0cmNocihpbnBhdGgsICcvJykpIHsKLSAgICBzaXplX3QgbiA9IHN0cmxlbihpbnBhdGgpOwotCi0gICAgLyogQ2hlY2sgaWYgcGF0aCBkb2VzIG5vdCBlbmQgd2l0aCAvLCBhcyB0aGVuIHdlIGN1dCBvZmYgdGhlIGZpbGUgcGFydCAqLwotICAgIGlmKGlucGF0aFtuIC0gMV0gIT0gJy8nKSB7Ci0gICAgICAvKiBjaG9wIG9mZiB0aGUgZmlsZSBwYXJ0IGlmIGZvcm1hdCBpcyBkaXIvZGlyL2ZpbGUgKi8KLSAgICAgIHNsYXNoUG9zID0gc3RycmNocihpbnBhdGgsICcvJyk7Ci0gICAgICBuID0gc2xhc2hQb3MgLSBpbnBhdGg7Ci0gICAgfQotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGlucGF0aCwgbiwgJmxzdEFyZywgTlVMTCwgVFJVRSk7CisgIGlmKChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkgJiYgZnRwLT5wYXRoKSB7CisgICAgLyogdXJsLWRlY29kZSBiZWZvcmUgZXZhbHVhdGlvbjogZS5nLiBwYXRocyBzdGFydGluZy9lbmRpbmcgd2l0aCAlMmYgKi8KKyAgICBjb25zdCBjaGFyICpzbGFzaFBvcyA9IE5VTEw7CisgICAgY2hhciAqcmF3UGF0aCA9IE5VTEw7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcmF3UGF0aCwgTlVMTCwgUkVKRUNUX0NUUkwpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzbGFzaFBvcyA9IHN0cnJjaHIocmF3UGF0aCwgJy8nKTsKKyAgICBpZihzbGFzaFBvcykgeworICAgICAgLyogY2hvcCBvZmYgdGhlIGZpbGUgcGFydCBpZiBmb3JtYXQgaXMgZGlyL2ZpbGUgb3RoZXJ3aXNlIHJlbW92ZQorICAgICAgICAgdGhlIHRyYWlsaW5nIHNsYXNoIGZvciBkaXIvZGlyLyBleGNlcHQgZm9yIGFic29sdXRlIHBhdGggLyAqLworICAgICAgc2l6ZV90IG4gPSBzbGFzaFBvcyAtIHJhd1BhdGg7CisgICAgICBpZihuID09IDApCisgICAgICAgICsrbjsKKworICAgICAgbHN0QXJnID0gcmF3UGF0aDsKKyAgICAgIGxzdEFyZ1tuXSA9ICdcMCc7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGZyZWUocmF3UGF0aCk7CiAgIH0KIAogICBjbWQgPSBhcHJpbnRmKCIlcyVzJXMiLApAQCAtMTQ3OCwxNSArMTQ3NywxMiBAQAogICAgICAgICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2xpc3Rfb25seT8iTkxTVCI6IkxJU1QiKSwKICAgICAgICAgICAgICAgICBsc3RBcmc/ICIgIjogIiIsCiAgICAgICAgICAgICAgICAgbHN0QXJnPyBsc3RBcmc6ICIiKTsKKyAgZnJlZShsc3RBcmcpOwogCi0gIGlmKCFjbWQpIHsKLSAgICBmcmVlKGxzdEFyZyk7CisgIGlmKCFjbWQpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KIAogICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5mdHBjLnBwLCAiJXMiLCBjbWQpOwotCi0gIGZyZWUobHN0QXJnKTsKICAgZnJlZShjbWQpOwogCiAgIGlmKHJlc3VsdCkKQEAgLTE0OTksMjQgKzE0OTUsMTQgQEAKIAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9yZXRyX3ByZXF1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogV2UndmUgc2VudCB0aGUgVFlQRSwgbm93IHdlIG11c3Qgc2VuZCB0aGUgbGlzdCBvZiBwcmVxdW90ZSBzdHJpbmdzICovCi0KLSAgcmVzdWx0ID0gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9SRVRSX1BSRVFVT1RFKTsKLQotICByZXR1cm4gcmVzdWx0OworICByZXR1cm4gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9SRVRSX1BSRVFVT1RFKTsKIH0KIAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9zdG9yX3ByZXF1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogV2UndmUgc2VudCB0aGUgVFlQRSwgbm93IHdlIG11c3Qgc2VuZCB0aGUgbGlzdCBvZiBwcmVxdW90ZSBzdHJpbmdzICovCi0KLSAgcmVzdWx0ID0gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9TVE9SX1BSRVFVT1RFKTsKLQotICByZXR1cm4gcmVzdWx0OworICByZXR1cm4gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9TVE9SX1BSRVFVT1RFKTsKIH0KIAogc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV90eXBlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKQEAgLTE3ODEsNyArMTc2NywxMSBAQAogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAotICBpZihjb25uLT5iaXRzLmlwdjYgJiYgIShjb25uLT5iaXRzLnR1bm5lbF9wcm94eSB8fCBjb25uLT5iaXRzLnNvY2tzcHJveHkpKSB7CisgIGlmKGNvbm4tPmJpdHMuaXB2NgorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAgJiYgIShjb25uLT5iaXRzLnR1bm5lbF9wcm94eSB8fCBjb25uLT5iaXRzLnNvY2tzcHJveHkpCisjZW5kaWYKKyAgICApIHsKICAgICAvKiBXZSBjYW4ndCBkaXNhYmxlIEVQU1Ygd2hlbiBkb2luZyBJUHY2LCBzbyB0aGlzIGlzIGluc3RlYWQgYSBmYWlsICovCiAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIkZhaWxlZCBFUFNWIGF0dGVtcHQsIGV4aXRpbmdcbiIpOwogICAgIHJldHVybiBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CkBAIC0xODA2LDkgKzE3OTYsMTAgQEAKICAgICAgSWYgYSBwcm94eSB0dW5uZWwgaXMgdXNlZCwgcmV0dXJucyB0aGUgb3JpZ2luYWwgaG9zdCBuYW1lIGluc3RlYWQsIGJlY2F1c2UKICAgICAgdGhlIGVmZmVjdGl2ZSBjb250cm9sIGNvbm5lY3Rpb24gYWRkcmVzcyBpcyB0aGUgcHJveHkgYWRkcmVzcywKICAgICAgbm90IHRoZSBmdHAgaG9zdC4gKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMudHVubmVsX3Byb3h5IHx8IGNvbm4tPmJpdHMuc29ja3Nwcm94eSkKICAgICByZXR1cm4gY29ubi0+aG9zdC5uYW1lOwotCisjZW5kaWYKICAgcmV0dXJuIGNvbm4tPmlwX2FkZHJfc3RyOwogfQogCkBAIC0xODE5LDcgKzE4MTAsNyBAQAogICBDVVJMY29kZSByZXN1bHQ7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmFkZHIgPSBOVUxMOwotICBpbnQgcmM7CisgIGVudW0gcmVzb2x2ZV90IHJjOwogICB1bnNpZ25lZCBzaG9ydCBjb25uZWN0cG9ydDsgLyogdGhlIGxvY2FsIHBvcnQgY29ubmVjdCgpIHNob3VsZCB1c2UhICovCiAgIGNoYXIgKnN0ciA9ICZkYXRhLT5zdGF0ZS5idWZmZXJbNF07ICAvKiBzdGFydCBvbiB0aGUgZmlyc3QgbGV0dGVyICovCiAKQEAgLTE5MjUsNiArMTkxNiw3IEBACiAgICAgcmV0dXJuIENVUkxFX0ZUUF9XRUlSRF9QQVNWX1JFUExZOwogICB9CiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMucHJveHkpIHsKICAgICAvKgogICAgICAqIFRoaXMgY29ubmVjdGlvbiB1c2VzIGEgcHJveHkgYW5kIHdlIG5lZWQgdG8gY29ubmVjdCB0byB0aGUgcHJveHkgYWdhaW4KQEAgLTE5NDcsNyArMTkzOSw5IEBACiAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZOwogICAgIH0KICAgfQotICBlbHNlIHsKKyAgZWxzZQorI2VuZGlmCisgIHsKICAgICAvKiBub3JtYWwsIGRpcmVjdCwgZnRwIGNvbm5lY3Rpb24gKi8KICAgICByYyA9IEN1cmxfcmVzb2x2KGNvbm4sIGZ0cGMtPm5ld2hvc3QsIGZ0cGMtPm5ld3BvcnQsIEZBTFNFLCAmYWRkcik7CiAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQpAQCAtMjA1MiwxMyArMjA0NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgJnllYXIsICZtb250aCwgJmRheSwgJmhvdXIsICZtaW51dGUsICZzZWNvbmQpKSB7CiAgICAgICAgIC8qIHdlIGhhdmUgYSB0aW1lLCByZWZvcm1hdCBpdCAqLwogICAgICAgICBjaGFyIHRpbWVidWZbMjRdOwotICAgICAgICB0aW1lX3Qgc2VjcyA9IHRpbWUoTlVMTCk7Ci0KICAgICAgICAgbXNucHJpbnRmKHRpbWVidWYsIHNpemVvZih0aW1lYnVmKSwKICAgICAgICAgICAgICAgICAgICIlMDRkJTAyZCUwMmQgJTAyZDolMDJkOiUwMmQgR01UIiwKICAgICAgICAgICAgICAgICAgIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTsKICAgICAgICAgLyogbm93LCBjb252ZXJ0IHRoaXMgaW50byBhIHRpbWUoKSB2YWx1ZTogKi8KLSAgICAgICAgZGF0YS0+aW5mby5maWxldGltZSA9IGN1cmxfZ2V0ZGF0ZSh0aW1lYnVmLCAmc2Vjcyk7CisgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBDdXJsX2dldGRhdGVfY2FwcGVkKHRpbWVidWYpOwogICAgICAgfQogCiAjaWZkZWYgQ1VSTF9GVFBfSFRUUFNUWUxFX0hFQUQKQEAgLTIyNjEsOSArMjI1MywyNSBAQAogICBjaGFyICpidWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CiAKICAgLyogZ2V0IHRoZSBzaXplIGZyb20gdGhlIGFzY2lpIHN0cmluZzogKi8KLSAgaWYoZnRwY29kZSA9PSAyMTMpCisgIGlmKGZ0cGNvZGUgPT0gMjEzKSB7CisgICAgLyogVG8gYWxsb3cgc2VydmVycyB0byBwcmVwZW5kICJydWJiaXNoIiBpbiB0aGUgcmVzcG9uc2Ugc3RyaW5nLCB3ZSBzY2FuCisgICAgICAgZm9yIGFsbCB0aGUgZGlnaXRzIGF0IHRoZSBlbmQgb2YgdGhlIHJlc3BvbnNlIGFuZCBwYXJzZSBvbmx5IHRob3NlIGFzIGEKKyAgICAgICBudW1iZXIuICovCisgICAgY2hhciAqc3RhcnQgPSAmYnVmWzRdOworICAgIGNoYXIgKmZkaWdpdCA9IHN0cmNocihzdGFydCwgJ1xyJyk7CisgICAgaWYoZmRpZ2l0KSB7CisgICAgICBkbworICAgICAgICBmZGlnaXQtLTsKKyAgICAgIHdoaWxlKElTRElHSVQoKmZkaWdpdCkgJiYgKGZkaWdpdCA+IHN0YXJ0KSk7CisgICAgICBpZighSVNESUdJVCgqZmRpZ2l0KSkKKyAgICAgICAgZmRpZ2l0Kys7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGZkaWdpdCA9IHN0YXJ0OwogICAgIC8qIGlnbm9yZXMgcGFyc2luZyBlcnJvcnMsIHdoaWNoIHdpbGwgbWFrZSB0aGUgc2l6ZSByZW1haW4gdW5rbm93biAqLwotICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChidWYgKyA0LCBOVUxMLCAwLCAmZmlsZXNpemUpOworICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChmZGlnaXQsIE5VTEwsIDAsICZmaWxlc2l6ZSk7CisKKyAgfQogCiAgIGlmKGluc3RhdGUgPT0gRlRQX1NJWkUpIHsKICNpZmRlZiBDVVJMX0ZUUF9IVFRQU1RZTEVfSEVBRApAQCAtMjUyNyw3ICsyNTM1LDYgQEAKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3QgRlRQICpmdHAgPSBkYXRhLT5yZXEucHJvdG9wOwogICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKICAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLwogCkBAIC0yNTM1LDcgKzI1NDIsNyBAQAogICBpZigoZnRwY29kZSA9PSAzMzEpICYmIChmdHBjLT5zdGF0ZSA9PSBGVFBfVVNFUikpIHsKICAgICAvKiAzMzEgUGFzc3dvcmQgcmVxdWlyZWQgZm9yIC4uLgogICAgICAgICh0aGUgc2VydmVyIHJlcXVpcmVzIHRvIHNlbmQgdGhlIHVzZXIncyBwYXNzd29yZCB0b28pICovCi0gICAgUFBTRU5ERigmZnRwYy0+cHAsICJQQVNTICVzIiwgZnRwLT5wYXNzd2Q/ZnRwLT5wYXNzd2Q6IiIpOworICAgIFBQU0VOREYoJmZ0cGMtPnBwLCAiUEFTUyAlcyIsIGNvbm4tPnBhc3N3ZD9jb25uLT5wYXNzd2Q6IiIpOwogICAgIHN0YXRlKGNvbm4sIEZUUF9QQVNTKTsKICAgfQogICBlbHNlIGlmKGZ0cGNvZGUvMTAwID09IDIpIHsKQEAgLTI2NDMsOSArMjY1MCwxMiBAQAogI2VuZGlmCiAKICAgICAgIGlmKGRhdGEtPnNldC51c2Vfc3NsICYmCi0gICAgICAgICAoIWNvbm4tPnNzbFtGSVJTVFNPQ0tFVF0udXNlIHx8Ci0gICAgICAgICAgKGNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtGSVJTVFNPQ0tFVF0gJiYKLSAgICAgICAgICAgIWNvbm4tPnByb3h5X3NzbFtGSVJTVFNPQ0tFVF0udXNlKSkpIHsKKyAgICAgICAgICghY29ubi0+c3NsW0ZJUlNUU09DS0VUXS51c2UKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICAgICAgfHwgKGNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtGSVJTVFNPQ0tFVF0gJiYKKyAgICAgICAgICAgICAgIWNvbm4tPnByb3h5X3NzbFtGSVJTVFNPQ0tFVF0udXNlKQorI2VuZGlmCisgICAgICAgICAgICkpIHsKICAgICAgICAgLyogV2UgZG9uJ3QgaGF2ZSBhIFNTTC9UTFMgY29ubmVjdGlvbiB5ZXQsIGJ1dCBGVFBTIGlzCiAgICAgICAgICAgIHJlcXVlc3RlZC4gVHJ5IGEgRlRQUyBjb25uZWN0aW9uIG5vdyAqLwogCkBAIC0yODE3LDcgKzI4MjcsNyBAQAogICAgICAgICAgICAgc3RvcmUrKzsKICAgICAgICAgICAgIHB0cisrOwogICAgICAgICAgIH0KLSAgICAgICAgICAqc3RvcmUgPSAnXDAnOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworICAgICAgICAgICpzdG9yZSA9ICdcMCc7IC8qIG51bGwtdGVybWluYXRlICovCiAgICAgICAgIH0KICAgICAgICAgaWYoZW50cnlfZXh0cmFjdGVkKSB7CiAgICAgICAgICAgLyogSWYgdGhlIHBhdGggbmFtZSBkb2VzIG5vdCBsb29rIGxpa2UgYW4gYWJzb2x1dGUgcGF0aCAoaS5lLjogaXQKQEAgLTI4ODEsNyArMjg5MSw3IEBACiAgICAgICAgICAgcHRyKys7CiAgICAgICAgIGZvcihzdG9yZSA9IG9zOyAqcHRyICYmICpwdHIgIT0gJyAnOykKICAgICAgICAgICAqc3RvcmUrKyA9ICpwdHIrKzsKLSAgICAgICAgKnN0b3JlID0gJ1wwJzsgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgICAgICAgKnN0b3JlID0gJ1wwJzsgLyogbnVsbC10ZXJtaW5hdGUgKi8KIAogICAgICAgICAvKiBDaGVjayBmb3Igc3BlY2lhbCBzZXJ2ZXJzIGhlcmUuICovCiAKQEAgLTMxMzQsNyArMzE0NCw4IEBACiAgIHNzaXplX3QgbnJlYWQ7CiAgIGludCBmdHBjb2RlOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgY2hhciAqcGF0aCA9IE5VTEw7CisgIGNoYXIgKnJhd1BhdGggPSBOVUxMOworICBzaXplX3QgcGF0aExlbiA9IDA7CiAKICAgaWYoIWZ0cCkKICAgICByZXR1cm4gQ1VSTEVfT0s7CkBAIC0zMTcyLDkgKzMxODMsNiBAQAogICAgIGJyZWFrOwogICB9CiAKLSAgLyogbm93IHN0b3JlIGEgY29weSBvZiB0aGUgZGlyZWN0b3J5IHdlIGFyZSBpbiAqLwotICBmcmVlKGZ0cGMtPnByZXZwYXRoKTsKLQogICBpZihkYXRhLT5zdGF0ZS53aWxkY2FyZG1hdGNoKSB7CiAgICAgaWYoZGF0YS0+c2V0LmNodW5rX2VuZCAmJiBmdHBjLT5maWxlKSB7CiAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKQEAgLTMxODUsNDEgKzMxOTMsNDIgQEAKICAgfQogCiAgIGlmKCFyZXN1bHQpCi0gICAgLyogZ2V0IHRoZSAicmF3IiBwYXRoICovCi0gICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcGF0aCwgTlVMTCwgVFJVRSk7CisgICAgLyogZ2V0IHRoZSB1cmwtZGVjb2RlZCAicmF3IiBwYXRoICovCisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcmF3UGF0aCwgJnBhdGhMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVKRUNUX0NUUkwpOwogICBpZihyZXN1bHQpIHsKICAgICAvKiBXZSBjYW4gbGltcCBhbG9uZyBhbnl3YXkgKGFuZCBzaG91bGQgdHJ5IHRvIHNpbmNlIHdlIG1heSBhbHJlYWR5IGJlIGluCiAgICAgICogdGhlIGVycm9yIHBhdGgpICovCiAgICAgZnRwYy0+Y3RsX3ZhbGlkID0gRkFMU0U7IC8qIG1hcmsgY29udHJvbCBjb25uZWN0aW9uIGFzIGJhZCAqLwogICAgIGNvbm5jbG9zZShjb25uLCAiRlRQOiBvdXQgb2YgbWVtb3J5ISIpOyAvKiBtYXJrIGZvciBjb25uZWN0aW9uIGNsb3N1cmUgKi8KKyAgICBmcmVlKGZ0cGMtPnByZXZwYXRoKTsKICAgICBmdHBjLT5wcmV2cGF0aCA9IE5VTEw7IC8qIG5vIHBhdGggcmVtZW1iZXJpbmcgKi8KICAgfQotICBlbHNlIHsKLSAgICBzaXplX3QgZmxlbiA9IGZ0cGMtPmZpbGU/c3RybGVuKGZ0cGMtPmZpbGUpOjA7IC8qIGZpbGUgaXMgInJhdyIgYWxyZWFkeSAqLwotICAgIHNpemVfdCBkbGVuID0gc3RybGVuKHBhdGgpLWZsZW47Ci0gICAgaWYoIWZ0cGMtPmN3ZGZhaWwpIHsKLSAgICAgIGZ0cGMtPnByZXZtZXRob2QgPSBkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2Q7Ci0gICAgICBpZihkbGVuICYmIChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgIT0gRlRQRklMRV9OT0NXRCkpIHsKLSAgICAgICAgZnRwYy0+cHJldnBhdGggPSBwYXRoOwotICAgICAgICBpZihmbGVuKQotICAgICAgICAgIC8qIGlmICdwYXRoJyBpcyBub3QgdGhlIHdob2xlIHN0cmluZyAqLwotICAgICAgICAgIGZ0cGMtPnByZXZwYXRoW2RsZW5dID0gMDsgLyogdGVybWluYXRlICovCisgIGVsc2UgeyAvKiByZW1lbWJlciB3b3JraW5nIGRpcmVjdG9yeSBmb3IgY29ubmVjdGlvbiByZXVzZSAqLworICAgIGlmKChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkgJiYgKHJhd1BhdGhbMF0gPT0gJy8nKSkKKyAgICAgIGZyZWUocmF3UGF0aCk7IC8qIGZ1bGwgcGF0aCA9PiBubyBDV0RzIGhhcHBlbmVkID0+IGtlZXAgZnRwYy0+cHJldnBhdGggKi8KKyAgICBlbHNlIHsKKyAgICAgIGZyZWUoZnRwYy0+cHJldnBhdGgpOworCisgICAgICBpZighZnRwYy0+Y3dkZmFpbCkgeworICAgICAgICBpZihkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkKKyAgICAgICAgICBwYXRoTGVuID0gMDsgLyogcmVsYXRpdmUgcGF0aCA9PiB3b3JraW5nIGRpcmVjdG9yeSBpcyBGVFAgaG9tZSAqLworICAgICAgICBlbHNlCisgICAgICAgICAgcGF0aExlbiAtPSBmdHBjLT5maWxlP3N0cmxlbihmdHBjLT5maWxlKTowOyAvKiBmaWxlIGlzIHVybC1kZWNvZGVkICovCisKKyAgICAgICAgcmF3UGF0aFtwYXRoTGVuXSA9ICdcMCc7CisgICAgICAgIGZ0cGMtPnByZXZwYXRoID0gcmF3UGF0aDsKICAgICAgIH0KICAgICAgIGVsc2UgewotICAgICAgICBmcmVlKHBhdGgpOwotICAgICAgICAvKiB3ZSBuZXZlciBjaGFuZ2VkIGRpciAqLwotICAgICAgICBmdHBjLT5wcmV2cGF0aCA9IHN0cmR1cCgiIik7Ci0gICAgICAgIGlmKCFmdHBjLT5wcmV2cGF0aCkKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgZnJlZShyYXdQYXRoKTsKKyAgICAgICAgZnRwYy0+cHJldnBhdGggPSBOVUxMOyAvKiBubyBwYXRoICovCiAgICAgICB9Ci0gICAgICBpZihmdHBjLT5wcmV2cGF0aCkKLSAgICAgICAgaW5mb2YoZGF0YSwgIlJlbWVtYmVyaW5nIHdlIGFyZSBpbiBkaXIgXCIlc1wiXG4iLCBmdHBjLT5wcmV2cGF0aCk7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgZnRwYy0+cHJldnBhdGggPSBOVUxMOyAvKiBubyBwYXRoICovCi0gICAgICBmcmVlKHBhdGgpOwotICAgIH0KKworICAgIGlmKGZ0cGMtPnByZXZwYXRoKQorICAgICAgaW5mb2YoZGF0YSwgIlJlbWVtYmVyaW5nIHdlIGFyZSBpbiBkaXIgXCIlc1wiXG4iLCBmdHBjLT5wcmV2cGF0aCk7CiAgIH0KKwogICAvKiBmcmVlIHRoZSBkaXIgdHJlZSBhbmQgZmlsZSBwYXJ0cyAqLwogICBmcmVlZGlycyhmdHBjKTsKIApAQCAtMzI0Miw5ICszMjUxLDkgQEAKICAgICB9CiAKICAgICBpZihjb25uLT5zc2xbU0VDT05EQVJZU09DS0VUXS51c2UpIHsKLSAgICAgIC8qIFRoZSBzZWNvbmRhcnkgc29ja2V0IGlzIHVzaW5nIFNTTCBzbyB3ZSBtdXN0IGNsb3NlIGRvd24gdGhhdCBwYXJ0Ci0gICAgICAgICBmaXJzdCBiZWZvcmUgd2UgY2xvc2UgdGhlIHNvY2tldCBmb3IgcmVhbCAqLwotICAgICAgQ3VybF9zc2xfY2xvc2UoY29ubiwgU0VDT05EQVJZU09DS0VUKTsKKyAgICAgIC8qIFRoZSBzZWNvbmRhcnkgc29ja2V0IHVzZWQgU1NMIHNvIHdlIG11c3QgY2xvc2UgZG93biB0aGF0IHBhcnQgZmlyc3QKKyAgICAgICAgIGJlZm9yZSB3ZSBjbG9zZSB0aGUgc29ja2V0IGZvciByZWFsICovCisgICAgICByZXN1bHQgPSBDdXJsX3NzbF9zaHV0ZG93bihjb25uLCBTRUNPTkRBUllTT0NLRVQpOwogCiAgICAgICAvKiBOb3RlIHRoYXQgd2Uga2VlcCAidXNlIiBzZXQgdG8gVFJVRSBzaW5jZSB0aGF0IChuZXh0KSBjb25uZWN0aW9uIGlzCiAgICAgICAgICBzdGlsbCByZXF1ZXN0ZWQgdG8gdXNlIFNTTCAqLwpAQCAtMzI2MCw3ICszMjY5LDcgQEAKICAgICAgKiBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkLiBUaGlzIGhhcHBlbnMgd2hlbiBkb2luZyB0aHJvdWdoIE5BVHMgZXRjIHRoYXQKICAgICAgKiBhYmFuZG9uIG9sZCBzaWxlbnQgY29ubmVjdGlvbnMuCiAgICAgICovCi0gICAgbG9uZyBvbGRfdGltZSA9IHBwLT5yZXNwb25zZV90aW1lOworICAgIHRpbWVkaWZmX3Qgb2xkX3RpbWUgPSBwcC0+cmVzcG9uc2VfdGltZTsKIAogICAgIHBwLT5yZXNwb25zZV90aW1lID0gNjAqMTAwMDsgLyogZ2l2ZSBpdCBvbmx5IGEgbWludXRlIGZvciBub3cgKi8KICAgICBwcC0+cmVzcG9uc2UgPSBDdXJsX25vdygpOyAvKiB0aW1lb3V0IHJlbGF0aXZlIG5vdyAqLwpAQCAtMzQ1Myw3ICszNDYyLDcgQEAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogc3RhdGljIHZvaWQKIGZ0cF9wYXN2X3ZlcmJvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICBDdXJsX2FkZHJpbmZvICphaSwKKyAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpLAogICAgICAgICAgICAgICAgICBjaGFyICpuZXdob3N0LCAvKiBhc2NpaSB2ZXJzaW9uICovCiAgICAgICAgICAgICAgICAgIGludCBwb3J0KQogewpAQCAtMzUxMSw2ICszNTIwLDcgQEAKICAgICB9CiAgIH0KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgcmVzdWx0ID0gQ3VybF9wcm94eV9jb25uZWN0KGNvbm4sIFNFQ09OREFSWVNPQ0tFVCk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzUyMSw3ICszNTMxLDcgQEAKICAgaWYoY29ubi0+Yml0cy50dW5uZWxfcHJveHkgJiYgY29ubi0+Yml0cy5odHRwcHJveHkgJiYKICAgICAgQ3VybF9jb25uZWN0X29uZ29pbmcoY29ubikpCiAgICAgcmV0dXJuIHJlc3VsdDsKLQorI2VuZGlmCiAKICAgaWYoZnRwYy0+c3RhdGUpIHsKICAgICAvKiBhbHJlYWR5IGluIGEgc3RhdGUgc28gc2tpcCB0aGUgaW5pdGlhbCBjb21tYW5kcy4KQEAgLTM1MzIsMTQgKzM1NDIsMTMgQEAKIAogICAgIC8qIGlmIHdlIGdvdCBhbiBlcnJvciBvciBpZiB3ZSBkb24ndCB3YWl0IGZvciBhIGRhdGEgY29ubmVjdGlvbiByZXR1cm4KICAgICAgICBpbW1lZGlhdGVseSAqLwotICAgIGlmKHJlc3VsdCB8fCAoZnRwYy0+d2FpdF9kYXRhX2Nvbm4gIT0gVFJVRSkpCisgICAgaWYocmVzdWx0IHx8ICFmdHBjLT53YWl0X2RhdGFfY29ubikKICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBpZihmdHBjLT53YWl0X2RhdGFfY29ubikKLSAgICAgIC8qIGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIEZUUCBzdGF0ZSBtYWNoaW5lIGhlcmUsICpjb21wbGV0ZSB3aWxsIGJlCi0gICAgICAgICBUUlVFIGJ1dCBzbyBpcyBmdHBjLT53YWl0X2RhdGFfY29ubiwgd2hpY2ggc2F5cyB3ZSBuZWVkIHRvIHdhaXQgZm9yCi0gICAgICAgICB0aGUgZGF0YSBjb25uZWN0aW9uIGFuZCB0aGVyZWZvcmUgd2UncmUgbm90IGFjdHVhbGx5IGNvbXBsZXRlICovCi0gICAgICAqY29tcGxldGVwID0gMDsKKyAgICAvKiBpZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBGVFAgc3RhdGUgbWFjaGluZSBoZXJlLCAqY29tcGxldGUgd2lsbCBiZQorICAgICAgIFRSVUUgYnV0IHNvIGlzIGZ0cGMtPndhaXRfZGF0YV9jb25uLCB3aGljaCBzYXlzIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlCisgICAgICAgZGF0YSBjb25uZWN0aW9uIGFuZCB0aGVyZWZvcmUgd2UncmUgbm90IGFjdHVhbGx5IGNvbXBsZXRlICovCisgICAgKmNvbXBsZXRlcCA9IDA7CiAgIH0KIAogICBpZihmdHAtPnRyYW5zZmVyIDw9IEZUUFRSQU5TRkVSX0lORk8pIHsKQEAgLTM1NzMsMTMgKzM1ODIsOCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgICByZXN1bHQgPSBmdHBfbXVsdGlfc3RhdGVtYWNoKGNvbm4sICZjb21wbGV0ZSk7Ci0gICAgICBpZihmdHBjLT53YWl0X2RhdGFfY29ubikKLSAgICAgICAgLyogaWYgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgRlRQIHN0YXRlIG1hY2hpbmUgaGVyZSwgKmNvbXBsZXRlIHdpbGwgYmUKLSAgICAgICAgICAgVFJVRSBidXQgc28gaXMgZnRwYy0+d2FpdF9kYXRhX2Nvbm4sIHdoaWNoIHNheXMgd2UgbmVlZCB0byB3YWl0IGZvcgotICAgICAgICAgICB0aGUgZGF0YSBjb25uZWN0aW9uIGFuZCB0aGVyZWZvcmUgd2UncmUgbm90IGFjdHVhbGx5IGNvbXBsZXRlICovCi0gICAgICAgICpjb21wbGV0ZXAgPSAwOwotICAgICAgZWxzZQotICAgICAgICAqY29tcGxldGVwID0gKGludCljb21wbGV0ZTsKKyAgICAgIC8qIGZ0cGMtPndhaXRfZGF0YV9jb25uIGlzIGFsd2F5cyBmYWxzZSBoZXJlICovCisgICAgICAqY29tcGxldGVwID0gKGludCljb21wbGV0ZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAvKiBkb3dubG9hZCAqLwpAQCAtMzYxOSwxMCArMzYyMyw4IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCi0gIGlmKCFyZXN1bHQgJiYgKGZ0cC0+dHJhbnNmZXIgIT0gRlRQVFJBTlNGRVJfQk9EWSkpCi0gICAgLyogbm8gZGF0YSB0byB0cmFuc2Zlci4gRklYOiBpdCBmZWVscyBsaWtlIGEga2x1ZGdlIHRvIGhhdmUgdGhpcyBoZXJlCi0gICAgICAgdG9vISAqLwotICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOworICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOwogCiAgIGlmKCFmdHBjLT53YWl0X2RhdGFfY29ubikgewogICAgIC8qIG5vIHdhaXRpbmcgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24gc28gdGhpcyBpcyBub3cgY29tcGxldGUgKi8KQEAgLTQxMDAsMTg2ICs0MTAyLDE0MiBAQAogICAvKiB0aGUgZnRwIHN0cnVjdCBpcyBhbHJlYWR5IGluaXRlZCBpbiBmdHBfY29ubmVjdCgpICovCiAgIHN0cnVjdCBGVFAgKmZ0cCA9IGRhdGEtPnJlcS5wcm90b3A7CiAgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOwotICBjb25zdCBjaGFyICpzbGFzaF9wb3M7ICAvKiBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgJy8nIGNoYXIgaW4gY3VycG9zICovCi0gIGNvbnN0IGNoYXIgKnBhdGhfdG9fdXNlID0gZnRwLT5wYXRoOwotICBjb25zdCBjaGFyICpjdXJfcG9zOwotICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IE5VTEw7Ci0KLSAgY3VyX3BvcyA9IHBhdGhfdG9fdXNlOyAvKiBjdXJyZW50IHBvc2l0aW9uIGluIHBhdGguIHBvaW50IGF0IHRoZSBiZWdpbiBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgcGF0aCBjb21wb25lbnQgKi8KKyAgY29uc3QgY2hhciAqc2xhc2hQb3MgPSBOVUxMOworICBjb25zdCBjaGFyICpmaWxlTmFtZSA9IE5VTEw7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBjaGFyICpyYXdQYXRoID0gTlVMTDsgLyogdXJsLWRlY29kZWQgInJhdyIgcGF0aCAqLworICBzaXplX3QgcGF0aExlbiA9IDA7CiAKICAgZnRwYy0+Y3RsX3ZhbGlkID0gRkFMU0U7CiAgIGZ0cGMtPmN3ZGZhaWwgPSBGQUxTRTsKIAorICAvKiB1cmwtZGVjb2RlIGZ0cCBwYXRoIGJlZm9yZSBmdXJ0aGVyIGV2YWx1YXRpb24gKi8KKyAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZnRwLT5wYXRoLCAwLCAmcmF3UGF0aCwgJnBhdGhMZW4sIFJFSkVDVF9DVFJMKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKICAgc3dpdGNoKGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCkgewotICBjYXNlIEZUUEZJTEVfTk9DV0Q6Ci0gICAgLyogZmFzdGVzdCwgYnV0IGxlc3Mgc3RhbmRhcmQtY29tcGxpYW50ICovCisgICAgY2FzZSBGVFBGSUxFX05PQ1dEOiAvKiBmYXN0ZXN0LCBidXQgbGVzcyBzdGFuZGFyZC1jb21wbGlhbnQgKi8KIAotICAgIC8qCi0gICAgICBUaGUgYmVzdCB0aW1lIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHBhdGggaXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBpcyByaWdodAotICAgICAgaGVyZS4gc286Ci0KLSAgICAgIHRoZSBmaXJzdCBjb25kaXRpb24gaW4gdGhlIGlmKCkgcmlnaHQgaGVyZSwgaXMgdGhlcmUganVzdCBpbiBjYXNlCi0gICAgICBzb21lb25lIGRlY2lkZXMgdG8gc2V0IHBhdGggdG8gTlVMTCBvbmUgZGF5Ci0gICAqLwotICAgIGlmKHBhdGhfdG9fdXNlWzBdICYmCi0gICAgICAgKHBhdGhfdG9fdXNlW3N0cmxlbihwYXRoX3RvX3VzZSkgLSAxXSAhPSAnLycpICkKLSAgICAgIGZpbGVuYW1lID0gcGF0aF90b191c2U7ICAvKiB0aGlzIGlzIGEgZnVsbCBmaWxlIHBhdGggKi8KLSAgICAvKgotICAgICAgZWxzZSB7Ci0gICAgICAgIGZ0cGMtPmZpbGUgaXMgbm90IHVzZWQgYW55d2hlcmUgb3RoZXIgdGhhbiBmb3Igb3BlcmF0aW9ucyBvbiBhIGZpbGUuCi0gICAgICAgIEluIG90aGVyIHdvcmRzLCBuZXZlciBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuCi0gICAgICAgIFNvIHdlIGNhbiBzYWZlbHkgbGVhdmUgZmlsZW5hbWUgYXMgTlVMTCBoZXJlIGFuZCB1c2UgaXQgYXMgYQotICAgICAgICBhcmd1bWVudCBpbiBkaXIvZmlsZSBkZWNpc2lvbnMuCi0gICAgICB9Ci0gICAgKi8KLSAgICBicmVhazsKLQotICBjYXNlIEZUUEZJTEVfU0lOR0xFQ1dEOgotICAgIC8qIGdldCB0aGUgbGFzdCBzbGFzaCAqLwotICAgIGlmKCFwYXRoX3RvX3VzZVswXSkgewotICAgICAgLyogbm8gZGlyLCBubyBmaWxlICovCi0gICAgICBmdHBjLT5kaXJkZXB0aCA9IDA7CisgICAgICBpZigocGF0aExlbiA+IDApICYmIChyYXdQYXRoW3BhdGhMZW4gLSAxXSAhPSAnLycpKQorICAgICAgICAgIGZpbGVOYW1lID0gcmF3UGF0aDsgIC8qIHRoaXMgaXMgYSBmdWxsIGZpbGUgcGF0aCAqLworICAgICAgLyoKKyAgICAgICAgZWxzZTogZnRwYy0+ZmlsZSBpcyBub3QgdXNlZCBhbnl3aGVyZSBvdGhlciB0aGFuIGZvciBvcGVyYXRpb25zIG9uCisgICAgICAgICAgICAgIGEgZmlsZS4gSW4gb3RoZXIgd29yZHMsIG5ldmVyIGZvciBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgU28gd2UgY2FuIHNhZmVseSBsZWF2ZSBmaWxlbmFtZSBhcyBOVUxMIGhlcmUgYW5kIHVzZSBpdCBhcyBhCisgICAgICAgICAgICAgIGFyZ3VtZW50IGluIGRpci9maWxlIGRlY2lzaW9ucy4KKyAgICAgICovCiAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc2xhc2hfcG9zID0gc3RycmNocihjdXJfcG9zLCAnLycpOwotICAgIGlmKHNsYXNoX3BvcyB8fCAhKmN1cl9wb3MpIHsKLSAgICAgIHNpemVfdCBkaXJsZW4gPSBzbGFzaF9wb3MtY3VyX3BvczsKLSAgICAgIENVUkxjb2RlIHJlc3VsdDsKIAotICAgICAgZnRwYy0+ZGlycyA9IGNhbGxvYygxLCBzaXplb2YoZnRwYy0+ZGlyc1swXSkpOwotICAgICAgaWYoIWZ0cGMtPmRpcnMpCi0gICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGNhc2UgRlRQRklMRV9TSU5HTEVDV0Q6CisgICAgICBzbGFzaFBvcyA9IHN0cnJjaHIocmF3UGF0aCwgJy8nKTsKKyAgICAgIGlmKHNsYXNoUG9zKSB7CisgICAgICAgIC8qIGdldCBwYXRoIGJlZm9yZSBsYXN0IHNsYXNoLCBleGNlcHQgZm9yIC8gKi8KKyAgICAgICAgc2l6ZV90IGRpcmxlbiA9IHNsYXNoUG9zIC0gcmF3UGF0aDsKKyAgICAgICAgaWYoZGlybGVuID09IDApCisgICAgICAgICAgICBkaXJsZW4rKzsKIAotICAgICAgaWYoIWRpcmxlbikKLSAgICAgICAgZGlybGVuKys7CisgICAgICAgIGZ0cGMtPmRpcnMgPSBjYWxsb2MoMSwgc2l6ZW9mKGZ0cGMtPmRpcnNbMF0pKTsKKyAgICAgICAgaWYoIWZ0cGMtPmRpcnMpIHsKKyAgICAgICAgICBmcmVlKHJhd1BhdGgpOworICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICB9CiAKLSAgICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIHNsYXNoX3BvcyA/IGN1cl9wb3MgOiAiLyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFzaF9wb3MgPyBkaXJsZW4gOiAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cGMtPmRpcnNbMF0sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBmcmVlZGlycyhmdHBjKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgZnRwYy0+ZGlyc1swXSA9IGNhbGxvYygxLCBkaXJsZW4gKyAxKTsKKyAgICAgICAgaWYoIWZ0cGMtPmRpcnNbMF0pIHsKKyAgICAgICAgICBmcmVlKHJhd1BhdGgpOworICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweShmdHBjLT5kaXJzWzBdLCByYXdQYXRoLCBkaXJsZW4pOworICAgICAgICBmdHBjLT5kaXJkZXB0aCA9IDE7IC8qIHdlIGNvbnNpZGVyIGl0IHRvIGJlIGEgc2luZ2xlIGRpciAqLworICAgICAgICBmaWxlTmFtZSA9IHNsYXNoUG9zICsgMTsgLyogcmVzdCBpcyBmaWxlIG5hbWUgKi8KICAgICAgIH0KLSAgICAgIGZ0cGMtPmRpcmRlcHRoID0gMTsgLyogd2UgY29uc2lkZXIgaXQgdG8gYmUgYSBzaW5nbGUgZGlyICovCi0gICAgICBmaWxlbmFtZSA9IHNsYXNoX3BvcyA/IHNsYXNoX3BvcyArIDEgOiBjdXJfcG9zOyAvKiByZXN0IGlzIGZpbGUgbmFtZSAqLwotICAgIH0KLSAgICBlbHNlCi0gICAgICBmaWxlbmFtZSA9IGN1cl9wb3M7ICAvKiB0aGlzIGlzIGEgZmlsZSBuYW1lIG9ubHkgKi8KLSAgICBicmVhazsKKyAgICAgIGVsc2UKKyAgICAgICAgZmlsZU5hbWUgPSByYXdQYXRoOyAvKiBmaWxlIG5hbWUgb25seSAob3IgZW1wdHkpICovCisgICAgICBicmVhazsKIAotICBkZWZhdWx0OiAvKiBhbGxvdyBwcmV0dHkgbXVjaCBhbnl0aGluZyAqLwotICBjYXNlIEZUUEZJTEVfTVVMVElDV0Q6Ci0gICAgZnRwYy0+ZGlyZGVwdGggPSAwOwotICAgIGZ0cGMtPmRpcmFsbG9jID0gNTsgLyogZGVmYXVsdCBkaXIgZGVwdGggdG8gYWxsb2NhdGUgKi8KLSAgICBmdHBjLT5kaXJzID0gY2FsbG9jKGZ0cGMtPmRpcmFsbG9jLCBzaXplb2YoZnRwYy0+ZGlyc1swXSkpOwotICAgIGlmKCFmdHBjLT5kaXJzKQotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZGVmYXVsdDogLyogYWxsb3cgcHJldHR5IG11Y2ggYW55dGhpbmcgKi8KKyAgICBjYXNlIEZUUEZJTEVfTVVMVElDV0Q6IHsKKyAgICAgIC8qIGN1cnJlbnQgcG9zaXRpb246IGJlZ2luIG9mIG5leHQgcGF0aCBjb21wb25lbnQgKi8KKyAgICAgIGNvbnN0IGNoYXIgKmN1clBvcyA9IHJhd1BhdGg7CiAKLSAgICAvKiB3ZSBoYXZlIGEgc3BlY2lhbCBjYXNlIGZvciBsaXN0aW5nIHRoZSByb290IGRpciBvbmx5ICovCi0gICAgaWYoIXN0cmNtcChwYXRoX3RvX3VzZSwgIi8iKSkgewotICAgICAgY3VyX3BvcysrOyAvKiBtYWtlIGl0IHBvaW50IHRvIHRoZSB6ZXJvIGJ5dGUgKi8KLSAgICAgIGZ0cGMtPmRpcnNbMF0gPSBzdHJkdXAoIi8iKTsKLSAgICAgIGZ0cGMtPmRpcmRlcHRoKys7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgLyogcGFyc2UgdGhlIFVSTCBwYXRoIGludG8gc2VwYXJhdGUgcGF0aCBjb21wb25lbnRzICovCi0gICAgICB3aGlsZSgoc2xhc2hfcG9zID0gc3RyY2hyKGN1cl9wb3MsICcvJykpICE9IE5VTEwpIHsKLSAgICAgICAgLyogMSBvciAwIHBvaW50ZXIgb2Zmc2V0IHRvIGluZGljYXRlIGFic29sdXRlIGRpcmVjdG9yeSAqLwotICAgICAgICBzc2l6ZV90IGFic29sdXRlX2RpciA9ICgoY3VyX3BvcyAtIGZ0cC0+cGF0aCA+IDApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdHBjLT5kaXJkZXB0aCA9PSAwKSk/MTowOworICAgICAgaW50IGRpckFsbG9jID0gMDsgLyogbnVtYmVyIG9mIGVudHJpZXMgYWxsb2NhdGVkIGZvciB0aGUgJ2RpcnMnIGFycmF5ICovCisgICAgICBjb25zdCBjaGFyICpzdHIgPSByYXdQYXRoOworICAgICAgZm9yKDsgKnN0ciAhPSAwOyArK3N0cikKKyAgICAgICAgaWYgKCpzdHIgPT0gJy8nKQorICAgICAgICAgICsrZGlyQWxsb2M7CiAKLSAgICAgICAgLyogc2VlayBvdXQgdGhlIG5leHQgcGF0aCBjb21wb25lbnQgKi8KLSAgICAgICAgaWYoc2xhc2hfcG9zLWN1cl9wb3MpIHsKKyAgICAgIGlmKGRpckFsbG9jID4gMCkgeworICAgICAgICBmdHBjLT5kaXJzID0gY2FsbG9jKGRpckFsbG9jLCBzaXplb2YoZnRwYy0+ZGlyc1swXSkpOworICAgICAgICBpZighZnRwYy0+ZGlycykgeworICAgICAgICAgIGZyZWUocmF3UGF0aCk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIH0KKworICAgICAgICAvKiBwYXJzZSB0aGUgVVJMIHBhdGggaW50byBzZXBhcmF0ZSBwYXRoIGNvbXBvbmVudHMgKi8KKyAgICAgICAgd2hpbGUoKHNsYXNoUG9zID0gc3RyY2hyKGN1clBvcywgJy8nKSkgIT0gTlVMTCkgeworICAgICAgICAgIHNpemVfdCBjb21wTGVuID0gc2xhc2hQb3MgLSBjdXJQb3M7CisKKyAgICAgICAgICAvKiBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2g6IGFkZCB0aGF0IGFzIGEgZGlyZWN0b3J5ICovCisgICAgICAgICAgaWYoKGNvbXBMZW4gPT0gMCkgJiYgKGZ0cGMtPmRpcmRlcHRoID09IDApKQorICAgICAgICAgICAgKytjb21wTGVuOworCiAgICAgICAgICAgLyogd2Ugc2tpcCBlbXB0eSBwYXRoIGNvbXBvbmVudHMsIGxpa2UgIngvL3kiIHNpbmNlIHRoZSBGVFAgY29tbWFuZAogICAgICAgICAgICAgIENXRCByZXF1aXJlcyBhIHBhcmFtZXRlciBhbmQgYSBub24tZXhpc3RlbnQgcGFyYW1ldGVyIGEpIGRvZXNuJ3QKICAgICAgICAgICAgICB3b3JrIG9uIG1hbnkgc2VydmVycyBhbmQgYikgaGFzIG5vIGVmZmVjdCBvbiB0aGUgb3RoZXJzLiAqLwotICAgICAgICAgIHNpemVfdCBsZW4gPSBzbGFzaF9wb3MgLSBjdXJfcG9zICsgYWJzb2x1dGVfZGlyOwotICAgICAgICAgIENVUkxjb2RlIHJlc3VsdCA9Ci0gICAgICAgICAgICBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBjdXJfcG9zIC0gYWJzb2x1dGVfZGlyLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwYy0+ZGlyc1tmdHBjLT5kaXJkZXB0aF0sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKLSAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgY3VyX3BvcyA9IHNsYXNoX3BvcyArIDE7IC8qIGp1bXAgdG8gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAqLwotICAgICAgICAgIGlmKCFmdHBjLT5kaXJkZXB0aCkgewotICAgICAgICAgICAgLyogcGF0aCBzdGFydHMgd2l0aCBhIHNsYXNoLCBhZGQgdGhhdCBhcyBhIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgZnRwYy0+ZGlyc1tmdHBjLT5kaXJkZXB0aF0gPSBzdHJkdXAoIi8iKTsKLSAgICAgICAgICAgIGlmKCFmdHBjLT5kaXJzW2Z0cGMtPmRpcmRlcHRoKytdKSB7IC8qIHJ1biBvdXQgb2YgbWVtb3J5IC4uLiAqLwotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAibm8gbWVtb3J5Iik7Ci0gICAgICAgICAgICAgIGZyZWVkaXJzKGZ0cGMpOworICAgICAgICAgIGlmKGNvbXBMZW4gPiAwKSB7CisgICAgICAgICAgICBjaGFyICpjb21wID0gY2FsbG9jKDEsIGNvbXBMZW4gKyAxKTsKKyAgICAgICAgICAgIGlmKCFjb21wKSB7CisgICAgICAgICAgICAgIGZyZWUocmF3UGF0aCk7CiAgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RybmNweShjb21wLCBjdXJQb3MsIGNvbXBMZW4pOworICAgICAgICAgICAgZnRwYy0+ZGlyc1tmdHBjLT5kaXJkZXB0aCsrXSA9IGNvbXA7CiAgICAgICAgICAgfQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VyX3BvcyA9IHNsYXNoX3BvcyArIDE7IC8qIGp1bXAgdG8gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAqLwotICAgICAgICBpZigrK2Z0cGMtPmRpcmRlcHRoID49IGZ0cGMtPmRpcmFsbG9jKSB7Ci0gICAgICAgICAgLyogZW5sYXJnZSBhcnJheSAqLwotICAgICAgICAgIGNoYXIgKipiaWdnZXI7Ci0gICAgICAgICAgZnRwYy0+ZGlyYWxsb2MgKj0gMjsgLyogZG91YmxlIHRoZSBzaXplIGVhY2ggdGltZSAqLwotICAgICAgICAgIGJpZ2dlciA9IHJlYWxsb2MoZnRwYy0+ZGlycywgZnRwYy0+ZGlyYWxsb2MgKiBzaXplb2YoZnRwYy0+ZGlyc1swXSkpOwotICAgICAgICAgIGlmKCFiaWdnZXIpIHsKLSAgICAgICAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGZ0cGMtPmRpcnMgPSBiaWdnZXI7CisgICAgICAgICAgY3VyUG9zID0gc2xhc2hQb3MgKyAxOwogICAgICAgICB9CiAgICAgICB9CisgICAgICBERUJVR0FTU0VSVChmdHBjLT5kaXJkZXB0aCA8PSBkaXJBbGxvYyk7CisgICAgICBmaWxlTmFtZSA9IGN1clBvczsgLyogdGhlIHJlc3QgaXMgdGhlIGZpbGUgbmFtZSAob3IgZW1wdHkpICovCiAgICAgfQotICAgIGZpbGVuYW1lID0gY3VyX3BvczsgIC8qIHRoZSByZXN0IGlzIHRoZSBmaWxlIG5hbWUgKi8KICAgICBicmVhazsKICAgfSAvKiBzd2l0Y2ggKi8KIAotICBpZihmaWxlbmFtZSAmJiAqZmlsZW5hbWUpIHsKLSAgICBDVVJMY29kZSByZXN1bHQgPQotICAgICAgQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgZmlsZW5hbWUsIDAsICAmZnRwYy0+ZmlsZSwgTlVMTCwgVFJVRSk7Ci0KLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gIH0KKyAgaWYoZmlsZU5hbWUgJiYgKmZpbGVOYW1lKQorICAgIGZ0cGMtPmZpbGUgPSBzdHJkdXAoZmlsZU5hbWUpOwogICBlbHNlCi0gICAgZnRwYy0+ZmlsZSA9IE5VTEw7IC8qIGluc3RlYWQgb2YgcG9pbnQgdG8gYSB6ZXJvIGJ5dGUsIHdlIG1ha2UgaXQgYSBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIgKi8KKyAgICBmdHBjLT5maWxlID0gTlVMTDsgLyogaW5zdGVhZCBvZiBwb2ludCB0byBhIHplcm8gYnl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSBtYWtlIGl0IGEgTlVMTCBwb2ludGVyICovCiAKICAgaWYoZGF0YS0+c2V0LnVwbG9hZCAmJiAhZnRwYy0+ZmlsZSAmJiAoZnRwLT50cmFuc2ZlciA9PSBGVFBUUkFOU0ZFUl9CT0RZKSkgewogICAgIC8qIFdlIG5lZWQgYSBmaWxlIG5hbWUgd2hlbiB1cGxvYWRpbmcuIFJldHVybiBlcnJvciEgKi8KICAgICBmYWlsZihkYXRhLCAiVXBsb2FkaW5nIHRvIGEgVVJMIHdpdGhvdXQgYSBmaWxlIG5hbWUhIik7CisgICAgZnJlZShyYXdQYXRoKTsKICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKICAgfQogCiAgIGZ0cGMtPmN3ZGRvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBub3QgZG9uZSAqLwogCi0gIGlmKGZ0cGMtPnByZXZwYXRoKSB7Ci0gICAgLyogcHJldnBhdGggaXMgInJhdyIgc28gd2UgY29udmVydCB0aGUgaW5wdXQgcGF0aCBiZWZvcmUgd2UgY29tcGFyZSB0aGUKLSAgICAgICBzdHJpbmdzICovCi0gICAgc2l6ZV90IGRsZW47Ci0gICAgY2hhciAqcGF0aDsKLSAgICBDVVJMY29kZSByZXN1bHQgPQotICAgICAgQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgZnRwLT5wYXRoLCAwLCAmcGF0aCwgJmRsZW4sIFRSVUUpOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgZnJlZWRpcnMoZnRwYyk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgaWYoKGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCA9PSBGVFBGSUxFX05PQ1dEKSAmJiAocmF3UGF0aFswXSA9PSAnLycpKQorICAgIGZ0cGMtPmN3ZGRvbmUgPSBUUlVFOyAvKiBza2lwIENXRCBmb3IgYWJzb2x1dGUgcGF0aHMgKi8KKyAgZWxzZSB7IC8qIG5ld2x5IGNyZWF0ZWQgRlRQIGNvbm5lY3Rpb25zIGFyZSBhbHJlYWR5IGluIGVudHJ5IHBhdGggKi8KKyAgICBjb25zdCBjaGFyICpvbGRQYXRoID0gY29ubi0+Yml0cy5yZXVzZSA/IGZ0cGMtPnByZXZwYXRoIDogIiI7CisgICAgaWYob2xkUGF0aCkgeworICAgICAgc2l6ZV90IG4gPSBwYXRoTGVuOworICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kID09IEZUUEZJTEVfTk9DV0QpCisgICAgICAgIG4gPSAwOyAvKiBDV0QgdG8gZW50cnkgZm9yIHJlbGF0aXZlIHBhdGhzICovCisgICAgICBlbHNlCisgICAgICAgIG4gLT0gZnRwYy0+ZmlsZT9zdHJsZW4oZnRwYy0+ZmlsZSk6MDsKIAotICAgIGRsZW4gLT0gZnRwYy0+ZmlsZT9zdHJsZW4oZnRwYy0+ZmlsZSk6MDsKLSAgICBpZigoZGxlbiA9PSBzdHJsZW4oZnRwYy0+cHJldnBhdGgpKSAmJgotICAgICAgICFzdHJuY21wKHBhdGgsIGZ0cGMtPnByZXZwYXRoLCBkbGVuKSAmJgotICAgICAgIChmdHBjLT5wcmV2bWV0aG9kID09IGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCkpIHsKLSAgICAgIGluZm9mKGRhdGEsICJSZXF1ZXN0IGhhcyBzYW1lIHBhdGggYXMgcHJldmlvdXMgdHJhbnNmZXJcbiIpOwotICAgICAgZnRwYy0+Y3dkZG9uZSA9IFRSVUU7CisgICAgICBpZigoc3RybGVuKG9sZFBhdGgpID09IG4pICYmICFzdHJuY21wKHJhd1BhdGgsIG9sZFBhdGgsIG4pKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJSZXF1ZXN0IGhhcyBzYW1lIHBhdGggYXMgcHJldmlvdXMgdHJhbnNmZXJcbiIpOworICAgICAgICBmdHBjLT5jd2Rkb25lID0gVFJVRTsKKyAgICAgIH0KICAgICB9Ci0gICAgZnJlZShwYXRoKTsKICAgfQogCisgIGZyZWUocmF3UGF0aCk7CiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIApAQCAtNDQwMSw3ICs0MzU5LDYgQEAKICAgICBjaGFyIGNvbW1hbmQ7CiAgICAgKnR5cGUgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIGl0IHdhcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBob3N0bmFtZSAqLwogICAgIGNvbW1hbmQgPSBDdXJsX3Jhd190b3VwcGVyKHR5cGVbNl0pOwotICAgIGNvbm4tPmJpdHMudHlwZV9zZXQgPSBUUlVFOwogCiAgICAgc3dpdGNoKGNvbW1hbmQpIHsKICAgICBjYXNlICdBJzogLyogQVNDSUkgbW9kZSAqLwpAQCAtNDQyMywxOCArNDM4MCw2IEBACiAgIC8qIGdldCBzb21lIGluaXRpYWwgZGF0YSBpbnRvIHRoZSBmdHAgc3RydWN0ICovCiAgIGZ0cC0+dHJhbnNmZXIgPSBGVFBUUkFOU0ZFUl9CT0RZOwogICBmdHAtPmRvd25sb2Fkc2l6ZSA9IDA7Ci0KLSAgLyogTm8gbmVlZCB0byBkdXBsaWNhdGUgdXNlcitwYXNzd29yZCwgdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCB3b24ndCBjaGFuZ2UKLSAgICAgZHVyaW5nIGEgc2Vzc2lvbiwgYnV0IHdlIHJlLWluaXQgdGhlbSBoZXJlIHNpbmNlIG9uIHN1YnNlcXVlbnQgaW5pdHMKLSAgICAgc2luY2UgdGhlIGNvbm4gc3RydWN0IG1heSBoYXZlIGNoYW5nZWQgb3IgYmVlbiByZXBsYWNlZC4KLSAgKi8KLSAgZnRwLT51c2VyID0gY29ubi0+dXNlcjsKLSAgZnRwLT5wYXNzd2QgPSBjb25uLT5wYXNzd2Q7Ci0gIGlmKGlzQmFkRnRwU3RyaW5nKGZ0cC0+dXNlcikpCi0gICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7Ci0gIGlmKGlzQmFkRnRwU3RyaW5nKGZ0cC0+cGFzc3dkKSkKLSAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKLQogICBjb25uLT5wcm90by5mdHBjLmtub3duX2ZpbGVzaXplID0gLTE7IC8qIHVua25vd24gc2l6ZSBmb3Igbm93ICovCiAKICAgcmV0dXJuIENVUkxFX09LOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuaAppbmRleCA4MjhkNjlhLi4wNjQyMWM2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHAuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTAyLDggKzEwMiw2IEBACiAgICBwZXJoYXBzIHRoZSBDdXJsX2Vhc3kgaXMgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0aW1lcyB0aGUgY29ubmVjdGlvbiBpcwogICAgdXNlZC4gKi8KIHN0cnVjdCBGVFAgewotICBjaGFyICp1c2VyOyAgICAvKiB1c2VyIG5hbWUgc3RyaW5nICovCi0gIGNoYXIgKnBhc3N3ZDsgIC8qIHBhc3N3b3JkIHN0cmluZyAqLwogICBjaGFyICpwYXRoOyAgICAvKiBwb2ludHMgdG8gdGhlIHVybHBpZWNlcyBzdHJ1Y3QgZmllbGQgKi8KICAgY2hhciAqcGF0aGFsbG9jOyAvKiBpZiBub24tTlVMTCBhIHBvaW50ZXIgdG8gYW4gYWxsb2NhdGVkIHBhdGggKi8KIApAQCAtMTIxLDggKzExOSw3IEBACiAgIGNoYXIgKmVudHJ5cGF0aDsgLyogdGhlIFBXRCByZXBseSB3aGVuIHdlIGxvZ2dlZCBvbiAqLwogICBjaGFyICoqZGlyczsgICAvKiByZWFsbG9jKCllZCBhcnJheSBmb3IgcGF0aCBjb21wb25lbnRzICovCiAgIGludCBkaXJkZXB0aDsgIC8qIG51bWJlciBvZiBlbnRyaWVzIHVzZWQgaW4gdGhlICdkaXJzJyBhcnJheSAqLwotICBpbnQgZGlyYWxsb2M7ICAvKiBudW1iZXIgb2YgZW50cmllcyBhbGxvY2F0ZWQgZm9yIHRoZSAnZGlycycgYXJyYXkgKi8KLSAgY2hhciAqZmlsZTsgICAgLyogZGVjb2RlZCBmaWxlICovCisgIGNoYXIgKmZpbGU7ICAgIC8qIHVybC1kZWNvZGVkIGZpbGUgbmFtZSAob3IgcGF0aCkgKi8KICAgYm9vbCBkb250X2NoZWNrOyAgLyogU2V0IHRvIFRSVUUgdG8gcHJldmVudCB0aGUgZmluYWwgKHBvc3QtdHJhbnNmZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc2l6ZSBhbmQgMjI2LzI1MCBzdGF0dXMgY2hlY2suIEl0IHNob3VsZCBzdGlsbAogICAgICAgICAgICAgICAgICAgICAgICByZWFkIHRoZSBsaW5lLCBqdXN0IGlnbm9yZSB0aGUgcmVzdWx0LiAqLwpAQCAtMTM1LDggKzEzMiw3IEBACiAgIGJvb2wgY3dkZmFpbDsgICAgIC8qIHNldCBUUlVFIGlmIGEgQ1dEIGNvbW1hbmQgZmFpbHMsIGFzIHRoZW4gd2UgbXVzdCBwcmV2ZW50CiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICovCiAgIGJvb2wgd2FpdF9kYXRhX2Nvbm47IC8qIHRoaXMgaXMgc2V0IFRSVUUgaWYgZGF0YSBjb25uZWN0aW9uIGlzIHdhaXRlZCAqLwotICBjaGFyICpwcmV2cGF0aDsgICAvKiBjb25uLT5wYXRoIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zZmVyICovCi0gIGN1cmxfZnRwZmlsZSBwcmV2bWV0aG9kOyAvKiBmdHAgbWV0aG9kIGluIHByZXZpb3VzIHRyYW5zZmVyICAqLworICBjaGFyICpwcmV2cGF0aDsgICAvKiB1cmwtZGVjb2RlZCBjb25uLT5wYXRoIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zZmVyICovCiAgIGNoYXIgdHJhbnNmZXJ0eXBlOyAvKiBzZXQgYnkgZnRwX3RyYW5zZmVydHlwZSBmb3IgdXNlIGJ5IEN1cmxfY2xpZW50X3dyaXRlKClhCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3RoZXJzIChBL0kgb3IgemVybykgKi8KICAgaW50IGNvdW50MTsgLyogZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgZm9yIHRoZSBzdGF0ZSBtYWNoaW5lICovCkBAIC0xNTQsNyArMTUwLDYgQEAKICAgICAgY29ubmVjdGlvbiB0byAqLwogICBjaGFyICpuZXdob3N0OyAgICAgICAgICAvKiB0aGlzIGlzIHRoZSBwYWlyIHRvIGNvbm5lY3QgdGhlIERBVEEuLi4gKi8KICAgdW5zaWduZWQgc2hvcnQgbmV3cG9ydDsgLyogY29ubmVjdGlvbiB0byAqLwotCiB9OwogCiAjZGVmaW5lIERFRkFVTFRfQUNDRVBUX1RJTUVPVVQgICA2MDAwMCAvKiBtaWxsaXNlY29uZHMgPT0gb25lIG1pbnV0ZSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwbGlzdHBhcnNlci5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwbGlzdHBhcnNlci5jCmluZGV4IGM0ZWI0MzcuLmYzOTlhNGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cGxpc3RwYXJzZXIuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHBsaXN0cGFyc2VyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cGxpc3RwYXJzZXIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2Z0cGxpc3RwYXJzZXIuaAppbmRleCA4MTI4ODg3Li5iMzRhZTliIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9mdHBsaXN0cGFyc2VyLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZnRwbGlzdHBhcnNlci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRlbnYuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGVudi5jCmluZGV4IDg5ZDE4MWQuLjkzODViOGYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGVudi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGVudi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNywyNSArMjcsNDggQEAKIAogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKLXN0YXRpYwotY2hhciAqR2V0RW52KGNvbnN0IGNoYXIgKnZhcmlhYmxlKQorc3RhdGljIGNoYXIgKkdldEVudihjb25zdCBjaGFyICp2YXJpYWJsZSkKIHsKICNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoQ1VSTF9XSU5ET1dTX0FQUCkKICAgKHZvaWQpdmFyaWFibGU7CiAgIHJldHVybiBOVUxMOwotI2Vsc2UKLSNpZmRlZiBXSU4zMgotICBjaGFyIGVudltNQVhfUEFUSF07IC8qIE1BWF9QQVRIIGlzIGZyb20gd2luZGVmLmggKi8KLSAgY2hhciAqdGVtcCA9IGdldGVudih2YXJpYWJsZSk7Ci0gIGVudlswXSA9ICdcMCc7Ci0gIGlmKHRlbXAgIT0gTlVMTCkKLSAgICBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBKHRlbXAsIGVudiwgc2l6ZW9mKGVudikpOwotICByZXR1cm4gKGVudlswXSAhPSAnXDAnKT9zdHJkdXAoZW52KTpOVUxMOworI2VsaWYgZGVmaW5lZChXSU4zMikKKyAgLyogVGhpcyB1c2VzIFdpbmRvd3MgQVBJIGluc3RlYWQgb2YgQyBydW50aW1lIGdldGVudigpIHRvIGdldCB0aGUgZW52aXJvbm1lbnQKKyAgICAgdmFyaWFibGUgc2luY2Ugc29tZSBjaGFuZ2VzIGFyZW4ndCBhbHdheXMgdmlzaWJsZSB0byB0aGUgbGF0dGVyLiAjNDc3NCAqLworICBjaGFyICpidWYgPSBOVUxMOworICBjaGFyICp0bXA7CisgIERXT1JEIGJ1ZnNpemU7CisgIERXT1JEIHJjID0gMTsKKyAgY29uc3QgRFdPUkQgbWF4ID0gMzI3Njg7IC8qIG1heCBlbnYgdmFyIHNpemUgZnJvbSBNU0NSVCBzb3VyY2UgKi8KKworICBmb3IoOzspIHsKKyAgICB0bXAgPSByZWFsbG9jKGJ1ZiwgcmMpOworICAgIGlmKCF0bXApIHsKKyAgICAgIGZyZWUoYnVmKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGJ1ZiA9IHRtcDsKKyAgICBidWZzaXplID0gcmM7CisKKyAgICAvKiBJdCdzIHBvc3NpYmxlIGZvciByYyB0byBiZSAwIGlmIHRoZSB2YXJpYWJsZSB3YXMgZm91bmQgYnV0IGVtcHR5LgorICAgICAgIFNpbmNlIGdldGVudiBkb2Vzbid0IG1ha2UgdGhhdCBkaXN0aW5jdGlvbiB3ZSBpZ25vcmUgaXQgYXMgd2VsbC4gKi8KKyAgICByYyA9IEdldEVudmlyb25tZW50VmFyaWFibGVBKHZhcmlhYmxlLCBidWYsIGJ1ZnNpemUpOworICAgIGlmKCFyYyB8fCByYyA9PSBidWZzaXplIHx8IHJjID4gbWF4KSB7CisgICAgICBmcmVlKGJ1Zik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBpZiByYyA8IGJ1ZnNpemUgdGhlbiByYyBpcyBieXRlcyB3cml0dGVuIG5vdCBpbmNsdWRpbmcgbnVsbCAqLworICAgIGlmKHJjIDwgYnVmc2l6ZSkKKyAgICAgIHJldHVybiBidWY7CisKKyAgICAvKiBlbHNlIHJjIGlzIGJ5dGVzIG5lZWRlZCwgdHJ5IGFnYWluICovCisgIH0KICNlbHNlCiAgIGNoYXIgKmVudiA9IGdldGVudih2YXJpYWJsZSk7CiAgIHJldHVybiAoZW52ICYmIGVudlswXSk/c3RyZHVwKGVudik6TlVMTDsKICNlbmRpZgotI2VuZGlmCiB9CiAKIGNoYXIgKmN1cmxfZ2V0ZW52KGNvbnN0IGNoYXIgKnYpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRpbmZvLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRpbmZvLmMKaW5kZXggZTExOGRhOC4uNmQ1YmQ1ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvZ2V0aW5mby5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGluZm8uYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTQ3LDYgKzE0NywzMyBAQAogICAgIGxvbmcgICAgICAgICAgKnRvX2xvbmc7CiAgIH0gbHB0cjsKIAorI2lmZGVmIERFQlVHQlVJTEQKKyAgY2hhciAqdGltZXN0ciA9IGdldGVudigiQ1VSTF9USU1FIik7CisgIGlmKHRpbWVzdHIpIHsKKyAgICB1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvbCh0aW1lc3RyLCBOVUxMLCAxMCk7CisgICAgc3dpdGNoKGluZm8pIHsKKyAgICBjYXNlIENVUkxJTkZPX0xPQ0FMX1BPUlQ6CisgICAgICAqcGFyYW1fbG9uZ3AgPSAobG9uZyl2YWw7CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAvKiB1c2UgYW5vdGhlciB2YXJpYWJsZSBmb3IgdGhpcyB0byBhbGxvdyBkaWZmZXJlbnQgdmFsdWVzICovCisgIHRpbWVzdHIgPSBnZXRlbnYoIkNVUkxfREVCVUdfU0laRSIpOworICBpZih0aW1lc3RyKSB7CisgICAgdW5zaWduZWQgbG9uZyB2YWwgPSBzdHJ0b2wodGltZXN0ciwgTlVMTCwgMTApOworICAgIHN3aXRjaChpbmZvKSB7CisgICAgY2FzZSBDVVJMSU5GT19IRUFERVJfU0laRToKKyAgICBjYXNlIENVUkxJTkZPX1JFUVVFU1RfU0laRToKKyAgICAgICpwYXJhbV9sb25ncCA9IChsb25nKXZhbDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICB9CisjZW5kaWYKKwogICBzd2l0Y2goaW5mbykgewogICBjYXNlIENVUkxJTkZPX1JFU1BPTlNFX0NPREU6CiAgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5odHRwY29kZTsKQEAgLTE3MSw5ICsxOTgsMTEgQEAKICAgY2FzZSBDVVJMSU5GT19TU0xfVkVSSUZZUkVTVUxUOgogICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKICAgICBicmVhazsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNhc2UgQ1VSTElORk9fUFJPWFlfU1NMX1ZFUklGWVJFU1VMVDoKICAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5zZXQucHJveHlfc3NsLmNlcnR2ZXJpZnlyZXN1bHQ7CiAgICAgYnJlYWs7CisjZW5kaWYKICAgY2FzZSBDVVJMSU5GT19SRURJUkVDVF9DT1VOVDoKICAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5zZXQuZm9sbG93bG9jYXRpb247CiAgICAgYnJlYWs7CkBAIC0yMTIsOCArMjQxLDExIEBACiAgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5jb25uX2xvY2FsX3BvcnQ7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTElORk9fQ09ORElUSU9OX1VOTUVUOgotICAgIC8qIHJldHVybiBpZiB0aGUgY29uZGl0aW9uIHByZXZlbnRlZCB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRyYW5zZmVycmVkICovCi0gICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby50aW1lY29uZCA/IDFMIDogMEw7CisgICAgaWYoZGF0YS0+aW5mby5odHRwY29kZSA9PSAzMDQpCisgICAgICAqcGFyYW1fbG9uZ3AgPSAxTDsKKyAgICBlbHNlCisgICAgICAvKiByZXR1cm4gaWYgdGhlIGNvbmRpdGlvbiBwcmV2ZW50ZWQgdGhlIGRvY3VtZW50IHRvIGdldCB0cmFuc2ZlcnJlZCAqLworICAgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby50aW1lY29uZCA/IDFMIDogMEw7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTElORk9fUlRTUF9DTElFTlRfQ1NFUToKICAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5zdGF0ZS5ydHNwX25leHRfY2xpZW50X0NTZXE7CkBAIC0yMzUsNiArMjY3LDkgQEAKICAgICBjYXNlIDIwOgogICAgICAgKnBhcmFtX2xvbmdwID0gQ1VSTF9IVFRQX1ZFUlNJT05fMl8wOwogICAgICAgYnJlYWs7CisgICAgY2FzZSAzMDoKKyAgICAgICpwYXJhbV9sb25ncCA9IENVUkxfSFRUUF9WRVJTSU9OXzM7CisgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgKnBhcmFtX2xvbmdwID0gQ1VSTF9IVFRQX1ZFUlNJT05fTk9ORTsKICAgICAgIGJyZWFrOwpAQCAtMjQzLDcgKzI3OCw2IEBACiAgIGNhc2UgQ1VSTElORk9fUFJPVE9DT0w6CiAgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5jb25uX3Byb3RvY29sOwogICAgIGJyZWFrOwotCiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIENVUkxFX1VOS05PV05fT1BUSU9OOwogICB9CkBAIC0yNTYsNiArMjkwLDI3IEBACiBzdGF0aWMgQ1VSTGNvZGUgZ2V0aW5mb19vZmZ0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIENVUkxJTkZPIGluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgKnBhcmFtX29mZnQpCiB7CisjaWZkZWYgREVCVUdCVUlMRAorICBjaGFyICp0aW1lc3RyID0gZ2V0ZW52KCJDVVJMX1RJTUUiKTsKKyAgaWYodGltZXN0cikgeworICAgIHVuc2lnbmVkIGxvbmcgdmFsID0gc3RydG9sKHRpbWVzdHIsIE5VTEwsIDEwKTsKKyAgICBzd2l0Y2goaW5mbykgeworICAgIGNhc2UgQ1VSTElORk9fVE9UQUxfVElNRV9UOgorICAgIGNhc2UgQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FX1Q6CisgICAgY2FzZSBDVVJMSU5GT19DT05ORUNUX1RJTUVfVDoKKyAgICBjYXNlIENVUkxJTkZPX0FQUENPTk5FQ1RfVElNRV9UOgorICAgIGNhc2UgQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRV9UOgorICAgIGNhc2UgQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FX1Q6CisgICAgY2FzZSBDVVJMSU5GT19SRURJUkVDVF9USU1FX1Q6CisgICAgY2FzZSBDVVJMSU5GT19TUEVFRF9ET1dOTE9BRF9UOgorICAgIGNhc2UgQ1VSTElORk9fU1BFRURfVVBMT0FEX1Q6CisgICAgICAqcGFyYW1fb2ZmdCA9IChjdXJsX29mZl90KXZhbDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICB9CisjZW5kaWYKICAgc3dpdGNoKGluZm8pIHsKICAgY2FzZSBDVVJMSU5GT19GSUxFVElNRV9UOgogICAgICpwYXJhbV9vZmZ0ID0gKGN1cmxfb2ZmX3QpZGF0YS0+aW5mby5maWxldGltZTsKQEAgLTI2Nyw3ICszMjIsNyBAQAogICAgICpwYXJhbV9vZmZ0ID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZDsKICAgICBicmVhazsKICAgY2FzZSBDVVJMSU5GT19TUEVFRF9ET1dOTE9BRF9UOgotICAgICpwYXJhbV9vZmZ0ID0gIGRhdGEtPnByb2dyZXNzLmRsc3BlZWQ7CisgICAgKnBhcmFtX29mZnQgPSBkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX1NQRUVEX1VQTE9BRF9UOgogICAgICpwYXJhbV9vZmZ0ID0gZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZDsKQEAgLTI4MCw3ICszMzUsNyBAQAogICAgICpwYXJhbV9vZmZ0ID0gKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19VTF9TSVpFX0tOT1dOKT8KICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfdWw6LTE7CiAgICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTElORk9fVE9UQUxfVElNRV9UOgorICAgY2FzZSBDVVJMSU5GT19UT1RBTF9USU1FX1Q6CiAgICAgKnBhcmFtX29mZnQgPSBkYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQ7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FX1Q6CkBAIC0zMDEsNyArMzU2LDkgQEAKICAgY2FzZSBDVVJMSU5GT19SRURJUkVDVF9USU1FX1Q6CiAgICAgKnBhcmFtX29mZnQgPSBkYXRhLT5wcm9ncmVzcy50X3JlZGlyZWN0OwogICAgIGJyZWFrOwotCisgIGNhc2UgQ1VSTElORk9fUkVUUllfQUZURVI6CisgICAgKnBhcmFtX29mZnQgPSBkYXRhLT5pbmZvLnJldHJ5X2FmdGVyOworICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIHJldHVybiBDVVJMRV9VTktOT1dOX09QVElPTjsKICAgfQpAQCAtMzEyLDYgKzM2OSwyNyBAQAogc3RhdGljIENVUkxjb2RlIGdldGluZm9fZG91YmxlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIENVUkxJTkZPIGluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpwYXJhbV9kb3VibGVwKQogeworI2lmZGVmIERFQlVHQlVJTEQKKyAgY2hhciAqdGltZXN0ciA9IGdldGVudigiQ1VSTF9USU1FIik7CisgIGlmKHRpbWVzdHIpIHsKKyAgICB1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvbCh0aW1lc3RyLCBOVUxMLCAxMCk7CisgICAgc3dpdGNoKGluZm8pIHsKKyAgICBjYXNlIENVUkxJTkZPX1RPVEFMX1RJTUU6CisgICAgY2FzZSBDVVJMSU5GT19OQU1FTE9PS1VQX1RJTUU6CisgICAgY2FzZSBDVVJMSU5GT19DT05ORUNUX1RJTUU6CisgICAgY2FzZSBDVVJMSU5GT19BUFBDT05ORUNUX1RJTUU6CisgICAgY2FzZSBDVVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FOgorICAgIGNhc2UgQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FOgorICAgIGNhc2UgQ1VSTElORk9fUkVESVJFQ1RfVElNRToKKyAgICBjYXNlIENVUkxJTkZPX1NQRUVEX0RPV05MT0FEOgorICAgIGNhc2UgQ1VSTElORk9fU1BFRURfVVBMT0FEOgorICAgICAgKnBhcmFtX2RvdWJsZXAgPSAoZG91YmxlKXZhbDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICB9CisjZW5kaWYKICAgc3dpdGNoKGluZm8pIHsKICAgY2FzZSBDVVJMSU5GT19UT1RBTF9USU1FOgogICAgICpwYXJhbV9kb3VibGVwID0gRE9VQkxFX1NFQ1MoZGF0YS0+cHJvZ3Jlc3MudGltZXNwZW50KTsKQEAgLTMzMiwxMyArNDEwLDEzIEBACiAgICAgKnBhcmFtX2RvdWJsZXAgPSBET1VCTEVfU0VDUyhkYXRhLT5wcm9ncmVzcy50X3N0YXJ0dHJhbnNmZXIpOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX1NJWkVfVVBMT0FEOgotICAgICpwYXJhbV9kb3VibGVwID0gIChkb3VibGUpZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQ7CisgICAgKnBhcmFtX2RvdWJsZXAgPSAoZG91YmxlKWRhdGEtPnByb2dyZXNzLnVwbG9hZGVkOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX1NJWkVfRE9XTkxPQUQ6CiAgICAgKnBhcmFtX2RvdWJsZXAgPSAoZG91YmxlKWRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQ7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTElORk9fU1BFRURfRE9XTkxPQUQ6Ci0gICAgKnBhcmFtX2RvdWJsZXAgPSAgKGRvdWJsZSlkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOworICAgICpwYXJhbV9kb3VibGVwID0gKGRvdWJsZSlkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxJTkZPX1NQRUVEX1VQTE9BRDoKICAgICAqcGFyYW1fZG91YmxlcCA9IChkb3VibGUpZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGluZm8uaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dldGluZm8uaAppbmRleCBhZWNmNzE3Li44ZDJhZjQyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nZXRpbmZvLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvZ2V0aW5mby5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nb3BoZXIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5jCmluZGV4IGIyOTZjNjIuLmI0ODExYjIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAjaW5jbHVkZSAidHJhbnNmZXIuaCIKICNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgogI2luY2x1ZGUgImdvcGhlci5oIgogI2luY2x1ZGUgInNlbGVjdC5oIgpAQCAtODMsOCArODQsMTAgQEAKICAgY2hhciAqcXVlcnkgPSBkYXRhLT5zdGF0ZS51cC5xdWVyeTsKICAgY2hhciAqc2VsID0gTlVMTDsKICAgY2hhciAqc2VsX29yZyA9IE5VTEw7CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKICAgc3NpemVfdCBhbW91bnQsIGs7CiAgIHNpemVfdCBsZW47CisgIGludCB3aGF0OwogCiAgICpkb25lID0gVFJVRTsgLyogdW5jb25kaXRpb25hbGx5ICovCiAKQEAgLTExMyw3ICsxMTYsNyBAQAogICAgIG5ld3AgKz0gMjsKIAogICAgIC8qIC4uLiBhbmQgZmluYWxseSB1bmVzY2FwZSAqLwotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIG5ld3AsIDAsICZzZWwsICZsZW4sIEZBTFNFKTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBuZXdwLCAwLCAmc2VsLCAmbGVuLCBSRUpFQ1RfWkVSTyk7CiAgICAgZnJlZShnb3BoZXJwYXRoKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTM5LDE5ICsxNDIsMjkgQEAKICAgICBlbHNlCiAgICAgICBicmVhazsKIAorICAgIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGNvbm4tPmRhdGEsIE5VTEwsIEZBTFNFKTsKKyAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmKCF0aW1lb3V0X21zKQorICAgICAgdGltZW91dF9tcyA9IFRJTUVESUZGX1RfTUFYOworCiAgICAgLyogRG9uJ3QgYnVzeWxvb3AuIFRoZSBlbnRpcmUgbG9vcCB0aGluZyBpcyBhIHdvcmstYXJvdW5kIGFzIGl0IGNhdXNlcyBhCiAgICAgICAgQkxPQ0tJTkcgYmVoYXZpb3Igd2hpY2ggaXMgYSBOTy1OTy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgcmF0aGVyIGJlCiAgICAgICAgc3BsaXQgdXAgaW4gYSBkbyBhbmQgYSBkb2luZyBwaWVjZSB3aGVyZSB0aGUgcGllY2VzIHRoYXQgYXJlbid0CiAgICAgICAgcG9zc2libGUgdG8gc2VuZCBub3cgd2lsbCBiZSBzZW50IGluIHRoZSBkb2luZyBmdW5jdGlvbiByZXBlYXRlZGx5CiAgICAgICAgdW50aWwgdGhlIGVudGlyZSByZXF1ZXN0IGlzIHNlbnQuCi0KLSAgICAgICBXYWl0IGEgd2hpbGUgZm9yIHRoZSBzb2NrZXQgdG8gYmUgd3JpdGFibGUuIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QKLSAgICAgICBhY2tub3dsZWRnZSB0aGUgdGltZW91dC4KICAgICAqLwotICAgIGlmKFNPQ0tFVF9XUklUQUJMRShzb2NrZmQsIDEwMCkgPCAwKSB7CisgICAgd2hhdCA9IFNPQ0tFVF9XUklUQUJMRShzb2NrZmQsIHRpbWVvdXRfbXMpOworICAgIGlmKHdoYXQgPCAwKSB7CiAgICAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOwogICAgICAgYnJlYWs7CiAgICAgfQorICAgIGVsc2UgaWYoIXdoYXQpIHsKKyAgICAgIHJlc3VsdCA9IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIGJyZWFrOworICAgIH0KICAgfQogCiAgIGZyZWUoc2VsX29yZyk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9nb3BoZXIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5oCmluZGV4IDUwMWM5OTAuLmRlYzI1NTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2dvcGhlci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9oYXNoLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9oYXNoLmgKaW5kZXggOTBhMjVkMS4uNTU4ZDBmNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaGFzaC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hhc2guaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtODAsNyArODAsNyBAQAogdm9pZCAqQ3VybF9oYXNoX3BpY2soc3RydWN0IGN1cmxfaGFzaCAqLCB2b2lkICprZXksIHNpemVfdCBrZXlfbGVuKTsKIHZvaWQgQ3VybF9oYXNoX2FwcGx5KHN0cnVjdCBjdXJsX2hhc2ggKmgsIHZvaWQgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2IpKHZvaWQgKnVzZXIsIHZvaWQgKnB0cikpOwotaW50IEN1cmxfaGFzaF9jb3VudChzdHJ1Y3QgY3VybF9oYXNoICpoKTsKKyNkZWZpbmUgQ3VybF9oYXNoX2NvdW50KGgpICgoaCktPnNpemUpCiB2b2lkIEN1cmxfaGFzaF9kZXN0cm95KHN0cnVjdCBjdXJsX2hhc2ggKmgpOwogdm9pZCBDdXJsX2hhc2hfY2xlYW4oc3RydWN0IGN1cmxfaGFzaCAqaCk7CiB2b2lkIEN1cmxfaGFzaF9jbGVhbl93aXRoX2NyaXRlcml1bShzdHJ1Y3QgY3VybF9oYXNoICpoLCB2b2lkICp1c2VyLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG1hYy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG1hYy5jCmluZGV4IGJmNDllYmUuLmU0ZmVhOGEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2htYWMuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9obWFjLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgImN1cmxfaG1hYy5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKIAogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKQEAgLTQ3LDEzICs0OCwxMyBAQAogCiAKIAotSE1BQ19jb250ZXh0ICoKLUN1cmxfSE1BQ19pbml0KGNvbnN0IEhNQUNfcGFyYW1zICogaGFzaHBhcmFtcywKK3N0cnVjdCBITUFDX2NvbnRleHQgKgorQ3VybF9ITUFDX2luaXQoY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zICpoYXNocGFyYW1zLAogICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKICAgc2l6ZV90IGk7Ci0gIEhNQUNfY29udGV4dCAqY3R4dDsKKyAgc3RydWN0IEhNQUNfY29udGV4dCAqY3R4dDsKICAgdW5zaWduZWQgY2hhciAqaGtleTsKICAgdW5zaWduZWQgY2hhciBiOwogCkBAIC0xMDAsNyArMTAxLDcgQEAKICAgcmV0dXJuIGN0eHQ7CiB9CiAKLWludCBDdXJsX0hNQUNfdXBkYXRlKEhNQUNfY29udGV4dCAqIGN0eHQsCitpbnQgQ3VybF9ITUFDX3VwZGF0ZShzdHJ1Y3QgSE1BQ19jb250ZXh0ICpjdHh0LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pCiB7CkBAIC0xMTAsOSArMTExLDkgQEAKIH0KIAogCi1pbnQgQ3VybF9ITUFDX2ZpbmFsKEhNQUNfY29udGV4dCAqY3R4dCwgdW5zaWduZWQgY2hhciAqcmVzdWx0KQoraW50IEN1cmxfSE1BQ19maW5hbChzdHJ1Y3QgSE1BQ19jb250ZXh0ICpjdHh0LCB1bnNpZ25lZCBjaGFyICpyZXN1bHQpCiB7Ci0gIGNvbnN0IEhNQUNfcGFyYW1zICogaGFzaHBhcmFtcyA9IGN0eHQtPmhtYWNfaGFzaDsKKyAgY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zICpoYXNocGFyYW1zID0gY3R4dC0+aG1hY19oYXNoOwogCiAgIC8qIERvIG5vdCBnZXQgcmVzdWx0IGlmIGNhbGxlZCB3aXRoIGEgbnVsbCBwYXJhbWV0ZXI6IG9ubHkgcmVsZWFzZQogICAgICBzdG9yYWdlLiAqLwpAQCAtMTI5LDQgKzEzMCw0MSBAQAogICByZXR1cm4gMDsKIH0KIAorLyoKKyAqIEN1cmxfaG1hY2l0KCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBITUFDIGhhc2gsIGZvciB0aGUgc3BlY2lmaWVkIGlucHV0IGRhdGEsIGdpdmVuCisgKiB0aGUgc3BlY2lmaWVkIGhhc2ggZnVuY3Rpb24gYW5kIGtleS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGhhc2hwYXJhbXMgW2luXSAgICAgLSBUaGUgaGFzaCBmdW5jdGlvbiAoQ3VybF9ITUFDX01ENSkuCisgKiBrZXkgICAgICAgIFtpbl0gICAgIC0gVGhlIGtleSB0byB1c2UuCisgKiBrZXlsZW4gICAgIFtpbl0gICAgIC0gVGhlIGxlbmd0aCBvZiB0aGUga2V5LgorICogZGF0YSAgICAgICBbaW5dICAgICAtIFRoZSBkYXRhIHRvIGVuY3J5cHQuCisgKiBkYXRhbGVuICAgIFtpbl0gICAgIC0gVGhlIGxlbmd0aCBvZiB0aGUgZGF0YS4KKyAqIG91dHB1dCAgICAgW2luL291dF0gLSBUaGUgb3V0cHV0IGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCisgKi8KK0NVUkxjb2RlIEN1cmxfaG1hY2l0KGNvbnN0IHN0cnVjdCBITUFDX3BhcmFtcyAqaGFzaHBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3Qgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGNvbnN0IHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0KQoreworICBzdHJ1Y3QgSE1BQ19jb250ZXh0ICpjdHh0ID0KKyAgICBDdXJsX0hNQUNfaW5pdChoYXNocGFyYW1zLCBrZXksIGN1cmx4X3V6dG91aShrZXlsZW4pKTsKKworICBpZighY3R4dCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAvKiBVcGRhdGUgdGhlIGRpZ2VzdCB3aXRoIHRoZSBnaXZlbiBjaGFsbGVuZ2UgKi8KKyAgQ3VybF9ITUFDX3VwZGF0ZShjdHh0LCBkYXRhLCBjdXJseF91enRvdWkoZGF0YWxlbikpOworCisgIC8qIEZpbmFsaXNlIHRoZSBkaWdlc3QgKi8KKyAgQ3VybF9ITUFDX2ZpbmFsKGN0eHQsIG91dHB1dCk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCiAjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0YXN5bi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGFzeW4uYwppbmRleCA5OWQ4NzJiLi5lZDkxOTBmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0YXN5bi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3Rhc3luLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTExNywxMCArMTE3LDEwIEBACiAgKiBuYW1lIHJlc29sdmUgbGF5ZXJzIChzZWxlY3RlZCBhdCBidWlsZC10aW1lKS4gVGhleSBhbGwgdGFrZSB0aGlzIHNhbWUgc2V0CiAgKiBvZiBhcmd1bWVudHMKICAqLwotQ3VybF9hZGRyaW5mbyAqQ3VybF9nZXRhZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQogewogICByZXR1cm4gQ3VybF9yZXNvbHZlcl9nZXRhZGRyaW5mbyhjb25uLCBob3N0bmFtZSwgcG9ydCwgd2FpdHApOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGNoZWNrLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suYwppbmRleCAxMTVkMjRiLi45ZTBkYjA1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGNoZWNrLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suaAppbmRleCBmNTYyZGY5Li45YzE4MDg1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0Y2hlY2suaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXAuYwppbmRleCBjZjMzZWQ4Li5kZDU5MTZlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgInN0cmVycm9yLmgiCiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgImRvaC5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCkBAIC0xMTksNyArMTIwLDcgQEAKIC8qCiAgKiBSZXR1cm4gIyBvZiBhZGRyZXNzZXMgaW4gYSBDdXJsX2FkZHJpbmZvIHN0cnVjdAogICovCi1pbnQgQ3VybF9udW1fYWRkcmVzc2VzKGNvbnN0IEN1cmxfYWRkcmluZm8gKmFkZHIpCitpbnQgQ3VybF9udW1fYWRkcmVzc2VzKGNvbnN0IHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyKQogewogICBpbnQgaSA9IDA7CiAgIHdoaWxlKGFkZHIpIHsKQEAgLTEzMCwzOSArMTMxLDM2IEBACiB9CiAKIC8qCi0gKiBDdXJsX3ByaW50YWJsZV9hZGRyZXNzKCkgcmV0dXJucyBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoZSAxc3QgYWRkcmVzcworICogQ3VybF9wcmludGFibGVfYWRkcmVzcygpIHN0b3JlcyBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoZSAxc3QgYWRkcmVzcwogICogZ2l2ZW4gaW4gdGhlICdhaScgYXJndW1lbnQuIFRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGJ1ZiB0aGF0IGlzCiAgKiBidWZzaXplIGJ5dGVzIGJpZy4KICAqCi0gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgaXQgcmV0dXJucyBOVUxMLgorICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHRoZSB0YXJnZXQgYnVmZmVyIGlzIGVtcHR5LgogICovCi1jb25zdCBjaGFyICoKLUN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpCit2b2lkIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29uc3Qgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpLCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZnNpemUpCiB7Ci0gIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2E0OwotICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqaXBhZGRyNDsKLSNpZmRlZiBFTkFCTEVfSVBWNgotICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTY7Ci0gIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqaXBhZGRyNjsKLSNlbmRpZgorICBERUJVR0FTU0VSVChidWZzaXplKTsKKyAgYnVmWzBdID0gMDsKIAogICBzd2l0Y2goYWktPmFpX2ZhbWlseSkgewotICAgIGNhc2UgQUZfSU5FVDoKLSAgICAgIHNhNCA9IChjb25zdCB2b2lkICopYWktPmFpX2FkZHI7Ci0gICAgICBpcGFkZHI0ID0gJnNhNC0+c2luX2FkZHI7Ci0gICAgICByZXR1cm4gQ3VybF9pbmV0X250b3AoYWktPmFpX2ZhbWlseSwgKGNvbnN0IHZvaWQgKilpcGFkZHI0LCBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2l6ZSk7Ci0jaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBjYXNlIEFGX0lORVQ2OgotICAgICAgc2E2ID0gKGNvbnN0IHZvaWQgKilhaS0+YWlfYWRkcjsKLSAgICAgIGlwYWRkcjYgPSAmc2E2LT5zaW42X2FkZHI7Ci0gICAgICByZXR1cm4gQ3VybF9pbmV0X250b3AoYWktPmFpX2ZhbWlseSwgKGNvbnN0IHZvaWQgKilpcGFkZHI2LCBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2l6ZSk7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7CisgIGNhc2UgQUZfSU5FVDogeworICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2E0ID0gKGNvbnN0IHZvaWQgKilhaS0+YWlfYWRkcjsKKyAgICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqaXBhZGRyNCA9ICZzYTQtPnNpbl9hZGRyOworICAgICh2b2lkKUN1cmxfaW5ldF9udG9wKGFpLT5haV9mYW1pbHksIChjb25zdCB2b2lkICopaXBhZGRyNCwgYnVmLCBidWZzaXplKTsKKyAgICBicmVhazsKICAgfQotICByZXR1cm4gTlVMTDsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBjYXNlIEFGX0lORVQ2OiB7CisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2E2ID0gKGNvbnN0IHZvaWQgKilhaS0+YWlfYWRkcjsKKyAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmlwYWRkcjYgPSAmc2E2LT5zaW42X2FkZHI7CisgICAgKHZvaWQpQ3VybF9pbmV0X250b3AoYWktPmFpX2ZhbWlseSwgKGNvbnN0IHZvaWQgKilpcGFkZHI2LCBidWYsIGJ1ZnNpemUpOworICAgIGJyZWFrOworICB9CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfQogfQogCiAvKgpAQCAtMzM2LDcgKzMzNCw3IEBACiAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1NIVUZGTEVfRE5TCiBVTklUVEVTVCBDVVJMY29kZSBDdXJsX3NodWZmbGVfYWRkcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqKmFkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKiphZGRyKTsKIC8qCiAgKiBDdXJsX3NodWZmbGVfYWRkcigpIHNodWZmbGVzIHRoZSBvcmRlciBvZiBhZGRyZXNzZXMgaW4gYSAnQ3VybF9hZGRyaW5mbycKICAqIHN0cnVjdCBieSByZS1saW5raW5nIGl0cyBsaW5rZWQgbGlzdC4KQEAgLTM1MCwxMyArMzQ4LDEzIEBACiAgKiBAdW5pdHRlc3Q6IDE2MDgKICAqLwogVU5JVFRFU1QgQ1VSTGNvZGUgQ3VybF9zaHVmZmxlX2FkZHIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfYWRkcmluZm8gKiphZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfYWRkcmluZm8gKiphZGRyKQogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgY29uc3QgaW50IG51bV9hZGRycyA9IEN1cmxfbnVtX2FkZHJlc3NlcygqYWRkcik7CiAKICAgaWYobnVtX2FkZHJzID4gMSkgewotICAgIEN1cmxfYWRkcmluZm8gKipub2RlczsKKyAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqKm5vZGVzOwogICAgIGluZm9mKGRhdGEsICJTaHVmZmxpbmcgJWkgYWRkcmVzc2VzIiwgbnVtX2FkZHJzKTsKIAogICAgIG5vZGVzID0gbWFsbG9jKG51bV9hZGRycypzaXplb2YoKm5vZGVzKSk7CkBAIC0zNzUsNyArMzczLDcgQEAKICAgICAgIGlmKHJuZCkgewogICAgICAgICAvKiBGaXNoZXItWWF0ZXMgc2h1ZmZsZSAqLwogICAgICAgICBpZihDdXJsX3JhbmQoZGF0YSwgKHVuc2lnbmVkIGNoYXIgKilybmQsIHJuZF9zaXplKSA9PSBDVVJMRV9PSykgewotICAgICAgICAgIEN1cmxfYWRkcmluZm8gKnN3YXBfdG1wOworICAgICAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpzd2FwX3RtcDsKICAgICAgICAgICBmb3IoaSA9IG51bV9hZGRycyAtIDE7IGkgPiAwOyBpLS0pIHsKICAgICAgICAgICAgIHN3YXBfdG1wID0gbm9kZXNbcm5kW2ldICUgKGkgKyAxKV07CiAgICAgICAgICAgICBub2Rlc1tybmRbaV0gJSAoaSArIDEpXSA9IG5vZGVzW2ldOwpAQCAtNDE0LDcgKzQxMiw3IEBACiAgKi8KIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqCiBDdXJsX2NhY2hlX2FkZHIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICBDdXJsX2FkZHJpbmZvICphZGRyLAorICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAogICAgICAgICAgICAgICAgIGludCBwb3J0KQogewpAQCAtNDgyLDE4ICs0ODAsMTkgQEAKICAqIENVUkxSRVNPTFZfUEVORElORyAgKDEpID0gd2FpdGluZyBmb3IgcmVzcG9uc2UsIG5vIHBvaW50ZXIKICAqLwogCi1pbnQgQ3VybF9yZXNvbHYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dET0gsCi0gICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZW50cnkpCitlbnVtIHJlc29sdmVfdCBDdXJsX3Jlc29sdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0RPSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmVudHJ5KQogewogICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRucyA9IE5VTEw7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBDVVJMY29kZSByZXN1bHQ7Ci0gIGludCByYyA9IENVUkxSRVNPTFZfRVJST1I7IC8qIGRlZmF1bHQgdG8gZmFpbHVyZSAqLworICBlbnVtIHJlc29sdmVfdCByYyA9IENVUkxSRVNPTFZfRVJST1I7IC8qIGRlZmF1bHQgdG8gZmFpbHVyZSAqLwogCiAgICplbnRyeSA9IE5VTEw7CisgIGNvbm4tPmJpdHMuZG9oID0gRkFMU0U7IC8qIGRlZmF1bHQgaXMgbm90ICovCiAKICAgaWYoZGF0YS0+c2hhcmUpCiAgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0ROUywgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOwpAQCAtNTEyLDEzICs1MTEsMTMgQEAKICAgaWYoIWRucykgewogICAgIC8qIFRoZSBlbnRyeSB3YXMgbm90IGluIHRoZSBjYWNoZS4gUmVzb2x2ZSBpdCB0byBJUCBhZGRyZXNzICovCiAKLSAgICBDdXJsX2FkZHJpbmZvICphZGRyOworICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyID0gTlVMTDsKICAgICBpbnQgcmVzcHdhaXQgPSAwOwotCi0gICAgLyogQ2hlY2sgd2hhdCBJUCBzcGVjaWZpY3MgdGhlIGFwcCBoYXMgcmVxdWVzdGVkIGFuZCBpZiB3ZSBjYW4gcHJvdmlkZSBpdC4KLSAgICAgKiBJZiBub3QsIGJhaWwgb3V0LiAqLwotICAgIGlmKCFDdXJsX2lwdmFsaWQoY29ubikpCi0gICAgICByZXR1cm4gQ1VSTFJFU09MVl9FUlJPUjsKKyAgICBzdHJ1Y3QgaW5fYWRkciBpbjsKKyNpZm5kZWYgVVNFX1JFU09MVkVfT05fSVBTCisgICAgY29uc3QKKyNlbmRpZgorICAgICAgYm9vbCBpcG51bSA9IEZBTFNFOwogCiAgICAgLyogbm90aWZ5IHRoZSByZXNvbHZlciBzdGFydCBjYWxsYmFjayAqLwogICAgIGlmKGRhdGEtPnNldC5yZXNvbHZlcl9zdGFydCkgewpAQCAtNTMxLDIwICs1MzAsNTkgQEAKICAgICAgICAgcmV0dXJuIENVUkxSRVNPTFZfRVJST1I7CiAgICAgfQogCi0gICAgaWYoYWxsb3dET0ggJiYgZGF0YS0+c2V0LmRvaCkgewotICAgICAgYWRkciA9IEN1cmxfZG9oKGNvbm4sIGhvc3RuYW1lLCBwb3J0LCAmcmVzcHdhaXQpOworI2lmbmRlZiBVU0VfUkVTT0xWRV9PTl9JUFMKKyAgICAvKiBGaXJzdCBjaGVjayBpZiB0aGlzIGlzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcgKi8KKyAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmluKSA+IDApCisgICAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCisgICAgICBhZGRyID0gQ3VybF9pcDJhZGRyKEFGX0lORVQsICZpbiwgaG9zdG5hbWUsIHBvcnQpOworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgaWYoIWFkZHIpIHsKKyAgICAgIHN0cnVjdCBpbjZfYWRkciBpbjY7CisgICAgICAvKiBjaGVjayBpZiB0aGlzIGlzIGFuIElQdjYgYWRkcmVzcyBzdHJpbmcgKi8KKyAgICAgIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgJmluNikgPiAwKQorICAgICAgICAvKiBUaGlzIGlzIGFuIElQdjYgYWRkcmVzcyBsaXRlcmFsICovCisgICAgICAgIGFkZHIgPSBDdXJsX2lwMmFkZHIoQUZfSU5FVDYsICZpbjYsIGhvc3RuYW1lLCBwb3J0KTsKICAgICB9CisjZW5kaWYgLyogRU5BQkxFX0lQVjYgKi8KKworI2Vsc2UgLyogaWYgVVNFX1JFU09MVkVfT05fSVBTICovCisgICAgLyogRmlyc3QgY2hlY2sgaWYgdGhpcyBpcyBhbiBJUHY0IGFkZHJlc3Mgc3RyaW5nICovCisgICAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZpbikgPiAwKQorICAgICAgLyogVGhpcyBpcyBhIGRvdHRlZCBJUCBhZGRyZXNzIDEyMy4xMjMuMTIzLjEyMy1zdHlsZSAqLworICAgICAgaXBudW0gPSBUUlVFOworI2lmZGVmIEVOQUJMRV9JUFY2CiAgICAgZWxzZSB7Ci0gICAgICAvKiBJZiBDdXJsX2dldGFkZHJpbmZvKCkgcmV0dXJucyBOVUxMLCAncmVzcHdhaXQnIG1pZ2h0IGJlIHNldCB0byBhCi0gICAgICAgICBub24temVybyB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgcmVzcG9uc2UgdG8gdGhlCi0gICAgICAgICByZXNvbHZlIGNhbGwgKi8KLSAgICAgIGFkZHIgPSBDdXJsX2dldGFkZHJpbmZvKGNvbm4sCisgICAgICBzdHJ1Y3QgaW42X2FkZHIgaW42OworICAgICAgLyogY2hlY2sgaWYgdGhpcyBpcyBhbiBJUHY2IGFkZHJlc3Mgc3RyaW5nICovCisgICAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZpbjYpID4gMCkKKyAgICAgICAgLyogVGhpcyBpcyBhbiBJUHY2IGFkZHJlc3MgbGl0ZXJhbCAqLworICAgICAgICBpcG51bSA9IFRSVUU7CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRV9JUFY2ICovCisKKyNlbmRpZiAvKiAhVVNFX1JFU09MVkVfT05fSVBTICovCisKKyAgICBpZighYWRkcikgeworICAgICAgLyogQ2hlY2sgd2hhdCBJUCBzcGVjaWZpY3MgdGhlIGFwcCBoYXMgcmVxdWVzdGVkIGFuZCBpZiB3ZSBjYW4gcHJvdmlkZQorICAgICAgICogaXQuIElmIG5vdCwgYmFpbCBvdXQuICovCisgICAgICBpZighQ3VybF9pcHZhbGlkKGNvbm4pKQorICAgICAgICByZXR1cm4gQ1VSTFJFU09MVl9FUlJPUjsKKworICAgICAgaWYoYWxsb3dET0ggJiYgZGF0YS0+c2V0LmRvaCAmJiAhaXBudW0pIHsKKyAgICAgICAgYWRkciA9IEN1cmxfZG9oKGNvbm4sIGhvc3RuYW1lLCBwb3J0LCAmcmVzcHdhaXQpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIElmIEN1cmxfZ2V0YWRkcmluZm8oKSByZXR1cm5zIE5VTEwsICdyZXNwd2FpdCcgbWlnaHQgYmUgc2V0IHRvIGEKKyAgICAgICAgICAgbm9uLXplcm8gdmFsdWUgaW5kaWNhdGluZyB0aGF0IHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJlc3BvbnNlIHRvCisgICAgICAgICAgIHRoZSByZXNvbHZlIGNhbGwgKi8KKyAgICAgICAgYWRkciA9IEN1cmxfZ2V0YWRkcmluZm8oY29ubiwKICNpZmRlZiBERUJVR0JVSUxECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfREVWSUNFXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzdHJjbXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfREVWSUNFXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb2NhbEhvc3QiKSk/ImxvY2FsaG9zdCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhLT5zZXQuc3RyW1NUUklOR19ERVZJQ0VdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhc3RyY21wKGRhdGEtPnNldC5zdHJbU1RSSU5HX0RFVklDRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb2NhbEhvc3QiKSk/ImxvY2FsaG9zdCI6CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLCBwb3J0LCAmcmVzcHdhaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSwgcG9ydCwgJnJlc3B3YWl0KTsKKyAgICAgIH0KICAgICB9CiAgICAgaWYoIWFkZHIpIHsKICAgICAgIGlmKHJlc3B3YWl0KSB7CkBAIC02MjAsMTEgKzY1OCwxMSBAQAogICogQ1VSTFJFU09MVl9QRU5ESU5HICAoMSkgPSB3YWl0aW5nIGZvciByZXNwb25zZSwgbm8gcG9pbnRlcgogICovCiAKLWludCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKiplbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfdCB0aW1lb3V0bXMpCitlbnVtIHJlc29sdmVfdCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKiplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRpZmZfdCB0aW1lb3V0bXMpCiB7CiAjaWZkZWYgVVNFX0FMQVJNX1RJTUVPVVQKICNpZmRlZiBIQVZFX1NJR0FDVElPTgpAQCAtNjQwLDcgKzY3OCw3IEBACiAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBwcmV2X2FsYXJtID0gMDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAjZW5kaWYgLyogVVNFX0FMQVJNX1RJTUVPVVQgKi8KLSAgaW50IHJjOworICBlbnVtIHJlc29sdmVfdCByYzsKIAogICAqZW50cnkgPSBOVUxMOwogCkBAIC03NDksNyArNzg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Y3JlYXRlZCkgLyAxMDAwOwogCiAgICAgLyogdGhlIGFsYXJtIHBlcmlvZCBpcyBjb3VudGVkIGluIGV2ZW4gbnVtYmVyIG9mIHNlY29uZHMgKi8KLSAgICB1bnNpZ25lZCBsb25nIGFsYXJtX3NldCA9IHByZXZfYWxhcm0gLSBlbGFwc2VkX3NlY3M7CisgICAgdW5zaWduZWQgbG9uZyBhbGFybV9zZXQgPSAodW5zaWduZWQgbG9uZykocHJldl9hbGFybSAtIGVsYXBzZWRfc2Vjcyk7CiAKICAgICBpZighYWxhcm1fc2V0IHx8CiAgICAgICAgKChhbGFybV9zZXQgPj0gMHg4MDAwMDAwMCkgJiYgKHByZXZfYWxhcm0gPCAweDgwMDAwMDAwKSkgKSB7CkBAIC04NjgsNyArOTA2LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRuczsKLSAgICAgIEN1cmxfYWRkcmluZm8gKmhlYWQgPSBOVUxMLCAqdGFpbCA9IE5VTEw7CisgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqaGVhZCA9IE5VTEwsICp0YWlsID0gTlVMTDsKICAgICAgIHNpemVfdCBlbnRyeV9sZW47CiAgICAgICBjaGFyIGFkZHJlc3NbNjRdOwogI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCkBAIC05MDIsNyArOTQwLDcgQEAKIAogICAgICAgd2hpbGUoKmVuZF9wdHIpIHsKICAgICAgICAgc2l6ZV90IGFsZW47Ci0gICAgICAgIEN1cmxfYWRkcmluZm8gKmFpOworICAgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWk7CiAKICAgICAgICAgYWRkcl9iZWdpbiA9IGVuZF9wdHIgKyAxOwogICAgICAgICBhZGRyX2VuZCA9IHN0cmNocihhZGRyX2JlZ2luLCAnLCcpOwpAQCAtMTAyMSwyNSArMTA1OSwyNyBAQAogQ1VSTGNvZGUgQ3VybF9yZXNvbHZfY2hlY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zKQogewotICBpZihjb25uLT5kYXRhLT5zZXQuZG9oKQorI2lmIGRlZmluZWQoQ1VSTF9ESVNBQkxFX0RPSCkgJiYgIWRlZmluZWQoQ1VSTFJFU19BU1lOQ0gpCisgICh2b2lkKWRuczsKKyNlbmRpZgorCisgIGlmKGNvbm4tPmJpdHMuZG9oKQogICAgIHJldHVybiBDdXJsX2RvaF9pc19yZXNvbHZlZChjb25uLCBkbnMpOwogICByZXR1cm4gQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZChjb25uLCBkbnMpOwogfQogCiBpbnQgQ3VybF9yZXNvbHZfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogI2lmZGVmIENVUkxSRVNfQVNZTkNICi0gIGlmKGNvbm4tPmRhdGEtPnNldC5kb2gpCisgIGlmKGNvbm4tPmJpdHMuZG9oKQogICAgIC8qIG5vdGhpbmcgdG8gd2FpdCBmb3IgZHVyaW5nIERPSCByZXNvbHZlLCB0aG9zZSBoYW5kbGVzIGhhdmUgdGhlaXIgb3duCiAgICAgICAgc29ja2V0cyAqLwogICAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwotICByZXR1cm4gQ3VybF9yZXNvbHZlcl9nZXRzb2NrKGNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgIHJldHVybiBDdXJsX3Jlc29sdmVyX2dldHNvY2soY29ubiwgc29ja3MpOwogI2Vsc2UKICAgKHZvaWQpY29ubjsKICAgKHZvaWQpc29ja3M7Ci0gICh2b2lkKW51bXNvY2tzOwogICByZXR1cm4gR0VUU09DS19CTEFOSzsKICNlbmRpZgogfQpAQCAtMTA2MSwxMCArMTEwMSwxMiBAQAogCiAgIHJlc3VsdCA9IEN1cmxfc2V0dXBfY29ubihjb25uLCBwcm90b2NvbF9kb25lKTsKIAotICBpZihyZXN1bHQpCi0gICAgLyogV2UncmUgbm90IGFsbG93ZWQgdG8gcmV0dXJuIGZhaWx1cmUgd2l0aCBtZW1vcnkgbGVmdCBhbGxvY2F0ZWQKLSAgICAgICBpbiB0aGUgY29ubmVjdGRhdGEgc3RydWN0LCBmcmVlIHRob3NlIGhlcmUgKi8KLSAgICBDdXJsX2Rpc2Nvbm5lY3QoY29ubi0+ZGF0YSwgY29ubiwgVFJVRSk7IC8qIGNsb3NlIHRoZSBjb25uZWN0aW9uICovCi0KKyAgaWYocmVzdWx0KSB7CisgICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgICAgREVCVUdBU1NFUlQoZGF0YSk7CisgICAgQ3VybF9kZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CisgICAgQ3VybF9jb25uY2FjaGVfcmVtb3ZlX2Nvbm4oZGF0YSwgY29ubiwgVFJVRSk7CisgICAgQ3VybF9kaXNjb25uZWN0KGRhdGEsIGNvbm4sIFRSVUUpOworICB9CiAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5oCmluZGV4IDlkYzBkNWEuLjM3NGIwNmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlICJjdXJsX2FkZHJpbmZvLmgiCisjaW5jbHVkZSAidGltZXZhbC5oIiAvKiBmb3IgdGltZWRpZmZfdCAqLwogI2luY2x1ZGUgImFzeW4uaCIKIAogI2lmZGVmIEhBVkVfU0VUSk1QX0gKQEAgLTYxLDEwICs2Miw5IEBACiAgKiBSZXR1cm5zIGEgc3RydWN0IGN1cmxfaGFzaCBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqLwogc3RydWN0IGN1cmxfaGFzaCAqQ3VybF9nbG9iYWxfaG9zdF9jYWNoZV9pbml0KHZvaWQpOwotdm9pZCBDdXJsX2dsb2JhbF9ob3N0X2NhY2hlX2R0b3Iodm9pZCk7CiAKIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSB7Ci0gIEN1cmxfYWRkcmluZm8gKmFkZHI7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyOwogICAvKiB0aW1lc3RhbXAgPT0gMCAtLSBDVVJMT1BUX1JFU09MVkUgZW50cnksIGRvZXNuJ3QgdGltZW91dCAqLwogICB0aW1lX3QgdGltZXN0YW1wOwogICAvKiB1c2UtY291bnRlciwgdXNlIEN1cmxfcmVzb2x2X3VubG9jayB0byByZWxlYXNlIHJlZmVyZW5jZSAqLwpAQCAtNzksMjYgKzc5LDI5IEBACiAgKiB1c2UsIG9yIHdlJ2xsIGxlYWsgbWVtb3J5IQogICovCiAvKiByZXR1cm4gY29kZXMgKi8KLSNkZWZpbmUgQ1VSTFJFU09MVl9USU1FRE9VVCAtMgotI2RlZmluZSBDVVJMUkVTT0xWX0VSUk9SICAgIC0xCi0jZGVmaW5lIENVUkxSRVNPTFZfUkVTT0xWRUQgIDAKLSNkZWZpbmUgQ1VSTFJFU09MVl9QRU5ESU5HICAgMQotaW50IEN1cmxfcmVzb2x2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICBib29sIGFsbG93RE9ILAotICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmRuc2VudHJ5KTsKLWludCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZW91dG1zKTsKK2VudW0gcmVzb2x2ZV90IHsKKyAgQ1VSTFJFU09MVl9USU1FRE9VVCA9IC0yLAorICBDVVJMUkVTT0xWX0VSUk9SICAgID0gLTEsCisgIENVUkxSRVNPTFZfUkVTT0xWRUQgPSAgMCwKKyAgQ1VSTFJFU09MVl9QRU5ESU5HICA9ICAxCit9OworZW51bSByZXNvbHZlX3QgQ3VybF9yZXNvbHYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dET0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKipkbnNlbnRyeSk7CitlbnVtIHJlc29sdmVfdCBDdXJsX3Jlc29sdl90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKipkbnNlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRpZmZfdCB0aW1lb3V0bXMpOwogCiAjaWZkZWYgQ1VSTFJFU19JUFY2CiAvKgogICogQ3VybF9pcHY2d29ya3MoKSByZXR1cm5zIFRSVUUgaWYgSVB2NiBzZWVtcyB0byB3b3JrLgogICovCi1ib29sIEN1cmxfaXB2NndvcmtzKHZvaWQpOworYm9vbCBDdXJsX2lwdjZ3b3JrcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogI2Vsc2UKLSNkZWZpbmUgQ3VybF9pcHY2d29ya3MoKSBGQUxTRQorI2RlZmluZSBDdXJsX2lwdjZ3b3Jrcyh4KSBGQUxTRQogI2VuZGlmCiAKIC8qCkBAIC0xMTQsMTkgKzExNywxNiBAQAogICogbmFtZSByZXNvbHZlIGxheWVycyAoc2VsZWN0ZWQgYXQgYnVpbGQtdGltZSkuIFRoZXkgYWxsIHRha2UgdGhpcyBzYW1lIHNldAogICogb2YgYXJndW1lbnRzCiAgKi8KLUN1cmxfYWRkcmluZm8gKkN1cmxfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApOwogCiAKIC8qIHVubG9jayBhIHByZXZpb3VzbHkgcmVzb2x2ZWQgZG5zIGVudHJ5ICovCiB2b2lkIEN1cmxfcmVzb2x2X3VubG9jayhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnMpOwogCi0vKiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHk6ICovCi12b2lkIEN1cmxfc2Nhbl9jYWNoZV91c2VkKHZvaWQgKnVzZXIsIHZvaWQgKnB0cik7Ci0KIC8qIGluaXQgYSBuZXcgZG5zIGNhY2hlIGFuZCByZXR1cm4gc3VjY2VzcyAqLwogaW50IEN1cmxfbWtfZG5zY2FjaGUoc3RydWN0IGN1cmxfaGFzaCAqaGFzaCk7CiAKQEAgLTEzNCw3ICsxMzQsNyBAQAogdm9pZCBDdXJsX2hvc3RjYWNoZV9wcnVuZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIAogLyogUmV0dXJuICMgb2YgYWRkcmVzc2VzIGluIGEgQ3VybF9hZGRyaW5mbyBzdHJ1Y3QgKi8KLWludCBDdXJsX251bV9hZGRyZXNzZXMoY29uc3QgQ3VybF9hZGRyaW5mbyAqYWRkcik7CitpbnQgQ3VybF9udW1fYWRkcmVzc2VzKGNvbnN0IHN0cnVjdCBDdXJsX2FkZHJpbmZvICphZGRyKTsKIAogI2lmIGRlZmluZWQoQ1VSTERFQlVHKSAmJiBkZWZpbmVkKEhBVkVfR0VUTkFNRUlORk8pCiBpbnQgY3VybF9kb2dldG5hbWVpbmZvKEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc2EsCkBAIC0xNDYsNyArMTQ2LDcgQEAKICNlbmRpZgogCiAvKiBJUHY0IHRocmVhZHNhZmUgcmVzb2x2ZSBmdW5jdGlvbiB1c2VkIGZvciBzeW5jaCBhbmQgYXN5bmNoIGJ1aWxkcyAqLwotQ3VybF9hZGRyaW5mbyAqQ3VybF9pcHY0X3Jlc29sdmVfcihjb25zdCBjaGFyICpob3N0bmFtZSwgaW50IHBvcnQpOworc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfaXB2NF9yZXNvbHZlX3IoY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0KTsKIAogQ1VSTGNvZGUgQ3VybF9vbmNlX3Jlc29sdmVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqcHJvdG9jb2xfY29ubmVjdCk7CiAKQEAgLTE1OCwxNSArMTU4LDE1IEBACiAgKi8KIENVUkxjb2RlIEN1cmxfYWRkcmluZm9fY2FsbGJhY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2FkZHJpbmZvICphaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSk7CiAKIC8qCiAgKiBDdXJsX3ByaW50YWJsZV9hZGRyZXNzKCkgcmV0dXJucyBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoZSAxc3QgYWRkcmVzcwogICogZ2l2ZW4gaW4gdGhlICdpcCcgYXJndW1lbnQuIFRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGJ1ZiB0aGF0IGlzCiAgKiBidWZzaXplIGJ5dGVzIGJpZy4KICAqLwotY29uc3QgY2hhciAqQ3VybF9wcmludGFibGVfYWRkcmVzcyhjb25zdCBDdXJsX2FkZHJpbmZvICppcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSk7Cit2b2lkIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29uc3Qgc3RydWN0IEN1cmxfYWRkcmluZm8gKmlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpOwogCiAvKgogICogQ3VybF9mZXRjaF9hZGRyKCkgZmV0Y2hlcyBhICdDdXJsX2Ruc19lbnRyeScgYWxyZWFkeSBpbiB0aGUgRE5TIGNhY2hlLgpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgKiBSZXR1cm5zIHRoZSBDdXJsX2Ruc19lbnRyeSBlbnRyeSBwb2ludGVyIG9yIE5VTEwgaWYgdGhlIHN0b3JhZ2UgZmFpbGVkLgogICovCiBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKgotQ3VybF9jYWNoZV9hZGRyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIEN1cmxfYWRkcmluZm8gKmFkZHIsCitDdXJsX2NhY2hlX2FkZHIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFkZHIsCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0KTsKIAogI2lmbmRlZiBJTkFERFJfTk9ORQpAQCAtMjM3LDExICsyMzcsNiBAQAogdm9pZCBDdXJsX2hvc3RjYWNoZV9jbGVhbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBzdHJ1Y3QgY3VybF9oYXNoICpoYXNoKTsKIAogLyoKLSAqIERlc3Ryb3kgdGhlIGhvc3RjYWNoZSBvZiB0aGlzIGhhbmRsZS4KLSAqLwotdm9pZCBDdXJsX2hvc3RjYWNoZV9kZXN0cm95KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotCi0vKgogICogUG9wdWxhdGUgdGhlIGNhY2hlIHdpdGggc3BlY2lmaWVkIGVudHJpZXMgZnJvbSBDVVJMT1BUX1JFU09MVkUuCiAgKi8KIENVUkxjb2RlIEN1cmxfbG9hZGhvc3RwYWlycyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKQEAgLTI0OSw3ICsyNDQsNiBAQAogQ1VSTGNvZGUgQ3VybF9yZXNvbHZfY2hlY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zKTsKIGludCBDdXJsX3Jlc29sdl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hPU1RJUF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXA0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXA0LmMKaW5kZXggZTZiYTcxMC4uZWFlOTQxNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwNC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcDQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTIsNyArNTIsNiBAQAogI2luY2x1ZGUgInNoYXJlLmgiCiAjaW5jbHVkZSAic3RyZXJyb3IuaCIKICNpbmNsdWRlICJ1cmwuaCIKLSNpbmNsdWRlICJpbmV0X3B0b24uaCIKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC04OSwxMiArODgsMTIgQEAKICAqIGZsYXZvdXJzIGhhdmUgdGhyZWFkLXNhZmUgdmVyc2lvbnMgb2YgdGhlIHBsYWluIGdldGhvc3RieW5hbWUoKSBldGMuCiAgKgogICovCi1DdXJsX2FkZHJpbmZvICpDdXJsX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCiB7Ci0gIEN1cmxfYWRkcmluZm8gKmFpID0gTlVMTDsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKmFpID0gTlVMTDsKIAogI2lmZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKICAgKHZvaWQpY29ubjsKQEAgLTEyMCwzNiArMTE5LDMwIEBACiAgKiBpbXBseWluZyB0aGF0IG9ubHkgdGhyZWFkc2FmZSBjb2RlIGFuZCBmdW5jdGlvbiBjYWxscyBtYXkgYmUgdXNlZC4KICAqCiAgKi8KLUN1cmxfYWRkcmluZm8gKkN1cmxfaXB2NF9yZXNvbHZlX3IoY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0KQorc3RydWN0IEN1cmxfYWRkcmluZm8gKkN1cmxfaXB2NF9yZXNvbHZlX3IoY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCkKIHsKICNpZiAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUpICYmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1JfMykKICAgaW50IHJlczsKICNlbmRpZgotICBDdXJsX2FkZHJpbmZvICphaSA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSA9IE5VTEw7CiAgIHN0cnVjdCBob3N0ZW50ICpoID0gTlVMTDsKLSAgc3RydWN0IGluX2FkZHIgaW47CiAgIHN0cnVjdCBob3N0ZW50ICpidWYgPSBOVUxMOwogCi0gIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmaW4pID4gMCkKLSAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCi0gICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKLQogI2lmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFKQotICBlbHNlIHsKLSAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7Ci0gICAgY2hhciBzYnVmWzEyXTsKLSAgICBjaGFyICpzYnVmcHRyID0gTlVMTDsKKyAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOworICBjaGFyIHNidWZbMTJdOworICBjaGFyICpzYnVmcHRyID0gTlVMTDsKIAotICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwotICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX0lORVQ7Ci0gICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKLSAgICBpZihwb3J0KSB7Ci0gICAgICBtc25wcmludGYoc2J1Ziwgc2l6ZW9mKHNidWYpLCAiJWQiLCBwb3J0KTsKLSAgICAgIHNidWZwdHIgPSBzYnVmOwotICAgIH0KKyAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX0lORVQ7CisgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgIGlmKHBvcnQpIHsKKyAgICBtc25wcmludGYoc2J1Ziwgc2l6ZW9mKHNidWYpLCAiJWQiLCBwb3J0KTsKKyAgICBzYnVmcHRyID0gc2J1ZjsKKyAgfQogCi0gICAgKHZvaWQpQ3VybF9nZXRhZGRyaW5mb19leChob3N0bmFtZSwgc2J1ZnB0ciwgJmhpbnRzLCAmYWkpOworICAodm9pZClDdXJsX2dldGFkZHJpbmZvX2V4KGhvc3RuYW1lLCBzYnVmcHRyLCAmaGludHMsICZhaSk7CiAKICNlbGlmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1IpCiAgIC8qCkBAIC0xNTcsMTQ0ICsxNTAsMTQxIEBACiAgICAqIFNpbmNlIHRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgaXQsIHRoZSBmb2xsb3dpbmcgY29kZSBpcwogICAgKiBzb21ld2hhdCAjaWZkZWYtcmlkZGVuLgogICAgKi8KLSAgZWxzZSB7Ci0gICAgaW50IGhfZXJybm9wOworICBpbnQgaF9lcnJub3A7CiAKLSAgICBidWYgPSBjYWxsb2MoMSwgQ1VSTF9IT1NURU5UX1NJWkUpOwotICAgIGlmKCFidWYpCi0gICAgICByZXR1cm4gTlVMTDsgLyogbWFqb3IgZmFpbHVyZSAqLwotICAgIC8qCi0gICAgICogVGhlIGNsZWFyaW5nIG9mIHRoZSBidWZmZXIgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGdldGhvc3RieW5hbWVfciBidWcgaW4KLSAgICAgKiBxbnggbnRvIGFuZCBpdCBpcyBhbHNvIF9yZXF1aXJlZF8gZm9yIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG9uIHNvbWUKLSAgICAgKiBwbGF0Zm9ybXMuCi0gICAgICovCisgIGJ1ZiA9IGNhbGxvYygxLCBDVVJMX0hPU1RFTlRfU0laRSk7CisgIGlmKCFidWYpCisgICAgcmV0dXJuIE5VTEw7IC8qIG1ham9yIGZhaWx1cmUgKi8KKyAgLyoKKyAgICogVGhlIGNsZWFyaW5nIG9mIHRoZSBidWZmZXIgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGdldGhvc3RieW5hbWVfciBidWcgaW4KKyAgICogcW54IG50byBhbmQgaXQgaXMgYWxzbyBfcmVxdWlyZWRfIGZvciBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBvbiBzb21lCisgICAqIHBsYXRmb3Jtcy4KKyAgICovCiAKICNpZiBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzUpCi0gICAgLyogU29sYXJpcywgSVJJWCBhbmQgbW9yZSAqLwotICAgIGggPSBnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnQgKilidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWJ1ZiArIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICBDVVJMX0hPU1RFTlRfU0laRSAtIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAmaF9lcnJub3ApOworICAvKiBTb2xhcmlzLCBJUklYIGFuZCBtb3JlICovCisgIGggPSBnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50ICopYnVmLAorICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopYnVmICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICBDVVJMX0hPU1RFTlRfU0laRSAtIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCisgICAgICAgICAgICAgICAgICAgICAgJmhfZXJybm9wKTsKIAotICAgIC8qIElmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLCBpdCByZXR1cm5zIE5VTEwgYW5kIHNldHMgZXJybm8gdG8KLSAgICAgKiBFUkFOR0UuIFRoZSBlcnJubyBpcyB0aHJlYWQgc2FmZSBpZiB0aGlzIGlzIGNvbXBpbGVkIHdpdGgKLSAgICAgKiAtRF9SRUVOVFJBTlQgYXMgdGhlbiB0aGUgJ2Vycm5vJyB2YXJpYWJsZSBpcyBhIG1hY3JvIGRlZmluZWQgdG8gZ2V0Ci0gICAgICogdXNlZCBwcm9wZXJseSBmb3IgdGhyZWFkcy4KLSAgICAgKi8KKyAgLyogSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIGl0IHJldHVybnMgTlVMTCBhbmQgc2V0cyBlcnJubyB0bworICAgKiBFUkFOR0UuIFRoZSBlcnJubyBpcyB0aHJlYWQgc2FmZSBpZiB0aGlzIGlzIGNvbXBpbGVkIHdpdGgKKyAgICogLURfUkVFTlRSQU5UIGFzIHRoZW4gdGhlICdlcnJubycgdmFyaWFibGUgaXMgYSBtYWNybyBkZWZpbmVkIHRvIGdldAorICAgKiB1c2VkIHByb3Blcmx5IGZvciB0aHJlYWRzLgorICAgKi8KIAotICAgIGlmKGgpIHsKLSAgICAgIDsKLSAgICB9Ci0gICAgZWxzZQotI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWU5BTUVfUl82KQotICAgIC8qIExpbnV4ICovCi0KLSAgICAodm9pZClnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnQgKilidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWJ1ZiArIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICBDVVJMX0hPU1RFTlRfU0laRSAtIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAmaCwgLyogRElGRkVSRU5DRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgJmhfZXJybm9wKTsKLSAgICAvKiBSZWRoYXQgOCwgdXNpbmcgZ2xpYmMgMi4yLjkzIGNoYW5nZWQgdGhlIGJlaGF2aW9yLiBOb3cgYWxsIG9mIGEKLSAgICAgKiBzdWRkZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIEVBR0FJTiBpZiB0aGUgZ2l2ZW4gYnVmZmVyIHNpemUgaXMgdG9vCi0gICAgICogc21hbGwuIFByZXZpb3VzIHZlcnNpb25zIGFyZSBrbm93biB0byByZXR1cm4gRVJBTkdFIGZvciB0aGUgc2FtZQotICAgICAqIHByb2JsZW0uCi0gICAgICoKLSAgICAgKiBUaGlzIHdvdWxkbid0IGJlIHN1Y2ggYSBiaWcgcHJvYmxlbSBpZiBvbGRlciB2ZXJzaW9ucyB3b3VsZG4ndAotICAgICAqIHNvbWV0aW1lcyByZXR1cm4gRUFHQUlOIG9uIGEgY29tbW9uIGZhaWx1cmUgY2FzZS4gQWxhcywgd2UgY2FuJ3QKLSAgICAgKiBhc3N1bWUgdGhhdCBFQUdBSU4gKm9yKiBFUkFOR0UgbWVhbnMgRVJBTkdFIGZvciBhbnkgZ2l2ZW4gdmVyc2lvbiBvZgotICAgICAqIGdsaWJjLgotICAgICAqCi0gICAgICogRm9yIG5vdywgd2UgZG8gdGhhdCBhbmQgdGh1cyB3ZSBtYXkgY2FsbCB0aGUgZnVuY3Rpb24gcmVwZWF0ZWRseSBhbmQKLSAgICAgKiBmYWlsIGZvciBvbGRlciBnbGliYyB2ZXJzaW9ucyB0aGF0IHJldHVybiBFQUdBSU4sIHVudGlsIHdlIHJ1biBvdXQgb2YKLSAgICAgKiBidWZmZXIgc2l6ZSAoc3RlcF9zaXplIGdyb3dzIGJleW9uZCBDVVJMX0hPU1RFTlRfU0laRSkuCi0gICAgICoKLSAgICAgKiBJZiBhbnlvbmUgaGFzIGEgYmV0dGVyIGZpeCwgcGxlYXNlIHRlbGwgdXMhCi0gICAgICoKLSAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICoKLSAgICAgKiBPbiBPY3RvYmVyIDIzcmQgMjAwMywgRGFuIEMgZHVnIHVwIG1vcmUgZGV0YWlscyBvbiB0aGUgbXlzdGVyaWVzIG9mCi0gICAgICogZ2V0aG9zdGJ5bmFtZV9yKCkgaW4gZ2xpYmM6Ci0gICAgICoKLSAgICAgKiBJbiBnbGliYyAyLjIuNSB0aGUgaW50ZXJmYWNlIGlzIGRpZmZlcmVudCAodGhpcyBoYXMgYWxzbyBiZWVuCi0gICAgICogZGlzY292ZXJlZCBpbiBnbGliYyAyLjEuMS02IGFzIHNoaXBwZWQgYnkgUmVkaGF0IDYpLiBXaGF0IEkgY2FuJ3QKLSAgICAgKiBleHBsYWluLCBpcyB0aGF0IHRlc3RzIHBlcmZvcm1lZCBvbiBnbGliYyAyLjIuNC0zNCBhbmQgMi4yLjQtMzIKLSAgICAgKiAoc2hpcHBlZC91cGdyYWRlZCBieSBSZWRoYXQgNy4yKSBkb24ndCBzaG93IHRoaXMgYmVoYXZpb3IhCi0gICAgICoKLSAgICAgKiBJbiB0aGlzICJidWdneSIgdmVyc2lvbiwgdGhlIHJldHVybiBjb2RlIGlzIC0xIG9uIGVycm9yIGFuZCAnZXJybm8nCi0gICAgICogaXMgc2V0IHRvIHRoZSBFUkFOR0Ugb3IgRUFHQUlOIGNvZGUuIE5vdGUgdGhhdCAnZXJybm8nIGlzIG5vdCBhCi0gICAgICogdGhyZWFkLXNhZmUgdmFyaWFibGUuCi0gICAgICovCi0KLSAgICBpZighaCkgLyogZmFpbHVyZSAqLwotI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWU5BTUVfUl8zKQotICAgIC8qIEFJWCwgRGlnaXRhbCBVbml4L1RydTY0LCBIUFVYIDEwLCBtb3JlPyAqLwotCi0gICAgLyogRm9yIEFJWCA0LjMgb3IgbGF0ZXIsIHdlIGRvbid0IHVzZSBnZXRob3N0YnluYW1lX3IoKSBhdCBhbGwsIGJlY2F1c2Ugb2YKLSAgICAgKiB0aGUgcGxhaW4gZmFjdCB0aGF0IGl0IGRvZXMgbm90IHJldHVybiB1bmlxdWUgZnVsbCBidWZmZXJzIG9uIGVhY2gKLSAgICAgKiBjYWxsLCBidXQgaW5zdGVhZCBzZXZlcmFsIG9mIHRoZSBwb2ludGVycyBpbiB0aGUgaG9zdGVudCBzdHJ1Y3RzIHdpbGwKLSAgICAgKiBwb2ludCB0byB0aGUgc2FtZSBhY3R1YWwgZGF0YSEgVGhpcyBoYXZlIHRoZSB1bmZvcnR1bmF0ZSBkb3duLXNpZGUgdGhhdAotICAgICAqIG91ciBjYWNoaW5nIHN5c3RlbSBicmVha3MgZG93biBob3JyaWJseS4gTHVja2lseSBmb3IgdXMgdGhvdWdoLCBBSVggNC4zCi0gICAgICogYW5kIG1vcmUgcmVjZW50IHZlcnNpb25zIGhhdmUgYSAiY29tcGxldGVseSB0aHJlYWQtc2FmZSJbKl0gbGliYyB3aGVyZQotICAgICAqIGFsbCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gdGhyZWFkLXNwZWNpZmljIG1lbW9yeSBhcmVhcyBtYWtpbmcgY2FsbHMgdG8KLSAgICAgKiB0aGUgcGxhaW4gb2xkIGdldGhvc3RieW5hbWUoKSB3b3JrIGZpbmUgZXZlbiBmb3IgbXVsdGktdGhyZWFkZWQKLSAgICAgKiBwcm9ncmFtcy4KLSAgICAgKgotICAgICAqIFRoaXMgQUlYIDQuMyBvciBsYXRlciBkZXRlY3Rpb24gaXMgYWxsIG1hZGUgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCi0gICAgICoKLSAgICAgKiBUcm9lbHMgV2Fsc3RlZCBIYW5zZW4gaGVscGVkIHVzIHdvcmsgdGhpcyBvdXQgb24gTWFyY2ggM3JkLCAyMDAzLgotICAgICAqCi0gICAgICogWypdID0gbXVjaCBsYXRlciB3ZSd2ZSBmb3VuZCBvdXQgdGhhdCBpdCBpc24ndCBhdCBhbGwgImNvbXBsZXRlbHkKLSAgICAgKiB0aHJlYWQtc2FmZSIsIGJ1dCBhdCBsZWFzdCB0aGUgZ2V0aG9zdGJ5bmFtZSgpIGZ1bmN0aW9uIGlzLgotICAgICAqLwotCi0gICAgaWYoQ1VSTF9IT1NURU5UX1NJWkUgPj0KLSAgICAgICAoc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSArIHNpemVvZihzdHJ1Y3QgaG9zdGVudF9kYXRhKSkpIHsKLQotICAgICAgLyogQXVndXN0IDIybmQsIDIwMDA6IEFsYmVydCBDaGluLUEtWW91bmcgYnJvdWdodCBhbiB1cGRhdGVkIHZlcnNpb24KLSAgICAgICAqIHRoYXQgc2hvdWxkIHdvcmshIFNlcHRlbWJlciAyMDogUmljaGFyZCBQcmVzY290dCB3b3JrZWQgb24gdGhlIGJ1ZmZlcgotICAgICAgICogc2l6ZSBkaWxlbW1hLgotICAgICAgICovCi0KLSAgICAgIHJlcyA9IGdldGhvc3RieW5hbWVfcihob3N0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnQgKilidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50X2RhdGEgKikoKGNoYXIgKilidWYgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdGVudCkpKTsKLSAgICAgIGhfZXJybm9wID0gU09DS0VSUk5POyAvKiB3ZSBkb24ndCBkZWFsIHdpdGggdGhpcywgYnV0IHNldCBpdCBhbnl3YXkgKi8KLSAgICB9Ci0gICAgZWxzZQotICAgICAgcmVzID0gLTE7IC8qIGZhaWx1cmUsIHRvbyBzbWFsbGlzaCBidWZmZXIgc2l6ZSAqLwotCi0gICAgaWYoIXJlcykgeyAvKiBzdWNjZXNzICovCi0KLSAgICAgIGggPSBidWY7IC8qIHJlc3VsdCBleHBlY3RlZCBpbiBoICovCi0KLSAgICAgIC8qIFRoaXMgaXMgdGhlIHdvcnN0IGtpbmQgb2YgdGhlIGRpZmZlcmVudCBnZXRob3N0YnluYW1lX3IoKSBpbnRlcmZhY2VzLgotICAgICAgICogU2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgYmlnIGJ1ZmZlciB0aGlzIHBhcnRpY3VsYXIgbG9va3VwIHJlcXVpcmVkLAotICAgICAgICogd2UgY2FuJ3QgcmVhbGxvYyBkb3duIHRoZSBodWdlIGFsbG9jIHdpdGhvdXQgZG9pbmcgY2xvc2VyIGFuYWx5c2lzIG9mCi0gICAgICAgKiB0aGUgcmV0dXJuZWQgZGF0YS4gVGh1cywgd2UgYWx3YXlzIHVzZSBDVVJMX0hPU1RFTlRfU0laRSBmb3IgZXZlcnkKLSAgICAgICAqIG5hbWUgbG9va3VwLiBGaXhpbmcgdGhpcyB3b3VsZCByZXF1aXJlIGFuIGV4dHJhIG1hbGxvYygpIGFuZCB0aGVuCi0gICAgICAgKiBjYWxsaW5nIEN1cmxfYWRkcmluZm9fY29weSgpIHRoYXQgc3Vic2VxdWVudCByZWFsbG9jKClzIGRvd24gdGhlIG5ldwotICAgICAgICogbWVtb3J5IGFyZWEgdG8gdGhlIGFjdHVhbGx5IHVzZWQgYW1vdW50LgotICAgICAgICovCi0gICAgfQotICAgIGVsc2UKLSNlbmRpZiAvKiBIQVZFXy4uLkJZTkFNRV9SXzUgfHwgSEFWRV8uLi5CWU5BTUVfUl82IHx8IEhBVkVfLi4uQllOQU1FX1JfMyAqLwotICAgIHsKLSAgICAgIGggPSBOVUxMOyAvKiBzZXQgcmV0dXJuIGNvZGUgdG8gTlVMTCAqLwotICAgICAgZnJlZShidWYpOwotICAgIH0KLSNlbHNlIC8qIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSB8fCBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLwotICAgIC8qCi0gICAgICogSGVyZSBpcyBjb2RlIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlIGEgdGhyZWFkIHNhZmUKLSAgICAgKiBnZXRhZGRyaW5mbygpIG5vciBnZXRob3N0YnluYW1lX3IoKSBmdW5jdGlvbiBvciBmb3Igd2hpY2gKLSAgICAgKiBnZXRob3N0YnluYW1lKCkgaXMgdGhlIHByZWZlcnJlZCBvbmUuCi0gICAgICovCi0gIGVsc2UgewotICAgIGggPSBnZXRob3N0YnluYW1lKCh2b2lkICopaG9zdG5hbWUpOwotI2VuZGlmIC8qIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSB8fCBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLworICBpZihoKSB7CisgICAgOwogICB9CisgIGVsc2UKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1JfNikKKyAgLyogTGludXggKi8KKworICAodm9pZClnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50ICopYnVmLAorICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopYnVmICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICBDVVJMX0hPU1RFTlRfU0laRSAtIHNpemVvZihzdHJ1Y3QgaG9zdGVudCksCisgICAgICAgICAgICAgICAgICAgICAgJmgsIC8qIERJRkZFUkVOQ0UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAmaF9lcnJub3ApOworICAvKiBSZWRoYXQgOCwgdXNpbmcgZ2xpYmMgMi4yLjkzIGNoYW5nZWQgdGhlIGJlaGF2aW9yLiBOb3cgYWxsIG9mIGEKKyAgICogc3VkZGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBFQUdBSU4gaWYgdGhlIGdpdmVuIGJ1ZmZlciBzaXplIGlzIHRvbworICAgKiBzbWFsbC4gUHJldmlvdXMgdmVyc2lvbnMgYXJlIGtub3duIHRvIHJldHVybiBFUkFOR0UgZm9yIHRoZSBzYW1lCisgICAqIHByb2JsZW0uCisgICAqCisgICAqIFRoaXMgd291bGRuJ3QgYmUgc3VjaCBhIGJpZyBwcm9ibGVtIGlmIG9sZGVyIHZlcnNpb25zIHdvdWxkbid0CisgICAqIHNvbWV0aW1lcyByZXR1cm4gRUFHQUlOIG9uIGEgY29tbW9uIGZhaWx1cmUgY2FzZS4gQWxhcywgd2UgY2FuJ3QKKyAgICogYXNzdW1lIHRoYXQgRUFHQUlOICpvciogRVJBTkdFIG1lYW5zIEVSQU5HRSBmb3IgYW55IGdpdmVuIHZlcnNpb24gb2YKKyAgICogZ2xpYmMuCisgICAqCisgICAqIEZvciBub3csIHdlIGRvIHRoYXQgYW5kIHRodXMgd2UgbWF5IGNhbGwgdGhlIGZ1bmN0aW9uIHJlcGVhdGVkbHkgYW5kCisgICAqIGZhaWwgZm9yIG9sZGVyIGdsaWJjIHZlcnNpb25zIHRoYXQgcmV0dXJuIEVBR0FJTiwgdW50aWwgd2UgcnVuIG91dCBvZgorICAgKiBidWZmZXIgc2l6ZSAoc3RlcF9zaXplIGdyb3dzIGJleW9uZCBDVVJMX0hPU1RFTlRfU0laRSkuCisgICAqCisgICAqIElmIGFueW9uZSBoYXMgYSBiZXR0ZXIgZml4LCBwbGVhc2UgdGVsbCB1cyEKKyAgICoKKyAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKgorICAgKiBPbiBPY3RvYmVyIDIzcmQgMjAwMywgRGFuIEMgZHVnIHVwIG1vcmUgZGV0YWlscyBvbiB0aGUgbXlzdGVyaWVzIG9mCisgICAqIGdldGhvc3RieW5hbWVfcigpIGluIGdsaWJjOgorICAgKgorICAgKiBJbiBnbGliYyAyLjIuNSB0aGUgaW50ZXJmYWNlIGlzIGRpZmZlcmVudCAodGhpcyBoYXMgYWxzbyBiZWVuCisgICAqIGRpc2NvdmVyZWQgaW4gZ2xpYmMgMi4xLjEtNiBhcyBzaGlwcGVkIGJ5IFJlZGhhdCA2KS4gV2hhdCBJIGNhbid0CisgICAqIGV4cGxhaW4sIGlzIHRoYXQgdGVzdHMgcGVyZm9ybWVkIG9uIGdsaWJjIDIuMi40LTM0IGFuZCAyLjIuNC0zMgorICAgKiAoc2hpcHBlZC91cGdyYWRlZCBieSBSZWRoYXQgNy4yKSBkb24ndCBzaG93IHRoaXMgYmVoYXZpb3IhCisgICAqCisgICAqIEluIHRoaXMgImJ1Z2d5IiB2ZXJzaW9uLCB0aGUgcmV0dXJuIGNvZGUgaXMgLTEgb24gZXJyb3IgYW5kICdlcnJubycKKyAgICogaXMgc2V0IHRvIHRoZSBFUkFOR0Ugb3IgRUFHQUlOIGNvZGUuIE5vdGUgdGhhdCAnZXJybm8nIGlzIG5vdCBhCisgICAqIHRocmVhZC1zYWZlIHZhcmlhYmxlLgorICAgKi8KKworICBpZighaCkgLyogZmFpbHVyZSAqLworI2VsaWYgZGVmaW5lZChIQVZFX0dFVEhPU1RCWU5BTUVfUl8zKQorICAvKiBBSVgsIERpZ2l0YWwgVW5peC9UcnU2NCwgSFBVWCAxMCwgbW9yZT8gKi8KKworICAvKiBGb3IgQUlYIDQuMyBvciBsYXRlciwgd2UgZG9uJ3QgdXNlIGdldGhvc3RieW5hbWVfcigpIGF0IGFsbCwgYmVjYXVzZSBvZgorICAgKiB0aGUgcGxhaW4gZmFjdCB0aGF0IGl0IGRvZXMgbm90IHJldHVybiB1bmlxdWUgZnVsbCBidWZmZXJzIG9uIGVhY2gKKyAgICogY2FsbCwgYnV0IGluc3RlYWQgc2V2ZXJhbCBvZiB0aGUgcG9pbnRlcnMgaW4gdGhlIGhvc3RlbnQgc3RydWN0cyB3aWxsCisgICAqIHBvaW50IHRvIHRoZSBzYW1lIGFjdHVhbCBkYXRhISBUaGlzIGhhdmUgdGhlIHVuZm9ydHVuYXRlIGRvd24tc2lkZSB0aGF0CisgICAqIG91ciBjYWNoaW5nIHN5c3RlbSBicmVha3MgZG93biBob3JyaWJseS4gTHVja2lseSBmb3IgdXMgdGhvdWdoLCBBSVggNC4zCisgICAqIGFuZCBtb3JlIHJlY2VudCB2ZXJzaW9ucyBoYXZlIGEgImNvbXBsZXRlbHkgdGhyZWFkLXNhZmUiWypdIGxpYmMgd2hlcmUKKyAgICogYWxsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aHJlYWQtc3BlY2lmaWMgbWVtb3J5IGFyZWFzIG1ha2luZyBjYWxscyB0bworICAgKiB0aGUgcGxhaW4gb2xkIGdldGhvc3RieW5hbWUoKSB3b3JrIGZpbmUgZXZlbiBmb3IgbXVsdGktdGhyZWFkZWQKKyAgICogcHJvZ3JhbXMuCisgICAqCisgICAqIFRoaXMgQUlYIDQuMyBvciBsYXRlciBkZXRlY3Rpb24gaXMgYWxsIG1hZGUgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisgICAqCisgICAqIFRyb2VscyBXYWxzdGVkIEhhbnNlbiBoZWxwZWQgdXMgd29yayB0aGlzIG91dCBvbiBNYXJjaCAzcmQsIDIwMDMuCisgICAqCisgICAqIFsqXSA9IG11Y2ggbGF0ZXIgd2UndmUgZm91bmQgb3V0IHRoYXQgaXQgaXNuJ3QgYXQgYWxsICJjb21wbGV0ZWx5CisgICAqIHRocmVhZC1zYWZlIiwgYnV0IGF0IGxlYXN0IHRoZSBnZXRob3N0YnluYW1lKCkgZnVuY3Rpb24gaXMuCisgICAqLworCisgIGlmKENVUkxfSE9TVEVOVF9TSVpFID49CisgICAgIChzaXplb2Yoc3RydWN0IGhvc3RlbnQpICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50X2RhdGEpKSkgeworCisgICAgLyogQXVndXN0IDIybmQsIDIwMDA6IEFsYmVydCBDaGluLUEtWW91bmcgYnJvdWdodCBhbiB1cGRhdGVkIHZlcnNpb24KKyAgICAgKiB0aGF0IHNob3VsZCB3b3JrISBTZXB0ZW1iZXIgMjA6IFJpY2hhcmQgUHJlc2NvdHQgd29ya2VkIG9uIHRoZSBidWZmZXIKKyAgICAgKiBzaXplIGRpbGVtbWEuCisgICAgICovCisKKyAgICByZXMgPSBnZXRob3N0YnluYW1lX3IoaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgaG9zdGVudCAqKWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50X2RhdGEgKikoKGNoYXIgKilidWYgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RlbnQpKSk7CisgICAgaF9lcnJub3AgPSBTT0NLRVJSTk87IC8qIHdlIGRvbid0IGRlYWwgd2l0aCB0aGlzLCBidXQgc2V0IGl0IGFueXdheSAqLworICB9CisgIGVsc2UKKyAgICByZXMgPSAtMTsgLyogZmFpbHVyZSwgdG9vIHNtYWxsaXNoIGJ1ZmZlciBzaXplICovCisKKyAgaWYoIXJlcykgeyAvKiBzdWNjZXNzICovCisKKyAgICBoID0gYnVmOyAvKiByZXN1bHQgZXhwZWN0ZWQgaW4gaCAqLworCisgICAgLyogVGhpcyBpcyB0aGUgd29yc3Qga2luZCBvZiB0aGUgZGlmZmVyZW50IGdldGhvc3RieW5hbWVfcigpIGludGVyZmFjZXMuCisgICAgICogU2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgYmlnIGJ1ZmZlciB0aGlzIHBhcnRpY3VsYXIgbG9va3VwIHJlcXVpcmVkLAorICAgICAqIHdlIGNhbid0IHJlYWxsb2MgZG93biB0aGUgaHVnZSBhbGxvYyB3aXRob3V0IGRvaW5nIGNsb3NlciBhbmFseXNpcyBvZgorICAgICAqIHRoZSByZXR1cm5lZCBkYXRhLiBUaHVzLCB3ZSBhbHdheXMgdXNlIENVUkxfSE9TVEVOVF9TSVpFIGZvciBldmVyeQorICAgICAqIG5hbWUgbG9va3VwLiBGaXhpbmcgdGhpcyB3b3VsZCByZXF1aXJlIGFuIGV4dHJhIG1hbGxvYygpIGFuZCB0aGVuCisgICAgICogY2FsbGluZyBDdXJsX2FkZHJpbmZvX2NvcHkoKSB0aGF0IHN1YnNlcXVlbnQgcmVhbGxvYygpcyBkb3duIHRoZSBuZXcKKyAgICAgKiBtZW1vcnkgYXJlYSB0byB0aGUgYWN0dWFsbHkgdXNlZCBhbW91bnQuCisgICAgICovCisgIH0KKyAgZWxzZQorI2VuZGlmIC8qIEhBVkVfLi4uQllOQU1FX1JfNSB8fCBIQVZFXy4uLkJZTkFNRV9SXzYgfHwgSEFWRV8uLi5CWU5BTUVfUl8zICovCisgIHsKKyAgICBoID0gTlVMTDsgLyogc2V0IHJldHVybiBjb2RlIHRvIE5VTEwgKi8KKyAgICBmcmVlKGJ1Zik7CisgIH0KKyNlbHNlIC8qIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSB8fCBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLworICAvKgorICAgKiBIZXJlIGlzIGNvZGUgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgYSB0aHJlYWQgc2FmZQorICAgKiBnZXRhZGRyaW5mbygpIG5vciBnZXRob3N0YnluYW1lX3IoKSBmdW5jdGlvbiBvciBmb3Igd2hpY2gKKyAgICogZ2V0aG9zdGJ5bmFtZSgpIGlzIHRoZSBwcmVmZXJyZWQgb25lLgorICAgKi8KKyAgaCA9IGdldGhvc3RieW5hbWUoKHZvaWQgKilob3N0bmFtZSk7CisjZW5kaWYgLyogSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIHx8IEhBVkVfR0VUSE9TVEJZTkFNRV9SICovCiAKICAgaWYoaCkgewogICAgIGFpID0gQ3VybF9oZTJhaShoLCBwb3J0KTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcDYuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RpcDYuYwppbmRleCA1NTExZjFhLi4xMTIxNTc1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0aXA2LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdGlwNi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02MiwxMyArNjIsMTkgQEAKIC8qCiAgKiBDdXJsX2lwdjZ3b3JrcygpIHJldHVybnMgVFJVRSBpZiBJUHY2IHNlZW1zIHRvIHdvcmsuCiAgKi8KLWJvb2wgQ3VybF9pcHY2d29ya3Modm9pZCkKK2Jvb2wgQ3VybF9pcHY2d29ya3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICAvKiB0aGUgbmF0dXJlIG9mIG1vc3Qgc3lzdGVtIGlzIHRoYXQgSVB2NiBzdGF0dXMgZG9lc24ndCBjb21lIGFuZCBnbwotICAgICBkdXJpbmcgYSBwcm9ncmFtJ3MgbGlmZXRpbWUgc28gd2Ugb25seSBwcm9iZSB0aGUgZmlyc3QgdGltZSBhbmQgdGhlbiB3ZQotICAgICBoYXZlIHRoZSBpbmZvIGtlcHQgZm9yIGZhc3QgcmUtdXNlICovCi0gIHN0YXRpYyBpbnQgaXB2Nl93b3JrcyA9IC0xOwotICBpZigtMSA9PSBpcHY2X3dvcmtzKSB7CisgIGlmKGNvbm4pIHsKKyAgICAvKiB0aGUgbmF0dXJlIG9mIG1vc3Qgc3lzdGVtIGlzIHRoYXQgSVB2NiBzdGF0dXMgZG9lc24ndCBjb21lIGFuZCBnbworICAgICAgIGR1cmluZyBhIHByb2dyYW0ncyBsaWZldGltZSBzbyB3ZSBvbmx5IHByb2JlIHRoZSBmaXJzdCB0aW1lIGFuZCB0aGVuIHdlCisgICAgICAgaGF2ZSB0aGUgaW5mbyBrZXB0IGZvciBmYXN0IHJlLXVzZSAqLworICAgIERFQlVHQVNTRVJUKGNvbm4pOworICAgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEpOworICAgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEtPm11bHRpKTsKKyAgICByZXR1cm4gY29ubi0+ZGF0YS0+bXVsdGktPmlwdjZfd29ya3M7CisgIH0KKyAgZWxzZSB7CisgICAgaW50IGlwdjZfd29ya3MgPSAtMTsKICAgICAvKiBwcm9iZSB0byBzZWUgaWYgd2UgaGF2ZSBhIHdvcmtpbmcgSVB2NiBzdGFjayAqLwogICAgIGN1cmxfc29ja2V0X3QgcyA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CiAgICAgaWYocyA9PSBDVVJMX1NPQ0tFVF9CQUQpCkBAIC03OCw4ICs4NCw4IEBACiAgICAgICBpcHY2X3dvcmtzID0gMTsKICAgICAgIEN1cmxfY2xvc2Vzb2NrZXQoTlVMTCwgcyk7CiAgICAgfQorICAgIHJldHVybiAoaXB2Nl93b3Jrcz4wKT9UUlVFOkZBTFNFOwogICB9Ci0gIHJldHVybiAoaXB2Nl93b3Jrcz4wKT9UUlVFOkZBTFNFOwogfQogCiAvKgpAQCAtODksNyArOTUsNyBAQAogYm9vbCBDdXJsX2lwdmFsaWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBpZihjb25uLT5pcF92ZXJzaW9uID09IENVUkxfSVBSRVNPTFZFX1Y2KQotICAgIHJldHVybiBDdXJsX2lwdjZ3b3JrcygpOworICAgIHJldHVybiBDdXJsX2lwdjZ3b3Jrcyhjb25uKTsKIAogICByZXR1cm4gVFJVRTsKIH0KQEAgLTk3LDIwICsxMDMsMTYgQEAKICNpZiBkZWZpbmVkKENVUkxSRVNfU1lOQ0gpCiAKICNpZmRlZiBERUJVR19BRERSSU5GTwotc3RhdGljIHZvaWQgZHVtcF9hZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IEN1cmxfYWRkcmluZm8gKmFpKQorc3RhdGljIHZvaWQgZHVtcF9hZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaSkKIHsKICAgcHJpbnRmKCJkdW1wX2FkZHJpbmZvOlxuIik7CiAgIGZvcig7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CiAgICAgY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07CiAgICAgcHJpbnRmKCIgICAgZmFtICUyZCwgQ05BTUUgJXMsICIsCiAgICAgICAgICAgIGFpLT5haV9mYW1pbHksIGFpLT5haV9jYW5vbm5hbWUgPyBhaS0+YWlfY2Fub25uYW1lIDogIjxub25lPiIpOwotICAgIGlmKEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoYWksIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQotICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKLSAgICBlbHNlIHsKLSAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07Ci0gICAgICBwcmludGYoImZhaWxlZDsgJXNcbiIsCi0gICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihTT0NLRVJSTk8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICB9CisgICAgQ3VybF9wcmludGFibGVfYWRkcmVzcyhhaSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKICAgfQogfQogI2Vsc2UKQEAgLTEyNiwxMyArMTI4LDEzIEBACiAgKiBtZW1vcnkgd2UgbmVlZCB0byBmcmVlIGFmdGVyIHVzZS4gVGhhdCBtZW1vcnkgKk1VU1QqIGJlIGZyZWVkIHdpdGgKICAqIEN1cmxfZnJlZWFkZHJpbmZvKCksIG5vdGhpbmcgZWxzZS4KICAqLwotQ3VybF9hZGRyaW5mbyAqQ3VybF9nZXRhZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3N0cnVjdCBDdXJsX2FkZHJpbmZvICpDdXJsX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQogewogICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7Ci0gIEN1cmxfYWRkcmluZm8gKnJlczsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKnJlczsKICAgaW50IGVycm9yOwogICBjaGFyIHNidWZbMTJdOwogICBjaGFyICpzYnVmcHRyID0gTlVMTDsKQEAgLTE1OSwxMyArMTYxLDE0IEBACiAgICAgYnJlYWs7CiAgIH0KIAotICBpZigocGYgIT0gUEZfSU5FVCkgJiYgIUN1cmxfaXB2NndvcmtzKCkpCisgIGlmKChwZiAhPSBQRl9JTkVUKSAmJiAhQ3VybF9pcHY2d29ya3MoY29ubikpCiAgICAgLyogVGhlIHN0YWNrIHNlZW1zIHRvIGJlIGEgbm9uLUlQdjYgb25lICovCiAgICAgcGYgPSBQRl9JTkVUOwogCiAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwogICBoaW50cy5haV9mYW1pbHkgPSBwZjsKLSAgaGludHMuYWlfc29ja3R5cGUgPSBjb25uLT5zb2NrdHlwZTsKKyAgaGludHMuYWlfc29ja3R5cGUgPSAoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfVENQKSA/CisgICAgU09DS19TVFJFQU0gOiBTT0NLX0RHUkFNOwogCiAjaWZuZGVmIFVTRV9SRVNPTFZFX09OX0lQUwogICAvKgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdHN5bi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaG9zdHN5bi5jCmluZGV4IDNkZTY3NDYuLjllMzEwMDggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2hvc3RzeW4uYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ob3N0c3luLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuYwppbmRleCAzMzhjNTlhLi4yOGQ2NmMyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC04OCw4ICs4OCw3IEBACiAgKi8KIAogc3RhdGljIGludCBodHRwX2dldHNvY2tfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIGludCBodHRwX3Nob3VsZF9mYWlsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCkBAIC05OSw4ICs5OCw3IEBACiAjaWZkZWYgVVNFX1NTTAogc3RhdGljIENVUkxjb2RlIGh0dHBzX2Nvbm5lY3Rpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKIHN0YXRpYyBpbnQgaHR0cHNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiAjZWxzZQogI2RlZmluZSBodHRwc19jb25uZWN0aW5nKHgseSkgQ1VSTEVfQ09VTEROVF9DT05ORUNUCiAjZW5kaWYKQEAgLTEyNyw3ICsxMjUsOCBAQAogICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KICAgUE9SVF9IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCiAgIENVUkxQUk9UT19IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgUFJPVE9QVF9DUkVEU1BFUlJFUVVFU1QgICAgICAgICAgICAgICAvKiBmbGFncyAqLworICBQUk9UT1BUX0NSRURTUEVSUkVRVUVTVCB8ICAgICAgICAgICAgIC8qIGZsYWdzICovCisgIFBST1RPUFRfVVNFUlBXRENUUkwKIH07CiAKICNpZmRlZiBVU0VfU1NMCkBAIC0xNTIsNyArMTUxLDggQEAKICAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uX2NoZWNrICovCiAgIFBPUlRfSFRUUFMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLwogICBDVVJMUFJPVE9fSFRUUFMsICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCi0gIFBST1RPUFRfU1NMIHwgUFJPVE9QVF9DUkVEU1BFUlJFUVVFU1QgfCBQUk9UT1BUX0FMUE5fTlBOIC8qIGZsYWdzICovCisgIFBST1RPUFRfU1NMIHwgUFJPVE9QVF9DUkVEU1BFUlJFUVVFU1QgfCBQUk9UT1BUX0FMUE5fTlBOIHwgLyogZmxhZ3MgKi8KKyAgUFJPVE9QVF9VU0VSUFdEQ1RSTAogfTsKICNlbmRpZgogCkBAIC0xNzEsMTAgKzE3MSwyMiBAQAogICBDdXJsX21pbWVfaW5pdHBhcnQoJmh0dHAtPmZvcm0sIGNvbm4tPmRhdGEpOwogICBkYXRhLT5yZXEucHJvdG9wID0gaHR0cDsKIAotICBpZighQ09OTl9JTlVTRShjb25uKSkKLSAgICAvKiBpZiBub3QgYWxyZWFkeSBtdWx0aS11c2luZywgc2V0dXAgY29ubmVjdGlvbiBkZXRhaWxzICovCi0gICAgQ3VybF9odHRwMl9zZXR1cF9jb25uKGNvbm4pOwotICBDdXJsX2h0dHAyX3NldHVwX3JlcShkYXRhKTsKKyAgaWYoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID09IENVUkxfSFRUUF9WRVJTSU9OXzMpIHsKKyAgICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQorICAgICAgLyogT25seSBnbyBIVFRQLzMgZGlyZWN0bHkgb24gSFRUUFMgVVJMcy4gSXQgbmVlZHMgYSBVRFAgc29ja2V0IGFuZCBkb2VzCisgICAgICAgICB0aGUgUVVJQyBkYW5jZS4gKi8KKyAgICAgIGNvbm4tPnRyYW5zcG9ydCA9IFRSTlNQUlRfUVVJQzsKKyAgICBlbHNlIHsKKyAgICAgIGZhaWxmKGRhdGEsICJIVFRQLzMgcmVxdWVzdGVkIGZvciBub24tSFRUUFMgVVJMIik7CisgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYoIUNPTk5fSU5VU0UoY29ubikpCisgICAgICAvKiBpZiBub3QgYWxyZWFkeSBtdWx0aS11c2luZywgc2V0dXAgY29ubmVjdGlvbiBkZXRhaWxzICovCisgICAgICBDdXJsX2h0dHAyX3NldHVwX2Nvbm4oY29ubik7CisgICAgQ3VybF9odHRwMl9zZXR1cF9yZXEoZGF0YSk7CisgIH0KICAgcmV0dXJuIENVUkxFX09LOwogfQogCkBAIC0yNTgsNyArMjcwLDcgQEAKICAgICByZXR1cm4gTlVMTDsKIAogICBtZW1jcHkodmFsdWUsIHN0YXJ0LCBsZW4pOwotICB2YWx1ZVtsZW5dID0gMDsgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgdmFsdWVbbGVuXSA9IDA7IC8qIG51bGwtdGVybWluYXRlICovCiAKICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtMjgyLDE3ICsyOTQsMjEgQEAKICAgY2hhciAqb3V0OwogCiAgIGlmKHByb3h5KSB7Ci0gICAgdXNlcnAgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICB1c2VycCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZDsKICAgICB1c2VyID0gY29ubi0+aHR0cF9wcm94eS51c2VyOwogICAgIHB3ZCA9IGNvbm4tPmh0dHBfcHJveHkucGFzc3dkOworI2Vsc2UKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworI2VuZGlmCiAgIH0KICAgZWxzZSB7Ci0gICAgdXNlcnAgPSAmY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgICB1c2VycCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2Q7CiAgICAgdXNlciA9IGNvbm4tPnVzZXI7CiAgICAgcHdkID0gY29ubi0+cGFzc3dkOwogICB9CiAKLSAgb3V0ID0gYXByaW50ZigiJXM6JXMiLCB1c2VyLCBwd2QpOworICBvdXQgPSBhcHJpbnRmKCIlczolcyIsIHVzZXIsIHB3ZCA/IHB3ZCA6ICIiKTsKICAgaWYoIW91dCkKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIApAQCAtMzMwLDExICszNDYsMTIgQEAKIHsKICAgY2hhciAqKnVzZXJwOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKLSAgdXNlcnAgPSAmY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgdXNlcnAgPSAmZGF0YS0+c3RhdGUuYXB0ci51c2VycHdkOwogICBmcmVlKCp1c2VycCk7CiAgICp1c2VycCA9IGFwcmludGYoIkF1dGhvcml6YXRpb246IEJlYXJlciAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgIGNvbm4tPm9hdXRoX2JlYXJlcik7CisgICAgICAgICAgICAgICAgICAgY29ubi0+ZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSk7CiAKICAgaWYoISp1c2VycCkgewogICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CkBAIC0zODMsNyArNDAwLDcgQEAKIH0KIAogLyoKLSAqIEN1cmxfaHR0cF9wZXJoYXBzcmV3aW5kKCkKKyAqIGh0dHBfcGVyaGFwc3Jld2luZCgpCiAgKgogICogSWYgd2UgYXJlIGRvaW5nIFBPU1Qgb3IgUFVUIHsKICAqICAgSWYgd2UgaGF2ZSBtb3JlIGRhdGEgdG8gc2VuZCB7CkBAIC00MTcsNyArNDM0LDcgQEAKICAgICAgICBza2lwIHRoaXMgcmV3aW5kaW5nIHN0dWZmICovCiAgICAgcmV0dXJuIENVUkxFX09LOwogCi0gIHN3aXRjaChkYXRhLT5zZXQuaHR0cHJlcSkgeworICBzd2l0Y2goZGF0YS0+c3RhdGUuaHR0cHJlcSkgewogICBjYXNlIEhUVFBSRVFfR0VUOgogICBjYXNlIEhUVFBSRVFfSEVBRDoKICAgICByZXR1cm4gQ1VSTEVfT0s7CkBAIC00MzgsMTEgKzQ1NSw4IEBACiAgIH0KICAgZWxzZSB7CiAgICAgLyogZmlndXJlIG91dCBob3cgbXVjaCBkYXRhIHdlIGFyZSBleHBlY3RlZCB0byBzZW5kICovCi0gICAgc3dpdGNoKGRhdGEtPnNldC5odHRwcmVxKSB7CisgICAgc3dpdGNoKGRhdGEtPnN0YXRlLmh0dHByZXEpIHsKICAgICBjYXNlIEhUVFBSRVFfUE9TVDoKLSAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgIT0gLTEpCi0gICAgICAgIGV4cGVjdHNlbmQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOwotICAgICAgYnJlYWs7CiAgICAgY2FzZSBIVFRQUkVRX1BVVDoKICAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgIT0gLTEpCiAgICAgICAgIGV4cGVjdHNlbmQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOwpAQCAtNTQ4LDcgKzU2Miw3IEBACiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICB1bnNpZ25lZCBsb25nIGF1dGhtYXNrID0gfjB1bDsKIAotICBpZighY29ubi0+b2F1dGhfYmVhcmVyKQorICBpZighZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSkKICAgICBhdXRobWFzayAmPSAodW5zaWduZWQgbG9uZyl+Q1VSTEFVVEhfQkVBUkVSOwogCiAgIGlmKDEwMCA8PSBkYXRhLT5yZXEuaHR0cGNvZGUgJiYgMTk5ID49IGRhdGEtPnJlcS5odHRwY29kZSkKQEAgLTU1OCw3ICs1NzIsNyBAQAogICBpZihkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbSkKICAgICByZXR1cm4gZGF0YS0+c2V0Lmh0dHBfZmFpbF9vbl9lcnJvcj9DVVJMRV9IVFRQX1JFVFVSTkVEX0VSUk9SOkNVUkxFX09LOwogCi0gIGlmKChjb25uLT5iaXRzLnVzZXJfcGFzc3dkIHx8IGNvbm4tPm9hdXRoX2JlYXJlcikgJiYKKyAgaWYoKGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgfHwgZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSkgJiYKICAgICAgKChkYXRhLT5yZXEuaHR0cGNvZGUgPT0gNDAxKSB8fAogICAgICAgKGNvbm4tPmJpdHMuYXV0aG5lZyAmJiBkYXRhLT5yZXEuaHR0cGNvZGUgPCAzMDApKSkgewogICAgIHBpY2tob3N0ID0gcGlja29uZWF1dGgoJmRhdGEtPnN0YXRlLmF1dGhob3N0LCBhdXRobWFzayk7CkBAIC01NzEsNiArNTg1LDcgQEAKICAgICAgIGNvbm4tPmRhdGEtPnNldC5odHRwdmVyc2lvbiA9IENVUkxfSFRUUF9WRVJTSU9OXzFfMTsKICAgICB9CiAgIH0KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgJiYKICAgICAgKChkYXRhLT5yZXEuaHR0cGNvZGUgPT0gNDA3KSB8fAogICAgICAgKGNvbm4tPmJpdHMuYXV0aG5lZyAmJiBkYXRhLT5yZXEuaHR0cGNvZGUgPCAzMDApKSkgewpAQCAtNTc5LDEwICs1OTQsMTEgQEAKICAgICBpZighcGlja3Byb3h5KQogICAgICAgZGF0YS0+c3RhdGUuYXV0aHByb2JsZW0gPSBUUlVFOwogICB9CisjZW5kaWYKIAogICBpZihwaWNraG9zdCB8fCBwaWNrcHJveHkpIHsKLSAgICBpZigoZGF0YS0+c2V0Lmh0dHByZXEgIT0gSFRUUFJFUV9HRVQpICYmCi0gICAgICAgKGRhdGEtPnNldC5odHRwcmVxICE9IEhUVFBSRVFfSEVBRCkgJiYKKyAgICBpZigoZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0dFVCkgJiYKKyAgICAgICAoZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpICYmCiAgICAgICAgIWNvbm4tPmJpdHMucmV3aW5kYWZ0ZXJzZW5kKSB7CiAgICAgICByZXN1bHQgPSBodHRwX3BlcmhhcHNyZXdpbmQoY29ubik7CiAgICAgICBpZihyZXN1bHQpCkBAIC02MDMsOCArNjE5LDggQEAKICAgICAgICBhdXRoZW50aWNhdGlvbiBpcyBub3QgImRvbmUiIHlldCBhbmQKICAgICAgICBubyBhdXRoZW50aWNhdGlvbiBzZWVtcyB0byBiZSByZXF1aXJlZCBhbmQKICAgICAgICB3ZSBkaWRuJ3QgdHJ5IEhFQUQgb3IgR0VUICovCi0gICAgaWYoKGRhdGEtPnNldC5odHRwcmVxICE9IEhUVFBSRVFfR0VUKSAmJgotICAgICAgIChkYXRhLT5zZXQuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpKSB7CisgICAgaWYoKGRhdGEtPnN0YXRlLmh0dHByZXEgIT0gSFRUUFJFUV9HRVQpICYmCisgICAgICAgKGRhdGEtPnN0YXRlLmh0dHByZXEgIT0gSFRUUFJFUV9IRUFEKSkgewogICAgICAgZGF0YS0+cmVxLm5ld3VybCA9IHN0cmR1cChkYXRhLT5jaGFuZ2UudXJsKTsgLyogY2xvbmUgVVJMICovCiAgICAgICBpZighZGF0YS0+cmVxLm5ld3VybCkKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CkBAIC02MzQsOSArNjUwLDcgQEAKIHsKICAgY29uc3QgY2hhciAqYXV0aCA9IE5VTEw7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpIHx8IGRlZmluZWQoVVNFX1NQTkVHTykKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0jZW5kaWYKIAogI2lmZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAogICAodm9pZClyZXF1ZXN0OwpAQCAtNjQ0LDcgKzY1OCw3IEBACiAjZW5kaWYKIAogI2lmZGVmIFVTRV9TUE5FR08KLSAgaWYoKGF1dGhzdGF0dXMtPnBpY2tlZCA9PSBDVVJMQVVUSF9ORUdPVElBVEUpKSB7CisgIGlmKGF1dGhzdGF0dXMtPnBpY2tlZCA9PSBDVVJMQVVUSF9ORUdPVElBVEUpIHsKICAgICBhdXRoID0gIk5lZ290aWF0ZSI7CiAgICAgcmVzdWx0ID0gQ3VybF9vdXRwdXRfbmVnb3RpYXRlKGNvbm4sIHByb3h5KTsKICAgICBpZihyZXN1bHQpCkBAIC02ODQsMTAgKzY5OCwxMyBAQAogI2VuZGlmCiAgIGlmKGF1dGhzdGF0dXMtPnBpY2tlZCA9PSBDVVJMQVVUSF9CQVNJQykgewogICAgIC8qIEJhc2ljICovCi0gICAgaWYoKHByb3h5ICYmIGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgJiYKLSAgICAgICAgIUN1cmxfY2hlY2tQcm94eWhlYWRlcnMoY29ubiwgIlByb3h5LWF1dGhvcml6YXRpb24iKSkgfHwKLSAgICAgICAoIXByb3h5ICYmIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgJiYKLSAgICAgICAgIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJBdXRob3JpemF0aW9uIikpKSB7CisgICAgaWYoCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgKHByb3h5ICYmIGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgJiYKKyAgICAgICAhQ3VybF9jaGVja1Byb3h5aGVhZGVycyhjb25uLCAiUHJveHktYXV0aG9yaXphdGlvbiIpKSB8fAorI2VuZGlmCisgICAgICAoIXByb3h5ICYmIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgJiYKKyAgICAgICAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkF1dGhvcml6YXRpb24iKSkpIHsKICAgICAgIGF1dGggPSAiQmFzaWMiOwogICAgICAgcmVzdWx0ID0gaHR0cF9vdXRwdXRfYmFzaWMoY29ubiwgcHJveHkpOwogICAgICAgaWYocmVzdWx0KQpAQCAtNzAwLDcgKzcxNyw3IEBACiAgIH0KICAgaWYoYXV0aHN0YXR1cy0+cGlja2VkID09IENVUkxBVVRIX0JFQVJFUikgewogICAgIC8qIEJlYXJlciAqLwotICAgIGlmKCghcHJveHkgJiYgY29ubi0+b2F1dGhfYmVhcmVyICYmCisgICAgaWYoKCFwcm94eSAmJiBkYXRhLT5zZXQuc3RyW1NUUklOR19CRUFSRVJdICYmCiAgICAgICAgICFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiQXV0aG9yaXphdGlvbjoiKSkpIHsKICAgICAgIGF1dGggPSAiQmVhcmVyIjsKICAgICAgIHJlc3VsdCA9IGh0dHBfb3V0cHV0X2JlYXJlcihjb25uKTsKQEAgLTcxNCwxMCArNzMxLDE1IEBACiAgIH0KIAogICBpZihhdXRoKSB7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgIGluZm9mKGRhdGEsICIlcyBhdXRoIHVzaW5nICVzIHdpdGggdXNlciAnJXMnXG4iLAogICAgICAgICAgIHByb3h5ID8gIlByb3h5IiA6ICJTZXJ2ZXIiLCBhdXRoLAogICAgICAgICAgIHByb3h5ID8gKGNvbm4tPmh0dHBfcHJveHkudXNlciA/IGNvbm4tPmh0dHBfcHJveHkudXNlciA6ICIiKSA6Ci0gICAgICAgICAgICAgICAgICAoY29ubi0+dXNlciA/IGNvbm4tPnVzZXIgOiAiIikpOworICAgICAgICAgIChjb25uLT51c2VyID8gY29ubi0+dXNlciA6ICIiKSk7CisjZWxzZQorICAgIGluZm9mKGRhdGEsICJTZXJ2ZXIgYXV0aCB1c2luZyAlcyB3aXRoIHVzZXIgJyVzJ1xuIiwKKyAgICAgICAgICBhdXRoLCBjb25uLT51c2VyID8gY29ubi0+dXNlciA6ICIiKTsKKyNlbmRpZgogICAgIGF1dGhzdGF0dXMtPm11bHRpcGFzcyA9ICghYXV0aHN0YXR1cy0+ZG9uZSkgPyBUUlVFIDogRkFMU0U7CiAgIH0KICAgZWxzZQpAQCAtNzU3LDggKzc3OSwxMSBAQAogICBhdXRoaG9zdCA9ICZkYXRhLT5zdGF0ZS5hdXRoaG9zdDsKICAgYXV0aHByb3h5ID0gJmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKIAotICBpZigoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkgfHwKLSAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCB8fCBjb25uLT5vYXV0aF9iZWFyZXIpCisgIGlmKAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkgfHwKKyNlbmRpZgorICAgICBjb25uLT5iaXRzLnVzZXJfcGFzc3dkIHx8IGRhdGEtPnNldC5zdHJbU1RSSU5HX0JFQVJFUl0pCiAgICAgLyogY29udGludWUgcGxlYXNlICovOwogICBlbHNlIHsKICAgICBhdXRoaG9zdC0+ZG9uZSA9IFRSVUU7CkBAIC0xMDYyLDggKzEwODcsMTAgQEAKICAgKi8KICAgaWYoKGh0dHBjb2RlID09IDQwMSkgJiYgIWNvbm4tPmJpdHMudXNlcl9wYXNzd2QpCiAgICAgcmV0dXJuIFRSVUU7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBpZigoaHR0cGNvZGUgPT0gNDA3KSAmJiAhY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkKICAgICByZXR1cm4gVFJVRTsKKyNlbmRpZgogCiAgIHJldHVybiBkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbTsKIH0KQEAgLTExMjAsNDUgKzExNDcsMjAgQEAKICAgcmV0dXJuIGZ1bGxzaXplOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBhZGRfYnVmZmVyIGZ1bmN0aW9ucyAqLwotCiAvKgotICogQ3VybF9hZGRfYnVmZmVyX2luaXQoKSBzZXRzIHVwIGFuZCByZXR1cm5zIGEgZmluZSBidWZmZXIgc3RydWN0Ci0gKi8KLUN1cmxfc2VuZF9idWZmZXIgKkN1cmxfYWRkX2J1ZmZlcl9pbml0KHZvaWQpCi17Ci0gIHJldHVybiBjYWxsb2MoMSwgc2l6ZW9mKEN1cmxfc2VuZF9idWZmZXIpKTsKLX0KLQotLyoKLSAqIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCkgZnJlZXMgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgotICovCi12b2lkIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKEN1cmxfc2VuZF9idWZmZXIgKippbnApCi17Ci0gIEN1cmxfc2VuZF9idWZmZXIgKmluID0gKmlucDsKLSAgaWYoaW4pIC8qIGRlYWwgd2l0aCBOVUxMIGlucHV0ICovCi0gICAgZnJlZShpbi0+YnVmZmVyKTsKLSAgZnJlZShpbik7Ci0gICppbnAgPSBOVUxMOwotfQotCi0vKgotICogQ3VybF9hZGRfYnVmZmVyX3NlbmQoKSBzZW5kcyBhIGhlYWRlciBidWZmZXIgYW5kIGZyZWVzIGFsbCBhc3NvY2lhdGVkCisgKiBDdXJsX2J1ZmZlcl9zZW5kKCkgc2VuZHMgYSBoZWFkZXIgYnVmZmVyIGFuZCBmcmVlcyBhbGwgYXNzb2NpYXRlZAogICogbWVtb3J5LiAgQm9keSBkYXRhIG1heSBiZSBhcHBlbmRlZCB0byB0aGUgaGVhZGVyIGRhdGEgaWYgZGVzaXJlZC4KICAqCiAgKiBSZXR1cm5zIENVUkxjb2RlCiAgKi8KLUNVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcl9zZW5kKEN1cmxfc2VuZF9idWZmZXIgKippbnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGUgbnVtYmVyIG9mIHNlbnQgYnl0ZXMgdG8gdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9vZmZfdCAqYnl0ZXNfd3JpdHRlbiwKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciBjb250YWlucyBib2R5IGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmNsdWRlZF9ib2R5X2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tldGluZGV4KQorQ1VSTGNvZGUgQ3VybF9idWZmZXJfc2VuZChzdHJ1Y3QgZHluYnVmICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGQgdGhlIG51bWJlciBvZiBzZW50IGJ5dGVzIHRvIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90ICpieXRlc193cml0dGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBob3cgbXVjaCBvZiB0aGUgYnVmZmVyIGNvbnRhaW5zIGJvZHkgZGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5jbHVkZWRfYm9keV9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tldGluZGV4KQogewogICBzc2l6ZV90IGFtb3VudDsKICAgQ1VSTGNvZGUgcmVzdWx0OwpAQCAtMTE2OSw3ICsxMTcxLDYgQEAKICAgc2l6ZV90IHNlbmRzaXplOwogICBjdXJsX3NvY2tldF90IHNvY2tmZDsKICAgc2l6ZV90IGhlYWRlcnNpemU7Ci0gIEN1cmxfc2VuZF9idWZmZXIgKmluID0gKmlucDsKIAogICBERUJVR0FTU0VSVChzb2NrZXRpbmRleCA8PSBTRUNPTkRBUllTT0NLRVQpOwogCkBAIC0xMTc4LDggKzExNzksOCBAQAogICAvKiBUaGUgbG9vcGluZyBiZWxvdyBpcyByZXF1aXJlZCBzaW5jZSB3ZSB1c2Ugbm9uLWJsb2NraW5nIHNvY2tldHMsIGJ1dCBkdWUKICAgICAgdG8gdGhlIGNpcmN1bXN0YW5jZXMgd2Ugd2lsbCBqdXN0IGxvb3AgYW5kIHRyeSBhZ2FpbiBhbmQgYWdhaW4gZXRjICovCiAKLSAgcHRyID0gaW4tPmJ1ZmZlcjsKLSAgc2l6ZSA9IGluLT5zaXplX3VzZWQ7CisgIHB0ciA9IEN1cmxfZHluX3B0cihpbik7CisgIHNpemUgPSBDdXJsX2R5bl9sZW4oaW4pOwogCiAgIGhlYWRlcnNpemUgPSBzaXplIC0gaW5jbHVkZWRfYm9keV9ieXRlczsgLyogdGhlIGluaXRpYWwgcGFydCB0aGF0IGlzbid0IGJvZHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBoZWFkZXIgKi8KQEAgLTExOTAsMTIgKzExOTEsMTUgQEAKICAgLyogQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCiAgIGlmKHJlc3VsdCkgewogICAgIC8qIGNvbnZlcnNpb24gZmFpbGVkLCBmcmVlIG1lbW9yeSBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgKi8KLSAgICBDdXJsX2FkZF9idWZmZXJfZnJlZShpbnApOworICAgIEN1cmxfZHluX2ZyZWUoaW4pOwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICBpZigoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCB8fAotICAgICBjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMpCisgIGlmKChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgfHwgY29ubi0+aHR0cF9wcm94eS5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX0hUVFBTCisjZW5kaWYKKyAgICAgICApCiAgICAgICYmIGNvbm4tPmh0dHB2ZXJzaW9uICE9IDIwKSB7CiAgICAgLyogV2UgbmV2ZXIgc2VuZCBtb3JlIHRoYW4gQ1VSTF9NQVhfV1JJVEVfU0laRSBieXRlcyBpbiBvbmUgc2luZ2xlIGNodW5rCiAgICAgICAgd2hlbiB3ZSBzcGVhayBIVFRQUywgYXMgaWYgb25seSBhIGZyYWN0aW9uIG9mIGl0IGlzIHNlbnQgbm93LCB0aGlzIGRhdGEKQEAgLTEyMTQsMTQgKzEyMTgsMjcgQEAKICAgICByZXN1bHQgPSBDdXJsX2dldF91cGxvYWRfYnVmZmVyKGRhdGEpOwogICAgIGlmKHJlc3VsdCkgewogICAgICAgLyogbWFsbG9jIGZhaWxlZCwgZnJlZSBtZW1vcnkgYW5kIHJldHVybiB0byB0aGUgY2FsbGVyICovCi0gICAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmaW4pOworICAgICAgQ3VybF9keW5fZnJlZShpbik7CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBtZW1jcHkoZGF0YS0+c3RhdGUudWxidWYsIHB0ciwgc2VuZHNpemUpOwogICAgIHB0ciA9IGRhdGEtPnN0YXRlLnVsYnVmOwogICB9Ci0gIGVsc2UKKyAgZWxzZSB7CisjaWZkZWYgQ1VSTERFQlVHCisgICAgLyogQWxsb3cgZGVidWcgYnVpbGRzIG92ZXJyaWRlIHRoaXMgbG9naWMgdG8gZm9yY2Ugc2hvcnQgaW5pdGlhbCBzZW5kcyAqLworICAgIGNoYXIgKnAgPSBnZXRlbnYoIkNVUkxfU01BTExSRVFTRU5EIik7CisgICAgaWYocCkgeworICAgICAgc2l6ZV90IGFsdHNpemUgPSAoc2l6ZV90KXN0cnRvdWwocCwgTlVMTCwgMTApOworICAgICAgaWYoYWx0c2l6ZSkKKyAgICAgICAgc2VuZHNpemUgPSBDVVJMTUlOKHNpemUsIGFsdHNpemUpOworICAgICAgZWxzZQorICAgICAgICBzZW5kc2l6ZSA9IHNpemU7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgogICAgIHNlbmRzaXplID0gc2l6ZTsKKyAgfQogCiAgIHJlc3VsdCA9IEN1cmxfd3JpdGUoY29ubiwgc29ja2ZkLCBwdHIsIHNlbmRzaXplLCAmYW1vdW50KTsKIApAQCAtMTI2NCw3ICsxMjgxLDcgQEAKIAogICAgICAgICBzaXplIC09IGFtb3VudDsKIAotICAgICAgICBwdHIgPSBpbi0+YnVmZmVyICsgYW1vdW50OworICAgICAgICBwdHIgPSBDdXJsX2R5bl9wdHIoaW4pICsgYW1vdW50OwogCiAgICAgICAgIC8qIGJhY2t1cCB0aGUgY3VycmVudGx5IHNldCBwb2ludGVycyAqLwogICAgICAgICBodHRwLT5iYWNrdXAuZnJlYWRfZnVuYyA9IGRhdGEtPnN0YXRlLmZyZWFkX2Z1bmM7CkBAIC0xMjc4LDcgKzEyOTUsNyBAQAogICAgICAgICBodHRwLT5wb3N0ZGF0YSA9IHB0cjsKICAgICAgICAgaHR0cC0+cG9zdHNpemUgPSAoY3VybF9vZmZfdClzaXplOwogCi0gICAgICAgIGh0dHAtPnNlbmRfYnVmZmVyID0gaW47CisgICAgICAgIGh0dHAtPnNlbmRfYnVmZmVyID0gKmluOyAvKiBjb3B5IHRoZSB3aG9sZSBzdHJ1Y3QgKi8KICAgICAgICAgaHR0cC0+c2VuZGluZyA9IEhUVFBTRU5EX1JFUVVFU1Q7CiAKICAgICAgICAgcmV0dXJuIENVUkxFX09LOwpAQCAtMTI5OCw5MiArMTMxNSwxMSBAQAogICAgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKICAgICB9CiAgIH0KLSAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJmluKTsKKyAgQ3VybF9keW5fZnJlZShpbik7CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi0vKgotICogYWRkX2J1ZmZlcmYoKSBhZGQgdGhlIGZvcm1hdHRlZCBpbnB1dCB0byB0aGUgYnVmZmVyLgotICovCi1DVVJMY29kZSBDdXJsX2FkZF9idWZmZXJmKEN1cmxfc2VuZF9idWZmZXIgKippbnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICBjaGFyICpzOwotICB2YV9saXN0IGFwOwotICBDdXJsX3NlbmRfYnVmZmVyICppbiA9ICppbnA7Ci0gIHZhX3N0YXJ0KGFwLCBmbXQpOwotICBzID0gdmFwcmludGYoZm10LCBhcCk7IC8qIHRoaXMgYWxsb2NzIGEgbmV3IHN0cmluZyB0byBhcHBlbmQgKi8KLSAgdmFfZW5kKGFwKTsKLQotICBpZihzKSB7Ci0gICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKGlucCwgcywgc3RybGVuKHMpKTsKLSAgICBmcmVlKHMpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgLyogSWYgd2UgZmFpbGVkLCB3ZSBjbGVhbnVwIHRoZSB3aG9sZSBidWZmZXIgYW5kIHJldHVybiBlcnJvciAqLwotICBmcmVlKGluLT5idWZmZXIpOwotICBmcmVlKGluKTsKLSAgKmlucCA9IE5VTEw7Ci0gIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotfQotCi0vKgotICogQ3VybF9hZGRfYnVmZmVyKCkgYXBwZW5kcyBhIG1lbW9yeSBjaHVuayB0byB0aGUgZXhpc3RpbmcgYnVmZmVyCi0gKi8KLUNVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcihDdXJsX3NlbmRfYnVmZmVyICoqaW5wLCBjb25zdCB2b2lkICppbnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSkKLXsKLSAgY2hhciAqbmV3X3JiOwotICBDdXJsX3NlbmRfYnVmZmVyICppbiA9ICppbnA7Ci0KLSAgaWYofnNpemUgPCBpbi0+c2l6ZV91c2VkKSB7Ci0gICAgLyogSWYgcmVzdWx0aW5nIHVzZWQgc2l6ZSBvZiBzZW5kIGJ1ZmZlciB3b3VsZCB3cmFwIHNpemVfdCwgY2xlYW51cAotICAgICAgIHRoZSB3aG9sZSBidWZmZXIgYW5kIHJldHVybiBlcnJvci4gT3RoZXJ3aXNlIHRoZSByZXF1aXJlZCBidWZmZXIKLSAgICAgICBzaXplIHdpbGwgZml0IGludG8gYSBzaW5nbGUgYWxsb2NhdGFibGUgbWVtb3J5IGNodW5rICovCi0gICAgQ3VybF9zYWZlZnJlZShpbi0+YnVmZmVyKTsKLSAgICBmcmVlKGluKTsKLSAgICAqaW5wID0gTlVMTDsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotCi0gIGlmKCFpbi0+YnVmZmVyIHx8Ci0gICAgICgoaW4tPnNpemVfdXNlZCArIHNpemUpID4gKGluLT5zaXplX21heCAtIDEpKSkgewotICAgIC8qIElmIGN1cnJlbnQgYnVmZmVyIHNpemUgaXNuJ3QgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCwgdXNlIGEKLSAgICAgICBidWZmZXIgc2l6ZSB0aGF0IGRvdWJsZXMgdGhlIHJlcXVpcmVkIHNpemUuIElmIHRoaXMgbmV3IHNpemUKLSAgICAgICB3b3VsZCB3cmFwIHNpemVfdCwgdGhlbiBqdXN0IHVzZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBvbmUgKi8KLSAgICBzaXplX3QgbmV3X3NpemU7Ci0KLSAgICBpZigoc2l6ZSA+IChzaXplX3QpLTEgLyAyKSB8fCAoaW4tPnNpemVfdXNlZCA+IChzaXplX3QpLTEgLyAyKSB8fAotICAgICAgICh+KHNpemUgKiAyKSA8IChpbi0+c2l6ZV91c2VkICogMikpKQotICAgICAgbmV3X3NpemUgPSAoc2l6ZV90KS0xOwotICAgIGVsc2UKLSAgICAgIG5ld19zaXplID0gKGluLT5zaXplX3VzZWQgKyBzaXplKSAqIDI7Ci0KLSAgICBpZihpbi0+YnVmZmVyKQotICAgICAgLyogd2UgaGF2ZSBhIGJ1ZmZlciwgZW5sYXJnZSB0aGUgZXhpc3Rpbmcgb25lICovCi0gICAgICBuZXdfcmIgPSBDdXJsX3NhZmVyZWFsbG9jKGluLT5idWZmZXIsIG5ld19zaXplKTsKLSAgICBlbHNlCi0gICAgICAvKiBjcmVhdGUgYSBuZXcgYnVmZmVyICovCi0gICAgICBuZXdfcmIgPSBtYWxsb2MobmV3X3NpemUpOwotCi0gICAgaWYoIW5ld19yYikgewotICAgICAgLyogSWYgd2UgZmFpbGVkLCB3ZSBjbGVhbnVwIHRoZSB3aG9sZSBidWZmZXIgYW5kIHJldHVybiBlcnJvciAqLwotICAgICAgZnJlZShpbik7Ci0gICAgICAqaW5wID0gTlVMTDsKLSAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgIH0KLQotICAgIGluLT5idWZmZXIgPSBuZXdfcmI7Ci0gICAgaW4tPnNpemVfbWF4ID0gbmV3X3NpemU7Ci0gIH0KLSAgbWVtY3B5KCZpbi0+YnVmZmVyW2luLT5zaXplX3VzZWRdLCBpbnB0ciwgc2l6ZSk7Ci0KLSAgaW4tPnNpemVfdXNlZCArPSBzaXplOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQogLyogZW5kIG9mIHRoZSBhZGRfYnVmZmVyIGZ1bmN0aW9ucyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xNDU2LDYgKzEzOTIsNyBAQAogICAgICBmdW5jdGlvbiB0byBtYWtlIHRoZSByZS11c2UgY2hlY2tzIHByb3Blcmx5IGJlIGFibGUgdG8gY2hlY2sgdGhpcyBiaXQuICovCiAgIGNvbm5rZWVwKGNvbm4sICJIVFRQIGRlZmF1bHQiKTsKIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgLyogdGhlIENPTk5FQ1QgcHJvY2VkdXJlIG1pZ2h0IG5vdCBoYXZlIGJlZW4gY29tcGxldGVkICovCiAgIHJlc3VsdCA9IEN1cmxfcHJveHlfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CiAgIGlmKHJlc3VsdCkKQEAgLTE0NzIsNyArMTQwOSw2IEBACiAgICAgLyogbm90aGluZyBlbHNlIHRvIGRvIGV4Y2VwdCB3YWl0IHJpZ2h0IG5vdyAtIHdlJ3JlIG5vdCBkb25lIGhlcmUuICovCiAgICAgcmV0dXJuIENVUkxFX09LOwogCi0jaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBpZihjb25uLT5kYXRhLT5zZXQuaGFwcm94eXByb3RvY29sKSB7CiAgICAgLyogYWRkIEhBUHJveHkgUFJPWFkgcHJvdG9jb2wgaGVhZGVyICovCiAgICAgcmVzdWx0ID0gYWRkX2hhcHJveHlfcHJvdG9jb2xfaGVhZGVyKGNvbm4pOwpAQCAtMTQ5NywxMSArMTQzMyw5IEBACiAgICBpbnRlcmZhY2UgYW5kIHRoZW4gd2UncmUgYWx3YXlzIF9zZW5kaW5nXyBhIHJlcXVlc3QgYW5kIHRodXMgd2Ugd2FpdCBmb3IKICAgIHRoZSBzaW5nbGUgc29ja2V0IHRvIGJlY29tZSB3cml0YWJsZSBvbmx5ICovCiBzdGF0aWMgaW50IGh0dHBfZ2V0c29ja19kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICAvKiB3cml0ZSBtb2RlICovCi0gICh2b2lkKW51bXNvY2tzOyAvKiB1bnVzZWQsIHdlIHRydXN0IGl0IHRvIGJlIGF0IGxlYXN0IDEgKi8KICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKICAgcmV0dXJuIEdFVFNPQ0tfV1JJVEVTT0NLKDApOwogfQpAQCAtMTUxMCw3ICsxNDQ0LDcgQEAKIHN0YXRpYyBDVVJMY29kZSBhZGRfaGFwcm94eV9wcm90b2NvbF9oZWFkZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBjaGFyIHByb3h5X2hlYWRlclsxMjhdOwotICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyOworICBzdHJ1Y3QgZHluYnVmIHJlcTsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBjaGFyIHRjcF92ZXJzaW9uWzVdOwogCkBAIC0xNTMxLDE5ICsxNDY1LDE0IEBACiAgICAgICAgICAgICBjb25uLT5kYXRhLT5pbmZvLmNvbm5fbG9jYWxfcG9ydCwKICAgICAgICAgICAgIGNvbm4tPmRhdGEtPmluZm8uY29ubl9wcmltYXJ5X3BvcnQpOwogCi0gIHJlcV9idWZmZXIgPSBDdXJsX2FkZF9idWZmZXJfaW5pdCgpOwotICBpZighcmVxX2J1ZmZlcikKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgQ3VybF9keW5faW5pdCgmcmVxLCBEWU5fSEFYUFJPWFkpOwogCi0gIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsIHByb3h5X2hlYWRlcik7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCBwcm94eV9oZWFkZXIpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZCgmcmVxX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm4tPmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCk7CisgIHJlc3VsdCA9IEN1cmxfYnVmZmVyX3NlbmQoJnJlcSwgY29ubiwgJmNvbm4tPmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZJUlNUU09DS0VUKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTU1NSw2ICsxNDg0LDEzIEBACiAgIENVUkxjb2RlIHJlc3VsdDsKICAgREVCVUdBU1NFUlQoKGNvbm4pICYmIChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKSk7CiAKKyNpZmRlZiBFTkFCTEVfUVVJQworICBpZihjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9RVUlDKSB7CisgICAgKmRvbmUgPSBUUlVFOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorI2VuZGlmCisKICAgLyogcGVyZm9ybSBTU0wgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgc29ja2V0ICovCiAgIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoY29ubiwgRklSU1RTT0NLRVQsIGRvbmUpOwogICBpZihyZXN1bHQpCkBAIC0xNTY0LDExICsxNTAwLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgaHR0cHNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQotICAgIHJldHVybiBDdXJsX3NzbF9nZXRzb2NrKGNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIEN1cmxfc3NsX2dldHNvY2soY29ubiwgc29ja3MpOwogICByZXR1cm4gR0VUU09DS19CTEFOSzsKIH0KICNlbmRpZiAvKiBVU0VfU1NMICovCkBAIC0xNTk4LDEzICsxNTMzLDExIEBACiAgIGlmKCFodHRwKQogICAgIHJldHVybiBDVVJMRV9PSzsKIAotICBpZihodHRwLT5zZW5kX2J1ZmZlcikgewotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZodHRwLT5zZW5kX2J1ZmZlcik7Ci0gIH0KLQotICBDdXJsX2h0dHAyX2RvbmUoY29ubiwgcHJlbWF0dXJlKTsKLQorICBDdXJsX2R5bl9mcmVlKCZodHRwLT5zZW5kX2J1ZmZlcik7CisgIEN1cmxfaHR0cDJfZG9uZShkYXRhLCBwcmVtYXR1cmUpOworICBDdXJsX3F1aWNfZG9uZShkYXRhLCBwcmVtYXR1cmUpOwogICBDdXJsX21pbWVfY2xlYW5wYXJ0KCZodHRwLT5mb3JtKTsKKyAgQ3VybF9keW5fcmVzZXQoJmRhdGEtPnN0YXRlLmhlYWRlcmIpOwogCiAgIGlmKHN0YXR1cykKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMTY1MCw2ICsxNTgzLDEyIEBACiBzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2h0dHBfc3RyaW5nKGNvbnN0IHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKKyNpZmRlZiBFTkFCTEVfUVVJQworICBpZigoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID09IENVUkxfSFRUUF9WRVJTSU9OXzMpIHx8CisgICAgIChjb25uLT5odHRwdmVyc2lvbiA9PSAzMCkpCisgICAgcmV0dXJuICIzIjsKKyNlbmRpZgorCiAjaWZkZWYgVVNFX05HSFRUUDIKICAgaWYoY29ubi0+cHJvdG8uaHR0cGMuaDIpCiAgICAgcmV0dXJuICIyIjsKQEAgLTE2NjQsMTMgKzE2MDMsMTMgQEAKIC8qIGNoZWNrIGFuZCBwb3NzaWJseSBhZGQgYW4gRXhwZWN0OiBoZWFkZXIgKi8KIHN0YXRpYyBDVVJMY29kZSBleHBlY3QxMDAoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHluYnVmICpyZXEpCiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBkYXRhLT5zdGF0ZS5leHBlY3QxMDBoZWFkZXIgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBmYWxzZSB1bmxlc3MgaXQgaXMgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBUUlVFIGJlbG93ICovCi0gIGlmKHVzZV9odHRwXzFfMXBsdXMoZGF0YSwgY29ubikgJiYKLSAgICAgKGNvbm4tPmh0dHB2ZXJzaW9uICE9IDIwKSkgeworICBpZighZGF0YS0+c3RhdGUuZGlzYWJsZWV4cGVjdCAmJiB1c2VfaHR0cF8xXzFwbHVzKGRhdGEsIGNvbm4pICYmCisgICAgIChjb25uLT5odHRwdmVyc2lvbiA8IDIwKSkgewogICAgIC8qIGlmIG5vdCBkb2luZyBIVFRQIDEuMCBvciB2ZXJzaW9uIDIsIG9yIGRpc2FibGVkIGV4cGxpY2l0bHksIHdlIGFkZCBhbgogICAgICAgIEV4cGVjdDogMTAwLWNvbnRpbnVlIHRvIHRoZSBoZWFkZXJzIHdoaWNoIGFjdHVhbGx5IHNwZWVkcyB1cCBwb3N0CiAgICAgICAgb3BlcmF0aW9ucyAoYXMgdGhlcmUgaXMgb25lIHBhY2tldCBjb21pbmcgYmFjayBmcm9tIHRoZSB3ZWIgc2VydmVyKSAqLwpAQCAtMTY4MCw4ICsxNjE5LDcgQEAKICAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKHB0ciwgIkV4cGVjdDoiLCAiMTAwLWNvbnRpbnVlIik7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdDogMTAwLWNvbnRpbnVlXHJcbiIpOworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKHJlcSwgIkV4cGVjdDogMTAwLWNvbnRpbnVlXHJcbiIpOwogICAgICAgaWYoIXJlc3VsdCkKICAgICAgICAgZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyID0gVFJVRTsKICAgICB9CkBAIC0xNzAwLDcgKzE2MzgsNyBAQAogICAgd2lsbCByZXR1cm4gYW4gZXJyb3IgY29kZSBpZiBvbmUgb2YgdGhlIGhlYWRlcnMgaXMKICAgIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5ICovCiBDVVJMY29kZSBDdXJsX2h0dHBfY29tcGlsZV90cmFpbGVycyhzdHJ1Y3QgY3VybF9zbGlzdCAqdHJhaWxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHluYnVmICpiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqaGFuZGxlKQogewogICBjaGFyICpwdHIgPSBOVUxMOwpAQCAtMTcyNiw4ICsxNjY0LDEwIEBACiAgICAgLyogb25seSBhZGQgY29ycmVjdGx5IGZvcm1hdHRlZCB0cmFpbGVycyAqLwogICAgIHB0ciA9IHN0cmNocih0cmFpbGVycy0+ZGF0YSwgJzonKTsKICAgICBpZihwdHIgJiYgKihwdHIgKyAxKSA9PSAnICcpIHsKLSAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJmJ1ZmZlciwgIiVzJXMiLCB0cmFpbGVycy0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kb2ZsaW5lX25hdGl2ZSk7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoYiwgdHJhaWxlcnMtPmRhdGEpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKGIsIGVuZG9mbGluZV9uYXRpdmUpOwogICAgICAgaWYocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE3MzUsMTQgKzE2NzUsMTMgQEAKICAgICAgIGluZm9mKGhhbmRsZSwgIk1hbGZvcm1hdHRlZCB0cmFpbGluZyBoZWFkZXIgISBTa2lwcGluZyB0cmFpbGVyLiIpOwogICAgIHRyYWlsZXJzID0gdHJhaWxlcnMtPm5leHQ7CiAgIH0KLSAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZidWZmZXIsIGVuZG9mbGluZV9uZXR3b3JrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGVuZG9mbGluZV9uZXR3b3JrKSk7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZChiLCBlbmRvZmxpbmVfbmV0d29yayk7CiAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENVUkxjb2RlIEN1cmxfYWRkX2N1c3RvbV9oZWFkZXJzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfY29ubmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHluYnVmICpyZXEpCiB7CiAgIGNoYXIgKnB0cjsKICAgc3RydWN0IGN1cmxfc2xpc3QgKmhbMl07CkBAIC0xNzUxLDYgKzE2OTAsNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgaW50IGk7CiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGVudW0gcHJveHlfdXNlIHByb3h5OwogCiAgIGlmKGlzX2Nvbm5lY3QpCkBAIC0xNzc3LDYgKzE3MTcsMTAgQEAKICAgICAgIGhbMF0gPSBkYXRhLT5zZXQuaGVhZGVyczsKICAgICBicmVhazsKICAgfQorI2Vsc2UKKyAgKHZvaWQpaXNfY29ubmVjdDsKKyAgaFswXSA9IGRhdGEtPnNldC5oZWFkZXJzOworI2VuZGlmCiAKICAgLyogbG9vcCB0aHJvdWdoIG9uZSBvciB0d28gbGlzdHMgKi8KICAgZm9yKGkgPSAwOyBpIDwgbnVtbGlzdHM7IGkrKykgewpAQCAtMTgwNCw3ICsxNzQ4LDcgQEAKICAgICAgICAgICAgICAgLyogY29weSB0aGUgc291cmNlICovCiAgICAgICAgICAgICAgIHNlbWljb2xvbnAgPSBzdHJkdXAoaGVhZGVycy0+ZGF0YSk7CiAgICAgICAgICAgICAgIGlmKCFzZW1pY29sb25wKSB7Ci0gICAgICAgICAgICAgICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJnJlcV9idWZmZXIpOworICAgICAgICAgICAgICAgIEN1cmxfZHluX2ZyZWUocmVxKTsKICAgICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAvKiBwdXQgYSBjb2xvbiB3aGVyZSB0aGUgc2VtaWNvbG9uIGlzICovCkBAIC0xODI4LDE2ICsxNzcyLDE2IEBACiAgICAgICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgICAgICAgICAgY2hhciAqY29tcGFyZSA9IHNlbWljb2xvbnAgPyBzZW1pY29sb25wIDogaGVhZGVycy0+ZGF0YTsKIAotICAgICAgICAgIGlmKGNvbm4tPmFsbG9jcHRyLmhvc3QgJiYKKyAgICAgICAgICBpZihkYXRhLT5zdGF0ZS5hcHRyLmhvc3QgJiYKICAgICAgICAgICAgICAvKiBhIEhvc3Q6IGhlYWRlciB3YXMgc2VudCBhbHJlYWR5LCBkb24ndCBwYXNzIG9uIGFueSBjdXN0b20gSG9zdDoKICAgICAgICAgICAgICAgICBoZWFkZXIgYXMgdGhhdCB3aWxsIHByb2R1Y2UgKnR3byogaW4gdGhlIHNhbWUgcmVxdWVzdCEgKi8KICAgICAgICAgICAgICBjaGVja3ByZWZpeCgiSG9zdDoiLCBjb21wYXJlKSkKICAgICAgICAgICAgIDsKLSAgICAgICAgICBlbHNlIGlmKGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNICYmCisgICAgICAgICAgZWxzZSBpZihkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNICYmCiAgICAgICAgICAgICAgICAgICAvKiB0aGlzIGhlYWRlciAoZXh0ZW5kZWQgYnkgZm9ybWRhdGEuYykgaXMgc2VudCBsYXRlciAqLwogICAgICAgICAgICAgICAgICAgY2hlY2twcmVmaXgoIkNvbnRlbnQtVHlwZToiLCBjb21wYXJlKSkKICAgICAgICAgICAgIDsKLSAgICAgICAgICBlbHNlIGlmKGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FICYmCisgICAgICAgICAgZWxzZSBpZihkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FICYmCiAgICAgICAgICAgICAgICAgICAvKiB0aGlzIGhlYWRlciBpcyBzZW50IGxhdGVyICovCiAgICAgICAgICAgICAgICAgICBjaGVja3ByZWZpeCgiQ29udGVudC1UeXBlOiIsIGNvbXBhcmUpKQogICAgICAgICAgICAgOwpAQCAtMTg0NiwxMiArMTc5MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgd2Ugd2lsbCBmb3JjZSBsZW5ndGggemVybyB0aGVuICovCiAgICAgICAgICAgICAgICAgICBjaGVja3ByZWZpeCgiQ29udGVudC1MZW5ndGg6IiwgY29tcGFyZSkpCiAgICAgICAgICAgICA7Ci0gICAgICAgICAgZWxzZSBpZihjb25uLT5hbGxvY3B0ci50ZSAmJgorICAgICAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUuYXB0ci50ZSAmJgogICAgICAgICAgICAgICAgICAgLyogd2hlbiBhc2tpbmcgZm9yIFRyYW5zZmVyLUVuY29kaW5nLCBkb24ndCBwYXNzIG9uIGEgY3VzdG9tCiAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uOiAqLwogICAgICAgICAgICAgICAgICAgY2hlY2twcmVmaXgoIkNvbm5lY3Rpb246IiwgY29tcGFyZSkpCiAgICAgICAgICAgICA7Ci0gICAgICAgICAgZWxzZSBpZigoY29ubi0+aHR0cHZlcnNpb24gPT0gMjApICYmCisgICAgICAgICAgZWxzZSBpZigoY29ubi0+aHR0cHZlcnNpb24gPj0gMjApICYmCiAgICAgICAgICAgICAgICAgICBjaGVja3ByZWZpeCgiVHJhbnNmZXItRW5jb2Rpbmc6IiwgY29tcGFyZSkpCiAgICAgICAgICAgICAvKiBIVFRQLzIgZG9lc24ndCBzdXBwb3J0IGNodW5rZWQgcmVxdWVzdHMgKi8KICAgICAgICAgICAgIDsKQEAgLTE4NjUsNyArMTgwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIXN0cmNhc2Vjb21wYXJlKGRhdGEtPnN0YXRlLmZpcnN0X2hvc3QsIGNvbm4tPmhvc3QubmFtZSkpKQogICAgICAgICAgICAgOwogICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIiVzXHJcbiIsIGNvbXBhcmUpOworICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkZihyZXEsICIlc1xyXG4iLCBjb21wYXJlKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYoc2VtaWNvbG9ucCkKICAgICAgICAgICAgIGZyZWUoc2VtaWNvbG9ucCk7CkBAIC0xODgxLDkgKzE4MjUsMTAgQEAKIH0KIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUEFSU0VEQVRFCi1DVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXIpCitDVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGR5bmJ1ZiAqcmVxKQogeworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgY29uc3Qgc3RydWN0IHRtICp0bTsKICAgc3RydWN0IHRtIGtlZXB0aW1lOwogICBDVVJMY29kZSByZXN1bHQ7CkBAIC0xOTE2LDYgKzE4NjEsMTEgQEAKICAgICBicmVhazsKICAgfQogCisgIGlmKEN1cmxfY2hlY2toZWFkZXJzKGNvbm4sIGNvbmRwKSkgeworICAgIC8qIEEgY3VzdG9tIGhlYWRlciB3YXMgc3BlY2lmaWVkOyBpdCB3aWxsIGJlIHNlbnQgaW5zdGVhZC4gKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKwogICAvKiBUaGUgSWYtTW9kaWZpZWQtU2luY2UgaGVhZGVyIGZhbWlseSBzaG91bGQgaGF2ZSB0aGVpciB0aW1lcyBzZXQgaW4KICAgICogR01UIGFzIFJGQzI2MTYgZGVmaW5lczogIkFsbCBIVFRQIGRhdGUvdGltZSBzdGFtcHMgTVVTVCBiZQogICAgKiByZXByZXNlbnRlZCBpbiBHcmVlbndpY2ggTWVhbiBUaW1lIChHTVQpLCB3aXRob3V0IGV4Y2VwdGlvbi4gRm9yIHRoZQpAQCAtMTkzNSwxNyArMTg4NSwxNyBAQAogICAgICAgICAgICAgdG0tPnRtX21pbiwKICAgICAgICAgICAgIHRtLT50bV9zZWMpOwogCi0gIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmcmVxX2J1ZmZlciwgZGF0ZXN0ciwgc3RybGVuKGRhdGVzdHIpKTsKKyAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKHJlcSwgZGF0ZXN0cik7CiAKICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbHNlCiAvKiBkaXNhYmxlZCAqLwotQ1VSTGNvZGUgQ3VybF9hZGRfdGltZWNvbmRpdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyKQorQ1VSTGNvZGUgQ3VybF9hZGRfdGltZWNvbmRpdGlvbihjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkeW5idWYgKnJlcSkKIHsKLSAgKHZvaWQpZGF0YTsKLSAgKHZvaWQpcmVxX2J1ZmZlcjsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpcmVxOwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAjZW5kaWYKQEAgLTE5NjgsNjMgKzE5MTgsNjYgQEAKICAgY29uc3QgY2hhciAqdGUgPSAiIjsgLyogdHJhbnNmZXItZW5jb2RpbmcgKi8KICAgY29uc3QgY2hhciAqcHRyOwogICBjb25zdCBjaGFyICpyZXF1ZXN0OwotICBDdXJsX0h0dHBSZXEgaHR0cHJlcSA9IGRhdGEtPnNldC5odHRwcmVxOworICBDdXJsX0h0dHBSZXEgaHR0cHJlcSA9IGRhdGEtPnN0YXRlLmh0dHByZXE7CiAjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpCiAgIGNoYXIgKmFkZGNvb2tpZXMgPSBOVUxMOwogI2VuZGlmCiAgIGN1cmxfb2ZmX3QgaW5jbHVkZWRfYm9keSA9IDA7CiAgIGNvbnN0IGNoYXIgKmh0dHBzdHJpbmc7Ci0gIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXI7CisgIHN0cnVjdCBkeW5idWYgcmVxOwogICBjdXJsX29mZl90IHBvc3RzaXplID0gMDsgLyogY3VybF9vZmZfdCB0byBoYW5kbGUgbGFyZ2UgZmlsZSBzaXplcyAqLworICBjaGFyICphbHR1c2VkID0gTlVMTDsKIAogICAvKiBBbHdheXMgY29uc2lkZXIgdGhlIERPIHBoYXNlIGRvbmUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBjYWxsLCBldmVuIGlmIHRoZXJlCiAgICAgIG1heSBiZSBwYXJ0cyBvZiB0aGUgcmVxdWVzdCB0aGF0IGlzIG5vdCB5ZXQgc2VudCwgc2luY2Ugd2UgY2FuIGRlYWwgd2l0aAogICAgICB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBpbiB0aGUgUEVSRk9STSBwaGFzZS4gKi8KICAgKmRvbmUgPSBUUlVFOwogCi0gIGlmKGNvbm4tPmh0dHB2ZXJzaW9uIDwgMjApIHsgLyogdW5sZXNzIHRoZSBjb25uZWN0aW9uIGlzIHJlLXVzZWQgYW5kIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwMiAqLwotICAgIHN3aXRjaChjb25uLT5uZWducG4pIHsKLSAgICBjYXNlIENVUkxfSFRUUF9WRVJTSU9OXzI6Ci0gICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDIwOyAvKiB3ZSBrbm93IHdlJ3JlIG9uIEhUVFAvMiBub3cgKi8KLQotICAgICAgcmVzdWx0ID0gQ3VybF9odHRwMl9zd2l0Y2hlZChjb25uLCBOVUxMLCAwKTsKLSAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOgotICAgICAgLyogY29udGludWUgd2l0aCBIVFRQLzEuMSB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkICovCi0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgLyogQ2hlY2sgaWYgdXNlciB3YW50cyB0byB1c2UgSFRUUC8yIHdpdGggY2xlYXIgVENQKi8KLSNpZmRlZiBVU0VfTkdIVFRQMgotICAgICAgaWYoY29ubi0+ZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID09Ci0gICAgICAgICBDVVJMX0hUVFBfVkVSU0lPTl8yX1BSSU9SX0tOT1dMRURHRSkgewotICAgICAgICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSAmJiAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkpIHsKLSAgICAgICAgICAvKiBXZSBkb24ndCBzdXBwb3J0IEhUVFAvMiBwcm94aWVzIHlldC4gQWxzbyBpdCdzIGRlYmF0YWJsZSB3aGV0aGVyCi0gICAgICAgICAgICAgb3Igbm90IHRoaXMgc2V0dGluZyBzaG91bGQgYXBwbHkgdG8gSFRUUC8yIHByb3hpZXMuICovCi0gICAgICAgICAgaW5mb2YoZGF0YSwgIklnbm9yaW5nIEhUVFAvMiBwcmlvciBrbm93bGVkZ2UgZHVlIHRvIHByb3h5XG4iKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiSFRUUC8yIG92ZXIgY2xlYW4gVENQXG4iKSk7Ci0gICAgICAgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMjA7CisgIGlmKGNvbm4tPnRyYW5zcG9ydCAhPSBUUk5TUFJUX1FVSUMpIHsKKyAgICBpZihjb25uLT5odHRwdmVyc2lvbiA8IDIwKSB7IC8qIHVubGVzcyB0aGUgY29ubmVjdGlvbiBpcyByZS11c2VkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBodHRwMiAqLworICAgICAgc3dpdGNoKGNvbm4tPm5lZ25wbikgeworICAgICAgY2FzZSBDVVJMX0hUVFBfVkVSU0lPTl8yOgorICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDIwOyAvKiB3ZSBrbm93IHdlJ3JlIG9uIEhUVFAvMiBub3cgKi8KIAogICAgICAgICByZXN1bHQgPSBDdXJsX2h0dHAyX3N3aXRjaGVkKGNvbm4sIE5VTEwsIDApOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfSFRUUF9WRVJTSU9OXzFfMToKKyAgICAgICAgLyogY29udGludWUgd2l0aCBIVFRQLzEuMSB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkICovCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLyogQ2hlY2sgaWYgdXNlciB3YW50cyB0byB1c2UgSFRUUC8yIHdpdGggY2xlYXIgVENQKi8KKyNpZmRlZiBVU0VfTkdIVFRQMgorICAgICAgICBpZihjb25uLT5kYXRhLT5zZXQuaHR0cHZlcnNpb24gPT0KKyAgICAgICAgICAgQ1VSTF9IVFRQX1ZFUlNJT05fMl9QUklPUl9LTk9XTEVER0UpIHsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICAgICAgaWYoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5KSB7CisgICAgICAgICAgICAvKiBXZSBkb24ndCBzdXBwb3J0IEhUVFAvMiBwcm94aWVzIHlldC4gQWxzbyBpdCdzIGRlYmF0YWJsZQorICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgdGhpcyBzZXR0aW5nIHNob3VsZCBhcHBseSB0byBIVFRQLzIgcHJveGllcy4gKi8KKyAgICAgICAgICAgIGluZm9mKGRhdGEsICJJZ25vcmluZyBIVFRQLzIgcHJpb3Iga25vd2xlZGdlIGR1ZSB0byBwcm94eVxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgIGJyZWFrOworICAgICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiSFRUUC8yIG92ZXIgY2xlYW4gVENQXG4iKSk7CisgICAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPSAyMDsKKworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cDJfc3dpdGNoZWQoY29ubiwgTlVMTCwgMCk7CisgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHByZXBhcmUgZm9yIGEgaHR0cDIgcmVxdWVzdCAqLworICAgICAgcmVzdWx0ID0gQ3VybF9odHRwMl9zZXR1cChjb25uKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgIH0KLSAgZWxzZSB7Ci0gICAgLyogcHJlcGFyZSBmb3IgYSBodHRwMiByZXF1ZXN0ICovCi0gICAgcmVzdWx0ID0gQ3VybF9odHRwMl9zZXR1cChjb25uKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KICAgaHR0cCA9IGRhdGEtPnJlcS5wcm90b3A7CiAgIERFQlVHQVNTRVJUKGh0dHApOwogCkBAIC0yMDgwLDggKzIwMzMsOCBAQAogICAgICB3aXRoIHRoZSB1c2VyLWFnZW50IHN0cmluZyBzcGVjaWZpZWQsIHdlIGVyYXNlIHRoZSBwcmV2aW91c2x5IG1hZGUgc3RyaW5nCiAgICAgIGhlcmUuICovCiAgIGlmKEN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJVc2VyLUFnZW50IikpIHsKLSAgICBmcmVlKGNvbm4tPmFsbG9jcHRyLnVhZ2VudCk7Ci0gICAgY29ubi0+YWxsb2NwdHIudWFnZW50ID0gTlVMTDsKKyAgICBmcmVlKGRhdGEtPnN0YXRlLmFwdHIudWFnZW50KTsKKyAgICBkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudCA9IE5VTEw7CiAgIH0KIAogICAvKiBzZXR1cCB0aGUgYXV0aGVudGljYXRpb24gaGVhZGVycyAqLwpAQCAtMjEwOSwxNCArMjA2MiwxNCBAQAogICBlbHNlCiAgICAgY29ubi0+Yml0cy5hdXRobmVnID0gRkFMU0U7CiAKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5yZWYpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIucmVmKTsKICAgaWYoZGF0YS0+Y2hhbmdlLnJlZmVyZXIgJiYgIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJSZWZlcmVyIikpIHsKLSAgICBjb25uLT5hbGxvY3B0ci5yZWYgPSBhcHJpbnRmKCJSZWZlcmVyOiAlc1xyXG4iLCBkYXRhLT5jaGFuZ2UucmVmZXJlcik7Ci0gICAgaWYoIWNvbm4tPmFsbG9jcHRyLnJlZikKKyAgICBkYXRhLT5zdGF0ZS5hcHRyLnJlZiA9IGFwcmludGYoIlJlZmVyZXI6ICVzXHJcbiIsIGRhdGEtPmNoYW5nZS5yZWZlcmVyKTsKKyAgICBpZighZGF0YS0+c3RhdGUuYXB0ci5yZWYpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogICBlbHNlCi0gICAgY29ubi0+YWxsb2NwdHIucmVmID0gTlVMTDsKKyAgICBkYXRhLT5zdGF0ZS5hcHRyLnJlZiA9IE5VTEw7CiAKICNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ09PS0lFUykKICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ09PS0lFXSAmJiAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvb2tpZSIpKQpAQCAtMjEyNSwxNSArMjA3OCwxNSBAQAogCiAgIGlmKCFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiQWNjZXB0LUVuY29kaW5nIikgJiYKICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddKSB7Ci0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpOwotICAgIGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyA9CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmFjY2VwdF9lbmNvZGluZyk7CisgICAgZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcgPQogICAgICAgYXByaW50ZigiQWNjZXB0LUVuY29kaW5nOiAlc1xyXG4iLCBkYXRhLT5zZXQuc3RyW1NUUklOR19FTkNPRElOR10pOwotICAgIGlmKCFjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpCisgICAgaWYoIWRhdGEtPnN0YXRlLmFwdHIuYWNjZXB0X2VuY29kaW5nKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIH0KICAgZWxzZSB7Ci0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpOwotICAgIGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyA9IE5VTEw7CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmFjY2VwdF9lbmNvZGluZyk7CisgICAgZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcgPSBOVUxMOwogICB9CiAKICNpZmRlZiBIQVZFX0xJQloKQEAgLTIxNDksNyArMjEwMiw3IEBACiAgICAgY2hhciAqY3B0ciA9IEN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJDb25uZWN0aW9uIik7CiAjZGVmaW5lIFRFX0hFQURFUiAiVEU6IGd6aXBcclxuIgogCi0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci50ZSk7CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnRlKTsKIAogICAgIGlmKGNwdHIpIHsKICAgICAgIGNwdHIgPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGNwdHIpOwpAQCAtMjE1OCwxMSArMjExMSwxMSBAQAogICAgIH0KIAogICAgIC8qIENyZWF0ZSB0aGUgKHVwZGF0ZWQpIENvbm5lY3Rpb246IGhlYWRlciAqLwotICAgIGNvbm4tPmFsbG9jcHRyLnRlID0gYXByaW50ZigiQ29ubmVjdGlvbjogJXMlc1RFXHJcbiIgVEVfSEVBREVSLAorICAgIGRhdGEtPnN0YXRlLmFwdHIudGUgPSBhcHJpbnRmKCJDb25uZWN0aW9uOiAlcyVzVEVcclxuIiBURV9IRUFERVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdHIgPyBjcHRyIDogIiIsIChjcHRyICYmICpjcHRyKSA/ICIsICI6IiIpOwogCiAgICAgZnJlZShjcHRyKTsKLSAgICBpZighY29ubi0+YWxsb2NwdHIudGUpCisgICAgaWYoIWRhdGEtPnN0YXRlLmFwdHIudGUpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogI2VuZGlmCkBAIC0yMjIwLDE0ICsyMTczLDE2IEBACiAgIGVsc2UgewogICAgIGlmKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9IVFRQKSAmJgogICAgICAgICgoKGh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX01JTUUgfHwgaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1RfRk9STSkgJiYKLSAgICAgICBodHRwLT5wb3N0c2l6ZSA8IDApIHx8Ci0gICAgICAgKGRhdGEtPnNldC51cGxvYWQgJiYgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA9PSAtMSkpKSB7CisgICAgICAgICBodHRwLT5wb3N0c2l6ZSA8IDApIHx8CisgICAgICAgICgoZGF0YS0+c2V0LnVwbG9hZCB8fCBodHRwcmVxID09IEhUVFBSRVFfUE9TVCkgJiYKKyAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPT0gLTEpKSkgewogICAgICAgaWYoY29ubi0+Yml0cy5hdXRobmVnKQogICAgICAgICAvKiBkb24ndCBlbmFibGUgY2h1bmtlZCBkdXJpbmcgYXV0aCBuZWcgKi8KICAgICAgICAgOwogICAgICAgZWxzZSBpZih1c2VfaHR0cF8xXzFwbHVzKGRhdGEsIGNvbm4pKSB7Ci0gICAgICAgIC8qIEhUVFAsIHVwbG9hZCwgdW5rbm93biBmaWxlIHNpemUgYW5kIG5vdCBIVFRQIDEuMCAqLwotICAgICAgICBkYXRhLT5yZXEudXBsb2FkX2NodW5reSA9IFRSVUU7CisgICAgICAgIGlmKGNvbm4tPmh0dHB2ZXJzaW9uIDwgMjApCisgICAgICAgICAgLyogSFRUUCwgdXBsb2FkLCB1bmtub3duIGZpbGUgc2l6ZSBhbmQgbm90IEhUVFAgMS4wICovCisgICAgICAgICAgZGF0YS0+cmVxLnVwbG9hZF9jaHVua3kgPSBUUlVFOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJDaHVua3kgdXBsb2FkIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSFRUUCAxLjAiKTsKQEAgLTIyNDMsNyArMjE5OCw3IEBACiAgICAgICB0ZSA9ICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG4iOwogICB9CiAKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ob3N0KTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmhvc3QpOwogCiAgIHB0ciA9IEN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJIb3N0Iik7CiAgIGlmKHB0ciAmJiAoIWRhdGEtPnN0YXRlLnRoaXNfaXNfYV9mb2xsb3cgfHwKQEAgLTIyNzgsMTkgKzIyMzMsMTkgQEAKICAgICAgICAgaWYoY29sb24pCiAgICAgICAgICAgKmNvbG9uID0gMDsgLyogVGhlIGhvc3QgbXVzdCBub3QgaW5jbHVkZSBhbiBlbWJlZGRlZCBwb3J0IG51bWJlciAqLwogICAgICAgfQotICAgICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5jb29raWVob3N0KTsKLSAgICAgIGNvbm4tPmFsbG9jcHRyLmNvb2tpZWhvc3QgPSBjb29raWVob3N0OworICAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmNvb2tpZWhvc3QpOworICAgICAgZGF0YS0+c3RhdGUuYXB0ci5jb29raWVob3N0ID0gY29va2llaG9zdDsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmKHN0cmNtcCgiSG9zdDoiLCBwdHIpKSB7Ci0gICAgICBjb25uLT5hbGxvY3B0ci5ob3N0ID0gYXByaW50ZigiSG9zdDolc1xyXG4iLCAmcHRyWzVdKTsKLSAgICAgIGlmKCFjb25uLT5hbGxvY3B0ci5ob3N0KQorICAgICAgZGF0YS0+c3RhdGUuYXB0ci5ob3N0ID0gYXByaW50ZigiSG9zdDolc1xyXG4iLCAmcHRyWzVdKTsKKyAgICAgIGlmKCFkYXRhLT5zdGF0ZS5hcHRyLmhvc3QpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIH0KICAgICBlbHNlCiAgICAgICAvKiB3aGVuIGNsZWFyaW5nIHRoZSBoZWFkZXIgKi8KLSAgICAgIGNvbm4tPmFsbG9jcHRyLmhvc3QgPSBOVUxMOworICAgICAgZGF0YS0+c3RhdGUuYXB0ci5ob3N0ID0gTlVMTDsKICAgfQogICBlbHNlIHsKICAgICAvKiBXaGVuIGJ1aWxkaW5nIEhvc3Q6IGhlYWRlcnMsIHdlIG11c3QgcHV0IHRoZSBob3N0IG5hbWUgd2l0aGluCkBAIC0yMzAyLDE4ICsyMjU3LDE4IEBACiAgICAgICAgIChjb25uLT5yZW1vdGVfcG9ydCA9PSBQT1JUX0hUVFApKSApCiAgICAgICAvKiBpZihIVFRQUyBvbiBwb3J0IDQ0MykgT1IgKEhUVFAgb24gcG9ydCA4MCkgdGhlbiBkb24ndCBpbmNsdWRlCiAgICAgICAgICB0aGUgcG9ydCBudW1iZXIgaW4gdGhlIGhvc3Qgc3RyaW5nICovCi0gICAgICBjb25uLT5hbGxvY3B0ci5ob3N0ID0gYXByaW50ZigiSG9zdDogJXMlcyVzXHJcbiIsCisgICAgICBkYXRhLT5zdGF0ZS5hcHRyLmhvc3QgPSBhcHJpbnRmKCJIb3N0OiAlcyVzJXNcclxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuaXB2Nl9pcD8iWyI6IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5pcHY2X2lwPyJdIjoiIik7CiAgICAgZWxzZQotICAgICAgY29ubi0+YWxsb2NwdHIuaG9zdCA9IGFwcmludGYoIkhvc3Q6ICVzJXMlczolZFxyXG4iLAorICAgICAgZGF0YS0+c3RhdGUuYXB0ci5ob3N0ID0gYXByaW50ZigiSG9zdDogJXMlcyVzOiVkXHJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmlwdjZfaXA/IlsiOiIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuaXB2Nl9pcD8iXSI6IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5yZW1vdGVfcG9ydCk7CiAKLSAgICBpZighY29ubi0+YWxsb2NwdHIuaG9zdCkKKyAgICBpZighZGF0YS0+c3RhdGUuYXB0ci5ob3N0KQogICAgICAgLyogd2l0aG91dCBIb3N0OiB3ZSBjYW4ndCBtYWtlIGEgbmljZSByZXF1ZXN0ICovCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQpAQCAtMjMyOCw3ICsyMjgzLDYgQEAKIAogICAgIC8qIGFuZCBubyBmcmFnbWVudCBwYXJ0ICovCiAgICAgQ1VSTFVjb2RlIHVjOwotICAgIGNoYXIgKnVybDsKICAgICBDVVJMVSAqaCA9IGN1cmxfdXJsX2R1cChkYXRhLT5zdGF0ZS51aCk7CiAgICAgaWYoIWgpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKQEAgLTIzNTksMTkgKzIzMTMsMTUgQEAKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICB9CiAgICAgfQotICAgIC8qIG5vdyBleHRyYWN0IHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgVVJMICovCi0gICAgdWMgPSBjdXJsX3VybF9nZXQoaCwgQ1VSTFVQQVJUX1VSTCwgJnVybCwgMCk7CisgICAgLyogRXh0cmFjdCB0aGUgVVJMIHRvIHVzZSBpbiB0aGUgcmVxdWVzdC4gU3RvcmUgaW4gU1RSSU5HX1RFTVBfVVJMIGZvcgorICAgICAgIGNsZWFuLXVwIHJlYXNvbnMgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYmVmb3JlIHRoZSBmcmVlKCkgZnVydGhlcgorICAgICAgIGRvd24uICovCisgICAgdWMgPSBjdXJsX3VybF9nZXQoaCwgQ1VSTFVQQVJUX1VSTCwgJmRhdGEtPnNldC5zdHJbU1RSSU5HX1RFTVBfVVJMXSwgMCk7CiAgICAgaWYodWMpIHsKICAgICAgIGN1cmxfdXJsX2NsZWFudXAoaCk7CiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICB9CiAKLSAgICBpZihkYXRhLT5jaGFuZ2UudXJsX2FsbG9jKQotICAgICAgZnJlZShkYXRhLT5jaGFuZ2UudXJsKTsKLQotICAgIGRhdGEtPmNoYW5nZS51cmwgPSB1cmw7Ci0gICAgZGF0YS0+Y2hhbmdlLnVybF9hbGxvYyA9IFRSVUU7Ci0KICAgICBjdXJsX3VybF9jbGVhbnVwKGgpOwogCiAgICAgaWYoc3RyY2FzZWNvbXBhcmUoImZ0cCIsIGRhdGEtPnN0YXRlLnVwLnNjaGVtZSkpIHsKQEAgLTIzOTksNyArMjM0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5wcmVmZXJfYXNjaWkgPyAnYScgOiAnaScpOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpZihjb25uLT5iaXRzLnVzZXJfcGFzc3dkICYmICFjb25uLT5iaXRzLnVzZXJwd2RfaW5fdXJsKQorICAgICAgaWYoY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkKICAgICAgICAgcGFzdGVfZnRwX3VzZXJwd2QgPSBUUlVFOwogICAgIH0KICAgfQpAQCAtMjQ4OSwyMSArMjQzOSwyMSBAQAogICAgIGlmKCgoaHR0cHJlcSA9PSBIVFRQUkVRX0dFVCkgfHwgKGh0dHByZXEgPT0gSFRUUFJFUV9IRUFEKSkgJiYKICAgICAgICAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIlJhbmdlIikpIHsKICAgICAgIC8qIGlmIGEgbGluZSBsaWtlIHRoaXMgd2FzIGFscmVhZHkgYWxsb2NhdGVkLCBmcmVlIHRoZSBwcmV2aW91cyBvbmUgKi8KLSAgICAgIGZyZWUoY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lKTsKLSAgICAgIGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSA9IGFwcmludGYoIlJhbmdlOiBieXRlcz0lc1xyXG4iLAorICAgICAgZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSk7CisgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSA9IGFwcmludGYoIlJhbmdlOiBieXRlcz0lc1xyXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yYW5nZSk7CiAgICAgfQogICAgIGVsc2UgaWYoKGh0dHByZXEgPT0gSFRUUFJFUV9QT1NUIHx8IGh0dHByZXEgPT0gSFRUUFJFUV9QVVQpICYmCiAgICAgICAgICAgICAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtUmFuZ2UiKSkgewogCiAgICAgICAvKiBpZiBhIGxpbmUgbGlrZSB0aGlzIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCwgZnJlZSB0aGUgcHJldmlvdXMgb25lICovCi0gICAgICBmcmVlKGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSk7CisgICAgICBmcmVlKGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lKTsKIAogICAgICAgaWYoZGF0YS0+c2V0LnNldF9yZXN1bWVfZnJvbSA8IDApIHsKICAgICAgICAgLyogVXBsb2FkIHJlc3VtZSB3YXMgYXNrZWQgZm9yLCBidXQgd2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUKICAgICAgICAgICAgcmVtb3RlIHBhcnQgc28gd2UgdGVsbCB0aGUgc2VydmVyIChhbmQgYWN0IGFjY29yZGluZ2x5KSB0aGF0IHdlCiAgICAgICAgICAgIHVwbG9hZCB0aGUgd2hvbGUgZmlsZSAoYWdhaW4pICovCi0gICAgICAgIGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSA9CisgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lID0KICAgICAgICAgICBhcHJpbnRmKCJDb250ZW50LVJhbmdlOiBieXRlcyAwLSUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKICAgICAgICAgICAgICAgICAgICIvJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiXHJcbiIsCiAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC0gMSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7CkBAIC0yNTEzLDcgKzI0NjMsNyBAQAogICAgICAgICAvKiBUaGlzIGlzIGJlY2F1c2UgInJlc3VtZSIgd2FzIHNlbGVjdGVkICovCiAgICAgICAgIGN1cmxfb2ZmX3QgdG90YWxfZXhwZWN0ZWRfc2l6ZSA9CiAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gKyBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOwotICAgICAgICBjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmUgPQorICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSA9CiAgICAgICAgICAgYXByaW50ZigiQ29udGVudC1SYW5nZTogYnl0ZXMgJXMlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCiAgICAgICAgICAgICAgICAgICAiLyUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIlxyXG4iLAogICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmFuZ2UsIHRvdGFsX2V4cGVjdGVkX3NpemUtMSwKQEAgLTI1MjIsMTEgKzI0NzIsMTEgQEAKICAgICAgIGVsc2UgewogICAgICAgICAvKiBSYW5nZSB3YXMgc2VsZWN0ZWQgYW5kIHRoZW4gd2UganVzdCBwYXNzIHRoZSBpbmNvbWluZyByYW5nZSBhbmQKICAgICAgICAgICAgYXBwZW5kIHRvdGFsIHNpemUgKi8KLSAgICAgICAgY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lID0KKyAgICAgICAgZGF0YS0+c3RhdGUuYXB0ci5yYW5nZWxpbmUgPQogICAgICAgICAgIGFwcmludGYoIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzICVzLyUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIlxyXG4iLAogICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmFuZ2UsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOwogICAgICAgfQotICAgICAgaWYoIWNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSkKKyAgICAgIGlmKCFkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSkKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgfQogICB9CkBAIC0yNTM0LDE0ICsyNDg0LDExIEBACiAgIGh0dHBzdHJpbmcgPSBnZXRfaHR0cF9zdHJpbmcoZGF0YSwgY29ubik7CiAKICAgLyogaW5pdGlhbGl6ZSBhIGR5bmFtaWMgc2VuZC1idWZmZXIgKi8KLSAgcmVxX2J1ZmZlciA9IEN1cmxfYWRkX2J1ZmZlcl9pbml0KCk7Ci0KLSAgaWYoIXJlcV9idWZmZXIpCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIEN1cmxfZHluX2luaXQoJnJlcSwgRFlOX0hUVFBfUkVRVUVTVCk7CiAKICAgLyogYWRkIHRoZSBtYWluIHJlcXVlc3Qgc3R1ZmYgKi8KICAgLyogR0VUL0hFQUQvUE9TVC9QVVQgKi8KLSAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIiVzICIsIHJlcXVlc3QpOworICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICIlcyAiLCByZXF1ZXN0KTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTI1NTAsNzIgKzI0OTcsOTIgQEAKICAgICBxdWVyeSA9IE5VTEw7CiAgIH0KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgLyogdXJsICovCiAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmICFjb25uLT5iaXRzLnR1bm5lbF9wcm94eSkgewotICAgIGNoYXIgKnVybCA9IGRhdGEtPmNoYW5nZS51cmw7Ci0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCB1cmwsIHN0cmxlbih1cmwpKTsKKyAgICBjaGFyICp1cmwgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19URU1QX1VSTF07CisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsIHVybCk7CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zZXQuc3RyW1NUUklOR19URU1QX1VSTF0pOwogICB9Ci0gIGVsc2UgaWYocGFzdGVfZnRwX3VzZXJwd2QpCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgImZ0cDovLyVzOiVzQCVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsIGNvbm4tPnBhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggKyBzaXplb2YoImZ0cDovLyIpIC0gMSk7CisgIGVsc2UKKyNlbmRpZgorICBpZihwYXN0ZV9mdHBfdXNlcnB3ZCkKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICJmdHA6Ly8lczolc0AlcyIsIGNvbm4tPnVzZXIsIGNvbm4tPnBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggKyBzaXplb2YoImZ0cDovLyIpIC0gMSk7CiAgIGVsc2UgewotICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmcmVxX2J1ZmZlciwgcGF0aCwgc3RybGVuKHBhdGgpKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgcGF0aCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBpZihxdWVyeSkKLSAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsICI/JXMiLCBxdWVyeSk7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICI/JXMiLCBxdWVyeSk7CiAgIH0KICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKKyNpZmRlZiBVU0VfQUxUU1ZDCisgIGlmKGNvbm4tPmJpdHMuYWx0dXNlZCAmJiAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkFsdC1Vc2VkIikpIHsKKyAgICBhbHR1c2VkID0gYXByaW50ZigiQWx0LVVzZWQ6ICVzOiVkXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Y29ubl90b19ob3N0Lm5hbWUsIGNvbm4tPmNvbm5fdG9fcG9ydCk7CisgICAgaWYoIWFsdHVzZWQpIHsKKyAgICAgIEN1cmxfZHluX2ZyZWUoJnJlcSk7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKyNlbmRpZgogICByZXN1bHQgPQotICAgIEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIGZ0cCB0eXBlY29kZSAoO3R5cGU9eCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICIgSFRUUC8lc1xyXG4iIC8qIEhUVFAgdmVyc2lvbiAqLwotICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBob3N0ICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHByb3h5dXNlcnB3ZCAqLwotICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiB1c2VycHdkICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHJhbmdlICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHVzZXIgYWdlbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0ICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIFRFOiAqLwotICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBhY2NlcHQtZW5jb2RpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcmVmZXJlciAqLwotICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBQcm94eS1Db25uZWN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAiJXMiLC8qIHRyYW5zZmVyLWVuY29kaW5nICovCisgICAgQ3VybF9keW5fYWRkZigmcmVxLAorICAgICAgICAgICAgICAgICAgIiVzIiAvKiBmdHAgdHlwZWNvZGUgKDt0eXBlPXgpICovCisgICAgICAgICAgICAgICAgICAiIEhUVFAvJXNcclxuIiAvKiBIVFRQIHZlcnNpb24gKi8KKyAgICAgICAgICAgICAgICAgICIlcyIgLyogaG9zdCAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiBwcm94eXVzZXJwd2QgKi8KKyAgICAgICAgICAgICAgICAgICIlcyIgLyogdXNlcnB3ZCAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiByYW5nZSAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiB1c2VyIGFnZW50ICovCisgICAgICAgICAgICAgICAgICAiJXMiIC8qIGFjY2VwdCAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiBURTogKi8KKyAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0LWVuY29kaW5nICovCisgICAgICAgICAgICAgICAgICAiJXMiIC8qIHJlZmVyZXIgKi8KKyAgICAgICAgICAgICAgICAgICIlcyIgLyogUHJveHktQ29ubmVjdGlvbiAqLworICAgICAgICAgICAgICAgICAgIiVzIiAvKiB0cmFuc2Zlci1lbmNvZGluZyAqLworICAgICAgICAgICAgICAgICAgIiVzIiwvKiBBbHQtVXNlZCAqLwogCi0gICAgICAgICAgICAgICAgICAgICBmdHBfdHlwZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICBodHRwc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgKGNvbm4tPmFsbG9jcHRyLmhvc3Q/Y29ubi0+YWxsb2NwdHIuaG9zdDoiIiksCi0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2Q/Ci0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2Q6IiIsCi0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci51c2VycHdkP2Nvbm4tPmFsbG9jcHRyLnVzZXJwd2Q6IiIsCi0gICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUudXNlX3JhbmdlICYmIGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSk/Ci0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmU6IiIsCi0gICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfVVNFUkFHRU5UXSAmJgotICAgICAgICAgICAgICAgICAgICAgICpkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdICYmCi0gICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIudWFnZW50KT8KLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLnVhZ2VudDoiIiwKLSAgICAgICAgICAgICAgICAgICAgIGh0dHAtPnBfYWNjZXB0P2h0dHAtPnBfYWNjZXB0OiIiLAotICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIudGU/Y29ubi0+YWxsb2NwdHIudGU6IiIsCi0gICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddICYmCi0gICAgICAgICAgICAgICAgICAgICAgKmRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSAmJgotICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyk/Ci0gICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2Rpbmc6IiIsCi0gICAgICAgICAgICAgICAgICAgICAoZGF0YS0+Y2hhbmdlLnJlZmVyZXIgJiYgY29ubi0+YWxsb2NwdHIucmVmKT8KLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLnJlZjoiIiAvKiBSZWZlcmVyOiA8ZGF0YT4gKi8sCi0gICAgICAgICAgICAgICAgICAgICAoY29ubi0+Yml0cy5odHRwcHJveHkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAhQ3VybF9jaGVja1Byb3h5aGVhZGVycyhjb25uLCAiUHJveHktQ29ubmVjdGlvbiIpKT8KLSAgICAgICAgICAgICAgICAgICAgICJQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlXHJcbiI6IiIsCi0gICAgICAgICAgICAgICAgICAgICB0ZQorICAgICAgICAgICAgICAgICAgZnRwX3R5cGVjb2RlLAorICAgICAgICAgICAgICAgICAgaHR0cHN0cmluZywKKyAgICAgICAgICAgICAgICAgIChkYXRhLT5zdGF0ZS5hcHRyLmhvc3Q/ZGF0YS0+c3RhdGUuYXB0ci5ob3N0OiIiKSwKKyAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIucHJveHl1c2VycHdkPworICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2Q6IiIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2Q/ZGF0YS0+c3RhdGUuYXB0ci51c2VycHdkOiIiLAorICAgICAgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLnVzZV9yYW5nZSAmJiBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZSk/CisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZToiIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdICYmCisgICAgICAgICAgICAgICAgICAgKmRhdGEtPnNldC5zdHJbU1RSSU5HX1VTRVJBR0VOVF0gJiYKKyAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudCk/CisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudDoiIiwKKyAgICAgICAgICAgICAgICAgIGh0dHAtPnBfYWNjZXB0P2h0dHAtPnBfYWNjZXB0OiIiLAorICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXB0ci50ZT9kYXRhLT5zdGF0ZS5hcHRyLnRlOiIiLAorICAgICAgICAgICAgICAgICAgKGRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSAmJgorICAgICAgICAgICAgICAgICAgICpkYXRhLT5zZXQuc3RyW1NUUklOR19FTkNPRElOR10gJiYKKyAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLmFjY2VwdF9lbmNvZGluZyk/CisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLmFjY2VwdF9lbmNvZGluZzoiIiwKKyAgICAgICAgICAgICAgICAgIChkYXRhLT5jaGFuZ2UucmVmZXJlciAmJiBkYXRhLT5zdGF0ZS5hcHRyLnJlZik/CisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnJlZjoiIiAvKiBSZWZlcmVyOiA8ZGF0YT4gKi8sCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgICAgICAgICAgICAgKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmCisgICAgICAgICAgICAgICAgICAgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5ICYmCisgICAgICAgICAgICAgICAgICAgIUN1cmxfY2hlY2tQcm94eWhlYWRlcnMoY29ubiwgIlByb3h5LUNvbm5lY3Rpb24iKSk/CisgICAgICAgICAgICAgICAgICAiUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxyXG4iOiIiLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICIiLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICB0ZSwKKyAgICAgICAgICAgICAgICAgIGFsdHVzZWQgPyBhbHR1c2VkIDogIiIKICAgICAgICk7CiAKICAgLyogY2xlYXIgdXNlcnB3ZCBhbmQgcHJveHl1c2VycHdkIHRvIGF2b2lkIHJlLXVzaW5nIG9sZCBjcmVkZW50aWFscwogICAgKiBmcm9tIHJlLXVzZWQgY29ubmVjdGlvbnMgKi8KLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci51c2VycHdkKTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2QpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCk7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2QpOworICBmcmVlKGFsdHVzZWQpOwogCiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjYyNSw3ICsyNTkyLDcgQEAKICAgICAgKGRhdGEtPnNldC5odHRwdmVyc2lvbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yKSkgewogICAgIC8qIGFwcGVuZCBIVFRQMiB1cGdyYWRlIG1hZ2ljIHN0dWZmIHRvIHRoZSBIVFRQIHJlcXVlc3QgaWYgaXQgaXNuJ3QgZG9uZQogICAgICAgIG92ZXIgU1NMICovCi0gICAgcmVzdWx0ID0gQ3VybF9odHRwMl9yZXF1ZXN0X3VwZ3JhZGUocmVxX2J1ZmZlciwgY29ubik7CisgICAgcmVzdWx0ID0gQ3VybF9odHRwMl9yZXF1ZXN0X3VwZ3JhZGUoJnJlcSwgY29ubik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQpAQCAtMjYzNSwxMSArMjYwMiwxMSBAQAogICAgIHN0cnVjdCBDb29raWUgKmNvID0gTlVMTDsgLyogbm8gY29va2llcyBmcm9tIHN0YXJ0ICovCiAgICAgaW50IGNvdW50ID0gMDsKIAotICAgIGlmKGRhdGEtPmNvb2tpZXMpIHsKKyAgICBpZihkYXRhLT5jb29raWVzICYmIGRhdGEtPnN0YXRlLmNvb2tpZV9lbmdpbmUpIHsKICAgICAgIEN1cmxfc2hhcmVfbG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKICAgICAgIGNvID0gQ3VybF9jb29raWVfZ2V0bGlzdChkYXRhLT5jb29raWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLmNvb2tpZWhvc3Q/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIuY29va2llaG9zdDpob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIuY29va2llaG9zdD8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLmNvb2tpZWhvc3Q6aG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS51cC5wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCZDVVJMUFJPVE9fSFRUUFMpPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUU6RkFMU0UpOwpAQCAtMjY1MSwxMyArMjYxOCwxMiBAQAogICAgICAgd2hpbGUoY28pIHsKICAgICAgICAgaWYoY28tPnZhbHVlKSB7CiAgICAgICAgICAgaWYoMCA9PSBjb3VudCkgewotICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIkNvb2tpZTogIik7CisgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIkNvb2tpZTogIik7CiAgICAgICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzJXM9JXMiLCBjb3VudD8iOyAiOiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28tPm5hbWUsIGNvLT52YWx1ZSk7CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkZigmcmVxLCAiJXMlcz0lcyIsIGNvdW50PyI7ICI6IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjby0+bmFtZSwgY28tPnZhbHVlKTsKICAgICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjb3VudCsrOwpAQCAtMjY2OCwyNiArMjYzNCwyNSBAQAogICAgIH0KICAgICBpZihhZGRjb29raWVzICYmICFyZXN1bHQpIHsKICAgICAgIGlmKCFjb3VudCkKLSAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIkNvb2tpZTogIik7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCAiQ29va2llOiAiKTsKICAgICAgIGlmKCFyZXN1bHQpIHsKLSAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIiVzJXMiLCBjb3VudD8iOyAiOiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGNvb2tpZXMpOworICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICIlcyVzIiwgY291bnQ/IjsgIjoiIiwgYWRkY29va2llcyk7CiAgICAgICAgIGNvdW50Kys7CiAgICAgICB9CiAgICAgfQogICAgIGlmKGNvdW50ICYmICFyZXN1bHQpCi0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlxyXG4iKTsKIAogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KICNlbmRpZgogCi0gIHJlc3VsdCA9IEN1cmxfYWRkX3RpbWVjb25kaXRpb24oZGF0YSwgcmVxX2J1ZmZlcik7CisgIHJlc3VsdCA9IEN1cmxfYWRkX3RpbWVjb25kaXRpb24oY29ubiwgJnJlcSk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCi0gIHJlc3VsdCA9IEN1cmxfYWRkX2N1c3RvbV9oZWFkZXJzKGNvbm4sIEZBTFNFLCByZXFfYnVmZmVyKTsKKyAgcmVzdWx0ID0gQ3VybF9hZGRfY3VzdG9tX2hlYWRlcnMoY29ubiwgRkFMU0UsICZyZXEpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjcxMCwyMCArMjY3NSwyMCBAQAogICAgIGlmKChwb3N0c2l6ZSAhPSAtMSkgJiYgIWRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ICYmCiAgICAgICAgKGNvbm4tPmJpdHMuYXV0aG5lZyB8fCAhQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtTGVuZ3RoIikpKSB7CiAgICAgICAvKiBvbmx5IGFkZCBDb250ZW50LUxlbmd0aCBpZiBub3QgdXBsb2FkaW5nIGNodW5rZWQgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LUxlbmd0aDogJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHJcbiIsIHBvc3RzaXplKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZGYoJnJlcSwgIkNvbnRlbnQtTGVuZ3RoOiAlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcclxuIiwgcG9zdHNpemUpOwogICAgICAgaWYocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmKHBvc3RzaXplICE9IDApIHsKLSAgICAgIHJlc3VsdCA9IGV4cGVjdDEwMChkYXRhLCBjb25uLCByZXFfYnVmZmVyKTsKKyAgICAgIHJlc3VsdCA9IGV4cGVjdDEwMChkYXRhLCBjb25uLCAmcmVxKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7IC8qIGVuZCBvZiBoZWFkZXJzICovCisgICAgLyogZW5kIG9mIGhlYWRlcnMgKi8KKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlxyXG4iKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0yNzMxLDggKzI2OTYsOCBAQAogICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgcG9zdHNpemUpOwogCiAgICAgLyogdGhpcyBzZW5kcyB0aGUgYnVmZmVyIGFuZCBmcmVlcyBhbGwgdGhlIGJ1ZmZlciByZXNvdXJjZXMgKi8KLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZCgmcmVxX2J1ZmZlciwgY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsIEZJUlNUU09DS0VUKTsKKyAgICByZXN1bHQgPSBDdXJsX2J1ZmZlcl9zZW5kKCZyZXEsIGNvbm4sICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJUlNUU09DS0VUKTsKICAgICBpZihyZXN1bHQpCiAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgUFVUIHJlcXVlc3QiKTsKICAgICBlbHNlCkBAIC0yNzQ4LDEyICsyNzEzLDEyIEBACiAgICAgLyogVGhpcyBpcyBmb3JtIHBvc3RpbmcgdXNpbmcgbWltZSBkYXRhLiAqLwogICAgIGlmKGNvbm4tPmJpdHMuYXV0aG5lZykgewogICAgICAgLyogbm90aGluZyB0byBwb3N0ISAqLwotICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIkNvbnRlbnQtTGVuZ3RoOiAwXHJcblxyXG4iKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCAiQ29udGVudC1MZW5ndGg6IDBcclxuXHJcbiIpOwogICAgICAgaWYocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZCgmcmVxX2J1ZmZlciwgY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICAgICAgcmVzdWx0ID0gQ3VybF9idWZmZXJfc2VuZCgmcmVxLCBjb25uLCAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJUlNUU09DS0VUKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIFBPU1QgcmVxdWVzdCIpOwogICAgICAgZWxzZQpAQCAtMjc3MSw5ICsyNzM2LDkgQEAKICAgICAgICAoY29ubi0+Yml0cy5hdXRobmVnIHx8ICFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiQ29udGVudC1MZW5ndGgiKSkpIHsKICAgICAgIC8qIHdlIGFsbG93IHJlcGxhY2luZyB0aGlzIGhlYWRlciBpZiBub3QgZHVyaW5nIGF1dGggbmVnb3RpYXRpb24sCiAgICAgICAgICBhbHRob3VnaCBpdCBpc24ndCB2ZXJ5IHdpc2UgdG8gYWN0dWFsbHkgc2V0IHlvdXIgb3duICovCi0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxyXG4iLCBwb3N0c2l6ZSk7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LUxlbmd0aDogJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHJcbiIsIHBvc3RzaXplKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yNzg0LDcgKzI3NDksNyBAQAogICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmhkcjsKIAogICAgICAgZm9yKGhkciA9IGh0dHAtPnNlbmRpdC0+Y3VybGhlYWRlcnM7IGhkcjsgaGRyID0gaGRyLT5uZXh0KSB7Ci0gICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsICIlc1xyXG4iLCBoZHItPmRhdGEpOworICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICIlc1xyXG4iLCBoZHItPmRhdGEpOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KQEAgLTI4MDEsNyArMjc2Niw3IEBACiAgICAgICAgIEN1cmxfY29tcGFyZWhlYWRlcihwdHIsICJFeHBlY3Q6IiwgIjEwMC1jb250aW51ZSIpOwogICAgIH0KICAgICBlbHNlIGlmKHBvc3RzaXplID4gRVhQRUNUXzEwMF9USFJFU0hPTEQgfHwgcG9zdHNpemUgPCAwKSB7Ci0gICAgICByZXN1bHQgPSBleHBlY3QxMDAoZGF0YSwgY29ubiwgcmVxX2J1ZmZlcik7CisgICAgICByZXN1bHQgPSBleHBlY3QxMDAoZGF0YSwgY29ubiwgJnJlcSk7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjgwOSw3ICsyNzc0LDcgQEAKICAgICAgIGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlciA9IEZBTFNFOwogCiAgICAgLyogbWFrZSB0aGUgcmVxdWVzdCBlbmQgaW4gYSB0cnVlIENSTEYgKi8KLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7CisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsICJcclxuIik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjgyMiw4ICsyNzg3LDggQEAKICAgICBodHRwLT5zZW5kaW5nID0gSFRUUFNFTkRfQk9EWTsKIAogICAgIC8qIHRoaXMgc2VuZHMgdGhlIGJ1ZmZlciBhbmQgZnJlZXMgYWxsIHRoZSBidWZmZXIgcmVzb3VyY2VzICovCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQoJnJlcV9idWZmZXIsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLCBGSVJTVFNPQ0tFVCk7CisgICAgcmVzdWx0ID0gQ3VybF9idWZmZXJfc2VuZCgmcmVxLCBjb25uLCAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIFBPU1QgcmVxdWVzdCIpOwogICAgIGVsc2UKQEAgLTI4NTEsMTcgKzI4MTYsMTUgQEAKICAgICAgICAoY29ubi0+Yml0cy5hdXRobmVnIHx8ICFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiQ29udGVudC1MZW5ndGgiKSkpIHsKICAgICAgIC8qIHdlIGFsbG93IHJlcGxhY2luZyB0aGlzIGhlYWRlciBpZiBub3QgZHVyaW5nIGF1dGggbmVnb3RpYXRpb24sCiAgICAgICAgICBhbHRob3VnaCBpdCBpc24ndCB2ZXJ5IHdpc2UgdG8gYWN0dWFsbHkgc2V0IHlvdXIgb3duICovCi0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxyXG4iLCBwb3N0c2l6ZSk7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICJDb250ZW50LUxlbmd0aDogJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHJcbiIsIHBvc3RzaXplKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZighQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtVHlwZSIpKSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi8iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIik7CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjg3Niw3ICsyODM5LDcgQEAKICAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKHB0ciwgIkV4cGVjdDoiLCAiMTAwLWNvbnRpbnVlIik7CiAgICAgfQogICAgIGVsc2UgaWYocG9zdHNpemUgPiBFWFBFQ1RfMTAwX1RIUkVTSE9MRCB8fCBwb3N0c2l6ZSA8IDApIHsKLSAgICAgIHJlc3VsdCA9IGV4cGVjdDEwMChkYXRhLCBjb25uLCByZXFfYnVmZmVyKTsKKyAgICAgIHJlc3VsdCA9IGV4cGVjdDEwMChkYXRhLCBjb25uLCAmcmVxKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yODk3LDMxICsyODYwLDMyIEBACiAgICAgICAgICAgIGlzIG5vIG1hZ2ljIGxpbWl0IGJ1dCBvbmx5IHNldCB0byBwcmV2ZW50IHJlYWxseSBodWdlIFBPU1RzIHRvCiAgICAgICAgICAgIGdldCB0aGUgZGF0YSBkdXBsaWNhdGVkIHdpdGggbWFsbG9jKCkgYW5kIGZhbWlseS4gKi8KIAotICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7IC8qIGVuZCBvZiBoZWFkZXJzISAqLworICAgICAgICAvKiBlbmQgb2YgaGVhZGVycyEgKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsICJcclxuIik7CiAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgICAgIGlmKCFkYXRhLT5yZXEudXBsb2FkX2NodW5reSkgewogICAgICAgICAgIC8qIFdlJ3JlIG5vdCBzZW5kaW5nIGl0ICdjaHVua2VkJywgYXBwZW5kIGl0IHRvIHRoZSByZXF1ZXN0CiAgICAgICAgICAgICAgYWxyZWFkeSBub3cgdG8gcmVkdWNlIHRoZSBudW1iZXIgaWYgc2VuZCgpIGNhbGxzICovCi0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCBkYXRhLT5zZXQucG9zdGZpZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdClwb3N0c2l6ZSk7CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmcmVxLCBkYXRhLT5zZXQucG9zdGZpZWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcG9zdHNpemUpOwogICAgICAgICAgIGluY2x1ZGVkX2JvZHkgPSBwb3N0c2l6ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICBpZihwb3N0c2l6ZSkgewogICAgICAgICAgICAgLyogQXBwZW5kIHRoZSBQT1NUIGRhdGEgY2h1bmt5LXN0eWxlICovCi0gICAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLCAiJXhcclxuIiwgKGludClwb3N0c2l6ZSk7CisgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXEsICIleFxyXG4iLCAoaW50KXBvc3RzaXplKTsKICAgICAgICAgICAgIGlmKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCBkYXRhLT5zZXQucG9zdGZpZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcG9zdHNpemUpOworICAgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRuKCZyZXEsIGRhdGEtPnNldC5wb3N0ZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcG9zdHNpemUpOwogICAgICAgICAgICAgICBpZighcmVzdWx0KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmcmVxX2J1ZmZlciwgIlxyXG4iLCAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlxyXG4iKTsKICAgICAgICAgICAgICAgaW5jbHVkZWRfYm9keSA9IHBvc3RzaXplICsgMjsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgaWYoIXJlc3VsdCkKLSAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmcmVxX2J1ZmZlciwgIlx4MzBceDBkXHgwYVx4MGRceDBhIiwgNSk7CisgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlx4MzBceDBkXHgwYVx4MGRceDBhIik7CiAgICAgICAgICAgLyogMCAgQ1IgIExGICBDUiAgTEYgKi8KICAgICAgICAgICBpbmNsdWRlZF9ib2R5ICs9IDU7CiAgICAgICAgIH0KQEAgLTI5NDMsMjEgKzI5MDcsMjIgQEAKICAgICAgICAgLyogc2V0IHRoZSB1cGxvYWQgc2l6ZSB0byB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KICAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBodHRwLT5wb3N0c2l6ZSk7CiAKLSAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCAiXHJcbiIsIDIpOyAvKiBlbmQgb2YgaGVhZGVycyEgKi8KKyAgICAgICAgLyogZW5kIG9mIGhlYWRlcnMhICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCAiXHJcbiIpOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7IC8qIGVuZCBvZiBoZWFkZXJzISAqLworICAgICAgIC8qIGVuZCBvZiBoZWFkZXJzISAqLworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsICJcclxuIik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAgIGlmKGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ICYmIGNvbm4tPmJpdHMuYXV0aG5lZykgewogICAgICAgICAvKiBDaHVua3kgdXBsb2FkIGlzIHNlbGVjdGVkIGFuZCB3ZSdyZSBuZWdvdGlhdGluZyBhdXRoIHN0aWxsLCBzZW5kCiAgICAgICAgICAgIGVuZC1vZi1kYXRhIG9ubHkgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MzBceDBkXHgwYVx4MGRceDBhIiwgNSk7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxLCAoY2hhciAqKSJceDMwXHgwZFx4MGFceDBkXHgwYSIpOwogICAgICAgICAvKiAwICBDUiAgTEYgIENSICBMRiAqLwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI5NzcsOCArMjk0Miw4IEBACiAgICAgICB9CiAgICAgfQogICAgIC8qIGlzc3VlIHRoZSByZXF1ZXN0ICovCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQoJnJlcV9idWZmZXIsIGNvbm4sICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KWluY2x1ZGVkX2JvZHksIEZJUlNUU09DS0VUKTsKKyAgICByZXN1bHQgPSBDdXJsX2J1ZmZlcl9zZW5kKCZyZXEsIGNvbm4sICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpaW5jbHVkZWRfYm9keSwgRklSU1RTT0NLRVQpOwogCiAgICAgaWYocmVzdWx0KQogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIEhUVFAgUE9TVCByZXF1ZXN0Iik7CkBAIC0yOTg4LDIzICsyOTUzLDI0IEBACiAgICAgYnJlYWs7CiAKICAgZGVmYXVsdDoKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7CisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZyZXEsICJcclxuIik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIC8qIGlzc3VlIHRoZSByZXF1ZXN0ICovCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQoJnJlcV9idWZmZXIsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLCBGSVJTVFNPQ0tFVCk7CisgICAgcmVzdWx0ID0gQ3VybF9idWZmZXJfc2VuZCgmcmVxLCBjb25uLCAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCk7CiAKICAgICBpZihyZXN1bHQpCiAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgSFRUUCByZXF1ZXN0Iik7CiAgICAgZWxzZQogICAgICAgLyogSFRUUCBHRVQvSEVBRCBkb3dubG9hZDogKi8KLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIC0xLCBUUlVFLAotICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLT5wb3N0ZGF0YT9GSVJTVFNPQ0tFVDotMSk7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCAtMSwgVFJVRSwgLTEpOwogICB9CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OworICBpZighcG9zdHNpemUgJiYgKGh0dHAtPnNlbmRpbmcgIT0gSFRUUFNFTkRfUkVRVUVTVCkpCisgICAgZGF0YS0+cmVxLnVwbG9hZF9kb25lID0gVFJVRTsKIAogICBpZihkYXRhLT5yZXEud3JpdGVieXRlY291bnQpIHsKICAgICAvKiBpZiBhIHJlcXVlc3QtYm9keSBoYXMgYmVlbiBzZW50IG9mZiwgd2UgbWFrZSBzdXJlIHRoaXMgcHJvZ3Jlc3MgaXMgbm90ZWQKQEAgLTMxMzgsNTIgKzMxMDQsMTAgQEAKICAgcmV0dXJuIGNoZWNraHR0cHByZWZpeChkYXRhLCBzLCBsZW4pOwogfQogCi0vKgotICogaGVhZGVyX2FwcGVuZCgpIGNvcGllcyBhIGNodW5rIG9mIGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgYWxyZWFkeSByZWNlaXZlZAotICogaGVhZGVyLiBXZSBtYWtlIHN1cmUgdGhhdCB0aGUgZnVsbCBzdHJpbmcgZml0IGluIHRoZSBhbGxvY2F0ZWQgaGVhZGVyCi0gKiBidWZmZXIsIG9yIGVsc2Ugd2UgZW5sYXJnZSBpdC4KLSAqLwotc3RhdGljIENVUkxjb2RlIGhlYWRlcl9hcHBlbmQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCkKLXsKLSAgc2l6ZV90IG5ld3NpemUgPSBrLT5oYnVmbGVuICsgbGVuZ3RoOwotICBpZihuZXdzaXplID4gQ1VSTF9NQVhfSFRUUF9IRUFERVIpIHsKLSAgICAvKiBUaGUgcmVhc29uIHRvIGhhdmUgYSBtYXggbGltaXQgZm9yIHRoaXMgaXMgdG8gYXZvaWQgdGhlIHJpc2sgb2YgYSBiYWQKLSAgICAgICBzZXJ2ZXIgZmVlZGluZyBsaWJjdXJsIHdpdGggYSBuZXZlci1lbmRpbmcgaGVhZGVyIHRoYXQgd2lsbCBjYXVzZQotICAgICAgIHJlYWxsb2NzIGluZmluaXRlbHkgKi8KLSAgICBmYWlsZihkYXRhLCAiUmVqZWN0ZWQgJXp1IGJ5dGVzIGhlYWRlciAobWF4IGlzICVkKSEiLCBuZXdzaXplLAotICAgICAgICAgIENVUkxfTUFYX0hUVFBfSEVBREVSKTsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotICBpZihuZXdzaXplID49IGRhdGEtPnN0YXRlLmhlYWRlcnNpemUpIHsKLSAgICAvKiBXZSBlbmxhcmdlIHRoZSBoZWFkZXIgYnVmZmVyIGFzIGl0IGlzIHRvbyBzbWFsbCAqLwotICAgIGNoYXIgKm5ld2J1ZmY7Ci0gICAgc2l6ZV90IGhidWZwX2luZGV4OwotCi0gICAgbmV3c2l6ZSA9IENVUkxNQVgoKGstPmhidWZsZW4gKyBsZW5ndGgpICogMyAvIDIsIGRhdGEtPnN0YXRlLmhlYWRlcnNpemUqMik7Ci0gICAgaGJ1ZnBfaW5kZXggPSBrLT5oYnVmcCAtIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7Ci0gICAgbmV3YnVmZiA9IHJlYWxsb2MoZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiwgbmV3c2l6ZSk7Ci0gICAgaWYoIW5ld2J1ZmYpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gYWxsb2MgbWVtb3J5IGZvciBiaWcgaGVhZGVyISIpOwotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotICAgIGRhdGEtPnN0YXRlLmhlYWRlcnNpemUgPSBuZXdzaXplOwotICAgIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYgPSBuZXdidWZmOwotICAgIGstPmhidWZwID0gZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiArIGhidWZwX2luZGV4OwotICB9Ci0gIG1lbWNweShrLT5oYnVmcCwgay0+c3RyX3N0YXJ0LCBsZW5ndGgpOwotICBrLT5oYnVmcCArPSBsZW5ndGg7Ci0gIGstPmhidWZsZW4gKz0gbGVuZ3RoOwotICAqay0+aGJ1ZnAgPSAwOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQogc3RhdGljIHZvaWQgcHJpbnRfaHR0cF9lcnJvcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogewogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7Ci0gIGNoYXIgKmJlZyA9IGstPnA7CisgIGNoYXIgKmJlZyA9IEN1cmxfZHluX3B0cigmZGF0YS0+c3RhdGUuaGVhZGVyYik7CiAKICAgLyogbWFrZSBzdXJlIHRoYXQgZGF0YS0+cmVxLnAgcG9pbnRzIHRvIHRoZSBIVFRQIHN0YXR1cyBsaW5lICovCiAgIGlmKCFzdHJuY21wKGJlZywgIkhUVFAiLCA0KSkgewpAQCAtMzIyMSwxNCArMzE0NSwxNyBAQAogICogUmVhZCBhbnkgSFRUUCBoZWFkZXIgbGluZXMgZnJvbSB0aGUgc2VydmVyIGFuZCBwYXNzIHRoZW0gdG8gdGhlIGNsaWVudCBhcHAuCiAgKi8KIENVUkxjb2RlIEN1cmxfaHR0cF9yZWFkd3JpdGVfaGVhZGVycyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqbnJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpzdG9wX3JlYWRpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKm5yZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnN0b3BfcmVhZGluZykKIHsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CiAgIHNzaXplX3Qgb25yZWFkID0gKm5yZWFkOwogICBjaGFyICpvc3RyID0gay0+c3RyOworICBjaGFyICpoZWFkcDsKKyAgY2hhciAqc3RyX3N0YXJ0OworICBjaGFyICplbmRfcHRyOwogCiAgIC8qIGhlYWRlciBsaW5lIHdpdGhpbiBidWZmZXIgbG9vcCAqLwogICBkbyB7CkBAIC0zMjM3LDIyICszMTY0LDI1IEBACiAgICAgaW50IHdyaXRldHlwZTsKIAogICAgIC8qIHN0cl9zdGFydCBpcyBzdGFydCBvZiBsaW5lIHdpdGhpbiBidWYgKi8KLSAgICBrLT5zdHJfc3RhcnQgPSBrLT5zdHI7CisgICAgc3RyX3N0YXJ0ID0gay0+c3RyOwogCiAgICAgLyogZGF0YSBpcyBpbiBuZXR3b3JrIGVuY29kaW5nIHNvIHVzZSAweDBhIGluc3RlYWQgb2YgJ1xuJyAqLwotICAgIGstPmVuZF9wdHIgPSBtZW1jaHIoay0+c3RyX3N0YXJ0LCAweDBhLCAqbnJlYWQpOworICAgIGVuZF9wdHIgPSBtZW1jaHIoc3RyX3N0YXJ0LCAweDBhLCAqbnJlYWQpOwogCi0gICAgaWYoIWstPmVuZF9wdHIpIHsKKyAgICBpZighZW5kX3B0cikgewogICAgICAgLyogTm90IGEgY29tcGxldGUgaGVhZGVyIGxpbmUgd2l0aGluIGJ1ZmZlciwgYXBwZW5kIHRoZSBkYXRhIHRvCiAgICAgICAgICB0aGUgZW5kIG9mIHRoZSBoZWFkZXJidWZmLiAqLwotICAgICAgcmVzdWx0ID0gaGVhZGVyX2FwcGVuZChkYXRhLCBrLCAqbnJlYWQpOworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmZGF0YS0+c3RhdGUuaGVhZGVyYiwgc3RyX3N0YXJ0LCAqbnJlYWQpOwogICAgICAgaWYocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgICBpZighay0+aGVhZGVybGluZSkgewogICAgICAgICAvKiBjaGVjayBpZiB0aGlzIGxvb2tzIGxpa2UgYSBwcm90b2NvbCBoZWFkZXIgKi8KLSAgICAgICAgc3RhdHVzbGluZSBzdCA9IGNoZWNrcHJvdG9wcmVmaXgoZGF0YSwgY29ubiwgZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgay0+aGJ1Zmxlbik7CisgICAgICAgIHN0YXR1c2xpbmUgc3QgPQorICAgICAgICAgIGNoZWNrcHJvdG9wcmVmaXgoZGF0YSwgY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmZGF0YS0+c3RhdGUuaGVhZGVyYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9sZW4oJmRhdGEtPnN0YXRlLmhlYWRlcmIpKTsKKwogICAgICAgICBpZihzdCA9PSBTVEFUVVNfQkFEKSB7CiAgICAgICAgICAgLyogdGhpcyBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIHByb3RvY29sIGZpcnN0IGhlYWRlciBsaW5lICovCiAgICAgICAgICAgay0+aGVhZGVyID0gRkFMU0U7CkBAIC0zMjcwLDI4ICszMjAwLDI2IEBACiAgICAgfQogCiAgICAgLyogZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlbWFpbmluZyAoc3VwcG9zZWQpIGhlYWRlciBsaW5lICovCi0gICAgcmVzdF9sZW5ndGggPSAoay0+ZW5kX3B0ciAtIGstPnN0cikgKyAxOworICAgIHJlc3RfbGVuZ3RoID0gKGVuZF9wdHIgLSBrLT5zdHIpICsgMTsKICAgICAqbnJlYWQgLT0gKHNzaXplX3QpcmVzdF9sZW5ndGg7CiAKLSAgICBrLT5zdHIgPSBrLT5lbmRfcHRyICsgMTsgLyogbW92ZSBwYXN0IG5ldyBsaW5lICovCisgICAgay0+c3RyID0gZW5kX3B0ciArIDE7IC8qIG1vdmUgcGFzdCBuZXcgbGluZSAqLwogCi0gICAgZnVsbF9sZW5ndGggPSBrLT5zdHIgLSBrLT5zdHJfc3RhcnQ7CisgICAgZnVsbF9sZW5ndGggPSBrLT5zdHIgLSBzdHJfc3RhcnQ7CiAKLSAgICByZXN1bHQgPSBoZWFkZXJfYXBwZW5kKGRhdGEsIGssIGZ1bGxfbGVuZ3RoKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRuKCZkYXRhLT5zdGF0ZS5oZWFkZXJiLCBzdHJfc3RhcnQsIGZ1bGxfbGVuZ3RoKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgay0+ZW5kX3B0ciA9IGstPmhidWZwOwotICAgIGstPnAgPSBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmOwotCiAgICAgLyoqKioKLSAgICAgKiBXZSBub3cgaGF2ZSBhIEZVTEwgaGVhZGVyIGxpbmUgdGhhdCBwIHBvaW50cyB0bworICAgICAqIFdlIG5vdyBoYXZlIGEgRlVMTCBoZWFkZXIgbGluZSBpbiAnaGVhZGVyYicuCiAgICAgICoqKioqLwogCiAgICAgaWYoIWstPmhlYWRlcmxpbmUpIHsKICAgICAgIC8qIHRoZSBmaXJzdCByZWFkIGhlYWRlciAqLwotICAgICAgc3RhdHVzbGluZSBzdCA9IGNoZWNrcHJvdG9wcmVmaXgoZGF0YSwgY29ubiwgZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGstPmhidWZsZW4pOworICAgICAgc3RhdHVzbGluZSBzdCA9IGNoZWNrcHJvdG9wcmVmaXgoZGF0YSwgY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmZGF0YS0+c3RhdGUuaGVhZGVyYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9sZW4oJmRhdGEtPnN0YXRlLmhlYWRlcmIpKTsKICAgICAgIGlmKHN0ID09IFNUQVRVU19CQUQpIHsKICAgICAgICAgc3RyZWFtY2xvc2UoY29ubiwgImJhZCBIVFRQOiBObyBlbmQtb2YtbWVzc2FnZSBpbmRpY2F0b3IiKTsKICAgICAgICAgLyogdGhpcyBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIHByb3RvY29sIGZpcnN0IGhlYWRlciBsaW5lICovCkBAIC0zMzE0LDI2ICszMjQyLDI3IEBACiAgICAgICB9CiAgICAgfQogCi0gICAgLyogaGVhZGVycyBhcmUgaW4gbmV0d29yayBlbmNvZGluZyBzbwotICAgICAgIHVzZSAweDBhIGFuZCAweDBkIGluc3RlYWQgb2YgJ1xuJyBhbmQgJ1xyJyAqLwotICAgIGlmKCgweDBhID09ICprLT5wKSB8fCAoMHgwZCA9PSAqay0+cCkpIHsKKyAgICAvKiBoZWFkZXJzIGFyZSBpbiBuZXR3b3JrIGVuY29kaW5nIHNvIHVzZSAweDBhIGFuZCAweDBkIGluc3RlYWQgb2YgJ1xuJworICAgICAgIGFuZCAnXHInICovCisgICAgaGVhZHAgPSBDdXJsX2R5bl9wdHIoJmRhdGEtPnN0YXRlLmhlYWRlcmIpOworICAgIGlmKCgweDBhID09ICpoZWFkcCkgfHwgKDB4MGQgPT0gKmhlYWRwKSkgewogICAgICAgc2l6ZV90IGhlYWRlcmxlbjsKICAgICAgIC8qIFplcm8tbGVuZ3RoIGhlYWRlciBsaW5lIG1lYW5zIGVuZCBvZiBoZWFkZXJzISAqLwogCiAjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCi0gICAgICBpZigweDBkID09ICprLT5wKSB7Ci0gICAgICAgICprLT5wID0gJ1xyJzsgLyogcmVwbGFjZSB3aXRoIENSIGluIGhvc3QgZW5jb2RpbmcgKi8KLSAgICAgICAgay0+cCsrOyAgICAgICAvKiBwYXNzIHRoZSBDUiBieXRlICovCisgICAgICBpZigweDBkID09ICpoZWFkcCkgeworICAgICAgICAqaGVhZHAgPSAnXHInOyAvKiByZXBsYWNlIHdpdGggQ1IgaW4gaG9zdCBlbmNvZGluZyAqLworICAgICAgICBoZWFkcCsrOyAgICAgICAvKiBwYXNzIHRoZSBDUiBieXRlICovCiAgICAgICB9Ci0gICAgICBpZigweDBhID09ICprLT5wKSB7Ci0gICAgICAgICprLT5wID0gJ1xuJzsgLyogcmVwbGFjZSB3aXRoIExGIGluIGhvc3QgZW5jb2RpbmcgKi8KLSAgICAgICAgay0+cCsrOyAgICAgICAvKiBwYXNzIHRoZSBMRiBieXRlICovCisgICAgICBpZigweDBhID09ICpoZWFkcCkgeworICAgICAgICAqaGVhZHAgPSAnXG4nOyAvKiByZXBsYWNlIHdpdGggTEYgaW4gaG9zdCBlbmNvZGluZyAqLworICAgICAgICBoZWFkcCsrOyAgICAgICAvKiBwYXNzIHRoZSBMRiBieXRlICovCiAgICAgICB9CiAjZWxzZQotICAgICAgaWYoJ1xyJyA9PSAqay0+cCkKLSAgICAgICAgay0+cCsrOyAvKiBwYXNzIHRoZSBcciBieXRlICovCi0gICAgICBpZignXG4nID09ICprLT5wKQotICAgICAgICBrLT5wKys7IC8qIHBhc3MgdGhlIFxuIGJ5dGUgKi8KKyAgICAgIGlmKCdccicgPT0gKmhlYWRwKQorICAgICAgICBoZWFkcCsrOyAvKiBwYXNzIHRoZSBcciBieXRlICovCisgICAgICBpZignXG4nID09ICpoZWFkcCkKKyAgICAgICAgaGVhZHArKzsgLyogcGFzcyB0aGUgXG4gYnl0ZSAqLwogI2VuZGlmIC8qIENVUkxfRE9FU19DT05WRVJTSU9OUyAqLwogCiAgICAgICBpZigxMDAgPD0gay0+aHR0cGNvZGUgJiYgMTk5ID49IGstPmh0dHBjb2RlKSB7CkBAIC0zMzk0LDcgKzMzMjMsNyBAQAogICAgICAgICBpZigoay0+c2l6ZSA9PSAtMSkgJiYgIWstPmNodW5rICYmICFjb25uLT5iaXRzLmNsb3NlICYmCiAgICAgICAgICAgIChjb25uLT5odHRwdmVyc2lvbiA9PSAxMSkgJiYKICAgICAgICAgICAgIShjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19SVFNQKSAmJgotICAgICAgICAgICBkYXRhLT5zZXQuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpIHsKKyAgICAgICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpIHsKICAgICAgICAgICAvKiBPbiBIVFRQIDEuMSwgd2hlbiBjb25uZWN0aW9uIGlzIG5vdCB0byBnZXQgY2xvc2VkLCBidXQgbm8KICAgICAgICAgICAgICBDb250ZW50LUxlbmd0aCBub3IgVHJhbnNmZXItRW5jb2RpbmcgY2h1bmtlZCBoYXZlIGJlZW4KICAgICAgICAgICAgICByZWNlaXZlZCwgYWNjb3JkaW5nIHRvIFJGQzI2MTYgc2VjdGlvbiA0LjQgcG9pbnQgNSwgd2UKQEAgLTM0NTIsMTAgKzMzODEsOSBAQAogICAgICAgaWYoZGF0YS0+c2V0LmluY2x1ZGVfaGVhZGVyKQogICAgICAgICB3cml0ZXR5cGUgfD0gQ0xJRU5UV1JJVEVfQk9EWTsKIAotICAgICAgaGVhZGVybGVuID0gay0+cCAtIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7Ci0KKyAgICAgIGhlYWRlcmxlbiA9IEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYik7CiAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCB3cml0ZXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fcHRyKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcmxlbik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0zNDkwLDcgKzM0MTgsNyBAQAogICAgICAgICAgICAqIGNvbnRpbnVlIHNlbmRpbmcgZXZlbiBpZiBpdCBnZXRzIGRpc2NhcmRlZAogICAgICAgICAgICAqLwogCi0gICAgICAgICAgc3dpdGNoKGRhdGEtPnNldC5odHRwcmVxKSB7CisgICAgICAgICAgc3dpdGNoKGRhdGEtPnN0YXRlLmh0dHByZXEpIHsKICAgICAgICAgICBjYXNlIEhUVFBSRVFfUFVUOgogICAgICAgICAgIGNhc2UgSFRUUFJFUV9QT1NUOgogICAgICAgICAgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CkBAIC0zNTAxLDcgKzM0MjksMTYgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgQ3VybF9leHBpcmVfZG9uZShkYXRhLCBFWFBJUkVfMTAwX1RJTUVPVVQpOwogICAgICAgICAgICAgaWYoIWstPnVwbG9hZF9kb25lKSB7Ci0gICAgICAgICAgICAgIGlmKGRhdGEtPnNldC5odHRwX2tlZXBfc2VuZGluZ19vbl9lcnJvcikgeworICAgICAgICAgICAgICBpZigoay0+aHR0cGNvZGUgPT0gNDE3KSAmJiBkYXRhLT5zdGF0ZS5leHBlY3QxMDBoZWFkZXIpIHsKKyAgICAgICAgICAgICAgICAvKiA0MTcgRXhwZWN0YXRpb24gRmFpbGVkIC0gdHJ5IGFnYWluIHdpdGhvdXQgdGhlIEV4cGVjdAorICAgICAgICAgICAgICAgICAgIGhlYWRlciAqLworICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJHb3QgNDE3IHdoaWxlIHdhaXRpbmcgZm9yIGEgMTAwXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5kaXNhYmxlZXhwZWN0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBERUJVR0FTU0VSVCghZGF0YS0+cmVxLm5ld3VybCk7CisgICAgICAgICAgICAgICAgZGF0YS0+cmVxLm5ld3VybCA9IHN0cmR1cChjb25uLT5kYXRhLT5jaGFuZ2UudXJsKTsKKyAgICAgICAgICAgICAgICBDdXJsX2RvbmVfc2VuZGluZyhjb25uLCBrKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmKGRhdGEtPnNldC5odHRwX2tlZXBfc2VuZGluZ19vbl9lcnJvcikgewogICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJIVFRQIGVycm9yIGJlZm9yZSBlbmQgb2Ygc2VuZCwga2VlcCBzZW5kaW5nXG4iKTsKICAgICAgICAgICAgICAgICBpZihrLT5leHAxMDAgPiBFWFAxMDBfU0VORF9EQVRBKSB7CiAgICAgICAgICAgICAgICAgICBrLT5leHAxMDAgPSBFWFAxMDBfU0VORF9EQVRBOwpAQCAtMzUxMSw4ICszNDQ4LDEwIEBACiAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJIVFRQIGVycm9yIGJlZm9yZSBlbmQgb2Ygc2VuZCwgc3RvcCBzZW5kaW5nXG4iKTsKICAgICAgICAgICAgICAgICBzdHJlYW1jbG9zZShjb25uLCAiU3RvcCBzZW5kaW5nIGRhdGEgYmVmb3JlIGV2ZXJ5dGhpbmcgc2VudCIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZG9uZV9zZW5kaW5nKGNvbm4sIGspOworICAgICAgICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgay0+dXBsb2FkX2RvbmUgPSBUUlVFOwotICAgICAgICAgICAgICAgIGstPmtlZXBvbiAmPSB+S0VFUF9TRU5EOyAvKiBkb24ndCBzZW5kICovCiAgICAgICAgICAgICAgICAgaWYoZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyKQogICAgICAgICAgICAgICAgICAgay0+ZXhwMTAwID0gRVhQMTAwX0ZBSUxFRDsKICAgICAgICAgICAgICAgfQpAQCAtMzU5NywxNCArMzUzNiwxMiBAQAogCiAgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQogICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLAotICAgICAgICAgICAgICAgICAgICAgay0+c3RyX3N0YXJ0LCBoZWFkZXJsZW4pOworICAgICAgICAgICAgICAgICAgICAgc3RyX3N0YXJ0LCBoZWFkZXJsZW4pOwogICAgICAgICBicmVhazsgICAgICAgICAgLyogZXhpdCBoZWFkZXIgbGluZSBsb29wICovCiAgICAgICB9CiAKLSAgICAgIC8qIFdlIGNvbnRpbnVlIHJlYWRpbmcgaGVhZGVycywgc28gcmVzZXQgdGhlIGxpbmUtYmFzZWQKLSAgICAgICAgIGhlYWRlciBwYXJzaW5nIHZhcmlhYmxlcyBoYnVmcCAmJiBoYnVmbGVuICovCi0gICAgICBrLT5oYnVmcCA9IGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7Ci0gICAgICBrLT5oYnVmbGVuID0gMDsKKyAgICAgIC8qIFdlIGNvbnRpbnVlIHJlYWRpbmcgaGVhZGVycywgcmVzZXQgdGhlIGxpbmUtYmFzZWQgaGVhZGVyICovCisgICAgICBDdXJsX2R5bl9yZXNldCgmZGF0YS0+c3RhdGUuaGVhZGVyYik7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAKQEAgLTM2MjMsMTIgKzM1NjAsMTEgQEAKICNkZWZpbmUgU0NSQVRDSFNJWkUgMjEKICAgICAgIENVUkxjb2RlIHJlczsKICAgICAgIGNoYXIgc2NyYXRjaFtTQ1JBVENIU0laRSArIDFdOyAvKiAiSFRUUC9tYWpvci5taW5vciAxMjMiICovCi0gICAgICAvKiBXZSBjYW4ndCByZWFsbHkgY29udmVydCB0aGlzIHlldCBiZWNhdXNlIHdlCi0gICAgICAgICBkb24ndCBrbm93IGlmIGl0J3MgdGhlIDFzdCBoZWFkZXIgbGluZSBvciB0aGUgYm9keS4KLSAgICAgICAgIFNvIHdlIGRvIGEgcGFydGlhbCBjb252ZXJzaW9uIGludG8gYSBzY3JhdGNoIGFyZWEsCi0gICAgICAgICBsZWF2aW5nIHRoZSBkYXRhIGF0IGstPnAgYXMtaXMuCisgICAgICAvKiBXZSBjYW4ndCByZWFsbHkgY29udmVydCB0aGlzIHlldCBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgaXQncyB0aGUKKyAgICAgICAgIDFzdCBoZWFkZXIgbGluZSBvciB0aGUgYm9keS4gIFNvIHdlIGRvIGEgcGFydGlhbCBjb252ZXJzaW9uIGludG8gYQorICAgICAgICAgc2NyYXRjaCBhcmVhLCBsZWF2aW5nIHRoZSBkYXRhIGF0ICdoZWFkcCcgYXMtaXMuCiAgICAgICAqLwotICAgICAgc3RybmNweSgmc2NyYXRjaFswXSwgay0+cCwgU0NSQVRDSFNJWkUpOworICAgICAgc3RybmNweSgmc2NyYXRjaFswXSwgaGVhZHAsIFNDUkFUQ0hTSVpFKTsKICAgICAgIHNjcmF0Y2hbU0NSQVRDSFNJWkVdID0gMDsgLyogbnVsbCB0ZXJtaW5hdGUgKi8KICAgICAgIHJlcyA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjcmF0Y2hbMF0sCkBAIC0zNjM3LDcgKzM1NzMsNyBAQAogICAgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLwogICAgICAgICByZXR1cm4gcmVzOwogI2Vsc2UKLSNkZWZpbmUgSEVBREVSMSBrLT5wIC8qIG5vIGNvbnZlcnNpb24gbmVlZGVkLCBqdXN0IHVzZSBrLT5wICovCisjZGVmaW5lIEhFQURFUjEgaGVhZHAgLyogbm8gY29udmVyc2lvbiBuZWVkZWQsIGp1c3QgdXNlIGhlYWRwICovCiAjZW5kaWYgLyogQ1VSTF9ET0VTX0NPTlZFUlNJT05TICovCiAKICAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgUFJPVE9fRkFNSUxZX0hUVFApIHsKQEAgLTM2NDksNiArMzU4NSw3IEBACiAgICAgICAgICAqIGd1YXJhbnRlZXMgb24gZnV0dXJlIGJlaGF2aW9ycyBzaW5jZSBpdCBpc24ndCB3aXRoaW4gdGhlIHByb3RvY29sLgogICAgICAgICAgKi8KICAgICAgICAgY2hhciBzZXBhcmF0b3I7CisgICAgICAgIGNoYXIgdHdvb3J0aHJlZVsyXTsKICAgICAgICAgbmMgPSBzc2NhbmYoSEVBREVSMSwKICAgICAgICAgICAgICAgICAgICAgIiBIVFRQLyUxZC4lMWQlYyUzZCIsCiAgICAgICAgICAgICAgICAgICAgICZodHRwdmVyc2lvbl9tYWpvciwKQEAgLTM2NTYsOCArMzU5Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICZzZXBhcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICZrLT5odHRwY29kZSk7CiAKLSAgICAgICAgaWYobmMgPT0gMSAmJiBodHRwdmVyc2lvbl9tYWpvciA9PSAyICYmCi0gICAgICAgICAgIDEgPT0gc3NjYW5mKEhFQURFUjEsICIgSFRUUC8yICVkIiwgJmstPmh0dHBjb2RlKSkgeworICAgICAgICBpZihuYyA9PSAxICYmIGh0dHB2ZXJzaW9uX21ham9yID49IDIgJiYKKyAgICAgICAgICAgMiA9PSBzc2NhbmYoSEVBREVSMSwgIiBIVFRQLyUxWzIzXSAlZCIsIHR3b29ydGhyZWUsICZrLT5odHRwY29kZSkpIHsKICAgICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDA7CiAgICAgICAgICAgbmMgPSA0OwogICAgICAgICAgIHNlcGFyYXRvciA9ICcgJzsKQEAgLTM2ODcsNyArMzYyNCwxMSBAQAogICAgICAgICAgICAgIGNvbXBhcmUgaGVhZGVyIGxpbmUgYWdhaW5zdCBsaXN0IG9mIGFsaWFzZXMKICAgICAgICAgICAqLwogICAgICAgICAgIGlmKCFuYykgewotICAgICAgICAgICAgaWYoY2hlY2todHRwcHJlZml4KGRhdGEsIGstPnAsIGstPmhidWZsZW4pID09IFNUQVRVU19ET05FKSB7CisgICAgICAgICAgICBzdGF0dXNsaW5lIGNoZWNrID0KKyAgICAgICAgICAgICAgY2hlY2todHRwcHJlZml4KGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9wdHIoJmRhdGEtPnN0YXRlLmhlYWRlcmIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fbGVuKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKSk7CisgICAgICAgICAgICBpZihjaGVjayA9PSBTVEFUVVNfRE9ORSkgewogICAgICAgICAgICAgICBuYyA9IDE7CiAgICAgICAgICAgICAgIGstPmh0dHBjb2RlID0gMjAwOwogICAgICAgICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDEwOwpAQCAtMzY5NSw3ICszNjM2LDcgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIlVuc3VwcG9ydGVkIEhUVFAgdmVyc2lvbiBpbiByZXNwb25zZVxuIik7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlVuc3VwcG9ydGVkIEhUVFAgdmVyc2lvbiBpbiByZXNwb25zZSIpOwogICAgICAgICAgIHJldHVybiBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDsKICAgICAgICAgfQogICAgICAgfQpAQCAtMzczMywxNSArMzY3NCwxOCBAQAogICAgICAgICAgKiBkZXBlbmRpbmcgb24gaG93IGF1dGhlbnRpY2F0aW9uIGlzIHdvcmtpbmcuICBPdGhlciBjb2RlcwogICAgICAgICAgKiBhcmUgZGVmaW5pdGVseSBlcnJvcnMsIHNvIGdpdmUgdXAgaGVyZS4KICAgICAgICAgICovCi0gICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICYmIGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfR0VUICYmCisgICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICYmIGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9HRVQgJiYKICAgICAgICAgICAgICBrLT5odHRwY29kZSA9PSA0MTYpIHsKICAgICAgICAgICAvKiAiUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSIsIGp1c3QgcHJvY2VlZCBhbmQKICAgICAgICAgICAgICBwcmV0ZW5kIHRoaXMgaXMgbm8gZXJyb3IgKi8KICAgICAgICAgICBrLT5pZ25vcmVib2R5ID0gVFJVRTsgLyogQXZvaWQgYXBwZW5kaW5nIGVycm9yIG1zZyB0byBnb29kIGRhdGEuICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZihkYXRhLT5zZXQuaHR0cF9mYWlsX29uX2Vycm9yICYmIChrLT5odHRwY29kZSA+PSA0MDApICYmCi0gICAgICAgICAgICgoay0+aHR0cGNvZGUgIT0gNDAxKSB8fCAhY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkgJiYKLSAgICAgICAgICAgKChrLT5odHRwY29kZSAhPSA0MDcpIHx8ICFjb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkKSApIHsKKyAgICAgICAgICAgICAgICAoKGstPmh0dHBjb2RlICE9IDQwMSkgfHwgIWNvbm4tPmJpdHMudXNlcl9wYXNzd2QpCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgICAgICAgICAgICYmICgoay0+aHR0cGNvZGUgIT0gNDA3KSB8fCAhY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkKKyNlbmRpZgorICAgICAgICAgICkgewogICAgICAgICAgIC8qIHNlcmlvdXMgZXJyb3IsIGdvIGhvbWUhICovCiAgICAgICAgICAgcHJpbnRfaHR0cF9lcnJvcihkYXRhKTsKICAgICAgICAgICByZXR1cm4gQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUjsKQEAgLTM3NTcsOSArMzcwMSw4IEBACiAgICAgICAgIGVsc2UgaWYoY29ubi0+aHR0cHZlcnNpb24gPT0gMjAgfHwKICAgICAgICAgICAgICAgICAoay0+dXBncjEwMSA9PSBVUEdSMTAxX1JFUVVFU1RFRCAmJiBrLT5odHRwY29kZSA9PSAxMDEpKSB7CiAgICAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJIVFRQLzIgZm91bmQsIGFsbG93IG11bHRpcGxleGluZ1xuIikpOwotCi0gICAgICAgICAgLyogSFRUUC8yIGNhbm5vdCBibGFja2xpc3QgbXVsdGlwbGV4aW5nIHNpbmNlIGl0IGlzIGEgY29yZQotICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHByb3RvY29sICovCisgICAgICAgICAgLyogSFRUUC8yIGNhbm5vdCBhdm9pZCBtdWx0aXBsZXhpbmcgc2luY2UgaXQgaXMgYSBjb3JlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICBvZiB0aGUgcHJvdG9jb2wgKi8KICAgICAgICAgICBjb25uLT5idW5kbGUtPm11bHRpdXNlID0gQlVORExFX01VTFRJUExFWDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKGNvbm4tPmh0dHB2ZXJzaW9uID49IDExICYmCkBAIC0zNzY5LDYgKzM3MTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAiSFRUUCAxLjEgb3IgbGF0ZXIgd2l0aCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25cbiIpKTsKICAgICAgICAgfQogCisgICAgICAgIGstPmh0dHBfYm9keWxlc3MgPSBrLT5odHRwY29kZSA+PSAxMDAgJiYgay0+aHR0cGNvZGUgPCAyMDA7CiAgICAgICAgIHN3aXRjaChrLT5odHRwY29kZSkgewogICAgICAgICBjYXNlIDMwNDoKICAgICAgICAgICAvKiAocXVvdGUgZnJvbSBSRkMyNjE2LCBzZWN0aW9uIDEwLjMuNSk6IFRoZSAzMDQgcmVzcG9uc2UKQEAgLTM3ODYsMTAgKzM3MzAsOSBAQAogICAgICAgICAgICAqIGVtcHR5IGxpbmUgYWZ0ZXIgdGhlIGhlYWRlciBmaWVsZHMuICovCiAgICAgICAgICAgay0+c2l6ZSA9IDA7CiAgICAgICAgICAgay0+bWF4ZG93bmxvYWQgPSAwOwotICAgICAgICAgIGstPmlnbm9yZWNsID0gVFJVRTsgLyogaWdub3JlIENvbnRlbnQtTGVuZ3RoIGhlYWRlcnMgKi8KKyAgICAgICAgICBrLT5odHRwX2JvZHlsZXNzID0gVFJVRTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAvKiBub3RoaW5nICovCiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTM3OTksMTYgKzM3NDIsMTYgQEAKICAgICAgIH0KICAgICB9CiAKLSAgICByZXN1bHQgPSBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrKGRhdGEsIGstPnAsIHN0cmxlbihrLT5wKSk7CisgICAgcmVzdWx0ID0gQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhkYXRhLCBoZWFkcCwgc3RybGVuKGhlYWRwKSk7CiAgICAgLyogQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayBjYWxscyBmYWlsZiBpZiB1bnN1Y2Nlc3NmdWwgKi8KICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgLyogQ2hlY2sgZm9yIENvbnRlbnQtTGVuZ3RoOiBoZWFkZXIgbGluZXMgdG8gZ2V0IHNpemUgKi8KLSAgICBpZighay0+aWdub3JlY2wgJiYgIWRhdGEtPnNldC5pZ25vcmVjbCAmJgotICAgICAgIGNoZWNrcHJlZml4KCJDb250ZW50LUxlbmd0aDoiLCBrLT5wKSkgeworICAgIGlmKCFrLT5odHRwX2JvZHlsZXNzICYmCisgICAgICAgIWRhdGEtPnNldC5pZ25vcmVjbCAmJiBjaGVja3ByZWZpeCgiQ29udGVudC1MZW5ndGg6IiwgaGVhZHApKSB7CiAgICAgICBjdXJsX29mZl90IGNvbnRlbnRsZW5ndGg7Ci0gICAgICBDVVJMb2ZmdCBvZmZ0ID0gY3VybHhfc3RydG9vZmZ0KGstPnAgKyAxNSwgTlVMTCwgMTAsICZjb250ZW50bGVuZ3RoKTsKKyAgICAgIENVUkxvZmZ0IG9mZnQgPSBjdXJseF9zdHJ0b29mZnQoaGVhZHAgKyAxNSwgTlVMTCwgMTAsICZjb250ZW50bGVuZ3RoKTsKIAogICAgICAgaWYob2ZmdCA9PSBDVVJMX09GRlRfT0spIHsKICAgICAgICAgaWYoZGF0YS0+c2V0Lm1heF9maWxlc2l6ZSAmJgpAQCAtMzgzOSw4ICszNzgyLDggQEAKICAgICAgIH0KICAgICB9CiAgICAgLyogY2hlY2sgZm9yIENvbnRlbnQtVHlwZTogaGVhZGVyIGxpbmVzIHRvIGdldCB0aGUgTUlNRS10eXBlICovCi0gICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1UeXBlOiIsIGstPnApKSB7Ci0gICAgICBjaGFyICpjb250ZW50dHlwZSA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoay0+cCk7CisgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1UeXBlOiIsIGhlYWRwKSkgeworICAgICAgY2hhciAqY29udGVudHR5cGUgPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGhlYWRwKTsKICAgICAgIGlmKCFjb250ZW50dHlwZSkKICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICBpZighKmNvbnRlbnR0eXBlKQpAQCAtMzg1MSwxMCArMzc5NCwxMCBAQAogICAgICAgICBkYXRhLT5pbmZvLmNvbnRlbnR0eXBlID0gY29udGVudHR5cGU7CiAgICAgICB9CiAgICAgfQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICBlbHNlIGlmKChjb25uLT5odHRwdmVyc2lvbiA9PSAxMCkgJiYKICAgICAgICAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmCi0gICAgICAgICAgICBDdXJsX2NvbXBhcmVoZWFkZXIoay0+cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJveHktQ29ubmVjdGlvbjoiLCAia2VlcC1hbGl2ZSIpKSB7CisgICAgICAgICAgICBDdXJsX2NvbXBhcmVoZWFkZXIoaGVhZHAsICJQcm94eS1Db25uZWN0aW9uOiIsICJrZWVwLWFsaXZlIikpIHsKICAgICAgIC8qCiAgICAgICAgKiBXaGVuIGEgSFRUUC8xLjAgcmVwbHkgY29tZXMgd2hlbiB1c2luZyBhIHByb3h5LCB0aGUKICAgICAgICAqICdQcm94eS1Db25uZWN0aW9uOiBrZWVwLWFsaXZlJyBsaW5lIHRlbGxzIHVzIHRoZQpAQCAtMzg2Niw4ICszODA5LDcgQEAKICAgICB9CiAgICAgZWxzZSBpZigoY29ubi0+aHR0cHZlcnNpb24gPT0gMTEpICYmCiAgICAgICAgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSAmJgotICAgICAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKGstPnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3h5LUNvbm5lY3Rpb246IiwgImNsb3NlIikpIHsKKyAgICAgICAgICAgIEN1cmxfY29tcGFyZWhlYWRlcihoZWFkcCwgIlByb3h5LUNvbm5lY3Rpb246IiwgImNsb3NlIikpIHsKICAgICAgIC8qCiAgICAgICAgKiBXZSBnZXQgYSBIVFRQLzEuMSByZXNwb25zZSBmcm9tIGEgcHJveHkgYW5kIGl0IHNheXMgaXQnbGwKICAgICAgICAqIGNsb3NlIGRvd24gYWZ0ZXIgdGhpcyB0cmFuc2Zlci4KQEAgLTM4NzUsOCArMzgxNyw5IEBACiAgICAgICBjb25uY2xvc2UoY29ubiwgIlByb3h5LUNvbm5lY3Rpb246IGFza2VkIHRvIGNsb3NlIGFmdGVyIGRvbmUiKTsKICAgICAgIGluZm9mKGRhdGEsICJIVFRQLzEuMSBwcm94eSBjb25uZWN0aW9uIHNldCBjbG9zZSFcbiIpOwogICAgIH0KKyNlbmRpZgogICAgIGVsc2UgaWYoKGNvbm4tPmh0dHB2ZXJzaW9uID09IDEwKSAmJgotICAgICAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKGstPnAsICJDb25uZWN0aW9uOiIsICJrZWVwLWFsaXZlIikpIHsKKyAgICAgICAgICAgIEN1cmxfY29tcGFyZWhlYWRlcihoZWFkcCwgIkNvbm5lY3Rpb246IiwgImtlZXAtYWxpdmUiKSkgewogICAgICAgLyoKICAgICAgICAqIEEgSFRUUC8xLjAgcmVwbHkgd2l0aCB0aGUgJ0Nvbm5lY3Rpb246IGtlZXAtYWxpdmUnIGxpbmUKICAgICAgICAqIHRlbGxzIHVzIHRoZSBjb25uZWN0aW9uIHdpbGwgYmUga2VwdCBhbGl2ZSBmb3Igb3VyCkBAIC0zODg2LDcgKzM4MjksNyBAQAogICAgICAgY29ubmtlZXAoY29ubiwgIkNvbm5lY3Rpb24ga2VlcC1hbGl2ZSIpOwogICAgICAgaW5mb2YoZGF0YSwgIkhUVFAvMS4wIGNvbm5lY3Rpb24gc2V0IHRvIGtlZXAgYWxpdmUhXG4iKTsKICAgICB9Ci0gICAgZWxzZSBpZihDdXJsX2NvbXBhcmVoZWFkZXIoay0+cCwgIkNvbm5lY3Rpb246IiwgImNsb3NlIikpIHsKKyAgICBlbHNlIGlmKEN1cmxfY29tcGFyZWhlYWRlcihoZWFkcCwgIkNvbm5lY3Rpb246IiwgImNsb3NlIikpIHsKICAgICAgIC8qCiAgICAgICAgKiBbUkZDIDI2MTYsIHNlY3Rpb24gOC4xLjIuMV0KICAgICAgICAqICJDb25uZWN0aW9uOiBjbG9zZSIgaXMgSFRUUC8xLjEgbGFuZ3VhZ2UgYW5kIG1lYW5zIHRoYXQKQEAgLTM4OTUsNyArMzgzOCw3IEBACiAgICAgICAgKi8KICAgICAgIHN0cmVhbWNsb3NlKGNvbm4sICJDb25uZWN0aW9uOiBjbG9zZSB1c2VkIik7CiAgICAgfQotICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlRyYW5zZmVyLUVuY29kaW5nOiIsIGstPnApKSB7CisgICAgZWxzZSBpZighay0+aHR0cF9ib2R5bGVzcyAmJiBjaGVja3ByZWZpeCgiVHJhbnNmZXItRW5jb2Rpbmc6IiwgaGVhZHApKSB7CiAgICAgICAvKiBPbmUgb3IgbW9yZSBlbmNvZGluZ3MuIFdlIGNoZWNrIGZvciBjaHVua2VkIGFuZC9vciBhIGNvbXByZXNzaW9uCiAgICAgICAgICBhbGdvcml0aG0uICovCiAgICAgICAvKgpAQCAtMzkwNywxMSArMzg1MCwxMSBAQAogICAgICAgICogb2YgY2h1bmtzLCBhbmQgYSBjaHVuay1kYXRhIHNldCB0byB6ZXJvIHNpZ25hbHMgdGhlCiAgICAgICAgKiBlbmQtb2YtY2h1bmtzLiAqLwogCi0gICAgICByZXN1bHQgPSBDdXJsX2J1aWxkX3VuZW5jb2Rpbmdfc3RhY2soY29ubiwgay0+cCArIDE4LCBUUlVFKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfYnVpbGRfdW5lbmNvZGluZ19zdGFjayhjb25uLCBoZWFkcCArIDE4LCBUUlVFKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1FbmNvZGluZzoiLCBrLT5wKSAmJgorICAgIGVsc2UgaWYoIWstPmh0dHBfYm9keWxlc3MgJiYgY2hlY2twcmVmaXgoIkNvbnRlbnQtRW5jb2Rpbmc6IiwgaGVhZHApICYmCiAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19FTkNPRElOR10pIHsKICAgICAgIC8qCiAgICAgICAgKiBQcm9jZXNzIENvbnRlbnQtRW5jb2RpbmcuIExvb2sgZm9yIHRoZSB2YWx1ZXM6IGlkZW50aXR5LApAQCAtMzkyMCwxMSArMzg2MywyNCBAQAogICAgICAgICogMjYxNikuIHpsaWIgY2Fubm90IGhhbmRsZSBjb21wcmVzcy4gIEhvd2V2ZXIsIGVycm9ycyBhcmUKICAgICAgICAqIGhhbmRsZWQgZnVydGhlciBkb3duIHdoZW4gdGhlIHJlc3BvbnNlIGJvZHkgaXMgcHJvY2Vzc2VkCiAgICAgICAgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfYnVpbGRfdW5lbmNvZGluZ19zdGFjayhjb25uLCBrLT5wICsgMTcsIEZBTFNFKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfYnVpbGRfdW5lbmNvZGluZ19zdGFjayhjb25uLCBoZWFkcCArIDE3LCBGQUxTRSk7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIkNvbnRlbnQtUmFuZ2U6Iiwgay0+cCkpIHsKKyAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJSZXRyeS1BZnRlcjoiLCBoZWFkcCkpIHsKKyAgICAgIC8qIFJldHJ5LUFmdGVyID0gSFRUUC1kYXRlIC8gZGVsYXktc2Vjb25kcyAqLworICAgICAgY3VybF9vZmZfdCByZXRyeV9hZnRlciA9IDA7IC8qIHplcm8gZm9yIHVua25vd24gb3IgIm5vdyIgKi8KKyAgICAgIHRpbWVfdCBkYXRlID0gQ3VybF9nZXRkYXRlX2NhcHBlZCgmaGVhZHBbMTJdKTsKKyAgICAgIGlmKC0xID09IGRhdGUpIHsKKyAgICAgICAgLyogbm90IGEgZGF0ZSwgdHJ5IGl0IGFzIGEgZGVjaW1hbCBudW1iZXIgKi8KKyAgICAgICAgKHZvaWQpY3VybHhfc3RydG9vZmZ0KCZoZWFkcFsxMl0sIE5VTEwsIDEwLCAmcmV0cnlfYWZ0ZXIpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICAvKiBjb252ZXJ0IGRhdGUgdG8gbnVtYmVyIG9mIHNlY29uZHMgaW50byB0aGUgZnV0dXJlICovCisgICAgICAgIHJldHJ5X2FmdGVyID0gZGF0ZSAtIHRpbWUoTlVMTCk7CisgICAgICBkYXRhLT5pbmZvLnJldHJ5X2FmdGVyID0gcmV0cnlfYWZ0ZXI7IC8qIHN0b3JlIGl0ICovCisgICAgfQorICAgIGVsc2UgaWYoIWstPmh0dHBfYm9keWxlc3MgJiYgY2hlY2twcmVmaXgoIkNvbnRlbnQtUmFuZ2U6IiwgaGVhZHApKSB7CiAgICAgICAvKiBDb250ZW50LVJhbmdlOiBieXRlcyBbbnVtXS0KICAgICAgICAgIENvbnRlbnQtUmFuZ2U6IGJ5dGVzOiBbbnVtXS0KICAgICAgICAgIENvbnRlbnQtUmFuZ2U6IFtudW1dLQpAQCAtMzkzNiw3ICszODkyLDcgQEAKICAgICAgICAgIFRoZSBmb3J0aCBtZWFucyB0aGUgcmVxdWVzdGVkIHJhbmdlIHdhcyB1bnNhdGlzZmllZC4KICAgICAgICovCiAKLSAgICAgIGNoYXIgKnB0ciA9IGstPnAgKyAxNDsKKyAgICAgIGNoYXIgKnB0ciA9IGhlYWRwICsgMTQ7CiAKICAgICAgIC8qIE1vdmUgZm9yd2FyZCB1bnRpbCBmaXJzdCBkaWdpdCBvciBhc3RlcmlzayAqLwogICAgICAgd2hpbGUoKnB0ciAmJiAhSVNESUdJVCgqcHRyKSAmJiAqcHRyICE9ICcqJykKQEAgLTM5NTQsMzcgKzM5MTAsMzUgQEAKICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOyAvKiBnZXQgZXZlcnl0aGluZyAqLwogICAgIH0KICNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ09PS0lFUykKLSAgICBlbHNlIGlmKGRhdGEtPmNvb2tpZXMgJiYKLSAgICAgICAgICAgIGNoZWNrcHJlZml4KCJTZXQtQ29va2llOiIsIGstPnApKSB7CisgICAgZWxzZSBpZihkYXRhLT5jb29raWVzICYmIGRhdGEtPnN0YXRlLmNvb2tpZV9lbmdpbmUgJiYKKyAgICAgICAgICAgIGNoZWNrcHJlZml4KCJTZXQtQ29va2llOiIsIGhlYWRwKSkgewogICAgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0NPT0tJRSwKICAgICAgICAgICAgICAgICAgICAgICBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CiAgICAgICBDdXJsX2Nvb2tpZV9hZGQoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb29raWVzLCBUUlVFLCBGQUxTRSwgay0+cCArIDExLAorICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNvb2tpZXMsIFRSVUUsIEZBTFNFLCBoZWFkcCArIDExLAogICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgY3VzdG9tLXNldCBIb3N0OiBuYW1lLCB1c2UgaXQKICAgICAgICAgICAgICAgICAgICAgICAgICBoZXJlLCBvciBlbHNlIHVzZSByZWFsIHBlZXIgaG9zdCBuYW1lLiAqLwotICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLmNvb2tpZWhvc3Q/Ci0gICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIuY29va2llaG9zdDpjb25uLT5ob3N0Lm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXB0ci5jb29raWVob3N0PworICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIuY29va2llaG9zdDpjb25uLT5ob3N0Lm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUudXAucGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmQ1VSTFBST1RPX0hUVFBTKT8KICAgICAgICAgICAgICAgICAgICAgICBUUlVFOkZBTFNFKTsKICAgICAgIEN1cmxfc2hhcmVfdW5sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0NPT0tJRSk7CiAgICAgfQogI2VuZGlmCi0gICAgZWxzZSBpZihjaGVja3ByZWZpeCgiTGFzdC1Nb2RpZmllZDoiLCBrLT5wKSAmJgorICAgIGVsc2UgaWYoIWstPmh0dHBfYm9keWxlc3MgJiYgY2hlY2twcmVmaXgoIkxhc3QtTW9kaWZpZWQ6IiwgaGVhZHApICYmCiAgICAgICAgICAgICAoZGF0YS0+c2V0LnRpbWVjb25kaXRpb24gfHwgZGF0YS0+c2V0LmdldF9maWxldGltZSkgKSB7Ci0gICAgICB0aW1lX3Qgc2VjcyA9IHRpbWUoTlVMTCk7Ci0gICAgICBrLT50aW1lb2Zkb2MgPSBjdXJsX2dldGRhdGUoay0+cCArIHN0cmxlbigiTGFzdC1Nb2RpZmllZDoiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vjcyk7CisgICAgICBrLT50aW1lb2Zkb2MgPSBDdXJsX2dldGRhdGVfY2FwcGVkKGhlYWRwICsgc3RybGVuKCJMYXN0LU1vZGlmaWVkOiIpKTsKICAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpCiAgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBrLT50aW1lb2Zkb2M7CiAgICAgfQotICAgIGVsc2UgaWYoKGNoZWNrcHJlZml4KCJXV1ctQXV0aGVudGljYXRlOiIsIGstPnApICYmCisgICAgZWxzZSBpZigoY2hlY2twcmVmaXgoIldXVy1BdXRoZW50aWNhdGU6IiwgaGVhZHApICYmCiAgICAgICAgICAgICAgKDQwMSA9PSBrLT5odHRwY29kZSkpIHx8Ci0gICAgICAgICAgICAoY2hlY2twcmVmaXgoIlByb3h5LWF1dGhlbnRpY2F0ZToiLCBrLT5wKSAmJgorICAgICAgICAgICAgKGNoZWNrcHJlZml4KCJQcm94eS1hdXRoZW50aWNhdGU6IiwgaGVhZHApICYmCiAgICAgICAgICAgICAgKDQwNyA9PSBrLT5odHRwY29kZSkpKSB7CiAKICAgICAgIGJvb2wgcHJveHkgPSAoay0+aHR0cGNvZGUgPT0gNDA3KSA/IFRSVUUgOiBGQUxTRTsKLSAgICAgIGNoYXIgKmF1dGggPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGstPnApOworICAgICAgY2hhciAqYXV0aCA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoaGVhZHApOwogICAgICAgaWYoIWF1dGgpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC0zOTk1LDI3ICszOTQ5LDI4IEBACiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAjaWZkZWYgVVNFX1NQTkVHTwotICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlBlcnNpc3RlbnQtQXV0aCIsIGstPnApKSB7CisjaWZkZWYgVVNFX1NQTkVHTworICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlBlcnNpc3RlbnQtQXV0aCIsIGhlYWRwKSkgewogICAgICAgc3RydWN0IG5lZ290aWF0ZWRhdGEgKm5lZ2RhdGEgPSAmY29ubi0+bmVnb3RpYXRlOwogICAgICAgc3RydWN0IGF1dGggKmF1dGhwID0gJmRhdGEtPnN0YXRlLmF1dGhob3N0OwogICAgICAgaWYoYXV0aHAtPnBpY2tlZCA9PSBDVVJMQVVUSF9ORUdPVElBVEUpIHsKLSAgICAgICAgY2hhciAqcGVyc2lzdGVudGF1dGggPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGstPnApOworICAgICAgICBjaGFyICpwZXJzaXN0ZW50YXV0aCA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoaGVhZHApOwogICAgICAgICBpZighcGVyc2lzdGVudGF1dGgpCiAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIG5lZ2RhdGEtPm5vYXV0aHBlcnNpc3QgPSBjaGVja3ByZWZpeCgiZmFsc2UiLCBwZXJzaXN0ZW50YXV0aCk7CisgICAgICAgIG5lZ2RhdGEtPm5vYXV0aHBlcnNpc3QgPSBjaGVja3ByZWZpeCgiZmFsc2UiLCBwZXJzaXN0ZW50YXV0aCk/CisgICAgICAgICAgVFJVRTpGQUxTRTsKICAgICAgICAgbmVnZGF0YS0+aGF2ZW5vYXV0aHBlcnNpc3QgPSBUUlVFOwogICAgICAgICBpbmZvZihkYXRhLCAiTmVnb3RpYXRlOiBub2F1dGhwZXJzaXN0IC0+ICVkLCBoZWFkZXIgcGFydDogJXMiLAogICAgICAgICAgIG5lZ2RhdGEtPm5vYXV0aHBlcnNpc3QsIHBlcnNpc3RlbnRhdXRoKTsKICAgICAgICAgZnJlZShwZXJzaXN0ZW50YXV0aCk7CiAgICAgICB9CiAgICAgfQotICAjZW5kaWYKKyNlbmRpZgogICAgIGVsc2UgaWYoKGstPmh0dHBjb2RlID49IDMwMCAmJiBrLT5odHRwY29kZSA8IDQwMCkgJiYKLSAgICAgICAgICAgIGNoZWNrcHJlZml4KCJMb2NhdGlvbjoiLCBrLT5wKSAmJgorICAgICAgICAgICAgY2hlY2twcmVmaXgoIkxvY2F0aW9uOiIsIGhlYWRwKSAmJgogICAgICAgICAgICAgIWRhdGEtPnJlcS5sb2NhdGlvbikgewogICAgICAgLyogdGhpcyBpcyB0aGUgVVJMIHRoYXQgdGhlIHNlcnZlciBhZHZpc2VzIHVzIHRvIHVzZSBpbnN0ZWFkICovCi0gICAgICBjaGFyICpsb2NhdGlvbiA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoay0+cCk7CisgICAgICBjaGFyICpsb2NhdGlvbiA9IEN1cmxfY29weV9oZWFkZXJfdmFsdWUoaGVhZHApOwogICAgICAgaWYoIWxvY2F0aW9uKQogICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgIGlmKCEqbG9jYXRpb24pCkBAIC00MDQwLDcgKzM5OTUsNyBAQAogICAgIH0KICNpZmRlZiBVU0VfQUxUU1ZDCiAgICAgLyogSWYgZW5hYmxlZCwgdGhlIGhlYWRlciBpcyBpbmNvbWluZyBhbmQgdGhpcyBpcyBvdmVyIEhUVFBTICovCi0gICAgZWxzZSBpZihkYXRhLT5hc2kgJiYgY2hlY2twcmVmaXgoIkFsdC1TdmM6Iiwgay0+cCkgJiYKKyAgICBlbHNlIGlmKGRhdGEtPmFzaSAmJiBjaGVja3ByZWZpeCgiQWx0LVN2YzoiLCBoZWFkcCkgJiYKICAgICAgICAgICAgICgoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkgfHwKICNpZmRlZiBDVVJMREVCVUcKICAgICAgICAgICAgICAvKiBhbGxvdyBkZWJ1ZyBidWlsZHMgdG8gY2lyY3VtdmVudCB0aGUgSFRUUFMgcmVzdHJpY3Rpb24gKi8KQEAgLTQwNTIsNyArNDAwNyw3IEBACiAgICAgICAvKiB0aGUgQUxQTiBvZiB0aGUgY3VycmVudCByZXF1ZXN0ICovCiAgICAgICBlbnVtIGFscG5pZCBpZCA9IChjb25uLT5odHRwdmVyc2lvbiA9PSAyMCkgPyBBTFBOX2gyIDogQUxQTl9oMTsKICAgICAgIHJlc3VsdCA9IEN1cmxfYWx0c3ZjX3BhcnNlKGRhdGEsIGRhdGEtPmFzaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrLT5wWyBzdHJsZW4oIkFsdC1TdmM6IikgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoZWFkcFsgc3RybGVuKCJBbHQtU3ZjOiIpIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCwgY29ubi0+aG9zdC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdWl0b3VzKGNvbm4tPnJlbW90ZV9wb3J0KSk7CiAgICAgICBpZihyZXN1bHQpCkBAIC00MDYwLDcgKzQwMTUsNyBAQAogICAgIH0KICNlbmRpZgogICAgIGVsc2UgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fUlRTUCkgewotICAgICAgcmVzdWx0ID0gQ3VybF9ydHNwX3BhcnNlaGVhZGVyKGNvbm4sIGstPnApOworICAgICAgcmVzdWx0ID0gQ3VybF9ydHNwX3BhcnNlaGVhZGVyKGNvbm4sIGhlYWRwKTsKICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC00MDc0LDE4ICs0MDI5LDE4IEBACiAgICAgICB3cml0ZXR5cGUgfD0gQ0xJRU5UV1JJVEVfQk9EWTsKIAogICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQotICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIGstPnAsIChzaXplX3Qpay0+aGJ1Zmxlbik7CisgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgaGVhZHAsCisgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYikpOwogCi0gICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgd3JpdGV0eXBlLCBrLT5wLCBrLT5oYnVmbGVuKTsKKyAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCB3cml0ZXR5cGUsIGhlYWRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYikpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBkYXRhLT5pbmZvLmhlYWRlcl9zaXplICs9IChsb25nKWstPmhidWZsZW47Ci0gICAgZGF0YS0+cmVxLmhlYWRlcmJ5dGVjb3VudCArPSAobG9uZylrLT5oYnVmbGVuOworICAgIGRhdGEtPmluZm8uaGVhZGVyX3NpemUgKz0gQ3VybF9keW5fbGVuKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKTsKKyAgICBkYXRhLT5yZXEuaGVhZGVyYnl0ZWNvdW50ICs9IEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYik7CiAKLSAgICAvKiByZXNldCBoYnVmcCBwb2ludGVyICYmIGhidWZsZW4gKi8KLSAgICBrLT5oYnVmcCA9IGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7Ci0gICAgay0+aGJ1ZmxlbiA9IDA7CisgICAgQ3VybF9keW5fcmVzZXQoJmRhdGEtPnN0YXRlLmhlYWRlcmIpOwogICB9CiAgIHdoaWxlKCprLT5zdHIpOyAvKiBoZWFkZXIgbGluZSB3aXRoaW4gYnVmZmVyICovCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAuaAppbmRleCBhNTlmZTdhLi42NDFiYzBiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00NCw1NyArNDQsMzAgQEAKIAogY2hhciAqQ3VybF9jaGVja1Byb3h5aGVhZGVycyhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRoaXNoZWFkZXIpOwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIFRoZSBhZGRfYnVmZmVyIHNlcmllcyBvZiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gYnVpbGQgb25lIGxhcmdlIG1lbW9yeSBjaHVuawotICogZnJvbSByZXBlYXRlZCBmdW5jdGlvbiBpbnZva2VzLiBVc2VkIHNvIHRoYXQgdGhlIGVudGlyZSBIVFRQIHJlcXVlc3QgY2FuCi0gKiBiZSBzZW50IGluIG9uZSBnby4KLSAqLwotc3RydWN0IEN1cmxfc2VuZF9idWZmZXIgewotICBjaGFyICpidWZmZXI7Ci0gIHNpemVfdCBzaXplX21heDsKLSAgc2l6ZV90IHNpemVfdXNlZDsKLX07Ci10eXBlZGVmIHN0cnVjdCBDdXJsX3NlbmRfYnVmZmVyIEN1cmxfc2VuZF9idWZmZXI7CitDVVJMY29kZSBDdXJsX2J1ZmZlcl9zZW5kKHN0cnVjdCBkeW5idWYgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgKmJ5dGVzX3dyaXR0ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmNsdWRlZF9ib2R5X2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2V0aW5kZXgpOwogCi1DdXJsX3NlbmRfYnVmZmVyICpDdXJsX2FkZF9idWZmZXJfaW5pdCh2b2lkKTsKLXZvaWQgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoQ3VybF9zZW5kX2J1ZmZlciAqKmlucCk7Ci1DVVJMY29kZSBDdXJsX2FkZF9idWZmZXJmKEN1cmxfc2VuZF9idWZmZXIgKippbnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotICBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci1DVVJMY29kZSBDdXJsX2FkZF9idWZmZXIoQ3VybF9zZW5kX2J1ZmZlciAqKmlucCwgY29uc3Qgdm9pZCAqaW5wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLUNVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcl9zZW5kKEN1cmxfc2VuZF9idWZmZXIgKippbnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90ICpieXRlc193cml0dGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluY2x1ZGVkX2JvZHlfYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2V0aW5kZXgpOwotCi1DVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKmJ1Zik7CitDVVJMY29kZSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGR5bmJ1ZiAqYnVmKTsKIENVUkxjb2RlIEN1cmxfYWRkX2N1c3RvbV9oZWFkZXJzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfY29ubmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGR5bmJ1ZiAqcmVxX2J1ZmZlcik7CiBDVVJMY29kZSBDdXJsX2h0dHBfY29tcGlsZV90cmFpbGVycyhzdHJ1Y3QgY3VybF9zbGlzdCAqdHJhaWxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHluYnVmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpoYW5kbGUpOwogCiAvKiBwcm90b2NvbC1zcGVjaWZpYyBmdW5jdGlvbnMgc2V0IHVwIHRvIGJlIGNhbGxlZCBieSB0aGUgbWFpbiBlbmdpbmUgKi8KIENVUkxjb2RlIEN1cmxfaHR0cChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogQ1VSTGNvZGUgQ3VybF9odHRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICosIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CiBDVVJMY29kZSBDdXJsX2h0dHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotQ1VSTGNvZGUgQ3VybF9odHRwX3NldHVwX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKLQotLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gaHR0cF9jaHVua3MuYyAqLwotdm9pZCBDdXJsX2h0dHBjaHVua19pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci1DSFVOS2NvZGUgQ3VybF9odHRwY2h1bmtfcmVhZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKmRhdGFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBsZW5ndGgsIHNzaXplX3QgKndyb3RlKTsKIAogLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBodHRwLmMgKi8KLXZvaWQgQ3VybF9odHRwX2F1dGhfc3RhZ2Uoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgaW50IHN0YWdlKTsKIENVUkxjb2RlIEN1cmxfaHR0cF9pbnB1dF9hdXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGgpOwogQ1VSTGNvZGUgQ3VybF9odHRwX2F1dGhfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci1DVVJMY29kZSBDdXJsX2h0dHBfcGVyaGFwc3Jld2luZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCiAvKiBJZiBvbmx5IHRoZSBQSUNLTk9ORSBiaXQgaXMgc2V0LCB0aGVyZSBoYXMgYmVlbiBhIHJvdW5kLXRyaXAgYW5kIHdlCiAgICBzZWxlY3RlZCB0byB1c2Ugbm8gYXV0aCBhdCBhbGwuIEllLCB3ZSBhY3RpdmVseSBzZWxlY3Qgbm8gYXV0aCwgYXMgb3Bwb3NlZApAQCAtMTI0LDExICs5NywxNSBAQAogICoKICAqLwogI2lmbmRlZiBFWFBFQ1RfMTAwX1RIUkVTSE9MRAotI2RlZmluZSBFWFBFQ1RfMTAwX1RIUkVTSE9MRCAxMDI0CisjZGVmaW5lIEVYUEVDVF8xMDBfVEhSRVNIT0xEICgxMDI0KjEwMjQpCiAjZW5kaWYKIAogI2VuZGlmIC8qIENVUkxfRElTQUJMRV9IVFRQICovCiAKKyNpZmRlZiBVU0VfTkdIVFRQMworc3RydWN0IGgzb3V0OyAvKiBzZWUgbmd0Y3AyICovCisjZW5kaWYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhUVFAgdW5pcXVlIHNldHVwCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTU4LDkgKzEzNSw5IEBACiAgIH0gc2VuZGluZzsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAotICBDdXJsX3NlbmRfYnVmZmVyICpzZW5kX2J1ZmZlcjsgLyogdXNlZCBpZiB0aGUgcmVxdWVzdCBjb3VsZG4ndCBiZSBzZW50IGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgY2h1bmssIHBvaW50cyB0byBhbiBhbGxvY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnVmZmVyIHN0cnVjdCAqLworICBzdHJ1Y3QgZHluYnVmIHNlbmRfYnVmZmVyOyAvKiB1c2VkIGlmIHRoZSByZXF1ZXN0IGNvdWxkbid0IGJlIHNlbnQgaW4gb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rLCBwb2ludHMgdG8gYW4gYWxsb2NhdGVkIHNlbmRfYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCAqLwogI2VuZGlmCiAjaWZkZWYgVVNFX05HSFRUUDIKICAgLyoqKioqKioqKioqIGZvciBIVFRQLzIgd2Ugc3RvcmUgc3RyZWFtLWxvY2FsIGRhdGEgaGVyZSAqKioqKioqKioqKioqLwpAQCAtMTY4LDI3ICsxNDUsNDQgQEAKIAogICBib29sIGJvZHlzdGFydGVkOwogICAvKiBXZSBzdG9yZSBub24tZmluYWwgYW5kIGZpbmFsIHJlc3BvbnNlIGhlYWRlcnMgaGVyZSwgcGVyLXN0cmVhbSAqLwotICBDdXJsX3NlbmRfYnVmZmVyICpoZWFkZXJfcmVjdmJ1ZjsKKyAgc3RydWN0IGR5bmJ1ZiBoZWFkZXJfcmVjdmJ1ZjsKICAgc2l6ZV90IG5yZWFkX2hlYWRlcl9yZWN2YnVmOyAvKiBudW1iZXIgb2YgYnl0ZXMgaW4gaGVhZGVyX3JlY3ZidWYgZmVkIGludG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlciBsYXllciAqLwotICBDdXJsX3NlbmRfYnVmZmVyICp0cmFpbGVyX3JlY3ZidWY7CiAgIGludCBzdGF0dXNfY29kZTsgLyogSFRUUCBzdGF0dXMgY29kZSAqLwogICBjb25zdCB1aW50OF90ICpwYXVzZWRhdGE7IC8qIHBvaW50ZXIgdG8gZGF0YSByZWNlaXZlZCBpbiBvbl9kYXRhX2NodW5rICovCiAgIHNpemVfdCBwYXVzZWxlbjsgLyogdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIGRhdGEgKi8KLSAgYm9vbCBjbG9zZWQ7IC8qIFRSVUUgb24gSFRUUDIgc3RyZWFtIGNsb3NlICovCiAgIGJvb2wgY2xvc2VfaGFuZGxlZDsgLyogVFJVRSBpZiBzdHJlYW0gY2xvc3VyZSBpcyBoYW5kbGVkIGJ5IGxpYmN1cmwgKi8KLSAgY2hhciAqbWVtOyAgICAgLyogcG9pbnRzIHRvIGEgYnVmZmVyIGluIG1lbW9yeSB0byBzdG9yZSByZWNlaXZlZCBkYXRhICovCi0gIHNpemVfdCBsZW47ICAgIC8qIHNpemUgb2YgdGhlIGJ1ZmZlciAnbWVtJyBwb2ludHMgdG8gKi8KLSAgc2l6ZV90IG1lbWxlbjsgLyogc2l6ZSBvZiBkYXRhIGNvcGllZCB0byBtZW0gKi8KLQotICBjb25zdCB1aW50OF90ICp1cGxvYWRfbWVtOyAvKiBwb2ludHMgdG8gYSBidWZmZXIgdG8gcmVhZCBmcm9tICovCi0gIHNpemVfdCB1cGxvYWRfbGVuOyAvKiBzaXplIG9mIHRoZSBidWZmZXIgJ3VwbG9hZF9tZW0nIHBvaW50cyB0byAqLwotICBjdXJsX29mZl90IHVwbG9hZF9sZWZ0OyAvKiBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byB1cGxvYWQgKi8KIAogICBjaGFyICoqcHVzaF9oZWFkZXJzOyAgICAgICAvKiBhbGxvY2F0ZWQgYXJyYXkgKi8KICAgc2l6ZV90IHB1c2hfaGVhZGVyc191c2VkOyAgLyogbnVtYmVyIG9mIGVudHJpZXMgZmlsbGVkIGluICovCiAgIHNpemVfdCBwdXNoX2hlYWRlcnNfYWxsb2M7IC8qIG51bWJlciBvZiBlbnRyaWVzIGFsbG9jYXRlZCAqLwogI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfTkdIVFRQMikgfHwgZGVmaW5lZChVU0VfTkdIVFRQMykKKyAgYm9vbCBjbG9zZWQ7IC8qIFRSVUUgb24gSFRUUDIgc3RyZWFtIGNsb3NlICovCisgIGNoYXIgKm1lbTsgICAgIC8qIHBvaW50cyB0byBhIGJ1ZmZlciBpbiBtZW1vcnkgdG8gc3RvcmUgcmVjZWl2ZWQgZGF0YSAqLworICBzaXplX3QgbGVuOyAgICAvKiBzaXplIG9mIHRoZSBidWZmZXIgJ21lbScgcG9pbnRzIHRvICovCisgIHNpemVfdCBtZW1sZW47IC8qIHNpemUgb2YgZGF0YSBjb3BpZWQgdG8gbWVtICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFVTRV9OR0hUVFAyKSB8fCBkZWZpbmVkKEVOQUJMRV9RVUlDKQorICAvKiBmaWVsZHMgdXNlZCBieSBib3RoIEhUVFAvMiBhbmQgSFRUUC8zICovCisgIGNvbnN0IHVpbnQ4X3QgKnVwbG9hZF9tZW07IC8qIHBvaW50cyB0byBhIGJ1ZmZlciB0byByZWFkIGZyb20gKi8KKyAgc2l6ZV90IHVwbG9hZF9sZW47IC8qIHNpemUgb2YgdGhlIGJ1ZmZlciAndXBsb2FkX21lbScgcG9pbnRzIHRvICovCisgIGN1cmxfb2ZmX3QgdXBsb2FkX2xlZnQ7IC8qIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIHVwbG9hZCAqLworI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfUVVJQworICAvKioqKioqKioqKiogZm9yIEhUVFAvMyB3ZSBzdG9yZSBzdHJlYW0tbG9jYWwgZGF0YSBoZXJlICoqKioqKioqKioqKiovCisgIGludDY0X3Qgc3RyZWFtM19pZDsgLyogc3RyZWFtIHdlIGFyZSBpbnRlcmVzdGVkIGluICovCisgIGJvb2wgZmlyc3RoZWFkZXI7ICAvKiBGQUxTRSB1bnRpbCBoZWFkZXJzIGFycml2ZSAqLworICBib29sIGZpcnN0Ym9keTsgIC8qIEZBTFNFIHVudGlsIGJvZHkgYXJyaXZlcyAqLworICBib29sIGgzcmVxOyAgICAvKiBGQUxTRSB1bnRpbCByZXF1ZXN0IGlzIGlzc3VlZCAqLworICBib29sIHVwbG9hZF9kb25lOworI2VuZGlmCisjaWZkZWYgVVNFX05HSFRUUDMKKyAgc2l6ZV90IHVuYWNrZWRfd2luZG93OworICBzdHJ1Y3QgaDNvdXQgKmgzb3V0OyAvKiBwZXItc3RyZWFtIGJ1ZmZlcnMgZm9yIHVwbG9hZCAqLworICBzdHJ1Y3QgZHluYnVmIG92ZXJmbG93OyAvKiBleGNlc3MgZGF0YSByZWNlaXZlZCBkdXJpbmcgYSBzaW5nbGUgQ3VybF9yZWFkICovCisjZW5kaWYKIH07CiAKICNpZmRlZiBVU0VfTkdIVFRQMgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cDIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAyLmMKaW5kZXggOGU3YmMyMS4uNmNmNjUxZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cDIuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwMi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiY29ubmVjdC5oIgogI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgogI2luY2x1ZGUgInN0cmR1cC5oIgorI2luY2x1ZGUgImR5bmJ1Zi5oIgogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKQEAgLTQzLDE5ICs0NCwxMSBAQAogCiAjZGVmaW5lIEgyX0JVRlNJWkUgMzI3NjgKIAotI2lmIChOR0hUVFAyX1ZFUlNJT05fTlVNIDwgMHgwMTAwMDApCisjaWYgKE5HSFRUUDJfVkVSU0lPTl9OVU0gPCAweDAxMGMwMCkKICNlcnJvciB0b28gb2xkIG5naHR0cDIgdmVyc2lvbiwgdXBncmFkZSEKICNlbmRpZgogCi0jaWYgKE5HSFRUUDJfVkVSU0lPTl9OVU0gPiAweDAxMDgwMCkKLSNkZWZpbmUgTkdIVFRQMl9IQVNfSFRUUDJfU1RSRVJST1IgMQotI2VuZGlmCi0KLSNpZiAoTkdIVFRQMl9WRVJTSU9OX05VTSA+PSAweDAxMDkwMCkKLS8qIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrIGlzIHByZXNlbnQgaW4gbmdodHRwMiAxLjkuMCBvcgotICAgbGF0ZXIgKi8KLSNkZWZpbmUgTkdIVFRQMl9IQVNfRVJST1JfQ0FMTEJBQ0sgMQotI2Vsc2UKKyNpZmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiAjZGVmaW5lIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrKHgseSkKICNlbmRpZgogCkBAIC02MywxMiArNTYsMTIgQEAKICNkZWZpbmUgTkdIVFRQMl9IQVNfU0VUX0xPQ0FMX1dJTkRPV19TSVpFIDEKICNlbmRpZgogCi0jZGVmaW5lIEhUVFAyX0hVR0VfV0lORE9XX1NJWkUgKDEgPDwgMzApCisjZGVmaW5lIEhUVFAyX0hVR0VfV0lORE9XX1NJWkUgKDMyICogMTAyNCAqIDEwMjQpIC8qIDMyIE1CICovCiAKICNpZmRlZiBERUJVR19IVFRQMgogI2RlZmluZSBIMkJVR0YoeCkgeAogI2Vsc2UKLSNkZWZpbmUgSDJCVUdGKHgpIGRvIHsgfSBXSElMRV9GQUxTRQorI2RlZmluZSBIMkJVR0YoeCkgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAogCkBAIC0xMDAsMTYgKzkzLDExIEBACiB9CiAKIHN0YXRpYyBpbnQgaHR0cDJfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtc29ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKIHsKICAgY29uc3Qgc3RydWN0IGh0dHBfY29ubiAqYyA9ICZjb25uLT5wcm90by5odHRwYzsKICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmY29ubi0+ZGF0YS0+cmVxOwogICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKLSAgKHZvaWQpbnVtc29ja3M7CiAKICAgc29ja1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwogCkBAIC0xMjYsMTEgKzExNCw5IEBACiB9CiAKIHN0YXRpYyBpbnQgaHR0cDJfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIHJldHVybiBodHRwMl9wZXJmb3JtX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOworICByZXR1cm4gaHR0cDJfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2tzKTsKIH0KIAogLyoKQEAgLTEzOSw4ICsxMjUsNyBAQAogc3RhdGljIHZvaWQgaHR0cDJfc3RyZWFtX2ZyZWUoc3RydWN0IEhUVFAgKmh0dHApCiB7CiAgIGlmKGh0dHApIHsKLSAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmaHR0cC0+aGVhZGVyX3JlY3ZidWYpOwotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZodHRwLT50cmFpbGVyX3JlY3ZidWYpOworICAgIEN1cmxfZHluX2ZyZWUoJmh0dHAtPmhlYWRlcl9yZWN2YnVmKTsKICAgICBmb3IoOyBodHRwLT5wdXNoX2hlYWRlcnNfdXNlZCA+IDA7IC0taHR0cC0+cHVzaF9oZWFkZXJzX3VzZWQpIHsKICAgICAgIGZyZWUoaHR0cC0+cHVzaF9oZWFkZXJzW2h0dHAtPnB1c2hfaGVhZGVyc191c2VkIC0gMV0pOwogICAgIH0KQEAgLTI0MCw3ICsyMjUsNyBAQAogCiAgIGlmKGNoZWNrc190b19wZXJmb3JtICYgQ09OTkNIRUNLX0tFRVBBTElWRSkgewogICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICAgIHRpbWVfdCBlbGFwc2VkID0gQ3VybF90aW1lZGlmZihub3csIGNoZWNrLT5rZWVwYWxpdmUpOworICAgIHRpbWVkaWZmX3QgZWxhcHNlZCA9IEN1cmxfdGltZWRpZmYobm93LCBjaGVjay0+a2VlcGFsaXZlKTsKIAogICAgIGlmKGVsYXBzZWQgPiBjaGVjay0+dXBrZWVwX2ludGVydmFsX21zKSB7CiAgICAgICAvKiBQZXJmb3JtIGFuIEhUVFAvMiBQSU5HICovCkBAIC0yNjksMjQgKzI1NCwyMiBAQAogICByZXR1cm4gcmV0X3ZhbDsKIH0KIAotLyogY2FsbGVkIGZyb20gQ3VybF9odHRwX3NldHVwX2Nvbm4gKi8KKy8qIGNhbGxlZCBmcm9tIGh0dHBfc2V0dXBfY29ubiAqLwogdm9pZCBDdXJsX2h0dHAyX3NldHVwX3JlcShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogewogICBzdHJ1Y3QgSFRUUCAqaHR0cCA9IGRhdGEtPnJlcS5wcm90b3A7Ci0KLSAgaHR0cC0+bnJlYWRfaGVhZGVyX3JlY3ZidWYgPSAwOwogICBodHRwLT5ib2R5c3RhcnRlZCA9IEZBTFNFOwogICBodHRwLT5zdGF0dXNfY29kZSA9IC0xOwogICBodHRwLT5wYXVzZWRhdGEgPSBOVUxMOwogICBodHRwLT5wYXVzZWxlbiA9IDA7CiAgIGh0dHAtPmNsb3NlZCA9IEZBTFNFOwogICBodHRwLT5jbG9zZV9oYW5kbGVkID0gRkFMU0U7Ci0gIGh0dHAtPm1lbSA9IGRhdGEtPnN0YXRlLmJ1ZmZlcjsKLSAgaHR0cC0+bGVuID0gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplOworICBodHRwLT5tZW0gPSBOVUxMOworICBodHRwLT5sZW4gPSAwOwogICBodHRwLT5tZW1sZW4gPSAwOwogfQogCi0vKiBjYWxsZWQgZnJvbSBDdXJsX2h0dHBfc2V0dXBfY29ubiAqLworLyogY2FsbGVkIGZyb20gaHR0cF9zZXR1cF9jb25uICovCiB2b2lkIEN1cmxfaHR0cDJfc2V0dXBfY29ubihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7CiAgIGNvbm4tPnByb3RvLmh0dHBjLnNldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXMgPQpAQCAtMzQ4LDM2ICszMzEsNyBAQAogaW50IEN1cmxfaHR0cDJfdmVyKGNoYXIgKnAsIHNpemVfdCBsZW4pCiB7CiAgIG5naHR0cDJfaW5mbyAqaDIgPSBuZ2h0dHAyX3ZlcnNpb24oMCk7Ci0gIHJldHVybiBtc25wcmludGYocCwgbGVuLCAiIG5naHR0cDIvJXMiLCBoMi0+dmVyc2lvbl9zdHIpOwotfQotCi0vKiBIVFRQLzIgZXJyb3IgY29kZSB0byBuYW1lIGJhc2VkIG9uIHRoZSBFcnJvciBDb2RlIFJlZ2lzdHJ5LgotaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjcGFnZS03NwotbmdodHRwMl9lcnJvcl9jb2RlIGVudW1zIGFyZSBpZGVudGljYWwuCi0qLwotc3RhdGljIGNvbnN0IGNoYXIgKmh0dHAyX3N0cmVycm9yKHVpbnQzMl90IGVycikKLXsKLSNpZm5kZWYgTkdIVFRQMl9IQVNfSFRUUDJfU1RSRVJST1IKLSAgY29uc3QgY2hhciAqc3RyW10gPSB7Ci0gICAgIk5PX0VSUk9SIiwgICAgICAgICAgICAgLyogMHgwICovCi0gICAgIlBST1RPQ09MX0VSUk9SIiwgICAgICAgLyogMHgxICovCi0gICAgIklOVEVSTkFMX0VSUk9SIiwgICAgICAgLyogMHgyICovCi0gICAgIkZMT1dfQ09OVFJPTF9FUlJPUiIsICAgLyogMHgzICovCi0gICAgIlNFVFRJTkdTX1RJTUVPVVQiLCAgICAgLyogMHg0ICovCi0gICAgIlNUUkVBTV9DTE9TRUQiLCAgICAgICAgLyogMHg1ICovCi0gICAgIkZSQU1FX1NJWkVfRVJST1IiLCAgICAgLyogMHg2ICovCi0gICAgIlJFRlVTRURfU1RSRUFNIiwgICAgICAgLyogMHg3ICovCi0gICAgIkNBTkNFTCIsICAgICAgICAgICAgICAgLyogMHg4ICovCi0gICAgIkNPTVBSRVNTSU9OX0VSUk9SIiwgICAgLyogMHg5ICovCi0gICAgIkNPTk5FQ1RfRVJST1IiLCAgICAgICAgLyogMHhBICovCi0gICAgIkVOSEFOQ0VfWU9VUl9DQUxNIiwgICAgLyogMHhCICovCi0gICAgIklOQURFUVVBVEVfU0VDVVJJVFkiLCAgLyogMHhDICovCi0gICAgIkhUVFBfMV8xX1JFUVVJUkVEIiAgICAgLyogMHhEICovCi0gIH07Ci0gIHJldHVybiAoZXJyIDwgc2l6ZW9mKHN0cikgLyBzaXplb2Yoc3RyWzBdKSkgPyBzdHJbZXJyXSA6ICJ1bmtub3duIjsKLSNlbHNlCi0gIHJldHVybiBuZ2h0dHAyX2h0dHAyX3N0cmVycm9yKGVycik7Ci0jZW5kaWYKKyAgcmV0dXJuIG1zbnByaW50ZihwLCBsZW4sICJuZ2h0dHAyLyVzIiwgaDItPnZlcnNpb25fc3RyKTsKIH0KIAogLyoKQEAgLTUwMywyNiArNDU3LDU4IEBACiAgICAgLyogc2V0dXAgdGhlIHJlcXVlc3Qgc3RydWN0ICovCiAgICAgc3RydWN0IEhUVFAgKmh0dHAgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBIVFRQKSk7CiAgICAgaWYoIWh0dHApIHsKLSAgICAgICh2b2lkKUN1cmxfY2xvc2Uoc2Vjb25kKTsKLSAgICAgIHNlY29uZCA9IE5VTEw7CisgICAgICAodm9pZClDdXJsX2Nsb3NlKCZzZWNvbmQpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgIHNlY29uZC0+cmVxLnByb3RvcCA9IGh0dHA7Ci0gICAgICBodHRwLT5oZWFkZXJfcmVjdmJ1ZiA9IEN1cmxfYWRkX2J1ZmZlcl9pbml0KCk7Ci0gICAgICBpZighaHR0cC0+aGVhZGVyX3JlY3ZidWYpIHsKLSAgICAgICAgZnJlZShodHRwKTsKLSAgICAgICAgKHZvaWQpQ3VybF9jbG9zZShzZWNvbmQpOwotICAgICAgICBzZWNvbmQgPSBOVUxMOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIEN1cmxfaHR0cDJfc2V0dXBfcmVxKHNlY29uZCk7Ci0gICAgICAgIHNlY29uZC0+c3RhdGUuc3RyZWFtX3dlaWdodCA9IGRhdGEtPnN0YXRlLnN0cmVhbV93ZWlnaHQ7Ci0gICAgICB9CisgICAgICBDdXJsX2R5bl9pbml0KCZodHRwLT5oZWFkZXJfcmVjdmJ1ZiwgRFlOX0gyX0hFQURFUlMpOworICAgICAgQ3VybF9odHRwMl9zZXR1cF9yZXEoc2Vjb25kKTsKKyAgICAgIHNlY29uZC0+c3RhdGUuc3RyZWFtX3dlaWdodCA9IGRhdGEtPnN0YXRlLnN0cmVhbV93ZWlnaHQ7CiAgICAgfQogICB9CiAgIHJldHVybiBzZWNvbmQ7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X3RyYW5zZmVyX3VybChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3B1c2hoZWFkZXJzICpocCkKK3sKKyAgY29uc3QgY2hhciAqdjsKKyAgQ1VSTFUgKnUgPSBjdXJsX3VybCgpOworICBDVVJMVWNvZGUgdWM7CisgIGNoYXIgKnVybDsKKworICB2ID0gY3VybF9wdXNoaGVhZGVyX2J5bmFtZShocCwgIjpzY2hlbWUiKTsKKyAgaWYodikgeworICAgIHVjID0gY3VybF91cmxfc2V0KHUsIENVUkxVUEFSVF9TQ0hFTUUsIHYsIDApOworICAgIGlmKHVjKQorICAgICAgcmV0dXJuIDE7CisgIH0KKworICB2ID0gY3VybF9wdXNoaGVhZGVyX2J5bmFtZShocCwgIjphdXRob3JpdHkiKTsKKyAgaWYodikgeworICAgIHVjID0gY3VybF91cmxfc2V0KHUsIENVUkxVUEFSVF9IT1NULCB2LCAwKTsKKyAgICBpZih1YykKKyAgICAgIHJldHVybiAyOworICB9CisKKyAgdiA9IGN1cmxfcHVzaGhlYWRlcl9ieW5hbWUoaHAsICI6cGF0aCIpOworICBpZih2KSB7CisgICAgdWMgPSBjdXJsX3VybF9zZXQodSwgQ1VSTFVQQVJUX1BBVEgsIHYsIDApOworICAgIGlmKHVjKQorICAgICAgcmV0dXJuIDM7CisgIH0KKworICB1YyA9IGN1cmxfdXJsX2dldCh1LCBDVVJMVVBBUlRfVVJMLCAmdXJsLCAwKTsKKyAgaWYodWMpCisgICAgcmV0dXJuIDQ7CisgIGN1cmxfdXJsX2NsZWFudXAodSk7CisKKyAgaWYoZGF0YS0+Y2hhbmdlLnVybF9hbGxvYykKKyAgICBmcmVlKGRhdGEtPmNoYW5nZS51cmwpOworICBkYXRhLT5jaGFuZ2UudXJsX2FsbG9jID0gVFJVRTsKKyAgZGF0YS0+Y2hhbmdlLnVybCA9IHVybDsKKyAgcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgcHVzaF9wcm9taXNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCkBAIC01NTQsMTEgKzU0MCwxNSBAQAogICAgIHN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CiAgICAgaWYoIXN0cmVhbSkgewogICAgICAgZmFpbGYoZGF0YSwgIkludGVybmFsIE5VTEwgc3RyZWFtIVxuIik7Ci0gICAgICAodm9pZClDdXJsX2Nsb3NlKG5ld2hhbmRsZSk7CisgICAgICAodm9pZClDdXJsX2Nsb3NlKCZuZXdoYW5kbGUpOwogICAgICAgcnYgPSAxOwogICAgICAgZ290byBmYWlsOwogICAgIH0KIAorICAgIHJ2ID0gc2V0X3RyYW5zZmVyX3VybChuZXdoYW5kbGUsICZoZWFkcyk7CisgICAgaWYocnYpCisgICAgICBnb3RvIGZhaWw7CisKICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKICAgICBydiA9IGRhdGEtPm11bHRpLT5wdXNoX2NiKGRhdGEsIG5ld2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cHVzaF9oZWFkZXJzX3VzZWQsICZoZWFkcywKQEAgLTU3Niw3ICs1NjYsNyBAQAogICAgICAgLyogZGVuaWVkLCBraWxsIG9mZiB0aGUgbmV3IGhhbmRsZSBhZ2FpbiAqLwogICAgICAgaHR0cDJfc3RyZWFtX2ZyZWUobmV3aGFuZGxlLT5yZXEucHJvdG9wKTsKICAgICAgIG5ld2hhbmRsZS0+cmVxLnByb3RvcCA9IE5VTEw7Ci0gICAgICAodm9pZClDdXJsX2Nsb3NlKG5ld2hhbmRsZSk7CisgICAgICAodm9pZClDdXJsX2Nsb3NlKCZuZXdoYW5kbGUpOwogICAgICAgZ290byBmYWlsOwogICAgIH0KIApAQCAtNTkyLDcgKzU4Miw3IEBACiAgICAgICBpbmZvZihkYXRhLCAiZmFpbGVkIHRvIGFkZCBoYW5kbGUgdG8gbXVsdGlcbiIpOwogICAgICAgaHR0cDJfc3RyZWFtX2ZyZWUobmV3aGFuZGxlLT5yZXEucHJvdG9wKTsKICAgICAgIG5ld2hhbmRsZS0+cmVxLnByb3RvcCA9IE5VTEw7Ci0gICAgICBDdXJsX2Nsb3NlKG5ld2hhbmRsZSk7CisgICAgICBDdXJsX2Nsb3NlKCZuZXdoYW5kbGUpOwogICAgICAgcnYgPSAxOwogICAgICAgZ290byBmYWlsOwogICAgIH0KQEAgLTcxNCwxNSArNzA0LDE3IEBACiAgICAgICBzdHJlYW0tPnN0YXR1c19jb2RlID0gLTE7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLCAiXHJcbiIsIDIpOworICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgIlxyXG4iKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKIAotICAgIGxlZnQgPSBzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLT5zaXplX3VzZWQgLSBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmOworICAgIGxlZnQgPSBDdXJsX2R5bl9sZW4oJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYpIC0KKyAgICAgIHN0cmVhbS0+bnJlYWRfaGVhZGVyX3JlY3ZidWY7CiAgICAgbmNvcHkgPSBDVVJMTUlOKHN0cmVhbS0+bGVuLCBsZWZ0KTsKIAogICAgIG1lbWNweSgmc3RyZWFtLT5tZW1bc3RyZWFtLT5tZW1sZW5dLAotICAgICAgICAgICBzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLT5idWZmZXIgKyBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmLAorICAgICAgICAgICBDdXJsX2R5bl9wdHIoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYpICsKKyAgICAgICAgICAgc3RyZWFtLT5ucmVhZF9oZWFkZXJfcmVjdmJ1ZiwKICAgICAgICAgICAgbmNvcHkpOwogICAgIHN0cmVhbS0+bnJlYWRfaGVhZGVyX3JlY3ZidWYgKz0gbmNvcHk7CiAKQEAgLTg0Nyw3ICs4MzksNyBAQAogICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEgyQlVHRihpbmZvZihkYXRhX3MsICJvbl9zdHJlYW1fY2xvc2UoKSwgJXMgKGVyciAlZCksIHN0cmVhbSAldVxuIiwKLSAgICAgICAgICAgICAgICAgaHR0cDJfc3RyZXJyb3IoZXJyb3JfY29kZSksIGVycm9yX2NvZGUsIHN0cmVhbV9pZCkpOworICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVycm9yKGVycm9yX2NvZGUpLCBlcnJvcl9jb2RlLCBzdHJlYW1faWQpKTsKICAgICBzdHJlYW0gPSBkYXRhX3MtPnJlcS5wcm90b3A7CiAgICAgaWYoIXN0cmVhbSkKICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwpAQCAtODU1LDYgKzg0Nyw3IEBACiAgICAgc3RyZWFtLT5jbG9zZWQgPSBUUlVFOwogICAgIGh0dHBjID0gJmNvbm4tPnByb3RvLmh0dHBjOwogICAgIGRyYWluX3RoaXMoZGF0YV9zLCBodHRwYyk7CisgICAgQ3VybF9leHBpcmUoZGF0YV9zLCAwLCBFWFBJUkVfUlVOX05PVyk7CiAgICAgaHR0cGMtPmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwogCiAgICAgLyogcmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSBoYXNoIGFzIHRoZSBzdHJlYW0gaXMgbm93IGdvbmUgKi8KQEAgLTg5NywxMiArODkwLDYgQEAKICAgICByZXR1cm4gMDsKICAgfQogCi0gIGlmKCFzdHJlYW0tPnRyYWlsZXJfcmVjdmJ1ZikgewotICAgIHN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmID0gQ3VybF9hZGRfYnVmZmVyX2luaXQoKTsKLSAgICBpZighc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYpIHsKLSAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFOwotICAgIH0KLSAgfQogICByZXR1cm4gMDsKIH0KIApAQCAtOTc0LDcgKzk2MSw5IEBACiAgICAgICBpZighY2hlY2spCiAgICAgICAgIC8qIG5vIG1lbW9yeSAqLwogICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKLSAgICAgIGlmKCFDdXJsX3N0cmNhc2Vjb21wYXJlKGNoZWNrLCAoY29uc3QgY2hhciAqKXZhbHVlKSkgeworICAgICAgaWYoIUN1cmxfc3RyY2FzZWNvbXBhcmUoY2hlY2ssIChjb25zdCBjaGFyICopdmFsdWUpICYmCisgICAgICAgICAoKGNvbm4tPnJlbW90ZV9wb3J0ICE9IGNvbm4tPmdpdmVuLT5kZWZwb3J0KSB8fAorICAgICAgICAgICFDdXJsX3N0cmNhc2Vjb21wYXJlKGNvbm4tPmhvc3QubmFtZSwgKGNvbnN0IGNoYXIgKil2YWx1ZSkpKSB7CiAgICAgICAgIC8qIFRoaXMgaXMgcHVzaCBpcyBub3QgZm9yIHRoZSBzYW1lIGF1dGhvcml0eSB0aGF0IHdhcyBhc2tlZCBmb3IgaW4KICAgICAgICAgICogdGhlIFVSTC4gUkZDIDc1NDAgc2VjdGlvbiA4LjIgc2F5czogIkEgY2xpZW50IE1VU1QgdHJlYXQgYQogICAgICAgICAgKiBQVVNIX1BST01JU0UgZm9yIHdoaWNoIHRoZSBzZXJ2ZXIgaXMgbm90IGF1dGhvcml0YXRpdmUgYXMgYSBzdHJlYW0KQEAgLTEwMTYsMjYgKzEwMDUsMTkgQEAKICAgfQogCiAgIGlmKHN0cmVhbS0+Ym9keXN0YXJ0ZWQpIHsKLSAgICAvKiBUaGlzIGlzIHRyYWlsZXIgZmllbGRzLiAqLwotICAgIC8qIDQgaXMgZm9yICI6ICIgYW5kICJcclxuIi4gKi8KLSAgICB1aW50MzJfdCBuID0gKHVpbnQzMl90KShuYW1lbGVuICsgdmFsdWVsZW4gKyA0KTsKLQorICAgIC8qIFRoaXMgaXMgYSB0cmFpbGVyICovCisgICAgc3RydWN0IGR5bmJ1ZiB0cmFpbDsKICAgICBIMkJVR0YoaW5mb2YoZGF0YV9zLCAiaDIgdHJhaWxlcjogJS4qczogJS4qc1xuIiwgbmFtZWxlbiwgbmFtZSwgdmFsdWVsZW4sCiAgICAgICAgICAgICAgICAgIHZhbHVlKSk7Ci0KLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmLCAmbiwgc2l6ZW9mKG4pKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmLCBuYW1lLCBuYW1lbGVuKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmLCAiOiAiLCAyKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+dHJhaWxlcl9yZWN2YnVmLCB2YWx1ZSwgdmFsdWVsZW4pOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwotICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYsICJcclxuXDAiLCAzKTsKKyAgICBDdXJsX2R5bl9pbml0KCZ0cmFpbCwgRFlOX0gyX1RSQUlMRVIpOworICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZGYoJnRyYWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUuKnM6ICUuKnNcclxuIiwgbmFtZWxlbiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlbGVuLCB2YWx1ZSk7CisgICAgaWYoIXJlc3VsdCkKKyAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmdHJhaWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fbGVuKCZ0cmFpbCkpOworICAgIEN1cmxfZHluX2ZyZWUoJnRyYWlsKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKIApAQCAtMTA1MCwxNCArMTAzMiwxNCBAQAogICAgIHN0cmVhbS0+c3RhdHVzX2NvZGUgPSBkZWNvZGVfc3RhdHVzX2NvZGUodmFsdWUsIHZhbHVlbGVuKTsKICAgICBERUJVR0FTU0VSVChzdHJlYW0tPnN0YXR1c19jb2RlICE9IC0xKTsKIAotICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgIkhUVFAvMiAiLCA3KTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICJIVFRQLzIgIik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7Ci0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLCB2YWx1ZSwgdmFsdWVsZW4pOworICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZG4oJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsIHZhbHVlLCB2YWx1ZWxlbik7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CiAgICAgLyogdGhlIHNwYWNlIGNoYXJhY3RlciBhZnRlciB0aGUgc3RhdHVzIGNvZGUgaXMgbWFuZGF0b3J5ICovCi0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLCAiIFxyXG4iLCAzKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICIgXHJcbiIpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwogICAgIC8qIGlmIHdlIHJlY2VpdmUgZGF0YSBmb3IgYW5vdGhlciBoYW5kbGUsIHdha2UgdGhhdCB1cCAqLwpAQCAtMTA3MiwxNiArMTA1NCwxNiBAQAogICAvKiBuZ2h0dHAyIGd1YXJhbnRlZXMgdGhhdCBuYW1lbGVuID4gMCwgYW5kIDpzdGF0dXMgd2FzIGFscmVhZHkKICAgICAgcmVjZWl2ZWQsIGFuZCB0aGlzIGlzIG5vdCBwc2V1ZG8taGVhZGVyIGZpZWxkIC4gKi8KICAgLyogY29udmVydCB0byBhIEhUVFAxLXN0eWxlIGhlYWRlciAqLwotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsIG5hbWUsIG5hbWVsZW4pOworICByZXN1bHQgPSBDdXJsX2R5bl9hZGRuKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLCBuYW1lLCBuYW1lbGVuKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICI6ICIsIDIpOworICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICI6ICIpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7Ci0gIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcigmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgdmFsdWUsIHZhbHVlbGVuKTsKKyAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgdmFsdWUsIHZhbHVlbGVuKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICJcclxuIiwgMik7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZiwgIlxyXG4iKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOwogICAvKiBpZiB3ZSByZWNlaXZlIGRhdGEgZm9yIGFub3RoZXIgaGFuZGxlLCB3YWtlIHRoYXQgdXAgKi8KQEAgLTExNDQsOCArMTEyNiw3IEBACiAgIHJldHVybiBucmVhZDsKIH0KIAotI2lmIGRlZmluZWQoTkdIVFRQMl9IQVNfRVJST1JfQ0FMTEJBQ0spICYmICAgICAgXAotICAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCiBzdGF0aWMgaW50IGVycm9yX2NhbGxiYWNrKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLApAQCAtMTE2Miw5ICsxMTQzLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaHR0cF9jb25uICpodHRwYykKIHsKICAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYgPSBodHRwYy0+bG9jYWxfc2V0dGluZ3M7CisgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEpOwogCiAgIGl2WzBdLnNldHRpbmdzX2lkID0gTkdIVFRQMl9TRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TOwotICBpdlswXS52YWx1ZSA9IDEwMDsKKyAgaXZbMF0udmFsdWUgPSBDdXJsX211bHRpX21heF9jb25jdXJyZW50X3N0cmVhbXMoY29ubi0+ZGF0YS0+bXVsdGkpOwogCiAgIGl2WzFdLnNldHRpbmdzX2lkID0gTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFOwogICBpdlsxXS52YWx1ZSA9IEhUVFAyX0hVR0VfV0lORE9XX1NJWkU7CkBAIC0xMTc1LDMzICsxMTU3LDI2IEBACiAgIGh0dHBjLT5sb2NhbF9zZXR0aW5nc19udW0gPSAzOwogfQogCi12b2lkIEN1cmxfaHR0cDJfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgcHJlbWF0dXJlKQordm9pZCBDdXJsX2h0dHAyX2RvbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBwcmVtYXR1cmUpCiB7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgSFRUUCAqaHR0cCA9IGRhdGEtPnJlcS5wcm90b3A7Ci0gIHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjID0gJmNvbm4tPnByb3RvLmh0dHBjOworICBzdHJ1Y3QgaHR0cF9jb25uICpodHRwYyA9ICZkYXRhLT5jb25uLT5wcm90by5odHRwYzsKIAogICAvKiB0aGVyZSBtaWdodCBiZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGRvbmUgYmVmb3JlIHRoaXMgZ290IHRoZSAnaDInIHBvaW50ZXIKICAgICAgc2V0dXAgKi8KLSAgaWYoaHR0cC0+aGVhZGVyX3JlY3ZidWYpIHsKLSAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmaHR0cC0+aGVhZGVyX3JlY3ZidWYpOwotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZodHRwLT50cmFpbGVyX3JlY3ZidWYpOwotICAgIGlmKGh0dHAtPnB1c2hfaGVhZGVycykgewotICAgICAgLyogaWYgdGhleSB3ZXJlbid0IHVzZWQgYW5kIHRoZW4gZnJlZWQgYmVmb3JlICovCi0gICAgICBmb3IoOyBodHRwLT5wdXNoX2hlYWRlcnNfdXNlZCA+IDA7IC0taHR0cC0+cHVzaF9oZWFkZXJzX3VzZWQpIHsKLSAgICAgICAgZnJlZShodHRwLT5wdXNoX2hlYWRlcnNbaHR0cC0+cHVzaF9oZWFkZXJzX3VzZWQgLSAxXSk7Ci0gICAgICB9Ci0gICAgICBmcmVlKGh0dHAtPnB1c2hfaGVhZGVycyk7Ci0gICAgICBodHRwLT5wdXNoX2hlYWRlcnMgPSBOVUxMOworICBDdXJsX2R5bl9mcmVlKCZodHRwLT5oZWFkZXJfcmVjdmJ1Zik7CisgIGlmKGh0dHAtPnB1c2hfaGVhZGVycykgeworICAgIC8qIGlmIHRoZXkgd2VyZW4ndCB1c2VkIGFuZCB0aGVuIGZyZWVkIGJlZm9yZSAqLworICAgIGZvcig7IGh0dHAtPnB1c2hfaGVhZGVyc191c2VkID4gMDsgLS1odHRwLT5wdXNoX2hlYWRlcnNfdXNlZCkgeworICAgICAgZnJlZShodHRwLT5wdXNoX2hlYWRlcnNbaHR0cC0+cHVzaF9oZWFkZXJzX3VzZWQgLSAxXSk7CiAgICAgfQorICAgIGZyZWUoaHR0cC0+cHVzaF9oZWFkZXJzKTsKKyAgICBodHRwLT5wdXNoX2hlYWRlcnMgPSBOVUxMOwogICB9CiAKICAgaWYoIWh0dHBjLT5oMikgLyogbm90IEhUVFAvMiA/ICovCiAgICAgcmV0dXJuOwogCi0gIGlmKGRhdGEtPnN0YXRlLmRyYWluKQotICAgIGRyYWluZWRfdHJhbnNmZXIoZGF0YSwgaHR0cGMpOwotCiAgIGlmKHByZW1hdHVyZSkgewogICAgIC8qIFJTVF9TVFJFQU0gKi8KICAgICBpZighbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbShodHRwYy0+aDIsIE5HSFRUUDJfRkxBR19OT05FLApAQCAtMTIxMyw2ICsxMTg4LDEwIEBACiAgICAgICBodHRwYy0+cGF1c2Vfc3RyZWFtX2lkID0gMDsKICAgICB9CiAgIH0KKworICBpZihkYXRhLT5zdGF0ZS5kcmFpbikKKyAgICBkcmFpbmVkX3RyYW5zZmVyKGRhdGEsIGh0dHBjKTsKKwogICAvKiAtMSBtZWFucyB1bmFzc2lnbmVkIGFuZCAwIG1lYW5zIGNsZWFyZWQgKi8KICAgaWYoaHR0cC0+c3RyZWFtX2lkID4gMCkgewogICAgIGludCBydiA9IG5naHR0cDJfc2Vzc2lvbl9zZXRfc3RyZWFtX3VzZXJfZGF0YShodHRwYy0+aDIsCkBAIC0xMjYzLDkgKzEyNDIsNyBAQAogICAgIC8qIG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrICovCiAgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrKGNhbGxiYWNrcywgb25faGVhZGVyKTsKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiAgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfZXJyb3JfY2FsbGJhY2soY2FsbGJhY2tzLCBlcnJvcl9jYWxsYmFjayk7Ci0jZW5kaWYKIAogICAgIC8qIFRoZSBuZ2h0dHAyIHNlc3Npb24gaXMgbm90IHlldCBzZXR1cCwgZG8gaXQgKi8KICAgICByYyA9IG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KCZjb25uLT5wcm90by5odHRwYy5oMiwgY2FsbGJhY2tzLCBjb25uKTsKQEAgLTEyODMsNyArMTI2MCw3IEBACiAvKgogICogQXBwZW5kIGhlYWRlcnMgdG8gYXNrIGZvciBhIEhUVFAxLjEgdG8gSFRUUDIgdXBncmFkZS4KICAqLwotQ1VSTGNvZGUgQ3VybF9odHRwMl9yZXF1ZXN0X3VwZ3JhZGUoQ3VybF9zZW5kX2J1ZmZlciAqcmVxLAorQ1VSTGNvZGUgQ3VybF9odHRwMl9yZXF1ZXN0X3VwZ3JhZGUoc3RydWN0IGR5bmJ1ZiAqcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBDVVJMY29kZSByZXN1bHQ7CkBAIC0xMzAyLDcgKzEyNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwYy0+bG9jYWxfc2V0dGluZ3NfbnVtKTsKICAgaWYoIWJpbmxlbikgewogICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ2h0dHAyIHVuZXhwZWN0ZWRseSBmYWlsZWQgb24gcGFja19zZXR0aW5nc19wYXlsb2FkIik7Ci0gICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJnJlcSk7CisgICAgQ3VybF9keW5fZnJlZShyZXEpOwogICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKICAgfQogICBjb25uLT5wcm90by5odHRwYy5iaW5sZW4gPSBiaW5sZW47CkBAIC0xMzEwLDE1ICsxMjg3LDE1IEBACiAgIHJlc3VsdCA9IEN1cmxfYmFzZTY0dXJsX2VuY29kZShjb25uLT5kYXRhLCAoY29uc3QgY2hhciAqKWJpbnNldHRpbmdzLCBiaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmFzZTY0LCAmYmxlbik7CiAgIGlmKHJlc3VsdCkgewotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZyZXEpOworICAgIEN1cmxfZHluX2ZyZWUocmVxKTsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKLSAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uOiBVcGdyYWRlLCBIVFRQMi1TZXR0aW5nc1xyXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVwZ3JhZGU6ICVzXHJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFRUUDItU2V0dGluZ3M6ICVzXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9DTEVBUlRFWFRfUFJPVE9fVkVSU0lPTl9JRCwgYmFzZTY0KTsKKyAgcmVzdWx0ID0gQ3VybF9keW5fYWRkZihyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpb246IFVwZ3JhZGUsIEhUVFAyLVNldHRpbmdzXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXBncmFkZTogJXNcclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJIVFRQMi1TZXR0aW5nczogJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0NMRUFSVEVYVF9QUk9UT19WRVJTSU9OX0lELCBiYXNlNjQpOwogICBmcmVlKGJhc2U2NCk7CiAKICAgay0+dXBncjEwMSA9IFVQR1IxMDFfUkVRVUVTVEVEOwpAQCAtMTQxMiwxMCArMTM4OSwxMSBAQAogCiAgICAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CiAKKyAgICBzdHJ1Y3QgaHR0cF9jb25uICpodHRwYyA9ICZjb25uLT5wcm90by5odHRwYzsKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKmgyID0gaHR0cGMtPmgyOworCiAgICAgaWYoc3RyZWFtLT51cGxvYWRfbGVmdCkgewogICAgICAgLyogSWYgdGhlIHN0cmVhbSBzdGlsbCB0aGlua3MgdGhlcmUncyBkYXRhIGxlZnQgdG8gdXBsb2FkLiAqLwotICAgICAgc3RydWN0IGh0dHBfY29ubiAqaHR0cGMgPSAmY29ubi0+cHJvdG8uaHR0cGM7Ci0gICAgICBuZ2h0dHAyX3Nlc3Npb24gKmgyID0gaHR0cGMtPmgyOwogCiAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gMDsgLyogRE9ORSEgKi8KIApAQCAtMTQyNSw2ICsxNDAzLDIzIEBACiAKICAgICAgICh2b2lkKWgyX3Byb2Nlc3NfcGVuZGluZ19pbnB1dChjb25uLCBodHRwYywgJnJlc3VsdCk7CiAgICAgfQorCisgICAgLyogSWYgbmdodHRwMiBzdGlsbCBoYXMgcGVuZGluZyBmcmFtZXMgdW5zZW50ICovCisgICAgaWYobmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUoaDIpKSB7CisgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKKyAgICAgIGludCBydjsKKworICAgICAgSDJCVUdGKGluZm9mKGRhdGEsICJIVFRQLzIgc3RpbGwgd2FudHMgdG8gc2VuZCBkYXRhIChlYXN5ICVwKVxuIiwgZGF0YSkpOworCisgICAgICAvKiByZS1zZXQgS0VFUF9TRU5EIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgY2FsbGVkIGFnYWluICovCisgICAgICBrLT5rZWVwb24gfD0gS0VFUF9TRU5EOworCisgICAgICAvKiBhbmQgYXR0ZW1wdCB0byBzZW5kIHRoZSBwZW5kaW5nIGZyYW1lcyAqLworICAgICAgcnYgPSBoMl9zZXNzaW9uX3NlbmQoZGF0YSwgaDIpOworICAgICAgaWYocnYgIT0gMCkKKyAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICB9CiAgIH0KICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0MzMsOCArMTQyOCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBIVFRQICpzdHJlYW0sIENVUkxjb2RlICplcnIpCiB7Ci0gIGNoYXIgKnRyYWlsZXJfcG9zLCAqdHJhaWxlcl9lbmQ7Ci0gIENVUkxjb2RlIHJlc3VsdDsKICAgc3RydWN0IGh0dHBfY29ubiAqaHR0cGMgPSAmY29ubi0+cHJvdG8uaHR0cGM7CiAKICAgaWYoaHR0cGMtPnBhdXNlX3N0cmVhbV9pZCA9PSBzdHJlYW0tPnN0cmVhbV9pZCkgewpAQCAtMTQ2Myw3ICsxNDU2LDcgQEAKICAgfQogICBlbHNlIGlmKGh0dHBjLT5lcnJvcl9jb2RlICE9IE5HSFRUUDJfTk9fRVJST1IpIHsKICAgICBmYWlsZihkYXRhLCAiSFRUUC8yIHN0cmVhbSAlZCB3YXMgbm90IGNsb3NlZCBjbGVhbmx5OiAlcyAoZXJyICV1KSIsCi0gICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIGh0dHAyX3N0cmVycm9yKGh0dHBjLT5lcnJvcl9jb2RlKSwKKyAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwgbmdodHRwMl9zdHJlcnJvcihodHRwYy0+ZXJyb3JfY29kZSksCiAgICAgICAgICAgaHR0cGMtPmVycm9yX2NvZGUpOwogICAgICplcnIgPSBDVVJMRV9IVFRQMl9TVFJFQU07CiAgICAgcmV0dXJuIC0xOwpAQCAtMTQ3NywyNSArMTQ3MCw2IEBACiAgICAgcmV0dXJuIC0xOwogICB9CiAKLSAgaWYoc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYgJiYgc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYtPmJ1ZmZlcikgewotICAgIHRyYWlsZXJfcG9zID0gc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYtPmJ1ZmZlcjsKLSAgICB0cmFpbGVyX2VuZCA9IHRyYWlsZXJfcG9zICsgc3RyZWFtLT50cmFpbGVyX3JlY3ZidWYtPnNpemVfdXNlZDsKLQotICAgIGZvcig7IHRyYWlsZXJfcG9zIDwgdHJhaWxlcl9lbmQ7KSB7Ci0gICAgICB1aW50MzJfdCBuOwotICAgICAgbWVtY3B5KCZuLCB0cmFpbGVyX3Bvcywgc2l6ZW9mKG4pKTsKLSAgICAgIHRyYWlsZXJfcG9zICs9IHNpemVvZihuKTsKLQotICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0cmFpbGVyX3Bvcywgbik7Ci0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgKmVyciA9IHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotCi0gICAgICB0cmFpbGVyX3BvcyArPSBuICsgMTsKLSAgICB9Ci0gIH0KLQogICBzdHJlYW0tPmNsb3NlX2hhbmRsZWQgPSBUUlVFOwogCiAgIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdiByZXR1cm5zIDAsIGh0dHAyX2hhbmRsZV9zdHJlYW1fY2xvc2VcbiIpKTsKQEAgLTE1NDEsNiArMTUxNSw3IEBACiAKICAgICBIMkJVR0YoaW5mb2YoZGF0YSwgIlF1ZXVpbmcgUFJJT1JJVFkgb24gc3RyZWFtICV1IChlYXN5ICVwKVxuIiwKICAgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIGRhdGEpKTsKKyAgICBERUJVR0FTU0VSVChzdHJlYW0tPnN0cmVhbV9pZCAhPSAtMSk7CiAgICAgcnYgPSBuZ2h0dHAyX3N1Ym1pdF9wcmlvcml0eShoMiwgTkdIVFRQMl9GTEFHX05PTkUsIHN0cmVhbS0+c3RyZWFtX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaV9zcGVjKTsKICAgICBpZihydikKQEAgLTE1NjUsNiArMTU0MCwxMSBAQAogICBpZihzaG91bGRfY2xvc2Vfc2Vzc2lvbihodHRwYykpIHsKICAgICBIMkJVR0YoaW5mb2YoZGF0YSwKICAgICAgICAgICAgICAgICAgImh0dHAyX3JlY3Y6IG5vdGhpbmcgdG8gZG8gaW4gdGhpcyBzZXNzaW9uXG4iKSk7CisgICAgaWYoY29ubi0+Yml0cy5jbG9zZSkgeworICAgICAgLyogYWxyZWFkeSBtYXJrZWQgZm9yIGNsb3N1cmUsIHJldHVybiBPSyBhbmQgd2UncmUgZG9uZSAqLworICAgICAgKmVyciA9IENVUkxFX09LOworICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgICplcnIgPSBDVVJMRV9IVFRQMjsKICAgICByZXR1cm4gLTE7CiAgIH0KQEAgLTE1ODAsMTMgKzE1NjAsMTMgQEAKICAgICovCiAKICAgaWYoc3RyZWFtLT5ib2R5c3RhcnRlZCAmJgotICAgICBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmIDwgc3RyZWFtLT5oZWFkZXJfcmVjdmJ1Zi0+c2l6ZV91c2VkKSB7Ci0gICAgLyogSWYgdGhlcmUgaXMgYm9keSBkYXRhIHBlbmRpbmcgZm9yIHRoaXMgc3RyZWFtIHRvIHJldHVybiwgZG8gdGhhdCAqLworICAgICBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmIDwgQ3VybF9keW5fbGVuKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmKSkgeworICAgIC8qIElmIHRoZXJlIGlzIGhlYWRlciBkYXRhIHBlbmRpbmcgZm9yIHRoaXMgc3RyZWFtIHRvIHJldHVybiwgZG8gdGhhdCAqLwogICAgIHNpemVfdCBsZWZ0ID0KLSAgICAgIHN0cmVhbS0+aGVhZGVyX3JlY3ZidWYtPnNpemVfdXNlZCAtIHN0cmVhbS0+bnJlYWRfaGVhZGVyX3JlY3ZidWY7CisgICAgICBDdXJsX2R5bl9sZW4oJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYpIC0gc3RyZWFtLT5ucmVhZF9oZWFkZXJfcmVjdmJ1ZjsKICAgICBzaXplX3QgbmNvcHkgPSBDVVJMTUlOKGxlbiwgbGVmdCk7Ci0gICAgbWVtY3B5KG1lbSwgc3RyZWFtLT5oZWFkZXJfcmVjdmJ1Zi0+YnVmZmVyICsgc3RyZWFtLT5ucmVhZF9oZWFkZXJfcmVjdmJ1ZiwKLSAgICAgICAgICAgbmNvcHkpOworICAgIG1lbWNweShtZW0sIEN1cmxfZHluX3B0cigmc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZikgKworICAgICAgICAgICBzdHJlYW0tPm5yZWFkX2hlYWRlcl9yZWN2YnVmLCBuY29weSk7CiAgICAgc3RyZWFtLT5ucmVhZF9oZWFkZXJfcmVjdmJ1ZiArPSBuY29weTsKIAogICAgIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdjogR290ICVkIGJ5dGVzIGZyb20gaGVhZGVyX3JlY3ZidWZcbiIsCkBAIC0xNTk0LDggKzE1NzQsMTIgQEAKICAgICByZXR1cm4gbmNvcHk7CiAgIH0KIAotICBIMkJVR0YoaW5mb2YoZGF0YSwgImh0dHAyX3JlY3Y6IGVhc3kgJXAgKHN0cmVhbSAldSlcbiIsCi0gICAgICAgICAgICAgICBkYXRhLCBzdHJlYW0tPnN0cmVhbV9pZCkpOworICBIMkJVR0YoaW5mb2YoZGF0YSwgImh0dHAyX3JlY3Y6IGVhc3kgJXAgKHN0cmVhbSAldSkgd2luICV1LyV1XG4iLAorICAgICAgICAgICAgICAgZGF0YSwgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICAgICAgICBuZ2h0dHAyX3Nlc3Npb25fZ2V0X2xvY2FsX3dpbmRvd19zaXplKGh0dHBjLT5oMiksCisgICAgICAgICAgICAgICBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9sb2NhbF93aW5kb3dfc2l6ZShodHRwYy0+aDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCkKKyAgICAgICAgICAgKSk7CiAKICAgaWYoKGRhdGEtPnN0YXRlLmRyYWluKSAmJiBzdHJlYW0tPm1lbWxlbikgewogICAgIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdjogRFJBSU4gJXp1IGJ5dGVzIHN0cmVhbSAldSEhICglcCA9PiAlcClcbiIsCkBAIC0xNjI2LDcgKzE2MTAsNiBAQAogICAgIHN0cmVhbS0+cGF1c2VkYXRhICs9IG5yZWFkOwogICAgIHN0cmVhbS0+cGF1c2VsZW4gLT0gbnJlYWQ7CiAKLSAgICBpbmZvZihkYXRhLCAiJXpkIGRhdGEgYnl0ZXMgd3JpdHRlblxuIiwgbnJlYWQpOwogICAgIGlmKHN0cmVhbS0+cGF1c2VsZW4gPT0gMCkgewogICAgICAgSDJCVUdGKGluZm9mKGRhdGEsICJVbnBhdXNlZCBieSBzdHJlYW0gJXVcbiIsIHN0cmVhbS0+c3RyZWFtX2lkKSk7CiAgICAgICBERUJVR0FTU0VSVChodHRwYy0+cGF1c2Vfc3RyZWFtX2lkID09IHN0cmVhbS0+c3RyZWFtX2lkKTsKQEAgLTE2NjAsNiArMTY0Myw5IEBACiAgICAgICAgc29ja2V0IGlzIG5vdCByZWFkLiAgQnV0IGl0IHNlZW1zIHRoYXQgdXN1YWxseSBzdHJlYW1zIGFyZQogICAgICAgIG5vdGlmaWVkIHdpdGggaXRzIGRyYWluIHByb3BlcnR5LCBhbmQgc29ja2V0IGlzIHJlYWQgYWdhaW4KICAgICAgICBxdWlja2x5LiAqLworICAgIGlmKHN0cmVhbS0+Y2xvc2VkKQorICAgICAgLyogY2xvc2VkIG92ZXJyaWRlcyBwYXVzZWQgKi8KKyAgICAgIHJldHVybiAwOwogICAgIEgyQlVHRihpbmZvZihkYXRhLCAic3RyZWFtICV4IGlzIHBhdXNlZCwgcGF1c2UgaWQ6ICV4XG4iLAogICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwgaHR0cGMtPnBhdXNlX3N0cmVhbV9pZCkpOwogICAgICplcnIgPSBDVVJMRV9BR0FJTjsKQEAgLTE3NTQsMTQgKzE3NDAsMTQgQEAKICAgICBlbHNlIGlmKCFzdHJlYW0tPmNsb3NlZCkgewogICAgICAgZHJhaW5lZF90cmFuc2ZlcihkYXRhLCBodHRwYyk7CiAgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIHRoaXMgc3RyZWFtIGlzIGNsb3NlZCwgdHJpZ2dlciBhIGFub3RoZXIgcmVhZCBBU0FQIHRvIGRldGVjdCB0aGF0ICovCisgICAgICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUlVOX05PVyk7CiAKICAgICByZXR1cm4gcmV0bGVuOwogICB9Ci0gIC8qIElmIHN0cmVhbSBpcyBjbG9zZWQsIHJldHVybiAwIHRvIHNpZ25hbCB0aGUgaHR0cCByb3V0aW5lIHRvIGNsb3NlCi0gICAgIHRoZSBjb25uZWN0aW9uICovCi0gIGlmKHN0cmVhbS0+Y2xvc2VkKSB7Ci0gICAgcmV0dXJuIGh0dHAyX2hhbmRsZV9zdHJlYW1fY2xvc2UoY29ubiwgZGF0YSwgc3RyZWFtLCBlcnIpOwotICB9CisgIGlmKHN0cmVhbS0+Y2xvc2VkKQorICAgIHJldHVybiAwOwogICAqZXJyID0gQ1VSTEVfQUdBSU47CiAgIEgyQlVHRihpbmZvZihkYXRhLCAiaHR0cDJfcmVjdiByZXR1cm5zIEFHQUlOIGZvciBzdHJlYW0gJXVcbiIsCiAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCkpOwpAQCAtMTc3Miw4ICsxNzU4LDkgQEAKICAgIGZpZWxkIGxpc3QuICovCiAjZGVmaW5lIEFVVEhPUklUWV9EU1RfSURYIDMKIAorLyogVVNIUlRfTUFYIGlzIDY1NTM1ID09IDB4ZmZmZiAqLwogI2RlZmluZSBIRUFERVJfT1ZFUkZMT1coeCkgXAotICAoeC5uYW1lbGVuID4gKHVpbnQxNl90KS0xIHx8IHgudmFsdWVsZW4gPiAodWludDE2X3QpLTEgLSB4Lm5hbWVsZW4pCisgICh4Lm5hbWVsZW4gPiAweGZmZmYgfHwgeC52YWx1ZWxlbiA+IDB4ZmZmZiAtIHgubmFtZWxlbikKIAogLyoKICAqIENoZWNrIGhlYWRlciBtZW1vcnkgZm9yIHRoZSB0b2tlbiAidHJhaWxlcnMiLgpAQCAtMTg4MCw3ICsxODY3LDExIEBACiAgICAgICAgYXJlIGdvaW5nIHRvIHNlbmQgb3Igc2VuZGluZyByZXF1ZXN0IGJvZHkgaW4gREFUQSBmcmFtZSAqLwogICAgIHN0cmVhbS0+dXBsb2FkX21lbSA9IG1lbTsKICAgICBzdHJlYW0tPnVwbG9hZF9sZW4gPSBsZW47Ci0gICAgbmdodHRwMl9zZXNzaW9uX3Jlc3VtZV9kYXRhKGgyLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEoaDIsIHN0cmVhbS0+c3RyZWFtX2lkKTsKKyAgICBpZihuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgKmVyciA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIHJ2ID0gaDJfc2Vzc2lvbl9zZW5kKGNvbm4tPmRhdGEsIGgyKTsKICAgICBpZihuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgewogICAgICAgKmVyciA9IENVUkxFX1NFTkRfRVJST1I7CkBAIC0yMDE5LDggKzIwMTAsMTAgQEAKICAgICAgIG52YVtpXS5uYW1lbGVuID0gc3RybGVuKChjaGFyICopbnZhW2ldLm5hbWUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgIG52YVtpXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKICAgICAgIG52YVtpXS5uYW1lbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICAgICAgLyogTG93ZXIgY2FzZSB0aGUgaGVhZGVyIG5hbWUgZm9yIEhUVFAvMiAqLworICAgICAgQ3VybF9zdHJudG9sb3dlcigoY2hhciAqKWhkYnVmLCBoZGJ1ZiwgbnZhW2ldLm5hbWVsZW4pOworICAgICAgbnZhW2ldLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOwogICAgIH0KICAgICBoZGJ1ZiA9IGVuZCArIDE7CiAgICAgd2hpbGUoKmhkYnVmID09ICcgJyB8fCAqaGRidWYgPT0gJ1x0JykKQEAgLTIwODIsNyArMjA3NSw3IEBACiAKICAgaDJfcHJpX3NwZWMoY29ubi0+ZGF0YSwgJnByaV9zcGVjKTsKIAotICBzd2l0Y2goY29ubi0+ZGF0YS0+c2V0Lmh0dHByZXEpIHsKKyAgc3dpdGNoKGNvbm4tPmRhdGEtPnN0YXRlLmh0dHByZXEpIHsKICAgY2FzZSBIVFRQUkVRX1BPU1Q6CiAgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CiAgIGNhc2UgSFRUUFJFUV9QT1NUX01JTUU6CkBAIC0yMTMwLDE3ICsyMTIzLDE0IEBACiAgICAgcmV0dXJuIC0xOwogICB9CiAKLSAgaWYoc3RyZWFtLT5zdHJlYW1faWQgIT0gLTEpIHsKLSAgICAvKiBJZiB3aG9sZSBIRUFERVJTIGZyYW1lIHdhcyBzZW50IG9mZiB0byB0aGUgdW5kZXJseWluZyBzb2NrZXQsCi0gICAgICAgdGhlIG5naHR0cDIgbGlicmFyeSBjYWxscyBkYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrLiBCdXQgb25seQotICAgICAgIGl0IGZvdW5kIHRoYXQgbm8gZGF0YSBhdmFpbGFibGUsIHNvIGl0IGRlZmVycmVkIHRoZSBEQVRBCi0gICAgICAgdHJhbnNtaXNzaW9uLiBXaGljaCBtZWFucyB0aGF0IG5naHR0cDJfc2Vzc2lvbl93YW50X3dyaXRlKCkKLSAgICAgICByZXR1cm5zIDAgb24gaHR0cDJfcGVyZm9ybV9nZXRzb2NrKCksIHdoaWNoIHJlc3VsdHMgdGhhdCBubwotICAgICAgIHdyaXRhYmxlIHNvY2tldCBjaGVjayBpcyBwZXJmb3JtZWQuIFRvIHdvcmthcm91bmQgdGhpcywgd2UKLSAgICAgICBpc3N1ZSBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEoKSBoZXJlIHRvIGJyaW5nIGJhY2sgREFUQQotICAgICAgIHRyYW5zbWlzc2lvbiBmcm9tIGRlZmVycmVkIHN0YXRlLiAqLwotICAgIG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YShoMiwgc3RyZWFtLT5zdHJlYW1faWQpOwotICB9CisgIC8qIElmIHdob2xlIEhFQURFUlMgZnJhbWUgd2FzIHNlbnQgb2ZmIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCwgdGhlIG5naHR0cDIKKyAgICAgbGlicmFyeSBjYWxscyBkYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrLiBCdXQgb25seSBpdCBmb3VuZCB0aGF0IG5vIGRhdGEKKyAgICAgYXZhaWxhYmxlLCBzbyBpdCBkZWZlcnJlZCB0aGUgREFUQSB0cmFuc21pc3Npb24uIFdoaWNoIG1lYW5zIHRoYXQKKyAgICAgbmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUoKSByZXR1cm5zIDAgb24gaHR0cDJfcGVyZm9ybV9nZXRzb2NrKCksIHdoaWNoCisgICAgIHJlc3VsdHMgdGhhdCBubyB3cml0YWJsZSBzb2NrZXQgY2hlY2sgaXMgcGVyZm9ybWVkLiBUbyB3b3JrYXJvdW5kIHRoaXMsCisgICAgIHdlIGlzc3VlIG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YSgpIGhlcmUgdG8gYnJpbmcgYmFjayBEQVRBCisgICAgIHRyYW5zbWlzc2lvbiBmcm9tIGRlZmVycmVkIHN0YXRlLiAqLworICBuZ2h0dHAyX3Nlc3Npb25fcmVzdW1lX2RhdGEoaDIsIHN0cmVhbS0+c3RyZWFtX2lkKTsKIAogICByZXR1cm4gbGVuOwogCkBAIC0yMTU2LDEzICsyMTQ2LDExIEBACiAgIHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjID0gJmNvbm4tPnByb3RvLmh0dHBjOwogICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKIAorICBERUJVR0FTU0VSVChjb25uLT5kYXRhLT5zdGF0ZS5idWZmZXIpOworCiAgIHN0cmVhbS0+c3RyZWFtX2lkID0gLTE7CiAKLSAgaWYoIXN0cmVhbS0+aGVhZGVyX3JlY3ZidWYpIHsKLSAgICBzdHJlYW0tPmhlYWRlcl9yZWN2YnVmID0gQ3VybF9hZGRfYnVmZmVyX2luaXQoKTsKLSAgICBpZighc3RyZWFtLT5oZWFkZXJfcmVjdmJ1ZikKLSAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICB9CisgIEN1cmxfZHluX2luaXQoJnN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsIERZTl9IMl9IRUFERVJTKTsKIAogICBpZigoY29ubi0+aGFuZGxlciA9PSAmQ3VybF9oYW5kbGVyX2h0dHAyX3NzbCkgfHwKICAgICAgKGNvbm4tPmhhbmRsZXIgPT0gJkN1cmxfaGFuZGxlcl9odHRwMikpCkBAIC0yMTc1LDcgKzIxNjMsNyBAQAogCiAgIHJlc3VsdCA9IGh0dHAyX2luaXQoY29ubik7CiAgIGlmKHJlc3VsdCkgewotICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmKTsKKyAgICBDdXJsX2R5bl9mcmVlKCZzdHJlYW0tPmhlYWRlcl9yZWN2YnVmKTsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKQEAgLTIxODMsNiArMjE3MSw4IEBACiAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSAwOwogICBzdHJlYW0tPnVwbG9hZF9tZW0gPSBOVUxMOwogICBzdHJlYW0tPnVwbG9hZF9sZW4gPSAwOworICBzdHJlYW0tPm1lbSA9IGNvbm4tPmRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgc3RyZWFtLT5sZW4gPSBjb25uLT5kYXRhLT5zZXQuYnVmZmVyX3NpemU7CiAKICAgaHR0cGMtPmluYnVmbGVuID0gMDsKICAgaHR0cGMtPm5yZWFkX2luYnVmID0gMDsKQEAgLTIyNTUsNyArMjI0NSw2IEBACiAgICAgfQogICB9CiAKLSNpZmRlZiBOR0hUVFAyX0hBU19TRVRfTE9DQUxfV0lORE9XX1NJWkUKICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fc2V0X2xvY2FsX3dpbmRvd19zaXplKGh0dHBjLT5oMiwgTkdIVFRQMl9GTEFHX05PTkUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQMl9IVUdFX1dJTkRPV19TSVpFKTsKICAgaWYocnYgIT0gMCkgewpAQCAtMjI2Myw3ICsyMjUyLDYgQEAKICAgICAgICAgICBuZ2h0dHAyX3N0cmVycm9yKHJ2KSwgcnYpOwogICAgIHJldHVybiBDVVJMRV9IVFRQMjsKICAgfQotI2VuZGlmCiAKICAgLyogd2UgYXJlIGdvaW5nIHRvIGNvcHkgbWVtIHRvIGh0dHBjLT5pbmJ1Zi4gIFRoaXMgaXMgcmVxdWlyZWQgc2luY2UKICAgICAgbWVtIGlzIHBhcnQgb2YgYnVmZmVyIHBvaW50ZWQgYnkgc3RyZWFtLT5tZW0sIGFuZCBjYWxsYmFja3MKQEAgLTIzMjEsNiArMjMwOSw1MSBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKK0NVUkxjb2RlIEN1cmxfaHR0cDJfc3RyZWFtX3BhdXNlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgcGF1c2UpCit7CisgIERFQlVHQVNTRVJUKGRhdGEpOworICBERUJVR0FTU0VSVChkYXRhLT5jb25uKTsKKyAgLyogaWYgaXQgaXNuJ3QgSFRUUC8yLCB3ZSdyZSBkb25lICovCisgIGlmKCFkYXRhLT5jb25uLT5wcm90by5odHRwYy5oMikKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisjaWZkZWYgTkdIVFRQMl9IQVNfU0VUX0xPQ0FMX1dJTkRPV19TSVpFCisgIGVsc2UgeworICAgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBkYXRhLT5yZXEucHJvdG9wOworICAgIHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjID0gJmRhdGEtPmNvbm4tPnByb3RvLmh0dHBjOworICAgIHVpbnQzMl90IHdpbmRvdyA9ICFwYXVzZSAqIEhUVFAyX0hVR0VfV0lORE9XX1NJWkU7CisgICAgaW50IHJ2ID0gbmdodHRwMl9zZXNzaW9uX3NldF9sb2NhbF93aW5kb3dfc2l6ZShodHRwYy0+aDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMQUdfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93KTsKKyAgICBpZihydikgeworICAgICAgZmFpbGYoZGF0YSwgIm5naHR0cDJfc2Vzc2lvbl9zZXRfbG9jYWxfd2luZG93X3NpemUoKSBmYWlsZWQ6ICVzKCVkKSIsCisgICAgICAgICAgICBuZ2h0dHAyX3N0cmVycm9yKHJ2KSwgcnYpOworICAgICAgcmV0dXJuIENVUkxFX0hUVFAyOworICAgIH0KKworICAgIC8qIG1ha2Ugc3VyZSB0aGUgd2luZG93IHVwZGF0ZSBnZXRzIHNlbnQgKi8KKyAgICBydiA9IGgyX3Nlc3Npb25fc2VuZChkYXRhLCBodHRwYy0+aDIpOworICAgIGlmKHJ2KQorICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisKKyAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNldCBIVFRQLzIgd2luZG93IHNpemUgdG8gJXUgZm9yIHN0cmVhbSAldVxuIiwKKyAgICAgICAgICAgICAgICAgd2luZG93LCBzdHJlYW0tPnN0cmVhbV9pZCkpOworCisjaWZkZWYgREVCVUdCVUlMRAorICAgIHsKKyAgICAgIC8qIHJlYWQgb3V0IHRoZSBzdHJlYW0gbG9jYWwgd2luZG93IGFnYWluICovCisgICAgICB1aW50MzJfdCB3aW5kb3cyID0KKyAgICAgICAgbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fbG9jYWxfd2luZG93X3NpemUoaHR0cGMtPmgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCk7CisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkhUVFAvMiB3aW5kb3cgc2l6ZSBpcyBub3cgJXUgZm9yIHN0cmVhbSAldVxuIiwKKyAgICAgICAgICAgICAgICAgICB3aW5kb3cyLCBzdHJlYW0tPnN0cmVhbV9pZCkpOworICAgIH0KKyNlbmRpZgorICB9CisjZW5kaWYKKyAgcmV0dXJuIENVUkxFX09LOworfQorCiBDVVJMY29kZSBDdXJsX2h0dHAyX2FkZF9jaGlsZChzdHJ1Y3QgQ3VybF9lYXN5ICpwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpjaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVzaXZlKQpAQCAtMjQxNCw4ICsyNDQ3LDYgQEAKICNlbHNlIC8qICFVU0VfTkdIVFRQMiAqLwogCiAvKiBTYXRpc2Z5IGV4dGVybmFsIHJlZmVyZW5jZXMgZXZlbiBpZiBodHRwMiBpcyBub3QgY29tcGlsZWQgaW4uICovCi0KLSNkZWZpbmUgQ1VSTF9ESVNBQkxFX1RZUEVDSEVDSwogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgogCiBjaGFyICpjdXJsX3B1c2hoZWFkZXJfYnludW0oc3RydWN0IGN1cmxfcHVzaGhlYWRlcnMgKmgsIHNpemVfdCBudW0pCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwMi5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cDIuaAppbmRleCBkYjYyMTdiLi5lODJiMjEyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwMi5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHAyLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQyLDE2ICs0MiwxNSBAQAogQ1VSTGNvZGUgQ3VybF9odHRwMl9pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiB2b2lkIEN1cmxfaHR0cDJfaW5pdF9zdGF0ZShzdHJ1Y3QgVXJsU3RhdGUgKnN0YXRlKTsKIHZvaWQgQ3VybF9odHRwMl9pbml0X3VzZXJzZXQoc3RydWN0IFVzZXJEZWZpbmVkICpzZXQpOwotQ1VSTGNvZGUgQ3VybF9odHRwMl9zZW5kX3JlcXVlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKLUNVUkxjb2RlIEN1cmxfaHR0cDJfcmVxdWVzdF91cGdyYWRlKEN1cmxfc2VuZF9idWZmZXIgKnJlcSwKK0NVUkxjb2RlIEN1cmxfaHR0cDJfcmVxdWVzdF91cGdyYWRlKHN0cnVjdCBkeW5idWYgKnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBDVVJMY29kZSBDdXJsX2h0dHAyX3NldHVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBDVVJMY29kZSBDdXJsX2h0dHAyX3N3aXRjaGVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IG5yZWFkKTsKLS8qIGNhbGxlZCBmcm9tIEN1cmxfaHR0cF9zZXR1cF9jb25uICovCisvKiBjYWxsZWQgZnJvbSBodHRwX3NldHVwX2Nvbm4gKi8KIHZvaWQgQ3VybF9odHRwMl9zZXR1cF9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiB2b2lkIEN1cmxfaHR0cDJfc2V0dXBfcmVxKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotdm9pZCBDdXJsX2h0dHAyX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIHByZW1hdHVyZSk7Cit2b2lkIEN1cmxfaHR0cDJfZG9uZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBib29sIHByZW1hdHVyZSk7CiBDVVJMY29kZSBDdXJsX2h0dHAyX2RvbmVfc2VuZGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogQ1VSTGNvZGUgQ3VybF9odHRwMl9hZGRfY2hpbGQoc3RydWN0IEN1cmxfZWFzeSAqcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqY2hpbGQsCkBAIC01OSwxMSArNTgsMTEgQEAKIHZvaWQgQ3VybF9odHRwMl9yZW1vdmVfY2hpbGQoc3RydWN0IEN1cmxfZWFzeSAqcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpjaGlsZCk7CiB2b2lkIEN1cmxfaHR0cDJfY2xlYW51cF9kZXBlbmRlbmNpZXMoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7CitDVVJMY29kZSBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBib29sIHBhdXNlKTsKIAogLyogcmV0dXJucyB0cnVlIGlmIHRoZSBIVFRQLzIgc3RyZWFtIGVycm9yIHdhcyBIVFRQXzFfMV9SRVFVSVJFRCAqLwogYm9vbCBDdXJsX2gyX2h0dHBfMV8xX2Vycm9yKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAjZWxzZSAvKiBVU0VfTkdIVFRQMiAqLwotI2RlZmluZSBDdXJsX2h0dHAyX3NlbmRfcmVxdWVzdCh4KSBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTAogI2RlZmluZSBDdXJsX2h0dHAyX3JlcXVlc3RfdXBncmFkZSh4LHkpIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MCiAjZGVmaW5lIEN1cmxfaHR0cDJfc2V0dXAoeCkgQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0wKICNkZWZpbmUgQ3VybF9odHRwMl9zd2l0Y2hlZCh4LHkseikgQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0wKQEAgLTc2LDYgKzc1LDcgQEAKICNkZWZpbmUgQ3VybF9odHRwMl9hZGRfY2hpbGQoeCwgeSwgeikKICNkZWZpbmUgQ3VybF9odHRwMl9yZW1vdmVfY2hpbGQoeCwgeSkKICNkZWZpbmUgQ3VybF9odHRwMl9jbGVhbnVwX2RlcGVuZGVuY2llcyh4KQorI2RlZmluZSBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZSh4LCB5KQogI2RlZmluZSBDdXJsX2gyX2h0dHBfMV8xX2Vycm9yKHgpIDAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9jaHVua3MuYwppbmRleCAxOGRmY2IyLi43NjdmODA2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfY2h1bmtzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgInVybGRhdGEuaCIgLyogaXQgaW5jbHVkZXMgaHR0cF9jaHVua3MuaCAqLwogI2luY2x1ZGUgInNlbmRmLmgiICAgLyogZm9yIHRoZSBjbGllbnQgd3JpdGUgc3R1ZmYgKi8KLQorI2luY2x1ZGUgImR5bmJ1Zi5oIgogI2luY2x1ZGUgImNvbnRlbnRfZW5jb2RpbmcuaCIKICNpbmNsdWRlICJodHRwLmgiCiAjaW5jbHVkZSAibm9uLWFzY2lpLmgiIC8qIGZvciBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayBwcm90b3R5cGUgKi8KQEAgLTkzLDYgKzkzLDcgQEAKICAgY2h1bmstPmhleGluZGV4ID0gMDsgICAgICAvKiBzdGFydCBhdCAwICovCiAgIGNodW5rLT5kYXRhbGVmdCA9IDA7ICAgICAgLyogbm8gZGF0YSBsZWZ0IHlldCEgKi8KICAgY2h1bmstPnN0YXRlID0gQ0hVTktfSEVYOyAvKiB3ZSBnZXQgaGV4IGZpcnN0ISAqLworICBDdXJsX2R5bl9pbml0KCZjb25uLT50cmFpbGVyLCBEWU5fSDFfVFJBSUxFUik7CiB9CiAKIC8qCkBAIC0xMDksNyArMTEwLDggQEAKIENIVU5LY29kZSBDdXJsX2h0dHBjaHVua19yZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBkYXRhbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JvdGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JvdGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmV4dHJhcCkKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwpAQCAtMTI1LDggKzEyNywxMCBAQAogICAgICBjaHVuayByZWFkIHByb2Nlc3MsIHRvIHByb3Blcmx5IGNhbGN1bGF0ZSB0aGUgY29udGVudCBsZW5ndGgqLwogICBpZihkYXRhLT5zZXQuaHR0cF90ZV9za2lwICYmICFrLT5pZ25vcmVib2R5KSB7CiAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgZGF0YXAsIGRhdGFsZW4pOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiBDSFVOS0VfV1JJVEVfRVJST1I7CisgICAgaWYocmVzdWx0KSB7CisgICAgICAqZXh0cmFwID0gcmVzdWx0OworICAgICAgcmV0dXJuIENIVU5LRV9QQVNTVEhSVV9FUlJPUjsKKyAgICB9CiAgIH0KIAogICB3aGlsZShsZW5ndGgpIHsKQEAgLTE3NCw3ICsxNzgsNiBAQAogICAgICAgICAvKiB3ZSdyZSBub3cgZXhwZWN0aW5nIGRhdGEgdG8gY29tZSwgdW5sZXNzIHNpemUgd2FzIHplcm8hICovCiAgICAgICAgIGlmKDAgPT0gY2gtPmRhdGFzaXplKSB7CiAgICAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfVFJBSUxFUjsgLyogbm93IGNoZWNrIGZvciB0cmFpbGVycyAqLwotICAgICAgICAgIGNvbm4tPnRybFBvcyA9IDA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgIGNoLT5zdGF0ZSA9IENIVU5LX0RBVEE7CkBAIC0xOTcsOCArMjAwLDEwIEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCBkYXRhcCwgcGllY2UpOwogCi0gICAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgICByZXR1cm4gQ0hVTktFX1dSSVRFX0VSUk9SOworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAqZXh0cmFwID0gcmVzdWx0OworICAgICAgICAgIHJldHVybiBDSFVOS0VfUEFTU1RIUlVfRVJST1I7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgKndyb3RlICs9IHBpZWNlOwpAQCAtMjI0LDMwICsyMjksMzMgQEAKIAogICAgIGNhc2UgQ0hVTktfVFJBSUxFUjoKICAgICAgIGlmKCgqZGF0YXAgPT0gMHgwZCkgfHwgKCpkYXRhcCA9PSAweDBhKSkgeworICAgICAgICBjaGFyICp0ciA9IEN1cmxfZHluX3B0cigmY29ubi0+dHJhaWxlcik7CiAgICAgICAgIC8qIHRoaXMgaXMgdGhlIGVuZCBvZiBhIHRyYWlsZXIsIGJ1dCBpZiB0aGUgdHJhaWxlciB3YXMgemVybyBieXRlcwogICAgICAgICAgICB0aGVyZSB3YXMgbm8gdHJhaWxlciBhbmQgd2UgbW92ZSBvbiAqLwogCi0gICAgICAgIGlmKGNvbm4tPnRybFBvcykgewotICAgICAgICAgIC8qIHdlIGFsbG9jYXRlIHRyYWlsZXIgd2l0aCAzIGJ5dGVzIGV4dHJhIHJvb20gdG8gZml0IHRoaXMgKi8KLSAgICAgICAgICBjb25uLT50cmFpbGVyW2Nvbm4tPnRybFBvcysrXSA9IDB4MGQ7Ci0gICAgICAgICAgY29ubi0+dHJhaWxlcltjb25uLT50cmxQb3MrK10gPSAweDBhOwotICAgICAgICAgIGNvbm4tPnRyYWlsZXJbY29ubi0+dHJsUG9zXSA9IDA7CisgICAgICAgIGlmKHRyKSB7CisgICAgICAgICAgc2l6ZV90IHRybGVuOworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmY29ubi0+dHJhaWxlciwgKGNoYXIgKikiXHgwZFx4MGEiKTsKKyAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gQ0hVTktFX09VVF9PRl9NRU1PUlk7CiAKKyAgICAgICAgICB0ciA9IEN1cmxfZHluX3B0cigmY29ubi0+dHJhaWxlcik7CisgICAgICAgICAgdHJsZW4gPSBDdXJsX2R5bl9sZW4oJmNvbm4tPnRyYWlsZXIpOwogICAgICAgICAgIC8qIENvbnZlcnQgdG8gaG9zdCBlbmNvZGluZyBiZWZvcmUgY2FsbGluZyBDdXJsX2NsaWVudF93cml0ZSAqLwotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoY29ubi0+ZGF0YSwgY29ubi0+dHJhaWxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnRybFBvcyk7CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhjb25uLT5kYXRhLCB0ciwgdHJsZW4pOwogICAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAgIC8qIEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCiAgICAgICAgICAgICAvKiBUcmVhdCBpdCBhcyBhIGJhZCBjaHVuayAqLwogICAgICAgICAgICAgcmV0dXJuIENIVU5LRV9CQURfQ0hVTks7CiAKICAgICAgICAgICBpZighZGF0YS0+c2V0Lmh0dHBfdGVfc2tpcCkgewotICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dHJhaWxlciwgY29ubi0+dHJsUG9zKTsKLSAgICAgICAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgICAgICAgcmV0dXJuIENIVU5LRV9XUklURV9FUlJPUjsKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdHIsIHRybGVuKTsKKyAgICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgICAqZXh0cmFwID0gcmVzdWx0OworICAgICAgICAgICAgICByZXR1cm4gQ0hVTktFX1BBU1NUSFJVX0VSUk9SOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgICBjb25uLT50cmxQb3MgPSAwOworICAgICAgICAgIEN1cmxfZHluX3Jlc2V0KCZjb25uLT50cmFpbGVyKTsKICAgICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19UUkFJTEVSX0NSOwogICAgICAgICAgIGlmKCpkYXRhcCA9PSAweDBhKQogICAgICAgICAgICAgLyogYWxyZWFkeSBvbiB0aGUgTEYgKi8KQEAgLTI2MCwyNSArMjY4LDkgQEAKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIGNvbm4tPnRyYWlsZXIgaXMgYXNzdW1lZCB0byBiZSBmcmVlZCBpbiB1cmwuYyBvbiBhCi0gICAgICAgICAgIGNvbm5lY3Rpb24gYmFzaXMgKi8KLSAgICAgICAgaWYoY29ubi0+dHJsUG9zID49IGNvbm4tPnRybE1heCkgewotICAgICAgICAgIC8qIHdlIGFsd2F5cyBhbGxvY2F0ZSB0aHJlZSBleHRyYSBieXRlcywganVzdCBiZWNhdXNlIHdoZW4gdGhlIGZ1bGwKLSAgICAgICAgICAgICBoZWFkZXIgaGFzIGJlZW4gcmVjZWl2ZWQgd2UgYXBwZW5kIENSTEZcMCAqLwotICAgICAgICAgIGNoYXIgKnB0cjsKLSAgICAgICAgICBpZihjb25uLT50cmxNYXgpIHsKLSAgICAgICAgICAgIGNvbm4tPnRybE1heCAqPSAyOwotICAgICAgICAgICAgcHRyID0gcmVhbGxvYyhjb25uLT50cmFpbGVyLCBjb25uLT50cmxNYXggKyAzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb25uLT50cmxNYXggPSAxMjg7Ci0gICAgICAgICAgICBwdHIgPSBtYWxsb2MoY29ubi0+dHJsTWF4ICsgMyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmKCFwdHIpCi0gICAgICAgICAgICByZXR1cm4gQ0hVTktFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgY29ubi0+dHJhaWxlciA9IHB0cjsKLSAgICAgICAgfQotICAgICAgICBjb25uLT50cmFpbGVyW2Nvbm4tPnRybFBvcysrXT0qZGF0YXA7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZG4oJmNvbm4tPnRyYWlsZXIsIGRhdGFwLCAxKTsKKyAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgIHJldHVybiBDSFVOS0VfT1VUX09GX01FTU9SWTsKICAgICAgIH0KICAgICAgIGRhdGFwKys7CiAgICAgICBsZW5ndGgtLTsKQEAgLTMzOSw4ICszMzEsOSBAQAogICAgIHJldHVybiAiSWxsZWdhbCBvciBtaXNzaW5nIGhleGFkZWNpbWFsIHNlcXVlbmNlIjsKICAgY2FzZSBDSFVOS0VfQkFEX0NIVU5LOgogICAgIHJldHVybiAiTWFsZm9ybWVkIGVuY29kaW5nIGZvdW5kIjsKLSAgY2FzZSBDSFVOS0VfV1JJVEVfRVJST1I6Ci0gICAgcmV0dXJuICJXcml0ZSBlcnJvciI7CisgIGNhc2UgQ0hVTktFX1BBU1NUSFJVX0VSUk9SOgorICAgIERFQlVHQVNTRVJUKDApOyAvKiBuZXZlciB1c2VkICovCisgICAgcmV0dXJuICIiOwogICBjYXNlIENIVU5LRV9CQURfRU5DT0RJTkc6CiAgICAgcmV0dXJuICJCYWQgY29udGVudC1lbmNvZGluZyBmb3VuZCI7CiAgIGNhc2UgQ0hVTktFX09VVF9PRl9NRU1PUlk6CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9jaHVua3MuaAppbmRleCBiOTY5YzU1Li44ZjRhMzNjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2NodW5rcy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfY2h1bmtzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIxLDYgKzIxLDkgQEAKICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGNvbm5lY3RkYXRhOworCiAvKgogICogVGhlIGxvbmdlc3QgcG9zc2libGUgaGV4YWRlY2ltYWwgbnVtYmVyIHdlIHN1cHBvcnQgaW4gYSBjaHVua2VkIHRyYW5zZmVyLgogICogV2VpcmQgZW5vdWdoLCBSRkMyNjE2IGRvZXNuJ3Qgc2V0IGEgbWF4aW11bSBzaXplISBTaW5jZSB3ZSB1c2Ugc3RydG91bCgpCkBAIC03MSw5ICs3NCw5IEBACiAgIENIVU5LRV9UT09fTE9OR19IRVggPSAxLAogICBDSFVOS0VfSUxMRUdBTF9IRVgsCiAgIENIVU5LRV9CQURfQ0hVTkssCi0gIENIVU5LRV9XUklURV9FUlJPUiwKICAgQ0hVTktFX0JBRF9FTkNPRElORywKICAgQ0hVTktFX09VVF9PRl9NRU1PUlksCisgIENIVU5LRV9QQVNTVEhSVV9FUlJPUiwgLyogQ3VybF9odHRwY2h1bmtfcmVhZCgpIHJldHVybnMgYSBDVVJMY29kZSB0byB1c2UgKi8KICAgQ0hVTktFX0xBU1QKIH0gQ0hVTktjb2RlOwogCkBAIC04Nyw0ICs5MCwxMCBAQAogICBzaXplX3QgZGF0YWxlZnQ7IC8qIHVudG91Y2hlZCBkYXRhIGFtb3VudCBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGJ1ZmZlciAqLwogfTsKIAorLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gaHR0cF9jaHVua3MuYyAqLwordm9pZCBDdXJsX2h0dHBjaHVua19pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitDSFVOS2NvZGUgQ3VybF9odHRwY2h1bmtfcmVhZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKmRhdGFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBsZW5ndGgsIHNzaXplX3QgKndyb3RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKnBhc3N0aHJ1KTsKKwogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hUVFBfQ0hVTktTX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfZGlnZXN0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2RpZ2VzdC5jCmluZGV4IDk2MTZjMzAuLmIwNmRjMGQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfZGlnZXN0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9kaWdlc3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtOTQsMTUgKzk0LDE5IEBACiAgIHN0cnVjdCBhdXRoICphdXRocDsKIAogICBpZihwcm94eSkgeworI2lmZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisjZWxzZQogICAgIGRpZ2VzdCA9ICZkYXRhLT5zdGF0ZS5wcm94eWRpZ2VzdDsKLSAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOworICAgIGFsbG9jdXNlcnB3ZCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZDsKICAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKICAgICBwYXNzd2RwID0gY29ubi0+aHR0cF9wcm94eS5wYXNzd2Q7CiAgICAgYXV0aHAgPSAmZGF0YS0+c3RhdGUuYXV0aHByb3h5OworI2VuZGlmCiAgIH0KICAgZWxzZSB7CiAgICAgZGlnZXN0ID0gJmRhdGEtPnN0YXRlLmRpZ2VzdDsKLSAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgICBhbGxvY3VzZXJwd2QgPSAmZGF0YS0+c3RhdGUuYXB0ci51c2VycHdkOwogICAgIHVzZXJwID0gY29ubi0+dXNlcjsKICAgICBwYXNzd2RwID0gY29ubi0+cGFzc3dkOwogICAgIGF1dGhwID0gJmRhdGEtPnN0YXRlLmF1dGhob3N0OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9kaWdlc3QuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfZGlnZXN0LmgKaW5kZXggNzM0MTBhZS4uOTZlMzlhNyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9kaWdlc3QuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX2RpZ2VzdC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX25lZ290aWF0ZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9uZWdvdGlhdGUuYwppbmRleCBjOGY0MDY0Li4wYTE5ZWMyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX25lZ290aWF0ZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfbmVnb3RpYXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTUyLDYgKzUyLDcgQEAKICAgY3VybG5lZ290aWF0ZSBzdGF0ZTsKIAogICBpZihwcm94eSkgeworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKICAgICBwYXNzd2RwID0gY29ubi0+aHR0cF9wcm94eS5wYXNzd2Q7CiAgICAgc2VydmljZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZX1NFUlZJQ0VfTkFNRV0gPwpAQCAtNTksNiArNjAsOSBAQAogICAgIGhvc3QgPSBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZTsKICAgICBuZWdfY3R4ID0gJmNvbm4tPnByb3h5bmVnOwogICAgIHN0YXRlID0gY29ubi0+cHJveHlfbmVnb3RpYXRlX3N0YXRlOworI2Vsc2UKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworI2VuZGlmCiAgIH0KICAgZWxzZSB7CiAgICAgdXNlcnAgPSBjb25uLT51c2VyOwpAQCAtMTE5LDcgKzEyMyw4IEBACiAgIHN0cnVjdCBhdXRoICphdXRocCA9IHByb3h5ID8gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm94eSA6CiAgICAgJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhob3N0OwogICBjdXJsbmVnb3RpYXRlICpzdGF0ZSA9IHByb3h5ID8gJmNvbm4tPnByb3h5X25lZ290aWF0ZV9zdGF0ZSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+aHR0cF9uZWdvdGlhdGVfc3RhdGU7CisgICAgJmNvbm4tPmh0dHBfbmVnb3RpYXRlX3N0YXRlOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgY2hhciAqYmFzZTY0ID0gTlVMTDsKICAgc2l6ZV90IGxlbiA9IDA7CiAgIGNoYXIgKnVzZXJwOwpAQCAtMTQ4LDEwICsxNTMsMTAgQEAKICAgICB9CiAgICAgaWYoIW5lZ19jdHgtPmNvbnRleHQpIHsKICAgICAgIHJlc3VsdCA9IEN1cmxfaW5wdXRfbmVnb3RpYXRlKGNvbm4sIHByb3h5LCAiTmVnb3RpYXRlIik7Ci0gICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfTE9HSU5fREVOSUVEKSB7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfQVVUSF9FUlJPUikgewogICAgICAgICAvKiBuZWdvdGlhdGUgYXV0aCBmYWlsZWQsIGxldCdzIGNvbnRpbnVlIHVuYXV0aGVudGljYXRlZCB0byBzdGF5CiAgICAgICAgICAqIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3IgYmVmb3JlIGN1cmwtN182NF8wLTE1OC1nNmM2MDM1NTMyICovCi0gICAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtID0gVFJVRTsKKyAgICAgICAgYXV0aHAtPmRvbmUgPSBUUlVFOwogICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgICB9CiAgICAgICBlbHNlIGlmKHJlc3VsdCkKQEAgLTE2NCwxNSArMTY5LDE1IEBACiAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgdXNlcnAgPSBhcHJpbnRmKCIlc0F1dGhvcml6YXRpb246IE5lZ290aWF0ZSAlc1xyXG4iLCBwcm94eSA/ICJQcm94eS0iIDogIiIsCi0gICAgICBiYXNlNjQpOworICAgICAgICAgICAgICAgICAgICBiYXNlNjQpOwogCiAgICAgaWYocHJveHkpIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkKTsKLSAgICAgIGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZCA9IHVzZXJwOworICAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZCk7CisgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZCA9IHVzZXJwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudXNlcnB3ZCk7Ci0gICAgICBjb25uLT5hbGxvY3B0ci51c2VycHdkID0gdXNlcnA7CisgICAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCk7CisgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2QgPSB1c2VycDsKICAgICB9CiAKICAgICBmcmVlKGJhc2U2NCk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX25lZ290aWF0ZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9uZWdvdGlhdGUuaAppbmRleCA0ZjBhYzE2Li5hNzM3ZjZmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX25lZ290aWF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfbmVnb3RpYXRlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMzLDYgKzMzLDggQEAKIAogdm9pZCBDdXJsX2h0dHBfYXV0aF9jbGVhbnVwX25lZ290aWF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCi0jZW5kaWYgLyogIUNVUkxfRElTQUJMRV9IVFRQICYmIFVTRV9TUE5FR08gKi8KKyNlbHNlIC8qICFDVVJMX0RJU0FCTEVfSFRUUCAmJiBVU0VfU1BORUdPICovCisjZGVmaW5lIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbmVnb3RpYXRlKHgpCisjZW5kaWYKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hUVFBfTkVHT1RJQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfbnRsbS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9udGxtLmMKaW5kZXggZTRhNGZlMC4uY2FiNTQzYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9udGxtLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9udGxtLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ0LDkgKzQ0LDcgQEAKIAogLyogU1NMIGJhY2tlbmQtc3BlY2lmaWMgI2lmIGJyYW5jaGVzIGluIHRoaXMgZmlsZSBtdXN0IGJlIGtlcHQgaW4gdGhlIG9yZGVyCiAgICBkb2N1bWVudGVkIGluIGN1cmxfbnRsbV9jb3JlLiAqLwotI2lmIGRlZmluZWQoTlRMTV9ORUVEU19OU1NfSU5JVCkKLSNpbmNsdWRlICJ2dGxzL25zc2cuaCIKLSNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyNpZiBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCiAjaW5jbHVkZSAiY3VybF9zc3BpLmgiCiAjZW5kaWYKIApAQCAtMTMzLDE3ICsxMzEsMTUgQEAKICAgc3RydWN0IG50bG1kYXRhICpudGxtOwogICBjdXJsbnRsbSAqc3RhdGU7CiAgIHN0cnVjdCBhdXRoICphdXRocDsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKIAogICBERUJVR0FTU0VSVChjb25uKTsKLSAgREVCVUdBU1NFUlQoY29ubi0+ZGF0YSk7Ci0KLSNpZiBkZWZpbmVkKE5UTE1fTkVFRFNfTlNTX0lOSVQpCi0gIGlmKENVUkxFX09LICE9IEN1cmxfbnNzX2ZvcmNlX2luaXQoY29ubi0+ZGF0YSkpCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0jZW5kaWYKKyAgREVCVUdBU1NFUlQoZGF0YSk7CiAKICAgaWYocHJveHkpIHsKLSAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICBhbGxvY3VzZXJwd2QgPSAmZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2Q7CiAgICAgdXNlcnAgPSBjb25uLT5odHRwX3Byb3h5LnVzZXI7CiAgICAgcGFzc3dkcCA9IGNvbm4tPmh0dHBfcHJveHkucGFzc3dkOwogICAgIHNlcnZpY2UgPSBjb25uLT5kYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV9TRVJWSUNFX05BTUVdID8KQEAgLTE1Miw5ICsxNDgsMTIgQEAKICAgICBudGxtID0gJmNvbm4tPnByb3h5bnRsbTsKICAgICBzdGF0ZSA9ICZjb25uLT5wcm94eV9udGxtX3N0YXRlOwogICAgIGF1dGhwID0gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKKyNlbHNlCisgICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKyNlbmRpZgogICB9CiAgIGVsc2UgewotICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci51c2VycHdkOworICAgIGFsbG9jdXNlcnB3ZCA9ICZkYXRhLT5zdGF0ZS5hcHRyLnVzZXJwd2Q7CiAgICAgdXNlcnAgPSBjb25uLT51c2VyOwogICAgIHBhc3N3ZHAgPSBjb25uLT5wYXNzd2Q7CiAgICAgc2VydmljZSA9IGNvbm4tPmRhdGEtPnNldC5zdHJbU1RSSU5HX1NFUlZJQ0VfTkFNRV0gPwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9udGxtLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX250bG0uaAppbmRleCAwMDM3MTRkLi4zZWJkZjk3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX250bG0uaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX250bG0uaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzUsNiArMzUsOCBAQAogCiB2b2lkIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbnRsbShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCi0jZW5kaWYgLyogIUNVUkxfRElTQUJMRV9IVFRQICYmIFVTRV9OVExNICovCisjZWxzZSAvKiAhQ1VSTF9ESVNBQkxFX0hUVFAgJiYgVVNFX05UTE0gKi8KKyNkZWZpbmUgQ3VybF9odHRwX2F1dGhfY2xlYW51cF9udGxtKHgpCisjZW5kaWYKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hUVFBfTlRMTV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX3Byb3h5LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX3Byb3h5LmMKaW5kZXggZDdlZDExNy4uZjE4OGNiZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9wcm94eS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfcHJveHkuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTgsOCArNTgsOSBAQAogICAgICAgQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBzb2NraW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbc29ja2luZGV4XSk7CiAgICAgaWYocmVzdWx0KQotICAgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIGEgZmFpbGVkIGNvbm5lY3Rpb24gaXMgbWFya2VkIGZvciBjbG9zdXJlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudCAoYmFkKSByZS11c2Ugb3Igc2ltaWxhciAqLworICAgICAgLyogYSBmYWlsZWQgY29ubmVjdGlvbiBpcyBtYXJrZWQgZm9yIGNsb3N1cmUgdG8gcHJldmVudCAoYmFkKSByZS11c2Ugb3IKKyAgICAgICAgIHNpbWlsYXIgKi8KKyAgICAgIGNvbm5jbG9zZShjb25uLCAiVExTIGhhbmRzaGFrZSBmYWlsZWQiKTsKICAgfQogICByZXR1cm4gcmVzdWx0OwogI2Vsc2UKQEAgLTcxLDYgKzcyLDcgQEAKIAogQ1VSTGNvZGUgQ3VybF9wcm94eV9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGlmKGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQUykgewogICAgIGNvbnN0IENVUkxjb2RlIHJlc3VsdCA9IGh0dHBzX3Byb3h5X2Nvbm5lY3QoY29ubiwgc29ja2luZGV4KTsKICAgICBpZihyZXN1bHQpCkBAIC0xMjYsNyArMTI4LDcgQEAKICAgICBjb25uLT5kYXRhLT5yZXEucHJvdG9wID0gcHJvdF9zYXZlOwogICAgIGlmKENVUkxFX09LICE9IHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2QpOworICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2QpOwogI2Vsc2UKICAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOwogI2VuZGlmCkBAIC0xNTcsMTUgKzE1OSwxNSBAQAogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgaW5mb2YoY29ubi0+ZGF0YSwgImFsbG9jYXRlIGNvbm5lY3QgYnVmZmVyIVxuIik7CiAgICAgY29ubi0+Y29ubmVjdF9zdGF0ZSA9IHM7CisgICAgQ3VybF9keW5faW5pdCgmcy0+cmN2YnVmLCBEWU5fUFJPWFlfQ09OTkVDVF9IRUFERVJTKTsKICAgfQogICBlbHNlIHsKICAgICBERUJVR0FTU0VSVChjb25uLT5jb25uZWN0X3N0YXRlKTsKICAgICBzID0gY29ubi0+Y29ubmVjdF9zdGF0ZTsKKyAgICBDdXJsX2R5bl9yZXNldCgmcy0+cmN2YnVmKTsKICAgfQogICBzLT50dW5uZWxfc3RhdGUgPSBUVU5ORUxfSU5JVDsKICAgcy0+a2VlcG9uID0gVFJVRTsKLSAgcy0+bGluZV9zdGFydCA9IHMtPmNvbm5lY3RfYnVmZmVyOwotICBzLT5wdHIgPSBzLT5saW5lX3N0YXJ0OwogICBzLT5jbCA9IDA7CiAgIHMtPmNsb3NlX2Nvbm5lY3Rpb24gPSBGQUxTRTsKICAgcmV0dXJuIENVUkxFX09LOwpAQCAtMTc1LDYgKzE3Nyw3IEBACiB7CiAgIHN0cnVjdCBodHRwX2Nvbm5lY3Rfc3RhdGUgKnMgPSBjb25uLT5jb25uZWN0X3N0YXRlOwogICBzLT50dW5uZWxfc3RhdGUgPSBUVU5ORUxfQ09NUExFVEU7CisgIEN1cmxfZHluX2ZyZWUoJnMtPnJjdmJ1Zik7CiAgIGluZm9mKGNvbm4tPmRhdGEsICJDT05ORUNUIHBoYXNlIGNvbXBsZXRlZCFcbiIpOwogfQogCkBAIC0xODksNiArMTkyLDggQEAKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBjdXJsX3NvY2tldF90IHR1bm5lbHNvY2tldCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKICAgc3RydWN0IGh0dHBfY29ubmVjdF9zdGF0ZSAqcyA9IGNvbm4tPmNvbm5lY3Rfc3RhdGU7CisgIGNoYXIgKmxpbmVwOworICBzaXplX3QgcGVybGluZTsKIAogI2RlZmluZSBTRUxFQ1RfT0sgICAgICAwCiAjZGVmaW5lIFNFTEVDVF9FUlJPUiAgIDEKQEAgLTIwMyw3ICsyMDgsNyBAQAogICAgIGlmKFRVTk5FTF9JTklUID09IHMtPnR1bm5lbF9zdGF0ZSkgewogICAgICAgLyogQkVHSU4gQ09OTkVDVCBQSEFTRSAqLwogICAgICAgY2hhciAqaG9zdF9wb3J0OwotICAgICAgQ3VybF9zZW5kX2J1ZmZlciAqcmVxX2J1ZmZlcjsKKyAgICAgIHN0cnVjdCBkeW5idWYgcmVxOwogCiAgICAgICBpbmZvZihkYXRhLCAiRXN0YWJsaXNoIEhUVFAgcHJveHkgdHVubmVsIHRvICVzOiVkXG4iLAogICAgICAgICAgICAgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKQEAgLTIxNCwxNyArMjE5LDEyIEBACiAgICAgICBmcmVlKGRhdGEtPnJlcS5uZXd1cmwpOwogICAgICAgZGF0YS0+cmVxLm5ld3VybCA9IE5VTEw7CiAKLSAgICAgIC8qIGluaXRpYWxpemUgYSBkeW5hbWljIHNlbmQtYnVmZmVyICovCi0gICAgICByZXFfYnVmZmVyID0gQ3VybF9hZGRfYnVmZmVyX2luaXQoKTsKLQotICAgICAgaWYoIXJlcV9idWZmZXIpCi0gICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotCiAgICAgICBob3N0X3BvcnQgPSBhcHJpbnRmKCIlczolZCIsIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7Ci0gICAgICBpZighaG9zdF9wb3J0KSB7Ci0gICAgICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZyZXFfYnVmZmVyKTsKKyAgICAgIGlmKCFob3N0X3BvcnQpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgfQorCisgICAgICAvKiBpbml0aWFsaXplIGEgZHluYW1pYyBzZW5kLWJ1ZmZlciAqLworICAgICAgQ3VybF9keW5faW5pdCgmcmVxLCBEWU5fSFRUUF9SRVFVRVNUKTsKIAogICAgICAgLyogU2V0dXAgdGhlIHByb3h5LWF1dGhvcml6YXRpb24gaGVhZGVyLCBpZiBhbnkgKi8KICAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cF9vdXRwdXRfYXV0aChjb25uLCAiQ09OTkVDVCIsIGhvc3RfcG9ydCwgVFJVRSk7CkBAIC0yMzUsOCArMjM1LDggQEAKICAgICAgICAgY2hhciAqaG9zdCA9IE5VTEw7CiAgICAgICAgIGNvbnN0IGNoYXIgKnByb3h5Y29ubiA9ICIiOwogICAgICAgICBjb25zdCBjaGFyICp1c2VyYWdlbnQgPSAiIjsKLSAgICAgICAgY29uc3QgY2hhciAqaHR0cCA9IChjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUF8xXzApID8KLSAgICAgICAgICAiMS4wIiA6ICIxLjEiOworICAgICAgICBjb25zdCBjaGFyICpodHRwdiA9CisgICAgICAgICAgKGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQXzFfMCkgPyAiMS4wIiA6ICIxLjEiOwogICAgICAgICBib29sIGlwdjZfaXAgPSBjb25uLT5iaXRzLmlwdjZfaXA7CiAgICAgICAgIGNoYXIgKmhvc3RoZWFkZXI7CiAKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgICAgICAgIGFwcmludGYoIiVzJXMlczolZCIsIGlwdjZfaXA/IlsiOiIiLCBob3N0bmFtZSwgaXB2Nl9pcD8iXSI6IiIsCiAgICAgICAgICAgICAgICAgICByZW1vdGVfcG9ydCk7CiAgICAgICAgIGlmKCFob3N0aGVhZGVyKSB7Ci0gICAgICAgICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJnJlcV9idWZmZXIpOworICAgICAgICAgIEN1cmxfZHluX2ZyZWUoJnJlcSk7CiAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICAgIH0KIApAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICAgICAgaG9zdCA9IGFwcmludGYoIkhvc3Q6ICVzXHJcbiIsIGhvc3RoZWFkZXIpOwogICAgICAgICAgIGlmKCFob3N0KSB7CiAgICAgICAgICAgICBmcmVlKGhvc3RoZWFkZXIpOwotICAgICAgICAgICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoJnJlcV9idWZmZXIpOworICAgICAgICAgICAgQ3VybF9keW5fZnJlZSgmcmVxKTsKICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjY0LDUyICsyNjQsNDkgQEAKIAogICAgICAgICBpZighQ3VybF9jaGVja1Byb3h5aGVhZGVycyhjb25uLCAiVXNlci1BZ2VudCIpICYmCiAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1VTRVJBR0VOVF0pCi0gICAgICAgICAgdXNlcmFnZW50ID0gY29ubi0+YWxsb2NwdHIudWFnZW50OworICAgICAgICAgIHVzZXJhZ2VudCA9IGRhdGEtPnN0YXRlLmFwdHIudWFnZW50OwogCiAgICAgICAgIHJlc3VsdCA9Ci0gICAgICAgICAgQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT05ORUNUICVzIEhUVFAvJXNcclxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAgLyogSG9zdDogKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgIC8qIFByb3h5LUF1dGhvcml6YXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgIC8qIFVzZXItQWdlbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIC8qIFByb3h5LUNvbm5lY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RoZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdD9ob3N0OiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmFnZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHljb25uKTsKKyAgICAgICAgICBDdXJsX2R5bl9hZGRmKCZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ09OTkVDVCAlcyBIVFRQLyVzXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgIC8qIEhvc3Q6ICovCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMiICAvKiBQcm94eS1BdXRob3JpemF0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMiICAvKiBVc2VyLUFnZW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCAvKiBQcm94eS1Db25uZWN0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0aGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHYsCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0P2hvc3Q6IiIsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZD8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmFwdHIucHJveHl1c2VycHdkOiIiLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmFnZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgcHJveHljb25uKTsKIAogICAgICAgICBpZihob3N0KQogICAgICAgICAgIGZyZWUoaG9zdCk7CiAgICAgICAgIGZyZWUoaG9zdGhlYWRlcik7CiAKICAgICAgICAgaWYoIXJlc3VsdCkKLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9jdXN0b21faGVhZGVycyhjb25uLCBUUlVFLCByZXFfYnVmZmVyKTsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9jdXN0b21faGVhZGVycyhjb25uLCBUUlVFLCAmcmVxKTsKIAogICAgICAgICBpZighcmVzdWx0KQogICAgICAgICAgIC8qIENSTEYgdGVybWluYXRlIHRoZSByZXF1ZXN0ICovCi0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwgIlxyXG4iKTsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnJlcSwgIlxyXG4iKTsKIAogICAgICAgICBpZighcmVzdWx0KSB7CiAgICAgICAgICAgLyogU2VuZCB0aGUgY29ubmVjdCByZXF1ZXN0IHRvIHRoZSBwcm94eSAqLwogICAgICAgICAgIC8qIEJMT0NLSU5HICovCi0gICAgICAgICAgcmVzdWx0ID0KLSAgICAgICAgICAgIEN1cmxfYWRkX2J1ZmZlcl9zZW5kKCZyZXFfYnVmZmVyLCBjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLCBzb2NraW5kZXgpOworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYnVmZmVyX3NlbmQoJnJlcSwgY29ubiwgJmRhdGEtPmluZm8ucmVxdWVzdF9zaXplLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4KTsKICAgICAgICAgfQotICAgICAgICByZXFfYnVmZmVyID0gTlVMTDsKICAgICAgICAgaWYocmVzdWx0KQogICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgc2VuZGluZyBDT05ORUNUIHRvIHByb3h5Iik7CiAgICAgICB9CiAKLSAgICAgIEN1cmxfYWRkX2J1ZmZlcl9mcmVlKCZyZXFfYnVmZmVyKTsKKyAgICAgIEN1cmxfZHluX2ZyZWUoJnJlcSk7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAgIHMtPnR1bm5lbF9zdGF0ZSA9IFRVTk5FTF9DT05ORUNUOwotICAgICAgcy0+cGVybGluZSA9IDA7CiAgICAgfSAvKiBFTkQgQ09OTkVDVCBQSEFTRSAqLwogCiAgICAgY2hlY2sgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOwpAQCAtMzI3LDE4ICszMjQsMTMgQEAKICAgICB7IC8qIFJFQURJTkcgUkVTUE9OU0UgUEhBU0UgKi8KICAgICAgIGludCBlcnJvciA9IFNFTEVDVF9PSzsKIAotICAgICAgd2hpbGUocy0+a2VlcG9uICYmICFlcnJvcikgeworICAgICAgd2hpbGUocy0+a2VlcG9uKSB7CiAgICAgICAgIHNzaXplX3QgZ290Ynl0ZXM7Ci0KLSAgICAgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgc3BhY2UgdG8gcmVhZCBtb3JlIGRhdGEgKi8KLSAgICAgICAgaWYocy0+cHRyID49ICZzLT5jb25uZWN0X2J1ZmZlcltDT05ORUNUX0JVRkZFUl9TSVpFXSkgewotICAgICAgICAgIGZhaWxmKGRhdGEsICJDT05ORUNUIHJlc3BvbnNlIHRvbyBsYXJnZSEiKTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKLSAgICAgICAgfQorICAgICAgICBjaGFyIGJ5dGU7CiAKICAgICAgICAgLyogUmVhZCBvbmUgYnl0ZSBhdCBhIHRpbWUgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbi4gV2FpdCBhdCBtb3N0IG9uZQogICAgICAgICAgICBzZWNvbmQgYmVmb3JlIGxvb3BpbmcgdG8gZW5zdXJlIGNvbnRpbnVvdXMgcGdyc1VwZGF0ZXMuICovCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCB0dW5uZWxzb2NrZXQsIHMtPnB0ciwgMSwgJmdvdGJ5dGVzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9yZWFkKGNvbm4sIHR1bm5lbHNvY2tldCwgJmJ5dGUsIDEsICZnb3RieXRlcyk7CiAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9BR0FJTikKICAgICAgICAgICAvKiBzb2NrZXQgYnVmZmVyIGRyYWluZWQsIHJldHVybiAqLwogICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKQEAgLTM2NSwxMSArMzU3LDkgQEAKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0KICAgICAgICAgaWYocy0+a2VlcG9uID4gVFJVRSkgewogICAgICAgICAgIC8qIFRoaXMgbWVhbnMgd2UgYXJlIGN1cnJlbnRseSBpZ25vcmluZyBhIHJlc3BvbnNlLWJvZHkgKi8KIAotICAgICAgICAgIHMtPnB0ciA9IHMtPmNvbm5lY3RfYnVmZmVyOwogICAgICAgICAgIGlmKHMtPmNsKSB7CiAgICAgICAgICAgICAvKiBBIENvbnRlbnQtTGVuZ3RoIGJhc2VkIGJvZHk6IHNpbXBseSBjb3VudCBkb3duIHRoZSBjb3VudGVyCiAgICAgICAgICAgICAgICBhbmQgbWFrZSBzdXJlIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCB3aGVuIHdlJ3JlIGRvbmUhICovCkBAIC0zODQsMTEgKzM3NCwxMiBAQAogICAgICAgICAgICAgLyogY2h1bmtlZC1lbmNvZGVkIGJvZHksIHNvIHdlIG5lZWQgdG8gZG8gdGhlIGNodW5rZWQgZGFuY2UKICAgICAgICAgICAgICAgIHByb3Blcmx5IHRvIGtub3cgd2hlbiB0aGUgZW5kIG9mIHRoZSBib2R5IGlzIHJlYWNoZWQgKi8KICAgICAgICAgICAgIENIVU5LY29kZSByOworICAgICAgICAgICAgQ1VSTGNvZGUgZXh0cmE7CiAgICAgICAgICAgICBzc2l6ZV90IHRvb2tjYXJlb2YgPSAwOwogCiAgICAgICAgICAgICAvKiBub3cgcGFyc2UgdGhlIGNodW5rZWQgcGllY2Ugb2YgZGF0YSBzbyB0aGF0IHdlIGNhbgogICAgICAgICAgICAgICAgcHJvcGVybHkgdGVsbCB3aGVuIHRoZSBzdHJlYW0gZW5kcyAqLwotICAgICAgICAgICAgciA9IEN1cmxfaHR0cGNodW5rX3JlYWQoY29ubiwgcy0+cHRyLCAxLCAmdG9va2NhcmVvZik7CisgICAgICAgICAgICByID0gQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCAmYnl0ZSwgMSwgJnRvb2tjYXJlb2YsICZleHRyYSk7CiAgICAgICAgICAgICBpZihyID09IENIVU5LRV9TVE9QKSB7CiAgICAgICAgICAgICAgIC8qIHdlJ3JlIGRvbmUgcmVhZGluZyBjaHVua3MhICovCiAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJjaHVuayByZWFkaW5nIERPTkVcbiIpOwpAQCAtNDAwLDI1ICszOTEsMjcgQEAKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHMtPnBlcmxpbmUrKzsgLyogYW1vdW50IG9mIGJ5dGVzIGluIHRoaXMgbGluZSBzbyBmYXIgKi8KLQotICAgICAgICAvKiBpZiB0aGlzIGlzIG5vdCB0aGUgZW5kIG9mIGEgaGVhZGVyIGxpbmUgdGhlbiBjb250aW51ZSAqLwotICAgICAgICBpZigqcy0+cHRyICE9IDB4MGEpIHsKLSAgICAgICAgICBzLT5wdHIrKzsKLSAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYoQ3VybF9keW5fYWRkbigmcy0+cmN2YnVmLCAmYnl0ZSwgMSkpIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQ09OTkVDVCByZXNwb25zZSB0b28gbGFyZ2UhIik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CiAgICAgICAgIH0KIAorICAgICAgICAvKiBpZiB0aGlzIGlzIG5vdCB0aGUgZW5kIG9mIGEgaGVhZGVyIGxpbmUgdGhlbiBjb250aW51ZSAqLworICAgICAgICBpZihieXRlICE9IDB4MGEpCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbGluZXAgPSBDdXJsX2R5bl9wdHIoJnMtPnJjdmJ1Zik7CisgICAgICAgIHBlcmxpbmUgPSBDdXJsX2R5bl9sZW4oJnMtPnJjdmJ1Zik7IC8qIGFtb3VudCBvZiBieXRlcyBpbiB0aGlzIGxpbmUgKi8KKwogICAgICAgICAvKiBjb252ZXJ0IGZyb20gdGhlIG5ldHdvcmsgZW5jb2RpbmcgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhkYXRhLCBzLT5saW5lX3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpcy0+cGVybGluZSk7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoZGF0YSwgbGluZXAsIHBlcmxpbmUpOwogICAgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgICAgICAvKiBvdXRwdXQgZGVidWcgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCi0gICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sCi0gICAgICAgICAgICAgICAgICAgICBzLT5saW5lX3N0YXJ0LCAoc2l6ZV90KXMtPnBlcmxpbmUpOworICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLCBsaW5lcCwgcGVybGluZSk7CiAKICAgICAgICAgaWYoIWRhdGEtPnNldC5zdXBwcmVzc19jb25uZWN0X2hlYWRlcnMpIHsKICAgICAgICAgICAvKiBzZW5kIHRoZSBoZWFkZXIgdG8gdGhlIGNhbGxiYWNrICovCkBAIC00MjYsMjMgKzQxOSwyMiBAQAogICAgICAgICAgIGlmKGRhdGEtPnNldC5pbmNsdWRlX2hlYWRlcikKICAgICAgICAgICAgIHdyaXRldHlwZSB8PSBDTElFTlRXUklURV9CT0RZOwogCi0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgd3JpdGV0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmxpbmVfc3RhcnQsIHMtPnBlcmxpbmUpOworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIHdyaXRldHlwZSwgbGluZXAsIHBlcmxpbmUpOwogICAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhLT5pbmZvLmhlYWRlcl9zaXplICs9IChsb25nKXMtPnBlcmxpbmU7Ci0gICAgICAgIGRhdGEtPnJlcS5oZWFkZXJieXRlY291bnQgKz0gKGxvbmcpcy0+cGVybGluZTsKKyAgICAgICAgZGF0YS0+aW5mby5oZWFkZXJfc2l6ZSArPSAobG9uZylwZXJsaW5lOworICAgICAgICBkYXRhLT5yZXEuaGVhZGVyYnl0ZWNvdW50ICs9IChsb25nKXBlcmxpbmU7CiAKICAgICAgICAgLyogTmV3bGluZXMgYXJlIENSTEYsIHNvIHRoZSBDUiBpcyBpZ25vcmVkIGFzIHRoZSBsaW5lIGlzbid0CiAgICAgICAgICAgIHJlYWxseSB0ZXJtaW5hdGVkIHVudGlsIHRoZSBMRiBjb21lcy4gVHJlYXQgYSBmb2xsb3dpbmcgQ1IKICAgICAgICAgICAgYXMgZW5kLW9mLWhlYWRlcnMgYXMgd2VsbC4qLwogCi0gICAgICAgIGlmKCgnXHInID09IHMtPmxpbmVfc3RhcnRbMF0pIHx8Ci0gICAgICAgICAgICgnXG4nID09IHMtPmxpbmVfc3RhcnRbMF0pKSB7CisgICAgICAgIGlmKCgnXHInID09IGxpbmVwWzBdKSB8fAorICAgICAgICAgICAoJ1xuJyA9PSBsaW5lcFswXSkpIHsKICAgICAgICAgICAvKiBlbmQgb2YgcmVzcG9uc2UtaGVhZGVycyBmcm9tIHRoZSBwcm94eSAqLwotICAgICAgICAgIHMtPnB0ciA9IHMtPmNvbm5lY3RfYnVmZmVyOworCiAgICAgICAgICAgaWYoKDQwNyA9PSBrLT5odHRwY29kZSkgJiYgIWRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtKSB7CiAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgYSA0MDcgcmVzcG9uc2UgY29kZSB3aXRoIGNvbnRlbnQgbGVuZ3RoCiAgICAgICAgICAgICAgICB3aGVuIHdlIGhhdmUgbm8gYXV0aCBwcm9ibGVtLCB3ZSBtdXN0IGlnbm9yZSB0aGUKQEAgLTQ1NSwyNCArNDQ3LDIzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmKHMtPmNodW5rZWRfZW5jb2RpbmcpIHsKICAgICAgICAgICAgICAgQ0hVTktjb2RlIHI7CisgICAgICAgICAgICAgIENVUkxjb2RlIGV4dHJhOwogCiAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJJZ25vcmUgY2h1bmtlZCByZXNwb25zZS1ib2R5XG4iKTsKIAotICAgICAgICAgICAgICAvKiBXZSBzZXQgaWdub3JlYm9keSB0cnVlIGhlcmUgc2luY2UgdGhlIGNodW5rZWQKLSAgICAgICAgICAgICAgICAgZGVjb2RlciBmdW5jdGlvbiB3aWxsIGFja25vd2xlZGdlIHRoYXQuIFBheQotICAgICAgICAgICAgICAgICBhdHRlbnRpb24gc28gdGhhdCB0aGlzIGlzIGNsZWFyZWQgYWdhaW4gd2hlbiB0aGlzCi0gICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldHVybnMhICovCisgICAgICAgICAgICAgIC8qIFdlIHNldCBpZ25vcmVib2R5IHRydWUgaGVyZSBzaW5jZSB0aGUgY2h1bmtlZCBkZWNvZGVyCisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpbGwgYWNrbm93bGVkZ2UgdGhhdC4gUGF5IGF0dGVudGlvbiBzbyB0aGF0IHRoaXMgaXMKKyAgICAgICAgICAgICAgICAgY2xlYXJlZCBhZ2FpbiB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyEgKi8KICAgICAgICAgICAgICAgay0+aWdub3JlYm9keSA9IFRSVUU7CiAKLSAgICAgICAgICAgICAgaWYocy0+bGluZV9zdGFydFsxXSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLyogdGhpcyBjYW4gb25seSBiZSBhIExGIGlmIHRoZSBsZXR0ZXIgYXQgaW5kZXggMAotICAgICAgICAgICAgICAgICAgIHdhcyBhIENSICovCi0gICAgICAgICAgICAgICAgcy0+bGluZV9zdGFydCsrOwotICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmKGxpbmVwWzFdID09ICdcbicpCisgICAgICAgICAgICAgICAgLyogdGhpcyBjYW4gb25seSBiZSBhIExGIGlmIHRoZSBsZXR0ZXIgYXQgaW5kZXggMCB3YXMgYSBDUiAqLworICAgICAgICAgICAgICAgIGxpbmVwKys7CiAKLSAgICAgICAgICAgICAgLyogbm93IHBhcnNlIHRoZSBjaHVua2VkIHBpZWNlIG9mIGRhdGEgc28gdGhhdCB3ZSBjYW4KLSAgICAgICAgICAgICAgICAgcHJvcGVybHkgdGVsbCB3aGVuIHRoZSBzdHJlYW0gZW5kcyAqLwotICAgICAgICAgICAgICByID0gQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCBzLT5saW5lX3N0YXJ0ICsgMSwgMSwgJmdvdGJ5dGVzKTsKKyAgICAgICAgICAgICAgLyogbm93IHBhcnNlIHRoZSBjaHVua2VkIHBpZWNlIG9mIGRhdGEgc28gdGhhdCB3ZSBjYW4gcHJvcGVybHkKKyAgICAgICAgICAgICAgICAgdGVsbCB3aGVuIHRoZSBzdHJlYW0gZW5kcyAqLworICAgICAgICAgICAgICByID0gQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCBsaW5lcCArIDEsIDEsICZnb3RieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dHJhKTsKICAgICAgICAgICAgICAgaWYociA9PSBDSFVOS0VfU1RPUCkgewogICAgICAgICAgICAgICAgIC8qIHdlJ3JlIGRvbmUgcmVhZGluZyBjaHVua3MhICovCiAgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgImNodW5rIHJlYWRpbmcgRE9ORVxuIik7CkBAIC00OTYsMTQgKzQ4NywxMyBAQAogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgcy0+bGluZV9zdGFydFtzLT5wZXJsaW5lXSA9IDA7IC8qIHplcm8gdGVybWluYXRlIHRoZSBidWZmZXIgKi8KLSAgICAgICAgaWYoKGNoZWNrcHJlZml4KCJXV1ctQXV0aGVudGljYXRlOiIsIHMtPmxpbmVfc3RhcnQpICYmCisgICAgICAgIGlmKChjaGVja3ByZWZpeCgiV1dXLUF1dGhlbnRpY2F0ZToiLCBsaW5lcCkgJiYKICAgICAgICAgICAgICg0MDEgPT0gay0+aHR0cGNvZGUpKSB8fAotICAgICAgICAgICAoY2hlY2twcmVmaXgoIlByb3h5LWF1dGhlbnRpY2F0ZToiLCBzLT5saW5lX3N0YXJ0KSAmJgorICAgICAgICAgICAoY2hlY2twcmVmaXgoIlByb3h5LWF1dGhlbnRpY2F0ZToiLCBsaW5lcCkgJiYKICAgICAgICAgICAgICg0MDcgPT0gay0+aHR0cGNvZGUpKSkgewogCiAgICAgICAgICAgYm9vbCBwcm94eSA9IChrLT5odHRwY29kZSA9PSA0MDcpID8gVFJVRSA6IEZBTFNFOwotICAgICAgICAgIGNoYXIgKmF1dGggPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKHMtPmxpbmVfc3RhcnQpOworICAgICAgICAgIGNoYXIgKmF1dGggPSBDdXJsX2NvcHlfaGVhZGVyX3ZhbHVlKGxpbmVwKTsKICAgICAgICAgICBpZighYXV0aCkKICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC01MTQsNyArNTA0LDcgQEAKICAgICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIkNvbnRlbnQtTGVuZ3RoOiIsIHMtPmxpbmVfc3RhcnQpKSB7CisgICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIkNvbnRlbnQtTGVuZ3RoOiIsIGxpbmVwKSkgewogICAgICAgICAgIGlmKGstPmh0dHBjb2RlLzEwMCA9PSAyKSB7CiAgICAgICAgICAgICAvKiBBIGNsaWVudCBNVVNUIGlnbm9yZSBhbnkgQ29udGVudC1MZW5ndGggb3IgVHJhbnNmZXItRW5jb2RpbmcKICAgICAgICAgICAgICAgIGhlYWRlciBmaWVsZHMgcmVjZWl2ZWQgaW4gYSBzdWNjZXNzZnVsIHJlc3BvbnNlIHRvIENPTk5FQ1QuCkBAIC01MjMsMTMgKzUxMywxMyBAQAogICAgICAgICAgICAgICAgICAgay0+aHR0cGNvZGUpOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChzLT5saW5lX3N0YXJ0ICsKKyAgICAgICAgICAgICh2b2lkKWN1cmx4X3N0cnRvb2ZmdChsaW5lcCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCJDb250ZW50LUxlbmd0aDoiKSwgTlVMTCwgMTAsICZzLT5jbCk7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoQ3VybF9jb21wYXJlaGVhZGVyKHMtPmxpbmVfc3RhcnQsICJDb25uZWN0aW9uOiIsICJjbG9zZSIpKQorICAgICAgICBlbHNlIGlmKEN1cmxfY29tcGFyZWhlYWRlcihsaW5lcCwgIkNvbm5lY3Rpb246IiwgImNsb3NlIikpCiAgICAgICAgICAgcy0+Y2xvc2VfY29ubmVjdGlvbiA9IFRSVUU7Ci0gICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlRyYW5zZmVyLUVuY29kaW5nOiIsIHMtPmxpbmVfc3RhcnQpKSB7CisgICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlRyYW5zZmVyLUVuY29kaW5nOiIsIGxpbmVwKSkgewogICAgICAgICAgIGlmKGstPmh0dHBjb2RlLzEwMCA9PSAyKSB7CiAgICAgICAgICAgICAvKiBBIGNsaWVudCBNVVNUIGlnbm9yZSBhbnkgQ29udGVudC1MZW5ndGggb3IgVHJhbnNmZXItRW5jb2RpbmcKICAgICAgICAgICAgICAgIGhlYWRlciBmaWVsZHMgcmVjZWl2ZWQgaW4gYSBzdWNjZXNzZnVsIHJlc3BvbnNlIHRvIENPTk5FQ1QuCkBAIC01MzcsNyArNTI3LDcgQEAKICAgICAgICAgICAgIGluZm9mKGRhdGEsICJJZ25vcmluZyBUcmFuc2Zlci1FbmNvZGluZyBpbiAiCiAgICAgICAgICAgICAgICAgICAiQ09OTkVDVCAlMDNkIHJlc3BvbnNlXG4iLCBrLT5odHRwY29kZSk7CiAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYoQ3VybF9jb21wYXJlaGVhZGVyKHMtPmxpbmVfc3RhcnQsCisgICAgICAgICAgZWxzZSBpZihDdXJsX2NvbXBhcmVoZWFkZXIobGluZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zZmVyLUVuY29kaW5nOiIsICJjaHVua2VkIikpIHsKICAgICAgICAgICAgIGluZm9mKGRhdGEsICJDT05ORUNUIHJlc3BvbmRlZCBjaHVua2VkXG4iKTsKICAgICAgICAgICAgIHMtPmNodW5rZWRfZW5jb2RpbmcgPSBUUlVFOwpAQCAtNTQ1LDE5ICs1MzUsMTYgQEAKICAgICAgICAgICAgIEN1cmxfaHR0cGNodW5rX2luaXQoY29ubik7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoQ3VybF9jb21wYXJlaGVhZGVyKHMtPmxpbmVfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm94eS1Db25uZWN0aW9uOiIsICJjbG9zZSIpKQorICAgICAgICBlbHNlIGlmKEN1cmxfY29tcGFyZWhlYWRlcihsaW5lcCwgIlByb3h5LUNvbm5lY3Rpb246IiwgImNsb3NlIikpCiAgICAgICAgICAgcy0+Y2xvc2VfY29ubmVjdGlvbiA9IFRSVUU7Ci0gICAgICAgIGVsc2UgaWYoMiA9PSBzc2NhbmYocy0+bGluZV9zdGFydCwgIkhUVFAvMS4lZCAlZCIsCisgICAgICAgIGVsc2UgaWYoMiA9PSBzc2NhbmYobGluZXAsICJIVFRQLzEuJWQgJWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJ2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrLT5odHRwY29kZSkpIHsKICAgICAgICAgICAvKiBzdG9yZSB0aGUgSFRUUCBjb2RlIGZyb20gdGhlIHByb3h5ICovCiAgICAgICAgICAgZGF0YS0+aW5mby5odHRwcHJveHljb2RlID0gay0+aHR0cGNvZGU7CiAgICAgICAgIH0KIAotICAgICAgICBzLT5wZXJsaW5lID0gMDsgLyogbGluZSBzdGFydHMgb3ZlciBoZXJlICovCi0gICAgICAgIHMtPnB0ciA9IHMtPmNvbm5lY3RfYnVmZmVyOwotICAgICAgICBzLT5saW5lX3N0YXJ0ID0gcy0+cHRyOworICAgICAgICBDdXJsX2R5bl9yZXNldCgmcy0+cmN2YnVmKTsKICAgICAgIH0gLyogd2hpbGUgdGhlcmUncyBidWZmZXIgbGVmdCBhbmQgbG9vcCBpcyByZXF1ZXN0ZWQgKi8KIAogICAgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQpAQCAtNjE4LDYgKzYwNSw3IEBACiAgICAgaWYoY29ubi0+Yml0cy5wcm94eV9jb25uZWN0X2Nsb3NlZCkKICAgICAgIC8qIHRoaXMgaXMgbm90IGFuIGVycm9yLCBqdXN0IHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gbmVnb3RpYXRpb24gKi8KICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBDdXJsX2R5bl9mcmVlKCZzLT5yY3ZidWYpOwogICAgIGZhaWxmKGRhdGEsICJSZWNlaXZlZCBIVFRQIGNvZGUgJWQgZnJvbSBwcm94eSBhZnRlciBDT05ORUNUIiwKICAgICAgICAgICBkYXRhLT5yZXEuaHR0cGNvZGUpOwogICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOwpAQCAtNjI4LDE2ICs2MTYsMTggQEAKICAgLyogSWYgYSBwcm94eS1hdXRob3JpemF0aW9uIGhlYWRlciB3YXMgdXNlZCBmb3IgdGhlIHByb3h5LCB0aGVuIHdlIHNob3VsZAogICAgICBtYWtlIHN1cmUgdGhhdCBpdCBpc24ndCBhY2NpZGVudGFsbHkgdXNlZCBmb3IgdGhlIGRvY3VtZW50IHJlcXVlc3QKICAgICAgYWZ0ZXIgd2UndmUgY29ubmVjdGVkLiBTbyBsZXQncyBmcmVlIGFuZCBjbGVhciBpdCBoZXJlLiAqLwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZCk7Ci0gIGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZCA9IE5VTEw7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5wcm94eXVzZXJwd2QpOworICBkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZCA9IE5VTEw7CiAKICAgZGF0YS0+c3RhdGUuYXV0aHByb3h5LmRvbmUgPSBUUlVFOworICBkYXRhLT5zdGF0ZS5hdXRocHJveHkubXVsdGlwYXNzID0gRkFMU0U7CiAKICAgaW5mb2YoZGF0YSwgIlByb3h5IHJlcGxpZWQgJWQgdG8gQ09OTkVDVCByZXF1ZXN0XG4iLAogICAgICAgICBkYXRhLT5pbmZvLmh0dHBwcm94eWNvZGUpOwogICBkYXRhLT5yZXEuaWdub3JlYm9keSA9IEZBTFNFOyAvKiBwdXQgaXQgKGJhY2spIHRvIG5vbi1pZ25vcmUgc3RhdGUgKi8KICAgY29ubi0+Yml0cy5yZXdpbmRhZnRlcnNlbmQgPSBGQUxTRTsgLyogbWFrZSBzdXJlIHRoaXMgaXNuJ3Qgc2V0IGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgcmVxdWVzdCAgKi8KKyAgQ3VybF9keW5fZnJlZSgmcy0+cmN2YnVmKTsKICAgcmV0dXJuIENVUkxFX09LOwogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX3Byb3h5LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9odHRwX3Byb3h5LmgKaW5kZXggZTE5ZmE4NS4uMjk5ODhhNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaHR0cF9wcm94eS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2h0dHBfcHJveHkuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDcsNSArNDcsNiBAQAogI2VuZGlmCiAKIHZvaWQgQ3VybF9jb25uZWN0X2ZyZWUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7Cit2b2lkIEN1cmxfY29ubmVjdF9kb25lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfSFRUUF9QUk9YWV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pZG5fd2luMzIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2lkbl93aW4zMi5jCmluZGV4IDhkYzMwMGIuLjJmNTg1MGQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2lkbl93aW4zMi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2lkbl93aW4zMi5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03MiwxMyArNzIsMTMgQEAKIHsKICAgYm9vbCBzdWNjZXNzID0gRkFMU0U7CiAKLSAgd2NoYXJfdCAqaW5fdyA9IEN1cmxfY29udmVydF9VVEY4X3RvX3djaGFyKGluKTsKKyAgd2NoYXJfdCAqaW5fdyA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihpbik7CiAgIGlmKGluX3cpIHsKICAgICB3Y2hhcl90IHB1bnljb2RlW0lETl9NQVhfTEVOR1RIXTsKICAgICBpbnQgY2hhcnMgPSBJZG5Ub0FzY2lpKDAsIGluX3csIC0xLCBwdW55Y29kZSwgSUROX01BWF9MRU5HVEgpOwogICAgIGZyZWUoaW5fdyk7CiAgICAgaWYoY2hhcnMpIHsKLSAgICAgICpvdXQgPSBDdXJsX2NvbnZlcnRfd2NoYXJfdG9fVVRGOChwdW55Y29kZSk7CisgICAgICAqb3V0ID0gY3VybHhfY29udmVydF93Y2hhcl90b19VVEY4KHB1bnljb2RlKTsKICAgICAgIGlmKCpvdXQpCiAgICAgICAgIHN1Y2Nlc3MgPSBUUlVFOwogICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAKIHsKICAgYm9vbCBzdWNjZXNzID0gRkFMU0U7CiAKLSAgd2NoYXJfdCAqaW5fdyA9IEN1cmxfY29udmVydF9VVEY4X3RvX3djaGFyKGluKTsKKyAgd2NoYXJfdCAqaW5fdyA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b193Y2hhcihpbik7CiAgIGlmKGluX3cpIHsKICAgICBzaXplX3QgaW5fbGVuID0gd2NzbGVuKGluX3cpICsgMTsKICAgICB3Y2hhcl90IHVuaWNvZGVbSUROX01BWF9MRU5HVEhdOwpAQCAtOTksNyArOTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlLCBJRE5fTUFYX0xFTkdUSCk7CiAgICAgZnJlZShpbl93KTsKICAgICBpZihjaGFycykgewotICAgICAgKm91dCA9IEN1cmxfY29udmVydF93Y2hhcl90b19VVEY4KHVuaWNvZGUpOworICAgICAgKm91dCA9IGN1cmx4X2NvbnZlcnRfd2NoYXJfdG9fVVRGOCh1bmljb2RlKTsKICAgICAgIGlmKCpvdXQpCiAgICAgICAgIHN1Y2Nlc3MgPSBUUlVFOwogICAgIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2lmMmlwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pZjJpcC5jCmluZGV4IGQwMDNkZTYuLjM5Mzg4NjkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2lmMmlwLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaWYyaXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgIGlmKGlmYWNlLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IGFmKSB7CiAgICAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoaWZhY2UtPmlmYV9uYW1lLCBpbnRlcmYpKSB7CiAgICAgICAgICAgICB2b2lkICphZGRyOwotICAgICAgICAgICAgY2hhciAqaXA7CisgICAgICAgICAgICBjb25zdCBjaGFyICppcDsKICAgICAgICAgICAgIGNoYXIgc2NvcGVbMTJdID0gIiI7CiAgICAgICAgICAgICBjaGFyIGlwc3RyWzY0XTsKICNpZmRlZiBFTkFCTEVfSVBWNgpAQCAtMTI5LDExICsxMjksMTEgQEAKICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlmc2NvcGUgPSBDdXJsX2lwdjZfc2NvcGUoaWZhY2UtPmlmYV9hZGRyKTsKIAogICAgICAgICAgICAgICBpZihpZnNjb3BlICE9IHJlbW90ZV9zY29wZSkgewotICAgICAgICAgICAgICAgIC8qIFdlIGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gaW50ZXJmYWNlIGFkZHJlc3NlcyB3aG9zZQotICAgICAgICAgICAgICAgICAgIHNjb3BlIG1hdGNoZXMgdGhlIHJlbW90ZSBhZGRyZXNzIHdlIHdhbnQgdG8KLSAgICAgICAgICAgICAgICAgICBjb25uZWN0IHRvOiBnbG9iYWwgZm9yIGdsb2JhbCwgbGluay1sb2NhbCBmb3IKLSAgICAgICAgICAgICAgICAgICBsaW5rLWxvY2FsLCBldGMuLi4gKi8KLSAgICAgICAgICAgICAgICBpZihyZXMgPT0gSUYySVBfTk9UX0ZPVU5EKSByZXMgPSBJRjJJUF9BRl9OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIC8qIFdlIGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gaW50ZXJmYWNlIGFkZHJlc3NlcyB3aG9zZSBzY29wZQorICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgdGhlIHJlbW90ZSBhZGRyZXNzIHdlIHdhbnQgdG8gY29ubmVjdCB0bzogZ2xvYmFsCisgICAgICAgICAgICAgICAgICAgZm9yIGdsb2JhbCwgbGluay1sb2NhbCBmb3IgbGluay1sb2NhbCwgZXRjLi4uICovCisgICAgICAgICAgICAgICAgaWYocmVzID09IElGMklQX05PVF9GT1VORCkKKyAgICAgICAgICAgICAgICAgIHJlcyA9IElGMklQX0FGX05PVF9TVVBQT1JURUQ7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgIH0KIApAQCAtMTUzLDE1ICsxNTMsMTUgQEAKICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIGlmKHNjb3BlaWQpCi0gICAgICAgICAgICAgICAgICBtc25wcmludGYoc2NvcGUsIHNpemVvZihzY29wZSksICIlJSV1Iiwgc2NvcGVpZCk7CisgICAgICAgICAgICAgICAgbXNucHJpbnRmKHNjb3BlLCBzaXplb2Yoc2NvcGUpLCAiJSUldSIsIHNjb3BlaWQpOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgICAgYWRkciA9Ci0gICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWlmYWNlLT5pZmFfYWRkciktPnNpbl9hZGRyOworICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopaWZhY2UtPmlmYV9hZGRyKS0+c2luX2FkZHI7CiAgICAgICAgICAgICByZXMgPSBJRjJJUF9GT1VORDsKLSAgICAgICAgICAgIGlwID0gKGNoYXIgKikgQ3VybF9pbmV0X250b3AoYWYsIGFkZHIsIGlwc3RyLCBzaXplb2YoaXBzdHIpKTsKKyAgICAgICAgICAgIGlwID0gQ3VybF9pbmV0X250b3AoYWYsIGFkZHIsIGlwc3RyLCBzaXplb2YoaXBzdHIpKTsKICAgICAgICAgICAgIG1zbnByaW50ZihidWYsIGJ1Zl9zaXplLCAiJXMlcyIsIGlwLCBzY29wZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CkBAIC0xOTAsNiArMTkwLDcgQEAKICAgc3RydWN0IHNvY2thZGRyX2luICpzOwogICBjdXJsX3NvY2tldF90IGR1bW15OwogICBzaXplX3QgbGVuOworICBjb25zdCBjaGFyICpyOwogCiAgICh2b2lkKXJlbW90ZV9zY29wZTsKICAgKHZvaWQpbG9jYWxfc2NvcGVfaWQ7CkBAIC0yMTksOSArMjIwLDExIEBACiAKICAgcyA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKSZyZXEuaWZyX2FkZHI7CiAgIG1lbWNweSgmaW4sICZzLT5zaW5fYWRkciwgc2l6ZW9mKGluKSk7Ci0gIEN1cmxfaW5ldF9udG9wKHMtPnNpbl9mYW1pbHksICZpbiwgYnVmLCBidWZfc2l6ZSk7CisgIHIgPSBDdXJsX2luZXRfbnRvcChzLT5zaW5fZmFtaWx5LCAmaW4sIGJ1ZiwgYnVmX3NpemUpOwogCiAgIHNjbG9zZShkdW1teSk7CisgIGlmKCFyKQorICAgIHJldHVybiBJRjJJUF9OT1RfRk9VTkQ7CiAgIHJldHVybiBJRjJJUF9GT1VORDsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5jCmluZGV4IGJkY2M2OWMuLmNhZDBlNTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ltYXAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbWFwLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTk1LDggKzk1LDcgQEAKIHN0YXRpYyBDVVJMY29kZSBpbWFwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKIHN0YXRpYyBDVVJMY29kZSBpbWFwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOwogc3RhdGljIENVUkxjb2RlIGltYXBfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci1zdGF0aWMgaW50IGltYXBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBpbnQgaW1hcF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIENVUkxjb2RlIGltYXBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb3BoYXNlX2RvbmUpOwogc3RhdGljIENVUkxjb2RlIGltYXBfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIGNoYXIgKmltYXBfYXRvbShjb25zdCBjaGFyICpzdHIsIGJvb2wgZXNjYXBlX29ubHkpOwpAQCAtMTg4LDcgKzE4Nyw3IEBACiAgIGNvbm4tPmhhbmRsZXIgPSAmQ3VybF9oYW5kbGVyX2ltYXBzOwogCiAgIC8qIFNldCB0aGUgY29ubmVjdGlvbidzIHVwZ3JhZGVkIHRvIFRMUyBmbGFnICovCi0gIGNvbm4tPnRsc191cGdyYWRlZCA9IFRSVUU7CisgIGNvbm4tPmJpdHMudGxzX3VwZ3JhZGVkID0gVFJVRTsKIH0KICNlbHNlCiAjZGVmaW5lIGltYXBfdG9faW1hcHMoeCkgQ3VybF9ub3Bfc3RtdApAQCAtNDQ0LDEwICs0NDMsOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wZXJmb3JtX3N0YXJ0dGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogU2VuZCB0aGUgU1RBUlRUTFMgY29tbWFuZCAqLwotICByZXN1bHQgPSBpbWFwX3NlbmRmKGNvbm4sICJTVEFSVFRMUyIpOworICBDVVJMY29kZSByZXN1bHQgPSBpbWFwX3NlbmRmKGNvbm4sICJTVEFSVFRMUyIpOwogCiAgIGlmKCFyZXN1bHQpCiAgICAgc3RhdGUoY29ubiwgSU1BUF9TVEFSVFRMUyk7CkBAIC00NjMsMTEgKzQ2MCwxMCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wZXJmb3JtX3VwZ3JhZGVfdGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBpbWFwX2Nvbm4gKmltYXBjID0gJmNvbm4tPnByb3RvLmltYXBjOwotCiAgIC8qIFN0YXJ0IHRoZSBTU0wgY29ubmVjdGlvbiAqLwotICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmaW1hcGMtPnNzbGRvbmUpOworICBzdHJ1Y3QgaW1hcF9jb25uICppbWFwYyA9ICZjb25uLT5wcm90by5pbWFwYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBGSVJTVFNPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hcGMtPnNzbGRvbmUpOwogCiAgIGlmKCFyZXN1bHQpIHsKICAgICBpZihpbWFwYy0+c3RhdGUgIT0gSU1BUF9VUEdSQURFVExTKQpAQCAtODI2LDEwICs4MjIsOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wZXJmb3JtX2xvZ291dChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCiAgIC8qIFNlbmQgdGhlIExPR09VVCBjb21tYW5kICovCi0gIHJlc3VsdCA9IGltYXBfc2VuZGYoY29ubiwgIkxPR09VVCIpOworICBDVVJMY29kZSByZXN1bHQgPSBpbWFwX3NlbmRmKGNvbm4sICJMT0dPVVQiKTsKIAogICBpZighcmVzdWx0KQogICAgIHN0YXRlKGNvbm4sIElNQVBfTE9HT1VUKTsKQEAgLTEzMTIsNiArMTMwNiw3IEBACiAgICAgICBicmVhazsKIAogICAgIGNhc2UgSU1BUF9MSVNUOgorICAgIGNhc2UgSU1BUF9TRUFSQ0g6CiAgICAgICByZXN1bHQgPSBpbWFwX3N0YXRlX2xpc3RzZWFyY2hfcmVzcChjb25uLCBpbWFwY29kZSwgaW1hcGMtPnN0YXRlKTsKICAgICAgIGJyZWFrOwogCkBAIC0xMzM1LDEwICsxMzMwLDYgQEAKICAgICAgIHJlc3VsdCA9IGltYXBfc3RhdGVfYXBwZW5kX2ZpbmFsX3Jlc3AoY29ubiwgaW1hcGNvZGUsIGltYXBjLT5zdGF0ZSk7CiAgICAgICBicmVhazsKIAotICAgIGNhc2UgSU1BUF9TRUFSQ0g6Ci0gICAgICByZXN1bHQgPSBpbWFwX3N0YXRlX2xpc3RzZWFyY2hfcmVzcChjb25uLCBpbWFwY29kZSwgaW1hcGMtPnN0YXRlKTsKLSAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBJTUFQX0xPR09VVDoKICAgICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCiAgICAgZGVmYXVsdDoKQEAgLTEzOTcsMTAgKzEzODgsOSBAQAogfQogCiAvKiBGb3IgdGhlIElNQVAgInByb3RvY29sIGNvbm5lY3QiIGFuZCAiZG9pbmciIHBoYXNlcyBvbmx5ICovCi1zdGF0aWMgaW50IGltYXBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorc3RhdGljIGludCBpbWFwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uaW1hcGMucHAsIHNvY2tzLCBudW1zb2Nrcyk7CisgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLmltYXBjLnBwLCBzb2Nrcyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTcyMCw3ICsxNzEwLDcgQEAKICAgICByZXR1cm4gcmVzdWx0OwogCiAgIC8qIENsZWFyIHRoZSBUTFMgdXBncmFkZWQgZmxhZyAqLwotICBjb25uLT50bHNfdXBncmFkZWQgPSBGQUxTRTsKKyAgY29ubi0+Yml0cy50bHNfdXBncmFkZWQgPSBGQUxTRTsKIAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CkBAIC0xOTY3LDcgKzE5NTcsNyBAQAogICAgICAgZW5kLS07CiAKICAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBiZWdpbiwgZW5kIC0gYmVnaW4sICZpbWFwLT5tYWlsYm94LCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9DVFJMKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogICB9CkBAIC0xOTg5LDcgKzE5NzksOCBAQAogICAgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CiAKICAgICAvKiBEZWNvZGUgdGhlIG5hbWUgcGFyYW1ldGVyICovCi0gICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgYmVnaW4sIHB0ciAtIGJlZ2luLCAmbmFtZSwgTlVMTCwgVFJVRSk7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgYmVnaW4sIHB0ciAtIGJlZ2luLCAmbmFtZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfQ1RSTCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMTk5OSw3ICsxOTkwLDggQEAKICAgICAgIHB0cisrOwogCiAgICAgLyogRGVjb2RlIHRoZSB2YWx1ZSBwYXJhbWV0ZXIgKi8KLSAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBiZWdpbiwgcHRyIC0gYmVnaW4sICZ2YWx1ZSwgJnZhbHVlbGVuLCBUUlVFKTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBiZWdpbiwgcHRyIC0gYmVnaW4sICZ2YWx1ZSwgJnZhbHVlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9DVFJMKTsKICAgICBpZihyZXN1bHQpIHsKICAgICAgIGZyZWUobmFtZSk7CiAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjA4Nyw3ICsyMDc5LDcgQEAKIAogICBpZihjdXN0b20pIHsKICAgICAvKiBVUkwgZGVjb2RlIHRoZSBjdXN0b20gcmVxdWVzdCAqLwotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGN1c3RvbSwgMCwgJmltYXAtPmN1c3RvbSwgTlVMTCwgVFJVRSk7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgY3VzdG9tLCAwLCAmaW1hcC0+Y3VzdG9tLCBOVUxMLCBSRUpFQ1RfQ1RSTCk7CiAKICAgICAvKiBFeHRyYWN0IHRoZSBwYXJhbWV0ZXJzIGlmIHNwZWNpZmllZCAqLwogICAgIGlmKCFyZXN1bHQpIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2ltYXAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2ltYXAuaAppbmRleCAwZWZjZmQyLi40Nzg2ZjU2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbWFwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvaW1hcC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X250b3AuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5jCmluZGV4IDg1NTk4MWMuLjlhNWFmN2YgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxICBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTkgIEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X250b3AuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5oCmluZGV4IGQxNTBiYjYuLjlkM2YyMzcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfbnRvcC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X3B0b24uYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5jCmluZGV4IDBkNjVhZTAuLjljODdhMDUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2luZXRfcHRvbi5jCkBAIC0xLDYgKzEsNiBAQAogLyogVGhpcyBpcyBmcm9tIHRoZSBCSU5EIDQuOS40IHJlbGVhc2UsIG1vZGlmaWVkIHRvIGNvbXBpbGUgYnkgaXRzZWxmICovCiAKLS8qIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorLyogQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAxOSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvaW5ldF9wdG9uLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X3B0b24uaAppbmRleCAwMjA5YjliLi5lNjk1YWY5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X3B0b24uaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9pbmV0X3B0b24uaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIva3JiNS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIva3JiNS5jCmluZGV4IDE0N2FiMDIuLjViZDhlNzEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2tyYjUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9rcmI1LmMKQEAgLTEsOCArMSw4IEBACiAvKiBHU1NBUEkva3JiNSBzdXBwb3J0IGZvciBGVFAgLSBsb29zZWx5IGJhc2VkIG9uIG9sZCBrcmI0LmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSMO2Z3Nrb2xhbgorICogQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5IEt1bmdsaWdhIFRla25pc2thIEjDg8K2Z3Nrb2xhbgogICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDE3IERhbmllbCBTdGVuYmVyZworICogQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAxOSBEYW5pZWwgU3RlbmJlcmcKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMjAsMTAgKzMyMCw4IEBACiAgICAgT01fdWludDMyIG1pbjsKICAgICBnc3NfY3R4X2lkX3QgKmNvbnRleHQgPSBhcHBfZGF0YTsKICAgICBpZigqY29udGV4dCAhPSBHU1NfQ19OT19DT05URVhUKSB7Ci0jaWZkZWYgREVCVUdCVUlMRAotICAgICAgT01fdWludDMyIG1haiA9Ci0jZW5kaWYKLSAgICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJm1pbiwgY29udGV4dCwgR1NTX0NfTk9fQlVGRkVSKTsKKyAgICAgIE9NX3VpbnQzMiBtYWogPSBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZtaW4sIGNvbnRleHQsIEdTU19DX05PX0JVRkZFUik7CisgICAgICAodm9pZCltYWo7CiAgICAgICBERUJVR0FTU0VSVChtYWogPT0gR1NTX1NfQ09NUExFVEUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2xkYXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2xkYXAuYwppbmRleCBmZDMxZmFhLi41MTJkZWY2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9sZGFwLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbGRhcC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03NSw3ICs3NSw3IEBACiAKIC8qIFVzZSBvdXIgb3duIGltcGxlbWVudGF0aW9uLiAqLwogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgbGRhcF91cmxkZXNjIHsKICAgY2hhciAgICpsdWRfaG9zdDsKICAgaW50ICAgICBsdWRfcG9ydDsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQpAQCAtOTUsMTAgKzk1LDEwIEBACiAgIHNpemVfdCAgICBsdWRfYXR0cnNfZHVwczsgLyogaG93IG1hbnkgd2VyZSBkdXAnZWQsIHRoaXMgZmllbGQgaXMgbm90IGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFsIiBzdHJ1Y3Qgc28gY2FuIG9ubHkgYmUgdXNlZCBpbiBjb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBIQVZFX0xEQVBfVVJMX1BBUlNFIGRlZmluZWQgKi8KLX0gQ1VSTF9MREFQVVJMRGVzYzsKK307CiAKICN1bmRlZiBMREFQVVJMRGVzYwotI2RlZmluZSBMREFQVVJMRGVzYyAgICAgICAgICAgICBDVVJMX0xEQVBVUkxEZXNjCisjZGVmaW5lIExEQVBVUkxEZXNjIHN0cnVjdCBsZGFwX3VybGRlc2MKIAogc3RhdGljIGludCAgX2xkYXBfdXJsX3BhcnNlKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQVVJMRGVzYyAqKmx1ZHApOwpAQCAtMTEyLDEzICsxMTIsMTkgQEAKICAgI2RlZmluZSBMREFQX1RSQUNFKHgpICAgZG8geyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xkYXBfdHJhY2UoIiV1OiAiLCBfX0xJTkVfXyk7IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbGRhcF90cmFjZSB4OyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIH0gV0hJTEVfRkFMU0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAgIHN0YXRpYyB2b2lkIF9sZGFwX3RyYWNlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKICNlbHNlCiAgICNkZWZpbmUgTERBUF9UUkFDRSh4KSAgIEN1cmxfbm9wX3N0bXQKICNlbmRpZgogCisjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkgJiYgZGVmaW5lZChsZGFwX2VycjJzdHJpbmcpCisvKiBVc2UgYW5zaSBlcnJvciBzdHJpbmdzIGluIFVOSUNPREUgYnVpbGRzICovCisjdW5kZWYgbGRhcF9lcnIyc3RyaW5nCisjZGVmaW5lIGxkYXBfZXJyMnN0cmluZyBsZGFwX2VycjJzdHJpbmdBCisjZW5kaWYKKwogCiBzdGF0aWMgQ1VSTGNvZGUgQ3VybF9sZGFwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiAKQEAgLTIzMywxMyArMjM5LDEzIEBACiAgIFBUQ0hBUiBpbnBhc3MgPSBOVUxMOwogCiAgIGlmKHVzZXIgJiYgcGFzc3dkICYmIChjb25uLT5kYXRhLT5zZXQuaHR0cGF1dGggJiBDVVJMQVVUSF9CQVNJQykpIHsKLSAgICBpbnVzZXIgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKSB1c2VyKTsKLSAgICBpbnBhc3MgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKSBwYXNzd2QpOworICAgIGludXNlciA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKSB1c2VyKTsKKyAgICBpbnBhc3MgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKikgcGFzc3dkKTsKIAogICAgIHJjID0gbGRhcF9zaW1wbGVfYmluZF9zKHNlcnZlciwgaW51c2VyLCBpbnBhc3MpOwogCi0gICAgQ3VybF91bmljb2RlZnJlZShpbnVzZXIpOwotICAgIEN1cmxfdW5pY29kZWZyZWUoaW5wYXNzKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShpbnVzZXIpOworICAgIGN1cmx4X3VuaWNvZGVmcmVlKGlucGFzcyk7CiAgIH0KICNpZiBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCiAgIGVsc2UgewpAQCAtMzAwLDcgKzMwNiw3IEBACiAgICAgICAgICAgbGRhcF9zc2wgPyAiZW5jcnlwdGVkIiA6ICJjbGVhcnRleHQiKTsKIAogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCi0gIGhvc3QgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcihjb25uLT5ob3N0Lm5hbWUpOworICBob3N0ID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKGNvbm4tPmhvc3QubmFtZSk7CiAgIGlmKCFob3N0KSB7CiAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKIApAQCAtNTExLDcgKzUxNyw3IEBACiAgICAgICBzaXplX3QgbmFtZV9sZW47CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKICAgICAgIFRDSEFSICpkbiA9IGxkYXBfZ2V0X2RuKHNlcnZlciwgZW50cnlJdGVyYXRvcik7Ci0gICAgICBuYW1lID0gQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgoZG4pOworICAgICAgbmFtZSA9IGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOChkbik7CiAgICAgICBpZighbmFtZSkgewogICAgICAgICBsZGFwX21lbWZyZWUoZG4pOwogCkBAIC01MjcsNyArNTMzLDcgQEAKICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIkROOiAiLCA0KTsKICAgICAgIGlmKHJlc3VsdCkgewogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCi0gICAgICAgIEN1cmxfdW5pY29kZWZyZWUobmFtZSk7CisgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKG5hbWUpOwogI2VuZGlmCiAgICAgICAgIGxkYXBfbWVtZnJlZShkbik7CiAKQEAgLTUzOCw3ICs1NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW4pOwogICAgICAgaWYocmVzdWx0KSB7CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgICAgQ3VybF91bmljb2RlZnJlZShuYW1lKTsKKyAgICAgICAgY3VybHhfdW5pY29kZWZyZWUobmFtZSk7CiAjZW5kaWYKICAgICAgICAgbGRhcF9tZW1mcmVlKGRuKTsKIApAQCAtNTQ4LDcgKzU1NCw3IEBACiAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSJcbiIsIDEpOwogICAgICAgaWYocmVzdWx0KSB7CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgICAgQ3VybF91bmljb2RlZnJlZShuYW1lKTsKKyAgICAgICAgY3VybHhfdW5pY29kZWZyZWUobmFtZSk7CiAjZW5kaWYKICAgICAgICAgbGRhcF9tZW1mcmVlKGRuKTsKIApAQCAtNTU4LDcgKzU2NCw3IEBACiAgICAgICBkbHNpemUgKz0gbmFtZV9sZW4gKyA1OwogCiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgIEN1cmxfdW5pY29kZWZyZWUobmFtZSk7CisgICAgICBjdXJseF91bmljb2RlZnJlZShuYW1lKTsKICNlbmRpZgogICAgICAgbGRhcF9tZW1mcmVlKGRuKTsKICAgICB9CkBAIC01NzAsNyArNTc2LDcgQEAKICAgICAgIEJlclZhbHVlICoqdmFsczsKICAgICAgIHNpemVfdCBhdHRyX2xlbjsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgY2hhciAqYXR0ciA9IEN1cmxfY29udmVydF90Y2hhcl90b19VVEY4KGF0dHJpYnV0ZSk7CisgICAgICBjaGFyICphdHRyID0gY3VybHhfY29udmVydF90Y2hhcl90b19VVEY4KGF0dHJpYnV0ZSk7CiAgICAgICBpZighYXR0cikgewogICAgICAgICBpZihiZXIpCiAgICAgICAgICAgYmVyX2ZyZWUoYmVyLCAwKTsKQEAgLTU5MSw3ICs1OTcsNyBAQAogICAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGF0dHIpOwogI2VuZGlmCiAgICAgICAgICAgICBsZGFwX21lbWZyZWUoYXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmKGJlcikKQEAgLTYwNSw3ICs2MTEsNyBAQAogICAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGF0dHIpOwogI2VuZGlmCiAgICAgICAgICAgICBsZGFwX21lbWZyZWUoYXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmKGJlcikKQEAgLTYxOCw3ICs2MjQsNyBAQAogICAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGF0dHIpOwogI2VuZGlmCiAgICAgICAgICAgICBsZGFwX21lbWZyZWUoYXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmKGJlcikKQEAgLTY0MCw3ICs2NDYsNyBAQAogICAgICAgICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgICAgICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4odmFscyk7CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoYXR0cik7CiAjZW5kaWYKICAgICAgICAgICAgICAgbGRhcF9tZW1mcmVlKGF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgIGlmKGJlcikKQEAgLTY1Niw3ICs2NjIsNyBAQAogICAgICAgICAgICAgICBpZihyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBsZGFwX3ZhbHVlX2ZyZWVfbGVuKHZhbHMpOwogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCi0gICAgICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgICAgICBjdXJseF91bmljb2RlZnJlZShhdHRyKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIGxkYXBfbWVtZnJlZShhdHRyaWJ1dGUpOwogICAgICAgICAgICAgICAgIGlmKGJlcikKQEAgLTY3NCw3ICs2ODAsNyBAQAogICAgICAgICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgICAgICAgIGxkYXBfdmFsdWVfZnJlZV9sZW4odmFscyk7CiAjaWYgZGVmaW5lZChVU0VfV0lOMzJfTERBUCkKLSAgICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoYXR0cik7CiAjZW5kaWYKICAgICAgICAgICAgICAgbGRhcF9tZW1mcmVlKGF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgIGlmKGJlcikKQEAgLTY5MCw3ICs2OTYsNyBAQAogICAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShhdHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGF0dHIpOwogI2VuZGlmCiAgICAgICAgICAgICBsZGFwX21lbWZyZWUoYXR0cmlidXRlKTsKICAgICAgICAgICAgIGlmKGJlcikKQEAgLTcwOCw3ICs3MTQsNyBAQAogCiAgICAgICAvKiBGcmVlIHRoZSBhdHRyaWJ1dGUgYXMgd2UgYXJlIGRvbmUgd2l0aCBpdCAqLwogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCi0gICAgICBDdXJsX3VuaWNvZGVmcmVlKGF0dHIpOworICAgICAgY3VybHhfdW5pY29kZWZyZWUoYXR0cik7CiAjZW5kaWYKICAgICAgIGxkYXBfbWVtZnJlZShhdHRyaWJ1dGUpOwogCkBAIC03NDAsNyArNzQ2LDcgQEAKICNlbmRpZiAvKiBIQVZFX0xEQVBfU1NMICYmIENVUkxfSEFTX05PVkVMTF9MREFQU0RLICovCiAKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQotICBDdXJsX3VuaWNvZGVmcmVlKGhvc3QpOworICBjdXJseF91bmljb2RlZnJlZShob3N0KTsKICNlbmRpZgogCiAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KQEAgLTgzOCwxMCArODQ0LDEwIEBACiBzdGF0aWMgaW50IF9sZGFwX3VybF9wYXJzZTIoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBMREFQVVJMRGVzYyAqbHVkcCkKIHsKICAgaW50IHJjID0gTERBUF9TVUNDRVNTOwotICBjaGFyICpwYXRoOwotICBjaGFyICpxdWVyeTsKICAgY2hhciAqcDsKLSAgY2hhciAqcTsKKyAgY2hhciAqcGF0aDsKKyAgY2hhciAqcSA9IE5VTEw7CisgIGNoYXIgKnF1ZXJ5ID0gTlVMTDsKICAgc2l6ZV90IGk7CiAKICAgaWYoIWNvbm4tPmRhdGEgfHwKQEAgLTg1OSwxMSArODY1LDEzIEBACiAgIGlmKCFwYXRoKQogICAgIHJldHVybiBMREFQX05PX01FTU9SWTsKIAotICAvKiBEdXBsaWNhdGUgdGhlIHF1ZXJ5ICovCi0gIHEgPSBxdWVyeSA9IHN0cmR1cChjb25uLT5kYXRhLT5zdGF0ZS51cC5xdWVyeSk7Ci0gIGlmKCFxdWVyeSkgewotICAgIGZyZWUocGF0aCk7Ci0gICAgcmV0dXJuIExEQVBfTk9fTUVNT1JZOworICAvKiBEdXBsaWNhdGUgdGhlIHF1ZXJ5IGlmIHByZXNlbnQgKi8KKyAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXAucXVlcnkpIHsKKyAgICBxID0gcXVlcnkgPSBzdHJkdXAoY29ubi0+ZGF0YS0+c3RhdGUudXAucXVlcnkpOworICAgIGlmKCFxdWVyeSkgeworICAgICAgZnJlZShwYXRoKTsKKyAgICAgIHJldHVybiBMREFQX05PX01FTU9SWTsKKyAgICB9CiAgIH0KIAogICAvKiBQYXJzZSB0aGUgRE4gKERpc3Rpbmd1aXNoZWQgTmFtZSkgKi8KQEAgLTg3NSw3ICs4ODMsNyBAQAogICAgIExEQVBfVFJBQ0UoKCJETiAnJXMnXG4iLCBkbikpOwogCiAgICAgLyogVW5lc2NhcGUgdGhlIEROICovCi0gICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgZG4sIDAsICZ1bmVzY2FwZWQsIE5VTEwsIEZBTFNFKTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBkbiwgMCwgJnVuZXNjYXBlZCwgTlVMTCwgUkVKRUNUX1pFUk8pOwogICAgIGlmKHJlc3VsdCkgewogICAgICAgcmMgPSBMREFQX05PX01FTU9SWTsKIApAQCAtODg0LDEwICs4OTIsMTAgQEAKIAogI2lmIGRlZmluZWQoVVNFX1dJTjMyX0xEQVApCiAgICAgLyogQ29udmVydCB0aGUgdW5lc2NhcGVkIHN0cmluZyB0byBhIHRjaGFyICovCi0gICAgbHVkcC0+bHVkX2RuID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIodW5lc2NhcGVkKTsKKyAgICBsdWRwLT5sdWRfZG4gPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIodW5lc2NhcGVkKTsKIAogICAgIC8qIEZyZWUgdGhlIHVuZXNjYXBlZCBzdHJpbmcgYXMgd2UgYXJlIGRvbmUgd2l0aCBpdCAqLwotICAgIEN1cmxfdW5pY29kZWZyZWUodW5lc2NhcGVkKTsKKyAgICBjdXJseF91bmljb2RlZnJlZSh1bmVzY2FwZWQpOwogCiAgICAgaWYoIWx1ZHAtPmx1ZF9kbikgewogICAgICAgcmMgPSBMREFQX05PX01FTU9SWTsKQEAgLTk0MSw3ICs5NDksNyBAQAogCiAgICAgICAvKiBVbmVzY2FwZSB0aGUgYXR0cmlidXRlICovCiAgICAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBhdHRyaWJ1dGVzW2ldLCAwLCAmdW5lc2NhcGVkLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVKRUNUX1pFUk8pOwogICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgIGZyZWUoYXR0cmlidXRlcyk7CiAKQEAgLTk1MiwxMCArOTYwLDEwIEBACiAKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQogICAgICAgLyogQ29udmVydCB0aGUgdW5lc2NhcGVkIHN0cmluZyB0byBhIHRjaGFyICovCi0gICAgICBsdWRwLT5sdWRfYXR0cnNbaV0gPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcih1bmVzY2FwZWQpOworICAgICAgbHVkcC0+bHVkX2F0dHJzW2ldID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKHVuZXNjYXBlZCk7CiAKICAgICAgIC8qIEZyZWUgdGhlIHVuZXNjYXBlZCBzdHJpbmcgYXMgd2UgYXJlIGRvbmUgd2l0aCBpdCAqLwotICAgICAgQ3VybF91bmljb2RlZnJlZSh1bmVzY2FwZWQpOworICAgICAgY3VybHhfdW5pY29kZWZyZWUodW5lc2NhcGVkKTsKIAogICAgICAgaWYoIWx1ZHAtPmx1ZF9hdHRyc1tpXSkgewogICAgICAgICBmcmVlKGF0dHJpYnV0ZXMpOwpAQCAtMTAxMCw3ICsxMDE4LDggQEAKICAgICBMREFQX1RSQUNFKCgiZmlsdGVyICclcydcbiIsIGZpbHRlcikpOwogCiAgICAgLyogVW5lc2NhcGUgdGhlIGZpbHRlciAqLwotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIGZpbHRlciwgMCwgJnVuZXNjYXBlZCwgTlVMTCwgRkFMU0UpOworICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIGZpbHRlciwgMCwgJnVuZXNjYXBlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfWkVSTyk7CiAgICAgaWYocmVzdWx0KSB7CiAgICAgICByYyA9IExEQVBfTk9fTUVNT1JZOwogCkBAIC0xMDE5LDEwICsxMDI4LDEwIEBACiAKICNpZiBkZWZpbmVkKFVTRV9XSU4zMl9MREFQKQogICAgIC8qIENvbnZlcnQgdGhlIHVuZXNjYXBlZCBzdHJpbmcgdG8gYSB0Y2hhciAqLwotICAgIGx1ZHAtPmx1ZF9maWx0ZXIgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcih1bmVzY2FwZWQpOworICAgIGx1ZHAtPmx1ZF9maWx0ZXIgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIodW5lc2NhcGVkKTsKIAogICAgIC8qIEZyZWUgdGhlIHVuZXNjYXBlZCBzdHJpbmcgYXMgd2UgYXJlIGRvbmUgd2l0aCBpdCAqLwotICAgIEN1cmxfdW5pY29kZWZyZWUodW5lc2NhcGVkKTsKKyAgICBjdXJseF91bmljb2RlZnJlZSh1bmVzY2FwZWQpOwogCiAgICAgaWYoIWx1ZHAtPmx1ZF9maWx0ZXIpIHsKICAgICAgIHJjID0gTERBUF9OT19NRU1PUlk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9sbGlzdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbGxpc3QuYwppbmRleCBmODc2OWMyLi5lN2M2ZjUxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9sbGlzdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL2xsaXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTE0NCw1NCArMTQ0LDMgQEAKIHsKICAgcmV0dXJuIGxpc3QtPnNpemU7CiB9Ci0KLS8qCi0gKiBAdW5pdHRlc3Q6IDEzMDAKLSAqLwotdm9pZCBDdXJsX2xsaXN0X21vdmUoc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QsIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmUsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9sbGlzdCAqdG9fbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKnRvX2UpCi17Ci0gIC8qIFJlbW92ZSBlbGVtZW50IGZyb20gbGlzdCAqLwotICBpZihlID09IE5VTEwgfHwgbGlzdC0+c2l6ZSA9PSAwKQotICAgIHJldHVybjsKLQotICBpZihlID09IGxpc3QtPmhlYWQpIHsKLSAgICBsaXN0LT5oZWFkID0gZS0+bmV4dDsKLQotICAgIGlmKGxpc3QtPmhlYWQgPT0gTlVMTCkKLSAgICAgIGxpc3QtPnRhaWwgPSBOVUxMOwotICAgIGVsc2UKLSAgICAgIGUtPm5leHQtPnByZXYgPSBOVUxMOwotICB9Ci0gIGVsc2UgewotICAgIGUtPnByZXYtPm5leHQgPSBlLT5uZXh0OwotICAgIGlmKCFlLT5uZXh0KQotICAgICAgbGlzdC0+dGFpbCA9IGUtPnByZXY7Ci0gICAgZWxzZQotICAgICAgZS0+bmV4dC0+cHJldiA9IGUtPnByZXY7Ci0gIH0KLQotICAtLWxpc3QtPnNpemU7Ci0KLSAgLyogQWRkIGVsZW1lbnQgdG8gdG9fbGlzdCBhZnRlciB0b19lICovCi0gIGlmKHRvX2xpc3QtPnNpemUgPT0gMCkgewotICAgIHRvX2xpc3QtPmhlYWQgPSBlOwotICAgIHRvX2xpc3QtPmhlYWQtPnByZXYgPSBOVUxMOwotICAgIHRvX2xpc3QtPmhlYWQtPm5leHQgPSBOVUxMOwotICAgIHRvX2xpc3QtPnRhaWwgPSBlOwotICB9Ci0gIGVsc2UgewotICAgIGUtPm5leHQgPSB0b19lLT5uZXh0OwotICAgIGUtPnByZXYgPSB0b19lOwotICAgIGlmKHRvX2UtPm5leHQpIHsKLSAgICAgIHRvX2UtPm5leHQtPnByZXYgPSBlOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHRvX2xpc3QtPnRhaWwgPSBlOwotICAgIH0KLSAgICB0b19lLT5uZXh0ID0gZTsKLSAgfQotCi0gICsrdG9fbGlzdC0+c2l6ZTsKLX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2xsaXN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9sbGlzdC5oCmluZGV4IGI5ZDRjODkuLjAxNzhjNDIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL2xsaXN0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbGxpc3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDcsNyArNDcsNCBAQAogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOwogc2l6ZV90IEN1cmxfbGxpc3RfY291bnQoc3RydWN0IGN1cmxfbGxpc3QgKik7CiB2b2lkIEN1cmxfbGxpc3RfZGVzdHJveShzdHJ1Y3QgY3VybF9sbGlzdCAqLCB2b2lkICopOwotdm9pZCBDdXJsX2xsaXN0X21vdmUoc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqKTsKLQogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0xMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21kNC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ0LmMKaW5kZXggZTdjNzdiYy4uMGZhYjUyZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ0LmMKQEAgLTEsNSArMSwyMzEgQEAKLS8qCi0gKiAhY2hlY2tzcmMhIGRpc2FibGUgQ09QWVJJR0hUCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgpCisKKyNpbmNsdWRlICJjdXJsX21kNC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisKKyNpZmRlZiBVU0VfT1BFTlNTTAorI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKyNpZiBkZWZpbmVkKE9QRU5TU0xfVkVSU0lPTl9NQUpPUikgJiYgKE9QRU5TU0xfVkVSU0lPTl9NQUpPUiA+PSAzKQorLyogT3BlblNTTCAzLjAuMCBtYXJrcyB0aGUgTUQ0IGZ1bmN0aW9ucyBhcyBkZXByZWNhdGVkICovCisjZGVmaW5lIE9QRU5TU0xfTk9fTUQ0CisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfT1BFTlNTTCAqLworCisjaWZkZWYgVVNFX01CRURUTFMKKyNpbmNsdWRlIDxtYmVkdGxzL2NvbmZpZy5oPgorI2luY2x1ZGUgPG1iZWR0bHMvdmVyc2lvbi5oPgorCisjaWYoTUJFRFRMU19WRVJTSU9OX05VTUJFUiA+PSAweDAyMDcwMDAwKQorICAjZGVmaW5lIEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUworI2VuZGlmCisjZW5kaWYgLyogVVNFX01CRURUTFMgKi8KKworI2lmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisKKyNpbmNsdWRlIDxuZXR0bGUvbWQ0Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCit0eXBlZGVmIHN0cnVjdCBtZDRfY3R4IE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgbWQ0X2luaXQoY3R4KTsKK30KKworc3RhdGljIHZvaWQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgbWQ0X3VwZGF0ZShjdHgsIHNpemUsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqcmVzdWx0LCBNRDRfQ1RYICpjdHgpCit7CisgIG1kNF9kaWdlc3QoY3R4LCBNRDRfRElHRVNUX1NJWkUsIHJlc3VsdCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKworI2luY2x1ZGUgPGdjcnlwdC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBnY3J5X21kX2hkX3QgTUQ0X0NUWDsKKworc3RhdGljIHZvaWQgTUQ0X0luaXQoTUQ0X0NUWCAqY3R4KQoreworICBnY3J5X21kX29wZW4oY3R4LCBHQ1JZX01EX01ENCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9VcGRhdGUoTUQ0X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisgIGdjcnlfbWRfd3JpdGUoKmN0eCwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9GaW5hbCh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIE1ENF9DVFggKmN0eCkKK3sKKyAgbWVtY3B5KHJlc3VsdCwgZ2NyeV9tZF9yZWFkKCpjdHgsIDApLCBNRDRfRElHRVNUX0xFTkdUSCk7CisgIGdjcnlfbWRfY2xvc2UoKmN0eCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX09QRU5TU0wpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTUQ0KQorLyogV2hlbiBPcGVuU1NMIGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhlIE1ENC1mdW5jdGlvbnMgZnJvbSBPcGVuU1NMICovCisjaW5jbHVkZSA8b3BlbnNzbC9tZDQuaD4KKworI2VsaWYgKGRlZmluZWQoX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEKSAmJiBcCisgICAgICAgICAgICAgIChfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTA0MCkpIHx8IFwKKyAgICAgIChkZWZpbmVkKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpICYmIFwKKyAgICAgICAgICAgICAgKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMjAwMDApKQorCisjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkRpZ2VzdC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBDQ19NRDRfQ1RYIE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgKHZvaWQpQ0NfTUQ0X0luaXQoY3R4KTsKK30KKworc3RhdGljIHZvaWQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgKHZvaWQpQ0NfTUQ0X1VwZGF0ZShjdHgsIGRhdGEsIChDQ19MT05HKXNpemUpOworfQorCitzdGF0aWMgdm9pZCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqcmVzdWx0LCBNRDRfQ1RYICpjdHgpCit7CisgICh2b2lkKUNDX01ENF9GaW5hbChyZXN1bHQsIGN0eCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKKworI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdHJ1Y3QgbWQ0X2N0eCB7CisgIEhDUllQVFBST1YgaENyeXB0UHJvdjsKKyAgSENSWVBUSEFTSCBoSGFzaDsKK307Cit0eXBlZGVmIHN0cnVjdCBtZDRfY3R4IE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgY3R4LT5oQ3J5cHRQcm92ID0gMDsKKyAgY3R4LT5oSGFzaCA9IDA7CisKKyAgaWYoQ3J5cHRBY3F1aXJlQ29udGV4dCgmY3R4LT5oQ3J5cHRQcm92LCBOVUxMLCBOVUxMLCBQUk9WX1JTQV9GVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUX1ZFUklGWUNPTlRFWFQgfCBDUllQVF9TSUxFTlQpKSB7CisgICAgQ3J5cHRDcmVhdGVIYXNoKGN0eC0+aENyeXB0UHJvdiwgQ0FMR19NRDQsIDAsIDAsICZjdHgtPmhIYXNoKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBNRDRfVXBkYXRlKE1ENF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworICBDcnlwdEhhc2hEYXRhKGN0eC0+aEhhc2gsIChCWVRFICopZGF0YSwgKHVuc2lnbmVkIGludCkgc2l6ZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENF9GaW5hbCh1bnNpZ25lZCBjaGFyICpyZXN1bHQsIE1ENF9DVFggKmN0eCkKK3sKKyAgdW5zaWduZWQgbG9uZyBsZW5ndGggPSAwOworCisgIENyeXB0R2V0SGFzaFBhcmFtKGN0eC0+aEhhc2gsIEhQX0hBU0hWQUwsIE5VTEwsICZsZW5ndGgsIDApOworICBpZihsZW5ndGggPT0gTUQ0X0RJR0VTVF9MRU5HVEgpCisgICAgQ3J5cHRHZXRIYXNoUGFyYW0oY3R4LT5oSGFzaCwgSFBfSEFTSFZBTCwgcmVzdWx0LCAmbGVuZ3RoLCAwKTsKKworICBpZihjdHgtPmhIYXNoKQorICAgIENyeXB0RGVzdHJveUhhc2goY3R4LT5oSGFzaCk7CisKKyAgaWYoY3R4LT5oQ3J5cHRQcm92KQorICAgIENyeXB0UmVsZWFzZUNvbnRleHQoY3R4LT5oQ3J5cHRQcm92LCAwKTsKK30KKworI2VsaWYoZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgZGVmaW5lZChNQkVEVExTX01ENF9DKSkKKworI2luY2x1ZGUgPG1iZWR0bHMvbWQ0Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdHJ1Y3QgbWQ0X2N0eCB7CisgIHZvaWQgKmRhdGE7CisgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKK307Cit0eXBlZGVmIHN0cnVjdCBtZDRfY3R4IE1ENF9DVFg7CisKK3N0YXRpYyB2b2lkIE1ENF9Jbml0KE1ENF9DVFggKmN0eCkKK3sKKyAgY3R4LT5kYXRhID0gTlVMTDsKKyAgY3R4LT5zaXplID0gMDsKK30KKworc3RhdGljIHZvaWQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKyAgaWYoY3R4LT5kYXRhID09IE5VTEwpIHsKKyAgICBjdHgtPmRhdGEgPSBtYWxsb2Moc2l6ZSk7CisgICAgaWYoY3R4LT5kYXRhICE9IE5VTEwpIHsKKyAgICAgIG1lbWNweShjdHgtPmRhdGEsIGRhdGEsIHNpemUpOworICAgICAgY3R4LT5zaXplID0gc2l6ZTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKnJlc3VsdCwgTUQ0X0NUWCAqY3R4KQoreworICBpZihjdHgtPmRhdGEgIT0gTlVMTCkgeworI2lmICFkZWZpbmVkKEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgICBtYmVkdGxzX21kNChjdHgtPmRhdGEsIGN0eC0+c2l6ZSwgcmVzdWx0KTsKKyNlbHNlCisgICAgKHZvaWQpIG1iZWR0bHNfbWQ0X3JldChjdHgtPmRhdGEsIGN0eC0+c2l6ZSwgcmVzdWx0KTsKKyNlbmRpZgorCisgICAgQ3VybF9zYWZlZnJlZShjdHgtPmRhdGEpOworICAgIGN0eC0+c2l6ZSA9IDA7CisgIH0KK30KKworI2Vsc2UKKy8qIFdoZW4gbm8gb3RoZXIgY3J5cHRvIGxpYnJhcnkgaXMgYXZhaWxhYmxlLCBvciB0aGUgY3J5cHRvIGxpYnJhcnkgZG9lc24ndAorICogc3VwcG9ydCBNRDQsIHdlIHVzZSB0aGlzIGNvZGUgc2VnbWVudCB0aGlzIGltcGxlbWVudGF0aW9uIG9mIGl0CisgKgogICogVGhpcyBpcyBhbiBPcGVuU1NMLWNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCiAgKiBNRDQgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtIChSRkMgMTMyMCkuCiAgKgpAQCAtMzYsMzEgKzI2MiwxOSBAQAogICogY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotLyogVGhlIE5TUywgT1MvNDAwLCBhbmQgd2hlbiBub3QgaW5jbHVkZWQsIE9wZW5TU0wgYW5kIG1iZWQgVExTIGNyeXB0bwotICogbGlicmFyaWVzIGRvIG5vdCBwcm92aWRlIHRoZSBNRDQgaGFzaCBhbGdvcml0aG0sIHNvIHdlIHVzZSB0aGlzCi0gKiBpbXBsZW1lbnRhdGlvbiBvZiBpdCAqLwotI2lmIGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChPUEVOU1NMX05PX01ENCkpIHx8IFwKLSAgICAoZGVmaW5lZChVU0VfTUJFRFRMUykgJiYgIWRlZmluZWQoTUJFRFRMU19NRDRfQykpCi0KLSNpbmNsdWRlICJjdXJsX21kNC5oIgotI2luY2x1ZGUgIndhcm5sZXNzLmgiCi0KLSNpZm5kZWYgSEFWRV9PUEVOU1NMCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogLyogQW55IDMyLWJpdCBvciB3aWRlciB1bnNpZ25lZCBpbnRlZ2VyIGRhdGEgdHlwZSB3aWxsIGRvICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCBNRDRfdTMycGx1czsKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IG1kNF9jdHggewogICBNRDRfdTMycGx1cyBsbywgaGk7CiAgIE1ENF91MzJwbHVzIGEsIGIsIGMsIGQ7CiAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsKICAgTUQ0X3UzMnBsdXMgYmxvY2tbMTZdOwotfSBNRDRfQ1RYOworfTsKK3R5cGVkZWYgc3RydWN0IG1kNF9jdHggTUQ0X0NUWDsKIAogc3RhdGljIHZvaWQgTUQ0X0luaXQoTUQ0X0NUWCAqY3R4KTsKIHN0YXRpYyB2b2lkIE1ENF9VcGRhdGUoTUQ0X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOwpAQCAtMjk4LDE2ICs1MTIsMTYgQEAKICAgbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ1JZUFRPIExJQlMgKi8KIAotdm9pZCBDdXJsX21kNGl0KHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBsZW4pCit2b2lkIEN1cmxfbWQ0aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuKQogewogICBNRDRfQ1RYIGN0eDsKKwogICBNRDRfSW5pdCgmY3R4KTsKICAgTUQ0X1VwZGF0ZSgmY3R4LCBpbnB1dCwgY3VybHhfdXp0b3VpKGxlbikpOwogICBNRDRfRmluYWwob3V0cHV0LCAmY3R4KTsKIH0KIAotI2VuZGlmIC8qIGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8Ci0gICAgKGRlZmluZWQoVVNFX09QRU5TU0wpICYmIGRlZmluZWQoT1BFTlNTTF9OT19NRDQpKSB8fAotICAgIChkZWZpbmVkKFVTRV9NQkVEVExTKSAmJiAhZGVmaW5lZChNQkVEVExTX01ENF9DKSkgKi8KKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21kNS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ1LmMKaW5kZXggMmI4MWNhNC4uNTU3YTUxZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ1LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWQ1LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMwLDYgKzMwLDE0IEBACiAjaW5jbHVkZSAiY3VybF9obWFjLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKIAorI2lmZGVmIFVTRV9NQkVEVExTCisjaW5jbHVkZSA8bWJlZHRscy92ZXJzaW9uLmg+CisKKyNpZihNQkVEVExTX1ZFUlNJT05fTlVNQkVSID49IDB4MDIwNzAwMDApCisgICNkZWZpbmUgSEFTX01CRURUTFNfUkVTVUxUX0NPREVfQkFTRURfRlVOQ1RJT05TCisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfTUJFRFRMUyAqLworCiAjaWYgZGVmaW5lZChVU0VfR05VVExTX05FVFRMRSkKIAogI2luY2x1ZGUgPG5ldHRsZS9tZDUuaD4KQEAgLTUxLDcgKzU5LDcgQEAKICAgbWQ1X3VwZGF0ZShjdHgsIGlucHV0TGVuLCBpbnB1dCk7CiB9CiAKLXN0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKmN0eCkKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIE1ENV9DVFggKmN0eCkKIHsKICAgbWQ1X2RpZ2VzdChjdHgsIDE2LCBkaWdlc3QpOwogfQpAQCAtNzcsNyArODUsNyBAQAogICBnY3J5X21kX3dyaXRlKCpjdHgsIGlucHV0LCBpbnB1dExlbik7CiB9CiAKLXN0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKmN0eCkKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIE1ENV9DVFggKmN0eCkKIHsKICAgbWVtY3B5KGRpZ2VzdCwgZ2NyeV9tZF9yZWFkKCpjdHgsIDApLCAxNik7CiAgIGdjcnlfbWRfY2xvc2UoKmN0eCk7CkBAIC05MCw2ICs5OCw0NiBAQAogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAorI2VsaWYgZGVmaW5lZChVU0VfTUJFRFRMUykKKworI2luY2x1ZGUgPG1iZWR0bHMvbWQ1Lmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCit0eXBlZGVmIG1iZWR0bHNfbWQ1X2NvbnRleHQgTUQ1X0NUWDsKKworc3RhdGljIHZvaWQgTUQ1X0luaXQoTUQ1X0NUWCAqY3R4KQoreworI2lmICFkZWZpbmVkKEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19tZDVfc3RhcnRzKGN0eCk7CisjZWxzZQorICAodm9pZCkgbWJlZHRsc19tZDVfc3RhcnRzX3JldChjdHgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIE1ENV9VcGRhdGUoTUQ1X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworI2lmICFkZWZpbmVkKEhBU19NQkVEVExTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19tZDVfdXBkYXRlKGN0eCwgZGF0YSwgbGVuZ3RoKTsKKyNlbHNlCisgICh2b2lkKSBtYmVkdGxzX21kNV91cGRhdGVfcmV0KGN0eCwgZGF0YSwgbGVuZ3RoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBNRDVfQ1RYICpjdHgpCit7CisjaWYgIWRlZmluZWQoSEFTX01CRURUTFNfUkVTVUxUX0NPREVfQkFTRURfRlVOQ1RJT05TKQorICBtYmVkdGxzX21kNV9maW5pc2goY3R4LCBkaWdlc3QpOworI2Vsc2UKKyAgKHZvaWQpIG1iZWR0bHNfbWQ1X2ZpbmlzaF9yZXQoY3R4LCBkaWdlc3QpOworI2VuZGlmCit9CisKICNlbGlmIChkZWZpbmVkKF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCkgJiYgXAogICAgICAgICAgICAgICAoX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwNDApKSB8fCBcCiAgICAgICAoZGVmaW5lZChfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEKSAmJiBcCkBAIC0xMTksMjcgKzE2NywyOCBAQAogICBDQ19NRDVfVXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0TGVuKTsKIH0KIAotc3RhdGljIHZvaWQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XSwgTUQ1X0NUWCAqY3R4KQorc3RhdGljIHZvaWQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgTUQ1X0NUWCAqY3R4KQogewogICBDQ19NRDVfRmluYWwoZGlnZXN0LCBjdHgpOwogfQogCi0jZWxpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChDVVJMX1dJTkRPV1NfQVBQKQorI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKQogCiAjaW5jbHVkZSA8d2luY3J5cHQuaD4KICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IG1kNV9jdHggewogICBIQ1JZUFRQUk9WIGhDcnlwdFByb3Y7CiAgIEhDUllQVEhBU0ggaEhhc2g7Ci19IE1ENV9DVFg7Cit9OwordHlwZWRlZiBzdHJ1Y3QgbWQ1X2N0eCBNRDVfQ1RYOwogCiBzdGF0aWMgdm9pZCBNRDVfSW5pdChNRDVfQ1RYICpjdHgpCiB7Ci0gIGlmKENyeXB0QWNxdWlyZUNvbnRleHQoJmN0eC0+aENyeXB0UHJvdiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkgeworICBpZihDcnlwdEFjcXVpcmVDb250ZXh0KCZjdHgtPmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsIFBST1ZfUlNBX0ZVTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCB8IENSWVBUX1NJTEVOVCkpIHsKICAgICBDcnlwdENyZWF0ZUhhc2goY3R4LT5oQ3J5cHRQcm92LCBDQUxHX01ENSwgMCwgMCwgJmN0eC0+aEhhc2gpOwogICB9CiB9CkBAIC0xNTEsNyArMjAwLDcgQEAKICAgQ3J5cHRIYXNoRGF0YShjdHgtPmhIYXNoLCAodW5zaWduZWQgY2hhciAqKWlucHV0LCBpbnB1dExlbiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKmN0eCkKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIE1ENV9DVFggKmN0eCkKIHsKICAgdW5zaWduZWQgbG9uZyBsZW5ndGggPSAwOwogICBDcnlwdEdldEhhc2hQYXJhbShjdHgtPmhIYXNoLCBIUF9IQVNIVkFMLCBOVUxMLCAmbGVuZ3RoLCAwKTsKQEAgLTE2NCw3ICsyMTMsOSBAQAogfQogCiAjZWxzZQorCiAvKiBXaGVuIG5vIG90aGVyIGNyeXB0byBsaWJyYXJ5IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcyBjb2RlIHNlZ21lbnQgKi8KKwogLyoKICAqIFRoaXMgaXMgYW4gT3BlblNTTC1jb21wYXRpYmxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLgogICogTUQ1IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobSAoUkZDIDEzMjEpLgpAQCAtMjExLDEyICsyNjIsMTMgQEAKIC8qIEFueSAzMi1iaXQgb3Igd2lkZXIgdW5zaWduZWQgaW50ZWdlciBkYXRhIHR5cGUgd2lsbCBkbyAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgTUQ1X3UzMnBsdXM7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBtZDVfY3R4IHsKICAgTUQ1X3UzMnBsdXMgbG8sIGhpOwogICBNRDVfdTMycGx1cyBhLCBiLCBjLCBkOwogICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07CiAgIE1ENV91MzJwbHVzIGJsb2NrWzE2XTsKLX0gTUQ1X0NUWDsKK307Cit0eXBlZGVmIHN0cnVjdCBtZDVfY3R4IE1ENV9DVFg7CiAKIHN0YXRpYyB2b2lkIE1ENV9Jbml0KE1ENV9DVFggKmN0eCk7CiBzdGF0aWMgdm9pZCBNRDVfVXBkYXRlKE1ENV9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKQEAgLTQ3OCw3ICs1MzAsNyBAQAogCiAjZW5kaWYgLyogQ1JZUFRPIExJQlMgKi8KIAotY29uc3QgSE1BQ19wYXJhbXMgQ3VybF9ITUFDX01ENVtdID0geworY29uc3Qgc3RydWN0IEhNQUNfcGFyYW1zIEN1cmxfSE1BQ19NRDVbXSA9IHsKICAgewogICAgIC8qIEhhc2ggaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICovCiAgICAgQ1VSTFhfRlVOQ1RJT05fQ0FTVChITUFDX2hpbml0X2Z1bmMsIE1ENV9Jbml0KSwKQEAgLTQ5NSw3ICs1NDcsNyBAQAogICB9CiB9OwogCi1jb25zdCBNRDVfcGFyYW1zIEN1cmxfRElHRVNUX01ENVtdID0geworY29uc3Qgc3RydWN0IE1ENV9wYXJhbXMgQ3VybF9ESUdFU1RfTUQ1W10gPSB7CiAgIHsKICAgICAvKiBEaWdlc3QgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKi8KICAgICBDVVJMWF9GVU5DVElPTl9DQVNUKEN1cmxfTUQ1X2luaXRfZnVuYywgTUQ1X0luaXQpLApAQCAtNTEzLDE4ICs1NjUsMTkgQEAKIC8qCiAgKiBAdW5pdHRlc3Q6IDE2MDEKICAqLwotdm9pZCBDdXJsX21kNWl0KHVuc2lnbmVkIGNoYXIgKm91dGJ1ZmZlciwgLyogMTYgYnl0ZXMgKi8KLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCkKK3ZvaWQgQ3VybF9tZDVpdCh1bnNpZ25lZCBjaGFyICpvdXRidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBsZW4pCiB7CiAgIE1ENV9DVFggY3R4OworCiAgIE1ENV9Jbml0KCZjdHgpOwotICBNRDVfVXBkYXRlKCZjdHgsIGlucHV0LCBjdXJseF91enRvdWkoc3RybGVuKChjaGFyICopaW5wdXQpKSk7CisgIE1ENV9VcGRhdGUoJmN0eCwgaW5wdXQsIGN1cmx4X3V6dG91aShsZW4pKTsKICAgTUQ1X0ZpbmFsKG91dGJ1ZmZlciwgJmN0eCk7CiB9CiAKLU1ENV9jb250ZXh0ICpDdXJsX01ENV9pbml0KGNvbnN0IE1ENV9wYXJhbXMgKm1kNXBhcmFtcykKK3N0cnVjdCBNRDVfY29udGV4dCAqQ3VybF9NRDVfaW5pdChjb25zdCBzdHJ1Y3QgTUQ1X3BhcmFtcyAqbWQ1cGFyYW1zKQogewotICBNRDVfY29udGV4dCAqY3R4dDsKKyAgc3RydWN0IE1ENV9jb250ZXh0ICpjdHh0OwogCiAgIC8qIENyZWF0ZSBNRDUgY29udGV4dCAqLwogICBjdHh0ID0gbWFsbG9jKHNpemVvZigqY3R4dCkpOwpAQCAtNTQ2LDcgKzU5OSw3IEBACiAgIHJldHVybiBjdHh0OwogfQogCi1DVVJMY29kZSBDdXJsX01ENV91cGRhdGUoTUQ1X2NvbnRleHQgKmNvbnRleHQsCitDVVJMY29kZSBDdXJsX01ENV91cGRhdGUoc3RydWN0IE1ENV9jb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKQEAgLTU1NSw3ICs2MDgsNyBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLUNVUkxjb2RlIEN1cmxfTUQ1X2ZpbmFsKE1ENV9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpyZXN1bHQpCitDVVJMY29kZSBDdXJsX01ENV9maW5hbChzdHJ1Y3QgTUQ1X2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCkKIHsKICAgKCpjb250ZXh0LT5tZDVfaGFzaC0+bWQ1X2ZpbmFsX2Z1bmMpKHJlc3VsdCwgY29udGV4dC0+bWQ1X2hhc2hjdHgpOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tZW1kZWJ1Zy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWVtZGVidWcuYwppbmRleCBlZGU2MDA5Li4xYzZiMTUxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tZW1kZWJ1Zy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21lbWRlYnVnLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMyOCw3ICszMjgsNyBAQAogICAgIChDdXJsX2NmcmVlKShtZW0pOwogICB9CiAKLSAgaWYoc291cmNlKQorICBpZihzb3VyY2UgJiYgcHRyKQogICAgIGN1cmxfZGJnX2xvZygiTUVNICVzOiVkIGZyZWUoJXApXG4iLCBzb3VyY2UsIGxpbmUsICh2b2lkICopcHRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWVtZGVidWcuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21lbWRlYnVnLmgKaW5kZXggNTIzNmY2MC4uN2NhNDQyNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWVtZGVidWcuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9tZW1kZWJ1Zy5oCkBAIC0xNjksNiArMTY5LDYgQEAKICAqLwogCiAjZGVmaW5lIEN1cmxfc2FmZWZyZWUocHRyKSBcCi0gIGRvIHsgZnJlZSgocHRyKSk7IChwdHIpID0gTlVMTDt9IFdISUxFX0ZBTFNFCisgIGRvIHsgZnJlZSgocHRyKSk7IChwdHIpID0gTlVMTDt9IHdoaWxlKDApCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NRU1ERUJVR19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9taW1lLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9taW1lLmMKaW5kZXggMjEzNWY3Mi4uNmE5YjY0YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbWltZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAibWltZS5oIgogI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgInNlbmRmLmgiCiAKQEAgLTUyLDYgKzUzLDEwIEBACiAKIAogI2RlZmluZSBSRUFEX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICgoc2l6ZV90KSAtMSkKKyNkZWZpbmUgU1RPUF9GSUxMSU5HICAgICAgICAgICAgICAgICAgICAoKHNpemVfdCkgLTIpCisKK3N0YXRpYyBzaXplX3QgbWltZV9zdWJwYXJ0c19yZWFkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIHNpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0cmVhbSwgYm9vbCAqaGFzcmVhZCk7CiAKIC8qIEVuY29kZXJzLiAqLwogc3RhdGljIHNpemVfdCBlbmNvZGVyX25vcF9yZWFkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGJvb2wgYXRlb2YsCkBAIC02Niw3ICs3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX21pbWVwYXJ0ICpwYXJ0KTsKIHN0YXRpYyBjdXJsX29mZl90IGVuY29kZXJfcXBfc2l6ZShjdXJsX21pbWVwYXJ0ICpwYXJ0KTsKIAotc3RhdGljIGNvbnN0IG1pbWVfZW5jb2RlciBlbmNvZGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtaW1lX2VuY29kZXIgZW5jb2RlcnNbXSA9IHsKICAgeyJiaW5hcnkiLCBlbmNvZGVyX25vcF9yZWFkLCBlbmNvZGVyX25vcF9zaXplfSwKICAgeyI4Yml0IiwgZW5jb2Rlcl9ub3BfcmVhZCwgZW5jb2Rlcl9ub3Bfc2l6ZX0sCiAgIHsiN2JpdCIsIGVuY29kZXJfN2JpdF9yZWFkLCBlbmNvZGVyX25vcF9zaXplfSwKQEAgLTI2NCw3ICsyNjksOCBAQAogCiAKIC8qIFNldCByZWFkYmFjayBzdGF0ZS4gKi8KLXN0YXRpYyB2b2lkIG1pbWVzZXRzdGF0ZShtaW1lX3N0YXRlICpzdGF0ZSwgZW51bSBtaW1lc3RhdGUgdG9rLCB2b2lkICpwdHIpCitzdGF0aWMgdm9pZCBtaW1lc2V0c3RhdGUoc3RydWN0IG1pbWVfc3RhdGUgKnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWltZXN0YXRlIHRvaywgdm9pZCAqcHRyKQogewogICBzdGF0ZS0+c3RhdGUgPSB0b2s7CiAgIHN0YXRlLT5wdHIgPSBwdHI7CkBAIC0zMzcsNyArMzQzLDcgQEAKIH0KIAogLyogSW5pdGlhbGl6ZSBkYXRhIGVuY29kZXIgc3RhdGUuICovCi1zdGF0aWMgdm9pZCBjbGVhbnVwX2VuY29kZXJfc3RhdGUobWltZV9lbmNvZGVyX3N0YXRlICpwKQorc3RhdGljIHZvaWQgY2xlYW51cF9lbmNvZGVyX3N0YXRlKHN0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgKnApCiB7CiAgIHAtPnBvcyA9IDA7CiAgIHAtPmJ1ZmJlZyA9IDA7CkBAIC0zNDcsMTcgKzM1MywyMiBAQAogCiAvKiBEdW1teSBlbmNvZGVyLiBUaGlzIGlzIHVzZWQgZm9yIDhiaXQgYW5kIGJpbmFyeSBjb250ZW50IGVuY29kaW5ncy4gKi8KIHN0YXRpYyBzaXplX3QgZW5jb2Rlcl9ub3BfcmVhZChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBib29sIGF0ZW9mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfbWltZXBhcnQgKnBhcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfbWltZXBhcnQgKnBhcnQpCiB7Ci0gIG1pbWVfZW5jb2Rlcl9zdGF0ZSAqc3QgPSAmcGFydC0+ZW5jc3RhdGU7CisgIHN0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgKnN0ID0gJnBhcnQtPmVuY3N0YXRlOwogICBzaXplX3QgaW5zaXplID0gc3QtPmJ1ZmVuZCAtIHN0LT5idWZiZWc7CiAKICAgKHZvaWQpIGF0ZW9mOwogCisgIGlmKCFzaXplKQorICAgIHJldHVybiBTVE9QX0ZJTExJTkc7CisKICAgaWYoc2l6ZSA+IGluc2l6ZSkKICAgICBzaXplID0gaW5zaXplOworCiAgIGlmKHNpemUpCi0gICAgbWVtY3B5KGJ1ZmZlciwgc3QtPmJ1Ziwgc2l6ZSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgc3QtPmJ1ZiArIHN0LT5idWZiZWcsIHNpemUpOworCiAgIHN0LT5idWZiZWcgKz0gc2l6ZTsKICAgcmV0dXJuIHNpemU7CiB9CkBAIC0zNzIsMTEgKzM4MywxNCBAQAogc3RhdGljIHNpemVfdCBlbmNvZGVyXzdiaXRfcmVhZChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBib29sIGF0ZW9mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX21pbWVwYXJ0ICpwYXJ0KQogewotICBtaW1lX2VuY29kZXJfc3RhdGUgKnN0ID0gJnBhcnQtPmVuY3N0YXRlOworICBzdHJ1Y3QgbWltZV9lbmNvZGVyX3N0YXRlICpzdCA9ICZwYXJ0LT5lbmNzdGF0ZTsKICAgc2l6ZV90IGN1cnNpemUgPSBzdC0+YnVmZW5kIC0gc3QtPmJ1ZmJlZzsKIAogICAodm9pZCkgYXRlb2Y7CiAKKyAgaWYoIXNpemUpCisgICAgcmV0dXJuIFNUT1BfRklMTElORzsKKwogICBpZihzaXplID4gY3Vyc2l6ZSkKICAgICBzaXplID0gY3Vyc2l6ZTsKIApAQCAtMzk1LDcgKzQwOSw3IEBACiBzdGF0aWMgc2l6ZV90IGVuY29kZXJfYmFzZTY0X3JlYWQoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgYm9vbCBhdGVvZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9taW1lcGFydCAqcGFydCkKIHsKLSAgbWltZV9lbmNvZGVyX3N0YXRlICpzdCA9ICZwYXJ0LT5lbmNzdGF0ZTsKKyAgc3RydWN0IG1pbWVfZW5jb2Rlcl9zdGF0ZSAqc3QgPSAmcGFydC0+ZW5jc3RhdGU7CiAgIHNpemVfdCBjdXJzaXplID0gMDsKICAgaW50IGk7CiAgIGNoYXIgKnB0ciA9IGJ1ZmZlcjsKQEAgLTQwNCw4ICs0MTgsMTEgQEAKICAgICAvKiBMaW5lIGZ1bGwgPyAqLwogICAgIGlmKHN0LT5wb3MgPiBNQVhfRU5DT0RFRF9MSU5FX0xFTkdUSCAtIDQpIHsKICAgICAgIC8qIFllcywgd2UgbmVlZCAyIGNoYXJhY3RlcnMgZm9yIENSTEYuICovCi0gICAgICBpZihzaXplIDwgMikKKyAgICAgIGlmKHNpemUgPCAyKSB7CisgICAgICAgIGlmKCFjdXJzaXplKQorICAgICAgICAgIHJldHVybiBTVE9QX0ZJTExJTkc7CiAgICAgICAgIGJyZWFrOworICAgICAgfQogICAgICAgKnB0cisrID0gJ1xyJzsKICAgICAgICpwdHIrKyA9ICdcbic7CiAgICAgICBzdC0+cG9zID0gMDsKQEAgLTQxNCw3ICs0MzEsMTIgQEAKICAgICB9CiAKICAgICAvKiBCZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBhbmQgaW5wdXQgZGF0YSBmb3IgYSBiYXNlNjQgZ3JvdXAuICovCi0gICAgaWYoc2l6ZSA8IDQgfHwgc3QtPmJ1ZmVuZCAtIHN0LT5idWZiZWcgPCAzKQorICAgIGlmKHNpemUgPCA0KSB7CisgICAgICBpZighY3Vyc2l6ZSkKKyAgICAgICAgcmV0dXJuIFNUT1BfRklMTElORzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZihzdC0+YnVmZW5kIC0gc3QtPmJ1ZmJlZyA8IDMpCiAgICAgICBicmVhazsKIAogICAgIC8qIEVuY29kZSB0aHJlZSBieXRlcyBhcyBmb3VyIGNoYXJhY3RlcnMuICovCkBAIC00MzEsMjUgKzQ1MywzMSBAQAogICB9CiAKICAgLyogSWYgYXQgZW9mLCB3ZSBoYXZlIHRvIGZsdXNoIHRoZSBidWZmZXJlZCBkYXRhLiAqLwotICBpZihhdGVvZiAmJiBzaXplID49IDQpIHsKLSAgICAvKiBCdWZmZXJlZCBkYXRhIHNpemUgY2FuIG9ubHkgYmUgMCwgMSBvciAyLiAqLwotICAgIHB0clsyXSA9IHB0clszXSA9ICc9JzsKLSAgICBpID0gMDsKLSAgICBzd2l0Y2goc3QtPmJ1ZmVuZCAtIHN0LT5idWZiZWcpIHsKLSAgICBjYXNlIDI6Ci0gICAgICBpID0gKHN0LT5idWZbc3QtPmJ1ZmJlZyArIDFdICYgMHhGRikgPDwgODsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgY2FzZSAxOgotICAgICAgaSB8PSAoc3QtPmJ1ZltzdC0+YnVmYmVnXSAmIDB4RkYpIDw8IDE2OwotICAgICAgcHRyWzBdID0gYmFzZTY0WyhpID4+IDE4KSAmIDB4M0ZdOwotICAgICAgcHRyWzFdID0gYmFzZTY0WyhpID4+IDEyKSAmIDB4M0ZdOwotICAgICAgaWYoKytzdC0+YnVmYmVnICE9IHN0LT5idWZlbmQpIHsKLSAgICAgICAgcHRyWzJdID0gYmFzZTY0WyhpID4+IDYpICYgMHgzRl07Ci0gICAgICAgIHN0LT5idWZiZWcrKzsKKyAgaWYoYXRlb2YpIHsKKyAgICBpZihzaXplIDwgNCkgeworICAgICAgaWYoIWN1cnNpemUpCisgICAgICAgIHJldHVybiBTVE9QX0ZJTExJTkc7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogQnVmZmVyZWQgZGF0YSBzaXplIGNhbiBvbmx5IGJlIDAsIDEgb3IgMi4gKi8KKyAgICAgIHB0clsyXSA9IHB0clszXSA9ICc9JzsKKyAgICAgIGkgPSAwOworICAgICAgc3dpdGNoKHN0LT5idWZlbmQgLSBzdC0+YnVmYmVnKSB7CisgICAgICBjYXNlIDI6CisgICAgICAgIGkgPSAoc3QtPmJ1ZltzdC0+YnVmYmVnICsgMV0gJiAweEZGKSA8PCA4OworICAgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgICAgY2FzZSAxOgorICAgICAgICBpIHw9IChzdC0+YnVmW3N0LT5idWZiZWddICYgMHhGRikgPDwgMTY7CisgICAgICAgIHB0clswXSA9IGJhc2U2NFsoaSA+PiAxOCkgJiAweDNGXTsKKyAgICAgICAgcHRyWzFdID0gYmFzZTY0WyhpID4+IDEyKSAmIDB4M0ZdOworICAgICAgICBpZigrK3N0LT5idWZiZWcgIT0gc3QtPmJ1ZmVuZCkgeworICAgICAgICAgIHB0clsyXSA9IGJhc2U2NFsoaSA+PiA2KSAmIDB4M0ZdOworICAgICAgICAgIHN0LT5idWZiZWcrKzsKKyAgICAgICAgfQorICAgICAgICBjdXJzaXplICs9IDQ7CisgICAgICAgIHN0LT5wb3MgKz0gNDsKKyAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBjdXJzaXplICs9IDQ7Ci0gICAgICBzdC0+cG9zICs9IDQ7Ci0gICAgICBicmVhazsKICAgICB9CiAgIH0KIApAQCAtNDg1LDcgKzUxMyw3IEBACiAgKiBDaGVjayBpZiBhIENSTEYgb3IgZW5kIG9mIGRhdGEgaXMgaW4gaW5wdXQgYnVmZmVyIGF0IGN1cnJlbnQgcG9zaXRpb24gKyBuLgogICogUmV0dXJuIC0xIGlmIG1vcmUgZGF0YSBuZWVkZWQsIDEgaWYgQ1JMRiBvciBlbmQgb2YgZGF0YSwgZWxzZSAwLgogICovCi1zdGF0aWMgaW50IHFwX2xvb2thaGVhZF9lb2wobWltZV9lbmNvZGVyX3N0YXRlICpzdCwgaW50IGF0ZW9mLCBzaXplX3QgbikKK3N0YXRpYyBpbnQgcXBfbG9va2FoZWFkX2VvbChzdHJ1Y3QgbWltZV9lbmNvZGVyX3N0YXRlICpzdCwgaW50IGF0ZW9mLCBzaXplX3QgbikKIHsKICAgbiArPSBzdC0+YnVmYmVnOwogICBpZihuID49IHN0LT5idWZlbmQgJiYgYXRlb2YpCkBAIC01MDIsNyArNTMwLDcgQEAKIHN0YXRpYyBzaXplX3QgZW5jb2Rlcl9xcF9yZWFkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGJvb2wgYXRlb2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX21pbWVwYXJ0ICpwYXJ0KQogewotICBtaW1lX2VuY29kZXJfc3RhdGUgKnN0ID0gJnBhcnQtPmVuY3N0YXRlOworICBzdHJ1Y3QgbWltZV9lbmNvZGVyX3N0YXRlICpzdCA9ICZwYXJ0LT5lbmNzdGF0ZTsKICAgY2hhciAqcHRyID0gYnVmZmVyOwogICBzaXplX3QgY3Vyc2l6ZSA9IDA7CiAgIGludCBzb2Z0bGluZWJyZWFrOwpAQCAtNTY3LDcgKzU5NSw2IEBACiAgICAgICAgIHN3aXRjaChxcF9sb29rYWhlYWRfZW9sKHN0LCBhdGVvZiwgY29uc3VtZWQpKSB7CiAgICAgICAgIGNhc2UgLTE6ICAgICAgICAvKiBOZWVkIG1vcmUgZGF0YS4gKi8KICAgICAgICAgICByZXR1cm4gY3Vyc2l6ZTsKLSAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIE5vdCBmb2xsb3dlZCBieSBhIENSTEYuICovCiAgICAgICAgICAgc29mdGxpbmVicmVhayA9IDE7CiAgICAgICAgICAgYnJlYWs7CkBAIC01ODEsOCArNjA4LDExIEBACiAgICAgfQogCiAgICAgLyogSWYgdGhlIG91dHB1dCBidWZmZXIgd291bGQgb3ZlcmZsb3csIGRvIG5vdCBzdG9yZS4gKi8KLSAgICBpZihsZW4gPiBzaXplKQorICAgIGlmKGxlbiA+IHNpemUpIHsKKyAgICAgIGlmKCFjdXJzaXplKQorICAgICAgICByZXR1cm4gU1RPUF9GSUxMSU5HOwogICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgLyogQXBwZW5kIHRvIG91dHB1dCBidWZmZXIuICovCiAgICAgbWVtY3B5KHB0ciwgYnVmLCBsZW4pOwpAQCAtNjEyLDE2ICs2NDIsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0cmVhbSkKIHsKICAgY3VybF9taW1lcGFydCAqcGFydCA9IChjdXJsX21pbWVwYXJ0ICopIGluc3RyZWFtOwotICBzaXplX3Qgc3ogPSAoc2l6ZV90KSBwYXJ0LT5kYXRhc2l6ZSAtIHBhcnQtPnN0YXRlLm9mZnNldDsKKyAgc2l6ZV90IHN6ID0gY3VybHhfc290b3V6KHBhcnQtPmRhdGFzaXplIC0gcGFydC0+c3RhdGUub2Zmc2V0KTsKICAgKHZvaWQpIHNpemU7ICAgLyogQWx3YXlzIDEuKi8KIAorICBpZighbml0ZW1zKQorICAgIHJldHVybiBTVE9QX0ZJTExJTkc7CisKICAgaWYoc3ogPiBuaXRlbXMpCiAgICAgc3ogPSBuaXRlbXM7CiAKICAgaWYoc3opCi0gICAgbWVtY3B5KGJ1ZmZlciwgKGNoYXIgKikgJnBhcnQtPmRhdGFbcGFydC0+c3RhdGUub2Zmc2V0XSwgc3opOworICAgIG1lbWNweShidWZmZXIsIHBhcnQtPmRhdGEgKyBjdXJseF9zb3RvdXoocGFydC0+c3RhdGUub2Zmc2V0KSwgc3opOwogCi0gIHBhcnQtPnN0YXRlLm9mZnNldCArPSBzejsKICAgcmV0dXJuIHN6OwogfQogCkBAIC02NDEsNyArNjczLDcgQEAKICAgaWYob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBwYXJ0LT5kYXRhc2l6ZSkKICAgICByZXR1cm4gQ1VSTF9TRUVLRlVOQ19GQUlMOwogCi0gIHBhcnQtPnN0YXRlLm9mZnNldCA9IChzaXplX3QpIG9mZnNldDsKKyAgcGFydC0+c3RhdGUub2Zmc2V0ID0gb2Zmc2V0OwogICByZXR1cm4gQ1VSTF9TRUVLRlVOQ19PSzsKIH0KIApAQCAtNjUzLDcgKzY4NSw3IEBACiAKIC8qIE5hbWVkIGZpbGUgY2FsbGJhY2tzLiAqLwogLyogQXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBtaW1lIHBhcnQuICovCi1zdGF0aWMgaW50IG1pbWVfb3Blbl9maWxlKGN1cmxfbWltZXBhcnQgKiBwYXJ0KQorc3RhdGljIGludCBtaW1lX29wZW5fZmlsZShjdXJsX21pbWVwYXJ0ICpwYXJ0KQogewogICAvKiBPcGVuIGEgTUlNRUtJTkRfRklMRSBwYXJ0LiAqLwogCkBAIC02NjgsNiArNzAwLDkgQEAKIHsKICAgY3VybF9taW1lcGFydCAqcGFydCA9IChjdXJsX21pbWVwYXJ0ICopIGluc3RyZWFtOwogCisgIGlmKCFuaXRlbXMpCisgICAgcmV0dXJuIFNUT1BfRklMTElORzsKKwogICBpZihtaW1lX29wZW5fZmlsZShwYXJ0KSkKICAgICByZXR1cm4gUkVBRF9FUlJPUjsKIApAQCAtNzA1LDIxICs3NDAsMjIgQEAKIC8qIEFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgbWltZSBzdHJ1Y3R1cmUuICovCiAKIC8qIFJlYWRiYWNrIGEgYnl0ZSBzdHJpbmcgc2VnbWVudC4gKi8KLXN0YXRpYyBzaXplX3QgcmVhZGJhY2tfYnl0ZXMobWltZV9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgc2l6ZV90IHJlYWRiYWNrX2J5dGVzKHN0cnVjdCBtaW1lX3N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnl0ZXMsIHNpemVfdCBudW1ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdHJhaWwpCiB7CiAgIHNpemVfdCBzejsKKyAgc2l6ZV90IG9mZnNldCA9IGN1cmx4X3NvdG91eihzdGF0ZS0+b2Zmc2V0KTsKIAotICBpZihudW1ieXRlcyA+IHN0YXRlLT5vZmZzZXQpIHsKLSAgICBzeiA9IG51bWJ5dGVzIC0gc3RhdGUtPm9mZnNldDsKLSAgICBieXRlcyArPSBzdGF0ZS0+b2Zmc2V0OworICBpZihudW1ieXRlcyA+IG9mZnNldCkgeworICAgIHN6ID0gbnVtYnl0ZXMgLSBvZmZzZXQ7CisgICAgYnl0ZXMgKz0gb2Zmc2V0OwogICB9CiAgIGVsc2UgewogICAgIHNpemVfdCB0c3ogPSBzdHJsZW4odHJhaWwpOwogCi0gICAgc3ogPSBzdGF0ZS0+b2Zmc2V0IC0gbnVtYnl0ZXM7CisgICAgc3ogPSBvZmZzZXQgLSBudW1ieXRlczsKICAgICBpZihzeiA+PSB0c3opCiAgICAgICByZXR1cm4gMDsKICAgICBieXRlcyA9IHRyYWlsICsgc3o7CkBAIC03MzYsMjUgKzc3Miw3OSBAQAogCiAvKiBSZWFkIGEgbm9uLWVuY29kZWQgcGFydCBjb250ZW50LiAqLwogc3RhdGljIHNpemVfdCByZWFkX3BhcnRfY29udGVudChjdXJsX21pbWVwYXJ0ICpwYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBidWZzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBidWZzaXplLCBib29sICpoYXNyZWFkKQogewogICBzaXplX3Qgc3ogPSAwOwogCi0gIGlmKHBhcnQtPnJlYWRmdW5jKQotICAgIHN6ID0gcGFydC0+cmVhZGZ1bmMoYnVmZmVyLCAxLCBidWZzaXplLCBwYXJ0LT5hcmcpOworICBzd2l0Y2gocGFydC0+bGFzdHJlYWRzdGF0dXMpIHsKKyAgY2FzZSAwOgorICBjYXNlIENVUkxfUkVBREZVTkNfQUJPUlQ6CisgIGNhc2UgQ1VSTF9SRUFERlVOQ19QQVVTRToKKyAgY2FzZSBSRUFEX0VSUk9SOgorICAgIHJldHVybiBwYXJ0LT5sYXN0cmVhZHN0YXR1czsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfQorCisgIC8qIElmIHdlIGNhbiBkZXRlcm1pbmUgd2UgYXJlIGF0IGVuZCBvZiBwYXJ0IGRhdGEsIHNwYXJlIGEgcmVhZC4gKi8KKyAgaWYocGFydC0+ZGF0YXNpemUgIT0gKGN1cmxfb2ZmX3QpIC0xICYmCisgICAgIHBhcnQtPnN0YXRlLm9mZnNldCA+PSBwYXJ0LT5kYXRhc2l6ZSkgeworICAgIC8qIHN6IGlzIGFscmVhZHkgemVyby4gKi8KKyAgfQorICBlbHNlIHsKKyAgICBzd2l0Y2gocGFydC0+a2luZCkgeworICAgIGNhc2UgTUlNRUtJTkRfTVVMVElQQVJUOgorICAgICAgLyoKKyAgICAgICAqIENhbm5vdCBiZSBwcm9jZXNzZWQgYXMgb3RoZXIga2luZHMgc2luY2UgcmVhZCBmdW5jdGlvbiByZXF1aXJlcworICAgICAgICogYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgYW5kIGlzIGhpZ2hseSByZWN1cnNpdmUuCisgICAgICAgKi8KKyAgICAgICBzeiA9IG1pbWVfc3VicGFydHNfcmVhZChidWZmZXIsIDEsIGJ1ZnNpemUsIHBhcnQtPmFyZywgaGFzcmVhZCk7CisgICAgICAgYnJlYWs7CisgICAgY2FzZSBNSU1FS0lORF9GSUxFOgorICAgICAgaWYocGFydC0+ZnAgJiYgZmVvZihwYXJ0LT5mcCkpCisgICAgICAgIGJyZWFrOyAgLyogQXQgRU9GLiAqLworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBkZWZhdWx0OgorICAgICAgaWYocGFydC0+cmVhZGZ1bmMpIHsKKyAgICAgICAgaWYoIShwYXJ0LT5mbGFncyAmIE1JTUVfRkFTVF9SRUFEKSkgeworICAgICAgICAgIGlmKCpoYXNyZWFkKQorICAgICAgICAgICAgcmV0dXJuIFNUT1BfRklMTElORzsKKyAgICAgICAgICAqaGFzcmVhZCA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgc3ogPSBwYXJ0LT5yZWFkZnVuYyhidWZmZXIsIDEsIGJ1ZnNpemUsIHBhcnQtPmFyZyk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBzd2l0Y2goc3opIHsKKyAgY2FzZSBTVE9QX0ZJTExJTkc6CisgICAgYnJlYWs7CisgIGNhc2UgMDoKKyAgY2FzZSBDVVJMX1JFQURGVU5DX0FCT1JUOgorICBjYXNlIENVUkxfUkVBREZVTkNfUEFVU0U6CisgIGNhc2UgUkVBRF9FUlJPUjoKKyAgICBwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9IHN6OworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHBhcnQtPnN0YXRlLm9mZnNldCArPSBzejsKKyAgICBwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9IHN6OworICAgIGJyZWFrOworICB9CisKICAgcmV0dXJuIHN6OwogfQogCiAvKiBSZWFkIGFuZCBlbmNvZGUgcGFydCBjb250ZW50LiAqLwotc3RhdGljIHNpemVfdCByZWFkX2VuY29kZWRfcGFydF9jb250ZW50KGN1cmxfbWltZXBhcnQgKnBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6ZSkKK3N0YXRpYyBzaXplX3QgcmVhZF9lbmNvZGVkX3BhcnRfY29udGVudChjdXJsX21pbWVwYXJ0ICpwYXJ0LCBjaGFyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZnNpemUsIGJvb2wgKmhhc3JlYWQpCiB7Ci0gIG1pbWVfZW5jb2Rlcl9zdGF0ZSAqc3QgPSAmcGFydC0+ZW5jc3RhdGU7CisgIHN0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgKnN0ID0gJnBhcnQtPmVuY3N0YXRlOwogICBzaXplX3QgY3Vyc2l6ZSA9IDA7CiAgIHNpemVfdCBzejsKICAgYm9vbCBhdGVvZiA9IEZBTFNFOwogCi0gIHdoaWxlKGJ1ZnNpemUpIHsKKyAgZm9yKDs7KSB7CiAgICAgaWYoc3QtPmJ1ZmJlZyA8IHN0LT5idWZlbmQgfHwgYXRlb2YpIHsKICAgICAgIC8qIEVuY29kZSBidWZmZXJlZCBkYXRhLiAqLwogICAgICAgc3ogPSBwYXJ0LT5lbmNvZGVyLT5lbmNvZGVmdW5jKGJ1ZmZlciwgYnVmc2l6ZSwgYXRlb2YsIHBhcnQpOwpAQCAtNzYzLDkgKzg1Myw4IEBACiAgICAgICAgIGlmKGF0ZW9mKQogICAgICAgICAgIHJldHVybiBjdXJzaXplOwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTF9SRUFERlVOQ19BQk9SVDoKLSAgICAgIGNhc2UgQ1VSTF9SRUFERlVOQ19QQVVTRToKICAgICAgIGNhc2UgUkVBRF9FUlJPUjoKKyAgICAgIGNhc2UgU1RPUF9GSUxMSU5HOgogICAgICAgICByZXR1cm4gY3Vyc2l6ZT8gY3Vyc2l6ZTogc3o7CiAgICAgICBkZWZhdWx0OgogICAgICAgICBjdXJzaXplICs9IHN6OwpAQCAtNzg3LDcgKzg3Niw3IEBACiAgICAgaWYoc3QtPmJ1ZmVuZCA+PSBzaXplb2Yoc3QtPmJ1ZikpCiAgICAgICByZXR1cm4gY3Vyc2l6ZT8gY3Vyc2l6ZTogUkVBRF9FUlJPUjsgICAgLyogQnVmZmVyIGZ1bGwuICovCiAgICAgc3ogPSByZWFkX3BhcnRfY29udGVudChwYXJ0LCBzdC0+YnVmICsgc3QtPmJ1ZmVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdC0+YnVmKSAtIHN0LT5idWZlbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0LT5idWYpIC0gc3QtPmJ1ZmVuZCwgaGFzcmVhZCk7CiAgICAgc3dpdGNoKHN6KSB7CiAgICAgY2FzZSAwOgogICAgICAgYXRlb2YgPSBUUlVFOwpAQCAtNzk1LDYgKzg4NCw3IEBACiAgICAgY2FzZSBDVVJMX1JFQURGVU5DX0FCT1JUOgogICAgIGNhc2UgQ1VSTF9SRUFERlVOQ19QQVVTRToKICAgICBjYXNlIFJFQURfRVJST1I6CisgICAgY2FzZSBTVE9QX0ZJTExJTkc6CiAgICAgICByZXR1cm4gY3Vyc2l6ZT8gY3Vyc2l6ZTogc3o7CiAgICAgZGVmYXVsdDoKICAgICAgIHN0LT5idWZlbmQgKz0gc3o7CkBAIC04MDIsMTIgKzg5MiwxMiBAQAogICAgIH0KICAgfQogCi0gIHJldHVybiBjdXJzaXplOworICAvKiBOT1RSRUFDSEVEICovCiB9CiAKIC8qIFJlYWRiYWNrIGEgbWltZSBwYXJ0LiAqLwogc3RhdGljIHNpemVfdCByZWFkYmFja19wYXJ0KGN1cmxfbWltZXBhcnQgKnBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBidWZzaXplLCBib29sICpoYXNyZWFkKQogewogICBzaXplX3QgY3Vyc2l6ZSA9IDA7CiAjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCkBAIC04NjYsOSArOTU2LDkgQEAKICAgICAgIGJyZWFrOwogICAgIGNhc2UgTUlNRVNUQVRFX0NPTlRFTlQ6CiAgICAgICBpZihwYXJ0LT5lbmNvZGVyKQotICAgICAgICBzeiA9IHJlYWRfZW5jb2RlZF9wYXJ0X2NvbnRlbnQocGFydCwgYnVmZmVyLCBidWZzaXplKTsKKyAgICAgICAgc3ogPSByZWFkX2VuY29kZWRfcGFydF9jb250ZW50KHBhcnQsIGJ1ZmZlciwgYnVmc2l6ZSwgaGFzcmVhZCk7CiAgICAgICBlbHNlCi0gICAgICAgIHN6ID0gcmVhZF9wYXJ0X2NvbnRlbnQocGFydCwgYnVmZmVyLCBidWZzaXplKTsKKyAgICAgICAgc3ogPSByZWFkX3BhcnRfY29udGVudChwYXJ0LCBidWZmZXIsIGJ1ZnNpemUsIGhhc3JlYWQpOwogICAgICAgc3dpdGNoKHN6KSB7CiAgICAgICBjYXNlIDA6CiAgICAgICAgIG1pbWVzZXRzdGF0ZSgmcGFydC0+c3RhdGUsIE1JTUVTVEFURV9FTkQsIE5VTEwpOwpAQCAtODgxLDYgKzk3MSw3IEBACiAgICAgICBjYXNlIENVUkxfUkVBREZVTkNfQUJPUlQ6CiAgICAgICBjYXNlIENVUkxfUkVBREZVTkNfUEFVU0U6CiAgICAgICBjYXNlIFJFQURfRVJST1I6CisgICAgICBjYXNlIFNUT1BfRklMTElORzoKICAgICAgICAgcmV0dXJuIGN1cnNpemU/IGN1cnNpemU6IHN6OwogICAgICAgfQogICAgICAgYnJlYWs7CkBAIC05MDksOSArMTAwMCw5IEBACiAgIHJldHVybiBjdXJzaXplOwogfQogCi0vKiBSZWFkYmFjayBmcm9tIG1pbWUuICovCisvKiBSZWFkYmFjayBmcm9tIG1pbWUuIFdhcm5pbmc6IG5vdCBhIHJlYWQgY2FsbGJhY2sgZnVuY3Rpb24uICovCiBzdGF0aWMgc2l6ZV90IG1pbWVfc3VicGFydHNfcmVhZChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgbml0ZW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaW5zdHJlYW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0cmVhbSwgYm9vbCAqaGFzcmVhZCkKIHsKICAgY3VybF9taW1lICptaW1lID0gKGN1cmxfbWltZSAqKSBpbnN0cmVhbTsKICAgc2l6ZV90IGN1cnNpemUgPSAwOwpAQCAtOTMyLDcgKzEwMjMsNyBAQAogI2VuZGlmCiAgICAgICBtaW1lc2V0c3RhdGUoJm1pbWUtPnN0YXRlLCBNSU1FU1RBVEVfQk9VTkRBUlkxLCBtaW1lLT5maXJzdHBhcnQpOwogICAgICAgLyogVGhlIGZpcnN0IGJvdW5kYXJ5IGFsd2F5cyBmb2xsb3dzIHRoZSBoZWFkZXIgdGVybWluYXRpb24gZW1wdHkgbGluZSwKLSAgICAgICAgIHNvIGlzIGFsd2F5cyBwcmVjZWRlZCBieSBhIENSTEsuIFdlIGNhbiB0aGVuIHNwYXJlIDIgY2hhcmFjdGVycworICAgICAgICAgc28gaXMgYWx3YXlzIHByZWNlZGVkIGJ5IGEgQ1JMRi4gV2UgY2FuIHRoZW4gc3BhcmUgMiBjaGFyYWN0ZXJzCiAgICAgICAgICBieSBza2lwcGluZyB0aGUgbGVhZGluZyBDUkxGIGluIGJvdW5kYXJ5LiAqLwogICAgICAgbWltZS0+c3RhdGUub2Zmc2V0ICs9IDI7CiAgICAgICBicmVhazsKQEAgLTk2MiwxMSArMTA1MywxMiBAQAogICAgICAgICBtaW1lc2V0c3RhdGUoJm1pbWUtPnN0YXRlLCBNSU1FU1RBVEVfRU5ELCBOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBzeiA9IHJlYWRiYWNrX3BhcnQocGFydCwgYnVmZmVyLCBuaXRlbXMpOworICAgICAgc3ogPSByZWFkYmFja19wYXJ0KHBhcnQsIGJ1ZmZlciwgbml0ZW1zLCBoYXNyZWFkKTsKICAgICAgIHN3aXRjaChzeikgewogICAgICAgY2FzZSBDVVJMX1JFQURGVU5DX0FCT1JUOgogICAgICAgY2FzZSBDVVJMX1JFQURGVU5DX1BBVVNFOgogICAgICAgY2FzZSBSRUFEX0VSUk9SOgorICAgICAgY2FzZSBTVE9QX0ZJTExJTkc6CiAgICAgICAgIHJldHVybiBjdXJzaXplPyBjdXJzaXplOiBzejsKICAgICAgIGNhc2UgMDoKICNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKQEAgLTEwMzEsNiArMTEyMyw3IEBACiAgIGlmKHJlcyA9PSBDVVJMX1NFRUtGVU5DX09LKQogICAgIG1pbWVzZXRzdGF0ZSgmcGFydC0+c3RhdGUsIHRhcmdldHN0YXRlLCBOVUxMKTsKIAorICBwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9IDE7IC8qIFN1Y2Nlc3NmdWwgcmVhZCBzdGF0dXMuICovCiAgIHJldHVybiByZXM7CiB9CiAKQEAgLTEwNzMsNiArMTE2Niw4IEBACiAgIHBhcnQtPmRhdGFzaXplID0gKGN1cmxfb2ZmX3QpIDA7ICAgIC8qIE5vIHNpemUgeWV0LiAqLwogICBjbGVhbnVwX2VuY29kZXJfc3RhdGUoJnBhcnQtPmVuY3N0YXRlKTsKICAgcGFydC0+a2luZCA9IE1JTUVLSU5EX05PTkU7CisgIHBhcnQtPmZsYWdzICY9IH5NSU1FX0ZBU1RfUkVBRDsKKyAgcGFydC0+bGFzdHJlYWRzdGF0dXMgPSAxOyAvKiBTdWNjZXNzZnVsIHJlYWQgc3RhdHVzLiAqLwogfQogCiBzdGF0aWMgdm9pZCBtaW1lX3N1YnBhcnRzX2ZyZWUodm9pZCAqcHRyKQpAQCAtMTEzNSw2ICsxMjMwLDggQEAKICAgY29uc3QgY3VybF9taW1lcGFydCAqczsKICAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CiAKKyAgREVCVUdBU1NFUlQoZHN0KTsKKwogICAvKiBEdXBsaWNhdGUgY29udGVudC4gKi8KICAgc3dpdGNoKHNyYy0+a2luZCkgewogICBjYXNlIE1JTUVLSU5EX05PTkU6CkBAIC0xMTg0LDIwICsxMjgxLDE4IEBACiAgICAgfQogICB9CiAKLSAgLyogRHVwbGljYXRlIG90aGVyIGZpZWxkcy4gKi8KLSAgaWYoZHN0ICE9IE5VTEwpCisgIGlmKCFyZXMpIHsKKyAgICAvKiBEdXBsaWNhdGUgb3RoZXIgZmllbGRzLiAqLwogICAgIGRzdC0+ZW5jb2RlciA9IHNyYy0+ZW5jb2RlcjsKLSAgZWxzZQotICAgIHJlcyA9IENVUkxFX1dSSVRFX0VSUk9SOwotICBpZighcmVzKQogICAgIHJlcyA9IGN1cmxfbWltZV90eXBlKGRzdCwgc3JjLT5taW1ldHlwZSk7CisgIH0KICAgaWYoIXJlcykKICAgICByZXMgPSBjdXJsX21pbWVfbmFtZShkc3QsIHNyYy0+bmFtZSk7CiAgIGlmKCFyZXMpCiAgICAgcmVzID0gY3VybF9taW1lX2ZpbGVuYW1lKGRzdCwgc3JjLT5maWxlbmFtZSk7CiAKICAgLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJvbGxiYWNrLiAqLwotICBpZihyZXMgJiYgZHN0KQorICBpZihyZXMpCiAgICAgQ3VybF9taW1lX2NsZWFucGFydChkc3QpOwogCiAgIHJldHVybiByZXM7CkBAIC0xMjM4LDYgKzEzMzMsNyBAQAogewogICBtZW1zZXQoKGNoYXIgKikgcGFydCwgMCwgc2l6ZW9mKCpwYXJ0KSk7CiAgIHBhcnQtPmVhc3kgPSBlYXN5OworICBwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9IDE7IC8qIFN1Y2Nlc3NmdWwgcmVhZCBzdGF0dXMuICovCiAgIG1pbWVzZXRzdGF0ZSgmcGFydC0+c3RhdGUsIE1JTUVTVEFURV9CRUdJTiwgTlVMTCk7CiB9CiAKQEAgLTEzMjMsMTEgKzE0MTksMTIgQEAKIAogICAgIGlmKGRhdGFzaXplKQogICAgICAgbWVtY3B5KHBhcnQtPmRhdGEsIGRhdGEsIGRhdGFzaXplKTsKLSAgICBwYXJ0LT5kYXRhW2RhdGFzaXplXSA9ICdcMCc7ICAgIC8qIFNldCBhIG51bCB0ZXJtaW5hdG9yIGFzIHNlbnRpbmVsLiAqLworICAgIHBhcnQtPmRhdGFbZGF0YXNpemVdID0gJ1wwJzsgICAgLyogU2V0IGEgbnVsbCB0ZXJtaW5hdG9yIGFzIHNlbnRpbmVsLiAqLwogCiAgICAgcGFydC0+cmVhZGZ1bmMgPSBtaW1lX21lbV9yZWFkOwogICAgIHBhcnQtPnNlZWtmdW5jID0gbWltZV9tZW1fc2VlazsKICAgICBwYXJ0LT5mcmVlZnVuYyA9IG1pbWVfbWVtX2ZyZWU7CisgICAgcGFydC0+ZmxhZ3MgfD0gTUlNRV9GQVNUX1JFQUQ7CiAgICAgcGFydC0+a2luZCA9IE1JTUVLSU5EX0RBVEE7CiAgIH0KIApAQCAtMTQwNSw3ICsxNTAyLDcgQEAKIENVUkxjb2RlIGN1cmxfbWltZV9lbmNvZGVyKGN1cmxfbWltZXBhcnQgKnBhcnQsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7Ci0gIGNvbnN0IG1pbWVfZW5jb2RlciAqbWVwOworICBjb25zdCBzdHJ1Y3QgbWltZV9lbmNvZGVyICptZXA7CiAKICAgaWYoIXBhcnQpCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1MDIsNyArMTU5OSw3IEBACiAgICAgfQogCiAgICAgc3VicGFydHMtPnBhcmVudCA9IHBhcnQ7Ci0gICAgcGFydC0+cmVhZGZ1bmMgPSBtaW1lX3N1YnBhcnRzX3JlYWQ7CisgICAgLyogU3VicGFydHMgYXJlIHByb2Nlc3NlZCBpbnRlcm5hbGx5OiBubyByZWFkIGNhbGxiYWNrLiAqLwogICAgIHBhcnQtPnNlZWtmdW5jID0gbWltZV9zdWJwYXJ0c19zZWVrOwogICAgIHBhcnQtPmZyZWVmdW5jID0gdGFrZV9vd25lcnNoaXA/IG1pbWVfc3VicGFydHNfZnJlZTogbWltZV9zdWJwYXJ0c191bmJpbmQ7CiAgICAgcGFydC0+YXJnID0gc3VicGFydHM7CkBAIC0xNTI0LDkgKzE2MjEsMjMgQEAKIHNpemVfdCBDdXJsX21pbWVfcmVhZChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgbml0ZW1zLCB2b2lkICppbnN0cmVhbSkKIHsKICAgY3VybF9taW1lcGFydCAqcGFydCA9IChjdXJsX21pbWVwYXJ0ICopIGluc3RyZWFtOworICBzaXplX3QgcmV0OworICBib29sIGhhc3JlYWQ7CiAKICAgKHZvaWQpIHNpemU7ICAgLyogQWx3YXlzIDEuICovCi0gIHJldHVybiByZWFkYmFja19wYXJ0KHBhcnQsIGJ1ZmZlciwgbml0ZW1zKTsKKworICBkbyB7CisgICAgaGFzcmVhZCA9IEZBTFNFOworICAgIHJldCA9IHJlYWRiYWNrX3BhcnQocGFydCwgYnVmZmVyLCBuaXRlbXMsICZoYXNyZWFkKTsKKyAgICAvKgorICAgICAqIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlIHRvIGdldCBzb21lIGRhdGEgd2l0aG91dCBjYWxsaW5nIG1vcmUgdGhhbgorICAgICAqIG9uZSByZWFkIGNhbGxiYWNrIChwcm9iYWJseSBiZWNhdXNlIGEgY29udGVudCBlbmNvZGVyIGlzIG5vdCBhYmxlIHRvCisgICAgICogZGVsaXZlciBhIG5ldyBidW5jaCBmb3IgdGhlIGZldyBkYXRhIGFjY3VtdWxhdGVkIHNvIGZhciksIGZvcmNlIGFub3RoZXIKKyAgICAgKiByZWFkIHVudGlsIHdlIGdldCBlbm91Z2ggZGF0YSBvciBhIHNwZWNpYWwgZXhpdCBjb2RlLgorICAgICAqLworICB9IHdoaWxlKHJldCA9PSBTVE9QX0ZJTExJTkcpOworCisgIHJldHVybiByZXQ7CiB9CiAKIC8qIFJld2luZCBtaW1lIHN0cmVhbS4gKi8KQEAgLTE2NjcsNiArMTc3OCwyMyBAQAogICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGJvb2wgY29udGVudF90eXBlX21hdGNoKGNvbnN0IGNoYXIgKmNvbnRlbnR0eXBlLCBjb25zdCBjaGFyICp0YXJnZXQpCit7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4odGFyZ2V0KTsKKworICBpZihjb250ZW50dHlwZSAmJiBzdHJuY2FzZWNvbXBhcmUoY29udGVudHR5cGUsIHRhcmdldCwgbGVuKSkKKyAgICBzd2l0Y2goY29udGVudHR5cGVbbGVuXSkgeworICAgIGNhc2UgJ1wwJzoKKyAgICBjYXNlICdcdCc6CisgICAgY2FzZSAnXHInOgorICAgIGNhc2UgJ1xuJzoKKyAgICBjYXNlICcgJzoKKyAgICBjYXNlICc7JzoKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCiBDVVJMY29kZSBDdXJsX21pbWVfcHJlcGFyZV9oZWFkZXJzKGN1cmxfbWltZXBhcnQgKnBhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRlbnR0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaXNwb3NpdGlvbiwKQEAgLTE3MTgsNyArMTg0Niw3IEBACiAgICAgICBib3VuZGFyeSA9IG1pbWUtPmJvdW5kYXJ5OwogICB9CiAgIGVsc2UgaWYoY29udGVudHR5cGUgJiYgIWN1c3RvbWN0ICYmCi0gICAgICAgICAgc3RyY2FzZWNvbXBhcmUoY29udGVudHR5cGUsICJ0ZXh0L3BsYWluIikpCisgICAgICAgICAgY29udGVudF90eXBlX21hdGNoKGNvbnRlbnR0eXBlLCAidGV4dC9wbGFpbiIpKQogICAgIGlmKHN0cmF0ZWd5ID09IE1JTUVTVFJBVEVHWV9NQUlMIHx8ICFwYXJ0LT5maWxlbmFtZSkKICAgICAgIGNvbnRlbnR0eXBlID0gTlVMTDsKIApAQCAtMTc5NCw3ICsxOTIyLDcgQEAKICAgICBjdXJsX21pbWVwYXJ0ICpzdWJwYXJ0OwogCiAgICAgZGlzcG9zaXRpb24gPSBOVUxMOwotICAgIGlmKHN0cmNhc2Vjb21wYXJlKGNvbnRlbnR0eXBlLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpKQorICAgIGlmKGNvbnRlbnRfdHlwZV9tYXRjaChjb250ZW50dHlwZSwgIm11bHRpcGFydC9mb3JtLWRhdGEiKSkKICAgICAgIGRpc3Bvc2l0aW9uID0gImZvcm0tZGF0YSI7CiAgICAgZm9yKHN1YnBhcnQgPSBtaW1lLT5maXJzdHBhcnQ7IHN1YnBhcnQ7IHN1YnBhcnQgPSBzdWJwYXJ0LT5uZXh0cGFydCkgewogICAgICAgcmV0ID0gQ3VybF9taW1lX3ByZXBhcmVfaGVhZGVycyhzdWJwYXJ0LCBOVUxMLCBkaXNwb3NpdGlvbiwgc3RyYXRlZ3kpOwpAQCAtMTgwNSw2ICsxOTMzLDI2IEBACiAgIHJldHVybiByZXQ7CiB9CiAKKy8qIFJlY3Vyc2l2ZWx5IHJlc2V0IHBhdXNlZCBzdGF0dXMgaW4gdGhlIGdpdmVuIHBhcnQuICovCit2b2lkIEN1cmxfbWltZV91bnBhdXNlKGN1cmxfbWltZXBhcnQgKnBhcnQpCit7CisgIGlmKHBhcnQpIHsKKyAgICBpZihwYXJ0LT5sYXN0cmVhZHN0YXR1cyA9PSBDVVJMX1JFQURGVU5DX1BBVVNFKQorICAgICAgcGFydC0+bGFzdHJlYWRzdGF0dXMgPSAxOyAvKiBTdWNjZXNzZnVsIHJlYWQgc3RhdHVzLiAqLworICAgIGlmKHBhcnQtPmtpbmQgPT0gTUlNRUtJTkRfTVVMVElQQVJUKSB7CisgICAgICBjdXJsX21pbWUgKm1pbWUgPSAoY3VybF9taW1lICopIHBhcnQtPmFyZzsKKworICAgICAgaWYobWltZSkgeworICAgICAgICBjdXJsX21pbWVwYXJ0ICpzdWJwYXJ0OworCisgICAgICAgIGZvcihzdWJwYXJ0ID0gbWltZS0+Zmlyc3RwYXJ0OyBzdWJwYXJ0OyBzdWJwYXJ0ID0gc3VicGFydC0+bmV4dHBhcnQpCisgICAgICAgICAgQ3VybF9taW1lX3VucGF1c2Uoc3VicGFydCk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKwogI2Vsc2UgLyogIUNVUkxfRElTQUJMRV9IVFRQIHx8ICFDVVJMX0RJU0FCTEVfU01UUCB8fCAhQ1VSTF9ESVNBQkxFX0lNQVAgKi8KIAogLyogTWltZSBub3QgY29tcGlsZWQgaW46IGRlZmluZSBzdHVicyBmb3IgZXh0ZXJuYWxseS1yZWZlcmVuY2VkIGZ1bmN0aW9ucy4gKi8KQEAgLTE5MDEsNCArMjA0OSwxMSBAQAogICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOwogfQogCitDVVJMY29kZSBDdXJsX21pbWVfYWRkX2hlYWRlcihzdHJ1Y3QgY3VybF9zbGlzdCAqKnNscCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgICh2b2lkKXNscDsKKyAgKHZvaWQpZm10OworICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworfQorCiAjZW5kaWYgLyogaWYgZGlzYWJsZWQgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21pbWUuaAppbmRleCA0YzlhNWZiLi41MGI3ZWE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9taW1lLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbWltZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMSw2ICszMSw3IEBACiAvKiBQYXJ0IGZsYWdzLiAqLwogI2RlZmluZSBNSU1FX1VTRVJIRUFERVJTX09XTkVSICAoMSA8PCAwKQogI2RlZmluZSBNSU1FX0JPRFlfT05MWSAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBNSU1FX0ZBU1RfUkVBRCAgICAgICAgICAoMSA8PCAyKQogCiAjZGVmaW5lIEZJTEVfQ09OVEVOVFRZUEVfREVGQVVMVCAgICAgICAgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIKICNkZWZpbmUgTVVMVElQQVJUX0NPTlRFTlRUWVBFX0RFRkFVTFQgICAibXVsdGlwYXJ0L21peGVkIgpAQCAtNjgsNDMgKzY5LDQzIEBACiB9OwogCiAvKiBDb250ZW50IHRyYW5zZmVyIGVuY29kZXIuICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgbWltZV9lbmNvZGVyIHsKICAgY29uc3QgY2hhciAqICAgbmFtZTsgICAgICAgICAgLyogRW5jb2RpbmcgbmFtZS4gKi8KICAgc2l6ZV90ICAgICAgICAgKCplbmNvZGVmdW5jKShjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBib29sIGF0ZW9mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfbWltZXBhcnQgKnBhcnQpOyAgLyogRW5jb2RlZCByZWFkLiAqLwogICBjdXJsX29mZl90ICAgICAoKnNpemVmdW5jKShjdXJsX21pbWVwYXJ0ICpwYXJ0KTsgIC8qIEVuY29kZWQgc2l6ZS4gKi8KLX0gIG1pbWVfZW5jb2RlcjsKK307CiAKIC8qIENvbnRlbnQgdHJhbnNmZXIgZW5jb2RlciBzdGF0ZS4gKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgewogICBzaXplX3QgICAgICAgICBwb3M7ICAgICAgICAgICAvKiBQb3NpdGlvbiBvbiBvdXRwdXQgbGluZS4gKi8KICAgc2l6ZV90ICAgICAgICAgYnVmYmVnOyAgICAgICAgLyogTmV4dCBkYXRhIGluZGV4IGluIGlucHV0IGJ1ZmZlci4gKi8KICAgc2l6ZV90ICAgICAgICAgYnVmZW5kOyAgICAgICAgLyogRmlyc3QgdW51c2VkIGJ5dGUgaW5kZXggaW4gaW5wdXQgYnVmZmVyLiAqLwogICBjaGFyICAgICAgICAgICBidWZbRU5DT0RJTkdfQlVGRkVSX1NJWkVdOyAvKiBJbnB1dCBidWZmZXIuICovCi19ICBtaW1lX2VuY29kZXJfc3RhdGU7Cit9OwogCiAvKiBNaW1lIHJlYWRiYWNrIHN0YXRlLiAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IG1pbWVfc3RhdGUgewogICBlbnVtIG1pbWVzdGF0ZSBzdGF0ZTsgICAgICAgLyogQ3VycmVudCBzdGF0ZSB0b2tlbi4gKi8KICAgdm9pZCAqcHRyOyAgICAgICAgICAgICAgICAgIC8qIFN0YXRlLWRlcGVuZGVudCBwb2ludGVyLiAqLwotICBzaXplX3Qgb2Zmc2V0OyAgICAgICAgICAgICAgLyogU3RhdGUtZGVwZW5kZW50IG9mZnNldC4gKi8KLX0gIG1pbWVfc3RhdGU7CisgIGN1cmxfb2ZmX3Qgb2Zmc2V0OyAgICAgICAgICAvKiBTdGF0ZS1kZXBlbmRlbnQgb2Zmc2V0LiAqLworfTsKIAogLyogbWluaW11bSBidWZmZXIgc2l6ZSBmb3IgdGhlIGJvdW5kYXJ5IHN0cmluZyAqLwogI2RlZmluZSBNSU1FX0JPVU5EQVJZX0xFTiAoMjQgKyBNSU1FX1JBTkRfQk9VTkRBUllfQ0hBUlMgKyAxKQogCiAvKiBBIG1pbWUgbXVsdGlwYXJ0LiAqLwotc3RydWN0IGN1cmxfbWltZV9zIHsKK3N0cnVjdCBjdXJsX21pbWUgewogICBzdHJ1Y3QgQ3VybF9lYXN5ICplYXN5OyAgICAgICAgICAvKiBUaGUgYXNzb2NpYXRlZCBlYXN5IGhhbmRsZS4gKi8KICAgY3VybF9taW1lcGFydCAqcGFyZW50OyAgICAgICAgICAgLyogUGFyZW50IHBhcnQuICovCiAgIGN1cmxfbWltZXBhcnQgKmZpcnN0cGFydDsgICAgICAgIC8qIEZpcnN0IHBhcnQuICovCiAgIGN1cmxfbWltZXBhcnQgKmxhc3RwYXJ0OyAgICAgICAgIC8qIExhc3QgcGFydC4gKi8KICAgY2hhciBib3VuZGFyeVtNSU1FX0JPVU5EQVJZX0xFTl07IC8qIFRoZSBwYXJ0IGJvdW5kYXJ5LiAqLwotICBtaW1lX3N0YXRlIHN0YXRlOyAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHJlYWRiYWNrIHN0YXRlLiAqLworICBzdHJ1Y3QgbWltZV9zdGF0ZSBzdGF0ZTsgICAgICAgICAvKiBDdXJyZW50IHJlYWRiYWNrIHN0YXRlLiAqLwogfTsKIAogLyogQSBtaW1lIHBhcnQuICovCi1zdHJ1Y3QgY3VybF9taW1lcGFydF9zIHsKK3N0cnVjdCBjdXJsX21pbWVwYXJ0IHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZWFzeTsgICAgICAgICAgLyogVGhlIGFzc29jaWF0ZWQgZWFzeSBoYW5kbGUuICovCiAgIGN1cmxfbWltZSAqcGFyZW50OyAgICAgICAgICAgICAgIC8qIFBhcmVudCBtaW1lIHN0cnVjdHVyZS4gKi8KICAgY3VybF9taW1lcGFydCAqbmV4dHBhcnQ7ICAgICAgICAgLyogRm9yd2FyZCBsaW5rZWQgbGlzdC4gKi8KQEAgLTEyMiwzMCArMTIzLDM1IEBACiAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgbmFtZS4gKi8KICAgY3VybF9vZmZfdCBkYXRhc2l6ZTsgICAgICAgICAgICAgLyogRXhwZWN0ZWQgZGF0YSBzaXplLiAqLwogICB1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAvKiBGbGFncy4gKi8KLSAgbWltZV9zdGF0ZSBzdGF0ZTsgICAgICAgICAgICAgICAgLyogQ3VycmVudCByZWFkYmFjayBzdGF0ZS4gKi8KLSAgY29uc3QgbWltZV9lbmNvZGVyICplbmNvZGVyOyAgICAgLyogQ29udGVudCBkYXRhIGVuY29kZXIuICovCi0gIG1pbWVfZW5jb2Rlcl9zdGF0ZSBlbmNzdGF0ZTsgICAgIC8qIERhdGEgZW5jb2RlciBzdGF0ZS4gKi8KKyAgc3RydWN0IG1pbWVfc3RhdGUgc3RhdGU7ICAgICAgICAgLyogQ3VycmVudCByZWFkYmFjayBzdGF0ZS4gKi8KKyAgY29uc3Qgc3RydWN0IG1pbWVfZW5jb2RlciAqZW5jb2RlcjsgLyogQ29udGVudCBkYXRhIGVuY29kZXIuICovCisgIHN0cnVjdCBtaW1lX2VuY29kZXJfc3RhdGUgZW5jc3RhdGU7IC8qIERhdGEgZW5jb2RlciBzdGF0ZS4gKi8KKyAgc2l6ZV90IGxhc3RyZWFkc3RhdHVzOyAgICAgICAgICAgLyogTGFzdCByZWFkIGNhbGxiYWNrIHJldHVybmVkIHN0YXR1cy4gKi8KIH07CiAKLSNpZiAoIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9NSU1FKSkgfHwgXAorQ1VSTGNvZGUgQ3VybF9taW1lX2FkZF9oZWFkZXIoc3RydWN0IGN1cmxfc2xpc3QgKipzbHAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2lmICghZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX01JTUUpKSB8fCAgICAgXAogICAhZGVmaW5lZChDVVJMX0RJU0FCTEVfU01UUCkgfHwgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0lNQVApCiAKIC8qIFByb3RvdHlwZXMuICovCi12b2lkIEN1cmxfbWltZV9pbml0cGFydChjdXJsX21pbWVwYXJ0ICpwYXJ0LCBzdHJ1Y3QgQ3VybF9lYXN5ICplYXN5KTsKLXZvaWQgQ3VybF9taW1lX2NsZWFucGFydChjdXJsX21pbWVwYXJ0ICpwYXJ0KTsKLUNVUkxjb2RlIEN1cmxfbWltZV9kdXBwYXJ0KGN1cmxfbWltZXBhcnQgKmRzdCwgY29uc3QgY3VybF9taW1lcGFydCAqc3JjKTsKLUNVUkxjb2RlIEN1cmxfbWltZV9zZXRfc3VicGFydHMoY3VybF9taW1lcGFydCAqcGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9taW1lICpzdWJwYXJ0cywgaW50IHRha2Vfb3duZXJzaGlwKTsKLUNVUkxjb2RlIEN1cmxfbWltZV9wcmVwYXJlX2hlYWRlcnMoY3VybF9taW1lcGFydCAqcGFydCwKK3ZvaWQgQ3VybF9taW1lX2luaXRwYXJ0KHN0cnVjdCBjdXJsX21pbWVwYXJ0ICpwYXJ0LCBzdHJ1Y3QgQ3VybF9lYXN5ICplYXN5KTsKK3ZvaWQgQ3VybF9taW1lX2NsZWFucGFydChzdHJ1Y3QgY3VybF9taW1lcGFydCAqcGFydCk7CitDVVJMY29kZSBDdXJsX21pbWVfZHVwcGFydChzdHJ1Y3QgY3VybF9taW1lcGFydCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VybF9taW1lcGFydCAqc3JjKTsKK0NVUkxjb2RlIEN1cmxfbWltZV9zZXRfc3VicGFydHMoc3RydWN0IGN1cmxfbWltZXBhcnQgKnBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX21pbWUgKnN1YnBhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFrZV9vd25lcnNoaXApOworQ1VSTGNvZGUgQ3VybF9taW1lX3ByZXBhcmVfaGVhZGVycyhzdHJ1Y3QgY3VybF9taW1lcGFydCAqcGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGVudHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpc3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1pbWVzdHJhdGVneSBzdHJhdGVneSk7Ci1jdXJsX29mZl90IEN1cmxfbWltZV9zaXplKGN1cmxfbWltZXBhcnQgKnBhcnQpOworY3VybF9vZmZfdCBDdXJsX21pbWVfc2l6ZShzdHJ1Y3QgY3VybF9taW1lcGFydCAqcGFydCk7CiBzaXplX3QgQ3VybF9taW1lX3JlYWQoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5pdGVtcywKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0cmVhbSk7Ci1DVVJMY29kZSBDdXJsX21pbWVfcmV3aW5kKGN1cmxfbWltZXBhcnQgKnBhcnQpOwotQ1VSTGNvZGUgQ3VybF9taW1lX2FkZF9oZWFkZXIoc3RydWN0IGN1cmxfc2xpc3QgKipzbHAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK0NVUkxjb2RlIEN1cmxfbWltZV9yZXdpbmQoc3RydWN0IGN1cmxfbWltZXBhcnQgKnBhcnQpOwogY29uc3QgY2hhciAqQ3VybF9taW1lX2NvbnRlbnR0eXBlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3ZvaWQgQ3VybF9taW1lX3VucGF1c2Uoc3RydWN0IGN1cmxfbWltZXBhcnQgKnBhcnQpOwogCiAjZWxzZQogLyogaWYgZGlzYWJsZWQgKi8KQEAgLTE1Nyw3ICsxNjMsNyBAQAogI2RlZmluZSBDdXJsX21pbWVfc2l6ZSh4KSAoY3VybF9vZmZfdCkgLTEKICNkZWZpbmUgQ3VybF9taW1lX3JlYWQgTlVMTAogI2RlZmluZSBDdXJsX21pbWVfcmV3aW5kKHgpICgodm9pZCl4LCBDVVJMRV9OT1RfQlVJTFRfSU4pCi0jZGVmaW5lIEN1cmxfbWltZV9hZGRfaGVhZGVyKHgseSwuLi4pIENVUkxFX05PVF9CVUlMVF9JTgorI2RlZmluZSBDdXJsX21pbWVfdW5wYXVzZSh4KQogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbXByaW50Zi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXByaW50Zi5jCmluZGV4IGUxOTA5MzYuLjYzYzlkMTEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21wcmludGYuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9tcHJpbnRmLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM2LDYgKzM2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorI2luY2x1ZGUgImR5bmJ1Zi5oIgogI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgogCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKQEAgLTEwNCw3ICsxMDUsNyBAQAogICAgICAgZG9uZSsrOyBcCiAgICAgZWxzZSBcCiAgICAgIHJldHVybiBkb25lOyAvKiByZXR1cm4gaW1tZWRpYXRlbHkgb24gZmFpbHVyZSAqLyBcCi0gIH0gV0hJTEVfRkFMU0UKKyAgfSB3aGlsZSgwKQogCiAvKiBEYXRhIHR5cGUgdG8gcmVhZCBmcm9tIHRoZSBhcmdsaXN0ICovCiB0eXBlZGVmIGVudW0gewpAQCAtMTQ1LDcgKzE0Niw3IEBACiAgIEZMQUdTX0ZMT0FURyAgICAgPSAxPDwxOSAgLyogJWcgb3IgJUcgKi8KIH07CiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCB2YV9zdGFjayB7CiAgIEZvcm1hdFR5cGUgdHlwZTsKICAgaW50IGZsYWdzOwogICBsb25nIHdpZHRoOyAgICAgLyogd2lkdGggT1Igd2lkdGggcGFyYW1ldGVyIG51bWJlciAqLwpAQCAtMTU5LDcgKzE2MCw3IEBACiAgICAgfSBudW07CiAgICAgZG91YmxlIGRudW07CiAgIH0gZGF0YTsKLX0gdmFfc3RhY2tfdDsKK307CiAKIHN0cnVjdCBuc3ByaW50ZiB7CiAgIGNoYXIgKmJ1ZmZlcjsKQEAgLTE2OCwxMSArMTY5LDkgQEAKIH07CiAKIHN0cnVjdCBhc3ByaW50ZiB7Ci0gIGNoYXIgKmJ1ZmZlcjsgLyogYWxsb2NhdGVkIGJ1ZmZlciAqLwotICBzaXplX3QgbGVuOyAgIC8qIGxlbmd0aCBvZiBzdHJpbmcgKi8KLSAgc2l6ZV90IGFsbG9jOyAvKiBsZW5ndGggb2YgYWxsb2MgKi8KLSAgaW50IGZhaWw7ICAgICAvKiAoIT0gMCkgaWYgYW4gYWxsb2MgaGFzIGZhaWxlZCBhbmQgdGh1cwotICAgICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgaXMgbm90IHRoZSBjb21wbGV0ZSBkYXRhICovCisgIHN0cnVjdCBkeW5idWYgYjsKKyAgYm9vbCBmYWlsOyAvKiBpZiBhbiBhbGxvYyBoYXMgZmFpbGVkIGFuZCB0aHVzIHRoZSBvdXRwdXQgaXMgbm90IHRoZSBjb21wbGV0ZQorICAgICAgICAgICAgICAgIGRhdGEgKi8KIH07CiAKIHN0YXRpYyBsb25nIGRwcmludGZfRG9sbGFyU3RyaW5nKGNoYXIgKmlucHV0LCBjaGFyICoqZW5kKQpAQCAtMjI0LDggKzIyMyw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBkcHJpbnRmX1Bhc3MxKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfc3RhY2tfdCAqdnRvLCBjaGFyICoqZW5kcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJnbGlzdCkKK3N0YXRpYyBpbnQgZHByaW50Zl9QYXNzMShjb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCB2YV9zdGFjayAqdnRvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiplbmRwb3MsIHZhX2xpc3QgYXJnbGlzdCkKIHsKICAgY2hhciAqZm10ID0gKGNoYXIgKilmb3JtYXQ7CiAgIGludCBwYXJhbV9udW0gPSAwOwpAQCAtNTcxLDEzICs1NzAsMTEgQEAKICAgbG9uZyBwYXJhbTsgLyogY3VycmVudCBwYXJhbWV0ZXIgdG8gcmVhZCAqLwogICBsb25nIHBhcmFtX251bSA9IDA7IC8qIHBhcmFtZXRlciBjb3VudGVyICovCiAKLSAgdmFfc3RhY2tfdCB2dG9bTUFYX1BBUkFNRVRFUlNdOworICBzdHJ1Y3QgdmFfc3RhY2sgdnRvW01BWF9QQVJBTUVURVJTXTsKICAgY2hhciAqZW5kcG9zW01BWF9QQVJBTUVURVJTXTsKICAgY2hhciAqKmVuZDsKLQogICBjaGFyIHdvcmtbQlVGRlNJWkVdOwotCi0gIHZhX3N0YWNrX3QgKnA7CisgIHN0cnVjdCB2YV9zdGFjayAqcDsKIAogICAvKiAnd29ya2VuZCcgcG9pbnRzIHRvIHRoZSBmaW5hbCBidWZmZXIgYnl0ZSBwb3NpdGlvbiwgYnV0IHdpdGggYW4gZXh0cmEKICAgICAgYnl0ZSBhcyBtYXJnaW4gdG8gYXZvaWQgdGhlIChmYWxzZT8pIHdhcm5pbmcgQ292ZXJpdHkgZ2l2ZXMgdXMKQEAgLTEwMzEsMzUgKzEwMjgsMTAgQEAKICAgc3RydWN0IGFzcHJpbnRmICppbmZvcCA9IChzdHJ1Y3QgYXNwcmludGYgKilkYXRhOwogICB1bnNpZ25lZCBjaGFyIG91dGMgPSAodW5zaWduZWQgY2hhcilvdXRwdXQ7CiAKLSAgaWYoIWluZm9wLT5idWZmZXIpIHsKLSAgICBpbmZvcC0+YnVmZmVyID0gbWFsbG9jKDMyKTsKLSAgICBpZighaW5mb3AtPmJ1ZmZlcikgewotICAgICAgaW5mb3AtPmZhaWwgPSAxOwotICAgICAgcmV0dXJuIC0xOyAvKiBmYWlsICovCi0gICAgfQotICAgIGluZm9wLT5hbGxvYyA9IDMyOwotICAgIGluZm9wLT5sZW4gPSAwOworICBpZihDdXJsX2R5bl9hZGRuKCZpbmZvcC0+YiwgJm91dGMsIDEpKSB7CisgICAgaW5mb3AtPmZhaWwgPSAxOworICAgIHJldHVybiAtMTsgLyogZmFpbCAqLwogICB9Ci0gIGVsc2UgaWYoaW5mb3AtPmxlbiArIDEgPj0gaW5mb3AtPmFsbG9jKSB7Ci0gICAgY2hhciAqbmV3cHRyID0gTlVMTDsKLSAgICBzaXplX3QgbmV3c2l6ZSA9IGluZm9wLT5hbGxvYyoyOwotCi0gICAgLyogZGV0ZWN0IHdyYXAtYXJvdW5kIG9yIG90aGVyIG92ZXJmbG93IHByb2JsZW1zICovCi0gICAgaWYobmV3c2l6ZSA+IGluZm9wLT5hbGxvYykKLSAgICAgIG5ld3B0ciA9IHJlYWxsb2MoaW5mb3AtPmJ1ZmZlciwgbmV3c2l6ZSk7Ci0KLSAgICBpZighbmV3cHRyKSB7Ci0gICAgICBpbmZvcC0+ZmFpbCA9IDE7Ci0gICAgICByZXR1cm4gLTE7IC8qIGZhaWwgKi8KLSAgICB9Ci0gICAgaW5mb3AtPmJ1ZmZlciA9IG5ld3B0cjsKLSAgICBpbmZvcC0+YWxsb2MgPSBuZXdzaXplOwotICB9Ci0KLSAgaW5mb3AtPmJ1ZmZlclsgaW5mb3AtPmxlbiBdID0gb3V0YzsKLQotICBpbmZvcC0+bGVuKys7Ci0KICAgcmV0dXJuIG91dGM7IC8qIGZwdXRjKCkgcmV0dXJucyBsaWtlIHRoaXMgb24gc3VjY2VzcyAqLwogfQogCkBAIC0xMDY4LDI0ICsxMDQwLDE4IEBACiAgIHZhX2xpc3QgYXBfc2F2ZTsgLyogYXJndW1lbnQgcG9pbnRlciAqLwogICBpbnQgcmV0Y29kZTsKICAgc3RydWN0IGFzcHJpbnRmIGluZm87Ci0KLSAgaW5mby5idWZmZXIgPSBOVUxMOwotICBpbmZvLmxlbiA9IDA7Ci0gIGluZm8uYWxsb2MgPSAwOworICBDdXJsX2R5bl9pbml0KCZpbmZvLmIsIERZTl9BUFJJTlRGKTsKICAgaW5mby5mYWlsID0gMDsKIAogICB2YV9zdGFydChhcF9zYXZlLCBmb3JtYXQpOwogICByZXRjb2RlID0gZHByaW50Zl9mb3JtYXRmKCZpbmZvLCBhbGxvY19hZGRieXRlciwgZm9ybWF0LCBhcF9zYXZlKTsKICAgdmFfZW5kKGFwX3NhdmUpOwogICBpZigoLTEgPT0gcmV0Y29kZSkgfHwgaW5mby5mYWlsKSB7Ci0gICAgaWYoaW5mby5hbGxvYykKLSAgICAgIGZyZWUoaW5mby5idWZmZXIpOworICAgIEN1cmxfZHluX2ZyZWUoJmluZm8uYik7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KLSAgaWYoaW5mby5hbGxvYykgewotICAgIGluZm8uYnVmZmVyW2luZm8ubGVuXSA9IDA7IC8qIHdlIHRlcm1pbmF0ZSB0aGlzIHdpdGggYSB6ZXJvIGJ5dGUgKi8KLSAgICByZXR1cm4gaW5mby5idWZmZXI7Ci0gIH0KKyAgaWYoQ3VybF9keW5fbGVuKCZpbmZvLmIpKQorICAgIHJldHVybiBDdXJsX2R5bl9wdHIoJmluZm8uYik7CiAgIHJldHVybiBzdHJkdXAoIiIpOwogfQogCkBAIC0xMDkzLDIzICsxMDU5LDE2IEBACiB7CiAgIGludCByZXRjb2RlOwogICBzdHJ1Y3QgYXNwcmludGYgaW5mbzsKLQotICBpbmZvLmJ1ZmZlciA9IE5VTEw7Ci0gIGluZm8ubGVuID0gMDsKLSAgaW5mby5hbGxvYyA9IDA7CisgIEN1cmxfZHluX2luaXQoJmluZm8uYiwgRFlOX0FQUklOVEYpOwogICBpbmZvLmZhaWwgPSAwOwogCiAgIHJldGNvZGUgPSBkcHJpbnRmX2Zvcm1hdGYoJmluZm8sIGFsbG9jX2FkZGJ5dGVyLCBmb3JtYXQsIGFwX3NhdmUpOwogICBpZigoLTEgPT0gcmV0Y29kZSkgfHwgaW5mby5mYWlsKSB7Ci0gICAgaWYoaW5mby5hbGxvYykKLSAgICAgIGZyZWUoaW5mby5idWZmZXIpOworICAgIEN1cmxfZHluX2ZyZWUoJmluZm8uYik7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KLQotICBpZihpbmZvLmFsbG9jKSB7Ci0gICAgaW5mby5idWZmZXJbaW5mby5sZW5dID0gMDsgLyogd2UgdGVybWluYXRlIHRoaXMgd2l0aCBhIHplcm8gYnl0ZSAqLwotICAgIHJldHVybiBpbmZvLmJ1ZmZlcjsKLSAgfQorICBpZihDdXJsX2R5bl9sZW4oJmluZm8uYikpCisgICAgcmV0dXJuIEN1cmxfZHluX3B0cigmaW5mby5iKTsKICAgcmV0dXJuIHN0cmR1cCgiIik7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL21xdHQuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21xdHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmY0NDE2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXF0dC5jCkBAIC0wLDAgKzEsNjI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTksIEJqw7ZybiBTdGVuYmVyZywgPGJqb3JuQGhheHguc2U+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIENVUkxfRU5BQkxFX01RVFQKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJtcXR0LmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAiZXNjYXBlLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgInJhbmQuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBNUVRUX01TR19DT05ORUNUICAgMHgxMAorI2RlZmluZSBNUVRUX01TR19DT05OQUNLICAgMHgyMAorI2RlZmluZSBNUVRUX01TR19QVUJMSVNIICAgMHgzMAorI2RlZmluZSBNUVRUX01TR19TVUJTQ1JJQkUgMHg4MgorI2RlZmluZSBNUVRUX01TR19TVUJBQ0sgICAgMHg5MAorI2RlZmluZSBNUVRUX01TR19ESVNDT05ORUNUIDB4ZTAKKworI2RlZmluZSBNUVRUX0NPTk5BQ0tfTEVOIDIKKyNkZWZpbmUgTVFUVF9TVUJBQ0tfTEVOIDMKKyNkZWZpbmUgTVFUVF9DTElFTlRJRF9MRU4gMTIgLyogImN1cmwwMTIzYWJjZCIgKi8KKworLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIGludCBtcXR0X2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrKTsKK3N0YXRpYyBDVVJMY29kZSBtcXR0X3NldHVwX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworLyoKKyAqIE1RVFQgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9tcXR0ID0geworICAiTVFUVCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgbXF0dF9zZXR1cF9jb25uLCAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBtcXR0X2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIG1xdHRfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgbXF0dF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX01RVFQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19NUVRULCAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9zZXR1cF9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgLyogYWxsb2NhdGUgdGhlIEhUVFAtc3BlY2lmaWMgc3RydWN0IGZvciB0aGUgQ3VybF9lYXN5LCBvbmx5IHRvIHN1cnZpdmUKKyAgICAgZHVyaW5nIHRoaXMgcmVxdWVzdCAqLworICBzdHJ1Y3QgTVFUVCAqbXE7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBERUJVR0FTU0VSVChkYXRhLT5yZXEucHJvdG9wID09IE5VTEwpOworCisgIG1xID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgTVFUVCkpOworICBpZighbXEpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIGRhdGEtPnJlcS5wcm90b3AgPSBtcTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBNUVRUICptcSA9IGRhdGEtPnJlcS5wcm90b3A7CisgIHNzaXplX3QgbjsKKyAgcmVzdWx0ID0gQ3VybF93cml0ZShjb25uLCBzb2NrZmQsIGJ1ZiwgbGVuLCAmbik7CisgIGlmKCFyZXN1bHQgJiYgZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfT1VULCBidWYsIChzaXplX3Qpbik7CisgIGlmKGxlbiAhPSAoc2l6ZV90KW4pIHsKKyAgICBzaXplX3QgbnNlbmQgPSBsZW4gLSBuOworICAgIGNoYXIgKnNlbmRsZWZ0b3ZlcnMgPSBDdXJsX21lbWR1cCgmYnVmW25dLCBuc2VuZCk7CisgICAgaWYoIXNlbmRsZWZ0b3ZlcnMpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBtcS0+c2VuZGxlZnRvdmVycyA9IHNlbmRsZWZ0b3ZlcnM7CisgICAgbXEtPm5zZW5kID0gbnNlbmQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogR2VuZXJpYyBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIG11bHRpIGludGVyZmFjZSB0byBmaWd1cmUgb3V0IHdoYXQgc29ja2V0KHMpCisgICB0byB3YWl0IGZvciBhbmQgZm9yIHdoYXQgYWN0aW9ucyBkdXJpbmcgdGhlIERPSU5HIGFuZCBQUk9UT0NPTk5FQ1QKKyAgIHN0YXRlcyAqLworc3RhdGljIGludCBtcXR0X2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgc29ja1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICByZXR1cm4gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgY29uc3Qgc2l6ZV90IGNsaWVudF9pZF9vZmZzZXQgPSAxNDsKKyAgY29uc3Qgc2l6ZV90IHBhY2tldGxlbiA9IGNsaWVudF9pZF9vZmZzZXQgKyBNUVRUX0NMSUVOVElEX0xFTjsKKyAgY2hhciBjbGllbnRfaWRbTVFUVF9DTElFTlRJRF9MRU4gKyAxXSA9ICJjdXJsIjsKKyAgY29uc3Qgc2l6ZV90IGN1cmxfbGVuID0gc3RybGVuKCJjdXJsIik7CisgIGNoYXIgcGFja2V0WzMyXSA9IHsKKyAgICBNUVRUX01TR19DT05ORUNULCAgLyogcGFja2V0IHR5cGUgKi8KKyAgICAweDAwLCAgICAgICAgICAgICAgLyogcmVtYWluaW5nIGxlbmd0aCAqLworICAgIDB4MDAsIDB4MDQsICAgICAgICAvKiBwcm90b2NvbCBsZW5ndGggKi8KKyAgICAnTScsJ1EnLCdUJywnVCcsICAgLyogcHJvdG9jb2wgbmFtZSAqLworICAgIDB4MDQsICAgICAgICAgICAgICAvKiBwcm90b2NvbCBsZXZlbCAqLworICAgIDB4MDIsICAgICAgICAgICAgICAvKiBDT05ORUNUIGZsYWc6IENsZWFuU2Vzc2lvbiAqLworICAgIDB4MDAsIDB4M2MsICAgICAgICAvKiBrZWVwLWFsaXZlIDAgPSBkaXNhYmxlZCAqLworICAgIDB4MDAsIDB4MDAgICAgICAgICAvKiBwYXlsb2FkMSBsZW5ndGggKi8KKyAgfTsKKyAgcGFja2V0WzFdID0gKHBhY2tldGxlbiAtIDIpICYgMHg3ZjsKKyAgcGFja2V0W2NsaWVudF9pZF9vZmZzZXQgLSAxXSA9IE1RVFRfQ0xJRU5USURfTEVOOworCisgIHJlc3VsdCA9IEN1cmxfcmFuZF9oZXgoY29ubi0+ZGF0YSwgKHVuc2lnbmVkIGNoYXIgKikmY2xpZW50X2lkW2N1cmxfbGVuXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNUVRUX0NMSUVOVElEX0xFTiAtIGN1cmxfbGVuICsgMSk7CisgIG1lbWNweSgmcGFja2V0W2NsaWVudF9pZF9vZmZzZXRdLCBjbGllbnRfaWQsIE1RVFRfQ0xJRU5USURfTEVOKTsKKyAgaW5mb2YoY29ubi0+ZGF0YSwgIlVzaW5nIGNsaWVudCBpZCAnJXMnXG4iLCBjbGllbnRfaWQpOworICBpZighcmVzdWx0KQorICAgIHJlc3VsdCA9IG1xdHRfc2VuZChjb25uLCBwYWNrZXQsIHBhY2tldGxlbik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgcmVzdWx0ID0gbXF0dF9zZW5kKGNvbm4sIChjaGFyICopIlx4ZTBceDAwIiwgMik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X3ZlcmlmeV9jb25uYWNrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICB1bnNpZ25lZCBjaGFyIHJlYWRidWZbTVFUVF9DT05OQUNLX0xFTl07CisgIHNzaXplX3QgbnJlYWQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCBzb2NrZmQsIChjaGFyICopcmVhZGJ1ZiwgTVFUVF9DT05OQUNLX0xFTiwgJm5yZWFkKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZmFpbDsKKworICBpZihkYXRhLT5zZXQudmVyYm9zZSkKKyAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgKGNoYXIgKilyZWFkYnVmLCAoc2l6ZV90KW5yZWFkKTsKKworICAvKiBmaXhtZSAqLworICBpZihucmVhZCA8IE1RVFRfQ09OTkFDS19MRU4pIHsKKyAgICByZXN1bHQgPSBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgLyogdmVyaWZ5IENPTk5BQ0sgKi8KKyAgaWYocmVhZGJ1ZlswXSAhPSAweDAwIHx8IHJlYWRidWZbMV0gIT0gMHgwMCkgeworICAgIGZhaWxmKGRhdGEsICJFeHBlY3RlZCAlMDJ4JTAyeCBidXQgZ290ICUwMnglMDJ4IiwKKyAgICAgICAgICAweDAwLCAweDAwLCByZWFkYnVmWzBdLCByZWFkYnVmWzFdKTsKKyAgICByZXN1bHQgPSBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CisgIH0KKworZmFpbDoKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIG1xdHRfZ2V0X3RvcGljKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqdG9waWMsIHNpemVfdCAqdG9waWNsZW4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBjaGFyICpwYXRoID0gY29ubi0+ZGF0YS0+c3RhdGUudXAucGF0aDsKKworICBpZihzdHJsZW4ocGF0aCkgPiAxKSB7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgcGF0aCArIDEsIDAsIHRvcGljLCB0b3BpY2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfTkFEQSk7CisgIH0KKyAgZWxzZSB7CisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIkVycm9yOiBObyB0b3BpYyBzcGVjaWZpZWQuIik7CisgICAgcmVzdWx0ID0gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBpbnQgbXF0dF9lbmNvZGVfbGVuKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyAgdW5zaWduZWQgY2hhciBlbmNvZGVkOworICBpbnQgaTsKKworICBmb3IoaSA9IDA7IChsZW4gPiAwKSAmJiAoaTw0KTsgaSsrKSB7CisgICAgZW5jb2RlZCA9IGxlbiAlIDB4ODA7CisgICAgbGVuIC89IDB4ODA7CisgICAgaWYobGVuKQorICAgICAgZW5jb2RlZCB8PSAweDgwOworICAgIGJ1ZltpXSA9IGVuY29kZWQ7CisgIH0KKworICByZXR1cm4gaTsKK30KKworc3RhdGljIENVUkxjb2RlIG1xdHRfc3Vic2NyaWJlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGNoYXIgKnRvcGljID0gTlVMTDsKKyAgc2l6ZV90IHRvcGljbGVuOworICB1bnNpZ25lZCBjaGFyICpwYWNrZXQgPSBOVUxMOworICBzaXplX3QgcGFja2V0bGVuOworICBjaGFyIGVuY29kZWRzaXplWzRdOworICBzaXplX3QgbjsKKworICByZXN1bHQgPSBtcXR0X2dldF90b3BpYyhjb25uLCAmdG9waWMsICZ0b3BpY2xlbik7CisgIGlmKHJlc3VsdCkKKyAgICBnb3RvIGZhaWw7CisKKyAgY29ubi0+cHJvdG8ubXF0dC5wYWNrZXRpZCsrOworCisgIHBhY2tldGxlbiA9IHRvcGljbGVuICsgNTsgLyogcGFja2V0aWQgKyB0b3BpYyAoaGFzIGEgdHdvIGJ5dGUgbGVuZ3RoIGZpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMiBieXRlcyB0b3BpYyBsZW5ndGggKyBRb1MgYnl0ZSAqLworICBuID0gbXF0dF9lbmNvZGVfbGVuKChjaGFyICopZW5jb2RlZHNpemUsIHBhY2tldGxlbik7CisgIHBhY2tldGxlbiArPSBuICsgMTsgLyogYWRkIG9uZSBmb3IgdGhlIGNvbnRyb2wgcGFja2V0IHR5cGUgYnl0ZSAqLworCisgIHBhY2tldCA9IG1hbGxvYyhwYWNrZXRsZW4pOworICBpZighcGFja2V0KSB7CisgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICBwYWNrZXRbMF0gPSBNUVRUX01TR19TVUJTQ1JJQkU7CisgIG1lbWNweSgmcGFja2V0WzFdLCBlbmNvZGVkc2l6ZSwgbik7CisgIHBhY2tldFsxICsgbl0gPSAoY29ubi0+cHJvdG8ubXF0dC5wYWNrZXRpZCA+PiA4KSAmIDB4ZmY7CisgIHBhY2tldFsyICsgbl0gPSBjb25uLT5wcm90by5tcXR0LnBhY2tldGlkICYgMHhmZjsKKyAgcGFja2V0WzMgKyBuXSA9ICh0b3BpY2xlbiA+PiA4KSAmIDB4ZmY7CisgIHBhY2tldFs0ICsgbiBdID0gdG9waWNsZW4gJiAweGZmOworICBtZW1jcHkoJnBhY2tldFs1ICsgbl0sIHRvcGljLCB0b3BpY2xlbik7CisgIHBhY2tldFs1ICsgbiArIHRvcGljbGVuXSA9IDA7IC8qIFFvUyB6ZXJvICovCisKKyAgcmVzdWx0ID0gbXF0dF9zZW5kKGNvbm4sIChjaGFyICopcGFja2V0LCBwYWNrZXRsZW4pOworCitmYWlsOgorICBmcmVlKHRvcGljKTsKKyAgZnJlZShwYWNrZXQpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIGZpcnN0IGJ5dGUgd2FzIGFscmVhZHkgcmVhZC4KKyAqLworc3RhdGljIENVUkxjb2RlIG1xdHRfdmVyaWZ5X3N1YmFjayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgdW5zaWduZWQgY2hhciByZWFkYnVmW01RVFRfU1VCQUNLX0xFTl07CisgIHNzaXplX3QgbnJlYWQ7CisgIHN0cnVjdCBtcXR0X2Nvbm4gKm1xdHQgPSAmY29ubi0+cHJvdG8ubXF0dDsKKworICByZXN1bHQgPSBDdXJsX3JlYWQoY29ubiwgc29ja2ZkLCAoY2hhciAqKXJlYWRidWYsIE1RVFRfU1VCQUNLX0xFTiwgJm5yZWFkKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZmFpbDsKKworICBpZihjb25uLT5kYXRhLT5zZXQudmVyYm9zZSkKKyAgICBDdXJsX2RlYnVnKGNvbm4tPmRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgKGNoYXIgKilyZWFkYnVmLCAoc2l6ZV90KW5yZWFkKTsKKworICAvKiBmaXhtZSAqLworICBpZihucmVhZCA8IE1RVFRfU1VCQUNLX0xFTikgeworICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICAvKiB2ZXJpZnkgU1VCQUNLICovCisgIGlmKHJlYWRidWZbMF0gIT0gKChtcXR0LT5wYWNrZXRpZCA+PiA4KSAmIDB4ZmYpIHx8CisgICAgIHJlYWRidWZbMV0gIT0gKG1xdHQtPnBhY2tldGlkICYgMHhmZikgfHwKKyAgICAgcmVhZGJ1ZlsyXSAhPSAweDAwKQorICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKKworZmFpbDoKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIG1xdHRfcHVibGlzaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY2hhciAqcGF5bG9hZCA9IGNvbm4tPmRhdGEtPnNldC5wb3N0ZmllbGRzOworICBzaXplX3QgcGF5bG9hZGxlbiA9IChzaXplX3QpY29ubi0+ZGF0YS0+c2V0LnBvc3RmaWVsZHNpemU7CisgIGNoYXIgKnRvcGljID0gTlVMTDsKKyAgc2l6ZV90IHRvcGljbGVuOworICB1bnNpZ25lZCBjaGFyICpwa3QgPSBOVUxMOworICBzaXplX3QgaSA9IDA7CisgIHNpemVfdCByZW1haW5pbmdsZW5ndGg7CisgIHNpemVfdCBlbmNvZGVsZW47CisgIGNoYXIgZW5jb2RlZGJ5dGVzWzRdOworCisgIHJlc3VsdCA9IG1xdHRfZ2V0X3RvcGljKGNvbm4sICZ0b3BpYywgJnRvcGljbGVuKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZmFpbDsKKworICByZW1haW5pbmdsZW5ndGggPSBwYXlsb2FkbGVuICsgMiArIHRvcGljbGVuOworICBlbmNvZGVsZW4gPSBtcXR0X2VuY29kZV9sZW4oZW5jb2RlZGJ5dGVzLCByZW1haW5pbmdsZW5ndGgpOworCisgIC8qIGFkZCB0aGUgY29udHJvbCBieXRlIGFuZCB0aGUgZW5jb2RlZCByZW1haW5pbmcgbGVuZ3RoICovCisgIHBrdCA9IG1hbGxvYyhyZW1haW5pbmdsZW5ndGggKyAxICsgZW5jb2RlbGVuKTsKKyAgaWYoIXBrdCkgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgLyogYXNzZW1ibGUgcGFja2V0ICovCisgIHBrdFtpKytdID0gTVFUVF9NU0dfUFVCTElTSDsKKyAgbWVtY3B5KCZwa3RbaV0sIGVuY29kZWRieXRlcywgZW5jb2RlbGVuKTsKKyAgaSArPSBlbmNvZGVsZW47CisgIHBrdFtpKytdID0gKHRvcGljbGVuID4+IDgpICYgMHhmZjsKKyAgcGt0W2krK10gPSAodG9waWNsZW4gJiAweGZmKTsKKyAgbWVtY3B5KCZwa3RbaV0sIHRvcGljLCB0b3BpY2xlbik7CisgIGkgKz0gdG9waWNsZW47CisgIG1lbWNweSgmcGt0W2ldLCBwYXlsb2FkLCBwYXlsb2FkbGVuKTsKKyAgaSArPSBwYXlsb2FkbGVuOworICByZXN1bHQgPSBtcXR0X3NlbmQoY29ubiwgKGNoYXIgKilwa3QsIGkpOworCitmYWlsOgorICBmcmVlKHBrdCk7CisgIGZyZWUodG9waWMpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc2l6ZV90IG1xdHRfZGVjb2RlX2xlbih1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuLCBzaXplX3QgKmxlbmJ5dGVzKQoreworICBzaXplX3QgbGVuID0gMDsKKyAgc2l6ZV90IG11bHQgPSAxOworICBzaXplX3QgaTsKKyAgdW5zaWduZWQgY2hhciBlbmNvZGVkID0gMTI4OworCisgIGZvcihpID0gMDsgKGkgPCBidWZsZW4pICYmIChlbmNvZGVkICYgMTI4KTsgaSsrKSB7CisgICAgZW5jb2RlZCA9IGJ1ZltpXTsKKyAgICBsZW4gKz0gKGVuY29kZWQgJiAxMjcpICogbXVsdDsKKyAgICBtdWx0ICo9IDEyODsKKyAgfQorCisgIGlmKGxlbmJ5dGVzKQorICAgICpsZW5ieXRlcyA9IGk7CisKKyAgcmV0dXJuIGxlbjsKK30KKworI2lmZGVmIENVUkxERUJVRworc3RhdGljIGNvbnN0IGNoYXIgKnN0YXRlbmFtZXNbXT17CisgICJNUVRUX0ZJUlNUIiwKKyAgIk1RVFRfUkVNQUlOSU5HX0xFTkdUSCIsCisgICJNUVRUX0NPTk5BQ0siLAorICAiTVFUVF9TVUJBQ0siLAorICAiTVFUVF9TVUJBQ0tfQ09NSU5HIiwKKyAgIk1RVFRfUFVCV0FJVCIsCisgICJNUVRUX1BVQl9SRU1BSU4iLAorCisgICJOT1QgQSBTVEFURSIKK307CisjZW5kaWYKKworLyogVGhlIG9ubHkgd2F5IHRvIGNoYW5nZSBzdGF0ZSAqLworc3RhdGljIHZvaWQgbXFzdGF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgIGVudW0gbXF0dHN0YXRlIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICBlbnVtIG1xdHRzdGF0ZSBuZXh0c3RhdGUpIC8qIHVzZWQgaWYgc3RhdGUgPT0gRklSU1QgKi8KK3sKKyAgc3RydWN0IG1xdHRfY29ubiAqbXF0dCA9ICZjb25uLT5wcm90by5tcXR0OworI2lmZGVmIENVUkxERUJVRworICBpbmZvZihjb25uLT5kYXRhLCAiJXMgKGZyb20gJXMpIChuZXh0IGlzICVzKVxuIiwKKyAgICAgICAgc3RhdGVuYW1lc1tzdGF0ZV0sCisgICAgICAgIHN0YXRlbmFtZXNbbXF0dC0+c3RhdGVdLAorICAgICAgICAoc3RhdGUgPT0gTVFUVF9GSVJTVCk/IHN0YXRlbmFtZXNbbmV4dHN0YXRlXSA6ICIiKTsKKyNlbmRpZgorICBtcXR0LT5zdGF0ZSA9IHN0YXRlOworICBpZihzdGF0ZSA9PSBNUVRUX0ZJUlNUKQorICAgIG1xdHQtPm5leHRzdGF0ZSA9IG5leHRzdGF0ZTsKK30KKworCisvKiBmb3IgdGhlIHB1Ymxpc2ggcGFja2V0ICovCisjZGVmaW5lIE1RVFRfSEVBREVSX0xFTiA1ICAgIC8qIG1heCA1IGJ5dGVzICovCisKK3N0YXRpYyBDVVJMY29kZSBtcXR0X3JlYWRfcHVibGlzaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIHNzaXplX3QgbnJlYWQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICB1bnNpZ25lZCBjaGFyICpwa3QgPSAodW5zaWduZWQgY2hhciAqKWRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgc2l6ZV90IHJlbWxlbjsKKyAgc3RydWN0IG1xdHRfY29ubiAqbXF0dCA9ICZjb25uLT5wcm90by5tcXR0OworICBzdHJ1Y3QgTVFUVCAqbXEgPSBkYXRhLT5yZXEucHJvdG9wOworICB1bnNpZ25lZCBjaGFyIHBhY2tldDsKKworICBzd2l0Y2gobXF0dC0+c3RhdGUpIHsKKyAgTVFUVF9TVUJBQ0tfQ09NSU5HOgorICBjYXNlIE1RVFRfU1VCQUNLX0NPTUlORzoKKyAgICByZXN1bHQgPSBtcXR0X3ZlcmlmeV9zdWJhY2soY29ubik7CisgICAgaWYocmVzdWx0KQorICAgICAgYnJlYWs7CisKKyAgICBtcXN0YXRlKGNvbm4sIE1RVFRfRklSU1QsIE1RVFRfUFVCV0FJVCk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBNUVRUX1NVQkFDSzoKKyAgY2FzZSBNUVRUX1BVQldBSVQ6CisgICAgLyogd2UgYXJlIGV4cGVjdGluZyBQVUJMSVNIIG9yIFNVQkFDSyAqLworICAgIHBhY2tldCA9IG1xLT5maXJzdGJ5dGUgJiAweGYwOworICAgIGlmKHBhY2tldCA9PSBNUVRUX01TR19QVUJMSVNIKQorICAgICAgbXFzdGF0ZShjb25uLCBNUVRUX1BVQl9SRU1BSU4sIE1RVFRfTk9TVEFURSk7CisgICAgZWxzZSBpZihwYWNrZXQgPT0gTVFUVF9NU0dfU1VCQUNLKSB7CisgICAgICBtcXN0YXRlKGNvbm4sIE1RVFRfU1VCQUNLX0NPTUlORywgTVFUVF9OT1NUQVRFKTsKKyAgICAgIGdvdG8gTVFUVF9TVUJBQ0tfQ09NSU5HOworICAgIH0KKyAgICBlbHNlIGlmKHBhY2tldCA9PSBNUVRUX01TR19ESVNDT05ORUNUKSB7CisgICAgICBpbmZvZihkYXRhLCAiR290IERJU0NPTk5FQ1RcbiIpOworICAgICAgKmRvbmUgPSBUUlVFOworICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfV0VJUkRfU0VSVkVSX1JFUExZOworICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgLyogLS0gc3dpdGNoZWQgc3RhdGUgLS0gKi8KKyAgICByZW1sZW4gPSBtcS0+cmVtYWluaW5nX2xlbmd0aDsKKyAgICBpbmZvZihkYXRhLCAiUmVtYWluaW5nIGxlbmd0aDogJXpkIGJ5dGVzXG4iLCByZW1sZW4pOworICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCByZW1sZW4pOworICAgIGRhdGEtPnJlcS5ieXRlY291bnQgPSAwOworICAgIGRhdGEtPnJlcS5zaXplID0gcmVtbGVuOworICAgIG1xLT5ucGFja2V0ID0gcmVtbGVuOyAvKiBnZXQgdGhpcyBtYW55IGJ5dGVzICovCisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgY2FzZSBNUVRUX1BVQl9SRU1BSU46IHsKKyAgICAvKiByZWFkIHJlc3Qgb2YgcGFja2V0LCBidXQgbm8gbW9yZS4gQ2FwIHRvIGJ1ZmZlciBzaXplICovCisgICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOworICAgIHNpemVfdCByZXN0ID0gbXEtPm5wYWNrZXQ7CisgICAgaWYocmVzdCA+IChzaXplX3QpZGF0YS0+c2V0LmJ1ZmZlcl9zaXplKQorICAgICAgcmVzdCA9IChzaXplX3QpZGF0YS0+c2V0LmJ1ZmZlcl9zaXplOworICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCBzb2NrZmQsIChjaGFyICopcGt0LCByZXN0LCAmbnJlYWQpOworICAgIGlmKHJlc3VsdCkgeworICAgICAgaWYoQ1VSTEVfQUdBSU4gPT0gcmVzdWx0KSB7CisgICAgICAgIGluZm9mKGRhdGEsICJFRUVFIEFBQUFHQUlOXG4iKTsKKyAgICAgIH0KKyAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZighbnJlYWQpIHsKKyAgICAgIGluZm9mKGRhdGEsICJzZXJ2ZXIgZGlzY29ubmVjdGVkXG4iKTsKKyAgICAgIHJlc3VsdCA9IENVUkxFX1BBUlRJQUxfRklMRTsKKyAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkKKyAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9JTiwgKGNoYXIgKilwa3QsIChzaXplX3QpbnJlYWQpOworCisgICAgbXEtPm5wYWNrZXQgLT0gbnJlYWQ7CisgICAgay0+Ynl0ZWNvdW50ICs9IG5yZWFkOworICAgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCBrLT5ieXRlY291bnQpOworCisgICAgLyogaWYgUW9TIGlzIHNldCwgbWVzc2FnZSBjb250YWlucyBwYWNrZXQgaWQgKi8KKworICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopcGt0LCBucmVhZCk7CisgICAgaWYocmVzdWx0KQorICAgICAgZ290byBlbmQ7CisKKyAgICBpZighbXEtPm5wYWNrZXQpCisgICAgICAvKiBubyBtb3JlIFBVQkxJU0ggcGF5bG9hZCwgYmFjayB0byBzdWJzY3JpYmUgd2FpdCBzdGF0ZSAqLworICAgICAgbXFzdGF0ZShjb25uLCBNUVRUX0ZJUlNULCBNUVRUX1BVQldBSVQpOworICAgIGJyZWFrOworICB9CisgIGRlZmF1bHQ6CisgICAgREVCVUdBU1NFUlQoTlVMTCk7IC8qIGlsbGVnYWwgc3RhdGUgKi8KKyAgICByZXN1bHQgPSBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CisgICAgZ290byBlbmQ7CisgIH0KKyAgZW5kOgorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAqZG9uZSA9IEZBTFNFOyAvKiB1bmNvbmRpdGlvbmFsbHkgKi8KKworICByZXN1bHQgPSBtcXR0X2Nvbm5lY3QoY29ubik7CisgIGlmKHJlc3VsdCkgeworICAgIGZhaWxmKGRhdGEsICJFcnJvciAlZCBzZW5kaW5nIE1RVFQgQ09OTiByZXF1ZXN0IiwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIG1xc3RhdGUoY29ubiwgTVFUVF9GSVJTVCwgTVFUVF9DT05OQUNLKTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbXF0dF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgbXF0dF9jb25uICptcXR0ID0gJmNvbm4tPnByb3RvLm1xdHQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgTVFUVCAqbXEgPSBkYXRhLT5yZXEucHJvdG9wOworICBzc2l6ZV90IG5yZWFkOworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICB1bnNpZ25lZCBjaGFyICpwa3QgPSAodW5zaWduZWQgY2hhciAqKWRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgdW5zaWduZWQgY2hhciBieXRlOworCisgICpkb25lID0gRkFMU0U7CisKKyAgaWYobXEtPm5zZW5kKSB7CisgICAgLyogc2VuZCB0aGUgcmVtYWluZGVyIG9mIGFuIG91dGdvaW5nIHBhY2tldCAqLworICAgIGNoYXIgKnB0ciA9IG1xLT5zZW5kbGVmdG92ZXJzOworICAgIHJlc3VsdCA9IG1xdHRfc2VuZChjb25uLCBtcS0+c2VuZGxlZnRvdmVycywgbXEtPm5zZW5kKTsKKyAgICBmcmVlKHB0cik7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGluZm9mKGRhdGEsICJtcXR0X2RvaW5nOiBzdGF0ZSBbJWRdXG4iLCAoaW50KSBtcXR0LT5zdGF0ZSk7CisgIHN3aXRjaChtcXR0LT5zdGF0ZSkgeworICBjYXNlIE1RVFRfRklSU1Q6CisgICAgLyogUmVhZCB0aGUgaW5pdGlhbCBieXRlIG9ubHkgKi8KKyAgICByZXN1bHQgPSBDdXJsX3JlYWQoY29ubiwgc29ja2ZkLCAoY2hhciAqKSZtcS0+Zmlyc3RieXRlLCAxLCAmbnJlYWQpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQorICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIChjaGFyICopJm1xLT5maXJzdGJ5dGUsIDEpOworICAgIC8qIHJlbWVtYmVyIHRoZSBmaXJzdCBieXRlICovCisgICAgbXEtPm5wYWNrZXQgPSAwOworICAgIG1xc3RhdGUoY29ubiwgTVFUVF9SRU1BSU5JTkdfTEVOR1RILCBNUVRUX05PU1RBVEUpOworICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgTVFUVF9SRU1BSU5JTkdfTEVOR1RIOgorICAgIGRvIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCBzb2NrZmQsIChjaGFyICopJmJ5dGUsIDEsICZucmVhZCk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIGJyZWFrOworICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLCAoY2hhciAqKSZieXRlLCAxKTsKKyAgICAgIHBrdFttcS0+bnBhY2tldCsrXSA9IGJ5dGU7CisgICAgfSB3aGlsZSgoYnl0ZSAmIDB4ODApICYmIChtcS0+bnBhY2tldCA8IDQpKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKyAgICBtcS0+cmVtYWluaW5nX2xlbmd0aCA9IG1xdHRfZGVjb2RlX2xlbigmcGt0WzBdLCBtcS0+bnBhY2tldCwgTlVMTCk7CisgICAgbXEtPm5wYWNrZXQgPSAwOworICAgIGlmKG1xLT5yZW1haW5pbmdfbGVuZ3RoKSB7CisgICAgICBtcXN0YXRlKGNvbm4sIG1xdHQtPm5leHRzdGF0ZSwgTVFUVF9OT1NUQVRFKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBtcXN0YXRlKGNvbm4sIE1RVFRfRklSU1QsIE1RVFRfRklSU1QpOworCisgICAgaWYobXEtPmZpcnN0Ynl0ZSA9PSBNUVRUX01TR19ESVNDT05ORUNUKSB7CisgICAgICBpbmZvZihkYXRhLCAiR290IERJU0NPTk5FQ1RcbiIpOworICAgICAgKmRvbmUgPSBUUlVFOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBNUVRUX0NPTk5BQ0s6CisgICAgcmVzdWx0ID0gbXF0dF92ZXJpZnlfY29ubmFjayhjb25uKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUKSB7CisgICAgICByZXN1bHQgPSBtcXR0X3B1Ymxpc2goY29ubik7CisgICAgICBpZighcmVzdWx0KSB7CisgICAgICAgIHJlc3VsdCA9IG1xdHRfZGlzY29ubmVjdChjb25uKTsKKyAgICAgICAgKmRvbmUgPSBUUlVFOworICAgICAgfQorICAgICAgbXF0dC0+bmV4dHN0YXRlID0gTVFUVF9GSVJTVDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXN1bHQgPSBtcXR0X3N1YnNjcmliZShjb25uKTsKKyAgICAgIGlmKCFyZXN1bHQpIHsKKyAgICAgICAgbXFzdGF0ZShjb25uLCBNUVRUX0ZJUlNULCBNUVRUX1NVQkFDSyk7CisgICAgICB9CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgTVFUVF9TVUJBQ0s6CisgIGNhc2UgTVFUVF9QVUJXQUlUOgorICBjYXNlIE1RVFRfUFVCX1JFTUFJTjoKKyAgICByZXN1bHQgPSBtcXR0X3JlYWRfcHVibGlzaChjb25uLCBkb25lKTsKKyAgICBicmVhazsKKworICBkZWZhdWx0OgorICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTdGF0ZSBub3QgaGFuZGxlZCB5ZXQiKTsKKyAgICAqZG9uZSA9IFRSVUU7CisgICAgYnJlYWs7CisgIH0KKworICBpZihyZXN1bHQgPT0gQ1VSTEVfQUdBSU4pCisgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBDVVJMX0VOQUJMRV9NUVRUICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tcXR0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9tcXR0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0NjNkNQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL21xdHQuaApAQCAtMCwwICsxLDU5IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX01RVFRfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9NUVRUX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAsIEJqw7ZybiBTdGVuYmVyZywgPGJqb3JuQGhheHguc2U+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIENVUkxfRU5BQkxFX01RVFQKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9tcXR0OworI2VuZGlmCisKK2VudW0gbXF0dHN0YXRlIHsKKyAgTVFUVF9GSVJTVCwgICAgICAgICAgICAgLyogMCAqLworICBNUVRUX1JFTUFJTklOR19MRU5HVEgsICAvKiAxICovCisgIE1RVFRfQ09OTkFDSywgICAgICAgICAgIC8qIDIgKi8KKyAgTVFUVF9TVUJBQ0ssICAgICAgICAgICAgLyogMyAqLworICBNUVRUX1NVQkFDS19DT01JTkcsICAgICAvKiA0IC0gdGhlIFNVQkFDSyByZW1haW5kZXIgKi8KKyAgTVFUVF9QVUJXQUlULCAgICAvKiA1IC0gd2FpdCBmb3IgcHVibGlzaCAqLworICBNUVRUX1BVQl9SRU1BSU4sICAvKiA2IC0gd2FpdCBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgcHVibGlzaCAqLworCisgIE1RVFRfTk9TVEFURSAvKiA3IC0gbmV2ZXIgdXNlZCBhbiBhY3R1YWwgc3RhdGUgKi8KK307CisKK3N0cnVjdCBtcXR0X2Nvbm4geworICBlbnVtIG1xdHRzdGF0ZSBzdGF0ZTsKKyAgZW51bSBtcXR0c3RhdGUgbmV4dHN0YXRlOyAvKiBzd2l0Y2ggdG8gdGhpcyBhZnRlciByZW1haW5pbmcgbGVuZ3RoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSAqLworICB1bnNpZ25lZCBpbnQgcGFja2V0aWQ7Cit9OworCisvKiBwcm90b2NvbC1zcGVjaWZpYyB0cmFuc2Zlci1yZWxhdGVkIGRhdGEgKi8KK3N0cnVjdCBNUVRUIHsKKyAgY2hhciAqc2VuZGxlZnRvdmVyczsKKyAgc2l6ZV90IG5zZW5kOyAvKiBzaXplIG9mIHNlbmRsZWZ0b3ZlcnMgKi8KKworICAvKiB3aGVuIHJlY2VpdmluZyAqLworICBzaXplX3QgbnBhY2tldDsgLyogYnl0ZSBjb3VudGVyICovCisgIHVuc2lnbmVkIGNoYXIgZmlyc3RieXRlOworICBzaXplX3QgcmVtYWluaW5nX2xlbmd0aDsKK307CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NUVRUX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aS5jCmluZGV4IGM3YzQ2ZWUuLjI0OWUzNjAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXVsdGkuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDYsNiArNDYsOCBAQAogI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJodHRwX3Byb3h5LmgiCiAjaW5jbHVkZSAiaHR0cDIuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCisjaW5jbHVkZSAic29ja3MuaCIKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC03MSwxNSArNzMsMTIgQEAKIAogc3RhdGljIENVUkxNY29kZSBzaW5nbGVzb2NrZXQoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7Ci1zdGF0aWMgaW50IHVwZGF0ZV90aW1lcihzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpOwotCiBzdGF0aWMgQ1VSTE1jb2RlIGFkZF9uZXh0X3RpbWVvdXQoc3RydWN0IGN1cmx0aW1lIG5vdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqZCk7CiBzdGF0aWMgQ1VSTE1jb2RlIG11bHRpX3RpbWVvdXQoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKnRpbWVvdXRfbXMpOwogc3RhdGljIHZvaWQgcHJvY2Vzc19wZW5kaW5nX2hhbmRsZXMoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpKTsKLXN0YXRpYyB2b2lkIGRldGFjaF9jb25ubmVjdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIAogI2lmZGVmIERFQlVHQlVJTEQKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3RhdGVuYW1lW109ewpAQCAtMTEyLDcgKzExMSw3IEBACiAKICAgLyogSW1wb3J0YW50OiByZXNldCB0aGUgY29ubiBwb2ludGVyIHNvIHRoYXQgd2UgZG9uJ3QgcG9pbnQgdG8gbWVtb3J5CiAgICAgIHRoYXQgY291bGQgYmUgZnJlZWQgYW55dGltZSAqLwotICBkZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CisgIEN1cmxfZGV0YWNoX2Nvbm5uZWN0aW9uKGRhdGEpOwogICBDdXJsX2V4cGlyZV9jbGVhcihkYXRhKTsgLyogc3RvcCBhbGwgdGltZXJzICovCiB9CiAKQEAgLTE2OSw5ICsxNjgsMTEgQEAKICAgfQogI2VuZGlmCiAKLSAgaWYoc3RhdGUgPT0gQ1VSTE1fU1RBVEVfQ09NUExFVEVEKQorICBpZihzdGF0ZSA9PSBDVVJMTV9TVEFURV9DT01QTEVURUQpIHsKICAgICAvKiBjaGFuZ2luZyB0byBDT01QTEVURUQgbWVhbnMgdGhlcmUncyBvbmUgbGVzcyBlYXN5IGhhbmRsZSAnYWxpdmUnICovCisgICAgREVCVUdBU1NFUlQoZGF0YS0+bXVsdGktPm51bV9hbGl2ZSA+IDApOwogICAgIGRhdGEtPm11bHRpLT5udW1fYWxpdmUtLTsKKyAgfQogCiAgIC8qIGlmIHRoaXMgc3RhdGUgaGFzIGFuIGluaXQtZnVuY3Rpb24sIHJ1biBpdCAqLwogICBpZihmaW5pdFtzdGF0ZV0pCkBAIC0xODksNyArMTkwLDcgQEAKICAqLwogCiBzdHJ1Y3QgQ3VybF9zaF9lbnRyeSB7Ci0gIHN0cnVjdCBjdXJsX2xsaXN0IGxpc3Q7IC8qIGxpc3Qgb2YgZWFzeSBoYW5kbGVzIHVzaW5nIHRoaXMgc29ja2V0ICovCisgIHN0cnVjdCBjdXJsX2hhc2ggdHJhbnNmZXJzOyAvKiBoYXNoIG9mIHRyYW5zZmVycyB1c2luZyB0aGlzIHNvY2tldCAqLwogICB1bnNpZ25lZCBpbnQgYWN0aW9uOyAgLyogd2hhdCBjb21iaW5lZCBhY3Rpb24gUkVBRC9XUklURSB0aGlzIHNvY2tldCB3YWl0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICovCiAgIHZvaWQgKnNvY2tldHA7IC8qIHNldHRhYmxlIGJ5IHVzZXJzIHdpdGggY3VybF9tdWx0aV9hc3NpZ24oKSAqLwpAQCAtMjA2LDEyICsyMDcsMzYgQEAKIHN0YXRpYyBzdHJ1Y3QgQ3VybF9zaF9lbnRyeSAqc2hfZ2V0ZW50cnkoc3RydWN0IGN1cmxfaGFzaCAqc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgcykKIHsKLSAgaWYocyAhPSBDVVJMX1NPQ0tFVF9CQUQpCisgIGlmKHMgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CiAgICAgLyogb25seSBsb29rIGZvciBwcm9wZXIgc29ja2V0cyAqLwogICAgIHJldHVybiBDdXJsX2hhc2hfcGljayhzaCwgKGNoYXIgKikmcywgc2l6ZW9mKGN1cmxfc29ja2V0X3QpKTsKKyAgfQogICByZXR1cm4gTlVMTDsKIH0KIAorI2RlZmluZSBUUkhBU0hfU0laRSAxMworc3RhdGljIHNpemVfdCB0cmhhc2godm9pZCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwgc2l6ZV90IHNsb3RzX251bSkKK3sKKyAgc2l6ZV90IGtleXZhbCA9IChzaXplX3QpKihzdHJ1Y3QgQ3VybF9lYXN5ICoqKWtleTsKKyAgKHZvaWQpIGtleV9sZW5ndGg7CisKKyAgcmV0dXJuIChrZXl2YWwgJSBzbG90c19udW0pOworfQorCitzdGF0aWMgc2l6ZV90IHRyaGFzaF9jb21wYXJlKHZvaWQgKmsxLCBzaXplX3QgazFfbGVuLCB2b2lkICprMiwgc2l6ZV90IGsyX2xlbikKK3sKKyAgKHZvaWQpazFfbGVuOworICAodm9pZClrMl9sZW47CisKKyAgcmV0dXJuICooc3RydWN0IEN1cmxfZWFzeSAqKilrMSA9PSAqKHN0cnVjdCBDdXJsX2Vhc3kgKiopazI7Cit9CisKK3N0YXRpYyB2b2lkIHRyaGFzaF9kdG9yKHZvaWQgKm5hZGEpCit7CisgICh2b2lkKW5hZGE7Cit9CisKKwogLyogbWFrZSBzdXJlIHRoaXMgc29ja2V0IGlzIHByZXNlbnQgaW4gdGhlIGhhc2ggZm9yIHRoaXMgaGFuZGxlICovCiBzdGF0aWMgc3RydWN0IEN1cmxfc2hfZW50cnkgKnNoX2FkZGVudHJ5KHN0cnVjdCBjdXJsX2hhc2ggKnNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHMpCkBAIC0yMTksMTkgKzI0NCwyNSBAQAogICBzdHJ1Y3QgQ3VybF9zaF9lbnRyeSAqdGhlcmUgPSBzaF9nZXRlbnRyeShzaCwgcyk7CiAgIHN0cnVjdCBDdXJsX3NoX2VudHJ5ICpjaGVjazsKIAotICBpZih0aGVyZSkKKyAgaWYodGhlcmUpIHsKICAgICAvKiBpdCBpcyBwcmVzZW50LCByZXR1cm4gZmluZSAqLwogICAgIHJldHVybiB0aGVyZTsKKyAgfQogCiAgIC8qIG5vdCBwcmVzZW50LCBhZGQgaXQgKi8KICAgY2hlY2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBDdXJsX3NoX2VudHJ5KSk7CiAgIGlmKCFjaGVjaykKICAgICByZXR1cm4gTlVMTDsgLyogbWFqb3IgZmFpbHVyZSAqLwogCi0gIEN1cmxfbGxpc3RfaW5pdCgmY2hlY2stPmxpc3QsIE5VTEwpOworICBpZihDdXJsX2hhc2hfaW5pdCgmY2hlY2stPnRyYW5zZmVycywgVFJIQVNIX1NJWkUsIHRyaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgdHJoYXNoX2NvbXBhcmUsIHRyaGFzaF9kdG9yKSkgeworICAgIGZyZWUoY2hlY2spOworICAgIHJldHVybiBOVUxMOworICB9CiAKICAgLyogbWFrZS9hZGQgbmV3IGhhc2ggZW50cnkgKi8KICAgaWYoIUN1cmxfaGFzaF9hZGQoc2gsIChjaGFyICopJnMsIHNpemVvZihjdXJsX3NvY2tldF90KSwgY2hlY2spKSB7CisgICAgQ3VybF9oYXNoX2Rlc3Ryb3koJmNoZWNrLT50cmFuc2ZlcnMpOwogICAgIGZyZWUoY2hlY2spOwogICAgIHJldHVybiBOVUxMOyAvKiBtYWpvciBmYWlsdXJlICovCiAgIH0KQEAgLTI0MSw4ICsyNzIsMTEgQEAKIAogCiAvKiBkZWxldGUgdGhlIGdpdmVuIHNvY2tldCArIGhhbmRsZSBmcm9tIHRoZSBoYXNoICovCi1zdGF0aWMgdm9pZCBzaF9kZWxlbnRyeShzdHJ1Y3QgY3VybF9oYXNoICpzaCwgY3VybF9zb2NrZXRfdCBzKQorc3RhdGljIHZvaWQgc2hfZGVsZW50cnkoc3RydWN0IEN1cmxfc2hfZW50cnkgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfaGFzaCAqc2gsIGN1cmxfc29ja2V0X3QgcykKIHsKKyAgQ3VybF9oYXNoX2Rlc3Ryb3koJmVudHJ5LT50cmFuc2ZlcnMpOworCiAgIC8qIFdlIHJlbW92ZSB0aGUgaGFzaCBlbnRyeS4gVGhpcyB3aWxsIGVuZCB1cCBpbiBhIGNhbGwgdG8KICAgICAgc2hfZnJlZWVudHJ5KCkuICovCiAgIEN1cmxfaGFzaF9kZWxldGUoc2gsIChjaGFyICopJnMsIHNpemVvZihjdXJsX3NvY2tldF90KSk7CkBAIC0zMTEsMTcgKzM0NSw2IEBACiAgIHJldHVybiBDVVJMTV9PSzsKIH0KIAotLyoKLSAqIG11bHRpX2ZyZWVhbXNnKCkKLSAqCi0gKiBDYWxsYmFjayB1c2VkIGJ5IHRoZSBsbGlzdCBzeXN0ZW0gd2hlbiBhIHNpbmdsZSBsaXN0IGVudHJ5IGlzIGRlc3Ryb3llZC4KLSAqLwotc3RhdGljIHZvaWQgbXVsdGlfZnJlZWFtc2codm9pZCAqYSwgdm9pZCAqYikKLXsKLSAgKHZvaWQpYTsKLSAgKHZvaWQpYjsKLX0KLQogc3RydWN0IEN1cmxfbXVsdGkgKkN1cmxfbXVsdGlfaGFuZGxlKGludCBoYXNoc2l6ZSwgLyogc29ja2V0IGhhc2ggKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhc2hzaXplKSAvKiBjb25uZWN0aW9uIGhhc2ggKi8KIHsKQEAgLTM0MSwxMSArMzY0LDMwIEBACiAgIGlmKEN1cmxfY29ubmNhY2hlX2luaXQoJm11bHRpLT5jb25uX2NhY2hlLCBjaGFzaHNpemUpKQogICAgIGdvdG8gZXJyb3I7CiAKLSAgQ3VybF9sbGlzdF9pbml0KCZtdWx0aS0+bXNnbGlzdCwgbXVsdGlfZnJlZWFtc2cpOwotICBDdXJsX2xsaXN0X2luaXQoJm11bHRpLT5wZW5kaW5nLCBtdWx0aV9mcmVlYW1zZyk7CisgIEN1cmxfbGxpc3RfaW5pdCgmbXVsdGktPm1zZ2xpc3QsIE5VTEwpOworICBDdXJsX2xsaXN0X2luaXQoJm11bHRpLT5wZW5kaW5nLCBOVUxMKTsKKworICBtdWx0aS0+bXVsdGlwbGV4aW5nID0gVFJVRTsKIAogICAvKiAtMSBtZWFucyBpdCBub3Qgc2V0IGJ5IHVzZXIsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSAqLwogICBtdWx0aS0+bWF4Y29ubmVjdHMgPSAtMTsKKyAgbXVsdGktPm1heF9jb25jdXJyZW50X3N0cmVhbXMgPSAxMDA7CisgIG11bHRpLT5pcHY2X3dvcmtzID0gQ3VybF9pcHY2d29ya3MoTlVMTCk7CisKKyNpZmRlZiBFTkFCTEVfV0FLRVVQCisgIGlmKEN1cmxfc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgbXVsdGktPndha2V1cF9wYWlyKSA8IDApIHsKKyAgICBtdWx0aS0+d2FrZXVwX3BhaXJbMF0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgbXVsdGktPndha2V1cF9wYWlyWzFdID0gQ1VSTF9TT0NLRVRfQkFEOworICB9CisgIGVsc2UgaWYoY3VybHhfbm9uYmxvY2sobXVsdGktPndha2V1cF9wYWlyWzBdLCBUUlVFKSA8IDAgfHwKKyAgICAgICAgICBjdXJseF9ub25ibG9jayhtdWx0aS0+d2FrZXVwX3BhaXJbMV0sIFRSVUUpIDwgMCkgeworICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMF0pOworICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMV0pOworICAgIG11bHRpLT53YWtldXBfcGFpclswXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICBtdWx0aS0+d2FrZXVwX3BhaXJbMV0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIH0KKyNlbmRpZgorCiAgIHJldHVybiBtdWx0aTsKIAogICBlcnJvcjoKQEAgLTQ1MywxOCArNDk1LDE5IEBACiAgIC8qIGluY3JlYXNlIHRoZSBhbGl2ZS1jb3VudGVyICovCiAgIG11bHRpLT5udW1fYWxpdmUrKzsKIAotICAvKiBBIHNvbWV3aGF0IGNydWRlIHdvcmstYXJvdW5kIGZvciBhIGxpdHRsZSBnbGl0Y2ggaW4gdXBkYXRlX3RpbWVyKCkgdGhhdAotICAgICBoYXBwZW5zIGlmIHRoZSBsYXN0Y2FsbCB0aW1lIGlzIHNldCB0byB0aGUgc2FtZSB0aW1lIHdoZW4gdGhlIGhhbmRsZSBpcwotICAgICByZW1vdmVkIGFzIHdoZW4gdGhlIG5leHQgaGFuZGxlIGlzIGFkZGVkLCBhcyB0aGVuIHRoZSBjaGVjayBpbgotICAgICB1cGRhdGVfdGltZXIoKSB0aGF0IHByZXZlbnRzIGNhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIG11bHRpcGxlIHRpbWVzIHdpdGgKLSAgICAgdGhlIHNhbWUgdGltZXIgaW5mbyB3aWxsIG5vdCB0cmlnZ2VyIGFuZCB0aGVuIHRoZSBuZXcgaGFuZGxlJ3MgdGltZW91dAotICAgICB3aWxsIG5vdCBiZSBub3RpZmllZCB0byB0aGUgYXBwLgorICAvKiBBIHNvbWV3aGF0IGNydWRlIHdvcmstYXJvdW5kIGZvciBhIGxpdHRsZSBnbGl0Y2ggaW4gQ3VybF91cGRhdGVfdGltZXIoKQorICAgICB0aGF0IGhhcHBlbnMgaWYgdGhlIGxhc3RjYWxsIHRpbWUgaXMgc2V0IHRvIHRoZSBzYW1lIHRpbWUgd2hlbiB0aGUgaGFuZGxlCisgICAgIGlzIHJlbW92ZWQgYXMgd2hlbiB0aGUgbmV4dCBoYW5kbGUgaXMgYWRkZWQsIGFzIHRoZW4gdGhlIGNoZWNrIGluCisgICAgIEN1cmxfdXBkYXRlX3RpbWVyKCkgdGhhdCBwcmV2ZW50cyBjYWxsaW5nIHRoZSBhcHBsaWNhdGlvbiBtdWx0aXBsZSB0aW1lcworICAgICB3aXRoIHRoZSBzYW1lIHRpbWVyIGluZm8gd2lsbCBub3QgdHJpZ2dlciBhbmQgdGhlbiB0aGUgbmV3IGhhbmRsZSdzCisgICAgIHRpbWVvdXQgd2lsbCBub3QgYmUgbm90aWZpZWQgdG8gdGhlIGFwcC4KIAogICAgICBUaGUgd29yay1hcm91bmQgaXMgdGh1cyBzaW1wbHkgdG8gY2xlYXIgdGhlICdsYXN0Y2FsbCcgdmFyaWFibGUgdG8gZm9yY2UKLSAgICAgdXBkYXRlX3RpbWVyKCkgdG8gYWx3YXlzIHRyaWdnZXIgYSBjYWxsYmFjayB0byB0aGUgYXBwIHdoZW4gYSBuZXcgZWFzeQotICAgICBoYW5kbGUgaXMgYWRkZWQgKi8KKyAgICAgQ3VybF91cGRhdGVfdGltZXIoKSB0byBhbHdheXMgdHJpZ2dlciBhIGNhbGxiYWNrIHRvIHRoZSBhcHAgd2hlbiBhIG5ldworICAgICBlYXN5IGhhbmRsZSBpcyBhZGRlZCAqLwogICBtZW1zZXQoJm11bHRpLT50aW1lcl9sYXN0Y2FsbCwgMCwgc2l6ZW9mKG11bHRpLT50aW1lcl9sYXN0Y2FsbCkpOwogCisgIENPTk5DQUNIRV9MT0NLKGRhdGEpOwogICAvKiBUaGUgY2xvc3VyZSBoYW5kbGUgb25seSBldmVyIGhhcyBkZWZhdWx0IHRpbWVvdXRzIHNldC4gVG8gaW1wcm92ZSB0aGUKICAgICAgc3RhdGUgc29tZXdoYXQgd2UgY2xvbmUgdGhlIHRpbWVvdXRzIGZyb20gZWFjaCBhZGRlZCBoYW5kbGUgc28gdGhhdCB0aGUKICAgICAgY2xvc3VyZSBoYW5kbGUgYWx3YXlzIGhhcyB0aGUgc2FtZSB0aW1lb3V0cyBhcyB0aGUgbW9zdCByZWNlbnRseSBhZGRlZApAQCAtNDc0LDggKzUxNyw5IEBACiAgICAgZGF0YS0+c2V0LnNlcnZlcl9yZXNwb25zZV90aW1lb3V0OwogICBkYXRhLT5zdGF0ZS5jb25uX2NhY2hlLT5jbG9zdXJlX2hhbmRsZS0+c2V0Lm5vX3NpZ25hbCA9CiAgICAgZGF0YS0+c2V0Lm5vX3NpZ25hbDsKKyAgQ09OTkNBQ0hFX1VOTE9DSyhkYXRhKTsKIAotICB1cGRhdGVfdGltZXIobXVsdGkpOworICBDdXJsX3VwZGF0ZV90aW1lcihtdWx0aSk7CiAgIHJldHVybiBDVVJMTV9PSzsKIH0KIApAQCAtNTEwLDYgKzU1NCw4IEBACiAgICAgLyogU3RvcCBpZiBtdWx0aV9kb25lKCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KICAgICByZXR1cm4gQ1VSTEVfT0s7CiAKKyAgY29ubi0+ZGF0YSA9IGRhdGE7IC8qIGVuc3VyZSB0aGUgY29ubmVjdGlvbiB1c2VzIHRoaXMgdHJhbnNmZXIgbm93ICovCisKICAgLyogU3RvcCB0aGUgcmVzb2x2ZXIgYW5kIGZyZWUgaXRzIG93biByZXNvdXJjZXMgKGJ1dCBub3QgZG5zX2VudHJ5IHlldCkuICovCiAgIEN1cmxfcmVzb2x2ZXJfa2lsbChjb25uKTsKIApAQCAtNTQ2LDE1ICs1OTIsMjAgQEAKIAogICBwcm9jZXNzX3BlbmRpbmdfaGFuZGxlcyhkYXRhLT5tdWx0aSk7IC8qIGNvbm5lY3Rpb24gLyBtdWx0aXBsZXggKi8KIAotICBkZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CisgIENPTk5DQUNIRV9MT0NLKGRhdGEpOworICBDdXJsX2RldGFjaF9jb25ubmVjdGlvbihkYXRhKTsKICAgaWYoQ09OTl9JTlVTRShjb25uKSkgewogICAgIC8qIFN0b3AgaWYgc3RpbGwgdXNlZC4gKi8KKyAgICAvKiBjb25uLT5kYXRhIG11c3Qgbm90IHJlbWFpbiBwb2ludGluZyB0byB0aGlzIHRyYW5zZmVyIHNpbmNlIGl0IGlzIGdvaW5nCisgICAgICAgYXdheSEgRmluZCBhbm90aGVyIHRvIG93biBpdCEgKi8KKyAgICBjb25uLT5kYXRhID0gY29ubi0+ZWFzeXEuaGVhZC0+cHRyOworICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgICAgREVCVUdGKGluZm9mKGRhdGEsICJDb25uZWN0aW9uIHN0aWxsIGluIHVzZSAlenUsICIKICAgICAgICAgICAgICAgICAgIm5vIG1vcmUgbXVsdGlfZG9uZSBub3chXG4iLAogICAgICAgICAgICAgICAgICBjb25uLT5lYXN5cS5zaXplKSk7CiAgICAgcmV0dXJuIENVUkxFX09LOwogICB9Ci0KKyAgY29ubi0+ZGF0YSA9IE5VTEw7IC8qIHRoZSBjb25uZWN0aW9uIG5vdyBoYXMgbm8gb3duZXIgKi8KICAgZGF0YS0+c3RhdGUuZG9uZSA9IFRSVUU7IC8qIGNhbGxlZCBqdXN0IG5vdyEgKi8KIAogICBpZihjb25uLT5kbnNfZW50cnkpIHsKQEAgLTU2Nyw3ICs2MTgsNyBAQAogICAvKiBpZiB0aGUgdHJhbnNmZXIgd2FzIGNvbXBsZXRlZCBpbiBhIHBhdXNlZCBzdGF0ZSB0aGVyZSBjYW4gYmUgYnVmZmVyZWQKICAgICAgZGF0YSBsZWZ0IHRvIGZyZWUgKi8KICAgZm9yKGkgPSAwOyBpIDwgZGF0YS0+c3RhdGUudGVtcGNvdW50OyBpKyspIHsKLSAgICBmcmVlKGRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXS5idWYpOworICAgIEN1cmxfZHluX2ZyZWUoJmRhdGEtPnN0YXRlLnRlbXB3cml0ZVtpXS5iKTsKICAgfQogICBkYXRhLT5zdGF0ZS50ZW1wY291bnQgPSAwOwogCkBAIC01OTcsNyArNjQ4LDExIEBACiAjZW5kaWYKICAgICAgKSB8fCBjb25uLT5iaXRzLmNsb3NlCiAgICAgICAgfHwgKHByZW1hdHVyZSAmJiAhKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TVFJFQU0pKSkgewotICAgIENVUkxjb2RlIHJlczIgPSBDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY29ubiwgcHJlbWF0dXJlKTsKKyAgICBDVVJMY29kZSByZXMyOworICAgIGNvbm5jbG9zZShjb25uLCAiZGlzY29ubmVjdGluZyIpOworICAgIEN1cmxfY29ubmNhY2hlX3JlbW92ZV9jb25uKGRhdGEsIGNvbm4sIEZBTFNFKTsKKyAgICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOworICAgIHJlczIgPSBDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY29ubiwgcHJlbWF0dXJlKTsKIAogICAgIC8qIElmIHdlIGhhZCBhbiBlcnJvciBhbHJlYWR5LCBtYWtlIHN1cmUgd2UgcmV0dXJuIHRoYXQgb25lLiBCdXQKICAgICAgICBpZiB3ZSBnb3QgYSBuZXcgZXJyb3IsIHJldHVybiB0aGF0LiAqLwpAQCAtNjA2LDE3ICs2NjEsMjEgQEAKICAgfQogICBlbHNlIHsKICAgICBjaGFyIGJ1ZmZlclsyNTZdOworICAgIGNvbnN0IGNoYXIgKmhvc3QgPQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eSA/CisgICAgICBjb25uLT5zb2Nrc19wcm94eS5ob3N0LmRpc3BuYW1lIDoKKyAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ID8gY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lIDoKKyNlbmRpZgorICAgICAgY29ubi0+Yml0cy5jb25uX3RvX2hvc3QgPyBjb25uLT5jb25uX3RvX2hvc3QuZGlzcG5hbWUgOgorICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZTsKICAgICAvKiBjcmVhdGUgc3RyaW5nIGJlZm9yZSByZXR1cm5pbmcgdGhlIGNvbm5lY3Rpb24gKi8KICAgICBtc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24gIyVsZCB0byBob3N0ICVzIGxlZnQgaW50YWN0IiwKLSAgICAgICAgICAgICAgY29ubi0+Y29ubmVjdGlvbl9pZCwKLSAgICAgICAgICAgICAgY29ubi0+Yml0cy5zb2Nrc3Byb3h5ID8gY29ubi0+c29ja3NfcHJveHkuaG9zdC5kaXNwbmFtZSA6Ci0gICAgICAgICAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ID8gY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lIDoKLSAgICAgICAgICAgICAgY29ubi0+Yml0cy5jb25uX3RvX2hvc3QgPyBjb25uLT5jb25uX3RvX2hvc3QuZGlzcG5hbWUgOgotICAgICAgICAgICAgICBjb25uLT5ob3N0LmRpc3BuYW1lKTsKLQorICAgICAgICAgICAgICBjb25uLT5jb25uZWN0aW9uX2lkLCBob3N0KTsKICAgICAvKiB0aGUgY29ubmVjdGlvbiBpcyBubyBsb25nZXIgaW4gdXNlIGJ5IHRoaXMgdHJhbnNmZXIgKi8KLSAgICBpZihDdXJsX2Nvbm5jYWNoZV9yZXR1cm5fY29ubihjb25uKSkgeworICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CisgICAgaWYoQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oZGF0YSwgY29ubikpIHsKICAgICAgIC8qIHJlbWVtYmVyIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgY29ubmVjdGlvbiAqLwogICAgICAgZGF0YS0+c3RhdGUubGFzdGNvbm5lY3QgPSBjb25uOwogICAgICAgaW5mb2YoZGF0YSwgIiVzXG4iLCBidWZmZXIpOwpAQCAtNjI1LDYgKzY4NCw3IEBACiAgICAgICBkYXRhLT5zdGF0ZS5sYXN0Y29ubmVjdCA9IE5VTEw7CiAgIH0KIAorICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmJ1ZmZlcik7CiAgIEN1cmxfZnJlZV9yZXF1ZXN0X3N0YXRlKGRhdGEpOwogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjQ5LDYgKzcwOSwxMCBAQAogICBpZighZGF0YS0+bXVsdGkpCiAgICAgcmV0dXJuIENVUkxNX09LOyAvKiBpdCBpcyBhbHJlYWR5IHJlbW92ZWQgc28gbGV0J3Mgc2F5IGl0IGlzIGZpbmUhICovCiAKKyAgLyogUHJldmVudCB1c2VycyBmcm9tIHRyeWluZyB0byByZW1vdmUgYW4gZWFzeSBoYW5kbGUgZnJvbSB0aGUgd3JvbmcgbXVsdGkgKi8KKyAgaWYoZGF0YS0+bXVsdGkgIT0gbXVsdGkpCisgICAgcmV0dXJuIENVUkxNX0JBRF9FQVNZX0hBTkRMRTsKKwogICBpZihtdWx0aS0+aW5fY2FsbGJhY2spCiAgICAgcmV0dXJuIENVUkxNX1JFQ1VSU0lWRV9BUElfQ0FMTDsKIApAQCAtNjc0LDE5ICs3MzgsMTQgQEAKICAgICBlYXN5X293bnNfY29ubiA9IFRSVUU7CiAgIH0KIAotICAvKiBUaGUgdGltZXIgbXVzdCBiZSBzaHV0IGRvd24gYmVmb3JlIGRhdGEtPm11bHRpIGlzIHNldCB0byBOVUxMLAotICAgICBlbHNlIHRoZSB0aW1lbm9kZSB3aWxsIHJlbWFpbiBpbiB0aGUgc3BsYXkgdHJlZSBhZnRlcgotICAgICBjdXJsX2Vhc3lfY2xlYW51cCBpcyBjYWxsZWQuICovCi0gIEN1cmxfZXhwaXJlX2NsZWFyKGRhdGEpOwotCiAgIGlmKGRhdGEtPmNvbm4pIHsKIAogICAgIC8qIHdlIG11c3QgY2FsbCBtdWx0aV9kb25lKCkgaGVyZSAoaWYgd2Ugc3RpbGwgb3duIHRoZSBjb25uZWN0aW9uKSBzbyB0aGF0CiAgICAgICAgd2UgZG9uJ3QgbGVhdmUgYSBoYWxmLWJha2VkIG9uZSBhcm91bmQgKi8KICAgICBpZihlYXN5X293bnNfY29ubikgewogCi0gICAgICAvKiBtdWx0aV9kb25lKCkgY2xlYXJzIHRoZSBjb25uLT5kYXRhIGZpZWxkIHRvIGxvc2UgdGhlIGFzc29jaWF0aW9uCi0gICAgICAgICBiZXR3ZWVuIHRoZSBlYXN5IGhhbmRsZSBhbmQgdGhlIGNvbm5lY3Rpb24KKyAgICAgIC8qIG11bHRpX2RvbmUoKSBjbGVhcnMgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIGVhc3kgaGFuZGxlIGFuZCB0aGUKKyAgICAgICAgIGNvbm5lY3Rpb24uCiAKICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlnbm9yZXMgdGhlIHJldHVybiBjb2RlIHNpbXBseSBiZWNhdXNlIHRoZXJlJ3MKICAgICAgICAgIG5vdGhpbmcgcmVhbGx5IHVzZWZ1bCB0byBkbyB3aXRoIGl0IGFueXdheSEgKi8KQEAgLTY5NCw2ICs3NTMsMTEgQEAKICAgICB9CiAgIH0KIAorICAvKiBUaGUgdGltZXIgbXVzdCBiZSBzaHV0IGRvd24gYmVmb3JlIGRhdGEtPm11bHRpIGlzIHNldCB0byBOVUxMLCBlbHNlIHRoZQorICAgICB0aW1lbm9kZSB3aWxsIHJlbWFpbiBpbiB0aGUgc3BsYXkgdHJlZSBhZnRlciBjdXJsX2Vhc3lfY2xlYW51cCBpcworICAgICBjYWxsZWQuIERvIGl0IGFmdGVyIG11bHRpX2RvbmUoKSBpbiBjYXNlIHRoYXQgc2V0cyBhbm90aGVyIHRpbWUhICovCisgIEN1cmxfZXhwaXJlX2NsZWFyKGRhdGEpOworCiAgIGlmKGRhdGEtPmNvbm5lY3RfcXVldWUucHRyKQogICAgIC8qIHRoZSBoYW5kbGUgd2FzIGluIHRoZSBwZW5kaW5nIGxpc3Qgd2FpdGluZyBmb3IgYW4gYXZhaWxhYmxlIGNvbm5lY3Rpb24sCiAgICAgICAgc28gZ28gYWhlYWQgYW5kIHJlbW92ZSBpdCAqLwpAQCAtNzIzLDEwICs3ODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW5pc2ggd2l0aCB0aGlzIGhhbmRsZSAqLwogCiAgIC8qIFJlbW92ZSB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgY29ubmVjdGlvbiBhbmQgdGhlIGhhbmRsZSAqLwotICBpZihkYXRhLT5jb25uKSB7Ci0gICAgZGF0YS0+Y29ubi0+ZGF0YSA9IE5VTEw7Ci0gICAgZGV0YWNoX2Nvbm5uZWN0aW9uKGRhdGEpOwotICB9CisgIEN1cmxfZGV0YWNoX2Nvbm5uZWN0aW9uKGRhdGEpOwogCiAjaWZkZWYgVVNFX0xJQlBTTAogICAvKiBSZW1vdmUgdGhlIFBTTCBhc3NvY2lhdGlvbi4gKi8KQEAgLTc2NSw3ICs4MjYsNyBAQAogICAgICBXZSBkbyBub3QgdG91Y2ggdGhlIGVhc3kgaGFuZGxlIGhlcmUhICovCiAgIG11bHRpLT5udW1fZWFzeS0tOyAvKiBvbmUgbGVzcyB0byBjYXJlIGFib3V0IG5vdyAqLwogCi0gIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgIEN1cmxfdXBkYXRlX3RpbWVyKG11bHRpKTsKICAgcmV0dXJuIENVUkxNX09LOwogfQogCkBAIC03NzUsOSArODM2LDEzIEBACiAgIHJldHVybiAobXVsdGkgJiYgKG11bHRpLT5tdWx0aXBsZXhpbmcpKTsKIH0KIAotLyogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNob3VsZCBjbGVhciBkYXRhLT5jb25uLiBUaGlzIHdpbGwKLSAgIG9jY2FzaW9uYWxseSBiZSBjYWxsZWQgd2l0aCB0aGUgcG9pbnRlciBhbHJlYWR5IGNsZWFyZWQuICovCi1zdGF0aWMgdm9pZCBkZXRhY2hfY29ubm5lY3Rpb24oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKKy8qCisgKiBDdXJsX2RldGFjaF9jb25ubmVjdGlvbigpIHJlbW92ZXMgdGhlIGdpdmVuIHRyYW5zZmVyIGZyb20gdGhlIGNvbm5lY3Rpb24uCisgKgorICogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNob3VsZCBjbGVhciBkYXRhLT5jb25uLiBUaGlzIHdpbGwKKyAqIG9jY2FzaW9uYWxseSBiZSBjYWxsZWQgd2l0aCB0aGUgZGF0YS0+Y29ubiBwb2ludGVyIGFscmVhZHkgY2xlYXJlZC4KKyAqLwordm9pZCBDdXJsX2RldGFjaF9jb25ubmVjdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBkYXRhLT5jb25uOwogICBpZihjb25uKQpAQCAtNzg1LDcgKzg1MCwxMSBAQAogICBkYXRhLT5jb25uID0gTlVMTDsKIH0KIAotLyogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNob3VsZCBhc3NpZ24gZGF0YS0+Y29ubiAqLworLyoKKyAqIEN1cmxfYXR0YWNoX2Nvbm5uZWN0aW9uKCkgYXR0YWNoZXMgdGhpcyB0cmFuc2ZlciB0byB0aGlzIGNvbm5lY3Rpb24uCisgKgorICogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IHNob3VsZCBhc3NpZ24gZGF0YS0+Y29ubgorICovCiB2b2lkIEN1cmxfYXR0YWNoX2Nvbm5uZWN0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKQEAgLTc5NywyNSArODY2LDMyIEBACiB9CiAKIHN0YXRpYyBpbnQgd2FpdGNvbm5lY3RfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKIHsKICAgaW50IGk7CiAgIGludCBzID0gMDsKICAgaW50IHJjID0gMDsKIAotICBpZighbnVtc29ja3MpCi0gICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KICNpZmRlZiBVU0VfU1NMCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBpZihDT05ORUNUX0ZJUlNUU09DS0VUX1BST1hZX1NTTCgpKQotICAgIHJldHVybiBDdXJsX3NzbF9nZXRzb2NrKGNvbm4sIHNvY2ssIG51bXNvY2tzKTsKKyAgICByZXR1cm4gQ3VybF9zc2xfZ2V0c29jayhjb25uLCBzb2NrKTsKICNlbmRpZgorI2VuZGlmCisKKyAgaWYoU09DS1NfU1RBVEUoY29ubi0+Y25uY3Quc3RhdGUpKQorICAgIHJldHVybiBDdXJsX1NPQ0tTX2dldHNvY2soY29ubiwgc29jaywgRklSU1RTT0NLRVQpOwogCiAgIGZvcihpID0gMDsgaTwyOyBpKyspIHsKICAgICBpZihjb25uLT50ZW1wc29ja1tpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKICAgICAgIHNvY2tbc10gPSBjb25uLT50ZW1wc29ja1tpXTsKLSAgICAgIHJjIHw9IEdFVFNPQ0tfV1JJVEVTT0NLKHMrKyk7CisgICAgICByYyB8PSBHRVRTT0NLX1dSSVRFU09DSyhzKTsKKyNpZmRlZiBFTkFCTEVfUVVJQworICAgICAgaWYoY29ubi0+dHJhbnNwb3J0ID09IFRSTlNQUlRfUVVJQykKKyAgICAgICAgLyogd2hlbiBjb25uZWN0aW5nIFFVSUMsIHdlIHdhbnQgdG8gcmVhZCB0aGUgc29ja2V0IHRvbyAqLworICAgICAgICByYyB8PSBHRVRTT0NLX1JFQURTT0NLKHMpOworI2VuZGlmCisgICAgICBzKys7CiAgICAgfQogICB9CiAKQEAgLTgyMywxMiArODk5LDggQEAKIH0KIAogc3RhdGljIGludCB3YWl0cHJveHljb25uZWN0X2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCiB7Ci0gIGlmKCFudW1zb2NrcykKLSAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKLQogICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CiAKICAgLyogd2hlbiB3ZSd2ZSBzZW50IGEgQ09OTkVDVCB0byBhIHByb3h5LCB3ZSBzaG91bGQgcmF0aGVyIHdhaXQgZm9yIHRoZQpAQCAtODQwLDE5ICs5MTIsMzcgQEAKIH0KIAogc3RhdGljIGludCBkb21vcmVfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBpZihjb25uICYmIGNvbm4tPmhhbmRsZXItPmRvbW9yZV9nZXRzb2NrKQotICAgIHJldHVybiBjb25uLT5oYW5kbGVyLT5kb21vcmVfZ2V0c29jayhjb25uLCBzb2NrcywgbnVtc29ja3MpOworICAgIHJldHVybiBjb25uLT5oYW5kbGVyLT5kb21vcmVfZ2V0c29jayhjb25uLCBzb2Nrcyk7CiAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwogfQogCi0vKiByZXR1cm5zIGJpdG1hcHBlZCBmbGFncyBmb3IgdGhpcyBoYW5kbGUgYW5kIGl0cyBzb2NrZXRzICovCitzdGF0aWMgaW50IGRvaW5nX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQoreworICBpZihjb25uICYmIGNvbm4tPmhhbmRsZXItPmRvaW5nX2dldHNvY2spCisgICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPmRvaW5nX2dldHNvY2soY29ubiwgc29ja3MpOworICByZXR1cm4gR0VUU09DS19CTEFOSzsKK30KKworc3RhdGljIGludCBwcm90b2NvbF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9fZ2V0c29jaykKKyAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+cHJvdG9fZ2V0c29jayhjb25uLCBzb2Nrcyk7CisgIC8qIEJhY2t1cCBnZXRzb2NrIGxvZ2ljLiBTaW5jZSB0aGVyZSBpcyBhIGxpdmUgc29ja2V0IGluIHVzZSwgd2UgbXVzdCB3YWl0CisgICAgIGZvciBpdCBvciBpdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB3YXRjaGluZyB3aGVuIHRoZSBtdWx0aV9zb2NrZXQgQVBJIGlzCisgICAgIHVzZWQuICovCisgIHNvY2tzWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIHJldHVybiBHRVRTT0NLX1JFQURTT0NLKDApIHwgR0VUU09DS19XUklURVNPQ0soMCk7Cit9CisKKy8qIHJldHVybnMgYml0bWFwcGVkIGZsYWdzIGZvciB0aGlzIGhhbmRsZSBhbmQgaXRzIHNvY2tldHMuIFRoZSAnc29ja3NbXScKKyAgIGFycmF5IGNvbnRhaW5zIE1BWF9TT0NLU1BFUkVBU1lIQU5ETEUgZW50cmllcy4gKi8KIHN0YXRpYyBpbnQgbXVsdGlfZ2V0c29jayhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLCAvKiBwb2ludHMgdG8gbnVtc29ja3MgbnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7CiAgIC8qIFRoZSBubyBjb25uZWN0aW9uIGNhc2UgY2FuIGhhcHBlbiB3aGVuIHRoaXMgaXMgY2FsbGVkIGZyb20KICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCkgPT4gc2luZ2xlc29ja2V0KCkgPT4gbXVsdGlfZ2V0c29jaygpLgpAQCAtODg0LDMwICs5NzQsMzAgQEAKICAgICByZXR1cm4gMDsKIAogICBjYXNlIENVUkxNX1NUQVRFX1dBSVRSRVNPTFZFOgotICAgIHJldHVybiBDdXJsX3Jlc29sdl9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIEN1cmxfcmVzb2x2X2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MpOwogCiAgIGNhc2UgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNUOgogICBjYXNlIENVUkxNX1NUQVRFX1NFTkRQUk9UT0NPTk5FQ1Q6Ci0gICAgcmV0dXJuIEN1cmxfcHJvdG9jb2xfZ2V0c29jayhkYXRhLT5jb25uLCBzb2NrcywgbnVtc29ja3MpOworICAgIHJldHVybiBwcm90b2NvbF9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzKTsKIAogICBjYXNlIENVUkxNX1NUQVRFX0RPOgogICBjYXNlIENVUkxNX1NUQVRFX0RPSU5HOgotICAgIHJldHVybiBDdXJsX2RvaW5nX2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgICByZXR1cm4gZG9pbmdfZ2V0c29jayhkYXRhLT5jb25uLCBzb2Nrcyk7CiAKICAgY2FzZSBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUOgotICAgIHJldHVybiB3YWl0cHJveHljb25uZWN0X2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgICByZXR1cm4gd2FpdHByb3h5Y29ubmVjdF9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzKTsKIAogICBjYXNlIENVUkxNX1NUQVRFX1dBSVRDT05ORUNUOgotICAgIHJldHVybiB3YWl0Y29ubmVjdF9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisgICAgcmV0dXJuIHdhaXRjb25uZWN0X2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MpOwogCiAgIGNhc2UgQ1VSTE1fU1RBVEVfRE9fTU9SRToKLSAgICByZXR1cm4gZG9tb3JlX2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgICByZXR1cm4gZG9tb3JlX2dldHNvY2soZGF0YS0+Y29ubiwgc29ja3MpOwogCiAgIGNhc2UgQ1VSTE1fU1RBVEVfRE9fRE9ORTogLyogc2luY2UgaXMgc2V0IGFmdGVyIERPIGlzIGNvbXBsZXRlZCwgd2Ugc3dpdGNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gd2FpdGluZyBmb3IgdGhlIHNhbWUgYXMgdGhlICpQRVJGT1JNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzICovCiAgIGNhc2UgQ1VSTE1fU1RBVEVfUEVSRk9STToKLSAgICByZXR1cm4gQ3VybF9zaW5nbGVfZ2V0c29jayhkYXRhLT5jb25uLCBzb2NrcywgbnVtc29ja3MpOworICAgIHJldHVybiBDdXJsX3NpbmdsZV9nZXRzb2NrKGRhdGEtPmNvbm4sIHNvY2tzKTsKICAgfQogCiB9CkBAIC05MzMsNyArMTAyMyw3IEBACiAKICAgZGF0YSA9IG11bHRpLT5lYXN5cDsKICAgd2hpbGUoZGF0YSkgewotICAgIGludCBiaXRtYXAgPSBtdWx0aV9nZXRzb2NrKGRhdGEsIHNvY2tidW5jaCwgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRSk7CisgICAgaW50IGJpdG1hcCA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja2J1bmNoKTsKIAogICAgIGZvcihpID0gMDsgaTwgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRTsgaSsrKSB7CiAgICAgICBjdXJsX3NvY2tldF90IHMgPSBDVVJMX1NPQ0tFVF9CQUQ7CkBAIC05NjMsMTIgKzEwNTMsMTMgQEAKIAogI2RlZmluZSBOVU1fUE9MTFNfT05fU1RBQ0sgMTAKIAotQ1VSTE1jb2RlIEN1cmxfbXVsdGlfd2FpdChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3dhaXRmZCBleHRyYV9mZHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZ290c29ja2V0KSAvKiBpZiBhbnkgc29ja2V0IHdhcyBjaGVja2VkICovCitzdGF0aWMgQ1VSTE1jb2RlIEN1cmxfbXVsdGlfd2FpdChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF93YWl0ZmQgZXh0cmFfZmRzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXh0cmFfbmZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGV4dHJhd2FpdCwgLyogd2hlbiBubyBzb2NrZXQsIHdhaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX3dha2V1cCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YTsKICAgY3VybF9zb2NrZXRfdCBzb2NrYnVuY2hbTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRV07CkBAIC05ODIsMTkgKzEwNzMsMTkgQEAKICAgc3RydWN0IHBvbGxmZCBhX2Zld19vbl9zdGFja1tOVU1fUE9MTFNfT05fU1RBQ0tdOwogICBzdHJ1Y3QgcG9sbGZkICp1ZmRzID0gJmFfZmV3X29uX3N0YWNrWzBdOwogCi0gIGlmKGdvdHNvY2tldCkKLSAgICAqZ290c29ja2V0ID0gRkFMU0U7Ci0KICAgaWYoIUdPT0RfTVVMVElfSEFORExFKG11bHRpKSkKICAgICByZXR1cm4gQ1VSTE1fQkFEX0hBTkRMRTsKIAogICBpZihtdWx0aS0+aW5fY2FsbGJhY2spCiAgICAgcmV0dXJuIENVUkxNX1JFQ1VSU0lWRV9BUElfQ0FMTDsKIAorICBpZih0aW1lb3V0X21zIDwgMCkKKyAgICByZXR1cm4gQ1VSTE1fQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworCiAgIC8qIENvdW50IHVwIGhvdyBtYW55IGZkcyB3ZSBoYXZlIGZyb20gdGhlIG11bHRpIGhhbmRsZSAqLwogICBkYXRhID0gbXVsdGktPmVhc3lwOwogICB3aGlsZShkYXRhKSB7Ci0gICAgYml0bWFwID0gbXVsdGlfZ2V0c29jayhkYXRhLCBzb2NrYnVuY2gsIE1BWF9TT0NLU1BFUkVBU1lIQU5ETEUpOworICAgIGJpdG1hcCA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja2J1bmNoKTsKIAogICAgIGZvcihpID0gMDsgaTwgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRTsgaSsrKSB7CiAgICAgICBjdXJsX3NvY2tldF90IHMgPSBDVVJMX1NPQ0tFVF9CQUQ7CkBAIC0xMDI1LDYgKzExMTYsMTIgQEAKICAgY3VybGZkcyA9IG5mZHM7IC8qIG51bWJlciBvZiBpbnRlcm5hbCBmaWxlIGRlc2NyaXB0b3JzICovCiAgIG5mZHMgKz0gZXh0cmFfbmZkczsgLyogYWRkIHRoZSBleHRlcm5hbGx5IHByb3ZpZGVkIG9uZXMgKi8KIAorI2lmZGVmIEVOQUJMRV9XQUtFVVAKKyAgaWYodXNlX3dha2V1cCAmJiBtdWx0aS0+d2FrZXVwX3BhaXJbMF0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgKytuZmRzOworICB9CisjZW5kaWYKKwogICBpZihuZmRzID4gTlVNX1BPTExTX09OX1NUQUNLKSB7CiAgICAgLyogJ25mZHMnIGlzIGEgMzIgYml0IHZhbHVlIGFuZCAnc3RydWN0IHBvbGxmZCcgaXMgdHlwaWNhbGx5IDggYnl0ZXMKICAgICAgICBiaWcsIHNvIGF0IDJeMjkgc29ja2V0cyB0aGlzIHZhbHVlIG1pZ2h0IHdyYXAuIFdoZW4gYSBwcm9jZXNzIGdldHMKQEAgLTEwNDQsNyArMTE0MSw3IEBACiAgICAgLyogQWRkIHRoZSBjdXJsIGhhbmRsZXMgdG8gb3VyIHBvbGxmZHMgZmlyc3QgKi8KICAgICBkYXRhID0gbXVsdGktPmVhc3lwOwogICAgIHdoaWxlKGRhdGEpIHsKLSAgICAgIGJpdG1hcCA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja2J1bmNoLCBNQVhfU09DS1NQRVJFQVNZSEFORExFKTsKKyAgICAgIGJpdG1hcCA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja2J1bmNoKTsKIAogICAgICAgZm9yKGkgPSAwOyBpPCBNQVhfU09DS1NQRVJFQVNZSEFORExFOyBpKyspIHsKICAgICAgICAgY3VybF9zb2NrZXRfdCBzID0gQ1VSTF9TT0NLRVRfQkFEOwpAQCAtMTA4Myw2ICsxMTgwLDE0IEBACiAgICAgKytuZmRzOwogICB9CiAKKyNpZmRlZiBFTkFCTEVfV0FLRVVQCisgIGlmKHVzZV93YWtldXAgJiYgbXVsdGktPndha2V1cF9wYWlyWzBdICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgIHVmZHNbbmZkc10uZmQgPSBtdWx0aS0+d2FrZXVwX3BhaXJbMF07CisgICAgdWZkc1tuZmRzXS5ldmVudHMgPSBQT0xMSU47CisgICAgKytuZmRzOworICB9CisjZW5kaWYKKwogICBpZihuZmRzKSB7CiAgICAgaW50IHBvbGxyYzsKICAgICAvKiB3YWl0Li4uICovCkBAIC0xMTA2LDYgKzEyMTEsMzEgQEAKIAogICAgICAgICBleHRyYV9mZHNbaV0ucmV2ZW50cyA9IG1hc2s7CiAgICAgICB9CisKKyNpZmRlZiBFTkFCTEVfV0FLRVVQCisgICAgICBpZih1c2Vfd2FrZXVwICYmIG11bHRpLT53YWtldXBfcGFpclswXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgICAgaWYodWZkc1tjdXJsZmRzICsgZXh0cmFfbmZkc10ucmV2ZW50cyAmIFBPTExJTikgeworICAgICAgICAgIGNoYXIgYnVmWzY0XTsKKyAgICAgICAgICBzc2l6ZV90IG5yZWFkOworICAgICAgICAgIHdoaWxlKDEpIHsKKyAgICAgICAgICAgIC8qIHRoZSByZWFkaW5nIHNvY2tldCBpcyBub24tYmxvY2tpbmcsIHRyeSB0byByZWFkCisgICAgICAgICAgICAgICBkYXRhIGZyb20gaXQgdW50aWwgaXQgcmVjZWl2ZXMgYW4gZXJyb3IgKGV4Y2VwdCBFSU5UUikuCisgICAgICAgICAgICAgICBJbiBub3JtYWwgY2FzZXMgaXQgd2lsbCBnZXQgRUFHQUlOIG9yIEVXT1VMREJMT0NLCisgICAgICAgICAgICAgICB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSwgYnJlYWtpbmcgdGhlIGxvb3AuICovCisgICAgICAgICAgICBucmVhZCA9IHNyZWFkKG11bHRpLT53YWtldXBfcGFpclswXSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICBpZihucmVhZCA8PSAwKSB7CisjaWZuZGVmIFVTRV9XSU5TT0NLCisgICAgICAgICAgICAgIGlmKG5yZWFkIDwgMCAmJiBFSU5UUiA9PSBTT0NLRVJSTk8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIC8qIGRvIG5vdCBjb3VudCB0aGUgd2FrZXVwIHNvY2tldCBpbnRvIHRoZSByZXR1cm5lZCB2YWx1ZSAqLworICAgICAgICAgIHJldGNvZGUtLTsKKyAgICAgICAgfQorICAgICAgfQorI2VuZGlmCiAgICAgfQogICB9CiAKQEAgLTExMTMsOSArMTI0MywyMyBAQAogICAgIGZyZWUodWZkcyk7CiAgIGlmKHJldCkKICAgICAqcmV0ID0gcmV0Y29kZTsKLSAgaWYoZ290c29ja2V0ICYmIChleHRyYV9mZHMgfHwgY3VybGZkcykpCisgIGlmKCFleHRyYXdhaXQgfHwgbmZkcykKICAgICAvKiBpZiBhbnkgc29ja2V0IHdhcyBjaGVja2VkICovCi0gICAgKmdvdHNvY2tldCA9IFRSVUU7CisgICAgOworICBlbHNlIHsKKyAgICBsb25nIHNsZWVwX21zID0gMDsKKworICAgIC8qIEF2b2lkIGJ1c3ktbG9vcGluZyB3aGVuIHRoZXJlJ3Mgbm90aGluZyBwYXJ0aWN1bGFyIHRvIHdhaXQgZm9yICovCisgICAgaWYoIWN1cmxfbXVsdGlfdGltZW91dChtdWx0aSwgJnNsZWVwX21zKSAmJiBzbGVlcF9tcykgeworICAgICAgaWYoc2xlZXBfbXMgPiB0aW1lb3V0X21zKQorICAgICAgICBzbGVlcF9tcyA9IHRpbWVvdXRfbXM7CisgICAgICAvKiB3aGVuIHRoZXJlIGFyZSBubyBlYXN5IGhhbmRsZXMgaW4gdGhlIG11bHRpLCB0aGlzIGhvbGRzIGEgLTEKKyAgICAgICAgIHRpbWVvdXQgKi8KKyAgICAgIGVsc2UgaWYoKHNsZWVwX21zIDwgMCkgJiYgZXh0cmF3YWl0KQorICAgICAgICBzbGVlcF9tcyA9IHRpbWVvdXRfbXM7CisgICAgICBDdXJsX3dhaXRfbXMoc2xlZXBfbXMpOworICAgIH0KKyAgfQogCiAgIHJldHVybiBDVVJMTV9PSzsKIH0KQEAgLTExMjYsNyArMTI3MCw2NSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dF9tcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZXQpCiB7Ci0gIHJldHVybiBDdXJsX211bHRpX3dhaXQobXVsdGksIGV4dHJhX2ZkcywgZXh0cmFfbmZkcywgdGltZW91dF9tcywgcmV0LCBOVUxMKTsKKyAgcmV0dXJuIEN1cmxfbXVsdGlfd2FpdChtdWx0aSwgZXh0cmFfZmRzLCBleHRyYV9uZmRzLCB0aW1lb3V0X21zLCByZXQsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKK30KKworQ1VSTE1jb2RlIGN1cmxfbXVsdGlfcG9sbChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3dhaXRmZCBleHRyYV9mZHNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCkKK3sKKyAgcmV0dXJuIEN1cmxfbXVsdGlfd2FpdChtdWx0aSwgZXh0cmFfZmRzLCBleHRyYV9uZmRzLCB0aW1lb3V0X21zLCByZXQsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7Cit9CisKK0NVUkxNY29kZSBjdXJsX211bHRpX3dha2V1cChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpCit7CisgIC8qIHRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZCwKKyAgICAgaXQgaGFzIHRvIGJlIGNhcmVmdWwgb25seSB0byBhY2Nlc3MgcGFydHMgb2YgdGhlCisgICAgIEN1cmxfbXVsdGkgc3RydWN0IHRoYXQgYXJlIGNvbnN0YW50ICovCisKKyAgLyogR09PRF9NVUxUSV9IQU5ETEUgY2FuIGJlIHNhZmVseSBjYWxsZWQgKi8KKyAgaWYoIUdPT0RfTVVMVElfSEFORExFKG11bHRpKSkKKyAgICByZXR1cm4gQ1VSTE1fQkFEX0hBTkRMRTsKKworI2lmZGVmIEVOQUJMRV9XQUtFVVAKKyAgLyogdGhlIHdha2V1cF9wYWlyIHZhcmlhYmxlIGlzIG9ubHkgd3JpdHRlbiBkdXJpbmcgaW5pdCBhbmQgY2xlYW51cCwKKyAgICAgbWFraW5nIGl0IHNhZmUgdG8gYWNjZXNzIGZyb20gYW5vdGhlciB0aHJlYWQgYWZ0ZXIgdGhlIGluaXQgcGFydAorICAgICBhbmQgYmVmb3JlIGNsZWFudXAgKi8KKyAgaWYobXVsdGktPndha2V1cF9wYWlyWzFdICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgIGNoYXIgYnVmWzFdOworICAgIGJ1ZlswXSA9IDE7CisgICAgd2hpbGUoMSkgeworICAgICAgLyogc3dyaXRlKCkgaXMgbm90IHRocmVhZC1zYWZlIGluIGdlbmVyYWwsIGJlY2F1c2UgY29uY3VycmVudCBjYWxscworICAgICAgICAgY2FuIGhhdmUgdGhlaXIgbWVzc2FnZXMgaW50ZXJsZWF2ZWQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGNvbnRlbnQKKyAgICAgICAgIG9mIHRoZSBtZXNzYWdlcyBkb2VzIG5vdCBtYXR0ZXIsIHdoaWNoIG1ha2VzIGl0IG9rIHRvIGNhbGwuCisKKyAgICAgICAgIFRoZSB3cml0ZSBzb2NrZXQgaXMgc2V0IHRvIG5vbi1ibG9ja2luZywgdGhpcyB3YXkgdGhpcyBmdW5jdGlvbgorICAgICAgICAgY2Fubm90IGJsb2NrLCBtYWtpbmcgaXQgc2FmZSB0byBjYWxsIGV2ZW4gZnJvbSB0aGUgc2FtZSB0aHJlYWQKKyAgICAgICAgIHRoYXQgd2lsbCBjYWxsIEN1cmxfbXVsdGlfd2FpdCgpLiBJZiBzd3JpdGUoKSByZXR1cm5zIHRoYXQgaXQKKyAgICAgICAgIHdvdWxkIGJsb2NrLCBpdCdzIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQKKyAgICAgICAgIHByZXZpb3VzIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCB3YWtlIHVwIHRoZSBwb2xsKCkuICovCisgICAgICBpZihzd3JpdGUobXVsdGktPndha2V1cF9wYWlyWzFdLCBidWYsIHNpemVvZihidWYpKSA8IDApIHsKKyAgICAgICAgaW50IGVyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgaW50IHJldHVybl9zdWNjZXNzOworI2lmZGVmIFVTRV9XSU5TT0NLCisgICAgICAgIHJldHVybl9zdWNjZXNzID0gV1NBRVdPVUxEQkxPQ0sgPT0gZXJyOworI2Vsc2UKKyAgICAgICAgaWYoRUlOVFIgPT0gZXJyKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm5fc3VjY2VzcyA9IEVXT1VMREJMT0NLID09IGVyciB8fCBFQUdBSU4gPT0gZXJyOworI2VuZGlmCisgICAgICAgIGlmKCFyZXR1cm5fc3VjY2VzcykKKyAgICAgICAgICByZXR1cm4gQ1VSTE1fV0FLRVVQX0ZBSUxVUkU7CisgICAgICB9CisgICAgICByZXR1cm4gQ1VSTE1fT0s7CisgICAgfQorICB9CisjZW5kaWYKKyAgcmV0dXJuIENVUkxNX1dBS0VVUF9GQUlMVVJFOwogfQogCiAvKgpAQCAtMTE4OSw2ICsxMzkxLDcgQEAKIAogICBERUJVR0FTU0VSVChjb25uKTsKICAgREVCVUdBU1NFUlQoY29ubi0+aGFuZGxlcik7CisgIERFQlVHQVNTRVJUKGNvbm4tPmRhdGEgPT0gZGF0YSk7CiAKICAgaWYoY29ubi0+aGFuZGxlci0+ZG9faXQpIHsKICAgICAvKiBnZW5lcmljIHByb3RvY29sLXNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXIgc2V0IGluIGN1cmxfY29ubmVjdCgpICovCkBAIC0xMjI2LDYgKzE0MjksMTI0IEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBXZSBhcmUgZG9pbmcgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdGluZyBhbmQgdGhpcyBpcyBiZWluZyBjYWxsZWQgb3ZlciBhbmQKKyAqIG92ZXIgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIHVudGlsIHRoZSBjb25uZWN0aW9uIHBoYXNlIGlzIGRvbmUgb24KKyAqIHByb3RvY29sIGxheWVyLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBwcm90b2NvbF9jb25uZWN0aW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIGlmKGNvbm4gJiYgY29ubi0+aGFuZGxlci0+Y29ubmVjdGluZykgeworICAgICpkb25lID0gRkFMU0U7CisgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+Y29ubmVjdGluZyhjb25uLCBkb25lKTsKKyAgfQorICBlbHNlCisgICAgKmRvbmUgPSBUUlVFOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBXZSBhcmUgRE9JTkcgdGhpcyBpcyBiZWluZyBjYWxsZWQgb3ZlciBhbmQgb3ZlciBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UKKyAqIHVudGlsIHRoZSBET0lORyBwaGFzZSBpcyBkb25lIG9uIHByb3RvY29sIGxheWVyLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBwcm90b2NvbF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIGlmKGNvbm4gJiYgY29ubi0+aGFuZGxlci0+ZG9pbmcpIHsKKyAgICAqZG9uZSA9IEZBTFNFOworICAgIHJlc3VsdCA9IGNvbm4tPmhhbmRsZXItPmRvaW5nKGNvbm4sIGRvbmUpOworICB9CisgIGVsc2UKKyAgICAqZG9uZSA9IFRSVUU7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFdlIGhhdmUgZGlzY292ZXJlZCB0aGF0IHRoZSBUQ1AgY29ubmVjdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsLCB3ZSBjYW4gbm93CisgKiBwcm9jZWVkIHdpdGggc29tZSBhY3Rpb24uCisgKgorICovCitzdGF0aWMgQ1VSTGNvZGUgcHJvdG9jb2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpwcm90b2NvbF9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICBERUJVR0FTU0VSVChjb25uKTsKKyAgREVCVUdBU1NFUlQocHJvdG9jb2xfZG9uZSk7CisKKyAgKnByb3RvY29sX2RvbmUgPSBGQUxTRTsKKworICBpZihjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdICYmIGNvbm4tPmJpdHMucHJvdG9jb25uc3RhcnQpIHsKKyAgICAvKiBXZSBhbHJlYWR5IGFyZSBjb25uZWN0ZWQsIGdldCBiYWNrLiBUaGlzIG1heSBoYXBwZW4gd2hlbiB0aGUgY29ubmVjdAorICAgICAgIHdvcmtlZCBmaW5lIGluIHRoZSBmaXJzdCBjYWxsLCBsaWtlIHdoZW4gd2UgY29ubmVjdCB0byBhIGxvY2FsIHNlcnZlcgorICAgICAgIG9yIHByb3h5LiBOb3RlIHRoYXQgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcHJvdG9jb2wgaXMgYWN0dWFsbHkgZG9uZS4KKworICAgICAgIFVubGVzcyB0aGlzIHByb3RvY29sIGRvZXNuJ3QgaGF2ZSBhbnkgcHJvdG9jb2wtY29ubmVjdCBjYWxsYmFjaywgYXMKKyAgICAgICB0aGVuIHdlIGtub3cgd2UncmUgZG9uZS4gKi8KKyAgICBpZighY29ubi0+aGFuZGxlci0+Y29ubmVjdGluZykKKyAgICAgICpwcm90b2NvbF9kb25lID0gVFJVRTsKKworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorCisgIGlmKCFjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0KSB7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgIHJlc3VsdCA9IEN1cmxfcHJveHlfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmKENPTk5FQ1RfRklSU1RTT0NLRVRfUFJPWFlfU1NMKCkpCisgICAgICAvKiB3YWl0IGZvciBIVFRQUyBwcm94eSBTU0wgaW5pdGlhbGl6YXRpb24gdG8gY29tcGxldGUgKi8KKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKworICAgIGlmKGNvbm4tPmJpdHMudHVubmVsX3Byb3h5ICYmIGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmCisgICAgICAgQ3VybF9jb25uZWN0X29uZ29pbmcoY29ubikpCisgICAgICAvKiB3aGVuIHVzaW5nIGFuIEhUVFAgdHVubmVsIHByb3h5LCBhd2FpdCBjb21wbGV0ZSB0dW5uZWwgZXN0YWJsaXNobWVudAorICAgICAgICAgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4gUmV0dXJuIENVUkxFX09LIHNvIHdlJ2xsIGJlIGNhbGxlZCBhZ2FpbiAqLworICAgICAgcmV0dXJuIENVUkxFX09LOworI2VuZGlmCisgICAgaWYoY29ubi0+aGFuZGxlci0+Y29ubmVjdF9pdCkgeworICAgICAgLyogaXMgdGhlcmUgYSBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0KCkgcHJvY2VkdXJlPyAqLworCisgICAgICAvKiBDYWxsIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0IGZ1bmN0aW9uICovCisgICAgICByZXN1bHQgPSBjb25uLT5oYW5kbGVyLT5jb25uZWN0X2l0KGNvbm4sIHByb3RvY29sX2RvbmUpOworICAgIH0KKyAgICBlbHNlCisgICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7CisKKyAgICAvKiBpdCBoYXMgc3RhcnRlZCwgcG9zc2libHkgZXZlbiBjb21wbGV0ZWQgYnV0IHRoYXQga25vd2xlZGdlIGlzbid0IHN0b3JlZAorICAgICAgIGluIHRoaXMgYml0ISAqLworICAgIGlmKCFyZXN1bHQpCisgICAgICBjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0ID0gVFJVRTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7IC8qIHBhc3MgYmFjayBzdGF0dXMgKi8KK30KKworLyoKKyAqIEN1cmxfcHJlY29ubmVjdCgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgYSBjb25uZWN0IHN0YXJ0cy4gV2hlbiBhCisgKiByZWRpcmVjdCBpcyBmb2xsb3dlZCwgdGhpcyBpcyB0aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBzaW5nbGUKKyAqIHRyYW5zZmVyLgorICovCitDVVJMY29kZSBDdXJsX3ByZWNvbm5lY3Qoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKK3sKKyAgaWYoIWRhdGEtPnN0YXRlLmJ1ZmZlcikgeworICAgIGRhdGEtPnN0YXRlLmJ1ZmZlciA9IG1hbGxvYyhkYXRhLT5zZXQuYnVmZmVyX3NpemUgKyAxKTsKKyAgICBpZighZGF0YS0+c3RhdGUuYnVmZmVyKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKIHN0YXRpYyBDVVJMTWNvZGUgbXVsdGlfcnVuc2luZ2xlKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsdGltZSBub3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQpAQCAtMTIzMyw3ICsxNTU0LDcgQEAKICAgc3RydWN0IEN1cmxfbWVzc2FnZSAqbXNnID0gTlVMTDsKICAgYm9vbCBjb25uZWN0ZWQ7CiAgIGJvb2wgYXN5bmM7Ci0gIGJvb2wgcHJvdG9jb2xfY29ubmVjdCA9IEZBTFNFOworICBib29sIHByb3RvY29sX2Nvbm5lY3RlZCA9IEZBTFNFOwogICBib29sIGRvcGhhc2VfZG9uZSA9IEZBTFNFOwogICBib29sIGRvbmUgPSBGQUxTRTsKICAgQ1VSTE1jb2RlIHJjOwpAQCAtMTI1MiwxNiArMTU3Myw2IEBACiAgICAgYm9vbCBzdHJlYW1fZXJyb3IgPSBGQUxTRTsKICAgICByYyA9IENVUkxNX09LOwogCi0gICAgaWYoIWRhdGEtPmNvbm4gJiYKLSAgICAgICBkYXRhLT5tc3RhdGUgPiBDVVJMTV9TVEFURV9DT05ORUNUICYmCi0gICAgICAgZGF0YS0+bXN0YXRlIDwgQ1VSTE1fU1RBVEVfRE9ORSkgewotICAgICAgLyogSW4gYWxsIHRoZXNlIHN0YXRlcywgdGhlIGNvZGUgd2lsbCBibGluZGx5IGFjY2VzcyAnZGF0YS0+Y29ubicKLSAgICAgICAgIHNvIHRoaXMgaXMgcHJlY2F1dGlvbiB0aGF0IGl0IGlzbid0IE5VTEwuIEFuZCBpdCBzaWxlbmNlcyBzdGF0aWMKLSAgICAgICAgIGFuYWx5emVycy4gKi8KLSAgICAgIGZhaWxmKGRhdGEsICJJbiBzdGF0ZSAlZCB3aXRoIG5vIGNvbm4sIGJhaWwgb3V0IVxuIiwgZGF0YS0+bXN0YXRlKTsKLSAgICAgIHJldHVybiBDVVJMTV9JTlRFUk5BTF9FUlJPUjsKLSAgICB9Ci0KICAgICBpZihtdWx0aV9pc2NoYW5nZWQobXVsdGksIFRSVUUpKSB7CiAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIm11bHRpIGNoYW5nZWQsIGNoZWNrIENPTk5FQ1RfUEVORCBxdWV1ZSFcbiIpKTsKICAgICAgIHByb2Nlc3NfcGVuZGluZ19oYW5kbGVzKG11bHRpKTsgLyogbXVsdGlwbGV4ZWQgKi8KQEAgLTEzNDIsNiArMTY1MywxMSBAQAogCiAgICAgY2FzZSBDVVJMTV9TVEFURV9DT05ORUNUOgogICAgICAgLyogQ29ubmVjdC4gV2Ugd2FudCB0byBnZXQgYSBjb25uZWN0aW9uIGlkZW50aWZpZXIgZmlsbGVkIGluLiAqLworICAgICAgLyogaW5pdCB0aGlzIHRyYW5zZmVyLiAqLworICAgICAgcmVzdWx0ID0gQ3VybF9wcmVjb25uZWN0KGRhdGEpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBicmVhazsKKwogICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9TVEFSVFNJTkdMRSk7CiAgICAgICBpZihkYXRhLT5zZXQudGltZW91dCkKICAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgZGF0YS0+c2V0LnRpbWVvdXQsIEVYUElSRV9USU1FT1VUKTsKQEAgLTEzNDksNyArMTY2NSw3IEBACiAgICAgICBpZihkYXRhLT5zZXQuY29ubmVjdHRpbWVvdXQpCiAgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIGRhdGEtPnNldC5jb25uZWN0dGltZW91dCwgRVhQSVJFX0NPTk5FQ1RUSU1FT1VUKTsKIAotICAgICAgcmVzdWx0ID0gQ3VybF9jb25uZWN0KGRhdGEsICZhc3luYywgJnByb3RvY29sX2Nvbm5lY3QpOworICAgICAgcmVzdWx0ID0gQ3VybF9jb25uZWN0KGRhdGEsICZhc3luYywgJnByb3RvY29sX2Nvbm5lY3RlZCk7CiAgICAgICBpZihDVVJMRV9OT19DT05ORUNUSU9OX0FWQUlMQUJMRSA9PSByZXN1bHQpIHsKICAgICAgICAgLyogVGhlcmUgd2FzIG5vIGNvbm5lY3Rpb24gYXZhaWxhYmxlLiBXZSB3aWxsIGdvIHRvIHRoZSBwZW5kaW5nCiAgICAgICAgICAgIHN0YXRlIGFuZCB3YWl0IGZvciBhbiBhdmFpbGFibGUgY29ubmVjdGlvbi4gKi8KQEAgLTEzNzcsNyArMTY5Myw3IEBACiAgICAgICAgICAgICAgV0FJVERPIG9yIERPISAqLwogICAgICAgICAgIHJjID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOwogCi0gICAgICAgICAgaWYocHJvdG9jb2xfY29ubmVjdCkKKyAgICAgICAgICBpZihwcm90b2NvbF9jb25uZWN0ZWQpCiAgICAgICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX0RPKTsKICAgICAgICAgICBlbHNlIHsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKQEAgLTEzOTksOSArMTcxNSwxMiBAQAogICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWU7CiAKICAgICAgIERFQlVHQVNTRVJUKGNvbm4pOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQogICAgICAgICBob3N0bmFtZSA9IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lOwotICAgICAgZWxzZSBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKICAgICAgICAgaG9zdG5hbWUgPSBjb25uLT5jb25uX3RvX2hvc3QubmFtZTsKICAgICAgIGVsc2UKICAgICAgICAgaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CkBAIC0xNDMyLDcgKzE3NTEsNyBAQAogICAgICAgaWYoZG5zKSB7CiAgICAgICAgIC8qIFBlcmZvcm0gdGhlIG5leHQgc3RlcCBpbiB0aGUgY29ubmVjdGlvbiBwaGFzZSwgYW5kIHRoZW4gbW92ZSBvbgogICAgICAgICAgICB0byB0aGUgV0FJVENPTk5FQ1Qgc3RhdGUgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9vbmNlX3Jlc29sdmVkKGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0KTsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9vbmNlX3Jlc29sdmVkKGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0ZWQpOwogCiAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAvKiBpZiBDdXJsX29uY2VfcmVzb2x2ZWQoKSByZXR1cm5zIGZhaWx1cmUsIHRoZSBjb25uZWN0aW9uIHN0cnVjdApAQCAtMTQ0MSw3ICsxNzYwLDcgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgLyogY2FsbCBhZ2FpbiBwbGVhc2Ugc28gdGhhdCB3ZSBnZXQgdGhlIG5leHQgc29ja2V0IHNldHVwICovCiAgICAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07Ci0gICAgICAgICAgaWYocHJvdG9jb2xfY29ubmVjdCkKKyAgICAgICAgICBpZihwcm90b2NvbF9jb25uZWN0ZWQpCiAgICAgICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX0RPKTsKICAgICAgICAgICBlbHNlIHsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKQEAgLTE0NjYsOCArMTc4NSw4IEBACiAgICAgY2FzZSBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUOgogICAgICAgLyogdGhpcyBpcyBIVFRQLXNwZWNpZmljLCBidXQgc2VuZGluZyBDT05ORUNUIHRvIGEgcHJveHkgaXMgSFRUUC4uLiAqLwogICAgICAgREVCVUdBU1NFUlQoZGF0YS0+Y29ubik7Ci0gICAgICByZXN1bHQgPSBDdXJsX2h0dHBfY29ubmVjdChkYXRhLT5jb25uLCAmcHJvdG9jb2xfY29ubmVjdCk7Ci0KKyAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cF9jb25uZWN0KGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0ZWQpOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgIGlmKGRhdGEtPmNvbm4tPmJpdHMucHJveHlfY29ubmVjdF9jbG9zZWQpIHsKICAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CiAgICAgICAgIC8qIGNvbm5lY3QgYmFjayB0byBwcm94eSBhZ2FpbiAqLwpAQCAtMTQ3NSwxNSArMTc5NCwyMCBAQAogICAgICAgICBtdWx0aV9kb25lKGRhdGEsIENVUkxFX09LLCBGQUxTRSk7CiAgICAgICAgIG11bHRpc3RhdGUoZGF0YSwgQ1VSTE1fU1RBVEVfQ09OTkVDVCk7CiAgICAgICB9Ci0gICAgICBlbHNlIGlmKCFyZXN1bHQpIHsKLSAgICAgICAgaWYoKGRhdGEtPmNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlICE9IENVUkxQUk9YWV9IVFRQUyB8fAotICAgICAgICAgICBkYXRhLT5jb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbRklSU1RTT0NLRVRdKSAmJgotICAgICAgICAgICBDdXJsX2Nvbm5lY3RfY29tcGxldGUoZGF0YS0+Y29ubikpIHsKLSAgICAgICAgICByYyA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKLSAgICAgICAgICAvKiBpbml0aWF0ZSBwcm90b2NvbCBjb25uZWN0IHBoYXNlICovCi0gICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9TRU5EUFJPVE9DT05ORUNUKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBpZighcmVzdWx0KSB7CisgICAgICAgICAgaWYoCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgICAgICAgKGRhdGEtPmNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlICE9IENVUkxQUk9YWV9IVFRQUyB8fAorICAgICAgICAgICAgIGRhdGEtPmNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtGSVJTVFNPQ0tFVF0pICYmCisjZW5kaWYKKyAgICAgICAgICAgIEN1cmxfY29ubmVjdF9jb21wbGV0ZShkYXRhLT5jb25uKSkgeworICAgICAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICAgICAgICAvKiBpbml0aWF0ZSBwcm90b2NvbCBjb25uZWN0IHBoYXNlICovCisgICAgICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX1NFTkRQUk9UT0NPTk5FQ1QpOworICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgfQogICAgICAgZWxzZSBpZihyZXN1bHQpCiAgICAgICAgIHN0cmVhbV9lcnJvciA9IFRSVUU7CiAgICAgICBicmVhazsKQEAgLTE0OTUsMTcgKzE4MTksMjUgQEAKICAgICAgIHJlc3VsdCA9IEN1cmxfaXNfY29ubmVjdGVkKGRhdGEtPmNvbm4sIEZJUlNUU09DS0VULCAmY29ubmVjdGVkKTsKICAgICAgIGlmKGNvbm5lY3RlZCAmJiAhcmVzdWx0KSB7CiAjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCi0gICAgICAgIGlmKChkYXRhLT5jb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMgJiYKLSAgICAgICAgICAgICFkYXRhLT5jb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbRklSU1RTT0NLRVRdKSB8fAotICAgICAgICAgICBDdXJsX2Nvbm5lY3Rfb25nb2luZyhkYXRhLT5jb25uKSkgeworICAgICAgICBpZigKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICAgICAgKGRhdGEtPmNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQUyAmJgorICAgICAgICAgICAhZGF0YS0+Y29ubi0+Yml0cy5wcm94eV9zc2xfY29ubmVjdGVkW0ZJUlNUU09DS0VUXSkgfHwKKyNlbmRpZgorICAgICAgICAgIEN1cmxfY29ubmVjdF9vbmdvaW5nKGRhdGEtPmNvbm4pKSB7CiAgICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIHJjID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOwotICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIGRhdGEtPmNvbm4tPmJpdHMudHVubmVsX3Byb3h5PworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAgICAgbXVsdGlzdGF0ZShkYXRhLAorICAgICAgICAgICAgICAgICAgIGRhdGEtPmNvbm4tPmJpdHMudHVubmVsX3Byb3h5PwogICAgICAgICAgICAgICAgICAgIENVUkxNX1NUQVRFX1dBSVRQUk9YWUNPTk5FQ1Q6CiAgICAgICAgICAgICAgICAgICAgQ1VSTE1fU1RBVEVfU0VORFBST1RPQ09OTkVDVCk7CisjZWxzZQorICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX1NFTkRQUk9UT0NPTk5FQ1QpOworI2VuZGlmCiAgICAgICB9CiAgICAgICBlbHNlIGlmKHJlc3VsdCkgewogICAgICAgICAvKiBmYWlsdXJlIGRldGVjdGVkICovCkBAIC0xNTE3LDggKzE4NDksOCBAQAogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENVUkxNX1NUQVRFX1NFTkRQUk9UT0NPTk5FQ1Q6Ci0gICAgICByZXN1bHQgPSBDdXJsX3Byb3RvY29sX2Nvbm5lY3QoZGF0YS0+Y29ubiwgJnByb3RvY29sX2Nvbm5lY3QpOwotICAgICAgaWYoIXJlc3VsdCAmJiAhcHJvdG9jb2xfY29ubmVjdCkKKyAgICAgIHJlc3VsdCA9IHByb3RvY29sX2Nvbm5lY3QoZGF0YS0+Y29ubiwgJnByb3RvY29sX2Nvbm5lY3RlZCk7CisgICAgICBpZighcmVzdWx0ICYmICFwcm90b2NvbF9jb25uZWN0ZWQpCiAgICAgICAgIC8qIHN3aXRjaCB0byB3YWl0aW5nIHN0YXRlICovCiAgICAgICAgIG11bHRpc3RhdGUoZGF0YSwgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNUKTsKICAgICAgIGVsc2UgaWYoIXJlc3VsdCkgewpAQCAtMTUzNiw4ICsxODY4LDggQEAKIAogICAgIGNhc2UgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNUOgogICAgICAgLyogcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdCBwaGFzZSAqLwotICAgICAgcmVzdWx0ID0gQ3VybF9wcm90b2NvbF9jb25uZWN0aW5nKGRhdGEtPmNvbm4sICZwcm90b2NvbF9jb25uZWN0KTsKLSAgICAgIGlmKCFyZXN1bHQgJiYgcHJvdG9jb2xfY29ubmVjdCkgeworICAgICAgcmVzdWx0ID0gcHJvdG9jb2xfY29ubmVjdGluZyhkYXRhLT5jb25uLCAmcHJvdG9jb2xfY29ubmVjdGVkKTsKKyAgICAgIGlmKCFyZXN1bHQgJiYgcHJvdG9jb2xfY29ubmVjdGVkKSB7CiAgICAgICAgIC8qIGFmdGVyIHRoZSBjb25uZWN0IGhhcyBjb21wbGV0ZWQsIGdvIFdBSVRETyBvciBETyAqLwogICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX0RPKTsKICAgICAgICAgcmMgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CkBAIC0xNjU5LDggKzE5OTEsNyBAQAogICAgIGNhc2UgQ1VSTE1fU1RBVEVfRE9JTkc6CiAgICAgICAvKiB3ZSBjb250aW51ZSBET0lORyB1bnRpbCB0aGUgRE8gcGhhc2UgaXMgY29tcGxldGUgKi8KICAgICAgIERFQlVHQVNTRVJUKGRhdGEtPmNvbm4pOwotICAgICAgcmVzdWx0ID0gQ3VybF9wcm90b2NvbF9kb2luZyhkYXRhLT5jb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9waGFzZV9kb25lKTsKKyAgICAgIHJlc3VsdCA9IHByb3RvY29sX2RvaW5nKGRhdGEtPmNvbm4sICZkb3BoYXNlX2RvbmUpOwogICAgICAgaWYoIXJlc3VsdCkgewogICAgICAgICBpZihkb3BoYXNlX2RvbmUpIHsKICAgICAgICAgICAvKiBhZnRlciBETywgZ28gRE9fRE9ORSBvciBET19NT1JFICovCkBAIC0xNzcyLDcgKzIxMDMsNyBAQAogICAgICAgY2hhciAqbmV3dXJsID0gTlVMTDsKICAgICAgIGJvb2wgcmV0cnkgPSBGQUxTRTsKICAgICAgIGJvb2wgY29tZWJhY2sgPSBGQUxTRTsKLQorICAgICAgREVCVUdBU1NFUlQoZGF0YS0+c3RhdGUuYnVmZmVyKTsKICAgICAgIC8qIGNoZWNrIGlmIG92ZXIgc2VuZCBzcGVlZCAqLwogICAgICAgc2VuZF90aW1lb3V0X21zID0gMDsKICAgICAgIGlmKGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCA+IDApCkBAIC0xOTExLDggKzIyNDIsMTMgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGVsc2UgaWYoY29tZWJhY2spCi0gICAgICAgIHJjID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOworICAgICAgZWxzZSBpZihjb21lYmFjaykgeworICAgICAgICAvKiBUaGlzIGF2b2lkcyBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gc28gdGhhdCBhIHZlcnkgZmFzdCB0cmFuc2ZlcgorICAgICAgICAgICB3b24ndCBnZXQgc3R1Y2sgb24gdGhpcyB0cmFuc2ZlciBhdCB0aGUgZXhwZW5zZSBvZiBvdGhlciBjb25jdXJyZW50CisgICAgICAgICAgIHRyYW5zZmVycyAqLworICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUlVOX05PVyk7CisgICAgICAgIHJjID0gQ1VSTE1fT0s7CisgICAgICB9CiAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTE5NDAsOCArMjI3Niw3IEBACiAgICAgICAgICAqIGFjY2VzcyBmcmVlJ2QgZGF0YSwgaWYgdGhlIGNvbm5lY3Rpb24gaXMgZnJlZSdkIGFuZCB0aGUgaGFuZGxlCiAgICAgICAgICAqIHJlbW92ZWQgYmVmb3JlIHdlIHBlcmZvcm0gdGhlIHByb2Nlc3NpbmcgaW4gQ1VSTE1fU1RBVEVfQ09NUExFVEVECiAgICAgICAgICAqLwotICAgICAgICBpZihkYXRhLT5jb25uKQotICAgICAgICAgIGRldGFjaF9jb25ubmVjdGlvbihkYXRhKTsKKyAgICAgICAgQ3VybF9kZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CiAgICAgICB9CiAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUApAQCAtMTk4OCwxMyArMjMyMywxOCBAQAogICAgICAgICAgIGlmKHN0cmVhbV9lcnJvcikgewogICAgICAgICAgICAgLyogRG9uJ3QgYXR0ZW1wdCB0byBzZW5kIGRhdGEgb3ZlciBhIGNvbm5lY3Rpb24gdGhhdCB0aW1lZCBvdXQgKi8KICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uID0gcmVzdWx0ID09IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgcHJvcGVybHkgKi8KLSAgICAgICAgICAgIEN1cmxfZGlzY29ubmVjdChkYXRhLCBkYXRhLT5jb25uLCBkZWFkX2Nvbm5lY3Rpb24pOworICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gZGF0YS0+Y29ubjsKIAogICAgICAgICAgICAgLyogVGhpcyBpcyB3aGVyZSB3ZSBtYWtlIHN1cmUgdGhhdCB0aGUgY29ubiBwb2ludGVyIGlzIHJlc2V0LgogICAgICAgICAgICAgICAgV2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIGluIGV2ZXJ5IGNhc2UgYmxvY2sgYWJvdmUgd2hlcmUgYQogICAgICAgICAgICAgICAgZmFpbHVyZSBpcyBkZXRlY3RlZCAqLwotICAgICAgICAgICAgZGV0YWNoX2Nvbm5uZWN0aW9uKGRhdGEpOworICAgICAgICAgICAgQ3VybF9kZXRhY2hfY29ubm5lY3Rpb24oZGF0YSk7CisKKyAgICAgICAgICAgIC8qIHJlbW92ZSBjb25uZWN0aW9uIGZyb20gY2FjaGUgKi8KKyAgICAgICAgICAgIEN1cmxfY29ubmNhY2hlX3JlbW92ZV9jb25uKGRhdGEsIGNvbm4sIFRSVUUpOworCisgICAgICAgICAgICAvKiBkaXNjb25uZWN0IHByb3Blcmx5ICovCisgICAgICAgICAgICBDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY29ubiwgZGVhZF9jb25uZWN0aW9uKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZihkYXRhLT5tc3RhdGUgPT0gQ1VSTE1fU1RBVEVfQ09OTkVDVCkgewpAQCAtMjA5Myw3ICsyNDMzLDcgQEAKICAgKnJ1bm5pbmdfaGFuZGxlcyA9IG11bHRpLT5udW1fYWxpdmU7CiAKICAgaWYoQ1VSTE1fT0sgPj0gcmV0dXJuY29kZSkKLSAgICB1cGRhdGVfdGltZXIobXVsdGkpOworICAgIEN1cmxfdXBkYXRlX3RpbWVyKG11bHRpKTsKIAogICByZXR1cm4gcmV0dXJuY29kZTsKIH0KQEAgLTIxNDUsNiArMjQ4NSwxMSBAQAogCiAgICAgQ3VybF9oYXNoX2Rlc3Ryb3koJm11bHRpLT5ob3N0Y2FjaGUpOwogICAgIEN1cmxfcHNsX2Rlc3Ryb3koJm11bHRpLT5wc2wpOworCisjaWZkZWYgRU5BQkxFX1dBS0VVUAorICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMF0pOworICAgIHNjbG9zZShtdWx0aS0+d2FrZXVwX3BhaXJbMV0pOworI2VuZGlmCiAgICAgZnJlZShtdWx0aSk7CiAKICAgICByZXR1cm4gQ1VSTE1fT0s7CkBAIC0yMjEwLDcgKzI1NTUsNyBAQAogCiAgIC8qIEZpbGwgaW4gdGhlICdjdXJyZW50JyBzdHJ1Y3Qgd2l0aCB0aGUgc3RhdGUgYXMgaXQgaXMgbm93OiB3aGF0IHNvY2tldHMgdG8KICAgICAgc3VwZXJ2aXNlIGFuZCBmb3Igd2hhdCBhY3Rpb25zICovCi0gIGN1cnJhY3Rpb24gPSBtdWx0aV9nZXRzb2NrKGRhdGEsIHNvY2tzLCBNQVhfU09DS1NQRVJFQVNZSEFORExFKTsKKyAgY3VycmFjdGlvbiA9IG11bHRpX2dldHNvY2soZGF0YSwgc29ja3MpOwogCiAgIC8qIFdlIGhhdmUgMCAuLiBOIHNvY2tldHMgYWxyZWFkeSBhbmQgd2UgZ2V0IHRvIGtub3cgYWJvdXQgdGhlIDAgLi4gTQogICAgICBzb2NrZXRzIHdlIHNob3VsZCBoYXZlIGZyb20gbm93IG9uLiBEZXRlY3QgdGhlIGRpZmZlcmVuY2VzLCByZW1vdmUgbm8KQEAgLTIyMzgsMTQgKzI1ODMsMTQgQEAKICAgICBhY3Rpb25zW2ldID0gYWN0aW9uOwogICAgIGlmKGVudHJ5KSB7CiAgICAgICAvKiBjaGVjayBpZiBuZXcgZm9yIHRoaXMgdHJhbnNmZXIgKi8KLSAgICAgIGZvcihpID0gMDsgaTwgZGF0YS0+bnVtc29ja3M7IGkrKykgewotICAgICAgICBpZihzID09IGRhdGEtPnNvY2tldHNbaV0pIHsKLSAgICAgICAgICBwcmV2YWN0aW9uID0gZGF0YS0+YWN0aW9uc1tpXTsKKyAgICAgIGludCBqOworICAgICAgZm9yKGogPSAwOyBqPCBkYXRhLT5udW1zb2NrczsgaisrKSB7CisgICAgICAgIGlmKHMgPT0gZGF0YS0+c29ja2V0c1tqXSkgeworICAgICAgICAgIHByZXZhY3Rpb24gPSBkYXRhLT5hY3Rpb25zW2pdOwogICAgICAgICAgIHNpbmNlYmVmb3JlID0gVFJVRTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgfQotCiAgICAgfQogICAgIGVsc2UgewogICAgICAgLyogdGhpcyBpcyBhIHNvY2tldCB3ZSBkaWRuJ3QgaGF2ZSBiZWZvcmUsIGFkZCBpdCB0byB0aGUgaGFzaCEgKi8KQEAgLTIyNzMsMjkgKzI2MTgsMjIgQEAKICAgICAgIGlmKGFjdGlvbiAmIENVUkxfUE9MTF9PVVQpCiAgICAgICAgIGVudHJ5LT53cml0ZXJzKys7CiAKLSAgICAgIC8qIGFkZCAnZGF0YScgdG8gdGhlIGxpc3Qgb2YgaGFuZGxlcyB1c2luZyB0aGlzIHNvY2tldCEgKi8KLSAgICAgIEN1cmxfbGxpc3RfaW5zZXJ0X25leHQoJmVudHJ5LT5saXN0LCBlbnRyeS0+bGlzdC50YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCAmZGF0YS0+c2hfcXVldWUpOworICAgICAgLyogYWRkICdkYXRhJyB0byB0aGUgdHJhbnNmZXIgaGFzaCBvbiB0aGlzIHNvY2tldCEgKi8KKyAgICAgIGlmKCFDdXJsX2hhc2hfYWRkKCZlbnRyeS0+dHJhbnNmZXJzLCAoY2hhciAqKSZkYXRhLCAvKiBoYXNoIGtleSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBDdXJsX2Vhc3kgKiksIGRhdGEpKQorICAgICAgICByZXR1cm4gQ1VSTE1fT1VUX09GX01FTU9SWTsKICAgICB9CiAKICAgICBjb21ib2FjdGlvbiA9IChlbnRyeS0+d3JpdGVycz8gQ1VSTF9QT0xMX09VVCA6IDApIHwKICAgICAgIChlbnRyeS0+cmVhZGVycyA/IENVUkxfUE9MTF9JTiA6IDApOwogCi0jaWYgMAotICAgIGluZm9mKGRhdGEsICItLS0gQ29tYm9hY3Rpb246ICV1IHJlYWRlcnMgJXUgd3JpdGVyc1xuIiwKLSAgICAgICAgICBlbnRyeS0+cmVhZGVycywgZW50cnktPndyaXRlcnMpOwotI2VuZGlmCi0gICAgLyogY2hlY2sgaWYgaXQgaGFzIHRoZSBzYW1lIGFjdGlvbiBzZXQgKi8KLSAgICBpZihlbnRyeS0+YWN0aW9uID09IGNvbWJvYWN0aW9uKQorICAgIC8qIHNvY2tldCBleGlzdGVkIGJlZm9yZSBhbmQgaGFzIHRoZSBzYW1lIGFjdGlvbiBzZXQgYXMgYmVmb3JlICovCisgICAgaWYoc2luY2ViZWZvcmUgJiYgKGVudHJ5LT5hY3Rpb24gPT0gY29tYm9hY3Rpb24pKQogICAgICAgLyogc2FtZSwgY29udGludWUgKi8KICAgICAgIGNvbnRpbnVlOwogCi0gICAgLyogd2Uga25vdyAoZW50cnkgIT0gTlVMTCkgYXQgdGhpcyBwb2ludCwgc2VlIHRoZSBsb2dpYyBhYm92ZSAqLwogICAgIGlmKG11bHRpLT5zb2NrZXRfY2IpCi0gICAgICBtdWx0aS0+c29ja2V0X2NiKGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbWJvYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS0+c29ja2V0X3VzZXJwLAorICAgICAgbXVsdGktPnNvY2tldF9jYihkYXRhLCBzLCBjb21ib2FjdGlvbiwgbXVsdGktPnNvY2tldF91c2VycCwKICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNvY2tldHApOwogCiAgICAgZW50cnktPmFjdGlvbiA9IGNvbWJvYWN0aW9uOyAvKiBzdG9yZSB0aGUgY3VycmVudCBhY3Rpb24gc3RhdGUgKi8KQEAgLTIzMzUsMTEgKzI2NzMsMTQgQEAKICAgICAgICAgICBtdWx0aS0+c29ja2V0X2NiKGRhdGEsIHMsIENVUkxfUE9MTF9SRU1PVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS0+c29ja2V0X3VzZXJwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNvY2tldHApOwotICAgICAgICBzaF9kZWxlbnRyeSgmbXVsdGktPnNvY2toYXNoLCBzKTsKKyAgICAgICAgc2hfZGVsZW50cnkoZW50cnksICZtdWx0aS0+c29ja2hhc2gsIHMpOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIHJlbW92ZSB0aGlzIHRyYW5zZmVyIGFzIGEgdXNlciBvZiB0aGlzIHNvY2tldCAqLwotICAgICAgICBDdXJsX2xsaXN0X3JlbW92ZSgmZW50cnktPmxpc3QsICZkYXRhLT5zaF9xdWV1ZSwgTlVMTCk7CisgICAgICAgIC8qIHN0aWxsIHVzZXJzLCBidXQgcmVtb3ZlIHRoaXMgaGFuZGxlIGFzIGEgdXNlciBvZiB0aGlzIHNvY2tldCAqLworICAgICAgICBpZihDdXJsX2hhc2hfZGVsZXRlKCZlbnRyeS0+dHJhbnNmZXJzLCAoY2hhciAqKSZkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgQ3VybF9lYXN5ICopKSkgeworICAgICAgICAgIERFQlVHQVNTRVJUKE5VTEwpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9IC8qIGZvciBsb29wIG92ZXIgbnVtc29ja3MgKi8KQEAgLTIzODMsNyArMjcyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c29ja2V0cCk7CiAKICAgICAgICAgLyogbm93IHJlbW92ZSBpdCBmcm9tIHRoZSBzb2NrZXQgaGFzaCAqLwotICAgICAgICBzaF9kZWxlbnRyeSgmbXVsdGktPnNvY2toYXNoLCBzKTsKKyAgICAgICAgc2hfZGVsZW50cnkoZW50cnksICZtdWx0aS0+c29ja2hhc2gsIHMpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMjQ3NCw3ICsyODE1LDYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAgIGlmKHMgIT0gQ1VSTF9TT0NLRVRfVElNRU9VVCkgewotCiAgICAgc3RydWN0IEN1cmxfc2hfZW50cnkgKmVudHJ5ID0gc2hfZ2V0ZW50cnkoJm11bHRpLT5zb2NraGFzaCwgcyk7CiAKICAgICBpZighZW50cnkpCkBAIC0yNDg1LDM3ICsyODI1LDIyIEBACiAgICAgICAgICBhbmQganVzdCBtb3ZlIG9uLiAqLwogICAgICAgOwogICAgIGVsc2UgewotICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QgPSAmZW50cnktPmxpc3Q7Ci0gICAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICplOwotICAgICAgU0lHUElQRV9WQVJJQUJMRShwaXBlX3N0KTsKKyAgICAgIHN0cnVjdCBjdXJsX2hhc2hfaXRlcmF0b3IgaXRlcjsKKyAgICAgIHN0cnVjdCBjdXJsX2hhc2hfZWxlbWVudCAqaGU7CiAKICAgICAgIC8qIHRoZSBzb2NrZXQgY2FuIGJlIHNoYXJlZCBieSBtYW55IHRyYW5zZmVycywgaXRlcmF0ZSAqLwotICAgICAgZm9yKGUgPSBsaXN0LT5oZWFkOyBlOyBlID0gZS0+bmV4dCkgewotICAgICAgICBkYXRhID0gKHN0cnVjdCBDdXJsX2Vhc3kgKillLT5wdHI7Ci0KLSAgICAgICAgaWYoZGF0YS0+bWFnaWMgIT0gQ1VSTEVBU1lfTUFHSUNfTlVNQkVSKQotICAgICAgICAgIC8qIGJhZCBiYWQgYmFkIGJhZCBiYWQgYmFkIGJhZCAqLwotICAgICAgICAgIHJldHVybiBDVVJMTV9JTlRFUk5BTF9FUlJPUjsKKyAgICAgIEN1cmxfaGFzaF9zdGFydF9pdGVyYXRlKCZlbnRyeS0+dHJhbnNmZXJzLCAmaXRlcik7CisgICAgICBmb3IoaGUgPSBDdXJsX2hhc2hfbmV4dF9lbGVtZW50KCZpdGVyKTsgaGU7CisgICAgICAgICAgaGUgPSBDdXJsX2hhc2hfbmV4dF9lbGVtZW50KCZpdGVyKSkgeworICAgICAgICBkYXRhID0gKHN0cnVjdCBDdXJsX2Vhc3kgKiloZS0+cHRyOworICAgICAgICBERUJVR0FTU0VSVChkYXRhKTsKKyAgICAgICAgREVCVUdBU1NFUlQoZGF0YS0+bWFnaWMgPT0gQ1VSTEVBU1lfTUFHSUNfTlVNQkVSKTsKIAogICAgICAgICBpZihkYXRhLT5jb25uICYmICEoZGF0YS0+Y29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX0RJUkxPQ0spKQogICAgICAgICAgIC8qIHNldCBzb2NrZXQgZXZlbnQgYml0bWFzayBpZiB0aGV5J3JlIG5vdCBsb2NrZWQgKi8KICAgICAgICAgICBkYXRhLT5jb25uLT5jc2VsZWN0X2JpdHMgPSBldl9iaXRtYXNrOwogCi0gICAgICAgIHNpZ3BpcGVfaWdub3JlKGRhdGEsICZwaXBlX3N0KTsKLSAgICAgICAgcmVzdWx0ID0gbXVsdGlfcnVuc2luZ2xlKG11bHRpLCBub3csIGRhdGEpOwotICAgICAgICBzaWdwaXBlX3Jlc3RvcmUoJnBpcGVfc3QpOwotCi0gICAgICAgIGlmKGRhdGEtPmNvbm4gJiYgIShkYXRhLT5jb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfRElSTE9DSykpCi0gICAgICAgICAgLyogY2xlYXIgdGhlIGJpdG1hc2sgb25seSBpZiBub3QgbG9ja2VkICovCi0gICAgICAgICAgZGF0YS0+Y29ubi0+Y3NlbGVjdF9iaXRzID0gMDsKLQotICAgICAgICBpZihDVVJMTV9PSyA+PSByZXN1bHQpIHsKLSAgICAgICAgICAvKiBnZXQgdGhlIHNvY2tldChzKSBhbmQgY2hlY2sgaWYgdGhlIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UKLSAgICAgICAgICAgICBsYXN0ICovCi0gICAgICAgICAgcmVzdWx0ID0gc2luZ2xlc29ja2V0KG11bHRpLCBkYXRhKTsKLSAgICAgICAgICBpZihyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9CisgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKICAgICAgIH0KIAogICAgICAgLyogTm93IHdlIGZhbGwtdGhyb3VnaCBhbmQgZG8gdGhlIHRpbWVyLWJhc2VkIHN0dWZmLCBzaW5jZSB3ZSBkb24ndCB3YW50CkBAIC0yNTMwLDkgKzI4NTUsMTAgQEAKICAgfQogICBlbHNlIHsKICAgICAvKiBBc2tlZCB0byBydW4gZHVlIHRvIHRpbWUtb3V0LiBDbGVhciB0aGUgJ2xhc3RjYWxsJyB2YXJpYWJsZSB0byBmb3JjZQotICAgICAgIHVwZGF0ZV90aW1lcigpIHRvIHRyaWdnZXIgYSBjYWxsYmFjayB0byB0aGUgYXBwIGFnYWluIGV2ZW4gaWYgdGhlIHNhbWUKLSAgICAgICB0aW1lb3V0IGlzIHN0aWxsIHRoZSBvbmUgdG8gcnVuIGFmdGVyIHRoaXMgY2FsbC4gVGhhdCBoYW5kbGVzIHRoZSBjYXNlCi0gICAgICAgd2hlbiB0aGUgYXBwbGljYXRpb24gYXNrcyBsaWJjdXJsIHRvIHJ1biB0aGUgdGltZW91dCBwcmVtYXR1cmVseS4gKi8KKyAgICAgICBDdXJsX3VwZGF0ZV90aW1lcigpIHRvIHRyaWdnZXIgYSBjYWxsYmFjayB0byB0aGUgYXBwIGFnYWluIGV2ZW4gaWYgdGhlCisgICAgICAgc2FtZSB0aW1lb3V0IGlzIHN0aWxsIHRoZSBvbmUgdG8gcnVuIGFmdGVyIHRoaXMgY2FsbC4gVGhhdCBoYW5kbGVzIHRoZQorICAgICAgIGNhc2Ugd2hlbiB0aGUgYXBwbGljYXRpb24gYXNrcyBsaWJjdXJsIHRvIHJ1biB0aGUgdGltZW91dAorICAgICAgIHByZW1hdHVyZWx5LiAqLwogICAgIG1lbXNldCgmbXVsdGktPnRpbWVyX2xhc3RjYWxsLCAwLCBzaXplb2YobXVsdGktPnRpbWVyX2xhc3RjYWxsKSk7CiAgIH0KIApAQCAtMjYzMSw2ICsyOTU3LDE2IEBACiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE1PUFRfUElQRUxJTklOR19TRVJWRVJfQkw6CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE1PUFRfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUzoKKyAgICB7CisgICAgICBsb25nIHN0cmVhbXMgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgICAgaWYoc3RyZWFtcyA8IDEpCisgICAgICAgIHN0cmVhbXMgPSAxMDA7CisgICAgICBtdWx0aS0+bWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9CisgICAgICAgIChzdHJlYW1zID4gKGxvbmcpSU5JVElBTF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKT8KKyAgICAgICAgSU5JVElBTF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIDogKHVuc2lnbmVkIGludClzdHJlYW1zOworICAgIH0KKyAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICByZXMgPSBDVVJMTV9VTktOT1dOX09QVElPTjsKICAgICBicmVhazsKQEAgLTI2NTAsNyArMjk4Niw3IEBACiAgICAgcmV0dXJuIENVUkxNX1JFQ1VSU0lWRV9BUElfQ0FMTDsKICAgcmVzdWx0ID0gbXVsdGlfc29ja2V0KG11bHRpLCBGQUxTRSwgcywgMCwgcnVubmluZ19oYW5kbGVzKTsKICAgaWYoQ1VSTE1fT0sgPj0gcmVzdWx0KQotICAgIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgICAgQ3VybF91cGRhdGVfdGltZXIobXVsdGkpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNjYyLDcgKzI5OTgsNyBAQAogICAgIHJldHVybiBDVVJMTV9SRUNVUlNJVkVfQVBJX0NBTEw7CiAgIHJlc3VsdCA9IG11bHRpX3NvY2tldChtdWx0aSwgRkFMU0UsIHMsIGV2X2JpdG1hc2ssIHJ1bm5pbmdfaGFuZGxlcyk7CiAgIGlmKENVUkxNX09LID49IHJlc3VsdCkKLSAgICB1cGRhdGVfdGltZXIobXVsdGkpOworICAgIEN1cmxfdXBkYXRlX3RpbWVyKG11bHRpKTsKICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjY3NCw3ICszMDEwLDcgQEAKICAgICByZXR1cm4gQ1VSTE1fUkVDVVJTSVZFX0FQSV9DQUxMOwogICByZXN1bHQgPSBtdWx0aV9zb2NrZXQobXVsdGksIFRSVUUsIENVUkxfU09DS0VUX0JBRCwgMCwgcnVubmluZ19oYW5kbGVzKTsKICAgaWYoQ1VSTE1fT0sgPj0gcmVzdWx0KQotICAgIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgICAgQ3VybF91cGRhdGVfdGltZXIobXVsdGkpOwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNzM0LDE0ICszMDcwLDE0IEBACiAgKiBUZWxsIHRoZSBhcHBsaWNhdGlvbiBpdCBzaG91bGQgdXBkYXRlIGl0cyB0aW1lcnMsIGlmIGl0IHN1YnNjcmliZXMgdG8gdGhlCiAgKiB1cGRhdGUgdGltZXIgY2FsbGJhY2suCiAgKi8KLXN0YXRpYyBpbnQgdXBkYXRlX3RpbWVyKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSkKK3ZvaWQgQ3VybF91cGRhdGVfdGltZXIoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpKQogewogICBsb25nIHRpbWVvdXRfbXM7CiAKICAgaWYoIW11bHRpLT50aW1lcl9jYikKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm47CiAgIGlmKG11bHRpX3RpbWVvdXQobXVsdGksICZ0aW1lb3V0X21zKSkgewotICAgIHJldHVybiAtMTsKKyAgICByZXR1cm47CiAgIH0KICAgaWYodGltZW91dF9tcyA8IDApIHsKICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGN1cmx0aW1lIG5vbmUgPSB7MCwgMH07CkBAIC0yNzQ5LDkgKzMwODUsMTAgQEAKICAgICAgIG11bHRpLT50aW1lcl9sYXN0Y2FsbCA9IG5vbmU7CiAgICAgICAvKiB0aGVyZSdzIG5vIHRpbWVvdXQgbm93IGJ1dCB0aGVyZSB3YXMgb25lIHByZXZpb3VzbHksIHRlbGwgdGhlIGFwcCB0bwogICAgICAgICAgZGlzYWJsZSBpdCAqLwotICAgICAgcmV0dXJuIG11bHRpLT50aW1lcl9jYihtdWx0aSwgLTEsIG11bHRpLT50aW1lcl91c2VycCk7CisgICAgICBtdWx0aS0+dGltZXJfY2IobXVsdGksIC0xLCBtdWx0aS0+dGltZXJfdXNlcnApOworICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm47CiAgIH0KIAogICAvKiBXaGVuIG11bHRpX3RpbWVvdXQoKSBpcyBkb25lLCBtdWx0aS0+dGltZXRyZWUgcG9pbnRzIHRvIHRoZSBub2RlIHdpdGggdGhlCkBAIC0yNzU5LDExICszMDk2LDExIEBACiAgICAqIGlmIHRoaXMgaXMgdGhlIHNhbWUgKGZpeGVkKSB0aW1lIGFzIHdlIGdvdCBpbiBhIHByZXZpb3VzIGNhbGwgYW5kIHRoZW4KICAgICogYXZvaWQgY2FsbGluZyB0aGUgY2FsbGJhY2sgYWdhaW4uICovCiAgIGlmKEN1cmxfc3BsYXljb21wYXJla2V5cyhtdWx0aS0+dGltZXRyZWUtPmtleSwgbXVsdGktPnRpbWVyX2xhc3RjYWxsKSA9PSAwKQotICAgIHJldHVybiAwOworICAgIHJldHVybjsKIAogICBtdWx0aS0+dGltZXJfbGFzdGNhbGwgPSBtdWx0aS0+dGltZXRyZWUtPmtleTsKIAotICByZXR1cm4gbXVsdGktPnRpbWVyX2NiKG11bHRpLCB0aW1lb3V0X21zLCBtdWx0aS0+dGltZXJfdXNlcnApOworICBtdWx0aS0+dGltZXJfY2IobXVsdGksIHRpbWVvdXRfbXMsIG11bHRpLT50aW1lcl91c2VycCk7CiB9CiAKIC8qCkBAIC0yODQwLDcgKzMxNzcsNyBAQAogICoKICAqIEV4cGlyZSByZXBsYWNlcyBhIGZvcm1lciB0aW1lb3V0IHVzaW5nIHRoZSBzYW1lIGlkIGlmIGFscmVhZHkgc2V0LgogICovCi12b2lkIEN1cmxfZXhwaXJlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVfdCBtaWxsaSwgZXhwaXJlX2lkIGlkKQordm9pZCBDdXJsX2V4cGlyZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCB0aW1lZGlmZl90IG1pbGxpLCBleHBpcmVfaWQgaWQpCiB7CiAgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSA9IGRhdGEtPm11bHRpOwogICBzdHJ1Y3QgY3VybHRpbWUgKm5vd3AgPSAmZGF0YS0+c3RhdGUuZXhwaXJldGltZTsKQEAgLTI4NTQsNyArMzE5MSw3IEBACiAgIERFQlVHQVNTRVJUKGlkIDwgRVhQSVJFX0xBU1QpOwogCiAgIHNldCA9IEN1cmxfbm93KCk7Ci0gIHNldC50dl9zZWMgKz0gbWlsbGkvMTAwMDsKKyAgc2V0LnR2X3NlYyArPSAodGltZV90KShtaWxsaS8xMDAwKTsgLyogbWlnaHQgYmUgYSA2NCB0byAzMiBiaXQgY29udmVyc2lvbiAqLwogICBzZXQudHZfdXNlYyArPSAodW5zaWduZWQgaW50KShtaWxsaSUxMDAwKSoxMDAwOwogCiAgIGlmKHNldC50dl91c2VjID49IDEwMDAwMDApIHsKQEAgLTMwNjgsMyArMzQwNSw5IEBACiAgIH0KIH0KICNlbmRpZgorCit1bnNpZ25lZCBpbnQgQ3VybF9tdWx0aV9tYXhfY29uY3VycmVudF9zdHJlYW1zKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSkKK3sKKyAgREVCVUdBU1NFUlQobXVsdGkpOworICByZXR1cm4gbXVsdGktPm1heF9jb25jdXJyZW50X3N0cmVhbXM7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aWhhbmRsZS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXVsdGloYW5kbGUuaAppbmRleCAyNzkzNzlhLi45MWVjYTE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aWhhbmRsZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpaGFuZGxlLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgImNvbm5jYWNoZS5oIgogI2luY2x1ZGUgInBzbC5oIgorI2luY2x1ZGUgInNvY2tldHBhaXIuaCIKIAogc3RydWN0IEN1cmxfbWVzc2FnZSB7CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgbGlzdDsKQEAgLTY2LDYgKzY3LDE0IEBACiAKICNkZWZpbmUgQ1VSTFBJUEVfQU5ZIChDVVJMUElQRV9NVUxUSVBMRVgpCiAKKyNpZiBkZWZpbmVkKFVTRV9TT0NLRVRQQUlSKSAmJiAhZGVmaW5lZChVU0VfQkxPQ0tJTkdfU09DS0VUUykKKyNkZWZpbmUgRU5BQkxFX1dBS0VVUAorI2VuZGlmCisKKworLyogdmFsdWUgZm9yIE1BWElNVU0gQ09OQ1VSUkVOVCBTVFJFQU1TIHVwcGVyIGxpbWl0ICovCisjZGVmaW5lIElOSVRJQUxfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyAoKDFVIDw8IDMxKSAtIDEpCisKIC8qIFRoaXMgaXMgdGhlIHN0cnVjdCBrbm93biBhcyBDVVJMTSBvbiB0aGUgb3V0c2lkZSAqLwogc3RydWN0IEN1cmxfbXVsdGkgewogICAvKiBGaXJzdCBhIHNpbXBsZSBpZGVudGlmaWVyIHRvIGVhc2llciBkZXRlY3QgaWYgYSB1c2VyIG1peCB1cApAQCAtMTEwLDExICsxMTksNiBAQAogICAgICBzYW1lIGFjdHVhbCBzb2NrZXQpICovCiAgIHN0cnVjdCBjdXJsX2hhc2ggc29ja2hhc2g7CiAKLSAgLyogbXVsdGlwbGV4aW5nIHdhbnRlZCAqLwotICBib29sIG11bHRpcGxleGluZzsKLQotICBib29sIHJlY2hlY2tzdGF0ZTsgLyogc2VlIEN1cmxfbXVsdGlfY29ubmNoYW5nZWQgKi8KLQogICAvKiBTaGFyZWQgY29ubmVjdGlvbiBjYWNoZSAoYnVuZGxlcykqLwogICBzdHJ1Y3QgY29ubmNhY2hlIGNvbm5fY2FjaGU7CiAKQEAgLTEzMiw3ICsxMzYsMTcgQEAKICAgdm9pZCAqdGltZXJfdXNlcnA7CiAgIHN0cnVjdCBjdXJsdGltZSB0aW1lcl9sYXN0Y2FsbDsgLyogdGhlIGZpeGVkIHRpbWUgZm9yIHRoZSB0aW1lb3V0IGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIGNhbGxiYWNrICovCisgIHVuc2lnbmVkIGludCBtYXhfY29uY3VycmVudF9zdHJlYW1zOworCisjaWZkZWYgRU5BQkxFX1dBS0VVUAorICBjdXJsX3NvY2tldF90IHdha2V1cF9wYWlyWzJdOyAvKiBzb2NrZXRwYWlyKCkgdXNlZCBmb3Igd2FrZXVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgaXMgdXNlZCBmb3IgcmVhZCwgMSBpcyB1c2VkIGZvciB3cml0ZSAqLworI2VuZGlmCisgIC8qIG11bHRpcGxleGluZyB3YW50ZWQgKi8KKyAgYm9vbCBtdWx0aXBsZXhpbmc7CisgIGJvb2wgcmVjaGVja3N0YXRlOyAvKiBzZWUgQ3VybF9tdWx0aV9jb25uY2hhbmdlZCAqLwogICBib29sIGluX2NhbGxiYWNrOyAgICAgICAgICAgIC8qIHRydWUgd2hpbGUgZXhlY3V0aW5nIGEgY2FsbGJhY2sgKi8KKyAgYm9vbCBpcHY2X3dvcmtzOwogfTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX01VTFRJSEFORExFX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpaWYuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL211bHRpaWYuaAppbmRleCBlOGE1ZTcwLi43ZDU3NGRmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9tdWx0aWlmLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbXVsdGlpZi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNywxNSArMjcsMTcgQEAKICAqLwogCiB2b2lkIEN1cmxfdXBkYXRlc29ja2V0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwotdm9pZCBDdXJsX2V4cGlyZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCB0aW1lX3QgbWlsbGksIGV4cGlyZV9pZCk7Cit2b2lkIEN1cmxfZXhwaXJlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVkaWZmX3QgbWlsbGksIGV4cGlyZV9pZCk7CiB2b2lkIEN1cmxfZXhwaXJlX2NsZWFyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogdm9pZCBDdXJsX2V4cGlyZV9kb25lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGV4cGlyZV9pZCBpZCk7Ci12b2lkIEN1cmxfZGV0YWNoX2Nvbm5uZWN0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwordm9pZCBDdXJsX3VwZGF0ZV90aW1lcihzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpOwogdm9pZCBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwordm9pZCBDdXJsX2RldGFjaF9jb25ubmVjdGlvbihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIGJvb2wgQ3VybF9tdWx0aXBsZXhfd2FudGVkKGNvbnN0IHN0cnVjdCBDdXJsX211bHRpICptdWx0aSk7CiB2b2lkIEN1cmxfc2V0X2luX2NhbGxiYWNrKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgdmFsdWUpOwogYm9vbCBDdXJsX2lzX2luX2NhbGxiYWNrKHN0cnVjdCBDdXJsX2Vhc3kgKmVhc3kpOworQ1VSTGNvZGUgQ3VybF9wcmVjb25uZWN0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogCiAvKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIGN1cmxfbXVsdGlfaW5pdCgpIGFjY2VwdHMgc2l6ZSBwYXJhbWV0ZXJzIGZvciB0aGUKICAgIHNvY2tldCBhbmQgY29ubmVjdGlvbiBoYXNoZXMgKi8KQEAgLTg5LDExICs5MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIAotQ1VSTE1jb2RlIEN1cmxfbXVsdGlfd2FpdChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3dhaXRmZCBleHRyYV9mZHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4dHJhX25mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0X21zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZ290c29ja2V0KTsgLyogaWYgYW55IHNvY2tldCB3YXMgY2hlY2tlZCAqLworCisvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBDVVJMTU9QVF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIG9wdGlvbiAqLwordW5zaWduZWQgaW50IEN1cmxfbXVsdGlfbWF4X2NvbmN1cnJlbnRfc3RyZWFtcyhzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpOwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfTVVMVElJRl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9uZXRyYy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbmV0cmMuYwppbmRleCAxYmQ5OThmLi4xYzlkYTMxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9uZXRyYy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL25ldHJjLmMKQEAgLTQ1LDI3ICs0NSwyNyBAQAogICBIT1NUVkFMSUQgICAgIC8qIHRoaXMgaXMgIm91ciIgbWFjaGluZSEgKi8KIH07CiAKKyNkZWZpbmUgTkVUUkNfRklMRV9NSVNTSU5HIDEKKyNkZWZpbmUgTkVUUkNfRkFJTEVEIC0xCisjZGVmaW5lIE5FVFJDX1NVQ0NFU1MgMAorCiAvKgotICogQHVuaXR0ZXN0OiAxMzA0Ci0gKgotICogKmxvZ2lucCBhbmQgKnBhc3N3b3JkcCBNVVNUIGJlIGFsbG9jYXRlZCBpZiB0aGV5IGFyZW4ndCBOVUxMIHdoZW4gcGFzc2VkCi0gKiBpbi4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLgogICovCi1pbnQgQ3VybF9wYXJzZW5ldHJjKGNvbnN0IGNoYXIgKmhvc3QsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKipsb2dpbnAsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKipwYXNzd29yZHAsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgKmxvZ2luX2NoYW5nZWQsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgKnBhc3N3b3JkX2NoYW5nZWQsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ldHJjZmlsZSkKK3N0YXRpYyBpbnQgcGFyc2VuZXRyYyhjb25zdCBjaGFyICpob3N0LAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipsb2dpbnAsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnBhc3N3b3JkcCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpsb2dpbl9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnBhc3N3b3JkX2NoYW5nZWQsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmV0cmNmaWxlKQogewogICBGSUxFICpmaWxlOwotICBpbnQgcmV0Y29kZSA9IDE7CisgIGludCByZXRjb2RlID0gTkVUUkNfRklMRV9NSVNTSU5HOwogICBjaGFyICpsb2dpbiA9ICpsb2dpbnA7CiAgIGNoYXIgKnBhc3N3b3JkID0gKnBhc3N3b3JkcDsKICAgYm9vbCBzcGVjaWZpY19sb2dpbiA9IChsb2dpbiAmJiAqbG9naW4gIT0gMCk7CiAgIGJvb2wgbG9naW5fYWxsb2MgPSBGQUxTRTsKICAgYm9vbCBwYXNzd29yZF9hbGxvYyA9IEZBTFNFOwotICBib29sIG5ldHJjX2FsbG9jID0gRkFMU0U7CiAgIGVudW0gaG9zdF9sb29rdXBfc3RhdGUgc3RhdGUgPSBOT1RISU5HOwogCiAgIGNoYXIgc3RhdGVfbG9naW4gPSAwOyAgICAgIC8qIEZvdW5kIGEgbG9naW4ga2V5d29yZCAqLwpAQCAtNzMsNTEgKzczLDkgQEAKICAgaW50IHN0YXRlX291cl9sb2dpbiA9IEZBTFNFOyAgLyogV2l0aCBzcGVjaWZpY19sb2dpbiwgZm91bmQgKm91ciogbG9naW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAqLwogCi0jZGVmaW5lIE5FVFJDIERPVF9DSEFSICJuZXRyYyIKLQotICBpZighbmV0cmNmaWxlKSB7Ci0gICAgYm9vbCBob21lX2FsbG9jID0gRkFMU0U7Ci0gICAgY2hhciAqaG9tZSA9IGN1cmxfZ2V0ZW52KCJIT01FIik7IC8qIHBvcnRhYmxlIGVudmlyb25tZW50IHJlYWRlciAqLwotICAgIGlmKGhvbWUpIHsKLSAgICAgIGhvbWVfYWxsb2MgPSBUUlVFOwotI2lmIGRlZmluZWQoSEFWRV9HRVRQV1VJRF9SKSAmJiBkZWZpbmVkKEhBVkVfR0VURVVJRCkKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBzdHJ1Y3QgcGFzc3dkIHB3LCAqcHdfcmVzOwotICAgICAgY2hhciBwd2J1ZlsxMDI0XTsKLSAgICAgIGlmKCFnZXRwd3VpZF9yKGdldGV1aWQoKSwgJnB3LCBwd2J1Ziwgc2l6ZW9mKHB3YnVmKSwgJnB3X3JlcykKLSAgICAgICAgICYmIHB3X3JlcykgewotICAgICAgICBob21lID0gc3RyZHVwKHB3LnB3X2Rpcik7Ci0gICAgICAgIGlmKCFob21lKQotICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICBob21lX2FsbG9jID0gVFJVRTsKLSAgICAgIH0KLSNlbGlmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCi0gICAgfQotICAgIGVsc2UgewotICAgICAgc3RydWN0IHBhc3N3ZCAqcHc7Ci0gICAgICBwdyA9IGdldHB3dWlkKGdldGV1aWQoKSk7Ci0gICAgICBpZihwdykgewotICAgICAgICBob21lID0gcHctPnB3X2RpcjsKLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIGlmKCFob21lKQotICAgICAgcmV0dXJuIHJldGNvZGU7IC8qIG5vIGhvbWUgZGlyZWN0b3J5IGZvdW5kIChvciBwb3NzaWJseSBvdXQgb2YgbWVtb3J5KSAqLwotCi0gICAgbmV0cmNmaWxlID0gY3VybF9tYXByaW50ZigiJXMlcyVzIiwgaG9tZSwgRElSX0NIQVIsIE5FVFJDKTsKLSAgICBpZihob21lX2FsbG9jKQotICAgICAgZnJlZShob21lKTsKLSAgICBpZighbmV0cmNmaWxlKSB7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIG5ldHJjX2FsbG9jID0gVFJVRTsKLSAgfQorICBERUJVR0FTU0VSVChuZXRyY2ZpbGUpOwogCiAgIGZpbGUgPSBmb3BlbihuZXRyY2ZpbGUsIEZPUEVOX1JFQURURVhUKTsKLSAgaWYobmV0cmNfYWxsb2MpCi0gICAgZnJlZShuZXRyY2ZpbGUpOwogICBpZihmaWxlKSB7CiAgICAgY2hhciAqdG9rOwogICAgIGNoYXIgKnRva19idWY7CkBAIC0xMzAsNyArODgsNyBAQAogICAgICAgaWYodG9rICYmICp0b2sgPT0gJyMnKQogICAgICAgICAvKiB0cmVhdCBhbiBpbml0aWFsIGhhc2ggYXMgYSBjb21tZW50IGxpbmUgKi8KICAgICAgICAgY29udGludWU7Ci0gICAgICB3aGlsZSghZG9uZSAmJiB0b2spIHsKKyAgICAgIHdoaWxlKHRvaykgewogCiAgICAgICAgIGlmKChsb2dpbiAmJiAqbG9naW4pICYmIChwYXNzd29yZCAmJiAqcGFzc3dvcmQpKSB7CiAgICAgICAgICAgZG9uZSA9IFRSVUU7CkBAIC0xNDgsMTQgKzEwNiwxNCBAQAogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKCJkZWZhdWx0IiwgdG9rKSkgewogICAgICAgICAgICAgc3RhdGUgPSBIT1NUVkFMSUQ7Ci0gICAgICAgICAgICByZXRjb2RlID0gMDsgLyogd2UgZGlkIGZpbmQgb3VyIGhvc3QgKi8KKyAgICAgICAgICAgIHJldGNvZGUgPSBORVRSQ19TVUNDRVNTOyAvKiB3ZSBkaWQgZmluZCBvdXIgaG9zdCAqLwogICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIT1NURk9VTkQ6CiAgICAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoaG9zdCwgdG9rKSkgewogICAgICAgICAgICAgLyogYW5kIHllcywgdGhpcyBpcyBvdXIgaG9zdCEgKi8KICAgICAgICAgICAgIHN0YXRlID0gSE9TVFZBTElEOwotICAgICAgICAgICAgcmV0Y29kZSA9IDA7IC8qIHdlIGRpZCBmaW5kIG91ciBob3N0ICovCisgICAgICAgICAgICByZXRjb2RlID0gTkVUUkNfU1VDQ0VTUzsgLyogd2UgZGlkIGZpbmQgb3VyIGhvc3QgKi8KICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgLyogbm90IG91ciBob3N0ICovCkBAIC0xNzQsNyArMTMyLDcgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBsb2dpbiA9IHN0cmR1cCh0b2spOwogICAgICAgICAgICAgICBpZighbG9naW4pIHsKLSAgICAgICAgICAgICAgICByZXRjb2RlID0gLTE7IC8qIGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgICAgICAgICAgcmV0Y29kZSA9IE5FVFJDX0ZBSUxFRDsgLyogYWxsb2NhdGlvbiBmYWlsZWQgKi8KICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBsb2dpbl9hbGxvYyA9IFRSVUU7CkBAIC0xOTAsNyArMTQ4LDcgQEAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBwYXNzd29yZCA9IHN0cmR1cCh0b2spOwogICAgICAgICAgICAgICBpZighcGFzc3dvcmQpIHsKLSAgICAgICAgICAgICAgICByZXRjb2RlID0gLTE7IC8qIGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgICAgICAgICAgcmV0Y29kZSA9IE5FVFJDX0ZBSUxFRDsgLyogYWxsb2NhdGlvbiBmYWlsZWQgKi8KICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBwYXNzd29yZF9hbGxvYyA9IFRSVUU7CkBAIC0yMTUsNiArMTczLDcgQEAKIAogICAgIG91dDoKICAgICBpZighcmV0Y29kZSkgeworICAgICAgLyogc3VjY2VzcyAqLwogICAgICAgKmxvZ2luX2NoYW5nZWQgPSBGQUxTRTsKICAgICAgICpwYXNzd29yZF9jaGFuZ2VkID0gRkFMU0U7CiAgICAgICBpZihsb2dpbl9hbGxvYykgewpAQCAtMjQyLDQgKzIwMSw3OCBAQAogICByZXR1cm4gcmV0Y29kZTsKIH0KIAorLyoKKyAqIEB1bml0dGVzdDogMTMwNAorICoKKyAqICpsb2dpbnAgYW5kICpwYXNzd29yZHAgTVVTVCBiZSBhbGxvY2F0ZWQgaWYgdGhleSBhcmVuJ3QgTlVMTCB3aGVuIHBhc3NlZAorICogaW4uCisgKi8KK2ludCBDdXJsX3BhcnNlbmV0cmMoY29uc3QgY2hhciAqaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKmxvZ2lucCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKnBhc3N3b3JkcCwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCAqbG9naW5fY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCAqcGFzc3dvcmRfY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqbmV0cmNmaWxlKQoreworICBpbnQgcmV0Y29kZSA9IDE7CisgIGNoYXIgKmZpbGVhbGxvYyA9IE5VTEw7CisKKyAgaWYoIW5ldHJjZmlsZSkgeworICAgIGNoYXIgKmhvbWUgPSBOVUxMOworICAgIGNoYXIgKmhvbWVhID0gY3VybF9nZXRlbnYoIkhPTUUiKTsgLyogcG9ydGFibGUgZW52aXJvbm1lbnQgcmVhZGVyICovCisgICAgaWYoaG9tZWEpIHsKKyAgICAgIGhvbWUgPSBob21lYTsKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUFdVSURfUikgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCisgICAgfQorICAgIGVsc2UgeworICAgICAgc3RydWN0IHBhc3N3ZCBwdywgKnB3X3JlczsKKyAgICAgIGNoYXIgcHdidWZbMTAyNF07CisgICAgICBpZighZ2V0cHd1aWRfcihnZXRldWlkKCksICZwdywgcHdidWYsIHNpemVvZihwd2J1ZiksICZwd19yZXMpCisgICAgICAgICAmJiBwd19yZXMpIHsKKyAgICAgICAgaG9tZSA9IHB3LnB3X2RpcjsKKyAgICAgIH0KKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCisgICAgfQorICAgIGVsc2UgeworICAgICAgc3RydWN0IHBhc3N3ZCAqcHc7CisgICAgICBwdyA9IGdldHB3dWlkKGdldGV1aWQoKSk7CisgICAgICBpZihwdykgeworICAgICAgICBob21lID0gcHctPnB3X2RpcjsKKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmKCFob21lKQorICAgICAgcmV0dXJuIHJldGNvZGU7IC8qIG5vIGhvbWUgZGlyZWN0b3J5IGZvdW5kIChvciBwb3NzaWJseSBvdXQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkpICovCisKKyAgICBmaWxlYWxsb2MgPSBjdXJsX21hcHJpbnRmKCIlcyVzLm5ldHJjIiwgaG9tZSwgRElSX0NIQVIpOworICAgIGlmKCFmaWxlYWxsb2MpIHsKKyAgICAgIGZyZWUoaG9tZWEpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXRjb2RlID0gcGFyc2VuZXRyYyhob3N0LCBsb2dpbnAsIHBhc3N3b3JkcCwgbG9naW5fY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZF9jaGFuZ2VkLCBmaWxlYWxsb2MpOworICAgIGZyZWUoZmlsZWFsbG9jKTsKKyNpZmRlZiBXSU4zMgorICAgIGlmKHJldGNvZGUgPT0gTkVUUkNfRklMRV9NSVNTSU5HKSB7CisgICAgICAvKiBmYWxsYmFjayB0byB0aGUgb2xkLXN0eWxlICJfbmV0cmMiIGZpbGUgKi8KKyAgICAgIGZpbGVhbGxvYyA9IGN1cmxfbWFwcmludGYoIiVzJXNfbmV0cmMiLCBob21lLCBESVJfQ0hBUik7CisgICAgICBpZighZmlsZWFsbG9jKSB7CisgICAgICAgIGZyZWUoaG9tZWEpOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAgICByZXRjb2RlID0gcGFyc2VuZXRyYyhob3N0LCBsb2dpbnAsIHBhc3N3b3JkcCwgbG9naW5fY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NoYW5nZWQsIGZpbGVhbGxvYyk7CisgICAgICBmcmVlKGZpbGVhbGxvYyk7CisgICAgfQorI2VuZGlmCisgICAgZnJlZShob21lYSk7CisgIH0KKyAgZWxzZQorICAgIHJldGNvZGUgPSBwYXJzZW5ldHJjKGhvc3QsIGxvZ2lucCwgcGFzc3dvcmRwLCBsb2dpbl9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkX2NoYW5nZWQsIG5ldHJjZmlsZSk7CisgIHJldHVybiByZXRjb2RlOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbi1hc2NpaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uLWFzY2lpLmMKaW5kZXggNDJiZWFlYy4uYTQ4ZTY3ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uLWFzY2lpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uLWFzY2lpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbmJsb2NrLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ub25ibG9jay5jCmluZGV4IDRkMTA1YzEuLmFiZWI2NTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbmJsb2NrLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uYmxvY2suYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uYmxvY2suaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL25vbmJsb2NrLmgKaW5kZXggZWIxOGVhMS4uZDUwZDMxNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvbm9uYmxvY2suaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ub25ibG9jay5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ud2xpYi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvbndsaWIuYwppbmRleCA3YmY1ZjUxLi5iZWVjMGIzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ud2xpYi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL253bGliLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM2LDIxICszNiwxOSBAQAogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAotdHlwZWRlZiBzdHJ1Y3QKLXsKK3N0cnVjdCBsaWJ0aHJlYWRkYXRhIHsKICAgaW50ICAgICBfZXJybm87CiAgIHZvaWQgICAgKnR3ZW50eWJ5dGVzOwotfSBsaWJ0aHJlYWRkYXRhX3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdAoteworc3RydWN0IGxpYmRhdGEgewogICBpbnQgICAgICAgICB4OwogICBpbnQgICAgICAgICB5OwogICBpbnQgICAgICAgICB6OwogICB2b2lkICAgICAgICAqdGVuYnl0ZXM7CiAgIE5YS2V5X3QgICAgIHBlcnRocmVhZGtleTsgICAvKiBpZiAtMSwgbm8ga2V5IG9idGFpbmVkLi4uICovCiAgIE5YTXV0ZXhfdCAgICpsb2NrOwotfSBsaWJkYXRhX3Q7Cit9OwogCiBpbnQgICAgICAgICBnTGliSWQgICAgICA9IC0xOwogdm9pZCAgICAgICAgKmdMaWJIYW5kbGUgPSAodm9pZCAqKSBOVUxMOwpAQCAtNjAsNyArNTgsOCBAQAogLyogaW50ZXJuYWwgbGlicmFyeSBmdW5jdGlvbiBwcm90b3R5cGVzLi4uICovCiBpbnQgIERpc3Bvc2VMaWJyYXJ5RGF0YSh2b2lkICopOwogdm9pZCBEaXNwb3NlVGhyZWFkRGF0YSh2b2lkICopOwotaW50ICBHZXRPclNldFVwRGF0YShpbnQgaWQsIGxpYmRhdGFfdCAqKmRhdGEsIGxpYnRocmVhZGRhdGFfdCAqKnRocmVhZGRhdGEpOworaW50ICBHZXRPclNldFVwRGF0YShpbnQgaWQsIHN0cnVjdCBsaWJkYXRhICoqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGxpYnRocmVhZGRhdGEgKip0aHJlYWRkYXRhKTsKIAogCiBpbnQgX05vbkFwcFN0YXJ0KHZvaWQgICAgICAgICpOTE1IYW5kbGUsCkBAIC0xNTQsMjQgKzE1MywyNCBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQgR2V0T3JTZXRVcERhdGEoaW50IGlkLCBsaWJkYXRhX3QgKiphcHBEYXRhLAotICAgICAgICAgICAgICAgICAgIGxpYnRocmVhZGRhdGFfdCAqKnRocmVhZERhdGEpCitpbnQgR2V0T3JTZXRVcERhdGEoaW50IGlkLCBzdHJ1Y3QgbGliZGF0YSAqKmFwcERhdGEsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IGxpYnRocmVhZGRhdGEgKip0aHJlYWREYXRhKQogewogICBpbnQgICAgICAgICAgICAgICAgIGVycjsKLSAgbGliZGF0YV90ICAgICAgICAgICAqYXBwX2RhdGE7Ci0gIGxpYnRocmVhZGRhdGFfdCAqdGhyZWFkX2RhdGE7CisgIHN0cnVjdCBsaWJkYXRhICAgICAgKmFwcF9kYXRhOworICBzdHJ1Y3QgbGlidGhyZWFkZGF0YSAqdGhyZWFkX2RhdGE7CiAgIE5YS2V5X3QgICAgICAgICAgICAga2V5OwogICBOWF9MT0NLX0lORk9fQUxMT0MobGlibG9jaywgIkFwcGxpY2F0aW9uIERhdGEgTG9jayIsIDApOwogCiAgIGVyciAgICAgICAgID0gMDsKLSAgdGhyZWFkX2RhdGEgPSAobGlidGhyZWFkZGF0YV90ICopIE5VTEw7CisgIHRocmVhZF9kYXRhID0gKHN0cnVjdCBsaWJ0aHJlYWRkYXRhX3QgKikgTlVMTDsKIAogICAvKgogICAgKiBBdHRlbXB0IHRvIGdldCBvdXIgZGF0YSBmb3IgdGhlIGFwcGxpY2F0aW9uIGNhbGxpbmcgdXMuIFRoaXMgaXMgd2hlcmUgd2UKICAgICogc3RvcmUgd2hhdGV2ZXIgYXBwbGljYXRpb24tc3BlY2lmaWMgaW5mb3JtYXRpb24gd2UgbmVlZCB0byBjYXJyeSBpbgogICAgKiBzdXBwb3J0IG9mIGNhbGxpbmcgYXBwbGljYXRpb25zLgogICAgKi8KLSAgYXBwX2RhdGEgPSAobGliZGF0YV90ICopIGdldF9hcHBfZGF0YShpZCk7CisgIGFwcF9kYXRhID0gKHN0cnVjdCBsaWJkYXRhICopIGdldF9hcHBfZGF0YShpZCk7CiAKICAgaWYoIWFwcF9kYXRhKSB7CiAgICAgLyoKQEAgLTE4NCw5ICsxODMsOSBAQAogICAgICAqLwogICAgIE5YTG9jayhnTGliTG9jayk7CiAKLSAgICBhcHBfZGF0YSA9IChsaWJkYXRhX3QgKikgZ2V0X2FwcF9kYXRhKGlkKTsKKyAgICBhcHBfZGF0YSA9IChzdHJ1Y3QgbGliZGF0YSAqKSBnZXRfYXBwX2RhdGEoaWQpOwogICAgIGlmKCFhcHBfZGF0YSkgewotICAgICAgYXBwX2RhdGEgPSBjYWxsb2MoMSwgc2l6ZW9mKGxpYmRhdGFfdCkpOworICAgICAgYXBwX2RhdGEgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsaWJkYXRhKSk7CiAKICAgICAgIGlmKGFwcF9kYXRhKSB7CiAgICAgICAgIGFwcF9kYXRhLT50ZW5ieXRlcyA9IG1hbGxvYygxMCk7CkBAIC0yNDksNyArMjQ4LDcgQEAKICAgICAgICAqIGEgcG9pbnRlciBpcyBub3QgdmVyeSBpbXBvcnRhbnQsIHRoaXMganVzdCBoZWxwcyB0byBkZW1vbnN0cmF0ZSB0aGF0CiAgICAgICAgKiB3ZSBjYW4gaGF2ZSBhcmJpdHJhcmlseSBjb21wbGV4IHBlci10aHJlYWQgZGF0YS4KICAgICAgICAqLwotICAgICAgdGhyZWFkX2RhdGEgPSBtYWxsb2Moc2l6ZW9mKGxpYnRocmVhZGRhdGFfdCkpOworICAgICAgdGhyZWFkX2RhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaWJ0aHJlYWRkYXRhKSk7CiAKICAgICAgIGlmKHRocmVhZF9kYXRhKSB7CiAgICAgICAgIHRocmVhZF9kYXRhLT5fZXJybm8gICAgICA9IDA7CkBAIC0yNTcsNyArMjU2LDcgQEAKIAogICAgICAgICBpZighdGhyZWFkX2RhdGEtPnR3ZW50eWJ5dGVzKSB7CiAgICAgICAgICAgZnJlZSh0aHJlYWRfZGF0YSk7Ci0gICAgICAgICAgdGhyZWFkX2RhdGEgPSAobGlidGhyZWFkZGF0YV90ICopIE5VTEw7CisgICAgICAgICAgdGhyZWFkX2RhdGEgPSAoc3RydWN0IGxpYnRocmVhZGRhdGEgKikgTlVMTDsKICAgICAgICAgICBlcnIgICAgICAgICA9IEVOT01FTTsKICAgICAgICAgfQogCkBAIC0yNjUsNyArMjY0LDcgQEAKICAgICAgICAgaWYoZXJyKSB7CiAgICAgICAgICAgZnJlZSh0aHJlYWRfZGF0YS0+dHdlbnR5Ynl0ZXMpOwogICAgICAgICAgIGZyZWUodGhyZWFkX2RhdGEpOwotICAgICAgICAgIHRocmVhZF9kYXRhID0gKGxpYnRocmVhZGRhdGFfdCAqKSBOVUxMOworICAgICAgICAgIHRocmVhZF9kYXRhID0gKHN0cnVjdCBsaWJ0aHJlYWRkYXRhICopIE5VTEw7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0yOTUsNyArMjk0LDcgQEAKIHZvaWQgRGlzcG9zZVRocmVhZERhdGEodm9pZCAqZGF0YSkKIHsKICAgaWYoZGF0YSkgewotICAgIHZvaWQgKnR3ZW50eWJ5dGVzID0gKChsaWJ0aHJlYWRkYXRhX3QgKikgZGF0YSktPnR3ZW50eWJ5dGVzOworICAgIHZvaWQgKnR3ZW50eWJ5dGVzID0gKChzdHJ1Y3QgbGlidGhyZWFkZGF0YSAqKSBkYXRhKS0+dHdlbnR5Ynl0ZXM7CiAKICAgICBmcmVlKHR3ZW50eWJ5dGVzKTsKICAgICBmcmVlKGRhdGEpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvb3BlbmxkYXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL29wZW5sZGFwLmMKaW5kZXggZWVhYjJjNy4uNzgyZDZhMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvb3BlbmxkYXAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9vcGVubGRhcC5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb3dhcmQgQ2h1LCA8aHljQG9wZW5sZGFwLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xNTEsNyArMTUxLDcgQEAKICAgImJhZCBvciBtaXNzaW5nIGV4dGVuc2lvbnMiCiB9OwogCi10eXBlZGVmIHN0cnVjdCBsZGFwY29ubmluZm8geworc3RydWN0IGxkYXBjb25uaW5mbyB7CiAgIExEQVAgKmxkOwogICBDdXJsX3JlY3YgKnJlY3Y7ICAvKiBmb3Igc3RhY2tpbmcgU1NMIGhhbmRsZXIgKi8KICAgQ3VybF9zZW5kICpzZW5kOwpAQCAtMTYwLDE2ICsxNjAsMTYgQEAKICAgYm9vbCBzc2xkb25lOwogICBib29sIHNzbGluc3Q7CiAgIGJvb2wgZGlkYmluZDsKLX0gbGRhcGNvbm5pbmZvOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgbGRhcHJlcWluZm8geworc3RydWN0IGxkYXByZXFpbmZvIHsKICAgaW50IG1zZ2lkOwogICBpbnQgbnVtZW50OwotfSBsZGFwcmVxaW5mbzsKK307CiAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBsZGFwY29ubmluZm8gKmxpOworICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaTsKICAgTERBUFVSTERlc2MgKmx1ZDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGludCByYywgcHJvdG87CkBAIC0xOTAsMTEgKzE5MCwxMSBAQAogICBwcm90byA9IGxkYXBfcHZ0X3VybF9zY2hlbWUycHJvdG8obHVkLT5sdWRfc2NoZW1lKTsKICAgbGRhcF9mcmVlX3VybGRlc2MobHVkKTsKIAotICBsaSA9IGNhbGxvYygxLCBzaXplb2YobGRhcGNvbm5pbmZvKSk7CisgIGxpID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbGRhcGNvbm5pbmZvKSk7CiAgIGlmKCFsaSkKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgbGktPnByb3RvID0gcHJvdG87Ci0gIGNvbm4tPnByb3RvLmdlbmVyaWMgPSBsaTsKKyAgY29ubi0+cHJvdG8ubGRhcGMgPSBsaTsKICAgY29ubmtlZXAoY29ubiwgIk9wZW5MREFQIGRlZmF1bHQiKTsKICAgcmV0dXJuIENVUkxFX09LOwogfQpAQCAtMjA1LDcgKzIwNSw3IEBACiAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQogewotICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3RydWN0IGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5sZGFwYzsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGludCByYywgcHJvdG8gPSBMREFQX1ZFUlNJT04zOwogICBjaGFyIGhvc3R1cmxbMTAyNF07CkBAIC0yNTIsNyArMjUyLDcgQEAKIAogc3RhdGljIENVUkxjb2RlIGxkYXBfY29ubmVjdGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgTERBUE1lc3NhZ2UgKm1zZyA9IE5VTEw7CiAgIHN0cnVjdCB0aW1ldmFsIHR2ID0gezAsIDF9LCAqdHZwOwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKIHsKLSAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIHN0cnVjdCBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8ubGRhcGM7CiAgICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247CiAKICAgaWYobGkpIHsKQEAgLTM2NSw3ICszNjUsNyBAQAogICAgICAgbGRhcF91bmJpbmRfZXh0KGxpLT5sZCwgTlVMTCwgTlVMTCk7CiAgICAgICBsaS0+bGQgPSBOVUxMOwogICAgIH0KLSAgICBjb25uLT5wcm90by5nZW5lcmljID0gTlVMTDsKKyAgICBjb25uLT5wcm90by5sZGFwYyA9IE5VTEw7CiAgICAgZnJlZShsaSk7CiAgIH0KICAgcmV0dXJuIENVUkxFX09LOwpAQCAtMzczLDggKzM3Myw4IEBACiAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKIHsKLSAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7Ci0gIGxkYXByZXFpbmZvICpscjsKKyAgc3RydWN0IGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5sZGFwYzsKKyAgc3RydWN0IGxkYXByZXFpbmZvICpscjsKICAgQ1VSTGNvZGUgc3RhdHVzID0gQ1VSTEVfT0s7CiAgIGludCByYyA9IDA7CiAgIExEQVBVUkxEZXNjICpsdWRwID0gTlVMTDsKQEAgLTQwNiw3ICs0MDYsNyBAQAogICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBsZGFwX3NlYXJjaF9leHQgJXMiLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKICAgICByZXR1cm4gQ1VSTEVfTERBUF9TRUFSQ0hfRkFJTEVEOwogICB9Ci0gIGxyID0gY2FsbG9jKDEsIHNpemVvZihsZGFwcmVxaW5mbykpOworICBsciA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxkYXByZXFpbmZvKSk7CiAgIGlmKCFscikKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgbHItPm1zZ2lkID0gbXNnaWQ7CkBAIC00MTksNyArNDE5LDcgQEAKIHN0YXRpYyBDVVJMY29kZSBsZGFwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSByZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQogewotICBsZGFwcmVxaW5mbyAqbHIgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworICBzdHJ1Y3QgbGRhcHJlcWluZm8gKmxyID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKIAogICAodm9pZClyZXM7CiAgICh2b2lkKXByZW1hdHVyZTsKQEAgLTQyNyw3ICs0MjcsNyBAQAogICBpZihscikgewogICAgIC8qIGlmIHRoZXJlIHdhcyBhIHNlYXJjaCBpbiBwcm9ncmVzcywgYWJhbmRvbiBpdCAqLwogICAgIGlmKGxyLT5tc2dpZCkgewotICAgICAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgICAgICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICAgICAgbGRhcF9hYmFuZG9uX2V4dChsaS0+bGQsIGxyLT5tc2dpZCwgTlVMTCwgTlVMTCk7CiAgICAgICBsci0+bXNnaWQgPSAwOwogICAgIH0KQEAgLTQ0MSw5ICs0NDEsOSBAQAogc3RhdGljIHNzaXplX3QgbGRhcF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwgY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7Ci0gIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICBzdHJ1Y3QgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmxkYXBjOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgbGRhcHJlcWluZm8gKmxyID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgc3RydWN0IGxkYXByZXFpbmZvICpsciA9IGRhdGEtPnJlcS5wcm90b3A7CiAgIGludCByYywgcmV0OwogICBMREFQTWVzc2FnZSAqbXNnID0gTlVMTDsKICAgTERBUE1lc3NhZ2UgKmVudDsKQEAgLTcxOCw3ICs3MTgsNyBAQAogbGRhcHNiX3Rsc19yZWFkKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QsIHZvaWQgKmJ1ZiwgYmVyX2xlbl90IGxlbikKIHsKICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gc2Jpb2QtPnNiaW9kX3B2dDsKLSAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIHN0cnVjdCBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8ubGRhcGM7CiAgIGJlcl9zbGVuX3QgcmV0OwogICBDVVJMY29kZSBlcnIgPSBDVVJMRV9SRUNWX0VSUk9SOwogCkBAIC03MzMsNyArNzMzLDcgQEAKIGxkYXBzYl90bHNfd3JpdGUoU29ja2J1Zl9JT19EZXNjICpzYmlvZCwgdm9pZCAqYnVmLCBiZXJfbGVuX3QgbGVuKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBzYmlvZC0+c2Jpb2RfcHZ0OwotICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3RydWN0IGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5sZGFwYzsKICAgYmVyX3NsZW5fdCByZXQ7CiAgIENVUkxjb2RlIGVyciA9IENVUkxFX1NFTkRfRVJST1I7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcGFyc2VkYXRlLmMKaW5kZXggN2FlNWViOC4uNTg1ZDdlYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcGFyc2VkYXRlLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcGFyc2VkYXRlLmMKQEAgLTEwMCwxNiArMTAwLDIwIEBACiAjZGVmaW5lIFBBUlNFREFURV9MQVRFUiAgMQogI2RlZmluZSBQQVJTRURBVEVfU09PTkVSIDIKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfUEFSU0VEQVRFCi0KKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfUEFSU0VEQVRFKSB8fCAhZGVmaW5lZChDVVJMX0RJU0FCTEVfRlRQKSB8fCBcCisgICFkZWZpbmVkKENVUkxfRElTQUJMRV9GSUxFKQorLyogVGhlc2UgbmFtZXMgYXJlIGFsc28gdXNlZCBieSBGVFAgYW5kIEZJTEUgY29kZSAqLwogY29uc3QgY2hhciAqIGNvbnN0IEN1cmxfd2tkYXlbXSA9CiB7Ik1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biJ9Owotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3ZWVrZGF5W10gPQoteyAiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwKLSAgIkZyaWRheSIsICJTYXR1cmRheSIsICJTdW5kYXkiIH07CiBjb25zdCBjaGFyICogY29uc3QgQ3VybF9tb250aFtdPQogeyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLAogICAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiIH07CisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUEFSU0VEQVRFCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHdlZWtkYXlbXSA9Cit7ICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLAorICAiRnJpZGF5IiwgIlNhdHVyZGF5IiwgIlN1bmRheSIgfTsKIAogc3RydWN0IHR6aW5mbyB7CiAgIGNoYXIgbmFtZVs1XTsKQEAgLTU4Myw2ICs1ODcsMzAgQEAKICAgcmV0dXJuIC0xOwogfQogCisvKiBDdXJsX2dldGRhdGVfY2FwcGVkKCkgZGlmZmVycyBmcm9tIGN1cmxfZ2V0ZGF0ZSgpIGluIHRoYXQgdGhpcyB3aWxsIHJldHVybgorICAgVElNRV9UX01BWCBpbiBjYXNlIHRoZSBwYXJzZWQgdGltZSB2YWx1ZSB3YXMgdG9vIGJpZywgaW5zdGVhZCBvZiBhbgorICAgZXJyb3IuICovCisKK3RpbWVfdCBDdXJsX2dldGRhdGVfY2FwcGVkKGNvbnN0IGNoYXIgKnApCit7CisgIHRpbWVfdCBwYXJzZWQgPSAtMTsKKyAgaW50IHJjID0gcGFyc2VkYXRlKHAsICZwYXJzZWQpOworCisgIHN3aXRjaChyYykgeworICBjYXNlIFBBUlNFREFURV9PSzoKKyAgICBpZihwYXJzZWQgPT0gLTEpCisgICAgICAvKiBhdm9pZCByZXR1cm5pbmcgLTEgZm9yIGEgd29ya2luZyBzY2VuYXJpbyAqLworICAgICAgcGFyc2VkKys7CisgICAgcmV0dXJuIHBhcnNlZDsKKyAgY2FzZSBQQVJTRURBVEVfTEFURVI6CisgICAgLyogdGhpcyByZXR1cm5zIHRoZSBtYXhpbXVtIHRpbWUgdmFsdWUgKi8KKyAgICByZXR1cm4gcGFyc2VkOworICBkZWZhdWx0OgorICAgIHJldHVybiAtMTsgLyogZXZlcnl0aGluZyBlbHNlIGlzIGZhaWwgKi8KKyAgfQorICAvKiBVTlJFQUNIQUJMRSAqLworfQorCiAvKgogICogQ3VybF9nbXRpbWUoKSBpcyBhIGdtdGltZSgpIHJlcGxhY2VtZW50IGZvciBwb3J0YWJpbGl0eS4gRG8gbm90IHVzZSB0aGUKICAqIGdtdGltZV9yKCkgb3IgZ210aW1lKCkgZnVuY3Rpb25zIGFueXdoZXJlIGVsc2UgYnV0IGhlcmUuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9wYXJzZWRhdGUuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5oCmluZGV4IDhkYzNiOTAuLjhjN2FlOTQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3BhcnNlZGF0ZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNyw0ICsyNywxMCBAQAogCiBDVVJMY29kZSBDdXJsX2dtdGltZSh0aW1lX3QgaW50aW1lLCBzdHJ1Y3QgdG0gKnN0b3JlKTsKIAorLyogQ3VybF9nZXRkYXRlX2NhcHBlZCgpIGRpZmZlcnMgZnJvbSBjdXJsX2dldGRhdGUoKSBpbiB0aGF0IHRoaXMgd2lsbCByZXR1cm4KKyAgIFRJTUVfVF9NQVggaW4gY2FzZSB0aGUgcGFyc2VkIHRpbWUgdmFsdWUgd2FzIHRvbyBiaWcsIGluc3RlYWQgb2YgYW4KKyAgIGVycm9yLiAqLworCit0aW1lX3QgQ3VybF9nZXRkYXRlX2NhcHBlZChjb25zdCBjaGFyICpwKTsKKwogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1BBUlNFREFURV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9waW5ncG9uZy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcGluZ3BvbmcuYwppbmRleCBlOTU2OGVlLi4zMTQzMzE1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9waW5ncG9uZy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Bpbmdwb25nLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ0LDEyICs0NCwxMiBAQAogCiAvKiBSZXR1cm5zIHRpbWVvdXQgaW4gbXMuIDAgb3IgbmVnYXRpdmUgbnVtYmVyIG1lYW5zIHRoZSB0aW1lb3V0IGhhcyBhbHJlYWR5CiAgICB0cmlnZ2VyZWQgKi8KLXRpbWVfdCBDdXJsX3BwX3N0YXRlX3RpbWVvdXQoc3RydWN0IHBpbmdwb25nICpwcCwgYm9vbCBkaXNjb25uZWN0aW5nKQordGltZWRpZmZfdCBDdXJsX3BwX3N0YXRlX3RpbWVvdXQoc3RydWN0IHBpbmdwb25nICpwcCwgYm9vbCBkaXNjb25uZWN0aW5nKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHRpbWVfdCB0aW1lb3V0X21zOyAvKiBpbiBtaWxsaXNlY29uZHMgKi8KLSAgbG9uZyByZXNwb25zZV90aW1lID0gKGRhdGEtPnNldC5zZXJ2ZXJfcmVzcG9uc2VfdGltZW91dCk/CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsgLyogaW4gbWlsbGlzZWNvbmRzICovCisgIHRpbWVkaWZmX3QgcmVzcG9uc2VfdGltZSA9IChkYXRhLT5zZXQuc2VydmVyX3Jlc3BvbnNlX3RpbWVvdXQpPwogICAgIGRhdGEtPnNldC5zZXJ2ZXJfcmVzcG9uc2VfdGltZW91dDogcHAtPnJlc3BvbnNlX3RpbWU7CiAKICAgLyogaWYgQ1VSTE9QVF9TRVJWRVJfUkVTUE9OU0VfVElNRU9VVCBpcyBzZXQsIHVzZSB0aGF0IHRvIGRldGVybWluZQpAQCAtNjQsNyArNjQsNyBAQAogCiAgIGlmKGRhdGEtPnNldC50aW1lb3V0ICYmICFkaXNjb25uZWN0aW5nKSB7CiAgICAgLyogaWYgdGltZW91dCBpcyByZXF1ZXN0ZWQsIGZpbmQgb3V0IGhvdyBtdWNoIHJlbWFpbmluZyB0aW1lIHdlIGhhdmUgKi8KLSAgICB0aW1lX3QgdGltZW91dDJfbXMgPSBkYXRhLT5zZXQudGltZW91dCAtIC8qIHRpbWVvdXQgdGltZSAqLworICAgIHRpbWVkaWZmX3QgdGltZW91dDJfbXMgPSBkYXRhLT5zZXQudGltZW91dCAtIC8qIHRpbWVvdXQgdGltZSAqLwogICAgICAgQ3VybF90aW1lZGlmZihDdXJsX25vdygpLCBjb25uLT5ub3cpOyAvKiBzcGVudCB0aW1lICovCiAKICAgICAvKiBwaWNrIHRoZSBsb3dlc3QgbnVtYmVyICovCkBAIC04Myw4ICs4Myw4IEBACiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHBwLT5jb25uOwogICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKICAgaW50IHJjOwotICB0aW1lX3QgaW50ZXJ2YWxfbXM7Ci0gIHRpbWVfdCB0aW1lb3V0X21zID0gQ3VybF9wcF9zdGF0ZV90aW1lb3V0KHBwLCBkaXNjb25uZWN0aW5nKTsKKyAgdGltZWRpZmZfdCBpbnRlcnZhbF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF9wcF9zdGF0ZV90aW1lb3V0KHBwLCBkaXNjb25uZWN0aW5nKTsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogCkBAIC0zODQsMTAgKzM4NCwxMCBAQAogCiAgICAgICAgICAgaWYocHAtPmVuZG9mcmVzcChjb25uLCBwcC0+bGluZXN0YXJ0X3Jlc3AsIHBlcmxpbmUsIGNvZGUpKSB7CiAgICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSwgY29weSB0aGUgbGFzdCBsaW5lIHRvIHRoZQotICAgICAgICAgICAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciBhbmQgemVybyB0ZXJtaW5hdGUsIGZvciBvbGQgdGltZXMgc2FrZSAqLworICAgICAgICAgICAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciBhbmQgbnVsbC10ZXJtaW5hdGUsIGZvciBvbGQgdGltZXMgc2FrZSAqLwogICAgICAgICAgICAgc2l6ZV90IG4gPSBwdHIgLSBwcC0+bGluZXN0YXJ0X3Jlc3A7CiAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiwgcHAtPmxpbmVzdGFydF9yZXNwLCBuKTsKLSAgICAgICAgICAgIGJ1ZltuXSA9IDA7IC8qIHplcm8gdGVybWluYXRlICovCisgICAgICAgICAgICBidWZbbl0gPSAwOyAvKiBudWxsLXRlcm1pbmF0ZSAqLwogICAgICAgICAgICAga2VlcG9uID0gRkFMU0U7CiAgICAgICAgICAgICBwcC0+bGluZXN0YXJ0X3Jlc3AgPSBwdHIgKyAxOyAvKiBhZHZhbmNlIHBvaW50ZXIgKi8KICAgICAgICAgICAgIGkrKzsgLyogc2tpcCB0aGlzIGJlZm9yZSBnZXR0aW5nIG91dCAqLwpAQCAtNDYzLDE0ICs0NjMsOSBAQAogfQogCiBpbnQgQ3VybF9wcF9nZXRzb2NrKHN0cnVjdCBwaW5ncG9uZyAqcHAsCi0gICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKLQotICBpZighbnVtc29ja3MpCi0gICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKIAogICBpZihwcC0+c2VuZGxlZnQpIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Bpbmdwb25nLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9waW5ncG9uZy5oCmluZGV4IGRiZTFmOGQuLmU4NzQ3OTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Bpbmdwb25nLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcGluZ3BvbmcuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNjAsOSArNjAsOCBAQAogICBzaXplX3Qgc2VuZHNpemU7IC8qIHRvdGFsIHNpemUgb2YgdGhlIHNlbmR0aGlzIGJ1ZmZlciAqLwogICBzdHJ1Y3QgY3VybHRpbWUgcmVzcG9uc2U7IC8qIHNldCB0byBDdXJsX25vdygpIHdoZW4gYSBjb21tYW5kIGhhcyBiZWVuIHNlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmYsIHVzZWQgdG8gdGltZS1vdXQgcmVzcG9uc2UgcmVhZGluZyAqLwotICBsb25nIHJlc3BvbnNlX3RpbWU7IC8qIFdoZW4gbm8gdGltZW91dCBpcyBnaXZlbiwgdGhpcyBpcyB0aGUgYW1vdW50IG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzIHdlIGF3YWl0IGZvciBhIHNlcnZlciByZXNwb25zZS4gKi8KLQorICB0aW1lZGlmZl90IHJlc3BvbnNlX3RpbWU7IC8qIFdoZW4gbm8gdGltZW91dCBpcyBnaXZlbiwgdGhpcyBpcyB0aGUgYW1vdW50IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzIHdlIGF3YWl0IGZvciBhIHNlcnZlciByZXNwb25zZS4gKi8KICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uOyAvKiBwb2ludHMgdG8gdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCB0aGF0IHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxvbmdzIHRvICovCiAKQEAgLTg5LDcgKzg4LDcgQEAKIAogLyogUmV0dXJucyB0aW1lb3V0IGluIG1zLiAwIG9yIG5lZ2F0aXZlIG51bWJlciBtZWFucyB0aGUgdGltZW91dCBoYXMgYWxyZWFkeQogICAgdHJpZ2dlcmVkICovCi10aW1lX3QgQ3VybF9wcF9zdGF0ZV90aW1lb3V0KHN0cnVjdCBwaW5ncG9uZyAqcHAsIGJvb2wgZGlzY29ubmVjdGluZyk7Cit0aW1lZGlmZl90IEN1cmxfcHBfc3RhdGVfdGltZW91dChzdHJ1Y3QgcGluZ3BvbmcgKnBwLCBib29sIGRpc2Nvbm5lY3RpbmcpOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM1LDggKzEzNCw3IEBACiAvKiBjYWxsIHRoaXMgd2hlbiBhIHBpbmdwb25nIGNvbm5lY3Rpb24gaXMgZGlzY29ubmVjdGVkICovCiBDVVJMY29kZSBDdXJsX3BwX2Rpc2Nvbm5lY3Qoc3RydWN0IHBpbmdwb25nICpwcCk7CiAKLWludCBDdXJsX3BwX2dldHNvY2soc3RydWN0IHBpbmdwb25nICpwcCwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitpbnQgQ3VybF9wcF9nZXRzb2NrKHN0cnVjdCBwaW5ncG9uZyAqcHAsIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BvcDMuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3BvcDMuYwppbmRleCBjOGYzOTY1Li45ZmY1Yzc4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9wb3AzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcG9wMy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC05NSw4ICs5NSw3IEBACiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotc3RhdGljIGludCBwb3AzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitzdGF0aWMgaW50IHBvcDNfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIHN0YXRpYyBDVVJMY29kZSBwb3AzX3BhcnNlX3VybF9vcHRpb25zKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CkBAIC0xNzksNyArMTc4LDcgQEAKICAgY29ubi0+aGFuZGxlciA9ICZDdXJsX2hhbmRsZXJfcG9wM3M7CiAKICAgLyogU2V0IHRoZSBjb25uZWN0aW9uJ3MgdXBncmFkZWQgdG8gVExTIGZsYWcgKi8KLSAgY29ubi0+dGxzX3VwZ3JhZGVkID0gVFJVRTsKKyAgY29ubi0+Yml0cy50bHNfdXBncmFkZWQgPSBUUlVFOwogfQogI2Vsc2UKICNkZWZpbmUgcG9wM190b19wb3Azcyh4KSBDdXJsX25vcF9zdG10CkBAIC0zMzksMTAgKzMzOCw4IEBACiAgKi8KIHN0YXRpYyBDVVJMY29kZSBwb3AzX3BlcmZvcm1fc3RhcnR0bHMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQogICAvKiBTZW5kIHRoZSBTVExTIGNvbW1hbmQgKi8KLSAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8ucG9wM2MucHAsICIlcyIsICJTVExTIik7CisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnBvcDNjLnBwLCAiJXMiLCAiU1RMUyIpOwogCiAgIGlmKCFyZXN1bHQpCiAgICAgc3RhdGUoY29ubiwgUE9QM19TVEFSVFRMUyk7CkBAIC0zNTgsMTEgKzM1NSwxMCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgcG9wM19wZXJmb3JtX3VwZ3JhZGVfdGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBwb3AzX2Nvbm4gKnBvcDNjID0gJmNvbm4tPnByb3RvLnBvcDNjOwotCiAgIC8qIFN0YXJ0IHRoZSBTU0wgY29ubmVjdGlvbiAqLwotICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmcG9wM2MtPnNzbGRvbmUpOworICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBGSVJTVFNPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9wM2MtPnNzbGRvbmUpOwogCiAgIGlmKCFyZXN1bHQpIHsKICAgICBpZihwb3AzYy0+c3RhdGUgIT0gUE9QM19VUEdSQURFVExTKQpAQCAtNDE2LDcgKzQxMiw3IEBACiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKICAgc2l6ZV90IGk7Ci0gIE1ENV9jb250ZXh0ICpjdHh0OworICBzdHJ1Y3QgTUQ1X2NvbnRleHQgKmN0eHQ7CiAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W01ENV9ESUdFU1RfTEVOXTsKICAgY2hhciBzZWNyZXRbMiAqIE1ENV9ESUdFU1RfTEVOICsgMV07CiAKQEAgLTU5MywxMCArNTg5LDggQEAKICAqLwogc3RhdGljIENVUkxjb2RlIHBvcDNfcGVyZm9ybV9xdWl0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KICAgLyogU2VuZCB0aGUgUVVJVCBjb21tYW5kICovCi0gIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnBvcDNjLnBwLCAiJXMiLCAiUVVJVCIpOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5wb3AzYy5wcCwgIiVzIiwgIlFVSVQiKTsKIAogICBpZighcmVzdWx0KQogICAgIHN0YXRlKGNvbm4sIFBPUDNfUVVJVCk7CkBAIC0xMDYwLDEwICsxMDU0LDkgQEAKIH0KIAogLyogRm9yIHRoZSBQT1AzICJwcm90b2NvbCBjb25uZWN0IiBhbmQgImRvaW5nIiBwaGFzZXMgb25seSAqLwotc3RhdGljIGludCBwb3AzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3N0YXRpYyBpbnQgcG9wM19nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLnBvcDNjLnBwLCBzb2NrcywgbnVtc29ja3MpOworICByZXR1cm4gQ3VybF9wcF9nZXRzb2NrKCZjb25uLT5wcm90by5wb3AzYy5wcCwgc29ja3MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzMTksNyArMTMxMiw3IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAvKiBDbGVhciB0aGUgVExTIHVwZ3JhZGVkIGZsYWcgKi8KLSAgY29ubi0+dGxzX3VwZ3JhZGVkID0gRkFMU0U7CisgIGNvbm4tPmJpdHMudGxzX3VwZ3JhZGVkID0gRkFMU0U7CiAKICAgcmV0dXJuIENVUkxFX09LOwogfQpAQCAtMTM5Nyw3ICsxMzkwLDcgQEAKICAgY29uc3QgY2hhciAqcGF0aCA9ICZkYXRhLT5zdGF0ZS51cC5wYXRoWzFdOyAvKiBza2lwIGxlYWRpbmcgcGF0aCAqLwogCiAgIC8qIFVSTCBkZWNvZGUgdGhlIHBhdGggZm9yIHRoZSBtZXNzYWdlIElEICovCi0gIHJldHVybiBDdXJsX3VybGRlY29kZShkYXRhLCBwYXRoLCAwLCAmcG9wMy0+aWQsIE5VTEwsIFRSVUUpOworICByZXR1cm4gQ3VybF91cmxkZWNvZGUoZGF0YSwgcGF0aCwgMCwgJnBvcDMtPmlkLCBOVUxMLCBSRUpFQ1RfQ1RSTCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTQxNSw3ICsxNDA4LDcgQEAKIAogICAvKiBVUkwgZGVjb2RlIHRoZSBjdXN0b20gcmVxdWVzdCAqLwogICBpZihjdXN0b20pCi0gICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgY3VzdG9tLCAwLCAmcG9wMy0+Y3VzdG9tLCBOVUxMLCBUUlVFKTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBjdXN0b20sIDAsICZwb3AzLT5jdXN0b20sIE5VTEwsIFJFSkVDVF9DVFJMKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcG9wMy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcG9wMy5oCmluZGV4IGE4ZTY5N2MuLjNiYTc5OTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3BvcDMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9wb3AzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Byb2dyZXNzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9wcm9ncmVzcy5jCmluZGV4IGY1ODZkNTkuLjg5NTEzODQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Byb2dyZXNzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcHJvZ3Jlc3MuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAidGltZXZhbC5oIgogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAKIC8qIGNoZWNrIHJhdGUgbGltaXRzIHdpdGhpbiB0aGlzIG1hbnkgcmVjZW50IG1pbGxpc2Vjb25kcywgYXQgbWluaW11bS4gKi8KQEAgLTE2OCw3ICsxNjksNyBAQAogdm9pZCBDdXJsX3BncnNUaW1lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVyaWQgdGltZXIpCiB7CiAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICB0aW1lX3QgKmRlbHRhID0gTlVMTDsKKyAgdGltZWRpZmZfdCAqZGVsdGEgPSBOVUxMOwogCiAgIHN3aXRjaCh0aW1lcikgewogICBkZWZhdWx0OgpAQCAtMjM4LDYgKzIzOSw4IEBACiAgIGRhdGEtPnByb2dyZXNzLnVsX2xpbWl0X3N0YXJ0LnR2X3VzZWMgPSAwOwogICBkYXRhLT5wcm9ncmVzcy5kbF9saW1pdF9zdGFydC50dl9zZWMgPSAwOwogICBkYXRhLT5wcm9ncmVzcy5kbF9saW1pdF9zdGFydC50dl91c2VjID0gMDsKKyAgZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCA9IDA7CisgIGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkID0gMDsKICAgLyogY2xlYXIgYWxsIGJpdHMgZXhjZXB0IEhJREUgYW5kIEhFQURFUlNfT1VUICovCiAgIGRhdGEtPnByb2dyZXNzLmZsYWdzICY9IFBHUlNfSElERXxQR1JTX0hFQURFUlNfT1VUOwogICBDdXJsX3JhdGVsaW1pdChkYXRhLCBkYXRhLT5wcm9ncmVzcy5zdGFydCk7CkBAIC0yNjgsOCArMjcxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybHRpbWUgbm93KQogewogICBjdXJsX29mZl90IHNpemUgPSBjdXJzaXplIC0gc3RhcnRzaXplOwotICB0aW1lX3QgbWluaW11bTsKLSAgdGltZV90IGFjdHVhbDsKKyAgdGltZWRpZmZfdCBtaW5pbXVtOworICB0aW1lZGlmZl90IGFjdHVhbDsKIAogICBpZighbGltaXQgfHwgIXNpemUpCiAgICAgcmV0dXJuIDA7CkBAIC0yNzksMTMgKzI4MiwxMyBAQAogICAgKiBzdGF5IGJlbG93ICdsaW1pdCcuCiAgICAqLwogICBpZihzaXplIDwgQ1VSTF9PRkZfVF9NQVgvMTAwMCkKLSAgICBtaW5pbXVtID0gKHRpbWVfdCkgKENVUkxfT0ZGX1RfQygxMDAwKSAqIHNpemUgLyBsaW1pdCk7CisgICAgbWluaW11bSA9ICh0aW1lZGlmZl90KSAoQ1VSTF9PRkZfVF9DKDEwMDApICogc2l6ZSAvIGxpbWl0KTsKICAgZWxzZSB7Ci0gICAgbWluaW11bSA9ICh0aW1lX3QpIChzaXplIC8gbGltaXQpOwotICAgIGlmKG1pbmltdW0gPCBUSU1FX1RfTUFYLzEwMDApCisgICAgbWluaW11bSA9ICh0aW1lZGlmZl90KSAoc2l6ZSAvIGxpbWl0KTsKKyAgICBpZihtaW5pbXVtIDwgVElNRURJRkZfVF9NQVgvMTAwMCkKICAgICAgIG1pbmltdW0gKj0gMTAwMDsKICAgICBlbHNlCi0gICAgICBtaW5pbXVtID0gVElNRV9UX01BWDsKKyAgICAgIG1pbmltdW0gPSBUSU1FRElGRl9UX01BWDsKICAgfQogCiAgIC8qCkBAIC0zNjQsMTggKzM2NywxNSBAQAogICB9CiB9CiAKLSNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST0dSRVNTX01FVEVSCi1zdGF0aWMgdm9pZCBwcm9ncmVzc19tZXRlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCisvKiByZXR1cm5zIFRSVUUgaWYgaXQncyB0aW1lIHRvIHNob3cgdGhlIHByb2dyZXNzIG1ldGVyICovCitzdGF0aWMgYm9vbCBwcm9ncmVzc19jYWxjKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3RydWN0IGN1cmx0aW1lIG5vdykKIHsKLSAgc3RydWN0IGN1cmx0aW1lIG5vdzsKICAgY3VybF9vZmZfdCB0aW1lc3BlbnQ7CiAgIGN1cmxfb2ZmX3QgdGltZXNwZW50X21zOyAvKiBtaWxsaXNlY29uZHMgKi8KICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIGJvb2wgc2hvd25vdyA9IEZBTFNFOwogICBjdXJsX29mZl90IGRsID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZDsKICAgY3VybF9vZmZfdCB1bCA9IGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkOwotCi0gIG5vdyA9IEN1cmxfbm93KCk7IC8qIHdoYXQgdGltZSBpcyBpdCAqLworICBib29sIHRpbWV0b3Nob3cgPSBGQUxTRTsKIAogICAvKiBUaGUgdGltZSBzcGVudCBzbyBmYXIgKGZyb20gdGhlIHN0YXJ0KSAqLwogICBkYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQgPSBDdXJsX3RpbWVkaWZmX3VzKG5vdywgZGF0YS0+cHJvZ3Jlc3Muc3RhcnQpOwpAQCAtMzk4LDEwICszOTgsOCBAQAogICBpZihkYXRhLT5wcm9ncmVzcy5sYXN0c2hvdyAhPSBub3cudHZfc2VjKSB7CiAgICAgaW50IGNvdW50aW5kZXg7IC8qIGFtb3VudCBvZiBzZWNvbmRzIHN0b3JlZCBpbiB0aGUgc3BlZWRlciBhcnJheSAqLwogICAgIGludCBub3dpbmRleCA9IGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfYyUgQ1VSUl9USU1FOwotICAgIGlmKCEoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0hJREUpKQotICAgICAgc2hvd25vdyA9IFRSVUU7Ci0KICAgICBkYXRhLT5wcm9ncmVzcy5sYXN0c2hvdyA9IG5vdy50dl9zZWM7CisgICAgdGltZXRvc2hvdyA9IFRSVUU7CiAKICAgICAvKiBMZXQncyBkbyB0aGUgImN1cnJlbnQgc3BlZWQiIHRoaW5nLCB3aXRoIHRoZSBkbCArIHVsIHNwZWVkcwogICAgICAgIGNvbWJpbmVkLiBTdG9yZSB0aGUgc3BlZWQgYXQgZW50cnkgJ25vd2luZGV4Jy4gKi8KQEAgLTQzNCw4ICs0MzIsNyBAQAogICAgICAgICBkYXRhLT5wcm9ncmVzcy5zcGVlZGVyX2MlQ1VSUl9USU1FOjA7CiAKICAgICAgIC8qIEZpZ3VyZSBvdXQgdGhlIGV4YWN0IHRpbWUgZm9yIHRoZSB0aW1lIHNwYW4gKi8KLSAgICAgIHNwYW5fbXMgPSBDdXJsX3RpbWVkaWZmKG5vdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfdGltZVtjaGVja2luZGV4XSk7CisgICAgICBzcGFuX21zID0gQ3VybF90aW1lZGlmZihub3csIGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfdGltZVtjaGVja2luZGV4XSk7CiAgICAgICBpZigwID09IHNwYW5fbXMpCiAgICAgICAgIHNwYW5fbXMgPSAxOyAvKiBhdCBsZWFzdCBvbmUgbWlsbGlzZWNvbmQgTVVTVCBoYXZlIHBhc3NlZCAqLwogCkBAIC00NjEsMTE4ICs0NTgsMTE5IEBACiAgICAgICAgIGRhdGEtPnByb2dyZXNzLnVsc3BlZWQgKyBkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOwogCiAgIH0gLyogQ2FsY3VsYXRpb25zIGVuZCAqLwotICBpZighc2hvd25vdykKLSAgICAvKiBvbmx5IHNob3cgdGhlIGludGVybmFsIHByb2dyZXNzIG1ldGVyIG9uY2UgcGVyIHNlY29uZCAqLwotICAgIHJldHVybjsKLSAgZWxzZSB7Ci0gICAgLyogSWYgdGhlcmUncyBubyBleHRlcm5hbCBjYWxsYmFjayBzZXQsIHVzZSBpbnRlcm5hbCBjb2RlIHRvIHNob3cKLSAgICAgICBwcm9ncmVzcyAqLwotICAgIC8qIHByb2dyZXNzIG1ldGVyIGhhcyBub3QgYmVlbiBzaHV0IG9mZiAqLwotICAgIGNoYXIgbWF4NVs2XVsxMF07Ci0gICAgY3VybF9vZmZfdCBkbHBlcmNlbiA9IDA7Ci0gICAgY3VybF9vZmZfdCB1bHBlcmNlbiA9IDA7Ci0gICAgY3VybF9vZmZfdCB0b3RhbF9wZXJjZW4gPSAwOwotICAgIGN1cmxfb2ZmX3QgdG90YWxfdHJhbnNmZXI7Ci0gICAgY3VybF9vZmZfdCB0b3RhbF9leHBlY3RlZF90cmFuc2ZlcjsKLSAgICBjaGFyIHRpbWVfbGVmdFsxMF07Ci0gICAgY2hhciB0aW1lX3RvdGFsWzEwXTsKLSAgICBjaGFyIHRpbWVfc3BlbnRbMTBdOwotICAgIGN1cmxfb2ZmX3QgdWxlc3RpbWF0ZSA9IDA7Ci0gICAgY3VybF9vZmZfdCBkbGVzdGltYXRlID0gMDsKLSAgICBjdXJsX29mZl90IHRvdGFsX2VzdGltYXRlOworICByZXR1cm4gdGltZXRvc2hvdzsKK30KIAotICAgIGlmKCEoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0hFQURFUlNfT1VUKSkgewotICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKLSAgICAgICAgZnByaW50ZihkYXRhLT5zZXQuZXJyLAotICAgICAgICAgICAgICAgICIqKiBSZXN1bWluZyB0cmFuc2ZlciBmcm9tIGJ5dGUgcG9zaXRpb24gJSIKLSAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJcbiIsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgIH0KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST0dSRVNTX01FVEVSCitzdGF0aWMgdm9pZCBwcm9ncmVzc19tZXRlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyIG1heDVbNl1bMTBdOworICBjdXJsX29mZl90IGRscGVyY2VuID0gMDsKKyAgY3VybF9vZmZfdCB1bHBlcmNlbiA9IDA7CisgIGN1cmxfb2ZmX3QgdG90YWxfcGVyY2VuID0gMDsKKyAgY3VybF9vZmZfdCB0b3RhbF90cmFuc2ZlcjsKKyAgY3VybF9vZmZfdCB0b3RhbF9leHBlY3RlZF90cmFuc2ZlcjsKKyAgY2hhciB0aW1lX2xlZnRbMTBdOworICBjaGFyIHRpbWVfdG90YWxbMTBdOworICBjaGFyIHRpbWVfc3BlbnRbMTBdOworICBjdXJsX29mZl90IHVsZXN0aW1hdGUgPSAwOworICBjdXJsX29mZl90IGRsZXN0aW1hdGUgPSAwOworICBjdXJsX29mZl90IHRvdGFsX2VzdGltYXRlOworICBjdXJsX29mZl90IHRpbWVzcGVudCA9CisgICAgKGN1cmxfb2ZmX3QpZGF0YS0+cHJvZ3Jlc3MudGltZXNwZW50LzEwMDAwMDA7IC8qIHNlY29uZHMgKi8KKworICBpZighKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19IRUFERVJTX09VVCkpIHsKKyAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewogICAgICAgZnByaW50ZihkYXRhLT5zZXQuZXJyLAotICAgICAgICAgICAgICAiICAlJSBUb3RhbCAgICAlJSBSZWNlaXZlZCAlJSBYZmVyZCAgQXZlcmFnZSBTcGVlZCAgICIKLSAgICAgICAgICAgICAgIlRpbWUgICAgVGltZSAgICAgVGltZSAgQ3VycmVudFxuIgotICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGxvYWQgIFVwbG9hZCAgICIKLSAgICAgICAgICAgICAgIlRvdGFsICAgU3BlbnQgICAgTGVmdCAgU3BlZWRcbiIpOwotICAgICAgZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgfD0gUEdSU19IRUFERVJTX09VVDsgLyogaGVhZGVycyBhcmUgc2hvd24gKi8KKyAgICAgICAgICAgICAgIioqIFJlc3VtaW5nIHRyYW5zZmVyIGZyb20gYnl0ZSBwb3NpdGlvbiAlIgorICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJcbiIsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKICAgICB9Ci0KLSAgICAvKiBGaWd1cmUgb3V0IHRoZSBlc3RpbWF0ZWQgdGltZSBvZiBhcnJpdmFsIGZvciB0aGUgdXBsb2FkICovCi0gICAgaWYoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19VTF9TSVpFX0tOT1dOKSAmJgotICAgICAgIChkYXRhLT5wcm9ncmVzcy51bHNwZWVkID4gQ1VSTF9PRkZfVF9DKDApKSkgewotICAgICAgdWxlc3RpbWF0ZSA9IGRhdGEtPnByb2dyZXNzLnNpemVfdWwgLyBkYXRhLT5wcm9ncmVzcy51bHNwZWVkOwotCi0gICAgICBpZihkYXRhLT5wcm9ncmVzcy5zaXplX3VsID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKLSAgICAgICAgdWxwZXJjZW4gPSBkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCAvCi0gICAgICAgICAgKGRhdGEtPnByb2dyZXNzLnNpemVfdWwvQ1VSTF9PRkZfVF9DKDEwMCkpOwotICAgICAgZWxzZSBpZihkYXRhLT5wcm9ncmVzcy5zaXplX3VsID4gQ1VSTF9PRkZfVF9DKDApKQotICAgICAgICB1bHBlcmNlbiA9IChkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCoxMDApIC8KLSAgICAgICAgICBkYXRhLT5wcm9ncmVzcy5zaXplX3VsOwotICAgIH0KLQotICAgIC8qIC4uLiBhbmQgdGhlIGRvd25sb2FkICovCi0gICAgaWYoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19ETF9TSVpFX0tOT1dOKSAmJgotICAgICAgIChkYXRhLT5wcm9ncmVzcy5kbHNwZWVkID4gQ1VSTF9PRkZfVF9DKDApKSkgewotICAgICAgZGxlc3RpbWF0ZSA9IGRhdGEtPnByb2dyZXNzLnNpemVfZGwgLyBkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOwotCi0gICAgICBpZihkYXRhLT5wcm9ncmVzcy5zaXplX2RsID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKLSAgICAgICAgZGxwZXJjZW4gPSBkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkIC8KLSAgICAgICAgICAoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbC9DVVJMX09GRl9UX0MoMTAwKSk7Ci0gICAgICBlbHNlIGlmKGRhdGEtPnByb2dyZXNzLnNpemVfZGwgPiBDVVJMX09GRl9UX0MoMCkpCi0gICAgICAgIGRscGVyY2VuID0gKGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQqMTAwKSAvCi0gICAgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbDsKLSAgICB9Ci0KLSAgICAvKiBOb3cgZmlndXJlIG91dCB3aGljaCBvZiB0aGVtIGlzIHNsb3dlciBhbmQgdXNlIHRoYXQgb25lIGZvciB0aGUKLSAgICAgICB0b3RhbCBlc3RpbWF0ZSEgKi8KLSAgICB0b3RhbF9lc3RpbWF0ZSA9IHVsZXN0aW1hdGU+ZGxlc3RpbWF0ZT91bGVzdGltYXRlOmRsZXN0aW1hdGU7Ci0KLSAgICAvKiBjcmVhdGUgdGhlIHRocmVlIHRpbWUgc3RyaW5ncyAqLwotICAgIHRpbWUyc3RyKHRpbWVfbGVmdCwgdG90YWxfZXN0aW1hdGUgPiAwPyh0b3RhbF9lc3RpbWF0ZSAtIHRpbWVzcGVudCk6MCk7Ci0gICAgdGltZTJzdHIodGltZV90b3RhbCwgdG90YWxfZXN0aW1hdGUpOwotICAgIHRpbWUyc3RyKHRpbWVfc3BlbnQsIHRpbWVzcGVudCk7Ci0KLSAgICAvKiBHZXQgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIGV4cGVjdGVkIHRvIGdldCB0cmFuc2ZlcnJlZCAqLwotICAgIHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyID0KLSAgICAgICgoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX1VMX1NJWkVfS05PV04pPwotICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfdWw6ZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQpKwotICAgICAgKChkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfRExfU0laRV9LTk9XTik/Ci0gICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbDpkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkKTsKLQotICAgIC8qIFdlIGhhdmUgdHJhbnNmZXJyZWQgdGhpcyBtdWNoIHNvIGZhciAqLwotICAgIHRvdGFsX3RyYW5zZmVyID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCArIGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkOwotCi0gICAgLyogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGRhdGEgdHJhbnNmZXJyZWQgc28gZmFyICovCi0gICAgaWYodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIgPiBDVVJMX09GRl9UX0MoMTAwMDApKQotICAgICAgdG90YWxfcGVyY2VuID0gdG90YWxfdHJhbnNmZXIgLwotICAgICAgICAodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIvQ1VSTF9PRkZfVF9DKDEwMCkpOwotICAgIGVsc2UgaWYodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIgPiBDVVJMX09GRl9UX0MoMCkpCi0gICAgICB0b3RhbF9wZXJjZW4gPSAodG90YWxfdHJhbnNmZXIqMTAwKSAvIHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyOwotCiAgICAgZnByaW50ZihkYXRhLT5zZXQuZXJyLAotICAgICAgICAgICAgIlxyIgotICAgICAgICAgICAgIiUzIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIgJXMgICIKLSAgICAgICAgICAgICIlMyIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiICVzICAiCi0gICAgICAgICAgICAiJTMiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIiAlcyAgJXMgICVzICVzICVzICVzICVzIiwKLSAgICAgICAgICAgIHRvdGFsX3BlcmNlbiwgIC8qIDMgbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0b3RhbCAlICovCi0gICAgICAgICAgICBtYXg1ZGF0YSh0b3RhbF9leHBlY3RlZF90cmFuc2ZlciwgbWF4NVsyXSksICAgLyogdG90YWwgc2l6ZSAqLwotICAgICAgICAgICAgZGxwZXJjZW4sICAgICAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHJjdmQgJSAqLwotICAgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCwgbWF4NVswXSksIC8qIHJjdmQgc2l6ZSAqLwotICAgICAgICAgICAgdWxwZXJjZW4sICAgICAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHhmZXIgJSAqLwotICAgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQsIG1heDVbMV0pLCAgIC8qIHhmZXIgc2l6ZSAqLwotICAgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCwgbWF4NVszXSksICAgIC8qIGF2cmcgZGwgc3BlZWQgKi8KLSAgICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQsIG1heDVbNF0pLCAgICAvKiBhdnJnIHVsIHNwZWVkICovCi0gICAgICAgICAgICB0aW1lX3RvdGFsLCAgICAvKiA4IGxldHRlcnMgKi8gICAgICAgICAgICAgICAgLyogdG90YWwgdGltZSAqLwotICAgICAgICAgICAgdGltZV9zcGVudCwgICAgLyogOCBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHRpbWUgc3BlbnQgKi8KLSAgICAgICAgICAgIHRpbWVfbGVmdCwgICAgIC8qIDggbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0aW1lIGxlZnQgKi8KLSAgICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLmN1cnJlbnRfc3BlZWQsIG1heDVbNV0pCi0gICAgICApOworICAgICAgICAgICAgIiAgJSUgVG90YWwgICAgJSUgUmVjZWl2ZWQgJSUgWGZlcmQgIEF2ZXJhZ2UgU3BlZWQgICAiCisgICAgICAgICAgICAiVGltZSAgICBUaW1lICAgICBUaW1lICBDdXJyZW50XG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGxvYWQgIFVwbG9hZCAgICIKKyAgICAgICAgICAgICJUb3RhbCAgIFNwZW50ICAgIExlZnQgIFNwZWVkXG4iKTsKKyAgICBkYXRhLT5wcm9ncmVzcy5mbGFncyB8PSBQR1JTX0hFQURFUlNfT1VUOyAvKiBoZWFkZXJzIGFyZSBzaG93biAqLworICB9CiAKLSAgICAvKiB3ZSBmbHVzaCB0aGUgb3V0cHV0IHN0cmVhbSB0byBtYWtlIGl0IGFwcGVhciBhcyBzb29uIGFzIHBvc3NpYmxlICovCi0gICAgZmZsdXNoKGRhdGEtPnNldC5lcnIpOwotICB9IC8qIGRvbid0IHNob3cgbm93ICovCisgIC8qIEZpZ3VyZSBvdXQgdGhlIGVzdGltYXRlZCB0aW1lIG9mIGFycml2YWwgZm9yIHRoZSB1cGxvYWQgKi8KKyAgaWYoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19VTF9TSVpFX0tOT1dOKSAmJgorICAgICAoZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCA+IENVUkxfT0ZGX1RfQygwKSkpIHsKKyAgICB1bGVzdGltYXRlID0gZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCAvIGRhdGEtPnByb2dyZXNzLnVsc3BlZWQ7CisKKyAgICBpZihkYXRhLT5wcm9ncmVzcy5zaXplX3VsID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKKyAgICAgIHVscGVyY2VuID0gZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQgLworICAgICAgICAoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bC9DVVJMX09GRl9UX0MoMTAwKSk7CisgICAgZWxzZSBpZihkYXRhLT5wcm9ncmVzcy5zaXplX3VsID4gQ1VSTF9PRkZfVF9DKDApKQorICAgICAgdWxwZXJjZW4gPSAoZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQqMTAwKSAvCisgICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfdWw7CisgIH0KKworICAvKiAuLi4gYW5kIHRoZSBkb3dubG9hZCAqLworICBpZigoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0RMX1NJWkVfS05PV04pICYmCisgICAgIChkYXRhLT5wcm9ncmVzcy5kbHNwZWVkID4gQ1VSTF9PRkZfVF9DKDApKSkgeworICAgIGRsZXN0aW1hdGUgPSBkYXRhLT5wcm9ncmVzcy5zaXplX2RsIC8gZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZDsKKworICAgIGlmKGRhdGEtPnByb2dyZXNzLnNpemVfZGwgPiBDVVJMX09GRl9UX0MoMTAwMDApKQorICAgICAgZGxwZXJjZW4gPSBkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkIC8KKyAgICAgICAgKGRhdGEtPnByb2dyZXNzLnNpemVfZGwvQ1VSTF9PRkZfVF9DKDEwMCkpOworICAgIGVsc2UgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbCA+IENVUkxfT0ZGX1RfQygwKSkKKyAgICAgIGRscGVyY2VuID0gKGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQqMTAwKSAvCisgICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfZGw7CisgIH0KKworICAvKiBOb3cgZmlndXJlIG91dCB3aGljaCBvZiB0aGVtIGlzIHNsb3dlciBhbmQgdXNlIHRoYXQgb25lIGZvciB0aGUKKyAgICAgdG90YWwgZXN0aW1hdGUhICovCisgIHRvdGFsX2VzdGltYXRlID0gdWxlc3RpbWF0ZT5kbGVzdGltYXRlP3VsZXN0aW1hdGU6ZGxlc3RpbWF0ZTsKKworICAvKiBjcmVhdGUgdGhlIHRocmVlIHRpbWUgc3RyaW5ncyAqLworICB0aW1lMnN0cih0aW1lX2xlZnQsIHRvdGFsX2VzdGltYXRlID4gMD8odG90YWxfZXN0aW1hdGUgLSB0aW1lc3BlbnQpOjApOworICB0aW1lMnN0cih0aW1lX3RvdGFsLCB0b3RhbF9lc3RpbWF0ZSk7CisgIHRpbWUyc3RyKHRpbWVfc3BlbnQsIHRpbWVzcGVudCk7CisKKyAgLyogR2V0IHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBleHBlY3RlZCB0byBnZXQgdHJhbnNmZXJyZWQgKi8KKyAgdG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIgPQorICAgICgoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX1VMX1NJWkVfS05PV04pPworICAgICBkYXRhLT5wcm9ncmVzcy5zaXplX3VsOmRhdGEtPnByb2dyZXNzLnVwbG9hZGVkKSsKKyAgICAoKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19ETF9TSVpFX0tOT1dOKT8KKyAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbDpkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkKTsKKworICAvKiBXZSBoYXZlIHRyYW5zZmVycmVkIHRoaXMgbXVjaCBzbyBmYXIgKi8KKyAgdG90YWxfdHJhbnNmZXIgPSBkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkICsgZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQ7CisKKyAgLyogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGRhdGEgdHJhbnNmZXJyZWQgc28gZmFyICovCisgIGlmKHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyID4gQ1VSTF9PRkZfVF9DKDEwMDAwKSkKKyAgICB0b3RhbF9wZXJjZW4gPSB0b3RhbF90cmFuc2ZlciAvCisgICAgICAodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIvQ1VSTF9PRkZfVF9DKDEwMCkpOworICBlbHNlIGlmKHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyID4gQ1VSTF9PRkZfVF9DKDApKQorICAgIHRvdGFsX3BlcmNlbiA9ICh0b3RhbF90cmFuc2ZlcioxMDApIC8gdG90YWxfZXhwZWN0ZWRfdHJhbnNmZXI7CisKKyAgZnByaW50ZihkYXRhLT5zZXQuZXJyLAorICAgICAgICAgICJcciIKKyAgICAgICAgICAiJTMiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIiAlcyAgIgorICAgICAgICAgICIlMyIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiICVzICAiCisgICAgICAgICAgIiUzIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIgJXMgICVzICAlcyAlcyAlcyAlcyAlcyIsCisgICAgICAgICAgdG90YWxfcGVyY2VuLCAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHRvdGFsICUgKi8KKyAgICAgICAgICBtYXg1ZGF0YSh0b3RhbF9leHBlY3RlZF90cmFuc2ZlciwgbWF4NVsyXSksICAgLyogdG90YWwgc2l6ZSAqLworICAgICAgICAgIGRscGVyY2VuLCAgICAgIC8qIDMgbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiByY3ZkICUgKi8KKyAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkLCBtYXg1WzBdKSwgLyogcmN2ZCBzaXplICovCisgICAgICAgICAgdWxwZXJjZW4sICAgICAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHhmZXIgJSAqLworICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkLCBtYXg1WzFdKSwgICAvKiB4ZmVyIHNpemUgKi8KKyAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy5kbHNwZWVkLCBtYXg1WzNdKSwgICAgLyogYXZyZyBkbCBzcGVlZCAqLworICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQsIG1heDVbNF0pLCAgICAvKiBhdnJnIHVsIHNwZWVkICovCisgICAgICAgICAgdGltZV90b3RhbCwgICAgLyogOCBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHRvdGFsIHRpbWUgKi8KKyAgICAgICAgICB0aW1lX3NwZW50LCAgICAvKiA4IGxldHRlcnMgKi8gICAgICAgICAgICAgICAgLyogdGltZSBzcGVudCAqLworICAgICAgICAgIHRpbWVfbGVmdCwgICAgIC8qIDggbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0aW1lIGxlZnQgKi8KKyAgICAgICAgICBtYXg1ZGF0YShkYXRhLT5wcm9ncmVzcy5jdXJyZW50X3NwZWVkLCBtYXg1WzVdKQorICAgICk7CisKKyAgLyogd2UgZmx1c2ggdGhlIG91dHB1dCBzdHJlYW0gdG8gbWFrZSBpdCBhcHBlYXIgYXMgc29vbiBhcyBwb3NzaWJsZSAqLworICBmZmx1c2goZGF0YS0+c2V0LmVycik7CiB9CiAjZWxzZQogIC8qIHByb2dyZXNzIGJhciBkaXNhYmxlZCAqLwotI2RlZmluZSBwcm9ncmVzc19tZXRlcih4KQorI2RlZmluZSBwcm9ncmVzc19tZXRlcih4KSBDdXJsX25vcF9zdG10CiAjZW5kaWYKIAogCkBAIC01ODMsNiArNTgxLDggQEAKIGludCBDdXJsX3BncnNVcGRhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IGN1cmx0aW1lIG5vdyA9IEN1cmxfbm93KCk7IC8qIHdoYXQgdGltZSBpcyBpdCAqLworICBib29sIHNob3dwcm9ncmVzcyA9IHByb2dyZXNzX2NhbGMoY29ubiwgbm93KTsKICAgaWYoIShkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfSElERSkpIHsKICAgICBpZihkYXRhLT5zZXQuZnhmZXJpbmZvKSB7CiAgICAgICBpbnQgcmVzdWx0OwpAQCAtNTk0LDExICs1OTQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQpOwogICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwotICAgICAgaWYocmVzdWx0KQotICAgICAgICBmYWlsZihkYXRhLCAiQ2FsbGJhY2sgYWJvcnRlZCIpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIGlmKHJlc3VsdCAhPSBDVVJMX1BST0dSRVNTRlVOQ19DT05USU5VRSkgeworICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgZmFpbGYoZGF0YSwgIkNhbGxiYWNrIGFib3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KICAgICB9Ci0gICAgaWYoZGF0YS0+c2V0LmZwcm9ncmVzcykgeworICAgIGVsc2UgaWYoZGF0YS0+c2V0LmZwcm9ncmVzcykgewogICAgICAgaW50IHJlc3VsdDsKICAgICAgIC8qIFRoZSBvbGRlciBkZXByZWNhdGVkIGNhbGxiYWNrIGlzIHNldCwgY2FsbCB0aGF0ICovCiAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKQEAgLTYwOCwxMiArNjEwLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCk7CiAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7Ci0gICAgICBpZihyZXN1bHQpCi0gICAgICAgIGZhaWxmKGRhdGEsICJDYWxsYmFjayBhYm9ydGVkIik7Ci0gICAgICByZXR1cm4gcmVzdWx0OworICAgICAgaWYocmVzdWx0ICE9IENVUkxfUFJPR1JFU1NGVU5DX0NPTlRJTlVFKSB7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQ2FsbGJhY2sgYWJvcnRlZCIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQogICAgIH0KKworICAgIGlmKHNob3dwcm9ncmVzcykKKyAgICAgIHByb2dyZXNzX21ldGVyKGNvbm4pOwogICB9Ci0gIHByb2dyZXNzX21ldGVyKGNvbm4pOwogCiAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcXVpYy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcXVpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlN2RmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9xdWljLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9RVUlDX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfUVVJQ19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBFTkFCTEVfUVVJQworI2lmZGVmIFVTRV9OR1RDUDIKKyNpbmNsdWRlICJ2cXVpYy9uZ3RjcDIuaCIKKyNlbmRpZgorI2lmZGVmIFVTRV9RVUlDSEUKKyNpbmNsdWRlICJ2cXVpYy9xdWljaGUuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorCisvKiBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIHNwZWNpZmljIGJhY2tlbmRzICovCitDVVJMY29kZSBDdXJsX3F1aWNfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgYWRkcmxlbik7CitDVVJMY29kZSBDdXJsX3F1aWNfaXNfY29ubmVjdGVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCk7CitpbnQgQ3VybF9xdWljX3ZlcihjaGFyICpwLCBzaXplX3QgbGVuKTsKK0NVUkxjb2RlIEN1cmxfcXVpY19kb25lX3NlbmRpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3ZvaWQgQ3VybF9xdWljX2RvbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBwcmVtYXR1cmUpOworYm9vbCBDdXJsX3F1aWNfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwordm9pZCBDdXJsX3F1aWNfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCB0ZW1waW5kZXgpOworCisjZWxzZSAvKiBFTkFCTEVfUVVJQyAqLworI2RlZmluZSBDdXJsX3F1aWNfZG9uZV9zZW5kaW5nKHgpCisjZGVmaW5lIEN1cmxfcXVpY19kb25lKHgseSkKKyNkZWZpbmUgQ3VybF9xdWljX2RhdGFfcGVuZGluZyh4KQorI2RlZmluZSBDdXJsX3F1aWNfZGlzY29ubmVjdCh4LHkpCisjZW5kaWYgLyogIUVOQUJMRV9RVUlDICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9RVUlDX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3JhbmQuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3JhbmQuYwppbmRleCA2ZWU0NWZlLi5jNDE1MDQ4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9yYW5kLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcmFuZC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMDYsOCArMTA2LDcgQEAKICAqICdybmRwdHInIHBvaW50cyB0by4KICAqCiAgKiBJZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGhvdXQgVExTIHN1cHBvcnQgb3Igd2l0aCBhIFRMUyBiYWNrZW5kIHRoYXQgbGFja3MgYQotICogcHJvcGVyIHJhbmRvbSBBUEkgKEdza2l0LCBQb2xhclNTTCBvciBtYmVkVExTKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZQotICogIndlYWsiIHJhbmRvbS4KKyAqIHByb3BlciByYW5kb20gQVBJIChHc2tpdCBvciBtYmVkVExTKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZSAid2VhayIgcmFuZG9tLgogICoKICAqIFdoZW4gYnVpbHQgKndpdGgqIFRMUyBzdXBwb3J0IGFuZCBhIGJhY2tlbmQgdGhhdCBvZmZlcnMgc3Ryb25nIHJhbmRvbSwgaXQKICAqIHdpbGwgcmV0dXJuIGVycm9yIGlmIGl0IGNhbm5vdCBwcm92aWRlIHN0cm9uZyByYW5kb20gdmFsdWVzLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcmFuZC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcmFuZC5oCmluZGV4IDVkZWIwNDEuLjNjOGUyYjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3JhbmQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yYW5kLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI3LDggKzI3LDcgQEAKICAqICdybmQnIHBvaW50cyB0by4KICAqCiAgKiBJZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGhvdXQgVExTIHN1cHBvcnQgb3Igd2l0aCBhIFRMUyBiYWNrZW5kIHRoYXQgbGFja3MgYQotICogcHJvcGVyIHJhbmRvbSBBUEkgKEdza2l0LCBQb2xhclNTTCBvciBtYmVkVExTKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZQotICogIndlYWsiIHJhbmRvbS4KKyAqIHByb3BlciByYW5kb20gQVBJIChHc2tpdCBvciBtYmVkVExTKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZSAid2VhayIgcmFuZG9tLgogICoKICAqIFdoZW4gYnVpbHQgKndpdGgqIFRMUyBzdXBwb3J0IGFuZCBhIGJhY2tlbmQgdGhhdCBvZmZlcnMgc3Ryb25nIHJhbmRvbSwgaXQKICAqIHdpbGwgcmV0dXJuIGVycm9yIGlmIGl0IGNhbm5vdCBwcm92aWRlIHN0cm9uZyByYW5kb20gdmFsdWVzLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcmVuYW1lLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yZW5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjE3MGQzCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcmVuYW1lLmMKQEAgLTAsMCArMSw2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJyZW5hbWUuaCIKKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmICghZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpKSB8fCAgXAorICBkZWZpbmVkKFVTRV9BTFRTVkMpCisKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogcmV0dXJuIDAgb24gc3VjY2VzcywgMSBvbiBlcnJvciAqLworaW50IEN1cmxfcmVuYW1lKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpCit7CisjaWZkZWYgV0lOMzIKKyAgLyogcmVuYW1lKCkgb24gV2luZG93cyBkb2Vzbid0IG92ZXJ3cml0ZSwgc28gd2UgY2FuJ3QgdXNlIGl0IGhlcmUuCisgICAgIE1vdmVGaWxlRXhBKCkgd2lsbCBvdmVyd3JpdGUgYW5kIGlzIHVzdWFsbHkgYXRvbWljLCBob3dldmVyIGl0IGZhaWxzCisgICAgIHdoZW4gdGhlcmUgYXJlIG9wZW4gaGFuZGxlcyB0byB0aGUgZmlsZS4gKi8KKyAgY29uc3QgaW50IG1heF93YWl0X21zID0gMTAwMDsKKyAgc3RydWN0IGN1cmx0aW1lIHN0YXJ0ID0gQ3VybF9ub3coKTsKKyAgZm9yKDs7KSB7CisgICAgdGltZWRpZmZfdCBkaWZmOworICAgIGlmKE1vdmVGaWxlRXhBKG9sZHBhdGgsIG5ld3BhdGgsIE1PVkVGSUxFX1JFUExBQ0VfRVhJU1RJTkcpKQorICAgICAgYnJlYWs7CisgICAgZGlmZiA9IEN1cmxfdGltZWRpZmYoQ3VybF9ub3coKSwgc3RhcnQpOworICAgIGlmKGRpZmYgPCAwIHx8IGRpZmYgPiBtYXhfd2FpdF9tcykKKyAgICAgIHJldHVybiAxOworICAgIFNsZWVwKDEpOworICB9CisjZWxzZQorICBpZihyZW5hbWUob2xkcGF0aCwgbmV3cGF0aCkpCisgICAgcmV0dXJuIDE7CisjZW5kaWYKKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcmVuYW1lLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9yZW5hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ0MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcmVuYW1lLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9SRU5BTUVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9SRU5BTUVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBDdXJsX3JlbmFtZShjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1JFTkFNRV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ydHNwLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9ydHNwLmMKaW5kZXggNzRjZjIzMi4uZGJkN2RjNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvcnRzcC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3J0c3AuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTIsMTAgKzUyLDcgQEAKIHN0YXRpYyBDVVJMY29kZSBydHNwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOwogc3RhdGljIENVUkxjb2RlIHJ0c3BfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogc3RhdGljIENVUkxjb2RlIHJ0c3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7Ci0KLXN0YXRpYyBpbnQgcnRzcF9nZXRzb2NrX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBpbnQgcnRzcF9nZXRzb2NrX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogCiAvKgogICogUGFyc2UgYW5kIHdyaXRlIG91dCBhbnkgYXZhaWxhYmxlIFJUUCBkYXRhLgpAQCAtNzcsMTEgKzc0LDkgQEAKICAgIGludGVyZmFjZSBhbmQgdGhlbiB3ZSdyZSBhbHdheXMgX3NlbmRpbmdfIGEgcmVxdWVzdCBhbmQgdGh1cyB3ZSB3YWl0IGZvcgogICAgdGhlIHNpbmdsZSBzb2NrZXQgdG8gYmVjb21lIHdyaXRhYmxlIG9ubHkgKi8KIHN0YXRpYyBpbnQgcnRzcF9nZXRzb2NrX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7CiAgIC8qIHdyaXRlIG1vZGUgKi8KLSAgKHZvaWQpbnVtc29ja3M7IC8qIHVudXNlZCwgd2UgdHJ1c3QgaXQgdG8gYmUgYXQgbGVhc3QgMSAqLwogICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwogICByZXR1cm4gR0VUU09DS19XUklURVNPQ0soMCk7CiB9CkBAIC0yMzgsNyArMjMzLDcgQEAKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIEN1cmxfUnRzcFJlcSBydHNwcmVxID0gZGF0YS0+c2V0LnJ0c3ByZXE7CiAgIHN0cnVjdCBSVFNQICpydHNwID0gZGF0YS0+cmVxLnByb3RvcDsKLSAgQ3VybF9zZW5kX2J1ZmZlciAqcmVxX2J1ZmZlcjsKKyAgc3RydWN0IGR5bmJ1ZiByZXFfYnVmZmVyOwogICBjdXJsX29mZl90IHBvc3RzaXplID0gMDsgLyogZm9yIEFOTk9VTkNFIGFuZCBTRVRfUEFSQU1FVEVSICovCiAgIGN1cmxfb2ZmX3QgcHV0c2l6ZSA9IDA7IC8qIGZvciBBTk5PVU5DRSBhbmQgU0VUX1BBUkFNRVRFUiAqLwogCkBAIC0zMzgsMTIgKzMzMywxMiBAQAogICBpZihydHNwcmVxID09IFJUU1BSRVFfU0VUVVAgJiYgIXBfdHJhbnNwb3J0KSB7CiAgICAgLyogTmV3IFRyYW5zcG9ydDogc2V0dGluZz8gKi8KICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1RSQU5TUE9SVF0pIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucnRzcF90cmFuc3BvcnQpOworICAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnJ0c3BfdHJhbnNwb3J0KTsKIAotICAgICAgY29ubi0+YWxsb2NwdHIucnRzcF90cmFuc3BvcnQgPQorICAgICAgZGF0YS0+c3RhdGUuYXB0ci5ydHNwX3RyYW5zcG9ydCA9CiAgICAgICAgIGFwcmludGYoIlRyYW5zcG9ydDogJXNcclxuIiwKICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1RSQU5TUE9SVF0pOwotICAgICAgaWYoIWNvbm4tPmFsbG9jcHRyLnJ0c3BfdHJhbnNwb3J0KQorICAgICAgaWYoIWRhdGEtPnN0YXRlLmFwdHIucnRzcF90cmFuc3BvcnQpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTM1Miw3ICszNDcsNyBAQAogICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKICAgICB9CiAKLSAgICBwX3RyYW5zcG9ydCA9IGNvbm4tPmFsbG9jcHRyLnJ0c3BfdHJhbnNwb3J0OworICAgIHBfdHJhbnNwb3J0ID0gZGF0YS0+c3RhdGUuYXB0ci5ydHNwX3RyYW5zcG9ydDsKICAgfQogCiAgIC8qIEFjY2VwdCBIZWFkZXJzIGZvciBERVNDUklCRSByZXF1ZXN0cyAqLwpAQCAtMzY0LDE0ICszNTksMTQgQEAKICAgICAvKiBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyICovCiAgICAgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJBY2NlcHQtRW5jb2RpbmciKSAmJgogICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSkgewotICAgICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpOwotICAgICAgY29ubi0+YWxsb2NwdHIuYWNjZXB0X2VuY29kaW5nID0KKyAgICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcpOworICAgICAgZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcgPQogICAgICAgICBhcHJpbnRmKCJBY2NlcHQtRW5jb2Rpbmc6ICVzXHJcbiIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSk7CiAKLSAgICAgIGlmKCFjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2RpbmcpCisgICAgICBpZighZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcpCiAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCi0gICAgICBwX2FjY2VwdF9lbmNvZGluZyA9IGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZzsKKyAgICAgIHBfYWNjZXB0X2VuY29kaW5nID0gZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2Rpbmc7CiAgICAgfQogICB9CiAKQEAgLTM3OSwxMyArMzc0LDEzIEBACiAgICAgIGl0IG1pZ2h0IGhhdmUgYmVlbiB1c2VkIGluIHRoZSBwcm94eSBjb25uZWN0LCBidXQgaWYgd2UgaGF2ZSBnb3QgYSBoZWFkZXIKICAgICAgd2l0aCB0aGUgdXNlci1hZ2VudCBzdHJpbmcgc3BlY2lmaWVkLCB3ZSBlcmFzZSB0aGUgcHJldmlvdXNseSBtYWRlIHN0cmluZwogICAgICBoZXJlLiAqLwotICBpZihDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiVXNlci1BZ2VudCIpICYmIGNvbm4tPmFsbG9jcHRyLnVhZ2VudCkgewotICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudWFnZW50KTsKLSAgICBjb25uLT5hbGxvY3B0ci51YWdlbnQgPSBOVUxMOworICBpZihDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiVXNlci1BZ2VudCIpICYmIGRhdGEtPnN0YXRlLmFwdHIudWFnZW50KSB7CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudCk7CisgICAgZGF0YS0+c3RhdGUuYXB0ci51YWdlbnQgPSBOVUxMOwogICB9CiAgIGVsc2UgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJVc2VyLUFnZW50IikgJiYKICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdKSB7Ci0gICAgcF91YWdlbnQgPSBjb25uLT5hbGxvY3B0ci51YWdlbnQ7CisgICAgcF91YWdlbnQgPSBkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudDsKICAgfQogCiAgIC8qIHNldHVwIHRoZSBhdXRoZW50aWNhdGlvbiBoZWFkZXJzICovCkBAIC0zOTMsMTcgKzM4OCwxNyBAQAogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAotICBwX3Byb3h5dXNlcnB3ZCA9IGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZDsKLSAgcF91c2VycHdkID0gY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgcF9wcm94eXVzZXJwd2QgPSBkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZDsKKyAgcF91c2VycHdkID0gZGF0YS0+c3RhdGUuYXB0ci51c2VycHdkOwogCiAgIC8qIFJlZmVycmVyICovCi0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucmVmKTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnJlZik7CiAgIGlmKGRhdGEtPmNoYW5nZS5yZWZlcmVyICYmICFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiUmVmZXJlciIpKQotICAgIGNvbm4tPmFsbG9jcHRyLnJlZiA9IGFwcmludGYoIlJlZmVyZXI6ICVzXHJcbiIsIGRhdGEtPmNoYW5nZS5yZWZlcmVyKTsKKyAgICBkYXRhLT5zdGF0ZS5hcHRyLnJlZiA9IGFwcmludGYoIlJlZmVyZXI6ICVzXHJcbiIsIGRhdGEtPmNoYW5nZS5yZWZlcmVyKTsKICAgZWxzZQotICAgIGNvbm4tPmFsbG9jcHRyLnJlZiA9IE5VTEw7CisgICAgZGF0YS0+c3RhdGUuYXB0ci5yZWYgPSBOVUxMOwogCi0gIHBfcmVmZXJyZXIgPSBjb25uLT5hbGxvY3B0ci5yZWY7CisgIHBfcmVmZXJyZXIgPSBkYXRhLT5zdGF0ZS5hcHRyLnJlZjsKIAogICAvKgogICAgKiBSYW5nZSBIZWFkZXIKQEAgLTQxNiw5ICs0MTEsOSBAQAogCiAgICAgLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgcmFuZ2Ugc2V0IGluIHRoZSBjdXN0b20gaGVhZGVycyAqLwogICAgIGlmKCFDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiUmFuZ2UiKSAmJiBkYXRhLT5zdGF0ZS5yYW5nZSkgewotICAgICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmUpOwotICAgICAgY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lID0gYXByaW50ZigiUmFuZ2U6ICVzXHJcbiIsIGRhdGEtPnN0YXRlLnJhbmdlKTsKLSAgICAgIHBfcmFuZ2UgPSBjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmU7CisgICAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lKTsKKyAgICAgIGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lID0gYXByaW50ZigiUmFuZ2U6ICVzXHJcbiIsIGRhdGEtPnN0YXRlLnJhbmdlKTsKKyAgICAgIHBfcmFuZ2UgPSBkYXRhLT5zdGF0ZS5hcHRyLnJhbmdlbGluZTsKICAgICB9CiAgIH0KIApAQCAtNDM1LDE2ICs0MzAsMTMgQEAKICAgfQogCiAgIC8qIEluaXRpYWxpemUgYSBkeW5hbWljIHNlbmQgYnVmZmVyICovCi0gIHJlcV9idWZmZXIgPSBDdXJsX2FkZF9idWZmZXJfaW5pdCgpOwotCi0gIGlmKCFyZXFfYnVmZmVyKQotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBDdXJsX2R5bl9pbml0KCZyZXFfYnVmZmVyLCBEWU5fUlRTUF9SRVFfSEVBREVSKTsKIAogICByZXN1bHQgPQotICAgIEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAiJXMgJXMgUlRTUC8xLjBcclxuIiAvKiBSZXF1ZXN0IFN0cmVhbS1VUkkgUlRTUC8xLjAgKi8KLSAgICAgICAgICAgICAgICAgICAgICJDU2VxOiAlbGRcclxuIiwgLyogQ1NlcSAqLwotICAgICAgICAgICAgICAgICAgICAgcF9yZXF1ZXN0LCBwX3N0cmVhbV91cmksIHJ0c3AtPkNTZXFfc2VudCk7CisgICAgQ3VybF9keW5fYWRkZigmcmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICIlcyAlcyBSVFNQLzEuMFxyXG4iIC8qIFJlcXVlc3QgU3RyZWFtLVVSSSBSVFNQLzEuMCAqLworICAgICAgICAgICAgICAgICAgIkNTZXE6ICVsZFxyXG4iLCAvKiBDU2VxICovCisgICAgICAgICAgICAgICAgICBwX3JlcXVlc3QsIHBfc3RyZWFtX3VyaSwgcnRzcC0+Q1NlcV9zZW50KTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTQ1Myw3ICs0NDUsNyBAQAogICAgKiB0byBtYWtlIGNvbXBhcmlzb24gZWFzaWVyCiAgICAqLwogICBpZihwX3Nlc3Npb25faWQpIHsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLCAiU2Vzc2lvbjogJXNcclxuIiwgcF9zZXNzaW9uX2lkKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXFfYnVmZmVyLCAiU2Vzc2lvbjogJXNcclxuIiwgcF9zZXNzaW9uX2lkKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogICB9CkBAIC00NjEsNDIgKzQ1Myw0MiBAQAogICAvKgogICAgKiBTaGFyZWQgSFRUUC1saWtlIG9wdGlvbnMKICAgICovCi0gIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiB0cmFuc3BvcnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIGFjY2VwdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0LWVuY29kaW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiByYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcmVmZXJyZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHVzZXItYWdlbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHByb3h5dXNlcnB3ZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogdXNlcnB3ZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3RyYW5zcG9ydCA/IHBfdHJhbnNwb3J0IDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9hY2NlcHQgPyBwX2FjY2VwdCA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYWNjZXB0X2VuY29kaW5nID8gcF9hY2NlcHRfZW5jb2RpbmcgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3JhbmdlID8gcF9yYW5nZSA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfcmVmZXJyZXIgPyBwX3JlZmVycmVyIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcF91YWdlbnQgPyBwX3VhZ2VudCA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfcHJveHl1c2VycHdkID8gcF9wcm94eXVzZXJwd2QgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3VzZXJwd2QgPyBwX3VzZXJwd2QgOiAiIik7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZGYoJnJlcV9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiB0cmFuc3BvcnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIGFjY2VwdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0LWVuY29kaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiByYW5nZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcmVmZXJyZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHVzZXItYWdlbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHByb3h5dXNlcnB3ZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogdXNlcnB3ZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwX3RyYW5zcG9ydCA/IHBfdHJhbnNwb3J0IDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcF9hY2NlcHQgPyBwX2FjY2VwdCA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBfYWNjZXB0X2VuY29kaW5nID8gcF9hY2NlcHRfZW5jb2RpbmcgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwX3JhbmdlID8gcF9yYW5nZSA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBfcmVmZXJyZXIgPyBwX3JlZmVycmVyIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcF91YWdlbnQgPyBwX3VhZ2VudCA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBfcHJveHl1c2VycHdkID8gcF9wcm94eXVzZXJwd2QgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwX3VzZXJwd2QgPyBwX3VzZXJwd2QgOiAiIik7CiAKICAgLyoKICAgICogRnJlZSB1c2VycHdkIG5vdyAtLS0gY2Fubm90IHJldXNlIHRoaXMgZm9yIE5lZ290aWF0ZSBhbmQgcG9zc2libHkgTlRMTQogICAgKiB3aXRoIGJhc2ljIGFuZCBkaWdlc3QsIGl0IHdpbGwgYmUgZnJlZWQgYW55d2F5IGJ5IHRoZSBuZXh0IHJlcXVlc3QKICAgICovCi0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudXNlcnB3ZCk7Ci0gIGNvbm4tPmFsbG9jcHRyLnVzZXJwd2QgPSBOVUxMOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCk7CisgIGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCA9IE5VTEw7CiAKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKICAgaWYoKHJ0c3ByZXEgPT0gUlRTUFJFUV9TRVRVUCkgfHwgKHJ0c3ByZXEgPT0gUlRTUFJFUV9ERVNDUklCRSkpIHsKLSAgICByZXN1bHQgPSBDdXJsX2FkZF90aW1lY29uZGl0aW9uKGRhdGEsIHJlcV9idWZmZXIpOworICAgIHJlc3VsdCA9IEN1cmxfYWRkX3RpbWVjb25kaXRpb24oY29ubiwgJnJlcV9idWZmZXIpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICByZXN1bHQgPSBDdXJsX2FkZF9jdXN0b21faGVhZGVycyhjb25uLCBGQUxTRSwgcmVxX2J1ZmZlcik7CisgIHJlc3VsdCA9IEN1cmxfYWRkX2N1c3RvbV9oZWFkZXJzKGNvbm4sIEZBTFNFLCAmcmVxX2J1ZmZlcik7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC01MDYsMTQgKzQ5OCwxNCBAQAogCiAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkgewogICAgICAgcHV0c2l6ZSA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7Ci0gICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfUFVUOworICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IEhUVFBSRVFfUFVUOwogCiAgICAgfQogICAgIGVsc2UgewogICAgICAgcG9zdHNpemUgPSAoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSk/CiAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemU6CiAgICAgICAgIChkYXRhLT5zZXQucG9zdGZpZWxkcz8gKGN1cmxfb2ZmX3Qpc3RybGVuKGRhdGEtPnNldC5wb3N0ZmllbGRzKTowKTsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUOworICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IEhUVFBSRVFfUE9TVDsKICAgICB9CiAKICAgICBpZihwdXRzaXplID4gMCB8fCBwb3N0c2l6ZSA+IDApIHsKQEAgLTUyMSw5ICs1MTMsOSBAQAogICAgICAgICogYWN0dWFsbHkgc2V0IGEgY3VzdG9tIENvbnRlbnQtTGVuZ3RoIGluIHRoZSBoZWFkZXJzICovCiAgICAgICBpZighQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtTGVuZ3RoIikpIHsKICAgICAgICAgcmVzdWx0ID0KLSAgICAgICAgICBDdXJsX2FkZF9idWZmZXJmKCZyZXFfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UIlxyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPnNldC51cGxvYWQgPyBwdXRzaXplIDogcG9zdHNpemUpKTsKKyAgICAgICAgICBDdXJsX2R5bl9hZGRmKCZyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UIlxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPnNldC51cGxvYWQgPyBwdXRzaXplIDogcG9zdHNpemUpKTsKICAgICAgICAgaWYocmVzdWx0KQogICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICB9CkBAIC01MzEsOCArNTIzLDggQEAKICAgICAgIGlmKHJ0c3ByZXEgPT0gUlRTUFJFUV9TRVRfUEFSQU1FVEVSIHx8CiAgICAgICAgICBydHNwcmVxID09IFJUU1BSRVFfR0VUX1BBUkFNRVRFUikgewogICAgICAgICBpZighQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIkNvbnRlbnQtVHlwZSIpKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZigmcmVxX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGFyYW1ldGVyc1xyXG4iKTsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRmKCZyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9wYXJhbWV0ZXJzXHJcbiIpOwogICAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTU0MCw4ICs1MzIsOCBAQAogCiAgICAgICBpZihydHNwcmVxID09IFJUU1BSRVFfQU5OT1VOQ0UpIHsKICAgICAgICAgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGNvbm4sICJDb250ZW50LVR5cGUiKSkgewotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYoJnJlcV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9zZHBcclxuIik7CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkZigmcmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NkcFxyXG4iKTsKICAgICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC01NTEsNyArNTQzLDcgQEAKICAgICB9CiAgICAgZWxzZSBpZihydHNwcmVxID09IFJUU1BSRVFfR0VUX1BBUkFNRVRFUikgewogICAgICAgLyogQ2hlY2sgZm9yIGFuIGVtcHR5IEdFVF9QQVJBTUVURVIgKGhlYXJ0YmVhdCkgcmVxdWVzdCAqLwotICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX0hFQUQ7CisgICAgICBkYXRhLT5zdGF0ZS5odHRwcmVxID0gSFRUUFJFUV9IRUFEOwogICAgICAgZGF0YS0+c2V0Lm9wdF9ub19ib2R5ID0gVFJVRTsKICAgICB9CiAgIH0KQEAgLTU1OSwyMCArNTUxLDIwIEBACiAgIC8qIFJUU1AgbmV2ZXIgYWxsb3dzIGNodW5rZWQgdHJhbnNmZXIgKi8KICAgZGF0YS0+cmVxLmZvcmJpZGNodW5rID0gVFJVRTsKICAgLyogRmluaXNoIHRoZSByZXF1ZXN0IGJ1ZmZlciAqLwotICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIoJnJlcV9idWZmZXIsICJcclxuIiwgMik7CisgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmcmVxX2J1ZmZlciwgIlxyXG4iKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKICAgaWYocG9zdHNpemUgPiAwKSB7Ci0gICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKCZyZXFfYnVmZmVyLCBkYXRhLT5zZXQucG9zdGZpZWxkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdClwb3N0c2l6ZSk7CisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmcmVxX2J1ZmZlciwgZGF0YS0+c2V0LnBvc3RmaWVsZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KXBvc3RzaXplKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKICAgLyogaXNzdWUgdGhlIHJlcXVlc3QgKi8KLSAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQoJnJlcV9idWZmZXIsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICByZXN1bHQgPSBDdXJsX2J1ZmZlcl9zZW5kKCZyZXFfYnVmZmVyLCBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOwogICBpZihyZXN1bHQpIHsKICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgUlRTUCByZXF1ZXN0Iik7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3J0c3AuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3J0c3AuaAppbmRleCAyZjljYzMyLi4xYWFlODY0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9ydHNwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvcnRzcC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWN1cml0eS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VjdXJpdHkuYwppbmRleCA3Njk1MTU0Li4zYjljMjBhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZWN1cml0eS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlY3VyaXR5LmMKQEAgLTcsNyArNyw3IEBACiAgKiByZXdyaXRlIHRvIHdvcmsgYXJvdW5kIHRoZSBwYXJhZ3JhcGggMiBpbiB0aGUgQlNEIGxpY2Vuc2VzIGFzIGV4cGxhaW5lZAogICogYmVsb3cuCiAgKgotICogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5LCAyMDE3IEt1bmdsaWdhIFRla25pc2thIEjDtmdza29sYW4KKyAqIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAxNyBLdW5nbGlnYSBUZWtuaXNrYSBIw4PCtmdza29sYW4KICAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCkBAIC0xOTEsNyArMTkxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtyYjVidWZmZXIgKmJ1ZikKIHsKICAgaW50IGxlbjsKLSAgdm9pZCAqdG1wID0gTlVMTDsKICAgQ1VSTGNvZGUgcmVzdWx0OwogCiAgIHJlc3VsdCA9IHNvY2tldF9yZWFkKGZkLCAmbGVuLCBzaXplb2YobGVuKSk7CkBAIC0yMDEsMTIgKzIwMCwxMSBAQAogICBpZihsZW4pIHsKICAgICAvKiBvbmx5IHJlYWxsb2MgaWYgdGhlcmUgd2FzIGEgbGVuZ3RoICovCiAgICAgbGVuID0gbnRvaGwobGVuKTsKLSAgICB0bXAgPSBDdXJsX3NhZmVyZWFsbG9jKGJ1Zi0+ZGF0YSwgbGVuKTsKKyAgICBidWYtPmRhdGEgPSBDdXJsX3NhZmVyZWFsbG9jKGJ1Zi0+ZGF0YSwgbGVuKTsKICAgfQotICBpZih0bXAgPT0gTlVMTCkKKyAgaWYoIWxlbiB8fCAhYnVmLT5kYXRhKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCi0gIGJ1Zi0+ZGF0YSA9IHRtcDsKICAgcmVzdWx0ID0gc29ja2V0X3JlYWQoZmQsIGJ1Zi0+ZGF0YSwgbGVuKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMzgsNyArMjM2LDcgQEAKIAogICAvKiBIYW5kbGUgY2xlYXIgdGV4dCByZXNwb25zZS4gKi8KICAgaWYoY29ubi0+c2VjX2NvbXBsZXRlID09IDAgfHwgY29ubi0+ZGF0YV9wcm90ID09IFBST1RfQ0xFQVIpCi0gICAgICByZXR1cm4gcmVhZChmZCwgYnVmZmVyLCBsZW4pOworICAgICAgcmV0dXJuIHNyZWFkKGZkLCBidWZmZXIsIGxlbik7CiAKICAgaWYoY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnKSB7CiAgICAgY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnID0gMDsKQEAgLTI2Nyw3ICsyNjUsNyBAQAogfQogCiAvKiBTZW5kIHxsZW5ndGh8IGJ5dGVzIGZyb20gfGZyb218IHRvIHRoZSB8ZmR8IHNvY2tldCB0YWtpbmcgY2FyZSBvZiBlbmNvZGluZwotICAgYW5kIG5lZ29jaWF0aW5nIHdpdGggdGhlIHNlcnZlci4gfGZyb218IGNhbiBiZSBOVUxMLiAqLworICAgYW5kIG5lZ290aWF0aW5nIHdpdGggdGhlIHNlcnZlci4gfGZyb218IGNhbiBiZSBOVUxMLiAqLwogc3RhdGljIHZvaWQgZG9fc2VjX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IGZkLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnJvbSwgaW50IGxlbmd0aCkKIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlbGVjdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmMKaW5kZXggNmU3Mzg5MC4uNjgzMmI0MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIyLDggKzIyLDEyIEBACiAKICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1VOSVNURF9IKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChIQVZFX1NFTEVDVCkgJiYgIWRlZmluZWQoSEFWRV9QT0xMX0ZJTkUpCkBAIC00OCwxNCArNTIsOSBAQAogI2luY2x1ZGUgInVybGRhdGEuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAidGltZXZhbC5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAKLS8qIENvbnZlbmllbmNlIGxvY2FsIG1hY3JvcyAqLwotI2RlZmluZSBFTEFQU0VEX01TKCkgKGludClDdXJsX3RpbWVkaWZmKEN1cmxfbm93KCksIGluaXRpYWxfdHYpCi0KLWludCBDdXJsX2Fja19laW50ciA9IDA7Ci0jZGVmaW5lIEVSUk9SX05PVF9FSU5UUihlcnJvcikgKEN1cmxfYWNrX2VpbnRyIHx8IGVycm9yICE9IEVJTlRSKQotCiAvKgogICogSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3Igd2FpdGluZyBhIHNwZWNpZmljIGFtb3VudCBvZiBtcwogICogaW4gQ3VybF9zb2NrZXRfY2hlY2soKSBhbmQgQ3VybF9wb2xsKCkgd2hlbiBubyBmaWxlIGRlc2NyaXB0b3IKQEAgLTcyLDE1ICs3MSw4IEBACiAgKiAgIC0xID0gc3lzdGVtIGNhbGwgZXJyb3IsIGludmFsaWQgdGltZW91dCB2YWx1ZSwgb3IgaW50ZXJydXB0ZWQKICAqICAgIDAgPSBzcGVjaWZpZWQgdGltZW91dCBoYXMgZWxhcHNlZAogICovCi1pbnQgQ3VybF93YWl0X21zKGludCB0aW1lb3V0X21zKQoraW50IEN1cmxfd2FpdF9tcyh0aW1lZGlmZl90IHRpbWVvdXRfbXMpCiB7Ci0jaWYgIWRlZmluZWQoTVNET1MpICYmICFkZWZpbmVkKFVTRV9XSU5TT0NLKQotI2lmbmRlZiBIQVZFX1BPTExfRklORQotICBzdHJ1Y3QgdGltZXZhbCBwZW5kaW5nX3R2OwotI2VuZGlmCi0gIHN0cnVjdCBjdXJsdGltZSBpbml0aWFsX3R2OwotICBpbnQgcGVuZGluZ19tczsKLSNlbmRpZgogICBpbnQgciA9IDA7CiAKICAgaWYoIXRpbWVvdXRfbXMpCkBAIC05MSwzMSArODMsNDcgQEAKICAgfQogI2lmIGRlZmluZWQoTVNET1MpCiAgIGRlbGF5KHRpbWVvdXRfbXMpOwotI2VsaWYgZGVmaW5lZChVU0VfV0lOU09DSykKLSAgU2xlZXAodGltZW91dF9tcyk7CisjZWxpZiBkZWZpbmVkKFdJTjMyKQorICAvKiBwcmV2ZW50IG92ZXJmbG93LCB0aW1lb3V0X21zIGlzIHR5cGVjYXN0IHRvIFVMT05HL0RXT1JELiAqLworI2lmIFRJTUVESUZGX1RfTUFYID49IFVMT05HX01BWAorICBpZih0aW1lb3V0X21zID49IFVMT05HX01BWCkKKyAgICB0aW1lb3V0X21zID0gVUxPTkdfTUFYLTE7CisgICAgLyogZG9uJ3QgdXNlIFVMT05HX01BWCwgYmVjYXVzZSB0aGF0IGlzIGVxdWFsIHRvIElORklOSVRFICovCisjZW5kaWYKKyAgU2xlZXAoKFVMT05HKXRpbWVvdXRfbXMpOwogI2Vsc2UKLSAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXM7Ci0gIGluaXRpYWxfdHYgPSBDdXJsX25vdygpOwotICBkbyB7Ci0gICAgaW50IGVycm9yOwogI2lmIGRlZmluZWQoSEFWRV9QT0xMX0ZJTkUpCi0gICAgciA9IHBvbGwoTlVMTCwgMCwgcGVuZGluZ19tcyk7CisgIC8qIHByZXZlbnQgb3ZlcmZsb3csIHRpbWVvdXRfbXMgaXMgdHlwZWNhc3QgdG8gaW50LiAqLworI2lmIFRJTUVESUZGX1RfTUFYID4gSU5UX01BWAorICBpZih0aW1lb3V0X21zID4gSU5UX01BWCkKKyAgICB0aW1lb3V0X21zID0gSU5UX01BWDsKKyNlbmRpZgorICByID0gcG9sbChOVUxMLCAwLCAoaW50KXRpbWVvdXRfbXMpOwogI2Vsc2UKLSAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOwotICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IChwZW5kaW5nX21zICUgMTAwMCkgKiAxMDAwOworICB7CisgICAgc3RydWN0IHRpbWV2YWwgcGVuZGluZ190djsKKyAgICB0aW1lZGlmZl90IHR2X3NlYyA9IHRpbWVvdXRfbXMgLyAxMDAwOworICAgIHRpbWVkaWZmX3QgdHZfdXNlYyA9ICh0aW1lb3V0X21zICUgMTAwMCkgKiAxMDAwOyAvKiBtYXg9OTk5OTk5ICovCisjaWZkZWYgSEFWRV9TVVNFQ09ORFNfVAorI2lmIFRJTUVESUZGX1RfTUFYID4gVElNRV9UX01BWAorICAgIC8qIHR2X3NlYyBvdmVyZmxvdyBjaGVjayBpbiBjYXNlIHRpbWVfdCBpcyBzaWduZWQgKi8KKyAgICBpZih0dl9zZWMgPiBUSU1FX1RfTUFYKQorICAgICAgdHZfc2VjID0gVElNRV9UX01BWDsKKyNlbmRpZgorICAgIHBlbmRpbmdfdHYudHZfc2VjID0gKHRpbWVfdCl0dl9zZWM7CisgICAgcGVuZGluZ190di50dl91c2VjID0gKHN1c2Vjb25kc190KXR2X3VzZWM7CisjZWxzZQorI2lmIFRJTUVESUZGX1RfTUFYID4gSU5UX01BWAorICAgIC8qIHR2X3NlYyBvdmVyZmxvdyBjaGVjayBpbiBjYXNlIHRpbWVfdCBpcyBzaWduZWQgKi8KKyAgICBpZih0dl9zZWMgPiBJTlRfTUFYKQorICAgICAgdHZfc2VjID0gSU5UX01BWDsKKyNlbmRpZgorICAgIHBlbmRpbmdfdHYudHZfc2VjID0gKGludCl0dl9zZWM7CisgICAgcGVuZGluZ190di50dl91c2VjID0gKGludCl0dl91c2VjOworI2VuZGlmCiAgICAgciA9IHNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmcGVuZGluZ190dik7CisgIH0KICNlbmRpZiAvKiBIQVZFX1BPTExfRklORSAqLwotICAgIGlmKHIgIT0gLTEpCi0gICAgICBicmVhazsKLSAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQotICAgICAgYnJlYWs7Ci0gICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXMgLSBFTEFQU0VEX01TKCk7Ci0gICAgaWYocGVuZGluZ19tcyA8PSAwKSB7Ci0gICAgICByID0gMDsgIC8qIFNpbXVsYXRlIGEgImNhbGwgdGltZWQgb3V0IiBjYXNlICovCi0gICAgICBicmVhazsKLSAgICB9Ci0gIH0gd2hpbGUociA9PSAtMSk7CiAjZW5kaWYgLyogVVNFX1dJTlNPQ0sgKi8KICAgaWYocikKICAgICByID0gLTE7CkBAIC0xMjMsNiArMTMxLDk4IEBACiB9CiAKIC8qCisgKiBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgc2VsZWN0KCkgdG8gYWlkIGluIFdpbmRvd3MgY29tcGF0aWJpbGl0eS4KKyAqIEEgbmVnYXRpdmUgdGltZW91dCB2YWx1ZSBtYWtlcyB0aGlzIGZ1bmN0aW9uIHdhaXQgaW5kZWZpbml0ZWx5LAorICogdW5sZXNzIG5vIHZhbGlkIGZpbGUgZGVzY3JpcHRvciBpcyBnaXZlbiwgd2hlbiB0aGlzIGhhcHBlbnMgdGhlCisgKiBuZWdhdGl2ZSB0aW1lb3V0IGlzIGlnbm9yZWQgYW5kIHRoZSBmdW5jdGlvbiB0aW1lcyBvdXQgaW1tZWRpYXRlbHkuCisgKgorICogUmV0dXJuIHZhbHVlczoKKyAqICAgLTEgPSBzeXN0ZW0gY2FsbCBlcnJvciBvciBmZCA+PSBGRF9TRVRTSVpFCisgKiAgICAwID0gdGltZW91dAorICogICAgTiA9IG51bWJlciBvZiBzaWduYWxsZWQgZmlsZSBkZXNjcmlwdG9ycworICovCitpbnQgQ3VybF9zZWxlY3QoY3VybF9zb2NrZXRfdCBtYXhmZCwgICAvKiBoaWdoZXN0IHNvY2tldCBudW1iZXIgKi8KKyAgICAgICAgICAgICAgICBmZF9zZXQgKmZkc19yZWFkLCAgICAgIC8qIHNvY2tldHMgcmVhZHkgZm9yIHJlYWRpbmcgKi8KKyAgICAgICAgICAgICAgICBmZF9zZXQgKmZkc193cml0ZSwgICAgIC8qIHNvY2tldHMgcmVhZHkgZm9yIHdyaXRpbmcgKi8KKyAgICAgICAgICAgICAgICBmZF9zZXQgKmZkc19lcnIsICAgICAgIC8qIHNvY2tldHMgd2l0aCBlcnJvcnMgKi8KKyAgICAgICAgICAgICAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMpIC8qIG1pbGxpc2Vjb25kcyB0byB3YWl0ICovCit7CisgIHN0cnVjdCB0aW1ldmFsIHBlbmRpbmdfdHY7CisgIHN0cnVjdCB0aW1ldmFsICpwdGltZW91dDsKKyAgaW50IHI7CisKKyNpZmRlZiBVU0VfV0lOU09DSworICAvKiBXaW5Tb2NrIHNlbGVjdCgpIGNhbid0IGhhbmRsZSB6ZXJvIGV2ZW50cy4gIFNlZSB0aGUgY29tbWVudCBiZWxvdy4gKi8KKyAgaWYoKCFmZHNfcmVhZCB8fCBmZHNfcmVhZC0+ZmRfY291bnQgPT0gMCkgJiYKKyAgICAgKCFmZHNfd3JpdGUgfHwgZmRzX3dyaXRlLT5mZF9jb3VudCA9PSAwKSAmJgorICAgICAoIWZkc19lcnIgfHwgZmRzX2Vyci0+ZmRfY291bnQgPT0gMCkpIHsKKyAgICByID0gQ3VybF93YWl0X21zKHRpbWVvdXRfbXMpOworICAgIHJldHVybiByOworICB9CisjZW5kaWYKKworICBwdGltZW91dCA9ICZwZW5kaW5nX3R2OworICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgIHB0aW1lb3V0ID0gTlVMTDsKKyAgfQorICBlbHNlIGlmKHRpbWVvdXRfbXMgPiAwKSB7CisgICAgdGltZWRpZmZfdCB0dl9zZWMgPSB0aW1lb3V0X21zIC8gMTAwMDsKKyAgICB0aW1lZGlmZl90IHR2X3VzZWMgPSAodGltZW91dF9tcyAlIDEwMDApICogMTAwMDsgLyogbWF4PTk5OTk5OSAqLworI2lmZGVmIEhBVkVfU1VTRUNPTkRTX1QKKyNpZiBUSU1FRElGRl9UX01BWCA+IFRJTUVfVF9NQVgKKyAgICAvKiB0dl9zZWMgb3ZlcmZsb3cgY2hlY2sgaW4gY2FzZSB0aW1lX3QgaXMgc2lnbmVkICovCisgICAgaWYodHZfc2VjID4gVElNRV9UX01BWCkKKyAgICAgIHR2X3NlYyA9IFRJTUVfVF9NQVg7CisjZW5kaWYKKyAgICBwZW5kaW5nX3R2LnR2X3NlYyA9ICh0aW1lX3QpdHZfc2VjOworICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IChzdXNlY29uZHNfdCl0dl91c2VjOworI2VsaWYgZGVmaW5lZChXSU4zMikgLyogbWF5YmUgYWxzbyBvdGhlcnMgaW4gdGhlIGZ1dHVyZSAqLworI2lmIFRJTUVESUZGX1RfTUFYID4gTE9OR19NQVgKKyAgICAvKiB0dl9zZWMgb3ZlcmZsb3cgY2hlY2sgb24gV2luZG93cyB0aGVyZSB3ZSBrbm93IGl0IGlzIGxvbmcgKi8KKyAgICBpZih0dl9zZWMgPiBMT05HX01BWCkKKyAgICAgIHR2X3NlYyA9IExPTkdfTUFYOworI2VuZGlmCisgICAgcGVuZGluZ190di50dl9zZWMgPSAobG9uZyl0dl9zZWM7CisgICAgcGVuZGluZ190di50dl91c2VjID0gKGxvbmcpdHZfdXNlYzsKKyNlbHNlCisjaWYgVElNRURJRkZfVF9NQVggPiBJTlRfTUFYCisgICAgLyogdHZfc2VjIG92ZXJmbG93IGNoZWNrIGluIGNhc2UgdGltZV90IGlzIHNpZ25lZCAqLworICAgIGlmKHR2X3NlYyA+IElOVF9NQVgpCisgICAgICB0dl9zZWMgPSBJTlRfTUFYOworI2VuZGlmCisgICAgcGVuZGluZ190di50dl9zZWMgPSAoaW50KXR2X3NlYzsKKyAgICBwZW5kaW5nX3R2LnR2X3VzZWMgPSAoaW50KXR2X3VzZWM7CisjZW5kaWYKKyAgfQorICBlbHNlIHsKKyAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IDA7CisgICAgcGVuZGluZ190di50dl91c2VjID0gMDsKKyAgfQorCisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgLyogV2luU29jayBzZWxlY3QoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBmZF9zZXQgdGhhdCBjb250YWlucyB6ZXJvCisgICAgZmQgZmxhZ3MsIG9yIGl0IHdpbGwgcmV0dXJuIFdTQUVJTlZBTC4gIEJ1dCwgaXQgYWxzbyBjYW4ndCBiZSBjYWxsZWQKKyAgICB3aXRoIG5vIGZkX3NldHMgYXQgYWxsISAgRnJvbSB0aGUgZG9jdW1lbnRhdGlvbjoKKworICAgIEFueSB0d28gb2YgdGhlIHBhcmFtZXRlcnMsIHJlYWRmZHMsIHdyaXRlZmRzLCBvciBleGNlcHRmZHMsIGNhbiBiZQorICAgIGdpdmVuIGFzIG51bGwuIEF0IGxlYXN0IG9uZSBtdXN0IGJlIG5vbi1udWxsLCBhbmQgYW55IG5vbi1udWxsCisgICAgZGVzY3JpcHRvciBzZXQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBoYW5kbGUgdG8gYSBzb2NrZXQuCisKKyAgICBJdCBpcyB1bmNsZWFyIHdoeSBXaW5Tb2NrIGRvZXNuJ3QganVzdCBoYW5kbGUgdGhpcyBmb3IgdXMgaW5zdGVhZCBvZgorICAgIGNhbGxpbmcgdGhpcyBhbiBlcnJvci4KKyAgKi8KKyAgciA9IHNlbGVjdCgoaW50KW1heGZkICsgMSwKKyAgICAgICAgICAgICBmZHNfcmVhZCAmJiBmZHNfcmVhZC0+ZmRfY291bnQgPyBmZHNfcmVhZCA6IE5VTEwsCisgICAgICAgICAgICAgZmRzX3dyaXRlICYmIGZkc193cml0ZS0+ZmRfY291bnQgPyBmZHNfd3JpdGUgOiBOVUxMLAorICAgICAgICAgICAgIGZkc19lcnIgJiYgZmRzX2Vyci0+ZmRfY291bnQgPyBmZHNfZXJyIDogTlVMTCwgcHRpbWVvdXQpOworI2Vsc2UKKyAgciA9IHNlbGVjdCgoaW50KW1heGZkICsgMSwgZmRzX3JlYWQsIGZkc193cml0ZSwgZmRzX2VyciwgcHRpbWVvdXQpOworI2VuZGlmCisKKyAgcmV0dXJuIHI7Cit9CisKKy8qCiAgKiBXYWl0IGZvciByZWFkIG9yIHdyaXRlIGV2ZW50cyBvbiBhIHNldCBvZiBmaWxlIGRlc2NyaXB0b3JzLiBJdCB1c2VzIHBvbGwoKQogICogd2hlbiBhIGZpbmUgcG9sbCgpIGlzIGF2YWlsYWJsZSwgaW4gb3JkZXIgdG8gYXZvaWQgbGltaXRzIHdpdGggRkRfU0VUU0laRSwKICAqIG90aGVyd2lzZSBzZWxlY3QoKSBpcyB1c2VkLiAgQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgc2VsZWN0KCkgaXMgYmVpbmcgdXNlZApAQCAtMTQ1LDM0ICsyNDUsMjQgQEAKIGludCBDdXJsX3NvY2tldF9jaGVjayhjdXJsX3NvY2tldF90IHJlYWRmZDAsIC8qIHR3byBzb2NrZXRzIHRvIHJlYWQgZnJvbSAqLwogICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkMSwKICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHdyaXRlZmQsIC8qIHNvY2tldCB0byB3cml0ZSB0byAqLwotICAgICAgICAgICAgICAgICAgICAgIHRpbWVfdCB0aW1lb3V0X21zKSAgICAgLyogbWlsbGlzZWNvbmRzIHRvIHdhaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMpIC8qIG1pbGxpc2Vjb25kcyB0byB3YWl0ICovCiB7CiAjaWZkZWYgSEFWRV9QT0xMX0ZJTkUKICAgc3RydWN0IHBvbGxmZCBwZmRbM107CiAgIGludCBudW07CiAjZWxzZQotICBzdHJ1Y3QgdGltZXZhbCBwZW5kaW5nX3R2OwotICBzdHJ1Y3QgdGltZXZhbCAqcHRpbWVvdXQ7CiAgIGZkX3NldCBmZHNfcmVhZDsKICAgZmRfc2V0IGZkc193cml0ZTsKICAgZmRfc2V0IGZkc19lcnI7CiAgIGN1cmxfc29ja2V0X3QgbWF4ZmQ7CiAjZW5kaWYKLSAgc3RydWN0IGN1cmx0aW1lIGluaXRpYWxfdHYgPSB7MCwgMH07Ci0gIGludCBwZW5kaW5nX21zID0gMDsKICAgaW50IHI7CiAgIGludCByZXQ7CiAKLSNpZiBTSVpFT0ZfVElNRV9UICE9IFNJWkVPRl9JTlQKLSAgLyogd3JhcC1hcm91bmQgcHJlY2F1dGlvbiAqLwotICBpZih0aW1lb3V0X21zID49IElOVF9NQVgpCi0gICAgdGltZW91dF9tcyA9IElOVF9NQVg7Ci0jZW5kaWYKLQogICBpZigocmVhZGZkMCA9PSBDVVJMX1NPQ0tFVF9CQUQpICYmIChyZWFkZmQxID09IENVUkxfU09DS0VUX0JBRCkgJiYKICAgICAgKHdyaXRlZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKSkgewogICAgIC8qIG5vIHNvY2tldHMsIGp1c3Qgd2FpdCAqLwotICAgIHIgPSBDdXJsX3dhaXRfbXMoKGludCl0aW1lb3V0X21zKTsKKyAgICByID0gQ3VybF93YWl0X21zKHRpbWVvdXRfbXMpOwogICAgIHJldHVybiByOwogICB9CiAKQEAgLTE4MSwxMSArMjcxLDYgQEAKICAgICAgd2hlbiBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHplcm8gdGltZW91dCBvciBhIG5lZ2F0aXZlIHRpbWVvdXQKICAgICAgdmFsdWUgaW5kaWNhdGluZyBhIGJsb2NraW5nIGNhbGwgc2hvdWxkIGJlIHBlcmZvcm1lZC4gKi8KIAotICBpZih0aW1lb3V0X21zID4gMCkgewotICAgIHBlbmRpbmdfbXMgPSAoaW50KXRpbWVvdXRfbXM7Ci0gICAgaW5pdGlhbF90diA9IEN1cmxfbm93KCk7Ci0gIH0KLQogI2lmZGVmIEhBVkVfUE9MTF9GSU5FCiAKICAgbnVtID0gMDsKQEAgLTIwOCwzMSArMjkzLDkgQEAKICAgICBudW0rKzsKICAgfQogCi0gIGRvIHsKLSAgICBpbnQgZXJyb3I7Ci0gICAgaWYodGltZW91dF9tcyA8IDApCi0gICAgICBwZW5kaW5nX21zID0gLTE7Ci0gICAgZWxzZSBpZighdGltZW91dF9tcykKLSAgICAgIHBlbmRpbmdfbXMgPSAwOwotICAgIHIgPSBwb2xsKHBmZCwgbnVtLCBwZW5kaW5nX21zKTsKLSAgICBpZihyICE9IC0xKQotICAgICAgYnJlYWs7Ci0gICAgZXJyb3IgPSBTT0NLRVJSTk87Ci0gICAgaWYoZXJyb3IgJiYgRVJST1JfTk9UX0VJTlRSKGVycm9yKSkKLSAgICAgIGJyZWFrOwotICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgICBwZW5kaW5nX21zID0gKGludCkodGltZW91dF9tcyAtIEVMQVBTRURfTVMoKSk7Ci0gICAgICBpZihwZW5kaW5nX21zIDw9IDApIHsKLSAgICAgICAgciA9IDA7ICAvKiBTaW11bGF0ZSBhICJjYWxsIHRpbWVkIG91dCIgY2FzZSAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0gd2hpbGUociA9PSAtMSk7Ci0KLSAgaWYociA8IDApCi0gICAgcmV0dXJuIC0xOwotICBpZihyID09IDApCi0gICAgcmV0dXJuIDA7CisgIHIgPSBDdXJsX3BvbGwocGZkLCBudW0sIHRpbWVvdXRfbXMpOworICBpZihyIDw9IDApCisgICAgcmV0dXJuIHI7CiAKICAgcmV0ID0gMDsKICAgbnVtID0gMDsKQEAgLTI4OCw2MiArMzUxLDE3IEBACiAgICAgICBtYXhmZCA9IHdyaXRlZmQ7CiAgIH0KIAotICBwdGltZW91dCA9ICh0aW1lb3V0X21zIDwgMCkgPyBOVUxMIDogJnBlbmRpbmdfdHY7CisgIC8qIFdlIGtub3cgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBiaXQgc2V0IGluIGF0IGxlYXN0IHR3byBmZF9zZXRzIGluCisgICAgIHRoaXMgY2FzZSwgYnV0IHdlIG1heSBoYXZlIG5vIGJpdHMgc2V0IGluIGVpdGhlciBmZHNfcmVhZCBvciBmZF93cml0ZSwKKyAgICAgc28gY2hlY2sgZm9yIHRoYXQgYW5kIGhhbmRsZSBpdC4gIEx1Y2tpbHksIHdpdGggV2luU29jaywgd2UgY2FuIF9hbHNvXworICAgICBhc2sgaG93IG1hbnkgYml0cyBhcmUgc2V0IG9uIGFuIGZkX3NldC4KIAotICBkbyB7Ci0gICAgaW50IGVycm9yOwotICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOwotICAgICAgcGVuZGluZ190di50dl91c2VjID0gKHBlbmRpbmdfbXMgJSAxMDAwKSAqIDEwMDA7Ci0gICAgfQotICAgIGVsc2UgaWYoIXRpbWVvdXRfbXMpIHsKLSAgICAgIHBlbmRpbmdfdHYudHZfc2VjID0gMDsKLSAgICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IDA7Ci0gICAgfQotCi0gICAgLyogV2luU29jayBzZWxlY3QoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBmZF9zZXQgdGhhdCBjb250YWlucyB6ZXJvCi0gICAgICAgZmQgZmxhZ3MsIG9yIGl0IHdpbGwgcmV0dXJuIFdTQUVJTlZBTC4gIEJ1dCwgaXQgYWxzbyBjYW4ndCBiZSBjYWxsZWQKLSAgICAgICB3aXRoIG5vIGZkX3NldHMgYXQgYWxsISAgRnJvbSB0aGUgZG9jdW1lbnRhdGlvbjoKLQotICAgICAgICAgQW55IHR3byBvZiB0aGUgcGFyYW1ldGVycywgcmVhZGZkcywgd3JpdGVmZHMsIG9yIGV4Y2VwdGZkcywgY2FuIGJlCi0gICAgICAgICBnaXZlbiBhcyBudWxsLiBBdCBsZWFzdCBvbmUgbXVzdCBiZSBub24tbnVsbCwgYW5kIGFueSBub24tbnVsbAotICAgICAgICAgZGVzY3JpcHRvciBzZXQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBoYW5kbGUgdG8gYSBzb2NrZXQuCi0KLSAgICAgICBXZSBrbm93IHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgYml0IHNldCBpbiBhdCBsZWFzdCB0d28gZmRfc2V0cyBpbgotICAgICAgIHRoaXMgY2FzZSwgYnV0IHdlIG1heSBoYXZlIG5vIGJpdHMgc2V0IGluIGVpdGhlciBmZHNfcmVhZCBvciBmZF93cml0ZSwKLSAgICAgICBzbyBjaGVjayBmb3IgdGhhdCBhbmQgaGFuZGxlIGl0LiAgTHVja2lseSwgd2l0aCBXaW5Tb2NrLCB3ZSBjYW4gX2Fsc29fCi0gICAgICAgYXNrIGhvdyBtYW55IGJpdHMgYXJlIHNldCBvbiBhbiBmZF9zZXQuCi0KLSAgICAgICBJdCBpcyB1bmNsZWFyIHdoeSBXaW5Tb2NrIGRvZXNuJ3QganVzdCBoYW5kbGUgdGhpcyBmb3IgdXMgaW5zdGVhZCBvZgotICAgICAgIGNhbGxpbmcgdGhpcyBhbiBlcnJvci4KLQotICAgICAgIE5vdGUgYWxzbyB0aGF0IFdpblNvY2sgaWdub3JlcyB0aGUgZmlyc3QgYXJndW1lbnQsIHNvIHdlIGRvbid0IHdvcnJ5Ci0gICAgICAgYWJvdXQgdGhlIGZhY3QgdGhhdCBtYXhmZCBpcyBjb21wdXRlZCBpbmNvcnJlY3RseSB3aXRoIFdpblNvY2sgKHNpbmNlCi0gICAgICAgY3VybF9zb2NrZXRfdCBpcyB1bnNpZ25lZCBpbiBzdWNoIGNhc2VzIGFuZCB0aHVzIC0xIGlzIHRoZSBsYXJnZXN0Ci0gICAgICAgdmFsdWUpLgotICAgICovCi0jaWZkZWYgVVNFX1dJTlNPQ0sKLSAgICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLAotICAgICAgICAgICAgICAgZmRzX3JlYWQuZmRfY291bnQgPyAmZmRzX3JlYWQgOiBOVUxMLAotICAgICAgICAgICAgICAgZmRzX3dyaXRlLmZkX2NvdW50ID8gJmZkc193cml0ZSA6IE5VTEwsCi0gICAgICAgICAgICAgICAmZmRzX2VyciwgcHRpbWVvdXQpOwotI2Vsc2UKLSAgICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLCAmZmRzX3JlYWQsICZmZHNfd3JpdGUsICZmZHNfZXJyLCBwdGltZW91dCk7Ci0jZW5kaWYKLQotICAgIGlmKHIgIT0gLTEpCi0gICAgICBicmVhazsKLSAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQotICAgICAgYnJlYWs7Ci0gICAgaWYodGltZW91dF9tcyA+IDApIHsKLSAgICAgIHBlbmRpbmdfbXMgPSAoaW50KSh0aW1lb3V0X21zIC0gRUxBUFNFRF9NUygpKTsKLSAgICAgIGlmKHBlbmRpbmdfbXMgPD0gMCkgewotICAgICAgICByID0gMDsgIC8qIFNpbXVsYXRlIGEgImNhbGwgdGltZWQgb3V0IiBjYXNlICovCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfSB3aGlsZShyID09IC0xKTsKKyAgICAgTm90ZSBhbHNvIHRoYXQgV2luU29jayBpZ25vcmVzIHRoZSBmaXJzdCBhcmd1bWVudCwgc28gd2UgZG9uJ3Qgd29ycnkKKyAgICAgYWJvdXQgdGhlIGZhY3QgdGhhdCBtYXhmZCBpcyBjb21wdXRlZCBpbmNvcnJlY3RseSB3aXRoIFdpblNvY2sgKHNpbmNlCisgICAgIGN1cmxfc29ja2V0X3QgaXMgdW5zaWduZWQgaW4gc3VjaCBjYXNlcyBhbmQgdGh1cyAtMSBpcyB0aGUgbGFyZ2VzdAorICAgICB2YWx1ZSkuCisgICovCisgIHIgPSBDdXJsX3NlbGVjdChtYXhmZCwgJmZkc19yZWFkLCAmZmRzX3dyaXRlLCAmZmRzX2VyciwgdGltZW91dF9tcyk7CiAKICAgaWYociA8IDApCiAgICAgcmV0dXJuIC0xOwpAQCAtMzg5LDIwICs0MDcsMTggQEAKICAqICAgIDAgPSB0aW1lb3V0CiAgKiAgICBOID0gbnVtYmVyIG9mIHN0cnVjdHVyZXMgd2l0aCBub24gemVybyByZXZlbnQgZmllbGRzCiAgKi8KLWludCBDdXJsX3BvbGwoc3RydWN0IHBvbGxmZCB1ZmRzW10sIHVuc2lnbmVkIGludCBuZmRzLCBpbnQgdGltZW91dF9tcykKK2ludCBDdXJsX3BvbGwoc3RydWN0IHBvbGxmZCB1ZmRzW10sIHVuc2lnbmVkIGludCBuZmRzLCB0aW1lZGlmZl90IHRpbWVvdXRfbXMpCiB7Ci0jaWZuZGVmIEhBVkVfUE9MTF9GSU5FCi0gIHN0cnVjdCB0aW1ldmFsIHBlbmRpbmdfdHY7Ci0gIHN0cnVjdCB0aW1ldmFsICpwdGltZW91dDsKKyNpZmRlZiBIQVZFX1BPTExfRklORQorICBpbnQgcGVuZGluZ19tczsKKyNlbHNlCiAgIGZkX3NldCBmZHNfcmVhZDsKICAgZmRfc2V0IGZkc193cml0ZTsKICAgZmRfc2V0IGZkc19lcnI7CiAgIGN1cmxfc29ja2V0X3QgbWF4ZmQ7CiAjZW5kaWYKLSAgc3RydWN0IGN1cmx0aW1lIGluaXRpYWxfdHYgPSB7MCwgMH07CiAgIGJvb2wgZmRzX25vbmUgPSBUUlVFOwogICB1bnNpZ25lZCBpbnQgaTsKLSAgaW50IHBlbmRpbmdfbXMgPSAwOwogICBpbnQgcjsKIAogICBpZih1ZmRzKSB7CkBAIC00MTQsNiArNDMwLDcgQEAKICAgICB9CiAgIH0KICAgaWYoZmRzX25vbmUpIHsKKyAgICAvKiBubyBzb2NrZXRzLCBqdXN0IHdhaXQgKi8KICAgICByID0gQ3VybF93YWl0X21zKHRpbWVvdXRfbXMpOwogICAgIHJldHVybiByOwogICB9CkBAIC00MjMsMzMgKzQ0MCwyMCBAQAogICAgICB3aGVuIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgemVybyB0aW1lb3V0IG9yIGEgbmVnYXRpdmUgdGltZW91dAogICAgICB2YWx1ZSBpbmRpY2F0aW5nIGEgYmxvY2tpbmcgY2FsbCBzaG91bGQgYmUgcGVyZm9ybWVkLiAqLwogCi0gIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXM7Ci0gICAgaW5pdGlhbF90diA9IEN1cmxfbm93KCk7Ci0gIH0KLQogI2lmZGVmIEhBVkVfUE9MTF9GSU5FCiAKLSAgZG8gewotICAgIGludCBlcnJvcjsKLSAgICBpZih0aW1lb3V0X21zIDwgMCkKLSAgICAgIHBlbmRpbmdfbXMgPSAtMTsKLSAgICBlbHNlIGlmKCF0aW1lb3V0X21zKQotICAgICAgcGVuZGluZ19tcyA9IDA7Ci0gICAgciA9IHBvbGwodWZkcywgbmZkcywgcGVuZGluZ19tcyk7Ci0gICAgaWYociAhPSAtMSkKLSAgICAgIGJyZWFrOwotICAgIGVycm9yID0gU09DS0VSUk5POwotICAgIGlmKGVycm9yICYmIEVSUk9SX05PVF9FSU5UUihlcnJvcikpCi0gICAgICBicmVhazsKLSAgICBpZih0aW1lb3V0X21zID4gMCkgewotICAgICAgcGVuZGluZ19tcyA9IChpbnQpKHRpbWVvdXRfbXMgLSBFTEFQU0VEX01TKCkpOwotICAgICAgaWYocGVuZGluZ19tcyA8PSAwKSB7Ci0gICAgICAgIHIgPSAwOyAgLyogU2ltdWxhdGUgYSAiY2FsbCB0aW1lZCBvdXQiIGNhc2UgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxlKHIgPT0gLTEpOworICAvKiBwcmV2ZW50IG92ZXJmbG93LCB0aW1lb3V0X21zIGlzIHR5cGVjYXN0IHRvIGludC4gKi8KKyNpZiBUSU1FRElGRl9UX01BWCA+IElOVF9NQVgKKyAgaWYodGltZW91dF9tcyA+IElOVF9NQVgpCisgICAgdGltZW91dF9tcyA9IElOVF9NQVg7CisjZW5kaWYKKyAgaWYodGltZW91dF9tcyA+IDApCisgICAgcGVuZGluZ19tcyA9IChpbnQpdGltZW91dF9tczsKKyAgZWxzZSBpZih0aW1lb3V0X21zIDwgMCkKKyAgICBwZW5kaW5nX21zID0gLTE7CisgIGVsc2UKKyAgICBwZW5kaW5nX21zID0gMDsKKyAgciA9IHBvbGwodWZkcywgbmZkcywgcGVuZGluZ19tcyk7CiAKICAgaWYociA8IDApCiAgICAgcmV0dXJuIC0xOwpAQCAtNDkwLDU0ICs0OTQsNyBAQAogICAgIH0KICAgfQogCi0jaWZkZWYgVVNFX1dJTlNPQ0sKLSAgLyogV2luU29jayBzZWxlY3QoKSBjYW4ndCBoYW5kbGUgemVybyBldmVudHMuICBTZWUgdGhlIGNvbW1lbnQgYWJvdXQgdGhpcyBpbgotICAgICBDdXJsX2NoZWNrX3NvY2tldCgpLiAqLwotICBpZihmZHNfcmVhZC5mZF9jb3VudCA9PSAwICYmIGZkc193cml0ZS5mZF9jb3VudCA9PSAwCi0gICAgICYmIGZkc19lcnIuZmRfY291bnQgPT0gMCkgewotICAgIHIgPSBDdXJsX3dhaXRfbXModGltZW91dF9tcyk7Ci0gICAgcmV0dXJuIHI7Ci0gIH0KLSNlbmRpZgotCi0gIHB0aW1lb3V0ID0gKHRpbWVvdXRfbXMgPCAwKSA/IE5VTEwgOiAmcGVuZGluZ190djsKLQotICBkbyB7Ci0gICAgaW50IGVycm9yOwotICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOwotICAgICAgcGVuZGluZ190di50dl91c2VjID0gKHBlbmRpbmdfbXMgJSAxMDAwKSAqIDEwMDA7Ci0gICAgfQotICAgIGVsc2UgaWYoIXRpbWVvdXRfbXMpIHsKLSAgICAgIHBlbmRpbmdfdHYudHZfc2VjID0gMDsKLSAgICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IDA7Ci0gICAgfQotCi0jaWZkZWYgVVNFX1dJTlNPQ0sKLSAgICByID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLAotICAgICAgICAgICAgICAgLyogV2luU29jayBzZWxlY3QoKSBjYW4ndCBoYW5kbGUgZmRfc2V0cyB3aXRoIHplcm8gYml0cyBzZXQsIHNvCi0gICAgICAgICAgICAgICAgICBkb24ndCBnaXZlIGl0IHN1Y2ggYXJndW1lbnRzLiAgU2VlIHRoZSBjb21tZW50IGFib3V0IHRoaXMgaW4KLSAgICAgICAgICAgICAgICAgIEN1cmxfY2hlY2tfc29ja2V0KCkuCi0gICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgZmRzX3JlYWQuZmRfY291bnQgPyAmZmRzX3JlYWQgOiBOVUxMLAotICAgICAgICAgICAgICAgZmRzX3dyaXRlLmZkX2NvdW50ID8gJmZkc193cml0ZSA6IE5VTEwsCi0gICAgICAgICAgICAgICBmZHNfZXJyLmZkX2NvdW50ID8gJmZkc19lcnIgOiBOVUxMLCBwdGltZW91dCk7Ci0jZWxzZQotICAgIHIgPSBzZWxlY3QoKGludCltYXhmZCArIDEsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgJmZkc19lcnIsIHB0aW1lb3V0KTsKLSNlbmRpZgotICAgIGlmKHIgIT0gLTEpCi0gICAgICBicmVhazsKLSAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQotICAgICAgYnJlYWs7Ci0gICAgaWYodGltZW91dF9tcyA+IDApIHsKLSAgICAgIHBlbmRpbmdfbXMgPSB0aW1lb3V0X21zIC0gRUxBUFNFRF9NUygpOwotICAgICAgaWYocGVuZGluZ19tcyA8PSAwKSB7Ci0gICAgICAgIHIgPSAwOyAgLyogU2ltdWxhdGUgYSAiY2FsbCB0aW1lZCBvdXQiIGNhc2UgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxlKHIgPT0gLTEpOworICByID0gQ3VybF9zZWxlY3QobWF4ZmQsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgJmZkc19lcnIsIHRpbWVvdXRfbXMpOwogCiAgIGlmKHIgPCAwKQogICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlbGVjdC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmgKaW5kZXggOWExYmE0NS4uOTUxODFmNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VsZWN0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTcyLDI4ICs3MiwyNiBAQAogICAgdGhlcmVmb3JlIGRlZmluZWQgaGVyZSAqLwogI2RlZmluZSBDVVJMX0NTRUxFQ1RfSU4yIChDVVJMX0NTRUxFQ1RfRVJSIDw8IDEpCiAKK2ludCBDdXJsX3NlbGVjdChjdXJsX3NvY2tldF90IG1heGZkLAorICAgICAgICAgICAgICAgIGZkX3NldCAqZmRzX3JlYWQsCisgICAgICAgICAgICAgICAgZmRfc2V0ICpmZHNfd3JpdGUsCisgICAgICAgICAgICAgICAgZmRfc2V0ICpmZHNfZXJyLAorICAgICAgICAgICAgICAgIHRpbWVkaWZmX3QgdGltZW91dF9tcyk7CisKIGludCBDdXJsX3NvY2tldF9jaGVjayhjdXJsX3NvY2tldF90IHJlYWRmZCwgY3VybF9zb2NrZXRfdCByZWFkZmQyLAogICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCwKLSAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZW91dF9tcyk7Ci0KKyAgICAgICAgICAgICAgICAgICAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMpOwogI2RlZmluZSBTT0NLRVRfUkVBREFCTEUoeCx6KSBcCiAgIEN1cmxfc29ja2V0X2NoZWNrKHgsIENVUkxfU09DS0VUX0JBRCwgQ1VSTF9TT0NLRVRfQkFELCB6KQogI2RlZmluZSBTT0NLRVRfV1JJVEFCTEUoeCx6KSBcCiAgIEN1cmxfc29ja2V0X2NoZWNrKENVUkxfU09DS0VUX0JBRCwgQ1VSTF9TT0NLRVRfQkFELCB4LCB6KQogCi1pbnQgQ3VybF9wb2xsKHN0cnVjdCBwb2xsZmQgdWZkc1tdLCB1bnNpZ25lZCBpbnQgbmZkcywgaW50IHRpbWVvdXRfbXMpOwotCi0vKiBPbiBub24tRE9TIGFuZCBub24tV2luc29jayBwbGF0Zm9ybXMsIHdoZW4gQ3VybF9hY2tfZWludHIgaXMgc2V0LAotICogRUlOVFIgY29uZGl0aW9uIGlzIGhvbm9yZWQgYW5kIGZ1bmN0aW9uIG1pZ2h0IGV4aXQgZWFybHkgd2l0aG91dAotICogYXdhaXRpbmcgZnVsbCB0aW1lb3V0LiAgT3RoZXJ3aXNlIEVJTlRSIHdpbGwgYmUgaWdub3JlZCBhbmQgZnVsbAotICogdGltZW91dCB3aWxsIGVsYXBzZS4gKi8KLWV4dGVybiBpbnQgQ3VybF9hY2tfZWludHI7Ci0KLWludCBDdXJsX3dhaXRfbXMoaW50IHRpbWVvdXRfbXMpOworaW50IEN1cmxfcG9sbChzdHJ1Y3QgcG9sbGZkIHVmZHNbXSwgdW5zaWduZWQgaW50IG5mZHMsIHRpbWVkaWZmX3QgdGltZW91dF9tcyk7CitpbnQgQ3VybF93YWl0X21zKHRpbWVkaWZmX3QgdGltZW91dF9tcyk7CiAKICNpZmRlZiBUUEYKIGludCB0cGZfc2VsZWN0X2xpYmN1cmwoaW50IG1heGZkcywgZmRfc2V0KiByZWFkcywgZmRfc2V0KiB3cml0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCogZXhjZXB0cywgc3RydWN0IHRpbWV2YWwqIHR2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0KiBleGNlcHRzLCBzdHJ1Y3QgdGltZXZhbCAqdHYpOwogI2VuZGlmCiAKIC8qIFdpbnNvY2sgYW5kIFRQRiBzb2NrZXRzIGFyZSBub3QgaW4gcmFuZ2UgWzAuLkZEX1NFVFNJWkUtMV0sIHdoaWNoCkBAIC0xMDksNyArMTA3LDcgQEAKICAgICBTRVRfU09DS0VSUk5PKEVJTlZBTCk7IFwKICAgICByZXR1cm4gLTE7IFwKICAgfSBcCi19IFdISUxFX0ZBTFNFCit9IHdoaWxlKDApCiAjZW5kaWYKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NFTEVDVF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZW5kZi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2VuZGYuYwppbmRleCA1OTEzZWE0Li42OTQzZmE4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZW5kZi5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NlbmRmLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM2LDEzICszNiwxNCBAQAogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAiY29ubmVjdC5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgotI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgInZzc2gvc3NoLmgiCiAjaW5jbHVkZSAiZWFzeWlmLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgogI2luY2x1ZGUgInN0cmVycm9yLmgiCiAjaW5jbHVkZSAic2VsZWN0LmgiCiAjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAiaHR0cDIuaCIKIAogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCkBAIC0yMjQsNyArMjI1LDcgQEAKICAgKHZvaWQpc29ja2luZGV4OwogICByZXR1cm4gZmFsc2U7CiB9Ci0jZGVmaW5lIHByZV9yZWNlaXZlX3BsYWluKGMsbikgZG8ge30gV0hJTEVfRkFMU0UKKyNkZWZpbmUgcHJlX3JlY2VpdmVfcGxhaW4oYyxuKSBkbyB7fSB3aGlsZSgwKQogI2RlZmluZSBnZXRfcHJlX3JlY3ZlZChjLG4sYixsKSAwCiAjZW5kaWYgLyogISBVU0VfUkVDVl9CRUZPUkVfU0VORF9XT1JLQVJPVU5EICovCiAKQEAgLTI2Niw3ICsyNjcsNyBAQAogICAgIHNpemVfdCBsZW47CiAgICAgY2hhciBlcnJvcltDVVJMX0VSUk9SX1NJWkUgKyAyXTsKICAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICBtdnNucHJpbnRmKGVycm9yLCBDVVJMX0VSUk9SX1NJWkUsIGZtdCwgYXApOworICAgICh2b2lkKW12c25wcmludGYoZXJyb3IsIENVUkxfRVJST1JfU0laRSwgZm10LCBhcCk7CiAgICAgbGVuID0gc3RybGVuKGVycm9yKTsKIAogICAgIGlmKGRhdGEtPnNldC5lcnJvcmJ1ZmZlciAmJiAhZGF0YS0+c3RhdGUuZXJyb3JidWYpIHsKQEAgLTQ5NywxMCArNDk4LDEyIEBACiAgICAgIGlzIGFnYWluIGVuYWJsZWQgKi8KICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOwogICBzdHJ1Y3QgVXJsU3RhdGUgKnMgPSAmZGF0YS0+c3RhdGU7Ci0gIGNoYXIgKmR1cGw7CiAgIHVuc2lnbmVkIGludCBpOwogICBib29sIG5ld3R5cGUgPSBUUlVFOwogCisgIC8qIElmIHRoaXMgdHJhbnNmZXJzIG92ZXIgSFRUUC8yLCBwYXVzZSB0aGUgc3RyZWFtISAqLworICBDdXJsX2h0dHAyX3N0cmVhbV9wYXVzZShkYXRhLCBUUlVFKTsKKwogICBpZihzLT50ZW1wY291bnQpIHsKICAgICBmb3IoaSA9IDA7IGk8IHMtPnRlbXBjb3VudDsgaSsrKSB7CiAgICAgICBpZihzLT50ZW1wd3JpdGVbaV0udHlwZSA9PSB0eXBlKSB7CkBAIC01MTQsNDIgKzUxNywyMSBAQAogICBlbHNlCiAgICAgaSA9IDA7CiAKLSAgaWYoIW5ld3R5cGUpIHsKLSAgICAvKiBhcHBlbmQgbmV3IGRhdGEgdG8gb2xkIGRhdGEgKi8KLQotICAgIC8qIGZpZ3VyZSBvdXQgdGhlIG5ldyBzaXplIG9mIHRoZSBkYXRhIHRvIHNhdmUgKi8KLSAgICBzaXplX3QgbmV3bGVuID0gbGVuICsgcy0+dGVtcHdyaXRlW2ldLmxlbjsKLSAgICAvKiBhbGxvY2F0ZSB0aGUgbmV3IG1lbW9yeSBhcmVhICovCi0gICAgY2hhciAqbmV3cHRyID0gcmVhbGxvYyhzLT50ZW1wd3JpdGVbaV0uYnVmLCBuZXdsZW4pOwotICAgIGlmKCFuZXdwdHIpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAvKiBjb3B5IHRoZSBuZXcgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBuZXcgYXJlYSAqLwotICAgIG1lbWNweShuZXdwdHIgKyBzLT50ZW1wd3JpdGVbaV0ubGVuLCBwdHIsIGxlbik7Ci0KLSAgICAvKiB1cGRhdGUgdGhlIHBvaW50ZXIgYW5kIHRoZSBzaXplICovCi0gICAgcy0+dGVtcHdyaXRlW2ldLmJ1ZiA9IG5ld3B0cjsKLSAgICBzLT50ZW1wd3JpdGVbaV0ubGVuID0gbmV3bGVuOwotICB9Ci0gIGVsc2UgewotICAgIGR1cGwgPSBDdXJsX21lbWR1cChwdHIsIGxlbik7Ci0gICAgaWYoIWR1cGwpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQorICBpZihuZXd0eXBlKSB7CiAgICAgLyogc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgc3RhdGUgc3RydWN0IGZvciBsYXRlciB1c2UgKi8KLSAgICBzLT50ZW1wd3JpdGVbaV0uYnVmID0gZHVwbDsKLSAgICBzLT50ZW1wd3JpdGVbaV0ubGVuID0gbGVuOworICAgIEN1cmxfZHluX2luaXQoJnMtPnRlbXB3cml0ZVtpXS5iLCBEWU5fUEFVU0VfQlVGRkVSKTsKICAgICBzLT50ZW1wd3JpdGVbaV0udHlwZSA9IHR5cGU7CiAKICAgICBpZihuZXd0eXBlKQogICAgICAgcy0+dGVtcGNvdW50Kys7CiAgIH0KIAorICBpZihDdXJsX2R5bl9hZGRuKCZzLT50ZW1wd3JpdGVbaV0uYiwgKHVuc2lnbmVkIGNoYXIgKilwdHIsIGxlbikpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKICAgLyogbWFyayB0aGUgY29ubmVjdGlvbiBhcyBSRUNWIHBhdXNlZCAqLwogICBrLT5rZWVwb24gfD0gS0VFUF9SRUNWX1BBVVNFOwogCi0gIERFQlVHRihpbmZvZihkYXRhLCAiUGF1c2VkICV6dSBieXRlcyBpbiBidWZmZXIgZm9yIHR5cGUgJTAyeFxuIiwKLSAgICAgICAgICAgICAgIGxlbiwgdHlwZSkpOwotCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIApAQCAtNjExLDcgKzU5Myw3IEBACiAgICAgICAgIHJldHVybiBwYXVzZXdyaXRlKGRhdGEsIHR5cGUsIHB0ciwgbGVuKTsKICAgICAgIH0KICAgICAgIGlmKHdyb3RlICE9IGNodW5rbGVuKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgd3JpdGluZyBib2R5ICglenUgIT0gJXp1KSIsIHdyb3RlLCBjaHVua2xlbik7CisgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIHdyaXRpbmcgb3V0cHV0IHRvIGRlc3RpbmF0aW9uIik7CiAgICAgICAgIHJldHVybiBDVVJMRV9XUklURV9FUlJPUjsKICAgICAgIH0KICAgICB9CkBAIC02OTIsMTkgKzY3NCwyMCBAQAogICBzc2l6ZV90IG5yZWFkID0gc3JlYWQoc29ja2ZkLCBidWYsIGJ5dGVzZnJvbXNvY2tldCk7CiAKICAgaWYoLTEgPT0gbnJlYWQpIHsKLSAgICBpbnQgZXJyID0gU09DS0VSUk5POwotICAgIGludCByZXR1cm5fZXJyb3I7CisgICAgY29uc3QgaW50IGVyciA9IFNPQ0tFUlJOTzsKKyAgICBjb25zdCBib29sIHJldHVybl9lcnJvciA9CiAjaWZkZWYgVVNFX1dJTlNPQ0sKLSAgICByZXR1cm5fZXJyb3IgPSBXU0FFV09VTERCTE9DSyA9PSBlcnI7CisgICAgICBXU0FFV09VTERCTE9DSyA9PSBlcnIKICNlbHNlCi0gICAgcmV0dXJuX2Vycm9yID0gRVdPVUxEQkxPQ0sgPT0gZXJyIHx8IEVBR0FJTiA9PSBlcnIgfHwgRUlOVFIgPT0gZXJyOworICAgICAgRVdPVUxEQkxPQ0sgPT0gZXJyIHx8IEVBR0FJTiA9PSBlcnIgfHwgRUlOVFIgPT0gZXJyCiAjZW5kaWYKKyAgICAgIDsKKyAgICAqbiA9IDA7IC8qIG5vIGRhdGEgcmV0dXJuZWQgKi8KICAgICBpZihyZXR1cm5fZXJyb3IpCiAgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CiAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CiAgIH0KIAotICAvKiB3ZSBvbmx5IHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCB3aGVuIHdlIHJldHVybiBPSyAqLwogICAqbiA9IG5yZWFkOwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXRvcHQuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5jCmluZGV4IDkyY2Q1YjIuLjkwZWRmNmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03Nyw2ICs3NywzNyBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKK0NVUkxjb2RlIEN1cmxfc2V0YmxvYm9wdChzdHJ1Y3QgY3VybF9ibG9iICoqYmxvYnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfYmxvYiAqYmxvYikKK3sKKyAgLyogZnJlZSB0aGUgcHJldmlvdXMgc3RvcmFnZSBhdCBgYmxvYnAnIGFuZCByZXBsYWNlIGJ5IGEgZHluYW1pYyBzdG9yYWdlCisgICAgIGNvcHkgb2YgYmxvYi4gSWYgQ1VSTF9CTE9CX0NPUFkgaXMgc2V0LCB0aGUgZGF0YSBpcyBjb3BpZWQuICovCisKKyAgQ3VybF9zYWZlZnJlZSgqYmxvYnApOworCisgIGlmKGJsb2IpIHsKKyAgICBzdHJ1Y3QgY3VybF9ibG9iICpuYmxvYjsKKyAgICBpZihibG9iLT5sZW4gPiBDVVJMX01BWF9JTlBVVF9MRU5HVEgpCisgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworICAgIG5ibG9iID0gKHN0cnVjdCBjdXJsX2Jsb2IgKikKKyAgICAgIG1hbGxvYyhzaXplb2Yoc3RydWN0IGN1cmxfYmxvYikgKworICAgICAgICAgICAgICgoYmxvYi0+ZmxhZ3MgJiBDVVJMX0JMT0JfQ09QWSkgPyBibG9iLT5sZW4gOiAwKSk7CisgICAgaWYoIW5ibG9iKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgKm5ibG9iID0gKmJsb2I7CisgICAgaWYoYmxvYi0+ZmxhZ3MgJiBDVVJMX0JMT0JfQ09QWSkgeworICAgICAgLyogcHV0IHRoZSBkYXRhIGFmdGVyIHRoZSBibG9iIHN0cnVjdCBpbiBtZW1vcnkgKi8KKyAgICAgIG5ibG9iLT5kYXRhID0gKGNoYXIgKiluYmxvYiArIHNpemVvZihzdHJ1Y3QgY3VybF9ibG9iKTsKKyAgICAgIG1lbWNweShuYmxvYi0+ZGF0YSwgYmxvYi0+ZGF0YSwgYmxvYi0+bGVuKTsKKyAgICB9CisKKyAgICAqYmxvYnAgPSBuYmxvYjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKIHN0YXRpYyBDVVJMY29kZSBzZXRzdHJvcHRfdXNlcnB3ZChjaGFyICpvcHRpb24sIGNoYXIgKip1c2VycCwgY2hhciAqKnBhc3N3ZHApCiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwpAQCAtMTE5LDggKzE1MCwxMSBAQAogI2RlZmluZSBDX1NTTFZFUlNJT05fVkFMVUUoeCkgKHggJiAweGZmZmYpCiAjZGVmaW5lIENfU1NMVkVSU0lPTl9NQVhfVkFMVUUoeCkgKHggJiAweGZmZmYwMDAwKQogCi1zdGF0aWMgQ1VSTGNvZGUgdnNldG9wdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBDVVJMb3B0aW9uIG9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgcGFyYW0pCisvKgorICogRG8gbm90IG1ha2UgQ3VybF92c2V0b3B0KCkgc3RhdGljOiBpdCBpcyBjYWxsZWQgZnJvbQorICogcGFja2FnZXMvT1M0MDAvY2NzaWRjdXJsLmMuCisgKi8KK0NVUkxjb2RlIEN1cmxfdnNldG9wdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBDVVJMb3B0aW9uIG9wdGlvbiwgdmFfbGlzdCBwYXJhbSkKIHsKICAgY2hhciAqYXJncHRyOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKQEAgLTIzNyw2ICsyNzEsOSBAQAogICAgICAqIERvIG5vdCBpbmNsdWRlIHRoZSBib2R5IHBhcnQgaW4gdGhlIG91dHB1dCBkYXRhIHN0cmVhbS4KICAgICAgKi8KICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHkgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/IFRSVUUgOiBGQUxTRTsKKyAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpCisgICAgICAvKiBpbiBIVFRQIGxpbmdvLCBubyBib2R5IG1lYW5zIHVzaW5nIHRoZSBIRUFEIHJlcXVlc3QuLi4gKi8KKyAgICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX0hFQUQ7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9GQUlMT05FUlJPUjoKICAgICAvKgpAQCAtMjU4LDEzICsyOTUsMTMgQEAKICAgICBkYXRhLT5zZXQudXBsb2FkID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CiAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkgewogICAgICAgLyogSWYgdGhpcyBpcyBIVFRQLCBQVVQgaXMgd2hhdCdzIG5lZWRlZCB0byAidXBsb2FkIiAqLwotICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX1BVVDsKKyAgICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX1BVVDsKICAgICAgIGRhdGEtPnNldC5vcHRfbm9fYm9keSA9IEZBTFNFOyAvKiB0aGlzIGlzIGltcGxpZWQgKi8KICAgICB9CiAgICAgZWxzZQogICAgICAgLyogSW4gSFRUUCwgdGhlIG9wcG9zaXRlIG9mIHVwbG9hZCBpcyBHRVQgKHVubGVzcyBOT0JPRFkgaXMgdHJ1ZSBhcwogICAgICAgICAgdGhlbiB0aGlzIGNhbiBiZSBjaGFuZ2VkIHRvIEhFQUQgbGF0ZXIgb24pICovCi0gICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfR0VUOworICAgICAgZGF0YS0+c2V0Lm1ldGhvZCA9IEhUVFBSRVFfR0VUOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfUkVRVUVTVF9UQVJHRVQ6CiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1RBUkdFVF0sCkBAIC0zMTIsNyArMzQ5LDcgQEAKICAgICAgKiBQYXJzZSB0aGUgJEhPTUUvLm5ldHJjIGZpbGUKICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMX05FVFJDX0lHTk9SRUQpIHx8IChhcmcgPiBDVVJMX05FVFJDX1JFUVVJUkVEKSkKKyAgICBpZigoYXJnIDwgQ1VSTF9ORVRSQ19JR05PUkVEKSB8fCAoYXJnID49IENVUkxfTkVUUkNfTEFTVCkpCiAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwogICAgIGRhdGEtPnNldC51c2VfbmV0cmMgPSAoZW51bSBDVVJMX05FVFJDX09QVElPTilhcmc7CiAgICAgYnJlYWs7CkBAIC0zMzksNyArMzc2LDcgQEAKICAgICAgKiBjdXJsL2N1cmwuaCBoZWFkZXIgZmlsZS4KICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMX1RJTUVDT05EX05PTkUpIHx8IChhcmcgPiBDVVJMX1RJTUVDT05EX0xBU1RNT0QpKQorICAgIGlmKChhcmcgPCBDVVJMX1RJTUVDT05EX05PTkUpIHx8IChhcmcgPj0gQ1VSTF9USU1FQ09ORF9MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LnRpbWVjb25kaXRpb24gPSAoY3VybF9UaW1lQ29uZClhcmc7CiAgICAgYnJlYWs7CkBAIC0zNjAsNyArMzk3LDkgQEAKICAgICBicmVhazsKIAogICBjYXNlIENVUkxPUFRfU1NMVkVSU0lPTjoKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNhc2UgQ1VSTE9QVF9QUk9YWV9TU0xWRVJTSU9OOgorI2VuZGlmCiAgICAgLyoKICAgICAgKiBTZXQgZXhwbGljaXQgU1NMIHZlcnNpb24gdG8gdHJ5IHRvIGNvbm5lY3Qgd2l0aCwgYXMgc29tZSBTU0wKICAgICAgKiBpbXBsZW1lbnRhdGlvbnMgYXJlIGxhbWUuCkBAIC0zNjgsOSArNDA3LDExIEBACiAjaWZkZWYgVVNFX1NTTAogICAgIHsKICAgICAgIGxvbmcgdmVyc2lvbiwgdmVyc2lvbl9tYXg7Ci0gICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpwcmltYXJ5ID0gKG9wdGlvbiA9PSBDVVJMT1BUX1NTTFZFUlNJT04gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+c2V0LnNzbC5wcmltYXJ5IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeSk7CisgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpwcmltYXJ5ID0gJmRhdGEtPnNldC5zc2wucHJpbWFyeTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICBpZihvcHRpb24gIT0gQ1VSTE9QVF9TU0xWRVJTSU9OKQorICAgICAgICBwcmltYXJ5ID0gJmRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeTsKKyNlbmRpZgogCiAgICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwogCkBAIC00NzgsMTEgKzUxOSwxMSBAQAogICAgICAgIENVUkxPUFRfUE9TVEZJRUxEUyBpc24ndCB1c2VkIGFuZCB0aGUgUE9TVCBkYXRhIGlzIHJlYWQgb2ZmIHRoZQogICAgICAgIGNhbGxiYWNrISAqLwogICAgIGlmKHZhX2FyZyhwYXJhbSwgbG9uZykpIHsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUOworICAgICAgZGF0YS0+c2V0Lm1ldGhvZCA9IEhUVFBSRVFfUE9TVDsKICAgICAgIGRhdGEtPnNldC5vcHRfbm9fYm9keSA9IEZBTFNFOyAvKiB0aGlzIGlzIGltcGxpZWQgKi8KICAgICB9CiAgICAgZWxzZQotICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX0dFVDsKKyAgICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX0dFVDsKICAgICBicmVhazsKIAogICBjYXNlIENVUkxPUFRfQ09QWVBPU1RGSUVMRFM6CkBAIC01MjksNyArNTcwLDcgQEAKICAgICB9CiAKICAgICBkYXRhLT5zZXQucG9zdGZpZWxkcyA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NPUFlQT1NURklFTERTXTsKLSAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfUE9TVDsKKyAgICBkYXRhLT5zZXQubWV0aG9kID0gSFRUUFJFUV9QT1NUOwogICAgIGJyZWFrOwogCiAgIGNhc2UgQ1VSTE9QVF9QT1NURklFTERTOgpAQCAtNTM5LDcgKzU4MCw3IEBACiAgICAgZGF0YS0+c2V0LnBvc3RmaWVsZHMgPSB2YV9hcmcocGFyYW0sIHZvaWQgKik7CiAgICAgLyogUmVsZWFzZSBvbGQgY29waWVkIGRhdGEuICovCiAgICAgKHZvaWQpIEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DT1BZUE9TVEZJRUxEU10sIE5VTEwpOwotICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUOworICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX1BPU1Q7CiAgICAgYnJlYWs7CiAKICAgY2FzZSBDVVJMT1BUX1BPU1RGSUVMRFNJWkU6CkBAIC01ODUsNyArNjI2LDcgQEAKICAgICAgKiBTZXQgdG8gbWFrZSB1cyBkbyBIVFRQIFBPU1QKICAgICAgKi8KICAgICBkYXRhLT5zZXQuaHR0cHBvc3QgPSB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICopOwotICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUX0ZPUk07CisgICAgZGF0YS0+c2V0Lm1ldGhvZCA9IEhUVFBSRVFfUE9TVF9GT1JNOwogICAgIGRhdGEtPnNldC5vcHRfbm9fYm9keSA9IEZBTFNFOyAvKiB0aGlzIGlzIGltcGxpZWQgKi8KICAgICBicmVhazsKICNlbmRpZiAgIC8qIENVUkxfRElTQUJMRV9IVFRQICovCkBAIC01OTcsNyArNjM4LDcgQEAKICAgICByZXN1bHQgPSBDdXJsX21pbWVfc2V0X3N1YnBhcnRzKCZkYXRhLT5zZXQubWltZXBvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGN1cmxfbWltZSAqKSwgRkFMU0UpOwogICAgIGlmKCFyZXN1bHQpIHsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUX01JTUU7CisgICAgICBkYXRhLT5zZXQubWV0aG9kID0gSFRUUFJFUV9QT1NUX01JTUU7CiAgICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHkgPSBGQUxTRTsgLyogdGhpcyBpcyBpbXBsaWVkICovCiAgICAgfQogICAgIGJyZWFrOwpAQCAtNzQ5LDcgKzc5MCw3IEBACiAgICAgfQogICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoYXJncHRyLCAiRkxVU0giKSkgewogICAgICAgLyogZmx1c2ggY29va2llcyB0byBmaWxlLCB0YWtlcyBjYXJlIG9mIHRoZSBsb2NraW5nICovCi0gICAgICBDdXJsX2ZsdXNoX2Nvb2tpZXMoZGF0YSwgMCk7CisgICAgICBDdXJsX2ZsdXNoX2Nvb2tpZXMoZGF0YSwgRkFMU0UpOwogICAgIH0KICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKGFyZ3B0ciwgIlJFTE9BRCIpKSB7CiAgICAgICAvKiByZWxvYWQgY29va2llcyBmcm9tIGZpbGUgKi8KQEAgLTc5Miw3ICs4MzMsNyBAQAogICAgICAqIFNldCB0byBmb3JjZSB1cyBkbyBIVFRQIEdFVAogICAgICAqLwogICAgIGlmKHZhX2FyZyhwYXJhbSwgbG9uZykpIHsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CisgICAgICBkYXRhLT5zZXQubWV0aG9kID0gSFRUUFJFUV9HRVQ7CiAgICAgICBkYXRhLT5zZXQudXBsb2FkID0gRkFMU0U7IC8qIHN3aXRjaCBvZmYgdXBsb2FkICovCiAgICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHkgPSBGQUxTRTsgLyogdGhpcyBpcyBpbXBsaWVkICovCiAgICAgfQpAQCAtODA2LDExICs4NDcsMTYgQEAKICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwogICAgIGlmKGFyZyA8IENVUkxfSFRUUF9WRVJTSU9OX05PTkUpCiAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworI2lmZGVmIEVOQUJMRV9RVUlDCisgICAgaWYoYXJnID09IENVUkxfSFRUUF9WRVJTSU9OXzMpCisgICAgICA7CisgICAgZWxzZQorI2VuZGlmCiAjaWZuZGVmIFVTRV9OR0hUVFAyCiAgICAgaWYoYXJnID49IENVUkxfSFRUUF9WRVJTSU9OXzIpCiAgICAgICByZXR1cm4gQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0w7CiAjZWxzZQotICAgIGlmKGFyZyA+IENVUkxfSFRUUF9WRVJTSU9OXzJfUFJJT1JfS05PV0xFREdFKQorICAgIGlmKGFyZyA+PSBDVVJMX0hUVFBfVkVSU0lPTl9MQVNUKQogICAgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOwogICAgIGlmKGFyZyA9PSBDVVJMX0hUVFBfVkVSU0lPTl9OT05FKQogICAgICAgYXJnID0gQ1VSTF9IVFRQX1ZFUlNJT05fMlRMUzsKQEAgLTg5Nyw3ICs5NDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CiAKICAgICAvKiB3ZSBkb24ndCBzZXQKLSAgICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfQ1VTVE9NOworICAgICAgIGRhdGEtPnNldC5tZXRob2QgPSBIVFRQUkVRX0NVU1RPTTsKICAgICAgICBoZXJlLCB3ZSBjb250aW51ZSBhcyBpZiB3ZSB3ZXJlIHVzaW5nIHRoZSBhbHJlYWR5IHNldCB0eXBlCiAgICAgICAgYW5kIHRoaXMganVzdCBjaGFuZ2VzIHRoZSBhY3R1YWwgcmVxdWVzdCBrZXl3b3JkICovCiAgICAgYnJlYWs7CkBAIC0xMTAxLDcgKzExNDcsNyBAQAogICAgICAqIEhvdyBkbyBhY2Nlc3MgZmlsZXMgb3ZlciBGVFAuCiAgICAgICovCiAgICAgYXJnID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKLSAgICBpZigoYXJnIDwgQ1VSTEZUUE1FVEhPRF9ERUZBVUxUKSB8fCAoYXJnID4gQ1VSTEZUUE1FVEhPRF9TSU5HTEVDV0QpKQorICAgIGlmKChhcmcgPCBDVVJMRlRQTUVUSE9EX0RFRkFVTFQpIHx8IChhcmcgPj0gQ1VSTEZUUE1FVEhPRF9MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kID0gKGN1cmxfZnRwZmlsZSlhcmc7CiAgICAgYnJlYWs7CkBAIC0xMTI4LDcgKzExNzQsNyBAQAogCiAgIGNhc2UgQ1VSTE9QVF9GVFBfU1NMX0NDQzoKICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMRlRQU1NMX0NDQ19OT05FKSB8fCAoYXJnID4gQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFKSkKKyAgICBpZigoYXJnIDwgQ1VSTEZUUFNTTF9DQ0NfTk9ORSkgfHwgKGFyZyA+PSBDVVJMRlRQU1NMX0NDQ19MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LmZ0cF9jY2MgPSAoY3VybF9mdHBjY2MpYXJnOwogICAgIGJyZWFrOwpAQCAtMTE1Niw3ICsxMjAyLDcgQEAKICAgICAgKiBTZXQgYSBzcGVjaWZpYyBhdXRoIGZvciBGVFAtU1NMIHRyYW5zZmVycy4KICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMRlRQQVVUSF9ERUZBVUxUKSB8fCAoYXJnID4gQ1VSTEZUUEFVVEhfVExTKSkKKyAgICBpZigoYXJnIDwgQ1VSTEZUUEFVVEhfREVGQVVMVCkgfHwgKGFyZyA+PSBDVVJMRlRQQVVUSF9MQVNUKSkKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgZGF0YS0+c2V0LmZ0cHNzbGF1dGggPSAoY3VybF9mdHBhdXRoKWFyZzsKICAgICBicmVhazsKQEAgLTE1OTgsNiArMTY0NCwxMyBAQAogICAgIHJlc3VsdCA9IEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX09SSUddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9TU0xDRVJUX0JMT0I6CisgICAgLyoKKyAgICAgKiBCbG9iIHRoYXQgaG9sZHMgZmlsZSBuYW1lIG9mIHRoZSBTU0wgY2VydGlmaWNhdGUgdG8gdXNlCisgICAgICovCisgICAgcmVzdWx0ID0gQ3VybF9zZXRibG9ib3B0KCZkYXRhLT5zZXQuYmxvYnNbQkxPQl9DRVJUX09SSUddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAgIGJyZWFrOwogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTENFUlQ6CiAgICAgLyoKQEAgLTE2MDYsNiArMTY1OSwxMyBAQAogICAgIHJlc3VsdCA9IEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1BST1hZXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOwogICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfUFJPWFlfU1NMQ0VSVF9CTE9COgorICAgIC8qCisgICAgICogQmxvYiB0aGF0IGhvbGRzIGZpbGUgbmFtZSBvZiB0aGUgU1NMIGNlcnRpZmljYXRlIHRvIHVzZSBmb3IgcHJveHkKKyAgICAgKi8KKyAgICByZXN1bHQgPSBDdXJsX3NldGJsb2JvcHQoJmRhdGEtPnNldC5ibG9ic1tCTE9CX0NFUlRfUFJPWFldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAgIGJyZWFrOwogI2VuZGlmCiAgIGNhc2UgQ1VSTE9QVF9TU0xDRVJUVFlQRToKICAgICAvKgpAQCAtMTYzMCw2ICsxNjkwLDEzIEBACiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9PUklHXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOwogICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfU1NMS0VZX0JMT0I6CisgICAgLyoKKyAgICAgKiBCbG9iIHRoYXQgaG9sZHMgZmlsZSBuYW1lIG9mIHRoZSBTU0wga2V5IHRvIHVzZQorICAgICAqLworICAgIHJlc3VsdCA9IEN1cmxfc2V0YmxvYm9wdCgmZGF0YS0+c2V0LmJsb2JzW0JMT0JfS0VZX09SSUddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAgIGJyZWFrOwogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTEtFWToKICAgICAvKgpAQCAtMTYzOCw2ICsxNzA1LDEzIEBACiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QUk9YWV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTEtFWV9CTE9COgorICAgIC8qCisgICAgICogQmxvYiB0aGF0IGhvbGRzIGZpbGUgbmFtZSBvZiB0aGUgU1NMIGtleSB0byB1c2UgZm9yIHByb3h5CisgICAgICovCisgICAgcmVzdWx0ID0gQ3VybF9zZXRibG9ib3B0KCZkYXRhLT5zZXQuYmxvYnNbQkxPQl9LRVlfUFJPWFldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX2Jsb2IgKikpOworICAgIGJyZWFrOwogI2VuZGlmCiAgIGNhc2UgQ1VSTE9QVF9TU0xLRVlUWVBFOgogICAgIC8qCkBAIC0xNzc1LDE2ICsxODQ5LDkgQEAKICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwogCiAgICAgLyogT2J2aW91c2x5IHBlb3BsZSBhcmUgbm90IHJlYWRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgdG9vIG1hbnkgdGhvdWdodAotICAgICAgIHRoaXMgYXJndW1lbnQgdG9vayBhIGJvb2xlYW4gd2hlbiBpdCB3YXNuJ3QgYW5kIG1pc3VzZWQgaXQuIFdlIHRodXMgYmFuCi0gICAgICAgMSBhcyBhIHNlbnNpYmxlIGlucHV0IGFuZCB3ZSB3YXJuIGFib3V0IGl0cyB1c2UuIFRoZW4gd2Ugb25seSBoYXZlIHRoZQotICAgICAgIDIgYWN0aW9uIGludGVybmFsbHkgc3RvcmVkIGFzIFRSVUUuICovCi0KLSAgICBpZigxID09IGFyZykgewotICAgICAgZmFpbGYoZGF0YSwgIkNVUkxPUFRfU1NMX1ZFUklGWUhPU1Qgbm8gbG9uZ2VyIHN1cHBvcnRzIDEgYXMgdmFsdWUhIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwotICAgIH0KLQotICAgIGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJpZnlob3N0ID0gKDAgIT0gYXJnKSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICB0aGlzIGFyZ3VtZW50IHRvb2sgYSBib29sZWFuIHdoZW4gaXQgd2Fzbid0IGFuZCBtaXN1c2VkIGl0LgorICAgICAgIFRyZWF0IDEgYW5kIDIgdGhlIHNhbWUgKi8KKyAgICBkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5aG9zdCA9IChib29sKSgoYXJnICYgMykgPyBUUlVFIDogRkFMU0UpOwogCiAgICAgLyogVXBkYXRlIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gc3NsX2NvbmZpZy4gKi8KICAgICBpZihkYXRhLT5jb25uKSB7CkBAIC0xNzk5LDE3ICsxODY2LDggQEAKICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwogCi0gICAgLyogT2J2aW91c2x5IHBlb3BsZSBhcmUgbm90IHJlYWRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgdG9vIG1hbnkgdGhvdWdodAotICAgICAgIHRoaXMgYXJndW1lbnQgdG9vayBhIGJvb2xlYW4gd2hlbiBpdCB3YXNuJ3QgYW5kIG1pc3VzZWQgaXQuIFdlIHRodXMgYmFuCi0gICAgICAgMSBhcyBhIHNlbnNpYmxlIGlucHV0IGFuZCB3ZSB3YXJuIGFib3V0IGl0cyB1c2UuIFRoZW4gd2Ugb25seSBoYXZlIHRoZQotICAgICAgIDIgYWN0aW9uIGludGVybmFsbHkgc3RvcmVkIGFzIFRSVUUuICovCi0KLSAgICBpZigxID09IGFyZykgewotICAgICAgZmFpbGYoZGF0YSwgIkNVUkxPUFRfU1NMX1ZFUklGWUhPU1Qgbm8gbG9uZ2VyIHN1cHBvcnRzIDEgYXMgdmFsdWUhIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwotICAgIH0KLQotICAgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS52ZXJpZnlob3N0ID0gKDAgIT0gYXJnKT9UUlVFOkZBTFNFOworICAgIC8qIFRyZWF0IGJvdGggMSBhbmQgMiBhcyBUUlVFICovCisgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeWhvc3QgPSAoYm9vbCkoKGFyZyAmIDMpP1RSVUU6RkFMU0UpOwogCiAgICAgLyogVXBkYXRlIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gcHJveHlfc3NsX2NvbmZpZy4gKi8KICAgICBpZihkYXRhLT5jb25uKSB7CkBAIC0xOTc4LDYgKzIwMzYsMzAgQEAKICAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfT1JJR10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0lTU1VFUkNFUlRfQkxPQjoKKyAgICAvKgorICAgICAqIEJsb2IgdGhhdCBob2xkcyBJc3N1ZXIgY2VydGlmaWNhdGUgdG8gY2hlY2sgY2VydGlmaWNhdGVzIGlzc3VlcgorICAgICAqLworICAgIHJlc3VsdCA9IEN1cmxfc2V0YmxvYm9wdCgmZGF0YS0+c2V0LmJsb2JzW0JMT0JfU1NMX0lTU1VFUkNFUlRfT1JJR10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgc3RydWN0IGN1cmxfYmxvYiAqKSk7CisgICAgYnJlYWs7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICBjYXNlIENVUkxPUFRfUFJPWFlfSVNTVUVSQ0VSVDoKKyAgICAvKgorICAgICAqIFNldCBJc3N1ZXIgY2VydGlmaWNhdGUgZmlsZQorICAgICAqIHRvIGNoZWNrIGNlcnRpZmljYXRlcyBpc3N1ZXIKKyAgICAgKi8KKyAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfUFJPWFldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9JU1NVRVJDRVJUX0JMT0I6CisgICAgLyoKKyAgICAgKiBCbG9iIHRoYXQgaG9sZHMgSXNzdWVyIGNlcnRpZmljYXRlIHRvIGNoZWNrIGNlcnRpZmljYXRlcyBpc3N1ZXIKKyAgICAgKi8KKyAgICByZXN1bHQgPSBDdXJsX3NldGJsb2JvcHQoJmRhdGEtPnNldC5ibG9ic1tCTE9CX1NTTF9JU1NVRVJDRVJUX1BST1hZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBzdHJ1Y3QgY3VybF9ibG9iICopKTsKKyAgICBicmVhazsKKyNlbmRpZgogI2lmbmRlZiBDVVJMX0RJU0FCTEVfVEVMTkVUCiAgIGNhc2UgQ1VSTE9QVF9URUxORVRPUFRJT05TOgogICAgIC8qCkBAIC0yMDAxLDcgKzIwODMsNyBAQAogICAgICAgYXJnID0gUkVBREJVRkZFUl9NSU47CiAKICAgICAvKiBSZXNpemUgaWYgbmV3IHNpemUgKi8KLSAgICBpZihhcmcgIT0gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplKSB7CisgICAgaWYoKGFyZyAhPSBkYXRhLT5zZXQuYnVmZmVyX3NpemUpICYmIGRhdGEtPnN0YXRlLmJ1ZmZlcikgewogICAgICAgY2hhciAqbmV3YnVmZiA9IHJlYWxsb2MoZGF0YS0+c3RhdGUuYnVmZmVyLCBhcmcgKyAxKTsKICAgICAgIGlmKCFuZXdidWZmKSB7CiAgICAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiByZWFsbG9jIG9mIGJ1ZmZlciBmYWlsZWRcbiIpKTsKQEAgLTIxMzEsNyArMjIxMyw3IEBACiAgICAgICogTWFrZSB0cmFuc2ZlcnMgYXR0ZW1wdCB0byB1c2UgU1NML1RMUy4KICAgICAgKi8KICAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOwotICAgIGlmKChhcmcgPCBDVVJMVVNFU1NMX05PTkUpIHx8IChhcmcgPiBDVVJMVVNFU1NMX0FMTCkpCisgICAgaWYoKGFyZyA8IENVUkxVU0VTU0xfTk9ORSkgfHwgKGFyZyA+PSBDVVJMVVNFU1NMX0xBU1QpKQogICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKICAgICBkYXRhLT5zZXQudXNlX3NzbCA9IChjdXJsX3VzZXNzbClhcmc7CiAgICAgYnJlYWs7CkBAIC0yMTQxLDYgKzIyMjMsOSBAQAogICAgIGRhdGEtPnNldC5zc2wuZW5hYmxlX2JlYXN0ID0KICAgICAgIChib29sKSgoYXJnJkNVUkxTU0xPUFRfQUxMT1dfQkVBU1QpID8gVFJVRSA6IEZBTFNFKTsKICAgICBkYXRhLT5zZXQuc3NsLm5vX3Jldm9rZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBkYXRhLT5zZXQuc3NsLm5vX3BhcnRpYWxjaGFpbiA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUEFSVElBTENIQUlOKTsKKyAgICBkYXRhLT5zZXQuc3NsLnJldm9rZV9iZXN0X2VmZm9ydCA9ICEhKGFyZyAmIENVUkxTU0xPUFRfUkVWT0tFX0JFU1RfRUZGT1JUKTsKKyAgICBkYXRhLT5zZXQuc3NsLm5hdGl2ZV9jYV9zdG9yZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTkFUSVZFX0NBKTsKICAgICBicmVhazsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKQEAgLTIxNDksNiArMjIzNCwxMCBAQAogICAgIGRhdGEtPnNldC5wcm94eV9zc2wuZW5hYmxlX2JlYXN0ID0KICAgICAgIChib29sKSgoYXJnJkNVUkxTU0xPUFRfQUxMT1dfQkVBU1QpID8gVFJVRSA6IEZBTFNFKTsKICAgICBkYXRhLT5zZXQucHJveHlfc3NsLm5vX3Jldm9rZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLm5vX3BhcnRpYWxjaGFpbiA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUEFSVElBTENIQUlOKTsKKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLm5hdGl2ZV9jYV9zdG9yZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTkFUSVZFX0NBKTsKKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLnJldm9rZV9iZXN0X2VmZm9ydCA9CisgICAgICAhIShhcmcgJiBDVVJMU1NMT1BUX1JFVk9LRV9CRVNUX0VGRk9SVCk7CiAgICAgYnJlYWs7CiAjZW5kaWYKIApAQCAtMjI1MSw3ICsyMzQwLDkgQEAKICAgY2FzZSBDVVJMT1BUX1NTTF9TRVNTSU9OSURfQ0FDSEU6CiAgICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnNlc3Npb25pZCA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpID8KICAgICAgIFRSVUUgOiBGQUxTRTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnNlc3Npb25pZCA9IGRhdGEtPnNldC5zc2wucHJpbWFyeS5zZXNzaW9uaWQ7CisjZW5kaWYKICAgICBicmVhazsKIAogI2lmZGVmIFVTRV9TU0gKQEAgLTIyOTQsNyArMjM4NSw3IEBACiAKICAgY2FzZSBDVVJMT1BUX1NTSF9LRVlGVU5DVElPTjoKICAgICAvKiBzZXR0aW5nIHRvIE5VTEwgaXMgZmluZSBzaW5jZSB0aGUgc3NoLmMgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgd2lsbAotICAgICAgIHRoZW4gcmV2ZXIgdG8gdXNlIHRoZSBpbnRlcm5hbCBkZWZhdWx0ICovCisgICAgICAgdGhlbiByZXZlcnQgdG8gdXNlIHRoZSBpbnRlcm5hbCBkZWZhdWx0ICovCiAgICAgZGF0YS0+c2V0LnNzaF9rZXlmdW5jID0gdmFfYXJnKHBhcmFtLCBjdXJsX3NzaGtleWNhbGxiYWNrKTsKICAgICBicmVhazsKIApAQCAtMjM3MSw4ICsyNDYyLDcgQEAKICAgY2FzZSBDVVJMT1BUX1JFRElSX1BST1RPQ09MUzoKICAgICAvKiBzZXQgdGhlIGJpdG1hc2sgZm9yIHRoZSBwcm90b2NvbHMgdGhhdCBsaWJjdXJsIGlzIGFsbG93ZWQgdG8gZm9sbG93IHRvLAogICAgICAgIGFzIGEgc3Vic2V0IG9mIHRoZSBDVVJMT1BUX1BST1RPQ09MUyBvbmVzLiBUaGF0IG1lYW5zIHRoZSBwcm90b2NvbCBuZWVkcwotICAgICAgIHRvIGJlIHNldCBpbiBib3RoIGJpdG1hc2tzIHRvIGJlIGFsbG93ZWQgdG8gZ2V0IHJlZGlyZWN0ZWQgdG8uIERlZmF1bHRzCi0gICAgICAgdG8gYWxsIHByb3RvY29scyBleGNlcHQgRklMRSBhbmQgU0NQLiAqLworICAgICAgIHRvIGJlIHNldCBpbiBib3RoIGJpdG1hc2tzIHRvIGJlIGFsbG93ZWQgdG8gZ2V0IHJlZGlyZWN0ZWQgdG8uICovCiAgICAgZGF0YS0+c2V0LnJlZGlyX3Byb3RvY29scyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CiAgICAgYnJlYWs7CiAKQEAgLTIzOTgsOCArMjQ4OCwxOCBAQAogICAgIC8qIFNldCB0aGUgbGlzdCBvZiBtYWlsIHJlY2lwaWVudHMgKi8KICAgICBkYXRhLT5zZXQubWFpbF9yY3B0ID0gdmFfYXJnKHBhcmFtLCBzdHJ1Y3QgY3VybF9zbGlzdCAqKTsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX01BSUxfUkNQVF9BTExMT1dGQUlMUzoKKyAgICAvKiBhbGxvdyBSQ1BUIFRPIGNvbW1hbmQgdG8gZmFpbCBmb3Igc29tZSByZWNpcGllbnRzICovCisgICAgZGF0YS0+c2V0Lm1haWxfcmNwdF9hbGxvd2ZhaWxzID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CisgICAgYnJlYWs7CiAjZW5kaWYKIAorICBjYXNlIENVUkxPUFRfU0FTTF9BVVRIWklEOgorICAgIC8qIEF1dGhvcmlzYXRpb24gaWRlbnRpdHkgKGlkZW50aXR5IHRvIGFjdCBhcykgKi8KKyAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU0FTTF9BVVRIWklEXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworCiAgIGNhc2UgQ1VSTE9QVF9TQVNMX0lSOgogICAgIC8qIEVuYWJsZS9kaXNhYmxlIFNBU0wgaW5pdGlhbCByZXNwb25zZSAqLwogICAgIGRhdGEtPnNldC5zYXNsX2lyID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CkBAIC0yNTAzLDcgKzI2MDMsNyBAQAogCiAgIGNhc2UgQ1VSTE9QVF9SVFNQX1NFUlZFUl9DU0VROgogICAgIC8qIFNhbWUgYXMgdGhlIGFib3ZlLCBidXQgZm9yIHNlcnZlci1pbml0aWF0ZWQgcmVxdWVzdHMgKi8KLSAgICBkYXRhLT5zdGF0ZS5ydHNwX25leHRfY2xpZW50X0NTZXEgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9zZXJ2ZXJfQ1NlcSA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CiAgICAgYnJlYWs7CiAKICAgY2FzZSBDVVJMT1BUX0lOVEVSTEVBVkVEQVRBOgpAQCAtMjU0NCw5ICsyNjQ0LDExIEBACiAgIGNhc2UgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1VTRVJOQU1FOgogICAgIHJlc3VsdCA9IEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX1BST1hZXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX1BST1hZXSAmJgogICAgICAgICFkYXRhLT5zZXQucHJveHlfc3NsLmF1dGh0eXBlKQogICAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9TUlA7IC8qIGRlZmF1bHQgdG8gU1JQICovCisjZW5kaWYKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQ6CiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfT1JJR10sCkBAIC0yNTU3LDkgKzI2NTksMTEgQEAKICAgY2FzZSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQ6CiAgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfUFJPWFldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfUFJPWFldICYmCiAgICAgICAgIWRhdGEtPnNldC5wcm94eV9zc2wuYXV0aHR5cGUpCiAgICAgICBkYXRhLT5zZXQucHJveHlfc3NsLmF1dGh0eXBlID0gQ1VSTF9UTFNBVVRIX1NSUDsgLyogZGVmYXVsdCB0byBTUlAgKi8KKyNlbmRpZgogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfVExTQVVUSF9UWVBFOgogICAgIGFyZ3B0ciA9IHZhX2FyZyhwYXJhbSwgY2hhciAqKTsKQEAgLTI1NjksNiArMjY3Myw3IEBACiAgICAgZWxzZQogICAgICAgZGF0YS0+c2V0LnNzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9OT05FOwogICAgIGJyZWFrOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY2FzZSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRToKICAgICBhcmdwdHIgPSB2YV9hcmcocGFyYW0sIGNoYXIgKik7CiAgICAgaWYoIWFyZ3B0ciB8fApAQCAtMjU3OCwxOCArMjY4MywzNSBAQAogICAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9OT05FOwogICAgIGJyZWFrOwogI2VuZGlmCisjZW5kaWYKICNpZmRlZiBVU0VfQVJFUwogICBjYXNlIENVUkxPUFRfRE5TX1NFUlZFUlM6Ci0gICAgcmVzdWx0ID0gQ3VybF9zZXRfZG5zX3NlcnZlcnMoZGF0YSwgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfRE5TX1NFUlZFUlNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXN1bHQgPSBDdXJsX3NldF9kbnNfc2VydmVycyhkYXRhLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfU0VSVkVSU10pOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfRE5TX0lOVEVSRkFDRToKLSAgICByZXN1bHQgPSBDdXJsX3NldF9kbnNfaW50ZXJmYWNlKGRhdGEsIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgcmVzdWx0ID0gQ3VybF9zZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0ROU19JTlRFUkZBQ0VdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXN1bHQgPSBDdXJsX3NldF9kbnNfaW50ZXJmYWNlKGRhdGEsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0ROU19JTlRFUkZBQ0VdKTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX0ROU19MT0NBTF9JUDQ6Ci0gICAgcmVzdWx0ID0gQ3VybF9zZXRfZG5zX2xvY2FsX2lwNChkYXRhLCB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIHJlc3VsdCA9IEN1cmxfc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfTE9DQUxfSVA0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0ID0gQ3VybF9zZXRfZG5zX2xvY2FsX2lwNChkYXRhLCBkYXRhLT5zZXQuc3RyW1NUUklOR19ETlNfTE9DQUxfSVA0XSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9ETlNfTE9DQUxfSVA2OgotICAgIHJlc3VsdCA9IEN1cmxfc2V0X2Ruc19sb2NhbF9pcDYoZGF0YSwgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfRE5TX0xPQ0FMX0lQNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdCA9IEN1cmxfc2V0X2Ruc19sb2NhbF9pcDYoZGF0YSwgZGF0YS0+c2V0LnN0cltTVFJJTkdfRE5TX0xPQ0FMX0lQNl0pOwogICAgIGJyZWFrOwogI2VuZGlmCiAgIGNhc2UgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFOgpAQCAtMjYxNSwxNCArMjczNywxMiBAQAogICAgIHJlc3VsdCA9IENVUkxFX05PVF9CVUlMVF9JTjsKICNlbmRpZgogICAgIGJyZWFrOwotI2lmZGVmIFVTRV9OR0hUVFAyCiAgIGNhc2UgQ1VSTE9QVF9TU0xfRU5BQkxFX05QTjoKICAgICBkYXRhLT5zZXQuc3NsX2VuYWJsZV9ucG4gPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/IFRSVUUgOiBGQUxTRTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX1NTTF9FTkFCTEVfQUxQTjoKICAgICBkYXRhLT5zZXQuc3NsX2VuYWJsZV9hbHBuID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPyBUUlVFIDogRkFMU0U7CiAgICAgYnJlYWs7Ci0jZW5kaWYKICNpZmRlZiBVU0VfVU5JWF9TT0NLRVRTCiAgIGNhc2UgQ1VSTE9QVF9VTklYX1NPQ0tFVF9QQVRIOgogICAgIGRhdGEtPnNldC5hYnN0cmFjdF91bml4X3NvY2tldCA9IEZBTFNFOwpAQCAtMjcyOCw3ICsyODQ4LDggQEAKICAgICByZXN1bHQgPSBDdXJsX3NldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfQUxUU1ZDXSwgYXJncHRyKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICh2b2lkKUN1cmxfYWx0c3ZjX2xvYWQoZGF0YS0+YXNpLCBhcmdwdHIpOworICAgIGlmKGFyZ3B0cikKKyAgICAgICh2b2lkKUN1cmxfYWx0c3ZjX2xvYWQoZGF0YS0+YXNpLCBhcmdwdHIpOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfQUxUU1ZDX0NUUkw6CiAgICAgaWYoIWRhdGEtPmFzaSkgewpAQCAtMjc3MCw3ICsyODkxLDcgQEAKIAogICB2YV9zdGFydChhcmcsIHRhZyk7CiAKLSAgcmVzdWx0ID0gdnNldG9wdChkYXRhLCB0YWcsIGFyZyk7CisgIHJlc3VsdCA9IEN1cmxfdnNldG9wdChkYXRhLCB0YWcsIGFyZyk7CiAKICAgdmFfZW5kKGFyZyk7CiAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXRvcHQuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5oCmluZGV4IGM2NThlMDQuLjVmYzQzNjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldG9wdC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMyw3ICsyMyw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBDVVJMY29kZSBDdXJsX3NldHN0cm9wdChjaGFyICoqY2hhcnAsIGNvbnN0IGNoYXIgKnMpOwotQ1VSTGNvZGUgQ3VybF92c2V0b3B0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIENVUkxvcHRpb24gb3B0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJnKTsKK0NVUkxjb2RlIEN1cmxfc2V0YmxvYm9wdChzdHJ1Y3QgY3VybF9ibG9iICoqYmxvYnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfYmxvYiAqYmxvYik7CitDVVJMY29kZSBDdXJsX3ZzZXRvcHQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgQ1VSTG9wdGlvbiBvcHRpb24sIHZhX2xpc3QgYXJnKTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NFVE9QVF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC1vczQwMC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2V0dXAtb3M0MDAuaAppbmRleCBhM2MyYTdiLi5iNjkzY2IzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC1vczQwMC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldHVwLW9zNDAwLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIwMCwxNyArMjAwLDIxIEBACiAvKiBTb21lIHNvY2tldCBmdW5jdGlvbnMgbXVzdCBiZSB3cmFwcGVkIHRvIHByb2Nlc3MgdGV4dHVhbCBhZGRyZXNzZXMKICAgIGxpa2UgQUZfVU5JWC4gKi8KIAotZXh0ZXJuIGludCBDdXJsX29zNDAwX2Nvbm5lY3QoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKiBkZXN0YWRkciwgaW50IGFkZHJsZW4pOwotZXh0ZXJuIGludCBDdXJsX29zNDAwX2JpbmQoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKiBsb2NhbGFkZHIsIGludCBhZGRybGVuKTsKK2V4dGVybiBpbnQgQ3VybF9vczQwMF9jb25uZWN0KGludCBzZCwgc3RydWN0IHNvY2thZGRyICpkZXN0YWRkciwgaW50IGFkZHJsZW4pOworZXh0ZXJuIGludCBDdXJsX29zNDAwX2JpbmQoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKmxvY2FsYWRkciwgaW50IGFkZHJsZW4pOwogZXh0ZXJuIGludCBDdXJsX29zNDAwX3NlbmR0byhpbnQgc2QsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgaW50IGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBkc3RhZGRyLCBpbnQgYWRkcmxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqZHN0YWRkciwgaW50IGFkZHJsZW4pOwogZXh0ZXJuIGludCBDdXJsX29zNDAwX3JlY3Zmcm9tKGludCBzZCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpmcm9tYWRkciwgaW50ICphZGRybGVuKTsKK2V4dGVybiBpbnQgQ3VybF9vczQwMF9nZXRwZWVybmFtZShpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50ICphZGRybGVuKTsKK2V4dGVybiBpbnQgQ3VybF9vczQwMF9nZXRzb2NrbmFtZShpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50ICphZGRybGVuKTsKIAogI2RlZmluZSBjb25uZWN0ICAgICAgICAgICAgICAgICBDdXJsX29zNDAwX2Nvbm5lY3QKICNkZWZpbmUgYmluZCAgICAgICAgICAgICAgICAgICAgQ3VybF9vczQwMF9iaW5kCiAjZGVmaW5lIHNlbmR0byAgICAgICAgICAgICAgICAgIEN1cmxfb3M0MDBfc2VuZHRvCiAjZGVmaW5lIHJlY3Zmcm9tICAgICAgICAgICAgICAgIEN1cmxfb3M0MDBfcmVjdmZyb20KKyNkZWZpbmUgZ2V0cGVlcm5hbWUgICAgICAgICAgICAgQ3VybF9vczQwMF9nZXRwZWVybmFtZQorI2RlZmluZSBnZXRzb2NrbmFtZSAgICAgICAgICAgICBDdXJsX29zNDAwX2dldHNvY2tuYW1lCiAKICNpZmRlZiBIQVZFX0xJQloKICNkZWZpbmUgemxpYlZlcnNpb24gICAgICAgICAgICAgQ3VybF9vczQwMF96bGliVmVyc2lvbgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2V0dXAtdm1zLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC12bXMuaAppbmRleCA2YzQ1NGFlLi4wZTM5YzlmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC12bXMuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zZXR1cC12bXMuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzMsNyArNzMsNyBAQAogIyAgIGVuZGlmCiAjZW5kaWYKIAotICAgIHN0cnVjdCBwYXNzd2QgKiBkZWNjX2dldHB3dWlkKHVpZF90IHVpZCk7CisgICAgc3RydWN0IHBhc3N3ZCAqZGVjY19nZXRwd3VpZCh1aWRfdCB1aWQpOwogCiAjaWZkZWYgX19ERUNDCiAjICAgaWYgX19JTklUSUFMX1BPSU5URVJfU0laRSA9PSAzMgpAQCAtMTM4LDkgKzEzOCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGFzc3dkIHZtc19wYXNzd2RfY2FjaGU7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFzc3dkICogdm1zX2dldHB3dWlkKHVpZF90IHVpZCkKK3N0YXRpYyBzdHJ1Y3QgcGFzc3dkICp2bXNfZ2V0cHd1aWQodWlkX3QgdWlkKQogewotICBzdHJ1Y3QgcGFzc3dkICogbXlfcGFzc3dkOworICBzdHJ1Y3QgcGFzc3dkICpteV9wYXNzd2Q7CiAKIC8qIEhhY2sgbmVlZGVkIHRvIHN1cHBvcnQgNjQgYml0IGJ1aWxkcywgZGVjY19nZXRwd25hbSBpcyAzMiBiaXQgb25seSAqLwogI2lmZGVmIF9fREVDQwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2V0dXAtd2luMzIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldHVwLXdpbjMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViNTg0NwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NldHVwLXdpbjMyLmgKQEAgLTAsMCArMSwxMjMgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfU0VUVVBfV0lOMzJfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9TRVRVUF9XSU4zMl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBJbmNsdWRlIGhlYWRlciBmaWxlcyBmb3Igd2luZG93cyBidWlsZHMgYmVmb3JlIHJlZGVmaW5pbmcgYW55dGhpbmcuCisgKiBVc2UgdGhpcyBwcmVwcm9jZXNzb3IgYmxvY2sgb25seSB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgd2luZG93cy5oLAorICogd2luc29jazIuaCwgd3MydGNwaXAuaCBvciB3aW5zb2NrLmguIEFueSBvdGhlciB3aW5kb3dzIHRoaW5nIGJlbG9uZ3MKKyAqIHRvIGFueSBvdGhlciBmdXJ0aGVyIGFuZCBpbmRlcGVuZGVudCBibG9jay4gIFVuZGVyIEN5Z3dpbiB0aGluZ3Mgd29yaworICoganVzdCBhcyB1bmRlciBsaW51eCAoZS5nLiA8c3lzL3NvY2tldC5oPikgYW5kIHRoZSB3aW5zb2NrIGhlYWRlcnMgc2hvdWxkCisgKiBuZXZlciBiZSBpbmNsdWRlZCB3aGVuIF9fQ1lHV0lOX18gaXMgZGVmaW5lZC4gIGNvbmZpZ3VyZSBzY3JpcHQgdGFrZXMKKyAqIGNhcmUgb2YgdGhpcywgbm90IGRlZmluaW5nIEhBVkVfV0lORE9XU19ILCBIQVZFX1dJTlNPQ0tfSCwgSEFWRV9XSU5TT0NLMl9ILAorICogbmVpdGhlciBIQVZFX1dTMlRDUElQX0ggd2hlbiBfX0NZR1dJTl9fIGlzIGRlZmluZWQuCisgKi8KKworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZiBkZWZpbmVkKFVOSUNPREUpICYmICFkZWZpbmVkKF9VTklDT0RFKQorIyAgICBkZWZpbmUgX1VOSUNPREUKKyMgIGVuZGlmCisjICBpZiBkZWZpbmVkKF9VTklDT0RFKSAmJiAhZGVmaW5lZChVTklDT0RFKQorIyAgICBkZWZpbmUgVU5JQ09ERQorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmVycm9yLmg+CisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyMgICAgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgICAgaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjICAgICAgaW5jbHVkZSA8d3MydGNwaXAuaD4KKyMgICAgZW5kaWYKKyMgIGVsc2UKKyMgICAgaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyMgICAgICBpbmNsdWRlIDx3aW5zb2NrLmg+CisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaW5jbHVkZSA8dGNoYXIuaD4KKyMgIGlmZGVmIFVOSUNPREUKKyAgICAgdHlwZWRlZiB3Y2hhcl90ICooKmN1cmxfd2NzZHVwX2NhbGxiYWNrKShjb25zdCB3Y2hhcl90ICpzdHIpOworIyAgZW5kaWYKKyNlbmRpZgorCisvKgorICogRGVmaW5lIFVTRV9XSU5TT0NLIHRvIDIgaWYgd2UgaGF2ZSBhbmQgdXNlIFdJTlNPQ0syIEFQSSwgZWxzZQorICogZGVmaW5lIFVTRV9XSU5TT0NLIHRvIDEgaWYgd2UgaGF2ZSBhbmQgdXNlIFdJTlNPQ0sgIEFQSSwgZWxzZQorICogdW5kZWZpbmUgVVNFX1dJTlNPQ0suCisgKi8KKworI3VuZGVmIFVTRV9XSU5TT0NLCisKKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyMgIGRlZmluZSBVU0VfV0lOU09DSyAyCisjZWxzZQorIyAgaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyMgICAgZGVmaW5lIFVTRV9XSU5TT0NLIDEKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIERlZmluZSBfV0lOMzJfV0lOTlRfW09TXSBzeW1ib2xzIGJlY2F1c2Ugbm90IGFsbCBXaW5kb3dzIGJ1aWxkIHN5c3RlbXMgaGF2ZQorICogdGhvc2Ugc3ltYm9scyB0byBjb21wYXJlIGFnYWluc3QsIGFuZCBldmVuIHRob3NlIHRoYXQgZG8gbWF5IGJlIG1pc3NpbmcKKyAqIG5ld2VyIHN5bWJvbHMuCisgKi8KKworI2lmbmRlZiBfV0lOMzJfV0lOTlRfTlQ0CisjZGVmaW5lIF9XSU4zMl9XSU5OVF9OVDQgICAgICAgICAgICAweDA0MDAgICAvKiBXaW5kb3dzIE5UIDQuMCAqLworI2VuZGlmCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9XSU4ySworI2RlZmluZSBfV0lOMzJfV0lOTlRfV0lOMksgICAgICAgICAgMHgwNTAwICAgLyogV2luZG93cyAyMDAwICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX1dJTlhQCisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XSU5YUCAgICAgICAgICAweDA1MDEgICAvKiBXaW5kb3dzIFhQICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX1dTMDMKKyNkZWZpbmUgX1dJTjMyX1dJTk5UX1dTMDMgICAgICAgICAgIDB4MDUwMiAgIC8qIFdpbmRvd3MgU2VydmVyIDIwMDMgKi8KKyNlbmRpZgorI2lmbmRlZiBfV0lOMzJfV0lOTlRfV0lONgorI2RlZmluZSBfV0lOMzJfV0lOTlRfV0lONiAgICAgICAgICAgMHgwNjAwICAgLyogV2luZG93cyBWaXN0YSAqLworI2VuZGlmCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9WSVNUQQorI2RlZmluZSBfV0lOMzJfV0lOTlRfVklTVEEgICAgICAgICAgMHgwNjAwICAgLyogV2luZG93cyBWaXN0YSAqLworI2VuZGlmCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9XUzA4CisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XUzA4ICAgICAgICAgICAweDA2MDAgICAvKiBXaW5kb3dzIFNlcnZlciAyMDA4ICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX0xPTkdIT1JOCisjZGVmaW5lIF9XSU4zMl9XSU5OVF9MT05HSE9STiAgICAgICAweDA2MDAgICAvKiBXaW5kb3dzIFZpc3RhICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX1dJTjcKKyNkZWZpbmUgX1dJTjMyX1dJTk5UX1dJTjcgICAgICAgICAgIDB4MDYwMSAgIC8qIFdpbmRvd3MgNyAqLworI2VuZGlmCisjaWZuZGVmIF9XSU4zMl9XSU5OVF9XSU44CisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XSU44ICAgICAgICAgICAweDA2MDIgICAvKiBXaW5kb3dzIDggKi8KKyNlbmRpZgorI2lmbmRlZiBfV0lOMzJfV0lOTlRfV0lOQkxVRQorI2RlZmluZSBfV0lOMzJfV0lOTlRfV0lOQkxVRSAgICAgICAgMHgwNjAzICAgLyogV2luZG93cyA4LjEgKi8KKyNlbmRpZgorI2lmbmRlZiBfV0lOMzJfV0lOTlRfV0lOVEhSRVNIT0xECisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XSU5USFJFU0hPTEQgICAweDBBMDAgICAvKiBXaW5kb3dzIDEwICovCisjZW5kaWYKKyNpZm5kZWYgX1dJTjMyX1dJTk5UX1dJTjEwCisjZGVmaW5lIF9XSU4zMl9XSU5OVF9XSU4xMCAgICAgICAgICAweDBBMDAgICAvKiBXaW5kb3dzIDEwICovCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NFVFVQX1dJTjMyX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NoYTI1Ni5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhMjU2LmMKaW5kZXggZjkyODdhZi4uZWU1ZDI3MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhMjU2LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhMjU2LmMKQEAgLTUsNyArNSw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOCwgRmxvcmluIFBldHJpdWMsIDxwZXRyaXVjLmZsb3JpbkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIEZsb3JpbiBQZXRyaXVjLCA8cGV0cml1Yy5mbG9yaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzUsMTYgKzM2LDIxMCBAQAogI2RlZmluZSBVU0VfT1BFTlNTTF9TSEEyNTYKICNlbmRpZgogCi0jZW5kaWYKKyNlbmRpZiAvKiBVU0VfT1BFTlNTTCAqLwogCi0jaWZkZWYgVVNFX09QRU5TU0xfU0hBMjU2CisjaWZkZWYgVVNFX01CRURUTFMKKyNpbmNsdWRlIDxtYmVkdGxzL3ZlcnNpb24uaD4KKworI2lmKE1CRURUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMjA3MDAwMCkKKyAgI2RlZmluZSBIQVNfUkVTVUxUX0NPREVfQkFTRURfRlVOQ1RJT05TCisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfTUJFRFRMUyAqLworCisvKiBQbGVhc2Uga2VlcCB0aGUgU1NMIGJhY2tlbmQtc3BlY2lmaWMgI2lmIGJyYW5jaGVzIGluIHRoaXMgb3JkZXI6CisgKgorICogMS4gVVNFX09QRU5TU0wKKyAqIDIuIFVTRV9HTlVUTFNfTkVUVExFCisgKiAzLiBVU0VfR05VVExTCisgKiA0LiBVU0VfTUJFRFRMUworICogNS4gVVNFX0NPTU1PTl9DUllQVE8KKyAqIDYuIFVTRV9XSU4zMl9DUllQVE8KKyAqCisgKiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgc2FtZSBTU0wgYnJhbmNoIGdldHMgYWN0aXZhdGVkIHRocm91Z2hvdXQgdGhpcyBzb3VyY2UKKyAqIGZpbGUgZXZlbiBpZiBtdWx0aXBsZSBiYWNrZW5kcyBhcmUgZW5hYmxlZCBhdCB0aGUgc2FtZSB0aW1lLgorICovCisKKyNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMX1NIQTI1NikKKwogLyogV2hlbiBPcGVuU1NMIGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhlIFNIQTI1Ni1mdW5jdGlvbiBmcm9tIE9wZW5TU0wgKi8KICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorCisjZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFNfTkVUVExFKQorCisjaW5jbHVkZSA8bmV0dGxlL3NoYS5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBzdHJ1Y3Qgc2hhMjU2X2N0eCBTSEEyNTZfQ1RYOworCitzdGF0aWMgdm9pZCBTSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjdHgpCit7CisgIHNoYTI1Nl9pbml0KGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9VcGRhdGUoU0hBMjU2X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICBzaGEyNTZfdXBkYXRlKGN0eCwgbGVuZ3RoLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgU0hBMjU2X0NUWCAqY3R4KQoreworICBzaGEyNTZfZGlnZXN0KGN0eCwgU0hBMjU2X0RJR0VTVF9TSVpFLCBkaWdlc3QpOworfQorCisjZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFMpCisKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3R5cGVkZWYgZ2NyeV9tZF9oZF90IFNIQTI1Nl9DVFg7CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmN0eCkKK3sKKyAgZ2NyeV9tZF9vcGVuKGN0eCwgR0NSWV9NRF9TSEEyNTYsIDApOworfQorCitzdGF0aWMgdm9pZCBTSEEyNTZfVXBkYXRlKFNIQTI1Nl9DVFggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKyAgZ2NyeV9tZF93cml0ZSgqY3R4LCBkYXRhLCBsZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCBTSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBTSEEyNTZfQ1RYICpjdHgpCit7CisgIG1lbWNweShkaWdlc3QsIGdjcnlfbWRfcmVhZCgqY3R4LCAwKSwgU0hBMjU2X0RJR0VTVF9MRU5HVEgpOworICBnY3J5X21kX2Nsb3NlKCpjdHgpOworfQorCisjZWxpZiBkZWZpbmVkKFVTRV9NQkVEVExTKQorCisjaW5jbHVkZSA8bWJlZHRscy9zaGEyNTYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3R5cGVkZWYgbWJlZHRsc19zaGEyNTZfY29udGV4dCBTSEEyNTZfQ1RYOworCitzdGF0aWMgdm9pZCBTSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjdHgpCit7CisjaWYgIWRlZmluZWQoSEFTX1JFU1VMVF9DT0RFX0JBU0VEX0ZVTkNUSU9OUykKKyAgbWJlZHRsc19zaGEyNTZfc3RhcnRzKGN0eCwgMCk7CisjZWxzZQorICAodm9pZCkgbWJlZHRsc19zaGEyNTZfc3RhcnRzX3JldChjdHgsIDApOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9VcGRhdGUoU0hBMjU2X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworI2lmICFkZWZpbmVkKEhBU19SRVNVTFRfQ09ERV9CQVNFRF9GVU5DVElPTlMpCisgIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZShjdHgsIGRhdGEsIGxlbmd0aCk7CisjZWxzZQorICAodm9pZCkgbWJlZHRsc19zaGEyNTZfdXBkYXRlX3JldChjdHgsIGRhdGEsIGxlbmd0aCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgU0hBMjU2X0NUWCAqY3R4KQoreworI2lmICFkZWZpbmVkKEhBU19SRVNVTFRfQ09ERV9CQVNFRF9GVU5DVElPTlMpCisgIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaChjdHgsIGRpZ2VzdCk7CisjZWxzZQorICAodm9pZCkgbWJlZHRsc19zaGEyNTZfZmluaXNoX3JldChjdHgsIGRpZ2VzdCk7CisjZW5kaWYKK30KKworI2VsaWYgKGRlZmluZWQoX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEKSAmJiBcCisgICAgICAgICAgICAgIChfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTA0MCkpIHx8IFwKKyAgICAgIChkZWZpbmVkKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpICYmIFwKKyAgICAgICAgICAgICAgKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMjAwMDApKQorCisjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkRpZ2VzdC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBDQ19TSEEyNTZfQ1RYIFNIQTI1Nl9DVFg7CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmN0eCkKK3sKKyAgKHZvaWQpIENDX1NIQTI1Nl9Jbml0KGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9VcGRhdGUoU0hBMjU2X0NUWCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICAodm9pZCkgQ0NfU0hBMjU2X1VwZGF0ZShjdHgsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkIFNIQTI1Nl9GaW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIFNIQTI1Nl9DVFggKmN0eCkKK3sKKyAgKHZvaWQpIENDX1NIQTI1Nl9GaW5hbChkaWdlc3QsIGN0eCk7Cit9CisKKyNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKKworI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CisKK3N0cnVjdCBzaGEyNTZfY3R4IHsKKyAgSENSWVBUUFJPViBoQ3J5cHRQcm92OworICBIQ1JZUFRIQVNIIGhIYXNoOworfTsKK3R5cGVkZWYgc3RydWN0IHNoYTI1Nl9jdHggU0hBMjU2X0NUWDsKKworI2lmICFkZWZpbmVkKENBTEdfU0hBXzI1NikKKyNkZWZpbmUgQ0FMR19TSEFfMjU2IDB4MDAwMDgwMGMKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBTSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjdHgpCit7CisgIGlmKENyeXB0QWNxdWlyZUNvbnRleHQoJmN0eC0+aENyeXB0UHJvdiwgTlVMTCwgTlVMTCwgUFJPVl9SU0FfQUVTLAorICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUX1ZFUklGWUNPTlRFWFQgfCBDUllQVF9TSUxFTlQpKSB7CisgICAgQ3J5cHRDcmVhdGVIYXNoKGN0eC0+aENyeXB0UHJvdiwgQ0FMR19TSEFfMjU2LCAwLCAwLCAmY3R4LT5oSGFzaCk7CisgIH0KK30KKworc3RhdGljIHZvaWQgU0hBMjU2X1VwZGF0ZShTSEEyNTZfQ1RYICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisgIENyeXB0SGFzaERhdGEoY3R4LT5oSGFzaCwgKHVuc2lnbmVkIGNoYXIgKikgZGF0YSwgbGVuZ3RoLCAwKTsKK30KKworc3RhdGljIHZvaWQgU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgU0hBMjU2X0NUWCAqY3R4KQoreworICB1bnNpZ25lZCBsb25nIGxlbmd0aCA9IDA7CisKKyAgQ3J5cHRHZXRIYXNoUGFyYW0oY3R4LT5oSGFzaCwgSFBfSEFTSFZBTCwgTlVMTCwgJmxlbmd0aCwgMCk7CisgIGlmKGxlbmd0aCA9PSBTSEEyNTZfRElHRVNUX0xFTkdUSCkKKyAgICBDcnlwdEdldEhhc2hQYXJhbShjdHgtPmhIYXNoLCBIUF9IQVNIVkFMLCBkaWdlc3QsICZsZW5ndGgsIDApOworCisgIGlmKGN0eC0+aEhhc2gpCisgICAgQ3J5cHREZXN0cm95SGFzaChjdHgtPmhIYXNoKTsKKworICBpZihjdHgtPmhDcnlwdFByb3YpCisgICAgQ3J5cHRSZWxlYXNlQ29udGV4dChjdHgtPmhDcnlwdFByb3YsIDApOworfQorCiAjZWxzZQogCiAvKiBXaGVuIG5vIG90aGVyIGNyeXB0byBsaWJyYXJ5IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcyBjb2RlIHNlZ21lbnQgKi8KIAotLyogPT09PT0gc3RhcnQgLSBwdWJsaWMgZG9tYWluIFNIQTI1NiBpbXBsZW1lbnRhdGlvbiA9PT09PSAqLwogLyogVGhpcyBpcyBiYXNlZCBvbiBTSEEyNTYgaW1wbGVtZW50YXRpb24gaW4gTGliVG9tQ3J5cHQgdGhhdCB3YXMgcmVsZWFzZWQgaW50bwogICogcHVibGljIGRvbWFpbiBieSBUb20gU3QgRGVuaXMuICovCiAKQEAgLTg2LDcgKzI4MSw3IEBACiB9IHdoaWxlKDApCiAjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3Qgc2hhMjU2X3N0YXRlIHsKK3N0cnVjdCBzaGEyNTZfc3RhdGUgewogI2lmZGVmIEhBVkVfTE9OR0xPTkcKICAgdW5zaWduZWQgbG9uZyBsb25nIGxlbmd0aDsKICNlbHNlCkBAIC05NCw4ICsyODksMTAgQEAKICNlbmRpZgogICB1bnNpZ25lZCBsb25nIHN0YXRlWzhdLCBjdXJsZW47CiAgIHVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKLX0gU0hBMjU2X0NUWDsKLS8qIHRoZSBLIGFycmF5ICovCit9OwordHlwZWRlZiBzdHJ1Y3Qgc2hhMjU2X3N0YXRlIFNIQTI1Nl9DVFg7CisKKy8qIFRoZSBLIGFycmF5ICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBLWzY0XSA9IHsKICAgMHg0MjhhMmY5OFVMLCAweDcxMzc0NDkxVUwsIDB4YjVjMGZiY2ZVTCwgMHhlOWI1ZGJhNVVMLCAweDM5NTZjMjViVUwsCiAgIDB4NTlmMTExZjFVTCwgMHg5MjNmODJhNFVMLCAweGFiMWM1ZWQ1VUwsIDB4ZDgwN2FhOThVTCwgMHgxMjgzNWIwMVVMLApAQCAtMTExLDYgKzMwOCw3IEBACiAgIDB4NjgyZTZmZjNVTCwgMHg3NDhmODJlZVVMLCAweDc4YTU2MzZmVUwsIDB4ODRjODc4MTRVTCwgMHg4Y2M3MDIwOFVMLAogICAweDkwYmVmZmZhVUwsIDB4YTQ1MDZjZWJVTCwgMHhiZWY5YTNmN1VMLCAweGM2NzE3OGYyVUwKIH07CisKIC8qIFZhcmlvdXMgbG9naWNhbCBmdW5jdGlvbnMgKi8KICNkZWZpbmUgUk9SYyh4LCB5KSBcCiAoKCgoKHVuc2lnbmVkIGxvbmcpKHgpICYgMHhGRkZGRkZGRlVMKSA+PiAodW5zaWduZWQgbG9uZykoKHkpICYgMzEpKSB8IFwKQEAgLTEyMywxMyArMzIxLDE1IEBACiAjZGVmaW5lIFNpZ21hMSh4KSAgIChTKHgsIDYpIF4gUyh4LCAxMSkgXiBTKHgsIDI1KSkKICNkZWZpbmUgR2FtbWEwKHgpICAgKFMoeCwgNykgXiBTKHgsIDE4KSBeIFIoeCwgMykpCiAjZGVmaW5lIEdhbW1hMSh4KSAgIChTKHgsIDE3KSBeIFMoeCwgMTkpIF4gUih4LCAxMCkpCi0vKiBjb21wcmVzcyA1MTItYml0cyAqLworCisvKiBDb21wcmVzcyA1MTItYml0cyAqLwogc3RhdGljIGludCBzaGEyNTZfY29tcHJlc3Moc3RydWN0IHNoYTI1Nl9zdGF0ZSAqbWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAgIHVuc2lnbmVkIGxvbmcgU1s4XSwgV1s2NF07CiAgIGludCBpOwotICAvKiBjb3B5IHN0YXRlIGludG8gUyAqLworCisgIC8qIENvcHkgc3RhdGUgaW50byBTICovCiAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykgewogICAgIFNbaV0gPSBtZC0+c3RhdGVbaV07CiAgIH0KQEAgLTE0MSw2ICszNDEsNyBAQAogICAgIFdbaV0gPSBHYW1tYTEoV1tpIC0gMl0pICsgV1tpIC0gN10gKyBHYW1tYTAoV1tpIC0gMTVdKSArCiAgICAgICBXW2kgLSAxNl07CiAgIH0KKwogICAvKiBDb21wcmVzcyAqLwogI2RlZmluZSBSTkQoYSxiLGMsZCxlLGYsZyxoLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgdW5zaWduZWQgbG9uZyB0MCA9IGggKyBTaWdtYTEoZSkgKyBDaChlLCBmLCBnKSArIEtbaV0gKyBXW2ldOyBcCkBAIC0xNTMsMTIgKzM1NCwxNSBAQAogICAgIHQgPSBTWzddOyBTWzddID0gU1s2XTsgU1s2XSA9IFNbNV07IFNbNV0gPSBTWzRdOwogICAgIFNbNF0gPSBTWzNdOyBTWzNdID0gU1syXTsgU1syXSA9IFNbMV07IFNbMV0gPSBTWzBdOyBTWzBdID0gdDsKICAgfQotICAvKiBmZWVkYmFjayAqLworCisgIC8qIEZlZWRiYWNrICovCiAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykgewogICAgIG1kLT5zdGF0ZVtpXSA9IG1kLT5zdGF0ZVtpXSArIFNbaV07CiAgIH0KKwogICByZXR1cm4gMDsKIH0KKwogLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCBzdGF0ZSAqLwogc3RhdGljIHZvaWQgU0hBMjU2X0luaXQoc3RydWN0IHNoYTI1Nl9zdGF0ZSAqbWQpCiB7CkBAIC0xNzMsNyArMzc3LDggQEAKICAgbWQtPnN0YXRlWzZdID0gMHgxRjgzRDlBQlVMOwogICBtZC0+c3RhdGVbN10gPSAweDVCRTBDRDE5VUw7CiB9Ci0vKioKKworLyoKICAgIFByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnkgdGhvdWdoIHRoZSBoYXNoCiAgICBAcGFyYW0gbWQgICAgIFRoZSBoYXNoIHN0YXRlCiAgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKQEAgLTE4NSw2ICszOTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5sZW4pCiB7CiAgIHVuc2lnbmVkIGxvbmcgbjsKKwogI2RlZmluZSBibG9ja19zaXplIDY0CiAgIGlmKG1kLT5jdXJsZW4gPiBzaXplb2YobWQtPmJ1ZikpCiAgICAgcmV0dXJuIC0xOwpAQCAtMjEwLDkgKzQxNiwxMSBAQAogICAgICAgfQogICAgIH0KICAgfQorCiAgIHJldHVybiAwOwogfQotLyoqCisKKy8qCiAgICBUZXJtaW5hdGUgdGhlIGhhc2ggdG8gZ2V0IHRoZSBkaWdlc3QKICAgIEBwYXJhbSBtZCAgVGhlIGhhc2ggc3RhdGUKICAgIEBwYXJhbSBvdXQgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBoYXNoICgzMiBieXRlcykKQEAgLTIyMiwxMyArNDMwLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2hhMjU2X3N0YXRlICptZCkKIHsKICAgaW50IGk7CisKICAgaWYobWQtPmN1cmxlbiA+PSBzaXplb2YobWQtPmJ1ZikpCiAgICAgcmV0dXJuIC0xOwotICAvKiBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlICovCisKKyAgLyogSW5jcmVhc2UgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSAqLwogICBtZC0+bGVuZ3RoICs9IG1kLT5jdXJsZW4gKiA4OwotICAvKiBhcHBlbmQgdGhlICcxJyBiaXQgKi8KKworICAvKiBBcHBlbmQgdGhlICcxJyBiaXQgKi8KICAgbWQtPmJ1ZlttZC0+Y3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMHg4MDsKLSAgLyogaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgYWJvdmUgNTYgYnl0ZXMgd2UgYXBwZW5kIHplcm9zCisKKyAgLyogSWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgYWJvdmUgNTYgYnl0ZXMgd2UgYXBwZW5kIHplcm9zCiAgICAqIHRoZW4gY29tcHJlc3MuICBUaGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gcGFkZGluZyB6ZXJvcyBhbmQgbGVuZ3RoCiAgICAqIGVuY29kaW5nIGxpa2Ugbm9ybWFsLgogICAgKi8KQEAgLTIzOSwyOSArNDUxLDQ0IEBACiAgICAgc2hhMjU2X2NvbXByZXNzKG1kLCBtZC0+YnVmKTsKICAgICBtZC0+Y3VybGVuID0gMDsKICAgfQotICAvKiBwYWQgdXAgdG8gNTYgYnl0ZXMgb2YgemVyb2VzICovCisKKyAgLyogUGFkIHVwIHRvIDU2IGJ5dGVzIG9mIHplcm9lcyAqLwogICB3aGlsZShtZC0+Y3VybGVuIDwgNTYpIHsKICAgICBtZC0+YnVmW21kLT5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOwogICB9Ci0gIC8qIHN0b3JlIGxlbmd0aCAqLworCisgIC8qIFN0b3JlIGxlbmd0aCAqLwogICBXUEFfUFVUX0JFNjQobWQtPmJ1ZiArIDU2LCBtZC0+bGVuZ3RoKTsKICAgc2hhMjU2X2NvbXByZXNzKG1kLCBtZC0+YnVmKTsKLSAgLyogY29weSBvdXRwdXQgKi8KKworICAvKiBDb3B5IG91dHB1dCAqLwogICBmb3IoaSA9IDA7IGkgPCA4OyBpKyspCiAgICAgV1BBX1BVVF9CRTMyKG91dCArICg0ICogaSksIG1kLT5zdGF0ZVtpXSk7CisKICAgcmV0dXJuIDA7CiB9Ci0vKiA9PT09PSBlbmQgLSBwdWJsaWMgZG9tYWluIFNIQTI1NiBpbXBsZW1lbnRhdGlvbiA9PT09PSAqLwogCi0jZW5kaWYKKyNlbmRpZiAvKiBDUllQVE8gTElCUyAqLwogCi12b2lkIEN1cmxfc2hhMjU2aXQodW5zaWduZWQgY2hhciAqb3V0YnVmZmVyLCAvKiAzMiB1bnNpZ25lZCBjaGFycyAqLwotICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0KQorLyoKKyAqIEN1cmxfc2hhMjU2aXQoKQorICoKKyAqIEdlbmVyYXRlcyBhIFNIQTI1NiBoYXNoIGZvciB0aGUgZ2l2ZW4gaW5wdXQgZGF0YS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIG91dHB1dCBbaW4vb3V0XSAtIFRoZSBvdXRwdXQgYnVmZmVyLgorICogaW5wdXQgIFtpbl0gICAgIC0gVGhlIGlucHV0IGRhdGEuCisgKiBsZW5ndGggW2luXSAgICAgLSBUaGUgaW5wdXQgbGVuZ3RoLgorICovCit2b2lkIEN1cmxfc2hhMjU2aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbGVuZ3RoKQogewogICBTSEEyNTZfQ1RYIGN0eDsKKwogICBTSEEyNTZfSW5pdCgmY3R4KTsKLSAgU0hBMjU2X1VwZGF0ZSgmY3R4LCBpbnB1dCwgY3VybHhfdXp0b3VpKHN0cmxlbigoY2hhciAqKWlucHV0KSkpOwotICBTSEEyNTZfRmluYWwob3V0YnVmZmVyLCAmY3R4KTsKKyAgU0hBMjU2X1VwZGF0ZSgmY3R4LCBpbnB1dCwgY3VybHhfdXp0b3VpKGxlbmd0aCkpOworICBTSEEyNTZfRmluYWwob3V0cHV0LCAmY3R4KTsKIH0KIAogI2VuZGlmIC8qIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhcmUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NoYXJlLmMKaW5kZXggM2Q1MTA4Ni4uYTJkODk2MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2hhcmUuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zaGFyZS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03MCw3ICs3MCw3IEBACiAgIGNhc2UgQ1VSTFNIT1BUX1NIQVJFOgogICAgIC8qIHRoaXMgaXMgYSB0eXBlIHRoaXMgc2hhcmUgd2lsbCBzaGFyZSAqLwogICAgIHR5cGUgPSB2YV9hcmcocGFyYW0sIGludCk7Ci0gICAgc2hhcmUtPnNwZWNpZmllciB8PSAoMTw8dHlwZSk7CisKICAgICBzd2l0Y2godHlwZSkgewogICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfRE5TOgogICAgICAgYnJlYWs7CkBAIC0xMDIsNyArMTAyLDcgQEAKICNlbmRpZgogICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIENVUkxfTE9DS19EQVRBX0NPTk5FQ1Q6ICAgICAvKiBub3Qgc3VwcG9ydGVkICh5ZXQpICovCisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9DT05ORUNUOgogICAgICAgaWYoQ3VybF9jb25uY2FjaGVfaW5pdCgmc2hhcmUtPmNvbm5fY2FjaGUsIDEwMykpCiAgICAgICAgIHJlcyA9IENVUkxTSEVfTk9NRU07CiAgICAgICBicmVhazsKQEAgLTExNiw2ICsxMTYsOCBAQAogICAgIGRlZmF1bHQ6CiAgICAgICByZXMgPSBDVVJMU0hFX0JBRF9PUFRJT047CiAgICAgfQorICAgIGlmKCFyZXMpCisgICAgICBzaGFyZS0+c3BlY2lmaWVyIHw9ICgxPDx0eXBlKTsKICAgICBicmVhazsKIAogICBjYXNlIENVUkxTSE9QVF9VTlNIQVJFOgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2xpc3QuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NsaXN0LmMKaW5kZXggMzkyYjg0ZC4uZDI3ZmJlMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc2xpc3QuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbGlzdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbGlzdC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc2xpc3QuaAppbmRleCBkNzNkYmY2Li43OTliM2MwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbGlzdC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NsaXN0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtYi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmMKaW5kZXggNzZjOTlhMi4uZDQ5M2FkYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmMKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIEJpbGwgTmFnZWwgPHduYWdlbEB0eWNvaW50LmNvbT4sIEV4YWNxIFRlY2hub2xvZ2llcwotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNjQsOCArNjQsNyBAQAogc3RhdGljIENVUkxjb2RlIHNtYl9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKTsKIHN0YXRpYyBDVVJMY29kZSBzbWJfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7Ci1zdGF0aWMgaW50IHNtYl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitzdGF0aWMgaW50IHNtYl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogc3RhdGljIENVUkxjb2RlIHNtYl9wYXJzZV91cmxfcGF0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogCiAvKgpAQCAtNjA3LDYgKzYwNiw3IEBACiB7CiAgIHN0cnVjdCBzbWJfY29ubiAqc21iYyA9ICZjb25uLT5wcm90by5zbWJjOwogICBDVVJMY29kZSByZXN1bHQ7CisgICptc2cgPSBOVUxMOyAvKiBpZiBpdCByZXR1cm5zIGVhcmx5ICovCiAKICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgZGF0YSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyICovCiAgIGlmKCFzbWJjLT5zZW5kX3NpemUgJiYgc21iYy0+dXBsb2FkX3NpemUpIHsKQEAgLTY4Miw3ICs2ODIsOCBAQAogCiAgIHN3aXRjaChzbWJjLT5zdGF0ZSkgewogICBjYXNlIFNNQl9ORUdPVElBVEU6Ci0gICAgaWYoaC0+c3RhdHVzIHx8IHNtYmMtPmdvdCA8IHNpemVvZigqbnJzcCkgKyBzaXplb2Yoc21iYy0+Y2hhbGxlbmdlKSAtIDEpIHsKKyAgICBpZigoc21iYy0+Z290IDwgc2l6ZW9mKCpucnNwKSArIHNpemVvZihzbWJjLT5jaGFsbGVuZ2UpIC0gMSkgfHwKKyAgICAgICBoLT5zdGF0dXMpIHsKICAgICAgIGNvbm5jbG9zZShjb25uLCAiU01COiBuZWdvdGlhdGlvbiBmYWlsZWQiKTsKICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgICAgfQpAQCAtNzg1LDYgKzc4Niw4IEBACiAgIGNhc2UgU01CX09QRU46CiAgICAgaWYoaC0+c3RhdHVzIHx8IHNtYmMtPmdvdCA8IHNpemVvZihzdHJ1Y3Qgc21iX250X2NyZWF0ZV9yZXNwb25zZSkpIHsKICAgICAgIHJlcS0+cmVzdWx0ID0gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOworICAgICAgaWYoaC0+c3RhdHVzID09IHNtYl9zd2FwMzIoU01CX0VSUl9OT0FDQ0VTUykpCisgICAgICAgIHJlcS0+cmVzdWx0ID0gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CiAgICAgICBuZXh0X3N0YXRlID0gU01CX1RSRUVfRElTQ09OTkVDVDsKICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkzNCwxMiArOTM3LDggQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCi1zdGF0aWMgaW50IHNtYl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3N0YXRpYyBpbnQgc21iX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgaWYoIW51bXNvY2tzKQotICAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwotCiAgIHNvY2tzWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CiAgIHJldHVybiBHRVRTT0NLX1JFQURTT0NLKDApIHwgR0VUU09DS19XUklURVNPQ0soMCk7CiB9CkBAIC05NTcsNyArOTU2LDYgQEAKIAogc3RhdGljIENVUkxjb2RlIHNtYl9wYXJzZV91cmxfcGF0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNtYl9yZXF1ZXN0ICpyZXEgPSBkYXRhLT5yZXEucHJvdG9wOwogICBzdHJ1Y3Qgc21iX2Nvbm4gKnNtYmMgPSAmY29ubi0+cHJvdG8uc21iYzsKQEAgLTk2NSw3ICs5NjMsOCBAQAogICBjaGFyICpzbGFzaDsKIAogICAvKiBVUkwgZGVjb2RlIHRoZSBwYXRoICovCi0gIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGRhdGEtPnN0YXRlLnVwLnBhdGgsIDAsICZwYXRoLCBOVUxMLCBUUlVFKTsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZGF0YS0+c3RhdGUudXAucGF0aCwgMCwgJnBhdGgsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9DVFJMKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtYi5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmgKaW5kZXggOWNlNmI1Ni4uMTM2YTg5YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc21iLmgKQEAgLTgsNyArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIEJpbGwgTmFnZWwgPHduYWdlbEB0eWNvaW50LmNvbT4sIEV4YWNxIFRlY2hub2xvZ2llcwotICogQ29weXJpZ2h0IChDKSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDE4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTkzLDcgKzE5Myw2IEBACiAgIHVuc2lnbmVkIGludCBleHRfZmlsZV9hdHRyaWJ1dGVzOwogICBjdXJsX29mZl90IGFsbG9jYXRpb25fc2l6ZTsKICAgY3VybF9vZmZfdCBlbmRfb2ZfZmlsZTsKLQogfSBQQUNLOwogCiBzdHJ1Y3Qgc21iX3JlYWQgewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc210cC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc210cC5jCmluZGV4IDRhMzQ2MmIuLjY4NTUxM2IgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtdHAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbXRwLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI3LDYgKzI3LDkgQEAKICAqIFJGQzQ3NTIgVGhlIEtlcmJlcm9zIFY1ICgiR1NTQVBJIikgU0FTTCBNZWNoYW5pc20KICAqIFJGQzQ5NTQgU01UUCBBdXRoZW50aWNhdGlvbgogICogUkZDNTMyMSBTTVRQIHByb3RvY29sCisgKiBSRkM1ODkwIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBmb3IgQXBwbGljYXRpb25zIChJRE5BKQorICogUkZDNjUzMSBTTVRQIEV4dGVuc2lvbiBmb3IgSW50ZXJuYXRpb25hbGl6ZWQgRW1haWwKKyAqIFJGQzY1MzIgSW50ZXJuYXRpb25hbGl6ZWQgRW1haWwgSGVhZGVycwogICogUkZDNjc0OSBPQXV0aCAyLjAgQXV0aG9yaXphdGlvbiBGcmFtZXdvcmsKICAqIFJGQzgzMTQgVXNlIG9mIFRMUyBmb3IgRW1haWwgU3VibWlzc2lvbiBhbmQgQWNjZXNzCiAgKiBEcmFmdCAgIFNNVFAgVVJMIEludGVyZmFjZSAgIDxkcmFmdC1lYXJoYXJ0LXVybC1zbXRwLTAwLnR4dD4KQEAgLTk1LDEzICs5OCwxNCBAQAogc3RhdGljIENVUkxjb2RlIHNtdHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogc3RhdGljIENVUkxjb2RlIHNtdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLXN0YXRpYyBpbnQgc210cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIGludCBzbXRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9wYXJzZV91cmxfb3B0aW9ucyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogc3RhdGljIENVUkxjb2RlIHNtdHBfcGFyc2VfdXJsX3BhdGgoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIHN0YXRpYyBDVVJMY29kZSBzbXRwX3BhcnNlX2N1c3RvbV9yZXF1ZXN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgc210cF9wYXJzZV9hZGRyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqZnFtYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmFkZHJlc3MsIHN0cnVjdCBob3N0bmFtZSAqaG9zdCk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9wZXJmb3JtX2F1dGgoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICptZWNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXRyZXNwKTsKIHN0YXRpYyBDVVJMY29kZSBzbXRwX2NvbnRpbnVlX2F1dGgoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpyZXNwKTsKQEAgLTE3OSw3ICsxODMsNyBAQAogICBjb25uLT5oYW5kbGVyID0gJkN1cmxfaGFuZGxlcl9zbXRwczsKIAogICAvKiBTZXQgdGhlIGNvbm5lY3Rpb24ncyB1cGdyYWRlZCB0byBUTFMgZmxhZyAqLwotICBjb25uLT50bHNfdXBncmFkZWQgPSBUUlVFOworICBjb25uLT5iaXRzLnRsc191cGdyYWRlZCA9IFRSVUU7CiB9CiAjZWxzZQogI2RlZmluZSBzbXRwX3RvX3NtdHBzKHgpIEN1cmxfbm9wX3N0bXQKQEAgLTM1OSwxMCArMzYzLDggQEAKICAqLwogc3RhdGljIENVUkxjb2RlIHNtdHBfcGVyZm9ybV9zdGFydHRscyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCiAgIC8qIFNlbmQgdGhlIFNUQVJUVExTIGNvbW1hbmQgKi8KLSAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICIlcyIsICJTVEFSVFRMUyIpOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIlNUQVJUVExTIik7CiAKICAgaWYoIXJlc3VsdCkKICAgICBzdGF0ZShjb25uLCBTTVRQX1NUQVJUVExTKTsKQEAgLTM3OCwxMSArMzgwLDEwIEBACiAgKi8KIHN0YXRpYyBDVVJMY29kZSBzbXRwX3BlcmZvcm1fdXBncmFkZV90bHMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IHNtdHBfY29ubiAqc210cGMgPSAmY29ubi0+cHJvdG8uc210cGM7Ci0KICAgLyogU3RhcnQgdGhlIFNTTCBjb25uZWN0aW9uICovCi0gIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoY29ubiwgRklSU1RTT0NLRVQsICZzbXRwYy0+c3NsZG9uZSk7CisgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzbXRwYy0+c3NsZG9uZSk7CiAKICAgaWYoIXJlc3VsdCkgewogICAgIGlmKHNtdHBjLT5zdGF0ZSAhPSBTTVRQX1VQR1JBREVUTFMpCkBAIC00ODUsMTMgKzQ4Niw1NSBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IFNNVFAgKnNtdHAgPSBkYXRhLT5yZXEucHJvdG9wOwogCi0gIC8qIFNlbmQgdGhlIGNvbW1hbmQgKi8KLSAgaWYoc210cC0+cmNwdCkKLSAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHAtPmN1c3RvbSAmJiBzbXRwLT5jdXN0b21bMF0gIT0gJ1wwJyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLT5jdXN0b20gOiAiVlJGWSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLT5yY3B0LT5kYXRhKTsKKyAgaWYoc210cC0+cmNwdCkgeworICAgIC8qIFdlIG5vdGlmeSB0aGUgc2VydmVyIHdlIGFyZSBzZW5kaW5nIFVURi04IGRhdGEgaWYgYSkgaXQgc3VwcG9ydHMgdGhlCisgICAgICAgU01UUFVURjggZXh0ZW5zaW9uIGFuZCBiKSBUaGUgbWFpbGJveCBjb250YWlucyBVVEYtOCBjaGFyYWFjdGVycywgaW4KKyAgICAgICBlaXRoZXIgdGhlIGxvY2FsIGFkZHJlc3Mgb3IgaG9zdCBuYW1lIHBhcnRzLiBUaGlzIGlzIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICB3aGV0aGVyIHRoZSBob3N0IG5hbWUgaXMgZW5jb2RlZCB1c2luZyBJRE4gQUNFICovCisgICAgYm9vbCB1dGY4ID0gRkFMU0U7CisKKyAgICBpZigoIXNtdHAtPmN1c3RvbSkgfHwgKCFzbXRwLT5jdXN0b21bMF0pKSB7CisgICAgICBjaGFyICphZGRyZXNzID0gTlVMTDsKKyAgICAgIHN0cnVjdCBob3N0bmFtZSBob3N0ID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisKKyAgICAgIC8qIFBhcnNlIHRoZSBtYWlsYm94IHRvIHZlcmlmeSBpbnRvIHRoZSBsb2NhbCBhZGRyZXNzIGFuZCBob3N0IG5hbWUKKyAgICAgICAgIHBhcnRzLCBjb252ZXJ0aW5nIHRoZSBob3N0IG5hbWUgdG8gYW4gSUROIEEtbGFiZWwgaWYgbmVjZXNzYXJ5ICovCisgICAgICByZXN1bHQgPSBzbXRwX3BhcnNlX2FkZHJlc3MoY29ubiwgc210cC0+cmNwdC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcywgJmhvc3QpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAvKiBFc3RhYmxpc2ggd2hldGhlciB3ZSBzaG91bGQgcmVwb3J0IFNNVFBVVEY4IHRvIHRoZSBzZXJ2ZXIgZm9yIHRoaXMKKyAgICAgICAgIG1haWxib3ggYXMgcGVyIFJGQy02NTMxIHNlY3QuIDMuMSBwb2ludCA2ICovCisgICAgICB1dGY4ID0gKGNvbm4tPnByb3RvLnNtdHBjLnV0Zjhfc3VwcG9ydGVkKSAmJgorICAgICAgICAgICAgICgoaG9zdC5lbmNhbGxvYykgfHwgKCFDdXJsX2lzX0FTQ0lJX25hbWUoYWRkcmVzcykpIHx8CisgICAgICAgICAgICAgICghQ3VybF9pc19BU0NJSV9uYW1lKGhvc3QubmFtZSkpKTsKKworICAgICAgLyogU2VuZCB0aGUgVlJGWSBjb21tYW5kIChOb3RlOiBUaGUgaG9zdCBuYW1lIHBhcnQgbWF5IGJlIGFic2VudCB3aGVuIHRoZQorICAgICAgICAgaG9zdCBpcyBhIGxvY2FsIHN5c3RlbSkgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiVlJGWSAlcyVzJXMlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QubmFtZSA/ICJAIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0Lm5hbWUgPyBob3N0Lm5hbWUgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOCA/ICIgU01UUFVURjgiIDogIiIpOworCisgICAgICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZob3N0KTsKKyAgICAgIGZyZWUoYWRkcmVzcyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogRXN0YWJsaXNoIHdoZXRoZXIgd2Ugc2hvdWxkIHJlcG9ydCB0aGF0IHdlIHN1cHBvcnQgU01UUFVURjggZm9yIEVYUE4KKyAgICAgICAgIGNvbW1hbmRzIHRvIHRoZSBzZXJ2ZXIgYXMgcGVyIFJGQy02NTMxIHNlY3QuIDMuMSBwb2ludCA2ICovCisgICAgICB1dGY4ID0gKGNvbm4tPnByb3RvLnNtdHBjLnV0Zjhfc3VwcG9ydGVkKSAmJgorICAgICAgICAgICAgICghc3RyY21wKHNtdHAtPmN1c3RvbSwgIkVYUE4iKSk7CisKKyAgICAgIC8qIFNlbmQgdGhlIGN1c3RvbSByZWNpcGllbnQgYmFzZWQgY29tbWFuZCBzdWNoIGFzIHRoZSBFWFBOIGNvbW1hbmQgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMgJXMlcyIsIHNtdHAtPmN1c3RvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+cmNwdC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOCA/ICIgU01UUFVURjgiIDogIiIpOworICAgIH0KKyAgfQogICBlbHNlCisgICAgLyogU2VuZCB0aGUgbm9uLXJlY2lwaWVudCBiYXNlZCBjb21tYW5kIHN1Y2ggYXMgSEVMUCAqLwogICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+Y3VzdG9tICYmIHNtdHAtPmN1c3RvbVswXSAhPSAnXDAnID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHAtPmN1c3RvbSA6ICJIRUxQIik7CkBAIC01MTYsMjIgKzU1OSw4MyBAQAogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKKyAgLyogV2Ugbm90aWZ5IHRoZSBzZXJ2ZXIgd2UgYXJlIHNlbmRpbmcgVVRGLTggZGF0YSBpZiBhKSBpdCBzdXBwb3J0cyB0aGUKKyAgICAgU01UUFVURjggZXh0ZW5zaW9uIGFuZCBiKSBUaGUgbWFpbGJveCBjb250YWlucyBVVEYtOCBjaGFyYWFjdGVycywgaW4KKyAgICAgZWl0aGVyIHRoZSBsb2NhbCBhZGRyZXNzIG9yIGhvc3QgbmFtZSBwYXJ0cy4gVGhpcyBpcyByZWdhcmRsZXNzIG9mCisgICAgIHdoZXRoZXIgdGhlIGhvc3QgbmFtZSBpcyBlbmNvZGVkIHVzaW5nIElETiBBQ0UgKi8KKyAgYm9vbCB1dGY4ID0gRkFMU0U7CisKICAgLyogQ2FsY3VsYXRlIHRoZSBGUk9NIHBhcmFtZXRlciAqLwotICBpZighZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9GUk9NXSkKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9GUk9NXSkgeworICAgIGNoYXIgKmFkZHJlc3MgPSBOVUxMOworICAgIHN0cnVjdCBob3N0bmFtZSBob3N0ID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisKKyAgICAvKiBQYXJzZSB0aGUgRlJPTSBtYWlsYm94IGludG8gdGhlIGxvY2FsIGFkZHJlc3MgYW5kIGhvc3QgbmFtZSBwYXJ0cywKKyAgICAgICBjb252ZXJ0aW5nIHRoZSBob3N0IG5hbWUgdG8gYW4gSUROIEEtbGFiZWwgaWYgbmVjZXNzYXJ5ICovCisgICAgcmVzdWx0ID0gc210cF9wYXJzZV9hZGRyZXNzKGNvbm4sIGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfRlJPTV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyZXNzLCAmaG9zdCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8qIEVzdGFibGlzaCB3aGV0aGVyIHdlIHNob3VsZCByZXBvcnQgU01UUFVURjggdG8gdGhlIHNlcnZlciBmb3IgdGhpcworICAgICAgIG1haWxib3ggYXMgcGVyIFJGQy02NTMxIHNlY3QuIDMuMSBwb2ludCA0IGFuZCBzZWN0LiAzLjQgKi8KKyAgICB1dGY4ID0gKGNvbm4tPnByb3RvLnNtdHBjLnV0Zjhfc3VwcG9ydGVkKSAmJgorICAgICAgICAgICAoKGhvc3QuZW5jYWxsb2MpIHx8ICghQ3VybF9pc19BU0NJSV9uYW1lKGFkZHJlc3MpKSB8fAorICAgICAgICAgICAgKCFDdXJsX2lzX0FTQ0lJX25hbWUoaG9zdC5uYW1lKSkpOworCisgICAgaWYoaG9zdC5uYW1lKSB7CisgICAgICBmcm9tID0gYXByaW50ZigiPCVzQCVzPiIsIGFkZHJlc3MsIGhvc3QubmFtZSk7CisKKyAgICAgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmhvc3QpOworICAgIH0KKyAgICBlbHNlCisgICAgICAvKiBBbiBpbnZhbGlkIG1haWxib3ggd2FzIHByb3ZpZGVkIGJ1dCB3ZSdsbCBzaW1wbHkgbGV0IHRoZSBzZXJ2ZXIgd29ycnkKKyAgICAgICAgIGFib3V0IHRoYXQgYW5kIHJlcGx5IHdpdGggYSA1MDEgZXJyb3IgKi8KKyAgICAgIGZyb20gPSBhcHJpbnRmKCI8JXM+IiwgYWRkcmVzcyk7CisKKyAgICBmcmVlKGFkZHJlc3MpOworICB9CisgIGVsc2UKICAgICAvKiBOdWxsIHJldmVyc2UtcGF0aCwgUkZDLTUzMjEsIHNlY3QuIDMuNi4zICovCiAgICAgZnJvbSA9IHN0cmR1cCgiPD4iKTsKLSAgZWxzZSBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0ZST01dWzBdID09ICc8JykKLSAgICBmcm9tID0gYXByaW50ZigiJXMiLCBkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0ZST01dKTsKLSAgZWxzZQotICAgIGZyb20gPSBhcHJpbnRmKCI8JXM+IiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9GUk9NXSk7CiAKICAgaWYoIWZyb20pCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgLyogQ2FsY3VsYXRlIHRoZSBvcHRpb25hbCBBVVRIIHBhcmFtZXRlciAqLwogICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdICYmIGNvbm4tPnByb3RvLnNtdHBjLnNhc2wuYXV0aHVzZWQpIHsKLSAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdWzBdICE9ICdcMCcpCi0gICAgICBhdXRoID0gYXByaW50ZigiJXMiLCBkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdKTsKKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdWzBdICE9ICdcMCcpIHsKKyAgICAgIGNoYXIgKmFkZHJlc3MgPSBOVUxMOworICAgICAgc3RydWN0IGhvc3RuYW1lIGhvc3QgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKworICAgICAgLyogUGFyc2UgdGhlIEFVVEggbWFpbGJveCBpbnRvIHRoZSBsb2NhbCBhZGRyZXNzIGFuZCBob3N0IG5hbWUgcGFydHMsCisgICAgICAgICBjb252ZXJ0aW5nIHRoZSBob3N0IG5hbWUgdG8gYW4gSUROIEEtbGFiZWwgaWYgbmVjZXNzYXJ5ICovCisgICAgICByZXN1bHQgPSBzbXRwX3BhcnNlX2FkZHJlc3MoY29ubiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9BVVRIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcmVzcywgJmhvc3QpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIGZyZWUoZnJvbSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisKKyAgICAgIC8qIEVzdGFibGlzaCB3aGV0aGVyIHdlIHNob3VsZCByZXBvcnQgU01UUFVURjggdG8gdGhlIHNlcnZlciBmb3IgdGhpcworICAgICAgICAgbWFpbGJveCBhcyBwZXIgUkZDLTY1MzEgc2VjdC4gMy4xIHBvaW50IDQgYW5kIHNlY3QuIDMuNCAqLworICAgICAgaWYoKCF1dGY4KSAmJiAoY29ubi0+cHJvdG8uc210cGMudXRmOF9zdXBwb3J0ZWQpICYmCisgICAgICAgICAoKGhvc3QuZW5jYWxsb2MpIHx8ICghQ3VybF9pc19BU0NJSV9uYW1lKGFkZHJlc3MpKSB8fAorICAgICAgICAgICghQ3VybF9pc19BU0NJSV9uYW1lKGhvc3QubmFtZSkpKSkKKyAgICAgICAgdXRmOCA9IFRSVUU7CisKKyAgICAgIGlmKGhvc3QubmFtZSkgeworICAgICAgICBhdXRoID0gYXByaW50ZigiPCVzQCVzPiIsIGFkZHJlc3MsIGhvc3QubmFtZSk7CisKKyAgICAgICAgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmaG9zdCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIC8qIEFuIGludmFsaWQgbWFpbGJveCB3YXMgcHJvdmlkZWQgYnV0IHdlJ2xsIHNpbXBseSBsZXQgdGhlIHNlcnZlcgorICAgICAgICAgICB3b3JyeSBhYm91dCBpdCAqLworICAgICAgICBhdXRoID0gYXByaW50ZigiPCVzPiIsIGFkZHJlc3MpOworCisgICAgICBmcmVlKGFkZHJlc3MpOworICAgIH0KICAgICBlbHNlCiAgICAgICAvKiBFbXB0eSBBVVRILCBSRkMtMjU1NCwgc2VjdC4gNSAqLwogICAgICAgYXV0aCA9IHN0cmR1cCgiPD4iKTsKQEAgLTU2NSw2ICs2NjksNyBAQAogICAgIGlmKHJlc3VsdCkgewogICAgICAgZnJlZShmcm9tKTsKICAgICAgIGZyZWUoYXV0aCk7CisKICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC01ODcsMTkgKzY5MiwzMyBAQAogICAgIH0KICAgfQogCisgIC8qIElmIHRoZSBtYWlsYm94ZXMgaW4gdGhlIEZST00gYW5kIEFVVEggcGFyYW1ldGVycyBkb24ndCBpbmNsdWRlIGEgVVRGLTgKKyAgICAgYmFzZWQgYWRkcmVzcyB0aGVuIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSByZWNpcGllbnQgbGlzdCBhbmQgY2hlY2sgaWYKKyAgICAgYW55IHRoZXJlIGRvLCBhcyB3ZSBuZWVkIHRvIGNvcnJlY3RseSBpZGVudGlmeSBvdXIgc3VwcG9ydCBmb3IgU01UUFVURjgKKyAgICAgaW4gdGhlIGVudmVsb3BlLCBhcyBwZXIgUkZDLTY1MzEgc2VjdC4gMy40ICovCisgIGlmKGNvbm4tPnByb3RvLnNtdHBjLnV0Zjhfc3VwcG9ydGVkICYmICF1dGY4KSB7CisgICAgc3RydWN0IFNNVFAgKnNtdHAgPSBkYXRhLT5yZXEucHJvdG9wOworICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpyY3B0ID0gc210cC0+cmNwdDsKKworICAgIHdoaWxlKHJjcHQgJiYgIXV0ZjgpIHsKKyAgICAgIC8qIERvZXMgdGhlIGhvc3QgbmFtZSBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzPyAqLworICAgICAgaWYoIUN1cmxfaXNfQVNDSUlfbmFtZShyY3B0LT5kYXRhKSkKKyAgICAgICAgdXRmOCA9IFRSVUU7CisKKyAgICAgIHJjcHQgPSByY3B0LT5uZXh0OworICAgIH0KKyAgfQorCiAgIC8qIFNlbmQgdGhlIE1BSUwgY29tbWFuZCAqLwotICBpZighYXV0aCAmJiAhc2l6ZSkKLSAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJNQUlMIEZST006JXMiLCBmcm9tKTsKLSAgZWxzZSBpZihhdXRoICYmICFzaXplKQotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1BSUwgRlJPTTolcyBBVVRIPSVzIiwgZnJvbSwgYXV0aCk7Ci0gIGVsc2UgaWYoYXV0aCAmJiBzaXplKQotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1BSUwgRlJPTTolcyBBVVRIPSVzIFNJWkU9JXMiLCBmcm9tLCBhdXRoLCBzaXplKTsKLSAgZWxzZQotICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1BSUwgRlJPTTolcyBTSVpFPSVzIiwgZnJvbSwgc2l6ZSk7CisgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICJNQUlMIEZST006JXMlcyVzJXMlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLCAgICAgICAgICAgICAgICAgLyogTWFuZGF0b3J5ICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGggPyAiIEFVVEg9IiA6ICIiLCAvKiBPcHRpb25hbCBvbiBBVVRIIHN1cHBvcnQgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aCA/IGF1dGggOiAiIiwgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID8gIiBTSVpFPSIgOiAiIiwgLyogT3B0aW9uYWwgb24gU0laRSBzdXBwb3J0ICAqLworICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPyBzaXplIDogIiIsICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOCA/ICIgU01UUFVURjgiICAgIC8qIEludGVybmF0aW9uYWxpc2VkIG1haWxib3ggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIiKTsgICAgICAgICAgLyogaW5jbHVkZWQgaW4gb3VyIGVudmVsb3BlICAqLwogCiAgIGZyZWUoZnJvbSk7CiAgIGZyZWUoYXV0aCk7CkBAIC02MjMsMTQgKzc0MiwyOCBAQAogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBTTVRQICpzbXRwID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgY2hhciAqYWRkcmVzcyA9IE5VTEw7CisgIHN0cnVjdCBob3N0bmFtZSBob3N0ID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisKKyAgLyogUGFyc2UgdGhlIHJlY2lwaWVudCBtYWlsYm94IGludG8gdGhlIGxvY2FsIGFkZHJlc3MgYW5kIGhvc3QgbmFtZSBwYXJ0cywKKyAgICAgY29udmVydGluZyB0aGUgaG9zdCBuYW1lIHRvIGFuIElETiBBLWxhYmVsIGlmIG5lY2Vzc2FyeSAqLworICByZXN1bHQgPSBzbXRwX3BhcnNlX2FkZHJlc3MoY29ubiwgc210cC0+cmNwdC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyZXNzLCAmaG9zdCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OwogCiAgIC8qIFNlbmQgdGhlIFJDUFQgVE8gY29tbWFuZCAqLwotICBpZihzbXRwLT5yY3B0LT5kYXRhWzBdID09ICc8JykKLSAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIlJDUFQgVE86JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+cmNwdC0+ZGF0YSk7CisgIGlmKGhvc3QubmFtZSkKKyAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIlJDUFQgVE86PCVzQCVzPiIsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0Lm5hbWUpOwogICBlbHNlCi0gICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICJSQ1BUIFRPOjwlcz4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC0+cmNwdC0+ZGF0YSk7CisgICAgLyogQW4gaW52YWxpZCBtYWlsYm94IHdhcyBwcm92aWRlZCBidXQgd2UnbGwgc2ltcGx5IGxldCB0aGUgc2VydmVyIHdvcnJ5CisgICAgICAgYWJvdXQgdGhhdCBhbmQgcmVwbHkgd2l0aCBhIDUwMSBlcnJvciAqLworICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiUkNQVCBUTzo8JXM+IiwgYWRkcmVzcyk7CisKKyAgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmaG9zdCk7CisgIGZyZWUoYWRkcmVzcyk7CisKICAgaWYoIXJlc3VsdCkKICAgICBzdGF0ZShjb25uLCBTTVRQX1JDUFQpOwogCkBAIC02NDUsMTAgKzc3OCw4IEBACiAgKi8KIHN0YXRpYyBDVVJMY29kZSBzbXRwX3BlcmZvcm1fcXVpdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCiAgIC8qIFNlbmQgdGhlIFFVSVQgY29tbWFuZCAqLwotICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIlFVSVQiKTsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICIlcyIsICJRVUlUIik7CiAKICAgaWYoIXJlc3VsdCkKICAgICBzdGF0ZShjb25uLCBTTVRQX1FVSVQpOwpAQCAtNzIwLDcgKzg1MSw3IEBACiAgICAgICByZXN1bHQgPSBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKICAgICB9CiAgIH0KLSAgZWxzZSB7CisgIGVsc2UgaWYobGVuID49IDQpIHsKICAgICBsaW5lICs9IDQ7CiAgICAgbGVuIC09IDQ7CiAKQEAgLTczMiw2ICs4NjMsMTAgQEAKICAgICBlbHNlIGlmKGxlbiA+PSA0ICYmICFtZW1jbXAobGluZSwgIlNJWkUiLCA0KSkKICAgICAgIHNtdHBjLT5zaXplX3N1cHBvcnRlZCA9IFRSVUU7CiAKKyAgICAvKiBEb2VzIHRoZSBzZXJ2ZXIgc3VwcG9ydCB0aGUgVVRGLTggY2FwYWJpbGl0eT8gKi8KKyAgICBlbHNlIGlmKGxlbiA+PSA4ICYmICFtZW1jbXAobGluZSwgIlNNVFBVVEY4IiwgOCkpCisgICAgICBzbXRwYy0+dXRmOF9zdXBwb3J0ZWQgPSBUUlVFOworCiAgICAgLyogRG9lcyB0aGUgc2VydmVyIHN1cHBvcnQgYXV0aGVudGljYXRpb24/ICovCiAgICAgZWxzZSBpZihsZW4gPj0gNSAmJiAhbWVtY21wKGxpbmUsICJBVVRIICIsIDUpKSB7CiAgICAgICBzbXRwYy0+YXV0aF9zdXBwb3J0ZWQgPSBUUlVFOwpAQCAtNzkxLDYgKzkyNiwxMCBAQAogICAgICAgICByZXN1bHQgPSBzbXRwX3BlcmZvcm1fYXV0aGVudGljYXRpb24oY29ubik7CiAgICAgfQogICB9CisgIGVsc2UgeworICAgIGZhaWxmKGRhdGEsICJVbmV4cGVjdGVkbHkgc2hvcnQgRUhMTyByZXNwb25zZSIpOworICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKKyAgfQogCiAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05MTcsMjUgKzEwNTYsNTMgQEAKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgU01UUCAqc210cCA9IGRhdGEtPnJlcS5wcm90b3A7CisgIGJvb2wgaXNfc210cF9lcnIgPSBGQUxTRTsKKyAgYm9vbCBpc19zbXRwX2Jsb2NraW5nX2VyciA9IEZBTFNFOwogCiAgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KIAotICBpZihzbXRwY29kZS8xMDAgIT0gMikgewotICAgIGZhaWxmKGRhdGEsICJSQ1BUIGZhaWxlZDogJWQiLCBzbXRwY29kZSk7Ci0gICAgcmVzdWx0ID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgaXNfc210cF9lcnIgPSAoc210cGNvZGUvMTAwICE9IDIpID8gVFJVRSA6IEZBTFNFOworCisgIC8qIElmIHRoZXJlJ3MgbXVsdGlwbGUgUkNQVCBUTyB0byBiZSBpc3N1ZWQsIGl0J3MgcG9zc2libGUgdG8gaWdub3JlIGVycm9ycworICAgICBhbmQgcHJvY2VlZCB3aXRoIG9ubHkgdGhlIHZhbGlkIGFkZHJlc3Nlcy4gKi8KKyAgaXNfc210cF9ibG9ja2luZ19lcnIgPQorICAgIChpc19zbXRwX2VyciAmJiAhZGF0YS0+c2V0Lm1haWxfcmNwdF9hbGxvd2ZhaWxzKSA/IFRSVUUgOiBGQUxTRTsKKworICBpZihpc19zbXRwX2VycikgeworICAgIC8qIFJlbWVtYmVyaW5nIHRoZSBsYXN0IGZhaWx1cmUgd2hpY2ggd2UgY2FuIHJlcG9ydCBpZiBhbGwgIlJDUFQgVE8iIGhhdmUKKyAgICAgICBmYWlsZWQgYW5kIHdlIGNhbm5vdCBwcm9jZWVkLiAqLworICAgIHNtdHAtPnJjcHRfbGFzdF9lcnJvciA9IHNtdHBjb2RlOworCisgICAgaWYoaXNfc210cF9ibG9ja2luZ19lcnIpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJSQ1BUIGZhaWxlZDogJWQiLCBzbXRwY29kZSk7CisgICAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIH0KICAgfQogICBlbHNlIHsKKyAgICAvKiBTb21lIFJDUFQgVE8gY29tbWFuZHMgaGF2ZSBzdWNjZWVkZWQuICovCisgICAgc210cC0+cmNwdF9oYWRfb2sgPSBUUlVFOworICB9CisKKyAgaWYoIWlzX3NtdHBfYmxvY2tpbmdfZXJyKSB7CiAgICAgc210cC0+cmNwdCA9IHNtdHAtPnJjcHQtPm5leHQ7CiAKICAgICBpZihzbXRwLT5yY3B0KQogICAgICAgLyogU2VuZCB0aGUgbmV4dCBSQ1BUIFRPIGNvbW1hbmQgKi8KICAgICAgIHJlc3VsdCA9IHNtdHBfcGVyZm9ybV9yY3B0X3RvKGNvbm4pOwogICAgIGVsc2UgewotICAgICAgLyogU2VuZCB0aGUgREFUQSBjb21tYW5kICovCi0gICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIkRBVEEiKTsKKyAgICAgIC8qIFdlIHdlcmVuJ3QgYWJsZSB0byBpc3N1ZSBhIHN1Y2Nlc3NmdWwgUkNQVCBUTyBjb21tYW5kIHdoaWxlIGdvaW5nCisgICAgICAgICBvdmVyIHJlY2lwaWVudHMgKHBvdGVudGlhbGx5IG11bHRpcGxlKS4gU2VuZGluZyBiYWNrIGxhc3QgZXJyb3IuICovCisgICAgICBpZighc210cC0+cmNwdF9oYWRfb2spIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlJDUFQgZmFpbGVkOiAlZCAobGFzdCBlcnJvcikiLCBzbXRwLT5yY3B0X2xhc3RfZXJyb3IpOworICAgICAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIFNlbmQgdGhlIERBVEEgY29tbWFuZCAqLworICAgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgIkRBVEEiKTsKIAotICAgICAgaWYoIXJlc3VsdCkKLSAgICAgICAgc3RhdGUoY29ubiwgU01UUF9EQVRBKTsKKyAgICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgICBzdGF0ZShjb25uLCBTTVRQX0RBVEEpOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC0xMTE5LDEwICsxMjg2LDkgQEAKIH0KIAogLyogRm9yIHRoZSBTTVRQICJwcm90b2NvbCBjb25uZWN0IiBhbmQgImRvaW5nIiBwaGFzZXMgb25seSAqLwotc3RhdGljIGludCBzbXRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3N0YXRpYyBpbnQgc210cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MpCiB7Ci0gIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLnNtdHBjLnBwLCBzb2NrcywgbnVtc29ja3MpOworICByZXR1cm4gQ3VybF9wcF9nZXRzb2NrKCZjb25uLT5wcm90by5zbXRwYy5wcCwgc29ja3MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyOTAsNiArMTQ1NiwxMiBAQAogICAvKiBTdG9yZSB0aGUgZmlyc3QgcmVjaXBpZW50IChvciBOVUxMIGlmIG5vdCBzcGVjaWZpZWQpICovCiAgIHNtdHAtPnJjcHQgPSBkYXRhLT5zZXQubWFpbF9yY3B0OwogCisgIC8qIFRyYWNrIG9mIHdoZXRoZXIgd2UndmUgc3VjY2Vzc2Z1bGx5IHNlbnQgYXQgbGVhc3Qgb25lIFJDUFQgVE8gY29tbWFuZCAqLworICBzbXRwLT5yY3B0X2hhZF9vayA9IEZBTFNFOworCisgIC8qIFRyYWNrIG9mIHRoZSBsYXN0IGVycm9yIHdlJ3ZlIHJlY2VpdmVkIGJ5IHNlbmRpbmcgUkNQVCBUTyBjb21tYW5kICovCisgIHNtdHAtPnJjcHRfbGFzdF9lcnJvciA9IDA7CisKICAgLyogSW5pdGlhbCBkYXRhIGNoYXJhY3RlciBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGxpbmU6IGl0IGlzIGltcGxpY2l0bHkKICAgICAgcHJlY2VkZWQgYnkgYSB2aXJ0dWFsIENSTEYuICovCiAgIHNtdHAtPnRyYWlsaW5nX2NybGYgPSBUUlVFOwpAQCAtMTQ0NSw3ICsxNjE3LDcgQEAKICAgQ1VSTGNvZGUgcmVzdWx0OwogCiAgIC8qIENsZWFyIHRoZSBUTFMgdXBncmFkZWQgZmxhZyAqLwotICBjb25uLT50bHNfdXBncmFkZWQgPSBGQUxTRTsKKyAgY29ubi0+Yml0cy50bHNfdXBncmFkZWQgPSBGQUxTRTsKIAogICAvKiBJbml0aWFsaXNlIHRoZSBTTVRQIGxheWVyICovCiAgIHJlc3VsdCA9IHNtdHBfaW5pdChjb25uKTsKQEAgLTE1MTcsNyArMTY4OSw4IEBACiAgIH0KIAogICAvKiBVUkwgZGVjb2RlIHRoZSBwYXRoIGFuZCB1c2UgaXQgYXMgdGhlIGRvbWFpbiBpbiBvdXIgRUhMTyAqLwotICByZXR1cm4gQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgcGF0aCwgMCwgJnNtdHBjLT5kb21haW4sIE5VTEwsIFRSVUUpOworICByZXR1cm4gQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgcGF0aCwgMCwgJnNtdHBjLT5kb21haW4sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfQ1RSTCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTUzNSw3ICsxNzA4LDc3IEBACiAKICAgLyogVVJMIGRlY29kZSB0aGUgY3VzdG9tIHJlcXVlc3QgKi8KICAgaWYoY3VzdG9tKQotICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGN1c3RvbSwgMCwgJnNtdHAtPmN1c3RvbSwgTlVMTCwgVFJVRSk7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgY3VzdG9tLCAwLCAmc210cC0+Y3VzdG9tLCBOVUxMLCBSRUpFQ1RfQ1RSTCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc210cF9wYXJzZV9hZGRyZXNzKCkKKyAqCisgKiBQYXJzZSB0aGUgZnVsbHkgcXVhbGlmaWVkIG1haWxib3ggYWRkcmVzcyBpbnRvIGEgbG9jYWwgYWRkcmVzcyBwYXJ0IGFuZCB0aGUKKyAqIGhvc3QgbmFtZSwgY29udmVydGluZyB0aGUgaG9zdCBuYW1lIHRvIGFuIElETiBBLWxhYmVsLCBhcyBwZXIgUkZDLTU4OTAsIGlmCisgKiBuZWNlc3NhcnkuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBjb25uICBbaW5dICAgICAgICAgICAgICAtIFRoZSBjb25uZWN0aW9uIGhhbmRsZS4KKyAqIGZxbWEgIFtpbl0gICAgICAgICAgICAgIC0gVGhlIGZ1bGx5IHF1YWxpZmllZCBtYWlsYm94IGFkZHJlc3MgKHdoaWNoIG1heSBvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBtYXkgbm90IGNvbnRhaW4gVVRGLTggY2hhcmFjdGVycykuCisgKiBhZGRyZXNzICAgICAgICBbaW4vb3V0XSAtIEEgbmV3IGFsbG9jYXRlZCBidWZmZXIgd2hpY2ggaG9sZHMgdGhlIGxvY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgcGFydCBvZiB0aGUgbWFpbGJveC4gVGhpcyBidWZmZXIgbXVzdCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlJ2VkIGJ5IHRoZSBjYWxsZXIuCisgKiBob3N0ICAgICAgICAgICBbaW4vb3V0XSAtIFRoZSBob3N0IG5hbWUgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIG9yaWdpbmFsLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3B0aW9uYWxseSBlbmNvZGVkLCBob3N0IG5hbWUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoKSBtdXN0IGJlIGNhbGxlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNlIHRoZSBjYWxsZXIgaGFzIGZpbmlzaGVkIHdpdGggdGhlIHN0cnVjdHVyZS4KKyAqCisgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCisgKgorICogTm90ZXM6CisgKgorICogU2hvdWxkIGEgVVRGLTggaG9zdCBuYW1lIHJlcXVpcmUgY29udmVyc2lvbiB0byBJRE4gQUNFIGFuZCB3ZSBjYW5ub3QgaG9ub3IKKyAqIHRoYXQgY29udmVyc2lvbiB0aGVuIHdlIHNoYWxsIHJldHVybiBzdWNjZXNzLiBUaGlzIGFsbG93IHRoZSBjYWxsZXIgdG8gc2VuZAorICogdGhlIGRhdGEgdG8gdGhlIHNlcnZlciBhcyBhIFUtbGFiZWwgKGFzIHBlciBSRkMtNjUzMSBzZWN0LiAzLjIpLgorICoKKyAqIElmIGFuIG1haWxib3ggJ0AnIHNlcGFyYXRvciBjYW5ub3QgYmUgbG9jYXRlZCB0aGVuIHRoZSBtYWlsYm94IGlzIGNvbnNpZGVyZWQKKyAqIHRvIGJlIGVpdGhlciBhIGxvY2FsIG1haWxib3ggb3IgYW4gaW52YWxpZCBtYWlsYm94IChkZXBlbmRpbmcgb24gd2hhdCB0aGUKKyAqIGNhbGxpbmcgZnVuY3Rpb24gZGVlbXMgaXQgdG8gYmUpIHRoZW4gdGhlIGlucHV0IHdpbGwgc2ltcGx5IGJlIHJldHVybmVkIGluCisgKiB0aGUgYWRkcmVzcyBwYXJ0IHdpdGggdGhlIGhvc3QgbmFtZSBiZWluZyBOVUxMLgorICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9wYXJzZV9hZGRyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqZnFtYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmFkZHJlc3MsIHN0cnVjdCBob3N0bmFtZSAqaG9zdCkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHNpemVfdCBsZW5ndGg7CisKKyAgLyogRHVwbGljYXRlIHRoZSBmdWxseSBxdWFsaWZpZWQgZW1haWwgYWRkcmVzcyBzbyB3ZSBjYW4gbWFuaXB1bGF0ZSBpdCwKKyAgICAgZW5zdXJpbmcgaXQgZG9lc24ndCBjb250YWluIHRoZSBkZWxpbWl0ZXJzIGlmIHNwZWNpZmllZCAqLworICBjaGFyICpkdXAgPSBzdHJkdXAoZnFtYVswXSA9PSAnPCcgPyBmcW1hICsgMSAgOiBmcW1hKTsKKyAgaWYoIWR1cCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBsZW5ndGggPSBzdHJsZW4oZHVwKTsKKyAgaWYoZHVwW2xlbmd0aCAtIDFdID09ICc+JykKKyAgICBkdXBbbGVuZ3RoIC0gMV0gPSAnXDAnOworCisgIC8qIEV4dHJhY3QgdGhlIGhvc3QgbmFtZSBmcm9tIHRoZSBhZGRyZXNzIChpZiB3ZSBjYW4pICovCisgIGhvc3QtPm5hbWUgPSBzdHJwYnJrKGR1cCwgIkAiKTsKKyAgaWYoaG9zdC0+bmFtZSkgeworICAgICpob3N0LT5uYW1lID0gJ1wwJzsKKyAgICBob3N0LT5uYW1lID0gaG9zdC0+bmFtZSArIDE7CisKKyAgICAvKiBBdHRlbXB0IHRvIGNvbnZlcnQgdGhlIGhvc3QgbmFtZSB0byBJRE4gQUNFICovCisgICAgKHZvaWQpIEN1cmxfaWRuY29udmVydF9ob3N0bmFtZShjb25uLCBob3N0KTsKKworICAgIC8qIElmIEN1cmxfaWRuY29udmVydF9ob3N0bmFtZSgpIGZhaWxzIHRoZW4gd2Ugc2hhbGwgYXR0ZW1wdCB0byBjb250aW51ZQorICAgICAgIGFuZCBzZW5kIHRoZSBob3N0IG5hbWUgdXNpbmcgVVRGLTggcmF0aGVyIHRoYW4gYXMgNy1iaXQgQUNFICh3aGljaCBpcworICAgICAgIG91ciBwcmVmZXJlbmNlKSAqLworICB9CisKKyAgLyogRXh0cmFjdCB0aGUgbG9jYWwgYWRkcmVzcyBmcm9tIHRoZSBtYWlsYm94ICovCisgICphZGRyZXNzID0gZHVwOwogCiAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbXRwLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zbXRwLmgKaW5kZXggYjY3MzQwYS4uMTY0YTE3NSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc210cC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NtdHAuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTUsNiArNTUsOSBAQAogICBjdXJsX3BwX3RyYW5zZmVyIHRyYW5zZmVyOwogICBjaGFyICpjdXN0b207ICAgICAgICAgICAgLyogQ3VzdG9tIFJlcXVlc3QgKi8KICAgc3RydWN0IGN1cmxfc2xpc3QgKnJjcHQ7IC8qIFJlY2lwaWVudCBsaXN0ICovCisgIGJvb2wgcmNwdF9oYWRfb2s7ICAgICAgICAvKiBXaGV0aGVyIGFueSBvZiBSQ1BUIFRPIGNvbW1hbmRzIChkZXBlbmRzIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCBudW1iZXIgb2YgcmVjaXBpZW50cykgc3VjY2VlZGVkIHNvIGZhciAqLworICBpbnQgcmNwdF9sYXN0X2Vycm9yOyAgICAgLyogVGhlIGxhc3QgZXJyb3IgcmVjZWl2ZWQgZm9yIFJDUFQgVE8gY29tbWFuZCAqLwogICBzaXplX3QgZW9iOyAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBFT0IgKEVuZCBPZiBCb2R5KSB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gcmVjZWl2ZWQgc28gZmFyICovCiAgIGJvb2wgdHJhaWxpbmdfY3JsZjsgICAgICAvKiBTcGVjaWZpZXMgaWYgdGhlIHRhaWxpbmcgQ1JMRiBpcyBwcmVzZW50ICovCkBAIC03MSw2ICs3NCw4IEBACiAgIGJvb2wgdGxzX3N1cHBvcnRlZDsgICAgICAvKiBTdGFydFRMUyBjYXBhYmlsaXR5IHN1cHBvcnRlZCBieSBzZXJ2ZXIgKi8KICAgYm9vbCBzaXplX3N1cHBvcnRlZDsgICAgIC8qIElmIHNlcnZlciBzdXBwb3J0cyBTSVpFIGV4dGVuc2lvbiBhY2NvcmRpbmcgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQyAxODcwICovCisgIGJvb2wgdXRmOF9zdXBwb3J0ZWQ7ICAgICAvKiBJZiBzZXJ2ZXIgc3VwcG9ydHMgU01UUFVURjggZXh0ZW5zaW9uIGFjY29yZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gUkZDIDY1MzEgKi8KICAgYm9vbCBhdXRoX3N1cHBvcnRlZDsgICAgIC8qIEFVVEggY2FwYWJpbGl0eSBzdXBwb3J0ZWQgYnkgc2VydmVyICovCiB9OwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2NrYWRkci5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2FkZHIuaAppbmRleCBkYjE0NjgwLi5iMDM3ZWUwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2NrYWRkci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2thZGRyLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tldHBhaXIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tldHBhaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWMwZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2V0cGFpci5jCkBAIC0wLDAgKzEsMTIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKyNpbmNsdWRlICJzb2NrZXRwYWlyLmgiCisKKyNpZm5kZWYgSEFWRV9TT0NLRVRQQUlSCisjaWZkZWYgV0lOMzIKKy8qCisgKiBUaGlzIGlzIGEgc29ja2V0cGFpcigpIGltcGxlbWVudGF0aW9uIGZvciBXaW5kb3dzLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxpby5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+IC8qIElQUFJPVE9fVENQICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZm5kZWYgSU5BRERSX0xPT1BCQUNLCisjZGVmaW5lIElOQUREUl9MT09QQkFDSyAweDdmMDAwMDAxCisjZW5kaWYgLyogIUlOQUREUl9MT09QQkFDSyAqLworI2VuZGlmIC8qICFXSU4zMiAqLworCisvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK2ludCBDdXJsX3NvY2tldHBhaXIoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2Nrc1syXSkKK3sKKyAgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBpbmFkZHI7CisgICAgc3RydWN0IHNvY2thZGRyIGFkZHI7CisgIH0gYTsKKyAgY3VybF9zb2NrZXRfdCBsaXN0ZW5lcjsKKyAgY3VybF9zb2NrbGVuX3QgYWRkcmxlbiA9IHNpemVvZihhLmluYWRkcik7CisgIGludCByZXVzZSA9IDE7CisgIGNoYXIgZGF0YVsyXVsxMl07CisgIHNzaXplX3QgZGxlbjsKKyAgKHZvaWQpZG9tYWluOworICAodm9pZCl0eXBlOworICAodm9pZClwcm90b2NvbDsKKworICBsaXN0ZW5lciA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOworICBpZihsaXN0ZW5lciA9PSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgcmV0dXJuIC0xOworCisgIG1lbXNldCgmYSwgMCwgc2l6ZW9mKGEpKTsKKyAgYS5pbmFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIGEuaW5hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisgIGEuaW5hZGRyLnNpbl9wb3J0ID0gMDsKKworICBzb2Nrc1swXSA9IHNvY2tzWzFdID0gQ1VSTF9TT0NLRVRfQkFEOworCisgIGlmKHNldHNvY2tvcHQobGlzdGVuZXIsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKKyAgICAgICAgICAgICAgICAoY2hhciAqKSZyZXVzZSwgKGN1cmxfc29ja2xlbl90KXNpemVvZihyZXVzZSkpID09IC0xKQorICAgIGdvdG8gZXJyb3I7CisgIGlmKGJpbmQobGlzdGVuZXIsICZhLmFkZHIsIHNpemVvZihhLmluYWRkcikpID09IC0xKQorICAgIGdvdG8gZXJyb3I7CisgIGlmKGdldHNvY2tuYW1lKGxpc3RlbmVyLCAmYS5hZGRyLCAmYWRkcmxlbikgPT0gLTEpCisgICAgZ290byBlcnJvcjsKKyAgaWYobGlzdGVuKGxpc3RlbmVyLCAxKSA9PSAtMSkKKyAgICBnb3RvIGVycm9yOworICBzb2Nrc1swXSA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgIGlmKHNvY2tzWzBdID09IENVUkxfU09DS0VUX0JBRCkKKyAgICBnb3RvIGVycm9yOworICBpZihjb25uZWN0KHNvY2tzWzBdLCAmYS5hZGRyLCBzaXplb2YoYS5pbmFkZHIpKSA9PSAtMSkKKyAgICBnb3RvIGVycm9yOworICBzb2Nrc1sxXSA9IGFjY2VwdChsaXN0ZW5lciwgTlVMTCwgTlVMTCk7CisgIGlmKHNvY2tzWzFdID09IENVUkxfU09DS0VUX0JBRCkKKyAgICBnb3RvIGVycm9yOworCisgIC8qIHZlcmlmeSB0aGF0IG5vdGhpbmcgZWxzZSBjb25uZWN0ZWQgKi8KKyAgbXNucHJpbnRmKGRhdGFbMF0sIHNpemVvZihkYXRhWzBdKSwgIiVwIiwgc29ja3MpOworICBkbGVuID0gc3RybGVuKGRhdGFbMF0pOworICBpZihzd3JpdGUoc29ja3NbMF0sIGRhdGFbMF0sIGRsZW4pICE9IGRsZW4pCisgICAgZ290byBlcnJvcjsKKyAgaWYoc3JlYWQoc29ja3NbMV0sIGRhdGFbMV0sIHNpemVvZihkYXRhWzFdKSkgIT0gZGxlbikKKyAgICBnb3RvIGVycm9yOworICBpZihtZW1jbXAoZGF0YVswXSwgZGF0YVsxXSwgZGxlbikpCisgICAgZ290byBlcnJvcjsKKworICBzY2xvc2UobGlzdGVuZXIpOworICByZXR1cm4gMDsKKworICBlcnJvcjoKKyAgc2Nsb3NlKGxpc3RlbmVyKTsKKyAgc2Nsb3NlKHNvY2tzWzBdKTsKKyAgc2Nsb3NlKHNvY2tzWzFdKTsKKyAgcmV0dXJuIC0xOworfQorCisjZW5kaWYgLyogISBIQVZFX1NPQ0tFVFBBSVIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tldHBhaXIuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tldHBhaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTlmYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja2V0cGFpci5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfU09DS0VUUEFJUl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1NPQ0tFVFBBSVJfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisjaWZuZGVmIEhBVkVfU09DS0VUUEFJUgoraW50IEN1cmxfc29ja2V0cGFpcihpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tzWzJdKTsKKyNlbHNlCisjZGVmaW5lIEN1cmxfc29ja2V0cGFpcihhLGIsYyxkKSBzb2NrZXRwYWlyKGEsYixjLGQpCisjZW5kaWYKKworLyogRGVmaW5lZCBoZXJlIHRvIGFsbG93IHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3MgdG8gZGlzYWJsZSBpdCBjb21wbGV0ZWx5ICovCisjZGVmaW5lIFVTRV9TT0NLRVRQQUlSIDEKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NPQ0tFVFBBSVJfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3MuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzLmMKaW5kZXggZDhmY2MzYi4uYjIyMTVmZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3MuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrcy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNywxNiArMzcsMTkgQEAKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAidGltZXZhbC5oIgogI2luY2x1ZGUgInNvY2tzLmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIiAvKiBmb3IgZ2V0c29jayBtYWNyb3MgKi8KIAotLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCiAvKgogICogSGVscGVyIHJlYWQtZnJvbS1zb2NrZXQgZnVuY3Rpb25zLiBEb2VzIHRoZSBzYW1lIGFzIEN1cmxfcmVhZCgpIGJ1dCBpdAogICogYmxvY2tzIHVudGlsIGFsbCBieXRlcyBhbW91bnQgb2YgYnVmZmVyc2l6ZSB3aWxsIGJlIHJlYWQuIE5vIG1vcmUsIG5vIGxlc3MuCiAgKgotICogVGhpcyBpcyBTVFVQSUQgQkxPQ0tJTkcgYmVoYXZpb3VyIHdoaWNoIHdlIGZyb3duIHVwb24sIGJ1dCByaWdodCBub3cgdGhpcwotICogaXMgd2hhdCB3ZSBoYXZlLi4uCisgKiBUaGlzIGlzIFNUVVBJRCBCTE9DS0lORyBiZWhhdmlvci4gT25seSB1c2VkIGJ5IHRoZSBTT0NLUyBHU1NBUEkgZnVuY3Rpb25zLgogICovCiBpbnQgQ3VybF9ibG9ja3JlYWRfYWxsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgLyogY29ubmVjdGlvbiBkYXRhICovCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLCAgICAgLyogcmVhZCBmcm9tIHRoaXMgc29ja2V0ICovCkBAIC01OSwxMyArNjIsMTUgQEAKICAgaW50IHJlc3VsdDsKICAgKm4gPSAwOwogICBmb3IoOzspIHsKLSAgICB0aW1lZGlmZl90IHRpbWVsZWZ0ID0gQ3VybF90aW1lbGVmdChjb25uLT5kYXRhLCBOVUxMLCBUUlVFKTsKLSAgICBpZih0aW1lbGVmdCA8IDApIHsKKyAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGNvbm4tPmRhdGEsIE5VTEwsIFRSVUUpOworICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiB3ZSBhbHJlYWR5IGdvdCB0aGUgdGltZW91dCAqLwogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmKFNPQ0tFVF9SRUFEQUJMRShzb2NrZmQsIHRpbWVsZWZ0KSA8PSAwKSB7CisgICAgaWYoIXRpbWVvdXRfbXMpCisgICAgICB0aW1lb3V0X21zID0gVElNRURJRkZfVF9NQVg7CisgICAgaWYoU09DS0VUX1JFQURBQkxFKHNvY2tmZCwgdGltZW91dF9tcykgPD0gMCkgewogICAgICAgcmVzdWx0ID0gfkNVUkxFX09LOwogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTIsNiArOTcsODEgQEAKICAgfQogICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmCisKKyNpZm5kZWYgREVCVUdCVUlMRAorI2RlZmluZSBzeHN0YXRlKHgseSkgc29ja3NzdGF0ZSh4LHkpCisjZWxzZQorI2RlZmluZSBzeHN0YXRlKHgseSkgc29ja3NzdGF0ZSh4LHksIF9fTElORV9fKQorI2VuZGlmCisKKworLyogYWx3YXlzIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSBzdGF0ZSwgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyICovCitzdGF0aWMgdm9pZCBzb2Nrc3N0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgZW51bSBjb25uZWN0X3Qgc3RhdGUKKyNpZmRlZiBERUJVR0JVSUxECisgICAgICAgICAgICAgICAgICAgICAgICwgaW50IGxpbmVubworI2VuZGlmCispCit7CisgIGVudW0gY29ubmVjdF90IG9sZHN0YXRlID0gY29ubi0+Y25uY3Quc3RhdGU7CisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAvKiBzeW5jZWQgd2l0aCB0aGUgc3RhdGUgbGlzdCBpbiB1cmxkYXRhLmggKi8KKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzdGF0ZW5hbWVbXSA9IHsKKyAgICAiSU5JVCIsCisgICAgIlNPQ0tTX0lOSVQiLAorICAgICJTT0NLU19TRU5EIiwKKyAgICAiU09DS1NfUkVBRF9JTklUIiwKKyAgICAiU09DS1NfUkVBRCIsCisgICAgIkdTU0FQSV9JTklUIiwKKyAgICAiQVVUSF9JTklUIiwKKyAgICAiQVVUSF9TRU5EIiwKKyAgICAiQVVUSF9SRUFEIiwKKyAgICAiUkVRX0lOSVQiLAorICAgICJSRVNPTFZJTkciLAorICAgICJSRVNPTFZFRCIsCisgICAgIlJFU09MVkVfUkVNT1RFIiwKKyAgICAiUkVRX1NFTkQiLAorICAgICJSRVFfU0VORElORyIsCisgICAgIlJFUV9SRUFEIiwKKyAgICAiUkVRX1JFQURfTU9SRSIsCisgICAgIkRPTkUiCisgIH07CisjZW5kaWYKKworICBpZihvbGRzdGF0ZSA9PSBzdGF0ZSkKKyAgICAvKiBkb24ndCBib3RoZXIgd2hlbiB0aGUgbmV3IHN0YXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgc3RhdGUgKi8KKyAgICByZXR1cm47CisKKyAgY29ubi0+Y25uY3Quc3RhdGUgPSBzdGF0ZTsKKworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgaW5mb2YoY29ubi0+ZGF0YSwKKyAgICAgICAgIlNYU1RBVEU6ICVzID0+ICVzIGNvbm4gJXA7IGxpbmUgJWRcbiIsCisgICAgICAgIHN0YXRlbmFtZVtvbGRzdGF0ZV0sIHN0YXRlbmFtZVtjb25uLT5jbm5jdC5zdGF0ZV0sIGNvbm4sCisgICAgICAgIGxpbmVubyk7CisjZW5kaWYKK30KKworaW50IEN1cmxfU09DS1NfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCit7CisgIGludCByYyA9IDA7CisgIHNvY2tbMF0gPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHN3aXRjaChjb25uLT5jbm5jdC5zdGF0ZSkgeworICBjYXNlIENPTk5FQ1RfUkVTT0xWSU5HOgorICBjYXNlIENPTk5FQ1RfU09DS1NfUkVBRDoKKyAgY2FzZSBDT05ORUNUX0FVVEhfUkVBRDoKKyAgY2FzZSBDT05ORUNUX1JFUV9SRUFEOgorICBjYXNlIENPTk5FQ1RfUkVRX1JFQURfTU9SRToKKyAgICByYyA9IEdFVFNPQ0tfUkVBRFNPQ0soMCk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgcmMgPSBHRVRTT0NLX1dSSVRFU09DSygwKTsKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmM7Cit9CiAKIC8qCiAqIFRoaXMgZnVuY3Rpb24gbG9ncyBpbiB0byBhIFNPQ0tTNCBwcm94eSBhbmQgc2VuZHMgdGhlIHNwZWNpZmljcyB0byB0aGUgZmluYWwKQEAgLTEwOCw2MiArMTg4LDkxIEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCwKICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQogewogICBjb25zdCBib29sIHByb3RvY29sNGEgPQogICAgIChjb25uLT5zb2Nrc19wcm94eS5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNEEpID8gVFJVRSA6IEZBTFNFOwotI2RlZmluZSBTT0NLUzRSRVFMRU4gMjYyCi0gIHVuc2lnbmVkIGNoYXIgc29ja3NyZXFbU09DS1M0UkVRTEVOXTsgLyogcm9vbSBmb3IgU09DS1M0IHJlcXVlc3QgaW5jbC4gdXNlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICovCi0gIENVUkxjb2RlIGNvZGU7Ci0gIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgdW5zaWduZWQgY2hhciAqc29ja3NyZXEgPSAmY29ubi0+Y25uY3Quc29ja3NyZXFbMF07CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgY29ubnN0YXRlICpzeCA9ICZjb25uLT5jbm5jdDsKKyAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnMgPSBOVUxMOworICBzc2l6ZV90IGFjdHVhbHJlYWQ7CisgIHNzaXplX3Qgd3JpdHRlbjsKIAotICBpZihDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpIDwgMCkgewotICAgIC8qIHRpbWUtb3V0LCBiYWlsIG91dCwgZ28gaG9tZSAqLwotICAgIGZhaWxmKGRhdGEsICJDb25uZWN0aW9uIHRpbWUtb3V0Iik7Ci0gICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgfQorICBpZighU09DS1NfU1RBVEUoc3gtPnN0YXRlKSAmJiAhKmRvbmUpCisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1NPQ0tTX0lOSVQpOwogCi0gIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQotICAgIGluZm9mKGNvbm4tPmRhdGEsICJTT0NLUzQlczogY29ubmVjdGluZyB0byBIVFRQIHByb3h5ICVzIHBvcnQgJWRcbiIsCi0gICAgICAgICAgcHJvdG9jb2w0YSA/ICJhIiA6ICIiLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOworICBzd2l0Y2goc3gtPnN0YXRlKSB7CisgIGNhc2UgQ09OTkVDVF9TT0NLU19JTklUOgorICAgIC8qIFNPQ0tTNCBjYW4gb25seSBkbyBJUHY0LCBpbnNpc3QhICovCisgICAgY29ubi0+aXBfdmVyc2lvbiA9IENVUkxfSVBSRVNPTFZFX1Y0OworICAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQorICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNPQ0tTNCVzOiBjb25uZWN0aW5nIHRvIEhUVFAgcHJveHkgJXMgcG9ydCAlZFxuIiwKKyAgICAgICAgICAgIHByb3RvY29sNGEgPyAiYSIgOiAiIiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKIAotICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7CisgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNCBjb21tdW5pY2F0aW9uIHRvICVzOiVkXG4iLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOwogCi0gIGluZm9mKGRhdGEsICJTT0NLUzQgY29tbXVuaWNhdGlvbiB0byAlczolZFxuIiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKKyAgICAvKgorICAgICAqIENvbXBvc2Ugc29ja3M0IHJlcXVlc3QKKyAgICAgKgorICAgICAqIFJlcXVlc3QgZm9ybWF0CisgICAgICoKKyAgICAgKiAgICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLi4uListLS0tKworICAgICAqICAgICB8IFZOIHwgQ0QgfCBEU1RQT1JUIHwgICAgICBEU1RJUCAgICAgICAgfCBVU0VSSUQgICAgICAgfE5VTEx8CisgICAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy4uLi4rLS0tLSsKKyAgICAgKiAjIG9mIGJ5dGVzOiAgMSAgICAxICAgICAgMiAgICAgICAgICAgICAgNCAgICAgICAgICAgdmFyaWFibGUgICAgICAgMQorICAgICAqLwogCi0gIC8qCi0gICAqIENvbXBvc2Ugc29ja3M0IHJlcXVlc3QKLSAgICoKLSAgICogUmVxdWVzdCBmb3JtYXQKLSAgICoKLSAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy4uLi4rLS0tLSsKLSAgICogICAgIHwgVk4gfCBDRCB8IERTVFBPUlQgfCAgICAgIERTVElQICAgICAgICB8IFVTRVJJRCAgICAgICB8TlVMTHwKLSAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy4uLi4rLS0tLSsKLSAgICogIyBvZiBieXRlczogIDEgICAgMSAgICAgIDIgICAgICAgICAgICAgIDQgICAgICAgICAgIHZhcmlhYmxlICAgICAgIDEKLSAgICovCisgICAgc29ja3NyZXFbMF0gPSA0OyAvKiB2ZXJzaW9uIChTT0NLUzQpICovCisgICAgc29ja3NyZXFbMV0gPSAxOyAvKiBjb25uZWN0ICovCisgICAgc29ja3NyZXFbMl0gPSAodW5zaWduZWQgY2hhcikoKHJlbW90ZV9wb3J0ID4+IDgpICYgMHhmZik7IC8qIFBPUlQgTVNCICovCisgICAgc29ja3NyZXFbM10gPSAodW5zaWduZWQgY2hhcikocmVtb3RlX3BvcnQgJiAweGZmKTsgICAgICAgIC8qIFBPUlQgTFNCICovCiAKLSAgc29ja3NyZXFbMF0gPSA0OyAvKiB2ZXJzaW9uIChTT0NLUzQpICovCi0gIHNvY2tzcmVxWzFdID0gMTsgLyogY29ubmVjdCAqLwotICBzb2Nrc3JlcVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgocmVtb3RlX3BvcnQgPj4gOCkgJiAweGZmKTsgLyogUE9SVCBNU0IgKi8KLSAgc29ja3NyZXFbM10gPSAodW5zaWduZWQgY2hhcikocmVtb3RlX3BvcnQgJiAweGZmKTsgICAgICAgIC8qIFBPUlQgTFNCICovCisgICAgLyogRE5TIHJlc29sdmUgb25seSBmb3IgU09DS1M0LCBub3QgU09DS1M0YSAqLworICAgIGlmKCFwcm90b2NvbDRhKSB7CisgICAgICBlbnVtIHJlc29sdmVfdCByYyA9CisgICAgICAgIEN1cmxfcmVzb2x2KGNvbm4sIGhvc3RuYW1lLCByZW1vdGVfcG9ydCwgRkFMU0UsICZkbnMpOwogCi0gIC8qIEROUyByZXNvbHZlIG9ubHkgZm9yIFNPQ0tTNCwgbm90IFNPQ0tTNGEgKi8KLSAgaWYoIXByb3RvY29sNGEpIHsKLSAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRuczsKLSAgICBDdXJsX2FkZHJpbmZvICpocCA9IE5VTEw7Ci0gICAgaW50IHJjOworICAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9FUlJPUikKKyAgICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWTsKKyAgICAgIGVsc2UgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKSB7CisgICAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVNPTFZJTkcpOworICAgICAgICBpbmZvZihkYXRhLCAiU09DS1M0IG5vbi1ibG9ja2luZyByZXNvbHZlIG9mICVzXG4iLCBob3N0bmFtZSk7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVNPTFZFRCk7CisgICAgICBnb3RvIENPTk5FQ1RfUkVTT0xWRUQ7CisgICAgfQogCi0gICAgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQsIEZBTFNFLCAmZG5zKTsKKyAgICAvKiBzb2NrczRhIGRvZXNuJ3QgcmVzb2x2ZSBhbnl0aGluZyBsb2NhbGx5ICovCisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFUV9JTklUKTsKKyAgICBnb3RvIENPTk5FQ1RfUkVRX0lOSVQ7CiAKLSAgICBpZihyYyA9PSBDVVJMUkVTT0xWX0VSUk9SKQotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWTsKKyAgY2FzZSBDT05ORUNUX1JFU09MVklORzoKKyAgICAvKiBjaGVjayBpZiB3ZSBoYXZlIHRoZSBuYW1lIHJlc29sdmVkIGJ5IG5vdyAqLworICAgIGRucyA9IEN1cmxfZmV0Y2hfYWRkcihjb25uLCBob3N0bmFtZSwgKGludCljb25uLT5wb3J0KTsKIAotICAgIGlmKHJjID09IENVUkxSRVNPTFZfUEVORElORykKLSAgICAgIC8qIGlnbm9yZXMgdGhlIHJldHVybiBjb2RlLCBidXQgJ2RucycgcmVtYWlucyBOVUxMIG9uIGZhaWx1cmUgKi8KLSAgICAgICh2b2lkKUN1cmxfcmVzb2x2ZXJfd2FpdF9yZXNvbHYoY29ubiwgJmRucyk7Ci0KKyAgICBpZihkbnMpIHsKKyNpZmRlZiBDVVJMUkVTX0FTWU5DSAorICAgICAgY29ubi0+YXN5bmMuZG5zID0gZG5zOworICAgICAgY29ubi0+YXN5bmMuZG9uZSA9IFRSVUU7CisjZW5kaWYKKyAgICAgIGluZm9mKGRhdGEsICJIb3N0bmFtZSAnJXMnIHdhcyBmb3VuZFxuIiwgaG9zdG5hbWUpOworICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFU09MVkVEKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXN1bHQgPSBDdXJsX3Jlc29sdl9jaGVjayhkYXRhLT5jb25uLCAmZG5zKTsKKyAgICAgIGlmKCFkbnMpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIC8qIEZBTExUSFJPVUdIICovCisgIENPTk5FQ1RfUkVTT0xWRUQ6CisgIGNhc2UgQ09OTkVDVF9SRVNPTFZFRDogeworICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICpocCA9IE5VTEw7CisgICAgY2hhciBidWZbNjRdOwogICAgIC8qCiAgICAgICogV2UgY2Fubm90IHVzZSAnaG9zdGVudCcgYXMgYSBzdHJ1Y3QgdGhhdCBDdXJsX3Jlc29sdigpIHJldHVybnMuICBJdAogICAgICAqIHJldHVybnMgYSBDdXJsX2FkZHJpbmZvIHBvaW50ZXIgdGhhdCBtYXkgbm90IGFsd2F5cyBsb29rIHRoZSBzYW1lLgpAQCAtMTcxLDcgKzI4MCw2IEBACiAgICAgaWYoZG5zKQogICAgICAgaHAgPSBkbnMtPmFkZHI7CiAgICAgaWYoaHApIHsKLSAgICAgIGNoYXIgYnVmWzY0XTsKICAgICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoaHAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAgICAgICBpZihocC0+YWlfZmFtaWx5ID09IEFGX0lORVQpIHsKQEAgLTE4Nyw3ICsyOTUsNiBAQAogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIGhwID0gTlVMTDsgLyogZmFpbCEgKi8KLQogICAgICAgICBmYWlsZihkYXRhLCAiU09DS1M0IGNvbm5lY3Rpb24gdG8gJXMgbm90IHN1cHBvcnRlZFxuIiwgYnVmKTsKICAgICAgIH0KIApAQCAtMTk5LDE0OSArMzA2LDE3MSBAQAogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwogICAgIH0KICAgfQotCi0gIC8qCi0gICAqIFRoaXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0aW5nICJJZGVudGlmaWNhdGlvbiBQcm90b2NvbCAoUkZDMTQxMykiLgotICAgKi8KLSAgc29ja3NyZXFbOF0gPSAwOyAvKiBlbnN1cmUgZW1wdHkgdXNlcmlkIGlzIE5VTC10ZXJtaW5hdGVkICovCi0gIGlmKHByb3h5X3VzZXIpIHsKLSAgICBzaXplX3QgcGxlbiA9IHN0cmxlbihwcm94eV91c2VyKTsKLSAgICBpZihwbGVuID49IHNpemVvZihzb2Nrc3JlcSkgLSA4KSB7Ci0gICAgICBmYWlsZihkYXRhLCAiVG9vIGxvbmcgU09DS1MgcHJveHkgbmFtZSwgY2FuJ3QgdXNlIVxuIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0KLSAgICAvKiBjb3B5IHRoZSBwcm94eSBuYW1lIFdJVEggdHJhaWxpbmcgemVybyAqLwotICAgIG1lbWNweShzb2Nrc3JlcSArIDgsIHByb3h5X3VzZXIsIHBsZW4gKyAxKTsKLSAgfQotCi0gIC8qCi0gICAqIE1ha2UgY29ubmVjdGlvbgotICAgKi8KLSAgewotICAgIGludCByZXN1bHQ7Ci0gICAgc3NpemVfdCBhY3R1YWxyZWFkOwotICAgIHNzaXplX3Qgd3JpdHRlbjsKLSAgICBzc2l6ZV90IGhvc3RuYW1lbGVuID0gMDsKLSAgICBzc2l6ZV90IHBhY2tldHNpemUgPSA5ICsKLSAgICAgIHN0cmxlbigoY2hhciAqKXNvY2tzcmVxICsgOCk7IC8qIHNpemUgaW5jbHVkaW5nIE5VTCAqLwotCi0gICAgLyogSWYgU09DS1M0YSwgc2V0IHNwZWNpYWwgaW52YWxpZCBJUCBhZGRyZXNzIDAuMC4wLnggKi8KLSAgICBpZihwcm90b2NvbDRhKSB7Ci0gICAgICBzb2Nrc3JlcVs0XSA9IDA7Ci0gICAgICBzb2Nrc3JlcVs1XSA9IDA7Ci0gICAgICBzb2Nrc3JlcVs2XSA9IDA7Ci0gICAgICBzb2Nrc3JlcVs3XSA9IDE7Ci0gICAgICAvKiBJZiBzdGlsbCBlbm91Z2ggcm9vbSBpbiBidWZmZXIsIGFsc28gYXBwZW5kIGhvc3RuYW1lICovCi0gICAgICBob3N0bmFtZWxlbiA9IChzc2l6ZV90KXN0cmxlbihob3N0bmFtZSkgKyAxOyAvKiBsZW5ndGggaW5jbHVkaW5nIE5VTCAqLwotICAgICAgaWYocGFja2V0c2l6ZSArIGhvc3RuYW1lbGVuIDw9IFNPQ0tTNFJFUUxFTikKLSAgICAgICAgc3RyY3B5KChjaGFyICopc29ja3NyZXEgKyBwYWNrZXRzaXplLCBob3N0bmFtZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGhvc3RuYW1lbGVuID0gMDsgLyogRmxhZzogaG9zdG5hbWUgZGlkIG5vdCBmaXQgaW4gYnVmZmVyICovCi0gICAgfQotCi0gICAgLyogU2VuZCByZXF1ZXN0ICovCi0gICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRzaXplICsgaG9zdG5hbWVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJndyaXR0ZW4pOwotICAgIGlmKGNvZGUgfHwgKHdyaXR0ZW4gIT0gcGFja2V0c2l6ZSArIGhvc3RuYW1lbGVuKSkgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNPQ0tTNCBjb25uZWN0IHJlcXVlc3QuIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0KLSAgICBpZihwcm90b2NvbDRhICYmIGhvc3RuYW1lbGVuID09IDApIHsKLSAgICAgIC8qIFNPQ0tTNGEgd2l0aCB2ZXJ5IGxvbmcgaG9zdG5hbWUgLSBzZW5kIHRoYXQgbmFtZSBzZXBhcmF0ZWx5ICovCi0gICAgICBob3N0bmFtZWxlbiA9IChzc2l6ZV90KXN0cmxlbihob3N0bmFtZSkgKyAxOwotICAgICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilob3N0bmFtZSwgaG9zdG5hbWVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JpdHRlbik7Ci0gICAgICBpZihjb2RlIHx8ICh3cml0dGVuICE9IGhvc3RuYW1lbGVuKSkgewotICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU09DS1M0IGNvbm5lY3QgcmVxdWVzdC4iKTsKKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1JFUV9JTklUOgorICBjYXNlIENPTk5FQ1RfUkVRX0lOSVQ6CisgICAgLyoKKyAgICAgKiBUaGlzIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGluZyAiSWRlbnRpZmljYXRpb24gUHJvdG9jb2wgKFJGQzE0MTMpIi4KKyAgICAgKi8KKyAgICBzb2Nrc3JlcVs4XSA9IDA7IC8qIGVuc3VyZSBlbXB0eSB1c2VyaWQgaXMgTlVMLXRlcm1pbmF0ZWQgKi8KKyAgICBpZihwcm94eV91c2VyKSB7CisgICAgICBzaXplX3QgcGxlbiA9IHN0cmxlbihwcm94eV91c2VyKTsKKyAgICAgIGlmKHBsZW4gPj0gc2l6ZW9mKHN4LT5zb2Nrc3JlcSkgLSA4KSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJUb28gbG9uZyBTT0NLUyBwcm94eSBuYW1lLCBjYW4ndCB1c2UhXG4iKTsKICAgICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICAgIH0KLSAgICB9Ci0KLSAgICBwYWNrZXRzaXplID0gODsgLyogcmVjZWl2ZSBkYXRhIHNpemUgKi8KLQotICAgIC8qIFJlY2VpdmUgcmVzcG9uc2UgKi8KLSAgICByZXN1bHQgPSBDdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgcGFja2V0c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFjdHVhbHJlYWQpOwotICAgIGlmKHJlc3VsdCB8fCAoYWN0dWFscmVhZCAhPSBwYWNrZXRzaXplKSkgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWNlaXZlIFNPQ0tTNCBjb25uZWN0IHJlcXVlc3QgYWNrLiIpOwotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICAgIC8qIGNvcHkgdGhlIHByb3h5IG5hbWUgV0lUSCB0cmFpbGluZyB6ZXJvICovCisgICAgICBtZW1jcHkoc29ja3NyZXEgKyA4LCBwcm94eV91c2VyLCBwbGVuICsgMSk7CiAgICAgfQogCiAgICAgLyoKLSAgICAgKiBSZXNwb25zZSBmb3JtYXQKLSAgICAgKgotICAgICAqICAgICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKwotICAgICAqICAgICB8IFZOIHwgQ0QgfCBEU1RQT1JUIHwgICAgICBEU1RJUCAgICAgICAgfAotICAgICAqICAgICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKwotICAgICAqICMgb2YgYnl0ZXM6ICAxICAgIDEgICAgICAyICAgICAgICAgICAgICA0Ci0gICAgICoKLSAgICAgKiBWTiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgcmVwbHkgY29kZSBhbmQgc2hvdWxkIGJlIDAuIENEIGlzIHRoZSByZXN1bHQKLSAgICAgKiBjb2RlIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAgICAqCi0gICAgICogOTA6IHJlcXVlc3QgZ3JhbnRlZAotICAgICAqIDkxOiByZXF1ZXN0IHJlamVjdGVkIG9yIGZhaWxlZAotICAgICAqIDkyOiByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgU09DS1Mgc2VydmVyIGNhbm5vdCBjb25uZWN0IHRvCi0gICAgICogICAgIGlkZW50ZCBvbiB0aGUgY2xpZW50Ci0gICAgICogOTM6IHJlcXVlc3QgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgY2xpZW50IHByb2dyYW0gYW5kIGlkZW50ZAotICAgICAqICAgICByZXBvcnQgZGlmZmVyZW50IHVzZXItaWRzCisgICAgICogTWFrZSBjb25uZWN0aW9uCiAgICAgICovCisgICAgeworICAgICAgc3NpemVfdCBwYWNrZXRzaXplID0gOSArCisgICAgICAgIHN0cmxlbigoY2hhciAqKXNvY2tzcmVxICsgOCk7IC8qIHNpemUgaW5jbHVkaW5nIE5VTCAqLwogCi0gICAgLyogd3JvbmcgdmVyc2lvbiA/ICovCi0gICAgaWYoc29ja3NyZXFbMF0gIT0gMCkgewotICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJTT0NLUzQgcmVwbHkgaGFzIHdyb25nIHZlcnNpb24sIHZlcnNpb24gc2hvdWxkIGJlIDAuIik7CisgICAgICAvKiBJZiBTT0NLUzRhLCBzZXQgc3BlY2lhbCBpbnZhbGlkIElQIGFkZHJlc3MgMC4wLjAueCAqLworICAgICAgaWYocHJvdG9jb2w0YSkgeworICAgICAgICBzc2l6ZV90IGhvc3RuYW1lbGVuID0gMDsKKyAgICAgICAgc29ja3NyZXFbNF0gPSAwOworICAgICAgICBzb2Nrc3JlcVs1XSA9IDA7CisgICAgICAgIHNvY2tzcmVxWzZdID0gMDsKKyAgICAgICAgc29ja3NyZXFbN10gPSAxOworICAgICAgICAvKiBhcHBlbmQgaG9zdG5hbWUgKi8KKyAgICAgICAgaG9zdG5hbWVsZW4gPSAoc3NpemVfdClzdHJsZW4oaG9zdG5hbWUpICsgMTsgLyogbGVuZ3RoIGluY2x1ZGluZyBOVUwgKi8KKyAgICAgICAgaWYoaG9zdG5hbWVsZW4gPD0gMjU1KQorICAgICAgICAgIHN0cmNweSgoY2hhciAqKXNvY2tzcmVxICsgcGFja2V0c2l6ZSwgaG9zdG5hbWUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU09DS1M0OiB0b28gbG9uZyBob3N0IG5hbWUiKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgICAgICB9CisgICAgICAgIHBhY2tldHNpemUgKz0gaG9zdG5hbWVsZW47CisgICAgICB9CisgICAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgICAgc3gtPm91dHN0YW5kaW5nID0gcGFja2V0c2l6ZTsKKyAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVFfU0VORElORyk7CisgICAgfQorICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9SRVFfU0VORElORzoKKyAgICAvKiBTZW5kIHJlcXVlc3QgKi8KKyAgICByZXN1bHQgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJndyaXR0ZW4pOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNPQ0tTNCBjb25uZWN0IHJlcXVlc3QuIik7CiAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwogICAgIH0KKyAgICBpZih3cml0dGVuICE9IHN4LT5vdXRzdGFuZGluZykgeworICAgICAgLyogbm90IGRvbmUsIHJlbWFpbiBpbiBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IHdyaXR0ZW47CisgICAgICBzeC0+b3V0cCArPSB3cml0dGVuOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KIAotICAgIC8qIFJlc3VsdCAqLwotICAgIHN3aXRjaChzb2Nrc3JlcVsxXSkgewotICAgIGNhc2UgOTA6Ci0gICAgICBpbmZvZihkYXRhLCAiU09DS1M0JXMgcmVxdWVzdCBncmFudGVkLlxuIiwgcHJvdG9jb2w0YT8iYSI6IiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA5MToKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M0IGNvbm5lY3Rpb24gdG8gJWQuJWQuJWQuJWQ6JWQuICglZCkiCi0gICAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIG9yIGZhaWxlZC4iLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAotICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKLSAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gICAgY2FzZSA5MjoKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M0IGNvbm5lY3Rpb24gdG8gJWQuJWQuJWQuJWQ6JWQuICglZCkiCi0gICAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgU09DS1Mgc2VydmVyIGNhbm5vdCBjb25uZWN0IHRvICIKLSAgICAgICAgICAgICJpZGVudGQgb24gdGhlIGNsaWVudC4iLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAotICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKLSAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gICAgY2FzZSA5MzoKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M0IGNvbm5lY3Rpb24gdG8gJWQuJWQuJWQuJWQ6JWQuICglZCkiCi0gICAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgdGhlIGNsaWVudCBwcm9ncmFtIGFuZCBpZGVudGQgIgotICAgICAgICAgICAgInJlcG9ydCBkaWZmZXJlbnQgdXNlci1pZHMuIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMl0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVszXSksCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIGRlZmF1bHQ6Ci0gICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgotICAgICAgICAgICAgIiwgVW5rbm93bi4iLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAotICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICAvKiBkb25lIHNlbmRpbmchICovCisgICAgc3gtPm91dHN0YW5kaW5nID0gODsgLyogcmVjZWl2ZSBkYXRhIHNpemUgKi8KKyAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9TT0NLU19SRUFEKTsKKworICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9TT0NLU19SRUFEOgorICAgIC8qIFJlY2VpdmUgcmVzcG9uc2UgKi8KKyAgICByZXN1bHQgPSBDdXJsX3JlYWRfcGxhaW4oc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZhY3R1YWxyZWFkKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJTT0NLUzQ6IEZhaWxlZCByZWNlaXZpbmcgY29ubmVjdCByZXF1ZXN0IGFjazogJXMiLAorICAgICAgICAgICAgY3VybF9lYXN5X3N0cmVycm9yKHJlc3VsdCkpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9CisgICAgZWxzZSBpZighcmVzdWx0ICYmICFhY3R1YWxyZWFkKSB7CisgICAgICAvKiBjb25uZWN0aW9uIGNsb3NlZCAqLworICAgICAgZmFpbGYoZGF0YSwgImNvbm5lY3Rpb24gdG8gcHJveHkgY2xvc2VkIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gcmVhZGluZyBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IGFjdHVhbHJlYWQ7CisgICAgICBzeC0+b3V0cCArPSBhY3R1YWxyZWFkOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfRE9ORSk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6IC8qIGxvdHMgb2YgdW51c2VkIHN0YXRlcyBpbiBTT0NLUzQgKi8KKyAgICBicmVhazsKICAgfQogCi0gICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOworICAvKgorICAgKiBSZXNwb25zZSBmb3JtYXQKKyAgICoKKyAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICAqICAgICB8IFZOIHwgQ0QgfCBEU1RQT1JUIHwgICAgICBEU1RJUCAgICAgICAgfAorICAgKiAgICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKKyAgICogIyBvZiBieXRlczogIDEgICAgMSAgICAgIDIgICAgICAgICAgICAgIDQKKyAgICoKKyAgICogVk4gaXMgdGhlIHZlcnNpb24gb2YgdGhlIHJlcGx5IGNvZGUgYW5kIHNob3VsZCBiZSAwLiBDRCBpcyB0aGUgcmVzdWx0CisgICAqIGNvZGUgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICAqCisgICAqIDkwOiByZXF1ZXN0IGdyYW50ZWQKKyAgICogOTE6IHJlcXVlc3QgcmVqZWN0ZWQgb3IgZmFpbGVkCisgICAqIDkyOiByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgU09DS1Mgc2VydmVyIGNhbm5vdCBjb25uZWN0IHRvCisgICAqICAgICBpZGVudGQgb24gdGhlIGNsaWVudAorICAgKiA5MzogcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIHRoZSBjbGllbnQgcHJvZ3JhbSBhbmQgaWRlbnRkCisgICAqICAgICByZXBvcnQgZGlmZmVyZW50IHVzZXItaWRzCisgICAqLwogCisgIC8qIHdyb25nIHZlcnNpb24gPyAqLworICBpZihzb2Nrc3JlcVswXSAhPSAwKSB7CisgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAiU09DS1M0IHJlcGx5IGhhcyB3cm9uZyB2ZXJzaW9uLCB2ZXJzaW9uIHNob3VsZCBiZSAwLiIpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKworICAvKiBSZXN1bHQgKi8KKyAgc3dpdGNoKHNvY2tzcmVxWzFdKSB7CisgIGNhc2UgOTA6CisgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNCVzIHJlcXVlc3QgZ3JhbnRlZC5cbiIsIHByb3RvY29sNGE/ImEiOiIiKTsKKyAgICBicmVhazsKKyAgY2FzZSA5MToKKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzQgY29ubmVjdGlvbiB0byAlZC4lZC4lZC4lZDolZC4gKCVkKSIKKyAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIG9yIGZhaWxlZC4iLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbN10sCisgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgY2FzZSA5MjoKKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzQgY29ubmVjdGlvbiB0byAlZC4lZC4lZC4lZDolZC4gKCVkKSIKKyAgICAgICAgICAiLCByZXF1ZXN0IHJlamVjdGVkIGJlY2F1c2UgU09DS1Mgc2VydmVyIGNhbm5vdCBjb25uZWN0IHRvICIKKyAgICAgICAgICAiaWRlbnRkIG9uIHRoZSBjbGllbnQuIiwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs0XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNV0sCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAorICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMl0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVszXSksCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMV0pOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIGNhc2UgOTM6CisgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M0IGNvbm5lY3Rpb24gdG8gJWQuJWQuJWQuJWQ6JWQuICglZCkiCisgICAgICAgICAgIiwgcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIHRoZSBjbGllbnQgcHJvZ3JhbSBhbmQgaWRlbnRkICIKKyAgICAgICAgICAicmVwb3J0IGRpZmZlcmVudCB1c2VyLWlkcy4iLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbN10sCisgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyXSA8PCA4KSB8ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzNdKSwKKyAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgZGVmYXVsdDoKKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzQgY29ubmVjdGlvbiB0byAlZC4lZC4lZC4lZDolZC4gKCVkKSIKKyAgICAgICAgICAiLCBVbmtub3duLiIsCisgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKKyAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzJdIDw8IDgpIHwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbM10pLAorICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgKmRvbmUgPSBUUlVFOwogICByZXR1cm4gQ1VSTEVfT0s7IC8qIFByb3h5IHdhcyBzdWNjZXNzZnVsISAqLwogfQogCkBAIC0zNTQsNyArNDgzLDggQEAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgaW50IHJlbW90ZV9wb3J0LAogICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCiB7CiAgIC8qCiAgICAgQWNjb3JkaW5nIHRvIHRoZSBSRkMxOTI4LCBzZWN0aW9uICI2LiAgUmVwbGllcyIuIFRoaXMgaXMgd2hhdCBhIFNPQ0s1CkBAIC0zNzIsMTQwICs1MDIsMTYyIEBACiAgICAgbyAgUkVQICAgIFJlcGx5IGZpZWxkOgogICAgIG8gIFgnMDAnIHN1Y2NlZWRlZAogICAqLwotCi0gIHVuc2lnbmVkIGNoYXIgc29ja3NyZXFbNjAwXTsgLyogcm9vbSBmb3IgbGFyZ2UgdXNlci9wdyAoMjU1IG1heCBlYWNoKSAqLworICB1bnNpZ25lZCBjaGFyICpzb2Nrc3JlcSA9ICZjb25uLT5jbm5jdC5zb2Nrc3JlcVswXTsKKyAgY2hhciBkZXN0WzI1Nl0gPSAidW5rbm93biI7ICAvKiBwcmludGFibGUgaG9zdG5hbWU6cG9ydCAqLwogICBpbnQgaWR4OwogICBzc2l6ZV90IGFjdHVhbHJlYWQ7CiAgIHNzaXplX3Qgd3JpdHRlbjsKLSAgaW50IHJlc3VsdDsKLSAgQ1VSTGNvZGUgY29kZTsKLSAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBDVVJMY29kZSByZXN1bHQ7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgdGltZWRpZmZfdCB0aW1lb3V0OwogICBib29sIHNvY2tzNV9yZXNvbHZlX2xvY2FsID0KICAgICAoY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzUpID8gVFJVRSA6IEZBTFNFOwogICBjb25zdCBzaXplX3QgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKTsKICAgc3NpemVfdCBsZW4gPSAwOwogICBjb25zdCB1bnNpZ25lZCBsb25nIGF1dGggPSBkYXRhLT5zZXQuc29ja3M1YXV0aDsKICAgYm9vbCBhbGxvd19nc3NhcGkgPSBGQUxTRTsKKyAgc3RydWN0IGNvbm5zdGF0ZSAqc3ggPSAmY29ubi0+Y25uY3Q7CisgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zID0gTlVMTDsKIAotICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKLSAgICBpbmZvZihjb25uLT5kYXRhLCAiU09DS1M1OiBjb25uZWN0aW5nIHRvIEhUVFAgcHJveHkgJXMgcG9ydCAlZFxuIiwKLSAgICAgICAgICBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOworICBpZighU09DS1NfU1RBVEUoc3gtPnN0YXRlKSAmJiAhKmRvbmUpCisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1NPQ0tTX0lOSVQpOwogCi0gIC8qIFJGQzE5MjggY2hhcHRlciA1IHNwZWNpZmllcyBtYXggMjU1IGNoYXJzIGZvciBkb21haW4gbmFtZSBpbiBwYWNrZXQgKi8KLSAgaWYoIXNvY2tzNV9yZXNvbHZlX2xvY2FsICYmIGhvc3RuYW1lX2xlbiA+IDI1NSkgewotICAgIGluZm9mKGNvbm4tPmRhdGEsICJTT0NLUzU6IHNlcnZlciByZXNvbHZpbmcgZGlzYWJsZWQgZm9yIGhvc3RuYW1lcyBvZiAiCi0gICAgICAgICAgImxlbmd0aCA+IDI1NSBbYWN0dWFsIGxlbj0lenVdXG4iLCBob3N0bmFtZV9sZW4pOwotICAgIHNvY2tzNV9yZXNvbHZlX2xvY2FsID0gVFJVRTsKLSAgfQorICBzd2l0Y2goc3gtPnN0YXRlKSB7CisgIGNhc2UgQ09OTkVDVF9TT0NLU19JTklUOgorICAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQorICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNPQ0tTNTogY29ubmVjdGluZyB0byBIVFRQIHByb3h5ICVzIHBvcnQgJWRcbiIsCisgICAgICAgICAgICBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOwogCi0gIC8qIGdldCB0aW1lb3V0ICovCi0gIHRpbWVvdXQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworICAgIC8qIFJGQzE5MjggY2hhcHRlciA1IHNwZWNpZmllcyBtYXggMjU1IGNoYXJzIGZvciBkb21haW4gbmFtZSBpbiBwYWNrZXQgKi8KKyAgICBpZighc29ja3M1X3Jlc29sdmVfbG9jYWwgJiYgaG9zdG5hbWVfbGVuID4gMjU1KSB7CisgICAgICBpbmZvZihjb25uLT5kYXRhLCAiU09DS1M1OiBzZXJ2ZXIgcmVzb2x2aW5nIGRpc2FibGVkIGZvciBob3N0bmFtZXMgb2YgIgorICAgICAgICAgICAgImxlbmd0aCA+IDI1NSBbYWN0dWFsIGxlbj0lenVdXG4iLCBob3N0bmFtZV9sZW4pOworICAgICAgc29ja3M1X3Jlc29sdmVfbG9jYWwgPSBUUlVFOworICAgIH0KIAotICBpZih0aW1lb3V0IDwgMCkgewotICAgIC8qIHRpbWUtb3V0LCBiYWlsIG91dCwgZ28gaG9tZSAqLwotICAgIGZhaWxmKGRhdGEsICJDb25uZWN0aW9uIHRpbWUtb3V0Iik7Ci0gICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgfQotCi0gICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOwotCi0gIC8qIHdhaXQgdW50aWwgc29ja2V0IGdldHMgY29ubmVjdGVkICovCi0gIHJlc3VsdCA9IFNPQ0tFVF9XUklUQUJMRShzb2NrLCB0aW1lb3V0KTsKLQotICBpZigtMSA9PSByZXN1bHQpIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1OiBubyBjb25uZWN0aW9uIGhlcmUiKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0gIGlmKDAgPT0gcmVzdWx0KSB7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNPQ0tTNTogY29ubmVjdGlvbiB0aW1lb3V0Iik7Ci0gICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgfQotCi0gIGlmKHJlc3VsdCAmIENVUkxfQ1NFTEVDVF9FUlIpIHsKLSAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1OiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY29ubmVjdGlvbiIpOwotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KLQotICBpZihhdXRoICYgfihDVVJMQVVUSF9CQVNJQyB8IENVUkxBVVRIX0dTU0FQSSkpCi0gICAgaW5mb2YoY29ubi0+ZGF0YSwKLSAgICAgICAgIndhcm5pbmc6IHVuc3VwcG9ydGVkIHZhbHVlIHBhc3NlZCB0byBDVVJMT1BUX1NPQ0tTNV9BVVRIOiAlbHVcbiIsCi0gICAgICAgIGF1dGgpOwotICBpZighKGF1dGggJiBDVVJMQVVUSF9CQVNJQykpCi0gICAgLyogZGlzYWJsZSB1c2VybmFtZS9wYXNzd29yZCBhdXRoICovCi0gICAgcHJveHlfdXNlciA9IE5VTEw7CisgICAgaWYoYXV0aCAmIH4oQ1VSTEFVVEhfQkFTSUMgfCBDVVJMQVVUSF9HU1NBUEkpKQorICAgICAgaW5mb2YoY29ubi0+ZGF0YSwKKyAgICAgICAgICAgICJ3YXJuaW5nOiB1bnN1cHBvcnRlZCB2YWx1ZSBwYXNzZWQgdG8gQ1VSTE9QVF9TT0NLUzVfQVVUSDogJWx1XG4iLAorICAgICAgICAgICAgYXV0aCk7CisgICAgaWYoIShhdXRoICYgQ1VSTEFVVEhfQkFTSUMpKQorICAgICAgLyogZGlzYWJsZSB1c2VybmFtZS9wYXNzd29yZCBhdXRoICovCisgICAgICBwcm94eV91c2VyID0gTlVMTDsKICNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCi0gIGlmKGF1dGggJiBDVVJMQVVUSF9HU1NBUEkpCi0gICAgYWxsb3dfZ3NzYXBpID0gVFJVRTsKKyAgICBpZihhdXRoICYgQ1VSTEFVVEhfR1NTQVBJKQorICAgICAgYWxsb3dfZ3NzYXBpID0gVFJVRTsKICNlbmRpZgogCi0gIGlkeCA9IDA7Ci0gIHNvY2tzcmVxW2lkeCsrXSA9IDU7ICAgLyogdmVyc2lvbiAqLwotICBpZHgrKzsgICAgICAgICAgICAgICAgIC8qIHJlc2VydmUgZm9yIHRoZSBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyAqLwotICBzb2Nrc3JlcVtpZHgrK10gPSAwOyAgIC8qIG5vIGF1dGhlbnRpY2F0aW9uICovCi0gIGlmKGFsbG93X2dzc2FwaSkKLSAgICBzb2Nrc3JlcVtpZHgrK10gPSAxOyAvKiBHU1MtQVBJICovCi0gIGlmKHByb3h5X3VzZXIpCi0gICAgc29ja3NyZXFbaWR4KytdID0gMjsgLyogdXNlcm5hbWUvcGFzc3dvcmQgKi8KLSAgLyogd3JpdGUgdGhlIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2RzICovCi0gIHNvY2tzcmVxWzFdID0gKHVuc2lnbmVkIGNoYXIpIChpZHggLSAyKTsKKyAgICBpZHggPSAwOworICAgIHNvY2tzcmVxW2lkeCsrXSA9IDU7ICAgLyogdmVyc2lvbiAqLworICAgIGlkeCsrOyAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKi8KKyAgICBzb2Nrc3JlcVtpZHgrK10gPSAwOyAgIC8qIG5vIGF1dGhlbnRpY2F0aW9uICovCisgICAgaWYoYWxsb3dfZ3NzYXBpKQorICAgICAgc29ja3NyZXFbaWR4KytdID0gMTsgLyogR1NTLUFQSSAqLworICAgIGlmKHByb3h5X3VzZXIpCisgICAgICBzb2Nrc3JlcVtpZHgrK10gPSAyOyAvKiB1c2VybmFtZS9wYXNzd29yZCAqLworICAgIC8qIHdyaXRlIHRoZSBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyAqLworICAgIHNvY2tzcmVxWzFdID0gKHVuc2lnbmVkIGNoYXIpIChpZHggLSAyKTsKIAotICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7Ci0KLSAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBjb21tdW5pY2F0aW9uIHRvICVzOiVkXG4iLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOwotCi0gIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsICgyICsgKGludClzb2Nrc3JlcVsxXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0dGVuKTsKLSAgaWYoY29kZSB8fCAod3JpdHRlbiAhPSAoMiArIChpbnQpc29ja3NyZXFbMV0pKSkgewotICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gc2VuZCBpbml0aWFsIFNPQ0tTNSByZXF1ZXN0LiIpOwotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KLQotICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBUUlVFKTsKLQotICByZXN1bHQgPSBTT0NLRVRfUkVBREFCTEUoc29jaywgdGltZW91dCk7Ci0KLSAgaWYoLTEgPT0gcmVzdWx0KSB7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNPQ0tTNSBub3RoaW5nIHRvIHJlYWQiKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0gIGlmKDAgPT0gcmVzdWx0KSB7Ci0gICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNPQ0tTNSByZWFkIHRpbWVvdXQiKTsKLSAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICB9Ci0KLSAgaWYocmVzdWx0ICYgQ1VSTF9DU0VMRUNUX0VSUikgewotICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTT0NLUzUgcmVhZCBlcnJvciBvY2N1cnJlZCIpOwotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOwotICB9Ci0KLSAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgRkFMU0UpOwotCi0gIHJlc3VsdCA9IEN1cmxfYmxvY2tyZWFkX2FsbChjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCAyLCAmYWN0dWFscmVhZCk7Ci0gIGlmKHJlc3VsdCB8fCAoYWN0dWFscmVhZCAhPSAyKSkgewotICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gcmVjZWl2ZSBpbml0aWFsIFNPQ0tTNSByZXNwb25zZS4iKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0KLSAgaWYoc29ja3NyZXFbMF0gIT0gNSkgewotICAgIGZhaWxmKGRhdGEsICJSZWNlaXZlZCBpbnZhbGlkIHZlcnNpb24gaW4gaW5pdGlhbCBTT0NLUzUgcmVzcG9uc2UuIik7Ci0gICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgfQotICBpZihzb2Nrc3JlcVsxXSA9PSAwKSB7Ci0gICAgLyogTm90aGluZyB0byBkbywgbm8gYXV0aGVudGljYXRpb24gbmVlZGVkICovCi0gICAgOwotICB9Ci0jaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQotICBlbHNlIGlmKGFsbG93X2dzc2FwaSAmJiAoc29ja3NyZXFbMV0gPT0gMSkpIHsKLSAgICBjb2RlID0gQ3VybF9TT0NLUzVfZ3NzYXBpX25lZ290aWF0ZShzb2NraW5kZXgsIGNvbm4pOwotICAgIGlmKGNvZGUpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gbmVnb3RpYXRlIFNPQ0tTNSBHU1MtQVBJIGNvbnRleHQuIik7CisgICAgcmVzdWx0ID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrZmQsIChjaGFyICopc29ja3NyZXEsIGlkeCwgJndyaXR0ZW4pOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byBzZW5kIGluaXRpYWwgU09DS1M1IHJlcXVlc3QuIik7CiAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwogICAgIH0KLSAgfQorICAgIGlmKHdyaXR0ZW4gIT0gaWR4KSB7CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfU09DS1NfU0VORCk7CisgICAgICBzeC0+b3V0c3RhbmRpbmcgPSBpZHggLSB3cml0dGVuOworICAgICAgc3gtPm91dHAgPSAmc29ja3NyZXFbd3JpdHRlbl07CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9TT0NLU19SRUFEKTsKKyAgICBnb3RvIENPTk5FQ1RfU09DS1NfUkVBRF9JTklUOworICBjYXNlIENPTk5FQ1RfU09DS1NfU0VORDoKKyAgICByZXN1bHQgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJndyaXR0ZW4pOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byBzZW5kIGluaXRpYWwgU09DS1M1IHJlcXVlc3QuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBpZih3cml0dGVuICE9IHN4LT5vdXRzdGFuZGluZykgeworICAgICAgLyogbm90IGRvbmUsIHJlbWFpbiBpbiBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IHdyaXR0ZW47CisgICAgICBzeC0+b3V0cCArPSB3cml0dGVuOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1NPQ0tTX1JFQURfSU5JVDoKKyAgY2FzZSBDT05ORUNUX1NPQ0tTX1JFQURfSU5JVDoKKyAgICBzeC0+b3V0c3RhbmRpbmcgPSAyOyAvKiBleHBlY3QgdHdvIGJ5dGVzICovCisgICAgc3gtPm91dHAgPSBzb2Nrc3JlcTsgLyogc3RvcmUgaXQgaGVyZSAqLworICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9TT0NLU19SRUFEOgorICAgIHJlc3VsdCA9IEN1cmxfcmVhZF9wbGFpbihzb2NrZmQsIChjaGFyICopc3gtPm91dHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJmFjdHVhbHJlYWQpOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byByZWNlaXZlIGluaXRpYWwgU09DS1M1IHJlc3BvbnNlLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgICAgZWxzZSBpZighcmVzdWx0ICYmICFhY3R1YWxyZWFkKSB7CisgICAgICAvKiBjb25uZWN0aW9uIGNsb3NlZCAqLworICAgICAgZmFpbGYoZGF0YSwgIkNvbm5lY3Rpb24gdG8gcHJveHkgY2xvc2VkIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gcmVhZGluZyBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IGFjdHVhbHJlYWQ7CisgICAgICBzeC0+b3V0cCArPSBhY3R1YWxyZWFkOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzBdICE9IDUpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJSZWNlaXZlZCBpbnZhbGlkIHZlcnNpb24gaW4gaW5pdGlhbCBTT0NLUzUgcmVzcG9uc2UuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzFdID09IDApIHsKKyAgICAgIC8qIERPTkUhIE5vIGF1dGhlbnRpY2F0aW9uIG5lZWRlZC4gU2VuZCByZXF1ZXN0LiAqLworICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFUV9JTklUKTsKKyAgICAgIGdvdG8gQ09OTkVDVF9SRVFfSU5JVDsKKyAgICB9CisgICAgZWxzZSBpZihzb2Nrc3JlcVsxXSA9PSAyKSB7CisgICAgICAvKiByZWd1bGFyIG5hbWUgKyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbiAqLworICAgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX0FVVEhfSU5JVCk7CisgICAgICBnb3RvIENPTk5FQ1RfQVVUSF9JTklUOworICAgIH0KKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgICAgZWxzZSBpZihhbGxvd19nc3NhcGkgJiYgKHNvY2tzcmVxWzFdID09IDEpKSB7CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfR1NTQVBJX0lOSVQpOworICAgICAgcmVzdWx0ID0gQ3VybF9TT0NLUzVfZ3NzYXBpX25lZ290aWF0ZShzb2NraW5kZXgsIGNvbm4pOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gbmVnb3RpYXRlIFNPQ0tTNSBHU1MtQVBJIGNvbnRleHQuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisgICAgfQogI2VuZGlmCi0gIGVsc2UgaWYoc29ja3NyZXFbMV0gPT0gMikgeworICAgIGVsc2UgeworICAgICAgLyogZXJyb3IgKi8KKyAgICAgIGlmKCFhbGxvd19nc3NhcGkgJiYgKHNvY2tzcmVxWzFdID09IDEpKSB7CisgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICJTT0NLUzUgR1NTQVBJIHBlci1tZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisgICAgICBlbHNlIGlmKHNvY2tzcmVxWzFdID09IDI1NSkgeworICAgICAgICBmYWlsZihkYXRhLCAiTm8gYXV0aGVudGljYXRpb24gbWV0aG9kIHdhcyBhY2NlcHRhYmxlLiIpOworICAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgICAgfQorICAgIH0KKyAgICBmYWlsZihkYXRhLAorICAgICAgICAgICJVbmRvY3VtZW50ZWQgU09DS1M1IG1vZGUgYXR0ZW1wdGVkIHRvIGJlIHVzZWQgYnkgc2VydmVyLiIpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorICBjYXNlIENPTk5FQ1RfR1NTQVBJX0lOSVQ6CisgICAgLyogR1NTQVBJIHN0dWZmIGRvbmUgbm9uLWJsb2NraW5nICovCisgICAgYnJlYWs7CisjZW5kaWYKKworICBkZWZhdWx0OiAvKiBkbyBub3RoaW5nISAqLworICAgIGJyZWFrOworCisgIENPTk5FQ1RfQVVUSF9JTklUOgorICBjYXNlIENPTk5FQ1RfQVVUSF9JTklUOiB7CiAgICAgLyogTmVlZHMgdXNlciBuYW1lIGFuZCBwYXNzd29yZCAqLwogICAgIHNpemVfdCBwcm94eV91c2VyX2xlbiwgcHJveHlfcGFzc3dvcmRfbGVuOwogICAgIGlmKHByb3h5X3VzZXIgJiYgcHJveHlfcGFzc3dvcmQpIHsKQEAgLTU0NiwyNTcgKzY5OCwzMTAgQEAKICAgICAgIG1lbWNweShzb2Nrc3JlcSArIGxlbiwgcHJveHlfcGFzc3dvcmQsIHByb3h5X3Bhc3N3b3JkX2xlbik7CiAgICAgfQogICAgIGxlbiArPSBwcm94eV9wYXNzd29yZF9sZW47Ci0KLSAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCBsZW4sICZ3cml0dGVuKTsKLSAgICBpZihjb2RlIHx8IChsZW4gIT0gd3JpdHRlbikpIHsKKyAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfQVVUSF9TRU5EKTsKKyAgICBzeC0+b3V0c3RhbmRpbmcgPSBsZW47CisgICAgc3gtPm91dHAgPSBzb2Nrc3JlcTsKKyAgfQorICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9BVVRIX1NFTkQ6CisgICAgcmVzdWx0ID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrZmQsIChjaGFyICopc3gtPm91dHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZ3cml0dGVuKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBTT0NLUzUgc3ViLW5lZ290aWF0aW9uIHJlcXVlc3QuIik7CiAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwogICAgIH0KLQotICAgIHJlc3VsdCA9IEN1cmxfYmxvY2tyZWFkX2FsbChjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCAyLCAmYWN0dWFscmVhZCk7Ci0gICAgaWYocmVzdWx0IHx8IChhY3R1YWxyZWFkICE9IDIpKSB7CisgICAgaWYoc3gtPm91dHN0YW5kaW5nICE9IHdyaXR0ZW4pIHsKKyAgICAgIC8qIHJlbWFpbiBpbiBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IHdyaXR0ZW47CisgICAgICBzeC0+b3V0cCArPSB3cml0dGVuOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgIHN4LT5vdXRzdGFuZGluZyA9IDI7CisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX0FVVEhfUkVBRCk7CisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgY2FzZSBDT05ORUNUX0FVVEhfUkVBRDoKKyAgICByZXN1bHQgPSBDdXJsX3JlYWRfcGxhaW4oc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZhY3R1YWxyZWFkKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gcmVjZWl2ZSBTT0NLUzUgc3ViLW5lZ290aWF0aW9uIHJlc3BvbnNlLiIpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9Ci0KKyAgICBlbHNlIGlmKCFyZXN1bHQgJiYgIWFjdHVhbHJlYWQpIHsKKyAgICAgIC8qIGNvbm5lY3Rpb24gY2xvc2VkICovCisgICAgICBmYWlsZihkYXRhLCAiY29ubmVjdGlvbiB0byBwcm94eSBjbG9zZWQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGVsc2UgaWYoYWN0dWFscmVhZCAhPSBzeC0+b3V0c3RhbmRpbmcpIHsKKyAgICAgIC8qIHJlbWFpbiBpbiBzdGF0ZSAqLworICAgICAgc3gtPm91dHN0YW5kaW5nIC09IGFjdHVhbHJlYWQ7CisgICAgICBzeC0+b3V0cCArPSBhY3R1YWxyZWFkOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KICAgICAvKiBpZ25vcmUgdGhlIGZpcnN0IChWRVIpIGJ5dGUgKi8KLSAgICBpZihzb2Nrc3JlcVsxXSAhPSAwKSB7IC8qIHN0YXR1cyAqLworICAgIGVsc2UgaWYoc29ja3NyZXFbMV0gIT0gMCkgeyAvKiBzdGF0dXMgKi8KICAgICAgIGZhaWxmKGRhdGEsICJVc2VyIHdhcyByZWplY3RlZCBieSB0aGUgU09DS1M1IHNlcnZlciAoJWQgJWQpLiIsCiAgICAgICAgICAgICBzb2Nrc3JlcVswXSwgc29ja3NyZXFbMV0pOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9CiAKICAgICAvKiBFdmVyeXRoaW5nIGlzIGdvb2Qgc28gZmFyLCB1c2VyIHdhcyBhdXRoZW50aWNhdGVkISAqLwotICB9Ci0gIGVsc2UgewotICAgIC8qIGVycm9yICovCi0gICAgaWYoIWFsbG93X2dzc2FwaSAmJiAoc29ja3NyZXFbMV0gPT0gMSkpIHsKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiU09DS1M1IEdTU0FQSSBwZXItbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIpOwotICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgICB9Ci0gICAgaWYoc29ja3NyZXFbMV0gPT0gMjU1KSB7Ci0gICAgICBpZighcHJveHlfdXNlciB8fCAhKnByb3h5X3VzZXIpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICAgIk5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3YXMgYWNjZXB0YWJsZS4gKEl0IGlzIHF1aXRlIGxpa2VseSIKLSAgICAgICAgICAgICAgIiB0aGF0IHRoZSBTT0NLUzUgc2VydmVyIHdhbnRlZCBhIHVzZXJuYW1lL3Bhc3N3b3JkLCBzaW5jZSBub25lIgotICAgICAgICAgICAgICAiIHdhcyBzdXBwbGllZCB0byB0aGUgc2VydmVyIG9uIHRoaXMgY29ubmVjdGlvbi4pIik7CisgICAgc3hzdGF0ZShjb25uLCBDT05ORUNUX1JFUV9JTklUKTsKKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1JFUV9JTklUOgorICBjYXNlIENPTk5FQ1RfUkVRX0lOSVQ6CisgICAgaWYoc29ja3M1X3Jlc29sdmVfbG9jYWwpIHsKKyAgICAgIGVudW0gcmVzb2x2ZV90IHJjID0gQ3VybF9yZXNvbHYoY29ubiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgJmRucyk7CisKKyAgICAgIGlmKHJjID09IENVUkxSRVNPTFZfRVJST1IpCisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVDsKKworICAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKSB7CisgICAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVNPTFZJTkcpOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIk5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3YXMgYWNjZXB0YWJsZS4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfUkVTT0xWRUQpOworICAgICAgZ290byBDT05ORUNUX1JFU09MVkVEOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiVW5kb2N1bWVudGVkIFNPQ0tTNSBtb2RlIGF0dGVtcHRlZCB0byBiZSB1c2VkIGJ5IHNlcnZlci4iKTsKLSAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gICAgfQotICB9CisgICAgZ290byBDT05ORUNUX1JFU09MVkVfUkVNT1RFOwogCi0gIC8qIEF1dGhlbnRpY2F0aW9uIGlzIGNvbXBsZXRlLCBub3cgc3BlY2lmeSBkZXN0aW5hdGlvbiB0byB0aGUgcHJveHkgKi8KLSAgbGVuID0gMDsKLSAgc29ja3NyZXFbbGVuKytdID0gNTsgLyogdmVyc2lvbiAoU09DS1M1KSAqLwotICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBjb25uZWN0ICovCi0gIHNvY2tzcmVxW2xlbisrXSA9IDA7IC8qIG11c3QgYmUgemVybyAqLworICBjYXNlIENPTk5FQ1RfUkVTT0xWSU5HOgorICAgIC8qIGNoZWNrIGlmIHdlIGhhdmUgdGhlIG5hbWUgcmVzb2x2ZWQgYnkgbm93ICovCisgICAgZG5zID0gQ3VybF9mZXRjaF9hZGRyKGNvbm4sIGhvc3RuYW1lLCAoaW50KWNvbm4tPnBvcnQpOwogCi0gIGlmKCFzb2NrczVfcmVzb2x2ZV9sb2NhbCkgewotICAgIHNvY2tzcmVxW2xlbisrXSA9IDM7IC8qIEFUWVA6IGRvbWFpbiBuYW1lID0gMyAqLwotICAgIHNvY2tzcmVxW2xlbisrXSA9IChjaGFyKSBob3N0bmFtZV9sZW47IC8qIGFkZHJlc3MgbGVuZ3RoICovCi0gICAgbWVtY3B5KCZzb2Nrc3JlcVtsZW5dLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuKTsgLyogYWRkcmVzcyBzdHIgdy9vIE5VTEwgKi8KLSAgICBsZW4gKz0gaG9zdG5hbWVfbGVuOwotICB9Ci0gIGVsc2UgewotICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zOwotICAgIEN1cmxfYWRkcmluZm8gKmhwID0gTlVMTDsKLSAgICBpbnQgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQsIEZBTFNFLCAmZG5zKTsKLQotICAgIGlmKHJjID09IENVUkxSRVNPTFZfRVJST1IpCi0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7Ci0KLSAgICBpZihyYyA9PSBDVVJMUkVTT0xWX1BFTkRJTkcpIHsKLSAgICAgIC8qIHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSdyZSBpbiAid2FpdCBmb3IgcmVzb2x2ZSIgc3RhdGUgKi8KLSAgICAgIGNvZGUgPSBDdXJsX3Jlc29sdmVyX3dhaXRfcmVzb2x2KGNvbm4sICZkbnMpOwotICAgICAgaWYoY29kZSkKLSAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgaWYoZG5zKSB7CisjaWZkZWYgQ1VSTFJFU19BU1lOQ0gKKyAgICAgIGNvbm4tPmFzeW5jLmRucyA9IGRuczsKKyAgICAgIGNvbm4tPmFzeW5jLmRvbmUgPSBUUlVFOworI2VuZGlmCisgICAgICBpbmZvZihkYXRhLCAiU09DS1M1OiBob3N0bmFtZSAnJXMnIGZvdW5kXG4iLCBob3N0bmFtZSk7CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiBXZSBjYW5ub3QgdXNlICdob3N0ZW50JyBhcyBhIHN0cnVjdCB0aGF0IEN1cmxfcmVzb2x2KCkgcmV0dXJucy4gIEl0Ci0gICAgICogcmV0dXJucyBhIEN1cmxfYWRkcmluZm8gcG9pbnRlciB0aGF0IG1heSBub3QgYWx3YXlzIGxvb2sgdGhlIHNhbWUuCi0gICAgICovCisgICAgaWYoIWRucykgeworICAgICAgcmVzdWx0ID0gQ3VybF9yZXNvbHZfY2hlY2soZGF0YS0+Y29ubiwgJmRucyk7CisgICAgICBpZighZG5zKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBDT05ORUNUX1JFU09MVkVEOgorICBjYXNlIENPTk5FQ1RfUkVTT0xWRUQ6IHsKKyAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqaHAgPSBOVUxMOworICAgIHNpemVfdCBkZXN0bGVuOwogICAgIGlmKGRucykKICAgICAgIGhwID0gZG5zLT5hZGRyOwotICAgIGlmKGhwKSB7Ci0gICAgICBjaGFyIGJ1Zls2NF07Ci0gICAgICBDdXJsX3ByaW50YWJsZV9hZGRyZXNzKGhwLCBidWYsIHNpemVvZihidWYpKTsKLQotICAgICAgaWYoaHAtPmFpX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyX2luOwotICAgICAgICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBBVFlQOiBJUHY0ID0gMSAqLwotCi0gICAgICAgIHNhZGRyX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopaHAtPmFpX2FkZHI7Ci0gICAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgIHNvY2tzcmVxW2xlbisrXSA9ICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyKVtpXTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY0ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgYnVmKTsKLSAgICAgIH0KLSNpZmRlZiBFTkFCTEVfSVBWNgotICAgICAgZWxzZSBpZihocC0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYWRkcl9pbjY7Ci0gICAgICAgIHNvY2tzcmVxW2xlbisrXSA9IDQ7IC8qIEFUWVA6IElQdjYgPSA0ICovCi0KLSAgICAgICAgc2FkZHJfaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWhwLT5haV9hZGRyOwotICAgICAgICBmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgICAgc29ja3NyZXFbbGVuKytdID0KLSAgICAgICAgICAgICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbjYtPnNpbjZfYWRkci5zNl9hZGRyKVtpXTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY2ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgYnVmKTsKLSAgICAgIH0KLSNlbmRpZgotICAgICAgZWxzZSB7Ci0gICAgICAgIGhwID0gTlVMTDsgLyogZmFpbCEgKi8KLQotICAgICAgICBmYWlsZihkYXRhLCAiU09DS1M1IGNvbm5lY3Rpb24gdG8gJXMgbm90IHN1cHBvcnRlZFxuIiwgYnVmKTsKLSAgICAgIH0KLQotICAgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGRucyk7IC8qIG5vdCB1c2VkIGFueW1vcmUgZnJvbSBub3cgb24gKi8KLSAgICB9CiAgICAgaWYoIWhwKSB7CiAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlc29sdmUgXCIlc1wiIGZvciBTT0NLUzUgY29ubmVjdC4iLAogICAgICAgICAgICAgaG9zdG5hbWUpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwogICAgIH0KLSAgfQogCi0gIHNvY2tzcmVxW2xlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSgocmVtb3RlX3BvcnQgPj4gOCkgJiAweGZmKTsgLyogUE9SVCBNU0IgKi8KLSAgc29ja3NyZXFbbGVuKytdID0gKHVuc2lnbmVkIGNoYXIpKHJlbW90ZV9wb3J0ICYgMHhmZik7ICAgICAgICAvKiBQT1JUIExTQiAqLworICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoaHAsIGRlc3QsIHNpemVvZihkZXN0KSk7CisgICAgZGVzdGxlbiA9IHN0cmxlbihkZXN0KTsKKyAgICBtc25wcmludGYoZGVzdCArIGRlc3RsZW4sIHNpemVvZihkZXN0KSAtIGRlc3RsZW4sICI6JWQiLCByZW1vdGVfcG9ydCk7CiAKLSNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCi0gIGlmKGNvbm4tPnNvY2tzNV9nc3NhcGlfZW5jdHlwZSkgewotICAgIGZhaWxmKGRhdGEsICJTT0NLUzUgR1NTLUFQSSBwcm90ZWN0aW9uIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7Ci0gIH0KLSAgZWxzZQotI2VuZGlmCi0gICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgbGVuLCAmd3JpdHRlbik7CisgICAgbGVuID0gMDsKKyAgICBzb2Nrc3JlcVtsZW4rK10gPSA1OyAvKiB2ZXJzaW9uIChTT0NLUzUpICovCisgICAgc29ja3NyZXFbbGVuKytdID0gMTsgLyogY29ubmVjdCAqLworICAgIHNvY2tzcmVxW2xlbisrXSA9IDA7IC8qIG11c3QgYmUgemVybyAqLworICAgIGlmKGhwLT5haV9mYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgaW50IGk7CisgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyX2luOworICAgICAgc29ja3NyZXFbbGVuKytdID0gMTsgLyogQVRZUDogSVB2NCA9IDEgKi8KIAotICBpZihjb2RlIHx8IChsZW4gIT0gd3JpdHRlbikpIHsKLSAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU09DS1M1IGNvbm5lY3QgcmVxdWVzdC4iKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0KLSAgbGVuID0gMTA7IC8qIG1pbmltdW0gcGFja2V0IHNpemUgaXMgMTAgKi8KLQotI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKLSAgaWYoY29ubi0+c29ja3M1X2dzc2FwaV9lbmN0eXBlKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlNPQ0tTNSBHU1MtQVBJIHByb3RlY3Rpb24gbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKLSAgfQotICBlbHNlCi0jZW5kaWYKLSAgICByZXN1bHQgPSBDdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLCAmYWN0dWFscmVhZCk7Ci0KLSAgaWYocmVzdWx0IHx8IChsZW4gIT0gYWN0dWFscmVhZCkpIHsKLSAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlY2VpdmUgU09DS1M1IGNvbm5lY3QgcmVxdWVzdCBhY2suIik7Ci0gICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgfQotCi0gIGlmKHNvY2tzcmVxWzBdICE9IDUpIHsgLyogdmVyc2lvbiAqLwotICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgIlNPQ0tTNSByZXBseSBoYXMgd3JvbmcgdmVyc2lvbiwgdmVyc2lvbiBzaG91bGQgYmUgNS4iKTsKLSAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICB9Ci0KLSAgLyogRml4OiBpbiBnZW5lcmFsLCByZXR1cm5lZCBCTkQuQUREUiBpcyB2YXJpYWJsZSBsZW5ndGggcGFyYW1ldGVyIGJ5IFJGQwotICAgICAxOTI4LCBzbyB0aGUgcmVwbHkgcGFja2V0IHNob3VsZCBiZSByZWFkIHVudGlsIHRoZSBlbmQgdG8gYXZvaWQgZXJyb3JzIGF0Ci0gICAgIHN1YnNlcXVlbnQgcHJvdG9jb2wgbGV2ZWwuCi0KLSAgICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi0gICAgfFZFUiB8IFJFUCB8ICBSU1YgIHwgQVRZUCB8IEJORC5BRERSIHwgQk5ELlBPUlQgfAotICAgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLSAgICB8IDEgIHwgIDEgIHwgWCcwMCcgfCAgMSAgIHwgVmFyaWFibGUgfCAgICAyICAgICB8Ci0gICAgKy0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotCi0gICAgIEFUWVA6Ci0gICAgIG8gIElQIHY0IGFkZHJlc3M6IFgnMDEnLCBCTkQuQUREUiA9IDQgYnl0ZQotICAgICBvICBkb21haW4gbmFtZTogIFgnMDMnLCBCTkQuQUREUiA9IFsgMSBieXRlIGxlbmd0aCwgc3RyaW5nIF0KLSAgICAgbyAgSVAgdjYgYWRkcmVzczogWCcwNCcsIEJORC5BRERSID0gMTYgYnl0ZQotICAgICAqLwotCi0gIC8qIENhbGN1bGF0ZSByZWFsIHBhY2tldCBzaXplICovCi0gIGlmKHNvY2tzcmVxWzNdID09IDMpIHsKLSAgICAvKiBkb21haW4gbmFtZSAqLwotICAgIGludCBhZGRybGVuID0gKGludCkgc29ja3NyZXFbNF07Ci0gICAgbGVuID0gNSArIGFkZHJsZW4gKyAyOwotICB9Ci0gIGVsc2UgaWYoc29ja3NyZXFbM10gPT0gNCkgewotICAgIC8qIElQdjYgKi8KLSAgICBsZW4gPSA0ICsgMTYgKyAyOwotICB9Ci0KLSAgLyogQXQgdGhpcyBwb2ludCB3ZSBhbHJlYWR5IHJlYWQgZmlyc3QgMTAgYnl0ZXMgKi8KLSNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCi0gIGlmKCFjb25uLT5zb2NrczVfZ3NzYXBpX2VuY3R5cGUpIHsKLSAgICAvKiBkZWNyeXB0X2dzc2FwaV9ibG9ja3JlYWQgYWxyZWFkeSByZWFkIHRoZSB3aG9sZSBwYWNrZXQgKi8KLSNlbmRpZgotICAgIGlmKGxlbiA+IDEwKSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKikmc29ja3NyZXFbMTBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtIDEwLCAmYWN0dWFscmVhZCk7Ci0gICAgICBpZihyZXN1bHQgfHwgKChsZW4gLSAxMCkgIT0gYWN0dWFscmVhZCkpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWNlaXZlIFNPQ0tTNSBjb25uZWN0IHJlcXVlc3QgYWNrLiIpOwotICAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgICAgc2FkZHJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKilocC0+YWlfYWRkcjsKKyAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBzb2Nrc3JlcVtsZW4rK10gPSAoKHVuc2lnbmVkIGNoYXIgKikmc2FkZHJfaW4tPnNpbl9hZGRyLnNfYWRkcilbaV07CiAgICAgICB9CisKKyAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY0ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgZGVzdCk7CisgICAgfQorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgZWxzZSBpZihocC0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICBpbnQgaTsKKyAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhZGRyX2luNjsKKyAgICAgIHNvY2tzcmVxW2xlbisrXSA9IDQ7IC8qIEFUWVA6IElQdjYgPSA0ICovCisKKyAgICAgIHNhZGRyX2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKilocC0+YWlfYWRkcjsKKyAgICAgIGZvcihpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgc29ja3NyZXFbbGVuKytdID0KKyAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikmc2FkZHJfaW42LT5zaW42X2FkZHIuczZfYWRkcilbaV07CisgICAgICB9CisKKyAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY2ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgZGVzdCk7CisgICAgfQorI2VuZGlmCisgICAgZWxzZSB7CisgICAgICBocCA9IE5VTEw7IC8qIGZhaWwhICovCisgICAgICBmYWlsZihkYXRhLCAiU09DS1M1IGNvbm5lY3Rpb24gdG8gJXMgbm90IHN1cHBvcnRlZFxuIiwgZGVzdCk7CisgICAgfQorCisgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGRucyk7IC8qIG5vdCB1c2VkIGFueW1vcmUgZnJvbSBub3cgb24gKi8KKyAgICBnb3RvIENPTk5FQ1RfUkVRX1NFTkQ7CisgIH0KKyAgQ09OTkVDVF9SRVNPTFZFX1JFTU9URToKKyAgY2FzZSBDT05ORUNUX1JFU09MVkVfUkVNT1RFOgorICAgIC8qIEF1dGhlbnRpY2F0aW9uIGlzIGNvbXBsZXRlLCBub3cgc3BlY2lmeSBkZXN0aW5hdGlvbiB0byB0aGUgcHJveHkgKi8KKyAgICBsZW4gPSAwOworICAgIHNvY2tzcmVxW2xlbisrXSA9IDU7IC8qIHZlcnNpb24gKFNPQ0tTNSkgKi8KKyAgICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAvKiBjb25uZWN0ICovCisgICAgc29ja3NyZXFbbGVuKytdID0gMDsgLyogbXVzdCBiZSB6ZXJvICovCisKKyAgICBpZighc29ja3M1X3Jlc29sdmVfbG9jYWwpIHsKKyAgICAgIHNvY2tzcmVxW2xlbisrXSA9IDM7IC8qIEFUWVA6IGRvbWFpbiBuYW1lID0gMyAqLworICAgICAgc29ja3NyZXFbbGVuKytdID0gKGNoYXIpIGhvc3RuYW1lX2xlbjsgLyogb25lIGJ5dGUgYWRkcmVzcyBsZW5ndGggKi8KKyAgICAgIG1lbWNweSgmc29ja3NyZXFbbGVuXSwgaG9zdG5hbWUsIGhvc3RuYW1lX2xlbik7IC8qIGFkZHJlc3Mgdy9vIE5VTEwgKi8KKyAgICAgIGxlbiArPSBob3N0bmFtZV9sZW47CisgICAgICBpbmZvZihkYXRhLCAiU09DS1M1IGNvbm5lY3QgdG8gJXM6JWQgKHJlbW90ZWx5IHJlc29sdmVkKVxuIiwKKyAgICAgICAgICAgIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7CisgICAgfQorICAgIC8qIEZBTExUSFJPVUdIICovCisKKyAgQ09OTkVDVF9SRVFfU0VORDoKKyAgY2FzZSBDT05ORUNUX1JFUV9TRU5EOgorICAgIC8qIFBPUlQgTVNCICovCisgICAgc29ja3NyZXFbbGVuKytdID0gKHVuc2lnbmVkIGNoYXIpKChyZW1vdGVfcG9ydCA+PiA4KSAmIDB4ZmYpOworICAgIC8qIFBPUlQgTFNCICovCisgICAgc29ja3NyZXFbbGVuKytdID0gKHVuc2lnbmVkIGNoYXIpKHJlbW90ZV9wb3J0ICYgMHhmZik7CisKKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgICAgaWYoY29ubi0+c29ja3M1X2dzc2FwaV9lbmN0eXBlKSB7CisgICAgICBmYWlsZihkYXRhLCAiU09DS1M1IEdTUy1BUEkgcHJvdGVjdGlvbiBub3QgeWV0IGltcGxlbWVudGVkLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisjZW5kaWYKKyAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgIHN4LT5vdXRzdGFuZGluZyA9IGxlbjsKKyAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfUkVRX1NFTkRJTkcpOworICAgIC8qIEZBTExUSFJPVUdIICovCisgIGNhc2UgQ09OTkVDVF9SRVFfU0VORElORzoKKyAgICByZXN1bHQgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2tmZCwgKGNoYXIgKilzeC0+b3V0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJndyaXR0ZW4pOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNPQ0tTNSBjb25uZWN0IHJlcXVlc3QuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBpZihzeC0+b3V0c3RhbmRpbmcgIT0gd3JpdHRlbikgeworICAgICAgLyogcmVtYWluIGluIHN0YXRlICovCisgICAgICBzeC0+b3V0c3RhbmRpbmcgLT0gd3JpdHRlbjsKKyAgICAgIHN4LT5vdXRwICs9IHdyaXR0ZW47CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgfQogI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKLSAgfQotI2VuZGlmCi0KLSAgaWYoc29ja3NyZXFbMV0gIT0gMCkgeyAvKiBBbnl0aGluZyBiZXNpZGVzIDAgaXMgYW4gZXJyb3IgKi8KLSAgICBpZihzb2Nrc3JlcVszXSA9PSAxKSB7Ci0gICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNSBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbOF0gPDwgOCkgfAotICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzldKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICBpZihjb25uLT5zb2NrczVfZ3NzYXBpX2VuY3R5cGUpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJTT0NLUzUgR1NTLUFQSSBwcm90ZWN0aW9uIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwogICAgIH0KLSAgICBlbHNlIGlmKHNvY2tzcmVxWzNdID09IDMpIHsKLSAgICAgIHVuc2lnbmVkIGNoYXIgcG9ydF91cHBlciA9ICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxW2xlbiAtIDJdOwotICAgICAgc29ja3NyZXFbbGVuIC0gMl0gPSAwOworI2VuZGlmCisgICAgc3gtPm91dHN0YW5kaW5nID0gMTA7IC8qIG1pbmltdW0gcGFja2V0IHNpemUgaXMgMTAgKi8KKyAgICBzeC0+b3V0cCA9IHNvY2tzcmVxOworICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVFfUkVBRCk7CisgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgY2FzZSBDT05ORUNUX1JFUV9SRUFEOgorICAgIHJlc3VsdCA9IEN1cmxfcmVhZF9wbGFpbihzb2NrZmQsIChjaGFyICopc3gtPm91dHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LT5vdXRzdGFuZGluZywgJmFjdHVhbHJlYWQpOworICAgIGlmKHJlc3VsdCAmJiAoQ1VSTEVfQUdBSU4gIT0gcmVzdWx0KSkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWNlaXZlIFNPQ0tTNSBjb25uZWN0IHJlcXVlc3QgYWNrLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgICAgZWxzZSBpZighcmVzdWx0ICYmICFhY3R1YWxyZWFkKSB7CisgICAgICAvKiBjb25uZWN0aW9uIGNsb3NlZCAqLworICAgICAgZmFpbGYoZGF0YSwgImNvbm5lY3Rpb24gdG8gcHJveHkgY2xvc2VkIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKGFjdHVhbHJlYWQgIT0gc3gtPm91dHN0YW5kaW5nKSB7CisgICAgICAvKiByZW1haW4gaW4gc3RhdGUgKi8KKyAgICAgIHN4LT5vdXRzdGFuZGluZyAtPSBhY3R1YWxyZWFkOworICAgICAgc3gtPm91dHAgKz0gYWN0dWFscmVhZDsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisKKyAgICBpZihzb2Nrc3JlcVswXSAhPSA1KSB7IC8qIHZlcnNpb24gKi8KICAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJXM6JWQuICglZCkiLAotICAgICAgICAgICAgKGNoYXIgKikmc29ja3NyZXFbNV0sCi0gICAgICAgICAgICAoKHBvcnRfdXBwZXIgPDwgOCkgfAotICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxW2xlbiAtIDFdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKLSAgICAgIHNvY2tzcmVxW2xlbiAtIDJdID0gcG9ydF91cHBlcjsKKyAgICAgICAgICAgICJTT0NLUzUgcmVwbHkgaGFzIHdyb25nIHZlcnNpb24sIHZlcnNpb24gc2hvdWxkIGJlIDUuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzFdICE9IDApIHsgLyogQW55dGhpbmcgYmVzaWRlcyAwIGlzIGFuIGVycm9yICovCisgICAgICBmYWlsZihkYXRhLCAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJXMuICglZCkiLAorICAgICAgICAgICAgaG9zdG5hbWUsICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorCisgICAgLyogRml4OiBpbiBnZW5lcmFsLCByZXR1cm5lZCBCTkQuQUREUiBpcyB2YXJpYWJsZSBsZW5ndGggcGFyYW1ldGVyIGJ5IFJGQworICAgICAgIDE5MjgsIHNvIHRoZSByZXBseSBwYWNrZXQgc2hvdWxkIGJlIHJlYWQgdW50aWwgdGhlIGVuZCB0byBhdm9pZCBlcnJvcnMKKyAgICAgICBhdCBzdWJzZXF1ZW50IHByb3RvY29sIGxldmVsLgorCisgICAgICAgKy0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICAgICAgIHxWRVIgfCBSRVAgfCAgUlNWICB8IEFUWVAgfCBCTkQuQUREUiB8IEJORC5QT1JUIHwKKyAgICAgICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICAgfCAxICB8ICAxICB8IFgnMDAnIHwgIDEgICB8IFZhcmlhYmxlIHwgICAgMiAgICAgfAorICAgICAgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKworICAgICAgIEFUWVA6CisgICAgICAgbyAgSVAgdjQgYWRkcmVzczogWCcwMScsIEJORC5BRERSID0gNCBieXRlCisgICAgICAgbyAgZG9tYWluIG5hbWU6ICBYJzAzJywgQk5ELkFERFIgPSBbIDEgYnl0ZSBsZW5ndGgsIHN0cmluZyBdCisgICAgICAgbyAgSVAgdjYgYWRkcmVzczogWCcwNCcsIEJORC5BRERSID0gMTYgYnl0ZQorICAgICovCisKKyAgICAvKiBDYWxjdWxhdGUgcmVhbCBwYWNrZXQgc2l6ZSAqLworICAgIGlmKHNvY2tzcmVxWzNdID09IDMpIHsKKyAgICAgIC8qIGRvbWFpbiBuYW1lICovCisgICAgICBpbnQgYWRkcmxlbiA9IChpbnQpIHNvY2tzcmVxWzRdOworICAgICAgbGVuID0gNSArIGFkZHJsZW4gKyAyOwogICAgIH0KICAgICBlbHNlIGlmKHNvY2tzcmVxWzNdID09IDQpIHsKLSAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJTAyeCUwMng6JTAyeCUwMng6IgotICAgICAgICAgICAgIiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiUwMnglMDJ4OiVkLiAoJWQpIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzhdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs5XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzEwXSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTFdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTJdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxM10sCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTddLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMThdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxOV0sCi0gICAgICAgICAgICAoKCh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzIwXSA8PCA4KSB8Ci0gICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMjFdKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICAgIC8qIElQdjYgKi8KKyAgICAgIGxlbiA9IDQgKyAxNiArIDI7CiAgICAgfQotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgZWxzZSBpZihzb2Nrc3JlcVszXSA9PSAxKSB7CisgICAgICBsZW4gPSA0ICsgNCArIDI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIlNPQ0tTNSByZXBseSBoYXMgd3JvbmcgYWRkcmVzcyB0eXBlLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisKKyAgICAvKiBBdCB0aGlzIHBvaW50IHdlIGFscmVhZHkgcmVhZCBmaXJzdCAxMCBieXRlcyAqLworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgICBpZighY29ubi0+c29ja3M1X2dzc2FwaV9lbmN0eXBlKSB7CisgICAgICAvKiBkZWNyeXB0X2dzc2FwaV9ibG9ja3JlYWQgYWxyZWFkeSByZWFkIHRoZSB3aG9sZSBwYWNrZXQgKi8KKyNlbmRpZgorICAgICAgaWYobGVuID4gMTApIHsKKyAgICAgICAgc3gtPm91dHN0YW5kaW5nID0gbGVuIC0gMTA7IC8qIGdldCB0aGUgcmVzdCAqLworICAgICAgICBzeC0+b3V0cCA9ICZzb2Nrc3JlcVsxMF07CisgICAgICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9SRVFfUkVBRF9NT1JFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzeHN0YXRlKGNvbm4sIENPTk5FQ1RfRE9ORSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgICB9CisjZW5kaWYKKyAgICAvKiBGQUxMVEhST1VHSCAqLworICBjYXNlIENPTk5FQ1RfUkVRX1JFQURfTU9SRToKKyAgICByZXN1bHQgPSBDdXJsX3JlYWRfcGxhaW4oc29ja2ZkLCAoY2hhciAqKXN4LT5vdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeC0+b3V0c3RhbmRpbmcsICZhY3R1YWxyZWFkKTsKKyAgICBpZihyZXN1bHQgJiYgKENVUkxFX0FHQUlOICE9IHJlc3VsdCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBTT0NLUzUgY29ubmVjdCByZXF1ZXN0IGFjay4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGVsc2UgaWYoIXJlc3VsdCAmJiAhYWN0dWFscmVhZCkgeworICAgICAgLyogY29ubmVjdGlvbiBjbG9zZWQgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJjb25uZWN0aW9uIHRvIHByb3h5IGNsb3NlZCIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgICAgZWxzZSBpZihhY3R1YWxyZWFkICE9IHN4LT5vdXRzdGFuZGluZykgeworICAgICAgLyogcmVtYWluIGluIHN0YXRlICovCisgICAgICBzeC0+b3V0c3RhbmRpbmcgLT0gYWN0dWFscmVhZDsKKyAgICAgIHN4LT5vdXRwICs9IGFjdHVhbHJlYWQ7CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICAgIHN4c3RhdGUoY29ubiwgQ09OTkVDVF9ET05FKTsKICAgfQogICBpbmZvZihkYXRhLCAiU09DS1M1IHJlcXVlc3QgZ3JhbnRlZC5cbiIpOwogCi0gICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOworICAqZG9uZSA9IFRSVUU7CiAgIHJldHVybiBDVVJMRV9PSzsgLyogUHJveHkgd2FzIHN1Y2Nlc3NmdWwhICovCiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrcy5oCmluZGV4IGRhYTA3YzEuLjY0YTc1NjMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3MuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjcsMTMgKzI3LDEzIEBACiAjaWZkZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAjZGVmaW5lIEN1cmxfU09DS1M0KGEsYixjLGQsZSkgQ1VSTEVfTk9UX0JVSUxUX0lOCiAjZGVmaW5lIEN1cmxfU09DS1M1KGEsYixjLGQsZSxmKSBDVVJMRV9OT1RfQlVJTFRfSU4KKyNkZWZpbmUgQ3VybF9TT0NLU19nZXRzb2NrKHgseSx6KSAwCiAjZWxzZQogLyoKICAqIEhlbHBlciByZWFkLWZyb20tc29ja2V0IGZ1bmN0aW9ucy4gRG9lcyB0aGUgc2FtZSBhcyBDdXJsX3JlYWQoKSBidXQgaXQKICAqIGJsb2NrcyB1bnRpbCBhbGwgYnl0ZXMgYW1vdW50IG9mIGJ1ZmZlcnNpemUgd2lsbCBiZSByZWFkLiBObyBtb3JlLCBubyBsZXNzLgogICoKLSAqIFRoaXMgaXMgU1RVUElEIEJMT0NLSU5HIGJlaGF2aW91ciB3aGljaCB3ZSBmcm93biB1cG9uLCBidXQgcmlnaHQgbm93IHRoaXMKLSAqIGlzIHdoYXQgd2UgaGF2ZS4uLgorICogVGhpcyBpcyBTVFVQSUQgQkxPQ0tJTkcgYmVoYXZpb3IKICAqLwogaW50IEN1cmxfYmxvY2tyZWFkX2FsbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLApAQCAtNDEsNiArNDEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGJ1ZmZlcnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKm4pOwogCitpbnQgQ3VybF9TT0NLU19nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCk7CiAvKgogICogVGhpcyBmdW5jdGlvbiBsb2dzIGluIHRvIGEgU09DS1M0KGEpIHByb3h5IGFuZCBzZW5kcyB0aGUgc3BlY2lmaWNzIHRvIHRoZQogICogZmluYWwgZGVzdGluYXRpb24gc2VydmVyLgpAQCAtNDksNyArNTIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtb3RlX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiBsb2dzIGluIHRvIGEgU09DS1M1IHByb3h5IGFuZCBzZW5kcyB0aGUgc3BlY2lmaWNzIHRvIHRoZQpAQCAtNjAsNyArNjQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtb3RlX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpOwogCiAjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQogLyoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzX2dzc2FwaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3NfZ3NzYXBpLmMKaW5kZXggNjUyOTRiYi4uMmUzNmI5OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3NfZ3NzYXBpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3NfZ3NzYXBpLmMKQEAgLTUsOCArNSw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFya3VzIE1vZWxsZXIsIDxtYXJrdXNfbW9lbGxlckBjb21wdXNlcnZlLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTExNSw3ICsxMTUsNyBAQAogICBnc3NfYnVmZmVyX2Rlc2MgIGdzc19zZW5kX3Rva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOwogICBnc3NfYnVmZmVyX2Rlc2MgIGdzc19yZWN2X3Rva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOwogICBnc3NfYnVmZmVyX2Rlc2MgIGdzc193X3Rva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotICBnc3NfYnVmZmVyX2Rlc2MqIGdzc190b2tlbiA9IEdTU19DX05PX0JVRkZFUjsKKyAgZ3NzX2J1ZmZlcl9kZXNjICpnc3NfdG9rZW4gPSBHU1NfQ19OT19CVUZGRVI7CiAgIGdzc19uYW1lX3QgICAgICAgc2VydmVyID0gR1NTX0NfTk9fTkFNRTsKICAgZ3NzX25hbWVfdCAgICAgICBnc3NfY2xpZW50X25hbWUgPSBHU1NfQ19OT19OQU1FOwogICB1bnNpZ25lZCBzaG9ydCAgIHVzX2xlbmd0aDsKQEAgLTE2Nyw2ICsxNjcsOCBAQAogICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgIH0KIAorICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7CisKICAgLyogQXMgbG9uZyBhcyB3ZSBuZWVkIHRvIGtlZXAgc2VuZGluZyBzb21lIGNvbnRleHQgaW5mbywgYW5kIHRoZXJlJ3Mgbm8gICovCiAgIC8qIGVycm9ycywga2VlcCBzZW5kaW5nIGl0Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBmb3IoOzspIHsKQEAgLTIyNSw3ICsyMjcsOCBAQAogCiAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3NlbmRfdG9rZW4pOwogICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc19yZWN2X3Rva2VuKTsKLSAgICBpZihnc3NfbWFqb3Jfc3RhdHVzICE9IEdTU19TX0NPTlRJTlVFX05FRURFRCkgYnJlYWs7CisgICAgaWYoZ3NzX21ham9yX3N0YXR1cyAhPSBHU1NfU19DT05USU5VRV9ORUVERUQpCisgICAgICBicmVhazsKIAogICAgIC8qIGFuYWx5c2UgcmVzcG9uc2UgKi8KIApAQCAtMzI1LDcgKzMyOCw3IEBACiAgIHVzZXJbZ3NzX3NlbmRfdG9rZW4ubGVuZ3RoXSA9ICdcMCc7CiAgIGdzc19yZWxlYXNlX25hbWUoJmdzc19zdGF0dXMsICZnc3NfY2xpZW50X25hbWUpOwogICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3Nfc2VuZF90b2tlbik7Ci0gIGluZm9mKGRhdGEsICJTT0NLUzUgc2VydmVyIGF1dGhlbmN0aWNhdGVkIHVzZXIgJXMgd2l0aCBHU1MtQVBJLlxuIix1c2VyKTsKKyAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBzZXJ2ZXIgYXV0aGVudGljYXRlZCB1c2VyICVzIHdpdGggR1NTLUFQSS5cbiIsdXNlcik7CiAgIGZyZWUodXNlcik7CiAgIHVzZXIgPSBOVUxMOwogCkBAIC01MTMsNiArNTE2LDggQEAKICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3NfcmVjdl90b2tlbik7CiAgIH0KIAorICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBUUlVFKTsKKwogICBpbmZvZihkYXRhLCAiU09DS1M1IGFjY2VzcyB3aXRoJXMgcHJvdGVjdGlvbiBncmFudGVkLlxuIiwKICAgICAgICAgKHNvY2tzcmVxWzBdID09IDApPyJvdXQgR1NTLUFQSSBkYXRhIjoKICAgICAgICAgKChzb2Nrc3JlcVswXSA9PSAxKT8iIEdTUy1BUEkgaW50ZWdyaXR5IjoiIEdTUy1BUEkgY29uZmlkZW50aWFsaXR5IikpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3Nfc3NwaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc29ja3Nfc3NwaS5jCmluZGV4IDU3MDI3ZWYuLjJmMWZkMzYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NvY2tzX3NzcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zb2Nrc19zc3BpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIE1hcmt1cyBNb2VsbGVyLCA8bWFya3VzX21vZWxsZXJAY29tcHVzZXJ2ZS5jb20+CiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKQEAgLTE1MywxMiArMTUzLDE0IEBACiAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgfQogCisgICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIEZBTFNFKTsKKwogICAvKiBBcyBsb25nIGFzIHdlIG5lZWQgdG8ga2VlcCBzZW5kaW5nIHNvbWUgY29udGV4dCBpbmZvLCBhbmQgdGhlcmUncyBubyAgKi8KICAgLyogZXJyb3JzLCBrZWVwIHNlbmRpbmcgaXQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIGZvcig7OykgewogICAgIFRDSEFSICpzbmFtZTsKIAotICAgIHNuYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoc2VydmljZV9uYW1lKTsKKyAgICBzbmFtZSA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcihzZXJ2aWNlX25hbWUpOwogICAgIGlmKCFzbmFtZSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC0xNzgsNyArMTgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NwaV9yZXRfZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4cGlyeSk7CiAKLSAgICBDdXJsX3VuaWNvZGVmcmVlKHNuYW1lKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShzbmFtZSk7CiAKICAgICBpZihzc3BpX3JlY3ZfdG9rZW4ucHZCdWZmZXIpIHsKICAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3JlY3ZfdG9rZW4ucHZCdWZmZXIpOwpAQCAtMzI1LDcgKzMyNyw3IEBACiAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBkZXRlcm1pbmUgdXNlciBuYW1lLiIpOwogICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgIH0KLSAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBzZXJ2ZXIgYXV0aGVuY3RpY2F0ZWQgdXNlciAlcyB3aXRoIEdTUy1BUEkuXG4iLAorICBpbmZvZihkYXRhLCAiU09DS1M1IHNlcnZlciBhdXRoZW50aWNhdGVkIHVzZXIgJXMgd2l0aCBHU1MtQVBJLlxuIiwKICAgICAgICAgbmFtZXMuc1VzZXJOYW1lKTsKICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKG5hbWVzLnNVc2VyTmFtZSk7CiAKQEAgLTU4Nyw2ICs1ODksNyBAQAogICAgIG1lbWNweShzb2Nrc3JlcSwgc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyLCBzc3BpX3dfdG9rZW5bMF0uY2JCdWZmZXIpOwogICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMF0ucHZCdWZmZXIpOwogICB9CisgICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOwogCiAgIGluZm9mKGRhdGEsICJTT0NLUzUgYWNjZXNzIHdpdGglcyBwcm90ZWN0aW9uIGdyYW50ZWQuXG4iLAogICAgICAgICAoc29ja3NyZXFbMF0gPT0gMCk/Im91dCBHU1MtQVBJIGRhdGEiOgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3BsYXkuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NwbGF5LmgKaW5kZXggNDYxMmVjMi4uOTI5MmYzNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3BsYXkuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zcGxheS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01OSwxMCArNTksNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgoaS50dl91c2VjKSA8IChqLnR2X3VzZWMpKSA/IC0xIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgoaS50dl91c2VjKSA+IChqLnR2X3VzZWMpKSA/ICAxIDogMCkpKSkKIAotI2lmZGVmIERFQlVHQlVJTEQKLXZvaWQgQ3VybF9zcGxheXByaW50KHN0cnVjdCBDdXJsX3RyZWUgKiB0LCBpbnQgZCwgY2hhciBvdXRwdXQpOwotI2Vsc2UKLSNkZWZpbmUgQ3VybF9zcGxheXByaW50KHgseSx6KSBDdXJsX25vcF9zdG10Ci0jZW5kaWYKLQogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NQTEFZX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC1saWJzc2guYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC1saWJzc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNmZDZiZC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zc2gtbGlic3NoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMTkgUmVkIEhhdCwgSW5jLgotICoKLSAqIEF1dGhvcnM6IE5pa29zIE1hdnJvZ2lhbm5vcG91bG9zLCBUb21hcyBNcmF6LCBTdGFuaXNsYXYgWmlkZWssCi0gKiAgICAgICAgICBSb2JlcnQgS29sY3VuLCBBbmRyZWFzIFNjaG5laWRlcgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZmRlZiBVU0VfTElCU1NICi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2luY2x1ZGUgPGxpYnNzaC9saWJzc2guaD4KLSNpbmNsdWRlIDxsaWJzc2gvc2Z0cC5oPgotCi0jaWZkZWYgSEFWRV9GQ05UTF9ICi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1VUU05BTUVfSAotI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX05FVERCX0gKLSNpbmNsdWRlIDxuZXRkYi5oPgotI2VuZGlmCi0jaWZkZWYgX19WTVMKLSNpbmNsdWRlIDxpbi5oPgotI2luY2x1ZGUgPGluZXQuaD4KLSNlbmRpZgotCi0jaWYgKGRlZmluZWQoTkVUV0FSRSkgJiYgZGVmaW5lZChfX05PVkVMTF9MSUJDX18pKQotI3VuZGVmIGluX2FkZHJfdAotI2RlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZwotI2VuZGlmCi0KLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KLSNpbmNsdWRlICJ1cmxkYXRhLmgiCi0jaW5jbHVkZSAic2VuZGYuaCIKLSNpbmNsdWRlICJob3N0aXAuaCIKLSNpbmNsdWRlICJwcm9ncmVzcy5oIgotI2luY2x1ZGUgInRyYW5zZmVyLmgiCi0jaW5jbHVkZSAiZXNjYXBlLmgiCi0jaW5jbHVkZSAiaHR0cC5oIiAgICAgICAgICAgICAgIC8qIGZvciBIVFRQIHByb3h5IHR1bm5lbCBzdHVmZiAqLwotI2luY2x1ZGUgInNzaC5oIgotI2luY2x1ZGUgInVybC5oIgotI2luY2x1ZGUgInNwZWVkY2hlY2suaCIKLSNpbmNsdWRlICJnZXRpbmZvLmgiCi0jaW5jbHVkZSAic3RyZHVwLmgiCi0jaW5jbHVkZSAic3RyY2FzZS5oIgotI2luY2x1ZGUgInZ0bHMvdnRscy5oIgotI2luY2x1ZGUgImNvbm5lY3QuaCIKLSNpbmNsdWRlICJzdHJlcnJvci5oIgotI2luY2x1ZGUgImluZXRfbnRvcC5oIgotI2luY2x1ZGUgInBhcnNlZGF0ZS5oIiAgICAgICAgICAvKiBmb3IgdGhlIHdlZWsgZGF5IGFuZCBtb250aCBuYW1lcyAqLwotI2luY2x1ZGUgInNvY2thZGRyLmgiICAgICAgICAgICAvKiByZXF1aXJlZCBmb3IgQ3VybF9zb2NrYWRkcl9zdG9yYWdlICovCi0jaW5jbHVkZSAic3RydG9vZmZ0LmgiCi0jaW5jbHVkZSAibXVsdGlpZi5oIgotI2luY2x1ZGUgInNlbGVjdC5oIgotI2luY2x1ZGUgIndhcm5sZXNzLmgiCi0KLS8qIGZvciBwZXJtaXNzaW9uIGFuZCBvcGVuIGZsYWdzICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotCi0vKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCi0jaW5jbHVkZSAiY3VybF9wcmludGYuaCIKLSNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0jaW5jbHVkZSAiY3VybF9wYXRoLmgiCi0KLS8qIEEgcmVjZW50IG1hY3JvIHByb3ZpZGVkIGJ5IGxpYnNzaC4gT3IgbWFrZSBvdXIgb3duLiAqLwotI2lmbmRlZiBTU0hfU1RSSU5HX0ZSRUVfQ0hBUgotLyogIWNoZWNrc3JjISBkaXNhYmxlIEFTU0lHTldJVEhJTkNPTkRJVElPTiAxICovCi0jZGVmaW5lIFNTSF9TVFJJTkdfRlJFRV9DSEFSKHgpIFwKLSAgICBkbyB7IGlmKCh4KSAhPSBOVUxMKSB7IHNzaF9zdHJpbmdfZnJlZV9jaGFyKHgpOyB4ID0gTlVMTDsgfSB9IHdoaWxlKDApCi0jZW5kaWYKLQotLyogTG9jYWwgZnVuY3Rpb25zOiAqLwotc3RhdGljIENVUkxjb2RlIG15c3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLXN0YXRpYyBDVVJMY29kZSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKTsKLXN0YXRpYyBDVVJMY29kZSBteXNzaF9kb19pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKTsKLXN0YXRpYyBDVVJMY29kZSBzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pOwotCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKLXN0YXRpYyBDVVJMY29kZSBzZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKLXN0YXRpYwotQ1VSTGNvZGUgc2Z0cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKLQotc3RhdGljIHZvaWQgc2Z0cF9xdW90ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwotc3RhdGljIHZvaWQgc2Z0cF9xdW90ZV9zdGF0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci0KLXN0YXRpYyBpbnQgbXlzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKLQotc3RhdGljIGludCBteXNzaF9wZXJmb3JtX2dldHNvY2soY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7Ci0KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci0KLS8qCi0gKiBTQ1AgcHJvdG9jb2wgaGFuZGxlci4KLSAqLwotCi1jb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zY3AgPSB7Ci0gICJTQ1AiLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLwotICBteXNzaF9zZXR1cF9jb25uZWN0aW9uLCAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCi0gIG15c3NoX2RvX2l0LCAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCi0gIHNjcF9kb25lLCAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLwotICBteXNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCi0gIG15c3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KLSAgc2NwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KLSAgbXlzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLwotICBteXNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCi0gIG15c3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLwotICBzY3BfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uX2NoZWNrICovCi0gIFBPUlRfU1NILCAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KLSAgQ1VSTFBST1RPX1NDUCwgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTiB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAvKiBmbGFncyAqLwotfTsKLQotLyoKLSAqIFNGVFAgcHJvdG9jb2wgaGFuZGxlci4KLSAqLwotCi1jb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwID0gewotICAiU0ZUUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLwotICBteXNzaF9zZXR1cF9jb25uZWN0aW9uLCAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KLSAgbXlzc2hfZG9faXQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLwotICBzZnRwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KLSAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCi0gIG15c3NoX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLwotICBteXNzaF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KLSAgc2Z0cF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLwotICBteXNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KLSAgbXlzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KLSAgbXlzc2hfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KLSAgc2Z0cF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLwotICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KLSAgQ1VSTFBST1RPX1NGVFAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLwotICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCi0gIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KLX07Ci0KLXN0YXRpYyBDVVJMY29kZSBzZnRwX2Vycm9yX3RvX0NVUkxFKGludCBlcnIpCi17Ci0gIHN3aXRjaChlcnIpIHsKLSAgICBjYXNlIFNTSF9GWF9PSzoKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLQotICAgIGNhc2UgU1NIX0ZYX05PX1NVQ0hfRklMRToKLSAgICBjYXNlIFNTSF9GWF9OT19TVUNIX1BBVEg6Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgY2FzZSBTU0hfRlhfUEVSTUlTU0lPTl9ERU5JRUQ6Ci0gICAgY2FzZSBTU0hfRlhfV1JJVEVfUFJPVEVDVDoKLSAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKLQotICAgIGNhc2UgU1NIX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFM6Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfRVhJU1RTOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIENVUkxFX1NTSDsKLX0KLQotI2lmbmRlZiBERUJVR0JVSUxECi0jZGVmaW5lIHN0YXRlKHgseSkgbXlzdGF0ZSh4LHkpCi0jZWxzZQotI2RlZmluZSBzdGF0ZSh4LHkpIG15c3RhdGUoeCx5LCBfX0xJTkVfXykKLSNlbmRpZgotCi0vKgotICogU1NIIFN0YXRlIG1hY2hpbmUgcmVsYXRlZCBjb2RlCi0gKi8KLS8qIFRoaXMgaXMgdGhlIE9OTFkgd2F5IHRvIGNoYW5nZSBTU0ggc3RhdGUhICovCi1zdGF0aWMgdm9pZCBteXN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3Noc3RhdGUgbm93c3RhdGUKLSNpZmRlZiBERUJVR0JVSUxECi0gICAgICAgICAgICAgICAgICAgICwgaW50IGxpbmVubwotI2VuZGlmCi0gICkKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0jaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQotICAvKiBmb3IgZGVidWcgcHVycG9zZXMgKi8KLSAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7Ci0gICAgIlNTSF9TVE9QIiwKLSAgICAiU1NIX0lOSVQiLAotICAgICJTU0hfU19TVEFSVFVQIiwKLSAgICAiU1NIX0hPU1RLRVkiLAotICAgICJTU0hfQVVUSExJU1QiLAotICAgICJTU0hfQVVUSF9QS0VZX0lOSVQiLAotICAgICJTU0hfQVVUSF9QS0VZIiwKLSAgICAiU1NIX0FVVEhfUEFTU19JTklUIiwKLSAgICAiU1NIX0FVVEhfUEFTUyIsCi0gICAgIlNTSF9BVVRIX0FHRU5UX0lOSVQiLAotICAgICJTU0hfQVVUSF9BR0VOVF9MSVNUIiwKLSAgICAiU1NIX0FVVEhfQUdFTlQiLAotICAgICJTU0hfQVVUSF9IT1NUX0lOSVQiLAotICAgICJTU0hfQVVUSF9IT1NUIiwKLSAgICAiU1NIX0FVVEhfS0VZX0lOSVQiLAotICAgICJTU0hfQVVUSF9LRVkiLAotICAgICJTU0hfQVVUSF9HU1NBUEkiLAotICAgICJTU0hfQVVUSF9ET05FIiwKLSAgICAiU1NIX1NGVFBfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1JFQUxQQVRIIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1BPU1RRVU9URV9JTklUIiwKLSAgICAiU1NIX1NGVFBfUVVPVEUiLAotICAgICJTU0hfU0ZUUF9ORVhUX1FVT1RFIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVCIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1NFVFNUQVQiLAotICAgICJTU0hfU0ZUUF9RVU9URV9TWU1MSU5LIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfTUtESVIiLAotICAgICJTU0hfU0ZUUF9RVU9URV9SRU5BTUUiLAotICAgICJTU0hfU0ZUUF9RVU9URV9STURJUiIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1VOTElOSyIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1NUQVRWRlMiLAotICAgICJTU0hfU0ZUUF9HRVRJTkZPIiwKLSAgICAiU1NIX1NGVFBfRklMRVRJTUUiLAotICAgICJTU0hfU0ZUUF9UUkFOU19JTklUIiwKLSAgICAiU1NIX1NGVFBfVVBMT0FEX0lOSVQiLAotICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklUIiwKLSAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlMiLAotICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUiIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfSU5JVCIsCi0gICAgIlNTSF9TRlRQX1JFQURESVIiLAotICAgICJTU0hfU0ZUUF9SRUFERElSX0xJTksiLAotICAgICJTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfRE9ORSIsCi0gICAgIlNTSF9TRlRQX0RPV05MT0FEX0lOSVQiLAotICAgICJTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUIiwKLSAgICAiU1NIX1NGVFBfQ0xPU0UiLAotICAgICJTU0hfU0ZUUF9TSFVURE9XTiIsCi0gICAgIlNTSF9TQ1BfVFJBTlNfSU5JVCIsCi0gICAgIlNTSF9TQ1BfVVBMT0FEX0lOSVQiLAotICAgICJTU0hfU0NQX0RPV05MT0FEX0lOSVQiLAotICAgICJTU0hfU0NQX0RPV05MT0FEIiwKLSAgICAiU1NIX1NDUF9ET05FIiwKLSAgICAiU1NIX1NDUF9TRU5EX0VPRiIsCi0gICAgIlNTSF9TQ1BfV0FJVF9FT0YiLAotICAgICJTU0hfU0NQX1dBSVRfQ0xPU0UiLAotICAgICJTU0hfU0NQX0NIQU5ORUxfRlJFRSIsCi0gICAgIlNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QiLAotICAgICJTU0hfU0VTU0lPTl9GUkVFIiwKLSAgICAiUVVJVCIKLSAgfTsKLQotCi0gIGlmKHNzaGMtPnN0YXRlICE9IG5vd3N0YXRlKSB7Ci0gICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCAlcCBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlcyAobGluZSAlZClcbiIsCi0gICAgICAgICAgKHZvaWQgKikgc3NoYywgbmFtZXNbc3NoYy0+c3RhdGVdLCBuYW1lc1tub3dzdGF0ZV0sCi0gICAgICAgICAgbGluZW5vKTsKLSAgfQotI2VuZGlmCi0KLSAgc3NoYy0+c3RhdGUgPSBub3dzdGF0ZTsKLX0KLQotLyogTXVsdGlwbGUgb3B0aW9uczoKLSAqIDEuIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XSBpcyBzZXQgd2l0aCBhbiBNRDUKLSAqICAgIGhhc2ggKDkwcyBzdHlsZSBhdXRoLCBub3Qgc3VyZSB3ZSBzaG91bGQgaGF2ZSBpdCBoZXJlKQotICogMi4gZGF0YS0+c2V0LnNzaF9rZXlmdW5jIGNhbGxiYWNrIGlzIHNldC4gVGhlbiB3ZSBkbyB0cnVzdCBvbiBmaXJzdAotICogICAgdXNlLiBXZSBldmVuIHNhdmUgb24ga25vd25ob3N0cyBpZiBDVVJMS0hTVEFUX0ZJTkVfQUREX1RPX0ZJTEUKLSAqICAgIGlzIHJldHVybmVkIGJ5IGl0LgotICogMy4gbm9uZSBvZiB0aGUgYWJvdmUuIFdlIG9ubHkgYWNjZXB0IGlmIGl0IGlzIHByZXNlbnQgb24ga25vd24gaG9zdHMuCi0gKgotICogUmV0dXJucyBTU0hfT0sgb3IgU1NIX0VSUk9SLgotICovCi1zdGF0aWMgaW50IG15c3NoX2lzX2tub3duKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgaW50IHJjOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gIHNzaF9rZXkgcHVia2V5OwotICBzaXplX3QgaGxlbjsKLSAgdW5zaWduZWQgY2hhciAqaGFzaCA9IE5VTEw7Ci0gIGNoYXIgKmJhc2U2NCA9IE5VTEw7Ci0gIGludCB2c3RhdGU7Ci0gIGVudW0gY3VybF9raG1hdGNoIGtleW1hdGNoOwotICBzdHJ1Y3QgY3VybF9raGtleSBmb3VuZGtleTsKLSAgY3VybF9zc2hrZXljYWxsYmFjayBmdW5jID0KLSAgICBkYXRhLT5zZXQuc3NoX2tleWZ1bmM7Ci0KLSAgcmMgPSBzc2hfZ2V0X3B1YmxpY2tleShzc2hjLT5zc2hfc2Vzc2lvbiwgJnB1YmtleSk7Ci0gIGlmKHJjICE9IFNTSF9PSykKLSAgICByZXR1cm4gcmM7Ci0KLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdKSB7Ci0gICAgcmMgPSBzc2hfZ2V0X3B1YmxpY2tleV9oYXNoKHB1YmtleSwgU1NIX1BVQkxJQ0tFWV9IQVNIX01ENSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhc2gsICZobGVuKTsKLSAgICBpZihyYyAhPSBTU0hfT0spCi0gICAgICBnb3RvIGNsZWFudXA7Ci0KLSAgICBpZihobGVuICE9IHN0cmxlbihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0pIHx8Ci0gICAgICAgbWVtY21wKCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0sIGhhc2gsIGhsZW4pKSB7Ci0gICAgICByYyA9IFNTSF9FUlJPUjsKLSAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICByYyA9IFNTSF9PSzsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICBpZihkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5aG9zdCAhPSBUUlVFKSB7Ci0gICAgcmMgPSBTU0hfT0s7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci0KLSAgdnN0YXRlID0gc3NoX2lzX3NlcnZlcl9rbm93bihzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gIHN3aXRjaCh2c3RhdGUpIHsKLSAgICBjYXNlIFNTSF9TRVJWRVJfS05PV05fT0s6Ci0gICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX09LOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTU0hfU0VSVkVSX0ZJTEVfTk9UX0ZPVU5EOgotICAgICAgLyogZmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFNTSF9TRVJWRVJfTk9UX0tOT1dOOgotICAgICAga2V5bWF0Y2ggPSBDVVJMS0hNQVRDSF9NSVNTSU5HOwotICAgICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX01JU01BVENIOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZihmdW5jKSB7IC8qIHVzZSBjYWxsYmFjayB0byBkZXRlcm1pbmUgYWN0aW9uICovCi0gICAgcmMgPSBzc2hfcGtpX2V4cG9ydF9wdWJrZXlfYmFzZTY0KHB1YmtleSwgJmJhc2U2NCk7Ci0gICAgaWYocmMgIT0gU1NIX09LKQotICAgICAgZ290byBjbGVhbnVwOwotCi0gICAgZm91bmRrZXkua2V5ID0gYmFzZTY0OwotICAgIGZvdW5ka2V5LmxlbiA9IHN0cmxlbihiYXNlNjQpOwotCi0gICAgc3dpdGNoKHNzaF9rZXlfdHlwZShwdWJrZXkpKSB7Ci0gICAgICBjYXNlIFNTSF9LRVlUWVBFX1JTQToKLSAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfUlNBOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU1NIX0tFWVRZUEVfUlNBMToKLSAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfUlNBMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNTSF9LRVlUWVBFX0VDRFNBOgotICAgICAgICBmb3VuZGtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9FQ0RTQTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLDcsMCkKLSAgICAgIGNhc2UgU1NIX0tFWVRZUEVfRUQyNTUxOToKLSAgICAgICAgZm91bmRrZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRUQyNTUxOTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgIGNhc2UgU1NIX0tFWVRZUEVfRFNTOgotICAgICAgICBmb3VuZGtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9EU1M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmMgPSBTU0hfRVJST1I7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICAvKiB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIGVxdWl2YWxlbnQgdG8ga25vd25rZXkuIEFsd2F5cyBOVUxMICovCi0gICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7Ci0gICAgcmMgPSBmdW5jKGRhdGEsIE5VTEwsICZmb3VuZGtleSwgLyogZnJvbSB0aGUgcmVtb3RlIGhvc3QgKi8KLSAgICAgICAgICAgICAga2V5bWF0Y2gsIGRhdGEtPnNldC5zc2hfa2V5ZnVuY191c2VycCk7Ci0gICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwotCi0gICAgc3dpdGNoKHJjKSB7Ci0gICAgICBjYXNlIENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRToKLSAgICAgICAgcmMgPSBzc2hfd3JpdGVfa25vd25ob3N0KHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDVVJMS0hTVEFUX0ZJTkU6Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogLyogUkVKRUNUL0RFRkVSICovCi0gICAgICAgIHJjID0gU1NIX0VSUk9SOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICB9Ci0gIGVsc2UgewotICAgIGlmKGtleW1hdGNoICE9IENVUkxLSE1BVENIX09LKSB7Ci0gICAgICByYyA9IFNTSF9FUlJPUjsKLSAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gIH0KLSAgcmMgPSBTU0hfT0s7Ci0KLWNsZWFudXA6Ci0gIGlmKGhhc2gpCi0gICAgc3NoX2NsZWFuX3B1YmtleV9oYXNoKCZoYXNoKTsKLSAgc3NoX2tleV9mcmVlKHB1YmtleSk7Ci0gIHJldHVybiByYzsKLX0KLQotI2RlZmluZSBNT1ZFX1RPX0VSUk9SX1NUQVRFKF9yKSB7IFwKLSAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7IFwKLSAgc3NoYy0+YWN0dWFsY29kZSA9IF9yOyBcCi0gIHJjID0gU1NIX0VSUk9SOyBcCi0gIGJyZWFrOyBcCi19Ci0KLSNkZWZpbmUgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCkgeyBcCi0gIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsgXAotICBzc2hjLT5hY3R1YWxjb2RlID0gc2Z0cF9lcnJvcl90b19DVVJMRShzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsgXAotICByYyA9IFNTSF9FUlJPUjsgXAotICBicmVhazsgXAotfQotCi0jZGVmaW5lIE1PVkVfVE9fTEFTVF9BVVRIIFwKLSAgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX1BBU1NXT1JEKSB7IFwKLSAgICByYyA9IFNTSF9PSzsgXAotICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1NfSU5JVCk7IFwKLSAgICBicmVhazsgXAotICB9IFwKLSAgZWxzZSB7IFwKLSAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7IFwKLSAgfQotCi0jZGVmaW5lIE1PVkVfVE9fVEVSVElBUllfQVVUSCBcCi0gIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9JTlRFUkFDVElWRSkgeyBcCi0gICAgcmMgPSBTU0hfT0s7IFwKLSAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7IFwKLSAgICBicmVhazsgXAotICB9IFwKLSAgZWxzZSB7IFwKLSAgICBNT1ZFX1RPX0xBU1RfQVVUSDsgXAotICB9Ci0KLSNkZWZpbmUgTU9WRV9UT19TRUNPTkRBUllfQVVUSCBcCi0gIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9HU1NBUElfTUlDKSB7IFwKLSAgICByYyA9IFNTSF9PSzsgXAotICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0dTU0FQSSk7IFwKLSAgICBicmVhazsgXAotICB9IFwKLSAgZWxzZSB7IFwKLSAgICBNT1ZFX1RPX1RFUlRJQVJZX0FVVEg7IFwKLSAgfQotCi1zdGF0aWMKLWludCBteXNzaF9hdXRoX2ludGVyYWN0aXZlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgaW50IHJjOwotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgaW50IG5wcm9tcHRzOwotCi1yZXN0YXJ0OgotICBzd2l0Y2goc3NoYy0+a2JkX3N0YXRlKSB7Ci0gICAgY2FzZSAwOgotICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKQotICAgICAgICByZXR1cm4gU1NIX0FHQUlOOwotCi0gICAgICBpZihyYyAhPSBTU0hfQVVUSF9JTkZPKQotICAgICAgICByZXR1cm4gU1NIX0VSUk9SOwotCi0gICAgICBucHJvbXB0cyA9IHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0bnByb21wdHMoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgaWYobnByb21wdHMgPT0gU1NIX0VSUk9SIHx8IG5wcm9tcHRzICE9IDEpCi0gICAgICAgIHJldHVybiBTU0hfRVJST1I7Ci0KLSAgICAgIHJjID0gc3NoX3VzZXJhdXRoX2tiZGludF9zZXRhbnN3ZXIoc3NoYy0+c3NoX3Nlc3Npb24sIDAsIGNvbm4tPnBhc3N3ZCk7Ci0gICAgICBpZihyYyA8IDApCi0gICAgICAgIHJldHVybiBTU0hfRVJST1I7Ci0KLSAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgMToKLSAgICAgIHNzaGMtPmtiZF9zdGF0ZSA9IDE7Ci0KLSAgICAgIHJjID0gc3NoX3VzZXJhdXRoX2tiZGludChzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikKLSAgICAgICAgcmV0dXJuIFNTSF9BR0FJTjsKLSAgICAgIGVsc2UgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykKLSAgICAgICAgcmMgPSBTU0hfT0s7Ci0gICAgICBlbHNlIGlmKHJjID09IFNTSF9BVVRIX0lORk8pIHsKLSAgICAgICAgbnByb21wdHMgPSBzc2hfdXNlcmF1dGhfa2JkaW50X2dldG5wcm9tcHRzKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgaWYobnByb21wdHMgIT0gMCkKLSAgICAgICAgICByZXR1cm4gU1NIX0VSUk9SOwotCi0gICAgICAgIHNzaGMtPmtiZF9zdGF0ZSA9IDI7Ci0gICAgICAgIGdvdG8gcmVzdGFydDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmMgPSBTU0hfRVJST1I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICBzc2hjLT5rYmRfc3RhdGUgPSAyOwotCi0gICAgICByYyA9IHNzaF91c2VyYXV0aF9rYmRpbnQoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsIE5VTEwpOwotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pCi0gICAgICAgIHJldHVybiBTU0hfQUdBSU47Ci0gICAgICBlbHNlIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpCi0gICAgICAgIHJjID0gU1NIX09LOwotICAgICAgZWxzZQotICAgICAgICByYyA9IFNTSF9FUlJPUjsKLQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBTU0hfRVJST1I7Ci0gIH0KLQotICBzc2hjLT5rYmRfc3RhdGUgPSAwOwotICByZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBzc2hfc3RhdGVtYWNoX2FjdCgpIHJ1bnMgdGhlIFNTSCBzdGF0ZSBtYWNoaW5lIGFzIGZhciBhcyBpdCBjYW4gd2l0aG91dAotICogYmxvY2tpbmcgYW5kIHdpdGhvdXQgcmVhY2hpbmcgdGhlIGVuZC4gIFRoZSBkYXRhIHRoZSBwb2ludGVyICdibG9jaycgcG9pbnRzCi0gKiB0byB3aWxsIGJlIHNldCB0byBUUlVFIGlmIHRoZSBsaWJzc2ggZnVuY3Rpb24gcmV0dXJucyBTU0hfQUdBSU4KLSAqIG1lYW5pbmcgaXQgd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkeQotICovCi1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfc3RhdGVtYWNoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmJsb2NrKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBTU0hQUk9UTyAqcHJvdG9wID0gZGF0YS0+cmVxLnByb3RvcDsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwotICBpbnQgcmMgPSBTU0hfTk9fRVJST1IsIGVycjsKLSAgY2hhciAqbmV3X3JlYWRkaXJfbGluZTsKLSAgaW50IHNlZWtlcnIgPSBDVVJMX1NFRUtGVU5DX09LOwotICBjb25zdCBjaGFyICplcnJfbXNnOwotICAqYmxvY2sgPSAwOyAgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBub3QgYmxvY2tpbmcgYnkgZGVmYXVsdCAqLwotCi0gIGRvIHsKLQotICAgIHN3aXRjaChzc2hjLT5zdGF0ZSkgewotICAgIGNhc2UgU1NIX0lOSVQ6Ci0gICAgICBzc2hjLT5zZWNvbmRDcmVhdGVEaXJzID0gMDsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PSzsKLQotI2lmIDAKLSAgICAgIHNzaF9zZXRfbG9nX2xldmVsKFNTSF9MT0dfUFJPVE9DT0wpOwotI2VuZGlmCi0KLSAgICAgIC8qIFNldCBsaWJzc2ggdG8gbm9uLWJsb2NraW5nLCBzaW5jZSBldmVyeXRoaW5nIGludGVybmFsbHkgaXMKLSAgICAgICAgIG5vbi1ibG9ja2luZyAqLwotICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMCk7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TX1NUQVJUVVApOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLQotICAgIGNhc2UgU1NIX1NfU1RBUlRVUDoKLSAgICAgIHJjID0gc3NoX2Nvbm5lY3Qoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgaWYocmMgPT0gU1NIX0FHQUlOKQotICAgICAgICBicmVhazsKLQotICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbiIpOwotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0ZBSUxFRF9JTklUKTsKLSAgICAgIH0KLQotICAgICAgc3RhdGUoY29ubiwgU1NIX0hPU1RLRVkpOwotCi0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgU1NIX0hPU1RLRVk6Ci0KLSAgICAgIHJjID0gbXlzc2hfaXNfa25vd24oY29ubik7Ci0gICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT04pOwotICAgICAgfQotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSExJU1QpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIFNTSF9BVVRITElTVDp7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IEZBTFNFOwotCi0gICAgICAgIHJjID0gc3NoX3VzZXJhdXRoX25vbmUoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwpOwotICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgewotICAgICAgICAgIHJjID0gU1NIX0FHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgewotICAgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0ZWQgd2l0aCBub25lXG4iKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHJjID09IFNTSF9BVVRIX0VSUk9SKSB7Ci0gICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3NoYy0+YXV0aF9tZXRob2RzID0gc3NoX3VzZXJhdXRoX2xpc3Qoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwpOwotICAgICAgICBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfUFVCTElDS0VZKSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWV9JTklUKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiQXV0aGVudGljYXRpb24gdXNpbmcgU1NIIHB1YmxpYyBrZXkgZmlsZVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfR1NTQVBJX01JQykgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0dTU0FQSSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfSU5URVJBQ1RJVkUpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzc2hjLT5hdXRoX21ldGhvZHMgJiBTU0hfQVVUSF9NRVRIT0RfUEFTU1dPUkQpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTX0lOSVQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgIC8qIHVuc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAqLwotICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIGNhc2UgU1NIX0FVVEhfUEtFWV9JTklUOgotICAgICAgaWYoIShkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfUFVCTElDS0VZKSkgewotICAgICAgICBNT1ZFX1RPX1NFQ09OREFSWV9BVVRIOwotICAgICAgfQotCi0gICAgICAvKiBUd28gY2hvaWNlcywgKDEpIHByaXZhdGUga2V5IHdhcyBnaXZlbiBvbiBDTUQsCi0gICAgICAgKiAoMikgdXNlIHRoZSAiZGVmYXVsdCIga2V5cy4gKi8KLSAgICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QUklWQVRFX0tFWV0pIHsKLSAgICAgICAgaWYoc3NoYy0+cHVia2V5ICYmICFkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QpIHsKLSAgICAgICAgICByYyA9IHNzaF91c2VyYXV0aF90cnlfcHVibGlja2V5KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cHVia2V5KTsKLSAgICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgewotICAgICAgICAgICAgcmMgPSBTU0hfQUdBSU47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgICAgIE1PVkVfVE9fU0VDT05EQVJZX0FVVEg7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmMgPSBzc2hfcGtpX2ltcG9ydF9wcml2a2V5X2ZpbGUoZGF0YS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5zdHJbU1RSSU5HX1NTSF9QUklWQVRFX0tFWV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wua2V5X3Bhc3N3ZCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJnNzaGMtPnByaXZrZXkpOwotICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IGxvYWQgcHJpdmF0ZSBrZXkgZmlsZSAlcyIsCi0gICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BSSVZBVEVfS0VZXSk7Ci0gICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfcHVibGlja2V5X2F1dG8oc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wua2V5X3Bhc3N3ZCk7Ci0gICAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7Ci0gICAgICAgICAgcmMgPSBTU0hfQUdBSU47Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgewotICAgICAgICAgIHJjID0gU1NIX09LOwotICAgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkNvbXBsZXRlZCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIE1PVkVfVE9fU0VDT05EQVJZX0FVVEg7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNTSF9BVVRIX1BLRVk6Ci0gICAgICByYyA9IHNzaF91c2VyYXV0aF9wdWJsaWNrZXkoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsIHNzaGMtPnByaXZrZXkpOwotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKLSAgICAgICAgcmMgPSBTU0hfQUdBSU47Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgIGluZm9mKGRhdGEsICJDb21wbGV0ZWQgcHVibGljIGtleSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gKHJjOiAlZClcbiIsIHJjKTsKLSAgICAgICAgTU9WRV9UT19TRUNPTkRBUllfQVVUSDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9HU1NBUEk6Ci0gICAgICBpZighKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9HU1NBUEkpKSB7Ci0gICAgICAgIE1PVkVfVE9fVEVSVElBUllfQVVUSDsKLSAgICAgIH0KLQotICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfZ3NzYXBpKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7Ci0gICAgICAgIHJjID0gU1NIX0FHQUlOOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgewotICAgICAgICByYyA9IFNTSF9PSzsKLSAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKLSAgICAgICAgaW5mb2YoZGF0YSwgIkNvbXBsZXRlZCBnc3NhcGkgYXV0aGVudGljYXRpb25cbiIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIE1PVkVfVE9fVEVSVElBUllfQVVUSDsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9LRVlfSU5JVDoKLSAgICAgIGlmKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9LRVlCT0FSRCkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVkpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIE1PVkVfVE9fTEFTVF9BVVRIOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0tFWToKLQotICAgICAgLyogQXV0aGVudGljYXRpb24gZmFpbGVkLiBDb250aW51ZSB3aXRoIGtleWJvYXJkLWludGVyYWN0aXZlIG5vdy4gKi8KLSAgICAgIHJjID0gbXlzc2hfYXV0aF9pbnRlcmFjdGl2ZShjb25uKTsKLSAgICAgIGlmKHJjID09IFNTSF9BR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjID09IFNTSF9PSykgewotICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICBpbmZvZihkYXRhLCAiY29tcGxldGVkIGtleWJvYXJkIGludGVyYWN0aXZlIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX1BBU1NfSU5JVDoKLSAgICAgIGlmKCEoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BBU1NXT1JEKSkgewotICAgICAgICAvKiBIb3N0IGtleSBhdXRoZW50aWNhdGlvbiBpcyBpbnRlbnRpb25hbGx5IG5vdCBpbXBsZW1lbnRlZCAqLwotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTKTsKLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0KLSAgICBjYXNlIFNTSF9BVVRIX1BBU1M6Ci0gICAgICByYyA9IHNzaF91c2VyYXV0aF9wYXNzd29yZChzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwgY29ubi0+cGFzc3dkKTsKLSAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7Ci0gICAgICAgIHJjID0gU1NIX0FHQUlOOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykgewotICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICBpbmZvZihkYXRhLCAiQ29tcGxldGVkIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0RPTkU6Ci0gICAgICBpZighc3NoYy0+YXV0aGVkKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJBdXRoZW50aWNhdGlvbiBmYWlsdXJlIik7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gYXV0aGVudGljYXRlZCBzc2ggc2Vzc2lvbi4KLSAgICAgICAqLwotICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlXG4iKTsKLQotICAgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgICAgICAvKiBTU0ggaXMgY29ubmVjdGVkICovCi0KLSAgICAgIGNvbm4tPnNvY2tmZCA9IHNvY2s7Ci0gICAgICBjb25uLT53cml0ZXNvY2tmZCA9IENVUkxfU09DS0VUX0JBRDsKLQotICAgICAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgPT0gQ1VSTFBST1RPX1NGVFApIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfSU5JVCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaW5mb2YoZGF0YSwgIlNTSCBDT05ORUNUIHBoYXNlIGRvbmVcbiIpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0lOSVQ6Ci0gICAgICBzc2hfc2V0X2Jsb2NraW5nKHNzaGMtPnNzaF9zZXNzaW9uLCAxKTsKLQotICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gc2Z0cF9uZXcoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgaWYoIXNzaGMtPnNmdHBfc2Vzc2lvbikgewotICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBpbml0aWFsaXppbmcgc2Z0cCBzZXNzaW9uOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9DT1VMRE5UX0NPTk5FQ1QpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgcmMgPSBzZnRwX2luaXQoc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgIGlmKHJjICE9IFNTSF9PSykgewotICAgICAgICByYyA9IHNmdHBfZ2V0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpemluZyBzZnRwIHNlc3Npb246ICVzIiwKLSAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKHNmdHBfZXJyb3JfdG9fQ1VSTEUocmMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFMUEFUSCk7Ci0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgU1NIX1NGVFBfUkVBTFBBVEg6Ci0gICAgICAvKgotICAgICAgICogR2V0IHRoZSAiaG9tZSIgZGlyZWN0b3J5Ci0gICAgICAgKi8KLSAgICAgIHNzaGMtPmhvbWVkaXIgPSBzZnRwX2Nhbm9uaWNhbGl6ZV9wYXRoKHNzaGMtPnNmdHBfc2Vzc2lvbiwgIi4iKTsKLSAgICAgIGlmKHNzaGMtPmhvbWVkaXIgPT0gTlVMTCkgewotICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0NPVUxETlRfQ09OTkVDVCk7Ci0gICAgICB9Ci0gICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gc3NoYy0+aG9tZWRpcjsKLQotICAgICAgLyogVGhpcyBpcyB0aGUgbGFzdCBzdGVwIGluIHRoZSBTRlRQIGNvbm5lY3QgcGhhc2UuIERvIG5vdGUgdGhhdCB3aGlsZQotICAgICAgICAgd2UgZ2V0IHRoZSBob21lZGlyIGhlcmUsIHdlIGdldCB0aGUgIndvcmtpbmdwYXRoIiBpbiB0aGUgRE8gYWN0aW9uCi0gICAgICAgICBzaW5jZSB0aGUgaG9tZWRpciB3aWxsIHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIHJlcXVlc3QgYnV0IHRoZQotICAgICAgICAgd29ya2luZyBwYXRoIHdpbGwgbm90LiAqLwotICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKSk7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfSU5JVDoKLQotICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmcHJvdG9wLT5wYXRoKTsKLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZihkYXRhLT5zZXQucXVvdGUpIHsKLSAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOwotICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnF1b3RlOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfR0VUSU5GTyk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQ6Ci0gICAgICBpZihkYXRhLT5zZXQucG9zdHF1b3RlKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJTZW5kaW5nIHF1b3RlIGNvbW1hbmRzXG4iKTsKLSAgICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IGRhdGEtPnNldC5wb3N0cXVvdGU7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEU6Ci0gICAgICAvKiBTZW5kIGFueSBxdW90ZSBjb21tYW5kcyAqLwotICAgICAgc2Z0cF9xdW90ZShjb25uKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9ORVhUX1FVT1RFOgotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLQotICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IHNzaGMtPnF1b3RlX2l0ZW0tPm5leHQ7Ci0KLSAgICAgIGlmKHNzaGMtPnF1b3RlX2l0ZW0pIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NUQVQ6Ci0gICAgICBzZnRwX3F1b3RlX3N0YXQoY29ubik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVDoKLSAgICAgIHJjID0gc2Z0cF9zZXRzdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9hdHRycyk7Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkF0dGVtcHQgdG8gc2V0IFNGVFAgc3RhdHMgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgLyogc3NoYy0+YWN0dWFsY29kZSA9IHNmdHBfZXJyb3JfdG9fQ1VSTEUoZXJyKTsKLSAgICAgICAgICogd2UgZG8gbm90IHNlbmQgdGhlIGFjdHVhbCBlcnJvcjsgd2UgcmV0dXJuCi0gICAgICAgICAqIHRoZSBlcnJvciB0aGUgbGlic3NoMiBiYWNrZW5kIGlzIHJldHVybmluZyAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NZTUxJTks6Ci0gICAgICByYyA9IHNmdHBfc3ltbGluayhzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyLAotICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzeW1saW5rIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9NS0RJUjoKLSAgICAgIHJjID0gc2Z0cF9ta2Rpcihzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgIChtb2RlX3QpZGF0YS0+c2V0Lm5ld19kaXJlY3RvcnlfcGVybXMpOwotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIm1rZGlyIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9SRU5BTUU6Ci0gICAgICByYyA9IHNmdHBfcmVuYW1lKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCi0gICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgICBmYWlsZihkYXRhLCAicmVuYW1lIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9STURJUjoKLSAgICAgIHJjID0gc2Z0cF9ybWRpcihzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJybWRpciBjb21tYW5kIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfVU5MSU5LOgotICAgICAgcmMgPSBzZnRwX3VubGluayhzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJybSBjb21tYW5kIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUzoKLSAgICB7Ci0gICAgICBzZnRwX3N0YXR2ZnNfdCBzdGF0dmZzOwotCi0gICAgICBzdGF0dmZzID0gc2Z0cF9zdGF0dmZzKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgaWYoIXN0YXR2ZnMgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzdGF0dmZzIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHN0YXR2ZnMpIHsKLSAgICAgICAgY2hhciAqdG1wID0gYXByaW50Zigic3RhdHZmczpcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ic2l6ZTogJWxsdVxuIiAiZl9mcnNpemU6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ibG9ja3M6ICVsbHVcbiIgImZfYmZyZWU6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9iYXZhaWw6ICVsbHVcbiIgImZfZmlsZXM6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mZnJlZTogJWxsdVxuIiAiZl9mYXZhaWw6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mc2lkOiAlbGx1XG4iICJmX2ZsYWc6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9uYW1lbWF4OiAlbGx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfYnNpemUsIHN0YXR2ZnMtPmZfZnJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfYmxvY2tzLCBzdGF0dmZzLT5mX2JmcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfYmF2YWlsLCBzdGF0dmZzLT5mX2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfZmZyZWUsIHN0YXR2ZnMtPmZfZmF2YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfZnNpZCwgc3RhdHZmcy0+Zl9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMtPmZfbmFtZW1heCk7Ci0gICAgICAgIHNmdHBfc3RhdHZmc19mcmVlKHN0YXR2ZnMpOwotCi0gICAgICAgIGlmKCF0bXApIHsKLSAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9IRUFERVIsIHRtcCwgc3RybGVuKHRtcCkpOwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0dFVElORk86Ci0gICAgICBpZihkYXRhLT5zZXQuZ2V0X2ZpbGV0aW1lKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0ZJTEVUSU1FKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9UUkFOU19JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9GSUxFVElNRToKLSAgICB7Ci0gICAgICBzZnRwX2F0dHJpYnV0ZXMgYXR0cnM7Ci0KLSAgICAgIGF0dHJzID0gc2Z0cF9zdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoKTsKLSAgICAgIGlmKGF0dHJzICE9IDApIHsKLSAgICAgICAgZGF0YS0+aW5mby5maWxldGltZSA9IGF0dHJzLT5tdGltZTsKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoYXR0cnMpOwotICAgICAgfQotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9UUkFOU19JTklUKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgU1NIX1NGVFBfVFJBTlNfSU5JVDoKLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKLSAgICAgIGVsc2UgewotICAgICAgICBpZihwcm90b3AtPnBhdGhbc3RybGVuKHByb3RvcC0+cGF0aCktMV0gPT0gJy8nKQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfSU5JVCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9VUExPQURfSU5JVDoKLSAgICB7Ci0gICAgICBpbnQgZmxhZ3M7Ci0KLSAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICE9IDApIHsKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzIGF0dHJzOwotCi0gICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIDwgMCkgewotICAgICAgICAgIGF0dHJzID0gc2Z0cF9zdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoKTsKLSAgICAgICAgICBpZihhdHRycyAhPSAwKSB7Ci0gICAgICAgICAgICBjdXJsX29mZl90IHNpemUgPSBhdHRycy0+c2l6ZTsKLSAgICAgICAgICAgIGlmKHNpemUgPCAwKSB7Ci0gICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJCYWQgZmlsZSBzaXplICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwgc2l6ZSk7Ci0gICAgICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGF0dHJzLT5zaXplOwotCi0gICAgICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShhdHRycyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZihkYXRhLT5zZXQuZnRwX2FwcGVuZCkKLSAgICAgICAgLyogVHJ5IHRvIG9wZW4gZm9yIGFwcGVuZCwgYnV0IGNyZWF0ZSBpZiBub25leGlzdGluZyAqLwotICAgICAgICBmbGFncyA9IE9fV1JPTkxZfE9fQ1JFQVR8T19BUFBFTkQ7Ci0gICAgICBlbHNlIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkKLSAgICAgICAgLyogSWYgd2UgaGF2ZSByZXN0YXJ0IHBvc2l0aW9uIHRoZW4gb3BlbiBmb3IgYXBwZW5kICovCi0gICAgICAgIGZsYWdzID0gT19XUk9OTFl8T19BUFBFTkQ7Ci0gICAgICBlbHNlCi0gICAgICAgIC8qIENsZWFyIGZpbGUgYmVmb3JlIHdyaXRpbmcgKG5vcm1hbCBiZWhhdmlvdXIpICovCi0gICAgICAgIGZsYWdzID0gT19XUk9OTFl8T19BUFBFTkR8T19DUkVBVHxPX1RSVU5DOwotCi0gICAgICBpZihzc2hjLT5zZnRwX2ZpbGUpCi0gICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKLSAgICAgIHNzaGMtPnNmdHBfZmlsZSA9Ci0gICAgICAgIHNmdHBfb3Blbihzc2hjLT5zZnRwX3Nlc3Npb24sIHByb3RvcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgIGZsYWdzLCAobW9kZV90KWRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyk7Ci0gICAgICBpZighc3NoYy0+c2Z0cF9maWxlKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfZ2V0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0KLSAgICAgICAgaWYoKChlcnIgPT0gU1NIX0ZYX05PX1NVQ0hfRklMRSB8fCBlcnIgPT0gU1NIX0ZYX0ZBSUxVUkUgfHwKLSAgICAgICAgICAgICBlcnIgPT0gU1NIX0ZYX05PX1NVQ0hfUEFUSCkpICYmCi0gICAgICAgICAgICAgKGRhdGEtPnNldC5mdHBfY3JlYXRlX21pc3NpbmdfZGlycyAmJgotICAgICAgICAgICAgIChzdHJsZW4ocHJvdG9wLT5wYXRoKSA+IDEpKSkgewotICAgICAgICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSB0aGUgcGF0aCByZW1vdGVseSAqLwotICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDE7Ci0gICAgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklUKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIElmIHdlIGhhdmUgYSByZXN0YXJ0IHBvaW50IHRoZW4gd2UgbmVlZCB0byBzZWVrIHRvIHRoZSBjb3JyZWN0Ci0gICAgICAgICBwb3NpdGlvbi4gKi8KLSAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkgewotICAgICAgICAvKiBMZXQncyByZWFkIG9mZiB0aGUgcHJvcGVyIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBpbnB1dC4gKi8KLSAgICAgICAgaWYoY29ubi0+c2Vla19mdW5jKSB7Ci0gICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7Ci0gICAgICAgICAgc2Vla2VyciA9IGNvbm4tPnNlZWtfZnVuYyhjb25uLT5zZWVrX2NsaWVudCwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUVLX1NFVCk7Ci0gICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYoc2Vla2VyciAhPSBDVVJMX1NFRUtGVU5DX09LKSB7Ci0gICAgICAgICAgY3VybF9vZmZfdCBwYXNzZWQgPSAwOwotCi0gICAgICAgICAgaWYoc2Vla2VyciAhPSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLKSB7Ci0gICAgICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHNlZWsgc3RyZWFtIik7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1Q7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIHNlZWtlcnIgPT0gQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSyAoY2FuJ3Qgc2VlayB0byBvZmZzZXQpICovCi0gICAgICAgICAgZG8gewotICAgICAgICAgICAgc2l6ZV90IHJlYWR0aGlzYW1vdW50bm93ID0KLSAgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIC0gcGFzc2VkID4gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplKSA/Ci0gICAgICAgICAgICAgIChzaXplX3QpZGF0YS0+c2V0LmJ1ZmZlcl9zaXplIDoKLSAgICAgICAgICAgICAgY3VybHhfc290b3V6KGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIC0gcGFzc2VkKTsKLQotICAgICAgICAgICAgc2l6ZV90IGFjdHVhbGx5cmVhZCA9Ci0gICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmZyZWFkX2Z1bmMoZGF0YS0+c3RhdGUuYnVmZmVyLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR0aGlzYW1vdW50bm93LCBkYXRhLT5zdGF0ZS5pbik7Ci0KLSAgICAgICAgICAgIHBhc3NlZCArPSBhY3R1YWxseXJlYWQ7Ci0gICAgICAgICAgICBpZigoYWN0dWFsbHlyZWFkID09IDApIHx8IChhY3R1YWxseXJlYWQgPiByZWFkdGhpc2Ftb3VudG5vdykpIHsKLSAgICAgICAgICAgICAgLyogdGhpcyBjaGVja3MgZm9yIGdyZWF0ZXItdGhhbiBvbmx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQotICAgICAgICAgICAgICAgICBDVVJMX1JFQURGVU5DX0FCT1JUIHJldHVybiBjb2RlIHN0aWxsIGFib3J0cyAqLwotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlYWQgZGF0YSIpOwotICAgICAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIG5vdywgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlYWQgKi8KLSAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKLSAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOwotICAgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKLSAgICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmMgPSBzZnRwX3NlZWs2NChzc2hjLT5zZnRwX2ZpbGUsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgICAgaWYocmMgIT0gMCkgewotICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgewotICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7Ci0gICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7Ci0gICAgICB9Ci0gICAgICAvKiB1cGxvYWQgZGF0YSAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCBGSVJTVFNPQ0tFVCk7Ci0KLSAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLwotICAgICAgY29ubi0+c29ja2ZkID0gY29ubi0+d3JpdGVzb2NrZmQ7Ci0KLSAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKLSAgICAgICAgIGZpZ3VyZSBvdXQgYSAicmVhbCIgYml0bWFzayAqLwotICAgICAgc3NoYy0+b3JpZ193YWl0Zm9yID0gZGF0YS0+cmVxLmtlZXBvbjsKLQotICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucwotICAgICAgICAgb3V0IHJlYWRhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaCBzZnRwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCi0gICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7Ci0KLSAgICAgIC8qIHNpbmNlIHdlIGRvbid0IHJlYWxseSB3YWl0IGZvciBhbnl0aGluZyBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRoZQotICAgICAgICAgc3RhdGUgbWFjaGluZSB0byBtb3ZlIG9uIGFzIHNvb24gYXMgcG9zc2libGUgc28gd2Ugc2V0IGEgdmVyeSBzaG9ydAotICAgICAgICAgdGltZW91dCBoZXJlICovCi0gICAgICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUlVOX05PVyk7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVDoKLSAgICAgIGlmKHN0cmxlbihwcm90b3AtPnBhdGgpID4gMSkgewotICAgICAgICBzc2hjLT5zbGFzaF9wb3MgPSBwcm90b3AtPnBhdGggKyAxOyAvKiBpZ25vcmUgdGhlIGxlYWRpbmcgJy8nICovCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlM6Ci0gICAgICBzc2hjLT5zbGFzaF9wb3MgPSBzdHJjaHIoc3NoYy0+c2xhc2hfcG9zLCAnLycpOwotICAgICAgaWYoc3NoYy0+c2xhc2hfcG9zKSB7Ci0gICAgICAgICpzc2hjLT5zbGFzaF9wb3MgPSAwOwotCi0gICAgICAgIGluZm9mKGRhdGEsICJDcmVhdGluZyBkaXJlY3RvcnkgJyVzJ1xuIiwgcHJvdG9wLT5wYXRoKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUjoKLSAgICAgIC8qICdtb2RlJyAtIHBhcmFtZXRlciBpcyBwcmVsaW1pbmFyeSAtIGRlZmF1bHQgdG8gMDY0NCAqLwotICAgICAgcmMgPSBzZnRwX21rZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIChtb2RlX3QpZGF0YS0+c2V0Lm5ld19kaXJlY3RvcnlfcGVybXMpOwotICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9ICcvJzsKLSAgICAgICsrc3NoYy0+c2xhc2hfcG9zOwotICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEFib3J0IGlmIGZhaWx1cmUgd2Fzbid0IHRoYXQgdGhlIGRpciBhbHJlYWR5IGV4aXN0cyBvciB0aGUKLSAgICAgICAgICogcGVybWlzc2lvbiB3YXMgZGVuaWVkIChjcmVhdGlvbiBtaWdodCBzdWNjZWVkIGZ1cnRoZXIgZG93biB0aGUKLSAgICAgICAgICogcGF0aCkgLSByZXRyeSBvbiB1bnNwZWNpZmljIEZBSUxVUkUgYWxzbwotICAgICAgICAgKi8KLSAgICAgICAgZXJyID0gc2Z0cF9nZXRfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgaWYoKGVyciAhPSBTU0hfRlhfRklMRV9BTFJFQURZX0VYSVNUUykgJiYKLSAgICAgICAgICAgKGVyciAhPSBTU0hfRlhfRkFJTFVSRSkgJiYKLSAgICAgICAgICAgKGVyciAhPSBTU0hfRlhfUEVSTUlTU0lPTl9ERU5JRUQpKSB7Ci0gICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0lOSVQ6Ci0gICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOwotICAgICAgaWYoZGF0YS0+c2V0Lm9wdF9ub19ib2R5KSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgKiBUaGlzIGlzIGEgZGlyZWN0b3J5IHRoYXQgd2UgYXJlIHRyeWluZyB0byBnZXQsIHNvIHByb2R1Y2UgYSBkaXJlY3RvcnkKLSAgICAgICAqIGxpc3RpbmcKLSAgICAgICAqLwotICAgICAgc3NoYy0+c2Z0cF9kaXIgPSBzZnRwX29wZW5kaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9wLT5wYXRoKTsKLSAgICAgIGlmKCFzc2hjLT5zZnRwX2RpcikgewotICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IG9wZW4gZGlyZWN0b3J5IGZvciByZWFkaW5nOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLSAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSOgotCi0gICAgICBpZihzc2hjLT5yZWFkZGlyX2F0dHJzKQotICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2F0dHJzKTsKLQotICAgICAgc3NoYy0+cmVhZGRpcl9hdHRycyA9IHNmdHBfcmVhZGRpcihzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnNmdHBfZGlyKTsKLSAgICAgIGlmKHNzaGMtPnJlYWRkaXJfYXR0cnMpIHsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSA9IHNzaGMtPnJlYWRkaXJfYXR0cnMtPm5hbWU7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gc3NoYy0+cmVhZGRpcl9hdHRycy0+bG9uZ25hbWU7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotCi0gICAgICAgIGlmKGRhdGEtPnNldC5mdHBfbGlzdF9vbmx5KSB7Ci0gICAgICAgICAgY2hhciAqdG1wTGluZTsKLQotICAgICAgICAgIHRtcExpbmUgPSBhcHJpbnRmKCIlc1xuIiwgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgICAgaWYodG1wTGluZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcExpbmUsIHNzaGMtPnJlYWRkaXJfbGVuICsgMSk7Ci0gICAgICAgICAgZnJlZSh0bXBMaW5lKTsKLQotICAgICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIHNpbmNlIHRoaXMgY291bnRzIHdoYXQgd2Ugc2VuZCB0byB0aGUgY2xpZW50LCB3ZSBpbmNsdWRlIHRoZQotICAgICAgICAgICAgIG5ld2xpbmUgaW4gdGhpcyBjb3VudGVyICovCi0gICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBzc2hjLT5yZWFkZGlyX2xlbiArIDE7Ci0KLSAgICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCi0gICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9PVVQsCi0gICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gPSBzdHJsZW4oc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOwotICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gPSA4MCArIHNzaGMtPnJlYWRkaXJfY3VyckxlbjsKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xpbmUgPSBjYWxsb2Moc3NoYy0+cmVhZGRpcl90b3RhbExlbiwgMSk7Ci0gICAgICAgICAgaWYoIXNzaGMtPnJlYWRkaXJfbGluZSkgewotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBtZW1jcHkoc3NoYy0+cmVhZGRpcl9saW5lLCBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSwKLSAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKLSAgICAgICAgICBpZigoc3NoYy0+cmVhZGRpcl9hdHRycy0+ZmxhZ3MgJiBTU0hfRklMRVhGRVJfQVRUUl9QRVJNSVNTSU9OUykgJiYKLSAgICAgICAgICAgICAoKHNzaGMtPnJlYWRkaXJfYXR0cnMtPnBlcm1pc3Npb25zICYgU19JRk1UKSA9PQotICAgICAgICAgICAgICBTX0lGTE5LKSkgewotICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCA9IG1hbGxvYyhQQVRIX01BWCArIDEpOwotICAgICAgICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtc25wcmludGYoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCwgUEFUSF9NQVgsICIlcyVzIiwgcHJvdG9wLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotCi0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0xJTkspOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZihzc2hjLT5yZWFkZGlyX2F0dHJzID09IE5VTEwgJiYgc2Z0cF9kaXJfZW9mKHNzaGMtPnNmdHBfZGlyKSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0RPTkUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IG9wZW4gcmVtb3RlIGZpbGUgZm9yIHJlYWRpbmc6ICVzIiwKLSAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9MSU5LOgotICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKQotICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOwotCi0gICAgICBzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMgPSBzZnRwX2xzdGF0KHNzaGMtPnNmdHBfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7Ci0gICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMgPT0gMCkgewotICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHJlYWQgc3ltbGluayBmb3IgcmVhZGluZzogJXMiLAotICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7Ci0gICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOwotICAgICAgfQotCi0gICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMtPm5hbWUgPT0gTlVMTCkgewotICAgICAgICBzc2hjLT5yZWFkZGlyX3RtcCA9IHNmdHBfcmVhZGxpbmsoc3NoYy0+c2Z0cF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7Ci0gICAgICAgIGlmKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPT0gTlVMTCkKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX3RtcCk7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSA9IHNzaGMtPnJlYWRkaXJfdG1wOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfbGlua19hdHRycy0+bmFtZSk7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMtPm5hbWU7Ci0gICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzLT5sb25nbmFtZTsKLSAgICAgIH0KLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKTsKLQotICAgICAgLyogZ2V0IHJvb20gZm9yIHRoZSBmaWxlbmFtZSBhbmQgZXh0cmEgb3V0cHV0ICovCi0gICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuICs9IDQgKyBzc2hjLT5yZWFkZGlyX2xlbjsKLSAgICAgIG5ld19yZWFkZGlyX2xpbmUgPSBDdXJsX3NhZmVyZWFsbG9jKHNzaGMtPnJlYWRkaXJfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4pOwotICAgICAgaWYoIW5ld19yZWFkZGlyX2xpbmUpIHsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gTlVMTDsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzc2hjLT5yZWFkZGlyX2xpbmUgPSBuZXdfcmVhZGRpcl9saW5lOwotCi0gICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gKz0gbXNucHJpbnRmKHNzaGMtPnJlYWRkaXJfbGluZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtPiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotCi0gICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOwotICAgICAgc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzID0gTlVMTDsKLSAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBOVUxMOwotICAgICAgc3NoYy0+cmVhZGRpcl9sb25nZW50cnkgPSBOVUxMOwotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7Ci0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9CT1RUT006Ci0gICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gKz0gbXNucHJpbnRmKHNzaGMtPnJlYWRkaXJfbGluZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiwgIlxuIik7Ci0gICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKLQotICAgICAgaWYoIXJlc3VsdCkgewotCi0gICAgICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KLSAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfT1VULCBzc2hjLT5yZWFkZGlyX2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4pOwotICAgICAgICB9Ci0gICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQgKz0gc3NoYy0+cmVhZGRpcl9jdXJyTGVuOwotICAgICAgfQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmUpOwotICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoc3NoYy0+cmVhZGRpcl90bXApOwotICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBOVUxMOwotCi0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0RPTkU6Ci0gICAgICBzZnRwX2Nsb3NlZGlyKHNzaGMtPnNmdHBfZGlyKTsKLSAgICAgIHNzaGMtPnNmdHBfZGlyID0gTlVMTDsKLQotICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCAtMSk7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfSU5JVDoKLSAgICAgIC8qCi0gICAgICAgKiBXb3JrIG9uIGdldHRpbmcgdGhlIHNwZWNpZmllZCBmaWxlCi0gICAgICAgKi8KLSAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkKLSAgICAgICAgc2Z0cF9jbG9zZShzc2hjLT5zZnRwX2ZpbGUpOwotCi0gICAgICBzc2hjLT5zZnRwX2ZpbGUgPSBzZnRwX29wZW4oc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT19SRE9OTFksIChtb2RlX3QpZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zKTsKLSAgICAgIGlmKCFzc2hjLT5zZnRwX2ZpbGUpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyIsCi0gICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKLQotICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKLSAgICAgIH0KLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfU1RBVDoKLSAgICB7Ci0gICAgICBzZnRwX2F0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgICBjdXJsX29mZl90IHNpemU7Ci0KLSAgICAgIGF0dHJzID0gc2Z0cF9mc3RhdChzc2hjLT5zZnRwX2ZpbGUpOwotICAgICAgaWYoIWF0dHJzIHx8Ci0gICAgICAgICAgICAgICEoYXR0cnMtPmZsYWdzICYgU1NIX0ZJTEVYRkVSX0FUVFJfU0laRSkgfHwKLSAgICAgICAgICAgICAgKGF0dHJzLT5zaXplID09IDApKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHNmdHBfZnN0YXQgZGlkbid0IHJldHVybiBhbiBlcnJvciwgc28gbWF5YmUgdGhlIHNlcnZlcgotICAgICAgICAgKiBqdXN0IGRvZXNuJ3Qgc3VwcG9ydCBzdGF0KCkKLSAgICAgICAgICogT1IgdGhlIHNlcnZlciBkb2Vzbid0IHJldHVybiBhIGZpbGUgc2l6ZSB3aXRoIGEgc3RhdCgpCi0gICAgICAgICAqIE9SIGZpbGUgc2l6ZSBpcyAwCi0gICAgICAgICAqLwotICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IC0xOwotICAgICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSAtMTsKLSAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIC0xKTsKLSAgICAgICAgc2l6ZSA9IDA7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc2l6ZSA9IGF0dHJzLT5zaXplOwotCi0gICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKGF0dHJzKTsKLQotICAgICAgICBpZihzaXplIDwgMCkgewotICAgICAgICAgIGZhaWxmKGRhdGEsICJCYWQgZmlsZSBzaXplICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwgc2l6ZSk7Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlX3JhbmdlKSB7Ci0gICAgICAgICAgY3VybF9vZmZfdCBmcm9tLCB0bzsKLSAgICAgICAgICBjaGFyICpwdHI7Ci0gICAgICAgICAgY2hhciAqcHRyMjsKLSAgICAgICAgICBDVVJMb2ZmdCB0b190OwotICAgICAgICAgIENVUkxvZmZ0IGZyb21fdDsKLQotICAgICAgICAgIGZyb21fdCA9IGN1cmx4X3N0cnRvb2ZmdChjb25uLT5kYXRhLT5zdGF0ZS5yYW5nZSwgJnB0ciwgMCwgJmZyb20pOwotICAgICAgICAgIGlmKGZyb21fdCA9PSBDVVJMX09GRlRfRkxPVykgewotICAgICAgICAgICAgcmV0dXJuIENVUkxFX1JBTkdFX0VSUk9SOwotICAgICAgICAgIH0KLSAgICAgICAgICB3aGlsZSgqcHRyICYmIChJU1NQQUNFKCpwdHIpIHx8ICgqcHRyID09ICctJykpKQotICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgICAgdG9fdCA9IGN1cmx4X3N0cnRvb2ZmdChwdHIsICZwdHIyLCAwLCAmdG8pOwotICAgICAgICAgIGlmKHRvX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpIHsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9SQU5HRV9FUlJPUjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoKHRvX3QgPT0gQ1VSTF9PRkZUX0lOVkFMKSAvKiBubyAidG8iIHZhbHVlIGdpdmVuICovCi0gICAgICAgICAgICAgfHwgKHRvID49IHNpemUpKSB7Ci0gICAgICAgICAgICB0byA9IHNpemUgLSAxOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZihmcm9tX3QpIHsKLSAgICAgICAgICAgIC8qIGZyb20gaXMgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUgKi8KLSAgICAgICAgICAgIGZyb20gPSBzaXplIC0gdG87Ci0gICAgICAgICAgICB0byA9IHNpemUgLSAxOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZihmcm9tID4gc2l6ZSkgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKLSAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwgZnJvbSwgc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoZnJvbSA+IHRvKSB7Ci0gICAgICAgICAgICBmcm9tID0gdG87Ci0gICAgICAgICAgICBzaXplID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzaXplID0gdG8gLSBmcm9tICsgMTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICByYyA9IHNmdHBfc2VlazY0KHNzaGMtPnNmdHBfZmlsZSwgZnJvbSk7Ci0gICAgICAgICAgaWYocmMgIT0gMCkgewotICAgICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRhdGEtPnJlcS5zaXplID0gc2l6ZTsKLSAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gc2l6ZTsKLSAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIHNpemUpOwotICAgICAgfQotCi0gICAgICAvKiBXZSBjYW4gcmVzdW1lIGlmIHdlIGNhbiBzZWVrIHRvIHRoZSByZXN1bWUgcG9zaXRpb24gKi8KLSAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7Ci0gICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIDwgMCkgewotICAgICAgICAgIC8qIFdlJ3JlIHN1cHBvc2VkIHRvIGRvd25sb2FkIHRoZSBsYXN0IGFicyhmcm9tKSBieXRlcyAqLwotICAgICAgICAgIGlmKChjdXJsX29mZl90KXNpemUgPCAtZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgotICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsCi0gICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KLSAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSBzaXplOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGlmKChjdXJsX29mZl90KXNpemUgPCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVAotICAgICAgICAgICAgICAgICAgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLAotICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sIHNpemUpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIERvZXMgYSBjb21wbGV0ZWQgZmlsZSBuZWVkIHRvIGJlIHNlZWtlZCBhbmQgc3RhcnRlZCBvciBjbG9zZWQgPyAqLwotICAgICAgICAvKiBOb3cgc3RvcmUgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBhcmUgZXhwZWN0ZWQgdG8gZG93bmxvYWQgKi8KLSAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207Ci0gICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKLSAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOwotCi0gICAgICAgIHJjID0gc2Z0cF9zZWVrNjQoc3NoYy0+c2Z0cF9maWxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7Ci0gICAgICAgIGlmKHJjICE9IDApIHsKLSAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8qIFNldHVwIHRoZSBhY3R1YWwgZG93bmxvYWQgKi8KLSAgICBpZihkYXRhLT5yZXEuc2l6ZSA9PSAwKSB7Ci0gICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCi0gICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKLSAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSBkb3dubG9hZGVkXG4iKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKLQotICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLwotICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOwotCi0gICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCi0gICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKLSAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47Ci0KLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyOyB0aGUgY2xvc2Ugc3RhdGUgc2hvdWxkIGJlIGVudGVyZWQKLSAgICAgICAgIGF0IHRoZSB0aW1lIHRoZSBlcnJvciBvY2N1cnMgKi8KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgc3NoYy0+c2Z0cF9yZWN2X3N0YXRlID0gMDsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0NMT1NFOgotICAgICAgaWYoc3NoYy0+c2Z0cF9maWxlKSB7Ci0gICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKLSAgICAgICAgc3NoYy0+c2Z0cF9maWxlID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIEN1cmxfc2FmZWZyZWUocHJvdG9wLT5wYXRoKTsKLQotICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTRlRQIERPTkUgZG9uZVxuIikpOwotCi0gICAgICAvKiBDaGVjayBpZiBuZXh0c3RhdGUgaXMgc2V0IGFuZCBtb3ZlIC5uZXh0c3RhdGUgY291bGQgYmUgUE9TVFFVT1RFX0lOSVQKLSAgICAgICAgIEFmdGVyIG5leHRzdGF0ZSBpcyBleGVjdXRlZCwgdGhlIGNvbnRyb2wgc2hvdWxkIGNvbWUgYmFjayB0bwotICAgICAgICAgU1NIX1NGVFBfQ0xPU0UgdG8gcGFzcyB0aGUgY29ycmVjdCByZXN1bHQgYmFjayAgKi8KLSAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUgJiYKLSAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfU0ZUUF9DTE9TRSkgewotICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfU0ZUUF9DTE9TRTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfU0hVVERPV046Ci0gICAgICAvKiBkdXJpbmcgdGltZXMgd2UgZ2V0IGhlcmUgZHVlIHRvIGEgYnJva2VuIHRyYW5zZmVyIGFuZCB0aGVuIHRoZQotICAgICAgICAgc2Z0cF9oYW5kbGUgbWlnaHQgbm90IGhhdmUgYmVlbiB0YWtlbiBkb3duIHNvIG1ha2Ugc3VyZSB0aGF0IGlzIGRvbmUKLSAgICAgICAgIGJlZm9yZSB3ZSBwcm9jZWVkICovCi0KLSAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkgewotICAgICAgICBzZnRwX2Nsb3NlKHNzaGMtPnNmdHBfZmlsZSk7Ci0gICAgICAgIHNzaGMtPnNmdHBfZmlsZSA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIGlmKHNzaGMtPnNmdHBfc2Vzc2lvbikgewotICAgICAgICBzZnRwX2ZyZWUoc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgU1NIX1NUUklOR19GUkVFX0NIQVIoc3NoYy0+aG9tZWRpcik7Ci0gICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gTlVMTDsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7Ci0gICAgICBicmVhazsKLQotCi0gICAgY2FzZSBTU0hfU0NQX1RSQU5TX0lOSVQ6Ci0gICAgICByZXN1bHQgPSBDdXJsX2dldHdvcmtpbmdwYXRoKGNvbm4sIHNzaGMtPmhvbWVkaXIsICZwcm90b3AtPnBhdGgpOwotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIEZ1bmN0aW9ucyBmcm9tIHRoZSBTQ1Agc3Vic3lzdGVtIGNhbm5vdCBoYW5kbGUvcmV0dXJuIFNTSF9BR0FJTiAqLwotICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMSk7Ci0KLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKLSAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA8IDApIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU0NQIHJlcXVpcmVzIGEga25vd24gZmlsZSBzaXplIGZvciB1cGxvYWQiKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfVVBMT0FEX0ZBSUxFRDsKLSAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1VQTE9BRF9GQUlMRUQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPQotICAgICAgICAgIHNzaF9zY3BfbmV3KHNzaGMtPnNzaF9zZXNzaW9uLCBTU0hfU0NQX1dSSVRFLCBwcm90b3AtPnBhdGgpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1VQTE9BRF9JTklUKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzc2hjLT5zY3Bfc2Vzc2lvbiA9Ci0gICAgICAgICAgc3NoX3NjcF9uZXcoc3NoYy0+c3NoX3Nlc3Npb24sIFNTSF9TQ1BfUkVBRCwgcHJvdG9wLT5wYXRoKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET1dOTE9BRF9JTklUKTsKLSAgICAgIH0KLQotICAgICAgaWYoIXNzaGMtPnNjcF9zZXNzaW9uKSB7Ci0gICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfVVBMT0FEX0ZBSUxFRCk7Ci0gICAgICB9Ci0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX1VQTE9BRF9JTklUOgotCi0gICAgICByYyA9IHNzaF9zY3BfaW5pdChzc2hjLT5zY3Bfc2Vzc2lvbik7Ci0gICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKLSAgICAgIH0KLQotICAgICAgcmMgPSBzc2hfc2NwX3B1c2hfZmlsZShzc2hjLT5zY3Bfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyk7Ci0gICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKLSAgICAgIH0KLQotICAgICAgLyogdXBsb2FkIGRhdGEgKi8KLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgRklSU1RTT0NLRVQpOwotCi0gICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOwotCi0gICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0Ci0gICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KLSAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247Ci0KLSAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKLSAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggc2NwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCi0gICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfRE9XTkxPQURfSU5JVDoKLQotICAgICAgcmMgPSBzc2hfc2NwX2luaXQoc3NoYy0+c2NwX3Nlc3Npb24pOwotICAgICAgaWYocmMgIT0gU1NIX09LKSB7Ci0gICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7Ci0gICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQ09VTEROVF9DT05ORUNUKTsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9XTkxPQUQpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLQotICAgIGNhc2UgU1NIX1NDUF9ET1dOTE9BRDp7Ci0gICAgICAgIGN1cmxfb2ZmX3QgYnl0ZWNvdW50OwotCi0gICAgICAgIHJjID0gc3NoX3NjcF9wdWxsX3JlcXVlc3Qoc3NoYy0+c2NwX3Nlc3Npb24pOwotICAgICAgICBpZihyYyAhPSBTU0hfU0NQX1JFUVVFU1RfTkVXRklMRSkgewotICAgICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBkb3dubG9hZCBkYXRhICovCi0gICAgICAgIGJ5dGVjb3VudCA9IHNzaF9zY3BfcmVxdWVzdF9nZXRfc2l6ZShzc2hjLT5zY3Bfc2Vzc2lvbik7Ci0gICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IChjdXJsX29mZl90KSBieXRlY291bnQ7Ci0gICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIGJ5dGVjb3VudCwgRkFMU0UsIC0xKTsKLQotICAgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBjb25uLT5zb2NrZmQ7Ci0KLSAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCi0gICAgICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCi0gICAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLwotICAgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47Ci0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICBjYXNlIFNTSF9TQ1BfRE9ORToKLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfU0VORF9FT0YpOwotICAgICAgZWxzZQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9TRU5EX0VPRjoKLSAgICAgIGlmKHNzaGMtPnNjcF9zZXNzaW9uKSB7Ci0gICAgICAgIHJjID0gc3NoX3NjcF9jbG9zZShzc2hjLT5zY3Bfc2Vzc2lvbik7Ci0gICAgICAgIGlmKHJjID09IFNTSF9BR0FJTikgewotICAgICAgICAgIC8qIEN1cnJlbnRseSB0aGUgc3NoX3NjcF9jbG9zZSBoYW5kbGVzIHdhaXRpbmcgZm9yIEVPRiBpbgotICAgICAgICAgICAqIGJsb2NraW5nIHdheS4KLSAgICAgICAgICAgKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaCBzY3AgY2hhbm5lbDogJXNcbiIsCi0gICAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX0NIQU5ORUxfRlJFRToKLSAgICAgIGlmKHNzaGMtPnNjcF9zZXNzaW9uKSB7Ci0gICAgICAgIHNzaF9zY3BfZnJlZShzc2hjLT5zY3Bfc2Vzc2lvbik7Ci0gICAgICAgIHNzaGMtPnNjcF9zZXNzaW9uID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiU0NQIERPTkUgcGhhc2UgY29tcGxldGVcbiIpKTsKLQotICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMCk7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLQotICAgIGNhc2UgU1NIX1NFU1NJT05fRElTQ09OTkVDVDoKLSAgICAgIC8qIGR1cmluZyB3ZWlyZCB0aW1lcyB3aGVuIHdlJ3ZlIGJlZW4gcHJlbWF0dXJlbHkgYWJvcnRlZCwgdGhlIGNoYW5uZWwKLSAgICAgICAgIGlzIHN0aWxsIGFsaXZlIHdoZW4gd2UgcmVhY2ggdGhpcyBzdGF0ZSBhbmQgd2UgTVVTVCBraWxsIHRoZSBjaGFubmVsCi0gICAgICAgICBwcm9wZXJseSBmaXJzdCAqLwotICAgICAgaWYoc3NoYy0+c2NwX3Nlc3Npb24pIHsKLSAgICAgICAgc3NoX3NjcF9mcmVlKHNzaGMtPnNjcF9zZXNzaW9uKTsKLSAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPSBOVUxMOwotICAgICAgfQotCi0gICAgICBzc2hfZGlzY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7Ci0KLSAgICAgIFNTSF9TVFJJTkdfRlJFRV9DSEFSKHNzaGMtPmhvbWVkaXIpOwotICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7Ci0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIFNTSF9TRVNTSU9OX0ZSRUU6Ci0gICAgICBpZihzc2hjLT5zc2hfc2Vzc2lvbikgewotICAgICAgICBzc2hfZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgIHNzaGMtPnNzaF9zZXNzaW9uID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgLyogd29yc3QtY2FzZSBzY2VuYXJpbyBjbGVhbnVwICovCi0KLSAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9zZXNzaW9uID09IE5VTEwpOwotICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c2NwX3Nlc3Npb24gPT0gTlVMTCk7Ci0KLSAgICAgIGlmKHNzaGMtPnJlYWRkaXJfdG1wKSB7Ci0gICAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKHNzaGMtPnJlYWRkaXJfdG1wKTsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBOVUxMOwotICAgICAgfQotCi0gICAgICBpZihzc2hjLT5xdW90ZV9hdHRycykKLSAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cXVvdGVfYXR0cnMpOwotCi0gICAgICBpZihzc2hjLT5yZWFkZGlyX2F0dHJzKQotICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2F0dHJzKTsKLQotICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKQotICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOwotCi0gICAgICBpZihzc2hjLT5wcml2a2V5KQotICAgICAgICBzc2hfa2V5X2ZyZWUoc3NoYy0+cHJpdmtleSk7Ci0gICAgICBpZihzc2hjLT5wdWJrZXkpCi0gICAgICAgIHNzaF9rZXlfZnJlZShzc2hjLT5wdWJrZXkpOwotCi0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYV9wdWIpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7Ci0gICAgICBTU0hfU1RSSU5HX0ZSRUVfQ0hBUihzc2hjLT5ob21lZGlyKTsKLQotICAgICAgLyogdGhlIGNvZGUgd2UgYXJlIGFib3V0IHRvIHJldHVybiAqLwotICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKLQotICAgICAgbWVtc2V0KHNzaGMsIDAsIHNpemVvZihzdHJ1Y3Qgc3NoX2Nvbm4pKTsKLQotICAgICAgY29ubmNsb3NlKGNvbm4sICJTU0ggc2Vzc2lvbiBmcmVlIik7Ci0gICAgICBzc2hjLT5zdGF0ZSA9IFNTSF9TRVNTSU9OX0ZSRUU7ICAgLyogY3VycmVudCAqLwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9RVUlUOgotICAgICAgLyogZmFsbHRocm91Z2gsIGp1c3Qgc3RvcCEgKi8KLSAgICBkZWZhdWx0OgotICAgICAgLyogaW50ZXJuYWwgZXJyb3IgKi8KLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgfQotICB9IHdoaWxlKCFyYyAmJiAoc3NoYy0+c3RhdGUgIT0gU1NIX1NUT1ApKTsKLQotCi0gIGlmKHJjID09IFNTSF9BR0FJTikgewotICAgIC8qIHdlIHdvdWxkIGJsb2NrLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgcmVhZHkgKGluIHRoZQotICAgICAgIHJpZ2h0IGRpcmVjdGlvbiB0b28pISAqLwotICAgICpibG9jayA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0KLS8qIGNhbGxlZCBieSB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIGZpZ3VyZSBvdXQgd2hhdCBzb2NrZXQocykgdG8gd2FpdCBmb3IgYW5kCi0gICBmb3Igd2hhdCBhY3Rpb25zIGluIHRoZSBET19ET05FLCBQRVJGT1JNIGFuZCBXQUlUUEVSRk9STSBzdGF0ZXMgKi8KLXN0YXRpYyBpbnQgbXlzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssICAvKiBwb2ludHMgdG8gbnVtc29ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc29ja2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQotewotICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKLSAgKHZvaWQpIG51bXNvY2tzOwotCi0gIHNvY2tbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLQotICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9SRUNWKQotICAgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKLQotICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9TRU5EKQotICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7Ci0KLSAgcmV0dXJuIGJpdG1hcDsKLX0KLQotLyogR2VuZXJpYyBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIG11bHRpIGludGVyZmFjZSB0byBmaWd1cmUgb3V0IHdoYXQgc29ja2V0KHMpCi0gICB0byB3YWl0IGZvciBhbmQgZm9yIHdoYXQgYWN0aW9ucyBkdXJpbmcgdGhlIERPSU5HIGFuZCBQUk9UT0NPTk5FQ1Qgc3RhdGVzKi8KLXN0YXRpYyBpbnQgbXlzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgIC8qIHBvaW50cyB0byBudW1zb2NrcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCi17Ci0gIC8qIGlmIHdlIGtub3cgdGhlIGRpcmVjdGlvbiB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljICpfZ2V0c29jaygpIGZ1bmN0aW9uIGV2ZW4KLSAgICAgZm9yIHRoZSBwcm90b2NvbF9jb25uZWN0IGFuZCBkb2luZyBzdGF0ZXMgKi8KLSAgcmV0dXJuIG15c3NoX3BlcmZvcm1fZ2V0c29jayhjb25uLCBzb2NrLCBudW1zb2Nrcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG15c3NoX2Jsb2NrMndhaXRmb3Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGJsb2NrKQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLQotICAvKiBJZiBpdCBkaWRuJ3QgYmxvY2ssIG9yIG5vdGhpbmcgd2FzIHJldHVybmVkIGJ5IHNzaF9nZXRfcG9sbF9mbGFncwotICAgKiBoYXZlIHRoZSBvcmlnaW5hbCBzZXQgKi8KLSAgY29ubi0+d2FpdGZvciA9IHNzaGMtPm9yaWdfd2FpdGZvcjsKLQotICBpZihibG9jaykgewotICAgIGludCBkaXIgPSBzc2hfZ2V0X3BvbGxfZmxhZ3Moc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgIGlmKGRpciAmIFNTSF9SRUFEX1BFTkRJTkcpIHsKLSAgICAgIC8qIHRyYW5zbGF0ZSB0aGUgbGlic3NoIGRlZmluZSBiaXRzIGludG8gb3VyIG93biBiaXQgZGVmaW5lcyAqLwotICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfUkVDVjsKLSAgICB9Ci0gICAgZWxzZSBpZihkaXIgJiBTU0hfV1JJVEVfUEVORElORykgewotICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKLSAgICB9Ci0gIH0KLX0KLQotLyogY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgZG9uZSBmcm9tIG11bHRpLmMgKi8KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIGJvb2wgYmxvY2s7ICAgIC8qIHdlIHN0b3JlIHRoZSBzdGF0dXMgYW5kIHVzZSB0aGF0IHRvIHByb3ZpZGUgYSBzc2hfZ2V0c29jaygpCi0gICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uICovCi0KLSAgcmVzdWx0ID0gbXlzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOwotICAqZG9uZSA9IChzc2hjLT5zdGF0ZSA9PSBTU0hfU1RPUCkgPyBUUlVFIDogRkFMU0U7Ci0gIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgYmxvY2spOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9ibG9ja19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRpc2Nvbm5lY3QpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgd2hpbGUoKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSAmJiAhcmVzdWx0KSB7Ci0gICAgYm9vbCBibG9jazsKLSAgICB0aW1lZGlmZl90IGxlZnQgPSAxMDAwOwotICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotCi0gICAgcmVzdWx0ID0gbXlzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIGJyZWFrOwotCi0gICAgaWYoIWRpc2Nvbm5lY3QpIHsKLSAgICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKLSAgICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7Ci0KLSAgICAgIHJlc3VsdCA9IEN1cmxfc3BlZWRjaGVjayhkYXRhLCBub3cpOwotICAgICAgaWYocmVzdWx0KQotICAgICAgICBicmVhazsKLQotICAgICAgbGVmdCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgRkFMU0UpOwotICAgICAgaWYobGVmdCA8IDApIHsKLSAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZighcmVzdWx0ICYmIGJsb2NrKSB7Ci0gICAgICBjdXJsX3NvY2tldF90IGZkX3JlYWQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCi0gICAgICAodm9pZCkgQ3VybF9zb2NrZXRfY2hlY2soZmRfcmVhZCwgQ1VSTF9TT0NLRVRfQkFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCwgbGVmdCA+IDEwMDAgPyAxMDAwIDogbGVmdCk7Ci0gICAgfQotCi0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogU1NIIHNldHVwIGNvbm5lY3Rpb24KLSAqLwotc3RhdGljIENVUkxjb2RlIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQotewotICBzdHJ1Y3QgU1NIUFJPVE8gKnNzaDsKLQotICBjb25uLT5kYXRhLT5yZXEucHJvdG9wID0gc3NoID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgU1NIUFJPVE8pKTsKLSAgaWYoIXNzaCkKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXN0YXRpYyBDdXJsX3JlY3Ygc2NwX3JlY3YsIHNmdHBfcmVjdjsKLXN0YXRpYyBDdXJsX3NlbmQgc2NwX3NlbmQsIHNmdHBfc2VuZDsKLQotLyoKLSAqIEN1cmxfc3NoX2Nvbm5lY3QoKSBnZXRzIGNhbGxlZCBmcm9tIEN1cmxfcHJvdG9jb2xfY29ubmVjdCgpIHRvIGFsbG93IHVzIHRvCi0gKiBkbyBwcm90b2NvbC1zcGVjaWZpYyBhY3Rpb25zIGF0IGNvbm5lY3QtdGltZS4KLSAqLwotc3RhdGljIENVUkxjb2RlIG15c3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQotewotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaDsKLSAgQ1VSTGNvZGUgcmVzdWx0OwotICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgLyogaW5pdGlhbGl6ZSBwZXItaGFuZGxlIGRhdGEgaWYgbm90IGFscmVhZHkgKi8KLSAgaWYoIWRhdGEtPnJlcS5wcm90b3ApCi0gICAgbXlzc2hfc2V0dXBfY29ubmVjdGlvbihjb25uKTsKLQotICAvKiBXZSBkZWZhdWx0IHRvIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFdlIHNldCB0aGlzIGFscmVhZHkgaW4gdGhpcyBjb25uZWN0Ci0gICAgIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIHJlLXVzZSBjaGVja3MgcHJvcGVybHkgYmUgYWJsZSB0byBjaGVjayB0aGlzIGJpdC4gKi8KLSAgY29ubmtlZXAoY29ubiwgIlNTSCBkZWZhdWx0Iik7Ci0KLSAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKSB7Ci0gICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBzY3BfcmVjdjsKLSAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNjcF9zZW5kOwotICB9Ci0gIGVsc2UgewotICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2Z0cF9yZWN2OwotICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gc2Z0cF9zZW5kOwotICB9Ci0KLSAgc3NoID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgc3NoLT5zc2hfc2Vzc2lvbiA9IHNzaF9uZXcoKTsKLSAgaWYoc3NoLT5zc2hfc2Vzc2lvbiA9PSBOVUxMKSB7Ci0gICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGlzaW5nIHNzaCBzZXNzaW9uIik7Ci0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwotICB9Ci0KLSAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0ZELCAmc29jayk7Ci0KLSAgaWYoY29ubi0+dXNlcikgewotICAgIGluZm9mKGRhdGEsICJVc2VyOiAlc1xuIiwgY29ubi0+dXNlcik7Ci0gICAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1VTRVIsIGNvbm4tPnVzZXIpOwotICB9Ci0KLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKSB7Ci0gICAgaW5mb2YoZGF0YSwgIktub3duIGhvc3RzOiAlc1xuIiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKLSAgICBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfS05PV05IT1NUUywKLSAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKLSAgfQotCi0gIHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19IT1NULCBjb25uLT5ob3N0Lm5hbWUpOwotICBpZihjb25uLT5yZW1vdGVfcG9ydCkKLSAgICBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfUE9SVCwKLSAgICAgICAgICAgICAgICAgICAgJmNvbm4tPnJlbW90ZV9wb3J0KTsKLQotICBpZihkYXRhLT5zZXQuc3NoX2NvbXByZXNzaW9uKSB7Ci0gICAgc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0NPTVBSRVNTSU9OLAotICAgICAgICAgICAgICAgICAgICAiemxpYix6bGliQG9wZW5zc2guY29tLG5vbmUiKTsKLSAgfQotCi0gIHNzaC0+cHJpdmtleSA9IE5VTEw7Ci0gIHNzaC0+cHVia2V5ID0gTlVMTDsKLQotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV0pIHsKLSAgICBpbnQgcmMgPSBzc2hfcGtpX2ltcG9ydF9wdWJrZXlfZmlsZShkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaC0+cHVia2V5KTsKLSAgICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgbG9hZCBwdWJsaWMga2V5IGZpbGUiKTsKLSAgICAgIC8qIGlnbm9yZSAqLwotICAgIH0KLSAgfQotCi0gIC8qIHdlIGRvIG5vdCB2ZXJpZnkgaGVyZSwgd2UgZG8gaXQgYXQgdGhlIHN0YXRlIG1hY2hpbmUsCi0gICAqIGFmdGVyIGNvbm5lY3Rpb24gKi8KLQotICBzdGF0ZShjb25uLCBTU0hfSU5JVCk7Ci0KLSAgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvbmUpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGNhbGxlZCBmcm9tIG11bHRpLmMgd2hpbGUgRE9pbmcgKi8KLXN0YXRpYyBDVVJMY29kZSBzY3BfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb3BoYXNlX2RvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLQotICByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBzY3BfcGVyZm9ybSgpCi0gKgotICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTQ1AuIEdldCBhIGZpbGUgYWNjb3JkaW5nIHRvCi0gKiB0aGUgb3B0aW9ucyBwcmV2aW91c2x5IHNldHVwLgotICovCi0KLXN0YXRpYwotQ1VSTGNvZGUgc2NwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLCBib29sICpkb3BoYXNlX2RvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7Ci0KLSAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAgICAgICAgLyogbm90IGRvbmUgeWV0ICovCi0KLSAgLyogc3RhcnQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIERPIHBoYXNlICovCi0gIHN0YXRlKGNvbm4sIFNTSF9TQ1BfVFJBTlNfSU5JVCk7Ci0KLSAgcmVzdWx0ID0gbXlzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7Ci0KLSAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07Ci0KLSAgaWYoKmRvcGhhc2VfZG9uZSkgewotICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBteXNzaF9kb19pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgYm9vbCBjb25uZWN0ZWQgPSAwOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgKmRvbmUgPSBGQUxTRTsgICAgICAgICAgICAgICAgLyogZGVmYXVsdCB0byBmYWxzZSAqLwotCi0gIGRhdGEtPnJlcS5zaXplID0gLTE7ICAgICAgICAgIC8qIG1ha2Ugc3VyZSB0aGlzIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCAqLwotCi0gIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PSzsgIC8qIHJlc2V0IGVycm9yIGNvZGUgKi8KLSAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7ICAgLyogcmVzZXQgdGhlIGNyZWF0ZSBkaXIgYXR0ZW1wdCBzdGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAqLwotCi0gIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7Ci0gIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKLSAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCAtMSk7Ci0gIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7Ci0KLSAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQotICAgIHJlc3VsdCA9IHNjcF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsIGRvbmUpOwotICBlbHNlCi0gICAgcmVzdWx0ID0gc2Z0cF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsIGRvbmUpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgotICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKLSAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KLXN0YXRpYyBDVVJMY29kZSBzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaCA9ICZjb25uLT5wcm90by5zc2hjOwotICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOwotCi0gIGlmKHNzaC0+c3NoX3Nlc3Npb24pIHsKLSAgICAvKiBvbmx5IGlmIHRoZXJlJ3MgYSBzZXNzaW9uIHN0aWxsIGFyb3VuZCB0byB1c2UhICovCi0KLSAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKLQotICAgIHJlc3VsdCA9IG15c3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBUUlVFKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGdlbmVyaWMgZG9uZSBmdW5jdGlvbiBmb3IgYm90aCBTQ1AgYW5kIFNGVFAgY2FsbGVkIGZyb20gdGhlaXIgc3BlY2lmaWMKLSAgIGRvbmUgZnVuY3Rpb25zICovCi1zdGF0aWMgQ1VSTGNvZGUgbXlzc2hfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cykKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBTU0hQUk9UTyAqcHJvdG9wID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKLQotICBpZighc3RhdHVzKSB7Ci0gICAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCi0gICAgcmVzdWx0ID0gbXlzc2hfYmxvY2tfc3RhdGVtYWNoKGNvbm4sIEZBTFNFKTsKLSAgfQotICBlbHNlCi0gICAgcmVzdWx0ID0gc3RhdHVzOwotCi0gIGlmKHByb3RvcCkKLSAgICBDdXJsX3NhZmVmcmVlKHByb3RvcC0+cGF0aCk7Ci0gIGlmKEN1cmxfcGdyc0RvbmUoY29ubikpCi0gICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7Ci0KLSAgY29ubi0+ZGF0YS0+cmVxLmtlZXBvbiA9IDA7ICAgLyogY2xlYXIgYWxsIGJpdHMgKi8KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCi17Ci0gICh2b2lkKSBwcmVtYXR1cmU7ICAgICAgICAgICAgIC8qIG5vdCB1c2VkICovCi0KLSAgaWYoIXN0YXR1cykKLSAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPTkUpOwotCi0gIHJldHVybiBteXNzaF9kb25lKGNvbm4sIHN0YXR1cyk7Ci0KLX0KLQotc3RhdGljIHNzaXplX3Qgc2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBpbnQgcmM7Ci0gICh2b2lkKSBzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCi0gICh2b2lkKSBlcnI7Ci0KLSAgcmMgPSBzc2hfc2NwX3dyaXRlKGNvbm4tPnByb3RvLnNzaGMuc2NwX3Nlc3Npb24sIG1lbSwgbGVuKTsKLQotI2lmIDAKLSAgLyogVGhlIGZvbGxvd2luZyBjb2RlIGlzIG1pc2xlYWRpbmcsIG1vc3RseSBhZGRlZCBhcyB3aXNoZnVsIHRoaW5raW5nCi0gICAqIHRoYXQgbGlic3NoIGF0IHNvbWUgcG9pbnQgd2lsbCBpbXBsZW1lbnQgbm9uLWJsb2NraW5nIHNzaF9zY3Bfd3JpdGUvcmVhZC4KLSAgICogQ3VycmVudGx5IHJjIGNhbiBvbmx5IGJlIG51bWJlciBvZiBieXRlcyByZWFkIG9yIFNTSF9FUlJPUi4gKi8KLSAgbXlzc2hfYmxvY2syd2FpdGZvcihjb25uLCAocmMgPT0gU1NIX0FHQUlOKSA/IFRSVUUgOiBGQUxTRSk7Ci0KLSAgaWYocmMgPT0gU1NIX0FHQUlOKSB7Ci0gICAgKmVyciA9IENVUkxFX0FHQUlOOwotICAgIHJldHVybiAwOwotICB9Ci0gIGVsc2UKLSNlbmRpZgotICBpZihyYyAhPSBTU0hfT0spIHsKLSAgICAqZXJyID0gQ1VSTEVfU1NIOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNjcF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKLXsKLSAgc3NpemVfdCBucmVhZDsKLSAgKHZvaWQpIGVycjsKLSAgKHZvaWQpIHNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KLQotICAvKiBsaWJzc2ggcmV0dXJucyBpbnQgKi8KLSAgbnJlYWQgPSBzc2hfc2NwX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zY3Bfc2Vzc2lvbiwgbWVtLCBsZW4pOwotCi0jaWYgMAotICAvKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgbWlzbGVhZGluZywgbW9zdGx5IGFkZGVkIGFzIHdpc2hmdWwgdGhpbmtpbmcKLSAgICogdGhhdCBsaWJzc2ggYXQgc29tZSBwb2ludCB3aWxsIGltcGxlbWVudCBub24tYmxvY2tpbmcgc3NoX3NjcF93cml0ZS9yZWFkLgotICAgKiBDdXJyZW50bHkgcmMgY2FuIG9ubHkgYmUgU1NIX09LIG9yIFNTSF9FUlJPUi4gKi8KLQotICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBTU0hfQUdBSU4pID8gVFJVRSA6IEZBTFNFKTsKLSAgaWYobnJlYWQgPT0gU1NIX0FHQUlOKSB7Ci0gICAgKmVyciA9IENVUkxFX0FHQUlOOwotICAgIG5yZWFkID0gLTE7Ci0gIH0KLSNlbmRpZgotCi0gIHJldHVybiBucmVhZDsKLX0KLQotLyoKLSAqID09PT09PT09PT09PT09PSBTRlRQID09PT09PT09PT09PT09PQotICovCi0KLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBzZnRwX3BlcmZvcm0oKQotICoKLSAqIFRoaXMgaXMgdGhlIGFjdHVhbCBETyBmdW5jdGlvbiBmb3IgU0ZUUC4gR2V0IGEgZmlsZS9kaXJlY3RvcnkgYWNjb3JkaW5nIHRvCi0gKiB0aGUgb3B0aW9ucyBwcmV2aW91c2x5IHNldHVwLgotICovCi0KLXN0YXRpYwotQ1VSTGNvZGUgc2Z0cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQotICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIHN0YXJ0c1xuIikpOwotCi0gICpkb3BoYXNlX2RvbmUgPSBGQUxTRTsgLyogbm90IGRvbmUgeWV0ICovCi0KLSAgLyogc3RhcnQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIERPIHBoYXNlICovCi0gIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX0lOSVQpOwotCi0gIC8qIHJ1biB0aGUgc3RhdGUtbWFjaGluZSAqLwotICByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLwotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLSAgaWYoKmRvcGhhc2VfZG9uZSkgewotICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBCTE9DS0lORywgYnV0IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGUgc3RhdGUgbWFjaGluZSBzbyB0aGUgb25seSByZWFzb24KLSAgIHRoaXMgaXMgc3RpbGwgYmxvY2tpbmcgaXMgdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNvZGUgaGFzIG5vIHN1cHBvcnQgZm9yCi0gICBkaXNjb25uZWN0aW5nIG9wZXJhdGlvbnMgdGhhdCB0YWtlcyBhIHdoaWxlICovCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOwotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiU1NIIERJU0NPTk5FQ1Qgc3RhcnRzIG5vd1xuIikpOwotCi0gIGlmKGNvbm4tPnByb3RvLnNzaGMuc3NoX3Nlc3Npb24pIHsKLSAgICAvKiBvbmx5IGlmIHRoZXJlJ3MgYSBzZXNzaW9uIHN0aWxsIGFyb3VuZCB0byB1c2UhICovCi0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfU0hVVERPV04pOwotICAgIHJlc3VsdCA9IG15c3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBUUlVFKTsKLSAgfQotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiU1NIIERJU0NPTk5FQ1QgaXMgZG9uZVxuIikpOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLX0KLQotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgaWYoIXN0YXR1cykgewotICAgIC8qIFBvc3QgcXVvdGUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBTRlRQX0NMT1NFIHN0YXRlIHRvIGF2b2lkCi0gICAgICAgZXJyb3JzIHRoYXQgY291bGQgaGFwcGVuIGR1ZSB0byBvcGVuIGZpbGUgaGFuZGxlcyBkdXJpbmcgUE9TVFFVT1RFCi0gICAgICAgb3BlcmF0aW9uICovCi0gICAgaWYoIXByZW1hdHVyZSAmJiBjb25uLT5kYXRhLT5zZXQucG9zdHF1b3RlICYmICFjb25uLT5iaXRzLnJldHJ5KQotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQ7Ci0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICB9Ci0gIHJldHVybiBteXNzaF9kb25lKGNvbm4sIHN0YXR1cyk7Ci19Ci0KLS8qIHJldHVybiBudW1iZXIgb2Ygc2VudCBieXRlcyAqLwotc3RhdGljIHNzaXplX3Qgc2Z0cF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCi17Ci0gIHNzaXplX3QgbndyaXRlOwotICAodm9pZClzb2NraW5kZXg7Ci0KLSAgbndyaXRlID0gc2Z0cF93cml0ZShjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZSwgbWVtLCBsZW4pOwotCi0gIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgRkFMU0UpOwotCi0jaWYgMCAvKiBub3QgcmV0dXJuZWQgYnkgbGlic3NoIG9uIHdyaXRlICovCi0gIGlmKG53cml0ZSA9PSBTU0hfQUdBSU4pIHsKLSAgICAqZXJyID0gQ1VSTEVfQUdBSU47Ci0gICAgbndyaXRlID0gMDsKLSAgfQotICBlbHNlCi0jZW5kaWYKLSAgaWYobndyaXRlIDwgMCkgewotICAgICplcnIgPSBDVVJMRV9TU0g7Ci0gICAgbndyaXRlID0gLTE7Ci0gIH0KLQotICByZXR1cm4gbndyaXRlOwotfQotCi0vKgotICogUmV0dXJuIG51bWJlciBvZiByZWNlaXZlZCAoZGVjcnlwdGVkKSBieXRlcwotICogb3IgPDAgb24gZXJyb3IKLSAqLwotc3RhdGljIHNzaXplX3Qgc2Z0cF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCi17Ci0gIHNzaXplX3QgbnJlYWQ7Ci0gICh2b2lkKXNvY2tpbmRleDsKLQotICBERUJVR0FTU0VSVChsZW4gPCBDVVJMX01BWF9SRUFEX1NJWkUpOwotCi0gIHN3aXRjaChjb25uLT5wcm90by5zc2hjLnNmdHBfcmVjdl9zdGF0ZSkgewotICAgIGNhc2UgMDoKLSAgICAgIGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlX2luZGV4ID0KLSAgICAgICAgICAgIHNmdHBfYXN5bmNfcmVhZF9iZWdpbihjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpbGVuKTsKLSAgICAgIGlmKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlX2luZGV4IDwgMCkgewotICAgICAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotCi0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgMToKLSAgICAgIGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9yZWN2X3N0YXRlID0gMTsKLQotICAgICAgbnJlYWQgPSBzZnRwX2FzeW5jX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW0sICh1aW50MzJfdClsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZV9pbmRleCk7Ci0KLSAgICAgIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG5yZWFkID09IFNTSF9BR0FJTik/VFJVRTpGQUxTRSk7Ci0KLSAgICAgIGlmKG5yZWFkID09IFNTSF9BR0FJTikgewotICAgICAgICAqZXJyID0gQ1VSTEVfQUdBSU47Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYobnJlYWQgPCAwKSB7Ci0gICAgICAgICplcnIgPSBDVVJMRV9SRUNWX0VSUk9SOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICB9Ci0KLSAgICAgIGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9yZWN2X3N0YXRlID0gMDsKLSAgICAgIHJldHVybiBucmVhZDsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiB3ZSBuZXZlciByZWFjaCBoZXJlICovCi0gICAgICByZXR1cm4gLTE7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgc2Z0cF9xdW90ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIGNvbnN0IGNoYXIgKmNwOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IFNTSFBST1RPICpwcm90b3AgPSBkYXRhLT5yZXEucHJvdG9wOwotICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKLSAgQ1VSTGNvZGUgcmVzdWx0OwotCi0gIC8qCi0gICAqIFN1cHBvcnQgc29tZSBvZiB0aGUgIkZUUCIgY29tbWFuZHMKLSAgICovCi0gIGNoYXIgKmNtZCA9IHNzaGMtPnF1b3RlX2l0ZW0tPmRhdGE7Ci0gIHNzaGMtPmFjY2VwdGZhaWwgPSBGQUxTRTsKLQotICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCi0gICAgIGNhbiwgdGhlIGNvbW1hbmQgd2lsbCBiZSBhbGxvd2VkIHRvIGZhaWwgd2l0aG91dCBpdCBjYXVzaW5nIGFueQotICAgICBhYm9ydHMgb3IgY2FuY2VscyBldGMuIEl0IHdpbGwgY2F1c2UgbGliY3VybCB0byBhY3QgYXMgaWYgdGhlIGNvbW1hbmQKLSAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLwotCi0gIGlmKGNtZFswXSA9PSAnKicpIHsKLSAgICBjbWQrKzsKLSAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKLSAgfQotCi0gIGlmKHN0cmNhc2Vjb21wYXJlKCJwd2QiLCBjbWQpKSB7Ci0gICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLwotICAgIGNoYXIgKnRtcCA9IGFwcmludGYoIjI1NyBcIiVzXCIgaXMgY3VycmVudCBkaXJlY3RvcnkuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9wLT5wYXRoKTsKLSAgICBpZighdG1wKSB7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX09VVCwgKGNoYXIgKikgIlBXRFxuIiwgNCk7Ci0gICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgdG1wLCBzdHJsZW4odG1wKSk7Ci0gICAgfQotICAgIC8qIHRoaXMgc2VuZHMgYW4gRlRQLWxpa2UgImhlYWRlciIgdG8gdGhlIGhlYWRlciBjYWxsYmFjayBzbyB0aGF0IHRoZQotICAgICAgIGN1cnJlbnQgZGlyZWN0b3J5IGNhbiBiZSByZWFkIHZlcnkgc2ltaWxhciB0byBob3cgaXQgaXMgcmVhZCB3aGVuCi0gICAgICAgdXNpbmcgb3JkaW5hcnkgRlRQLiAqLwotICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7Ci0gICAgZnJlZSh0bXApOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyoKLSAgICogdGhlIGFyZ3VtZW50cyBmb2xsb3dpbmcgdGhlIGNvbW1hbmQgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUKLSAgICogY29tbWFuZCB3aXRoIGEgc3BhY2Ugc28gd2UgY2FuIGNoZWNrIGZvciBpdCB1bmNvbmRpdGlvbmFsbHkKLSAgICovCi0gIGNwID0gc3RyY2hyKGNtZCwgJyAnKTsKLSAgaWYoY3AgPT0gTlVMTCkgewotICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gU0ZUUCBjb21tYW5kLiBTdXBwbHkgcGFyYW1ldGVyKHMpISIpOwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qCi0gICAqIGFsc28sIGV2ZXJ5IGNvbW1hbmQgdGFrZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IHNvIHdlIGdldCB0aGF0Ci0gICAqIGZpcnN0IGFyZ3VtZW50IHJpZ2h0IG5vdwotICAgKi8KLSAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDEsIHNzaGMtPmhvbWVkaXIpOwotICBpZihyZXN1bHQpIHsKLSAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKLSAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgZWxzZQotICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogQmFkIGZpcnN0IHBhcmFtZXRlciIpOwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKgotICAgKiBTRlRQIGlzIGEgYmluYXJ5IHByb3RvY29sLCBzbyB3ZSBkb24ndCBzZW5kIHRleHQgY29tbWFuZHMKLSAgICogdG8gdGhlIHNlcnZlci4gSW5zdGVhZCwgd2Ugc2NhbiBmb3IgY29tbWFuZHMgdXNlZCBieQotICAgKiBPcGVuU1NIJ3Mgc2Z0cCBwcm9ncmFtIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBsaWJzc2gKLSAgICogZnVuY3Rpb25zLgotICAgKi8KLSAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwICIsIDYpIHx8Ci0gICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCAiLCA2KSB8fAotICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24gIiwgNikpIHsKLSAgICAvKiBhdHRyaWJ1dGUgY2hhbmdlICovCi0KLSAgICAvKiBzc2hjLT5xdW90ZV9wYXRoMSBjb250YWlucyB0aGUgbW9kZSB0byBzZXQgKi8KLSAgICAvKiBnZXQgdGhlIGRlc3RpbmF0aW9uICovCi0gICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCi0gICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgICBlbHNlCi0gICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gY2hncnAvY2htb2QvY2hvd246ICIKLSAgICAgICAgICAgICAgIkJhZCBzZWNvbmQgcGFyYW1ldGVyIik7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHNzaGMtPnF1b3RlX2F0dHJzID0gTlVMTDsKLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TVEFUKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImxuICIsIDMpIHx8Ci0gICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJzeW1saW5rICIsIDgpKSB7Ci0gICAgLyogc3ltYm9saWMgbGlua2luZyAqLwotICAgIC8qIHNzaGMtPnF1b3RlX3BhdGgxIGlzIHRoZSBzb3VyY2UgKi8KLSAgICAvKiBnZXQgdGhlIGRlc3RpbmF0aW9uICovCi0gICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCi0gICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgICBlbHNlCi0gICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gbG4vc3ltbGluazogQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1lNTElOSyk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgIm1rZGlyICIsIDYpKSB7Ci0gICAgLyogY3JlYXRlIGRpciAqLwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX01LRElSKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicmVuYW1lICIsIDcpKSB7Ci0gICAgLyogcmVuYW1lIGZpbGUgKi8KLSAgICAvKiBmaXJzdCBwYXJhbSBpcyB0aGUgc291cmNlIHBhdGggKi8KLSAgICAvKiBzZWNvbmQgcGFyYW0gaXMgdGhlIGRlc3QuIHBhdGggKi8KLSAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7Ci0gICAgaWYocmVzdWx0KSB7Ci0gICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKLSAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiByZW5hbWU6IEJhZCBzZWNvbmQgcGFyYW1ldGVyIik7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JFTkFNRSk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJtZGlyICIsIDYpKSB7Ci0gICAgLyogZGVsZXRlIGRpciAqLwotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JNRElSKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicm0gIiwgMykpIHsKLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9VTkxJTkspOwotICAgIHJldHVybjsKLSAgfQotI2lmZGVmIEhBU19TVEFUVkZTX1NVUFBPUlQKLSAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAic3RhdHZmcyAiLCA4KSkgewotICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVRWRlMpOwotICAgIHJldHVybjsKLSAgfQotI2VuZGlmCi0KLSAgZmFpbGYoZGF0YSwgIlVua25vd24gU0ZUUCBjb21tYW5kIik7Ci0gIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLX0KLQotc3RhdGljIHZvaWQgc2Z0cF9xdW90ZV9zdGF0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOwotICBzc2hjLT5hY2NlcHRmYWlsID0gRkFMU0U7Ci0KLSAgLyogaWYgYSBjb21tYW5kIHN0YXJ0cyB3aXRoIGFuIGFzdGVyaXNrLCB3aGljaCBhIGxlZ2FsIFNGVFAgY29tbWFuZCBuZXZlcgotICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKLSAgICAgYWJvcnRzIG9yIGNhbmNlbHMgZXRjLiBJdCB3aWxsIGNhdXNlIGxpYmN1cmwgdG8gYWN0IGFzIGlmIHRoZSBjb21tYW5kCi0gICAgIGlzIHN1Y2Nlc3NmdWwsIHdoYXRldmVyIHRoZSBzZXJ2ZXIgcmVwb25kcy4gKi8KLQotICBpZihjbWRbMF0gPT0gJyonKSB7Ci0gICAgY21kKys7Ci0gICAgc3NoYy0+YWNjZXB0ZmFpbCA9IFRSVUU7Ci0gIH0KLQotICAvKiBXZSByZWFkIHRoZSBmaWxlIGF0dHJpYnV0ZXMsIHN0b3JlIHRoZW0gaW4gc3NoYy0+cXVvdGVfYXR0cnMKLSAgICogYW5kIG1vZGlmeSB0aGVtIGFjY29yZGluZ2x5IHRvIGNvbW1hbmQuIFRoZW4gd2Ugc3dpdGNoIHRvCi0gICAqIFFVT1RFX1NFVFNUQVQgc3RhdGUgdG8gd3JpdGUgbmV3IG9uZXMuCi0gICAqLwotCi0gIGlmKHNzaGMtPnF1b3RlX2F0dHJzKQotICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKHNzaGMtPnF1b3RlX2F0dHJzKTsKLSAgc3NoYy0+cXVvdGVfYXR0cnMgPSBzZnRwX3N0YXQoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMik7Ci0gIGlmKHNzaGMtPnF1b3RlX2F0dHJzID09IE5VTEwpIHsKLSAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBnZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVkIiwKLSAgICAgICAgICBzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsKLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBOb3cgc2V0IHRoZSBuZXcgYXR0cmlidXRlcy4uLiAqLwotICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hncnAiLCA1KSkgewotICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5naWQgPSAodWludDMyX3Qpc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgMTApOwotICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLT5naWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKLSAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaGdycCBnaWQgbm90IGEgbnVtYmVyIik7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5mbGFncyB8PSBTU0hfRklMRVhGRVJfQVRUUl9VSURHSUQ7Ci0gIH0KLSAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QiLCA1KSkgewotICAgIG1vZGVfdCBwZXJtczsKLSAgICBwZXJtcyA9IChtb2RlX3Qpc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgOCk7Ci0gICAgLyogcGVybWlzc2lvbnMgYXJlIG9jdGFsICovCi0gICAgaWYocGVybXMgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkpIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG1vZCBwZXJtaXNzaW9ucyBub3QgYSBudW1iZXIiKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3NoYy0+cXVvdGVfYXR0cnMtPnBlcm1pc3Npb25zID0gcGVybXM7Ci0gICAgc3NoYy0+cXVvdGVfYXR0cnMtPmZsYWdzIHw9IFNTSF9GSUxFWEZFUl9BVFRSX1BFUk1JU1NJT05TOwotICB9Ci0gIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNob3duIiwgNSkpIHsKLSAgICBzc2hjLT5xdW90ZV9hdHRycy0+dWlkID0gKHVpbnQzMl90KXN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDEwKTsKLSAgICBpZihzc2hjLT5xdW90ZV9hdHRycy0+dWlkID09IDAgJiYgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pICYmCi0gICAgICAgICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2hvd24gdWlkIG5vdCBhIG51bWJlciIpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzc2hjLT5xdW90ZV9hdHRycy0+ZmxhZ3MgfD0gU1NIX0ZJTEVYRkVSX0FUVFJfVUlER0lEOwotICB9Ci0KLSAgLyogTm93IHNlbmQgdGhlIGNvbXBsZXRlZCBzdHJ1Y3R1cmUuLi4gKi8KLSAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCk7Ci0gIHJldHVybjsKLX0KLQotCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTRV9MSUJTU0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3NoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNjVjM2MuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3NoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogI2RlZmluZSBDVVJMX0xJQlNTSDJfREVCVUcgKi8KLQotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotI2lmZGVmIFVTRV9MSUJTU0gyCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2luY2x1ZGUgPGxpYnNzaDIuaD4KLSNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KLQotI2lmZGVmIEhBVkVfRkNOVExfSAotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9BUlBBX0lORVRfSAotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9VVFNOQU1FX0gKLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9ORVREQl9ICi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNlbmRpZgotI2lmZGVmIF9fVk1TCi0jaW5jbHVkZSA8aW4uaD4KLSNpbmNsdWRlIDxpbmV0Lmg+Ci0jZW5kaWYKLQotI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKLSN1bmRlZiBpbl9hZGRyX3QKLSNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKLSNlbmRpZgotCi0jaW5jbHVkZSA8Y3VybC9jdXJsLmg+Ci0jaW5jbHVkZSAidXJsZGF0YS5oIgotI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAiaG9zdGlwLmgiCi0jaW5jbHVkZSAicHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJ0cmFuc2Zlci5oIgotI2luY2x1ZGUgImVzY2FwZS5oIgotI2luY2x1ZGUgImh0dHAuaCIgLyogZm9yIEhUVFAgcHJveHkgdHVubmVsIHN0dWZmICovCi0jaW5jbHVkZSAic3NoLmgiCi0jaW5jbHVkZSAidXJsLmgiCi0jaW5jbHVkZSAic3BlZWRjaGVjay5oIgotI2luY2x1ZGUgImdldGluZm8uaCIKLSNpbmNsdWRlICJzdHJkdXAuaCIKLSNpbmNsdWRlICJzdHJjYXNlLmgiCi0jaW5jbHVkZSAidnRscy92dGxzLmgiCi0jaW5jbHVkZSAiY29ubmVjdC5oIgotI2luY2x1ZGUgInN0cmVycm9yLmgiCi0jaW5jbHVkZSAiaW5ldF9udG9wLmgiCi0jaW5jbHVkZSAicGFyc2VkYXRlLmgiIC8qIGZvciB0aGUgd2VlayBkYXkgYW5kIG1vbnRoIG5hbWVzICovCi0jaW5jbHVkZSAic29ja2FkZHIuaCIgLyogcmVxdWlyZWQgZm9yIEN1cmxfc29ja2FkZHJfc3RvcmFnZSAqLwotI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgotI2luY2x1ZGUgIm11bHRpaWYuaCIKLSNpbmNsdWRlICJzZWxlY3QuaCIKLSNpbmNsdWRlICJ3YXJubGVzcy5oIgotI2luY2x1ZGUgImN1cmxfcGF0aC5oIgotCi0vKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCi0jaW5jbHVkZSAiY3VybF9wcmludGYuaCIKLSNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0KLSNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA2Ci0vKiBsaWJzc2gyX3NmdHBfc3RhdHZmcyBhbmQgZnJpZW5kcyB3ZXJlIGFkZGVkIGluIDEuMi42ICovCi0jZGVmaW5lIEhBU19TVEFUVkZTX1NVUFBPUlQgMQotI2VuZGlmCi0KLSNkZWZpbmUgc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3IocykgY3VybHhfdWx0b3NpKGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHMpKQotCi0jZGVmaW5lIHNmdHBfbGlic3NoMl9yZWFscGF0aChzLHAsdCxtKSBcCi0gICAgICAgIGxpYnNzaDJfc2Z0cF9zeW1saW5rX2V4KChzKSwgKHApLCBjdXJseF91enRvdWkoc3RybGVuKHApKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodCksIChtKSwgTElCU1NIMl9TRlRQX1JFQUxQQVRIKQotCi0KLS8qIExvY2FsIGZ1bmN0aW9uczogKi8KLXN0YXRpYyBjb25zdCBjaGFyICpzZnRwX2xpYnNzaDJfc3RyZXJyb3IoaW50IGVycik7Ci1zdGF0aWMgTElCU1NIMl9BTExPQ19GVU5DKG15X2xpYnNzaDJfbWFsbG9jKTsKLXN0YXRpYyBMSUJTU0gyX1JFQUxMT0NfRlVOQyhteV9saWJzc2gyX3JlYWxsb2MpOwotc3RhdGljIExJQlNTSDJfRlJFRV9GVU5DKG15X2xpYnNzaDJfZnJlZSk7Ci0KLXN0YXRpYyBDVVJMY29kZSBzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLXN0YXRpYyBDVVJMY29kZSBzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKLQotc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOwotc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7Ci1zdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbik7Ci0KLXN0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOwotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKLXN0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOwotc3RhdGljCi1DVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOwotCi1zdGF0aWMgaW50IHNzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb2NrZXRzICovCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7Ci0KLXN0YXRpYyBpbnQgc3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOwotCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKLQotLyoKLSAqIFNDUCBwcm90b2NvbCBoYW5kbGVyLgotICovCi0KLWNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcCA9IHsKLSAgIlNDUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KLSAgc3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCi0gIHNzaF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KLSAgc2NwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLwotICBzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KLSAgc3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCi0gIHNjcF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KLSAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCi0gIHNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCi0gIHNzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCi0gIHNjcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KLSAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCi0gIENVUkxQUk9UT19TQ1AsICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTgotICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCi19OwotCi0KLS8qCi0gKiBTRlRQIHByb3RvY29sIGhhbmRsZXIuCi0gKi8KLQotY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2Z0cCA9IHsKLSAgIlNGVFAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KLSAgc3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCi0gIHNzaF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KLSAgc2Z0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCi0gIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLwotICBzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KLSAgc3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCi0gIHNmdHBfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KLSAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCi0gIHNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCi0gIHNzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCi0gIHNmdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLwotICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KLSAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCi0gIENVUkxQUk9UT19TRlRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTgotICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCi19OwotCi1zdGF0aWMgdm9pZAota2JkX2NhbGxiYWNrKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lX2xlbiwgY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb24sCi0gICAgICAgICAgICAgaW50IGluc3RydWN0aW9uX2xlbiwgaW50IG51bV9wcm9tcHRzLAotICAgICAgICAgICAgIGNvbnN0IExJQlNTSDJfVVNFUkFVVEhfS0JESU5UX1BST01QVCAqcHJvbXB0cywKLSAgICAgICAgICAgICBMSUJTU0gyX1VTRVJBVVRIX0tCRElOVF9SRVNQT05TRSAqcmVzcG9uc2VzLAotICAgICAgICAgICAgIHZvaWQgKiphYnN0cmFjdCkKLXsKLSAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gKHN0cnVjdCBjb25uZWN0ZGF0YSAqKSphYnN0cmFjdDsKLQotI2lmZGVmIENVUkxfTElCU1NIMl9ERUJVRwotICBmcHJpbnRmKHN0ZGVyciwgIm5hbWU9JXNcbiIsIG5hbWUpOwotICBmcHJpbnRmKHN0ZGVyciwgIm5hbWVfbGVuPSVkXG4iLCBuYW1lX2xlbik7Ci0gIGZwcmludGYoc3RkZXJyLCAiaW5zdHJ1Y3Rpb249JXNcbiIsIGluc3RydWN0aW9uKTsKLSAgZnByaW50ZihzdGRlcnIsICJpbnN0cnVjdGlvbl9sZW49JWRcbiIsIGluc3RydWN0aW9uX2xlbik7Ci0gIGZwcmludGYoc3RkZXJyLCAibnVtX3Byb21wdHM9JWRcbiIsIG51bV9wcm9tcHRzKTsKLSNlbHNlCi0gICh2b2lkKW5hbWU7Ci0gICh2b2lkKW5hbWVfbGVuOwotICAodm9pZClpbnN0cnVjdGlvbjsKLSAgKHZvaWQpaW5zdHJ1Y3Rpb25fbGVuOwotI2VuZGlmICAvKiBDVVJMX0xJQlNTSDJfREVCVUcgKi8KLSAgaWYobnVtX3Byb21wdHMgPT0gMSkgewotICAgIHJlc3BvbnNlc1swXS50ZXh0ID0gc3RyZHVwKGNvbm4tPnBhc3N3ZCk7Ci0gICAgcmVzcG9uc2VzWzBdLmxlbmd0aCA9IGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+cGFzc3dkKSk7Ci0gIH0KLSAgKHZvaWQpcHJvbXB0czsKLSAgKHZvaWQpYWJzdHJhY3Q7Ci19IC8qIGtiZF9jYWxsYmFjayAqLwotCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGludCBlcnIpCi17Ci0gIHN3aXRjaChlcnIpIHsKLSAgICBjYXNlIExJQlNTSDJfRlhfT0s6Ci0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9GSUxFOgotICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX1BBVEg6Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX1BFUk1JU1NJT05fREVOSUVEOgotICAgIGNhc2UgTElCU1NIMl9GWF9XUklURV9QUk9URUNUOgotICAgIGNhc2UgTElCU1NIMl9GWF9MT0NLX0NPTkZsSUNUOgotICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NQQUNFX09OX0ZJTEVTWVNURU06Ci0gICAgY2FzZSBMSUJTU0gyX0ZYX1FVT1RBX0VYQ0VFREVEOgotICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9ESVNLX0ZVTEw7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfRklMRV9BTFJFQURZX0VYSVNUUzoKLSAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9FWElTVFM7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfRElSX05PVF9FTVBUWToKLSAgICAgIHJldHVybiBDVVJMRV9RVU9URV9FUlJPUjsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBDVVJMRV9TU0g7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoaW50IGVycikKLXsKLSAgc3dpdGNoKGVycikgewotICAgIC8qIE9yZGVyZWQgYnkgb3JkZXIgb2YgYXBwZWFyYW5jZSBpbiBsaWJzc2gyLmggKi8KLSAgICBjYXNlIExJQlNTSDJfRVJST1JfTk9ORToKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLQotICAgIC8qIFRoaXMgaXMgdGhlIGVycm9yIHJldHVybmVkIGJ5IGxpYnNzaDJfc2NwX3JlY3YyCi0gICAgICogb24gdW5rbm93biBmaWxlICovCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NDUF9QUk9UT0NPTDoKLSAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX05PTkU6Ci0gICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX0FMTE9DOgotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0KLSAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX1NFTkQ6Ci0gICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKLQotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9IT1NUS0VZX0lOSVQ6Ci0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX0hPU1RLRVlfU0lHTjoKLSAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOUkVDT0dOSVpFRDoKLSAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOVkVSSUZJRUQ6Ci0gICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwotCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1BBU1NXT1JEX0VYUElSRUQ6Ci0gICAgICByZXR1cm4gQ1VSTEVfTE9HSU5fREVOSUVEOwotCi0gICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NPQ0tFVF9USU1FT1VUOgotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9USU1FT1VUOgotICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLQotICAgIGNhc2UgTElCU1NIMl9FUlJPUl9FQUdBSU46Ci0gICAgICByZXR1cm4gQ1VSTEVfQUdBSU47Ci0gIH0KLQotICByZXR1cm4gQ1VSTEVfU1NIOwotfQotCi1zdGF0aWMgTElCU1NIMl9BTExPQ19GVU5DKG15X2xpYnNzaDJfbWFsbG9jKQotewotICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCi0gIHJldHVybiBtYWxsb2MoY291bnQpOwotfQotCi1zdGF0aWMgTElCU1NIMl9SRUFMTE9DX0ZVTkMobXlfbGlic3NoMl9yZWFsbG9jKQotewotICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCi0gIHJldHVybiByZWFsbG9jKHB0ciwgY291bnQpOwotfQotCi1zdGF0aWMgTElCU1NIMl9GUkVFX0ZVTkMobXlfbGlic3NoMl9mcmVlKQotewotICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCi0gIGlmKHB0cikgLyogc3NoMiBhZ2VudCBzb21ldGltZXMgY2FsbCBmcmVlIHdpdGggbnVsbCBwdHIgKi8KLSAgICBmcmVlKHB0cik7Ci19Ci0KLS8qCi0gKiBTU0ggU3RhdGUgbWFjaGluZSByZWxhdGVkIGNvZGUKLSAqLwotLyogVGhpcyBpcyB0aGUgT05MWSB3YXkgdG8gY2hhbmdlIFNTSCBzdGF0ZSEgKi8KLXN0YXRpYyB2b2lkIHN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3Noc3RhdGUgbm93c3RhdGUpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKLSAgLyogZm9yIGRlYnVnIHB1cnBvc2VzICovCi0gIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsKLSAgICAiU1NIX1NUT1AiLAotICAgICJTU0hfSU5JVCIsCi0gICAgIlNTSF9TX1NUQVJUVVAiLAotICAgICJTU0hfSE9TVEtFWSIsCi0gICAgIlNTSF9BVVRITElTVCIsCi0gICAgIlNTSF9BVVRIX1BLRVlfSU5JVCIsCi0gICAgIlNTSF9BVVRIX1BLRVkiLAotICAgICJTU0hfQVVUSF9QQVNTX0lOSVQiLAotICAgICJTU0hfQVVUSF9QQVNTIiwKLSAgICAiU1NIX0FVVEhfQUdFTlRfSU5JVCIsCi0gICAgIlNTSF9BVVRIX0FHRU5UX0xJU1QiLAotICAgICJTU0hfQVVUSF9BR0VOVCIsCi0gICAgIlNTSF9BVVRIX0hPU1RfSU5JVCIsCi0gICAgIlNTSF9BVVRIX0hPU1QiLAotICAgICJTU0hfQVVUSF9LRVlfSU5JVCIsCi0gICAgIlNTSF9BVVRIX0tFWSIsCi0gICAgIlNTSF9BVVRIX0dTU0FQSSIsCi0gICAgIlNTSF9BVVRIX0RPTkUiLAotICAgICJTU0hfU0ZUUF9JTklUIiwKLSAgICAiU1NIX1NGVFBfUkVBTFBBVEgiLAotICAgICJTU0hfU0ZUUF9RVU9URV9JTklUIiwKLSAgICAiU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQiLAotICAgICJTU0hfU0ZUUF9RVU9URSIsCi0gICAgIlNTSF9TRlRQX05FWFRfUVVPVEUiLAotICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1NZTUxJTksiLAotICAgICJTU0hfU0ZUUF9RVU9URV9NS0RJUiIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1JFTkFNRSIsCi0gICAgIlNTSF9TRlRQX1FVT1RFX1JNRElSIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfVU5MSU5LIiwKLSAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyIsCi0gICAgIlNTSF9TRlRQX0dFVElORk8iLAotICAgICJTU0hfU0ZUUF9GSUxFVElNRSIsCi0gICAgIlNTSF9TRlRQX1RSQU5TX0lOSVQiLAotICAgICJTU0hfU0ZUUF9VUExPQURfSU5JVCIsCi0gICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQiLAotICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSUyIsCi0gICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSIiwKLSAgICAiU1NIX1NGVFBfUkVBRERJUl9JTklUIiwKLSAgICAiU1NIX1NGVFBfUkVBRERJUiIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfTElOSyIsCi0gICAgIlNTSF9TRlRQX1JFQURESVJfQk9UVE9NIiwKLSAgICAiU1NIX1NGVFBfUkVBRERJUl9ET05FIiwKLSAgICAiU1NIX1NGVFBfRE9XTkxPQURfSU5JVCIsCi0gICAgIlNTSF9TRlRQX0RPV05MT0FEX1NUQVQiLAotICAgICJTU0hfU0ZUUF9DTE9TRSIsCi0gICAgIlNTSF9TRlRQX1NIVVRET1dOIiwKLSAgICAiU1NIX1NDUF9UUkFOU19JTklUIiwKLSAgICAiU1NIX1NDUF9VUExPQURfSU5JVCIsCi0gICAgIlNTSF9TQ1BfRE9XTkxPQURfSU5JVCIsCi0gICAgIlNTSF9TQ1BfRE9XTkxPQUQiLAotICAgICJTU0hfU0NQX0RPTkUiLAotICAgICJTU0hfU0NQX1NFTkRfRU9GIiwKLSAgICAiU1NIX1NDUF9XQUlUX0VPRiIsCi0gICAgIlNTSF9TQ1BfV0FJVF9DTE9TRSIsCi0gICAgIlNTSF9TQ1BfQ0hBTk5FTF9GUkVFIiwKLSAgICAiU1NIX1NFU1NJT05fRElTQ09OTkVDVCIsCi0gICAgIlNTSF9TRVNTSU9OX0ZSRUUiLAotICAgICJRVUlUIgotICB9OwotCi0gIC8qIGEgcHJlY2F1dGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpc3RzIGFyZSBpbiBzeW5jICovCi0gIERFQlVHQVNTRVJUKHNpemVvZihuYW1lcykvc2l6ZW9mKG5hbWVzWzBdKSA9PSBTU0hfTEFTVCk7Ci0KLSAgaWYoc3NoYy0+c3RhdGUgIT0gbm93c3RhdGUpIHsKLSAgICBpbmZvZihjb25uLT5kYXRhLCAiU0ZUUCAlcCBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlc1xuIiwKLSAgICAgICAgICAodm9pZCAqKXNzaGMsIG5hbWVzW3NzaGMtPnN0YXRlXSwgbmFtZXNbbm93c3RhdGVdKTsKLSAgfQotI2VuZGlmCi0KLSAgc3NoYy0+c3RhdGUgPSBub3dzdGF0ZTsKLX0KLQotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKLXN0YXRpYyBpbnQgc3Noa2V5Y2FsbGJhY2soc3RydWN0IEN1cmxfZWFzeSAqZWFzeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfa2hrZXkgKmtub3dua2V5LCAvKiBrbm93biAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3VybF9raGtleSAqZm91bmRrZXksIC8qIGZvdW5kICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gY3VybF9raG1hdGNoIG1hdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRwKQotewotICAodm9pZCllYXN5OwotICAodm9pZClrbm93bmtleTsKLSAgKHZvaWQpZm91bmRrZXk7Ci0gICh2b2lkKWNsaWVudHA7Ci0KLSAgLyogd2Ugb25seSBhbGxvdyBwZXJmZWN0IG1hdGNoZXMsIGFuZCB3ZSByZWplY3QgZXZlcnl0aGluZyBlbHNlICovCi0gIHJldHVybiAobWF0Y2ggIT0gQ1VSTEtITUFUQ0hfT0spP0NVUkxLSFNUQVRfUkVKRUNUOkNVUkxLSFNUQVRfRklORTsKLX0KLSNlbmRpZgotCi0vKgotICogRWFybGllciBsaWJzc2gyIHZlcnNpb25zIGRpZG4ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIHNlZWsgdG8gNjRiaXQgcG9zaXRpb25zCi0gKiB3aXRoIDMyYml0IHNpemVfdC4KLSAqLwotI2lmZGVmIEhBVkVfTElCU1NIMl9TRlRQX1NFRUs2NAotI2RlZmluZSBTRlRQX1NFRUsoeCx5KSBsaWJzc2gyX3NmdHBfc2VlazY0KHgsIChsaWJzc2gyX3VpbnQ2NF90KXkpCi0jZWxzZQotI2RlZmluZSBTRlRQX1NFRUsoeCx5KSBsaWJzc2gyX3NmdHBfc2Vlayh4LCAoc2l6ZV90KXkpCi0jZW5kaWYKLQotLyoKLSAqIEVhcmxpZXIgbGlic3NoMiB2ZXJzaW9ucyBkaWRuJ3QgZG8gU0NQIHByb3Blcmx5IGJleW9uZCAzMmJpdCBzaXplcyBvbiAzMmJpdAotICogYXJjaGl0ZWN0dXJlcyBzbyB3ZSBjaGVjayBvZiB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uIGlzIHByZXNlbnQuCi0gKi8KLSNpZm5kZWYgSEFWRV9MSUJTU0gyX1NDUF9TRU5ENjQKLSNkZWZpbmUgU0NQX1NFTkQoYSxiLGMsZCkgbGlic3NoMl9zY3Bfc2VuZF9leChhLCBiLCAoaW50KShjKSwgKHNpemVfdClkLCAwLCAwKQotI2Vsc2UKLSNkZWZpbmUgU0NQX1NFTkQoYSxiLGMsZCkgbGlic3NoMl9zY3Bfc2VuZDY0KGEsIGIsIChpbnQpKGMpLCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaWJzc2gyX3VpbnQ2NF90KWQsIDAsIDApCi0jZW5kaWYKLQotLyoKLSAqIGxpYnNzaDIgMS4yLjggZml4ZWQgdGhlIHByb2JsZW0gd2l0aCAzMmJpdCBpbnRzIHVzZWQgZm9yIHNvY2tldHMgb24gd2luNjQuCi0gKi8KLSNpZmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9IQU5EU0hBS0UKLSNkZWZpbmUgbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAoeCx5KSBsaWJzc2gyX3Nlc3Npb25faGFuZHNoYWtlKHgseSkKLSNlbmRpZgotCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2tub3duaG9zdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKSB7Ci0gICAgLyogd2UncmUgYXNrZWQgdG8gdmVyaWZ5IHRoZSBob3N0IGFnYWluc3QgYSBmaWxlICovCi0gICAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gICAgaW50IHJjOwotICAgIGludCBrZXl0eXBlOwotICAgIHNpemVfdCBrZXlsZW47Ci0gICAgY29uc3QgY2hhciAqcmVtb3Rla2V5ID0gbGlic3NoMl9zZXNzaW9uX2hvc3RrZXkoc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleWxlbiwgJmtleXR5cGUpOwotICAgIGludCBrZXljaGVjayA9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX0ZBSUxVUkU7Ci0gICAgaW50IGtleWJpdCA9IDA7Ci0KLSAgICBpZihyZW1vdGVrZXkpIHsKLSAgICAgIC8qCi0gICAgICAgKiBBIHN1YmplY3QgdG8gZmlndXJlIG91dCBpcyB3aGF0IGhvc3QgbmFtZSB3ZSBuZWVkIHRvIHBhc3MgaW4gaGVyZS4KLSAgICAgICAqIFdoYXQgaG9zdCBuYW1lIGRvZXMgT3BlblNTSCBzdG9yZSBpbiBpdHMgZmlsZSBpZiBhbiBJRE4gbmFtZSBpcwotICAgICAgICogdXNlZD8KLSAgICAgICAqLwotICAgICAgc3RydWN0IGxpYnNzaDJfa25vd25ob3N0ICpob3N0OwotICAgICAgZW51bSBjdXJsX2tobWF0Y2gga2V5bWF0Y2g7Ci0gICAgICBjdXJsX3NzaGtleWNhbGxiYWNrIGZ1bmMgPQotICAgICAgICBkYXRhLT5zZXQuc3NoX2tleWZ1bmM/ZGF0YS0+c2V0LnNzaF9rZXlmdW5jOnNzaGtleWNhbGxiYWNrOwotICAgICAgc3RydWN0IGN1cmxfa2hrZXkga25vd25rZXk7Ci0gICAgICBzdHJ1Y3QgY3VybF9raGtleSAqa25vd25rZXlwID0gTlVMTDsKLSAgICAgIHN0cnVjdCBjdXJsX2toa2V5IGZvdW5ka2V5OwotCi0gICAgICBrZXliaXQgPSAoa2V5dHlwZSA9PSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9SU0EpPwotICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfU1NIUlNBOkxJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hEU1M7Ci0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0NIRUNLUAotICAgICAga2V5Y2hlY2sgPSBsaWJzc2gyX2tub3duaG9zdF9jaGVja3Aoc3NoYy0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ubi0+cmVtb3RlX3BvcnQgIT0gUE9SVF9TU0gpPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cmVtb3RlX3BvcnQ6LTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVrZXksIGtleWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX1RZUEVfUExBSU58Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlFTkNfUkFXfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Yml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QpOwotI2Vsc2UKLSAgICAgIGtleWNoZWNrID0gbGlic3NoMl9rbm93bmhvc3RfY2hlY2soc3NoYy0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Rla2V5LCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX1RZUEVfUExBSU58Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0tFWUVOQ19SQVd8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QpOwotI2VuZGlmCi0KLSAgICAgIGluZm9mKGRhdGEsICJTU0ggaG9zdCBjaGVjazogJWQsIGtleTogJXNcbiIsIGtleWNoZWNrLAotICAgICAgICAgICAgKGtleWNoZWNrIDw9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01JU01BVENIKT8KLSAgICAgICAgICAgIGhvc3QtPmtleToiPG5vbmU+Iik7Ci0KLSAgICAgIC8qIHNldHVwICdrbm93bmtleScgKi8KLSAgICAgIGlmKGtleWNoZWNrIDw9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01JU01BVENIKSB7Ci0gICAgICAgIGtub3dua2V5LmtleSA9IGhvc3QtPmtleTsKLSAgICAgICAga25vd25rZXkubGVuID0gMDsKLSAgICAgICAga25vd25rZXkua2V5dHlwZSA9IChrZXl0eXBlID09IExJQlNTSDJfSE9TVEtFWV9UWVBFX1JTQSk/Ci0gICAgICAgICAgQ1VSTEtIVFlQRV9SU0EgOiBDVVJMS0hUWVBFX0RTUzsKLSAgICAgICAga25vd25rZXlwID0gJmtub3dua2V5OwotICAgICAgfQotCi0gICAgICAvKiBzZXR1cCAnZm91bmRrZXknICovCi0gICAgICBmb3VuZGtleS5rZXkgPSByZW1vdGVrZXk7Ci0gICAgICBmb3VuZGtleS5sZW4gPSBrZXlsZW47Ci0gICAgICBmb3VuZGtleS5rZXl0eXBlID0gKGtleXR5cGUgPT0gTElCU1NIMl9IT1NUS0VZX1RZUEVfUlNBKT8KLSAgICAgICAgQ1VSTEtIVFlQRV9SU0EgOiBDVVJMS0hUWVBFX0RTUzsKLQotICAgICAgLyoKLSAgICAgICAqIGlmIGFueSBvZiB0aGUgTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfKiBkZWZpbmVzIGFuZCB0aGUKLSAgICAgICAqIGN1cmxfa2htYXRjaCBlbnVtIGFyZSBldmVyIG1vZGlmaWVkLCB3ZSBuZWVkIHRvIGludHJvZHVjZSBhCi0gICAgICAgKiB0cmFuc2xhdGlvbiB0YWJsZSBoZXJlIQotICAgICAgICovCi0gICAgICBrZXltYXRjaCA9IChlbnVtIGN1cmxfa2htYXRjaClrZXljaGVjazsKLQotICAgICAgLyogQXNrIHRoZSBjYWxsYmFjayBob3cgdG8gYmVoYXZlICovCi0gICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKLSAgICAgIHJjID0gZnVuYyhkYXRhLCBrbm93bmtleXAsIC8qIGZyb20gdGhlIGtub3duaG9zdHMgZmlsZSAqLwotICAgICAgICAgICAgICAgICZmb3VuZGtleSwgLyogZnJvbSB0aGUgcmVtb3RlIGhvc3QgKi8KLSAgICAgICAgICAgICAgICBrZXltYXRjaCwgZGF0YS0+c2V0LnNzaF9rZXlmdW5jX3VzZXJwKTsKLSAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgLyogbm8gcmVtb3Rla2V5IG1lYW5zIGZhaWx1cmUhICovCi0gICAgICByYyA9IENVUkxLSFNUQVRfUkVKRUNUOwotCi0gICAgc3dpdGNoKHJjKSB7Ci0gICAgZGVmYXVsdDogLyogdW5rbm93biByZXR1cm4gY29kZXMgd2lsbCBlcXVhbCByZWplY3QgKi8KLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgY2FzZSBDVVJMS0hTVEFUX1JFSkVDVDoKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOwotICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICBjYXNlIENVUkxLSFNUQVRfREVGRVI6Ci0gICAgICAvKiBERUZFUiBtZWFucyBiYWlsIG91dCBidXQga2VlcCB0aGUgU1NIX0hPU1RLRVkgc3RhdGUgKi8KLSAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENVUkxLSFNUQVRfRklORToKLSAgICBjYXNlIENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRToKLSAgICAgIC8qIHByb2NlZWQgKi8KLSAgICAgIGlmKGtleWNoZWNrICE9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01BVENIKSB7Ci0gICAgICAgIC8qIHRoZSBmb3VuZCBob3N0K2tleSBkaWRuJ3QgbWF0Y2ggYnV0IGhhcyBiZWVuIHRvbGQgdG8gYmUgZmluZQotICAgICAgICAgICBhbnl3YXkgc28gd2UgYWRkIGl0IGluIG1lbW9yeSAqLwotICAgICAgICBpbnQgYWRkcmMgPSBsaWJzc2gyX2tub3duaG9zdF9hZGQoc3NoYy0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVrZXksIGtleWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX1RZUEVfUExBSU58Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlFTkNfUkFXfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Yml0LCBOVUxMKTsKLSAgICAgICAgaWYoYWRkcmMpCi0gICAgICAgICAgaW5mb2YoZGF0YSwgIldhcm5pbmcgYWRkaW5nIHRoZSBrbm93biBob3N0ICVzIGZhaWxlZCFcbiIsCi0gICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lKTsKLSAgICAgICAgZWxzZSBpZihyYyA9PSBDVVJMS0hTVEFUX0ZJTkVfQUREX1RPX0ZJTEUpIHsKLSAgICAgICAgICAvKiBub3cgd2Ugd3JpdGUgdGhlIGVudGlyZSBpbi1tZW1vcnkgbGlzdCBvZiBrbm93biBob3N0cyB0byB0aGUKLSAgICAgICAgICAgICBrbm93bl9ob3N0cyBmaWxlICovCi0gICAgICAgICAgaW50IHdyYyA9Ci0gICAgICAgICAgICBsaWJzc2gyX2tub3duaG9zdF93cml0ZWZpbGUoc3NoYy0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0ZJTEVfT1BFTlNTSCk7Ci0gICAgICAgICAgaWYod3JjKSB7Ci0gICAgICAgICAgICBpbmZvZihkYXRhLCAiV2FybmluZywgd3JpdGluZyAlcyBmYWlsZWQhXG4iLAotICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotI2Vsc2UgLyogSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkgKi8KLSAgKHZvaWQpY29ubjsKLSNlbmRpZgotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2NoZWNrX2ZpbmdlcnByaW50KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBjb25zdCBjaGFyICpwdWJrZXlfbWQ1ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdOwotICBjaGFyIG1kNWJ1ZmZlclszM107Ci0KLSAgY29uc3QgY2hhciAqZmluZ2VycHJpbnQgPSBsaWJzc2gyX2hvc3RrZXlfaGFzaChzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgIExJQlNTSDJfSE9TVEtFWV9IQVNIX01ENSk7Ci0KLSAgaWYoZmluZ2VycHJpbnQpIHsKLSAgICAvKiBUaGUgZmluZ2VycHJpbnQgcG9pbnRzIHRvIHN0YXRpYyBzdG9yYWdlICghKSwgZG9uJ3QgZnJlZSgpIGl0LiAqLwotICAgIGludCBpOwotICAgIGZvcihpID0gMDsgaSA8IDE2OyBpKyspCi0gICAgICBtc25wcmludGYoJm1kNWJ1ZmZlcltpKjJdLCAzLCAiJTAyeCIsICh1bnNpZ25lZCBjaGFyKSBmaW5nZXJwcmludFtpXSk7Ci0gICAgaW5mb2YoZGF0YSwgIlNTSCBNRDUgZmluZ2VycHJpbnQ6ICVzXG4iLCBtZDVidWZmZXIpOwotICB9Ci0KLSAgLyogQmVmb3JlIHdlIGF1dGhlbnRpY2F0ZSB3ZSBjaGVjayB0aGUgaG9zdGtleSdzIE1ENSBmaW5nZXJwcmludAotICAgKiBhZ2FpbnN0IGEga25vd24gZmluZ2VycHJpbnQsIGlmIGF2YWlsYWJsZS4KLSAgICovCi0gIGlmKHB1YmtleV9tZDUgJiYgc3RybGVuKHB1YmtleV9tZDUpID09IDMyKSB7Ci0gICAgaWYoIWZpbmdlcnByaW50IHx8ICFzdHJjYXNlY29tcGFyZShtZDVidWZmZXIsIHB1YmtleV9tZDUpKSB7Ci0gICAgICBpZihmaW5nZXJwcmludCkKLSAgICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJEZW5pZWQgZXN0YWJsaXNoaW5nIHNzaCBzZXNzaW9uOiBtaXNtYXRjaCBtZDUgZmluZ2VycHJpbnQuICIKLSAgICAgICAgICAgICJSZW1vdGUgJXMgaXMgbm90IGVxdWFsIHRvICVzIiwgbWQ1YnVmZmVyLCBwdWJrZXlfbWQ1KTsKLSAgICAgIGVsc2UKLSAgICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJEZW5pZWQgZXN0YWJsaXNoaW5nIHNzaCBzZXNzaW9uOiBtZDUgZmluZ2VycHJpbnQgbm90IGF2YWlsYWJsZSIpOwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7Ci0gICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwotICAgICAgcmV0dXJuIHNzaGMtPmFjdHVhbGNvZGU7Ci0gICAgfQotICAgIGluZm9mKGRhdGEsICJNRDUgY2hlY2tzdW0gbWF0Y2ghXG4iKTsKLSAgICAvKiBhcyB3ZSBhbHJlYWR5IG1hdGNoZWQsIHdlIHNraXAgdGhlIGNoZWNrIGZvciBrbm93biBob3N0cyAqLwotICAgIHJldHVybiBDVVJMRV9PSzsKLSAgfQotICByZXR1cm4gc3NoX2tub3duaG9zdChjb25uKTsKLX0KLQotLyoKLSAqIHNzaF9zdGF0ZW1hY2hfYWN0KCkgcnVucyB0aGUgU1NIIHN0YXRlIG1hY2hpbmUgYXMgZmFyIGFzIGl0IGNhbiB3aXRob3V0Ci0gKiBibG9ja2luZyBhbmQgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kLiAgVGhlIGRhdGEgdGhlIHBvaW50ZXIgJ2Jsb2NrJyBwb2ludHMKLSAqIHRvIHdpbGwgYmUgc2V0IHRvIFRSVUUgaWYgdGhlIGxpYnNzaDIgZnVuY3Rpb24gcmV0dXJucyBMSUJTU0gyX0VSUk9SX0VBR0FJTgotICogbWVhbmluZyBpdCB3YW50cyB0byBiZSBjYWxsZWQgYWdhaW4gd2hlbiB0aGUgc29ja2V0IGlzIHJlYWR5Ci0gKi8KLQotc3RhdGljIENVUkxjb2RlIHNzaF9zdGF0ZW1hY2hfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqYmxvY2spCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IFNTSFBST1RPICpzZnRwX3NjcCA9IGRhdGEtPnJlcS5wcm90b3A7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgY2hhciAqbmV3X3JlYWRkaXJfbGluZTsKLSAgaW50IHJjID0gTElCU1NIMl9FUlJPUl9OT05FOwotICBpbnQgZXJyOwotICBpbnQgc2Vla2VyciA9IENVUkxfU0VFS0ZVTkNfT0s7Ci0gICpibG9jayA9IDA7IC8qIHdlJ3JlIG5vdCBibG9ja2luZyBieSBkZWZhdWx0ICovCi0KLSAgZG8gewotCi0gICAgc3dpdGNoKHNzaGMtPnN0YXRlKSB7Ci0gICAgY2FzZSBTU0hfSU5JVDoKLSAgICAgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAwOwotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOwotCi0gICAgICAvKiBTZXQgbGlic3NoMiB0byBub24tYmxvY2tpbmcsIHNpbmNlIGV2ZXJ5dGhpbmcgaW50ZXJuYWxseSBpcwotICAgICAgICAgbm9uLWJsb2NraW5nICovCi0gICAgICBsaWJzc2gyX3Nlc3Npb25fc2V0X2Jsb2NraW5nKHNzaGMtPnNzaF9zZXNzaW9uLCAwKTsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NfU1RBUlRVUCk7Ci0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotCi0gICAgY2FzZSBTU0hfU19TVEFSVFVQOgotICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cChzc2hjLT5zc2hfc2Vzc2lvbiwgKGludClzb2NrKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMpIHsKLSAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLCAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogJWQsICVzIiwgcmMsIGVycl9tc2cpOwotCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfSE9TVEtFWSk7Ci0KLSAgICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgY2FzZSBTU0hfSE9TVEtFWToKLSAgICAgIC8qCi0gICAgICAgKiBCZWZvcmUgd2UgYXV0aGVudGljYXRlIHdlIHNob3VsZCBjaGVjayB0aGUgaG9zdGtleSdzIGZpbmdlcnByaW50Ci0gICAgICAgKiBhZ2FpbnN0IG91ciBrbm93biBob3N0cy4gSG93IHRoYXQgaXMgaGFuZGxlZCAocmVhZGluZyBmcm9tIGZpbGUsCi0gICAgICAgKiB3aGF0ZXZlcikgaXMgdXAgdG8gdXMuCi0gICAgICAgKi8KLSAgICAgIHJlc3VsdCA9IHNzaF9jaGVja19maW5nZXJwcmludChjb25uKTsKLSAgICAgIGlmKCFyZXN1bHQpCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRITElTVCk7Ci0gICAgICAvKiBzc2hfY2hlY2tfZmluZ2VycHJpbnQgc2V0cyBzdGF0ZSBhcHByb3ByaWF0ZWx5IG9uIGVycm9yICovCi0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhMSVNUOgotICAgICAgLyoKLSAgICAgICAqIEZpZ3VyZSBvdXQgYXV0aGVudGljYXRpb24gbWV0aG9kcwotICAgICAgICogTkI6IEFzIHNvb24gYXMgd2UgaGF2ZSBwcm92aWRlZCBhIHVzZXJuYW1lIHRvIGFuIG9wZW5zc2ggc2VydmVyIHdlCi0gICAgICAgKiBtdXN0IG5ldmVyIGNoYW5nZSBpdCBsYXRlci4gVGh1cywgYWx3YXlzIHNwZWNpZnkgdGhlIGNvcnJlY3QgdXNlcm5hbWUKLSAgICAgICAqIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBsaWJzc2gyIGRvY3Mga2luZCBvZiBpbmRpY2F0ZSB0aGF0IGl0IHNob3VsZCBiZQotICAgICAgICogcG9zc2libGUgdG8gZ2V0IGEgJ2dlbmVyaWMnIGxpc3QgKG5vdCB1c2VyLXNwZWNpZmljKSBvZiBhdXRoZW50aWNhdGlvbgotICAgICAgICogbWV0aG9kcywgcHJlc3VtYWJseSB3aXRoIGEgYmxhbmsgdXNlcm5hbWUuIFRoYXQgd29uJ3Qgd29yayBpbiBteQotICAgICAgICogZXhwZXJpZW5jZS4KLSAgICAgICAqIFNvIGFsd2F5cyBzcGVjaWZ5IGl0IGhlcmUuCi0gICAgICAgKi8KLSAgICAgIHNzaGMtPmF1dGhsaXN0ID0gbGlic3NoMl91c2VyYXV0aF9saXN0KHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpKTsKLQotICAgICAgaWYoIXNzaGMtPmF1dGhsaXN0KSB7Ci0gICAgICAgIGlmKGxpYnNzaDJfdXNlcmF1dGhfYXV0aGVudGljYXRlZChzc2hjLT5zc2hfc2Vzc2lvbikpIHsKLSAgICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOwotICAgICAgICAgIGluZm9mKGRhdGEsICJTU0ggdXNlciBhY2NlcHRlZCB3aXRoIG5vIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlcnIgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgIGlmKGVyciA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikKLSAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpbmZvZihkYXRhLCAiU1NIIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYXZhaWxhYmxlOiAlc1xuIiwKLSAgICAgICAgICAgIHNzaGMtPmF1dGhsaXN0KTsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWV9JTklUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9QS0VZX0lOSVQ6Ci0gICAgICAvKgotICAgICAgICogQ2hlY2sgdGhlIHN1cHBvcnRlZCBhdXRoIHR5cGVzIGluIHRoZSBvcmRlciBJIGZlZWwgaXMgbW9zdCBzZWN1cmUKLSAgICAgICAqIHdpdGggdGhlIHJlcXVlc3RlZCB0eXBlIG9mIGF1dGhlbnRpY2F0aW9uCi0gICAgICAgKi8KLSAgICAgIHNzaGMtPmF1dGhlZCA9IEZBTFNFOwotCi0gICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BVQkxJQ0tFWSkgJiYKLSAgICAgICAgIChzdHJzdHIoc3NoYy0+YXV0aGxpc3QsICJwdWJsaWNrZXkiKSAhPSBOVUxMKSkgewotICAgICAgICBib29sIG91dF9vZl9tZW1vcnkgPSBGQUxTRTsKLQotICAgICAgICBzc2hjLT5yc2FfcHViID0gc3NoYy0+cnNhID0gTlVMTDsKLQotICAgICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKQotICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cChkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgLyogVG8gcG9uZGVyIGFib3V0OiBzaG91bGQgcmVhbGx5IHRoZSBsaWIgYmUgbWVzc2luZyBhYm91dCB3aXRoIHRoZQotICAgICAgICAgICAgIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgZXRjPyAqLwotICAgICAgICAgIGNoYXIgKmhvbWUgPSBjdXJsX2dldGVudigiSE9NRSIpOwotCi0gICAgICAgICAgLyogSWYgbm8gcHJpdmF0ZSBrZXkgZmlsZSBpcyBzcGVjaWZpZWQsIHRyeSBzb21lIGNvbW1vbiBwYXRocy4gKi8KLSAgICAgICAgICBpZihob21lKSB7Ci0gICAgICAgICAgICAvKiBUcnkgfi8uc3NoIGZpcnN0LiAqLwotICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9yc2EiLCBob21lKTsKLSAgICAgICAgICAgIGlmKCFzc2hjLT5yc2EpCi0gICAgICAgICAgICAgIG91dF9vZl9tZW1vcnkgPSBUUlVFOwotICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7Ci0gICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKLSAgICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9kc2EiLCBob21lKTsKLSAgICAgICAgICAgICAgaWYoIXNzaGMtPnJzYSkKLSAgICAgICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKLSAgICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcmVlKGhvbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZighb3V0X29mX21lbW9yeSAmJiAhc3NoYy0+cnNhKSB7Ci0gICAgICAgICAgICAvKiBOb3RoaW5nIGZvdW5kOyB0cnkgdGhlIGN1cnJlbnQgZGlyLiAqLwotICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9yc2EiKTsKLSAgICAgICAgICAgIGlmKHNzaGMtPnJzYSAmJiBhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7Ci0gICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKLSAgICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9kc2EiKTsKLSAgICAgICAgICAgICAgaWYoc3NoYy0+cnNhICYmIGFjY2Vzcyhzc2hjLT5yc2EsIFJfT0spICE9IDApIHsKLSAgICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7Ci0gICAgICAgICAgICAgICAgLyogT3V0IG9mIGd1ZXNzZXMuIFNldCB0byB0aGUgZW1wdHkgc3RyaW5nIHRvIGF2b2lkCi0gICAgICAgICAgICAgICAgICogc3VycHJpc2luZyBpbmZvIG1lc3NhZ2VzLiAqLwotICAgICAgICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cCgiIik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBVbmxlc3MgdGhlIHVzZXIgZXhwbGljaXRseSBzcGVjaWZpZXMgYSBwdWJsaWMga2V5IGZpbGUsIGxldAotICAgICAgICAgKiBsaWJzc2gyIGV4dHJhY3QgdGhlIHB1YmxpYyBrZXkgZnJvbSB0aGUgcHJpdmF0ZSBrZXkgZmlsZS4KLSAgICAgICAgICogVGhpcyBpcyBkb25lIGJ5IHNpbXBseSBwYXNzaW5nIHNzaGMtPnJzYV9wdWIgPSBOVUxMLgotICAgICAgICAgKi8KLSAgICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldCi0gICAgICAgICAgIC8qIHRyZWF0IGVtcHR5IHN0cmluZyB0aGUgc2FtZSB3YXkgYXMgTlVMTCAqLwotICAgICAgICAgICAmJiBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV1bMF0pIHsKLSAgICAgICAgICBzc2hjLT5yc2FfcHViID0gc3RyZHVwKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QVUJMSUNfS0VZXSk7Ci0gICAgICAgICAgaWYoIXNzaGMtPnJzYV9wdWIpCi0gICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKG91dF9vZl9tZW1vcnkgfHwgc3NoYy0+cnNhID09IE5VTEwpIHsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7Ci0gICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2Q7Ci0gICAgICAgIGlmKCFzc2hjLT5wYXNzcGhyYXNlKQotICAgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSAiIjsKLQotICAgICAgICBpZihzc2hjLT5yc2FfcHViKQotICAgICAgICAgIGluZm9mKGRhdGEsICJVc2luZyBTU0ggcHVibGljIGtleSBmaWxlICclcydcbiIsIHNzaGMtPnJzYV9wdWIpOwotICAgICAgICBpbmZvZihkYXRhLCAiVXNpbmcgU1NIIHByaXZhdGUga2V5IGZpbGUgJyVzJ1xuIiwgc3NoYy0+cnNhKTsKLQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX1BLRVk6Ci0gICAgICAvKiBUaGUgZnVuY3Rpb24gYmVsb3cgY2hlY2tzIGlmIHRoZSBmaWxlcyBleGlzdHMsIG5vIG5lZWQgdG8gc3RhdCgpIGhlcmUuCi0gICAgICAgKi8KLSAgICAgIHJjID0gbGlic3NoMl91c2VyYXV0aF9wdWJsaWNrZXlfZnJvbWZpbGVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2FfcHViLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2EsIHNzaGMtPnBhc3NwaHJhc2UpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhX3B1Yik7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7Ci0KLSAgICAgIGlmKHJjID09IDApIHsKLSAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKLSAgICAgICAgaW5mb2YoZGF0YSwgIkluaXRpYWxpemVkIFNTSCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgIGluZm9mKGRhdGEsICJTU0ggcHVibGljIGtleSBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6ICVzXG4iLCBlcnJfbXNnKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTU19JTklUKTsKLSAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9QQVNTX0lOSVQ6Ci0gICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BBU1NXT1JEKSAmJgotICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgInBhc3N3b3JkIikgIT0gTlVMTCkpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTUyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfSE9TVF9JTklUKTsKLSAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9QQVNTOgotICAgICAgcmMgPSBsaWJzc2gyX3VzZXJhdXRoX3Bhc3N3b3JkX2V4KHNzaGMtPnNzaF9zZXNzaW9uLCBjb25uLT51c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnBhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnBhc3N3ZCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA9PSAwKSB7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1RfSU5JVCk7Ci0gICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfSE9TVF9JTklUOgotICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9IT1NUKSAmJgotICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgImhvc3RiYXNlZCIpICE9IE5VTEwpKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1QpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0hPU1Q6Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9BR0VOVF9JTklUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9BR0VOVF9JTklUOgotI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKLSAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfQUdFTlQpCi0gICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAicHVibGlja2V5IikgIT0gTlVMTCkpIHsKLQotICAgICAgICAvKiBDb25uZWN0IHRvIHRoZSBzc2gtYWdlbnQgKi8KLSAgICAgICAgLyogVGhlIGFnZW50IGNvdWxkIGJlIHNoYXJlZCBieSBhIGN1cmwgdGhyZWFkIGkgYmVsaWV2ZQotICAgICAgICAgICBidXQgbm90aGluZyBvYnZpb3VzIGFzIGtleXMgY2FuIGJlIGFkZGVkL3JlbW92ZWQgYXQgYW55IHRpbWUgKi8KLSAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgewotICAgICAgICAgIHNzaGMtPnNzaF9hZ2VudCA9IGxpYnNzaDJfYWdlbnRfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgewotICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkNvdWxkIG5vdCBjcmVhdGUgYWdlbnQgb2JqZWN0XG4iKTsKLQotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmMgPSBsaWJzc2gyX2FnZW50X2Nvbm5lY3Qoc3NoYy0+c3NoX2FnZW50KTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsdXJlIGNvbm5lY3RpbmcgdG8gYWdlbnRcbiIpOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsKLSAgICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0xJU1QpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0jZW5kaWYgLyogSEFWRV9MSUJTU0gyX0FHRU5UX0FQSSAqLwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX0FVVEhfQUdFTlRfTElTVDoKLSNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCi0gICAgICByYyA9IGxpYnNzaDJfYWdlbnRfbGlzdF9pZGVudGl0aWVzKHNzaGMtPnNzaF9hZ2VudCk7Ci0KLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKQotICAgICAgICBicmVhazsKLSAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7Ci0gICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfQUdFTlQpOwotICAgICAgICBzc2hjLT5zc2hhZ2VudF9wcmV2X2lkZW50aXR5ID0gTlVMTDsKLSAgICAgIH0KLSNlbmRpZgotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0FHRU5UOgotI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKLSAgICAgIC8qIGFzIHByZXZfaWRlbnRpdHkgZXZvbHZlcyBvbmx5IGFmdGVyIGFuIGlkZW50aXR5IHVzZXIgYXV0aCBmaW5pc2hlZCB3ZQotICAgICAgICAgY2FuIHNhZmVseSByZXF1ZXN0IGl0IGFnYWluIGFzIGxvbmcgYXMgRUFHQUlOIGlzIHJldHVybmVkIGhlcmUgb3IgYnkKLSAgICAgICAgIGxpYnNzaDJfYWdlbnRfdXNlcmF1dGggKi8KLSAgICAgIHJjID0gbGlic3NoMl9hZ2VudF9nZXRfaWRlbnRpdHkoc3NoYy0+c3NoX2FnZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+c3NoYWdlbnRfaWRlbnRpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBpZihyYyA9PSAwKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9hZ2VudF91c2VyYXV0aChzc2hjLT5zc2hfYWdlbnQsIGNvbm4tPnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eSk7Ci0KLSAgICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgICAgaWYocmMgIT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICAgIC8qIHRyaWVkIGFuZCBmYWlsZWQ/IGdvIHRvIG5leHQgaWRlbnRpdHkgKi8KLSAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkgPSBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYocmMgPCAwKQotICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOwotICAgICAgZWxzZSBpZihyYyA9PSAxKQotICAgICAgICBpbmZvZihkYXRhLCAiTm8gaWRlbnRpdHkgd291bGQgbWF0Y2hcbiIpOwotCi0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX05PTkUpIHsKLSAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKLSAgICAgICAgaW5mb2YoZGF0YSwgIkFnZW50IGJhc2VkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7Ci0gICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICB9Ci0jZW5kaWYKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9LRVlfSU5JVDoKLSAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfS0VZQk9BUkQpCi0gICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAia2V5Ym9hcmQtaW50ZXJhY3RpdmUiKSAhPSBOVUxMKSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVkpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9BVVRIX0tFWToKLSAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gQ29udGludWUgd2l0aCBrZXlib2FyZC1pbnRlcmFjdGl2ZSBub3cuICovCi0gICAgICByYyA9IGxpYnNzaDJfdXNlcmF1dGhfa2V5Ym9hcmRfaW50ZXJhY3RpdmVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrYmRfY2FsbGJhY2spOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA9PSAwKSB7Ci0gICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7Ci0gICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBrZXlib2FyZCBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfQVVUSF9ET05FOgotICAgICAgaWYoIXNzaGMtPmF1dGhlZCkgewotICAgICAgICBmYWlsZihkYXRhLCAiQXV0aGVudGljYXRpb24gZmFpbHVyZSIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX0xPR0lOX0RFTklFRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gYXV0aGVudGljYXRlZCBzc2ggc2Vzc2lvbi4KLSAgICAgICAqLwotICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlXG4iKTsKLQotICAgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogU1NIIGlzIGNvbm5lY3RlZCAqLwotCi0gICAgICBjb25uLT5zb2NrZmQgPSBzb2NrOwotICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBDVVJMX1NPQ0tFVF9CQUQ7Ci0KLSAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19TRlRQKSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9JTklUOgotICAgICAgLyoKLSAgICAgICAqIFN0YXJ0IHRoZSBsaWJzc2gyIHNmdHAgc2Vzc2lvbgotICAgICAgICovCi0gICAgICBzc2hjLT5zZnRwX3Nlc3Npb24gPSBsaWJzc2gyX3NmdHBfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgICBpZighc3NoYy0+c2Z0cF9zZXNzaW9uKSB7Ci0gICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KLSAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9GQUlMRURfSU5JVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFMUEFUSCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUkVBTFBBVEg6Ci0gICAgewotICAgICAgY2hhciB0ZW1wSG9tZVtQQVRIX01BWF07Ci0KLSAgICAgIC8qCi0gICAgICAgKiBHZXQgdGhlICJob21lIiBkaXJlY3RvcnkKLSAgICAgICAqLwotICAgICAgcmMgPSBzZnRwX2xpYnNzaDJfcmVhbHBhdGgoc3NoYy0+c2Z0cF9zZXNzaW9uLCAiLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wSG9tZSwgUEFUSF9NQVgtMSk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjID4gMCkgewotICAgICAgICAvKiBJdCBzZWVtcyB0aGF0IHRoaXMgc3RyaW5nIGlzIG5vdCBhbHdheXMgTlVMTCB0ZXJtaW5hdGVkICovCi0gICAgICAgIHRlbXBIb21lW3JjXSA9ICdcMCc7Ci0gICAgICAgIHNzaGMtPmhvbWVkaXIgPSBzdHJkdXAodGVtcEhvbWUpOwotICAgICAgICBpZighc3NoYy0+aG9tZWRpcikgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gc3NoYy0+aG9tZWRpcjsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvKiBSZXR1cm4gdGhlIGVycm9yIHR5cGUgKi8KLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgaWYoZXJyKQotICAgICAgICAgIHJlc3VsdCA9IHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgZXJyb3Igd2Fzbid0IGluIHRoZSBTRlRQIGxldmVsIGJ1dCBmb3IgZXhhbXBsZQotICAgICAgICAgICAgIGEgdGltZS1vdXQgb3Igc2ltaWxhciAqLwotICAgICAgICAgIHJlc3VsdCA9IENVUkxFX1NTSDsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJlcnJvciA9ICVkIG1ha2VzIGxpYmN1cmwgPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIGVyciwgKGludClyZXN1bHQpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgLyogVGhpcyBpcyB0aGUgbGFzdCBzdGVwIGluIHRoZSBTRlRQIGNvbm5lY3QgcGhhc2UuIERvIG5vdGUgdGhhdCB3aGlsZQotICAgICAgIHdlIGdldCB0aGUgaG9tZWRpciBoZXJlLCB3ZSBnZXQgdGhlICJ3b3JraW5ncGF0aCIgaW4gdGhlIERPIGFjdGlvbgotICAgICAgIHNpbmNlIHRoZSBob21lZGlyIHdpbGwgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gcmVxdWVzdCBidXQgdGhlCi0gICAgICAgd29ya2luZyBwYXRoIHdpbGwgbm90LiAqLwotICAgIERFQlVHRihpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIikpOwotICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfSU5JVDoKLQotICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOwotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgewotICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7Ci0gICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVDoKLSAgICAgIGlmKGRhdGEtPnNldC5wb3N0cXVvdGUpIHsKLSAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOwotICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnBvc3RxdW90ZTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URToKLSAgICAgIC8qIFNlbmQgYW55IHF1b3RlIGNvbW1hbmRzICovCi0gICAgewotICAgICAgY29uc3QgY2hhciAqY3A7Ci0KLSAgICAgIC8qCi0gICAgICAgKiBTdXBwb3J0IHNvbWUgb2YgdGhlICJGVFAiIGNvbW1hbmRzCi0gICAgICAgKgotICAgICAgICogJ3NzaGMtPnF1b3RlX2l0ZW0nIGlzIGFscmVhZHkgdmVyaWZpZWQgdG8gYmUgbm9uLU5VTEwgYmVmb3JlIGl0Ci0gICAgICAgKiBzd2l0Y2hlZCB0byB0aGlzIHN0YXRlLgotICAgICAgICovCi0gICAgICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOwotICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOwotCi0gICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCi0gICAgICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKLSAgICAgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAotICAgICAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLwotCi0gICAgICBpZihjbWRbMF0gPT0gJyonKSB7Ci0gICAgICAgIGNtZCsrOwotICAgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoInB3ZCIsIGNtZCkpIHsKLSAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLwotICAgICAgICBjaGFyICp0bXAgPSBhcHJpbnRmKCIyNTcgXCIlc1wiIGlzIGN1cnJlbnQgZGlyZWN0b3J5LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZnRwX3NjcC0+cGF0aCk7Ci0gICAgICAgIGlmKCF0bXApIHsKLSAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9PVVQsIChjaGFyICopIlBXRFxuIiwgNCk7Ci0gICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIHRtcCwgc3RybGVuKHRtcCkpOwotICAgICAgICB9Ci0gICAgICAgIC8qIHRoaXMgc2VuZHMgYW4gRlRQLWxpa2UgImhlYWRlciIgdG8gdGhlIGhlYWRlciBjYWxsYmFjayBzbyB0aGF0IHRoZQotICAgICAgICAgICBjdXJyZW50IGRpcmVjdG9yeSBjYW4gYmUgcmVhZCB2ZXJ5IHNpbWlsYXIgdG8gaG93IGl0IGlzIHJlYWQgd2hlbgotICAgICAgICAgICB1c2luZyBvcmRpbmFyeSBGVFAuICovCi0gICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7Ci0gICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHRoZSBhcmd1bWVudHMgZm9sbG93aW5nIHRoZSBjb21tYW5kIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlCi0gICAgICAgICAqIGNvbW1hbmQgd2l0aCBhIHNwYWNlIHNvIHdlIGNhbiBjaGVjayBmb3IgaXQgdW5jb25kaXRpb25hbGx5Ci0gICAgICAgICAqLwotICAgICAgICBjcCA9IHN0cmNocihjbWQsICcgJyk7Ci0gICAgICAgIGlmKGNwID09IE5VTEwpIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIFNGVFAgY29tbWFuZC4gU3VwcGx5IHBhcmFtZXRlcihzKSEiKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIGFsc28sIGV2ZXJ5IGNvbW1hbmQgdGFrZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IHNvIHdlIGdldCB0aGF0Ci0gICAgICAgICAqIGZpcnN0IGFyZ3VtZW50IHJpZ2h0IG5vdwotICAgICAgICAgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDEsIHNzaGMtPmhvbWVkaXIpOwotICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogQmFkIGZpcnN0IHBhcmFtZXRlciIpOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNGVFAgaXMgYSBiaW5hcnkgcHJvdG9jb2wsIHNvIHdlIGRvbid0IHNlbmQgdGV4dCBjb21tYW5kcwotICAgICAgICAgKiB0byB0aGUgc2VydmVyLiBJbnN0ZWFkLCB3ZSBzY2FuIGZvciBjb21tYW5kcyB1c2VkIGJ5Ci0gICAgICAgICAqIE9wZW5TU0gncyBzZnRwIHByb2dyYW0gYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnNzaDIKLSAgICAgICAgICogZnVuY3Rpb25zLgotICAgICAgICAgKi8KLSAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwICIsIDYpIHx8Ci0gICAgICAgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCAiLCA2KSB8fAotICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24gIiwgNikgKSB7Ci0gICAgICAgICAgLyogYXR0cmlidXRlIGNoYW5nZSAqLwotCi0gICAgICAgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgY29udGFpbnMgdGhlIG1vZGUgdG8gc2V0ICovCi0gICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLwotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKLSAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIGNoZ3JwL2NobW9kL2Nob3duOiAiCi0gICAgICAgICAgICAgICAgICAgICJCYWQgc2Vjb25kIHBhcmFtZXRlciIpOwotICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIG1lbXNldCgmc3NoYy0+cXVvdGVfYXR0cnMsIDAsIHNpemVvZihMSUJTU0gyX1NGVFBfQVRUUklCVVRFUykpOwotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJsbiAiLCAzKSB8fAotICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAic3ltbGluayAiLCA4KSkgewotICAgICAgICAgIC8qIHN5bWJvbGljIGxpbmtpbmcgKi8KLSAgICAgICAgICAvKiBzc2hjLT5xdW90ZV9wYXRoMSBpcyB0aGUgc291cmNlICovCi0gICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLwotICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKLSAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQotICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgICAgICAgICAiU3ludGF4IGVycm9yIGluIGxuL3N5bWxpbms6IEJhZCBzZWNvbmQgcGFyYW1ldGVyIik7Ci0gICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1lNTElOSyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAibWtkaXIgIiwgNikpIHsKLSAgICAgICAgICAvKiBjcmVhdGUgZGlyICovCi0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfTUtESVIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJlbmFtZSAiLCA3KSkgewotICAgICAgICAgIC8qIHJlbmFtZSBmaWxlICovCi0gICAgICAgICAgLyogZmlyc3QgcGFyYW0gaXMgdGhlIHNvdXJjZSBwYXRoICovCi0gICAgICAgICAgLyogc2Vjb25kIHBhcmFtIGlzIHRoZSBkZXN0LiBwYXRoICovCi0gICAgICAgICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOwotICAgICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCi0gICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gcmVuYW1lOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOwotICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JFTkFNRSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicm1kaXIgIiwgNikpIHsKLSAgICAgICAgICAvKiBkZWxldGUgZGlyICovCi0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfUk1ESVIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgInJtICIsIDMpKSB7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfVU5MSU5LKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lmZGVmIEhBU19TVEFUVkZTX1NVUFBPUlQKLSAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAic3RhdHZmcyAiLCA4KSkgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVRWRlMpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmYWlsZihkYXRhLCAiVW5rbm93biBTRlRQIGNvbW1hbmQiKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX05FWFRfUVVPVEU6Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotCi0gICAgICBzc2hjLT5xdW90ZV9pdGVtID0gc3NoYy0+cXVvdGVfaXRlbS0+bmV4dDsKLQotICAgICAgaWYoc3NoYy0+cXVvdGVfaXRlbSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgaWYoc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9OT19TVEFURSkgewotICAgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0dFVElORk8pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVDoKLSAgICB7Ci0gICAgICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOwotICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOwotCi0gICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCi0gICAgICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKLSAgICAgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAotICAgICAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLwotCi0gICAgICBpZihjbWRbMF0gPT0gJyonKSB7Ci0gICAgICAgIGNtZCsrOwotICAgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgaWYoIXN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCIsIDUpKSB7Ci0gICAgICAgIC8qIFNpbmNlIGNob3duIGFuZCBjaGdycCBvbmx5IHNldCBvd25lciBPUiBncm91cCBidXQgbGlic3NoMiB3YW50cyB0bwotICAgICAgICAgKiBzZXQgdGhlbSBib3RoIGF0IG9uY2UsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBjdXJyZW50IG93bmVyc2hpcAotICAgICAgICAgKiBmaXJzdC4gIFRoaXMgdGFrZXMgYW4gZXh0cmEgcHJvdG9jb2wgcm91bmQgdHJpcC4KLSAgICAgICAgICovCi0gICAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnF1b3RlX2F0dHJzKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7IC8qIGdldCB0aG9zZSBhdHRyaWJ1dGVzICovCi0gICAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBnZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLyogTm93IHNldCB0aGUgbmV3IGF0dHJpYnV0ZXMuLi4gKi8KLSAgICAgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaGdycCIsIDUpKSB7Ci0gICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmdpZCA9IHN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDEwKTsKLSAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMuZmxhZ3MgPSBMSUJTU0gyX1NGVFBfQVRUUl9VSURHSUQ7Ci0gICAgICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLmdpZCA9PSAwICYmICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSAmJgotICAgICAgICAgICAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOwotICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNoZ3JwIGdpZCBub3QgYSBudW1iZXIiKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QiLCA1KSkgewotICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5wZXJtaXNzaW9ucyA9IHN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDgpOwotICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5mbGFncyA9IExJQlNTSDJfU0ZUUF9BVFRSX1BFUk1JU1NJT05TOwotICAgICAgICAvKiBwZXJtaXNzaW9ucyBhcmUgb2N0YWwgKi8KLSAgICAgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMucGVybWlzc2lvbnMgPT0gMCAmJgotICAgICAgICAgICAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkpIHsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG1vZCBwZXJtaXNzaW9ucyBub3QgYSBudW1iZXIiKTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24iLCA1KSkgewotICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy51aWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7Ci0gICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOwotICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy51aWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKLSAgICAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG93biB1aWQgbm90IGEgbnVtYmVyIik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLyogTm93IHNlbmQgdGhlIGNvbXBsZXRlZCBzdHJ1Y3R1cmUuLi4gKi8KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TRVRTVEFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+cXVvdGVfYXR0cnMpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkF0dGVtcHQgdG8gc2V0IFNGVFAgc3RhdHMgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3ltbGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TWU1MSU5LKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzeW1saW5rIGNvbW1hbmQgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9NS0RJUjoKLSAgICAgIHJjID0gbGlic3NoMl9zZnRwX21rZGlyX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJta2RpciBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUkVOQU1FOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfcmVuYW1lX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfUkVOQU1FX09WRVJXUklURSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1JFTkFNRV9BVE9NSUMgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9SRU5BTUVfTkFUSVZFKTsKLQotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgInJlbmFtZSBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUk1ESVI6Ci0gICAgICByYyA9IGxpYnNzaDJfc2Z0cF9ybWRpcl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgewotICAgICAgICBlcnIgPSBzZnRwX2xpYnNzaDJfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgInJtZGlyIGNvbW1hbmQgZmFpbGVkOiAlcyIsIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9VTkxJTks6Ci0gICAgICByYyA9IGxpYnNzaDJfc2Z0cF91bmxpbmtfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSkpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOwotICAgICAgICBmYWlsZihkYXRhLCAicm0gY29tbWFuZCBmYWlsZWQ6ICVzIiwgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBIQVNfU1RBVFZGU19TVVBQT1JUCi0gICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTOgotICAgIHsKLSAgICAgIExJQlNTSDJfU0ZUUF9TVEFUVkZTIHN0YXR2ZnM7Ci0gICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0dmZzKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR2ZnMpOwotCi0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzdGF0dmZzIGNvbW1hbmQgZmFpbGVkOiAlcyIsIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHJjID09IDApIHsKLSAgICAgICAgY2hhciAqdG1wID0gYXByaW50Zigic3RhdHZmczpcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ic2l6ZTogJWxsdVxuIiAiZl9mcnNpemU6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ibG9ja3M6ICVsbHVcbiIgImZfYmZyZWU6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9iYXZhaWw6ICVsbHVcbiIgImZfZmlsZXM6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mZnJlZTogJWxsdVxuIiAiZl9mYXZhaWw6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mc2lkOiAlbGx1XG4iICJmX2ZsYWc6ICVsbHVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9uYW1lbWF4OiAlbGx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9ic2l6ZSwgc3RhdHZmcy5mX2Zyc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfYmxvY2tzLCBzdGF0dmZzLmZfYmZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX2JhdmFpbCwgc3RhdHZmcy5mX2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9mZnJlZSwgc3RhdHZmcy5mX2ZhdmFpbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfZnNpZCwgc3RhdHZmcy5mX2ZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX25hbWVtYXgpOwotICAgICAgICBpZighdG1wKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKLSAgICAgICAgZnJlZSh0bXApOwotICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAgY2FzZSBTU0hfU0ZUUF9HRVRJTkZPOgotICAgIHsKLSAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBTU0hfU0ZUUF9GSUxFVElNRToKLSAgICB7Ci0gICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKLQotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TVEFULCAmYXR0cnMpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA9PSAwKSB7Ci0gICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBhdHRycy5tdGltZTsKLSAgICAgIH0KLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1RSQU5TX0lOSVQ6Ci0gICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7Ci0gICAgICBlbHNlIHsKLSAgICAgICAgaWYoc2Z0cF9zY3AtPnBhdGhbc3RybGVuKHNmdHBfc2NwLT5wYXRoKS0xXSA9PSAnLycpCi0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9JTklUKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1VQTE9BRF9JTklUOgotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgICAvKgotICAgICAgICogTk9URSEhISAgbGlic3NoMiByZXF1aXJlcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgZnVsbCBwYXRoCi0gICAgICAgKiAgICAgICAgICB0aGF0IGluY2x1ZGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBuYW1lIE9SIGVuZHMgaW4gYSAiLyIKLSAgICAgICAqICAgICAgICAgIElmIHRoaXMgaXMgbm90IGRvbmUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBuYW1lZCB0aGUKLSAgICAgICAqICAgICAgICAgIHNhbWUgbmFtZSBhcyB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGguCi0gICAgICAgKi8KLQotICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gIT0gMCkgewotICAgICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKLSAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwKSB7Ci0gICAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7Ci0gICAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZihyYykgewotICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLmZpbGVzaXplOwotICAgICAgICAgICAgaWYoc2l6ZSA8IDApIHsKLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLCBzaXplKTsKLSAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGF0dHJzLmZpbGVzaXplOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZihkYXRhLT5zZXQuZnRwX2FwcGVuZCkKLSAgICAgICAgLyogVHJ5IHRvIG9wZW4gZm9yIGFwcGVuZCwgYnV0IGNyZWF0ZSBpZiBub25leGlzdGluZyAqLwotICAgICAgICBmbGFncyA9IExJQlNTSDJfRlhGX1dSSVRFfExJQlNTSDJfRlhGX0NSRUFUfExJQlNTSDJfRlhGX0FQUEVORDsKLSAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKQotICAgICAgICAvKiBJZiB3ZSBoYXZlIHJlc3RhcnQgcG9zaXRpb24gdGhlbiBvcGVuIGZvciBhcHBlbmQgKi8KLSAgICAgICAgZmxhZ3MgPSBMSUJTU0gyX0ZYRl9XUklURXxMSUJTU0gyX0ZYRl9BUFBFTkQ7Ci0gICAgICBlbHNlCi0gICAgICAgIC8qIENsZWFyIGZpbGUgYmVmb3JlIHdyaXRpbmcgKG5vcm1hbCBiZWhhdmlvdXIpICovCi0gICAgICAgIGZsYWdzID0gTElCU1NIMl9GWEZfV1JJVEV8TElCU1NIMl9GWEZfQ1JFQVR8TElCU1NIMl9GWEZfVFJVTkM7Ci0KLSAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0KLSAgICAgICAgbGlic3NoMl9zZnRwX29wZW5fZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfT1BFTkZJTEUpOwotCi0gICAgICBpZighc3NoYy0+c2Z0cF9oYW5kbGUpIHsKLSAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7Ci0KLSAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9FQUdBSU4gPT0gcmMpCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9TRlRQX1BST1RPQ09MID09IHJjKQotICAgICAgICAgIC8qIG9ubHkgd2hlbiB0aGVyZSB3YXMgYW4gU0ZUUCBwcm90b2NvbCBlcnJvciBjYW4gd2UgZXh0cmFjdAotICAgICAgICAgICAgIHRoZSBzZnRwIGVycm9yISAqLwotICAgICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBlcnIgPSAtMTsgLyogbm90IGFuIHNmdHAgZXJyb3IgYXQgYWxsICovCi0KLSAgICAgICAgaWYoc3NoYy0+c2Vjb25kQ3JlYXRlRGlycykgewotICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gZXJyPj0gTElCU1NIMl9GWF9PSz8KLSAgICAgICAgICAgIHNmdHBfbGlic3NoMl9lcnJvcl90b19DVVJMRShlcnIpOkNVUkxFX1NTSDsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiQ3JlYXRpbmcgdGhlIGRpci9maWxlIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZigoKGVyciA9PSBMSUJTU0gyX0ZYX05PX1NVQ0hfRklMRSkgfHwKLSAgICAgICAgICAgIChlcnIgPT0gTElCU1NIMl9GWF9GQUlMVVJFKSB8fAotICAgICAgICAgICAgKGVyciA9PSBMSUJTU0gyX0ZYX05PX1NVQ0hfUEFUSCkpICYmCi0gICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgJiYKLSAgICAgICAgICAgIChzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpID4gMSkpKSB7Ci0gICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSB0aGUgcGF0aCByZW1vdGVseSAqLwotICAgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCi0gICAgICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDE7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gZXJyPj0gTElCU1NIMl9GWF9PSz8KLSAgICAgICAgICBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoZXJyKTpDVVJMRV9TU0g7Ci0gICAgICAgIGlmKCFzc2hjLT5hY3R1YWxjb2RlKSB7Ci0gICAgICAgICAgLyogU29tZXRpbWVzLCBmb3Igc29tZSByZWFzb24gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3IoKSByZXR1cm5zCi0gICAgICAgICAgICAgemVybyBldmVuIHRob3VnaCBsaWJzc2gyX3NmdHBfb3BlbigpIGZhaWxlZCBwcmV2aW91c2x5ISBXZSBuZWVkCi0gICAgICAgICAgICAgdG8gd29yayBhcm91bmQgdGhhdCEgKi8KLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfU1NIOwotICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGZhaWxmKGRhdGEsICJVcGxvYWQgZmFpbGVkOiAlcyAoJWQvJWQpIiwKLSAgICAgICAgICAgICAgZXJyPj0gTElCU1NIMl9GWF9PSz9zZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKToic3NoIGVycm9yIiwKLSAgICAgICAgICAgICAgZXJyLCByYyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKiBJZiB3ZSBoYXZlIGEgcmVzdGFydCBwb2ludCB0aGVuIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgY29ycmVjdAotICAgICAgICAgcG9zaXRpb24uICovCi0gICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApIHsKLSAgICAgICAgLyogTGV0J3MgcmVhZCBvZmYgdGhlIHByb3BlciBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgaW5wdXQuICovCi0gICAgICAgIGlmKGNvbm4tPnNlZWtfZnVuYykgewotICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOwotICAgICAgICAgIHNlZWtlcnIgPSBjb25uLT5zZWVrX2Z1bmMoY29ubi0+c2Vla19jbGllbnQsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VFS19TRVQpOwotICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19PSykgewotICAgICAgICAgIGN1cmxfb2ZmX3QgcGFzc2VkID0gMDsKLQotICAgICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSykgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBzZWVrIHN0cmVhbSIpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUOwotICAgICAgICAgIH0KLSAgICAgICAgICAvKiBzZWVrZXJyID09IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUsgKGNhbid0IHNlZWsgdG8gb2Zmc2V0KSAqLwotICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIHNpemVfdCByZWFkdGhpc2Ftb3VudG5vdyA9Ci0gICAgICAgICAgICAgIChkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCA+IGRhdGEtPnNldC5idWZmZXJfc2l6ZSkgPwotICAgICAgICAgICAgICAoc2l6ZV90KWRhdGEtPnNldC5idWZmZXJfc2l6ZSA6Ci0gICAgICAgICAgICAgIGN1cmx4X3NvdG91eihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCk7Ci0KLSAgICAgICAgICAgIHNpemVfdCBhY3R1YWxseXJlYWQ7Ci0gICAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKLSAgICAgICAgICAgIGFjdHVhbGx5cmVhZCA9IGRhdGEtPnN0YXRlLmZyZWFkX2Z1bmMoZGF0YS0+c3RhdGUuYnVmZmVyLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkdGhpc2Ftb3VudG5vdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuaW4pOwotICAgICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwotCi0gICAgICAgICAgICBwYXNzZWQgKz0gYWN0dWFsbHlyZWFkOwotICAgICAgICAgICAgaWYoKGFjdHVhbGx5cmVhZCA9PSAwKSB8fCAoYWN0dWFsbHlyZWFkID4gcmVhZHRoaXNhbW91bnRub3cpKSB7Ci0gICAgICAgICAgICAgIC8qIHRoaXMgY2hlY2tzIGZvciBncmVhdGVyLXRoYW4gb25seSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgQ1VSTF9SRUFERlVOQ19BQk9SVCByZXR1cm4gY29kZSBzdGlsbCBhYm9ydHMgKi8KLSAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWFkIGRhdGEiKTsKLSAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gd2hpbGUocGFzc2VkIDwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogbm93LCBkZWNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcmVhZCAqLwotICAgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgewotICAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgLT0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207Ci0gICAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOwotICAgICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTRlRQX1NFRUsoc3NoYy0+c2Z0cF9oYW5kbGUsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgIH0KLSAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPiAwKSB7Ci0gICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKLSAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKLSAgICAgIH0KLSAgICAgIC8qIHVwbG9hZCBkYXRhICovCi0gICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIEZJUlNUU09DS0VUKTsKLQotICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCi0gICAgICBjb25uLT5zb2NrZmQgPSBjb25uLT53cml0ZXNvY2tmZDsKLQotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0Ci0gICAgICAgICAgIGZpZ3VyZSBvdXQgYSAicmVhbCIgYml0bWFzayAqLwotICAgICAgICBzc2hjLT5vcmlnX3dhaXRmb3IgPSBkYXRhLT5yZXEua2VlcG9uOwotCi0gICAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKLSAgICAgICAgICAgb3V0IHJlYWRhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgc2Z0cCBzZW5kIGZ1bmN0aW9uIHdpbGwgZGVhbAotICAgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KLSAgICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX09VVDsKLQotICAgICAgICAvKiBzaW5jZSB3ZSBkb24ndCByZWFsbHkgd2FpdCBmb3IgYW55dGhpbmcgYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0aGUKLSAgICAgICAgICAgc3RhdGUgbWFjaGluZSB0byBtb3ZlIG9uIGFzIHNvb24gYXMgcG9zc2libGUgc28gd2Ugc2V0IGEgdmVyeSBzaG9ydAotICAgICAgICAgICB0aW1lb3V0IGhlcmUgKi8KLSAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1JVTl9OT1cpOwotCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVDoKLSAgICAgIGlmKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkgPiAxKSB7Ci0gICAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHNmdHBfc2NwLT5wYXRoICsgMTsgLyogaWdub3JlIHRoZSBsZWFkaW5nICcvJyAqLwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSUyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTOgotICAgICAgc3NoYy0+c2xhc2hfcG9zID0gc3RyY2hyKHNzaGMtPnNsYXNoX3BvcywgJy8nKTsKLSAgICAgIGlmKHNzaGMtPnNsYXNoX3BvcykgewotICAgICAgICAqc3NoYy0+c2xhc2hfcG9zID0gMDsKLQotICAgICAgICBpbmZvZihkYXRhLCAiQ3JlYXRpbmcgZGlyZWN0b3J5ICclcydcbiIsIHNmdHBfc2NwLT5wYXRoKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUjoKLSAgICAgIC8qICdtb2RlJyAtIHBhcmFtZXRlciBpcyBwcmVsaW1pbmFyeSAtIGRlZmF1bHQgdG8gMDY0NCAqLwotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfbWtkaXJfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zKTsKLSAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9ICcvJzsKLSAgICAgICsrc3NoYy0+c2xhc2hfcG9zOwotICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEFib3J0IGlmIGZhaWx1cmUgd2Fzbid0IHRoYXQgdGhlIGRpciBhbHJlYWR5IGV4aXN0cyBvciB0aGUKLSAgICAgICAgICogcGVybWlzc2lvbiB3YXMgZGVuaWVkIChjcmVhdGlvbiBtaWdodCBzdWNjZWVkIGZ1cnRoZXIgZG93biB0aGUKLSAgICAgICAgICogcGF0aCkgLSByZXRyeSBvbiB1bnNwZWNpZmljIEZBSUxVUkUgYWxzbwotICAgICAgICAgKi8KLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgaWYoKGVyciAhPSBMSUJTU0gyX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFMpICYmCi0gICAgICAgICAgIChlcnIgIT0gTElCU1NIMl9GWF9GQUlMVVJFKSAmJgotICAgICAgICAgICAoZXJyICE9IExJQlNTSDJfRlhfUEVSTUlTU0lPTl9ERU5JRUQpKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLwotICAgICAgfQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfSU5JVDoKLSAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7Ci0gICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyoKLSAgICAgICAqIFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGdldCwgc28gcHJvZHVjZSBhIGRpcmVjdG9yeQotICAgICAgICogbGlzdGluZwotICAgICAgICovCi0gICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IGxpYnNzaDJfc2Z0cF9vcGVuX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgTElCU1NIMl9TRlRQX09QRU5ESVIpOwotICAgICAgaWYoIXNzaGMtPnNmdHBfaGFuZGxlKSB7Ci0gICAgICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKSA9PQotICAgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSBmb3IgcmVhZGluZzogJXMiLAotICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7Ci0gICAgICBpZighc3NoYy0+cmVhZGRpcl9maWxlbmFtZSkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7Ci0gICAgICBpZighc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSOgotICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfcmVhZGRpcl9leChzc2hjLT5zZnRwX2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9NQVgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX01BWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnJlYWRkaXJfYXR0cnMpOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZihyYyA+IDApIHsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSAoc2l6ZV90KSByYzsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZVtzc2hjLT5yZWFkZGlyX2xlbl0gPSAnXDAnOwotCi0gICAgICAgIGlmKGRhdGEtPnNldC5mdHBfbGlzdF9vbmx5KSB7Ci0gICAgICAgICAgY2hhciAqdG1wTGluZTsKLQotICAgICAgICAgIHRtcExpbmUgPSBhcHJpbnRmKCIlc1xuIiwgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgICAgaWYodG1wTGluZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7Ci0gICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcExpbmUsIHNzaGMtPnJlYWRkaXJfbGVuICsgMSk7Ci0gICAgICAgICAgZnJlZSh0bXBMaW5lKTsKLQotICAgICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIHNpbmNlIHRoaXMgY291bnRzIHdoYXQgd2Ugc2VuZCB0byB0aGUgY2xpZW50LCB3ZSBpbmNsdWRlIHRoZQotICAgICAgICAgICAgIG5ld2xpbmUgaW4gdGhpcyBjb3VudGVyICovCi0gICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBzc2hjLT5yZWFkZGlyX2xlbiArIDE7Ci0KLSAgICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCi0gICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKLSAgICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9PVVQsIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGVuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuID0gc3RybGVuKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuID0gODAgKyBzc2hjLT5yZWFkZGlyX2N1cnJMZW47Ci0gICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gY2FsbG9jKHNzaGMtPnJlYWRkaXJfdG90YWxMZW4sIDEpOwotICAgICAgICAgIGlmKCFzc2hjLT5yZWFkZGlyX2xpbmUpIHsKLSAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7Ci0gICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgbWVtY3B5KHNzaGMtPnJlYWRkaXJfbGluZSwgc3NoYy0+cmVhZGRpcl9sb25nZW50cnksCi0gICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7Ci0gICAgICAgICAgaWYoKHNzaGMtPnJlYWRkaXJfYXR0cnMuZmxhZ3MgJiBMSUJTU0gyX1NGVFBfQVRUUl9QRVJNSVNTSU9OUykgJiYKLSAgICAgICAgICAgICAoKHNzaGMtPnJlYWRkaXJfYXR0cnMucGVybWlzc2lvbnMgJiBMSUJTU0gyX1NGVFBfU19JRk1UKSA9PQotICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU19JRkxOSykpIHsKLSAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPSBtYWxsb2MoUEFUSF9NQVggKyAxKTsKLSAgICAgICAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPT0gTlVMTCkgewotICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoLCBQQVRIX01BWCwgIiVzJXMiLCBzZnRwX3NjcC0+cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfTElOSyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKHJjID09IDApIHsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfRE9ORSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZWxzZSBpZihyYyA8IDApIHsKLSAgICAgICAgZXJyID0gc2Z0cF9saWJzc2gyX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKLSAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKLSAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyA6OiAlZCIsCi0gICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpLAotICAgICAgICAgICAgICBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOwotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0xJTks6Ci0gICAgICByYyA9Ci0gICAgICAgIGxpYnNzaDJfc2Z0cF9zeW1saW5rX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYLCBMSUJTU0gyX1NGVFBfUkVBRExJTkspOwotICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IChzaXplX3QpIHJjOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKTsKLQotICAgICAgLyogZ2V0IHJvb20gZm9yIHRoZSBmaWxlbmFtZSBhbmQgZXh0cmEgb3V0cHV0ICovCi0gICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuICs9IDQgKyBzc2hjLT5yZWFkZGlyX2xlbjsKLSAgICAgIG5ld19yZWFkZGlyX2xpbmUgPSBDdXJsX3NhZmVyZWFsbG9jKHNzaGMtPnJlYWRkaXJfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4pOwotICAgICAgaWYoIW5ld19yZWFkZGlyX2xpbmUpIHsKLSAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gTlVMTDsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gbmV3X3JlYWRkaXJfbGluZTsKLQotICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NOgotICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sICJcbiIpOwotICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7Ci0KLSAgICAgIGlmKCFyZXN1bHQpIHsKLQotICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCi0gICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7Ci0gICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwgc3NoYy0+cmVhZGRpcl9saW5lLAotICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKLSAgICAgICAgfQotICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IHNzaGMtPnJlYWRkaXJfY3VyckxlbjsKLSAgICAgIH0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVIpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfRE9ORToKLSAgICAgIGlmKGxpYnNzaDJfc2Z0cF9jbG9zZWRpcihzc2hjLT5zZnRwX2hhbmRsZSkgPT0KLSAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBOVUxMOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOwotCi0gICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCi0gICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUOgotICAgICAgLyoKLSAgICAgICAqIFdvcmsgb24gZ2V0dGluZyB0aGUgc3BlY2lmaWVkIGZpbGUKLSAgICAgICAqLwotICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPQotICAgICAgICBsaWJzc2gyX3NmdHBfb3Blbl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfRlhGX1JFQUQsIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX09QRU5GSUxFKTsKLSAgICAgIGlmKCFzc2hjLT5zZnRwX2hhbmRsZSkgewotICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KLSAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVyciA9IHNmdHBfbGlic3NoMl9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiByZW1vdGUgZmlsZSBmb3IgcmVhZGluZzogJXMiLAotICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKLSAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUOgotICAgIHsKLSAgICAgIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIGF0dHJzOwotCi0gICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0X2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7Ci0gICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmKHJjIHx8Ci0gICAgICAgICAhKGF0dHJzLmZsYWdzICYgTElCU1NIMl9TRlRQX0FUVFJfU0laRSkgfHwKLSAgICAgICAgIChhdHRycy5maWxlc2l6ZSA9PSAwKSkgewotICAgICAgICAvKgotICAgICAgICAgKiBsaWJzc2gyX3NmdHBfb3BlbigpIGRpZG4ndCByZXR1cm4gYW4gZXJyb3IsIHNvIG1heWJlIHRoZSBzZXJ2ZXIKLSAgICAgICAgICoganVzdCBkb2Vzbid0IHN1cHBvcnQgc3RhdCgpCi0gICAgICAgICAqIE9SIHRoZSBzZXJ2ZXIgZG9lc24ndCByZXR1cm4gYSBmaWxlIHNpemUgd2l0aCBhIHN0YXQoKQotICAgICAgICAgKiBPUiBmaWxlIHNpemUgaXMgMAotICAgICAgICAgKi8KLSAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKLSAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7Ci0gICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgY3VybF9vZmZfdCBzaXplID0gYXR0cnMuZmlsZXNpemU7Ci0KLSAgICAgICAgaWYoc2l6ZSA8IDApIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOwotICAgICAgICB9Ci0gICAgICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZV9yYW5nZSkgewotICAgICAgICAgIGN1cmxfb2ZmX3QgZnJvbSwgdG87Ci0gICAgICAgICAgY2hhciAqcHRyOwotICAgICAgICAgIGNoYXIgKnB0cjI7Ci0gICAgICAgICAgQ1VSTG9mZnQgdG9fdDsKLSAgICAgICAgICBDVVJMb2ZmdCBmcm9tX3Q7Ci0KLSAgICAgICAgICBmcm9tX3QgPSBjdXJseF9zdHJ0b29mZnQoY29ubi0+ZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDAsICZmcm9tKTsKLSAgICAgICAgICBpZihmcm9tX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpCi0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkFOR0VfRVJST1I7Ci0gICAgICAgICAgd2hpbGUoKnB0ciAmJiAoSVNTUEFDRSgqcHRyKSB8fCAoKnB0ciA9PSAnLScpKSkKLSAgICAgICAgICAgIHB0cisrOwotICAgICAgICAgIHRvX3QgPSBjdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCwgJnRvKTsKLSAgICAgICAgICBpZih0b190ID09IENVUkxfT0ZGVF9GTE9XKQotICAgICAgICAgICAgcmV0dXJuIENVUkxFX1JBTkdFX0VSUk9SOwotICAgICAgICAgIGlmKCh0b190ID09IENVUkxfT0ZGVF9JTlZBTCkgLyogbm8gInRvIiB2YWx1ZSBnaXZlbiAqLwotICAgICAgICAgICAgIHx8ICh0byA+PSBzaXplKSkgewotICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoZnJvbV90KSB7Ci0gICAgICAgICAgICAvKiBmcm9tIGlzIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCi0gICAgICAgICAgICBmcm9tID0gc2l6ZSAtIHRvOwotICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYoZnJvbSA+IHNpemUpIHsKLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgotICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIGZyb20sIGF0dHJzLmZpbGVzaXplKTsKLSAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZihmcm9tID4gdG8pIHsKLSAgICAgICAgICAgIGZyb20gPSB0bzsKLSAgICAgICAgICAgIHNpemUgPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNpemUgPSB0byAtIGZyb20gKyAxOwotICAgICAgICAgIH0KLQotICAgICAgICAgIFNGVFBfU0VFSyhjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBmcm9tKTsKLSAgICAgICAgfQotICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemU7Ci0gICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemU7Ci0gICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKLSAgICAgIH0KLQotICAgICAgLyogV2UgY2FuIHJlc3VtZSBpZiB3ZSBjYW4gc2VlayB0byB0aGUgcmVzdW1lIHBvc2l0aW9uICovCi0gICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewotICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKLSAgICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KLSAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IC1kYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewotICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKLSAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiCi0gICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwKLSAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBhdHRycy5maWxlc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KLSAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSBhdHRycy5maWxlc2l6ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7Ci0gICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCi0gICAgICAgICAgICAgICAgICAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsCi0gICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgYXR0cnMuZmlsZXNpemUpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIERvZXMgYSBjb21wbGV0ZWQgZmlsZSBuZWVkIHRvIGJlIHNlZWtlZCBhbmQgc3RhcnRlZCBvciBjbG9zZWQgPyAqLwotICAgICAgICAvKiBOb3cgc3RvcmUgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBhcmUgZXhwZWN0ZWQgdG8gZG93bmxvYWQgKi8KLSAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBhdHRycy5maWxlc2l6ZSAtIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOwotICAgICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSBhdHRycy5maWxlc2l6ZSAtIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOwotICAgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLmZpbGVzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOwotICAgICAgICBTRlRQX1NFRUsoc3NoYy0+c2Z0cF9oYW5kbGUsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBTZXR1cCB0aGUgYWN0dWFsIGRvd25sb2FkICovCi0gICAgaWYoZGF0YS0+cmVxLnNpemUgPT0gMCkgewotICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCAtMSk7Ci0gICAgICBpbmZvZihkYXRhLCAiRmlsZSBhbHJlYWR5IGNvbXBsZXRlbHkgZG93bmxvYWRlZFxuIik7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCBGSVJTVFNPQ0tFVCwgZGF0YS0+cmVxLnNpemUsIEZBTFNFLCAtMSk7Ci0KLSAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKLQotICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfcmVjZWl2aW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucwotICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiByZWN2IGZ1bmN0aW9uIHdpbGwgZGVhbAotICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLwotICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9JTjsKLQotICAgIGlmKHJlc3VsdCkgewotICAgICAgLyogdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXI7IHRoZSBjbG9zZSBzdGF0ZSBzaG91bGQgYmUgZW50ZXJlZAotICAgICAgICAgYXQgdGhlIHRpbWUgdGhlIGVycm9yIG9jY3VycyAqLwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0ZUUF9DTE9TRToKLSAgICAgIGlmKHNzaGMtPnNmdHBfaGFuZGxlKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZnRwX2Nsb3NlKHNzaGMtPnNmdHBfaGFuZGxlKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBjbG9zZSBsaWJzc2gyIGZpbGU6ICVkICVzXG4iLCByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBOVUxMOwotICAgICAgfQotCi0gICAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKLQotICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTRlRQIERPTkUgZG9uZVxuIikpOwotCi0gICAgICAvKiBDaGVjayBpZiBuZXh0c3RhdGUgaXMgc2V0IGFuZCBtb3ZlIC5uZXh0c3RhdGUgY291bGQgYmUgUE9TVFFVT1RFX0lOSVQKLSAgICAgICAgIEFmdGVyIG5leHRzdGF0ZSBpcyBleGVjdXRlZCwgdGhlIGNvbnRyb2wgc2hvdWxkIGNvbWUgYmFjayB0bwotICAgICAgICAgU1NIX1NGVFBfQ0xPU0UgdG8gcGFzcyB0aGUgY29ycmVjdCByZXN1bHQgYmFjayAgKi8KLSAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUgJiYKLSAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfU0ZUUF9DTE9TRSkgewotICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOwotICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfU0ZUUF9DTE9TRTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NGVFBfU0hVVERPV046Ci0gICAgICAvKiBkdXJpbmcgdGltZXMgd2UgZ2V0IGhlcmUgZHVlIHRvIGEgYnJva2VuIHRyYW5zZmVyIGFuZCB0aGVuIHRoZQotICAgICAgICAgc2Z0cF9oYW5kbGUgbWlnaHQgbm90IGhhdmUgYmVlbiB0YWtlbiBkb3duIHNvIG1ha2Ugc3VyZSB0aGF0IGlzIGRvbmUKLSAgICAgICAgIGJlZm9yZSB3ZSBwcm9jZWVkICovCi0KLSAgICAgIGlmKHNzaGMtPnNmdHBfaGFuZGxlKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZnRwX2Nsb3NlKHNzaGMtPnNmdHBfaGFuZGxlKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwgJmVycl9tc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBjbG9zZSBsaWJzc2gyIGZpbGU6ICVkICVzXG4iLCByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBOVUxMOwotICAgICAgfQotICAgICAgaWYoc3NoYy0+c2Z0cF9zZXNzaW9uKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZnRwX3NodXRkb3duKHNzaGMtPnNmdHBfc2Vzc2lvbik7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBzdG9wIGxpYnNzaDIgc2Z0cCBzdWJzeXN0ZW1cbiIpOwotICAgICAgICB9Ci0gICAgICAgIHNzaGMtPnNmdHBfc2Vzc2lvbiA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+aG9tZWRpcik7Ci0gICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gTlVMTDsKLQotICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9UUkFOU19JTklUOgotICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOwotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKLSAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA8IDApIHsKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU0NQIHJlcXVpcmVzIGEga25vd24gZmlsZSBzaXplIGZvciB1cGxvYWQiKTsKLSAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfVVBMT0FEX0ZBSUxFRDsKLSAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9VUExPQURfSU5JVCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET1dOTE9BRF9JTklUKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX1VQTE9BRF9JTklUOgotICAgICAgLyoKLSAgICAgICAqIGxpYnNzaDIgcmVxdWlyZXMgdGhhdCB0aGUgZGVzdGluYXRpb24gcGF0aCBpcyBhIGZ1bGwgcGF0aCB0aGF0Ci0gICAgICAgKiBpbmNsdWRlcyB0aGUgZGVzdGluYXRpb24gZmlsZSBhbmQgbmFtZSBPUiBlbmRzIGluIGEgIi8iIC4gIElmIHRoaXMgaXMKLSAgICAgICAqIG5vdCBkb25lIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHdpbGwgYmUgbmFtZWQgdGhlIHNhbWUgbmFtZSBhcyB0aGUgbGFzdAotICAgICAgICogZGlyZWN0b3J5IGluIHRoZSBwYXRoLgotICAgICAgICovCi0gICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9Ci0gICAgICAgIFNDUF9TRU5EKHNzaGMtPnNzaF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwgZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zLAotICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKLSAgICAgIGlmKCFzc2hjLT5zc2hfY2hhbm5lbCkgewotICAgICAgICBpbnQgc3NoX2VycjsKLSAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0KLSAgICAgICAgaWYobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pID09Ci0gICAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHNzaF9lcnIgPSAoaW50KShsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKSk7Ci0gICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICIlcyIsIGVycl9tc2cpOwotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoc3NoX2Vycik7Ci0gICAgICAgIC8qIE1hcCBnZW5lcmljIGVycm9ycyB0byB1cGxvYWQgZmFpbGVkICovCi0gICAgICAgIGlmKHNzaGMtPmFjdHVhbGNvZGUgPT0gQ1VSTEVfU1NIIHx8Ci0gICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPT0gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EKQotICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9VUExPQURfRkFJTEVEOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogdXBsb2FkIGRhdGEgKi8KLSAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgRklSU1RTT0NLRVQpOwotCi0gICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOwotCi0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKLSAgICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCi0gICAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247Ci0KLSAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucwotICAgICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiBzY3Agc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKLSAgICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCi0gICAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7Ci0KLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfRE9XTkxPQURfSU5JVDoKLSAgICB7Ci0gICAgICBjdXJsX29mZl90IGJ5dGVjb3VudDsKLQotICAgICAgLyoKLSAgICAgICAqIFdlIG11c3QgY2hlY2sgdGhlIHJlbW90ZSBmaWxlOyBpZiBpdCBpcyBhIGRpcmVjdG9yeSBubyB2YWx1ZXMgd2lsbAotICAgICAgICogYmUgc2V0IGluIHNiCi0gICAgICAgKi8KLQotICAgICAgLyoKLSAgICAgICAqIElmIHN1cHBvcnQgZm9yID4yR0IgZmlsZXMgZXhpc3RzLCB1c2UgaXQuCi0gICAgICAgKi8KLQotICAgICAgLyogZ2V0IGEgZnJlc2ggbmV3IGNoYW5uZWwgZnJvbSB0aGUgc3NoIGxheWVyICovCi0jaWYgTElCU1NIMl9WRVJTSU9OX05VTSA8IDB4MDEwNzAwCi0gICAgICBzdHJ1Y3Qgc3RhdCBzYjsKLSAgICAgIG1lbXNldCgmc2IsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOwotICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBsaWJzc2gyX3NjcF9yZWN2KHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmdHBfc2NwLT5wYXRoLCAmc2IpOwotI2Vsc2UKLSAgICAgIGxpYnNzaDJfc3RydWN0X3N0YXQgc2I7Ci0gICAgICBtZW1zZXQoJnNiLCAwLCBzaXplb2YobGlic3NoMl9zdHJ1Y3Rfc3RhdCkpOwotICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBsaWJzc2gyX3NjcF9yZWN2Mihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsICZzYik7Ci0jZW5kaWYKLQotICAgICAgaWYoIXNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIGludCBzc2hfZXJyOwotICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLQotICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KLSAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLQotICAgICAgICBzc2hfZXJyID0gKGludCkobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCkpOwotICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKLSAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOwotICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKHNzaF9lcnIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogZG93bmxvYWQgZGF0YSAqLwotICAgICAgYnl0ZWNvdW50ID0gKGN1cmxfb2ZmX3Qpc2Iuc3Rfc2l6ZTsKLSAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9ICAoY3VybF9vZmZfdClzYi5zdF9zaXplOwotICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCBGSVJTVFNPQ0tFVCwgYnl0ZWNvdW50LCBGQUxTRSwgLTEpOwotCi0gICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KLSAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOwotCi0gICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3JlY2VpdmluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKLSAgICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiByZWN2IGZ1bmN0aW9uIHdpbGwgZGVhbAotICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCi0gICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47Ci0KLSAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfRE9ORToKLSAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpCi0gICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfU0VORF9FT0YpOwotICAgICAgZWxzZQotICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NDUF9TRU5EX0VPRjoKLSAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX3NlbmRfZW9mKHNzaGMtPnNzaF9jaGFubmVsKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYykgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgbGlic3NoMiBjaGFubmVsIEVPRjogJWQgJXNcbiIsCi0gICAgICAgICAgICAgICAgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1dBSVRfRU9GKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX1dBSVRfRU9GOgotICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKLSAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfd2FpdF9lb2Yoc3NoYy0+c3NoX2NoYW5uZWwpOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjKSB7Ci0gICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOwotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZ2V0IGNoYW5uZWwgRU9GOiAlZCAlc1xuIiwgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1dBSVRfQ0xPU0UpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTSF9TQ1BfV0FJVF9DTE9TRToKLSAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX3dhaXRfY2xvc2VkKHNzaGMtPnNzaF9jaGFubmVsKTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYykgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiQ2hhbm5lbCBmYWlsZWQgdG8gY2xvc2U6ICVkICVzXG4iLCByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0NQX0NIQU5ORUxfRlJFRToKLSAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX2ZyZWUoc3NoYy0+c3NoX2NoYW5uZWwpOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGZyZWUgbGlic3NoMiBzY3Agc3Vic3lzdGVtOiAlZCAlc1xuIiwKLSAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBOVUxMOwotICAgICAgfQotICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTQ1AgRE9ORSBwaGFzZSBjb21wbGV0ZVxuIikpOwotI2lmIDAgLyogUFJFViAqLwotICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7Ci0jZW5kaWYKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgU1NIX1NFU1NJT05fRElTQ09OTkVDVDoKLSAgICAgIC8qIGR1cmluZyB3ZWlyZCB0aW1lcyB3aGVuIHdlJ3ZlIGJlZW4gcHJlbWF0dXJlbHkgYWJvcnRlZCwgdGhlIGNoYW5uZWwKLSAgICAgICAgIGlzIHN0aWxsIGFsaXZlIHdoZW4gd2UgcmVhY2ggdGhpcyBzdGF0ZSBhbmQgd2UgTVVTVCBraWxsIHRoZSBjaGFubmVsCi0gICAgICAgICBwcm9wZXJseSBmaXJzdCAqLwotICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKLSAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfZnJlZShzc2hjLT5zc2hfY2hhbm5lbCk7Ci0gICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYocmMgPCAwKSB7Ci0gICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7Ci0gICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOwotICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZnJlZSBsaWJzc2gyIHNjcCBzdWJzeXN0ZW06ICVkICVzXG4iLAotICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKLSAgICAgICAgfQotICAgICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIGlmKHNzaGMtPnNzaF9zZXNzaW9uKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZXNzaW9uX2Rpc2Nvbm5lY3Qoc3NoYy0+c3NoX3Nlc3Npb24sICJTaHV0ZG93biIpOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGRpc2Nvbm5lY3QgbGlic3NoMiBzZXNzaW9uOiAlZCAlc1xuIiwKLSAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5ob21lZGlyKTsKLSAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBOVUxMOwotCi0gICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfU0VTU0lPTl9GUkVFOgotI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCi0gICAgICBpZihzc2hjLT5raCkgewotICAgICAgICBsaWJzc2gyX2tub3duaG9zdF9mcmVlKHNzaGMtPmtoKTsKLSAgICAgICAgc3NoYy0+a2ggPSBOVUxMOwotICAgICAgfQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCi0gICAgICBpZihzc2hjLT5zc2hfYWdlbnQpIHsKLSAgICAgICAgcmMgPSBsaWJzc2gyX2FnZW50X2Rpc2Nvbm5lY3Qoc3NoYy0+c3NoX2FnZW50KTsKLSAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihyYyA8IDApIHsKLSAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKLSAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBkaXNjb25uZWN0IGZyb20gbGlic3NoMiBhZ2VudDogJWQgJXNcbiIsCi0gICAgICAgICAgICAgICAgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICAgIGxpYnNzaDJfYWdlbnRfZnJlZShzc2hjLT5zc2hfYWdlbnQpOwotICAgICAgICBzc2hjLT5zc2hfYWdlbnQgPSBOVUxMOwotCi0gICAgICAgIC8qIE5COiB0aGVyZSBpcyBubyBuZWVkIHRvIGZyZWUgaWRlbnRpdGllcywgdGhleSBhcmUgcGFydCBvZiBpbnRlcm5hbAotICAgICAgICAgICBhZ2VudCBzdHVmZiAqLwotICAgICAgICBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eSA9IE5VTEw7Ci0gICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkgPSBOVUxMOwotICAgICAgfQotI2VuZGlmCi0KLSAgICAgIGlmKHNzaGMtPnNzaF9zZXNzaW9uKSB7Ci0gICAgICAgIHJjID0gbGlic3NoMl9zZXNzaW9uX2ZyZWUoc3NoYy0+c3NoX3Nlc3Npb24pOwotICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmKHJjIDwgMCkgewotICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOwotICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKLSAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGZyZWUgbGlic3NoMiBzZXNzaW9uOiAlZCAlc1xuIiwgcmMsIGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICAgIHNzaGMtPnNzaF9zZXNzaW9uID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgLyogd29yc3QtY2FzZSBzY2VuYXJpbyBjbGVhbnVwICovCi0KLSAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9zZXNzaW9uID09IE5VTEwpOwotICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c3NoX2NoYW5uZWwgPT0gTlVMTCk7Ci0gICAgICBERUJVR0FTU0VSVChzc2hjLT5zZnRwX3Nlc3Npb24gPT0gTlVMTCk7Ci0gICAgICBERUJVR0FTU0VSVChzc2hjLT5zZnRwX2hhbmRsZSA9PSBOVUxMKTsKLSNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQotICAgICAgREVCVUdBU1NFUlQoc3NoYy0+a2ggPT0gTlVMTCk7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCi0gICAgICBERUJVR0FTU0VSVChzc2hjLT5zc2hfYWdlbnQgPT0gTlVMTCk7Ci0jZW5kaWYKLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7Ci0gICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5ob21lZGlyKTsKLQotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKLSAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmUpOwotICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKTsKLQotICAgICAgLyogdGhlIGNvZGUgd2UgYXJlIGFib3V0IHRvIHJldHVybiAqLwotICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKLQotICAgICAgbWVtc2V0KHNzaGMsIDAsIHNpemVvZihzdHJ1Y3Qgc3NoX2Nvbm4pKTsKLQotICAgICAgY29ubmNsb3NlKGNvbm4sICJTU0ggc2Vzc2lvbiBmcmVlIik7Ci0gICAgICBzc2hjLT5zdGF0ZSA9IFNTSF9TRVNTSU9OX0ZSRUU7IC8qIGN1cnJlbnQgKi8KLSAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKLSAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTU0hfUVVJVDoKLSAgICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCi0gICAgZGVmYXVsdDoKLSAgICAgIC8qIGludGVybmFsIGVycm9yICovCi0gICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7Ci0gICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgfSB3aGlsZSghcmMgJiYgKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSk7Ci0KLSAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAvKiB3ZSB3b3VsZCBibG9jaywgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlIHJlYWR5IChpbiB0aGUKLSAgICAgICByaWdodCBkaXJlY3Rpb24gdG9vKSEgKi8KLSAgICAqYmxvY2sgPSBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKSB0byB3YWl0IGZvciBhbmQKLSAgIGZvciB3aGF0IGFjdGlvbnMgaW4gdGhlIERPX0RPTkUsIFBFUkZPUk0gYW5kIFdBSVRQRVJGT1JNIHN0YXRlcyAqLwotc3RhdGljIGludCBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrLCAvKiBwb2ludHMgdG8gbnVtc29ja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc29ja2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKLXsKLSNpZmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9CTE9DS19ESVJFQ1RJT04KLSAgaW50IGJpdG1hcCA9IEdFVFNPQ0tfQkxBTks7Ci0gICh2b2lkKW51bXNvY2tzOwotCi0gIHNvY2tbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLQotICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9SRUNWKQotICAgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKLQotICBpZihjb25uLT53YWl0Zm9yICYgS0VFUF9TRU5EKQotICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7Ci0KLSAgcmV0dXJuIGJpdG1hcDsKLSNlbHNlCi0gIC8qIGlmIHdlIGRvbid0IGtub3cgdGhlIGRpcmVjdGlvbiB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljICpfZ2V0c29jaygpCi0gICAgIGZ1bmN0aW9uIGV2ZW4gZm9yIHRoZSBwcm90b2NvbF9jb25uZWN0IGFuZCBkb2luZyBzdGF0ZXMgKi8KLSAgcmV0dXJuIEN1cmxfc2luZ2xlX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOwotI2VuZGlmCi19Ci0KLS8qIEdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKQotICAgdG8gd2FpdCBmb3IgYW5kIGZvciB3aGF0IGFjdGlvbnMgZHVyaW5nIHRoZSBET0lORyBhbmQgUFJPVE9DT05ORUNUIHN0YXRlcyovCi1zdGF0aWMgaW50IHNzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb2NrZXRzICovCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKLXsKLSNpZm5kZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCi0gICh2b2lkKWNvbm47Ci0gICh2b2lkKXNvY2s7Ci0gICh2b2lkKW51bXNvY2tzOwotICAvKiBpZiB3ZSBkb24ndCBrbm93IGFueSBkaXJlY3Rpb24gd2UgY2FuIGp1c3QgcGxheSBhbG9uZyBhcyB3ZSB1c2VkIHRvIGFuZAotICAgICBub3QgcHJvdmlkZSBhbnkgc2Vuc2libGUgaW5mbyAqLwotICByZXR1cm4gR0VUU09DS19CTEFOSzsKLSNlbHNlCi0gIC8qIGlmIHdlIGtub3cgdGhlIGRpcmVjdGlvbiB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljICpfZ2V0c29jaygpIGZ1bmN0aW9uIGV2ZW4KLSAgICAgZm9yIHRoZSBwcm90b2NvbF9jb25uZWN0IGFuZCBkb2luZyBzdGF0ZXMgKi8KLSAgcmV0dXJuIHNzaF9wZXJmb3JtX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9CTE9DS19ESVJFQ1RJT04KLS8qCi0gKiBXaGVuIG9uZSBvZiB0aGUgbGlic3NoMiBmdW5jdGlvbnMgaGFzIHJldHVybmVkIExJQlNTSDJfRVJST1JfRUFHQUlOIHRoaXMKLSAqIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZmlndXJlIG91dCBpbiB3aGF0IGRpcmVjdGlvbiBhbmQgc3RvcmVzIHRoaXMgaW5mbyBzbwotICogdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBpdC4gTWFrZSBzdXJlIHRvIGNhbGwgdGhpcwotICogZnVuY3Rpb24gaW4gYWxsIGNhc2VzIHNvIHRoYXQgd2hlbiBpdCBfZG9lc24ndF8gcmV0dXJuIEVBR0FJTiB3ZSBjYW4KLSAqIHJlc3RvcmUgdGhlIGRlZmF1bHQgd2FpdCBiaXRzLgotICovCi1zdGF0aWMgdm9pZCBzc2hfYmxvY2syd2FpdGZvcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgYmxvY2spCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBpbnQgZGlyID0gMDsKLSAgaWYoYmxvY2spIHsKLSAgICBkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbik7Ci0gICAgaWYoZGlyKSB7Ci0gICAgICAvKiB0cmFuc2xhdGUgdGhlIGxpYnNzaDIgZGVmaW5lIGJpdHMgaW50byBvdXIgb3duIGJpdCBkZWZpbmVzICovCi0gICAgICBjb25uLT53YWl0Zm9yID0gKChkaXImTElCU1NIMl9TRVNTSU9OX0JMT0NLX0lOQk9VTkQpP0tFRVBfUkVDVjowKSB8Ci0gICAgICAgICgoZGlyJkxJQlNTSDJfU0VTU0lPTl9CTE9DS19PVVRCT1VORCk/S0VFUF9TRU5EOjApOwotICAgIH0KLSAgfQotICBpZighZGlyKQotICAgIC8qIEl0IGRpZG4ndCBibG9jayBvciBsaWJzc2gyIGRpZG4ndCByZXZlYWwgaW4gd2hpY2ggZGlyZWN0aW9uLCBwdXQgYmFjawotICAgICAgIHRoZSBvcmlnaW5hbCBzZXQgKi8KLSAgICBjb25uLT53YWl0Zm9yID0gc3NoYy0+b3JpZ193YWl0Zm9yOwotfQotI2Vsc2UKLSAgLyogbm8gbGlic3NoMiBkaXJlY3Rpb25hbCBzdXBwb3J0IHNvIHdlIHNpbXBseSBkb24ndCBrbm93ICovCi0jZGVmaW5lIHNzaF9ibG9jazJ3YWl0Zm9yKHgseSkgQ3VybF9ub3Bfc3RtdAotI2VuZGlmCi0KLS8qIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGRvbmUgZnJvbSBtdWx0aS5jICovCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgYm9vbCBibG9jazsgLyogd2Ugc3RvcmUgdGhlIHN0YXR1cyBhbmQgdXNlIHRoYXQgdG8gcHJvdmlkZSBhIHNzaF9nZXRzb2NrKCkKLSAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKi8KLSAgZG8gewotICAgIHJlc3VsdCA9IHNzaF9zdGF0ZW1hY2hfYWN0KGNvbm4sICZibG9jayk7Ci0gICAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOwotICAgIC8qIGlmIHRoZXJlJ3Mgbm8gZXJyb3IsIGl0IGlzbid0IGRvbmUgYW5kIGl0IGRpZG4ndCBFV09VTERCTE9DSywgdGhlbgotICAgICAgIHRyeSBhZ2FpbiAqLwotICB9IHdoaWxlKCFyZXN1bHQgJiYgISpkb25lICYmICFibG9jayk7Ci0gIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIGJsb2NrKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2Jsb2NrX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRpc2Nvbm5lY3QpCi17Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOwotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgd2hpbGUoKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSAmJiAhcmVzdWx0KSB7Ci0gICAgYm9vbCBibG9jazsKLSAgICB0aW1lZGlmZl90IGxlZnQgPSAxMDAwOwotICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotCi0gICAgcmVzdWx0ID0gc3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICBicmVhazsKLQotICAgIGlmKCFkaXNjb25uZWN0KSB7Ci0gICAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCi0gICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwotCi0gICAgICByZXN1bHQgPSBDdXJsX3NwZWVkY2hlY2soZGF0YSwgbm93KTsKLSAgICAgIGlmKHJlc3VsdCkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGxlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIEZBTFNFKTsKLSAgICAgIGlmKGxlZnQgPCAwKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJPcGVyYXRpb24gdGltZWQgb3V0Iik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgICB9Ci0gICAgfQotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCi0gICAgaWYoIXJlc3VsdCAmJiBibG9jaykgewotICAgICAgaW50IGRpciA9IGxpYnNzaDJfc2Vzc2lvbl9ibG9ja19kaXJlY3Rpb25zKHNzaGMtPnNzaF9zZXNzaW9uKTsKLSAgICAgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwotICAgICAgY3VybF9zb2NrZXRfdCBmZF9yZWFkID0gQ1VSTF9TT0NLRVRfQkFEOwotICAgICAgY3VybF9zb2NrZXRfdCBmZF93cml0ZSA9IENVUkxfU09DS0VUX0JBRDsKLSAgICAgIGlmKExJQlNTSDJfU0VTU0lPTl9CTE9DS19JTkJPVU5EICYgZGlyKQotICAgICAgICBmZF9yZWFkID0gc29jazsKLSAgICAgIGlmKExJQlNTSDJfU0VTU0lPTl9CTE9DS19PVVRCT1VORCAmIGRpcikKLSAgICAgICAgZmRfd3JpdGUgPSBzb2NrOwotICAgICAgLyogd2FpdCBmb3IgdGhlIHNvY2tldCB0byBiZWNvbWUgcmVhZHkgKi8KLSAgICAgICh2b2lkKUN1cmxfc29ja2V0X2NoZWNrKGZkX3JlYWQsIENVUkxfU09DS0VUX0JBRCwgZmRfd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0PjEwMDA/MTAwMDpsZWZ0KTsgLyogaWdub3JlIHJlc3VsdCAqLwotICAgIH0KLSNlbmRpZgotCi0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogU1NIIHNldHVwIGFuZCBjb25uZWN0aW9uCi0gKi8KLXN0YXRpYyBDVVJMY29kZSBzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCi17Ci0gIHN0cnVjdCBTU0hQUk9UTyAqc3NoOwotCi0gIGNvbm4tPmRhdGEtPnJlcS5wcm90b3AgPSBzc2ggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBTU0hQUk9UTykpOwotICBpZighc3NoKQotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIEN1cmxfcmVjdiBzY3BfcmVjdiwgc2Z0cF9yZWN2Owotc3RhdGljIEN1cmxfc2VuZCBzY3Bfc2VuZCwgc2Z0cF9zZW5kOwotCi0vKgotICogQ3VybF9zc2hfY29ubmVjdCgpIGdldHMgY2FsbGVkIGZyb20gQ3VybF9wcm90b2NvbF9jb25uZWN0KCkgdG8gYWxsb3cgdXMgdG8KLSAqIGRvIHByb3RvY29sLXNwZWNpZmljIGFjdGlvbnMgYXQgY29ubmVjdC10aW1lLgotICovCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQotewotI2lmZGVmIENVUkxfTElCU1NIMl9ERUJVRwotICBjdXJsX3NvY2tldF90IHNvY2s7Ci0jZW5kaWYKLSAgc3RydWN0IHNzaF9jb25uICpzc2g7Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgLyogaW5pdGlhbGl6ZSBwZXItaGFuZGxlIGRhdGEgaWYgbm90IGFscmVhZHkgKi8KLSAgaWYoIWRhdGEtPnJlcS5wcm90b3ApCi0gICAgc3NoX3NldHVwX2Nvbm5lY3Rpb24oY29ubik7Ci0KLSAgLyogV2UgZGVmYXVsdCB0byBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLiBXZSBzZXQgdGhpcyBhbHJlYWR5IGluIHRoaXMgY29ubmVjdAotICAgICBmdW5jdGlvbiB0byBtYWtlIHRoZSByZS11c2UgY2hlY2tzIHByb3Blcmx5IGJlIGFibGUgdG8gY2hlY2sgdGhpcyBiaXQuICovCi0gIGNvbm5rZWVwKGNvbm4sICJTU0ggZGVmYXVsdCIpOwotCi0gIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkgewotICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2NwX3JlY3Y7Ci0gICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzY3Bfc2VuZDsKLSAgfQotICBlbHNlIHsKLSAgICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHNmdHBfcmVjdjsKLSAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNmdHBfc2VuZDsKLSAgfQotICBzc2ggPSAmY29ubi0+cHJvdG8uc3NoYzsKLQotI2lmZGVmIENVUkxfTElCU1NIMl9ERUJVRwotICBpZihjb25uLT51c2VyKSB7Ci0gICAgaW5mb2YoZGF0YSwgIlVzZXI6ICVzXG4iLCBjb25uLT51c2VyKTsKLSAgfQotICBpZihjb25uLT5wYXNzd2QpIHsKLSAgICBpbmZvZihkYXRhLCAiUGFzc3dvcmQ6ICVzXG4iLCBjb25uLT5wYXNzd2QpOwotICB9Ci0gIHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSNlbmRpZiAvKiBDVVJMX0xJQlNTSDJfREVCVUcgKi8KLQotICBzc2gtPnNzaF9zZXNzaW9uID0gbGlic3NoMl9zZXNzaW9uX2luaXRfZXgobXlfbGlic3NoMl9tYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV9saWJzc2gyX2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV9saWJzc2gyX3JlYWxsb2MsIGNvbm4pOwotICBpZihzc2gtPnNzaF9zZXNzaW9uID09IE5VTEwpIHsKLSAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBpbml0aWFsaXNpbmcgc3NoIHNlc3Npb24iKTsKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gIH0KLQotICBpZihkYXRhLT5zZXQuc3NoX2NvbXByZXNzaW9uKSB7Ci0jaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDIwOAotICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9mbGFnKHNzaC0+c3NoX3Nlc3Npb24sIExJQlNTSDJfRkxBR19DT01QUkVTUywgMSkgPCAwKQotI2VuZGlmCi0gICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGVuYWJsZSBjb21wcmVzc2lvbiBmb3Igc3NoIHNlc3Npb25cbiIpOwotICB9Ci0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pIHsKLSAgICBpbnQgcmM7Ci0gICAgc3NoLT5raCA9IGxpYnNzaDJfa25vd25ob3N0X2luaXQoc3NoLT5zc2hfc2Vzc2lvbik7Ci0gICAgaWYoIXNzaC0+a2gpIHsKLSAgICAgIGxpYnNzaDJfc2Vzc2lvbl9mcmVlKHNzaC0+c3NoX3Nlc3Npb24pOwotICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwotICAgIH0KLQotICAgIC8qIHJlYWQgYWxsIGtub3duIGhvc3RzIGZyb20gdGhlcmUgKi8KLSAgICByYyA9IGxpYnNzaDJfa25vd25ob3N0X3JlYWRmaWxlKHNzaC0+a2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9GSUxFX09QRU5TU0gpOwotICAgIGlmKHJjIDwgMCkKLSAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBrbm93biBob3N0cyBmcm9tICVzXG4iLAotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKLSAgfQotI2VuZGlmIC8qIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJICovCi0KLSNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKLSAgbGlic3NoMl90cmFjZShzc2gtPnNzaF9zZXNzaW9uLCB+MCk7Ci0gIGluZm9mKGRhdGEsICJTU0ggc29ja2V0OiAlZFxuIiwgKGludClzb2NrKTsKLSNlbmRpZiAvKiBDVVJMX0xJQlNTSDJfREVCVUcgKi8KLQotICBzdGF0ZShjb25uLCBTU0hfSU5JVCk7Ci0KLSAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb25lKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogc2NwX3BlcmZvcm0oKQotICoKLSAqIFRoaXMgaXMgdGhlIGFjdHVhbCBETyBmdW5jdGlvbiBmb3IgU0NQLiBHZXQgYSBmaWxlIGFjY29yZGluZyB0bwotICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KLSAqLwotCi1zdGF0aWMKLUNVUkxjb2RlIHNjcF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQotICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIHN0YXJ0c1xuIikpOwotCi0gICpkb3BoYXNlX2RvbmUgPSBGQUxTRTsgLyogbm90IGRvbmUgeWV0ICovCi0KLSAgLyogc3RhcnQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIERPIHBoYXNlICovCi0gIHN0YXRlKGNvbm4sIFNTSF9TQ1BfVFJBTlNfSU5JVCk7Ci0KLSAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCi0gIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLwotc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQotewotICBDVVJMY29kZSByZXN1bHQ7Ci0gIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBUaGUgRE8gZnVuY3Rpb24gaXMgZ2VuZXJpYyBmb3IgYm90aCBwcm90b2NvbHMuIFRoZXJlIHdhcyBwcmV2aW91c2x5IHR3bwotICogc2VwYXJhdGUgb25lcyBidXQgdGhpcyB3YXkgbWVhbnMgbGVzcyBkdXBsaWNhdGVkIGNvZGUuCi0gKi8KLQotc3RhdGljIENVUkxjb2RlIHNzaF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgYm9vbCBjb25uZWN0ZWQgPSAwOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgKmRvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBmYWxzZSAqLwotCi0gIGRhdGEtPnJlcS5zaXplID0gLTE7IC8qIG1ha2Ugc3VyZSB0aGlzIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCAqLwotCi0gIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PSzsgLyogcmVzZXQgZXJyb3IgY29kZSAqLwotICBzc2hjLT5zZWNvbmRDcmVhdGVEaXJzID0gMDsgICAvKiByZXNldCB0aGUgY3JlYXRlIGRpciBhdHRlbXB0IHN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICovCi0KLSAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCAwKTsKLSAgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKGRhdGEsIDApOwotICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIC0xKTsKLSAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIC0xKTsKLQotICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19TQ1ApCi0gICAgcmVzdWx0ID0gc2NwX3BlcmZvcm0oY29ubiwgJmNvbm5lY3RlZCwgIGRvbmUpOwotICBlbHNlCi0gICAgcmVzdWx0ID0gc2Z0cF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsICBkb25lKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBCTE9DS0lORywgYnV0IHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGUgc3RhdGUgbWFjaGluZSBzbyB0aGUgb25seSByZWFzb24KLSAgIHRoaXMgaXMgc3RpbGwgYmxvY2tpbmcgaXMgdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGNvZGUgaGFzIG5vIHN1cHBvcnQgZm9yCi0gICBkaXNjb25uZWN0aW5nIG9wZXJhdGlvbnMgdGhhdCB0YWtlcyBhIHdoaWxlICovCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBzc2hfY29ubiAqc3NoID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0gICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247Ci0KLSAgaWYoc3NoLT5zc2hfc2Vzc2lvbikgewotICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KLQotICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOwotCi0gICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBUUlVFKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGdlbmVyaWMgZG9uZSBmdW5jdGlvbiBmb3IgYm90aCBTQ1AgYW5kIFNGVFAgY2FsbGVkIGZyb20gdGhlaXIgc3BlY2lmaWMKLSAgIGRvbmUgZnVuY3Rpb25zICovCi1zdGF0aWMgQ1VSTGNvZGUgc3NoX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICBzdHJ1Y3QgU1NIUFJPVE8gKnNmdHBfc2NwID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKLQotICBpZighc3RhdHVzKSB7Ci0gICAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCi0gICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7Ci0gIH0KLSAgZWxzZQotICAgIHJlc3VsdCA9IHN0YXR1czsKLQotICBpZihzZnRwX3NjcCkKLSAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKLSAgaWYoQ3VybF9wZ3JzRG9uZShjb25uKSkKLSAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKLQotICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgLyogY2xlYXIgYWxsIGJpdHMgKi8KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCi17Ci0gICh2b2lkKXByZW1hdHVyZTsgLyogbm90IHVzZWQgKi8KLQotICBpZighc3RhdHVzKQotICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9ORSk7Ci0KLSAgcmV0dXJuIHNzaF9kb25lKGNvbm4sIHN0YXR1cyk7Ci0KLX0KLQotc3RhdGljIHNzaXplX3Qgc2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBzc2l6ZV90IG53cml0ZTsKLSAgKHZvaWQpc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLwotCi0gIC8qIGxpYnNzaDJfY2hhbm5lbF93cml0ZSgpIHJldHVybnMgaW50ISAqLwotICBud3JpdGUgPSAoc3NpemVfdCkKLSAgICBsaWJzc2gyX2NoYW5uZWxfd3JpdGUoY29ubi0+cHJvdG8uc3NoYy5zc2hfY2hhbm5lbCwgbWVtLCBsZW4pOwotCi0gIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pP1RSVUU6RkFMU0UpOwotCi0gIGlmKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICplcnIgPSBDVVJMRV9BR0FJTjsKLSAgICBud3JpdGUgPSAwOwotICB9Ci0gIGVsc2UgaWYobndyaXRlIDwgTElCU1NIMl9FUlJPUl9OT05FKSB7Ci0gICAgKmVyciA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRSgoaW50KW53cml0ZSk7Ci0gICAgbndyaXRlID0gLTE7Ci0gIH0KLQotICByZXR1cm4gbndyaXRlOwotfQotCi1zdGF0aWMgc3NpemVfdCBzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCi17Ci0gIHNzaXplX3QgbnJlYWQ7Ci0gICh2b2lkKXNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KLQotICAvKiBsaWJzc2gyX2NoYW5uZWxfcmVhZCgpIHJldHVybnMgaW50ICovCi0gIG5yZWFkID0gKHNzaXplX3QpCi0gICAgbGlic3NoMl9jaGFubmVsX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zc2hfY2hhbm5lbCwgbWVtLCBsZW4pOwotCi0gIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7Ci0gIGlmKG5yZWFkID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7Ci0gICAgKmVyciA9IENVUkxFX0FHQUlOOwotICAgIG5yZWFkID0gLTE7Ci0gIH0KLQotICByZXR1cm4gbnJlYWQ7Ci19Ci0KLS8qCi0gKiA9PT09PT09PT09PT09PT0gU0ZUUCA9PT09PT09PT09PT09PT0KLSAqLwotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogc2Z0cF9wZXJmb3JtKCkKLSAqCi0gKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNGVFAuIEdldCBhIGZpbGUvZGlyZWN0b3J5IGFjY29yZGluZyB0bwotICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KLSAqLwotCi1zdGF0aWMKLUNVUkxjb2RlIHNmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKLQotICAqZG9waGFzZV9kb25lID0gRkFMU0U7IC8qIG5vdCBkb25lIHlldCAqLwotCi0gIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLwotICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9JTklUKTsKLQotICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KLSAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOwotCi0gICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOwotCi0gIGlmKCpkb3BoYXNlX2RvbmUpIHsKLSAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCi1zdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKLQotICBpZigqZG9waGFzZV9kb25lKSB7Ci0gICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgotICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKLSAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KLXN0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247Ci0KLSAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBzdGFydHMgbm93XG4iKSk7Ci0KLSAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgewotICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KLSAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7Ci0gICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBUUlVFKTsKLSAgfQotCi0gIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiU1NIIERJU0NPTk5FQ1QgaXMgZG9uZVxuIikpOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLX0KLQotc3RhdGljIENVUkxjb2RlIHNmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKLXsKLSAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7Ci0KLSAgaWYoIXN0YXR1cykgewotICAgIC8qIFBvc3QgcXVvdGUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBTRlRQX0NMT1NFIHN0YXRlIHRvIGF2b2lkCi0gICAgICAgZXJyb3JzIHRoYXQgY291bGQgaGFwcGVuIGR1ZSB0byBvcGVuIGZpbGUgaGFuZGxlcyBkdXJpbmcgUE9TVFFVT1RFCi0gICAgICAgb3BlcmF0aW9uICovCi0gICAgaWYoIXByZW1hdHVyZSAmJiBjb25uLT5kYXRhLT5zZXQucG9zdHF1b3RlICYmICFjb25uLT5iaXRzLnJldHJ5KQotICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQ7Ci0gICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOwotICB9Ci0gIHJldHVybiBzc2hfZG9uZShjb25uLCBzdGF0dXMpOwotfQotCi0vKiByZXR1cm4gbnVtYmVyIG9mIHNlbnQgYnl0ZXMgKi8KLXN0YXRpYyBzc2l6ZV90IHNmdHBfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBzc2l6ZV90IG53cml0ZTsgICAvKiBsaWJzc2gyX3NmdHBfd3JpdGUoKSB1c2VkIHRvIHJldHVybiBzaXplX3QgaW4gMC4xNAotICAgICAgICAgICAgICAgICAgICAgICBidXQgaXMgY2hhbmdlZCB0byBzc2l6ZV90IGluIDAuMTUuIFRoZXNlIGRheXMgd2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBsaWJzc2gyIDAuMTUqLwotICAodm9pZClzb2NraW5kZXg7Ci0KLSAgbndyaXRlID0gbGlic3NoMl9zZnRwX3dyaXRlKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9oYW5kbGUsIG1lbSwgbGVuKTsKLQotICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKT9UUlVFOkZBTFNFKTsKLQotICBpZihud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKLSAgICAqZXJyID0gQ1VSTEVfQUdBSU47Ci0gICAgbndyaXRlID0gMDsKLSAgfQotICBlbHNlIGlmKG53cml0ZSA8IExJQlNTSDJfRVJST1JfTk9ORSkgewotICAgICplcnIgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoKGludClud3JpdGUpOwotICAgIG53cml0ZSA9IC0xOwotICB9Ci0KLSAgcmV0dXJuIG53cml0ZTsKLX0KLQotLyoKLSAqIFJldHVybiBudW1iZXIgb2YgcmVjZWl2ZWQgKGRlY3J5cHRlZCkgYnl0ZXMKLSAqIG9yIDwwIG9uIGVycm9yCi0gKi8KLXN0YXRpYyBzc2l6ZV90IHNmdHBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQotewotICBzc2l6ZV90IG5yZWFkOwotICAodm9pZClzb2NraW5kZXg7Ci0KLSAgbnJlYWQgPSBsaWJzc2gyX3NmdHBfcmVhZChjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBtZW0sIGxlbik7Ci0KLSAgc3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG5yZWFkID09IExJQlNTSDJfRVJST1JfRUFHQUlOKT9UUlVFOkZBTFNFKTsKLQotICBpZihucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgewotICAgICplcnIgPSBDVVJMRV9BR0FJTjsKLSAgICBucmVhZCA9IC0xOwotCi0gIH0KLSAgZWxzZSBpZihucmVhZCA8IDApIHsKLSAgICAqZXJyID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKChpbnQpbnJlYWQpOwotICB9Ci0gIHJldHVybiBucmVhZDsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnNmdHBfbGlic3NoMl9zdHJlcnJvcihpbnQgZXJyKQotewotICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NVQ0hfRklMRToKLSAgICAgIHJldHVybiAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfUEVSTUlTU0lPTl9ERU5JRUQ6Ci0gICAgICByZXR1cm4gIlBlcm1pc3Npb24gZGVuaWVkIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9GQUlMVVJFOgotICAgICAgcmV0dXJuICJPcGVyYXRpb24gZmFpbGVkIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9CQURfTUVTU0FHRToKLSAgICAgIHJldHVybiAiQmFkIG1lc3NhZ2UgZnJvbSBTRlRQIHNlcnZlciI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTk9fQ09OTkVDVElPTjoKLSAgICAgIHJldHVybiAiTm90IGNvbm5lY3RlZCB0byBTRlRQIHNlcnZlciI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfQ09OTkVDVElPTl9MT1NUOgotICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHRvIFNGVFAgc2VydmVyIGxvc3QiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX09QX1VOU1VQUE9SVEVEOgotICAgICAgcmV0dXJuICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBTRlRQIHNlcnZlciI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfSU5WQUxJRF9IQU5ETEU6Ci0gICAgICByZXR1cm4gIkludmFsaWQgaGFuZGxlIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX1BBVEg6Ci0gICAgICByZXR1cm4gIk5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFM6Ci0gICAgICByZXR1cm4gIkZpbGUgYWxyZWFkeSBleGlzdHMiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX1dSSVRFX1BST1RFQ1Q6Ci0gICAgICByZXR1cm4gIkZpbGUgaXMgd3JpdGUgcHJvdGVjdGVkIjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9OT19NRURJQToKLSAgICAgIHJldHVybiAiTm8gbWVkaWEiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NQQUNFX09OX0ZJTEVTWVNURU06Ci0gICAgICByZXR1cm4gIkRpc2sgZnVsbCI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfUVVPVEFfRVhDRUVERUQ6Ci0gICAgICByZXR1cm4gIlVzZXIgcXVvdGEgZXhjZWVkZWQiOwotCi0gICAgY2FzZSBMSUJTU0gyX0ZYX1VOS05PV05fUFJJTkNJUExFOgotICAgICAgcmV0dXJuICJVbmtub3duIHByaW5jaXBsZSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTE9DS19DT05GbElDVDoKLSAgICAgIHJldHVybiAiRmlsZSBsb2NrIGNvbmZsaWN0IjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9ESVJfTk9UX0VNUFRZOgotICAgICAgcmV0dXJuICJEaXJlY3Rvcnkgbm90IGVtcHR5IjsKLQotICAgIGNhc2UgTElCU1NIMl9GWF9OT1RfQV9ESVJFQ1RPUlk6Ci0gICAgICByZXR1cm4gIk5vdCBhIGRpcmVjdG9yeSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfSU5WQUxJRF9GSUxFTkFNRToKLSAgICAgIHJldHVybiAiSW52YWxpZCBmaWxlbmFtZSI7Ci0KLSAgICBjYXNlIExJQlNTSDJfRlhfTElOS19MT09QOgotICAgICAgcmV0dXJuICJMaW5rIHBvaW50cyB0byBpdHNlbGYiOwotICB9Ci0gIHJldHVybiAiVW5rbm93biBlcnJvciBpbiBsaWJzc2gyIjsKLX0KLQotI2VuZGlmIC8qIFVTRV9MSUJTU0gyICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zc2guaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjIwYWFjLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3NzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLSNpZm5kZWYgSEVBREVSX0NVUkxfU1NIX0gKLSNkZWZpbmUgSEVBREVSX0NVUkxfU1NIX0gKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotI2lmIGRlZmluZWQoSEFWRV9MSUJTU0gyX0gpCi0jaW5jbHVkZSA8bGlic3NoMi5oPgotI2luY2x1ZGUgPGxpYnNzaDJfc2Z0cC5oPgotI2VsaWYgZGVmaW5lZChIQVZFX0xJQlNTSF9MSUJTU0hfSCkKLSNpbmNsdWRlIDxsaWJzc2gvbGlic3NoLmg+Ci0jaW5jbHVkZSA8bGlic3NoL3NmdHAuaD4KLSNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfSCAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU1NIIHVuaXF1ZSBzZXR1cAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgZW51bSB7Ci0gIFNTSF9OT19TVEFURSA9IC0xLCAgLyogVXNlZCBmb3IgIm5leHRTdGF0ZSIgc28gc2F5IHRoZXJlIGlzIG5vbmUgKi8KLSAgU1NIX1NUT1AgPSAwLCAgICAgICAvKiBkbyBub3RoaW5nIHN0YXRlLCBzdG9wcyB0aGUgc3RhdGUgbWFjaGluZSAqLwotCi0gIFNTSF9JTklULCAgICAgICAgICAgLyogRmlyc3Qgc3RhdGUgaW4gU1NILUNPTk5FQ1QgKi8KLSAgU1NIX1NfU1RBUlRVUCwgICAgICAvKiBTZXNzaW9uIHN0YXJ0dXAgKi8KLSAgU1NIX0hPU1RLRVksICAgICAgICAvKiB2ZXJpZnkgaG9zdGtleSAqLwotICBTU0hfQVVUSExJU1QsCi0gIFNTSF9BVVRIX1BLRVlfSU5JVCwKLSAgU1NIX0FVVEhfUEtFWSwKLSAgU1NIX0FVVEhfUEFTU19JTklULAotICBTU0hfQVVUSF9QQVNTLAotICBTU0hfQVVUSF9BR0VOVF9JTklULCAvKiBpbml0aWFsaXplIHRoZW4gd2FpdCBmb3IgY29ubmVjdGlvbiB0byBhZ2VudCAqLwotICBTU0hfQVVUSF9BR0VOVF9MSVNULCAvKiBhc2sgZm9yIGxpc3QgdGhlbiB3YWl0IGZvciBlbnRpcmUgbGlzdCB0byBjb21lICovCi0gIFNTSF9BVVRIX0FHRU5ULCAgICAgIC8qIGF0dGVtcHQgb25lIGtleSBhdCBhIHRpbWUgKi8KLSAgU1NIX0FVVEhfSE9TVF9JTklULAotICBTU0hfQVVUSF9IT1NULAotICBTU0hfQVVUSF9LRVlfSU5JVCwKLSAgU1NIX0FVVEhfS0VZLAotICBTU0hfQVVUSF9HU1NBUEksCi0gIFNTSF9BVVRIX0RPTkUsCi0gIFNTSF9TRlRQX0lOSVQsCi0gIFNTSF9TRlRQX1JFQUxQQVRILCAgIC8qIExhc3Qgc3RhdGUgaW4gU1NILUNPTk5FQ1QgKi8KLQotICBTU0hfU0ZUUF9RVU9URV9JTklULCAvKiBGaXJzdCBzdGF0ZSBpbiBTRlRQLURPICovCi0gIFNTSF9TRlRQX1BPU1RRVU9URV9JTklULCAvKiAoUG9zc2libHkpIEZpcnN0IHN0YXRlIGluIFNGVFAtRE9ORSAqLwotICBTU0hfU0ZUUF9RVU9URSwKLSAgU1NIX1NGVFBfTkVYVF9RVU9URSwKLSAgU1NIX1NGVFBfUVVPVEVfU1RBVCwKLSAgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCwKLSAgU1NIX1NGVFBfUVVPVEVfU1lNTElOSywKLSAgU1NIX1NGVFBfUVVPVEVfTUtESVIsCi0gIFNTSF9TRlRQX1FVT1RFX1JFTkFNRSwKLSAgU1NIX1NGVFBfUVVPVEVfUk1ESVIsCi0gIFNTSF9TRlRQX1FVT1RFX1VOTElOSywKLSAgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUywKLSAgU1NIX1NGVFBfR0VUSU5GTywKLSAgU1NIX1NGVFBfRklMRVRJTUUsCi0gIFNTSF9TRlRQX1RSQU5TX0lOSVQsCi0gIFNTSF9TRlRQX1VQTE9BRF9JTklULAotICBTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklULAotICBTU0hfU0ZUUF9DUkVBVEVfRElSUywKLSAgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIsCi0gIFNTSF9TRlRQX1JFQURESVJfSU5JVCwKLSAgU1NIX1NGVFBfUkVBRERJUiwKLSAgU1NIX1NGVFBfUkVBRERJUl9MSU5LLAotICBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSwKLSAgU1NIX1NGVFBfUkVBRERJUl9ET05FLAotICBTU0hfU0ZUUF9ET1dOTE9BRF9JTklULAotICBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFULCAvKiBMYXN0IHN0YXRlIGluIFNGVFAtRE8gKi8KLSAgU1NIX1NGVFBfQ0xPU0UsICAgIC8qIExhc3Qgc3RhdGUgaW4gU0ZUUC1ET05FICovCi0gIFNTSF9TRlRQX1NIVVRET1dOLCAvKiBGaXJzdCBzdGF0ZSBpbiBTRlRQLURJU0NPTk5FQ1QgKi8KLSAgU1NIX1NDUF9UUkFOU19JTklULCAvKiBGaXJzdCBzdGF0ZSBpbiBTQ1AtRE8gKi8KLSAgU1NIX1NDUF9VUExPQURfSU5JVCwKLSAgU1NIX1NDUF9ET1dOTE9BRF9JTklULAotICBTU0hfU0NQX0RPV05MT0FELAotICBTU0hfU0NQX0RPTkUsCi0gIFNTSF9TQ1BfU0VORF9FT0YsCi0gIFNTSF9TQ1BfV0FJVF9FT0YsCi0gIFNTSF9TQ1BfV0FJVF9DTE9TRSwKLSAgU1NIX1NDUF9DSEFOTkVMX0ZSRUUsICAgLyogTGFzdCBzdGF0ZSBpbiBTQ1AtRE9ORSAqLwotICBTU0hfU0VTU0lPTl9ESVNDT05ORUNULCAvKiBGaXJzdCBzdGF0ZSBpbiBTQ1AtRElTQ09OTkVDVCAqLwotICBTU0hfU0VTU0lPTl9GUkVFLCAgICAgICAvKiBMYXN0IHN0YXRlIGluIFNDUC9TRlRQLURJU0NPTk5FQ1QgKi8KLSAgU1NIX1FVSVQsCi0gIFNTSF9MQVNUICAvKiBuZXZlciB1c2VkICovCi19IHNzaHN0YXRlOwotCi0vKiB0aGlzIHN0cnVjdCBpcyB1c2VkIGluIHRoZSBIYW5kbGVEYXRhIHN0cnVjdCB3aGljaCBpcyBwYXJ0IG9mIHRoZQotICAgQ3VybF9lYXN5LCB3aGljaCBtZWFucyB0aGlzIGlzIHVzZWQgb24gYSBwZXItZWFzeSBoYW5kbGUgYmFzaXMuCi0gICBFdmVyeXRoaW5nIHRoYXQgaXMgc3RyaWN0bHkgcmVsYXRlZCB0byBhIGNvbm5lY3Rpb24gaXMgYmFubmVkIGZyb20gdGhpcwotICAgc3RydWN0LiAqLwotc3RydWN0IFNTSFBST1RPIHsKLSAgY2hhciAqcGF0aDsgICAgICAgICAgICAgICAgICAvKiB0aGUgcGF0aCB3ZSBvcGVyYXRlIG9uICovCi19OwotCi0vKiBzc2hfY29ubiBpcyB1c2VkIGZvciBzdHJ1Y3QgY29ubmVjdGlvbi1vcmllbnRlZCBkYXRhIGluIHRoZSBjb25uZWN0ZGF0YQotICAgc3RydWN0ICovCi1zdHJ1Y3Qgc3NoX2Nvbm4gewotICBjb25zdCBjaGFyICphdXRobGlzdDsgICAgICAgLyogTGlzdCBvZiBhdXRoLiBtZXRob2RzLCBtYW5hZ2VkIGJ5IGxpYnNzaDIgKi8KLQotICAvKiBjb21tb24gKi8KLSAgY29uc3QgY2hhciAqcGFzc3BocmFzZTsgICAgIC8qIHBhc3MtcGhyYXNlIHRvIHVzZSAqLwotICBjaGFyICpyc2FfcHViOyAgICAgICAgICAgICAgLyogcGF0aCBuYW1lICovCi0gIGNoYXIgKnJzYTsgICAgICAgICAgICAgICAgICAvKiBwYXRoIG5hbWUgKi8KLSAgYm9vbCBhdXRoZWQ7ICAgICAgICAgICAgICAgIC8qIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQgZmluZSAqLwotICBzc2hzdGF0ZSBzdGF0ZTsgICAgICAgICAgICAgLyogYWx3YXlzIHVzZSBzc2guYzpzdGF0ZSgpIHRvIGNoYW5nZSBzdGF0ZSEgKi8KLSAgc3Noc3RhdGUgbmV4dHN0YXRlOyAgICAgICAgIC8qIHRoZSBzdGF0ZSB0byBnb3RvIGFmdGVyIHN0b3BwaW5nICovCi0gIENVUkxjb2RlIGFjdHVhbGNvZGU7ICAgICAgICAvKiB0aGUgYWN0dWFsIGVycm9yIGNvZGUgKi8KLSAgc3RydWN0IGN1cmxfc2xpc3QgKnF1b3RlX2l0ZW07IC8qIGZvciB0aGUgcXVvdGUgb3B0aW9uICovCi0gIGNoYXIgKnF1b3RlX3BhdGgxOyAgICAgICAgICAvKiB0d28gZ2VuZXJpYyBwb2ludGVycyBmb3IgdGhlIFFVT1RFIHN0dWZmICovCi0gIGNoYXIgKnF1b3RlX3BhdGgyOwotCi0gIGJvb2wgYWNjZXB0ZmFpbDsgICAgICAgICAgICAvKiB1c2VkIGJ5IHRoZSBTRlRQX1FVT1RFIChjb250aW51ZSBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGUgY29tbWFuZCBmYWlscykgKi8KLSAgY2hhciAqaG9tZWRpcjsgICAgICAgICAgICAgIC8qIHdoZW4gZG9pbmcgU0ZUUCB3ZSBmaWd1cmUgb3V0IGhvbWUgZGlyIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdCBwaGFzZSAqLwotICBzaXplX3QgcmVhZGRpcl9sZW4sIHJlYWRkaXJfdG90YWxMZW4sIHJlYWRkaXJfY3VyckxlbjsKLSAgY2hhciAqcmVhZGRpcl9saW5lOwotICBjaGFyICpyZWFkZGlyX2xpbmtQYXRoOwotICAvKiBlbmQgb2YgUkVBRERJUiBzdHVmZiAqLwotCi0gIGludCBzZWNvbmRDcmVhdGVEaXJzOyAgICAgICAgIC8qIGNvdW50ZXIgdXNlIGJ5IHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBjaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8vY3JlYXRlIGEgZGlyZWN0b3J5ICovCi0gIGNoYXIgKnNsYXNoX3BvczsgICAgICAgICAgICAgIC8qIHVzZWQgYnkgdGhlIFNGVFBfQ1JFQVRFX0RJUlMgc3RhdGUgKi8KLQotICBpbnQgb3JpZ193YWl0Zm9yOyAgICAgICAgICAgICAvKiBkZWZhdWx0IFJFQUQvV1JJVEUgYml0cyB3YWl0IGZvciAqLwotCi0jaWYgZGVmaW5lZChVU0VfTElCU1NIKQotLyogb3VyIHZhcmlhYmxlcyAqLwotICB1bnNpZ25lZCBrYmRfc3RhdGU7IC8qIDAgb3IgMSAqLwotICBzc2hfa2V5IHByaXZrZXk7Ci0gIHNzaF9rZXkgcHVia2V5OwotICBpbnQgYXV0aF9tZXRob2RzOwotICBzc2hfc2Vzc2lvbiBzc2hfc2Vzc2lvbjsKLSAgc3NoX3NjcCBzY3Bfc2Vzc2lvbjsKLSAgc2Z0cF9zZXNzaW9uIHNmdHBfc2Vzc2lvbjsKLSAgc2Z0cF9maWxlIHNmdHBfZmlsZTsKLSAgc2Z0cF9kaXIgc2Z0cF9kaXI7Ci0KLSAgdW5zaWduZWQgc2Z0cF9yZWN2X3N0YXRlOyAvKiAwIG9yIDEgKi8KLSAgaW50IHNmdHBfZmlsZV9pbmRleDsgLyogZm9yIGFzeW5jIHJlYWQgKi8KLSAgc2Z0cF9hdHRyaWJ1dGVzIHJlYWRkaXJfYXR0cnM7IC8qIHVzZWQgYnkgdGhlIFNGVFAgcmVhZGRpciBhY3Rpb25zICovCi0gIHNmdHBfYXR0cmlidXRlcyByZWFkZGlyX2xpbmtfYXR0cnM7IC8qIHVzZWQgYnkgdGhlIFNGVFAgcmVhZGRpciBhY3Rpb25zICovCi0gIHNmdHBfYXR0cmlidXRlcyBxdW90ZV9hdHRyczsgLyogdXNlZCBieSB0aGUgU0ZUUF9RVU9URSBzdGF0ZSAqLwotCi0gIGNvbnN0IGNoYXIgKnJlYWRkaXJfZmlsZW5hbWU7IC8qIHBvaW50cyB3aXRoaW4gcmVhZGRpcl9hdHRycyAqLwotICBjb25zdCBjaGFyICpyZWFkZGlyX2xvbmdlbnRyeTsKLSAgY2hhciAqcmVhZGRpcl90bXA7Ci0jZWxpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKQotICBjaGFyICpyZWFkZGlyX2ZpbGVuYW1lOwotICBjaGFyICpyZWFkZGlyX2xvbmdlbnRyeTsKLQotICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBxdW90ZV9hdHRyczsgLyogdXNlZCBieSB0aGUgU0ZUUF9RVU9URSBzdGF0ZSAqLwotCi0gIC8qIEhlcmUncyBhIHNldCBvZiBzdHJ1Y3QgbWVtYmVycyB1c2VkIGJ5IHRoZSBTRlRQX1JFQURESVIgc3RhdGUgKi8KLSAgTElCU1NIMl9TRlRQX0FUVFJJQlVURVMgcmVhZGRpcl9hdHRyczsKLSAgTElCU1NIMl9TRVNTSU9OICpzc2hfc2Vzc2lvbjsgLyogU2VjdXJlIFNoZWxsIHNlc3Npb24gKi8KLSAgTElCU1NIMl9DSEFOTkVMICpzc2hfY2hhbm5lbDsgLyogU2VjdXJlIFNoZWxsIGNoYW5uZWwgaGFuZGxlICovCi0gIExJQlNTSDJfU0ZUUCAqc2Z0cF9zZXNzaW9uOyAgIC8qIFNGVFAgaGFuZGxlICovCi0gIExJQlNTSDJfU0ZUUF9IQU5ETEUgKnNmdHBfaGFuZGxlOwotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0FHRU5UX0FQSQotICBMSUJTU0gyX0FHRU5UICpzc2hfYWdlbnQ7ICAgICAvKiBwcm94eSB0byBzc2gtYWdlbnQvcGFnZWFudCAqLwotICBzdHJ1Y3QgbGlic3NoMl9hZ2VudF9wdWJsaWNrZXkgKnNzaGFnZW50X2lkZW50aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNzaGFnZW50X3ByZXZfaWRlbnRpdHk7Ci0jZW5kaWYKLQotICAvKiBub3RlIHRoYXQgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkgaXMgYSBkZWZpbmUgc2V0IGluIHRoZSBsaWJzc2gyLmgKLSAgICAgaGVhZGVyICovCi0jaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKLSAgTElCU1NIMl9LTk9XTkhPU1RTICpraDsKLSNlbmRpZgotI2VuZGlmIC8qIFVTRV9MSUJTU0ggKi8KLX07Ci0KLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gpCi0KLSNkZWZpbmUgQ1VSTF9MSUJTU0hfVkVSU0lPTiBzc2hfdmVyc2lvbigwKQotCi1leHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHA7Ci0KLSNlbGlmIGRlZmluZWQoVVNFX0xJQlNTSDIpCi0KLS8qIEZlYXR1cmUgZGV0ZWN0aW9uIGJhc2VkIG9uIHZlcnNpb24gbnVtYmVycyB0byBiZXR0ZXIgd29yayB3aXRoCi0gICBub24tY29uZmlndXJlIHBsYXRmb3JtcyAqLwotCi0jaWYgIWRlZmluZWQoTElCU1NIMl9WRVJTSU9OX05VTSkgfHwgKExJQlNTSDJfVkVSU0lPTl9OVU0gPCAweDAwMTAwMCkKLSMgIGVycm9yICJTQ1AvU0ZUUCBwcm90b2NvbHMgcmVxdWlyZSBsaWJzc2gyIDAuMTYgb3IgbGF0ZXIiCi0jZW5kaWYKLQotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAwMDAKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX1NGVFBfU0VFSzY0IDEKLSNlbmRpZgotCi0jaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDEwMAotI2RlZmluZSBIQVZFX0xJQlNTSDJfVkVSU0lPTiAxCi0jZW5kaWYKLQotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDUKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX0lOSVQgMQotI2RlZmluZSBIQVZFX0xJQlNTSDJfRVhJVCAxCi0jZW5kaWYKLQotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDYKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9DSEVDS1AgMQotI2RlZmluZSBIQVZFX0xJQlNTSDJfU0NQX1NFTkQ2NCAxCi0jZW5kaWYKLQotI2lmIExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDgKLSNkZWZpbmUgSEFWRV9MSUJTU0gyX1NFU1NJT05fSEFORFNIQUtFIDEKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9MSUJTU0gyX1ZFUlNJT04KLS8qIGdldCBpdCBydW4tdGltZSBpZiBwb3NzaWJsZSAqLwotI2RlZmluZSBDVVJMX0xJQlNTSDJfVkVSU0lPTiBsaWJzc2gyX3ZlcnNpb24oMCkKLSNlbHNlCi0vKiB1c2UgYnVpbGQtdGltZSBpZiBydW4tdGltZSBub3QgcG9zc2libGUgKi8KLSNkZWZpbmUgQ1VSTF9MSUJTU0gyX1ZFUlNJT04gTElCU1NIMl9WRVJTSU9OCi0jZW5kaWYKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwOwotCi0jZW5kaWYgLyogVVNFX0xJQlNTSDIgKi8KLQotI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NTSF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJjYXNlLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJjYXNlLmMKaW5kZXggMjRiY2NhOS4uYTMwOWUzNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyY2FzZS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmNhc2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNiArMjYsOCBAQAogCiAjaW5jbHVkZSAic3RyY2FzZS5oIgogCitzdGF0aWMgY2hhciByYXdfdG9sb3dlcihjaGFyIGluKTsKKwogLyogUG9ydGFibGUsIGNvbnNpc3RlbnQgdG91cHBlciAocmVtZW1iZXIgRUJDRElDKS4gRG8gbm90IHVzZSB0b3VwcGVyKCkgYmVjYXVzZQogICAgaXRzIGJlaGF2aW9yIGlzIGFsdGVyZWQgYnkgdGhlIGN1cnJlbnQgbG9jYWxlLiAqLwogY2hhciBDdXJsX3Jhd190b3VwcGVyKGNoYXIgaW4pCkBAIC05Myw2ICs5NSw3NSBAQAogICByZXR1cm4gaW47CiB9CiAKKworLyogUG9ydGFibGUsIGNvbnNpc3RlbnQgdG9sb3dlciAocmVtZW1iZXIgRUJDRElDKS4gRG8gbm90IHVzZSB0b2xvd2VyKCkgYmVjYXVzZQorICAgaXRzIGJlaGF2aW9yIGlzIGFsdGVyZWQgYnkgdGhlIGN1cnJlbnQgbG9jYWxlLiAqLworc3RhdGljIGNoYXIgcmF3X3RvbG93ZXIoY2hhciBpbikKK3sKKyNpZiAhZGVmaW5lZChDVVJMX0RPRVNfQ09OVkVSU0lPTlMpCisgIGlmKGluID49ICdBJyAmJiBpbiA8PSAnWicpCisgICAgcmV0dXJuIChjaGFyKSgnYScgKyBpbiAtICdBJyk7CisjZWxzZQorICBzd2l0Y2goaW4pIHsKKyAgY2FzZSAnQSc6CisgICAgcmV0dXJuICdhJzsKKyAgY2FzZSAnQic6CisgICAgcmV0dXJuICdiJzsKKyAgY2FzZSAnQyc6CisgICAgcmV0dXJuICdjJzsKKyAgY2FzZSAnRCc6CisgICAgcmV0dXJuICdkJzsKKyAgY2FzZSAnRSc6CisgICAgcmV0dXJuICdlJzsKKyAgY2FzZSAnRic6CisgICAgcmV0dXJuICdmJzsKKyAgY2FzZSAnRyc6CisgICAgcmV0dXJuICdnJzsKKyAgY2FzZSAnSCc6CisgICAgcmV0dXJuICdoJzsKKyAgY2FzZSAnSSc6CisgICAgcmV0dXJuICdpJzsKKyAgY2FzZSAnSic6CisgICAgcmV0dXJuICdqJzsKKyAgY2FzZSAnSyc6CisgICAgcmV0dXJuICdrJzsKKyAgY2FzZSAnTCc6CisgICAgcmV0dXJuICdsJzsKKyAgY2FzZSAnTSc6CisgICAgcmV0dXJuICdtJzsKKyAgY2FzZSAnTic6CisgICAgcmV0dXJuICduJzsKKyAgY2FzZSAnTyc6CisgICAgcmV0dXJuICdvJzsKKyAgY2FzZSAnUCc6CisgICAgcmV0dXJuICdwJzsKKyAgY2FzZSAnUSc6CisgICAgcmV0dXJuICdxJzsKKyAgY2FzZSAnUic6CisgICAgcmV0dXJuICdyJzsKKyAgY2FzZSAnUyc6CisgICAgcmV0dXJuICdzJzsKKyAgY2FzZSAnVCc6CisgICAgcmV0dXJuICd0JzsKKyAgY2FzZSAnVSc6CisgICAgcmV0dXJuICd1JzsKKyAgY2FzZSAnVic6CisgICAgcmV0dXJuICd2JzsKKyAgY2FzZSAnVyc6CisgICAgcmV0dXJuICd3JzsKKyAgY2FzZSAnWCc6CisgICAgcmV0dXJuICd4JzsKKyAgY2FzZSAnWSc6CisgICAgcmV0dXJuICd5JzsKKyAgY2FzZSAnWic6CisgICAgcmV0dXJuICd6JzsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIGluOworfQorCisKIC8qCiAgKiBDdXJsX3N0cmNhc2Vjb21wYXJlKCkgaXMgZm9yIGRvaW5nICJyYXciIGNhc2UgaW5zZW5zaXRpdmUgc3RyaW5ncy4gVGhpcyBpcwogICogbWVhbnQgdG8gYmUgbG9jYWxlIGluZGVwZW5kZW50IGFuZCBvbmx5IGNvbXBhcmUgc3RyaW5ncyB3ZSBrbm93IGFyZSBzYWZlCkBAIC0xNjUsNiArMjM2LDIxIEBACiAgIH0gd2hpbGUoKnNyYysrICYmIC0tbik7CiB9CiAKKy8qIENvcHkgYSBsb3dlciBjYXNlIHZlcnNpb24gb2YgdGhlIHN0cmluZyBmcm9tIHNyYyB0byBkZXN0LiAgVGhlCisgKiBzdHJpbmdzIG1heSBvdmVybGFwLiAgTm8gbW9yZSB0aGFuIG4gY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nIGFyZSBjb3BpZWQKKyAqIChpbmNsdWRpbmcgYW55IE5VTCkgYW5kIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcgd2lsbCBOT1QgYmUKKyAqIE5VTC10ZXJtaW5hdGVkIGlmIHRoYXQgbGltaXQgaXMgcmVhY2hlZC4KKyAqLwordm9pZCBDdXJsX3N0cm50b2xvd2VyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pCit7CisgIGlmKG4gPCAxKQorICAgIHJldHVybjsKKworICBkbyB7CisgICAgKmRlc3QrKyA9IHJhd190b2xvd2VyKCpzcmMpOworICB9IHdoaWxlKCpzcmMrKyAmJiAtLW4pOworfQorCiAvKiAtLS0gcHVibGljIGZ1bmN0aW9ucyAtLS0gKi8KIAogaW50IGN1cmxfc3RyZXF1YWwoY29uc3QgY2hhciAqZmlyc3QsIGNvbnN0IGNoYXIgKnNlY29uZCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmNhc2UuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmNhc2UuaAppbmRleCA2ZmVlMzg0Li5jZDRjNDE5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJjYXNlLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyY2FzZS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00Niw1ICs0Niw2IEBACiAjZGVmaW5lIGNoZWNrcHJlZml4KGEsYikgICAgY3VybF9zdHJuZXF1YWwoYSxiLHN0cmxlbihhKSkKIAogdm9pZCBDdXJsX3N0cm50b3VwcGVyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pOwordm9pZCBDdXJsX3N0cm50b2xvd2VyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pOwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfU1RSQ0FTRV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJkdXAuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmR1cC5jCmluZGV4IDUxZTc5NzguLjFhYjEwZmQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmR1cC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmR1cC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJlcnJvci5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuYwppbmRleCBlMjczZjM3Li4wMTVlNTg4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJlcnJvci5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmVycm9yLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMxMSw2ICszMTEsMTUgQEAKICAgY2FzZSBDVVJMRV9SRUNVUlNJVkVfQVBJX0NBTEw6CiAgICAgcmV0dXJuICJBUEkgZnVuY3Rpb24gY2FsbGVkIGZyb20gd2l0aGluIGNhbGxiYWNrIjsKIAorICBjYXNlIENVUkxFX0FVVEhfRVJST1I6CisgICAgcmV0dXJuICJBbiBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbiByZXR1cm5lZCBhbiBlcnJvciI7CisKKyAgY2FzZSBDVVJMRV9IVFRQMzoKKyAgICByZXR1cm4gIkhUVFAvMyBlcnJvciI7CisKKyAgY2FzZSBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I6CisgICAgcmV0dXJuICJRVUlDIGNvbm5lY3Rpb24gZXJyb3IiOworCiAgICAgLyogZXJyb3IgY29kZXMgbm90IHVzZWQgYnkgY3VycmVudCBsaWJjdXJsICovCiAgIGNhc2UgQ1VSTEVfT0JTT0xFVEUyMDoKICAgY2FzZSBDVVJMRV9PQlNPTEVURTI0OgpAQCAtMzgzLDYgKzM5MiwxMiBAQAogICBjYXNlIENVUkxNX1JFQ1VSU0lWRV9BUElfQ0FMTDoKICAgICByZXR1cm4gIkFQSSBmdW5jdGlvbiBjYWxsZWQgZnJvbSB3aXRoaW4gY2FsbGJhY2siOwogCisgIGNhc2UgQ1VSTE1fV0FLRVVQX0ZBSUxVUkU6CisgICAgcmV0dXJuICJXYWtldXAgaXMgdW5hdmFpbGFibGUgb3IgZmFpbGVkIjsKKworICBjYXNlIENVUkxNX0JBRF9GVU5DVElPTl9BUkdVTUVOVDoKKyAgICByZXR1cm4gIkEgbGliY3VybCBmdW5jdGlvbiB3YXMgZ2l2ZW4gYSBiYWQgYXJndW1lbnQiOworCiAgIGNhc2UgQ1VSTE1fTEFTVDoKICAgICBicmVhazsKICAgfQpAQCAtNDMzLDE5ICs0NDgsMjYgQEAKIH0KIAogI2lmZGVmIFVTRV9XSU5TT0NLCi0KLS8qIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBtb3N0IC8gYWxsICg/KSBXaW5zb2NrIGVycm9ycyBjdXJsIGlzIGFibGUgdG8gcHJvZHVjZS4KKy8qIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIEN1cmxfc3RyZXJyb3IgdGhhdCBjb252ZXJ0cyBXaW5zb2NrIGVycm9yCisgKiBjb2RlcyAoV1NBR2V0TGFzdEVycm9yKSB0byBlcnJvciBtZXNzYWdlcy4KKyAqIFJldHVybnMgTlVMTCBpZiBubyBlcnJvciBtZXNzYWdlIHdhcyBmb3VuZCBmb3IgZXJyb3IgY29kZS4KICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKgogZ2V0X3dpbnNvY2tfZXJyb3IgKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLSNpZmRlZiBQUkVTRVJWRV9XSU5ET1dTX0VSUk9SX0NPREUKLSAgRFdPUkQgb2xkX3dpbl9lcnIgPSBHZXRMYXN0RXJyb3IoKTsKLSNlbmRpZgotICBpbnQgb2xkX2Vycm5vID0gZXJybm87Ci0gIGNvbnN0IGNoYXIgKnA7Ci0KICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworICBjb25zdCBjaGFyICpwOworI2VuZGlmCisKKyAgaWYoIWxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKKworI2lmZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKKyAgKHZvaWQpZXJyOworICByZXR1cm4gTlVMTDsKKyNlbHNlCiAgIHN3aXRjaChlcnIpIHsKICAgY2FzZSBXU0FFSU5UUjoKICAgICBwID0gIkNhbGwgaW50ZXJydXB0ZWQiOwpAQCAtNjE0LDI3ICs2MzYsNjQgQEAKICAgZGVmYXVsdDoKICAgICByZXR1cm4gTlVMTDsKICAgfQotI2Vsc2UKLSAgaWYoIWVycikKLSAgICByZXR1cm4gTlVMTDsKLSAgZWxzZQotICAgIHAgPSAiZXJyb3IiOwotI2VuZGlmCiAgIHN0cm5jcHkoYnVmLCBwLCBsZW4pOwogICBidWYgW2xlbi0xXSA9ICdcMCc7Ci0KLSAgaWYoZXJybm8gIT0gb2xkX2Vycm5vKQotICAgIGVycm5vID0gb2xkX2Vycm5vOwotCi0jaWZkZWYgUFJFU0VSVkVfV0lORE9XU19FUlJPUl9DT0RFCi0gIGlmKG9sZF93aW5fZXJyICE9IEdldExhc3RFcnJvcigpKQotICAgIFNldExhc3RFcnJvcihvbGRfd2luX2Vycik7Ci0jZW5kaWYKLQogICByZXR1cm4gYnVmOworI2VuZGlmCiB9CiAjZW5kaWYgICAvKiBVU0VfV0lOU09DSyAqLwogCisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgQ3VybF9zdHJlcnJvciB0aGF0IGNvbnZlcnRzIFdpbmRvd3MgQVBJIGVycm9yCisgKiBjb2RlcyAoR2V0TGFzdEVycm9yKSB0byBlcnJvciBtZXNzYWdlcy4KKyAqIFJldHVybnMgTlVMTCBpZiBubyBlcnJvciBtZXNzYWdlIHdhcyBmb3VuZCBmb3IgZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X3dpbmFwaV9lcnJvcihpbnQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisgIGNoYXIgKnA7CisKKyAgaWYoIWJ1ZmxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKKworI2lmZGVmIF9XSU4zMl9XQ0UKKyAgeworICAgIHdjaGFyX3Qgd2J1ZlsyNTZdOworICAgIHdidWZbMF0gPSBMJ1wwJzsKKworICAgIGlmKEZvcm1hdE1lc3NhZ2UoKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKKyAgICAgICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUyksIE5VTEwsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgIExBTkdfTkVVVFJBTCwgd2J1Ziwgc2l6ZW9mKHdidWYpL3NpemVvZih3Y2hhcl90KSwgTlVMTCkpIHsKKyAgICAgIHNpemVfdCB3cml0dGVuID0gd2NzdG9tYnMoYnVmLCB3YnVmLCBidWZsZW4gLSAxKTsKKyAgICAgIGlmKHdyaXR0ZW4gIT0gKHNpemVfdCktMSkKKyAgICAgICAgYnVmW3dyaXR0ZW5dID0gJ1wwJzsKKyAgICAgIGVsc2UKKyAgICAgICAgKmJ1ZiA9ICdcMCc7CisgICAgfQorICB9CisjZWxzZQorICBpZighRm9ybWF0TWVzc2FnZUEoKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKKyAgICAgICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUyksIE5VTEwsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgIExBTkdfTkVVVFJBTCwgYnVmLCAoRFdPUkQpYnVmbGVuLCBOVUxMKSkgeworICAgICpidWYgPSAnXDAnOworICB9CisjZW5kaWYKKworICAvKiBUcnVuY2F0ZSBtdWx0aXBsZSBsaW5lcyAqLworICBwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisgIGlmKHApIHsKKyAgICBpZihwID4gYnVmICYmICoocC0xKSA9PSAnXHInKQorICAgICAgKihwLTEpID0gJ1wwJzsKKyAgICBlbHNlCisgICAgICAqcCA9ICdcMCc7CisgIH0KKworICByZXR1cm4gKCpidWYgPyBidWYgOiBOVUxMKTsKK30KKyNlbmRpZiAvKiBXSU4zMiB8fCBfV0lOMzJfV0NFICovCisKIC8qCiAgKiBPdXIgdGhyZWFkLXNhZmUgYW5kIHNtYXJ0IHN0cmVycm9yKCkgcmVwbGFjZW1lbnQuCiAgKgpAQCAtNjQ1LDYgKzcwNCwxNCBAQAogICoKICAqIFdlIGRvbid0IGRvIHJhbmdlIGNoZWNraW5nIChvbiBzeXN0ZW1zIG90aGVyIHRoYW4gV2luZG93cykgc2luY2UgdGhlcmUgaXMKICAqIG5vIGdvb2QgcmVsaWFibGUgYW5kIHBvcnRhYmxlIHdheSB0byBkbyBpdC4KKyAqCisgKiBPbiBXaW5kb3dzIGRpZmZlcmVudCB0eXBlcyBvZiBlcnJvciBjb2RlcyBvdmVybGFwLiBUaGlzIGZ1bmN0aW9uIGhhcyBhbgorICogb3JkZXIgb2YgcHJlZmVyZW5jZSB3aGVuIHRyeWluZyB0byBtYXRjaCBlcnJvciBjb2RlczoKKyAqIENSVCAoZXJybm8pLCBXaW5zb2NrIChXU0FHZXRMYXN0RXJyb3IpLCBXaW5kb3dzIEFQSSAoR2V0TGFzdEVycm9yKS4KKyAqCisgKiBJdCBtYXkgYmUgbW9yZSBjb3JyZWN0IHRvIGNhbGwgb25lIG9mIHRoZSB2YXJpYW50IGZ1bmN0aW9ucyBpbnN0ZWFkOgorICogQ2FsbCBDdXJsX3NzcGlfc3RyZXJyb3IgaWYgdGhlIGVycm9yIGNvZGUgaXMgZGVmaW5pdGVseSBXaW5kb3dzIFNTUEkuCisgKiBDYWxsIEN1cmxfd2luYXBpX3N0cmVycm9yIGlmIHRoZSBlcnJvciBjb2RlIGlzIGRlZmluaXRlbHkgV2luZG93cyBBUEkuCiAgKi8KIGNvbnN0IGNoYXIgKkN1cmxfc3RyZXJyb3IoaW50IGVyciwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQogewpAQCAtNjU1LDM1ICs3MjIsMzAgQEAKICAgY2hhciAqcDsKICAgc2l6ZV90IG1heDsKIAorICBpZighYnVmbGVuKQorICAgIHJldHVybiBOVUxMOworCiAgIERFQlVHQVNTRVJUKGVyciA+PSAwKTsKIAogICBtYXggPSBidWZsZW4gLSAxOwogICAqYnVmID0gJ1wwJzsKIAotI2lmZGVmIFVTRV9XSU5TT0NLCi0KLSNpZmRlZiBfV0lOMzJfV0NFCi0gIHsKLSAgICB3Y2hhcl90IHdidWZbMjU2XTsKLSAgICB3YnVmWzBdID0gTCdcMCc7Ci0KLSAgICBGb3JtYXRNZXNzYWdlKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNLCBOVUxMLCBlcnIsCi0gICAgICAgICAgICAgICAgICBMQU5HX05FVVRSQUwsIHdidWYsIHNpemVvZih3YnVmKS9zaXplb2Yod2NoYXJfdCksIE5VTEwpOwotICAgIHdjc3RvbWJzKGJ1Ziwgd2J1ZiwgbWF4KTsKLSAgfQotI2Vsc2UKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisjaWYgZGVmaW5lZChXSU4zMikKICAgLyogJ3N5c19uZXJyJyBpcyB0aGUgbWF4aW11bSBlcnJubyBudW1iZXIsIGl0IGlzIG5vdCB3aWRlbHkgcG9ydGFibGUgKi8KICAgaWYoZXJyID49IDAgJiYgZXJyIDwgc3lzX25lcnIpCiAgICAgc3RybmNweShidWYsIHN0cmVycm9yKGVyciksIG1heCk7Ci0gIGVsc2UgewotICAgIGlmKCFnZXRfd2luc29ja19lcnJvcihlcnIsIGJ1ZiwgbWF4KSAmJgotICAgICAgICFGb3JtYXRNZXNzYWdlQShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwgTlVMTCwgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICBMQU5HX05FVVRSQUwsIGJ1ZiwgKERXT1JEKW1heCwgTlVMTCkpCisgIGVsc2UKKyNlbmRpZgorICB7CisgICAgaWYoCisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgICAgICAhZ2V0X3dpbnNvY2tfZXJyb3IoZXJyLCBidWYsIG1heCkgJiYKKyNlbmRpZgorICAgICAgICFnZXRfd2luYXBpX2Vycm9yKChEV09SRCllcnIsIGJ1ZiwgbWF4KSkKICAgICAgIG1zbnByaW50ZihidWYsIG1heCwgIlVua25vd24gZXJyb3IgJWQgKCUjeCkiLCBlcnIsIGVycik7CiAgIH0KLSNlbmRpZgotCi0jZWxzZSAvKiBub3QgVVNFX1dJTlNPQ0sgY29taW5nIHVwICovCisjZWxzZSAvKiBub3QgV2luZG93cyBjb21pbmcgdXAgKi8KIAogI2lmIGRlZmluZWQoSEFWRV9TVFJFUlJPUl9SKSAmJiBkZWZpbmVkKEhBVkVfUE9TSVhfU1RSRVJST1JfUikKICAvKgpAQCAtNzMxLDkgKzc5Myw5IEBACiAgIH0KICNlbmRpZgogCi0jZW5kaWYgLyogZW5kIG9mICEgVVNFX1dJTlNPQ0sgKi8KKyNlbmRpZiAvKiBlbmQgb2Ygbm90IFdpbmRvd3MgKi8KIAotICBidWZbbWF4XSA9ICdcMCc7IC8qIG1ha2Ugc3VyZSB0aGUgc3RyaW5nIGlzIHplcm8gdGVybWluYXRlZCAqLworICBidWZbbWF4XSA9ICdcMCc7IC8qIG1ha2Ugc3VyZSB0aGUgc3RyaW5nIGlzIG51bGwtdGVybWluYXRlZCAqLwogCiAgIC8qIHN0cmlwIHRyYWlsaW5nICdcclxuJyBvciAnXG4nLiAqLwogICBwID0gc3RycmNocihidWYsICdcbicpOwpAQCAtNzU0LDM0MSArODE2LDM1IEBACiAgIHJldHVybiBidWY7CiB9CiAKLSNpZmRlZiBVU0VfV0lORE9XU19TU1BJCi1jb25zdCBjaGFyICpDdXJsX3NzcGlfc3RyZXJyb3IoaW50IGVyciwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQorLyoKKyAqIEN1cmxfd2luYXBpX3N0cmVycm9yOgorICogVmFyaWFudCBvZiBDdXJsX3N0cmVycm9yIGlmIHRoZSBlcnJvciBjb2RlIGlzIGRlZmluaXRlbHkgV2luZG93cyBBUEkuCisgKi8KKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCitjb25zdCBjaGFyICpDdXJsX3dpbmFwaV9zdHJlcnJvcihEV09SRCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKIHsKICNpZmRlZiBQUkVTRVJWRV9XSU5ET1dTX0VSUk9SX0NPREUKICAgRFdPUkQgb2xkX3dpbl9lcnIgPSBHZXRMYXN0RXJyb3IoKTsKICNlbmRpZgogICBpbnQgb2xkX2Vycm5vID0gZXJybm87Ci0gIGNvbnN0IGNoYXIgKnR4dDsKLSAgY2hhciAqb3V0YnVmOwotICBzaXplX3Qgb3V0bWF4OwotI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCi0gIGNoYXIgdHh0YnVmWzgwXTsKLSAgY2hhciBtc2didWZbMjU2XTsKLSAgY2hhciAqcCwgKnN0ciwgKm1zZyA9IE5VTEw7Ci0gIGJvb2wgbXNnX2Zvcm1hdHRlZCA9IEZBTFNFOwotI2VuZGlmCiAKLSAgb3V0YnVmID0gYnVmOwotICBvdXRtYXggPSBidWZsZW4gLSAxOwotICAqb3V0YnVmID0gJ1wwJzsKKyAgaWYoIWJ1ZmxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCi0KLSAgc3dpdGNoKGVycikgewotICAgIGNhc2UgU0VDX0VfT0s6Ci0gICAgICB0eHQgPSAiTm8gZXJyb3IiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDUllQVF9FX1JFVk9LRUQ6Ci0gICAgICB0eHQgPSAiQ1JZUFRfRV9SRVZPS0VEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQUxHT1JJVEhNX01JU01BVENIOgotICAgICAgdHh0ID0gIlNFQ19FX0FMR09SSVRITV9NSVNNQVRDSCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0JBRF9CSU5ESU5HUzoKLSAgICAgIHR4dCA9ICJTRUNfRV9CQURfQklORElOR1MiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9CQURfUEtHSUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfQkFEX1BLR0lEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQlVGRkVSX1RPT19TTUFMTDoKLSAgICAgIHR4dCA9ICJTRUNfRV9CVUZGRVJfVE9PX1NNQUxMIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ0FOTk9UX0lOU1RBTEw6Ci0gICAgICB0eHQgPSAiU0VDX0VfQ0FOTk9UX0lOU1RBTEwiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9DQU5OT1RfUEFDSzoKLSAgICAgIHR4dCA9ICJTRUNfRV9DQU5OT1RfUEFDSyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0NFUlRfRVhQSVJFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9DRVJUX0VYUElSRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9DRVJUX1VOS05PV046Ci0gICAgICB0eHQgPSAiU0VDX0VfQ0VSVF9VTktOT1dOIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ0VSVF9XUk9OR19VU0FHRToKLSAgICAgIHR4dCA9ICJTRUNfRV9DRVJUX1dST05HX1VTQUdFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ09OVEVYVF9FWFBJUkVEOgotICAgICAgdHh0ID0gIlNFQ19FX0NPTlRFWFRfRVhQSVJFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0NST1NTUkVBTE1fREVMRUdBVElPTl9GQUlMVVJFOgotICAgICAgdHh0ID0gIlNFQ19FX0NST1NTUkVBTE1fREVMRUdBVElPTl9GQUlMVVJFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfQ1JZUFRPX1NZU1RFTV9JTlZBTElEOgotICAgICAgdHh0ID0gIlNFQ19FX0NSWVBUT19TWVNURU1fSU5WQUxJRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0RFQ1JZUFRfRkFJTFVSRToKLSAgICAgIHR4dCA9ICJTRUNfRV9ERUNSWVBUX0ZBSUxVUkUiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9ERUxFR0FUSU9OX1BPTElDWToKLSAgICAgIHR4dCA9ICJTRUNfRV9ERUxFR0FUSU9OX1BPTElDWSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0RFTEVHQVRJT05fUkVRVUlSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfREVMRUdBVElPTl9SRVFVSVJFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0RPV05HUkFERV9ERVRFQ1RFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9ET1dOR1JBREVfREVURUNURUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9FTkNSWVBUX0ZBSUxVUkU6Ci0gICAgICB0eHQgPSAiU0VDX0VfRU5DUllQVF9GQUlMVVJFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfSUxMRUdBTF9NRVNTQUdFOgotICAgICAgdHh0ID0gIlNFQ19FX0lMTEVHQUxfTUVTU0FHRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lOQ09NUExFVEVfQ1JFREVOVElBTFM6Ci0gICAgICB0eHQgPSAiU0VDX0VfSU5DT01QTEVURV9DUkVERU5USUFMUyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lOQ09NUExFVEVfTUVTU0FHRToKLSAgICAgIHR4dCA9ICJTRUNfRV9JTkNPTVBMRVRFX01FU1NBR0UiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZOgotICAgICAgdHh0ID0gIlNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKLSAgICAgIHR4dCA9ICJTRUNfRV9JTlRFUk5BTF9FUlJPUiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lOVkFMSURfSEFORExFOgotICAgICAgdHh0ID0gIlNFQ19FX0lOVkFMSURfSEFORExFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfSU5WQUxJRF9QQVJBTUVURVI6Ci0gICAgICB0eHQgPSAiU0VDX0VfSU5WQUxJRF9QQVJBTUVURVIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JTlZBTElEX1RPS0VOOgotICAgICAgdHh0ID0gIlNFQ19FX0lOVkFMSURfVE9LRU4iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0lTU1VJTkdfQ0FfVU5UUlVTVEVEX0tEQzoKLSAgICAgIHR4dCA9ICJTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRF9LREMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfQ0VSVF9FWFBJUkVEOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19DRVJUX0VYUElSRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfQ0VSVF9SRVZPS0VEOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19DRVJUX1JFVk9LRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfSU5WQUxJRF9SRVFVRVNUOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19JTlZBTElEX1JFUVVFU1QiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfVU5BQkxFX1RPX1JFRkVSOgotICAgICAgdHh0ID0gIlNFQ19FX0tEQ19VTkFCTEVfVE9fUkVGRVIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9LRENfVU5LTk9XTl9FVFlQRToKLSAgICAgIHR4dCA9ICJTRUNfRV9LRENfVU5LTk9XTl9FVFlQRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX0xPR09OX0RFTklFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9MT0dPTl9ERU5JRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9NQVhfUkVGRVJSQUxTX0VYQ0VFREVEOgotICAgICAgdHh0ID0gIlNFQ19FX01BWF9SRUZFUlJBTFNfRVhDRUVERUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9NRVNTQUdFX0FMVEVSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfTUVTU0FHRV9BTFRFUkVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfTVVMVElQTEVfQUNDT1VOVFM6Ci0gICAgICB0eHQgPSAiU0VDX0VfTVVMVElQTEVfQUNDT1VOVFMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9NVVNUX0JFX0tEQzoKLSAgICAgIHR4dCA9ICJTRUNfRV9NVVNUX0JFX0tEQyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX05PVF9PV05FUjoKLSAgICAgIHR4dCA9ICJTRUNfRV9OT1RfT1dORVIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19BVVRIRU5USUNBVElOR19BVVRIT1JJVFk6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fQVVUSEVOVElDQVRJTkdfQVVUSE9SSVRZIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfTk9fQ1JFREVOVElBTFM6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fQ1JFREVOVElBTFMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19JTVBFUlNPTkFUSU9OOgotICAgICAgdHh0ID0gIlNFQ19FX05PX0lNUEVSU09OQVRJT04iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19JUF9BRERSRVNTRVM6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fSVBfQUREUkVTU0VTIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfTk9fS0VSQl9LRVk6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fS0VSQl9LRVkiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19QQV9EQVRBOgotICAgICAgdHh0ID0gIlNFQ19FX05PX1BBX0RBVEEiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19TNFVfUFJPVF9TVVBQT1JUOgotICAgICAgdHh0ID0gIlNFQ19FX05PX1M0VV9QUk9UX1NVUFBPUlQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9OT19UR1RfUkVQTFk6Ci0gICAgICB0eHQgPSAiU0VDX0VfTk9fVEdUX1JFUExZIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfT1VUX09GX1NFUVVFTkNFOgotICAgICAgdHh0ID0gIlNFQ19FX09VVF9PRl9TRVFVRU5DRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1BLSU5JVF9DTElFTlRfRkFJTFVSRToKLSAgICAgIHR4dCA9ICJTRUNfRV9QS0lOSVRfQ0xJRU5UX0ZBSUxVUkUiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9QS0lOSVRfTkFNRV9NSVNNQVRDSDoKLSAgICAgIHR4dCA9ICJTRUNfRV9QS0lOSVRfTkFNRV9NSVNNQVRDSCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1BPTElDWV9OTFRNX09OTFk6Ci0gICAgICB0eHQgPSAiU0VDX0VfUE9MSUNZX05MVE1fT05MWSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1FPUF9OT1RfU1VQUE9SVEVEOgotICAgICAgdHh0ID0gIlNFQ19FX1FPUF9OT1RfU1VQUE9SVEVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfUkVWT0NBVElPTl9PRkZMSU5FX0M6Ci0gICAgICB0eHQgPSAiU0VDX0VfUkVWT0NBVElPTl9PRkZMSU5FX0MiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9SRVZPQ0FUSU9OX09GRkxJTkVfS0RDOgotICAgICAgdHh0ID0gIlNFQ19FX1JFVk9DQVRJT05fT0ZGTElORV9LREMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TRUNQS0dfTk9UX0ZPVU5EOgotICAgICAgdHh0ID0gIlNFQ19FX1NFQ1BLR19OT1RfRk9VTkQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TRUNVUklUWV9RT1NfRkFJTEVEOgotICAgICAgdHh0ID0gIlNFQ19FX1NFQ1VSSVRZX1FPU19GQUlMRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TSFVURE9XTl9JTl9QUk9HUkVTUzoKLSAgICAgIHR4dCA9ICJTRUNfRV9TSFVURE9XTl9JTl9QUk9HUkVTUyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1NNQVJUQ0FSRF9DRVJUX0VYUElSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfU01BUlRDQVJEX0NFUlRfRVhQSVJFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1NNQVJUQ0FSRF9DRVJUX1JFVk9LRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfU01BUlRDQVJEX0NFUlRfUkVWT0tFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1NNQVJUQ0FSRF9MT0dPTl9SRVFVSVJFRDoKLSAgICAgIHR4dCA9ICJTRUNfRV9TTUFSVENBUkRfTE9HT05fUkVRVUlSRUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9TVFJPTkdfQ1JZUFRPX05PVF9TVVBQT1JURUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfU1RST05HX0NSWVBUT19OT1RfU1VQUE9SVEVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfVEFSR0VUX1VOS05PV046Ci0gICAgICB0eHQgPSAiU0VDX0VfVEFSR0VUX1VOS05PV04iOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9USU1FX1NLRVc6Ci0gICAgICB0eHQgPSAiU0VDX0VfVElNRV9TS0VXIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfVE9PX01BTllfUFJJTkNJUEFMUzoKLSAgICAgIHR4dCA9ICJTRUNfRV9UT09fTUFOWV9QUklOQ0lQQUxTIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfVU5GSU5JU0hFRF9DT05URVhUX0RFTEVURUQ6Ci0gICAgICB0eHQgPSAiU0VDX0VfVU5GSU5JU0hFRF9DT05URVhUX0RFTEVURUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTOgotICAgICAgdHh0ID0gIlNFQ19FX1VOS05PV05fQ1JFREVOVElBTFMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTjoKLSAgICAgIHR4dCA9ICJTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1VOU1VQUE9SVEVEX1BSRUFVVEg6Ci0gICAgICB0eHQgPSAiU0VDX0VfVU5TVVBQT1JURURfUFJFQVVUSCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19FX1VOVFJVU1RFRF9ST09UOgotICAgICAgdHh0ID0gIlNFQ19FX1VOVFJVU1RFRF9ST09UIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0VfV1JPTkdfQ1JFREVOVElBTF9IQU5ETEU6Ci0gICAgICB0eHQgPSAiU0VDX0VfV1JPTkdfQ1JFREVOVElBTF9IQU5ETEUiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfRV9XUk9OR19QUklOQ0lQQUw6Ci0gICAgICB0eHQgPSAiU0VDX0VfV1JPTkdfUFJJTkNJUEFMIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFOgotICAgICAgdHh0ID0gIlNFQ19JX0NPTVBMRVRFX0FORF9DT05USU5VRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX0NPTVBMRVRFX05FRURFRDoKLSAgICAgIHR4dCA9ICJTRUNfSV9DT01QTEVURV9ORUVERUQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfSV9DT05URVhUX0VYUElSRUQ6Ci0gICAgICB0eHQgPSAiU0VDX0lfQ09OVEVYVF9FWFBJUkVEIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0lfQ09OVElOVUVfTkVFREVEOgotICAgICAgdHh0ID0gIlNFQ19JX0NPTlRJTlVFX05FRURFRCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX0lOQ09NUExFVEVfQ1JFREVOVElBTFM6Ci0gICAgICB0eHQgPSAiU0VDX0lfSU5DT01QTEVURV9DUkVERU5USUFMUyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX0xPQ0FMX0xPR09OOgotICAgICAgdHh0ID0gIlNFQ19JX0xPQ0FMX0xPR09OIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0VDX0lfTk9fTFNBX0NPTlRFWFQ6Ci0gICAgICB0eHQgPSAiU0VDX0lfTk9fTFNBX0NPTlRFWFQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTRUNfSV9SRU5FR09USUFURToKLSAgICAgIHR4dCA9ICJTRUNfSV9SRU5FR09USUFURSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNFQ19JX1NJR05BVFVSRV9ORUVERUQ6Ci0gICAgICB0eHQgPSAiU0VDX0lfU0lHTkFUVVJFX05FRURFRCI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgdHh0ID0gIlVua25vd24gZXJyb3IiOworICBpZighZ2V0X3dpbmFwaV9lcnJvcihlcnIsIGJ1ZiwgYnVmbGVuKSkgeworICAgIG1zbnByaW50ZihidWYsIGJ1ZmxlbiwgIlVua25vd24gZXJyb3IgJXUgKDB4JTA4WCkiLCBlcnIsIGVycik7CiAgIH0KLQotICBpZihlcnIgPT0gU0VDX0VfT0spCi0gICAgc3RybmNweShvdXRidWYsIHR4dCwgb3V0bWF4KTsKLSAgZWxzZSBpZihlcnIgPT0gU0VDX0VfSUxMRUdBTF9NRVNTQUdFKQotICAgIG1zbnByaW50ZihvdXRidWYsIG91dG1heCwKLSAgICAgICAgICAgICAgIlNFQ19FX0lMTEVHQUxfTUVTU0FHRSAoMHglMDhYKSAtIFRoaXMgZXJyb3IgdXN1YWxseSBvY2N1cnMgIgotICAgICAgICAgICAgICAid2hlbiBhIGZhdGFsIFNTTC9UTFMgYWxlcnQgaXMgcmVjZWl2ZWQgKGUuZy4gaGFuZHNoYWtlIGZhaWxlZCkuIgotICAgICAgICAgICAgICAiIE1vcmUgZGV0YWlsIG1heSBiZSBhdmFpbGFibGUgaW4gdGhlIFdpbmRvd3MgU3lzdGVtIGV2ZW50IGxvZy4iLAotICAgICAgICAgICAgICBlcnIpOwotICBlbHNlIHsKLSAgICBzdHIgPSB0eHRidWY7Ci0gICAgbXNucHJpbnRmKHR4dGJ1Ziwgc2l6ZW9mKHR4dGJ1ZiksICIlcyAoMHglMDhYKSIsIHR4dCwgZXJyKTsKLSAgICB0eHRidWZbc2l6ZW9mKHR4dGJ1ZiktMV0gPSAnXDAnOwotCi0jaWZkZWYgX1dJTjMyX1dDRQotICAgIHsKLSAgICAgIHdjaGFyX3Qgd2J1ZlsyNTZdOwotICAgICAgd2J1ZlswXSA9IEwnXDAnOwotCi0gICAgICBpZihGb3JtYXRNZXNzYWdlKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0VfSUdOT1JFX0lOU0VSVFMsCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGVyciwgTEFOR19ORVVUUkFMLAotICAgICAgICAgICAgICAgICAgICAgICB3YnVmLCBzaXplb2Yod2J1Zikvc2l6ZW9mKHdjaGFyX3QpLCBOVUxMKSkgewotICAgICAgICB3Y3N0b21icyhtc2didWYsIHdidWYsIHNpemVvZihtc2didWYpLTEpOwotICAgICAgICBtc2dfZm9ybWF0dGVkID0gVFJVRTsKLSAgICAgIH0KLSAgICB9CiAjZWxzZQotICAgIGlmKEZvcm1hdE1lc3NhZ2VBKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwKLSAgICAgICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUywKLSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBlcnIsIExBTkdfTkVVVFJBTCwKLSAgICAgICAgICAgICAgICAgICAgICBtc2didWYsIHNpemVvZihtc2didWYpLTEsIE5VTEwpKSB7Ci0gICAgICBtc2dfZm9ybWF0dGVkID0gVFJVRTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZihtc2dfZm9ybWF0dGVkKSB7Ci0gICAgICBtc2didWZbc2l6ZW9mKG1zZ2J1ZiktMV0gPSAnXDAnOwotICAgICAgLyogc3RyaXAgdHJhaWxpbmcgJ1xyXG4nIG9yICdcbicgKi8KLSAgICAgIHAgPSBzdHJyY2hyKG1zZ2J1ZiwgJ1xuJyk7Ci0gICAgICBpZihwICYmIChwIC0gbXNnYnVmKSA+PSAyKQotICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICBwID0gc3RycmNocihtc2didWYsICdccicpOwotICAgICAgaWYocCAmJiAocCAtIG1zZ2J1ZikgPj0gMSkKLSAgICAgICAgKnAgPSAnXDAnOwotICAgICAgbXNnID0gbXNnYnVmOwotICAgIH0KLSAgICBpZihtc2cpCi0gICAgICBtc25wcmludGYob3V0YnVmLCBvdXRtYXgsICIlcyAtICVzIiwgc3RyLCBtc2cpOwotICAgIGVsc2UKLSAgICAgIHN0cm5jcHkob3V0YnVmLCBzdHIsIG91dG1heCk7CisgIHsKKyAgICBjb25zdCBjaGFyICp0eHQgPSAoZXJyID09IEVSUk9SX1NVQ0NFU1MpID8gIk5vIGVycm9yIiA6ICJFcnJvciI7CisgICAgc3RybmNweShidWYsIHR4dCwgYnVmbGVuKTsKKyAgICBidWZbYnVmbGVuIC0gMV0gPSAnXDAnOwogICB9Ci0KLSNlbHNlCi0KLSAgaWYoZXJyID09IFNFQ19FX09LKQotICAgIHR4dCA9ICJObyBlcnJvciI7Ci0gIGVsc2UKLSAgICB0eHQgPSAiRXJyb3IiOwotCi0gIHN0cm5jcHkob3V0YnVmLCB0eHQsIG91dG1heCk7Ci0KICNlbmRpZgogCi0gIG91dGJ1ZltvdXRtYXhdID0gJ1wwJzsKLQogICBpZihlcnJubyAhPSBvbGRfZXJybm8pCiAgICAgZXJybm8gPSBvbGRfZXJybm87CiAKQEAgLTEwOTcsNiArODUzLDE1NyBAQAogICAgIFNldExhc3RFcnJvcihvbGRfd2luX2Vycik7CiAjZW5kaWYKIAotICByZXR1cm4gb3V0YnVmOworICByZXR1cm4gYnVmOworfQorI2VuZGlmIC8qIFdJTjMyIHx8IF9XSU4zMl9XQ0UgKi8KKworI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKKy8qCisgKiBDdXJsX3NzcGlfc3RyZXJyb3I6CisgKiBWYXJpYW50IG9mIEN1cmxfc3RyZXJyb3IgaWYgdGhlIGVycm9yIGNvZGUgaXMgZGVmaW5pdGVseSBXaW5kb3dzIFNTUEkuCisgKi8KK2NvbnN0IGNoYXIgKkN1cmxfc3NwaV9zdHJlcnJvcihpbnQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisjaWZkZWYgUFJFU0VSVkVfV0lORE9XU19FUlJPUl9DT0RFCisgIERXT1JEIG9sZF93aW5fZXJyID0gR2V0TGFzdEVycm9yKCk7CisjZW5kaWYKKyAgaW50IG9sZF9lcnJubyA9IGVycm5vOworICBjb25zdCBjaGFyICp0eHQ7CisKKyAgaWYoIWJ1ZmxlbikKKyAgICByZXR1cm4gTlVMTDsKKworICAqYnVmID0gJ1wwJzsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCisKKyAgc3dpdGNoKGVycikgeworICAgIGNhc2UgU0VDX0VfT0s6CisgICAgICB0eHQgPSAiTm8gZXJyb3IiOworICAgICAgYnJlYWs7CisjZGVmaW5lIFNFQzJUWFQoc2VjKSBjYXNlIHNlYzogdHh0ID0gI3NlYzsgYnJlYWsKKyAgICBTRUMyVFhUKENSWVBUX0VfUkVWT0tFRCk7CisgICAgU0VDMlRYVChTRUNfRV9BTEdPUklUSE1fTUlTTUFUQ0gpOworICAgIFNFQzJUWFQoU0VDX0VfQkFEX0JJTkRJTkdTKTsKKyAgICBTRUMyVFhUKFNFQ19FX0JBRF9QS0dJRCk7CisgICAgU0VDMlRYVChTRUNfRV9CVUZGRVJfVE9PX1NNQUxMKTsKKyAgICBTRUMyVFhUKFNFQ19FX0NBTk5PVF9JTlNUQUxMKTsKKyAgICBTRUMyVFhUKFNFQ19FX0NBTk5PVF9QQUNLKTsKKyAgICBTRUMyVFhUKFNFQ19FX0NFUlRfRVhQSVJFRCk7CisgICAgU0VDMlRYVChTRUNfRV9DRVJUX1VOS05PV04pOworICAgIFNFQzJUWFQoU0VDX0VfQ0VSVF9XUk9OR19VU0FHRSk7CisgICAgU0VDMlRYVChTRUNfRV9DT05URVhUX0VYUElSRUQpOworICAgIFNFQzJUWFQoU0VDX0VfQ1JPU1NSRUFMTV9ERUxFR0FUSU9OX0ZBSUxVUkUpOworICAgIFNFQzJUWFQoU0VDX0VfQ1JZUFRPX1NZU1RFTV9JTlZBTElEKTsKKyAgICBTRUMyVFhUKFNFQ19FX0RFQ1JZUFRfRkFJTFVSRSk7CisgICAgU0VDMlRYVChTRUNfRV9ERUxFR0FUSU9OX1BPTElDWSk7CisgICAgU0VDMlRYVChTRUNfRV9ERUxFR0FUSU9OX1JFUVVJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19FX0RPV05HUkFERV9ERVRFQ1RFRCk7CisgICAgU0VDMlRYVChTRUNfRV9FTkNSWVBUX0ZBSUxVUkUpOworICAgIFNFQzJUWFQoU0VDX0VfSUxMRUdBTF9NRVNTQUdFKTsKKyAgICBTRUMyVFhUKFNFQ19FX0lOQ09NUExFVEVfQ1JFREVOVElBTFMpOworICAgIFNFQzJUWFQoU0VDX0VfSU5DT01QTEVURV9NRVNTQUdFKTsKKyAgICBTRUMyVFhUKFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkpOworICAgIFNFQzJUWFQoU0VDX0VfSU5URVJOQUxfRVJST1IpOworICAgIFNFQzJUWFQoU0VDX0VfSU5WQUxJRF9IQU5ETEUpOworICAgIFNFQzJUWFQoU0VDX0VfSU5WQUxJRF9QQVJBTUVURVIpOworICAgIFNFQzJUWFQoU0VDX0VfSU5WQUxJRF9UT0tFTik7CisgICAgU0VDMlRYVChTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRCk7CisgICAgU0VDMlRYVChTRUNfRV9JU1NVSU5HX0NBX1VOVFJVU1RFRF9LREMpOworICAgIFNFQzJUWFQoU0VDX0VfS0RDX0NFUlRfRVhQSVJFRCk7CisgICAgU0VDMlRYVChTRUNfRV9LRENfQ0VSVF9SRVZPS0VEKTsKKyAgICBTRUMyVFhUKFNFQ19FX0tEQ19JTlZBTElEX1JFUVVFU1QpOworICAgIFNFQzJUWFQoU0VDX0VfS0RDX1VOQUJMRV9UT19SRUZFUik7CisgICAgU0VDMlRYVChTRUNfRV9LRENfVU5LTk9XTl9FVFlQRSk7CisgICAgU0VDMlRYVChTRUNfRV9MT0dPTl9ERU5JRUQpOworICAgIFNFQzJUWFQoU0VDX0VfTUFYX1JFRkVSUkFMU19FWENFRURFRCk7CisgICAgU0VDMlRYVChTRUNfRV9NRVNTQUdFX0FMVEVSRUQpOworICAgIFNFQzJUWFQoU0VDX0VfTVVMVElQTEVfQUNDT1VOVFMpOworICAgIFNFQzJUWFQoU0VDX0VfTVVTVF9CRV9LREMpOworICAgIFNFQzJUWFQoU0VDX0VfTk9UX09XTkVSKTsKKyAgICBTRUMyVFhUKFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWSk7CisgICAgU0VDMlRYVChTRUNfRV9OT19DUkVERU5USUFMUyk7CisgICAgU0VDMlRYVChTRUNfRV9OT19JTVBFUlNPTkFUSU9OKTsKKyAgICBTRUMyVFhUKFNFQ19FX05PX0lQX0FERFJFU1NFUyk7CisgICAgU0VDMlRYVChTRUNfRV9OT19LRVJCX0tFWSk7CisgICAgU0VDMlRYVChTRUNfRV9OT19QQV9EQVRBKTsKKyAgICBTRUMyVFhUKFNFQ19FX05PX1M0VV9QUk9UX1NVUFBPUlQpOworICAgIFNFQzJUWFQoU0VDX0VfTk9fVEdUX1JFUExZKTsKKyAgICBTRUMyVFhUKFNFQ19FX09VVF9PRl9TRVFVRU5DRSk7CisgICAgU0VDMlRYVChTRUNfRV9QS0lOSVRfQ0xJRU5UX0ZBSUxVUkUpOworICAgIFNFQzJUWFQoU0VDX0VfUEtJTklUX05BTUVfTUlTTUFUQ0gpOworICAgIFNFQzJUWFQoU0VDX0VfUE9MSUNZX05MVE1fT05MWSk7CisgICAgU0VDMlRYVChTRUNfRV9RT1BfTk9UX1NVUFBPUlRFRCk7CisgICAgU0VDMlRYVChTRUNfRV9SRVZPQ0FUSU9OX09GRkxJTkVfQyk7CisgICAgU0VDMlRYVChTRUNfRV9SRVZPQ0FUSU9OX09GRkxJTkVfS0RDKTsKKyAgICBTRUMyVFhUKFNFQ19FX1NFQ1BLR19OT1RfRk9VTkQpOworICAgIFNFQzJUWFQoU0VDX0VfU0VDVVJJVFlfUU9TX0ZBSUxFRCk7CisgICAgU0VDMlRYVChTRUNfRV9TSFVURE9XTl9JTl9QUk9HUkVTUyk7CisgICAgU0VDMlRYVChTRUNfRV9TTUFSVENBUkRfQ0VSVF9FWFBJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19FX1NNQVJUQ0FSRF9DRVJUX1JFVk9LRUQpOworICAgIFNFQzJUWFQoU0VDX0VfU01BUlRDQVJEX0xPR09OX1JFUVVJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19FX1NUUk9OR19DUllQVE9fTk9UX1NVUFBPUlRFRCk7CisgICAgU0VDMlRYVChTRUNfRV9UQVJHRVRfVU5LTk9XTik7CisgICAgU0VDMlRYVChTRUNfRV9USU1FX1NLRVcpOworICAgIFNFQzJUWFQoU0VDX0VfVE9PX01BTllfUFJJTkNJUEFMUyk7CisgICAgU0VDMlRYVChTRUNfRV9VTkZJTklTSEVEX0NPTlRFWFRfREVMRVRFRCk7CisgICAgU0VDMlRYVChTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTKTsKKyAgICBTRUMyVFhUKFNFQ19FX1VOU1VQUE9SVEVEX0ZVTkNUSU9OKTsKKyAgICBTRUMyVFhUKFNFQ19FX1VOU1VQUE9SVEVEX1BSRUFVVEgpOworICAgIFNFQzJUWFQoU0VDX0VfVU5UUlVTVEVEX1JPT1QpOworICAgIFNFQzJUWFQoU0VDX0VfV1JPTkdfQ1JFREVOVElBTF9IQU5ETEUpOworICAgIFNFQzJUWFQoU0VDX0VfV1JPTkdfUFJJTkNJUEFMKTsKKyAgICBTRUMyVFhUKFNFQ19JX0NPTVBMRVRFX0FORF9DT05USU5VRSk7CisgICAgU0VDMlRYVChTRUNfSV9DT01QTEVURV9ORUVERUQpOworICAgIFNFQzJUWFQoU0VDX0lfQ09OVEVYVF9FWFBJUkVEKTsKKyAgICBTRUMyVFhUKFNFQ19JX0NPTlRJTlVFX05FRURFRCk7CisgICAgU0VDMlRYVChTRUNfSV9JTkNPTVBMRVRFX0NSRURFTlRJQUxTKTsKKyAgICBTRUMyVFhUKFNFQ19JX0xPQ0FMX0xPR09OKTsKKyAgICBTRUMyVFhUKFNFQ19JX05PX0xTQV9DT05URVhUKTsKKyAgICBTRUMyVFhUKFNFQ19JX1JFTkVHT1RJQVRFKTsKKyAgICBTRUMyVFhUKFNFQ19JX1NJR05BVFVSRV9ORUVERUQpOworICAgIGRlZmF1bHQ6CisgICAgICB0eHQgPSAiVW5rbm93biBlcnJvciI7CisgIH0KKworICBpZihlcnIgPT0gU0VDX0VfSUxMRUdBTF9NRVNTQUdFKSB7CisgICAgbXNucHJpbnRmKGJ1ZiwgYnVmbGVuLAorICAgICAgICAgICAgICAiU0VDX0VfSUxMRUdBTF9NRVNTQUdFICgweCUwOFgpIC0gVGhpcyBlcnJvciB1c3VhbGx5IG9jY3VycyAiCisgICAgICAgICAgICAgICJ3aGVuIGEgZmF0YWwgU1NML1RMUyBhbGVydCBpcyByZWNlaXZlZCAoZS5nLiBoYW5kc2hha2UgZmFpbGVkKS4iCisgICAgICAgICAgICAgICIgTW9yZSBkZXRhaWwgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgV2luZG93cyBTeXN0ZW0gZXZlbnQgbG9nLiIsCisgICAgICAgICAgICAgIGVycik7CisgIH0KKyAgZWxzZSB7CisgICAgY2hhciB0eHRidWZbODBdOworICAgIGNoYXIgbXNnYnVmWzI1Nl07CisKKyAgICBtc25wcmludGYodHh0YnVmLCBzaXplb2YodHh0YnVmKSwgIiVzICgweCUwOFgpIiwgdHh0LCBlcnIpOworCisgICAgaWYoZ2V0X3dpbmFwaV9lcnJvcihlcnIsIG1zZ2J1Ziwgc2l6ZW9mKG1zZ2J1ZikpKQorICAgICAgbXNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMgLSAlcyIsIHR4dGJ1ZiwgbXNnYnVmKTsKKyAgICBlbHNlIHsKKyAgICAgIHN0cm5jcHkoYnVmLCB0eHRidWYsIGJ1Zmxlbik7CisgICAgICBidWZbYnVmbGVuIC0gMV0gPSAnXDAnOworICAgIH0KKyAgfQorCisjZWxzZQorICBpZihlcnIgPT0gU0VDX0VfT0spCisgICAgdHh0ID0gIk5vIGVycm9yIjsKKyAgZWxzZQorICAgIHR4dCA9ICJFcnJvciI7CisgIHN0cm5jcHkoYnVmLCB0eHQsIGJ1Zmxlbik7CisgIGJ1ZltidWZsZW4gLSAxXSA9ICdcMCc7CisjZW5kaWYKKworICBpZihlcnJubyAhPSBvbGRfZXJybm8pCisgICAgZXJybm8gPSBvbGRfZXJybm87CisKKyNpZmRlZiBQUkVTRVJWRV9XSU5ET1dTX0VSUk9SX0NPREUKKyAgaWYob2xkX3dpbl9lcnIgIT0gR2V0TGFzdEVycm9yKCkpCisgICAgU2V0TGFzdEVycm9yKG9sZF93aW5fZXJyKTsKKyNlbmRpZgorCisgIHJldHVybiBidWY7CiB9CiAjZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cmVycm9yLmgKaW5kZXggNjgzYjViNC4uYmFlOGY4OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RyZXJyb3IuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJlcnJvci5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNCw5ICsyNCwxMiBAQAogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogCi0jZGVmaW5lIFNUUkVSUk9SX0xFTiAxMjggLyogYSBzdWl0YWJsZSBsZW5ndGggKi8KKyNkZWZpbmUgU1RSRVJST1JfTEVOIDI1NiAvKiBhIHN1aXRhYmxlIGxlbmd0aCAqLwogCiBjb25zdCBjaGFyICpDdXJsX3N0cmVycm9yKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorY29uc3QgY2hhciAqQ3VybF93aW5hcGlfc3RyZXJyb3IoRFdPUkQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworI2VuZGlmCiAjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQogY29uc3QgY2hhciAqQ3VybF9zc3BpX3N0cmVycm9yKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3N0cnRvay5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmMKaW5kZXggNDYwZWI4Ny4uYmE2ZTAyNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIGlmKCoqZW5kKSB7CiAgICAgICAvKiB0aGUgZW5kIGlzIG5vdCBhIG51bGwgYnl0ZSAqLwotICAgICAgKiplbmQgPSAnXDAnOyAgLyogemVybyB0ZXJtaW5hdGUgaXQhICovCisgICAgICAqKmVuZCA9ICdcMCc7ICAvKiBudWxsLXRlcm1pbmF0ZSBpdCEgKi8KICAgICAgICsrKmVuZDsgICAgICAgIC8qIGFkdmFuY2UgdGhlIGxhc3QgcG9pbnRlciB0byBiZXlvbmQgdGhlIG51bGwgYnl0ZSAqLwogICAgIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9rLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b2suaAppbmRleCA5MGI4MzFlLi5lMjIxZmE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b2suaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b2suaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3RydG9vZmZ0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b29mZnQuYwppbmRleCA1NDZhM2ZmLi45NmUzODIwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b29mZnQuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zdHJ0b29mZnQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuYwppbmRleCBmN2Y4MTdkLi5iOTU4N2I1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgLSAyMDE3LCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiAtIDIwMjAsIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNiw2ICszNiwxMiBAQAogTEFSR0VfSU5URUdFUiBDdXJsX2ZyZXE7CiBib29sIEN1cmxfaXNWaXN0YU9yR3JlYXRlcjsKIAorLyogSGFuZGxlIG9mIGlwaGxwYXBwLmRsbCAqLworc3RhdGljIEhNT0RVTEUgc19oSXBIbHBBcGlEbGwgPSBOVUxMOworCisvKiBQb2ludGVyIHRvIHRoZSBpZl9uYW1ldG9pbmRleCBmdW5jdGlvbiAqLworSUZfTkFNRVRPSU5ERVhfRk4gQ3VybF9pZl9uYW1ldG9pbmRleCA9IE5VTEw7CisKIC8qIEN1cmxfd2luMzJfaW5pdCgpIHBlcmZvcm1zIHdpbjMyIGdsb2JhbCBpbml0aWFsaXphdGlvbiAqLwogQ1VSTGNvZGUgQ3VybF93aW4zMl9pbml0KGxvbmcgZmxhZ3MpCiB7CkBAIC04OSwyMCArOTUsMzcgQEAKICAgfQogI2VuZGlmCiAKKyAgc19oSXBIbHBBcGlEbGwgPSBDdXJsX2xvYWRfbGlicmFyeShURVhUKCJpcGhscGFwaS5kbGwiKSk7CisgIGlmKHNfaElwSGxwQXBpRGxsKSB7CisgICAgLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBpZl9uYW1ldG9pbmRleCBmdW5jdGlvbiAqLworICAgIElGX05BTUVUT0lOREVYX0ZOIHBJZk5hbWVUb0luZGV4ID0KKyAgICAgIENVUkxYX0ZVTkNUSU9OX0NBU1QoSUZfTkFNRVRPSU5ERVhfRk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIChHZXRQcm9jQWRkcmVzcyhzX2hJcEhscEFwaURsbCwgImlmX25hbWV0b2luZGV4IikpKTsKKworICAgIGlmKHBJZk5hbWVUb0luZGV4KQorICAgICAgQ3VybF9pZl9uYW1ldG9pbmRleCA9IHBJZk5hbWVUb0luZGV4OworICB9CisKICAgaWYoQ3VybF92ZXJpZnlfd2luZG93c192ZXJzaW9uKDYsIDAsIFBMQVRGT1JNX1dJTk5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9HUkVBVEVSX1RIQU5fRVFVQUwpKSB7CiAgICAgQ3VybF9pc1Zpc3RhT3JHcmVhdGVyID0gVFJVRTsKLSAgICBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZDdXJsX2ZyZXEpOwogICB9CiAgIGVsc2UKICAgICBDdXJsX2lzVmlzdGFPckdyZWF0ZXIgPSBGQUxTRTsKIAorICBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZDdXJsX2ZyZXEpOwogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKIC8qIEN1cmxfd2luMzJfY2xlYW51cCgpIGlzIHRoZSBvcHBvc2l0ZSBvZiBDdXJsX3dpbjMyX2luaXQoKSAqLwogdm9pZCBDdXJsX3dpbjMyX2NsZWFudXAobG9uZyBpbml0X2ZsYWdzKQogeworICBpZihzX2hJcEhscEFwaURsbCkgeworICAgIEZyZWVMaWJyYXJ5KHNfaElwSGxwQXBpRGxsKTsKKyAgICBzX2hJcEhscEFwaURsbCA9IE5VTEw7CisgICAgQ3VybF9pZl9uYW1ldG9pbmRleCA9IE5VTEw7CisgIH0KKwogI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKICAgQ3VybF9zc3BpX2dsb2JhbF9jbGVhbnVwKCk7CiAjZW5kaWYKQEAgLTExNCwxMCArMTM3LDYgQEAKICAgfQogfQogCi0jaWYgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCAoIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1RFTE5FVCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoVVNFX1dJTlNPQ0spKQotCi0KICNpZiAhZGVmaW5lZChMT0FEX1dJVEhfQUxURVJFRF9TRUFSQ0hfUEFUSCkKICNkZWZpbmUgTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEggIDB4MDAwMDAwMDgKICNlbmRpZgpAQCAtMTQwLDggKzE1OSw2IEBACiAjICBkZWZpbmUgTE9BRExJQkFSWUVYICAgICJMb2FkTGlicmFyeUV4QSIKICNlbmRpZgogCi0jZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSB8fCAoIUNVUkxfRElTQUJMRV9URUxORVQgJiYgVVNFX1dJTlNPQ0spICovCi0KIC8qCiAgKiBDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oKQogICoKQEAgLTMzNCw5ICszNTEsNiBAQAogICByZXR1cm4gbWF0Y2hlZDsKIH0KIAotI2lmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkgfHwgKCFkZWZpbmVkKENVUkxfRElTQUJMRV9URUxORVQpICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKFVTRV9XSU5TT0NLKSkKLQogLyoKICAqIEN1cmxfbG9hZF9saWJyYXJ5KCkKICAqCkBAIC0zNTMsNiArMzY3LDcgQEAKICAqLwogSE1PRFVMRSBDdXJsX2xvYWRfbGlicmFyeShMUENUU1RSIGZpbGVuYW1lKQogeworI2lmbmRlZiBDVVJMX1dJTkRPV1NfQVBQCiAgIEhNT0RVTEUgaE1vZHVsZSA9IE5VTEw7CiAgIExPQURMSUJSQVJZRVhfRk4gcExvYWRMaWJyYXJ5RXggPSBOVUxMOwogCkBAIC00MDcsMTAgKzQyMiwxMiBAQAogICAgICAgZnJlZShwYXRoKTsKICAgICB9CiAgIH0KLQogICByZXR1cm4gaE1vZHVsZTsKKyNlbHNlCisgIC8qIHRoZSBVbml2ZXJzYWwgV2luZG93cyBQbGF0Zm9ybSAoVVdQKSBjYW4ndCBkbyB0aGlzICovCisgICh2b2lkKWZpbGVuYW1lOworICByZXR1cm4gTlVMTDsKKyNlbmRpZgogfQogCi0jZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSB8fCAoIUNVUkxfRElTQUJMRV9URUxORVQgJiYgVVNFX1dJTlNPQ0spICovCi0KICNlbmRpZiAvKiBXSU4zMiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvc3lzdGVtX3dpbjMyLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuaAppbmRleCA5MjYzMjhhLi5kMjg4MmZjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi9zeXN0ZW1fd2luMzIuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYsIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE2IC0gMjAxOSwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ4LDIwICs0OCwyMSBAQAogICBQTEFURk9STV9XSU5OVAogfSBQbGF0Zm9ybUlkZW50aWZpZXI7CiAKKy8qIFdlIHVzZSBvdXIgb3duIHR5cGVkZWYgaGVyZSBzaW5jZSBzb21lIGhlYWRlcnMgbWlnaHQgbGFjayB0aGlzICovCit0eXBlZGVmIHVuc2lnbmVkIGludChXSU5BUEkgKklGX05BTUVUT0lOREVYX0ZOKShjb25zdCBjaGFyICopOworCisvKiBUaGlzIGlzIHVzZWQgaW5zdGVhZCBvZiBpZl9uYW1ldG9pbmRleCBpZiBhdmFpbGFibGUgb24gV2luZG93cyAqLworZXh0ZXJuIElGX05BTUVUT0lOREVYX0ZOIEN1cmxfaWZfbmFtZXRvaW5kZXg7CisKIC8qIFRoaXMgaXMgdXNlZCB0byB2ZXJpZnkgaWYgd2UgYXJlIHJ1bm5pbmcgb24gYSBzcGVjaWZpYyB3aW5kb3dzIHZlcnNpb24gKi8KIGJvb2wgQ3VybF92ZXJpZnlfd2luZG93c192ZXJzaW9uKGNvbnN0IHVuc2lnbmVkIGludCBtYWpvclZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWlub3JWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm1JZGVudGlmaWVyIHBsYXRmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVyc2lvbkNvbmRpdGlvbiBjb25kaXRpb24pOwogCi0jaWYgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCAoIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1RFTE5FVCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoVVNFX1dJTlNPQ0spKQotCiAvKiBUaGlzIGlzIHVzZWQgdG8gZHluYW1pY2FsbHkgbG9hZCBETExzICovCiBITU9EVUxFIEN1cmxfbG9hZF9saWJyYXJ5KExQQ1RTVFIgZmlsZW5hbWUpOwogCi0jZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSB8fCAoIUNVUkxfRElTQUJMRV9URUxORVQgJiYgVVNFX1dJTlNPQ0spICovCi0KICNlbmRpZiAvKiBXSU4zMiAqLwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfU1lTVEVNX1dJTjMyX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RlbG5ldC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGVsbmV0LmMKaW5kZXggOTU1MjU1Yy4uYzNiNThlNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGVsbmV0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGVsbmV0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTY5LDEyICs2OSwxMiBAQAogICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeC0+c3ViZW5kID0geC0+c3VicG9pbnRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBDVVJMX1NCX0NMRUFSKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IFdISUxFX0ZBTFNFCisgIH0gd2hpbGUoMCkKICNkZWZpbmUgQ1VSTF9TQl9BQ0NVTSh4LGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmKHgtPnN1YnBvaW50ZXIgPCAoeC0+c3ViYnVmZmVyICsgc2l6ZW9mKHgtPnN1YmJ1ZmZlcikpKSAgIFwKICAgICAgICp4LT5zdWJwb2ludGVyKysgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gV0hJTEVfRkFMU0UKKyAgfSB3aGlsZSgwKQogCiAjZGVmaW5lICBDVVJMX1NCX0dFVCh4KSAoKCp4LT5zdWJwb2ludGVyKyspJjB4ZmYpCiAjZGVmaW5lICBDVVJMX1NCX0xFTih4KSAoeC0+c3ViZW5kIC0geC0+c3VicG9pbnRlcikKQEAgLTEzMTUsNyArMTMxNSw3IEBACiAgIERXT1JEIHJlYWRmaWxlX3JlYWQ7CiAgIGludCBlcnI7CiAjZWxzZQotICBpbnQgaW50ZXJ2YWxfbXM7CisgIHRpbWVkaWZmX3QgaW50ZXJ2YWxfbXM7CiAgIHN0cnVjdCBwb2xsZmQgcGZkWzJdOwogICBpbnQgcG9sbF9jbnQ7CiAgIGN1cmxfb2ZmX3QgdG90YWxfZGwgPSAwOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGVsbmV0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZWxuZXQuaAppbmRleCA2NjhhNzhhLi40MzE0MjdmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZWxuZXQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZWxuZXQuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGZ0cC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGZ0cC5jCmluZGV4IDI4OWNkYTIuLjM3OGQ5NTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RmdHAuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZnRwLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTExNSwxMSArMTE1LDExIEBACiAgIFRGVFBfRVJSX05PUkVTUE9OU0UKIH0gdGZ0cF9lcnJvcl90OwogCi10eXBlZGVmIHN0cnVjdCB0ZnRwX3BhY2tldCB7CitzdHJ1Y3QgdGZ0cF9wYWNrZXQgewogICB1bnNpZ25lZCBjaGFyICpkYXRhOwotfSB0ZnRwX3BhY2tldF90OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhIHsKK3N0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgewogICB0ZnRwX3N0YXRlX3QgICAgc3RhdGU7CiAgIHRmdHBfbW9kZV90ICAgICBtb2RlOwogICB0ZnRwX2Vycm9yX3QgICAgZXJyb3I7CkBAIC0xNDAsMjUgKzE0MCwyNCBAQAogICBpbnQgICAgICAgICAgICAgc2J5dGVzOwogICBpbnQgICAgICAgICAgICAgYmxrc2l6ZTsKICAgaW50ICAgICAgICAgICAgIHJlcXVlc3RlZF9ibGtzaXplOwotICB0ZnRwX3BhY2tldF90ICAgcnBhY2tldDsKLSAgdGZ0cF9wYWNrZXRfdCAgIHNwYWNrZXQ7Ci19IHRmdHBfc3RhdGVfZGF0YV90OworICBzdHJ1Y3QgdGZ0cF9wYWNrZXQgcnBhY2tldDsKKyAgc3RydWN0IHRmdHBfcGFja2V0IHNwYWNrZXQ7Cit9OwogCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9yeCh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUsIHRmdHBfZXZlbnRfdCBldmVudCk7Ci1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF90eCh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUsIHRmdHBfZXZlbnRfdCBldmVudCk7CitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9yeChzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSwgdGZ0cF9ldmVudF90IGV2ZW50KTsKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX3R4KHN0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgKnN0YXRlLCB0ZnRwX2V2ZW50X3QgZXZlbnQpOwogc3RhdGljIENVUkxjb2RlIHRmdHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwogc3RhdGljIENVUkxjb2RlIHRmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKIHN0YXRpYyBDVVJMY29kZSB0ZnRwX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKLXN0YXRpYyBDVVJMY29kZSB0ZnRwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICogY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKIHN0YXRpYyBDVVJMY29kZSB0ZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKTsKLXN0YXRpYyBpbnQgdGZ0cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIGludCB0ZnRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF90cmFuc2xhdGVfY29kZSh0ZnRwX2Vycm9yX3QgZXJyb3IpOwogCiAKQEAgLTE5Nyw3ICsxOTYsNyBAQAogICoKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBDVVJMY29kZSB0ZnRwX3NldF90aW1lb3V0cyh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUpCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXRfdGltZW91dHMoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUpCiB7CiAgIHRpbWVfdCBtYXh0aW1lLCB0aW1lb3V0OwogICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CkBAIC0yODAsMjUgKzI3OSwyNSBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzZXRwYWNrZXRldmVudCh0ZnRwX3BhY2tldF90ICpwYWNrZXQsIHVuc2lnbmVkIHNob3J0IG51bSkKK3N0YXRpYyB2b2lkIHNldHBhY2tldGV2ZW50KHN0cnVjdCB0ZnRwX3BhY2tldCAqcGFja2V0LCB1bnNpZ25lZCBzaG9ydCBudW0pCiB7CiAgIHBhY2tldC0+ZGF0YVswXSA9ICh1bnNpZ25lZCBjaGFyKShudW0gPj4gOCk7CiAgIHBhY2tldC0+ZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKShudW0gJiAweGZmKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBzZXRwYWNrZXRibG9jayh0ZnRwX3BhY2tldF90ICpwYWNrZXQsIHVuc2lnbmVkIHNob3J0IG51bSkKK3N0YXRpYyB2b2lkIHNldHBhY2tldGJsb2NrKHN0cnVjdCB0ZnRwX3BhY2tldCAqcGFja2V0LCB1bnNpZ25lZCBzaG9ydCBudW0pCiB7CiAgIHBhY2tldC0+ZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKShudW0gPj4gOCk7CiAgIHBhY2tldC0+ZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKShudW0gJiAweGZmKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldHJwYWNrZXRldmVudChjb25zdCB0ZnRwX3BhY2tldF90ICpwYWNrZXQpCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0cnBhY2tldGV2ZW50KGNvbnN0IHN0cnVjdCB0ZnRwX3BhY2tldCAqcGFja2V0KQogewogICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSgocGFja2V0LT5kYXRhWzBdIDw8IDgpIHwgcGFja2V0LT5kYXRhWzFdKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldHJwYWNrZXRibG9jayhjb25zdCB0ZnRwX3BhY2tldF90ICpwYWNrZXQpCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0cnBhY2tldGJsb2NrKGNvbnN0IHN0cnVjdCB0ZnRwX3BhY2tldCAqcGFja2V0KQogewogICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSgocGFja2V0LT5kYXRhWzJdIDw8IDgpIHwgcGFja2V0LT5kYXRhWzNdKTsKIH0KQEAgLTMzMSw3ICszMzAsNyBAQAogICByZXR1cm4gJmJ1Zltsb2NdOwogfQogCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9wYXJzZV9vcHRpb25fYWNrKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX3BhcnNlX29wdGlvbl9hY2soc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwgaW50IGxlbikKIHsKICAgY29uc3QgY2hhciAqdG1wID0gcHRyOwpAQCAtNDA0LDE2ICs0MDMsMTcgQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCi1zdGF0aWMgc2l6ZV90IHRmdHBfb3B0aW9uX2FkZCh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUsIHNpemVfdCBjc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqb3B0aW9uKQorc3RhdGljIENVUkxjb2RlIHRmdHBfb3B0aW9uX2FkZChzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSwgc2l6ZV90ICpjc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBjb25zdCBjaGFyICpvcHRpb24pCiB7Ci0gIGlmKCggc3RybGVuKG9wdGlvbikgKyBjc2l6ZSArIDEpID4gKHNpemVfdClzdGF0ZS0+Ymxrc2l6ZSkKLSAgICByZXR1cm4gMDsKKyAgaWYoKCBzdHJsZW4ob3B0aW9uKSArICpjc2l6ZSArIDEpID4gKHNpemVfdClzdGF0ZS0+Ymxrc2l6ZSkKKyAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOwogICBzdHJjcHkoYnVmLCBvcHRpb24pOwotICByZXR1cm4gc3RybGVuKG9wdGlvbikgKyAxOworICAqY3NpemUgKz0gc3RybGVuKG9wdGlvbikgKyAxOworICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLXN0YXRpYyBDVVJMY29kZSB0ZnRwX2Nvbm5lY3RfZm9yX3R4KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX2Nvbm5lY3RfZm9yX3R4KHN0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgKnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0cF9ldmVudF90IGV2ZW50KQogewogICBDVVJMY29kZSByZXN1bHQ7CkBAIC00MjksNyArNDI5LDcgQEAKICAgcmV0dXJuIHRmdHBfdHgoc3RhdGUsIGV2ZW50KTsKIH0KIAotc3RhdGljIENVUkxjb2RlIHRmdHBfY29ubmVjdF9mb3JfcngodGZ0cF9zdGF0ZV9kYXRhX3QgKnN0YXRlLAorc3RhdGljIENVUkxjb2RlIHRmdHBfY29ubmVjdF9mb3Jfcngoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRwX2V2ZW50X3QgZXZlbnQpCiB7CiAgIENVUkxjb2RlIHJlc3VsdDsKQEAgLTQ0NSw3ICs0NDUsOCBAQAogICByZXR1cm4gdGZ0cF9yeChzdGF0ZSwgZXZlbnQpOwogfQogCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZW5kX2ZpcnN0KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgdGZ0cF9ldmVudF90IGV2ZW50KQorc3RhdGljIENVUkxjb2RlIHRmdHBfc2VuZF9maXJzdChzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0cF9ldmVudF90IGV2ZW50KQogewogICBzaXplX3Qgc2J5dGVzOwogICBzc2l6ZV90IHNlbmRkYXRhOwpAQCAtNDg2LDcgKzQ4Nyw3IEBACiAgICAgICAgZmlsZSBuYW1lIHNvIHdlIHNraXAgdGhlIGFsd2F5cy1wcmVzZW50IGZpcnN0IGxldHRlciBvZiB0aGUgcGF0aAogICAgICAgIHN0cmluZy4gKi8KICAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCAmc3RhdGUtPmNvbm4tPmRhdGEtPnN0YXRlLnVwLnBhdGhbMV0sIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCBOVUxMLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCBOVUxMLCBSRUpFQ1RfWkVSTyk7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtNTExLDI2ICs1MTIsMzggQEAKICAgICAgIGVsc2UKICAgICAgICAgc3RyY3B5KGJ1ZiwgIjAiKTsgLyogdGhlIGRlc3RpbmF0aW9uIGlzIGxhcmdlIGVub3VnaCAqLwogCi0gICAgICBzYnl0ZXMgKz0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCBzYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZUUF9PUFRJT05fVFNJWkUpOwotICAgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsIGJ1Zik7CisgICAgICByZXN1bHQgPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsICZzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX1RTSVpFKTsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgcmVzdWx0ID0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCAmc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLCBidWYpOworCiAgICAgICAvKiBhZGQgYmxrc2l6ZSBvcHRpb24gKi8KICAgICAgIG1zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBzdGF0ZS0+cmVxdWVzdGVkX2Jsa3NpemUpOwotICAgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX0JMS1NJWkUpOwotICAgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsIGJ1Zik7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT0spCisgICAgICAgIHJlc3VsdCA9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgJnNieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX0JMS1NJWkUpOworICAgICAgaWYocmVzdWx0ID09IENVUkxFX09LKQorICAgICAgICByZXN1bHQgPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsICZzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsIGJ1Zik7CiAKICAgICAgIC8qIGFkZCB0aW1lb3V0IG9wdGlvbiAqLwogICAgICAgbXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHN0YXRlLT5yZXRyeV90aW1lKTsKLSAgICAgIHNieXRlcyArPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsIHNieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURlRQX09QVElPTl9JTlRFUlZBTCk7Ci0gICAgICBzYnl0ZXMgKz0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCBzYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSArIHNieXRlcywgYnVmKTsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgcmVzdWx0ID0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCAmc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhICsgc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZUUF9PUFRJT05fSU5URVJWQUwpOworICAgICAgaWYocmVzdWx0ID09IENVUkxFX09LKQorICAgICAgICByZXN1bHQgPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsICZzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGEgKyBzYnl0ZXMsIGJ1Zik7CisKKyAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykgeworICAgICAgICBmYWlsZihkYXRhLCAiVEZUUCBidWZmZXIgdG9vIHNtYWxsIGZvciBvcHRpb25zIik7CisgICAgICAgIGZyZWUoZmlsZW5hbWUpOworICAgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOworICAgICAgfQogICAgIH0KIAogICAgIC8qIHRoZSB0eXBlY2FzZSBmb3IgdGhlIDNyZCBhcmd1bWVudCBpcyBtb3N0bHkgZm9yIHN5c3RlbXMgdGhhdCBkbwpAQCAtNTg2LDcgKzU5OSw4IEBACiAgKiBFdmVudCBoYW5kbGVyIGZvciB0aGUgUlggc3RhdGUKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBDVVJMY29kZSB0ZnRwX3J4KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgdGZ0cF9ldmVudF90IGV2ZW50KQorc3RhdGljIENVUkxjb2RlIHRmdHBfcngoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZnRwX2V2ZW50X3QgZXZlbnQpCiB7CiAgIHNzaXplX3Qgc2J5dGVzOwogICBpbnQgcmJsb2NrOwpAQCAtNzA4LDcgKzcyMiw3IEBACiAgKiBFdmVudCBoYW5kbGVyIGZvciB0aGUgVFggc3RhdGUKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBDVVJMY29kZSB0ZnRwX3R4KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgdGZ0cF9ldmVudF90IGV2ZW50KQorc3RhdGljIENVUkxjb2RlIHRmdHBfdHgoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsIHRmdHBfZXZlbnRfdCBldmVudCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IHN0YXRlLT5jb25uLT5kYXRhOwogICBzc2l6ZV90IHNieXRlczsKQEAgLTkwOCw3ICs5MjIsNyBAQAogICogVGhlIHRmdHAgc3RhdGUgbWFjaGluZSBldmVudCBkaXNwYXRjaGVyCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zdGF0ZV9tYWNoaW5lKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX3N0YXRlX21hY2hpbmUoc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdHBfZXZlbnRfdCBldmVudCkKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CkBAIC05NDksNyArOTYzLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIENVUkxjb2RlIHRmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQogewotICB0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUgPSBjb25uLT5wcm90by50ZnRwYzsKKyAgc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUgPSBjb25uLT5wcm90by50ZnRwYzsKICAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKIAogICAvKiBkb25lLCBmcmVlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBwa3QgYnVmZmVycyAqLwpAQCAtOTcxLDEyICs5ODUsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIENVUkxjb2RlIHRmdHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZTsKKyAgc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGU7CiAgIGludCBibGtzaXplOworICBpbnQgbmVlZF9ibGtzaXplOwogCiAgIGJsa3NpemUgPSBURlRQX0JMS1NJWkVfREVGQVVMVDsKIAotICBzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjID0gY2FsbG9jKDEsIHNpemVvZih0ZnRwX3N0YXRlX2RhdGFfdCkpOworICBzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhKSk7CiAgIGlmKCFzdGF0ZSkKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIApAQCAtOTg3LDE1ICsxMDAyLDIwIEBACiAgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOwogICB9CiAKKyAgbmVlZF9ibGtzaXplID0gYmxrc2l6ZTsKKyAgLyogZGVmYXVsdCBzaXplIGlzIHRoZSBmYWxsYmFjayB3aGVuIG5vIE9BQ0sgaXMgcmVjZWl2ZWQgKi8KKyAgaWYobmVlZF9ibGtzaXplIDwgVEZUUF9CTEtTSVpFX0RFRkFVTFQpCisgICAgbmVlZF9ibGtzaXplID0gVEZUUF9CTEtTSVpFX0RFRkFVTFQ7CisKICAgaWYoIXN0YXRlLT5ycGFja2V0LmRhdGEpIHsKLSAgICBzdGF0ZS0+cnBhY2tldC5kYXRhID0gY2FsbG9jKDEsIGJsa3NpemUgKyAyICsgMik7CisgICAgc3RhdGUtPnJwYWNrZXQuZGF0YSA9IGNhbGxvYygxLCBuZWVkX2Jsa3NpemUgKyAyICsgMik7CiAKICAgICBpZighc3RhdGUtPnJwYWNrZXQuZGF0YSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAKICAgaWYoIXN0YXRlLT5zcGFja2V0LmRhdGEpIHsKLSAgICBzdGF0ZS0+c3BhY2tldC5kYXRhID0gY2FsbG9jKDEsIGJsa3NpemUgKyAyICsgMik7CisgICAgc3RhdGUtPnNwYWNrZXQuZGF0YSA9IGNhbGxvYygxLCBuZWVkX2Jsa3NpemUgKyAyICsgMik7CiAKICAgICBpZighc3RhdGUtPnNwYWNrZXQuZGF0YSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtMTAwOSw3ICsxMDI5LDcgQEAKICAgc3RhdGUtPnNvY2tmZCA9IHN0YXRlLT5jb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKICAgc3RhdGUtPnN0YXRlID0gVEZUUF9TVEFURV9TVEFSVDsKICAgc3RhdGUtPmVycm9yID0gVEZUUF9FUlJfTk9ORTsKLSAgc3RhdGUtPmJsa3NpemUgPSBibGtzaXplOworICBzdGF0ZS0+Ymxrc2l6ZSA9IFRGVFBfQkxLU0laRV9ERUZBVUxUOyAvKiBVbmxlc3MgdXBkYXRlZCBieSBPQUNLIHJlc3BvbnNlICovCiAgIHN0YXRlLT5yZXF1ZXN0ZWRfYmxrc2l6ZSA9IGJsa3NpemU7CiAKICAgKChzdHJ1Y3Qgc29ja2FkZHIgKikmc3RhdGUtPmxvY2FsX2FkZHIpLT5zYV9mYW1pbHkgPQpAQCAtMTA2MCw3ICsxMDgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCiB7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICB0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUgPSAodGZ0cF9zdGF0ZV9kYXRhX3QgKiljb25uLT5wcm90by50ZnRwYzsKKyAgc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGUgPSBjb25uLT5wcm90by50ZnRwYzsKIAogICAodm9pZClzdGF0dXM7IC8qIHVudXNlZCAqLwogICAodm9pZClwcmVtYXR1cmU7IC8qIG5vdCB1c2VkICovCkBAIC0xMDgyLDE0ICsxMTAyLDkgQEAKICAqIFRoZSBnZXRzb2NrIGNhbGxiYWNrCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHRmdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQorc3RhdGljIGludCB0ZnRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKIHsKLSAgaWYoIW51bXNvY2tzKQotICAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwotCiAgIHNvY2tzWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07Ci0KICAgcmV0dXJuIEdFVFNPQ0tfUkVBRFNPQ0soMCk7CiB9CiAKQEAgLTExMDYsNyArMTEyMSw3IEBACiAgIGN1cmxfc29ja2xlbl90ICAgICAgICBmcm9tbGVuOwogICBDVVJMY29kZSAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgdGZ0cF9zdGF0ZV9kYXRhX3QgICAgICpzdGF0ZSA9ICh0ZnRwX3N0YXRlX2RhdGFfdCAqKWNvbm4tPnByb3RvLnRmdHBjOworICBzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjOwogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAgKmsgPSAmZGF0YS0+cmVxOwogCiAgIC8qIFJlY2VpdmUgdGhlIHBhY2tldCAqLwpAQCAtMTE5Myw4ICsxMjA4LDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGxvbmcgdGZ0cF9zdGF0ZV90aW1lb3V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgdGZ0cF9ldmVudF90ICpldmVudCkKIHsKLSAgdGltZV90ICAgICAgICAgICAgICAgIGN1cnJlbnQ7Ci0gIHRmdHBfc3RhdGVfZGF0YV90ICAgICAqc3RhdGUgPSAodGZ0cF9zdGF0ZV9kYXRhX3QgKiljb25uLT5wcm90by50ZnRwYzsKKyAgdGltZV90IGN1cnJlbnQ7CisgIHN0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgKnN0YXRlID0gY29ubi0+cHJvdG8udGZ0cGM7CiAKICAgaWYoZXZlbnQpCiAgICAgKmV2ZW50ID0gVEZUUF9FVkVOVF9OT05FOwpAQCAtMTIzMSw3ICsxMjQ2LDcgQEAKICAgdGZ0cF9ldmVudF90ICAgICAgICAgIGV2ZW50OwogICBDVVJMY29kZSAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgdGZ0cF9zdGF0ZV9kYXRhX3QgICAgICpzdGF0ZSA9ICh0ZnRwX3N0YXRlX2RhdGFfdCAqKWNvbm4tPnByb3RvLnRmdHBjOworICBzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICpzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjOwogICBsb25nICAgICAgICAgICAgICAgICAgdGltZW91dF9tcyA9IHRmdHBfc3RhdGVfdGltZW91dChjb25uLCAmZXZlbnQpOwogCiAgICpkb25lID0gRkFMU0U7CkBAIC0xMzE1LDcgKzEzMzAsNyBAQAogc3RhdGljIENVUkxjb2RlIHRmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSkKIHsKICAgQ1VSTGNvZGUgICAgICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09LOwotICB0ZnRwX3N0YXRlX2RhdGFfdCAgICAgKnN0YXRlID0gKHRmdHBfc3RhdGVfZGF0YV90ICopY29ubi0+cHJvdG8udGZ0cGM7CisgIHN0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgKnN0YXRlID0gY29ubi0+cHJvdG8udGZ0cGM7CiAKICAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOwogCkBAIC0xMzQ1LDcgKzEzNjAsNyBAQAogCiBzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCiB7Ci0gIHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZTsKKyAgc3RydWN0IHRmdHBfc3RhdGVfZGF0YSAqc3RhdGU7CiAgIENVUkxjb2RlIHJlc3VsdDsKIAogICAqZG9uZSA9IEZBTFNFOwpAQCAtMTM1Niw3ICsxMzcxLDcgQEAKICAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICBzdGF0ZSA9ICh0ZnRwX3N0YXRlX2RhdGFfdCAqKWNvbm4tPnByb3RvLnRmdHBjOworICBzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjOwogICBpZighc3RhdGUpCiAgICAgcmV0dXJuIENVUkxFX1RGVFBfSUxMRUdBTDsKIApAQCAtMTM3MSwxMiArMTM4NiwxMiBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4pCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGNoYXIgKnR5cGU7CiAKLSAgY29ubi0+c29ja3R5cGUgPSBTT0NLX0RHUkFNOyAgIC8qIFVEUCBkYXRhZ3JhbSBiYXNlZCAqLworICBjb25uLT50cmFuc3BvcnQgPSBUUk5TUFJUX1VEUDsKIAogICAvKiBURlRQIFVSTHMgc3VwcG9ydCBhbiBleHRlbnNpb24gbGlrZSAiO21vZGU9PHR5cGVjb2RlPiIgdGhhdAogICAgKiB3ZSdsbCB0cnkgdG8gZ2V0IG5vdyEgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RmdHAuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RmdHAuaAppbmRleCAxMzM1ZjY0Li4zMzM0ODMwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90ZnRwLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGZ0cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90aW1ldmFsLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90aW1ldmFsLmMKaW5kZXggZTJiZDdmZC4uZTc2MTk2NiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGltZXZhbC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RpbWV2YWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjgsNiArMjgsNyBAQAogZXh0ZXJuIExBUkdFX0lOVEVHRVIgQ3VybF9mcmVxOwogZXh0ZXJuIGJvb2wgQ3VybF9pc1Zpc3RhT3JHcmVhdGVyOwogCisvKiBJbiBjYXNlIG9mIGJ1ZyBmaXggdGhpcyBmdW5jdGlvbiBoYXMgYSBjb3VudGVycGFydCBpbiB0b29sX3V0aWwuYyAqLwogc3RydWN0IGN1cmx0aW1lIEN1cmxfbm93KHZvaWQpCiB7CiAgIHN0cnVjdCBjdXJsdGltZSBub3c7CkBAIC0xNzQsMTQgKzE3NSw2IEBACiAKICNlbmRpZgogCi0jaWYgU0laRU9GX1RJTUVfVCA8IDgKLSNkZWZpbmUgVElNRV9NQVggSU5UX01BWAotI2RlZmluZSBUSU1FX01JTiBJTlRfTUlOCi0jZWxzZQotI2RlZmluZSBUSU1FX01BWCA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKLSNkZWZpbmUgVElNRV9NSU4gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTAotI2VuZGlmCi0KIC8qCiAgKiBSZXR1cm5zOiB0aW1lIGRpZmZlcmVuY2UgaW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gRm9yIHRvbyBsYXJnZSBkaWZmcyBpdAogICogcmV0dXJucyBtYXggdmFsdWUuCkBAIC0xOTEsMTAgKzE4NCwxMCBAQAogdGltZWRpZmZfdCBDdXJsX3RpbWVkaWZmKHN0cnVjdCBjdXJsdGltZSBuZXdlciwgc3RydWN0IGN1cmx0aW1lIG9sZGVyKQogewogICB0aW1lZGlmZl90IGRpZmYgPSAodGltZWRpZmZfdCluZXdlci50dl9zZWMtb2xkZXIudHZfc2VjOwotICBpZihkaWZmID49IChUSU1FX01BWC8xMDAwKSkKLSAgICByZXR1cm4gVElNRV9NQVg7Ci0gIGVsc2UgaWYoZGlmZiA8PSAoVElNRV9NSU4vMTAwMCkpCi0gICAgcmV0dXJuIFRJTUVfTUlOOworICBpZihkaWZmID49IChUSU1FRElGRl9UX01BWC8xMDAwKSkKKyAgICByZXR1cm4gVElNRURJRkZfVF9NQVg7CisgIGVsc2UgaWYoZGlmZiA8PSAoVElNRURJRkZfVF9NSU4vMTAwMCkpCisgICAgcmV0dXJuIFRJTUVESUZGX1RfTUlOOwogICByZXR1cm4gZGlmZiAqIDEwMDAgKyAobmV3ZXIudHZfdXNlYy1vbGRlci50dl91c2VjKS8xMDAwOwogfQogCkBAIC0yMDUsOSArMTk4LDkgQEAKIHRpbWVkaWZmX3QgQ3VybF90aW1lZGlmZl91cyhzdHJ1Y3QgY3VybHRpbWUgbmV3ZXIsIHN0cnVjdCBjdXJsdGltZSBvbGRlcikKIHsKICAgdGltZWRpZmZfdCBkaWZmID0gKHRpbWVkaWZmX3QpbmV3ZXIudHZfc2VjLW9sZGVyLnR2X3NlYzsKLSAgaWYoZGlmZiA+PSAoVElNRV9NQVgvMTAwMDAwMCkpCi0gICAgcmV0dXJuIFRJTUVfTUFYOwotICBlbHNlIGlmKGRpZmYgPD0gKFRJTUVfTUlOLzEwMDAwMDApKQotICAgIHJldHVybiBUSU1FX01JTjsKKyAgaWYoZGlmZiA+PSAoVElNRURJRkZfVF9NQVgvMTAwMDAwMCkpCisgICAgcmV0dXJuIFRJTUVESUZGX1RfTUFYOworICBlbHNlIGlmKGRpZmYgPD0gKFRJTUVESUZGX1RfTUlOLzEwMDAwMDApKQorICAgIHJldHVybiBUSU1FRElGRl9UX01JTjsKICAgcmV0dXJuIGRpZmYgKiAxMDAwMDAwICsgbmV3ZXIudHZfdXNlYy1vbGRlci50dl91c2VjOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdGltZXZhbC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdGltZXZhbC5oCmluZGV4IDk2ODY3ZDcuLjUzZTA2MzYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3RpbWV2YWwuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi90aW1ldmFsLmgKQEAgLTI0LDEzICsyNCwxMyBAQAogCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCi0jaWYgU0laRU9GX1RJTUVfVCA8IDgKLXR5cGVkZWYgaW50IHRpbWVkaWZmX3Q7Ci0jZGVmaW5lIENVUkxfRk9STUFUX1RJTUVESUZGX1QgImQiCi0jZWxzZQorLyogVXNlIGEgbGFyZ2VyIHR5cGUgZXZlbiBmb3IgMzIgYml0IHRpbWVfdCBzeXN0ZW1zIHNvIHRoYXQgd2UgY2FuIGtlZXAKKyAgIG1pY3Jvc2Vjb25kIGFjY3VyYWN5IGluIGl0ICovCiB0eXBlZGVmIGN1cmxfb2ZmX3QgdGltZWRpZmZfdDsKICNkZWZpbmUgQ1VSTF9GT1JNQVRfVElNRURJRkZfVCBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCi0jZW5kaWYKKworI2RlZmluZSBUSU1FRElGRl9UX01BWCBDVVJMX09GRl9UX01BWAorI2RlZmluZSBUSU1FRElGRl9UX01JTiBDVVJMX09GRl9UX01JTgogCiBzdHJ1Y3QgY3VybHRpbWUgewogICB0aW1lX3QgdHZfc2VjOyAvKiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdHJhbnNmZXIuYwppbmRleCA1MTQzMzBlLi4xMzNhNDc4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RyYW5zZmVyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ4LDYgKzQ4LDggQEAKIAogI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1VOSVNURF9IKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKICNpZm5kZWYgSEFWRV9TT0NLRVQKQEAgLTEyNiwxMiArMTI4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyYXcpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSAoc3RydWN0IEN1cmxfZWFzeSAqKXJhdzsKLSAgQ3VybF9zZW5kX2J1ZmZlciAqdHJhaWxlcnNfYnVmID0gZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmOwotICBzaXplX3QgYnl0ZXNfbGVmdCA9IHRyYWlsZXJzX2J1Zi0+c2l6ZV91c2VkLWRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQ7CisgIHN0cnVjdCBkeW5idWYgKnRyYWlsZXJzX2J1ZiA9ICZkYXRhLT5zdGF0ZS50cmFpbGVyc19idWY7CisgIHNpemVfdCBieXRlc19sZWZ0ID0gQ3VybF9keW5fbGVuKHRyYWlsZXJzX2J1ZikgLQorICAgIGRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQ7CiAgIHNpemVfdCB0b19jb3B5ID0gKHNpemUqbml0ZW1zIDwgYnl0ZXNfbGVmdCkgPyBzaXplKm5pdGVtcyA6IGJ5dGVzX2xlZnQ7CiAgIGlmKHRvX2NvcHkpIHsKICAgICBtZW1jcHkoYnVmZmVyLAotICAgICAgICAgICAmdHJhaWxlcnNfYnVmLT5idWZmZXJbZGF0YS0+c3RhdGUudHJhaWxlcnNfYnl0ZXNfc2VudF0sCisgICAgICAgICAgIEN1cmxfZHluX3B0cih0cmFpbGVyc19idWYpICsgZGF0YS0+c3RhdGUudHJhaWxlcnNfYnl0ZXNfc2VudCwKICAgICAgICAgICAgdG9fY29weSk7CiAgICAgZGF0YS0+c3RhdGUudHJhaWxlcnNfYnl0ZXNfc2VudCArPSB0b19jb3B5OwogICB9CkBAIC0xNDEsOCArMTQ0LDggQEAKIHN0YXRpYyBzaXplX3QgQ3VybF90cmFpbGVyc19sZWZ0KHZvaWQgKnJhdykKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IChzdHJ1Y3QgQ3VybF9lYXN5ICopcmF3OwotICBDdXJsX3NlbmRfYnVmZmVyICp0cmFpbGVyc19idWYgPSBkYXRhLT5zdGF0ZS50cmFpbGVyc19idWY7Ci0gIHJldHVybiB0cmFpbGVyc19idWYtPnNpemVfdXNlZCAtIGRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQ7CisgIHN0cnVjdCBkeW5idWYgKnRyYWlsZXJzX2J1ZiA9ICZkYXRhLT5zdGF0ZS50cmFpbGVyc19idWY7CisgIHJldHVybiBDdXJsX2R5bl9sZW4odHJhaWxlcnNfYnVmKSAtIGRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQ7CiB9CiAjZW5kaWYKIApAQCAtMTc2LDcgKzE3OSw3IEBACiAjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCiAgIGlmKGRhdGEtPnN0YXRlLnRyYWlsZXJzX3N0YXRlID09IFRSQUlMRVJTX0lOSVRJQUxJWkVEKSB7CiAgICAgc3RydWN0IGN1cmxfc2xpc3QgKnRyYWlsZXJzID0gTlVMTDsKLSAgICBDVVJMY29kZSBjOworICAgIENVUkxjb2RlIHJlc3VsdDsKICAgICBpbnQgdHJhaWxlcnNfcmV0X2NvZGU7CiAKICAgICAvKiBhdCB0aGlzIHBvaW50IHdlIGFscmVhZHkgdmVyaWZpZWQgdGhhdCB0aGUgY2FsbGJhY2sgZXhpc3RzCkBAIC0xODQsMjggKzE4NywyNiBAQAogICAgIGluZm9mKGRhdGEsCiAgICAgICAgICAgIk1vdmluZyB0cmFpbGVycyBzdGF0ZSBtYWNoaW5lIGZyb20gaW5pdGlhbGl6ZWQgdG8gc2VuZGluZy5cbiIpOwogICAgIGRhdGEtPnN0YXRlLnRyYWlsZXJzX3N0YXRlID0gVFJBSUxFUlNfU0VORElORzsKLSAgICBkYXRhLT5zdGF0ZS50cmFpbGVyc19idWYgPSBDdXJsX2FkZF9idWZmZXJfaW5pdCgpOwotICAgIGlmKCFkYXRhLT5zdGF0ZS50cmFpbGVyc19idWYpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gYWxsb2NhdGUgdHJhaWxpbmcgaGVhZGVycyBidWZmZXIgISIpOwotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgfQorICAgIEN1cmxfZHluX2luaXQoJmRhdGEtPnN0YXRlLnRyYWlsZXJzX2J1ZiwgRFlOX1RSQUlMRVJTKTsKKwogICAgIGRhdGEtPnN0YXRlLnRyYWlsZXJzX2J5dGVzX3NlbnQgPSAwOwogICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOwogICAgIHRyYWlsZXJzX3JldF9jb2RlID0gZGF0YS0+c2V0LnRyYWlsZXJfY2FsbGJhY2soJnRyYWlsZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnRyYWlsZXJfZGF0YSk7CiAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOwogICAgIGlmKHRyYWlsZXJzX3JldF9jb2RlID09IENVUkxfVFJBSUxFUkZVTkNfT0spIHsKLSAgICAgIGMgPSBDdXJsX2h0dHBfY29tcGlsZV90cmFpbGVycyh0cmFpbGVycywgZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmLCBkYXRhKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cF9jb21waWxlX3RyYWlsZXJzKHRyYWlsZXJzLCAmZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgZmFpbGYoZGF0YSwgIm9wZXJhdGlvbiBhYm9ydGVkIGJ5IHRyYWlsaW5nIGhlYWRlcnMgY2FsbGJhY2siKTsKICAgICAgICpucmVhZHAgPSAwOwotICAgICAgYyA9IENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisgICAgICByZXN1bHQgPSBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwogICAgIH0KLSAgICBpZihjICE9IENVUkxFX09LKSB7Ci0gICAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIEN1cmxfZHluX2ZyZWUoJmRhdGEtPnN0YXRlLnRyYWlsZXJzX2J1Zik7CiAgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHRyYWlsZXJzKTsKLSAgICAgIHJldHVybiBjOworICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgaW5mb2YoZGF0YSwgIlN1Y2Nlc3NmdWxseSBjb21waWxlZCB0cmFpbGVycy5cclxuIik7CiAgICAgY3VybF9zbGlzdF9mcmVlX2FsbCh0cmFpbGVycyk7CkBAIC0yMjUsNyArMjI2LDcgQEAKICAgaWYoZGF0YS0+c3RhdGUudHJhaWxlcnNfc3RhdGUgPT0gVFJBSUxFUlNfU0VORElORykgewogICAgIC8qIGlmIHdlJ3JlIGhlcmUgdGhlbiB0aGF0IG1lYW5zIHRoYXQgd2UgYWxyZWFkeSBzZW50IHRoZSBsYXN0IGVtcHR5IGNodW5rCiAgICAgICAgYnV0IHdlIGRpZG4ndCBzZW5kIGEgZmluYWwgQ1IgTEYsIHNvIHdlIHNlbnQgMCBDUiBMRi4gV2UgdGhlbiBzdGFydAotICAgICAgIHB1bGxpbmcgdHJhaWxpbmcgZGF0YSB1bnRpbCB3ZSDCsmhhdmUgbm8gbW9yZSBhdCB3aGljaCBwb2ludCB3ZQorICAgICAgIHB1bGxpbmcgdHJhaWxpbmcgZGF0YSB1bnRpbCB3ZSBoYXZlIG5vIG1vcmUgYXQgd2hpY2ggcG9pbnQgd2UKICAgICAgICBzaW1wbHkgcmV0dXJuIHRvIHRoZSBwcmV2aW91cyBwb2ludCBpbiB0aGUgc3RhdGUgbWFjaGluZSBhcyBpZgogICAgICAgIG5vdGhpbmcgaGFwcGVuZWQuCiAgICAgICAgKi8KQEAgLTM2Niw3ICszNjcsNyBAQAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAogICAgIGlmKGRhdGEtPnN0YXRlLnRyYWlsZXJzX3N0YXRlID09IFRSQUlMRVJTX1NFTkRJTkcgJiYKICAgICAgICAhQ3VybF90cmFpbGVyc19sZWZ0KGRhdGEpKSB7Ci0gICAgICBDdXJsX2FkZF9idWZmZXJfZnJlZSgmZGF0YS0+c3RhdGUudHJhaWxlcnNfYnVmKTsKKyAgICAgIEN1cmxfZHluX2ZyZWUoJmRhdGEtPnN0YXRlLnRyYWlsZXJzX2J1Zik7CiAgICAgICBkYXRhLT5zdGF0ZS50cmFpbGVyc19zdGF0ZSA9IFRSQUlMRVJTX0RPTkU7CiAgICAgICBkYXRhLT5zZXQudHJhaWxlcl9kYXRhID0gTlVMTDsKICAgICAgIGRhdGEtPnNldC50cmFpbGVyX2NhbGxiYWNrID0gTlVMTDsKQEAgLTQzMiw4ICs0MzMsOCBAQAogICB9CiAgIGlmKGRhdGEtPnNldC5wb3N0ZmllbGRzKQogICAgIDsgLyogZG8gbm90aGluZyAqLwotICBlbHNlIGlmKGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FIHx8Ci0gICAgICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX0ZPUk0pIHsKKyAgZWxzZSBpZihkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FIHx8CisgICAgICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1RfRk9STSkgewogICAgIGlmKEN1cmxfbWltZV9yZXdpbmQobWltZXBhcnQpKSB7CiAgICAgICBmYWlsZihkYXRhLCAiQ2Fubm90IHJld2luZCBtaW1lL3Bvc3QgZGF0YSIpOwogICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRkFJTF9SRVdJTkQ7CkBAIC00ODMsOCArNDg0LDkgQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCi1zdGF0aWMgaW50IGRhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCitzdGF0aWMgaW50IGRhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogeworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBkYXRhLT5jb25uOwogICAvKiBpbiB0aGUgY2FzZSBvZiBsaWJzc2gyLCB3ZSBjYW4gbmV2ZXIgYmUgcmVhbGx5IHN1cmUgdGhhdCB3ZSBoYXZlIGVtcHRpZWQKICAgICAgaXRzIGludGVybmFsIGJ1ZmZlcnMgc28gd2UgTVVTVCBhbHdheXMgdHJ5IHVudGlsIHdlIGdldCBFQUdBSU4gYmFjayAqLwogICByZXR1cm4gY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmKENVUkxQUk9UT19TQ1B8Q1VSTFBST1RPX1NGVFApIHx8CkBAIC00OTcsNyArNDk5LDkgQEAKICAgICAgICBUUlVFLiBUaGUgdGhpbmcgaXMgaWYgd2UgcmVhZCBldmVyeXRoaW5nLCB0aGVuIGh0dHAyX3JlY3Ygd29uJ3QKICAgICAgICBiZSBjYWxsZWQgYW5kIHdlIGNhbm5vdCBzaWduYWwgdGhlIEhUVFAvMiBzdHJlYW0gaGFzIGNsb3NlZC4gQXMKICAgICAgICBhIHdvcmthcm91bmQsIHdlIHJldHVybiBub256ZXJvIGhlcmUgdG8gY2FsbCBodHRwMl9yZWN2LiAqLwotICAgICgoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmUFJPVE9fRkFNSUxZX0hUVFApICYmIGNvbm4tPmh0dHB2ZXJzaW9uID09IDIwKTsKKyAgICAoKGNvbm4tPmhhbmRsZXItPnByb3RvY29sJlBST1RPX0ZBTUlMWV9IVFRQKSAmJiBjb25uLT5odHRwdmVyc2lvbiA+PSAyMCk7CisjZWxpZiBkZWZpbmVkKEVOQUJMRV9RVUlDKQorICAgIEN1cmxfc3NsX2RhdGFfcGVuZGluZyhjb25uLCBGSVJTVFNPQ0tFVCkgfHwgQ3VybF9xdWljX2RhdGFfcGVuZGluZyhkYXRhKTsKICNlbHNlCiAgICAgQ3VybF9zc2xfZGF0YV9wZW5kaW5nKGNvbm4sIEZJUlNUU09DS0VUKTsKICNlbmRpZgpAQCAtNTU0LDYgKzU1OCw4IEBACiAgIHNpemVfdCBleGNlc3MgPSAwOyAvKiBleGNlc3MgYnl0ZXMgcmVhZCAqLwogICBib29sIHJlYWRtb3JlID0gRkFMU0U7IC8qIHVzZWQgYnkgUlRQIHRvIHNpZ25hbCBmb3IgbW9yZSBkYXRhICovCiAgIGludCBtYXhsb29wcyA9IDEwMDsKKyAgY2hhciAqYnVmID0gZGF0YS0+c3RhdGUuYnVmZmVyOworICBERUJVR0FTU0VSVChidWYpOwogCiAgICpkb25lID0gRkFMU0U7CiAgICpjb21lYmFjayA9IEZBTFNFOwpAQCAtNTY0LDE3ICs1NzAsMjAgQEAKICAgICBib29sIGlzX2VtcHR5X2RhdGEgPSBGQUxTRTsKICAgICBzaXplX3QgYnVmZmVyc2l6ZSA9IGRhdGEtPnNldC5idWZmZXJfc2l6ZTsKICAgICBzaXplX3QgYnl0ZXN0b3JlYWQgPSBidWZmZXJzaXplOworI2lmZGVmIFVTRV9OR0hUVFAyCisgICAgYm9vbCBpc19odHRwMiA9ICgoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBQUk9UT19GQU1JTFlfSFRUUCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChjb25uLT5odHRwdmVyc2lvbiA9PSAyMCkpOworI2VuZGlmCiAKICAgICBpZigKLSNpZiBkZWZpbmVkKFVTRV9OR0hUVFAyKQorI2lmZGVmIFVTRV9OR0hUVFAyCiAgICAgICAgLyogRm9yIEhUVFAvMiwgcmVhZCBkYXRhIHdpdGhvdXQgY2FyaW5nIGFib3V0IHRoZSBjb250ZW50CiAgICAgICAgICAgbGVuZ3RoLiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBib2R5IGluIEhUVFAvMiBpcyBhbHdheXMKICAgICAgICAgICBzZWdtZW50ZWQgdGhhbmtzIHRvIGl0cyBmcmFtaW5nIGxheWVyLiBNZWFud2hpbGUsIHdlIGhhdmUgdG8KICAgICAgICAgICBjYWxsIEN1cmxfcmVhZCB0byBlbnN1cmUgdGhhdCBodHRwMl9oYW5kbGVfc3RyZWFtX2Nsb3NlIGlzCiAgICAgICAgICAgY2FsbGVkIHdoZW4gd2UgcmVhZCBhbGwgaW5jb21pbmcgYnl0ZXMgZm9yIGEgcGFydGljdWxhcgogICAgICAgICAgIHN0cmVhbS4gKi8KLSAgICAgICAhKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9IVFRQKSAmJgotICAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPT0gMjApICYmCisgICAgICAgIWlzX2h0dHAyICYmCiAjZW5kaWYKICAgICAgICBrLT5zaXplICE9IC0xICYmICFrLT5oZWFkZXIpIHsKICAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCByZWFkIHRvbyBtdWNoICovCkBAIC01ODUsNyArNTk0LDcgQEAKIAogICAgIGlmKGJ5dGVzdG9yZWFkKSB7CiAgICAgICAvKiByZWNlaXZlIGRhdGEgZnJvbSB0aGUgbmV0d29yayEgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfcmVhZChjb25uLCBjb25uLT5zb2NrZmQsIGstPmJ1ZiwgYnl0ZXN0b3JlYWQsICZucmVhZCk7CisgICAgICByZXN1bHQgPSBDdXJsX3JlYWQoY29ubiwgY29ubi0+c29ja2ZkLCBidWYsIGJ5dGVzdG9yZWFkLCAmbnJlYWQpOwogCiAgICAgICAvKiByZWFkIHdvdWxkJ3ZlIGJsb2NrZWQgKi8KICAgICAgIGlmKENVUkxFX0FHQUlOID09IHJlc3VsdCkKQEAgLTYwMSw3ICs2MTAsNyBAQAogICAgICAgbnJlYWQgPSAwOwogICAgIH0KIAotICAgIGlmKChrLT5ieXRlY291bnQgPT0gMCkgJiYgKGstPndyaXRlYnl0ZWNvdW50ID09IDApKSB7CisgICAgaWYoIWstPmJ5dGVjb3VudCkgewogICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9TVEFSVFRSQU5TRkVSKTsKICAgICAgIGlmKGstPmV4cDEwMCA+IEVYUDEwMF9TRU5EX0RBVEEpCiAgICAgICAgIC8qIHNldCB0aW1lIHN0YW1wIHRvIGNvbXBhcmUgd2l0aCB3aGVuIHdhaXRpbmcgZm9yIHRoZSAxMDAgKi8KQEAgLTYxMiwyMSArNjIxLDI1IEBACiAgICAgLyogaW5kaWNhdGVzIGRhdGEgb2YgemVybyBzaXplLCBpLmUuIGVtcHR5IGZpbGUgKi8KICAgICBpc19lbXB0eV9kYXRhID0gKChucmVhZCA9PSAwKSAmJiAoay0+Ym9keXdyaXRlcyA9PSAwKSkgPyBUUlVFIDogRkFMU0U7CiAKLSAgICAvKiBOVUwgdGVybWluYXRlLCBhbGxvd2luZyBzdHJpbmcgb3BzIHRvIGJlIHVzZWQgKi8KICAgICBpZigwIDwgbnJlYWQgfHwgaXNfZW1wdHlfZGF0YSkgewotICAgICAgay0+YnVmW25yZWFkXSA9IDA7CisgICAgICBidWZbbnJlYWRdID0gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAvKiBpZiB3ZSByZWNlaXZlIDAgb3IgbGVzcyBoZXJlLCB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbgotICAgICAgICAgYW5kIHdlIGJhaWwgb3V0IGZyb20gdGhpcyEgKi8KLSAgICAgIERFQlVHRihpbmZvZihkYXRhLCAibnJlYWQgPD0gMCwgc2VydmVyIGNsb3NlZCBjb25uZWN0aW9uLCBiYWlsaW5nXG4iKSk7CisgICAgICAvKiBpZiB3ZSByZWNlaXZlIDAgb3IgbGVzcyBoZXJlLCBlaXRoZXIgdGhlIGh0dHAyIHN0cmVhbSBpcyBjbG9zZWQgb3IgdGhlCisgICAgICAgICBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIGFuZCB3ZSBiYWlsIG91dCBmcm9tIHRoaXMhICovCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICAgIGlmKGlzX2h0dHAyICYmICFucmVhZCkKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJucmVhZCA9PSAwLCBzdHJlYW0gY2xvc2VkLCBiYWlsaW5nXG4iKSk7CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJucmVhZCA8PSAwLCBzZXJ2ZXIgY2xvc2VkIGNvbm5lY3Rpb24sIGJhaWxpbmdcbiIpKTsKICAgICAgIGstPmtlZXBvbiAmPSB+S0VFUF9SRUNWOwogICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLyogRGVmYXVsdCBidWZmZXIgdG8gdXNlIHdoZW4gd2Ugd3JpdGUgdGhlIGJ1ZmZlciwgaXQgbWF5IGJlIGNoYW5nZWQKICAgICAgICBpbiB0aGUgZmxvdyBiZWxvdyBiZWZvcmUgdGhlIGFjdHVhbCBzdG9yaW5nIGlzIGRvbmUuICovCi0gICAgay0+c3RyID0gay0+YnVmOworICAgIGstPnN0ciA9IGJ1ZjsKIAogICAgIGlmKGNvbm4tPmhhbmRsZXItPnJlYWR3cml0ZSkgewogICAgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+cmVhZHdyaXRlKGRhdGEsIGNvbm4sICZucmVhZCwgJnJlYWRtb3JlKTsKQEAgLTY3NSw3ICs2ODgsNyBAQAogICAgIC8qIFRoaXMgaXMgbm90IGFuICdlbHNlIGlmJyBzaW5jZSBpdCBtYXkgYmUgYSByZXN0IGZyb20gdGhlIGhlYWRlcgogICAgICAgIHBhcnNpbmcsIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBpcyBoZWFkZXJzIGFuZCB0aGUgZW5kCiAgICAgICAgaXMgbm9uLWhlYWRlcnMuICovCi0gICAgaWYoay0+c3RyICYmICFrLT5oZWFkZXIgJiYgKG5yZWFkID4gMCB8fCBpc19lbXB0eV9kYXRhKSkgeworICAgIGlmKCFrLT5oZWFkZXIgJiYgKG5yZWFkID4gMCB8fCBpc19lbXB0eV9kYXRhKSkgewogCiAgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKICAgICAgICAgLyogZGF0YSBhcnJpdmVzIGFsdGhvdWdoIHdlIHdhbnQgbm9uZSwgYmFpbCBvdXQgKi8KQEAgLTcwNiw3ICs3MTksNyBAQAogICAgICAgICAgICAgaW5mb2YoZGF0YSwgIklnbm9yaW5nIHRoZSByZXNwb25zZS1ib2R5XG4iKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gJiYgIWstPmNvbnRlbnRfcmFuZ2UgJiYKLSAgICAgICAgICAgICAoZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9HRVQpICYmCisgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9HRVQpICYmCiAgICAgICAgICAgICAgIWstPmlnbm9yZWJvZHkpIHsKIAogICAgICAgICAgICAgaWYoay0+c2l6ZSA9PSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgewpAQCAtNzU2LDggKzc2OSw5IEBACiAgICAgICAvKiBwYXNzIGRhdGEgdG8gdGhlIGRlYnVnIGZ1bmN0aW9uIGJlZm9yZSBpdCBnZXRzICJkZWNodW5rZWQiICovCiAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgewogICAgICAgICBpZihrLT5iYWRoZWFkZXIpIHsKLSAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfSU4sIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYsCi0gICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KWstPmhidWZsZW4pOworICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9JTiwKKyAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmZGF0YS0+c3RhdGUuaGVhZGVyYiksCisgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9sZW4oJmRhdGEtPnN0YXRlLmhlYWRlcmIpKTsKICAgICAgICAgICBpZihrLT5iYWRoZWFkZXIgPT0gSEVBREVSX1BBUlRIRUFERVIpCiAgICAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfSU4sCiAgICAgICAgICAgICAgICAgICAgICAgIGstPnN0ciwgKHNpemVfdClucmVhZCk7CkBAIC03NzUsMTQgKzc4OSwxNCBAQAogICAgICAgICAgKiBhbmQgd3JpdGVzIGF3YXkgdGhlIGRhdGEuIFRoZSByZXR1cm5lZCAnbnJlYWQnIGhvbGRzIHRoZSBudW1iZXIKICAgICAgICAgICogb2YgYWN0dWFsIGRhdGEgaXQgd3JvdGUgdG8gdGhlIGNsaWVudC4KICAgICAgICAgICovCi0KKyAgICAgICAgQ1VSTGNvZGUgZXh0cmE7CiAgICAgICAgIENIVU5LY29kZSByZXMgPQotICAgICAgICAgIEN1cmxfaHR0cGNodW5rX3JlYWQoY29ubiwgay0+c3RyLCBucmVhZCwgJm5yZWFkKTsKKyAgICAgICAgICBDdXJsX2h0dHBjaHVua19yZWFkKGNvbm4sIGstPnN0ciwgbnJlYWQsICZucmVhZCwgJmV4dHJhKTsKIAogICAgICAgICBpZihDSFVOS0VfT0sgPCByZXMpIHsKLSAgICAgICAgICBpZihDSFVOS0VfV1JJVEVfRVJST1IgPT0gcmVzKSB7Ci0gICAgICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHdyaXRpbmcgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX1dSSVRFX0VSUk9SOworICAgICAgICAgIGlmKENIVU5LRV9QQVNTVEhSVV9FUlJPUiA9PSByZXMpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgcmVhZGluZyB0aGUgY2h1bmtlZC1lbmNvZGVkIHN0cmVhbSIpOworICAgICAgICAgICAgcmV0dXJuIGV4dHJhOwogICAgICAgICAgIH0KICAgICAgICAgICBmYWlsZihkYXRhLCAiJXMgaW4gY2h1bmtlZC1lbmNvZGluZyIsIEN1cmxfY2h1bmtlZF9zdHJlcnJvcihyZXMpKTsKICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKQEAgLTgwOCw5ICs4MjIsOSBAQAogCiAgICAgICAvKiBBY2NvdW50IGZvciBib2R5IGNvbnRlbnQgc3RvcmVkIGluIHRoZSBoZWFkZXIgYnVmZmVyICovCiAgICAgICBpZigoay0+YmFkaGVhZGVyID09IEhFQURFUl9QQVJUSEVBREVSKSAmJiAhay0+aWdub3JlYm9keSkgewotICAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkluY3JlYXNpbmcgYnl0ZWNvdW50IGJ5ICV6dSBmcm9tIGhidWZsZW5cbiIsCi0gICAgICAgICAgICAgICAgICAgICBrLT5oYnVmbGVuKSk7Ci0gICAgICAgIGstPmJ5dGVjb3VudCArPSBrLT5oYnVmbGVuOworICAgICAgICBzaXplX3QgaGVhZGxlbiA9IEN1cmxfZHluX2xlbigmZGF0YS0+c3RhdGUuaGVhZGVyYik7CisgICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiSW5jcmVhc2luZyBieXRlY291bnQgYnkgJXp1XG4iLCBoZWFkbGVuKSk7CisgICAgICAgIGstPmJ5dGVjb3VudCArPSBoZWFkbGVuOwogICAgICAgfQogCiAgICAgICBpZigoLTEgIT0gay0+bWF4ZG93bmxvYWQpICYmCkBAIC04MjUsNiArODM5LDcgQEAKICAgICAgICAgICAgICAgICAiLCBtYXhkb3dubG9hZCA9ICUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKICAgICAgICAgICAgICAgICAiLCBieXRlY291bnQgPSAlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJcbiIsCiAgICAgICAgICAgICAgICAgZXhjZXNzLCBrLT5zaXplLCBrLT5tYXhkb3dubG9hZCwgay0+Ynl0ZWNvdW50KTsKKyAgICAgICAgICBjb25uY2xvc2UoY29ubiwgImV4Y2VzcyBmb3VuZCBpbiBhIHJlYWQiKTsKICAgICAgICAgfQogCiAgICAgICAgIG5yZWFkID0gKHNzaXplX3QpIChrLT5tYXhkb3dubG9hZCAtIGstPmJ5dGVjb3VudCk7CkBAIC04NDQsMTUgKzg1OSwxNiBAQAogICAgICAgICBpZihrLT5iYWRoZWFkZXIgJiYgIWstPmlnbm9yZWJvZHkpIHsKICAgICAgICAgICAvKiB3ZSBwYXJzZWQgYSBwaWVjZSBvZiBkYXRhIHdyb25nbHkgYXNzdW1pbmcgaXQgd2FzIGEgaGVhZGVyCiAgICAgICAgICAgICAgYW5kIG5vdyB3ZSBvdXRwdXQgaXQgYXMgYm9keSBpbnN0ZWFkICovCisgICAgICAgICAgc2l6ZV90IGhlYWRsZW4gPSBDdXJsX2R5bl9sZW4oJmRhdGEtPnN0YXRlLmhlYWRlcmIpOwogCiAgICAgICAgICAgLyogRG9uJ3QgbGV0IGV4Y2VzcyBkYXRhIHBvbGx1dGUgYm9keSB3cml0ZXMgKi8KLSAgICAgICAgICBpZihrLT5tYXhkb3dubG9hZCA9PSAtMSB8fCAoY3VybF9vZmZfdClrLT5oYnVmbGVuIDw9IGstPm1heGRvd25sb2FkKQorICAgICAgICAgIGlmKGstPm1heGRvd25sb2FkID09IC0xIHx8IChjdXJsX29mZl90KWhlYWRsZW4gPD0gay0+bWF4ZG93bmxvYWQpCiAgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGstPmhidWZsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fcHRyKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRsZW4pOwogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9keW5fcHRyKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpay0+bWF4ZG93bmxvYWQpOwogCiAgICAgICAgICAgaWYocmVzdWx0KQpAQCAtODg2LDE0ICs5MDIsMTQgQEAKIAogICAgIH0gLyogaWYoIWhlYWRlciBhbmQgZGF0YSB0byByZWFkKSAqLwogCi0gICAgaWYoY29ubi0+aGFuZGxlci0+cmVhZHdyaXRlICYmIGV4Y2VzcyAmJiAhY29ubi0+Yml0cy5zdHJlYW1fd2FzX3Jld291bmQpIHsKKyAgICBpZihjb25uLT5oYW5kbGVyLT5yZWFkd3JpdGUgJiYgZXhjZXNzKSB7CiAgICAgICAvKiBQYXJzZSB0aGUgZXhjZXNzIGRhdGEgKi8KICAgICAgIGstPnN0ciArPSBucmVhZDsKIAotICAgICAgaWYoJmstPnN0cltleGNlc3NdID4gJmstPmJ1ZltkYXRhLT5zZXQuYnVmZmVyX3NpemVdKSB7CisgICAgICBpZigmay0+c3RyW2V4Y2Vzc10gPiAmYnVmW2RhdGEtPnNldC5idWZmZXJfc2l6ZV0pIHsKICAgICAgICAgLyogdGhlIGV4Y2VzcyBhbW91bnQgd2FzIHRvbyBleGNlc3NpdmUoISksIG1ha2Ugc3VyZQogICAgICAgICAgICBpdCBkb2Vzbid0IHJlYWQgb3V0IG9mIGJ1ZmZlciAqLwotICAgICAgICBleGNlc3MgPSAmay0+YnVmW2RhdGEtPnNldC5idWZmZXJfc2l6ZV0gLSBrLT5zdHI7CisgICAgICAgIGV4Y2VzcyA9ICZidWZbZGF0YS0+c2V0LmJ1ZmZlcl9zaXplXSAtIGstPnN0cjsKICAgICAgIH0KICAgICAgIG5yZWFkID0gKHNzaXplX3QpZXhjZXNzOwogCkBAIC05MTcsNyArOTMzLDcgQEAKICAgICAgIGJyZWFrOwogICAgIH0KIAotICB9IHdoaWxlKGRhdGFfcGVuZGluZyhjb25uKSAmJiBtYXhsb29wcy0tKTsKKyAgfSB3aGlsZShkYXRhX3BlbmRpbmcoZGF0YSkgJiYgbWF4bG9vcHMtLSk7CiAKICAgaWYobWF4bG9vcHMgPD0gMCkgewogICAgIC8qIHdlIG1hcmsgaXQgYXMgcmVhZC1hZ2Fpbi1wbGVhc2UgKi8KQEAgLTkzNywxMiArOTUzLDE0IEBACiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotc3RhdGljIENVUkxjb2RlIGRvbmVfc2VuZGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprKQorQ1VSTGNvZGUgQ3VybF9kb25lX3NlbmRpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmspCiB7CiAgIGstPmtlZXBvbiAmPSB+S0VFUF9TRU5EOyAvKiB3ZSdyZSBkb25lIHdyaXRpbmcgKi8KIAorICAvKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIG1vdmVkIGludG8gdGhlIGhhbmRsZXIgc3RydWN0ISAqLwogICBDdXJsX2h0dHAyX2RvbmVfc2VuZGluZyhjb25uKTsKKyAgQ3VybF9xdWljX2RvbmVfc2VuZGluZyhjb25uKTsKIAogICBpZihjb25uLT5iaXRzLnJld2luZGFmdGVyc2VuZCkgewogICAgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcmVhZHJld2luZChjb25uKTsKQEAgLTEwNDYsNyArMTA2NCw3IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgaWYobnJlYWQgPD0gMCkgewotICAgICAgICByZXN1bHQgPSBkb25lX3NlbmRpbmcoY29ubiwgayk7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZG9uZV9zZW5kaW5nKGNvbm4sIGspOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgYnJlYWs7CkBAIC0xMTY0LDE0ICsxMTgyLDE0IEBACiAgICAgICBrLT51cGxvYWRfcHJlc2VudCA9IDA7IC8qIG5vIG1vcmUgYnl0ZXMgbGVmdCAqLwogCiAgICAgICBpZihrLT51cGxvYWRfZG9uZSkgewotICAgICAgICByZXN1bHQgPSBkb25lX3NlbmRpbmcoY29ubiwgayk7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfZG9uZV9zZW5kaW5nKGNvbm4sIGspOwogICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KICAgICB9CiAKIAotICB9IFdISUxFX0ZBTFNFOyAvKiBqdXN0IHRvIGJyZWFrIG91dCBmcm9tISAqLworICB9IHdoaWxlKDApOyAvKiBqdXN0IHRvIGJyZWFrIG91dCBmcm9tISAqLwogCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KQEAgLTEyMjgsOSArMTI0Niw3IEBACiAgIC8qIFdlIGdvIGFoZWFkIGFuZCBkbyBhIHJlYWQgaWYgd2UgaGF2ZSBhIHJlYWRhYmxlIHNvY2tldCBvciBpZgogICAgICB0aGUgc3RyZWFtIHdhcyByZXdvdW5kIChpbiB3aGljaCBjYXNlIHdlIGhhdmUgZGF0YSBpbiBhCiAgICAgIGJ1ZmZlcikgKi8KLSAgaWYoKGstPmtlZXBvbiAmIEtFRVBfUkVDVikgJiYKLSAgICAgKChzZWxlY3RfcmVzICYgQ1VSTF9DU0VMRUNUX0lOKSB8fCBjb25uLT5iaXRzLnN0cmVhbV93YXNfcmV3b3VuZCkpIHsKLQorICBpZigoay0+a2VlcG9uICYgS0VFUF9SRUNWKSAmJiAoc2VsZWN0X3JlcyAmIENVUkxfQ1NFTEVDVF9JTikpIHsKICAgICByZXN1bHQgPSByZWFkd3JpdGVfZGF0YShkYXRhLCBjb25uLCBrLCAmZGlkd2hhdCwgZG9uZSwgY29tZWJhY2spOwogICAgIGlmKHJlc3VsdCB8fCAqZG9uZSkKICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzU0LDIwICsxMzcwLDE0IEBACiAgKiBpbiB0aGUgcHJvcGVyIHN0YXRlIHRvIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiBhdmFpbGFibGUuCiAgKi8KIGludCBDdXJsX3NpbmdsZV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0byBudW1zb2NrcyBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvY2tldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCiB7CiAgIGNvbnN0IHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKICAgdW5zaWduZWQgc29ja2luZGV4ID0gMDsKIAogICBpZihjb25uLT5oYW5kbGVyLT5wZXJmb3JtX2dldHNvY2spCi0gICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPnBlcmZvcm1fZ2V0c29jayhjb25uLCBzb2NrLCBudW1zb2Nrcyk7Ci0KLSAgaWYobnVtc29ja3MgPCAyKQotICAgIC8qIHNpbXBsZSBjaGVjayBidXQgd2UgbWlnaHQgbmVlZCB0d28gc2xvdHMgKi8KLSAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKKyAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+cGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2spOwogCiAgIC8qIGRvbid0IGluY2x1ZGUgSE9MRCBhbmQgUEFVU0UgY29ubmVjdGlvbnMgKi8KICAgaWYoKGRhdGEtPnJlcS5rZWVwb24gJiBLRUVQX1JFQ1ZCSVRTKSA9PSBLRUVQX1JFQ1YpIHsKQEAgLTE0MzksNiArMTQ0OSw3IEBACiAgICAgfQogICB9CiAKKyAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IGRhdGEtPnNldC5tZXRob2Q7CiAgIGRhdGEtPmNoYW5nZS51cmwgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVRfVVJMXTsKIAogICAvKiBJbml0IHRoZSBTU0wgc2Vzc2lvbiBJRCBjYWNoZSBoZXJlLiBXZSBkbyBpdCBoZXJlIHNpbmNlIHdlIHdhbnQgdG8gZG8gaXQKQEAgLTE0NTgsMTIgKzE0NjksMTEgQEAKICAgZGF0YS0+c3RhdGUuYXV0aGhvc3Qud2FudCA9IGRhdGEtPnNldC5odHRwYXV0aDsKICAgZGF0YS0+c3RhdGUuYXV0aHByb3h5LndhbnQgPSBkYXRhLT5zZXQucHJveHlhdXRoOwogICBDdXJsX3NhZmVmcmVlKGRhdGEtPmluZm8ud291bGRyZWRpcmVjdCk7Ci0gIGRhdGEtPmluZm8ud291bGRyZWRpcmVjdCA9IE5VTEw7CiAKLSAgaWYoZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QVVQpCisgIGlmKGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QVVQpCiAgICAgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA9IGRhdGEtPnNldC5maWxlc2l6ZTsKLSAgZWxzZSBpZigoZGF0YS0+c2V0Lmh0dHByZXEgIT0gSFRUUFJFUV9HRVQpICYmCi0gICAgICAgICAgKGRhdGEtPnNldC5odHRwcmVxICE9IEhUVFBSRVFfSEVBRCkpIHsKKyAgZWxzZSBpZigoZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0dFVCkgJiYKKyAgICAgICAgICAoZGF0YS0+c3RhdGUuaHR0cHJlcSAhPSBIVFRQUkVRX0hFQUQpKSB7CiAgICAgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA9IGRhdGEtPnNldC5wb3N0ZmllbGRzaXplOwogICAgIGlmKGRhdGEtPnNldC5wb3N0ZmllbGRzICYmIChkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID09IC0xKSkKICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPSAoY3VybF9vZmZfdClzdHJsZW4oZGF0YS0+c2V0LnBvc3RmaWVsZHMpOwpAQCAtMTUxMyw2ICsxNTIzLDcgQEAKICAgICAgIH0KICAgICB9CiAjZW5kaWYKKyAgICBDdXJsX2h0dHAyX2luaXRfc3RhdGUoJmRhdGEtPnN0YXRlKTsKICAgfQogCiAgIHJldHVybiByZXN1bHQ7CkBAIC0xNTk0LDcgKzE2MDUsOCBAQAogCiAgIERFQlVHQVNTRVJUKGRhdGEtPnN0YXRlLnVoKTsKICAgdWMgPSBjdXJsX3VybF9zZXQoZGF0YS0+c3RhdGUudWgsIENVUkxVUEFSVF9VUkwsIG5ld3VybCwKLSAgICAgICAgICAgICAgICAgICAgKHR5cGUgPT0gRk9MTE9XX0ZBS0UpID8gQ1VSTFVfTk9OX1NVUFBPUlRfU0NIRU1FIDogMCk7CisgICAgICAgICAgICAgICAgICAgICh0eXBlID09IEZPTExPV19GQUtFKSA/IENVUkxVX05PTl9TVVBQT1JUX1NDSEVNRSA6CisgICAgICAgICAgICAgICAgICAgICgodHlwZSA9PSBGT0xMT1dfUkVESVIpID8gQ1VSTFVfVVJMRU5DT0RFIDogMCkgKTsKICAgaWYodWMpIHsKICAgICBpZih0eXBlICE9IEZPTExPV19GQUtFKQogICAgICAgcmV0dXJuIEN1cmxfdWNfdG9fY3VybGNvZGUodWMpOwpAQCAtMTY3MiwxMiArMTY4NCwxMiBAQAogICAgICAqIFRoaXMgYmVoYXZpb3VyIGlzIGZvcmJpZGRlbiBieSBSRkMxOTQ1IGFuZCB0aGUgb2Jzb2xldGUgUkZDMjYxNiwgYW5kCiAgICAgICogY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBDVVJMT1BUX1BPU1RSRURJUi4KICAgICAgKi8KLSAgICBpZigoZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUCi0gICAgICAgIHx8IGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNCi0gICAgICAgIHx8IGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9NSU1FKQorICAgIGlmKChkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVAorICAgICAgICB8fCBkYXRhLT5zdGF0ZS5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNCisgICAgICAgIHx8IGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX01JTUUpCiAgICAgICAgJiYgIShkYXRhLT5zZXQua2VlcF9wb3N0ICYgQ1VSTF9SRURJUl9QT1NUXzMwMSkpIHsKICAgICAgIGluZm9mKGRhdGEsICJTd2l0Y2ggZnJvbSBQT1NUIHRvIEdFVFxuIik7Ci0gICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfR0VUOworICAgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IEhUVFBSRVFfR0VUOwogICAgIH0KICAgICBicmVhazsKICAgY2FzZSAzMDI6IC8qIEZvdW5kICovCkBAIC0xNjk3LDIyICsxNzA5LDI5IEBACiAgICAgICogVGhpcyBiZWhhdmlvdXIgaXMgZm9yYmlkZGVuIGJ5IFJGQzE5NDUgYW5kIHRoZSBvYnNvbGV0ZSBSRkMyNjE2LCBhbmQKICAgICAgKiBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIENVUkxPUFRfUE9TVFJFRElSLgogICAgICAqLwotICAgIGlmKChkYXRhLT5zZXQuaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1QKLSAgICAgICAgfHwgZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX0ZPUk0KLSAgICAgICAgfHwgZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX01JTUUpCisgICAgaWYoKGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUCisgICAgICAgIHx8IGRhdGEtPnN0YXRlLmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX0ZPUk0KKyAgICAgICAgfHwgZGF0YS0+c3RhdGUuaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1RfTUlNRSkKICAgICAgICAmJiAhKGRhdGEtPnNldC5rZWVwX3Bvc3QgJiBDVVJMX1JFRElSX1BPU1RfMzAyKSkgewogICAgICAgaW5mb2YoZGF0YSwgIlN3aXRjaCBmcm9tIFBPU1QgdG8gR0VUXG4iKTsKLSAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CisgICAgICBkYXRhLT5zdGF0ZS5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CiAgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzAzOiAvKiBTZWUgT3RoZXIgKi8KLSAgICAvKiBEaXNhYmxlIGJvdGggdHlwZXMgb2YgUE9TVHMsIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5Ci0gICAgICAgYXNrcyBmb3IgUE9TVCBhZnRlciBQT1NUICovCi0gICAgaWYoZGF0YS0+c2V0Lmh0dHByZXEgIT0gSFRUUFJFUV9HRVQKLSAgICAgICYmICEoZGF0YS0+c2V0LmtlZXBfcG9zdCAmIENVUkxfUkVESVJfUE9TVF8zMDMpKSB7Ci0gICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfR0VUOyAvKiBlbmZvcmNlIEdFVCByZXF1ZXN0ICovCi0gICAgICBpbmZvZihkYXRhLCAiRGlzYWJsZXMgUE9TVCwgZ29lcyB3aXRoICVzXG4iLAorICAgIC8qICdTZWUgT3RoZXInIGxvY2F0aW9uIGlzIG5vdCB0aGUgcmVzb3VyY2UgYnV0IGEgc3Vic3RpdHV0ZSBmb3IgdGhlCisgICAgICogcmVzb3VyY2UuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdGhlIG1ldGhvZCB0byBHRVQvSEVBRCwgdW5sZXNzIHRoZQorICAgICAqIG1ldGhvZCBpcyBQT1NUIGFuZCB0aGUgdXNlciBzcGVjaWZpZWQgdG8ga2VlcCBpdCBhcyBQT1NULgorICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvaXNzdWVzLzUyMzcjaXNzdWVjb21tZW50LTYxNDY0MTA0OQorICAgICAqLworICAgIGlmKGRhdGEtPnN0YXRlLmh0dHByZXEgIT0gSFRUUFJFUV9HRVQgJiYKKyAgICAgICAoKGRhdGEtPnN0YXRlLmh0dHByZXEgIT0gSFRUUFJFUV9QT1NUICYmCisgICAgICAgICBkYXRhLT5zdGF0ZS5odHRwcmVxICE9IEhUVFBSRVFfUE9TVF9GT1JNICYmCisgICAgICAgICBkYXRhLT5zdGF0ZS5odHRwcmVxICE9IEhUVFBSRVFfUE9TVF9NSU1FKSB8fAorICAgICAgICAhKGRhdGEtPnNldC5rZWVwX3Bvc3QgJiBDVVJMX1JFRElSX1BPU1RfMzAzKSkpIHsKKyAgICAgIGRhdGEtPnN0YXRlLmh0dHByZXEgPSBIVFRQUkVRX0dFVDsKKyAgICAgIGRhdGEtPnNldC51cGxvYWQgPSBmYWxzZTsKKyAgICAgIGluZm9mKGRhdGEsICJTd2l0Y2ggdG8gJXNcbiIsCiAgICAgICAgICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHk/IkhFQUQiOiJHRVQiKTsKICAgICB9CiAgICAgYnJlYWs7CkBAIC0xNzc5LDYgKzE3OTgsMTIgQEAKICAgICByZXRyeSA9IFRSVUU7CiAgIH0KICAgaWYocmV0cnkpIHsKKyNkZWZpbmUgQ09OTl9NQVhfUkVUUklFUyA1CisgICAgaWYoY29ubi0+cmV0cnljb3VudCsrID49IENPTk5fTUFYX1JFVFJJRVMpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDb25uZWN0aW9uIGRpZWQsIHRyaWVkICVkIHRpbWVzIGJlZm9yZSBnaXZpbmcgdXAiLAorICAgICAgICAgICAgQ09OTl9NQVhfUkVUUklFUyk7CisgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICB9CiAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIkNvbm5lY3Rpb24gZGllZCwgcmV0cnlpbmcgYSBmcmVzaCBjb25uZWN0XG4iKTsKICAgICAqdXJsID0gc3RyZHVwKGNvbm4tPmRhdGEtPmNoYW5nZS51cmwpOwogICAgIGlmKCEqdXJsKQpAQCAtMTgyMSwxNSArMTg0NiwyMSBAQAogewogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IGRhdGEtPmNvbm47CisgIHN0cnVjdCBIVFRQICpodHRwID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgYm9vbCBodHRwc2VuZGluZyA9ICgoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmUFJPVE9fRkFNSUxZX0hUVFApICYmCisgICAgICAgICAgICAgICAgICAgICAgKGh0dHAtPnNlbmRpbmcgPT0gSFRUUFNFTkRfUkVRVUVTVCkpOwogICBERUJVR0FTU0VSVChjb25uICE9IE5VTEwpOwogICBERUJVR0FTU0VSVCgoc29ja2luZGV4IDw9IDEpICYmIChzb2NraW5kZXggPj0gLTEpKTsKIAotICBpZihjb25uLT5iaXRzLm11bHRpcGxleCB8fCBjb25uLT5odHRwdmVyc2lvbiA9PSAyMCkgeworICBpZihjb25uLT5iaXRzLm11bHRpcGxleCB8fCBjb25uLT5odHRwdmVyc2lvbiA9PSAyMCB8fCBodHRwc2VuZGluZykgewogICAgIC8qIHdoZW4gbXVsdGlwbGV4aW5nLCB0aGUgcmVhZC93cml0ZSBzb2NrZXRzIG5lZWQgdG8gYmUgdGhlIHNhbWUhICovCiAgICAgY29ubi0+c29ja2ZkID0gc29ja2luZGV4ID09IC0xID8KICAgICAgICgod3JpdGVzb2NraW5kZXggPT0gLTEgPyBDVVJMX1NPQ0tFVF9CQUQgOiBjb25uLT5zb2NrW3dyaXRlc29ja2luZGV4XSkpIDoKICAgICAgIGNvbm4tPnNvY2tbc29ja2luZGV4XTsKICAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKKyAgICBpZihodHRwc2VuZGluZykKKyAgICAgIC8qIHNwZWNpYWwgYW5kIHZlcnkgSFRUUC1zcGVjaWZpYyAqLworICAgICAgd3JpdGVzb2NraW5kZXggPSBGSVJTVFNPQ0tFVDsKICAgfQogICBlbHNlIHsKICAgICBjb25uLT5zb2NrZmQgPSBzb2NraW5kZXggPT0gLTEgPwpAQCAtMTg1Nyw3ICsxODg4LDYgQEAKICAgICAgIGstPmtlZXBvbiB8PSBLRUVQX1JFQ1Y7CiAKICAgICBpZih3cml0ZXNvY2tpbmRleCAhPSAtMSkgewotICAgICAgc3RydWN0IEhUVFAgKmh0dHAgPSBkYXRhLT5yZXEucHJvdG9wOwogICAgICAgLyogSFRUUCAxLjEgbWFnaWM6CiAKICAgICAgICAgIEV2ZW4gaWYgd2UgcmVxdWlyZSBhIDEwMC1yZXR1cm4gY29kZSBiZWZvcmUgdXBsb2FkaW5nIGRhdGEsIHdlIG1pZ2h0CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdHJhbnNmZXIuaAppbmRleCBhOWJmZjYzLi42N2ZkOTFmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi90cmFuc2Zlci5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3RyYW5zZmVyLmgKQEAgLTI5LDcgKzI5LDYgQEAKIHZvaWQgQ3VybF9pbml0X0NPTk5FQ1Qoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7CiAKIENVUkxjb2RlIEN1cmxfcHJldHJhbnNmZXIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7Ci1DVVJMY29kZSBDdXJsX3NlY29uZF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiBDVVJMY29kZSBDdXJsX3Bvc3R0cmFuc2ZlcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTQ4LDggKzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgKmRvbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpjb21lYmFjayk7CiBpbnQgQ3VybF9zaW5nbGVfZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2Nrcyk7CiBDVVJMY29kZSBDdXJsX3JlYWRyZXdpbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKIENVUkxjb2RlIEN1cmxfZmlsbHJlYWRidWZmZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzaXplX3QgYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbnJlYWRwKTsKQEAgLTU3LDYgKzU1LDkgQEAKIGJvb2wgQ3VybF9tZWV0c190aW1lY29uZGl0aW9uKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVfdCB0aW1lb2Zkb2MpOwogQ1VSTGNvZGUgQ3VybF9nZXRfdXBsb2FkX2J1ZmZlcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKIAorQ1VSTGNvZGUgQ3VybF9kb25lX3NlbmRpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmspOworCiAvKiBUaGlzIHNldHMgdXAgYSBmb3J0aGNvbWluZyB0cmFuc2ZlciAqLwogdm9pZAogQ3VybF9zZXR1cF90cmFuc2ZlciAoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmMKaW5kZXggYzQ0MWFlNy4uYTFhNmI2OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM0LDEwICszNCwxMiBAQAogI2lmZGVmIEhBVkVfTkVUX0lGX0gKICNpbmNsdWRlIDxuZXQvaWYuaD4KICNlbmRpZgorI2lmZGVmIEhBVkVfSVBITFBBUElfSAorI2luY2x1ZGUgPElwaGxwYXBpLmg+CisjZW5kaWYKICNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjZW5kaWYKLQogI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNlbmRpZgpAQCAtOTMsNiArOTUsNyBAQAogI2luY2x1ZGUgImluZXRfcHRvbi5oIgogI2luY2x1ZGUgImdldGluZm8uaCIKICNpbmNsdWRlICJ1cmxhcGktaW50LmgiCisjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCiAKIC8qIEFuZCBub3cgZm9yIHRoZSBwcm90b2NvbHMgKi8KICNpbmNsdWRlICJmdHAuaCIKQEAgLTEwMywxNSArMTA2LDE1IEBACiAjaW5jbHVkZSAiaHR0cDIuaCIKICNpbmNsdWRlICJmaWxlLmgiCiAjaW5jbHVkZSAiY3VybF9sZGFwLmgiCi0jaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidnNzaC9zc2guaCIKICNpbmNsdWRlICJpbWFwLmgiCiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAiY29ubmVjdC5oIgogI2luY2x1ZGUgImluZXRfbnRvcC5oIgogI2luY2x1ZGUgImh0dHBfbnRsbS5oIgotI2luY2x1ZGUgInNvY2tzLmgiCiAjaW5jbHVkZSAiY3VybF9ydG1wLmgiCiAjaW5jbHVkZSAiZ29waGVyLmgiCisjaW5jbHVkZSAibXF0dC5oIgogI2luY2x1ZGUgImh0dHBfcHJveHkuaCIKICNpbmNsdWRlICJjb25uY2FjaGUuaCIKICNpbmNsdWRlICJtdWx0aWhhbmRsZS5oIgpAQCAtMTE5LDYgKzEyMiw3IEBACiAjaW5jbHVkZSAic3RyZHVwLmgiCiAjaW5jbHVkZSAic2V0b3B0LmgiCiAjaW5jbHVkZSAiYWx0c3ZjLmgiCisjaW5jbHVkZSAiZHluYnVmLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtMTI2LDcgKzEzMCw2IEBACiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAogc3RhdGljIHZvaWQgY29ubl9mcmVlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7Ci1zdGF0aWMgdm9pZCBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZShzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpOwogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfcHJvdG9jb2xfZmFtaWx5KHVuc2lnbmVkIGludCBwcm90b2NvbCk7CiAKIC8qIFNvbWUgcGFydHMgb2YgdGhlIGNvZGUgKGUuZy4gY2h1bmtlZCBlbmNvZGluZykgYXNzdW1lIHRoaXMgYnVmZmVyIGhhcyBhdApAQCAtMTM5LDE5ICsxNDIsMjEgQEAKIAogCiAvKgotICogUHJvdG9jb2wgdGFibGUuCisgKiBQcm90b2NvbCB0YWJsZS4gU2NoZW1lcyAocm91Z2hseSkgaW4gMjAxOSBwb3B1bGFyaXR5IG9yZGVyOgorICoKKyAqIEhUVFBTLCBIVFRQLCBGVFAsIEZUUFMsIFNGVFAsIEZJTEUsIFNDUCwgU01UUCwgTERBUCwgSU1BUFMsIFRFTE5FVCwgSU1BUCwKKyAqIExEQVBTLCBTTVRQUywgVEZUUCwgU01CLCBQT1AzLCBHT1BIRVIgUE9QM1MsIFJUU1AsIFJUTVAsIFNNQlMsIERJQ1QKICAqLwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqIGNvbnN0IHByb3RvY29sc1tdID0gewogCi0jaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCi0gICZDdXJsX2hhbmRsZXJfaHR0cCwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChVU0VfU1NMKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkKICAgJkN1cmxfaGFuZGxlcl9odHRwcywKICNlbmRpZgogCisjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCisgICZDdXJsX2hhbmRsZXJfaHR0cCwKKyNlbmRpZgorCiAjaWZuZGVmIENVUkxfRElTQUJMRV9GVFAKICAgJkN1cmxfaGFuZGxlcl9mdHAsCiAjZW5kaWYKQEAgLTE2MCwxMiArMTY1LDIzIEBACiAgICZDdXJsX2hhbmRsZXJfZnRwcywKICNlbmRpZgogCi0jaWZuZGVmIENVUkxfRElTQUJMRV9URUxORVQKLSAgJkN1cmxfaGFuZGxlcl90ZWxuZXQsCisjaWYgZGVmaW5lZChVU0VfU1NIKQorICAmQ3VybF9oYW5kbGVyX3NmdHAsCiAjZW5kaWYKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfRElDVAotICAmQ3VybF9oYW5kbGVyX2RpY3QsCisjaWZuZGVmIENVUkxfRElTQUJMRV9GSUxFCisgICZDdXJsX2hhbmRsZXJfZmlsZSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0VfU1NIKSAmJiAhZGVmaW5lZChVU0VfV09MRlNTSCkKKyAgJkN1cmxfaGFuZGxlcl9zY3AsCisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfU01UUAorICAmQ3VybF9oYW5kbGVyX3NtdHAsCisjaWZkZWYgVVNFX1NTTAorICAmQ3VybF9oYW5kbGVyX3NtdHBzLAorI2VuZGlmCiAjZW5kaWYKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfTERBUApAQCAtMTc3LDIyICsxOTMsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfRklMRQotICAmQ3VybF9oYW5kbGVyX2ZpbGUsCi0jZW5kaWYKLQotI2lmbmRlZiBDVVJMX0RJU0FCTEVfVEZUUAotICAmQ3VybF9oYW5kbGVyX3RmdHAsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoVVNFX1NTSCkKLSAgJkN1cmxfaGFuZGxlcl9zY3AsCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoVVNFX1NTSCkKLSAgJkN1cmxfaGFuZGxlcl9zZnRwLAotI2VuZGlmCi0KICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0lNQVAKICAgJkN1cmxfaGFuZGxlcl9pbWFwLAogI2lmZGVmIFVTRV9TU0wKQEAgLTIwMCw2ICsyMDAsMTQgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1RFTE5FVAorICAmQ3VybF9oYW5kbGVyX3RlbG5ldCwKKyNlbmRpZgorCisjaWZuZGVmIENVUkxfRElTQUJMRV9URlRQCisgICZDdXJsX2hhbmRsZXJfdGZ0cCwKKyNlbmRpZgorCiAjaWZuZGVmIENVUkxfRElTQUJMRV9QT1AzCiAgICZDdXJsX2hhbmRsZXJfcG9wMywKICNpZmRlZiBVU0VfU1NMCkBAIC0yMTYsMTcgKzIyNCwxNCBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBDVVJMX0RJU0FCTEVfU01UUAotICAmQ3VybF9oYW5kbGVyX3NtdHAsCi0jaWZkZWYgVVNFX1NTTAotICAmQ3VybF9oYW5kbGVyX3NtdHBzLAotI2VuZGlmCi0jZW5kaWYKLQogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUlRTUAogICAmQ3VybF9oYW5kbGVyX3J0c3AsCiAjZW5kaWYKIAorI2lmZGVmIENVUkxfRU5BQkxFX01RVFQKKyAgJkN1cmxfaGFuZGxlcl9tcXR0LAorI2VuZGlmCisKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0dPUEhFUgogICAmQ3VybF9oYW5kbGVyX2dvcGhlciwKICNlbmRpZgpAQCAtMjQwLDYgKzI0NSwxMCBAQAogICAmQ3VybF9oYW5kbGVyX3J0bXB0cywKICNlbmRpZgogCisjaWZuZGVmIENVUkxfRElTQUJMRV9ESUNUCisgICZDdXJsX2hhbmRsZXJfZGljdCwKKyNlbmRpZgorCiAgIChzdHJ1Y3QgQ3VybF9oYW5kbGVyICopIE5VTEwKIH07CiAKQEAgLTI3MiwxMCArMjgxLDE2IEBACiB7CiAgIC8qIEZyZWUgYWxsIGR5bmFtaWMgc3RyaW5ncyBzdG9yZWQgaW4gdGhlIGRhdGEtPnNldCBzdWJzdHJ1Y3R1cmUuICovCiAgIGVudW0gZHVwc3RyaW5nIGk7CisgIGVudW0gZHVwYmxvYiBqOworCiAgIGZvcihpID0gKGVudW0gZHVwc3RyaW5nKTA7IGkgPCBTVFJJTkdfTEFTVDsgaSsrKSB7CiAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zZXQuc3RyW2ldKTsKICAgfQogCisgIGZvcihqID0gKGVudW0gZHVwYmxvYikwOyBqIDwgQkxPQl9MQVNUOyBqKyspIHsKKyAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPnNldC5ibG9ic1tqXSk7CisgIH0KKwogICBpZihkYXRhLT5jaGFuZ2UucmVmZXJlcl9hbGxvYykgewogICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+Y2hhbmdlLnJlZmVyZXIpOwogICAgIGRhdGEtPmNoYW5nZS5yZWZlcmVyX2FsbG9jID0gRkFMU0U7CkBAIC0zMTUsMTMgKzMzMCwxNyBAQAogICogd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzIGludm9rZWQuCiAgKi8KIAotQ1VSTGNvZGUgQ3VybF9jbG9zZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQorQ1VSTGNvZGUgQ3VybF9jbG9zZShzdHJ1Y3QgQ3VybF9lYXN5ICoqZGF0YXApCiB7CiAgIHN0cnVjdCBDdXJsX211bHRpICptOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhOwogCi0gIGlmKCFkYXRhKQorICBpZighZGF0YXAgfHwgISpkYXRhcCkKICAgICByZXR1cm4gQ1VSTEVfT0s7CiAKKyAgZGF0YSA9ICpkYXRhcDsKKyAgKmRhdGFwID0gTlVMTDsKKwogICBDdXJsX2V4cGlyZV9jbGVhcihkYXRhKTsgLyogc2h1dCBvZmYgdGltZXJzICovCiAKICAgbSA9IGRhdGEtPm11bHRpOwpAQCAtMzcwLDExICszODksMTEgQEAKIAogICB1cF9mcmVlKGRhdGEpOwogICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmJ1ZmZlcik7Ci0gIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuaGVhZGVyYnVmZik7CisgIEN1cmxfZHluX2ZyZWUoJmRhdGEtPnN0YXRlLmhlYWRlcmIpOwogICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLnVsYnVmKTsKLSAgQ3VybF9mbHVzaF9jb29raWVzKGRhdGEsIDEpOworICBDdXJsX2ZsdXNoX2Nvb2tpZXMoZGF0YSwgVFJVRSk7CiAjaWZkZWYgVVNFX0FMVFNWQwotICBDdXJsX2FsdHN2Y19zYXZlKGRhdGEtPmFzaSwgZGF0YS0+c2V0LnN0cltTVFJJTkdfQUxUU1ZDXSk7CisgIEN1cmxfYWx0c3ZjX3NhdmUoZGF0YSwgZGF0YS0+YXNpLCBkYXRhLT5zZXQuc3RyW1NUUklOR19BTFRTVkNdKTsKICAgQ3VybF9hbHRzdmNfY2xlYW51cChkYXRhLT5hc2kpOwogICBkYXRhLT5hc2kgPSBOVUxMOwogI2VuZGlmCkBAIC0zOTcsNiArNDE2LDIzIEBACiAgICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfU0hBUkUpOwogICB9CiAKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnByb3h5dXNlcnB3ZCk7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci51YWdlbnQpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudXNlcnB3ZCk7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5hY2NlcHRfZW5jb2RpbmcpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIudGUpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIucmFuZ2VsaW5lKTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnJlZik7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUuYXB0ci5ob3N0KTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLmNvb2tpZWhvc3QpOworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmFwdHIucnRzcF90cmFuc3BvcnQpOworCisjaWZuZGVmIENVUkxfRElTQUJMRV9ET0gKKyAgQ3VybF9keW5fZnJlZSgmZGF0YS0+cmVxLmRvaC5wcm9iZVswXS5zZXJ2ZXJkb2gpOworICBDdXJsX2R5bl9mcmVlKCZkYXRhLT5yZXEuZG9oLnByb2JlWzFdLnNlcnZlcmRvaCk7CisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoZGF0YS0+cmVxLmRvaC5oZWFkZXJzKTsKKyNlbmRpZgorCiAgIC8qIGRlc3RydWN0IHdpbGRjYXJkIHN0cnVjdHVyZXMgaWYgaXQgaXMgbmVlZGVkICovCiAgIEN1cmxfd2lsZGNhcmRfZHRvcigmZGF0YS0+d2lsZGNhcmQpOwogICBDdXJsX2ZyZWVzZXQoZGF0YSk7CkBAIC00MzcsOSArNDczLDkgQEAKICAgc2V0LT5wb3N0ZmllbGRzaXplID0gLTE7ICAgLyogdW5rbm93biBzaXplICovCiAgIHNldC0+bWF4cmVkaXJzID0gLTE7ICAgICAgIC8qIGFsbG93IGFueSBhbW91bnQgYnkgZGVmYXVsdCAqLwogCi0gIHNldC0+aHR0cHJlcSA9IEhUVFBSRVFfR0VUOyAvKiBEZWZhdWx0IEhUVFAgcmVxdWVzdCAqLworICBzZXQtPm1ldGhvZCA9IEhUVFBSRVFfR0VUOyAvKiBEZWZhdWx0IEhUVFAgcmVxdWVzdCAqLwogICBzZXQtPnJ0c3ByZXEgPSBSVFNQUkVRX09QVElPTlM7IC8qIERlZmF1bHQgUlRTUCByZXF1ZXN0ICovCi0jaWZuZGVmIENVUkxfRElTQUJMRV9GSUxFCisjaWZuZGVmIENVUkxfRElTQUJMRV9GVFAKICAgc2V0LT5mdHBfdXNlX2Vwc3YgPSBUUlVFOyAgIC8qIEZUUCBkZWZhdWx0cyB0byBFUFNWIG9wZXJhdGlvbnMgKi8KICAgc2V0LT5mdHBfdXNlX2VwcnQgPSBUUlVFOyAgIC8qIEZUUCBkZWZhdWx0cyB0byBFUFJUIG9wZXJhdGlvbnMgKi8KICAgc2V0LT5mdHBfdXNlX3ByZXQgPSBGQUxTRTsgIC8qIG1haW5seSB1c2VmdWwgZm9yIGRyZnRwZCBzZXJ2ZXJzICovCkBAIC00NzYsNyArNTEyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgKi8KICAgc2V0LT5zc2wucHJpbWFyeS5zZXNzaW9uaWQgPSBUUlVFOyAvKiBzZXNzaW9uIElEIGNhY2hpbmcgZW5hYmxlZCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIHNldC0+cHJveHlfc3NsID0gc2V0LT5zc2w7CisjZW5kaWYKIAogICBzZXQtPm5ld19maWxlX3Blcm1zID0gMDY0NDsgICAgLyogRGVmYXVsdCBwZXJtaXNzaW9ucyAqLwogICBzZXQtPm5ld19kaXJlY3RvcnlfcGVybXMgPSAwNzU1OyAvKiBEZWZhdWx0IHBlcm1pc3Npb25zICovCkBAIC00ODUsOSArNTIzLDggQEAKICAgICAgZGVmaW5lIHNpbmNlIHdlIGludGVybmFsbHkgb25seSB1c2UgdGhlIGxvd2VyIDE2IGJpdHMgZm9yIHRoZSBwYXNzZWQKICAgICAgaW4gYml0bWFzayB0byBub3QgY29uZmxpY3Qgd2l0aCB0aGUgcHJpdmF0ZSBiaXRzICovCiAgIHNldC0+YWxsb3dlZF9wcm90b2NvbHMgPSBDVVJMUFJPVE9fQUxMOwotICBzZXQtPnJlZGlyX3Byb3RvY29scyA9IENVUkxQUk9UT19BTEwgJiAgLyogQWxsIGV4Y2VwdCBGSUxFLCBTQ1AgYW5kIFNNQiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICB+KENVUkxQUk9UT19GSUxFIHwgQ1VSTFBST1RPX1NDUCB8IENVUkxQUk9UT19TTUIgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxQUk9UT19TTUJTKTsKKyAgc2V0LT5yZWRpcl9wcm90b2NvbHMgPSBDVVJMUFJPVE9fSFRUUCB8IENVUkxQUk9UT19IVFRQUyB8IENVUkxQUk9UT19GVFAgfAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxQUk9UT19GVFBTOwogCiAjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQogICAvKgpAQCAtNTQ0LDcgKzU4MSw3IEBACiAgIHNldC0+dXBrZWVwX2ludGVydmFsX21zID0gQ1VSTF9VUEtFRVBfSU5URVJWQUxfREVGQVVMVDsKICAgc2V0LT5tYXhjb25uZWN0cyA9IERFRkFVTFRfQ09OTkNBQ0hFX1NJWkU7IC8qIGZvciBlYXN5IGhhbmRsZXMgKi8KICAgc2V0LT5tYXhhZ2VfY29ubiA9IDExODsKLSAgc2V0LT5odHRwMDlfYWxsb3dlZCA9IFRSVUU7CisgIHNldC0+aHR0cDA5X2FsbG93ZWQgPSBGQUxTRTsKICAgc2V0LT5odHRwdmVyc2lvbiA9CiAjaWZkZWYgVVNFX05HSFRUUDIKICAgICBDVVJMX0hUVFBfVkVSU0lPTl8yVExTCkBAIC01ODYsNDAgKzYyMywyMiBAQAogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICAvKiBXZSBkbyBzb21lIGluaXRpYWwgc2V0dXAgaGVyZSwgYWxsIHRob3NlIGZpZWxkcyB0aGF0IGNhbid0IGJlIGp1c3QgMCAqLworICByZXN1bHQgPSBDdXJsX2luaXRfdXNlcmRlZmluZWQoZGF0YSk7CisgIGlmKCFyZXN1bHQpIHsKKyAgICBDdXJsX2R5bl9pbml0KCZkYXRhLT5zdGF0ZS5oZWFkZXJiLCBDVVJMX01BWF9IVFRQX0hFQURFUik7CisgICAgQ3VybF9jb252ZXJ0X2luaXQoZGF0YSk7CisgICAgQ3VybF9pbml0aW5mbyhkYXRhKTsKIAotICBkYXRhLT5zdGF0ZS5idWZmZXIgPSBtYWxsb2MoUkVBREJVRkZFUl9TSVpFICsgMSk7Ci0gIGlmKCFkYXRhLT5zdGF0ZS5idWZmZXIpIHsKLSAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbWFsbG9jIG9mIGJ1ZmZlciBmYWlsZWRcbiIpKTsKLSAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICB9Ci0gIGVsc2UgewotICAgIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYgPSBtYWxsb2MoSEVBREVSU0laRSk7Ci0gICAgaWYoIWRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYpIHsKLSAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBtYWxsb2Mgb2YgaGVhZGVyYnVmZiBmYWlsZWRcbiIpKTsKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcmVzdWx0ID0gQ3VybF9pbml0X3VzZXJkZWZpbmVkKGRhdGEpOworICAgIC8qIG1vc3QgcmVjZW50IGNvbm5lY3Rpb24gaXMgbm90IHlldCBkZWZpbmVkICovCisgICAgZGF0YS0+c3RhdGUubGFzdGNvbm5lY3QgPSBOVUxMOwogCi0gICAgICBkYXRhLT5zdGF0ZS5oZWFkZXJzaXplID0gSEVBREVSU0laRTsKLSAgICAgIEN1cmxfY29udmVydF9pbml0KGRhdGEpOwotICAgICAgQ3VybF9pbml0aW5mbyhkYXRhKTsKLQotICAgICAgLyogbW9zdCByZWNlbnQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGRlZmluZWQgKi8KLSAgICAgIGRhdGEtPnN0YXRlLmxhc3Rjb25uZWN0ID0gTlVMTDsKLQotICAgICAgZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgfD0gUEdSU19ISURFOwotICAgICAgZGF0YS0+c3RhdGUuY3VycmVudF9zcGVlZCA9IC0xOyAvKiBpbml0IHRvIG5lZ2F0aXZlID09IGltcG9zc2libGUgKi8KLQotICAgICAgQ3VybF9odHRwMl9pbml0X3N0YXRlKCZkYXRhLT5zdGF0ZSk7Ci0gICAgfQorICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzIHw9IFBHUlNfSElERTsKKyAgICBkYXRhLT5zdGF0ZS5jdXJyZW50X3NwZWVkID0gLTE7IC8qIGluaXQgdG8gbmVnYXRpdmUgPT0gaW1wb3NzaWJsZSAqLwogICB9CiAKICAgaWYocmVzdWx0KSB7CiAgICAgQ3VybF9yZXNvbHZlcl9jbGVhbnVwKGRhdGEtPnN0YXRlLnJlc29sdmVyKTsKLSAgICBmcmVlKGRhdGEtPnN0YXRlLmJ1ZmZlcik7Ci0gICAgZnJlZShkYXRhLT5zdGF0ZS5oZWFkZXJidWZmKTsKKyAgICBDdXJsX2R5bl9mcmVlKCZkYXRhLT5zdGF0ZS5oZWFkZXJiKTsKICAgICBDdXJsX2ZyZWVzZXQoZGF0YSk7CiAgICAgZnJlZShkYXRhKTsKICAgICBkYXRhID0gTlVMTDsKQEAgLTY2NSwxNSArNjg0LDEzIEBACiB9CiAjZWxzZSAgLyogISBVU0VfUkVDVl9CRUZPUkVfU0VORF9XT1JLQVJPVU5EICovCiAvKiBVc2UgImRvLW5vdGhpbmciIG1hY3JvIGluc3RlYWQgb2YgZnVuY3Rpb24gd2hlbiB3b3JrYXJvdW5kIG5vdCB1c2VkICovCi0jZGVmaW5lIGNvbm5fcmVzZXRfYWxsX3Bvc3Rwb25lZF9kYXRhKGMpIGRvIHt9IFdISUxFX0ZBTFNFCisjZGVmaW5lIGNvbm5fcmVzZXRfYWxsX3Bvc3Rwb25lZF9kYXRhKGMpIGRvIHt9IHdoaWxlKDApCiAjZW5kaWYgLyogISBVU0VfUkVDVl9CRUZPUkVfU0VORF9XT1JLQVJPVU5EICovCiAKIAogc3RhdGljIHZvaWQgY29ubl9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIGlmKCFjb25uKQotICAgIHJldHVybjsKLQorICBERUJVR0FTU0VSVChjb25uKTsKICAgaW5mb2YoY29ubi0+ZGF0YSwgIkNsb3NpbmcgY29ubmVjdGlvbiAlbGRcbiIsIGNvbm4tPmNvbm5lY3Rpb25faWQpOwogICBERUJVR0FTU0VSVChjb25uLT5kYXRhKTsKIApAQCAtNjk0LDU0ICs3MTEsNDAgQEAKICAgICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIGNvbm4tPnRlbXBzb2NrWzBdKTsKICAgaWYoQ1VSTF9TT0NLRVRfQkFEICE9IGNvbm4tPnRlbXBzb2NrWzFdKQogICAgIEN1cmxfY2xvc2Vzb2NrZXQoY29ubiwgY29ubi0+dGVtcHNvY2tbMV0pOwotCi0gIC8qIHVubGluayBvdXJzZWx2ZXMuIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBsYXN0IHNpbmNlIG90aGVyIHNodXRkb3duCi0gICAgIHByb2NlZHVyZXMgbmVlZCBhIHZhbGlkIGNvbm4tPmRhdGEgYW5kIHRoaXMgbWF5IGNsZWFyIGl0LiAqLwotICBDdXJsX2Nvbm5jYWNoZV9yZW1vdmVfY29ubihjb25uLT5kYXRhLCBjb25uLCBUUlVFKTsKIH0KIAogc3RhdGljIHZvaWQgY29ubl9mcmVlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKLSAgaWYoIWNvbm4pCi0gICAgcmV0dXJuOworICBERUJVR0FTU0VSVChjb25uKTsKIAotICBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmY29ubi0+aG9zdCk7Ci0gIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5jb25uX3RvX2hvc3QpOwotICBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKLSAgZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QpOwotCi0gIEN1cmxfc2FmZWZyZWUoY29ubi0+dXNlcik7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+cGFzc3dkKTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5vYXV0aF9iZWFyZXIpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPm9wdGlvbnMpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5ob3N0KTsKKyAgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZSgmY29ubi0+Y29ubl90b19ob3N0KTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPmh0dHBfcHJveHkuaG9zdCk7CisgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPmh0dHBfcHJveHkudXNlcik7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+c29ja3NfcHJveHkudXNlcik7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+aHR0cF9wcm94eS5wYXNzd2QpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkKTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci51YWdlbnQpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnVzZXJwd2QpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudGUpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucmVmKTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ob3N0KTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5jb29raWVob3N0KTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ydHNwX3RyYW5zcG9ydCk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+dHJhaWxlcik7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+aHR0cF9wcm94eS5ob3N0LnJhd2FsbG9jKTsgLyogaHR0cCBwcm94eSBuYW1lIGJ1ZmZlciAqLworICBDdXJsX3NhZmVmcmVlKGNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QucmF3YWxsb2MpOyAvKiBzb2NrcyBwcm94eSBuYW1lIGJ1ZmZlciAqLworICBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKCZjb25uLT5wcm94eV9zc2xfY29uZmlnKTsKKyNlbmRpZgorICBDdXJsX3NhZmVmcmVlKGNvbm4tPnVzZXIpOworICBDdXJsX3NhZmVmcmVlKGNvbm4tPnBhc3N3ZCk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+c2FzbF9hdXRoemlkKTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5vcHRpb25zKTsKKyAgQ3VybF9keW5fZnJlZSgmY29ubi0+dHJhaWxlcik7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+aG9zdC5yYXdhbGxvYyk7IC8qIGhvc3QgbmFtZSBidWZmZXIgKi8KICAgQ3VybF9zYWZlZnJlZShjb25uLT5jb25uX3RvX2hvc3QucmF3YWxsb2MpOyAvKiBob3N0IG5hbWUgYnVmZmVyICovCiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+aG9zdG5hbWVfcmVzb2x2ZSk7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+c2Vjb25kYXJ5aG9zdG5hbWUpOwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPmh0dHBfcHJveHkuaG9zdC5yYXdhbGxvYyk7IC8qIGh0dHAgcHJveHkgbmFtZSBidWZmZXIgKi8KLSAgQ3VybF9zYWZlZnJlZShjb25uLT5zb2Nrc19wcm94eS5ob3N0LnJhd2FsbG9jKTsgLyogc29ja3MgcHJveHkgbmFtZSBidWZmZXIgKi8KICAgQ3VybF9zYWZlZnJlZShjb25uLT5jb25uZWN0X3N0YXRlKTsKIAogICBjb25uX3Jlc2V0X2FsbF9wb3N0cG9uZWRfZGF0YShjb25uKTsKICAgQ3VybF9sbGlzdF9kZXN0cm95KCZjb25uLT5lYXN5cSwgTlVMTCk7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+bG9jYWxkZXYpOwogICBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKCZjb25uLT5zc2xfY29uZmlnKTsKLSAgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZygmY29ubi0+cHJveHlfc3NsX2NvbmZpZyk7CiAKICNpZmRlZiBVU0VfVU5JWF9TT0NLRVRTCiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+dW5peF9kb21haW5fc29ja2V0KTsKQEAgLTc3MCwxMyArNzczLDE3IEBACiBDVVJMY29kZSBDdXJsX2Rpc2Nvbm5lY3Qoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQogewotICBpZighY29ubikKLSAgICByZXR1cm4gQ1VSTEVfT0s7IC8qIHRoaXMgaXMgY2xvc2VkIGFuZCBmaW5lIGFscmVhZHkgKi8KKyAgLyogdGhlcmUgbXVzdCBiZSBhIGNvbm5lY3Rpb24gdG8gY2xvc2UgKi8KKyAgREVCVUdBU1NFUlQoY29ubik7CiAKLSAgaWYoIWRhdGEpIHsKLSAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkRJU0NPTk5FQ1Qgd2l0aG91dCBlYXN5IGhhbmRsZSwgaWdub3JpbmdcbiIpKTsKLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gIH0KKyAgLyogaXQgbXVzdCBiZSByZW1vdmVkIGZyb20gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KKyAgREVCVUdBU1NFUlQoIWNvbm4tPmJ1bmRsZSk7CisKKyAgLyogdGhlcmUgbXVzdCBiZSBhbiBhc3NvY2lhdGVkIHRyYW5zZmVyICovCisgIERFQlVHQVNTRVJUKGRhdGEpOworCisgIC8qIHRoZSB0cmFuc2ZlciBtdXN0IGJlIGRldGFjaGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gKi8KKyAgREVCVUdBU1NFUlQoIWRhdGEtPmNvbm4pOwogCiAgIC8qCiAgICAqIElmIHRoaXMgY29ubmVjdGlvbiBpc24ndCBtYXJrZWQgdG8gZm9yY2UtY2xvc2UsIGxlYXZlIGl0IG9wZW4gaWYgdGhlcmUKQEAgLTc5MiwxNiArNzk5LDExIEBACiAgICAgY29ubi0+ZG5zX2VudHJ5ID0gTlVMTDsKICAgfQogCi0gIEN1cmxfaG9zdGNhY2hlX3BydW5lKGRhdGEpOyAvKiBraWxsIG9sZCBETlMgY2FjaGUgZW50cmllcyAqLwotCi0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmIGRlZmluZWQoVVNFX05UTE0pCiAgIC8qIENsZWFudXAgTlRMTSBjb25uZWN0aW9uLXJlbGF0ZWQgZGF0YSAqLwogICBDdXJsX2h0dHBfYXV0aF9jbGVhbnVwX250bG0oY29ubik7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgZGVmaW5lZChVU0VfU1BORUdPKQorCiAgIC8qIENsZWFudXAgTkVHT1RJQVRFIGNvbm5lY3Rpb24tcmVsYXRlZCBkYXRhICovCiAgIEN1cmxfaHR0cF9hdXRoX2NsZWFudXBfbmVnb3RpYXRlKGNvbm4pOwotI2VuZGlmCiAKICAgLyogdGhlIHByb3RvY29sIHNwZWNpZmljIGRpc2Nvbm5lY3QgaGFuZGxlciBhbmQgY29ubl9zaHV0ZG93biBuZWVkIGEgdHJhbnNmZXIKICAgICAgZm9yIHRoZSBjb25uZWN0aW9uISAqLwpAQCAtODYzLDggKzg2NSw4IEBACiAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiBzdGF0aWMgYm9vbAotcHJveHlfaW5mb19tYXRjaGVzKGNvbnN0IHN0cnVjdCBwcm94eV9pbmZvKiBkYXRhLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwcm94eV9pbmZvKiBuZWVkbGUpCitwcm94eV9pbmZvX21hdGNoZXMoY29uc3Qgc3RydWN0IHByb3h5X2luZm8gKmRhdGEsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHByb3h5X2luZm8gKm5lZWRsZSkKIHsKICAgaWYoKGRhdGEtPnByb3h5dHlwZSA9PSBuZWVkbGUtPnByb3h5dHlwZSkgJiYKICAgICAgKGRhdGEtPnBvcnQgPT0gbmVlZGxlLT5wb3J0KSAmJgpAQCAtODczLDExICs4NzUsNTkgQEAKIAogICByZXR1cm4gRkFMU0U7CiB9CisKK3N0YXRpYyBib29sCitzb2Nrc19wcm94eV9pbmZvX21hdGNoZXMoY29uc3Qgc3RydWN0IHByb3h5X2luZm8gKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHByb3h5X2luZm8gKm5lZWRsZSkKK3sKKyAgaWYoIXByb3h5X2luZm9fbWF0Y2hlcyhkYXRhLCBuZWVkbGUpKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiB0aGUgdXNlciBpbmZvcm1hdGlvbiBpcyBjYXNlLXNlbnNpdGl2ZQorICAgICBvciBhdCBsZWFzdCBpdCBpcyBub3QgZGVmaW5lZCBhcyBjYXNlLWluc2Vuc2l0aXZlCisgICAgIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMi4xICovCisgIGlmKChkYXRhLT51c2VyID09IE5VTEwpICE9IChuZWVkbGUtPnVzZXIgPT0gTlVMTCkpCisgICAgcmV0dXJuIEZBTFNFOworICAvKiBjdXJsX3N0cmVxdWFsIGRvZXMgYSBjYXNlIGluc2VudGl2ZSBjb21wYXJpc29uLCBzbyBkbyBub3QgdXNlIGl0IGhlcmUhICovCisgIGlmKGRhdGEtPnVzZXIgJiYKKyAgICAgbmVlZGxlLT51c2VyICYmCisgICAgIHN0cmNtcChkYXRhLT51c2VyLCBuZWVkbGUtPnVzZXIpICE9IDApCisgICAgcmV0dXJuIEZBTFNFOworICBpZigoZGF0YS0+cGFzc3dkID09IE5VTEwpICE9IChuZWVkbGUtPnBhc3N3ZCA9PSBOVUxMKSkKKyAgICByZXR1cm4gRkFMU0U7CisgIC8qIGN1cmxfc3RyZXF1YWwgZG9lcyBhIGNhc2UgaW5zZW50aXZlIGNvbXBhcmlzb24sIHNvIGRvIG5vdCB1c2UgaXQgaGVyZSEgKi8KKyAgaWYoZGF0YS0+cGFzc3dkICYmCisgICAgIG5lZWRsZS0+cGFzc3dkICYmCisgICAgIHN0cmNtcChkYXRhLT5wYXNzd2QsIG5lZWRsZS0+cGFzc3dkKSAhPSAwKQorICAgIHJldHVybiBGQUxTRTsKKyAgcmV0dXJuIFRSVUU7Cit9CiAjZWxzZQogLyogZGlzYWJsZWQsIHdvbid0IGdldCBjYWxsZWQgKi8KICNkZWZpbmUgcHJveHlfaW5mb19tYXRjaGVzKHgseSkgRkFMU0UKKyNkZWZpbmUgc29ja3NfcHJveHlfaW5mb19tYXRjaGVzKHgseSkgRkFMU0UKICNlbmRpZgogCisvKiBBIGNvbm5lY3Rpb24gaGFzIHRvIGhhdmUgYmVlbiBpZGxlIGZvciBhIHNob3J0ZXIgdGltZSB0aGFuICdtYXhhZ2VfY29ubicgdG8KKyAgIGJlIHN1YmplY3QgZm9yIHJldXNlLiBUaGUgc3VjY2VzcyByYXRlIGlzIGp1c3QgdG9vIGxvdyBhZnRlciB0aGlzLiAqLworCitzdGF0aWMgYm9vbCBjb25uX21heGFnZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmx0aW1lIG5vdykKK3sKKyAgaWYoIWNvbm4tPmRhdGEpIHsKKyAgICB0aW1lZGlmZl90IGlkbGV0aW1lID0gQ3VybF90aW1lZGlmZihub3csIGNvbm4tPmxhc3R1c2VkKTsKKyAgICBpZGxldGltZSAvPSAxMDAwOyAvKiBpbnRlZ2VyIHNlY29uZHMgaXMgZmluZSAqLworCisgICAgaWYoaWRsZXRpbWUgPiBkYXRhLT5zZXQubWF4YWdlX2Nvbm4pIHsKKyAgICAgIGluZm9mKGRhdGEsICJUb28gb2xkIGNvbm5lY3Rpb24gKCVsZCBzZWNvbmRzKSwgZGlzY29ubmVjdCBpdFxuIiwKKyAgICAgICAgICAgIGlkbGV0aW1lKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gY29ubmVjdGlvbiBpcyBkZWFkIGFuZCBleHRyYWN0cyBpdCBmcm9tCiAgKiB0aGUgY29ubmVjdGlvbiBjYWNoZSBpZiBzby4KQEAgLTg5NCw3ICs5NDQsMTEgQEAKICAgICAvKiBUaGUgY2hlY2sgZm9yIGEgZGVhZCBzb2NrZXQgbWFrZXMgc2Vuc2Ugb25seSBpZiB0aGUgY29ubmVjdGlvbiBpc24ndCBpbgogICAgICAgIHVzZSAqLwogICAgIGJvb2wgZGVhZDsKLSAgICBpZihjb25uLT5oYW5kbGVyLT5jb25uZWN0aW9uX2NoZWNrKSB7CisgICAgc3RydWN0IGN1cmx0aW1lIG5vdyA9IEN1cmxfbm93KCk7CisgICAgaWYoY29ubl9tYXhhZ2UoZGF0YSwgY29ubiwgbm93KSkgeworICAgICAgZGVhZCA9IFRSVUU7CisgICAgfQorICAgIGVsc2UgaWYoY29ubi0+aGFuZGxlci0+Y29ubmVjdGlvbl9jaGVjaykgewogICAgICAgLyogVGhlIHByb3RvY29sIGhhcyBhIHNwZWNpYWwgbWV0aG9kIGZvciBjaGVja2luZyB0aGUgc3RhdGUgb2YgdGhlCiAgICAgICAgICBjb25uZWN0aW9uLiBVc2UgaXQgdG8gY2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gaXMgZGVhZC4gKi8KICAgICAgIHVuc2lnbmVkIGludCBzdGF0ZTsKQEAgLTk0Niw3ICsxMDAwLDEyIEBACiBzdGF0aWMgdm9pZCBwcnVuZV9kZWFkX2Nvbm5lY3Rpb25zKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpCiB7CiAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOwotICB0aW1lX3QgZWxhcHNlZCA9IEN1cmxfdGltZWRpZmYobm93LCBkYXRhLT5zdGF0ZS5jb25uX2NhY2hlLT5sYXN0X2NsZWFudXApOworICB0aW1lZGlmZl90IGVsYXBzZWQ7CisKKyAgQ09OTkNBQ0hFX0xPQ0soZGF0YSk7CisgIGVsYXBzZWQgPQorICAgIEN1cmxfdGltZWRpZmYobm93LCBkYXRhLT5zdGF0ZS5jb25uX2NhY2hlLT5sYXN0X2NsZWFudXApOworICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogCiAgIGlmKGVsYXBzZWQgPj0gMTAwMEwpIHsKICAgICBzdHJ1Y3QgcHJ1bmVkZWFkIHBydW5lOwpAQCAtOTU0LDMyICsxMDEzLDIwIEBACiAgICAgcHJ1bmUuZXh0cmFjdGVkID0gTlVMTDsKICAgICB3aGlsZShDdXJsX2Nvbm5jYWNoZV9mb3JlYWNoKGRhdGEsIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUsICZwcnVuZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfZXh0cmFjdF9pZl9kZWFkKSkgeworICAgICAgLyogdW5sb2NrZWQgKi8KKworICAgICAgLyogcmVtb3ZlIGNvbm5lY3Rpb24gZnJvbSBjYWNoZSAqLworICAgICAgQ3VybF9jb25uY2FjaGVfcmVtb3ZlX2Nvbm4oZGF0YSwgcHJ1bmUuZXh0cmFjdGVkLCBUUlVFKTsKKwogICAgICAgLyogZGlzY29ubmVjdCBpdCAqLwogICAgICAgKHZvaWQpQ3VybF9kaXNjb25uZWN0KGRhdGEsIHBydW5lLmV4dHJhY3RlZCwgLyogZGVhZF9jb25uZWN0aW9uICovVFJVRSk7CiAgICAgfQorICAgIENPTk5DQUNIRV9MT0NLKGRhdGEpOwogICAgIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUtPmxhc3RfY2xlYW51cCA9IG5vdzsKKyAgICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogICB9CiB9CiAKLS8qIEEgY29ubmVjdGlvbiBoYXMgdG8gaGF2ZSBiZWVuIGlkbGUgZm9yIGEgc2hvcnRlciB0aW1lIHRoYW4gJ21heGFnZV9jb25uJyB0bwotICAgYmUgc3ViamVjdCBmb3IgcmV1c2UuIFRoZSBzdWNjZXNzIHJhdGUgaXMganVzdCB0b28gbG93IGFmdGVyIHRoaXMuICovCi0KLXN0YXRpYyBib29sIGNvbm5fbWF4YWdlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybHRpbWUgbm93KQotewotICBpZighY29ubi0+ZGF0YSkgewotICAgIHRpbWVkaWZmX3QgaWRsZXRpbWUgPSBDdXJsX3RpbWVkaWZmKG5vdywgY29ubi0+bGFzdHVzZWQpOwotICAgIGlkbGV0aW1lIC89IDEwMDA7IC8qIGludGVnZXIgc2Vjb25kcyBpcyBmaW5lICovCi0KLSAgICBpZihpZGxldGltZS8xMDAwID4gZGF0YS0+c2V0Lm1heGFnZV9jb25uKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiVG9vIG9sZCBjb25uZWN0aW9uICglbGQgc2Vjb25kcyksIGRpc2Nvbm5lY3QgaXRcbiIsCi0gICAgICAgICAgICBpZGxldGltZSk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQogLyoKICAqIEdpdmVuIG9uZSBmaWxsZWQgaW4gY29ubmVjdGlvbiBzdHJ1Y3QgKG5hbWVkIG5lZWRsZSksIHRoaXMgZnVuY3Rpb24gc2hvdWxkCiAgKiBkZXRlY3QgaWYgdGhlcmUgYWxyZWFkeSBpcyBvbmUgdGhhdCBoYXMgYWxsIHRoZSBzaWduaWZpY2FudCBkZXRhaWxzCkBAIC0xMDAzLDE2ICsxMDUwLDIwIEBACiAgIGJvb2wgZm91bmRQZW5kaW5nQ2FuZGlkYXRlID0gRkFMU0U7CiAgIGJvb2wgY2FubXVsdGlwbGV4ID0gSXNNdWx0aXBsZXhpbmdQb3NzaWJsZShkYXRhLCBuZWVkbGUpOwogICBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqYnVuZGxlOwotICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKKyAgY29uc3QgY2hhciAqaG9zdGJ1bmRsZTsKIAogI2lmZGVmIFVTRV9OVExNCiAgIGJvb2wgd2FudE5UTE1odHRwID0gKChkYXRhLT5zdGF0ZS5hdXRoaG9zdC53YW50ICYKICAgICAgICAgICAgICAgICAgICAgICAoQ1VSTEFVVEhfTlRMTSB8IENVUkxBVVRIX05UTE1fV0IpKSAmJgogICAgICAgICAgICAgICAgICAgICAgIChuZWVkbGUtPmhhbmRsZXItPnByb3RvY29sICYgUFJPVE9fRkFNSUxZX0hUVFApKTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGJvb2wgd2FudFByb3h5TlRMTWh0dHAgPSAobmVlZGxlLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRhdGEtPnN0YXRlLmF1dGhwcm94eS53YW50ICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDVVJMQVVUSF9OVExNIHwgQ1VSTEFVVEhfTlRMTV9XQikpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmVlZGxlLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9IVFRQKSkpOworI2Vsc2UKKyAgYm9vbCB3YW50UHJveHlOVExNaHR0cCA9IEZBTFNFOworI2VuZGlmCiAjZW5kaWYKIAogICAqZm9yY2VfcmV1c2UgPSBGQUxTRTsKQEAgLTEwMjAsMjQgKzEwNzEsMjMgQEAKIAogICAvKiBMb29rIHVwIHRoZSBidW5kbGUgd2l0aCBhbGwgdGhlIGNvbm5lY3Rpb25zIHRvIHRoaXMgcGFydGljdWxhciBob3N0LgogICAgICBMb2NrcyB0aGUgY29ubmVjdGlvbiBjYWNoZSwgYmV3YXJlIG9mIGVhcmx5IHJldHVybnMhICovCi0gIGJ1bmRsZSA9IEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKG5lZWRsZSwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSk7CisgIGJ1bmRsZSA9IEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKG5lZWRsZSwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3RidW5kbGUpOwogICBpZihidW5kbGUpIHsKICAgICAvKiBNYXggcGlwZSBsZW5ndGggaXMgemVybyAodW5saW1pdGVkKSBmb3IgbXVsdGlwbGV4ZWQgY29ubmVjdGlvbnMgKi8KICAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpjdXJyOwogCiAgICAgaW5mb2YoZGF0YSwgIkZvdW5kIGJ1bmRsZSBmb3IgaG9zdCAlczogJXAgWyVzXVxuIiwKLSAgICAgICAgICAobmVlZGxlLT5iaXRzLmNvbm5fdG9faG9zdCA/IG5lZWRsZS0+Y29ubl90b19ob3N0Lm5hbWUgOgotICAgICAgICAgICBuZWVkbGUtPmhvc3QubmFtZSksICh2b2lkICopYnVuZGxlLAotICAgICAgICAgIChidW5kbGUtPm11bHRpdXNlID09IEJVTkRMRV9NVUxUSVBMRVggPwotICAgICAgICAgICAiY2FuIG11bHRpcGxleCIgOiAic2VyaWFsbHkiKSk7CisgICAgICAgICAgaG9zdGJ1bmRsZSwgKHZvaWQgKilidW5kbGUsIChidW5kbGUtPm11bHRpdXNlID09IEJVTkRMRV9NVUxUSVBMRVggPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBtdWx0aXBsZXgiIDogInNlcmlhbGx5IikpOwogCiAgICAgLyogV2UgY2FuJ3QgbXVsdGlwbGV4IGlmIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIHNlcnZlciAqLwogICAgIGlmKGNhbm11bHRpcGxleCkgewogICAgICAgaWYoYnVuZGxlLT5tdWx0aXVzZSA9PSBCVU5ETEVfVU5LTk9XTikgewotICAgICAgICBpZigoYnVuZGxlLT5tdWx0aXVzZSA9PSBCVU5ETEVfVU5LTk9XTikgJiYgZGF0YS0+c2V0LnBpcGV3YWl0KSB7CisgICAgICAgIGlmKGRhdGEtPnNldC5waXBld2FpdCkgewogICAgICAgICAgIGluZm9mKGRhdGEsICJTZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxleCB5ZXQsIHdhaXRcbiIpOwogICAgICAgICAgICp3YWl0cGlwZSA9IFRSVUU7Ci0gICAgICAgICAgQ3VybF9jb25uY2FjaGVfdW5sb2NrKGRhdGEpOworICAgICAgICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgICAgICAgICAgcmV0dXJuIEZBTFNFOyAvKiBubyByZS11c2UgKi8KICAgICAgICAgfQogCkBAIC0xMDU4LDcgKzExMDgsNyBAQAogICAgIGN1cnIgPSBidW5kbGUtPmNvbm5fbGlzdC5oZWFkOwogICAgIHdoaWxlKGN1cnIpIHsKICAgICAgIGJvb2wgbWF0Y2ggPSBGQUxTRTsKLSAgICAgIHNpemVfdCBtdWx0aXBsZXhlZDsKKyAgICAgIHNpemVfdCBtdWx0aXBsZXhlZCA9IDA7CiAKICAgICAgIC8qCiAgICAgICAgKiBOb3RlIHRoYXQgaWYgd2UgdXNlIGEgSFRUUCBwcm94eSBpbiBub3JtYWwgbW9kZSAobm8gdHVubmVsaW5nKSwgd2UKQEAgLTEwNjcsMjIgKzExMTcsMTUgQEAKICAgICAgIGNoZWNrID0gY3Vyci0+cHRyOwogICAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAKLSAgICAgIGlmKGNoZWNrLT5iaXRzLmNvbm5lY3Rfb25seSkKLSAgICAgICAgLyogY29ubmVjdC1vbmx5IGNvbm5lY3Rpb25zIHdpbGwgbm90IGJlIHJldXNlZCAqLworICAgICAgaWYoY2hlY2stPmJpdHMuY29ubmVjdF9vbmx5IHx8IGNoZWNrLT5iaXRzLmNsb3NlKQorICAgICAgICAvKiBjb25uZWN0LW9ubHkgb3IgdG8tYmUtY2xvc2VkIGNvbm5lY3Rpb25zIHdpbGwgbm90IGJlIHJldXNlZCAqLwogICAgICAgICBjb250aW51ZTsKIAotICAgICAgaWYoY29ubl9tYXhhZ2UoZGF0YSwgY2hlY2ssIG5vdykgfHwgZXh0cmFjdF9pZl9kZWFkKGNoZWNrLCBkYXRhKSkgewotICAgICAgICAvKiBkaXNjb25uZWN0IGl0ICovCi0gICAgICAgICh2b2lkKUN1cmxfZGlzY29ubmVjdChkYXRhLCBjaGVjaywgLyogZGVhZF9jb25uZWN0aW9uICovVFJVRSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBtdWx0aXBsZXhlZCA9IENPTk5fSU5VU0UoY2hlY2spICYmCi0gICAgICAgIChidW5kbGUtPm11bHRpdXNlID09IEJVTkRMRV9NVUxUSVBMRVgpOworICAgICAgaWYoYnVuZGxlLT5tdWx0aXVzZSA9PSBCVU5ETEVfTVVMVElQTEVYKQorICAgICAgICBtdWx0aXBsZXhlZCA9IENPTk5fSU5VU0UoY2hlY2spOwogCiAgICAgICBpZihjYW5tdWx0aXBsZXgpIHsKLSAgICAgICAgaWYoY2hlY2stPmJpdHMucHJvdG9jb25uc3RhcnQgJiYgY2hlY2stPmJpdHMuY2xvc2UpCi0gICAgICAgICAgY29udGludWU7CisgICAgICAgIDsKICAgICAgIH0KICAgICAgIGVsc2UgewogICAgICAgICBpZihtdWx0aXBsZXhlZCkgewpAQCAtMTEwMiwxMiArMTE0NSw5IEBACiAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYoKGNoZWNrLT5zb2NrW0ZJUlNUU09DS0VUXSA9PSBDVVJMX1NPQ0tFVF9CQUQpIHx8Ci0gICAgICAgICAgIGNoZWNrLT5iaXRzLmNsb3NlKSB7Ci0gICAgICAgICAgaWYoIWNoZWNrLT5iaXRzLmNsb3NlKQotICAgICAgICAgICAgZm91bmRQZW5kaW5nQ2FuZGlkYXRlID0gVFJVRTsKLSAgICAgICAgICAvKiBEb24ndCBwaWNrIGEgY29ubmVjdGlvbiB0aGF0IGhhc24ndCBjb25uZWN0ZWQgeWV0IG9yIHRoYXQgaXMgZ29pbmcKLSAgICAgICAgICAgICB0byBnZXQgY2xvc2VkLiAqLworICAgICAgICBpZihjaGVjay0+c29ja1tGSVJTVFNPQ0tFVF0gPT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAgICAgZm91bmRQZW5kaW5nQ2FuZGlkYXRlID0gVFJVRTsKKyAgICAgICAgICAvKiBEb24ndCBwaWNrIGEgY29ubmVjdGlvbiB0aGF0IGhhc24ndCBjb25uZWN0ZWQgeWV0ICovCiAgICAgICAgICAgaW5mb2YoZGF0YSwgIkNvbm5lY3Rpb24gIyVsZCBpc24ndCBvcGVuIGVub3VnaCwgY2FuJ3QgcmV1c2VcbiIsCiAgICAgICAgICAgICAgICAgY2hlY2stPmNvbm5lY3Rpb25faWQpOwogICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTEyMCw3ICsxMTYwLDggQEAKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYoc3RyY21wKG5lZWRsZS0+dW5peF9kb21haW5fc29ja2V0LCBjaGVjay0+dW5peF9kb21haW5fc29ja2V0KSkKICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYobmVlZGxlLT5hYnN0cmFjdF91bml4X3NvY2tldCAhPSBjaGVjay0+YWJzdHJhY3RfdW5peF9zb2NrZXQpCisgICAgICAgIGlmKG5lZWRsZS0+Yml0cy5hYnN0cmFjdF91bml4X3NvY2tldCAhPQorICAgICAgICAgICBjaGVjay0+Yml0cy5hYnN0cmFjdF91bml4X3NvY2tldCkKICAgICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICAgIGVsc2UgaWYoY2hlY2stPnVuaXhfZG9tYWluX3NvY2tldCkKQEAgLTExMzEsMTggKzExNzIsMjAgQEAKICAgICAgICAgIChjaGVjay0+aGFuZGxlci0+ZmxhZ3MmUFJPVE9QVF9TU0wpKQogICAgICAgICAvKiBkb24ndCBkbyBtaXhlZCBTU0wgYW5kIG5vbi1TU0wgY29ubmVjdGlvbnMgKi8KICAgICAgICAgaWYoZ2V0X3Byb3RvY29sX2ZhbWlseShjaGVjay0+aGFuZGxlci0+cHJvdG9jb2wpICE9Ci0gICAgICAgICAgIG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgfHwgIWNoZWNrLT50bHNfdXBncmFkZWQpCisgICAgICAgICAgIG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgfHwgIWNoZWNrLT5iaXRzLnRsc191cGdyYWRlZCkKICAgICAgICAgICAvKiBleGNlcHQgcHJvdG9jb2xzIHRoYXQgaGF2ZSBiZWVuIHVwZ3JhZGVkIHZpYSBUTFMgKi8KICAgICAgICAgICBjb250aW51ZTsKIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgIGlmKG5lZWRsZS0+Yml0cy5odHRwcHJveHkgIT0gY2hlY2stPmJpdHMuaHR0cHByb3h5IHx8CiAgICAgICAgICBuZWVkbGUtPmJpdHMuc29ja3Nwcm94eSAhPSBjaGVjay0+Yml0cy5zb2Nrc3Byb3h5KQogICAgICAgICBjb250aW51ZTsKIAotICAgICAgaWYobmVlZGxlLT5iaXRzLnNvY2tzcHJveHkgJiYgIXByb3h5X2luZm9fbWF0Y2hlcygmbmVlZGxlLT5zb2Nrc19wcm94eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrLT5zb2Nrc19wcm94eSkpCisgICAgICBpZihuZWVkbGUtPmJpdHMuc29ja3Nwcm94eSAmJgorICAgICAgICAhc29ja3NfcHJveHlfaW5mb19tYXRjaGVzKCZuZWVkbGUtPnNvY2tzX3Byb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGVjay0+c29ja3NfcHJveHkpKQogICAgICAgICBjb250aW51ZTsKLQorI2VuZGlmCiAgICAgICBpZihuZWVkbGUtPmJpdHMuY29ubl90b19ob3N0ICE9IGNoZWNrLT5iaXRzLmNvbm5fdG9faG9zdCkKICAgICAgICAgLyogZG9uJ3QgbWl4IGNvbm5lY3Rpb25zIHRoYXQgdXNlIHRoZSAiY29ubmVjdCB0byBob3N0IiBmZWF0dXJlIGFuZAogICAgICAgICAgKiBjb25uZWN0aW9ucyB0aGF0IGRvbid0IHVzZSB0aGlzIGZlYXR1cmUgKi8KQEAgLTExNTMsNiArMTE5Niw3IEBACiAgICAgICAgICAqIGNvbm5lY3Rpb25zIHRoYXQgZG9uJ3QgdXNlIHRoaXMgZmVhdHVyZSAqLwogICAgICAgICBjb250aW51ZTsKIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgIGlmKG5lZWRsZS0+Yml0cy5odHRwcHJveHkpIHsKICAgICAgICAgaWYoIXByb3h5X2luZm9fbWF0Y2hlcygmbmVlZGxlLT5odHRwX3Byb3h5LCAmY2hlY2stPmh0dHBfcHJveHkpKQogICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTE3OSwxNCArMTIyMywxNiBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQorI2VuZGlmCisKKyAgICAgIERFQlVHQVNTRVJUKCFjaGVjay0+ZGF0YSB8fCBHT09EX0VBU1lfSEFORExFKGNoZWNrLT5kYXRhKSk7CiAKICAgICAgIGlmKCFjYW5tdWx0aXBsZXggJiYgY2hlY2stPmRhdGEpCiAgICAgICAgIC8qIHRoaXMgcmVxdWVzdCBjYW4ndCBiZSBtdWx0aXBsZXhlZCBidXQgdGhlIGNoZWNrZWQgY29ubmVjdGlvbiBpcwogICAgICAgICAgICBhbHJlYWR5IGluIHVzZSBzbyB3ZSBza2lwIGl0ICovCiAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICBpZihDT05OX0lOVVNFKGNoZWNrKSAmJiBjaGVjay0+ZGF0YSAmJgotICAgICAgICAgKGNoZWNrLT5kYXRhLT5tdWx0aSAhPSBuZWVkbGUtPmRhdGEtPm11bHRpKSkKKyAgICAgIGlmKGNoZWNrLT5kYXRhICYmIChjaGVjay0+ZGF0YS0+bXVsdGkgIT0gbmVlZGxlLT5kYXRhLT5tdWx0aSkpCiAgICAgICAgIC8qIHRoaXMgY291bGQgYmUgc3ViamVjdCBmb3IgbXVsdGlwbGV4IHVzZSwgYnV0IG9ubHkgaWYgdGhleSBiZWxvbmcgdG8KICAgICAgICAgICogdGhlIHNhbWUgbXVsdGkgaGFuZGxlICovCiAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTIyMCwyMiArMTI2NiwyNSBAQAogICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIGlmKCFuZWVkbGUtPmJpdHMuaHR0cHByb3h5IHx8IChuZWVkbGUtPmhhbmRsZXItPmZsYWdzJlBST1RPUFRfU1NMKSB8fAotICAgICAgICAgbmVlZGxlLT5iaXRzLnR1bm5lbF9wcm94eSkgeworICAgICAgaWYoKG5lZWRsZS0+aGFuZGxlci0+ZmxhZ3MmUFJPVE9QVF9TU0wpCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgICAgICAgfHwgIW5lZWRsZS0+Yml0cy5odHRwcHJveHkgfHwgbmVlZGxlLT5iaXRzLnR1bm5lbF9wcm94eQorI2VuZGlmCisgICAgICAgICkgewogICAgICAgICAvKiBUaGUgcmVxdWVzdGVkIGNvbm5lY3Rpb24gZG9lcyBub3QgdXNlIGEgSFRUUCBwcm94eSBvciBpdCB1c2VzIFNTTCBvcgogICAgICAgICAgICBpdCBpcyBhIG5vbi1TU0wgcHJvdG9jb2wgdHVubmVsZWQgb3IgaXQgaXMgYSBub24tU1NMIHByb3RvY29sIHdoaWNoCiAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gYmUgdXBncmFkZWQgdmlhIFRMUyAqLwogCiAgICAgICAgIGlmKChzdHJjYXNlY29tcGFyZShuZWVkbGUtPmhhbmRsZXItPnNjaGVtZSwgY2hlY2stPmhhbmRsZXItPnNjaGVtZSkgfHwKICAgICAgICAgICAgIChnZXRfcHJvdG9jb2xfZmFtaWx5KGNoZWNrLT5oYW5kbGVyLT5wcm90b2NvbCkgPT0KLSAgICAgICAgICAgICBuZWVkbGUtPmhhbmRsZXItPnByb3RvY29sICYmIGNoZWNrLT50bHNfdXBncmFkZWQpKSAmJgorICAgICAgICAgICAgIG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgJiYgY2hlY2stPmJpdHMudGxzX3VwZ3JhZGVkKSkgJiYKICAgICAgICAgICAgKCFuZWVkbGUtPmJpdHMuY29ubl90b19ob3N0IHx8IHN0cmNhc2Vjb21wYXJlKAogICAgICAgICAgICAgbmVlZGxlLT5jb25uX3RvX2hvc3QubmFtZSwgY2hlY2stPmNvbm5fdG9faG9zdC5uYW1lKSkgJiYKICAgICAgICAgICAgKCFuZWVkbGUtPmJpdHMuY29ubl90b19wb3J0IHx8CiAgICAgICAgICAgICAgbmVlZGxlLT5jb25uX3RvX3BvcnQgPT0gY2hlY2stPmNvbm5fdG9fcG9ydCkgJiYKICAgICAgICAgICAgc3RyY2FzZWNvbXBhcmUobmVlZGxlLT5ob3N0Lm5hbWUsIGNoZWNrLT5ob3N0Lm5hbWUpICYmCiAgICAgICAgICAgIG5lZWRsZS0+cmVtb3RlX3BvcnQgPT0gY2hlY2stPnJlbW90ZV9wb3J0KSB7Ci0gICAgICAgICAgLyogVGhlIHNjaGVtZXMgbWF0Y2ggb3IgdGhlIHRoZSBwcm90b2NvbCBmYW1pbHkgaXMgdGhlIHNhbWUgYW5kIHRoZQorICAgICAgICAgIC8qIFRoZSBzY2hlbWVzIG1hdGNoIG9yIHRoZSBwcm90b2NvbCBmYW1pbHkgaXMgdGhlIHNhbWUgYW5kIHRoZQogICAgICAgICAgICAgIHByZXZpb3VzIGNvbm5lY3Rpb24gd2FzIFRMUyB1cGdyYWRlZCwgYW5kIHRoZSBob3N0bmFtZSBhbmQgaG9zdAogICAgICAgICAgICAgIHBvcnQgbWF0Y2ggKi8KICAgICAgICAgICBpZihuZWVkbGUtPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TU0wpIHsKQEAgLTEyNzYsMTQgKzEzMjUsMjEgQEAKICAgICAgICAgICAgcGFydHdheSB0aHJvdWdoIGEgaGFuZHNoYWtlISkgKi8KICAgICAgICAgaWYod2FudE5UTE1odHRwKSB7CiAgICAgICAgICAgaWYoc3RyY21wKG5lZWRsZS0+dXNlciwgY2hlY2stPnVzZXIpIHx8Ci0gICAgICAgICAgICAgc3RyY21wKG5lZWRsZS0+cGFzc3dkLCBjaGVjay0+cGFzc3dkKSkKKyAgICAgICAgICAgICBzdHJjbXAobmVlZGxlLT5wYXNzd2QsIGNoZWNrLT5wYXNzd2QpKSB7CisKKyAgICAgICAgICAgIC8qIHdlIHByZWZlciBhIGNyZWRlbnRpYWwgbWF0Y2gsIGJ1dCB0aGlzIGlzIGF0IGxlYXN0IGEgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgcmV1c2VkIGFuZCAidXBncmFkZWQiIHRvIE5UTE0gKi8KKyAgICAgICAgICAgIGlmKGNoZWNrLT5odHRwX250bG1fc3RhdGUgPT0gTlRMTVNUQVRFX05PTkUpCisgICAgICAgICAgICAgIGNob3NlbiA9IGNoZWNrOwogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoY2hlY2stPmh0dHBfbnRsbV9zdGF0ZSAhPSBOVExNU1RBVEVfTk9ORSkgewogICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgdXNpbmcgTlRMTSBhdXRoIGJ1dCB3ZSBkb24ndCB3YW50IE5UTE0gKi8KICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgICAgICAvKiBTYW1lIGZvciBQcm94eSBOVExNIGF1dGhlbnRpY2F0aW9uICovCiAgICAgICAgIGlmKHdhbnRQcm94eU5UTE1odHRwKSB7CiAgICAgICAgICAgLyogQm90aCBjaGVjay0+aHR0cF9wcm94eS51c2VyIGFuZCBjaGVjay0+aHR0cF9wcm94eS5wYXNzd2QgY2FuIGJlCkBAIC0xMjk5LDcgKzEzNTUsNyBAQAogICAgICAgICAgIC8qIFByb3h5IGNvbm5lY3Rpb24gaXMgdXNpbmcgTlRMTSBhdXRoIGJ1dCB3ZSBkb24ndCB3YW50IE5UTE0gKi8KICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotCisjZW5kaWYKICAgICAgICAgaWYod2FudE5UTE1odHRwIHx8IHdhbnRQcm94eU5UTE1odHRwKSB7CiAgICAgICAgICAgLyogQ3JlZGVudGlhbHMgYXJlIGFscmVhZHkgY2hlY2tlZCwgd2UgY2FuIHVzZSB0aGlzIGNvbm5lY3Rpb24gKi8KICAgICAgICAgICBjaG9zZW4gPSBjaGVjazsKQEAgLTEzMzcsNiArMTM5MywxMyBAQAogICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZXhlZCk7CiAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZihtdWx0aXBsZXhlZCA+PQorICAgICAgICAgICAgICAgICAgICBDdXJsX211bHRpX21heF9jb25jdXJyZW50X3N0cmVhbXMobmVlZGxlLT5kYXRhLT5tdWx0aSkpIHsKKyAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgImNsaWVudCBzaWRlIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgcmVhY2hlZCIKKyAgICAgICAgICAgICAgICAgICAgIiwgc2tpcCAoJXp1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGV4ZWQpOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAvKiBXaGVuIG5vdCBtdWx0aXBsZXhlZCwgd2UgaGF2ZSBhIG1hdGNoIGhlcmUhICovCkBAIC0xMzU2LDExICsxNDE5LDEyIEBACiAgIGlmKGNob3NlbikgewogICAgIC8qIG1hcmsgaXQgYXMgdXNlZCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrICovCiAgICAgY2hvc2VuLT5kYXRhID0gZGF0YTsgLyogb3duIGl0ISAqLwotICAgIEN1cmxfY29ubmNhY2hlX3VubG9jayhkYXRhKTsKKyAgICBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihkYXRhLCBjaG9zZW4pOworICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAgICAgKnVzZXRoaXMgPSBjaG9zZW47CiAgICAgcmV0dXJuIFRSVUU7IC8qIHllcywgd2UgZm91bmQgb25lIHRvIHVzZSEgKi8KICAgfQotICBDdXJsX2Nvbm5jYWNoZV91bmxvY2soZGF0YSk7CisgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAKICAgaWYoZm91bmRQZW5kaW5nQ2FuZGlkYXRlICYmIGRhdGEtPnNldC5waXBld2FpdCkgewogICAgIGluZm9mKGRhdGEsCkBAIC0xMzcxLDU4ICsxNDM1LDYgQEAKICAgcmV0dXJuIEZBTFNFOyAvKiBubyBtYXRjaGluZyBjb25uZWN0aW5nIGV4aXN0cyAqLwogfQogCi0vKiBhZnRlciBhIFRDUCBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBoYXMgYmVlbiB2ZXJpZmllZCwgdGhpcyBmdW5jdGlvbiBkb2VzCi0gICB0aGUgbmV4dCBtYWdpYyBzdGVwLgotCi0gICBOb3RlOiB0aGlzIGZ1bmN0aW9uJ3Mgc3ViLWZ1bmN0aW9ucyBjYWxsIGZhaWxmKCkKLQotKi8KLUNVUkxjb2RlIEN1cmxfY29ubmVjdGVkX3Byb3h5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KSB7Ci0jaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQotICAgIC8qIGZvciB0aGUgc2Vjb25kYXJ5IHNvY2tldCAoRlRQKSwgdXNlIHRoZSAiY29ubmVjdCB0byBob3N0IgotICAgICAqIGJ1dCBpZ25vcmUgdGhlICJjb25uZWN0IHRvIHBvcnQiICh1c2UgdGhlIHNlY29uZGFyeSBwb3J0KQotICAgICAqLwotICAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0ID0gY29ubi0+Yml0cy5odHRwcHJveHkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5jb25uX3RvX2hvc3QgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Y29ubl90b19ob3N0Lm5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4ID09IFNFQ09OREFSWVNPQ0tFVCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5zZWNvbmRhcnlob3N0bmFtZSA6IGNvbm4tPmhvc3QubmFtZTsKLSAgICBjb25zdCBpbnQgcG9ydCA9IGNvbm4tPmJpdHMuaHR0cHByb3h5ID8gKGludCljb25uLT5odHRwX3Byb3h5LnBvcnQgOgotICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4ID09IFNFQ09OREFSWVNPQ0tFVCA/IGNvbm4tPnNlY29uZGFyeV9wb3J0IDoKLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuY29ubl90b19wb3J0ID8gY29ubi0+Y29ubl90b19wb3J0IDoKLSAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlbW90ZV9wb3J0OwotICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eV9jb25uZWN0aW5nID0gVFJVRTsKLSAgICBzd2l0Y2goY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlKSB7Ci0gICAgY2FzZSBDVVJMUFJPWFlfU09DS1M1OgotICAgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRToKLSAgICAgIHJlc3VsdCA9IEN1cmxfU09DS1M1KGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIsIGNvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBzb2NraW5kZXgsIGNvbm4pOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzQ6Ci0gICAgY2FzZSBDVVJMUFJPWFlfU09DS1M0QToKLSAgICAgIHJlc3VsdCA9IEN1cmxfU09DS1M0KGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIsIGhvc3QsIHBvcnQsIHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4pOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInVua25vd24gcHJveHl0eXBlIG9wdGlvbiBnaXZlbiIpOwotICAgICAgcmVzdWx0ID0gQ1VSTEVfQ09VTEROVF9DT05ORUNUOwotICAgIH0gLyogc3dpdGNoIHByb3h5dHlwZSAqLwotICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eV9jb25uZWN0aW5nID0gRkFMU0U7Ci0jZWxzZQotICAodm9pZClzb2NraW5kZXg7Ci0jZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCi0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCiAvKgogICogdmVyYm9zZWNvbm5lY3QoKSBkaXNwbGF5cyB2ZXJib3NlIGluZm9ybWF0aW9uIGFmdGVyIGEgY29ubmVjdAogICovCkBAIC0xNDMxLDE0MiArMTQ0MywyNyBAQAogewogICBpZihjb25uLT5kYXRhLT5zZXQudmVyYm9zZSkKICAgICBpbmZvZihjb25uLT5kYXRhLCAiQ29ubmVjdGVkIHRvICVzICglcykgcG9ydCAlbGQgKCMlbGQpXG4iLAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICAgICAgICBjb25uLT5iaXRzLnNvY2tzcHJveHkgPyBjb25uLT5zb2Nrc19wcm94eS5ob3N0LmRpc3BuYW1lIDoKICAgICAgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5kaXNwbmFtZSA6CisjZW5kaWYKICAgICAgICAgICBjb25uLT5iaXRzLmNvbm5fdG9faG9zdCA/IGNvbm4tPmNvbm5fdG9faG9zdC5kaXNwbmFtZSA6CiAgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSwKICAgICAgICAgICBjb25uLT5pcF9hZGRyX3N0ciwgY29ubi0+cG9ydCwgY29ubi0+Y29ubmVjdGlvbl9pZCk7CiB9CiAjZW5kaWYKIAotaW50IEN1cmxfcHJvdG9jb2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCi17Ci0gIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvX2dldHNvY2spCi0gICAgcmV0dXJuIGNvbm4tPmhhbmRsZXItPnByb3RvX2dldHNvY2soY29ubiwgc29ja3MsIG51bXNvY2tzKTsKLSAgLyogQmFja3VwIGdldHNvY2sgbG9naWMuIFNpbmNlIHRoZXJlIGlzIGEgbGl2ZSBzb2NrZXQgaW4gdXNlLCB3ZSBtdXN0IHdhaXQKLSAgICAgZm9yIGl0IG9yIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHdhdGNoaW5nIHdoZW4gdGhlIG11bHRpX3NvY2tldCBBUEkgaXMKLSAgICAgdXNlZC4gKi8KLSAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgcmV0dXJuIEdFVFNPQ0tfUkVBRFNPQ0soMCkgfCBHRVRTT0NLX1dSSVRFU09DSygwKTsKLX0KLQotaW50IEN1cmxfZG9pbmdfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCi17Ci0gIGlmKGNvbm4gJiYgY29ubi0+aGFuZGxlci0+ZG9pbmdfZ2V0c29jaykKLSAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+ZG9pbmdfZ2V0c29jayhjb25uLCBzb2NrcywgbnVtc29ja3MpOwotICByZXR1cm4gR0VUU09DS19CTEFOSzsKLX0KLQotLyoKLSAqIFdlIGFyZSBkb2luZyBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0aW5nIGFuZCB0aGlzIGlzIGJlaW5nIGNhbGxlZCBvdmVyIGFuZAotICogb3ZlciBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gcGhhc2UgaXMgZG9uZSBvbgotICogcHJvdG9jb2wgbGF5ZXIuCi0gKi8KLQotQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9jb25uZWN0aW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQotICBpZihjb25uICYmIGNvbm4tPmhhbmRsZXItPmNvbm5lY3RpbmcpIHsKLSAgICAqZG9uZSA9IEZBTFNFOwotICAgIHJlc3VsdCA9IGNvbm4tPmhhbmRsZXItPmNvbm5lY3RpbmcoY29ubiwgZG9uZSk7Ci0gIH0KLSAgZWxzZQotICAgICpkb25lID0gVFJVRTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogV2UgYXJlIERPSU5HIHRoaXMgaXMgYmVpbmcgY2FsbGVkIG92ZXIgYW5kIG92ZXIgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlCi0gKiB1bnRpbCB0aGUgRE9JTkcgcGhhc2UgaXMgZG9uZSBvbiBwcm90b2NvbCBsYXllci4KLSAqLwotCi1DVVJMY29kZSBDdXJsX3Byb3RvY29sX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgaWYoY29ubiAmJiBjb25uLT5oYW5kbGVyLT5kb2luZykgewotICAgICpkb25lID0gRkFMU0U7Ci0gICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+ZG9pbmcoY29ubiwgZG9uZSk7Ci0gIH0KLSAgZWxzZQotICAgICpkb25lID0gVFJVRTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogV2UgaGF2ZSBkaXNjb3ZlcmVkIHRoYXQgdGhlIFRDUCBjb25uZWN0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWwsIHdlIGNhbiBub3cKLSAqIHByb2NlZWQgd2l0aCBzb21lIGFjdGlvbi4KLSAqCi0gKi8KLUNVUkxjb2RlIEN1cmxfcHJvdG9jb2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcHJvdG9jb2xfZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0KLSAgKnByb3RvY29sX2RvbmUgPSBGQUxTRTsKLQotICBpZihjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdICYmIGNvbm4tPmJpdHMucHJvdG9jb25uc3RhcnQpIHsKLSAgICAvKiBXZSBhbHJlYWR5IGFyZSBjb25uZWN0ZWQsIGdldCBiYWNrLiBUaGlzIG1heSBoYXBwZW4gd2hlbiB0aGUgY29ubmVjdAotICAgICAgIHdvcmtlZCBmaW5lIGluIHRoZSBmaXJzdCBjYWxsLCBsaWtlIHdoZW4gd2UgY29ubmVjdCB0byBhIGxvY2FsIHNlcnZlcgotICAgICAgIG9yIHByb3h5LiBOb3RlIHRoYXQgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcHJvdG9jb2wgaXMgYWN0dWFsbHkgZG9uZS4KLQotICAgICAgIFVubGVzcyB0aGlzIHByb3RvY29sIGRvZXNuJ3QgaGF2ZSBhbnkgcHJvdG9jb2wtY29ubmVjdCBjYWxsYmFjaywgYXMKLSAgICAgICB0aGVuIHdlIGtub3cgd2UncmUgZG9uZS4gKi8KLSAgICBpZighY29ubi0+aGFuZGxlci0+Y29ubmVjdGluZykKLSAgICAgICpwcm90b2NvbF9kb25lID0gVFJVRTsKLQotICAgIHJldHVybiBDVVJMRV9PSzsKLSAgfQotCi0gIGlmKCFjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0KSB7Ci0KLSAgICByZXN1bHQgPSBDdXJsX3Byb3h5X2Nvbm5lY3QoY29ubiwgRklSU1RTT0NLRVQpOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZihDT05ORUNUX0ZJUlNUU09DS0VUX1BST1hZX1NTTCgpKQotICAgICAgLyogd2FpdCBmb3IgSFRUUFMgcHJveHkgU1NMIGluaXRpYWxpemF0aW9uIHRvIGNvbXBsZXRlICovCi0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0KLSAgICBpZihjb25uLT5iaXRzLnR1bm5lbF9wcm94eSAmJiBjb25uLT5iaXRzLmh0dHBwcm94eSAmJgotICAgICAgIEN1cmxfY29ubmVjdF9vbmdvaW5nKGNvbm4pKQotICAgICAgLyogd2hlbiB1c2luZyBhbiBIVFRQIHR1bm5lbCBwcm94eSwgYXdhaXQgY29tcGxldGUgdHVubmVsIGVzdGFibGlzaG1lbnQKLSAgICAgICAgIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuIFJldHVybiBDVVJMRV9PSyBzbyB3ZSdsbCBiZSBjYWxsZWQgYWdhaW4gKi8KLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLQotICAgIGlmKGNvbm4tPmhhbmRsZXItPmNvbm5lY3RfaXQpIHsKLSAgICAgIC8qIGlzIHRoZXJlIGEgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdCgpIHByb2NlZHVyZT8gKi8KLQotICAgICAgLyogQ2FsbCB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdCBmdW5jdGlvbiAqLwotICAgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+Y29ubmVjdF9pdChjb25uLCBwcm90b2NvbF9kb25lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgKnByb3RvY29sX2RvbmUgPSBUUlVFOwotCi0gICAgLyogaXQgaGFzIHN0YXJ0ZWQsIHBvc3NpYmx5IGV2ZW4gY29tcGxldGVkIGJ1dCB0aGF0IGtub3dsZWRnZSBpc24ndCBzdG9yZWQKLSAgICAgICBpbiB0aGlzIGJpdCEgKi8KLSAgICBpZighcmVzdWx0KQotICAgICAgY29ubi0+Yml0cy5wcm90b2Nvbm5zdGFydCA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OyAvKiBwYXNzIGJhY2sgc3RhdHVzICovCi19Ci0KIC8qCiAgKiBIZWxwZXJzIGZvciBJRE5BIGNvbnZlcnNpb25zLgogICovCi1zdGF0aWMgYm9vbCBpc19BU0NJSV9uYW1lKGNvbnN0IGNoYXIgKmhvc3RuYW1lKQorYm9vbCBDdXJsX2lzX0FTQ0lJX25hbWUoY29uc3QgY2hhciAqaG9zdG5hbWUpCiB7CisgIC8qIGdldCBhbiBVTlNJR05FRCBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBwb2ludGVyICovCiAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilob3N0bmFtZTsKIAorICBpZighaG9zdG5hbWUpIC8qIGJhZCBpbnB1dCwgY29uc2lkZXIgaXQgQVNDSUkhICovCisgICAgcmV0dXJuIFRSVUU7CisKICAgd2hpbGUoKmNoKSB7CiAgICAgaWYoKmNoKysgJiAweDgwKQogICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTU5MSw4ICsxNDg4LDggQEAKIC8qCiAgKiBQZXJmb3JtIGFueSBuZWNlc3NhcnkgSUROIGNvbnZlcnNpb24gb2YgaG9zdG5hbWUKICAqLwotc3RhdGljIENVUkxjb2RlIGlkbmNvbnZlcnRfaG9zdG5hbWUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RuYW1lICpob3N0KQorQ1VSTGNvZGUgQ3VybF9pZG5jb252ZXJ0X2hvc3RuYW1lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogCkBAIC0xNjA3LDcgKzE1MDQsNyBAQAogICBob3N0LT5kaXNwbmFtZSA9IGhvc3QtPm5hbWU7CiAKICAgLyogQ2hlY2sgbmFtZSBmb3Igbm9uLUFTQ0lJIGFuZCBjb252ZXJ0IGhvc3RuYW1lIHRvIEFDRSBmb3JtIGlmIHdlIGNhbiAqLwotICBpZighaXNfQVNDSUlfbmFtZShob3N0LT5uYW1lKSkgeworICBpZighQ3VybF9pc19BU0NJSV9uYW1lKGhvc3QtPm5hbWUpKSB7CiAjaWZkZWYgVVNFX0xJQklETjIKICAgICBpZihpZG4yX2NoZWNrX3ZlcnNpb24oSUROMl9WRVJTSU9OKSkgewogICAgICAgY2hhciAqYWNlX2hvc3RuYW1lID0gTlVMTDsKQEAgLTE2NDAsNyArMTUzNyw5IEBACiAgICAgICBob3N0LT5uYW1lID0gaG9zdC0+ZW5jYWxsb2M7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBjb252ZXJ0ICVzIHRvIEFDRTtcbiIsIGhvc3QtPm5hbWUpOworICAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gY29udmVydCAlcyB0byBBQ0U7ICVzXG4iLCBob3N0LT5uYW1lLAorICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgIHJldHVybiBDVVJMRV9VUkxfTUFMRk9STUFUOwogICAgIH0KICNlbHNlCkBAIC0xNjUzLDcgKzE1NTIsNyBAQAogLyoKICAqIEZyZWVzIGRhdGEgYWxsb2NhdGVkIGJ5IGlkbmNvbnZlcnRfaG9zdG5hbWUoKQogICovCi1zdGF0aWMgdm9pZCBmcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZShzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpCit2b2lkIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoc3RydWN0IGhvc3RuYW1lICpob3N0KQogewogI2lmIGRlZmluZWQoVVNFX0xJQklETjIpCiAgIGlmKGhvc3QtPmVuY2FsbG9jKSB7CkBAIC0xNjcwLDEzICsxNTY5LDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBsbGlzdF9kdG9yKHZvaWQgKnVzZXIsIHZvaWQgKmVsZW1lbnQpCi17Ci0gICh2b2lkKXVzZXI7Ci0gICh2b2lkKWVsZW1lbnQ7Ci0gIC8qIERvIG5vdGhpbmcgKi8KLX0KLQogLyoKICAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IGNvbm5lY3RkYXRhIG9iamVjdC4KICAqLwpAQCAtMTcwMSw4ICsxNTkzLDEwIEBACiAgICAgY29ubi0+c3NsX2V4dHJhID0gc3NsOwogICAgIGNvbm4tPnNzbFswXS5iYWNrZW5kID0gKHZvaWQgKilzc2w7CiAgICAgY29ubi0+c3NsWzFdLmJhY2tlbmQgPSAodm9pZCAqKShzc2wgKyBzc2xzaXplKTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgICAgY29ubi0+cHJveHlfc3NsWzBdLmJhY2tlbmQgPSAodm9pZCAqKShzc2wgKyAyICogc3Nsc2l6ZSk7CiAgICAgY29ubi0+cHJveHlfc3NsWzFdLmJhY2tlbmQgPSAodm9pZCAqKShzc2wgKyAzICogc3Nsc2l6ZSk7CisjZW5kaWYKICAgfQogI2VuZGlmCiAKQEAgLTE3NDEsMTAgKzE2MzUsMTAgQEAKICAgY29ubi0+ZGF0YSA9IGRhdGE7IC8qIFNldHVwIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoaXMgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBDdXJsX2Vhc3kgKi8KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY29ubi0+aHR0cF9wcm94eS5wcm94eXR5cGUgPSBkYXRhLT5zZXQucHJveHl0eXBlOwogICBjb25uLT5zb2Nrc19wcm94eS5wcm94eXR5cGUgPSBDVVJMUFJPWFlfU09DS1M0OwogCi0jaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1BST1hZKQogICAvKiBub3RlIHRoYXQgdGhlc2UgdHdvIHByb3h5IGJpdHMgYXJlIG5vdyBqdXN0IG9uIHdoYXQgbG9va3MgdG8gYmUKICAgICAgcmVxdWVzdGVkLCB0aGV5IG1heSBiZSBhbHRlcmVkIGRvd24gdGhlIHJvYWQgKi8KICAgY29ubi0+Yml0cy5wcm94eSA9IChkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV0gJiYKQEAgLTE3NzUsMjAgKzE2NjksMjQgQEAKICAgY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlzdGF0dXMgPSBkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5c3RhdHVzOwogICBjb25uLT5zc2xfY29uZmlnLnZlcmlmeXBlZXIgPSBkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5cGVlcjsKICAgY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlob3N0ID0gZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeWhvc3Q7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25uLT5wcm94eV9zc2xfY29uZmlnLnZlcmlmeXN0YXR1cyA9CiAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeXN0YXR1czsKICAgY29ubi0+cHJveHlfc3NsX2NvbmZpZy52ZXJpZnlwZWVyID0gZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeXBlZXI7CiAgIGNvbm4tPnByb3h5X3NzbF9jb25maWcudmVyaWZ5aG9zdCA9IGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS52ZXJpZnlob3N0OworI2VuZGlmCiAgIGNvbm4tPmlwX3ZlcnNpb24gPSBkYXRhLT5zZXQuaXB2ZXI7CiAgIGNvbm4tPmJpdHMuY29ubmVjdF9vbmx5ID0gZGF0YS0+c2V0LmNvbm5lY3Rfb25seTsKKyAgY29ubi0+dHJhbnNwb3J0ID0gVFJOU1BSVF9UQ1A7IC8qIG1vc3Qgb2YgdGhlbSBhcmUgVENQIHN0cmVhbXMgKi8KIAogI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9IVFRQKSAmJiBkZWZpbmVkKFVTRV9OVExNKSAmJiBcCiAgICAgZGVmaW5lZChOVExNX1dCX0VOQUJMRUQpCi0gIGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCA9IENVUkxfU09DS0VUX0JBRDsKKyAgY29ubi0+bnRsbS5udGxtX2F1dGhfaGxwcl9zb2NrZXQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIGNvbm4tPnByb3h5bnRsbS5udGxtX2F1dGhfaGxwcl9zb2NrZXQgPSBDVVJMX1NPQ0tFVF9CQUQ7CiAjZW5kaWYKIAogICAvKiBJbml0aWFsaXplIHRoZSBlYXN5IGhhbmRsZSBsaXN0ICovCi0gIEN1cmxfbGxpc3RfaW5pdCgmY29ubi0+ZWFzeXEsIChjdXJsX2xsaXN0X2R0b3IpIGxsaXN0X2R0b3IpOworICBDdXJsX2xsaXN0X2luaXQoJmNvbm4tPmVhc3lxLCBOVUxMKTsKIAogI2lmZGVmIEhBVkVfR1NTQVBJCiAgIGNvbm4tPmRhdGFfcHJvdCA9IFBST1RfQ0xFQVI7CkBAIC0xODA3LDYgKzE3MDUsNyBAQAogICAgICBpdCBtYXkgbGl2ZSBvbiB3aXRob3V0ICh0aGlzIHNwZWNpZmljKSBDdXJsX2Vhc3kgKi8KICAgY29ubi0+ZmNsb3Nlc29ja2V0ID0gZGF0YS0+c2V0LmZjbG9zZXNvY2tldDsKICAgY29ubi0+Y2xvc2Vzb2NrZXRfY2xpZW50ID0gZGF0YS0+c2V0LmNsb3Nlc29ja2V0X2NsaWVudDsKKyAgY29ubi0+bGFzdHVzZWQgPSBDdXJsX25vdygpOyAvKiB1c2VkIG5vdyAqLwogCiAgIHJldHVybiBjb25uOwogICBlcnJvcjoKQEAgLTE4ODQsNiArMTc4Myw1MCBAQAogfQogCiAvKgorICogSWYgdGhlIFVSTCB3YXMgc2V0IHdpdGggYW4gSVB2NiBudW1lcmljYWwgYWRkcmVzcyB3aXRoIGEgem9uZSBpZCBwYXJ0LCBzZXQKKyAqIHRoZSBzY29wZV9pZCBiYXNlZCBvbiB0aGF0IQorICovCisKK3N0YXRpYyB2b2lkIHpvbmVmcm9tX3VybChDVVJMVSAqdWgsIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgY2hhciAqem9uZWlkOworICBDVVJMVWNvZGUgdWM7CisKKyAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9aT05FSUQsICZ6b25laWQsIDApOworCisgIGlmKCF1YyAmJiB6b25laWQpIHsKKyAgICBjaGFyICplbmRwOworICAgIHVuc2lnbmVkIGxvbmcgc2NvcGUgPSBzdHJ0b3VsKHpvbmVpZCwgJmVuZHAsIDEwKTsKKyAgICBpZighKmVuZHAgJiYgKHNjb3BlIDwgVUlOVF9NQVgpKQorICAgICAgLyogQSBwbGFpbiBudW1iZXIsIHVzZSBpdCBkaXJlY3RseSBhcyBhIHNjb3BlIGlkLiAqLworICAgICAgY29ubi0+c2NvcGVfaWQgPSAodW5zaWduZWQgaW50KXNjb3BlOworI2lmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkKKyAgICBlbHNlIHsKKyNlbGlmIGRlZmluZWQoV0lOMzIpCisgICAgZWxzZSBpZihDdXJsX2lmX25hbWV0b2luZGV4KSB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkgfHwgZGVmaW5lZChXSU4zMikKKyAgICAgIC8qIFpvbmUgaWRlbnRpZmllciBpcyBub3QgbnVtZXJpYyAqLworICAgICAgdW5zaWduZWQgaW50IHNjb3BlaWR4ID0gMDsKKyNpZiBkZWZpbmVkKFdJTjMyKQorICAgICAgc2NvcGVpZHggPSBDdXJsX2lmX25hbWV0b2luZGV4KHpvbmVpZCk7CisjZWxzZQorICAgICAgc2NvcGVpZHggPSBpZl9uYW1ldG9pbmRleCh6b25laWQpOworI2VuZGlmCisgICAgICBpZighc2NvcGVpZHgpCisgICAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJJbnZhbGlkIHpvbmVpZDogJXM7ICVzXG4iLCB6b25laWQsCisgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBlbHNlCisgICAgICAgIGNvbm4tPnNjb3BlX2lkID0gc2NvcGVpZHg7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfSUZfTkFNRVRPSU5ERVggfHwgV0lOMzIgKi8KKworICAgIGZyZWUoem9uZWlkKTsKKyAgfQorfQorCisvKgogICogUGFyc2UgVVJMIGFuZCBmaWxsIGluIHRoZSByZWxldmFudCBtZW1iZXJzIG9mIHRoZSBjb25uZWN0aW9uIHN0cnVjdC4KICAqLwogc3RhdGljIENVUkxjb2RlIHBhcnNldXJsYW5kZmlsbGNvbm4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKQEAgLTE5MjEsNiArMTg2NCw3IEBACiAgIH0KIAogICBpZighZGF0YS0+c2V0LnVoKSB7CisgICAgY2hhciAqbmV3dXJsOwogICAgIHVjID0gY3VybF91cmxfc2V0KHVoLCBDVVJMVVBBUlRfVVJMLCBkYXRhLT5jaGFuZ2UudXJsLAogICAgICAgICAgICAgICAgICAgICBDVVJMVV9HVUVTU19TQ0hFTUUgfAogICAgICAgICAgICAgICAgICAgICBDVVJMVV9OT05fU1VQUE9SVF9TQ0hFTUUgfApAQCAtMTkzMSw2ICsxODc1LDE1IEBACiAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgImN1cmxfdXJsX3NldCByZWplY3RlZCAlc1xuIiwgZGF0YS0+Y2hhbmdlLnVybCkpOwogICAgICAgcmV0dXJuIEN1cmxfdWNfdG9fY3VybGNvZGUodWMpOwogICAgIH0KKworICAgIC8qIGFmdGVyIGl0IHdhcyBwYXJzZWQsIGdldCB0aGUgZ2VuZXJhdGVkIG5vcm1hbGl6ZWQgdmVyc2lvbiAqLworICAgIHVjID0gY3VybF91cmxfZ2V0KHVoLCBDVVJMVVBBUlRfVVJMLCAmbmV3dXJsLCAwKTsKKyAgICBpZih1YykKKyAgICAgIHJldHVybiBDdXJsX3VjX3RvX2N1cmxjb2RlKHVjKTsKKyAgICBpZihkYXRhLT5jaGFuZ2UudXJsX2FsbG9jKQorICAgICAgZnJlZShkYXRhLT5jaGFuZ2UudXJsKTsKKyAgICBkYXRhLT5jaGFuZ2UudXJsID0gbmV3dXJsOworICAgIGRhdGEtPmNoYW5nZS51cmxfYWxsb2MgPSBUUlVFOwogICB9CiAKICAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9TQ0hFTUUsICZkYXRhLT5zdGF0ZS51cC5zY2hlbWUsIDApOwpAQCAtMTk0MSwyMyArMTg5NCwzMiBAQAogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAotICB1YyA9IGN1cmxfdXJsX2dldCh1aCwgQ1VSTFVQQVJUX1VTRVIsICZkYXRhLT5zdGF0ZS51cC51c2VyLAotICAgICAgICAgICAgICAgICAgICBDVVJMVV9VUkxERUNPREUpOworICAvKiB3ZSBkb24ndCB1c2UgdGhlIFVSTCBBUEkncyBVUkwgZGVjb2RlciBvcHRpb24gaGVyZSBzaW5jZSBpdCByZWplY3RzCisgICAgIGNvbnRyb2wgY29kZXMgYW5kIHdlIHdhbnQgdG8gYWxsb3cgdGhlbSBmb3Igc29tZSBzY2hlbWVzIGluIHRoZSB1c2VyIGFuZAorICAgICBwYXNzd29yZCBmaWVsZHMgKi8KKyAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9VU0VSLCAmZGF0YS0+c3RhdGUudXAudXNlciwgMCk7CiAgIGlmKCF1YykgewotICAgIGNvbm4tPnVzZXIgPSBzdHJkdXAoZGF0YS0+c3RhdGUudXAudXNlcik7Ci0gICAgaWYoIWNvbm4tPnVzZXIpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBjaGFyICpkZWNvZGVkOworICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKE5VTEwsIGRhdGEtPnN0YXRlLnVwLnVzZXIsIDAsICZkZWNvZGVkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhhbmRsZXItPmZsYWdzJlBST1RPUFRfVVNFUlBXRENUUkwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFSkVDVF9aRVJPIDogUkVKRUNUX0NUUkwpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgY29ubi0+dXNlciA9IGRlY29kZWQ7CiAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCA9IFRSVUU7CiAgIH0KICAgZWxzZSBpZih1YyAhPSBDVVJMVUVfTk9fVVNFUikKICAgICByZXR1cm4gQ3VybF91Y190b19jdXJsY29kZSh1Yyk7CiAKLSAgdWMgPSBjdXJsX3VybF9nZXQodWgsIENVUkxVUEFSVF9QQVNTV09SRCwgJmRhdGEtPnN0YXRlLnVwLnBhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICBDVVJMVV9VUkxERUNPREUpOworICB1YyA9IGN1cmxfdXJsX2dldCh1aCwgQ1VSTFVQQVJUX1BBU1NXT1JELCAmZGF0YS0+c3RhdGUudXAucGFzc3dvcmQsIDApOwogICBpZighdWMpIHsKLSAgICBjb25uLT5wYXNzd2QgPSBzdHJkdXAoZGF0YS0+c3RhdGUudXAucGFzc3dvcmQpOwotICAgIGlmKCFjb25uLT5wYXNzd2QpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBjaGFyICpkZWNvZGVkOworICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKE5VTEwsIGRhdGEtPnN0YXRlLnVwLnBhc3N3b3JkLCAwLCAmZGVjb2RlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5oYW5kbGVyLT5mbGFncyZQUk9UT1BUX1VTRVJQV0RDVFJMID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUpFQ1RfWkVSTyA6IFJFSkVDVF9DVFJMKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIGNvbm4tPnBhc3N3ZCA9IGRlY29kZWQ7CiAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCA9IFRSVUU7CiAgIH0KICAgZWxzZSBpZih1YyAhPSBDVVJMVUVfTk9fUEFTU1dPUkQpCkBAIC0xOTkxLDU1ICsxOTUzLDI3IEBACiAgIH0KICAgZWxzZSB7CiAgICAgdW5zaWduZWQgbG9uZyBwb3J0ID0gc3RydG91bChkYXRhLT5zdGF0ZS51cC5wb3J0LCBOVUxMLCAxMCk7Ci0gICAgY29ubi0+cmVtb3RlX3BvcnQgPSBjdXJseF91bHRvdXMocG9ydCk7CisgICAgY29ubi0+cG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0ID0gY3VybHhfdWx0b3VzKHBvcnQpOwogICB9CiAKICAgKHZvaWQpY3VybF91cmxfZ2V0KHVoLCBDVVJMVVBBUlRfUVVFUlksICZkYXRhLT5zdGF0ZS51cC5xdWVyeSwgMCk7CiAKICAgaG9zdG5hbWUgPSBkYXRhLT5zdGF0ZS51cC5ob3N0bmFtZTsKLSAgaWYoIWhvc3RuYW1lKQotICAgIC8qIHRoaXMgaXMgZm9yIGZpbGU6Ly8gdHJhbnNmZXJzLCBnZXQgYSBkdW1teSBtYWRlICovCi0gICAgaG9zdG5hbWUgPSAoY2hhciAqKSIiOwotCi0gIGlmKGhvc3RuYW1lWzBdID09ICdbJykgeworICBpZihob3N0bmFtZSAmJiBob3N0bmFtZVswXSA9PSAnWycpIHsKICAgICAvKiBUaGlzIGxvb2tzIGxpa2UgYW4gSVB2NiBhZGRyZXNzIGxpdGVyYWwuIFNlZSBpZiB0aGVyZSBpcyBhbiBhZGRyZXNzCiAgICAgICAgc2NvcGUuICovCi0gICAgY2hhciAqem9uZWlkOwogICAgIHNpemVfdCBobGVuOwotICAgIHVjID0gY3VybF91cmxfZ2V0KHVoLCBDVVJMVVBBUlRfWk9ORUlELCAmem9uZWlkLCAwKTsKICAgICBjb25uLT5iaXRzLmlwdjZfaXAgPSBUUlVFOwotCiAgICAgLyogY3V0IG9mZiB0aGUgYnJhY2tldHMhICovCiAgICAgaG9zdG5hbWUrKzsKICAgICBobGVuID0gc3RybGVuKGhvc3RuYW1lKTsKICAgICBob3N0bmFtZVtobGVuIC0gMV0gPSAwOwotICAgIGlmKCF1YyAmJiB6b25laWQpIHsKLSAgICAgIGNoYXIgKmVuZHA7Ci0gICAgICB1bnNpZ25lZCBsb25nIHNjb3BlOwotICAgICAgc2NvcGUgPSBzdHJ0b3VsKHpvbmVpZCwgJmVuZHAsIDEwKTsKLSAgICAgIGlmKCEqZW5kcCAmJiAoc2NvcGUgPCBVSU5UX01BWCkpIHsKLSAgICAgICAgLyogQSBwbGFpbiBudW1iZXIsIHVzZSBpdCBkaXJlY2x5IGFzIGEgc2NvcGUgaWQuICovCi0gICAgICAgIGNvbm4tPnNjb3BlX2lkID0gKHVuc2lnbmVkIGludClzY29wZTsKLSAgICAgIH0KLSNpZmRlZiBIQVZFX0lGX05BTUVUT0lOREVYCi0gICAgICBlbHNlIHsKLSAgICAgICAgLyogWm9uZSBpZGVudGlmaWVyIGlzIG5vdCBudW1lcmljICovCi0gICAgICAgIHVuc2lnbmVkIGludCBzY29wZWlkeCA9IDA7Ci0gICAgICAgIHNjb3BlaWR4ID0gaWZfbmFtZXRvaW5kZXgoem9uZWlkKTsKLSAgICAgICAgaWYoIXNjb3BlaWR4KQotICAgICAgICAgIGluZm9mKGRhdGEsICJJbnZhbGlkIHpvbmVpZCBpZDogJXM7ICVzXG4iLCB6b25laWQsCi0gICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbm4tPnNjb3BlX2lkID0gc2NvcGVpZHg7CiAKLSAgICAgIH0KLSNlbmRpZiAvKiBIQVZFX0lGX05BTUVUT0lOREVYICovCi0gICAgICBmcmVlKHpvbmVpZCk7Ci0gICAgfQorICAgIHpvbmVmcm9tX3VybCh1aCwgY29ubik7CiAgIH0KIAogICAvKiBtYWtlIHN1cmUgdGhlIGNvbm5lY3Qgc3RydWN0IGdldHMgaXRzIG93biBjb3B5IG9mIHRoZSBob3N0IG5hbWUgKi8KLSAgY29ubi0+aG9zdC5yYXdhbGxvYyA9IHN0cmR1cChob3N0bmFtZSk7CisgIGNvbm4tPmhvc3QucmF3YWxsb2MgPSBzdHJkdXAoaG9zdG5hbWUgPyBob3N0bmFtZSA6ICIiKTsKICAgaWYoIWNvbm4tPmhvc3QucmF3YWxsb2MpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIGNvbm4tPmhvc3QubmFtZSA9IGNvbm4tPmhvc3QucmF3YWxsb2M7CkBAIC0yMDk1LDkgKzIwMjksOCBAQAogICovCiBzdGF0aWMgQ1VSTGNvZGUgc2V0dXBfY29ubmVjdGlvbl9pbnRlcm5hbHMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewotICBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyICogcDsKKyAgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqcDsKICAgQ1VSTGNvZGUgcmVzdWx0OwotICBjb25uLT5zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOyAvKiBtb3N0IG9mIHRoZW0gYXJlIFRDUCBzdHJlYW1zICovCiAKICAgLyogUGVyZm9ybSBzZXR1cCBjb21wbGVtZW50IGlmIHNvbWUuICovCiAgIHAgPSBjb25uLT5oYW5kbGVyOwpAQCAtMjEyOCw2ICsyMDYxLDExIEBACiB7CiAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+cmVxLnByb3RvcCk7CiAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+cmVxLm5ld3VybCk7CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0RPSAorICBDdXJsX2Nsb3NlKCZkYXRhLT5yZXEuZG9oLnByb2JlWzBdLmVhc3kpOworICBDdXJsX2Nsb3NlKCZkYXRhLT5yZXEuZG9oLnByb2JlWzFdLmVhc3kpOworI2VuZGlmCiB9CiAKIApAQCAtMjI5OCw3ICsyMjM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKnByb3h5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfcHJveHl0eXBlIHByb3h5dHlwZSkKIHsKLSAgY2hhciAqcG9ydHB0cjsKKyAgY2hhciAqcG9ydHB0ciA9IE5VTEw7CiAgIGxvbmcgcG9ydCA9IC0xOwogICBjaGFyICpwcm94eXVzZXIgPSBOVUxMOwogICBjaGFyICpwcm94eXBhc3N3ZCA9IE5VTEw7CkBAIC0yNDIyLDYgKzIzNjAsNyBAQAogICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oaG9zdCk7CiAgICAgaG9zdFtsZW4tMV0gPSAwOyAvKiBjbGVhciB0aGUgdHJhaWxpbmcgYnJhY2tldCAqLwogICAgIGhvc3QrKzsKKyAgICB6b25lZnJvbV91cmwodWhwLCBjb25uKTsKICAgfQogICBwcm94eWluZm8tPmhvc3QubmFtZSA9IGhvc3Q7CiAKQEAgLTI0MzcsMjYgKzIzNzYsMTYgQEAKIHN0YXRpYyBDVVJMY29kZSBwYXJzZV9wcm94eV9hdXRoKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIGNoYXIgcHJveHl1c2VyW01BWF9DVVJMX1VTRVJfTEVOR1RIXT0iIjsKLSAgY2hhciBwcm94eXBhc3N3ZFtNQVhfQ1VSTF9QQVNTV09SRF9MRU5HVEhdPSIiOwotICBDVVJMY29kZSByZXN1bHQ7CisgIGNoYXIgKnByb3h5dXNlciA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZVVNFUk5BTUVdOworICBjaGFyICpwcm94eXBhc3N3ZCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZUEFTU1dPUkRdOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWVVTRVJOQU1FXSAhPSBOVUxMKSB7Ci0gICAgc3RybmNweShwcm94eXVzZXIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZVVNFUk5BTUVdLAotICAgICAgICAgICAgTUFYX0NVUkxfVVNFUl9MRU5HVEgpOwotICAgIHByb3h5dXNlcltNQVhfQ1VSTF9VU0VSX0xFTkdUSC0xXSA9ICdcMCc7ICAgLypUbyBiZSBvbiBzYWZlIHNpZGUqLwotICB9Ci0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZUEFTU1dPUkRdICE9IE5VTEwpIHsKLSAgICBzdHJuY3B5KHByb3h5cGFzc3dkLCBkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWVBBU1NXT1JEXSwKLSAgICAgICAgICAgIE1BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSCk7Ci0gICAgcHJveHlwYXNzd2RbTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RILTFdID0gJ1wwJzsgLypUbyBiZSBvbiBzYWZlIHNpZGUqLwotICB9Ci0KLSAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgcHJveHl1c2VyLCAwLCAmY29ubi0+aHR0cF9wcm94eS51c2VyLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSk7Ci0gIGlmKCFyZXN1bHQpCisgIGlmKHByb3h5dXNlcikKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBwcm94eXVzZXIsIDAsICZjb25uLT5odHRwX3Byb3h5LnVzZXIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVKRUNUX1pFUk8pOworICBpZighcmVzdWx0ICYmIHByb3h5cGFzc3dkKQogICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIHByb3h5cGFzc3dkLCAwLCAmY29ubi0+aHR0cF9wcm94eS5wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFJFSkVDVF9aRVJPKTsKICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjY3NCw2ICsyNjAzLDEyIEBACiAgIHNpemVfdCBwbGVuOwogICBzaXplX3Qgb2xlbjsKIAorICAvKiB0aGUgaW5wdXQgbGVuZ3RoIGNoZWNrIGlzIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZGlyZWN0Y2x5IGZyb20gc2V0b3B0CisgICAgIGFuZCBpc24ndCBnb2luZyB0aHJvdWdoIHRoZSByZWd1bGFyIHN0cmluZyBsZW5ndGggY2hlY2sgKi8KKyAgc2l6ZV90IGxsZW4gPSBzdHJsZW4obG9naW4pOworICBpZihsbGVuID4gQ1VSTF9NQVhfSU5QVVRfTEVOR1RIKQorICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisKICAgLyogQXR0ZW1wdCB0byBmaW5kIHRoZSBwYXNzd29yZCBzZXBhcmF0b3IgKi8KICAgaWYocGFzc3dkcCkgewogICAgIHBzZXAgPSBzdHJjaHIobG9naW4sICc6Jyk7CkBAIC0yODQ2LDggKzI3ODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV0cmNfdXNlcl9jaGFuZ2VkLCAmbmV0cmNfcGFzc3dkX2NoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX05FVFJDX0ZJTEVdKTsKICAgICBpZihyZXQgPiAwKSB7Ci0gICAgICBpbmZvZihkYXRhLCAiQ291bGRuJ3QgZmluZCBob3N0ICVzIGluIHRoZSAiCi0gICAgICAgICAgICBET1RfQ0hBUiAibmV0cmMgZmlsZTsgdXNpbmcgZGVmYXVsdHNcbiIsCisgICAgICBpbmZvZihkYXRhLCAiQ291bGRuJ3QgZmluZCBob3N0ICVzIGluIHRoZSAubmV0cmMgZmlsZTsgdXNpbmcgZGVmYXVsdHNcbiIsCiAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUpOwogICAgIH0KICAgICBlbHNlIGlmKHJldCA8IDApIHsKQEAgLTI4NzEsMTIgKzI4MDUsMTQgQEAKIAogICAvKiBmb3IgdXBkYXRlZCBzdHJpbmdzLCB3ZSB1cGRhdGUgdGhlbSBpbiB0aGUgVVJMICovCiAgIGlmKHVzZXJfY2hhbmdlZCkgewotICAgIHVjID0gY3VybF91cmxfc2V0KGRhdGEtPnN0YXRlLnVoLCBDVVJMVVBBUlRfVVNFUiwgKnVzZXJwLCAwKTsKKyAgICB1YyA9IGN1cmxfdXJsX3NldChkYXRhLT5zdGF0ZS51aCwgQ1VSTFVQQVJUX1VTRVIsICp1c2VycCwKKyAgICAgICAgICAgICAgICAgICAgICBDVVJMVV9VUkxFTkNPREUpOwogICAgIGlmKHVjKQogICAgICAgcmV0dXJuIEN1cmxfdWNfdG9fY3VybGNvZGUodWMpOwogICB9CiAgIGlmKHBhc3N3ZF9jaGFuZ2VkKSB7Ci0gICAgdWMgPSBjdXJsX3VybF9zZXQoZGF0YS0+c3RhdGUudWgsIENVUkxVUEFSVF9QQVNTV09SRCwgKnBhc3N3ZHAsIDApOworICAgIHVjID0gY3VybF91cmxfc2V0KGRhdGEtPnN0YXRlLnVoLCBDVVJMVVBBUlRfUEFTU1dPUkQsICpwYXNzd2RwLAorICAgICAgICAgICAgICAgICAgICAgIENVUkxVX1VSTEVOQ09ERSk7CiAgICAgaWYodWMpCiAgICAgICByZXR1cm4gQ3VybF91Y190b19jdXJsY29kZSh1Yyk7CiAgIH0KQEAgLTI5MTMsMTMgKzI4NDksNiBAQAogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogCi0gIC8qIGlmIHRoZXJlJ3MgYSB1c2VyIHdpdGhvdXQgcGFzc3dvcmQsIGNvbnNpZGVyIHBhc3N3b3JkIGJsYW5rICovCi0gIGlmKGNvbm4tPnVzZXIgJiYgIWNvbm4tPnBhc3N3ZCkgewotICAgIGNvbm4tPnBhc3N3ZCA9IHN0cmR1cCgiIik7Ci0gICAgaWYoIWNvbm4tPnBhc3N3ZCkKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLQogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMTQyLDI4ICszMDcxLDc0IEBACiAKICNpZmRlZiBVU0VfQUxUU1ZDCiAgIGlmKGRhdGEtPmFzaSAmJiAhaG9zdCAmJiAocG9ydCA9PSAtMSkgJiYKLSAgICAgKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19IVFRQUykpIHsKKyAgICAgKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCA9PSBDVVJMUFJPVE9fSFRUUFMpIHx8CisjaWZkZWYgQ1VSTERFQlVHCisgICAgICAvKiBhbGxvdyBkZWJ1ZyBidWlsZHMgdG8gY2lyY3VtdmVudCB0aGUgSFRUUFMgcmVzdHJpY3Rpb24gKi8KKyAgICAgIGdldGVudigiQ1VSTF9BTFRTVkNfSFRUUCIpCisjZWxzZQorICAgICAgMAorI2VuZGlmCisgICAgICAgKSkgewogICAgIC8qIG5vIGNvbm5lY3RfdG8gbWF0Y2gsIHRyeSBhbHQtc3ZjISAqLwotICAgIGNvbnN0IGNoYXIgKm5ob3N0OwotICAgIGludCBucG9ydDsKLSAgICBlbnVtIGFscG5pZCBuYWxwbmlkOworICAgIGVudW0gYWxwbmlkIHNyY2FscG5pZDsKICAgICBib29sIGhpdDsKKyAgICBzdHJ1Y3QgYWx0c3ZjICphczsKKyAgICBjb25zdCBpbnQgYWxsb3dlZF92ZXJzaW9ucyA9ICggQUxQTl9oMQorI2lmZGVmIFVTRV9OR0hUVFAyCisgICAgICB8IEFMUE5faDIKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9RVUlDCisgICAgICB8IEFMUE5faDMKKyNlbmRpZgorICAgICAgKSAmIGRhdGEtPmFzaS0+ZmxhZ3M7CisKICAgICBob3N0ID0gY29ubi0+aG9zdC5yYXdhbGxvYzsKKyNpZmRlZiBVU0VfTkdIVFRQMgorICAgIC8qIHdpdGggaDIgc3VwcG9ydCwgY2hlY2sgdGhhdCBmaXJzdCAqLworICAgIHNyY2FscG5pZCA9IEFMUE5faDI7CiAgICAgaGl0ID0gQ3VybF9hbHRzdmNfbG9va3VwKGRhdGEtPmFzaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxQTl9oMSwgaG9zdCwgY29ubi0+cmVtb3RlX3BvcnQsIC8qIGZyb20gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbHBuaWQsICZuaG9zdCwgJm5wb3J0IC8qIHRvICovKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjYWxwbmlkLCBob3N0LCBjb25uLT5yZW1vdGVfcG9ydCwgLyogZnJvbSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXMgLyogdG8gKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRfdmVyc2lvbnMpOworICAgIGlmKCFoaXQpCisjZW5kaWYKKyAgICB7CisgICAgICBzcmNhbHBuaWQgPSBBTFBOX2gxOworICAgICAgaGl0ID0gQ3VybF9hbHRzdmNfbG9va3VwKGRhdGEtPmFzaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNhbHBuaWQsIGhvc3QsIGNvbm4tPnJlbW90ZV9wb3J0LCAvKiBmcm9tICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFzIC8qIHRvICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRfdmVyc2lvbnMpOworICAgIH0KICAgICBpZihoaXQpIHsKLSAgICAgIGNoYXIgKmhvc3RkID0gc3RyZHVwKChjaGFyICopbmhvc3QpOworICAgICAgY2hhciAqaG9zdGQgPSBzdHJkdXAoKGNoYXIgKilhcy0+ZHN0Lmhvc3QpOwogICAgICAgaWYoIWhvc3RkKQogICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgIGNvbm4tPmNvbm5fdG9faG9zdC5yYXdhbGxvYyA9IGhvc3RkOwogICAgICAgY29ubi0+Y29ubl90b19ob3N0Lm5hbWUgPSBob3N0ZDsKICAgICAgIGNvbm4tPmJpdHMuY29ubl90b19ob3N0ID0gVFJVRTsKLSAgICAgIGNvbm4tPmNvbm5fdG9fcG9ydCA9IG5wb3J0OworICAgICAgY29ubi0+Y29ubl90b19wb3J0ID0gYXMtPmRzdC5wb3J0OwogICAgICAgY29ubi0+Yml0cy5jb25uX3RvX3BvcnQgPSBUUlVFOworICAgICAgY29ubi0+Yml0cy5hbHR1c2VkID0gVFJVRTsKICAgICAgIGluZm9mKGRhdGEsICJBbHQtc3ZjIGNvbm5lY3RpbmcgZnJvbSBbJXNdJXM6JWQgdG8gWyVzXSVzOiVkXG4iLAotICAgICAgICAgICAgQ3VybF9hbHBuaWQyc3RyKEFMUE5faDEpLCBob3N0LCBjb25uLT5yZW1vdGVfcG9ydCwKLSAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihuYWxwbmlkKSwgaG9zdGQsIG5wb3J0KTsKKyAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihzcmNhbHBuaWQpLCBob3N0LCBjb25uLT5yZW1vdGVfcG9ydCwKKyAgICAgICAgICAgIEN1cmxfYWxwbmlkMnN0cihhcy0+ZHN0LmFscG5pZCksIGhvc3RkLCBhcy0+ZHN0LnBvcnQpOworICAgICAgaWYoc3JjYWxwbmlkICE9IGFzLT5kc3QuYWxwbmlkKSB7CisgICAgICAgIC8qIHByb3RvY29sIHZlcnNpb24gc3dpdGNoICovCisgICAgICAgIHN3aXRjaChhcy0+ZHN0LmFscG5pZCkgeworICAgICAgICBjYXNlIEFMUE5faDE6CisgICAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPSAxMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTFBOX2gyOgorICAgICAgICAgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMjA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxQTl9oMzoKKyAgICAgICAgICBjb25uLT50cmFuc3BvcnQgPSBUUk5TUFJUX1FVSUM7CisgICAgICAgICAgY29ubi0+aHR0cHZlcnNpb24gPSAzMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLyogc2hvdWxkbid0IGJlIHBvc3NpYmxlICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KICAgICB9CiAgIH0KICNlbmRpZgpAQCAtMzIxMCw3ICszMTg1LDcgQEAKICAgICAgIGVsc2UgewogICAgICAgICBib29sIGxvbmdwYXRoID0gRkFMU0U7CiAgICAgICAgIGhvc3RhZGRyLT5hZGRyID0gQ3VybF91bml4MmFkZHIocGF0aCwgJmxvbmdwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFic3RyYWN0X3VuaXhfc29ja2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmFic3RyYWN0X3VuaXhfc29ja2V0KTsKICAgICAgICAgaWYoaG9zdGFkZHItPmFkZHIpCiAgICAgICAgICAgaG9zdGFkZHItPmludXNlKys7CiAgICAgICAgIGVsc2UgewpAQCAtMzIyOCw2ICszMjAzLDcgQEAKICAgICB9CiAgICAgZWxzZQogI2VuZGlmCisKICAgICBpZighY29ubi0+Yml0cy5wcm94eSkgewogICAgICAgc3RydWN0IGhvc3RuYW1lICpjb25uaG9zdDsKICAgICAgIGlmKGNvbm4tPmJpdHMuY29ubl90b19ob3N0KQpAQCAtMzI1NiwxMCArMzIzMiwxMSBAQAogCiAgICAgICBlbHNlIGlmKCFob3N0YWRkcikgewogICAgICAgICBmYWlsZihkYXRhLCAiQ291bGRuJ3QgcmVzb2x2ZSBob3N0ICclcyciLCBjb25uaG9zdC0+ZGlzcG5hbWUpOwotICAgICAgICByZXN1bHQgPSAgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOwogICAgICAgICAvKiBkb24ndCByZXR1cm4geWV0LCB3ZSBuZWVkIHRvIGNsZWFuIHVwIHRoZSB0aW1lb3V0IGZpcnN0ICovCiAgICAgICB9CiAgICAgfQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgICBlbHNlIHsKICAgICAgIC8qIFRoaXMgaXMgYSBwcm94eSB0aGF0IGhhc24ndCBiZWVuIHJlc29sdmVkIHlldC4gKi8KIApAQCAtMzI4NSw2ICszMjYyLDcgQEAKICAgICAgICAgLyogZG9uJ3QgcmV0dXJuIHlldCwgd2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgdGltZW91dCBmaXJzdCAqLwogICAgICAgfQogICAgIH0KKyNlbmRpZgogICAgIERFQlVHQVNTRVJUKGNvbm4tPmRuc19lbnRyeSA9PSBOVUxMKTsKICAgICBjb25uLT5kbnNfZW50cnkgPSBob3N0YWRkcjsKICAgfQpAQCAtMzMwMCwxNiArMzI3OCwxNyBAQAogc3RhdGljIHZvaWQgcmV1c2VfY29ubihzdHJ1Y3QgY29ubmVjdGRhdGEgKm9sZF9jb25uLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZvbGRfY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKLSAgZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJm9sZF9jb25uLT5zb2Nrc19wcm94eS5ob3N0KTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJm9sZF9jb25uLT5odHRwX3Byb3h5Lmhvc3QpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZvbGRfY29ubi0+c29ja3NfcHJveHkuaG9zdCk7CiAKICAgZnJlZShvbGRfY29ubi0+aHR0cF9wcm94eS5ob3N0LnJhd2FsbG9jKTsKICAgZnJlZShvbGRfY29ubi0+c29ja3NfcHJveHkuaG9zdC5yYXdhbGxvYyk7Ci0KKyAgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZygmb2xkX2Nvbm4tPnByb3h5X3NzbF9jb25maWcpOworI2VuZGlmCiAgIC8qIGZyZWUgdGhlIFNTTCBjb25maWcgc3RydWN0IGZyb20gdGhpcyBjb25uZWN0aW9uIHN0cnVjdCBhcyB0aGlzIHdhcwogICAgICBhbGxvY2F0ZWQgaW4gdmFpbiBhbmQgaXMgdGFyZ2V0ZWQgZm9yIGRlc3RydWN0aW9uICovCiAgIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoJm9sZF9jb25uLT5zc2xfY29uZmlnKTsKLSAgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZygmb2xkX2Nvbm4tPnByb3h5X3NzbF9jb25maWcpOwogCiAgIGNvbm4tPmRhdGEgPSBvbGRfY29ubi0+ZGF0YTsKIApAQCAtMzMyNiw2ICszMzA1LDcgQEAKICAgICBvbGRfY29ubi0+cGFzc3dkID0gTlVMTDsKICAgfQogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkID0gb2xkX2Nvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2Q7CiAgIGlmKGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QpIHsKICAgICAvKiB1c2UgdGhlIG5ldyBwcm94eSB1c2VyIG5hbWUgYW5kIHByb3h5IHBhc3N3b3JkIHRob3VnaCAqLwpAQCAtMzM0MiwxMSArMzMyMiwxNiBAQAogICAgIG9sZF9jb25uLT5odHRwX3Byb3h5LnBhc3N3ZCA9IE5VTEw7CiAgICAgb2xkX2Nvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCA9IE5VTEw7CiAgIH0KKyAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+aHR0cF9wcm94eS51c2VyKTsKKyAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+c29ja3NfcHJveHkudXNlcik7CisgIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPmh0dHBfcHJveHkucGFzc3dkKTsKKyAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+c29ja3NfcHJveHkucGFzc3dkKTsKKyNlbmRpZgogCiAgIC8qIGhvc3QgY2FuIGNoYW5nZSwgd2hlbiBkb2luZyBrZWVwYWxpdmUgd2l0aCBhIHByb3h5IG9yIGlmIHRoZSBjYXNlIGlzCiAgICAgIGRpZmZlcmVudCB0aGlzIHRpbWUgZXRjICovCi0gIGZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5ob3N0KTsKLSAgZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPmNvbm5fdG9faG9zdCk7CisgIEN1cmxfZnJlZV9pZG5jb252ZXJ0ZWRfaG9zdG5hbWUoJmNvbm4tPmhvc3QpOworICBDdXJsX2ZyZWVfaWRuY29udmVydGVkX2hvc3RuYW1lKCZjb25uLT5jb25uX3RvX2hvc3QpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPmhvc3QucmF3YWxsb2MpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPmNvbm5fdG9faG9zdC5yYXdhbGxvYyk7CiAgIGNvbm4tPmhvc3QgPSBvbGRfY29ubi0+aG9zdDsKQEAgLTMzNjksMTAgKzMzNTQsNiBAQAogICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT51c2VyKTsKICAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+cGFzc3dkKTsKICAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+b3B0aW9ucyk7Ci0gIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPmh0dHBfcHJveHkudXNlcik7Ci0gIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPnNvY2tzX3Byb3h5LnVzZXIpOwotICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT5odHRwX3Byb3h5LnBhc3N3ZCk7Ci0gIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCk7CiAgIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPmxvY2FsZGV2KTsKICAgQ3VybF9sbGlzdF9kZXN0cm95KCZvbGRfY29ubi0+ZWFzeXEsIE5VTEwpOwogCkBAIC0zNDQyLDkgKzM0MjMsOSBAQAogICBpZihyZXN1bHQpCiAgICAgZ290byBvdXQ7CiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQkVBUkVSXSkgewotICAgIGNvbm4tPm9hdXRoX2JlYXJlciA9IHN0cmR1cChkYXRhLT5zZXQuc3RyW1NUUklOR19CRUFSRVJdKTsKLSAgICBpZighY29ubi0+b2F1dGhfYmVhcmVyKSB7CisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NBU0xfQVVUSFpJRF0pIHsKKyAgICBjb25uLT5zYXNsX2F1dGh6aWQgPSBzdHJkdXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfU0FTTF9BVVRIWklEXSk7CisgICAgaWYoIWNvbm4tPnNhc2xfYXV0aHppZCkgewogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KQEAgLTM0NTcsNyArMzQzOCw3IEBACiAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgZ290byBvdXQ7CiAgICAgfQotICAgIGNvbm4tPmFic3RyYWN0X3VuaXhfc29ja2V0ID0gZGF0YS0+c2V0LmFic3RyYWN0X3VuaXhfc29ja2V0OworICAgIGNvbm4tPmJpdHMuYWJzdHJhY3RfdW5peF9zb2NrZXQgPSBkYXRhLT5zZXQuYWJzdHJhY3RfdW5peF9zb2NrZXQ7CiAgIH0KICNlbmRpZgogCkBAIC0zNDY3LDcgKzM0NDgsNiBAQAogICByZXN1bHQgPSBjcmVhdGVfY29ubl9oZWxwZXJfaW5pdF9wcm94eShjb25uKTsKICAgaWYocmVzdWx0KQogICAgIGdvdG8gb3V0OwotI2VuZGlmCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICogSWYgdGhlIHByb3RvY29sIGlzIHVzaW5nIFNTTCBhbmQgSFRUUCBwcm94eSBpcyB1c2VkLCB3ZSBzZXQKQEAgLTM0NzUsNiArMzQ1NSw3IEBACiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICBpZigoY29ubi0+Z2l2ZW4tPmZsYWdzJlBST1RPUFRfU1NMKSAmJiBjb25uLT5iaXRzLmh0dHBwcm94eSkKICAgICBjb25uLT5iaXRzLnR1bm5lbF9wcm94eSA9IFRSVUU7CisjZW5kaWYKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKiBGaWd1cmUgb3V0IHRoZSByZW1vdGUgcG9ydCBudW1iZXIgYW5kIGZpeCBpdCBpbiB0aGUgVVJMCkBAIC0zNTA1LDI0ICszNDg2LDI2IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqIElETi1jb252ZXJ0IHRoZSBob3N0bmFtZXMKICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIHJlc3VsdCA9IGlkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPmhvc3QpOworICByZXN1bHQgPSBDdXJsX2lkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPmhvc3QpOwogICBpZihyZXN1bHQpCiAgICAgZ290byBvdXQ7CiAgIGlmKGNvbm4tPmJpdHMuY29ubl90b19ob3N0KSB7Ci0gICAgcmVzdWx0ID0gaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+Y29ubl90b19ob3N0KTsKKyAgICByZXN1bHQgPSBDdXJsX2lkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPmNvbm5fdG9faG9zdCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZ290byBvdXQ7CiAgIH0KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KSB7Ci0gICAgcmVzdWx0ID0gaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKKyAgICByZXN1bHQgPSBDdXJsX2lkbmNvbnZlcnRfaG9zdG5hbWUoY29ubiwgJmNvbm4tPmh0dHBfcHJveHkuaG9zdCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgZ290byBvdXQ7CiAgIH0KICAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KSB7Ci0gICAgcmVzdWx0ID0gaWRuY29udmVydF9ob3N0bmFtZShjb25uLCAmY29ubi0+c29ja3NfcHJveHkuaG9zdCk7CisgICAgcmVzdWx0ID0gQ3VybF9pZG5jb252ZXJ0X2hvc3RuYW1lKGNvbm4sICZjb25uLT5zb2Nrc19wcm94eS5ob3N0KTsKICAgICBpZihyZXN1bHQpCiAgICAgICBnb3RvIG91dDsKICAgfQorI2VuZGlmCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICogQ2hlY2sgd2hldGhlciB0aGUgaG9zdCBhbmQgdGhlICJjb25uZWN0IHRvIGhvc3QiIGFyZSBlcXVhbC4KQEAgLTM1NDEsNiArMzUyNCw3IEBACiAgICAgY29ubi0+Yml0cy5jb25uX3RvX3BvcnQgPSBGQUxTRTsKICAgfQogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKiBJZiB0aGUgImNvbm5lY3QgdG8iIGZlYXR1cmUgaXMgdXNlZCB3aXRoIGFuIEhUVFAgcHJveHksCiAgICAqIHdlIHNldCB0aGUgdHVubmVsX3Byb3h5IGJpdC4KQEAgLTM1NDgsNiArMzUzMiw3IEBACiAgIGlmKChjb25uLT5iaXRzLmNvbm5fdG9faG9zdCB8fCBjb25uLT5iaXRzLmNvbm5fdG9fcG9ydCkgJiYKICAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5KQogICAgIGNvbm4tPmJpdHMudHVubmVsX3Byb3h5ID0gVFJVRTsKKyNlbmRpZgogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqIFNldHVwIGludGVybmFscyBkZXBlbmRpbmcgb24gcHJvdG9jb2wuIE5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIKQEAgLTM1ODAsNiArMzU2NSw3IEBACiAgICAgaWYoIXJlc3VsdCkgewogICAgICAgY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXSA9IFRSVUU7IC8qIHdlIGFyZSAiY29ubmVjdGVkICovCiAKKyAgICAgIEN1cmxfYXR0YWNoX2Nvbm5uZWN0aW9uKGRhdGEsIGNvbm4pOwogICAgICAgcmVzdWx0ID0gQ3VybF9jb25uY2FjaGVfYWRkX2Nvbm4oZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwgY29ubik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIGdvdG8gb3V0OwpAQCAtMzU5NCw3ICszNTgwLDYgQEAKICAgICAgICAgKHZvaWQpY29ubi0+aGFuZGxlci0+ZG9uZShjb25uLCByZXN1bHQsIEZBTFNFKTsKICAgICAgICAgZ290byBvdXQ7CiAgICAgICB9Ci0gICAgICBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihkYXRhLCBjb25uKTsKICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOwogICAgIH0KIApAQCAtMzYxNSw1NyArMzYwMCw3NSBAQAogICAgICBjb3BpZXMgd2lsbCBiZSBzZXBhcmF0ZWx5IGFsbG9jYXRlZC4KICAgKi8KICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LkNBcGF0aCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfT1JJR107Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5DQXBhdGggPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIX1BST1hZXTsKICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LkNBZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfT1JJR107Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5DQWZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXTsKICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnJhbmRvbV9maWxlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1JBTkRPTV9GSUxFXTsKLSAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnJhbmRvbV9maWxlID0KLSAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUkFORE9NX0ZJTEVdOwogICBkYXRhLT5zZXQuc3NsLnByaW1hcnkuZWdkc29ja2V0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0VHRFNPQ0tFVF07Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5lZ2Rzb2NrZXQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXTsKICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNpcGhlcl9saXN0ID0KICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0lQSEVSX0xJU1RfT1JJR107Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5jaXBoZXJfbGlzdCA9Ci0gICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUl9MSVNUX1BST1hZXTsKICAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNpcGhlcl9saXN0MTMgPQogICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DSVBIRVIxM19MSVNUX09SSUddOworICBkYXRhLT5zZXQuc3NsLnByaW1hcnkucGlubmVkX2tleSA9CisgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXTsKKyAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNlcnRfYmxvYiA9IGRhdGEtPnNldC5ibG9ic1tCTE9CX0NFUlRfT1JJR107CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5DQXBhdGggPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIX1BST1hZXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LkNBZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfUFJPWFldOworICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkucmFuZG9tX2ZpbGUgPQorICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9SQU5ET01fRklMRV07CisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5lZ2Rzb2NrZXQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LmNpcGhlcl9saXN0ID0KKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0lQSEVSX0xJU1RfUFJPWFldOwogICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkuY2lwaGVyX2xpc3QxMyA9CiAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUjEzX0xJU1RfUFJPWFldOwotCi0gIGRhdGEtPnNldC5zc2wuQ1JMZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX09SSUddOworICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkucGlubmVkX2tleSA9CisgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV07CisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5jZXJ0X2Jsb2IgPSBkYXRhLT5zZXQuYmxvYnNbQkxPQl9DRVJUX1BST1hZXTsKICAgZGF0YS0+c2V0LnByb3h5X3NzbC5DUkxmaWxlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfUFJPWFldOwotICBkYXRhLT5zZXQuc3NsLmlzc3VlcmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF9PUklHXTsKICAgZGF0YS0+c2V0LnByb3h5X3NzbC5pc3N1ZXJjZXJ0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfUFJPWFldOwotICBkYXRhLT5zZXQuc3NsLmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1BST1hZXTsKLSAgZGF0YS0+c2V0LnNzbC5jZXJ0X3R5cGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1RZUEVfT1JJR107CiAgIGRhdGEtPnNldC5wcm94eV9zc2wuY2VydF90eXBlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFX1BST1hZXTsKLSAgZGF0YS0+c2V0LnNzbC5rZXkgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfT1JJR107CiAgIGRhdGEtPnNldC5wcm94eV9zc2wua2V5ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BST1hZXTsKLSAgZGF0YS0+c2V0LnNzbC5rZXlfdHlwZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9UWVBFX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLmtleV90eXBlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1RZUEVfUFJPWFldOwotICBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLmtleV9wYXNzd2QgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEX1BST1hZXTsKLSAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNsaWVudGNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX09SSUddOwogICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkuY2xpZW50Y2VydCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfUFJPWFldOworICBkYXRhLT5zZXQucHJveHlfc3NsLmNlcnRfYmxvYiA9IGRhdGEtPnNldC5ibG9ic1tCTE9CX0NFUlRfUFJPWFldOworICBkYXRhLT5zZXQucHJveHlfc3NsLmtleV9ibG9iID0gZGF0YS0+c2V0LmJsb2JzW0JMT0JfS0VZX1BST1hZXTsKKyNlbmRpZgorICBkYXRhLT5zZXQuc3NsLkNSTGZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV9PUklHXTsKKyAgZGF0YS0+c2V0LnNzbC5pc3N1ZXJjZXJ0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfT1JJR107CisgIGRhdGEtPnNldC5zc2wuY2VydCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfT1JJR107CisgIGRhdGEtPnNldC5zc2wuY2VydF90eXBlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFX09SSUddOworICBkYXRhLT5zZXQuc3NsLmtleSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9PUklHXTsKKyAgZGF0YS0+c2V0LnNzbC5rZXlfdHlwZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9UWVBFX09SSUddOworICBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEX09SSUddOworICBkYXRhLT5zZXQuc3NsLnByaW1hcnkuY2xpZW50Y2VydCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfT1JJR107CiAjaWZkZWYgVVNFX1RMU19TUlAKICAgZGF0YS0+c2V0LnNzbC51c2VybmFtZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfT1JJR107Ci0gIGRhdGEtPnNldC5wcm94eV9zc2wudXNlcm5hbWUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX1BST1hZXTsKICAgZGF0YS0+c2V0LnNzbC5wYXNzd29yZCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfT1JJR107CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICBkYXRhLT5zZXQucHJveHlfc3NsLnVzZXJuYW1lID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfVExTQVVUSF9VU0VSTkFNRV9QUk9YWV07CiAgIGRhdGEtPnNldC5wcm94eV9zc2wucGFzc3dvcmQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1BBU1NXT1JEX1BST1hZXTsKICNlbmRpZgorI2VuZGlmCisKKyAgZGF0YS0+c2V0LnNzbC5jZXJ0X2Jsb2IgPSBkYXRhLT5zZXQuYmxvYnNbQkxPQl9DRVJUX09SSUddOworICBkYXRhLT5zZXQuc3NsLmtleV9ibG9iID0gZGF0YS0+c2V0LmJsb2JzW0JMT0JfS0VZX09SSUddOworICBkYXRhLT5zZXQuc3NsLmlzc3VlcmNlcnRfYmxvYiA9IGRhdGEtPnNldC5ibG9ic1tCTE9CX1NTTF9JU1NVRVJDRVJUX09SSUddOwogCiAgIGlmKCFDdXJsX2Nsb25lX3ByaW1hcnlfc3NsX2NvbmZpZygmZGF0YS0+c2V0LnNzbC5wcmltYXJ5LAotICAgICAmY29ubi0+c3NsX2NvbmZpZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uLT5zc2xfY29uZmlnKSkgewogICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgZ290byBvdXQ7CiAgIH0KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgaWYoIUN1cmxfY2xvbmVfcHJpbWFyeV9zc2xfY29uZmlnKCZkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+cHJveHlfc3NsX2NvbmZpZykpIHsKICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIGdvdG8gb3V0OwogICB9CisjZW5kaWYKIAogICBwcnVuZV9kZWFkX2Nvbm5lY3Rpb25zKGRhdGEpOwogCkBAIC0zNjg4LDI1ICszNjkxLDYgQEAKICAgZWxzZQogICAgIHJldXNlID0gQ29ubmVjdGlvbkV4aXN0cyhkYXRhLCBjb25uLCAmY29ubl90ZW1wLCAmZm9yY2VfcmV1c2UsICZ3YWl0cGlwZSk7CiAKLSAgLyogSWYgd2UgZm91bmQgYSByZXVzYWJsZSBjb25uZWN0aW9uIHRoYXQgaXMgbm93IG1hcmtlZCBhcyBpbiB1c2UsIHdlIG1heQotICAgICBzdGlsbCB3YW50IHRvIG9wZW4gYSBuZXcgY29ubmVjdGlvbiBpZiB3ZSBhcmUgbXVsdGlwbGV4aW5nLiAqLwotICBpZihyZXVzZSAmJiAhZm9yY2VfcmV1c2UgJiYgSXNNdWx0aXBsZXhpbmdQb3NzaWJsZShkYXRhLCBjb25uX3RlbXApKSB7Ci0gICAgc2l6ZV90IG11bHRpcGxleGVkID0gQ09OTl9JTlVTRShjb25uX3RlbXApOwotICAgIGlmKG11bHRpcGxleGVkID4gMCkgewotICAgICAgaW5mb2YoZGF0YSwgIkZvdW5kIGNvbm5lY3Rpb24gJWxkLCB3aXRoICV6dSByZXF1ZXN0cyBvbiBpdFxuIiwKLSAgICAgICAgICAgIGNvbm5fdGVtcC0+Y29ubmVjdGlvbl9pZCwgbXVsdGlwbGV4ZWQpOwotCi0gICAgICBpZihDdXJsX2Nvbm5jYWNoZV9idW5kbGVfc2l6ZShjb25uX3RlbXApIDwgbWF4X2hvc3RfY29ubmVjdGlvbnMgJiYKLSAgICAgICAgIEN1cmxfY29ubmNhY2hlX3NpemUoZGF0YSkgPCBtYXhfdG90YWxfY29ubmVjdGlvbnMpIHsKLSAgICAgICAgLyogV2Ugd2FudCBhIG5ldyBjb25uZWN0aW9uIGFueXdheSAqLwotICAgICAgICByZXVzZSA9IEZBTFNFOwotCi0gICAgICAgIGluZm9mKGRhdGEsICJXZSBjYW4gcmV1c2UsIGJ1dCB3ZSB3YW50IGEgbmV3IGNvbm5lY3Rpb24gYW55d2F5XG4iKTsKLSAgICAgICAgQ3VybF9jb25uY2FjaGVfcmV0dXJuX2Nvbm4oY29ubl90ZW1wKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQogICBpZihyZXVzZSkgewogICAgIC8qCiAgICAgICogV2UgYWxyZWFkeSBoYXZlIGEgY29ubmVjdGlvbiBmb3IgdGhpcywgd2UgZ290IHRoZSBmb3JtZXIgY29ubmVjdGlvbgpAQCAtMzcyMiwxMiArMzcwNiwxNyBAQAogICAgIGNvbm4gPSBjb25uX3RlbXA7CiAgICAgKmluX2Nvbm5lY3QgPSBjb25uOwogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgIGluZm9mKGRhdGEsICJSZS11c2luZyBleGlzdGluZyBjb25uZWN0aW9uISAoIyVsZCkgd2l0aCAlcyAlc1xuIiwKICAgICAgICAgICBjb25uLT5jb25uZWN0aW9uX2lkLAogICAgICAgICAgIGNvbm4tPmJpdHMucHJveHk/InByb3h5IjoiaG9zdCIsCiAgICAgICAgICAgY29ubi0+c29ja3NfcHJveHkuaG9zdC5uYW1lID8gY29ubi0+c29ja3NfcHJveHkuaG9zdC5kaXNwbmFtZSA6CiAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisjZWxzZQorICAgIGluZm9mKGRhdGEsICJSZS11c2luZyBleGlzdGluZyBjb25uZWN0aW9uISAoIyVsZCkgd2l0aCBob3N0ICVzXG4iLAorICAgICAgICAgIGNvbm4tPmNvbm5lY3Rpb25faWQsIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworI2VuZGlmCiAgIH0KICAgZWxzZSB7CiAgICAgLyogV2UgaGF2ZSBkZWNpZGVkIHRoYXQgd2Ugd2FudCBhIG5ldyBjb25uZWN0aW9uLiBIb3dldmVyLCB3ZSBtYXkgbm90CkBAIC0zNzQ5LDggKzM3MzgsOSBAQAogICAgICAgY29ubmVjdGlvbnNfYXZhaWxhYmxlID0gRkFMU0U7CiAgICAgZWxzZSB7CiAgICAgICAvKiB0aGlzIGdldHMgYSBsb2NrIG9uIHRoZSBjb25uY2FjaGUgKi8KKyAgICAgIGNvbnN0IGNoYXIgKmJ1bmRsZWhvc3Q7CiAgICAgICBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqYnVuZGxlID0KLSAgICAgICAgQ3VybF9jb25uY2FjaGVfZmluZF9idW5kbGUoY29ubiwgZGF0YS0+c3RhdGUuY29ubl9jYWNoZSk7CisgICAgICAgIEN1cmxfY29ubmNhY2hlX2ZpbmRfYnVuZGxlKGNvbm4sIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUsICZidW5kbGVob3N0KTsKIAogICAgICAgaWYobWF4X2hvc3RfY29ubmVjdGlvbnMgPiAwICYmIGJ1bmRsZSAmJgogICAgICAgICAgKGJ1bmRsZS0+bnVtX2Nvbm5lY3Rpb25zID49IG1heF9ob3N0X2Nvbm5lY3Rpb25zKSkgewpAQCAtMzc1OCwxOSArMzc0OCwxOSBAQAogCiAgICAgICAgIC8qIFRoZSBidW5kbGUgaXMgZnVsbC4gRXh0cmFjdCB0aGUgb2xkZXN0IGNvbm5lY3Rpb24uICovCiAgICAgICAgIGNvbm5fY2FuZGlkYXRlID0gQ3VybF9jb25uY2FjaGVfZXh0cmFjdF9idW5kbGUoZGF0YSwgYnVuZGxlKTsKLSAgICAgICAgQ3VybF9jb25uY2FjaGVfdW5sb2NrKGRhdGEpOworICAgICAgICBDT05OQ0FDSEVfVU5MT0NLKGRhdGEpOwogCiAgICAgICAgIGlmKGNvbm5fY2FuZGlkYXRlKQogICAgICAgICAgICh2b2lkKUN1cmxfZGlzY29ubmVjdChkYXRhLCBjb25uX2NhbmRpZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVhZF9jb25uZWN0aW9uICovIEZBTFNFKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIk5vIG1vcmUgY29ubmVjdGlvbnMgYWxsb3dlZCB0byBob3N0OiAlenVcbiIsCi0gICAgICAgICAgICAgICAgbWF4X2hvc3RfY29ubmVjdGlvbnMpOworICAgICAgICAgIGluZm9mKGRhdGEsICJObyBtb3JlIGNvbm5lY3Rpb25zIGFsbG93ZWQgdG8gaG9zdCAlczogJXp1XG4iLAorICAgICAgICAgICAgICAgIGJ1bmRsZWhvc3QsIG1heF9ob3N0X2Nvbm5lY3Rpb25zKTsKICAgICAgICAgICBjb25uZWN0aW9uc19hdmFpbGFibGUgPSBGQUxTRTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZQotICAgICAgICBDdXJsX2Nvbm5jYWNoZV91bmxvY2soZGF0YSk7CisgICAgICAgIENPTk5DQUNIRV9VTkxPQ0soZGF0YSk7CiAKICAgICB9CiAKQEAgLTM4MDQsNiArMzc5NCw4IEBACiAgICAgICAgKiBUaGlzIGlzIGEgYnJhbmQgbmV3IGNvbm5lY3Rpb24sIHNvIGxldCdzIHN0b3JlIGl0IGluIHRoZSBjb25uZWN0aW9uCiAgICAgICAgKiBjYWNoZSBvZiBvdXJzIQogICAgICAgICovCisgICAgICBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihkYXRhLCBjb25uKTsKKwogICAgICAgcmVzdWx0ID0gQ3VybF9jb25uY2FjaGVfYWRkX2Nvbm4oZGF0YS0+c3RhdGUuY29ubl9jYWNoZSwgY29ubik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIGdvdG8gb3V0OwpAQCAtMzg1NSwxMCArMzg0NywxMiBAQAogCiAgIC8qIFN0cmlwIHRyYWlsaW5nIGRvdHMuIHJlc29sdmVfc2VydmVyIGNvcGllZCB0aGUgbmFtZS4gKi8KICAgc3RyaXBfdHJhaWxpbmdfZG90KCZjb25uLT5ob3N0KTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQogICAgIHN0cmlwX3RyYWlsaW5nX2RvdCgmY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKICAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KQogICAgIHN0cmlwX3RyYWlsaW5nX2RvdCgmY29ubi0+c29ja3NfcHJveHkuaG9zdCk7CisjZW5kaWYKICAgaWYoY29ubi0+Yml0cy5jb25uX3RvX2hvc3QpCiAgICAgc3RyaXBfdHJhaWxpbmdfZG90KCZjb25uLT5jb25uX3RvX2hvc3QpOwogCkBAIC0zODg5LDIyICszODgzLDIzIEBACiAgIH0KICAgKnByb3RvY29sX2RvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBub3QgZG9uZSAqLwogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAvKiBzZXQgcHJveHlfY29ubmVjdF9jbG9zZWQgdG8gZmFsc2UgdW5jb25kaXRpb25hbGx5IGFscmVhZHkgaGVyZSBzaW5jZSBpdAogICAgICBpcyB1c2VkIHN0cmljdGx5IHRvIHByb3ZpZGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gYSBwYXJlbnQgZnVuY3Rpb24gaW4gdGhlCiAgICAgIGNhc2Ugb2YgcHJveHkgQ09OTkVDVCBmYWlsdXJlcyBhbmQgd2UgbXVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBpdAogICAgICBsaW5nZXJpbmcgc2V0IGZyb20gYSBwcmV2aW91cyBpbnZva2UgKi8KICAgY29ubi0+Yml0cy5wcm94eV9jb25uZWN0X2Nsb3NlZCA9IEZBTFNFOwotCisjZW5kaWYKICAgLyoKICAgICogU2V0IHVzZXItYWdlbnQuIFVzZWQgZm9yIEhUVFAsIGJ1dCBzaW5jZSB3ZSBjYW4gYXR0ZW1wdCB0byB0dW5uZWwKICAgICogYmFzaWNhbGx5IGFueXRoaW5nIHRocm91Z2ggYSBodHRwIHByb3h5IHdlIGNhbid0IGxpbWl0IHRoaXMgYmFzZWQgb24KICAgICogcHJvdG9jb2wuCiAgICAqLwogICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdKSB7Ci0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci51YWdlbnQpOwotICAgIGNvbm4tPmFsbG9jcHRyLnVhZ2VudCA9CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5hcHRyLnVhZ2VudCk7CisgICAgZGF0YS0+c3RhdGUuYXB0ci51YWdlbnQgPQogICAgICAgYXByaW50ZigiVXNlci1BZ2VudDogJXNcclxuIiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfVVNFUkFHRU5UXSk7Ci0gICAgaWYoIWNvbm4tPmFsbG9jcHRyLnVhZ2VudCkKKyAgICBpZighZGF0YS0+c3RhdGUuYXB0ci51YWdlbnQpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogCkBAIC0zOTI2LDcgKzM5MjEsOSBAQAogICB9CiAgIGVsc2UgewogICAgIEN1cmxfcGdyc1RpbWUoZGF0YSwgVElNRVJfQ09OTkVDVCk7ICAgIC8qIHdlJ3JlIGNvbm5lY3RlZCBhbHJlYWR5ICovCi0gICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogd2UncmUgY29ubmVjdGVkIGFscmVhZHkgKi8KKyAgICBpZihjb25uLT5zc2xbRklSU1RTT0NLRVRdLnVzZSB8fAorICAgICAgIChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIFBST1RPX0ZBTUlMWV9TU0gpKQorICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogd2UncmUgY29ubmVjdGVkIGFscmVhZHkgKi8KICAgICBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdID0gVFJVRTsKICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7CiAgICAgQ3VybF91cGRhdGVjb25uaW5mbyhjb25uLCBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSk7CkBAIC0zOTU2LDcgKzM5NTMsNyBAQAogICByZXN1bHQgPSBjcmVhdGVfY29ubihkYXRhLCAmY29ubiwgYXN5bmNwKTsKIAogICBpZighcmVzdWx0KSB7Ci0gICAgaWYoQ09OTl9JTlVTRShjb25uKSkKKyAgICBpZihDT05OX0lOVVNFKGNvbm4pID4gMSkKICAgICAgIC8qIG11bHRpcGxleGVkICovCiAgICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7CiAgICAgZWxzZSBpZighKmFzeW5jcCkgewpAQCAtMzk3MywxMSArMzk3MCwxMCBAQAogICBlbHNlIGlmKHJlc3VsdCAmJiBjb25uKSB7CiAgICAgLyogV2UncmUgbm90IGFsbG93ZWQgdG8gcmV0dXJuIGZhaWx1cmUgd2l0aCBtZW1vcnkgbGVmdCBhbGxvY2F0ZWQgaW4gdGhlCiAgICAgICAgY29ubmVjdGRhdGEgc3RydWN0LCBmcmVlIHRob3NlIGhlcmUgKi8KKyAgICBDdXJsX2RldGFjaF9jb25ubmVjdGlvbihkYXRhKTsKKyAgICBDdXJsX2Nvbm5jYWNoZV9yZW1vdmVfY29ubihkYXRhLCBjb25uLCBUUlVFKTsKICAgICBDdXJsX2Rpc2Nvbm5lY3QoZGF0YSwgY29ubiwgVFJVRSk7CiAgIH0KLSAgZWxzZSBpZighcmVzdWx0ICYmICFkYXRhLT5jb25uKQotICAgIC8qIEZJTEU6IHRyYW5zZmVycyBhbHJlYWR5IGhhdmUgdGhlIGNvbm5lY3Rpb24gYXR0YWNoZWQgKi8KLSAgICBDdXJsX2F0dGFjaF9jb25ubmVjdGlvbihkYXRhLCBjb25uKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzk5Niw2ICszOTkyLDExIEBACiB7CiAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKIAorICAvKiBpZiB0aGlzIGlzIGEgcHVzaGVkIHN0cmVhbSwgd2UgbmVlZCB0aGlzOiAqLworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3ByZWNvbm5lY3QoZGF0YSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCiAgIGlmKGNvbm4pIHsKICAgICBjb25uLT5iaXRzLmRvX21vcmUgPSBGQUxTRTsgLyogYnkgZGVmYXVsdCB0aGVyZSdzIG5vIGN1cmxfZG9fbW9yZSgpIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSAqLwpAQCAtNDAwOCwzMCArNDAwOSwxNyBAQAogICBkYXRhLT5zdGF0ZS5kb25lID0gRkFMU0U7IC8qICpfZG9uZSgpIGlzIG5vdCBjYWxsZWQgeWV0ICovCiAgIGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlciA9IEZBTFNFOwogCi0KICAgaWYoZGF0YS0+c2V0Lm9wdF9ub19ib2R5KQogICAgIC8qIGluIEhUVFAgbGluZ28sIG5vIGJvZHkgbWVhbnMgdXNpbmcgdGhlIEhFQUQgcmVxdWVzdC4uLiAqLwotICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9IRUFEOwotICBlbHNlIGlmKEhUVFBSRVFfSEVBRCA9PSBkYXRhLT5zZXQuaHR0cHJlcSkKLSAgICAvKiAuLi4gYnV0IGlmIHVuc2V0IHRoZXJlIHJlYWxseSBpcyBubyBwZXJmZWN0IG1ldGhvZCB0aGF0IGlzIHRoZQotICAgICAgICJvcHBvc2l0ZSIgb2YgSEVBRCBidXQgaW4gcmVhbGl0eSBtb3N0IHBlb3BsZSBwcm9iYWJseSB0aGluayBHRVQKLSAgICAgICB0aGVuLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgd2UgY2FuJ3QgbGV0IGl0IHJlbWFpbiBIRUFEIGlmIHRoZQotICAgICAgIG9wdF9ub19ib2R5IGlzIHNldCBGQUxTRSBzaW5jZSB0aGVuIHdlJ2xsIGJlaGF2ZSB3cm9uZyB3aGVuIGdldHRpbmcKLSAgICAgICBIVFRQLiAqLwotICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CisgICAgZGF0YS0+c3RhdGUuaHR0cHJlcSA9IEhUVFBSRVFfSEVBRDsKIAogICBrLT5zdGFydCA9IEN1cmxfbm93KCk7IC8qIHN0YXJ0IHRpbWUgKi8KICAgay0+bm93ID0gay0+c3RhcnQ7ICAgLyogY3VycmVudCB0aW1lIGlzIG5vdyAqLwogICBrLT5oZWFkZXIgPSBUUlVFOyAvKiBhc3N1bWUgaGVhZGVyICovCi0KICAgay0+Ynl0ZWNvdW50ID0gMDsKLQotICBrLT5idWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7Ci0gIGstPmhidWZwID0gZGF0YS0+c3RhdGUuaGVhZGVyYnVmZjsKICAgay0+aWdub3JlYm9keSA9IEZBTFNFOwogCiAgIEN1cmxfc3BlZWRpbml0KGRhdGEpOwotCiAgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7CiAgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKIApAQCAtNDE0NywzNCArNDEzNSwzIEBACiAKICAgcmV0dXJuIGZhbWlseTsKIH0KLQotCi0vKgotICogV3JhcHBlciB0byBjYWxsIGZ1bmN0aW9ucyBpbiBDdXJsX2Nvbm5jYWNoZV9mb3JlYWNoKCkKLSAqCi0gKiBSZXR1cm5zIGFsd2F5cyAwLgotICovCi1zdGF0aWMgaW50IGNvbm5fdXBrZWVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyYW0pCi17Ci0gIC8qIFBhcmFtIGlzIHVudXNlZC4gKi8KLSAgKHZvaWQpcGFyYW07Ci0KLSAgaWYoY29ubi0+aGFuZGxlci0+Y29ubmVjdGlvbl9jaGVjaykgewotICAgIC8qIERvIGEgcHJvdG9jb2wtc3BlY2lmaWMga2VlcGFsaXZlIGNoZWNrIG9uIHRoZSBjb25uZWN0aW9uLiAqLwotICAgIGNvbm4tPmhhbmRsZXItPmNvbm5lY3Rpb25fY2hlY2soY29ubiwgQ09OTkNIRUNLX0tFRVBBTElWRSk7Ci0gIH0KLQotICByZXR1cm4gMDsgLyogY29udGludWUgaXRlcmF0aW9uICovCi19Ci0KLUNVUkxjb2RlIEN1cmxfdXBrZWVwKHN0cnVjdCBjb25uY2FjaGUgKmNvbm5fY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCi17Ci0gIC8qIExvb3Agb3ZlciBldmVyeSBjb25uZWN0aW9uIGFuZCBtYWtlIGNvbm5lY3Rpb24gYWxpdmUuICovCi0gIEN1cmxfY29ubmNhY2hlX2ZvcmVhY2goZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25uX2NhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29ubl91cGtlZXApOwotICByZXR1cm4gQ1VSTEVfT0s7Ci19CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmwuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybC5oCmluZGV4IDRkYjllODYuLjE5NDFkYzYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybC5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00Nyw0NyArNDcsNDAgQEAKIENVUkxjb2RlIEN1cmxfb3BlbihzdHJ1Y3QgQ3VybF9lYXN5ICoqY3VybCk7CiBDVVJMY29kZSBDdXJsX2luaXRfdXNlcmRlZmluZWQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7CiAKLXZvaWQgQ3VybF9mcmVlc2V0KHN0cnVjdCBDdXJsX2Vhc3kgKiBkYXRhKTsKLS8qIGZyZWUgdGhlIFVSTCBwaWVjZXMgKi8KLXZvaWQgQ3VybF91cF9mcmVlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwordm9pZCBDdXJsX2ZyZWVzZXQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7CiBDVVJMY29kZSBDdXJsX3VjX3RvX2N1cmxjb2RlKENVUkxVY29kZSB1Yyk7Ci1DVVJMY29kZSBDdXJsX2Nsb3NlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOyAvKiBvcHBvc2l0ZSBvZiBjdXJsX29wZW4oKSAqLworQ1VSTGNvZGUgQ3VybF9jbG9zZShzdHJ1Y3QgQ3VybF9lYXN5ICoqZGF0YXApOyAvKiBvcHBvc2l0ZSBvZiBjdXJsX29wZW4oKSAqLwogQ1VSTGNvZGUgQ3VybF9jb25uZWN0KHN0cnVjdCBDdXJsX2Vhc3kgKiwgYm9vbCAqYXN5bmMsIGJvb2wgKnByb3RvY29sX2Nvbm5lY3QpOwogQ1VSTGNvZGUgQ3VybF9kaXNjb25uZWN0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICosIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKLUNVUkxjb2RlIEN1cmxfcHJvdG9jb2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOwotQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9jb25uZWN0aW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7Ci1DVVJMY29kZSBDdXJsX3Byb3RvY29sX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CiBDVVJMY29kZSBDdXJsX3NldHVwX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnByb3RvY29sX2RvbmUpOwogdm9pZCBDdXJsX2ZyZWVfcmVxdWVzdF9zdGF0ZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKLQotaW50IEN1cmxfcHJvdG9jb2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOwotaW50IEN1cmxfZG9pbmdfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOwogQ1VSTGNvZGUgQ3VybF9wYXJzZV9sb2dpbl9kZXRhaWxzKGNvbnN0IGNoYXIgKmxvZ2luLCBjb25zdCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip1c2VycHRyLCBjaGFyICoqcGFzc3dkcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvcHRpb25zcHRyKTsKLXZvaWQgQ3VybF9jbG9zZV9jb25uZWN0aW9ucyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKLUNVUkxjb2RlIEN1cmxfdXBrZWVwKHN0cnVjdCBjb25uY2FjaGUgKmNvbm5fY2FjaGUsIHZvaWQgKmRhdGEpOwogCiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyICpDdXJsX2J1aWx0aW5fc2NoZW1lKGNvbnN0IGNoYXIgKnNjaGVtZSk7CiAKK2Jvb2wgQ3VybF9pc19BU0NJSV9uYW1lKGNvbnN0IGNoYXIgKmhvc3RuYW1lKTsKK0NVUkxjb2RlIEN1cmxfaWRuY29udmVydF9ob3N0bmFtZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RuYW1lICpob3N0KTsKK3ZvaWQgQ3VybF9mcmVlX2lkbmNvbnZlcnRlZF9ob3N0bmFtZShzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpOworCiAjZGVmaW5lIENVUkxfREVGQVVMVF9QUk9YWV9QT1JUIDEwODAgLyogZGVmYXVsdCBwcm94eSBwb3J0IHVubGVzcyBzcGVjaWZpZWQgKi8KICNkZWZpbmUgQ1VSTF9ERUZBVUxUX0hUVFBTX1BST1hZX1BPUlQgNDQzIC8qIGRlZmF1bHQgaHR0cHMgcHJveHkgcG9ydCB1bmxlc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCAqLwogCi1DVVJMY29kZSBDdXJsX2Nvbm5lY3RlZF9wcm94eShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOwotCiAjaWZkZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogI2RlZmluZSBDdXJsX3ZlcmJvc2Vjb25uZWN0KHgpICBDdXJsX25vcF9zdG10CiAjZWxzZQogdm9pZCBDdXJsX3ZlcmJvc2Vjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAjZW5kaWYKIAorI2lmZGVmIENVUkxfRElTQUJMRV9QUk9YWQorI2RlZmluZSBDT05ORUNUX1BST1hZX1NTTCgpIEZBTFNFCisjZWxzZQorCiAjZGVmaW5lIENPTk5FQ1RfUFJPWFlfU1NMKClcCiAgIChjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMgJiZcCiAgICFjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbc29ja2luZGV4XSkKQEAgLTk5LDUgKzkyLDYgQEAKICNkZWZpbmUgQ09OTkVDVF9TRUNPTkRBUllTT0NLRVRfUFJPWFlfU1NMKClcCiAgIChjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMgJiZcCiAgICFjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbU0VDT05EQVJZU09DS0VUXSkKKyNlbmRpZiAvKiAhQ1VSTF9ESVNBQkxFX1BST1hZICovCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9VUkxfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsYXBpLWludC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsYXBpLWludC5oCmluZGV4IDVmMDU5YzIuLmQxNGQ1M2QgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS1pbnQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxhcGktaW50LmgKQEAgLTI2LDkgKzI2LDYgQEAKICNkZWZpbmUgTUFYX1NDSEVNRV9MRU4gNDAKIAogYm9vbCBDdXJsX2lzX2Fic29sdXRlX3VybChjb25zdCBjaGFyICp1cmwsIGNoYXIgKnNjaGVtZSwgc2l6ZV90IGJ1Zmxlbik7Ci1jaGFyICpDdXJsX2NvbmNhdF91cmwoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcmVsdXJsKTsKLXNpemVfdCBDdXJsX3N0cmxlbl91cmwoY29uc3QgY2hhciAqdXJsLCBib29sIHJlbGF0aXZlKTsKLXZvaWQgQ3VybF9zdHJjcHlfdXJsKGNoYXIgKm91dHB1dCwgY29uc3QgY2hhciAqdXJsLCBib29sIHJlbGF0aXZlKTsKIAogI2lmZGVmIERFQlVHQlVJTEQKIENVUkxVY29kZSBDdXJsX3BhcnNlX3BvcnQoc3RydWN0IEN1cmxfVVJMICp1LCBjaGFyICpob3N0bmFtZSk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxhcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS5jCmluZGV4IGQwN2U0ZjUuLmFjYmZiODIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGFwaS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAiZXNjYXBlLmgiCiAjaW5jbHVkZSAiY3VybF9jdHlwZS5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTYzLDYgKzY0LDcgQEAKICAgY2hhciAqZnJhZ21lbnQ7CiAKICAgY2hhciAqc2NyYXRjaDsgLyogdGVtcG9yYXJ5IHNjcmF0Y2ggYXJlYSAqLworICBjaGFyICp0ZW1wcGF0aDsgLyogdGVtcG9yYXJ5IHBhdGggcG9pbnRlciAqLwogICBsb25nIHBvcnRudW07IC8qIHRoZSBudW1lcmljYWwgdmVyc2lvbiAqLwogfTsKIApAQCAtODEsNiArODMsNyBAQAogICBmcmVlKHUtPnF1ZXJ5KTsKICAgZnJlZSh1LT5mcmFnbWVudCk7CiAgIGZyZWUodS0+c2NyYXRjaCk7CisgIGZyZWUodS0+dGVtcHBhdGgpOwogfQogCiAvKiBtb3ZlIHRoZSBmdWxsIGNvbnRlbnRzIG9mIG9uZSBoYW5kbGUgb250byBhbm90aGVyIGFuZApAQCAtMjIyLDcgKzIyNSw3IEBACiAgICAgICBicmVhazsKICAgICB9CiAgIH0KLSAgKm9wdHIgPSAwOyAvKiB6ZXJvIHRlcm1pbmF0ZSBvdXRwdXQgYnVmZmVyICovCisgICpvcHRyID0gMDsgLyogbnVsbC10ZXJtaW5hdGUgb3V0cHV0IGJ1ZmZlciAqLwogCiB9CiAKQEAgLTM1MCw3ICszNTMsNyBAQAogICBlbHNlIHsKICAgICAvKiBXZSBnb3QgYSBuZXcgYWJzb2x1dGUgcGF0aCBmb3IgdGhpcyBzZXJ2ZXIgKi8KIAotICAgIGlmKChyZWx1cmxbMF0gPT0gJy8nKSAmJiAocmVsdXJsWzFdID09ICcvJykpIHsKKyAgICBpZihyZWx1cmxbMV0gPT0gJy8nKSB7CiAgICAgICAvKiB0aGUgbmV3IFVSTCBzdGFydHMgd2l0aCAvLywganVzdCBrZWVwIHRoZSBwcm90b2NvbCBwYXJ0IGZyb20gdGhlCiAgICAgICAgICBvcmlnaW5hbCBvbmUgKi8KICAgICAgICpwcm90c2VwID0gMDsKQEAgLTQyNSw3ICs0MjgsNiBAQAogICoKICAqLwogc3RhdGljIENVUkxVY29kZSBwYXJzZV9ob3N0bmFtZV9sb2dpbihzdHJ1Y3QgQ3VybF9VUkwgKnUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewpAQCAtNDM0LDYgKzQzNiw3IEBACiAgIGNoYXIgKnVzZXJwID0gTlVMTDsKICAgY2hhciAqcGFzc3dkcCA9IE5VTEw7CiAgIGNoYXIgKm9wdGlvbnNwID0gTlVMTDsKKyAgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqaCA9IE5VTEw7CiAKICAgLyogQXQgdGhpcyBwb2ludCwgd2UncmUgaG9waW5nIGFsbCB0aGUgb3RoZXIgc3BlY2lhbCBjYXNlcyBoYXZlCiAgICAqIGJlZW4gdGFrZW4gY2FyZSBvZiwgc28gY29ubi0+aG9zdC5uYW1lIGlzIGF0IG1vc3QKQEAgLTQ1Myw2ICs0NTYsMTAgQEAKICAgICogZnRwOi8vdXNlcjpwYXNzd29yZEBmdHAubXkuc2l0ZTo4MDIxL1JFQURNRSAqLwogICAqaG9zdG5hbWUgPSArK3B0cjsKIAorICAvKiBpZiB0aGlzIGlzIGEga25vd24gc2NoZW1lLCBnZXQgc29tZSBkZXRhaWxzICovCisgIGlmKHUtPnNjaGVtZSkKKyAgICBoID0gQ3VybF9idWlsdGluX3NjaGVtZSh1LT5zY2hlbWUpOworCiAgIC8qIFdlIGNvdWxkIHVzZSB0aGUgbG9naW4gaW5mb3JtYXRpb24gaW4gdGhlIFVSTCBzbyBleHRyYWN0IGl0LiBPbmx5IHBhcnNlCiAgICAgIG9wdGlvbnMgaWYgdGhlIGhhbmRsZXIgc2F5cyB3ZSBzaG91bGQuIE5vdGUgdGhhdCAnaCcgbWlnaHQgYmUgTlVMTCEgKi8KICAgY2NvZGUgPSBDdXJsX3BhcnNlX2xvZ2luX2RldGFpbHMobG9naW4sIHB0ciAtIGxvZ2luIC0gMSwKQEAgLTU2OCw3ICs1NzUsNyBAQAogfQogCiAvKiBzY2FuIGZvciBieXRlIHZhbHVlcyA8IDMxIG9yIDEyNyAqLwotc3RhdGljIENVUkxVY29kZSBqdW5rc2NhbihjaGFyICpwYXJ0KQorc3RhdGljIENVUkxVY29kZSBqdW5rc2Nhbihjb25zdCBjaGFyICpwYXJ0KQogewogICBpZihwYXJ0KSB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgYmFkYnl0ZXNbXT17CkBAIC01NzcsNyArNTg0LDcgQEAKICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCiAgICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAogICAgICAgMHg3ZiwKLSAgICAgIDB4MDAgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgICAgIDB4MDAgLyogbnVsbC10ZXJtaW5hdGUgKi8KICAgICB9OwogICAgIHNpemVfdCBuID0gc3RybGVuKHBhcnQpOwogICAgIHNpemVfdCBuZmluZSA9IHN0cmNzcG4ocGFydCwgYmFkYnl0ZXMpOwpAQCAtNTkxLDIwICs1OTgsMjYgQEAKIAogc3RhdGljIENVUkxVY29kZSBob3N0bmFtZV9jaGVjayhzdHJ1Y3QgQ3VybF9VUkwgKnUsIGNoYXIgKmhvc3RuYW1lKQogewotICBjb25zdCBjaGFyICpsID0gTlVMTDsgLyogYWNjZXB0ZWQgY2hhcmFjdGVycyAqLwogICBzaXplX3QgbGVuOwogICBzaXplX3QgaGxlbiA9IHN0cmxlbihob3N0bmFtZSk7CiAKICAgaWYoaG9zdG5hbWVbMF0gPT0gJ1snKSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBjaGFyIGRlc3RbMTZdOyAvKiBmaXRzIGEgYmluYXJ5IElQdjYgYWRkcmVzcyAqLworI2VuZGlmCisgICAgY29uc3QgY2hhciAqbCA9ICIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGOi4iOworICAgIGlmKGhsZW4gPCA0KSAvKiAnWzo6XScgaXMgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIHZhbGlkIHN0cmluZyAqLworICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CiAgICAgaG9zdG5hbWUrKzsKLSAgICBsID0gIjAxMjM0NTY3ODlhYmNkZWZBQkNERUY6Oi4iOwogICAgIGhsZW4gLT0gMjsKLSAgfQogCi0gIGlmKGwpIHsKKyAgICBpZihob3N0bmFtZVtobGVuXSAhPSAnXScpCisgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKKwogICAgIC8qIG9ubHkgdmFsaWQgbGV0dGVycyBhcmUgb2sgKi8KICAgICBsZW4gPSBzdHJzcG4oaG9zdG5hbWUsIGwpOwogICAgIGlmKGhsZW4gIT0gbGVuKSB7CisgICAgICBobGVuID0gbGVuOwogICAgICAgaWYoaG9zdG5hbWVbbGVuXSA9PSAnJScpIHsKICAgICAgICAgLyogdGhpcyBjb3VsZCBub3cgYmUgJyVbem9uZSBpZF0nICovCiAgICAgICAgIGNoYXIgem9uZWlkWzE2XTsKQEAgLTYyOCw2ICs2NDEsMTIgQEAKICAgICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CiAgICAgICAvKiBob3N0bmFtZSBpcyBmaW5lICovCiAgICAgfQorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgaG9zdG5hbWVbaGxlbl0gPSAwOyAvKiBlbmQgdGhlIGFkZHJlc3MgdGhlcmUgKi8KKyAgICBpZigxICE9IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgZGVzdCkpCisgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKKyAgICBob3N0bmFtZVtobGVuXSA9ICddJzsgLyogcmVzdG9yZSBlbmRpbmcgYnJhY2tldCAqLworI2VuZGlmCiAgIH0KICAgZWxzZSB7CiAgICAgLyogbGV0dGVycyBmcm9tIHRoZSBzZWNvbmQgc3RyaW5nIGlzIG5vdCBvayAqLwpAQCAtNjUzLDEwICs2NzIsOSBAQAogICBDVVJMVWNvZGUgcmVzdWx0OwogICBib29sIHVybF9oYXNfc2NoZW1lID0gRkFMU0U7CiAgIGNoYXIgc2NoZW1lYnVmW01BWF9TQ0hFTUVfTEVOICsgMV07Ci0gIGNoYXIgKnNjaGVtZXAgPSBOVUxMOworICBjb25zdCBjaGFyICpzY2hlbWVwID0gTlVMTDsKICAgc2l6ZV90IHNjaGVtZWxlbiA9IDA7CiAgIHNpemVfdCB1cmxsZW47Ci0gIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmggPSBOVUxMOwogCiAgIGlmKCF1cmwpCiAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CkBAIC03NzUsNiArNzkzLDcgQEAKIAogICAgICAgaWYoanVua3NjYW4oc2NoZW1lcCkpCiAgICAgICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOworCiAgICAgfQogICAgIGVsc2UgewogICAgICAgLyogbm8gc2NoZW1lISAqLwpAQCAtNzgyLDcgKzgwMSw3IEBACiAgICAgICBpZighKGZsYWdzICYgKENVUkxVX0RFRkFVTFRfU0NIRU1FfENVUkxVX0dVRVNTX1NDSEVNRSkpKQogICAgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKICAgICAgIGlmKGZsYWdzICYgQ1VSTFVfREVGQVVMVF9TQ0hFTUUpCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSBERUZBVUxUX1NDSEVNRTsKKyAgICAgICAgc2NoZW1lcCA9IERFRkFVTFRfU0NIRU1FOwogCiAgICAgICAvKgogICAgICAgICogVGhlIFVSTCB3YXMgYmFkbHkgZm9ybWF0dGVkLCBsZXQncyB0cnkgd2l0aG91dCBzY2hlbWUgc3BlY2lmaWVkLgpAQCAtNzk1LDc0ICs4MTQsODMgQEAKICAgICAgIHArKzsKIAogICAgIGxlbiA9IHAgLSBob3N0cDsKLSAgICBpZighbGVuKQotICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7Ci0KLSAgICBtZW1jcHkoaG9zdG5hbWUsIGhvc3RwLCBsZW4pOwotICAgIGhvc3RuYW1lW2xlbl0gPSAwOwotCi0gICAgaWYoKGZsYWdzICYgQ1VSTFVfR1VFU1NfU0NIRU1FKSAmJiAhc2NoZW1lcCkgewotICAgICAgLyogbGVnYWN5IGN1cmwtc3R5bGUgZ3Vlc3MgYmFzZWQgb24gaG9zdCBuYW1lICovCi0gICAgICBpZihjaGVja3ByZWZpeCgiZnRwLiIsIGhvc3RuYW1lKSkKLSAgICAgICAgc2NoZW1lcCA9IChjaGFyICopImZ0cCI7Ci0gICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJkaWN0LiIsIGhvc3RuYW1lKSkKLSAgICAgICAgc2NoZW1lcCA9IChjaGFyICopImRpY3QiOwotICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgibGRhcC4iLCBob3N0bmFtZSkpCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSJsZGFwIjsKLSAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoImltYXAuIiwgaG9zdG5hbWUpKQotICAgICAgICBzY2hlbWVwID0gKGNoYXIgKikiaW1hcCI7Ci0gICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJzbXRwLiIsIGhvc3RuYW1lKSkKLSAgICAgICAgc2NoZW1lcCA9IChjaGFyICopInNtdHAiOwotICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgicG9wMy4iLCBob3N0bmFtZSkpCi0gICAgICAgIHNjaGVtZXAgPSAoY2hhciAqKSJwb3AzIjsKLSAgICAgIGVsc2UKLSAgICAgICAgc2NoZW1lcCA9IChjaGFyICopImh0dHAiOworICAgIGlmKGxlbikgeworICAgICAgbWVtY3B5KGhvc3RuYW1lLCBob3N0cCwgbGVuKTsKKyAgICAgIGhvc3RuYW1lW2xlbl0gPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmKCEoZmxhZ3MgJiBDVVJMVV9OT19BVVRIT1JJVFkpKQorICAgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKICAgICB9CiAKICAgICBsZW4gPSBzdHJsZW4ocCk7CiAgICAgbWVtY3B5KHBhdGgsIHAsIGxlbik7CiAgICAgcGF0aFtsZW5dID0gMDsKIAotICAgIHUtPnNjaGVtZSA9IHN0cmR1cChzY2hlbWVwKTsKLSAgICBpZighdS0+c2NoZW1lKQotICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOworICAgIGlmKHNjaGVtZXApIHsKKyAgICAgIHUtPnNjaGVtZSA9IHN0cmR1cChzY2hlbWVwKTsKKyAgICAgIGlmKCF1LT5zY2hlbWUpCisgICAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKyAgICB9CiAgIH0KIAotICAvKiBpZiB0aGlzIGlzIGEga25vd24gc2NoZW1lLCBnZXQgc29tZSBkZXRhaWxzICovCi0gIGggPSBDdXJsX2J1aWx0aW5fc2NoZW1lKHUtPnNjaGVtZSk7Ci0KICAgaWYoanVua3NjYW4ocGF0aCkpCiAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CiAKLSAgcXVlcnkgPSBzdHJjaHIocGF0aCwgJz8nKTsKLSAgaWYocXVlcnkpCi0gICAgKnF1ZXJ5KysgPSAwOwotCi0gIGZyYWdtZW50ID0gc3RyY2hyKHF1ZXJ5P3F1ZXJ5OnBhdGgsICcjJyk7Ci0gIGlmKGZyYWdtZW50KQotICAgICpmcmFnbWVudCsrID0gMDsKLQotICBpZighcGF0aFswXSkKLSAgICAvKiBpZiB0aGVyZSdzIG5vIHBhdGggc2V0LCB1bnNldCAqLwotICAgIHBhdGggPSBOVUxMOwotICBlbHNlIGlmKCEoZmxhZ3MgJiBDVVJMVV9QQVRIX0FTX0lTKSkgewotICAgIC8qIHNhbml0aXNlIHBhdGhzIGFuZCByZW1vdmUgLi4vIGFuZCAuLyBzZXF1ZW5jZXMgYWNjb3JkaW5nIHRvIFJGQzM5ODYgKi8KLSAgICBjaGFyICpuZXdwID0gQ3VybF9kZWRvdGRvdGlmeShwYXRoKTsKKyAgaWYoKGZsYWdzICYgQ1VSTFVfVVJMRU5DT0RFKSAmJiBwYXRoWzBdKSB7CisgICAgLyogd29yc3QgY2FzZSBvdXRwdXQgbGVuZ3RoIGlzIDN4IHRoZSBvcmlnaW5hbCEgKi8KKyAgICBjaGFyICpuZXdwID0gbWFsbG9jKHN0cmxlbihwYXRoKSAqIDMpOwogICAgIGlmKCFuZXdwKQogICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOwotCi0gICAgaWYoc3RyY21wKG5ld3AsIHBhdGgpKSB7Ci0gICAgICAvKiBpZiB3ZSBnb3QgYSBuZXcgdmVyc2lvbiAqLwotICAgICAgcGF0aCA9IG5ld3A7Ci0gICAgICBwYXRoX2FsbG9jZWQgPSBUUlVFOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBmcmVlKG5ld3ApOworICAgIHBhdGhfYWxsb2NlZCA9IFRSVUU7CisgICAgc3RyY3B5X3VybChuZXdwLCBwYXRoLCBUUlVFKTsgLyogY29uc2lkZXIgaXQgcmVsYXRpdmUgKi8KKyAgICB1LT50ZW1wcGF0aCA9IHBhdGggPSBuZXdwOwogICB9Ci0gIGlmKHBhdGgpIHsKKworICBmcmFnbWVudCA9IHN0cmNocihwYXRoLCAnIycpOworICBpZihmcmFnbWVudCkgeworICAgICpmcmFnbWVudCsrID0gMDsKKyAgICBpZihmcmFnbWVudFswXSkgeworICAgICAgdS0+ZnJhZ21lbnQgPSBzdHJkdXAoZnJhZ21lbnQpOworICAgICAgaWYoIXUtPmZyYWdtZW50KQorICAgICAgICByZXR1cm4gQ1VSTFVFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICB9CisKKyAgcXVlcnkgPSBzdHJjaHIocGF0aCwgJz8nKTsKKyAgaWYocXVlcnkpIHsKKyAgICAqcXVlcnkrKyA9IDA7CisgICAgLyogZG9uZSBldmVuIGlmIHRoZSBxdWVyeSBwYXJ0IGlzIGEgYmxhbmsgc3RyaW5nICovCisgICAgdS0+cXVlcnkgPSBzdHJkdXAocXVlcnkpOworICAgIGlmKCF1LT5xdWVyeSkKKyAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIGlmKCFwYXRoWzBdKQorICAgIC8qIGlmIHRoZXJlJ3Mgbm8gcGF0aCBsZWZ0IHNldCwgdW5zZXQgKi8KKyAgICBwYXRoID0gTlVMTDsKKyAgZWxzZSB7CisgICAgaWYoIShmbGFncyAmIENVUkxVX1BBVEhfQVNfSVMpKSB7CisgICAgICAvKiByZW1vdmUgLi4vIGFuZCAuLyBzZXF1ZW5jZXMgYWNjb3JkaW5nIHRvIFJGQzM5ODYgKi8KKyAgICAgIGNoYXIgKm5ld3AgPSBDdXJsX2RlZG90ZG90aWZ5KHBhdGgpOworICAgICAgaWYoIW5ld3ApCisgICAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKKworICAgICAgaWYoc3RyY21wKG5ld3AsIHBhdGgpKSB7CisgICAgICAgIC8qIGlmIHdlIGdvdCBhIG5ldyB2ZXJzaW9uICovCisgICAgICAgIGlmKHBhdGhfYWxsb2NlZCkKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHUtPnRlbXBwYXRoKTsKKyAgICAgICAgdS0+dGVtcHBhdGggPSBwYXRoID0gbmV3cDsKKyAgICAgICAgcGF0aF9hbGxvY2VkID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZnJlZShuZXdwKTsKKyAgICB9CisKICAgICB1LT5wYXRoID0gcGF0aF9hbGxvY2VkP3BhdGg6c3RyZHVwKHBhdGgpOwogICAgIGlmKCF1LT5wYXRoKQogICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOworICAgIHUtPnRlbXBwYXRoID0gTlVMTDsgLyogdXNlZCBub3cgKi8KICAgfQogCiAgIGlmKGhvc3RuYW1lKSB7CkBAIC04NzIsNyArOTAwLDcgQEAKICAgICBpZihqdW5rc2Nhbihob3N0bmFtZSkpCiAgICAgICByZXR1cm4gQ1VSTFVFX01BTEZPUk1FRF9JTlBVVDsKIAotICAgIHJlc3VsdCA9IHBhcnNlX2hvc3RuYW1lX2xvZ2luKHUsIGgsICZob3N0bmFtZSwgZmxhZ3MpOworICAgIHJlc3VsdCA9IHBhcnNlX2hvc3RuYW1lX2xvZ2luKHUsICZob3N0bmFtZSwgZmxhZ3MpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTg4MCwyOCArOTA4LDQ0IEBACiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdCA9IGhvc3RuYW1lX2NoZWNrKHUsIGhvc3RuYW1lKTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmKDAgPT0gc3RybGVuKGhvc3RuYW1lKSAmJiAoZmxhZ3MgJiBDVVJMVV9OT19BVVRIT1JJVFkpKSB7CisgICAgICAvKiBTa2lwIGhvc3RuYW1lIGNoZWNrLCBpdCdzIGFsbG93ZWQgdG8gYmUgZW1wdHkuICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVzdWx0ID0gaG9zdG5hbWVfY2hlY2sodSwgaG9zdG5hbWUpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAogICAgIHUtPmhvc3QgPSBzdHJkdXAoaG9zdG5hbWUpOwogICAgIGlmKCF1LT5ob3N0KQogICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOworCisgICAgaWYoKGZsYWdzICYgQ1VSTFVfR1VFU1NfU0NIRU1FKSAmJiAhc2NoZW1lcCkgeworICAgICAgLyogbGVnYWN5IGN1cmwtc3R5bGUgZ3Vlc3MgYmFzZWQgb24gaG9zdCBuYW1lICovCisgICAgICBpZihjaGVja3ByZWZpeCgiZnRwLiIsIGhvc3RuYW1lKSkKKyAgICAgICAgc2NoZW1lcCA9ICJmdHAiOworICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiZGljdC4iLCBob3N0bmFtZSkpCisgICAgICAgIHNjaGVtZXAgPSAiZGljdCI7CisgICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJsZGFwLiIsIGhvc3RuYW1lKSkKKyAgICAgICAgc2NoZW1lcCA9ICJsZGFwIjsKKyAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoImltYXAuIiwgaG9zdG5hbWUpKQorICAgICAgICBzY2hlbWVwID0gImltYXAiOworICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgic210cC4iLCBob3N0bmFtZSkpCisgICAgICAgIHNjaGVtZXAgPSAic210cCI7CisgICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJwb3AzLiIsIGhvc3RuYW1lKSkKKyAgICAgICAgc2NoZW1lcCA9ICJwb3AzIjsKKyAgICAgIGVsc2UKKyAgICAgICAgc2NoZW1lcCA9ICJodHRwIjsKKworICAgICAgdS0+c2NoZW1lID0gc3RyZHVwKHNjaGVtZXApOworICAgICAgaWYoIXUtPnNjaGVtZSkKKyAgICAgICAgcmV0dXJuIENVUkxVRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KICAgfQogCi0gIGlmKHF1ZXJ5KSB7Ci0gICAgdS0+cXVlcnkgPSBzdHJkdXAocXVlcnkpOwotICAgIGlmKCF1LT5xdWVyeSkKLSAgICAgIHJldHVybiBDVVJMVUVfT1VUX09GX01FTU9SWTsKLSAgfQotICBpZihmcmFnbWVudCAmJiBmcmFnbWVudFswXSkgewotICAgIHUtPmZyYWdtZW50ID0gc3RyZHVwKGZyYWdtZW50KTsKLSAgICBpZighdS0+ZnJhZ21lbnQpCi0gICAgICByZXR1cm4gQ1VSTFVFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLQotICBmcmVlKHUtPnNjcmF0Y2gpOwotICB1LT5zY3JhdGNoID0gTlVMTDsKKyAgQ3VybF9zYWZlZnJlZSh1LT5zY3JhdGNoKTsKKyAgQ3VybF9zYWZlZnJlZSh1LT50ZW1wcGF0aCk7CiAKICAgcmV0dXJuIENVUkxVRV9PSzsKIH0KQEAgLTEwNjYsMjQgKzExMTAsMjMgQEAKICAgICAgIGVsc2UKICAgICAgICAgcmV0dXJuIENVUkxVRV9OT19TQ0hFTUU7CiAKLSAgICAgIGlmKHNjaGVtZSkgewotICAgICAgICBoID0gQ3VybF9idWlsdGluX3NjaGVtZShzY2hlbWUpOwotICAgICAgICBpZighcG9ydCAmJiAoZmxhZ3MgJiBDVVJMVV9ERUZBVUxUX1BPUlQpKSB7Ci0gICAgICAgICAgLyogdGhlcmUncyBubyBzdG9yZWQgcG9ydCBudW1iZXIsIGJ1dCBhc2tlZCB0byBkZWxpdmVyCi0gICAgICAgICAgICAgYSBkZWZhdWx0IG9uZSBmb3IgdGhlIHNjaGVtZSAqLwotICAgICAgICAgIGlmKGgpIHsKLSAgICAgICAgICAgIG1zbnByaW50Zihwb3J0YnVmLCBzaXplb2YocG9ydGJ1ZiksICIlbGQiLCBoLT5kZWZwb3J0KTsKLSAgICAgICAgICAgIHBvcnQgPSBwb3J0YnVmOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHBvcnQpIHsKLSAgICAgICAgICAvKiB0aGVyZSBpcyBhIHN0b3JlZCBwb3J0IG51bWJlciwgYnV0IGFza2VkIHRvIGluaGliaXQgaWYgaXQgbWF0Y2hlcwotICAgICAgICAgICAgIHRoZSBkZWZhdWx0IG9uZSBmb3IgdGhlIHNjaGVtZSAqLwotICAgICAgICAgIGlmKGggJiYgKGgtPmRlZnBvcnQgPT0gdS0+cG9ydG51bSkgJiYKLSAgICAgICAgICAgICAoZmxhZ3MgJiBDVVJMVV9OT19ERUZBVUxUX1BPUlQpKQotICAgICAgICAgICAgcG9ydCA9IE5VTEw7CisgICAgICBoID0gQ3VybF9idWlsdGluX3NjaGVtZShzY2hlbWUpOworICAgICAgaWYoIXBvcnQgJiYgKGZsYWdzICYgQ1VSTFVfREVGQVVMVF9QT1JUKSkgeworICAgICAgICAvKiB0aGVyZSdzIG5vIHN0b3JlZCBwb3J0IG51bWJlciwgYnV0IGFza2VkIHRvIGRlbGl2ZXIKKyAgICAgICAgICAgYSBkZWZhdWx0IG9uZSBmb3IgdGhlIHNjaGVtZSAqLworICAgICAgICBpZihoKSB7CisgICAgICAgICAgbXNucHJpbnRmKHBvcnRidWYsIHNpemVvZihwb3J0YnVmKSwgIiVsZCIsIGgtPmRlZnBvcnQpOworICAgICAgICAgIHBvcnQgPSBwb3J0YnVmOwogICAgICAgICB9CiAgICAgICB9CisgICAgICBlbHNlIGlmKHBvcnQpIHsKKyAgICAgICAgLyogdGhlcmUgaXMgYSBzdG9yZWQgcG9ydCBudW1iZXIsIGJ1dCBhc2tlZCB0byBpbmhpYml0IGlmIGl0IG1hdGNoZXMKKyAgICAgICAgICAgdGhlIGRlZmF1bHQgb25lIGZvciB0aGUgc2NoZW1lICovCisgICAgICAgIGlmKGggJiYgKGgtPmRlZnBvcnQgPT0gdS0+cG9ydG51bSkgJiYKKyAgICAgICAgICAgKGZsYWdzICYgQ1VSTFVfTk9fREVGQVVMVF9QT1JUKSkKKyAgICAgICAgICBwb3J0ID0gTlVMTDsKKyAgICAgIH0KKwogICAgICAgaWYoaCAmJiAhKGgtPmZsYWdzICYgUFJPVE9QVF9VUkxPUFRJT05TKSkKICAgICAgICAgb3B0aW9ucyA9IE5VTEw7CiAKQEAgLTExNDIsNyArMTE4NSwxMCBAQAogICAgIGlmKHVybGRlY29kZSkgewogICAgICAgY2hhciAqZGVjb2RlZDsKICAgICAgIHNpemVfdCBkbGVuOwotICAgICAgQ1VSTGNvZGUgcmVzID0gQ3VybF91cmxkZWNvZGUoTlVMTCwgKnBhcnQsIDAsICZkZWNvZGVkLCAmZGxlbiwgVFJVRSk7CisgICAgICAvKiB0aGlzIHVuY29uZGl0aW9uYWwgcmVqZWN0aW9uIG9mIGNvbnRyb2wgYnl0ZXMgaXMgZG9jdW1lbnRlZAorICAgICAgICAgQVBJIGJlaGF2aW9yICovCisgICAgICBDVVJMY29kZSByZXMgPSBDdXJsX3VybGRlY29kZShOVUxMLCAqcGFydCwgMCwgJmRlY29kZWQsICZkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVKRUNUX0NUUkwpOwogICAgICAgZnJlZSgqcGFydCk7CiAgICAgICBpZihyZXMpIHsKICAgICAgICAgKnBhcnQgPSBOVUxMOwpAQCAtMTMzMSw3ICsxMzc3LDggQEAKICAgZGVmYXVsdDoKICAgICByZXR1cm4gQ1VSTFVFX1VOS05PV05fUEFSVDsKICAgfQotICBpZihzdG9yZXApIHsKKyAgREVCVUdBU1NFUlQoc3RvcmVwKTsKKyAgewogICAgIGNvbnN0IGNoYXIgKm5ld3AgPSBwYXJ0OwogICAgIHNpemVfdCBuYWxsb2MgPSBzdHJsZW4ocGFydCk7CiAKQEAgLTEzNTEsNyArMTM5OCw3IEBACiAgICAgICAgIGkgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXBhcnQ7CiAgICAgICAgIGZvcihvID0gZW5jOyAqaTsgKytvLCArK2kpCiAgICAgICAgICAgKm8gPSAoKmkgPT0gJyAnKSA/ICcrJyA6ICppOwotICAgICAgICAqbyA9IDA7IC8qIHplcm8gdGVybWluYXRlICovCisgICAgICAgICpvID0gMDsgLyogbnVsbC10ZXJtaW5hdGUgKi8KICAgICAgICAgcGFydCA9IHN0cmR1cChlbmMpOwogICAgICAgICBpZighcGFydCkgewogICAgICAgICAgIGZyZWUoZW5jKTsKQEAgLTEzNzUsNyArMTQyMiw3IEBACiAgICAgICAgICAgbyArPSAzOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICAqbyA9IDA7IC8qIHplcm8gdGVybWluYXRlICovCisgICAgICAqbyA9IDA7IC8qIG51bGwtdGVybWluYXRlICovCiAgICAgICBuZXdwID0gZW5jOwogICAgICAgaWYoZnJlZV9wYXJ0KQogICAgICAgICBmcmVlKChjaGFyICopcGFydCk7CkBAIC0xNDIzLDkgKzE0NzAsMTQgQEAKICAgICB9CiAKICAgICBpZih3aGF0ID09IENVUkxVUEFSVF9IT1NUKSB7Ci0gICAgICBpZihob3N0bmFtZV9jaGVjayh1LCAoY2hhciAqKW5ld3ApKSB7Ci0gICAgICAgIGZyZWUoKGNoYXIgKiluZXdwKTsKLSAgICAgICAgcmV0dXJuIENVUkxVRV9NQUxGT1JNRURfSU5QVVQ7CisgICAgICBpZigwID09IHN0cmxlbihuZXdwKSAmJiAoZmxhZ3MgJiBDVVJMVV9OT19BVVRIT1JJVFkpKSB7CisgICAgICAgIC8qIFNraXAgaG9zdG5hbWUgY2hlY2ssIGl0J3MgYWxsb3dlZCB0byBiZSBlbXB0eS4gKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZihob3N0bmFtZV9jaGVjayh1LCAoY2hhciAqKW5ld3ApKSB7CisgICAgICAgICAgZnJlZSgoY2hhciAqKW5ld3ApOworICAgICAgICAgIHJldHVybiBDVVJMVUVfTUFMRk9STUVEX0lOUFVUOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxkYXRhLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi91cmxkYXRhLmgKaW5kZXggZDc1OTU5Mi4uZjgwYTAyZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdXJsZGF0YS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3VybGRhdGEuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDksNiArNDksNyBAQAogI2RlZmluZSBQT1JUX1JUTVBUIFBPUlRfSFRUUAogI2RlZmluZSBQT1JUX1JUTVBTIFBPUlRfSFRUUFMKICNkZWZpbmUgUE9SVF9HT1BIRVIgNzAKKyNkZWZpbmUgUE9SVF9NUVRUIDE4ODMKIAogI2RlZmluZSBESUNUX01BVENIICIvTUFUQ0g6IgogI2RlZmluZSBESUNUX01BVENIMiAiL006IgpAQCAtNjgsNiArNjksNyBAQAogI2RlZmluZSBQUk9UT19GQU1JTFlfUE9QMyAoQ1VSTFBST1RPX1BPUDN8Q1VSTFBST1RPX1BPUDNTKQogI2RlZmluZSBQUk9UT19GQU1JTFlfU01CICAoQ1VSTFBST1RPX1NNQnxDVVJMUFJPVE9fU01CUykKICNkZWZpbmUgUFJPVE9fRkFNSUxZX1NNVFAgKENVUkxQUk9UT19TTVRQfENVUkxQUk9UT19TTVRQUykKKyNkZWZpbmUgUFJPVE9fRkFNSUxZX1NTSCAgKENVUkxQUk9UT19TQ1B8Q1VSTFBST1RPX1NGVFApCiAKICNkZWZpbmUgREVGQVVMVF9DT05OQ0FDSEVfU0laRSA1CiAKQEAgLTc5LDcgKzgxLDcgQEAKICovCiAjZGVmaW5lIFJFU1BfVElNRU9VVCAoMTIwKjEwMDApCiAKLS8qIE1heCBzdHJpbmcgaW50cHV0IGxlbmd0aCBpcyBhIHByZWNhdXRpb24gYWdhaW5zdCBhYnVzZSBhbmQgdG8gZGV0ZWN0IGp1bmsKKy8qIE1heCBzdHJpbmcgaW5wdXQgbGVuZ3RoIGlzIGEgcHJlY2F1dGlvbiBhZ2FpbnN0IGFidXNlIGFuZCB0byBkZXRlY3QganVuawogICAgaW5wdXQgZWFzaWVyIGFuZCBiZXR0ZXIuICovCiAjZGVmaW5lIENVUkxfTUFYX0lOUFVUX0xFTkdUSCA4MDAwMDAwCiAKQEAgLTEwMiw2ICsxMDQsNyBAQAogI2luY2x1ZGUgImhvc3RpcC5oIgogI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlICJzcGxheS5oIgorI2luY2x1ZGUgImR5bmJ1Zi5oIgogCiAvKiByZXR1cm4gdGhlIGNvdW50IG9mIGJ5dGVzIHNlbnQsIG9yIC0xIG9uIGVycm9yICovCiB0eXBlZGVmIHNzaXplX3QgKEN1cmxfc2VuZCkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KQEAgLTEyMywxMiArMTI2LDE0IEBACiAjaW5jbHVkZSAic210cC5oIgogI2luY2x1ZGUgImZ0cC5oIgogI2luY2x1ZGUgImZpbGUuaCIKLSNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ2c3NoL3NzaC5oIgogI2luY2x1ZGUgImh0dHAuaCIKICNpbmNsdWRlICJydHNwLmgiCiAjaW5jbHVkZSAic21iLmgiCisjaW5jbHVkZSAibXF0dC5oIgogI2luY2x1ZGUgIndpbGRjYXJkLmgiCiAjaW5jbHVkZSAibXVsdGloYW5kbGUuaCIKKyNpbmNsdWRlICJxdWljLmgiCiAKICNpZmRlZiBIQVZFX0dTU0FQSQogIyBpZmRlZiBIQVZFX0dTU0dOVQpAQCAtMTQ4LDE2ICsxNTMsMTggQEAKICNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KICNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfSCAqLwogCi0vKiBJbml0aWFsIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBzdG9yZSBoZWFkZXJzIGluLCBpdCdsbCBiZSBlbmxhcmdlZCBpbiBjYXNlCi0gICBvZiBuZWVkLiAqLwotI2RlZmluZSBIRUFERVJTSVpFIDI1NgotCiAjZGVmaW5lIENVUkxFQVNZX01BR0lDX05VTUJFUiAweGMwZGVkYmFkVQogI2RlZmluZSBHT09EX0VBU1lfSEFORExFKHgpIFwKICAgKCh4KSAmJiAoKHgpLT5tYWdpYyA9PSBDVVJMRUFTWV9NQUdJQ19OVU1CRVIpKQogCiAvKiB0aGUgdHlwZSB3ZSB1c2UgZm9yIHN0b3JpbmcgYSBzaW5nbGUgYm9vbGVhbiBiaXQgKi8KKyNpZmRlZiBfTVNDX1ZFUgordHlwZWRlZiBib29sIGJpdDsKKyNkZWZpbmUgQklUKHgpIGJvb2wgeAorI2Vsc2UKIHR5cGVkZWYgdW5zaWduZWQgaW50IGJpdDsKKyNkZWZpbmUgQklUKHgpIGJpdCB4OjEKKyNlbmRpZgogCiAjaWZkZWYgSEFWRV9HU1NBUEkKIC8qIFR5cGVzIG5lZWRlZCBmb3Iga3JiNS1mdHAgY29ubmVjdGlvbnMgKi8KQEAgLTE2NSw3ICsxNzIsNyBAQAogICB2b2lkICpkYXRhOwogICBzaXplX3Qgc2l6ZTsKICAgc2l6ZV90IGluZGV4OwotICBiaXQgZW9mX2ZsYWc6MTsKKyAgQklUKGVvZl9mbGFnKTsKIH07CiAKIGVudW0gcHJvdGVjdGlvbl9sZXZlbCB7CkBAIC0yMDgsNyArMjE1LDcgQEAKICNpZiBkZWZpbmVkKFVTRV9TU0wpCiAgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kOwogI2VuZGlmCi0gIGJpdCB1c2U6MTsKKyAgQklUKHVzZSk7CiB9OwogCiBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnIHsKQEAgLTIyMSwxMCArMjI4LDEyIEBACiAgIGNoYXIgKmVnZHNvY2tldDsgICAgICAgLyogcGF0aCB0byBmaWxlIGNvbnRhaW5pbmcgdGhlIEVHRCBkYWVtb24gc29ja2V0ICovCiAgIGNoYXIgKmNpcGhlcl9saXN0OyAgICAgLyogbGlzdCBvZiBjaXBoZXJzIHRvIHVzZSAqLwogICBjaGFyICpjaXBoZXJfbGlzdDEzOyAgIC8qIGxpc3Qgb2YgVExTIDEuMyBjaXBoZXIgc3VpdGVzIHRvIHVzZSAqLwotICBiaXQgdmVyaWZ5cGVlcjoxOyAgICAgIC8qIHNldCBUUlVFIGlmIHRoaXMgaXMgZGVzaXJlZCAqLwotICBiaXQgdmVyaWZ5aG9zdDoxOyAgICAgIC8qIHNldCBUUlVFIGlmIENOL1NBTiBtdXN0IG1hdGNoIGhvc3RuYW1lICovCi0gIGJpdCB2ZXJpZnlzdGF0dXM6MTsgICAgLyogc2V0IFRSVUUgaWYgY2VydGlmaWNhdGUgc3RhdHVzIG11c3QgYmUgY2hlY2tlZCAqLwotICBiaXQgc2Vzc2lvbmlkOjE7ICAgICAgIC8qIGNhY2hlIHNlc3Npb24gSURzIG9yIG5vdCAqLworICBjaGFyICpwaW5uZWRfa2V5OworICBzdHJ1Y3QgY3VybF9ibG9iICpjZXJ0X2Jsb2I7CisgIEJJVCh2ZXJpZnlwZWVyKTsgICAgICAgLyogc2V0IFRSVUUgaWYgdGhpcyBpcyBkZXNpcmVkICovCisgIEJJVCh2ZXJpZnlob3N0KTsgICAgICAgLyogc2V0IFRSVUUgaWYgQ04vU0FOIG11c3QgbWF0Y2ggaG9zdG5hbWUgKi8KKyAgQklUKHZlcmlmeXN0YXR1cyk7ICAgICAvKiBzZXQgVFJVRSBpZiBjZXJ0aWZpY2F0ZSBzdGF0dXMgbXVzdCBiZSBjaGVja2VkICovCisgIEJJVChzZXNzaW9uaWQpOyAgICAgICAgLyogY2FjaGUgc2Vzc2lvbiBJRHMgb3Igbm90ICovCiB9OwogCiBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhIHsKQEAgLTIzMiwxMSArMjQxLDE0IEBACiAgIGxvbmcgY2VydHZlcmlmeXJlc3VsdDsgLyogcmVzdWx0IGZyb20gdGhlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAqLwogICBjaGFyICpDUkxmaWxlOyAgIC8qIENSTCB0byBjaGVjayBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uICovCiAgIGNoYXIgKmlzc3VlcmNlcnQ7Lyogb3B0aW9uYWwgaXNzdWVyIGNlcnRpZmljYXRlIGZpbGVuYW1lICovCisgIHN0cnVjdCBjdXJsX2Jsb2IgKmlzc3VlcmNlcnRfYmxvYjsKICAgY3VybF9zc2xfY3R4X2NhbGxiYWNrIGZzc2xjdHg7IC8qIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgc3NsIGN0eCAqLwogICB2b2lkICpmc3NsY3R4cDsgICAgICAgIC8qIHBhcmFtZXRlciBmb3IgY2FsbCBiYWNrICovCiAgIGNoYXIgKmNlcnQ7IC8qIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIG5hbWUgKi8KKyAgc3RydWN0IGN1cmxfYmxvYiAqY2VydF9ibG9iOwogICBjaGFyICpjZXJ0X3R5cGU7IC8qIGZvcm1hdCBmb3IgY2VydGlmaWNhdGUgKGRlZmF1bHQ6IFBFTSkqLwogICBjaGFyICprZXk7IC8qIHByaXZhdGUga2V5IGZpbGUgbmFtZSAqLworICBzdHJ1Y3QgY3VybF9ibG9iICprZXlfYmxvYjsKICAgY2hhciAqa2V5X3R5cGU7IC8qIGZvcm1hdCBmb3IgcHJpdmF0ZSBrZXkgKGRlZmF1bHQ6IFBFTSkgKi8KICAgY2hhciAqa2V5X3Bhc3N3ZDsgLyogcGxhaW4gdGV4dCBwcml2YXRlIGtleSBwYXNzd29yZCAqLwogI2lmZGVmIFVTRV9UTFNfU1JQCkBAIC0yNDQsMTAgKzI1NiwxNCBAQAogICBjaGFyICpwYXNzd29yZDsgLyogVExTIHBhc3N3b3JkIChmb3IsIGUuZy4sIFNSUCkgKi8KICAgZW51bSBDVVJMX1RMU0FVVEggYXV0aHR5cGU7IC8qIFRMUyBhdXRoZW50aWNhdGlvbiB0eXBlIChkZWZhdWx0IFNSUCkgKi8KICNlbmRpZgotICBiaXQgY2VydGluZm86MTsgICAgIC8qIGdhdGhlciBsb3RzIG9mIGNlcnRpZmljYXRlIGluZm8gKi8KLSAgYml0IGZhbHNlc3RhcnQ6MTsKLSAgYml0IGVuYWJsZV9iZWFzdDoxOyAvKiBhbGxvdyB0aGlzIGZsYXcgZm9yIGludGVyb3BlcmFiaWxpdHkncyBzYWtlKi8KLSAgYml0IG5vX3Jldm9rZToxOyAgICAvKiBkaXNhYmxlIFNTTCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGNoZWNrcyAqLworICBCSVQoY2VydGluZm8pOyAgICAgLyogZ2F0aGVyIGxvdHMgb2YgY2VydGlmaWNhdGUgaW5mbyAqLworICBCSVQoZmFsc2VzdGFydCk7CisgIEJJVChlbmFibGVfYmVhc3QpOyAvKiBhbGxvdyB0aGlzIGZsYXcgZm9yIGludGVyb3BlcmFiaWxpdHkncyBzYWtlKi8KKyAgQklUKG5vX3Jldm9rZSk7ICAgIC8qIGRpc2FibGUgU1NMIGNlcnRpZmljYXRlIHJldm9jYXRpb24gY2hlY2tzICovCisgIEJJVChub19wYXJ0aWFsY2hhaW4pOyAvKiBkb24ndCBhY2NlcHQgcGFydGlhbCBjZXJ0aWZpY2F0ZSBjaGFpbnMgKi8KKyAgQklUKHJldm9rZV9iZXN0X2VmZm9ydCk7IC8qIGlnbm9yZSBTU0wgcmV2b2NhdGlvbiBvZmZsaW5lL21pc3NpbmcgcmV2b2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCBlcnJvcnMgKi8KKyAgQklUKG5hdGl2ZV9jYV9zdG9yZSk7IC8qIHVzZSB0aGUgbmF0aXZlIGNhIHN0b3JlIG9mIG9wZXJhdGluZyBzeXN0ZW0gKi8KIH07CiAKIHN0cnVjdCBzc2xfZ2VuZXJhbF9jb25maWcgewpAQCAtMjkwLDggKzMwNiw4IEBACiAgIGNoYXIgKnFvcDsKICAgY2hhciAqYWxnb3JpdGhtOwogICBpbnQgbmM7IC8qIG5vdW5jZSBjb3VudCAqLwotICBiaXQgc3RhbGU6MTsgLyogc2V0IHRydWUgZm9yIHJlLW5lZ290aWF0aW9uICovCi0gIGJpdCB1c2VyaGFzaDoxOworICBCSVQoc3RhbGUpOyAvKiBzZXQgdHJ1ZSBmb3IgcmUtbmVnb3RpYXRpb24gKi8KKyAgQklUKHVzZXJoYXNoKTsKICNlbmRpZgogfTsKIApAQCAtMzU3LDYgKzM3MywxNCBAQAogICB1bnNpZ25lZCBjaGFyIG5vbmNlWzhdOwogICB2b2lkICp0YXJnZXRfaW5mbzsgLyogVGFyZ2V0SW5mbyByZWNlaXZlZCBpbiB0aGUgbnRsbSB0eXBlLTIgbWVzc2FnZSAqLwogICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2luZm9fbGVuOworCisjaWYgZGVmaW5lZChOVExNX1dCX0VOQUJMRUQpCisgIC8qIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBTYW1iYSdzIHdpbmJpbmQgZGFlbW9uIGhlbHBlciBudGxtX2F1dGggKi8KKyAgY3VybF9zb2NrZXRfdCBudGxtX2F1dGhfaGxwcl9zb2NrZXQ7CisgIHBpZF90IG50bG1fYXV0aF9obHByX3BpZDsKKyAgY2hhciAqY2hhbGxlbmdlOyAvKiBUaGUgcmVjZWl2ZWQgYmFzZTY0IGVuY29kZWQgbnRsbSB0eXBlLTIgbWVzc2FnZSAqLworICBjaGFyICpyZXNwb25zZTsgIC8qIFRoZSBnZW5lcmF0ZWQgYmFzZTY0IG50bG0gdHlwZS0xL3R5cGUtMyBtZXNzYWdlICovCisjZW5kaWYKICNlbmRpZgogfTsKICNlbmRpZgpAQCAtMzg1LDEwICs0MDksMTAgQEAKICAgc2l6ZV90IG91dHB1dF90b2tlbl9sZW5ndGg7CiAjZW5kaWYKICNlbmRpZgotICBib29sIG5vYXV0aHBlcnNpc3Q7Ci0gIGJvb2wgaGF2ZW5vYXV0aHBlcnNpc3Q7Ci0gIGJvb2wgaGF2ZW5lZ2RhdGE7Ci0gIGJvb2wgaGF2ZW11bHRpcGxlcmVxdWVzdHM7CisgIEJJVChub2F1dGhwZXJzaXN0KTsKKyAgQklUKGhhdmVub2F1dGhwZXJzaXN0KTsKKyAgQklUKGhhdmVuZWdkYXRhKTsKKyAgQklUKGhhdmVtdWx0aXBsZXJlcXVlc3RzKTsKIH07CiAjZW5kaWYKIApAQCAtMzk3LDY4ICs0MjEsNzUgQEAKICAqIEJvb2xlYW4gdmFsdWVzIHRoYXQgY29uY2VybnMgdGhpcyBjb25uZWN0aW9uLgogICovCiBzdHJ1Y3QgQ29ubmVjdEJpdHMgewotICAvKiBhbHdheXMgbW9kaWZ5IGJpdHMuY2xvc2Ugd2l0aCB0aGUgY29ubmNsb3NlKCkgYW5kIGNvbm5rZWVwKCkgbWFjcm9zISAqLwotICBib29sIHByb3h5X3NzbF9jb25uZWN0ZWRbMl07IC8qIFRSVUUgd2hlbiBTU0wgaW5pdGlhbGl6YXRpb24gZm9yIEhUVFBTIHByb3h5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgY29tcGxldGUgKi8KICAgYm9vbCB0Y3Bjb25uZWN0WzJdOyAvKiB0aGUgVENQIGxheWVyIChvciBzaW1pbGFyKSBpcyBjb25uZWN0ZWQsIHRoaXMgaXMgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IHRpbWUgb24gdGhlIGZpcnN0IGNvbm5lY3QgZnVuY3Rpb24gY2FsbCAqLwotICBiaXQgY2xvc2U6MTsgLyogaWYgc2V0LCB3ZSBjbG9zZSB0aGUgY29ubmVjdGlvbiBhZnRlciB0aGlzIHJlcXVlc3QgKi8KLSAgYml0IHJldXNlOjE7IC8qIGlmIHNldCwgdGhpcyBpcyBhIHJlLXVzZWQgY29ubmVjdGlvbiAqLwotICBiaXQgY29ubl90b19ob3N0OjE7IC8qIGlmIHNldCwgdGhpcyBjb25uZWN0aW9uIGhhcyBhICJjb25uZWN0IHRvIGhvc3QiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdmVycmlkZXMgdGhlIGhvc3QgaW4gdGhlIFVSTCAqLwotICBiaXQgY29ubl90b19wb3J0OjE7IC8qIGlmIHNldCwgdGhpcyBjb25uZWN0aW9uIGhhcyBhICJjb25uZWN0IHRvIHBvcnQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdmVycmlkZXMgdGhlIHBvcnQgaW4gdGhlIFVSTCAocmVtb3RlIHBvcnQpICovCi0gIGJpdCBwcm94eToxOyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgcHJveHkgLSBhbnkgdHlwZSAqLwotICBiaXQgaHR0cHByb3h5OjE7ICAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgaHR0cCBwcm94eSAqLwotICBiaXQgc29ja3Nwcm94eToxOyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgc29ja3MgcHJveHkgKi8KLSAgYml0IHVzZXJfcGFzc3dkOjE7IC8qIGRvIHdlIHVzZSB1c2VyK3Bhc3N3b3JkIGZvciB0aGlzIGNvbm5lY3Rpb24/ICovCi0gIGJpdCBwcm94eV91c2VyX3Bhc3N3ZDoxOyAvKiB1c2VyK3Bhc3N3b3JkIGZvciB0aGUgcHJveHk/ICovCi0gIGJpdCBpcHY2X2lwOjE7IC8qIHdlIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgc2l0ZSBzcGVjaWZpZWQgd2l0aCBwdXJlIElQdjYKLSAgICAgICAgICAgICAgICAgICAgSVAgYWRkcmVzcyAqLwotICBiaXQgaXB2NjoxOyAgICAvKiB3ZSBjb21tdW5pY2F0ZSB3aXRoIGEgc2l0ZSB1c2luZyBhbiBJUHY2IGFkZHJlc3MgKi8KLSAgYml0IGRvX21vcmU6MTsgLyogdGhpcyBpcyBzZXQgVFJVRSBpZiB0aGUgLT5jdXJsX2RvX21vcmUoKSBmdW5jdGlvbiBpcwotICAgICAgICAgICAgICAgICAgICBzdXBwb3NlZCB0byBiZSBjYWxsZWQsIGFmdGVyIC0+Y3VybF9kbygpICovCi0gIGJpdCBwcm90b2Nvbm5zdGFydDoxOy8qIHRoZSBwcm90b2NvbCBsYXllciBoYXMgU1RBUlRFRCBpdHMgb3BlcmF0aW9uIGFmdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBUQ1AgbGF5ZXIgY29ubmVjdCAqLwotICBiaXQgcmV0cnk6MTsgICAgICAgICAvKiB0aGlzIGNvbm5lY3Rpb24gaXMgYWJvdXQgdG8gZ2V0IGNsb3NlZCBhbmQgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICByZS1hdHRlbXB0ZWQgYXQgYW5vdGhlciBjb25uZWN0aW9uLiAqLwotICBiaXQgdHVubmVsX3Byb3h5OjE7ICAvKiBpZiBDT05ORUNUIGlzIHVzZWQgdG8gInR1bm5lbCIgdGhyb3VnaCB0aGUgcHJveHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaW1wbGljaXQgd2hlbiBTU0wtcHJvdG9jb2xzIGFyZSB1c2VkIHRocm91Z2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllcywgYnV0IGNhbiBhbHNvIGJlIGVuYWJsZWQgZXhwbGljaXRseSBieQotICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBzICovCi0gIGJpdCBhdXRobmVnOjE7ICAgICAgIC8qIFRSVUUgd2hlbiB0aGUgYXV0aCBwaGFzZSBoYXMgc3RhcnRlZCwgd2hpY2ggbWVhbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3ZSBhcmUgY3JlYXRpbmcgYSByZXF1ZXN0IHdpdGggYW4gYXV0aCBoZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBpdCBpcyBub3QgdGhlIGZpbmFsIHJlcXVlc3QgaW4gdGhlIGF1dGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnb3RpYXRpb24uICovCi0gIGJpdCByZXdpbmRhZnRlcnNlbmQ6MTsvKiBUUlVFIHdoZW4gdGhlIHNlbmRpbmcgY291bGRuJ3QgYmUgc3RvcHBlZCBldmVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aG91Z2ggaXQgd2lsbCBiZSBkaXNjYXJkZWQuIFdoZW4gdGhlIHdob2xlIHNlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBpcyBkb25lLCB3ZSBtdXN0IGNhbGwgdGhlIGRhdGEgcmV3aW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay4gKi8KLSNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAotICBiaXQgZnRwX3VzZV9lcHN2OjE7ICAvKiBBcyBzZXQgd2l0aCBDVVJMT1BUX0ZUUF9VU0VfRVBTViwgYnV0IGlmIHdlIGZpbmQgb3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEVQU1YgZG9lc24ndCB3b3JrIHdlIGRpc2FibGUgaXQgZm9yIHRoZSBmb3J0aGNvbWluZwotICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyAqLwotICBiaXQgZnRwX3VzZV9lcHJ0OjE7ICAvKiBBcyBzZXQgd2l0aCBDVVJMT1BUX0ZUUF9VU0VfRVBSVCwgYnV0IGlmIHdlIGZpbmQgb3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEVQUlQgZG9lc24ndCB3b3JrIHdlIGRpc2FibGUgaXQgZm9yIHRoZSBmb3J0aGNvbWluZwotICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyAqLwotICBiaXQgZnRwX3VzZV9kYXRhX3NzbDoxOyAvKiBFbmFibGVkIFNTTCBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiAqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgYm9vbCBwcm94eV9zc2xfY29ubmVjdGVkWzJdOyAvKiBUUlVFIHdoZW4gU1NMIGluaXRpYWxpemF0aW9uIGZvciBIVFRQUyBwcm94eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNvbXBsZXRlICovCisgIEJJVChodHRwcHJveHkpOyAgLyogaWYgc2V0LCB0aGlzIHRyYW5zZmVyIGlzIGRvbmUgdGhyb3VnaCBhIGh0dHAgcHJveHkgKi8KKyAgQklUKHNvY2tzcHJveHkpOyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgc29ja3MgcHJveHkgKi8KKyAgQklUKHByb3h5X3VzZXJfcGFzc3dkKTsgLyogdXNlcitwYXNzd29yZCBmb3IgdGhlIHByb3h5PyAqLworICBCSVQodHVubmVsX3Byb3h5KTsgIC8qIGlmIENPTk5FQ1QgaXMgdXNlZCB0byAidHVubmVsIiB0aHJvdWdoIHRoZSBwcm94eS4KKyAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGltcGxpY2l0IHdoZW4gU1NMLXByb3RvY29scyBhcmUgdXNlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllcywgYnV0IGNhbiBhbHNvIGJlIGVuYWJsZWQgZXhwbGljaXRseSBieQorICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHMgKi8KKyAgQklUKHByb3h5X2Nvbm5lY3RfY2xvc2VkKTsgLyogVFJVRSBpZiBhIHByb3h5IGRpc2Nvbm5lY3RlZCB0aGUgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIENPTk5FQ1QgcmVxdWVzdCB3aXRoIGF1dGgsIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliY3VybCBzaG91bGQgcmVjb25uZWN0IGFuZCBjb250aW51ZS4gKi8KICNlbmRpZgotICBiaXQgbmV0cmM6MTsgICAgICAgICAvKiBuYW1lK3Bhc3N3b3JkIHByb3ZpZGVkIGJ5IG5ldHJjICovCi0gIGJpdCB1c2VycHdkX2luX3VybDoxOyAvKiBuYW1lK3Bhc3N3b3JkIGZvdW5kIGluIHVybCAqLwotICBiaXQgc3RyZWFtX3dhc19yZXdvdW5kOjE7IC8qIFRoZSBzdHJlYW0gd2FzIHJld291bmQgYWZ0ZXIgYSByZXF1ZXN0IHJlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0IHRoZSBlbmQgb2YgaXRzIHJlc3BvbnNlIGJ5dGUgYm91bmRhcnkgKi8KLSAgYml0IHByb3h5X2Nvbm5lY3RfY2xvc2VkOjE7IC8qIFRSVUUgaWYgYSBwcm94eSBkaXNjb25uZWN0ZWQgdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgQ09OTkVDVCByZXF1ZXN0IHdpdGggYXV0aCwgc28gdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliY3VybCBzaG91bGQgcmVjb25uZWN0IGFuZCBjb250aW51ZS4gKi8KLSAgYml0IGJvdW5kOjE7IC8qIHNldCB0cnVlIGlmIGJpbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgb24gdGhpcyBzb2NrZXQvCi0gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uICovCi0gIGJpdCB0eXBlX3NldDoxOyAgLyogdHlwZT0gd2FzIHVzZWQgaW4gdGhlIFVSTCAqLwotICBiaXQgbXVsdGlwbGV4OjE7IC8qIGNvbm5lY3Rpb24gaXMgbXVsdGlwbGV4ZWQgKi8KLSAgYml0IHRjcF9mYXN0b3BlbjoxOyAvKiB1c2UgVENQIEZhc3QgT3BlbiAqLwotICBiaXQgdGxzX2VuYWJsZV9ucG46MTsgIC8qIFRMUyBOUE4gZXh0ZW5zaW9uPyAqLwotICBiaXQgdGxzX2VuYWJsZV9hbHBuOjE7IC8qIFRMUyBBTFBOIGV4dGVuc2lvbj8gKi8KLSAgYml0IHNvY2tzcHJveHlfY29ubmVjdGluZzoxOyAvKiBjb25uZWN0aW5nIHRocm91Z2ggYSBzb2NrcyBwcm94eSAqLwotICBiaXQgY29ubmVjdF9vbmx5OjE7CisgIC8qIGFsd2F5cyBtb2RpZnkgYml0cy5jbG9zZSB3aXRoIHRoZSBjb25uY2xvc2UoKSBhbmQgY29ubmtlZXAoKSBtYWNyb3MhICovCisgIEJJVChjbG9zZSk7IC8qIGlmIHNldCwgd2UgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhpcyByZXF1ZXN0ICovCisgIEJJVChyZXVzZSk7IC8qIGlmIHNldCwgdGhpcyBpcyBhIHJlLXVzZWQgY29ubmVjdGlvbiAqLworICBCSVQoYWx0dXNlZCk7IC8qIHRoaXMgaXMgYW4gYWx0LXN2YyAicmVkaXJlY3QiICovCisgIEJJVChjb25uX3RvX2hvc3QpOyAvKiBpZiBzZXQsIHRoaXMgY29ubmVjdGlvbiBoYXMgYSAiY29ubmVjdCB0byBob3N0IgorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdmVycmlkZXMgdGhlIGhvc3QgaW4gdGhlIFVSTCAqLworICBCSVQoY29ubl90b19wb3J0KTsgLyogaWYgc2V0LCB0aGlzIGNvbm5lY3Rpb24gaGFzIGEgImNvbm5lY3QgdG8gcG9ydCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgb3ZlcnJpZGVzIHRoZSBwb3J0IGluIHRoZSBVUkwgKHJlbW90ZSBwb3J0KSAqLworICBCSVQocHJveHkpOyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgcHJveHkgLSBhbnkgdHlwZSAqLworICBCSVQodXNlcl9wYXNzd2QpOyAvKiBkbyB3ZSB1c2UgdXNlcitwYXNzd29yZCBmb3IgdGhpcyBjb25uZWN0aW9uPyAqLworICBCSVQoaXB2Nl9pcCk7IC8qIHdlIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgc2l0ZSBzcGVjaWZpZWQgd2l0aCBwdXJlIElQdjYKKyAgICAgICAgICAgICAgICAgICBJUCBhZGRyZXNzICovCisgIEJJVChpcHY2KTsgICAgLyogd2UgY29tbXVuaWNhdGUgd2l0aCBhIHNpdGUgdXNpbmcgYW4gSVB2NiBhZGRyZXNzICovCisgIEJJVChkb19tb3JlKTsgLyogdGhpcyBpcyBzZXQgVFJVRSBpZiB0aGUgLT5jdXJsX2RvX21vcmUoKSBmdW5jdGlvbiBpcworICAgICAgICAgICAgICAgICAgIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCwgYWZ0ZXIgLT5jdXJsX2RvKCkgKi8KKyAgQklUKHByb3RvY29ubnN0YXJ0KTsvKiB0aGUgcHJvdG9jb2wgbGF5ZXIgaGFzIFNUQVJURUQgaXRzIG9wZXJhdGlvbiBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBUQ1AgbGF5ZXIgY29ubmVjdCAqLworICBCSVQocmV0cnkpOyAgICAgICAgIC8qIHRoaXMgY29ubmVjdGlvbiBpcyBhYm91dCB0byBnZXQgY2xvc2VkIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgcmUtYXR0ZW1wdGVkIGF0IGFub3RoZXIgY29ubmVjdGlvbi4gKi8KKyAgQklUKGF1dGhuZWcpOyAgICAgICAvKiBUUlVFIHdoZW4gdGhlIGF1dGggcGhhc2UgaGFzIHN0YXJ0ZWQsIHdoaWNoIG1lYW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3ZSBhcmUgY3JlYXRpbmcgYSByZXF1ZXN0IHdpdGggYW4gYXV0aCBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGl0IGlzIG5vdCB0aGUgZmluYWwgcmVxdWVzdCBpbiB0aGUgYXV0aAorICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ290aWF0aW9uLiAqLworICBCSVQocmV3aW5kYWZ0ZXJzZW5kKTsvKiBUUlVFIHdoZW4gdGhlIHNlbmRpbmcgY291bGRuJ3QgYmUgc3RvcHBlZCBldmVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRob3VnaCBpdCB3aWxsIGJlIGRpc2NhcmRlZC4gV2hlbiB0aGUgd2hvbGUgc2VuZAorICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gaXMgZG9uZSwgd2UgbXVzdCBjYWxsIHRoZSBkYXRhIHJld2luZAorICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay4gKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAorICBCSVQoZnRwX3VzZV9lcHN2KTsgIC8qIEFzIHNldCB3aXRoIENVUkxPUFRfRlRQX1VTRV9FUFNWLCBidXQgaWYgd2UgZmluZCBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICBFUFNWIGRvZXNuJ3Qgd29yayB3ZSBkaXNhYmxlIGl0IGZvciB0aGUgZm9ydGhjb21pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyAqLworICBCSVQoZnRwX3VzZV9lcHJ0KTsgIC8qIEFzIHNldCB3aXRoIENVUkxPUFRfRlRQX1VTRV9FUFJULCBidXQgaWYgd2UgZmluZCBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICBFUFJUIGRvZXNuJ3Qgd29yayB3ZSBkaXNhYmxlIGl0IGZvciB0aGUgZm9ydGhjb21pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyAqLworICBCSVQoZnRwX3VzZV9kYXRhX3NzbCk7IC8qIEVuYWJsZWQgU1NMIGZvciB0aGUgZGF0YSBjb25uZWN0aW9uICovCisjZW5kaWYKKyAgQklUKG5ldHJjKTsgICAgICAgICAvKiBuYW1lK3Bhc3N3b3JkIHByb3ZpZGVkIGJ5IG5ldHJjICovCisgIEJJVChib3VuZCk7IC8qIHNldCB0cnVlIGlmIGJpbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgb24gdGhpcyBzb2NrZXQvCisgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gKi8KKyAgQklUKG11bHRpcGxleCk7IC8qIGNvbm5lY3Rpb24gaXMgbXVsdGlwbGV4ZWQgKi8KKyAgQklUKHRjcF9mYXN0b3Blbik7IC8qIHVzZSBUQ1AgRmFzdCBPcGVuICovCisgIEJJVCh0bHNfZW5hYmxlX25wbik7ICAvKiBUTFMgTlBOIGV4dGVuc2lvbj8gKi8KKyAgQklUKHRsc19lbmFibGVfYWxwbik7IC8qIFRMUyBBTFBOIGV4dGVuc2lvbj8gKi8KKyAgQklUKGNvbm5lY3Rfb25seSk7CisgIEJJVChkb2gpOworI2lmZGVmIFVTRV9VTklYX1NPQ0tFVFMKKyAgQklUKGFic3RyYWN0X3VuaXhfc29ja2V0KTsKKyNlbmRpZgorICBCSVQodGxzX3VwZ3JhZGVkKTsKKyAgQklUKHNvY2tfYWNjZXB0ZWQpOyAvKiBUUlVFIGlmIHRoZSBTRUNPTkRBUllTT0NLRVQgd2FzIGNyZWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdCgpICovCisgIEJJVChwYXJhbGxlbF9jb25uZWN0KTsgLyogc2V0IFRSVUUgd2hlbiBhIHBhcmFsbGVsIGNvbm5lY3QgYXR0ZW1wdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkIChoYXBweSBleWViYWxscykgKi8KIH07CiAKIHN0cnVjdCBob3N0bmFtZSB7CkBAIC00OTEsNyArNTIyLDcgQEAKICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnM7CiAgIGludCBzdGF0dXM7IC8qIGlmIGRvbmUgaXMgVFJVRSwgdGhpcyBpcyB0aGUgc3RhdHVzIGZyb20gdGhlIGNhbGxiYWNrICovCiAgIHZvaWQgKm9zX3NwZWNpZmljOyAgLyogJ3N0cnVjdCB0aHJlYWRfZGF0YScgZm9yIFdpbmRvd3MgKi8KLSAgYml0IGRvbmU6MTsgIC8qIHNldCBUUlVFIHdoZW4gdGhlIGxvb2t1cCBpcyBjb21wbGV0ZSAqLworICBCSVQoZG9uZSk7ICAvKiBzZXQgVFJVRSB3aGVuIHRoZSBsb29rdXAgaXMgY29tcGxldGUgKi8KIH07CiAKICNkZWZpbmUgRklSU1RTT0NLRVQgICAgIDAKQEAgLTUxOCw5ICs1NDksMjIgQEAKICAgVVBHUjEwMV9XT1JLSU5HICAgICAgICAgICAgIC8qIHRhbGtpbmcgdXBncmFkZWQgcHJvdG9jb2wgKi8KIH07CiAKLXN0cnVjdCBkb2hyZXNwb25zZSB7Ci0gIHVuc2lnbmVkIGNoYXIgKm1lbW9yeTsKLSAgc2l6ZV90IHNpemU7CitlbnVtIGRvaF9zbG90cyB7CisgIC8qIEV4cGxpY2l0IHZhbHVlcyBmb3IgZmlyc3QgdHdvIHN5bWJvbHMgc28gYXMgdG8gbWF0Y2ggaGFyZC1jb2RlZAorICAgKiBjb25zdGFudHMgaW4gZXhpc3RpbmcgY29kZQorICAgKi8KKyAgRE9IX1BST0JFX1NMT1RfSVBBRERSX1Y0ID0gMCwgLyogbWFrZSAnVjQnIHN0YW5kIG91dCBmb3IgcmVhZGFiaWxpdHkgKi8KKyAgRE9IX1BST0JFX1NMT1RfSVBBRERSX1Y2ID0gMSwgLyogJ1Y2JyBsaWtld2lzZSAqLworCisgIC8qIFNwYWNlIGhlcmUgZm9yIChwb3NzaWJseSBidWlsZC1zcGVjaWZpYykgYWRkaXRpb25hbCBzbG90IGRlZmluaXRpb25zICovCisKKyAgLyogZm9yIGV4YW1wbGUgKi8KKyAgLyogI2lmZGVmIFdBTlRfRE9IX0ZPT0JBUl9UWFQgKi8KKyAgLyogICBET0hfUFJPQkVfU0xPVF9GT09CQVJfVFhULCAqLworICAvKiAjZW5kaWYgKi8KKworICAvKiBBRlRFUiBhbGwgc2xvdCBkZWZpbml0aW9ucywgZXN0YWJsaXNoIGhvdyBtYW55IHdlIGhhdmUgKi8KKyAgRE9IX1BST0JFX1NMT1RTCiB9OwogCiAvKiBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggRG9IIHJlcXVlc3QgKi8KQEAgLTUyOSwxMiArNTczLDEyIEBACiAgIGludCBkbnN0eXBlOwogICB1bnNpZ25lZCBjaGFyIGRvaGJ1ZmZlcls1MTJdOwogICBzaXplX3QgZG9obGVuOwotICBzdHJ1Y3QgZG9ocmVzcG9uc2Ugc2VydmVyZG9oOworICBzdHJ1Y3QgZHluYnVmIHNlcnZlcmRvaDsKIH07CiAKIHN0cnVjdCBkb2hkYXRhIHsKICAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnM7Ci0gIHN0cnVjdCBkbnNwcm9iZSBwcm9iZVsyXTsKKyAgc3RydWN0IGRuc3Byb2JlIHByb2JlW0RPSF9QUk9CRV9TTE9UU107CiAgIHVuc2lnbmVkIGludCBwZW5kaW5nOyAvKiBzdGlsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyAqLwogICBjb25zdCBjaGFyICpob3N0OwogICBpbnQgcG9ydDsKQEAgLTU3MywxMiArNjE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiBhcyBib2R5ICovCiAgIGludCBoZWFkZXJsaW5lOyAgICAgICAgICAgICAgIC8qIGNvdW50cyBoZWFkZXIgbGluZXMgdG8gYmV0dGVyIHRyYWNrIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBvbmUgKi8KLSAgY2hhciAqaGJ1ZnA7ICAgICAgICAgICAgICAgICAgLyogcG9pbnRzIGF0ICplbmQqIG9mIGhlYWRlciBsaW5lICovCi0gIHNpemVfdCBoYnVmbGVuOwogICBjaGFyICpzdHI7ICAgICAgICAgICAgICAgICAgICAvKiB3aXRoaW4gYnVmICovCi0gIGNoYXIgKnN0cl9zdGFydDsgICAgICAgICAgICAgIC8qIHdpdGhpbiBidWYgKi8KLSAgY2hhciAqZW5kX3B0cjsgICAgICAgICAgICAgICAgLyogd2l0aGluIGJ1ZiAqLwotICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgICAvKiB3aXRoaW4gaGVhZGVyYnVmZiAqLwogICBjdXJsX29mZl90IG9mZnNldDsgICAgICAgICAgICAvKiBwb3NzaWJsZSByZXN1bWUgb2Zmc2V0IHJlYWQgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudC1SYW5nZTogaGVhZGVyICovCiAgIGludCBodHRwY29kZTsgICAgICAgICAgICAgICAgIC8qIGVycm9yIGNvZGUgZnJvbSB0aGUgJ0hUVFAvMS4/IFhYWCcgb3IKQEAgLTU4NywxMSArNjI2LDEwIEBACiAgIGVudW0gZXhwZWN0MTAwIGV4cDEwMDsgICAgICAgIC8qIGV4cGVjdCAxMDAgY29udGludWUgc3RhdGUgKi8KICAgZW51bSB1cGdyYWRlMTAxIHVwZ3IxMDE7ICAgICAgLyogMTAxIHVwZ3JhZGUgc3RhdGUgKi8KIAotICBzdHJ1Y3QgY29udGVuY193cml0ZXJfcyAqd3JpdGVyX3N0YWNrOyAgLyogQ29udGVudCB1bmVuY29kaW5nIHN0YWNrLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VlIHNlYyAzLjUsIFJGQzI2MTYuICovCisgIC8qIENvbnRlbnQgdW5lbmNvZGluZyBzdGFjay4gU2VlIHNlYyAzLjUsIFJGQzI2MTYuICovCisgIHN0cnVjdCBjb250ZW5jX3dyaXRlciAqd3JpdGVyX3N0YWNrOwogICB0aW1lX3QgdGltZW9mZG9jOwogICBsb25nIGJvZHl3cml0ZXM7Ci0gIGNoYXIgKmJ1ZjsKICAgaW50IGtlZXBvbjsKICAgY2hhciAqbG9jYXRpb247ICAgLyogVGhpcyBwb2ludHMgdG8gYW4gYWxsb2NhdGVkIHZlcnNpb24gb2YgdGhlIExvY2F0aW9uOgogICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgZGF0YSAqLwpAQCAtNjEyLDIwICs2NTAsMjAgQEAKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0RPSAogICBzdHJ1Y3QgZG9oZGF0YSBkb2g7IC8qIERvSCBzcGVjaWZpYyBkYXRhIGZvciB0aGlzIHJlcXVlc3QgKi8KICNlbmRpZgotICBiaXQgaGVhZGVyOjE7ICAgICAgIC8qIGluY29taW5nIGRhdGEgaGFzIEhUVFAgaGVhZGVyICovCi0gIGJpdCBjb250ZW50X3JhbmdlOjE7IC8qIHNldCBUUlVFIGlmIENvbnRlbnQtUmFuZ2U6IHdhcyBmb3VuZCAqLwotICBiaXQgdXBsb2FkX2RvbmU6MTsgIC8qIHNldCB0byBUUlVFIHdoZW4gZG9pbmcgY2h1bmtlZCB0cmFuc2Zlci1lbmNvZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZCBhbmQgd2UncmUgdXBsb2FkaW5nIHRoZSBsYXN0IGNodW5rICovCi0gIGJpdCBpZ25vcmVib2R5OjE7ICAgLyogd2UgcmVhZCBhIHJlc3BvbnNlLWJvZHkgYnV0IHdlIGlnbm9yZSBpdCEgKi8KLSAgYml0IGlnbm9yZWNsOjE7ICAgICAvKiBUaGlzIEhUVFAgcmVzcG9uc2UgaGFzIG5vIGJvZHkgc28gd2UgaWdub3JlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtTGVuZ3RoOiBoZWFkZXIgKi8KLSAgYml0IGNodW5rOjE7IC8qIGlmIHNldCwgdGhpcyBpcyBhIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmcgKi8KLSAgYml0IHVwbG9hZF9jaHVua3k6MTsgLyogc2V0IFRSVUUgaWYgd2UgYXJlIGRvaW5nIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdXBsb2FkICovCi0gIGJpdCBnZXRoZWFkZXI6MTsgICAgLyogVFJVRSBpZiBoZWFkZXIgcGFyc2luZyBpcyB3YW50ZWQgKi8KLSAgYml0IGZvcmJpZGNodW5rOjE7ICAvKiB1c2VkIG9ubHkgdG8gZXhwbGljaXRseSBmb3JiaWQgY2h1bmstdXBsb2FkIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHVwbG9hZCBidWZmZXJzLiBTZWUgcmVhZG1vcmVkYXRhKCkgaW4gaHR0cC5jCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRldGFpbHMuICovCisgIEJJVChoZWFkZXIpOyAgICAgICAvKiBpbmNvbWluZyBkYXRhIGhhcyBIVFRQIGhlYWRlciAqLworICBCSVQoY29udGVudF9yYW5nZSk7IC8qIHNldCBUUlVFIGlmIENvbnRlbnQtUmFuZ2U6IHdhcyBmb3VuZCAqLworICBCSVQodXBsb2FkX2RvbmUpOyAgLyogc2V0IHRvIFRSVUUgd2hlbiBkb2luZyBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgYW5kIHdlJ3JlIHVwbG9hZGluZyB0aGUgbGFzdCBjaHVuayAqLworICBCSVQoaWdub3JlYm9keSk7ICAgLyogd2UgcmVhZCBhIHJlc3BvbnNlLWJvZHkgYnV0IHdlIGlnbm9yZSBpdCEgKi8KKyAgQklUKGh0dHBfYm9keWxlc3MpOyAvKiBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGlzIGJldHdlZW4gMTAwIGFuZCAxOTksCisgICAgICAgICAgICAgICAgICAgICAgICAgMjA0IG9yIDMwNCAqLworICBCSVQoY2h1bmspOyAvKiBpZiBzZXQsIHRoaXMgaXMgYSBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nICovCisgIEJJVCh1cGxvYWRfY2h1bmt5KTsgLyogc2V0IFRSVUUgaWYgd2UgYXJlIGRvaW5nIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICBvbiB1cGxvYWQgKi8KKyAgQklUKGdldGhlYWRlcik7ICAgIC8qIFRSVUUgaWYgaGVhZGVyIHBhcnNpbmcgaXMgd2FudGVkICovCisgIEJJVChmb3JiaWRjaHVuayk7ICAvKiB1c2VkIG9ubHkgdG8gZXhwbGljaXRseSBmb3JiaWQgY2h1bmstdXBsb2FkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgdXBsb2FkIGJ1ZmZlcnMuIFNlZSByZWFkbW9yZWRhdGEoKSBpbiBodHRwLmMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXRhaWxzLiAqLwogfTsKIAogLyoKQEAgLTY2MywyNyArNzAxLDIzIEBACiAgIC8qIENhbGxlZCBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UgZHVyaW5nIHRoZSBQUk9UT0NPTk5FQ1QgcGhhc2UsIGFuZCBpdAogICAgICBzaG91bGQgdGhlbiByZXR1cm4gYSBwcm9wZXIgZmQgc2V0ICovCiAgIGludCAoKnByb3RvX2dldHNvY2spKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgRE9JTkcgcGhhc2UsIGFuZCBpdCBzaG91bGQKICAgICAgdGhlbiByZXR1cm4gYSBwcm9wZXIgZmQgc2V0ICovCiAgIGludCAoKmRvaW5nX2dldHNvY2spKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgRE9fTU9SRSBwaGFzZSwgYW5kIGl0IHNob3VsZAogICAgICB0aGVuIHJldHVybiBhIHByb3BlciBmZCBzZXQgKi8KICAgaW50ICgqZG9tb3JlX2dldHNvY2spKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgRE9fRE9ORSwgUEVSRk9STSBhbmQKICAgICAgV0FJVFBFUkZPUk0gcGhhc2VzLCBhbmQgaXQgc2hvdWxkIHRoZW4gcmV0dXJuIGEgcHJvcGVyIGZkIHNldC4gTm90IHNldHRpbmcKICAgICAgdGhpcyB3aWxsIG1ha2UgbGliY3VybCB1c2UgdGhlIGdlbmVyaWMgZGVmYXVsdCBvbmUuICovCiAgIGludCAoKnBlcmZvcm1fZ2V0c29jaykoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpOwogCiAgIC8qIFRoaXMgZnVuY3Rpb24gKk1BWSogYmUgc2V0IHRvIGEgcHJvdG9jb2wtZGVwZW5kZW50IGZ1bmN0aW9uIHRoYXQgaXMgcnVuCiAgICAqIGJ5IHRoZSBjdXJsX2Rpc2Nvbm5lY3QoKSwgYXMgYSBzdGVwIGluIHRoZSBkaXNjb25uZWN0aW9uLiAgSWYgdGhlIGhhbmRsZXIKQEAgLTczMyw2ICs3NjcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQIHByb3h5IGFzIEhUVFAgcHJveGllcyBtYXkga25vdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHByb3RvY29sIGFuZCBhY3QgYXMgYSBnYXRld2F5ICovCiAjZGVmaW5lIFBST1RPUFRfV0lMRENBUkQgKDE8PDEyKSAvKiBwcm90b2NvbCBzdXBwb3J0cyB3aWxkY2FyZCBtYXRjaGluZyAqLworI2RlZmluZSBQUk9UT1BUX1VTRVJQV0RDVFJMICgxPDwxMykgLyogQWxsb3cgImNvbnRyb2wgYnl0ZXMiICg8IDMyIGFzY2lpKSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBuYW1lIGFuZCBwYXNzd29yZCAqLwogCiAjZGVmaW5lIENPTk5DSEVDS19OT05FIDAgICAgICAgICAgICAgICAgIC8qIE5vIGNoZWNrcyAqLwogI2RlZmluZSBDT05OQ0hFQ0tfSVNERUFEICgxPDwwKSAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgY29ubmVjdGlvbiBpcyBkZWFkLiAqLwpAQCAtNzYzLDIzICs3OTksNTUgQEAKICAgY2hhciAqcGFzc3dkOyAgLyogcHJveHkgcGFzc3dvcmQgc3RyaW5nLCBhbGxvY2F0ZWQgKi8KIH07CiAKLSNkZWZpbmUgQ09OTkVDVF9CVUZGRVJfU0laRSAxNjM4NAotCiAvKiBzdHJ1Y3QgZm9yIEhUVFAgQ09OTkVDVCBzdGF0ZSBkYXRhICovCiBzdHJ1Y3QgaHR0cF9jb25uZWN0X3N0YXRlIHsKLSAgY2hhciBjb25uZWN0X2J1ZmZlcltDT05ORUNUX0JVRkZFUl9TSVpFXTsKLSAgaW50IHBlcmxpbmU7IC8qIGNvdW50IGJ5dGVzIHBlciBsaW5lICovCisgIHN0cnVjdCBkeW5idWYgcmN2YnVmOwogICBpbnQga2VlcG9uOwotICBjaGFyICpsaW5lX3N0YXJ0OwotICBjaGFyICpwdHI7IC8qIHdoZXJlIHRvIHN0b3JlIG1vcmUgZGF0YSAqLwogICBjdXJsX29mZl90IGNsOyAvKiBzaXplIG9mIGNvbnRlbnQgdG8gcmVhZCBhbmQgaWdub3JlICovCiAgIGVudW0gewogICAgIFRVTk5FTF9JTklULCAgICAvKiBpbml0L2RlZmF1bHQvbm8gdHVubmVsIHN0YXRlICovCiAgICAgVFVOTkVMX0NPTk5FQ1QsIC8qIENPTk5FQ1QgaGFzIGJlZW4gc2VudCBvZmYgKi8KICAgICBUVU5ORUxfQ09NUExFVEUgLyogQ09OTkVDVCByZXNwb25zZSByZWNlaXZlZCBjb21wbGV0ZWx5ICovCiAgIH0gdHVubmVsX3N0YXRlOwotICBiaXQgY2h1bmtlZF9lbmNvZGluZzoxOwotICBiaXQgY2xvc2VfY29ubmVjdGlvbjoxOworICBCSVQoY2h1bmtlZF9lbmNvZGluZyk7CisgIEJJVChjbG9zZV9jb25uZWN0aW9uKTsKK307CisKK3N0cnVjdCBsZGFwY29ubmluZm87CisKKy8qIGZvciB0aGUgKFNPQ0tTKSBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KK2VudW0gY29ubmVjdF90IHsKKyAgQ09OTkVDVF9JTklULAorICBDT05ORUNUX1NPQ0tTX0lOSVQsIC8qIDEgKi8KKyAgQ09OTkVDVF9TT0NLU19TRU5ELCAvKiAyIHdhaXRpbmcgdG8gc2VuZCBtb3JlIGZpcnN0IGRhdGEgKi8KKyAgQ09OTkVDVF9TT0NLU19SRUFEX0lOSVQsIC8qIDMgc2V0IHVwIHJlYWQgKi8KKyAgQ09OTkVDVF9TT0NLU19SRUFELCAvKiA0IHJlYWQgc2VydmVyIHJlc3BvbnNlICovCisgIENPTk5FQ1RfR1NTQVBJX0lOSVQsIC8qIDUgKi8KKyAgQ09OTkVDVF9BVVRIX0lOSVQsIC8qIDYgc2V0dXAgb3V0Z29pbmcgYXV0aCBidWZmZXIgKi8KKyAgQ09OTkVDVF9BVVRIX1NFTkQsIC8qIDcgc2VuZCBhdXRoICovCisgIENPTk5FQ1RfQVVUSF9SRUFELCAvKiA4IHJlYWQgYXV0aCByZXNwb25zZSAqLworICBDT05ORUNUX1JFUV9JTklULCAgLyogOSBpbml0IFNPQ0tTICJyZXF1ZXN0IiAqLworICBDT05ORUNUX1JFU09MVklORywgLyogMTAgKi8KKyAgQ09OTkVDVF9SRVNPTFZFRCwgIC8qIDExICovCisgIENPTk5FQ1RfUkVTT0xWRV9SRU1PVEUsIC8qIDEyICovCisgIENPTk5FQ1RfUkVRX1NFTkQsICAvKiAxMyAqLworICBDT05ORUNUX1JFUV9TRU5ESU5HLCAvKiAxNCAqLworICBDT05ORUNUX1JFUV9SRUFELCAgLyogMTUgKi8KKyAgQ09OTkVDVF9SRVFfUkVBRF9NT1JFLCAvKiAxNiAqLworICBDT05ORUNUX0RPTkUgLyogMTcgY29ubmVjdGVkIGZpbmUgdG8gdGhlIHJlbW90ZSBvciB0aGUgU09DS1MgcHJveHkgKi8KK307CisKKyNkZWZpbmUgU09DS1NfU1RBVEUoeCkgKCgoeCkgPj0gQ09OTkVDVF9TT0NLU19JTklUKSAmJiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8IENPTk5FQ1RfRE9ORSkpCisjZGVmaW5lIFNPQ0tTX1JFUVVFU1RfQlVGU0laRSA2MDAgIC8qIHJvb20gZm9yIGxhcmdlIHVzZXIvcHcgKDI1NSBtYXggZWFjaCkgKi8KKworc3RydWN0IGNvbm5zdGF0ZSB7CisgIGVudW0gY29ubmVjdF90IHN0YXRlOworICB1bnNpZ25lZCBjaGFyIHNvY2tzcmVxW1NPQ0tTX1JFUVVFU1RfQlVGU0laRV07CisKKyAgLyogQ09OTkVDVF9TT0NLU19TRU5EICovCisgIHNzaXplX3Qgb3V0c3RhbmRpbmc7ICAvKiBzZW5kIHRoaXMgbWFueSBieXRlcyBtb3JlICovCisgIHVuc2lnbmVkIGNoYXIgKm91dHA7IC8qIHNlbmQgZnJvbSB0aGlzIHBvaW50ZXIgKi8KIH07CiAKIC8qCkBAIC03OTEsNyArODU5LDcgQEAKICAgICAgY2F1dGlvbiB0aGF0IHRoaXMgbWlnaHQgdmVyeSB3ZWxsIHZhcnkgYmV0d2VlbiBkaWZmZXJlbnQgdGltZXMgdGhpcwogICAgICBjb25uZWN0aW9uIGlzIHVzZWQhICovCiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGE7Ci0KKyAgc3RydWN0IGNvbm5zdGF0ZSBjbm5jdDsKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCBidW5kbGVfbm9kZTsgLyogY29ubmNhY2hlICovCiAKICAgLyogY2h1bmsgaXMgZm9yIEhUVFAgY2h1bmtlZCBlbmNvZGluZywgYnV0IGlzIGluIHRoZSBnZW5lcmFsIGNvbm5lY3RkYXRhCkBAIC04MTQsMTUgKzg4MiwxNSBAQAogCiAgIC8qICdkbnNfZW50cnknIGlzIHRoZSBwYXJ0aWN1bGFyIGhvc3Qgd2UgdXNlLiBUaGlzIHBvaW50cyB0byBhbiBlbnRyeSBpbiB0aGUKICAgICAgRE5TIGNhY2hlIGFuZCBpdCB3aWxsIG5vdCBnZXQgcHJ1bmVkIHdoaWxlIGxvY2tlZC4gSXQgZ2V0cyB1bmxvY2tlZCBpbgotICAgICBDdXJsX2RvbmUoKS4gVGhpcyBlbnRyeSB3aWxsIGJlIE5VTEwgaWYgdGhlIGNvbm5lY3Rpb24gaXMgcmUtdXNlZCBhcyB0aGVuCisgICAgIG11bHRpX2RvbmUoKS4gVGhpcyBlbnRyeSB3aWxsIGJlIE5VTEwgaWYgdGhlIGNvbm5lY3Rpb24gaXMgcmUtdXNlZCBhcyB0aGVuCiAgICAgIHRoZXJlIGlzIG5vIG5hbWUgcmVzb2x2ZSBkb25lLiAqLwogICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRuc19lbnRyeTsKIAogICAvKiAnaXBfYWRkcicgaXMgdGhlIHBhcnRpY3VsYXIgSVAgd2UgY29ubmVjdGVkIHRvLiBJdCBwb2ludHMgdG8gYSBzdHJ1Y3QKICAgICAgd2l0aGluIHRoZSBETlMgY2FjaGUsIHNvIHRoaXMgcG9pbnRlciBpcyBvbmx5IHZhbGlkIGFzIGxvbmcgYXMgdGhlIEROUwotICAgICBjYWNoZSBlbnRyeSByZW1haW5zIGxvY2tlZC4gSXQgZ2V0cyB1bmxvY2tlZCBpbiBDdXJsX2RvbmUoKSAqLwotICBDdXJsX2FkZHJpbmZvICppcF9hZGRyOwotICBDdXJsX2FkZHJpbmZvICp0ZW1wYWRkclsyXTsgLyogZm9yIGhhcHB5IGV5ZWJhbGxzICovCisgICAgIGNhY2hlIGVudHJ5IHJlbWFpbnMgbG9ja2VkLiBJdCBnZXRzIHVubG9ja2VkIGluIG11bHRpX2RvbmUoKSAqLworICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqaXBfYWRkcjsKKyAgc3RydWN0IEN1cmxfYWRkcmluZm8gKnRlbXBhZGRyWzJdOyAvKiBmb3IgaGFwcHkgZXllYmFsbHMgKi8KIAogICAvKiAnaXBfYWRkcl9zdHInIGlzIHRoZSBpcF9hZGRyIGRhdGEgYXMgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcuCiAgICAgIEl0IHJlbWFpbnMgYXZhaWxhYmxlIGFzIGxvbmcgYXMgdGhlIGNvbm5lY3Rpb24gZG9lcywgd2hpY2ggaXMgbG9uZ2VyIHRoYW4KQEAgLTgzMSwxNyArODk5LDI2IEBACiAKICAgdW5zaWduZWQgaW50IHNjb3BlX2lkOyAgLyogU2NvcGUgaWQgZm9yIElQdjYgKi8KIAotICBpbnQgc29ja3R5cGU7ICAvKiBTT0NLX1NUUkVBTSBvciBTT0NLX0RHUkFNICovCisgIGVudW0geworICAgIFRSTlNQUlRfVENQID0gMywKKyAgICBUUk5TUFJUX1VEUCA9IDQsCisgICAgVFJOU1BSVF9RVUlDID0gNQorICB9IHRyYW5zcG9ydDsKKworI2lmZGVmIEVOQUJMRV9RVUlDCisgIHN0cnVjdCBxdWljc29ja2V0IGhlcXVpY1syXTsgLyogdHdvLCBmb3IgaGFwcHkgZXllYmFsbHMhICovCisgIHN0cnVjdCBxdWljc29ja2V0ICpxdWljOworI2VuZGlmCiAKICAgc3RydWN0IGhvc3RuYW1lIGhvc3Q7CiAgIGNoYXIgKmhvc3RuYW1lX3Jlc29sdmU7IC8qIGhvc3QgbmFtZSB0byByZXNvbHZlIHRvIGFkZHJlc3MsIGFsbG9jYXRlZCAqLwogICBjaGFyICpzZWNvbmRhcnlob3N0bmFtZTsgLyogc2Vjb25kYXJ5IHNvY2tldCBob3N0IG5hbWUgKGZ0cCkgKi8KICAgc3RydWN0IGhvc3RuYW1lIGNvbm5fdG9faG9zdDsgLyogdGhlIGhvc3QgdG8gY29ubmVjdCB0by4gdmFsaWQgb25seSBpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzLmNvbm5fdG9faG9zdCBpcyBzZXQgKi8KLQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgc3RydWN0IHByb3h5X2luZm8gc29ja3NfcHJveHk7CiAgIHN0cnVjdCBwcm94eV9pbmZvIGh0dHBfcHJveHk7Ci0KKyNlbmRpZgogICBsb25nIHBvcnQ7ICAgICAgIC8qIHdoaWNoIHBvcnQgdG8gdXNlIGxvY2FsbHkgKi8KICAgaW50IHJlbW90ZV9wb3J0OyAvKiB0aGUgcmVtb3RlIHBvcnQsIG5vdCB0aGUgcHJveHkgcG9ydCEgKi8KICAgaW50IGNvbm5fdG9fcG9ydDsgLyogdGhlIHJlbW90ZSBwb3J0IHRvIGNvbm5lY3QgdG8uIHZhbGlkIG9ubHkgaWYKQEAgLTg3MCw3ICs5NDcsNyBAQAogICBjaGFyICpwYXNzd2Q7ICAvKiBwYXNzd29yZCBzdHJpbmcsIGFsbG9jYXRlZCAqLwogICBjaGFyICpvcHRpb25zOyAvKiBvcHRpb25zIHN0cmluZywgYWxsb2NhdGVkICovCiAKLSAgY2hhciAqb2F1dGhfYmVhcmVyOyAvKiBiZWFyZXIgdG9rZW4gZm9yIE9BdXRoIDIuMCwgYWxsb2NhdGVkICovCisgIGNoYXIgKnNhc2xfYXV0aHppZDsgICAgIC8qIGF1dGhvcmlzYXRpb24gaWRlbnRpdHkgc3RyaW5nLCBhbGxvY2F0ZWQgKi8KIAogICBpbnQgaHR0cHZlcnNpb247ICAgICAgICAvKiB0aGUgSFRUUCB2ZXJzaW9uKjEwIHJlcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgKi8KICAgaW50IHJ0c3B2ZXJzaW9uOyAgICAgICAgLyogdGhlIFJUU1AgdmVyc2lvbioxMCByZXBvcnRlZCBieSB0aGUgc2VydmVyICovCkBAIC04ODEsOCArOTU4LDcgQEAKICAgY3VybF9zb2NrZXRfdCBzb2NrWzJdOyAvKiB0d28gc29ja2V0cywgdGhlIHNlY29uZCBpcyB1c2VkIGZvciB0aGUgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyIHdoZW4gZG9pbmcgRlRQICovCiAgIGN1cmxfc29ja2V0X3QgdGVtcHNvY2tbMl07IC8qIHRlbXBvcmFyeSBzb2NrZXRzIGZvciBoYXBweSBleWViYWxscyAqLwotICBib29sIHNvY2tfYWNjZXB0ZWRbMl07IC8qIFRSVUUgaWYgdGhlIHNvY2tldCBvbiB0aGlzIGluZGV4IHdhcyBjcmVhdGVkIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQoKSAqLworICBpbnQgdGVtcGZhbWlseVsyXTsgLyogZmFtaWx5IHVzZWQgZm9yIHRoZSB0ZW1wIHNvY2tldHMgKi8KICAgQ3VybF9yZWN2ICpyZWN2WzJdOwogICBDdXJsX3NlbmQgKnNlbmRbMl07CiAKQEAgLTg5MCwxMiArOTY2LDE2IEBACiAgIHN0cnVjdCBwb3N0cG9uZWRfZGF0YSBwb3N0cG9uZWRbMl07IC8qIHR3byBidWZmZXJzIGZvciB0d28gc29ja2V0cyAqLwogI2VuZGlmIC8qIFVTRV9SRUNWX0JFRk9SRV9TRU5EX1dPUktBUk9VTkQgKi8KICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgc3NsWzJdOyAvKiB0aGlzIGlzIGZvciBzc2wtc3R1ZmYgKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhIHByb3h5X3NzbFsyXTsgLyogdGhpcyBpcyBmb3IgcHJveHkgc3NsLXN0dWZmICovCisjZW5kaWYKICNpZmRlZiBVU0VfU1NMCiAgIHZvaWQgKnNzbF9leHRyYTsgLyogc2VwYXJhdGVseSBhbGxvY2F0ZWQgYmFja2VuZC1zcGVjaWZpYyBkYXRhICovCiAjZW5kaWYKICAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyBzc2xfY29uZmlnOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyBwcm94eV9zc2xfY29uZmlnOworI2VuZGlmCiAgIHN0cnVjdCBDb25uZWN0Qml0cyBiaXRzOyAgICAvKiB2YXJpb3VzIHN0YXRlLWZsYWdzIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KIAogIC8qIGNvbm5lY3R0aW1lOiB3aGVuIGNvbm5lY3QoKSBpcyBjYWxsZWQgb24gdGhlIGN1cnJlbnQgSVAgYWRkcmVzcy4gVXNlZCB0bwpAQCAtOTA0LDggKzk4NCwxMCBAQAogICBzdHJ1Y3QgY3VybHRpbWUgY29ubmVjdHRpbWU7CiAgIC8qIFRoZSB0d28gZmllbGRzIGJlbG93IGdldCBzZXQgaW4gQ3VybF9jb25uZWN0aG9zdCAqLwogICBpbnQgbnVtX2FkZHI7IC8qIG51bWJlciBvZiBhZGRyZXNzZXMgdG8gdHJ5IHRvIGNvbm5lY3QgdG8gKi8KLSAgdGltZV90IHRpbWVvdXRtc19wZXJfYWRkcjsgLyogaG93IGxvbmcgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BlbmQgb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gZWFjaCBJUCBhZGRyZXNzICovCisKKyAgLyogaG93IGxvbmcgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc3BlbmQgb24gdHJ5aW5nIHRvIGNvbm5lY3QgdG8gZWFjaCBJUAorICAgICBhZGRyZXNzLCBwZXIgZmFtaWx5ICovCisgIHRpbWVkaWZmX3QgdGltZW91dG1zX3Blcl9hZGRyWzJdOwogCiAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmhhbmRsZXI7IC8qIENvbm5lY3Rpb24ncyBwcm90b2NvbCBoYW5kbGVyICovCiAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmdpdmVuOyAgIC8qIFRoZSBwcm90b2NvbCBmaXJzdCBnaXZlbiAqLwpAQCAtOTI2LDIzICsxMDA4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VsbCBiZSB0aGUgc2FtZSB3ZSByZWFkIGZyb20uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCBkaXNhYmxlcyAqLwogCi0gIC8qKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5ncywgTVVTVCBiZSBmcmVlZCBiZWZvcmUgdGhpcyAqKi8KLSAgLyoqIHN0cnVjdCBpcyBraWxsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KLSAgc3RydWN0IGR5bmFtaWNhbGx5X2FsbG9jYXRlZF9kYXRhIHsKLSAgICBjaGFyICpwcm94eXVzZXJwd2Q7Ci0gICAgY2hhciAqdWFnZW50OwotICAgIGNoYXIgKmFjY2VwdF9lbmNvZGluZzsKLSAgICBjaGFyICp1c2VycHdkOwotICAgIGNoYXIgKnJhbmdlbGluZTsKLSAgICBjaGFyICpyZWY7Ci0gICAgY2hhciAqaG9zdDsKLSAgICBjaGFyICpjb29raWVob3N0OwotICAgIGNoYXIgKnJ0c3BfdHJhbnNwb3J0OwotICAgIGNoYXIgKnRlOyAvKiBURTogcmVxdWVzdCBoZWFkZXIgKi8KLSAgfSBhbGxvY3B0cjsKLQogI2lmZGVmIEhBVkVfR1NTQVBJCi0gIGJpdCBzZWNfY29tcGxldGU6MTsgLyogaWYgS2VyYmVyb3MgaXMgZW5hYmxlZCBmb3IgdGhpcyBjb25uZWN0aW9uICovCisgIEJJVChzZWNfY29tcGxldGUpOyAvKiBpZiBLZXJiZXJvcyBpcyBlbmFibGVkIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KICAgZW51bSBwcm90ZWN0aW9uX2xldmVsIGNvbW1hbmRfcHJvdDsKICAgZW51bSBwcm90ZWN0aW9uX2xldmVsIGRhdGFfcHJvdDsKICAgZW51bSBwcm90ZWN0aW9uX2xldmVsIHJlcXVlc3RfZGF0YV9wcm90OwpAQCAtOTc0LDE0ICsxMDQxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGl0IGF1dGhlbnRpY2F0ZXMgY29ubmVjdGlvbnMsIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSByZXF1ZXN0cyEgKi8KICAgc3RydWN0IG50bG1kYXRhIHByb3h5bnRsbTsgLyogTlRMTSBkYXRhIGZvciBwcm94eSAqLwotCi0jaWYgZGVmaW5lZChOVExNX1dCX0VOQUJMRUQpCi0gIC8qIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBTYW1iYSdzIHdpbmJpbmQgZGFlbW9uIGhlbHBlciBudGxtX2F1dGggKi8KLSAgY3VybF9zb2NrZXRfdCBudGxtX2F1dGhfaGxwcl9zb2NrZXQ7Ci0gIHBpZF90IG50bG1fYXV0aF9obHByX3BpZDsKLSAgY2hhciAqY2hhbGxlbmdlX2hlYWRlcjsKLSAgY2hhciAqcmVzcG9uc2VfaGVhZGVyOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIFVTRV9TUE5FR08KQEAgLTk5NSwxMCArMTA1NCw4IEBACiAgIC8qIGRhdGEgdXNlZCBmb3IgdGhlIGFzeW5jaCBuYW1lIHJlc29sdmUgY2FsbGJhY2sgKi8KICAgc3RydWN0IEN1cmxfYXN5bmMgYXN5bmM7CiAKLSAgLyogVGhlc2UgdGhyZWUgYXJlIHVzZWQgZm9yIGNodW5rZWQtZW5jb2RpbmcgdHJhaWxlciBzdXBwb3J0ICovCi0gIGNoYXIgKnRyYWlsZXI7IC8qIGFsbG9jYXRlZCBidWZmZXIgdG8gc3RvcmUgdHJhaWxlciBpbiAqLwotICBpbnQgdHJsTWF4OyAgICAvKiBhbGxvY2F0ZWQgYnVmZmVyIHNpemUgKi8KLSAgaW50IHRybFBvczsgICAgLyogaW5kZXggb2Ygd2hlcmUgdG8gc3RvcmUgZGF0YSAqLworICAvKiBmb3IgY2h1bmtlZC1lbmNvZGVkIHRyYWlsZXIgKi8KKyAgc3RydWN0IGR5bmJ1ZiB0cmFpbGVyOwogCiAgIHVuaW9uIHsKICAgICBzdHJ1Y3QgZnRwX2Nvbm4gZnRwYzsKQEAgLTEwMTAsNyArMTA2Nyw5IEBACiAgICAgc3RydWN0IHNtdHBfY29ubiBzbXRwYzsKICAgICBzdHJ1Y3QgcnRzcF9jb25uIHJ0c3BjOwogICAgIHN0cnVjdCBzbWJfY29ubiBzbWJjOwotICAgIHZvaWQgKmdlbmVyaWM7IC8qIFJUTVAgYW5kIExEQVAgdXNlIHRoaXMgKi8KKyAgICB2b2lkICpydG1wOworICAgIHN0cnVjdCBsZGFwY29ubmluZm8gKmxkYXBjOworICAgIHN0cnVjdCBtcXR0X2Nvbm4gbXF0dDsKICAgfSBwcm90bzsKIAogICBpbnQgY3NlbGVjdF9iaXRzOyAvKiBiaXRtYXNrIG9mIHNvY2tldCBldmVudHMgKi8KQEAgLTEwMzEsMTkgKzEwOTAsMTAgQEAKICAgc3RydWN0IGh0dHBfY29ubmVjdF9zdGF0ZSAqY29ubmVjdF9zdGF0ZTsgLyogZm9yIEhUVFAgQ09OTkVDVCAqLwogICBzdHJ1Y3QgY29ubmVjdGJ1bmRsZSAqYnVuZGxlOyAvKiBUaGUgYnVuZGxlIHdlIGFyZSBtZW1iZXIgb2YgKi8KICAgaW50IG5lZ25wbjsgLyogQVBMTiBvciBOUE4gVExTIG5lZ290aWF0ZWQgcHJvdG9jb2wsIENVUkxfSFRUUF9WRVJTSU9OKiAqLwotCisgIGludCByZXRyeWNvdW50OyAvKiBudW1iZXIgb2YgcmV0cmllcyBvbiBhIG5ldyBjb25uZWN0aW9uICovCiAjaWZkZWYgVVNFX1VOSVhfU09DS0VUUwogICBjaGFyICp1bml4X2RvbWFpbl9zb2NrZXQ7Ci0gIGJpdCBhYnN0cmFjdF91bml4X3NvY2tldDoxOwogI2VuZGlmCi0gIGJpdCB0bHNfdXBncmFkZWQ6MTsKLSAgLyogdGhlIHR3byBmb2xsb3dpbmcgKl9pbnVzZSBmaWVsZHMgYXJlIG9ubHkgZmxhZ3MsIG5vdCBjb3VudGVycyBpbiBhbnkgd2F5LgotICAgICBJZiBUUlVFIGl0IG1lYW5zIHRoZSBjaGFubmVsIGlzIGluIHVzZSwgYW5kIGlmIEZBTFNFIGl0IG1lYW5zIHRoZSBjaGFubmVsCi0gICAgIGlzIHVwIGZvciBncmFicyBieSBvbmUuICovCi0gIGJpdCByZWFkY2hhbm5lbF9pbnVzZToxOyAgLyogd2hldGhlciB0aGUgcmVhZCBjaGFubmVsIGlzIGluIHVzZSBieSBhbiBlYXN5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlICovCi0gIGJpdCB3cml0ZWNoYW5uZWxfaW51c2U6MTsgLyogd2hldGhlciB0aGUgd3JpdGUgY2hhbm5lbCBpcyBpbiB1c2UgYnkgYW4gZWFzeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSAqLwogfTsKIAogLyogVGhlIGVuZCBvZiBjb25uZWN0ZGF0YS4gKi8KQEAgLTEwNjUsNiArMTExNSw3IEBACiAgIGxvbmcgbnVtY29ubmVjdHM7IC8qIGhvdyBtYW55IG5ldyBjb25uZWN0aW9uIGRpZCBsaWJjdXJsIGNyZWF0ZWQgKi8KICAgY2hhciAqY29udGVudHR5cGU7IC8qIHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIG9iamVjdCAqLwogICBjaGFyICp3b3VsZHJlZGlyZWN0OyAvKiBVUkwgdGhpcyB3b3VsZCd2ZSBiZWVuIHJlZGlyZWN0ZWQgdG8gaWYgYXNrZWQgdG8gKi8KKyAgY3VybF9vZmZfdCByZXRyeV9hZnRlcjsgLyogaW5mbyBmcm9tIFJldHJ5LUFmdGVyOiBoZWFkZXIgKi8KIAogICAvKiBQdXJlSW5mbyBtZW1iZXJzICdjb25uX3ByaW1hcnlfaXAnLCAnY29ubl9wcmltYXJ5X3BvcnQnLCAnY29ubl9sb2NhbF9pcCcKICAgICAgYW5kLCAnY29ubl9sb2NhbF9wb3J0JyBhcmUgY29waWVkIG92ZXIgZnJvbSB0aGUgY29ubmVjdGRhdGEgc3RydWN0IGluCkBAIC0xMDgxLDExICsxMTMyLDExIEBACiAgIGNvbnN0IGNoYXIgKmNvbm5fc2NoZW1lOwogICB1bnNpZ25lZCBpbnQgY29ubl9wcm90b2NvbDsKICAgc3RydWN0IGN1cmxfY2VydGluZm8gY2VydHM7IC8qIGluZm8gYWJvdXQgdGhlIGNlcnRzLCBvbmx5IHBvcHVsYXRlZCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblNTTCBidWlsZHMuIEFza2VkIGZvciB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0NFUlRJTkZPIC8gQ1VSTElORk9fQ0VSVElORk8gKi8KLQotICBiaXQgdGltZWNvbmQ6MTsgIC8qIHNldCB0byBUUlVFIGlmIHRoZSB0aW1lIGNvbmRpdGlvbiBkaWRuJ3QgbWF0Y2gsIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgdGh1cyBtYWRlIHRoZSBkb2N1bWVudCBOT1QgZ2V0IGZldGNoZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5TU0wsIEdudVRMUywgU2NoYW5uZWwsIE5TUyBhbmQgR1NLaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcy4gQXNrZWQgZm9yIHdpdGggQ1VSTE9QVF9DRVJUSU5GTworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBDVVJMSU5GT19DRVJUSU5GTyAqLworICBCSVQodGltZWNvbmQpOyAgLyogc2V0IHRvIFRSVUUgaWYgdGhlIHRpbWUgY29uZGl0aW9uIGRpZG4ndCBtYXRjaCwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgIHRodXMgbWFkZSB0aGUgZG9jdW1lbnQgTk9UIGdldCBmZXRjaGVkICovCiB9OwogCiAKQEAgLTExMDIsMTcgKzExNTMsMTcgQEAKICAgaW50IHdpZHRoOyAvKiBzY3JlZW4gd2lkdGggYXQgZG93bmxvYWQgc3RhcnQgKi8KICAgaW50IGZsYWdzOyAvKiBzZWUgcHJvZ3Jlc3MuaCAqLwogCi0gIHRpbWVfdCB0aW1lc3BlbnQ7CisgIHRpbWVkaWZmX3QgdGltZXNwZW50OwogCiAgIGN1cmxfb2ZmX3QgZGxzcGVlZDsKICAgY3VybF9vZmZfdCB1bHNwZWVkOwogCi0gIHRpbWVfdCB0X25zbG9va3VwOwotICB0aW1lX3QgdF9jb25uZWN0OwotICB0aW1lX3QgdF9hcHBjb25uZWN0OwotICB0aW1lX3QgdF9wcmV0cmFuc2ZlcjsKLSAgdGltZV90IHRfc3RhcnR0cmFuc2ZlcjsKLSAgdGltZV90IHRfcmVkaXJlY3Q7CisgIHRpbWVkaWZmX3QgdF9uc2xvb2t1cDsKKyAgdGltZWRpZmZfdCB0X2Nvbm5lY3Q7CisgIHRpbWVkaWZmX3QgdF9hcHBjb25uZWN0OworICB0aW1lZGlmZl90IHRfcHJldHJhbnNmZXI7CisgIHRpbWVkaWZmX3QgdF9zdGFydHRyYW5zZmVyOworICB0aW1lZGlmZl90IHRfcmVkaXJlY3Q7CiAKICAgc3RydWN0IGN1cmx0aW1lIHN0YXJ0OwogICBzdHJ1Y3QgY3VybHRpbWUgdF9zdGFydHNpbmdsZTsKQEAgLTExMzIsOCArMTE4Myw4IEBACiAgIGN1cmxfb2ZmX3Qgc3BlZWRlclsgQ1VSUl9USU1FIF07CiAgIHN0cnVjdCBjdXJsdGltZSBzcGVlZGVyX3RpbWVbIENVUlJfVElNRSBdOwogICBpbnQgc3BlZWRlcl9jOwotICBiaXQgY2FsbGJhY2s6MTsgIC8qIHNldCB3aGVuIHByb2dyZXNzIGNhbGxiYWNrIGlzIHVzZWQgKi8KLSAgYml0IGlzX3Rfc3RhcnRyYW5zZmVyX3NldDoxOworICBCSVQoY2FsbGJhY2spOyAgLyogc2V0IHdoZW4gcHJvZ3Jlc3MgY2FsbGJhY2sgaXMgdXNlZCAqLworICBCSVQoaXNfdF9zdGFydHJhbnNmZXJfc2V0KTsKIH07CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0xMTY0LDI5ICsxMjE1LDE4IEBACiAgICAgUlRTUFJFUV9MQVNUIC8qIGxhc3QgaW4gbGlzdCAqLwogfSBDdXJsX1J0c3BSZXE7CiAKLS8qCi0gKiBWYWx1ZXMgdGhhdCBhcmUgZ2VuZXJhdGVkLCB0ZW1wb3Jhcnkgb3IgY2FsY3VsYXRlZCBpbnRlcm5hbGx5IGZvciBhCi0gKiAic2Vzc2lvbiBoYW5kbGUiIG11c3QgYmUgZGVmaW5lZCB3aXRoaW4gdGhlICdzdHJ1Y3QgVXJsU3RhdGUnLiAgVGhpcyBzdHJ1Y3QKLSAqIHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIEN1cmxfZWFzeSBzdHJ1Y3QuIFdoZW4gdGhlICdDdXJsX2Vhc3knCi0gKiBzdHJ1Y3QgaXMgY2xvbmVkLCB0aGlzIGRhdGEgTVVTVCBOT1QgYmUgY29waWVkLgotICoKLSAqIFJlbWVtYmVyIHRoYXQgYW55ICJzdGF0ZSIgaW5mb3JtYXRpb24gZ29lcyBnbG9iYWxseSBmb3IgdGhlIGN1cmwgaGFuZGxlLgotICogU2Vzc2lvbi1kYXRhIE1VU1QgYmUgcHV0IGluIHRoZSBjb25uZWN0ZGF0YSBzdHJ1Y3QgYW5kIGhlcmUuICAqLwotI2RlZmluZSBNQVhfQ1VSTF9VU0VSX0xFTkdUSCAyNTYKLSNkZWZpbmUgTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RIIDI1NgotCiBzdHJ1Y3QgYXV0aCB7CiAgIHVuc2lnbmVkIGxvbmcgd2FudDsgIC8qIEJpdG1hc2sgc2V0IHRvIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHdhbnRlZCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgKHdpdGggQ1VSTE9QVF9IVFRQQVVUSCBvciBDVVJMT1BUX1BST1hZQVVUSCkuICovCiAgIHVuc2lnbmVkIGxvbmcgcGlja2VkOwogICB1bnNpZ25lZCBsb25nIGF2YWlsOyAvKiBCaXRtYXNrIGZvciB3aGF0IHRoZSBzZXJ2ZXIgcmVwb3J0cyB0byBzdXBwb3J0IGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHJlc291cmNlICovCi0gIGJpdCBkb25lOjE7ICAvKiBUUlVFIHdoZW4gdGhlIGF1dGggcGhhc2UgaXMgZG9uZSBhbmQgcmVhZHkgdG8gZG8gdGhlCi0gICAgICAgICAgICAgICAgICphY3R1YWwqIHJlcXVlc3QgKi8KLSAgYml0IG11bHRpcGFzczoxOyAvKiBUUlVFIGlmIHRoaXMgaXMgbm90IHlldCBhdXRoZW50aWNhdGVkIGJ1dCB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgIGF1dGggbXVsdGlwYXNzIG5lZ290aWF0aW9uICovCi0gIGJpdCBpZXN0eWxlOjE7IC8qIFRSVUUgaWYgZGlnZXN0IHNob3VsZCBiZSBkb25lIElFLXN0eWxlIG9yIEZBTFNFIGlmIGl0Ci0gICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgUkZDIGNvbXBsaWFudCAqLworICBCSVQoZG9uZSk7ICAvKiBUUlVFIHdoZW4gdGhlIGF1dGggcGhhc2UgaXMgZG9uZSBhbmQgcmVhZHkgdG8gZG8gdGhlCisgICAgICAgICAgICAgICAgIGFjdHVhbCByZXF1ZXN0ICovCisgIEJJVChtdWx0aXBhc3MpOyAvKiBUUlVFIGlmIHRoaXMgaXMgbm90IHlldCBhdXRoZW50aWNhdGVkIGJ1dCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICBhdXRoIG11bHRpcGFzcyBuZWdvdGlhdGlvbiAqLworICBCSVQoaWVzdHlsZSk7IC8qIFRSVUUgaWYgZGlnZXN0IHNob3VsZCBiZSBkb25lIElFLXN0eWxlIG9yIEZBTFNFIGlmIGl0CisgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIFJGQyBjb21wbGlhbnQgKi8KIH07CiAKIHN0cnVjdCBDdXJsX2h0dHAyX2RlcCB7CkBAIC0xMjAwLDkgKzEyNDAsNyBAQAogICogQk9EWSkuCiAgKi8KIHN0cnVjdCB0ZW1wYnVmIHsKLSAgY2hhciAqYnVmOyAgLyogYWxsb2NhdGVkIGJ1ZmZlciB0byBrZWVwIGRhdGEgaW4gd2hlbiBhIHdyaXRlIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgIHJldHVybnMgdG8gbWFrZSB0aGUgY29ubmVjdGlvbiBwYXVzZWQgKi8KLSAgc2l6ZV90IGxlbjsgLyogc2l6ZSBvZiB0aGUgJ3RlbXB3cml0ZScgYWxsb2NhdGVkIGJ1ZmZlciAqLworICBzdHJ1Y3QgZHluYnVmIGI7CiAgIGludCB0eXBlOyAgIC8qIHR5cGUgb2YgdGhlICd0ZW1wd3JpdGUnIGJ1ZmZlciBhcyBhIGJpdG1hc2sgdGhhdCBpcyB1c2VkIHdpdGgKICAgICAgICAgICAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoKSAqLwogfTsKQEAgLTEyMTIsNyArMTI1MCw4IEBACiAgIEVYUElSRV8xMDBfVElNRU9VVCwKICAgRVhQSVJFX0FTWU5DX05BTUUsCiAgIEVYUElSRV9DT05ORUNUVElNRU9VVCwKLSAgRVhQSVJFX0ROU19QRVJfTkFNRSwKKyAgRVhQSVJFX0ROU19QRVJfTkFNRSwgLyogZmFtaWx5MSAqLworICBFWFBJUkVfRE5TX1BFUl9OQU1FMiwgLyogZmFtaWx5MiAqLwogICBFWFBJUkVfSEFQUFlfRVlFQkFMTFNfRE5TLCAvKiBTZWUgYXN5bi1hcmVzLmMgKi8KICAgRVhQSVJFX0hBUFBZX0VZRUJBTExTLAogICBFWFBJUkVfTVVMVElfUEVORElORywKQEAgLTEyMjAsNiArMTI1OSw3IEBACiAgIEVYUElSRV9TUEVFRENIRUNLLAogICBFWFBJUkVfVElNRU9VVCwKICAgRVhQSVJFX1RPT0ZBU1QsCisgIEVYUElSRV9RVUlDLAogICBFWFBJUkVfTEFTVCAvKiBub3QgYW4gYWN0dWFsIHRpbWVyLCB1c2VkIGFzIGEgbWFya2VyIG9ubHkgKi8KIH0gZXhwaXJlX2lkOwogCkBAIC0xMjU0LDcgKzEyOTQsNiBAQAogfTsKIAogc3RydWN0IFVybFN0YXRlIHsKLQogICAvKiBQb2ludHMgdG8gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KICAgc3RydWN0IGNvbm5jYWNoZSAqY29ubl9jYWNoZTsKIApAQCAtMTI2Miw5ICsxMzAxLDcgQEAKICAgc3RydWN0IGN1cmx0aW1lIGtlZXBzX3NwZWVkOyAvKiBmb3IgdGhlIHByb2dyZXNzIG1ldGVyIHJlYWxseSAqLwogCiAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqbGFzdGNvbm5lY3Q7IC8qIFRoZSBsYXN0IGNvbm5lY3Rpb24sIE5VTEwgaWYgdW5kZWZpbmVkICovCi0KLSAgY2hhciAqaGVhZGVyYnVmZjsgLyogYWxsb2NhdGVkIGJ1ZmZlciB0byBzdG9yZSBoZWFkZXJzIGluICovCi0gIHNpemVfdCBoZWFkZXJzaXplOyAgIC8qIHNpemUgb2YgdGhlIGFsbG9jYXRpb24gKi8KKyAgc3RydWN0IGR5bmJ1ZiBoZWFkZXJiOyAvKiBidWZmZXIgdG8gc3RvcmUgaGVhZGVycyBpbiAqLwogCiAgIGNoYXIgKmJ1ZmZlcjsgLyogZG93bmxvYWQgYnVmZmVyICovCiAgIGNoYXIgKnVsYnVmOyAvKiBhbGxvY2F0ZWQgdXBsb2FkIGJ1ZmZlciBvciBOVUxMICovCkBAIC0xMzE1LDcgKzEzNTIsNyBAQAogLyogZG8gRlRQIGxpbmUtZW5kIGNvbnZlcnNpb25zIG9uIG1vc3QgcGxhdGZvcm1zICovCiAjZGVmaW5lIENVUkxfRE9fTElORUVORF9DT05WCiAgIC8qIGZvciBGVFAgZG93bmxvYWRzOiB0cmFjayBDUkxGIHNlcXVlbmNlcyB0aGF0IHNwYW4gYmxvY2tzICovCi0gIGJpdCBwcmV2X2Jsb2NrX2hhZF90cmFpbGluZ19jcjoxOworICBCSVQocHJldl9ibG9ja19oYWRfdHJhaWxpbmdfY3IpOwogICAvKiBmb3IgRlRQIGRvd25sb2FkczogaG93IG1hbnkgQ1JMRnMgZGlkIHdlIGNvbnZlcnRlZCB0byBMRnM/ICovCiAgIGN1cmxfb2ZmX3QgY3JsZl9jb252ZXJzaW9uczsKICNlbmRpZgpAQCAtMTM0Miw0MCArMTM3OSw2MCBAQAogICBpbnQgc3RyZWFtX3dlaWdodDsKICAgQ1VSTFUgKnVoOyAvKiBVUkwgaGFuZGxlIGZvciB0aGUgY3VycmVudCBwYXJzZWQgVVJMICovCiAgIHN0cnVjdCB1cmxwaWVjZXMgdXA7CisgIEN1cmxfSHR0cFJlcSBodHRwcmVxOyAvKiB3aGF0IGtpbmQgb2YgSFRUUCByZXF1ZXN0IChpZiBhbnkpIGlzIHRoaXMgKi8KICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKICAgc2l6ZV90IHRyYWlsZXJzX2J5dGVzX3NlbnQ7Ci0gIEN1cmxfc2VuZF9idWZmZXIgKnRyYWlsZXJzX2J1ZjsgLyogYSBidWZmZXIgY29udGFpbmluZyB0aGUgY29tcGlsZWQgdHJhaWxpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzICovCisgIHN0cnVjdCBkeW5idWYgdHJhaWxlcnNfYnVmOyAvKiBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBjb21waWxlZCB0cmFpbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyAqLwogI2VuZGlmCiAgIHRyYWlsZXJzX3N0YXRlIHRyYWlsZXJzX3N0YXRlOyAvKiB3aGV0aGVyIHdlIGFyZSBzZW5kaW5nIHRyYWlsZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2hhdCBzdGFnZSBhcmUgd2UgYXQgKi8KKworICAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5ncywgTVVTVCBiZSBmcmVlZCBiZWZvcmUgdGhpcyBzdHJ1Y3QgaXMKKyAgICAga2lsbGVkLiAqLworICBzdHJ1Y3QgZHluYW1pY2FsbHlfYWxsb2NhdGVkX2RhdGEgeworICAgIGNoYXIgKnByb3h5dXNlcnB3ZDsKKyAgICBjaGFyICp1YWdlbnQ7CisgICAgY2hhciAqYWNjZXB0X2VuY29kaW5nOworICAgIGNoYXIgKnVzZXJwd2Q7CisgICAgY2hhciAqcmFuZ2VsaW5lOworICAgIGNoYXIgKnJlZjsKKyAgICBjaGFyICpob3N0OworICAgIGNoYXIgKmNvb2tpZWhvc3Q7CisgICAgY2hhciAqcnRzcF90cmFuc3BvcnQ7CisgICAgY2hhciAqdGU7IC8qIFRFOiByZXF1ZXN0IGhlYWRlciAqLworICB9IGFwdHI7CisKICNpZmRlZiBDVVJMREVCVUcKLSAgYml0IGNvbm5jYWNoZV9sb2NrOjE7CisgIEJJVChjb25uY2FjaGVfbG9jayk7CiAjZW5kaWYKICAgLyogd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzIGNhbGxlZCwgdGhlIG11bHRpIGhhbmRsZSBpcyAib3duZWQiIGJ5CiAgICAgIHRoZSBlYXN5IGhhbmRsZSBzbyBjdXJsX2Vhc3lfY2xlYW51cCgpIG9uIHN1Y2ggYW4gZWFzeSBoYW5kbGUgd2lsbAogICAgICBhbHNvIGNsb3NlIHRoZSBtdWx0aSBoYW5kbGUhICovCi0gIGJpdCBtdWx0aV9vd25lZF9ieV9lYXN5OjE7CisgIEJJVChtdWx0aV9vd25lZF9ieV9lYXN5KTsKIAotICBiaXQgdGhpc19pc19hX2ZvbGxvdzoxOyAvKiB0aGlzIGlzIGEgZm9sbG93ZWQgTG9jYXRpb246IHJlcXVlc3QgKi8KLSAgYml0IHJlZnVzZWRfc3RyZWFtOjE7IC8qIHRoaXMgd2FzIHJlZnVzZWQsIHRyeSBhZ2FpbiAqLwotICBiaXQgZXJyb3JidWY6MTsgLyogU2V0IHRvIFRSVUUgaWYgdGhlIGVycm9yIGJ1ZmZlciBpcyBhbHJlYWR5IGZpbGxlZCBpbi4KKyAgQklUKHRoaXNfaXNfYV9mb2xsb3cpOyAvKiB0aGlzIGlzIGEgZm9sbG93ZWQgTG9jYXRpb246IHJlcXVlc3QgKi8KKyAgQklUKHJlZnVzZWRfc3RyZWFtKTsgLyogdGhpcyB3YXMgcmVmdXNlZCwgdHJ5IGFnYWluICovCisgIEJJVChlcnJvcmJ1Zik7IC8qIFNldCB0byBUUlVFIGlmIHRoZSBlcnJvciBidWZmZXIgaXMgYWxyZWFkeSBmaWxsZWQgaW4uCiAgICAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSBzZXQgdG8gRkFMU0UgZXZlcnkgdGltZSBfZWFzeV9wZXJmb3JtKCkgaXMKICAgICAgICAgICAgICAgICAgICAgY2FsbGVkLiAqLwotICBiaXQgYWxsb3dfcG9ydDoxOyAvKiBJcyBzZXQudXNlX3BvcnQgYWxsb3dlZCB0byB0YWtlIGVmZmVjdCBvciBub3QuIFRoaXMKKyAgQklUKGFsbG93X3BvcnQpOyAvKiBJcyBzZXQudXNlX3BvcnQgYWxsb3dlZCB0byB0YWtlIGVmZmVjdCBvciBub3QuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICBpcyBhbHdheXMgc2V0IFRSVUUgd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzIGNhbGxlZC4gKi8KLSAgYml0IGF1dGhwcm9ibGVtOjE7IC8qIFRSVUUgaWYgdGhlcmUncyBzb21lIHByb2JsZW0gYXV0aGVudGljYXRpbmcgKi8KKyAgQklUKGF1dGhwcm9ibGVtKTsgLyogVFJVRSBpZiB0aGVyZSdzIHNvbWUgcHJvYmxlbSBhdXRoZW50aWNhdGluZyAqLwogICAvKiBzZXQgYWZ0ZXIgaW5pdGlhbCBVU0VSIGZhaWx1cmUsIHRvIHByZXZlbnQgYW4gYXV0aGVudGljYXRpb24gbG9vcCAqLwotICBiaXQgZnRwX3RyeWluZ19hbHRlcm5hdGl2ZToxOwotICBiaXQgd2lsZGNhcmRtYXRjaDoxOyAvKiBlbmFibGUgd2lsZGNhcmQgbWF0Y2hpbmcgKi8KLSAgYml0IGV4cGVjdDEwMGhlYWRlcjoxOyAgLyogVFJVRSBpZiB3ZSBhZGRlZCBFeHBlY3Q6IDEwMC1jb250aW51ZSAqLwotICBiaXQgdXNlX3JhbmdlOjE7Ci0gIGJpdCByYW5nZXN0cmluZ2FsbG9jOjE7IC8qIHRoZSByYW5nZSBzdHJpbmcgaXMgbWFsbG9jKCknZWQgKi8KLSAgYml0IGRvbmU6MTsgLyogc2V0IHRvIEZBTFNFIHdoZW4gQ3VybF9pbml0X2RvKCkgaXMgY2FsbGVkIGFuZCBzZXQgdG8gVFJVRQorICBCSVQoZnRwX3RyeWluZ19hbHRlcm5hdGl2ZSk7CisgIEJJVCh3aWxkY2FyZG1hdGNoKTsgLyogZW5hYmxlIHdpbGRjYXJkIG1hdGNoaW5nICovCisgIEJJVChleHBlY3QxMDBoZWFkZXIpOyAgLyogVFJVRSBpZiB3ZSBhZGRlZCBFeHBlY3Q6IDEwMC1jb250aW51ZSAqLworICBCSVQoZGlzYWJsZWV4cGVjdCk7ICAgIC8qIFRSVUUgaWYgRXhwZWN0OiBpcyBkaXNhYmxlZCBkdWUgdG8gYSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxNyByZXNwb25zZSAqLworICBCSVQodXNlX3JhbmdlKTsKKyAgQklUKHJhbmdlc3RyaW5nYWxsb2MpOyAvKiB0aGUgcmFuZ2Ugc3RyaW5nIGlzIG1hbGxvYygpJ2VkICovCisgIEJJVChkb25lKTsgLyogc2V0IHRvIEZBTFNFIHdoZW4gQ3VybF9pbml0X2RvKCkgaXMgY2FsbGVkIGFuZCBzZXQgdG8gVFJVRQogICAgICAgICAgICAgICAgICAgd2hlbiBtdWx0aV9kb25lKCkgaXMgY2FsbGVkLCB0byBwcmV2ZW50IG11bHRpX2RvbmUoKSB0byBnZXQKICAgICAgICAgICAgICAgICAgIGludm9rZWQgdHdpY2Ugd2hlbiB0aGUgbXVsdGkgaW50ZXJmYWNlIGlzIHVzZWQuICovCi0gIGJpdCBzdHJlYW1fZGVwZW5kc19lOjE7IC8qIHNldCBvciBkb24ndCBzZXQgdGhlIEV4Y2x1c2l2ZSBiaXQgKi8KLSAgYml0IHByZXZpb3VzbHlwZW5kaW5nOjE7IC8qIHRoaXMgdHJhbnNmZXIgV0FTIGluIHRoZSBtdWx0aS0+cGVuZGluZyBxdWV1ZSAqLworICBCSVQoc3RyZWFtX2RlcGVuZHNfZSk7IC8qIHNldCBvciBkb24ndCBzZXQgdGhlIEV4Y2x1c2l2ZSBiaXQgKi8KKyAgQklUKHByZXZpb3VzbHlwZW5kaW5nKTsgLyogdGhpcyB0cmFuc2ZlciBXQVMgaW4gdGhlIG11bHRpLT5wZW5kaW5nIHF1ZXVlICovCisgIEJJVChjb29raWVfZW5naW5lKTsKIH07CiAKIApAQCAtMTM5Myw5ICsxNDUwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoQ09PS0lFRklMRSkgY2FsbHMgKi8KICAgc3RydWN0IGN1cmxfc2xpc3QgKnJlc29sdmU7IC8qIHNldCB0byBwb2ludCB0byB0aGUgc2V0LnJlc29sdmUgbGlzdCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNob3VsZCBiZSBkZWFsdCB3aXRoIGluIHByZXRyYW5zZmVyICovCi0gIGJpdCB1cmxfYWxsb2M6MTsgICAvKiBVUkwgc3RyaW5nIGlzIG1hbGxvYygpJ2VkICovCi0gIGJpdCByZWZlcmVyX2FsbG9jOjE7IC8qIHJlZmVyZXIgc3RyaW5nIGlzIG1hbGxvYygpZWQgKi8KLSAgYml0IHdpbGRjYXJkX3Jlc29sdmU6MTsgLyogU2V0IHRvIHRydWUgaWYgYW55IHJlc29sdmUgY2hhbmdlIGlzIGEKKyAgQklUKHVybF9hbGxvYyk7ICAgLyogVVJMIHN0cmluZyBpcyBtYWxsb2MoKSdlZCAqLworICBCSVQocmVmZXJlcl9hbGxvYyk7IC8qIHJlZmVyZXIgc3RyaW5nIGlzIG1hbGxvYygpZWQgKi8KKyAgQklUKHdpbGRjYXJkX3Jlc29sdmUpOyAvKiBTZXQgdG8gdHJ1ZSBpZiBhbnkgcmVzb2x2ZSBjaGFuZ2UgaXMgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmQgKi8KIH07CiAKQEAgLTE0MTAsNiArMTQ2NywxNCBAQAogCiBzdHJ1Y3QgQ3VybF9tdWx0aTsgICAgLyogZGVjbGFyZWQgYW5kIHVzZWQgb25seSBpbiBtdWx0aS5jICovCiAKKy8qCisgKiBUaGlzIGVudW1lcmF0aW9uIE1VU1Qgbm90IHVzZSBjb25kaXRpb25hbCBkaXJlY3RpdmVzICgjaWZkZWZzKSwgbmV3CisgKiBudWxsIHRlcm1pbmF0ZWQgc3RyaW5ncyBNVVNUIGJlIGFkZGVkIHRvIHRoZSBlbnVtZXJhdGlvbiBpbW1lZGlhdGVseQorICogYmVmb3JlIFNUUklOR19MQVNUWkVST1RFUk1JTkFURUQsIGJpbmFyeSBmaWVsZHMgaW1tZWRpYXRlbHkgYmVmb3JlCisgKiBTVFJJTkdfTEFTVC4gV2hlbiBkb2luZyBzbywgZW5zdXJlIHRoYXQgdGhlIHBhY2thZ2VzL09TNDAwL2Noa3N0cmluZy5jCisgKiB0ZXN0IGlzIHVwZGF0ZWQgYW5kIGFwcGxpY2FibGUgY2hhbmdlcyBmb3IgRUJDRElDIHRvIEFTQ0lJIGNvbnZlcnNpb24KKyAqIGFyZSBjYXRlcmVkIGZvciBpbiBjdXJsX2Vhc3lfc2V0b3B0X2Njc2lkKCkKKyAqLwogZW51bSBkdXBzdHJpbmcgewogICBTVFJJTkdfQ0VSVF9PUklHLCAgICAgICAvKiBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBuYW1lICovCiAgIFNUUklOR19DRVJUX1BST1hZLCAgICAgIC8qIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIG5hbWUgKi8KQEAgLTE0NjYsMzMgKzE1MzEsNDEgQEAKICAgU1RSSU5HX1JUU1BfU0VTU0lPTl9JRCwgLyogU2Vzc2lvbiBJRCB0byB1c2UgKi8KICAgU1RSSU5HX1JUU1BfU1RSRUFNX1VSSSwgLyogU3RyZWFtIFVSSSBmb3IgdGhpcyByZXF1ZXN0ICovCiAgIFNUUklOR19SVFNQX1RSQU5TUE9SVCwgIC8qIFRyYW5zcG9ydCBmb3IgdGhpcyBzZXNzaW9uICovCi0jaWZkZWYgVVNFX1NTSAorCiAgIFNUUklOR19TU0hfUFJJVkFURV9LRVksIC8qIHBhdGggdG8gdGhlIHByaXZhdGUga2V5IGZpbGUgZm9yIGF1dGggKi8KICAgU1RSSU5HX1NTSF9QVUJMSUNfS0VZLCAgLyogcGF0aCB0byB0aGUgcHVibGljIGtleSBmaWxlIGZvciBhdXRoICovCiAgIFNUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENSwgLyogbWQ1IG9mIGhvc3QgcHVibGljIGtleSBpbiBhc2NpaSBoZXggKi8KICAgU1RSSU5HX1NTSF9LTk9XTkhPU1RTLCAgLyogZmlsZSBuYW1lIG9mIGtub3duaG9zdHMgZmlsZSAqLwotI2VuZGlmCisKICAgU1RSSU5HX1BST1hZX1NFUlZJQ0VfTkFNRSwgLyogUHJveHkgc2VydmljZSBuYW1lICovCiAgIFNUUklOR19TRVJWSUNFX05BTUUsICAgIC8qIFNlcnZpY2UgbmFtZSAqLwogICBTVFJJTkdfTUFJTF9GUk9NLAogICBTVFJJTkdfTUFJTF9BVVRILAogCi0jaWZkZWYgVVNFX1RMU19TUlAKICAgU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfT1JJRywgIC8qIFRMUyBhdXRoIDx1c2VybmFtZT4gKi8KICAgU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfUFJPWFksIC8qIFRMUyBhdXRoIDx1c2VybmFtZT4gKi8KICAgU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfT1JJRywgIC8qIFRMUyBhdXRoIDxwYXNzd29yZD4gKi8KICAgU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfUFJPWFksIC8qIFRMUyBhdXRoIDxwYXNzd29yZD4gKi8KLSNlbmRpZgorCiAgIFNUUklOR19CRUFSRVIsICAgICAgICAgICAgICAgIC8qIDxiZWFyZXI+LCBpZiB1c2VkICovCi0jaWZkZWYgVVNFX1VOSVhfU09DS0VUUworCiAgIFNUUklOR19VTklYX1NPQ0tFVF9QQVRILCAgICAgIC8qIHBhdGggdG8gVW5peCBzb2NrZXQsIGlmIHVzZWQgKi8KLSNlbmRpZgorCiAgIFNUUklOR19UQVJHRVQsICAgICAgICAgICAgICAgIC8qIENVUkxPUFRfUkVRVUVTVF9UQVJHRVQgKi8KICAgU1RSSU5HX0RPSCwgICAgICAgICAgICAgICAgICAgLyogQ1VSTE9QVF9ET0hfVVJMICovCi0jaWZkZWYgVVNFX0FMVFNWQworCiAgIFNUUklOR19BTFRTVkMsICAgICAgICAgICAgICAgIC8qIENVUkxPUFRfQUxUU1ZDICovCi0jZW5kaWYKLSAgLyogLS0gZW5kIG9mIHplcm8tdGVybWluYXRlZCBzdHJpbmdzIC0tICovCisKKyAgU1RSSU5HX1NBU0xfQVVUSFpJRCwgICAgICAgICAgLyogQ1VSTE9QVF9TQVNMX0FVVEhaSUQgKi8KKworICBTVFJJTkdfVEVNUF9VUkwsICAgICAgICAgICAgICAvKiB0ZW1wIFVSTCBzdG9yYWdlIGZvciBwcm94eSB1c2UgKi8KKworICBTVFJJTkdfRE5TX1NFUlZFUlMsCisgIFNUUklOR19ETlNfSU5URVJGQUNFLAorICBTVFJJTkdfRE5TX0xPQ0FMX0lQNCwKKyAgU1RSSU5HX0ROU19MT0NBTF9JUDYsCisKKyAgLyogLS0gZW5kIG9mIG51bGwtdGVybWluYXRlZCBzdHJpbmdzIC0tICovCiAKICAgU1RSSU5HX0xBU1RaRVJPVEVSTUlOQVRFRCwKIApAQCAtMTUwMCw5ICsxNTczLDIwIEBACiAKICAgU1RSSU5HX0NPUFlQT1NURklFTERTLCAgLyogaWYgUE9TVCwgc2V0IHRoZSBmaWVsZHMnIHZhbHVlcyBoZXJlICovCiAKKwogICBTVFJJTkdfTEFTVCAvKiBub3QgdXNlZCwganVzdCBhbiBlbmQtb2YtbGlzdCBtYXJrZXIgKi8KIH07CiAKK2VudW0gZHVwYmxvYiB7CisgIEJMT0JfQ0VSVF9PUklHLAorICBCTE9CX0NFUlRfUFJPWFksCisgIEJMT0JfS0VZX09SSUcsCisgIEJMT0JfS0VZX1BST1hZLAorICBCTE9CX1NTTF9JU1NVRVJDRVJUX09SSUcsCisgIEJMT0JfU1NMX0lTU1VFUkNFUlRfUFJPWFksCisgIEJMT0JfTEFTVAorfTsKKwogLyogY2FsbGJhY2sgdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHRoaXMgZWFzeSBoYW5kbGUgaXMgY29tcGxldGVkIHdpdGhpbiBhIG11bHRpCiAgICBoYW5kbGUuICBPbmx5IHVzZWQgZm9yIGludGVybmFsbHkgY3JlYXRlZCB0cmFuc2ZlcnMsIGxpa2UgZm9yIGV4YW1wbGUKICAgIERvSC4gKi8KQEAgLTE2MDAsMTEgKzE2ODQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBob3N0bmFtZSBhbmQgcG9ydCB0byBjb25uZWN0IHRvICovCiAgIGN1cmxfVGltZUNvbmQgdGltZWNvbmRpdGlvbjsgLyoga2luZCBvZiB0aW1lL2RhdGUgY29tcGFyaXNvbiAqLwogICB0aW1lX3QgdGltZXZhbHVlOyAgICAgICAvKiB3aGF0IHRpbWUgdG8gY29tcGFyZSB3aXRoICovCi0gIEN1cmxfSHR0cFJlcSBodHRwcmVxOyAgIC8qIHdoYXQga2luZCBvZiBIVFRQIHJlcXVlc3QgKGlmIGFueSkgaXMgdGhpcyAqLworICBDdXJsX0h0dHBSZXEgbWV0aG9kOyAgIC8qIHdoYXQga2luZCBvZiBIVFRQIHJlcXVlc3QgKGlmIGFueSkgaXMgdGhpcyAqLwogICBsb25nIGh0dHB2ZXJzaW9uOyAvKiB3aGVuIG5vbi16ZXJvLCBhIHNwZWNpZmljIEhUVFAgdmVyc2lvbiByZXF1ZXN0ZWQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXNlZCBpbiB0aGUgbGlicmFyeSdzIHJlcXVlc3QocykgKi8KICAgc3RydWN0IHNzbF9jb25maWdfZGF0YSBzc2w7ICAvKiB1c2VyIGRlZmluZWQgU1NMIHN0dWZmICovCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhIHByb3h5X3NzbDsgIC8qIHVzZXIgZGVmaW5lZCBTU0wgc3R1ZmYgZm9yIHByb3h5ICovCisjZW5kaWYKICAgc3RydWN0IHNzbF9nZW5lcmFsX2NvbmZpZyBnZW5lcmFsX3NzbDsgLyogZ2VuZXJhbCB1c2VyIGRlZmluZWQgU1NMIHN0dWZmICovCiAgIGN1cmxfcHJveHl0eXBlIHByb3h5dHlwZTsgLyogd2hhdCBraW5kIG9mIHByb3h5IHRoYXQgaXMgaW4gdXNlICovCiAgIGxvbmcgZG5zX2NhY2hlX3RpbWVvdXQ7IC8qIEROUyBjYWNoZSB0aW1lb3V0ICovCkBAIC0xNjM0LDYgKzE3MjAsNyBAQAogICBsb25nIG5ld19kaXJlY3RvcnlfcGVybXM7IC8qIFBlcm1pc3Npb25zIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHJlbW90ZSBkaXJzICovCiAgIGxvbmcgc3NoX2F1dGhfdHlwZXM7ICAgLyogYWxsb3dlZCBTU0ggYXV0aCB0eXBlcyAqLwogICBjaGFyICpzdHJbU1RSSU5HX0xBU1RdOyAvKiBhcnJheSBvZiBzdHJpbmdzLCBwb2ludGluZyB0byBhbGxvY2F0ZWQgbWVtb3J5ICovCisgIHN0cnVjdCBjdXJsX2Jsb2IgKmJsb2JzW0JMT0JfTEFTVF07CiAgIHVuc2lnbmVkIGludCBzY29wZV9pZDsgIC8qIFNjb3BlIGlkIGZvciBJUHY2ICovCiAgIGxvbmcgYWxsb3dlZF9wcm90b2NvbHM7CiAgIGxvbmcgcmVkaXJfcHJvdG9jb2xzOwpAQCAtMTY3MSw4NCArMTc1OCw4NCBAQAogICBDVVJMVSAqdWg7IC8qIFVSTCBoYW5kbGUgZm9yIHRoZSBjdXJyZW50IHBhcnNlZCBVUkwgKi8KICAgdm9pZCAqdHJhaWxlcl9kYXRhOyAvKiBwb2ludGVyIHRvIHBhc3MgdG8gdHJhaWxlciBkYXRhIGNhbGxiYWNrICovCiAgIGN1cmxfdHJhaWxlcl9jYWxsYmFjayB0cmFpbGVyX2NhbGxiYWNrOyAvKiB0cmFpbGluZyBkYXRhIGNhbGxiYWNrICovCi0gIGJpdCBpc19mcmVhZF9zZXQ6MTsgLyogaGFzIHJlYWQgY2FsbGJhY2sgYmVlbiBzZXQgdG8gbm9uLU5VTEw/ICovCi0gIGJpdCBpc19md3JpdGVfc2V0OjE7IC8qIGhhcyB3cml0ZSBjYWxsYmFjayBiZWVuIHNldCB0byBub24tTlVMTD8gKi8KLSAgYml0IGZyZWVfcmVmZXJlcjoxOyAvKiBzZXQgVFJVRSBpZiAncmVmZXJlcicgcG9pbnRzIHRvIGEgc3RyaW5nIHdlCisgIEJJVChpc19mcmVhZF9zZXQpOyAvKiBoYXMgcmVhZCBjYWxsYmFjayBiZWVuIHNldCB0byBub24tTlVMTD8gKi8KKyAgQklUKGlzX2Z3cml0ZV9zZXQpOyAvKiBoYXMgd3JpdGUgY2FsbGJhY2sgYmVlbiBzZXQgdG8gbm9uLU5VTEw/ICovCisgIEJJVChmcmVlX3JlZmVyZXIpOyAvKiBzZXQgVFJVRSBpZiAncmVmZXJlcicgcG9pbnRzIHRvIGEgc3RyaW5nIHdlCiAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgKi8KLSAgYml0IHRmdHBfbm9fb3B0aW9uczoxOyAvKiBkbyBub3Qgc2VuZCBURlRQIG9wdGlvbnMgcmVxdWVzdHMgKi8KLSAgYml0IHNlcF9oZWFkZXJzOjE7ICAgICAvKiBoYW5kbGUgaG9zdCBhbmQgcHJveHkgaGVhZGVycyBzZXBhcmF0ZWx5ICovCi0gIGJpdCBjb29raWVzZXNzaW9uOjE7ICAgLyogbmV3IGNvb2tpZSBzZXNzaW9uPyAqLwotICBiaXQgY3JsZjoxOyAgICAgICAgICAgIC8qIGNvbnZlcnQgY3JsZiBvbiBmdHAgdXBsb2FkKD8pICovCi0gIGJpdCBzdHJpcF9wYXRoX3NsYXNoOjE7IC8qIHN0cmlwIG9mZiBpbml0aWFsIHNsYXNoIGZyb20gcGF0aCAqLwotICBiaXQgc3NoX2NvbXByZXNzaW9uOjE7ICAgICAgICAgICAgLyogZW5hYmxlIFNTSCBjb21wcmVzc2lvbiAqLworICBCSVQodGZ0cF9ub19vcHRpb25zKTsgLyogZG8gbm90IHNlbmQgVEZUUCBvcHRpb25zIHJlcXVlc3RzICovCisgIEJJVChzZXBfaGVhZGVycyk7ICAgICAvKiBoYW5kbGUgaG9zdCBhbmQgcHJveHkgaGVhZGVycyBzZXBhcmF0ZWx5ICovCisgIEJJVChjb29raWVzZXNzaW9uKTsgICAvKiBuZXcgY29va2llIHNlc3Npb24/ICovCisgIEJJVChjcmxmKTsgICAgICAgICAgICAvKiBjb252ZXJ0IGNybGYgb24gZnRwIHVwbG9hZCg/KSAqLworICBCSVQoc3RyaXBfcGF0aF9zbGFzaCk7IC8qIHN0cmlwIG9mZiBpbml0aWFsIHNsYXNoIGZyb20gcGF0aCAqLworICBCSVQoc3NoX2NvbXByZXNzaW9uKTsgICAgICAgICAgICAvKiBlbmFibGUgU1NIIGNvbXByZXNzaW9uICovCiAKIC8qIEhlcmUgZm9sbG93cyBib29sZWFuIHNldHRpbmdzIHRoYXQgZGVmaW5lIGhvdyB0byBiZWhhdmUgZHVyaW5nCiAgICB0aGlzIHNlc3Npb24uIFRoZXkgYXJlIFNUQVRJQywgc2V0IGJ5IGxpYmN1cmwgdXNlcnMgb3IgYXQgbGVhc3QgaW5pdGlhbGx5CiAgICBhbmQgdGhleSBkb24ndCBjaGFuZ2UgZHVyaW5nIG9wZXJhdGlvbnMuICovCi0gIGJpdCBnZXRfZmlsZXRpbWU6MTsgICAgIC8qIGdldCB0aGUgdGltZSBhbmQgZ2V0IG9mIHRoZSByZW1vdGUgZmlsZSAqLwotICBiaXQgdHVubmVsX3RocnVfaHR0cHByb3h5OjE7IC8qIHVzZSBDT05ORUNUIHRocm91Z2ggYSBIVFRQIHByb3h5ICovCi0gIGJpdCBwcmVmZXJfYXNjaWk6MTsgICAgIC8qIEFTQ0lJIHJhdGhlciB0aGFuIGJpbmFyeSAqLwotICBiaXQgZnRwX2FwcGVuZDoxOyAgICAgICAvKiBhcHBlbmQsIG5vdCBvdmVyd3JpdGUsIG9uIHVwbG9hZCAqLwotICBiaXQgZnRwX2xpc3Rfb25seToxOyAgICAvKiBzd2l0Y2ggRlRQIGNvbW1hbmQgZm9yIGxpc3RpbmcgZGlyZWN0b3JpZXMgKi8KKyAgQklUKGdldF9maWxldGltZSk7ICAgICAvKiBnZXQgdGhlIHRpbWUgYW5kIGdldCBvZiB0aGUgcmVtb3RlIGZpbGUgKi8KKyAgQklUKHR1bm5lbF90aHJ1X2h0dHBwcm94eSk7IC8qIHVzZSBDT05ORUNUIHRocm91Z2ggYSBIVFRQIHByb3h5ICovCisgIEJJVChwcmVmZXJfYXNjaWkpOyAgICAgLyogQVNDSUkgcmF0aGVyIHRoYW4gYmluYXJ5ICovCisgIEJJVChmdHBfYXBwZW5kKTsgICAgICAgLyogYXBwZW5kLCBub3Qgb3ZlcndyaXRlLCBvbiB1cGxvYWQgKi8KKyAgQklUKGZ0cF9saXN0X29ubHkpOyAgICAvKiBzd2l0Y2ggRlRQIGNvbW1hbmQgZm9yIGxpc3RpbmcgZGlyZWN0b3JpZXMgKi8KICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAotICBiaXQgZnRwX3VzZV9wb3J0OjE7ICAgICAvKiB1c2UgdGhlIEZUUCBQT1JUIGNvbW1hbmQgKi8KLSAgYml0IGZ0cF91c2VfZXBzdjoxOyAgIC8qIGlmIEVQU1YgaXMgdG8gYmUgYXR0ZW1wdGVkIG9yIG5vdCAqLwotICBiaXQgZnRwX3VzZV9lcHJ0OjE7ICAgLyogaWYgRVBSVCBpcyB0byBiZSBhdHRlbXB0ZWQgb3Igbm90ICovCi0gIGJpdCBmdHBfdXNlX3ByZXQ6MTsgICAvKiBpZiBQUkVUIGlzIHRvIGJlIHVzZWQgYmVmb3JlIFBBU1Ygb3Igbm90ICovCi0gIGJpdCBmdHBfc2tpcF9pcDoxOyAgICAvKiBza2lwIHRoZSBJUCBhZGRyZXNzIHRoZSBGVFAgc2VydmVyIHBhc3NlcyBvbiB0bworICBCSVQoZnRwX3VzZV9wb3J0KTsgICAgIC8qIHVzZSB0aGUgRlRQIFBPUlQgY29tbWFuZCAqLworICBCSVQoZnRwX3VzZV9lcHN2KTsgICAgIC8qIGlmIEVQU1YgaXMgdG8gYmUgYXR0ZW1wdGVkIG9yIG5vdCAqLworICBCSVQoZnRwX3VzZV9lcHJ0KTsgICAgIC8qIGlmIEVQUlQgaXMgdG8gYmUgYXR0ZW1wdGVkIG9yIG5vdCAqLworICBCSVQoZnRwX3VzZV9wcmV0KTsgICAgIC8qIGlmIFBSRVQgaXMgdG8gYmUgdXNlZCBiZWZvcmUgUEFTViBvciBub3QgKi8KKyAgQklUKGZ0cF9za2lwX2lwKTsgICAgICAvKiBza2lwIHRoZSBJUCBhZGRyZXNzIHRoZSBGVFAgc2VydmVyIHBhc3NlcyBvbiB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzICovCiAjZW5kaWYKLSAgYml0IGhpZGVfcHJvZ3Jlc3M6MTsgICAgLyogZG9uJ3QgdXNlIHRoZSBwcm9ncmVzcyBtZXRlciAqLwotICBiaXQgaHR0cF9mYWlsX29uX2Vycm9yOjE7ICAvKiBmYWlsIG9uIEhUVFAgZXJyb3IgY29kZXMgPj0gNDAwICovCi0gIGJpdCBodHRwX2tlZXBfc2VuZGluZ19vbl9lcnJvcjoxOyAvKiBmb3IgSFRUUCBzdGF0dXMgY29kZXMgPj0gMzAwICovCi0gIGJpdCBodHRwX2ZvbGxvd19sb2NhdGlvbjoxOyAvKiBmb2xsb3cgSFRUUCByZWRpcmVjdHMgKi8KLSAgYml0IGh0dHBfdHJhbnNmZXJfZW5jb2Rpbmc6MTsgLyogcmVxdWVzdCBjb21wcmVzc2VkIEhUVFAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyLWVuY29kaW5nICovCi0gIGJpdCBhbGxvd19hdXRoX3RvX290aGVyX2hvc3RzOjE7Ci0gIGJpdCBpbmNsdWRlX2hlYWRlcjoxOyAvKiBpbmNsdWRlIHJlY2VpdmVkIHByb3RvY29sIGhlYWRlcnMgaW4gZGF0YSBvdXRwdXQgKi8KLSAgYml0IGh0dHBfc2V0X3JlZmVyZXI6MTsgLyogaXMgYSBjdXN0b20gcmVmZXJlciB1c2VkICovCi0gIGJpdCBodHRwX2F1dG9fcmVmZXJlcjoxOyAvKiBzZXQgImNvcnJlY3QiIHJlZmVyZXIgd2hlbiBmb2xsb3dpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogKi8KLSAgYml0IG9wdF9ub19ib2R5OjE7ICAgIC8qIGFzIHNldCB3aXRoIENVUkxPUFRfTk9CT0RZICovCi0gIGJpdCB1cGxvYWQ6MTsgICAgICAgICAvKiB1cGxvYWQgcmVxdWVzdCAqLwotICBiaXQgdmVyYm9zZToxOyAgICAgICAgLyogb3V0cHV0IHZlcmJvc2l0eSAqLwotICBiaXQga3JiOjE7ICAgICAgICAgICAgLyogS2VyYmVyb3MgY29ubmVjdGlvbiByZXF1ZXN0ZWQgKi8KLSAgYml0IHJldXNlX2ZvcmJpZDoxOyAgIC8qIGZvcmJpZGRlbiB0byBiZSByZXVzZWQsIGNsb3NlIGFmdGVyIHVzZSAqLwotICBiaXQgcmV1c2VfZnJlc2g6MTsgICAgLyogZG8gbm90IHJlLXVzZSBhbiBleGlzdGluZyBjb25uZWN0aW9uICAqLwotCi0gIGJpdCBub19zaWduYWw6MTsgICAgICAvKiBkbyBub3QgdXNlIGFueSBzaWduYWwvYWxhcm0gaGFuZGxlciAqLwotICBiaXQgdGNwX25vZGVsYXk6MTsgICAgLyogd2hldGhlciB0byBlbmFibGUgVENQX05PREVMQVkgb3Igbm90ICovCi0gIGJpdCBpZ25vcmVjbDoxOyAgICAgICAvKiBpZ25vcmUgY29udGVudCBsZW5ndGggKi8KLSAgYml0IGNvbm5lY3Rfb25seToxOyAgIC8qIG1ha2UgY29ubmVjdGlvbiwgbGV0IGFwcGxpY2F0aW9uIHVzZSB0aGUgc29ja2V0ICovCi0gIGJpdCBodHRwX3RlX3NraXA6MTsgICAvKiBwYXNzIHRoZSByYXcgYm9keSBkYXRhIHRvIHRoZSB1c2VyLCBldmVuIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zlci1lbmNvZGVkIChjaHVua2VkLCBjb21wcmVzc2VkKSAqLwotICBiaXQgaHR0cF9jZV9za2lwOjE7ICAgLyogcGFzcyB0aGUgcmF3IGJvZHkgZGF0YSB0byB0aGUgdXNlciwgZXZlbiB3aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC1lbmNvZGVkIChjaHVua2VkLCBjb21wcmVzc2VkKSAqLwotICBiaXQgcHJveHlfdHJhbnNmZXJfbW9kZToxOyAvKiBzZXQgdHJhbnNmZXIgbW9kZSAoO3R5cGU9PGF8aT4pIHdoZW4gZG9pbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUUCB2aWEgYW4gSFRUUCBwcm94eSAqLworICBCSVQoaGlkZV9wcm9ncmVzcyk7ICAgIC8qIGRvbid0IHVzZSB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KKyAgQklUKGh0dHBfZmFpbF9vbl9lcnJvcik7ICAvKiBmYWlsIG9uIEhUVFAgZXJyb3IgY29kZXMgPj0gNDAwICovCisgIEJJVChodHRwX2tlZXBfc2VuZGluZ19vbl9lcnJvcik7IC8qIGZvciBIVFRQIHN0YXR1cyBjb2RlcyA+PSAzMDAgKi8KKyAgQklUKGh0dHBfZm9sbG93X2xvY2F0aW9uKTsgLyogZm9sbG93IEhUVFAgcmVkaXJlY3RzICovCisgIEJJVChodHRwX3RyYW5zZmVyX2VuY29kaW5nKTsgLyogcmVxdWVzdCBjb21wcmVzc2VkIEhUVFAgdHJhbnNmZXItZW5jb2RpbmcgKi8KKyAgQklUKGFsbG93X2F1dGhfdG9fb3RoZXJfaG9zdHMpOworICBCSVQoaW5jbHVkZV9oZWFkZXIpOyAvKiBpbmNsdWRlIHJlY2VpdmVkIHByb3RvY29sIGhlYWRlcnMgaW4gZGF0YSBvdXRwdXQgKi8KKyAgQklUKGh0dHBfc2V0X3JlZmVyZXIpOyAvKiBpcyBhIGN1c3RvbSByZWZlcmVyIHVzZWQgKi8KKyAgQklUKGh0dHBfYXV0b19yZWZlcmVyKTsgLyogc2V0ICJjb3JyZWN0IiByZWZlcmVyIHdoZW4gZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAqLworICBCSVQob3B0X25vX2JvZHkpOyAgICAvKiBhcyBzZXQgd2l0aCBDVVJMT1BUX05PQk9EWSAqLworICBCSVQodXBsb2FkKTsgICAgICAgICAvKiB1cGxvYWQgcmVxdWVzdCAqLworICBCSVQodmVyYm9zZSk7ICAgICAgICAvKiBvdXRwdXQgdmVyYm9zaXR5ICovCisgIEJJVChrcmIpOyAgICAgICAgICAgIC8qIEtlcmJlcm9zIGNvbm5lY3Rpb24gcmVxdWVzdGVkICovCisgIEJJVChyZXVzZV9mb3JiaWQpOyAgIC8qIGZvcmJpZGRlbiB0byBiZSByZXVzZWQsIGNsb3NlIGFmdGVyIHVzZSAqLworICBCSVQocmV1c2VfZnJlc2gpOyAgICAvKiBkbyBub3QgcmUtdXNlIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gICovCisgIEJJVChub19zaWduYWwpOyAgICAgIC8qIGRvIG5vdCB1c2UgYW55IHNpZ25hbC9hbGFybSBoYW5kbGVyICovCisgIEJJVCh0Y3Bfbm9kZWxheSk7ICAgIC8qIHdoZXRoZXIgdG8gZW5hYmxlIFRDUF9OT0RFTEFZIG9yIG5vdCAqLworICBCSVQoaWdub3JlY2wpOyAgICAgICAvKiBpZ25vcmUgY29udGVudCBsZW5ndGggKi8KKyAgQklUKGNvbm5lY3Rfb25seSk7ICAgLyogbWFrZSBjb25uZWN0aW9uLCBsZXQgYXBwbGljYXRpb24gdXNlIHRoZSBzb2NrZXQgKi8KKyAgQklUKGh0dHBfdGVfc2tpcCk7ICAgLyogcGFzcyB0aGUgcmF3IGJvZHkgZGF0YSB0byB0aGUgdXNlciwgZXZlbiB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyLWVuY29kZWQgKGNodW5rZWQsIGNvbXByZXNzZWQpICovCisgIEJJVChodHRwX2NlX3NraXApOyAgIC8qIHBhc3MgdGhlIHJhdyBib2R5IGRhdGEgdG8gdGhlIHVzZXIsIGV2ZW4gd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LWVuY29kZWQgKGNodW5rZWQsIGNvbXByZXNzZWQpICovCisgIEJJVChwcm94eV90cmFuc2Zlcl9tb2RlKTsgLyogc2V0IHRyYW5zZmVyIG1vZGUgKDt0eXBlPTxhfGk+KSB3aGVuIGRvaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRQIHZpYSBhbiBIVFRQIHByb3h5ICovCiAjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQotICBiaXQgc29ja3M1X2dzc2FwaV9uZWM6MTsgLyogRmxhZyB0byBzdXBwb3J0IE5FQyBTT0NLUzUgc2VydmVyICovCisgIEJJVChzb2NrczVfZ3NzYXBpX25lYyk7IC8qIEZsYWcgdG8gc3VwcG9ydCBORUMgU09DS1M1IHNlcnZlciAqLwogI2VuZGlmCi0gIGJpdCBzYXNsX2lyOjE7ICAgICAgICAgLyogRW5hYmxlL2Rpc2FibGUgU0FTTCBpbml0aWFsIHJlc3BvbnNlICovCi0gIGJpdCB3aWxkY2FyZF9lbmFibGVkOjE7IC8qIGVuYWJsZSB3aWxkY2FyZCBtYXRjaGluZyAqLwotICBiaXQgdGNwX2tlZXBhbGl2ZToxOyAgLyogdXNlIFRDUCBrZWVwYWxpdmVzICovCi0gIGJpdCB0Y3BfZmFzdG9wZW46MTsgICAvKiB1c2UgVENQIEZhc3QgT3BlbiAqLwotICBiaXQgc3NsX2VuYWJsZV9ucG46MTsgLyogVExTIE5QTiBleHRlbnNpb24/ICovCi0gIGJpdCBzc2xfZW5hYmxlX2FscG46MTsvKiBUTFMgQUxQTiBleHRlbnNpb24/ICovCi0gIGJpdCBwYXRoX2FzX2lzOjE7ICAgICAvKiBhbGxvdyBkb3Rkb3RzPyAqLwotICBiaXQgcGlwZXdhaXQ6MTsgICAgICAgLyogd2FpdCBmb3IgbXVsdGlwbGV4IHN0YXR1cyBiZWZvcmUgc3RhcnRpbmcgYSBuZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gKi8KLSAgYml0IHN1cHByZXNzX2Nvbm5lY3RfaGVhZGVyczoxOyAvKiBzdXBwcmVzcyBwcm94eSBDT05ORUNUIHJlc3BvbnNlIGhlYWRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB1c2VyIGNhbGxiYWNrcyAqLwotICBiaXQgZG5zX3NodWZmbGVfYWRkcmVzc2VzOjE7IC8qIHdoZXRoZXIgdG8gc2h1ZmZsZSBhZGRyZXNzZXMgYmVmb3JlIHVzZSAqLwotICBiaXQgc3RyZWFtX2RlcGVuZHNfZToxOyAvKiBzZXQgb3IgZG9uJ3Qgc2V0IHRoZSBFeGNsdXNpdmUgYml0ICovCi0gIGJpdCBoYXByb3h5cHJvdG9jb2w6MTsgLyogd2hldGhlciB0byBzZW5kIEhBUHJveHkgUFJPWFkgcHJvdG9jb2wgdjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyICovCi0gIGJpdCBhYnN0cmFjdF91bml4X3NvY2tldDoxOwotICBiaXQgZGlzYWxsb3dfdXNlcm5hbWVfaW5fdXJsOjE7IC8qIGRpc2FsbG93IHVzZXJuYW1lIGluIHVybCAqLwotICBiaXQgZG9oOjE7IC8qIEROUy1vdmVyLUhUVFBTIGVuYWJsZWQgKi8KLSAgYml0IGRvaF9nZXQ6MTsgLyogdXNlIEdFVCBmb3IgRG9IIHJlcXVlc3RzLCBpbnN0ZWFkIG9mIFBPU1QgKi8KLSAgYml0IGh0dHAwOV9hbGxvd2VkOjE7IC8qIGFsbG93IEhUVFAvMC45IHJlc3BvbnNlcyAqLworICBCSVQoc2FzbF9pcik7ICAgICAgICAgLyogRW5hYmxlL2Rpc2FibGUgU0FTTCBpbml0aWFsIHJlc3BvbnNlICovCisgIEJJVCh3aWxkY2FyZF9lbmFibGVkKTsgLyogZW5hYmxlIHdpbGRjYXJkIG1hdGNoaW5nICovCisgIEJJVCh0Y3Bfa2VlcGFsaXZlKTsgIC8qIHVzZSBUQ1Aga2VlcGFsaXZlcyAqLworICBCSVQodGNwX2Zhc3RvcGVuKTsgICAvKiB1c2UgVENQIEZhc3QgT3BlbiAqLworICBCSVQoc3NsX2VuYWJsZV9ucG4pOyAvKiBUTFMgTlBOIGV4dGVuc2lvbj8gKi8KKyAgQklUKHNzbF9lbmFibGVfYWxwbik7LyogVExTIEFMUE4gZXh0ZW5zaW9uPyAqLworICBCSVQocGF0aF9hc19pcyk7ICAgICAvKiBhbGxvdyBkb3Rkb3RzPyAqLworICBCSVQocGlwZXdhaXQpOyAgICAgICAvKiB3YWl0IGZvciBtdWx0aXBsZXggc3RhdHVzIGJlZm9yZSBzdGFydGluZyBhIG5ldworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uICovCisgIEJJVChzdXBwcmVzc19jb25uZWN0X2hlYWRlcnMpOyAvKiBzdXBwcmVzcyBwcm94eSBDT05ORUNUIHJlc3BvbnNlIGhlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdXNlciBjYWxsYmFja3MgKi8KKyAgQklUKGRuc19zaHVmZmxlX2FkZHJlc3Nlcyk7IC8qIHdoZXRoZXIgdG8gc2h1ZmZsZSBhZGRyZXNzZXMgYmVmb3JlIHVzZSAqLworICBCSVQoc3RyZWFtX2RlcGVuZHNfZSk7IC8qIHNldCBvciBkb24ndCBzZXQgdGhlIEV4Y2x1c2l2ZSBiaXQgKi8KKyAgQklUKGhhcHJveHlwcm90b2NvbCk7IC8qIHdoZXRoZXIgdG8gc2VuZCBIQVByb3h5IFBST1hZIHByb3RvY29sIHYxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgKi8KKyAgQklUKGFic3RyYWN0X3VuaXhfc29ja2V0KTsKKyAgQklUKGRpc2FsbG93X3VzZXJuYW1lX2luX3VybCk7IC8qIGRpc2FsbG93IHVzZXJuYW1lIGluIHVybCAqLworICBCSVQoZG9oKTsgLyogRE5TLW92ZXItSFRUUFMgZW5hYmxlZCAqLworICBCSVQoZG9oX2dldCk7IC8qIHVzZSBHRVQgZm9yIERvSCByZXF1ZXN0cywgaW5zdGVhZCBvZiBQT1NUICovCisgIEJJVChodHRwMDlfYWxsb3dlZCk7IC8qIGFsbG93IEhUVFAvMC45IHJlc3BvbnNlcyAqLworICBCSVQobWFpbF9yY3B0X2FsbG93ZmFpbHMpOyAvKiBhbGxvdyBSQ1BUIFRPIGNvbW1hbmQgdG8gZmFpbCBmb3Igc29tZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGllbnRzICovCiB9OwogCiBzdHJ1Y3QgTmFtZXMgewpAQCAtMTc3Nyw3ICsxODY0LDYgQEAKIAogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47CiAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgY29ubmVjdF9xdWV1ZTsKLSAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCBzaF9xdWV1ZTsgLyogbGlzdCBwZXIgQ3VybF9zaF9lbnRyeSAqLwogICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50IGNvbm5fcXVldWU7IC8qIGxpc3QgcGVyIGNvbm5lY3RkYXRhICovCiAKICAgQ1VSTE1zdGF0ZSBtc3RhdGU7ICAvKiB0aGUgaGFuZGxlJ3Mgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2NsZWFydGV4dC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY2xlYXJ0ZXh0LmMKaW5kZXggNmY0NTJjMS4uM2E1Yzk0MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY2xlYXJ0ZXh0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY2xlYXJ0ZXh0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTgxLDcgKzgxLDggQEAKICAgcGxlbiA9IHN0cmxlbihwYXNzd2QpOwogCiAgIC8qIENvbXB1dGUgYmluYXJ5IG1lc3NhZ2UgbGVuZ3RoLiBDaGVjayBmb3Igb3ZlcmZsb3dzLiAqLwotICBpZigoKHpsZW4gKyBjbGVuKSA+IFNJWkVfVF9NQVgvNCkgfHwgKHBsZW4gPiAoU0laRV9UX01BWC8yIC0gMikpKQorICBpZigoemxlbiA+IFNJWkVfVF9NQVgvNCkgfHwgKGNsZW4gPiBTSVpFX1RfTUFYLzQpIHx8CisgICAgIChwbGVuID4gKFNJWkVfVF9NQVgvMiAtIDIpKSkKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgcGxhaW5sZW4gPSB6bGVuICsgY2xlbiArIHBsZW4gKyAyOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9jcmFtLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9jcmFtLmMKaW5kZXggZDE0ODYxOC4uNzE3ZDdmMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvY3JhbS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2NyYW0uYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtOTYsNyArOTYsNyBAQAogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc2l6ZV90IGNobGdsZW4gPSAwOwotICBITUFDX2NvbnRleHQgKmN0eHQ7CisgIHN0cnVjdCBITUFDX2NvbnRleHQgKmN0eHQ7CiAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W01ENV9ESUdFU1RfTEVOXTsKICAgY2hhciAqcmVzcG9uc2U7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2RpZ2VzdC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmMKaW5kZXggZjljZGM5ZC4uYjkyMTBhOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTYyLDcgKzYyLDcgQEAKICAgIHdoYXQgdWx0aW1hdGVseSBnb2VzIG92ZXIgdGhlIG5ldHdvcmsuCiAqLwogI2RlZmluZSBDVVJMX09VVFBVVF9ESUdFU1RfQ09OVihhLCBiKSBcCi0gIHJlc3VsdCA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGEsIChjaGFyICopYiwgc3RybGVuKChjb25zdCBjaGFyICopYikpOyBcCisgIHJlc3VsdCA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGEsIGIsIHN0cmxlbihiKSk7IFwKICAgaWYocmVzdWx0KSB7IFwKICAgICBmcmVlKGIpOyBcCiAgICAgcmV0dXJuIHJlc3VsdDsgXApAQCAtMzU3LDkgKzM1Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm91dHB0ciwgc2l6ZV90ICpvdXRsZW4pCiB7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzaXplX3QgaTsKLSAgTUQ1X2NvbnRleHQgKmN0eHQ7CisgIHN0cnVjdCBNRDVfY29udGV4dCAqY3R4dDsKICAgY2hhciAqcmVzcG9uc2UgPSBOVUxMOwogICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtNRDVfRElHRVNUX0xFTl07CiAgIGNoYXIgSEExX2hleFsyICogTUQ1X0RJR0VTVF9MRU4gKyAxXTsKQEAgLTM3NywxMCArMzc2LDEyIEBACiAgIGNoYXIgKnNwbiAgICAgICAgID0gTlVMTDsKIAogICAvKiBEZWNvZGUgdGhlIGNoYWxsZW5nZSBtZXNzYWdlICovCi0gIHJlc3VsdCA9IGF1dGhfZGVjb2RlX2RpZ2VzdF9tZDVfbWVzc2FnZShjaGxnNjQsIG5vbmNlLCBzaXplb2Yobm9uY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIHNpemVvZihyZWFsbSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG0sIHNpemVvZihhbGdvcml0aG0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcW9wX29wdGlvbnMsIHNpemVvZihxb3Bfb3B0aW9ucykpOworICBDVVJMY29kZSByZXN1bHQgPSBhdXRoX2RlY29kZV9kaWdlc3RfbWQ1X21lc3NhZ2UoY2hsZzY0LCBub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihub25jZSksIHJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlYWxtKSwgYWxnb3JpdGhtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFsZ29yaXRobSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxb3Bfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihxb3Bfb3B0aW9ucykpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtNjU5LDcgKzY2MCw3IEBACiB9CiAKIC8qCi0gKiBfQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfaHR0cF9tZXNzYWdlKCkKKyAqIGF1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoKQogICoKICAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIEhUVFAgRElHRVNUIHJlc3BvbnNlIG1lc3NhZ2UgcmVhZHkgZm9yIHNlbmRpbmcKICAqIHRvIHRoZSByZWNpcGllbnQuCkBAIC02NzgsNyArNjc5LDcgQEAKICAqCiAgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBDVVJMY29kZSBfQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfaHR0cF9tZXNzYWdlKAorc3RhdGljIENVUkxjb2RlIGF1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNlcnAsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXNzd2RwLApAQCAtNjg3LDEyICs2ODgsMTIgQEAKICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaWdlc3RkYXRhICpkaWdlc3QsCiAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHRyLCBzaXplX3QgKm91dGxlbiwKICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjb252ZXJ0X3RvX2FzY2lpKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiksCi0gICAgICAgICAgICAgICAgICB2b2lkICgqaGFzaCkodW5zaWduZWQgY2hhciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICopKQorICAgICAgICAgICAgICAgICAgdm9pZCAoKmhhc2gpKHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCkpCiB7CiAgIENVUkxjb2RlIHJlc3VsdDsKICAgdW5zaWduZWQgY2hhciBoYXNoYnVmWzMyXTsgLyogMzIgYnl0ZXMvMjU2IGJpdHMgKi8KICAgdW5zaWduZWQgY2hhciByZXF1ZXN0X2RpZ2VzdFs2NV07Ci0gIHVuc2lnbmVkIGNoYXIgKmhhc2h0aGlzOwogICB1bnNpZ25lZCBjaGFyIGhhMVs2NV07ICAgIC8qIDY0IGRpZ2l0cyBhbmQgMSB6ZXJvIGJ5dGUgKi8KICAgdW5zaWduZWQgY2hhciBoYTJbNjVdOyAgICAvKiA2NCBkaWdpdHMgYW5kIDEgemVybyBieXRlICovCiAgIGNoYXIgdXNlcmhbNjVdOwpAQCAtNzAwLDYgKzcwMSw3IEBACiAgIHNpemVfdCBjbm9uY2Vfc3ogPSAwOwogICBjaGFyICp1c2VycF9xdW90ZWQ7CiAgIGNoYXIgKnJlc3BvbnNlID0gTlVMTDsKKyAgY2hhciAqaGFzaHRoaXMgPSBOVUxMOwogICBjaGFyICp0bXAgPSBOVUxMOwogCiAgIGlmKCFkaWdlc3QtPm5jKQpAQCAtNzIxLDEyICs3MjMsMTIgQEAKICAgfQogCiAgIGlmKGRpZ2VzdC0+dXNlcmhhc2gpIHsKLSAgICBoYXNodGhpcyA9ICh1bnNpZ25lZCBjaGFyICopIGFwcmludGYoIiVzOiVzIiwgdXNlcnAsIGRpZ2VzdC0+cmVhbG0pOworICAgIGhhc2h0aGlzID0gYXByaW50ZigiJXM6JXMiLCB1c2VycCwgZGlnZXN0LT5yZWFsbSk7CiAgICAgaWYoIWhhc2h0aGlzKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgICBDVVJMX09VVFBVVF9ESUdFU1RfQ09OVihkYXRhLCBoYXNodGhpcyk7Ci0gICAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgICAgaGFzaChoYXNoYnVmLCAodW5zaWduZWQgY2hhciAqKSBoYXNodGhpcywgc3RybGVuKGhhc2h0aGlzKSk7CiAgICAgZnJlZShoYXNodGhpcyk7CiAgICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCAodW5zaWduZWQgY2hhciAqKXVzZXJoKTsKICAgfQpAQCAtNzQyLDE0ICs3NDQsMTMgQEAKICAgICAgICAgICAgdW5xKG5vbmNlLXZhbHVlKSAiOiIgdW5xKGNub25jZS12YWx1ZSkKICAgKi8KIAotICBoYXNodGhpcyA9ICh1bnNpZ25lZCBjaGFyICopCi0gICAgYXByaW50ZigiJXM6JXM6JXMiLCBkaWdlc3QtPnVzZXJoYXNoID8gdXNlcmggOiB1c2VycCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+cmVhbG0sIHBhc3N3ZHApOworICBoYXNodGhpcyA9IGFwcmludGYoIiVzOiVzOiVzIiwgZGlnZXN0LT51c2VyaGFzaCA/IHVzZXJoIDogdXNlcnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPnJlYWxtLCBwYXNzd2RwKTsKICAgaWYoIWhhc2h0aGlzKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIGhhc2h0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgIGhhc2goaGFzaGJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgaGFzaHRoaXMsIHN0cmxlbihoYXNodGhpcykpOwogICBmcmVlKGhhc2h0aGlzKTsKICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCBoYTEpOwogCkBAIC03NjIsNyArNzYzLDcgQEAKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgICAgQ1VSTF9PVVRQVVRfRElHRVNUX0NPTlYoZGF0YSwgdG1wKTsgLyogQ29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgICBoYXNoKGhhc2hidWYsICh1bnNpZ25lZCBjaGFyICopIHRtcCk7CisgICAgaGFzaChoYXNoYnVmLCAodW5zaWduZWQgY2hhciAqKSB0bXAsIHN0cmxlbih0bXApKTsKICAgICBmcmVlKHRtcCk7CiAgICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCBoYTEpOwogICB9CkBAIC03ODAsMTkgKzc4MSwxOSBAQAogICAgIDUuMS4xIG9mIFJGQyAyNjE2KQogICAqLwogCi0gIGhhc2h0aGlzID0gKHVuc2lnbmVkIGNoYXIgKikgYXByaW50ZigiJXM6JXMiLCByZXF1ZXN0LCB1cmlwYXRoKTsKKyAgaGFzaHRoaXMgPSBhcHJpbnRmKCIlczolcyIsIHJlcXVlc3QsIHVyaXBhdGgpOwogICBpZighaGFzaHRoaXMpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgaWYoZGlnZXN0LT5xb3AgJiYgc3RyY2FzZWNvbXBhcmUoZGlnZXN0LT5xb3AsICJhdXRoLWludCIpKSB7CiAgICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBhdXRoLWludCBmb3IgUFVUIG9yIFBPU1QgKi8KICAgICBjaGFyIGhhc2hlZFs2NV07Ci0gICAgdW5zaWduZWQgY2hhciAqaGFzaHRoaXMyOworICAgIGNoYXIgKmhhc2h0aGlzMjsKIAotICAgIGhhc2goaGFzaGJ1ZiwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikiIik7CisgICAgaGFzaChoYXNoYnVmLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSIiLCAwKTsKICAgICBjb252ZXJ0X3RvX2FzY2lpKGhhc2hidWYsICh1bnNpZ25lZCBjaGFyICopaGFzaGVkKTsKIAotICAgIGhhc2h0aGlzMiA9ICh1bnNpZ25lZCBjaGFyICopYXByaW50ZigiJXM6JXMiLCBoYXNodGhpcywgaGFzaGVkKTsKKyAgICBoYXNodGhpczIgPSBhcHJpbnRmKCIlczolcyIsIGhhc2h0aGlzLCBoYXNoZWQpOwogICAgIGZyZWUoaGFzaHRoaXMpOwogICAgIGhhc2h0aGlzID0gaGFzaHRoaXMyOwogICB9CkBAIC04MDEsMzEgKzgwMiwyMyBAQAogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIGhhc2h0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgIGhhc2goaGFzaGJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgaGFzaHRoaXMsIHN0cmxlbihoYXNodGhpcykpOwogICBmcmVlKGhhc2h0aGlzKTsKICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCBoYTIpOwogCiAgIGlmKGRpZ2VzdC0+cW9wKSB7Ci0gICAgaGFzaHRoaXMgPSAodW5zaWduZWQgY2hhciAqKSBhcHJpbnRmKCIlczolczolMDh4OiVzOiVzOiVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0LT5ub25jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPm5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+Y25vbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+cW9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhMik7CisgICAgaGFzaHRoaXMgPSBhcHJpbnRmKCIlczolczolMDh4OiVzOiVzOiVzIiwgaGExLCBkaWdlc3QtPm5vbmNlLCBkaWdlc3QtPm5jLAorICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPmNub25jZSwgZGlnZXN0LT5xb3AsIGhhMik7CiAgIH0KICAgZWxzZSB7Ci0gICAgaGFzaHRoaXMgPSAodW5zaWduZWQgY2hhciAqKSBhcHJpbnRmKCIlczolczolcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC0+bm9uY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGEyKTsKKyAgICBoYXNodGhpcyA9IGFwcmludGYoIiVzOiVzOiVzIiwgaGExLCBkaWdlc3QtPm5vbmNlLCBoYTIpOwogICB9CiAKICAgaWYoIWhhc2h0aGlzKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIGhhc2h0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KLSAgaGFzaChoYXNoYnVmLCBoYXNodGhpcyk7CisgIGhhc2goaGFzaGJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgaGFzaHRoaXMsIHN0cmxlbihoYXNodGhpcykpOwogICBmcmVlKGhhc2h0aGlzKTsKICAgY29udmVydF90b19hc2NpaShoYXNoYnVmLCByZXF1ZXN0X2RpZ2VzdCk7CiAKQEAgLTg5OCw3ICs4OTEsNyBAQAogCiAgIGlmKGRpZ2VzdC0+YWxnb3JpdGhtKSB7CiAgICAgLyogQXBwZW5kIHRoZSBhbGdvcml0aG0gKi8KLSAgICB0bXAgPSBhcHJpbnRmKCIlcywgYWxnb3JpdGhtPVwiJXNcIiIsIHJlc3BvbnNlLCBkaWdlc3QtPmFsZ29yaXRobSk7CisgICAgdG1wID0gYXByaW50ZigiJXMsIGFsZ29yaXRobT0lcyIsIHJlc3BvbnNlLCBkaWdlc3QtPmFsZ29yaXRobSk7CiAgICAgZnJlZShyZXNwb25zZSk7CiAgICAgaWYoIXRtcCkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtOTU0LDIxICs5NDcsMjEgQEAKICAgc3dpdGNoKGRpZ2VzdC0+YWxnbykgewogICBjYXNlIENVUkxESUdFU1RBTEdPX01ENToKICAgY2FzZSBDVVJMRElHRVNUQUxHT19NRDVTRVNTOgotICAgIHJldHVybiBfQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfaHR0cF9tZXNzYWdlKGRhdGEsIHVzZXJwLCBwYXNzd2RwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsIHVyaXBhdGgsIGRpZ2VzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdHIsIG91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2RpZ2VzdF9tZDVfdG9fYXNjaWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9tZDVpdCk7CisgICAgcmV0dXJuIGF1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoZGF0YSwgdXNlcnAsIHBhc3N3ZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdXJpcGF0aCwgZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB0ciwgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZGlnZXN0X21kNV90b19hc2NpaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX21kNWl0KTsKIAogICBjYXNlIENVUkxESUdFU1RBTEdPX1NIQTI1NjoKICAgY2FzZSBDVVJMRElHRVNUQUxHT19TSEEyNTZTRVNTOgogICBjYXNlIENVUkxESUdFU1RBTEdPX1NIQTUxMl8yNTY6CiAgIGNhc2UgQ1VSTERJR0VTVEFMR09fU0hBNTEyXzI1NlNFU1M6Ci0gICAgcmV0dXJuIF9DdXJsX2F1dGhfY3JlYXRlX2RpZ2VzdF9odHRwX21lc3NhZ2UoZGF0YSwgdXNlcnAsIHBhc3N3ZHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdXJpcGF0aCwgZGlnZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB0ciwgb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZGlnZXN0X3NoYTI1Nl90b19hc2NpaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NoYTI1Nml0KTsKKyAgICByZXR1cm4gYXV0aF9jcmVhdGVfZGlnZXN0X2h0dHBfbWVzc2FnZShkYXRhLCB1c2VycCwgcGFzc3dkcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCB1cmlwYXRoLCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHRyLCBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9kaWdlc3Rfc2hhMjU2X3RvX2FzY2lpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2hhMjU2aXQpOwogCiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0LmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3QuaAppbmRleCA4Njg2YzQ0Li5jYzA1ZmRiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3QuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3QuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0X3NzcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2RpZ2VzdF9zc3BpLmMKaW5kZXggZmU4MDkzZS4uNDk5ODMwNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvZGlnZXN0X3NzcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9kaWdlc3Rfc3NwaS5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDE0IC0gMjAxNiwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNjEsNiArNjEsMTEgQEAKICAgc3RhdHVzID0gc19wU2VjRm4tPlF1ZXJ5U2VjdXJpdHlQYWNrYWdlSW5mbygoVENIQVIgKikgVEVYVChTUF9OQU1FX0RJR0VTVCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAKKyAgLyogUmVsZWFzZSB0aGUgcGFja2FnZSBidWZmZXIgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgKi8KKyAgaWYoc3RhdHVzID09IFNFQ19FX09LKSB7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKFNlY3VyaXR5UGFja2FnZSk7CisgIH0KKwogICByZXR1cm4gKHN0YXR1cyA9PSBTRUNfRV9PSyA/IFRSVUUgOiBGQUxTRSk7CiB9CiAKQEAgLTEyOSw3ICsxMzQsOCBAQAogICBpZihzdGF0dXMgIT0gU0VDX0VfT0spIHsKICAgICBmcmVlKGlucHV0X3Rva2VuKTsKIAotICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisgICAgZmFpbGYoZGF0YSwgIlNTUEk6IGNvdWxkbid0IGdldCBhdXRoIGluZm9cbiIpOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgdG9rZW5fbWF4ID0gU2VjdXJpdHlQYWNrYWdlLT5jYk1heFRva2VuOwpAQCAtMjIwLDcgKzIyNiwxMCBAQAogICAgIGZyZWUob3V0cHV0X3Rva2VuKTsKICAgICBmcmVlKGlucHV0X3Rva2VuKTsKIAotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlc3BvbnNlICovCkBAIC0yODAsMTMgKzI4OSwxMyBAQAogICAgICAgICBpZihzdHJjYXNlY29tcGFyZSh2YWx1ZSwgInJlYWxtIikpIHsKIAogICAgICAgICAgIC8qIFNldHVwIGlkZW50aXR5J3MgZG9tYWluIGFuZCBsZW5ndGggKi8KLSAgICAgICAgICBkb21haW4udGNoYXJfcHRyID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKikgY29udGVudCk7CisgICAgICAgICAgZG9tYWluLnRjaGFyX3B0ciA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKSBjb250ZW50KTsKICAgICAgICAgICBpZighZG9tYWluLnRjaGFyX3B0cikKICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCiAgICAgICAgICAgZHVwX2RvbWFpbi50Y2hhcl9wdHIgPSBfdGNzZHVwKGRvbWFpbi50Y2hhcl9wdHIpOwogICAgICAgICAgIGlmKCFkdXBfZG9tYWluLnRjaGFyX3B0cikgewotICAgICAgICAgICAgQ3VybF91bmljb2RlZnJlZShkb21haW4udGNoYXJfcHRyKTsKKyAgICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGRvbWFpbi50Y2hhcl9wdHIpOwogICAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgfQogCkBAIC0yOTUsNyArMzA0LDcgQEAKICAgICAgICAgICBpZGVudGl0eS0+RG9tYWluTGVuZ3RoID0gY3VybHhfdXp0b3VsKF90Y3NsZW4oZHVwX2RvbWFpbi50Y2hhcl9wdHIpKTsKICAgICAgICAgICBkdXBfZG9tYWluLnRjaGFyX3B0ciA9IE5VTEw7CiAKLSAgICAgICAgICBDdXJsX3VuaWNvZGVmcmVlKGRvbWFpbi50Y2hhcl9wdHIpOworICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGRvbWFpbi50Y2hhcl9wdHIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgIC8qIFVua25vd24gc3BlY2lmaWVyLCBpZ25vcmUgaXQhICovCkBAIC00MjMsOCArNDMyLDEwIEBACiAgIC8qIFF1ZXJ5IHRoZSBzZWN1cml0eSBwYWNrYWdlIGZvciBEaWdlc3RTU1AgKi8KICAgc3RhdHVzID0gc19wU2VjRm4tPlF1ZXJ5U2VjdXJpdHlQYWNrYWdlSW5mbygoVENIQVIgKikgVEVYVChTUF9OQU1FX0RJR0VTVCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7Ci0gIGlmKHN0YXR1cyAhPSBTRUNfRV9PSykKLSAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworICBpZihzdGF0dXMgIT0gU0VDX0VfT0spIHsKKyAgICBmYWlsZihkYXRhLCAiU1NQSTogY291bGRuJ3QgZ2V0IGF1dGggaW5mb1xuIik7CisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CisgIH0KIAogICB0b2tlbl9tYXggPSBTZWN1cml0eVBhY2thZ2UtPmNiTWF4VG9rZW47CiAKQEAgLTU3Miw3ICs1ODMsNyBAQAogICAgIHJlc3BfYnVmLnB2QnVmZmVyICAgPSBvdXRwdXRfdG9rZW47CiAgICAgcmVzcF9idWYuY2JCdWZmZXIgICA9IGN1cmx4X3V6dG91bCh0b2tlbl9tYXgpOwogCi0gICAgc3BuID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKikgdXJpcGF0aCk7CisgICAgc3BuID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKChjaGFyICopIHVyaXBhdGgpOwogICAgIGlmKCFzcG4pIHsKICAgICAgIHNfcFNlY0ZuLT5GcmVlQ3JlZGVudGlhbHNIYW5kbGUoJmNyZWRlbnRpYWxzKTsKIApAQCAtNTk0LDcgKzYwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNobGdfZGVzYywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QtPmh0dHBfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcF9kZXNjLCAmYXR0cnMsICZleHBpcnkpOwotICAgIEN1cmxfdW5pY29kZWZyZWUoc3BuKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShzcG4pOwogCiAgICAgaWYoc3RhdHVzID09IFNFQ19JX0NPTVBMRVRFX05FRURFRCB8fAogICAgICAgIHN0YXR1cyA9PSBTRUNfSV9DT01QTEVURV9BTkRfQ09OVElOVUUpCkBAIC02MDcsNyArNjE4LDEwIEBACiAKICAgICAgIEN1cmxfc2FmZWZyZWUoZGlnZXN0LT5odHRwX2NvbnRleHQpOwogCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgICAgfQogCiAgICAgb3V0cHV0X3Rva2VuX2xlbiA9IHJlc3BfYnVmLmNiQnVmZmVyOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgva3JiNV9nc3NhcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfZ3NzYXBpLmMKaW5kZXggZWEwYTVmMS4uOTViYWIwZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgva3JiNV9nc3NhcGkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9rcmI1X2dzc2FwaS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgICAgZnJlZShzcG4pOwogCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICAgIH0KIAogICAgIGZyZWUoc3BuKTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgIEN1cmxfZ3NzX2xvZ19lcnJvcihkYXRhLCAiZ3NzX2luaXRfc2VjX2NvbnRleHQoKSBmYWlsZWQ6ICIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1ham9yX3N0YXR1cywgbWlub3Jfc3RhdHVzKTsKIAotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgaWYob3V0cHV0X3Rva2VuLnZhbHVlICYmIG91dHB1dF90b2tlbi5sZW5ndGgpIHsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCiAgICAgZnJlZShjaGxnKTsKIAotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgLyogQ29udmVydCB0aGUgdXNlcm5hbWUgZnJvbSBpbnRlcm5hbCBmb3JtYXQgdG8gYSBkaXNwbGF5YWJsZSB0b2tlbiAqLwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKICAgICBmcmVlKGNobGcpOwogCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBTZXR1cCB0aGUgY2hhbGxlbmdlICJpbnB1dCIgc2VjdXJpdHkgYnVmZmVyICovCkBAIC0zNTUsNyArMzU1LDcgQEAKIAogICAgIGZyZWUobWVzc2FnZSk7CiAKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlc3BvbnNlICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9rcmI1X3NzcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCmluZGV4IDFmNmU0NjIuLjFmYjYyNTcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxNCAtIDIwMTksIFN0ZXZlIEhvbG1lLCA8c3RldmVfaG9sbWVAaG90bWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE0IC0gMjAyMCwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTU4LDYgKzU4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVChTUF9OQU1FX0tFUkJFUk9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU2VjdXJpdHlQYWNrYWdlKTsKIAorICAvKiBSZWxlYXNlIHRoZSBwYWNrYWdlIGJ1ZmZlciBhcyBpdCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZSAqLworICBpZihzdGF0dXMgPT0gU0VDX0VfT0spIHsKKyAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoU2VjdXJpdHlQYWNrYWdlKTsKKyAgfQorCiAgIHJldHVybiAoc3RhdHVzID09IFNFQ19FX09LID8gVFJVRSA6IEZBTFNFKTsKIH0KIApAQCAtMTIwLDcgKzEyNSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVhUKFNQX05BTUVfS0VSQkVST1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAgICAgaWYoc3RhdHVzICE9IFNFQ19FX09LKSB7Ci0gICAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworICAgICAgZmFpbGYoZGF0YSwgIlNTUEk6IGNvdWxkbid0IGdldCBhdXRoIGluZm9cbiIpOworICAgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgICAgfQogCiAgICAga3JiNS0+dG9rZW5fbWF4ID0gU2VjdXJpdHlQYWNrYWdlLT5jYk1heFRva2VuOwpAQCAtMjE3LDggKzIyMywxMiBAQAogICAvKiBGcmVlIHRoZSBkZWNvZGVkIGNoYWxsZW5nZSBhcyBpdCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZSAqLwogICBmcmVlKGNobGcpOwogCisgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKSB7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKwogICBpZihzdGF0dXMgIT0gU0VDX0VfT0sgJiYgc3RhdHVzICE9IFNFQ19JX0NPTlRJTlVFX05FRURFRCkgewotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgaWYobWVtY21wKCZjb250ZXh0LCBrcmI1LT5jb250ZXh0LCBzaXplb2YoY29udGV4dCkpKSB7CkBAIC0zMDksNyArMzE5LDEwIEBACiAgIGlmKHN0YXR1cyAhPSBTRUNfRV9PSykgewogICAgIGZyZWUoY2hsZyk7CiAKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBpZihzdGF0dXMgPT0gU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBHZXQgdGhlIGZ1bGx5IHF1YWxpZmllZCB1c2VybmFtZSBiYWNrIGZyb20gdGhlIGNvbnRleHQgKi8KQEAgLTMxOSw3ICszMzIsMTAgQEAKICAgaWYoc3RhdHVzICE9IFNFQ19FX09LKSB7CiAgICAgZnJlZShjaGxnKTsKIAotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIFNldHVwIHRoZSAiaW5wdXQiIHNlY3VyaXR5IGJ1ZmZlciAqLwpAQCAtMzgwLDcgKzM5Niw3IEBACiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgLyogQ29udmVydCB0aGUgdXNlciBuYW1lIHRvIFVURjggd2hlbiBvcGVyYXRpbmcgd2l0aCBVbmljb2RlICovCi0gIHVzZXJfbmFtZSA9IEN1cmxfY29udmVydF90Y2hhcl90b19VVEY4KG5hbWVzLnNVc2VyTmFtZSk7CisgIHVzZXJfbmFtZSA9IGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOChuYW1lcy5zVXNlck5hbWUpOwogICBpZighdXNlcl9uYW1lKSB7CiAgICAgZnJlZSh0cmFpbGVyKTsKIApAQCAtMzkyLDcgKzQwOCw3IEBACiAgIG1lc3NhZ2UgPSBtYWxsb2MobWVzc2FnZWxlbik7CiAgIGlmKCFtZXNzYWdlKSB7CiAgICAgZnJlZSh0cmFpbGVyKTsKLSAgICBDdXJsX3VuaWNvZGVmcmVlKHVzZXJfbmFtZSk7CisgICAgY3VybHhfdW5pY29kZWZyZWUodXNlcl9uYW1lKTsKIAogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CkBAIC00MDUsNyArNDIxLDcgQEAKICAgb3V0ZGF0YSA9IGh0b25sKG1heF9zaXplKSB8IHNlY19sYXllcjsKICAgbWVtY3B5KG1lc3NhZ2UsICZvdXRkYXRhLCBzaXplb2Yob3V0ZGF0YSkpOwogICBzdHJjcHkoKGNoYXIgKikgbWVzc2FnZSArIHNpemVvZihvdXRkYXRhKSwgdXNlcl9uYW1lKTsKLSAgQ3VybF91bmljb2RlZnJlZSh1c2VyX25hbWUpOworICBjdXJseF91bmljb2RlZnJlZSh1c2VyX25hbWUpOwogCiAgIC8qIEFsbG9jYXRlIHRoZSBwYWRkaW5nICovCiAgIHBhZGRpbmcgPSBtYWxsb2Moc2l6ZXMuY2JCbG9ja1NpemUpOwpAQCAtNDM4LDcgKzQ1NCwxMCBAQAogICAgIGZyZWUobWVzc2FnZSk7CiAgICAgZnJlZSh0cmFpbGVyKTsKIAotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIC8qIEFsbG9jYXRlIHRoZSBlbmNyeXB0aW9uICh3cmFwKSBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG0uYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG0uYwppbmRleCAwNDdjMmI1Li4zYjQ2ZTFhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9udGxtLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvbnRsbS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiY3VybF9udGxtX2NvcmUuaCIKICNpbmNsdWRlICJjdXJsX2dldGhvc3RuYW1lLmgiCiAjaW5jbHVkZSAiY3VybF9tdWx0aWJ5dGUuaCIKKyNpbmNsdWRlICJjdXJsX21kNS5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAicmFuZC5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgpAQCAtNTk5LDExICs2MDAsMTQgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChVU0VfTlRSRVNQT05TRVMpICYmIGRlZmluZWQoVVNFX05UTE0yU0VTU0lPTikKKworI2RlZmluZSBDVVJMX01ENV9ESUdFU1RfTEVOR1RIIDE2IC8qIGZpeGVkIHNpemUgKi8KKwogICAvKiBXZSBkb24ndCBzdXBwb3J0IE5UTE0yIGlmIHdlIGRvbid0IGhhdmUgVVNFX05UUkVTUE9OU0VTICovCiAgIGlmKG50bG0tPmZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX05UTE1fS0VZKSB7CiAgICAgdW5zaWduZWQgY2hhciBudGJ1ZmZlclsweDE4XTsKICAgICB1bnNpZ25lZCBjaGFyIHRtcFsweDE4XTsKLSAgICB1bnNpZ25lZCBjaGFyIG1kNXN1bVtNRDVfRElHRVNUX0xFTkdUSF07CisgICAgdW5zaWduZWQgY2hhciBtZDVzdW1bQ1VSTF9NRDVfRElHRVNUX0xFTkdUSF07CiAgICAgdW5zaWduZWQgY2hhciBlbnRyb3B5WzhdOwogCiAgICAgLyogTmVlZCB0byBjcmVhdGUgOCBieXRlcyByYW5kb20gZGF0YSAqLwpAQCAtNjIxLDExICs2MjUsMTEgQEAKICAgICBtZW1jcHkodG1wLCAmbnRsbS0+bm9uY2VbMF0sIDgpOwogICAgIG1lbWNweSh0bXAgKyA4LCBlbnRyb3B5LCA4KTsKIAotICAgIHJlc3VsdCA9IEN1cmxfc3NsX21kNXN1bSh0bXAsIDE2LCBtZDVzdW0sIE1ENV9ESUdFU1RfTEVOR1RIKTsKLSAgICBpZighcmVzdWx0KQotICAgICAgLyogV2Ugc2hhbGwgb25seSB1c2UgdGhlIGZpcnN0IDggYnl0ZXMgb2YgbWQ1c3VtLCBidXQgdGhlIGRlcyBjb2RlIGluCi0gICAgICAgICBDdXJsX250bG1fY29yZV9sbV9yZXNwIG9ubHkgZW5jcnlwdCB0aGUgZmlyc3QgOCBieXRlcyAqLwotICAgICAgcmVzdWx0ID0gQ3VybF9udGxtX2NvcmVfbWtfbnRfaGFzaChkYXRhLCBwYXNzd2RwLCBudGJ1ZmZlcik7CisgICAgQ3VybF9tZDVpdChtZDVzdW0sIHRtcCwgMTYpOworCisgICAgLyogV2Ugc2hhbGwgb25seSB1c2UgdGhlIGZpcnN0IDggYnl0ZXMgb2YgbWQ1c3VtLCBidXQgdGhlIGRlcyBjb2RlIGluCisgICAgICAgQ3VybF9udGxtX2NvcmVfbG1fcmVzcCBvbmx5IGVuY3J5cHQgdGhlIGZpcnN0IDggYnl0ZXMgKi8KKyAgICByZXN1bHQgPSBDdXJsX250bG1fY29yZV9ta19udF9oYXNoKGRhdGEsIHBhc3N3ZHAsIG50YnVmZmVyKTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9udGxtX3NzcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG1fc3NwaS5jCmluZGV4IDU4OWNjYTEuLjg0ZWE1MWQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG1fc3NwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL250bG1fc3NwaS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01Niw2ICs1NiwxMSBAQAogICBzdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlTZWN1cml0eVBhY2thZ2VJbmZvKChUQ0hBUiAqKSBURVhUKFNQX05BTUVfTlRMTSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAKKyAgLyogUmVsZWFzZSB0aGUgcGFja2FnZSBidWZmZXIgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgKi8KKyAgaWYoc3RhdHVzID09IFNFQ19FX09LKSB7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKFNlY3VyaXR5UGFja2FnZSk7CisgIH0KKwogICByZXR1cm4gKHN0YXR1cyA9PSBTRUNfRV9PSyA/IFRSVUUgOiBGQUxTRSk7CiB9CiAKQEAgLTEwMCw4ICsxMDUsMTAgQEAKICAgLyogUXVlcnkgdGhlIHNlY3VyaXR5IHBhY2thZ2UgZm9yIE5UTE0gKi8KICAgc3RhdHVzID0gc19wU2VjRm4tPlF1ZXJ5U2VjdXJpdHlQYWNrYWdlSW5mbygoVENIQVIgKikgVEVYVChTUF9OQU1FX05UTE0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTZWN1cml0eVBhY2thZ2UpOwotICBpZihzdGF0dXMgIT0gU0VDX0VfT0spCi0gICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKyAgaWYoc3RhdHVzICE9IFNFQ19FX09LKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTUEk6IGNvdWxkbid0IGdldCBhdXRoIGluZm9cbiIpOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOworICB9CiAKICAgbnRsbS0+dG9rZW5fbWF4ID0gU2VjdXJpdHlQYWNrYWdlLT5jYk1heFRva2VuOwogCkBAIC0xNjksOCArMTc2LDEwIEBACiAgIGlmKHN0YXR1cyA9PSBTRUNfSV9DT01QTEVURV9ORUVERUQgfHwKICAgICBzdGF0dXMgPT0gU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFKQogICAgIHNfcFNlY0ZuLT5Db21wbGV0ZUF1dGhUb2tlbihudGxtLT5jb250ZXh0LCAmdHlwZV8xX2Rlc2MpOworICBlbHNlIGlmKHN0YXR1cyA9PSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICBlbHNlIGlmKHN0YXR1cyAhPSBTRUNfRV9PSyAmJiBzdGF0dXMgIT0gU0VDX0lfQ09OVElOVUVfTkVFREVEKQotICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlc3BvbnNlICovCiAgIHJldHVybiBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwgKGNoYXIgKikgbnRsbS0+b3V0cHV0X3Rva2VuLApAQCAtMzE2LDcgKzMyNSwxMCBAQAogICAgIGluZm9mKGRhdGEsICJOVExNIGhhbmRzaGFrZSBmYWlsdXJlICh0eXBlLTMgbWVzc2FnZSk6IFN0YXR1cz0leFxuIiwKICAgICAgICAgICBzdGF0dXMpOwogCi0gICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgICAgaWYoc3RhdHVzID09IFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgLyogQmFzZTY0IGVuY29kZSB0aGUgcmVzcG9uc2UgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3NwbmVnb19nc3NhcGkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3NwbmVnb19nc3NhcGkuYwppbmRleCA1ZDQzZTExLi5lZDdjZTAyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9zcG5lZ29fZ3NzYXBpLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvc3BuZWdvX2dzc2FwaS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgICAgZnJlZShzcG4pOwogCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICAgIH0KIAogICAgIGZyZWUoc3BuKTsKQEAgLTE3MCwxNCArMTcwLDE0IEBACiAgICAgQ3VybF9nc3NfbG9nX2Vycm9yKGRhdGEsICJnc3NfaW5pdF9zZWNfY29udGV4dCgpIGZhaWxlZDogIiwKICAgICAgICAgICAgICAgICAgICAgICAgbWFqb3Jfc3RhdHVzLCBtaW5vcl9zdGF0dXMpOwogCi0gICAgcmV0dXJuIENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKICAgfQogCiAgIGlmKCFvdXRwdXRfdG9rZW4udmFsdWUgfHwgIW91dHB1dF90b2tlbi5sZW5ndGgpIHsKICAgICBpZihvdXRwdXRfdG9rZW4udmFsdWUpCiAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJnVudXNlZF9zdGF0dXMsICZvdXRwdXRfdG9rZW4pOwogCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgcmV0dXJuIENVUkxFX0FVVEhfRVJST1I7CiAgIH0KIAogICAvKiBGcmVlIHByZXZpb3VzIHRva2VuICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9zcG5lZ29fc3NwaS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvc3BuZWdvX3NzcGkuYwppbmRleCA0YjIxY2M3Li4xOTRmMjUwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC9zcG5lZ29fc3NwaS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3NwbmVnb19zc3BpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTU5LDYgKzU5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVChTUF9OQU1FX05FR09USUFURSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNlY3VyaXR5UGFja2FnZSk7CiAKKyAgLyogUmVsZWFzZSB0aGUgcGFja2FnZSBidWZmZXIgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUgKi8KKyAgaWYoc3RhdHVzID09IFNFQ19FX09LKSB7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKFNlY3VyaXR5UGFja2FnZSk7CisgIH0KKworCiAgIHJldHVybiAoc3RhdHVzID09IFNFQ19FX09LID8gVFJVRSA6IEZBTFNFKTsKIH0KIApAQCAtMTIzLDggKzEyOSwxMCBAQAogICAgIG5lZ28tPnN0YXR1cyA9IHNfcFNlY0ZuLT5RdWVyeVNlY3VyaXR5UGFja2FnZUluZm8oKFRDSEFSICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVhUKFNQX05BTUVfTkVHT1RJQVRFKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTZWN1cml0eVBhY2thZ2UpOwotICAgIGlmKG5lZ28tPnN0YXR1cyAhPSBTRUNfRV9PSykKLSAgICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisgICAgaWYobmVnby0+c3RhdHVzICE9IFNFQ19FX09LKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NQSTogY291bGRuJ3QgZ2V0IGF1dGggaW5mb1xuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQVVUSF9FUlJPUjsKKyAgICB9CiAKICAgICBuZWdvLT50b2tlbl9tYXggPSBTZWN1cml0eVBhY2thZ2UtPmNiTWF4VG9rZW47CiAKQEAgLTE2NSw3ICsxNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdvLT5wX2lkZW50aXR5LCBOVUxMLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdvLT5jcmVkZW50aWFscywgJmV4cGlyeSk7CiAgICAgaWYobmVnby0+c3RhdHVzICE9IFNFQ19FX09LKQotICAgICAgcmV0dXJuIENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogCiAgICAgLyogQWxsb2NhdGUgb3VyIG5ldyBjb250ZXh0IGhhbmRsZSAqLwogICAgIG5lZ28tPmNvbnRleHQgPSBjYWxsb2MoMSwgc2l6ZW9mKEN0eHRIYW5kbGUpKTsKQEAgLTI1MSwxNCArMjU5LDI1IEBACiAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICBmYWlsZihkYXRhLCAiSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3IobmVnby0+c3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICBpZihuZWdvLT5zdGF0dXMgPT0gKERXT1JEKVNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICB9CiAKICAgaWYobmVnby0+c3RhdHVzID09IFNFQ19JX0NPTVBMRVRFX05FRURFRCB8fAogICAgICBuZWdvLT5zdGF0dXMgPT0gU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFKSB7CiAgICAgbmVnby0+c3RhdHVzID0gc19wU2VjRm4tPkNvbXBsZXRlQXV0aFRva2VuKG5lZ28tPmNvbnRleHQsICZyZXNwX2Rlc2MpOwogICAgIGlmKEdTU19FUlJPUihuZWdvLT5zdGF0dXMpKSB7Ci0gICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CisgICAgICBmYWlsZihkYXRhLCAiQ29tcGxldGVBdXRoVG9rZW4gZmFpbGVkOiAlcyIsCisgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3IobmVnby0+c3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisKKyAgICAgIGlmKG5lZ28tPnN0YXR1cyA9PSAoRFdPUkQpU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWSkKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICAgIHJldHVybiBDVVJMRV9BVVRIX0VSUk9SOwogICAgIH0KICAgfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC92YXV0aC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvdmF1dGguYwppbmRleCBhOWM1YzljLi5kOThlNjZjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC92YXV0aC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3ZhdXRoLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDE0IC0gMjAxOSwgU3RldmUgSG9sbWUsIDxzdGV2ZV9ob2xtZUBob3RtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgLSAyMDIwLCBTdGV2ZSBIb2xtZSwgPHN0ZXZlX2hvbG1lQGhvdG1haWwuY29tPi4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtODksNyArODksNyBAQAogICB9CiAKICAgLyogQWxsb2NhdGUgb3VyIFRDSEFSIGJhc2VkIFNQTiAqLwotICB0Y2hhcl9zcG4gPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcih1dGY4X3Nwbik7CisgIHRjaGFyX3NwbiA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcih1dGY4X3Nwbik7CiAgIGlmKCF0Y2hhcl9zcG4pIHsKICAgICBmcmVlKHV0Zjhfc3BuKTsKIApAQCAtOTcsNyArOTcsNyBAQAogICB9CiAKICAgLyogUmVsZWFzZSB0aGUgVVRGOCB2YXJpYW50IHdoZW4gb3BlcmF0aW5nIHdpdGggVW5pY29kZSAqLwotICBDdXJsX3VuaWNvZGVmcmVlKHV0Zjhfc3BuKTsKKyAgY3VybHhfdW5pY29kZWZyZWUodXRmOF9zcG4pOwogCiAgIC8qIFJldHVybiBvdXIgbmV3bHkgYWxsb2NhdGVkIFNQTiAqLwogICByZXR1cm4gdGNoYXJfc3BuOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvdmF1dGguaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZhdXRoL3ZhdXRoLmgKaW5kZXggNzNiZDI1ZS4uYTFhNTU3ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmF1dGgvdmF1dGguaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92YXV0aC92YXV0aC5oCkBAIC00Myw3ICs0Myw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKLSNkZWZpbmUgR1NTX0VSUk9SKHN0YXR1cykgKHN0YXR1cyAmIDB4ODAwMDAwMDApCisjZGVmaW5lIEdTU19FUlJPUihzdGF0dXMpICgoc3RhdHVzKSAmIDB4ODAwMDAwMDApCiAjZW5kaWYKIAogLyogVGhpcyBpcyB1c2VkIHRvIGJ1aWxkIGEgU1BOIHN0cmluZyAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdmVyc2lvbi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdmVyc2lvbi5jCmluZGV4IDE0YjA1MzEuLjE0ZTUwOTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZlcnNpb24uYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92ZXJzaW9uLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI2LDcgKzI2LDggQEAKICNpbmNsdWRlICJ1cmxkYXRhLmgiCiAjaW5jbHVkZSAidnRscy92dGxzLmgiCiAjaW5jbHVkZSAiaHR0cDIuaCIKLSNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ2c3NoL3NzaC5oIgorI2luY2x1ZGUgInF1aWMuaCIKICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogCiAjaWZkZWYgVVNFX0FSRVMKQEAgLTUzLDE4ICs1NCw2IEBACiAjaW5jbHVkZSA8bGlicnRtcC9ydG1wLmg+CiAjZW5kaWYKIAotI2lmZGVmIFVTRV9MSUJTU0gyCi0jaW5jbHVkZSA8bGlic3NoMi5oPgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX0xJQlNTSDJfVkVSU0lPTgotLyogZ2V0IGl0IHJ1bi10aW1lIGlmIHBvc3NpYmxlICovCi0jZGVmaW5lIENVUkxfTElCU1NIMl9WRVJTSU9OIGxpYnNzaDJfdmVyc2lvbigwKQotI2Vsc2UKLS8qIHVzZSBidWlsZC10aW1lIGlmIHJ1bi10aW1lIG5vdCBwb3NzaWJsZSAqLwotI2RlZmluZSBDVVJMX0xJQlNTSDJfVkVSU0lPTiBMSUJTU0gyX1ZFUlNJT04KLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9aTElCX0gKICNpbmNsdWRlIDx6bGliLmg+CiAjaWZkZWYgX19TWU1CSUFOMzJfXwpAQCAtNzcsMTYgKzY2LDYgQEAKICNpbmNsdWRlIDxicm90bGkvZGVjb2RlLmg+CiAjZW5kaWYKIAotdm9pZCBDdXJsX3ZlcnNpb25faW5pdCh2b2lkKTsKLQotLyogRm9yIHRocmVhZCBzYWZldHkgcHVycG9zZXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZ2xvYmFsX2luaXQgc28gdGhhdAotICAgdGhlIHN0YXRpYyBkYXRhIGluIGJvdGggdmVyc2lvbiBmdW5jdGlvbnMgaXMgaW5pdGlhbGl6ZWQuICovCi12b2lkIEN1cmxfdmVyc2lvbl9pbml0KHZvaWQpCi17Ci0gIGN1cmxfdmVyc2lvbigpOwotICBjdXJsX3ZlcnNpb25faW5mbyhDVVJMVkVSU0lPTl9OT1cpOwotfQotCiAjaWZkZWYgSEFWRV9CUk9UTEkKIHN0YXRpYyBzaXplX3QgYnJvdGxpX3ZlcnNpb24oY2hhciAqYnVmLCBzaXplX3QgYnVmc3opCiB7CkBAIC05OSw5MyArNzgsMTE4IEBACiB9CiAjZW5kaWYKIAorLyoKKyAqIGN1cmxfdmVyc2lvbigpIHJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RhdGljIGJ1ZmZlci4KKyAqCisgKiBJdCBpcyBpbXBsZW1lbnRlZCB0byB3b3JrIG11bHRpLXRocmVhZGVkIGJ5IG1ha2luZyBzdXJlIHJlcGVhdGVkIGludm9rZXMKKyAqIGdlbmVyYXRlIHRoZSBleGFjdCBzYW1lIHN0cmluZyBhbmQgbmV2ZXIgd3JpdGUgYW55IHRlbXBvcmFyeSBkYXRhIGxpa2UKKyAqIHplcm9zIGluIHRoZSBkYXRhLgorICovCisKKyNkZWZpbmUgVkVSU0lPTl9QQVJUUyAxNCAvKiBudW1iZXIgb2Ygc3Vic3RyaW5ncyB3ZSBjYW4gY29uY2F0ZW5hdGUgKi8KKwogY2hhciAqY3VybF92ZXJzaW9uKHZvaWQpCiB7Ci0gIHN0YXRpYyBib29sIGluaXRpYWxpemVkOwotICBzdGF0aWMgY2hhciB2ZXJzaW9uWzIwMF07Ci0gIGNoYXIgKnB0ciA9IHZlcnNpb247Ci0gIHNpemVfdCBsZW47Ci0gIHNpemVfdCBsZWZ0ID0gc2l6ZW9mKHZlcnNpb24pOwotCi0gIGlmKGluaXRpYWxpemVkKQotICAgIHJldHVybiB2ZXJzaW9uOwotCi0gIHN0cmNweShwdHIsIExJQkNVUkxfTkFNRSAiLyIgTElCQ1VSTF9WRVJTSU9OKTsKLSAgbGVuID0gc3RybGVuKHB0cik7Ci0gIGxlZnQgLT0gbGVuOwotICBwdHIgKz0gbGVuOwotCi0gIGlmKGxlZnQgPiAxKSB7Ci0gICAgbGVuID0gQ3VybF9zc2xfdmVyc2lvbihwdHIgKyAxLCBsZWZ0IC0gMSk7Ci0KLSAgICBpZihsZW4gPiAwKSB7Ci0gICAgICAqcHRyID0gJyAnOwotICAgICAgbGVmdCAtPSArK2xlbjsKLSAgICAgIHB0ciArPSBsZW47Ci0gICAgfQotICB9Ci0KKyAgc3RhdGljIGNoYXIgb3V0WzMwMF07CisgIGNoYXIgKm91dHA7CisgIHNpemVfdCBvdXRsZW47CisgIGNvbnN0IGNoYXIgKnNyY1tWRVJTSU9OX1BBUlRTXTsKKyNpZmRlZiBVU0VfU1NMCisgIGNoYXIgc3NsX3ZlcnNpb25bMjAwXTsKKyNlbmRpZgogI2lmZGVmIEhBVkVfTElCWgotICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIHpsaWIvJXMiLCB6bGliVmVyc2lvbigpKTsKLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47CisgIGNoYXIgel92ZXJzaW9uWzQwXTsKICNlbmRpZgogI2lmZGVmIEhBVkVfQlJPVExJCi0gIGxlbiA9IG1zbnByaW50ZihwdHIsIGxlZnQsICIlcyIsICIgYnJvdGxpLyIpOwotICBsZWZ0IC09IGxlbjsKLSAgcHRyICs9IGxlbjsKLSAgbGVuID0gYnJvdGxpX3ZlcnNpb24ocHRyLCBsZWZ0KTsKLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47CisgIGNoYXIgYnJfdmVyc2lvbls0MF0gPSAiYnJvdGxpLyI7CiAjZW5kaWYKICNpZmRlZiBVU0VfQVJFUwotICAvKiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgcHJlc2VudCBpbiBjLWFyZXMsIG5vdCBpbiB0aGUgb3JpZ2luYWwgYXJlcyAqLwotICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIGMtYXJlcy8lcyIsIGFyZXNfdmVyc2lvbihOVUxMKSk7Ci0gIGxlZnQgLT0gbGVuOwotICBwdHIgKz0gbGVuOworICBjaGFyIGNhcmVzX3ZlcnNpb25bNDBdOwogI2VuZGlmCi0jaWZkZWYgVVNFX0xJQklETjIKLSAgaWYoaWRuMl9jaGVja192ZXJzaW9uKElETjJfVkVSU0lPTikpIHsKLSAgICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIGxpYmlkbjIvJXMiLCBpZG4yX2NoZWNrX3ZlcnNpb24oTlVMTCkpOwotICAgIGxlZnQgLT0gbGVuOwotICAgIHB0ciArPSBsZW47Ci0gIH0KKyNpZiBkZWZpbmVkKFVTRV9MSUJJRE4yKQorICBjaGFyIGlkbl92ZXJzaW9uWzQwXTsKICNlbmRpZgogI2lmZGVmIFVTRV9MSUJQU0wKLSAgbGVuID0gbXNucHJpbnRmKHB0ciwgbGVmdCwgIiBsaWJwc2wvJXMiLCBwc2xfZ2V0X3ZlcnNpb24oKSk7Ci0gIGxlZnQgLT0gbGVuOwotICBwdHIgKz0gbGVuOworICBjaGFyIHBzbF92ZXJzaW9uWzQwXTsKICNlbmRpZgotI2lmZGVmIFVTRV9XSU4zMl9JRE4KLSAgbGVuID0gbXNucHJpbnRmKHB0ciwgbGVmdCwgIiBXaW5JRE4iKTsKLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47CisjaWYgZGVmaW5lZChIQVZFX0lDT05WKSAmJiBkZWZpbmVkKENVUkxfRE9FU19DT05WRVJTSU9OUykKKyAgY2hhciBpY29udl92ZXJzaW9uWzQwXT0iaWNvbnYiOworI2VuZGlmCisjaWZkZWYgVVNFX1NTSAorICBjaGFyIHNzaF92ZXJzaW9uWzQwXTsKKyNlbmRpZgorI2lmZGVmIFVTRV9OR0hUVFAyCisgIGNoYXIgaDJfdmVyc2lvbls0MF07CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfUVVJQworICBjaGFyIGgzX3ZlcnNpb25bNDBdOworI2VuZGlmCisjaWZkZWYgVVNFX0xJQlJUTVAKKyAgY2hhciBydG1wX3ZlcnNpb25bNDBdOworI2VuZGlmCisgIGludCBpID0gMDsKKyAgaW50IGo7CisKKyNpZmRlZiBERUJVR0JVSUxECisgIC8qIE92ZXJyaWRlIHZlcnNpb24gc3RyaW5nIHdoZW4gZW52aXJvbm1lbnQgdmFyaWFibGUgQ1VSTF9WRVJTSU9OIGlzIHNldCAqLworICBjb25zdCBjaGFyICpkZWJ1Z3ZlcnNpb24gPSBnZXRlbnYoIkNVUkxfVkVSU0lPTiIpOworICBpZihkZWJ1Z3ZlcnNpb24pIHsKKyAgICBzdHJuY3B5KG91dCwgZGVidWd2ZXJzaW9uLCBzaXplb2Yob3V0KS0xKTsKKyAgICBvdXRbc2l6ZW9mKG91dCktMV0gPSAnXDAnOworICAgIHJldHVybiBvdXQ7CisgIH0KKyNlbmRpZgorCisgIHNyY1tpKytdID0gTElCQ1VSTF9OQU1FICIvIiBMSUJDVVJMX1ZFUlNJT047CisjaWZkZWYgVVNFX1NTTAorICBDdXJsX3NzbF92ZXJzaW9uKHNzbF92ZXJzaW9uLCBzaXplb2Yoc3NsX3ZlcnNpb24pKTsKKyAgc3JjW2krK10gPSBzc2xfdmVyc2lvbjsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElCWgorICBtc25wcmludGYoel92ZXJzaW9uLCBzaXplb2Yoel92ZXJzaW9uKSwgInpsaWIvJXMiLCB6bGliVmVyc2lvbigpKTsKKyAgc3JjW2krK10gPSB6X3ZlcnNpb247CisjZW5kaWYKKyNpZmRlZiBIQVZFX0JST1RMSQorICBicm90bGlfdmVyc2lvbigmYnJfdmVyc2lvbls3XSwgc2l6ZW9mKGJyX3ZlcnNpb24pIC0gNyk7CisgIHNyY1tpKytdID0gYnJfdmVyc2lvbjsKKyNlbmRpZgorI2lmZGVmIFVTRV9BUkVTCisgIG1zbnByaW50ZihjYXJlc192ZXJzaW9uLCBzaXplb2YoY2FyZXNfdmVyc2lvbiksCisgICAgICAgICAgICAiYy1hcmVzLyVzIiwgYXJlc192ZXJzaW9uKE5VTEwpKTsKKyAgc3JjW2krK10gPSBjYXJlc192ZXJzaW9uOworI2VuZGlmCisjaWZkZWYgVVNFX0xJQklETjIKKyAgbXNucHJpbnRmKGlkbl92ZXJzaW9uLCBzaXplb2YoaWRuX3ZlcnNpb24pLAorICAgICAgICAgICAgImxpYmlkbjIvJXMiLCBpZG4yX2NoZWNrX3ZlcnNpb24oTlVMTCkpOworICBzcmNbaSsrXSA9IGlkbl92ZXJzaW9uOworI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfSUROKQorICBzcmNbaSsrXSA9IChjaGFyICopIldpbklETiI7CisjZW5kaWYKKworI2lmZGVmIFVTRV9MSUJQU0wKKyAgbXNucHJpbnRmKHBzbF92ZXJzaW9uLCBzaXplb2YocHNsX3ZlcnNpb24pLCAibGlicHNsLyVzIiwgcHNsX2dldF92ZXJzaW9uKCkpOworICBzcmNbaSsrXSA9IHBzbF92ZXJzaW9uOwogI2VuZGlmCiAjaWYgZGVmaW5lZChIQVZFX0lDT05WKSAmJiBkZWZpbmVkKENVUkxfRE9FU19DT05WRVJTSU9OUykKICNpZmRlZiBfTElCSUNPTlZfVkVSU0lPTgotICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIGljb252LyVkLiVkIiwKLSAgICAgICAgICAgICAgICAgIF9MSUJJQ09OVl9WRVJTSU9OID4+IDgsIF9MSUJJQ09OVl9WRVJTSU9OICYgMjU1KTsKKyAgbXNucHJpbnRmKGljb252X3ZlcnNpb24sIHNpemVvZihpY29udl92ZXJzaW9uKSwgImljb252LyVkLiVkIiwKKyAgICAgICAgICAgIF9MSUJJQ09OVl9WRVJTSU9OID4+IDgsIF9MSUJJQ09OVl9WRVJTSU9OICYgMjU1KTsKICNlbHNlCi0gIC8qIHZlcnNpb24gdW5rbm93biAqLwotICBsZW4gPSBtc25wcmludGYocHRyLCBsZWZ0LCAiIGljb252Iik7CisgIC8qIHZlcnNpb24gdW5rbm93biwgbGV0IHRoZSBkZWZhdWx0IHN0YW5kICovCiAjZW5kaWYgLyogX0xJQklDT05WX1ZFUlNJT04gKi8KLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47CisgIHNyY1tpKytdID0gaWNvbnZfdmVyc2lvbjsKICNlbmRpZgotI2lmZGVmIFVTRV9MSUJTU0gyCi0gIGxlbiA9IG1zbnByaW50ZihwdHIsIGxlZnQsICIgbGlic3NoMi8lcyIsIENVUkxfTElCU1NIMl9WRVJTSU9OKTsKLSAgbGVmdCAtPSBsZW47Ci0gIHB0ciArPSBsZW47Ci0jZW5kaWYKLSNpZmRlZiBVU0VfTElCU1NICi0gIGxlbiA9IG1zbnByaW50ZihwdHIsIGxlZnQsICIgbGlic3NoLyVzIiwgQ1VSTF9MSUJTU0hfVkVSU0lPTik7Ci0gIGxlZnQgLT0gbGVuOwotICBwdHIgKz0gbGVuOworI2lmZGVmIFVTRV9TU0gKKyAgQ3VybF9zc2hfdmVyc2lvbihzc2hfdmVyc2lvbiwgc2l6ZW9mKHNzaF92ZXJzaW9uKSk7CisgIHNyY1tpKytdID0gc3NoX3ZlcnNpb247CiAjZW5kaWYKICNpZmRlZiBVU0VfTkdIVFRQMgotICBsZW4gPSBDdXJsX2h0dHAyX3ZlcihwdHIsIGxlZnQpOwotICBsZWZ0IC09IGxlbjsKLSAgcHRyICs9IGxlbjsKKyAgQ3VybF9odHRwMl92ZXIoaDJfdmVyc2lvbiwgc2l6ZW9mKGgyX3ZlcnNpb24pKTsKKyAgc3JjW2krK10gPSBoMl92ZXJzaW9uOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgQ3VybF9xdWljX3ZlcihoM192ZXJzaW9uLCBzaXplb2YoaDNfdmVyc2lvbikpOworICBzcmNbaSsrXSA9IGgzX3ZlcnNpb247CiAjZW5kaWYKICNpZmRlZiBVU0VfTElCUlRNUAogICB7CkBAIC0xOTcsMjcgKzIwMSwzNCBAQAogICAgIGVsc2UKICAgICAgIHN1ZmZbMF0gPSAnXDAnOwogCi0gICAgbXNucHJpbnRmKHB0ciwgbGVmdCwgIiBsaWJydG1wLyVkLiVkJXMiLAorICAgIG1zbnByaW50ZihydG1wX3ZlcnNpb24sIHNpemVvZihydG1wX3ZlcnNpb24pLCAibGlicnRtcC8lZC4lZCVzIiwKICAgICAgICAgICAgICAgUlRNUF9MSUJfVkVSU0lPTiA+PiAxNiwgKFJUTVBfTElCX1ZFUlNJT04gPj4gOCkgJiAweGZmLAogICAgICAgICAgICAgICBzdWZmKTsKLS8qCi0gIElmIGFub3RoZXIgbGliIHZlcnNpb24gaXMgYWRkZWQgYmVsb3cgdGhpcyBvbmUsIHRoaXMgY29kZSB3b3VsZAotICBhbHNvIGhhdmUgdG8gZG86Ci0KLSAgICBsZW4gPSB3aGF0IG1zbnByaW50ZigpIHJldHVybmVkCi0KLSAgICBsZWZ0IC09IGxlbjsKLSAgICBwdHIgKz0gbGVuOwotKi8KKyAgICBzcmNbaSsrXSA9IHJ0bXBfdmVyc2lvbjsKICAgfQogI2VuZGlmCiAKLSAgLyogU2lsZW50IHNjYW4tYnVpbGQgZXZlbiBpZiBsaWJydG1wIGlzIG5vdCBlbmFibGVkLiAqLwotICAodm9pZCkgbGVmdDsKLSAgKHZvaWQpIHB0cjsKKyAgREVCVUdBU1NFUlQoaSA8PSBWRVJTSU9OX1BBUlRTKTsKIAotICBpbml0aWFsaXplZCA9IHRydWU7Ci0gIHJldHVybiB2ZXJzaW9uOworICBvdXRwID0gJm91dFswXTsKKyAgb3V0bGVuID0gc2l6ZW9mKG91dCk7CisgIGZvcihqID0gMDsgaiA8IGk7IGorKykgeworICAgIHNpemVfdCBuID0gc3RybGVuKHNyY1tqXSk7CisgICAgLyogd2UgbmVlZCByb29tIGZvciBhIHNwYWNlLCB0aGUgc3RyaW5nIGFuZCB0aGUgZmluYWwgemVybyAqLworICAgIGlmKG91dGxlbiA8PSAobiArIDIpKQorICAgICAgYnJlYWs7CisgICAgaWYoaikgeworICAgICAgLyogcHJlcGVuZCBhIHNwYWNlIGlmIG5vdCB0aGUgZmlyc3QgKi8KKyAgICAgICpvdXRwKysgPSAnICc7CisgICAgICBvdXRsZW4tLTsKKyAgICB9CisgICAgbWVtY3B5KG91dHAsIHNyY1tqXSwgbik7CisgICAgb3V0cCArPSBuOworICAgIG91dGxlbiAtPSBuOworICB9CisgICpvdXRwID0gMDsKKworICByZXR1cm4gb3V0OwogfQogCiAvKiBkYXRhIGZvciBjdXJsX3ZlcnNpb25faW5mbwpAQCAtMjYyLDYgKzI3Myw5IEBACiAgICJsZGFwcyIsCiAjZW5kaWYKICNlbmRpZgorI2lmZGVmIENVUkxfRU5BQkxFX01RVFQKKyAgIm1xdHQiLAorI2VuZGlmCiAjaWZuZGVmIENVUkxfRElTQUJMRV9QT1AzCiAgICJwb3AzIiwKICNlbmRpZgpAQCAtMjc0LDggKzI4OCwxMCBAQAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfUlRTUAogICAicnRzcCIsCiAjZW5kaWYKLSNpZiBkZWZpbmVkKFVTRV9TU0gpCisjaWYgZGVmaW5lZChVU0VfU1NIKSAmJiAhZGVmaW5lZChVU0VfV09MRlNTSCkKICAgInNjcCIsCisjZW5kaWYKKyNpZmRlZiBVU0VfU1NICiAgICJzZnRwIiwKICNlbmRpZgogI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9TTUIpICYmIGRlZmluZWQoVVNFX05UTE0pICYmIFwKQEAgLTM1OCw2ICszNzQsOSBAQAogI2lmIGRlZmluZWQoVVNFX05HSFRUUDIpCiAgIHwgQ1VSTF9WRVJTSU9OX0hUVFAyCiAjZW5kaWYKKyNpZiBkZWZpbmVkKEVOQUJMRV9RVUlDKQorICB8IENVUkxfVkVSU0lPTl9IVFRQMworI2VuZGlmCiAjaWYgZGVmaW5lZChVU0VfVU5JWF9TT0NLRVRTKQogICB8IENVUkxfVkVSU0lPTl9VTklYX1NPQ0tFVFMKICNlbmRpZgpAQCAtMzg1LDExICs0MDQsMjMgQEAKICAgTlVMTCwgLyogc3NoIGxpYiB2ZXJzaW9uICovCiAgIDAsICAgIC8qIGJyb3RsaV92ZXJfbnVtICovCiAgIE5VTEwsIC8qIGJyb3RsaSB2ZXJzaW9uICovCisgIDAsICAgIC8qIG5naHR0cDIgdmVyc2lvbiBudW1iZXIgKi8KKyAgTlVMTCwgLyogbmdodHRwMiB2ZXJzaW9uIHN0cmluZyAqLworICBOVUxMLCAvKiBxdWljIGxpYnJhcnkgc3RyaW5nICovCisjaWZkZWYgQ1VSTF9DQV9CVU5ETEUKKyAgQ1VSTF9DQV9CVU5ETEUsIC8qIGNhaW5mbyAqLworI2Vsc2UKKyAgTlVMTCwKKyNlbmRpZgorI2lmZGVmIENVUkxfQ0FfUEFUSAorICBDVVJMX0NBX1BBVEggIC8qIGNhcGF0aCAqLworI2Vsc2UKKyAgTlVMTAorI2VuZGlmCiB9OwogCiBjdXJsX3ZlcnNpb25faW5mb19kYXRhICpjdXJsX3ZlcnNpb25faW5mbyhDVVJMdmVyc2lvbiBzdGFtcCkKIHsKLSAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CiAjaWYgZGVmaW5lZChVU0VfU1NIKQogICBzdGF0aWMgY2hhciBzc2hfYnVmZmVyWzgwXTsKICNlbmRpZgpAQCAtNDA0LDkgKzQzNSw2IEBACiAgIHN0YXRpYyBjaGFyIGJyb3RsaV9idWZmZXJbODBdOwogI2VuZGlmCiAKLSAgaWYoaW5pdGlhbGl6ZWQpCi0gICAgcmV0dXJuICZ2ZXJzaW9uX2luZm87Ci0KICNpZmRlZiBVU0VfU1NMCiAgIEN1cmxfc3NsX3ZlcnNpb24oc3NsX2J1ZmZlciwgc2l6ZW9mKHNzbF9idWZmZXIpKTsKICAgdmVyc2lvbl9pbmZvLnNzbF92ZXJzaW9uID0gc3NsX2J1ZmZlcjsKQEAgLTQ0NiwxMSArNDc0LDggQEAKICNlbmRpZiAvKiBfTElCSUNPTlZfVkVSU0lPTiAqLwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFVTRV9MSUJTU0gyKQotICBtc25wcmludGYoc3NoX2J1ZmZlciwgc2l6ZW9mKHNzaF9idWZmZXIpLCAibGlic3NoMi8lcyIsIExJQlNTSDJfVkVSU0lPTik7Ci0gIHZlcnNpb25faW5mby5saWJzc2hfdmVyc2lvbiA9IHNzaF9idWZmZXI7Ci0jZWxpZiBkZWZpbmVkKFVTRV9MSUJTU0gpCi0gIG1zbnByaW50Zihzc2hfYnVmZmVyLCBzaXplb2Yoc3NoX2J1ZmZlciksICJsaWJzc2gvJXMiLCBDVVJMX0xJQlNTSF9WRVJTSU9OKTsKKyNpZiBkZWZpbmVkKFVTRV9TU0gpCisgIEN1cmxfc3NoX3ZlcnNpb24oc3NoX2J1ZmZlciwgc2l6ZW9mKHNzaF9idWZmZXIpKTsKICAgdmVyc2lvbl9pbmZvLmxpYnNzaF92ZXJzaW9uID0gc3NoX2J1ZmZlcjsKICNlbmRpZgogCkBAIC00NjAsOCArNDg1LDIyIEBACiAgIHZlcnNpb25faW5mby5icm90bGlfdmVyc2lvbiA9IGJyb3RsaV9idWZmZXI7CiAjZW5kaWYKIAotICAodm9pZClzdGFtcDsgLyogYXZvaWQgY29tcGlsZXIgd2FybmluZ3MsIHdlIGRvbid0IHVzZSB0aGlzICovCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgeworICAgIG5naHR0cDJfaW5mbyAqaDIgPSBuZ2h0dHAyX3ZlcnNpb24oMCk7CisgICAgdmVyc2lvbl9pbmZvLm5naHR0cDJfdmVyX251bSA9IGgyLT52ZXJzaW9uX251bTsKKyAgICB2ZXJzaW9uX2luZm8ubmdodHRwMl92ZXJzaW9uID0gaDItPnZlcnNpb25fc3RyOworICB9CisjZW5kaWYKIAotICBpbml0aWFsaXplZCA9IHRydWU7CisjaWZkZWYgRU5BQkxFX1FVSUMKKyAgeworICAgIHN0YXRpYyBjaGFyIHF1aWNidWZmZXJbODBdOworICAgIEN1cmxfcXVpY192ZXIocXVpY2J1ZmZlciwgc2l6ZW9mKHF1aWNidWZmZXIpKTsKKyAgICB2ZXJzaW9uX2luZm8ucXVpY192ZXJzaW9uID0gcXVpY2J1ZmZlcjsKKyAgfQorI2VuZGlmCisKKyAgKHZvaWQpc3RhbXA7IC8qIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLCB3ZSBkb24ndCB1c2UgdGhpcyAqLwogICByZXR1cm4gJnZlcnNpb25faW5mbzsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL25ndGNwMi5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvbmd0Y3AyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5Y2IzNwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL25ndGNwMi5jCkBAIC0wLDAgKzEsMTk0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX05HVENQMgorI2luY2x1ZGUgPG5ndGNwMi9uZ3RjcDIuaD4KKyNpbmNsdWRlIDxuZ3RjcDIvbmd0Y3AyX2NyeXB0by5oPgorI2luY2x1ZGUgPG5naHR0cDMvbmdodHRwMy5oPgorI2lmZGVmIFVTRV9PUEVOU1NMCisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNlbmRpZgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgInN0cmR1cC5oIgorI2luY2x1ZGUgInJhbmQuaCIKKyNpbmNsdWRlICJuZ3RjcDIuaCIKKyNpbmNsdWRlICJtdWx0aWlmLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgImR5bmJ1Zi5oIgorI2luY2x1ZGUgInZxdWljLmgiCisjaW5jbHVkZSAidnRscy9rZXlsb2cuaCIKKworLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLworI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiAjZGVmaW5lIERFQlVHX05HVENQMiAqLworI2lmZGVmIENVUkxERUJVRworI2RlZmluZSBERUJVR19IVFRQMworI2VuZGlmCisjaWZkZWYgREVCVUdfSFRUUDMKKyNkZWZpbmUgSDNCVUdGKHgpIHgKKyNlbHNlCisjZGVmaW5lIEgzQlVHRih4KSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKgorICogVGhpcyBob2xkcyBvdXRnb2luZyBIVFRQLzMgc3RyZWFtIGRhdGEgdGhhdCBpcyB1c2VkIGJ5IG5naHR0cDMgdW50aWwgYWNrZWQuCisgKiBJdCBpcyB1c2VkIGFzIGEgY2lyY3VsYXIgYnVmZmVyLiBBZGQgbmV3IGJ5dGVzIGF0IHRoZSBlbmQgdW50aWwgaXQgcmVhY2hlcworICogdGhlIGZhciBlbmQsIHRoZW4gc3RhcnQgb3ZlciBhdCBpbmRleCAwIGFnYWluLgorICovCisKKyNkZWZpbmUgSDNfU0VORF9TSVpFICgyMCoxMDI0KQorc3RydWN0IGgzb3V0IHsKKyAgdWludDhfdCBidWZbSDNfU0VORF9TSVpFXTsKKyAgc2l6ZV90IHVzZWQ7ICAgLyogbnVtYmVyIG9mIGJ5dGVzIHVzZWQgaW4gdGhlIGJ1ZmZlciAqLworICBzaXplX3Qgd2luZGV4OyAvKiBpbmRleCBpbiB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0YXJ0IHdyaXRpbmcgdGhlIG5leHQKKyAgICAgICAgICAgICAgICAgICAgZGF0YSBibG9jayAqLworfTsKKworI2RlZmluZSBRVUlDX01BWF9TVFJFQU1TICgyNTYqMTAyNCkKKyNkZWZpbmUgUVVJQ19NQVhfREFUQSAoMSoxMDI0KjEwMjQpCisjZGVmaW5lIFFVSUNfSURMRV9USU1FT1VUIDYwMDAwIC8qIG1pbGxpc2Vjb25kcyAqLworCisjaWZkZWYgVVNFX09QRU5TU0wKKyNkZWZpbmUgUVVJQ19DSVBIRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIlRMU19BRVNfMTI4X0dDTV9TSEEyNTY6VExTX0FFU18yNTZfR0NNX1NIQTM4NDpUTFNfQ0hBQ0hBMjBfIiAgICAgICAgICAgICAgIFwKKyAgIlBPTFkxMzA1X1NIQTI1NjpUTFNfQUVTXzEyOF9DQ01fU0hBMjU2IgorI2RlZmluZSBRVUlDX0dST1VQUyAiUC0yNTY6WDI1NTE5OlAtMzg0OlAtNTIxIgorI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorI2RlZmluZSBRVUlDX1BSSU9SSVRZIFwKKyAgIk5PUk1BTDotVkVSUy1BTEw6K1ZFUlMtVExTMS4zOi1DSVBIRVItQUxMOitBRVMtMTI4LUdDTTorQUVTLTI1Ni1HQ006IiBcCisgICIrQ0hBQ0hBMjAtUE9MWTEzMDU6K0FFUy0xMjgtQ0NNOi1HUk9VUC1BTEw6K0dST1VQLVNFQ1AyNTZSMToiIFwKKyAgIitHUk9VUC1YMjU1MTk6K0dST1VQLVNFQ1AzODRSMTorR1JPVVAtU0VDUDUyMVIxIgorI2VuZGlmCisKK3N0YXRpYyBDVVJMY29kZSBuZ19wcm9jZXNzX2luZ3Jlc3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzKTsKK3N0YXRpYyBDVVJMY29kZSBuZ19mbHVzaF9lZ3Jlc3Moc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpOworc3RhdGljIGludCBjYl9oM19hY2tlZF9zdHJlYW1fZGF0YShuZ2h0dHAzX2Nvbm4gKmNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgdm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKTsKKworc3RhdGljIG5ndGNwMl90c3RhbXAgdGltZXN0YW1wKHZvaWQpCit7CisgIHN0cnVjdCBjdXJsdGltZSBjdCA9IEN1cmxfbm93KCk7CisgIHJldHVybiBjdC50dl9zZWMgKiBOR1RDUDJfU0VDT05EUyArIGN0LnR2X3VzZWMgKiBOR1RDUDJfTUlDUk9TRUNPTkRTOworfQorCisjaWZkZWYgREVCVUdfTkdUQ1AyCitzdGF0aWMgdm9pZCBxdWljX3ByaW50Zih2b2lkICp1c2VyX2RhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICB2YV9saXN0IGFwOworICAodm9pZCl1c2VyX2RhdGE7IC8qIFRPRE8sIHVzZSB0aGlzIHRvIGRvIGluZm9mKCkgaW5zdGVhZCBsb25nLXRlcm0gKi8KKyAgdmFfc3RhcnQoYXAsIGZtdCk7CisgIHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgVVNFX09QRU5TU0wKK3N0YXRpYyBuZ3RjcDJfY3J5cHRvX2xldmVsCitxdWljX2Zyb21fb3NzbF9sZXZlbChPU1NMX0VOQ1JZUFRJT05fTEVWRUwgb3NzbF9sZXZlbCkKK3sKKyAgc3dpdGNoKG9zc2xfbGV2ZWwpIHsKKyAgY2FzZSBzc2xfZW5jcnlwdGlvbl9pbml0aWFsOgorICAgIHJldHVybiBOR1RDUDJfQ1JZUFRPX0xFVkVMX0lOSVRJQUw7CisgIGNhc2Ugc3NsX2VuY3J5cHRpb25fZWFybHlfZGF0YToKKyAgICByZXR1cm4gTkdUQ1AyX0NSWVBUT19MRVZFTF9FQVJMWTsKKyAgY2FzZSBzc2xfZW5jcnlwdGlvbl9oYW5kc2hha2U6CisgICAgcmV0dXJuIE5HVENQMl9DUllQVE9fTEVWRUxfSEFORFNIQUtFOworICBjYXNlIHNzbF9lbmNyeXB0aW9uX2FwcGxpY2F0aW9uOgorICAgIHJldHVybiBOR1RDUDJfQ1JZUFRPX0xFVkVMX0FQUDsKKyAgZGVmYXVsdDoKKyAgICBhc3NlcnQoMCk7CisgIH0KK30KKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKK3N0YXRpYyBuZ3RjcDJfY3J5cHRvX2xldmVsCitxdWljX2Zyb21fZ3Rsc19sZXZlbChnbnV0bHNfcmVjb3JkX2VuY3J5cHRpb25fbGV2ZWxfdCBndGxzX2xldmVsKQoreworICBzd2l0Y2goZ3Rsc19sZXZlbCkgeworICBjYXNlIEdOVVRMU19FTkNSWVBUSU9OX0xFVkVMX0lOSVRJQUw6CisgICAgcmV0dXJuIE5HVENQMl9DUllQVE9fTEVWRUxfSU5JVElBTDsKKyAgY2FzZSBHTlVUTFNfRU5DUllQVElPTl9MRVZFTF9FQVJMWToKKyAgICByZXR1cm4gTkdUQ1AyX0NSWVBUT19MRVZFTF9FQVJMWTsKKyAgY2FzZSBHTlVUTFNfRU5DUllQVElPTl9MRVZFTF9IQU5EU0hBS0U6CisgICAgcmV0dXJuIE5HVENQMl9DUllQVE9fTEVWRUxfSEFORFNIQUtFOworICBjYXNlIEdOVVRMU19FTkNSWVBUSU9OX0xFVkVMX0FQUExJQ0FUSU9OOgorICAgIHJldHVybiBOR1RDUDJfQ1JZUFRPX0xFVkVMX0FQUDsKKyAgZGVmYXVsdDoKKyAgICBhc3NlcnQoMCk7CisgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBxbG9nX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgaWYocXMtPnFsb2dmZCAhPSAtMSkgeworICAgIHNzaXplX3QgcmMgPSB3cml0ZShxcy0+cWxvZ2ZkLCBkYXRhLCBkYXRhbGVuKTsKKyAgICBpZihyYyA9PSAtMSkgeworICAgICAgLyogb24gd3JpdGUgZXJyb3IsIHN0b3AgZnVydGhlciB3cml0ZSBhdHRlbXB0cyAqLworICAgICAgY2xvc2UocXMtPnFsb2dmZCk7CisgICAgICBxcy0+cWxvZ2ZkID0gLTE7CisgICAgfQorICB9CisKK30KKworc3RhdGljIHZvaWQgcXVpY19zZXR0aW5ncyhzdHJ1Y3QgcXVpY3NvY2tldCAqcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHN0cmVhbV9idWZmZXJfc2l6ZSkKK3sKKyAgbmd0Y3AyX3NldHRpbmdzICpzID0gJnFzLT5zZXR0aW5nczsKKyAgbmd0Y3AyX3NldHRpbmdzX2RlZmF1bHQocyk7CisjaWZkZWYgREVCVUdfTkdUQ1AyCisgIHMtPmxvZ19wcmludGYgPSBxdWljX3ByaW50ZjsKKyNlbHNlCisgIHMtPmxvZ19wcmludGYgPSBOVUxMOworI2VuZGlmCisgIHMtPmluaXRpYWxfdHMgPSB0aW1lc3RhbXAoKTsKKyAgcy0+dHJhbnNwb3J0X3BhcmFtcy5pbml0aWFsX21heF9zdHJlYW1fZGF0YV9iaWRpX2xvY2FsID0gc3RyZWFtX2J1ZmZlcl9zaXplOworICBzLT50cmFuc3BvcnRfcGFyYW1zLmluaXRpYWxfbWF4X3N0cmVhbV9kYXRhX2JpZGlfcmVtb3RlID0gUVVJQ19NQVhfU1RSRUFNUzsKKyAgcy0+dHJhbnNwb3J0X3BhcmFtcy5pbml0aWFsX21heF9zdHJlYW1fZGF0YV91bmkgPSBRVUlDX01BWF9TVFJFQU1TOworICBzLT50cmFuc3BvcnRfcGFyYW1zLmluaXRpYWxfbWF4X2RhdGEgPSBRVUlDX01BWF9EQVRBOworICBzLT50cmFuc3BvcnRfcGFyYW1zLmluaXRpYWxfbWF4X3N0cmVhbXNfYmlkaSA9IDE7CisgIHMtPnRyYW5zcG9ydF9wYXJhbXMuaW5pdGlhbF9tYXhfc3RyZWFtc191bmkgPSAzOworICBzLT50cmFuc3BvcnRfcGFyYW1zLm1heF9pZGxlX3RpbWVvdXQgPSBRVUlDX0lETEVfVElNRU9VVDsKKyAgaWYocXMtPnFsb2dmZCAhPSAtMSkgeworICAgIHMtPnFsb2cud3JpdGUgPSBxbG9nX2NhbGxiYWNrOworICB9Cit9CisKKyNpZmRlZiBVU0VfT1BFTlNTTAorc3RhdGljIHZvaWQga2V5bG9nX2NhbGxiYWNrKGNvbnN0IFNTTCAqc3NsLCBjb25zdCBjaGFyICpsaW5lKQoreworICAodm9pZClzc2w7CisgIEN1cmxfdGxzX2tleWxvZ193cml0ZV9saW5lKGxpbmUpOworfQorI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorc3RhdGljIGludCBrZXlsb2dfY2FsbGJhY2soZ251dGxzX3Nlc3Npb25fdCBzZXNzaW9uLCBjb25zdCBjaGFyICpsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZ251dGxzX2RhdHVtX3QgKnNlY3JldCkKK3sKKyAgZ251dGxzX2RhdHVtX3QgY3JhbmRvbTsKKyAgZ251dGxzX2RhdHVtX3Qgc3JhbmRvbTsKKworICBnbnV0bHNfc2Vzc2lvbl9nZXRfcmFuZG9tKHNlc3Npb24sICZjcmFuZG9tLCAmc3JhbmRvbSk7CisgIGlmKGNyYW5kb20uc2l6ZSAhPSAzMikgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIEN1cmxfdGxzX2tleWxvZ193cml0ZShsYWJlbCwgY3JhbmRvbS5kYXRhLCBzZWNyZXQtPmRhdGEsIHNlY3JldC0+c2l6ZSk7CisgIHJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW5pdF9uZ2gzX2Nvbm4oc3RydWN0IHF1aWNzb2NrZXQgKnFzKTsKKworc3RhdGljIGludCB3cml0ZV9jbGllbnRfaGFuZHNoYWtlKHN0cnVjdCBxdWljc29ja2V0ICpxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3RjcDJfY3J5cHRvX2xldmVsIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4pCit7CisgIHN0cnVjdCBxdWljX2hhbmRzaGFrZSAqY3J5cHRvX2RhdGE7CisgIGludCBydjsKKworICBjcnlwdG9fZGF0YSA9ICZxcy0+Y3J5cHRvX2RhdGFbbGV2ZWxdOworICBpZihjcnlwdG9fZGF0YS0+YnVmID09IE5VTEwpIHsKKyAgICBjcnlwdG9fZGF0YS0+YnVmID0gbWFsbG9jKDQwOTYpOworICAgIGlmKCFjcnlwdG9fZGF0YS0+YnVmKQorICAgICAgcmV0dXJuIDA7CisgICAgY3J5cHRvX2RhdGEtPmFsbG9jbGVuID0gNDA5NjsKKyAgfQorCisgIC8qIFRPRE8gSnVzdCBwcmV0ZW5kIHRoYXQgaGFuZHNoYWtlIGRvZXMgbm90IGdyb3cgbW9yZSB0aGFuIDRLaUIgZm9yCisgICAgIG5vdyAqLworICBhc3NlcnQoY3J5cHRvX2RhdGEtPmxlbiArIGxlbiA8PSBjcnlwdG9fZGF0YS0+YWxsb2NsZW4pOworCisgIG1lbWNweSgmY3J5cHRvX2RhdGEtPmJ1ZltjcnlwdG9fZGF0YS0+bGVuXSwgZGF0YSwgbGVuKTsKKyAgY3J5cHRvX2RhdGEtPmxlbiArPSBsZW47CisKKyAgcnYgPSBuZ3RjcDJfY29ubl9zdWJtaXRfY3J5cHRvX2RhdGEoCisgICAgcXMtPnFjb25uLCBsZXZlbCwgKHVpbnQ4X3QgKikoJmNyeXB0b19kYXRhLT5idWZbY3J5cHRvX2RhdGEtPmxlbl0gLSBsZW4pLAorICAgIGxlbik7CisgIGlmKHJ2KSB7CisgICAgSDNCVUdGKGZwcmludGYoc3RkZXJyLCAid3JpdGVfY2xpZW50X2hhbmRzaGFrZSBmYWlsZWRcbiIpKTsKKyAgfQorICBhc3NlcnQoMCA9PSBydik7CisKKyAgcmV0dXJuIDE7Cit9CisKKyNpZmRlZiBVU0VfT1BFTlNTTAorc3RhdGljIGludCBxdWljX3NldF9lbmNyeXB0aW9uX3NlY3JldHMoU1NMICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPU1NMX0VOQ1JZUFRJT05fTEVWRUwgb3NzbF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnJ4X3NlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnR4X3NlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZWNyZXRsZW4pCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKVNTTF9nZXRfYXBwX2RhdGEoc3NsKTsKKyAgaW50IGxldmVsID0gcXVpY19mcm9tX29zc2xfbGV2ZWwob3NzbF9sZXZlbCk7CisKKyAgaWYobmd0Y3AyX2NyeXB0b19kZXJpdmVfYW5kX2luc3RhbGxfcnhfa2V5KAorICAgICAgIHFzLT5xY29ubiwgTlVMTCwgTlVMTCwgTlVMTCwgbGV2ZWwsIHJ4X3NlY3JldCwgc2VjcmV0bGVuKSAhPSAwKQorICAgIHJldHVybiAwOworCisgIGlmKG5ndGNwMl9jcnlwdG9fZGVyaXZlX2FuZF9pbnN0YWxsX3R4X2tleSgKKyAgICAgICBxcy0+cWNvbm4sIE5VTEwsIE5VTEwsIE5VTEwsIGxldmVsLCB0eF9zZWNyZXQsIHNlY3JldGxlbikgIT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZihsZXZlbCA9PSBOR1RDUDJfQ1JZUFRPX0xFVkVMX0FQUCkgeworICAgIGlmKGluaXRfbmdoM19jb25uKHFzKSAhPSBDVVJMRV9PSykKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcXVpY19hZGRfaGFuZHNoYWtlX2RhdGEoU1NMICpzc2wsIE9TU0xfRU5DUllQVElPTl9MRVZFTCBvc3NsX2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKilTU0xfZ2V0X2FwcF9kYXRhKHNzbCk7CisgIG5ndGNwMl9jcnlwdG9fbGV2ZWwgbGV2ZWwgPSBxdWljX2Zyb21fb3NzbF9sZXZlbChvc3NsX2xldmVsKTsKKworICByZXR1cm4gd3JpdGVfY2xpZW50X2hhbmRzaGFrZShxcywgbGV2ZWwsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgcXVpY19mbHVzaF9mbGlnaHQoU1NMICpzc2wpCit7CisgICh2b2lkKXNzbDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcXVpY19zZW5kX2FsZXJ0KFNTTCAqc3NsLCBlbnVtIHNzbF9lbmNyeXB0aW9uX2xldmVsX3QgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFsZXJ0KQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKilTU0xfZ2V0X2FwcF9kYXRhKHNzbCk7CisgICh2b2lkKWxldmVsOworCisgIHFzLT50bHNfYWxlcnQgPSBhbGVydDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBTU0xfUVVJQ19NRVRIT0QgcXVpY19tZXRob2QgPSB7cXVpY19zZXRfZW5jcnlwdGlvbl9zZWNyZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWljX2FkZF9oYW5kc2hha2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpY19mbHVzaF9mbGlnaHQsIHF1aWNfc2VuZF9hbGVydH07CisKK3N0YXRpYyBTU0xfQ1RYICpxdWljX3NzbF9jdHgoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKK3sKKyAgU1NMX0NUWCAqc3NsX2N0eCA9IFNTTF9DVFhfbmV3KFRMU19tZXRob2QoKSk7CisKKyAgU1NMX0NUWF9zZXRfbWluX3Byb3RvX3ZlcnNpb24oc3NsX2N0eCwgVExTMV8zX1ZFUlNJT04pOworICBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihzc2xfY3R4LCBUTFMxXzNfVkVSU0lPTik7CisKKyAgU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc3NsX2N0eCk7CisKKyAgaWYoU1NMX0NUWF9zZXRfY2lwaGVyc3VpdGVzKHNzbF9jdHgsIFFVSUNfQ0lQSEVSUykgIT0gMSkgeworICAgIGNoYXIgZXJyb3JfYnVmZmVyWzI1Nl07CisgICAgRVJSX2Vycm9yX3N0cmluZ19uKEVSUl9nZXRfZXJyb3IoKSwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSk7CisgICAgZmFpbGYoZGF0YSwgIlNTTF9DVFhfc2V0X2NpcGhlcnN1aXRlczogJXMiLCBlcnJvcl9idWZmZXIpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaWYoU1NMX0NUWF9zZXQxX2dyb3Vwc19saXN0KHNzbF9jdHgsIFFVSUNfR1JPVVBTKSAhPSAxKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTF9DVFhfc2V0MV9ncm91cHNfbGlzdCBmYWlsZWQiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIFNTTF9DVFhfc2V0X3F1aWNfbWV0aG9kKHNzbF9jdHgsICZxdWljX21ldGhvZCk7CisKKyAgLyogT3BlbiB0aGUgZmlsZSBpZiBhIFRMUyBvciBRVUlDIGJhY2tlbmQgaGFzIG5vdCBkb25lIHRoaXMgYmVmb3JlLiAqLworICBDdXJsX3Rsc19rZXlsb2dfb3BlbigpOworICBpZihDdXJsX3Rsc19rZXlsb2dfZW5hYmxlZCgpKSB7CisgICAgU1NMX0NUWF9zZXRfa2V5bG9nX2NhbGxiYWNrKHNzbF9jdHgsIGtleWxvZ19jYWxsYmFjayk7CisgIH0KKworICByZXR1cm4gc3NsX2N0eDsKK30KKworLyoqIFNTTCBjYWxsYmFja3MgKioqLworCitzdGF0aWMgaW50IHF1aWNfaW5pdF9zc2woc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBjb25zdCB1aW50OF90ICphbHBuID0gTlVMTDsKKyAgc2l6ZV90IGFscG5sZW4gPSAwOworICAvKiB0aGlzIHdpbGwgbmVlZCBzb21lIGF0dGVudGlvbiB3aGVuIEhUVFBTIHByb3h5IG92ZXIgUVVJQyBnZXQgZml4ZWQgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gcXMtPmNvbm4tPmhvc3QubmFtZTsKKworICBERUJVR0FTU0VSVCghcXMtPnNzbCk7CisgIHFzLT5zc2wgPSBTU0xfbmV3KHFzLT5zc2xjdHgpOworCisgIFNTTF9zZXRfYXBwX2RhdGEocXMtPnNzbCwgcXMpOworICBTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUocXMtPnNzbCk7CisKKyAgc3dpdGNoKHFzLT52ZXJzaW9uKSB7CisjaWZkZWYgTkdUQ1AyX1BST1RPX1ZFUgorICBjYXNlIE5HVENQMl9QUk9UT19WRVI6CisgICAgYWxwbiA9IChjb25zdCB1aW50OF90ICopTkdIVFRQM19BTFBOX0gzOworICAgIGFscG5sZW4gPSBzaXplb2YoTkdIVFRQM19BTFBOX0gzKSAtIDE7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgfQorICBpZihhbHBuKQorICAgIFNTTF9zZXRfYWxwbl9wcm90b3MocXMtPnNzbCwgYWxwbiwgKGludClhbHBubGVuKTsKKworICAvKiBzZXQgU05JICovCisgIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShxcy0+c3NsLCBob3N0bmFtZSk7CisgIHJldHVybiAwOworfQorI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorc3RhdGljIGludCBzZWNyZXRfZnVuYyhnbnV0bHNfc2Vzc2lvbl90IHNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgZ251dGxzX3JlY29yZF9lbmNyeXB0aW9uX2xldmVsX3QgZ3Rsc19sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcnhfc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp0eF9zZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGdudXRsc19zZXNzaW9uX2dldF9wdHIoc3NsKTsKKyAgaW50IGxldmVsID0gcXVpY19mcm9tX2d0bHNfbGV2ZWwoZ3Rsc19sZXZlbCk7CisKKyAgaWYobGV2ZWwgIT0gTkdUQ1AyX0NSWVBUT19MRVZFTF9FQVJMWSAmJgorICAgICBuZ3RjcDJfY3J5cHRvX2Rlcml2ZV9hbmRfaW5zdGFsbF9yeF9rZXkoCisgICAgICAgcXMtPnFjb25uLCBOVUxMLCBOVUxMLCBOVUxMLCBsZXZlbCwgcnhfc2VjcmV0LCBzZWNyZXRsZW4pICE9IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYobmd0Y3AyX2NyeXB0b19kZXJpdmVfYW5kX2luc3RhbGxfdHhfa2V5KAorICAgICAgIHFzLT5xY29ubiwgTlVMTCwgTlVMTCwgTlVMTCwgbGV2ZWwsIHR4X3NlY3JldCwgc2VjcmV0bGVuKSAhPSAwKQorICAgIHJldHVybiAwOworCisgIGlmKGxldmVsID09IE5HVENQMl9DUllQVE9fTEVWRUxfQVBQKSB7CisgICAgaWYoaW5pdF9uZ2gzX2Nvbm4ocXMpICE9IENVUkxFX09LKQorICAgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9mdW5jKGdudXRsc19zZXNzaW9uX3Qgc3NsLAorICAgICAgICAgICAgICAgICAgICAgZ251dGxzX3JlY29yZF9lbmNyeXB0aW9uX2xldmVsX3QgZ3Rsc19sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgIGdudXRsc19oYW5kc2hha2VfZGVzY3JpcHRpb25fdCBodHlwZSwgY29uc3Qgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGdudXRsc19zZXNzaW9uX2dldF9wdHIoc3NsKTsKKyAgbmd0Y3AyX2NyeXB0b19sZXZlbCBsZXZlbCA9IHF1aWNfZnJvbV9ndGxzX2xldmVsKGd0bHNfbGV2ZWwpOworICBpbnQgcnY7CisKKyAgaWYoaHR5cGUgPT0gR05VVExTX0hBTkRTSEFLRV9DSEFOR0VfQ0lQSEVSX1NQRUMpCisgICAgcmV0dXJuIDA7CisKKyAgcnYgPSB3cml0ZV9jbGllbnRfaGFuZHNoYWtlKHFzLCBsZXZlbCwgZGF0YSwgbGVuKTsKKyAgaWYocnYgPT0gMCkKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxlcnRfcmVhZF9mdW5jKGdudXRsc19zZXNzaW9uX3Qgc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ251dGxzX3JlY29yZF9lbmNyeXB0aW9uX2xldmVsX3QgZ3Rsc19sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdudXRsc19hbGVydF9sZXZlbF90IGFsZXJ0X2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ251dGxzX2FsZXJ0X2Rlc2NyaXB0aW9uX3QgYWxlcnRfZGVzYykKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gZ251dGxzX3Nlc3Npb25fZ2V0X3B0cihzc2wpOworICAodm9pZClndGxzX2xldmVsOworICAodm9pZClhbGVydF9sZXZlbDsKKworICBxcy0+dGxzX2FsZXJ0ID0gYWxlcnRfZGVzYzsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdHBfcmVjdl9mdW5jKGdudXRsc19zZXNzaW9uX3Qgc3NsLCBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gZ251dGxzX3Nlc3Npb25fZ2V0X3B0cihzc2wpOworICBuZ3RjcDJfdHJhbnNwb3J0X3BhcmFtcyBwYXJhbXM7CisKKyAgaWYobmd0Y3AyX2RlY29kZV90cmFuc3BvcnRfcGFyYW1zKAorICAgICAgICZwYXJhbXMsIE5HVENQMl9UUkFOU1BPUlRfUEFSQU1TX1RZUEVfRU5DUllQVEVEX0VYVEVOU0lPTlMsCisgICAgICAgZGF0YSwgZGF0YV9zaXplKSAhPSAwKQorICAgIHJldHVybiAtMTsKKworICBpZihuZ3RjcDJfY29ubl9zZXRfcmVtb3RlX3RyYW5zcG9ydF9wYXJhbXMocXMtPnFjb25uLCAmcGFyYW1zKSAhPSAwKQorICAgIHJldHVybiAtMTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cF9zZW5kX2Z1bmMoZ251dGxzX3Nlc3Npb25fdCBzc2wsIGdudXRsc19idWZmZXJfdCBleHRkYXRhKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSBnbnV0bHNfc2Vzc2lvbl9nZXRfcHRyKHNzbCk7CisgIHVpbnQ4X3QgcGFyYW1zYnVmWzY0XTsKKyAgbmd0Y3AyX3RyYW5zcG9ydF9wYXJhbXMgcGFyYW1zOworICBzc2l6ZV90IG53cml0ZTsKKyAgaW50IHJjOworCisgIG5ndGNwMl9jb25uX2dldF9sb2NhbF90cmFuc3BvcnRfcGFyYW1zKHFzLT5xY29ubiwgJnBhcmFtcyk7CisgIG53cml0ZSA9IG5ndGNwMl9lbmNvZGVfdHJhbnNwb3J0X3BhcmFtcygKKyAgICBwYXJhbXNidWYsIHNpemVvZihwYXJhbXNidWYpLCBOR1RDUDJfVFJBTlNQT1JUX1BBUkFNU19UWVBFX0NMSUVOVF9IRUxMTywKKyAgICAmcGFyYW1zKTsKKyAgaWYobndyaXRlIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwgIm5ndGNwMl9lbmNvZGVfdHJhbnNwb3J0X3BhcmFtczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgbmd0Y3AyX3N0cmVycm9yKChpbnQpbndyaXRlKSkpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJjID0gZ251dGxzX2J1ZmZlcl9hcHBlbmRfZGF0YShleHRkYXRhLCBwYXJhbXNidWYsIG53cml0ZSk7CisgIGlmKHJjIDwgMCkKKyAgICByZXR1cm4gcmM7CisKKyAgcmV0dXJuIChpbnQpbndyaXRlOworfQorCitzdGF0aWMgaW50IHF1aWNfaW5pdF9zc2woc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBnbnV0bHNfZGF0dW1fdCBhbHBuID0ge05VTEwsIDB9OworICAvKiB0aGlzIHdpbGwgbmVlZCBzb21lIGF0dGVudGlvbiB3aGVuIEhUVFBTIHByb3h5IG92ZXIgUVVJQyBnZXQgZml4ZWQgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gcXMtPmNvbm4tPmhvc3QubmFtZTsKKyAgaW50IHJjOworCisgIERFQlVHQVNTRVJUKCFxcy0+c3NsKTsKKworICBnbnV0bHNfaW5pdCgmcXMtPnNzbCwgR05VVExTX0NMSUVOVCk7CisgIGdudXRsc19zZXNzaW9uX3NldF9wdHIocXMtPnNzbCwgcXMpOworCisgIHJjID0gZ251dGxzX3ByaW9yaXR5X3NldF9kaXJlY3QocXMtPnNzbCwgUVVJQ19QUklPUklUWSwgTlVMTCk7CisgIGlmKHJjIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwgImdudXRsc19wcmlvcml0eV9zZXRfZGlyZWN0IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgZ251dGxzX3N0cmVycm9yKHJjKSkpOworICAgIHJldHVybiAxOworICB9CisKKyAgZ251dGxzX2hhbmRzaGFrZV9zZXRfc2VjcmV0X2Z1bmN0aW9uKHFzLT5zc2wsIHNlY3JldF9mdW5jKTsKKyAgZ251dGxzX2hhbmRzaGFrZV9zZXRfcmVhZF9mdW5jdGlvbihxcy0+c3NsLCByZWFkX2Z1bmMpOworICBnbnV0bHNfYWxlcnRfc2V0X3JlYWRfZnVuY3Rpb24ocXMtPnNzbCwgYWxlcnRfcmVhZF9mdW5jKTsKKworICByYyA9IGdudXRsc19zZXNzaW9uX2V4dF9yZWdpc3Rlcihxcy0+c3NsLCAiUVVJQyBUcmFuc3BvcnQgUGFyYW1ldGVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZhNSwgR05VVExTX0VYVF9UTFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwX3JlY3ZfZnVuYywgdHBfc2VuZF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfRVhUX0ZMQUdfVExTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX0VYVF9GTEFHX0NMSUVOVF9IRUxMTyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVVRMU19FWFRfRkxBR19FRSk7CisgIGlmKHJjIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwgImdudXRsc19zZXNzaW9uX2V4dF9yZWdpc3RlciBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYykpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIC8qIE9wZW4gdGhlIGZpbGUgaWYgYSBUTFMgb3IgUVVJQyBiYWNrZW5kIGhhcyBub3QgZG9uZSB0aGlzIGJlZm9yZS4gKi8KKyAgQ3VybF90bHNfa2V5bG9nX29wZW4oKTsKKyAgaWYoQ3VybF90bHNfa2V5bG9nX2VuYWJsZWQoKSkgeworICAgIGdudXRsc19zZXNzaW9uX3NldF9rZXlsb2dfZnVuY3Rpb24ocXMtPnNzbCwga2V5bG9nX2NhbGxiYWNrKTsKKyAgfQorCisgIGlmKHFzLT5jcmVkKQorICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9mcmVlX2NyZWRlbnRpYWxzKHFzLT5jcmVkKTsKKworICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVkZW50aWFscygmcXMtPmNyZWQpOworICBpZihyYyA8IDApIHsKKyAgICBIM0JVR0YoZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgImdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVkZW50aWFscyBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYykpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJjID0gZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X3N5c3RlbV90cnVzdChxcy0+Y3JlZCk7CisgIGlmKHJjIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAiZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X3N5c3RlbV90cnVzdCBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYykpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJjID0gZ251dGxzX2NyZWRlbnRpYWxzX3NldChxcy0+c3NsLCBHTlVUTFNfQ1JEX0NFUlRJRklDQVRFLCBxcy0+Y3JlZCk7CisgIGlmKHJjIDwgMCkgeworICAgIEgzQlVHRihmcHJpbnRmKHN0ZGVyciwgImdudXRsc19jcmVkZW50aWFsc19zZXQgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBnbnV0bHNfc3RyZXJyb3IocmMpKSk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBzd2l0Y2gocXMtPnZlcnNpb24pIHsKKyNpZmRlZiBOR1RDUDJfUFJPVE9fVkVSCisgIGNhc2UgTkdUQ1AyX1BST1RPX1ZFUjoKKyAgICAvKiBzdHJpcCB0aGUgZmlyc3QgYnl0ZSAodGhlIGxlbmd0aCkgZnJvbSBOR0hUVFAzX0FMUE5fSDMgKi8KKyAgICBhbHBuLmRhdGEgPSAodW5zaWduZWQgY2hhciAqKU5HSFRUUDNfQUxQTl9IMyArIDE7CisgICAgYWxwbi5zaXplID0gc2l6ZW9mKE5HSFRUUDNfQUxQTl9IMykgLSAyOworICAgIGJyZWFrOworI2VuZGlmCisgIH0KKyAgaWYoYWxwbi5kYXRhKQorICAgIGdudXRsc19hbHBuX3NldF9wcm90b2NvbHMocXMtPnNzbCwgJmFscG4sIDEsIDApOworCisgIC8qIHNldCBTTkkgKi8KKyAgZ251dGxzX3NlcnZlcl9uYW1lX3NldChxcy0+c3NsLCBHTlVUTFNfTkFNRV9ETlMsIGhvc3RuYW1lLCBzdHJsZW4oaG9zdG5hbWUpKTsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorY2JfcmVjdl9jcnlwdG9fZGF0YShuZ3RjcDJfY29ubiAqdGNvbm4sIG5ndGNwMl9jcnlwdG9fbGV2ZWwgY3J5cHRvX2xldmVsLAorICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisgICh2b2lkKW9mZnNldDsKKyAgKHZvaWQpdXNlcl9kYXRhOworCisgIGlmKG5ndGNwMl9jcnlwdG9fcmVhZF93cml0ZV9jcnlwdG9fZGF0YSh0Y29ubiwgY3J5cHRvX2xldmVsLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWxlbikgIT0gMCkKKyAgICByZXR1cm4gTkdUQ1AyX0VSUl9DUllQVE87CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaGFuZHNoYWtlX2NvbXBsZXRlZChuZ3RjcDJfY29ubiAqdGNvbm4sIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICAodm9pZCl0Y29ubjsKKyAgaW5mb2YocXMtPmNvbm4tPmRhdGEsICJRVUlDIGhhbmRzaGFrZSBpcyBjb21wbGV0ZWRcbiIpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBleHRlbmRfc3RyZWFtX3dpbmRvdyhuZ3RjcDJfY29ubiAqdGNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgSFRUUCAqc3RyZWFtKQoreworICBzaXplX3QgdGhpc211Y2ggPSBzdHJlYW0tPnVuYWNrZWRfd2luZG93OworICBuZ3RjcDJfY29ubl9leHRlbmRfbWF4X3N0cmVhbV9vZmZzZXQodGNvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCwgdGhpc211Y2gpOworICBuZ3RjcDJfY29ubl9leHRlbmRfbWF4X29mZnNldCh0Y29ubiwgdGhpc211Y2gpOworICBzdHJlYW0tPnVuYWNrZWRfd2luZG93ID0gMDsKK30KKworCitzdGF0aWMgaW50IGNiX3JlY3Zfc3RyZWFtX2RhdGEobmd0Y3AyX2Nvbm4gKnRjb25uLCB1aW50MzJfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHN0cmVhbV9pZCwgdWludDY0X3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgc3NpemVfdCBuY29uc3VtZWQ7CisgIGludCBmaW4gPSBmbGFncyAmIE5HVENQMl9TVFJFQU1fREFUQV9GTEFHX0ZJTiA/IDEgOiAwOworICAodm9pZClvZmZzZXQ7CisgICh2b2lkKXN0cmVhbV91c2VyX2RhdGE7CisKKyAgbmNvbnN1bWVkID0KKyAgICBuZ2h0dHAzX2Nvbm5fcmVhZF9zdHJlYW0ocXMtPmgzY29ubiwgc3RyZWFtX2lkLCBidWYsIGJ1ZmxlbiwgZmluKTsKKyAgaWYobmNvbnN1bWVkIDwgMCkgeworICAgIGZhaWxmKHFzLT5jb25uLT5kYXRhLCAibmdodHRwM19jb25uX3JlYWRfc3RyZWFtIHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKChpbnQpbmNvbnN1bWVkKSk7CisgICAgcmV0dXJuIE5HVENQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIC8qIG51bWJlciBvZiBieXRlcyBpbnNpZGUgYnVmbGVuIHdoaWNoIGNvbnNpc3RzIG9mIGZyYW1pbmcgb3ZlcmhlYWQKKyAgICogaW5jbHVkaW5nIFFQQUNLIEhFQURFUlMuIEluIG90aGVyIHdvcmRzLCBpdCBkb2VzIG5vdCBjb25zdW1lIHBheWxvYWQgb2YKKyAgICogREFUQSBmcmFtZS4gKi8KKyAgbmd0Y3AyX2Nvbm5fZXh0ZW5kX21heF9zdHJlYW1fb2Zmc2V0KHRjb25uLCBzdHJlYW1faWQsIG5jb25zdW1lZCk7CisgIG5ndGNwMl9jb25uX2V4dGVuZF9tYXhfb2Zmc2V0KHRjb25uLCBuY29uc3VtZWQpOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitjYl9hY2tlZF9zdHJlYW1fZGF0YV9vZmZzZXQobmd0Y3AyX2Nvbm4gKnRjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBvZmZzZXQsIHNpemVfdCBkYXRhbGVuLCB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICBpbnQgcnY7CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpdGNvbm47CisgICh2b2lkKW9mZnNldDsKKyAgKHZvaWQpZGF0YWxlbjsKKyAgKHZvaWQpc3RyZWFtX3VzZXJfZGF0YTsKKworICBydiA9IG5naHR0cDNfY29ubl9hZGRfYWNrX29mZnNldChxcy0+aDNjb25uLCBzdHJlYW1faWQsIGRhdGFsZW4pOworICBpZihydiAhPSAwKSB7CisgICAgZmFpbGYocXMtPmNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fYWRkX2Fja19vZmZzZXQgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IocnYpKTsKKyAgICByZXR1cm4gTkdUQ1AyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2Jfc3RyZWFtX2Nsb3NlKG5ndGNwMl9jb25uICp0Y29ubiwgaW50NjRfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBhcHBfZXJyb3JfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICBpbnQgcnY7CisgICh2b2lkKXRjb25uOworICAodm9pZClzdHJlYW1fdXNlcl9kYXRhOworICAvKiBzdHJlYW0gaXMgY2xvc2VkLi4uICovCisKKyAgcnYgPSBuZ2h0dHAzX2Nvbm5fY2xvc2Vfc3RyZWFtKHFzLT5oM2Nvbm4sIHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcF9lcnJvcl9jb2RlKTsKKyAgaWYocnYgIT0gMCkgeworICAgIGZhaWxmKHFzLT5jb25uLT5kYXRhLCAibmdodHRwM19jb25uX2Nsb3NlX3N0cmVhbSByZXR1cm5lZCBlcnJvcjogJXNcbiIsCisgICAgICAgICAgbmdodHRwM19zdHJlcnJvcihydikpOworICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYl9zdHJlYW1fcmVzZXQobmd0Y3AyX2Nvbm4gKnRjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZpbmFsX3NpemUsIHVpbnQ2NF90IGFwcF9lcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAoc3RydWN0IHF1aWNzb2NrZXQgKil1c2VyX2RhdGE7CisgIGludCBydjsKKyAgKHZvaWQpdGNvbm47CisgICh2b2lkKWZpbmFsX3NpemU7CisgICh2b2lkKWFwcF9lcnJvcl9jb2RlOworICAodm9pZClzdHJlYW1fdXNlcl9kYXRhOworCisgIHJ2ID0gbmdodHRwM19jb25uX3Jlc2V0X3N0cmVhbShxcy0+aDNjb25uLCBzdHJlYW1faWQpOworICBpZihydiAhPSAwKSB7CisgICAgZmFpbGYocXMtPmNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fcmVzZXRfc3RyZWFtIHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKHJ2KSk7CisgICAgcmV0dXJuIE5HVENQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNiX2V4dGVuZF9tYXhfbG9jYWxfc3RyZWFtc19iaWRpKG5ndGNwMl9jb25uICp0Y29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWF4X3N0cmVhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgKHZvaWQpdGNvbm47CisgICh2b2lkKW1heF9zdHJlYW1zOworICAodm9pZCl1c2VyX2RhdGE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfZXh0ZW5kX21heF9zdHJlYW1fZGF0YShuZ3RjcDJfY29ubiAqdGNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heF9kYXRhLCB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gKHN0cnVjdCBxdWljc29ja2V0ICopdXNlcl9kYXRhOworICBpbnQgcnY7CisgICh2b2lkKXRjb25uOworICAodm9pZCltYXhfZGF0YTsKKyAgKHZvaWQpc3RyZWFtX3VzZXJfZGF0YTsKKworICBydiA9IG5naHR0cDNfY29ubl91bmJsb2NrX3N0cmVhbShxcy0+aDNjb25uLCBzdHJlYW1faWQpOworICBpZihydiAhPSAwKSB7CisgICAgZmFpbGYocXMtPmNvbm4tPmRhdGEsICJuZ2h0dHAzX2Nvbm5fdW5ibG9ja19zdHJlYW0gcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IocnYpKTsKKyAgICByZXR1cm4gTkdUQ1AyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfZ2V0X25ld19jb25uZWN0aW9uX2lkKG5ndGNwMl9jb25uICp0Y29ubiwgbmd0Y3AyX2NpZCAqY2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdG9rZW4sIHNpemVfdCBjaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IChzdHJ1Y3QgcXVpY3NvY2tldCAqKXVzZXJfZGF0YTsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICAodm9pZCl0Y29ubjsKKworICByZXN1bHQgPSBDdXJsX3JhbmQocXMtPmNvbm4tPmRhdGEsIGNpZC0+ZGF0YSwgY2lkbGVuKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIGNpZC0+ZGF0YWxlbiA9IGNpZGxlbjsKKworICByZXN1bHQgPSBDdXJsX3JhbmQocXMtPmNvbm4tPmRhdGEsIHRva2VuLCBOR1RDUDJfU1RBVEVMRVNTX1JFU0VUX1RPS0VOTEVOKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiBOR1RDUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBuZ3RjcDJfY29ubl9jYWxsYmFja3MgbmdfY2FsbGJhY2tzID0geworICBuZ3RjcDJfY3J5cHRvX2NsaWVudF9pbml0aWFsX2NiLAorICBOVUxMLCAvKiByZWN2X2NsaWVudF9pbml0aWFsICovCisgIGNiX3JlY3ZfY3J5cHRvX2RhdGEsCisgIGNiX2hhbmRzaGFrZV9jb21wbGV0ZWQsCisgIE5VTEwsIC8qIHJlY3ZfdmVyc2lvbl9uZWdvdGlhdGlvbiAqLworICBuZ3RjcDJfY3J5cHRvX2VuY3J5cHRfY2IsCisgIG5ndGNwMl9jcnlwdG9fZGVjcnlwdF9jYiwKKyAgbmd0Y3AyX2NyeXB0b19ocF9tYXNrX2NiLAorICBjYl9yZWN2X3N0cmVhbV9kYXRhLAorICBOVUxMLCAvKiBhY2tlZF9jcnlwdG9fb2Zmc2V0ICovCisgIGNiX2Fja2VkX3N0cmVhbV9kYXRhX29mZnNldCwKKyAgTlVMTCwgLyogc3RyZWFtX29wZW4gKi8KKyAgY2Jfc3RyZWFtX2Nsb3NlLAorICBOVUxMLCAvKiByZWN2X3N0YXRlbGVzc19yZXNldCAqLworICBuZ3RjcDJfY3J5cHRvX3JlY3ZfcmV0cnlfY2IsCisgIGNiX2V4dGVuZF9tYXhfbG9jYWxfc3RyZWFtc19iaWRpLAorICBOVUxMLCAvKiBleHRlbmRfbWF4X2xvY2FsX3N0cmVhbXNfdW5pICovCisgIE5VTEwsIC8qIHJhbmQgICovCisgIGNiX2dldF9uZXdfY29ubmVjdGlvbl9pZCwKKyAgTlVMTCwgLyogcmVtb3ZlX2Nvbm5lY3Rpb25faWQgKi8KKyAgbmd0Y3AyX2NyeXB0b191cGRhdGVfa2V5X2NiLCAvKiB1cGRhdGVfa2V5ICovCisgIE5VTEwsIC8qIHBhdGhfdmFsaWRhdGlvbiAqLworICBOVUxMLCAvKiBzZWxlY3RfcHJlZmVycmVkX2FkZHIgKi8KKyAgY2Jfc3RyZWFtX3Jlc2V0LAorICBOVUxMLCAvKiBleHRlbmRfbWF4X3JlbW90ZV9zdHJlYW1zX2JpZGkgKi8KKyAgTlVMTCwgLyogZXh0ZW5kX21heF9yZW1vdGVfc3RyZWFtc191bmkgKi8KKyAgY2JfZXh0ZW5kX21heF9zdHJlYW1fZGF0YSwKKyAgTlVMTCwgLyogZGNpZF9zdGF0dXMgKi8KKyAgTlVMTCwgLyogaGFuZHNoYWtlX2NvbmZpcm1lZCAqLworICBOVUxMLCAvKiByZWN2X25ld190b2tlbiAqLworICBuZ3RjcDJfY3J5cHRvX2RlbGV0ZV9jcnlwdG9fYWVhZF9jdHhfY2IsCisgIG5ndGNwMl9jcnlwdG9fZGVsZXRlX2NyeXB0b19jaXBoZXJfY3R4X2NiCit9OworCisvKgorICogTWlnaHQgYmUgY2FsbGVkIHR3aWNlIGZvciBoYXBweSBleWViYWxscy4KKyAqLworQ1VSTGNvZGUgQ3VybF9xdWljX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pCit7CisgIGludCByYzsKKyAgaW50IHJ2OworICBDVVJMY29kZSByZXN1bHQ7CisgIG5ndGNwMl9wYXRoIHBhdGg7IC8qIFRPRE86IHRoaXMgbXVzdCBiZSBpbml0aWFsaXplZCBwcm9wZXJseSAqLworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gJmNvbm4tPmhlcXVpY1tzb2NraW5kZXhdOworICBjaGFyIGlwYnVmWzQwXTsKKyAgbG9uZyBwb3J0OworICBpbnQgcWZkOworCisgIGlmKHFzLT5jb25uKQorICAgIEN1cmxfcXVpY19kaXNjb25uZWN0KGNvbm4sIHNvY2tpbmRleCk7CisgIHFzLT5jb25uID0gY29ubjsKKworICAvKiBleHRyYWN0IHRoZSB1c2VkIGFkZHJlc3MgYXMgYSBzdHJpbmcgKi8KKyAgaWYoIUN1cmxfYWRkcjJzdHJpbmcoKHN0cnVjdCBzb2NrYWRkciopYWRkciwgYWRkcmxlbiwgaXBidWYsICZwb3J0KSkgeworICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CisgICAgZmFpbGYoZGF0YSwgInNzcmVtIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgU09DS0VSUk5PLCBDdXJsX3N0cmVycm9yKFNPQ0tFUlJOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgIH0KKworICBpbmZvZihkYXRhLCAiQ29ubmVjdCBzb2NrZXQgJWQgb3ZlciBRVUlDIHRvICVzOiVsZFxuIiwKKyAgICAgICAgc29ja2ZkLCBpcGJ1ZiwgcG9ydCk7CisKKyAgcXMtPnZlcnNpb24gPSBOR1RDUDJfUFJPVE9fVkVSOworI2lmZGVmIFVTRV9PUEVOU1NMCisgIHFzLT5zc2xjdHggPSBxdWljX3NzbF9jdHgoZGF0YSk7CisgIGlmKCFxcy0+c3NsY3R4KQorICAgIHJldHVybiBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisjZW5kaWYKKworICBpZihxdWljX2luaXRfc3NsKHFzKSkKKyAgICByZXR1cm4gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworCisgIHFzLT5kY2lkLmRhdGFsZW4gPSBOR1RDUDJfTUFYX0NJRExFTjsKKyAgcmVzdWx0ID0gQ3VybF9yYW5kKGRhdGEsIHFzLT5kY2lkLmRhdGEsIE5HVENQMl9NQVhfQ0lETEVOKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgcXMtPnNjaWQuZGF0YWxlbiA9IE5HVENQMl9NQVhfQ0lETEVOOworICByZXN1bHQgPSBDdXJsX3JhbmQoZGF0YSwgcXMtPnNjaWQuZGF0YSwgTkdUQ1AyX01BWF9DSURMRU4pOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAodm9pZClDdXJsX3Fsb2dkaXIoZGF0YSwgcXMtPnNjaWQuZGF0YSwgTkdUQ1AyX01BWF9DSURMRU4sICZxZmQpOworICBxcy0+cWxvZ2ZkID0gcWZkOyAvKiAtMSBpZiBmYWlsdXJlIGFib3ZlICovCisgIHF1aWNfc2V0dGluZ3MocXMsIGRhdGEtPnNldC5idWZmZXJfc2l6ZSk7CisKKyAgcXMtPmxvY2FsX2FkZHJsZW4gPSBzaXplb2YocXMtPmxvY2FsX2FkZHIpOworICBydiA9IGdldHNvY2tuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZxcy0+bG9jYWxfYWRkciwKKyAgICAgICAgICAgICAgICAgICAmcXMtPmxvY2FsX2FkZHJsZW4pOworICBpZihydiA9PSAtMSkKKyAgICByZXR1cm4gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworCisgIG5ndGNwMl9hZGRyX2luaXQoJnBhdGgubG9jYWwsICh1aW50OF90ICopJnFzLT5sb2NhbF9hZGRyLCBxcy0+bG9jYWxfYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgbmd0Y3AyX2FkZHJfaW5pdCgmcGF0aC5yZW1vdGUsICh1aW50OF90KilhZGRyLCBhZGRybGVuLCBOVUxMKTsKKworI2lmZGVmIE5HVENQMl9QUk9UT19WRVIKKyNkZWZpbmUgUVVJQ1ZFUiBOR1RDUDJfUFJPVE9fVkVSCisjZWxzZQorI2Vycm9yICJ1bnN1cHBvcnRlZCBuZ3RjcDIgdmVyc2lvbiIKKyNlbmRpZgorICByYyA9IG5ndGNwMl9jb25uX2NsaWVudF9uZXcoJnFzLT5xY29ubiwgJnFzLT5kY2lkLCAmcXMtPnNjaWQsICZwYXRoLCBRVUlDVkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5nX2NhbGxiYWNrcywgJnFzLT5zZXR0aW5ncywgTlVMTCwgcXMpOworICBpZihyYykKKyAgICByZXR1cm4gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworCisgIG5ndGNwMl9jb25uX3NldF90bHNfbmF0aXZlX2hhbmRsZShxcy0+cWNvbm4sIHFzLT5zc2wpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIFN0b3JlIG5ndHAyIHZlcnNpb24gaW5mbyBpbiB0aGlzIGJ1ZmZlciwgUHJlZml4IHdpdGggYSBzcGFjZS4gIFJldHVybiB0b3RhbAorICogbGVuZ3RoIHdyaXR0ZW4uCisgKi8KK2ludCBDdXJsX3F1aWNfdmVyKGNoYXIgKnAsIHNpemVfdCBsZW4pCit7CisgIG5ndGNwMl9pbmZvICpuZzIgPSBuZ3RjcDJfdmVyc2lvbigwKTsKKyAgbmdodHRwM19pbmZvICpodDMgPSBuZ2h0dHAzX3ZlcnNpb24oMCk7CisgIHJldHVybiBtc25wcmludGYocCwgbGVuLCAibmd0Y3AyLyVzIG5naHR0cDMvJXMiLAorICAgICAgICAgICAgICAgICAgIG5nMi0+dmVyc2lvbl9zdHIsIGh0My0+dmVyc2lvbl9zdHIpOworfQorCitzdGF0aWMgaW50IG5nX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmY29ubi0+ZGF0YS0+cmVxOworICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKKworICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworCisgIC8qIGluIGEgSFRUUC8yIGNvbm5lY3Rpb24gd2UgY2FuIGJhc2ljYWxseSBhbHdheXMgZ2V0IGEgZnJhbWUgc28gd2Ugc2hvdWxkCisgICAgIGFsd2F5cyBiZSByZWFkeSBmb3Igb25lICovCisgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKKworICAvKiB3ZSdyZSBzdGlsbCB1cGxvYWRpbmcgb3IgdGhlIEhUVFAvMiBsYXllciB3YW50cyB0byBzZW5kIGRhdGEgKi8KKyAgaWYoKGstPmtlZXBvbiAmIChLRUVQX1NFTkR8S0VFUF9TRU5EX1BBVVNFKSkgPT0gS0VFUF9TRU5EKQorICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgcmV0dXJuIGJpdG1hcDsKK30KKworc3RhdGljIGludCBuZ19wZXJmb3JtX2dldHNvY2soY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MpCit7CisgIHJldHVybiBuZ19nZXRzb2NrKChzdHJ1Y3QgY29ubmVjdGRhdGEgKiljb25uLCBzb2Nrcyk7Cit9CisKK3N0YXRpYyB2b2lkIHFzX2Rpc2Nvbm5lY3Qoc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBpbnQgaTsKKyAgaWYoIXFzLT5jb25uKSAvKiBhbHJlYWR5IGNsb3NlZCAqLworICAgIHJldHVybjsKKyAgcXMtPmNvbm4gPSBOVUxMOworICBpZihxcy0+cWxvZ2ZkICE9IC0xKSB7CisgICAgY2xvc2UocXMtPnFsb2dmZCk7CisgICAgcXMtPnFsb2dmZCA9IC0xOworICB9CisgIGlmKHFzLT5zc2wpCisjaWZkZWYgVVNFX09QRU5TU0wKKyAgICBTU0xfZnJlZShxcy0+c3NsKTsKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKyAgICBnbnV0bHNfZGVpbml0KHFzLT5zc2wpOworI2VuZGlmCisgIHFzLT5zc2wgPSBOVUxMOworI2lmZGVmIFVTRV9HTlVUTFMKKyAgaWYocXMtPmNyZWQpCisgICAgZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY3JlZGVudGlhbHMocXMtPmNyZWQpOworI2VuZGlmCisgIGZvcihpID0gMDsgaSA8IDM7IGkrKykKKyAgICBDdXJsX3NhZmVmcmVlKHFzLT5jcnlwdG9fZGF0YVtpXS5idWYpOworICBuZ2h0dHAzX2Nvbm5fZGVsKHFzLT5oM2Nvbm4pOworICBuZ3RjcDJfY29ubl9kZWwocXMtPnFjb25uKTsKKyNpZmRlZiBVU0VfT1BFTlNTTAorICBTU0xfQ1RYX2ZyZWUocXMtPnNzbGN0eCk7CisjZW5kaWYKK30KKwordm9pZCBDdXJsX3F1aWNfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1waW5kZXgpCit7CisgIGlmKGNvbm4tPnRyYW5zcG9ydCA9PSBUUk5TUFJUX1FVSUMpCisgICAgcXNfZGlzY29ubmVjdCgmY29ubi0+aGVxdWljW3RlbXBpbmRleF0pOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbmdfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgKHZvaWQpZGVhZF9jb25uZWN0aW9uOworICBDdXJsX3F1aWNfZGlzY29ubmVjdChjb25uLCAwKTsKKyAgQ3VybF9xdWljX2Rpc2Nvbm5lY3QoY29ubiwgMSk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBuZ19jb25uY2hlY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNoZWNrc190b19wZXJmb3JtKQoreworICAodm9pZCljb25uOworICAodm9pZCljaGVja3NfdG9fcGVyZm9ybTsKKyAgcmV0dXJuIENPTk5SRVNVTFRfTk9ORTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2h0dHAzID0geworICAiSFRUUFMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgQ3VybF9odHRwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBDdXJsX2h0dHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBuZ19nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgbmdfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgbmdfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgbmdfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIG5nX2Nvbm5jaGVjaywgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX0hUVFAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0hUVFBTLCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX1NTTCB8IFBST1RPUFRfU1RSRUFNICAgICAgICAgIC8qIGZsYWdzICovCit9OworCitzdGF0aWMgaW50IGNiX2gzX3N0cmVhbV9jbG9zZShuZ2h0dHAzX2Nvbm4gKmNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYXBwX2Vycm9yX2NvZGUsIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX2lkOworICAodm9pZClhcHBfZXJyb3JfY29kZTsKKyAgKHZvaWQpdXNlcl9kYXRhOworICBIM0JVR0YoaW5mb2YoZGF0YSwgImNiX2gzX3N0cmVhbV9jbG9zZSBDQUxMRURcbiIpKTsKKworICBzdHJlYW0tPmNsb3NlZCA9IFRSVUU7CisgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9RVUlDKTsKKyAgLyogbWFrZSBzdXJlIHRoYXQgbmdoM19zdHJlYW1fcmVjdiBpcyBjYWxsZWQgYWdhaW4gdG8gY29tcGxldGUgdGhlIHRyYW5zZmVyCisgICAgIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgcGFja2V0cyB0byBiZSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuICovCisgIGRhdGEtPnN0YXRlLmRyYWluID0gMTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiB3cml0ZV9kYXRhKCkgY29waWVzIGRhdGEgdG8gdGhlIHN0cmVhbSdzIHJlY2VpdmUgYnVmZmVyLiBJZiBub3QgZW5vdWdoCisgKiBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIHJlY2VpdmUgYnVmZmVyLCBpdCBjb3BpZXMgdGhlIHJlc3QgdG8gdGhlCisgKiBzdHJlYW0ncyBvdmVyZmxvdyBidWZmZXIuCisgKi8KK3N0YXRpYyBDVVJMY29kZSB3cml0ZV9kYXRhKHN0cnVjdCBIVFRQICpzdHJlYW0sIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IG1lbWxlbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGNvbnN0IGNoYXIgKmJ1ZiA9IG1lbTsKKyAgc2l6ZV90IG5jb3B5ID0gbWVtbGVuOworICAvKiBjb3B5IGFzIG11Y2ggYXMgcG9zc2libGUgdG8gdGhlIHJlY2VpdmUgYnVmZmVyICovCisgIGlmKHN0cmVhbS0+bGVuKSB7CisgICAgc2l6ZV90IGxlbiA9IENVUkxNSU4obmNvcHksIHN0cmVhbS0+bGVuKTsKKyAgICBtZW1jcHkoc3RyZWFtLT5tZW0sIGJ1ZiwgbGVuKTsKKyAgICBzdHJlYW0tPmxlbiAtPSBsZW47CisgICAgc3RyZWFtLT5tZW1sZW4gKz0gbGVuOworICAgIHN0cmVhbS0+bWVtICs9IGxlbjsKKyAgICBidWYgKz0gbGVuOworICAgIG5jb3B5IC09IGxlbjsKKyAgfQorICAvKiBjb3B5IHRoZSByZXN0IHRvIHRoZSBvdmVyZmxvdyBidWZmZXIgKi8KKyAgaWYobmNvcHkpCisgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkbigmc3RyZWFtLT5vdmVyZmxvdywgYnVmLCBuY29weSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfcmVjdl9kYXRhKG5naHR0cDNfY29ubiAqY29ubiwgaW50NjRfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWNvbm47CisKKyAgcmVzdWx0ID0gd3JpdGVfZGF0YShzdHJlYW0sIGJ1ZiwgYnVmbGVuKTsKKyAgaWYocmVzdWx0KSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHN0cmVhbS0+dW5hY2tlZF93aW5kb3cgKz0gYnVmbGVuOworICAodm9pZClzdHJlYW1faWQ7CisgICh2b2lkKXVzZXJfZGF0YTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfZGVmZXJyZWRfY29uc3VtZShuZ2h0dHAzX2Nvbm4gKmNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb25zdW1lZCwgdm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpCit7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IHVzZXJfZGF0YTsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX3VzZXJfZGF0YTsKKyAgKHZvaWQpc3RyZWFtX2lkOworCisgIG5ndGNwMl9jb25uX2V4dGVuZF9tYXhfc3RyZWFtX29mZnNldChxcy0+cWNvbm4sIHN0cmVhbV9pZCwgY29uc3VtZWQpOworICBuZ3RjcDJfY29ubl9leHRlbmRfbWF4X29mZnNldChxcy0+cWNvbm4sIGNvbnN1bWVkKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIERlY29kZSBIVFRQIHN0YXR1cyBjb2RlLiAgUmV0dXJucyAtMSBpZiBubyB2YWxpZCBzdGF0dXMgY29kZSB3YXMKKyAgIGRlY29kZWQuIChkdXBsaWNhdGUgZnJvbSBodHRwMi5jKSAqLworc3RhdGljIGludCBkZWNvZGVfc3RhdHVzX2NvZGUoY29uc3QgdWludDhfdCAqdmFsdWUsIHNpemVfdCBsZW4pCit7CisgIGludCBpOworICBpbnQgcmVzOworCisgIGlmKGxlbiAhPSAzKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmVzID0gMDsKKworICBmb3IoaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICBjaGFyIGMgPSB2YWx1ZVtpXTsKKworICAgIGlmKGMgPCAnMCcgfHwgYyA+ICc5JykgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJlcyAqPSAxMDsKKyAgICByZXMgKz0gYyAtICcwJzsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfZW5kX2hlYWRlcnMobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICAodm9pZCljb25uOworICAodm9pZClzdHJlYW1faWQ7CisgICh2b2lkKXVzZXJfZGF0YTsKKworICAvKiBhZGQgYSBDUkxGIG9ubHkgaWYgd2UndmUgcmVjZWl2ZWQgc29tZSBoZWFkZXJzICovCisgIGlmKHN0cmVhbS0+Zmlyc3RoZWFkZXIpIHsKKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKHN0cmVhbSwgIlxyXG4iLCAyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfcmVjdl9oZWFkZXIobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB0b2tlbiwgbmdodHRwM19yY2J1ZiAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwM19yY2J1ZiAqdmFsdWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgbmdodHRwM192ZWMgaDNuYW1lID0gbmdodHRwM19yY2J1Zl9nZXRfYnVmKG5hbWUpOworICBuZ2h0dHAzX3ZlYyBoM3ZhbCA9IG5naHR0cDNfcmNidWZfZ2V0X2J1Zih2YWx1ZSk7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWNvbm47CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpdG9rZW47CisgICh2b2lkKWZsYWdzOworICAodm9pZCl1c2VyX2RhdGE7CisKKyAgaWYoaDNuYW1lLmxlbiA9PSBzaXplb2YoIjpzdGF0dXMiKSAtIDEgJiYKKyAgICAgIW1lbWNtcCgiOnN0YXR1cyIsIGgzbmFtZS5iYXNlLCBoM25hbWUubGVuKSkgeworICAgIGNoYXIgbGluZVsxNF07IC8qIHN0YXR1cyBsaW5lIGlzIGFsd2F5cyAxMyBjaGFyYWN0ZXJzIGxvbmcgKi8KKyAgICBzaXplX3QgbmNvcHk7CisgICAgaW50IHN0YXR1cyA9IGRlY29kZV9zdGF0dXNfY29kZShoM3ZhbC5iYXNlLCBoM3ZhbC5sZW4pOworICAgIERFQlVHQVNTRVJUKHN0YXR1cyAhPSAtMSk7CisgICAgbmNvcHkgPSBtc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLCAiSFRUUC8zICUwM2QgXHJcbiIsIHN0YXR1cyk7CisgICAgcmVzdWx0ID0gd3JpdGVfZGF0YShzdHJlYW0sIGxpbmUsIG5jb3B5KTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogc3RvcmUgYXMgYSBIVFRQMS1zdHlsZSBoZWFkZXIgKi8KKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKHN0cmVhbSwgaDNuYW1lLmJhc2UsIGgzbmFtZS5sZW4pOworICAgIGlmKHJlc3VsdCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKHN0cmVhbSwgIjogIiwgMik7CisgICAgaWYocmVzdWx0KSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJlc3VsdCA9IHdyaXRlX2RhdGEoc3RyZWFtLCBoM3ZhbC5iYXNlLCBoM3ZhbC5sZW4pOworICAgIGlmKHJlc3VsdCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXN1bHQgPSB3cml0ZV9kYXRhKHN0cmVhbSwgIlxyXG4iLCAyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKworICBzdHJlYW0tPmZpcnN0aGVhZGVyID0gVFJVRTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfaDNfc2VuZF9zdG9wX3NlbmRpbmcobmdodHRwM19jb25uICpjb25uLCBpbnQ2NF90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYXBwX2Vycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc3RyZWFtX2lkOworICAodm9pZClhcHBfZXJyb3JfY29kZTsKKyAgKHZvaWQpdXNlcl9kYXRhOworICAodm9pZClzdHJlYW1fdXNlcl9kYXRhOworICByZXR1cm4gMDsKK30KKworc3RhdGljIG5naHR0cDNfY29ubl9jYWxsYmFja3MgbmdoM19jYWxsYmFja3MgPSB7CisgIGNiX2gzX2Fja2VkX3N0cmVhbV9kYXRhLCAvKiBhY2tlZF9zdHJlYW1fZGF0YSAqLworICBjYl9oM19zdHJlYW1fY2xvc2UsCisgIGNiX2gzX3JlY3ZfZGF0YSwKKyAgY2JfaDNfZGVmZXJyZWRfY29uc3VtZSwKKyAgTlVMTCwgLyogYmVnaW5faGVhZGVycyAqLworICBjYl9oM19yZWN2X2hlYWRlciwKKyAgY2JfaDNfZW5kX2hlYWRlcnMsCisgIE5VTEwsIC8qIGJlZ2luX3RyYWlsZXJzICovCisgIGNiX2gzX3JlY3ZfaGVhZGVyLAorICBOVUxMLCAvKiBlbmRfdHJhaWxlcnMgKi8KKyAgTlVMTCwgLyogaHR0cF9iZWdpbl9wdXNoX3Byb21pc2UgKi8KKyAgTlVMTCwgLyogaHR0cF9yZWN2X3B1c2hfcHJvbWlzZSAqLworICBOVUxMLCAvKiBodHRwX2VuZF9wdXNoX3Byb21pc2UgKi8KKyAgTlVMTCwgLyogaHR0cF9jYW5jZWxfcHVzaCAqLworICBjYl9oM19zZW5kX3N0b3Bfc2VuZGluZywKKyAgTlVMTCwgLyogcHVzaF9zdHJlYW0gKi8KKyAgTlVMTCwgLyogZW5kX3N0cmVhbSAqLworfTsKKworc3RhdGljIGludCBpbml0X25naDNfY29ubihzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgaW50IHJjOworICBpbnQ2NF90IGN0cmxfc3RyZWFtX2lkLCBxcGFja19lbmNfc3RyZWFtX2lkLCBxcGFja19kZWNfc3RyZWFtX2lkOworCisgIGlmKG5ndGNwMl9jb25uX2dldF9tYXhfbG9jYWxfc3RyZWFtc191bmkocXMtPnFjb25uKSA8IDMpIHsKKyAgICBmYWlsZihxcy0+Y29ubi0+ZGF0YSwgInRvbyBmZXcgYXZhaWxhYmxlIFFVSUMgc3RyZWFtcyIpOworICAgIHJldHVybiBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBuZ2h0dHAzX2Nvbm5fc2V0dGluZ3NfZGVmYXVsdCgmcXMtPmgzc2V0dGluZ3MpOworCisgIHJjID0gbmdodHRwM19jb25uX2NsaWVudF9uZXcoJnFzLT5oM2Nvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5naDNfY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxcy0+aDNzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAzX21lbV9kZWZhdWx0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXMpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgcmMgPSBuZ3RjcDJfY29ubl9vcGVuX3VuaV9zdHJlYW0ocXMtPnFjb25uLCAmY3RybF9zdHJlYW1faWQsIE5VTEwpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICByYyA9IG5naHR0cDNfY29ubl9iaW5kX2NvbnRyb2xfc3RyZWFtKHFzLT5oM2Nvbm4sIGN0cmxfc3RyZWFtX2lkKTsKKyAgaWYocmMpIHsKKyAgICByZXN1bHQgPSBDVVJMRV9RVUlDX0NPTk5FQ1RfRVJST1I7CisgICAgZ290byBmYWlsOworICB9CisKKyAgcmMgPSBuZ3RjcDJfY29ubl9vcGVuX3VuaV9zdHJlYW0ocXMtPnFjb25uLCAmcXBhY2tfZW5jX3N0cmVhbV9pZCwgTlVMTCk7CisgIGlmKHJjKSB7CisgICAgcmVzdWx0ID0gQ1VSTEVfUVVJQ19DT05ORUNUX0VSUk9SOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIHJjID0gbmd0Y3AyX2Nvbm5fb3Blbl91bmlfc3RyZWFtKHFzLT5xY29ubiwgJnFwYWNrX2RlY19zdHJlYW1faWQsIE5VTEwpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICByYyA9IG5naHR0cDNfY29ubl9iaW5kX3FwYWNrX3N0cmVhbXMocXMtPmgzY29ubiwgcXBhY2tfZW5jX3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFwYWNrX2RlY19zdHJlYW1faWQpOworICBpZihyYykgeworICAgIHJlc3VsdCA9IENVUkxFX1FVSUNfQ09OTkVDVF9FUlJPUjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7CisgIGZhaWw6CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEN1cmxfcmVjdiBuZ2gzX3N0cmVhbV9yZWN2Oworc3RhdGljIEN1cmxfc2VuZCBuZ2gzX3N0cmVhbV9zZW5kOworCitzdGF0aWMgc2l6ZV90IGRyYWluX292ZXJmbG93X2J1ZmZlcihzdHJ1Y3QgSFRUUCAqc3RyZWFtKQoreworICBzaXplX3Qgb3ZlcmxlbiA9IEN1cmxfZHluX2xlbigmc3RyZWFtLT5vdmVyZmxvdyk7CisgIHNpemVfdCBuY29weSA9IENVUkxNSU4ob3Zlcmxlbiwgc3RyZWFtLT5sZW4pOworICBpZihuY29weSA+IDApIHsKKyAgICBtZW1jcHkoc3RyZWFtLT5tZW0sIEN1cmxfZHluX3B0cigmc3RyZWFtLT5vdmVyZmxvdyksIG5jb3B5KTsKKyAgICBzdHJlYW0tPmxlbiAtPSBuY29weTsKKyAgICBzdHJlYW0tPm1lbSArPSBuY29weTsKKyAgICBzdHJlYW0tPm1lbWxlbiArPSBuY29weTsKKyAgICBpZihuY29weSAhPSBvdmVybGVuKQorICAgICAgLyogbWFrZSB0aGUgYnVmZmVyIG9ubHkga2VlcCB0aGUgdGFpbCAqLworICAgICAgKHZvaWQpQ3VybF9keW5fdGFpbCgmc3RyZWFtLT5vdmVyZmxvdywgb3ZlcmxlbiAtIG5jb3B5KTsKKyAgfQorICByZXR1cm4gbmNvcHk7Cit9CisKKy8qIGluY29taW5nIGRhdGEgZnJhbWVzIG9uIHRoZSBoMyBzdHJlYW0gKi8KK3N0YXRpYyBzc2l6ZV90IG5naDNfc3RyZWFtX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKworICBpZighc3RyZWFtLT5tZW1sZW4pIHsKKyAgICAvKiByZW1lbWJlciB3aGVyZSB0byBzdG9yZSBpbmNvbWluZyBkYXRhIGZvciB0aGlzIHN0cmVhbSBhbmQgaG93IGJpZyB0aGUKKyAgICAgICBidWZmZXIgaXMgKi8KKyAgICBzdHJlYW0tPm1lbSA9IGJ1ZjsKKyAgICBzdHJlYW0tPmxlbiA9IGJ1ZmZlcnNpemU7CisgIH0KKyAgLyogZWxzZSwgdGhlcmUncyBkYXRhIGluIHRoZSBidWZmZXIgYWxyZWFkeSAqLworCisgIC8qIGlmIHRoZXJlJ3MgZGF0YSBpbiB0aGUgb3ZlcmZsb3cgYnVmZmVyIGZyb20gYSBwcmV2aW91cyBjYWxsLCBjb3B5IGFzIG11Y2gKKyAgICAgYXMgcG9zc2libGUgdG8gdGhlIHJlY2VpdmUgYnVmZmVyIGJlZm9yZSByZWNlaXZpbmcgbW9yZSAqLworICBkcmFpbl9vdmVyZmxvd19idWZmZXIoc3RyZWFtKTsKKworICBpZihuZ19wcm9jZXNzX2luZ3Jlc3MoY29ubiwgc29ja2ZkLCBxcykpIHsKKyAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorICBpZihuZ19mbHVzaF9lZ3Jlc3MoY29ubiwgc29ja2ZkLCBxcykpIHsKKyAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmKHN0cmVhbS0+bWVtbGVuKSB7CisgICAgc3NpemVfdCBtZW1sZW4gPSBzdHJlYW0tPm1lbWxlbjsKKyAgICAvKiBkYXRhIGFycml2ZWQgKi8KKyAgICAqY3VybGNvZGUgPSBDVVJMRV9PSzsKKyAgICAvKiByZXNldCB0byBhbGxvdyBtb3JlIGRhdGEgdG8gY29tZSAqLworICAgIHN0cmVhbS0+bWVtbGVuID0gMDsKKyAgICBzdHJlYW0tPm1lbSA9IGJ1ZjsKKyAgICBzdHJlYW0tPmxlbiA9IGJ1ZmZlcnNpemU7CisgICAgLyogZXh0ZW5kIHRoZSBzdHJlYW0gd2luZG93IHdpdGggdGhlIGRhdGEgd2UncmUgY29uc3VtaW5nIGFuZCBzZW5kIG91dAorICAgICAgIGFueSBhZGRpdGlvbmFsIHBhY2tldHMgdG8gdGVsbCB0aGUgc2VydmVyIHRoYXQgd2UgY2FuIHJlY2VpdmUgbW9yZSAqLworICAgIGV4dGVuZF9zdHJlYW1fd2luZG93KHFzLT5xY29ubiwgc3RyZWFtKTsKKyAgICBpZihuZ19mbHVzaF9lZ3Jlc3MoY29ubiwgc29ja2ZkLCBxcykpIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBtZW1sZW47CisgIH0KKworICBpZihzdHJlYW0tPmNsb3NlZCkgeworICAgICpjdXJsY29kZSA9IENVUkxFX09LOworICAgIHJldHVybiAwOworICB9CisKKyAgaW5mb2YoY29ubi0+ZGF0YSwgIm5naDNfc3RyZWFtX3JlY3YgcmV0dXJucyAwIGJ5dGVzIGFuZCBFQUdBSU5cbiIpOworICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKKyAgcmV0dXJuIC0xOworfQorCisvKiB0aGlzIGFtb3VudCBvZiBkYXRhIGhhcyBub3cgYmVlbiBhY2tlZCBvbiB0aGlzIHN0cmVhbSAqLworc3RhdGljIGludCBjYl9oM19hY2tlZF9zdHJlYW1fZGF0YShuZ2h0dHAzX2Nvbm4gKmNvbm4sIGludDY0X3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgdm9pZCAqdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CisgICh2b2lkKWNvbm47CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpdXNlcl9kYXRhOworCisgIGlmKCFkYXRhLT5zZXQucG9zdGZpZWxkcykgeworICAgIHN0cmVhbS0+aDNvdXQtPnVzZWQgLT0gZGF0YWxlbjsKKyAgICBIM0JVR0YoaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICAgICAgImNiX2gzX2Fja2VkX3N0cmVhbV9kYXRhLCAlemQgYnl0ZXMsICV6ZCBsZWZ0IHVuYWNrZWRcbiIsCisgICAgICAgICAgICAgICAgIGRhdGFsZW4sIHN0cmVhbS0+aDNvdXQtPnVzZWQpKTsKKyAgICBERUJVR0FTU0VSVChzdHJlYW0tPmgzb3V0LT51c2VkIDwgSDNfU0VORF9TSVpFKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgY2JfaDNfcmVhZGZ1bmN0aW9uKG5naHR0cDNfY29ubiAqY29ubiwgaW50NjRfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwM192ZWMgKnZlYywgc2l6ZV90IHZlY2NudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcGZsYWdzLCB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkKK3sKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IHN0cmVhbV91c2VyX2RhdGE7CisgIHNpemVfdCBucmVhZDsKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGRhdGEtPnJlcS5wcm90b3A7CisgICh2b2lkKWNvbm47CisgICh2b2lkKXN0cmVhbV9pZDsKKyAgKHZvaWQpdXNlcl9kYXRhOworICAodm9pZCl2ZWNjbnQ7CisKKyAgaWYoZGF0YS0+c2V0LnBvc3RmaWVsZHMpIHsKKyAgICB2ZWNbMF0uYmFzZSA9IGRhdGEtPnNldC5wb3N0ZmllbGRzOworICAgIHZlY1swXS5sZW4gPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICpwZmxhZ3MgPSBOR0hUVFAzX0RBVEFfRkxBR19FT0Y7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBucmVhZCA9IENVUkxNSU4oc3RyZWFtLT51cGxvYWRfbGVuLCBIM19TRU5EX1NJWkUgLSBzdHJlYW0tPmgzb3V0LT51c2VkKTsKKyAgaWYobnJlYWQgPiAwKSB7CisgICAgLyogbmdodHRwMyB3YW50cyB1cyB0byBob2xkIG9uIHRvIHRoZSBkYXRhIHVudGlsIGl0IHRlbGxzIHVzIGl0IGlzIG9rYXkgdG8KKyAgICAgICBkZWxldGUgaXQuIEFwcGVuZCB0aGUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBoM291dCBidWZmZXIuIFNpbmNlIHdlIGNhbgorICAgICAgIG9ubHkgcmV0dXJuIGNvbnNlY3V0aXZlIGRhdGEsIGNvcHkgdGhlIGFtb3VudCB0aGF0IGZpdHMgYW5kIHRoZSBuZXh0CisgICAgICAgcGFydCBjb21lcyBpbiBuZXh0IGludm9rZS4gKi8KKyAgICBzdHJ1Y3QgaDNvdXQgKm91dCA9IHN0cmVhbS0+aDNvdXQ7CisgICAgaWYobnJlYWQgKyBvdXQtPndpbmRleCA+IEgzX1NFTkRfU0laRSkKKyAgICAgIG5yZWFkID0gSDNfU0VORF9TSVpFIC0gb3V0LT53aW5kZXg7CisKKyAgICBtZW1jcHkoJm91dC0+YnVmW291dC0+d2luZGV4XSwgc3RyZWFtLT51cGxvYWRfbWVtLCBucmVhZCk7CisgICAgb3V0LT53aW5kZXggKz0gbnJlYWQ7CisgICAgb3V0LT51c2VkICs9IG5yZWFkOworCisgICAgLyogdGhhdCdzIHRoZSBjaHVuayB3ZSByZXR1cm4gdG8gbmdodHRwMyAqLworICAgIHZlY1swXS5iYXNlID0gJm91dC0+YnVmW291dC0+d2luZGV4XTsKKyAgICB2ZWNbMF0ubGVuID0gbnJlYWQ7CisKKyAgICBpZihvdXQtPndpbmRleCA9PSBIM19TRU5EX1NJWkUpCisgICAgICBvdXQtPndpbmRleCA9IDA7IC8qIHdyYXAgKi8KKyAgICBzdHJlYW0tPnVwbG9hZF9tZW0gKz0gbnJlYWQ7CisgICAgc3RyZWFtLT51cGxvYWRfbGVuIC09IG5yZWFkOworICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgIT0gLTEpIHsKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgLT0gbnJlYWQ7CisgICAgICBpZighc3RyZWFtLT51cGxvYWRfbGVmdCkKKyAgICAgICAgKnBmbGFncyA9IE5HSFRUUDNfREFUQV9GTEFHX0VPRjsKKyAgICB9CisgICAgSDNCVUdGKGluZm9mKGRhdGEsICJjYl9oM19yZWFkZnVuY3Rpb24gJXpkIGJ5dGVzJXMgKGF0ICV6ZCB1bmFja2VkKVxuIiwKKyAgICAgICAgICAgICAgICAgbnJlYWQsICpwZmxhZ3MgPT0gTkdIVFRQM19EQVRBX0ZMQUdfRU9GPyIgRU9GIjoiIiwKKyAgICAgICAgICAgICAgICAgb3V0LT51c2VkKSk7CisgIH0KKyAgaWYoc3RyZWFtLT51cGxvYWRfZG9uZSAmJiAhc3RyZWFtLT51cGxvYWRfbGVuICYmCisgICAgIChzdHJlYW0tPnVwbG9hZF9sZWZ0IDw9IDApKSB7CisgICAgSDNCVUdGKGluZm9mKGRhdGEsICIhISEhISEhISEgY2JfaDNfcmVhZGZ1bmN0aW9uIHNldHMgRU9GXG4iKSk7CisgICAgKnBmbGFncyA9IE5HSFRUUDNfREFUQV9GTEFHX0VPRjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBlbHNlIGlmKCFucmVhZCkgeworICAgIHJldHVybiBOR0hUVFAzX0VSUl9XT1VMREJMT0NLOworICB9CisgIHJldHVybiAxOworfQorCisvKiBJbmRleCB3aGVyZSA6YXV0aG9yaXR5IGhlYWRlciBmaWVsZCB3aWxsIGFwcGVhciBpbiByZXF1ZXN0IGhlYWRlcgorICAgZmllbGQgbGlzdC4gKi8KKyNkZWZpbmUgQVVUSE9SSVRZX0RTVF9JRFggMworCitzdGF0aWMgQ1VSTGNvZGUgaHR0cF9yZXF1ZXN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKKyAgc2l6ZV90IG5oZWFkZXI7CisgIHNpemVfdCBpOworICBzaXplX3QgYXV0aG9yaXR5X2lkeDsKKyAgY2hhciAqaGRidWYgPSAoY2hhciAqKW1lbTsKKyAgY2hhciAqZW5kLCAqbGluZV9lbmQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgbmdodHRwM19udiAqbnZhID0gTlVMTDsKKyAgaW50NjRfdCBzdHJlYW0zX2lkOworICBpbnQgcmM7CisgIHN0cnVjdCBoM291dCAqaDNvdXQgPSBOVUxMOworCisgIHJjID0gbmd0Y3AyX2Nvbm5fb3Blbl9iaWRpX3N0cmVhbShxcy0+cWNvbm4sICZzdHJlYW0zX2lkLCBOVUxMKTsKKyAgaWYocmMpIHsKKyAgICBmYWlsZihjb25uLT5kYXRhLCAiY2FuIGdldCBiaWRpIHN0cmVhbXMiKTsKKyAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIHN0cmVhbS0+c3RyZWFtM19pZCA9IHN0cmVhbTNfaWQ7CisgIHN0cmVhbS0+aDNyZXEgPSBUUlVFOyAvKiBzZW5mIG9mZiEgKi8KKyAgQ3VybF9keW5faW5pdCgmc3RyZWFtLT5vdmVyZmxvdywgQ1VSTF9NQVhfUkVBRF9TSVpFKTsKKworICAvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGhlYWRlcnMgY29udGFpbmVkIGluIFttZW0sIG1lbSArIGxlbikuIEFzc3VtZXMgYQorICAgICBjb3JyZWN0bHkgZ2VuZXJhdGVkIEhUVFAgaGVhZGVyIGZpZWxkIGJsb2NrLiAqLworICBuaGVhZGVyID0gMDsKKyAgZm9yKGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKKyAgICBpZihoZGJ1ZltpXSA9PSAnXG4nICYmIGhkYnVmW2kgLSAxXSA9PSAnXHInKSB7CisgICAgICArK25oZWFkZXI7CisgICAgICArK2k7CisgICAgfQorICB9CisgIGlmKG5oZWFkZXIgPCAyKQorICAgIGdvdG8gZmFpbDsKKworICAvKiBXZSBjb3VudGVkIGFkZGl0aW9uYWwgMiBcclxuIGluIHRoZSBmaXJzdCBhbmQgbGFzdCBsaW5lLiBXZSBuZWVkIDMKKyAgICAgbmV3IGhlYWRlcnM6IDptZXRob2QsIDpwYXRoIGFuZCA6c2NoZW1lLiBUaGVyZWZvcmUgd2UgbmVlZCBvbmUKKyAgICAgbW9yZSBzcGFjZS4gKi8KKyAgbmhlYWRlciArPSAxOworICBudmEgPSBtYWxsb2Moc2l6ZW9mKG5naHR0cDNfbnYpICogbmhlYWRlcik7CisgIGlmKCFudmEpIHsKKyAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIC8qIEV4dHJhY3QgOm1ldGhvZCwgOnBhdGggZnJvbSByZXF1ZXN0IGxpbmUKKyAgICAgV2UgZG8gbGluZSBlbmRpbmdzIHdpdGggQ1JMRiBzbyBjaGVja2luZyBmb3IgQ1IgaXMgZW5vdWdoICovCisgIGxpbmVfZW5kID0gbWVtY2hyKGhkYnVmLCAnXHInLCBsZW4pOworICBpZighbGluZV9lbmQpIHsKKyAgICByZXN1bHQgPSBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7IC8qIGludGVybmFsIGVycm9yICovCisgICAgZ290byBmYWlsOworICB9CisKKyAgLyogTWV0aG9kIGRvZXMgbm90IGNvbnRhaW4gc3BhY2VzICovCisgIGVuZCA9IG1lbWNocihoZGJ1ZiwgJyAnLCBsaW5lX2VuZCAtIGhkYnVmKTsKKyAgaWYoIWVuZCB8fCBlbmQgPT0gaGRidWYpCisgICAgZ290byBmYWlsOworICBudmFbMF0ubmFtZSA9ICh1bnNpZ25lZCBjaGFyICopIjptZXRob2QiOworICBudmFbMF0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVswXS5uYW1lKTsKKyAgbnZhWzBdLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgbnZhWzBdLnZhbHVlbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICBudmFbMF0uZmxhZ3MgPSBOR0hUVFAzX05WX0ZMQUdfTk9ORTsKKworICBoZGJ1ZiA9IGVuZCArIDE7CisKKyAgLyogUGF0aCBtYXkgY29udGFpbiBzcGFjZXMgc28gc2NhbiBiYWNrd2FyZHMgKi8KKyAgZW5kID0gTlVMTDsKKyAgZm9yKGkgPSAoc2l6ZV90KShsaW5lX2VuZCAtIGhkYnVmKTsgaTsgLS1pKSB7CisgICAgaWYoaGRidWZbaSAtIDFdID09ICcgJykgeworICAgICAgZW5kID0gJmhkYnVmW2kgLSAxXTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZighZW5kIHx8IGVuZCA9PSBoZGJ1ZikKKyAgICBnb3RvIGZhaWw7CisgIG52YVsxXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOnBhdGgiOworICBudmFbMV0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVsxXS5uYW1lKTsKKyAgbnZhWzFdLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgbnZhWzFdLnZhbHVlbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICBudmFbMV0uZmxhZ3MgPSBOR0hUVFAzX05WX0ZMQUdfTk9ORTsKKworICBudmFbMl0ubmFtZSA9ICh1bnNpZ25lZCBjaGFyICopIjpzY2hlbWUiOworICBudmFbMl0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVsyXS5uYW1lKTsKKyAgaWYoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkKKyAgICBudmFbMl0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKSJodHRwcyI7CisgIGVsc2UKKyAgICBudmFbMl0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKSJodHRwIjsKKyAgbnZhWzJdLnZhbHVlbGVuID0gc3RybGVuKChjaGFyICopbnZhWzJdLnZhbHVlKTsKKyAgbnZhWzJdLmZsYWdzID0gTkdIVFRQM19OVl9GTEFHX05PTkU7CisKKworICBhdXRob3JpdHlfaWR4ID0gMDsKKyAgaSA9IDM7CisgIHdoaWxlKGkgPCBuaGVhZGVyKSB7CisgICAgc2l6ZV90IGhsZW47CisKKyAgICBoZGJ1ZiA9IGxpbmVfZW5kICsgMjsKKworICAgIC8qIGNoZWNrIGZvciBuZXh0IENSLCBidXQgb25seSB3aXRoaW4gdGhlIHBpZWNlIG9mIGRhdGEgbGVmdCBpbiB0aGUgZ2l2ZW4KKyAgICAgICBidWZmZXIgKi8KKyAgICBsaW5lX2VuZCA9IG1lbWNocihoZGJ1ZiwgJ1xyJywgbGVuIC0gKGhkYnVmIC0gKGNoYXIgKiltZW0pKTsKKyAgICBpZighbGluZV9lbmQgfHwgKGxpbmVfZW5kID09IGhkYnVmKSkKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIGhlYWRlciBjb250aW51YXRpb24gbGluZXMgYXJlIG5vdCBzdXBwb3J0ZWQgKi8KKyAgICBpZigqaGRidWYgPT0gJyAnIHx8ICpoZGJ1ZiA9PSAnXHQnKQorICAgICAgZ290byBmYWlsOworCisgICAgZm9yKGVuZCA9IGhkYnVmOyBlbmQgPCBsaW5lX2VuZCAmJiAqZW5kICE9ICc6JzsgKytlbmQpCisgICAgICA7CisgICAgaWYoZW5kID09IGhkYnVmIHx8IGVuZCA9PSBsaW5lX2VuZCkKKyAgICAgIGdvdG8gZmFpbDsKKyAgICBobGVuID0gZW5kIC0gaGRidWY7CisKKyAgICBpZihobGVuID09IDQgJiYgc3RybmNhc2Vjb21wYXJlKCJob3N0IiwgaGRidWYsIDQpKSB7CisgICAgICBhdXRob3JpdHlfaWR4ID0gaTsKKyAgICAgIG52YVtpXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOmF1dGhvcml0eSI7CisgICAgICBudmFbaV0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVtpXS5uYW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBudmFbaV0ubmFtZWxlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKyAgICAgIC8qIExvd2VyIGNhc2UgdGhlIGhlYWRlciBuYW1lIGZvciBIVFRQLzMgKi8KKyAgICAgIEN1cmxfc3RybnRvbG93ZXIoKGNoYXIgKiloZGJ1ZiwgaGRidWYsIG52YVtpXS5uYW1lbGVuKTsKKyAgICAgIG52YVtpXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgICB9CisgICAgbnZhW2ldLmZsYWdzID0gTkdIVFRQM19OVl9GTEFHX05PTkU7CisgICAgaGRidWYgPSBlbmQgKyAxOworICAgIHdoaWxlKCpoZGJ1ZiA9PSAnICcgfHwgKmhkYnVmID09ICdcdCcpCisgICAgICArK2hkYnVmOworICAgIGVuZCA9IGxpbmVfZW5kOworCisjaWYgMCAvKiBUaGlzIHNob3VsZCBwcm9iYWJseSBnbyBpbiBtb3JlIG9yIGxlc3MgbGlrZSB0aGlzICovCisgICAgc3dpdGNoKGluc3BlY3RfaGVhZGVyKChjb25zdCBjaGFyICopbnZhW2ldLm5hbWUsIG52YVtpXS5uYW1lbGVuLCBoZGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC0gaGRidWYpKSB7CisgICAgY2FzZSBIRUFERVJJTlNUX0lHTk9SRToKKyAgICAgIC8qIHNraXAgaGVhZGVyIGZpZWxkcyBwcm9oaWJpdGVkIGJ5IEhUVFAvMiBzcGVjaWZpY2F0aW9uLiAqLworICAgICAgLS1uaGVhZGVyOworICAgICAgY29udGludWU7CisgICAgY2FzZSBIRUFERVJJTlNUX1RFX1RSQUlMRVJTOgorICAgICAgbnZhW2ldLnZhbHVlID0gKHVpbnQ4X3QqKSJ0cmFpbGVycyI7CisgICAgICBudmFbaV0udmFsdWVfbGVuID0gc2l6ZW9mKCJ0cmFpbGVycyIpIC0gMTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBudmFbaV0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICAgICAgbnZhW2ldLnZhbHVlX2xlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKyAgICB9CisjZW5kaWYKKyAgICBudmFbaV0udmFsdWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICAgIG52YVtpXS52YWx1ZWxlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKyAgICBudmFbaV0uZmxhZ3MgPSBOR0hUVFAzX05WX0ZMQUdfTk9ORTsKKworICAgICsraTsKKyAgfQorCisgIC8qIDphdXRob3JpdHkgbXVzdCBjb21lIGJlZm9yZSBub24tcHNldWRvIGhlYWRlciBmaWVsZHMgKi8KKyAgaWYoYXV0aG9yaXR5X2lkeCAhPSAwICYmIGF1dGhvcml0eV9pZHggIT0gQVVUSE9SSVRZX0RTVF9JRFgpIHsKKyAgICBuZ2h0dHAzX252IGF1dGhvcml0eSA9IG52YVthdXRob3JpdHlfaWR4XTsKKyAgICBmb3IoaSA9IGF1dGhvcml0eV9pZHg7IGkgPiBBVVRIT1JJVFlfRFNUX0lEWDsgLS1pKSB7CisgICAgICBudmFbaV0gPSBudmFbaSAtIDFdOworICAgIH0KKyAgICBudmFbaV0gPSBhdXRob3JpdHk7CisgIH0KKworICAvKiBXYXJuIHN0cmVhbSBtYXkgYmUgcmVqZWN0ZWQgaWYgY3VtdWxhdGl2ZSBsZW5ndGggb2YgaGVhZGVycyBpcyB0b28KKyAgICAgbGFyZ2UuICovCisjZGVmaW5lIE1BWF9BQ0MgNjAwMDAgIC8qIDw2NEtCIHRvIGFjY291bnQgZm9yIHNvbWUgb3ZlcmhlYWQgKi8KKyAgeworICAgIHNpemVfdCBhY2MgPSAwOworICAgIGZvcihpID0gMDsgaSA8IG5oZWFkZXI7ICsraSkKKyAgICAgIGFjYyArPSBudmFbaV0ubmFtZWxlbiArIG52YVtpXS52YWx1ZWxlbjsKKworICAgIGlmKGFjYyA+IE1BWF9BQ0MpIHsKKyAgICAgIGluZm9mKGRhdGEsICJodHRwX3JlcXVlc3Q6IFdhcm5pbmc6IFRoZSBjdW11bGF0aXZlIGxlbmd0aCBvZiBhbGwgIgorICAgICAgICAgICAgImhlYWRlcnMgZXhjZWVkcyAlenUgYnl0ZXMgYW5kIHRoYXQgY291bGQgY2F1c2UgdGhlICIKKyAgICAgICAgICAgICJzdHJlYW0gdG8gYmUgcmVqZWN0ZWQuXG4iLCBNQVhfQUNDKTsKKyAgICB9CisgIH0KKworICBzd2l0Y2goZGF0YS0+c3RhdGUuaHR0cHJlcSkgeworICBjYXNlIEhUVFBSRVFfUE9TVDoKKyAgY2FzZSBIVFRQUkVRX1BPU1RfRk9STToKKyAgY2FzZSBIVFRQUkVRX1BPU1RfTUlNRToKKyAgY2FzZSBIVFRQUkVRX1BVVDogeworICAgIG5naHR0cDNfZGF0YV9yZWFkZXIgZGF0YV9yZWFkZXI7CisgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgIGVsc2UKKyAgICAgIC8qIGRhdGEgc2VuZGluZyB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGRhdGEgYW1vdW50IHVwIGZyb250ICovCisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gLTE7IC8qIHVua25vd24sIGJ1dCBub3QgemVybyAqLworCisgICAgZGF0YV9yZWFkZXIucmVhZF9kYXRhID0gY2JfaDNfcmVhZGZ1bmN0aW9uOworCisgICAgaDNvdXQgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCBoM291dCksIDEpOworICAgIGlmKCFoM291dCkgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgc3RyZWFtLT5oM291dCA9IGgzb3V0OworCisgICAgcmMgPSBuZ2h0dHAzX2Nvbm5fc3VibWl0X3JlcXVlc3QocXMtPmgzY29ubiwgc3RyZWFtLT5zdHJlYW0zX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG52YSwgbmhlYWRlciwgJmRhdGFfcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmRhdGEpOworICAgIGlmKHJjKSB7CisgICAgICByZXN1bHQgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICBkZWZhdWx0OgorICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSAwOyAvKiBub3RoaW5nIGxlZnQgdG8gc2VuZCAqLworICAgIHJjID0gbmdodHRwM19jb25uX3N1Ym1pdF9yZXF1ZXN0KHFzLT5oM2Nvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudmEsIG5oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogbm8gYm9keSEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5kYXRhKTsKKyAgICBpZihyYykgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KKworICBDdXJsX3NhZmVmcmVlKG52YSk7CisKKyAgaW5mb2YoZGF0YSwgIlVzaW5nIEhUVFAvMyBTdHJlYW0gSUQ6ICV4IChlYXN5IGhhbmRsZSAlcClcbiIsCisgICAgICAgIHN0cmVhbTNfaWQsICh2b2lkICopZGF0YSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworCitmYWlsOgorICBmcmVlKG52YSk7CisgIHJldHVybiByZXN1bHQ7Cit9CitzdGF0aWMgc3NpemVfdCBuZ2gzX3N0cmVhbV9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIHNzaXplX3Qgc2VudDsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdHJlYW0tPmgzcmVxKSB7CisgICAgQ1VSTGNvZGUgcmVzdWx0ID0gaHR0cF9yZXF1ZXN0KGNvbm4sIG1lbSwgbGVuKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbnQgPSBsZW47CisgIH0KKyAgZWxzZSB7CisgICAgSDNCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJuZ2gzX3N0cmVhbV9zZW5kKCkgd2FudHMgdG8gc2VuZCAlemQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgIGxlbikpOworICAgIGlmKCFzdHJlYW0tPnVwbG9hZF9sZW4pIHsKKyAgICAgIHN0cmVhbS0+dXBsb2FkX21lbSA9IG1lbTsKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlbiA9IGxlbjsKKyAgICAgICh2b2lkKW5naHR0cDNfY29ubl9yZXN1bWVfc3RyZWFtKHFzLT5oM2Nvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCk7CisgICAgICBzZW50ID0gbGVuOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorCisgIGlmKG5nX2ZsdXNoX2VncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgKmN1cmxjb2RlID0gQ1VSTEVfT0s7CisgIHJldHVybiBzZW50OworfQorCitzdGF0aWMgdm9pZCBuZ19oYXNfY29ubmVjdGVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHRlbXBpbmRleCkKK3sKKyAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBuZ2gzX3N0cmVhbV9yZWN2OworICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IG5naDNfc3RyZWFtX3NlbmQ7CisgIGNvbm4tPmhhbmRsZXIgPSAmQ3VybF9oYW5kbGVyX2h0dHAzOworICBjb25uLT5iaXRzLm11bHRpcGxleCA9IFRSVUU7IC8qIGF0IGxlYXN0IHBvdGVudGlhbGx5IG11bHRpcGxleGVkICovCisgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMzA7CisgIGNvbm4tPmJ1bmRsZS0+bXVsdGl1c2UgPSBCVU5ETEVfTVVMVElQTEVYOworICBjb25uLT5xdWljID0gJmNvbm4tPmhlcXVpY1t0ZW1waW5kZXhdOworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIm5ndGNwMiBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIVxuIikpOworfQorCisvKgorICogVGhlcmUgY2FuIGJlIG11bHRpcGxlIGNvbm5lY3Rpb24gYXR0ZW1wdHMgZ29pbmcgb24gaW4gcGFyYWxsZWwuCisgKi8KK0NVUkxjb2RlIEN1cmxfcXVpY19pc19jb25uZWN0ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9ICZjb25uLT5oZXF1aWNbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT50ZW1wc29ja1tzb2NraW5kZXhdOworCisgIHJlc3VsdCA9IG5nX3Byb2Nlc3NfaW5ncmVzcyhjb25uLCBzb2NrZmQsIHFzKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZXJyb3I7CisKKyAgcmVzdWx0ID0gbmdfZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpOworICBpZihyZXN1bHQpCisgICAgZ290byBlcnJvcjsKKworICBpZihuZ3RjcDJfY29ubl9nZXRfaGFuZHNoYWtlX2NvbXBsZXRlZChxcy0+cWNvbm4pKSB7CisgICAgKmRvbmUgPSBUUlVFOworICAgIG5nX2hhc19jb25uZWN0ZWQoY29ubiwgc29ja2luZGV4KTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7CisgIGVycm9yOgorICAodm9pZClxc19kaXNjb25uZWN0KHFzKTsKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgQ1VSTGNvZGUgbmdfcHJvY2Vzc19pbmdyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBzc2l6ZV90IHJlY3ZkOworICBpbnQgcnY7CisgIHVpbnQ4X3QgYnVmWzY1NTM2XTsKKyAgc2l6ZV90IGJ1ZnNpemUgPSBzaXplb2YoYnVmKTsKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcmVtb3RlX2FkZHI7CisgIHNvY2tsZW5fdCByZW1vdGVfYWRkcmxlbjsKKyAgbmd0Y3AyX3BhdGggcGF0aDsKKyAgbmd0Y3AyX3RzdGFtcCB0cyA9IHRpbWVzdGFtcCgpOworCisgIGZvcig7OykgeworICAgIHJlbW90ZV9hZGRybGVuID0gc2l6ZW9mKHJlbW90ZV9hZGRyKTsKKyAgICB3aGlsZSgocmVjdmQgPSByZWN2ZnJvbShzb2NrZmQsIGJ1ZiwgYnVmc2l6ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnJlbW90ZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZW1vdGVfYWRkcmxlbikpID09IC0xICYmCisgICAgICAgICAgU09DS0VSUk5PID09IEVJTlRSKQorICAgICAgOworICAgIGlmKHJlY3ZkID09IC0xKSB7CisgICAgICBpZihTT0NLRVJSTk8gPT0gRUFHQUlOIHx8IFNPQ0tFUlJOTyA9PSBFV09VTERCTE9DSykKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ3RjcDI6IHJlY3Zmcm9tKCkgdW5leHBlY3RlZGx5IHJldHVybmVkICVkIiwgcmVjdmQpOworICAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgICAgfQorCisgICAgbmd0Y3AyX2FkZHJfaW5pdCgmcGF0aC5sb2NhbCwgKHVpbnQ4X3QgKikmcXMtPmxvY2FsX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICBxcy0+bG9jYWxfYWRkcmxlbiwgTlVMTCk7CisgICAgbmd0Y3AyX2FkZHJfaW5pdCgmcGF0aC5yZW1vdGUsICh1aW50OF90ICopJnJlbW90ZV9hZGRyLCByZW1vdGVfYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgcnYgPSBuZ3RjcDJfY29ubl9yZWFkX3BrdChxcy0+cWNvbm4sICZwYXRoLCBidWYsIHJlY3ZkLCB0cyk7CisgICAgaWYocnYgIT0gMCkgeworICAgICAgLyogVE9ETyBTZW5kIENPTk5FQ1RJT05fQ0xPU0UgaWYgcG9zc2libGUgKi8KKyAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIH0KKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIG5nX2ZsdXNoX2VncmVzcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcykKK3sKKyAgaW50IHJ2OworICBzc2l6ZV90IHNlbnQ7CisgIHNzaXplX3Qgb3V0bGVuOworICB1aW50OF90IG91dFtOR1RDUDJfTUFYX1BLVExFTl9JUFY0XTsKKyAgc2l6ZV90IHBrdGxlbjsKKyAgbmd0Y3AyX3BhdGhfc3RvcmFnZSBwczsKKyAgbmd0Y3AyX3RzdGFtcCB0cyA9IHRpbWVzdGFtcCgpOworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSByZW1vdGVfYWRkcjsKKyAgbmd0Y3AyX3RzdGFtcCBleHBpcnk7CisgIG5ndGNwMl9kdXJhdGlvbiB0aW1lb3V0OworICBpbnQ2NF90IHN0cmVhbV9pZDsKKyAgc3NpemVfdCB2ZWNjbnQ7CisgIGludCBmaW47CisgIG5naHR0cDNfdmVjIHZlY1sxNl07CisgIHNzaXplX3QgbmRhdGFsZW47CisKKyAgc3dpdGNoKHFzLT5sb2NhbF9hZGRyLnNzX2ZhbWlseSkgeworICBjYXNlIEFGX0lORVQ6CisgICAgcGt0bGVuID0gTkdUQ1AyX01BWF9QS1RMRU5fSVBWNDsKKyAgICBicmVhazsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBjYXNlIEFGX0lORVQ2OgorICAgIHBrdGxlbiA9IE5HVENQMl9NQVhfUEtUTEVOX0lQVjY7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBhc3NlcnQoMCk7CisgIH0KKworICBydiA9IG5ndGNwMl9jb25uX2hhbmRsZV9leHBpcnkocXMtPnFjb25uLCB0cyk7CisgIGlmKHJ2ICE9IDApIHsKKyAgICBmYWlsZihjb25uLT5kYXRhLCAibmd0Y3AyX2Nvbm5faGFuZGxlX2V4cGlyeSByZXR1cm5lZCBlcnJvcjogJXNcbiIsCisgICAgICAgICAgbmd0Y3AyX3N0cmVycm9yKHJ2KSk7CisgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgIH0KKworICBuZ3RjcDJfcGF0aF9zdG9yYWdlX3plcm8oJnBzKTsKKworICBmb3IoOzspIHsKKyAgICBvdXRsZW4gPSAtMTsKKyAgICBpZihxcy0+aDNjb25uICYmIG5ndGNwMl9jb25uX2dldF9tYXhfZGF0YV9sZWZ0KHFzLT5xY29ubikpIHsKKyAgICAgIHZlY2NudCA9IG5naHR0cDNfY29ubl93cml0ZXZfc3RyZWFtKHFzLT5oM2Nvbm4sICZzdHJlYW1faWQsICZmaW4sIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2ZWMpIC8gc2l6ZW9mKHZlY1swXSkpOworICAgICAgaWYodmVjY250IDwgMCkgeworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAibmdodHRwM19jb25uX3dyaXRldl9zdHJlYW0gcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKChpbnQpdmVjY250KSk7CisgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZSBpZih2ZWNjbnQgPiAwKSB7CisgICAgICAgIHVpbnQzMl90IGZsYWdzID0gTkdUQ1AyX1dSSVRFX1NUUkVBTV9GTEFHX01PUkUgfAorICAgICAgICAgIChmaW4gPyBOR1RDUDJfV1JJVEVfU1RSRUFNX0ZMQUdfRklOIDogMCk7CisgICAgICAgIG91dGxlbiA9CisgICAgICAgICAgbmd0Y3AyX2Nvbm5fd3JpdGV2X3N0cmVhbShxcy0+cWNvbm4sICZwcy5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBwa3RsZW4sICZuZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgbmd0Y3AyX3ZlYyAqKXZlYywgdmVjY250LCB0cyk7CisgICAgICAgIGlmKG91dGxlbiA9PSAwKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYob3V0bGVuIDwgMCkgeworICAgICAgICAgIGlmKG91dGxlbiA9PSBOR1RDUDJfRVJSX1NUUkVBTV9EQVRBX0JMT0NLRUQgfHwKKyAgICAgICAgICAgICBvdXRsZW4gPT0gTkdUQ1AyX0VSUl9TVFJFQU1fU0hVVF9XUikgeworICAgICAgICAgICAgYXNzZXJ0KG5kYXRhbGVuID09IC0xKTsKKyAgICAgICAgICAgIHJ2ID0gbmdodHRwM19jb25uX2Jsb2NrX3N0cmVhbShxcy0+aDNjb25uLCBzdHJlYW1faWQpOworICAgICAgICAgICAgaWYocnYgIT0gMCkgeworICAgICAgICAgICAgICBmYWlsZihjb25uLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAibmdodHRwM19jb25uX2Jsb2NrX3N0cmVhbSByZXR1cm5lZCBlcnJvcjogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIG5naHR0cDNfc3RyZXJyb3IocnYpKTsKKyAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihvdXRsZW4gPT0gTkdUQ1AyX0VSUl9XUklURV9TVFJFQU1fTU9SRSkgeworICAgICAgICAgICAgYXNzZXJ0KG5kYXRhbGVuID4gMCk7CisgICAgICAgICAgICBydiA9IG5naHR0cDNfY29ubl9hZGRfd3JpdGVfb2Zmc2V0KHFzLT5oM2Nvbm4sIHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRhdGFsZW4pOworICAgICAgICAgICAgaWYocnYgIT0gMCkgeworICAgICAgICAgICAgICBmYWlsZihjb25uLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAibmdodHRwM19jb25uX2FkZF93cml0ZV9vZmZzZXQgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBuZ2h0dHAzX3N0cmVycm9yKHJ2KSk7CisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KG5kYXRhbGVuID09IC0xKTsKKyAgICAgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ3RjcDJfY29ubl93cml0ZXZfc3RyZWFtIHJldHVybmVkIGVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5ndGNwMl9zdHJlcnJvcigoaW50KW91dGxlbikpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGFzc2VydChuZGF0YWxlbiA9PSAtMSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYob3V0bGVuIDwgMCkgeworICAgICAgb3V0bGVuID0gbmd0Y3AyX2Nvbm5fd3JpdGVfcGt0KHFzLT5xY29ubiwgJnBzLnBhdGgsIG91dCwgcGt0bGVuLCB0cyk7CisgICAgICBpZihvdXRsZW4gPCAwKSB7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJuZ3RjcDJfY29ubl93cml0ZV9wa3QgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICBuZ3RjcDJfc3RyZXJyb3IoKGludClvdXRsZW4pKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgICB9CisgICAgICBpZihvdXRsZW4gPT0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbWVtY3B5KCZyZW1vdGVfYWRkciwgcHMucGF0aC5yZW1vdGUuYWRkciwgcHMucGF0aC5yZW1vdGUuYWRkcmxlbik7CisgICAgd2hpbGUoKHNlbnQgPSBzZW5kKHNvY2tmZCwgb3V0LCBvdXRsZW4sIDApKSA9PSAtMSAmJgorICAgICAgICAgIFNPQ0tFUlJOTyA9PSBFSU5UUikKKyAgICAgIDsKKworICAgIGlmKHNlbnQgPT0gLTEpIHsKKyAgICAgIGlmKFNPQ0tFUlJOTyA9PSBFQUdBSU4gfHwgU09DS0VSUk5PID09IEVXT1VMREJMT0NLKSB7CisgICAgICAgIC8qIFRPRE8gQ2FjaGUgcGFja2V0ICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJzZW5kKCkgcmV0dXJuZWQgJXpkIChlcnJubyAlZClcbiIsIHNlbnQsCisgICAgICAgICAgICAgIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGV4cGlyeSA9IG5ndGNwMl9jb25uX2dldF9leHBpcnkocXMtPnFjb25uKTsKKyAgaWYoZXhwaXJ5ICE9IFVJTlQ2NF9NQVgpIHsKKyAgICBpZihleHBpcnkgPD0gdHMpIHsKKyAgICAgIHRpbWVvdXQgPSBOR1RDUDJfTUlMTElTRUNPTkRTOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHRpbWVvdXQgPSBleHBpcnkgLSB0czsKKyAgICB9CisgICAgQ3VybF9leHBpcmUoY29ubi0+ZGF0YSwgdGltZW91dCAvIE5HVENQMl9NSUxMSVNFQ09ORFMsIEVYUElSRV9RVUlDKTsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tIHRyYW5zZmVyLmM6ZG9uZV9zZW5kaW5nIHdoZW4gd2Ugc3RvcCBIVFRQLzMgdXBsb2FkaW5nLgorICovCitDVVJMY29kZSBDdXJsX3F1aWNfZG9uZV9zZW5kaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaWYoY29ubi0+aGFuZGxlciA9PSAmQ3VybF9oYW5kbGVyX2h0dHAzKSB7CisgICAgLyogb25seSBmb3IgSFRUUC8zIHRyYW5zZmVycyAqLworICAgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgICAgc3RyZWFtLT51cGxvYWRfZG9uZSA9IFRSVUU7CisgICAgKHZvaWQpbmdodHRwM19jb25uX3Jlc3VtZV9zdHJlYW0ocXMtPmgzY29ubiwgc3RyZWFtLT5zdHJlYW0zX2lkKTsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tIGh0dHAuYzpDdXJsX2h0dHBfZG9uZSB3aGVuIGEgcmVxdWVzdCBjb21wbGV0ZXMuCisgKi8KK3ZvaWQgQ3VybF9xdWljX2RvbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKXByZW1hdHVyZTsKKyAgaWYoZGF0YS0+Y29ubi0+aGFuZGxlciA9PSAmQ3VybF9oYW5kbGVyX2h0dHAzKSB7CisgICAgLyogb25seSBmb3IgSFRUUC8zIHRyYW5zZmVycyAqLworICAgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBkYXRhLT5yZXEucHJvdG9wOworICAgIEN1cmxfZHluX2ZyZWUoJnN0cmVhbS0+b3ZlcmZsb3cpOworICB9Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0cmFuc2Zlci5jOmRhdGFfcGVuZGluZyB0byBrbm93IGlmIHdlIHNob3VsZCBrZWVwIGxvb3BpbmcKKyAqIHRvIHJlY2VpdmUgbW9yZSBkYXRhIGZyb20gdGhlIGNvbm5lY3Rpb24uCisgKi8KK2Jvb2wgQ3VybF9xdWljX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQoreworICAvKiBXZSBtYXkgaGF2ZSByZWNlaXZlZCBtb3JlIGRhdGEgdGhhbiB3ZSdyZSBhYmxlIHRvIGhvbGQgaW4gdGhlIHJlY2VpdmUKKyAgICAgYnVmZmVyIGFuZCBhbGxvY2F0ZWQgYW4gb3ZlcmZsb3cgYnVmZmVyLiBTaW5jZSBpdCdzIHBvc3NpYmxlIHRoYXQKKyAgICAgdGhlcmUncyBubyBtb3JlIGRhdGEgY29taW5nIG9uIHRoZSBzb2NrZXQsIHdlIG5lZWQgdG8ga2VlcCByZWFkaW5nCisgICAgIHVudGlsIHRoZSBvdmVyZmxvdyBidWZmZXIgaXMgZW1wdHkuICovCisgIGNvbnN0IHN0cnVjdCBIVFRQICpzdHJlYW0gPSBkYXRhLT5yZXEucHJvdG9wOworICByZXR1cm4gQ3VybF9keW5fbGVuKCZzdHJlYW0tPm92ZXJmbG93KSA+IDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvbmd0Y3AyLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9uZ3RjcDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmY4YjU2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvbmd0Y3AyLmgKQEAgLTAsMCArMSw3MyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9WUVVJQ19OR1RDUDJfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9WUVVJQ19OR1RDUDJfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX05HVENQMgorCisjaW5jbHVkZSA8bmd0Y3AyL25ndGNwMi5oPgorI2luY2x1ZGUgPG5naHR0cDMvbmdodHRwMy5oPgorI2lmZGVmIFVTRV9PUEVOU1NMCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKyNpbmNsdWRlIDxnbnV0bHMvZ251dGxzLmg+CisjZW5kaWYKKworc3RydWN0IHF1aWNfaGFuZHNoYWtlIHsKKyAgY2hhciAqYnVmOyAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBidWZmZXIgKi8KKyAgc2l6ZV90IGFsbG9jbGVuOyAvKiBzaXplIG9mIGFsbG9jYXRpb24gKi8KKyAgc2l6ZV90IGxlbjsgICAgICAvKiBzaXplIG9mIGNvbnRlbnQgaW4gYnVmZmVyICovCisgIHNpemVfdCBucmVhZDsgICAgLyogaG93IG1hbnkgYnl0ZXMgaGF2ZSBiZWVuIHJlYWQgKi8KK307CisKK3N0cnVjdCBxdWljc29ja2V0IHsKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uOyAvKiBwb2ludCBiYWNrIHRvIHRoZSBjb25uZWN0aW9uICovCisgIG5ndGNwMl9jb25uICpxY29ubjsKKyAgbmd0Y3AyX2NpZCBkY2lkOworICBuZ3RjcDJfY2lkIHNjaWQ7CisgIHVpbnQzMl90IHZlcnNpb247CisgIG5ndGNwMl9zZXR0aW5ncyBzZXR0aW5nczsKKyNpZmRlZiBVU0VfT1BFTlNTTAorICBTU0xfQ1RYICpzc2xjdHg7CisgIFNTTCAqc3NsOworI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorICBnbnV0bHNfY2VydGlmaWNhdGVfY3JlZGVudGlhbHNfdCBjcmVkOworICBnbnV0bHNfc2Vzc2lvbl90IHNzbDsKKyNlbmRpZgorICBzdHJ1Y3QgcXVpY19oYW5kc2hha2UgY3J5cHRvX2RhdGFbM107CisgIC8qIHRoZSBsYXN0IFRMUyBhbGVydCBkZXNjcmlwdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIGxvY2FsIGVuZHBvaW50ICovCisgIHVpbnQ4X3QgdGxzX2FsZXJ0OworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbF9hZGRyOworICBzb2NrbGVuX3QgbG9jYWxfYWRkcmxlbjsKKworICBuZ2h0dHAzX2Nvbm4gKmgzY29ubjsKKyAgbmdodHRwM19jb25uX3NldHRpbmdzIGgzc2V0dGluZ3M7CisgIGludCBxbG9nZmQ7Cit9OworCisjaW5jbHVkZSAidXJsZGF0YS5oIgorCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1ZRVUlDX05HVENQMl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9xdWljaGUuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3ZxdWljL3F1aWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNmYxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9xdWljaGUuYwpAQCAtMCwwICsxLDg1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX1FVSUNIRQorI2luY2x1ZGUgPHF1aWNoZS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAicmFuZC5oIgorI2luY2x1ZGUgInF1aWMuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgInZxdWljLmgiCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBERUJVR19IVFRQMworLyogI2RlZmluZSBERUJVR19RVUlDSEUgKi8KKyNpZmRlZiBERUJVR19IVFRQMworI2RlZmluZSBIM0JVR0YoeCkgeAorI2Vsc2UKKyNkZWZpbmUgSDNCVUdGKHgpIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgUVVJQ19NQVhfU1RSRUFNUyAoMjU2KjEwMjQpCisjZGVmaW5lIFFVSUNfTUFYX0RBVEEgKDEqMTAyNCoxMDI0KQorI2RlZmluZSBRVUlDX0lETEVfVElNRU9VVCAoNjAgKiAxMDAwKSAvKiBtaWxsaXNlY29uZHMgKi8KKworc3RhdGljIENVUkxjb2RlIHByb2Nlc3NfaW5ncmVzcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMpOworCitzdGF0aWMgQ1VSTGNvZGUgZmx1c2hfZWdyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcyk7CisKK3N0YXRpYyBDVVJMY29kZSBodHRwX3JlcXVlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOworc3RhdGljIEN1cmxfcmVjdiBoM19zdHJlYW1fcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgaDNfc3RyZWFtX3NlbmQ7CisKK3N0YXRpYyBpbnQgcXVpY2hlX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmY29ubi0+ZGF0YS0+cmVxOworICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKKworICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworCisgIC8qIGluIGEgSFRUUC8yIGNvbm5lY3Rpb24gd2UgY2FuIGJhc2ljYWxseSBhbHdheXMgZ2V0IGEgZnJhbWUgc28gd2Ugc2hvdWxkCisgICAgIGFsd2F5cyBiZSByZWFkeSBmb3Igb25lICovCisgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKKworICAvKiB3ZSdyZSBzdGlsbCB1cGxvYWRpbmcgb3IgdGhlIEhUVFAvMiBsYXllciB3YW50cyB0byBzZW5kIGRhdGEgKi8KKyAgaWYoKGstPmtlZXBvbiAmIChLRUVQX1NFTkR8S0VFUF9TRU5EX1BBVVNFKSkgPT0gS0VFUF9TRU5EKQorICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgcmV0dXJuIGJpdG1hcDsKK30KKworc3RhdGljIGludCBxdWljaGVfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcykKK3sKKyAgcmV0dXJuIHF1aWNoZV9nZXRzb2NrKChzdHJ1Y3QgY29ubmVjdGRhdGEgKiljb25uLCBzb2Nrcyk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBxc19kaXNjb25uZWN0KHN0cnVjdCBxdWljc29ja2V0ICpxcykKK3sKKyAgaWYocXMtPmgzY29uZmlnKQorICAgIHF1aWNoZV9oM19jb25maWdfZnJlZShxcy0+aDNjb25maWcpOworICBpZihxcy0+aDNjKQorICAgIHF1aWNoZV9oM19jb25uX2ZyZWUocXMtPmgzYyk7CisgIHF1aWNoZV9jb25maWdfZnJlZShxcy0+Y2ZnKTsKKyAgcXVpY2hlX2Nvbm5fZnJlZShxcy0+Y29ubik7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIHF1aWNoZV9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgKHZvaWQpZGVhZF9jb25uZWN0aW9uOworICByZXR1cm4gcXNfZGlzY29ubmVjdChxcyk7Cit9CisKK3ZvaWQgQ3VybF9xdWljX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGVtcGluZGV4KQoreworICBpZihjb25uLT50cmFuc3BvcnQgPT0gVFJOU1BSVF9RVUlDKQorICAgIHFzX2Rpc2Nvbm5lY3QoJmNvbm4tPmhlcXVpY1t0ZW1waW5kZXhdKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBxdWljaGVfY29ubmNoZWNrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hlY2tzX3RvX3BlcmZvcm0pCit7CisgICh2b2lkKWNvbm47CisgICh2b2lkKWNoZWNrc190b19wZXJmb3JtOworICByZXR1cm4gQ09OTlJFU1VMVF9OT05FOworfQorCitzdGF0aWMgQ1VSTGNvZGUgcXVpY2hlX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CisgIHN0cmVhbS0+aDNyZXEgPSBGQUxTRTsgLyogbm90IHNlbnQgKi8KKyAgcmV0dXJuIEN1cmxfaHR0cChjb25uLCBkb25lKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2h0dHAzID0geworICAiSFRUUFMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgcXVpY2hlX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBDdXJsX2h0dHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBxdWljaGVfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgcXVpY2hlX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgcXVpY2hlX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgcXVpY2hlX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIHF1aWNoZV9jb25uY2hlY2ssICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX0hUVFAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0hUVFBTLCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX1NTTCB8IFBST1RPUFRfU1RSRUFNICAgICAgICAgIC8qIGZsYWdzICovCit9OworCisjaWZkZWYgREVCVUdfUVVJQ0hFCitzdGF0aWMgdm9pZCBxdWljaGVfZGVidWdfbG9nKGNvbnN0IGNoYXIgKmxpbmUsIHZvaWQgKmFyZ3ApCit7CisgICh2b2lkKWFyZ3A7CisgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGxpbmUpOworfQorI2VuZGlmCisKK0NVUkxjb2RlIEN1cmxfcXVpY19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSAmY29ubi0+aGVxdWljW3NvY2tpbmRleF07CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyICprZXlsb2dfZmlsZSA9IE5VTEw7CisKKyNpZmRlZiBERUJVR19RVUlDSEUKKyAgLyogaW5pdGlhbGl6ZSBkZWJ1ZyBsb2cgY2FsbGJhY2sgb25seSBvbmNlICovCisgIHN0YXRpYyBpbnQgZGVidWdfbG9nX2luaXQgPSAwOworICBpZighZGVidWdfbG9nX2luaXQpIHsKKyAgICBxdWljaGVfZW5hYmxlX2RlYnVnX2xvZ2dpbmcocXVpY2hlX2RlYnVnX2xvZywgTlVMTCk7CisgICAgZGVidWdfbG9nX2luaXQgPSAxOworICB9CisjZW5kaWYKKworICAodm9pZClhZGRyOworICAodm9pZClhZGRybGVuOworCisgIHFzLT5jZmcgPSBxdWljaGVfY29uZmlnX25ldyhRVUlDSEVfUFJPVE9DT0xfVkVSU0lPTik7CisgIGlmKCFxcy0+Y2ZnKSB7CisgICAgZmFpbGYoZGF0YSwgImNhbid0IGNyZWF0ZSBxdWljaGUgY29uZmlnIik7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyAgcXVpY2hlX2NvbmZpZ19zZXRfbWF4X2lkbGVfdGltZW91dChxcy0+Y2ZnLCBRVUlDX0lETEVfVElNRU9VVCk7CisgIHF1aWNoZV9jb25maWdfc2V0X2luaXRpYWxfbWF4X2RhdGEocXMtPmNmZywgUVVJQ19NQVhfREFUQSk7CisgIHF1aWNoZV9jb25maWdfc2V0X2luaXRpYWxfbWF4X3N0cmVhbV9kYXRhX2JpZGlfbG9jYWwocXMtPmNmZywgUVVJQ19NQVhfREFUQSk7CisgIHF1aWNoZV9jb25maWdfc2V0X2luaXRpYWxfbWF4X3N0cmVhbV9kYXRhX2JpZGlfcmVtb3RlKHFzLT5jZmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVSUNfTUFYX0RBVEEpOworICBxdWljaGVfY29uZmlnX3NldF9pbml0aWFsX21heF9zdHJlYW1fZGF0YV91bmkocXMtPmNmZywgUVVJQ19NQVhfREFUQSk7CisgIHF1aWNoZV9jb25maWdfc2V0X2luaXRpYWxfbWF4X3N0cmVhbXNfYmlkaShxcy0+Y2ZnLCBRVUlDX01BWF9TVFJFQU1TKTsKKyAgcXVpY2hlX2NvbmZpZ19zZXRfaW5pdGlhbF9tYXhfc3RyZWFtc191bmkocXMtPmNmZywgUVVJQ19NQVhfU1RSRUFNUyk7CisgIHF1aWNoZV9jb25maWdfc2V0X2FwcGxpY2F0aW9uX3Byb3Rvcyhxcy0+Y2ZnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVSUNIRV9IM19BUFBMSUNBVElPTl9QUk9UT0NPTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihRVUlDSEVfSDNfQVBQTElDQVRJT05fUFJPVE9DT0wpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEpOworCisgIHJlc3VsdCA9IEN1cmxfcmFuZChkYXRhLCBxcy0+c2NpZCwgc2l6ZW9mKHFzLT5zY2lkKSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGtleWxvZ19maWxlID0gZ2V0ZW52KCJTU0xLRVlMT0dGSUxFIik7CisKKyAgaWYoa2V5bG9nX2ZpbGUpCisgICAgcXVpY2hlX2NvbmZpZ19sb2dfa2V5cyhxcy0+Y2ZnKTsKKworICBxcy0+Y29ubiA9IHF1aWNoZV9jb25uZWN0KGNvbm4tPmhvc3QubmFtZSwgKGNvbnN0IHVpbnQ4X3QgKikgcXMtPnNjaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHFzLT5zY2lkKSwgcXMtPmNmZyk7CisgIGlmKCFxcy0+Y29ubikgeworICAgIGZhaWxmKGRhdGEsICJjYW4ndCBjcmVhdGUgcXVpY2hlIGNvbm5lY3Rpb24iKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIGlmKGtleWxvZ19maWxlKQorICAgIHF1aWNoZV9jb25uX3NldF9rZXlsb2dfcGF0aChxcy0+Y29ubiwga2V5bG9nX2ZpbGUpOworCisgIC8qIEtub3duIHRvIG5vdCB3b3JrIG9uIFdpbmRvd3MgKi8KKyNpZiAhZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChIQVZFX1FVSUNIRV9DT05OX1NFVF9RTE9HX0ZEKQorICB7CisgICAgaW50IHFmZDsKKyAgICAodm9pZClDdXJsX3Fsb2dkaXIoZGF0YSwgcXMtPnNjaWQsIHNpemVvZihxcy0+c2NpZCksICZxZmQpOworICAgIGlmKHFmZCAhPSAtMSkKKyAgICAgIHF1aWNoZV9jb25uX3NldF9xbG9nX2ZkKHFzLT5jb25uLCBxZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicWxvZyB0aXRsZSIsICJjdXJsIHFsb2ciKTsKKyAgfQorI2VuZGlmCisKKyAgcmVzdWx0ID0gZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBzdG9yZSB0aGUgdXNlZCBhZGRyZXNzIGFzIGEgc3RyaW5nICovCisgIGlmKCFDdXJsX2FkZHIyc3RyaW5nKChzdHJ1Y3Qgc29ja2FkZHIqKWFkZHIsIGFkZHJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnByaW1hcnlfaXAsICZjb25uLT5wcmltYXJ5X3BvcnQpKSB7CisgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKKyAgICBmYWlsZihkYXRhLCAic3NyZW0gaW5ldF9udG9wKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICBTT0NLRVJSTk8sIEN1cmxfc3RyZXJyb3IoU09DS0VSUk5PLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKyAgfQorICBtZW1jcHkoY29ubi0+aXBfYWRkcl9zdHIsIGNvbm4tPnByaW1hcnlfaXAsIE1BWF9JUEFEUl9MRU4pOworICBDdXJsX3BlcnNpc3Rjb25uaW5mbyhjb25uKTsKKworICAvKiBmb3IgY29ubmVjdGlvbiByZXVzZSBwdXJwb3NlczogKi8KKyAgY29ubi0+c3NsW0ZJUlNUU09DS0VUXS5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOworCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGFscG5fcHJvdG9jb2xzW10gPSBRVUlDSEVfSDNfQVBQTElDQVRJT05fUFJPVE9DT0w7CisgICAgdW5zaWduZWQgYWxwbl9sZW4sIG9mZnNldCA9IDA7CisKKyAgICAvKiBSZXBsYWNlIGVhY2ggQUxQTiBsZW5ndGggcHJlZml4IGJ5IGEgY29tbWEuICovCisgICAgd2hpbGUob2Zmc2V0IDwgc2l6ZW9mKGFscG5fcHJvdG9jb2xzKSAtIDEpIHsKKyAgICAgIGFscG5fbGVuID0gYWxwbl9wcm90b2NvbHNbb2Zmc2V0XTsKKyAgICAgIGFscG5fcHJvdG9jb2xzW29mZnNldF0gPSAnLCc7CisgICAgICBvZmZzZXQgKz0gMSArIGFscG5fbGVuOworICAgIH0KKworICAgIGluZm9mKGRhdGEsICJTZW50IFFVSUMgY2xpZW50IEluaXRpYWwsIEFMUE46ICVzXG4iLAorICAgICAgICAgIGFscG5fcHJvdG9jb2xzICsgMSk7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBxdWljaGVfaGFzX2Nvbm5lY3RlZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGVtcGluZGV4KQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWMgPSAmY29ubi0+aGVxdWljW3RlbXBpbmRleF07CisKKyAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gaDNfc3RyZWFtX3JlY3Y7CisgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IGgzX3N0cmVhbV9zZW5kOworICBjb25uLT5oYW5kbGVyID0gJkN1cmxfaGFuZGxlcl9odHRwMzsKKyAgY29ubi0+Yml0cy5tdWx0aXBsZXggPSBUUlVFOyAvKiBhdCBsZWFzdCBwb3RlbnRpYWxseSBtdWx0aXBsZXhlZCAqLworICBjb25uLT5odHRwdmVyc2lvbiA9IDMwOworICBjb25uLT5idW5kbGUtPm11bHRpdXNlID0gQlVORExFX01VTFRJUExFWDsKKworICBxcy0+aDNjb25maWcgPSBxdWljaGVfaDNfY29uZmlnX25ldygpOworICBpZighcXMtPmgzY29uZmlnKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIC8qIENyZWF0ZSBhIG5ldyBIVFRQLzMgY29ubmVjdGlvbiBvbiB0aGUgUVVJQyBjb25uZWN0aW9uLiAqLworICBxcy0+aDNjID0gcXVpY2hlX2gzX2Nvbm5fbmV3X3dpdGhfdHJhbnNwb3J0KHFzLT5jb25uLCBxcy0+aDNjb25maWcpOworICBpZighcXMtPmgzYykgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisgIGlmKGNvbm4tPmhlcXVpY1sxLXRlbXBpbmRleF0uY2ZnKSB7CisgICAgcXMgPSAmY29ubi0+aGVxdWljWzEtdGVtcGluZGV4XTsKKyAgICBxdWljaGVfY29uZmlnX2ZyZWUocXMtPmNmZyk7CisgICAgcXVpY2hlX2Nvbm5fZnJlZShxcy0+Y29ubik7CisgICAgcXMtPmNmZyA9IE5VTEw7CisgICAgcXMtPmNvbm4gPSBOVUxMOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKKyAgZmFpbDoKKyAgcXVpY2hlX2gzX2NvbmZpZ19mcmVlKHFzLT5oM2NvbmZpZyk7CisgIHF1aWNoZV9oM19jb25uX2ZyZWUocXMtPmgzYyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgcG9sbGVkIHRvIGNoZWNrIGlmIHRoaXMgUVVJQyBjb25uZWN0aW9uIGhhcyBjb25uZWN0ZWQuCisgKi8KK0NVUkxjb2RlIEN1cmxfcXVpY19pc19jb25uZWN0ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9ICZjb25uLT5oZXF1aWNbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT50ZW1wc29ja1tzb2NraW5kZXhdOworCisgIHJlc3VsdCA9IHByb2Nlc3NfaW5ncmVzcyhjb25uLCBzb2NrZmQsIHFzKTsKKyAgaWYocmVzdWx0KQorICAgIGdvdG8gZXJyb3I7CisKKyAgcmVzdWx0ID0gZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpOworICBpZihyZXN1bHQpCisgICAgZ290byBlcnJvcjsKKworICBpZihxdWljaGVfY29ubl9pc19lc3RhYmxpc2hlZChxcy0+Y29ubikpIHsKKyAgICAqZG9uZSA9IFRSVUU7CisgICAgcmVzdWx0ID0gcXVpY2hlX2hhc19jb25uZWN0ZWQoY29ubiwgMCwgc29ja2luZGV4KTsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgInF1aWNoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIVxuIikpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKKyAgZXJyb3I6CisgIHFzX2Rpc2Nvbm5lY3QocXMpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgcHJvY2Vzc19pbmdyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzKQoreworICBzc2l6ZV90IHJlY3ZkOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgdWludDhfdCAqYnVmID0gKHVpbnQ4X3QgKilkYXRhLT5zdGF0ZS5idWZmZXI7CisgIHNpemVfdCBidWZzaXplID0gZGF0YS0+c2V0LmJ1ZmZlcl9zaXplOworCisgIC8qIGluIGNhc2UgdGhlIHRpbWVvdXQgZXhwaXJlZCAqLworICBxdWljaGVfY29ubl9vbl90aW1lb3V0KHFzLT5jb25uKTsKKworICBkbyB7CisgICAgcmVjdmQgPSByZWN2KHNvY2tmZCwgYnVmLCBidWZzaXplLCAwKTsKKyAgICBpZigocmVjdmQgPCAwKSAmJiAoKFNPQ0tFUlJOTyA9PSBFQUdBSU4pIHx8IChTT0NLRVJSTk8gPT0gRVdPVUxEQkxPQ0spKSkKKyAgICAgIGJyZWFrOworCisgICAgaWYocmVjdmQgPCAwKSB7CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAicXVpY2hlOiByZWN2KCkgdW5leHBlY3RlZGx5IHJldHVybmVkICVkICIKKyAgICAgICAgICAgICIoZXJybm86ICVkLCBzb2NrZXQgJWQpIiwgcmVjdmQsIFNPQ0tFUlJOTywgc29ja2ZkKTsKKyAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgIH0KKworICAgIHJlY3ZkID0gcXVpY2hlX2Nvbm5fcmVjdihxcy0+Y29ubiwgYnVmLCByZWN2ZCk7CisgICAgaWYocmVjdmQgPT0gUVVJQ0hFX0VSUl9ET05FKQorICAgICAgYnJlYWs7CisKKyAgICBpZihyZWN2ZCA8IDApIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJxdWljaGVfY29ubl9yZWN2KCkgPT0gJWQiLCByZWN2ZCk7CisgICAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICB9CisgIH0gd2hpbGUoMSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogZmx1c2hfZWdyZXNzIGRyYWlucyB0aGUgYnVmZmVycyBhbmQgc2VuZHMgb2ZmIGRhdGEuCisgKiBDYWxscyBmYWlsZigpIG9uIGVycm9ycy4KKyAqLworc3RhdGljIENVUkxjb2RlIGZsdXNoX2VncmVzcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxdWljc29ja2V0ICpxcykKK3sKKyAgc3NpemVfdCBzZW50OworICBzdGF0aWMgdWludDhfdCBvdXRbMTIwMF07CisgIGludDY0X3QgdGltZW91dF9uczsKKworICBkbyB7CisgICAgc2VudCA9IHF1aWNoZV9jb25uX3NlbmQocXMtPmNvbm4sIG91dCwgc2l6ZW9mKG91dCkpOworICAgIGlmKHNlbnQgPT0gUVVJQ0hFX0VSUl9ET05FKQorICAgICAgYnJlYWs7CisKKyAgICBpZihzZW50IDwgMCkgeworICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgInF1aWNoZV9jb25uX3NlbmQgcmV0dXJuZWQgJXpkXG4iLAorICAgICAgICAgICAgc2VudCk7CisgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICB9CisKKyAgICBzZW50ID0gc2VuZChzb2NrZmQsIG91dCwgc2VudCwgMCk7CisgICAgaWYoc2VudCA8IDApIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJzZW5kKCkgcmV0dXJuZWQgJXpkXG4iLCBzZW50KTsKKyAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgIH0KKyAgfSB3aGlsZSgxKTsKKworICAvKiB0aW1lIHVudGlsIHRoZSBuZXh0IHRpbWVvdXQgZXZlbnQsIGFzIG5hbm9zZWNvbmRzLiAqLworICB0aW1lb3V0X25zID0gcXVpY2hlX2Nvbm5fdGltZW91dF9hc19uYW5vcyhxcy0+Y29ubik7CisgIGlmKHRpbWVvdXRfbnMpCisgICAgLyogZXhwaXJlIHVzZXMgbWlsbGlzZWNvbmRzICovCisgICAgQ3VybF9leHBpcmUoY29ubi0+ZGF0YSwgKHRpbWVvdXRfbnMgKyA5OTk5OTkpIC8gMTAwMDAwMCwgRVhQSVJFX1FVSUMpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RydWN0IGgzaDFoZWFkZXIgeworICBjaGFyICpkZXN0OworICBzaXplX3QgZGVzdGxlbjsgLyogbGVmdCB0byB1c2UgKi8KKyAgc2l6ZV90IG5sZW47IC8qIHVzZWQgKi8KK307CisKK3N0YXRpYyBpbnQgY2JfZWFjaF9oZWFkZXIodWludDhfdCAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJncCkKK3sKKyAgc3RydWN0IGgzaDFoZWFkZXIgKmhlYWRlcnMgPSAoc3RydWN0IGgzaDFoZWFkZXIgKilhcmdwOworICBzaXplX3Qgb2xlbiA9IDA7CisKKyAgaWYoKG5hbWVfbGVuID09IDcpICYmICFzdHJuY21wKCI6c3RhdHVzIiwgKGNoYXIgKiluYW1lLCA3KSkgeworICAgIG1zbnByaW50ZihoZWFkZXJzLT5kZXN0LAorICAgICAgICAgICAgICBoZWFkZXJzLT5kZXN0bGVuLCAiSFRUUC8zICUuKnNcbiIsCisgICAgICAgICAgICAgIChpbnQpIHZhbHVlX2xlbiwgdmFsdWUpOworICB9CisgIGVsc2UgaWYoIWhlYWRlcnMtPm5sZW4pIHsKKyAgICByZXR1cm4gQ1VSTEVfSFRUUDM7CisgIH0KKyAgZWxzZSB7CisgICAgbXNucHJpbnRmKGhlYWRlcnMtPmRlc3QsCisgICAgICAgICAgICAgIGhlYWRlcnMtPmRlc3RsZW4sICIlLipzOiAlLipzXG4iLAorICAgICAgICAgICAgICAoaW50KW5hbWVfbGVuLCBuYW1lLCAoaW50KSB2YWx1ZV9sZW4sIHZhbHVlKTsKKyAgfQorICBvbGVuID0gc3RybGVuKGhlYWRlcnMtPmRlc3QpOworICBoZWFkZXJzLT5kZXN0bGVuIC09IG9sZW47CisgIGhlYWRlcnMtPm5sZW4gKz0gb2xlbjsKKyAgaGVhZGVycy0+ZGVzdCArPSBvbGVuOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaDNfc3RyZWFtX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBzc2l6ZV90IHJlY3ZkID0gLTE7CisgIHNzaXplX3QgcmNvZGU7CisgIHN0cnVjdCBxdWljc29ja2V0ICpxcyA9IGNvbm4tPnF1aWM7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBxdWljaGVfaDNfZXZlbnQgKmV2OworICBpbnQgcmM7CisgIHN0cnVjdCBoM2gxaGVhZGVyIGhlYWRlcnM7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgSFRUUCAqc3RyZWFtID0gZGF0YS0+cmVxLnByb3RvcDsKKyAgaGVhZGVycy5kZXN0ID0gYnVmOworICBoZWFkZXJzLmRlc3RsZW4gPSBidWZmZXJzaXplOworICBoZWFkZXJzLm5sZW4gPSAwOworCisgIGlmKHByb2Nlc3NfaW5ncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgIGluZm9mKGRhdGEsICJoM19zdHJlYW1fcmVjdiByZXR1cm5zIG9uIGluZ3Jlc3NcbiIpOworICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgd2hpbGUocmVjdmQgPCAwKSB7CisgICAgaW50NjRfdCBzID0gcXVpY2hlX2gzX2Nvbm5fcG9sbChxcy0+aDNjLCBxcy0+Y29ubiwgJmV2KTsKKyAgICBpZihzIDwgMCkKKyAgICAgIC8qIG5vdGhpbmcgbW9yZSB0byBkbyAqLworICAgICAgYnJlYWs7CisKKyAgICBpZihzICE9IHN0cmVhbS0+c3RyZWFtM19pZCkgeworICAgICAgLyogYW5vdGhlciB0cmFuc2ZlciwgaWdub3JlIGZvciBub3cgKi8KKyAgICAgIGluZm9mKGRhdGEsICJHb3QgaDMgZm9yIHN0cmVhbSAldSwgZXhwZWN0cyAldVxuIiwKKyAgICAgICAgICAgIHMsIHN0cmVhbS0+c3RyZWFtM19pZCk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBzd2l0Y2gocXVpY2hlX2gzX2V2ZW50X3R5cGUoZXYpKSB7CisgICAgY2FzZSBRVUlDSEVfSDNfRVZFTlRfSEVBREVSUzoKKyAgICAgIHJjID0gcXVpY2hlX2gzX2V2ZW50X2Zvcl9lYWNoX2hlYWRlcihldiwgY2JfZWFjaF9oZWFkZXIsICZoZWFkZXJzKTsKKyAgICAgIGlmKHJjKSB7CisgICAgICAgICpjdXJsY29kZSA9IHJjOworICAgICAgICBmYWlsZihkYXRhLCAiRXJyb3IgaW4gSFRUUC8zIHJlc3BvbnNlIGhlYWRlciIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHJlY3ZkID0gaGVhZGVycy5ubGVuOworICAgICAgYnJlYWs7CisgICAgY2FzZSBRVUlDSEVfSDNfRVZFTlRfREFUQToKKyAgICAgIGlmKCFzdHJlYW0tPmZpcnN0Ym9keSkgeworICAgICAgICAvKiBhZGQgYSBoZWFkZXItYm9keSBzZXBhcmF0b3IgQ1JMRiAqLworICAgICAgICBidWZbMF0gPSAnXHInOworICAgICAgICBidWZbMV0gPSAnXG4nOworICAgICAgICBidWYgKz0gMjsKKyAgICAgICAgYnVmZmVyc2l6ZSAtPSAyOworICAgICAgICBzdHJlYW0tPmZpcnN0Ym9keSA9IFRSVUU7CisgICAgICAgIHJlY3ZkID0gMjsgLyogdHdvIGJ5dGVzIGFscmVhZHkgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmVjdmQgPSAwOworICAgICAgcmNvZGUgPSBxdWljaGVfaDNfcmVjdl9ib2R5KHFzLT5oM2MsIHFzLT5jb25uLCBzLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzaXplKTsKKyAgICAgIGlmKHJjb2RlIDw9IDApIHsKKyAgICAgICAgcmVjdmQgPSAtMTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICByZWN2ZCArPSByY29kZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBRVUlDSEVfSDNfRVZFTlRfRklOSVNIRUQ6CisgICAgICBzdHJlYW1jbG9zZShjb25uLCAiRW5kIG9mIHN0cmVhbSIpOworICAgICAgcmVjdmQgPSAwOyAvKiBlbmQgb2Ygc3RyZWFtICovCisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcXVpY2hlX2gzX2V2ZW50X2ZyZWUoZXYpOworICB9CisgIGlmKGZsdXNoX2VncmVzcyhjb25uLCBzb2NrZmQsIHFzKSkgeworICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgKmN1cmxjb2RlID0gKC0xID09IHJlY3ZkKT8gQ1VSTEVfQUdBSU4gOiBDVVJMRV9PSzsKKyAgaWYocmVjdmQgPj0gMCkKKyAgICAvKiBHZXQgdGhpcyBjYWxsZWQgYWdhaW4gdG8gZHJhaW4gdGhlIGV2ZW50IHF1ZXVlICovCisgICAgQ3VybF9leHBpcmUoZGF0YSwgMCwgRVhQSVJFX1FVSUMpOworCisgIGRhdGEtPnN0YXRlLmRyYWluID0gKHJlY3ZkID49IDApID8gMSA6IDA7CisgIHJldHVybiByZWN2ZDsKK30KKworc3RhdGljIHNzaXplX3QgaDNfc3RyZWFtX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIHNzaXplX3Qgc2VudDsKKyAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdHJlYW0tPmgzcmVxKSB7CisgICAgQ1VSTGNvZGUgcmVzdWx0ID0gaHR0cF9yZXF1ZXN0KGNvbm4sIG1lbSwgbGVuKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbnQgPSBsZW47CisgIH0KKyAgZWxzZSB7CisgICAgSDNCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJQYXNzIG9uICV6ZCBib2R5IGJ5dGVzIHRvIHF1aWNoZVxuIiwKKyAgICAgICAgICAgICAgICAgbGVuKSk7CisgICAgc2VudCA9IHF1aWNoZV9oM19zZW5kX2JvZHkocXMtPmgzYywgcXMtPmNvbm4sIHN0cmVhbS0+c3RyZWFtM19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKW1lbSwgbGVuLCBGQUxTRSk7CisgICAgaWYoc2VudCA8IDApIHsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisKKyAgaWYoZmx1c2hfZWdyZXNzKGNvbm4sIHNvY2tmZCwgcXMpKSB7CisgICAgKmN1cmxjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAqY3VybGNvZGUgPSBDVVJMRV9PSzsKKyAgcmV0dXJuIHNlbnQ7Cit9CisKKy8qCisgKiBTdG9yZSBxdWljaGUgdmVyc2lvbiBpbmZvIGluIHRoaXMgYnVmZmVyLCBQcmVmaXggd2l0aCBhIHNwYWNlLiAgUmV0dXJuIHRvdGFsCisgKiBsZW5ndGggd3JpdHRlbi4KKyAqLworaW50IEN1cmxfcXVpY192ZXIoY2hhciAqcCwgc2l6ZV90IGxlbikKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihwLCBsZW4sICJxdWljaGUvJXMiLCBxdWljaGVfdmVyc2lvbigpKTsKK30KKworLyogSW5kZXggd2hlcmUgOmF1dGhvcml0eSBoZWFkZXIgZmllbGQgd2lsbCBhcHBlYXIgaW4gcmVxdWVzdCBoZWFkZXIKKyAgIGZpZWxkIGxpc3QuICovCisjZGVmaW5lIEFVVEhPUklUWV9EU1RfSURYIDMKKworc3RhdGljIENVUkxjb2RlIGh0dHBfcmVxdWVzdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKK3sKKyAgLyoKKyAgICovCisgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworICBzaXplX3QgbmhlYWRlcjsKKyAgc2l6ZV90IGk7CisgIHNpemVfdCBhdXRob3JpdHlfaWR4OworICBjaGFyICpoZGJ1ZiA9IChjaGFyICopbWVtOworICBjaGFyICplbmQsICpsaW5lX2VuZDsKKyAgaW50NjRfdCBzdHJlYW0zX2lkOworICBxdWljaGVfaDNfaGVhZGVyICpudmEgPSBOVUxMOworICBzdHJ1Y3QgcXVpY3NvY2tldCAqcXMgPSBjb25uLT5xdWljOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgc3RyZWFtLT5oM3JlcSA9IFRSVUU7IC8qIHNlbmYgb2ZmISAqLworCisgIC8qIENhbGN1bGF0ZSBudW1iZXIgb2YgaGVhZGVycyBjb250YWluZWQgaW4gW21lbSwgbWVtICsgbGVuKS4gQXNzdW1lcyBhCisgICAgIGNvcnJlY3RseSBnZW5lcmF0ZWQgSFRUUCBoZWFkZXIgZmllbGQgYmxvY2suICovCisgIG5oZWFkZXIgPSAwOworICBmb3IoaSA9IDE7IGkgPCBsZW47ICsraSkgeworICAgIGlmKGhkYnVmW2ldID09ICdcbicgJiYgaGRidWZbaSAtIDFdID09ICdccicpIHsKKyAgICAgICsrbmhlYWRlcjsKKyAgICAgICsraTsKKyAgICB9CisgIH0KKyAgaWYobmhlYWRlciA8IDIpCisgICAgZ290byBmYWlsOworCisgIC8qIFdlIGNvdW50ZWQgYWRkaXRpb25hbCAyIFxyXG4gaW4gdGhlIGZpcnN0IGFuZCBsYXN0IGxpbmUuIFdlIG5lZWQgMworICAgICBuZXcgaGVhZGVyczogOm1ldGhvZCwgOnBhdGggYW5kIDpzY2hlbWUuIFRoZXJlZm9yZSB3ZSBuZWVkIG9uZQorICAgICBtb3JlIHNwYWNlLiAqLworICBuaGVhZGVyICs9IDE7CisgIG52YSA9IG1hbGxvYyhzaXplb2YocXVpY2hlX2gzX2hlYWRlcikgKiBuaGVhZGVyKTsKKyAgaWYoIW52YSkgeworICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgLyogRXh0cmFjdCA6bWV0aG9kLCA6cGF0aCBmcm9tIHJlcXVlc3QgbGluZQorICAgICBXZSBkbyBsaW5lIGVuZGluZ3Mgd2l0aCBDUkxGIHNvIGNoZWNraW5nIGZvciBDUiBpcyBlbm91Z2ggKi8KKyAgbGluZV9lbmQgPSBtZW1jaHIoaGRidWYsICdccicsIGxlbik7CisgIGlmKCFsaW5lX2VuZCkgeworICAgIHJlc3VsdCA9IENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsgLyogaW50ZXJuYWwgZXJyb3IgKi8KKyAgICBnb3RvIGZhaWw7CisgIH0KKworICAvKiBNZXRob2QgZG9lcyBub3QgY29udGFpbiBzcGFjZXMgKi8KKyAgZW5kID0gbWVtY2hyKGhkYnVmLCAnICcsIGxpbmVfZW5kIC0gaGRidWYpOworICBpZighZW5kIHx8IGVuZCA9PSBoZGJ1ZikKKyAgICBnb3RvIGZhaWw7CisgIG52YVswXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOm1ldGhvZCI7CisgIG52YVswXS5uYW1lX2xlbiA9IHN0cmxlbigoY2hhciAqKW52YVswXS5uYW1lKTsKKyAgbnZhWzBdLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiloZGJ1ZjsKKyAgbnZhWzBdLnZhbHVlX2xlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKworICBoZGJ1ZiA9IGVuZCArIDE7CisKKyAgLyogUGF0aCBtYXkgY29udGFpbiBzcGFjZXMgc28gc2NhbiBiYWNrd2FyZHMgKi8KKyAgZW5kID0gTlVMTDsKKyAgZm9yKGkgPSAoc2l6ZV90KShsaW5lX2VuZCAtIGhkYnVmKTsgaTsgLS1pKSB7CisgICAgaWYoaGRidWZbaSAtIDFdID09ICcgJykgeworICAgICAgZW5kID0gJmhkYnVmW2kgLSAxXTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZighZW5kIHx8IGVuZCA9PSBoZGJ1ZikKKyAgICBnb3RvIGZhaWw7CisgIG52YVsxXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOnBhdGgiOworICBudmFbMV0ubmFtZV9sZW4gPSBzdHJsZW4oKGNoYXIgKiludmFbMV0ubmFtZSk7CisgIG52YVsxXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CisgIG52YVsxXS52YWx1ZV9sZW4gPSAoc2l6ZV90KShlbmQgLSBoZGJ1Zik7CisKKyAgbnZhWzJdLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKSI6c2NoZW1lIjsKKyAgbnZhWzJdLm5hbWVfbGVuID0gc3RybGVuKChjaGFyICopbnZhWzJdLm5hbWUpOworICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQorICAgIG52YVsyXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopImh0dHBzIjsKKyAgZWxzZQorICAgIG52YVsyXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopImh0dHAiOworICBudmFbMl0udmFsdWVfbGVuID0gc3RybGVuKChjaGFyICopbnZhWzJdLnZhbHVlKTsKKworCisgIGF1dGhvcml0eV9pZHggPSAwOworICBpID0gMzsKKyAgd2hpbGUoaSA8IG5oZWFkZXIpIHsKKyAgICBzaXplX3QgaGxlbjsKKworICAgIGhkYnVmID0gbGluZV9lbmQgKyAyOworCisgICAgLyogY2hlY2sgZm9yIG5leHQgQ1IsIGJ1dCBvbmx5IHdpdGhpbiB0aGUgcGllY2Ugb2YgZGF0YSBsZWZ0IGluIHRoZSBnaXZlbgorICAgICAgIGJ1ZmZlciAqLworICAgIGxpbmVfZW5kID0gbWVtY2hyKGhkYnVmLCAnXHInLCBsZW4gLSAoaGRidWYgLSAoY2hhciAqKW1lbSkpOworICAgIGlmKCFsaW5lX2VuZCB8fCAobGluZV9lbmQgPT0gaGRidWYpKQorICAgICAgZ290byBmYWlsOworCisgICAgLyogaGVhZGVyIGNvbnRpbnVhdGlvbiBsaW5lcyBhcmUgbm90IHN1cHBvcnRlZCAqLworICAgIGlmKCpoZGJ1ZiA9PSAnICcgfHwgKmhkYnVmID09ICdcdCcpCisgICAgICBnb3RvIGZhaWw7CisKKyAgICBmb3IoZW5kID0gaGRidWY7IGVuZCA8IGxpbmVfZW5kICYmICplbmQgIT0gJzonOyArK2VuZCkKKyAgICAgIDsKKyAgICBpZihlbmQgPT0gaGRidWYgfHwgZW5kID09IGxpbmVfZW5kKQorICAgICAgZ290byBmYWlsOworICAgIGhsZW4gPSBlbmQgLSBoZGJ1ZjsKKworICAgIGlmKGhsZW4gPT0gNCAmJiBzdHJuY2FzZWNvbXBhcmUoImhvc3QiLCBoZGJ1ZiwgNCkpIHsKKyAgICAgIGF1dGhvcml0eV9pZHggPSBpOworICAgICAgbnZhW2ldLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKSI6YXV0aG9yaXR5IjsKKyAgICAgIG52YVtpXS5uYW1lX2xlbiA9IHN0cmxlbigoY2hhciAqKW52YVtpXS5uYW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBudmFbaV0ubmFtZV9sZW4gPSAoc2l6ZV90KShlbmQgLSBoZGJ1Zik7CisgICAgICAvKiBMb3dlciBjYXNlIHRoZSBoZWFkZXIgbmFtZSBmb3IgSFRUUC8zICovCisgICAgICBDdXJsX3N0cm50b2xvd2VyKChjaGFyICopaGRidWYsIGhkYnVmLCBudmFbaV0ubmFtZV9sZW4pOworICAgICAgbnZhW2ldLm5hbWUgPSAodW5zaWduZWQgY2hhciAqKWhkYnVmOworICAgIH0KKyAgICBoZGJ1ZiA9IGVuZCArIDE7CisgICAgd2hpbGUoKmhkYnVmID09ICcgJyB8fCAqaGRidWYgPT0gJ1x0JykKKyAgICAgICsraGRidWY7CisgICAgZW5kID0gbGluZV9lbmQ7CisKKyNpZiAwIC8qIFRoaXMgc2hvdWxkIHByb2JhYmx5IGdvIGluIG1vcmUgb3IgbGVzcyBsaWtlIHRoaXMgKi8KKyAgICBzd2l0Y2goaW5zcGVjdF9oZWFkZXIoKGNvbnN0IGNoYXIgKiludmFbaV0ubmFtZSwgbnZhW2ldLm5hbWVsZW4sIGhkYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgLSBoZGJ1ZikpIHsKKyAgICBjYXNlIEhFQURFUklOU1RfSUdOT1JFOgorICAgICAgLyogc2tpcCBoZWFkZXIgZmllbGRzIHByb2hpYml0ZWQgYnkgSFRUUC8yIHNwZWNpZmljYXRpb24uICovCisgICAgICAtLW5oZWFkZXI7CisgICAgICBjb250aW51ZTsKKyAgICBjYXNlIEhFQURFUklOU1RfVEVfVFJBSUxFUlM6CisgICAgICBudmFbaV0udmFsdWUgPSAodWludDhfdCopInRyYWlsZXJzIjsKKyAgICAgIG52YVtpXS52YWx1ZV9sZW4gPSBzaXplb2YoInRyYWlsZXJzIikgLSAxOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIG52YVtpXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CisgICAgICBudmFbaV0udmFsdWVfbGVuID0gKHNpemVfdCkoZW5kIC0gaGRidWYpOworICAgIH0KKyNlbmRpZgorICAgIG52YVtpXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CisgICAgbnZhW2ldLnZhbHVlX2xlbiA9IChzaXplX3QpKGVuZCAtIGhkYnVmKTsKKworICAgICsraTsKKyAgfQorCisgIC8qIDphdXRob3JpdHkgbXVzdCBjb21lIGJlZm9yZSBub24tcHNldWRvIGhlYWRlciBmaWVsZHMgKi8KKyAgaWYoYXV0aG9yaXR5X2lkeCAhPSAwICYmIGF1dGhvcml0eV9pZHggIT0gQVVUSE9SSVRZX0RTVF9JRFgpIHsKKyAgICBxdWljaGVfaDNfaGVhZGVyIGF1dGhvcml0eSA9IG52YVthdXRob3JpdHlfaWR4XTsKKyAgICBmb3IoaSA9IGF1dGhvcml0eV9pZHg7IGkgPiBBVVRIT1JJVFlfRFNUX0lEWDsgLS1pKSB7CisgICAgICBudmFbaV0gPSBudmFbaSAtIDFdOworICAgIH0KKyAgICBudmFbaV0gPSBhdXRob3JpdHk7CisgIH0KKworICAvKiBXYXJuIHN0cmVhbSBtYXkgYmUgcmVqZWN0ZWQgaWYgY3VtdWxhdGl2ZSBsZW5ndGggb2YgaGVhZGVycyBpcyB0b28KKyAgICAgbGFyZ2UuICovCisjZGVmaW5lIE1BWF9BQ0MgNjAwMDAgIC8qIDw2NEtCIHRvIGFjY291bnQgZm9yIHNvbWUgb3ZlcmhlYWQgKi8KKyAgeworICAgIHNpemVfdCBhY2MgPSAwOworCisgICAgZm9yKGkgPSAwOyBpIDwgbmhlYWRlcjsgKytpKSB7CisgICAgICBhY2MgKz0gbnZhW2ldLm5hbWVfbGVuICsgbnZhW2ldLnZhbHVlX2xlbjsKKworICAgICAgSDNCVUdGKGluZm9mKGRhdGEsICJoMyBbJS4qczogJS4qc11cbiIsCisgICAgICAgICAgICAgICAgICAgbnZhW2ldLm5hbWVfbGVuLCBudmFbaV0ubmFtZSwKKyAgICAgICAgICAgICAgICAgICBudmFbaV0udmFsdWVfbGVuLCBudmFbaV0udmFsdWUpKTsKKyAgICB9CisKKyAgICBpZihhY2MgPiBNQVhfQUNDKSB7CisgICAgICBpbmZvZihkYXRhLCAiaHR0cF9yZXF1ZXN0OiBXYXJuaW5nOiBUaGUgY3VtdWxhdGl2ZSBsZW5ndGggb2YgYWxsICIKKyAgICAgICAgICAgICJoZWFkZXJzIGV4Y2VlZHMgJXp1IGJ5dGVzIGFuZCB0aGF0IGNvdWxkIGNhdXNlIHRoZSAiCisgICAgICAgICAgICAic3RyZWFtIHRvIGJlIHJlamVjdGVkLlxuIiwgTUFYX0FDQyk7CisgICAgfQorICB9CisKKyAgc3dpdGNoKGRhdGEtPnN0YXRlLmh0dHByZXEpIHsKKyAgY2FzZSBIVFRQUkVRX1BPU1Q6CisgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CisgIGNhc2UgSFRUUFJFUV9QT1NUX01JTUU6CisgIGNhc2UgSFRUUFJFUV9QVVQ6CisgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgIGVsc2UKKyAgICAgIC8qIGRhdGEgc2VuZGluZyB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGRhdGEgYW1vdW50IHVwIGZyb250ICovCisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gLTE7IC8qIHVua25vd24sIGJ1dCBub3QgemVybyAqLworCisgICAgc3RyZWFtM19pZCA9IHF1aWNoZV9oM19zZW5kX3JlcXVlc3QocXMtPmgzYywgcXMtPmNvbm4sIG52YSwgbmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID8gRkFMU0U6IFRSVUUpOworICAgIGlmKChzdHJlYW0zX2lkID49IDApICYmIGRhdGEtPnNldC5wb3N0ZmllbGRzKSB7CisgICAgICBzc2l6ZV90IHNlbnQgPSBxdWljaGVfaDNfc2VuZF9ib2R5KHFzLT5oM2MsIHFzLT5jb25uLCBzdHJlYW0zX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWRhdGEtPnNldC5wb3N0ZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0LCBUUlVFKTsKKyAgICAgIGlmKHNlbnQgPD0gMCkgeworICAgICAgICBmYWlsZihkYXRhLCAicXVpY2hlX2gzX3NlbmRfYm9keSBmYWlsZWQhIik7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICB9CisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gMDsgLyogbm90aGluZyBsZWZ0IHRvIHNlbmQgKi8KKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgc3RyZWFtM19pZCA9IHF1aWNoZV9oM19zZW5kX3JlcXVlc3QocXMtPmgzYywgcXMtPmNvbm4sIG52YSwgbmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKKyAgICBicmVhazsKKyAgfQorCisgIEN1cmxfc2FmZWZyZWUobnZhKTsKKworICBpZihzdHJlYW0zX2lkIDwgMCkgeworICAgIEgzQlVHRihpbmZvZihkYXRhLCAicXVpY2hlX2gzX3NlbmRfcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgc3RyZWFtM19pZCkpOworICAgIHJlc3VsdCA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgZ290byBmYWlsOworICB9CisKKyAgaW5mb2YoZGF0YSwgIlVzaW5nIEhUVFAvMyBTdHJlYW0gSUQ6ICV4IChlYXN5IGhhbmRsZSAlcClcbiIsCisgICAgICAgIHN0cmVhbTNfaWQsICh2b2lkICopZGF0YSk7CisgIHN0cmVhbS0+c3RyZWFtM19pZCA9IHN0cmVhbTNfaWQ7CisKKyAgcmV0dXJuIENVUkxFX09LOworCitmYWlsOgorICBmcmVlKG52YSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0cmFuc2Zlci5jOmRvbmVfc2VuZGluZyB3aGVuIHdlIHN0b3AgSFRUUC8zIHVwbG9hZGluZy4KKyAqLworQ1VSTGNvZGUgQ3VybF9xdWljX2RvbmVfc2VuZGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGlmKGNvbm4tPmhhbmRsZXIgPT0gJkN1cmxfaGFuZGxlcl9odHRwMykgeworICAgIC8qIG9ubHkgZm9yIEhUVFAvMyB0cmFuc2ZlcnMgKi8KKyAgICBzc2l6ZV90IHNlbnQ7CisgICAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGNvbm4tPmRhdGEtPnJlcS5wcm90b3A7CisgICAgc3RydWN0IHF1aWNzb2NrZXQgKnFzID0gY29ubi0+cXVpYzsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiEhISBDdXJsX3F1aWNfZG9uZV9zZW5kaW5nXG4iKTsKKyAgICBzdHJlYW0tPnVwbG9hZF9kb25lID0gVFJVRTsKKyAgICBzZW50ID0gcXVpY2hlX2gzX3NlbmRfYm9keShxcy0+aDNjLCBxcy0+Y29ubiwgc3RyZWFtLT5zdHJlYW0zX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIFRSVUUpOworICAgIGlmKHNlbnQgPCAwKQorICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBodHRwLmM6Q3VybF9odHRwX2RvbmUgd2hlbiBhIHJlcXVlc3QgY29tcGxldGVzLgorICovCit2b2lkIEN1cmxfcXVpY19kb25lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGJvb2wgcHJlbWF0dXJlKQoreworICAodm9pZClkYXRhOworICAodm9pZClwcmVtYXR1cmU7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0cmFuc2Zlci5jOmRhdGFfcGVuZGluZyB0byBrbm93IGlmIHdlIHNob3VsZCBrZWVwIGxvb3BpbmcKKyAqIHRvIHJlY2VpdmUgbW9yZSBkYXRhIGZyb20gdGhlIGNvbm5lY3Rpb24uCisgKi8KK2Jvb2wgQ3VybF9xdWljX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQoreworICAodm9pZClkYXRhOworICByZXR1cm4gRkFMU0U7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvcXVpY2hlLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy9xdWljaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGQxODM3Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvcXVpY2hlLmgKQEAgLTAsMCArMSw0OSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9WUVVJQ19RVUlDSEVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9WUVVJQ19RVUlDSEVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX1FVSUNIRQorCisjaW5jbHVkZSA8cXVpY2hlLmg+CisKK3N0cnVjdCBxdWljX2hhbmRzaGFrZSB7CisgIGNoYXIgKmJ1ZjsgICAgICAgLyogcG9pbnRlciB0byB0aGUgYnVmZmVyICovCisgIHNpemVfdCBhbGxvY2xlbjsgLyogc2l6ZSBvZiBhbGxvY2F0aW9uICovCisgIHNpemVfdCBsZW47ICAgICAgLyogc2l6ZSBvZiBjb250ZW50IGluIGJ1ZmZlciAqLworICBzaXplX3QgbnJlYWQ7ICAgIC8qIGhvdyBtYW55IGJ5dGVzIGhhdmUgYmVlbiByZWFkICovCit9OworCitzdHJ1Y3QgcXVpY3NvY2tldCB7CisgIHF1aWNoZV9jb25maWcgKmNmZzsKKyAgcXVpY2hlX2Nvbm4gKmNvbm47CisgIHF1aWNoZV9oM19jb25uICpoM2M7CisgIHF1aWNoZV9oM19jb25maWcgKmgzY29uZmlnOworICB1aW50OF90IHNjaWRbUVVJQ0hFX01BWF9DT05OX0lEX0xFTl07CisgIHVpbnQzMl90IHZlcnNpb247Cit9OworCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1ZRVUlDX1FVSUNIRV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy92cXVpYy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvdnF1aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWU4ZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvdnF1aWMuYwpAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBFTkFCTEVfUVVJQworCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJkeW5idWYuaCIKKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgInZxdWljLmgiCisKKyNpZmRlZiBPX0JJTkFSWQorI2RlZmluZSBRTE9HTU9ERSBPX1dST05MWXxPX0NSRUFUfE9fQklOQVJZCisjZWxzZQorI2RlZmluZSBRTE9HTU9ERSBPX1dST05MWXxPX0NSRUFUCisjZW5kaWYKKworLyoKKyAqIElmIHRoZSBRTE9HRElSIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgb3BlbiBhbmQgcmV0dXJuIGEgZmlsZQorICogZGVzY3JpcHRvciB0byB3cml0ZSB0aGUgbG9nIHRvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBlcnJvciBpZiBzb21ldGhpbmcgZmFpbGVkIG91dHNpZGUgb2YgZmFpbGluZyB0bworICogY3JlYXRlIHRoZSBmaWxlLiBPcGVuIGZpbGUgc3VjY2VzcyBpcyBkZWVtZWQgYnkgc2VlaW5nIGlmIHRoZSByZXR1cm5lZCBmZAorICogaXMgIT0gLTEuCisgKi8KK0NVUkxjb2RlIEN1cmxfcWxvZ2RpcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNjaWQsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNjaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpxbG9nZmRwKQoreworICBjb25zdCBjaGFyICpxbG9nX2RpciA9IGdldGVudigiUUxPR0RJUiIpOworICAqcWxvZ2ZkcCA9IC0xOworICBpZihxbG9nX2RpcikgeworICAgIHN0cnVjdCBkeW5idWYgZm5hbWU7CisgICAgQ1VSTGNvZGUgcmVzdWx0OworICAgIHVuc2lnbmVkIGludCBpOworICAgIEN1cmxfZHluX2luaXQoJmZuYW1lLCBEWU5fUUxPR19OQU1FKTsKKyAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJmZuYW1lLCBxbG9nX2Rpcik7CisgICAgaWYoIXJlc3VsdCkKKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmZm5hbWUsICIvIik7CisgICAgZm9yKGkgPSAwOyAoaSA8IHNjaWRsZW4pICYmICFyZXN1bHQ7IGkrKykgeworICAgICAgY2hhciBoZXhbM107CisgICAgICBtc25wcmludGYoaGV4LCAzLCAiJTAyeCIsIHNjaWRbaV0pOworICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZmbmFtZSwgaGV4KTsKKyAgICB9CisgICAgaWYoIXJlc3VsdCkKKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZCgmZm5hbWUsICIucWxvZyIpOworCisgICAgaWYoIXJlc3VsdCkgeworICAgICAgaW50IHFsb2dmZCA9IG9wZW4oQ3VybF9keW5fcHRyKCZmbmFtZSksIFFMT0dNT0RFLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zKTsKKyAgICAgIGlmKHFsb2dmZCAhPSAtMSkKKyAgICAgICAgKnFsb2dmZHAgPSBxbG9nZmQ7CisgICAgfQorICAgIEN1cmxfZHluX2ZyZWUoJmZuYW1lKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92cXVpYy92cXVpYy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvdnF1aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZmMGVkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnF1aWMvdnF1aWMuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1ZRVUlDX1FVSUNfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9WUVVJQ19RVUlDX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIEVOQUJMRV9RVUlDCitDVVJMY29kZSBDdXJsX3Fsb2dkaXIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzY2lkLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzY2lkbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqcWxvZ2ZkcCk7CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1ZRVUlDX1FVSUNfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC9saWJzc2guYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvbGlic3NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4OGUyMwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvbGlic3NoLmMKQEAgLTAsMCArMSwyODkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDIwIFJlZCBIYXQsIEluYy4KKyAqCisgKiBBdXRob3JzOiBOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcywgVG9tYXMgTXJheiwgU3RhbmlzbGF2IFppZGVrLAorICogICAgICAgICAgUm9iZXJ0IEtvbGN1biwgQW5kcmVhcyBTY2huZWlkZXIKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX0xJQlNTSAorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDxsaWJzc2gvbGlic3NoLmg+CisjaW5jbHVkZSA8bGlic3NoL3NmdHAuaD4KKworI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VVFNOQU1FX0gKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKKyN1bmRlZiBpbl9hZGRyX3QKKyNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaG9zdGlwLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgImVzY2FwZS5oIgorI2luY2x1ZGUgImh0dHAuaCIgICAgICAgICAgICAgICAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJzcGVlZGNoZWNrLmgiCisjaW5jbHVkZSAiZ2V0aW5mby5oIgorI2luY2x1ZGUgInN0cmR1cC5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKKyNpbmNsdWRlICJ2dGxzL3Z0bHMuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKyNpbmNsdWRlICJwYXJzZWRhdGUuaCIgICAgICAgICAgLyogZm9yIHRoZSB3ZWVrIGRheSBhbmQgbW9udGggbmFtZXMgKi8KKyNpbmNsdWRlICJzb2NrYWRkci5oIiAgICAgICAgICAgLyogcmVxdWlyZWQgZm9yIEN1cmxfc29ja2FkZHJfc3RvcmFnZSAqLworI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisvKiBmb3IgcGVybWlzc2lvbiBhbmQgb3BlbiBmbGFncyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLworI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorI2luY2x1ZGUgImN1cmxfcGF0aC5oIgorCisvKiBBIHJlY2VudCBtYWNybyBwcm92aWRlZCBieSBsaWJzc2guIE9yIG1ha2Ugb3VyIG93bi4gKi8KKyNpZm5kZWYgU1NIX1NUUklOR19GUkVFX0NIQVIKKyNkZWZpbmUgU1NIX1NUUklOR19GUkVFX0NIQVIoeCkgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZih4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKHgpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHggPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSgwKQorI2VuZGlmCisKKy8qIExvY2FsIGZ1bmN0aW9uczogKi8KK3N0YXRpYyBDVVJMY29kZSBteXNzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfZG9faXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKKworc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKKworc3RhdGljIENVUkxjb2RlIHNmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOworc3RhdGljIENVUkxjb2RlIHNmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7CitzdGF0aWMKK0NVUkxjb2RlIHNmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7CisKK3N0YXRpYyB2b2lkIHNmdHBfcXVvdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyB2b2lkIHNmdHBfcXVvdGVfc3RhdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIGludCBteXNzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29jayk7CitzdGF0aWMgaW50IG15c3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKTsKKworc3RhdGljIENVUkxjb2RlIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworLyoKKyAqIFNDUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcCA9IHsKKyAgIlNDUCIsICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgbXlzc2hfZG9faXQsICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgc2NwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIG15c3NoX2Nvbm5lY3QsICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgbXlzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgLyogY29ubmVjdGluZyAqLworICBzY3BfZG9pbmcsICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBteXNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIG15c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgbXlzc2hfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHNjcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KKyAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fU0NQLCAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgIC8qIGZsYWdzICovCit9OworCisvKgorICogU0ZUUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHAgPSB7CisgICJTRlRQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBteXNzaF9kb19pdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIHNmdHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgbXlzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIG15c3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBzZnRwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIG15c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBteXNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBteXNzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBzZnRwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uX2NoZWNrICovCisgIFBPUlRfU1NILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fU0ZUUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfRElSTE9DSyB8IFBST1RPUFRfQ0xPU0VBQ1RJT04KKyAgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKworc3RhdGljIENVUkxjb2RlIHNmdHBfZXJyb3JfdG9fQ1VSTEUoaW50IGVycikKK3sKKyAgc3dpdGNoKGVycikgeworICAgIGNhc2UgU1NIX0ZYX09LOgorICAgICAgcmV0dXJuIENVUkxFX09LOworCisgICAgY2FzZSBTU0hfRlhfTk9fU1VDSF9GSUxFOgorICAgIGNhc2UgU1NIX0ZYX05PX1NVQ0hfUEFUSDoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBjYXNlIFNTSF9GWF9QRVJNSVNTSU9OX0RFTklFRDoKKyAgICBjYXNlIFNTSF9GWF9XUklURV9QUk9URUNUOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworCisgICAgY2FzZSBTU0hfRlhfRklMRV9BTFJFQURZX0VYSVNUUzoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9FWElTVFM7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gQ1VSTEVfU1NIOworfQorCisjaWZuZGVmIERFQlVHQlVJTEQKKyNkZWZpbmUgc3RhdGUoeCx5KSBteXN0YXRlKHgseSkKKyNlbHNlCisjZGVmaW5lIHN0YXRlKHgseSkgbXlzdGF0ZSh4LHksIF9fTElORV9fKQorI2VuZGlmCisKKy8qCisgKiBTU0ggU3RhdGUgbWFjaGluZSByZWxhdGVkIGNvZGUKKyAqLworLyogVGhpcyBpcyB0aGUgT05MWSB3YXkgdG8gY2hhbmdlIFNTSCBzdGF0ZSEgKi8KK3N0YXRpYyB2b2lkIG15c3RhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzc2hzdGF0ZSBub3dzdGF0ZQorI2lmZGVmIERFQlVHQlVJTEQKKyAgICAgICAgICAgICAgICAgICAgLCBpbnQgbGluZW5vCisjZW5kaWYKKyAgKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisgIC8qIGZvciBkZWJ1ZyBwdXJwb3NlcyAqLworICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKyAgICAiU1NIX1NUT1AiLAorICAgICJTU0hfSU5JVCIsCisgICAgIlNTSF9TX1NUQVJUVVAiLAorICAgICJTU0hfSE9TVEtFWSIsCisgICAgIlNTSF9BVVRITElTVCIsCisgICAgIlNTSF9BVVRIX1BLRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX1BLRVkiLAorICAgICJTU0hfQVVUSF9QQVNTX0lOSVQiLAorICAgICJTU0hfQVVUSF9QQVNTIiwKKyAgICAiU1NIX0FVVEhfQUdFTlRfSU5JVCIsCisgICAgIlNTSF9BVVRIX0FHRU5UX0xJU1QiLAorICAgICJTU0hfQVVUSF9BR0VOVCIsCisgICAgIlNTSF9BVVRIX0hPU1RfSU5JVCIsCisgICAgIlNTSF9BVVRIX0hPU1QiLAorICAgICJTU0hfQVVUSF9LRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX0tFWSIsCisgICAgIlNTSF9BVVRIX0dTU0FQSSIsCisgICAgIlNTSF9BVVRIX0RPTkUiLAorICAgICJTU0hfU0ZUUF9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBTFBBVEgiLAorICAgICJTU0hfU0ZUUF9RVU9URV9JTklUIiwKKyAgICAiU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9RVU9URSIsCisgICAgIlNTSF9TRlRQX05FWFRfUVVPVEUiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NZTUxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9NS0RJUiIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JFTkFNRSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JNRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfVU5MSU5LIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyIsCisgICAgIlNTSF9TRlRQX0dFVElORk8iLAorICAgICJTU0hfU0ZUUF9GSUxFVElNRSIsCisgICAgIlNTSF9TRlRQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0ZUUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQiLAorICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSUyIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUiIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfTElOSyIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfQk9UVE9NIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9ET05FIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0RPV05MT0FEX1NUQVQiLAorICAgICJTU0hfU0ZUUF9DTE9TRSIsCisgICAgIlNTSF9TRlRQX1NIVVRET1dOIiwKKyAgICAiU1NIX1NDUF9UUkFOU19JTklUIiwKKyAgICAiU1NIX1NDUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQUQiLAorICAgICJTU0hfU0NQX0RPTkUiLAorICAgICJTU0hfU0NQX1NFTkRfRU9GIiwKKyAgICAiU1NIX1NDUF9XQUlUX0VPRiIsCisgICAgIlNTSF9TQ1BfV0FJVF9DTE9TRSIsCisgICAgIlNTSF9TQ1BfQ0hBTk5FTF9GUkVFIiwKKyAgICAiU1NIX1NFU1NJT05fRElTQ09OTkVDVCIsCisgICAgIlNTSF9TRVNTSU9OX0ZSRUUiLAorICAgICJRVUlUIgorICB9OworCisKKyAgaWYoc3NoYy0+c3RhdGUgIT0gbm93c3RhdGUpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCAiU1NIICVwIHN0YXRlIGNoYW5nZSBmcm9tICVzIHRvICVzIChsaW5lICVkKVxuIiwKKyAgICAgICAgICAodm9pZCAqKSBzc2hjLCBuYW1lc1tzc2hjLT5zdGF0ZV0sIG5hbWVzW25vd3N0YXRlXSwKKyAgICAgICAgICBsaW5lbm8pOworICB9CisjZW5kaWYKKworICBzc2hjLT5zdGF0ZSA9IG5vd3N0YXRlOworfQorCisvKiBNdWx0aXBsZSBvcHRpb25zOgorICogMS4gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdIGlzIHNldCB3aXRoIGFuIE1ENQorICogICAgaGFzaCAoOTBzIHN0eWxlIGF1dGgsIG5vdCBzdXJlIHdlIHNob3VsZCBoYXZlIGl0IGhlcmUpCisgKiAyLiBkYXRhLT5zZXQuc3NoX2tleWZ1bmMgY2FsbGJhY2sgaXMgc2V0LiBUaGVuIHdlIGRvIHRydXN0IG9uIGZpcnN0CisgKiAgICB1c2UuIFdlIGV2ZW4gc2F2ZSBvbiBrbm93bmhvc3RzIGlmIENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRQorICogICAgaXMgcmV0dXJuZWQgYnkgaXQuCisgKiAzLiBub25lIG9mIHRoZSBhYm92ZS4gV2Ugb25seSBhY2NlcHQgaWYgaXQgaXMgcHJlc2VudCBvbiBrbm93biBob3N0cy4KKyAqCisgKiBSZXR1cm5zIFNTSF9PSyBvciBTU0hfRVJST1IuCisgKi8KK3N0YXRpYyBpbnQgbXlzc2hfaXNfa25vd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBpbnQgcmM7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgc3NoX2tleSBwdWJrZXk7CisgIHNpemVfdCBobGVuOworICB1bnNpZ25lZCBjaGFyICpoYXNoID0gTlVMTDsKKyAgY2hhciAqZm91bmRfYmFzZTY0ID0gTlVMTDsKKyAgY2hhciAqa25vd25fYmFzZTY0ID0gTlVMTDsKKyAgaW50IHZzdGF0ZTsKKyAgZW51bSBjdXJsX2tobWF0Y2gga2V5bWF0Y2g7CisgIHN0cnVjdCBjdXJsX2toa2V5IGZvdW5ka2V5OworICBzdHJ1Y3QgY3VybF9raGtleSAqa25vd25rZXlwID0gTlVMTDsKKyAgY3VybF9zc2hrZXljYWxsYmFjayBmdW5jID0KKyAgICBkYXRhLT5zZXQuc3NoX2tleWZ1bmM7CisKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOSwwKQorICBzdHJ1Y3Qgc3NoX2tub3duaG9zdHNfZW50cnkgKmtub3duaG9zdHNlbnRyeSA9IE5VTEw7CisgIHN0cnVjdCBjdXJsX2toa2V5IGtub3dua2V5OworI2VuZGlmCisKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOCwwKQorICByYyA9IHNzaF9nZXRfc2VydmVyX3B1YmxpY2tleShzc2hjLT5zc2hfc2Vzc2lvbiwgJnB1YmtleSk7CisjZWxzZQorICByYyA9IHNzaF9nZXRfcHVibGlja2V5KHNzaGMtPnNzaF9zZXNzaW9uLCAmcHVia2V5KTsKKyNlbmRpZgorICBpZihyYyAhPSBTU0hfT0spCisgICAgcmV0dXJuIHJjOworCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XSkgeworICAgIGludCBpOworICAgIGNoYXIgbWQ1YnVmZmVyWzMzXTsKKyAgICBjb25zdCBjaGFyICpwdWJrZXlfbWQ1ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdOworCisgICAgcmMgPSBzc2hfZ2V0X3B1YmxpY2tleV9oYXNoKHB1YmtleSwgU1NIX1BVQkxJQ0tFWV9IQVNIX01ENSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhc2gsICZobGVuKTsKKyAgICBpZihyYyAhPSBTU0hfT0sgfHwgaGxlbiAhPSAxNikgeworICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICJEZW5pZWQgZXN0YWJsaXNoaW5nIHNzaCBzZXNzaW9uOiBtZDUgZmluZ2VycHJpbnQgbm90IGF2YWlsYWJsZSIpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGZvcihpID0gMDsgaSA8IDE2OyBpKyspCisgICAgICBtc25wcmludGYoJm1kNWJ1ZmZlcltpKjJdLCAzLCAiJTAyeCIsICh1bnNpZ25lZCBjaGFyKWhhc2hbaV0pOworCisgICAgaW5mb2YoZGF0YSwgIlNTSCBNRDUgZmluZ2VycHJpbnQ6ICVzXG4iLCBtZDVidWZmZXIpOworCisgICAgaWYoIXN0cmNhc2Vjb21wYXJlKG1kNWJ1ZmZlciwgcHVia2V5X21kNSkpIHsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiRGVuaWVkIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogbWlzbWF0Y2ggbWQ1IGZpbmdlcnByaW50LiAiCisgICAgICAgICAgICAiUmVtb3RlICVzIGlzIG5vdCBlcXVhbCB0byAlcyIsIG1kNWJ1ZmZlciwgcHVia2V5X21kNSk7CisgICAgICByYyA9IFNTSF9FUlJPUjsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICByYyA9IFNTSF9PSzsKKyAgICBnb3RvIGNsZWFudXA7CisgIH0KKworICBpZihkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5aG9zdCAhPSBUUlVFKSB7CisgICAgcmMgPSBTU0hfT0s7CisgICAgZ290byBjbGVhbnVwOworICB9CisKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOSwwKQorICAvKiBHZXQgdGhlIGtub3duX2tleSBmcm9tIHRoZSBrbm93biBob3N0cyBmaWxlICovCisgIHZzdGF0ZSA9IHNzaF9zZXNzaW9uX2dldF9rbm93bl9ob3N0c19lbnRyeShzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrbm93bmhvc3RzZW50cnkpOworCisgIC8qIENhc2UgYW4gZW50cnkgd2FzIGZvdW5kIGluIGEga25vd24gaG9zdHMgZmlsZSAqLworICBpZihrbm93bmhvc3RzZW50cnkpIHsKKyAgICBpZihrbm93bmhvc3RzZW50cnktPnB1YmxpY2tleSkgeworICAgICAgcmMgPSBzc2hfcGtpX2V4cG9ydF9wdWJrZXlfYmFzZTY0KGtub3duaG9zdHNlbnRyeS0+cHVibGlja2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrbm93bl9iYXNlNjQpOworICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgIH0KKyAgICAgIGtub3dua2V5LmtleSA9IGtub3duX2Jhc2U2NDsKKyAgICAgIGtub3dua2V5LmxlbiA9IHN0cmxlbihrbm93bl9iYXNlNjQpOworCisgICAgICBzd2l0Y2goc3NoX2tleV90eXBlKGtub3duaG9zdHNlbnRyeS0+cHVibGlja2V5KSkgeworICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX1JTQToKKyAgICAgICAgICBrbm93bmtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9SU0E7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NIX0tFWVRZUEVfUlNBMToKKyAgICAgICAgICBrbm93bmtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9SU0ExOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX0VDRFNBOgorICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX0VDRFNBX1AyNTY6CisgICAgICAgIGNhc2UgU1NIX0tFWVRZUEVfRUNEU0FfUDM4NDoKKyAgICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQV9QNTIxOgorICAgICAgICAgIGtub3dua2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX0VDRFNBOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTSF9LRVlUWVBFX0VEMjU1MTk6CisgICAgICAgICAga25vd25rZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRUQyNTUxOTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU0hfS0VZVFlQRV9EU1M6CisgICAgICAgICAga25vd25rZXkua2V5dHlwZSA9IENVUkxLSFRZUEVfRFNTOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJjID0gU1NIX0VSUk9SOworICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgIH0KKyAgICAgIGtub3dua2V5cCA9ICZrbm93bmtleTsKKyAgICB9CisgIH0KKworICBzd2l0Y2godnN0YXRlKSB7CisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfT0s6CisgICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX09LOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfT1RIRVI6CisgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgIGNhc2UgU1NIX0tOT1dOX0hPU1RTX05PVF9GT1VORDoKKyAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfVU5LTk9XTjoKKyAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgY2FzZSBTU0hfS05PV05fSE9TVFNfRVJST1I6CisgICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX01JU1NJTkc7CisgICAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfTUlTTUFUQ0g7CisgICAgICBicmVhazsKKyAgfQorCisjZWxzZQorICB2c3RhdGUgPSBzc2hfaXNfc2VydmVyX2tub3duKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgc3dpdGNoKHZzdGF0ZSkgeworICAgIGNhc2UgU1NIX1NFUlZFUl9LTk9XTl9PSzoKKyAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfT0s7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNTSF9TRVJWRVJfRklMRV9OT1RfRk9VTkQ6CisgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgIGNhc2UgU1NIX1NFUlZFUl9OT1RfS05PV046CisgICAgICBrZXltYXRjaCA9IENVUkxLSE1BVENIX01JU1NJTkc7CisgICAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAgIGtleW1hdGNoID0gQ1VSTEtITUFUQ0hfTUlTTUFUQ0g7CisgICAgICBicmVhazsKKyAgfQorI2VuZGlmCisKKyAgaWYoZnVuYykgeyAvKiB1c2UgY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGFjdGlvbiAqLworICAgIHJjID0gc3NoX3BraV9leHBvcnRfcHVia2V5X2Jhc2U2NChwdWJrZXksICZmb3VuZF9iYXNlNjQpOworICAgIGlmKHJjICE9IFNTSF9PSykKKyAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIGZvdW5ka2V5LmtleSA9IGZvdW5kX2Jhc2U2NDsKKyAgICBmb3VuZGtleS5sZW4gPSBzdHJsZW4oZm91bmRfYmFzZTY0KTsKKworICAgIHN3aXRjaChzc2hfa2V5X3R5cGUocHVia2V5KSkgeworICAgICAgY2FzZSBTU0hfS0VZVFlQRV9SU0E6CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX1JTQTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNTSF9LRVlUWVBFX1JTQTE6CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX1JTQTE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQToKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsOSwwKQorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQV9QMjU2OgorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQV9QMzg0OgorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FQ0RTQV9QNTIxOgorI2VuZGlmCisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX0VDRFNBOworICAgICAgICBicmVhazsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsNywwKQorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9FRDI1NTE5OgorICAgICAgICBmb3VuZGtleS5rZXl0eXBlID0gQ1VSTEtIVFlQRV9FRDI1NTE5OworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSBTU0hfS0VZVFlQRV9EU1M6CisgICAgICAgIGZvdW5ka2V5LmtleXR5cGUgPSBDVVJMS0hUWVBFX0RTUzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByYyA9IFNTSF9FUlJPUjsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOworICAgIHJjID0gZnVuYyhkYXRhLCBrbm93bmtleXAsIC8qIGZyb20gdGhlIGtub3duaG9zdHMgZmlsZSAqLworICAgICAgICAgICAgICAmZm91bmRrZXksIC8qIGZyb20gdGhlIHJlbW90ZSBob3N0ICovCisgICAgICAgICAgICAgIGtleW1hdGNoLCBkYXRhLT5zZXQuc3NoX2tleWZ1bmNfdXNlcnApOworICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKKworICAgIHN3aXRjaChyYykgeworICAgICAgY2FzZSBDVVJMS0hTVEFUX0ZJTkVfQUREX1RPX0ZJTEU6CisjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLDgsMCkKKyAgICAgICAgcmMgPSBzc2hfc2Vzc2lvbl91cGRhdGVfa25vd25faG9zdHMoc3NoYy0+c3NoX3Nlc3Npb24pOworI2Vsc2UKKyAgICAgICAgcmMgPSBzc2hfd3JpdGVfa25vd25ob3N0KHNzaGMtPnNzaF9zZXNzaW9uKTsKKyNlbmRpZgorICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxLSFNUQVRfRklORToKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAvKiBSRUpFQ1QvREVGRVIgKi8KKyAgICAgICAgcmMgPSBTU0hfRVJST1I7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYoa2V5bWF0Y2ggIT0gQ1VSTEtITUFUQ0hfT0spIHsKKyAgICAgIHJjID0gU1NIX0VSUk9SOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKyAgfQorICByYyA9IFNTSF9PSzsKKworY2xlYW51cDoKKyAgaWYoZm91bmRfYmFzZTY0KSB7CisgICAgZnJlZShmb3VuZF9iYXNlNjQpOworICB9CisgIGlmKGtub3duX2Jhc2U2NCkgeworICAgIGZyZWUoa25vd25fYmFzZTY0KTsKKyAgfQorICBpZihoYXNoKQorICAgIHNzaF9jbGVhbl9wdWJrZXlfaGFzaCgmaGFzaCk7CisgIHNzaF9rZXlfZnJlZShwdWJrZXkpOworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCw5LDApCisgIGlmKGtub3duaG9zdHNlbnRyeSkgeworICAgIHNzaF9rbm93bmhvc3RzX2VudHJ5X2ZyZWUoa25vd25ob3N0c2VudHJ5KTsKKyAgfQorI2VuZGlmCisgIHJldHVybiByYzsKK30KKworI2RlZmluZSBNT1ZFX1RPX0VSUk9SX1NUQVRFKF9yKSB7IFwKKyAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7IFwKKyAgc3NoYy0+YWN0dWFsY29kZSA9IF9yOyBcCisgIHJjID0gU1NIX0VSUk9SOyBcCisgIGJyZWFrOyBcCit9CisKKyNkZWZpbmUgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCkgeyBcCisgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsgXAorICBzc2hjLT5hY3R1YWxjb2RlID0gc2Z0cF9lcnJvcl90b19DVVJMRShzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsgXAorICByYyA9IFNTSF9FUlJPUjsgXAorICBicmVhazsgXAorfQorCisjZGVmaW5lIE1PVkVfVE9fTEFTVF9BVVRIIFwKKyAgaWYoc3NoYy0+YXV0aF9tZXRob2RzICYgU1NIX0FVVEhfTUVUSE9EX1BBU1NXT1JEKSB7IFwKKyAgICByYyA9IFNTSF9PSzsgXAorICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1NfSU5JVCk7IFwKKyAgICBicmVhazsgXAorICB9IFwKKyAgZWxzZSB7IFwKKyAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7IFwKKyAgfQorCisjZGVmaW5lIE1PVkVfVE9fVEVSVElBUllfQVVUSCBcCisgIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9JTlRFUkFDVElWRSkgeyBcCisgICAgcmMgPSBTU0hfT0s7IFwKKyAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7IFwKKyAgICBicmVhazsgXAorICB9IFwKKyAgZWxzZSB7IFwKKyAgICBNT1ZFX1RPX0xBU1RfQVVUSDsgXAorICB9CisKKyNkZWZpbmUgTU9WRV9UT19TRUNPTkRBUllfQVVUSCBcCisgIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9HU1NBUElfTUlDKSB7IFwKKyAgICByYyA9IFNTSF9PSzsgXAorICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0dTU0FQSSk7IFwKKyAgICBicmVhazsgXAorICB9IFwKKyAgZWxzZSB7IFwKKyAgICBNT1ZFX1RPX1RFUlRJQVJZX0FVVEg7IFwKKyAgfQorCitzdGF0aWMKK2ludCBteXNzaF9hdXRoX2ludGVyYWN0aXZlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaW50IHJjOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgaW50IG5wcm9tcHRzOworCityZXN0YXJ0OgorICBzd2l0Y2goc3NoYy0+a2JkX3N0YXRlKSB7CisgICAgY2FzZSAwOgorICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKQorICAgICAgICByZXR1cm4gU1NIX0FHQUlOOworCisgICAgICBpZihyYyAhPSBTU0hfQVVUSF9JTkZPKQorICAgICAgICByZXR1cm4gU1NIX0VSUk9SOworCisgICAgICBucHJvbXB0cyA9IHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0bnByb21wdHMoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYobnByb21wdHMgIT0gMSkKKyAgICAgICAgcmV0dXJuIFNTSF9FUlJPUjsKKworICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50X3NldGFuc3dlcihzc2hjLT5zc2hfc2Vzc2lvbiwgMCwgY29ubi0+cGFzc3dkKTsKKyAgICAgIGlmKHJjIDwgMCkKKyAgICAgICAgcmV0dXJuIFNTSF9FUlJPUjsKKworICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSAxOgorICAgICAgc3NoYy0+a2JkX3N0YXRlID0gMTsKKworICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfa2JkaW50KHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKQorICAgICAgICByZXR1cm4gU1NIX0FHQUlOOworICAgICAgZWxzZSBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKQorICAgICAgICByYyA9IFNTSF9PSzsKKyAgICAgIGVsc2UgaWYocmMgPT0gU1NIX0FVVEhfSU5GTykgeworICAgICAgICBucHJvbXB0cyA9IHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0bnByb21wdHMoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgICBpZihucHJvbXB0cyAhPSAwKQorICAgICAgICAgIHJldHVybiBTU0hfRVJST1I7CisKKyAgICAgICAgc3NoYy0+a2JkX3N0YXRlID0gMjsKKyAgICAgICAgZ290byByZXN0YXJ0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByYyA9IFNTSF9FUlJPUjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgIHNzaGMtPmtiZF9zdGF0ZSA9IDI7CisKKyAgICAgIHJjID0gc3NoX3VzZXJhdXRoX2tiZGludChzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwgTlVMTCk7CisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikKKyAgICAgICAgcmV0dXJuIFNTSF9BR0FJTjsKKyAgICAgIGVsc2UgaWYocmMgPT0gU1NIX0FVVEhfU1VDQ0VTUykKKyAgICAgICAgcmMgPSBTU0hfT0s7CisgICAgICBlbHNlCisgICAgICAgIHJjID0gU1NIX0VSUk9SOworCisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIFNTSF9FUlJPUjsKKyAgfQorCisgIHNzaGMtPmtiZF9zdGF0ZSA9IDA7CisgIHJldHVybiByYzsKK30KKworLyoKKyAqIHNzaF9zdGF0ZW1hY2hfYWN0KCkgcnVucyB0aGUgU1NIIHN0YXRlIG1hY2hpbmUgYXMgZmFyIGFzIGl0IGNhbiB3aXRob3V0CisgKiBibG9ja2luZyBhbmQgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kLiAgVGhlIGRhdGEgdGhlIHBvaW50ZXIgJ2Jsb2NrJyBwb2ludHMKKyAqIHRvIHdpbGwgYmUgc2V0IHRvIFRSVUUgaWYgdGhlIGxpYnNzaCBmdW5jdGlvbiByZXR1cm5zIFNTSF9BR0FJTgorICogbWVhbmluZyBpdCB3YW50cyB0byBiZSBjYWxsZWQgYWdhaW4gd2hlbiB0aGUgc29ja2V0IGlzIHJlYWR5CisgKi8KK3N0YXRpYyBDVVJMY29kZSBteXNzaF9zdGF0ZW1hY2hfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqYmxvY2spCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFNTSFBST1RPICpwcm90b3AgPSBkYXRhLT5yZXEucHJvdG9wOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIGludCByYyA9IFNTSF9OT19FUlJPUiwgZXJyOworICBjaGFyICpuZXdfcmVhZGRpcl9saW5lOworICBpbnQgc2Vla2VyciA9IENVUkxfU0VFS0ZVTkNfT0s7CisgIGNvbnN0IGNoYXIgKmVycl9tc2c7CisgICpibG9jayA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIHdlJ3JlIG5vdCBibG9ja2luZyBieSBkZWZhdWx0ICovCisKKyAgZG8geworCisgICAgc3dpdGNoKHNzaGMtPnN0YXRlKSB7CisgICAgY2FzZSBTU0hfSU5JVDoKKyAgICAgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAwOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOworCisjaWYgMAorICAgICAgc3NoX3NldF9sb2dfbGV2ZWwoU1NIX0xPR19QUk9UT0NPTCk7CisjZW5kaWYKKworICAgICAgLyogU2V0IGxpYnNzaCB0byBub24tYmxvY2tpbmcsIHNpbmNlIGV2ZXJ5dGhpbmcgaW50ZXJuYWxseSBpcworICAgICAgICAgbm9uLWJsb2NraW5nICovCisgICAgICBzc2hfc2V0X2Jsb2NraW5nKHNzaGMtPnNzaF9zZXNzaW9uLCAwKTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NfU1RBUlRVUCk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSBTU0hfU19TVEFSVFVQOgorICAgICAgcmMgPSBzc2hfY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyA9PSBTU0hfQUdBSU4pCisgICAgICAgIGJyZWFrOworCisgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgZXN0YWJsaXNoaW5nIHNzaCBzZXNzaW9uIik7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfRkFJTEVEX0lOSVQpOworICAgICAgfQorCisgICAgICBzdGF0ZShjb25uLCBTU0hfSE9TVEtFWSk7CisKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfSE9TVEtFWToKKworICAgICAgcmMgPSBteXNzaF9pc19rbm93bihjb25uKTsKKyAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTik7CisgICAgICB9CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRITElTVCk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgU1NIX0FVVEhMSVNUOnsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gRkFMU0U7CisKKyAgICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfbm9uZShzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCk7CisgICAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7CisgICAgICAgICAgcmMgPSBTU0hfQUdBSU47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7CisgICAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiQXV0aGVudGljYXRlZCB3aXRoIG5vbmVcbiIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocmMgPT0gU1NIX0FVVEhfRVJST1IpIHsKKyAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7CisgICAgICAgIH0KKworICAgICAgICBzc2hjLT5hdXRoX21ldGhvZHMgPSBzc2hfdXNlcmF1dGhfbGlzdChzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCk7CisgICAgICAgIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9QVUJMSUNLRVkpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZX0lOSVQpOworICAgICAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGlvbiB1c2luZyBTU0ggcHVibGljIGtleSBmaWxlXG4iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9HU1NBUElfTUlDKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfR1NTQVBJKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9JTlRFUkFDVElWRSkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHNzaGMtPmF1dGhfbWV0aG9kcyAmIFNTSF9BVVRIX01FVEhPRF9QQVNTV09SRCkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1NfSU5JVCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgLyogdW5zdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kICovCisgICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgY2FzZSBTU0hfQVVUSF9QS0VZX0lOSVQ6CisgICAgICBpZighKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9QVUJMSUNLRVkpKSB7CisgICAgICAgIE1PVkVfVE9fU0VDT05EQVJZX0FVVEg7CisgICAgICB9CisKKyAgICAgIC8qIFR3byBjaG9pY2VzLCAoMSkgcHJpdmF0ZSBrZXkgd2FzIGdpdmVuIG9uIENNRCwKKyAgICAgICAqICgyKSB1c2UgdGhlICJkZWZhdWx0IiBrZXlzLiAqLworICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BSSVZBVEVfS0VZXSkgeworICAgICAgICBpZihzc2hjLT5wdWJrZXkgJiYgIWRhdGEtPnNldC5zc2wua2V5X3Bhc3N3ZCkgeworICAgICAgICAgIHJjID0gc3NoX3VzZXJhdXRoX3RyeV9wdWJsaWNrZXkoc3NoYy0+c3NoX3Nlc3Npb24sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5wdWJrZXkpOworICAgICAgICAgIGlmKHJjID09IFNTSF9BVVRIX0FHQUlOKSB7CisgICAgICAgICAgICByYyA9IFNTSF9BR0FJTjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICAgICAgTU9WRV9UT19TRUNPTkRBUllfQVVUSDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByYyA9IHNzaF9wa2lfaW1wb3J0X3ByaXZrZXlfZmlsZShkYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LnN0cltTVFJJTkdfU1NIX1BSSVZBVEVfS0VZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5rZXlfcGFzc3dkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmc3NoYy0+cHJpdmtleSk7CisgICAgICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgbG9hZCBwcml2YXRlIGtleSBmaWxlICVzIiwKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKTsKKyAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICByYyA9IHNzaF91c2VyYXV0aF9wdWJsaWNrZXlfYXV0byhzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5rZXlfcGFzc3dkKTsKKyAgICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKKyAgICAgICAgICByYyA9IFNTSF9BR0FJTjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7CisgICAgICAgICAgcmMgPSBTU0hfT0s7CisgICAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiQ29tcGxldGVkIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTU9WRV9UT19TRUNPTkRBUllfQVVUSDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1NIX0FVVEhfUEtFWToKKyAgICAgIHJjID0gc3NoX3VzZXJhdXRoX3B1YmxpY2tleShzc2hjLT5zc2hfc2Vzc2lvbiwgTlVMTCwgc3NoYy0+cHJpdmtleSk7CisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9BR0FJTikgeworICAgICAgICByYyA9IFNTSF9BR0FJTjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKHJjID09IFNTSF9BVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkNvbXBsZXRlZCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgcHVibGljIGtleSBhdXRoZW50aWNhdGlvbiAocmM6ICVkKVxuIiwgcmMpOworICAgICAgICBNT1ZFX1RPX1NFQ09OREFSWV9BVVRIOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0dTU0FQSToKKyAgICAgIGlmKCEoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX0dTU0FQSSkpIHsKKyAgICAgICAgTU9WRV9UT19URVJUSUFSWV9BVVRIOworICAgICAgfQorCisgICAgICByYyA9IHNzaF91c2VyYXV0aF9nc3NhcGkoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKKyAgICAgICAgcmMgPSBTU0hfQUdBSU47CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7CisgICAgICAgIHJjID0gU1NIX09LOworICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICBpbmZvZihkYXRhLCAiQ29tcGxldGVkIGdzc2FwaSBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgTU9WRV9UT19URVJUSUFSWV9BVVRIOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0tFWV9JTklUOgorICAgICAgaWYoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX0tFWUJPQVJEKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgTU9WRV9UT19MQVNUX0FVVEg7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfS0VZOgorCisgICAgICAvKiBBdXRoZW50aWNhdGlvbiBmYWlsZWQuIENvbnRpbnVlIHdpdGgga2V5Ym9hcmQtaW50ZXJhY3RpdmUgbm93LiAqLworICAgICAgcmMgPSBteXNzaF9hdXRoX2ludGVyYWN0aXZlKGNvbm4pOworICAgICAgaWYocmMgPT0gU1NIX0FHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgPT0gU1NIX09LKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJjb21wbGV0ZWQga2V5Ym9hcmQgaW50ZXJhY3RpdmUgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfUEFTU19JTklUOgorICAgICAgaWYoIShkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfUEFTU1dPUkQpKSB7CisgICAgICAgIC8qIEhvc3Qga2V5IGF1dGhlbnRpY2F0aW9uIGlzIGludGVudGlvbmFsbHkgbm90IGltcGxlbWVudGVkICovCisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfTE9HSU5fREVOSUVEKTsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1MpOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKworICAgIGNhc2UgU1NIX0FVVEhfUEFTUzoKKyAgICAgIHJjID0gc3NoX3VzZXJhdXRoX3Bhc3N3b3JkKHNzaGMtPnNzaF9zZXNzaW9uLCBOVUxMLCBjb25uLT5wYXNzd2QpOworICAgICAgaWYocmMgPT0gU1NIX0FVVEhfQUdBSU4pIHsKKyAgICAgICAgcmMgPSBTU0hfQUdBSU47CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZihyYyA9PSBTU0hfQVVUSF9TVUNDRVNTKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJDb21wbGV0ZWQgcGFzc3dvcmQgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0xPR0lOX0RFTklFRCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfRE9ORToKKyAgICAgIGlmKCFzc2hjLT5hdXRoZWQpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGZhaWx1cmUiKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9MT0dJTl9ERU5JRUQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBhdXRoZW50aWNhdGVkIHNzaCBzZXNzaW9uLgorICAgICAgICovCisgICAgICBpbmZvZihkYXRhLCAiQXV0aGVudGljYXRpb24gY29tcGxldGVcbiIpOworCisgICAgICBDdXJsX3BncnNUaW1lKGNvbm4tPmRhdGEsIFRJTUVSX0FQUENPTk5FQ1QpOyAgICAgIC8qIFNTSCBpcyBjb25uZWN0ZWQgKi8KKworICAgICAgY29ubi0+c29ja2ZkID0gc29jazsKKyAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gQ1VSTF9TT0NLRVRfQkFEOworCisgICAgICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCA9PSBDVVJMUFJPVE9fU0ZUUCkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9JTklUKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIik7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfSU5JVDoKKyAgICAgIHNzaF9zZXRfYmxvY2tpbmcoc3NoYy0+c3NoX3Nlc3Npb24sIDEpOworCisgICAgICBzc2hjLT5zZnRwX3Nlc3Npb24gPSBzZnRwX25ldyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZighc3NoYy0+c2Z0cF9zZXNzaW9uKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpemluZyBzZnRwIHNlc3Npb246ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX0NPVUxETlRfQ09OTkVDVCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByYyA9IHNmdHBfaW5pdChzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgIHJjID0gc2Z0cF9nZXRfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoc2Z0cF9lcnJvcl90b19DVVJMRShyYykpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQUxQQVRIKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFMUEFUSDoKKyAgICAgIC8qCisgICAgICAgKiBHZXQgdGhlICJob21lIiBkaXJlY3RvcnkKKyAgICAgICAqLworICAgICAgc3NoYy0+aG9tZWRpciA9IHNmdHBfY2Fub25pY2FsaXplX3BhdGgoc3NoYy0+c2Z0cF9zZXNzaW9uLCAiLiIpOworICAgICAgaWYoc3NoYy0+aG9tZWRpciA9PSBOVUxMKSB7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQ09VTEROVF9DT05ORUNUKTsKKyAgICAgIH0KKyAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBzc2hjLT5ob21lZGlyOworCisgICAgICAvKiBUaGlzIGlzIHRoZSBsYXN0IHN0ZXAgaW4gdGhlIFNGVFAgY29ubmVjdCBwaGFzZS4gRG8gbm90ZSB0aGF0IHdoaWxlCisgICAgICAgICB3ZSBnZXQgdGhlIGhvbWVkaXIgaGVyZSwgd2UgZ2V0IHRoZSAid29ya2luZ3BhdGgiIGluIHRoZSBETyBhY3Rpb24KKyAgICAgICAgIHNpbmNlIHRoZSBob21lZGlyIHdpbGwgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gcmVxdWVzdCBidXQgdGhlCisgICAgICAgICB3b3JraW5nIHBhdGggd2lsbCBub3QuICovCisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNTSCBDT05ORUNUIHBoYXNlIGRvbmVcbiIpKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9JTklUOgorCisgICAgICByZXN1bHQgPSBDdXJsX2dldHdvcmtpbmdwYXRoKGNvbm4sIHNzaGMtPmhvbWVkaXIsICZwcm90b3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgeworICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7CisgICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVDoKKyAgICAgIGlmKGRhdGEtPnNldC5wb3N0cXVvdGUpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOworICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnBvc3RxdW90ZTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URToKKyAgICAgIC8qIFNlbmQgYW55IHF1b3RlIGNvbW1hbmRzICovCisgICAgICBzZnRwX3F1b3RlKGNvbm4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX05FWFRfUVVPVEU6CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworCisgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gc3NoYy0+cXVvdGVfaXRlbS0+bmV4dDsKKworICAgICAgaWYoc3NoYy0+cXVvdGVfaXRlbSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9OT19TVEFURSkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0dFVElORk8pOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVDoKKyAgICAgIHNmdHBfcXVvdGVfc3RhdChjb25uKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUOgorICAgICAgcmMgPSBzZnRwX3NldHN0YXQoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzKTsKKyAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBzZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICAvKiBzc2hjLT5hY3R1YWxjb2RlID0gc2Z0cF9lcnJvcl90b19DVVJMRShlcnIpOworICAgICAgICAgKiB3ZSBkbyBub3Qgc2VuZCB0aGUgYWN0dWFsIGVycm9yOyB3ZSByZXR1cm4KKyAgICAgICAgICogdGhlIGVycm9yIHRoZSBsaWJzc2gyIGJhY2tlbmQgaXMgcmV0dXJuaW5nICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1lNTElOSzoKKyAgICAgIHJjID0gc2Z0cF9zeW1saW5rKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDIsCisgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInN5bWxpbmsgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX01LRElSOgorICAgICAgcmMgPSBzZnRwX21rZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCisgICAgICAgICAgICAgICAgICAgICAgKG1vZGVfdClkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBmYWlsZihkYXRhLCAibWtkaXIgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1JFTkFNRToKKyAgICAgIHJjID0gc2Z0cF9yZW5hbWUoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgIGZhaWxmKGRhdGEsICJyZW5hbWUgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1JNRElSOgorICAgICAgcmMgPSBzZnRwX3JtZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInJtZGlyIGNvbW1hbmQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9VTkxJTks6CisgICAgICByYyA9IHNmdHBfdW5saW5rKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInJtIGNvbW1hbmQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTOgorICAgIHsKKyAgICAgIHNmdHBfc3RhdHZmc190IHN0YXR2ZnM7CisKKyAgICAgIHN0YXR2ZnMgPSBzZnRwX3N0YXR2ZnMoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBpZighc3RhdHZmcyAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInN0YXR2ZnMgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoc3RhdHZmcykgeworICAgICAgICBjaGFyICp0bXAgPSBhcHJpbnRmKCJzdGF0dmZzOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2JzaXplOiAlbGx1XG4iICJmX2Zyc2l6ZTogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2Jsb2NrczogJWxsdVxuIiAiZl9iZnJlZTogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2JhdmFpbDogJWxsdVxuIiAiZl9maWxlczogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2ZmcmVlOiAlbGx1XG4iICJmX2ZhdmFpbDogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX2ZzaWQ6ICVsbHVcbiIgImZfZmxhZzogJWxsdVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX25hbWVtYXg6ICVsbHVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9ic2l6ZSwgc3RhdHZmcy0+Zl9mcnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9ibG9ja3MsIHN0YXR2ZnMtPmZfYmZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9iYXZhaWwsIHN0YXR2ZnMtPmZfZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9mZnJlZSwgc3RhdHZmcy0+Zl9mYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9mc2lkLCBzdGF0dmZzLT5mX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy0+Zl9uYW1lbWF4KTsKKyAgICAgICAgc2Z0cF9zdGF0dmZzX2ZyZWUoc3RhdHZmcyk7CisKKyAgICAgICAgaWYoIXRtcCkgeworICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7CisgICAgICAgIGZyZWUodG1wKTsKKyAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICB9CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU1NIX1NGVFBfR0VUSU5GTzoKKyAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0ZJTEVUSU1FOgorICAgIHsKKyAgICAgIHNmdHBfYXR0cmlidXRlcyBhdHRyczsKKworICAgICAgYXR0cnMgPSBzZnRwX3N0YXQoc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgpOworICAgICAgaWYoYXR0cnMgIT0gMCkgeworICAgICAgICBkYXRhLT5pbmZvLmZpbGV0aW1lID0gYXR0cnMtPm10aW1lOworICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShhdHRycyk7CisgICAgICB9CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9UUkFOU19JTklUOgorICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOworICAgICAgZWxzZSB7CisgICAgICAgIGlmKHByb3RvcC0+cGF0aFtzdHJsZW4ocHJvdG9wLT5wYXRoKS0xXSA9PSAnLycpCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9JTklUKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1VQTE9BRF9JTklUOgorICAgIHsKKyAgICAgIGludCBmbGFnczsKKworICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gIT0gMCkgeworICAgICAgICBzZnRwX2F0dHJpYnV0ZXMgYXR0cnM7CisKKyAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwKSB7CisgICAgICAgICAgYXR0cnMgPSBzZnRwX3N0YXQoc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgpOworICAgICAgICAgIGlmKGF0dHJzICE9IDApIHsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLT5zaXplOworICAgICAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLCBzaXplKTsKKyAgICAgICAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gYXR0cnMtPnNpemU7CisKKyAgICAgICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKGF0dHJzKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5mdHBfYXBwZW5kKQorICAgICAgICAvKiBUcnkgdG8gb3BlbiBmb3IgYXBwZW5kLCBidXQgY3JlYXRlIGlmIG5vbmV4aXN0aW5nICovCisgICAgICAgIGZsYWdzID0gT19XUk9OTFl8T19DUkVBVHxPX0FQUEVORDsKKyAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKQorICAgICAgICAvKiBJZiB3ZSBoYXZlIHJlc3RhcnQgcG9zaXRpb24gdGhlbiBvcGVuIGZvciBhcHBlbmQgKi8KKyAgICAgICAgZmxhZ3MgPSBPX1dST05MWXxPX0FQUEVORDsKKyAgICAgIGVsc2UKKyAgICAgICAgLyogQ2xlYXIgZmlsZSBiZWZvcmUgd3JpdGluZyAobm9ybWFsIGJlaGF2aW91cikgKi8KKyAgICAgICAgZmxhZ3MgPSBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkM7CisKKyAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkKKyAgICAgICAgc2Z0cF9jbG9zZShzc2hjLT5zZnRwX2ZpbGUpOworICAgICAgc3NoYy0+c2Z0cF9maWxlID0KKyAgICAgICAgc2Z0cF9vcGVuKHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAorICAgICAgICAgICAgICAgICAgZmxhZ3MsIChtb2RlX3QpZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zKTsKKyAgICAgIGlmKCFzc2hjLT5zZnRwX2ZpbGUpIHsKKyAgICAgICAgZXJyID0gc2Z0cF9nZXRfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKworICAgICAgICBpZigoKGVyciA9PSBTU0hfRlhfTk9fU1VDSF9GSUxFIHx8IGVyciA9PSBTU0hfRlhfRkFJTFVSRSB8fAorICAgICAgICAgICAgIGVyciA9PSBTU0hfRlhfTk9fU1VDSF9QQVRIKSkgJiYKKyAgICAgICAgICAgICAoZGF0YS0+c2V0LmZ0cF9jcmVhdGVfbWlzc2luZ19kaXJzICYmCisgICAgICAgICAgICAgKHN0cmxlbihwcm90b3AtPnBhdGgpID4gMSkpKSB7CisgICAgICAgICAgICAgICAvKiB0cnkgdG8gY3JlYXRlIHRoZSBwYXRoIHJlbW90ZWx5ICovCisgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICBzc2hjLT5zZWNvbmRDcmVhdGVEaXJzID0gMTsKKyAgICAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQpOworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogSWYgd2UgaGF2ZSBhIHJlc3RhcnQgcG9pbnQgdGhlbiB3ZSBuZWVkIHRvIHNlZWsgdG8gdGhlIGNvcnJlY3QKKyAgICAgICAgIHBvc2l0aW9uLiAqLworICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKSB7CisgICAgICAgIC8qIExldCdzIHJlYWQgb2ZmIHRoZSBwcm9wZXIgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGlucHV0LiAqLworICAgICAgICBpZihjb25uLT5zZWVrX2Z1bmMpIHsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgICBzZWVrZXJyID0gY29ubi0+c2Vla19mdW5jKGNvbm4tPnNlZWtfY2xpZW50LCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFRUtfU0VUKTsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfT0spIHsKKyAgICAgICAgICBjdXJsX29mZl90IHBhc3NlZCA9IDA7CisKKyAgICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2Vla2VyciA9PSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLIChjYW4ndCBzZWVrIHRvIG9mZnNldCkgKi8KKyAgICAgICAgICBkbyB7CisgICAgICAgICAgICBzaXplX3QgcmVhZHRoaXNhbW91bnRub3cgPQorICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQgPiBkYXRhLT5zZXQuYnVmZmVyX3NpemUpID8KKyAgICAgICAgICAgICAgKHNpemVfdClkYXRhLT5zZXQuYnVmZmVyX3NpemUgOgorICAgICAgICAgICAgICBjdXJseF9zb3RvdXooZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQpOworCisgICAgICAgICAgICBzaXplX3QgYWN0dWFsbHlyZWFkID0KKyAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuZnJlYWRfZnVuYyhkYXRhLT5zdGF0ZS5idWZmZXIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHRoaXNhbW91bnRub3csIGRhdGEtPnN0YXRlLmluKTsKKworICAgICAgICAgICAgcGFzc2VkICs9IGFjdHVhbGx5cmVhZDsKKyAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgICAvKiB0aGlzIGNoZWNrcyBmb3IgZ3JlYXRlci10aGFuIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgIENVUkxfUkVBREZVTkNfQUJPUlQgcmV0dXJuIGNvZGUgc3RpbGwgYWJvcnRzICovCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7CisgICAgICAgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1QpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gd2hpbGUocGFzc2VkIDwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworICAgICAgICB9CisKKyAgICAgICAgLyogbm93LCBkZWNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcmVhZCAqLworICAgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgeworICAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUgLT0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICByYyA9IHNmdHBfc2VlazY0KHNzaGMtPnNmdHBfZmlsZSwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworICAgICAgICBpZihyYyAhPSAwKSB7CisgICAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPiAwKSB7CisgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKKyAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKKyAgICAgIH0KKyAgICAgIC8qIHVwbG9hZCBkYXRhICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIEZJUlNUU09DS0VUKTsKKworICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCisgICAgICBjb25uLT5zb2NrZmQgPSBjb25uLT53cml0ZXNvY2tmZDsKKworICAgICAgLyogc3RvcmUgdGhpcyBvcmlnaW5hbCBiaXRtYXNrIHNldHVwIHRvIHVzZSBsYXRlciBvbiBpZiB3ZSBjYW4ndAorICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCisgICAgICBzc2hjLT5vcmlnX3dhaXRmb3IgPSBkYXRhLT5yZXEua2VlcG9uOworCisgICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3NlbmRpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoIHNmdHAgc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX09VVDsKKworICAgICAgLyogc2luY2Ugd2UgZG9uJ3QgcmVhbGx5IHdhaXQgZm9yIGFueXRoaW5nIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdGhlCisgICAgICAgICBzdGF0ZSBtYWNoaW5lIHRvIG1vdmUgb24gYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB3ZSBzZXQgYSB2ZXJ5IHNob3J0CisgICAgICAgICB0aW1lb3V0IGhlcmUgKi8KKyAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklUOgorICAgICAgaWYoc3RybGVuKHByb3RvcC0+cGF0aCkgPiAxKSB7CisgICAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHByb3RvcC0+cGF0aCArIDE7IC8qIGlnbm9yZSB0aGUgbGVhZGluZyAnLycgKi8KKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSUzoKKyAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHN0cmNocihzc2hjLT5zbGFzaF9wb3MsICcvJyk7CisgICAgICBpZihzc2hjLT5zbGFzaF9wb3MpIHsKKyAgICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9IDA7CisKKyAgICAgICAgaW5mb2YoZGF0YSwgIkNyZWF0aW5nIGRpcmVjdG9yeSAnJXMnXG4iLCBwcm90b3AtPnBhdGgpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSOgorICAgICAgLyogJ21vZGUnIC0gcGFyYW1ldGVyIGlzIHByZWxpbWluYXJ5IC0gZGVmYXVsdCB0byAwNjQ0ICovCisgICAgICByYyA9IHNmdHBfbWtkaXIoc3NoYy0+c2Z0cF9zZXNzaW9uLCBwcm90b3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgKG1vZGVfdClkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7CisgICAgICAqc3NoYy0+c2xhc2hfcG9zID0gJy8nOworICAgICAgKytzc2hjLT5zbGFzaF9wb3M7CisgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQWJvcnQgaWYgZmFpbHVyZSB3YXNuJ3QgdGhhdCB0aGUgZGlyIGFscmVhZHkgZXhpc3RzIG9yIHRoZQorICAgICAgICAgKiBwZXJtaXNzaW9uIHdhcyBkZW5pZWQgKGNyZWF0aW9uIG1pZ2h0IHN1Y2NlZWQgZnVydGhlciBkb3duIHRoZQorICAgICAgICAgKiBwYXRoKSAtIHJldHJ5IG9uIHVuc3BlY2lmaWMgRkFJTFVSRSBhbHNvCisgICAgICAgICAqLworICAgICAgICBlcnIgPSBzZnRwX2dldF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBpZigoZXJyICE9IFNTSF9GWF9GSUxFX0FMUkVBRFlfRVhJU1RTKSAmJgorICAgICAgICAgICAoZXJyICE9IFNTSF9GWF9GQUlMVVJFKSAmJgorICAgICAgICAgICAoZXJyICE9IFNTSF9GWF9QRVJNSVNTSU9OX0RFTklFRCkpIHsKKyAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgICAgfQorICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfSU5JVDoKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGdldCwgc28gcHJvZHVjZSBhIGRpcmVjdG9yeQorICAgICAgICogbGlzdGluZworICAgICAgICovCisgICAgICBzc2hjLT5zZnRwX2RpciA9IHNmdHBfb3BlbmRpcihzc2hjLT5zZnRwX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3AtPnBhdGgpOworICAgICAgaWYoIXNzaGMtPnNmdHBfZGlyKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgZm9yIHJlYWRpbmc6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVI6CisKKyAgICAgIGlmKHNzaGMtPnJlYWRkaXJfYXR0cnMpCisgICAgICAgIHNmdHBfYXR0cmlidXRlc19mcmVlKHNzaGMtPnJlYWRkaXJfYXR0cnMpOworCisgICAgICBzc2hjLT5yZWFkZGlyX2F0dHJzID0gc2Z0cF9yZWFkZGlyKHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+c2Z0cF9kaXIpOworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9hdHRycykgeworICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gc3NoYy0+cmVhZGRpcl9hdHRycy0+bmFtZTsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9sb25nZW50cnkgPSBzc2hjLT5yZWFkZGlyX2F0dHJzLT5sb25nbmFtZTsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSBzdHJsZW4oc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisKKyAgICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9saXN0X29ubHkpIHsKKyAgICAgICAgICBjaGFyICp0bXBMaW5lOworCisgICAgICAgICAgdG1wTGluZSA9IGFwcmludGYoIiVzXG4iLCBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgICBpZih0bXBMaW5lID09IE5VTEwpIHsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wTGluZSwgc3NoYy0+cmVhZGRpcl9sZW4gKyAxKTsKKyAgICAgICAgICBmcmVlKHRtcExpbmUpOworCisgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2luY2UgdGhpcyBjb3VudHMgd2hhdCB3ZSBzZW5kIHRvIHRoZSBjbGllbnQsIHdlIGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgbmV3bGluZSBpbiB0aGlzIGNvdW50ZXIgKi8KKyAgICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IHNzaGMtPnJlYWRkaXJfbGVuICsgMTsKKworICAgICAgICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KKyAgICAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3VyckxlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiA9IDgwICsgc3NoYy0+cmVhZGRpcl9jdXJyTGVuOworICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IGNhbGxvYyhzc2hjLT5yZWFkZGlyX3RvdGFsTGVuLCAxKTsKKyAgICAgICAgICBpZighc3NoYy0+cmVhZGRpcl9saW5lKSB7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIG1lbWNweShzc2hjLT5yZWFkZGlyX2xpbmUsIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5LAorICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4pOworICAgICAgICAgIGlmKChzc2hjLT5yZWFkZGlyX2F0dHJzLT5mbGFncyAmIFNTSF9GSUxFWEZFUl9BVFRSX1BFUk1JU1NJT05TKSAmJgorICAgICAgICAgICAgICgoc3NoYy0+cmVhZGRpcl9hdHRycy0+cGVybWlzc2lvbnMgJiBTX0lGTVQpID09CisgICAgICAgICAgICAgIFNfSUZMTkspKSB7CisgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xpbmtQYXRoID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICAgICAgICBpZihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoLCBQQVRIX01BWCwgIiVzJXMiLCBwcm90b3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfTElOSyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmKHNmdHBfZGlyX2VvZihzc2hjLT5zZnRwX2RpcikpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9ET05FKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyIsCisgICAgICAgICAgICAgIHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pKTsKKyAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfTElOSzoKKyAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua19hdHRycykKKyAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKTsKKworICAgICAgc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzID0gc2Z0cF9sc3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGgpOworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzID09IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZm9yIHJlYWRpbmc6ICVzIiwKKyAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgIH0KKworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzLT5uYW1lID09IE5VTEwpIHsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBzZnRwX3JlYWRsaW5rKHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGgpOworICAgICAgICBpZihzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSBzdHJsZW4oc3NoYy0+cmVhZGRpcl90bXApOworICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IE5VTEw7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBzc2hjLT5yZWFkZGlyX3RtcDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9IHN0cmxlbihzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMtPm5hbWUpOworICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzLT5uYW1lOworICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IHNzaGMtPnJlYWRkaXJfbGlua19hdHRycy0+bG9uZ25hbWU7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7CisKKyAgICAgIC8qIGdldCByb29tIGZvciB0aGUgZmlsZW5hbWUgYW5kIGV4dHJhIG91dHB1dCAqLworICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiArPSA0ICsgc3NoYy0+cmVhZGRpcl9sZW47CisgICAgICBuZXdfcmVhZGRpcl9saW5lID0gQ3VybF9zYWZlcmVhbGxvYyhzc2hjLT5yZWFkZGlyX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX3RvdGFsTGVuKTsKKyAgICAgIGlmKCFuZXdfcmVhZGRpcl9saW5lKSB7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IE5VTEw7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3NoYy0+cmVhZGRpcl9saW5lID0gbmV3X3JlYWRkaXJfbGluZTsKKworICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKworICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKTsKKyAgICAgIHNzaGMtPnJlYWRkaXJfbGlua19hdHRycyA9IE5VTEw7CisgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00pOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NOgorICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuICs9IG1zbnByaW50Zihzc2hjLT5yZWFkZGlyX2xpbmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sICJcbiIpOworICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7CisKKyAgICAgIGlmKCFyZXN1bHQpIHsKKworICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwgc3NoYy0+cmVhZGRpcl9saW5lLAorICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IHNzaGMtPnJlYWRkaXJfY3VyckxlbjsKKyAgICAgIH0KKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKKyAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKHNzaGMtPnJlYWRkaXJfdG1wKTsKKyAgICAgIHNzaGMtPnJlYWRkaXJfdG1wID0gTlVMTDsKKworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9ET05FOgorICAgICAgc2Z0cF9jbG9zZWRpcihzc2hjLT5zZnRwX2Rpcik7CisgICAgICBzc2hjLT5zZnRwX2RpciA9IE5VTEw7CisKKyAgICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQ6CisgICAgICAvKgorICAgICAgICogV29yayBvbiBnZXR0aW5nIHRoZSBzcGVjaWZpZWQgZmlsZQorICAgICAgICovCisgICAgICBpZihzc2hjLT5zZnRwX2ZpbGUpCisgICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKKworICAgICAgc3NoYy0+c2Z0cF9maWxlID0gc2Z0cF9vcGVuKHNzaGMtPnNmdHBfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9fUkRPTkxZLCAobW9kZV90KWRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyk7CisgICAgICBpZighc3NoYy0+c2Z0cF9maWxlKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiByZW1vdGUgZmlsZSBmb3IgcmVhZGluZzogJXMiLAorICAgICAgICAgICAgICBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKSk7CisKKyAgICAgICAgTU9WRV9UT19TRlRQX0NMT1NFX1NUQVRFKCk7CisgICAgICB9CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQ6CisgICAgeworICAgICAgc2Z0cF9hdHRyaWJ1dGVzIGF0dHJzOworICAgICAgY3VybF9vZmZfdCBzaXplOworCisgICAgICBhdHRycyA9IHNmdHBfZnN0YXQoc3NoYy0+c2Z0cF9maWxlKTsKKyAgICAgIGlmKCFhdHRycyB8fAorICAgICAgICAgICAgICAhKGF0dHJzLT5mbGFncyAmIFNTSF9GSUxFWEZFUl9BVFRSX1NJWkUpIHx8CisgICAgICAgICAgICAgIChhdHRycy0+c2l6ZSA9PSAwKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBzZnRwX2ZzdGF0IGRpZG4ndCByZXR1cm4gYW4gZXJyb3IsIHNvIG1heWJlIHRoZSBzZXJ2ZXIKKyAgICAgICAgICoganVzdCBkb2Vzbid0IHN1cHBvcnQgc3RhdCgpCisgICAgICAgICAqIE9SIHRoZSBzZXJ2ZXIgZG9lc24ndCByZXR1cm4gYSBmaWxlIHNpemUgd2l0aCBhIHN0YXQoKQorICAgICAgICAgKiBPUiBmaWxlIHNpemUgaXMgMAorICAgICAgICAgKi8KKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICAgIHNpemUgPSAwOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHNpemUgPSBhdHRycy0+c2l6ZTsKKworICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShhdHRycyk7CisKKyAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICB9CisgICAgICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZV9yYW5nZSkgeworICAgICAgICAgIGN1cmxfb2ZmX3QgZnJvbSwgdG87CisgICAgICAgICAgY2hhciAqcHRyOworICAgICAgICAgIGNoYXIgKnB0cjI7CisgICAgICAgICAgQ1VSTG9mZnQgdG9fdDsKKyAgICAgICAgICBDVVJMb2ZmdCBmcm9tX3Q7CisKKyAgICAgICAgICBmcm9tX3QgPSBjdXJseF9zdHJ0b29mZnQoY29ubi0+ZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDAsICZmcm9tKTsKKyAgICAgICAgICBpZihmcm9tX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpIHsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9SQU5HRV9FUlJPUjsKKyAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUoKnB0ciAmJiAoSVNTUEFDRSgqcHRyKSB8fCAoKnB0ciA9PSAnLScpKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICAgIHRvX3QgPSBjdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCwgJnRvKTsKKyAgICAgICAgICBpZih0b190ID09IENVUkxfT0ZGVF9GTE9XKSB7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkFOR0VfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKCh0b190ID09IENVUkxfT0ZGVF9JTlZBTCkgLyogbm8gInRvIiB2YWx1ZSBnaXZlbiAqLworICAgICAgICAgICAgIHx8ICh0byA+PSBzaXplKSkgeworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbV90KSB7CisgICAgICAgICAgICAvKiBmcm9tIGlzIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgICBmcm9tID0gc2l6ZSAtIHRvOworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbSA+IHNpemUpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgorICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIGZyb20sIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKGZyb20gPiB0bykgeworICAgICAgICAgICAgZnJvbSA9IHRvOworICAgICAgICAgICAgc2l6ZSA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2l6ZSA9IHRvIC0gZnJvbSArIDE7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmMgPSBzZnRwX3NlZWs2NChzc2hjLT5zZnRwX2ZpbGUsIGZyb20pOworICAgICAgICAgIGlmKHJjICE9IDApIHsKKyAgICAgICAgICAgIE1PVkVfVE9fU0ZUUF9DTE9TRV9TVEFURSgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemU7CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemU7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKKyAgICAgIH0KKworICAgICAgLyogV2UgY2FuIHJlc3VtZSBpZiB3ZSBjYW4gc2VlayB0byB0aGUgcmVzdW1lIHBvc2l0aW9uICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KKyAgICAgICAgICBpZigoY3VybF9vZmZfdClzaXplIDwgLWRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIgorICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIKKyAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLAorICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIGRvd25sb2FkIGZyb20gd2hlcmU/ICovCisgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gKz0gc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpZigoY3VybF9vZmZfdClzaXplIDwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKKyAgICAgICAgICAgICAgICAgICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwKKyAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBOb3cgc3RvcmUgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBhcmUgZXhwZWN0ZWQgdG8gZG93bmxvYWQgKi8KKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKKyAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworCisgICAgICAgIHJjID0gc2Z0cF9zZWVrNjQoc3NoYy0+c2Z0cF9maWxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICAgIGlmKHJjICE9IDApIHsKKyAgICAgICAgICBNT1ZFX1RPX1NGVFBfQ0xPU0VfU1RBVEUoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIFNldHVwIHRoZSBhY3R1YWwgZG93bmxvYWQgKi8KKyAgICBpZihkYXRhLT5yZXEuc2l6ZSA9PSAwKSB7CisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKKyAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSBkb3dubG9hZGVkXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKKworICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOworCisgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47CisKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyOyB0aGUgY2xvc2Ugc3RhdGUgc2hvdWxkIGJlIGVudGVyZWQKKyAgICAgICAgIGF0IHRoZSB0aW1lIHRoZSBlcnJvciBvY2N1cnMgKi8KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgc3NoYy0+c2Z0cF9yZWN2X3N0YXRlID0gMDsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0NMT1NFOgorICAgICAgaWYoc3NoYy0+c2Z0cF9maWxlKSB7CisgICAgICAgIHNmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9maWxlKTsKKyAgICAgICAgc3NoYy0+c2Z0cF9maWxlID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIEN1cmxfc2FmZWZyZWUocHJvdG9wLT5wYXRoKTsKKworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTRlRQIERPTkUgZG9uZVxuIikpOworCisgICAgICAvKiBDaGVjayBpZiBuZXh0c3RhdGUgaXMgc2V0IGFuZCBtb3ZlIC5uZXh0c3RhdGUgY291bGQgYmUgUE9TVFFVT1RFX0lOSVQKKyAgICAgICAgIEFmdGVyIG5leHRzdGF0ZSBpcyBleGVjdXRlZCwgdGhlIGNvbnRyb2wgc2hvdWxkIGNvbWUgYmFjayB0bworICAgICAgICAgU1NIX1NGVFBfQ0xPU0UgdG8gcGFzcyB0aGUgY29ycmVjdCByZXN1bHQgYmFjayAgKi8KKyAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUgJiYKKyAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfU0ZUUF9DTE9TRSkgeworICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfU0ZUUF9DTE9TRTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfU0hVVERPV046CisgICAgICAvKiBkdXJpbmcgdGltZXMgd2UgZ2V0IGhlcmUgZHVlIHRvIGEgYnJva2VuIHRyYW5zZmVyIGFuZCB0aGVuIHRoZQorICAgICAgICAgc2Z0cF9oYW5kbGUgbWlnaHQgbm90IGhhdmUgYmVlbiB0YWtlbiBkb3duIHNvIG1ha2Ugc3VyZSB0aGF0IGlzIGRvbmUKKyAgICAgICAgIGJlZm9yZSB3ZSBwcm9jZWVkICovCisKKyAgICAgIGlmKHNzaGMtPnNmdHBfZmlsZSkgeworICAgICAgICBzZnRwX2Nsb3NlKHNzaGMtPnNmdHBfZmlsZSk7CisgICAgICAgIHNzaGMtPnNmdHBfZmlsZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIGlmKHNzaGMtPnNmdHBfc2Vzc2lvbikgeworICAgICAgICBzZnRwX2ZyZWUoc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgU1NIX1NUUklOR19GUkVFX0NIQVIoc3NoYy0+aG9tZWRpcik7CisgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gTlVMTDsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7CisgICAgICBicmVhazsKKworCisgICAgY2FzZSBTU0hfU0NQX1RSQU5TX0lOSVQ6CisgICAgICByZXN1bHQgPSBDdXJsX2dldHdvcmtpbmdwYXRoKGNvbm4sIHNzaGMtPmhvbWVkaXIsICZwcm90b3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIC8qIEZ1bmN0aW9ucyBmcm9tIHRoZSBTQ1Agc3Vic3lzdGVtIGNhbm5vdCBoYW5kbGUvcmV0dXJuIFNTSF9BR0FJTiAqLworICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMSk7CisKKyAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKKyAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA8IDApIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU0NQIHJlcXVpcmVzIGEga25vd24gZmlsZSBzaXplIGZvciB1cGxvYWQiKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfVVBMT0FEX0ZBSUxFRDsKKyAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1VQTE9BRF9GQUlMRUQpOworICAgICAgICB9CisKKyAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPQorICAgICAgICAgIHNzaF9zY3BfbmV3KHNzaGMtPnNzaF9zZXNzaW9uLCBTU0hfU0NQX1dSSVRFLCBwcm90b3AtPnBhdGgpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzc2hjLT5zY3Bfc2Vzc2lvbiA9CisgICAgICAgICAgc3NoX3NjcF9uZXcoc3NoYy0+c3NoX3Nlc3Npb24sIFNTSF9TQ1BfUkVBRCwgcHJvdG9wLT5wYXRoKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET1dOTE9BRF9JTklUKTsKKyAgICAgIH0KKworICAgICAgaWYoIXNzaGMtPnNjcF9zZXNzaW9uKSB7CisgICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfVVBMT0FEX0ZBSUxFRCk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1VQTE9BRF9JTklUOgorCisgICAgICByYyA9IHNzaF9zY3BfaW5pdChzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKKyAgICAgIH0KKworICAgICAgcmMgPSBzc2hfc2NwX3B1c2hfZmlsZShzc2hjLT5zY3Bfc2Vzc2lvbiwgcHJvdG9wLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyk7CisgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgZXJyX21zZyA9IHNzaF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgTU9WRV9UT19FUlJPUl9TVEFURShDVVJMRV9VUExPQURfRkFJTEVEKTsKKyAgICAgIH0KKworICAgICAgLyogdXBsb2FkIGRhdGEgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgRklSU1RTT0NLRVQpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOworCisgICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0CisgICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KKyAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247CisKKyAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKKyAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2ggc2NwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfRE9XTkxPQURfSU5JVDoKKworICAgICAgcmMgPSBzc2hfc2NwX2luaXQoc3NoYy0+c2NwX3Nlc3Npb24pOworICAgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7CisgICAgICAgIE1PVkVfVE9fRVJST1JfU1RBVEUoQ1VSTEVfQ09VTEROVF9DT05ORUNUKTsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9XTkxPQUQpOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKworICAgIGNhc2UgU1NIX1NDUF9ET1dOTE9BRDp7CisgICAgICAgIGN1cmxfb2ZmX3QgYnl0ZWNvdW50OworCisgICAgICAgIHJjID0gc3NoX3NjcF9wdWxsX3JlcXVlc3Qoc3NoYy0+c2NwX3Nlc3Npb24pOworICAgICAgICBpZihyYyAhPSBTU0hfU0NQX1JFUVVFU1RfTkVXRklMRSkgeworICAgICAgICAgIGVycl9tc2cgPSBzc2hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgICBNT1ZFX1RPX0VSUk9SX1NUQVRFKENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBkb3dubG9hZCBkYXRhICovCisgICAgICAgIGJ5dGVjb3VudCA9IHNzaF9zY3BfcmVxdWVzdF9nZXRfc2l6ZShzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IChjdXJsX29mZl90KSBieXRlY291bnQ7CisgICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgRklSU1RTT0NLRVQsIGJ5dGVjb3VudCwgRkFMU0UsIC0xKTsKKworICAgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBjb25uLT5zb2NrZmQ7CisKKyAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47CisKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBjYXNlIFNTSF9TQ1BfRE9ORToKKyAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfU0VORF9FT0YpOworICAgICAgZWxzZQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0NIQU5ORUxfRlJFRSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9TRU5EX0VPRjoKKyAgICAgIGlmKHNzaGMtPnNjcF9zZXNzaW9uKSB7CisgICAgICAgIHJjID0gc3NoX3NjcF9jbG9zZShzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICAgIGlmKHJjID09IFNTSF9BR0FJTikgeworICAgICAgICAgIC8qIEN1cnJlbnRseSB0aGUgc3NoX3NjcF9jbG9zZSBoYW5kbGVzIHdhaXRpbmcgZm9yIEVPRiBpbgorICAgICAgICAgICAqIGJsb2NraW5nIHdheS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaCBzY3AgY2hhbm5lbDogJXNcbiIsCisgICAgICAgICAgICAgICAgc3NoX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX0NIQU5ORUxfRlJFRToKKyAgICAgIGlmKHNzaGMtPnNjcF9zZXNzaW9uKSB7CisgICAgICAgIHNzaF9zY3BfZnJlZShzc2hjLT5zY3Bfc2Vzc2lvbik7CisgICAgICAgIHNzaGMtPnNjcF9zZXNzaW9uID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiU0NQIERPTkUgcGhhc2UgY29tcGxldGVcbiIpKTsKKworICAgICAgc3NoX3NldF9ibG9ja2luZyhzc2hjLT5zc2hfc2Vzc2lvbiwgMCk7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKworICAgIGNhc2UgU1NIX1NFU1NJT05fRElTQ09OTkVDVDoKKyAgICAgIC8qIGR1cmluZyB3ZWlyZCB0aW1lcyB3aGVuIHdlJ3ZlIGJlZW4gcHJlbWF0dXJlbHkgYWJvcnRlZCwgdGhlIGNoYW5uZWwKKyAgICAgICAgIGlzIHN0aWxsIGFsaXZlIHdoZW4gd2UgcmVhY2ggdGhpcyBzdGF0ZSBhbmQgd2UgTVVTVCBraWxsIHRoZSBjaGFubmVsCisgICAgICAgICBwcm9wZXJseSBmaXJzdCAqLworICAgICAgaWYoc3NoYy0+c2NwX3Nlc3Npb24pIHsKKyAgICAgICAgc3NoX3NjcF9mcmVlKHNzaGMtPnNjcF9zZXNzaW9uKTsKKyAgICAgICAgc3NoYy0+c2NwX3Nlc3Npb24gPSBOVUxMOworICAgICAgfQorCisgICAgICBzc2hfZGlzY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisKKyAgICAgIFNTSF9TVFJJTkdfRlJFRV9DSEFSKHNzaGMtPmhvbWVkaXIpOworICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIFNTSF9TRVNTSU9OX0ZSRUU6CisgICAgICBpZihzc2hjLT5zc2hfc2Vzc2lvbikgeworICAgICAgICBzc2hfZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIHNzaGMtPnNzaF9zZXNzaW9uID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgLyogd29yc3QtY2FzZSBzY2VuYXJpbyBjbGVhbnVwICovCisKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9zZXNzaW9uID09IE5VTEwpOworICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c2NwX3Nlc3Npb24gPT0gTlVMTCk7CisKKyAgICAgIGlmKHNzaGMtPnJlYWRkaXJfdG1wKSB7CisgICAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKHNzaGMtPnJlYWRkaXJfdG1wKTsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl90bXAgPSBOVUxMOworICAgICAgfQorCisgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycykKKyAgICAgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cXVvdGVfYXR0cnMpOworCisgICAgICBpZihzc2hjLT5yZWFkZGlyX2F0dHJzKQorICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2F0dHJzKTsKKworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9saW5rX2F0dHJzKQorICAgICAgICBzZnRwX2F0dHJpYnV0ZXNfZnJlZShzc2hjLT5yZWFkZGlyX2xpbmtfYXR0cnMpOworCisgICAgICBpZihzc2hjLT5wcml2a2V5KQorICAgICAgICBzc2hfa2V5X2ZyZWUoc3NoYy0+cHJpdmtleSk7CisgICAgICBpZihzc2hjLT5wdWJrZXkpCisgICAgICAgIHNzaF9rZXlfZnJlZShzc2hjLT5wdWJrZXkpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYV9wdWIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7CisgICAgICBTU0hfU1RSSU5HX0ZSRUVfQ0hBUihzc2hjLT5ob21lZGlyKTsKKworICAgICAgLyogdGhlIGNvZGUgd2UgYXJlIGFib3V0IHRvIHJldHVybiAqLworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKworICAgICAgbWVtc2V0KHNzaGMsIDAsIHNpemVvZihzdHJ1Y3Qgc3NoX2Nvbm4pKTsKKworICAgICAgY29ubmNsb3NlKGNvbm4sICJTU0ggc2Vzc2lvbiBmcmVlIik7CisgICAgICBzc2hjLT5zdGF0ZSA9IFNTSF9TRVNTSU9OX0ZSRUU7ICAgLyogY3VycmVudCAqLworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9RVUlUOgorICAgICAgLyogZmFsbHRocm91Z2gsIGp1c3Qgc3RvcCEgKi8KKyAgICBkZWZhdWx0OgorICAgICAgLyogaW50ZXJuYWwgZXJyb3IgKi8KKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgfQorICB9IHdoaWxlKCFyYyAmJiAoc3NoYy0+c3RhdGUgIT0gU1NIX1NUT1ApKTsKKworCisgIGlmKHJjID09IFNTSF9BR0FJTikgeworICAgIC8qIHdlIHdvdWxkIGJsb2NrLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgcmVhZHkgKGluIHRoZQorICAgICAgIHJpZ2h0IGRpcmVjdGlvbiB0b28pISAqLworICAgICpibG9jayA9IFRSVUU7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIGNhbGxlZCBieSB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIGZpZ3VyZSBvdXQgd2hhdCBzb2NrZXQocykgdG8gd2FpdCBmb3IgYW5kCisgICBmb3Igd2hhdCBhY3Rpb25zIGluIHRoZSBET19ET05FLCBQRVJGT1JNIGFuZCBXQUlUUEVSRk9STSBzdGF0ZXMgKi8KK3N0YXRpYyBpbnQgbXlzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCit7CisgIGludCBiaXRtYXAgPSBHRVRTT0NLX0JMQU5LOworICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfUkVDVikKKyAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfU0VORCkKKyAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOworCisgIHJldHVybiBiaXRtYXA7Cit9CisKKy8qIEdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKQorICAgdG8gd2FpdCBmb3IgYW5kIGZvciB3aGF0IGFjdGlvbnMgZHVyaW5nIHRoZSBET0lORyBhbmQgUFJPVE9DT05ORUNUIHN0YXRlcyovCitzdGF0aWMgaW50IG15c3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spCit7CisgIC8qIGlmIHdlIGtub3cgdGhlIGRpcmVjdGlvbiB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljICpfZ2V0c29jaygpIGZ1bmN0aW9uIGV2ZW4KKyAgICAgZm9yIHRoZSBwcm90b2NvbF9jb25uZWN0IGFuZCBkb2luZyBzdGF0ZXMgKi8KKyAgcmV0dXJuIG15c3NoX3BlcmZvcm1fZ2V0c29jayhjb25uLCBzb2NrKTsKK30KKworc3RhdGljIHZvaWQgbXlzc2hfYmxvY2syd2FpdGZvcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgYmxvY2spCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworCisgIC8qIElmIGl0IGRpZG4ndCBibG9jaywgb3Igbm90aGluZyB3YXMgcmV0dXJuZWQgYnkgc3NoX2dldF9wb2xsX2ZsYWdzCisgICAqIGhhdmUgdGhlIG9yaWdpbmFsIHNldCAqLworICBjb25uLT53YWl0Zm9yID0gc3NoYy0+b3JpZ193YWl0Zm9yOworCisgIGlmKGJsb2NrKSB7CisgICAgaW50IGRpciA9IHNzaF9nZXRfcG9sbF9mbGFncyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgaWYoZGlyICYgU1NIX1JFQURfUEVORElORykgeworICAgICAgLyogdHJhbnNsYXRlIHRoZSBsaWJzc2ggZGVmaW5lIGJpdHMgaW50byBvdXIgb3duIGJpdCBkZWZpbmVzICovCisgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgIH0KKyAgICBlbHNlIGlmKGRpciAmIFNTSF9XUklURV9QRU5ESU5HKSB7CisgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgIH0KKyAgfQorfQorCisvKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLworc3RhdGljIENVUkxjb2RlIG15c3NoX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBib29sIGJsb2NrOyAgICAvKiB3ZSBzdG9yZSB0aGUgc3RhdHVzIGFuZCB1c2UgdGhhdCB0byBwcm92aWRlIGEgc3NoX2dldHNvY2soKQorICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAqLworICBDVVJMY29kZSByZXN1bHQgPSBteXNzaF9zdGF0ZW1hY2hfYWN0KGNvbm4sICZibG9jayk7CisKKyAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOworICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIGJsb2NrKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfYmxvY2tfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkaXNjb25uZWN0KQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIHdoaWxlKChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkgJiYgIXJlc3VsdCkgeworICAgIGJvb2wgYmxvY2s7CisgICAgdGltZWRpZmZfdCBsZWZ0ID0gMTAwMDsKKyAgICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKKworICAgIHJlc3VsdCA9IG15c3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIGlmKCFkaXNjb25uZWN0KSB7CisgICAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCisgICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworCisgICAgICByZXN1bHQgPSBDdXJsX3NwZWVkY2hlY2soZGF0YSwgbm93KTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGxlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIEZBTFNFKTsKKyAgICAgIGlmKGxlZnQgPCAwKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJPcGVyYXRpb24gdGltZWQgb3V0Iik7CisgICAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYoYmxvY2spIHsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfcmVhZCA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICAgICAgLyogd2FpdCBmb3IgdGhlIHNvY2tldCB0byBiZWNvbWUgcmVhZHkgKi8KKyAgICAgICh2b2lkKSBDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9TT0NLRVRfQkFELCBsZWZ0ID4gMTAwMCA/IDEwMDAgOiBsZWZ0KTsKKyAgICB9CisKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTU0ggc2V0dXAgY29ubmVjdGlvbgorICovCitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTU0hQUk9UTyAqc3NoOworCisgIGNvbm4tPmRhdGEtPnJlcS5wcm90b3AgPSBzc2ggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBTU0hQUk9UTykpOworICBpZighc3NoKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIEN1cmxfcmVjdiBzY3BfcmVjdiwgc2Z0cF9yZWN2Oworc3RhdGljIEN1cmxfc2VuZCBzY3Bfc2VuZCwgc2Z0cF9zZW5kOworCisvKgorICogQ3VybF9zc2hfY29ubmVjdCgpIGdldHMgY2FsbGVkIGZyb20gQ3VybF9wcm90b2NvbF9jb25uZWN0KCkgdG8gYWxsb3cgdXMgdG8KKyAqIGRvIHByb3RvY29sLXNwZWNpZmljIGFjdGlvbnMgYXQgY29ubmVjdC10aW1lLgorICovCitzdGF0aWMgQ1VSTGNvZGUgbXlzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoOworICBDVVJMY29kZSByZXN1bHQ7CisgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgaW50IHJjOworCisgIC8qIGluaXRpYWxpemUgcGVyLWhhbmRsZSBkYXRhIGlmIG5vdCBhbHJlYWR5ICovCisgIGlmKCFkYXRhLT5yZXEucHJvdG9wKQorICAgIG15c3NoX3NldHVwX2Nvbm5lY3Rpb24oY29ubik7CisKKyAgLyogV2UgZGVmYXVsdCB0byBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLiBXZSBzZXQgdGhpcyBhbHJlYWR5IGluIHRoaXMgY29ubmVjdAorICAgICBmdW5jdGlvbiB0byBtYWtlIHRoZSByZS11c2UgY2hlY2tzIHByb3Blcmx5IGJlIGFibGUgdG8gY2hlY2sgdGhpcyBiaXQuICovCisgIGNvbm5rZWVwKGNvbm4sICJTU0ggZGVmYXVsdCIpOworCisgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkgeworICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2NwX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzY3Bfc2VuZDsKKyAgfQorICBlbHNlIHsKKyAgICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHNmdHBfcmVjdjsKKyAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNmdHBfc2VuZDsKKyAgfQorCisgIHNzaCA9ICZjb25uLT5wcm90by5zc2hjOworCisgIHNzaC0+c3NoX3Nlc3Npb24gPSBzc2hfbmV3KCk7CisgIGlmKHNzaC0+c3NoX3Nlc3Npb24gPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpc2luZyBzc2ggc2Vzc2lvbiIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIHJjID0gc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsIGNvbm4tPmhvc3QubmFtZSk7CisgIGlmKHJjICE9IFNTSF9PSykgeworICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2V0IHJlbW90ZSBob3N0Iik7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyAgcmMgPSBzc2hfb3B0aW9uc19wYXJzZV9jb25maWcoc3NoLT5zc2hfc2Vzc2lvbiwgTlVMTCk7CisgIGlmKHJjICE9IFNTSF9PSykgeworICAgIGluZm9mKGRhdGEsICJDb3VsZCBub3QgcGFyc2UgU1NIIGNvbmZpZ3VyYXRpb24gZmlsZXMiKTsKKyAgICAvKiBpZ25vcmUgKi8KKyAgfQorCisgIHJjID0gc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0ZELCAmc29jayk7CisgIGlmKHJjICE9IFNTSF9PSykgeworICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2V0IHNvY2tldCIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIGlmKGNvbm4tPnVzZXIgJiYgY29ubi0+dXNlclswXSAhPSAnXDAnKSB7CisgICAgaW5mb2YoZGF0YSwgIlVzZXI6ICVzXG4iLCBjb25uLT51c2VyKTsKKyAgICByYyA9IHNzaF9vcHRpb25zX3NldChzc2gtPnNzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19VU0VSLCBjb25uLT51c2VyKTsKKyAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2V0IHVzZXIiKTsKKyAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICB9CisgIH0KKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pIHsKKyAgICBpbmZvZihkYXRhLCAiS25vd24gaG9zdHM6ICVzXG4iLCBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICAgIHJjID0gc3NoX29wdGlvbnNfc2V0KHNzaC0+c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0tOT1dOSE9TVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKKyAgICBpZihyYyAhPSBTU0hfT0spIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2V0IGtub3duIGhvc3RzIGZpbGUgcGF0aCIpOworICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIH0KKyAgfQorCisgIGlmKGNvbm4tPnJlbW90ZV9wb3J0KSB7CisgICAgcmMgPSBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+cmVtb3RlX3BvcnQpOworICAgIGlmKHJjICE9IFNTSF9PSykgeworICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBzZXQgcmVtb3RlIHBvcnQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICB9CisgIH0KKworICBpZihkYXRhLT5zZXQuc3NoX2NvbXByZXNzaW9uKSB7CisgICAgcmMgPSBzc2hfb3B0aW9uc19zZXQoc3NoLT5zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfQ09NUFJFU1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgInpsaWIsemxpYkBvcGVuc3NoLmNvbSxub25lIik7CisgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHNldCBjb21wcmVzc2lvbiIpOworICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIH0KKyAgfQorCisgIHNzaC0+cHJpdmtleSA9IE5VTEw7CisgIHNzaC0+cHVia2V5ID0gTlVMTDsKKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV0pIHsKKyAgICByYyA9IHNzaF9wa2lfaW1wb3J0X3B1YmtleV9maWxlKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QVUJMSUNfS0VZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2gtPnB1YmtleSk7CisgICAgaWYocmMgIT0gU1NIX09LKSB7CisgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IGxvYWQgcHVibGljIGtleSBmaWxlIik7CisgICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgfQorICB9CisKKyAgLyogd2UgZG8gbm90IHZlcmlmeSBoZXJlLCB3ZSBkbyBpdCBhdCB0aGUgc3RhdGUgbWFjaGluZSwKKyAgICogYWZ0ZXIgY29ubmVjdGlvbiAqLworCisgIHN0YXRlKGNvbm4sIFNTSF9JTklUKTsKKworICByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9uZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLworc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworCisgIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNjcF9wZXJmb3JtKCkKKyAqCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNDUC4gR2V0IGEgZmlsZSBhY2NvcmRpbmcgdG8KKyAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KKworc3RhdGljCitDVVJMY29kZSBzY3BfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKKworICAqZG9waGFzZV9kb25lID0gRkFMU0U7ICAgICAgICAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NDUF9UUkFOU19JTklUKTsKKworICByZXN1bHQgPSBteXNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKKworICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXTsKKworICBpZigqZG9waGFzZV9kb25lKSB7CisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIG15c3NoX2RvX2l0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBib29sIGNvbm5lY3RlZCA9IDA7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworICAqZG9uZSA9IEZBTFNFOyAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisKKyAgZGF0YS0+cmVxLnNpemUgPSAtMTsgICAgICAgICAgLyogbWFrZSBzdXJlIHRoaXMgaXMgdW5rbm93biBhdCB0aGlzIHBvaW50ICovCisKKyAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOyAgLyogcmVzZXQgZXJyb3IgY29kZSAqLworICBzc2hjLT5zZWNvbmRDcmVhdGVEaXJzID0gMDsgICAvKiByZXNldCB0aGUgY3JlYXRlIGRpciBhdHRlbXB0IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICovCisKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKGRhdGEsIDApOworICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIC0xKTsKKyAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIC0xKTsKKworICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19TQ1ApCisgICAgcmVzdWx0ID0gc2NwX3BlcmZvcm0oY29ubiwgJmNvbm5lY3RlZCwgZG9uZSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBzZnRwX3BlcmZvcm0oY29ubiwgJmNvbm5lY3RlZCwgZG9uZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQkxPQ0tJTkcsIGJ1dCB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhlIHN0YXRlIG1hY2hpbmUgc28gdGhlIG9ubHkgcmVhc29uCisgICB0aGlzIGlzIHN0aWxsIGJsb2NraW5nIGlzIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjb2RlIGhhcyBubyBzdXBwb3J0IGZvcgorICAgZGlzY29ubmVjdGluZyBvcGVyYXRpb25zIHRoYXQgdGFrZXMgYSB3aGlsZSAqLworc3RhdGljIENVUkxjb2RlIHNjcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoID0gJmNvbm4tPnByb3RvLnNzaGM7CisgICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247CisKKyAgaWYoc3NoLT5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKworICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOworCisgICAgcmVzdWx0ID0gbXlzc2hfYmxvY2tfc3RhdGVtYWNoKGNvbm4sIFRSVUUpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogZ2VuZXJpYyBkb25lIGZ1bmN0aW9uIGZvciBib3RoIFNDUCBhbmQgU0ZUUCBjYWxsZWQgZnJvbSB0aGVpciBzcGVjaWZpYworICAgZG9uZSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBDVVJMY29kZSBteXNzaF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNTSFBST1RPICpwcm90b3AgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdGF0dXMpIHsKKyAgICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgICByZXN1bHQgPSBteXNzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgRkFMU0UpOworICB9CisgIGVsc2UKKyAgICByZXN1bHQgPSBzdGF0dXM7CisKKyAgaWYocHJvdG9wKQorICAgIEN1cmxfc2FmZWZyZWUocHJvdG9wLT5wYXRoKTsKKyAgaWYoQ3VybF9wZ3JzRG9uZShjb25uKSkKKyAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKworICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgICAvKiBjbGVhciBhbGwgYml0cyAqLworICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBDVVJMY29kZSBzY3BfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKK3sKKyAgKHZvaWQpIHByZW1hdHVyZTsgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KKworICBpZighc3RhdHVzKQorICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9ORSk7CisKKyAgcmV0dXJuIG15c3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKKworfQorCitzdGF0aWMgc3NpemVfdCBzY3Bfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIGludCByYzsKKyAgKHZvaWQpIHNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KKyAgKHZvaWQpIGVycjsKKworICByYyA9IHNzaF9zY3Bfd3JpdGUoY29ubi0+cHJvdG8uc3NoYy5zY3Bfc2Vzc2lvbiwgbWVtLCBsZW4pOworCisjaWYgMAorICAvKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgbWlzbGVhZGluZywgbW9zdGx5IGFkZGVkIGFzIHdpc2hmdWwgdGhpbmtpbmcKKyAgICogdGhhdCBsaWJzc2ggYXQgc29tZSBwb2ludCB3aWxsIGltcGxlbWVudCBub24tYmxvY2tpbmcgc3NoX3NjcF93cml0ZS9yZWFkLgorICAgKiBDdXJyZW50bHkgcmMgY2FuIG9ubHkgYmUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3IgU1NIX0VSUk9SLiAqLworICBteXNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChyYyA9PSBTU0hfQUdBSU4pID8gVFJVRSA6IEZBTFNFKTsKKworICBpZihyYyA9PSBTU0hfQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgcmV0dXJuIDA7CisgIH0KKyAgZWxzZQorI2VuZGlmCisgIGlmKHJjICE9IFNTSF9PSykgeworICAgICplcnIgPSBDVVJMRV9TU0g7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc2NwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG5yZWFkOworICAodm9pZCkgZXJyOworICAodm9pZCkgc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLworCisgIC8qIGxpYnNzaCByZXR1cm5zIGludCAqLworICBucmVhZCA9IHNzaF9zY3BfcmVhZChjb25uLT5wcm90by5zc2hjLnNjcF9zZXNzaW9uLCBtZW0sIGxlbik7CisKKyNpZiAwCisgIC8qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBtaXNsZWFkaW5nLCBtb3N0bHkgYWRkZWQgYXMgd2lzaGZ1bCB0aGlua2luZworICAgKiB0aGF0IGxpYnNzaCBhdCBzb21lIHBvaW50IHdpbGwgaW1wbGVtZW50IG5vbi1ibG9ja2luZyBzc2hfc2NwX3dyaXRlL3JlYWQuCisgICAqIEN1cnJlbnRseSByYyBjYW4gb25seSBiZSBTU0hfT0sgb3IgU1NIX0VSUk9SLiAqLworCisgIG15c3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG5yZWFkID09IFNTSF9BR0FJTikgPyBUUlVFIDogRkFMU0UpOworICBpZihucmVhZCA9PSBTU0hfQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbnJlYWQgPSAtMTsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIG5yZWFkOworfQorCisvKgorICogPT09PT09PT09PT09PT09IFNGVFAgPT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNmdHBfcGVyZm9ybSgpCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTRlRQLiBHZXQgYSBmaWxlL2RpcmVjdG9yeSBhY2NvcmRpbmcgdG8KKyAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KKworc3RhdGljCitDVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfSU5JVCk7CisKKyAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IG15c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworICBpZigqZG9waGFzZV9kb25lKSB7CisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgorICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKKyAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KK3N0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBzdGFydHMgbm93XG4iKSk7CisKKyAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7CisgICAgcmVzdWx0ID0gbXlzc2hfYmxvY2tfc3RhdGVtYWNoKGNvbm4sIFRSVUUpOworICB9CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBpcyBkb25lXG4iKSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworICBpZighc3RhdHVzKSB7CisgICAgLyogUG9zdCBxdW90ZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIFNGVFBfQ0xPU0Ugc3RhdGUgdG8gYXZvaWQKKyAgICAgICBlcnJvcnMgdGhhdCBjb3VsZCBoYXBwZW4gZHVlIHRvIG9wZW4gZmlsZSBoYW5kbGVzIGR1cmluZyBQT1NUUVVPVEUKKyAgICAgICBvcGVyYXRpb24gKi8KKyAgICBpZighcHJlbWF0dXJlICYmIGNvbm4tPmRhdGEtPnNldC5wb3N0cXVvdGUgJiYgIWNvbm4tPmJpdHMucmV0cnkpCisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVDsKKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgIH0KKyAgcmV0dXJuIG15c3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKK30KKworLyogcmV0dXJuIG51bWJlciBvZiBzZW50IGJ5dGVzICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBud3JpdGU7CisgICh2b2lkKXNvY2tpbmRleDsKKworICBud3JpdGUgPSBzZnRwX3dyaXRlKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlLCBtZW0sIGxlbik7CisKKyAgbXlzc2hfYmxvY2syd2FpdGZvcihjb25uLCBGQUxTRSk7CisKKyNpZiAwIC8qIG5vdCByZXR1cm5lZCBieSBsaWJzc2ggb24gd3JpdGUgKi8KKyAgaWYobndyaXRlID09IFNTSF9BR0FJTikgeworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICBud3JpdGUgPSAwOworICB9CisgIGVsc2UKKyNlbmRpZgorICBpZihud3JpdGUgPCAwKSB7CisgICAgKmVyciA9IENVUkxFX1NTSDsKKyAgICBud3JpdGUgPSAtMTsKKyAgfQorCisgIHJldHVybiBud3JpdGU7Cit9CisKKy8qCisgKiBSZXR1cm4gbnVtYmVyIG9mIHJlY2VpdmVkIChkZWNyeXB0ZWQpIGJ5dGVzCisgKiBvciA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBucmVhZDsKKyAgKHZvaWQpc29ja2luZGV4OworCisgIERFQlVHQVNTRVJUKGxlbiA8IENVUkxfTUFYX1JFQURfU0laRSk7CisKKyAgc3dpdGNoKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9yZWN2X3N0YXRlKSB7CisgICAgY2FzZSAwOgorICAgICAgY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGVfaW5kZXggPQorICAgICAgICAgICAgc2Z0cF9hc3luY19yZWFkX2JlZ2luKGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClsZW4pOworICAgICAgaWYoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2ZpbGVfaW5kZXggPCAwKSB7CisgICAgICAgICplcnIgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSAxOgorICAgICAgY29ubi0+cHJvdG8uc3NoYy5zZnRwX3JlY3Zfc3RhdGUgPSAxOworCisgICAgICBucmVhZCA9IHNmdHBfYXN5bmNfcmVhZChjb25uLT5wcm90by5zc2hjLnNmdHBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbSwgKHVpbnQzMl90KWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnByb3RvLnNzaGMuc2Z0cF9maWxlX2luZGV4KTsKKworICAgICAgbXlzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobnJlYWQgPT0gU1NIX0FHQUlOKT9UUlVFOkZBTFNFKTsKKworICAgICAgaWYobnJlYWQgPT0gU1NIX0FHQUlOKSB7CisgICAgICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICAgICAgZWxzZSBpZihucmVhZCA8IDApIHsKKyAgICAgICAgKmVyciA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKworICAgICAgY29ubi0+cHJvdG8uc3NoYy5zZnRwX3JlY3Zfc3RhdGUgPSAwOworICAgICAgcmV0dXJuIG5yZWFkOworCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIHdlIG5ldmVyIHJlYWNoIGhlcmUgKi8KKyAgICAgIHJldHVybiAtMTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBzZnRwX3F1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgY29uc3QgY2hhciAqY3A7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgU1NIUFJPVE8gKnByb3RvcCA9IGRhdGEtPnJlcS5wcm90b3A7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBDVVJMY29kZSByZXN1bHQ7CisKKyAgLyoKKyAgICogU3VwcG9ydCBzb21lIG9mIHRoZSAiRlRQIiBjb21tYW5kcworICAgKi8KKyAgY2hhciAqY21kID0gc3NoYy0+cXVvdGVfaXRlbS0+ZGF0YTsKKyAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOworCisgIC8qIGlmIGEgY29tbWFuZCBzdGFydHMgd2l0aCBhbiBhc3Rlcmlzaywgd2hpY2ggYSBsZWdhbCBTRlRQIGNvbW1hbmQgbmV2ZXIKKyAgICAgY2FuLCB0aGUgY29tbWFuZCB3aWxsIGJlIGFsbG93ZWQgdG8gZmFpbCB3aXRob3V0IGl0IGNhdXNpbmcgYW55CisgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAorICAgICBpcyBzdWNjZXNzZnVsLCB3aGF0ZXZlciB0aGUgc2VydmVyIHJlcG9uZHMuICovCisKKyAgaWYoY21kWzBdID09ICcqJykgeworICAgIGNtZCsrOworICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBUUlVFOworICB9CisKKyAgaWYoc3RyY2FzZWNvbXBhcmUoInB3ZCIsIGNtZCkpIHsKKyAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgY2hhciAqdG1wID0gYXByaW50ZigiMjU3IFwiJXNcIiBpcyBjdXJyZW50IGRpcmVjdG9yeS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3AtPnBhdGgpOworICAgIGlmKCF0bXApIHsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfT1VULCAoY2hhciAqKSAiUFdEXG4iLCA0KTsKKyAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX0lOLCB0bXAsIHN0cmxlbih0bXApKTsKKyAgICB9CisgICAgLyogdGhpcyBzZW5kcyBhbiBGVFAtbGlrZSAiaGVhZGVyIiB0byB0aGUgaGVhZGVyIGNhbGxiYWNrIHNvIHRoYXQgdGhlCisgICAgICAgY3VycmVudCBkaXJlY3RvcnkgY2FuIGJlIHJlYWQgdmVyeSBzaW1pbGFyIHRvIGhvdyBpdCBpcyByZWFkIHdoZW4KKyAgICAgICB1c2luZyBvcmRpbmFyeSBGVFAuICovCisgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKKyAgICBmcmVlKHRtcCk7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgIH0KKyAgICBlbHNlCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKgorICAgKiB0aGUgYXJndW1lbnRzIGZvbGxvd2luZyB0aGUgY29tbWFuZCBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZQorICAgKiBjb21tYW5kIHdpdGggYSBzcGFjZSBzbyB3ZSBjYW4gY2hlY2sgZm9yIGl0IHVuY29uZGl0aW9uYWxseQorICAgKi8KKyAgY3AgPSBzdHJjaHIoY21kLCAnICcpOworICBpZihjcCA9PSBOVUxMKSB7CisgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBTRlRQIGNvbW1hbmQuIFN1cHBseSBwYXJhbWV0ZXIocykhIik7CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgcmV0dXJuOworICB9CisKKyAgLyoKKyAgICogYWxzbywgZXZlcnkgY29tbWFuZCB0YWtlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQgc28gd2UgZ2V0IHRoYXQKKyAgICogZmlyc3QgYXJndW1lbnQgcmlnaHQgbm93CisgICAqLworICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMSwgc3NoYy0+aG9tZWRpcik7CisgIGlmKHJlc3VsdCkgeworICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICBlbHNlCisgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBCYWQgZmlyc3QgcGFyYW1ldGVyIik7CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgIHJldHVybjsKKyAgfQorCisgIC8qCisgICAqIFNGVFAgaXMgYSBiaW5hcnkgcHJvdG9jb2wsIHNvIHdlIGRvbid0IHNlbmQgdGV4dCBjb21tYW5kcworICAgKiB0byB0aGUgc2VydmVyLiBJbnN0ZWFkLCB3ZSBzY2FuIGZvciBjb21tYW5kcyB1c2VkIGJ5CisgICAqIE9wZW5TU0gncyBzZnRwIHByb2dyYW0gYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnNzaAorICAgKiBmdW5jdGlvbnMuCisgICAqLworICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hncnAgIiwgNikgfHwKKyAgICAgc3RybmNhc2Vjb21wYXJlKGNtZCwgImNobW9kICIsIDYpIHx8CisgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG93biAiLCA2KSkgeworICAgIC8qIGF0dHJpYnV0ZSBjaGFuZ2UgKi8KKworICAgIC8qIHNzaGMtPnF1b3RlX3BhdGgxIGNvbnRhaW5zIHRoZSBtb2RlIHRvIHNldCAqLworICAgIC8qIGdldCB0aGUgZGVzdGluYXRpb24gKi8KKyAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKKyAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBjaGdycC9jaG1vZC9jaG93bjogIgorICAgICAgICAgICAgICAiQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3NoYy0+cXVvdGVfYXR0cnMgPSBOVUxMOworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVQpOworICAgIHJldHVybjsKKyAgfQorICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAibG4gIiwgMykgfHwKKyAgICAgc3RybmNhc2Vjb21wYXJlKGNtZCwgInN5bWxpbmsgIiwgOCkpIHsKKyAgICAvKiBzeW1ib2xpYyBsaW5raW5nICovCisgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgaXMgdGhlIHNvdXJjZSAqLworICAgIC8qIGdldCB0aGUgZGVzdGluYXRpb24gKi8KKyAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKKyAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBsbi9zeW1saW5rOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LKTsKKyAgICByZXR1cm47CisgIH0KKyAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAibWtkaXIgIiwgNikpIHsKKyAgICAvKiBjcmVhdGUgZGlyICovCisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfTUtESVIpOworICAgIHJldHVybjsKKyAgfQorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJyZW5hbWUgIiwgNykpIHsKKyAgICAvKiByZW5hbWUgZmlsZSAqLworICAgIC8qIGZpcnN0IHBhcmFtIGlzIHRoZSBzb3VyY2UgcGF0aCAqLworICAgIC8qIHNlY29uZCBwYXJhbSBpcyB0aGUgZGVzdC4gcGF0aCAqLworICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOworICAgICAgZWxzZQorICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluIHJlbmFtZTogQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfUkVOQU1FKTsKKyAgICByZXR1cm47CisgIH0KKyAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicm1kaXIgIiwgNikpIHsKKyAgICAvKiBkZWxldGUgZGlyICovCisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfUk1ESVIpOworICAgIHJldHVybjsKKyAgfQorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJybSAiLCAzKSkgeworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1VOTElOSyk7CisgICAgcmV0dXJuOworICB9CisjaWZkZWYgSEFTX1NUQVRWRlNfU1VQUE9SVAorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJzdGF0dmZzICIsIDgpKSB7CisgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyk7CisgICAgcmV0dXJuOworICB9CisjZW5kaWYKKworICBmYWlsZihkYXRhLCAiVW5rbm93biBTRlRQIGNvbW1hbmQiKTsKKyAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworfQorCitzdGF0aWMgdm9pZCBzZnRwX3F1b3RlX3N0YXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIGNoYXIgKmNtZCA9IHNzaGMtPnF1b3RlX2l0ZW0tPmRhdGE7CisgIHNzaGMtPmFjY2VwdGZhaWwgPSBGQUxTRTsKKworICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCisgICAgIGNhbiwgdGhlIGNvbW1hbmQgd2lsbCBiZSBhbGxvd2VkIHRvIGZhaWwgd2l0aG91dCBpdCBjYXVzaW5nIGFueQorICAgICBhYm9ydHMgb3IgY2FuY2VscyBldGMuIEl0IHdpbGwgY2F1c2UgbGliY3VybCB0byBhY3QgYXMgaWYgdGhlIGNvbW1hbmQKKyAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLworCisgIGlmKGNtZFswXSA9PSAnKicpIHsKKyAgICBjbWQrKzsKKyAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKKyAgfQorCisgIC8qIFdlIHJlYWQgdGhlIGZpbGUgYXR0cmlidXRlcywgc3RvcmUgdGhlbSBpbiBzc2hjLT5xdW90ZV9hdHRycworICAgKiBhbmQgbW9kaWZ5IHRoZW0gYWNjb3JkaW5nbHkgdG8gY29tbWFuZC4gVGhlbiB3ZSBzd2l0Y2ggdG8KKyAgICogUVVPVEVfU0VUU1RBVCBzdGF0ZSB0byB3cml0ZSBuZXcgb25lcy4KKyAgICovCisKKyAgaWYoc3NoYy0+cXVvdGVfYXR0cnMpCisgICAgc2Z0cF9hdHRyaWJ1dGVzX2ZyZWUoc3NoYy0+cXVvdGVfYXR0cnMpOworICBzc2hjLT5xdW90ZV9hdHRycyA9IHNmdHBfc3RhdChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgaWYoc3NoYy0+cXVvdGVfYXR0cnMgPT0gTlVMTCkgeworICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgIGZhaWxmKGRhdGEsICJBdHRlbXB0IHRvIGdldCBTRlRQIHN0YXRzIGZhaWxlZDogJWQiLAorICAgICAgICAgIHNmdHBfZ2V0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbikpOworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgIHJldHVybjsKKyAgfQorCisgIC8qIE5vdyBzZXQgdGhlIG5ldyBhdHRyaWJ1dGVzLi4uICovCisgIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaGdycCIsIDUpKSB7CisgICAgc3NoYy0+cXVvdGVfYXR0cnMtPmdpZCA9ICh1aW50MzJfdClzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CisgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMtPmdpZCA9PSAwICYmICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSAmJgorICAgICAgICAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNoZ3JwIGdpZCBub3QgYSBudW1iZXIiKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3NoYy0+cXVvdGVfYXR0cnMtPmZsYWdzIHw9IFNTSF9GSUxFWEZFUl9BVFRSX1VJREdJRDsKKyAgfQorICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCIsIDUpKSB7CisgICAgbW9kZV90IHBlcm1zOworICAgIHBlcm1zID0gKG1vZGVfdClzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCA4KTsKKyAgICAvKiBwZXJtaXNzaW9ucyBhcmUgb2N0YWwgKi8KKyAgICBpZihwZXJtcyA9PSAwICYmICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSkgeworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNobW9kIHBlcm1pc3Npb25zIG5vdCBhIG51bWJlciIpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzc2hjLT5xdW90ZV9hdHRycy0+cGVybWlzc2lvbnMgPSBwZXJtczsKKyAgICBzc2hjLT5xdW90ZV9hdHRycy0+ZmxhZ3MgfD0gU1NIX0ZJTEVYRkVSX0FUVFJfUEVSTUlTU0lPTlM7CisgIH0KKyAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24iLCA1KSkgeworICAgIHNzaGMtPnF1b3RlX2F0dHJzLT51aWQgPSAodWludDMyX3Qpc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgMTApOworICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLT51aWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKKyAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaG93biB1aWQgbm90IGEgbnVtYmVyIik7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHNzaGMtPnF1b3RlX2F0dHJzLT5mbGFncyB8PSBTU0hfRklMRVhGRVJfQVRUUl9VSURHSUQ7CisgIH0KKworICAvKiBOb3cgc2VuZCB0aGUgY29tcGxldGVkIHN0cnVjdHVyZS4uLiAqLworICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUKTsKKyAgcmV0dXJuOworfQorCitDVVJMY29kZSBDdXJsX3NzaF9pbml0KHZvaWQpCit7CisgIGlmKHNzaF9pbml0KCkpIHsKKyAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogbGlic3NoX2luaXQgZmFpbGVkXG4iKSk7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKwordm9pZCBDdXJsX3NzaF9jbGVhbnVwKHZvaWQpCit7CisgICh2b2lkKXNzaF9maW5hbGl6ZSgpOworfQorCitzaXplX3QgQ3VybF9zc2hfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4pCit7CisgIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBidWZsZW4sICJsaWJzc2gvJXMiLCBDVVJMX0xJQlNTSF9WRVJTSU9OKTsKK30KKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0VfTElCU1NIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL2xpYnNzaDIuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvbGlic3NoMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NWFmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL2xpYnNzaDIuYwpAQCAtMCwwICsxLDM0OTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogI2RlZmluZSBDVVJMX0xJQlNTSDJfREVCVUcgKi8KKworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmZGVmIFVTRV9MSUJTU0gyCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgPGxpYnNzaDIuaD4KKyNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KKworI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VVFNOQU1FX0gKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKKyN1bmRlZiBpbl9hZGRyX3QKKyNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaG9zdGlwLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgImVzY2FwZS5oIgorI2luY2x1ZGUgImh0dHAuaCIgLyogZm9yIEhUVFAgcHJveHkgdHVubmVsIHN0dWZmICovCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAic3BlZWRjaGVjay5oIgorI2luY2x1ZGUgImdldGluZm8uaCIKKyNpbmNsdWRlICJzdHJkdXAuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCisjaW5jbHVkZSAidnRscy92dGxzLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInN0cmVycm9yLmgiCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiIC8qIGZvciB0aGUgd2VlayBkYXkgYW5kIG1vbnRoIG5hbWVzICovCisjaW5jbHVkZSAic29ja2FkZHIuaCIgLyogcmVxdWlyZWQgZm9yIEN1cmxfc29ja2FkZHJfc3RvcmFnZSAqLworI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgImN1cmxfcGF0aC5oIgorCisvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA2CisvKiBsaWJzc2gyX3NmdHBfc3RhdHZmcyBhbmQgZnJpZW5kcyB3ZXJlIGFkZGVkIGluIDEuMi42ICovCisjZGVmaW5lIEhBU19TVEFUVkZTX1NVUFBPUlQgMQorI2VuZGlmCisKKyNkZWZpbmUgc2Z0cF9saWJzc2gyX3JlYWxwYXRoKHMscCx0LG0pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpYnNzaDJfc2Z0cF9zeW1saW5rX2V4KChzKSwgKHApLCBjdXJseF91enRvdWkoc3RybGVuKHApKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAodCksIChtKSwgTElCU1NIMl9TRlRQX1JFQUxQQVRIKQorCisvKiBMb2NhbCBmdW5jdGlvbnM6ICovCitzdGF0aWMgY29uc3QgY2hhciAqc2Z0cF9saWJzc2gyX3N0cmVycm9yKHVuc2lnbmVkIGxvbmcgZXJyKTsKK3N0YXRpYyBMSUJTU0gyX0FMTE9DX0ZVTkMobXlfbGlic3NoMl9tYWxsb2MpOworc3RhdGljIExJQlNTSDJfUkVBTExPQ19GVU5DKG15X2xpYnNzaDJfcmVhbGxvYyk7CitzdGF0aWMgTElCU1NIMl9GUkVFX0ZVTkMobXlfbGlic3NoMl9mcmVlKTsKKworc3RhdGljIENVUkxjb2RlIHNzaF9mb3JjZV9rbm93bmhvc3Rfa2V5X3R5cGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKKworc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbik7CisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOworc3RhdGljCitDVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOworc3RhdGljIGludCBzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2spOworc3RhdGljIGludCBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisvKgorICogU0NQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwID0geworICAiU0NQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgc3NoX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBzY3BfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgc2NwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgc3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgc2NwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NDUCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKKworLyoKKyAqIFNGVFAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwID0geworICAiU0ZUUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBzc2hfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgc3NoX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBzZnRwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgc2Z0cF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgc3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgc2Z0cF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NGVFAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKK3N0YXRpYyB2b2lkCitrYmRfY2FsbGJhY2soY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICppbnN0cnVjdGlvbiwKKyAgICAgICAgICAgICBpbnQgaW5zdHJ1Y3Rpb25fbGVuLCBpbnQgbnVtX3Byb21wdHMsCisgICAgICAgICAgICAgY29uc3QgTElCU1NIMl9VU0VSQVVUSF9LQkRJTlRfUFJPTVBUICpwcm9tcHRzLAorICAgICAgICAgICAgIExJQlNTSDJfVVNFUkFVVEhfS0JESU5UX1JFU1BPTlNFICpyZXNwb25zZXMsCisgICAgICAgICAgICAgdm9pZCAqKmFic3RyYWN0KQoreworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSAoc3RydWN0IGNvbm5lY3RkYXRhICopKmFic3RyYWN0OworCisjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCisgIGZwcmludGYoc3RkZXJyLCAibmFtZT0lc1xuIiwgbmFtZSk7CisgIGZwcmludGYoc3RkZXJyLCAibmFtZV9sZW49JWRcbiIsIG5hbWVfbGVuKTsKKyAgZnByaW50ZihzdGRlcnIsICJpbnN0cnVjdGlvbj0lc1xuIiwgaW5zdHJ1Y3Rpb24pOworICBmcHJpbnRmKHN0ZGVyciwgImluc3RydWN0aW9uX2xlbj0lZFxuIiwgaW5zdHJ1Y3Rpb25fbGVuKTsKKyAgZnByaW50ZihzdGRlcnIsICJudW1fcHJvbXB0cz0lZFxuIiwgbnVtX3Byb21wdHMpOworI2Vsc2UKKyAgKHZvaWQpbmFtZTsKKyAgKHZvaWQpbmFtZV9sZW47CisgICh2b2lkKWluc3RydWN0aW9uOworICAodm9pZClpbnN0cnVjdGlvbl9sZW47CisjZW5kaWYgIC8qIENVUkxfTElCU1NIMl9ERUJVRyAqLworICBpZihudW1fcHJvbXB0cyA9PSAxKSB7CisgICAgcmVzcG9uc2VzWzBdLnRleHQgPSBzdHJkdXAoY29ubi0+cGFzc3dkKTsKKyAgICByZXNwb25zZXNbMF0ubGVuZ3RoID0gY3VybHhfdXp0b3VpKHN0cmxlbihjb25uLT5wYXNzd2QpKTsKKyAgfQorICAodm9pZClwcm9tcHRzOworICAodm9pZClhYnN0cmFjdDsKK30gLyoga2JkX2NhbGxiYWNrICovCisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUodW5zaWduZWQgbG9uZyBlcnIpCit7CisgIHN3aXRjaChlcnIpIHsKKyAgICBjYXNlIExJQlNTSDJfRlhfT0s6CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9GSUxFOgorICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX1BBVEg6CisgICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX1BFUk1JU1NJT05fREVOSUVEOgorICAgIGNhc2UgTElCU1NIMl9GWF9XUklURV9QUk9URUNUOgorICAgIGNhc2UgTElCU1NIMl9GWF9MT0NLX0NPTkZsSUNUOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NQQUNFX09OX0ZJTEVTWVNURU06CisgICAgY2FzZSBMSUJTU0gyX0ZYX1FVT1RBX0VYQ0VFREVEOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9ESVNLX0ZVTEw7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRklMRV9BTFJFQURZX0VYSVNUUzoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9FWElTVFM7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRElSX05PVF9FTVBUWToKKyAgICAgIHJldHVybiBDVVJMRV9RVU9URV9FUlJPUjsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBDVVJMRV9TU0g7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoaW50IGVycikKK3sKKyAgc3dpdGNoKGVycikgeworICAgIC8qIE9yZGVyZWQgYnkgb3JkZXIgb2YgYXBwZWFyYW5jZSBpbiBsaWJzc2gyLmggKi8KKyAgICBjYXNlIExJQlNTSDJfRVJST1JfTk9ORToKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKworICAgIC8qIFRoaXMgaXMgdGhlIGVycm9yIHJldHVybmVkIGJ5IGxpYnNzaDJfc2NwX3JlY3YyCisgICAgICogb24gdW5rbm93biBmaWxlICovCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NDUF9QUk9UT0NPTDoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX05PTkU6CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX0FMTE9DOgorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX1NFTkQ6CisgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKworICAgIGNhc2UgTElCU1NIMl9FUlJPUl9IT1NUS0VZX0lOSVQ6CisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX0hPU1RLRVlfU0lHTjoKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOUkVDT0dOSVpFRDoKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOVkVSSUZJRUQ6CisgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX1BBU1NXT1JEX0VYUElSRUQ6CisgICAgICByZXR1cm4gQ1VSTEVfTE9HSU5fREVOSUVEOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NPQ0tFVF9USU1FT1VUOgorICAgIGNhc2UgTElCU1NIMl9FUlJPUl9USU1FT1VUOgorICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKworICAgIGNhc2UgTElCU1NIMl9FUlJPUl9FQUdBSU46CisgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CisgIH0KKworICByZXR1cm4gQ1VSTEVfU1NIOworfQorCitzdGF0aWMgTElCU1NIMl9BTExPQ19GVU5DKG15X2xpYnNzaDJfbWFsbG9jKQoreworICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCisgIHJldHVybiBtYWxsb2MoY291bnQpOworfQorCitzdGF0aWMgTElCU1NIMl9SRUFMTE9DX0ZVTkMobXlfbGlic3NoMl9yZWFsbG9jKQoreworICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCisgIHJldHVybiByZWFsbG9jKHB0ciwgY291bnQpOworfQorCitzdGF0aWMgTElCU1NIMl9GUkVFX0ZVTkMobXlfbGlic3NoMl9mcmVlKQoreworICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCisgIGlmKHB0cikgLyogc3NoMiBhZ2VudCBzb21ldGltZXMgY2FsbCBmcmVlIHdpdGggbnVsbCBwdHIgKi8KKyAgICBmcmVlKHB0cik7Cit9CisKKy8qCisgKiBTU0ggU3RhdGUgbWFjaGluZSByZWxhdGVkIGNvZGUKKyAqLworLyogVGhpcyBpcyB0aGUgT05MWSB3YXkgdG8gY2hhbmdlIFNTSCBzdGF0ZSEgKi8KK3N0YXRpYyB2b2lkIHN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3Noc3RhdGUgbm93c3RhdGUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgLyogZm9yIGRlYnVnIHB1cnBvc2VzICovCisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsKKyAgICAiU1NIX1NUT1AiLAorICAgICJTU0hfSU5JVCIsCisgICAgIlNTSF9TX1NUQVJUVVAiLAorICAgICJTU0hfSE9TVEtFWSIsCisgICAgIlNTSF9BVVRITElTVCIsCisgICAgIlNTSF9BVVRIX1BLRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX1BLRVkiLAorICAgICJTU0hfQVVUSF9QQVNTX0lOSVQiLAorICAgICJTU0hfQVVUSF9QQVNTIiwKKyAgICAiU1NIX0FVVEhfQUdFTlRfSU5JVCIsCisgICAgIlNTSF9BVVRIX0FHRU5UX0xJU1QiLAorICAgICJTU0hfQVVUSF9BR0VOVCIsCisgICAgIlNTSF9BVVRIX0hPU1RfSU5JVCIsCisgICAgIlNTSF9BVVRIX0hPU1QiLAorICAgICJTU0hfQVVUSF9LRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX0tFWSIsCisgICAgIlNTSF9BVVRIX0dTU0FQSSIsCisgICAgIlNTSF9BVVRIX0RPTkUiLAorICAgICJTU0hfU0ZUUF9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBTFBBVEgiLAorICAgICJTU0hfU0ZUUF9RVU9URV9JTklUIiwKKyAgICAiU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9RVU9URSIsCisgICAgIlNTSF9TRlRQX05FWFRfUVVPVEUiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NZTUxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9NS0RJUiIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JFTkFNRSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JNRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfVU5MSU5LIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyIsCisgICAgIlNTSF9TRlRQX0dFVElORk8iLAorICAgICJTU0hfU0ZUUF9GSUxFVElNRSIsCisgICAgIlNTSF9TRlRQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0ZUUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQiLAorICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSUyIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUiIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfTElOSyIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfQk9UVE9NIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9ET05FIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0RPV05MT0FEX1NUQVQiLAorICAgICJTU0hfU0ZUUF9DTE9TRSIsCisgICAgIlNTSF9TRlRQX1NIVVRET1dOIiwKKyAgICAiU1NIX1NDUF9UUkFOU19JTklUIiwKKyAgICAiU1NIX1NDUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQUQiLAorICAgICJTU0hfU0NQX0RPTkUiLAorICAgICJTU0hfU0NQX1NFTkRfRU9GIiwKKyAgICAiU1NIX1NDUF9XQUlUX0VPRiIsCisgICAgIlNTSF9TQ1BfV0FJVF9DTE9TRSIsCisgICAgIlNTSF9TQ1BfQ0hBTk5FTF9GUkVFIiwKKyAgICAiU1NIX1NFU1NJT05fRElTQ09OTkVDVCIsCisgICAgIlNTSF9TRVNTSU9OX0ZSRUUiLAorICAgICJRVUlUIgorICB9OworCisgIC8qIGEgcHJlY2F1dGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpc3RzIGFyZSBpbiBzeW5jICovCisgIERFQlVHQVNTRVJUKHNpemVvZihuYW1lcykvc2l6ZW9mKG5hbWVzWzBdKSA9PSBTU0hfTEFTVCk7CisKKyAgaWYoc3NoYy0+c3RhdGUgIT0gbm93c3RhdGUpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCAiU0ZUUCAlcCBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlc1xuIiwKKyAgICAgICAgICAodm9pZCAqKXNzaGMsIG5hbWVzW3NzaGMtPnN0YXRlXSwgbmFtZXNbbm93c3RhdGVdKTsKKyAgfQorI2VuZGlmCisKKyAgc3NoYy0+c3RhdGUgPSBub3dzdGF0ZTsKK30KKworCisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKK3N0YXRpYyBpbnQgc3Noa2V5Y2FsbGJhY2soc3RydWN0IEN1cmxfZWFzeSAqZWFzeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfa2hrZXkgKmtub3dua2V5LCAvKiBrbm93biAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3VybF9raGtleSAqZm91bmRrZXksIC8qIGZvdW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gY3VybF9raG1hdGNoIG1hdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRwKQoreworICAodm9pZCllYXN5OworICAodm9pZClrbm93bmtleTsKKyAgKHZvaWQpZm91bmRrZXk7CisgICh2b2lkKWNsaWVudHA7CisKKyAgLyogd2Ugb25seSBhbGxvdyBwZXJmZWN0IG1hdGNoZXMsIGFuZCB3ZSByZWplY3QgZXZlcnl0aGluZyBlbHNlICovCisgIHJldHVybiAobWF0Y2ggIT0gQ1VSTEtITUFUQ0hfT0spP0NVUkxLSFNUQVRfUkVKRUNUOkNVUkxLSFNUQVRfRklORTsKK30KKyNlbmRpZgorCisvKgorICogRWFybGllciBsaWJzc2gyIHZlcnNpb25zIGRpZG4ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIHNlZWsgdG8gNjRiaXQgcG9zaXRpb25zCisgKiB3aXRoIDMyYml0IHNpemVfdC4KKyAqLworI2lmZGVmIEhBVkVfTElCU1NIMl9TRlRQX1NFRUs2NAorI2RlZmluZSBTRlRQX1NFRUsoeCx5KSBsaWJzc2gyX3NmdHBfc2VlazY0KHgsIChsaWJzc2gyX3VpbnQ2NF90KXkpCisjZWxzZQorI2RlZmluZSBTRlRQX1NFRUsoeCx5KSBsaWJzc2gyX3NmdHBfc2Vlayh4LCAoc2l6ZV90KXkpCisjZW5kaWYKKworLyoKKyAqIEVhcmxpZXIgbGlic3NoMiB2ZXJzaW9ucyBkaWRuJ3QgZG8gU0NQIHByb3Blcmx5IGJleW9uZCAzMmJpdCBzaXplcyBvbiAzMmJpdAorICogYXJjaGl0ZWN0dXJlcyBzbyB3ZSBjaGVjayBvZiB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uIGlzIHByZXNlbnQuCisgKi8KKyNpZm5kZWYgSEFWRV9MSUJTU0gyX1NDUF9TRU5ENjQKKyNkZWZpbmUgU0NQX1NFTkQoYSxiLGMsZCkgbGlic3NoMl9zY3Bfc2VuZF9leChhLCBiLCAoaW50KShjKSwgKHNpemVfdClkLCAwLCAwKQorI2Vsc2UKKyNkZWZpbmUgU0NQX1NFTkQoYSxiLGMsZCkgbGlic3NoMl9zY3Bfc2VuZDY0KGEsIGIsIChpbnQpKGMpLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaWJzc2gyX3VpbnQ2NF90KWQsIDAsIDApCisjZW5kaWYKKworLyoKKyAqIGxpYnNzaDIgMS4yLjggZml4ZWQgdGhlIHByb2JsZW0gd2l0aCAzMmJpdCBpbnRzIHVzZWQgZm9yIHNvY2tldHMgb24gd2luNjQuCisgKi8KKyNpZmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9IQU5EU0hBS0UKKyNkZWZpbmUgbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAoeCx5KSBsaWJzc2gyX3Nlc3Npb25faGFuZHNoYWtlKHgseSkKKyNlbmRpZgorCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2tub3duaG9zdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKSB7CisgICAgLyogd2UncmUgYXNrZWQgdG8gdmVyaWZ5IHRoZSBob3N0IGFnYWluc3QgYSBmaWxlICovCisgICAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgICAgaW50IHJjOworICAgIGludCBrZXl0eXBlOworICAgIHNpemVfdCBrZXlsZW47CisgICAgY29uc3QgY2hhciAqcmVtb3Rla2V5ID0gbGlic3NoMl9zZXNzaW9uX2hvc3RrZXkoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleWxlbiwgJmtleXR5cGUpOworICAgIGludCBrZXljaGVjayA9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX0ZBSUxVUkU7CisgICAgaW50IGtleWJpdCA9IDA7CisKKyAgICBpZihyZW1vdGVrZXkpIHsKKyAgICAgIC8qCisgICAgICAgKiBBIHN1YmplY3QgdG8gZmlndXJlIG91dCBpcyB3aGF0IGhvc3QgbmFtZSB3ZSBuZWVkIHRvIHBhc3MgaW4gaGVyZS4KKyAgICAgICAqIFdoYXQgaG9zdCBuYW1lIGRvZXMgT3BlblNTSCBzdG9yZSBpbiBpdHMgZmlsZSBpZiBhbiBJRE4gbmFtZSBpcworICAgICAgICogdXNlZD8KKyAgICAgICAqLworICAgICAgc3RydWN0IGxpYnNzaDJfa25vd25ob3N0ICpob3N0OworICAgICAgZW51bSBjdXJsX2tobWF0Y2gga2V5bWF0Y2g7CisgICAgICBjdXJsX3NzaGtleWNhbGxiYWNrIGZ1bmMgPQorICAgICAgICBkYXRhLT5zZXQuc3NoX2tleWZ1bmM/ZGF0YS0+c2V0LnNzaF9rZXlmdW5jOnNzaGtleWNhbGxiYWNrOworICAgICAgc3RydWN0IGN1cmxfa2hrZXkga25vd25rZXk7CisgICAgICBzdHJ1Y3QgY3VybF9raGtleSAqa25vd25rZXlwID0gTlVMTDsKKyAgICAgIHN0cnVjdCBjdXJsX2toa2V5IGZvdW5ka2V5OworCisgICAgICBzd2l0Y2goa2V5dHlwZSkgeworICAgICAgY2FzZSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9SU0E6CisgICAgICAgIGtleWJpdCA9IExJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hSU0E7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9EU1M6CisgICAgICAgIGtleWJpdCA9IExJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hEU1M7CisgICAgICAgIGJyZWFrOworI2lmZGVmIExJQlNTSDJfSE9TVEtFWV9UWVBFX0VDRFNBXzI1NgorICAgICAgY2FzZSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9FQ0RTQV8yNTY6CisgICAgICAgIGtleWJpdCA9IExJQlNTSDJfS05PV05IT1NUX0tFWV9FQ0RTQV8yNTY7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9IT1NUS0VZX1RZUEVfRUNEU0FfMzg0CisgICAgICBjYXNlIExJQlNTSDJfSE9TVEtFWV9UWVBFX0VDRFNBXzM4NDoKKyAgICAgICAga2V5Yml0ID0gTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzM4NDsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBMSUJTU0gyX0hPU1RLRVlfVFlQRV9FQ0RTQV81MjEKKyAgICAgIGNhc2UgTElCU1NIMl9IT1NUS0VZX1RZUEVfRUNEU0FfNTIxOgorICAgICAgICBrZXliaXQgPSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfNTIxOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExJQlNTSDJfSE9TVEtFWV9UWVBFX0VEMjU1MTkKKyAgICAgIGNhc2UgTElCU1NIMl9IT1NUS0VZX1RZUEVfRUQyNTUxOToKKyAgICAgICAga2V5Yml0ID0gTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VEMjU1MTk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICBkZWZhdWx0OgorICAgICAgICBpbmZvZihkYXRhLCAidW5zdXBwb3J0ZWQga2V5IHR5cGUsIGNhbid0IGNoZWNrIGtub3duaG9zdHMhXG4iKTsKKyAgICAgICAga2V5Yml0ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZigha2V5Yml0KQorICAgICAgICAvKiBubyBjaGVjayBtZWFucyBmYWlsdXJlISAqLworICAgICAgICByYyA9IENVUkxLSFNUQVRfUkVKRUNUOworICAgICAgZWxzZSB7CisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9DSEVDS1AKKyAgICAgICAga2V5Y2hlY2sgPSBsaWJzc2gyX2tub3duaG9zdF9jaGVja3Aoc3NoYy0+a2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbm4tPnJlbW90ZV9wb3J0ICE9IFBPUlRfU1NIKT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cmVtb3RlX3BvcnQ6LTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZWtleSwga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9UWVBFX1BMQUlOfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9LRVlFTkNfUkFXfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0KTsKKyNlbHNlCisgICAgICAgIGtleWNoZWNrID0gbGlic3NoMl9rbm93bmhvc3RfY2hlY2soc3NoYy0+a2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZWtleSwga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX1RZUEVfUExBSU58CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfS0VZRU5DX1JBV3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QpOworI2VuZGlmCisKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNTSCBob3N0IGNoZWNrOiAlZCwga2V5OiAlc1xuIiwga2V5Y2hlY2ssCisgICAgICAgICAgICAgIChrZXljaGVjayA8PSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS19NSVNNQVRDSCk/CisgICAgICAgICAgICAgIGhvc3QtPmtleToiPG5vbmU+Iik7CisKKyAgICAgICAgLyogc2V0dXAgJ2tub3dua2V5JyAqLworICAgICAgICBpZihrZXljaGVjayA8PSBMSUJTU0gyX0tOT1dOSE9TVF9DSEVDS19NSVNNQVRDSCkgeworICAgICAgICAgIGtub3dua2V5LmtleSA9IGhvc3QtPmtleTsKKyAgICAgICAgICBrbm93bmtleS5sZW4gPSAwOworICAgICAgICAgIGtub3dua2V5LmtleXR5cGUgPSAoa2V5dHlwZSA9PSBMSUJTU0gyX0hPU1RLRVlfVFlQRV9SU0EpPworICAgICAgICAgICAgQ1VSTEtIVFlQRV9SU0EgOiBDVVJMS0hUWVBFX0RTUzsKKyAgICAgICAgICBrbm93bmtleXAgPSAma25vd25rZXk7CisgICAgICAgIH0KKworICAgICAgICAvKiBzZXR1cCAnZm91bmRrZXknICovCisgICAgICAgIGZvdW5ka2V5LmtleSA9IHJlbW90ZWtleTsKKyAgICAgICAgZm91bmRrZXkubGVuID0ga2V5bGVuOworICAgICAgICBmb3VuZGtleS5rZXl0eXBlID0gKGtleXR5cGUgPT0gTElCU1NIMl9IT1NUS0VZX1RZUEVfUlNBKT8KKyAgICAgICAgICBDVVJMS0hUWVBFX1JTQSA6IENVUkxLSFRZUEVfRFNTOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIGFueSBvZiB0aGUgTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfKiBkZWZpbmVzIGFuZCB0aGUKKyAgICAgICAgICogY3VybF9raG1hdGNoIGVudW0gYXJlIGV2ZXIgbW9kaWZpZWQsIHdlIG5lZWQgdG8gaW50cm9kdWNlIGEKKyAgICAgICAgICogdHJhbnNsYXRpb24gdGFibGUgaGVyZSEKKyAgICAgICAgICovCisgICAgICAgIGtleW1hdGNoID0gKGVudW0gY3VybF9raG1hdGNoKWtleWNoZWNrOworCisgICAgICAgIC8qIEFzayB0aGUgY2FsbGJhY2sgaG93IHRvIGJlaGF2ZSAqLworICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgcmMgPSBmdW5jKGRhdGEsIGtub3dua2V5cCwgLyogZnJvbSB0aGUga25vd25ob3N0cyBmaWxlICovCisgICAgICAgICAgICAgICAgICAmZm91bmRrZXksIC8qIGZyb20gdGhlIHJlbW90ZSBob3N0ICovCisgICAgICAgICAgICAgICAgICBrZXltYXRjaCwgZGF0YS0+c2V0LnNzaF9rZXlmdW5jX3VzZXJwKTsKKyAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgZmFsc2UpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICAvKiBubyByZW1vdGVrZXkgbWVhbnMgZmFpbHVyZSEgKi8KKyAgICAgIHJjID0gQ1VSTEtIU1RBVF9SRUpFQ1Q7CisKKyAgICBzd2l0Y2gocmMpIHsKKyAgICBkZWZhdWx0OiAvKiB1bmtub3duIHJldHVybiBjb2RlcyB3aWxsIGVxdWFsIHJlamVjdCAqLworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIENVUkxLSFNUQVRfUkVKRUNUOgorICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgQ1VSTEtIU1RBVF9ERUZFUjoKKyAgICAgIC8qIERFRkVSIG1lYW5zIGJhaWwgb3V0IGJ1dCBrZWVwIHRoZSBTU0hfSE9TVEtFWSBzdGF0ZSAqLworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTEtIU1RBVF9GSU5FOgorICAgIGNhc2UgQ1VSTEtIU1RBVF9GSU5FX0FERF9UT19GSUxFOgorICAgICAgLyogcHJvY2VlZCAqLworICAgICAgaWYoa2V5Y2hlY2sgIT0gTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfTUFUQ0gpIHsKKyAgICAgICAgLyogdGhlIGZvdW5kIGhvc3Qra2V5IGRpZG4ndCBtYXRjaCBidXQgaGFzIGJlZW4gdG9sZCB0byBiZSBmaW5lCisgICAgICAgICAgIGFueXdheSBzbyB3ZSBhZGQgaXQgaW4gbWVtb3J5ICovCisgICAgICAgIGludCBhZGRyYyA9IGxpYnNzaDJfa25vd25ob3N0X2FkZChzc2hjLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZWtleSwga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfVFlQRV9QTEFJTnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0tFWUVOQ19SQVd8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaXQsIE5VTEwpOworICAgICAgICBpZihhZGRyYykKKyAgICAgICAgICBpbmZvZihkYXRhLCAiV2FybmluZyBhZGRpbmcgdGhlIGtub3duIGhvc3QgJXMgZmFpbGVkIVxuIiwKKyAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUpOworICAgICAgICBlbHNlIGlmKHJjID09IENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRSkgeworICAgICAgICAgIC8qIG5vdyB3ZSB3cml0ZSB0aGUgZW50aXJlIGluLW1lbW9yeSBsaXN0IG9mIGtub3duIGhvc3RzIHRvIHRoZQorICAgICAgICAgICAgIGtub3duX2hvc3RzIGZpbGUgKi8KKyAgICAgICAgICBpbnQgd3JjID0KKyAgICAgICAgICAgIGxpYnNzaDJfa25vd25ob3N0X3dyaXRlZmlsZShzc2hjLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfRklMRV9PUEVOU1NIKTsKKyAgICAgICAgICBpZih3cmMpIHsKKyAgICAgICAgICAgIGluZm9mKGRhdGEsICJXYXJuaW5nLCB3cml0aW5nICVzIGZhaWxlZCFcbiIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisjZWxzZSAvKiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSAqLworICAodm9pZCljb25uOworI2VuZGlmCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBzc2hfY2hlY2tfZmluZ2VycHJpbnQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGNvbnN0IGNoYXIgKnB1YmtleV9tZDUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV07CisgIGNoYXIgbWQ1YnVmZmVyWzMzXTsKKworICBjb25zdCBjaGFyICpmaW5nZXJwcmludCA9IGxpYnNzaDJfaG9zdGtleV9oYXNoKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgTElCU1NIMl9IT1NUS0VZX0hBU0hfTUQ1KTsKKworICBpZihmaW5nZXJwcmludCkgeworICAgIC8qIFRoZSBmaW5nZXJwcmludCBwb2ludHMgdG8gc3RhdGljIHN0b3JhZ2UgKCEpLCBkb24ndCBmcmVlKCkgaXQuICovCisgICAgaW50IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICAgIG1zbnByaW50ZigmbWQ1YnVmZmVyW2kqMl0sIDMsICIlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpIGZpbmdlcnByaW50W2ldKTsKKyAgICBpbmZvZihkYXRhLCAiU1NIIE1ENSBmaW5nZXJwcmludDogJXNcbiIsIG1kNWJ1ZmZlcik7CisgIH0KKworICAvKiBCZWZvcmUgd2UgYXV0aGVudGljYXRlIHdlIGNoZWNrIHRoZSBob3N0a2V5J3MgTUQ1IGZpbmdlcnByaW50CisgICAqIGFnYWluc3QgYSBrbm93biBmaW5nZXJwcmludCwgaWYgYXZhaWxhYmxlLgorICAgKi8KKyAgaWYocHVia2V5X21kNSAmJiBzdHJsZW4ocHVia2V5X21kNSkgPT0gMzIpIHsKKyAgICBpZighZmluZ2VycHJpbnQgfHwgIXN0cmNhc2Vjb21wYXJlKG1kNWJ1ZmZlciwgcHVia2V5X21kNSkpIHsKKyAgICAgIGlmKGZpbmdlcnByaW50KQorICAgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkRlbmllZCBlc3RhYmxpc2hpbmcgc3NoIHNlc3Npb246IG1pc21hdGNoIG1kNSBmaW5nZXJwcmludC4gIgorICAgICAgICAgICAgIlJlbW90ZSAlcyBpcyBub3QgZXF1YWwgdG8gJXMiLCBtZDVidWZmZXIsIHB1YmtleV9tZDUpOworICAgICAgZWxzZQorICAgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkRlbmllZCBlc3RhYmxpc2hpbmcgc3NoIHNlc3Npb246IG1kNSBmaW5nZXJwcmludCBub3QgYXZhaWxhYmxlIik7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgICAgICByZXR1cm4gc3NoYy0+YWN0dWFsY29kZTsKKyAgICB9CisgICAgaW5mb2YoZGF0YSwgIk1ENSBjaGVja3N1bSBtYXRjaCFcbiIpOworICAgIC8qIGFzIHdlIGFscmVhZHkgbWF0Y2hlZCwgd2Ugc2tpcCB0aGUgY2hlY2sgZm9yIGtub3duIGhvc3RzICovCisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisgIHJldHVybiBzc2hfa25vd25ob3N0KGNvbm4pOworfQorCisvKgorICogc3NoX2ZvcmNlX2tub3duaG9zdF9rZXlfdHlwZSgpIHdpbGwgY2hlY2sgdGhlIGtub3duIGhvc3RzIGZpbGUgYW5kIHRyeSB0bworICogZm9yY2UgYSBzcGVjaWZpYyBwdWJsaWMga2V5IHR5cGUgZnJvbSB0aGUgc2VydmVyIGlmIGFuIGVudHJ5IGlzIGZvdW5kLgorICovCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2ZvcmNlX2tub3duaG9zdF9rZXlfdHlwZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKworI2lmZGVmIExJQlNTSDJfS05PV05IT1NUX0tFWV9FRDI1NTE5CisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGtleV9tZXRob2Rfc3NoX2VkMjU1MTkKKyAgICA9ICJzc2gtZWQyNTUxOSI7CisjZW5kaWYKKyNpZmRlZiBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfNTIxCisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGtleV9tZXRob2Rfc3NoX2VjZHNhXzUyMQorICAgID0gImVjZHNhLXNoYTItbmlzdHA1MjEiOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzM4NAorICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RrZXlfbWV0aG9kX3NzaF9lY2RzYV8zODQKKyAgICA9ICJlY2RzYS1zaGEyLW5pc3RwMzg0IjsKKyNlbmRpZgorI2lmZGVmIExJQlNTSDJfS05PV05IT1NUX0tFWV9FQ0RTQV8yNTYKKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0a2V5X21ldGhvZF9zc2hfZWNkc2FfMjU2CisgICAgPSAiZWNkc2Etc2hhMi1uaXN0cDI1NiI7CisjZW5kaWYKKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0a2V5X21ldGhvZF9zc2hfcnNhCisgICAgPSAic3NoLXJzYSI7CisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGtleV9tZXRob2Rfc3NoX2RzcworICAgID0gInNzaC1kc3MiOworCisgIGNvbnN0IGNoYXIgKmhvc3RrZXlfbWV0aG9kID0gTlVMTDsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgbGlic3NoMl9rbm93bmhvc3QqIHN0b3JlID0gTlVMTDsKKyAgY29uc3QgY2hhciAqa2hfbmFtZV9lbmQgPSBOVUxMOworICBzaXplX3Qga2hfbmFtZV9zaXplID0gMDsKKyAgaW50IHBvcnQgPSAwOworICBib29sIGZvdW5kID0gZmFsc2U7CisKKyAgaWYoc3NoYy0+a2ggJiYgIWRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XSkgeworICAgIC8qIGxldHMgdHJ5IHRvIGZpbmQgb3VyIGhvc3QgaW4gdGhlIGtub3duIGhvc3RzIGZpbGUgKi8KKyAgICB3aGlsZSghbGlic3NoMl9rbm93bmhvc3RfZ2V0KHNzaGMtPmtoLCAmc3RvcmUsIHN0b3JlKSkgeworICAgICAgLyogRm9yIG5vbi1zdGFuZGFyZCBwb3J0cywgdGhlIG5hbWUgd2lsbCBiZSBlbmNsb3NlZCBpbiAqLworICAgICAgLyogc3F1YXJlIGJyYWNrZXRzLCBmb2xsb3dlZCBieSBhIGNvbG9uIGFuZCB0aGUgcG9ydCAqLworICAgICAgaWYoc3RvcmUpIHsKKyAgICAgICAgaWYoc3RvcmUtPm5hbWUpIHsKKyAgICAgICAgICBpZihzdG9yZS0+bmFtZVswXSA9PSAnWycpIHsKKyAgICAgICAgICAgIGtoX25hbWVfZW5kID0gc3Ryc3RyKHN0b3JlLT5uYW1lLCAiXToiKTsKKyAgICAgICAgICAgIGlmKCFraF9uYW1lX2VuZCkgeworICAgICAgICAgICAgICBpbmZvZihkYXRhLCAiSW52YWxpZCBob3N0IHBhdHRlcm4gJXMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHN0b3JlLT5uYW1lLCBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcnQgPSBhdG9pKGtoX25hbWVfZW5kICsgMik7CisgICAgICAgICAgICBpZihraF9uYW1lX2VuZCAmJiAocG9ydCA9PSBjb25uLT5yZW1vdGVfcG9ydCkpIHsKKyAgICAgICAgICAgICAga2hfbmFtZV9zaXplID0gc3RybGVuKHN0b3JlLT5uYW1lKSAtIDEgLSBzdHJsZW4oa2hfbmFtZV9lbmQpOworICAgICAgICAgICAgICBpZihzdHJuY21wKHN0b3JlLT5uYW1lICsgMSwKKyAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBraF9uYW1lX3NpemUpID09IDApIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihzdHJjbXAoc3RvcmUtPm5hbWUsIGNvbm4tPmhvc3QubmFtZSkgPT0gMCkgeworICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGlmKGZvdW5kKSB7CisgICAgICBpbmZvZihkYXRhLCAiRm91bmQgaG9zdCAlcyBpbiAlc1xuIiwKKyAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKKworICAgICAgc3dpdGNoKHN0b3JlLT50eXBlbWFzayAmIExJQlNTSDJfS05PV05IT1NUX0tFWV9NQVNLKSB7CisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VEMjU1MTkKKyAgICAgIGNhc2UgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VEMjU1MTk6CisgICAgICAgIGhvc3RrZXlfbWV0aG9kID0gaG9zdGtleV9tZXRob2Rfc3NoX2VkMjU1MTk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzUyMQorICAgICAgY2FzZSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfNTIxOgorICAgICAgICBob3N0a2V5X21ldGhvZCA9IGhvc3RrZXlfbWV0aG9kX3NzaF9lY2RzYV81MjE7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzM4NAorICAgICAgY2FzZSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfMzg0OgorICAgICAgICBob3N0a2V5X21ldGhvZCA9IGhvc3RrZXlfbWV0aG9kX3NzaF9lY2RzYV8zODQ7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgTElCU1NIMl9LTk9XTkhPU1RfS0VZX0VDRFNBXzI1NgorICAgICAgY2FzZSBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfRUNEU0FfMjU2OgorICAgICAgICBob3N0a2V5X21ldGhvZCA9IGhvc3RrZXlfbWV0aG9kX3NzaF9lY2RzYV8yNTY7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICBjYXNlIExJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hSU0E6CisgICAgICAgIGhvc3RrZXlfbWV0aG9kID0gaG9zdGtleV9tZXRob2Rfc3NoX3JzYTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIExJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hEU1M6CisgICAgICAgIGhvc3RrZXlfbWV0aG9kID0gaG9zdGtleV9tZXRob2Rfc3NoX2RzczsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIExJQlNTSDJfS05PV05IT1NUX0tFWV9SU0ExOgorICAgICAgICBmYWlsZihkYXRhLCAiRm91bmQgaG9zdCBrZXkgdHlwZSBSU0ExIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NIOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZmFpbGYoZGF0YSwgIlVua25vd24gaG9zdCBrZXkgdHlwZTogJWlcbiIsCisgICAgICAgICAgICAgIChzdG9yZS0+dHlwZW1hc2sgJiBMSUJTU0gyX0tOT1dOSE9TVF9LRVlfTUFTSykpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NIOworICAgICAgfQorCisgICAgICBpbmZvZihkYXRhLCAiU2V0IFwiJXNcIiBhcyBTU0ggaG9zdGtleSB0eXBlXG4iLCBob3N0a2V5X21ldGhvZCk7CisgICAgICByZXN1bHQgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoCisgICAgICAgICAgbGlic3NoMl9zZXNzaW9uX21ldGhvZF9wcmVmKAorICAgICAgICAgICAgICBzc2hjLT5zc2hfc2Vzc2lvbiwgTElCU1NIMl9NRVRIT0RfSE9TVEtFWSwgaG9zdGtleV9tZXRob2QpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpbmZvZihkYXRhLCAiRGlkIG5vdCBmaW5kIGhvc3QgJXMgaW4gJXNcbiIsCisgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSk7CisgICAgfQorICB9CisKKyNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSAqLworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBzc2hfc3RhdGVtYWNoX2FjdCgpIHJ1bnMgdGhlIFNTSCBzdGF0ZSBtYWNoaW5lIGFzIGZhciBhcyBpdCBjYW4gd2l0aG91dAorICogYmxvY2tpbmcgYW5kIHdpdGhvdXQgcmVhY2hpbmcgdGhlIGVuZC4gIFRoZSBkYXRhIHRoZSBwb2ludGVyICdibG9jaycgcG9pbnRzCisgKiB0byB3aWxsIGJlIHNldCB0byBUUlVFIGlmIHRoZSBsaWJzc2gyIGZ1bmN0aW9uIHJldHVybnMgTElCU1NIMl9FUlJPUl9FQUdBSU4KKyAqIG1lYW5pbmcgaXQgd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkeQorICovCisKK3N0YXRpYyBDVVJMY29kZSBzc2hfc3RhdGVtYWNoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmJsb2NrKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBTU0hQUk9UTyAqc2Z0cF9zY3AgPSBkYXRhLT5yZXEucHJvdG9wOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIGludCByYyA9IExJQlNTSDJfRVJST1JfTk9ORTsKKyAgaW50IHNzaGVycjsKKyAgdW5zaWduZWQgbG9uZyBzZnRwZXJyOworICBpbnQgc2Vla2VyciA9IENVUkxfU0VFS0ZVTkNfT0s7CisgIHNpemVfdCByZWFkZGlyX2xlbjsKKyAgKmJsb2NrID0gMDsgLyogd2UncmUgbm90IGJsb2NraW5nIGJ5IGRlZmF1bHQgKi8KKworICBkbyB7CisKKyAgICBzd2l0Y2goc3NoYy0+c3RhdGUpIHsKKyAgICBjYXNlIFNTSF9JTklUOgorICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7CisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7CisKKyAgICAgIC8qIFNldCBsaWJzc2gyIHRvIG5vbi1ibG9ja2luZywgc2luY2UgZXZlcnl0aGluZyBpbnRlcm5hbGx5IGlzCisgICAgICAgICBub24tYmxvY2tpbmcgKi8KKyAgICAgIGxpYnNzaDJfc2Vzc2lvbl9zZXRfYmxvY2tpbmcoc3NoYy0+c3NoX3Nlc3Npb24sIDApOworCisgICAgICByZXN1bHQgPSBzc2hfZm9yY2Vfa25vd25ob3N0X2tleV90eXBlKGNvbm4pOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NfU1RBUlRVUCk7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworCisgICAgY2FzZSBTU0hfU19TVEFSVFVQOgorICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cChzc2hjLT5zc2hfc2Vzc2lvbiwgKGludClzb2NrKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMpIHsKKyAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLCAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogJWQsICVzIiwgcmMsIGVycl9tc2cpOworCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzdGF0ZShjb25uLCBTU0hfSE9TVEtFWSk7CisKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfSE9TVEtFWToKKyAgICAgIC8qCisgICAgICAgKiBCZWZvcmUgd2UgYXV0aGVudGljYXRlIHdlIHNob3VsZCBjaGVjayB0aGUgaG9zdGtleSdzIGZpbmdlcnByaW50CisgICAgICAgKiBhZ2FpbnN0IG91ciBrbm93biBob3N0cy4gSG93IHRoYXQgaXMgaGFuZGxlZCAocmVhZGluZyBmcm9tIGZpbGUsCisgICAgICAgKiB3aGF0ZXZlcikgaXMgdXAgdG8gdXMuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdCA9IHNzaF9jaGVja19maW5nZXJwcmludChjb25uKTsKKyAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRITElTVCk7CisgICAgICAvKiBzc2hfY2hlY2tfZmluZ2VycHJpbnQgc2V0cyBzdGF0ZSBhcHByb3ByaWF0ZWx5IG9uIGVycm9yICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhMSVNUOgorICAgICAgLyoKKyAgICAgICAqIEZpZ3VyZSBvdXQgYXV0aGVudGljYXRpb24gbWV0aG9kcworICAgICAgICogTkI6IEFzIHNvb24gYXMgd2UgaGF2ZSBwcm92aWRlZCBhIHVzZXJuYW1lIHRvIGFuIG9wZW5zc2ggc2VydmVyIHdlCisgICAgICAgKiBtdXN0IG5ldmVyIGNoYW5nZSBpdCBsYXRlci4gVGh1cywgYWx3YXlzIHNwZWNpZnkgdGhlIGNvcnJlY3QgdXNlcm5hbWUKKyAgICAgICAqIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBsaWJzc2gyIGRvY3Mga2luZCBvZiBpbmRpY2F0ZSB0aGF0IGl0IHNob3VsZCBiZQorICAgICAgICogcG9zc2libGUgdG8gZ2V0IGEgJ2dlbmVyaWMnIGxpc3QgKG5vdCB1c2VyLXNwZWNpZmljKSBvZiBhdXRoZW50aWNhdGlvbgorICAgICAgICogbWV0aG9kcywgcHJlc3VtYWJseSB3aXRoIGEgYmxhbmsgdXNlcm5hbWUuIFRoYXQgd29uJ3Qgd29yayBpbiBteQorICAgICAgICogZXhwZXJpZW5jZS4KKyAgICAgICAqIFNvIGFsd2F5cyBzcGVjaWZ5IGl0IGhlcmUuCisgICAgICAgKi8KKyAgICAgIHNzaGMtPmF1dGhsaXN0ID0gbGlic3NoMl91c2VyYXV0aF9saXN0KHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpKTsKKworICAgICAgaWYoIXNzaGMtPmF1dGhsaXN0KSB7CisgICAgICAgIGlmKGxpYnNzaDJfdXNlcmF1dGhfYXV0aGVudGljYXRlZChzc2hjLT5zc2hfc2Vzc2lvbikpIHsKKyAgICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICAgIGluZm9mKGRhdGEsICJTU0ggdXNlciBhY2NlcHRlZCB3aXRoIG5vIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzc2hlcnIgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGlmKHNzaGVyciA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKHNzaGVycik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpbmZvZihkYXRhLCAiU1NIIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYXZhaWxhYmxlOiAlc1xuIiwKKyAgICAgICAgICAgIHNzaGMtPmF1dGhsaXN0KTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEtFWV9JTklUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QS0VZX0lOSVQ6CisgICAgICAvKgorICAgICAgICogQ2hlY2sgdGhlIHN1cHBvcnRlZCBhdXRoIHR5cGVzIGluIHRoZSBvcmRlciBJIGZlZWwgaXMgbW9zdCBzZWN1cmUKKyAgICAgICAqIHdpdGggdGhlIHJlcXVlc3RlZCB0eXBlIG9mIGF1dGhlbnRpY2F0aW9uCisgICAgICAgKi8KKyAgICAgIHNzaGMtPmF1dGhlZCA9IEZBTFNFOworCisgICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BVQkxJQ0tFWSkgJiYKKyAgICAgICAgIChzdHJzdHIoc3NoYy0+YXV0aGxpc3QsICJwdWJsaWNrZXkiKSAhPSBOVUxMKSkgeworICAgICAgICBib29sIG91dF9vZl9tZW1vcnkgPSBGQUxTRTsKKworICAgICAgICBzc2hjLT5yc2FfcHViID0gc3NoYy0+cnNhID0gTlVMTDsKKworICAgICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKQorICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cChkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFJJVkFURV9LRVldKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogVG8gcG9uZGVyIGFib3V0OiBzaG91bGQgcmVhbGx5IHRoZSBsaWIgYmUgbWVzc2luZyBhYm91dCB3aXRoIHRoZQorICAgICAgICAgICAgIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgZXRjPyAqLworICAgICAgICAgIGNoYXIgKmhvbWUgPSBjdXJsX2dldGVudigiSE9NRSIpOworCisgICAgICAgICAgLyogSWYgbm8gcHJpdmF0ZSBrZXkgZmlsZSBpcyBzcGVjaWZpZWQsIHRyeSBzb21lIGNvbW1vbiBwYXRocy4gKi8KKyAgICAgICAgICBpZihob21lKSB7CisgICAgICAgICAgICAvKiBUcnkgfi8uc3NoIGZpcnN0LiAqLworICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9yc2EiLCBob21lKTsKKyAgICAgICAgICAgIGlmKCFzc2hjLT5yc2EpCisgICAgICAgICAgICAgIG91dF9vZl9tZW1vcnkgPSBUUlVFOworICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKKyAgICAgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9kc2EiLCBob21lKTsKKyAgICAgICAgICAgICAgaWYoIXNzaGMtPnJzYSkKKyAgICAgICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKKyAgICAgICAgICAgICAgZWxzZSBpZihhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmVlKGhvbWUpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZighb3V0X29mX21lbW9yeSAmJiAhc3NoYy0+cnNhKSB7CisgICAgICAgICAgICAvKiBOb3RoaW5nIGZvdW5kOyB0cnkgdGhlIGN1cnJlbnQgZGlyLiAqLworICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9yc2EiKTsKKyAgICAgICAgICAgIGlmKHNzaGMtPnJzYSAmJiBhY2Nlc3Moc3NoYy0+cnNhLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhKTsKKyAgICAgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9kc2EiKTsKKyAgICAgICAgICAgICAgaWYoc3NoYy0+cnNhICYmIGFjY2Vzcyhzc2hjLT5yc2EsIFJfT0spICE9IDApIHsKKyAgICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisgICAgICAgICAgICAgICAgLyogT3V0IG9mIGd1ZXNzZXMuIFNldCB0byB0aGUgZW1wdHkgc3RyaW5nIHRvIGF2b2lkCisgICAgICAgICAgICAgICAgICogc3VycHJpc2luZyBpbmZvIG1lc3NhZ2VzLiAqLworICAgICAgICAgICAgICAgIHNzaGMtPnJzYSA9IHN0cmR1cCgiIik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBVbmxlc3MgdGhlIHVzZXIgZXhwbGljaXRseSBzcGVjaWZpZXMgYSBwdWJsaWMga2V5IGZpbGUsIGxldAorICAgICAgICAgKiBsaWJzc2gyIGV4dHJhY3QgdGhlIHB1YmxpYyBrZXkgZnJvbSB0aGUgcHJpdmF0ZSBrZXkgZmlsZS4KKyAgICAgICAgICogVGhpcyBpcyBkb25lIGJ5IHNpbXBseSBwYXNzaW5nIHNzaGMtPnJzYV9wdWIgPSBOVUxMLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldCisgICAgICAgICAgIC8qIHRyZWF0IGVtcHR5IHN0cmluZyB0aGUgc2FtZSB3YXkgYXMgTlVMTCAqLworICAgICAgICAgICAmJiBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV1bMF0pIHsKKyAgICAgICAgICBzc2hjLT5yc2FfcHViID0gc3RyZHVwKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QVUJMSUNfS0VZXSk7CisgICAgICAgICAgaWYoIXNzaGMtPnJzYV9wdWIpCisgICAgICAgICAgICBvdXRfb2ZfbWVtb3J5ID0gVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKG91dF9vZl9tZW1vcnkgfHwgc3NoYy0+cnNhID09IE5VTEwpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2Q7CisgICAgICAgIGlmKCFzc2hjLT5wYXNzcGhyYXNlKQorICAgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSAiIjsKKworICAgICAgICBpZihzc2hjLT5yc2FfcHViKQorICAgICAgICAgIGluZm9mKGRhdGEsICJVc2luZyBTU0ggcHVibGljIGtleSBmaWxlICclcydcbiIsIHNzaGMtPnJzYV9wdWIpOworICAgICAgICBpbmZvZihkYXRhLCAiVXNpbmcgU1NIIHByaXZhdGUga2V5IGZpbGUgJyVzJ1xuIiwgc3NoYy0+cnNhKTsKKworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QQVNTX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX1BLRVk6CisgICAgICAvKiBUaGUgZnVuY3Rpb24gYmVsb3cgY2hlY2tzIGlmIHRoZSBmaWxlcyBleGlzdHMsIG5vIG5lZWQgdG8gc3RhdCgpIGhlcmUuCisgICAgICAgKi8KKyAgICAgIHJjID0gbGlic3NoMl91c2VyYXV0aF9wdWJsaWNrZXlfZnJvbWZpbGVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2FfcHViLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yc2EsIHNzaGMtPnBhc3NwaHJhc2UpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhX3B1Yik7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisKKyAgICAgIGlmKHJjID09IDApIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkluaXRpYWxpemVkIFNTSCBwdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgIGluZm9mKGRhdGEsICJTU0ggcHVibGljIGtleSBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6ICVzXG4iLCBlcnJfbXNnKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTU19JTklUKTsKKyAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QQVNTX0lOSVQ6CisgICAgICBpZigoZGF0YS0+c2V0LnNzaF9hdXRoX3R5cGVzICYgQ1VSTFNTSF9BVVRIX1BBU1NXT1JEKSAmJgorICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgInBhc3N3b3JkIikgIT0gTlVMTCkpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfUEFTUyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfSE9TVF9JTklUKTsKKyAgICAgICAgcmMgPSAwOyAvKiBjbGVhciByYyBhbmQgY29udGludWUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9QQVNTOgorICAgICAgcmMgPSBsaWJzc2gyX3VzZXJhdXRoX3Bhc3N3b3JkX2V4KHNzaGMtPnNzaF9zZXNzaW9uLCBjb25uLT51c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnBhc3N3ZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1RfSU5JVCk7CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfSE9TVF9JTklUOgorICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9IT1NUKSAmJgorICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgImhvc3RiYXNlZCIpICE9IE5VTEwpKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1QpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0hPU1Q6CisgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9BR0VOVF9JTklUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9BR0VOVF9JTklUOgorI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfQUdFTlQpCisgICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAicHVibGlja2V5IikgIT0gTlVMTCkpIHsKKworICAgICAgICAvKiBDb25uZWN0IHRvIHRoZSBzc2gtYWdlbnQgKi8KKyAgICAgICAgLyogVGhlIGFnZW50IGNvdWxkIGJlIHNoYXJlZCBieSBhIGN1cmwgdGhyZWFkIGkgYmVsaWV2ZQorICAgICAgICAgICBidXQgbm90aGluZyBvYnZpb3VzIGFzIGtleXMgY2FuIGJlIGFkZGVkL3JlbW92ZWQgYXQgYW55IHRpbWUgKi8KKyAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgeworICAgICAgICAgIHNzaGMtPnNzaF9hZ2VudCA9IGxpYnNzaDJfYWdlbnRfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgICAgaWYoIXNzaGMtPnNzaF9hZ2VudCkgeworICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkNvdWxkIG5vdCBjcmVhdGUgYWdlbnQgb2JqZWN0XG4iKTsKKworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJzc2gyX2FnZW50X2Nvbm5lY3Qoc3NoYy0+c3NoX2FnZW50KTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsdXJlIGNvbm5lY3RpbmcgdG8gYWdlbnRcbiIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsKKyAgICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0FHRU5UX0xJU1QpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgLyogSEFWRV9MSUJTU0gyX0FHRU5UX0FQSSAqLworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfQUdFTlRfTElTVDoKKyNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCisgICAgICByYyA9IGxpYnNzaDJfYWdlbnRfbGlzdF9pZGVudGl0aWVzKHNzaGMtPnNzaF9hZ2VudCk7CisKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKQorICAgICAgICBicmVhazsKKyAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfQUdFTlQpOworICAgICAgICBzc2hjLT5zc2hhZ2VudF9wcmV2X2lkZW50aXR5ID0gTlVMTDsKKyAgICAgIH0KKyNlbmRpZgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0FHRU5UOgorI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIC8qIGFzIHByZXZfaWRlbnRpdHkgZXZvbHZlcyBvbmx5IGFmdGVyIGFuIGlkZW50aXR5IHVzZXIgYXV0aCBmaW5pc2hlZCB3ZQorICAgICAgICAgY2FuIHNhZmVseSByZXF1ZXN0IGl0IGFnYWluIGFzIGxvbmcgYXMgRUFHQUlOIGlzIHJldHVybmVkIGhlcmUgb3IgYnkKKyAgICAgICAgIGxpYnNzaDJfYWdlbnRfdXNlcmF1dGggKi8KKyAgICAgIHJjID0gbGlic3NoMl9hZ2VudF9nZXRfaWRlbnRpdHkoc3NoYy0+c3NoX2FnZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+c3NoYWdlbnRfaWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pCisgICAgICAgIGJyZWFrOworCisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIHJjID0gbGlic3NoMl9hZ2VudF91c2VyYXV0aChzc2hjLT5zc2hfYWdlbnQsIGNvbm4tPnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eSk7CisKKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgaWYocmMgIT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICAgIC8qIHRyaWVkIGFuZCBmYWlsZWQ/IGdvIHRvIG5leHQgaWRlbnRpdHkgKi8KKyAgICAgICAgICAgIHNzaGMtPnNzaGFnZW50X3ByZXZfaWRlbnRpdHkgPSBzc2hjLT5zc2hhZ2VudF9pZGVudGl0eTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYocmMgPCAwKQorICAgICAgICBpbmZvZihkYXRhLCAiRmFpbHVyZSByZXF1ZXN0aW5nIGlkZW50aXRpZXMgdG8gYWdlbnRcbiIpOworICAgICAgZWxzZSBpZihyYyA9PSAxKQorICAgICAgICBpbmZvZihkYXRhLCAiTm8gaWRlbnRpdHkgd291bGQgbWF0Y2hcbiIpOworCisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX05PTkUpIHsKKyAgICAgICAgc3NoYy0+YXV0aGVkID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkFnZW50IGJhc2VkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVlfSU5JVCk7CisgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICB9CisjZW5kaWYKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9LRVlfSU5JVDoKKyAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfS0VZQk9BUkQpCisgICAgICAgICAmJiAoc3Ryc3RyKHNzaGMtPmF1dGhsaXN0LCAia2V5Ym9hcmQtaW50ZXJhY3RpdmUiKSAhPSBOVUxMKSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9LRVkpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0tFWToKKyAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gQ29udGludWUgd2l0aCBrZXlib2FyZC1pbnRlcmFjdGl2ZSBub3cuICovCisgICAgICByYyA9IGxpYnNzaDJfdXNlcmF1dGhfa2V5Ym9hcmRfaW50ZXJhY3RpdmVfZXgoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29ubi0+dXNlcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrYmRfY2FsbGJhY2spOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBrZXlib2FyZCBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9ET05FOgorICAgICAgaWYoIXNzaGMtPmF1dGhlZCkgeworICAgICAgICBmYWlsZihkYXRhLCAiQXV0aGVudGljYXRpb24gZmFpbHVyZSIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gYXV0aGVudGljYXRlZCBzc2ggc2Vzc2lvbi4KKyAgICAgICAqLworICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlXG4iKTsKKworICAgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogU1NIIGlzIGNvbm5lY3RlZCAqLworCisgICAgICBjb25uLT5zb2NrZmQgPSBzb2NrOworICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sID09IENVUkxQUk9UT19TRlRQKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9JTklUOgorICAgICAgLyoKKyAgICAgICAqIFN0YXJ0IHRoZSBsaWJzc2gyIHNmdHAgc2Vzc2lvbgorICAgICAgICovCisgICAgICBzc2hjLT5zZnRwX3Nlc3Npb24gPSBsaWJzc2gyX3NmdHBfaW5pdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZighc3NoYy0+c2Z0cF9zZXNzaW9uKSB7CisgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFMUEFUSCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBTFBBVEg6CisgICAgeworICAgICAgY2hhciB0ZW1wSG9tZVtQQVRIX01BWF07CisKKyAgICAgIC8qCisgICAgICAgKiBHZXQgdGhlICJob21lIiBkaXJlY3RvcnkKKyAgICAgICAqLworICAgICAgcmMgPSBzZnRwX2xpYnNzaDJfcmVhbHBhdGgoc3NoYy0+c2Z0cF9zZXNzaW9uLCAiLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wSG9tZSwgUEFUSF9NQVgtMSk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjID4gMCkgeworICAgICAgICAvKiBJdCBzZWVtcyB0aGF0IHRoaXMgc3RyaW5nIGlzIG5vdCBhbHdheXMgTlVMTCB0ZXJtaW5hdGVkICovCisgICAgICAgIHRlbXBIb21lW3JjXSA9ICdcMCc7CisgICAgICAgIHNzaGMtPmhvbWVkaXIgPSBzdHJkdXAodGVtcEhvbWUpOworICAgICAgICBpZighc3NoYy0+aG9tZWRpcikgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gc3NoYy0+aG9tZWRpcjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBSZXR1cm4gdGhlIGVycm9yIHR5cGUgKi8KKyAgICAgICAgc2Z0cGVyciA9IGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIGlmKHNmdHBlcnIpCisgICAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKHNmdHBlcnIpOworICAgICAgICBlbHNlCisgICAgICAgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgZXJyb3Igd2Fzbid0IGluIHRoZSBTRlRQIGxldmVsIGJ1dCBmb3IgZXhhbXBsZQorICAgICAgICAgICAgIGEgdGltZS1vdXQgb3Igc2ltaWxhciAqLworICAgICAgICAgIHJlc3VsdCA9IENVUkxFX1NTSDsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJlcnJvciA9ICVkIG1ha2VzIGxpYmN1cmwgPSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHNzaGVyciwgKGludClyZXN1bHQpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgLyogVGhpcyBpcyB0aGUgbGFzdCBzdGVwIGluIHRoZSBTRlRQIGNvbm5lY3QgcGhhc2UuIERvIG5vdGUgdGhhdCB3aGlsZQorICAgICAgIHdlIGdldCB0aGUgaG9tZWRpciBoZXJlLCB3ZSBnZXQgdGhlICJ3b3JraW5ncGF0aCIgaW4gdGhlIERPIGFjdGlvbgorICAgICAgIHNpbmNlIHRoZSBob21lZGlyIHdpbGwgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gcmVxdWVzdCBidXQgdGhlCisgICAgICAgd29ya2luZyBwYXRoIHdpbGwgbm90LiAqLworICAgIERFQlVHRihpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIikpOworICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfSU5JVDoKKworICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgeworICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7CisgICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9QT1NUUVVPVEVfSU5JVDoKKyAgICAgIGlmKGRhdGEtPnNldC5wb3N0cXVvdGUpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOworICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnBvc3RxdW90ZTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URToKKyAgICAgIC8qIFNlbmQgYW55IHF1b3RlIGNvbW1hbmRzICovCisgICAgeworICAgICAgY29uc3QgY2hhciAqY3A7CisKKyAgICAgIC8qCisgICAgICAgKiBTdXBwb3J0IHNvbWUgb2YgdGhlICJGVFAiIGNvbW1hbmRzCisgICAgICAgKgorICAgICAgICogJ3NzaGMtPnF1b3RlX2l0ZW0nIGlzIGFscmVhZHkgdmVyaWZpZWQgdG8gYmUgbm9uLU5VTEwgYmVmb3JlIGl0CisgICAgICAgKiBzd2l0Y2hlZCB0byB0aGlzIHN0YXRlLgorICAgICAgICovCisgICAgICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOworICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOworCisgICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCisgICAgICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKKyAgICAgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAorICAgICAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLworCisgICAgICBpZihjbWRbMF0gPT0gJyonKSB7CisgICAgICAgIGNtZCsrOworICAgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoInB3ZCIsIGNtZCkpIHsKKyAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLworICAgICAgICBjaGFyICp0bXAgPSBhcHJpbnRmKCIyNTcgXCIlc1wiIGlzIGN1cnJlbnQgZGlyZWN0b3J5LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZnRwX3NjcC0+cGF0aCk7CisgICAgICAgIGlmKCF0bXApIHsKKyAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKKyAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9PVVQsIChjaGFyICopIlBXRFxuIiwgNCk7CisgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIHRtcCwgc3RybGVuKHRtcCkpOworICAgICAgICB9CisgICAgICAgIC8qIHRoaXMgc2VuZHMgYW4gRlRQLWxpa2UgImhlYWRlciIgdG8gdGhlIGhlYWRlciBjYWxsYmFjayBzbyB0aGF0IHRoZQorICAgICAgICAgICBjdXJyZW50IGRpcmVjdG9yeSBjYW4gYmUgcmVhZCB2ZXJ5IHNpbWlsYXIgdG8gaG93IGl0IGlzIHJlYWQgd2hlbgorICAgICAgICAgICB1c2luZyBvcmRpbmFyeSBGVFAuICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgdG1wLCBzdHJsZW4odG1wKSk7CisgICAgICAgIGZyZWUodG1wKTsKKyAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIHRoZSBhcmd1bWVudHMgZm9sbG93aW5nIHRoZSBjb21tYW5kIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlCisgICAgICAgICAqIGNvbW1hbmQgd2l0aCBhIHNwYWNlIHNvIHdlIGNhbiBjaGVjayBmb3IgaXQgdW5jb25kaXRpb25hbGx5CisgICAgICAgICAqLworICAgICAgICBjcCA9IHN0cmNocihjbWQsICcgJyk7CisgICAgICAgIGlmKGNwID09IE5VTEwpIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGNvbW1hbmQgJyVzJy4gTWlzc2luZyBwYXJhbWV0ZXIhIiwKKyAgICAgICAgICAgICAgICBjbWQpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWxzbywgZXZlcnkgY29tbWFuZCB0YWtlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQgc28gd2UgZ2V0IHRoYXQKKyAgICAgICAgICogZmlyc3QgYXJndW1lbnQgcmlnaHQgbm93CisgICAgICAgICAqLworICAgICAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMSwgc3NoYy0+aG9tZWRpcik7CisgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBCYWQgZmlyc3QgcGFyYW1ldGVyIHRvICclcyciLCBjbWQpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFNGVFAgaXMgYSBiaW5hcnkgcHJvdG9jb2wsIHNvIHdlIGRvbid0IHNlbmQgdGV4dCBjb21tYW5kcworICAgICAgICAgKiB0byB0aGUgc2VydmVyLiBJbnN0ZWFkLCB3ZSBzY2FuIGZvciBjb21tYW5kcyB1c2VkIGJ5CisgICAgICAgICAqIE9wZW5TU0gncyBzZnRwIHByb2dyYW0gYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnNzaDIKKyAgICAgICAgICogZnVuY3Rpb25zLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwICIsIDYpIHx8CisgICAgICAgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCAiLCA2KSB8fAorICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24gIiwgNikgKSB7CisgICAgICAgICAgLyogYXR0cmlidXRlIGNoYW5nZSAqLworCisgICAgICAgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgY29udGFpbnMgdGhlIG1vZGUgdG8gc2V0ICovCisgICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfZ2V0X3BhdGhuYW1lKCZjcCwgJnNzaGMtPnF1b3RlX3BhdGgyLCBzc2hjLT5ob21lZGlyKTsKKyAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiT3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yIGluICVzOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIsIGNtZCk7CisgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgbWVtc2V0KCZzc2hjLT5xdW90ZV9hdHRycywgMCwgc2l6ZW9mKExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTKSk7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1RBVCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImxuICIsIDMpIHx8CisgICAgICAgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJzeW1saW5rICIsIDgpKSB7CisgICAgICAgICAgLyogc3ltYm9saWMgbGlua2luZyAqLworICAgICAgICAgIC8qIHNzaGMtPnF1b3RlX3BhdGgxIGlzIHRoZSBzb3VyY2UgKi8KKyAgICAgICAgICAvKiBnZXQgdGhlIGRlc3RpbmF0aW9uICovCisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9nZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIsIHNzaGMtPmhvbWVkaXIpOworICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICJTeW50YXggZXJyb3IgaW4gbG4vc3ltbGluazogQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJta2RpciAiLCA2KSkgeworICAgICAgICAgIC8qIGNyZWF0ZSBkaXIgKi8KKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9NS0RJUik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicmVuYW1lICIsIDcpKSB7CisgICAgICAgICAgLyogcmVuYW1lIGZpbGUgKi8KKyAgICAgICAgICAvKiBmaXJzdCBwYXJhbSBpcyB0aGUgc291cmNlIHBhdGggKi8KKyAgICAgICAgICAvKiBzZWNvbmQgcGFyYW0gaXMgdGhlIGRlc3QuIHBhdGggKi8KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2dldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMiwgc3NoYy0+aG9tZWRpcik7CisgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiByZW5hbWU6IEJhZCBzZWNvbmQgcGFyYW1ldGVyIik7CisgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfUkVOQU1FKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJybWRpciAiLCA2KSkgeworICAgICAgICAgIC8qIGRlbGV0ZSBkaXIgKi8KKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9STURJUik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAicm0gIiwgMykpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9VTkxJTkspOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWZkZWYgSEFTX1NUQVRWRlNfU1VQUE9SVAorICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJzdGF0dmZzICIsIDgpKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGZhaWxmKGRhdGEsICJVbmtub3duIFNGVFAgY29tbWFuZCIpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfTkVYVF9RVU9URToKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisKKyAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBzc2hjLT5xdW90ZV9pdGVtLT5uZXh0OworCisgICAgICBpZihzc2hjLT5xdW90ZV9pdGVtKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZihzc2hjLT5uZXh0c3RhdGUgIT0gU1NIX05PX1NUQVRFKSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgc3NoYy0+bmV4dHN0YXRlKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfR0VUSU5GTyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TVEFUOgorICAgIHsKKyAgICAgIGNoYXIgKmNtZCA9IHNzaGMtPnF1b3RlX2l0ZW0tPmRhdGE7CisgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gRkFMU0U7CisKKyAgICAgIC8qIGlmIGEgY29tbWFuZCBzdGFydHMgd2l0aCBhbiBhc3Rlcmlzaywgd2hpY2ggYSBsZWdhbCBTRlRQIGNvbW1hbmQgbmV2ZXIKKyAgICAgICAgIGNhbiwgdGhlIGNvbW1hbmQgd2lsbCBiZSBhbGxvd2VkIHRvIGZhaWwgd2l0aG91dCBpdCBjYXVzaW5nIGFueQorICAgICAgICAgYWJvcnRzIG9yIGNhbmNlbHMgZXRjLiBJdCB3aWxsIGNhdXNlIGxpYmN1cmwgdG8gYWN0IGFzIGlmIHRoZSBjb21tYW5kCisgICAgICAgICBpcyBzdWNjZXNzZnVsLCB3aGF0ZXZlciB0aGUgc2VydmVyIHJlcG9uZHMuICovCisKKyAgICAgIGlmKGNtZFswXSA9PSAnKicpIHsKKyAgICAgICAgY21kKys7CisgICAgICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBUUlVFOworICAgICAgfQorCisgICAgICBpZighc3RybmNhc2Vjb21wYXJlKGNtZCwgImNobW9kIiwgNSkpIHsKKyAgICAgICAgLyogU2luY2UgY2hvd24gYW5kIGNoZ3JwIG9ubHkgc2V0IG93bmVyIE9SIGdyb3VwIGJ1dCBsaWJzc2gyIHdhbnRzIHRvCisgICAgICAgICAqIHNldCB0aGVtIGJvdGggYXQgb25jZSwgd2UgbmVlZCB0byBvYnRhaW4gdGhlIGN1cnJlbnQgb3duZXJzaGlwCisgICAgICAgICAqIGZpcnN0LiAgVGhpcyB0YWtlcyBhbiBleHRyYSBwcm90b2NvbCByb3VuZCB0cmlwLgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU1RBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NoYy0+cXVvdGVfYXR0cnMpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsgLyogZ2V0IHRob3NlIGF0dHJpYnV0ZXMgKi8KKyAgICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBnZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3Ioc2Z0cGVycikpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIE5vdyBzZXQgdGhlIG5ldyBhdHRyaWJ1dGVzLi4uICovCisgICAgICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hncnAiLCA1KSkgeworICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5naWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CisgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOworICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy5naWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKKyAgICAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBjaGdycCBnaWQgbm90IGEgbnVtYmVyIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNobW9kIiwgNSkpIHsKKyAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMucGVybWlzc2lvbnMgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCA4KTsKKyAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMuZmxhZ3MgPSBMSUJTU0gyX1NGVFBfQVRUUl9QRVJNSVNTSU9OUzsKKyAgICAgICAgLyogcGVybWlzc2lvbnMgYXJlIG9jdGFsICovCisgICAgICAgIGlmKHNzaGMtPnF1b3RlX2F0dHJzLnBlcm1pc3Npb25zID09IDAgJiYKKyAgICAgICAgICAgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pKSB7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2htb2QgcGVybWlzc2lvbnMgbm90IGEgbnVtYmVyIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNob3duIiwgNSkpIHsKKyAgICAgICAgc3NoYy0+cXVvdGVfYXR0cnMudWlkID0gc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgMTApOworICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5mbGFncyA9IExJQlNTSDJfU0ZUUF9BVFRSX1VJREdJRDsKKyAgICAgICAgaWYoc3NoYy0+cXVvdGVfYXR0cnMudWlkID09IDAgJiYgIUlTRElHSVQoc3NoYy0+cXVvdGVfcGF0aDFbMF0pICYmCisgICAgICAgICAgICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2hvd24gdWlkIG5vdCBhIG51bWJlciIpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIE5vdyBzZW5kIHRoZSBjb21wbGV0ZWQgc3RydWN0dXJlLi4uICovCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TRVRTVEFUKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVDoKKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU0VUU1RBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnF1b3RlX2F0dHJzKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBmYWlsZihkYXRhLCAiQXR0ZW1wdCB0byBzZXQgU0ZUUCBzdGF0cyBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3ltbGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TWU1MSU5LKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBmYWlsZihkYXRhLCAic3ltbGluayBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3Ioc2Z0cGVycikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX01LRElSOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfbWtkaXJfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIGZhaWxmKGRhdGEsICJta2RpciBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3Ioc2Z0cGVycikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1JFTkFNRToKKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX3JlbmFtZV9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1JFTkFNRV9PVkVSV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9SRU5BTUVfQVRPTUlDIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfUkVOQU1FX05BVElWRSk7CisKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBmYWlsZihkYXRhLCAicmVuYW1lIGNvbW1hbmQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihzZnRwZXJyKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUk1ESVI6CisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9ybWRpcl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBzZnRwZXJyID0gbGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIGZhaWxmKGRhdGEsICJybWRpciBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3Ioc2Z0cGVycikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1VOTElOSzoKKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX3VubGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgc2Z0cGVyciA9IGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBmYWlsZihkYXRhLCAicm0gY29tbWFuZCBmYWlsZWQ6ICVzIiwgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgSEFTX1NUQVRWRlNfU1VQUE9SVAorICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUzoKKyAgICB7CisgICAgICBMSUJTU0gyX1NGVFBfU1RBVFZGUyBzdGF0dmZzOworICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdHZmcyhzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dmZzKTsKKworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgInN0YXR2ZnMgY29tbWFuZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IDApIHsKKyAgICAgICAgY2hhciAqdG1wID0gYXByaW50Zigic3RhdHZmczpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ic2l6ZTogJWxsdVxuIiAiZl9mcnNpemU6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9ibG9ja3M6ICVsbHVcbiIgImZfYmZyZWU6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9iYXZhaWw6ICVsbHVcbiIgImZfZmlsZXM6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mZnJlZTogJWxsdVxuIiAiZl9mYXZhaWw6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9mc2lkOiAlbGx1XG4iICJmX2ZsYWc6ICVsbHVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZl9uYW1lbWF4OiAlbGx1XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9ic2l6ZSwgc3RhdHZmcy5mX2Zyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfYmxvY2tzLCBzdGF0dmZzLmZfYmZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX2JhdmFpbCwgc3RhdHZmcy5mX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR2ZnMuZl9mZnJlZSwgc3RhdHZmcy5mX2ZhdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dmZzLmZfZnNpZCwgc3RhdHZmcy5mX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHZmcy5mX25hbWVtYXgpOworICAgICAgICBpZighdG1wKSB7CisgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKKyAgICAgICAgZnJlZSh0bXApOworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBTU0hfU0ZUUF9HRVRJTkZPOgorICAgIHsKKyAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9GSUxFVElNRToKKyAgICB7CisgICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKKworICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TVEFULCAmYXR0cnMpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihyYyA9PSAwKSB7CisgICAgICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSBhdHRycy5tdGltZTsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNTSF9TRlRQX1RSQU5TX0lOSVQ6CisgICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoc2Z0cF9zY3AtPnBhdGhbc3RybGVuKHNmdHBfc2NwLT5wYXRoKS0xXSA9PSAnLycpCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9JTklUKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1VQTE9BRF9JTklUOgorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAvKgorICAgICAgICogTk9URSEhISAgbGlic3NoMiByZXF1aXJlcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgZnVsbCBwYXRoCisgICAgICAgKiAgICAgICAgICB0aGF0IGluY2x1ZGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBuYW1lIE9SIGVuZHMgaW4gYSAiLyIKKyAgICAgICAqICAgICAgICAgIElmIHRoaXMgaXMgbm90IGRvbmUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBuYW1lZCB0aGUKKyAgICAgICAqICAgICAgICAgIHNhbWUgbmFtZSBhcyB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGguCisgICAgICAgKi8KKworICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gIT0gMCkgeworICAgICAgICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyBhdHRyczsKKyAgICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwKSB7CisgICAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3RhdF9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7CisgICAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihyYykgeworICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLmZpbGVzaXplOworICAgICAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikiLCBzaXplKTsKKyAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGF0dHJzLmZpbGVzaXplOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZihkYXRhLT5zZXQuZnRwX2FwcGVuZCkKKyAgICAgICAgLyogVHJ5IHRvIG9wZW4gZm9yIGFwcGVuZCwgYnV0IGNyZWF0ZSBpZiBub25leGlzdGluZyAqLworICAgICAgICBmbGFncyA9IExJQlNTSDJfRlhGX1dSSVRFfExJQlNTSDJfRlhGX0NSRUFUfExJQlNTSDJfRlhGX0FQUEVORDsKKyAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKQorICAgICAgICAvKiBJZiB3ZSBoYXZlIHJlc3RhcnQgcG9zaXRpb24gdGhlbiBvcGVuIGZvciBhcHBlbmQgKi8KKyAgICAgICAgZmxhZ3MgPSBMSUJTU0gyX0ZYRl9XUklURXxMSUJTU0gyX0ZYRl9BUFBFTkQ7CisgICAgICBlbHNlCisgICAgICAgIC8qIENsZWFyIGZpbGUgYmVmb3JlIHdyaXRpbmcgKG5vcm1hbCBiZWhhdmlvdXIpICovCisgICAgICAgIGZsYWdzID0gTElCU1NIMl9GWEZfV1JJVEV8TElCU1NIMl9GWEZfQ1JFQVR8TElCU1NIMl9GWEZfVFJVTkM7CisKKyAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0KKyAgICAgICAgbGlic3NoMl9zZnRwX29wZW5fZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfT1BFTkZJTEUpOworCisgICAgICBpZighc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbik7CisKKyAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9FQUdBSU4gPT0gcmMpCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9TRlRQX1BST1RPQ09MID09IHJjKQorICAgICAgICAgIC8qIG9ubHkgd2hlbiB0aGVyZSB3YXMgYW4gU0ZUUCBwcm90b2NvbCBlcnJvciBjYW4gd2UgZXh0cmFjdAorICAgICAgICAgICAgIHRoZSBzZnRwIGVycm9yISAqLworICAgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgc2Z0cGVyciA9IExJQlNTSDJfRlhfT0s7IC8qIG5vdCBhbiBzZnRwIGVycm9yIGF0IGFsbCAqLworCisgICAgICAgIGlmKHNzaGMtPnNlY29uZENyZWF0ZURpcnMpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHNmdHBlcnIgIT0gTElCU1NIMl9GWF9PSyA/CisgICAgICAgICAgICBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik6Q1VSTEVfU1NIOworICAgICAgICAgIGZhaWxmKGRhdGEsICJDcmVhdGluZyB0aGUgZGlyL2ZpbGUgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZigoKHNmdHBlcnIgPT0gTElCU1NIMl9GWF9OT19TVUNIX0ZJTEUpIHx8CisgICAgICAgICAgICAoc2Z0cGVyciA9PSBMSUJTU0gyX0ZYX0ZBSUxVUkUpIHx8CisgICAgICAgICAgICAoc2Z0cGVyciA9PSBMSUJTU0gyX0ZYX05PX1NVQ0hfUEFUSCkpICYmCisgICAgICAgICAgIChkYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgJiYKKyAgICAgICAgICAgIChzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpID4gMSkpKSB7CisgICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSB0aGUgcGF0aCByZW1vdGVseSAqLworICAgICAgICAgIHJjID0gMDsgLyogY2xlYXIgcmMgYW5kIGNvbnRpbnVlICovCisgICAgICAgICAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDE7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gc2Z0cGVyciAhPSBMSUJTU0gyX0ZYX09LID8KKyAgICAgICAgICBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik6Q1VSTEVfU1NIOworICAgICAgICBpZighc3NoYy0+YWN0dWFsY29kZSkgeworICAgICAgICAgIC8qIFNvbWV0aW1lcywgZm9yIHNvbWUgcmVhc29uIGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKCkgcmV0dXJucyB6ZXJvCisgICAgICAgICAgICAgZXZlbiB0aG91Z2ggbGlic3NoMl9zZnRwX29wZW4oKSBmYWlsZWQgcHJldmlvdXNseSEgV2UgbmVlZCB0bworICAgICAgICAgICAgIHdvcmsgYXJvdW5kIHRoYXQhICovCisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1NTSDsKKyAgICAgICAgICBzZnRwZXJyID0gTElCU1NIMl9GWF9PSzsKKyAgICAgICAgfQorICAgICAgICBmYWlsZihkYXRhLCAiVXBsb2FkIGZhaWxlZDogJXMgKCVkLyVkKSIsCisgICAgICAgICAgICAgIHNmdHBlcnIgIT0gTElCU1NIMl9GWF9PSyA/CisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihzZnRwZXJyKToic3NoIGVycm9yIiwKKyAgICAgICAgICAgICAgc2Z0cGVyciwgcmMpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyogSWYgd2UgaGF2ZSBhIHJlc3RhcnQgcG9pbnQgdGhlbiB3ZSBuZWVkIHRvIHNlZWsgdG8gdGhlIGNvcnJlY3QKKyAgICAgICAgIHBvc2l0aW9uLiAqLworICAgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPiAwKSB7CisgICAgICAgIC8qIExldCdzIHJlYWQgb2ZmIHRoZSBwcm9wZXIgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGlucHV0LiAqLworICAgICAgICBpZihjb25uLT5zZWVrX2Z1bmMpIHsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgICBzZWVrZXJyID0gY29ubi0+c2Vla19mdW5jKGNvbm4tPnNlZWtfY2xpZW50LCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFRUtfU0VUKTsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfT0spIHsKKyAgICAgICAgICBjdXJsX29mZl90IHBhc3NlZCA9IDA7CisKKyAgICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2Vla2VyciA9PSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLIChjYW4ndCBzZWVrIHRvIG9mZnNldCkgKi8KKyAgICAgICAgICBkbyB7CisgICAgICAgICAgICBzaXplX3QgcmVhZHRoaXNhbW91bnRub3cgPQorICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQgPiBkYXRhLT5zZXQuYnVmZmVyX3NpemUpID8KKyAgICAgICAgICAgICAgKHNpemVfdClkYXRhLT5zZXQuYnVmZmVyX3NpemUgOgorICAgICAgICAgICAgICBjdXJseF9zb3RvdXooZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQpOworCisgICAgICAgICAgICBzaXplX3QgYWN0dWFsbHlyZWFkOworICAgICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7CisgICAgICAgICAgICBhY3R1YWxseXJlYWQgPSBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jKGRhdGEtPnN0YXRlLmJ1ZmZlciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHRoaXNhbW91bnRub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluKTsKKyAgICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKKworICAgICAgICAgICAgcGFzc2VkICs9IGFjdHVhbGx5cmVhZDsKKyAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgICAvKiB0aGlzIGNoZWNrcyBmb3IgZ3JlYXRlci10aGFuIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgIENVUkxfUkVBREZVTkNfQUJPUlQgcmV0dXJuIGNvZGUgc3RpbGwgYWJvcnRzICovCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7CisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5vdywgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlYWQgKi8KKyAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKKyAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKKyAgICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgICB9CisKKyAgICAgICAgU0ZUUF9TRUVLKHNzaGMtPnNmdHBfaGFuZGxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICB9CisgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplID4gMCkgeworICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGRhdGEtPnN0YXRlLmluZmlsZXNpemU7CisgICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSk7CisgICAgICB9CisgICAgICAvKiB1cGxvYWQgZGF0YSAqLworICAgICAgQ3VybF9zZXR1cF90cmFuc2ZlcihkYXRhLCAtMSwgLTEsIEZBTFNFLCBGSVJTVFNPQ0tFVCk7CisKKyAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgICAgY29ubi0+c29ja2ZkID0gY29ubi0+d3JpdGVzb2NrZmQ7CisKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RvcmUgdGhpcyBvcmlnaW5hbCBiaXRtYXNrIHNldHVwIHRvIHVzZSBsYXRlciBvbiBpZiB3ZSBjYW4ndAorICAgICAgICAgICBmaWd1cmUgb3V0IGEgInJlYWwiIGJpdG1hc2sgKi8KKyAgICAgICAgc3NoYy0+b3JpZ193YWl0Zm9yID0gZGF0YS0+cmVxLmtlZXBvbjsKKworICAgICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3NlbmRpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICAgIG91dCByZWFkYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHNmdHAgc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7CisKKyAgICAgICAgLyogc2luY2Ugd2UgZG9uJ3QgcmVhbGx5IHdhaXQgZm9yIGFueXRoaW5nIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdGhlCisgICAgICAgICAgIHN0YXRlIG1hY2hpbmUgdG8gbW92ZSBvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIHNldCBhIHZlcnkgc2hvcnQKKyAgICAgICAgICAgdGltZW91dCBoZXJlICovCisgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDAsIEVYUElSRV9SVU5fTk9XKTsKKworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQ6CisgICAgICBpZihzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpID4gMSkgeworICAgICAgICBzc2hjLT5zbGFzaF9wb3MgPSBzZnRwX3NjcC0+cGF0aCArIDE7IC8qIGlnbm9yZSB0aGUgbGVhZGluZyAnLycgKi8KKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSUzoKKyAgICAgIHNzaGMtPnNsYXNoX3BvcyA9IHN0cmNocihzc2hjLT5zbGFzaF9wb3MsICcvJyk7CisgICAgICBpZihzc2hjLT5zbGFzaF9wb3MpIHsKKyAgICAgICAgKnNzaGMtPnNsYXNoX3BvcyA9IDA7CisKKyAgICAgICAgaW5mb2YoZGF0YSwgIkNyZWF0aW5nIGRpcmVjdG9yeSAnJXMnXG4iLCBzZnRwX3NjcC0+cGF0aCk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVI6CisgICAgICAvKiAnbW9kZScgLSBwYXJhbWV0ZXIgaXMgcHJlbGltaW5hcnkgLSBkZWZhdWx0IHRvIDA2NDQgKi8KKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX21rZGlyX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgICpzc2hjLT5zbGFzaF9wb3MgPSAnLyc7CisgICAgICArK3NzaGMtPnNsYXNoX3BvczsKKyAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAvKgorICAgICAgICAgKiBBYm9ydCBpZiBmYWlsdXJlIHdhc24ndCB0aGF0IHRoZSBkaXIgYWxyZWFkeSBleGlzdHMgb3IgdGhlCisgICAgICAgICAqIHBlcm1pc3Npb24gd2FzIGRlbmllZCAoY3JlYXRpb24gbWlnaHQgc3VjY2VlZCBmdXJ0aGVyIGRvd24gdGhlCisgICAgICAgICAqIHBhdGgpIC0gcmV0cnkgb24gdW5zcGVjaWZpYyBGQUlMVVJFIGFsc28KKyAgICAgICAgICovCisgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBpZigoc2Z0cGVyciAhPSBMSUJTU0gyX0ZYX0ZJTEVfQUxSRUFEWV9FWElTVFMpICYmCisgICAgICAgICAgIChzZnRwZXJyICE9IExJQlNTSDJfRlhfRkFJTFVSRSkgJiYKKyAgICAgICAgICAgKHNmdHBlcnIgIT0gTElCU1NIMl9GWF9QRVJNSVNTSU9OX0RFTklFRCkpIHsKKyAgICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByYyA9IDA7IC8qIGNsZWFyIHJjIGFuZCBjb250aW51ZSAqLworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlMpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfSU5JVDoKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGdldCwgc28gcHJvZHVjZSBhIGRpcmVjdG9yeQorICAgICAgICogbGlzdGluZworICAgICAgICovCisgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IGxpYnNzaDJfc2Z0cF9vcGVuX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgTElCU1NIMl9TRlRQX09QRU5ESVIpOworICAgICAgaWYoIXNzaGMtPnNmdHBfaGFuZGxlKSB7CisgICAgICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKSA9PQorICAgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2Z0cGVyciA9IGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbik7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgZm9yIHJlYWRpbmc6ICVzIiwKKyAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICBpZighc3NoYy0+cmVhZGRpcl9maWxlbmFtZSkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICBpZighc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBDdXJsX2R5bl9pbml0KCZzc2hjLT5yZWFkZGlyLCBQQVRIX01BWCAqIDIpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUjoKKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX3JlYWRkaXJfZXgoc3NoYy0+c2Z0cF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9NQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2hjLT5yZWFkZGlyX2F0dHJzKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYocmMgPiAwKSB7CisgICAgICAgIHJlYWRkaXJfbGVuID0gKHNpemVfdCkgcmM7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWVbcmVhZGRpcl9sZW5dID0gJ1wwJzsKKworICAgICAgICBpZihkYXRhLT5zZXQuZnRwX2xpc3Rfb25seSkgeworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZGlyX2xlbik7CisgICAgICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJcbiIsIDEpOworICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIHNpbmNlIHRoaXMgY291bnRzIHdoYXQgd2Ugc2VuZCB0byB0aGUgY2xpZW50LCB3ZSBpbmNsdWRlIHRoZQorICAgICAgICAgICAgIG5ld2xpbmUgaW4gdGhpcyBjb3VudGVyICovCisgICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSByZWFkZGlyX2xlbiArIDE7CisKKyAgICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgICAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKKyAgICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9JTiwgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVhZGRpcl9sZW4pOworICAgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX0lOLCAoY2hhciAqKSJcbiIsIDEpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGQoJnNzaGMtPnJlYWRkaXIsIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKworICAgICAgICAgIGlmKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmKChzc2hjLT5yZWFkZGlyX2F0dHJzLmZsYWdzICYgTElCU1NIMl9TRlRQX0FUVFJfUEVSTUlTU0lPTlMpICYmCisgICAgICAgICAgICAgICAoKHNzaGMtPnJlYWRkaXJfYXR0cnMucGVybWlzc2lvbnMgJiBMSUJTU0gyX1NGVFBfU19JRk1UKSA9PQorICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TX0lGTE5LKSkgeworICAgICAgICAgICAgICBDdXJsX2R5bl9pbml0KCZzc2hjLT5yZWFkZGlyX2xpbmssIFBBVEhfTUFYKTsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9keW5fYWRkKCZzc2hjLT5yZWFkZGlyX2xpbmssIHNmdHBfc2NwLT5wYXRoKTsKKyAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUkVBRERJUl9MSU5LKTsKKyAgICAgICAgICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSAwKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0RPTkUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPCAwKSB7CisgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyA6OiAlZCIsCisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihzZnRwZXJyKSwKKyAgICAgICAgICAgICAgbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9MSU5LOgorICAgICAgcmMgPQorICAgICAgICBsaWJzc2gyX3NmdHBfc3ltbGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmc3NoYy0+cmVhZGRpcl9saW5rKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClDdXJsX2R5bl9sZW4oJnNzaGMtPnJlYWRkaXJfbGluayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYLCBMSUJTU0gyX1NGVFBfUkVBRExJTkspOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICByZWFkZGlyX2xlbiA9IChzaXplX3QpIHJjOworICAgICAgQ3VybF9keW5fZnJlZSgmc3NoYy0+cmVhZGRpcl9saW5rKTsKKworICAgICAgLyogYXBwZW5kIGZpbGVuYW1lIGFuZCBleHRyYSBvdXRwdXQgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfZHluX2FkZGYoJnNzaGMtPnJlYWRkaXIsICIgLT4gJXMiLCBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IE5VTEw7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9CT1RUT006CisgICAgICByZXN1bHQgPSBDdXJsX2R5bl9hZGRuKCZzc2hjLT5yZWFkZGlyLCAiXG4iLCAxKTsKKyAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmc3NoYy0+cmVhZGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX2xlbigmc3NoYy0+cmVhZGRpcikpOworCisgICAgICBpZighcmVzdWx0KSB7CisKKyAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLworICAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9JTiwKKyAgICAgICAgICAgICAgICAgICAgIEN1cmxfZHluX3B0cigmc3NoYy0+cmVhZGRpciksCisgICAgICAgICAgICAgICAgICAgICBDdXJsX2R5bl9sZW4oJnNzaGMtPnJlYWRkaXIpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IEN1cmxfZHluX2xlbigmc3NoYy0+cmVhZGRpcik7CisgICAgICB9CisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgQ3VybF9keW5fZnJlZSgmc3NoYy0+cmVhZGRpcik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBDdXJsX2R5bl9yZXNldCgmc3NoYy0+cmVhZGRpcik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVIpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1JFQURESVJfRE9ORToKKyAgICAgIGlmKGxpYnNzaDJfc2Z0cF9jbG9zZWRpcihzc2hjLT5zZnRwX2hhbmRsZSkgPT0KKyAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPSBOVUxMOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOworCisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUOgorICAgICAgLyoKKyAgICAgICAqIFdvcmsgb24gZ2V0dGluZyB0aGUgc3BlY2lmaWVkIGZpbGUKKyAgICAgICAqLworICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPQorICAgICAgICBsaWJzc2gyX3NmdHBfb3Blbl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfRlhGX1JFQUQsIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX09QRU5GSUxFKTsKKyAgICAgIGlmKCFzc2hjLT5zZnRwX2hhbmRsZSkgeworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNmdHBlcnIgPSBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IG9wZW4gcmVtb3RlIGZpbGUgZm9yIHJlYWRpbmc6ICVzIiwKKyAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKHNmdHBlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoc2Z0cGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUOgorICAgIHsKKyAgICAgIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIGF0dHJzOworCisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0X2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHJjIHx8CisgICAgICAgICAhKGF0dHJzLmZsYWdzICYgTElCU1NIMl9TRlRQX0FUVFJfU0laRSkgfHwKKyAgICAgICAgIChhdHRycy5maWxlc2l6ZSA9PSAwKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBsaWJzc2gyX3NmdHBfb3BlbigpIGRpZG4ndCByZXR1cm4gYW4gZXJyb3IsIHNvIG1heWJlIHRoZSBzZXJ2ZXIKKyAgICAgICAgICoganVzdCBkb2Vzbid0IHN1cHBvcnQgc3RhdCgpCisgICAgICAgICAqIE9SIHRoZSBzZXJ2ZXIgZG9lc24ndCByZXR1cm4gYSBmaWxlIHNpemUgd2l0aCBhIHN0YXQoKQorICAgICAgICAgKiBPUiBmaWxlIHNpemUgaXMgMAorICAgICAgICAgKi8KKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY3VybF9vZmZfdCBzaXplID0gYXR0cnMuZmlsZXNpemU7CisKKyAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICB9CisgICAgICAgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZV9yYW5nZSkgeworICAgICAgICAgIGN1cmxfb2ZmX3QgZnJvbSwgdG87CisgICAgICAgICAgY2hhciAqcHRyOworICAgICAgICAgIGNoYXIgKnB0cjI7CisgICAgICAgICAgQ1VSTG9mZnQgdG9fdDsKKyAgICAgICAgICBDVVJMb2ZmdCBmcm9tX3Q7CisKKyAgICAgICAgICBmcm9tX3QgPSBjdXJseF9zdHJ0b29mZnQoY29ubi0+ZGF0YS0+c3RhdGUucmFuZ2UsICZwdHIsIDAsICZmcm9tKTsKKyAgICAgICAgICBpZihmcm9tX3QgPT0gQ1VSTF9PRkZUX0ZMT1cpCisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkFOR0VfRVJST1I7CisgICAgICAgICAgd2hpbGUoKnB0ciAmJiAoSVNTUEFDRSgqcHRyKSB8fCAoKnB0ciA9PSAnLScpKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICAgIHRvX3QgPSBjdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCwgJnRvKTsKKyAgICAgICAgICBpZih0b190ID09IENVUkxfT0ZGVF9GTE9XKQorICAgICAgICAgICAgcmV0dXJuIENVUkxFX1JBTkdFX0VSUk9SOworICAgICAgICAgIGlmKCh0b190ID09IENVUkxfT0ZGVF9JTlZBTCkgLyogbm8gInRvIiB2YWx1ZSBnaXZlbiAqLworICAgICAgICAgICAgIHx8ICh0byA+PSBzaXplKSkgeworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbV90KSB7CisgICAgICAgICAgICAvKiBmcm9tIGlzIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgICBmcm9tID0gc2l6ZSAtIHRvOworICAgICAgICAgICAgdG8gPSBzaXplIC0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoZnJvbSA+IHNpemUpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPZmZzZXQgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIgorICAgICAgICAgICAgICAgICAgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIGZyb20sIGF0dHJzLmZpbGVzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihmcm9tID4gdG8pIHsKKyAgICAgICAgICAgIGZyb20gPSB0bzsKKyAgICAgICAgICAgIHNpemUgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNpemUgPSB0byAtIGZyb20gKyAxOworICAgICAgICAgIH0KKworICAgICAgICAgIFNGVFBfU0VFSyhjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBmcm9tKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemU7CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemU7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKKyAgICAgIH0KKworICAgICAgLyogV2UgY2FuIHJlc3VtZSBpZiB3ZSBjYW4gc2VlayB0byB0aGUgcmVzdW1lIHBvc2l0aW9uICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KKyAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IC1kYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKKyAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIikgd2FzIGJleW9uZCBmaWxlIHNpemUgKCUiCisgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIpIiwKKyAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBhdHRycy5maWxlc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KKyAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSBhdHRycy5maWxlc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCisgICAgICAgICAgICAgICAgICAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgYXR0cnMuZmlsZXNpemUpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIE5vdyBzdG9yZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGFyZSBleHBlY3RlZCB0byBkb3dubG9hZCAqLworICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGF0dHJzLmZpbGVzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IGF0dHJzLmZpbGVzaXplIC0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMuZmlsZXNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICAgIFNGVFBfU0VFSyhzc2hjLT5zZnRwX2hhbmRsZSwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pOworICAgICAgfQorICAgIH0KKworICAgIC8qIFNldHVwIHRoZSBhY3R1YWwgZG93bmxvYWQgKi8KKyAgICBpZihkYXRhLT5yZXEuc2l6ZSA9PSAwKSB7CisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIC0xLCAtMSwgRkFMU0UsIC0xKTsKKyAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSBkb3dubG9hZGVkXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKKworICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOworCisgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOworCisgICAgaWYocmVzdWx0KSB7CisgICAgICAvKiB0aGlzIHNob3VsZCBuZXZlciBvY2N1cjsgdGhlIGNsb3NlIHN0YXRlIHNob3VsZCBiZSBlbnRlcmVkCisgICAgICAgICBhdCB0aGUgdGltZSB0aGUgZXJyb3Igb2NjdXJzICovCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX0NMT1NFOgorICAgICAgaWYoc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9oYW5kbGUpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaDIgZmlsZTogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc2Z0cF9zY3AtPnBhdGgpOworCisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNGVFAgRE9ORSBkb25lXG4iKSk7CisKKyAgICAgIC8qIENoZWNrIGlmIG5leHRzdGF0ZSBpcyBzZXQgYW5kIG1vdmUgLm5leHRzdGF0ZSBjb3VsZCBiZSBQT1NUUVVPVEVfSU5JVAorICAgICAgICAgQWZ0ZXIgbmV4dHN0YXRlIGlzIGV4ZWN1dGVkLCB0aGUgY29udHJvbCBzaG91bGQgY29tZSBiYWNrIHRvCisgICAgICAgICBTU0hfU0ZUUF9DTE9TRSB0byBwYXNzIHRoZSBjb3JyZWN0IHJlc3VsdCBiYWNrICAqLworICAgICAgaWYoc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9OT19TVEFURSAmJgorICAgICAgICAgc3NoYy0+bmV4dHN0YXRlICE9IFNTSF9TRlRQX0NMT1NFKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX0NMT1NFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9TSFVURE9XTjoKKyAgICAgIC8qIGR1cmluZyB0aW1lcyB3ZSBnZXQgaGVyZSBkdWUgdG8gYSBicm9rZW4gdHJhbnNmZXIgYW5kIHRoZW4gdGhlCisgICAgICAgICBzZnRwX2hhbmRsZSBtaWdodCBub3QgaGF2ZSBiZWVuIHRha2VuIGRvd24gc28gbWFrZSBzdXJlIHRoYXQgaXMgZG9uZQorICAgICAgICAgYmVmb3JlIHdlIHByb2NlZWQgKi8KKworICAgICAgaWYoc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9oYW5kbGUpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLCAmZXJyX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNsb3NlIGxpYnNzaDIgZmlsZTogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IE5VTEw7CisgICAgICB9CisgICAgICBpZihzc2hjLT5zZnRwX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc2h1dGRvd24oc3NoYy0+c2Z0cF9zZXNzaW9uKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIHN0b3AgbGlic3NoMiBzZnRwIHN1YnN5c3RlbVxuIik7CisgICAgICAgIH0KKyAgICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5ob21lZGlyKTsKKyAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBOVUxMOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1RSQU5TX0lOSVQ6CisgICAgICByZXN1bHQgPSBDdXJsX2dldHdvcmtpbmdwYXRoKGNvbm4sIHNzaGMtPmhvbWVkaXIsICZzZnRwX3NjcC0+cGF0aCk7CisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIDwgMCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJTQ1AgcmVxdWlyZXMgYSBrbm93biBmaWxlIHNpemUgZm9yIHVwbG9hZCIpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9VUExPQURfRkFJTEVEOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfVVBMT0FEX0lOSVQ6CisgICAgICAvKgorICAgICAgICogbGlic3NoMiByZXF1aXJlcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgZnVsbCBwYXRoIHRoYXQKKyAgICAgICAqIGluY2x1ZGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBuYW1lIE9SIGVuZHMgaW4gYSAiLyIgLiAgSWYgdGhpcyBpcworICAgICAgICogbm90IGRvbmUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBuYW1lZCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBsYXN0CisgICAgICAgKiBkaXJlY3RvcnkgaW4gdGhlIHBhdGguCisgICAgICAgKi8KKyAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0KKyAgICAgICAgU0NQX1NFTkQoc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLCBkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMsCisgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgaWYoIXNzaGMtPnNzaF9jaGFubmVsKSB7CisgICAgICAgIGludCBzc2hfZXJyOworICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3NoX2VyciA9IChpbnQpKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApKTsKKyAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRShzc2hfZXJyKTsKKyAgICAgICAgLyogTWFwIGdlbmVyaWMgZXJyb3JzIHRvIHVwbG9hZCBmYWlsZWQgKi8KKyAgICAgICAgaWYoc3NoYy0+YWN0dWFsY29kZSA9PSBDVVJMRV9TU0ggfHwKKyAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9PSBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQpCisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1VQTE9BRF9GQUlMRUQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKiB1cGxvYWQgZGF0YSAqLworICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplKTsKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgRklSU1RTT0NLRVQpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKKyAgICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCisgICAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247CisKKyAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucworICAgICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiBzY3Agc2VuZCBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9PVVQ7CisKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfRE9XTkxPQURfSU5JVDoKKyAgICB7CisgICAgICBjdXJsX29mZl90IGJ5dGVjb3VudDsKKworICAgICAgLyoKKyAgICAgICAqIFdlIG11c3QgY2hlY2sgdGhlIHJlbW90ZSBmaWxlOyBpZiBpdCBpcyBhIGRpcmVjdG9yeSBubyB2YWx1ZXMgd2lsbAorICAgICAgICogYmUgc2V0IGluIHNiCisgICAgICAgKi8KKworICAgICAgLyoKKyAgICAgICAqIElmIHN1cHBvcnQgZm9yID4yR0IgZmlsZXMgZXhpc3RzLCB1c2UgaXQuCisgICAgICAgKi8KKworICAgICAgLyogZ2V0IGEgZnJlc2ggbmV3IGNoYW5uZWwgZnJvbSB0aGUgc3NoIGxheWVyICovCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA8IDB4MDEwNzAwCisgICAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICAgIG1lbXNldCgmc2IsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOworICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBsaWJzc2gyX3NjcF9yZWN2KHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmdHBfc2NwLT5wYXRoLCAmc2IpOworI2Vsc2UKKyAgICAgIGxpYnNzaDJfc3RydWN0X3N0YXQgc2I7CisgICAgICBtZW1zZXQoJnNiLCAwLCBzaXplb2YobGlic3NoMl9zdHJ1Y3Rfc3RhdCkpOworICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBsaWJzc2gyX3NjcF9yZWN2Mihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsICZzYik7CisjZW5kaWYKKworICAgICAgaWYoIXNzaGMtPnNzaF9jaGFubmVsKSB7CisgICAgICAgIGludCBzc2hfZXJyOworICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworICAgICAgICBzc2hfZXJyID0gKGludCkobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCkpOworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKHNzaF9lcnIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyogZG93bmxvYWQgZGF0YSAqLworICAgICAgYnl0ZWNvdW50ID0gKGN1cmxfb2ZmX3Qpc2Iuc3Rfc2l6ZTsKKyAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IChjdXJsX29mZl90KXNiLnN0X3NpemU7CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBieXRlY291bnQsIEZBTFNFLCAtMSk7CisKKyAgICAgIC8qIG5vdCBzZXQgYnkgQ3VybF9zZXR1cF90cmFuc2ZlciB0byBwcmVzZXJ2ZSBrZWVwb24gYml0cyAqLworICAgICAgY29ubi0+d3JpdGVzb2NrZmQgPSBjb25uLT5zb2NrZmQ7CisKKyAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfcmVjZWl2aW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucworICAgICAgICAgb3V0IHdyaXRhYmxlYWJsZSBhcyB0aGUgdW5kZXJseWluZyBsaWJzc2gyIHJlY3YgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9JTjsKKworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9ET05FOgorICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9TRU5EX0VPRik7CisgICAgICBlbHNlCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1NFTkRfRU9GOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfc2VuZF9lb2Yoc3NoYy0+c3NoX2NoYW5uZWwpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBsaWJzc2gyIGNoYW5uZWwgRU9GOiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfV0FJVF9FT0YpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfV0FJVF9FT0Y6CisgICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgeworICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF93YWl0X2VvZihzc2hjLT5zc2hfY2hhbm5lbCk7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKyAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBnZXQgY2hhbm5lbCBFT0Y6ICVkICVzXG4iLCByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfV0FJVF9DTE9TRSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9XQUlUX0NMT1NFOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfd2FpdF9jbG9zZWQoc3NoYy0+c3NoX2NoYW5uZWwpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJDaGFubmVsIGZhaWxlZCB0byBjbG9zZTogJWQgJXNcbiIsIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfZnJlZShzc2hjLT5zc2hfY2hhbm5lbCk7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZnJlZSBsaWJzc2gyIHNjcCBzdWJzeXN0ZW06ICVkICVzXG4iLAorICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9IE5VTEw7CisgICAgICB9CisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNDUCBET05FIHBoYXNlIGNvbXBsZXRlXG4iKSk7CisjaWYgMCAvKiBQUkVWICovCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKKyNlbmRpZgorICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0VTU0lPTl9ESVNDT05ORUNUOgorICAgICAgLyogZHVyaW5nIHdlaXJkIHRpbWVzIHdoZW4gd2UndmUgYmVlbiBwcmVtYXR1cmVseSBhYm9ydGVkLCB0aGUgY2hhbm5lbAorICAgICAgICAgaXMgc3RpbGwgYWxpdmUgd2hlbiB3ZSByZWFjaCB0aGlzIHN0YXRlIGFuZCB3ZSBNVVNUIGtpbGwgdGhlIGNoYW5uZWwKKyAgICAgICAgIHByb3Blcmx5IGZpcnN0ICovCisgICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgeworICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF9mcmVlKHNzaGMtPnNzaF9jaGFubmVsKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgICBjaGFyICplcnJfbXNnID0gTlVMTDsKKyAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBmcmVlIGxpYnNzaDIgc2NwIHN1YnN5c3RlbTogJWQgJXNcbiIsCisgICAgICAgICAgICAgICAgcmMsIGVycl9tc2cpOworICAgICAgICB9CisgICAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgaWYoc3NoYy0+c3NoX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fZGlzY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbiwgIlNodXRkb3duIik7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZGlzY29ubmVjdCBsaWJzc2gyIHNlc3Npb246ICVkICVzXG4iLAorICAgICAgICAgICAgICAgIHJjLCBlcnJfbXNnKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPmhvbWVkaXIpOworICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRVNTSU9OX0ZSRUU6CisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKyAgICAgIGlmKHNzaGMtPmtoKSB7CisgICAgICAgIGxpYnNzaDJfa25vd25ob3N0X2ZyZWUoc3NoYy0+a2gpOworICAgICAgICBzc2hjLT5raCA9IE5VTEw7CisgICAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIGlmKHNzaGMtPnNzaF9hZ2VudCkgeworICAgICAgICByYyA9IGxpYnNzaDJfYWdlbnRfZGlzY29ubmVjdChzc2hjLT5zc2hfYWdlbnQpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgIGNoYXIgKmVycl9tc2cgPSBOVUxMOworICAgICAgICAgICh2b2lkKWxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGRpc2Nvbm5lY3QgZnJvbSBsaWJzc2gyIGFnZW50OiAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgICAgbGlic3NoMl9hZ2VudF9mcmVlKHNzaGMtPnNzaF9hZ2VudCk7CisgICAgICAgIHNzaGMtPnNzaF9hZ2VudCA9IE5VTEw7CisKKyAgICAgICAgLyogTkI6IHRoZXJlIGlzIG5vIG5lZWQgdG8gZnJlZSBpZGVudGl0aWVzLCB0aGV5IGFyZSBwYXJ0IG9mIGludGVybmFsCisgICAgICAgICAgIGFnZW50IHN0dWZmICovCisgICAgICAgIHNzaGMtPnNzaGFnZW50X2lkZW50aXR5ID0gTlVMTDsKKyAgICAgICAgc3NoYy0+c3NoYWdlbnRfcHJldl9pZGVudGl0eSA9IE5VTEw7CisgICAgICB9CisjZW5kaWYKKworICAgICAgaWYoc3NoYy0+c3NoX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocmMgPCAwKSB7CisgICAgICAgICAgY2hhciAqZXJyX21zZyA9IE5VTEw7CisgICAgICAgICAgKHZvaWQpbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZnJlZSBsaWJzc2gyIHNlc3Npb246ICVkICVzXG4iLCByYywgZXJyX21zZyk7CisgICAgICAgIH0KKyAgICAgICAgc3NoYy0+c3NoX3Nlc3Npb24gPSBOVUxMOworICAgICAgfQorCisgICAgICAvKiB3b3JzdC1jYXNlIHNjZW5hcmlvIGNsZWFudXAgKi8KKworICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c3NoX3Nlc3Npb24gPT0gTlVMTCk7CisgICAgICBERUJVR0FTU0VSVChzc2hjLT5zc2hfY2hhbm5lbCA9PSBOVUxMKTsKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNmdHBfc2Vzc2lvbiA9PSBOVUxMKTsKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNmdHBfaGFuZGxlID09IE5VTEwpOworI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCisgICAgICBERUJVR0FTU0VSVChzc2hjLT5raCA9PSBOVUxMKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElCU1NIMl9BR0VOVF9BUEkKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9hZ2VudCA9PSBOVUxMKTsKKyNlbmRpZgorCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYV9wdWIpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPmhvbWVkaXIpOworCisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbGluZSk7CisgICAgICBDdXJsX2R5bl9mcmVlKCZzc2hjLT5yZWFkZGlyKTsKKworICAgICAgLyogdGhlIGNvZGUgd2UgYXJlIGFib3V0IHRvIHJldHVybiAqLworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKworICAgICAgbWVtc2V0KHNzaGMsIDAsIHNpemVvZihzdHJ1Y3Qgc3NoX2Nvbm4pKTsKKworICAgICAgY29ubmNsb3NlKGNvbm4sICJTU0ggc2Vzc2lvbiBmcmVlIik7CisgICAgICBzc2hjLT5zdGF0ZSA9IFNTSF9TRVNTSU9OX0ZSRUU7IC8qIGN1cnJlbnQgKi8KKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfUVVJVDoKKyAgICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIGludGVybmFsIGVycm9yICovCisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgfSB3aGlsZSghcmMgJiYgKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSk7CisKKyAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAvKiB3ZSB3b3VsZCBibG9jaywgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlIHJlYWR5IChpbiB0aGUKKyAgICAgICByaWdodCBkaXJlY3Rpb24gdG9vKSEgKi8KKyAgICAqYmxvY2sgPSBUUlVFOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKSB0byB3YWl0IGZvciBhbmQKKyAgIGZvciB3aGF0IGFjdGlvbnMgaW4gdGhlIERPX0RPTkUsIFBFUkZPUk0gYW5kIFdBSVRQRVJGT1JNIHN0YXRlcyAqLworc3RhdGljIGludCBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrKQoreworI2lmZGVmIEhBVkVfTElCU1NIMl9TRVNTSU9OX0JMT0NLX0RJUkVDVElPTgorICBpbnQgYml0bWFwID0gR0VUU09DS19CTEFOSzsKKworICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfUkVDVikKKyAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfU0VORCkKKyAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOworCisgIHJldHVybiBiaXRtYXA7CisjZWxzZQorICAvKiBpZiB3ZSBkb24ndCBrbm93IHRoZSBkaXJlY3Rpb24gd2UgY2FuIHVzZSB0aGUgZ2VuZXJpYyAqX2dldHNvY2soKQorICAgICBmdW5jdGlvbiBldmVuIGZvciB0aGUgcHJvdG9jb2xfY29ubmVjdCBhbmQgZG9pbmcgc3RhdGVzICovCisgIHJldHVybiBDdXJsX3NpbmdsZV9nZXRzb2NrKGNvbm4sIHNvY2spOworI2VuZGlmCit9CisKKy8qIEdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZmlndXJlIG91dCB3aGF0IHNvY2tldChzKQorICAgdG8gd2FpdCBmb3IgYW5kIGZvciB3aGF0IGFjdGlvbnMgZHVyaW5nIHRoZSBET0lORyBhbmQgUFJPVE9DT05ORUNUIHN0YXRlcyovCitzdGF0aWMgaW50IHNzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyNpZm5kZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisgICh2b2lkKWNvbm47CisgICh2b2lkKXNvY2s7CisgIC8qIGlmIHdlIGRvbid0IGtub3cgYW55IGRpcmVjdGlvbiB3ZSBjYW4ganVzdCBwbGF5IGFsb25nIGFzIHdlIHVzZWQgdG8gYW5kCisgICAgIG5vdCBwcm92aWRlIGFueSBzZW5zaWJsZSBpbmZvICovCisgIHJldHVybiBHRVRTT0NLX0JMQU5LOworI2Vsc2UKKyAgLyogaWYgd2Uga25vdyB0aGUgZGlyZWN0aW9uIHdlIGNhbiB1c2UgdGhlIGdlbmVyaWMgKl9nZXRzb2NrKCkgZnVuY3Rpb24gZXZlbgorICAgICBmb3IgdGhlIHByb3RvY29sX2Nvbm5lY3QgYW5kIGRvaW5nIHN0YXRlcyAqLworICByZXR1cm4gc3NoX3BlcmZvcm1fZ2V0c29jayhjb25uLCBzb2NrKTsKKyNlbmRpZgorfQorCisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisvKgorICogV2hlbiBvbmUgb2YgdGhlIGxpYnNzaDIgZnVuY3Rpb25zIGhhcyByZXR1cm5lZCBMSUJTU0gyX0VSUk9SX0VBR0FJTiB0aGlzCisgKiBmdW5jdGlvbiBpcyB1c2VkIHRvIGZpZ3VyZSBvdXQgaW4gd2hhdCBkaXJlY3Rpb24gYW5kIHN0b3JlcyB0aGlzIGluZm8gc28KKyAqIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQuIE1ha2Ugc3VyZSB0byBjYWxsIHRoaXMKKyAqIGZ1bmN0aW9uIGluIGFsbCBjYXNlcyBzbyB0aGF0IHdoZW4gaXQgX2RvZXNuJ3RfIHJldHVybiBFQUdBSU4gd2UgY2FuCisgKiByZXN0b3JlIHRoZSBkZWZhdWx0IHdhaXQgYml0cy4KKyAqLworc3RhdGljIHZvaWQgc3NoX2Jsb2NrMndhaXRmb3Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGJsb2NrKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgaW50IGRpciA9IDA7CisgIGlmKGJsb2NrKSB7CisgICAgZGlyID0gbGlic3NoMl9zZXNzaW9uX2Jsb2NrX2RpcmVjdGlvbnMoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgIGlmKGRpcikgeworICAgICAgLyogdHJhbnNsYXRlIHRoZSBsaWJzc2gyIGRlZmluZSBiaXRzIGludG8gb3VyIG93biBiaXQgZGVmaW5lcyAqLworICAgICAgY29ubi0+d2FpdGZvciA9ICgoZGlyJkxJQlNTSDJfU0VTU0lPTl9CTE9DS19JTkJPVU5EKT9LRUVQX1JFQ1Y6MCkgfAorICAgICAgICAoKGRpciZMSUJTU0gyX1NFU1NJT05fQkxPQ0tfT1VUQk9VTkQpP0tFRVBfU0VORDowKTsKKyAgICB9CisgIH0KKyAgaWYoIWRpcikKKyAgICAvKiBJdCBkaWRuJ3QgYmxvY2sgb3IgbGlic3NoMiBkaWRuJ3QgcmV2ZWFsIGluIHdoaWNoIGRpcmVjdGlvbiwgcHV0IGJhY2sKKyAgICAgICB0aGUgb3JpZ2luYWwgc2V0ICovCisgICAgY29ubi0+d2FpdGZvciA9IHNzaGMtPm9yaWdfd2FpdGZvcjsKK30KKyNlbHNlCisgIC8qIG5vIGxpYnNzaDIgZGlyZWN0aW9uYWwgc3VwcG9ydCBzbyB3ZSBzaW1wbHkgZG9uJ3Qga25vdyAqLworI2RlZmluZSBzc2hfYmxvY2syd2FpdGZvcih4LHkpIEN1cmxfbm9wX3N0bXQKKyNlbmRpZgorCisvKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLworc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGJvb2wgYmxvY2s7IC8qIHdlIHN0b3JlIHRoZSBzdGF0dXMgYW5kIHVzZSB0aGF0IHRvIHByb3ZpZGUgYSBzc2hfZ2V0c29jaygpCisgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uICovCisgIGRvIHsKKyAgICByZXN1bHQgPSBzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOworICAgICpkb25lID0gKHNzaGMtPnN0YXRlID09IFNTSF9TVE9QKSA/IFRSVUUgOiBGQUxTRTsKKyAgICAvKiBpZiB0aGVyZSdzIG5vIGVycm9yLCBpdCBpc24ndCBkb25lIGFuZCBpdCBkaWRuJ3QgRVdPVUxEQkxPQ0ssIHRoZW4KKyAgICAgICB0cnkgYWdhaW4gKi8KKyAgfSB3aGlsZSghcmVzdWx0ICYmICEqZG9uZSAmJiAhYmxvY2spOworICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCBibG9jayk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIHNzaF9ibG9ja19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGR1cmluZ2Nvbm5lY3QpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgd2hpbGUoKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSAmJiAhcmVzdWx0KSB7CisgICAgYm9vbCBibG9jazsKKyAgICB0aW1lZGlmZl90IGxlZnQgPSAxMDAwOworICAgIHN0cnVjdCBjdXJsdGltZSBub3cgPSBDdXJsX25vdygpOworCisgICAgcmVzdWx0ID0gc3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworCisgICAgcmVzdWx0ID0gQ3VybF9zcGVlZGNoZWNrKGRhdGEsIG5vdyk7CisgICAgaWYocmVzdWx0KQorICAgICAgYnJlYWs7CisKKyAgICBsZWZ0ID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBkdXJpbmdjb25uZWN0KTsKKyAgICBpZihsZWZ0IDwgMCkgeworICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorCisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisgICAgaWYoYmxvY2spIHsKKyAgICAgIGludCBkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfcmVhZCA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfd3JpdGUgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfSU5CT1VORCAmIGRpcikKKyAgICAgICAgZmRfcmVhZCA9IHNvY2s7CisgICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfT1VUQk9VTkQgJiBkaXIpCisgICAgICAgIGZkX3dyaXRlID0gc29jazsKKyAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCisgICAgICAodm9pZClDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsIGZkX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD4xMDAwPzEwMDA6bGVmdCk7CisgICAgfQorI2VuZGlmCisKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTU0ggc2V0dXAgYW5kIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIENVUkxjb2RlIHNzaF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFNTSFBST1RPICpzc2g7CisKKyAgY29ubi0+ZGF0YS0+cmVxLnByb3RvcCA9IHNzaCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IFNTSFBST1RPKSk7CisgIGlmKCFzc2gpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ3VybF9yZWN2IHNjcF9yZWN2LCBzZnRwX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHNjcF9zZW5kLCBzZnRwX3NlbmQ7CisKKy8qCisgKiBDdXJsX3NzaF9jb25uZWN0KCkgZ2V0cyBjYWxsZWQgZnJvbSBDdXJsX3Byb3RvY29sX2Nvbm5lY3QoKSB0byBhbGxvdyB1cyB0bworICogZG8gcHJvdG9jb2wtc3BlY2lmaWMgYWN0aW9ucyBhdCBjb25uZWN0LXRpbWUuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCisgIGN1cmxfc29ja2V0X3Qgc29jazsKKyNlbmRpZgorICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaDsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAvKiBpbml0aWFsaXplIHBlci1oYW5kbGUgZGF0YSBpZiBub3QgYWxyZWFkeSAqLworICBpZighZGF0YS0+cmVxLnByb3RvcCkKKyAgICBzc2hfc2V0dXBfY29ubmVjdGlvbihjb25uKTsKKworICAvKiBXZSBkZWZhdWx0IHRvIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFdlIHNldCB0aGlzIGFscmVhZHkgaW4gdGhpcyBjb25uZWN0CisgICAgIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIHJlLXVzZSBjaGVja3MgcHJvcGVybHkgYmUgYWJsZSB0byBjaGVjayB0aGlzIGJpdC4gKi8KKyAgY29ubmtlZXAoY29ubiwgIlNTSCBkZWZhdWx0Iik7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBzY3BfcmVjdjsKKyAgICBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXSA9IHNjcF9zZW5kOworICB9CisgIGVsc2UgeworICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2Z0cF9yZWN2OworICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gc2Z0cF9zZW5kOworICB9CisgIHNzaCA9ICZjb25uLT5wcm90by5zc2hjOworCisjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCisgIGlmKGNvbm4tPnVzZXIpIHsKKyAgICBpbmZvZihkYXRhLCAiVXNlcjogJXNcbiIsIGNvbm4tPnVzZXIpOworICB9CisgIGlmKGNvbm4tPnBhc3N3ZCkgeworICAgIGluZm9mKGRhdGEsICJQYXNzd29yZDogJXNcbiIsIGNvbm4tPnBhc3N3ZCk7CisgIH0KKyAgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworI2VuZGlmIC8qIENVUkxfTElCU1NIMl9ERUJVRyAqLworCisgIHNzaC0+c3NoX3Nlc3Npb24gPSBsaWJzc2gyX3Nlc3Npb25faW5pdF9leChteV9saWJzc2gyX21hbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X2xpYnNzaDJfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X2xpYnNzaDJfcmVhbGxvYywgY29ubik7CisgIGlmKHNzaC0+c3NoX3Nlc3Npb24gPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIGluaXRpYWxpc2luZyBzc2ggc2Vzc2lvbiIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIGlmKGRhdGEtPnNldC5zc2hfY29tcHJlc3Npb24pIHsKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMjA4CisgICAgaWYobGlic3NoMl9zZXNzaW9uX2ZsYWcoc3NoLT5zc2hfc2Vzc2lvbiwgTElCU1NIMl9GTEFHX0NPTVBSRVNTLCAxKSA8IDApCisjZW5kaWYKKyAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gZW5hYmxlIGNvbXByZXNzaW9uIGZvciBzc2ggc2Vzc2lvblxuIik7CisgIH0KKworI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSkgeworICAgIGludCByYzsKKyAgICBzc2gtPmtoID0gbGlic3NoMl9rbm93bmhvc3RfaW5pdChzc2gtPnNzaF9zZXNzaW9uKTsKKyAgICBpZighc3NoLT5raCkgeworICAgICAgbGlic3NoMl9zZXNzaW9uX2ZyZWUoc3NoLT5zc2hfc2Vzc2lvbik7CisgICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgfQorCisgICAgLyogcmVhZCBhbGwga25vd24gaG9zdHMgZnJvbSB0aGVyZSAqLworICAgIHJjID0gbGlic3NoMl9rbm93bmhvc3RfcmVhZGZpbGUoc3NoLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0ZJTEVfT1BFTlNTSCk7CisgICAgaWYocmMgPCAwKQorICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byByZWFkIGtub3duIGhvc3RzIGZyb20gJXNcbiIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICB9CisjZW5kaWYgLyogSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkgKi8KKworI2lmZGVmIENVUkxfTElCU1NIMl9ERUJVRworICBsaWJzc2gyX3RyYWNlKHNzaC0+c3NoX3Nlc3Npb24sIH4wKTsKKyAgaW5mb2YoZGF0YSwgIlNTSCBzb2NrZXQ6ICVkXG4iLCAoaW50KXNvY2spOworI2VuZGlmIC8qIENVUkxfTElCU1NIMl9ERUJVRyAqLworCisgIHN0YXRlKGNvbm4sIFNTSF9JTklUKTsKKworICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvbmUpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzY3BfcGVyZm9ybSgpCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTQ1AuIEdldCBhIGZpbGUgYWNjb3JkaW5nIHRvCisgKiB0aGUgb3B0aW9ucyBwcmV2aW91c2x5IHNldHVwLgorICovCisKK3N0YXRpYworQ1VSTGNvZGUgc2NwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NDUF9UUkFOU19JTklUKTsKKworICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgc2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoZSBETyBmdW5jdGlvbiBpcyBnZW5lcmljIGZvciBib3RoIHByb3RvY29scy4gVGhlcmUgd2FzIHByZXZpb3VzbHkgdHdvCisgKiBzZXBhcmF0ZSBvbmVzIGJ1dCB0aGlzIHdheSBtZWFucyBsZXNzIGR1cGxpY2F0ZWQgY29kZS4KKyAqLworCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBib29sIGNvbm5lY3RlZCA9IDA7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworICAqZG9uZSA9IEZBTFNFOyAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisKKyAgZGF0YS0+cmVxLnNpemUgPSAtMTsgLyogbWFrZSBzdXJlIHRoaXMgaXMgdW5rbm93biBhdCB0aGlzIHBvaW50ICovCisKKyAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOyAvKiByZXNldCBlcnJvciBjb2RlICovCisgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAwOyAgIC8qIHJlc2V0IHRoZSBjcmVhdGUgZGlyIGF0dGVtcHQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgKi8KKworICBDdXJsX3BncnNTZXRVcGxvYWRDb3VudGVyKGRhdGEsIDApOworICBDdXJsX3BncnNTZXREb3dubG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgLTEpOworICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOworCisgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkKKyAgICByZXN1bHQgPSBzY3BfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCAgZG9uZSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBzZnRwX3BlcmZvcm0oY29ubiwgJmNvbm5lY3RlZCwgIGRvbmUpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgorICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKKyAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KK3N0YXRpYyBDVVJMY29kZSBzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IHNzaF9jb25uICpzc2ggPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKKworICBpZihzc2gtPnNzaF9zZXNzaW9uKSB7CisgICAgLyogb25seSBpZiB0aGVyZSdzIGEgc2Vzc2lvbiBzdGlsbCBhcm91bmQgdG8gdXNlISAqLworCisgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7CisKKyAgICByZXN1bHQgPSBzc2hfYmxvY2tfc3RhdGVtYWNoKGNvbm4sIEZBTFNFKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGdlbmVyaWMgZG9uZSBmdW5jdGlvbiBmb3IgYm90aCBTQ1AgYW5kIFNGVFAgY2FsbGVkIGZyb20gdGhlaXIgc3BlY2lmaWMKKyAgIGRvbmUgZnVuY3Rpb25zICovCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU1NIUFJPVE8gKnNmdHBfc2NwID0gY29ubi0+ZGF0YS0+cmVxLnByb3RvcDsKKworICBpZighc3RhdHVzKSB7CisgICAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CisgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IHN0YXR1czsKKworICBpZihzZnRwX3NjcCkKKyAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKKyAgaWYoQ3VybF9wZ3JzRG9uZShjb25uKSkKKyAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKworICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgLyogY2xlYXIgYWxsIGJpdHMgKi8KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKXByZW1hdHVyZTsgLyogbm90IHVzZWQgKi8KKworICBpZighc3RhdHVzKQorICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfRE9ORSk7CisKKyAgcmV0dXJuIHNzaF9kb25lKGNvbm4sIHN0YXR1cyk7CisKK30KKworc3RhdGljIHNzaXplX3Qgc2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG53cml0ZTsKKyAgKHZvaWQpc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLworCisgIC8qIGxpYnNzaDJfY2hhbm5lbF93cml0ZSgpIHJldHVybnMgaW50ISAqLworICBud3JpdGUgPSAoc3NpemVfdCkKKyAgICBsaWJzc2gyX2NoYW5uZWxfd3JpdGUoY29ubi0+cHJvdG8uc3NoYy5zc2hfY2hhbm5lbCwgbWVtLCBsZW4pOworCisgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChud3JpdGUgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pP1RSVUU6RkFMU0UpOworCisgIGlmKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICBud3JpdGUgPSAwOworICB9CisgIGVsc2UgaWYobndyaXRlIDwgTElCU1NIMl9FUlJPUl9OT05FKSB7CisgICAgKmVyciA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRSgoaW50KW53cml0ZSk7CisgICAgbndyaXRlID0gLTE7CisgIH0KKworICByZXR1cm4gbndyaXRlOworfQorCitzdGF0aWMgc3NpemVfdCBzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIHNzaXplX3QgbnJlYWQ7CisgICh2b2lkKXNvY2tpbmRleDsgLyogd2Ugb25seSBzdXBwb3J0IFNDUCBvbiB0aGUgZml4ZWQga25vd24gcHJpbWFyeSBzb2NrZXQgKi8KKworICAvKiBsaWJzc2gyX2NoYW5uZWxfcmVhZCgpIHJldHVybnMgaW50ICovCisgIG5yZWFkID0gKHNzaXplX3QpCisgICAgbGlic3NoMl9jaGFubmVsX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zc2hfY2hhbm5lbCwgbWVtLCBsZW4pOworCisgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisgIGlmKG5yZWFkID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIG5yZWFkID0gLTE7CisgIH0KKworICByZXR1cm4gbnJlYWQ7Cit9CisKKy8qCisgKiA9PT09PT09PT09PT09PT0gU0ZUUCA9PT09PT09PT09PT09PT0KKyAqLworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc2Z0cF9wZXJmb3JtKCkKKyAqCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFNGVFAuIEdldCBhIGZpbGUvZGlyZWN0b3J5IGFjY29yZGluZyB0bworICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KKyAqLworCitzdGF0aWMKK0NVUkxjb2RlIHNmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKKworICAqZG9waGFzZV9kb25lID0gRkFMU0U7IC8qIG5vdCBkb25lIHlldCAqLworCisgIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLworICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9JTklUKTsKKworICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKKworICBpZigqZG9waGFzZV9kb25lKSB7CisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgorICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKKyAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KK3N0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKSBkZWFkX2Nvbm5lY3Rpb247CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBzdGFydHMgbm93XG4iKSk7CisKKyAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7CisgICAgcmVzdWx0ID0gc3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CisgIH0KKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIGlzIGRvbmVcbiIpKTsKKworICByZXR1cm4gcmVzdWx0OworCit9CisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworCisgIGlmKCFzdGF0dXMpIHsKKyAgICAvKiBQb3N0IHF1b3RlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBhZnRlciB0aGUgU0ZUUF9DTE9TRSBzdGF0ZSB0byBhdm9pZAorICAgICAgIGVycm9ycyB0aGF0IGNvdWxkIGhhcHBlbiBkdWUgdG8gb3BlbiBmaWxlIGhhbmRsZXMgZHVyaW5nIFBPU1RRVU9URQorICAgICAgIG9wZXJhdGlvbiAqLworICAgIGlmKCFwcmVtYXR1cmUgJiYgY29ubi0+ZGF0YS0+c2V0LnBvc3RxdW90ZSAmJiAhY29ubi0+Yml0cy5yZXRyeSkKKyAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX1BPU1RRVU9URV9JTklUOworICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgfQorICByZXR1cm4gc3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKK30KKworLyogcmV0dXJuIG51bWJlciBvZiBzZW50IGJ5dGVzICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBud3JpdGU7ICAgLyogbGlic3NoMl9zZnRwX3dyaXRlKCkgdXNlZCB0byByZXR1cm4gc2l6ZV90IGluIDAuMTQKKyAgICAgICAgICAgICAgICAgICAgICAgYnV0IGlzIGNoYW5nZWQgdG8gc3NpemVfdCBpbiAwLjE1LiBUaGVzZSBkYXlzIHdlIGRvbid0CisgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgbGlic3NoMiAwLjE1Ki8KKyAgKHZvaWQpc29ja2luZGV4OworCisgIG53cml0ZSA9IGxpYnNzaDJfc2Z0cF93cml0ZShjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBtZW0sIGxlbik7CisKKyAgc3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisKKyAgaWYobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIG53cml0ZSA9IDA7CisgIH0KKyAgZWxzZSBpZihud3JpdGUgPCBMSUJTU0gyX0VSUk9SX05PTkUpIHsKKyAgICAqZXJyID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKChpbnQpbndyaXRlKTsKKyAgICBud3JpdGUgPSAtMTsKKyAgfQorCisgIHJldHVybiBud3JpdGU7Cit9CisKKy8qCisgKiBSZXR1cm4gbnVtYmVyIG9mIHJlY2VpdmVkIChkZWNyeXB0ZWQpIGJ5dGVzCisgKiBvciA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBucmVhZDsKKyAgKHZvaWQpc29ja2luZGV4OworCisgIG5yZWFkID0gbGlic3NoMl9zZnRwX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2hhbmRsZSwgbWVtLCBsZW4pOworCisgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisKKyAgaWYobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbnJlYWQgPSAtMTsKKworICB9CisgIGVsc2UgaWYobnJlYWQgPCAwKSB7CisgICAgKmVyciA9IGxpYnNzaDJfc2Vzc2lvbl9lcnJvcl90b19DVVJMRSgoaW50KW5yZWFkKTsKKyAgfQorICByZXR1cm4gbnJlYWQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzZnRwX2xpYnNzaDJfc3RyZXJyb3IodW5zaWduZWQgbG9uZyBlcnIpCit7CisgIHN3aXRjaChlcnIpIHsKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9GSUxFOgorICAgICAgcmV0dXJuICJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9QRVJNSVNTSU9OX0RFTklFRDoKKyAgICAgIHJldHVybiAiUGVybWlzc2lvbiBkZW5pZWQiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0ZBSUxVUkU6CisgICAgICByZXR1cm4gIk9wZXJhdGlvbiBmYWlsZWQiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0JBRF9NRVNTQUdFOgorICAgICAgcmV0dXJuICJCYWQgbWVzc2FnZSBmcm9tIFNGVFAgc2VydmVyIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9OT19DT05ORUNUSU9OOgorICAgICAgcmV0dXJuICJOb3QgY29ubmVjdGVkIHRvIFNGVFAgc2VydmVyIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9DT05ORUNUSU9OX0xPU1Q6CisgICAgICByZXR1cm4gIkNvbm5lY3Rpb24gdG8gU0ZUUCBzZXJ2ZXIgbG9zdCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfT1BfVU5TVVBQT1JURUQ6CisgICAgICByZXR1cm4gIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IFNGVFAgc2VydmVyIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9JTlZBTElEX0hBTkRMRToKKyAgICAgIHJldHVybiAiSW52YWxpZCBoYW5kbGUiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NVQ0hfUEFUSDoKKyAgICAgIHJldHVybiAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRklMRV9BTFJFQURZX0VYSVNUUzoKKyAgICAgIHJldHVybiAiRmlsZSBhbHJlYWR5IGV4aXN0cyI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfV1JJVEVfUFJPVEVDVDoKKyAgICAgIHJldHVybiAiRmlsZSBpcyB3cml0ZSBwcm90ZWN0ZWQiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX01FRElBOgorICAgICAgcmV0dXJuICJObyBtZWRpYSI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1BBQ0VfT05fRklMRVNZU1RFTToKKyAgICAgIHJldHVybiAiRGlzayBmdWxsIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9RVU9UQV9FWENFRURFRDoKKyAgICAgIHJldHVybiAiVXNlciBxdW90YSBleGNlZWRlZCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfVU5LTk9XTl9QUklOQ0lQTEU6CisgICAgICByZXR1cm4gIlVua25vd24gcHJpbmNpcGxlIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9MT0NLX0NPTkZsSUNUOgorICAgICAgcmV0dXJuICJGaWxlIGxvY2sgY29uZmxpY3QiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0RJUl9OT1RfRU1QVFk6CisgICAgICByZXR1cm4gIkRpcmVjdG9yeSBub3QgZW1wdHkiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PVF9BX0RJUkVDVE9SWToKKyAgICAgIHJldHVybiAiTm90IGEgZGlyZWN0b3J5IjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9JTlZBTElEX0ZJTEVOQU1FOgorICAgICAgcmV0dXJuICJJbnZhbGlkIGZpbGVuYW1lIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9MSU5LX0xPT1A6CisgICAgICByZXR1cm4gIkxpbmsgcG9pbnRzIHRvIGl0c2VsZiI7CisgIH0KKyAgcmV0dXJuICJVbmtub3duIGVycm9yIGluIGxpYnNzaDIiOworfQorCitDVVJMY29kZSBDdXJsX3NzaF9pbml0KHZvaWQpCit7CisjaWZkZWYgSEFWRV9MSUJTU0gyX0lOSVQKKyAgaWYobGlic3NoMl9pbml0KDApKSB7CisgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGxpYnNzaDJfaW5pdCBmYWlsZWRcbiIpKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKyNlbmRpZgorICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3ZvaWQgQ3VybF9zc2hfY2xlYW51cCh2b2lkKQoreworI2lmZGVmIEhBVkVfTElCU1NIMl9FWElUCisgICh2b2lkKWxpYnNzaDJfZXhpdCgpOworI2VuZGlmCit9CisKK3NpemVfdCBDdXJsX3NzaF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIGJ1ZmxlbiwgImxpYnNzaDIvJXMiLCBMSUJTU0gyX1ZFUlNJT04pOworfQorCisjZW5kaWYgLyogVVNFX0xJQlNTSDIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvc3NoLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3NzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDk5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3NzaC5oCkBAIC0wLDAgKzEsMjY0IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1NTSF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1NTSF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZiBkZWZpbmVkKEhBVkVfTElCU1NIMl9IKQorI2luY2x1ZGUgPGxpYnNzaDIuaD4KKyNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9MSUJTU0hfTElCU1NIX0gpCisjaW5jbHVkZSA8bGlic3NoL2xpYnNzaC5oPgorI2luY2x1ZGUgPGxpYnNzaC9zZnRwLmg+CisjZWxpZiBkZWZpbmVkKFVTRV9XT0xGU1NIKQorI2luY2x1ZGUgPHdvbGZzc2gvc3NoLmg+CisjaW5jbHVkZSA8d29sZnNzaC93b2xmc2Z0cC5oPgorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTU0ggdW5pcXVlIHNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKyAgU1NIX05PX1NUQVRFID0gLTEsICAvKiBVc2VkIGZvciAibmV4dFN0YXRlIiBzbyBzYXkgdGhlcmUgaXMgbm9uZSAqLworICBTU0hfU1RPUCA9IDAsICAgICAgIC8qIGRvIG5vdGhpbmcgc3RhdGUsIHN0b3BzIHRoZSBzdGF0ZSBtYWNoaW5lICovCisKKyAgU1NIX0lOSVQsICAgICAgICAgICAvKiBGaXJzdCBzdGF0ZSBpbiBTU0gtQ09OTkVDVCAqLworICBTU0hfU19TVEFSVFVQLCAgICAgIC8qIFNlc3Npb24gc3RhcnR1cCAqLworICBTU0hfSE9TVEtFWSwgICAgICAgIC8qIHZlcmlmeSBob3N0a2V5ICovCisgIFNTSF9BVVRITElTVCwKKyAgU1NIX0FVVEhfUEtFWV9JTklULAorICBTU0hfQVVUSF9QS0VZLAorICBTU0hfQVVUSF9QQVNTX0lOSVQsCisgIFNTSF9BVVRIX1BBU1MsCisgIFNTSF9BVVRIX0FHRU5UX0lOSVQsIC8qIGluaXRpYWxpemUgdGhlbiB3YWl0IGZvciBjb25uZWN0aW9uIHRvIGFnZW50ICovCisgIFNTSF9BVVRIX0FHRU5UX0xJU1QsIC8qIGFzayBmb3IgbGlzdCB0aGVuIHdhaXQgZm9yIGVudGlyZSBsaXN0IHRvIGNvbWUgKi8KKyAgU1NIX0FVVEhfQUdFTlQsICAgICAgLyogYXR0ZW1wdCBvbmUga2V5IGF0IGEgdGltZSAqLworICBTU0hfQVVUSF9IT1NUX0lOSVQsCisgIFNTSF9BVVRIX0hPU1QsCisgIFNTSF9BVVRIX0tFWV9JTklULAorICBTU0hfQVVUSF9LRVksCisgIFNTSF9BVVRIX0dTU0FQSSwKKyAgU1NIX0FVVEhfRE9ORSwKKyAgU1NIX1NGVFBfSU5JVCwKKyAgU1NIX1NGVFBfUkVBTFBBVEgsICAgLyogTGFzdCBzdGF0ZSBpbiBTU0gtQ09OTkVDVCAqLworCisgIFNTSF9TRlRQX1FVT1RFX0lOSVQsIC8qIEZpcnN0IHN0YXRlIGluIFNGVFAtRE8gKi8KKyAgU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQsIC8qIChQb3NzaWJseSkgRmlyc3Qgc3RhdGUgaW4gU0ZUUC1ET05FICovCisgIFNTSF9TRlRQX1FVT1RFLAorICBTU0hfU0ZUUF9ORVhUX1FVT1RFLAorICBTU0hfU0ZUUF9RVU9URV9TVEFULAorICBTU0hfU0ZUUF9RVU9URV9TRVRTVEFULAorICBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LLAorICBTU0hfU0ZUUF9RVU9URV9NS0RJUiwKKyAgU1NIX1NGVFBfUVVPVEVfUkVOQU1FLAorICBTU0hfU0ZUUF9RVU9URV9STURJUiwKKyAgU1NIX1NGVFBfUVVPVEVfVU5MSU5LLAorICBTU0hfU0ZUUF9RVU9URV9TVEFUVkZTLAorICBTU0hfU0ZUUF9HRVRJTkZPLAorICBTU0hfU0ZUUF9GSUxFVElNRSwKKyAgU1NIX1NGVFBfVFJBTlNfSU5JVCwKKyAgU1NIX1NGVFBfVVBMT0FEX0lOSVQsCisgIFNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQsCisgIFNTSF9TRlRQX0NSRUFURV9ESVJTLAorICBTU0hfU0ZUUF9DUkVBVEVfRElSU19NS0RJUiwKKyAgU1NIX1NGVFBfUkVBRERJUl9JTklULAorICBTU0hfU0ZUUF9SRUFERElSLAorICBTU0hfU0ZUUF9SRUFERElSX0xJTkssCisgIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NLAorICBTU0hfU0ZUUF9SRUFERElSX0RPTkUsCisgIFNTSF9TRlRQX0RPV05MT0FEX0lOSVQsCisgIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQsIC8qIExhc3Qgc3RhdGUgaW4gU0ZUUC1ETyAqLworICBTU0hfU0ZUUF9DTE9TRSwgICAgLyogTGFzdCBzdGF0ZSBpbiBTRlRQLURPTkUgKi8KKyAgU1NIX1NGVFBfU0hVVERPV04sIC8qIEZpcnN0IHN0YXRlIGluIFNGVFAtRElTQ09OTkVDVCAqLworICBTU0hfU0NQX1RSQU5TX0lOSVQsIC8qIEZpcnN0IHN0YXRlIGluIFNDUC1ETyAqLworICBTU0hfU0NQX1VQTE9BRF9JTklULAorICBTU0hfU0NQX0RPV05MT0FEX0lOSVQsCisgIFNTSF9TQ1BfRE9XTkxPQUQsCisgIFNTSF9TQ1BfRE9ORSwKKyAgU1NIX1NDUF9TRU5EX0VPRiwKKyAgU1NIX1NDUF9XQUlUX0VPRiwKKyAgU1NIX1NDUF9XQUlUX0NMT1NFLAorICBTU0hfU0NQX0NIQU5ORUxfRlJFRSwgICAvKiBMYXN0IHN0YXRlIGluIFNDUC1ET05FICovCisgIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QsIC8qIEZpcnN0IHN0YXRlIGluIFNDUC1ESVNDT05ORUNUICovCisgIFNTSF9TRVNTSU9OX0ZSRUUsICAgICAgIC8qIExhc3Qgc3RhdGUgaW4gU0NQL1NGVFAtRElTQ09OTkVDVCAqLworICBTU0hfUVVJVCwKKyAgU1NIX0xBU1QgIC8qIG5ldmVyIHVzZWQgKi8KK30gc3Noc3RhdGU7CisKKy8qIHRoaXMgc3RydWN0IGlzIHVzZWQgaW4gdGhlIEhhbmRsZURhdGEgc3RydWN0IHdoaWNoIGlzIHBhcnQgb2YgdGhlCisgICBDdXJsX2Vhc3ksIHdoaWNoIG1lYW5zIHRoaXMgaXMgdXNlZCBvbiBhIHBlci1lYXN5IGhhbmRsZSBiYXNpcy4KKyAgIEV2ZXJ5dGhpbmcgdGhhdCBpcyBzdHJpY3RseSByZWxhdGVkIHRvIGEgY29ubmVjdGlvbiBpcyBiYW5uZWQgZnJvbSB0aGlzCisgICBzdHJ1Y3QuICovCitzdHJ1Y3QgU1NIUFJPVE8geworICBjaGFyICpwYXRoOyAgICAgICAgICAgICAgICAgIC8qIHRoZSBwYXRoIHdlIG9wZXJhdGUgb24gKi8KK307CisKKy8qIHNzaF9jb25uIGlzIHVzZWQgZm9yIHN0cnVjdCBjb25uZWN0aW9uLW9yaWVudGVkIGRhdGEgaW4gdGhlIGNvbm5lY3RkYXRhCisgICBzdHJ1Y3QgKi8KK3N0cnVjdCBzc2hfY29ubiB7CisgIGNvbnN0IGNoYXIgKmF1dGhsaXN0OyAgICAgICAvKiBMaXN0IG9mIGF1dGguIG1ldGhvZHMsIG1hbmFnZWQgYnkgbGlic3NoMiAqLworCisgIC8qIGNvbW1vbiAqLworICBjb25zdCBjaGFyICpwYXNzcGhyYXNlOyAgICAgLyogcGFzcy1waHJhc2UgdG8gdXNlICovCisgIGNoYXIgKnJzYV9wdWI7ICAgICAgICAgICAgICAvKiBwYXRoIG5hbWUgKi8KKyAgY2hhciAqcnNhOyAgICAgICAgICAgICAgICAgIC8qIHBhdGggbmFtZSAqLworICBib29sIGF1dGhlZDsgICAgICAgICAgICAgICAgLyogdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gYXV0aGVudGljYXRlZCBmaW5lICovCisgIHNzaHN0YXRlIHN0YXRlOyAgICAgICAgICAgICAvKiBhbHdheXMgdXNlIHNzaC5jOnN0YXRlKCkgdG8gY2hhbmdlIHN0YXRlISAqLworICBzc2hzdGF0ZSBuZXh0c3RhdGU7ICAgICAgICAgLyogdGhlIHN0YXRlIHRvIGdvdG8gYWZ0ZXIgc3RvcHBpbmcgKi8KKyAgQ1VSTGNvZGUgYWN0dWFsY29kZTsgICAgICAgIC8qIHRoZSBhY3R1YWwgZXJyb3IgY29kZSAqLworICBzdHJ1Y3QgY3VybF9zbGlzdCAqcXVvdGVfaXRlbTsgLyogZm9yIHRoZSBxdW90ZSBvcHRpb24gKi8KKyAgY2hhciAqcXVvdGVfcGF0aDE7ICAgICAgICAgIC8qIHR3byBnZW5lcmljIHBvaW50ZXJzIGZvciB0aGUgUVVPVEUgc3R1ZmYgKi8KKyAgY2hhciAqcXVvdGVfcGF0aDI7CisKKyAgYm9vbCBhY2NlcHRmYWlsOyAgICAgICAgICAgIC8qIHVzZWQgYnkgdGhlIFNGVFBfUVVPVEUgKGNvbnRpbnVlIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSBjb21tYW5kIGZhaWxzKSAqLworICBjaGFyICpob21lZGlyOyAgICAgICAgICAgICAgLyogd2hlbiBkb2luZyBTRlRQIHdlIGZpZ3VyZSBvdXQgaG9tZSBkaXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0IHBoYXNlICovCisgIGNoYXIgKnJlYWRkaXJfbGluZTsKKyAgLyogZW5kIG9mIFJFQURESVIgc3R1ZmYgKi8KKworICBpbnQgc2Vjb25kQ3JlYXRlRGlyczsgICAgICAgICAvKiBjb3VudGVyIHVzZSBieSB0aGUgY29kZSB0byBzZWUgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCBhdHRlbXB0IGhhcyBiZWVuIG1hZGUgdG8gY2hhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvL2NyZWF0ZSBhIGRpcmVjdG9yeSAqLworICBjaGFyICpzbGFzaF9wb3M7ICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRoZSBTRlRQX0NSRUFURV9ESVJTIHN0YXRlICovCisKKyAgaW50IG9yaWdfd2FpdGZvcjsgICAgICAgICAgICAgLyogZGVmYXVsdCBSRUFEL1dSSVRFIGJpdHMgd2FpdCBmb3IgKi8KKworI2lmIGRlZmluZWQoVVNFX0xJQlNTSCkKKyAgY2hhciAqcmVhZGRpcl9saW5rUGF0aDsKKyAgc2l6ZV90IHJlYWRkaXJfbGVuLCByZWFkZGlyX3RvdGFsTGVuLCByZWFkZGlyX2N1cnJMZW47CisvKiBvdXIgdmFyaWFibGVzICovCisgIHVuc2lnbmVkIGtiZF9zdGF0ZTsgLyogMCBvciAxICovCisgIHNzaF9rZXkgcHJpdmtleTsKKyAgc3NoX2tleSBwdWJrZXk7CisgIGludCBhdXRoX21ldGhvZHM7CisgIHNzaF9zZXNzaW9uIHNzaF9zZXNzaW9uOworICBzc2hfc2NwIHNjcF9zZXNzaW9uOworICBzZnRwX3Nlc3Npb24gc2Z0cF9zZXNzaW9uOworICBzZnRwX2ZpbGUgc2Z0cF9maWxlOworICBzZnRwX2RpciBzZnRwX2RpcjsKKworICB1bnNpZ25lZCBzZnRwX3JlY3Zfc3RhdGU7IC8qIDAgb3IgMSAqLworICBpbnQgc2Z0cF9maWxlX2luZGV4OyAvKiBmb3IgYXN5bmMgcmVhZCAqLworICBzZnRwX2F0dHJpYnV0ZXMgcmVhZGRpcl9hdHRyczsgLyogdXNlZCBieSB0aGUgU0ZUUCByZWFkZGlyIGFjdGlvbnMgKi8KKyAgc2Z0cF9hdHRyaWJ1dGVzIHJlYWRkaXJfbGlua19hdHRyczsgLyogdXNlZCBieSB0aGUgU0ZUUCByZWFkZGlyIGFjdGlvbnMgKi8KKyAgc2Z0cF9hdHRyaWJ1dGVzIHF1b3RlX2F0dHJzOyAvKiB1c2VkIGJ5IHRoZSBTRlRQX1FVT1RFIHN0YXRlICovCisKKyAgY29uc3QgY2hhciAqcmVhZGRpcl9maWxlbmFtZTsgLyogcG9pbnRzIHdpdGhpbiByZWFkZGlyX2F0dHJzICovCisgIGNvbnN0IGNoYXIgKnJlYWRkaXJfbG9uZ2VudHJ5OworICBjaGFyICpyZWFkZGlyX3RtcDsKKyNlbGlmIGRlZmluZWQoVVNFX0xJQlNTSDIpCisgIHN0cnVjdCBkeW5idWYgcmVhZGRpcl9saW5rOworICBzdHJ1Y3QgZHluYnVmIHJlYWRkaXI7CisgIGNoYXIgKnJlYWRkaXJfZmlsZW5hbWU7CisgIGNoYXIgKnJlYWRkaXJfbG9uZ2VudHJ5OworCisgIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIHF1b3RlX2F0dHJzOyAvKiB1c2VkIGJ5IHRoZSBTRlRQX1FVT1RFIHN0YXRlICovCisKKyAgLyogSGVyZSdzIGEgc2V0IG9mIHN0cnVjdCBtZW1iZXJzIHVzZWQgYnkgdGhlIFNGVFBfUkVBRERJUiBzdGF0ZSAqLworICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyByZWFkZGlyX2F0dHJzOworICBMSUJTU0gyX1NFU1NJT04gKnNzaF9zZXNzaW9uOyAvKiBTZWN1cmUgU2hlbGwgc2Vzc2lvbiAqLworICBMSUJTU0gyX0NIQU5ORUwgKnNzaF9jaGFubmVsOyAvKiBTZWN1cmUgU2hlbGwgY2hhbm5lbCBoYW5kbGUgKi8KKyAgTElCU1NIMl9TRlRQICpzZnRwX3Nlc3Npb247ICAgLyogU0ZUUCBoYW5kbGUgKi8KKyAgTElCU1NIMl9TRlRQX0hBTkRMRSAqc2Z0cF9oYW5kbGU7CisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfQUdFTlRfQVBJCisgIExJQlNTSDJfQUdFTlQgKnNzaF9hZ2VudDsgICAgIC8qIHByb3h5IHRvIHNzaC1hZ2VudC9wYWdlYW50ICovCisgIHN0cnVjdCBsaWJzc2gyX2FnZW50X3B1YmxpY2tleSAqc3NoYWdlbnRfaWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3NoYWdlbnRfcHJldl9pZGVudGl0eTsKKyNlbmRpZgorCisgIC8qIG5vdGUgdGhhdCBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSBpcyBhIGRlZmluZSBzZXQgaW4gdGhlIGxpYnNzaDIuaAorICAgICBoZWFkZXIgKi8KKyNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQorICBMSUJTU0gyX0tOT1dOSE9TVFMgKmtoOworI2VuZGlmCisjZWxpZiBkZWZpbmVkKFVTRV9XT0xGU1NIKQorICBXT0xGU1NIICpzc2hfc2Vzc2lvbjsKKyAgV09MRlNTSF9DVFggKmN0eDsKKyAgd29yZDMyIGhhbmRsZVN6OworICBieXRlIGhhbmRsZVtXT0xGU1NIX01BWF9IQU5ETEVdOworICBjdXJsX29mZl90IG9mZnNldDsKKyNlbmRpZiAvKiBVU0VfTElCU1NIICovCit9OworCisjaWYgZGVmaW5lZChVU0VfTElCU1NIKQorCisjZGVmaW5lIENVUkxfTElCU1NIX1ZFUlNJT04gc3NoX3ZlcnNpb24oMCkKKworI2VsaWYgZGVmaW5lZChVU0VfTElCU1NIMikKKworLyogRmVhdHVyZSBkZXRlY3Rpb24gYmFzZWQgb24gdmVyc2lvbiBudW1iZXJzIHRvIGJldHRlciB3b3JrIHdpdGgKKyAgIG5vbi1jb25maWd1cmUgcGxhdGZvcm1zICovCisKKyNpZiAhZGVmaW5lZChMSUJTU0gyX1ZFUlNJT05fTlVNKSB8fCAoTElCU1NIMl9WRVJTSU9OX05VTSA8IDB4MDAxMDAwKQorIyAgZXJyb3IgIlNDUC9TRlRQIHByb3RvY29scyByZXF1aXJlIGxpYnNzaDIgMC4xNiBvciBsYXRlciIKKyNlbmRpZgorCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDAwMAorI2RlZmluZSBIQVZFX0xJQlNTSDJfU0ZUUF9TRUVLNjQgMQorI2VuZGlmCisKKyNpZiBMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMTAwCisjZGVmaW5lIEhBVkVfTElCU1NIMl9WRVJTSU9OIDEKKyNlbmRpZgorCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDIwNQorI2RlZmluZSBIQVZFX0xJQlNTSDJfSU5JVCAxCisjZGVmaW5lIEhBVkVfTElCU1NIMl9FWElUIDEKKyNlbmRpZgorCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDIwNgorI2RlZmluZSBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0NIRUNLUCAxCisjZGVmaW5lIEhBVkVfTElCU1NIMl9TQ1BfU0VORDY0IDEKKyNlbmRpZgorCisjaWYgTElCU1NIMl9WRVJTSU9OX05VTSA+PSAweDAxMDIwOAorI2RlZmluZSBIQVZFX0xJQlNTSDJfU0VTU0lPTl9IQU5EU0hBS0UgMQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfVkVSU0lPTgorLyogZ2V0IGl0IHJ1bi10aW1lIGlmIHBvc3NpYmxlICovCisjZGVmaW5lIENVUkxfTElCU1NIMl9WRVJTSU9OIGxpYnNzaDJfdmVyc2lvbigwKQorI2Vsc2UKKy8qIHVzZSBidWlsZC10aW1lIGlmIHJ1bi10aW1lIG5vdCBwb3NzaWJsZSAqLworI2RlZmluZSBDVVJMX0xJQlNTSDJfVkVSU0lPTiBMSUJTU0gyX1ZFUlNJT04KKyNlbmRpZgorCisjZW5kaWYgLyogVVNFX0xJQlNTSDIgKi8KKworI2lmZGVmIFVTRV9TU0gKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwOworCisvKiBnZW5lcmljIFNTSCBiYWNrZW5kIGZ1bmN0aW9ucyAqLworQ1VSTGNvZGUgQ3VybF9zc2hfaW5pdCh2b2lkKTsKK3ZvaWQgQ3VybF9zc2hfY2xlYW51cCh2b2lkKTsKK3NpemVfdCBDdXJsX3NzaF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1Zmxlbik7CisjZWxzZQorLyogZm9yIG5vbi1TU0ggYnVpbGRzICovCisjZGVmaW5lIEN1cmxfc3NoX2NsZWFudXAoKQorI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TU0hfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC93b2xmc3NoLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JiYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnNzaC93b2xmc3NoLmMKQEAgLTAsMCArMSwxMTU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfV09MRlNTSAorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDx3b2xmc3NoL3NzaC5oPgorI2luY2x1ZGUgPHdvbGZzc2gvd29sZnNmdHAuaD4KKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJjdXJsX3BhdGguaCIKKyNpbmNsdWRlICJzdHJ0b29mZnQuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgInNwZWVkY2hlY2suaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJtdWx0aWlmLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKworLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLworI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdGF0aWMgQ1VSTGNvZGUgd3NzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgd3NzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSB3c3NoX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CisjaWYgMAorc3RhdGljIENVUkxjb2RlIHdzY3BfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgd3NjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOworc3RhdGljIENVUkxjb2RlIHdzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKKyNlbmRpZgorc3RhdGljIENVUkxjb2RlIHdzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKK3N0YXRpYyBpbnQgd3NzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spOworc3RhdGljIGludCB3c3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2spOworc3RhdGljIENVUkxjb2RlIHdzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisjaWYgMAorLyoKKyAqIFNDUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NjcCA9IHsKKyAgIlNDUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgd3NzaF9zZXR1cF9jb25uZWN0aW9uLCAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIHdzc2hfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgd3NjcF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICB3c3NoX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgd3NzaF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIHdzY3BfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgd3NzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIHdzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIHdzc2hfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHdzY3BfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb25fY2hlY2sgKi8KKyAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19TQ1AsICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTgorICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCisjZW5kaWYKKworLyoKKyAqIFNGVFAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zZnRwID0geworICAiU0ZUUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICB3c3NoX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgd3NzaF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICB3c2Z0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHdzc2hfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICB3c3NoX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgd3NmdHBfZG9pbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICB3c3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgd3NzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgd3NzaF9wZXJmb3JtX2dldHNvY2ssICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgd3NmdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbl9jaGVjayAqLworICBQT1JUX1NTSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NGVFAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX0RJUkxPQ0sgfCBQUk9UT1BUX0NMT1NFQUNUSU9OCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKKy8qCisgKiBTU0ggU3RhdGUgbWFjaGluZSByZWxhdGVkIGNvZGUKKyAqLworLyogVGhpcyBpcyB0aGUgT05MWSB3YXkgdG8gY2hhbmdlIFNTSCBzdGF0ZSEgKi8KK3N0YXRpYyB2b2lkIHN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3Noc3RhdGUgbm93c3RhdGUpCit7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgLyogZm9yIGRlYnVnIHB1cnBvc2VzICovCisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsKKyAgICAiU1NIX1NUT1AiLAorICAgICJTU0hfSU5JVCIsCisgICAgIlNTSF9TX1NUQVJUVVAiLAorICAgICJTU0hfSE9TVEtFWSIsCisgICAgIlNTSF9BVVRITElTVCIsCisgICAgIlNTSF9BVVRIX1BLRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX1BLRVkiLAorICAgICJTU0hfQVVUSF9QQVNTX0lOSVQiLAorICAgICJTU0hfQVVUSF9QQVNTIiwKKyAgICAiU1NIX0FVVEhfQUdFTlRfSU5JVCIsCisgICAgIlNTSF9BVVRIX0FHRU5UX0xJU1QiLAorICAgICJTU0hfQVVUSF9BR0VOVCIsCisgICAgIlNTSF9BVVRIX0hPU1RfSU5JVCIsCisgICAgIlNTSF9BVVRIX0hPU1QiLAorICAgICJTU0hfQVVUSF9LRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX0tFWSIsCisgICAgIlNTSF9BVVRIX0dTU0FQSSIsCisgICAgIlNTSF9BVVRIX0RPTkUiLAorICAgICJTU0hfU0ZUUF9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBTFBBVEgiLAorICAgICJTU0hfU0ZUUF9RVU9URV9JTklUIiwKKyAgICAiU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9RVU9URSIsCisgICAgIlNTSF9TRlRQX05FWFRfUVVPVEUiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NZTUxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9NS0RJUiIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JFTkFNRSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JNRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfVU5MSU5LIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyIsCisgICAgIlNTSF9TRlRQX0dFVElORk8iLAorICAgICJTU0hfU0ZUUF9GSUxFVElNRSIsCisgICAgIlNTSF9TRlRQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0ZUUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX0lOSVQiLAorICAgICJTU0hfU0ZUUF9DUkVBVEVfRElSUyIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUiIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfTElOSyIsCisgICAgIlNTSF9TRlRQX1JFQURESVJfQk9UVE9NIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9ET05FIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TRlRQX0RPV05MT0FEX1NUQVQiLAorICAgICJTU0hfU0ZUUF9DTE9TRSIsCisgICAgIlNTSF9TRlRQX1NIVVRET1dOIiwKKyAgICAiU1NIX1NDUF9UUkFOU19JTklUIiwKKyAgICAiU1NIX1NDUF9VUExPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQURfSU5JVCIsCisgICAgIlNTSF9TQ1BfRE9XTkxPQUQiLAorICAgICJTU0hfU0NQX0RPTkUiLAorICAgICJTU0hfU0NQX1NFTkRfRU9GIiwKKyAgICAiU1NIX1NDUF9XQUlUX0VPRiIsCisgICAgIlNTSF9TQ1BfV0FJVF9DTE9TRSIsCisgICAgIlNTSF9TQ1BfQ0hBTk5FTF9GUkVFIiwKKyAgICAiU1NIX1NFU1NJT05fRElTQ09OTkVDVCIsCisgICAgIlNTSF9TRVNTSU9OX0ZSRUUiLAorICAgICJRVUlUIgorICB9OworCisgIC8qIGEgcHJlY2F1dGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpc3RzIGFyZSBpbiBzeW5jICovCisgIERFQlVHQVNTRVJUKHNpemVvZihuYW1lcykvc2l6ZW9mKG5hbWVzWzBdKSA9PSBTU0hfTEFTVCk7CisKKyAgaWYoc3NoYy0+c3RhdGUgIT0gbm93c3RhdGUpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCAid29sZnNzaCAlcCBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlc1xuIiwKKyAgICAgICAgICAodm9pZCAqKXNzaGMsIG5hbWVzW3NzaGMtPnN0YXRlXSwgbmFtZXNbbm93c3RhdGVdKTsKKyAgfQorI2VuZGlmCisKKyAgc3NoYy0+c3RhdGUgPSBub3dzdGF0ZTsKK30KKworc3RhdGljIHNzaXplX3Qgd3NjcF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIHNzaXplX3QgbndyaXRlID0gMDsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLworICAodm9pZCltZW07CisgICh2b2lkKWxlbjsKKyAgKHZvaWQpZXJyOworCisgIHJldHVybiBud3JpdGU7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG5yZWFkID0gMDsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc29ja2luZGV4OyAvKiB3ZSBvbmx5IHN1cHBvcnQgU0NQIG9uIHRoZSBmaXhlZCBrbm93biBwcmltYXJ5IHNvY2tldCAqLworICAodm9pZCltZW07CisgICh2b2lkKWxlbjsKKyAgKHZvaWQpZXJyOworCisgIHJldHVybiBucmVhZDsKK30KKworLyogcmV0dXJuIG51bWJlciBvZiBzZW50IGJ5dGVzICovCitzdGF0aWMgc3NpemVfdCB3c2Z0cF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgd29yZDMyIG9mZnNldFsyXTsKKyAgaW50IHJjOworICAodm9pZClzb2NraW5kZXg7CisKKyAgb2Zmc2V0WzBdID0gKHdvcmQzMilzc2hjLT5vZmZzZXQmMHhGRkZGRkZGRjsKKyAgb2Zmc2V0WzFdID0gKHdvcmQzMikoc3NoYy0+b2Zmc2V0Pj4zMikmMHhGRkZGRkZGRjsKKworICByYyA9IHdvbGZTU0hfU0ZUUF9TZW5kV3JpdGVQYWNrZXQoc3NoYy0+c3NoX3Nlc3Npb24sIHNzaGMtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPmhhbmRsZVN6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlICopbWVtLCAod29yZDMyKWxlbik7CisKKyAgaWYocmMgPT0gV1NfRkFUQUxfRVJST1IpCisgICAgcmMgPSB3b2xmU1NIX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIHJldHVybiAtMTsKKyAgfQorICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgaWYocmMgPCAwKSB7CisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIndvbGZTU0hfU0ZUUF9TZW5kV3JpdGVQYWNrZXQgcmV0dXJuZWQgJWRcbiIsIHJjKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgREVCVUdBU1NFUlQocmMgPT0gKGludClsZW4pOworICBpbmZvZihjb25uLT5kYXRhLCAic2VudCAlemQgYnl0ZXMgU0ZUUCBmcm9tIG9mZnNldCAlemRcbiIsCisgICAgICAgIGxlbiwgc3NoYy0+b2Zmc2V0KTsKKyAgc3NoYy0+b2Zmc2V0ICs9IGxlbjsKKyAgcmV0dXJuIChzc2l6ZV90KXJjOworfQorCisvKgorICogUmV0dXJuIG51bWJlciBvZiByZWNlaXZlZCAoZGVjcnlwdGVkKSBieXRlcworICogb3IgPDAgb24gZXJyb3IKKyAqLworc3RhdGljIHNzaXplX3Qgd3NmdHBfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgaW50IHJjOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgd29yZDMyIG9mZnNldFsyXTsKKyAgKHZvaWQpc29ja2luZGV4OworCisgIG9mZnNldFswXSA9ICh3b3JkMzIpc3NoYy0+b2Zmc2V0JjB4RkZGRkZGRkY7CisgIG9mZnNldFsxXSA9ICh3b3JkMzIpKHNzaGMtPm9mZnNldD4+MzIpJjB4RkZGRkZGRkY7CisKKyAgcmMgPSB3b2xmU1NIX1NGVFBfU2VuZFJlYWRQYWNrZXQoc3NoYy0+c3NoX3Nlc3Npb24sIHNzaGMtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+aGFuZGxlU3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvZmZzZXRbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlICopbWVtLCAod29yZDMyKWxlbik7CisgIGlmKHJjID09IFdTX0ZBVEFMX0VSUk9SKQorICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgREVCVUdBU1NFUlQocmMgPD0gKGludClsZW4pOworCisgIGlmKHJjIDwgMCkgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJ3b2xmU1NIX1NGVFBfU2VuZFJlYWRQYWNrZXQgcmV0dXJuZWQgJWRcbiIsIHJjKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgc3NoYy0+b2Zmc2V0ICs9IGxlbjsKKworICByZXR1cm4gKHNzaXplX3QpcmM7Cit9CisKKy8qCisgKiBTU0ggc2V0dXAgYW5kIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIENVUkxjb2RlIHdzc2hfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTU0hQUk9UTyAqc3NoOworCisgIGNvbm4tPmRhdGEtPnJlcS5wcm90b3AgPSBzc2ggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBTU0hQUk9UTykpOworICBpZighc3NoKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIEN1cmxfcmVjdiB3c2NwX3JlY3YsIHdzZnRwX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHdzY3Bfc2VuZCwgd3NmdHBfc2VuZDsKKworc3RhdGljIGludCB1c2VyYXV0aChieXRlIGF1dGh0eXBlLAorICAgICAgICAgICAgICAgICAgICBXU19Vc2VyQXV0aERhdGEqIGF1dGhkYXRhLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpjdHgpCit7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IGN0eDsKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJ3b2xmc3NoIGNhbGxiYWNrOiB0eXBlICVzXG4iLAorICAgICAgICAgICAgICAgYXV0aHR5cGUgPT0gV09MRlNTSF9VU0VSQVVUSF9QQVNTV09SRCA/ICJQQVNTV09SRCIgOgorICAgICAgICAgICAgICAgIlBVQkxJQ0NLRVkiKSk7CisgIGlmKGF1dGh0eXBlID09IFdPTEZTU0hfVVNFUkFVVEhfUEFTU1dPUkQpIHsKKyAgICBhdXRoZGF0YS0+c2YucGFzc3dvcmQucGFzc3dvcmQgPSAoYnl0ZSAqKWNvbm4tPnBhc3N3ZDsKKyAgICBhdXRoZGF0YS0+c2YucGFzc3dvcmQucGFzc3dvcmRTeiA9ICh3b3JkMzIpIHN0cmxlbihjb25uLT5wYXNzd2QpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c3NoX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjOworICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgaW50IHJjOworCisgIC8qIGluaXRpYWxpemUgcGVyLWhhbmRsZSBkYXRhIGlmIG5vdCBhbHJlYWR5ICovCisgIGlmKCFkYXRhLT5yZXEucHJvdG9wKQorICAgIHdzc2hfc2V0dXBfY29ubmVjdGlvbihjb25uKTsKKworICAvKiBXZSBkZWZhdWx0IHRvIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFdlIHNldCB0aGlzIGFscmVhZHkgaW4gdGhpcyBjb25uZWN0CisgICAgIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIHJlLXVzZSBjaGVja3MgcHJvcGVybHkgYmUgYWJsZSB0byBjaGVjayB0aGlzIGJpdC4gKi8KKyAgY29ubmtlZXAoY29ubiwgIlNTSCBkZWZhdWx0Iik7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSB3c2NwX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSB3c2NwX3NlbmQ7CisgIH0KKyAgZWxzZSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSB3c2Z0cF9yZWN2OworICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gd3NmdHBfc2VuZDsKKyAgfQorICBzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIHNzaGMtPmN0eCA9IHdvbGZTU0hfQ1RYX25ldyhXT0xGU1NIX0VORFBPSU5UX0NMSUVOVCwgTlVMTCk7CisgIGlmKCFzc2hjLT5jdHgpIHsKKyAgICBmYWlsZihkYXRhLCAiTm8gd29sZlNTSCBjb250ZXh0Iik7CisgICAgZ290byBlcnJvcjsKKyAgfQorCisgIHNzaGMtPnNzaF9zZXNzaW9uID0gd29sZlNTSF9uZXcoc3NoYy0+Y3R4KTsKKyAgaWYoc3NoYy0+c3NoX3Nlc3Npb24gPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsICJObyB3b2xmU1NIIHNlc3Npb24iKTsKKyAgICBnb3RvIGVycm9yOworICB9CisKKyAgcmMgPSB3b2xmU1NIX1NldFVzZXJuYW1lKHNzaGMtPnNzaF9zZXNzaW9uLCBjb25uLT51c2VyKTsKKyAgaWYocmMgIT0gV1NfU1VDQ0VTUykgeworICAgIGZhaWxmKGRhdGEsICJ3b2xmU1NIIGZhaWxlZCB0byBzZXQgdXNlciBuYW1lIik7CisgICAgZ290byBlcnJvcjsKKyAgfQorCisgIC8qIHNldCBjYWxsYmFjayBmb3IgYXV0aGVudGljYXRpb24gKi8KKyAgd29sZlNTSF9TZXRVc2VyQXV0aChzc2hjLT5jdHgsIHVzZXJhdXRoKTsKKyAgd29sZlNTSF9TZXRVc2VyQXV0aEN0eChzc2hjLT5zc2hfc2Vzc2lvbiwgY29ubik7CisKKyAgcmMgPSB3b2xmU1NIX3NldF9mZChzc2hjLT5zc2hfc2Vzc2lvbiwgKGludClzb2NrKTsKKyAgaWYocmMpIHsKKyAgICBmYWlsZihkYXRhLCAid29sZlNTSCBmYWlsZWQgdG8gc2V0IHNvY2tldCIpOworICAgIGdvdG8gZXJyb3I7CisgIH0KKworI2lmIDAKKyAgd29sZlNTSF9EZWJ1Z2dpbmdfT04oKTsKKyNlbmRpZgorCisgICpkb25lID0gVFJVRTsKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQorICAgIHN0YXRlKGNvbm4sIFNTSF9JTklUKTsKKyAgZWxzZQorICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0lOSVQpOworCisgIHJldHVybiB3c3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb25lKTsKKyAgZXJyb3I6CisgIHdvbGZTU0hfZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7CisgIHdvbGZTU0hfQ1RYX2ZyZWUoc3NoYy0+Y3R4KTsKKyAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworfQorCisvKgorICogd3NzaF9zdGF0ZW1hY2hfYWN0KCkgcnVucyB0aGUgU1NIIHN0YXRlIG1hY2hpbmUgYXMgZmFyIGFzIGl0IGNhbiB3aXRob3V0CisgKiBibG9ja2luZyBhbmQgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kLiAgVGhlIGRhdGEgdGhlIHBvaW50ZXIgJ2Jsb2NrJyBwb2ludHMKKyAqIHRvIHdpbGwgYmUgc2V0IHRvIFRSVUUgaWYgdGhlIHdvbGZzc2ggZnVuY3Rpb24gcmV0dXJucyBFQUdBSU4gbWVhbmluZyBpdAorICogd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkeQorICovCisKK3N0YXRpYyBDVVJMY29kZSB3c3NoX3N0YXRlbWFjaF9hY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpibG9jaykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFNTSFBST1RPICpzZnRwX3NjcCA9IGRhdGEtPnJlcS5wcm90b3A7CisgIFdTX1NGVFBOQU1FICpuYW1lOworICBpbnQgcmMgPSAwOworICAqYmxvY2sgPSBGQUxTRTsgLyogd2UncmUgbm90IGJsb2NraW5nIGJ5IGRlZmF1bHQgKi8KKworICBkbyB7CisgICAgc3dpdGNoKHNzaGMtPnN0YXRlKSB7CisgICAgY2FzZSBTU0hfSU5JVDoKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TX1NUQVJUVVApOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIFNTSF9TX1NUQVJUVVA6CisgICAgICByYyA9IHdvbGZTU0hfY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBXU19TVUNDRVNTKQorICAgICAgICByYyA9IHdvbGZTU0hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyAhPSBXU19TVUNDRVNTKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTSDsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJ3b2xmc3NoIGNvbm5lY3RlZCFcbiIpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfU1RPUDoKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9JTklUOgorICAgICAgcmMgPSB3b2xmU1NIX1NGVFBfY29ubmVjdChzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyAhPSBXU19TVUNDRVNTKQorICAgICAgICByYyA9IHdvbGZTU0hfZ2V0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uKTsKKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19TVUNDRVNTKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJ3b2xmc3NoIFNGVFAgY29ubmVjdGVkIVxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQUxQQVRIKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIGNvbm5lY3QgZXJyb3IgJWQiLCByYyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0g7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFNTSF9TRlRQX1JFQUxQQVRIOgorICAgICAgbmFtZSA9IHdvbGZTU0hfU0ZUUF9SZWFsUGF0aChzc2hjLT5zc2hfc2Vzc2lvbiwgKGNoYXIgKikiLiIpOworICAgICAgcmMgPSB3b2xmU1NIX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfUkVDVjsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1NFTkQ7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYobmFtZSAmJiAocmMgPT0gV1NfU1VDQ0VTUykpIHsKKyAgICAgICAgc3NoYy0+aG9tZWRpciA9IG1hbGxvYyhuYW1lLT5mU3ogKyAxKTsKKyAgICAgICAgaWYoIXNzaGMtPmhvbWVkaXIpIHsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBtZW1jcHkoc3NoYy0+aG9tZWRpciwgbmFtZS0+Zk5hbWUsIG5hbWUtPmZTeik7CisgICAgICAgICAgc3NoYy0+aG9tZWRpcltuYW1lLT5mU3pdID0gMDsKKyAgICAgICAgICBpbmZvZihkYXRhLCAid29sZnNzaCBTRlRQIHJlYWxwYXRoIHN1Y2NlZWRlZCFcbiIpOworICAgICAgICB9CisgICAgICAgIHdvbGZTU0hfU0ZUUE5BTUVfbGlzdF9mcmVlKG5hbWUpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGZhaWxmKGRhdGEsICJ3b2xmc3NoIFNGVFAgcmVhbHBhdGggJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NIOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9JTklUOgorICAgICAgcmVzdWx0ID0gQ3VybF9nZXR3b3JraW5ncGF0aChjb25uLCBzc2hjLT5ob21lZGlyLCAmc2Z0cF9zY3AtPnBhdGgpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5xdW90ZSkgeworICAgICAgICBpbmZvZihkYXRhLCAiU2VuZGluZyBxdW90ZSBjb21tYW5kc1xuIik7CisgICAgICAgIHNzaGMtPnF1b3RlX2l0ZW0gPSBkYXRhLT5zZXQucXVvdGU7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9HRVRJTkZPKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1NIX1NGVFBfR0VUSU5GTzoKKyAgICAgIGlmKGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRklMRVRJTUUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1RSQU5TX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0hfU0ZUUF9UUkFOU19JTklUOgorICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVVBMT0FEX0lOSVQpOworICAgICAgZWxzZSB7CisgICAgICAgIGlmKHNmdHBfc2NwLT5wYXRoW3N0cmxlbihzZnRwX3NjcC0+cGF0aCktMV0gPT0gJy8nKQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfSU5JVCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1NIX1NGVFBfVVBMT0FEX0lOSVQ6IHsKKyAgICAgIHdvcmQzMiBmbGFnczsKKyAgICAgIFdTX1NGVFBfRklMRUFUUkIgY3JlYXRlYXR0cnM7CisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICBXU19TRlRQX0ZJTEVBVFJCIGF0dHJzOworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICByYyA9IHdvbGZTU0hfU0ZUUF9TVEFUKHNzaGMtPnNzaF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRycyk7CisgICAgICAgICAgaWYocmMgIT0gV1NfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjdXJsX29mZl90IHNpemUgPSAoKGN1cmxfb2ZmX3QpYXR0cnMuc3pbMV0gPDwgMzIpIHwgYXR0cnMuc3pbMF07CisgICAgICAgICAgICBpZihzaXplIDwgMCkgeworICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gc2l6ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYoZGF0YS0+c2V0LmZ0cF9hcHBlbmQpCisgICAgICAgIC8qIFRyeSB0byBvcGVuIGZvciBhcHBlbmQsIGJ1dCBjcmVhdGUgaWYgbm9uZXhpc3RpbmcgKi8KKyAgICAgICAgZmxhZ3MgPSBXT0xGU1NIX0ZYRl9XUklURXxXT0xGU1NIX0ZYRl9DUkVBVHxXT0xGU1NIX0ZYRl9BUFBFTkQ7CisgICAgICBlbHNlIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkKKyAgICAgICAgLyogSWYgd2UgaGF2ZSByZXN0YXJ0IHBvc2l0aW9uIHRoZW4gb3BlbiBmb3IgYXBwZW5kICovCisgICAgICAgIGZsYWdzID0gV09MRlNTSF9GWEZfV1JJVEV8V09MRlNTSF9GWEZfQVBQRU5EOworICAgICAgZWxzZQorICAgICAgICAvKiBDbGVhciBmaWxlIGJlZm9yZSB3cml0aW5nIChub3JtYWwgYmVoYXZpb3VyKSAqLworICAgICAgICBmbGFncyA9IFdPTEZTU0hfRlhGX1dSSVRFfFdPTEZTU0hfRlhGX0NSRUFUfFdPTEZTU0hfRlhGX1RSVU5DOworCisgICAgICBtZW1zZXQoJmNyZWF0ZWF0dHJzLCAwLCBzaXplb2YoY3JlYXRlYXR0cnMpKTsKKyAgICAgIGNyZWF0ZWF0dHJzLnBlciA9ICh3b3JkMzIpZGF0YS0+c2V0Lm5ld19maWxlX3Blcm1zOworICAgICAgc3NoYy0+aGFuZGxlU3ogPSBzaXplb2Yoc3NoYy0+aGFuZGxlKTsKKyAgICAgIHJjID0gd29sZlNTSF9TRlRQX09wZW4oc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmNyZWF0ZWF0dHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5oYW5kbGUsICZzc2hjLT5oYW5kbGVTeik7CisgICAgICBpZihyYyA9PSBXU19GQVRBTF9FUlJPUikKKyAgICAgICAgcmMgPSB3b2xmU1NIX2dldF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBpZihyYyA9PSBXU19XQU5UX1JFQUQpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfUkVDVjsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19XQU5UX1dSSVRFKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1NFTkQ7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gV1NfU1VDQ0VTUykgeworICAgICAgICBpbmZvZihkYXRhLCAid29sZnNzaCBTRlRQIG9wZW4gc3VjY2VlZGVkIVxuIik7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIndvbGZzc2ggU0ZUUCB1cGxvYWQgb3BlbiBmYWlsZWQ6ICVkIiwgcmMpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NIOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCk7CisKKyAgICAgIC8qIElmIHdlIGhhdmUgYSByZXN0YXJ0IHBvaW50IHRoZW4gd2UgbmVlZCB0byBzZWVrIHRvIHRoZSBjb3JyZWN0CisgICAgICAgICBwb3NpdGlvbi4gKi8KKyAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID4gMCkgeworICAgICAgICAvKiBMZXQncyByZWFkIG9mZiB0aGUgcHJvcGVyIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBpbnB1dC4gKi8KKyAgICAgICAgaW50IHNlZWtlcnIgPSBDVVJMX1NFRUtGVU5DX09LOworICAgICAgICBpZihjb25uLT5zZWVrX2Z1bmMpIHsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCB0cnVlKTsKKyAgICAgICAgICBzZWVrZXJyID0gY29ubi0+c2Vla19mdW5jKGNvbm4tPnNlZWtfY2xpZW50LCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFRUtfU0VUKTsKKyAgICAgICAgICBDdXJsX3NldF9pbl9jYWxsYmFjayhkYXRhLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfT0spIHsKKyAgICAgICAgICBjdXJsX29mZl90IHBhc3NlZCA9IDA7CisKKyAgICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2Vla2VyciA9PSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLIChjYW4ndCBzZWVrIHRvIG9mZnNldCkgKi8KKyAgICAgICAgICBkbyB7CisgICAgICAgICAgICBzaXplX3QgcmVhZHRoaXNhbW91bnRub3cgPQorICAgICAgICAgICAgICAoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQgPiBkYXRhLT5zZXQuYnVmZmVyX3NpemUpID8KKyAgICAgICAgICAgICAgKHNpemVfdClkYXRhLT5zZXQuYnVmZmVyX3NpemUgOgorICAgICAgICAgICAgICBjdXJseF9zb3RvdXooZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQpOworCisgICAgICAgICAgICBzaXplX3QgYWN0dWFsbHlyZWFkOworICAgICAgICAgICAgQ3VybF9zZXRfaW5fY2FsbGJhY2soZGF0YSwgdHJ1ZSk7CisgICAgICAgICAgICBhY3R1YWxseXJlYWQgPSBkYXRhLT5zdGF0ZS5mcmVhZF9mdW5jKGRhdGEtPnN0YXRlLmJ1ZmZlciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHRoaXNhbW91bnRub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmluKTsKKyAgICAgICAgICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKKworICAgICAgICAgICAgcGFzc2VkICs9IGFjdHVhbGx5cmVhZDsKKyAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgICAvKiB0aGlzIGNoZWNrcyBmb3IgZ3JlYXRlci10aGFuIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgIENVUkxfUkVBREZVTkNfQUJPUlQgcmV0dXJuIGNvZGUgc3RpbGwgYWJvcnRzICovCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7CisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5vdywgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIHJlYWQgKi8KKyAgICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKKyAgICAgICAgICBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c3RhdGUuaW5maWxlc2l6ZTsKKyAgICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgICB9CisKKyAgICAgICAgc3NoYy0+b2Zmc2V0ICs9IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgfQorICAgICAgaWYoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA+IDApIHsKKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSBkYXRhLT5zdGF0ZS5pbmZpbGVzaXplOworICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnN0YXRlLmluZmlsZXNpemUpOworICAgICAgfQorICAgICAgLyogdXBsb2FkIGRhdGEgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgRklSU1RTT0NLRVQpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIHN0b3JlIHRoaXMgb3JpZ2luYWwgYml0bWFzayBzZXR1cCB0byB1c2UgbGF0ZXIgb24gaWYgd2UgY2FuJ3QKKyAgICAgICAgICAgZmlndXJlIG91dCBhICJyZWFsIiBiaXRtYXNrICovCisgICAgICAgIHNzaGMtPm9yaWdfd2FpdGZvciA9IGRhdGEtPnJlcS5rZWVwb247CisKKyAgICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9zZW5kaW5nXyBmdW5jdGlvbiBldmVuIHdoZW4gdGhlIHNvY2tldCB0dXJucworICAgICAgICAgICBvdXQgcmVhZGFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiBzZnRwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfT1VUOworCisgICAgICAgIC8qIHNpbmNlIHdlIGRvbid0IHJlYWxseSB3YWl0IGZvciBhbnl0aGluZyBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRoZQorICAgICAgICAgICBzdGF0ZSBtYWNoaW5lIHRvIG1vdmUgb24gYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB3ZSBzZXQgYSB2ZXJ5IHNob3J0CisgICAgICAgICAgIHRpbWVvdXQgaGVyZSAqLworICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCAwLCBFWFBJUkVfUlVOX05PVyk7CisKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU1NIX1NGVFBfRE9XTkxPQURfSU5JVDoKKyAgICAgIHNzaGMtPmhhbmRsZVN6ID0gc2l6ZW9mKHNzaGMtPmhhbmRsZSk7CisgICAgICByYyA9IHdvbGZTU0hfU0ZUUF9PcGVuKHNzaGMtPnNzaF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09MRlNTSF9GWEZfUkVBRCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+aGFuZGxlLCAmc3NoYy0+aGFuZGxlU3opOworICAgICAgaWYocmMgPT0gV1NfRkFUQUxfRVJST1IpCisgICAgICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYocmMgPT0gV1NfV0FOVF9SRUFEKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gV1NfV0FOVF9XUklURSkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1NVQ0NFU1MpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIndvbGZzc2ggU0ZUUCBvcGVuIHN1Y2NlZWRlZCFcbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorCisgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIG9wZW4gZmFpbGVkOiAlZCIsIHJjKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0g7CisKKyAgICBjYXNlIFNTSF9TRlRQX0RPV05MT0FEX1NUQVQ6IHsKKyAgICAgIFdTX1NGVFBfRklMRUFUUkIgYXR0cnM7CisgICAgICBjdXJsX29mZl90IHNpemU7CisKKyAgICAgIHJjID0gd29sZlNTSF9TRlRQX1NUQVQoc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLCAmYXR0cnMpOworICAgICAgaWYocmMgPT0gV1NfRkFUQUxfRVJST1IpCisgICAgICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYocmMgPT0gV1NfV0FOVF9SRUFEKSB7CisgICAgICAgICpibG9jayA9IFRSVUU7CisgICAgICAgIGNvbm4tPndhaXRmb3IgPSBLRUVQX1JFQ1Y7CisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gV1NfV0FOVF9XUklURSkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9TRU5EOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1NVQ0NFU1MpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIndvbGZzc2ggU1RBVCBzdWNjZWVkZWQhXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIG9wZW4gZmFpbGVkOiAlZCIsIHJjKTsKKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0g7CisgICAgICB9CisKKyAgICAgIHNpemUgPSAoKGN1cmxfb2ZmX3QpYXR0cnMuc3pbMV0gPDwzMikgfCBhdHRycy5zelswXTsKKworICAgICAgZGF0YS0+cmVxLnNpemUgPSBzaXplOworICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gc2l6ZTsKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKKworICAgICAgaW5mb2YoZGF0YSwgIlNGVFAgZG93bmxvYWQgJSIgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAiIGJ5dGVzXG4iLCBzaXplKTsKKworICAgICAgLyogV2UgY2Fubm90IHNlZWsgd2l0aCB3b2xmU1NIIHNvIHJlc3VtaW5nIGFuZCByYW5nZSByZXF1ZXN0cyBhcmUgbm90CisgICAgICAgICBwb3NzaWJsZSAqLworICAgICAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlX3JhbmdlIHx8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJ3b2xmU1NIIGNhbm5vdCBkbyByYW5nZS9zZWVrIG9uIFNGVFBcbiIpOworICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgIH0KKworICAgICAgLyogU2V0dXAgdGhlIGFjdHVhbCBkb3dubG9hZCAqLworICAgICAgaWYoZGF0YS0+cmVxLnNpemUgPT0gMCkgeworICAgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoZGF0YSwgLTEsIC0xLCBGQUxTRSwgLTEpOworICAgICAgICBpbmZvZihkYXRhLCAiRmlsZSBhbHJlYWR5IGNvbXBsZXRlbHkgZG93bmxvYWRlZFxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGRhdGEsIEZJUlNUU09DS0VULCBkYXRhLT5yZXEuc2l6ZSwgRkFMU0UsIC0xKTsKKworICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCisgICAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKKworICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICBvdXQgd3JpdGFibGVhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgLyogdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXI7IHRoZSBjbG9zZSBzdGF0ZSBzaG91bGQgYmUgZW50ZXJlZAorICAgICAgICAgICBhdCB0aGUgdGltZSB0aGUgZXJyb3Igb2NjdXJzICovCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTU0hfU0ZUUF9DTE9TRToKKyAgICAgIGlmKHNzaGMtPmhhbmRsZVN6KQorICAgICAgICByYyA9IHdvbGZTU0hfU0ZUUF9DbG9zZShzc2hjLT5zc2hfc2Vzc2lvbiwgc3NoYy0+aGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5oYW5kbGVTeik7CisgICAgICBlbHNlCisgICAgICAgIHJjID0gV1NfU1VDQ0VTUzsgLyogZGlyZWN0b3J5IGxpc3RpbmcgKi8KKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSBXU19TVUNDRVNTKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorCisgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIENMT1NFIGZhaWxlZDogJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NIOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0lOSVQ6CisgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgLTEpOworICAgICAgaWYoZGF0YS0+c2V0Lm9wdF9ub19ib2R5KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSOgorICAgICAgbmFtZSA9IHdvbGZTU0hfU0ZUUF9MUyhzc2hjLT5zc2hfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgpOworICAgICAgaWYoIW5hbWUpCisgICAgICAgIHJjID0gd29sZlNTSF9nZXRfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgZWxzZQorICAgICAgICByYyA9IFdTX1NVQ0NFU1M7CisKKyAgICAgIGlmKHJjID09IFdTX1dBTlRfUkVBRCkgeworICAgICAgICAqYmxvY2sgPSBUUlVFOworICAgICAgICBjb25uLT53YWl0Zm9yID0gS0VFUF9SRUNWOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjID09IFdTX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgKmJsb2NrID0gVFJVRTsKKyAgICAgICAgY29ubi0+d2FpdGZvciA9IEtFRVBfU0VORDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihuYW1lICYmIChyYyA9PSBXU19TVUNDRVNTKSkgeworICAgICAgICBXU19TRlRQTkFNRSAqb3JpZ25hbWUgPSBuYW1lOworICAgICAgICByZXN1bHQgPSBDVVJMRV9PSzsKKyAgICAgICAgd2hpbGUobmFtZSkgeworICAgICAgICAgIGNoYXIgKmxpbmUgPSBhcHJpbnRmKCIlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuZnRwX2xpc3Rfb25seSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS0+Zk5hbWUgOiBuYW1lLT5sTmFtZSk7CisgICAgICAgICAgaWYobGluZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsIHN0cmxlbihsaW5lKSk7CisgICAgICAgICAgZnJlZShsaW5lKTsKKyAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgbmFtZSA9IG5hbWUtPm5leHQ7CisgICAgICAgIH0KKyAgICAgICAgd29sZlNTSF9TRlRQTkFNRV9saXN0X2ZyZWUob3JpZ25hbWUpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgICBmYWlsZihkYXRhLCAid29sZnNzaCBTRlRQIGxzIGZhaWxlZDogJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NIOworCisgICAgY2FzZSBTU0hfU0ZUUF9TSFVURE9XTjoKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+aG9tZWRpcik7CisgICAgICB3b2xmU1NIX2ZyZWUoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgd29sZlNTSF9DVFhfZnJlZShzc2hjLT5jdHgpOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIH0gd2hpbGUoIXJjICYmIChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLworc3RhdGljIENVUkxjb2RlIHdzc2hfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBib29sIGJsb2NrOyAvKiB3ZSBzdG9yZSB0aGUgc3RhdHVzIGFuZCB1c2UgdGhhdCB0byBwcm92aWRlIGEgc3NoX2dldHNvY2soKQorICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAqLworICBkbyB7CisgICAgcmVzdWx0ID0gd3NzaF9zdGF0ZW1hY2hfYWN0KGNvbm4sICZibG9jayk7CisgICAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOworICAgIC8qIGlmIHRoZXJlJ3Mgbm8gZXJyb3IsIGl0IGlzbid0IGRvbmUgYW5kIGl0IGRpZG4ndCBFV09VTERCTE9DSywgdGhlbgorICAgICAgIHRyeSBhZ2FpbiAqLworICAgIGlmKCpkb25lKSB7CisgICAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIndzc2hfc3RhdGVtYWNoX2FjdCBzYXlzIERPTkVcbiIpKTsKKyAgICB9CisgIH0gd2hpbGUoIXJlc3VsdCAmJiAhKmRvbmUgJiYgIWJsb2NrKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMKK0NVUkxjb2RlIHdzY3BfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpY29ubmVjdGVkOworICAodm9pZClkb3BoYXNlX2RvbmU7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljCitDVVJMY29kZSB3c2Z0cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfSU5JVCk7CisKKyAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgIHJlc3VsdCA9IHdzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGUgRE8gZnVuY3Rpb24gaXMgZ2VuZXJpYyBmb3IgYm90aCBwcm90b2NvbHMuCisgKi8KK3N0YXRpYyBDVVJMY29kZSB3c3NoX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBib29sIGNvbm5lY3RlZCA9IDA7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworICAqZG9uZSA9IEZBTFNFOyAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisgIGRhdGEtPnJlcS5zaXplID0gLTE7IC8qIG1ha2Ugc3VyZSB0aGlzIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCAqLworICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT0s7IC8qIHJlc2V0IGVycm9yIGNvZGUgKi8KKyAgc3NoYy0+c2Vjb25kQ3JlYXRlRGlycyA9IDA7ICAgLyogcmVzZXQgdGhlIGNyZWF0ZSBkaXIgYXR0ZW1wdCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAqLworCisgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCAtMSk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAtMSk7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU0NQKQorICAgIHJlc3VsdCA9IHdzY3BfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCAgZG9uZSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSB3c2Z0cF9wZXJmb3JtKGNvbm4sICZjb25uZWN0ZWQsICBkb25lKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgd3NzaF9ibG9ja19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkaXNjb25uZWN0KQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIHdoaWxlKChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkgJiYgIXJlc3VsdCkgeworICAgIGJvb2wgYmxvY2s7CisgICAgdGltZWRpZmZfdCBsZWZ0ID0gMTAwMDsKKyAgICBzdHJ1Y3QgY3VybHRpbWUgbm93ID0gQ3VybF9ub3coKTsKKworICAgIHJlc3VsdCA9IHdzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworCisgICAgaWYoIWRpc2Nvbm5lY3QpIHsKKyAgICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisKKyAgICAgIHJlc3VsdCA9IEN1cmxfc3BlZWRjaGVjayhkYXRhLCBub3cpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBicmVhazsKKworICAgICAgbGVmdCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgRkFMU0UpOworICAgICAgaWYobGVmdCA8IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZighcmVzdWx0KSB7CisgICAgICBpbnQgZGlyID0gY29ubi0+d2FpdGZvcjsKKyAgICAgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICAgICAgY3VybF9zb2NrZXRfdCBmZF9yZWFkID0gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgY3VybF9zb2NrZXRfdCBmZF93cml0ZSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgIGlmKGRpciA9PSBLRUVQX1JFQ1YpCisgICAgICAgIGZkX3JlYWQgPSBzb2NrOworICAgICAgZWxzZSBpZihkaXIgPT0gS0VFUF9TRU5EKQorICAgICAgICBmZF93cml0ZSA9IHNvY2s7CisKKyAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCisgICAgICAodm9pZClDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsIGZkX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD4xMDAwPzEwMDA6bGVmdCk7IC8qIGlnbm9yZSByZXN1bHQgKi8KKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBnZW5lcmljIGRvbmUgZnVuY3Rpb24gZm9yIGJvdGggU0NQIGFuZCBTRlRQIGNhbGxlZCBmcm9tIHRoZWlyIHNwZWNpZmljCisgICBkb25lIGZ1bmN0aW9ucyAqLworc3RhdGljIENVUkxjb2RlIHdzc2hfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTU0hQUk9UTyAqc2Z0cF9zY3AgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgIGlmKCFzdGF0dXMpIHsKKyAgICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgICByZXN1bHQgPSB3c3NoX2Jsb2NrX3N0YXRlbWFjaChjb25uLCBGQUxTRSk7CisgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IHN0YXR1czsKKworICBpZihzZnRwX3NjcCkKKyAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKKyAgaWYoQ3VybF9wZ3JzRG9uZShjb25uKSkKKyAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKworICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgLyogY2xlYXIgYWxsIGJpdHMgKi8KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIDAKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlIGNvZGUsIGJvb2wgcHJlbWF0dXJlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpY29kZTsKKyAgKHZvaWQpcHJlbWF0dXJlOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpZG9waGFzZV9kb25lOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWNvbm47CisgICh2b2lkKWRlYWRfY29ubmVjdGlvbjsKKworICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgY29kZSwgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKXByZW1hdHVyZTsKKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworCisgIHJldHVybiB3c3NoX2RvbmUoY29ubiwgY29kZSk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB3c2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IHdzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgd3NmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICh2b2lkKWRlYWQ7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJTU0ggRElTQ09OTkVDVCBzdGFydHMgbm93XG4iKSk7CisKKyAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7CisgICAgcmVzdWx0ID0gd3NzaF9ibG9ja19zdGF0ZW1hY2goY29ubiwgVFJVRSk7CisgIH0KKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIGlzIGRvbmVcbiIpKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3c3NoX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgcmV0dXJuIHdzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2spOworfQorCitzdGF0aWMgaW50IHdzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaykKK3sKKyAgaW50IGJpdG1hcCA9IEdFVFNPQ0tfQkxBTks7CisgIGludCBkaXIgPSBjb25uLT53YWl0Zm9yOworICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgaWYoZGlyID09IEtFRVBfUkVDVikKKyAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7CisgIGVsc2UgaWYoZGlyID09IEtFRVBfU0VORCkKKyAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOworCisgIHJldHVybiBiaXRtYXA7Cit9CisKK3NpemVfdCBDdXJsX3NzaF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIGJ1ZmxlbiwgIndvbGZzc2gvJXMiLCBMSUJXT0xGU1NIX1ZFUlNJT05fU1RSSU5HKTsKK30KKworQ1VSTGNvZGUgQ3VybF9zc2hfaW5pdCh2b2lkKQoreworICBpZihXU19TVUNDRVNTICE9IHdvbGZTU0hfSW5pdCgpKSB7CisgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHdvbGZTU0hfSW5pdCBmYWlsZWRcbiIpKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9Cit2b2lkIEN1cmxfc3NoX2NsZWFudXAodm9pZCkKK3sKK30KKworI2VuZGlmIC8qIFVTRV9XT0xGU1NIICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Zzc2gvd29sZnNzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjlhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92c3NoL3dvbGZzc2guaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1dPTEZTU0hfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9XT0xGU1NIX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHA7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9XT0xGU1NIX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvYmVhcnNzbC5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9iZWFyc3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4ZTE2YQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvYmVhcnNzbC5jCkBAIC0wLDAgKzEsODcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgLSAyMDIwLCBNaWNoYWVsIEZvcm5leSwgPG1mb3JuZXlAbWZvcm5leS5vcmc+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfQkVBUlNTTAorCisjaW5jbHVkZSA8YmVhcnNzbC5oPgorCisjaW5jbHVkZSAiYmVhcnNzbC5oIgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgorI2luY2x1ZGUgInZ0bHMuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworc3RydWN0IHg1MDlfY29udGV4dCB7CisgIGNvbnN0IGJyX3g1MDlfY2xhc3MgKnZ0YWJsZTsKKyAgYnJfeDUwOV9taW5pbWFsX2NvbnRleHQgbWluaW1hbDsKKyAgYm9vbCB2ZXJpZnlob3N0OworICBib29sIHZlcmlmeXBlZXI7Cit9OworCitzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSB7CisgIGJyX3NzbF9jbGllbnRfY29udGV4dCBjdHg7CisgIHN0cnVjdCB4NTA5X2NvbnRleHQgeDUwOTsKKyAgdW5zaWduZWQgY2hhciBidWZbQlJfU1NMX0JVRlNJWkVfQklESV07CisgIGJyX3g1MDlfdHJ1c3RfYW5jaG9yICphbmNob3JzOworICBzaXplX3QgYW5jaG9yc19sZW47CisgIGNvbnN0IGNoYXIgKnByb3RvY29sc1syXTsKKyAgLyogU1NMIGNsaWVudCBjb250ZXh0IGlzIGFjdGl2ZSAqLworICBib29sIGFjdGl2ZTsKKyAgLyogc2l6ZSBvZiBwZW5kaW5nIHdyaXRlLCB5ZXQgdG8gYmUgZmx1c2hlZCAqLworICBzaXplX3QgcGVuZGluZ193cml0ZTsKK307CisKK3N0cnVjdCBjYWZpbGVfcGFyc2VyIHsKKyAgQ1VSTGNvZGUgZXJyOworICBib29sIGluX2NlcnQ7CisgIGJyX3g1MDlfZGVjb2Rlcl9jb250ZXh0IHhjOworICAvKiBhcnJheSBvZiB0cnVzdCBhbmNob3JzIGxvYWRlZCBmcm9tIENBZmlsZSAqLworICBicl94NTA5X3RydXN0X2FuY2hvciAqYW5jaG9yczsKKyAgc2l6ZV90IGFuY2hvcnNfbGVuOworICAvKiBidWZmZXIgZm9yIEROIGRhdGEgKi8KKyAgdW5zaWduZWQgY2hhciBkblsxMDI0XTsKKyAgc2l6ZV90IGRuX2xlbjsKK307CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9kbih2b2lkICpjdHgsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyAgc3RydWN0IGNhZmlsZV9wYXJzZXIgKmNhID0gY3R4OworCisgIGlmKGNhLT5lcnIgIT0gQ1VSTEVfT0sgfHwgIWNhLT5pbl9jZXJ0KQorICAgIHJldHVybjsKKyAgaWYoc2l6ZW9mKGNhLT5kbikgLSBjYS0+ZG5fbGVuIDwgbGVuKSB7CisgICAgY2EtPmVyciA9IENVUkxFX0ZBSUxFRF9JTklUOworICAgIHJldHVybjsKKyAgfQorICBtZW1jcHkoY2EtPmRuICsgY2EtPmRuX2xlbiwgYnVmLCBsZW4pOworICBjYS0+ZG5fbGVuICs9IGxlbjsKK30KKworc3RhdGljIHZvaWQgeDUwOV9wdXNoKHZvaWQgKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgY2FmaWxlX3BhcnNlciAqY2EgPSBjdHg7CisKKyAgaWYoY2EtPmluX2NlcnQpCisgICAgYnJfeDUwOV9kZWNvZGVyX3B1c2goJmNhLT54YywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbG9hZF9jYWZpbGUoY29uc3QgY2hhciAqcGF0aCwgYnJfeDUwOV90cnVzdF9hbmNob3IgKiphbmNob3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYW5jaG9yc19sZW4pCit7CisgIHN0cnVjdCBjYWZpbGVfcGFyc2VyIGNhOworICBicl9wZW1fZGVjb2Rlcl9jb250ZXh0IHBjOworICBicl94NTA5X3RydXN0X2FuY2hvciAqdGE7CisgIHNpemVfdCB0YV9zaXplOworICBicl94NTA5X3RydXN0X2FuY2hvciAqbmV3X2FuY2hvcnM7CisgIHNpemVfdCBuZXdfYW5jaG9yc19sZW47CisgIGJyX3g1MDlfcGtleSAqcGtleTsKKyAgRklMRSAqZnA7CisgIHVuc2lnbmVkIGNoYXIgYnVmW0JVRlNJWl0sICpwOworICBjb25zdCBjaGFyICpuYW1lOworICBzaXplX3QgbiwgaSwgcHVzaGVkOworCisgIGZwID0gZm9wZW4ocGF0aCwgInJiIik7CisgIGlmKCFmcCkKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworCisgIGNhLmVyciA9IENVUkxFX09LOworICBjYS5pbl9jZXJ0ID0gRkFMU0U7CisgIGNhLmFuY2hvcnMgPSBOVUxMOworICBjYS5hbmNob3JzX2xlbiA9IDA7CisgIGJyX3BlbV9kZWNvZGVyX2luaXQoJnBjKTsKKyAgYnJfcGVtX2RlY29kZXJfc2V0ZGVzdCgmcGMsIHg1MDlfcHVzaCwgJmNhKTsKKyAgZm9yKDs7KSB7CisgICAgbiA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIGZwKTsKKyAgICBpZihuID09IDApCisgICAgICBicmVhazsKKyAgICBwID0gYnVmOworICAgIHdoaWxlKG4pIHsKKyAgICAgIHB1c2hlZCA9IGJyX3BlbV9kZWNvZGVyX3B1c2goJnBjLCBwLCBuKTsKKyAgICAgIGlmKGNhLmVycikKKyAgICAgICAgZ290byBmYWlsOworICAgICAgcCArPSBwdXNoZWQ7CisgICAgICBuIC09IHB1c2hlZDsKKworICAgICAgc3dpdGNoKGJyX3BlbV9kZWNvZGVyX2V2ZW50KCZwYykpIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJSX1BFTV9CRUdJTl9PQko6CisgICAgICAgIG5hbWUgPSBicl9wZW1fZGVjb2Rlcl9uYW1lKCZwYyk7CisgICAgICAgIGlmKHN0cmNtcChuYW1lLCAiQ0VSVElGSUNBVEUiKSAmJiBzdHJjbXAobmFtZSwgIlg1MDkgQ0VSVElGSUNBVEUiKSkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgYnJfeDUwOV9kZWNvZGVyX2luaXQoJmNhLnhjLCBhcHBlbmRfZG4sICZjYSk7CisgICAgICAgIGlmKGNhLmFuY2hvcnNfbGVuID09IFNJWkVfTUFYIC8gc2l6ZW9mKGNhLmFuY2hvcnNbMF0pKSB7CisgICAgICAgICAgY2EuZXJyID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgbmV3X2FuY2hvcnNfbGVuID0gY2EuYW5jaG9yc19sZW4gKyAxOworICAgICAgICBuZXdfYW5jaG9ycyA9IHJlYWxsb2MoY2EuYW5jaG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19hbmNob3JzX2xlbiAqIHNpemVvZihjYS5hbmNob3JzWzBdKSk7CisgICAgICAgIGlmKCFuZXdfYW5jaG9ycykgeworICAgICAgICAgIGNhLmVyciA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIGNhLmFuY2hvcnMgPSBuZXdfYW5jaG9yczsKKyAgICAgICAgY2EuYW5jaG9yc19sZW4gPSBuZXdfYW5jaG9yc19sZW47CisgICAgICAgIGNhLmluX2NlcnQgPSBUUlVFOworICAgICAgICBjYS5kbl9sZW4gPSAwOworICAgICAgICB0YSA9ICZjYS5hbmNob3JzW2NhLmFuY2hvcnNfbGVuIC0gMV07CisgICAgICAgIHRhLT5kbi5kYXRhID0gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJSX1BFTV9FTkRfT0JKOgorICAgICAgICBpZighY2EuaW5fY2VydCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2EuaW5fY2VydCA9IEZBTFNFOworICAgICAgICBpZihicl94NTA5X2RlY29kZXJfbGFzdF9lcnJvcigmY2EueGMpKSB7CisgICAgICAgICAgY2EuZXJyID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICB0YS0+ZmxhZ3MgPSAwOworICAgICAgICBpZihicl94NTA5X2RlY29kZXJfaXNDQSgmY2EueGMpKQorICAgICAgICAgIHRhLT5mbGFncyB8PSBCUl9YNTA5X1RBX0NBOworICAgICAgICBwa2V5ID0gYnJfeDUwOV9kZWNvZGVyX2dldF9wa2V5KCZjYS54Yyk7CisgICAgICAgIGlmKCFwa2V5KSB7CisgICAgICAgICAgY2EuZXJyID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICB0YS0+cGtleSA9ICpwa2V5OworCisgICAgICAgIC8qIGNhbGN1bGF0ZSBzcGFjZSBuZWVkZWQgZm9yIHRydXN0IGFuY2hvciBkYXRhICovCisgICAgICAgIHRhX3NpemUgPSBjYS5kbl9sZW47CisgICAgICAgIHN3aXRjaChwa2V5LT5rZXlfdHlwZSkgeworICAgICAgICBjYXNlIEJSX0tFWVRZUEVfUlNBOgorICAgICAgICAgIHRhX3NpemUgKz0gcGtleS0+a2V5LnJzYS5ubGVuICsgcGtleS0+a2V5LnJzYS5lbGVuOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJSX0tFWVRZUEVfRUM6CisgICAgICAgICAgdGFfc2l6ZSArPSBwa2V5LT5rZXkuZWMucWxlbjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBjYS5lcnIgPSBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICAvKiBmaWxsIGluIHRydXN0IGFuY2hvciBETiBhbmQgcHVibGljIGtleSBkYXRhICovCisgICAgICAgIHRhLT5kbi5kYXRhID0gbWFsbG9jKHRhX3NpemUpOworICAgICAgICBpZighdGEtPmRuLmRhdGEpIHsKKyAgICAgICAgICBjYS5lcnIgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodGEtPmRuLmRhdGEsIGNhLmRuLCBjYS5kbl9sZW4pOworICAgICAgICB0YS0+ZG4ubGVuID0gY2EuZG5fbGVuOworICAgICAgICBzd2l0Y2gocGtleS0+a2V5X3R5cGUpIHsKKyAgICAgICAgY2FzZSBCUl9LRVlUWVBFX1JTQToKKyAgICAgICAgICB0YS0+cGtleS5rZXkucnNhLm4gPSB0YS0+ZG4uZGF0YSArIHRhLT5kbi5sZW47CisgICAgICAgICAgbWVtY3B5KHRhLT5wa2V5LmtleS5yc2EubiwgcGtleS0+a2V5LnJzYS5uLCBwa2V5LT5rZXkucnNhLm5sZW4pOworICAgICAgICAgIHRhLT5wa2V5LmtleS5yc2EuZSA9IHRhLT5wa2V5LmtleS5yc2EubiArIHRhLT5wa2V5LmtleS5yc2EubmxlbjsKKyAgICAgICAgICBtZW1jcHkodGEtPnBrZXkua2V5LnJzYS5lLCBwa2V5LT5rZXkucnNhLmUsIHBrZXktPmtleS5yc2EuZWxlbik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJfS0VZVFlQRV9FQzoKKyAgICAgICAgICB0YS0+cGtleS5rZXkuZWMucSA9IHRhLT5kbi5kYXRhICsgdGEtPmRuLmxlbjsKKyAgICAgICAgICBtZW1jcHkodGEtPnBrZXkua2V5LmVjLnEsIHBrZXktPmtleS5lYy5xLCBwa2V5LT5rZXkuZWMucWxlbik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBjYS5lcnIgPSBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYoZmVycm9yKGZwKSkKKyAgICBjYS5lcnIgPSBDVVJMRV9SRUFEX0VSUk9SOworCitmYWlsOgorICBmY2xvc2UoZnApOworICBpZihjYS5lcnIgPT0gQ1VSTEVfT0spIHsKKyAgICAqYW5jaG9ycyA9IGNhLmFuY2hvcnM7CisgICAgKmFuY2hvcnNfbGVuID0gY2EuYW5jaG9yc19sZW47CisgIH0KKyAgZWxzZSB7CisgICAgZm9yKGkgPSAwOyBpIDwgY2EuYW5jaG9yc19sZW47ICsraSkKKyAgICAgIGZyZWUoY2EuYW5jaG9yc1tpXS5kbi5kYXRhKTsKKyAgICBmcmVlKGNhLmFuY2hvcnMpOworICB9CisKKyAgcmV0dXJuIGNhLmVycjsKK30KKworc3RhdGljIHZvaWQgeDUwOV9zdGFydF9jaGFpbihjb25zdCBicl94NTA5X2NsYXNzICoqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZXJ2ZXJfbmFtZSkKK3sKKyAgc3RydWN0IHg1MDlfY29udGV4dCAqeDUwOSA9IChzdHJ1Y3QgeDUwOV9jb250ZXh0ICopY3R4OworCisgIGlmKCF4NTA5LT52ZXJpZnlob3N0KQorICAgIHNlcnZlcl9uYW1lID0gTlVMTDsKKyAgeDUwOS0+bWluaW1hbC52dGFibGUtPnN0YXJ0X2NoYWluKCZ4NTA5LT5taW5pbWFsLnZ0YWJsZSwgc2VydmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCB4NTA5X3N0YXJ0X2NlcnQoY29uc3QgYnJfeDUwOV9jbGFzcyAqKmN0eCwgdWludDMyX3QgbGVuZ3RoKQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisKKyAgeDUwOS0+bWluaW1hbC52dGFibGUtPnN0YXJ0X2NlcnQoJng1MDktPm1pbmltYWwudnRhYmxlLCBsZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCB4NTA5X2FwcGVuZChjb25zdCBicl94NTA5X2NsYXNzICoqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisKKyAgeDUwOS0+bWluaW1hbC52dGFibGUtPmFwcGVuZCgmeDUwOS0+bWluaW1hbC52dGFibGUsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgeDUwOV9lbmRfY2VydChjb25zdCBicl94NTA5X2NsYXNzICoqY3R4KQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisKKyAgeDUwOS0+bWluaW1hbC52dGFibGUtPmVuZF9jZXJ0KCZ4NTA5LT5taW5pbWFsLnZ0YWJsZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB4NTA5X2VuZF9jaGFpbihjb25zdCBicl94NTA5X2NsYXNzICoqY3R4KQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisgIHVuc2lnbmVkIGVycjsKKworICBlcnIgPSB4NTA5LT5taW5pbWFsLnZ0YWJsZS0+ZW5kX2NoYWluKCZ4NTA5LT5taW5pbWFsLnZ0YWJsZSk7CisgIGlmKGVyciAmJiAheDUwOS0+dmVyaWZ5cGVlcikgeworICAgIC8qIGlnbm9yZSBhbnkgWC41MDkgZXJyb3JzICovCisgICAgZXJyID0gQlJfRVJSX09LOworICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IGJyX3g1MDlfcGtleSAqeDUwOV9nZXRfcGtleShjb25zdCBicl94NTA5X2NsYXNzICpjb25zdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqdXNhZ2VzKQoreworICBzdHJ1Y3QgeDUwOV9jb250ZXh0ICp4NTA5ID0gKHN0cnVjdCB4NTA5X2NvbnRleHQgKiljdHg7CisKKyAgcmV0dXJuIHg1MDktPm1pbmltYWwudnRhYmxlLT5nZXRfcGtleSgmeDUwOS0+bWluaW1hbC52dGFibGUsIHVzYWdlcyk7Cit9CisKK3N0YXRpYyBjb25zdCBicl94NTA5X2NsYXNzIHg1MDlfdnRhYmxlID0geworICBzaXplb2Yoc3RydWN0IHg1MDlfY29udGV4dCksCisgIHg1MDlfc3RhcnRfY2hhaW4sCisgIHg1MDlfc3RhcnRfY2VydCwKKyAgeDUwOV9hcHBlbmQsCisgIHg1MDlfZW5kX2NlcnQsCisgIHg1MDlfZW5kX2NoYWluLAorICB4NTA5X2dldF9wa2V5Cit9OworCitzdGF0aWMgQ1VSTGNvZGUgYmVhcnNzbF9jb25uZWN0X3N0ZXAxKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7CisgIGNvbnN0IGNoYXIgKmhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBib29sIHZlcmlmeXBlZXIgPSBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik7CisgIGNvbnN0IGJvb2wgdmVyaWZ5aG9zdCA9IFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KTsKKyAgQ1VSTGNvZGUgcmV0OworICB1bnNpZ25lZCB2ZXJzaW9uX21pbiwgdmVyc2lvbl9tYXg7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI7CisjZWxzZQorICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworI2VuZGlmCisKKyAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgeworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKKyAgICBmYWlsZihkYXRhLCAiQmVhclNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKKyAgICBmYWlsZihkYXRhLCAiQmVhclNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYzIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgorICAgIHZlcnNpb25fbWluID0gQlJfVExTMTA7CisgICAgdmVyc2lvbl9tYXggPSBCUl9UTFMxMDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyAgICB2ZXJzaW9uX21pbiA9IEJSX1RMUzExOworICAgIHZlcnNpb25fbWF4ID0gQlJfVExTMTE7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6CisgICAgdmVyc2lvbl9taW4gPSBCUl9UTFMxMjsKKyAgICB2ZXJzaW9uX21heCA9IEJSX1RMUzEyOworICAgIGJyZWFrOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKKyAgICB2ZXJzaW9uX21pbiA9IEJSX1RMUzEwOworICAgIHZlcnNpb25fbWF4ID0gQlJfVExTMTI7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgZmFpbGYoZGF0YSwgIkJlYXJTU0w6IHVua25vd24gQ1VSTE9QVF9TU0xWRVJTSU9OIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisKKyAgaWYoc3NsX2NhZmlsZSkgeworICAgIHJldCA9IGxvYWRfY2FmaWxlKHNzbF9jYWZpbGUsICZiYWNrZW5kLT5hbmNob3JzLCAmYmFja2VuZC0+YW5jaG9yc19sZW4pOworICAgIGlmKHJldCAhPSBDVVJMRV9PSykgeworICAgICAgaWYodmVyaWZ5cGVlcikgeworICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgorICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4iLCBzc2xfY2FmaWxlKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnMsIgorICAgICAgICAgICAgIiBjb250aW51aW5nIGFueXdheTpcbiIpOworICAgIH0KKyAgfQorCisgIC8qIGluaXRpYWxpemUgU1NMIGNvbnRleHQgKi8KKyAgYnJfc3NsX2NsaWVudF9pbml0X2Z1bGwoJmJhY2tlbmQtPmN0eCwgJmJhY2tlbmQtPng1MDkubWluaW1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC0+YW5jaG9ycywgYmFja2VuZC0+YW5jaG9yc19sZW4pOworICBicl9zc2xfZW5naW5lX3NldF92ZXJzaW9ucygmYmFja2VuZC0+Y3R4LmVuZywgdmVyc2lvbl9taW4sIHZlcnNpb25fbWF4KTsKKyAgYnJfc3NsX2VuZ2luZV9zZXRfYnVmZmVyKCZiYWNrZW5kLT5jdHguZW5nLCBiYWNrZW5kLT5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYmFja2VuZC0+YnVmKSwgMSk7CisKKyAgLyogaW5pdGlhbGl6ZSBYLjUwOSBjb250ZXh0ICovCisgIGJhY2tlbmQtPng1MDkudnRhYmxlID0gJng1MDlfdnRhYmxlOworICBiYWNrZW5kLT54NTA5LnZlcmlmeXBlZXIgPSB2ZXJpZnlwZWVyOworICBiYWNrZW5kLT54NTA5LnZlcmlmeWhvc3QgPSB2ZXJpZnlob3N0OworICBicl9zc2xfZW5naW5lX3NldF94NTA5KCZiYWNrZW5kLT5jdHguZW5nLCAmYmFja2VuZC0+eDUwOS52dGFibGUpOworCisgIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgeworICAgIHZvaWQgKnNlc3Npb247CisKKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKKyAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzZXNzaW9uLCBOVUxMLCBzb2NraW5kZXgpKSB7CisgICAgICBicl9zc2xfZW5naW5lX3NldF9zZXNzaW9uX3BhcmFtZXRlcnMoJmJhY2tlbmQtPmN0eC5lbmcsIHNlc3Npb24pOworICAgICAgaW5mb2YoZGF0YSwgIkJlYXJTU0w6IHJlLXVzaW5nIHNlc3Npb24gSURcbiIpOworICAgIH0KKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOworICB9CisKKyAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKKyAgICBpbnQgY3VyID0gMDsKKworICAgIC8qIE5PVEU6IHdoZW4gYWRkaW5nIG1vcmUgcHJvdG9jb2xzIGhlcmUsIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZQorICAgICAqIHByb3RvY29scyBhcnJheSBpbiBgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGFgLgorICAgICAqLworCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMiAmJgorICAgICAgICghU1NMX0lTX1BST1hZKCkgfHwgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5KSkgeworICAgICAgYmFja2VuZC0+cHJvdG9jb2xzW2N1cisrXSA9IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRDsKKyAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEKTsKKyAgICB9CisjZW5kaWYKKworICAgIGJhY2tlbmQtPnByb3RvY29sc1tjdXIrK10gPSBBTFBOX0hUVFBfMV8xOworICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgQUxQTl9IVFRQXzFfMSk7CisKKyAgICBicl9zc2xfZW5naW5lX3NldF9wcm90b2NvbF9uYW1lcygmYmFja2VuZC0+Y3R4LmVuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLT5wcm90b2NvbHMsIGN1cik7CisgIH0KKworICBpZigoMSA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmFkZHIpKQorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICB8fCAoMSA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZhZGRyKSkKKyNlbmRpZgorICAgICApIHsKKyAgICBpZih2ZXJpZnlob3N0KSB7CisgICAgICBmYWlsZihkYXRhLCAiQmVhclNTTDogIgorICAgICAgICAgICAgImhvc3QgdmVyaWZpY2F0aW9uIG9mIElQIGFkZHJlc3MgaXMgbm90IHN1cHBvcnRlZCIpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICB9CisgICAgaG9zdG5hbWUgPSBOVUxMOworICB9CisKKyAgaWYoIWJyX3NzbF9jbGllbnRfcmVzZXQoJmJhY2tlbmQtPmN0eCwgaG9zdG5hbWUsIDApKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgYmFja2VuZC0+YWN0aXZlID0gVFJVRTsKKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMjsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBiZWFyc3NsX3J1bl91bnRpbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0KQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHVuc2lnbmVkIHN0YXRlOworICB1bnNpZ25lZCBjaGFyICpidWY7CisgIHNpemVfdCBsZW47CisgIHNzaXplX3QgcmV0OworICBpbnQgZXJyOworCisgIGZvcig7OykgeworICAgIHN0YXRlID0gYnJfc3NsX2VuZ2luZV9jdXJyZW50X3N0YXRlKCZiYWNrZW5kLT5jdHguZW5nKTsKKyAgICBpZihzdGF0ZSAmIEJSX1NTTF9DTE9TRUQpIHsKKyAgICAgIGVyciA9IGJyX3NzbF9lbmdpbmVfbGFzdF9lcnJvcigmYmFja2VuZC0+Y3R4LmVuZyk7CisgICAgICBzd2l0Y2goZXJyKSB7CisgICAgICBjYXNlIEJSX0VSUl9PSzoKKyAgICAgICAgLyogVExTIGNsb3NlIG5vdGlmeSAqLworICAgICAgICBpZihjb25uc3NsLT5zdGF0ZSAhPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvbm5lY3Rpb24gY2xvc2VkIGR1cmluZyBoYW5kc2hha2UiKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgY2FzZSBCUl9FUlJfWDUwOV9FWFBJUkVEOgorICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBYLjUwOSB2ZXJpZmljYXRpb246ICIKKyAgICAgICAgICAgICAgImNlcnRpZmljYXRlIGlzIGV4cGlyZWQgb3Igbm90IHlldCB2YWxpZCIpOworICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgICAgY2FzZSBCUl9FUlJfWDUwOV9CQURfU0VSVkVSX05BTUU6CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFguNTA5IHZlcmlmaWNhdGlvbjogIgorICAgICAgICAgICAgICAiZXhwZWN0ZWQgc2VydmVyIG5hbWUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgY2hhaW4iKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIGNhc2UgQlJfRVJSX1g1MDlfTk9UX1RSVVNURUQ6CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFguNTA5IHZlcmlmaWNhdGlvbjogIgorICAgICAgICAgICAgICAiY2hhaW4gY291bGQgbm90IGJlIGxpbmtlZCB0byBhIHRydXN0IGFuY2hvciIpOworICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgICAgfQorICAgICAgLyogWC41MDkgZXJyb3JzIGFyZSBkb2N1bWVudGVkIHRvIGhhdmUgdGhlIHJhbmdlIDMyLi42MyAqLworICAgICAgaWYoZXJyID49IDMyICYmIGVyciA8IDY0KQorICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgICBpZihzdGF0ZSAmIHRhcmdldCkKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICBpZihzdGF0ZSAmIEJSX1NTTF9TRU5EUkVDKSB7CisgICAgICBidWYgPSBicl9zc2xfZW5naW5lX3NlbmRyZWNfYnVmKCZiYWNrZW5kLT5jdHguZW5nLCAmbGVuKTsKKyAgICAgIHJldCA9IHN3cml0ZShzb2NrZmQsIGJ1ZiwgbGVuKTsKKyAgICAgIGlmKHJldCA9PSAtMSkgeworICAgICAgICBpZihTT0NLRVJSTk8gPT0gRUFHQUlOIHx8IFNPQ0tFUlJOTyA9PSBFV09VTERCTE9DSykgeworICAgICAgICAgIGlmKGNvbm5zc2wtPnN0YXRlICE9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlKQorICAgICAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfd3JpdGluZzsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENVUkxFX1dSSVRFX0VSUk9SOworICAgICAgfQorICAgICAgYnJfc3NsX2VuZ2luZV9zZW5kcmVjX2FjaygmYmFja2VuZC0+Y3R4LmVuZywgcmV0KTsKKyAgICB9CisgICAgZWxzZSBpZihzdGF0ZSAmIEJSX1NTTF9SRUNWUkVDKSB7CisgICAgICBidWYgPSBicl9zc2xfZW5naW5lX3JlY3ZyZWNfYnVmKCZiYWNrZW5kLT5jdHguZW5nLCAmbGVuKTsKKyAgICAgIHJldCA9IHNyZWFkKHNvY2tmZCwgYnVmLCBsZW4pOworICAgICAgaWYocmV0ID09IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTDogRU9GIHdpdGhvdXQgY2xvc2Ugbm90aWZ5Iik7CisgICAgICAgIHJldHVybiBDVVJMRV9SRUFEX0VSUk9SOworICAgICAgfQorICAgICAgaWYocmV0ID09IC0xKSB7CisgICAgICAgIGlmKFNPQ0tFUlJOTyA9PSBFQUdBSU4gfHwgU09DS0VSUk5PID09IEVXT1VMREJMT0NLKSB7CisgICAgICAgICAgaWYoY29ubnNzbC0+c3RhdGUgIT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUpCisgICAgICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nOworICAgICAgICAgIHJldHVybiBDVVJMRV9BR0FJTjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ1VSTEVfUkVBRF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGJyX3NzbF9lbmdpbmVfcmVjdnJlY19hY2soJmJhY2tlbmQtPmN0eC5lbmcsIHJldCk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBDVVJMY29kZSBiZWFyc3NsX2Nvbm5lY3Rfc3RlcDIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgQ1VSTGNvZGUgcmV0OworCisgIHJldCA9IGJlYXJzc2xfcnVuX3VudGlsKGNvbm4sIHNvY2tpbmRleCwgQlJfU1NMX1NFTkRBUFAgfCBCUl9TU0xfUkVDVkFQUCk7CisgIGlmKHJldCA9PSBDVVJMRV9BR0FJTikKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGlmKHJldCA9PSBDVVJMRV9PSykgeworICAgIGlmKGJyX3NzbF9lbmdpbmVfY3VycmVudF9zdGF0ZSgmYmFja2VuZC0+Y3R4LmVuZykgPT0gQlJfU1NMX0NMT1NFRCkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY29ubmVjdGlvbiBjbG9zZWQgZHVyaW5nIGhhbmRzaGFrZSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMzsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgYmVhcnNzbF9jb25uZWN0X3N0ZXAzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIENVUkxjb2RlIHJldDsKKworICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8zID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOworCisgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7CisgICAgY29uc3QgY2hhciAqcHJvdG9jb2w7CisKKyAgICBwcm90b2NvbCA9IGJyX3NzbF9lbmdpbmVfZ2V0X3NlbGVjdGVkX3Byb3RvY29sKCZiYWNrZW5kLT5jdHguZW5nKTsKKyAgICBpZihwcm90b2NvbCkgeworICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJXNcbiIsIHByb3RvY29sKTsKKworI2lmZGVmIFVTRV9OR0hUVFAyCisgICAgICBpZighc3RyY21wKHByb3RvY29sLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQpKQorICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8yOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICBpZighc3RyY21wKHByb3RvY29sLCBBTFBOX0hUVFBfMV8xKSkKKyAgICAgICAgY29ubi0+bmVnbnBuID0gQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOworICAgICAgZWxzZQorICAgICAgICBpbmZvZihkYXRhLCAiQUxQTiwgdW5yZWNvZ25pemVkIHByb3RvY29sICVzXG4iLCBwcm90b2NvbCk7CisgICAgICBDdXJsX211bHRpdXNlX3N0YXRlKGNvbm4sIGNvbm4tPm5lZ25wbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQlVORExFX01VTFRJUExFWCA6IEJVTkRMRV9OT19NVUxUSVVTRSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBzZXJ2ZXIgZGlkIG5vdCBhZ3JlZSB0byBhIHByb3RvY29sXG4iKTsKKyAgfQorCisgIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgeworICAgIGJvb2wgaW5jYWNoZTsKKyAgICB2b2lkICpvbGRzZXNzaW9uOworICAgIGJyX3NzbF9zZXNzaW9uX3BhcmFtZXRlcnMgKnNlc3Npb247CisKKyAgICBzZXNzaW9uID0gbWFsbG9jKHNpemVvZigqc2Vzc2lvbikpOworICAgIGlmKCFzZXNzaW9uKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgYnJfc3NsX2VuZ2luZV9nZXRfc2Vzc2lvbl9wYXJhbWV0ZXJzKCZiYWNrZW5kLT5jdHguZW5nLCBzZXNzaW9uKTsKKyAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKKyAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZHNlc3Npb24sIE5VTEwsIHNvY2tpbmRleCkpOworICAgIGlmKGluY2FjaGUpCisgICAgICBDdXJsX3NzbF9kZWxzZXNzaW9uaWQoY29ubiwgb2xkc2Vzc2lvbik7CisgICAgcmV0ID0gQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKGNvbm4sIHNlc3Npb24sIDAsIHNvY2tpbmRleCk7CisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKKyAgICBpZihyZXQpIHsKKyAgICAgIGZyZWUoc2Vzc2lvbik7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfZG9uZTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJlYXJzc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgdW5zaWduZWQgY2hhciAqYXBwOworICBzaXplX3QgYXBwbGVuOworCisgIGZvcig7OykgeworICAgICplcnIgPSBiZWFyc3NsX3J1bl91bnRpbChjb25uLCBzb2NraW5kZXgsIEJSX1NTTF9TRU5EQVBQKTsKKyAgICBpZiAoKmVyciAhPSBDVVJMRV9PSykKKyAgICAgIHJldHVybiAtMTsKKyAgICBhcHAgPSBicl9zc2xfZW5naW5lX3NlbmRhcHBfYnVmKCZiYWNrZW5kLT5jdHguZW5nLCAmYXBwbGVuKTsKKyAgICBpZighYXBwKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBjb25uZWN0aW9uIGNsb3NlZCBkdXJpbmcgd3JpdGUiKTsKKyAgICAgICplcnIgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZihiYWNrZW5kLT5wZW5kaW5nX3dyaXRlKSB7CisgICAgICBhcHBsZW4gPSBiYWNrZW5kLT5wZW5kaW5nX3dyaXRlOworICAgICAgYmFja2VuZC0+cGVuZGluZ193cml0ZSA9IDA7CisgICAgICByZXR1cm4gYXBwbGVuOworICAgIH0KKyAgICBpZihhcHBsZW4gPiBsZW4pCisgICAgICBhcHBsZW4gPSBsZW47CisgICAgbWVtY3B5KGFwcCwgYnVmLCBhcHBsZW4pOworICAgIGJyX3NzbF9lbmdpbmVfc2VuZGFwcF9hY2soJmJhY2tlbmQtPmN0eC5lbmcsIGFwcGxlbik7CisgICAgYnJfc3NsX2VuZ2luZV9mbHVzaCgmYmFja2VuZC0+Y3R4LmVuZywgMCk7CisgICAgYmFja2VuZC0+cGVuZGluZ193cml0ZSA9IGFwcGxlbjsKKyAgfQorfQorCitzdGF0aWMgc3NpemVfdCBiZWFyc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgdW5zaWduZWQgY2hhciAqYXBwOworICBzaXplX3QgYXBwbGVuOworCisgICplcnIgPSBiZWFyc3NsX3J1bl91bnRpbChjb25uLCBzb2NraW5kZXgsIEJSX1NTTF9SRUNWQVBQKTsKKyAgaWYoKmVyciAhPSBDVVJMRV9PSykKKyAgICByZXR1cm4gLTE7CisgIGFwcCA9IGJyX3NzbF9lbmdpbmVfcmVjdmFwcF9idWYoJmJhY2tlbmQtPmN0eC5lbmcsICZhcHBsZW4pOworICBpZighYXBwKQorICAgIHJldHVybiAwOworICBpZihhcHBsZW4gPiBsZW4pCisgICAgYXBwbGVuID0gbGVuOworICBtZW1jcHkoYnVmLCBhcHAsIGFwcGxlbik7CisgIGJyX3NzbF9lbmdpbmVfcmVjdmFwcF9hY2soJmJhY2tlbmQtPmN0eC5lbmcsIGFwcGxlbik7CisKKyAgcmV0dXJuIGFwcGxlbjsKK30KKworc3RhdGljIENVUkxjb2RlIGJlYXJzc2xfY29ubmVjdF9jb21tb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9uYmxvY2tpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKKyAgaW50IHdoYXQ7CisKKyAgLyogY2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZCAqLworICBpZihzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSA9PSBjb25uc3NsLT5zdGF0ZSkgeworICAgICpkb25lID0gVFJVRTsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKworICBpZihzc2xfY29ubmVjdF8xID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKyAgICByZXQgPSBiZWFyc3NsX2Nvbm5lY3Rfc3RlcDEoY29ubiwgc29ja2luZGV4KTsKKyAgICBpZihyZXQpCisgICAgICByZXR1cm4gcmV0OworICB9CisKKyAgd2hpbGUoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgIHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgLyogY2hlY2sgYWxsb3dlZCB0aW1lIGxlZnQgKi8KKyAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKworICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CisgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLworICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorCisgICAgLyogaWYgc3NsIGlzIGV4cGVjdGluZyBzb21ldGhpbmcsIGNoZWNrIGlmIGl0J3MgYXZhaWxhYmxlLiAqLworICAgIGlmKHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKworICAgICAgY3VybF9zb2NrZXRfdCB3cml0ZWZkID0gc3NsX2Nvbm5lY3RfMl93cml0aW5nID09CisgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKKyAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09CisgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKKworICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKHJlYWRmZCwgQ1VSTF9TT0NLRVRfQkFELCB3cml0ZWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nPzA6dGltZW91dF9tcyk7CisgICAgICBpZih3aGF0IDwgMCkgeworICAgICAgICAvKiBmYXRhbCBlcnJvciAqLworICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZSBpZigwID09IHdoYXQpIHsKKyAgICAgICAgaWYobm9uYmxvY2tpbmcpIHsKKyAgICAgICAgICAqZG9uZSA9IEZBTFNFOworICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgICAgICB9CisgICAgICB9CisgICAgICAvKiBzb2NrZXQgaXMgcmVhZGFibGUgb3Igd3JpdGFibGUgKi8KKyAgICB9CisKKyAgICAvKiBSdW4gdHJhbnNhY3Rpb24sIGFuZCByZXR1cm4gdG8gdGhlIGNhbGxlciBpZiBpdCBmYWlsZWQgb3IgaWYgdGhpcworICAgICAqIGNvbm5lY3Rpb24gaXMgZG9uZSBub25ibG9ja2luZyBhbmQgdGhpcyBsb29wIHdvdWxkIGV4ZWN1dGUgYWdhaW4uIFRoaXMKKyAgICAgKiBwZXJtaXRzIHRoZSBvd25lciBvZiBhIG11bHRpIGhhbmRsZSB0byBhYm9ydCBhIGNvbm5lY3Rpb24gYXR0ZW1wdAorICAgICAqIGJlZm9yZSBzdGVwMiBoYXMgY29tcGxldGVkIHdoaWxlIGVuc3VyaW5nIHRoYXQgYSBjbGllbnQgdXNpbmcgc2VsZWN0KCkKKyAgICAgKiBvciBlcG9sbCgpIHdpbGwgYWx3YXlzIGhhdmUgYSB2YWxpZCBmZHNldCB0byB3YWl0IG9uLgorICAgICAqLworICAgIHJldCA9IGJlYXJzc2xfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJldCB8fCAobm9uYmxvY2tpbmcgJiYKKyAgICAgICAgICAgICAgIChzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCisgICAgICByZXR1cm4gcmV0OworICB9CisKKyAgaWYoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgcmV0ID0gYmVhcnNzbF9jb25uZWN0X3N0ZXAzKGNvbm4sIHNvY2tpbmRleCk7CisgICAgaWYocmV0KQorICAgICAgcmV0dXJuIHJldDsKKyAgfQorCisgIGlmKHNzbF9jb25uZWN0X2RvbmUgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CisgICAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gYmVhcnNzbF9yZWN2OworICAgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IGJlYXJzc2xfc2VuZDsKKyAgICAqZG9uZSA9IFRSVUU7CisgIH0KKyAgZWxzZQorICAgICpkb25lID0gRkFMU0U7CisKKyAgLyogUmVzZXQgb3VyIGNvbm5lY3Qgc3RhdGUgbWFjaGluZSAqLworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzaXplX3QgQ3VybF9iZWFyc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIHNpemUsICJCZWFyU1NMIik7Cit9CisKK3N0YXRpYyBib29sIEN1cmxfYmVhcnNzbF9kYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KQoreworICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbY29ubmluZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICByZXR1cm4gYnJfc3NsX2VuZ2luZV9jdXJyZW50X3N0YXRlKCZiYWNrZW5kLT5jdHguZW5nKSAmIEJSX1NTTF9SRUNWQVBQOworfQorCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF9iZWFyc3NsX3JhbmRvbShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhIFVOVVNFRF9QQVJBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVudHJvcHksIHNpemVfdCBsZW5ndGgpCit7CisgIHN0YXRpYyBicl9obWFjX2RyYmdfY29udGV4dCBjdHg7CisgIHN0YXRpYyBib29sIHNlZWRlZCA9IEZBTFNFOworCisgIGlmKCFzZWVkZWQpIHsKKyAgICBicl9wcm5nX3NlZWRlciBzZWVkZXI7CisKKyAgICBicl9obWFjX2RyYmdfaW5pdCgmY3R4LCAmYnJfc2hhMjU2X3Z0YWJsZSwgTlVMTCwgMCk7CisgICAgc2VlZGVyID0gYnJfcHJuZ19zZWVkZXJfc3lzdGVtKE5VTEwpOworICAgIGlmKCFzZWVkZXIgfHwgIXNlZWRlcigmY3R4LnZ0YWJsZSkpCisgICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgc2VlZGVkID0gVFJVRTsKKyAgfQorICBicl9obWFjX2RyYmdfZ2VuZXJhdGUoJmN0eCwgZW50cm9weSwgbGVuZ3RoKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX2JlYXJzc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIENVUkxjb2RlIHJldDsKKyAgYm9vbCBkb25lID0gRkFMU0U7CisKKyAgcmV0ID0gYmVhcnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIEZBTFNFLCAmZG9uZSk7CisgIGlmKHJldCkKKyAgICByZXR1cm4gcmV0OworCisgIERFQlVHQVNTRVJUKGRvbmUpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIEN1cmxfYmVhcnNzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCBib29sICpkb25lKQoreworICByZXR1cm4gYmVhcnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIFRSVUUsIGRvbmUpOworfQorCitzdGF0aWMgdm9pZCAqQ3VybF9iZWFyc3NsX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk8gaW5mbyBVTlVTRURfUEFSQU0pCit7CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgcmV0dXJuICZiYWNrZW5kLT5jdHg7Cit9CisKK3N0YXRpYyB2b2lkIEN1cmxfYmVhcnNzbF9jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIHNpemVfdCBpOworCisgIGlmKGJhY2tlbmQtPmFjdGl2ZSkgeworICAgIGJyX3NzbF9lbmdpbmVfY2xvc2UoJmJhY2tlbmQtPmN0eC5lbmcpOworICAgICh2b2lkKWJlYXJzc2xfcnVuX3VudGlsKGNvbm4sIHNvY2tpbmRleCwgQlJfU1NMX0NMT1NFRCk7CisgIH0KKyAgZm9yKGkgPSAwOyBpIDwgYmFja2VuZC0+YW5jaG9yc19sZW47ICsraSkKKyAgICBmcmVlKGJhY2tlbmQtPmFuY2hvcnNbaV0uZG4uZGF0YSk7CisgIGZyZWUoYmFja2VuZC0+YW5jaG9ycyk7Cit9CisKK3N0YXRpYyB2b2lkIEN1cmxfYmVhcnNzbF9zZXNzaW9uX2ZyZWUodm9pZCAqcHRyKQoreworICBmcmVlKHB0cik7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX2JlYXJzc2xfbWQ1c3VtKHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbWQ1c3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1kNWxlbiBVTlVTRURfUEFSQU0pCit7CisgIGJyX21kNV9jb250ZXh0IGN0eDsKKworICBicl9tZDVfaW5pdCgmY3R4KTsKKyAgYnJfbWQ1X3VwZGF0ZSgmY3R4LCBpbnB1dCwgaW5wdXRsZW4pOworICBicl9tZDVfb3V0KCZjdHgsIG1kNXN1bSk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIEN1cmxfYmVhcnNzbF9zaGEyNTZzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaGEyNTZzdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2hhMjU2bGVuIFVOVVNFRF9QQVJBTSkKK3sKKyAgYnJfc2hhMjU2X2NvbnRleHQgY3R4OworCisgIGJyX3NoYTI1Nl9pbml0KCZjdHgpOworICBicl9zaGEyNTZfdXBkYXRlKCZjdHgsIGlucHV0LCBpbnB1dGxlbik7CisgIGJyX3NoYTI1Nl9vdXQoJmN0eCwgc2hhMjU2c3VtKTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfYmVhcnNzbCA9IHsKKyAgeyBDVVJMU1NMQkFDS0VORF9CRUFSU1NMLCAiYmVhcnNzbCIgfSwKKyAgMCwKKyAgc2l6ZW9mKHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhKSwKKworICBDdXJsX25vbmVfaW5pdCwKKyAgQ3VybF9ub25lX2NsZWFudXAsCisgIEN1cmxfYmVhcnNzbF92ZXJzaW9uLAorICBDdXJsX25vbmVfY2hlY2tfY3huLAorICBDdXJsX25vbmVfc2h1dGRvd24sCisgIEN1cmxfYmVhcnNzbF9kYXRhX3BlbmRpbmcsCisgIEN1cmxfYmVhcnNzbF9yYW5kb20sCisgIEN1cmxfbm9uZV9jZXJ0X3N0YXR1c19yZXF1ZXN0LAorICBDdXJsX2JlYXJzc2xfY29ubmVjdCwKKyAgQ3VybF9iZWFyc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcsCisgIEN1cmxfYmVhcnNzbF9nZXRfaW50ZXJuYWxzLAorICBDdXJsX2JlYXJzc2xfY2xvc2UsCisgIEN1cmxfbm9uZV9jbG9zZV9hbGwsCisgIEN1cmxfYmVhcnNzbF9zZXNzaW9uX2ZyZWUsCisgIEN1cmxfbm9uZV9zZXRfZW5naW5lLAorICBDdXJsX25vbmVfc2V0X2VuZ2luZV9kZWZhdWx0LAorICBDdXJsX25vbmVfZW5naW5lc19saXN0LAorICBDdXJsX25vbmVfZmFsc2Vfc3RhcnQsCisgIEN1cmxfYmVhcnNzbF9tZDVzdW0sCisgIEN1cmxfYmVhcnNzbF9zaGEyNTZzdW0KK307CisKKyNlbmRpZiAvKiBVU0VfQkVBUlNTTCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9iZWFyc3NsLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2JlYXJzc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Zjk0OTIyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9iZWFyc3NsLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9CRUFSU1NMX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfQkVBUlNTTF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTksIE1pY2hhZWwgRm9ybmV5LCA8bWZvcm5leUBtZm9ybmV5Lm9yZz4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX0JFQVJTU0wKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9iZWFyc3NsOworCisjZW5kaWYgLyogVVNFX0JFQVJTU0wgKi8KKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9CRUFSU1NMX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvY3lhc3NsLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2N5YXNzbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGEyYmRkLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvY3lhc3NsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNvdXJjZSBmaWxlIGZvciBhbGwgQ3lhU1NMLXNwZWNpZmljIGNvZGUgZm9yIHRoZSBUTFMvU1NMIGxheWVyLiBObyBjb2RlCi0gKiBidXQgdnRscy5jIHNob3VsZCBldmVyIGNhbGwgb3IgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKLQotI2lmZGVmIFVTRV9DWUFTU0wKLQotI2RlZmluZSBXT0xGU1NMX09QVElPTlNfSUdOT1JFX1NZUwotLyogQ3lhU1NMJ3MgdmVyc2lvbi5oLCB3aGljaCBzaG91bGQgY29udGFpbiBvbmx5IHRoZSB2ZXJzaW9uLCBzaG91bGQgY29tZQotYmVmb3JlIGFsbCBvdGhlciBDeWFTU0wgaW5jbHVkZXMgYW5kIGJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGJ1aWxkIGNvbmZpZwotYWthIG9wdGlvbnMuaC4gaHR0cHM6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxNS0wNC8wMDY5Lmh0bWwgKi8KLSNpbmNsdWRlIDxjeWFzc2wvdmVyc2lvbi5oPgotI2lmIGRlZmluZWQoSEFWRV9DWUFTU0xfT1BUSU9OU19IKSAmJiAoTElCQ1lBU1NMX1ZFUlNJT05fSEVYID4gMHgwMzAwNDAwOCkKLSNpZiBkZWZpbmVkKENZQVNTTF9BUEkpIHx8IGRlZmluZWQoV09MRlNTTF9BUEkpCi0vKiBTYWZldHkgbWVhc3VyZS4gSWYgZWl0aGVyIGlzIGRlZmluZWQgc29tZSBBUEkgaW5jbHVkZSB3YXMgYWxyZWFkeSBpbmNsdWRlZAotYW5kIHRoYXQncyBhIHByb2JsZW0gc2luY2Ugb3B0aW9ucy5oIGhhc24ndCBiZWVuIGluY2x1ZGVkIHlldC4gKi8KLSNlcnJvciAiQ3lhU1NMIEFQSSB3YXMgaW5jbHVkZWQgYmVmb3JlIHRoZSBDeWFTU0wgYnVpbGQgb3B0aW9ucy4iCi0jZW5kaWYKLSNpbmNsdWRlIDxjeWFzc2wvb3B0aW9ucy5oPgotI2VuZGlmCi0KLS8qIFRvIGRldGVybWluZSB3aGF0IGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdlIHJlbHkgb24gb25lIG9yIGJvdGggb2Y6Ci0gICAtIHRoZSB1c2VyJ3Mgb3B0aW9ucy5oIGdlbmVyYXRlZCBieSBDeWFTU0wvd29sZlNTTAotICAgLSB0aGUgc3ltYm9scyBkZXRlY3RlZCBieSBjdXJsJ3MgY29uZmlndXJlCi0gICBTaW5jZSB0aGV5IGFyZSBtYXJrZWRseSBkaWZmZXJlbnQgZnJvbSBvbmUgYW5vdGhlciwgYW5kIG9uZSBvciB0aGUgb3RoZXIgbWF5Ci0gICBub3QgYmUgYXZhaWxhYmxlLCB3ZSBkbyBzb21lIGNoZWNraW5nIGJlbG93IHRvIGJyaW5nIHRoaW5ncyBpbiBzeW5jLiAqLwotCi0vKiBIQVZFX0FMUE4gaXMgd29sZlNTTCdzIGJ1aWxkIHRpbWUgc3ltYm9sIGZvciBlbmFibGluZyBBTFBOIGluIG9wdGlvbnMuaC4gKi8KLSNpZm5kZWYgSEFWRV9BTFBOCi0jaWZkZWYgSEFWRV9XT0xGU1NMX1VTRUFMUE4KLSNkZWZpbmUgSEFWRV9BTFBOCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBXT0xGU1NMX0FMTE9XX1NTTFYzIGlzIHdvbGZTU0wncyBidWlsZCB0aW1lIHN5bWJvbCBmb3IgZW5hYmxpbmcgU1NMdjMgaW4KLSAgIG9wdGlvbnMuaCwgYnV0IGlzIG9ubHkgc2VlbiBpbiA+PSAzLjYuNiBzaW5jZSB0aGF0J3Mgd2hlbiB0aGV5IHN0YXJ0ZWQKLSAgIGRpc2FibGluZyBTU0x2MyBieSBkZWZhdWx0LiAqLwotI2lmbmRlZiBXT0xGU1NMX0FMTE9XX1NTTFYzCi0jaWYgKExJQkNZQVNTTF9WRVJTSU9OX0hFWCA8IDB4MDMwMDYwMDYpIHx8IFwKLSAgICBkZWZpbmVkKEhBVkVfV09MRlNTTFYzX0NMSUVOVF9NRVRIT0QpCi0jZGVmaW5lIFdPTEZTU0xfQUxMT1dfU1NMVjMKLSNlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2luY2x1ZGUgInVybGRhdGEuaCIKLSNpbmNsdWRlICJzZW5kZi5oIgotI2luY2x1ZGUgImluZXRfcHRvbi5oIgotI2luY2x1ZGUgInZ0bHMuaCIKLSNpbmNsdWRlICJwYXJzZWRhdGUuaCIKLSNpbmNsdWRlICJjb25uZWN0LmgiIC8qIGZvciB0aGUgY29ubmVjdCB0aW1lb3V0ICovCi0jaW5jbHVkZSAic2VsZWN0LmgiCi0jaW5jbHVkZSAic3RyY2FzZS5oIgotI2luY2x1ZGUgIng1MDlhc24xLmgiCi0jaW5jbHVkZSAiY3VybF9wcmludGYuaCIKLSNpbmNsdWRlICJtdWx0aWlmLmgiCi0KLSNpbmNsdWRlIDxjeWFzc2wvb3BlbnNzbC9zc2wuaD4KLSNpbmNsdWRlIDxjeWFzc2wvc3NsLmg+Ci0jaWZkZWYgSEFWRV9DWUFTU0xfRVJST1JfU1NMX0gKLSNpbmNsdWRlIDxjeWFzc2wvZXJyb3Itc3NsLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGN5YXNzbC9lcnJvci5oPgotI2VuZGlmCi0jaW5jbHVkZSA8Y3lhc3NsL2N0YW9jcnlwdC9yYW5kb20uaD4KLSNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3NoYTI1Ni5oPgotCi0jaW5jbHVkZSAiY3lhc3NsLmgiCi0KLS8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZTogKi8KLSNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0KLSNpZiBMSUJDWUFTU0xfVkVSU0lPTl9IRVggPCAweDAyMDA3MDAyIC8qIDwgMi43LjIgKi8KLSNkZWZpbmUgQ1lBU1NMX01BWF9FUlJPUl9TWiA4MAotI2VuZGlmCi0KLS8qIEtFRVBfUEVFUl9DRVJUIGlzIGEgcHJvZHVjdCBvZiB0aGUgcHJlc2VuY2Ugb2YgYnVpbGQgdGltZSBzeW1ib2wKLSAgIE9QRU5TU0xfRVhUUkEgd2l0aG91dCBOT19DRVJUUywgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uLiBLRUVQX1BFRVJfQ0VSVCBpcwotICAgaW4gd29sZlNTTCdzIHNldHRpbmdzLmgsIGFuZCB0aGUgbGF0dGVyIHR3byBhcmUgYnVpbGQgdGltZSBzeW1ib2xzIGluCi0gICBvcHRpb25zLmguICovCi0jaWZuZGVmIEtFRVBfUEVFUl9DRVJUCi0jaWYgZGVmaW5lZChIQVZFX0NZQVNTTF9HRVRfUEVFUl9DRVJUSUZJQ0FURSkgfHwgXAotICAgIGRlZmluZWQoSEFWRV9XT0xGU1NMX0dFVF9QRUVSX0NFUlRJRklDQVRFKSB8fCBcCi0gICAgKGRlZmluZWQoT1BFTlNTTF9FWFRSQSkgJiYgIWRlZmluZWQoTk9fQ0VSVFMpKQotI2RlZmluZSBLRUVQX1BFRVJfQ0VSVAotI2VuZGlmCi0jZW5kaWYKLQotc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgewotICBTU0xfQ1RYKiBjdHg7Ci0gIFNTTCogICAgIGhhbmRsZTsKLX07Ci0KLSNkZWZpbmUgQkFDS0VORCBjb25uc3NsLT5iYWNrZW5kCi0KLXN0YXRpYyBDdXJsX3JlY3YgY3lhc3NsX3JlY3Y7Ci1zdGF0aWMgQ3VybF9zZW5kIGN5YXNzbF9zZW5kOwotCi0KLXN0YXRpYyBpbnQgZG9fZmlsZV90eXBlKGNvbnN0IGNoYXIgKnR5cGUpCi17Ci0gIGlmKCF0eXBlIHx8ICF0eXBlWzBdKQotICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOwotICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiUEVNIikpCi0gICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9QRU07Ci0gIGlmKHN0cmNhc2Vjb21wYXJlKHR5cGUsICJERVIiKSkKLSAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX0FTTjE7Ci0gIHJldHVybiAtMTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgYWxsIHRoZSBjbGllbnQvQ0EgY2VydGlmaWNhdGVzIGFuZCBDUkxzLiBTZXR1cCB0aGUgVExTCi0gKiBsYXllciBhbmQgZG8gYWxsIG5lY2Vzc2FyeSBtYWdpYy4KLSAqLwotc3RhdGljIENVUkxjb2RlCi1jeWFzc2xfY29ubmVjdF9zdGVwMShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQotewotICBjaGFyICpjaXBoZXJzOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIFNTTF9NRVRIT0QqIHJlcV9tZXRob2QgPSBOVUxMOwotICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSNpZmRlZiBIQVZFX1NOSQotICBib29sIHNuaSA9IEZBTFNFOwotI2RlZmluZSB1c2Vfc25pKHgpICBzbmkgPSAoeCkKLSNlbHNlCi0jZGVmaW5lIHVzZV9zbmkoeCkgIEN1cmxfbm9wX3N0bXQKLSNlbmRpZgotCi0gIGlmKGNvbm5zc2wtPnN0YXRlID09IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlKQotICAgIHJldHVybiBDVVJMRV9PSzsKLQotICBpZihTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpICE9IENVUkxfU1NMVkVSU0lPTl9NQVhfTk9ORSkgewotICAgIGZhaWxmKGRhdGEsICJDeWFTU0wgZG9lcyBub3Qgc3VwcG9ydCB0byBzZXQgbWF4aW11bSBTU0wvVExTIHZlcnNpb24iKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotICAvKiBjaGVjayB0byBzZWUgaWYgd2UndmUgYmVlbiB0b2xkIHRvIHVzZSBhbiBleHBsaWNpdCBTU0wvVExTIHZlcnNpb24gKi8KLSAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgewotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSNpZiBMSUJDWUFTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwMzAwMCAvKiA+PSAzLjMuMCAqLwotICAgIC8qIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcyBzZXQgbGF0ZXIgYWZ0ZXIgdGhlIENUWCBvYmplY3QgaXMgY3JlYXRlZCAqLwotICAgIHJlcV9tZXRob2QgPSBTU0x2MjNfY2xpZW50X21ldGhvZCgpOwotI2Vsc2UKLSAgICBpbmZvZihkYXRhLCAiQ3lhU1NMIDwzLjMuMCBjYW5ub3QgYmUgY29uZmlndXJlZCB0byB1c2UgVExTIDEuMC0xLjIsICIKLSAgICAgICAgICAiVExTIDEuMCBpcyB1c2VkIGV4Y2x1c2l2ZWx5XG4iKTsKLSAgICByZXFfbWV0aG9kID0gVExTdjFfY2xpZW50X21ldGhvZCgpOwotI2VuZGlmCi0gICAgdXNlX3NuaShUUlVFKTsKLSAgICBicmVhazsKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKLSNpZmRlZiBXT0xGU1NMX0FMTE9XX1RMU1YxMAotICAgIHJlcV9tZXRob2QgPSBUTFN2MV9jbGllbnRfbWV0aG9kKCk7Ci0gICAgdXNlX3NuaShUUlVFKTsKLSNlbHNlCi0gICAgZmFpbGYoZGF0YSwgIkN5YVNTTCBkb2VzIG5vdCBzdXBwb3J0IFRMUyAxLjAiKTsKLSAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOwotI2VuZGlmCi0gICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6Ci0gICAgcmVxX21ldGhvZCA9IFRMU3YxXzFfY2xpZW50X21ldGhvZCgpOwotICAgIHVzZV9zbmkoVFJVRSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6Ci0gICAgcmVxX21ldGhvZCA9IFRMU3YxXzJfY2xpZW50X21ldGhvZCgpOwotICAgIHVzZV9zbmkoVFJVRSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0jaWZkZWYgV09MRlNTTF9UTFMxMwotICAgIHJlcV9tZXRob2QgPSB3b2xmVExTdjFfM19jbGllbnRfbWV0aG9kKCk7Ci0gICAgdXNlX3NuaShUUlVFKTsKLSAgICBicmVhazsKLSNlbHNlCi0gICAgZmFpbGYoZGF0YSwgIkN5YVNTTDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSNlbmRpZgotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKLSNpZmRlZiBXT0xGU1NMX0FMTE9XX1NTTFYzCi0gICAgcmVxX21ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKLSAgICB1c2Vfc25pKEZBTFNFKTsKLSNlbHNlCi0gICAgZmFpbGYoZGF0YSwgIkN5YVNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYzIik7Ci0gICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKLSNlbmRpZgotICAgIGJyZWFrOwotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKLSAgICBmYWlsZihkYXRhLCAiQ3lhU1NMIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIGRlZmF1bHQ6Ci0gICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotICBpZighcmVxX21ldGhvZCkgewotICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGNyZWF0ZSBhIG1ldGhvZCEiKTsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotCi0gIGlmKEJBQ0tFTkQtPmN0eCkKLSAgICBTU0xfQ1RYX2ZyZWUoQkFDS0VORC0+Y3R4KTsKLSAgQkFDS0VORC0+Y3R4ID0gU1NMX0NUWF9uZXcocmVxX21ldGhvZCk7Ci0KLSAgaWYoIUJBQ0tFTkQtPmN0eCkgewotICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGNyZWF0ZSBhIGNvbnRleHQhIik7Ci0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gIH0KLQotICBzd2l0Y2goU1NMX0NPTk5fQ09ORklHKHZlcnNpb24pKSB7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotI2lmIExJQkNZQVNTTF9WRVJTSU9OX0hFWCA+IDB4MDMwMDQwMDYgLyogPiAzLjQuNiAqLwotICAgIC8qIFZlcnNpb25zIDMuMy4wIHRvIDMuNC42IHdlIGtub3cgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcyB3aGF0ZXZlcgotICAgIG1pbmltdW0gdmVyc2lvbiBvZiBUTFMgd2FzIGJ1aWx0IGluIGFuZCBhdCBsZWFzdCBUTFMgMS4wLiBGb3IgbGF0ZXIgbGlicmFyeQotICAgIHZlcnNpb25zIHRoYXQgY291bGQgY2hhbmdlIChlZyBUTFMgMS4wIGJ1aWx0IGluIGJ1dCBkZWZhdWx0cyB0byBUTFMgMS4xKSBzbwotICAgIHdlIGhhdmUgdGhpcyBzaG9ydCBjaXJjdWl0IGV2YWx1YXRpb24gdG8gZmluZCB0aGUgbWluaW11bSBzdXBwb3J0ZWQgVExTCi0gICAgdmVyc2lvbi4gV2UgdXNlIHdvbGZTU0xfQ1RYX1NldE1pblZlcnNpb24gYW5kIG5vdCBDeWFTU0xfU2V0TWluVmVyc2lvbgotICAgIGJlY2F1c2Ugb25seSB0aGUgZm9ybWVyIHdpbGwgd29yayBiZWZvcmUgdGhlIHVzZXIncyBDVFggY2FsbGJhY2sgaXMgY2FsbGVkLgotICAgICovCi0gICAgaWYoKHdvbGZTU0xfQ1RYX1NldE1pblZlcnNpb24oQkFDS0VORC0+Y3R4LCBXT0xGU1NMX1RMU1YxKSAhPSAxKSAmJgotICAgICAgICh3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uKEJBQ0tFTkQtPmN0eCwgV09MRlNTTF9UTFNWMV8xKSAhPSAxKSAmJgotICAgICAgICh3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uKEJBQ0tFTkQtPmN0eCwgV09MRlNTTF9UTFNWMV8yKSAhPSAxKQotI2lmZGVmIFdPTEZTU0xfVExTMTMKLSAgICAgICAmJiAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihCQUNLRU5ELT5jdHgsIFdPTEZTU0xfVExTVjFfMykgIT0gMSkKLSNlbmRpZgotICAgICAgKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBzZXQgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiIpOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgIH0KLSNlbmRpZgotICAgIGJyZWFrOwotICB9Ci0KLSAgY2lwaGVycyA9IFNTTF9DT05OX0NPTkZJRyhjaXBoZXJfbGlzdCk7Ci0gIGlmKGNpcGhlcnMpIHsKLSAgICBpZighU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoQkFDS0VORC0+Y3R4LCBjaXBoZXJzKSkgewotICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCBzZXR0aW5nIGNpcGhlciBsaXN0OiAlcyIsIGNpcGhlcnMpOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DSVBIRVI7Ci0gICAgfQotICAgIGluZm9mKGRhdGEsICJDaXBoZXIgc2VsZWN0aW9uOiAlc1xuIiwgY2lwaGVycyk7Ci0gIH0KLQotI2lmbmRlZiBOT19GSUxFU1lTVEVNCi0gIC8qIGxvYWQgdHJ1c3RlZCBjYWNlcnQgKi8KLSAgaWYoU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpIHsKLSAgICBpZigxICE9IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKEJBQ0tFTkQtPmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpKSkgewotICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7Ci0gICAgICAgIC8qIEZhaWwgaWYgd2UgaW5zaXN0IG9uIHN1Y2Nlc3NmdWxseSB2ZXJpZnlpbmcgdGhlIHNlcnZlci4gKi8KLSAgICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHNldHRpbmcgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9uczpcbiIKLSAgICAgICAgICAgICAgIiAgQ0FmaWxlOiAlc1xuICBDQXBhdGg6ICVzIiwKLSAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSk/Ci0gICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOiAibm9uZSIsCi0gICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpPwotICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSA6ICJub25lIik7Ci0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgY2VydGlmaWNhdGUKLSAgICAgICAgICAgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLiAqLwotICAgICAgICBpbmZvZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zLCIKLSAgICAgICAgICAgICAgIiBjb250aW51aW5nIGFueXdheTpcbiIpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIC8qIEV2ZXJ5dGhpbmcgaXMgZmluZS4gKi8KLSAgICAgIGluZm9mKGRhdGEsICJzdWNjZXNzZnVsbHkgc2V0IGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnM6XG4iKTsKLSAgICB9Ci0gICAgaW5mb2YoZGF0YSwKLSAgICAgICAgICAiICBDQWZpbGU6ICVzXG4iCi0gICAgICAgICAgIiAgQ0FwYXRoOiAlc1xuIiwKLSAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSA/IFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOgotICAgICAgICAgICJub25lIiwKLSAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSA/IFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpOgotICAgICAgICAgICJub25lIik7Ci0gIH0KLQotICAvKiBMb2FkIHRoZSBjbGllbnQgY2VydGlmaWNhdGUsIGFuZCBwcml2YXRlIGtleSAqLwotICBpZihTU0xfU0VUX09QVElPTihjZXJ0KSAmJiBTU0xfU0VUX09QVElPTihrZXkpKSB7Ci0gICAgaW50IGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihjZXJ0X3R5cGUpKTsKLQotICAgIGlmKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoQkFDS0VORC0+Y3R4LCBTU0xfU0VUX09QVElPTihjZXJ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpICE9IDEpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gdXNlIGNsaWVudCBjZXJ0aWZpY2F0ZSAobm8ga2V5IG9yIHdyb25nIHBhc3MiCi0gICAgICAgICAgICAiIHBocmFzZT8pIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgfQotCi0gICAgZmlsZV90eXBlID0gZG9fZmlsZV90eXBlKFNTTF9TRVRfT1BUSU9OKGtleV90eXBlKSk7Ci0gICAgaWYoU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKEJBQ0tFTkQtPmN0eCwgU1NMX1NFVF9PUFRJT04oa2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkgIT0gMSkgewotICAgICAgZmFpbGYoZGF0YSwgInVuYWJsZSB0byBzZXQgcHJpdmF0ZSBrZXkiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICB9Ci0gIH0KLSNlbmRpZiAvKiAhTk9fRklMRVNZU1RFTSAqLwotCi0gIC8qIFNTTCBhbHdheXMgdHJpZXMgdG8gdmVyaWZ5IHRoZSBwZWVyLCB0aGlzIG9ubHkgc2F5cyB3aGV0aGVyIGl0IHNob3VsZAotICAgKiBmYWlsIHRvIGNvbm5lY3QgaWYgdGhlIHZlcmlmaWNhdGlvbiBmYWlscywgb3IgaWYgaXQgc2hvdWxkIGNvbnRpbnVlCi0gICAqIGFueXdheS4gSW4gdGhlIGxhdHRlciBjYXNlIHRoZSByZXN1bHQgb2YgdGhlIHZlcmlmaWNhdGlvbiBpcyBjaGVja2VkIHdpdGgKLSAgICogU1NMX2dldF92ZXJpZnlfcmVzdWx0KCkgYmVsb3cuICovCi0gIFNTTF9DVFhfc2V0X3ZlcmlmeShCQUNLRU5ELT5jdHgsCi0gICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik/U1NMX1ZFUklGWV9QRUVSOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9WRVJJRllfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0jaWZkZWYgSEFWRV9TTkkKLSAgaWYoc25pKSB7Ci0gICAgc3RydWN0IGluX2FkZHIgYWRkcjQ7Ci0jaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjY7Ci0jZW5kaWYKLSAgICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKLSAgICAgIGNvbm4tPmhvc3QubmFtZTsKLSAgICBzaXplX3QgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKTsKLSAgICBpZigoaG9zdG5hbWVfbGVuIDwgVVNIUlRfTUFYKSAmJgotICAgICAgICgwID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmYWRkcjQpKSAmJgotI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgICAgKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGhvc3RuYW1lLCAmYWRkcjYpKSAmJgotI2VuZGlmCi0gICAgICAgKEN5YVNTTF9DVFhfVXNlU05JKEJBQ0tFTkQtPmN0eCwgQ1lBU1NMX1NOSV9IT1NUX05BTUUsIGhvc3RuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQpaG9zdG5hbWVfbGVuKSAhPSAxKSkgewotICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBjb25maWd1cmUgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKSAiCi0gICAgICAgICAgICAiVExTIGV4dGVuc2lvblxuIik7Ci0gICAgfQotICB9Ci0jZW5kaWYKLQotICAvKiBnaXZlIGFwcGxpY2F0aW9uIGEgY2hhbmNlIHRvIGludGVyZmVyZSB3aXRoIFNTTCBzZXQgdXAuICovCi0gIGlmKGRhdGEtPnNldC5zc2wuZnNzbGN0eCkgewotICAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotICAgIHJlc3VsdCA9ICgqZGF0YS0+c2V0LnNzbC5mc3NsY3R4KShkYXRhLCBCQUNLRU5ELT5jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuZnNzbGN0eHApOwotICAgIGlmKHJlc3VsdCkgewotICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHNpZ25hbGVkIGJ5IHNzbCBjdHggY2FsbGJhY2siKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICB9Ci0jaWZkZWYgTk9fRklMRVNZU1RFTQotICBlbHNlIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewotICAgIGZhaWxmKGRhdGEsICJTU0w6IENlcnRpZmljYXRlcyBjb3VsZG4ndCBiZSBsb2FkZWQgYmVjYXVzZSBDeWFTU0wgd2FzIGJ1aWx0IgotICAgICAgICAgICIgd2l0aCBcIm5vIGZpbGVzeXN0ZW1cIi4gRWl0aGVyIGRpc2FibGUgcGVlciB2ZXJpZmljYXRpb24iCi0gICAgICAgICAgIiAoaW5zZWN1cmUpIG9yIGlmIHlvdSBhcmUgYnVpbGRpbmcgYW4gYXBwbGljYXRpb24gd2l0aCBsaWJjdXJsIHlvdSIKLSAgICAgICAgICAiIGNhbiBsb2FkIGNlcnRpZmljYXRlcyB2aWEgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLiIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotI2VuZGlmCi0KLSAgLyogTGV0J3MgbWFrZSBhbiBTU0wgc3RydWN0dXJlICovCi0gIGlmKEJBQ0tFTkQtPmhhbmRsZSkKLSAgICBTU0xfZnJlZShCQUNLRU5ELT5oYW5kbGUpOwotICBCQUNLRU5ELT5oYW5kbGUgPSBTU0xfbmV3KEJBQ0tFTkQtPmN0eCk7Ci0gIGlmKCFCQUNLRU5ELT5oYW5kbGUpIHsKLSAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0IChoYW5kbGUpISIpOwotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICB9Ci0KLSNpZmRlZiBIQVZFX0FMUE4KLSAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKLSAgICBjaGFyIHByb3RvY29sc1sxMjhdOwotICAgICpwcm90b2NvbHMgPSAnXDAnOwotCi0gICAgLyogd29sZlNTTCdzIEFMUE4gcHJvdG9jb2wgbmFtZSBsaXN0IGZvcm1hdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YKLSAgICAgICBwcm90b2NvbHMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBwcmVmZXJlbmNlLCBlZzogImgyLGh0dHAvMS4xIiAqLwotCi0jaWZkZWYgVVNFX05HSFRUUDIKLSAgICBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMikgewotICAgICAgc3RyY3B5KHByb3RvY29scyArIHN0cmxlbihwcm90b2NvbHMpLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQgIiwiKTsKLSAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0cmNweShwcm90b2NvbHMgKyBzdHJsZW4ocHJvdG9jb2xzKSwgQUxQTl9IVFRQXzFfMSk7Ci0gICAgaW5mb2YoZGF0YSwgIkFMUE4sIG9mZmVyaW5nICVzXG4iLCBBTFBOX0hUVFBfMV8xKTsKLQotICAgIGlmKHdvbGZTU0xfVXNlQUxQTihCQUNLRU5ELT5oYW5kbGUsIHByb3RvY29scywKLSAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXN0cmxlbihwcm90b2NvbHMpLAotICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FMUE5fQ09OVElOVUVfT05fTUlTTUFUQ0gpICE9IFNTTF9TVUNDRVNTKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgc2V0dGluZyBBTFBOIHByb3RvY29scyIpOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgIH0KLSAgfQotI2VuZGlmIC8qIEhBVkVfQUxQTiAqLwotCi0gIC8qIENoZWNrIGlmIHRoZXJlJ3MgYSBjYWNoZWQgSUQgd2UgY2FuL3Nob3VsZCB1c2UgaGVyZSEgKi8KLSAgaWYoU1NMX1NFVF9PUFRJT04ocHJpbWFyeS5zZXNzaW9uaWQpKSB7Ci0gICAgdm9pZCAqc3NsX3Nlc3Npb25pZCA9IE5VTEw7Ci0KLSAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKLSAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzc2xfc2Vzc2lvbmlkLCBOVUxMLCBzb2NraW5kZXgpKSB7Ci0gICAgICAvKiB3ZSBnb3QgYSBzZXNzaW9uIGlkLCB1c2UgaXQhICovCi0gICAgICBpZighU1NMX3NldF9zZXNzaW9uKEJBQ0tFTkQtPmhhbmRsZSwgc3NsX3Nlc3Npb25pZCkpIHsKLSAgICAgICAgY2hhciBlcnJvcl9idWZmZXJbQ1lBU1NMX01BWF9FUlJPUl9TWl07Ci0gICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTF9zZXRfc2Vzc2lvbiBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhTU0xfZ2V0X2Vycm9yKEJBQ0tFTkQtPmhhbmRsZSwgMCksCi0gICAgICAgICAgICAgIGVycm9yX2J1ZmZlcikpOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgICB9Ci0gICAgICAvKiBJbmZvcm1hdGlvbmFsIG1lc3NhZ2UgKi8KLSAgICAgIGluZm9mKGRhdGEsICJTU0wgcmUtdXNpbmcgc2Vzc2lvbiBJRFxuIik7Ci0gICAgfQotICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7Ci0gIH0KLQotICAvKiBwYXNzIHRoZSByYXcgc29ja2V0IGludG8gdGhlIFNTTCBsYXllciAqLwotICBpZighU1NMX3NldF9mZChCQUNLRU5ELT5oYW5kbGUsIChpbnQpc29ja2ZkKSkgewotICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTF9zZXRfZmQgZmFpbGVkIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzI7Ci0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUKLWN5YXNzbF9jb25uZWN0X3N0ZXAyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCi17Ci0gIGludCByZXQgPSAtMTsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKLSAgICBjb25uLT5ob3N0Lm5hbWU7Ci0gIGNvbnN0IGNoYXIgKiBjb25zdCBkaXNwbmFtZSA9IFNTTF9JU19QUk9YWSgpID8KLSAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWUgOiBjb25uLT5ob3N0LmRpc3BuYW1lOwotICBjb25zdCBjaGFyICogY29uc3QgcGlubmVkcHVia2V5ID0gU1NMX0lTX1BST1hZKCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV0gOgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXTsKLQotICBjb25uLT5yZWN2W3NvY2tpbmRleF0gPSBjeWFzc2xfcmVjdjsKLSAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gY3lhc3NsX3NlbmQ7Ci0KLSAgLyogRW5hYmxlIFJGQzI4MTggY2hlY2tzICovCi0gIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkgewotICAgIHJldCA9IEN5YVNTTF9jaGVja19kb21haW5fbmFtZShCQUNLRU5ELT5oYW5kbGUsIGhvc3RuYW1lKTsKLSAgICBpZihyZXQgPT0gU1NMX0ZBSUxVUkUpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotCi0gIHJldCA9IFNTTF9jb25uZWN0KEJBQ0tFTkQtPmhhbmRsZSk7Ci0gIGlmKHJldCAhPSAxKSB7Ci0gICAgY2hhciBlcnJvcl9idWZmZXJbQ1lBU1NMX01BWF9FUlJPUl9TWl07Ci0gICAgaW50ICBkZXRhaWwgPSBTU0xfZ2V0X2Vycm9yKEJBQ0tFTkQtPmhhbmRsZSwgcmV0KTsKLQotICAgIGlmKFNTTF9FUlJPUl9XQU5UX1JFQUQgPT0gZGV0YWlsKSB7Ci0gICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIH0KLSAgICBlbHNlIGlmKFNTTF9FUlJPUl9XQU5UX1dSSVRFID09IGRldGFpbCkgewotICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfd3JpdGluZzsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICB9Ci0gICAgLyogVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gb3ZlcnJpZGUgb25seSB0aGUgQ04gbWF0Y2hpbmcuCi0gICAgICogVGhpcyB3aWxsIGVuYWJsZSB0aGUgb3ZlcnJpZGUgb2YgYm90aCBtaXNtYXRjaGluZyBTdWJqZWN0QWx0TmFtZXMKLSAgICAgKiBhcyBhbHNvIG1pc21hdGNoaW5nIENOIGZpZWxkcyAqLwotICAgIGVsc2UgaWYoRE9NQUlOX05BTUVfTUlTTUFUQ0ggPT0gZGV0YWlsKSB7Ci0jaWYgMQotICAgICAgZmFpbGYoZGF0YSwgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAotICAgICAgICAgICAgZGlzcG5hbWUpOwotICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSNlbHNlCi0gICAgICAvKiBXaGVuIHRoZSBDeWFTU0xfY2hlY2tfZG9tYWluX25hbWUoKSBpcyB1c2VkIGFuZCB5b3UgZGVzaXJlIHRvIGNvbnRpbnVlCi0gICAgICAgKiBvbiBhIERPTUFJTl9OQU1FX01JU01BVENILCBpLmUuICdjb25uLT5zc2xfY29uZmlnLnZlcmlmeWhvc3QgPT0gMCcsCi0gICAgICAgKiBDeWFTU0wgdmVyc2lvbiAyLjQuMCB3aWxsIGZhaWwgd2l0aCBhbiBJTkNPTVBMRVRFX0RBVEEgZXJyb3IuIFRoZSBvbmx5Ci0gICAgICAgKiB3YXkgdG8gZG8gdGhpcyBpcyBjdXJyZW50bHkgdG8gc3dpdGNoIHRoZSBDeWFTU0xfY2hlY2tfZG9tYWluX25hbWUoKQotICAgICAgICogaW4gYW5kIG91dCBiYXNlZCBvbiB0aGUgJ2Nvbm4tPnNzbF9jb25maWcudmVyaWZ5aG9zdCcgdmFsdWUuICovCi0gICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKLSAgICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAotICAgICAgICAgICAgICBkaXNwbmFtZSk7Ci0gICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgaW5mb2YoZGF0YSwKLSAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBhbmQvb3IgY29tbW9uIG5hbWUgZG8gbm90IG1hdGNoIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgZGlzcG5hbWUpOwotICAgICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0jaWYgTElCQ1lBU1NMX1ZFUlNJT05fSEVYID49IDB4MDIwMDcwMDAgLyogMi43LjAgKi8KLSAgICBlbHNlIGlmKEFTTl9OT19TSUdORVJfRSA9PSBkZXRhaWwpIHsKLSAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewotICAgICAgICBmYWlsZihkYXRhLCAiXHRDQSBzaWduZXIgbm90IGF2YWlsYWJsZSBmb3IgdmVyaWZpY2F0aW9uXG4iKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAvKiBKdXN0IGNvbnRpbnVlIHdpdGggYSB3YXJuaW5nIGlmIG5vIHN0cmljdCBjZXJ0aWZpY2F0ZQotICAgICAgICAgICB2ZXJpZmljYXRpb24gaXMgcmVxdWlyZWQuICovCi0gICAgICAgIGluZm9mKGRhdGEsICJDQSBzaWduZXIgbm90IGF2YWlsYWJsZSBmb3IgdmVyaWZpY2F0aW9uLCAiCi0gICAgICAgICAgICAgICAgICAgICJjb250aW51aW5nIGFueXdheVxuIik7Ci0gICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAgZWxzZSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMX2Nvbm5lY3QgZmFpbGVkIHdpdGggZXJyb3IgJWQ6ICVzIiwgZGV0YWlsLAotICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoZGV0YWlsLCBlcnJvcl9idWZmZXIpKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICB9Ci0gIH0KLQotICBpZihwaW5uZWRwdWJrZXkpIHsKLSNpZmRlZiBLRUVQX1BFRVJfQ0VSVAotICAgIFg1MDkgKng1MDk7Ci0gICAgY29uc3QgY2hhciAqeDUwOV9kZXI7Ci0gICAgaW50IHg1MDlfZGVyX2xlbjsKLSAgICBjdXJsX1g1MDljZXJ0aWZpY2F0ZSB4NTA5X3BhcnNlZDsKLSAgICBjdXJsX2FzbjFFbGVtZW50ICpwdWJrZXk7Ci0gICAgQ1VSTGNvZGUgcmVzdWx0OwotCi0gICAgeDUwOSA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShCQUNLRU5ELT5oYW5kbGUpOwotICAgIGlmKCF4NTA5KSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgcmV0cmlldmluZyBzZXJ2ZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgeDUwOV9kZXIgPSAoY29uc3QgY2hhciAqKUN5YVNTTF9YNTA5X2dldF9kZXIoeDUwOSwgJng1MDlfZGVyX2xlbik7Ci0gICAgaWYoIXg1MDlfZGVyKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgcmV0cmlldmluZyBBU04uMSBzZXJ2ZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgbWVtc2V0KCZ4NTA5X3BhcnNlZCwgMCwgc2l6ZW9mKHg1MDlfcGFyc2VkKSk7Ci0gICAgaWYoQ3VybF9wYXJzZVg1MDkoJng1MDlfcGFyc2VkLCB4NTA5X2RlciwgeDUwOV9kZXIgKyB4NTA5X2Rlcl9sZW4pKQotICAgICAgcmV0dXJuIENVUkxFX1NTTF9QSU5ORURQVUJLRVlOT1RNQVRDSDsKLQotICAgIHB1YmtleSA9ICZ4NTA5X3BhcnNlZC5zdWJqZWN0UHVibGljS2V5SW5mbzsKLSAgICBpZighcHVia2V5LT5oZWFkZXIgfHwgcHVia2V5LT5lbmQgPD0gcHVia2V5LT5oZWFkZXIpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGZhaWxlZCByZXRyaWV2aW5nIHB1YmxpYyBrZXkgZnJvbSBzZXJ2ZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gQ3VybF9waW5fcGVlcl9wdWJrZXkoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRwdWJrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwdWJrZXktPmhlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KShwdWJrZXktPmVuZCAtIHB1YmtleS0+aGVhZGVyKSk7Ci0gICAgaWYocmVzdWx0KSB7Ci0gICAgICBmYWlsZihkYXRhLCAiU1NMOiBwdWJsaWMga2V5IGRvZXMgbm90IG1hdGNoIHBpbm5lZCBwdWJsaWMga2V5ISIpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jZWxzZQotICAgIGZhaWxmKGRhdGEsICJMaWJyYXJ5IGxhY2tzIHBpbm5pbmcgc3VwcG9ydCBidWlsdC1pbiIpOwotICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47Ci0jZW5kaWYKLSAgfQotCi0jaWZkZWYgSEFWRV9BTFBOCi0gIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7Ci0gICAgaW50IHJjOwotICAgIGNoYXIgKnByb3RvY29sID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbF9sZW4gPSAwOwotCi0gICAgcmMgPSB3b2xmU1NMX0FMUE5fR2V0UHJvdG9jb2woQkFDS0VORC0+aGFuZGxlLCAmcHJvdG9jb2wsICZwcm90b2NvbF9sZW4pOwotCi0gICAgaWYocmMgPT0gU1NMX1NVQ0NFU1MpIHsKLSAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBzZXJ2ZXIgYWNjZXB0ZWQgdG8gdXNlICUuKnNcbiIsIHByb3RvY29sX2xlbiwKLSAgICAgICAgICAgIHByb3RvY29sKTsKLQotICAgICAgaWYocHJvdG9jb2xfbGVuID09IEFMUE5fSFRUUF8xXzFfTEVOR1RIICYmCi0gICAgICAgICAhbWVtY21wKHByb3RvY29sLCBBTFBOX0hUVFBfMV8xLCBBTFBOX0hUVFBfMV8xX0xFTkdUSCkpCi0gICAgICAgIGNvbm4tPm5lZ25wbiA9IENVUkxfSFRUUF9WRVJTSU9OXzFfMTsKLSNpZmRlZiBVU0VfTkdIVFRQMgotICAgICAgZWxzZSBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMiAmJgotICAgICAgICAgICAgICBwcm90b2NvbF9sZW4gPT0gTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEX0xFTiAmJgotICAgICAgICAgICAgICAhbWVtY21wKHByb3RvY29sLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQsCi0gICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEX0xFTikpCi0gICAgICAgIGNvbm4tPm5lZ25wbiA9IENVUkxfSFRUUF9WRVJTSU9OXzI7Ci0jZW5kaWYKLSAgICAgIGVsc2UKLSAgICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHVucmVjb2duaXplZCBwcm90b2NvbCAlLipzXG4iLCBwcm90b2NvbF9sZW4sCi0gICAgICAgICAgICAgIHByb3RvY29sKTsKLSAgICAgIEN1cmxfbXVsdGl1c2Vfc3RhdGUoY29ubiwgY29ubi0+bmVnbnBuID09IENVUkxfSFRUUF9WRVJTSU9OXzIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICBCVU5ETEVfTVVMVElQTEVYIDogQlVORExFX05PX01VTFRJVVNFKTsKLSAgICB9Ci0gICAgZWxzZSBpZihyYyA9PSBTU0xfQUxQTl9OT1RfRk9VTkQpCi0gICAgICBpbmZvZihkYXRhLCAiQUxQTiwgc2VydmVyIGRpZCBub3QgYWdyZWUgdG8gYSBwcm90b2NvbFxuIik7Ci0gICAgZWxzZSB7Ci0gICAgICBmYWlsZihkYXRhLCAiQUxQTiwgZmFpbHVyZSBnZXR0aW5nIHByb3RvY29sLCBlcnJvciAlZCIsIHJjKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICB9Ci0gIH0KLSNlbmRpZiAvKiBIQVZFX0FMUE4gKi8KLQotICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMzsKLSNpZiAoTElCQ1lBU1NMX1ZFUlNJT05fSEVYID49IDB4MDMwMDkwMTApCi0gIGluZm9mKGRhdGEsICJTU0wgY29ubmVjdGlvbiB1c2luZyAlcyAvICVzXG4iLAotICAgICAgICB3b2xmU1NMX2dldF92ZXJzaW9uKEJBQ0tFTkQtPmhhbmRsZSksCi0gICAgICAgIHdvbGZTU0xfZ2V0X2NpcGhlcl9uYW1lKEJBQ0tFTkQtPmhhbmRsZSkpOwotI2Vsc2UKLSAgaW5mb2YoZGF0YSwgIlNTTCBjb25uZWN0ZWRcbiIpOwotI2VuZGlmCi0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi0KLXN0YXRpYyBDVVJMY29kZQotY3lhc3NsX2Nvbm5lY3Rfc3RlcDMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLQotICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8zID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOwotCi0gIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgewotICAgIGJvb2wgaW5jYWNoZTsKLSAgICBTU0xfU0VTU0lPTiAqb3VyX3NzbF9zZXNzaW9uaWQ7Ci0gICAgdm9pZCAqb2xkX3NzbF9zZXNzaW9uaWQgPSBOVUxMOwotCi0gICAgb3VyX3NzbF9zZXNzaW9uaWQgPSBTU0xfZ2V0X3Nlc3Npb24oQkFDS0VORC0+aGFuZGxlKTsKLQotICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGluY2FjaGUgPSAhKEN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3NzbF9zZXNzaW9uaWQsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tpbmRleCkpOwotICAgIGlmKGluY2FjaGUpIHsKLSAgICAgIGlmKG9sZF9zc2xfc2Vzc2lvbmlkICE9IG91cl9zc2xfc2Vzc2lvbmlkKSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJvbGQgU1NMIHNlc3Npb24gSUQgaXMgc3RhbGUsIHJlbW92aW5nXG4iKTsKLSAgICAgICAgQ3VybF9zc2xfZGVsc2Vzc2lvbmlkKGNvbm4sIG9sZF9zc2xfc2Vzc2lvbmlkKTsKLSAgICAgICAgaW5jYWNoZSA9IEZBTFNFOwotICAgICAgfQotICAgIH0KLQotICAgIGlmKCFpbmNhY2hlKSB7Ci0gICAgICByZXN1bHQgPSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgb3VyX3NzbF9zZXNzaW9uaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiB1bmtub3duIHNpemUgKi8sIHNvY2tpbmRleCk7Ci0gICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKLSAgICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCB0byBzdG9yZSBzc2wgc2Vzc2lvbiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgIH0KLSAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwotICB9Ci0KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0X2RvbmU7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1zdGF0aWMgc3NpemVfdCBjeWFzc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKLXsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGNoYXIgZXJyb3JfYnVmZmVyW0NZQVNTTF9NQVhfRVJST1JfU1pdOwotICBpbnQgIG1lbWxlbiA9IChsZW4gPiAoc2l6ZV90KUlOVF9NQVgpID8gSU5UX01BWCA6IChpbnQpbGVuOwotICBpbnQgIHJjICAgICA9IFNTTF93cml0ZShCQUNLRU5ELT5oYW5kbGUsIG1lbSwgbWVtbGVuKTsKLQotICBpZihyYyA8IDApIHsKLSAgICBpbnQgZXJyID0gU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIHJjKTsKLQotICAgIHN3aXRjaChlcnIpIHsKLSAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgIC8qIHRoZXJlJ3MgZGF0YSBwZW5kaW5nLCByZS1pbnZva2UgU1NMX3dyaXRlKCkgKi8KLSAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOwotICAgICAgcmV0dXJuIC0xOwotICAgIGRlZmF1bHQ6Ci0gICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHdyaXRlOiAlcywgZXJybm8gJWQiLAotICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhlcnIsIGVycm9yX2J1ZmZlciksCi0gICAgICAgICAgICBTT0NLRVJSTk8pOwotICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBDdXJsX2N5YXNzbF9jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCi17Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotCi0gIGlmKEJBQ0tFTkQtPmhhbmRsZSkgewotICAgICh2b2lkKVNTTF9zaHV0ZG93bihCQUNLRU5ELT5oYW5kbGUpOwotICAgIFNTTF9mcmVlKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gICAgQkFDS0VORC0+aGFuZGxlID0gTlVMTDsKLSAgfQotICBpZihCQUNLRU5ELT5jdHgpIHsKLSAgICBTU0xfQ1RYX2ZyZWUoQkFDS0VORC0+Y3R4KTsKLSAgICBCQUNLRU5ELT5jdHggPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGN5YXNzbF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKLXsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW251bV07Ci0gIGNoYXIgZXJyb3JfYnVmZmVyW0NZQVNTTF9NQVhfRVJST1JfU1pdOwotICBpbnQgIGJ1ZmZzaXplID0gKGJ1ZmZlcnNpemUgPiAoc2l6ZV90KUlOVF9NQVgpID8gSU5UX01BWCA6IChpbnQpYnVmZmVyc2l6ZTsKLSAgaW50ICBucmVhZCAgICA9IFNTTF9yZWFkKEJBQ0tFTkQtPmhhbmRsZSwgYnVmLCBidWZmc2l6ZSk7Ci0KLSAgaWYobnJlYWQgPCAwKSB7Ci0gICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IoQkFDS0VORC0+aGFuZGxlLCBucmVhZCk7Ci0KLSAgICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46IC8qIG5vIG1vcmUgZGF0YSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAvKiB0aGVyZSdzIGRhdGEgcGVuZGluZywgcmUtaW52b2tlIFNTTF9yZWFkKCkgKi8KLSAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOwotICAgICAgcmV0dXJuIC0xOwotICAgIGRlZmF1bHQ6Ci0gICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHJlYWQ6ICVzLCBlcnJubyAlZCIsCi0gICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGVyciwgZXJyb3JfYnVmZmVyKSwKLSAgICAgICAgICAgIFNPQ0tFUlJOTyk7Ci0gICAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotICByZXR1cm4gbnJlYWQ7Ci19Ci0KLQotc3RhdGljIHZvaWQgQ3VybF9jeWFzc2xfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cikKLXsKLSAgKHZvaWQpcHRyOwotICAvKiBDeWFTU0wgcmV1c2VzIHNlc3Npb25zIG9uIG93biwgbm8gZnJlZSAqLwotfQotCi0KLXN0YXRpYyBzaXplX3QgQ3VybF9jeWFzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQotewotI2lmIExJQkNZQVNTTF9WRVJTSU9OX0hFWCA+PSAweDAzMDA2MDAwCi0gIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAid29sZlNTTC8lcyIsIHdvbGZTU0xfbGliX3ZlcnNpb24oKSk7Ci0jZWxpZiBkZWZpbmVkKFdPTEZTU0xfVkVSU0lPTikKLSAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIHNpemUsICJ3b2xmU1NMLyVzIiwgV09MRlNTTF9WRVJTSU9OKTsKLSNlbGlmIGRlZmluZWQoQ1lBU1NMX1ZFUlNJT04pCi0gIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAiQ3lhU1NMLyVzIiwgQ1lBU1NMX1ZFUlNJT04pOwotI2Vsc2UKLSAgcmV0dXJuIG1zbnByaW50ZihidWZmZXIsIHNpemUsICJDeWFTU0wvJXMiLCAiPDEuOC44Iik7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgaW50IEN1cmxfY3lhc3NsX2luaXQodm9pZCkKLXsKLSAgcmV0dXJuIChDeWFTU0xfSW5pdCgpID09IFNTTF9TVUNDRVNTKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBDdXJsX2N5YXNzbF9jbGVhbnVwKHZvaWQpCi17Ci0gIEN5YVNTTF9DbGVhbnVwKCk7Ci19Ci0KLQotc3RhdGljIGJvb2wgQ3VybF9jeWFzc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSogY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KQotewotICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbY29ubmluZGV4XTsKLSAgaWYoQkFDS0VORC0+aGFuZGxlKSAgIC8qIFNTTCBpcyBpbiB1c2UgKi8KLSAgICByZXR1cm4gKDAgIT0gU1NMX3BlbmRpbmcoQkFDS0VORC0+aGFuZGxlKSkgPyBUUlVFIDogRkFMU0U7Ci0gIGVsc2UKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGxheWVyIGJ1dCBrZWVwIHRoZQotICogc29ja2V0IG9wZW4gKENDQyAtIENsZWFyIENvbW1hbmQgQ2hhbm5lbCkKLSAqLwotc3RhdGljIGludCBDdXJsX2N5YXNzbF9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCi17Ci0gIGludCByZXR2YWwgPSAwOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLQotICBpZihCQUNLRU5ELT5oYW5kbGUpIHsKLSAgICBTU0xfZnJlZShCQUNLRU5ELT5oYW5kbGUpOwotICAgIEJBQ0tFTkQtPmhhbmRsZSA9IE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHJldHZhbDsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUKLWN5YXNzbF9jb25uZWN0X2NvbW1vbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICBib29sIG5vbmJsb2NraW5nLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSAgdGltZV90IHRpbWVvdXRfbXM7Ci0gIGludCB3aGF0OwotCi0gIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KLSAgaWYoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubnNzbC0+c3RhdGUpIHsKLSAgICAqZG9uZSA9IFRSVUU7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotICB9Ci0KLSAgaWYoc3NsX2Nvbm5lY3RfMSA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7Ci0gICAgLyogRmluZCBvdXQgaG93IG11Y2ggbW9yZSB0aW1lIHdlJ3JlIGFsbG93ZWQgKi8KLSAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKLQotICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7Ci0gICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwotICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gY3lhc3NsX2Nvbm5lY3Rfc3RlcDEoY29ubiwgc29ja2luZGV4KTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgd2hpbGUoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8Ci0gICAgICAgIHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8Ci0gICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7Ci0KLSAgICAvKiBjaGVjayBhbGxvd2VkIHRpbWUgbGVmdCAqLwotICAgIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOwotCi0gICAgaWYodGltZW91dF9tcyA8IDApIHsKLSAgICAgIC8qIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGltZSBhbHJlYWR5IGlzIHVwICovCi0gICAgICBmYWlsZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdGltZW91dCIpOwotICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICB9Ci0KLSAgICAvKiBpZiBzc2wgaXMgZXhwZWN0aW5nIHNvbWV0aGluZywgY2hlY2sgaWYgaXQncyBhdmFpbGFibGUuICovCi0gICAgaWYoY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9PSBzc2xfY29ubmVjdF8yX3JlYWRpbmcKLSAgICAgICB8fCBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfd3JpdGluZykgewotCi0gICAgICBjdXJsX3NvY2tldF90IHdyaXRlZmQgPSBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0KLSAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZT9zb2NrZmQ6Q1VSTF9TT0NLRVRfQkFEOwotICAgICAgY3VybF9zb2NrZXRfdCByZWFkZmQgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0KLSAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZT9zb2NrZmQ6Q1VSTF9TT0NLRVRfQkFEOwotCi0gICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfY2hlY2socmVhZGZkLCBDVVJMX1NPQ0tFVF9CQUQsIHdyaXRlZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmc/MDp0aW1lb3V0X21zKTsKLSAgICAgIGlmKHdoYXQgPCAwKSB7Ci0gICAgICAgIC8qIGZhdGFsIGVycm9yICovCi0gICAgICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKDAgPT0gd2hhdCkgewotICAgICAgICBpZihub25ibG9ja2luZykgewotICAgICAgICAgICpkb25lID0gRkFMU0U7Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIC8qIHRpbWVvdXQgKi8KLSAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdGltZW91dCIpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIHNvY2tldCBpcyByZWFkYWJsZSBvciB3cml0YWJsZSAqLwotICAgIH0KLQotICAgIC8qIFJ1biB0cmFuc2FjdGlvbiwgYW5kIHJldHVybiB0byB0aGUgY2FsbGVyIGlmIGl0IGZhaWxlZCBvciBpZgotICAgICAqIHRoaXMgY29ubmVjdGlvbiBpcyBwYXJ0IG9mIGEgbXVsdGkgaGFuZGxlIGFuZCB0aGlzIGxvb3Agd291bGQKLSAgICAgKiBleGVjdXRlIGFnYWluLiBUaGlzIHBlcm1pdHMgdGhlIG93bmVyIG9mIGEgbXVsdGkgaGFuZGxlIHRvCi0gICAgICogYWJvcnQgYSBjb25uZWN0aW9uIGF0dGVtcHQgYmVmb3JlIHN0ZXAyIGhhcyBjb21wbGV0ZWQgd2hpbGUKLSAgICAgKiBlbnN1cmluZyB0aGF0IGEgY2xpZW50IHVzaW5nIHNlbGVjdCgpIG9yIGVwb2xsKCkgd2lsbCBhbHdheXMKLSAgICAgKiBoYXZlIGEgdmFsaWQgZmRzZXQgdG8gd2FpdCBvbi4KLSAgICAgKi8KLSAgICByZXN1bHQgPSBjeWFzc2xfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgpOwotICAgIGlmKHJlc3VsdCB8fCAobm9uYmxvY2tpbmcgJiYKLSAgICAgICAgICAgICAgICAgIChzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAotICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9IC8qIHJlcGVhdCBzdGVwMiB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIGFyZSBkb25lLiAqLwotCi0gIGlmKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewotICAgIHJlc3VsdCA9IGN5YXNzbF9jb25uZWN0X3N0ZXAzKGNvbm4sIHNvY2tpbmRleCk7Ci0gICAgaWYocmVzdWx0KQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGlmKHNzbF9jb25uZWN0X2RvbmUgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewotICAgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7Ci0gICAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gY3lhc3NsX3JlY3Y7Ci0gICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gY3lhc3NsX3NlbmQ7Ci0gICAgKmRvbmUgPSBUUlVFOwotICB9Ci0gIGVsc2UKLSAgICAqZG9uZSA9IEZBTFNFOwotCi0gIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi0KLXN0YXRpYyBDVVJMY29kZSBDdXJsX2N5YXNzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsIGJvb2wgKmRvbmUpCi17Ci0gIHJldHVybiBjeWFzc2xfY29ubmVjdF9jb21tb24oY29ubiwgc29ja2luZGV4LCBUUlVFLCBkb25lKTsKLX0KLQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9jeWFzc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgYm9vbCBkb25lID0gRkFMU0U7Ci0KLSAgcmVzdWx0ID0gY3lhc3NsX2Nvbm5lY3RfY29tbW9uKGNvbm4sIHNvY2tpbmRleCwgRkFMU0UsICZkb25lKTsKLSAgaWYocmVzdWx0KQotICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgREVCVUdBU1NFUlQoZG9uZSk7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9jeWFzc2xfcmFuZG9tKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVudHJvcHksIHNpemVfdCBsZW5ndGgpCi17Ci0gIFJORyBybmc7Ci0gICh2b2lkKWRhdGE7Ci0gIGlmKEluaXRSbmcoJnJuZykpCi0gICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwotICBpZihsZW5ndGggPiBVSU5UX01BWCkKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gIGlmKFJOR19HZW5lcmF0ZUJsb2NrKCZybmcsIGVudHJvcHksICh1bnNpZ25lZClsZW5ndGgpKQotICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKLSAgaWYoRnJlZVJuZygmcm5nKSkKLSAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIENVUkxjb2RlIEN1cmxfY3lhc3NsX3NoYTI1NnN1bShjb25zdCB1bnNpZ25lZCBjaGFyICp0bXAsIC8qIGlucHV0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRtcGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaGEyNTZzdW0gLyogb3V0cHV0ICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1bnVzZWQpCi17Ci0gIFNoYTI1NiBTSEEyNTZwdzsKLSAgKHZvaWQpdW51c2VkOwotICBJbml0U2hhMjU2KCZTSEEyNTZwdyk7Ci0gIFNoYTI1NlVwZGF0ZSgmU0hBMjU2cHcsIHRtcCwgKHdvcmQzMil0bXBsZW4pOwotICBTaGEyNTZGaW5hbCgmU0hBMjU2cHcsIHNoYTI1NnN1bSk7Ci0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIHZvaWQgKkN1cmxfY3lhc3NsX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GTyBpbmZvIFVOVVNFRF9QQVJBTSkKLXsKLSAgKHZvaWQpaW5mbzsKLSAgcmV0dXJuIEJBQ0tFTkQtPmhhbmRsZTsKLX0KLQotY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX2N5YXNzbCA9IHsKLSAgeyBDVVJMU1NMQkFDS0VORF9XT0xGU1NMLCAiV29sZlNTTCIgfSwgLyogaW5mbyAqLwotCi0jaWZkZWYgS0VFUF9QRUVSX0NFUlQKLSAgU1NMU1VQUF9QSU5ORURQVUJLRVkgfAotI2VuZGlmCi0gIFNTTFNVUFBfU1NMX0NUWCwKLQotICBzaXplb2Yoc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEpLAotCi0gIEN1cmxfY3lhc3NsX2luaXQsICAgICAgICAgICAgICAgIC8qIGluaXQgKi8KLSAgQ3VybF9jeWFzc2xfY2xlYW51cCwgICAgICAgICAgICAgLyogY2xlYW51cCAqLwotICBDdXJsX2N5YXNzbF92ZXJzaW9uLCAgICAgICAgICAgICAvKiB2ZXJzaW9uICovCi0gIEN1cmxfbm9uZV9jaGVja19jeG4sICAgICAgICAgICAgIC8qIGNoZWNrX2N4biAqLwotICBDdXJsX2N5YXNzbF9zaHV0ZG93biwgICAgICAgICAgICAvKiBzaHV0ZG93biAqLwotICBDdXJsX2N5YXNzbF9kYXRhX3BlbmRpbmcsICAgICAgICAvKiBkYXRhX3BlbmRpbmcgKi8KLSAgQ3VybF9jeWFzc2xfcmFuZG9tLCAgICAgICAgICAgICAgLyogcmFuZG9tICovCi0gIEN1cmxfbm9uZV9jZXJ0X3N0YXR1c19yZXF1ZXN0LCAgIC8qIGNlcnRfc3RhdHVzX3JlcXVlc3QgKi8KLSAgQ3VybF9jeWFzc2xfY29ubmVjdCwgICAgICAgICAgICAgLyogY29ubmVjdCAqLwotICBDdXJsX2N5YXNzbF9jb25uZWN0X25vbmJsb2NraW5nLCAvKiBjb25uZWN0X25vbmJsb2NraW5nICovCi0gIEN1cmxfY3lhc3NsX2dldF9pbnRlcm5hbHMsICAgICAgIC8qIGdldF9pbnRlcm5hbHMgKi8KLSAgQ3VybF9jeWFzc2xfY2xvc2UsICAgICAgICAgICAgICAgLyogY2xvc2Vfb25lICovCi0gIEN1cmxfbm9uZV9jbG9zZV9hbGwsICAgICAgICAgICAgIC8qIGNsb3NlX2FsbCAqLwotICBDdXJsX2N5YXNzbF9zZXNzaW9uX2ZyZWUsICAgICAgICAvKiBzZXNzaW9uX2ZyZWUgKi8KLSAgQ3VybF9ub25lX3NldF9lbmdpbmUsICAgICAgICAgICAgLyogc2V0X2VuZ2luZSAqLwotICBDdXJsX25vbmVfc2V0X2VuZ2luZV9kZWZhdWx0LCAgICAvKiBzZXRfZW5naW5lX2RlZmF1bHQgKi8KLSAgQ3VybF9ub25lX2VuZ2luZXNfbGlzdCwgICAgICAgICAgLyogZW5naW5lc19saXN0ICovCi0gIEN1cmxfbm9uZV9mYWxzZV9zdGFydCwgICAgICAgICAgIC8qIGZhbHNlX3N0YXJ0ICovCi0gIEN1cmxfbm9uZV9tZDVzdW0sICAgICAgICAgICAgICAgIC8qIG1kNXN1bSAqLwotICBDdXJsX2N5YXNzbF9zaGEyNTZzdW0gICAgICAgICAgICAvKiBzaGEyNTZzdW0gKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9jeWFzc2wuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvY3lhc3NsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTExY2MuLjAwMDAwMDAKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9jeWFzc2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNpZm5kZWYgSEVBREVSX0NVUkxfQ1lBU1NMX0gKLSNkZWZpbmUgSEVBREVSX0NVUkxfQ1lBU1NMX0gKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZmRlZiBVU0VfQ1lBU1NMCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfY3lhc3NsOwotCi0jZW5kaWYgLyogVVNFX0NZQVNTTCAqLwotI2VuZGlmIC8qIEhFQURFUl9DVVJMX0NZQVNTTF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2dza2l0LmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2dza2l0LmMKaW5kZXggYjkzZmY1ZC4uMDUzOGU0YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9nc2tpdC5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvZ3NraXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNiArMjYsOCBAQAogCiAjaW5jbHVkZSA8Z3Nrc3NsLmg+CiAjaW5jbHVkZSA8cXNvYXN5bmMuaD4KKyN1bmRlZiBIQVZFX1NPQ0tFVFBBSVIgLyogYmVjYXVzZSB0aGUgbmF0aXZlIG9uZSBpc24ndCBnb29kIGVub3VnaCAqLworI2luY2x1ZGUgInNvY2tldHBhaXIuaCIKIAogLyogU29tZSBzeW1ib2xzIGFyZSB1bmRlZmluZWQvdW5zdXBwb3J0ZWQgb24gT1M0MDAgdmVyc2lvbnMgPCBWN1IxLiAqLwogI2lmbmRlZiBHU0tfU1NMX0VYVE5fU0VSVkVSTkFNRV9SRVFVRVNUCkBAIC0xMDYsMTMgKzEwOCwxMyBAQAogI2RlZmluZSBCQUNLRU5EIGNvbm5zc2wtPmJhY2tlbmQKIAogLyogU3VwcG9ydGVkIGNpcGhlcnMuICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgZ3NraXRfY2lwaGVyIHsKICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgICAvKiBDaXBoZXIgbmFtZS4gKi8KICAgY29uc3QgY2hhciAqZ3NrdG9rZW47ICAgICAgICAvKiBDb3JyZXNwb25kaW5nIHRva2VuIGZvciBHU0tpdCBTdHJpbmcuICovCiAgIHVuc2lnbmVkIGludCB2ZXJzaW9uczsgICAgICAgLyogU1NMIHZlcnNpb24gZmxhZ3MuICovCi19ICBnc2tpdF9jaXBoZXI7Cit9OwogCi1zdGF0aWMgY29uc3QgZ3NraXRfY2lwaGVyICBjaXBoZXJ0YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBnc2tpdF9jaXBoZXIgIGNpcGhlcnRhYmxlW10gPSB7CiAgIHsgIm51bGwtbWQ1IiwgICAgICAgICAiMDEiLAogICAgICAgQ1VSTF9HU0tQUk9UT19TU0xWM19NQVNLIHwgQ1VSTF9HU0tQUk9UT19UTFNWMTBfTUFTSyB8CiAgICAgICBDVVJMX0dTS1BST1RPX1RMU1YxMV9NQVNLIHwgQ1VSTF9HU0tQUk9UT19UTFNWMTJfTUFTSyB9LApAQCAtMzA1LDcgKzMwNyw3IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjb25zdCBjaGFyICpjaXBoZXJsaXN0ID0gU1NMX0NPTk5fQ09ORklHKGNpcGhlcl9saXN0KTsKICAgY29uc3QgY2hhciAqY2xwOwotICBjb25zdCBnc2tpdF9jaXBoZXIgKmN0cDsKKyAgY29uc3Qgc3RydWN0IGdza2l0X2NpcGhlciAqY3RwOwogICBpbnQgaTsKICAgaW50IGw7CiAgIGJvb2wgdW5zdXBwb3J0ZWQ7CkBAIC01MTEsMTAwICs1MTMsNiBAQAogICBCQUNLRU5ELT5pb2Nwb3J0ID0gLTE7CiB9CiAKLS8qIFNTTCBvdmVyIFNTTAotICogUHJvYmxlbXM6Ci0gKiAxKSBHU0tpdCBjYW4gb25seSBwZXJmb3JtIFNTTCBvbiBhbiBBRl9JTkVUIG9yIEFGX0lORVQ2IHN0cmVhbSBzb2NrZXQuIFRvCi0gKiAgICBwaXBlIGFuIFNTTCBzdHJlYW0gaW50byBhbm90aGVyLCBpdCBpcyB0aGVyZWZvcmUgbmVlZGVkIHRvIGhhdmUgYSBwYWlyCi0gKiAgICBvZiBzdWNoIGNvbW11bmljYXRpbmcgc29ja2V0cyBhbmQgaGFuZGxlIHRoZSBwaXBlbGluaW5nIGV4cGxpY2l0bHkuCi0gKiAyKSBPUy80MDAgc29ja2V0cGFpcigpIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIGRvbWFpbiBBRl9VTklYLCB0aHVzIGNhbm5vdAotICogICAgYmUgdXNlZCB0byBwcm9kdWNlIHRoZSBwaXBlbGluZS4KLSAqIFRoZSBzb2x1dGlvbiBpcyB0byBzaW11bGF0ZSBzb2NrZXRwYWlyKCkgZm9yIEFGX0lORVQgd2l0aCBsb3ctbGV2ZWwgQVBJCi0gKiAgICBsaXN0ZW4oKSwgYmluZCgpIGFuZCBjb25uZWN0KCkuCi0gKi8KLQotc3RhdGljIGludAotaW5ldHNvY2tldHBhaXIoaW50IHN2WzJdKQotewotICBpbnQgbGZkOyAgICAgIC8qIExpc3RlbmluZyBzb2NrZXQuICovCi0gIGludCBzZmQ7ICAgICAgLyogU2VydmVyIHNvY2tldC4gKi8KLSAgaW50IGNmZDsgICAgICAvKiBDbGllbnQgc29ja2V0LiAqLwotICBpbnQgbGVuOwotICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjE7Ci0gIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyMjsKLQotICAvKiBDcmVhdGUgbGlzdGVuaW5nIHNvY2tldCBvbiBhIGxvY2FsIGR5bmFtaWMgcG9ydC4gKi8KLSAgbGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgaWYobGZkIDwgMCkKLSAgICByZXR1cm4gLTE7Ci0gIG1lbXNldCgoY2hhciAqKSAmYWRkcjEsIDAsIHNpemVvZihhZGRyMSkpOwotICBhZGRyMS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgYWRkcjEuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKLSAgYWRkcjEuc2luX3BvcnQgPSAwOwotICBpZihiaW5kKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcjEsIHNpemVvZihhZGRyMSkpIHx8Ci0gICAgIGxpc3RlbihsZmQsIDIpIDwgMCkgewotICAgIGNsb3NlKGxmZCk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogR2V0IHRoZSBhbGxvY2F0ZWQgcG9ydC4gKi8KLSAgbGVuID0gc2l6ZW9mKGFkZHIxKTsKLSAgaWYoZ2V0c29ja25hbWUobGZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyMSwgJmxlbikgPCAwKSB7Ci0gICAgY2xvc2UobGZkKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBDcmVhdGUgdGhlIGNsaWVudCBzb2NrZXQuICovCi0gIGNmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7Ci0gIGlmKGNmZCA8IDApIHsKLSAgICBjbG9zZShsZmQpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIFJlcXVlc3QgdW5ibG9ja2luZyBjb25uZWN0aW9uIHRvIHRoZSBsaXN0ZW5pbmcgc29ja2V0LiAqLwotICBjdXJseF9ub25ibG9jayhjZmQsIFRSVUUpOwotICBpZihjb25uZWN0KGNmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcjEsIHNpemVvZihhZGRyMSkpIDwgMCAmJgotICAgICBlcnJubyAhPSBFSU5QUk9HUkVTUykgewotICAgIGNsb3NlKGxmZCk7Ci0gICAgY2xvc2UoY2ZkKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBHZXQgdGhlIGNsaWVudCBkeW5hbWljIHBvcnQgZm9yIGludHJ1c2lvbiBjaGVjayBiZWxvdy4gKi8KLSAgbGVuID0gc2l6ZW9mKGFkZHIyKTsKLSAgaWYoZ2V0c29ja25hbWUoY2ZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyMiwgJmxlbikgPCAwKSB7Ci0gICAgY2xvc2UobGZkKTsKLSAgICBjbG9zZShjZmQpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIEFjY2VwdCB0aGUgaW5jb21pbmcgY29ubmVjdGlvbiBhbmQgZ2V0IHRoZSBzZXJ2ZXIgc29ja2V0LiAqLwotICBjdXJseF9ub25ibG9jayhsZmQsIFRSVUUpOwotICBmb3IoOzspIHsKLSAgICBsZW4gPSBzaXplb2YoYWRkcjEpOwotICAgIHNmZCA9IGFjY2VwdChsZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIxLCAmbGVuKTsKLSAgICBpZihzZmQgPCAwKSB7Ci0gICAgICBjbG9zZShsZmQpOwotICAgICAgY2xvc2UoY2ZkKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKiBDaGVjayBmb3IgcG9zc2libGUgaW50cnVzaW9uIGZyb20gYW4gZXh0ZXJuYWwgcHJvY2Vzcy4gKi8KLSAgICBpZihhZGRyMS5zaW5fYWRkci5zX2FkZHIgPT0gYWRkcjIuc2luX2FkZHIuc19hZGRyICYmCi0gICAgICAgYWRkcjEuc2luX3BvcnQgPT0gYWRkcjIuc2luX3BvcnQpCi0gICAgICBicmVhazsKLQotICAgIC8qIEludHJ1c2lvbjogcmVqZWN0IGluY29taW5nIGNvbm5lY3Rpb24uICovCi0gICAgY2xvc2Uoc2ZkKTsKLSAgfQotCi0gIC8qIERvbmUsIHJldHVybiBzb2NrZXRzIGFuZCBzdWNjZWVkLiAqLwotICBjbG9zZShsZmQpOwotICBjdXJseF9ub25ibG9jayhjZmQsIEZBTFNFKTsKLSAgc3ZbMF0gPSBjZmQ7Ci0gIHN2WzFdID0gc2ZkOwotICByZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBwaXBlX3NzbG92ZXJzc2woc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbnMpCiB7CkBAIC02MTYsNyArNTI0LDYgQEAKICAgaW50IG07CiAgIGludCBpOwogICBpbnQgcmV0ID0gMDsKLSAgc3RydWN0IHRpbWV2YWwgdHYgPSB7MCwgMH07CiAgIGNoYXIgYnVmW0NVUkxfTUFYX1dSSVRFX1NJWkVdOwogCiAgIGlmKCFjb25uc3NsLT51c2UgfHwgIWNvbm5wcm94eXNzbC0+dXNlKQpAQCAtNjM2LDcgKzU0Myw3IEBACiAgICAgaWYobiA8IGNvbm4tPnNvY2tbc29ja2luZGV4XSkKICAgICAgIG4gPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CiAgIH0KLSAgaSA9IHNlbGVjdChuICsgMSwgJmZkc19yZWFkLCAmZmRzX3dyaXRlLCBOVUxMLCAmdHYpOworICBpID0gQ3VybF9zZWxlY3QobiArIDEsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgTlVMTCwgMCk7CiAgIGlmKGkgPCAwKQogICAgIHJldHVybiAtMTsgIC8qIFNlbGVjdCBlcnJvci4gKi8KIApAQCAtODU1LDcgKzc2Miw3IEBACiAKICAgLyogRXN0YWJsaXNoIGEgcGlwZWxpbmluZyBzb2NrZXQgcGFpciBmb3IgU1NMIG92ZXIgU1NMLiAqLwogICBpZihjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XS51c2UpIHsKLSAgICBpZihpbmV0c29ja2V0cGFpcihzb2NrcGFpcikpCisgICAgaWYoQ3VybF9zb2NrZXRwYWlyKDAsIDAsIDAsIHNvY2twYWlyKSkKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICBCQUNLRU5ELT5sb2NhbGZkID0gc29ja3BhaXJbMF07CiAgICAgQkFDS0VORC0+cmVtb3RlZmQgPSBzb2NrcGFpclsxXTsKQEAgLTkxMiw3ICs4MTksNyBAQAogICBpZighcmVzdWx0KSB7CiAgICAgLyogQ29tcHV0ZSB0aGUgaGFuZHNoYWtlIHRpbWVvdXQuIFNpbmNlIEdTS2l0IGdyYW51bGFyaXR5IGlzIDEgc2Vjb25kLAogICAgICAgIHdlIHJvdW5kIHVwIHRoZSByZXF1aXJlZCB2YWx1ZS4gKi8KLSAgICBsb25nIHRpbWVvdXQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworICAgIHRpbWVkaWZmX3QgdGltZW91dCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CiAgICAgaWYodGltZW91dCA8IDApCiAgICAgICByZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CiAgICAgZWxzZQpAQCAtMTAyNSw3ICs5MzIsNyBAQAogICAvKiBQb2xsIG9yIHdhaXQgZm9yIGVuZCBvZiBTU0wgYXN5bmNocm9ub3VzIGhhbmRzaGFrZS4gKi8KIAogICBmb3IoOzspIHsKLSAgICBsb25nIHRpbWVvdXRfbXMgPSBub25ibG9ja2luZz8gMDogQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKyAgICB0aW1lZGlmZl90IHRpbWVvdXRfbXMgPSBub25ibG9ja2luZz8gMDogQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKICAgICBpZih0aW1lb3V0X21zIDwgMCkKICAgICAgIHRpbWVvdXRfbXMgPSAwOwogICAgIHN0bXYudHZfc2VjID0gdGltZW91dF9tcyAvIDEwMDA7CkBAIC0xMTU3LDcgKzEwNjQsNyBAQAogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGxvbmcgdGltZW91dF9tczsKKyAgdGltZWRpZmZfdCB0aW1lb3V0X21zOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAogICAqZG9uZSA9IGNvbm5zc2wtPnN0YXRlID09IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9nc2tpdC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9nc2tpdC5oCmluZGV4IDQ2NmVlNGQuLmIwNmI1ZTEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvZ3NraXQuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2dza2l0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvZ3Rscy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9ndGxzLmMKaW5kZXggODY5M2NkYy4uOWI0YzM2NSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9ndGxzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9ndGxzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTcyLDM2ICs3MiwxMSBAQAogI2VuZGlmCiBzdGF0aWMgYm9vbCBndGxzX2luaXRlZCA9IEZBTFNFOwogCi0jaWYgZGVmaW5lZChHTlVUTFNfVkVSU0lPTl9OVU1CRVIpCi0jICBpZiAoR05VVExTX1ZFUlNJT05fTlVNQkVSID49IDB4MDIwYzAwKQotIyAgICB1bmRlZiBnbnV0bHNfdHJhbnNwb3J0X3NldF9sb3dhdAotIyAgICBkZWZpbmUgZ251dGxzX3RyYW5zcG9ydF9zZXRfbG93YXQoQSxCKSBDdXJsX25vcF9zdG10Ci0jICAgIGRlZmluZSBVU0VfR05VVExTX1BSSU9SSVRZX1NFVF9ESVJFQ1QgMQotIyAgZW5kaWYKLSMgIGlmIChHTlVUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMjBjMDMpCi0jICAgIGRlZmluZSBHTlVUTFNfTUFQU19XSU5TT0NLX0VSUk9SUyAxCi0jICBlbmRpZgotCi0jICBpZiBIQVZFX0dOVVRMU19BTFBOX1NFVF9QUk9UT0NPTFMKLSMgICAgZGVmaW5lIEhBU19BTFBOCi0jICBlbmRpZgotCi0jICBpZiBIQVZFX0dOVVRMU19PQ1NQX1JFUV9JTklUCi0jICAgIGRlZmluZSBIQVNfT0NTUAotIyAgZW5kaWYKLQotIyAgaWYgKEdOVVRMU19WRVJTSU9OX05VTUJFUiA+PSAweDAzMDMwNikKLSMgICAgZGVmaW5lIEhBU19DQVBBVEgKLSMgIGVuZGlmCisjaWYgIWRlZmluZWQoR05VVExTX1ZFUlNJT05fTlVNQkVSKSB8fCAoR05VVExTX1ZFUlNJT05fTlVNQkVSIDwgMHgwMzAxMGEpCisjZXJyb3IgInRvbyBvbGQgR251VExTIHZlcnNpb24iCiAjZW5kaWYKIAotI2lmIChHTlVUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMzA2MDMpCi0jZGVmaW5lIEhBU19UTFMxMwotI2VuZGlmCi0KLSNpZmRlZiBIQVNfT0NTUAogIyBpbmNsdWRlIDxnbnV0bHMvb2NzcC5oPgotI2VuZGlmCiAKIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhIHsKICAgZ251dGxzX3Nlc3Npb25fdCBzZXNzaW9uOwpAQCAtMTExLDU4ICs4NiwxMCBAQAogI2VuZGlmCiB9OwogCi0jZGVmaW5lIEJBQ0tFTkQgY29ubnNzbC0+YmFja2VuZAotCi0vKgotICogQ3VzdG9tIHB1c2ggYW5kIHB1bGwgY2FsbGJhY2sgZnVuY3Rpb25zIHVzZWQgYnkgR05VIFRMUyB0byByZWFkIGFuZCB3cml0ZQotICogdG8gdGhlIHNvY2tldC4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgc2ltcGxlIHdyYXBwZXJzIHRvIHNlbmQoKSBhbmQgcmVjdigpCi0gKiAoYWx0aG91Z2ggaGVyZSB1c2luZyB0aGUgc3JlYWQvc3dyaXRlIG1hY3JvcyBhcyBkZWZpbmVkIGJ5Ci0gKiBjdXJsX3NldHVwX29uY2UuaCkuCi0gKiBXZSB1c2UgY3VzdG9tIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiB0aGUgR05VIFRMUyBkZWZhdWx0cyBiZWNhdXNlIGl0IGFsbG93cwotICogdXMgdG8gZ2V0IHNwZWNpZmljIGFib3V0IHRoZSBmb3VydGggImZsYWdzIiBhcmd1bWVudCwgYW5kIHRvIHVzZSBhcmJpdHJhcnkKLSAqIHByaXZhdGUgZGF0YSB3aXRoIGdudXRsc190cmFuc3BvcnRfc2V0X3B0ciBpZiB3ZSB3aXNoLgotICoKLSAqIFdoZW4gdGhlc2UgY3VzdG9tIHB1c2ggYW5kIHB1bGwgY2FsbGJhY2tzIGZhaWwsIEdOVSBUTFMgY2hlY2tzIGl0cyBvd24KLSAqIHNlc3Npb24tc3BlY2lmaWMgZXJyb3IgdmFyaWFibGUsIGFuZCB3aGVuIG5vdCBzZXQgYWxzbyBpdHMgb3duIGdsb2JhbAotICogZXJybm8gdmFyaWFibGUsIGluIG9yZGVyIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uLiBHTlUgVExTIGRvZXMgbm90Ci0gKiByZXF1aXJlIHRoYXQgdGhlIHRyYW5zcG9ydCBpcyBhY3R1YWxseSBhIHNvY2tldC4gVGhpcyBpbXBsaWVzIHRoYXQgZm9yCi0gKiBXaW5kb3dzIGJ1aWxkcyB0aGVzZSBjYWxsYmFja3Mgc2hvdWxkIGlkZWFsbHkgc2V0IHRoZSBzZXNzaW9uLXNwZWNpZmljCi0gKiBlcnJvciB2YXJpYWJsZSB1c2luZyBmdW5jdGlvbiBnbnV0bHNfdHJhbnNwb3J0X3NldF9lcnJubyBvciBhcyBhIGxhc3QKLSAqIHJlc29ydCBnbG9iYWwgZXJybm8gdmFyaWFibGUgdXNpbmcgZ251dGxzX3RyYW5zcG9ydF9zZXRfZ2xvYmFsX2Vycm5vLAotICogd2l0aCBhIHRyYW5zcG9ydCBhZ25vc3RpYyBlcnJvciB2YWx1ZS4gVGhpcyBpbXBsaWVzIHRoYXQgc29tZSB3aW5zb2NrCi0gKiBlcnJvciB0cmFuc2xhdGlvbiBtdXN0IHRha2UgcGxhY2UgaW4gdGhlc2UgY2FsbGJhY2tzLgotICoKLSAqIFBhcmFncmFwaCBhYm92ZSBhcHBsaWVzIHRvIEdOVSBUTFMgdmVyc2lvbnMgb2xkZXIgdGhhbiAyLjEyLjMsIHNpbmNlCi0gKiB0aGlzIHZlcnNpb24gR05VIFRMUyBkb2VzIGl0cyBvd24gaW50ZXJuYWwgd2luc29jayBlcnJvciB0cmFuc2xhdGlvbgotICogdXNpbmcgc3lzdGVtX2Vycm5vKCkgZnVuY3Rpb24uCi0gKi8KLQotI2lmIGRlZmluZWQoVVNFX1dJTlNPQ0spICYmICFkZWZpbmVkKEdOVVRMU19NQVBTX1dJTlNPQ0tfRVJST1JTKQotIyAgZGVmaW5lIGd0bHNfRUlOVFIgIDQKLSMgIGRlZmluZSBndGxzX0VJTyAgICA1Ci0jICBkZWZpbmUgZ3Rsc19FQUdBSU4gMTEKLXN0YXRpYyBpbnQgZ3Rsc19tYXBwZWRfc29ja2Vycm5vKHZvaWQpCi17Ci0gIHN3aXRjaChTT0NLRVJSTk8pIHsKLSAgY2FzZSBXU0FFV09VTERCTE9DSzoKLSAgICByZXR1cm4gZ3Rsc19FQUdBSU47Ci0gIGNhc2UgV1NBRUlOVFI6Ci0gICAgcmV0dXJuIGd0bHNfRUlOVFI7Ci0gIGRlZmF1bHQ6Ci0gICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIGd0bHNfRUlPOwotfQotI2VuZGlmCi0KIHN0YXRpYyBzc2l6ZV90IEN1cmxfZ3Rsc19wdXNoKHZvaWQgKnMsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKICAgY3VybF9zb2NrZXRfdCBzb2NrID0gKihjdXJsX3NvY2tldF90ICopczsKICAgc3NpemVfdCByZXQgPSBzd3JpdGUoc29jaywgYnVmLCBsZW4pOwotI2lmIGRlZmluZWQoVVNFX1dJTlNPQ0spICYmICFkZWZpbmVkKEdOVVRMU19NQVBTX1dJTlNPQ0tfRVJST1JTKQotICBpZihyZXQgPCAwKQotICAgIGdudXRsc190cmFuc3BvcnRfc2V0X2dsb2JhbF9lcnJubyhndGxzX21hcHBlZF9zb2NrZXJybm8oKSk7Ci0jZW5kaWYKICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTcwLDEwICs5Nyw2IEBACiB7CiAgIGN1cmxfc29ja2V0X3Qgc29jayA9ICooY3VybF9zb2NrZXRfdCAqKXM7CiAgIHNzaXplX3QgcmV0ID0gc3JlYWQoc29jaywgYnVmLCBsZW4pOwotI2lmIGRlZmluZWQoVVNFX1dJTlNPQ0spICYmICFkZWZpbmVkKEdOVVRMU19NQVBTX1dJTlNPQ0tfRVJST1JTKQotICBpZihyZXQgPCAwKQotICAgIGdudXRsc190cmFuc3BvcnRfc2V0X2dsb2JhbF9lcnJubyhndGxzX21hcHBlZF9zb2NrZXJybm8oKSk7Ci0jZW5kaWYKICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMjg0LDExICsyMDcsMTIgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBnbnV0bHNfc2Vzc2lvbl90IHNlc3Npb24gPSBCQUNLRU5ELT5zZXNzaW9uOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbiA9IGJhY2tlbmQtPnNlc3Npb247CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogCiAgIGZvcig7OykgewotICAgIHRpbWVfdCB0aW1lb3V0X21zOworICAgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKICAgICBpbnQgcmM7CiAKICAgICAvKiBjaGVjayBhbGxvd2VkIHRpbWUgbGVmdCAqLwpAQCAtMzgzLDUxICszMDcsNiBAQAogICByZXR1cm4gLTE7CiB9CiAKLSNpZm5kZWYgVVNFX0dOVVRMU19QUklPUklUWV9TRVRfRElSRUNUCi1zdGF0aWMgQ1VSTGNvZGUKLXNldF9zc2xfdmVyc2lvbl9taW5fbWF4KGludCAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQotewotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgbG9uZyBzc2xfdmVyc2lvbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKLSAgbG9uZyBzc2xfdmVyc2lvbl9tYXggPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpOwotICBsb25nIGkgPSBzc2xfdmVyc2lvbjsKLSAgbG9uZyBwcm90b2NvbF9wcmlvcml0eV9pZHggPSAwOwotCi0gIHN3aXRjaChzc2xfdmVyc2lvbl9tYXgpIHsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfTk9ORToKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDoKLSNpZmRlZiBIQVNfVExTMTMKLSAgICAgIHNzbF92ZXJzaW9uX21heCA9IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMzsKLSNlbmRpZgotICAgICAgc3NsX3ZlcnNpb25fbWF4ID0gQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8yOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBmb3IoOyBpIDw9IChzc2xfdmVyc2lvbl9tYXggPj4gMTYpICYmCi0gICAgICAgIHByb3RvY29sX3ByaW9yaXR5X2lkeCA8IGxpc3Rfc2l6ZTsgKytpKSB7Ci0gICAgc3dpdGNoKGkpIHsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gICAgICAgIHByb3RvY29sX3ByaW9yaXR5W3Byb3RvY29sX3ByaW9yaXR5X2lkeCsrXSA9IEdOVVRMU19UTFMxXzA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKLSAgICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbcHJvdG9jb2xfcHJpb3JpdHlfaWR4KytdID0gR05VVExTX1RMUzFfMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgotICAgICAgICBwcm90b2NvbF9wcmlvcml0eVtwcm90b2NvbF9wcmlvcml0eV9pZHgrK10gPSBHTlVUTFNfVExTMV8yOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0jaWZkZWYgSEFTX1RMUzEzCi0gICAgICAgIHByb3RvY29sX3ByaW9yaXR5W3Byb3RvY29sX3ByaW9yaXR5X2lkeCsrXSA9IEdOVVRMU19UTFMxXzM7Ci0gICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgZmFpbGYoZGF0YSwgIkdudVRMUzogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0jZW5kaWYKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotI2Vsc2UKICNkZWZpbmUgR05VVExTX0NJUEhFUlMgIk5PUk1BTDotQVJDRk9VUi0xMjg6LUNUWVBFLUFMTDorQ1RZUEUtWDUwOSIKIC8qIElmIEdudVRMUyB3YXMgY29tcGlsZWQgd2l0aG91dCBzdXBwb3J0IGZvciBTUlAgaXQgd2lsbCBlcnJvciBvdXQgaWYgU1JQIGlzCiAgICByZXF1ZXN0ZWQgaW4gdGhlIHByaW9yaXR5IHN0cmluZywgc28gdHJlYXQgaXQgc3BlY2lhbGx5CkBAIC00NDUsNzcgKzMyNCw1OSBAQAogICAgIHNzbF92ZXJzaW9uX21heCA9IENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDsKICAgfQogICBzd2l0Y2goc3NsX3ZlcnNpb24gfCBzc2xfdmVyc2lvbl9tYXgpIHsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8wOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjA6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzE6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMDorVkVSUy1UTFMxLjE6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMDorVkVSUy1UTFMxLjE6K1ZFUlMtVExTMS4yOiIgR05VVExTX1NSUDsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8xOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjE6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjI6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMjoiIEdOVVRMU19TUlA7Ci0gICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMyB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMzoKLSNpZmRlZiBIQVNfVExTMTMKLSAgICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjM6IiBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotI2Vsc2UKLSAgICAgICBmYWlsZihkYXRhLCAiR251VExTOiBUTFMgMS4zIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIik7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0jZW5kaWYKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjA6K1ZFUlMtVExTMS4xOitWRVJTLVRMUzEuMjoiCi0jaWZkZWYgSEFTX1RMUzEzCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMzoiCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfU1JQOwotICAgICAgcmV0dXJuIENVUkxFX09LOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfCBDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQ6Ci0gICAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCi0gICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjI6IgotI2lmZGVmIEhBU19UTFMxMwotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjM6IgotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgR05VVExTX1NSUDsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjI6IgotI2lmZGVmIEhBU19UTFMxMwotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjM6IgotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgR05VVExTX1NSUDsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgotICAgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjI6IgotI2lmZGVmIEhBU19UTFMxMwotICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjM6IgotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgR05VVExTX1NSUDsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMCB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMDoKKyAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCisgICAgICAiK1ZFUlMtVExTMS4wIjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzE6CisgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgorICAgICAgIitWRVJTLVRMUzEuMDorVkVSUy1UTFMxLjEiOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMCB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMjoKKyAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCisgICAgICAiK1ZFUlMtVExTMS4wOitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjIiOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMSB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMToKKyAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCisgICAgICAiK1ZFUlMtVExTMS4xIjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI6CisgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgorICAgICAgIitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjIiOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMiB8IENVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMjoKKyAgICAqcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1TU0wzLjA6LVZFUlMtVExTLUFMTDoiCisgICAgICAiK1ZFUlMtVExTMS4yIjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzMgfCBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzM6CisgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgorICAgICAgIitWRVJTLVRMUzEuMyI7CisgICAgcmV0dXJuIENVUkxFX09LOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgorICAgICpwcmlvcml0eWxpc3QgPSBHTlVUTFNfQ0lQSEVSUyAiOi1WRVJTLVNTTDMuMDotVkVSUy1UTFMtQUxMOiIKKyAgICAgICIrVkVSUy1UTFMxLjA6K1ZFUlMtVExTMS4xOitWRVJTLVRMUzEuMiIKKyAgICAgICI6K1ZFUlMtVExTMS4zIjsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfCBDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQ6CisgICAgKnByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOi1WRVJTLVRMUy1BTEw6IgorICAgICAgIitWRVJTLVRMUzEuMTorVkVSUy1UTFMxLjIiCisgICAgICAiOitWRVJTLVRMUzEuMyI7CisgICAgcmV0dXJuIENVUkxFX09LOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgorICAgICpwcmlvcml0eWxpc3QgPSBHTlVUTFNfQ0lQSEVSUyAiOi1WRVJTLVNTTDMuMDotVkVSUy1UTFMtQUxMOiIKKyAgICAgICIrVkVSUy1UTFMxLjIiCisgICAgICAiOitWRVJTLVRMUzEuMyI7CisgICAgcmV0dXJuIENVUkxFX09LOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zIHwgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgorICAgICpwcmlvcml0eWxpc3QgPSBHTlVUTFNfQ0lQSEVSUyAiOi1WRVJTLVNTTDMuMDotVkVSUy1UTFMtQUxMOiIKKyAgICAgICIrVkVSUy1UTFMxLjIiCisgICAgICAiOitWRVJTLVRMUzEuMyI7CisgICAgcmV0dXJuIENVUkxFX09LOwogICB9CiAKICAgZmFpbGYoZGF0YSwgIkdudVRMUzogY2Fubm90IHNldCBzc2wgcHJvdG9jb2wiKTsKICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogfQotI2VuZGlmCiAKIHN0YXRpYyBDVVJMY29kZQogZ3Rsc19jb25uZWN0X3N0ZXAxKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKQEAgLTUyMyw2ICszODQsNyBAQAogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgdW5zaWduZWQgaW50IGluaXRfZmxhZ3M7CiAgIGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbjsKICAgaW50IHJjOwpAQCAtNTM1LDI4ICszOTcsMTIgQEAKICNlbHNlCiAgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CiAjZW5kaWYKLSNpZm5kZWYgVVNFX0dOVVRMU19QUklPUklUWV9TRVRfRElSRUNUCi0gIHN0YXRpYyBjb25zdCBpbnQgY2lwaGVyX3ByaW9yaXR5W10gPSB7Ci0gIC8qIFRoZXNlIHR3byBjaXBoZXJzIHdlcmUgYWRkZWQgdG8gR251VExTIGFzIGxhdGUgYXMgdmVyLiAzLjAuMSwKLSAgICAgYnV0IHRoaXMgY29kZSBwYXRoIGlzIG9ubHkgZXZlciB1c2VkIGZvciB2ZXIuIDwgMi4xMi4wLgotICAgICBHTlVUTFNfQ0lQSEVSX0FFU18xMjhfR0NNLAotICAgICBHTlVUTFNfQ0lQSEVSX0FFU18yNTZfR0NNLAotICAqLwotICAgIEdOVVRMU19DSVBIRVJfQUVTXzEyOF9DQkMsCi0gICAgR05VVExTX0NJUEhFUl9BRVNfMjU2X0NCQywKLSAgICBHTlVUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkMsCi0gICAgR05VVExTX0NJUEhFUl9DQU1FTExJQV8yNTZfQ0JDLAotICAgIEdOVVRMU19DSVBIRVJfM0RFU19DQkMsCi0gIH07Ci0gIHN0YXRpYyBjb25zdCBpbnQgY2VydF90eXBlX3ByaW9yaXR5W10gPSB7IEdOVVRMU19DUlRfWDUwOSwgMCB9OwotICBpbnQgcHJvdG9jb2xfcHJpb3JpdHlbXSA9IHsgMCwgMCwgMCwgMCB9OwotI2Vsc2UKICAgY29uc3QgY2hhciAqcHJpb3JpdHlsaXN0OwogICBjb25zdCBjaGFyICplcnIgPSBOVUxMOwotI2VuZGlmCi0KICAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CiAgICAgY29ubi0+aG9zdC5uYW1lOworICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KKyAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKIAogICBpZihjb25uc3NsLT5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKICAgICAvKiB0byBtYWtlIHVzIHRvbGVyYW50IGFnYWluc3QgYmVpbmcgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGZvciB0aGUKQEAgLTU2Niw2ICs0MTIsOSBAQAogICBpZighZ3Rsc19pbml0ZWQpCiAgICAgQ3VybF9ndGxzX2luaXQoKTsKIAorICAvKiBJbml0aWFsaXplIGNlcnR2ZXJpZnlyZXN1bHQgdG8gT0sgKi8KKyAgKmNlcnR2ZXJpZnlyZXN1bHQgPSAwOworCiAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSA9PSBDVVJMX1NTTFZFUlNJT05fU1NMdjIpIHsKICAgICBmYWlsZihkYXRhLCAiR251VExTIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CkBAIC01NzQsNyArNDIzLDcgQEAKICAgICBzbmkgPSBGQUxTRTsgLyogU1NMdjMgaGFzIG5vIFNOSSAqLwogCiAgIC8qIGFsbG9jYXRlIGEgY3JlZCBzdHJ1Y3QgKi8KLSAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfYWxsb2NhdGVfY3JlZGVudGlhbHMoJkJBQ0tFTkQtPmNyZWQpOworICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVkZW50aWFscygmYmFja2VuZC0+Y3JlZCk7CiAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKICAgICBmYWlsZihkYXRhLCAiZ251dGxzX2NlcnRfYWxsX2NyZWQoKSBmYWlsZWQ6ICVzIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwpAQCAtNTg1LDE0ICs0MzQsMTQgQEAKICAgICBpbmZvZihkYXRhLCAiVXNpbmcgVExTLVNSUCB1c2VybmFtZTogJXNcbiIsIFNTTF9TRVRfT1BUSU9OKHVzZXJuYW1lKSk7CiAKICAgICByYyA9IGdudXRsc19zcnBfYWxsb2NhdGVfY2xpZW50X2NyZWRlbnRpYWxzKAotICAgICAgICAgICAmQkFDS0VORC0+c3JwX2NsaWVudF9jcmVkKTsKKyAgICAgICAgICAgJmJhY2tlbmQtPnNycF9jbGllbnRfY3JlZCk7CiAgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewogICAgICAgZmFpbGYoZGF0YSwgImdudXRsc19zcnBfYWxsb2NhdGVfY2xpZW50X2NyZWQoKSBmYWlsZWQ6ICVzIiwKICAgICAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYykpOwogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgfQogCi0gICAgcmMgPSBnbnV0bHNfc3JwX3NldF9jbGllbnRfY3JlZGVudGlhbHMoQkFDS0VORC0+c3JwX2NsaWVudF9jcmVkLAorICAgIHJjID0gZ251dGxzX3NycF9zZXRfY2xpZW50X2NyZWRlbnRpYWxzKGJhY2tlbmQtPnNycF9jbGllbnRfY3JlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTih1c2VybmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04ocGFzc3dvcmQpKTsKICAgICBpZihyYyAhPSBHTlVUTFNfRV9TVUNDRVNTKSB7CkBAIC02MDUsNTIgKzQ1NCw1NCBAQAogCiAgIGlmKFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpKSB7CiAgICAgLyogc2V0IHRoZSB0cnVzdGVkIENBIGNlcnQgYnVuZGxlIGZpbGUgKi8KLSAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3ZlcmlmeV9mbGFncyhCQUNLRU5ELT5jcmVkLAorICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfdmVyaWZ5X2ZsYWdzKGJhY2tlbmQtPmNyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX1ZFUklGWV9BTExPV19YNTA5X1YxX0NBX0NSVCk7CiAKLSAgICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV90cnVzdF9maWxlKEJBQ0tFTkQtPmNyZWQsCisgICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfdHJ1c3RfZmlsZShiYWNrZW5kLT5jcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfWDUwOV9GTVRfUEVNKTsKICAgICBpZihyYyA8IDApIHsKICAgICAgIGluZm9mKGRhdGEsICJlcnJvciByZWFkaW5nIGNhIGNlcnQgZmlsZSAlcyAoJXMpXG4iLAogICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIGdudXRsc19zdHJlcnJvcihyYykpOwotICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKQorICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CisgICAgICAgICpjZXJ0dmVyaWZ5cmVzdWx0ID0gcmM7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICAgIGluZm9mKGRhdGEsICJmb3VuZCAlZCBjZXJ0aWZpY2F0ZXMgaW4gJXNcbiIsIHJjLAogICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpOwogICB9CiAKLSNpZmRlZiBIQVNfQ0FQQVRICiAgIGlmKFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpKSB7CiAgICAgLyogc2V0IHRoZSB0cnVzdGVkIENBIGNlcnQgZGlyZWN0b3J5ICovCi0gICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfdHJ1c3RfZGlyKEJBQ0tFTkQtPmNyZWQsCisgICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfdHJ1c3RfZGlyKGJhY2tlbmQtPmNyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfWDUwOV9GTVRfUEVNKTsKICAgICBpZihyYyA8IDApIHsKICAgICAgIGluZm9mKGRhdGEsICJlcnJvciByZWFkaW5nIGNhIGNlcnQgZmlsZSAlcyAoJXMpXG4iLAogICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCksIGdudXRsc19zdHJlcnJvcihyYykpOwotICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKQorICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CisgICAgICAgICpjZXJ0dmVyaWZ5cmVzdWx0ID0gcmM7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICAgIGluZm9mKGRhdGEsICJmb3VuZCAlZCBjZXJ0aWZpY2F0ZXMgaW4gJXNcbiIsCiAgICAgICAgICAgICByYywgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkpOwogICB9Ci0jZW5kaWYKIAogI2lmZGVmIENVUkxfQ0FfRkFMTEJBQ0sKICAgLyogdXNlIHN5c3RlbSBjYSBjZXJ0aWZpY2F0ZSBzdG9yZSBhcyBmYWxsYmFjayAqLwogICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikgJiYKICAgICAgIShTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSB8fCBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSkpIHsKLSAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfc3lzdGVtX3RydXN0KEJBQ0tFTkQtPmNyZWQpOworICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9zeXN0ZW1fdHJ1c3QoYmFja2VuZC0+Y3JlZCk7CiAgIH0KICNlbmRpZgogCiAgIGlmKFNTTF9TRVRfT1BUSU9OKENSTGZpbGUpKSB7CiAgICAgLyogc2V0IHRoZSBDUkwgbGlzdCBmaWxlICovCi0gICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfY3JsX2ZpbGUoQkFDS0VORC0+Y3JlZCwKKyAgICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9jcmxfZmlsZShiYWNrZW5kLT5jcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKENSTGZpbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVVRMU19YNTA5X0ZNVF9QRU0pOwogICAgIGlmKHJjIDwgMCkgewpAQCAtNjY2LDE5ICs1MTcsMjMgQEAKICAgLyogSW5pdGlhbGl6ZSBUTFMgc2Vzc2lvbiBhcyBhIGNsaWVudCAqLwogICBpbml0X2ZsYWdzID0gR05VVExTX0NMSUVOVDsKIAorI2lmIGRlZmluZWQoR05VVExTX0ZPUkNFX0NMSUVOVF9DRVJUKQorICBpbml0X2ZsYWdzIHw9IEdOVVRMU19GT1JDRV9DTElFTlRfQ0VSVDsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChHTlVUTFNfTk9fVElDS0VUUykKICAgLyogRGlzYWJsZSBUTFMgc2Vzc2lvbiB0aWNrZXRzICovCiAgIGluaXRfZmxhZ3MgfD0gR05VVExTX05PX1RJQ0tFVFM7CiAjZW5kaWYKIAotICByYyA9IGdudXRsc19pbml0KCZCQUNLRU5ELT5zZXNzaW9uLCBpbml0X2ZsYWdzKTsKKyAgcmMgPSBnbnV0bHNfaW5pdCgmYmFja2VuZC0+c2Vzc2lvbiwgaW5pdF9mbGFncyk7CiAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKICAgICBmYWlsZihkYXRhLCAiZ251dGxzX2luaXQoKSBmYWlsZWQ6ICVkIiwgcmMpOwogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgfQogCiAgIC8qIGNvbnZlbmllbnQgYXNzaWduICovCi0gIHNlc3Npb24gPSBCQUNLRU5ELT5zZXNzaW9uOworICBzZXNzaW9uID0gYmFja2VuZC0+c2Vzc2lvbjsKIAogICBpZigoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmFkZHIpKSAmJgogI2lmZGVmIEVOQUJMRV9JUFY2CkBAIC02OTUsNjIgKzU1MCw2IEBACiAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpCiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogCi0jaWZuZGVmIFVTRV9HTlVUTFNfUFJJT1JJVFlfU0VUX0RJUkVDVAotICByYyA9IGdudXRsc19jaXBoZXJfc2V0X3ByaW9yaXR5KHNlc3Npb24sIGNpcGhlcl9wcmlvcml0eSk7Ci0gIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpCi0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotCi0gIC8qIFNldHMgdGhlIHByaW9yaXR5IG9uIHRoZSBjZXJ0aWZpY2F0ZSB0eXBlcyBzdXBwb3J0ZWQgYnkgZ251dGxzLiBQcmlvcml0eQotICAgaXMgaGlnaGVyIGZvciB0eXBlcyBzcGVjaWZpZWQgYmVmb3JlIG90aGVycy4gQWZ0ZXIgc3BlY2lmeWluZyB0aGUgdHlwZXMKLSAgIHlvdSB3YW50LCB5b3UgbXVzdCBhcHBlbmQgYSAwLiAqLwotICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV90eXBlX3NldF9wcmlvcml0eShzZXNzaW9uLCBjZXJ0X3R5cGVfcHJpb3JpdHkpOwotICBpZihyYyAhPSBHTlVUTFNfRV9TVUNDRVNTKQotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLQotICBpZihTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpICE9IE5VTEwpIHsKLSAgICBmYWlsZihkYXRhLCAiY2FuJ3QgcGFzcyBhIGN1c3RvbSBjaXBoZXIgbGlzdCB0byBvbGRlciBHbnVUTFMiCi0gICAgICAgICAgIiB2ZXJzaW9ucyIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotCi0gIHN3aXRjaChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKLSAgICAgIHByb3RvY29sX3ByaW9yaXR5WzBdID0gR05VVExTX1NTTDM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbMF0gPSBHTlVUTFNfVExTMV8wOwotICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbMV0gPSBHTlVUTFNfVExTMV8xOwotICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbMl0gPSBHTlVUTFNfVExTMV8yOwotI2lmZGVmIEhBU19UTFMxMwotICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbM10gPSBHTlVUTFNfVExTMV8zOwotI2VuZGlmCi0gICAgICBicmVhazsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOgotICAgICAgewotICAgICAgICBDVVJMY29kZSByZXN1bHQgPSBzZXRfc3NsX3ZlcnNpb25fbWluX21heChwcm90b2NvbF9wcmlvcml0eSwKLSAgICAgICAgICAgICAgICBzaXplb2YocHJvdG9jb2xfcHJpb3JpdHkpL3NpemVvZihwcm90b2NvbF9wcmlvcml0eVswXSksIGNvbm4pOwotICAgICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCi0gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6Ci0gICAgICBmYWlsZihkYXRhLCAiR251VExTIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICBkZWZhdWx0OgotICAgICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotICByYyA9IGdudXRsc19wcm90b2NvbF9zZXRfcHJpb3JpdHkoc2Vzc2lvbiwgcHJvdG9jb2xfcHJpb3JpdHkpOwotICBpZihyYyAhPSBHTlVUTFNfRV9TVUNDRVNTKSB7Ci0gICAgZmFpbGYoZGF0YSwgIkRpZCB5b3UgcGFzcyBhIHZhbGlkIEdudVRMUyBjaXBoZXIgbGlzdD8iKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotI2Vsc2UKICAgLyogRW5zdXJlICtTUlAgY29tZXMgYXQgdGhlICplbmQqIG9mIGFsbCByZWxldmFudCBzdHJpbmdzIHNvIHRoYXQgaXQgY2FuIGJlCiAgICAqIHJlbW92ZWQgaWYgYSBydW4tdGltZSBlcnJvciBpbmRpY2F0ZXMgdGhhdCBTUlAgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzCiAgICAqIEdudVRMUyB2ZXJzaW9uICovCkBAIC03NjAsMTEgKzU1OSwxMSBAQAogICAgICAgYnJlYWs7CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSAgICAgIHByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wOiIKKyAgICAgIHByaW9yaXR5bGlzdCA9IEdOVVRMU19DSVBIRVJTICI6LVZFUlMtU1NMMy4wIgogI2lmZGVmIEhBU19UTFMxMwotICAgICAgICAgICAgICAgICAgICAgIitWRVJTLVRMUzEuMzoiCisgICAgICAgICAgICAgICAgICAgICAiOitWRVJTLVRMUzEuMyIKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgR05VVExTX1NSUDsKKyAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKQEAgLTc4MywzMiArNTgyLDM5IEBACiAgICAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9Ci0gIHJjID0gZ251dGxzX3ByaW9yaXR5X3NldF9kaXJlY3Qoc2Vzc2lvbiwgcHJpb3JpdHlsaXN0LCAmZXJyKTsKLSAgaWYoKHJjID09IEdOVVRMU19FX0lOVkFMSURfUkVRVUVTVCkgJiYgZXJyKSB7Ci0gICAgaWYoIXN0cmNtcChlcnIsIEdOVVRMU19TUlApKSB7Ci0gICAgICAvKiBUaGlzIEdudVRMUyB3YXMgcHJvYmFibHkgY29tcGlsZWQgd2l0aG91dCBzdXBwb3J0IGZvciBTUlAuCi0gICAgICAgKiBOb3RlIHRoYXQgZmFjdCBhbmQgdHJ5IGFnYWluIHdpdGhvdXQgaXQuICovCi0gICAgICBpbnQgdmFsaWRwcmlvcml0eWxlbiA9IGN1cmx4X3V6dG9zaShlcnIgLSBwcmlvcml0eWxpc3QpOwotICAgICAgY2hhciAqcHJpb3JpdHljb3B5ID0gc3RyZHVwKHByaW9yaXR5bGlzdCk7Ci0gICAgICBpZighcHJpb3JpdHljb3B5KQotICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAorI2lmZGVmIFVTRV9UTFNfU1JQCisgIC8qIE9ubHkgYWRkIFNSUCB0byB0aGUgY2lwaGVyIGxpc3QgaWYgU1JQIGlzIHJlcXVlc3RlZC4gT3RoZXJ3aXNlCisgICAqIEdudVRMUyB3aWxsIGRpc2FibGUgVExTIDEuMyBzdXBwb3J0LiAqLworICBpZihTU0xfU0VUX09QVElPTihhdXRodHlwZSkgPT0gQ1VSTF9UTFNBVVRIX1NSUCkgeworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocHJpb3JpdHlsaXN0KTsKKworICAgIGNoYXIgKnByaW9yaXR5c3JwID0gbWFsbG9jKGxlbiArIHNpemVvZihHTlVUTFNfU1JQKSArIDEpOworICAgIGlmKCFwcmlvcml0eXNycCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIHN0cmNweShwcmlvcml0eXNycCwgcHJpb3JpdHlsaXN0KTsKKyAgICBzdHJjcHkocHJpb3JpdHlzcnAgKyBsZW4sICI6IiBHTlVUTFNfU1JQKTsKKworICAgIHJjID0gZ251dGxzX3ByaW9yaXR5X3NldF9kaXJlY3Qoc2Vzc2lvbiwgcHJpb3JpdHlzcnAsICZlcnIpOworICAgIGZyZWUocHJpb3JpdHlzcnApOworCisgICAgaWYoKHJjID09IEdOVVRMU19FX0lOVkFMSURfUkVRVUVTVCkgJiYgZXJyKSB7CiAgICAgICBpbmZvZihkYXRhLCAiVGhpcyBHbnVUTFMgZG9lcyBub3Qgc3VwcG9ydCBTUlBcbiIpOwotICAgICAgaWYodmFsaWRwcmlvcml0eWxlbikKLSAgICAgICAgLyogUmVtb3ZlIHRoZSA6K1NSUCAqLwotICAgICAgICBwcmlvcml0eWNvcHlbdmFsaWRwcmlvcml0eWxlbiAtIDFdID0gMDsKLSAgICAgIHJjID0gZ251dGxzX3ByaW9yaXR5X3NldF9kaXJlY3Qoc2Vzc2lvbiwgcHJpb3JpdHljb3B5LCAmZXJyKTsKLSAgICAgIGZyZWUocHJpb3JpdHljb3B5KTsKICAgICB9CiAgIH0KKyAgZWxzZSB7CisjZW5kaWYKKyAgICByYyA9IGdudXRsc19wcmlvcml0eV9zZXRfZGlyZWN0KHNlc3Npb24sIHByaW9yaXR5bGlzdCwgJmVycik7CisjaWZkZWYgVVNFX1RMU19TUlAKKyAgfQorI2VuZGlmCisKICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewogICAgIGZhaWxmKGRhdGEsICJFcnJvciAlZCBzZXR0aW5nIEdudVRMUyBjaXBoZXIgbGlzdCBzdGFydGluZyB3aXRoICVzIiwKICAgICAgICAgICByYywgZXJyKTsKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgIH0KLSNlbmRpZgogCi0jaWZkZWYgSEFTX0FMUE4KICAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKICAgICBpbnQgY3VyID0gMDsKICAgICBnbnV0bHNfZGF0dW1fdCBwcm90b2NvbHNbMl07CkBAIC04MzAsMTggKzYzNiwxNiBAQAogCiAgICAgZ251dGxzX2FscG5fc2V0X3Byb3RvY29scyhzZXNzaW9uLCBwcm90b2NvbHMsIGN1ciwgMCk7CiAgIH0KLSNlbmRpZgogCiAgIGlmKFNTTF9TRVRfT1BUSU9OKGNlcnQpKSB7CiAgICAgaWYoU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpIHsKLSNpZiBIQVZFX0dOVVRMU19DRVJUSUZJQ0FURV9TRVRfWDUwOV9LRVlfRklMRTIKICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzdXBwb3J0ZWRfa2V5X2VuY3J5cHRpb25fYWxnb3JpdGhtcyA9CiAgICAgICAgIEdOVVRMU19QS0NTX1VTRV9QS0NTMTJfM0RFUyB8IEdOVVRMU19QS0NTX1VTRV9QS0NTMTJfQVJDRk9VUiB8CiAgICAgICAgIEdOVVRMU19QS0NTX1VTRV9QS0NTMTJfUkMyXzQwIHwgR05VVExTX1BLQ1NfVVNFX1BCRVMyXzNERVMgfAogICAgICAgICBHTlVUTFNfUEtDU19VU0VfUEJFUzJfQUVTXzEyOCB8IEdOVVRMU19QS0NTX1VTRV9QQkVTMl9BRVNfMTkyIHwKICAgICAgICAgR05VVExTX1BLQ1NfVVNFX1BCRVMyX0FFU18yNTY7CiAgICAgICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXlfZmlsZTIoCi0gICAgICAgICAgIEJBQ0tFTkQtPmNyZWQsCisgICAgICAgICAgIGJhY2tlbmQtPmNyZWQsCiAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGNlcnQpLAogICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpID8KICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oa2V5KSA6IFNTTF9TRVRfT1BUSU9OKGNlcnQpLApAQCAtODU0LDE0ICs2NTgsMTAgQEAKICAgICAgICAgICAgICAgZ251dGxzX3N0cmVycm9yKHJjKSk7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICAgIH0KLSNlbHNlCi0gICAgICBmYWlsZihkYXRhLCAiZ251dGxzIGxhY2tzIHN1cHBvcnQgZm9yIGVuY3J5cHRlZCBrZXkgZmlsZXMiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSNlbmRpZgogICAgIH0KICAgICBlbHNlIHsKICAgICAgIGlmKGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXlfZmlsZSgKLSAgICAgICAgICAgQkFDS0VORC0+Y3JlZCwKKyAgICAgICAgICAgYmFja2VuZC0+Y3JlZCwKICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oY2VydCksCiAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSkgPwogICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpIDogU1NMX1NFVF9PUFRJT04oY2VydCksCkBAIC04NzcsNyArNjc3LDcgQEAKICAgLyogcHV0IHRoZSBjcmVkZW50aWFscyB0byB0aGUgY3VycmVudCBzZXNzaW9uICovCiAgIGlmKFNTTF9TRVRfT1BUSU9OKGF1dGh0eXBlKSA9PSBDVVJMX1RMU0FVVEhfU1JQKSB7CiAgICAgcmMgPSBnbnV0bHNfY3JlZGVudGlhbHNfc2V0KHNlc3Npb24sIEdOVVRMU19DUkRfU1JQLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQUNLRU5ELT5zcnBfY2xpZW50X2NyZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLT5zcnBfY2xpZW50X2NyZWQpOwogICAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKICAgICAgIGZhaWxmKGRhdGEsICJnbnV0bHNfY3JlZGVudGlhbHNfc2V0KCkgZmFpbGVkOiAlcyIsIGdudXRsc19zdHJlcnJvcihyYykpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwpAQCAtODg3LDcgKzY4Nyw3IEBACiAjZW5kaWYKICAgewogICAgIHJjID0gZ251dGxzX2NyZWRlbnRpYWxzX3NldChzZXNzaW9uLCBHTlVUTFNfQ1JEX0NFUlRJRklDQVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQUNLRU5ELT5jcmVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC0+Y3JlZCk7CiAgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewogICAgICAgZmFpbGYoZGF0YSwgImdudXRsc19jcmVkZW50aWFsc19zZXQoKSBmYWlsZWQ6ICVzIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CkBAIC05MTMsMTAgKzcxMyw2IEBACiAgIGdudXRsc190cmFuc3BvcnRfc2V0X3B1c2hfZnVuY3Rpb24oc2Vzc2lvbiwgZ251dGxzX3RyYW5zcG9ydF9wdXNoKTsKICAgZ251dGxzX3RyYW5zcG9ydF9zZXRfcHVsbF9mdW5jdGlvbihzZXNzaW9uLCBnbnV0bHNfdHJhbnNwb3J0X3B1bGwpOwogCi0gIC8qIGxvd2F0IG11c3QgYmUgc2V0IHRvIHplcm8gd2hlbiB1c2luZyBjdXN0b20gcHVzaCBhbmQgcHVsbCBmdW5jdGlvbnMuICovCi0gIGdudXRsc190cmFuc3BvcnRfc2V0X2xvd2F0KHNlc3Npb24sIDApOwotCi0jaWZkZWYgSEFTX09DU1AKICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXN0YXR1cykpIHsKICAgICByYyA9IGdudXRsc19vY3NwX3N0YXR1c19yZXF1ZXN0X2VuYWJsZV9jbGllbnQoc2Vzc2lvbiwgTlVMTCwgMCwgTlVMTCk7CiAgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewpAQCAtOTI0LDcgKzcyMCw2IEBACiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgfQogICB9Ci0jZW5kaWYKIAogICAvKiBUaGlzIG1pZ2h0IGJlIGEgcmVjb25uZWN0LCBzbyB3ZSBjaGVjayBmb3IgYSBzZXNzaW9uIElEIGluIHRoZSBjYWNoZQogICAgICB0byBzcGVlZCB1cCB0aGluZ3MgKi8KQEAgLTEwMTYsMTcgKzgxMSwxNyBAQAogICB1bnNpZ25lZCBpbnQgdmVyaWZ5X3N0YXR1cyA9IDA7CiAgIGdudXRsc194NTA5X2NydF90IHg1MDlfY2VydCwgeDUwOV9pc3N1ZXI7CiAgIGdudXRsc19kYXR1bV90IGlzc3VlcnA7Ci0gIGNoYXIgY2VydGJ1ZlsyNTZdID0gIiI7IC8qIGJpZyBlbm91Z2g/ICovCisgIGdudXRsc19kYXR1bV90IGNlcnRmaWVsZHM7CisgIGNoYXIgY2VydG5hbWVbNjVdID0gIiI7IC8qIGxpbWl0ZWQgdG8gNjQgY2hhcnMgYnkgQVNOLjEgKi8KICAgc2l6ZV90IHNpemU7CiAgIHRpbWVfdCBjZXJ0Y2xvY2s7CiAgIGNvbnN0IGNoYXIgKnB0cjsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBnbnV0bHNfc2Vzc2lvbl90IHNlc3Npb24gPSBCQUNLRU5ELT5zZXNzaW9uOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbiA9IGJhY2tlbmQtPnNlc3Npb247CiAgIGludCByYzsKLSNpZmRlZiBIQVNfQUxQTgogICBnbnV0bHNfZGF0dW1fdCBwcm90bzsKLSNlbmRpZgogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwogICB1bnNpZ25lZCBpbnQgYWxnbzsKQEAgLTEwMzUsNiArODMwLDggQEAKICNlbmRpZgogICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKICAgICBjb25uLT5ob3N0Lm5hbWU7CisgIGxvbmcgKiBjb25zdCBjZXJ0dmVyaWZ5cmVzdWx0ID0gU1NMX0lTX1BST1hZKCkgPworICAgICZkYXRhLT5zZXQucHJveHlfc3NsLmNlcnR2ZXJpZnlyZXN1bHQgOiAmZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0OwogCiAgIC8qIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgc3VpdGUgdXNlZCwgZS5nLiBFQ0RIRV9SU0FfQUVTXzI1Nl9HQ01fU0hBMzg0LiAqLwogICBwdHIgPSBnbnV0bHNfY2lwaGVyX3N1aXRlX2dldF9uYW1lKGdudXRsc19reF9nZXQoc2Vzc2lvbiksCkBAIC0xMDY2LDYgKzg2Myw3IEBACiAgICAgICBlbHNlIHsKICNlbmRpZgogICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHRvIGdldCBzZXJ2ZXIgY2VydCIpOworICAgICAgICAqY2VydHZlcmlmeXJlc3VsdCA9IEdOVVRMU19FX05PX0NFUlRJRklDQVRFX0ZPVU5EOwogICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwogI2lmZGVmIFVTRV9UTFNfU1JQCiAgICAgICB9CkBAIC0xMTAyLDkgKzkwMCwxMiBAQAogICAgIHJjID0gZ251dGxzX2NlcnRpZmljYXRlX3ZlcmlmeV9wZWVyczIoc2Vzc2lvbiwgJnZlcmlmeV9zdGF0dXMpOwogICAgIGlmKHJjIDwgMCkgewogICAgICAgZmFpbGYoZGF0YSwgInNlcnZlciBjZXJ0IHZlcmlmeSBmYWlsZWQ6ICVkIiwgcmMpOworICAgICAgKmNlcnR2ZXJpZnlyZXN1bHQgPSByYzsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICB9CiAKKyAgICAqY2VydHZlcmlmeXJlc3VsdCA9IHZlcmlmeV9zdGF0dXM7CisKICAgICAvKiB2ZXJpZnlfc3RhdHVzIGlzIGEgYml0bWFzayBvZiBnbnV0bHNfY2VydGlmaWNhdGVfc3RhdHVzIGJpdHMgKi8KICAgICBpZih2ZXJpZnlfc3RhdHVzICYgR05VVExTX0NFUlRfSU5WQUxJRCkgewogICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CkBAIC0xMTIzLDcgKzkyNCw2IEBACiAgIGVsc2UKICAgICBpbmZvZihkYXRhLCAiXHQgc2VydmVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBTS0lQUEVEXG4iKTsKIAotI2lmZGVmIEhBU19PQ1NQCiAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlzdGF0dXMpKSB7CiAgICAgaWYoZ251dGxzX29jc3Bfc3RhdHVzX3JlcXVlc3RfaXNfY2hlY2tlZChzZXNzaW9uLCAwKSA9PSAwKSB7CiAgICAgICBnbnV0bHNfZGF0dW1fdCBzdGF0dXNfcmVxdWVzdDsKQEAgLTEyMjYsNyArMTAyNiw2IEBACiAgIH0KICAgZWxzZQogICAgIGluZm9mKGRhdGEsICJcdCBzZXJ2ZXIgY2VydGlmaWNhdGUgc3RhdHVzIHZlcmlmaWNhdGlvbiBTS0lQUEVEXG4iKTsKLSNlbmRpZgogCiAgIC8qIGluaXRpYWxpemUgYW4gWC41MDkgY2VydGlmaWNhdGUgc3RydWN0dXJlLiAqLwogICBnbnV0bHNfeDUwOV9jcnRfaW5pdCgmeDUwOV9jZXJ0KTsKQEAgLTEyNTMsMTEgKzEwNTIsMTEgQEAKICAgICAgICAgICBTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KT9TU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KToibm9uZSIpOwogICB9CiAKLSAgc2l6ZSA9IHNpemVvZihjZXJ0YnVmKTsKKyAgc2l6ZSA9IHNpemVvZihjZXJ0bmFtZSk7CiAgIHJjID0gZ251dGxzX3g1MDlfY3J0X2dldF9kbl9ieV9vaWQoeDUwOV9jZXJ0LCBHTlVUTFNfT0lEX1g1MjBfQ09NTU9OX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogdGhlIGZpcnN0IGFuZCBvbmx5IG9uZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUpOwogICBpZihyYykgewogICAgIGluZm9mKGRhdGEsICJlcnJvciBmZXRjaGluZyBDTiBmcm9tIGNlcnQ6JXNcbiIsCkBAIC0xMzE4LDE2ICsxMTE3LDE2IEBACiAKICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNlcnRpZmljYXRlIHN1YmplY3QgbmFtZSAoJXMpIGRvZXMgbm90IG1hdGNoICIKLSAgICAgICAgICAgICJ0YXJnZXQgaG9zdCBuYW1lICclcyciLCBjZXJ0YnVmLCBkaXNwbmFtZSk7CisgICAgICAgICAgICAidGFyZ2V0IGhvc3QgbmFtZSAnJXMnIiwgY2VydG5hbWUsIGRpc3BuYW1lKTsKICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CiAgICAgfQogICAgIGVsc2UKICAgICAgIGluZm9mKGRhdGEsICJcdCBjb21tb24gbmFtZTogJXMgKGRvZXMgbm90IG1hdGNoICclcycpXG4iLAotICAgICAgICAgICAgY2VydGJ1ZiwgZGlzcG5hbWUpOworICAgICAgICAgICAgY2VydG5hbWUsIGRpc3BuYW1lKTsKICAgfQogICBlbHNlCi0gICAgaW5mb2YoZGF0YSwgIlx0IGNvbW1vbiBuYW1lOiAlcyAobWF0Y2hlZClcbiIsIGNlcnRidWYpOworICAgIGluZm9mKGRhdGEsICJcdCBjb21tb24gbmFtZTogJXMgKG1hdGNoZWQpXG4iLCBjZXJ0bmFtZSk7CiAKICAgLyogQ2hlY2sgZm9yIHRpbWUtYmFzZWQgdmFsaWRpdHkgKi8KICAgY2VydGNsb2NrID0gZ251dGxzX3g1MDlfY3J0X2dldF9leHBpcmF0aW9uX3RpbWUoeDUwOV9jZXJ0KTsKQEAgLTEzMzUsNiArMTEzNCw3IEBACiAgIGlmKGNlcnRjbG9jayA9PSAodGltZV90KS0xKSB7CiAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnQgZXhwaXJhdGlvbiBkYXRlIHZlcmlmeSBmYWlsZWQiKTsKKyAgICAgICpjZXJ0dmVyaWZ5cmVzdWx0ID0gR05VVExTX0NFUlRfRVhQSVJFRDsKICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICB9CkBAIC0xMzQ1LDYgKzExNDUsNyBAQAogICAgIGlmKGNlcnRjbG9jayA8IHRpbWUoTlVMTCkpIHsKICAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewogICAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnRpZmljYXRlIGV4cGlyYXRpb24gZGF0ZSBoYXMgcGFzc2VkLiIpOworICAgICAgICAqY2VydHZlcmlmeXJlc3VsdCA9IEdOVVRMU19DRVJUX0VYUElSRUQ7CiAgICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgICAgIH0KQEAgLTEzNjAsNiArMTE2MSw3IEBACiAgIGlmKGNlcnRjbG9jayA9PSAodGltZV90KS0xKSB7CiAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnQgYWN0aXZhdGlvbiBkYXRlIHZlcmlmeSBmYWlsZWQiKTsKKyAgICAgICpjZXJ0dmVyaWZ5cmVzdWx0ID0gR05VVExTX0NFUlRfTk9UX0FDVElWQVRFRDsKICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICB9CkBAIC0xMzcwLDYgKzExNzIsNyBAQAogICAgIGlmKGNlcnRjbG9jayA+IHRpbWUoTlVMTCkpIHsKICAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewogICAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnRpZmljYXRlIG5vdCBhY3RpdmF0ZWQgeWV0LiIpOworICAgICAgICAqY2VydHZlcmlmeXJlc3VsdCA9IEdOVVRMU19DRVJUX05PVF9BQ1RJVkFURUQ7CiAgICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgICAgIH0KQEAgLTE0MTIsOSArMTIxNSwxMCBAQAogICAgICAgICBnbnV0bHNfeDUwOV9jcnRfZ2V0X3ZlcnNpb24oeDUwOV9jZXJ0KSk7CiAKIAotICBzaXplID0gc2l6ZW9mKGNlcnRidWYpOwotICBnbnV0bHNfeDUwOV9jcnRfZ2V0X2RuKHg1MDlfY2VydCwgY2VydGJ1ZiwgJnNpemUpOwotICBpbmZvZihkYXRhLCAiXHQgc3ViamVjdDogJXNcbiIsIGNlcnRidWYpOworICByYyA9IGdudXRsc194NTA5X2NydF9nZXRfZG4yKHg1MDlfY2VydCwgJmNlcnRmaWVsZHMpOworICBpZihyYyAhPSAwKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBpbmZvZihkYXRhLCAiXHQgc3ViamVjdDogJXNcbiIsIGNlcnRmaWVsZHMuZGF0YSk7CiAKICAgY2VydGNsb2NrID0gZ251dGxzX3g1MDlfY3J0X2dldF9hY3RpdmF0aW9uX3RpbWUoeDUwOV9jZXJ0KTsKICAgc2hvd3RpbWUoZGF0YSwgInN0YXJ0IGRhdGUiLCBjZXJ0Y2xvY2spOwpAQCAtMTQyMiwxNCArMTIyNiwxNCBAQAogICBjZXJ0Y2xvY2sgPSBnbnV0bHNfeDUwOV9jcnRfZ2V0X2V4cGlyYXRpb25fdGltZSh4NTA5X2NlcnQpOwogICBzaG93dGltZShkYXRhLCAiZXhwaXJlIGRhdGUiLCBjZXJ0Y2xvY2spOwogCi0gIHNpemUgPSBzaXplb2YoY2VydGJ1Zik7Ci0gIGdudXRsc194NTA5X2NydF9nZXRfaXNzdWVyX2RuKHg1MDlfY2VydCwgY2VydGJ1ZiwgJnNpemUpOwotICBpbmZvZihkYXRhLCAiXHQgaXNzdWVyOiAlc1xuIiwgY2VydGJ1Zik7CisgIHJjID0gZ251dGxzX3g1MDlfY3J0X2dldF9pc3N1ZXJfZG4yKHg1MDlfY2VydCwgJmNlcnRmaWVsZHMpOworICBpZihyYyAhPSAwKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBpbmZvZihkYXRhLCAiXHQgaXNzdWVyOiAlc1xuIiwgY2VydGZpZWxkcy5kYXRhKTsKICNlbmRpZgogCiAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKIAotI2lmZGVmIEhBU19BTFBOCiAgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7CiAgICAgcmMgPSBnbnV0bHNfYWxwbl9nZXRfc2VsZWN0ZWRfcHJvdG9jb2woc2Vzc2lvbiwgJnByb3RvKTsKICAgICBpZihyYyA9PSAwKSB7CkBAIC0xNDU1LDcgKzEyNTksNiBAQAogICAgIEN1cmxfbXVsdGl1c2Vfc3RhdGUoY29ubiwgY29ubi0+bmVnbnBuID09IENVUkxfSFRUUF9WRVJTSU9OXzIgPwogICAgICAgICAgICAgICAgICAgICAgICAgQlVORExFX01VTFRJUExFWCA6IEJVTkRMRV9OT19NVUxUSVVTRSk7CiAgIH0KLSNlbmRpZgogCiAgIGNvbm4tPnNzbFtzb2NraW5kZXhdLnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CiAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IGd0bHNfcmVjdjsKQEAgLTE1NzMsMTMgKzEzNzYsMTQgQEAKIHsKICAgY29uc3Qgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW2Nvbm5pbmRleF07CiAgIGJvb2wgcmVzID0gRkFMU0U7Ci0gIGlmKEJBQ0tFTkQtPnNlc3Npb24gJiYKLSAgICAgMCAhPSBnbnV0bHNfcmVjb3JkX2NoZWNrX3BlbmRpbmcoQkFDS0VORC0+c2Vzc2lvbikpCisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgaWYoYmFja2VuZC0+c2Vzc2lvbiAmJgorICAgICAwICE9IGdudXRsc19yZWNvcmRfY2hlY2tfcGVuZGluZyhiYWNrZW5kLT5zZXNzaW9uKSkKICAgICByZXMgPSBUUlVFOwogCiAgIGNvbm5zc2wgPSAmY29ubi0+cHJveHlfc3NsW2Nvbm5pbmRleF07Ci0gIGlmKEJBQ0tFTkQtPnNlc3Npb24gJiYKLSAgICAgMCAhPSBnbnV0bHNfcmVjb3JkX2NoZWNrX3BlbmRpbmcoQkFDS0VORC0+c2Vzc2lvbikpCisgIGlmKGJhY2tlbmQtPnNlc3Npb24gJiYKKyAgICAgMCAhPSBnbnV0bHNfcmVjb3JkX2NoZWNrX3BlbmRpbmcoYmFja2VuZC0+c2Vzc2lvbikpCiAgICAgcmVzID0gVFJVRTsKIAogICByZXR1cm4gcmVzOwpAQCAtMTU5Miw3ICsxMzk2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCiB7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBzc2l6ZV90IHJjID0gZ251dGxzX3JlY29yZF9zZW5kKEJBQ0tFTkQtPnNlc3Npb24sIG1lbSwgbGVuKTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBzc2l6ZV90IHJjID0gZ251dGxzX3JlY29yZF9zZW5kKGJhY2tlbmQtPnNlc3Npb24sIG1lbSwgbGVuKTsKIAogICBpZihyYyA8IDApIHsKICAgICAqY3VybGNvZGUgPSAocmMgPT0gR05VVExTX0VfQUdBSU4pCkBAIC0xNjA3LDE5ICsxNDEyLDIwIEBACiAKIHN0YXRpYyB2b2lkIGNsb3NlX29uZShzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCkKIHsKLSAgaWYoQkFDS0VORC0+c2Vzc2lvbikgewotICAgIGdudXRsc19ieWUoQkFDS0VORC0+c2Vzc2lvbiwgR05VVExTX1NIVVRfUkRXUik7Ci0gICAgZ251dGxzX2RlaW5pdChCQUNLRU5ELT5zZXNzaW9uKTsKLSAgICBCQUNLRU5ELT5zZXNzaW9uID0gTlVMTDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBpZihiYWNrZW5kLT5zZXNzaW9uKSB7CisgICAgZ251dGxzX2J5ZShiYWNrZW5kLT5zZXNzaW9uLCBHTlVUTFNfU0hVVF9XUik7CisgICAgZ251dGxzX2RlaW5pdChiYWNrZW5kLT5zZXNzaW9uKTsKKyAgICBiYWNrZW5kLT5zZXNzaW9uID0gTlVMTDsKICAgfQotICBpZihCQUNLRU5ELT5jcmVkKSB7Ci0gICAgZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY3JlZGVudGlhbHMoQkFDS0VORC0+Y3JlZCk7Ci0gICAgQkFDS0VORC0+Y3JlZCA9IE5VTEw7CisgIGlmKGJhY2tlbmQtPmNyZWQpIHsKKyAgICBnbnV0bHNfY2VydGlmaWNhdGVfZnJlZV9jcmVkZW50aWFscyhiYWNrZW5kLT5jcmVkKTsKKyAgICBiYWNrZW5kLT5jcmVkID0gTlVMTDsKICAgfQogI2lmZGVmIFVTRV9UTFNfU1JQCi0gIGlmKEJBQ0tFTkQtPnNycF9jbGllbnRfY3JlZCkgewotICAgIGdudXRsc19zcnBfZnJlZV9jbGllbnRfY3JlZGVudGlhbHMoQkFDS0VORC0+c3JwX2NsaWVudF9jcmVkKTsKLSAgICBCQUNLRU5ELT5zcnBfY2xpZW50X2NyZWQgPSBOVUxMOworICBpZihiYWNrZW5kLT5zcnBfY2xpZW50X2NyZWQpIHsKKyAgICBnbnV0bHNfc3JwX2ZyZWVfY2xpZW50X2NyZWRlbnRpYWxzKGJhY2tlbmQtPnNycF9jbGllbnRfY3JlZCk7CisgICAgYmFja2VuZC0+c3JwX2NsaWVudF9jcmVkID0gTlVMTDsKICAgfQogI2VuZGlmCiB9CkBAIC0xNjM3LDYgKzE0NDMsNyBAQAogc3RhdGljIGludCBDdXJsX2d0bHNfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBpbnQgcmV0dmFsID0gMDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKQEAgLTE2NDcsMTAgKzE0NTQsMTAgQEAKICAgICAgd2UgZG8gbm90IHNlbmQgb25lLiBMZXQncyBob3BlIG90aGVyIHNlcnZlcnMgZG8gdGhlIHNhbWUuLi4gKi8KIAogICBpZihkYXRhLT5zZXQuZnRwX2NjYyA9PSBDVVJMRlRQU1NMX0NDQ19BQ1RJVkUpCi0gICAgICBnbnV0bHNfYnllKEJBQ0tFTkQtPnNlc3Npb24sIEdOVVRMU19TSFVUX1dSKTsKKyAgICBnbnV0bHNfYnllKGJhY2tlbmQtPnNlc3Npb24sIEdOVVRMU19TSFVUX1dSKTsKICNlbmRpZgogCi0gIGlmKEJBQ0tFTkQtPnNlc3Npb24pIHsKKyAgaWYoYmFja2VuZC0+c2Vzc2lvbikgewogICAgIHNzaXplX3QgcmVzdWx0OwogICAgIGJvb2wgZG9uZSA9IEZBTFNFOwogICAgIGNoYXIgYnVmWzEyMF07CkBAIC0xNjYxLDcgKzE0NjgsNyBAQAogICAgICAgaWYod2hhdCA+IDApIHsKICAgICAgICAgLyogU29tZXRoaW5nIHRvIHJlYWQsIGxldCdzIGRvIGl0IGFuZCBob3BlIHRoYXQgaXQgaXMgdGhlIGNsb3NlCiAgICAgICAgICAgIG5vdGlmeSBhbGVydCBmcm9tIHRoZSBzZXJ2ZXIgKi8KLSAgICAgICAgcmVzdWx0ID0gZ251dGxzX3JlY29yZF9yZWN2KEJBQ0tFTkQtPnNlc3Npb24sCisgICAgICAgIHJlc3VsdCA9IGdudXRsc19yZWNvcmRfcmVjdihiYWNrZW5kLT5zZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7CiAgICAgICAgIHN3aXRjaChyZXN1bHQpIHsKICAgICAgICAgY2FzZSAwOgpAQCAtMTY5MSwxOCArMTQ5OCwxOCBAQAogICAgICAgICBkb25lID0gVFJVRTsKICAgICAgIH0KICAgICB9Ci0gICAgZ251dGxzX2RlaW5pdChCQUNLRU5ELT5zZXNzaW9uKTsKKyAgICBnbnV0bHNfZGVpbml0KGJhY2tlbmQtPnNlc3Npb24pOwogICB9Ci0gIGdudXRsc19jZXJ0aWZpY2F0ZV9mcmVlX2NyZWRlbnRpYWxzKEJBQ0tFTkQtPmNyZWQpOworICBnbnV0bHNfY2VydGlmaWNhdGVfZnJlZV9jcmVkZW50aWFscyhiYWNrZW5kLT5jcmVkKTsKIAogI2lmZGVmIFVTRV9UTFNfU1JQCiAgIGlmKFNTTF9TRVRfT1BUSU9OKGF1dGh0eXBlKSA9PSBDVVJMX1RMU0FVVEhfU1JQCiAgICAgICYmIFNTTF9TRVRfT1BUSU9OKHVzZXJuYW1lKSAhPSBOVUxMKQotICAgIGdudXRsc19zcnBfZnJlZV9jbGllbnRfY3JlZGVudGlhbHMoQkFDS0VORC0+c3JwX2NsaWVudF9jcmVkKTsKKyAgICBnbnV0bHNfc3JwX2ZyZWVfY2xpZW50X2NyZWRlbnRpYWxzKGJhY2tlbmQtPnNycF9jbGllbnRfY3JlZCk7CiAjZW5kaWYKIAotICBCQUNLRU5ELT5jcmVkID0gTlVMTDsKLSAgQkFDS0VORC0+c2Vzc2lvbiA9IE5VTEw7CisgIGJhY2tlbmQtPmNyZWQgPSBOVUxMOworICBiYWNrZW5kLT5zZXNzaW9uID0gTlVMTDsKIAogICByZXR1cm4gcmV0dmFsOwogfQpAQCAtMTcxNCw5ICsxNTIxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbbnVtXTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBzc2l6ZV90IHJldDsKIAotICByZXQgPSBnbnV0bHNfcmVjb3JkX3JlY3YoQkFDS0VORC0+c2Vzc2lvbiwgYnVmLCBidWZmZXJzaXplKTsKKyAgcmV0ID0gZ251dGxzX3JlY29yZF9yZWN2KGJhY2tlbmQtPnNlc3Npb24sIGJ1ZiwgYnVmZmVyc2l6ZSk7CiAgIGlmKChyZXQgPT0gR05VVExTX0VfQUdBSU4pIHx8IChyZXQgPT0gR05VVExTX0VfSU5URVJSVVBURUQpKSB7CiAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CiAgICAgcmV0dXJuIC0xOwpAQCAtMTgzMiwxOCArMTY0MCwxNSBAQAogCiBzdGF0aWMgYm9vbCBDdXJsX2d0bHNfY2VydF9zdGF0dXNfcmVxdWVzdCh2b2lkKQogewotI2lmZGVmIEhBU19PQ1NQCiAgIHJldHVybiBUUlVFOwotI2Vsc2UKLSAgcmV0dXJuIEZBTFNFOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkICpDdXJsX2d0bHNfZ2V0X2ludGVybmFscyhzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GTyBpbmZvIFVOVVNFRF9QQVJBTSkKIHsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICAodm9pZClpbmZvOwotICByZXR1cm4gQkFDS0VORC0+c2Vzc2lvbjsKKyAgcmV0dXJuIGJhY2tlbmQtPnNlc3Npb247CiB9CiAKIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9nbnV0bHMgPSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL2tleWxvZy5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9rZXlsb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQyMmVjCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9rZXlsb2cuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2luY2x1ZGUgImtleWxvZy5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIEtFWUxPR19MQUJFTF9NQVhMRU4gKHNpemVvZigiQ0xJRU5UX0hBTkRTSEFLRV9UUkFGRklDX1NFQ1JFVCIpIC0gMSkKKworI2RlZmluZSBDTElFTlRfUkFORE9NX1NJWkUgIDMyCisKKy8qCisgKiBUaGUgbWFzdGVyIHNlY3JldCBpbiBUTFMgMS4yIGFuZCBiZWZvcmUgaXMgYWx3YXlzIDQ4IGJ5dGVzLiBJbiBUTFMgMS4zLCB0aGUKKyAqIHNlY3JldCBzaXplIGRlcGVuZHMgb24gdGhlIGNpcGhlciBzdWl0ZSdzIGhhc2ggZnVuY3Rpb24gd2hpY2ggaXMgMzIgYnl0ZXMKKyAqIGZvciBTSEEtMjU2IGFuZCA0OCBieXRlcyBmb3IgU0hBLTM4NC4KKyAqLworI2RlZmluZSBTRUNSRVRfTUFYTEVOICAgICAgIDQ4CisKKworLyogVGhlIGZwIGZvciB0aGUgb3BlbiBTU0xLRVlMT0dGSUxFLCBvciBOVUxMIGlmIG5vdCBvcGVuICovCitzdGF0aWMgRklMRSAqa2V5bG9nX2ZpbGVfZnA7CisKK3ZvaWQKK0N1cmxfdGxzX2tleWxvZ19vcGVuKHZvaWQpCit7CisgIGNoYXIgKmtleWxvZ19maWxlX25hbWU7CisKKyAgaWYoIWtleWxvZ19maWxlX2ZwKSB7CisgICAga2V5bG9nX2ZpbGVfbmFtZSA9IGN1cmxfZ2V0ZW52KCJTU0xLRVlMT0dGSUxFIik7CisgICAgaWYoa2V5bG9nX2ZpbGVfbmFtZSkgeworICAgICAga2V5bG9nX2ZpbGVfZnAgPSBmb3BlbihrZXlsb2dfZmlsZV9uYW1lLCBGT1BFTl9BUFBFTkRURVhUKTsKKyAgICAgIGlmKGtleWxvZ19maWxlX2ZwKSB7CisjaWZkZWYgV0lOMzIKKyAgICAgICAgaWYoc2V0dmJ1ZihrZXlsb2dfZmlsZV9mcCwgTlVMTCwgX0lPTkJGLCAwKSkKKyNlbHNlCisgICAgICAgIGlmKHNldHZidWYoa2V5bG9nX2ZpbGVfZnAsIE5VTEwsIF9JT0xCRiwgNDA5NikpCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgIGZjbG9zZShrZXlsb2dfZmlsZV9mcCk7CisgICAgICAgICAga2V5bG9nX2ZpbGVfZnAgPSBOVUxMOworICAgICAgICB9CisgICAgICB9CisgICAgICBDdXJsX3NhZmVmcmVlKGtleWxvZ19maWxlX25hbWUpOworICAgIH0KKyAgfQorfQorCit2b2lkCitDdXJsX3Rsc19rZXlsb2dfY2xvc2Uodm9pZCkKK3sKKyAgaWYoa2V5bG9nX2ZpbGVfZnApIHsKKyAgICBmY2xvc2Uoa2V5bG9nX2ZpbGVfZnApOworICAgIGtleWxvZ19maWxlX2ZwID0gTlVMTDsKKyAgfQorfQorCitib29sCitDdXJsX3Rsc19rZXlsb2dfZW5hYmxlZCh2b2lkKQoreworICByZXR1cm4ga2V5bG9nX2ZpbGVfZnAgIT0gTlVMTDsKK30KKworYm9vbAorQ3VybF90bHNfa2V5bG9nX3dyaXRlX2xpbmUoY29uc3QgY2hhciAqbGluZSkKK3sKKyAgLyogVGhlIGN1cnJlbnQgbWF4aW11bSB2YWxpZCBrZXlsb2cgbGluZSBsZW5ndGggTEYgYW5kIE5VTCBpcyAxOTUuICovCisgIHNpemVfdCBsaW5lbGVuOworICBjaGFyIGJ1ZlsyNTZdOworCisgIGlmKCFrZXlsb2dfZmlsZV9mcCB8fCAhbGluZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGxpbmVsZW4gPSBzdHJsZW4obGluZSk7CisgIGlmKGxpbmVsZW4gPT0gMCB8fCBsaW5lbGVuID4gc2l6ZW9mKGJ1ZikgLSAyKSB7CisgICAgLyogRW1wdHkgbGluZSBvciB0b28gYmlnIHRvIGZpdCBpbiBhIExGIGFuZCBOVUwuICovCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgbWVtY3B5KGJ1ZiwgbGluZSwgbGluZWxlbik7CisgIGlmKGxpbmVbbGluZWxlbiAtIDFdICE9ICdcbicpIHsKKyAgICBidWZbbGluZWxlbisrXSA9ICdcbic7CisgIH0KKyAgYnVmW2xpbmVsZW5dID0gJ1wwJzsKKworICAvKiBVc2luZyBmcHV0cyBoZXJlIGluc3RlYWQgb2YgZnByaW50ZiBzaW5jZSBsaWJjdXJsJ3MgZnByaW50ZiByZXBsYWNlbWVudAorICAgICBtYXkgbm90IGJlIHRocmVhZC1zYWZlLiAqLworICBmcHV0cyhidWYsIGtleWxvZ19maWxlX2ZwKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wKK0N1cmxfdGxzX2tleWxvZ193cml0ZShjb25zdCBjaGFyICpsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVudF9yYW5kb21bQ0xJRU5UX1JBTkRPTV9TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pCit7CisgIGNvbnN0IGNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKyAgc2l6ZV90IHBvcywgaTsKKyAgY2hhciBsaW5lW0tFWUxPR19MQUJFTF9NQVhMRU4gKyAxICsgMiAqIENMSUVOVF9SQU5ET01fU0laRSArIDEgKworICAgICAgICAgICAgMiAqIFNFQ1JFVF9NQVhMRU4gKyAxICsgMV07CisKKyAgaWYoIWtleWxvZ19maWxlX2ZwKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcG9zID0gc3RybGVuKGxhYmVsKTsKKyAgaWYocG9zID4gS0VZTE9HX0xBQkVMX01BWExFTiB8fCAhc2VjcmV0bGVuIHx8IHNlY3JldGxlbiA+IFNFQ1JFVF9NQVhMRU4pIHsKKyAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuIC0gc2FuaXR5IGNoZWNrIGFueXdheS4gKi8KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBtZW1jcHkobGluZSwgbGFiZWwsIHBvcyk7CisgIGxpbmVbcG9zKytdID0gJyAnOworCisgIC8qIENsaWVudCBSYW5kb20gKi8KKyAgZm9yKGkgPSAwOyBpIDwgQ0xJRU5UX1JBTkRPTV9TSVpFOyBpKyspIHsKKyAgICBsaW5lW3BvcysrXSA9IGhleFtjbGllbnRfcmFuZG9tW2ldID4+IDRdOworICAgIGxpbmVbcG9zKytdID0gaGV4W2NsaWVudF9yYW5kb21baV0gJiAweEZdOworICB9CisgIGxpbmVbcG9zKytdID0gJyAnOworCisgIC8qIFNlY3JldCAqLworICBmb3IoaSA9IDA7IGkgPCBzZWNyZXRsZW47IGkrKykgeworICAgIGxpbmVbcG9zKytdID0gaGV4W3NlY3JldFtpXSA+PiA0XTsKKyAgICBsaW5lW3BvcysrXSA9IGhleFtzZWNyZXRbaV0gJiAweEZdOworICB9CisgIGxpbmVbcG9zKytdID0gJ1xuJzsKKyAgbGluZVtwb3NdID0gJ1wwJzsKKworICAvKiBVc2luZyBmcHV0cyBoZXJlIGluc3RlYWQgb2YgZnByaW50ZiBzaW5jZSBsaWJjdXJsJ3MgZnByaW50ZiByZXBsYWNlbWVudAorICAgICBtYXkgbm90IGJlIHRocmVhZC1zYWZlLiAqLworICBmcHV0cyhsaW5lLCBrZXlsb2dfZmlsZV9mcCk7CisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9rZXlsb2cuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMva2V5bG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiOTlkYgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMva2V5bG9nLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9LRVlMT0dfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9LRVlMT0dfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworLyoKKyAqIE9wZW5zIHRoZSBUTFMga2V5IGxvZyBmaWxlIGlmIHJlcXVlc3RlZCBieSB0aGUgdXNlci4gVGhlIFNTTEtFWUxPR0ZJTEUKKyAqIGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgb3V0cHV0IGZpbGUuCisgKi8KK3ZvaWQgQ3VybF90bHNfa2V5bG9nX29wZW4odm9pZCk7CisKKy8qCisgKiBDbG9zZXMgdGhlIFRMUyBrZXkgbG9nIGZpbGUgaWYgbm90IGFscmVhZHkuCisgKi8KK3ZvaWQgQ3VybF90bHNfa2V5bG9nX2Nsb3NlKHZvaWQpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIHN1Y2Nlc3NmdWxseSBlbmFibGVkIHRoZSBUTFMga2V5IGxvZyBmaWxlLgorICovCitib29sIEN1cmxfdGxzX2tleWxvZ19lbmFibGVkKHZvaWQpOworCisvKgorICogQXBwZW5kcyBhIGtleSBsb2cgZmlsZSBlbnRyeS4KKyAqIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGtleSBsb2cgZmlsZSBpcyBvcGVuIGFuZCBhIHZhbGlkIGVudHJ5IHdhcyBwcm92aWRlZC4KKyAqLworYm9vbCBDdXJsX3Rsc19rZXlsb2dfd3JpdGUoY29uc3QgY2hhciAqbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNsaWVudF9yYW5kb21bMzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VjcmV0LCBzaXplX3Qgc2VjcmV0bGVuKTsKKworLyoKKyAqIEFwcGVuZHMgYSBsaW5lIHRvIHRoZSBrZXkgbG9nIGZpbGUsIGVuc3VyZSBpdCBpcyB0ZXJtaW5hdGVkIGJ5IGEgTEYuCisgKiBSZXR1cm5zIHRydWUgaWZmIHRoZSBrZXkgbG9nIGZpbGUgaXMgb3BlbiBhbmQgYSB2YWxpZCBsaW5lIHdhcyBwcm92aWRlZC4KKyAqLworYm9vbCBDdXJsX3Rsc19rZXlsb2dfd3JpdGVfbGluZShjb25zdCBjaGFyICpsaW5lKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0tFWUxPR19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHMuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5jCmluZGV4IDYzZDFmNGMuLjU0NWY4MjQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMSwgSG9pLUhvIENoYW4sIDxob2loby5jaGFuQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLwogI2luY2x1ZGUgInNlbGVjdC5oIgogI2luY2x1ZGUgIm11bHRpaWYuaCIKLSNpbmNsdWRlICJwb2xhcnNzbF90aHJlYWRsb2NrLmgiCisjaW5jbHVkZSAibWJlZHRsc190aHJlYWRsb2NrLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtNzUsOCArNzUsNiBAQAogICBjb25zdCBjaGFyICpwcm90b2NvbHNbM107CiB9OwogCi0jZGVmaW5lIEJBQ0tFTkQgY29ubnNzbC0+YmFja2VuZAotCiAvKiBhcHBseSB0aHJlYWRpbmc/ICovCiAjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgfHwgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikKICNkZWZpbmUgVEhSRUFESU5HX1NVUFBPUlQKQEAgLTkxLDEyICs4OSwxMiBAQAogc3RhdGljIHZvaWQgZW50cm9weV9pbml0X211dGV4KG1iZWR0bHNfZW50cm9weV9jb250ZXh0ICpjdHgpCiB7CiAgIC8qIGxvY2sgMCA9IGVudHJvcHlfaW5pdF9tdXRleCgpICovCi0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oMCk7CisgIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfbG9ja19mdW5jdGlvbigwKTsKICAgaWYoZW50cm9weV9pbml0X2luaXRpYWxpemVkID09IDApIHsKICAgICBtYmVkdGxzX2VudHJvcHlfaW5pdChjdHgpOwogICAgIGVudHJvcHlfaW5pdF9pbml0aWFsaXplZCA9IDE7CiAgIH0KLSAgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKDApOworICBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbigwKTsKIH0KIC8qIGVuZCBvZiBlbnRyb3B5X2luaXRfbXV0ZXgoKSAqLwogCkBAIC0xMDUsOSArMTAzLDkgQEAKIHsKICAgaW50IHJldDsKICAgLyogbG9jayAxID0gZW50cm9weV9mdW5jX211dGV4KCkgKi8KLSAgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbigxKTsKKyAgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKDEpOwogICByZXQgPSBtYmVkdGxzX2VudHJvcHlfZnVuYyhkYXRhLCBvdXRwdXQsIGxlbik7Ci0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbigxKTsKKyAgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24oMSk7CiAKICAgcmV0dXJuIHJldDsKIH0KQEAgLTE5Niw2ICsxOTQsNyBAQAogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgaW50IG1iZWR0bHNfdmVyX21pbiA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsKICAgaW50IG1iZWR0bHNfdmVyX21heCA9IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMTsKICAgbG9uZyBzc2xfdmVyc2lvbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKQEAgLTIyNyw5ICsyMjYsOSBAQAogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIAotICBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uKCZCQUNLRU5ELT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKKyAgbWJlZHRsc19zc2xfY29uZl9taW5fdmVyc2lvbigmYmFja2VuZC0+Y29uZmlnLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc192ZXJfbWluKTsKLSAgbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbigmQkFDS0VORC0+Y29uZmlnLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsCisgIG1iZWR0bHNfc3NsX2NvbmZfbWF4X3ZlcnNpb24oJmJhY2tlbmQtPmNvbmZpZywgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdmVyX21heCk7CiAKICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI0MCwxNSArMjM5LDIxIEBACiAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NhZmlsZSA9IFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOwogICBjb25zdCBib29sIHZlcmlmeXBlZXIgPSBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik7CiAgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FwYXRoID0gU1NMX0NPTk5fQ09ORklHKENBcGF0aCk7CiAgIGNoYXIgKiBjb25zdCBzc2xfY2VydCA9IFNTTF9TRVRfT1BUSU9OKGNlcnQpOwogICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NybGZpbGUgPSBTU0xfU0VUX09QVElPTihDUkxmaWxlKTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKICAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+cG9ydCA6IGNvbm4tPnJlbW90ZV9wb3J0OworI2Vsc2UKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBsb25nIGludCBwb3J0ID0gY29ubi0+cmVtb3RlX3BvcnQ7CisjZW5kaWYKICAgaW50IHJldCA9IC0xOwogICBjaGFyIGVycm9yYnVmWzEyOF07CiAgIGVycm9yYnVmWzBdID0gMDsKQEAgLTI2MSw5ICsyNjYsOSBAQAogCiAjaWZkZWYgVEhSRUFESU5HX1NVUFBPUlQKICAgZW50cm9weV9pbml0X211dGV4KCZ0c19lbnRyb3B5KTsKLSAgbWJlZHRsc19jdHJfZHJiZ19pbml0KCZCQUNLRU5ELT5jdHJfZHJiZyk7CisgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCgmYmFja2VuZC0+Y3RyX2RyYmcpOwogCi0gIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCgmQkFDS0VORC0+Y3RyX2RyYmcsIGVudHJvcHlfZnVuY19tdXRleCwKKyAgcmV0ID0gbWJlZHRsc19jdHJfZHJiZ19zZWVkKCZiYWNrZW5kLT5jdHJfZHJiZywgZW50cm9weV9mdW5jX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRzX2VudHJvcHksIE5VTEwsIDApOwogICBpZihyZXQpIHsKICNpZmRlZiBNQkVEVExTX0VSUk9SX0MKQEAgLTI3MywxMSArMjc4LDExIEBACiAgICAgICAgICAgLXJldCwgZXJyb3JidWYpOwogICB9CiAjZWxzZQotICBtYmVkdGxzX2VudHJvcHlfaW5pdCgmQkFDS0VORC0+ZW50cm9weSk7Ci0gIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCgmQkFDS0VORC0+Y3RyX2RyYmcpOworICBtYmVkdGxzX2VudHJvcHlfaW5pdCgmYmFja2VuZC0+ZW50cm9weSk7CisgIG1iZWR0bHNfY3RyX2RyYmdfaW5pdCgmYmFja2VuZC0+Y3RyX2RyYmcpOwogCi0gIHJldCA9IG1iZWR0bHNfY3RyX2RyYmdfc2VlZCgmQkFDS0VORC0+Y3RyX2RyYmcsIG1iZWR0bHNfZW50cm9weV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPmVudHJvcHksIE5VTEwsIDApOworICByZXQgPSBtYmVkdGxzX2N0cl9kcmJnX3NlZWQoJmJhY2tlbmQtPmN0cl9kcmJnLCBtYmVkdGxzX2VudHJvcHlfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYWNrZW5kLT5lbnRyb3B5LCBOVUxMLCAwKTsKICAgaWYocmV0KSB7CiAjaWZkZWYgTUJFRFRMU19FUlJPUl9DCiAgICAgbWJlZHRsc19zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKQEAgLTI4OCwxMCArMjkzLDEwIEBACiAjZW5kaWYgLyogVEhSRUFESU5HX1NVUFBPUlQgKi8KIAogICAvKiBMb2FkIHRoZSB0cnVzdGVkIENBICovCi0gIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCgmQkFDS0VORC0+Y2FjZXJ0KTsKKyAgbWJlZHRsc194NTA5X2NydF9pbml0KCZiYWNrZW5kLT5jYWNlcnQpOwogCiAgIGlmKHNzbF9jYWZpbGUpIHsKLSAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoJkJBQ0tFTkQtPmNhY2VydCwgc3NsX2NhZmlsZSk7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCZiYWNrZW5kLT5jYWNlcnQsIHNzbF9jYWZpbGUpOwogCiAgICAgaWYocmV0PDApIHsKICNpZmRlZiBNQkVEVExTX0VSUk9SX0MKQEAgLTMwNiw3ICszMTEsNyBAQAogICB9CiAKICAgaWYoc3NsX2NhcGF0aCkgewotICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aCgmQkFDS0VORC0+Y2FjZXJ0LCBzc2xfY2FwYXRoKTsKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX3BhdGgoJmJhY2tlbmQtPmNhY2VydCwgc3NsX2NhcGF0aCk7CiAKICAgICBpZihyZXQ8MCkgewogI2lmZGVmIE1CRURUTFNfRVJST1JfQwpAQCAtMzIxLDEwICszMjYsMTAgQEAKICAgfQogCiAgIC8qIExvYWQgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSAqLwotICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoJkJBQ0tFTkQtPmNsaWNlcnQpOworICBtYmVkdGxzX3g1MDlfY3J0X2luaXQoJmJhY2tlbmQtPmNsaWNlcnQpOwogCiAgIGlmKHNzbF9jZXJ0KSB7Ci0gICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCZCQUNLRU5ELT5jbGljZXJ0LCBzc2xfY2VydCk7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9maWxlKCZiYWNrZW5kLT5jbGljZXJ0LCBzc2xfY2VydCk7CiAKICAgICBpZihyZXQpIHsKICNpZmRlZiBNQkVEVExTX0VSUk9SX0MKQEAgLTMzOCwxMyArMzQzLDEzIEBACiAgIH0KIAogICAvKiBMb2FkIHRoZSBjbGllbnQgcHJpdmF0ZSBrZXkgKi8KLSAgbWJlZHRsc19wa19pbml0KCZCQUNLRU5ELT5wayk7CisgIG1iZWR0bHNfcGtfaW5pdCgmYmFja2VuZC0+cGspOwogCiAgIGlmKFNTTF9TRVRfT1BUSU9OKGtleSkpIHsKLSAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoJkJBQ0tFTkQtPnBrLCBTU0xfU0VUX09QVElPTihrZXkpLAorICAgIHJldCA9IG1iZWR0bHNfcGtfcGFyc2Vfa2V5ZmlsZSgmYmFja2VuZC0+cGssIFNTTF9TRVRfT1BUSU9OKGtleSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpKTsKLSAgICBpZihyZXQgPT0gMCAmJiAhKG1iZWR0bHNfcGtfY2FuX2RvKCZCQUNLRU5ELT5waywgTUJFRFRMU19QS19SU0EpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2Nhbl9kbygmQkFDS0VORC0+cGssIE1CRURUTFNfUEtfRUNLRVkpKSkKKyAgICBpZihyZXQgPT0gMCAmJiAhKG1iZWR0bHNfcGtfY2FuX2RvKCZiYWNrZW5kLT5waywgTUJFRFRMU19QS19SU0EpIHx8CisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3BrX2Nhbl9kbygmYmFja2VuZC0+cGssIE1CRURUTFNfUEtfRUNLRVkpKSkKICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX1RZUEVfTUlTTUFUQ0g7CiAKICAgICBpZihyZXQpIHsKQEAgLTM1OSwxMCArMzY0LDEwIEBACiAgIH0KIAogICAvKiBMb2FkIHRoZSBDUkwgKi8KLSAgbWJlZHRsc194NTA5X2NybF9pbml0KCZCQUNLRU5ELT5jcmwpOworICBtYmVkdGxzX3g1MDlfY3JsX2luaXQoJmJhY2tlbmQtPmNybCk7CiAKICAgaWYoc3NsX2NybGZpbGUpIHsKLSAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3JsX3BhcnNlX2ZpbGUoJkJBQ0tFTkQtPmNybCwgc3NsX2NybGZpbGUpOworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcmxfcGFyc2VfZmlsZSgmYmFja2VuZC0+Y3JsLCBzc2xfY3JsZmlsZSk7CiAKICAgICBpZihyZXQpIHsKICNpZmRlZiBNQkVEVExTX0VSUk9SX0MKQEAgLTM3NywxNCArMzgyLDE0IEBACiAKICAgaW5mb2YoZGF0YSwgIm1iZWRUTFM6IENvbm5lY3RpbmcgdG8gJXM6JWxkXG4iLCBob3N0bmFtZSwgcG9ydCk7CiAKLSAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoJkJBQ0tFTkQtPmNvbmZpZyk7CisgIG1iZWR0bHNfc3NsX2NvbmZpZ19pbml0KCZiYWNrZW5kLT5jb25maWcpOwogCi0gIG1iZWR0bHNfc3NsX2luaXQoJkJBQ0tFTkQtPnNzbCk7Ci0gIGlmKG1iZWR0bHNfc3NsX3NldHVwKCZCQUNLRU5ELT5zc2wsICZCQUNLRU5ELT5jb25maWcpKSB7CisgIG1iZWR0bHNfc3NsX2luaXQoJmJhY2tlbmQtPnNzbCk7CisgIGlmKG1iZWR0bHNfc3NsX3NldHVwKCZiYWNrZW5kLT5zc2wsICZiYWNrZW5kLT5jb25maWcpKSB7CiAgICAgZmFpbGYoZGF0YSwgIm1iZWRUTFM6IHNzbF9pbml0IGZhaWxlZCIpOwogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgfQotICByZXQgPSBtYmVkdGxzX3NzbF9jb25maWdfZGVmYXVsdHMoJkJBQ0tFTkQtPmNvbmZpZywKKyAgcmV0ID0gbWJlZHRsc19zc2xfY29uZmlnX2RlZmF1bHRzKCZiYWNrZW5kLT5jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9JU19DTElFTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UUkFOU1BPUlRfU1RSRUFNLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfUFJFU0VUX0RFRkFVTFQpOwpAQCAtMzk0LDIwICszOTksMjAgQEAKICAgfQogCiAgIC8qIG5ldyBwcm9maWxlIHdpdGggUlNBIG1pbiBrZXkgbGVuID0gMTAyNCAuLi4gKi8KLSAgbWJlZHRsc19zc2xfY29uZl9jZXJ0X3Byb2ZpbGUoJkJBQ0tFTkQtPmNvbmZpZywKKyAgbWJlZHRsc19zc2xfY29uZl9jZXJ0X3Byb2ZpbGUoJmJhY2tlbmQtPmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1iZWR0bHNfeDUwOV9jcnRfcHJvZmlsZV9mcik7CiAKICAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgewogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSAgICBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uKCZCQUNLRU5ELT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKKyAgICBtYmVkdGxzX3NzbF9jb25mX21pbl92ZXJzaW9uKCZiYWNrZW5kLT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMSk7CiAgICAgaW5mb2YoZGF0YSwgIm1iZWRUTFM6IFNldCBtaW4gU1NMIHZlcnNpb24gdG8gVExTIDEuMFxuIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oJkJBQ0tFTkQtPmNvbmZpZywgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLAorICAgIG1iZWR0bHNfc3NsX2NvbmZfbWluX3ZlcnNpb24oJmJhY2tlbmQtPmNvbmZpZywgTUJFRFRMU19TU0xfTUFKT1JfVkVSU0lPTl8zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8wKTsKLSAgICBtYmVkdGxzX3NzbF9jb25mX21heF92ZXJzaW9uKCZCQUNLRU5ELT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKKyAgICBtYmVkdGxzX3NzbF9jb25mX21heF92ZXJzaW9uKCZiYWNrZW5kLT5jb25maWcsIE1CRURUTFNfU1NMX01BSk9SX1ZFUlNJT05fMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCk7CiAgICAgaW5mb2YoZGF0YSwgIm1iZWRUTFM6IFNldCBTU0wgdmVyc2lvbiB0byBTU0x2M1xuIik7CiAgICAgYnJlYWs7CkBAIC00MjYsMjUgKzQzMSwyNSBAQAogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgfQogCi0gIG1iZWR0bHNfc3NsX2NvbmZfYXV0aG1vZGUoJkJBQ0tFTkQtPmNvbmZpZywgTUJFRFRMU19TU0xfVkVSSUZZX09QVElPTkFMKTsKKyAgbWJlZHRsc19zc2xfY29uZl9hdXRobW9kZSgmYmFja2VuZC0+Y29uZmlnLCBNQkVEVExTX1NTTF9WRVJJRllfT1BUSU9OQUwpOwogCi0gIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCZCQUNLRU5ELT5jb25maWcsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLAotICAgICAgICAgICAgICAgICAgICAgICAmQkFDS0VORC0+Y3RyX2RyYmcpOwotICBtYmVkdGxzX3NzbF9zZXRfYmlvKCZCQUNLRU5ELT5zc2wsICZjb25uLT5zb2NrW3NvY2tpbmRleF0sCisgIG1iZWR0bHNfc3NsX2NvbmZfcm5nKCZiYWNrZW5kLT5jb25maWcsIG1iZWR0bHNfY3RyX2RyYmdfcmFuZG9tLAorICAgICAgICAgICAgICAgICAgICAgICAmYmFja2VuZC0+Y3RyX2RyYmcpOworICBtYmVkdGxzX3NzbF9zZXRfYmlvKCZiYWNrZW5kLT5zc2wsICZjb25uLT5zb2NrW3NvY2tpbmRleF0sCiAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19uZXRfc2VuZCwKICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX25ldF9yZWN2LAogICAgICAgICAgICAgICAgICAgICAgIE5VTEwgLyogIHJldl90aW1lb3V0KCkgKi8pOwogCi0gIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCZCQUNLRU5ELT5jb25maWcsCisgIG1iZWR0bHNfc3NsX2NvbmZfY2lwaGVyc3VpdGVzKCZiYWNrZW5kLT5jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2xpc3RfY2lwaGVyc3VpdGVzKCkpOwogCiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OKQotICBtYmVkdGxzX3NzbF9jb25mX3JlbmVnb3RpYXRpb24oJkJBQ0tFTkQtPmNvbmZpZywKKyAgbWJlZHRsc19zc2xfY29uZl9yZW5lZ290aWF0aW9uKCZiYWNrZW5kLT5jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9SRU5FR09USUFUSU9OX0VOQUJMRUQpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUykKLSAgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMoJkJBQ0tFTkQtPmNvbmZpZywKKyAgbWJlZHRsc19zc2xfY29uZl9zZXNzaW9uX3RpY2tldHMoJmJhY2tlbmQtPmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTX0RJU0FCTEVEKTsKICNlbmRpZgogCkBAIC00NTQsNyArNDU5LDcgQEAKIAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwogICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zZXNzaW9uLCBOVUxMLCBzb2NraW5kZXgpKSB7Ci0gICAgICByZXQgPSBtYmVkdGxzX3NzbF9zZXRfc2Vzc2lvbigmQkFDS0VORC0+c3NsLCBvbGRfc2Vzc2lvbik7CisgICAgICByZXQgPSBtYmVkdGxzX3NzbF9zZXRfc2Vzc2lvbigmYmFja2VuZC0+c3NsLCBvbGRfc2Vzc2lvbik7CiAgICAgICBpZihyZXQpIHsKICAgICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKICAgICAgICAgZmFpbGYoZGF0YSwgIm1iZWR0bHNfc3NsX3NldF9zZXNzaW9uIHJldHVybmVkIC0weCV4IiwgLXJldCk7CkBAIC00NjUsMTUgKzQ3MCwxNSBAQAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CiAgIH0KIAotICBtYmVkdGxzX3NzbF9jb25mX2NhX2NoYWluKCZCQUNLRU5ELT5jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPmNhY2VydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQkFDS0VORC0+Y3JsKTsKKyAgbWJlZHRsc19zc2xfY29uZl9jYV9jaGFpbigmYmFja2VuZC0+Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYWNrZW5kLT5jYWNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJhY2tlbmQtPmNybCk7CiAKICAgaWYoU1NMX1NFVF9PUFRJT04oa2V5KSkgewotICAgIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoJkJBQ0tFTkQtPmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCQUNLRU5ELT5jbGljZXJ0LCAmQkFDS0VORC0+cGspOworICAgIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoJmJhY2tlbmQtPmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiYWNrZW5kLT5jbGljZXJ0LCAmYmFja2VuZC0+cGspOwogICB9Ci0gIGlmKG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSgmQkFDS0VORC0+c3NsLCBob3N0bmFtZSkpIHsKKyAgaWYobWJlZHRsc19zc2xfc2V0X2hvc3RuYW1lKCZiYWNrZW5kLT5zc2wsIGhvc3RuYW1lKSkgewogICAgIC8qIG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSgpIHNldHMgdGhlIG5hbWUgdG8gdXNlIGluIENOL1NBTiBjaGVja3MgKmFuZCoKICAgICAgICB0aGUgbmFtZSB0byBzZXQgaW4gdGhlIFNOSSBleHRlbnNpb24uIFNvIGV2ZW4gaWYgY3VybCBjb25uZWN0cyB0byBhCiAgICAgICAgaG9zdCBzcGVjaWZpZWQgYXMgYW4gSVAgYWRkcmVzcywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQuICovCkBAIC00ODMsNyArNDg4LDcgQEAKIAogI2lmZGVmIEhBU19BTFBOCiAgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7Ci0gICAgY29uc3QgY2hhciAqKnAgPSAmQkFDS0VORC0+cHJvdG9jb2xzWzBdOworICAgIGNvbnN0IGNoYXIgKipwID0gJmJhY2tlbmQtPnByb3RvY29sc1swXTsKICNpZmRlZiBVU0VfTkdIVFRQMgogICAgIGlmKGRhdGEtPnNldC5odHRwdmVyc2lvbiA+PSBDVVJMX0hUVFBfVkVSU0lPTl8yKQogICAgICAgKnArKyA9IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRDsKQEAgLTQ5MiwxOSArNDk3LDE5IEBACiAgICAgKnAgPSBOVUxMOwogICAgIC8qIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjbG9uZSB0aGUgcHJvdG9jb2xzIGFycmF5LCB3aGljaCBpcyB3aHkgd2UgbmVlZAogICAgICAgIHRvIGtlZXAgaXQgYXJvdW5kICovCi0gICAgaWYobWJlZHRsc19zc2xfY29uZl9hbHBuX3Byb3RvY29scygmQkFDS0VORC0+Y29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPnByb3RvY29sc1swXSkpIHsKKyAgICBpZihtYmVkdGxzX3NzbF9jb25mX2FscG5fcHJvdG9jb2xzKCZiYWNrZW5kLT5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmFja2VuZC0+cHJvdG9jb2xzWzBdKSkgewogICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZXR0aW5nIEFMUE4gcHJvdG9jb2xzIik7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgfQotICAgIGZvcihwID0gJkJBQ0tFTkQtPnByb3RvY29sc1swXTsgKnA7ICsrcCkKKyAgICBmb3IocCA9ICZiYWNrZW5kLT5wcm90b2NvbHNbMF07ICpwOyArK3ApCiAgICAgICBpbmZvZihkYXRhLCAiQUxQTiwgb2ZmZXJpbmcgJXNcbiIsICpwKTsKICAgfQogI2VuZGlmCiAKICNpZmRlZiBNQkVEVExTX0RFQlVHCiAgIC8qIEluIG9yZGVyIHRvIG1ha2UgdGhhdCB3b3JrIGluIG1iZWR0bHMgTUJFRFRMU19ERUJVR19DIG11c3QgYmUgZGVmaW5lZC4gKi8KLSAgbWJlZHRsc19zc2xfY29uZl9kYmcoJkJBQ0tFTkQtPmNvbmZpZywgbWJlZF9kZWJ1ZywgZGF0YSk7CisgIG1iZWR0bHNfc3NsX2NvbmZfZGJnKCZiYWNrZW5kLT5jb25maWcsIG1iZWRfZGVidWcsIGRhdGEpOwogICAvKiAtIDAgTm8gZGVidWcKICAgICogLSAxIEVycm9yCiAgICAqIC0gMiBTdGF0ZSBjaGFuZ2UKQEAgLTUxNiw3ICs1MjEsNyBAQAogCiAgIC8qIGdpdmUgYXBwbGljYXRpb24gYSBjaGFuY2UgdG8gaW50ZXJmZXJlIHdpdGggbWJlZFRMUyBzZXQgdXAuICovCiAgIGlmKGRhdGEtPnNldC5zc2wuZnNzbGN0eCkgewotICAgIHJldCA9ICgqZGF0YS0+c2V0LnNzbC5mc3NsY3R4KShkYXRhLCAmQkFDS0VORC0+Y29uZmlnLAorICAgIHJldCA9ICgqZGF0YS0+c2V0LnNzbC5mc3NsY3R4KShkYXRhLCAmYmFja2VuZC0+Y29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmZzc2xjdHhwKTsKICAgICBpZihyZXQpIHsKICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciBzaWduYWxlZCBieSBzc2wgY3R4IGNhbGxiYWNrIik7CkBAIC01MzUsMTYgKzU0MCwyMiBAQAogewogICBpbnQgcmV0OwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIGNvbnN0IG1iZWR0bHNfeDUwOV9jcnQgKnBlZXJjZXJ0OworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgY29uc3QgY2hhciAqIGNvbnN0IHBpbm5lZHB1YmtleSA9IFNTTF9JU19QUk9YWSgpID8KLSAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV0gOgotICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOworICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfUFJPWFldIDoKKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOworI2Vsc2UKKyAgY29uc3QgY2hhciAqIGNvbnN0IHBpbm5lZHB1YmtleSA9CisgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXTsKKyNlbmRpZgogCiAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IG1iZWRfcmVjdjsKICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gbWJlZF9zZW5kOwogCi0gIHJldCA9IG1iZWR0bHNfc3NsX2hhbmRzaGFrZSgmQkFDS0VORC0+c3NsKTsKKyAgcmV0ID0gbWJlZHRsc19zc2xfaGFuZHNoYWtlKCZiYWNrZW5kLT5zc2wpOwogCiAgIGlmKHJldCA9PSBNQkVEVExTX0VSUl9TU0xfV0FOVF9SRUFEKSB7CiAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfcmVhZGluZzsKQEAgLTU2NiwxMCArNTc3LDEwIEBACiAgIH0KIAogICBpbmZvZihkYXRhLCAibWJlZFRMUzogSGFuZHNoYWtlIGNvbXBsZXRlLCBjaXBoZXIgaXMgJXNcbiIsCi0gICAgICAgIG1iZWR0bHNfc3NsX2dldF9jaXBoZXJzdWl0ZSgmQkFDS0VORC0+c3NsKQorICAgICAgICBtYmVkdGxzX3NzbF9nZXRfY2lwaGVyc3VpdGUoJmJhY2tlbmQtPnNzbCkKICAgICApOwogCi0gIHJldCA9IG1iZWR0bHNfc3NsX2dldF92ZXJpZnlfcmVzdWx0KCZCQUNLRU5ELT5zc2wpOworICByZXQgPSBtYmVkdGxzX3NzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgmYmFja2VuZC0+c3NsKTsKIAogICBpZighU1NMX0NPTk5fQ09ORklHKHZlcmlmeWhvc3QpKQogICAgIC8qIElnbm9yZSBob3N0bmFtZSBlcnJvcnMgaWYgdmVyaWZ5aG9zdCBpcyBkaXNhYmxlZCAqLwpAQCAtNTg4LDEwICs1OTksMTMgQEAKICAgICBlbHNlIGlmKHJldCAmIE1CRURUTFNfWDUwOV9CQURDRVJUX05PVF9UUlVTVEVEKQogICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9OT1RfVFJVU1RFRCIpOwogCisgICAgZWxzZSBpZihyZXQgJiBNQkVEVExTX1g1MDlfQkFEQ0VSVF9GVVRVUkUpCisgICAgICBmYWlsZihkYXRhLCAiQ2VydCB2ZXJpZnkgZmFpbGVkOiBCQURDRVJUX0ZVVFVSRSIpOworCiAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgfQogCi0gIHBlZXJjZXJ0ID0gbWJlZHRsc19zc2xfZ2V0X3BlZXJfY2VydCgmQkFDS0VORC0+c3NsKTsKKyAgcGVlcmNlcnQgPSBtYmVkdGxzX3NzbF9nZXRfcGVlcl9jZXJ0KCZiYWNrZW5kLT5zc2wpOwogCiAgIGlmKHBlZXJjZXJ0ICYmIGRhdGEtPnNldC52ZXJib3NlKSB7CiAgICAgY29uc3Qgc2l6ZV90IGJ1ZnNpemUgPSAxNjM4NDsKQEAgLTY2MSw3ICs2NzUsNyBAQAogCiAjaWZkZWYgSEFTX0FMUE4KICAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKLSAgICBjb25zdCBjaGFyICpuZXh0X3Byb3RvY29sID0gbWJlZHRsc19zc2xfZ2V0X2FscG5fcHJvdG9jb2woJkJBQ0tFTkQtPnNzbCk7CisgICAgY29uc3QgY2hhciAqbmV4dF9wcm90b2NvbCA9IG1iZWR0bHNfc3NsX2dldF9hbHBuX3Byb3RvY29sKCZiYWNrZW5kLT5zc2wpOwogCiAgICAgaWYobmV4dF9wcm90b2NvbCkgewogICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJXNcbiIsIG5leHRfcHJvdG9jb2wpOwpAQCAtNjk4LDYgKzcxMiw3IEBACiB7CiAgIENVUkxjb2RlIHJldGNvZGUgPSBDVVJMRV9PSzsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKICAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKQEAgLTcxMyw3ICs3MjgsNyBAQAogCiAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9pbml0KG91cl9zc2xfc2Vzc2lvbmlkKTsKIAotICAgIHJldCA9IG1iZWR0bHNfc3NsX2dldF9zZXNzaW9uKCZCQUNLRU5ELT5zc2wsIG91cl9zc2xfc2Vzc2lvbmlkKTsKKyAgICByZXQgPSBtYmVkdGxzX3NzbF9nZXRfc2Vzc2lvbigmYmFja2VuZC0+c3NsLCBvdXJfc3NsX3Nlc3Npb25pZCk7CiAgICAgaWYocmV0KSB7CiAgICAgICBpZihyZXQgIT0gTUJFRFRMU19FUlJfU1NMX0FMTE9DX0ZBSUxFRCkKICAgICAgICAgbWJlZHRsc19zc2xfc2Vzc2lvbl9mcmVlKG91cl9zc2xfc2Vzc2lvbmlkKTsKQEAgLTc0Nyw5ICs3NjIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCiB7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIGludCByZXQgPSAtMTsKIAotICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZSgmQkFDS0VORC0+c3NsLAorICByZXQgPSBtYmVkdGxzX3NzbF93cml0ZSgmYmFja2VuZC0+c3NsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKW1lbSwgbGVuKTsKIAogICBpZihyZXQgPCAwKSB7CkBAIC03NjksMTUgKzc4NSwxNiBAQAogc3RhdGljIHZvaWQgQ3VybF9tYmVkdGxzX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIG1iZWR0bHNfcGtfZnJlZSgmQkFDS0VORC0+cGspOwotICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoJkJBQ0tFTkQtPmNsaWNlcnQpOwotICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoJkJBQ0tFTkQtPmNhY2VydCk7Ci0gIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSgmQkFDS0VORC0+Y3JsKTsKLSAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoJkJBQ0tFTkQtPmNvbmZpZyk7Ci0gIG1iZWR0bHNfc3NsX2ZyZWUoJkJBQ0tFTkQtPnNzbCk7Ci0gIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSgmQkFDS0VORC0+Y3RyX2RyYmcpOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIG1iZWR0bHNfcGtfZnJlZSgmYmFja2VuZC0+cGspOworICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoJmJhY2tlbmQtPmNsaWNlcnQpOworICBtYmVkdGxzX3g1MDlfY3J0X2ZyZWUoJmJhY2tlbmQtPmNhY2VydCk7CisgIG1iZWR0bHNfeDUwOV9jcmxfZnJlZSgmYmFja2VuZC0+Y3JsKTsKKyAgbWJlZHRsc19zc2xfY29uZmlnX2ZyZWUoJmJhY2tlbmQtPmNvbmZpZyk7CisgIG1iZWR0bHNfc3NsX2ZyZWUoJmJhY2tlbmQtPnNzbCk7CisgIG1iZWR0bHNfY3RyX2RyYmdfZnJlZSgmYmFja2VuZC0+Y3RyX2RyYmcpOwogI2lmbmRlZiBUSFJFQURJTkdfU1VQUE9SVAotICBtYmVkdGxzX2VudHJvcHlfZnJlZSgmQkFDS0VORC0+ZW50cm9weSk7CisgIG1iZWR0bHNfZW50cm9weV9mcmVlKCZiYWNrZW5kLT5lbnRyb3B5KTsKICNlbmRpZiAvKiBUSFJFQURJTkdfU1VQUE9SVCAqLwogfQogCkBAIC03ODYsMTEgKzgwMywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW251bV07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgaW50IHJldCA9IC0xOwogICBzc2l6ZV90IGxlbiA9IC0xOwogCiAgIG1lbXNldChidWYsIDAsIGJ1ZmZlcnNpemUpOwotICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCZCQUNLRU5ELT5zc2wsICh1bnNpZ25lZCBjaGFyICopYnVmLAorICByZXQgPSBtYmVkdGxzX3NzbF9yZWFkKCZiYWNrZW5kLT5zc2wsICh1bnNpZ25lZCBjaGFyICopYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnNpemUpOwogCiAgIGlmKHJldCA8PSAwKSB7CkBAIC04ODQsNyArOTAyLDcgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSAgbG9uZyB0aW1lb3V0X21zOworICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAgIGludCB3aGF0OwogCiAgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KQEAgLTEwMTQsMTkgKzEwMzIsMjAgQEAKICAqLwogc3RhdGljIGludCBDdXJsX21iZWR0bHNfaW5pdCh2b2lkKQogewotICByZXR1cm4gQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX3NldHVwKCk7CisgIHJldHVybiBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3RocmVhZF9zZXR1cCgpOwogfQogCiBzdGF0aWMgdm9pZCBDdXJsX21iZWR0bHNfY2xlYW51cCh2b2lkKQogewotICAodm9pZClDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfY2xlYW51cCgpOworICAodm9pZClDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3RocmVhZF9jbGVhbnVwKCk7CiB9CiAKIHN0YXRpYyBib29sIEN1cmxfbWJlZHRsc19kYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQogewogICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgcmV0dXJuIG1iZWR0bHNfc3NsX2dldF9ieXRlc19hdmFpbCgmQkFDS0VORC0+c3NsKSAhPSAwOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIHJldHVybiBtYmVkdGxzX3NzbF9nZXRfYnl0ZXNfYXZhaWwoJmJhY2tlbmQtPnNzbCkgIT0gMDsKIH0KIAogc3RhdGljIENVUkxjb2RlIEN1cmxfbWJlZHRsc19zaGEyNTZzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCkBAIC0xMDQ4LDggKzEwNjcsOSBAQAogc3RhdGljIHZvaWQgKkN1cmxfbWJlZHRsc19nZXRfaW50ZXJuYWxzKHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPIGluZm8gVU5VU0VEX1BBUkFNKQogeworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgICh2b2lkKWluZm87Ci0gIHJldHVybiAmQkFDS0VORC0+c3NsOworICByZXR1cm4gJmJhY2tlbmQtPnNzbDsKIH0KIAogY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX21iZWR0bHMgPSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHMuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5oCmluZGV4IDRhOTM4NjAuLjBjYzY0YjMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWJlZHRscy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHNfdGhyZWFkbG9jay5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzX3RocmVhZGxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY3MmYxCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzX3RocmVhZGxvY2suYwpAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgSG9pLUhvIENoYW4sIDxob2loby5jaGFuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKKworI2lmIGRlZmluZWQoVVNFX01CRURUTFMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKSkgfHwgICBcCisgICAoZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkpKQorCisjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKKyMgIGluY2x1ZGUgPHB0aHJlYWQuaD4KKyMgIGRlZmluZSBNQkVEVExTX01VVEVYX1QgcHRocmVhZF9tdXRleF90CisjZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKQorIyAgaW5jbHVkZSA8cHJvY2Vzcy5oPgorIyAgZGVmaW5lIE1CRURUTFNfTVVURVhfVCBIQU5ETEUKKyNlbmRpZgorCisjaW5jbHVkZSAibWJlZHRsc190aHJlYWRsb2NrLmgiCisjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogbnVtYmVyIG9mIHRocmVhZCBsb2NrcyAqLworI2RlZmluZSBOVU1UICAgICAgICAgICAgICAgICAgICAyCisKKy8qIFRoaXMgYXJyYXkgd2lsbCBzdG9yZSBhbGwgb2YgdGhlIG11dGV4ZXMgYXZhaWxhYmxlIHRvIE1iZWR0bHMuICovCitzdGF0aWMgTUJFRFRMU19NVVRFWF9UICptdXRleF9idWYgPSBOVUxMOworCitpbnQgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfc2V0dXAodm9pZCkKK3sKKyAgaW50IGk7CisKKyAgbXV0ZXhfYnVmID0gY2FsbG9jKE5VTVQgKiBzaXplb2YoTUJFRFRMU19NVVRFWF9UKSwgMSk7CisgIGlmKCFtdXRleF9idWYpCisgICAgcmV0dXJuIDA7ICAgICAvKiBlcnJvciwgbm8gbnVtYmVyIG9mIHRocmVhZHMgZGVmaW5lZCAqLworCisgIGZvcihpID0gMDsgIGkgPCBOVU1UOyAgaSsrKSB7CisgICAgaW50IHJldDsKKyNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKQorICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmbXV0ZXhfYnVmW2ldLCBOVUxMKTsKKyAgICBpZihyZXQpCisgICAgICByZXR1cm4gMDsgLyogcHRocmVhZF9tdXRleF9pbml0IGZhaWxlZCAqLworI2VsaWYgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkKKyAgICBtdXRleF9idWZbaV0gPSBDcmVhdGVNdXRleCgwLCBGQUxTRSwgMCk7CisgICAgaWYobXV0ZXhfYnVmW2ldID09IDApCisgICAgICByZXR1cm4gMDsgIC8qIENyZWF0ZU11dGV4IGZhaWxlZCAqLworI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCisgIH0KKworICByZXR1cm4gMTsgLyogT0sgKi8KK30KKworaW50IEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAodm9pZCkKK3sKKyAgaW50IGk7CisKKyAgaWYoIW11dGV4X2J1ZikKKyAgICByZXR1cm4gMDsgLyogZXJyb3IsIG5vIHRocmVhZHMgbG9ja3MgZGVmaW5lZCAqLworCisgIGZvcihpID0gMDsgaSA8IE5VTVQ7IGkrKykgeworICAgIGludCByZXQ7CisjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKKyAgICByZXQgPSBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm11dGV4X2J1ZltpXSk7CisgICAgaWYocmV0KQorICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSBmYWlsZWQgKi8KKyNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCisgICAgcmV0ID0gQ2xvc2VIYW5kbGUobXV0ZXhfYnVmW2ldKTsKKyAgICBpZighcmV0KQorICAgICAgcmV0dXJuIDA7IC8qIENsb3NlSGFuZGxlIGZhaWxlZCAqLworI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCisgIH0KKyAgZnJlZShtdXRleF9idWYpOworICBtdXRleF9idWYgPSBOVUxMOworCisgIHJldHVybiAxOyAvKiBPSyAqLworfQorCitpbnQgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKGludCBuKQoreworICBpZihuIDwgTlVNVCkgeworICAgIGludCByZXQ7CisjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKKyAgICByZXQgPSBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4X2J1ZltuXSk7CisgICAgaWYocmV0KSB7CisgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IG1iZWR0bHN0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24gZmFpbGVkXG4iKSk7CisgICAgICByZXR1cm4gMDsgLyogcHRocmVhZF9tdXRleF9sb2NrIGZhaWxlZCAqLworICAgIH0KKyNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCisgICAgcmV0ID0gKFdhaXRGb3JTaW5nbGVPYmplY3QobXV0ZXhfYnVmW25dLCBJTkZJTklURSkgPT0gV0FJVF9GQUlMRUQ/MTowKTsKKyAgICBpZihyZXQpIHsKKyAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogbWJlZHRsc3RocmVhZGxvY2tfbG9ja19mdW5jdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2xvY2sgZmFpbGVkICovCisgICAgfQorI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCisgIH0KKyAgcmV0dXJuIDE7IC8qIE9LICovCit9CisKK2ludCBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbihpbnQgbikKK3sKKyAgaWYobiA8IE5VTVQpIHsKKyAgICBpbnQgcmV0OworI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCisgICAgcmV0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4X2J1ZltuXSk7CisgICAgaWYocmV0KSB7CisgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IG1iZWR0bHN0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X3VubG9jayBmYWlsZWQgKi8KKyAgICB9CisjZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKQorICAgIHJldCA9IFJlbGVhc2VNdXRleChtdXRleF9idWZbbl0pOworICAgIGlmKCFyZXQpIHsKKyAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogbWJlZHRsc3RocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOworICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfbG9jayBmYWlsZWQgKi8KKyAgICB9CisjZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KKyAgfQorICByZXR1cm4gMTsgLyogT0sgKi8KK30KKworI2VuZGlmIC8qIFVTRV9NQkVEVExTICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21iZWR0bHNfdGhyZWFkbG9jay5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzX3RocmVhZGxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE3ODdkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tYmVkdGxzX3RocmVhZGxvY2suaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX01CRURUTFNfVEhSRUFETE9DS19ICisjZGVmaW5lIEhFQURFUl9DVVJMX01CRURUTFNfVEhSRUFETE9DS19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgorCisjaWZkZWYgVVNFX01CRURUTFMKKworI2lmIChkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKSkgfHwgXAorICAgIChkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKSkKKworaW50IEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdGhyZWFkX3NldHVwKHZvaWQpOworaW50IEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAodm9pZCk7CitpbnQgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKGludCBuKTsKK2ludCBDdXJsX21iZWR0bHN0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbihpbnQgbik7CisKKyNlbHNlCisKKyNkZWZpbmUgQ3VybF9tYmVkdGxzdGhyZWFkbG9ja190aHJlYWRfc2V0dXAoKSAxCisjZGVmaW5lIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAoKSAxCisjZGVmaW5lIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfbG9ja19mdW5jdGlvbih4KSAxCisjZGVmaW5lIEN1cmxfbWJlZHRsc3RocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKHgpIDEKKworI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYIHx8IFVTRV9USFJFQURTX1dJTjMyICovCisKKyNlbmRpZiAvKiBVU0VfTUJFRFRMUyAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfTUJFRFRMU19USFJFQURMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWVzYWxpbmsuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbWVzYWxpbmsuYwppbmRleCA3MThjMjgyLi43MTMyYmRmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL21lc2FsaW5rLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9tZXNhbGluay5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDE3IC0gMjAxOCwgWWltaW5nIEppbmcsIDxqaW5neWltaW5nQGJhaWR1LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03Myw2ICs3MywxNyBAQAogc3RhdGljIEN1cmxfcmVjdiBtZXNhbGlua19yZWN2Owogc3RhdGljIEN1cmxfc2VuZCBtZXNhbGlua19zZW5kOwogCitzdGF0aWMgaW50IGRvX2ZpbGVfdHlwZShjb25zdCBjaGFyICp0eXBlKQoreworICBpZighdHlwZSB8fCAhdHlwZVswXSkKKyAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX1BFTTsKKyAgaWYoc3RyY2FzZWNvbXBhcmUodHlwZSwgIlBFTSIpKQorICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOworICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiREVSIikpCisgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9BU04xOworICByZXR1cm4gLTE7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGxvYWRzIGFsbCB0aGUgY2xpZW50L0NBIGNlcnRpZmljYXRlcyBhbmQgQ1JMcy4gU2V0dXAgdGhlIFRMUwogICogbGF5ZXIgYW5kIGRvIGFsbCBuZWNlc3NhcnkgbWFnaWMuCkBAIC04Myw5ICs5NCw2IEBACiAgIGNoYXIgKmNpcGhlcnM7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgY29uc3QgYm9vbCB2ZXJpZnlwZWVyID0gU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpOwotICBjb25zdCBjaGFyICpjb25zdCBzc2xfY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7Ci0gIGNvbnN0IGNoYXIgKmNvbnN0IHNzbF9jYXBhdGggPSBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKTsKICAgc3RydWN0IGluX2FkZHIgYWRkcjQ7CiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgc3RydWN0IGluNl9hZGRyIGFkZHI2OwpAQCAtMTQyLDIxICsxNTAsMjUgQEAKICAgfQogCiAgIFNTTF9DVFhfc2V0X3ZlcmlmeSgKLSAgICBCQUNLRU5ELT5jdHgsIHZlcmlmeXBlZXIgPyBTU0xfVkVSSUZZX1BFRVIgOiBTU0xfVkVSSUZZX05PTkUsIE5VTEwpOworICAgIEJBQ0tFTkQtPmN0eCwgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpID8KKyAgICAgIFNTTF9WRVJJRllfUEVFUiA6IFNTTF9WRVJJRllfTk9ORSwgTlVMTCk7CiAKLSAgaWYoc3NsX2NhZmlsZSB8fCBzc2xfY2FwYXRoKSB7Ci0gICAgaWYoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKEJBQ0tFTkQtPmN0eCwgc3NsX2NhZmlsZSwgc3NsX2NhcGF0aCkpIHsKLSAgICAgIGlmKHZlcmlmeXBlZXIpIHsKKyAgaWYoU1NMX0NPTk5fQ09ORklHKENBZmlsZSkgfHwgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkpIHsKKyAgICBpZighU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQkFDS0VORC0+Y3R4LCBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSkpIHsKKyAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewogICAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgICAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgogICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4gIENBcGF0aDogJXMiLAotICAgICAgICAgICAgICBzc2xfY2FmaWxlID8gc3NsX2NhZmlsZSA6ICJub25lIiwKLSAgICAgICAgICAgICAgc3NsX2NhcGF0aCA/IHNzbF9jYXBhdGggOiAibm9uZSIpOworICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSA/CisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpIDogIm5vbmUiLAorICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSA/CisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpIDogIm5vbmUiKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICAgIH0KICAgICAgIGluZm9mKGRhdGEsCi0gICAgICAgICAgICAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zLCIKLSAgICAgICAgICAgICIgY29udGludWluZyBhbnl3YXk6XG4iKTsKKyAgICAgICAgICAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zLCIKKyAgICAgICAgICAiIGNvbnRpbnVpbmcgYW55d2F5OlxuIik7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgaW5mb2YoZGF0YSwgInN1Y2Nlc3NmdWxseSBzZXQgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9uczpcbiIpOwpAQCAtMTY0LDggKzE3NiwzMiBAQAogICAgIGluZm9mKGRhdGEsCiAgICAgICAgICAgIiAgQ0FmaWxlOiAlc1xuIgogICAgICAgICAgICIgIENBcGF0aDogJXNcbiIsCi0gICAgICAgICAgc3NsX2NhZmlsZSA/IHNzbF9jYWZpbGUgOiAibm9uZSIsCi0gICAgICAgICAgc3NsX2NhcGF0aCA/IHNzbF9jYXBhdGggOiAibm9uZSIpOworICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpPworICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOiAibm9uZSIsCisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCk/CisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCk6ICJub25lIik7CisgIH0KKworICBpZihTU0xfU0VUX09QVElPTihjZXJ0KSAmJiBTU0xfU0VUX09QVElPTihrZXkpKSB7CisgICAgaW50IGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihjZXJ0X3R5cGUpKTsKKworICAgIGlmKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoQkFDS0VORC0+Y3R4LCBTU0xfU0VUX09QVElPTihjZXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpICE9IDEpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gdXNlIGNsaWVudCBjZXJ0aWZpY2F0ZSAobm8ga2V5IG9yIHdyb25nIHBhc3MiCisgICAgICAgICAgICAiIHBocmFzZT8pIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorCisgICAgZmlsZV90eXBlID0gZG9fZmlsZV90eXBlKFNTTF9TRVRfT1BUSU9OKGtleV90eXBlKSk7CisgICAgaWYoU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKEJBQ0tFTkQtPmN0eCwgU1NMX1NFVF9PUFRJT04oa2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkgIT0gMSkgeworICAgICAgZmFpbGYoZGF0YSwgInVuYWJsZSB0byBzZXQgcHJpdmF0ZSBrZXkiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAiY2xpZW50IGNlcnQ6ICVzXG4iLAorICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhjbGllbnRjZXJ0KT8KKyAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoY2xpZW50Y2VydCk6ICJub25lIik7CiAgIH0KIAogICBjaXBoZXJzID0gU1NMX0NPTk5fQ09ORklHKGNpcGhlcl9saXN0KTsKQEAgLTI2NSw3ICszMDEsNiBAQAogCiAgIHJldCA9IFNTTF9jb25uZWN0KEJBQ0tFTkQtPmhhbmRsZSk7CiAgIGlmKHJldCAhPSBTU0xfU1VDQ0VTUykgewotICAgIGNoYXIgZXJyb3JfYnVmZmVyW01FU0FMSU5LX01BWF9FUlJPUl9TWl07CiAgICAgaW50IGRldGFpbCA9IFNTTF9nZXRfZXJyb3IoQkFDS0VORC0+aGFuZGxlLCByZXQpOwogCiAgICAgaWYoU1NMX0VSUk9SX1dBTlRfQ09OTkVDVCA9PSBkZXRhaWwgfHwgU1NMX0VSUk9SX1dBTlRfUkVBRCA9PSBkZXRhaWwpIHsKQEAgLTI3Myw2ICszMDgsNyBAQAogICAgICAgcmV0dXJuIENVUkxFX09LOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgIGNoYXIgZXJyb3JfYnVmZmVyW01FU0FMSU5LX01BWF9FUlJPUl9TWl07CiAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgIlNTTF9jb25uZWN0IGZhaWxlZCB3aXRoIGVycm9yICVkOiAlcyIsCiAgICAgICAgICAgICBkZXRhaWwsCkBAIC00NTgsNyArNDk0LDcgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSAgdGltZV90IHRpbWVvdXRfbXM7CisgIHRpbWVkaWZmX3QgdGltZW91dF9tczsKICAgaW50IHdoYXQ7CiAKICAgLyogY2hlY2sgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZCAqLwpAQCAtNTA2LDggKzU0Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzb2NrZmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENVUkxfU09DS0VUX0JBRDsKIAotICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKAotICAgICAgICByZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwgbm9uYmxvY2tpbmcgPyAwIDogdGltZW91dF9tcyk7CisgICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfY2hlY2socmVhZGZkLCBDVVJMX1NPQ0tFVF9CQUQsIHdyaXRlZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmcgPyAwIDogdGltZW91dF9tcyk7CiAgICAgICBpZih3aGF0IDwgMCkgewogICAgICAgICAvKiBmYXRhbCBlcnJvciAqLwogICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbnNzLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL25zcy5jCmluZGV4IDQ5MWRlZjEuLmZjYTI5MjYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvbnNzLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9uc3MuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtODcsOCArODcsNiBAQAogICBQSzExR2VuZXJpY09iamVjdCAqb2JqX2NsaWNlcnQ7CiB9OwogCi0jZGVmaW5lIEJBQ0tFTkQgY29ubnNzbC0+YmFja2VuZAotCiBzdGF0aWMgUFJMb2NrICpuc3NfaW5pdGxvY2sgPSBOVUxMOwogc3RhdGljIFBSTG9jayAqbnNzX2NybGxvY2sgPSBOVUxMOwogc3RhdGljIFBSTG9jayAqbnNzX2ZpbmRzbG90X2xvY2sgPSBOVUxMOwpAQCAtMTAzLDIyICsxMDEsMjIgQEAKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCBub2RlOwogfTsKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGNpcGhlcl9zIHsKICAgY29uc3QgY2hhciAqbmFtZTsKICAgaW50IG51bTsKLX0gY2lwaGVyX3M7Cit9OwogCiAjZGVmaW5lIFBLMTFfU0VUQVRUUlMoX2F0dHIsIF9pZHgsIF90eXBlLCBfdmFsLCBfbGVuKSBkbyB7ICBcCiAgIENLX0FUVFJJQlVURSAqcHRyID0gKF9hdHRyKSArICgoX2lkeCkrKyk7ICAgICAgICAgICAgICAgICBcCiAgIHB0ci0+dHlwZSA9IChfdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIHB0ci0+cFZhbHVlID0gKF92YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIHB0ci0+dWxWYWx1ZUxlbiA9IChfbGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IFdISUxFX0ZBTFNFCit9IHdoaWxlKDApCiAKICNkZWZpbmUgQ0VSVF9OZXdUZW1wQ2VydGlmaWNhdGUgX19DRVJUX05ld1RlbXBDZXJ0aWZpY2F0ZQogCiAjZGVmaW5lIE5VTV9PRl9DSVBIRVJTIHNpemVvZihjaXBoZXJsaXN0KS9zaXplb2YoY2lwaGVybGlzdFswXSkKLXN0YXRpYyBjb25zdCBjaXBoZXJfcyBjaXBoZXJsaXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNpcGhlcl9zIGNpcGhlcmxpc3RbXSA9IHsKICAgLyogU1NMMiBjaXBoZXIgc3VpdGVzICovCiAgIHsicmM0IiwgICAgICAgICAgICAgICAgICAgICAgICBTU0xfRU5fUkM0XzEyOF9XSVRIX01ENX0sCiAgIHsicmM0LW1kNSIsICAgICAgICAgICAgICAgICAgICBTU0xfRU5fUkM0XzEyOF9XSVRIX01ENX0sCkBAIC0yMTYsMTEgKzIxNCwxOSBAQAogIHsiZGhlX3JzYV9jaGFjaGEyMF9wb2x5MTMwNV9zaGFfMjU2IiwKICAgICAgVExTX0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTZ9LAogI2VuZGlmCisjaWZkZWYgVExTX0FFU18yNTZfR0NNX1NIQTM4NAorIHsiYWVzXzEyOF9nY21fc2hhXzI1NiIsICAgICAgICAgICAgICBUTFNfQUVTXzEyOF9HQ01fU0hBMjU2fSwKKyB7ImFlc18yNTZfZ2NtX3NoYV8zODQiLCAgICAgICAgICAgICAgVExTX0FFU18yNTZfR0NNX1NIQTM4NH0sCisgeyJjaGFjaGEyMF9wb2x5MTMwNV9zaGFfMjU2IiwgICAgICAgIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTZ9LAorI2VuZGlmCiB9OwogCi0jaWZkZWYgV0lOMzIKKyNpZiBkZWZpbmVkKFdJTjMyKQogc3RhdGljIGNvbnN0IGNoYXIgKnBlbV9saWJyYXJ5ID0gIm5zc3BlbS5kbGwiOwogc3RhdGljIGNvbnN0IGNoYXIgKnRydXN0X2xpYnJhcnkgPSAibnNzY2tiaS5kbGwiOworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCitzdGF0aWMgY29uc3QgY2hhciAqcGVtX2xpYnJhcnkgPSAibGlibnNzcGVtLmR5bGliIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0cnVzdF9saWJyYXJ5ID0gImxpYm5zc2NrYmkuZHlsaWIiOwogI2Vsc2UKIHN0YXRpYyBjb25zdCBjaGFyICpwZW1fbGlicmFyeSA9ICJsaWJuc3NwZW0uc28iOwogc3RhdGljIGNvbnN0IGNoYXIgKnRydXN0X2xpYnJhcnkgPSAibGlibnNzY2tiaS5zbyI7CkBAIC00NTQsNiArNDYwLDcgQEAKIAogICBjb25zdCBpbnQgc2xvdF9pZCA9IChjYWNlcnQpID8gMCA6IDE7CiAgIGNoYXIgKnNsb3RfbmFtZSA9IGFwcmludGYoIlBFTSBUb2tlbiAjJWQiLCBzbG90X2lkKTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBpZighc2xvdF9uYW1lKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC00ODcsMTQgKzQ5NCwxNCBAQAogICBpZighb2JqKQogICAgIHJldHVybiByZXN1bHQ7CiAKLSAgaWYoaW5zZXJ0X3dyYXBwZWRfcHRyKCZCQUNLRU5ELT5vYmpfbGlzdCwgb2JqKSAhPSBDVVJMRV9PSykgeworICBpZihpbnNlcnRfd3JhcHBlZF9wdHIoJmJhY2tlbmQtPm9ial9saXN0LCBvYmopICE9IENVUkxFX09LKSB7CiAgICAgUEsxMV9EZXN0cm95R2VuZXJpY09iamVjdChvYmopOwogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAKICAgaWYoIWNhY2VydCAmJiBDS09fQ0VSVElGSUNBVEUgPT0gb2JqX2NsYXNzKQogICAgIC8qIHN0b3JlIHJlZmVyZW5jZSB0byBhIGNsaWVudCBjZXJ0aWZpY2F0ZSAqLwotICAgIEJBQ0tFTkQtPm9ial9jbGljZXJ0ID0gb2JqOworICAgIGJhY2tlbmQtPm9ial9jbGljZXJ0ID0gb2JqOwogCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KQEAgLTU3MywxOSArNTgwLDIxIEBACiAgIC8qIGFjcXVpcmUgbG9jayBiZWZvcmUgY2FsbCBvZiBDRVJUX0NhY2hlQ1JMKCkgYW5kIGFjY2Vzc2luZyBuc3NfY3JsX2xpc3QgKi8KICAgUFJfTG9jayhuc3NfY3JsbG9jayk7CiAKLSAgLyogc3RvcmUgdGhlIENSTCBpdGVtIHNvIHRoYXQgd2UgY2FuIGZyZWUgaXQgaW4gQ3VybF9uc3NfY2xlYW51cCgpICovCi0gIGlmKGluc2VydF93cmFwcGVkX3B0cigmbnNzX2NybF9saXN0LCBjcmxfZGVyKSAhPSBDVVJMRV9PSykgewotICAgIFNFQ0lURU1fRnJlZUl0ZW0oY3JsX2RlciwgUFJfVFJVRSk7Ci0gICAgUFJfVW5sb2NrKG5zc19jcmxsb2NrKTsKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgfQotCiAgIGlmKFNFQ1N1Y2Nlc3MgIT0gQ0VSVF9DYWNoZUNSTChkYiwgY3JsX2RlcikpIHsKICAgICAvKiB1bmFibGUgdG8gY2FjaGUgQ1JMICovCisgICAgU0VDSVRFTV9GcmVlSXRlbShjcmxfZGVyLCBQUl9UUlVFKTsKICAgICBQUl9VbmxvY2sobnNzX2NybGxvY2spOwogICAgIHJldHVybiBDVVJMRV9TU0xfQ1JMX0JBREZJTEU7CiAgIH0KIAorICAvKiBzdG9yZSB0aGUgQ1JMIGl0ZW0gc28gdGhhdCB3ZSBjYW4gZnJlZSBpdCBpbiBDdXJsX25zc19jbGVhbnVwKCkgKi8KKyAgaWYoaW5zZXJ0X3dyYXBwZWRfcHRyKCZuc3NfY3JsX2xpc3QsIGNybF9kZXIpICE9IENVUkxFX09LKSB7CisgICAgaWYoU0VDU3VjY2VzcyA9PSBDRVJUX1VuY2FjaGVDUkwoZGIsIGNybF9kZXIpKQorICAgICAgU0VDSVRFTV9GcmVlSXRlbShjcmxfZGVyLCBQUl9UUlVFKTsKKyAgICBQUl9VbmxvY2sobnNzX2NybGxvY2spOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKICAgLyogd2UgbmVlZCB0byBjbGVhciBzZXNzaW9uIGNhY2hlLCBzbyB0aGF0IHRoZSBDUkwgY291bGQgdGFrZSBlZmZlY3QgKi8KICAgU1NMX0NsZWFyU2Vzc2lvbkNhY2hlKCk7CiAgIFBSX1VubG9jayhuc3NfY3JsbG9jayk7CkBAIC02ODEsNyArNjkwLDEwIEBACiAgIHRtcCA9IFNFQ01PRF9XYWl0Rm9yQW55VG9rZW5FdmVudChwZW1fbW9kdWxlLCAwLCAwKTsKICAgaWYodG1wKQogICAgIFBLMTFfRnJlZVNsb3QodG1wKTsKLSAgUEsxMV9Jc1ByZXNlbnQoc2xvdCk7CisgIGlmKCFQSzExX0lzUHJlc2VudChzbG90KSkgeworICAgIFBLMTFfRnJlZVNsb3Qoc2xvdCk7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgfQogCiAgIHN0YXR1cyA9IFBLMTFfQXV0aGVudGljYXRlKHNsb3QsIFBSX1RSVUUsIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpKTsKICAgUEsxMV9GcmVlU2xvdChzbG90KTsKQEAgLTEwNzEsNyArMTA4Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBpbm5lZHB1YmtleSkKIHsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gQkFDS0VORC0+ZGF0YTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gYmFja2VuZC0+ZGF0YTsKICAgQ0VSVENlcnRpZmljYXRlICpjZXJ0OwogCiAgIGlmKCFwaW5uZWRwdWJrZXkpCkBAIC0xMDc5LDcgKzEwOTIsNyBAQAogICAgIHJldHVybiBDVVJMRV9PSzsKIAogICAvKiBnZXQgcGVlciBjZXJ0aWZpY2F0ZSAqLwotICBjZXJ0ID0gU1NMX1BlZXJDZXJ0aWZpY2F0ZShCQUNLRU5ELT5oYW5kbGUpOworICBjZXJ0ID0gU1NMX1BlZXJDZXJ0aWZpY2F0ZShiYWNrZW5kLT5oYW5kbGUpOwogICBpZihjZXJ0KSB7CiAgICAgLyogZXh0cmFjdCBwdWJsaWMga2V5IGZyb20gcGVlciBjZXJ0aWZpY2F0ZSAqLwogICAgIFNFQ0tFWVB1YmxpY0tleSAqcHVia2V5ID0gQ0VSVF9FeHRyYWN0UHVibGljS2V5KGNlcnQpOwpAQCAtMTEyMywxMSArMTEzNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTRUNLRVlQcml2YXRlS2V5U3RyICoqcFJldEtleSkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKilhcmc7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBCQUNLRU5ELT5kYXRhOwotICBjb25zdCBjaGFyICpuaWNrbmFtZSA9IEJBQ0tFTkQtPmNsaWVudF9uaWNrbmFtZTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gYmFja2VuZC0+ZGF0YTsKKyAgY29uc3QgY2hhciAqbmlja25hbWUgPSBiYWNrZW5kLT5jbGllbnRfbmlja25hbWU7CiAgIHN0YXRpYyBjb25zdCBjaGFyIHBlbV9zbG90bmFtZVtdID0gIlBFTSBUb2tlbiAjMSI7CiAKLSAgaWYoQkFDS0VORC0+b2JqX2NsaWNlcnQpIHsKKyAgaWYoYmFja2VuZC0+b2JqX2NsaWNlcnQpIHsKICAgICAvKiB1c2UgdGhlIGNlcnQva2V5IHByb3ZpZGVkIGJ5IFBFTSByZWFkZXIgKi8KICAgICBTRUNJdGVtIGNlcnRfZGVyID0geyAwLCBOVUxMLCAwIH07CiAgICAgdm9pZCAqcHJvdG9fd2luID0gU1NMX1JldmVhbFBpbkFyZyhzb2NrKTsKQEAgLTExNDAsNyArMTE1NCw3IEBACiAgICAgICByZXR1cm4gU0VDRmFpbHVyZTsKICAgICB9CiAKLSAgICBpZihQSzExX1JlYWRSYXdBdHRyaWJ1dGUoUEsxMV9UeXBlR2VuZXJpYywgQkFDS0VORC0+b2JqX2NsaWNlcnQsIENLQV9WQUxVRSwKKyAgICBpZihQSzExX1JlYWRSYXdBdHRyaWJ1dGUoUEsxMV9UeXBlR2VuZXJpYywgYmFja2VuZC0+b2JqX2NsaWNlcnQsIENLQV9WQUxVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNlcnRfZGVyKSAhPSBTRUNTdWNjZXNzKSB7CiAgICAgICBmYWlsZihkYXRhLCAiTlNTOiBDS0FfVkFMVUUgbm90IGZvdW5kIGluIFBLMTEgZ2VuZXJpYyBvYmplY3QiKTsKICAgICAgIFBLMTFfRnJlZVNsb3Qoc2xvdCk7CkBAIC0xNDE2LDcgKzE0MzAsNyBAQAogewogICAvKiBjdXJsX2dsb2JhbF9pbml0KCkgaXMgbm90IHRocmVhZC1zYWZlIHNvIHRoaXMgdGVzdCBpcyBvayAqLwogICBpZihuc3NfaW5pdGxvY2sgPT0gTlVMTCkgewotICAgIFBSX0luaXQoUFJfVVNFUl9USFJFQUQsIFBSX1BSSU9SSVRZX05PUk1BTCwgMjU2KTsKKyAgICBQUl9Jbml0KFBSX1VTRVJfVEhSRUFELCBQUl9QUklPUklUWV9OT1JNQUwsIDApOwogICAgIG5zc19pbml0bG9jayA9IFBSX05ld0xvY2soKTsKICAgICBuc3NfY3JsbG9jayA9IFBSX05ld0xvY2soKTsKICAgICBuc3NfZmluZHNsb3RfbG9jayA9IFBSX05ld0xvY2soKTsKQEAgLTE0OTAsMTEgKzE1MDQsMTIgQEAKIHN0YXRpYyBpbnQgQ3VybF9uc3NfY2hlY2tfY3huKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW0ZJUlNUU09DS0VUXTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBpbnQgcmM7CiAgIGNoYXIgYnVmOwogCiAgIHJjID0KLSAgICBQUl9SZWN2KEJBQ0tFTkQtPmhhbmRsZSwgKHZvaWQgKikmYnVmLCAxLCBQUl9NU0dfUEVFSywKKyAgICBQUl9SZWN2KGJhY2tlbmQtPmhhbmRsZSwgKHZvaWQgKikmYnVmLCAxLCBQUl9NU0dfUEVFSywKICAgICAgICAgICAgIFBSX1NlY29uZHNUb0ludGVydmFsKDEpKTsKICAgaWYocmMgPiAwKQogICAgIHJldHVybiAxOyAvKiBjb25uZWN0aW9uIHN0aWxsIGluIHBsYWNlICovCkBAIC0xNTA4LDI2ICsxNTIzLDI3IEBACiBzdGF0aWMgdm9pZCBuc3NfY2xvc2Uoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wpCiB7CiAgIC8qIGJlZm9yZSB0aGUgY2xlYW51cCwgY2hlY2sgd2hldGhlciB3ZSBhcmUgdXNpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUgKi8KLSAgY29uc3QgYm9vbCBjbGllbnRfY2VydCA9IChCQUNLRU5ELT5jbGllbnRfbmlja25hbWUgIT0gTlVMTCkKLSAgICB8fCAoQkFDS0VORC0+b2JqX2NsaWNlcnQgIT0gTlVMTCk7CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgY29uc3QgYm9vbCBjbGllbnRfY2VydCA9IChiYWNrZW5kLT5jbGllbnRfbmlja25hbWUgIT0gTlVMTCkKKyAgICB8fCAoYmFja2VuZC0+b2JqX2NsaWNlcnQgIT0gTlVMTCk7CiAKLSAgZnJlZShCQUNLRU5ELT5jbGllbnRfbmlja25hbWUpOwotICBCQUNLRU5ELT5jbGllbnRfbmlja25hbWUgPSBOVUxMOworICBmcmVlKGJhY2tlbmQtPmNsaWVudF9uaWNrbmFtZSk7CisgIGJhY2tlbmQtPmNsaWVudF9uaWNrbmFtZSA9IE5VTEw7CiAKICAgLyogZGVzdHJveSBhbGwgTlNTIG9iamVjdHMgaW4gb3JkZXIgdG8gYXZvaWQgZmFpbHVyZSBvZiBOU1Mgc2h1dGRvd24gKi8KLSAgQ3VybF9sbGlzdF9kZXN0cm95KCZCQUNLRU5ELT5vYmpfbGlzdCwgTlVMTCk7Ci0gIEJBQ0tFTkQtPm9ial9jbGljZXJ0ID0gTlVMTDsKKyAgQ3VybF9sbGlzdF9kZXN0cm95KCZiYWNrZW5kLT5vYmpfbGlzdCwgTlVMTCk7CisgIGJhY2tlbmQtPm9ial9jbGljZXJ0ID0gTlVMTDsKIAotICBpZihCQUNLRU5ELT5oYW5kbGUpIHsKKyAgaWYoYmFja2VuZC0+aGFuZGxlKSB7CiAgICAgaWYoY2xpZW50X2NlcnQpCiAgICAgICAvKiBBIHNlcnZlciBtaWdodCByZXF1aXJlIGRpZmZlcmVudCBhdXRoZW50aWNhdGlvbiBiYXNlZCBvbiB0aGUKICAgICAgICAqIHBhcnRpY3VsYXIgcGF0aCBiZWluZyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4gIFRvIHN1cHBvcnQgdGhpcwogICAgICAgICogc2NlbmFyaW8sIHdlIG11c3QgZW5zdXJlIHRoYXQgYSBjb25uZWN0aW9uIHdpbGwgbmV2ZXIgcmV1c2UgdGhlCiAgICAgICAgKiBhdXRoZW50aWNhdGlvbiBkYXRhIGZyb20gYSBwcmV2aW91cyBjb25uZWN0aW9uLiAqLwotICAgICAgU1NMX0ludmFsaWRhdGVTZXNzaW9uKEJBQ0tFTkQtPmhhbmRsZSk7CisgICAgICBTU0xfSW52YWxpZGF0ZVNlc3Npb24oYmFja2VuZC0+aGFuZGxlKTsKIAotICAgIFBSX0Nsb3NlKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gICAgQkFDS0VORC0+aGFuZGxlID0gTlVMTDsKKyAgICBQUl9DbG9zZShiYWNrZW5kLT5oYW5kbGUpOworICAgIGJhY2tlbmQtPmhhbmRsZSA9IE5VTEw7CiAgIH0KIH0KIApAQCAtMTUzOCwxNSArMTU1NCwxNiBAQAogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2xfcHJveHkgPSAmY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAotICBpZihCQUNLRU5ELT5oYW5kbGUgfHwgY29ubnNzbF9wcm94eS0+YmFja2VuZC0+aGFuZGxlKSB7CisgIGlmKGJhY2tlbmQtPmhhbmRsZSB8fCBjb25uc3NsX3Byb3h5LT5iYWNrZW5kLT5oYW5kbGUpIHsKICAgICAvKiBOU1MgY2xvc2VzIHRoZSBzb2NrZXQgd2UgcHJldmlvdXNseSBoYW5kZWQgdG8gaXQsIHNvIHdlIG11c3QgbWFyayBpdAogICAgICAgIGFzIGNsb3NlZCB0byBhdm9pZCBkb3VibGUgY2xvc2UgKi8KICAgICBmYWtlX3NjbG9zZShjb25uLT5zb2NrW3NvY2tpbmRleF0pOwogICAgIGNvbm4tPnNvY2tbc29ja2luZGV4XSA9IENVUkxfU09DS0VUX0JBRDsKICAgfQogCi0gIGlmKEJBQ0tFTkQtPmhhbmRsZSkKKyAgaWYoYmFja2VuZC0+aGFuZGxlKQogICAgIC8qIG5zc19jbG9zZShjb25uc3NsKSB3aWxsIHRyYW5zaXRpdmVseSBjbG9zZSBhbHNvCiAgICAgICAgY29ubnNzbF9wcm94eS0+YmFja2VuZC0+aGFuZGxlIGlmIGJvdGggYXJlIHVzZWQuIENsZWFyIGl0IHRvIGF2b2lkCiAgICAgICAgYSBkb3VibGUgY2xvc2UgbGVhZGluZyB0byBjcmFzaC4gKi8KQEAgLTE3MjEsMjAgKzE3MzgsMTYgQEAKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBjb25zdCBsb25nIG1pbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKICAgY29uc3QgbG9uZyBtYXggPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpOwotCi0gIC8qIG1hcCBDVVJMX1NTTFZFUlNJT05fREVGQVVMVCB0byBOU1MgZGVmYXVsdCAqLwotICBpZihtaW4gPT0gQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgfHwgbWF4ID09IENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVCkgewotICAgIC8qIG1hcCBDVVJMX1NTTFZFUlNJT05fREVGQVVMVCB0byBOU1MgZGVmYXVsdCAqLwotICAgIGlmKFNTTF9WZXJzaW9uUmFuZ2VHZXREZWZhdWx0KHNzbF92YXJpYW50X3N0cmVhbSwgc3NsdmVyKSAhPSBTRUNTdWNjZXNzKQotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgIC8qIC4uLiBidXQgbWFrZSBzdXJlIHdlIHVzZSBhdCBsZWFzdCBUTFN2MS4wIGFjY29yZGluZyB0byBsaWJjdXJsIEFQSSAqLwotICAgIGlmKHNzbHZlci0+bWluIDwgU1NMX0xJQlJBUllfVkVSU0lPTl9UTFNfMV8wKQotICAgICAgc3NsdmVyLT5taW4gPSBTU0xfTElCUkFSWV9WRVJTSU9OX1RMU18xXzA7Ci0gIH0KKyAgU1NMVmVyc2lvblJhbmdlIHZyYW5nZTsKIAogICBzd2l0Y2gobWluKSB7CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgorICAgIC8qIEJ1bXAgb3VyIG1pbmltdW0gVExTIHZlcnNpb24gaWYgTlNTIGhhcyBzdHJpY3RlciByZXF1aXJlbWVudHMuICovCisgICAgaWYoU1NMX1ZlcnNpb25SYW5nZUdldERlZmF1bHQoc3NsX3ZhcmlhbnRfc3RyZWFtLCAmdnJhbmdlKSAhPSBTRUNTdWNjZXNzKQorICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIGlmKHNzbHZlci0+bWluIDwgdnJhbmdlLm1pbikKKyAgICAgIHNzbHZlci0+bWluID0gdnJhbmdlLm1pbjsKICAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICByZXN1bHQgPSBuc3Nfc3NsdmVyX2Zyb21fY3VybCgmc3NsdmVyLT5taW4sIG1pbik7CkBAIC0xNzY0LDYgKzE3NzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgY3VybGVycikKIHsKICAgUFJFcnJvckNvZGUgZXJyID0gMDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogCiAgIGlmKGlzX25zc19lcnJvcihjdXJsZXJyKSkgewogICAgIC8qIHJlYWQgTlNQUiBlcnJvciBjb2RlICovCkBAIC0xNzc5LDcgKzE3OTMsNyBAQAogICB9CiAKICAgLyogY2xlYW51cCBvbiBjb25uZWN0aW9uIGZhaWx1cmUgKi8KLSAgQ3VybF9sbGlzdF9kZXN0cm95KCZCQUNLRU5ELT5vYmpfbGlzdCwgTlVMTCk7CisgIEN1cmxfbGxpc3RfZGVzdHJveSgmYmFja2VuZC0+b2JqX2xpc3QsIE5VTEwpOwogCiAgIHJldHVybiBjdXJsZXJyOwogfQpAQCAtMTc5MCwxMCArMTgwNCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibG9ja2luZykKIHsKICAgc3RhdGljIFBSU29ja2V0T3B0aW9uRGF0YSBzb2NrX29wdDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBzb2NrX29wdC5vcHRpb24gPSBQUl9Tb2NrT3B0X05vbmJsb2NraW5nOwogICBzb2NrX29wdC52YWx1ZS5ub25fYmxvY2tpbmcgPSAhYmxvY2tpbmc7CiAKLSAgaWYoUFJfU2V0U29ja2V0T3B0aW9uKEJBQ0tFTkQtPmhhbmRsZSwgJnNvY2tfb3B0KSAhPSBQUl9TVUNDRVNTKQorICBpZihQUl9TZXRTb2NrZXRPcHRpb24oYmFja2VuZC0+aGFuZGxlLCAmc29ja19vcHQpICE9IFBSX1NVQ0NFU1MpCiAgICAgcmV0dXJuIG5zc19mYWlsX2Nvbm5lY3QoY29ubnNzbCwgZGF0YSwgQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1IpOwogCiAgIHJldHVybiBDVVJMRV9PSzsKQEAgLTE4MDksNiArMTgyNCw3IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBib29sIHNlY29uZF9sYXllciA9IEZBTFNFOwogICBTU0xWZXJzaW9uUmFuZ2Ugc3NsdmVyX3N1cHBvcnRlZDsKQEAgLTE4MjYsMTAgKzE4NDIsMTAgQEAKICNlbmRpZgogICB9OwogCi0gIEJBQ0tFTkQtPmRhdGEgPSBkYXRhOworICBiYWNrZW5kLT5kYXRhID0gZGF0YTsKIAogICAvKiBsaXN0IG9mIGFsbCBOU1Mgb2JqZWN0cyB3ZSBuZWVkIHRvIGRlc3Ryb3kgaW4gQ3VybF9uc3NfY2xvc2UoKSAqLwotICBDdXJsX2xsaXN0X2luaXQoJkJBQ0tFTkQtPm9ial9saXN0LCBuc3NfZGVzdHJveV9vYmplY3QpOworICBDdXJsX2xsaXN0X2luaXQoJmJhY2tlbmQtPm9ial9saXN0LCBuc3NfZGVzdHJveV9vYmplY3QpOwogCiAgIFBSX0xvY2sobnNzX2luaXRsb2NrKTsKICAgcmVzdWx0ID0gbnNzX2luaXQoY29ubi0+ZGF0YSk7CkBAIC0xOTUxLDcgKzE5NjcsNyBAQAogICAgIGNoYXIgKm5pY2tuYW1lID0gZHVwX25pY2tuYW1lKGRhdGEsIFNTTF9TRVRfT1BUSU9OKGNlcnQpKTsKICAgICBpZihuaWNrbmFtZSkgewogICAgICAgLyogd2UgYXJlIG5vdCBnb2luZyB0byB1c2UgbGlibnNzcGVtLnNvIHRvIHJlYWQgdGhlIGNsaWVudCBjZXJ0ICovCi0gICAgICBCQUNLRU5ELT5vYmpfY2xpY2VydCA9IE5VTEw7CisgICAgICBiYWNrZW5kLT5vYmpfY2xpY2VydCA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgQ1VSTGNvZGUgcnYgPSBjZXJ0X3N0dWZmKGNvbm4sIHNvY2tpbmRleCwgU1NMX1NFVF9PUFRJT04oY2VydCksCkBAIC0xOTY0LDEwICsxOTgwLDEwIEBACiAgICAgfQogCiAgICAgLyogc3RvcmUgdGhlIG5pY2tuYW1lIGZvciBTZWxlY3RDbGllbnRDZXJ0KCkgY2FsbGVkIGR1cmluZyBoYW5kc2hha2UgKi8KLSAgICBCQUNLRU5ELT5jbGllbnRfbmlja25hbWUgPSBuaWNrbmFtZTsKKyAgICBiYWNrZW5kLT5jbGllbnRfbmlja25hbWUgPSBuaWNrbmFtZTsKICAgfQogICBlbHNlCi0gICAgQkFDS0VORC0+Y2xpZW50X25pY2tuYW1lID0gTlVMTDsKKyAgICBiYWNrZW5kLT5jbGllbnRfbmlja25hbWUgPSBOVUxMOwogCiAgIGlmKFNTTF9HZXRDbGllbnRBdXRoRGF0YUhvb2sobW9kZWwsIFNlbGVjdENsaWVudENlcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiljb25uc3NsKSAhPSBTRUNTdWNjZXNzKSB7CkBAIC0yMDA4LDggKzIwMjQsOCBAQAogICB9CiAKICAgLyogaW1wb3J0IG91ciBtb2RlbCBzb2NrZXQgb250byB0aGUgY3VycmVudCBJL08gc3RhY2sgKi8KLSAgQkFDS0VORC0+aGFuZGxlID0gU1NMX0ltcG9ydEZEKG1vZGVsLCBuc3ByX2lvKTsKLSAgaWYoIUJBQ0tFTkQtPmhhbmRsZSkgeworICBiYWNrZW5kLT5oYW5kbGUgPSBTU0xfSW1wb3J0RkQobW9kZWwsIG5zcHJfaW8pOworICBpZighYmFja2VuZC0+aGFuZGxlKSB7CiAgICAgaWYoIXNlY29uZF9sYXllcikKICAgICAgIFBSX0Nsb3NlKG5zcHJfaW8pOwogICAgIGdvdG8gZXJyb3I7CkBAIC0yMDIwLDM2ICsyMDM2LDM2IEBACiAKICAgLyogVGhpcyBpcyB0aGUgcGFzc3dvcmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjZXJ0IHRoYXQgd2UncmUgdXNpbmcgKi8KICAgaWYoU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpIHsKLSAgICBTU0xfU2V0UEtDUzExUGluQXJnKEJBQ0tFTkQtPmhhbmRsZSwgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpOworICAgIFNTTF9TZXRQS0NTMTFQaW5BcmcoYmFja2VuZC0+aGFuZGxlLCBTU0xfU0VUX09QVElPTihrZXlfcGFzc3dkKSk7CiAgIH0KIAogI2lmZGVmIFNTTF9FTkFCTEVfT0NTUF9TVEFQTElORwogICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5c3RhdHVzKSkgewotICAgIGlmKFNTTF9PcHRpb25TZXQoQkFDS0VORC0+aGFuZGxlLCBTU0xfRU5BQkxFX09DU1BfU1RBUExJTkcsIFBSX1RSVUUpCisgICAgaWYoU1NMX09wdGlvblNldChiYWNrZW5kLT5oYW5kbGUsIFNTTF9FTkFCTEVfT0NTUF9TVEFQTElORywgUFJfVFJVRSkKICAgICAgICAgIT0gU0VDU3VjY2VzcykKICAgICAgIGdvdG8gZXJyb3I7CiAgIH0KICNlbmRpZgogCiAjaWZkZWYgU1NMX0VOQUJMRV9OUE4KLSAgaWYoU1NMX09wdGlvblNldChCQUNLRU5ELT5oYW5kbGUsIFNTTF9FTkFCTEVfTlBOLCBjb25uLT5iaXRzLnRsc19lbmFibGVfbnBuCisgIGlmKFNTTF9PcHRpb25TZXQoYmFja2VuZC0+aGFuZGxlLCBTU0xfRU5BQkxFX05QTiwgY29ubi0+Yml0cy50bHNfZW5hYmxlX25wbgogICAgICAgICAgICAgICAgICAgID8gUFJfVFJVRSA6IFBSX0ZBTFNFKSAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAjZW5kaWYKIAogI2lmZGVmIFNTTF9FTkFCTEVfQUxQTgotICBpZihTU0xfT3B0aW9uU2V0KEJBQ0tFTkQtPmhhbmRsZSwgU1NMX0VOQUJMRV9BTFBOLCBjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbgorICBpZihTU0xfT3B0aW9uU2V0KGJhY2tlbmQtPmhhbmRsZSwgU1NMX0VOQUJMRV9BTFBOLCBjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbgogICAgICAgICAgICAgICAgICAgID8gUFJfVFJVRSA6IFBSX0ZBTFNFKSAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAjZW5kaWYKIAogI2lmIE5TU1ZFUk5VTSA+PSAweDAzMGYwNCAvKiAzLjE1LjQgKi8KICAgaWYoZGF0YS0+c2V0LnNzbC5mYWxzZXN0YXJ0KSB7Ci0gICAgaWYoU1NMX09wdGlvblNldChCQUNLRU5ELT5oYW5kbGUsIFNTTF9FTkFCTEVfRkFMU0VfU1RBUlQsIFBSX1RSVUUpCisgICAgaWYoU1NMX09wdGlvblNldChiYWNrZW5kLT5oYW5kbGUsIFNTTF9FTkFCTEVfRkFMU0VfU1RBUlQsIFBSX1RSVUUpCiAgICAgICAgICE9IFNFQ1N1Y2Nlc3MpCiAgICAgICBnb3RvIGVycm9yOwogCi0gICAgaWYoU1NMX1NldENhbkZhbHNlU3RhcnRDYWxsYmFjayhCQUNLRU5ELT5oYW5kbGUsIENhbkZhbHNlU3RhcnRDYWxsYmFjaywKKyAgICBpZihTU0xfU2V0Q2FuRmFsc2VTdGFydENhbGxiYWNrKGJhY2tlbmQtPmhhbmRsZSwgQ2FuRmFsc2VTdGFydENhbGxiYWNrLAogICAgICAgICBjb25uKSAhPSBTRUNTdWNjZXNzKQogICAgICAgZ290byBlcnJvcjsKICAgfQpAQCAtMjA3MywyNCArMjA4OSwyNCBAQAogICAgIG1lbWNweSgmcHJvdG9jb2xzW2N1cl0sIEFMUE5fSFRUUF8xXzEsIEFMUE5fSFRUUF8xXzFfTEVOR1RIKTsKICAgICBjdXIgKz0gQUxQTl9IVFRQXzFfMV9MRU5HVEg7CiAKLSAgICBpZihTU0xfU2V0TmV4dFByb3RvTmVnbyhCQUNLRU5ELT5oYW5kbGUsIHByb3RvY29scywgY3VyKSAhPSBTRUNTdWNjZXNzKQorICAgIGlmKFNTTF9TZXROZXh0UHJvdG9OZWdvKGJhY2tlbmQtPmhhbmRsZSwgcHJvdG9jb2xzLCBjdXIpICE9IFNFQ1N1Y2Nlc3MpCiAgICAgICBnb3RvIGVycm9yOwogICB9CiAjZW5kaWYKIAogCiAgIC8qIEZvcmNlIGhhbmRzaGFrZSBvbiBuZXh0IEkvTyAqLwotICBpZihTU0xfUmVzZXRIYW5kc2hha2UoQkFDS0VORC0+aGFuZGxlLCAvKiBhc1NlcnZlciAqLyBQUl9GQUxTRSkKKyAgaWYoU1NMX1Jlc2V0SGFuZHNoYWtlKGJhY2tlbmQtPmhhbmRsZSwgLyogYXNTZXJ2ZXIgKi8gUFJfRkFMU0UpCiAgICAgICAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAKICAgLyogcHJvcGFnYXRlIGhvc3RuYW1lIHRvIHRoZSBUTFMgbGF5ZXIgKi8KLSAgaWYoU1NMX1NldFVSTChCQUNLRU5ELT5oYW5kbGUsIFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICBpZihTU0xfU2V0VVJMKGJhY2tlbmQtPmhhbmRsZSwgU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CiAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lKSAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAKICAgLyogcHJldmVudCBOU1MgZnJvbSByZS11c2luZyB0aGUgc2Vzc2lvbiBmb3IgYSBkaWZmZXJlbnQgaG9zdG5hbWUgKi8KLSAgaWYoU1NMX1NldFNvY2tQZWVySUQoQkFDS0VORC0+aGFuZGxlLCBTU0xfSVNfUFJPWFkoKSA/CisgIGlmKFNTTF9TZXRTb2NrUGVlcklEKGJhY2tlbmQtPmhhbmRsZSwgU1NMX0lTX1BST1hZKCkgPwogICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6IGNvbm4tPmhvc3QubmFtZSkKICAgICAgIT0gU0VDU3VjY2VzcykKICAgICBnb3RvIGVycm9yOwpAQCAtMjEwNyw2ICsyMTIzLDcgQEAKIHN0YXRpYyBDVVJMY29kZSBuc3NfZG9fY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCiB7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgUFJVaW50MzIgdGltZW91dDsKQEAgLTIxMTgsNyArMjEzNSw3IEBACiAKIAogICAvKiBjaGVjayB0aW1lb3V0IHNpdHVhdGlvbiAqLwotICBjb25zdCB0aW1lX3QgdGltZV9sZWZ0ID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKyAgY29uc3QgdGltZWRpZmZfdCB0aW1lX2xlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOwogICBpZih0aW1lX2xlZnQgPCAwKSB7CiAgICAgZmFpbGYoZGF0YSwgInRpbWVkIG91dCBiZWZvcmUgU1NMIGhhbmRzaGFrZSIpOwogICAgIHJlc3VsdCA9IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKQEAgLTIxMjcsNyArMjE0NCw3IEBACiAKICAgLyogRm9yY2UgdGhlIGhhbmRzaGFrZSBub3cgKi8KICAgdGltZW91dCA9IFBSX01pbGxpc2Vjb25kc1RvSW50ZXJ2YWwoKFBSVWludDMyKSB0aW1lX2xlZnQpOwotICBpZihTU0xfRm9yY2VIYW5kc2hha2VXaXRoVGltZW91dChCQUNLRU5ELT5oYW5kbGUsIHRpbWVvdXQpICE9IFNFQ1N1Y2Nlc3MpIHsKKyAgaWYoU1NMX0ZvcmNlSGFuZHNoYWtlV2l0aFRpbWVvdXQoYmFja2VuZC0+aGFuZGxlLCB0aW1lb3V0KSAhPSBTRUNTdWNjZXNzKSB7CiAgICAgaWYoUFJfR2V0RXJyb3IoKSA9PSBQUl9XT1VMRF9CTE9DS19FUlJPUikKICAgICAgIC8qIGJsb2NraW5nIGRpcmVjdGlvbiBpcyB1cGRhdGVkIGJ5IG5zc191cGRhdGVfY29ubmVjdGluZ19zdGF0ZSgpICovCiAgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CkBAIC0yMTM4LDcgKzIxNTUsNyBAQAogICAgIGdvdG8gZXJyb3I7CiAgIH0KIAotICByZXN1bHQgPSBkaXNwbGF5X2Nvbm5faW5mbyhjb25uLCBCQUNLRU5ELT5oYW5kbGUpOworICByZXN1bHQgPSBkaXNwbGF5X2Nvbm5faW5mbyhjb25uLCBiYWNrZW5kLT5oYW5kbGUpOwogICBpZihyZXN1bHQpCiAgICAgZ290byBlcnJvcjsKIApAQCAtMjE0Nyw3ICsyMTY0LDcgQEAKICAgICBjaGFyICpuaWNrbmFtZSA9IGR1cF9uaWNrbmFtZShkYXRhLCBTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSk7CiAgICAgaWYobmlja25hbWUpIHsKICAgICAgIC8qIHdlIHN1cHBvcnQgb25seSBuaWNrbmFtZXMgaW4gY2FzZSBvZiBpc3N1ZXJjZXJ0IGZvciBub3cgKi8KLSAgICAgIHJldCA9IGNoZWNrX2lzc3Vlcl9jZXJ0KEJBQ0tFTkQtPmhhbmRsZSwgbmlja25hbWUpOworICAgICAgcmV0ID0gY2hlY2tfaXNzdWVyX2NlcnQoYmFja2VuZC0+aGFuZGxlLCBuaWNrbmFtZSk7CiAgICAgICBmcmVlKG5pY2tuYW1lKTsKICAgICB9CiAKQEAgLTIyNTEsMTMgKzIyNjgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgc3NpemVfdCByYzsKIAogICAvKiBUaGUgU2VsZWN0Q2xpZW50Q2VydCgpIGhvb2sgdXNlcyB0aGlzIGZvciBpbmZvZigpIGFuZCBmYWlsZigpIGJ1dCB0aGUKICAgICAgaGFuZGxlIHN0b3JlZCBpbiBuc3Nfc2V0dXBfY29ubmVjdCgpIGNvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGZyZWVkLiAqLwotICBCQUNLRU5ELT5kYXRhID0gY29ubi0+ZGF0YTsKKyAgYmFja2VuZC0+ZGF0YSA9IGNvbm4tPmRhdGE7CiAKLSAgcmMgPSBQUl9TZW5kKEJBQ0tFTkQtPmhhbmRsZSwgbWVtLCAoaW50KWxlbiwgMCwgUFJfSU5URVJWQUxfTk9fV0FJVCk7CisgIHJjID0gUFJfU2VuZChiYWNrZW5kLT5oYW5kbGUsIG1lbSwgKGludClsZW4sIDAsIFBSX0lOVEVSVkFMX05PX1dBSVQpOwogICBpZihyYyA8IDApIHsKICAgICBQUkludDMyIGVyciA9IFBSX0dldEVycm9yKCk7CiAgICAgaWYoZXJyID09IFBSX1dPVUxEX0JMT0NLX0VSUk9SKQpAQCAtMjI4OCwxMyArMjMwNiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBzc2l6ZV90IG5yZWFkOwogCiAgIC8qIFRoZSBTZWxlY3RDbGllbnRDZXJ0KCkgaG9vayB1c2VzIHRoaXMgZm9yIGluZm9mKCkgYW5kIGZhaWxmKCkgYnV0IHRoZQogICAgICBoYW5kbGUgc3RvcmVkIGluIG5zc19zZXR1cF9jb25uZWN0KCkgY291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZnJlZWQuICovCi0gIEJBQ0tFTkQtPmRhdGEgPSBjb25uLT5kYXRhOworICBiYWNrZW5kLT5kYXRhID0gY29ubi0+ZGF0YTsKIAotICBucmVhZCA9IFBSX1JlY3YoQkFDS0VORC0+aGFuZGxlLCBidWYsIChpbnQpYnVmZmVyc2l6ZSwgMCwKKyAgbnJlYWQgPSBQUl9SZWN2KGJhY2tlbmQtPmhhbmRsZSwgYnVmLCAoaW50KWJ1ZmZlcnNpemUsIDAsCiAgICAgICAgICAgICAgICAgICBQUl9JTlRFUlZBTF9OT19XQUlUKTsKICAgaWYobnJlYWQgPCAwKSB7CiAgICAgLyogZmFpbGVkIFNTTCByZWFkICovCkBAIC0yMzU1LDYgKzIzNzQsOSBAQAogICBQSzExQ29udGV4dCAqTUQ1cHcgPSBQSzExX0NyZWF0ZURpZ2VzdENvbnRleHQoU0VDX09JRF9NRDUpOwogICB1bnNpZ25lZCBpbnQgTUQ1b3V0OwogCisgIGlmKCFNRDVwdykKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworCiAgIFBLMTFfRGlnZXN0T3AoTUQ1cHcsIHRtcCwgY3VybHhfdXp0b3VpKHRtcGxlbikpOwogICBQSzExX0RpZ2VzdEZpbmFsKE1ENXB3LCBtZDVzdW0sICZNRDVvdXQsIGN1cmx4X3V6dG91aShtZDVsZW4pKTsKICAgUEsxMV9EZXN0cm95Q29udGV4dChNRDVwdywgUFJfVFJVRSk7CkBAIC0yMzcwLDYgKzIzOTIsOSBAQAogICBQSzExQ29udGV4dCAqU0hBMjU2cHcgPSBQSzExX0NyZWF0ZURpZ2VzdENvbnRleHQoU0VDX09JRF9TSEEyNTYpOwogICB1bnNpZ25lZCBpbnQgU0hBMjU2b3V0OwogCisgIGlmKCFTSEEyNTZwdykKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworCiAgIFBLMTFfRGlnZXN0T3AoU0hBMjU2cHcsIHRtcCwgY3VybHhfdXp0b3VpKHRtcGxlbikpOwogICBQSzExX0RpZ2VzdEZpbmFsKFNIQTI1NnB3LCBzaGEyNTZzdW0sICZTSEEyNTZvdXQsIGN1cmx4X3V6dG91aShzaGEyNTZsZW4pKTsKICAgUEsxMV9EZXN0cm95Q29udGV4dChTSEEyNTZwdywgUFJfVFJVRSk7CkBAIC0yMzk4LDggKzI0MjMsOSBAQAogc3RhdGljIHZvaWQgKkN1cmxfbnNzX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GTyBpbmZvIFVOVVNFRF9QQVJBTSkKIHsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICAodm9pZClpbmZvOwotICByZXR1cm4gQkFDS0VORC0+aGFuZGxlOworICByZXR1cm4gYmFja2VuZC0+aGFuZGxlOwogfQogCiBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfbnNzID0gewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9vcGVuc3NsLmMgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL29wZW5zc2wuYwppbmRleCA4NWU5YmU2Li4yZTlmOTAwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL29wZW5zc2wuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL29wZW5zc2wuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjUsMTcgKzI1LDE3IEBACiAgKiBidXQgdnRscy5jIHNob3VsZCBldmVyIGNhbGwgb3IgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KICAqLwogCi0vKgotICogVGhlIG9yaWdpbmFsIFNTTGVheS11c2luZyBjb2RlIGZvciBjdXJsIHdhcyB3cml0dGVuIGJ5IExpbmFzIFZlcHN0YXMgYW5kCi0gKiBTYW1wbyBLZWxsb21ha2kgMTk5OC4KLSAqLwotCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCiAjaWZkZWYgVVNFX09QRU5TU0wKIAogI2luY2x1ZGUgPGxpbWl0cy5oPgogCisvKiBXaW5jcnlwdCBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSBhbnl0aGluZyB0aGF0IGNvdWxkIGluY2x1ZGUgT3BlblNTTC4gKi8KKyNpZiBkZWZpbmVkKFVTRV9XSU4zMl9DUllQVE8pCisjaW5jbHVkZSA8d2luY3J5cHQuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAiZm9ybWRhdGEuaCIgLyogZm9yIHRoZSBib3VuZGFyeSBmdW5jdGlvbiAqLwpAQCAtNDYsMTAgKzQ2LDEzIEBACiAjaW5jbHVkZSAic2xpc3QuaCIKICNpbmNsdWRlICJzZWxlY3QuaCIKICNpbmNsdWRlICJ2dGxzLmgiCisjaW5jbHVkZSAia2V5bG9nLmgiCiAjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgImhvc3RjaGVjay5oIgogI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisKICNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CkBAIC03NSw3ICs3OCw3IEBACiAjZW5kaWYKIAogI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDcwMGZMKSAmJiAvKiAwLjkuNyBvciBsYXRlciAqLyAgICAgXAotICAhZGVmaW5lZChPUEVOU1NMX05PX0VOR0lORSkKKyAgIWRlZmluZWQoT1BFTlNTTF9OT19FTkdJTkUpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVUlfQ09OU09MRSkKICNkZWZpbmUgVVNFX09QRU5TU0xfRU5HSU5FCiAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KICNlbmRpZgpAQCAtMTQ2LDE2ICsxNDksMTYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBMSUJSRVNTTF9WRVJTSU9OX05VTUJFUgotI2RlZmluZSBPcGVuU1NMX3ZlcnNpb25fbnVtKCkgTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIKLSNlbmRpZgotCiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMjAwZkwpICYmIC8qIDEuMC4yIG9yIGxhdGVyICovIFwKICAgICAhKGRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpICYmIFwKICAgICAgIExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgyMDcwMDAwMEwpCiAjZGVmaW5lIEhBVkVfWDUwOV9HRVQwX1NJR05BVFVSRSAxCiAjZW5kaWYKIAorI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDIwMGZMKSAvKiAxLjAuMiBvciBsYXRlciAqLworI2RlZmluZSBIQVZFX1NTTF9HRVRfU0hVVERPV04gMQorI2VuZGlmCisKICNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDIwMDNMICYmIFwKICAgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8PSAweDEwMDAyRkZGTCAmJiBcCiAgICFkZWZpbmVkKE9QRU5TU0xfTk9fQ09NUCkKQEAgLTIxMSwyOSArMjE0LDE3IEBACiAgICJBTEw6IUVYUE9SVDohRVhQT1JUNDA6IUVYUE9SVDU2OiFhTlVMTDohTE9XOiFSQzQ6QFNUUkVOR1RIIgogI2VuZGlmCiAKLSNkZWZpbmUgRU5BQkxFX1NTTEtFWUxPR0ZJTEUKLQotI2lmZGVmIEVOQUJMRV9TU0xLRVlMT0dGSUxFCi10eXBlZGVmIHN0cnVjdCBzc2xfdGFwX3N0YXRlIHsKLSAgaW50IG1hc3Rlcl9rZXlfbGVuZ3RoOwotICB1bnNpZ25lZCBjaGFyIG1hc3Rlcl9rZXlbU1NMX01BWF9NQVNURVJfS0VZX0xFTkdUSF07Ci0gIHVuc2lnbmVkIGNoYXIgY2xpZW50X3JhbmRvbVtTU0wzX1JBTkRPTV9TSVpFXTsKLX0gc3NsX3RhcF9zdGF0ZV90OwotI2VuZGlmIC8qIEVOQUJMRV9TU0xLRVlMT0dGSUxFICovCi0KIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhIHsKICAgLyogdGhlc2Ugb25lcyByZXF1aXJlcyBzcGVjaWZpYyBTU0wtdHlwZXMgKi8KICAgU1NMX0NUWCogY3R4OwogICBTU0wqICAgICBoYW5kbGU7CiAgIFg1MDkqICAgIHNlcnZlcl9jZXJ0OwotI2lmZGVmIEVOQUJMRV9TU0xLRVlMT0dGSUxFCi0gIC8qIHRhcF9zdGF0ZSBob2xkcyB0aGUgbGFzdCBzZWVuIG1hc3RlciBrZXkgaWYgd2UncmUgbG9nZ2luZyB0aGVtICovCi0gIHNzbF90YXBfc3RhdGVfdCB0YXBfc3RhdGU7CisjaWZuZGVmIEhBVkVfS0VZTE9HX0NBTExCQUNLCisgIC8qIFNldCB0byB0cnVlIG9uY2UgYSB2YWxpZCBrZXlsb2cgZW50cnkgaGFzIGJlZW4gY3JlYXRlZCB0byBhdm9pZCBkdXBlcy4gKi8KKyAgYm9vbCAgICAga2V5bG9nX2RvbmU7CiAjZW5kaWYKIH07CiAKLSNkZWZpbmUgQkFDS0VORCBjb25uc3NsLT5iYWNrZW5kCi0KIC8qCiAgKiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSByYW5kb20gbnVtYmVyIHNlZWQgZmlsZS4gVGhpcyBtdXN0IGJlCiAgKiBhIGZpbml0ZSB2YWx1ZSAoYmVjYXVzZSBzb21lIGVudHJvcHkgImZpbGVzIiBsaWtlIC9kZXYvdXJhbmRvbSBoYXZlCkBAIC0yNDIsNTcgKzIzMywyNyBAQAogICovCiAjZGVmaW5lIFJBTkRfTE9BRF9MRU5HVEggMTAyNAogCi0jaWZkZWYgRU5BQkxFX1NTTEtFWUxPR0ZJTEUKLS8qIFRoZSBmcCBmb3IgdGhlIG9wZW4gU1NMS0VZTE9HRklMRSwgb3IgTlVMTCBpZiBub3Qgb3BlbiAqLwotc3RhdGljIEZJTEUgKmtleWxvZ19maWxlX2ZwOwotCiAjaWZkZWYgSEFWRV9LRVlMT0dfQ0FMTEJBQ0sKIHN0YXRpYyB2b2lkIG9zc2xfa2V5bG9nX2NhbGxiYWNrKGNvbnN0IFNTTCAqc3NsLCBjb25zdCBjaGFyICpsaW5lKQogewogICAodm9pZClzc2w7CiAKLSAgLyogVXNpbmcgZnB1dHMgaGVyZSBpbnN0ZWFkIG9mIGZwcmludGYgc2luY2UgbGliY3VybCdzIGZwcmludGYgcmVwbGFjZW1lbnQKLSAgICAgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4gKi8KLSAgaWYoa2V5bG9nX2ZpbGVfZnAgJiYgbGluZSAmJiAqbGluZSkgewotICAgIGNoYXIgc3RhY2tidWZbMjU2XTsKLSAgICBjaGFyICpidWY7Ci0gICAgc2l6ZV90IGxpbmVsZW4gPSBzdHJsZW4obGluZSk7Ci0KLSAgICBpZihsaW5lbGVuIDw9IHNpemVvZihzdGFja2J1ZikgLSAyKQotICAgICAgYnVmID0gc3RhY2tidWY7Ci0gICAgZWxzZSB7Ci0gICAgICBidWYgPSBtYWxsb2MobGluZWxlbiArIDIpOwotICAgICAgaWYoIWJ1ZikKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtZW1jcHkoYnVmLCBsaW5lLCBsaW5lbGVuKTsKLSAgICBidWZbbGluZWxlbl0gPSAnXG4nOwotICAgIGJ1ZltsaW5lbGVuICsgMV0gPSAnXDAnOwotCi0gICAgZnB1dHMoYnVmLCBrZXlsb2dfZmlsZV9mcCk7Ci0gICAgaWYoYnVmICE9IHN0YWNrYnVmKQotICAgICAgZnJlZShidWYpOwotICB9CisgIEN1cmxfdGxzX2tleWxvZ193cml0ZV9saW5lKGxpbmUpOwogfQogI2Vsc2UKLSNkZWZpbmUgS0VZTE9HX1BSRUZJWCAgICAgICJDTElFTlRfUkFORE9NICIKLSNkZWZpbmUgS0VZTE9HX1BSRUZJWF9MRU4gIChzaXplb2YoS0VZTE9HX1BSRUZJWCkgLSAxKQogLyoKLSAqIHRhcF9zc2xfa2V5IGlzIGNhbGxlZCBieSBsaWJjdXJsIHRvIG1ha2UgdGhlIENMSUVOVF9SQU5ET01zIGlmIHRoZSBPcGVuU1NMCi0gKiBiZWluZyB1c2VkIGRvZXNuJ3QgaGF2ZSBuYXRpdmUgc3VwcG9ydCBmb3IgZG9pbmcgdGhhdC4KKyAqIG9zc2xfbG9nX3RsczEyX3NlY3JldCBpcyBjYWxsZWQgYnkgbGliY3VybCB0byBtYWtlIHRoZSBDTElFTlRfUkFORE9NcyBpZiB0aGUKKyAqIE9wZW5TU0wgYmVpbmcgdXNlZCBkb2Vzbid0IGhhdmUgbmF0aXZlIHN1cHBvcnQgZm9yIGRvaW5nIHRoYXQuCiAgKi8KLXN0YXRpYyB2b2lkIHRhcF9zc2xfa2V5KGNvbnN0IFNTTCAqc3NsLCBzc2xfdGFwX3N0YXRlX3QgKnN0YXRlKQorc3RhdGljIHZvaWQKK29zc2xfbG9nX3RsczEyX3NlY3JldChjb25zdCBTU0wgKnNzbCwgYm9vbCAqa2V5bG9nX2RvbmUpCiB7Ci0gIGNvbnN0IGNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKLSAgaW50IHBvcywgaTsKLSAgY2hhciBsaW5lW0tFWUxPR19QUkVGSVhfTEVOICsgMiAqIFNTTDNfUkFORE9NX1NJWkUgKyAxICsKLSAgICAgICAgICAgIDIgKiBTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIICsgMSArIDFdOwogICBjb25zdCBTU0xfU0VTU0lPTiAqc2Vzc2lvbiA9IFNTTF9nZXRfc2Vzc2lvbihzc2wpOwogICB1bnNpZ25lZCBjaGFyIGNsaWVudF9yYW5kb21bU1NMM19SQU5ET01fU0laRV07CiAgIHVuc2lnbmVkIGNoYXIgbWFzdGVyX2tleVtTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIXTsKICAgaW50IG1hc3Rlcl9rZXlfbGVuZ3RoID0gMDsKIAotICBpZighc2Vzc2lvbiB8fCAha2V5bG9nX2ZpbGVfZnApCisgIGlmKCFzZXNzaW9uIHx8ICprZXlsb2dfZG9uZSkKICAgICByZXR1cm47CiAKICNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMICYmIFwKQEAgLTMxMSw0NCArMjcyLDE3IEBACiAgIH0KICNlbmRpZgogCisgIC8qIFRoZSBoYW5kc2hha2UgaGFzIG5vdCBwcm9ncmVzc2VkIHN1ZmZpY2llbnRseSB5ZXQsIG9yIHRoaXMgaXMgYSBUTFMgMS4zCisgICAqIHNlc3Npb24gKHdoZW4gY3VybCB3YXMgYnVpbHQgd2l0aCBvbGRlciBPcGVuU1NMIGhlYWRlcnMgYW5kIHJ1bm5pbmcgd2l0aAorICAgKiBuZXdlciBPcGVuU1NMIHJ1bnRpbWUgbGlicmFyaWVzKS4gKi8KICAgaWYobWFzdGVyX2tleV9sZW5ndGggPD0gMCkKICAgICByZXR1cm47CiAKLSAgLyogU2tpcCB3cml0aW5nIGtleXMgaWYgdGhlcmUgaXMgbm8ga2V5IG9yIGl0IGRpZCBub3QgY2hhbmdlLiAqLwotICBpZihzdGF0ZS0+bWFzdGVyX2tleV9sZW5ndGggPT0gbWFzdGVyX2tleV9sZW5ndGggJiYKLSAgICAgIW1lbWNtcChzdGF0ZS0+bWFzdGVyX2tleSwgbWFzdGVyX2tleSwgbWFzdGVyX2tleV9sZW5ndGgpICYmCi0gICAgICFtZW1jbXAoc3RhdGUtPmNsaWVudF9yYW5kb20sIGNsaWVudF9yYW5kb20sIFNTTDNfUkFORE9NX1NJWkUpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc3RhdGUtPm1hc3Rlcl9rZXlfbGVuZ3RoID0gbWFzdGVyX2tleV9sZW5ndGg7Ci0gIG1lbWNweShzdGF0ZS0+bWFzdGVyX2tleSwgbWFzdGVyX2tleSwgbWFzdGVyX2tleV9sZW5ndGgpOwotICBtZW1jcHkoc3RhdGUtPmNsaWVudF9yYW5kb20sIGNsaWVudF9yYW5kb20sIFNTTDNfUkFORE9NX1NJWkUpOwotCi0gIG1lbWNweShsaW5lLCBLRVlMT0dfUFJFRklYLCBLRVlMT0dfUFJFRklYX0xFTik7Ci0gIHBvcyA9IEtFWUxPR19QUkVGSVhfTEVOOwotCi0gIC8qIENsaWVudCBSYW5kb20gZm9yIFNTTHYzL1RMUyAqLwotICBmb3IoaSA9IDA7IGkgPCBTU0wzX1JBTkRPTV9TSVpFOyBpKyspIHsKLSAgICBsaW5lW3BvcysrXSA9IGhleFtjbGllbnRfcmFuZG9tW2ldID4+IDRdOwotICAgIGxpbmVbcG9zKytdID0gaGV4W2NsaWVudF9yYW5kb21baV0gJiAweEZdOwotICB9Ci0gIGxpbmVbcG9zKytdID0gJyAnOwotCi0gIC8qIE1hc3RlciBTZWNyZXQgKHNpemUgaXMgYXQgbW9zdCBTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIKSAqLwotICBmb3IoaSA9IDA7IGkgPCBtYXN0ZXJfa2V5X2xlbmd0aDsgaSsrKSB7Ci0gICAgbGluZVtwb3MrK10gPSBoZXhbbWFzdGVyX2tleVtpXSA+PiA0XTsKLSAgICBsaW5lW3BvcysrXSA9IGhleFttYXN0ZXJfa2V5W2ldICYgMHhGXTsKLSAgfQotICBsaW5lW3BvcysrXSA9ICdcbic7Ci0gIGxpbmVbcG9zXSA9ICdcMCc7Ci0KLSAgLyogVXNpbmcgZnB1dHMgaGVyZSBpbnN0ZWFkIG9mIGZwcmludGYgc2luY2UgbGliY3VybCdzIGZwcmludGYgcmVwbGFjZW1lbnQKLSAgICAgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4gKi8KLSAgZnB1dHMobGluZSwga2V5bG9nX2ZpbGVfZnApOworICAqa2V5bG9nX2RvbmUgPSB0cnVlOworICBDdXJsX3Rsc19rZXlsb2dfd3JpdGUoIkNMSUVOVF9SQU5ET00iLCBjbGllbnRfcmFuZG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX2tleSwgbWFzdGVyX2tleV9sZW5ndGgpOwogfQogI2VuZGlmIC8qICFIQVZFX0tFWUxPR19DQUxMQkFDSyAqLwotI2VuZGlmIC8qIEVOQUJMRV9TU0xLRVlMT0dGSUxFICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICpTU0xfRVJST1JfdG9fc3RyKGludCBlcnIpCiB7CkBAIC0zOTIsNyArMzI2LDIwIEBACiAgKi8KIHN0YXRpYyBjaGFyICpvc3NsX3N0cmVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CisgIGlmKHNpemUpCisgICAgKmJ1ZiA9ICdcMCc7CisKKyNpZmRlZiBPUEVOU1NMX0lTX0JPUklOR1NTTAorICBFUlJfZXJyb3Jfc3RyaW5nX24oKHVpbnQzMl90KWVycm9yLCBidWYsIHNpemUpOworI2Vsc2UKICAgRVJSX2Vycm9yX3N0cmluZ19uKGVycm9yLCBidWYsIHNpemUpOworI2VuZGlmCisKKyAgaWYoc2l6ZSA+IDEgJiYgISpidWYpIHsKKyAgICBzdHJuY3B5KGJ1ZiwgKGVycm9yID8gIlVua25vd24gZXJyb3IiIDogIk5vIGVycm9yIiksIHNpemUpOworICAgIGJ1ZltzaXplIC0gMV0gPSAnXDAnOworICB9CisKICAgcmV0dXJuIGJ1ZjsKIH0KIApAQCAtNjA5LDEyICs1NTYsMTM2IEBACiBzdGF0aWMgQ1VSTGNvZGUgQ3VybF9vc3NsX3NldF9lbmdpbmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmdpbmUpOwogCitzdGF0aWMgaW50CitTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9iaW8oU1NMX0NUWCAqY3R4LCBCSU8gKmluLCBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXlfcGFzc3dkKQoreworICBpbnQgcmV0ID0gMDsKKyAgWDUwOSAqeCA9IE5VTEw7CisKKyAgaWYodHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSkgeworICAgIC8qIGogPSBFUlJfUl9BU04xX0xJQjsgKi8KKyAgICB4ID0gZDJpX1g1MDlfYmlvKGluLCBOVUxMKTsKKyAgfQorICBlbHNlIGlmKHR5cGUgPT0gU1NMX0ZJTEVUWVBFX1BFTSkgeworICAgIC8qIEVSUl9SX1BFTV9MSUI7ICovCisgICAgeCA9IFBFTV9yZWFkX2Jpb19YNTA5KGluLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd2RfY2FsbGJhY2ssICh2b2lkICopa2V5X3Bhc3N3ZCk7CisgIH0KKyAgZWxzZSB7CisgICAgcmV0ID0gMDsKKyAgICBnb3RvIGVuZDsKKyAgfQorCisgIGlmKHggPT0gTlVMTCkgeworICAgIHJldCA9IDA7CisgICAgZ290byBlbmQ7CisgIH0KKworICByZXQgPSBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZShjdHgsIHgpOworIGVuZDoKKyAgWDUwOV9mcmVlKHgpOworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2JpbyhTU0xfQ1RYICpjdHgsIEJJTyogaW4sIGludCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5X3Bhc3N3ZCkKK3sKKyAgaW50IHJldCA9IDA7CisgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKKworICBpZih0eXBlID09IFNTTF9GSUxFVFlQRV9QRU0pCisgICAgcGtleSA9IFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5KGluLCBOVUxMLCBwYXNzd2RfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopa2V5X3Bhc3N3ZCk7CisgIGVsc2UgaWYodHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSkKKyAgICBwa2V5ID0gZDJpX1ByaXZhdGVLZXlfYmlvKGluLCBOVUxMKTsKKyAgZWxzZSB7CisgICAgcmV0ID0gMDsKKyAgICBnb3RvIGVuZDsKKyAgfQorICBpZihwa2V5ID09IE5VTEwpIHsKKyAgICByZXQgPSAwOworICAgIGdvdG8gZW5kOworICB9CisgIHJldCA9IFNTTF9DVFhfdXNlX1ByaXZhdGVLZXkoY3R4LCBwa2V5KTsKKyAgRVZQX1BLRVlfZnJlZShwa2V5KTsKKyAgZW5kOgorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9iaW8oU1NMX0NUWCAqY3R4LCBCSU8qIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleV9wYXNzd2QpCit7CisvKiBTU0xfQ1RYX2FkZDFfY2hhaW5fY2VydCBpbnRyb2R1Y2VkIGluIE9wZW5TU0wgMS4wLjIgKi8KKyNpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAyMDBmTCkgLyogMS4wLjIgb3IgbGF0ZXIgKi8KKyAgaW50IHJldCA9IDA7CisgIFg1MDkgKnggPSBOVUxMOworICB2b2lkICpwYXNzd2RfY2FsbGJhY2tfdXNlcmRhdGEgPSAodm9pZCAqKWtleV9wYXNzd2Q7CisKKyAgRVJSX2NsZWFyX2Vycm9yKCk7CisKKyAgeCA9IFBFTV9yZWFkX2Jpb19YNTA5X0FVWChpbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd2RfY2FsbGJhY2ssICh2b2lkICopa2V5X3Bhc3N3ZCk7CisKKyAgaWYoeCA9PSBOVUxMKSB7CisgICAgcmV0ID0gMDsKKyAgICBnb3RvIGVuZDsKKyAgfQorCisgIHJldCA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlKGN0eCwgeCk7CisKKyAgaWYoRVJSX3BlZWtfZXJyb3IoKSAhPSAwKQorICAgICAgcmV0ID0gMDsKKworICBpZihyZXQpIHsKKyAgICBYNTA5ICpjYTsKKyAgICB1bnNpZ25lZCBsb25nIGVycjsKKworICAgIGlmKCFTU0xfQ1RYX2NsZWFyX2NoYWluX2NlcnRzKGN0eCkpIHsKKyAgICAgIHJldCA9IDA7CisgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICB3aGlsZSgoY2EgPSBQRU1fcmVhZF9iaW9fWDUwOShpbiwgTlVMTCwgcGFzc3dkX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3ZF9jYWxsYmFja191c2VyZGF0YSkpCisgICAgICAgICAgIT0gTlVMTCkgeworCisgICAgICBpZighU1NMX0NUWF9hZGQwX2NoYWluX2NlcnQoY3R4LCBjYSkpIHsKKyAgICAgICAgWDUwOV9mcmVlKGNhKTsKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgZ290byBlbmQ7CisgICAgICB9CisgICAgfQorCisgICAgZXJyID0gRVJSX3BlZWtfbGFzdF9lcnJvcigpOworICAgIGlmKChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfUEVNKSAmJgorICAgICAgIChFUlJfR0VUX1JFQVNPTihlcnIpID09IFBFTV9SX05PX1NUQVJUX0xJTkUpKQorICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgZWxzZQorICAgICAgcmV0ID0gMDsKKyAgfQorCisgZW5kOgorICBYNTA5X2ZyZWUoeCk7CisgIHJldHVybiByZXQ7CisjZWxzZQorICAodm9pZCljdHg7IC8qIHVudXNlZCAqLworICAodm9pZClpbjsgLyogdW51c2VkICovCisgICh2b2lkKWtleV9wYXNzd2Q7IC8qIHVudXNlZCAqLworICByZXR1cm4gMDsKKyNlbmRpZgorfQorCiBzdGF0aWMKIGludCBjZXJ0X3N0dWZmKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgIFNTTF9DVFgqIGN0eCwKICAgICAgICAgICAgICAgIGNoYXIgKmNlcnRfZmlsZSwKKyAgICAgICAgICAgICAgIEJJTyAqY2VydF9iaW8sCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjZXJ0X3R5cGUsCiAgICAgICAgICAgICAgICBjaGFyICprZXlfZmlsZSwKKyAgICAgICAgICAgICAgIEJJTyoga2V5X2JpbywKICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleV90eXBlLAogICAgICAgICAgICAgICAgY2hhciAqa2V5X3Bhc3N3ZCkKIHsKQEAgLTYyNCwxMCArNjk1LDExIEBACiAKICAgaW50IGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShjZXJ0X3R5cGUpOwogCi0gIGlmKGNlcnRfZmlsZSB8fCAoZmlsZV90eXBlID09IFNTTF9GSUxFVFlQRV9FTkdJTkUpKSB7CisgIGlmKGNlcnRfZmlsZSB8fCBjZXJ0X2JpbyB8fCAoZmlsZV90eXBlID09IFNTTF9GSUxFVFlQRV9FTkdJTkUpKSB7CiAgICAgU1NMICpzc2w7CiAgICAgWDUwOSAqeDUwOTsKICAgICBpbnQgY2VydF9kb25lID0gMDsKKyAgICBpbnQgY2VydF91c2VfcmVzdWx0OwogCiAgICAgaWYoa2V5X3Bhc3N3ZCkgewogICAgICAgLyogc2V0IHRoZSBwYXNzd29yZCBpbiB0aGUgY2FsbGJhY2sgdXNlcmRhdGEgKi8KQEAgLTY0MCw4ICs3MTIsMTAgQEAKICAgICBzd2l0Y2goZmlsZV90eXBlKSB7CiAgICAgY2FzZSBTU0xfRklMRVRZUEVfUEVNOgogICAgICAgLyogU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZSgpIG9ubHkgd29ya3Mgb24gUEVNIGZpbGVzICovCi0gICAgICBpZihTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKGN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9maWxlKSAhPSAxKSB7CisgICAgICBjZXJ0X3VzZV9yZXN1bHQgPSBjZXJ0X2JpbyA/CisgICAgICAgICAgU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fYmlvKGN0eCwgY2VydF9iaW8sIGtleV9wYXNzd2QpIDoKKyAgICAgICAgICBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKGN0eCwgY2VydF9maWxlKTsKKyAgICAgIGlmKGNlcnRfdXNlX3Jlc3VsdCAhPSAxKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsCiAgICAgICAgICAgICAgICJjb3VsZCBub3QgbG9hZCBQRU0gY2xpZW50IGNlcnRpZmljYXRlLCAiIE9TU0xfUEFDS0FHRQogICAgICAgICAgICAgICAiIGVycm9yICVzLCAiCkBAIC02NTYsOSArNzMwLDEyIEBACiAgICAgICAvKiBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKCkgd29ya3Mgd2l0aCBlaXRoZXIgUEVNIG9yIEFTTjEsIGJ1dAogICAgICAgICAgd2UgdXNlIHRoZSBjYXNlIGFib3ZlIGZvciBQRU0gc28gdGhpcyBjYW4gb25seSBiZSBwZXJmb3JtZWQgd2l0aAogICAgICAgICAgQVNOMSBmaWxlcy4gKi8KLSAgICAgIGlmKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkgIT0gMSkgeworCisgICAgICBjZXJ0X3VzZV9yZXN1bHQgPSBjZXJ0X2JpbyA/CisgICAgICAgICAgU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfYmlvKGN0eCwgY2VydF9iaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSwga2V5X3Bhc3N3ZCkgOgorICAgICAgICAgIFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY3R4LCBjZXJ0X2ZpbGUsIGZpbGVfdHlwZSk7CisgICAgICBpZihjZXJ0X3VzZV9yZXN1bHQgIT0gMSkgewogICAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgICAiY291bGQgbm90IGxvYWQgQVNOMSBjbGllbnQgY2VydGlmaWNhdGUsICIgT1NTTF9QQUNLQUdFCiAgICAgICAgICAgICAgICIgZXJyb3IgJXMsICIKQEAgLTczOCwyNyArODE1LDMxIEBACiAgICAgICBQS0NTMTIgKnAxMiA9IE5VTEw7CiAgICAgICBFVlBfUEtFWSAqcHJpOwogICAgICAgU1RBQ0tfT0YoWDUwOSkgKmNhID0gTlVMTDsKKyAgICAgIGlmKCFjZXJ0X2JpbykgeworICAgICAgICBmcCA9IEJJT19uZXcoQklPX3NfZmlsZSgpKTsKKyAgICAgICAgaWYoZnAgPT0gTlVMTCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICAgIkJJT19uZXcgcmV0dXJuIE5VTEwsICIgT1NTTF9QQUNLQUdFCisgICAgICAgICAgICAgICAgIiBlcnJvciAlcyIsCisgICAgICAgICAgICAgICAgb3NzbF9zdHJlcnJvcihFUlJfZ2V0X2Vycm9yKCksIGVycm9yX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlcnJvcl9idWZmZXIpKSApOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKLSAgICAgIGZwID0gQklPX25ldyhCSU9fc19maWxlKCkpOwotICAgICAgaWYoZnAgPT0gTlVMTCkgewotICAgICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgICAiQklPX25ldyByZXR1cm4gTlVMTCwgIiBPU1NMX1BBQ0tBR0UKLSAgICAgICAgICAgICAgIiBlcnJvciAlcyIsCi0gICAgICAgICAgICAgIG9zc2xfc3RyZXJyb3IoRVJSX2dldF9lcnJvcigpLCBlcnJvcl9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVycm9yX2J1ZmZlcikpICk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBpZihCSU9fcmVhZF9maWxlbmFtZShmcCwgY2VydF9maWxlKSA8PSAwKSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgImNvdWxkIG5vdCBvcGVuIFBLQ1MxMiBmaWxlICclcyciLCBjZXJ0X2ZpbGUpOworICAgICAgICAgIEJJT19mcmVlKGZwKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgfQogCi0gICAgICBpZihCSU9fcmVhZF9maWxlbmFtZShmcCwgY2VydF9maWxlKSA8PSAwKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJjb3VsZCBub3Qgb3BlbiBQS0NTMTIgZmlsZSAnJXMnIiwgY2VydF9maWxlKTsKKyAgICAgIHAxMiA9IGQyaV9QS0NTMTJfYmlvKGNlcnRfYmlvID8gY2VydF9iaW8gOiBmcCwgTlVMTCk7CisgICAgICBpZihmcCkKICAgICAgICAgQklPX2ZyZWUoZnApOwotICAgICAgICByZXR1cm4gMDsKLSAgICAgIH0KLSAgICAgIHAxMiA9IGQyaV9QS0NTMTJfYmlvKGZwLCBOVUxMKTsKLSAgICAgIEJJT19mcmVlKGZwKTsKIAogICAgICAgaWYoIXAxMikgewotICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3IgcmVhZGluZyBQS0NTMTIgZmlsZSAnJXMnIiwgY2VydF9maWxlKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHJlYWRpbmcgUEtDUzEyIGZpbGUgJyVzJyIsCisgICAgICAgICAgICAgIGNlcnRfYmlvID8gIihtZW1vcnkgYmxvYikiIDogY2VydF9maWxlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICB9CiAKQEAgLTgzOSw4ICs5MjAsMTAgQEAKICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmKCFrZXlfZmlsZSkKKyAgICBpZigoIWtleV9maWxlKSAmJiAoIWtleV9iaW8pKSB7CiAgICAgICBrZXlfZmlsZSA9IGNlcnRfZmlsZTsKKyAgICAgIGtleV9iaW8gPSBjZXJ0X2JpbzsKKyAgICB9CiAgICAgZWxzZQogICAgICAgZmlsZV90eXBlID0gZG9fZmlsZV90eXBlKGtleV90eXBlKTsKIApAQCAtODUwLDkgKzkzMywxMiBAQAogICAgICAgICBicmVhazsKICAgICAgIC8qIEZBTExUSFJPVUdIICovCiAgICAgY2FzZSBTU0xfRklMRVRZUEVfQVNOMToKLSAgICAgIGlmKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShjdHgsIGtleV9maWxlLCBmaWxlX3R5cGUpICE9IDEpIHsKKyAgICAgIGNlcnRfdXNlX3Jlc3VsdCA9IGtleV9iaW8gPworICAgICAgICBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2JpbyhjdHgsIGtleV9iaW8sIGZpbGVfdHlwZSwga2V5X3Bhc3N3ZCkgOgorICAgICAgICBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY3R4LCBrZXlfZmlsZSwgZmlsZV90eXBlKTsKKyAgICAgIGlmKGNlcnRfdXNlX3Jlc3VsdCAhPSAxKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gc2V0IHByaXZhdGUga2V5IGZpbGU6ICclcycgdHlwZSAlcyIsCi0gICAgICAgICAgICAgIGtleV9maWxlLCBrZXlfdHlwZT9rZXlfdHlwZToiUEVNIik7CisgICAgICAgICAgICAgIGtleV9maWxlP2tleV9maWxlOiIobWVtb3J5IGJsb2IpIiwga2V5X3R5cGU/a2V5X3R5cGU6IlBFTSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtMTAxMiwyNCArMTA5OCwxNCBAQAogICovCiBzdGF0aWMgaW50IEN1cmxfb3NzbF9pbml0KHZvaWQpCiB7Ci0jaWZkZWYgRU5BQkxFX1NTTEtFWUxPR0ZJTEUKLSAgY2hhciAqa2V5bG9nX2ZpbGVfbmFtZTsKLSNlbmRpZgotCiAgIE9QRU5TU0xfbG9hZF9idWlsdGluX21vZHVsZXMoKTsKIAogI2lmZGVmIFVTRV9PUEVOU1NMX0VOR0lORQogICBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXMoKTsKICNlbmRpZgogCi0gIC8qIE9QRU5TU0xfY29uZmlnKE5VTEwpOyBpcyAic3Ryb25nbHkgcmVjb21tZW5kZWQiIHRvIHVzZSBidXQgdW5mb3J0dW5hdGVseQotICAgICB0aGF0IGZ1bmN0aW9uIG1ha2VzIGFuIGV4aXQoKSBjYWxsIG9uIHdyb25nbHkgZm9ybWF0dGVkIGNvbmZpZyBmaWxlcwotICAgICB3aGljaCBtYWtlcyBpdCBoYXJkIHRvIHVzZSBpbiBzb21lIHNpdHVhdGlvbnMuIE9QRU5TU0xfY29uZmlnKCkgaXRzZWxmCi0gICAgIGNhbGxzIENPTkZfbW9kdWxlc19sb2FkX2ZpbGUoKSBhbmQgd2UgdXNlIHRoYXQgaW5zdGVhZCBhbmQgd2UgaWdub3JlCi0gICAgIGl0cyByZXR1cm4gY29kZSEgKi8KLQotICAvKiBDT05GX01GTEFHU19ERUZBVUxUX1NFQ1RJT04gaW50cm9kdWNlZCBzb21lIHRpbWUgYmV0d2VlbiAwLjkuOGIgYW5kCi0gICAgIDAuOS44ZSAqLworLyogQ09ORl9NRkxBR1NfREVGQVVMVF9TRUNUSU9OIHdhcyBpbnRyb2R1Y2VkIHNvbWUgdGltZSBiZXR3ZWVuIDAuOS44YiBhbmQKKyAgIDAuOS44ZSAqLwogI2lmbmRlZiBDT05GX01GTEFHU19ERUZBVUxUX1NFQ1RJT04KICNkZWZpbmUgQ09ORl9NRkxBR1NfREVGQVVMVF9TRUNUSU9OIDB4MAogI2VuZGlmCkBAIC0xMDU0LDI2ICsxMTMwLDcgQEAKICAgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXMoKTsKICNlbmRpZgogCi0jaWZkZWYgRU5BQkxFX1NTTEtFWUxPR0ZJTEUKLSAgaWYoIWtleWxvZ19maWxlX2ZwKSB7Ci0gICAga2V5bG9nX2ZpbGVfbmFtZSA9IGN1cmxfZ2V0ZW52KCJTU0xLRVlMT0dGSUxFIik7Ci0gICAgaWYoa2V5bG9nX2ZpbGVfbmFtZSkgewotICAgICAga2V5bG9nX2ZpbGVfZnAgPSBmb3BlbihrZXlsb2dfZmlsZV9uYW1lLCBGT1BFTl9BUFBFTkRURVhUKTsKLSAgICAgIGlmKGtleWxvZ19maWxlX2ZwKSB7Ci0jaWZkZWYgV0lOMzIKLSAgICAgICAgaWYoc2V0dmJ1ZihrZXlsb2dfZmlsZV9mcCwgTlVMTCwgX0lPTkJGLCAwKSkKLSNlbHNlCi0gICAgICAgIGlmKHNldHZidWYoa2V5bG9nX2ZpbGVfZnAsIE5VTEwsIF9JT0xCRiwgNDA5NikpCi0jZW5kaWYKLSAgICAgICAgewotICAgICAgICAgIGZjbG9zZShrZXlsb2dfZmlsZV9mcCk7Ci0gICAgICAgICAga2V5bG9nX2ZpbGVfZnAgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBDdXJsX3NhZmVmcmVlKGtleWxvZ19maWxlX25hbWUpOwotICAgIH0KLSAgfQotI2VuZGlmCisgIEN1cmxfdGxzX2tleWxvZ19vcGVuKCk7CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgZXh0cmEgZGF0YSBpbmRleGVzICovCiAgIGlmKG9zc2xfZ2V0X3NzbF9jb25uX2luZGV4KCkgPCAwIHx8IG9zc2xfZ2V0X3NzbF9zb2NraW5kZXhfaW5kZXgoKSA8IDApCkBAIC0xMTE2LDEyICsxMTczLDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBFTkFCTEVfU1NMS0VZTE9HRklMRQotICBpZihrZXlsb2dfZmlsZV9mcCkgewotICAgIGZjbG9zZShrZXlsb2dfZmlsZV9mcCk7Ci0gICAga2V5bG9nX2ZpbGVfZnAgPSBOVUxMOwotICB9Ci0jZW5kaWYKKyAgQ3VybF90bHNfa2V5bG9nX2Nsb3NlKCk7CiB9CiAKIC8qCkBAIC0xMjY2LDE5ICsxMzE4LDE5IEBACiAgIHJldHVybiBsaXN0OwogfQogCi0KIHN0YXRpYyB2b2lkIG9zc2xfY2xvc2Uoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wpCiB7Ci0gIGlmKEJBQ0tFTkQtPmhhbmRsZSkgewotICAgICh2b2lkKVNTTF9zaHV0ZG93bihCQUNLRU5ELT5oYW5kbGUpOwotICAgIFNTTF9zZXRfY29ubmVjdF9zdGF0ZShCQUNLRU5ELT5oYW5kbGUpOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgIGlmKGJhY2tlbmQtPmhhbmRsZSkgeworICAgICh2b2lkKVNTTF9zaHV0ZG93bihiYWNrZW5kLT5oYW5kbGUpOworICAgIFNTTF9zZXRfY29ubmVjdF9zdGF0ZShiYWNrZW5kLT5oYW5kbGUpOwogCi0gICAgU1NMX2ZyZWUoQkFDS0VORC0+aGFuZGxlKTsKLSAgICBCQUNLRU5ELT5oYW5kbGUgPSBOVUxMOworICAgIFNTTF9mcmVlKGJhY2tlbmQtPmhhbmRsZSk7CisgICAgYmFja2VuZC0+aGFuZGxlID0gTlVMTDsKICAgfQotICBpZihCQUNLRU5ELT5jdHgpIHsKLSAgICBTU0xfQ1RYX2ZyZWUoQkFDS0VORC0+Y3R4KTsKLSAgICBCQUNLRU5ELT5jdHggPSBOVUxMOworICBpZihiYWNrZW5kLT5jdHgpIHsKKyAgICBTU0xfQ1RYX2ZyZWUoYmFja2VuZC0+Y3R4KTsKKyAgICBiYWNrZW5kLT5jdHggPSBOVUxMOwogICB9CiB9CiAKQEAgLTEyODgsNyArMTM0MCw5IEBACiBzdGF0aWMgdm9pZCBDdXJsX29zc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewogICBvc3NsX2Nsb3NlKCZjb25uLT5zc2xbc29ja2luZGV4XSk7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBvc3NsX2Nsb3NlKCZjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XSk7CisjZW5kaWYKIH0KIAogLyoKQEAgLTEzMDcsNiArMTM2MSw3IEBACiAgIGludCBidWZmc2l6ZTsKICAgaW50IGVycjsKICAgYm9vbCBkb25lID0gRkFMU0U7CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAogI2lmbmRlZiBDVVJMX0RJU0FCTEVfRlRQCiAgIC8qIFRoaXMgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgb24gdGhlIHByb2Z0cGQgc2VydmVyLCBhbmQgdGhlIG1vZF90bHMgY29kZQpAQCAtMTMxNSwxMCArMTM3MCwxMCBAQAogICAgICB3ZSBkbyBub3Qgc2VuZCBvbmUuIExldCdzIGhvcGUgb3RoZXIgc2VydmVycyBkbyB0aGUgc2FtZS4uLiAqLwogCiAgIGlmKGRhdGEtPnNldC5mdHBfY2NjID09IENVUkxGVFBTU0xfQ0NDX0FDVElWRSkKLSAgICAgICh2b2lkKVNTTF9zaHV0ZG93bihCQUNLRU5ELT5oYW5kbGUpOworICAgICAgKHZvaWQpU1NMX3NodXRkb3duKGJhY2tlbmQtPmhhbmRsZSk7CiAjZW5kaWYKIAotICBpZihCQUNLRU5ELT5oYW5kbGUpIHsKKyAgaWYoYmFja2VuZC0+aGFuZGxlKSB7CiAgICAgYnVmZnNpemUgPSAoaW50KXNpemVvZihidWYpOwogICAgIHdoaWxlKCFkb25lKSB7CiAgICAgICBpbnQgd2hhdCA9IFNPQ0tFVF9SRUFEQUJMRShjb25uLT5zb2NrW3NvY2tpbmRleF0sCkBAIC0xMzI4LDggKzEzODMsOCBAQAogCiAgICAgICAgIC8qIFNvbWV0aGluZyB0byByZWFkLCBsZXQncyBkbyBpdCBhbmQgaG9wZSB0aGF0IGl0IGlzIHRoZSBjbG9zZQogICAgICAgICAgICBub3RpZnkgYWxlcnQgZnJvbSB0aGUgc2VydmVyICovCi0gICAgICAgIG5yZWFkID0gKHNzaXplX3QpU1NMX3JlYWQoQkFDS0VORC0+aGFuZGxlLCBidWYsIGJ1ZmZzaXplKTsKLSAgICAgICAgZXJyID0gU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIChpbnQpbnJlYWQpOworICAgICAgICBucmVhZCA9IChzc2l6ZV90KVNTTF9yZWFkKGJhY2tlbmQtPmhhbmRsZSwgYnVmLCBidWZmc2l6ZSk7CisgICAgICAgIGVyciA9IFNTTF9nZXRfZXJyb3IoYmFja2VuZC0+aGFuZGxlLCAoaW50KW5yZWFkKTsKIAogICAgICAgICBzd2l0Y2goZXJyKSB7CiAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6IC8qIHRoaXMgaXMgbm90IGFuIGVycm9yICovCkBAIC0xMzc0LDcgKzE0MjksNyBAQAogCiAgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpIHsKICNpZmRlZiBIQVZFX1NTTF9HRVRfU0hVVERPV04KLSAgICAgIHN3aXRjaChTU0xfZ2V0X3NodXRkb3duKEJBQ0tFTkQtPmhhbmRsZSkpIHsKKyAgICAgIHN3aXRjaChTU0xfZ2V0X3NodXRkb3duKGJhY2tlbmQtPmhhbmRsZSkpIHsKICAgICAgIGNhc2UgU1NMX1NFTlRfU0hVVERPV046CiAgICAgICAgIGluZm9mKGRhdGEsICJTU0xfZ2V0X3NodXRkb3duKCkgcmV0dXJuZWQgU1NMX1NFTlRfU0hVVERPV05cbiIpOwogICAgICAgICBicmVhazsKQEAgLTEzODksOCArMTQ0NCw4IEBACiAjZW5kaWYKICAgICB9CiAKLSAgICBTU0xfZnJlZShCQUNLRU5ELT5oYW5kbGUpOwotICAgIEJBQ0tFTkQtPmhhbmRsZSA9IE5VTEw7CisgICAgU1NMX2ZyZWUoYmFja2VuZC0+aGFuZGxlKTsKKyAgICBiYWNrZW5kLT5oYW5kbGUgPSBOVUxMOwogICB9CiAgIHJldHVybiByZXR2YWw7CiB9CkBAIC0xNTE0LDEwICsxNTY5LDE2IEBACiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBib29sIGROU05hbWUgPSBGQUxTRTsgLyogaWYgYSBkTlNOYW1lIGZpZWxkIGV4aXN0cyBpbiB0aGUgY2VydCAqLwogICBib29sIGlQQWRkcmVzcyA9IEZBTFNFOyAvKiBpZiBhIGlQQWRkcmVzcyBmaWVsZCBleGlzdHMgaW4gdGhlIGNlcnQgKi8KLSAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6Ci0gICAgY29ubi0+aG9zdC5uYW1lOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPworICAgIGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDogY29ubi0+aG9zdC5uYW1lOwogICBjb25zdCBjaGFyICogY29uc3QgZGlzcG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/CiAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lIDogY29ubi0+aG9zdC5kaXNwbmFtZTsKKyNlbHNlCisgIC8qIGRpc2FibGVkIHByb3h5IHN1cHBvcnQgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBjaGFyICogY29uc3QgZGlzcG5hbWUgPSBjb25uLT5ob3N0LmRpc3BuYW1lOworI2VuZGlmCiAKICNpZmRlZiBFTkFCTEVfSVBWNgogICBpZihjb25uLT5iaXRzLmlwdjZfaXAgJiYKQEAgLTE1MzYsOCArMTU5NywxMyBAQAogICBhbHRuYW1lcyA9IFg1MDlfZ2V0X2V4dF9kMmkoc2VydmVyX2NlcnQsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCBOVUxMLCBOVUxMKTsKIAogICBpZihhbHRuYW1lcykgeworI2lmZGVmIE9QRU5TU0xfSVNfQk9SSU5HU1NMCisgICAgc2l6ZV90IG51bWFsdHM7CisgICAgc2l6ZV90IGk7CisjZWxzZQogICAgIGludCBudW1hbHRzOwogICAgIGludCBpOworI2VuZGlmCiAgICAgYm9vbCBkbnNtYXRjaGVkID0gRkFMU0U7CiAgICAgYm9vbCBpcG1hdGNoZWQgPSBGQUxTRTsKIApAQCAtMTU2NywxMSArMTYzMywxMCBAQAogICAgICAgICAgICAgIGFzc3VtZWQgdGhhdCB0aGUgZGF0YSByZXR1cm5lZCBieSBBU04xX1NUUklOR19kYXRhKCkgaXMgbnVsbAogICAgICAgICAgICAgIHRlcm1pbmF0ZWQgb3IgZG9lcyBub3QgY29udGFpbiBlbWJlZGRlZCBudWxscy4iIEJ1dCBhbHNvIHRoYXQKICAgICAgICAgICAgICAiVGhlIGFjdHVhbCBmb3JtYXQgb2YgdGhlIGRhdGEgd2lsbCBkZXBlbmQgb24gdGhlIGFjdHVhbCBzdHJpbmcKLSAgICAgICAgICAgICB0eXBlIGl0c2VsZjogZm9yIGV4YW1wbGUgZm9yIGFuZCBJQTVTdHJpbmcgdGhlIGRhdGEgd2lsbCBiZSBBU0NJSSIKKyAgICAgICAgICAgICB0eXBlIGl0c2VsZjogZm9yIGV4YW1wbGUgZm9yIGFuIElBNVN0cmluZyB0aGUgZGF0YSB3aWxsIGJlIEFTQ0lJIgogCi0gICAgICAgICAgICAgR2lzbGUgcmVzZWFyY2hlZCB0aGUgT3BlblNTTCBzb3VyY2VzOgotICAgICAgICAgICAgICJJIGNoZWNrZWQgdGhlIDAuOS42IGFuZCAwLjkuOCBzb3VyY2VzIGJlZm9yZSBteSBwYXRjaCBhbmQKLSAgICAgICAgICAgICBpdCBhbHdheXMgMC10ZXJtaW5hdGVzIGFuIElBNVN0cmluZy4iCisgICAgICAgICAgICAgSXQgaGFzIGJlZW4gaG93ZXZlciB2ZXJpZmllZCB0aGF0IGluIDAuOS42IGFuZCAwLjkuNywgSUE1U3RyaW5nCisgICAgICAgICAgICAgaXMgYWx3YXlzIG51bGwtdGVybWluYXRlZC4KICAgICAgICAgICAqLwogICAgICAgICAgIGlmKChhbHRsZW4gPT0gc3RybGVuKGFsdHB0cikpICYmCiAgICAgICAgICAgICAgLyogaWYgdGhpcyBpc24ndCB0cnVlLCB0aGVyZSB3YXMgYW4gZW1iZWRkZWQgemVybyBpbiB0aGUgbmFtZQpAQCAtMTYzNSw4ICsxNzAwLDcgQEAKICAgICAgIC8qIEluIE9wZW5TU0wgMC45LjdkIGFuZCBlYXJsaWVyLCBBU04xX1NUUklOR190b19VVEY4IGZhaWxzIGlmIHRoZSBpbnB1dAogICAgICAgICAgaXMgYWxyZWFkeSBVVEYtOCBlbmNvZGVkLiBXZSBjaGVjayBmb3IgdGhpcyBjYXNlIGFuZCBjb3B5IHRoZSByYXcKICAgICAgICAgIHN0cmluZyBtYW51YWxseSB0byBhdm9pZCB0aGUgcHJvYmxlbS4gVGhpcyBjb2RlIGNhbiBiZSBtYWRlCi0gICAgICAgICBjb25kaXRpb25hbCBpbiB0aGUgZnV0dXJlIHdoZW4gT3BlblNTTCBoYXMgYmVlbiBmaXhlZC4gV29yay1hcm91bmQKLSAgICAgICAgIGJyb3VnaHQgYnkgQWxleGlzIFMuIEwuIENhcnZhbGhvLiAqLworICAgICAgICAgY29uZGl0aW9uYWwgaW4gdGhlIGZ1dHVyZSB3aGVuIE9wZW5TU0wgaGFzIGJlZW4gZml4ZWQuICovCiAgICAgICBpZih0bXApIHsKICAgICAgICAgaWYoQVNOMV9TVFJJTkdfdHlwZSh0bXApID09IFZfQVNOMV9VVEY4U1RSSU5HKSB7CiAgICAgICAgICAgaiA9IEFTTjFfU1RSSU5HX2xlbmd0aCh0bXApOwpAQCAtMTcwNiwxMyArMTc3MCwxMyBAQAogICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KICAgT0NTUF9SRVNQT05TRSAqcnNwID0gTlVMTDsKICAgT0NTUF9CQVNJQ1JFU1AgKmJyID0gTlVMTDsKICAgWDUwOV9TVE9SRSAgICAgKnN0ID0gTlVMTDsKICAgU1RBQ0tfT0YoWDUwOSkgKmNoID0gTlVMTDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogCi0gIGxvbmcgbGVuID0gU1NMX2dldF90bHNleHRfc3RhdHVzX29jc3BfcmVzcChCQUNLRU5ELT5oYW5kbGUsICZzdGF0dXMpOworICBsb25nIGxlbiA9IFNTTF9nZXRfdGxzZXh0X3N0YXR1c19vY3NwX3Jlc3AoYmFja2VuZC0+aGFuZGxlLCAmc3RhdHVzKTsKIAogICBpZighc3RhdHVzKSB7CiAgICAgZmFpbGYoZGF0YSwgIk5vIE9DU1AgcmVzcG9uc2UgcmVjZWl2ZWQiKTsKQEAgLTE3NDIsOCArMTgwNiw4IEBACiAgICAgZ290byBlbmQ7CiAgIH0KIAotICBjaCA9IFNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gIHN0ID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShCQUNLRU5ELT5jdHgpOworICBjaCA9IFNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluKGJhY2tlbmQtPmhhbmRsZSk7CisgIHN0ID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShiYWNrZW5kLT5jdHgpOwogCiAjaWYgKChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDw9IDB4MTAwMDIwMWZMKSAvKiBGaXhlZCBhZnRlciAxLjAuMmEgKi8gfHwgXAogICAgICAoZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTgxOSw3ICsxODgzLDggQEAKICAgfQogCiBlbmQ6Ci0gIGlmKGJyKSBPQ1NQX0JBU0lDUkVTUF9mcmVlKGJyKTsKKyAgaWYoYnIpCisgICAgT0NTUF9CQVNJQ1JFU1BfZnJlZShicik7CiAgIE9DU1BfUkVTUE9OU0VfZnJlZShyc3ApOwogCiAgIHJldHVybiByZXN1bHQ7CkBAIC0yMTU2LDkgKzIyMjEsMTAwIEBACiB9CiAjZW5kaWYKIAorI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMKSAvKiAxLjEuMCAqLwogc3RhdGljIENVUkxjb2RlCi1zZXRfc3NsX3ZlcnNpb25fbWluX21heChsb25nICpjdHhfb3B0aW9ucywgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3NldF9zc2xfdmVyc2lvbl9taW5fbWF4KFNTTF9DVFggKmN0eCwgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICAvKiBmaXJzdCwgVExTIG1pbiB2ZXJzaW9uLi4uICovCisgIGxvbmcgY3VybF9zc2xfdmVyc2lvbl9taW4gPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbik7CisgIGxvbmcgY3VybF9zc2xfdmVyc2lvbl9tYXg7CisKKyAgLyogY29udmVydCBjVVJMIG1pbiBTU0wgdmVyc2lvbiBvcHRpb24gdG8gT3BlblNTTCBjb25zdGFudCAqLworI2lmIGRlZmluZWQoT1BFTlNTTF9JU19CT1JJTkdTU0wpIHx8IGRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCisgIHVpbnQxNl90IG9zc2xfc3NsX3ZlcnNpb25fbWluID0gMDsKKyAgdWludDE2X3Qgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSAwOworI2Vsc2UKKyAgbG9uZyBvc3NsX3NzbF92ZXJzaW9uX21pbiA9IDA7CisgIGxvbmcgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSAwOworI2VuZGlmCisgIHN3aXRjaChjdXJsX3NzbF92ZXJzaW9uX21pbikgeworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOiAvKiBUTFMgMS54ICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKKyAgICAgIG9zc2xfc3NsX3ZlcnNpb25fbWluID0gVExTMV9WRVJTSU9OOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyAgICAgIG9zc2xfc3NsX3ZlcnNpb25fbWluID0gVExTMV8xX1ZFUlNJT047CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgorICAgICAgb3NzbF9zc2xfdmVyc2lvbl9taW4gPSBUTFMxXzJfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworI2lmZGVmIFRMUzFfM19WRVJTSU9OCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICAgIG9zc2xfc3NsX3ZlcnNpb25fbWluID0gVExTMV8zX1ZFUlNJT047CisgICAgICBicmVhazsKKyNlbmRpZgorICB9CisKKyAgLyogQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgbWVhbnMgdGhhdCBubyBvcHRpb24gd2FzIHNlbGVjdGVkLgorICAgICBXZSBkb24ndCB3YW50IHRvIHBhc3MgMCB0byBTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbiBhcworICAgICBpdCB3b3VsZCBlbmFibGUgYWxsIHZlcnNpb25zIGRvd24gdG8gdGhlIGxvd2VzdCBzdXBwb3J0ZWQgYnkKKyAgICAgdGhlIGxpYnJhcnkuCisgICAgIFNvIHdlIHNraXAgdGhpcywgYW5kIHN0YXkgd2l0aCB0aGUgT1MgZGVmYXVsdAorICAqLworICBpZihjdXJsX3NzbF92ZXJzaW9uX21pbiAhPSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVCkgeworICAgIGlmKCFTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbihjdHgsIG9zc2xfc3NsX3ZlcnNpb25fbWluKSkgeworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgfQorCisgIC8qIC4uLiB0aGVuLCBUTFMgbWF4IHZlcnNpb24gKi8KKyAgY3VybF9zc2xfdmVyc2lvbl9tYXggPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpOworCisgIC8qIGNvbnZlcnQgY1VSTCBtYXggU1NMIHZlcnNpb24gb3B0aW9uIHRvIE9wZW5TU0wgY29uc3RhbnQgKi8KKyAgc3dpdGNoKGN1cmxfc3NsX3ZlcnNpb25fbWF4KSB7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzA6CisgICAgICBvc3NsX3NzbF92ZXJzaW9uX21heCA9IFRMUzFfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8xOgorICAgICAgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSBUTFMxXzFfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8yOgorICAgICAgb3NzbF9zc2xfdmVyc2lvbl9tYXggPSBUTFMxXzJfVkVSU0lPTjsKKyAgICAgIGJyZWFrOworI2lmZGVmIFRMUzFfM19WRVJTSU9OCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzM6CisgICAgICBvc3NsX3NzbF92ZXJzaW9uX21heCA9IFRMUzFfM19WRVJTSU9OOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfTk9ORTogIC8qIG5vbmUgc2VsZWN0ZWQgKi8KKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDogIC8qIG1heCBzZWxlY3RlZCAqLworICAgIGRlZmF1bHQ6CisgICAgICAvKiBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbiBzdGF0ZXMgdGhhdDoKKyAgICAgICAgc2V0dGluZyB0aGUgbWF4aW11bSB0byAwIHdpbGwgZW5hYmxlCisgICAgICAgIHByb3RvY29sIHZlcnNpb25zIHVwIHRvIHRoZSBoaWdoZXN0IHZlcnNpb24KKyAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBsaWJyYXJ5ICovCisgICAgICBvc3NsX3NzbF92ZXJzaW9uX21heCA9IDA7CisgICAgICBicmVhazsKKyAgfQorCisgIGlmKCFTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihjdHgsIG9zc2xfc3NsX3ZlcnNpb25fbWF4KSkgeworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9JU19CT1JJTkdTU0wKK3R5cGVkZWYgdWludDMyX3QgY3R4X29wdGlvbl90OworI2Vsc2UKK3R5cGVkZWYgbG9uZyBjdHhfb3B0aW9uX3Q7CisjZW5kaWYKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDEwMDAwMEwpIC8qIDEuMS4wICovCitzdGF0aWMgQ1VSTGNvZGUKK3NldF9zc2xfdmVyc2lvbl9taW5fbWF4X2xlZ2FjeShjdHhfb3B0aW9uX3QgKmN0eF9vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewogI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDAwMTAwRkwpIHx8ICFkZWZpbmVkKFRMUzFfM19WRVJTSU9OKQogICAvKiBjb252b2x1dGVkICNpZiBjb25kaXRpb24ganVzdCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyBvbiB1bnVzZWQKQEAgLTIxNzMsNyArMjMyOSw3IEBACiAjaWZkZWYgVExTMV8zX1ZFUlNJT04KICAgICB7CiAgICAgICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgICAgIFNTTF9DVFhfc2V0X21heF9wcm90b192ZXJzaW9uKEJBQ0tFTkQtPmN0eCwgVExTMV8zX1ZFUlNJT04pOworICAgICAgU1NMX0NUWF9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oYmFja2VuZC0+Y3R4LCBUTFMxXzNfVkVSU0lPTik7CiAgICAgICAqY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzI7CiAgICAgfQogI2Vsc2UKQEAgLTIyMzAsNiArMjM4Niw3IEBACiAgIH0KICAgcmV0dXJuIENVUkxFX09LOwogfQorI2VuZGlmCiAKIC8qIFRoZSAibmV3IHNlc3Npb24iIGNhbGxiYWNrIG11c3QgcmV0dXJuIHplcm8gaWYgdGhlIHNlc3Npb24gY2FuIGJlIHJlbW92ZWQKICAqIG9yIG5vbi16ZXJvIGlmIHRoZSBzZXNzaW9uIGhhcyBiZWVuIHB1dCBpbnRvIHRoZSBzZXNzaW9uIGNhY2hlLgpAQCAtMjI5NiwzMCArMjQ1Myw0MyBAQAogICBYNTA5X0xPT0tVUCAqbG9va3VwID0gTlVMTDsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBsb25nIGN0eF9vcHRpb25zID0gMDsKKyAgY3R4X29wdGlvbl90IGN0eF9vcHRpb25zID0gMDsKKwogI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKICAgYm9vbCBzbmk7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKICAgICBjb25uLT5ob3N0Lm5hbWU7CisjZWxzZQorICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisjZW5kaWYKKwogI2lmZGVmIEVOQUJMRV9JUFY2CiAgIHN0cnVjdCBpbjZfYWRkciBhZGRyOwogI2Vsc2UKICAgc3RydWN0IGluX2FkZHIgYWRkcjsKICNlbmRpZgogI2VuZGlmCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KICAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbHNlCisgIGxvbmcgKiBjb25zdCBjZXJ0dmVyaWZ5cmVzdWx0ID0gJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbmRpZgogICBjb25zdCBsb25nIGludCBzc2xfdmVyc2lvbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKICNpZmRlZiBVU0VfVExTX1NSUAogICBjb25zdCBlbnVtIENVUkxfVExTQVVUSCBzc2xfYXV0aHR5cGUgPSBTU0xfU0VUX09QVElPTihhdXRodHlwZSk7CiAjZW5kaWYKICAgY2hhciAqIGNvbnN0IHNzbF9jZXJ0ID0gU1NMX1NFVF9PUFRJT04oY2VydCk7CisgIGNvbnN0IHN0cnVjdCBjdXJsX2Jsb2IgKnNzbF9jZXJ0X2Jsb2IgPSBTU0xfU0VUX09QVElPTihjZXJ0X2Jsb2IpOwogICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NlcnRfdHlwZSA9IFNTTF9TRVRfT1BUSU9OKGNlcnRfdHlwZSk7CiAgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7CiAgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FwYXRoID0gU1NMX0NPTk5fQ09ORklHKENBcGF0aCk7CiAgIGNvbnN0IGJvb2wgdmVyaWZ5cGVlciA9IFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKTsKICAgY29uc3QgY2hhciAqIGNvbnN0IHNzbF9jcmxmaWxlID0gU1NMX1NFVF9PUFRJT04oQ1JMZmlsZSk7CiAgIGNoYXIgZXJyb3JfYnVmZmVyWzI1Nl07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgYm9vbCBpbXBvcnRlZF9uYXRpdmVfY2EgPSBmYWxzZTsKIAogICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8xID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOwogCkBAIC0yMzc4LDI1ICsyNTQ4LDI1IEBACiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CiAKLSAgaWYoQkFDS0VORC0+Y3R4KQotICAgIFNTTF9DVFhfZnJlZShCQUNLRU5ELT5jdHgpOwotICBCQUNLRU5ELT5jdHggPSBTU0xfQ1RYX25ldyhyZXFfbWV0aG9kKTsKKyAgaWYoYmFja2VuZC0+Y3R4KQorICAgIFNTTF9DVFhfZnJlZShiYWNrZW5kLT5jdHgpOworICBiYWNrZW5kLT5jdHggPSBTU0xfQ1RYX25ldyhyZXFfbWV0aG9kKTsKIAotICBpZighQkFDS0VORC0+Y3R4KSB7CisgIGlmKCFiYWNrZW5kLT5jdHgpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0OiAlcyIsCiAgICAgICAgICAgb3NzbF9zdHJlcnJvcihFUlJfcGVla19lcnJvcigpLCBlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpKSk7CiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIH0KIAogI2lmZGVmIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUwotICBTU0xfQ1RYX3NldF9tb2RlKEJBQ0tFTkQtPmN0eCwgU1NMX01PREVfUkVMRUFTRV9CVUZGRVJTKTsKKyAgU1NMX0NUWF9zZXRfbW9kZShiYWNrZW5kLT5jdHgsIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUyk7CiAjZW5kaWYKIAogI2lmZGVmIFNTTF9DVFJMX1NFVF9NU0dfQ0FMTEJBQ0sKICAgaWYoZGF0YS0+c2V0LmZkZWJ1ZyAmJiBkYXRhLT5zZXQudmVyYm9zZSkgewogICAgIC8qIHRoZSBTU0wgdHJhY2UgY2FsbGJhY2sgaXMgb25seSB1c2VkIGZvciB2ZXJib3NlIGxvZ2dpbmcgKi8KLSAgICBTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2soQkFDS0VORC0+Y3R4LCBzc2xfdGxzX3RyYWNlKTsKLSAgICBTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2tfYXJnKEJBQ0tFTkQtPmN0eCwgY29ubik7CisgICAgU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrKGJhY2tlbmQtPmN0eCwgc3NsX3Rsc190cmFjZSk7CisgICAgU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrX2FyZyhiYWNrZW5kLT5jdHgsIGNvbm4pOwogICB9CiAjZW5kaWYKIApAQCAtMjQ1OSw1NSArMjYyOSw3MyBAQAogI2VuZGlmCiAKICAgc3dpdGNoKHNzbF92ZXJzaW9uKSB7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MjsKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjE7Ci0jaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDBGTAotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8xOwotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8yOwotI2lmZGVmIFRMUzFfM19WRVJTSU9OCi0gICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzM7CisgICAgLyogIi0tc3NsdjIiIG9wdGlvbiBtZWFucyBTU0x2MiBvbmx5LCBkaXNhYmxlIGFsbCBvdGhlcnMgKi8KKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMIC8qIDEuMS4wICovCisgICAgICBTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbihiYWNrZW5kLT5jdHgsIFNTTDJfVkVSU0lPTik7CisgICAgICBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihiYWNrZW5kLT5jdHgsIFNTTDJfVkVSU0lPTik7CisjZWxzZQorICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYzOworICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxOworIyAgaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDBGTAorICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzE7CisgICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKKyMgICAgaWZkZWYgVExTMV8zX1ZFUlNJT04KKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8zOworIyAgICBlbmRpZgorIyAgZW5kaWYKICNlbmRpZgotI2VuZGlmCi0gICAgYnJlYWs7CisgICAgICBicmVhazsKIAotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKLSAgICAvKiBhc2tpbmcgZm9yIGFueSBUTFMgdmVyc2lvbiBhcyB0aGUgbWluaW11bSwgbWVhbnMgbm8gU1NMIHZlcnNpb25zCi0gICAgICAgYWxsb3dlZCAqLwotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MjsKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjM7Ci0gICAgcmVzdWx0ID0gc2V0X3NzbF92ZXJzaW9uX21pbl9tYXgoJmN0eF9vcHRpb25zLCBjb25uLCBzb2NraW5kZXgpOwotICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykKLSAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIGJyZWFrOwotCi0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYyOgotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MzsKLSAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjE7Ci0jaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDBGTAotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8xOwotICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8yOwotI2lmZGVmIFRMUzFfM19WRVJTSU9OCi0gICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzM7CisgICAgLyogIi0tc3NsdjMiIG9wdGlvbiBtZWFucyBTU0x2MyBvbmx5LCBkaXNhYmxlIGFsbCBvdGhlcnMgKi8KKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMIC8qIDEuMS4wICovCisgICAgICBTU0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbihiYWNrZW5kLT5jdHgsIFNTTDNfVkVSU0lPTik7CisgICAgICBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihiYWNrZW5kLT5jdHgsIFNTTDNfVkVSU0lPTik7CisjZWxzZQorICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYyOworICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxOworIyAgaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDBGTAorICAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzE7CisgICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKKyMgICAgaWZkZWYgVExTMV8zX1ZFUlNJT04KKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8zOworIyAgICBlbmRpZgorIyAgZW5kaWYKICNlbmRpZgotI2VuZGlmCi0gICAgYnJlYWs7CisgICAgICBicmVhazsKIAotICBkZWZhdWx0OgotICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIC8qICItLXRsc3Y8eC55PiIgb3B0aW9ucyBtZWFuIFRMUyA+PSB2ZXJzaW9uIDx4Lnk+ICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MTogLyogVExTID49IHZlcnNpb24gMS4wICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDogLyogVExTID49IHZlcnNpb24gMS4wICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMTogLyogVExTID49IHZlcnNpb24gMS4xICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjogLyogVExTID49IHZlcnNpb24gMS4yICovCisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzogLyogVExTID49IHZlcnNpb24gMS4zICovCisgICAgICAvKiBhc2tpbmcgZm9yIGFueSBUTFMgdmVyc2lvbiBhcyB0aGUgbWluaW11bSwgbWVhbnMgbm8gU1NMIHZlcnNpb25zCisgICAgICAgIGFsbG93ZWQgKi8KKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MjsKKyAgICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MzsKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMKSAvKiAxLjEuMCAqLworICAgICAgcmVzdWx0ID0gc2V0X3NzbF92ZXJzaW9uX21pbl9tYXgoYmFja2VuZC0+Y3R4LCBjb25uKTsKKyNlbHNlCisgICAgICByZXN1bHQgPSBzZXRfc3NsX3ZlcnNpb25fbWluX21heF9sZWdhY3koJmN0eF9vcHRpb25zLCBjb25uLCBzb2NraW5kZXgpOworI2VuZGlmCisgICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CiAKLSAgU1NMX0NUWF9zZXRfb3B0aW9ucyhCQUNLRU5ELT5jdHgsIGN0eF9vcHRpb25zKTsKKyAgU1NMX0NUWF9zZXRfb3B0aW9ucyhiYWNrZW5kLT5jdHgsIGN0eF9vcHRpb25zKTsKIAogI2lmZGVmIEhBU19OUE4KICAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX25wbikKLSAgICBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihCQUNLRU5ELT5jdHgsIHNlbGVjdF9uZXh0X3Byb3RvX2NiLCBjb25uKTsKKyAgICBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihiYWNrZW5kLT5jdHgsIHNlbGVjdF9uZXh0X3Byb3RvX2NiLCBjb25uKTsKICNlbmRpZgogCiAjaWZkZWYgSEFTX0FMUE4KQEAgLTI1MTYsOCArMjcwNCwxMSBAQAogICAgIHVuc2lnbmVkIGNoYXIgcHJvdG9jb2xzWzEyOF07CiAKICNpZmRlZiBVU0VfTkdIVFRQMgotICAgIGlmKGRhdGEtPnNldC5odHRwdmVyc2lvbiA+PSBDVVJMX0hUVFBfVkVSU0lPTl8yICYmCi0gICAgICAgKCFTU0xfSVNfUFJPWFkoKSB8fCAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkpKSB7CisgICAgaWYoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID49IENVUkxfSFRUUF9WRVJTSU9OXzIKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgICAgICAgJiYgKCFTU0xfSVNfUFJPWFkoKSB8fCAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkpCisjZW5kaWYKKyAgICAgICkgewogICAgICAgcHJvdG9jb2xzW2N1cisrXSA9IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU47CiAKICAgICAgIG1lbWNweSgmcHJvdG9jb2xzW2N1cl0sIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRCwKQEAgLTI1MzUsMTQgKzI3MjYsMzcgQEAKICAgICAvKiBleHBlY3RzIGxlbmd0aCBwcmVmaXhlZCBwcmVmZXJlbmNlIG9yZGVyZWQgbGlzdCBvZiBwcm90b2NvbHMgaW4gd2lyZQogICAgICAqIGZvcm1hdAogICAgICAqLwotICAgIFNTTF9DVFhfc2V0X2FscG5fcHJvdG9zKEJBQ0tFTkQtPmN0eCwgcHJvdG9jb2xzLCBjdXIpOworICAgIFNTTF9DVFhfc2V0X2FscG5fcHJvdG9zKGJhY2tlbmQtPmN0eCwgcHJvdG9jb2xzLCBjdXIpOwogICB9CiAjZW5kaWYKIAotICBpZihzc2xfY2VydCB8fCBzc2xfY2VydF90eXBlKSB7Ci0gICAgaWYoIWNlcnRfc3R1ZmYoY29ubiwgQkFDS0VORC0+Y3R4LCBzc2xfY2VydCwgc3NsX2NlcnRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpLCBTU0xfU0VUX09QVElPTihrZXlfdHlwZSksCi0gICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpKSB7CisgIGlmKHNzbF9jZXJ0IHx8IHNzbF9jZXJ0X2Jsb2IgfHwgc3NsX2NlcnRfdHlwZSkgeworICAgIEJJTyAqc3NsX2NlcnRfYmlvID0gTlVMTDsKKyAgICBCSU8gKnNzbF9rZXlfYmlvID0gTlVMTDsKKyAgICBpbnQgcmVzdWx0X2NlcnRfc3R1ZmY7CisgICAgaWYoc3NsX2NlcnRfYmxvYikgeworICAgICAgLyogdGhlIHR5cGVjYXN0IG9mIGJsb2ItPmxlbiBpcyBmaW5lIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gbmV2ZXIgYmUKKyAgICAgICAgIGxhcmdlciB0aGFuIENVUkxfTUFYX0lOUFVUX0xFTkdUSCAqLworICAgICAgc3NsX2NlcnRfYmlvID0gQklPX25ld19tZW1fYnVmKHNzbF9jZXJ0X2Jsb2ItPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzc2xfY2VydF9ibG9iLT5sZW4pOworICAgICAgaWYoIXNzbF9jZXJ0X2JpbykKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICB9CisgICAgaWYoU1NMX1NFVF9PUFRJT04oa2V5X2Jsb2IpKSB7CisgICAgICBzc2xfa2V5X2JpbyA9IEJJT19uZXdfbWVtX2J1ZihTU0xfU0VUX09QVElPTihrZXlfYmxvYiktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KVNTTF9TRVRfT1BUSU9OKGtleV9ibG9iKS0+bGVuKTsKKyAgICAgIGlmKCFzc2xfa2V5X2JpbykKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICB9CisgICAgcmVzdWx0X2NlcnRfc3R1ZmYgPSBjZXJ0X3N0dWZmKGNvbm4sIGJhY2tlbmQtPmN0eCwKKyAgICAgICAgICAgICAgICAgICBzc2xfY2VydCwgc3NsX2NlcnRfYmlvLCBzc2xfY2VydF90eXBlLAorICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSksIHNzbF9rZXlfYmlvLAorICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleV90eXBlKSwgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpOworICAgIGlmKHNzbF9jZXJ0X2JpbykKKyAgICAgIEJJT19mcmVlKHNzbF9jZXJ0X2Jpbyk7CisgICAgaWYoc3NsX2tleV9iaW8pCisgICAgICBCSU9fZnJlZShzc2xfa2V5X2Jpbyk7CisgICAgaWYoIXJlc3VsdF9jZXJ0X3N0dWZmKSB7CiAgICAgICAvKiBmYWlsZigpIGlzIGFscmVhZHkgZG9uZSBpbiBjZXJ0X3N0dWZmKCkgKi8KICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CiAgICAgfQpAQCAtMjU1Miw3ICsyNzY2LDcgQEAKICAgaWYoIWNpcGhlcnMpCiAgICAgY2lwaGVycyA9IChjaGFyICopREVGQVVMVF9DSVBIRVJfU0VMRUNUSU9OOwogICBpZihjaXBoZXJzKSB7Ci0gICAgaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KEJBQ0tFTkQtPmN0eCwgY2lwaGVycykpIHsKKyAgICBpZighU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoYmFja2VuZC0+Y3R4LCBjaXBoZXJzKSkgewogICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCBzZXR0aW5nIGNpcGhlciBsaXN0OiAlcyIsIGNpcGhlcnMpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DSVBIRVI7CiAgICAgfQpAQCAtMjU2Myw3ICsyNzc3LDcgQEAKICAgewogICAgIGNoYXIgKmNpcGhlcnMxMyA9IFNTTF9DT05OX0NPTkZJRyhjaXBoZXJfbGlzdDEzKTsKICAgICBpZihjaXBoZXJzMTMpIHsKLSAgICAgIGlmKCFTU0xfQ1RYX3NldF9jaXBoZXJzdWl0ZXMoQkFDS0VORC0+Y3R4LCBjaXBoZXJzMTMpKSB7CisgICAgICBpZighU1NMX0NUWF9zZXRfY2lwaGVyc3VpdGVzKGJhY2tlbmQtPmN0eCwgY2lwaGVyczEzKSkgewogICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHNldHRpbmcgVExTIDEuMyBjaXBoZXIgc3VpdGU6ICVzIiwgY2lwaGVyczEzKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DSVBIRVI7CiAgICAgICB9CkBAIC0yNTc0LDcgKzI3ODgsNyBAQAogCiAjaWZkZWYgSEFWRV9TU0xfQ1RYX1NFVF9QT1NUX0hBTkRTSEFLRV9BVVRICiAgIC8qIE9wZW5TU0wgMS4xLjEgcmVxdWlyZXMgY2xpZW50cyB0byBvcHQtaW4gZm9yIFBIQSAqLwotICBTU0xfQ1RYX3NldF9wb3N0X2hhbmRzaGFrZV9hdXRoKEJBQ0tFTkQtPmN0eCwgMSk7CisgIFNTTF9DVFhfc2V0X3Bvc3RfaGFuZHNoYWtlX2F1dGgoYmFja2VuZC0+Y3R4LCAxKTsKICNlbmRpZgogCiAjaWZkZWYgVVNFX1RMU19TUlAKQEAgLTI1ODMsMTggKzI3OTcsMTggQEAKIAogICAgIGluZm9mKGRhdGEsICJVc2luZyBUTFMtU1JQIHVzZXJuYW1lOiAlc1xuIiwgc3NsX3VzZXJuYW1lKTsKIAotICAgIGlmKCFTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWUoQkFDS0VORC0+Y3R4LCBzc2xfdXNlcm5hbWUpKSB7CisgICAgaWYoIVNTTF9DVFhfc2V0X3NycF91c2VybmFtZShiYWNrZW5kLT5jdHgsIHNzbF91c2VybmFtZSkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gc2V0IFNSUCB1c2VyIG5hbWUiKTsKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgfQotICAgIGlmKCFTU0xfQ1RYX3NldF9zcnBfcGFzc3dvcmQoQkFDS0VORC0+Y3R4LCBTU0xfU0VUX09QVElPTihwYXNzd29yZCkpKSB7CisgICAgaWYoIVNTTF9DVFhfc2V0X3NycF9wYXNzd29yZChiYWNrZW5kLT5jdHgsIFNTTF9TRVRfT1BUSU9OKHBhc3N3b3JkKSkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgc2V0dGluZyBTUlAgcGFzc3dvcmQiKTsKICAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CiAgICAgfQogICAgIGlmKCFTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpKSB7CiAgICAgICBpbmZvZihkYXRhLCAiU2V0dGluZyBjaXBoZXIgbGlzdCBTUlBcbiIpOwogCi0gICAgICBpZighU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoQkFDS0VORC0+Y3R4LCAiU1JQIikpIHsKKyAgICAgIGlmKCFTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChiYWNrZW5kLT5jdHgsICJTUlAiKSkgewogICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHNldHRpbmcgU1JQIGNpcGhlciBsaXN0Iik7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0lQSEVSOwogICAgICAgfQpAQCAtMjYwMiwxMSArMjgxNiwxODYgQEAKICAgfQogI2VuZGlmCiAKKworI2lmIGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKKyAgLyogSW1wb3J0IGNlcnRpZmljYXRlcyBmcm9tIHRoZSBXaW5kb3dzIHJvb3QgY2VydGlmaWNhdGUgc3RvcmUgaWYgcmVxdWVzdGVkLgorICAgICBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85NTA3MTg0LworICAgICBodHRwczovL2dpdGh1Yi5jb20vZDN4MHIvU0FDSy9ibG9iL21hc3Rlci9zcmMvbmV0bGliL3NzbF9sYXllci5jI0wxMDM3CisgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MjgwICovCisgIGlmKChTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikgfHwgU1NMX0NPTk5fQ09ORklHKHZlcmlmeWhvc3QpKSAmJgorICAgICAoU1NMX1NFVF9PUFRJT04obmF0aXZlX2NhX3N0b3JlKSkpIHsKKyAgICBYNTA5X1NUT1JFICpzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoYmFja2VuZC0+Y3R4KTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IENlcnRPcGVuU3lzdGVtU3RvcmVBKChIQ1JZUFRQUk9WX0xFR0FDWSlOVUxMLCAiUk9PVCIpOworCisgICAgaWYoaFN0b3JlKSB7CisgICAgICBQQ0NFUlRfQ09OVEVYVCBwQ29udGV4dCA9IE5VTEw7CisgICAgICAvKiBUaGUgYXJyYXkgb2YgZW5oYW5jZWQga2V5IHVzYWdlIE9JRHMgd2lsbCB2YXJ5IHBlciBjZXJ0aWZpY2F0ZSBhbmQgaXMKKyAgICAgICAgIGRlY2xhcmVkIG91dHNpZGUgb2YgdGhlIGxvb3Agc28gdGhhdCByYXRoZXIgdGhhbiBtYWxsb2MvZnJlZSBlYWNoCisgICAgICAgICBpdGVyYXRpb24gd2UgY2FuIGdyb3cgaXQgd2l0aCByZWFsbG9jLCB3aGVuIG5lY2Vzc2FyeS4gKi8KKyAgICAgIENFUlRfRU5IS0VZX1VTQUdFICplbmhrZXlfdXNhZ2UgPSBOVUxMOworICAgICAgRFdPUkQgZW5oa2V5X3VzYWdlX3NpemUgPSAwOworCisgICAgICAvKiBUaGlzIGxvb3AgbWFrZXMgYSBiZXN0IGVmZm9ydCB0byBpbXBvcnQgYWxsIHZhbGlkIGNlcnRpZmljYXRlcyBmcm9tCisgICAgICAgICB0aGUgTVMgcm9vdCBzdG9yZS4gSWYgYSBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgaW1wb3J0ZWQgaXQgaXMgc2tpcHBlZC4KKyAgICAgICAgICdyZXN1bHQnIGlzIHVzZWQgdG8gc3RvcmUgb25seSBoYXJkLWZhaWwgY29uZGl0aW9ucyAoc3VjaCBhcyBvdXQgb2YKKyAgICAgICAgIG1lbW9yeSkgdGhhdCBjYXVzZSBhbiBlYXJseSBicmVhay4gKi8KKyAgICAgIHJlc3VsdCA9IENVUkxFX09LOworICAgICAgZm9yKDs7KSB7CisgICAgICAgIFg1MDkgKng1MDk7CisgICAgICAgIEZJTEVUSU1FIG5vdzsKKyAgICAgICAgQllURSBrZXlfdXNhZ2VbMl07CisgICAgICAgIERXT1JEIHJlcV9zaXplOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmNvZGVkX2NlcnQ7CisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAgICAgICBjaGFyIGNlcnRfbmFtZVsyNTZdOworI2VuZGlmCisKKyAgICAgICAgcENvbnRleHQgPSBDZXJ0RW51bUNlcnRpZmljYXRlc0luU3RvcmUoaFN0b3JlLCBwQ29udGV4dCk7CisgICAgICAgIGlmKCFwQ29udGV4dCkKKyAgICAgICAgICBicmVhazsKKworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgICAgICAgaWYoIUNlcnRHZXROYW1lU3RyaW5nQShwQ29udGV4dCwgQ0VSVF9OQU1FX1NJTVBMRV9ESVNQTEFZX1RZUEUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgY2VydF9uYW1lLCBzaXplb2YoY2VydF9uYW1lKSkpIHsKKyAgICAgICAgICBzdHJjcHkoY2VydF9uYW1lLCAiVW5rbm93biIpOworICAgICAgICB9CisgICAgICAgIGluZm9mKGRhdGEsICJTU0w6IENoZWNraW5nIGNlcnQgXCIlc1wiXG4iLCBjZXJ0X25hbWUpOworI2VuZGlmCisKKyAgICAgICAgZW5jb2RlZF9jZXJ0ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwQ29udGV4dC0+cGJDZXJ0RW5jb2RlZDsKKyAgICAgICAgaWYoIWVuY29kZWRfY2VydCkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmbm93KTsKKyAgICAgICAgaWYoQ29tcGFyZUZpbGVUaW1lKCZwQ29udGV4dC0+cENlcnRJbmZvLT5Ob3RCZWZvcmUsICZub3cpID4gMCB8fAorICAgICAgICAgICBDb21wYXJlRmlsZVRpbWUoJm5vdywgJnBDb250ZXh0LT5wQ2VydEluZm8tPk5vdEFmdGVyKSA+IDApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogSWYga2V5IHVzYWdlIGV4aXN0cyBjaGVjayBmb3Igc2lnbmluZyBhdHRyaWJ1dGUgKi8KKyAgICAgICAgaWYoQ2VydEdldEludGVuZGVkS2V5VXNhZ2UocENvbnRleHQtPmR3Q2VydEVuY29kaW5nVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENvbnRleHQtPnBDZXJ0SW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X3VzYWdlLCBzaXplb2Yoa2V5X3VzYWdlKSkpIHsKKyAgICAgICAgICBpZighKGtleV91c2FnZVswXSAmIENFUlRfS0VZX0NFUlRfU0lHTl9LRVlfVVNBR0UpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihHZXRMYXN0RXJyb3IoKSkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBJZiBlbmhhbmNlZCBrZXkgdXNhZ2UgZXhpc3RzIGNoZWNrIGZvciBzZXJ2ZXIgYXV0aCBhdHRyaWJ1dGUuCisgICAgICAgICAqCisgICAgICAgICAqIE5vdGUgIkluIGEgTWljcm9zb2Z0IGVudmlyb25tZW50LCBhIGNlcnRpZmljYXRlIG1pZ2h0IGFsc28gaGF2ZSBFS1UKKyAgICAgICAgICogZXh0ZW5kZWQgcHJvcGVydGllcyB0aGF0IHNwZWNpZnkgdmFsaWQgdXNlcyBmb3IgdGhlIGNlcnRpZmljYXRlLiIKKyAgICAgICAgICogVGhlIGNhbGwgYmVsb3cgY2hlY2tzIGJvdGgsIGFuZCBiZWhhdmlvciB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMKKyAgICAgICAgICogZm91bmQuIEZvciBtb3JlIGRldGFpbHMgc2VlIENlcnRHZXRFbmhhbmNlZEtleVVzYWdlIGRvYy4KKyAgICAgICAgICovCisgICAgICAgIGlmKENlcnRHZXRFbmhhbmNlZEtleVVzYWdlKHBDb250ZXh0LCAwLCBOVUxMLCAmcmVxX3NpemUpKSB7CisgICAgICAgICAgaWYocmVxX3NpemUgJiYgcmVxX3NpemUgPiBlbmhrZXlfdXNhZ2Vfc2l6ZSkgeworICAgICAgICAgICAgdm9pZCAqdG1wID0gcmVhbGxvYyhlbmhrZXlfdXNhZ2UsIHJlcV9zaXplKTsKKworICAgICAgICAgICAgaWYoIXRtcCkgeworICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgZm9yIE9JRCBsaXN0Iik7CisgICAgICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbmhrZXlfdXNhZ2UgPSAoQ0VSVF9FTkhLRVlfVVNBR0UgKil0bXA7CisgICAgICAgICAgICBlbmhrZXlfdXNhZ2Vfc2l6ZSA9IHJlcV9zaXplOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmKENlcnRHZXRFbmhhbmNlZEtleVVzYWdlKHBDb250ZXh0LCAwLCBlbmhrZXlfdXNhZ2UsICZyZXFfc2l6ZSkpIHsKKyAgICAgICAgICAgIGlmKCFlbmhrZXlfdXNhZ2UtPmNVc2FnZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgLyogIklmIEdldExhc3RFcnJvciByZXR1cm5zIENSWVBUX0VfTk9UX0ZPVU5ELCB0aGUgY2VydGlmaWNhdGUgaXMKKyAgICAgICAgICAgICAgICAgZ29vZCBmb3IgYWxsIHVzZXMuIElmIGl0IHJldHVybnMgemVybywgdGhlIGNlcnRpZmljYXRlIGhhcyBubworICAgICAgICAgICAgICAgICB2YWxpZCB1c2VzLiIgKi8KKyAgICAgICAgICAgICAgaWYoR2V0TGFzdEVycm9yKCkgIT0gQ1JZUFRfRV9OT1RfRk9VTkQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgRFdPUkQgaTsKKyAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGVuaGtleV91c2FnZS0+Y1VzYWdlSWRlbnRpZmllcjsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYoIXN0cmNtcCgiMS4zLjYuMS41LjUuNy4zLjEiIC8qIE9JRCBzZXJ2ZXIgYXV0aCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuaGtleV91c2FnZS0+cmdwc3pVc2FnZUlkZW50aWZpZXJbaV0pKSB7CisgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBpZighZm91bmQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB4NTA5ID0gZDJpX1g1MDkoTlVMTCwgJmVuY29kZWRfY2VydCwgcENvbnRleHQtPmNiQ2VydEVuY29kZWQpOworICAgICAgICBpZigheDUwOSkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBUcnkgdG8gaW1wb3J0IHRoZSBjZXJ0aWZpY2F0ZS4gVGhpcyBtYXkgZmFpbCBmb3IgbGVnaXRpbWF0ZSByZWFzb25zCisgICAgICAgICAgIHN1Y2ggYXMgZHVwbGljYXRlIGNlcnRpZmljYXRlLCB3aGljaCBpcyBhbGxvd2VkIGJ5IE1TIGJ1dCBub3QKKyAgICAgICAgICAgT3BlblNTTC4gKi8KKyAgICAgICAgaWYoWDUwOV9TVE9SRV9hZGRfY2VydChzdG9yZSwgeDUwOSkgPT0gMSkgeworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgICAgICAgICBpbmZvZihkYXRhLCAiU1NMOiBJbXBvcnRlZCBjZXJ0IFwiJXNcIlxuIiwgY2VydF9uYW1lKTsKKyNlbmRpZgorICAgICAgICAgIGltcG9ydGVkX25hdGl2ZV9jYSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgWDUwOV9mcmVlKHg1MDkpOworICAgICAgfQorCisgICAgICBmcmVlKGVuaGtleV91c2FnZSk7CisgICAgICBDZXJ0RnJlZUNlcnRpZmljYXRlQ29udGV4dChwQ29udGV4dCk7CisgICAgICBDZXJ0Q2xvc2VTdG9yZShoU3RvcmUsIDApOworCisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGlmKGltcG9ydGVkX25hdGl2ZV9jYSkKKyAgICAgIGluZm9mKGRhdGEsICJzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgd2luZG93cyBjYSBzdG9yZVxuIik7CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgImVycm9yIGltcG9ydGluZyB3aW5kb3dzIGNhIHN0b3JlLCBjb250aW51aW5nIGFueXdheVxuIik7CisgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTUFKT1IpICYmIChPUEVOU1NMX1ZFUlNJT05fTUFKT1IgPj0gMykKKyAgLyogT3BlblNTTCAzLjAuMCBoYXMgZGVwcmVjYXRlZCBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyAqLworICB7CisgICAgaWYoc3NsX2NhZmlsZSkgeworICAgICAgaWYoIVNTTF9DVFhfbG9hZF92ZXJpZnlfZmlsZShiYWNrZW5kLT5jdHgsIHNzbF9jYWZpbGUpKSB7CisgICAgICAgIGlmKHZlcmlmeXBlZXIpIHsKKyAgICAgICAgICAvKiBGYWlsIGlmIHdlIGluc2lzdCBvbiBzdWNjZXNzZnVsbHkgdmVyaWZ5aW5nIHRoZSBzZXJ2ZXIuICovCisgICAgICAgICAgZmFpbGYoZGF0YSwgImVycm9yIHNldHRpbmcgY2VydGlmaWNhdGUgZmlsZTogJXMiLCBzc2xfY2FmaWxlKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgICB9CisgICAgICAgIC8qIENvbnRpbnVlIHdpdGggYSB3YXJuaW5nIGlmIG5vIGNlcnRpZmljYXRlIHZlcmlmIGlzIHJlcXVpcmVkLiAqLworICAgICAgICBpbmZvZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSBmaWxlLCBjb250aW51aW5nIGFueXdheVxuIik7CisgICAgICB9CisgICAgICBpbmZvZihkYXRhLCAiICBDQWZpbGU6ICVzXG4iLCBzc2xfY2FmaWxlKTsKKyAgICB9CisgICAgaWYoc3NsX2NhcGF0aCkgeworICAgICAgaWYoIVNTTF9DVFhfbG9hZF92ZXJpZnlfZGlyKGJhY2tlbmQtPmN0eCwgc3NsX2NhcGF0aCkpIHsKKyAgICAgICAgaWYodmVyaWZ5cGVlcikgeworICAgICAgICAgIC8qIEZhaWwgaWYgd2UgaW5zaXN0IG9uIHN1Y2Nlc3NmdWxseSB2ZXJpZnlpbmcgdGhlIHNlcnZlci4gKi8KKyAgICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSBwYXRoOiAlcyIsIHNzbF9jYXBhdGgpOworICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICAgIH0KKyAgICAgICAgLyogQ29udGludWUgd2l0aCBhIHdhcm5pbmcgaWYgbm8gY2VydGlmaWNhdGUgdmVyaWYgaXMgcmVxdWlyZWQuICovCisgICAgICAgIGluZm9mKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHBhdGgsIGNvbnRpbnVpbmcgYW55d2F5XG4iKTsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICIgIENBcGF0aDogJXNcbiIsIHNzbF9jYXBhdGgpOworICAgIH0KKyAgfQorI2Vsc2UKICAgaWYoc3NsX2NhZmlsZSB8fCBzc2xfY2FwYXRoKSB7CiAgICAgLyogdGVsbCBTU0wgd2hlcmUgdG8gZmluZCBDQSBjZXJ0aWZpY2F0ZXMgdGhhdCBhcmUgdXNlZCB0byB2ZXJpZnkKICAgICAgICB0aGUgc2VydmVycyBjZXJ0aWZpY2F0ZS4gKi8KLSAgICBpZighU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQkFDS0VORC0+Y3R4LCBzc2xfY2FmaWxlLCBzc2xfY2FwYXRoKSkgewotICAgICAgaWYodmVyaWZ5cGVlcikgeworICAgIGlmKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhiYWNrZW5kLT5jdHgsIHNzbF9jYWZpbGUsIHNzbF9jYXBhdGgpKSB7CisgICAgICBpZih2ZXJpZnlwZWVyICYmICFpbXBvcnRlZF9uYXRpdmVfY2EpIHsKICAgICAgICAgLyogRmFpbCBpZiB3ZSBpbnNpc3Qgb24gc3VjY2Vzc2Z1bGx5IHZlcmlmeWluZyB0aGUgc2VydmVyLiAqLwogICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgogICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4gIENBcGF0aDogJXMiLApAQCAtMjYxNCw3ICszMDAzLDcgQEAKICAgICAgICAgICAgICAgc3NsX2NhcGF0aCA/IHNzbF9jYXBhdGggOiAibm9uZSIpOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgfQotICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbgorICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uCiAgICAgICAgICBpcyByZXF1aXJlZC4gKi8KICAgICAgIGluZm9mKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnMsIgogICAgICAgICAgICAgIiBjb250aW51aW5nIGFueXdheTpcbiIpOwpAQCAtMjYyOSwxOCArMzAxOCwyMCBAQAogICAgICAgICAgIHNzbF9jYWZpbGUgPyBzc2xfY2FmaWxlIDogIm5vbmUiLAogICAgICAgICAgIHNzbF9jYXBhdGggPyBzc2xfY2FwYXRoIDogIm5vbmUiKTsKICAgfQorI2VuZGlmCisKICNpZmRlZiBDVVJMX0NBX0ZBTExCQUNLCi0gIGVsc2UgaWYodmVyaWZ5cGVlcikgeworICBpZih2ZXJpZnlwZWVyICYmICFzc2xfY2FmaWxlICYmICFzc2xfY2FwYXRoICYmICFpbXBvcnRlZF9uYXRpdmVfY2EpIHsKICAgICAvKiB2ZXJpZnlpbmcgdGhlIHBlZXIgd2l0aG91dCBhbnkgQ0EgY2VydGlmaWNhdGVzIHdvbid0CiAgICAgICAgd29yayBzbyB1c2Ugb3BlbnNzbCdzIGJ1aWx0IGluIGRlZmF1bHQgYXMgZmFsbGJhY2sgKi8KLSAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhCQUNLRU5ELT5jdHgpOworICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKGJhY2tlbmQtPmN0eCk7CiAgIH0KICNlbmRpZgogCiAgIGlmKHNzbF9jcmxmaWxlKSB7CiAgICAgLyogdGVsbCBTU0wgd2hlcmUgdG8gZmluZCBDUkwgZmlsZSB0aGF0IGlzIHVzZWQgdG8gY2hlY2sgY2VydGlmaWNhdGUKICAgICAgKiByZXZvY2F0aW9uICovCi0gICAgbG9va3VwID0gWDUwOV9TVE9SRV9hZGRfbG9va3VwKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoQkFDS0VORC0+Y3R4KSwKKyAgICBsb29rdXAgPSBYNTA5X1NUT1JFX2FkZF9sb29rdXAoU1NMX0NUWF9nZXRfY2VydF9zdG9yZShiYWNrZW5kLT5jdHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9MT09LVVBfZmlsZSgpKTsKICAgICBpZighbG9va3VwIHx8CiAgICAgICAgKCFYNTA5X2xvYWRfY3JsX2ZpbGUobG9va3VwLCBzc2xfY3JsZmlsZSwgWDUwOV9GSUxFVFlQRV9QRU0pKSApIHsKQEAgLTI2NDksMzcgKzMwNDAsNTAgQEAKICAgICB9CiAgICAgLyogRXZlcnl0aGluZyBpcyBmaW5lLiAqLwogICAgIGluZm9mKGRhdGEsICJzdWNjZXNzZnVsbHkgbG9hZCBDUkwgZmlsZTpcbiIpOwotICAgIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoQkFDS0VORC0+Y3R4KSwKKyAgICBYNTA5X1NUT1JFX3NldF9mbGFncyhTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKGJhY2tlbmQtPmN0eCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLfFg1MDlfVl9GTEFHX0NSTF9DSEVDS19BTEwpOwogCiAgICAgaW5mb2YoZGF0YSwgIiAgQ1JMZmlsZTogJXNcbiIsIHNzbF9jcmxmaWxlKTsKICAgfQogCi0gIC8qIFRyeSBidWlsZGluZyBhIGNoYWluIHVzaW5nIGlzc3VlcnMgaW4gdGhlIHRydXN0ZWQgc3RvcmUgZmlyc3QgdG8gYXZvaWQKLSAgcHJvYmxlbXMgd2l0aCBzZXJ2ZXItc2VudCBsZWdhY3kgaW50ZXJtZWRpYXRlcy4KLSAgTmV3ZXIgdmVyc2lvbnMgb2YgT3BlblNTTCBkbyBhbHRlcm5hdGUgY2hhaW4gY2hlY2tpbmcgYnkgZGVmYXVsdCB3aGljaAotICBnaXZlcyB1cyB0aGUgc2FtZSBmaXggd2l0aG91dCBhcyBtdWNoIG9mIGEgcGVyZm9ybWFuY2UgaGl0IChzbGlnaHQpLCBzbyB3ZQotICBwcmVmZXIgdGhhdCBpZiBhdmFpbGFibGUuCi0gIGh0dHBzOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0zNjIxJnVzZXI9Z3Vlc3QmcGFzcz1ndWVzdAotICAqLwotI2lmIGRlZmluZWQoWDUwOV9WX0ZMQUdfVFJVU1RFRF9GSVJTVCkgJiYgIWRlZmluZWQoWDUwOV9WX0ZMQUdfTk9fQUxUX0NIQUlOUykKICAgaWYodmVyaWZ5cGVlcikgewotICAgIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoQkFDS0VORC0+Y3R4KSwKKyAgICAvKiBUcnkgYnVpbGRpbmcgYSBjaGFpbiB1c2luZyBpc3N1ZXJzIGluIHRoZSB0cnVzdGVkIHN0b3JlIGZpcnN0IHRvIGF2b2lkCisgICAgICAgcHJvYmxlbXMgd2l0aCBzZXJ2ZXItc2VudCBsZWdhY3kgaW50ZXJtZWRpYXRlcy4gIE5ld2VyIHZlcnNpb25zIG9mCisgICAgICAgT3BlblNTTCBkbyBhbHRlcm5hdGUgY2hhaW4gY2hlY2tpbmcgYnkgZGVmYXVsdCBidXQgd2UgZG8gbm90IGtub3cgaG93IHRvCisgICAgICAgZGV0ZXJtaW5lIHRoYXQgaW4gYSByZWxpYWJsZSBtYW5uZXIuCisgICAgICAgaHR0cHM6Ly9ydC5vcGVuc3NsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTM2MjEmdXNlcj1ndWVzdCZwYXNzPWd1ZXN0CisgICAgKi8KKyNpZiBkZWZpbmVkKFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QpCisgICAgWDUwOV9TVE9SRV9zZXRfZmxhZ3MoU1NMX0NUWF9nZXRfY2VydF9zdG9yZShiYWNrZW5kLT5jdHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QpOwotICB9CiAjZW5kaWYKKyNpZmRlZiBYNTA5X1ZfRkxBR19QQVJUSUFMX0NIQUlOCisgICAgaWYoIVNTTF9TRVRfT1BUSU9OKG5vX3BhcnRpYWxjaGFpbikgJiYgIXNzbF9jcmxmaWxlKSB7CisgICAgICAvKiBIYXZlIGludGVybWVkaWF0ZSBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHRydXN0IHN0b3JlIGJlIHRyZWF0ZWQgYXMKKyAgICAgICAgIHRydXN0LWFuY2hvcnMsIGluIHRoZSBzYW1lIHdheSBhcyBzZWxmLXNpZ25lZCByb290IENBIGNlcnRpZmljYXRlcworICAgICAgICAgYXJlLiBUaGlzIGFsbG93cyB1c2VycyB0byB2ZXJpZnkgc2VydmVycyB1c2luZyB0aGUgaW50ZXJtZWRpYXRlIGNlcnQKKyAgICAgICAgIG9ubHksIGluc3RlYWQgb2YgbmVlZGluZyB0aGUgd2hvbGUgY2hhaW4uCisKKyAgICAgICAgIER1ZSB0byBPcGVuU1NMIGJ1ZyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNzbC9vcGVuc3NsL2lzc3Vlcy81MDgxIHdlCisgICAgICAgICBjYW5ub3QgZG8gcGFydGlhbCBjaGFpbnMgd2l0aCBDUkwgY2hlY2suCisgICAgICAqLworICAgICAgWDUwOV9TVE9SRV9zZXRfZmxhZ3MoU1NMX0NUWF9nZXRfY2VydF9zdG9yZShiYWNrZW5kLT5jdHgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfUEFSVElBTF9DSEFJTik7CisgICAgfQorI2VuZGlmCisgIH0KIAogICAvKiBTU0wgYWx3YXlzIHRyaWVzIHRvIHZlcmlmeSB0aGUgcGVlciwgdGhpcyBvbmx5IHNheXMgd2hldGhlciBpdCBzaG91bGQKICAgICogZmFpbCB0byBjb25uZWN0IGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMsIG9yIGlmIGl0IHNob3VsZCBjb250aW51ZQogICAgKiBhbnl3YXkuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24gaXMgY2hlY2tlZCB3aXRoCiAgICAqIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGJlbG93LiAqLwotICBTU0xfQ1RYX3NldF92ZXJpZnkoQkFDS0VORC0+Y3R4LAorICBTU0xfQ1RYX3NldF92ZXJpZnkoYmFja2VuZC0+Y3R4LAogICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5cGVlciA/IFNTTF9WRVJJRllfUEVFUiA6IFNTTF9WRVJJRllfTk9ORSwgTlVMTCk7CiAKICAgLyogRW5hYmxlIGxvZ2dpbmcgb2Ygc2VjcmV0cyB0byB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gZW52IFNTTEtFWUxPR0ZJTEUuICovCi0jaWYgZGVmaW5lZChFTkFCTEVfU1NMS0VZTE9HRklMRSkgJiYgZGVmaW5lZChIQVZFX0tFWUxPR19DQUxMQkFDSykKLSAgaWYoa2V5bG9nX2ZpbGVfZnApIHsKLSAgICBTU0xfQ1RYX3NldF9rZXlsb2dfY2FsbGJhY2soQkFDS0VORC0+Y3R4LCBvc3NsX2tleWxvZ19jYWxsYmFjayk7CisjaWZkZWYgSEFWRV9LRVlMT0dfQ0FMTEJBQ0sKKyAgaWYoQ3VybF90bHNfa2V5bG9nX2VuYWJsZWQoKSkgeworICAgIFNTTF9DVFhfc2V0X2tleWxvZ19jYWxsYmFjayhiYWNrZW5kLT5jdHgsIG9zc2xfa2V5bG9nX2NhbGxiYWNrKTsKICAgfQogI2VuZGlmCiAKQEAgLTI2ODcsMTQgKzMwOTEsMTYgQEAKICAgICogY2FsbGJhY2suIFVzZSB0aGUgImV4dGVybmFsIHN0b3JhZ2UiIG1vZGUgdG8gYXZvaWQgdGhhdCBPcGVuU1NMIGNyZWF0ZXMKICAgICogYW4gaW50ZXJuYWwgc2Vzc2lvbiBjYWNoZS4KICAgICovCi0gIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZShCQUNLRU5ELT5jdHgsCisgIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZShiYWNrZW5kLT5jdHgsCiAgICAgICBTU0xfU0VTU19DQUNIRV9DTElFTlQgfCBTU0xfU0VTU19DQUNIRV9OT19JTlRFUk5BTCk7Ci0gIFNTTF9DVFhfc2Vzc19zZXRfbmV3X2NiKEJBQ0tFTkQtPmN0eCwgb3NzbF9uZXdfc2Vzc2lvbl9jYik7CisgIFNTTF9DVFhfc2Vzc19zZXRfbmV3X2NiKGJhY2tlbmQtPmN0eCwgb3NzbF9uZXdfc2Vzc2lvbl9jYik7CiAKICAgLyogZ2l2ZSBhcHBsaWNhdGlvbiBhIGNoYW5jZSB0byBpbnRlcmZlcmUgd2l0aCBTU0wgc2V0IHVwLiAqLwogICBpZihkYXRhLT5zZXQuc3NsLmZzc2xjdHgpIHsKLSAgICByZXN1bHQgPSAoKmRhdGEtPnNldC5zc2wuZnNzbGN0eCkoZGF0YSwgQkFDS0VORC0+Y3R4LAorICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIHRydWUpOworICAgIHJlc3VsdCA9ICgqZGF0YS0+c2V0LnNzbC5mc3NsY3R4KShkYXRhLCBiYWNrZW5kLT5jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuZnNzbGN0eHApOworICAgIEN1cmxfc2V0X2luX2NhbGxiYWNrKGRhdGEsIGZhbHNlKTsKICAgICBpZihyZXN1bHQpIHsKICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciBzaWduYWxlZCBieSBzc2wgY3R4IGNhbGxiYWNrIik7CiAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjcwMiwxMCArMzEwOCwxMCBAQAogICB9CiAKICAgLyogTGV0cyBtYWtlIGFuIFNTTCBzdHJ1Y3R1cmUgKi8KLSAgaWYoQkFDS0VORC0+aGFuZGxlKQotICAgIFNTTF9mcmVlKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gIEJBQ0tFTkQtPmhhbmRsZSA9IFNTTF9uZXcoQkFDS0VORC0+Y3R4KTsKLSAgaWYoIUJBQ0tFTkQtPmhhbmRsZSkgeworICBpZihiYWNrZW5kLT5oYW5kbGUpCisgICAgU1NMX2ZyZWUoYmFja2VuZC0+aGFuZGxlKTsKKyAgYmFja2VuZC0+aGFuZGxlID0gU1NMX25ldyhiYWNrZW5kLT5jdHgpOworICBpZighYmFja2VuZC0+aGFuZGxlKSB7CiAgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgY29udGV4dCAoaGFuZGxlKSEiKTsKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQpAQCAtMjcxMywyMyArMzExOSwyMyBAQAogI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDgwOGZMKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkgJiYgXAogICAgICFkZWZpbmVkKE9QRU5TU0xfTk9fT0NTUCkKICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXN0YXR1cykpCi0gICAgU1NMX3NldF90bHNleHRfc3RhdHVzX3R5cGUoQkFDS0VORC0+aGFuZGxlLCBUTFNFWFRfU1RBVFVTVFlQRV9vY3NwKTsKKyAgICBTU0xfc2V0X3Rsc2V4dF9zdGF0dXNfdHlwZShiYWNrZW5kLT5oYW5kbGUsIFRMU0VYVF9TVEFUVVNUWVBFX29jc3ApOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKE9QRU5TU0xfSVNfQk9SSU5HU1NMKSAmJiBkZWZpbmVkKEFMTE9XX1JFTkVHKQotICBTU0xfc2V0X3JlbmVnb3RpYXRlX21vZGUoQkFDS0VORC0+aGFuZGxlLCBzc2xfcmVuZWdvdGlhdGVfZnJlZWx5KTsKKyAgU1NMX3NldF9yZW5lZ290aWF0ZV9tb2RlKGJhY2tlbmQtPmhhbmRsZSwgc3NsX3JlbmVnb3RpYXRlX2ZyZWVseSk7CiAjZW5kaWYKIAotICBTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUoQkFDS0VORC0+aGFuZGxlKTsKKyAgU1NMX3NldF9jb25uZWN0X3N0YXRlKGJhY2tlbmQtPmhhbmRsZSk7CiAKLSAgQkFDS0VORC0+c2VydmVyX2NlcnQgPSAweDA7CisgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gMHgwOwogI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKICAgaWYoKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZhZGRyKSkgJiYKICNpZmRlZiBFTkFCTEVfSVBWNgogICAgICAoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZhZGRyKSkgJiYKICNlbmRpZgogICAgICBzbmkgJiYKLSAgICAgIVNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShCQUNLRU5ELT5oYW5kbGUsIGhvc3RuYW1lKSkKKyAgICAgIVNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShiYWNrZW5kLT5oYW5kbGUsIGhvc3RuYW1lKSkKICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogZmFpbGVkIHRvIGNvbmZpZ3VyZSBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uIChTTkkpICIKICAgICAgICAgICAiVExTIGV4dGVuc2lvblxuIik7CiAjZW5kaWYKQEAgLTI3NDMsMTQgKzMxNDksMTQgQEAKICAgICBpZihjb25uZWN0ZGF0YV9pZHggPj0gMCAmJiBzb2NraW5kZXhfaWR4ID49IDApIHsKICAgICAgIC8qIFN0b3JlIHRoZSBkYXRhIG5lZWRlZCBmb3IgdGhlICJuZXcgc2Vzc2lvbiIgY2FsbGJhY2suCiAgICAgICAgKiBUaGUgc29ja2luZGV4IGlzIHN0b3JlZCBhcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgZWxlbWVudC4gKi8KLSAgICAgIFNTTF9zZXRfZXhfZGF0YShCQUNLRU5ELT5oYW5kbGUsIGNvbm5lY3RkYXRhX2lkeCwgY29ubik7Ci0gICAgICBTU0xfc2V0X2V4X2RhdGEoQkFDS0VORC0+aGFuZGxlLCBzb2NraW5kZXhfaWR4LCBjb25uLT5zb2NrICsgc29ja2luZGV4KTsKKyAgICAgIFNTTF9zZXRfZXhfZGF0YShiYWNrZW5kLT5oYW5kbGUsIGNvbm5lY3RkYXRhX2lkeCwgY29ubik7CisgICAgICBTU0xfc2V0X2V4X2RhdGEoYmFja2VuZC0+aGFuZGxlLCBzb2NraW5kZXhfaWR4LCBjb25uLT5zb2NrICsgc29ja2luZGV4KTsKICAgICB9CiAKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKICAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzc2xfc2Vzc2lvbmlkLCBOVUxMLCBzb2NraW5kZXgpKSB7CiAgICAgICAvKiB3ZSBnb3QgYSBzZXNzaW9uIGlkLCB1c2UgaXQhICovCi0gICAgICBpZighU1NMX3NldF9zZXNzaW9uKEJBQ0tFTkQtPmhhbmRsZSwgc3NsX3Nlc3Npb25pZCkpIHsKKyAgICAgIGlmKCFTU0xfc2V0X3Nlc3Npb24oYmFja2VuZC0+aGFuZGxlLCBzc2xfc2Vzc2lvbmlkKSkgewogICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xfc2V0X3Nlc3Npb24gZmFpbGVkOiAlcyIsCiAgICAgICAgICAgICAgIG9zc2xfc3RyZXJyb3IoRVJSX2dldF9lcnJvcigpLCBlcnJvcl9idWZmZXIsCkBAIC0yNzYzLDYgKzMxNjksNyBAQAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CiAgIH0KIAorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKICAgaWYoY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF0udXNlKSB7CiAgICAgQklPICpjb25zdCBiaW8gPSBCSU9fbmV3KEJJT19mX3NzbCgpKTsKICAgICBTU0wgKmhhbmRsZSA9IGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLmJhY2tlbmQtPmhhbmRsZTsKQEAgLTI3NzAsOSArMzE3NywxMSBAQAogICAgIERFQlVHQVNTRVJUKGhhbmRsZSAhPSBOVUxMKTsKICAgICBERUJVR0FTU0VSVChiaW8gIT0gTlVMTCk7CiAgICAgQklPX3NldF9zc2woYmlvLCBoYW5kbGUsIEZBTFNFKTsKLSAgICBTU0xfc2V0X2JpbyhCQUNLRU5ELT5oYW5kbGUsIGJpbywgYmlvKTsKKyAgICBTU0xfc2V0X2JpbyhiYWNrZW5kLT5oYW5kbGUsIGJpbywgYmlvKTsKICAgfQotICBlbHNlIGlmKCFTU0xfc2V0X2ZkKEJBQ0tFTkQtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CisgIGVsc2UKKyNlbmRpZgorICAgIGlmKCFTU0xfc2V0X2ZkKGJhY2tlbmQtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CiAgICAgLyogcGFzcyB0aGUgcmF3IHNvY2tldCBpbnRvIHRoZSBTU0wgbGF5ZXJzICovCiAgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMX3NldF9mZCBmYWlsZWQ6ICVzIiwKICAgICAgICAgICBvc3NsX3N0cmVycm9yKEVSUl9nZXRfZXJyb3IoKSwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSkpOwpAQCAtMjc4OSwyNiArMzE5OCwzNCBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgaW50IGVycjsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KICAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbHNlCisgIGxvbmcgKiBjb25zdCBjZXJ0dmVyaWZ5cmVzdWx0ID0gJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbmRpZgorICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIERFQlVHQVNTRVJUKHNzbF9jb25uZWN0XzIgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZQogICAgICAgICAgICAgICB8fCBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZQogICAgICAgICAgICAgICB8fCBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSk7CiAKICAgRVJSX2NsZWFyX2Vycm9yKCk7CiAKLSAgZXJyID0gU1NMX2Nvbm5lY3QoQkFDS0VORC0+aGFuZGxlKTsKLSAgLyogSWYga2V5bG9nZ2luZyBpcyBlbmFibGVkIGJ1dCB0aGUga2V5bG9nIGNhbGxiYWNrIGlzIG5vdCBzdXBwb3J0ZWQgdGhlbiBsb2cKLSAgICAgc2VjcmV0cyBoZXJlLCBpbW1lZGlhdGVseSBhZnRlciBTU0xfY29ubmVjdCBieSB1c2luZyB0YXBfc3NsX2tleS4gKi8KLSNpZiBkZWZpbmVkKEVOQUJMRV9TU0xLRVlMT0dGSUxFKSAmJiAhZGVmaW5lZChIQVZFX0tFWUxPR19DQUxMQkFDSykKLSAgdGFwX3NzbF9rZXkoQkFDS0VORC0+aGFuZGxlLCAmQkFDS0VORC0+dGFwX3N0YXRlKTsKKyAgZXJyID0gU1NMX2Nvbm5lY3QoYmFja2VuZC0+aGFuZGxlKTsKKyNpZm5kZWYgSEFWRV9LRVlMT0dfQ0FMTEJBQ0sKKyAgaWYoQ3VybF90bHNfa2V5bG9nX2VuYWJsZWQoKSkgeworICAgIC8qIElmIGtleSBsb2dnaW5nIGlzIGVuYWJsZWQsIHdhaXQgZm9yIHRoZSBoYW5kc2hha2UgdG8gY29tcGxldGUgYW5kIHRoZW4KKyAgICAgKiBwcm9jZWVkIHdpdGggbG9nZ2luZyBzZWNyZXRzIChmb3IgVExTIDEuMiBvciBvbGRlcikuCisgICAgICovCisgICAgb3NzbF9sb2dfdGxzMTJfc2VjcmV0KGJhY2tlbmQtPmhhbmRsZSwgJmJhY2tlbmQtPmtleWxvZ19kb25lKTsKKyAgfQogI2VuZGlmCiAKICAgLyogMSAgaXMgZmluZQogICAgICAwICBpcyAibm90IHN1Y2Nlc3NmdWwgYnV0IHdhcyBzaHV0IGRvd24gY29udHJvbGxlZCIKICAgICAgPDAgaXMgImhhbmRzaGFrZSB3YXMgbm90IHN1Y2Nlc3NmdWwsIGJlY2F1c2UgYSBmYXRhbCBlcnJvciBvY2N1cnJlZCIgKi8KICAgaWYoMSAhPSBlcnIpIHsKLSAgICBpbnQgZGV0YWlsID0gU1NMX2dldF9lcnJvcihCQUNLRU5ELT5oYW5kbGUsIGVycik7CisgICAgaW50IGRldGFpbCA9IFNTTF9nZXRfZXJyb3IoYmFja2VuZC0+aGFuZGxlLCBlcnIpOwogCiAgICAgaWYoU1NMX0VSUk9SX1dBTlRfUkVBRCA9PSBkZXRhaWwpIHsKICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmc7CkBAIC0yODQ4LDcgKzMyNjUsNyBAQAogICAgICAgICAgKHJlYXNvbiA9PSBTU0xfUl9DRVJUSUZJQ0FURV9WRVJJRllfRkFJTEVEKSkgewogICAgICAgICByZXN1bHQgPSBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CiAKLSAgICAgICAgbGVyciA9IFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdChCQUNLRU5ELT5oYW5kbGUpOworICAgICAgICBsZXJyID0gU1NMX2dldF92ZXJpZnlfcmVzdWx0KGJhY2tlbmQtPmhhbmRsZSk7CiAgICAgICAgIGlmKGxlcnIgIT0gWDUwOV9WX09LKSB7CiAgICAgICAgICAgKmNlcnR2ZXJpZnlyZXN1bHQgPSBsZXJyOwogICAgICAgICAgIG1zbnByaW50ZihlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpLApAQCAtMjg3MiwxMSArMzI4OSwyMSBAQAogICAgICAgICogdGhlIFNPX0VSUk9SIGlzIGFsc28gbG9zdC4KICAgICAgICAqLwogICAgICAgaWYoQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1IgPT0gcmVzdWx0ICYmIGVycmRldGFpbCA9PSAwKSB7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICAgICAgICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/CiAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOiBjb25uLT5ob3N0Lm5hbWU7CiAgICAgICAgIGNvbnN0IGxvbmcgaW50IHBvcnQgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKKyNlbHNlCisgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyAgICAgICAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0OworI2VuZGlmCisgICAgICAgIGNoYXIgZXh0cmFtc2dbODBdPSIiOworICAgICAgICBpbnQgc29ja2VyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgaWYoc29ja2VyciAmJiBkZXRhaWwgPT0gU1NMX0VSUk9SX1NZU0NBTEwpCisgICAgICAgICAgQ3VybF9zdHJlcnJvcihzb2NrZXJyLCBleHRyYW1zZywgc2l6ZW9mKGV4dHJhbXNnKSk7CiAgICAgICAgIGZhaWxmKGRhdGEsIE9TU0xfUEFDS0FHRSAiIFNTTF9jb25uZWN0OiAlcyBpbiBjb25uZWN0aW9uIHRvICVzOiVsZCAiLAotICAgICAgICAgICAgICBTU0xfRVJST1JfdG9fc3RyKGRldGFpbCksIGhvc3RuYW1lLCBwb3J0KTsKKyAgICAgICAgICAgICAgZXh0cmFtc2dbMF0gPyBleHRyYW1zZyA6IFNTTF9FUlJPUl90b19zdHIoZGV0YWlsKSwKKyAgICAgICAgICAgICAgaG9zdG5hbWUsIHBvcnQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgfQogCkBAIC0yODkyLDggKzMzMTksOCBAQAogCiAgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCiAgICAgaW5mb2YoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHVzaW5nICVzIC8gJXNcbiIsCi0gICAgICAgICAgZ2V0X3NzbF92ZXJzaW9uX3R4dChCQUNLRU5ELT5oYW5kbGUpLAotICAgICAgICAgIFNTTF9nZXRfY2lwaGVyKEJBQ0tFTkQtPmhhbmRsZSkpOworICAgICAgICAgIGdldF9zc2xfdmVyc2lvbl90eHQoYmFja2VuZC0+aGFuZGxlKSwKKyAgICAgICAgICBTU0xfZ2V0X2NpcGhlcihiYWNrZW5kLT5oYW5kbGUpKTsKIAogI2lmZGVmIEhBU19BTFBOCiAgICAgLyogU2V0cyBkYXRhIGFuZCBsZW4gdG8gbmVnb3RpYXRlZCBwcm90b2NvbCwgbGVuIGlzIDAgaWYgbm8gcHJvdG9jb2wgd2FzCkBAIC0yOTAyLDcgKzMzMjksNyBAQAogICAgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7CiAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZWdfcHJvdG9jb2w7CiAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwotICAgICAgU1NMX2dldDBfYWxwbl9zZWxlY3RlZChCQUNLRU5ELT5oYW5kbGUsICZuZWdfcHJvdG9jb2wsICZsZW4pOworICAgICAgU1NMX2dldDBfYWxwbl9zZWxlY3RlZChiYWNrZW5kLT5oYW5kbGUsICZuZWdfcHJvdG9jb2wsICZsZW4pOwogICAgICAgaWYobGVuICE9IDApIHsKICAgICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJS4qc1xuIiwgbGVuLCBuZWdfcHJvdG9jb2wpOwogCkBAIC0yOTUyLDcgKzMzNzksNyBAQAogICBDdXJsX3NzbF9wdXNoX2NlcnRpbmZvX2xlbihkYXRhLCBfbnVtLCBfbGFiZWwsIHB0ciwgaW5mb19sZW4pOyBcCiAgIGlmKDEgIT0gQklPX3Jlc2V0KG1lbSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBXSElMRV9GQUxTRQorfSB3aGlsZSgwKQogCiBzdGF0aWMgdm9pZCBwdWJrZXlfc2hvdyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgQklPICptZW0sCkBAIC0yOTg0LDMxICszNDExLDI4IEBACiAgIGlmKF90eXBlLT5fbmFtZSkgeyBcCiAgICAgcHVia2V5X3Nob3coZGF0YSwgbWVtLCBfbnVtLCAjX3R5cGUsICNfbmFtZSwgX3R5cGUtPl9uYW1lKTsgXAogICB9IFwKLX0gV0hJTEVfRkFMU0UKK30gd2hpbGUoMCkKICNlbmRpZgogCi1zdGF0aWMgaW50IFg1MDlWM19leHQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKK3N0YXRpYyB2b2lkIFg1MDlWM19leHQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VydG51bSwKICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9FWFRTIFNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqZXh0cykKIHsKICAgaW50IGk7Ci0gIHNpemVfdCBqOwogCiAgIGlmKChpbnQpc2tfWDUwOV9FWFRFTlNJT05fbnVtKGV4dHMpIDw9IDApCiAgICAgLyogbm8gZXh0ZW5zaW9ucywgYmFpbCBvdXQgKi8KLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm47CiAKICAgZm9yKGkgPSAwOyBpIDwgKGludClza19YNTA5X0VYVEVOU0lPTl9udW0oZXh0cyk7IGkrKykgewogICAgIEFTTjFfT0JKRUNUICpvYmo7CiAgICAgWDUwOV9FWFRFTlNJT04gKmV4dCA9IHNrX1g1MDlfRVhURU5TSU9OX3ZhbHVlKGV4dHMsIGkpOwogICAgIEJVRl9NRU0gKmJpb21lbTsKLSAgICBjaGFyIGJ1Zls1MTJdOwotICAgIGNoYXIgKnB0ciA9IGJ1ZjsKICAgICBjaGFyIG5hbWVidWZbMTI4XTsKICAgICBCSU8gKmJpb19vdXQgPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKIAogICAgIGlmKCFiaW9fb3V0KQotICAgICAgcmV0dXJuIDE7CisgICAgICByZXR1cm47CiAKICAgICBvYmogPSBYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0KGV4dCk7CiAKQEAgLTMwMTgsMjggKzM0NDIsMTggQEAKICAgICAgIEFTTjFfU1RSSU5HX3ByaW50KGJpb19vdXQsIChBU04xX1NUUklORyAqKVg1MDlfRVhURU5TSU9OX2dldF9kYXRhKGV4dCkpOwogCiAgICAgQklPX2dldF9tZW1fcHRyKGJpb19vdXQsICZiaW9tZW0pOwotCi0gICAgZm9yKGogPSAwOyBqIDwgKHNpemVfdCliaW9tZW0tPmxlbmd0aDsgaisrKSB7Ci0gICAgICBjb25zdCBjaGFyICpzZXAgPSAiIjsKLSAgICAgIGlmKGJpb21lbS0+ZGF0YVtqXSA9PSAnXG4nKSB7Ci0gICAgICAgIHNlcCA9ICIsICI7Ci0gICAgICAgIGorKzsgLyogc2tpcCB0aGUgbmV3bGluZSAqLwotICAgICAgfTsKLSAgICAgIHdoaWxlKChqPChzaXplX3QpYmlvbWVtLT5sZW5ndGgpICYmIChiaW9tZW0tPmRhdGFbal0gPT0gJyAnKSkKLSAgICAgICAgaisrOwotICAgICAgaWYoajwoc2l6ZV90KWJpb21lbS0+bGVuZ3RoKQotICAgICAgICBwdHIgKz0gbXNucHJpbnRmKHB0ciwgc2l6ZW9mKGJ1ZiktKHB0ci1idWYpLCAiJXMlYyIsIHNlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiaW9tZW0tPmRhdGFbal0pOwotICAgIH0KLQotICAgIEN1cmxfc3NsX3B1c2hfY2VydGluZm8oZGF0YSwgY2VydG51bSwgbmFtZWJ1ZiwgYnVmKTsKLQorICAgIEN1cmxfc3NsX3B1c2hfY2VydGluZm9fbGVuKGRhdGEsIGNlcnRudW0sIG5hbWVidWYsIGJpb21lbS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW9tZW0tPmxlbmd0aCk7CiAgICAgQklPX2ZyZWUoYmlvX291dCk7Ci0KICAgfQotICByZXR1cm4gMDsgLyogYWxsIGlzIGZpbmUgKi8KIH0KIAorI2lmZGVmIE9QRU5TU0xfSVNfQk9SSU5HU1NMCit0eXBlZGVmIHNpemVfdCBudW1jZXJ0X3Q7CisjZWxzZQordHlwZWRlZiBpbnQgbnVtY2VydF90OworI2VuZGlmCisKIHN0YXRpYyBDVVJMY29kZSBnZXRfY2VydF9jaGFpbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wpCiAKQEAgLTMwNDgsMjQgKzM0NjIsMjUgQEAKICAgU1RBQ0tfT0YoWDUwOSkgKnNrOwogICBpbnQgaTsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIGludCBudW1jZXJ0czsKKyAgbnVtY2VydF90IG51bWNlcnRzOwogICBCSU8gKm1lbTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogCi0gIHNrID0gU1NMX2dldF9wZWVyX2NlcnRfY2hhaW4oQkFDS0VORC0+aGFuZGxlKTsKKyAgc2sgPSBTU0xfZ2V0X3BlZXJfY2VydF9jaGFpbihiYWNrZW5kLT5oYW5kbGUpOwogICBpZighc2spIHsKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogCiAgIG51bWNlcnRzID0gc2tfWDUwOV9udW0oc2spOwogCi0gIHJlc3VsdCA9IEN1cmxfc3NsX2luaXRfY2VydGluZm8oZGF0YSwgbnVtY2VydHMpOworICByZXN1bHQgPSBDdXJsX3NzbF9pbml0X2NlcnRpbmZvKGRhdGEsIChpbnQpbnVtY2VydHMpOwogICBpZihyZXN1bHQpIHsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKICAgbWVtID0gQklPX25ldyhCSU9fc19tZW0oKSk7CiAKLSAgZm9yKGkgPSAwOyBpIDwgbnVtY2VydHM7IGkrKykgeworICBmb3IoaSA9IDA7IGkgPCAoaW50KW51bWNlcnRzOyBpKyspIHsKICAgICBBU04xX0lOVEVHRVIgKm51bTsKICAgICBYNTA5ICp4ID0gc2tfWDUwOV92YWx1ZShzaywgaSk7CiAgICAgRVZQX1BLRVkgKnB1YmtleSA9IE5VTEw7CkBAIC0zMDkxLDE4ICszNTA2LDI1IEBACiAKICNpZiBkZWZpbmVkKEhBVkVfWDUwOV9HRVQwX1NJR05BVFVSRSkgJiYgZGVmaW5lZChIQVZFX1g1MDlfR0VUMF9FWFRFTlNJT05TKQogICAgIHsKLSAgICAgIGNvbnN0IFg1MDlfQUxHT1IgKnBhbGcgPSBOVUxMOwotICAgICAgQVNOMV9TVFJJTkcgKmEgPSBBU04xX1NUUklOR19uZXcoKTsKLSAgICAgIGlmKGEpIHsKLSAgICAgICAgWDUwOV9nZXQwX3NpZ25hdHVyZSgmcHNpZywgJnBhbGcsIHgpOwotICAgICAgICBYNTA5X3NpZ25hdHVyZV9wcmludChtZW0sIEFSRzJfWDUwOV9zaWduYXR1cmVfcHJpbnQgcGFsZywgYSk7Ci0gICAgICAgIEFTTjFfU1RSSU5HX2ZyZWUoYSk7CisgICAgICBjb25zdCBYNTA5X0FMR09SICpzaWdhbGcgPSBOVUxMOworICAgICAgWDUwOV9QVUJLRVkgKnhwdWJrZXkgPSBOVUxMOworICAgICAgQVNOMV9PQkpFQ1QgKnB1YmtleW9pZCA9IE5VTEw7CiAKLSAgICAgICAgaWYocGFsZykgewotICAgICAgICAgIGkyYV9BU04xX09CSkVDVChtZW0sIHBhbGctPmFsZ29yaXRobSk7CisgICAgICBYNTA5X2dldDBfc2lnbmF0dXJlKCZwc2lnLCAmc2lnYWxnLCB4KTsKKyAgICAgIGlmKHNpZ2FsZykgeworICAgICAgICBpMmFfQVNOMV9PQkpFQ1QobWVtLCBzaWdhbGctPmFsZ29yaXRobSk7CisgICAgICAgIHB1c2hfY2VydGluZm8oIlNpZ25hdHVyZSBBbGdvcml0aG0iLCBpKTsKKyAgICAgIH0KKworICAgICAgeHB1YmtleSA9IFg1MDlfZ2V0X1g1MDlfUFVCS0VZKHgpOworICAgICAgaWYoeHB1YmtleSkgeworICAgICAgICBYNTA5X1BVQktFWV9nZXQwX3BhcmFtKCZwdWJrZXlvaWQsIE5VTEwsIE5VTEwsIE5VTEwsIHhwdWJrZXkpOworICAgICAgICBpZihwdWJrZXlvaWQpIHsKKyAgICAgICAgICBpMmFfQVNOMV9PQkpFQ1QobWVtLCBwdWJrZXlvaWQpOwogICAgICAgICAgIHB1c2hfY2VydGluZm8oIlB1YmxpYyBLZXkgQWxnb3JpdGhtIiwgaSk7CiAgICAgICAgIH0KICAgICAgIH0KKwogICAgICAgWDUwOVYzX2V4dChkYXRhLCBpLCBYNTA5X2dldDBfZXh0ZW5zaW9ucyh4KSk7CiAgICAgfQogI2Vsc2UKQEAgLTMxNTQsNyArMzU3Niw3IEBACiAgICAgICAgICAgY29uc3QgQklHTlVNICplOwogCiAgICAgICAgICAgUlNBX2dldDBfa2V5KHJzYSwgJm4sICZlLCBOVUxMKTsKLSAgICAgICAgICBCTl9wcmludChtZW0sIG4pOworICAgICAgICAgIEJJT19wcmludGYobWVtLCAiJWQiLCBCTl9udW1fYml0cyhuKSk7CiAgICAgICAgICAgcHVzaF9jZXJ0aW5mbygiUlNBIFB1YmxpYyBLZXkiLCBpKTsKICAgICAgICAgICBwcmludF9wdWJrZXlfQk4ocnNhLCBuLCBpKTsKICAgICAgICAgICBwcmludF9wdWJrZXlfQk4ocnNhLCBlLCBpKTsKQEAgLTMyNzksNyArMzcwMSw2IEBACiAgICAgaWYobGVuMSA8IDEpCiAgICAgICBicmVhazsgLyogZmFpbGVkICovCiAKLSAgICAvKiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by9idWZmZXIuaHRtbCAqLwogICAgIGJ1ZmYxID0gdGVtcCA9IG1hbGxvYyhsZW4xKTsKICAgICBpZighYnVmZjEpCiAgICAgICBicmVhazsgLyogZmFpbGVkICovCkBAIC0zMzAxLDcgKzM3MjIsNiBAQAogICAgIHJlc3VsdCA9IEN1cmxfcGluX3BlZXJfcHVia2V5KGRhdGEsIHBpbm5lZHB1YmtleSwgYnVmZjEsIGxlbjEpOwogICB9IHdoaWxlKDApOwogCi0gIC8qIGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL2J1ZmZlci5odG1sICovCiAgIGlmKGJ1ZmYxKQogICAgIGZyZWUoYnVmZjEpOwogCkBAIC0zMzI5LDE2ICszNzQ5LDIxIEBACiAgIGNoYXIgZXJyb3JfYnVmZmVyWzI1Nl09IiI7CiAgIGNoYXIgYnVmZmVyWzIwNDhdOwogICBjb25zdCBjaGFyICpwdHI7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KICAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbHNlCisgIGxvbmcgKiBjb25zdCBjZXJ0dmVyaWZ5cmVzdWx0ID0gJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyNlbmRpZgogICBCSU8gKm1lbSA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAKICAgaWYoZGF0YS0+c2V0LnNzbC5jZXJ0aW5mbykKICAgICAvKiB3ZSd2ZSBiZWVuIGFza2VkIHRvIGdhdGhlciBjZXJ0aWZpY2F0ZSBpbmZvISAqLwogICAgICh2b2lkKWdldF9jZXJ0X2NoYWluKGNvbm4sIGNvbm5zc2wpOwogCi0gIEJBQ0tFTkQtPnNlcnZlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKEJBQ0tFTkQtPmhhbmRsZSk7Ci0gIGlmKCFCQUNLRU5ELT5zZXJ2ZXJfY2VydCkgeworICBiYWNrZW5kLT5zZXJ2ZXJfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShiYWNrZW5kLT5oYW5kbGUpOworICBpZighYmFja2VuZC0+c2VydmVyX2NlcnQpIHsKICAgICBCSU9fZnJlZShtZW0pOwogICAgIGlmKCFzdHJpY3QpCiAgICAgICByZXR1cm4gQ1VSTEVfT0s7CkBAIC0zMzQ5LDE5ICszNzc0LDE5IEBACiAKICAgaW5mb2YoZGF0YSwgIiVzIGNlcnRpZmljYXRlOlxuIiwgU1NMX0lTX1BST1hZKCkgPyAiUHJveHkiIDogIlNlcnZlciIpOwogCi0gIHJjID0geDUwOV9uYW1lX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKEJBQ0tFTkQtPnNlcnZlcl9jZXJ0KSwKKyAgcmMgPSB4NTA5X25hbWVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUoYmFja2VuZC0+c2VydmVyX2NlcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwogICBpbmZvZihkYXRhLCAiIHN1YmplY3Q6ICVzXG4iLCByYz8iW05PTkVdIjpidWZmZXIpOwogCiAjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKICAgewogICAgIGxvbmcgbGVuOwotICAgIEFTTjFfVElNRV9wcmludChtZW0sIFg1MDlfZ2V0MF9ub3RCZWZvcmUoQkFDS0VORC0+c2VydmVyX2NlcnQpKTsKKyAgICBBU04xX1RJTUVfcHJpbnQobWVtLCBYNTA5X2dldDBfbm90QmVmb3JlKGJhY2tlbmQtPnNlcnZlcl9jZXJ0KSk7CiAgICAgbGVuID0gQklPX2dldF9tZW1fZGF0YShtZW0sIChjaGFyICoqKSAmcHRyKTsKICAgICBpbmZvZihkYXRhLCAiIHN0YXJ0IGRhdGU6ICUuKnNcbiIsIGxlbiwgcHRyKTsKICAgICAodm9pZClCSU9fcmVzZXQobWVtKTsKIAotICAgIEFTTjFfVElNRV9wcmludChtZW0sIFg1MDlfZ2V0MF9ub3RBZnRlcihCQUNLRU5ELT5zZXJ2ZXJfY2VydCkpOworICAgIEFTTjFfVElNRV9wcmludChtZW0sIFg1MDlfZ2V0MF9ub3RBZnRlcihiYWNrZW5kLT5zZXJ2ZXJfY2VydCkpOwogICAgIGxlbiA9IEJJT19nZXRfbWVtX2RhdGEobWVtLCAoY2hhciAqKikgJnB0cik7CiAgICAgaW5mb2YoZGF0YSwgIiBleHBpcmUgZGF0ZTogJS4qc1xuIiwgbGVuLCBwdHIpOwogICAgICh2b2lkKUJJT19yZXNldChtZW0pOwpAQCAtMzM3MSwxNSArMzc5NiwxNSBAQAogICBCSU9fZnJlZShtZW0pOwogCiAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkgewotICAgIHJlc3VsdCA9IHZlcmlmeWhvc3QoY29ubiwgQkFDS0VORC0+c2VydmVyX2NlcnQpOworICAgIHJlc3VsdCA9IHZlcmlmeWhvc3QoY29ubiwgYmFja2VuZC0+c2VydmVyX2NlcnQpOwogICAgIGlmKHJlc3VsdCkgewotICAgICAgWDUwOV9mcmVlKEJBQ0tFTkQtPnNlcnZlcl9jZXJ0KTsKLSAgICAgIEJBQ0tFTkQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKKyAgICAgIFg1MDlfZnJlZShiYWNrZW5kLT5zZXJ2ZXJfY2VydCk7CisgICAgICBiYWNrZW5kLT5zZXJ2ZXJfY2VydCA9IE5VTEw7CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgfQogCi0gIHJjID0geDUwOV9uYW1lX29uZWxpbmUoWDUwOV9nZXRfaXNzdWVyX25hbWUoQkFDS0VORC0+c2VydmVyX2NlcnQpLAorICByYyA9IHg1MDlfbmFtZV9vbmVsaW5lKFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKGJhY2tlbmQtPnNlcnZlcl9jZXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKICAgaWYocmMpIHsKICAgICBpZihzdHJpY3QpCkBAIC0zMzkzLDI3ICszODE4LDMyIEBACiAgICAgICAgZGVhbGxvY2F0aW5nIHRoZSBjZXJ0aWZpY2F0ZS4gKi8KIAogICAgIC8qIGUuZy4gbWF0Y2ggaXNzdWVyIG5hbWUgd2l0aCBwcm92aWRlZCBpc3N1ZXIgY2VydGlmaWNhdGUgKi8KLSAgICBpZihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSkgewotICAgICAgZnAgPSBCSU9fbmV3KEJJT19zX2ZpbGUoKSk7Ci0gICAgICBpZihmcCA9PSBOVUxMKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsCi0gICAgICAgICAgICAgICJCSU9fbmV3IHJldHVybiBOVUxMLCAiIE9TU0xfUEFDS0FHRQotICAgICAgICAgICAgICAiIGVycm9yICVzIiwKLSAgICAgICAgICAgICAgb3NzbF9zdHJlcnJvcihFUlJfZ2V0X2Vycm9yKCksIGVycm9yX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXJyb3JfYnVmZmVyKSkgKTsKLSAgICAgICAgWDUwOV9mcmVlKEJBQ0tFTkQtPnNlcnZlcl9jZXJ0KTsKLSAgICAgICAgQkFDS0VORC0+c2VydmVyX2NlcnQgPSBOVUxMOwotICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgIH0KKyAgICBpZihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSB8fCBTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0X2Jsb2IpKSB7CisgICAgICBpZihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0X2Jsb2IpKQorICAgICAgICBmcCA9IEJJT19uZXdfbWVtX2J1ZihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0X2Jsb2IpLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KVNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnRfYmxvYiktPmxlbik7CisgICAgICBlbHNlIHsKKyAgICAgICAgZnAgPSBCSU9fbmV3KEJJT19zX2ZpbGUoKSk7CisgICAgICAgIGlmKGZwID09IE5VTEwpIHsKKyAgICAgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgICAgICJCSU9fbmV3IHJldHVybiBOVUxMLCAiIE9TU0xfUEFDS0FHRQorICAgICAgICAgICAgICAgICIgZXJyb3IgJXMiLAorICAgICAgICAgICAgICAgIG9zc2xfc3RyZXJyb3IoRVJSX2dldF9lcnJvcigpLCBlcnJvcl9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXJyb3JfYnVmZmVyKSkgKTsKKyAgICAgICAgICBYNTA5X2ZyZWUoYmFja2VuZC0+c2VydmVyX2NlcnQpOworICAgICAgICAgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgfQogCi0gICAgICBpZihCSU9fcmVhZF9maWxlbmFtZShmcCwgU1NMX1NFVF9PUFRJT04oaXNzdWVyY2VydCkpIDw9IDApIHsKLSAgICAgICAgaWYoc3RyaWN0KQotICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFVuYWJsZSB0byBvcGVuIGlzc3VlciBjZXJ0ICglcykiLAotICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKTsKLSAgICAgICAgQklPX2ZyZWUoZnApOwotICAgICAgICBYNTA5X2ZyZWUoQkFDS0VORC0+c2VydmVyX2NlcnQpOwotICAgICAgICBCQUNLRU5ELT5zZXJ2ZXJfY2VydCA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfSVNTVUVSX0VSUk9SOworICAgICAgICBpZihCSU9fcmVhZF9maWxlbmFtZShmcCwgU1NMX1NFVF9PUFRJT04oaXNzdWVyY2VydCkpIDw9IDApIHsKKyAgICAgICAgICBpZihzdHJpY3QpCisgICAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBVbmFibGUgdG8gb3BlbiBpc3N1ZXIgY2VydCAoJXMpIiwKKyAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKTsKKyAgICAgICAgICBCSU9fZnJlZShmcCk7CisgICAgICAgICAgWDUwOV9mcmVlKGJhY2tlbmQtPnNlcnZlcl9jZXJ0KTsKKyAgICAgICAgICBiYWNrZW5kLT5zZXJ2ZXJfY2VydCA9IE5VTEw7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9JU1NVRVJfRVJST1I7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgaXNzdWVyID0gUEVNX3JlYWRfYmlvX1g1MDkoZnAsIE5VTEwsIFpFUk9fTlVMTCwgTlVMTCk7CkBAIC0zNDIzLDE5ICszODUzLDE5IEBACiAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oaXNzdWVyY2VydCkpOwogICAgICAgICBCSU9fZnJlZShmcCk7CiAgICAgICAgIFg1MDlfZnJlZShpc3N1ZXIpOwotICAgICAgICBYNTA5X2ZyZWUoQkFDS0VORC0+c2VydmVyX2NlcnQpOwotICAgICAgICBCQUNLRU5ELT5zZXJ2ZXJfY2VydCA9IE5VTEw7CisgICAgICAgIFg1MDlfZnJlZShiYWNrZW5kLT5zZXJ2ZXJfY2VydCk7CisgICAgICAgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9JU1NVRVJfRVJST1I7CiAgICAgICB9CiAKLSAgICAgIGlmKFg1MDlfY2hlY2tfaXNzdWVkKGlzc3VlciwgQkFDS0VORC0+c2VydmVyX2NlcnQpICE9IFg1MDlfVl9PSykgeworICAgICAgaWYoWDUwOV9jaGVja19pc3N1ZWQoaXNzdWVyLCBiYWNrZW5kLT5zZXJ2ZXJfY2VydCkgIT0gWDUwOV9WX09LKSB7CiAgICAgICAgIGlmKHN0cmljdCkKICAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBDZXJ0aWZpY2F0ZSBpc3N1ZXIgY2hlY2sgZmFpbGVkICglcykiLAogICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKTsKICAgICAgICAgQklPX2ZyZWUoZnApOwogICAgICAgICBYNTA5X2ZyZWUoaXNzdWVyKTsKLSAgICAgICAgWDUwOV9mcmVlKEJBQ0tFTkQtPnNlcnZlcl9jZXJ0KTsKLSAgICAgICAgQkFDS0VORC0+c2VydmVyX2NlcnQgPSBOVUxMOworICAgICAgICBYNTA5X2ZyZWUoYmFja2VuZC0+c2VydmVyX2NlcnQpOworICAgICAgICBiYWNrZW5kLT5zZXJ2ZXJfY2VydCA9IE5VTEw7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfSVNTVUVSX0VSUk9SOwogICAgICAgfQogCkBAIC0zNDQ1LDcgKzM4NzUsNyBAQAogICAgICAgWDUwOV9mcmVlKGlzc3Vlcik7CiAgICAgfQogCi0gICAgbGVyciA9ICpjZXJ0dmVyaWZ5cmVzdWx0ID0gU1NMX2dldF92ZXJpZnlfcmVzdWx0KEJBQ0tFTkQtPmhhbmRsZSk7CisgICAgbGVyciA9ICpjZXJ0dmVyaWZ5cmVzdWx0ID0gU1NMX2dldF92ZXJpZnlfcmVzdWx0KGJhY2tlbmQtPmhhbmRsZSk7CiAKICAgICBpZigqY2VydHZlcmlmeXJlc3VsdCAhPSBYNTA5X1ZfT0spIHsKICAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewpAQCAtMzQ3MCw4ICszOTAwLDggQEAKICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXN0YXR1cykpIHsKICAgICByZXN1bHQgPSB2ZXJpZnlzdGF0dXMoY29ubiwgY29ubnNzbCk7CiAgICAgaWYocmVzdWx0KSB7Ci0gICAgICBYNTA5X2ZyZWUoQkFDS0VORC0+c2VydmVyX2NlcnQpOwotICAgICAgQkFDS0VORC0+c2VydmVyX2NlcnQgPSBOVUxMOworICAgICAgWDUwOV9mcmVlKGJhY2tlbmQtPnNlcnZlcl9jZXJ0KTsKKyAgICAgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICB9CkBAIC0zNDg0LDEzICszOTE0LDEzIEBACiAgIHB0ciA9IFNTTF9JU19QUk9YWSgpID8gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV0gOgogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfT1JJR107CiAgIGlmKCFyZXN1bHQgJiYgcHRyKSB7Ci0gICAgcmVzdWx0ID0gcGtwX3Bpbl9wZWVyX3B1YmtleShkYXRhLCBCQUNLRU5ELT5zZXJ2ZXJfY2VydCwgcHRyKTsKKyAgICByZXN1bHQgPSBwa3BfcGluX3BlZXJfcHVia2V5KGRhdGEsIGJhY2tlbmQtPnNlcnZlcl9jZXJ0LCBwdHIpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IHB1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcGlubmVkIHB1YmxpYyBrZXkhIik7CiAgIH0KIAotICBYNTA5X2ZyZWUoQkFDS0VORC0+c2VydmVyX2NlcnQpOwotICBCQUNLRU5ELT5zZXJ2ZXJfY2VydCA9IE5VTEw7CisgIFg1MDlfZnJlZShiYWNrZW5kLT5zZXJ2ZXJfY2VydCk7CisgIGJhY2tlbmQtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0X2RvbmU7CiAKICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM1MzEsNyArMzk2MSw2IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07Ci0gIHRpbWVfdCB0aW1lb3V0X21zOwogICBpbnQgd2hhdDsKIAogICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCkBAIC0zNTQyLDcgKzM5NzEsNyBAQAogCiAgIGlmKHNzbF9jb25uZWN0XzEgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewogICAgIC8qIEZpbmQgb3V0IGhvdyBtdWNoIG1vcmUgdGltZSB3ZSdyZSBhbGxvd2VkICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisgICAgY29uc3QgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKIAogICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwpAQCAtMzU2MCw3ICszOTg5LDcgQEAKICAgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKIAogICAgIC8qIGNoZWNrIGFsbG93ZWQgdGltZSBsZWZ0ICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisgICAgY29uc3QgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKIAogICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwpAQCAtMzY1NywxNCArNDA4NiwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KQogewogICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbY29ubmluZGV4XTsKLSAgY29uc3Qgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKnByb3h5c3NsID0gJmNvbm4tPnByb3h5X3NzbFtjb25uaW5kZXhdOwotCiAgIGlmKGNvbm5zc2wtPmJhY2tlbmQtPmhhbmRsZSAmJiBTU0xfcGVuZGluZyhjb25uc3NsLT5iYWNrZW5kLT5oYW5kbGUpKQogICAgIHJldHVybiBUUlVFOwotCi0gIGlmKHByb3h5c3NsLT5iYWNrZW5kLT5oYW5kbGUgJiYgU1NMX3BlbmRpbmcocHJveHlzc2wtPmJhY2tlbmQtPmhhbmRsZSkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIHsKKyAgICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqcHJveHlzc2wgPSAmY29ubi0+cHJveHlfc3NsW2Nvbm5pbmRleF07CisgICAgaWYocHJveHlzc2wtPmJhY2tlbmQtPmhhbmRsZSAmJiBTU0xfcGVuZGluZyhwcm94eXNzbC0+YmFja2VuZC0+aGFuZGxlKSkKKyAgICAgIHJldHVybiBUUlVFOworICB9CisjZW5kaWYKICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC0zNjg0LDE0ICs0MTE0LDE1IEBACiAgIGludCBtZW1sZW47CiAgIGludCByYzsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAogICBFUlJfY2xlYXJfZXJyb3IoKTsKIAogICBtZW1sZW4gPSAobGVuID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWxlbjsKLSAgcmMgPSBTU0xfd3JpdGUoQkFDS0VORC0+aGFuZGxlLCBtZW0sIG1lbWxlbik7CisgIHJjID0gU1NMX3dyaXRlKGJhY2tlbmQtPmhhbmRsZSwgbWVtLCBtZW1sZW4pOwogCiAgIGlmKHJjIDw9IDApIHsKLSAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKEJBQ0tFTkQtPmhhbmRsZSwgcmMpOworICAgIGVyciA9IFNTTF9nZXRfZXJyb3IoYmFja2VuZC0+aGFuZGxlLCByYyk7CiAKICAgICBzd2l0Y2goZXJyKSB7CiAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgpAQCAtMzcwMiwxOCArNDEzMywzMyBAQAogICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CiAgICAgICByZXR1cm4gLTE7CiAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTU0xfd3JpdGUoKSByZXR1cm5lZCBTWVNDQUxMLCBlcnJubyA9ICVkIiwKLSAgICAgICAgICAgIFNPQ0tFUlJOTyk7Ci0gICAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOwotICAgICAgcmV0dXJuIC0xOworICAgICAgeworICAgICAgICBpbnQgc29ja2VyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgc3NsZXJyb3IgPSBFUlJfZ2V0X2Vycm9yKCk7CisgICAgICAgIGlmKHNzbGVycm9yKQorICAgICAgICAgIG9zc2xfc3RyZXJyb3Ioc3NsZXJyb3IsIGVycm9yX2J1ZmZlciwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgICBlbHNlIGlmKHNvY2tlcnIpCisgICAgICAgICAgQ3VybF9zdHJlcnJvcihzb2NrZXJyLCBlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc3RybmNweShlcnJvcl9idWZmZXIsIFNTTF9FUlJPUl90b19zdHIoZXJyKSwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgICAgIGVycm9yX2J1ZmZlcltzaXplb2YoZXJyb3JfYnVmZmVyKSAtIDFdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICBmYWlsZihjb25uLT5kYXRhLCBPU1NMX1BBQ0tBR0UgIiBTU0xfd3JpdGU6ICVzLCBlcnJubyAlZCIsCisgICAgICAgICAgICAgIGVycm9yX2J1ZmZlciwgc29ja2Vycik7CisgICAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CiAgICAgICAvKiAgQSBmYWlsdXJlIGluIHRoZSBTU0wgbGlicmFyeSBvY2N1cnJlZCwgdXN1YWxseSBhIHByb3RvY29sIGVycm9yLgogICAgICAgICAgIFRoZSBPcGVuU1NMIGVycm9yIHF1ZXVlIGNvbnRhaW5zIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGVycm9yLiAqLwogICAgICAgc3NsZXJyb3IgPSBFUlJfZ2V0X2Vycm9yKCk7CiAgICAgICBpZihFUlJfR0VUX0xJQihzc2xlcnJvcikgPT0gRVJSX0xJQl9TU0wgJiYKICAgICAgICAgIEVSUl9HRVRfUkVBU09OKHNzbGVycm9yKSA9PSBTU0xfUl9CSU9fTk9UX1NFVCAmJgotICAgICAgICAgY29ubi0+c3NsW3NvY2tpbmRleF0uc3RhdGUgPT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgJiYKLSAgICAgICAgIGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLnN0YXRlID09IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlKSB7CisgICAgICAgICBjb25uLT5zc2xbc29ja2luZGV4XS5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAgICAgICYmIGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLnN0YXRlID09IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlCisjZW5kaWYKKyAgICAgICAgKSB7CiAgICAgICAgIGNoYXIgdmVyWzEyMF07CiAgICAgICAgIEN1cmxfb3NzbF92ZXJzaW9uKHZlciwgMTIwKTsKICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIkVycm9yOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGRvdWJsZSBTU0wgdHVubmVsaW5nLiIsCkBAIC0zNzQ2LDIxICs0MTkyLDI1IEBACiAgIHNzaXplX3QgbnJlYWQ7CiAgIGludCBidWZmc2l6ZTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW251bV07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAogICBFUlJfY2xlYXJfZXJyb3IoKTsKIAogICBidWZmc2l6ZSA9IChidWZmZXJzaXplID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWJ1ZmZlcnNpemU7Ci0gIG5yZWFkID0gKHNzaXplX3QpU1NMX3JlYWQoQkFDS0VORC0+aGFuZGxlLCBidWYsIGJ1ZmZzaXplKTsKKyAgbnJlYWQgPSAoc3NpemVfdClTU0xfcmVhZChiYWNrZW5kLT5oYW5kbGUsIGJ1ZiwgYnVmZnNpemUpOwogICBpZihucmVhZCA8PSAwKSB7CiAgICAgLyogZmFpbGVkIFNTTF9yZWFkICovCi0gICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IoQkFDS0VORC0+aGFuZGxlLCAoaW50KW5yZWFkKTsKKyAgICBpbnQgZXJyID0gU1NMX2dldF9lcnJvcihiYWNrZW5kLT5oYW5kbGUsIChpbnQpbnJlYWQpOwogCiAgICAgc3dpdGNoKGVycikgewogICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6IC8qIHRoaXMgaXMgbm90IGFuIGVycm9yICovCiAgICAgICBicmVhazsKICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjogLyogbm8gbW9yZSBkYXRhICovCiAgICAgICAvKiBjbG9zZV9ub3RpZnkgYWxlcnQgKi8KLSAgICAgIGNvbm5jbG9zZShjb25uLCAiVExTIGNsb3NlX25vdGlmeSIpOworICAgICAgaWYobnVtID09IEZJUlNUU09DS0VUKQorICAgICAgICAvKiBtYXJrIHRoZSBjb25uZWN0aW9uIGZvciBjbG9zZSBpZiBpdCBpcyBpbmRlZWQgdGhlIGNvbnRyb2wKKyAgICAgICAgICAgY29ubmVjdGlvbiAqLworICAgICAgICBjb25uY2xvc2UoY29ubiwgIlRMUyBjbG9zZV9ub3RpZnkiKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgpAQCAtMzc3NSwxNCArNDIyNSw0NCBAQAogICAgICAgaWYoKG5yZWFkIDwgMCkgfHwgc3NsZXJyb3IpIHsKICAgICAgICAgLyogSWYgdGhlIHJldHVybiBjb2RlIHdhcyBuZWdhdGl2ZSBvciB0aGVyZSBhY3R1YWxseSBpcyBhbiBlcnJvciBpbiB0aGUKICAgICAgICAgICAgcXVldWUgKi8KKyAgICAgICAgaW50IHNvY2tlcnIgPSBTT0NLRVJSTk87CisgICAgICAgIGlmKHNzbGVycm9yKQorICAgICAgICAgIG9zc2xfc3RyZXJyb3Ioc3NsZXJyb3IsIGVycm9yX2J1ZmZlciwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgICBlbHNlIGlmKHNvY2tlcnIgJiYgZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKQorICAgICAgICAgIEN1cmxfc3RyZXJyb3Ioc29ja2VyciwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHN0cm5jcHkoZXJyb3JfYnVmZmVyLCBTU0xfRVJST1JfdG9fc3RyKGVyciksIHNpemVvZihlcnJvcl9idWZmZXIpKTsKKyAgICAgICAgICBlcnJvcl9idWZmZXJbc2l6ZW9mKGVycm9yX2J1ZmZlcikgLSAxXSA9ICdcMCc7CisgICAgICAgIH0KICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgT1NTTF9QQUNLQUdFICIgU1NMX3JlYWQ6ICVzLCBlcnJubyAlZCIsCi0gICAgICAgICAgICAgIChzc2xlcnJvciA/Ci0gICAgICAgICAgICAgICBvc3NsX3N0cmVycm9yKHNzbGVycm9yLCBlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpKSA6Ci0gICAgICAgICAgICAgICBTU0xfRVJST1JfdG9fc3RyKGVycikpLAotICAgICAgICAgICAgICBTT0NLRVJSTk8pOworICAgICAgICAgICAgICBlcnJvcl9idWZmZXIsIHNvY2tlcnIpOwogICAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgICB9CisgICAgICAvKiBGb3IgZGVidWcgYnVpbGRzIGJlIGEgbGl0dGxlIHN0cmljdGVyIGFuZCBlcnJvciBvbiBhbnkKKyAgICAgICAgIFNTTF9FUlJPUl9TWVNDQUxMLiBGb3IgZXhhbXBsZSBhIHNlcnZlciBtYXkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgIGFicnVwdGx5IHdpdGhvdXQgYSBjbG9zZV9ub3RpZnkgYWxlcnQuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKKyAgICAgICAgIHBlZXJzIHdlIGRvbid0IGRvIHRoaXMgYnkgZGVmYXVsdC4gIzQ2MjQKKworICAgICAgICAgV2UgY2FuIHVzZSB0aGlzIHRvIGdhdWdlIGhvdyBtYW55IHVzZXJzIG1heSBiZSBhZmZlY3RlZCwgYW5kCisgICAgICAgICBpZiBpdCBnb2VzIG9rIGV2ZW50dWFsbHkgdHJhbnNpdGlvbiB0byBhbGxvdyBpbiBkZXYgYW5kIHJlbGVhc2Ugd2l0aAorICAgICAgICAgdGhlIG5ld2VzdCBPcGVuU1NMOiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDEwMTAwMEwpICovCisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgaWYoZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKSB7CisgICAgICAgIGludCBzb2NrZXJyID0gU09DS0VSUk5POworICAgICAgICBpZihzb2NrZXJyKQorICAgICAgICAgIEN1cmxfc3RyZXJyb3Ioc29ja2VyciwgZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIG1zbnByaW50ZihlcnJvcl9idWZmZXIsIHNpemVvZihlcnJvcl9idWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiBjbG9zZWQgYWJydXB0bHkiKTsKKyAgICAgICAgfQorICAgICAgICBmYWlsZihjb25uLT5kYXRhLCBPU1NMX1BBQ0tBR0UgIiBTU0xfcmVhZDogJXMsIGVycm5vICVkIgorICAgICAgICAgICAgICAiIChGYXRhbCBiZWNhdXNlIHRoaXMgaXMgYSBjdXJsIGRlYnVnIGJ1aWxkKSIsCisgICAgICAgICAgICAgIGVycm9yX2J1ZmZlciwgc29ja2Vycik7CisgICAgICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyNlbmRpZgogICAgIH0KICAgfQogICByZXR1cm4gbnJlYWQ7CkBAIC0zNzkwLDEzICs0MjcwLDM1IEBACiAKIHN0YXRpYyBzaXplX3QgQ3VybF9vc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKLSNpZmRlZiBPUEVOU1NMX0lTX0JPUklOR1NTTAorI2lmZGVmIExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSCisjaWYgTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIgPCAweDIwNzAxMDBmTAorICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzLyVseC4lbHguJWx4IiwKKyAgICAgICAgICAgICAgICAgICBPU1NMX1BBQ0tBR0UsCisgICAgICAgICAgICAgICAgICAgKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSPj4yOCkmMHhmLAorICAgICAgICAgICAgICAgICAgIChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUj4+MjApJjB4ZmYsCisgICAgICAgICAgICAgICAgICAgKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSPj4xMikmMHhmZik7CisjZWxzZSAvKiBPcGVuU1NMX3ZlcnNpb24oKSBmaXJzdCBhcHBlYXJlZCBpbiBMaWJyZVNTTCAyLjcuMSAqLworICBjaGFyICpwOworICBpbnQgY291bnQ7CisgIGNvbnN0IGNoYXIgKnZlciA9IE9wZW5TU0xfdmVyc2lvbihPUEVOU1NMX1ZFUlNJT04pOworICBjb25zdCBjaGFyIGV4cGVjdGVkW10gPSBPU1NMX1BBQ0tBR0UgIiAiOyAvKiBpZSAiTGlicmVTU0wgIiAqLworICBpZihDdXJsX3N0cm5jYXNlY29tcGFyZSh2ZXIsIGV4cGVjdGVkLCBzaXplb2YoZXhwZWN0ZWQpIC0gMSkpIHsKKyAgICB2ZXIgKz0gc2l6ZW9mKGV4cGVjdGVkKSAtIDE7CisgIH0KKyAgY291bnQgPSBtc25wcmludGYoYnVmZmVyLCBzaXplLCAiJXMvJXMiLCBPU1NMX1BBQ0tBR0UsIHZlcik7CisgIGZvcihwID0gYnVmZmVyOyAqcDsgKytwKSB7CisgICAgaWYoSVNTUEFDRSgqcCkpCisgICAgICAqcCA9ICdfJzsKKyAgfQorICByZXR1cm4gY291bnQ7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9JU19CT1JJTkdTU0wpCiAgIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCBPU1NMX1BBQ0tBR0UpOwogI2VsaWYgZGVmaW5lZChIQVZFX09QRU5TU0xfVkVSU0lPTikgJiYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fU1RSSU5HKQogICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzLyVzIiwKICAgICAgICAgICAgICAgICAgICBPU1NMX1BBQ0tBR0UsIE9wZW5TU0xfdmVyc2lvbihPUEVOU1NMX1ZFUlNJT05fU1RSSU5HKSk7CiAjZWxzZQotICAvKiBub3QgQm9yaW5nU1NMIGFuZCBub3QgdXNpbmcgT3BlblNTTF92ZXJzaW9uICovCisgIC8qIG5vdCBMaWJyZVNTTCwgQm9yaW5nU1NMIGFuZCBub3QgdXNpbmcgT3BlblNTTF92ZXJzaW9uICovCiAKICAgY2hhciBzdWJbM107CiAgIHVuc2lnbmVkIGxvbmcgc3NsZWF5X3ZhbHVlOwpAQCAtMzg4MSw3ICs0MzgzLDcgQEAKICAgdW5zaWduZWQgaW50IGxlbiA9IDA7CiAgICh2b2lkKSB1bnVzZWQ7CiAKLSAgbWRjdHggPSAgRVZQX01EX0NUWF9jcmVhdGUoKTsKKyAgbWRjdHggPSBFVlBfTURfQ1RYX2NyZWF0ZSgpOwogICBFVlBfRGlnZXN0SW5pdF9leChtZGN0eCwgRVZQX3NoYTI1NigpLCBOVUxMKTsKICAgRVZQX0RpZ2VzdFVwZGF0ZShtZGN0eCwgdG1wLCB0bXBsZW4pOwogICBFVlBfRGlnZXN0RmluYWxfZXgobWRjdHgsIHNoYTI1NnN1bSwgJmxlbik7CkBAIC0zOTA0LDggKzQ0MDYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPIGluZm8pCiB7CiAgIC8qIExlZ2FjeTogQ1VSTElORk9fVExTX1NFU1NJT04gbXVzdCByZXR1cm4gYW4gU1NMX0NUWCBwb2ludGVyLiAqLworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIHJldHVybiBpbmZvID09IENVUkxJTkZPX1RMU19TRVNTSU9OID8KLSAgICAgICAgICh2b2lkICopQkFDS0VORC0+Y3R4IDogKHZvaWQgKilCQUNLRU5ELT5oYW5kbGU7CisgICAgICAgICAodm9pZCAqKWJhY2tlbmQtPmN0eCA6ICh2b2lkICopYmFja2VuZC0+aGFuZGxlOwogfQogCiBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfb3BlbnNzbCA9IHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2wuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VhMjZiNC4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwotICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTEsIEhvaS1IbyBDaGFuLCA8aG9paG8uY2hhbkBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNvdXJjZSBmaWxlIGZvciBhbGwgUG9sYXJTU0wtc3BlY2lmaWMgY29kZSBmb3IgdGhlIFRMUy9TU0wgbGF5ZXIuIE5vIGNvZGUKLSAqIGJ1dCB2dGxzLmMgc2hvdWxkIGV2ZXIgY2FsbCBvciB1c2UgdGhlc2UgZnVuY3Rpb25zLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY3VybF9zZXR1cC5oIgotCi0jaWZkZWYgVVNFX1BPTEFSU1NMCi0jaW5jbHVkZSA8cG9sYXJzc2wvbmV0Lmg+Ci0jaW5jbHVkZSA8cG9sYXJzc2wvc3NsLmg+Ci0jaW5jbHVkZSA8cG9sYXJzc2wvY2VydHMuaD4KLSNpbmNsdWRlIDxwb2xhcnNzbC94NTA5Lmg+Ci0jaW5jbHVkZSA8cG9sYXJzc2wvdmVyc2lvbi5oPgotI2luY2x1ZGUgPHBvbGFyc3NsL3NoYTI1Ni5oPgotCi0jaWYgUE9MQVJTU0xfVkVSU0lPTl9OVU1CRVIgPCAweDAxMDMwMDAwCi0jZXJyb3IgdG9vIG9sZCBQb2xhclNTTAotI2VuZGlmCi0KLSNpbmNsdWRlIDxwb2xhcnNzbC9lcnJvci5oPgotI2luY2x1ZGUgPHBvbGFyc3NsL2VudHJvcHkuaD4KLSNpbmNsdWRlIDxwb2xhcnNzbC9jdHJfZHJiZy5oPgotCi0jaW5jbHVkZSAidXJsZGF0YS5oIgotI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAiaW5ldF9wdG9uLmgiCi0jaW5jbHVkZSAicG9sYXJzc2wuaCIKLSNpbmNsdWRlICJ2dGxzLmgiCi0jaW5jbHVkZSAicGFyc2VkYXRlLmgiCi0jaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLwotI2luY2x1ZGUgInNlbGVjdC5oIgotI2luY2x1ZGUgInN0cmNhc2UuaCIKLSNpbmNsdWRlICJwb2xhcnNzbF90aHJlYWRsb2NrLmgiCi0jaW5jbHVkZSAibXVsdGlpZi5oIgotI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCi0jaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKLS8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0KLS8qIFNlZSBodHRwczovL3Rscy5tYmVkLm9yZy9kaXNjdXNzaW9ucy9nZW5lcmljLwotICAgaG93dG8tZGV0ZXJtaW5lLWV4YWN0LWJ1ZmZlci1sZW4tZm9yLW1iZWR0bHNfcGtfd3JpdGVfcHVia2V5X2RlcgotKi8KLSNkZWZpbmUgUlNBX1BVQl9ERVJfTUFYX0JZVEVTICAgKDM4ICsgMiAqIFBPTEFSU1NMX01QSV9NQVhfU0laRSkKLSNkZWZpbmUgRUNQX1BVQl9ERVJfTUFYX0JZVEVTICAgKDMwICsgMiAqIFBPTEFSU1NMX0VDUF9NQVhfQllURVMpCi0KLSNkZWZpbmUgUFVCX0RFUl9NQVhfQllURVMgICAoUlNBX1BVQl9ERVJfTUFYX0JZVEVTID4gRUNQX1BVQl9ERVJfTUFYX0JZVEVTID8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUFVCX0RFUl9NQVhfQllURVMgOiBFQ1BfUFVCX0RFUl9NQVhfQllURVMpCi0KLXN0cnVjdCBzc2xfYmFja2VuZF9kYXRhIHsKLSAgY3RyX2RyYmdfY29udGV4dCBjdHJfZHJiZzsKLSAgZW50cm9weV9jb250ZXh0IGVudHJvcHk7Ci0gIHNzbF9jb250ZXh0IHNzbDsKLSAgaW50IHNlcnZlcl9mZDsKLSAgeDUwOV9jcnQgY2FjZXJ0OwotICB4NTA5X2NydCBjbGljZXJ0OwotICB4NTA5X2NybCBjcmw7Ci0gIHJzYV9jb250ZXh0IHJzYTsKLX07Ci0KLSNkZWZpbmUgQkFDS0VORCBjb25uc3NsLT5iYWNrZW5kCi0KLS8qIGFwcGx5IHRocmVhZGluZz8gKi8KLSNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSB8fCBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKQotI2RlZmluZSBUSFJFQURJTkdfU1VQUE9SVAotI2VuZGlmCi0KLSNpZm5kZWYgUE9MQVJTU0xfRVJST1JfQwotI2RlZmluZSBlcnJvcl9zdHJlcnJvcih4LHkseikKLSNlbmRpZiAvKiBQT0xBUlNTTF9FUlJPUl9DICovCi0KLQotI2lmIGRlZmluZWQoVEhSRUFESU5HX1NVUFBPUlQpCi1zdGF0aWMgZW50cm9weV9jb250ZXh0IGVudHJvcHk7Ci0KLXN0YXRpYyBpbnQgIGVudHJvcHlfaW5pdF9pbml0aWFsaXplZCAgPSAwOwotCi0vKiBzdGFydCBvZiBlbnRyb3B5X2luaXRfbXV0ZXgoKSAqLwotc3RhdGljIHZvaWQgZW50cm9weV9pbml0X211dGV4KGVudHJvcHlfY29udGV4dCAqY3R4KQotewotICAvKiBsb2NrIDAgPSBlbnRyb3B5X2luaXRfbXV0ZXgoKSAqLwotICBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja19sb2NrX2Z1bmN0aW9uKDApOwotICBpZihlbnRyb3B5X2luaXRfaW5pdGlhbGl6ZWQgPT0gMCkgewotICAgIGVudHJvcHlfaW5pdChjdHgpOwotICAgIGVudHJvcHlfaW5pdF9pbml0aWFsaXplZCA9IDE7Ci0gIH0KLSAgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uKDApOwotfQotLyogZW5kIG9mIGVudHJvcHlfaW5pdF9tdXRleCgpICovCi0KLS8qIHN0YXJ0IG9mIGVudHJvcHlfZnVuY19tdXRleCgpICovCi1zdGF0aWMgaW50IGVudHJvcHlfZnVuY19tdXRleCh2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4pCi17Ci0gIGludCByZXQ7Ci0gIC8qIGxvY2sgMSA9IGVudHJvcHlfZnVuY19tdXRleCgpICovCi0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oMSk7Ci0gIHJldCA9IGVudHJvcHlfZnVuYyhkYXRhLCBvdXRwdXQsIGxlbik7Ci0gIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbigxKTsKLQotICByZXR1cm4gcmV0OwotfQotLyogZW5kIG9mIGVudHJvcHlfZnVuY19tdXRleCgpICovCi0KLSNlbmRpZiAvKiBUSFJFQURJTkdfU1VQUE9SVCAqLwotCi0vKiBEZWZpbmUgdGhpcyB0byBlbmFibGUgbG90cyBvZiBkZWJ1Z2dpbmcgZm9yIFBvbGFyU1NMICovCi0jdW5kZWYgUE9MQVJTU0xfREVCVUcKLQotI2lmZGVmIFBPTEFSU1NMX0RFQlVHCi1zdGF0aWMgdm9pZCBwb2xhcnNzbF9kZWJ1Zyh2b2lkICpjb250ZXh0LCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmxpbmUpCi17Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBOVUxMOwotCi0gIGlmKCFjb250ZXh0KQotICAgIHJldHVybjsKLQotICBkYXRhID0gKHN0cnVjdCBDdXJsX2Vhc3kgKiljb250ZXh0OwotCi0gIGluZm9mKGRhdGEsICIlcyIsIGxpbmUpOwotICAodm9pZCkgbGV2ZWw7Ci19Ci0jZWxzZQotI2VuZGlmCi0KLS8qIEFMUE4gZm9yIGh0dHAyPyAqLwotI2lmZGVmIFBPTEFSU1NMX1NTTF9BTFBOCi0jICBkZWZpbmUgSEFTX0FMUE4KLSNlbmRpZgotCi1zdGF0aWMgQ3VybF9yZWN2IHBvbGFyc3NsX3JlY3Y7Ci1zdGF0aWMgQ3VybF9zZW5kIHBvbGFyc3NsX3NlbmQ7Ci0KLXN0YXRpYyBDVVJMY29kZSBwb2xhcnNzbF92ZXJzaW9uX2Zyb21fY3VybChpbnQgKnBvbGFydmVyLCBsb25nIHNzbF92ZXJzaW9uKQotewotICBzd2l0Y2goc3NsX3ZlcnNpb24pIHsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgotICAgICAgKnBvbGFydmVyID0gU1NMX01JTk9SX1ZFUlNJT05fMTsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOgotICAgICAgKnBvbGFydmVyID0gU1NMX01JTk9SX1ZFUlNJT05fMjsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgotICAgICAgKnBvbGFydmVyID0gU1NMX01JTk9SX1ZFUlNJT05fMzsKLSAgICAgIHJldHVybiBDVVJMRV9PSzsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUKLXNldF9zc2xfdmVyc2lvbl9taW5fbWF4KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKLXsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICBsb25nIHNzbF92ZXJzaW9uID0gU1NMX0NPTk5fQ09ORklHKHZlcnNpb24pOwotICBsb25nIHNzbF92ZXJzaW9uX21heCA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uX21heCk7Ci0gIGludCBzc2xfbWluX3ZlciA9IFNTTF9NSU5PUl9WRVJTSU9OXzE7Ci0gIGludCBzc2xfbWF4X3ZlciA9IFNTTF9NSU5PUl9WRVJTSU9OXzE7Ci0gIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwotCi0gIHN3aXRjaChzc2xfdmVyc2lvbikgewotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6Ci0gICAgICBzc2xfdmVyc2lvbiA9IENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBzd2l0Y2goc3NsX3ZlcnNpb25fbWF4KSB7Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX05PTkU6Ci0gICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQ6Ci0gICAgICBzc2xfdmVyc2lvbl9tYXggPSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJlc3VsdCA9IHBvbGFyc3NsX3ZlcnNpb25fZnJvbV9jdXJsKCZzc2xfbWluX3Zlciwgc3NsX3ZlcnNpb24pOwotICBpZihyZXN1bHQpIHsKLSAgICBmYWlsZihkYXRhLCAidW5zdXBwb3J0ZWQgbWluIHZlcnNpb24gcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIHJlc3VsdCA9IHBvbGFyc3NsX3ZlcnNpb25fZnJvbV9jdXJsKCZzc2xfbWF4X3Zlciwgc3NsX3ZlcnNpb25fbWF4ID4+IDE2KTsKLSAgaWYocmVzdWx0KSB7Ci0gICAgZmFpbGYoZGF0YSwgInVuc3VwcG9ydGVkIG1heCB2ZXJzaW9uIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHNzbF9zZXRfbWluX3ZlcnNpb24oJkJBQ0tFTkQtPnNzbCwgU1NMX01BSk9SX1ZFUlNJT05fMywgc3NsX21pbl92ZXIpOwotICBzc2xfc2V0X21heF92ZXJzaW9uKCZCQUNLRU5ELT5zc2wsIFNTTF9NQUpPUl9WRVJTSU9OXzMsIHNzbF9tYXhfdmVyKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQ1VSTGNvZGUKLXBvbGFyc3NsX2Nvbm5lY3Rfc3RlcDEoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQotewotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGNvbnN0IGNoYXIgKmNhcGF0aCA9IFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpOwotICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKLSAgICBjb25uLT5ob3N0Lm5hbWU7Ci0gIGNvbnN0IGxvbmcgaW50IHBvcnQgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKLSAgaW50IHJldCA9IC0xOwotICBjaGFyIGVycm9yYnVmWzEyOF07Ci0gIGVycm9yYnVmWzBdID0gMDsKLQotICAvKiBQb2xhclNTTCBvbmx5IHN1cHBvcnRzIFNTTHYzIGFuZCBUTFN2MSAqLwotICBpZihTU0xfQ09OTl9DT05GSUcodmVyc2lvbikgPT0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYyKSB7Ci0gICAgZmFpbGYoZGF0YSwgIlBvbGFyU1NMIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKLSAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gIH0KLQotI2lmZGVmIFRIUkVBRElOR19TVVBQT1JUCi0gIGVudHJvcHlfaW5pdF9tdXRleCgmZW50cm9weSk7Ci0KLSAgaWYoKHJldCA9IGN0cl9kcmJnX2luaXQoJkJBQ0tFTkQtPmN0cl9kcmJnLCBlbnRyb3B5X2Z1bmNfbXV0ZXgsICZlbnRyb3B5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKSkgIT0gMCkgewotICAgIGVycm9yX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwotICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgLSBQb2xhclNTTDogY3RyX2RyYmdfaW5pdCByZXR1cm5lZCAoLTB4JTA0WCkgJXNcbiIsCi0gICAgICAgICAgLXJldCwgZXJyb3JidWYpOwotICB9Ci0jZWxzZQotICBlbnRyb3B5X2luaXQoJkJBQ0tFTkQtPmVudHJvcHkpOwotCi0gIGlmKChyZXQgPSBjdHJfZHJiZ19pbml0KCZCQUNLRU5ELT5jdHJfZHJiZywgZW50cm9weV9mdW5jLCAmQkFDS0VORC0+ZW50cm9weSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCkpICE9IDApIHsKLSAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICBmYWlsZihkYXRhLCAiRmFpbGVkIC0gUG9sYXJTU0w6IGN0cl9kcmJnX2luaXQgcmV0dXJuZWQgKC0weCUwNFgpICVzXG4iLAotICAgICAgICAgIC1yZXQsIGVycm9yYnVmKTsKLSAgfQotI2VuZGlmIC8qIFRIUkVBRElOR19TVVBQT1JUICovCi0KLSAgLyogTG9hZCB0aGUgdHJ1c3RlZCBDQSAqLwotICBtZW1zZXQoJkJBQ0tFTkQtPmNhY2VydCwgMCwgc2l6ZW9mKHg1MDlfY3J0KSk7Ci0KLSAgaWYoU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpIHsKLSAgICByZXQgPSB4NTA5X2NydF9wYXJzZV9maWxlKCZCQUNLRU5ELT5jYWNlcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSk7Ci0KLSAgICBpZihyZXQ8MCkgewotICAgICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0gICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBjYSBjZXJ0IGZpbGUgJXMgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpLCAtcmV0LCBlcnJvcmJ1Zik7Ci0KLSAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKLSAgICB9Ci0gIH0KLQotICBpZihjYXBhdGgpIHsKLSAgICByZXQgPSB4NTA5X2NydF9wYXJzZV9wYXRoKCZCQUNLRU5ELT5jYWNlcnQsIGNhcGF0aCk7Ci0KLSAgICBpZihyZXQ8MCkgewotICAgICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0gICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBjYSBjZXJ0IHBhdGggJXMgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIGNhcGF0aCwgLXJldCwgZXJyb3JidWYpOwotCi0gICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpCi0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7Ci0gICAgfQotICB9Ci0KLSAgLyogTG9hZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlICovCi0gIG1lbXNldCgmQkFDS0VORC0+Y2xpY2VydCwgMCwgc2l6ZW9mKHg1MDlfY3J0KSk7Ci0KLSAgaWYoU1NMX1NFVF9PUFRJT04oY2VydCkpIHsKLSAgICByZXQgPSB4NTA5X2NydF9wYXJzZV9maWxlKCZCQUNLRU5ELT5jbGljZXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oY2VydCkpOwotCi0gICAgaWYocmV0KSB7Ci0gICAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIGNsaWVudCBjZXJ0IGZpbGUgJXMgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGNlcnQpLCAtcmV0LCBlcnJvcmJ1Zik7Ci0KLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07Ci0gICAgfQotICB9Ci0KLSAgLyogTG9hZCB0aGUgY2xpZW50IHByaXZhdGUga2V5ICovCi0gIGlmKFNTTF9TRVRfT1BUSU9OKGtleSkpIHsKLSAgICBwa19jb250ZXh0IHBrOwotICAgIHBrX2luaXQoJnBrKTsKLSAgICByZXQgPSBwa19wYXJzZV9rZXlmaWxlKCZwaywgU1NMX1NFVF9PUFRJT04oa2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpKTsKLSAgICBpZihyZXQgPT0gMCAmJiAhcGtfY2FuX2RvKCZwaywgUE9MQVJTU0xfUEtfUlNBKSkKLSAgICAgIHJldCA9IFBPTEFSU1NMX0VSUl9QS19UWVBFX01JU01BVENIOwotICAgIGlmKHJldCA9PSAwKQotICAgICAgcnNhX2NvcHkoJkJBQ0tFTkQtPnJzYSwgcGtfcnNhKHBrKSk7Ci0gICAgZWxzZQotICAgICAgcnNhX2ZyZWUoJkJBQ0tFTkQtPnJzYSk7Ci0gICAgcGtfZnJlZSgmcGspOwotCi0gICAgaWYocmV0KSB7Ci0gICAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIHByaXZhdGUga2V5ICVzIC0gUG9sYXJTU0w6ICgtMHglMDRYKSAlcyIsCi0gICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpLCAtcmV0LCBlcnJvcmJ1Zik7Ci0KLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07Ci0gICAgfQotICB9Ci0KLSAgLyogTG9hZCB0aGUgQ1JMICovCi0gIG1lbXNldCgmQkFDS0VORC0+Y3JsLCAwLCBzaXplb2YoeDUwOV9jcmwpKTsKLQotICBpZihTU0xfU0VUX09QVElPTihDUkxmaWxlKSkgewotICAgIHJldCA9IHg1MDlfY3JsX3BhcnNlX2ZpbGUoJkJBQ0tFTkQtPmNybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKENSTGZpbGUpKTsKLQotICAgIGlmKHJldCkgewotICAgICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0gICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBDUkwgZmlsZSAlcyAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oQ1JMZmlsZSksIC1yZXQsIGVycm9yYnVmKTsKLQotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DUkxfQkFERklMRTsKLSAgICB9Ci0gIH0KLQotICBpbmZvZihkYXRhLCAiUG9sYXJTU0w6IENvbm5lY3RpbmcgdG8gJXM6JWRcbiIsIGhvc3RuYW1lLCBwb3J0KTsKLQotICBpZihzc2xfaW5pdCgmQkFDS0VORC0+c3NsKSkgewotICAgIGZhaWxmKGRhdGEsICJQb2xhclNTTDogc3NsX2luaXQgZmFpbGVkIik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgewotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKLSAgICBzc2xfc2V0X21pbl92ZXJzaW9uKCZCQUNLRU5ELT5zc2wsIFNTTF9NQUpPUl9WRVJTSU9OXzMsCi0gICAgICAgICAgICAgICAgICAgICAgICBTU0xfTUlOT1JfVkVSU0lPTl8xKTsKLSAgICBicmVhazsKLSAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6Ci0gICAgc3NsX3NldF9taW5fdmVyc2lvbigmQkFDS0VORC0+c3NsLCBTU0xfTUFKT1JfVkVSU0lPTl8zLAotICAgICAgICAgICAgICAgICAgICAgICAgU1NMX01JTk9SX1ZFUlNJT05fMCk7Ci0gICAgc3NsX3NldF9tYXhfdmVyc2lvbigmQkFDS0VORC0+c3NsLCBTU0xfTUFKT1JfVkVSU0lPTl8zLAotICAgICAgICAgICAgICAgICAgICAgICAgU1NMX01JTk9SX1ZFUlNJT05fMCk7Ci0gICAgaW5mb2YoZGF0YSwgIlBvbGFyU1NMOiBGb3JjZWQgbWluLiBTU0wgVmVyc2lvbiB0byBiZSBTU0x2M1xuIik7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6Ci0gIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0gICAgewotICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gc2V0X3NzbF92ZXJzaW9uX21pbl9tYXgoY29ubiwgc29ja2luZGV4KTsKLSAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgZGVmYXVsdDoKLSAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotCi0gIHNzbF9zZXRfZW5kcG9pbnQoJkJBQ0tFTkQtPnNzbCwgU1NMX0lTX0NMSUVOVCk7Ci0gIHNzbF9zZXRfYXV0aG1vZGUoJkJBQ0tFTkQtPnNzbCwgU1NMX1ZFUklGWV9PUFRJT05BTCk7Ci0KLSAgc3NsX3NldF9ybmcoJkJBQ0tFTkQtPnNzbCwgY3RyX2RyYmdfcmFuZG9tLAotICAgICAgICAgICAgICAmQkFDS0VORC0+Y3RyX2RyYmcpOwotICBzc2xfc2V0X2JpbygmQkFDS0VORC0+c3NsLAotICAgICAgICAgICAgICBuZXRfcmVjdiwgJmNvbm4tPnNvY2tbc29ja2luZGV4XSwKLSAgICAgICAgICAgICAgbmV0X3NlbmQsICZjb25uLT5zb2NrW3NvY2tpbmRleF0pOwotCi0gIHNzbF9zZXRfY2lwaGVyc3VpdGVzKCZCQUNLRU5ELT5zc2wsIHNzbF9saXN0X2NpcGhlcnN1aXRlcygpKTsKLQotICAvKiBDaGVjayBpZiB0aGVyZSdzIGEgY2FjaGVkIElEIHdlIGNhbi9zaG91bGQgdXNlIGhlcmUhICovCi0gIGlmKFNTTF9TRVRfT1BUSU9OKHByaW1hcnkuc2Vzc2lvbmlkKSkgewotICAgIHZvaWQgKm9sZF9zZXNzaW9uID0gTlVMTDsKLQotICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zZXNzaW9uLCBOVUxMLCBzb2NraW5kZXgpKSB7Ci0gICAgICByZXQgPSBzc2xfc2V0X3Nlc3Npb24oJkJBQ0tFTkQtPnNzbCwgb2xkX3Nlc3Npb24pOwotICAgICAgaWYocmV0KSB7Ci0gICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzc2xfc2V0X3Nlc3Npb24gcmV0dXJuZWQgLTB4JXgiLCAtcmV0KTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgICAgfQotICAgICAgaW5mb2YoZGF0YSwgIlBvbGFyU1NMIHJlLXVzaW5nIHNlc3Npb25cbiIpOwotICAgIH0KLSAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwotICB9Ci0KLSAgc3NsX3NldF9jYV9jaGFpbigmQkFDS0VORC0+c3NsLAotICAgICAgICAgICAgICAgICAgICZCQUNLRU5ELT5jYWNlcnQsCi0gICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPmNybCwKLSAgICAgICAgICAgICAgICAgICBob3N0bmFtZSk7Ci0KLSAgc3NsX3NldF9vd25fY2VydF9yc2EoJkJBQ0tFTkQtPnNzbCwKLSAgICAgICAgICAgICAgICAgICAgICAgJkJBQ0tFTkQtPmNsaWNlcnQsICZCQUNLRU5ELT5yc2EpOwotCi0gIGlmKHNzbF9zZXRfaG9zdG5hbWUoJkJBQ0tFTkQtPnNzbCwgaG9zdG5hbWUpKSB7Ci0gICAgLyogc3NsX3NldF9ob3N0bmFtZSgpIHNldHMgdGhlIG5hbWUgdG8gdXNlIGluIENOL1NBTiBjaGVja3MgKmFuZCogdGhlIG5hbWUKLSAgICAgICB0byBzZXQgaW4gdGhlIFNOSSBleHRlbnNpb24uIFNvIGV2ZW4gaWYgY3VybCBjb25uZWN0cyB0byBhIGhvc3QKLSAgICAgICBzcGVjaWZpZWQgYXMgYW4gSVAgYWRkcmVzcywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQuICovCi0gICAgZmFpbGYoZGF0YSwgImNvdWxkbid0IHNldCBob3N0bmFtZSBpbiBQb2xhclNTTCIpOwotICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgfQotCi0jaWZkZWYgSEFTX0FMUE4KLSAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqcHJvdG9jb2xzWzNdOwotICAgIGludCBjdXIgPSAwOwotCi0jaWZkZWYgVVNFX05HSFRUUDIKLSAgICBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMikgewotICAgICAgcHJvdG9jb2xzW2N1cisrXSA9IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRDsKLSAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHByb3RvY29sc1tjdXIrK10gPSBBTFBOX0hUVFBfMV8xOwotICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgQUxQTl9IVFRQXzFfMSk7Ci0KLSAgICBwcm90b2NvbHNbY3VyXSA9IE5VTEw7Ci0KLSAgICBzc2xfc2V0X2FscG5fcHJvdG9jb2xzKCZCQUNLRU5ELT5zc2wsIHByb3RvY29scyk7Ci0gIH0KLSNlbmRpZgotCi0jaWZkZWYgUE9MQVJTU0xfREVCVUcKLSAgc3NsX3NldF9kYmcoJkJBQ0tFTkQtPnNzbCwgcG9sYXJzc2xfZGVidWcsIGRhdGEpOwotI2VuZGlmCi0KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzI7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUKLXBvbGFyc3NsX2Nvbm5lY3Rfc3RlcDIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQotewotICBpbnQgcmV0OwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGNoYXIgYnVmZmVyWzEwMjRdOwotICBjb25zdCBjaGFyICogY29uc3QgcGlubmVkcHVia2V5ID0gU1NMX0lTX1BST1hZKCkgPwotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9QUk9YWV0gOgotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXTsKLQotCi0gIGNoYXIgZXJyb3JidWZbMTI4XTsKLSAgZXJyb3JidWZbMF0gPSAwOwotCi0gIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IHBvbGFyc3NsX3JlY3Y7Ci0gIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IHBvbGFyc3NsX3NlbmQ7Ci0KLSAgcmV0ID0gc3NsX2hhbmRzaGFrZSgmQkFDS0VORC0+c3NsKTsKLQotICBzd2l0Y2gocmV0KSB7Ci0gIGNhc2UgMDoKLSAgICBicmVhazsKLQotICBjYXNlIFBPTEFSU1NMX0VSUl9ORVRfV0FOVF9SRUFEOgotICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmc7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotCi0gIGNhc2UgUE9MQVJTU0xfRVJSX05FVF9XQU5UX1dSSVRFOgotICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yX3dyaXRpbmc7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotCi0gIGRlZmF1bHQ6Ci0gICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0gICAgZmFpbGYoZGF0YSwgInNzbF9oYW5kc2hha2UgcmV0dXJuZWQgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAtcmV0LCBlcnJvcmJ1Zik7Ci0gICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICB9Ci0KLSAgaW5mb2YoZGF0YSwgIlBvbGFyU1NMOiBIYW5kc2hha2UgY29tcGxldGUsIGNpcGhlciBpcyAlc1xuIiwKLSAgICAgICAgc3NsX2dldF9jaXBoZXJzdWl0ZSgmQkFDS0VORC0+c3NsKSApOwotCi0gIHJldCA9IHNzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgmQkFDS0VORC0+c3NsKTsKLQotICBpZihyZXQgJiYgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7Ci0gICAgaWYocmV0ICYgQkFEQ0VSVF9FWFBJUkVEKQotICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9FWFBJUkVEIik7Ci0KLSAgICBpZihyZXQgJiBCQURDRVJUX1JFVk9LRUQpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJDZXJ0IHZlcmlmeSBmYWlsZWQ6IEJBRENFUlRfUkVWT0tFRCIpOwotICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSAgICB9Ci0KLSAgICBpZihyZXQgJiBCQURDRVJUX0NOX01JU01BVENIKQotICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9DTl9NSVNNQVRDSCIpOwotCi0gICAgaWYocmV0ICYgQkFEQ0VSVF9OT1RfVFJVU1RFRCkKLSAgICAgIGZhaWxmKGRhdGEsICJDZXJ0IHZlcmlmeSBmYWlsZWQ6IEJBRENFUlRfTk9UX1RSVVNURUQiKTsKLQotICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047Ci0gIH0KLQotICBpZihzc2xfZ2V0X3BlZXJfY2VydCgmKEJBQ0tFTkQtPnNzbCkpKSB7Ci0gICAgLyogSWYgdGhlIHNlc3Npb24gd2FzIHJlc3VtZWQsIHRoZXJlIHdpbGwgYmUgbm8gcGVlciBjZXJ0cyAqLwotICAgIG1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKLQotICAgIGlmKHg1MDlfY3J0X2luZm8oYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgKGNoYXIgKikiKiAiLAotICAgICAgICAgICAgICAgICAgICAgc3NsX2dldF9wZWVyX2NlcnQoJihCQUNLRU5ELT5zc2wpKSkgIT0gLTEpCi0gICAgICBpbmZvZihkYXRhLCAiRHVtcGluZyBjZXJ0IGluZm86XG4lc1xuIiwgYnVmZmVyKTsKLSAgfQotCi0gIC8qIGFkYXB0ZWQgZnJvbSBtYmVkdGxzLmMgKi8KLSAgaWYocGlubmVkcHVia2V5KSB7Ci0gICAgaW50IHNpemU7Ci0gICAgQ1VSTGNvZGUgcmVzdWx0OwotICAgIHg1MDlfY3J0ICpwOwotICAgIHVuc2lnbmVkIGNoYXIgcHVia2V5W1BVQl9ERVJfTUFYX0JZVEVTXTsKLSAgICBjb25zdCB4NTA5X2NydCAqcGVlcmNlcnQ7Ci0KLSAgICBwZWVyY2VydCA9IHNzbF9nZXRfcGVlcl9jZXJ0KCZCQUNLRU5ELT5zc2wpOwotCi0gICAgaWYoIXBlZXJjZXJ0IHx8ICFwZWVyY2VydC0+cmF3LnAgfHwgIXBlZXJjZXJ0LT5yYXcubGVuKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIGR1ZSB0byBtaXNzaW5nIHBlZXIgY2VydGlmaWNhdGUiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgcCA9IGNhbGxvYygxLCBzaXplb2YoKnApKTsKLQotICAgIGlmKCFwKQotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0KLSAgICB4NTA5X2NydF9pbml0KHApOwotCi0gICAgLyogTWFrZSBhIGNvcHkgb2Ygb3VyIGNvbnN0IHBlZXJjZXJ0IGJlY2F1c2UgcGtfd3JpdGVfcHVia2V5X2RlcgotICAgICAgIG5lZWRzIGEgbm9uLWNvbnN0IGtleSwgZm9yIG5vdy4KLSAgICAgICBodHRwczovL2dpdGh1Yi5jb20vQVJNbWJlZC9tYmVkdGxzL2lzc3Vlcy8zOTYgKi8KLSAgICBpZih4NTA5X2NydF9wYXJzZV9kZXIocCwgcGVlcmNlcnQtPnJhdy5wLCBwZWVyY2VydC0+cmF3LmxlbikpIHsKLSAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgY29weWluZyBwZWVyIGNlcnRpZmljYXRlIik7Ci0gICAgICB4NTA5X2NydF9mcmVlKHApOwotICAgICAgZnJlZShwKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgc2l6ZSA9IHBrX3dyaXRlX3B1YmtleV9kZXIoJnAtPnBrLCBwdWJrZXksIFBVQl9ERVJfTUFYX0JZVEVTKTsKLQotICAgIGlmKHNpemUgPD0gMCkgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBjb3B5aW5nIHB1YmxpYyBrZXkgZnJvbSBwZWVyIGNlcnRpZmljYXRlIik7Ci0gICAgICB4NTA5X2NydF9mcmVlKHApOwotICAgICAgZnJlZShwKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgfQotCi0gICAgLyogcGtfd3JpdGVfcHVia2V5X2RlciB3cml0ZXMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICovCi0gICAgcmVzdWx0ID0gQ3VybF9waW5fcGVlcl9wdWJrZXkoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRwdWJrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnB1YmtleVtQVUJfREVSX01BWF9CWVRFUyAtIHNpemVdLCBzaXplKTsKLSAgICBpZihyZXN1bHQpIHsKLSAgICAgIHg1MDlfY3J0X2ZyZWUocCk7Ci0gICAgICBmcmVlKHApOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB4NTA5X2NydF9mcmVlKHApOwotICAgIGZyZWUocCk7Ci0gIH0KLQotI2lmZGVmIEhBU19BTFBOCi0gIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7Ci0gICAgY29uc3QgY2hhciAqbmV4dF9wcm90b2NvbCA9IHNzbF9nZXRfYWxwbl9wcm90b2NvbCgmQkFDS0VORC0+c3NsKTsKLQotICAgIGlmKG5leHRfcHJvdG9jb2wgIT0gTlVMTCkgewotICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJXNcbiIsIG5leHRfcHJvdG9jb2wpOwotCi0jaWZkZWYgVVNFX05HSFRUUDIKLSAgICAgIGlmKCFzdHJuY21wKG5leHRfcHJvdG9jb2wsIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRCwKLSAgICAgICAgICAgICAgICAgIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4pKSB7Ci0gICAgICAgIGNvbm4tPm5lZ25wbiA9IENVUkxfSFRUUF9WRVJTSU9OXzI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgaWYoIXN0cm5jbXAobmV4dF9wcm90b2NvbCwgQUxQTl9IVFRQXzFfMSwgQUxQTl9IVFRQXzFfMV9MRU5HVEgpKSB7Ci0gICAgICAgICAgY29ubi0+bmVnbnBuID0gQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBzZXJ2ZXIgZGlkIG5vdCBhZ3JlZSB0byBhIHByb3RvY29sXG4iKTsKLSAgICBDdXJsX211bHRpdXNlX3N0YXRlKGNvbm4sIGNvbm4tPm5lZ25wbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yID8KLSAgICAgICAgICAgICAgICAgICAgICAgIEJVTkRMRV9NVUxUSVBMRVggOiBCVU5ETEVfTk9fTVVMVElVU0UpOwotICB9Ci0jZW5kaWYKLQotICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMzsKLSAgaW5mb2YoZGF0YSwgIlNTTCBjb25uZWN0ZWRcbiIpOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIENVUkxjb2RlCi1wb2xhcnNzbF9jb25uZWN0X3N0ZXAzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKLXsKLSAgQ1VSTGNvZGUgcmV0Y29kZSA9IENVUkxFX09LOwotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKLQotICBpZihTU0xfU0VUX09QVElPTihwcmltYXJ5LnNlc3Npb25pZCkpIHsKLSAgICBpbnQgcmV0OwotICAgIHNzbF9zZXNzaW9uICpvdXJfc3NsX3Nlc3Npb25pZDsKLSAgICB2b2lkICpvbGRfc3NsX3Nlc3Npb25pZCA9IE5VTEw7Ci0KLSAgICBvdXJfc3NsX3Nlc3Npb25pZCA9IGNhbGxvYygxLCBzaXplb2Yoc3NsX3Nlc3Npb24pKTsKLSAgICBpZighb3VyX3NzbF9zZXNzaW9uaWQpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLQotICAgIHJldCA9IHNzbF9nZXRfc2Vzc2lvbigmQkFDS0VORC0+c3NsLCBvdXJfc3NsX3Nlc3Npb25pZCk7Ci0gICAgaWYocmV0KSB7Ci0gICAgICBmYWlsZihkYXRhLCAic3NsX2dldF9zZXNzaW9uIHJldHVybmVkIC0weCV4IiwgLXJldCk7Ci0gICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgfQotCi0gICAgLyogSWYgdGhlcmUncyBhbHJlYWR5IGEgbWF0Y2hpbmcgc2Vzc2lvbiBpbiB0aGUgY2FjaGUsIGRlbGV0ZSBpdCAqLwotICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zc2xfc2Vzc2lvbmlkLCBOVUxMLCBzb2NraW5kZXgpKQotICAgICAgQ3VybF9zc2xfZGVsc2Vzc2lvbmlkKGNvbm4sIG9sZF9zc2xfc2Vzc2lvbmlkKTsKLQotICAgIHJldGNvZGUgPSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgb3VyX3NzbF9zZXNzaW9uaWQsIDAsIHNvY2tpbmRleCk7Ci0gICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKLSAgICBpZihyZXRjb2RlKSB7Ci0gICAgICBmcmVlKG91cl9zc2xfc2Vzc2lvbmlkKTsKLSAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgdG8gc3RvcmUgc3NsIHNlc3Npb24iKTsKLSAgICAgIHJldHVybiByZXRjb2RlOwotICAgIH0KLSAgfQotCi0gIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF9kb25lOwotCi0gIHJldHVybiBDVVJMRV9PSzsKLX0KLQotc3RhdGljIHNzaXplX3QgcG9sYXJzc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQotewotICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLSAgaW50IHJldCA9IC0xOwotCi0gIHJldCA9IHNzbF93cml0ZSgmQkFDS0VORC0+c3NsLAotICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKiltZW0sIGxlbik7Ci0KLSAgaWYocmV0IDwgMCkgewotICAgICpjdXJsY29kZSA9IChyZXQgPT0gUE9MQVJTU0xfRVJSX05FVF9XQU5UX1dSSVRFKSA/Ci0gICAgICBDVVJMRV9BR0FJTiA6IENVUkxFX1NFTkRfRVJST1I7Ci0gICAgcmV0ID0gLTE7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBDdXJsX3BvbGFyc3NsX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKLXsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIHJzYV9mcmVlKCZCQUNLRU5ELT5yc2EpOwotICB4NTA5X2NydF9mcmVlKCZCQUNLRU5ELT5jbGljZXJ0KTsKLSAgeDUwOV9jcnRfZnJlZSgmQkFDS0VORC0+Y2FjZXJ0KTsKLSAgeDUwOV9jcmxfZnJlZSgmQkFDS0VORC0+Y3JsKTsKLSAgc3NsX2ZyZWUoJkJBQ0tFTkQtPnNzbCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBvbGFyc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCi17Ci0gIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtudW1dOwotICBpbnQgcmV0ID0gLTE7Ci0gIHNzaXplX3QgbGVuID0gLTE7Ci0KLSAgbWVtc2V0KGJ1ZiwgMCwgYnVmZmVyc2l6ZSk7Ci0gIHJldCA9IHNzbF9yZWFkKCZCQUNLRU5ELT5zc2wsICh1bnNpZ25lZCBjaGFyICopYnVmLCBidWZmZXJzaXplKTsKLQotICBpZihyZXQgPD0gMCkgewotICAgIGlmKHJldCA9PSBQT0xBUlNTTF9FUlJfU1NMX1BFRVJfQ0xPU0VfTk9USUZZKQotICAgICAgcmV0dXJuIDA7Ci0KLSAgICAqY3VybGNvZGUgPSAocmV0ID09IFBPTEFSU1NMX0VSUl9ORVRfV0FOVF9SRUFEKSA/Ci0gICAgICBDVVJMRV9BR0FJTiA6IENVUkxFX1JFQ1ZfRVJST1I7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgbGVuID0gcmV0OwotCi0gIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyB2b2lkIEN1cmxfcG9sYXJzc2xfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cikKLXsKLSAgc3NsX3Nlc3Npb25fZnJlZShwdHIpOwotICBmcmVlKHB0cik7Ci19Ci0KLS8qIDEuMy4xMCB3YXMgdGhlIGZpcnN0IHJlYnJhbmRlZCB2ZXJzaW9uLiBBbGwgbmV3IHJlbGVhc2VzIChpbiAxLjMgYnJhbmNoIGFuZAotICAgaGlnaGVyKSB3aWxsIGJlIG1iZWQgVExTIGJyYW5kZWQuLiAqLwotCi1zdGF0aWMgc2l6ZV90IEN1cmxfcG9sYXJzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQotewotICB1bnNpZ25lZCBpbnQgdmVyc2lvbiA9IHZlcnNpb25fZ2V0X251bWJlcigpOwotICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzLyVkLiVkLiVkIiwKLSAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID49IDB4MDEwMzBBMDA/Im1iZWRUTFMiOiJQb2xhclNTTCIsCi0gICAgICAgICAgICAgICAgICAgdmVyc2lvbj4+MjQsICh2ZXJzaW9uPj4xNikmMHhmZiwgKHZlcnNpb24+PjgpJjB4ZmYpOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUKLXBvbGFyc3NsX2Nvbm5lY3RfY29tbW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vbmJsb2NraW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKLXsKLSAgQ1VSTGNvZGUgcmVzdWx0OwotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0gIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwotICBsb25nIHRpbWVvdXRfbXM7Ci0gIGludCB3aGF0OwotCi0gIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KLSAgaWYoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubnNzbC0+c3RhdGUpIHsKLSAgICAqZG9uZSA9IFRSVUU7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotICB9Ci0KLSAgaWYoc3NsX2Nvbm5lY3RfMSA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7Ci0gICAgLyogRmluZCBvdXQgaG93IG11Y2ggbW9yZSB0aW1lIHdlJ3JlIGFsbG93ZWQgKi8KLSAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKLQotICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7Ci0gICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwotICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKLSAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gcG9sYXJzc2xfY29ubmVjdF9zdGVwMShjb25uLCBzb2NraW5kZXgpOwotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICB3aGlsZShzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKLQotICAgIC8qIGNoZWNrIGFsbG93ZWQgdGltZSBsZWZ0ICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7Ci0KLSAgICBpZih0aW1lb3V0X21zIDwgMCkgewotICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KLSAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7Ci0gICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwotICAgIH0KLQotICAgIC8qIGlmIHNzbCBpcyBleHBlY3Rpbmcgc29tZXRoaW5nLCBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZS4gKi8KLSAgICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfcmVhZGluZyB8fAotICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl93cml0aW5nKSB7Ci0KLSAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCA9IHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PQotICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7Ci0gICAgICBjdXJsX3NvY2tldF90IHJlYWRmZCA9IHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PQotICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7Ci0KLSAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOwotICAgICAgaWYod2hhdCA8IDApIHsKLSAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KLSAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7Ci0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoMCA9PSB3aGF0KSB7Ci0gICAgICAgIGlmKG5vbmJsb2NraW5nKSB7Ci0gICAgICAgICAgKmRvbmUgPSBGQUxTRTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgLyogdGltZW91dCAqLwotICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCi0gICAgfQotCi0gICAgLyogUnVuIHRyYW5zYWN0aW9uLCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgaWYgaXQgZmFpbGVkIG9yIGlmCi0gICAgICogdGhpcyBjb25uZWN0aW9uIGlzIHBhcnQgb2YgYSBtdWx0aSBoYW5kbGUgYW5kIHRoaXMgbG9vcCB3b3VsZAotICAgICAqIGV4ZWN1dGUgYWdhaW4uIFRoaXMgcGVybWl0cyB0aGUgb3duZXIgb2YgYSBtdWx0aSBoYW5kbGUgdG8KLSAgICAgKiBhYm9ydCBhIGNvbm5lY3Rpb24gYXR0ZW1wdCBiZWZvcmUgc3RlcDIgaGFzIGNvbXBsZXRlZCB3aGlsZQotICAgICAqIGVuc3VyaW5nIHRoYXQgYSBjbGllbnQgdXNpbmcgc2VsZWN0KCkgb3IgZXBvbGwoKSB3aWxsIGFsd2F5cwotICAgICAqIGhhdmUgYSB2YWxpZCBmZHNldCB0byB3YWl0IG9uLgotICAgICAqLwotICAgIHJlc3VsdCA9IHBvbGFyc3NsX2Nvbm5lY3Rfc3RlcDIoY29ubiwgc29ja2luZGV4KTsKLSAgICBpZihyZXN1bHQgfHwgKG5vbmJsb2NraW5nICYmCi0gICAgICAgICAgICAgICAgICAoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8Ci0gICAgICAgICAgICAgICAgICAgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKLSAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkpKQotICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICB9IC8qIHJlcGVhdCBzdGVwMiB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIGFyZSBkb25lLiAqLwotCi0gIGlmKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewotICAgIHJlc3VsdCA9IHBvbGFyc3NsX2Nvbm5lY3Rfc3RlcDMoY29ubiwgc29ja2luZGV4KTsKLSAgICBpZihyZXN1bHQpCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgaWYoc3NsX2Nvbm5lY3RfZG9uZSA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7Ci0gICAgY29ubnNzbC0+c3RhdGUgPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZTsKLSAgICBjb25uLT5yZWN2W3NvY2tpbmRleF0gPSBwb2xhcnNzbF9yZWN2OwotICAgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IHBvbGFyc3NsX3NlbmQ7Ci0gICAgKmRvbmUgPSBUUlVFOwotICB9Ci0gIGVsc2UKLSAgICAqZG9uZSA9IEZBTFNFOwotCi0gIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KLSAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9wb2xhcnNzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwgYm9vbCAqZG9uZSkKLXsKLSAgcmV0dXJuIHBvbGFyc3NsX2Nvbm5lY3RfY29tbW9uKGNvbm4sIHNvY2tpbmRleCwgVFJVRSwgZG9uZSk7Ci19Ci0KLQotc3RhdGljIENVUkxjb2RlIEN1cmxfcG9sYXJzc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCi17Ci0gIENVUkxjb2RlIHJlc3VsdDsKLSAgYm9vbCBkb25lID0gRkFMU0U7Ci0KLSAgcmVzdWx0ID0gcG9sYXJzc2xfY29ubmVjdF9jb21tb24oY29ubiwgc29ja2luZGV4LCBGQUxTRSwgJmRvbmUpOwotICBpZihyZXN1bHQpCi0gICAgcmV0dXJuIHJlc3VsdDsKLQotICBERUJVR0FTU0VSVChkb25lKTsKLQotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLS8qCi0gKiByZXR1cm4gMCBlcnJvciBpbml0aWFsaXppbmcgU1NMCi0gKiByZXR1cm4gMSBTU0wgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Ci0gKi8KLXN0YXRpYyBpbnQgQ3VybF9wb2xhcnNzbF9pbml0KHZvaWQpCi17Ci0gIHJldHVybiBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfc2V0dXAoKTsKLX0KLQotc3RhdGljIHZvaWQgQ3VybF9wb2xhcnNzbF9jbGVhbnVwKHZvaWQpCi17Ci0gICh2b2lkKUN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3RocmVhZF9jbGVhbnVwKCk7Ci19Ci0KLXN0YXRpYyBib29sIEN1cmxfcG9sYXJzc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCi17Ci0gIGNvbnN0IHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwotICByZXR1cm4gc3NsX2dldF9ieXRlc19hdmFpbCgmQkFDS0VORC0+c3NsKSAhPSAwOwotfQotCi1zdGF0aWMgQ1VSTGNvZGUgQ3VybF9wb2xhcnNzbF9zaGEyNTZzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzaGEyNTZzdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2hhMjU2bGVuIFVOVVNFRF9QQVJBTSkKLXsKLSAgKHZvaWQpc2hhMjU2bGVuOwotICBzaGEyNTYoaW5wdXQsIGlucHV0bGVuLCBzaGEyNTZzdW0sIDApOwotICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkICpDdXJsX3BvbGFyc3NsX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPIGluZm8gVU5VU0VEX1BBUkFNKQotewotICAodm9pZClpbmZvOwotICByZXR1cm4gJkJBQ0tFTkQtPnNzbDsKLX0KLQotY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX3BvbGFyc3NsID0gewotICB7IENVUkxTU0xCQUNLRU5EX1BPTEFSU1NMLCAicG9sYXJzc2wiIH0sIC8qIGluZm8gKi8KLQotICBTU0xTVVBQX0NBX1BBVEggfAotICBTU0xTVVBQX1BJTk5FRFBVQktFWSwKLQotICBzaXplb2Yoc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEpLAotCi0gIEN1cmxfcG9sYXJzc2xfaW5pdCwgICAgICAgICAgICAgICAgLyogaW5pdCAqLwotICBDdXJsX3BvbGFyc3NsX2NsZWFudXAsICAgICAgICAgICAgIC8qIGNsZWFudXAgKi8KLSAgQ3VybF9wb2xhcnNzbF92ZXJzaW9uLCAgICAgICAgICAgICAvKiB2ZXJzaW9uICovCi0gIEN1cmxfbm9uZV9jaGVja19jeG4sICAgICAgICAgICAgICAgLyogY2hlY2tfY3huICovCi0gIEN1cmxfbm9uZV9zaHV0ZG93biwgICAgICAgICAgICAgICAgLyogc2h1dGRvd24gKi8KLSAgQ3VybF9wb2xhcnNzbF9kYXRhX3BlbmRpbmcsICAgICAgICAvKiBkYXRhX3BlbmRpbmcgKi8KLSAgLyogVGhpcyBtaWdodCBjYXVzZSBsaWJjdXJsIHRvIHVzZSBhIHdlZWtlciByYW5kb20hICovCi0gIEN1cmxfbm9uZV9yYW5kb20sICAgICAgICAgICAgICAgICAgLyogcmFuZG9tICovCi0gIEN1cmxfbm9uZV9jZXJ0X3N0YXR1c19yZXF1ZXN0LCAgICAgLyogY2VydF9zdGF0dXNfcmVxdWVzdCAqLwotICBDdXJsX3BvbGFyc3NsX2Nvbm5lY3QsICAgICAgICAgICAgIC8qIGNvbm5lY3QgKi8KLSAgQ3VybF9wb2xhcnNzbF9jb25uZWN0X25vbmJsb2NraW5nLCAvKiBjb25uZWN0X25vbmJsb2NraW5nICovCi0gIEN1cmxfcG9sYXJzc2xfZ2V0X2ludGVybmFscywgICAgICAgLyogZ2V0X2ludGVybmFscyAqLwotICBDdXJsX3BvbGFyc3NsX2Nsb3NlLCAgICAgICAgICAgICAgIC8qIGNsb3NlX29uZSAqLwotICBDdXJsX25vbmVfY2xvc2VfYWxsLCAgICAgICAgICAgICAgIC8qIGNsb3NlX2FsbCAqLwotICBDdXJsX3BvbGFyc3NsX3Nlc3Npb25fZnJlZSwgICAgICAgIC8qIHNlc3Npb25fZnJlZSAqLwotICBDdXJsX25vbmVfc2V0X2VuZ2luZSwgICAgICAgICAgICAgIC8qIHNldF9lbmdpbmUgKi8KLSAgQ3VybF9ub25lX3NldF9lbmdpbmVfZGVmYXVsdCwgICAgICAvKiBzZXRfZW5naW5lX2RlZmF1bHQgKi8KLSAgQ3VybF9ub25lX2VuZ2luZXNfbGlzdCwgICAgICAgICAgICAvKiBlbmdpbmVzX2xpc3QgKi8KLSAgQ3VybF9ub25lX2ZhbHNlX3N0YXJ0LCAgICAgICAgICAgICAvKiBmYWxzZV9zdGFydCAqLwotICBDdXJsX25vbmVfbWQ1c3VtLCAgICAgICAgICAgICAgICAgIC8qIG1kNXN1bSAqLwotICBDdXJsX3BvbGFyc3NsX3NoYTI1NnN1bSAgICAgICAgICAgIC8qIHNoYTI1NnN1bSAqLwotfTsKLQotI2VuZGlmIC8qIFVTRV9QT0xBUlNTTCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbC5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2MzNjM2Li4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSNpZm5kZWYgSEVBREVSX0NVUkxfUE9MQVJTU0xfSAotI2RlZmluZSBIRUFERVJfQ1VSTF9QT0xBUlNTTF9ICi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiY3VybF9zZXR1cC5oIgotCi0jaWZkZWYgVVNFX1BPTEFSU1NMCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgQ3VybF9zc2xfcG9sYXJzc2w7Ci0KLSNlbmRpZiAvKiBVU0VfUE9MQVJTU0wgKi8KLSNlbmRpZiAvKiBIRUFERVJfQ1VSTF9QT0xBUlNTTF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsX3RocmVhZGxvY2suYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2M5NGIxLi4wMDAwMDAwCi0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiY3VybF9zZXR1cC5oIgotCi0jaWYgKGRlZmluZWQoVVNFX1BPTEFSU1NMKSB8fCBkZWZpbmVkKFVTRV9NQkVEVExTKSkgJiYgXAotICAgICgoZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkpIHx8IFwKLSAgICAgKGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpKSkKLQotI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCi0jICBpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jICBkZWZpbmUgUE9MQVJTU0xfTVVURVhfVCBwdGhyZWFkX211dGV4X3QKLSNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCi0jICBpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jICBkZWZpbmUgUE9MQVJTU0xfTVVURVhfVCBIQU5ETEUKLSNlbmRpZgotCi0jaW5jbHVkZSAicG9sYXJzc2xfdGhyZWFkbG9jay5oIgotI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCi0jaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKLS8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwotI2luY2x1ZGUgIm1lbWRlYnVnLmgiCi0KLS8qIG51bWJlciBvZiB0aHJlYWQgbG9ja3MgKi8KLSNkZWZpbmUgTlVNVCAgICAgICAgICAgICAgICAgICAgMgotCi0vKiBUaGlzIGFycmF5IHdpbGwgc3RvcmUgYWxsIG9mIHRoZSBtdXRleGVzIGF2YWlsYWJsZSB0byBQb2xhclNTTC4gKi8KLXN0YXRpYyBQT0xBUlNTTF9NVVRFWF9UICptdXRleF9idWYgPSBOVUxMOwotCi1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX3NldHVwKHZvaWQpCi17Ci0gIGludCBpOwotCi0gIG11dGV4X2J1ZiA9IGNhbGxvYyhOVU1UICogc2l6ZW9mKFBPTEFSU1NMX01VVEVYX1QpLCAxKTsKLSAgaWYoIW11dGV4X2J1ZikKLSAgICByZXR1cm4gMDsgICAgIC8qIGVycm9yLCBubyBudW1iZXIgb2YgdGhyZWFkcyBkZWZpbmVkICovCi0KLSAgZm9yKGkgPSAwOyAgaSA8IE5VTVQ7ICBpKyspIHsKLSAgICBpbnQgcmV0OwotI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCi0gICAgcmV0ID0gcHRocmVhZF9tdXRleF9pbml0KCZtdXRleF9idWZbaV0sIE5VTEwpOwotICAgIGlmKHJldCkKLSAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2luaXQgZmFpbGVkICovCi0jZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKSAmJiBkZWZpbmVkKEhBVkVfUFJPQ0VTU19IKQotICAgIG11dGV4X2J1ZltpXSA9IENyZWF0ZU11dGV4KDAsIEZBTFNFLCAwKTsKLSAgICBpZihtdXRleF9idWZbaV0gPT0gMCkKLSAgICAgIHJldHVybiAwOyAgLyogQ3JlYXRlTXV0ZXggZmFpbGVkICovCi0jZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KLSAgfQotCi0gIHJldHVybiAxOyAvKiBPSyAqLwotfQotCi1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX2NsZWFudXAodm9pZCkKLXsKLSAgaW50IGk7Ci0KLSAgaWYoIW11dGV4X2J1ZikKLSAgICByZXR1cm4gMDsgLyogZXJyb3IsIG5vIHRocmVhZHMgbG9ja3MgZGVmaW5lZCAqLwotCi0gIGZvcihpID0gMDsgaSA8IE5VTVQ7IGkrKykgewotICAgIGludCByZXQ7Ci0jaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkgJiYgZGVmaW5lZChIQVZFX1BUSFJFQURfSCkKLSAgICByZXQgPSBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm11dGV4X2J1ZltpXSk7Ci0gICAgaWYocmV0KQotICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSBmYWlsZWQgKi8KLSNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCi0gICAgcmV0ID0gQ2xvc2VIYW5kbGUobXV0ZXhfYnVmW2ldKTsKLSAgICBpZighcmV0KQotICAgICAgcmV0dXJuIDA7IC8qIENsb3NlSGFuZGxlIGZhaWxlZCAqLwotI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCi0gIH0KLSAgZnJlZShtdXRleF9idWYpOwotICBtdXRleF9idWYgPSBOVUxMOwotCi0gIHJldHVybiAxOyAvKiBPSyAqLwotfQotCi1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbihpbnQgbikKLXsKLSAgaWYobiA8IE5VTVQpIHsKLSAgICBpbnQgcmV0OwotI2lmIGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpCi0gICAgcmV0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleF9idWZbbl0pOwotICAgIGlmKHJldCkgewotICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBwb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbiBmYWlsZWRcbiIpKTsKLSAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2xvY2sgZmFpbGVkICovCi0gICAgfQotI2VsaWYgZGVmaW5lZChVU0VfVEhSRUFEU19XSU4zMikgJiYgZGVmaW5lZChIQVZFX1BST0NFU1NfSCkKLSAgICByZXQgPSAoV2FpdEZvclNpbmdsZU9iamVjdChtdXRleF9idWZbbl0sIElORklOSVRFKSA9PSBXQUlUX0ZBSUxFRD8xOjApOwotICAgIGlmKHJldCkgewotICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBwb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbiBmYWlsZWRcbiIpKTsKLSAgICAgIHJldHVybiAwOyAvKiBwdGhyZWFkX211dGV4X2xvY2sgZmFpbGVkICovCi0gICAgfQotI2VuZGlmIC8qIFVTRV9USFJFQURTX1BPU0lYICYmIEhBVkVfUFRIUkVBRF9IICovCi0gIH0KLSAgcmV0dXJuIDE7IC8qIE9LICovCi19Ci0KLWludCBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24oaW50IG4pCi17Ci0gIGlmKG4gPCBOVU1UKSB7Ci0gICAgaW50IHJldDsKLSNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSAmJiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9IKQotICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleF9idWZbbl0pOwotICAgIGlmKHJldCkgewotICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBwb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOwotICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIGZhaWxlZCAqLwotICAgIH0KLSNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpCi0gICAgcmV0ID0gUmVsZWFzZU11dGV4KG11dGV4X2J1ZltuXSk7Ci0gICAgaWYoIXJldCkgewotICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBwb2xhcnNzbHRocmVhZGxvY2tfdW5sb2NrX2Z1bmN0aW9uIGZhaWxlZFxuIikpOwotICAgICAgcmV0dXJuIDA7IC8qIHB0aHJlYWRfbXV0ZXhfbG9jayBmYWlsZWQgKi8KLSAgICB9Ci0jZW5kaWYgLyogVVNFX1RIUkVBRFNfUE9TSVggJiYgSEFWRV9QVEhSRUFEX0ggKi8KLSAgfQotICByZXR1cm4gMTsgLyogT0sgKi8KLX0KLQotI2VuZGlmIC8qIFVTRV9QT0xBUlNTTCB8fCBVU0VfTUJFRFRMUyAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9wb2xhcnNzbF90aHJlYWRsb2NrLmggYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsX3RocmVhZGxvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyNjQ3NS4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3BvbGFyc3NsX3RocmVhZGxvY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNpZm5kZWYgSEVBREVSX0NVUkxfUE9MQVJTU0xfVEhSRUFETE9DS19ICi0jZGVmaW5lIEhFQURFUl9DVVJMX1BPTEFSU1NMX1RIUkVBRExPQ0tfSAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwotICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEhvaS1IbyBDaGFuLCA8aG9paG8uY2hhbkBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLSAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgotICoKLSAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZiAoZGVmaW5lZCBVU0VfUE9MQVJTU0wpIHx8IChkZWZpbmVkIFVTRV9NQkVEVExTKQotCi0jaWYgKGRlZmluZWQoVVNFX1RIUkVBRFNfUE9TSVgpICYmIGRlZmluZWQoSEFWRV9QVEhSRUFEX0gpKSB8fCBcCi0gICAgKGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpICYmIGRlZmluZWQoSEFWRV9QUk9DRVNTX0gpKQotCi1pbnQgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX3NldHVwKHZvaWQpOwotaW50IEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3RocmVhZF9jbGVhbnVwKHZvaWQpOwotaW50IEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oaW50IG4pOwotaW50IEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbihpbnQgbik7Ci0KLSNlbHNlCi0KLSNkZWZpbmUgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfdGhyZWFkX3NldHVwKCkgMQotI2RlZmluZSBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja190aHJlYWRfY2xlYW51cCgpIDEKLSNkZWZpbmUgQ3VybF9wb2xhcnNzbHRocmVhZGxvY2tfbG9ja19mdW5jdGlvbih4KSAxCi0jZGVmaW5lIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbih4KSAxCi0KLSNlbmRpZiAvKiBVU0VfVEhSRUFEU19QT1NJWCB8fCBVU0VfVEhSRUFEU19XSU4zMiAqLwotCi0jZW5kaWYgLyogVVNFX1BPTEFSU1NMICovCi0KLSNlbmRpZiAvKiBIRUFERVJfQ1VSTF9QT0xBUlNTTF9USFJFQURMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2NoYW5uZWwuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2NoYW5uZWwuYwppbmRleCAwZjZmNzM0Li4xOTk2NTI2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NjaGFubmVsLmMKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zY2hhbm5lbC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIE1hcmMgSG9lcnNrZW4sIDxpbmZvQG1hcmMtaG9lcnNrZW4uZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIE1hcmsgU2FsaXNidXJ5LCA8bWFyay5zYWxpc2J1cnlAaHAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI3LDE2ICsyNyw2IEBACiAgKiBidXQgdnRscy5jIHNob3VsZCBldmVyIGNhbGwgb3IgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KICAqLwogCi0vKgotICogQmFzZWQgdXBvbiB0aGUgUG9sYXJTU0wgaW1wbGVtZW50YXRpb24gaW4gcG9sYXJzc2wuYyBhbmQgcG9sYXJzc2wuaDoKLSAqICAgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCBIb2ktSG8gQ2hhbiwgPGhvaWhvLmNoYW5AZ21haWwuY29tPgotICoKLSAqIEJhc2VkIHVwb24gdGhlIEN5YVNTTCBpbXBsZW1lbnRhdGlvbiBpbiBjeWFzc2wuYyBhbmQgY3lhc3NsLmg6Ci0gKiAgIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCi0gKgotICogVGhhbmtzIGZvciBjb2RlIGFuZCBpbnNwaXJhdGlvbiEKLSAqLwotCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCiAjaWZkZWYgVVNFX1NDSEFOTkVMCkBAIC00OSwxMCArMzksMTEgQEAKIAogI2luY2x1ZGUgInNjaGFubmVsLmgiCiAjaW5jbHVkZSAidnRscy5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJzZW5kZi5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIgLyogZm9yIHRoZSBjb25uZWN0IHRpbWVvdXQgKi8KICNpbmNsdWRlICJzdHJlcnJvci5oIgotI2luY2x1ZGUgInNlbGVjdC5oIiAvKiBmb3IgdGhlIHNvY2tldCByZWFkeW5lc3MgKi8KKyNpbmNsdWRlICJzZWxlY3QuaCIgLyogZm9yIHRoZSBzb2NrZXQgcmVhZGluZXNzICovCiAjaW5jbHVkZSAiaW5ldF9wdG9uLmgiIC8qIGZvciBJUCBhZGRyIFNOSSBjaGVjayAqLwogI2luY2x1ZGUgImN1cmxfbXVsdGlieXRlLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKQEAgLTYxLDcgKzUyLDcgQEAKICNpbmNsdWRlICJtdWx0aWlmLmgiCiAjaW5jbHVkZSAic3lzdGVtX3dpbjMyLmgiCiAKLSAvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIApAQCAtMTc5LDI1ICsxNzAsMjUgQEAKICAgbG9uZyBpID0gc3NsX3ZlcnNpb247CiAKICAgc3dpdGNoKHNzbF92ZXJzaW9uX21heCkgewotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9OT05FOgotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9ERUZBVUxUOgotICAgICAgc3NsX3ZlcnNpb25fbWF4ID0gQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8yOwotICAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX01BWF9OT05FOgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9NQVhfREVGQVVMVDoKKyAgICBzc2xfdmVyc2lvbl9tYXggPSBDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzI7CisgICAgYnJlYWs7CiAgIH0KICAgZm9yKDsgaSA8PSAoc3NsX3ZlcnNpb25fbWF4ID4+IDE2KTsgKytpKSB7CiAgICAgc3dpdGNoKGkpIHsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gICAgICAgIHNjaGFubmVsX2NyZWQtPmdyYml0RW5hYmxlZFByb3RvY29scyB8PSBTUF9QUk9UX1RMUzFfMF9DTElFTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKLSAgICAgICAgc2NoYW5uZWxfY3JlZC0+Z3JiaXRFbmFibGVkUHJvdG9jb2xzIHw9IFNQX1BST1RfVExTMV8xX0NMSUVOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgotICAgICAgICBzY2hhbm5lbF9jcmVkLT5ncmJpdEVuYWJsZWRQcm90b2NvbHMgfD0gU1BfUFJPVF9UTFMxXzJfQ0xJRU5UOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOwotICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKKyAgICAgIHNjaGFubmVsX2NyZWQtPmdyYml0RW5hYmxlZFByb3RvY29scyB8PSBTUF9QUk9UX1RMUzFfMF9DTElFTlQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOgorICAgICAgc2NoYW5uZWxfY3JlZC0+Z3JiaXRFbmFibGVkUHJvdG9jb2xzIHw9IFNQX1BST1RfVExTMV8xX0NMSUVOVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6CisgICAgICBzY2hhbm5lbF9jcmVkLT5ncmJpdEVuYWJsZWRQcm90b2NvbHMgfD0gU1BfUFJPVF9UTFMxXzJfQ0xJRU5UOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICAgIH0KICAgfQogICByZXR1cm4gQ1VSTEVfT0s7CkBAIC0yMDUsOSArMTk2LDkgQEAKIAogLypsb25nZXN0IGlzIDI2LCBidWZmZXIgaXMgc2xpZ2h0bHkgYmlnZ2VyKi8KICNkZWZpbmUgTE9OR0VTVF9BTEdfSUQgMzIKLSNkZWZpbmUgQ0lQSEVST1BUSU9OKFgpIFwKLWlmKHN0cmNtcCgjWCwgdG1wKSA9PSAwKSBcCi0gIHJldHVybiBYCisjZGVmaW5lIENJUEhFUk9QVElPTihYKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmKHN0cmNtcCgjWCwgdG1wKSA9PSAwKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIFgKIAogc3RhdGljIGludAogZ2V0X2FsZ19pZF9ieV9uYW1lKGNoYXIgKm5hbWUpCkBAIC0yODMsMTEgKzI3NCwxMSBAQAogI2lmZGVmIENBTEdfSE1BQwogICBDSVBIRVJPUFRJT04oQ0FMR19ITUFDKTsKICNlbmRpZgotI2lmICFkZWZpbmVkKF9fVzMyQVBJX01BSk9SX1ZFUlNJT04pIHx8IFwKLSAgICAhZGVmaW5lZChfX1czMkFQSV9NSU5PUl9WRVJTSU9OKSB8fCBcCi0gICAgZGVmaW5lZChfX01JTkdXNjRfVkVSU0lPTl9NQUpPUikgfHwgXAotICAgIChfX1czMkFQSV9NQUpPUl9WRVJTSU9OID4gNSkgICAgIHx8IFwKLSAgICAoKF9fVzMyQVBJX01BSk9SX1ZFUlNJT04gPT0gNSkgJiYgKF9fVzMyQVBJX01JTk9SX1ZFUlNJT04gPiAwKSkKKyNpZiAhZGVmaW5lZChfX1czMkFQSV9NQUpPUl9WRVJTSU9OKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIWRlZmluZWQoX19XMzJBUElfTUlOT1JfVkVSU0lPTikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZGVmaW5lZChfX01JTkdXNjRfVkVSU0lPTl9NQUpPUikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fVzMyQVBJX01BSk9SX1ZFUlNJT04gPiA1KSAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChfX1czMkFQSV9NQUpPUl9WRVJTSU9OID09IDUpICYmIChfX1czMkFQSV9NSU5PUl9WRVJTSU9OID4gMCkpCiAgIC8qIENBTEdfVExTMVBSRiBoYXMgYSBzeW50YXggZXJyb3IgaW4gTWluR1cncyB3MzJhcGkgdXAgdG8gdmVyc2lvbiA1LjAsCiAgICAgIHNlZSBodHRwczovL29zZG4ubmV0L3Byb2plY3RzL21pbmd3L3RpY2tldC8zODM5MSAqLwogICBDSVBIRVJPUFRJT04oQ0FMR19UTFMxUFJGKTsKQEAgLTM0OSw3ICszNDAsNyBAQAogICAgIGlmKHN0YXJ0Q3VyKQogICAgICAgc3RhcnRDdXIrKzsKICAgfQotICAgIHNjaGFubmVsX2NyZWQtPnBhbGdTdXBwb3J0ZWRBbGdzID0gYWxnSWRzOworICBzY2hhbm5lbF9jcmVkLT5wYWxnU3VwcG9ydGVkQWxncyA9IGFsZ0lkczsKICAgc2NoYW5uZWxfY3JlZC0+Y1N1cHBvcnRlZEFsZ3MgPSBhbGdDb3VudDsKICAgcmV0dXJuIENVUkxFX09LOwogfQpAQCAtNDM0LDggKzQyNSwxMiBAQAogI2VuZGlmCiAgIFRDSEFSICpob3N0X25hbWU7CiAgIENVUkxjb2RlIHJlc3VsdDsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKKyNlbHNlCisgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyNlbmRpZgogCiAgIERFQlVHRihpbmZvZihkYXRhLAogICAgICAgICAgICAgICAgInNjaGFubmVsOiBTU0wvVExTIGNvbm5lY3Rpb24gd2l0aCAlcyBwb3J0ICVodSAoc3RlcCAxLzMpXG4iLApAQCAtNDQzLDIwICs0MzgsMjAgQEAKIAogICBpZihDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oNSwgMSwgUExBVEZPUk1fV0lOTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX0xFU1NfVEhBTl9FUVVBTCkpIHsKLSAgICAgLyogU2NoYW5uZWwgaW4gV2luZG93cyBYUCAoT1MgdmVyc2lvbiA1LjEpIHVzZXMgbGVnYWN5IGhhbmRzaGFrZXMgYW5kCi0gICAgICAgIGFsZ29yaXRobXMgdGhhdCBtYXkgbm90IGJlIHN1cHBvcnRlZCBieSBhbGwgc2VydmVycy4gKi8KLSAgICAgaW5mb2YoZGF0YSwgInNjaGFubmVsOiBXaW5kb3dzIHZlcnNpb24gaXMgb2xkIGFuZCBtYXkgbm90IGJlIGFibGUgdG8gIgotICAgICAgICAgICAiY29ubmVjdCB0byBzb21lIHNlcnZlcnMgZHVlIHRvIGxhY2sgb2YgU05JLCBhbGdvcml0aG1zLCBldGMuXG4iKTsKKyAgICAvKiBTY2hhbm5lbCBpbiBXaW5kb3dzIFhQIChPUyB2ZXJzaW9uIDUuMSkgdXNlcyBsZWdhY3kgaGFuZHNoYWtlcyBhbmQKKyAgICAgICBhbGdvcml0aG1zIHRoYXQgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgYWxsIHNlcnZlcnMuICovCisgICAgaW5mb2YoZGF0YSwgInNjaGFubmVsOiBXaW5kb3dzIHZlcnNpb24gaXMgb2xkIGFuZCBtYXkgbm90IGJlIGFibGUgdG8gIgorICAgICAgICAgICJjb25uZWN0IHRvIHNvbWUgc2VydmVycyBkdWUgdG8gbGFjayBvZiBTTkksIGFsZ29yaXRobXMsIGV0Yy5cbiIpOwogICB9CiAKICNpZmRlZiBIQVNfQUxQTgogICAvKiBBTFBOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFdpbmRvd3MgOC4xIC8gU2VydmVyIDIwMTIgUjIgYW5kIGFib3ZlLgogICAgICBBbHNvIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBzdXBwb3J0ZWQgZm9yIFdpbmUsIHNlZSBjdXJsIGJ1ZyAjOTgzLiAqLwogICBCQUNLRU5ELT51c2VfYWxwbiA9IGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuICYmCi0gICAgICAgICAgICAgICAgICAgICAgIUdldFByb2NBZGRyZXNzKEdldE1vZHVsZUhhbmRsZUEoIm50ZGxsIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aW5lX2dldF92ZXJzaW9uIikgJiYKLSAgICAgICAgICAgICAgICAgICAgICBDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oNiwgMywgUExBVEZPUk1fV0lOTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNJT05fR1JFQVRFUl9USEFOX0VRVUFMKTsKKyAgICAhR2V0UHJvY0FkZHJlc3MoR2V0TW9kdWxlSGFuZGxlQSgibnRkbGwiKSwKKyAgICAgICAgICAgICAgICAgICAgIndpbmVfZ2V0X3ZlcnNpb24iKSAmJgorICAgIEN1cmxfdmVyaWZ5X3dpbmRvd3NfdmVyc2lvbig2LCAzLCBQTEFURk9STV9XSU5OVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9HUkVBVEVSX1RIQU5fRVFVQUwpOwogI2Vsc2UKICAgQkFDS0VORC0+dXNlX2FscG4gPSBmYWxzZTsKICNlbmRpZgpAQCAtNTMwLDggKzUyNSwxNSBAQAogICAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgInNjaGFubmVsOiBkaXNhYmxlZCBzZXJ2ZXIgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAiY2hlY2tzXG4iKSk7CiAgICAgICB9CisgICAgICBlbHNlIGlmKGRhdGEtPnNldC5zc2wucmV2b2tlX2Jlc3RfZWZmb3J0KSB7CisgICAgICAgIHNjaGFubmVsX2NyZWQuZHdGbGFncyB8PSBTQ0hfQ1JFRF9JR05PUkVfTk9fUkVWT0NBVElPTl9DSEVDSyB8CisgICAgICAgICAgU0NIX0NSRURfSUdOT1JFX1JFVk9DQVRJT05fT0ZGTElORSB8IFNDSF9DUkVEX1JFVk9DQVRJT05fQ0hFQ0tfQ0hBSU47CisKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJzY2hhbm5lbDogaWdub3JlIHJldm9jYXRpb24gb2ZmbGluZSBlcnJvcnMiKSk7CisgICAgICB9CiAgICAgICBlbHNlIHsKICAgICAgICAgc2NoYW5uZWxfY3JlZC5kd0ZsYWdzIHw9IFNDSF9DUkVEX1JFVk9DQVRJT05fQ0hFQ0tfQ0hBSU47CisKICAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAic2NoYW5uZWw6IGNoZWNraW5nIHNlcnZlciBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uXG4iKSk7CiAgICAgICB9CkBAIC01NTQsMjAgKzU1NiwxNiBAQAogICAgIHN3aXRjaChjb25uLT5zc2xfY29uZmlnLnZlcnNpb24pIHsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotICAgICAgc2NoYW5uZWxfY3JlZC5ncmJpdEVuYWJsZWRQcm90b2NvbHMgPSBTUF9QUk9UX1RMUzFfMF9DTElFTlQgfAotICAgICAgICBTUF9QUk9UX1RMUzFfMV9DTElFTlQgfAotICAgICAgICBTUF9QUk9UX1RMUzFfMl9DTElFTlQ7Ci0gICAgICBicmVhazsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOgotICAgICAgewotICAgICAgICByZXN1bHQgPSBzZXRfc3NsX3ZlcnNpb25fbWluX21heCgmc2NoYW5uZWxfY3JlZCwgY29ubik7Ci0gICAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KKyAgICB7CisgICAgICByZXN1bHQgPSBzZXRfc3NsX3ZlcnNpb25fbWluX21heCgmc2NoYW5uZWxfY3JlZCwgY29ubik7CisgICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6CiAgICAgICBzY2hhbm5lbF9jcmVkLmdyYml0RW5hYmxlZFByb3RvY29scyA9IFNQX1BST1RfU1NMM19DTElFTlQ7CiAgICAgICBicmVhazsKQEAgLTU5MCw2OCArNTg4LDE4NiBAQAogCiAjaWZkZWYgSEFTX0NMSUVOVF9DRVJUX1BBVEgKICAgICAvKiBjbGllbnQgY2VydGlmaWNhdGUgKi8KLSAgICBpZihkYXRhLT5zZXQuc3NsLmNlcnQpIHsKLSAgICAgIERXT1JEIGNlcnRfc3RvcmVfbmFtZTsKLSAgICAgIFRDSEFSICpjZXJ0X3N0b3JlX3BhdGg7Ci0gICAgICBUQ0hBUiAqY2VydF90aHVtYnByaW50X3N0cjsKKyAgICBpZihkYXRhLT5zZXQuc3NsLmNlcnQgfHwgZGF0YS0+c2V0LnNzbC5jZXJ0X2Jsb2IpIHsKKyAgICAgIERXT1JEIGNlcnRfc3RvcmVfbmFtZSA9IDA7CisgICAgICBUQ0hBUiAqY2VydF9zdG9yZV9wYXRoID0gTlVMTDsKKyAgICAgIFRDSEFSICpjZXJ0X3RodW1icHJpbnRfc3RyID0gTlVMTDsKICAgICAgIENSWVBUX0hBU0hfQkxPQiBjZXJ0X3RodW1icHJpbnQ7CiAgICAgICBCWVRFIGNlcnRfdGh1bWJwcmludF9kYXRhW0NFUlRfVEhVTUJQUklOVF9EQVRBX0xFTl07Ci0gICAgICBIQ0VSVFNUT1JFIGNlcnRfc3RvcmU7CisgICAgICBIQ0VSVFNUT1JFIGNlcnRfc3RvcmUgPSBOVUxMOworICAgICAgRklMRSAqZkluQ2VydCA9IE5VTEw7CisgICAgICB2b2lkICpjZXJ0ZGF0YSA9IE5VTEw7CisgICAgICBzaXplX3QgY2VydHNpemUgPSAwOworICAgICAgYm9vbCBibG9iID0gZGF0YS0+c2V0LnNzbC5jZXJ0X2Jsb2IgIT0gTlVMTDsKKyAgICAgIFRDSEFSICpjZXJ0X3BhdGggPSBOVUxMOworICAgICAgaWYoYmxvYikgeworICAgICAgICBjZXJ0ZGF0YSA9IGRhdGEtPnNldC5zc2wuY2VydF9ibG9iLT5kYXRhOworICAgICAgICBjZXJ0c2l6ZSA9IGRhdGEtPnNldC5zc2wuY2VydF9ibG9iLT5sZW47CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY2VydF9wYXRoID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKGRhdGEtPnNldC5zc2wuY2VydCk7CisgICAgICAgIGlmKCFjZXJ0X3BhdGgpCisgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKLSAgICAgIFRDSEFSICpjZXJ0X3BhdGggPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcihkYXRhLT5zZXQuc3NsLmNlcnQpOwotICAgICAgaWYoIWNlcnRfcGF0aCkKLSAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIHJlc3VsdCA9IGdldF9jZXJ0X2xvY2F0aW9uKGNlcnRfcGF0aCwgJmNlcnRfc3RvcmVfbmFtZSwKKyAgICAgICAgICAmY2VydF9zdG9yZV9wYXRoLCAmY2VydF90aHVtYnByaW50X3N0cik7CiAKLSAgICAgIHJlc3VsdCA9IGdldF9jZXJ0X2xvY2F0aW9uKGNlcnRfcGF0aCwgJmNlcnRfc3RvcmVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZXJ0X3N0b3JlX3BhdGgsICZjZXJ0X3RodW1icHJpbnRfc3RyKTsKLSAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykgewotICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IEZhaWxlZCB0byBnZXQgY2VydGlmaWNhdGUgbG9jYXRpb24gZm9yICVzIiwKLSAgICAgICAgICAgICAgY2VydF9wYXRoKTsKLSAgICAgICAgQ3VybF91bmljb2RlZnJlZShjZXJ0X3BhdGgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZihyZXN1bHQgJiYgKGRhdGEtPnNldC5zc2wuY2VydFswXSE9J1wwJykpCisgICAgICAgICAgZkluQ2VydCA9IGZvcGVuKGRhdGEtPnNldC5zc2wuY2VydCwgInJiIik7CisKKyAgICAgICAgaWYocmVzdWx0ICYmICFmSW5DZXJ0KSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBGYWlsZWQgdG8gZ2V0IGNlcnRpZmljYXRlIGxvY2F0aW9uIgorICAgICAgICAgICAgICAgICIgb3IgZmlsZSBmb3IgJXMiLAorICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuY2VydCk7CisgICAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoY2VydF9wYXRoKTsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIGNlcnRfc3RvcmUgPQotICAgICAgICBDZXJ0T3BlblN0b3JlKENVUkxfQ0VSVF9TVE9SRV9QUk9WX1NZU1RFTSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAoSENSWVBUUFJPVilOVUxMLAotICAgICAgICAgICAgICAgICAgICAgIENFUlRfU1RPUkVfT1BFTl9FWElTVElOR19GTEFHIHwgY2VydF9zdG9yZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNlcnRfc3RvcmVfcGF0aCk7Ci0gICAgICBpZighY2VydF9zdG9yZSkgewotICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IEZhaWxlZCB0byBvcGVuIGNlcnQgc3RvcmUgJXggJXMsICIKLSAgICAgICAgICAgICAgImxhc3QgZXJyb3IgaXMgJXgiLAotICAgICAgICAgICAgICBjZXJ0X3N0b3JlX25hbWUsIGNlcnRfc3RvcmVfcGF0aCwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICBmcmVlKGNlcnRfc3RvcmVfcGF0aCk7Ci0gICAgICAgIEN1cmxfdW5pY29kZWZyZWUoY2VydF9wYXRoKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKLSAgICAgIH0KLSAgICAgIGZyZWUoY2VydF9zdG9yZV9wYXRoKTsKLQotICAgICAgY2VydF90aHVtYnByaW50LnBiRGF0YSA9IGNlcnRfdGh1bWJwcmludF9kYXRhOwotICAgICAgY2VydF90aHVtYnByaW50LmNiRGF0YSA9IENFUlRfVEhVTUJQUklOVF9EQVRBX0xFTjsKLQotICAgICAgaWYoIUNyeXB0U3RyaW5nVG9CaW5hcnkoY2VydF90aHVtYnByaW50X3N0ciwgQ0VSVF9USFVNQlBSSU5UX1NUUl9MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9TVFJJTkdfSEVYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF90aHVtYnByaW50X2RhdGEsICZjZXJ0X3RodW1icHJpbnQuY2JEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCkpIHsKLSAgICAgICAgQ3VybF91bmljb2RlZnJlZShjZXJ0X3BhdGgpOworICAgICAgaWYoKGZJbkNlcnQgfHwgYmxvYikgJiYgKGRhdGEtPnNldC5zc2wuY2VydF90eXBlKSAmJgorICAgICAgICAgICghc3RyY2FzZWNvbXBhcmUoZGF0YS0+c2V0LnNzbC5jZXJ0X3R5cGUsICJQMTIiKSkpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBjZXJ0aWZpY2F0ZSBmb3JtYXQgY29tcGF0aWJpbGl0eSBlcnJvciAiCisgICAgICAgICAgICAgICAgIiBmb3IgJXMiLAorICAgICAgICAgICAgICAgIGJsb2IgPyAiKG1lbW9yeSBibG9iKSIgOiBkYXRhLT5zZXQuc3NsLmNlcnQpOworICAgICAgICBjdXJseF91bmljb2RlZnJlZShjZXJ0X3BhdGgpOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOwogICAgICAgfQogCi0gICAgICBjbGllbnRfY2VydHNbMF0gPSBDZXJ0RmluZENlcnRpZmljYXRlSW5TdG9yZSgKLSAgICAgICAgY2VydF9zdG9yZSwgWDUwOV9BU05fRU5DT0RJTkcgfCBQS0NTXzdfQVNOX0VOQ09ESU5HLCAwLAotICAgICAgICBDRVJUX0ZJTkRfSEFTSCwgJmNlcnRfdGh1bWJwcmludCwgTlVMTCk7CisgICAgICBpZihmSW5DZXJ0IHx8IGJsb2IpIHsKKyAgICAgICAgLyogUmVhZGluZyBhIC5QMTIgb3IgLnBmeCBmaWxlLCBsaWtlIHRoZSBleGFtcGxlIGF0IGJvdHRvbSBvZgorICAgICAgICAgICAgIGh0dHBzOi8vc29jaWFsLm1zZG4ubWljcm9zb2Z0LmNvbS9Gb3J1bXMvd2luZG93c2Rlc2t0b3AvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW4tVVMvM2U3YmM5NWYtYjIxYS00YmNkLWJkMmMtN2Y5OTY3MThjYWU1CisgICAgICAgICovCisgICAgICAgIENSWVBUX0RBVEFfQkxPQiBkYXRhYmxvYjsKKyAgICAgICAgV0NIQVIqIHBzelBhc3N3b3JkOworICAgICAgICBzaXplX3QgcHdkX2xlbiA9IDA7CisgICAgICAgIGludCBzdHJfd19sZW4gPSAwOworICAgICAgICBjb25zdCBjaGFyICpjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvciA9IGJsb2IgPworICAgICAgICAgICIobWVtb3J5IGJsb2IpIiA6IGRhdGEtPnNldC5zc2wuY2VydDsKKyAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoY2VydF9wYXRoKTsKKyAgICAgICAgaWYoZkluQ2VydCkgeworICAgICAgICAgIGxvbmcgY2VydF90ZWxsID0gMDsKKyAgICAgICAgICBib29sIGNvbnRpbnVlX3JlYWRpbmcgPSBmc2VlayhmSW5DZXJ0LCAwLCBTRUVLX0VORCkgPT0gMDsKKyAgICAgICAgICBpZihjb250aW51ZV9yZWFkaW5nKQorICAgICAgICAgICAgY2VydF90ZWxsID0gZnRlbGwoZkluQ2VydCk7CisgICAgICAgICAgaWYoY2VydF90ZWxsIDwgMCkKKyAgICAgICAgICAgIGNvbnRpbnVlX3JlYWRpbmcgPSBGQUxTRTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBjZXJ0c2l6ZSA9IChzaXplX3QpY2VydF90ZWxsOworICAgICAgICAgIGlmKGNvbnRpbnVlX3JlYWRpbmcpCisgICAgICAgICAgICBjb250aW51ZV9yZWFkaW5nID0gZnNlZWsoZkluQ2VydCwgMCwgU0VFS19TRVQpID09IDA7CisgICAgICAgICAgaWYoY29udGludWVfcmVhZGluZykKKyAgICAgICAgICAgIGNlcnRkYXRhID0gbWFsbG9jKGNlcnRzaXplICsgMSk7CisgICAgICAgICAgaWYoKCFjZXJ0ZGF0YSkgfHwKKyAgICAgICAgICAgICAoKGludCkgZnJlYWQoY2VydGRhdGEsIGNlcnRzaXplLCAxLCBmSW5DZXJ0KSAhPSAxKSkKKyAgICAgICAgICAgIGNvbnRpbnVlX3JlYWRpbmcgPSBGQUxTRTsKKyAgICAgICAgICBmY2xvc2UoZkluQ2VydCk7CisgICAgICAgICAgaWYoIWNvbnRpbnVlX3JlYWRpbmcpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogRmFpbGVkIHRvIHJlYWQgY2VydCBmaWxlICVzIiwKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmNlcnQpOworICAgICAgICAgICAgZnJlZShjZXJ0ZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICBDdXJsX3VuaWNvZGVmcmVlKGNlcnRfcGF0aCk7CisgICAgICAgIC8qIENvbnZlcnQga2V5LXBhaXIgZGF0YSB0byB0aGUgaW4tbWVtb3J5IGNlcnRpZmljYXRlIHN0b3JlICovCisgICAgICAgIGRhdGFibG9iLnBiRGF0YSA9IChCWVRFKiljZXJ0ZGF0YTsKKyAgICAgICAgZGF0YWJsb2IuY2JEYXRhID0gKERXT1JEKWNlcnRzaXplOwogCi0gICAgICBpZihjbGllbnRfY2VydHNbMF0pIHsKKyAgICAgICAgaWYoZGF0YS0+c2V0LnNzbC5rZXlfcGFzc3dkICE9IE5VTEwpCisgICAgICAgICAgcHdkX2xlbiA9IHN0cmxlbihkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QpOworICAgICAgICBwc3pQYXNzd29yZCA9IChXQ0hBUiopbWFsbG9jKHNpemVvZihXQ0hBUikqKHB3ZF9sZW4gKyAxKSk7CisgICAgICAgIGlmKHBzelBhc3N3b3JkKSB7CisgICAgICAgICAgaWYocHdkX2xlbiA+IDApCisgICAgICAgICAgICBzdHJfd19sZW4gPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsCisgICAgICAgICAgICAgICBNQl9FUlJfSU5WQUxJRF9DSEFSUywKKyAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wua2V5X3Bhc3N3ZCwgKGludClwd2RfbGVuLAorICAgICAgICAgICAgICAgcHN6UGFzc3dvcmQsIChpbnQpKHB3ZF9sZW4gKyAxKSk7CisKKyAgICAgICAgICBpZigoc3RyX3dfbGVuID49IDApICYmIChzdHJfd19sZW4gPD0gKGludClwd2RfbGVuKSkKKyAgICAgICAgICAgIHBzelBhc3N3b3JkW3N0cl93X2xlbl0gPSAwOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBzelBhc3N3b3JkWzBdID0gMDsKKworICAgICAgICAgIGNlcnRfc3RvcmUgPSBQRlhJbXBvcnRDZXJ0U3RvcmUoJmRhdGFibG9iLCBwc3pQYXNzd29yZCwgMCk7CisgICAgICAgICAgZnJlZShwc3pQYXNzd29yZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYoIWJsb2IpCisgICAgICAgICAgZnJlZShjZXJ0ZGF0YSk7CisgICAgICAgIGlmKGNlcnRfc3RvcmUgPT0gTlVMTCkgeworICAgICAgICAgIERXT1JEIGVycm9yY29kZSA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgIGlmKGVycm9yY29kZSA9PSBFUlJPUl9JTlZBTElEX1BBU1NXT1JEKQorICAgICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBGYWlsZWQgdG8gaW1wb3J0IGNlcnQgZmlsZSAlcywgIgorICAgICAgICAgICAgICAgICAgInBhc3N3b3JkIGlzIGJhZCIsCisgICAgICAgICAgICAgICAgICBjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvcik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBGYWlsZWQgdG8gaW1wb3J0IGNlcnQgZmlsZSAlcywgIgorICAgICAgICAgICAgICAgICAgImxhc3QgZXJyb3IgaXMgMHgleCIsCisgICAgICAgICAgICAgICAgICBjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvciwgZXJyb3Jjb2RlKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50X2NlcnRzWzBdID0gQ2VydEZpbmRDZXJ0aWZpY2F0ZUluU3RvcmUoCisgICAgICAgICAgY2VydF9zdG9yZSwgWDUwOV9BU05fRU5DT0RJTkcgfCBQS0NTXzdfQVNOX0VOQ09ESU5HLCAwLAorICAgICAgICAgIENFUlRfRklORF9BTlksIE5VTEwsIE5VTEwpOworCisgICAgICAgIGlmKGNsaWVudF9jZXJ0c1swXSA9PSBOVUxMKSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBGYWlsZWQgdG8gZ2V0IGNlcnRpZmljYXRlIGZyb20gZmlsZSAlcyIKKyAgICAgICAgICAgICAgICAiLCBsYXN0IGVycm9yIGlzIDB4JXgiLAorICAgICAgICAgICAgICAgIGNlcnRfc2hvd2ZpbGVuYW1lX2Vycm9yLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgQ2VydENsb3NlU3RvcmUoY2VydF9zdG9yZSwgMCk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICAgICAgfQorCiAgICAgICAgIHNjaGFubmVsX2NyZWQuY0NyZWRzID0gMTsKICAgICAgICAgc2NoYW5uZWxfY3JlZC5wYUNyZWQgPSBjbGllbnRfY2VydHM7CiAgICAgICB9CiAgICAgICBlbHNlIHsKLSAgICAgICAgLyogQ1JZUFRfRV9OT1RfRk9VTkQgLyBFX0lOVkFMSURBUkcgKi8KLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKLSAgICAgIH0KKyAgICAgICAgY2VydF9zdG9yZSA9CisgICAgICAgICAgQ2VydE9wZW5TdG9yZShDVVJMX0NFUlRfU1RPUkVfUFJPVl9TWVNURU0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAoSENSWVBUUFJPVilOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVF9TVE9SRV9PUEVOX0VYSVNUSU5HX0ZMQUcgfCBjZXJ0X3N0b3JlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3N0b3JlX3BhdGgpOworICAgICAgICBpZighY2VydF9zdG9yZSkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogRmFpbGVkIHRvIG9wZW4gY2VydCBzdG9yZSAleCAlcywgIgorICAgICAgICAgICAgICAgICJsYXN0IGVycm9yIGlzIDB4JXgiLAorICAgICAgICAgICAgICAgIGNlcnRfc3RvcmVfbmFtZSwgY2VydF9zdG9yZV9wYXRoLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgZnJlZShjZXJ0X3N0b3JlX3BhdGgpOworICAgICAgICAgIGN1cmx4X3VuaWNvZGVmcmVlKGNlcnRfcGF0aCk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKGNlcnRfc3RvcmVfcGF0aCk7CiAKKyAgICAgICAgY2VydF90aHVtYnByaW50LnBiRGF0YSA9IGNlcnRfdGh1bWJwcmludF9kYXRhOworICAgICAgICBjZXJ0X3RodW1icHJpbnQuY2JEYXRhID0gQ0VSVF9USFVNQlBSSU5UX0RBVEFfTEVOOworCisgICAgICAgIGlmKCFDcnlwdFN0cmluZ1RvQmluYXJ5KGNlcnRfdGh1bWJwcmludF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfVEhVTUJQUklOVF9TVFJfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9TVFJJTkdfSEVYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3RodW1icHJpbnRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNlcnRfdGh1bWJwcmludC5jYkRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpKSB7CisgICAgICAgICAgY3VybHhfdW5pY29kZWZyZWUoY2VydF9wYXRoKTsKKyAgICAgICAgICBDZXJ0Q2xvc2VTdG9yZShjZXJ0X3N0b3JlLCAwKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50X2NlcnRzWzBdID0gQ2VydEZpbmRDZXJ0aWZpY2F0ZUluU3RvcmUoCisgICAgICAgICAgY2VydF9zdG9yZSwgWDUwOV9BU05fRU5DT0RJTkcgfCBQS0NTXzdfQVNOX0VOQ09ESU5HLCAwLAorICAgICAgICAgIENFUlRfRklORF9IQVNILCAmY2VydF90aHVtYnByaW50LCBOVUxMKTsKKworICAgICAgICBjdXJseF91bmljb2RlZnJlZShjZXJ0X3BhdGgpOworCisgICAgICAgIGlmKGNsaWVudF9jZXJ0c1swXSkgeworICAgICAgICAgIHNjaGFubmVsX2NyZWQuY0NyZWRzID0gMTsKKyAgICAgICAgICBzY2hhbm5lbF9jcmVkLnBhQ3JlZCA9IGNsaWVudF9jZXJ0czsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBDUllQVF9FX05PVF9GT1VORCAvIEVfSU5WQUxJREFSRyAqLworICAgICAgICAgIENlcnRDbG9zZVN0b3JlKGNlcnRfc3RvcmUsIDApOworICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgICAgIH0KKyAgICAgIH0KICAgICAgIENlcnRDbG9zZVN0b3JlKGNlcnRfc3RvcmUsIDApOwogICAgIH0KICNlbHNlCkBAIC02NzUsNyArNzkxLDcgQEAKICAgICBCQUNLRU5ELT5jcmVkLT5yZWZjb3VudCA9IDE7CiAKICAgICAvKiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM3NDcxNi5hc3B4Ci0gICAgICAgKi8KKyAgICAgKi8KICAgICBzc3BpX3N0YXR1cyA9CiAgICAgICBzX3BTZWNGbi0+QWNxdWlyZUNyZWRlbnRpYWxzSGFuZGxlKE5VTEwsIChUQ0hBUiAqKVVOSVNQX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ1BLR19DUkVEX09VVEJPVU5ELCBOVUxMLApAQCAtNjkyLDE1ICs4MDgsMTUgQEAKICAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgICAgQ3VybF9zYWZlZnJlZShCQUNLRU5ELT5jcmVkKTsKICAgICAgIHN3aXRjaChzc3BpX3N0YXR1cykgewotICAgICAgICBjYXNlIFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlk6Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgIGNhc2UgU0VDX0VfTk9fQ1JFREVOVElBTFM6Ci0gICAgICAgIGNhc2UgU0VDX0VfU0VDUEtHX05PVF9GT1VORDoKLSAgICAgICAgY2FzZSBTRUNfRV9OT1RfT1dORVI6Ci0gICAgICAgIGNhc2UgU0VDX0VfVU5LTk9XTl9DUkVERU5USUFMUzoKLSAgICAgICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgICBjYXNlIFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlk6CisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgY2FzZSBTRUNfRV9OT19DUkVERU5USUFMUzoKKyAgICAgIGNhc2UgU0VDX0VfU0VDUEtHX05PVF9GT1VORDoKKyAgICAgIGNhc2UgU0VDX0VfTk9UX09XTkVSOgorICAgICAgY2FzZSBTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTOgorICAgICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTcyMiw3ICs4MzgsNyBAQAogICAgIHVuc2lnbmVkIHNob3J0KiBsaXN0X2xlbiA9IE5VTEw7CiAKICAgICAvKiBUaGUgZmlyc3QgZm91ciBieXRlcyB3aWxsIGJlIGFuIHVuc2lnbmVkIGludCBpbmRpY2F0aW5nIG51bWJlcgotICAgICAgIG9mIGJ5dGVzIG9mIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIHRoZSBidWZmZXIuICovCisgICAgICAgb2YgYnl0ZXMgb2YgZGF0YSBpbiB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLiAqLwogICAgIGV4dGVuc2lvbl9sZW4gPSAodW5zaWduZWQgaW50ICopKCZhbHBuX2J1ZmZlcltjdXJdKTsKICAgICBjdXIgKz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAKQEAgLTc4NCw3ICs5MDAsNyBAQAogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAKLSAgaG9zdF9uYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoaG9zdG5hbWUpOworICBob3N0X25hbWUgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoaG9zdG5hbWUpOwogICBpZighaG9zdF9uYW1lKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC04MDEsMzUgKzkxNywzNSBAQAogICAgIDAsICZCQUNLRU5ELT5jdHh0LT5jdHh0X2hhbmRsZSwKICAgICAmb3V0YnVmX2Rlc2MsICZCQUNLRU5ELT5yZXRfZmxhZ3MsICZCQUNLRU5ELT5jdHh0LT50aW1lX3N0YW1wKTsKIAotICBDdXJsX3VuaWNvZGVmcmVlKGhvc3RfbmFtZSk7CisgIGN1cmx4X3VuaWNvZGVmcmVlKGhvc3RfbmFtZSk7CiAKICAgaWYoc3NwaV9zdGF0dXMgIT0gU0VDX0lfQ09OVElOVUVfTkVFREVEKSB7CiAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICBDdXJsX3NhZmVmcmVlKEJBQ0tFTkQtPmN0eHQpOwogICAgIHN3aXRjaChzc3BpX3N0YXR1cykgewotICAgICAgY2FzZSBTRUNfRV9JTlNVRkZJQ0lFTlRfTUVNT1JZOgotICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IGluaXRpYWwgSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgY2FzZSBTRUNfRV9XUk9OR19QUklOQ0lQQUw6Ci0gICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogU05JIG9yIGNlcnRpZmljYXRlIGNoZWNrIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3Ioc3NwaV9zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSAgICAgICAgLyoKLSAgICAgIGNhc2UgU0VDX0VfSU5WQUxJRF9IQU5ETEU6Ci0gICAgICBjYXNlIFNFQ19FX0lOVkFMSURfVE9LRU46Ci0gICAgICBjYXNlIFNFQ19FX0xPR09OX0RFTklFRDoKLSAgICAgIGNhc2UgU0VDX0VfVEFSR0VUX1VOS05PV046Ci0gICAgICBjYXNlIFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWToKLSAgICAgIGNhc2UgU0VDX0VfSU5URVJOQUxfRVJST1I6Ci0gICAgICBjYXNlIFNFQ19FX05PX0NSRURFTlRJQUxTOgotICAgICAgY2FzZSBTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTjoKLSAgICAgIGNhc2UgU0VDX0VfQVBQTElDQVRJT05fUFJPVE9DT0xfTUlTTUFUQ0g6Ci0gICAgICAgICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IGluaXRpYWwgSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICBjYXNlIFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlk6CisgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IGluaXRpYWwgSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgY2FzZSBTRUNfRV9XUk9OR19QUklOQ0lQQUw6CisgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IFNOSSBvciBjZXJ0aWZpY2F0ZSBjaGVjayBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIC8qCisgICAgICAgIGNhc2UgU0VDX0VfSU5WQUxJRF9IQU5ETEU6CisgICAgICAgIGNhc2UgU0VDX0VfSU5WQUxJRF9UT0tFTjoKKyAgICAgICAgY2FzZSBTRUNfRV9MT0dPTl9ERU5JRUQ6CisgICAgICAgIGNhc2UgU0VDX0VfVEFSR0VUX1VOS05PV046CisgICAgICAgIGNhc2UgU0VDX0VfTk9fQVVUSEVOVElDQVRJTkdfQVVUSE9SSVRZOgorICAgICAgICBjYXNlIFNFQ19FX0lOVEVSTkFMX0VSUk9SOgorICAgICAgICBjYXNlIFNFQ19FX05PX0NSRURFTlRJQUxTOgorICAgICAgICBjYXNlIFNFQ19FX1VOU1VQUE9SVEVEX0ZVTkNUSU9OOgorICAgICAgICBjYXNlIFNFQ19FX0FQUExJQ0FUSU9OX1BST1RPQ09MX01JU01BVENIOgorICAgICAgKi8KKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBpbml0aWFsIEluaXRpYWxpemVTZWN1cml0eUNvbnRleHQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3Ioc3NwaV9zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICB9CiAgIH0KIApAQCAtODc1LDggKzk5MSwxMiBAQAogICBTRUNVUklUWV9TVEFUVVMgc3NwaV9zdGF0dXMgPSBTRUNfRV9PSzsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBib29sIGRvcmVhZDsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKKyNlbHNlCisgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyNlbmRpZgogICBjb25zdCBjaGFyICpwdWJrZXlfcHRyOwogCiAgIGRvcmVhZCA9IChjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlICE9IHNzbF9jb25uZWN0XzJfd3JpdGluZykgPyBUUlVFIDogRkFMU0U7CkBAIC05ODQsMTggKzExMDQsMTggQEAKICAgICBtZW1jcHkoaW5idWZbMF0ucHZCdWZmZXIsIEJBQ0tFTkQtPmVuY2RhdGFfYnVmZmVyLAogICAgICAgICAgICBCQUNLRU5ELT5lbmNkYXRhX29mZnNldCk7CiAKLSAgICBob3N0X25hbWUgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcihob3N0bmFtZSk7CisgICAgaG9zdF9uYW1lID0gY3VybHhfY29udmVydF9VVEY4X3RvX3RjaGFyKGhvc3RuYW1lKTsKICAgICBpZighaG9zdF9uYW1lKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgICAvKiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM3NTkyNC5hc3B4Ci0gICAgICAgKi8KKyAgICAgKi8KICAgICBzc3BpX3N0YXR1cyA9IHNfcFNlY0ZuLT5Jbml0aWFsaXplU2VjdXJpdHlDb250ZXh0KAogICAgICAgJkJBQ0tFTkQtPmNyZWQtPmNyZWRfaGFuZGxlLCAmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCiAgICAgICBob3N0X25hbWUsIEJBQ0tFTkQtPnJlcV9mbGFncywgMCwgMCwgJmluYnVmX2Rlc2MsIDAsIE5VTEwsCiAgICAgICAmb3V0YnVmX2Rlc2MsICZCQUNLRU5ELT5yZXRfZmxhZ3MsICZCQUNLRU5ELT5jdHh0LT50aW1lX3N0YW1wKTsKIAotICAgIEN1cmxfdW5pY29kZWZyZWUoaG9zdF9uYW1lKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShob3N0X25hbWUpOwogCiAgICAgLyogZnJlZSBidWZmZXIgZm9yIHJlY2VpdmVkIGhhbmRzaGFrZSBkYXRhICovCiAgICAgQ3VybF9zYWZlZnJlZShpbmJ1ZlswXS5wdkJ1ZmZlcik7CkBAIC0xMDUwLDI5ICsxMTcwLDI5IEBACiAgICAgZWxzZSB7CiAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgICAgc3dpdGNoKHNzcGlfc3RhdHVzKSB7Ci0gICAgICAgIGNhc2UgU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWToKLSAgICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IG5leHQgSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3Ioc3NwaV9zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgY2FzZSBTRUNfRV9XUk9OR19QUklOQ0lQQUw6Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBTTkkgb3IgY2VydGlmaWNhdGUgY2hlY2sgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7Ci0gICAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSAgICAgICAgICAvKgotICAgICAgICBjYXNlIFNFQ19FX0lOVkFMSURfSEFORExFOgotICAgICAgICBjYXNlIFNFQ19FX0lOVkFMSURfVE9LRU46Ci0gICAgICAgIGNhc2UgU0VDX0VfTE9HT05fREVOSUVEOgotICAgICAgICBjYXNlIFNFQ19FX1RBUkdFVF9VTktOT1dOOgotICAgICAgICBjYXNlIFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWToKLSAgICAgICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKLSAgICAgICAgY2FzZSBTRUNfRV9OT19DUkVERU5USUFMUzoKLSAgICAgICAgY2FzZSBTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTjoKLSAgICAgICAgY2FzZSBTRUNfRV9BUFBMSUNBVElPTl9QUk9UT0NPTF9NSVNNQVRDSDoKLSAgICAgICAgICAqLwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogbmV4dCBJbml0aWFsaXplU2VjdXJpdHlDb250ZXh0IGZhaWxlZDogJXMiLAotICAgICAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIGNhc2UgU0VDX0VfSU5TVUZGSUNJRU5UX01FTU9SWToKKyAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBuZXh0IEluaXRpYWxpemVTZWN1cml0eUNvbnRleHQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGNhc2UgU0VDX0VfV1JPTkdfUFJJTkNJUEFMOgorICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IFNOSSBvciBjZXJ0aWZpY2F0ZSBjaGVjayBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgICAgICAgIC8qCisgICAgICAgICAgY2FzZSBTRUNfRV9JTlZBTElEX0hBTkRMRToKKyAgICAgICAgICBjYXNlIFNFQ19FX0lOVkFMSURfVE9LRU46CisgICAgICAgICAgY2FzZSBTRUNfRV9MT0dPTl9ERU5JRUQ6CisgICAgICAgICAgY2FzZSBTRUNfRV9UQVJHRVRfVU5LTk9XTjoKKyAgICAgICAgICBjYXNlIFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWToKKyAgICAgICAgICBjYXNlIFNFQ19FX0lOVEVSTkFMX0VSUk9SOgorICAgICAgICAgIGNhc2UgU0VDX0VfTk9fQ1JFREVOVElBTFM6CisgICAgICAgICAgY2FzZSBTRUNfRV9VTlNVUFBPUlRFRF9GVU5DVElPTjoKKyAgICAgICAgICBjYXNlIFNFQ19FX0FQUExJQ0FUSU9OX1BST1RPQ09MX01JU01BVENIOgorICAgICAgICAqLworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBuZXh0IEluaXRpYWxpemVTZWN1cml0eUNvbnRleHQgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIEN1cmxfc3NwaV9zdHJlcnJvcihzc3BpX3N0YXR1cywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgICB9CiAgICAgfQogCkBAIC0xMTgxLDYgKzEzMDEsNyBAQAogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47CiAgIENVUkxjb2RlIHJlc3VsdDsKICAgaW50IGlkeDsKKyAgaW50IGNlcnRzX2NvdW50OwogfTsKIAogc3RhdGljIGJvb2wKQEAgLTExOTEsNyArMTMxMiw5IEBACiAgIGlmKHZhbGlkX2NlcnRfZW5jb2RpbmcoY2NlcnRfY29udGV4dCkpIHsKICAgICBjb25zdCBjaGFyICpiZWcgPSAoY29uc3QgY2hhciAqKSBjY2VydF9jb250ZXh0LT5wYkNlcnRFbmNvZGVkOwogICAgIGNvbnN0IGNoYXIgKmVuZCA9IGJlZyArIGNjZXJ0X2NvbnRleHQtPmNiQ2VydEVuY29kZWQ7Ci0gICAgYXJncy0+cmVzdWx0ID0gQ3VybF9leHRyYWN0X2NlcnRpbmZvKGFyZ3MtPmNvbm4sIChhcmdzLT5pZHgpKyssIGJlZywgZW5kKTsKKyAgICBpbnQgaW5zZXJ0X2luZGV4ID0gKGFyZ3MtPmNlcnRzX2NvdW50IC0gMSkgLSBhcmdzLT5pZHg7CisgICAgYXJncy0+cmVzdWx0ID0gQ3VybF9leHRyYWN0X2NlcnRpbmZvKGFyZ3MtPmNvbm4sIGluc2VydF9pbmRleCwgYmVnLCBlbmQpOworICAgIGFyZ3MtPmlkeCsrOwogICB9CiAgIHJldHVybiBhcmdzLT5yZXN1bHQgPT0gQ1VSTEVfT0s7CiB9CkBAIC0xMjM4LDggKzEzNjEsMTAgQEAKIAogI2lmZGVmIEhBU19BTFBOCiAgIGlmKEJBQ0tFTkQtPnVzZV9hbHBuKSB7Ci0gICAgc3NwaV9zdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCi0gICAgICBTRUNQS0dfQVRUUl9BUFBMSUNBVElPTl9QUk9UT0NPTCwgJmFscG5fcmVzdWx0KTsKKyAgICBzc3BpX3N0YXR1cyA9CisgICAgICBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNQS0dfQVRUUl9BUFBMSUNBVElPTl9QUk9UT0NPTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbHBuX3Jlc3VsdCk7CiAKICAgICBpZihzc3BpX3N0YXR1cyAhPSBTRUNfRV9PSykgewogICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBmYWlsZWQgdG8gcmV0cmlldmUgQUxQTiByZXN1bHQiKTsKQEAgLTEyNTAsMjEgKzEzNzUsMjEgQEAKICAgICAgICBTZWNBcHBsaWNhdGlvblByb3RvY29sTmVnb3RpYXRpb25TdGF0dXNfU3VjY2VzcykgewogCiAgICAgICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IEFMUE4sIHNlcnZlciBhY2NlcHRlZCB0byB1c2UgJS4qc1xuIiwKLSAgICAgICAgYWxwbl9yZXN1bHQuUHJvdG9jb2xJZFNpemUsIGFscG5fcmVzdWx0LlByb3RvY29sSWQpOworICAgICAgICAgICAgYWxwbl9yZXN1bHQuUHJvdG9jb2xJZFNpemUsIGFscG5fcmVzdWx0LlByb3RvY29sSWQpOwogCiAjaWZkZWYgVVNFX05HSFRUUDIKICAgICAgIGlmKGFscG5fcmVzdWx0LlByb3RvY29sSWRTaXplID09IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4gJiYKICAgICAgICAgICFtZW1jbXAoTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lELCBhbHBuX3Jlc3VsdC5Qcm90b2NvbElkLAotICAgICAgICAgIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4pKSB7CisgICAgICAgICAgICAgICAgIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4pKSB7CiAgICAgICAgIGNvbm4tPm5lZ25wbiA9IENVUkxfSFRUUF9WRVJTSU9OXzI7CiAgICAgICB9CiAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgIGlmKGFscG5fcmVzdWx0LlByb3RvY29sSWRTaXplID09IEFMUE5fSFRUUF8xXzFfTEVOR1RIICYmCi0gICAgICAgICAhbWVtY21wKEFMUE5fSFRUUF8xXzEsIGFscG5fcmVzdWx0LlByb3RvY29sSWQsCi0gICAgICAgICAgIEFMUE5fSFRUUF8xXzFfTEVOR1RIKSkgewotICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE7Ci0gICAgICB9CisgICAgICAgIGlmKGFscG5fcmVzdWx0LlByb3RvY29sSWRTaXplID09IEFMUE5fSFRUUF8xXzFfTEVOR1RIICYmCisgICAgICAgICAgICFtZW1jbXAoQUxQTl9IVFRQXzFfMSwgYWxwbl9yZXN1bHQuUHJvdG9jb2xJZCwKKyAgICAgICAgICAgICAgICAgICBBTFBOX0hUVFBfMV8xX0xFTkdUSCkpIHsKKyAgICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBkaWQgbm90IGFncmVlIHRvIGEgcHJvdG9jb2xcbiIpOwpAQCAtMTMxMSw4ICsxNDM2LDEwIEBACiAKICAgaWYoZGF0YS0+c2V0LnNzbC5jZXJ0aW5mbykgewogICAgIGludCBjZXJ0c19jb3VudCA9IDA7Ci0gICAgc3NwaV9zdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCi0gICAgICBTRUNQS0dfQVRUUl9SRU1PVEVfQ0VSVF9DT05URVhULCAmY2NlcnRfY29udGV4dCk7CisgICAgc3NwaV9zdGF0dXMgPQorICAgICAgc19wU2VjRm4tPlF1ZXJ5Q29udGV4dEF0dHJpYnV0ZXMoJkJBQ0tFTkQtPmN0eHQtPmN0eHRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDUEtHX0FUVFJfUkVNT1RFX0NFUlRfQ09OVEVYVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjY2VydF9jb250ZXh0KTsKIAogICAgIGlmKChzc3BpX3N0YXR1cyAhPSBTRUNfRV9PSykgfHwgKGNjZXJ0X2NvbnRleHQgPT0gTlVMTCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogZmFpbGVkIHRvIHJldHJpZXZlIHJlbW90ZSBjZXJ0IGNvbnRleHQiKTsKQEAgLTEzMjYsNiArMTQ1Myw3IEBACiAgICAgICBzdHJ1Y3QgQWRkZXJfYXJncyBhcmdzOwogICAgICAgYXJncy5jb25uID0gY29ubjsKICAgICAgIGFyZ3MuaWR4ID0gMDsKKyAgICAgIGFyZ3MuY2VydHNfY291bnQgPSBjZXJ0c19jb3VudDsKICAgICAgIHRyYXZlcnNlX2NlcnRfc3RvcmUoY2NlcnRfY29udGV4dCwgYWRkX2NlcnRfdG9fY2VydGluZm8sICZhcmdzKTsKICAgICAgIHJlc3VsdCA9IGFyZ3MucmVzdWx0OwogICAgIH0KQEAgLTEzNDcsNyArMTQ3NSw3IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07Ci0gIHRpbWVfdCB0aW1lb3V0X21zOworICB0aW1lZGlmZl90IHRpbWVvdXRfbXM7CiAgIGludCB3aGF0OwogCiAgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KQEAgLTE1NDMsMTQgKzE2NzEsMTAgQEAKIAogICAgIC8qIHNlbmQgZW50aXJlIG1lc3NhZ2Ugb3IgZmFpbCAqLwogICAgIHdoaWxlKGxlbiA+IChzaXplX3Qpd3JpdHRlbikgewotICAgICAgc3NpemVfdCB0aGlzX3dyaXRlOwotICAgICAgdGltZV90IHRpbWVsZWZ0OworICAgICAgc3NpemVfdCB0aGlzX3dyaXRlID0gMDsKICAgICAgIGludCB3aGF0OwotCi0gICAgICB0aGlzX3dyaXRlID0gMDsKLQotICAgICAgdGltZWxlZnQgPSBDdXJsX3RpbWVsZWZ0KGNvbm4tPmRhdGEsIE5VTEwsIEZBTFNFKTsKLSAgICAgIGlmKHRpbWVsZWZ0IDwgMCkgeworICAgICAgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChjb25uLT5kYXRhLCBOVUxMLCBGQUxTRSk7CisgICAgICBpZih0aW1lb3V0X21zIDwgMCkgewogICAgICAgICAvKiB3ZSBhbHJlYWR5IGdvdCB0aGUgdGltZW91dCAqLwogICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAic2NoYW5uZWw6IHRpbWVkIG91dCBzZW5kaW5nIGRhdGEgIgogICAgICAgICAgICAgICAiKGJ5dGVzIHNlbnQ6ICV6ZCkiLCB3cml0dGVuKTsKQEAgLTE1NTgsOCArMTY4Miw5IEBACiAgICAgICAgIHdyaXR0ZW4gPSAtMTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0KLSAgICAgIHdoYXQgPSBTT0NLRVRfV1JJVEFCTEUoY29ubi0+c29ja1tzb2NraW5kZXhdLCB0aW1lbGVmdCk7CisgICAgICBlbHNlIGlmKCF0aW1lb3V0X21zKQorICAgICAgICB0aW1lb3V0X21zID0gVElNRURJRkZfVF9NQVg7CisgICAgICB3aGF0ID0gU09DS0VUX1dSSVRBQkxFKGNvbm4tPnNvY2tbc29ja2luZGV4XSwgdGltZW91dF9tcyk7CiAgICAgICBpZih3aGF0IDwgMCkgewogICAgICAgICAvKiBmYXRhbCBlcnJvciAqLwogICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKQEAgLTE2NTMsOCArMTc3OCw4IEBACiAgIH0KICAgZWxzZSBpZighbGVuKSB7CiAgICAgLyogSXQncyBkZWJhdGFibGUgd2hhdCB0byByZXR1cm4gd2hlbiAhbGVuLiBSZWdhcmRsZXNzIHdlIGNhbid0IHJldHVybgotICAgIGltbWVkaWF0ZWx5IGJlY2F1c2UgdGhlcmUgbWF5IGJlIGRhdGEgdG8gZGVjcnlwdCAoaW4gdGhlIGNhc2Ugd2Ugd2FudCB0bwotICAgIGRlY3J5cHQgYWxsIGVuY3J5cHRlZCBjYWNoZWQgZGF0YSkgc28gaGFuZGxlICFsZW4gbGF0ZXIgaW4gY2xlYW51cC4KKyAgICAgICBpbW1lZGlhdGVseSBiZWNhdXNlIHRoZXJlIG1heSBiZSBkYXRhIHRvIGRlY3J5cHQgKGluIHRoZSBjYXNlIHdlIHdhbnQgdG8KKyAgICAgICBkZWNyeXB0IGFsbCBlbmNyeXB0ZWQgY2FjaGVkIGRhdGEpIHNvIGhhbmRsZSAhbGVuIGxhdGVyIGluIGNsZWFudXAuCiAgICAgKi8KICAgICA7IC8qIGRvIG5vdGhpbmcgKi8KICAgfQpAQCAtMTY2NCw3ICsxNzg5LDcgQEAKICAgICBpZihzaXplIDwgQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFIHx8CiAgICAgICAgQkFDS0VORC0+ZW5jZGF0YV9sZW5ndGggPCBtaW5fZW5jZGF0YV9sZW5ndGgpIHsKICAgICAgIHJlYWxsb2NhdGVkX2xlbmd0aCA9IEJBQ0tFTkQtPmVuY2RhdGFfb2Zmc2V0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU0NIQU5ORUxfQlVGRkVSX0ZSRUVfU0laRTsKKyAgICAgICAgQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFOwogICAgICAgaWYocmVhbGxvY2F0ZWRfbGVuZ3RoIDwgbWluX2VuY2RhdGFfbGVuZ3RoKSB7CiAgICAgICAgIHJlYWxsb2NhdGVkX2xlbmd0aCA9IG1pbl9lbmNkYXRhX2xlbmd0aDsKICAgICAgIH0KQEAgLTE3MzIsNyArMTg1Nyw3IEBACiAgICAgSW5pdFNlY0J1ZmZlckRlc2MoJmluYnVmX2Rlc2MsIGluYnVmLCA0KTsKIAogICAgIC8qIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzc1MzQ4LmFzcHgKLSAgICAgICAqLworICAgICAqLwogICAgIHNzcGlfc3RhdHVzID0gc19wU2VjRm4tPkRlY3J5cHRNZXNzYWdlKCZCQUNLRU5ELT5jdHh0LT5jdHh0X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5idWZfZGVzYywgMCwgTlVMTCk7CiAKQEAgLTE3NDgsNyArMTg3Myw3IEBACiAKICAgICAgICAgLyogaW5jcmVhc2UgYnVmZmVyIGluIG9yZGVyIHRvIGZpdCB0aGUgcmVjZWl2ZWQgYW1vdW50IG9mIGRhdGEgKi8KICAgICAgICAgc2l6ZSA9IGluYnVmWzFdLmNiQnVmZmVyID4gQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFID8KLSAgICAgICAgICAgICAgIGluYnVmWzFdLmNiQnVmZmVyIDogQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFOworICAgICAgICAgIGluYnVmWzFdLmNiQnVmZmVyIDogQ1VSTF9TQ0hBTk5FTF9CVUZGRVJfRlJFRV9TSVpFOwogICAgICAgICBpZihCQUNLRU5ELT5kZWNkYXRhX2xlbmd0aCAtIEJBQ0tFTkQtPmRlY2RhdGFfb2Zmc2V0IDwgc2l6ZSB8fAogICAgICAgICAgICBCQUNLRU5ELT5kZWNkYXRhX2xlbmd0aCA8IGxlbikgewogICAgICAgICAgIC8qIGluY3JlYXNlIGludGVybmFsIGRlY3J5cHRlZCBkYXRhIGJ1ZmZlciAqLwpAQCAtMTgxOCw3ICsxOTQzLDcgQEAKICAgICAgICAgaWYoQkFDS0VORC0+ZW5jZGF0YV9vZmZzZXQpIHsKICAgICAgICAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKICAgICAgICAgICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IGNhbid0IHJlbm9nb3RpYXRlLCAiCi0gICAgICAgICAgICAgICAgICAgICAgImVuY3J5cHRlZCBkYXRhIGF2YWlsYWJsZVxuIik7CisgICAgICAgICAgICAgICAgImVuY3J5cHRlZCBkYXRhIGF2YWlsYWJsZVxuIik7CiAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgICB9CiAgICAgICAgIC8qIGJlZ2luIHJlbmVnb3RpYXRpb24gKi8KQEAgLTE4NTUsNyArMTk4MCw5IEBACiAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgfQogICAgIGVsc2UgeworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCiAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOworI2VuZGlmCiAgICAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKICAgICAgIGluZm9mKGRhdGEsICJzY2hhbm5lbDogZmFpbGVkIHRvIHJlYWQgZGF0YSBmcm9tIHNlcnZlcjogJXNcbiIsCiAgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3Ioc3NwaV9zdGF0dXMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKQEAgLTE4NzEsMTcgKzE5OTgsMjAgQEAKICAgICAgICAgICAgICAgICJzY2hhbm5lbDogZGVjcnlwdGVkIGRhdGEgYnVmZmVyOiBvZmZzZXQgJXp1IGxlbmd0aCAlenVcbiIsCiAgICAgICAgICAgICAgICBCQUNLRU5ELT5kZWNkYXRhX29mZnNldCwgQkFDS0VORC0+ZGVjZGF0YV9sZW5ndGgpKTsKIAotY2xlYW51cDoKKyAgY2xlYW51cDoKICAgLyogV2FybmluZy0gdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoZSBlbmNkYXRhIHN0YXRlIGlzIHZhbGlkIGF0IHRoaXMgcG9pbnQgKi8KICAgREVCVUdGKGluZm9mKGRhdGEsICJzY2hhbm5lbDogc2NoYW5uZWxfcmVjdiBjbGVhbnVwXG4iKSk7CiAKICAgLyogRXJyb3IgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIGNsb3NlZCB3aXRob3V0IGEgY2xvc2Vfbm90aWZ5LgotICBCZWhhdmlvciBoZXJlIGlzIGEgbWF0dGVyIG9mIGRlYmF0ZS4gV2UgZG9uJ3Qgd2FudCB0byBiZSB2dWxuZXJhYmxlIHRvIGEKLSAgdHJ1bmNhdGlvbiBhdHRhY2sgaG93ZXZlciB0aGVyZSdzIHNvbWUgYnJvd3NlciBwcmVjZWRlbnQgZm9yIGlnbm9yaW5nIHRoZQotICBjbG9zZV9ub3RpZnkgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KLSAgQWRkaXRpb25hbGx5LCBXaW5kb3dzIDIwMDAgKHY1LjApIGlzIGEgc3BlY2lhbCBjYXNlIHNpbmNlIGl0IHNlZW1zIGl0IGRvZXNuJ3QKLSAgcmV0dXJuIGNsb3NlX25vdGlmeS4gSW4gdGhhdCBjYXNlIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgd2UgYXNzdW1lIGl0Ci0gIHdhcyBncmFjZWZ1bCAoY2xvc2Vfbm90aWZ5KSBzaW5jZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSB3YXkgdG8gdGVsbC4KKworICAgICBUaGUgYmVoYXZpb3IgaGVyZSBpcyBhIG1hdHRlciBvZiBkZWJhdGUuIFdlIGRvbid0IHdhbnQgdG8gYmUgdnVsbmVyYWJsZQorICAgICB0byBhIHRydW5jYXRpb24gYXR0YWNrIGhvd2V2ZXIgdGhlcmUncyBzb21lIGJyb3dzZXIgcHJlY2VkZW50IGZvcgorICAgICBpZ25vcmluZyB0aGUgY2xvc2Vfbm90aWZ5IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCisKKyAgICAgQWRkaXRpb25hbGx5LCBXaW5kb3dzIDIwMDAgKHY1LjApIGlzIGEgc3BlY2lhbCBjYXNlIHNpbmNlIGl0IHNlZW1zIGl0CisgICAgIGRvZXNuJ3QgcmV0dXJuIGNsb3NlX25vdGlmeS4gSW4gdGhhdCBjYXNlIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgd2UKKyAgICAgYXNzdW1lIGl0IHdhcyBncmFjZWZ1bCAoY2xvc2Vfbm90aWZ5KSBzaW5jZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYQorICAgICB3YXkgdG8gdGVsbC4KICAgKi8KICAgaWYobGVuICYmICFCQUNLRU5ELT5kZWNkYXRhX29mZnNldCAmJiBCQUNLRU5ELT5yZWN2X2Nvbm5lY3Rpb25fY2xvc2VkICYmCiAgICAgICFCQUNLRU5ELT5yZWN2X3NzcGlfY2xvc2Vfbm90aWZ5KSB7CkBAIC0xODk4LDcgKzIwMjgsNyBAQAogCiAgIC8qIEFueSBlcnJvciBvdGhlciB0aGFuIENVUkxFX0FHQUlOIGlzIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IuICovCiAgIGlmKCplcnIgJiYgKmVyciAhPSBDVVJMRV9BR0FJTikKLSAgICAgIEJBQ0tFTkQtPnJlY3ZfdW5yZWNvdmVyYWJsZV9lcnIgPSAqZXJyOworICAgIEJBQ0tFTkQtPnJlY3ZfdW5yZWNvdmVyYWJsZV9lcnIgPSAqZXJyOwogCiAgIHNpemUgPSBsZW4gPCBCQUNLRU5ELT5kZWNkYXRhX29mZnNldCA/IGxlbiA6IEJBQ0tFTkQtPmRlY2RhdGFfb2Zmc2V0OwogICBpZihzaXplKSB7CkBAIC0xOTE1LDEwICsyMDQ1LDExIEBACiAgIH0KIAogICBpZighKmVyciAmJiAhQkFDS0VORC0+cmVjdl9jb25uZWN0aW9uX2Nsb3NlZCkKLSAgICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CiAKLSAgLyogSXQncyBkZWJhdGFibGUgd2hhdCB0byByZXR1cm4gd2hlbiAhbGVuLiBXZSBjb3VsZCByZXR1cm4gd2hhdGV2ZXIgZXJyb3Igd2UKLSAgZ290IGZyb20gZGVjcnlwdGlvbiBidXQgaW5zdGVhZCB3ZSBvdmVycmlkZSBoZXJlIHNvIHRoZSByZXR1cm4gaXMgY29uc2lzdGVudC4KKyAgLyogSXQncyBkZWJhdGFibGUgd2hhdCB0byByZXR1cm4gd2hlbiAhbGVuLiBXZSBjb3VsZCByZXR1cm4gd2hhdGV2ZXIgZXJyb3IKKyAgICAgd2UgZ290IGZyb20gZGVjcnlwdGlvbiBidXQgaW5zdGVhZCB3ZSBvdmVycmlkZSBoZXJlIHNvIHRoZSByZXR1cm4gaXMKKyAgICAgY29uc2lzdGVudC4KICAgKi8KICAgaWYoIWxlbikKICAgICAqZXJyID0gQ1VSTEVfT0s7CkBAIC0xOTg0LDggKzIxMTUsMTIgQEAKICAgICovCiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKKyNlbHNlCisgIGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IGNvbm4tPmhvc3QubmFtZTsKKyNlbmRpZgogCiAgIERFQlVHQVNTRVJUKGRhdGEpOwogCkBAIC0yMDE0LDcgKzIxNDksNyBAQAogICAgICAgICAgICAgQ3VybF9zc3BpX3N0cmVycm9yKHNzcGlfc3RhdHVzLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgfQogCi0gICAgaG9zdF9uYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoaG9zdG5hbWUpOworICAgIGhvc3RfbmFtZSA9IGN1cmx4X2NvbnZlcnRfVVRGOF90b190Y2hhcihob3N0bmFtZSk7CiAgICAgaWYoIWhvc3RfbmFtZSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCkBAIC0yMDM2LDcgKzIxNzEsNyBAQAogICAgICAgJkJBQ0tFTkQtPnJldF9mbGFncywKICAgICAgICZCQUNLRU5ELT5jdHh0LT50aW1lX3N0YW1wKTsKIAotICAgIEN1cmxfdW5pY29kZWZyZWUoaG9zdF9uYW1lKTsKKyAgICBjdXJseF91bmljb2RlZnJlZShob3N0X25hbWUpOwogCiAgICAgaWYoKHNzcGlfc3RhdHVzID09IFNFQ19FX09LKSB8fCAoc3NwaV9zdGF0dXMgPT0gU0VDX0lfQ09OVEVYVF9FWFBJUkVEKSkgewogICAgICAgLyogc2VuZCBjbG9zZSBtZXNzYWdlIHdoaWNoIGlzIGluIG91dHB1dCBidWZmZXIgKi8KQEAgLTIxNDUsOCArMjI4MCw4IEBACiAgICAgU0VDVVJJVFlfU1RBVFVTIHNzcGlfc3RhdHVzOwogICAgIGNvbnN0IGNoYXIgKng1MDlfZGVyOwogICAgIERXT1JEIHg1MDlfZGVyX2xlbjsKLSAgICBjdXJsX1g1MDljZXJ0aWZpY2F0ZSB4NTA5X3BhcnNlZDsKLSAgICBjdXJsX2FzbjFFbGVtZW50ICpwdWJrZXk7CisgICAgc3RydWN0IEN1cmxfWDUwOWNlcnRpZmljYXRlIHg1MDlfcGFyc2VkOworICAgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICpwdWJrZXk7CiAKICAgICBzc3BpX3N0YXR1cyA9CiAgICAgICBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmQkFDS0VORC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCkBAIC0yMTYyLDcgKzIyOTcsNyBAQAogCiAKICAgICBpZighKCgocENlcnRDb250ZXh0U2VydmVyLT5kd0NlcnRFbmNvZGluZ1R5cGUgJiBYNTA5X0FTTl9FTkNPRElORykgIT0gMCkgJiYKLSAgICAgICAocENlcnRDb250ZXh0U2VydmVyLT5jYkNlcnRFbmNvZGVkID4gMCkpKQorICAgICAgICAgKHBDZXJ0Q29udGV4dFNlcnZlci0+Y2JDZXJ0RW5jb2RlZCA+IDApKSkKICAgICAgIGJyZWFrOwogCiAgICAgeDUwOV9kZXIgPSAoY29uc3QgY2hhciAqKXBDZXJ0Q29udGV4dFNlcnZlci0+cGJDZXJ0RW5jb2RlZDsKQEAgLTIyMTEsNyArMjM0Niw3IEBACiAgIG1lbXNldChjaGVja3N1bSwgMCwgY2hlY2tzdW1sZW4pOwogCiAgIGlmKCFDcnlwdEFjcXVpcmVDb250ZXh0KCZoUHJvdiwgTlVMTCwgTlVMTCwgcHJvdlR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBUX1ZFUklGWUNPTlRFWFQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9WRVJJRllDT05URVhUIHwgQ1JZUFRfU0lMRU5UKSkKICAgICByZXR1cm47IC8qIGZhaWxlZCAqLwogCiAgIGRvIHsKQEAgLTIyNTMsOSArMjM4OCw5IEBACiB9CiAKIHN0YXRpYyBDVVJMY29kZSBDdXJsX3NjaGFubmVsX3NoYTI1NnN1bShjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTI1NnN1bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaGEyNTZsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTI1NnN1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2hhMjU2bGVuKQogewogICBDdXJsX3NjaGFubmVsX2NoZWNrc3VtKGlucHV0LCBpbnB1dGxlbiwgc2hhMjU2c3VtLCBzaGEyNTZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVl9SU0FfQUVTLCBDQUxHX1NIQV8yNTYpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zY2hhbm5lbF92ZXJpZnkuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2NoYW5uZWxfdmVyaWZ5LmMKaW5kZXggNWEwOWU5Ni4uYmRkNzE5OSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zY2hhbm5lbF92ZXJpZnkuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NjaGFubmVsX3ZlcmlmeS5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIE1hcmMgSG9lcnNrZW4sIDxpbmZvQG1hcmMtaG9lcnNrZW4uZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIE1hcmsgU2FsaXNidXJ5LCA8bWFyay5zYWxpc2J1cnlAaHAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTU3LDcgKzU3LDcgQEAKICNkZWZpbmUgQkVHSU5fQ0VSVCAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIgogI2RlZmluZSBFTkRfQ0VSVCAiXG4tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tIgogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgY2VydF9jaGFpbl9lbmdpbmVfY29uZmlnX3dpbjcgewogICBEV09SRCBjYlNpemU7CiAgIEhDRVJUU1RPUkUgaFJlc3RyaWN0ZWRSb290OwogICBIQ0VSVFNUT1JFIGhSZXN0cmljdGVkVHJ1c3Q7CkBAIC03MCw3ICs3MCw3IEBACiAgIERXT1JEIEN5Y2xlRGV0ZWN0aW9uTW9kdWx1czsKICAgSENFUlRTVE9SRSBoRXhjbHVzaXZlUm9vdDsKICAgSENFUlRTVE9SRSBoRXhjbHVzaXZlVHJ1c3RlZFBlb3BsZTsKLX0gQ0VSVF9DSEFJTl9FTkdJTkVfQ09ORklHX1dJTjcsICpQQ0VSVF9DSEFJTl9FTkdJTkVfQ09ORklHX1dJTjc7Cit9OwogCiBzdGF0aWMgaW50IGlzX2NyX29yX2xmKGNoYXIgYykKIHsKQEAgLTk0LDEyICs5NCwxMyBAQAogICBpbnQgbnVtX2NlcnRzID0gMDsKICAgc2l6ZV90IEVORF9DRVJUX0xFTjsKIAotICBjYV9maWxlX3RzdHIgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcigoY2hhciAqKWNhX2ZpbGUpOworICBjYV9maWxlX3RzdHIgPSBjdXJseF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoKGNoYXIgKiljYV9maWxlKTsKICAgaWYoIWNhX2ZpbGVfdHN0cikgewogICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CiAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAic2NoYW5uZWw6IGludmFsaWQgcGF0aCBuYW1lIGZvciBDQSBmaWxlICclcyc6ICVzIiwKLSAgICAgICAgICBjYV9maWxlLCBDdXJsX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CisgICAgICAgICAgY2FfZmlsZSwKKyAgICAgICAgICBDdXJsX3dpbmFwaV9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgIHJlc3VsdCA9IENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICBnb3RvIGNsZWFudXA7CiAgIH0KQEAgLTExMSw3ICsxMTIsNyBAQAogICAgKi8KICAgY2FfZmlsZV9oYW5kbGUgPSBDcmVhdGVGaWxlKGNhX2ZpbGVfdHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUNfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX1NIQVJFX1JFQUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFTl9FWElTVElORywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfQVRUUklCVVRFX05PUk1BTCwKQEAgLTEyMCw3ICsxMjEsOCBAQAogICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CiAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAic2NoYW5uZWw6IGZhaWxlZCB0byBvcGVuIENBIGZpbGUgJyVzJzogJXMiLAotICAgICAgICAgIGNhX2ZpbGUsIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICBjYV9maWxlLAorICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgIGdvdG8gY2xlYW51cDsKICAgfQpAQCAtMTI5LDcgKzEzMSw4IEBACiAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICJzY2hhbm5lbDogZmFpbGVkIHRvIGRldGVybWluZSBzaXplIG9mIENBIGZpbGUgJyVzJzogJXMiLAotICAgICAgICAgIGNhX2ZpbGUsIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICBjYV9maWxlLAorICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgIGdvdG8gY2xlYW51cDsKICAgfQpAQCAtMTU5LDcgKzE2Miw4IEBACiAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgICAgZmFpbGYoZGF0YSwKICAgICAgICAgICAgICJzY2hhbm5lbDogZmFpbGVkIHRvIHJlYWQgZnJvbSBDQSBmaWxlICclcyc6ICVzIiwKLSAgICAgICAgICAgIGNhX2ZpbGUsIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgIGNhX2ZpbGUsCisgICAgICAgICAgICBDdXJsX3dpbmFwaV9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOwogICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KQEAgLTIyMyw3ICsyMjcsNyBAQAogICAgICAgICAgICAgICAgICJzY2hhbm5lbDogZmFpbGVkIHRvIGV4dHJhY3QgY2VydGlmaWNhdGUgZnJvbSBDQSBmaWxlICIKICAgICAgICAgICAgICAgICAiJyVzJzogJXMiLAogICAgICAgICAgICAgICAgIGNhX2ZpbGUsCi0gICAgICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICAgICAgICAgIEN1cmxfd2luYXBpX3N0cmVycm9yKEdldExhc3RFcnJvcigpLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSk7CiAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgICAgIG1vcmVfY2VydHMgPSAwOwogICAgICAgICB9CkBAIC0yNTIsNyArMjU2LDggQEAKICAgICAgICAgICAgICAgICAgICAgInNjaGFubmVsOiBmYWlsZWQgdG8gYWRkIGNlcnRpZmljYXRlIGZyb20gQ0EgZmlsZSAnJXMnICIKICAgICAgICAgICAgICAgICAgICAgInRvIGNlcnRpZmljYXRlIHN0b3JlOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgIGNhX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgICAgICAgICBtb3JlX2NlcnRzID0gMDsKICAgICAgICAgICAgIH0KQEAgLTI4MywxMSArMjg4LDEzOCBAQAogICAgIENsb3NlSGFuZGxlKGNhX2ZpbGVfaGFuZGxlKTsKICAgfQogICBDdXJsX3NhZmVmcmVlKGNhX2ZpbGVfYnVmZmVyKTsKLSAgQ3VybF91bmljb2RlZnJlZShjYV9maWxlX3RzdHIpOworICBjdXJseF91bmljb2RlZnJlZShjYV9maWxlX3RzdHIpOwogCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBuZWNlc3NhcnkgdG8gcG9wdWxhdGUgYWxsIHRoZSBob3N0X25hbWVzLgorICogSWYgaG9zdF9uYW1lcyBpcyBub3QgTlVMTCwgcG9wdWxhdGUgaXQgd2l0aCBhbGwgdGhlIGhvc3QgbmFtZXMuIEVhY2ggc3RyaW5nCisgKiBpbiB0aGUgaG9zdF9uYW1lcyBpcyBudWxsLXRlcm1pbmF0ZWQgYW5kIHRoZSBsYXN0IHN0cmluZyBpcyBkb3VibGUKKyAqIG51bGwtdGVybWluYXRlZC4gSWYgbm8gRE5TIG5hbWVzIGFyZSBmb3VuZCwgYSBzaW5nbGUgbnVsbC10ZXJtaW5hdGVkIGVtcHR5CisgKiBzdHJpbmcgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBEV09SRCBjZXJ0X2dldF9uYW1lX3N0cmluZyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfQ09OVEVYVCAqY2VydF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVFNUUiBob3N0X25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGxlbmd0aCkKK3sKKyAgRFdPUkQgYWN0dWFsX2xlbmd0aCA9IDA7CisgIEJPT0wgY29tcHV0ZV9jb250ZW50ID0gRkFMU0U7CisgIENFUlRfSU5GTyAqY2VydF9pbmZvID0gTlVMTDsKKyAgQ0VSVF9FWFRFTlNJT04gKmV4dGVuc2lvbiA9IE5VTEw7CisgIENSWVBUX0RFQ09ERV9QQVJBIGRlY29kZV9wYXJhID0gezAsIDAsIDB9OworICBDRVJUX0FMVF9OQU1FX0lORk8gKmFsdF9uYW1lX2luZm8gPSBOVUxMOworICBEV09SRCBhbHRfbmFtZV9pbmZvX3NpemUgPSAwOworICBCT09MIHJldF92YWwgPSBGQUxTRTsKKyAgTFBUU1RSIGN1cnJlbnRfcG9zID0gTlVMTDsKKyAgRFdPUkQgaTsKKworICAvKiBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHIGlzIGF2YWlsYWJsZSBmcm9tIFdpbmRvd3MgOCBvbndhcmRzLiAqLworICBpZihDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oNiwgMiwgUExBVEZPUk1fV0lOTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX0dSRUFURVJfVEhBTl9FUVVBTCkpIHsKKyNpZmRlZiBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHCisgICAgLyogQ2VydEdldE5hbWVTdHJpbmcgd2lsbCBwcm92aWRlIHRoZSA4LWJpdCBjaGFyYWN0ZXIgc3RyaW5nIHdpdGhvdXQKKyAgICAgKiBhbnkgZGVjb2RpbmcgKi8KKyAgICBEV09SRCBuYW1lX2ZsYWdzID0KKyAgICAgIENFUlRfTkFNRV9ESVNBQkxFX0lFNF9VVEY4X0ZMQUcgfCBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHOworICAgIGFjdHVhbF9sZW5ndGggPSBDZXJ0R2V0TmFtZVN0cmluZyhjZXJ0X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfTkFNRV9ETlNfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKKyAgICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKKyNlbmRpZgorICB9CisKKyAgY29tcHV0ZV9jb250ZW50ID0gaG9zdF9uYW1lcyAhPSBOVUxMICYmIGxlbmd0aCAhPSAwOworCisgIC8qIEluaXRpYWxpemUgZGVmYXVsdCByZXR1cm4gdmFsdWVzLiAqLworICBhY3R1YWxfbGVuZ3RoID0gMTsKKyAgaWYoY29tcHV0ZV9jb250ZW50KSB7CisgICAgKmhvc3RfbmFtZXMgPSAnXDAnOworICB9CisKKyAgaWYoIWNlcnRfY29udGV4dCkgeworICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogTnVsbCBjZXJ0aWZpY2F0ZSBjb250ZXh0LiIpOworICAgIHJldHVybiBhY3R1YWxfbGVuZ3RoOworICB9CisKKyAgY2VydF9pbmZvID0gY2VydF9jb250ZXh0LT5wQ2VydEluZm87CisgIGlmKCFjZXJ0X2luZm8pIHsKKyAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IE51bGwgY2VydGlmaWNhdGUgaW5mby4iKTsKKyAgICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKKyAgfQorCisgIGV4dGVuc2lvbiA9IENlcnRGaW5kRXh0ZW5zaW9uKHN6T0lEX1NVQkpFQ1RfQUxUX05BTUUyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X2luZm8tPmNFeHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfaW5mby0+cmdFeHRlbnNpb24pOworICBpZighZXh0ZW5zaW9uKSB7CisgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBDZXJ0RmluZEV4dGVuc2lvbigpIHJldHVybmVkIG5vIGV4dGVuc2lvbi4iKTsKKyAgICByZXR1cm4gYWN0dWFsX2xlbmd0aDsKKyAgfQorCisgIGRlY29kZV9wYXJhLmNiU2l6ZSA9IHNpemVvZihDUllQVF9ERUNPREVfUEFSQSk7CisKKyAgcmV0X3ZhbCA9CisgICAgQ3J5cHREZWNvZGVPYmplY3RFeChYNTA5X0FTTl9FTkNPRElORyB8IFBLQ1NfN19BU05fRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICBzek9JRF9TVUJKRUNUX0FMVF9OQU1FMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbi0+VmFsdWUucGJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLT5WYWx1ZS5jYkRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9ERUNPREVfQUxMT0NfRkxBRyB8IENSWVBUX0RFQ09ERV9OT0NPUFlfRkxBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICZkZWNvZGVfcGFyYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZhbHRfbmFtZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgJmFsdF9uYW1lX2luZm9fc2l6ZSk7CisgIGlmKCFyZXRfdmFsKSB7CisgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAic2NoYW5uZWw6IENyeXB0RGVjb2RlT2JqZWN0RXgoKSByZXR1cm5lZCBubyBhbHRlcm5hdGUgbmFtZSAiCisgICAgICAgICAgImluZm9ybWF0aW9uLiIpOworICAgIHJldHVybiBhY3R1YWxfbGVuZ3RoOworICB9CisKKyAgY3VycmVudF9wb3MgPSBob3N0X25hbWVzOworCisgIC8qIEl0ZXJhdGUgb3ZlciB0aGUgYWx0ZXJuYXRlIG5hbWVzIGFuZCBwb3B1bGF0ZSBob3N0X25hbWVzLiAqLworICBmb3IoaSA9IDA7IGkgPCBhbHRfbmFtZV9pbmZvLT5jQWx0RW50cnk7IGkrKykgeworICAgIGNvbnN0IENFUlRfQUxUX05BTUVfRU5UUlkgKmVudHJ5ID0gJmFsdF9uYW1lX2luZm8tPnJnQWx0RW50cnlbaV07CisgICAgd2NoYXJfdCAqZG5zX3cgPSBOVUxMOworICAgIHNpemVfdCBjdXJyZW50X2xlbmd0aCA9IDA7CisKKyAgICBpZihlbnRyeS0+ZHdBbHROYW1lQ2hvaWNlICE9IENFUlRfQUxUX05BTUVfRE5TX05BTUUpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZihlbnRyeS0+cHdzekROU05hbWUgPT0gTlVMTCkgeworICAgICAgaW5mb2YoZGF0YSwgInNjaGFubmVsOiBFbXB0eSBETlMgbmFtZS4iKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBjdXJyZW50X2xlbmd0aCA9IHdjc2xlbihlbnRyeS0+cHdzekROU05hbWUpICsgMTsKKyAgICBpZighY29tcHV0ZV9jb250ZW50KSB7CisgICAgICBhY3R1YWxfbGVuZ3RoICs9IChEV09SRCljdXJyZW50X2xlbmd0aDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICAvKiBTYW5pdHkgY2hlY2sgdG8gcHJldmVudCBidWZmZXIgb3ZlcnJ1bi4gKi8KKyAgICBpZigoYWN0dWFsX2xlbmd0aCArIGN1cnJlbnRfbGVuZ3RoKSA+IGxlbmd0aCkgeworICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBsaXN0IGFsbCBob3N0IG5hbWVzLiIpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRuc193ID0gZW50cnktPnB3c3pETlNOYW1lOworICAgIC8qIHB3c3pETlNOYW1lIGlzIGluIGlhNSBzdHJpbmcgZm9ybWF0IGFuZCBoZW5jZSBkb2Vzbid0IGNvbnRhaW4gYW55CisgICAgICogbm9uLWFzY2lpIGNoYXJhY3RlcnMuICovCisgICAgd2hpbGUoKmRuc193ICE9ICdcMCcpIHsKKyAgICAgICpjdXJyZW50X3BvcysrID0gKGNoYXIpKCpkbnNfdysrKTsKKyAgICB9CisgICAgKmN1cnJlbnRfcG9zKysgPSAnXDAnOworICAgIGFjdHVhbF9sZW5ndGggKz0gKERXT1JEKWN1cnJlbnRfbGVuZ3RoOworICB9CisgIGlmKGNvbXB1dGVfY29udGVudCkgeworICAgIC8qIExhc3Qgc3RyaW5nIGhhcyBkb3VibGUgbnVsbC10ZXJtaW5hdG9yLiAqLworICAgICpjdXJyZW50X3BvcyA9ICdcMCc7CisgIH0KKyAgcmV0dXJuIGFjdHVhbF9sZW5ndGg7Cit9CisKIHN0YXRpYyBDVVJMY29kZSB2ZXJpZnlfaG9zdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfQ09OVEVYVCAqcENlcnRDb250ZXh0U2VydmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCBjb25uX2hvc3RuYW1lKQpAQCAtMjk4LDIxICs0MzAsOCBAQAogICBEV09SRCBsZW4gPSAwOwogICBEV09SRCBhY3R1YWxfbGVuID0gMDsKIAotICAvKiBDZXJ0R2V0TmFtZVN0cmluZyB3aWxsIHByb3ZpZGUgdGhlIDgtYml0IGNoYXJhY3RlciBzdHJpbmcgd2l0aG91dAotICAgKiBhbnkgZGVjb2RpbmcgKi8KLSAgRFdPUkQgbmFtZV9mbGFncyA9IENFUlRfTkFNRV9ESVNBQkxFX0lFNF9VVEY4X0ZMQUc7Ci0KLSNpZmRlZiBDRVJUX05BTUVfU0VBUkNIX0FMTF9OQU1FU19GTEFHCi0gIG5hbWVfZmxhZ3MgfD0gQ0VSVF9OQU1FX1NFQVJDSF9BTExfTkFNRVNfRkxBRzsKLSNlbmRpZgotCiAgIC8qIERldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nIG5lZWRlZCBmb3IgdGhlIGNlcnQgaG9zdG5hbWUgKi8KLSAgbGVuID0gQ2VydEdldE5hbWVTdHJpbmcocENlcnRDb250ZXh0U2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDRVJUX05BTUVfRE5TX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICBsZW4gPSBjZXJ0X2dldF9uYW1lX3N0cmluZyhkYXRhLCBwQ2VydENvbnRleHRTZXJ2ZXIsIE5VTEwsIDApOwogICBpZihsZW4gPT0gMCkgewogICAgIGZhaWxmKGRhdGEsCiAgICAgICAgICAgInNjaGFubmVsOiBDZXJ0R2V0TmFtZVN0cmluZygpIHJldHVybmVkIG5vICIKQEAgLTMyOSwxMiArNDQ4LDggQEAKICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIGdvdG8gY2xlYW51cDsKICAgfQotICBhY3R1YWxfbGVuID0gQ2VydEdldE5hbWVTdHJpbmcocENlcnRDb250ZXh0U2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVF9OQU1FX0ROU19UWVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBUU1RSKSBjZXJ0X2hvc3RuYW1lX2J1ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4pOworICBhY3R1YWxfbGVuID0gY2VydF9nZXRfbmFtZV9zdHJpbmcoCisgICAgZGF0YSwgcENlcnRDb250ZXh0U2VydmVyLCAoTFBUU1RSKWNlcnRfaG9zdG5hbWVfYnVmZiwgbGVuKTsKIAogICAvKiBTYW5pdHkgY2hlY2sgKi8KICAgaWYoYWN0dWFsX2xlbiAhPSBsZW4pIHsKQEAgLTM2MSw3ICs0NzYsNyBAQAogICAgICAqIGlzIGFjY2VwdGFibGUgc2luY2UgYm90aCB2YWx1ZXMgYXJlIGFzc3VtZWQgdG8gdXNlIEFTQ0lJCiAgICAgICogKG9yIHNvbWUgZXF1aXZhbGVudCkgZW5jb2RpbmcKICAgICAgKi8KLSAgICBjZXJ0X2hvc3RuYW1lID0gQ3VybF9jb252ZXJ0X3RjaGFyX3RvX1VURjgoCisgICAgY2VydF9ob3N0bmFtZSA9IGN1cmx4X2NvbnZlcnRfdGNoYXJfdG9fVVRGOCgKICAgICAgICAgJmNlcnRfaG9zdG5hbWVfYnVmZltjZXJ0X2hvc3RuYW1lX2J1ZmZfaW5kZXhdKTsKICAgICBpZighY2VydF9ob3N0bmFtZSkgewogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKQEAgLTM5Myw3ICs1MDgsNyBAQAogCiAgICAgICAgIHJlc3VsdCA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgICAgIH0KLSAgICAgIEN1cmxfdW5pY29kZWZyZWUoY2VydF9ob3N0bmFtZSk7CisgICAgICBjdXJseF91bmljb2RlZnJlZShjZXJ0X2hvc3RuYW1lKTsKICAgICB9CiAgIH0KIApAQCAtNDA3LDcgKzUyMiw3IEBACiAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBzZXJ2ZXIgY2VydGlmaWNhdGUgbmFtZSB2ZXJpZmljYXRpb24gZmFpbGVkIik7CiAKIGNsZWFudXA6Ci0gIEN1cmxfdW5pY29kZWZyZWUoY2VydF9ob3N0bmFtZV9idWZmKTsKKyAgY3VybHhfdW5pY29kZWZyZWUoY2VydF9ob3N0bmFtZV9idWZmKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDIyLDkgKzUzNywxMyBAQAogICBjb25zdCBDRVJUX0NIQUlOX0NPTlRFWFQgKnBDaGFpbkNvbnRleHQgPSBOVUxMOwogICBIQ0VSVENIQUlORU5HSU5FIGNlcnRfY2hhaW5fZW5naW5lID0gTlVMTDsKICAgSENFUlRTVE9SRSB0cnVzdF9zdG9yZSA9IE5VTEw7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBjaGFyICogY29uc3QgY29ubl9ob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8KICAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CiAgICAgY29ubi0+aG9zdC5uYW1lOworI2Vsc2UKKyAgY29uc3QgY2hhciAqIGNvbnN0IGNvbm5faG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisjZW5kaWYKIAogICBzc3BpX3N0YXR1cyA9CiAgICAgc19wU2VjRm4tPlF1ZXJ5Q29udGV4dEF0dHJpYnV0ZXMoJkJBQ0tFTkQtPmN0eHQtPmN0eHRfaGFuZGxlLApAQCAtNDYwLDcgKzU3OSw3IEBACiAgICAgICBpZighdHJ1c3Rfc3RvcmUpIHsKICAgICAgICAgY2hhciBidWZmZXJbU1RSRVJST1JfTEVOXTsKICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBmYWlsZWQgdG8gY3JlYXRlIGNlcnRpZmljYXRlIHN0b3JlOiAlcyIsCi0gICAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgfQogICAgICAgZWxzZSB7CkBAIC00NzAsNyArNTg5LDcgQEAKICAgICB9CiAKICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT0spIHsKLSAgICAgIENFUlRfQ0hBSU5fRU5HSU5FX0NPTkZJR19XSU43IGVuZ2luZV9jb25maWc7CisgICAgICBzdHJ1Y3QgY2VydF9jaGFpbl9lbmdpbmVfY29uZmlnX3dpbjcgZW5naW5lX2NvbmZpZzsKICAgICAgIEJPT0wgY3JlYXRlX2VuZ2luZV9yZXN1bHQ7CiAKICAgICAgIG1lbXNldCgmZW5naW5lX2NvbmZpZywgMCwgc2l6ZW9mKGVuZ2luZV9jb25maWcpKTsKQEAgLTQ4OSw3ICs2MDgsNyBAQAogICAgICAgICBjaGFyIGJ1ZmZlcltTVFJFUlJPUl9MRU5dOwogICAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgICAic2NoYW5uZWw6IGZhaWxlZCB0byBjcmVhdGUgY2VydGlmaWNhdGUgY2hhaW4gZW5naW5lOiAlcyIsCi0gICAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgfQogICAgIH0KQEAgLTUxMiw3ICs2MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcENoYWluQ29udGV4dCkpIHsKICAgICAgIGNoYXIgYnVmZmVyW1NUUkVSUk9SX0xFTl07CiAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IENlcnRHZXRDZXJ0aWZpY2F0ZUNoYWluIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpOworICAgICAgICAgICAgQ3VybF93aW5hcGlfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKTsKICAgICAgIHBDaGFpbkNvbnRleHQgPSBOVUxMOwogICAgICAgcmVzdWx0ID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwogICAgIH0KQEAgLTUyMSw2ICs2NDAsMTUgQEAKICAgICAgIENFUlRfU0lNUExFX0NIQUlOICpwU2ltcGxlQ2hhaW4gPSBwQ2hhaW5Db250ZXh0LT5yZ3BDaGFpblswXTsKICAgICAgIERXT1JEIGR3VHJ1c3RFcnJvck1hc2sgPSB+KERXT1JEKShDRVJUX1RSVVNUX0lTX05PVF9USU1FX05FU1RFRCk7CiAgICAgICBkd1RydXN0RXJyb3JNYXNrICY9IHBTaW1wbGVDaGFpbi0+VHJ1c3RTdGF0dXMuZHdFcnJvclN0YXR1czsKKworICAgICAgaWYoZGF0YS0+c2V0LnNzbC5yZXZva2VfYmVzdF9lZmZvcnQpIHsKKyAgICAgICAgLyogSWdub3JlIGVycm9ycyB3aGVuIHJvb3QgY2VydGlmaWNhdGVzIGFyZSBtaXNzaW5nIHRoZSByZXZvY2F0aW9uCisgICAgICAgICAqIGxpc3QgVVJMLCBvciB3aGVuIHRoZSBsaXN0IGNvdWxkIG5vdCBiZSBkb3dubG9hZGVkIGJlY2F1c2UgdGhlCisgICAgICAgICAqIHNlcnZlciBpcyBjdXJyZW50bHkgdW5yZWFjaGFibGUuICovCisgICAgICAgIGR3VHJ1c3RFcnJvck1hc2sgJj0gfihEV09SRCkoQ0VSVF9UUlVTVF9SRVZPQ0FUSU9OX1NUQVRVU19VTktOT1dOIHwKKyAgICAgICAgICBDRVJUX1RSVVNUX0lTX09GRkxJTkVfUkVWT0NBVElPTik7CisgICAgICB9CisKICAgICAgIGlmKGR3VHJ1c3RFcnJvck1hc2spIHsKICAgICAgICAgaWYoZHdUcnVzdEVycm9yTWFzayAmIENFUlRfVFJVU1RfSVNfUkVWT0tFRCkKICAgICAgICAgICBmYWlsZihkYXRhLCAic2NoYW5uZWw6IENlcnRHZXRDZXJ0aWZpY2F0ZUNoYWluIHRydXN0IGVycm9yIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zZWN0cmFuc3AuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvc2VjdHJhbnNwLmMKaW5kZXggMmZkZjY2Mi4uMjYyN2FmZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy9zZWN0cmFuc3AuYworKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3NlY3RyYW5zcC5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNywgTmljayBaaXR6bWFubiwgPG5pY2t6bWFuQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAyMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNzksNyArNzksNyBAQAogLyogVGhlc2UgbWFjcm9zIG1lYW4gInRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcmVzZW50IHRvIGFsbG93IHJ1bnRpbWUgYmFja3dhcmQKICAgIGNvbXBhdGliaWxpdHkgd2l0aCBhdCBsZWFzdCB0aGlzIGNhdCBvciBlYXJsaWVyIjoKICAgIChZb3Ugc2V0IHRoaXMgYXQgYnVpbGQtdGltZSB1c2luZyB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lIG9wdGlvbgotICAgIi1tbWFjb3MtdmVyc2lvbi1taW4uIikgKi8KKyAgICItbW1hY29zeC12ZXJzaW9uLW1pbi4iKSAqLwogI2RlZmluZSBDVVJMX1NVUFBPUlRfTUFDXzEwXzUgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA1MAogI2RlZmluZSBDVVJMX1NVUFBPUlRfTUFDXzEwXzYgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA2MAogI2RlZmluZSBDVVJMX1NVUFBPUlRfTUFDXzEwXzcgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPD0gMTA3MApAQCAtMTM4LDggKzEzOCw2IEBACiAgIHNpemVfdCBzc2xfd3JpdGVfYnVmZmVyZWRfbGVuZ3RoOwogfTsKIAotI2RlZmluZSBCQUNLRU5EIGNvbm5zc2wtPmJhY2tlbmQKLQogLyogcGlubmVkIHB1YmxpYyBrZXkgc3VwcG9ydCB0ZXN0cyAqLwogCiAvKiB2ZXJzaW9uIDEgc3VwcG9ydHMgbWFjT1MgMTAuMTIrIGFuZCBpT1MgMTArICovCkBAIC0yMDEsNyArMTk5LDggQEAKICAgVUludDggKmN1cnJEYXRhID0gKFVJbnQ4ICopZGF0YTsKICAgLyppbnQgc29jayA9ICooaW50ICopY29ubmVjdGlvbjsqLwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9IChzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqKWNvbm5lY3Rpb247Ci0gIGludCBzb2NrID0gQkFDS0VORC0+c3NsX3NvY2tmZDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBpbnQgc29jayA9IGJhY2tlbmQtPnNzbF9zb2NrZmQ7CiAgIE9TU3RhdHVzIHJ0biA9IG5vRXJyOwogICBzaXplX3QgYnl0ZXNSZWFkOwogICBzc2l6ZV90IHJydG47CkBAIC0yMzAsNyArMjI5LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgRUFHQUlOOgogICAgICAgICAgICAgcnRuID0gZXJyU1NMV291bGRCbG9jazsKLSAgICAgICAgICAgIEJBQ0tFTkQtPnNzbF9kaXJlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnNzbF9kaXJlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBydG4gPSBpb0VycjsKQEAgLTI2MSw3ICsyNjAsOCBAQAogICBzaXplX3QgYnl0ZXNTZW50ID0gMDsKICAgLyppbnQgc29jayA9ICooaW50ICopY29ubmVjdGlvbjsqLwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9IChzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqKWNvbm5lY3Rpb247Ci0gIGludCBzb2NrID0gQkFDS0VORC0+c3NsX3NvY2tmZDsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBpbnQgc29jayA9IGJhY2tlbmQtPnNzbF9zb2NrZmQ7CiAgIHNzaXplX3QgbGVuZ3RoOwogICBzaXplX3QgZGF0YUxlbiA9ICpkYXRhTGVuZ3RoOwogICBjb25zdCBVSW50OCAqZGF0YVB0ciA9IChVSW50OCAqKWRhdGE7CkBAIC0yODEsNyArMjgxLDcgQEAKICAgICB0aGVFcnIgPSBlcnJubzsKICAgICBpZih0aGVFcnIgPT0gRUFHQUlOKSB7CiAgICAgICBvcnRuID0gZXJyU1NMV291bGRCbG9jazsKLSAgICAgIEJBQ0tFTkQtPnNzbF9kaXJlY3Rpb24gPSB0cnVlOworICAgICAgYmFja2VuZC0+c3NsX2RpcmVjdGlvbiA9IHRydWU7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgb3J0biA9IGlvRXJyOwpAQCAtMTEyNiwxMiArMTEyNiwxMiBAQAogfQogCiBzdGF0aWMgT1NTdGF0dXMgQ29weUlkZW50aXR5RnJvbVBLQ1MxMkZpbGUoY29uc3QgY2hhciAqY1BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfYmxvYiAqYmxvYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjUGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjSWRlbnRpdHlSZWYgKm91dF9jZXJ0X2FuZF9rZXkpCiB7CiAgIE9TU3RhdHVzIHN0YXR1cyA9IGVyclNlY0l0ZW1Ob3RGb3VuZDsKLSAgQ0ZVUkxSZWYgcGtjc191cmwgPSBDRlVSTENyZWF0ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oTlVMTCwKLSAgICAoY29uc3QgVUludDggKiljUGF0aCwgc3RybGVuKGNQYXRoKSwgZmFsc2UpOworICBDRlVSTFJlZiBwa2NzX3VybCA9IE5VTEw7CiAgIENGU3RyaW5nUmVmIHBhc3N3b3JkID0gY1Bhc3N3b3JkID8gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhOVUxMLAogICAgIGNQYXNzd29yZCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSA6IE5VTEw7CiAgIENGRGF0YVJlZiBwa2NzX2RhdGEgPSBOVUxMOwpAQCAtMTE0MCw4ICsxMTQwLDI2IEBACiAgIC8qIFRoZXNlIGNvbnN0YW50cyBhcmUgZG9jdW1lbnRlZCBhcyBoYXZpbmcgZmlyc3QgYXBwZWFyZWQgaW4gMTAuNiBidXQgdGhleQogICAgICByYWlzZSBsaW5rZXIgZXJyb3JzIHdoZW4gdXNlZCBvbiB0aGF0IGNhdCBmb3Igc29tZSByZWFzb24uICovCiAjaWYgQ1VSTF9CVUlMRF9NQUNfMTBfNyB8fCBDVVJMX0JVSUxEX0lPUwotICBpZihDRlVSTENyZWF0ZURhdGFBbmRQcm9wZXJ0aWVzRnJvbVJlc291cmNlKE5VTEwsIHBrY3NfdXJsLCAmcGtjc19kYXRhLAotICAgTlVMTCwgTlVMTCwgJnN0YXR1cykpIHsKKyAgYm9vbCByZXNvdXJjZV9pbXBvcnRlZDsKKworICBpZihibG9iKSB7CisgICAgcGtjc19kYXRhID0gQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopYmxvYi0+ZGF0YSwgYmxvYi0+bGVuKTsKKyAgICBzdGF0dXMgPSAocGtjc19kYXRhICE9IE5VTEwpID8gZXJyU2VjU3VjY2VzcyA6IGVyclNlY0FsbG9jYXRlOworICAgIHJlc291cmNlX2ltcG9ydGVkID0gKHBrY3NfZGF0YSAhPSBOVUxMKTsKKyAgfQorICBlbHNlIHsKKyAgICBwa2NzX3VybCA9CisgICAgICBDRlVSTENyZWF0ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgVUludDggKiljUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY1BhdGgpLCBmYWxzZSk7CisgICAgcmVzb3VyY2VfaW1wb3J0ZWQgPQorICAgICAgQ0ZVUkxDcmVhdGVEYXRhQW5kUHJvcGVydGllc0Zyb21SZXNvdXJjZShOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2NzX3VybCwgJnBrY3NfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgJnN0YXR1cyk7CisgIH0KKworICBpZihyZXNvdXJjZV9pbXBvcnRlZCkgewogICAgIENGQXJyYXlSZWYgaXRlbXMgPSBOVUxMOwogCiAgIC8qIE9uIGlPUyBTZWNQS0NTMTJJbXBvcnQgd2lsbCBuZXZlciBhZGQgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSB0byB0aGUKQEAgLTExNjQsNyArMTE4Miw3IEBACiAgICAqIHRoZSBLZXljaGFpbi4KICAgICoKICAgICogQXMgdGhpcyBkb2Vzbid0IG1hdGNoIGlPUywgYW5kIGFwcHMgbWF5IG5vdCB3YW50IHRvIHNlZSB0aGVpciBjbGllbnQKLSAgICogY2VydGlmaWNhdGUgc2F2ZWQgaW4gdGhlIHRoZSB1c2VyJ3Mga2V5Y2hhaW4sIHdlIHVzZSBTZWNJdGVtSW1wb3J0CisgICAqIGNlcnRpZmljYXRlIHNhdmVkIGluIHRoZSB1c2VyJ3Mga2V5Y2hhaW4sIHdlIHVzZSBTZWNJdGVtSW1wb3J0CiAgICAqIHdpdGggYSBOVUxMIGtleWNoYWluIHRvIGF2b2lkIGltcG9ydGluZyBpdC4KICAgICoKICAgICogVGhpcyByZXR1cm5zIGEgU2VjQ2VydGlmaWNhdGVSZWYgZnJvbSB3aGljaCB3ZSBjYW4gY29uc3RydWN0IGEKQEAgLTEyMTksNyArMTIzNyw4IEBACiAjZW5kaWYgLyogQ1VSTF9CVUlMRF9NQUNfMTBfNyB8fCBDVVJMX0JVSUxEX0lPUyAqLwogICBpZihwYXNzd29yZCkKICAgICBDRlJlbGVhc2UocGFzc3dvcmQpOwotICBDRlJlbGVhc2UocGtjc191cmwpOworICBpZihwa2NzX3VybCkKKyAgICBDRlJlbGVhc2UocGtjc191cmwpOwogICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMjc2LDYgKzEyOTUsNyBAQAogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgbG9uZyBzc2xfdmVyc2lvbiA9IFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKTsKICAgbG9uZyBzc2xfdmVyc2lvbl9tYXggPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbl9tYXgpOwogICBsb25nIG1heF9zdXBwb3J0ZWRfdmVyc2lvbl9ieV9vczsKQEAgLTEzMjYsMzAgKzEzNDYsMzAgQEAKICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWluKEJBQ0tFTkQtPnNzbF9jdHgsIGRhcndpbl92ZXJfbWluKTsKLSAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoQkFDS0VORC0+c3NsX2N0eCwgZGFyd2luX3Zlcl9tYXgpOworICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1pbihiYWNrZW5kLT5zc2xfY3R4LCBkYXJ3aW5fdmVyX21pbik7CisgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KGJhY2tlbmQtPnNzbF9jdHgsIGRhcndpbl92ZXJfbWF4KTsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAgIGVsc2UgewogI2lmIENVUkxfU1VQUE9SVF9NQUNfMTBfOAogICAgIGxvbmcgaSA9IHNzbF92ZXJzaW9uOwotICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU1NMUHJvdG9jb2xBbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgZm9yKDsgaSA8PSAoc3NsX3ZlcnNpb25fbWF4ID4+IDE2KTsgaSsrKSB7CiAgICAgICBzd2l0Y2goaSkgewogICAgICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgotICAgICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOgotICAgICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKLSAgICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKEJBQ0tFTkQtPnNzbF9jdHgsCisgICAgICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgYnJlYWs7CkBAIC0xMzczLDkgKzEzOTMsMTIgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NhZmlsZSA9IFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOworICBjb25zdCBzdHJ1Y3QgY3VybF9ibG9iICpzc2xfY2FibG9iID0gTlVMTDsKICAgY29uc3QgYm9vbCB2ZXJpZnlwZWVyID0gU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpOwogICBjaGFyICogY29uc3Qgc3NsX2NlcnQgPSBTU0xfU0VUX09QVElPTihjZXJ0KTsKKyAgY29uc3Qgc3RydWN0IGN1cmxfYmxvYiAqc3NsX2NlcnRfYmxvYiA9IFNTTF9TRVRfT1BUSU9OKGNlcnRfYmxvYik7CiAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgogICAgIGNvbm4tPmhvc3QubmFtZTsKICAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+cG9ydCA6IGNvbm4tPnJlbW90ZV9wb3J0OwpAQCAtMTM5NSwxMCArMTQxOCwxMCBAQAogCiAjaWYgQ1VSTF9CVUlMRF9NQUNfMTBfOCB8fCBDVVJMX0JVSUxEX0lPUwogICBpZihTU0xDcmVhdGVDb250ZXh0ICE9IE5VTEwpIHsgIC8qIHVzZSB0aGUgbmV3ZXIgQVBJIGlmIGF2YWlsYWJsZSAqLwotICAgIGlmKEJBQ0tFTkQtPnNzbF9jdHgpCi0gICAgICBDRlJlbGVhc2UoQkFDS0VORC0+c3NsX2N0eCk7Ci0gICAgQkFDS0VORC0+c3NsX2N0eCA9IFNTTENyZWF0ZUNvbnRleHQoTlVMTCwga1NTTENsaWVudFNpZGUsIGtTU0xTdHJlYW1UeXBlKTsKLSAgICBpZighQkFDS0VORC0+c3NsX2N0eCkgeworICAgIGlmKGJhY2tlbmQtPnNzbF9jdHgpCisgICAgICBDRlJlbGVhc2UoYmFja2VuZC0+c3NsX2N0eCk7CisgICAgYmFja2VuZC0+c3NsX2N0eCA9IFNTTENyZWF0ZUNvbnRleHQoTlVMTCwga1NTTENsaWVudFNpZGUsIGtTU0xTdHJlYW1UeXBlKTsKKyAgICBpZighYmFja2VuZC0+c3NsX2N0eCkgewogICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgY29udGV4dCEiKTsKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIH0KQEAgLTE0MDYsOSArMTQyOSw5IEBACiAgIGVsc2UgewogICAvKiBUaGUgb2xkIFNUIEFQSSBkb2VzIG5vdCBleGlzdCB1bmRlciBpT1MsIHNvIGRvbid0IGNvbXBpbGUgaXQ6ICovCiAjaWYgQ1VSTF9TVVBQT1JUX01BQ18xMF84Ci0gICAgaWYoQkFDS0VORC0+c3NsX2N0eCkKLSAgICAgICh2b2lkKVNTTERpc3Bvc2VDb250ZXh0KEJBQ0tFTkQtPnNzbF9jdHgpOwotICAgIGVyciA9IFNTTE5ld0NvbnRleHQoZmFsc2UsICYoQkFDS0VORC0+c3NsX2N0eCkpOworICAgIGlmKGJhY2tlbmQtPnNzbF9jdHgpCisgICAgICAodm9pZClTU0xEaXNwb3NlQ29udGV4dChiYWNrZW5kLT5zc2xfY3R4KTsKKyAgICBlcnIgPSBTU0xOZXdDb250ZXh0KGZhbHNlLCAmKGJhY2tlbmQtPnNzbF9jdHgpKTsKICAgICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGNyZWF0ZSBhIGNvbnRleHQ6IE9TU3RhdHVzICVkIiwgZXJyKTsKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtMTQxNiwzMSArMTQzOSwzMSBAQAogI2VuZGlmIC8qIENVUkxfU1VQUE9SVF9NQUNfMTBfOCAqLwogICB9CiAjZWxzZQotICBpZihCQUNLRU5ELT5zc2xfY3R4KQotICAgICh2b2lkKVNTTERpc3Bvc2VDb250ZXh0KEJBQ0tFTkQtPnNzbF9jdHgpOwotICBlcnIgPSBTU0xOZXdDb250ZXh0KGZhbHNlLCAmKEJBQ0tFTkQtPnNzbF9jdHgpKTsKKyAgaWYoYmFja2VuZC0+c3NsX2N0eCkKKyAgICAodm9pZClTU0xEaXNwb3NlQ29udGV4dChiYWNrZW5kLT5zc2xfY3R4KTsKKyAgZXJyID0gU1NMTmV3Q29udGV4dChmYWxzZSwgJihiYWNrZW5kLT5zc2xfY3R4KSk7CiAgIGlmKGVyciAhPSBub0VycikgewogICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGNyZWF0ZSBhIGNvbnRleHQ6IE9TU3RhdHVzICVkIiwgZXJyKTsKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQogI2VuZGlmIC8qIENVUkxfQlVJTERfTUFDXzEwXzggfHwgQ1VSTF9CVUlMRF9JT1MgKi8KLSAgQkFDS0VORC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCA9IDBVTDsgLyogcmVzZXQgYnVmZmVyZWQgd3JpdGUgbGVuZ3RoICovCisgIGJhY2tlbmQtPnNzbF93cml0ZV9idWZmZXJlZF9sZW5ndGggPSAwVUw7IC8qIHJlc2V0IGJ1ZmZlcmVkIHdyaXRlIGxlbmd0aCAqLwogCiAgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gdXNlIGFuIGV4cGxpY2l0IFNTTC9UTFMgdmVyc2lvbiAqLwogI2lmIENVUkxfQlVJTERfTUFDXzEwXzggfHwgQ1VSTF9CVUlMRF9JT1MKICAgaWYoU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4ICE9IE5VTEwpIHsKICAgICBzd2l0Y2goY29ubi0+c3NsX2NvbmZpZy52ZXJzaW9uKSB7CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6Ci0gICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oQkFDS0VORC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMSk7CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oYmFja2VuZC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMSk7CiAjaWYgKENVUkxfQlVJTERfTUFDXzEwXzEzIHx8IENVUkxfQlVJTERfSU9TXzExKSAmJiBIQVZFX0JVSUxUSU5fQVZBSUxBQkxFID09IDEKICAgICAgIGlmKF9fYnVpbHRpbl9hdmFpbGFibGUobWFjT1MgMTAuMTMsIGlPUyAxMS4wLCAqKSkgewotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoQkFDS0VORC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMTMpOworICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoYmFja2VuZC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMTMpOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChCQUNLRU5ELT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxMik7CisgICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChiYWNrZW5kLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxMik7CiAgICAgICB9CiAjZWxzZQotICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KEJBQ0tFTkQtPnNzbF9jdHgsIGtUTFNQcm90b2NvbDEyKTsKKyAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChiYWNrZW5kLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxMik7CiAjZW5kaWYgLyogKENVUkxfQlVJTERfTUFDXzEwXzEzIHx8IENVUkxfQlVJTERfSU9TXzExKSAmJgogICAgICAgICAgIEhBVkVfQlVJTFRJTl9BVkFJTEFCTEUgPT0gMSAqLwogICAgICAgYnJlYWs7CkBAIC0xNDU2LDIwICsxNDc5LDIwIEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWluKEJBQ0tFTkQtPnNzbF9jdHgsIGtTU0xQcm90b2NvbDMpOworICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWluKGJhY2tlbmQtPnNzbF9jdHgsIGtTU0xQcm90b2NvbDMpOwogICAgICAgaWYoZXJyICE9IG5vRXJyKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJZb3VyIHZlcnNpb24gb2YgdGhlIE9TIGRvZXMgbm90IHN1cHBvcnQgU1NMdjMiKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICAgICAgfQotICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KEJBQ0tFTkQtPnNzbF9jdHgsIGtTU0xQcm90b2NvbDMpOworICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KGJhY2tlbmQtPnNzbF9jdHgsIGtTU0xQcm90b2NvbDMpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6Ci0gICAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oQkFDS0VORC0+c3NsX2N0eCwga1NTTFByb3RvY29sMik7CisgICAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oYmFja2VuZC0+c3NsX2N0eCwga1NTTFByb3RvY29sMik7CiAgICAgICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICAgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgICB9Ci0gICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoQkFDS0VORC0+c3NsX2N0eCwga1NTTFByb3RvY29sMik7CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoYmFja2VuZC0+c3NsX2N0eCwga1NTTFByb3RvY29sMik7CiAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKQEAgLTE0NzgsMTkgKzE1MDEsMTkgQEAKICAgfQogICBlbHNlIHsKICNpZiBDVVJMX1NVUFBPUlRfTUFDXzEwXzgKLSAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKEJBQ0tFTkQtPnNzbF9jdHgsCisgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFByb3RvY29sQWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogICAgIHN3aXRjaChjb25uLT5zc2xfY29uZmlnLnZlcnNpb24pIHsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgotICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoYmFja2VuZC0+c3NsX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1RMU1Byb3RvY29sMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICBicmVhazsKQEAgLTE1MDUsNyArMTUyOCw3IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU1NMUHJvdG9jb2wzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTUxNCw3ICsxNTM3LDcgQEAKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYyOgotICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU1NMUHJvdG9jb2wyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTUzNCwxMiArMTU1NywxMiBAQAogICAgICAgICAgICAgICAgICIgU1NML1RMUyB2ZXJzaW9uIik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9Ci0gICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwga1NTTFByb3RvY29sQWxsLCBmYWxzZSk7CisgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoYmFja2VuZC0+c3NsX2N0eCwga1NTTFByb3RvY29sQWxsLCBmYWxzZSk7CiAgIHN3aXRjaChjb25uLT5zc2xfY29uZmlnLnZlcnNpb24pIHsKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6Ci0gICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChCQUNLRU5ELT5zc2xfY3R4LAorICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoYmFja2VuZC0+c3NsX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICBicmVhazsKQEAgLTE1NTMsNyArMTU3Niw3IEBACiAgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBUTFN2MS4zIik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKLSAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKEJBQ0tFTkQtPnNzbF9jdHgsCisgICAgZXJyID0gU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFByb3RvY29sMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTU2Miw3ICsxNTg1LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgIGVyciA9IFNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoQkFDS0VORC0+c3NsX2N0eCwKKyAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU1NMUHJvdG9jb2wzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgaWYoZXJyICE9IG5vRXJyKSB7CkBAIC0xNTk2LDcgKzE2MTksNyBAQAogICAgICAgLyogZXhwZWN0cyBsZW5ndGggcHJlZml4ZWQgcHJlZmVyZW5jZSBvcmRlcmVkIGxpc3Qgb2YgcHJvdG9jb2xzIGluIHdpcmUKICAgICAgICAqIGZvcm1hdAogICAgICAgICovCi0gICAgICBlcnIgPSBTU0xTZXRBTFBOUHJvdG9jb2xzKEJBQ0tFTkQtPnNzbF9jdHgsIGFscG5BcnIpOworICAgICAgZXJyID0gU1NMU2V0QUxQTlByb3RvY29scyhiYWNrZW5kLT5zc2xfY3R4LCBhbHBuQXJyKTsKICAgICAgIGlmKGVyciAhPSBub0VycikKICAgICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBzZXQgQUxQTiBwcm90b2NvbHM7IE9TU3RhdHVzICVkXG4iLAogICAgICAgICAgICAgICBlcnIpOwpAQCAtMTYxMCwxNSArMTYzMywxNiBAQAogICAgICAgICAgICJUcmFuc3BvcnQuIFRoZSBwcml2YXRlIGtleSBtdXN0IGJlIGluIHRoZSBLZXljaGFpbi5cbiIpOwogICB9CiAKLSAgaWYoc3NsX2NlcnQpIHsKKyAgaWYoc3NsX2NlcnQgfHwgc3NsX2NlcnRfYmxvYikgeworICAgIGJvb2wgaXNfY2VydF9kYXRhID0gc3NsX2NlcnRfYmxvYiAhPSBOVUxMOworICAgIGJvb2wgaXNfY2VydF9maWxlID0gKCFpc19jZXJ0X2RhdGEpICYmIGlzX2ZpbGUoc3NsX2NlcnQpOwogICAgIFNlY0lkZW50aXR5UmVmIGNlcnRfYW5kX2tleSA9IE5VTEw7Ci0gICAgYm9vbCBpc19jZXJ0X2ZpbGUgPSBpc19maWxlKHNzbF9jZXJ0KTsKIAogICAgIC8qIFVzZXIgd2FudHMgdG8gYXV0aGVudGljYXRlIHdpdGggYSBjbGllbnQgY2VydC4gTG9vayBmb3IgaXQ6CiAgICAgICAgSWYgd2UgZGV0ZWN0IHRoYXQgdGhpcyBpcyBhIGZpbGUgb24gZGlzaywgdGhlbiBsZXQncyBsb2FkIGl0LgogICAgICAgIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gdXNlIGFuIGlkZW50aXR5IGxvYWRlZAogICAgICAgIGZyb20gdGhlIEtleWNoYWluLiAqLwotICAgIGlmKGlzX2NlcnRfZmlsZSkgeworICAgIGlmKGlzX2NlcnRfZmlsZSB8fCBpc19jZXJ0X2RhdGEpIHsKICAgICAgIGlmKCFTU0xfU0VUX09QVElPTihjZXJ0X3R5cGUpKQogICAgICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogU1NMOiBDZXJ0aWZpY2F0ZSB0eXBlIG5vdCBzZXQsIGFzc3VtaW5nICIKICAgICAgICAgICAgICAgICAgICAgIlBLQ1MjMTIgZm9ybWF0LlxuIik7CkBAIC0xNjI3LDcgKzE2NTEsNyBAQAogICAgICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogU1NMOiBUaGUgU2VjdXJpdHkgZnJhbWV3b3JrIG9ubHkgc3VwcG9ydHMgIgogICAgICAgICAgICAgICAgICAgICAibG9hZGluZyBpZGVudGl0aWVzIHRoYXQgYXJlIGluIFBLQ1MjMTIgZm9ybWF0LlxuIik7CiAKLSAgICAgIGVyciA9IENvcHlJZGVudGl0eUZyb21QS0NTMTJGaWxlKHNzbF9jZXJ0LAorICAgICAgZXJyID0gQ29weUlkZW50aXR5RnJvbVBLQ1MxMkZpbGUoc3NsX2NlcnQsIHNzbF9jZXJ0X2Jsb2IsCiAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpLCAmY2VydF9hbmRfa2V5KTsKICAgICB9CiAgICAgZWxzZQpAQCAtMTY1Nyw3ICsxNjgxLDcgQEAKICAgICAgIGNlcnRzX2NbMF0gPSBjZXJ0X2FuZF9rZXk7CiAgICAgICBjZXJ0cyA9IENGQXJyYXlDcmVhdGUoTlVMTCwgKGNvbnN0IHZvaWQgKiopY2VydHNfYywgMUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgICBlcnIgPSBTU0xTZXRDZXJ0aWZpY2F0ZShCQUNLRU5ELT5zc2xfY3R4LCBjZXJ0cyk7CisgICAgICBlcnIgPSBTU0xTZXRDZXJ0aWZpY2F0ZShiYWNrZW5kLT5zc2xfY3R4LCBjZXJ0cyk7CiAgICAgICBpZihjZXJ0cykKICAgICAgICAgQ0ZSZWxlYXNlKGNlcnRzKTsKICAgICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTY2NywyNyArMTY5MSwzMCBAQAogICAgICAgQ0ZSZWxlYXNlKGNlcnRfYW5kX2tleSk7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgY29uc3QgY2hhciAqY2VydF9zaG93ZmlsZW5hbWVfZXJyb3IgPQorICAgICAgICBpc19jZXJ0X2RhdGEgPyAiKG1lbW9yeSBibG9iKSIgOiBzc2xfY2VydDsKKwogICAgICAgc3dpdGNoKGVycikgewogICAgICAgY2FzZSBlcnJTZWNBdXRoRmFpbGVkOiBjYXNlIC0yNTI2NDogLyogZXJyU2VjUGtjczEyVmVyaWZ5RmFpbHVyZSAqLwogICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBJbmNvcnJlY3QgcGFzc3dvcmQgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBcIiVzXCIgIgotICAgICAgICAgICAgICAgICAgICAiYW5kIGl0cyBwcml2YXRlIGtleS4iLCBzc2xfY2VydCk7CisgICAgICAgICAgICAgICAgICAgICJhbmQgaXRzIHByaXZhdGUga2V5LiIsIGNlcnRfc2hvd2ZpbGVuYW1lX2Vycm9yKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIC0yNjI3NTogLyogZXJyU2VjRGVjb2RlICovIGNhc2UgLTI1MjU3OiAvKiBlcnJTZWNVbmtub3duRm9ybWF0ICovCiAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IENvdWxkbid0IG1ha2Ugc2Vuc2Ugb2YgdGhlIGRhdGEgaW4gdGhlICIKICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmljYXRlIFwiJXNcIiBhbmQgaXRzIHByaXZhdGUga2V5LiIsCi0gICAgICAgICAgICAgICAgICAgIHNzbF9jZXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgY2VydF9zaG93ZmlsZW5hbWVfZXJyb3IpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgLTI1MjYwOiAvKiBlcnJTZWNQYXNzcGhyYXNlUmVxdWlyZWQgKi8KICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBUaGUgY2VydGlmaWNhdGUgXCIlc1wiIHJlcXVpcmVzIGEgcGFzc3dvcmQuIiwKLSAgICAgICAgICAgICAgICAgICAgc3NsX2NlcnQpOworICAgICAgICAgICAgICAgICAgICBjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBlcnJTZWNJdGVtTm90Rm91bmQ6CiAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IENhbid0IGZpbmQgdGhlIGNlcnRpZmljYXRlIFwiJXNcIiBhbmQgaXRzIHByaXZhdGUgIgotICAgICAgICAgICAgICAgICAgICAia2V5IGluIHRoZSBLZXljaGFpbi4iLCBzc2xfY2VydCk7CisgICAgICAgICAgICAgICAgICAgICJrZXkgaW4gdGhlIEtleWNoYWluLiIsIGNlcnRfc2hvd2ZpbGVuYW1lX2Vycm9yKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBDYW4ndCBsb2FkIHRoZSBjZXJ0aWZpY2F0ZSBcIiVzXCIgYW5kIGl0cyBwcml2YXRlICIKLSAgICAgICAgICAgICAgICAgICAgImtleTogT1NTdGF0dXMgJWQiLCBzc2xfY2VydCwgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgImtleTogT1NTdGF0dXMgJWQiLCBjZXJ0X3Nob3dmaWxlbmFtZV9lcnJvciwgZXJyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOwpAQCAtMTcxOSw4ICsxNzQ2LDkgQEAKICNlbHNlCiAgIGlmKFNTTFNldFNlc3Npb25PcHRpb24gIT0gTlVMTCkgewogI2VuZGlmIC8qIENVUkxfQlVJTERfTUFDICovCi0gICAgYm9vbCBicmVha19vbl9hdXRoID0gIWNvbm4tPnNzbF9jb25maWcudmVyaWZ5cGVlciB8fCBzc2xfY2FmaWxlOwotICAgIGVyciA9IFNTTFNldFNlc3Npb25PcHRpb24oQkFDS0VORC0+c3NsX2N0eCwKKyAgICBib29sIGJyZWFrX29uX2F1dGggPSAhY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlwZWVyIHx8CisgICAgICBzc2xfY2FmaWxlIHx8IHNzbF9jYWJsb2I7CisgICAgZXJyID0gU1NMU2V0U2Vzc2lvbk9wdGlvbihiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFNlc3Npb25PcHRpb25CcmVha09uU2VydmVyQXV0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrX29uX2F1dGgpOwogICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTczMCw3ICsxNzU4LDcgQEAKICAgfQogICBlbHNlIHsKICNpZiBDVVJMX1NVUFBPUlRfTUFDXzEwXzgKLSAgICBlcnIgPSBTU0xTZXRFbmFibGVDZXJ0VmVyaWZ5KEJBQ0tFTkQtPnNzbF9jdHgsCisgICAgZXJyID0gU1NMU2V0RW5hYmxlQ2VydFZlcmlmeShiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlwZWVyP3RydWU6ZmFsc2UpOwogICAgIGlmKGVyciAhPSBub0VycikgewogICAgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMU2V0RW5hYmxlQ2VydFZlcmlmeSgpIGZhaWxlZDogT1NTdGF0dXMgJWQiLCBlcnIpOwpAQCAtMTczOSw3ICsxNzY3LDcgQEAKICNlbmRpZiAvKiBDVVJMX1NVUFBPUlRfTUFDXzEwXzggKi8KICAgfQogI2Vsc2UKLSAgZXJyID0gU1NMU2V0RW5hYmxlQ2VydFZlcmlmeShCQUNLRU5ELT5zc2xfY3R4LAorICBlcnIgPSBTU0xTZXRFbmFibGVDZXJ0VmVyaWZ5KGJhY2tlbmQtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlwZWVyP3RydWU6ZmFsc2UpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xTZXRFbmFibGVDZXJ0VmVyaWZ5KCkgZmFpbGVkOiBPU1N0YXR1cyAlZCIsIGVycik7CkBAIC0xNzQ3LDEwICsxNzc1LDExIEBACiAgIH0KICNlbmRpZiAvKiBDVVJMX0JVSUxEX01BQ18xMF82IHx8IENVUkxfQlVJTERfSU9TICovCiAKLSAgaWYoc3NsX2NhZmlsZSAmJiB2ZXJpZnlwZWVyKSB7Ci0gICAgYm9vbCBpc19jZXJ0X2ZpbGUgPSBpc19maWxlKHNzbF9jYWZpbGUpOworICBpZigoc3NsX2NhZmlsZSB8fCBzc2xfY2FibG9iKSAmJiB2ZXJpZnlwZWVyKSB7CisgICAgYm9vbCBpc19jZXJ0X2RhdGEgPSBzc2xfY2FibG9iICE9IE5VTEw7CisgICAgYm9vbCBpc19jZXJ0X2ZpbGUgPSAoIWlzX2NlcnRfZGF0YSkgJiYgaXNfZmlsZShzc2xfY2FmaWxlKTsKIAotICAgIGlmKCFpc19jZXJ0X2ZpbGUpIHsKKyAgICBpZighKGlzX2NlcnRfZmlsZSB8fCBpc19jZXJ0X2RhdGEpKSB7CiAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBjYW4ndCBsb2FkIENBIGNlcnRpZmljYXRlIGZpbGUgJXMiLCBzc2xfY2FmaWxlKTsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CiAgICAgfQpAQCAtMTc2MCw3ICsxNzg5LDcgQEAKICAgICogQm90aCBob3N0bmFtZSBjaGVjayBhbmQgU05JIHJlcXVpcmUgU1NMU2V0UGVlckRvbWFpbk5hbWUoKS4KICAgICogQWxzbzogdGhlIHZlcmlmeWhvc3Qgc2V0dGluZyBpbmZsdWVuY2VzIFNOSSB1c2FnZSAqLwogICBpZihjb25uLT5zc2xfY29uZmlnLnZlcmlmeWhvc3QpIHsKLSAgICBlcnIgPSBTU0xTZXRQZWVyRG9tYWluTmFtZShCQUNLRU5ELT5zc2xfY3R4LCBob3N0bmFtZSwKKyAgICBlcnIgPSBTU0xTZXRQZWVyRG9tYWluTmFtZShiYWNrZW5kLT5zc2xfY3R4LCBob3N0bmFtZSwKICAgICBzdHJsZW4oaG9zdG5hbWUpKTsKIAogICAgIGlmKGVyciAhPSBub0VycikgewpAQCAtMTc4Niw3ICsxODE1LDcgQEAKICAgICAgaGlnaGVyIHByaW9yaXR5LCBidXQgaXQncyBwcm9iYWJseSBiZXR0ZXIgdGhhdCB3ZSBub3QgY29ubmVjdCBhdCBhbGwgdGhhbgogICAgICB0byBnaXZlIHRoZSB1c2VyIGEgZmFsc2Ugc2Vuc2Ugb2Ygc2VjdXJpdHkgaWYgdGhlIHNlcnZlciBvbmx5IHN1cHBvcnRzCiAgICAgIGluc2VjdXJlIGNpcGhlcnMuIChOb3RlOiBXZSBkb24ndCBjYXJlIGFib3V0IFNTTHYyLW9ubHkgY2lwaGVycy4pICovCi0gIGVyciA9IFNTTEdldE51bWJlclN1cHBvcnRlZENpcGhlcnMoQkFDS0VORC0+c3NsX2N0eCwgJmFsbF9jaXBoZXJzX2NvdW50KTsKKyAgZXJyID0gU1NMR2V0TnVtYmVyU3VwcG9ydGVkQ2lwaGVycyhiYWNrZW5kLT5zc2xfY3R4LCAmYWxsX2NpcGhlcnNfY291bnQpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xHZXROdW1iZXJTdXBwb3J0ZWRDaXBoZXJzKCkgZmFpbGVkOiBPU1N0YXR1cyAlZCIsCiAgICAgICAgICAgZXJyKTsKQEAgLTE4MDMsNyArMTgzMiw3IEBACiAgICAgZmFpbGYoZGF0YSwgIlNTTDogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb3dlZCBjaXBoZXJzIik7CiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIH0KLSAgZXJyID0gU1NMR2V0U3VwcG9ydGVkQ2lwaGVycyhCQUNLRU5ELT5zc2xfY3R4LCBhbGxfY2lwaGVycywKKyAgZXJyID0gU1NMR2V0U3VwcG9ydGVkQ2lwaGVycyhiYWNrZW5kLT5zc2xfY3R4LCBhbGxfY2lwaGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWxsX2NpcGhlcnNfY291bnQpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBDdXJsX3NhZmVmcmVlKGFsbF9jaXBoZXJzKTsKQEAgLTE4OTAsNyArMTkxOSw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQotICBlcnIgPSBTU0xTZXRFbmFibGVkQ2lwaGVycyhCQUNLRU5ELT5zc2xfY3R4LCBhbGxvd2VkX2NpcGhlcnMsCisgIGVyciA9IFNTTFNldEVuYWJsZWRDaXBoZXJzKGJhY2tlbmQtPnNzbF9jdHgsIGFsbG93ZWRfY2lwaGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZF9jaXBoZXJzX2NvdW50KTsKICAgQ3VybF9zYWZlZnJlZShhbGxfY2lwaGVycyk7CiAgIEN1cmxfc2FmZWZyZWUoYWxsb3dlZF9jaXBoZXJzKTsKQEAgLTE5MDMsOSArMTkzMiw5IEBACiAgIC8qIFdlIHdhbnQgdG8gZW5hYmxlIDEvbi0xIHdoZW4gdXNpbmcgYSBDQkMgY2lwaGVyIHVubGVzcyB0aGUgdXNlcgogICAgICBzcGVjaWZpY2FsbHkgZG9lc24ndCB3YW50IHVzIGRvaW5nIHRoYXQ6ICovCiAgIGlmKFNTTFNldFNlc3Npb25PcHRpb24gIT0gTlVMTCkgewotICAgIFNTTFNldFNlc3Npb25PcHRpb24oQkFDS0VORC0+c3NsX2N0eCwga1NTTFNlc3Npb25PcHRpb25TZW5kT25lQnl0ZVJlY29yZCwKKyAgICBTU0xTZXRTZXNzaW9uT3B0aW9uKGJhY2tlbmQtPnNzbF9jdHgsIGtTU0xTZXNzaW9uT3B0aW9uU2VuZE9uZUJ5dGVSZWNvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgIWRhdGEtPnNldC5zc2wuZW5hYmxlX2JlYXN0KTsKLSAgICBTU0xTZXRTZXNzaW9uT3B0aW9uKEJBQ0tFTkQtPnNzbF9jdHgsIGtTU0xTZXNzaW9uT3B0aW9uRmFsc2VTdGFydCwKKyAgICBTU0xTZXRTZXNzaW9uT3B0aW9uKGJhY2tlbmQtPnNzbF9jdHgsIGtTU0xTZXNzaW9uT3B0aW9uRmFsc2VTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLmZhbHNlc3RhcnQpOyAvKiBmYWxzZSBzdGFydCBzdXBwb3J0ICovCiAgIH0KICNlbmRpZiAvKiBDVVJMX0JVSUxEX01BQ18xMF85IHx8IENVUkxfQlVJTERfSU9TXzcgKi8KQEAgLTE5MTksNyArMTk0OCw3IEBACiAgICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAodm9pZCAqKikmc3NsX3Nlc3Npb25pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2xfc2Vzc2lvbmlkX2xlbiwgc29ja2luZGV4KSkgewogICAgICAgLyogd2UgZ290IGEgc2Vzc2lvbiBpZCwgdXNlIGl0ISAqLwotICAgICAgZXJyID0gU1NMU2V0UGVlcklEKEJBQ0tFTkQtPnNzbF9jdHgsIHNzbF9zZXNzaW9uaWQsIHNzbF9zZXNzaW9uaWRfbGVuKTsKKyAgICAgIGVyciA9IFNTTFNldFBlZXJJRChiYWNrZW5kLT5zc2xfY3R4LCBzc2xfc2Vzc2lvbmlkLCBzc2xfc2Vzc2lvbmlkX2xlbik7CiAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICAgICAgaWYoZXJyICE9IG5vRXJyKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTFNldFBlZXJJRCgpIGZhaWxlZDogT1NTdGF0dXMgJWQiLCBlcnIpOwpAQCAtMTkzNyw3ICsxOTY2LDcgQEAKICAgICAgICAgICAgICAgICB2ZXJpZnlwZWVyLCBTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCksIGhvc3RuYW1lLCBwb3J0KTsKICAgICAgIHNzbF9zZXNzaW9uaWRfbGVuID0gc3RybGVuKHNzbF9zZXNzaW9uaWQpOwogCi0gICAgICBlcnIgPSBTU0xTZXRQZWVySUQoQkFDS0VORC0+c3NsX2N0eCwgc3NsX3Nlc3Npb25pZCwgc3NsX3Nlc3Npb25pZF9sZW4pOworICAgICAgZXJyID0gU1NMU2V0UGVlcklEKGJhY2tlbmQtPnNzbF9jdHgsIHNzbF9zZXNzaW9uaWQsIHNzbF9zZXNzaW9uaWRfbGVuKTsKICAgICAgIGlmKGVyciAhPSBub0VycikgewogICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xTZXRQZWVySUQoKSBmYWlsZWQ6IE9TU3RhdHVzICVkIiwgZXJyKTsKQEAgLTE5NTQsNyArMTk4Myw3IEBACiAgICAgfQogICB9CiAKLSAgZXJyID0gU1NMU2V0SU9GdW5jcyhCQUNLRU5ELT5zc2xfY3R4LCBTb2NrZXRSZWFkLCBTb2NrZXRXcml0ZSk7CisgIGVyciA9IFNTTFNldElPRnVuY3MoYmFja2VuZC0+c3NsX2N0eCwgU29ja2V0UmVhZCwgU29ja2V0V3JpdGUpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xTZXRJT0Z1bmNzKCkgZmFpbGVkOiBPU1N0YXR1cyAlZCIsIGVycik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwpAQCAtMTk2NCw4ICsxOTkzLDggQEAKICAgLyogV2UgbmVlZCB0byBzdG9yZSB0aGUgRkQgaW4gYSBjb25zdGFudCBtZW1vcnkgYWRkcmVzcywgYmVjYXVzZQogICAgKiBTU0xTZXRDb25uZWN0aW9uKCkgd2lsbCBub3QgY29weSB0aGF0IGFkZHJlc3MuIEkndmUgZm91bmQgdGhhdAogICAgKiBjb25uLT5zb2NrW3NvY2tpbmRleF0gbWF5IGNoYW5nZSBvbiBpdHMgb3duLiAqLwotICBCQUNLRU5ELT5zc2xfc29ja2ZkID0gc29ja2ZkOwotICBlcnIgPSBTU0xTZXRDb25uZWN0aW9uKEJBQ0tFTkQtPnNzbF9jdHgsIGNvbm5zc2wpOworICBiYWNrZW5kLT5zc2xfc29ja2ZkID0gc29ja2ZkOworICBlcnIgPSBTU0xTZXRDb25uZWN0aW9uKGJhY2tlbmQtPnNzbF9jdHgsIGNvbm5zc2wpOwogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xTZXRDb25uZWN0aW9uKCkgZmFpbGVkOiAlZCIsIGVycik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwpAQCAtMjExMSw4ICsyMTQwLDggQEAKICAgICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLXN0YXRpYyBpbnQgdmVyaWZ5X2NlcnQoY29uc3QgY2hhciAqY2FmaWxlLCBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICBTU0xDb250ZXh0UmVmIGN0eCkKK3N0YXRpYyBDVVJMY29kZSB2ZXJpZnlfY2VydChjb25zdCBjaGFyICpjYWZpbGUsIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMQ29udGV4dFJlZiBjdHgpCiB7CiAgIGludCBuID0gMCwgcmM7CiAgIGxvbmcgcmVzOwpAQCAtMjM0Niw2ICsyMzc1LDcgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIE9TU3RhdHVzIGVycjsKICAgU1NMQ2lwaGVyU3VpdGUgY2lwaGVyOwogICBTU0xQcm90b2NvbCBwcm90b2NvbCA9IDA7CkBAIC0yMzU3LDEyICsyMzg3LDEyIEBACiAgICAgICAgICAgICAgIHx8IHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKIAogICAvKiBIZXJlIGdvZXMgbm90aGluZzogKi8KLSAgZXJyID0gU1NMSGFuZHNoYWtlKEJBQ0tFTkQtPnNzbF9jdHgpOworICBlcnIgPSBTU0xIYW5kc2hha2UoYmFja2VuZC0+c3NsX2N0eCk7CiAKICAgaWYoZXJyICE9IG5vRXJyKSB7CiAgICAgc3dpdGNoKGVycikgewogICAgICAgY2FzZSBlcnJTU0xXb3VsZEJsb2NrOiAgLyogdGhleSdyZSBub3QgZG9uZSB3aXRoIHVzIHlldCAqLwotICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gQkFDS0VORC0+c3NsX2RpcmVjdGlvbiA/CisgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBiYWNrZW5kLT5zc2xfZGlyZWN0aW9uID8KICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA6IHNzbF9jb25uZWN0XzJfcmVhZGluZzsKICAgICAgICAgcmV0dXJuIENVUkxFX09LOwogCkBAIC0yMzcwLDEwICsyNDAwLDEwIEBACiAgICAgICAgIExlb3BhcmQncyBoZWFkZXJzICovCiAgICAgICBjYXNlIC05ODQxOgogICAgICAgICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSAmJiBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKLSAgICAgICAgICBpbnQgcmVzID0gdmVyaWZ5X2NlcnQoU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBQ0tFTkQtPnNzbF9jdHgpOwotICAgICAgICAgIGlmKHJlcyAhPSBDVVJMRV9PSykKLSAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gdmVyaWZ5X2NlcnQoU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC0+c3NsX2N0eCk7CisgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAvKiB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIHdlIG5lZWQgdG8gY2FsbCBTU0xIYW5kc2hha2UoKSBhZ2FpbiAqLwogICAgICAgICByZXR1cm4gc2VjdHJhbnNwX2Nvbm5lY3Rfc3RlcDIoY29ubiwgc29ja2luZGV4KTsKQEAgLTI1ODAsNyArMjYxMCw3IEBACiAKICNpZmRlZiBTRUNUUkFOU1BfUElOTkVEUFVCS0VZCiAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWV9PUklHXSkgewotICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gcGtwX3Bpbl9wZWVyX3B1YmtleShkYXRhLCBCQUNLRU5ELT5zc2xfY3R4LAorICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gcGtwX3Bpbl9wZWVyX3B1YmtleShkYXRhLCBiYWNrZW5kLT5zc2xfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfT1JJR10pOwogICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IHB1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcGlubmVkIHB1YmxpYyBrZXkhIik7CkBAIC0yNTkwLDggKzI2MjAsOCBAQAogI2VuZGlmIC8qIFNFQ1RSQU5TUF9QSU5ORURQVUJLRVkgKi8KIAogICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLwotICAgICh2b2lkKVNTTEdldE5lZ290aWF0ZWRDaXBoZXIoQkFDS0VORC0+c3NsX2N0eCwgJmNpcGhlcik7Ci0gICAgKHZvaWQpU1NMR2V0TmVnb3RpYXRlZFByb3RvY29sVmVyc2lvbihCQUNLRU5ELT5zc2xfY3R4LCAmcHJvdG9jb2wpOworICAgICh2b2lkKVNTTEdldE5lZ290aWF0ZWRDaXBoZXIoYmFja2VuZC0+c3NsX2N0eCwgJmNpcGhlcik7CisgICAgKHZvaWQpU1NMR2V0TmVnb3RpYXRlZFByb3RvY29sVmVyc2lvbihiYWNrZW5kLT5zc2xfY3R4LCAmcHJvdG9jb2wpOwogICAgIHN3aXRjaChwcm90b2NvbCkgewogICAgICAgY2FzZSBrU1NMUHJvdG9jb2wyOgogICAgICAgICBpbmZvZihkYXRhLCAiU1NMIDIuMCBjb25uZWN0aW9uIHVzaW5nICVzXG4iLApAQCAtMjYzMSw3ICsyNjYxLDcgQEAKICAgICAgIGlmKF9fYnVpbHRpbl9hdmFpbGFibGUobWFjT1MgMTAuMTMuNCwgaU9TIDExLCB0dk9TIDExLCAqKSkgewogICAgICAgICBDRkFycmF5UmVmIGFscG5BcnIgPSBOVUxMOwogICAgICAgICBDRlN0cmluZ1JlZiBjaG9zZW5Qcm90b2NvbCA9IE5VTEw7Ci0gICAgICAgIGVyciA9IFNTTENvcHlBTFBOUHJvdG9jb2xzKEJBQ0tFTkQtPnNzbF9jdHgsICZhbHBuQXJyKTsKKyAgICAgICAgZXJyID0gU1NMQ29weUFMUE5Qcm90b2NvbHMoYmFja2VuZC0+c3NsX2N0eCwgJmFscG5BcnIpOwogCiAgICAgICAgIGlmKGVyciA9PSBub0VyciAmJiBhbHBuQXJyICYmIENGQXJyYXlHZXRDb3VudChhbHBuQXJyKSA+PSAxKQogICAgICAgICAgIGNob3NlblByb3RvY29sID0gQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhbHBuQXJyLCAwKTsKQEAgLTI2NzQsMTkgKzI3MDQsMjAgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CiAgIENGQXJyYXlSZWYgc2VydmVyX2NlcnRzID0gTlVMTDsKICAgU2VjQ2VydGlmaWNhdGVSZWYgc2VydmVyX2NlcnQ7CiAgIE9TU3RhdHVzIGVycjsKICAgQ0ZJbmRleCBpLCBjb3VudDsKICAgU2VjVHJ1c3RSZWYgdHJ1c3QgPSBOVUxMOwogCi0gIGlmKCFCQUNLRU5ELT5zc2xfY3R4KQorICBpZighYmFja2VuZC0+c3NsX2N0eCkKICAgICByZXR1cm47CiAKICNpZiBDVVJMX0JVSUxEX01BQ18xMF83IHx8IENVUkxfQlVJTERfSU9TCiAjaWYgQ1VSTF9CVUlMRF9JT1MKICNwcmFnbWEgdW51c2VkKHNlcnZlcl9jZXJ0cykKLSAgZXJyID0gU1NMQ29weVBlZXJUcnVzdChCQUNLRU5ELT5zc2xfY3R4LCAmdHJ1c3QpOworICBlcnIgPSBTU0xDb3B5UGVlclRydXN0KGJhY2tlbmQtPnNzbF9jdHgsICZ0cnVzdCk7CiAgIC8qIEZvciBzb21lIHJlYXNvbiwgU1NMQ29weVBlZXJUcnVzdCgpIGNhbiByZXR1cm4gbm9FcnIgYW5kIHlldCByZXR1cm4KICAgICAgYSBudWxsIHRydXN0LCBzbyBiZSBvbiBndWFyZCBmb3IgdGhhdDogKi8KICAgaWYoZXJyID09IG5vRXJyICYmIHRydXN0KSB7CkBAIC0yNzEyLDcgKzI3NDMsNyBAQAogICAgICBMaW9uIG9yIGxhdGVyLiAqLwogICBpZihTZWNUcnVzdEV2YWx1YXRlQXN5bmMgIT0gTlVMTCkgewogI3ByYWdtYSB1bnVzZWQoc2VydmVyX2NlcnRzKQotICAgIGVyciA9IFNTTENvcHlQZWVyVHJ1c3QoQkFDS0VORC0+c3NsX2N0eCwgJnRydXN0KTsKKyAgICBlcnIgPSBTU0xDb3B5UGVlclRydXN0KGJhY2tlbmQtPnNzbF9jdHgsICZ0cnVzdCk7CiAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBTU0xDb3B5UGVlclRydXN0KCkgY2FuIHJldHVybiBub0VyciBhbmQgeWV0IHJldHVybgogICAgICAgIGEgbnVsbCB0cnVzdCwgc28gYmUgb24gZ3VhcmQgZm9yIHRoYXQ6ICovCiAgICAgaWYoZXJyID09IG5vRXJyICYmIHRydXN0KSB7CkBAIC0yNzMyLDcgKzI3NjMsNyBAQAogICB9CiAgIGVsc2UgewogI2lmIENVUkxfU1VQUE9SVF9NQUNfMTBfOAotICAgIGVyciA9IFNTTENvcHlQZWVyQ2VydGlmaWNhdGVzKEJBQ0tFTkQtPnNzbF9jdHgsICZzZXJ2ZXJfY2VydHMpOworICAgIGVyciA9IFNTTENvcHlQZWVyQ2VydGlmaWNhdGVzKGJhY2tlbmQtPnNzbF9jdHgsICZzZXJ2ZXJfY2VydHMpOwogICAgIC8qIEp1c3QgaW4gY2FzZSBTU0xDb3B5UGVlckNlcnRpZmljYXRlcygpIHJldHVybnMgbnVsbCB0b28uLi4gKi8KICAgICBpZihlcnIgPT0gbm9FcnIgJiYgc2VydmVyX2NlcnRzKSB7CiAgICAgICBjb3VudCA9IENGQXJyYXlHZXRDb3VudChzZXJ2ZXJfY2VydHMpOwpAQCAtMjc1NCw3ICsyNzg1LDcgQEAKICNlbmRpZiAvKiBDVVJMX0JVSUxEX0lPUyAqLwogI2Vsc2UKICNwcmFnbWEgdW51c2VkKHRydXN0KQotICBlcnIgPSBTU0xDb3B5UGVlckNlcnRpZmljYXRlcyhCQUNLRU5ELT5zc2xfY3R4LCAmc2VydmVyX2NlcnRzKTsKKyAgZXJyID0gU1NMQ29weVBlZXJDZXJ0aWZpY2F0ZXMoYmFja2VuZC0+c3NsX2N0eCwgJnNlcnZlcl9jZXJ0cyk7CiAgIGlmKGVyciA9PSBub0VycikgewogICAgIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KHNlcnZlcl9jZXJ0cyk7CiAgICAgZm9yKGkgPSAwTCA7IGkgPCBjb3VudCA7IGkrKykgewpAQCAtMjgwNSw3ICsyODM2LDYgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKLSAgbG9uZyB0aW1lb3V0X21zOwogICBpbnQgd2hhdDsKIAogICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCkBAIC0yODE2LDcgKzI4NDYsNyBAQAogCiAgIGlmKHNzbF9jb25uZWN0XzEgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgewogICAgIC8qIEZpbmQgb3V0IGhvdyBtdWNoIG1vcmUgdGltZSB3ZSdyZSBhbGxvd2VkICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisgICAgY29uc3QgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKIAogICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwpAQCAtMjgzNCw3ICsyODY0LDcgQEAKICAgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKIAogICAgIC8qIGNoZWNrIGFsbG93ZWQgdGltZSBsZWZ0ICovCi0gICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisgICAgY29uc3QgdGltZWRpZmZfdCB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKIAogICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwpAQCAtMjg1Miw3ICsyODgyLDcgQEAKICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKIAogICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKHJlYWRmZCwgQ1VSTF9TT0NLRVRfQkFELCB3cml0ZWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nPzA6dGltZW91dF9tcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmcgPyAwIDogdGltZW91dF9tcyk7CiAgICAgICBpZih3aGF0IDwgMCkgewogICAgICAgICAvKiBmYXRhbCBlcnJvciAqLwogICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKQEAgLTI5MzMsMzQgKzI5NjMsMzYgQEAKIHN0YXRpYyB2b2lkIEN1cmxfc2VjdHJhbnNwX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKIAotICBpZihCQUNLRU5ELT5zc2xfY3R4KSB7Ci0gICAgKHZvaWQpU1NMQ2xvc2UoQkFDS0VORC0+c3NsX2N0eCk7CisgIGlmKGJhY2tlbmQtPnNzbF9jdHgpIHsKKyAgICAodm9pZClTU0xDbG9zZShiYWNrZW5kLT5zc2xfY3R4KTsKICNpZiBDVVJMX0JVSUxEX01BQ18xMF84IHx8IENVUkxfQlVJTERfSU9TCiAgICAgaWYoU1NMQ3JlYXRlQ29udGV4dCAhPSBOVUxMKQotICAgICAgQ0ZSZWxlYXNlKEJBQ0tFTkQtPnNzbF9jdHgpOworICAgICAgQ0ZSZWxlYXNlKGJhY2tlbmQtPnNzbF9jdHgpOwogI2lmIENVUkxfU1VQUE9SVF9NQUNfMTBfOAogICAgIGVsc2UKLSAgICAgICh2b2lkKVNTTERpc3Bvc2VDb250ZXh0KEJBQ0tFTkQtPnNzbF9jdHgpOworICAgICAgKHZvaWQpU1NMRGlzcG9zZUNvbnRleHQoYmFja2VuZC0+c3NsX2N0eCk7CiAjZW5kaWYgIC8qIENVUkxfU1VQUE9SVF9NQUNfMTBfOCAqLwogI2Vsc2UKLSAgICAodm9pZClTU0xEaXNwb3NlQ29udGV4dChCQUNLRU5ELT5zc2xfY3R4KTsKKyAgICAodm9pZClTU0xEaXNwb3NlQ29udGV4dChiYWNrZW5kLT5zc2xfY3R4KTsKICNlbmRpZiAvKiBDVVJMX0JVSUxEX01BQ18xMF84IHx8IENVUkxfQlVJTERfSU9TICovCi0gICAgQkFDS0VORC0+c3NsX2N0eCA9IE5VTEw7CisgICAgYmFja2VuZC0+c3NsX2N0eCA9IE5VTEw7CiAgIH0KLSAgQkFDS0VORC0+c3NsX3NvY2tmZCA9IDA7CisgIGJhY2tlbmQtPnNzbF9zb2NrZmQgPSAwOwogfQogCiBzdGF0aWMgaW50IEN1cmxfc2VjdHJhbnNwX3NodXRkb3duKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHNzaXplX3QgbnJlYWQ7CiAgIGludCB3aGF0OwogICBpbnQgcmM7CiAgIGNoYXIgYnVmWzEyMF07CiAKLSAgaWYoIUJBQ0tFTkQtPnNzbF9jdHgpCisgIGlmKCFiYWNrZW5kLT5zc2xfY3R4KQogICAgIHJldHVybiAwOwogCiAjaWZuZGVmIENVUkxfRElTQUJMRV9GVFAKQEAgLTMwMzMsMTEgKzMwNjUsMTIgQEAKIHN0YXRpYyBpbnQgQ3VybF9zZWN0cmFuc3BfY2hlY2tfY3huKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW0ZJUlNUU09DS0VUXTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBPU1N0YXR1cyBlcnI7CiAgIFNTTFNlc3Npb25TdGF0ZSBzdGF0ZTsKIAotICBpZihCQUNLRU5ELT5zc2xfY3R4KSB7Ci0gICAgZXJyID0gU1NMR2V0U2Vzc2lvblN0YXRlKEJBQ0tFTkQtPnNzbF9jdHgsICZzdGF0ZSk7CisgIGlmKGJhY2tlbmQtPnNzbF9jdHgpIHsKKyAgICBlcnIgPSBTU0xHZXRTZXNzaW9uU3RhdGUoYmFja2VuZC0+c3NsX2N0eCwgJnN0YXRlKTsKICAgICBpZihlcnIgPT0gbm9FcnIpCiAgICAgICByZXR1cm4gc3RhdGUgPT0ga1NTTENvbm5lY3RlZCB8fCBzdGF0ZSA9PSBrU1NMSGFuZHNoYWtlOwogICAgIHJldHVybiAtMTsKQEAgLTMwNDksMTEgKzMwODIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KQogewogICBjb25zdCBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbY29ubmluZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBPU1N0YXR1cyBlcnI7CiAgIHNpemVfdCBidWZmZXI7CiAKLSAgaWYoQkFDS0VORC0+c3NsX2N0eCkgeyAgLyogU1NMIGlzIGluIHVzZSAqLwotICAgIGVyciA9IFNTTEdldEJ1ZmZlcmVkUmVhZFNpemUoQkFDS0VORC0+c3NsX2N0eCwgJmJ1ZmZlcik7CisgIGlmKGJhY2tlbmQtPnNzbF9jdHgpIHsgIC8qIFNTTCBpcyBpbiB1c2UgKi8KKyAgICBlcnIgPSBTU0xHZXRCdWZmZXJlZFJlYWRTaXplKGJhY2tlbmQtPnNzbF9jdHgsICZidWZmZXIpOwogICAgIGlmKGVyciA9PSBub0VycikKICAgICAgIHJldHVybiBidWZmZXIgPiAwVUw7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzExOSw2ICszMTUzLDcgQEAKIHsKICAgLypzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsqLwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICBzaXplX3QgcHJvY2Vzc2VkID0gMFVMOwogICBPU1N0YXR1cyBlcnI7CiAKQEAgLTMxMzcsMTUgKzMxNzIsMTUgQEAKICAgICAgb3ZlciBhZ2FpbiB3aXRoIG5vIG5ldyBkYXRhIHVudGlsIGl0IHF1aXRzIHJldHVybmluZyBlcnJTU0xXb3VsZEJsb2NrLiAqLwogCiAgIC8qIERvIHdlIGhhdmUgYnVmZmVyZWQgZGF0YSB0byB3cml0ZSBmcm9tIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBjYWxsZWQ/ICovCi0gIGlmKEJBQ0tFTkQtPnNzbF93cml0ZV9idWZmZXJlZF9sZW5ndGgpIHsKKyAgaWYoYmFja2VuZC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCkgewogICAgIC8qIFdyaXRlIHRoZSBidWZmZXJlZCBkYXRhOiAqLwotICAgIGVyciA9IFNTTFdyaXRlKEJBQ0tFTkQtPnNzbF9jdHgsIE5VTEwsIDBVTCwgJnByb2Nlc3NlZCk7CisgICAgZXJyID0gU1NMV3JpdGUoYmFja2VuZC0+c3NsX2N0eCwgTlVMTCwgMFVMLCAmcHJvY2Vzc2VkKTsKICAgICBzd2l0Y2goZXJyKSB7CiAgICAgICBjYXNlIG5vRXJyOgogICAgICAgICAvKiBwcm9jZXNzZWQgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIDAgYmVjYXVzZSB3ZSBkaWRuJ3Qgd3JpdGUgdG8KICAgICAgICAgICAgdGhlIGJ1ZmZlciwgc28gcmV0dXJuIGhvdyBtdWNoIHdhcyB3cml0dGVuIHRvIHRoZSBzb2NrZXQgKi8KLSAgICAgICAgcHJvY2Vzc2VkID0gQkFDS0VORC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aDsKLSAgICAgICAgQkFDS0VORC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCA9IDBVTDsKKyAgICAgICAgcHJvY2Vzc2VkID0gYmFja2VuZC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aDsKKyAgICAgICAgYmFja2VuZC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCA9IDBVTDsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIGVyclNTTFdvdWxkQmxvY2s6IC8qIGFyZ2gsIHRyeSBhZ2FpbiAqLwogICAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKQEAgLTMxNTgsMTMgKzMxOTMsMTMgQEAKICAgfQogICBlbHNlIHsKICAgICAvKiBXZSd2ZSBnb3QgbmV3IGRhdGEgdG8gd3JpdGU6ICovCi0gICAgZXJyID0gU1NMV3JpdGUoQkFDS0VORC0+c3NsX2N0eCwgbWVtLCBsZW4sICZwcm9jZXNzZWQpOworICAgIGVyciA9IFNTTFdyaXRlKGJhY2tlbmQtPnNzbF9jdHgsIG1lbSwgbGVuLCAmcHJvY2Vzc2VkKTsKICAgICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICAgIHN3aXRjaChlcnIpIHsKICAgICAgICAgY2FzZSBlcnJTU0xXb3VsZEJsb2NrOgogICAgICAgICAgIC8qIERhdGEgd2FzIGJ1ZmZlcmVkIGJ1dCBub3Qgc2VudCwgd2UgaGF2ZSB0byB0ZWxsIHRoZSBjYWxsZXIKICAgICAgICAgICAgICB0byB0cnkgc2VuZGluZyBhZ2FpbiwgYW5kIHJlbWVtYmVyIGhvdyBtdWNoIHdhcyBidWZmZXJlZCAqLwotICAgICAgICAgIEJBQ0tFTkQtPnNzbF93cml0ZV9idWZmZXJlZF9sZW5ndGggPSBsZW47CisgICAgICAgICAgYmFja2VuZC0+c3NsX3dyaXRlX2J1ZmZlcmVkX2xlbmd0aCA9IGxlbjsKICAgICAgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKICAgICAgICAgICByZXR1cm4gLTFMOwogICAgICAgICBkZWZhdWx0OgpAQCAtMzE4NSw4ICszMjIwLDEyIEBACiB7CiAgIC8qc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ki8KICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW251bV07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKICAgc2l6ZV90IHByb2Nlc3NlZCA9IDBVTDsKLSAgT1NTdGF0dXMgZXJyID0gU1NMUmVhZChCQUNLRU5ELT5zc2xfY3R4LCBidWYsIGJ1ZmZlcnNpemUsICZwcm9jZXNzZWQpOworICBPU1N0YXR1cyBlcnI7CisKKyAgYWdhaW46CisgIGVyciA9IFNTTFJlYWQoYmFja2VuZC0+c3NsX2N0eCwgYnVmLCBidWZmZXJzaXplLCAmcHJvY2Vzc2VkKTsKIAogICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICBzd2l0Y2goZXJyKSB7CkBAIC0zMjA3LDYgKzMyNDYsMTYgQEAKICAgICAgICAgcmV0dXJuIC0xTDsKICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgLyogVGhlIGJlbG93IGlzIGVyclNTTFBlZXJBdXRoQ29tcGxldGVkOyBpdCdzIG5vdCBkZWZpbmVkIGluCisgICAgICAgICAgIExlb3BhcmQncyBoZWFkZXJzICovCisgICAgICBjYXNlIC05ODQxOgorICAgICAgICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSAmJiBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKKyAgICAgICAgICBDVVJMY29kZSByZXN1bHQgPSB2ZXJpZnlfY2VydChTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSwgY29ubi0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLT5zc2xfY3R4KTsKKyAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGdvdG8gYWdhaW47CiAgICAgICBkZWZhdWx0OgogICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMUmVhZCgpIHJldHVybiBlcnJvciAlZCIsIGVycik7CiAgICAgICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CkBAIC0zMjIwLDggKzMyNjksOSBAQAogc3RhdGljIHZvaWQgKkN1cmxfc2VjdHJhbnNwX2dldF9pbnRlcm5hbHMoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GTyBpbmZvIFVOVVNFRF9QQVJBTSkKIHsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOwogICAodm9pZClpbmZvOwotICByZXR1cm4gQkFDS0VORC0+c3NsX2N0eDsKKyAgcmV0dXJuIGJhY2tlbmQtPnNzbF9jdHg7CiB9CiAKIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9zZWN0cmFuc3AgPSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3Z0bHMuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5jCmluZGV4IGE3NDUyZGMuLmMzYTU1ZmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKICNpbmNsdWRlICJjdXJsX2Jhc2U2NC5oIgogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCiAKIC8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZTogKi8KICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtODIsMjIgKzgzLDYyIEBACiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZGVzdC0+dmFyID0gTlVMTDsKIAorI2RlZmluZSBDTE9ORV9CTE9CKHZhcikgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZihibG9iZHVwKCZkZXN0LT52YXIsIHNvdXJjZS0+dmFyKSkgICAgICAgICBcCisgICAgcmV0dXJuIEZBTFNFOworCitzdGF0aWMgQ1VSTGNvZGUgYmxvYmR1cChzdHJ1Y3QgY3VybF9ibG9iICoqZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2Jsb2IgKnNyYykKK3sKKyAgREVCVUdBU1NFUlQoZGVzdCk7CisgIERFQlVHQVNTRVJUKCEqZGVzdCk7CisgIGlmKHNyYykgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBkYXRhIHRvIGR1cGUhICovCisgICAgc3RydWN0IGN1cmxfYmxvYiAqZDsKKyAgICBkID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3VybF9ibG9iKSArIHNyYy0+bGVuKTsKKyAgICBpZighZCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGQtPmxlbiA9IHNyYy0+bGVuOworICAgIC8qIEFsd2F5cyBkdXBsaWNhdGUgYmVjYXVzZSB0aGUgY29ubmVjdGlvbiBtYXkgc3Vydml2ZSBsb25nZXIgdGhhbiB0aGUKKyAgICAgICBoYW5kbGUgdGhhdCBwYXNzZWQgaW4gdGhlIGJsb2IuICovCisgICAgZC0+ZmxhZ3MgPSBDVVJMX0JMT0JfQ09QWTsKKyAgICBkLT5kYXRhID0gKHZvaWQgKikoKGNoYXIgKilkICsgc2l6ZW9mKHN0cnVjdCBjdXJsX2Jsb2IpKTsKKyAgICBtZW1jcHkoZC0+ZGF0YSwgc3JjLT5kYXRhLCBzcmMtPmxlbik7CisgICAgKmRlc3QgPSBkOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyogcmV0dXJucyBUUlVFIGlmIHRoZSBibG9icyBhcmUgaWRlbnRpY2FsICovCitzdGF0aWMgYm9vbCBibG9iY21wKHN0cnVjdCBjdXJsX2Jsb2IgKmZpcnN0LCBzdHJ1Y3QgY3VybF9ibG9iICpzZWNvbmQpCit7CisgIGlmKCFmaXJzdCAmJiAhc2Vjb25kKSAvKiBib3RoIGFyZSBOVUxMICovCisgICAgcmV0dXJuIFRSVUU7CisgIGlmKCFmaXJzdCB8fCAhc2Vjb25kKSAvKiBvbmUgaXMgTlVMTCAqLworICAgIHJldHVybiBGQUxTRTsKKyAgaWYoZmlyc3QtPmxlbiAhPSBzZWNvbmQtPmxlbikgLyogZGlmZmVyZW50IHNpemVzICovCisgICAgcmV0dXJuIEZBTFNFOworICByZXR1cm4gIW1lbWNtcChmaXJzdC0+ZGF0YSwgc2Vjb25kLT5kYXRhLCBmaXJzdC0+bGVuKTsgLyogc2FtZSBkYXRhICovCit9CisKIGJvb2wKLUN1cmxfc3NsX2NvbmZpZ19tYXRjaGVzKHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcqIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBuZWVkbGUpCitDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqbmVlZGxlKQogewogICBpZigoZGF0YS0+dmVyc2lvbiA9PSBuZWVkbGUtPnZlcnNpb24pICYmCiAgICAgIChkYXRhLT52ZXJzaW9uX21heCA9PSBuZWVkbGUtPnZlcnNpb25fbWF4KSAmJgogICAgICAoZGF0YS0+dmVyaWZ5cGVlciA9PSBuZWVkbGUtPnZlcmlmeXBlZXIpICYmCiAgICAgIChkYXRhLT52ZXJpZnlob3N0ID09IG5lZWRsZS0+dmVyaWZ5aG9zdCkgJiYKICAgICAgKGRhdGEtPnZlcmlmeXN0YXR1cyA9PSBuZWVkbGUtPnZlcmlmeXN0YXR1cykgJiYKKyAgICAgYmxvYmNtcChkYXRhLT5jZXJ0X2Jsb2IsIG5lZWRsZS0+Y2VydF9ibG9iKSAmJgogICAgICBDdXJsX3NhZmVfc3RyY2FzZWNvbXBhcmUoZGF0YS0+Q0FwYXRoLCBuZWVkbGUtPkNBcGF0aCkgJiYKICAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPkNBZmlsZSwgbmVlZGxlLT5DQWZpbGUpICYmCiAgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5jbGllbnRjZXJ0LCBuZWVkbGUtPmNsaWVudGNlcnQpICYmCiAgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5yYW5kb21fZmlsZSwgbmVlZGxlLT5yYW5kb21fZmlsZSkgJiYKICAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPmVnZHNvY2tldCwgbmVlZGxlLT5lZ2Rzb2NrZXQpICYmCiAgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5jaXBoZXJfbGlzdCwgbmVlZGxlLT5jaXBoZXJfbGlzdCkgJiYKLSAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPmNpcGhlcl9saXN0MTMsIG5lZWRsZS0+Y2lwaGVyX2xpc3QxMykpCisgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5jaXBoZXJfbGlzdDEzLCBuZWVkbGUtPmNpcGhlcl9saXN0MTMpICYmCisgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5waW5uZWRfa2V5LCBuZWVkbGUtPnBpbm5lZF9rZXkpKQogICAgIHJldHVybiBUUlVFOwogCiAgIHJldHVybiBGQUxTRTsKQEAgLTExNCw2ICsxNTUsNyBAQAogICBkZXN0LT52ZXJpZnlzdGF0dXMgPSBzb3VyY2UtPnZlcmlmeXN0YXR1czsKICAgZGVzdC0+c2Vzc2lvbmlkID0gc291cmNlLT5zZXNzaW9uaWQ7CiAKKyAgQ0xPTkVfQkxPQihjZXJ0X2Jsb2IpOwogICBDTE9ORV9TVFJJTkcoQ0FwYXRoKTsKICAgQ0xPTkVfU1RSSU5HKENBZmlsZSk7CiAgIENMT05FX1NUUklORyhjbGllbnRjZXJ0KTsKQEAgLTEyMSwxMSArMTYzLDEyIEBACiAgIENMT05FX1NUUklORyhlZ2Rzb2NrZXQpOwogICBDTE9ORV9TVFJJTkcoY2lwaGVyX2xpc3QpOwogICBDTE9ORV9TVFJJTkcoY2lwaGVyX2xpc3QxMyk7CisgIENMT05FX1NUUklORyhwaW5uZWRfa2V5KTsKIAogICByZXR1cm4gVFJVRTsKIH0KIAotdm9pZCBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcqIHNzbGMpCit2b2lkIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqc3NsYykKIHsKICAgQ3VybF9zYWZlZnJlZShzc2xjLT5DQXBhdGgpOwogICBDdXJsX3NhZmVmcmVlKHNzbGMtPkNBZmlsZSk7CkBAIC0xMzQsNiArMTc3LDggQEAKICAgQ3VybF9zYWZlZnJlZShzc2xjLT5lZ2Rzb2NrZXQpOwogICBDdXJsX3NhZmVmcmVlKHNzbGMtPmNpcGhlcl9saXN0KTsKICAgQ3VybF9zYWZlZnJlZShzc2xjLT5jaXBoZXJfbGlzdDEzKTsKKyAgQ3VybF9zYWZlZnJlZShzc2xjLT5waW5uZWRfa2V5KTsKKyAgQ3VybF9zYWZlZnJlZShzc2xjLT5jZXJ0X2Jsb2IpOwogfQogCiAjaWZkZWYgVVNFX1NTTApAQCAtMTcxLDYgKzIxNiw5IEBACiAgIHJldHVybiBDdXJsX3NzbC0+aW5pdCgpOwogfQogCisjaWYgZGVmaW5lZChDVVJMX1dJVEhfTVVMVElfU1NMKQorc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF9tdWx0aTsKKyNlbmRpZgogCiAvKiBHbG9iYWwgY2xlYW51cCAqLwogdm9pZCBDdXJsX3NzbF9jbGVhbnVwKHZvaWQpCkBAIC0xNzgsNiArMjI2LDkgQEAKICAgaWYoaW5pdF9zc2wpIHsKICAgICAvKiBvbmx5IGNsZWFudXAgaWYgd2UgZGlkIGEgcHJldmlvdXMgaW5pdCAqLwogICAgIEN1cmxfc3NsLT5jbGVhbnVwKCk7CisjaWYgZGVmaW5lZChDVVJMX1dJVEhfTVVMVElfU1NMKQorICAgIEN1cmxfc3NsID0gJkN1cmxfc3NsX211bHRpOworI2VuZGlmCiAgICAgaW5pdF9zc2wgPSBGQUxTRTsKICAgfQogfQpAQCAtMjA2LDYgKzI1Nyw3IEBACiAgIHJldHVybiBUUlVFOwogfQogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogc3RhdGljIENVUkxjb2RlCiBzc2xfY29ubmVjdF9pbml0X3Byb3h5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKQEAgLTIyOSwxNyArMjgxLDIwIEBACiAgIH0KICAgcmV0dXJuIENVUkxFX09LOwogfQorI2VuZGlmCiAKIENVUkxjb2RlCiBDdXJsX3NzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKICAgQ1VSTGNvZGUgcmVzdWx0OwogCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBpZihjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbc29ja2luZGV4XSkgewogICAgIHJlc3VsdCA9IHNzbF9jb25uZWN0X2luaXRfcHJveHkoY29ubiwgc29ja2luZGV4KTsKICAgICBpZihyZXN1bHQpCiAgICAgICByZXR1cm4gcmVzdWx0OwogICB9CisjZW5kaWYKIAogICBpZighc3NsX3ByZWZzX2NoZWNrKGNvbm4tPmRhdGEpKQogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKQEAgLTI2MSwxMiArMzE2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCiB7CiAgIENVUkxjb2RlIHJlc3VsdDsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGlmKGNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtzb2NraW5kZXhdKSB7CiAgICAgcmVzdWx0ID0gc3NsX2Nvbm5lY3RfaW5pdF9wcm94eShjb25uLCBzb2NraW5kZXgpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KLQorI2VuZGlmCiAgIGlmKCFzc2xfcHJlZnNfY2hlY2soY29ubi0+ZGF0YSkpCiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogCkBAIC0zMTIsMTMgKzM2OCwyMSBAQAogICBsb25nICpnZW5lcmFsX2FnZTsKICAgYm9vbCBub19tYXRjaCA9IFRSVUU7CiAKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgIGNvbnN0IGJvb2wgaXNQcm94eSA9IENPTk5FQ1RfUFJPWFlfU1NMKCk7CiAgIHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgKiBjb25zdCBzc2xfY29uZmlnID0gaXNQcm94eSA/CiAgICAgJmNvbm4tPnByb3h5X3NzbF9jb25maWcgOgogICAgICZjb25uLT5zc2xfY29uZmlnOwotICBjb25zdCBjaGFyICogY29uc3QgbmFtZSA9IGlzUHJveHkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6Ci0gICAgY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBjaGFyICogY29uc3QgbmFtZSA9IGlzUHJveHkgPworICAgIGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDogY29ubi0+aG9zdC5uYW1lOwogICBpbnQgcG9ydCA9IGlzUHJveHkgPyAoaW50KWNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKKyNlbHNlCisgIC8qIG5vIHByb3h5IHN1cHBvcnQgKi8KKyAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqIGNvbnN0IHNzbF9jb25maWcgPSAmY29ubi0+c3NsX2NvbmZpZzsKKyAgY29uc3QgY2hhciAqIGNvbnN0IG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisgIGludCBwb3J0ID0gY29ubi0+cmVtb3RlX3BvcnQ7CisgICh2b2lkKXNvY2tpbmRleDsKKyNlbmRpZgogICAqc3NsX3Nlc3Npb25pZCA9IE5VTEw7CiAKICAgREVCVUdBU1NFUlQoU1NMX1NFVF9PUFRJT04ocHJpbWFyeS5zZXNzaW9uaWQpKTsKQEAgLTQyMCwxNCArNDg0LDIzIEBACiAgIGNoYXIgKmNsb25lX2Nvbm5fdG9faG9zdDsKICAgaW50IGNvbm5fdG9fcG9ydDsKICAgbG9uZyAqZ2VuZXJhbF9hZ2U7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQogICBjb25zdCBib29sIGlzUHJveHkgPSBDT05ORUNUX1BST1hZX1NTTCgpOwogICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICogY29uc3Qgc3NsX2NvbmZpZyA9IGlzUHJveHkgPwogICAgICZjb25uLT5wcm94eV9zc2xfY29uZmlnIDoKICAgICAmY29ubi0+c3NsX2NvbmZpZzsKLQorICBjb25zdCBjaGFyICpob3N0bmFtZSA9IGlzUHJveHkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgY29ubi0+aG9zdC5uYW1lOworI2Vsc2UKKyAgLyogcHJveHkgc3VwcG9ydCBkaXNhYmxlZCAqLworICBjb25zdCBib29sIGlzUHJveHkgPSBGQUxTRTsKKyAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqIGNvbnN0IHNzbF9jb25maWcgPSAmY29ubi0+c3NsX2NvbmZpZzsKKyAgY29uc3QgY2hhciAqaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisgICh2b2lkKXNvY2tpbmRleDsKKyNlbmRpZgogICBERUJVR0FTU0VSVChTU0xfU0VUX09QVElPTihwcmltYXJ5LnNlc3Npb25pZCkpOwogCi0gIGNsb25lX2hvc3QgPSBzdHJkdXAoaXNQcm94eSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDogY29ubi0+aG9zdC5uYW1lKTsKKyAgY2xvbmVfaG9zdCA9IHN0cmR1cChob3N0bmFtZSk7CiAgIGlmKCFjbG9uZV9ob3N0KQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOyAvKiBiYWlsIG91dCAqLwogCkBAIC00ODYsNiArNTU5LDcgQEAKICAgc3RvcmUtPnNjaGVtZSA9IGNvbm4tPmhhbmRsZXItPnNjaGVtZTsKIAogICBpZighQ3VybF9jbG9uZV9wcmltYXJ5X3NzbF9jb25maWcoc3NsX2NvbmZpZywgJnN0b3JlLT5zc2xfY29uZmlnKSkgeworICAgIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoJnN0b3JlLT5zc2xfY29uZmlnKTsKICAgICBzdG9yZS0+c2Vzc2lvbmlkID0gTlVMTDsgLyogbGV0IGNhbGxlciBmcmVlIHNlc3Npb25pZCAqLwogICAgIGZyZWUoY2xvbmVfaG9zdCk7CiAgICAgZnJlZShjbG9uZV9jb25uX3RvX2hvc3QpOwpAQCAtNTEzLDE2ICs1ODcsMTIgQEAKIH0KIAogI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoVVNFX0dOVVRMUykgfHwgZGVmaW5lZChVU0VfU0NIQU5ORUwpIHx8IFwKLSAgZGVmaW5lZChVU0VfU0VDVFJBTlNQKSB8fCBkZWZpbmVkKFVTRV9QT0xBUlNTTCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBcCi0gIGRlZmluZWQoVVNFX01CRURUTFMpIHx8IGRlZmluZWQoVVNFX0NZQVNTTCkKLWludCBDdXJsX3NzbF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisgIGRlZmluZWQoVVNFX1NFQ1RSQU5TUCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBcCisgIGRlZmluZWQoVVNFX01CRURUTFMpIHx8IGRlZmluZWQoVVNFX1dPTEZTU0wpIHx8IGRlZmluZWQoVVNFX0JFQVJTU0wpCitpbnQgQ3VybF9zc2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbRklSU1RTT0NLRVRdOwogCi0gIGlmKCFudW1zb2NrcykKLSAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKLQogICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfd3JpdGluZykgewogICAgIC8qIHdyaXRlIG1vZGUgKi8KICAgICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwpAQCAtNTM4LDEyICs2MDgsMTAgQEAKIH0KICNlbHNlCiBpbnQgQ3VybF9zc2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKKyAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzKQogewogICAodm9pZCljb25uOwogICAodm9pZClzb2NrczsKLSAgKHZvaWQpbnVtc29ja3M7CiAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwogfQogLyogVVNFX09QRU5TU0wgfHwgVVNFX0dOVVRMUyB8fCBVU0VfU0NIQU5ORUwgfHwgVVNFX1NFQ1RSQU5TUCB8fCBVU0VfTlNTICovCkBAIC02ODAsNyArNzQ4LDcgQEAKIH0KIAogLyoKLSAqICd2YWx1ZScgaXMgTk9UIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZworICogJ3ZhbHVlJyBpcyBOT1QgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nCiAgKi8KIENVUkxjb2RlIEN1cmxfc3NsX3B1c2hfY2VydGluZm9fbGVuKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VydG51bSwKQEAgLTcwMiwxMCArNzcwLDEwIEBACiAgIC8qIHNwcmludGYgdGhlIGxhYmVsIGFuZCBjb2xvbiAqLwogICBtc25wcmludGYob3V0cHV0LCBvdXRsZW4sICIlczoiLCBsYWJlbCk7CiAKLSAgLyogbWVtY3B5IHRoZSB2YWx1ZSAoaXQgbWlnaHQgbm90IGJlIHplcm8gdGVybWluYXRlZCkgKi8KKyAgLyogbWVtY3B5IHRoZSB2YWx1ZSAoaXQgbWlnaHQgbm90IGJlIG51bGwtdGVybWluYXRlZCkgKi8KICAgbWVtY3B5KCZvdXRwdXRbbGFiZWxsZW4gKyAxXSwgdmFsdWUsIHZhbHVlbGVuKTsKIAotICAvKiB6ZXJvIHRlcm1pbmF0ZSB0aGUgb3V0cHV0ICovCisgIC8qIG51bGwtdGVybWluYXRlIHRoZSBvdXRwdXQgKi8KICAgb3V0cHV0W2xhYmVsbGVuICsgMSArIHZhbHVlbGVuXSA9IDA7CiAKICAgbmwgPSBDdXJsX3NsaXN0X2FwcGVuZF9ub2R1cChjaS0+Y2VydGluZm9bY2VydG51bV0sIG91dHB1dCk7CkBAIC0xMDgwLDcgKzExNDgsNyBAQAogQ1VSTGNvZGUgQ3VybF9ub25lX21kNXN1bSh1bnNpZ25lZCBjaGFyICppbnB1dCwgc2l6ZV90IGlucHV0bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICptZDVzdW0sIHNpemVfdCBtZDVsZW4gVU5VU0VEX1BBUkFNKQogewotICBNRDVfY29udGV4dCAqTUQ1cHc7CisgIHN0cnVjdCBNRDVfY29udGV4dCAqTUQ1cHc7CiAKICAgKHZvaWQpbWQ1bGVuOwogCkBAIC0xMTcyLDggKzEyNDAsOCBAQAogY29uc3Qgc3RydWN0IEN1cmxfc3NsICpDdXJsX3NzbCA9CiAjaWYgZGVmaW5lZChDVVJMX1dJVEhfTVVMVElfU1NMKQogICAmQ3VybF9zc2xfbXVsdGk7Ci0jZWxpZiBkZWZpbmVkKFVTRV9DWUFTU0wpCi0gICZDdXJsX3NzbF9jeWFzc2w7CisjZWxpZiBkZWZpbmVkKFVTRV9XT0xGU1NMKQorICAmQ3VybF9zc2xfd29sZnNzbDsKICNlbGlmIGRlZmluZWQoVVNFX1NFQ1RSQU5TUCkKICAgJkN1cmxfc3NsX3NlY3RyYW5zcDsKICNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKQEAgLTExODYsMTkgKzEyNTQsMTkgQEAKICAgJkN1cmxfc3NsX25zczsKICNlbGlmIGRlZmluZWQoVVNFX09QRU5TU0wpCiAgICZDdXJsX3NzbF9vcGVuc3NsOwotI2VsaWYgZGVmaW5lZChVU0VfUE9MQVJTU0wpCi0gICZDdXJsX3NzbF9wb2xhcnNzbDsKICNlbGlmIGRlZmluZWQoVVNFX1NDSEFOTkVMKQogICAmQ3VybF9zc2xfc2NoYW5uZWw7CiAjZWxpZiBkZWZpbmVkKFVTRV9NRVNBTElOSykKICAgJkN1cmxfc3NsX21lc2FsaW5rOworI2VsaWYgZGVmaW5lZChVU0VfQkVBUlNTTCkKKyAgJkN1cmxfc3NsX2JlYXJzc2w7CiAjZWxzZQogI2Vycm9yICJNaXNzaW5nIHN0cnVjdCBDdXJsX3NzbCBmb3Igc2VsZWN0ZWQgU1NMIGJhY2tlbmQiCiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCAqYXZhaWxhYmxlX2JhY2tlbmRzW10gPSB7Ci0jaWYgZGVmaW5lZChVU0VfQ1lBU1NMKQotICAmQ3VybF9zc2xfY3lhc3NsLAorI2lmIGRlZmluZWQoVVNFX1dPTEZTU0wpCisgICZDdXJsX3NzbF93b2xmc3NsLAogI2VuZGlmCiAjaWYgZGVmaW5lZChVU0VfU0VDVFJBTlNQKQogICAmQ3VybF9zc2xfc2VjdHJhbnNwLApAQCAtMTIxOCwxNSArMTI4NiwxNSBAQAogI2lmIGRlZmluZWQoVVNFX09QRU5TU0wpCiAgICZDdXJsX3NzbF9vcGVuc3NsLAogI2VuZGlmCi0jaWYgZGVmaW5lZChVU0VfUE9MQVJTU0wpCi0gICZDdXJsX3NzbF9wb2xhcnNzbCwKLSNlbmRpZgogI2lmIGRlZmluZWQoVVNFX1NDSEFOTkVMKQogICAmQ3VybF9zc2xfc2NoYW5uZWwsCiAjZW5kaWYKICNpZiBkZWZpbmVkKFVTRV9NRVNBTElOSykKICAgJkN1cmxfc3NsX21lc2FsaW5rLAogI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfQkVBUlNTTCkKKyAgJkN1cmxfc3NsX2JlYXJzc2wsCisjZW5kaWYKICAgTlVMTAogfTsKIApAQCAtMTIzNCw3ICsxMzAyLDcgQEAKIHsKICAgc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX3NzbCAqc2VsZWN0ZWQ7CiAgIHN0YXRpYyBjaGFyIGJhY2tlbmRzWzIwMF07Ci0gIHN0YXRpYyBzaXplX3QgdG90YWw7CisgIHN0YXRpYyBzaXplX3QgYmFja2VuZHNfbGVuOwogICBjb25zdCBzdHJ1Y3QgQ3VybF9zc2wgKmN1cnJlbnQ7CiAKICAgY3VycmVudCA9IEN1cmxfc3NsID09ICZDdXJsX3NzbF9tdWx0aSA/IGF2YWlsYWJsZV9iYWNrZW5kc1swXSA6IEN1cmxfc3NsOwpAQCAtMTI0NiwyNyArMTMxNCwzMiBAQAogCiAgICAgc2VsZWN0ZWQgPSBjdXJyZW50OwogCi0gICAgZm9yKGkgPSAwOyBhdmFpbGFibGVfYmFja2VuZHNbaV0gJiYgcCA8IChlbmQgLSA0KTsgaSsrKSB7Ci0gICAgICBpZihpKQotICAgICAgICAqKHArKykgPSAnICc7Ci0gICAgICBpZihzZWxlY3RlZCAhPSBhdmFpbGFibGVfYmFja2VuZHNbaV0pCi0gICAgICAgICoocCsrKSA9ICcoJzsKLSAgICAgIHAgKz0gYXZhaWxhYmxlX2JhY2tlbmRzW2ldLT52ZXJzaW9uKHAsIGVuZCAtIHAgLSAyKTsKLSAgICAgIGlmKHNlbGVjdGVkICE9IGF2YWlsYWJsZV9iYWNrZW5kc1tpXSkKLSAgICAgICAgKihwKyspID0gJyknOworICAgIGJhY2tlbmRzWzBdID0gJ1wwJzsKKworICAgIGZvcihpID0gMDsgYXZhaWxhYmxlX2JhY2tlbmRzW2ldOyArK2kpIHsKKyAgICAgIGNoYXIgdmJbMjAwXTsKKyAgICAgIGJvb2wgcGFyZW4gPSAoc2VsZWN0ZWQgIT0gYXZhaWxhYmxlX2JhY2tlbmRzW2ldKTsKKworICAgICAgaWYoYXZhaWxhYmxlX2JhY2tlbmRzW2ldLT52ZXJzaW9uKHZiLCBzaXplb2YodmIpKSkgeworICAgICAgICBwICs9IG1zbnByaW50ZihwLCBlbmQgLSBwLCAiJXMlcyVzJXMiLCAocCAhPSBiYWNrZW5kcyA/ICIgIiA6ICIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVuID8gIigiIDogIiIpLCB2YiwgKHBhcmVuID8gIikiIDogIiIpKTsKKyAgICAgIH0KICAgICB9Ci0gICAgKnAgPSAnXDAnOwotICAgIHRvdGFsID0gcCAtIGJhY2tlbmRzOworCisgICAgYmFja2VuZHNfbGVuID0gcCAtIGJhY2tlbmRzOwogICB9CiAKLSAgaWYoc2l6ZSA+IHRvdGFsKQotICAgIG1lbWNweShidWZmZXIsIGJhY2tlbmRzLCB0b3RhbCArIDEpOwotICBlbHNlIHsKLSAgICBtZW1jcHkoYnVmZmVyLCBiYWNrZW5kcywgc2l6ZSAtIDEpOworICBpZighc2l6ZSkKKyAgICByZXR1cm4gMDsKKworICBpZihzaXplIDw9IGJhY2tlbmRzX2xlbikgeworICAgIHN0cm5jcHkoYnVmZmVyLCBiYWNrZW5kcywgc2l6ZSAtIDEpOwogICAgIGJ1ZmZlcltzaXplIC0gMV0gPSAnXDAnOworICAgIHJldHVybiBzaXplIC0gMTsKICAgfQogCi0gIHJldHVybiBDVVJMTUlOKHNpemUgLSAxLCB0b3RhbCk7CisgIHN0cmNweShidWZmZXIsIGJhY2tlbmRzKTsKKyAgcmV0dXJuIGJhY2tlbmRzX2xlbjsKIH0KIAogc3RhdGljIGludCBtdWx0aXNzbF9pbml0KGNvbnN0IHN0cnVjdCBDdXJsX3NzbCAqYmFja2VuZCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvdnRscy5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmgKaW5kZXggMmE4N2NhMS4uYmNjODQ0NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmgKKysrIGIvVXRpbGl0aWVzL2NtY3VybC9saWIvdnRscy92dGxzLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTEwMiwyMyArMTAyLDE3IEBACiAjaW5jbHVkZSAiZ3Rscy5oIiAgICAgICAgICAgLyogR251VExTIHZlcnNpb25zICovCiAjaW5jbHVkZSAibnNzZy5oIiAgICAgICAgICAgLyogTlNTIHZlcnNpb25zICovCiAjaW5jbHVkZSAiZ3NraXQuaCIgICAgICAgICAgLyogR2xvYmFsIFNlY3VyZSBUb29sS2l0IHZlcnNpb25zICovCi0jaW5jbHVkZSAicG9sYXJzc2wuaCIgICAgICAgLyogUG9sYXJTU0wgdmVyc2lvbnMgKi8KLSNpbmNsdWRlICJjeWFzc2wuaCIgICAgICAgICAvKiBDeWFTU0wgdmVyc2lvbnMgKi8KKyNpbmNsdWRlICJ3b2xmc3NsLmgiICAgICAgICAvKiB3b2xmU1NMIHZlcnNpb25zICovCiAjaW5jbHVkZSAic2NoYW5uZWwuaCIgICAgICAgLyogU2NoYW5uZWwgU1NQSSB2ZXJzaW9uICovCiAjaW5jbHVkZSAic2VjdHJhbnNwLmgiICAgICAgLyogU2VjdXJlVHJhbnNwb3J0IChEYXJ3aW4pIHZlcnNpb24gKi8KICNpbmNsdWRlICJtYmVkdGxzLmgiICAgICAgICAvKiBtYmVkVExTIHZlcnNpb25zICovCiAjaW5jbHVkZSAibWVzYWxpbmsuaCIgICAgICAgLyogTWVzYUxpbmsgdmVyc2lvbnMgKi8KKyNpbmNsdWRlICJiZWFyc3NsLmgiICAgICAgICAvKiBCZWFyU1NMIHZlcnNpb25zICovCiAKICNpZm5kZWYgTUFYX1BJTk5FRF9QVUJLRVlfU0laRQogI2RlZmluZSBNQVhfUElOTkVEX1BVQktFWV9TSVpFIDEwNDg1NzYgLyogMU1CICovCiAjZW5kaWYKIAotI2lmbmRlZiBNRDVfRElHRVNUX0xFTkdUSAotI2lmbmRlZiBMSUJXT0xGU1NMX1ZFUlNJT05fSEVYIC8qIGJlY2F1c2UgV29sZlNTTCBib3JrcyB0aGlzICovCi0jZGVmaW5lIE1ENV9ESUdFU1RfTEVOR1RIIDE2IC8qIGZpeGVkIHNpemUgKi8KLSNlbmRpZgotI2VuZGlmCi0KICNpZm5kZWYgQ1VSTF9TSEEyNTZfRElHRVNUX0xFTkdUSAogI2RlZmluZSBDVVJMX1NIQTI1Nl9ESUdFU1RfTEVOR1RIIDMyIC8qIGZpeGVkIHNpemUgKi8KICNlbmRpZgpAQCAtMTI5LDIyICsxMjMsMjggQEAKIAogLyogc2V0IG9mIGhlbHBlciBtYWNyb3MgZm9yIHRoZSBiYWNrZW5kcyB0byBhY2Nlc3MgdGhlIGNvcnJlY3QgZmllbGRzLiBGb3IgdGhlCiAgICBwcm94eSBvciBmb3IgdGhlIHJlbW90ZSBob3N0IC0gdG8gcHJvcGVybHkgc3VwcG9ydCBIVFRQUyBwcm94eSAqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyNkZWZpbmUgU1NMX0lTX1BST1hZKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKENVUkxQUk9YWV9IVFRQUyA9PSBjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSAmJiAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlICE9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIGNvbm4tPnByb3h5X3NzbFtjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0gPT0gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICBDVVJMX1NPQ0tFVF9CQUQgPyBGSVJTVFNPQ0tFVCA6IFNFQ09OREFSWVNPQ0tFVF0uc3RhdGUpCisjZGVmaW5lIFNTTF9TRVRfT1BUSU9OKHZhcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChTU0xfSVNfUFJPWFkoKSA/IGRhdGEtPnNldC5wcm94eV9zc2wudmFyIDogZGF0YS0+c2V0LnNzbC52YXIpCisjZGVmaW5lIFNTTF9DT05OX0NPTkZJRyh2YXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnByb3h5X3NzbF9jb25maWcudmFyIDogY29ubi0+c3NsX2NvbmZpZy52YXIpCisjZWxzZQorI2RlZmluZSBTU0xfSVNfUFJPWFkoKSBGQUxTRQorI2RlZmluZSBTU0xfU0VUX09QVElPTih2YXIpIGRhdGEtPnNldC5zc2wudmFyCisjZGVmaW5lIFNTTF9DT05OX0NPTkZJRyh2YXIpIGNvbm4tPnNzbF9jb25maWcudmFyCisjZW5kaWYKIAotI2RlZmluZSBTU0xfSVNfUFJPWFkoKSAoQ1VSTFBST1hZX0hUVFBTID09IGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlICYmIFwKLSAgc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgIT0gY29ubi0+cHJveHlfc3NsW2Nvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSA9PSBcCi0gIENVUkxfU09DS0VUX0JBRCA/IEZJUlNUU09DS0VUIDogU0VDT05EQVJZU09DS0VUXS5zdGF0ZSkKLSNkZWZpbmUgU1NMX1NFVF9PUFRJT04odmFyKSAoU1NMX0lTX1BST1hZKCkgPyBkYXRhLT5zZXQucHJveHlfc3NsLnZhciA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC52YXIpCi0jZGVmaW5lIFNTTF9DT05OX0NPTkZJRyh2YXIpIChTU0xfSVNfUFJPWFkoKSA/ICAgICAgICAgIFwKLSAgY29ubi0+cHJveHlfc3NsX2NvbmZpZy52YXIgOiBjb25uLT5zc2xfY29uZmlnLnZhcikKLQotYm9vbCBDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBuZWVkbGUpOworYm9vbCBDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpuZWVkbGUpOwogYm9vbCBDdXJsX2Nsb25lX3ByaW1hcnlfc3NsX2NvbmZpZyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgKmRlc3QpOwotdm9pZCBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcqIHNzbGMpOwotaW50IEN1cmxfc3NsX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKLSAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7Cit2b2lkIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqc3NsYyk7CitpbnQgQ3VybF9zc2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzKTsKIAogaW50IEN1cmxfc3NsX2JhY2tlbmQodm9pZCk7CiAKQEAgLTI2Myw3ICsyNjMsNiBAQAogI2RlZmluZSBDdXJsX3NzbF9zZW5kKGEsYixjLGQsZSkgLTEKICNkZWZpbmUgQ3VybF9zc2xfcmVjdihhLGIsYyxkLGUpIC0xCiAjZGVmaW5lIEN1cmxfc3NsX2luaXRzZXNzaW9ucyh4LHkpIENVUkxFX09LCi0jZGVmaW5lIEN1cmxfc3NsX3ZlcnNpb24oeCx5KSAwCiAjZGVmaW5lIEN1cmxfc3NsX2RhdGFfcGVuZGluZyh4LHkpIDAKICNkZWZpbmUgQ3VybF9zc2xfY2hlY2tfY3huKHgpIDAKICNkZWZpbmUgQ3VybF9zc2xfZnJlZV9jZXJ0aW5mbyh4KSBDdXJsX25vcF9zdG10CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuYyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvd29sZnNzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMmExMjQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuYwpAQCAtMCwwICsxLDExNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNvdXJjZSBmaWxlIGZvciBhbGwgd29sZlNTTCBzcGVjaWZpYyBjb2RlIGZvciB0aGUgVExTL1NTTCBsYXllci4gTm8gY29kZQorICogYnV0IHZ0bHMuYyBzaG91bGQgZXZlciBjYWxsIG9yIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKgorICovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfV09MRlNTTAorCisjZGVmaW5lIFdPTEZTU0xfT1BUSU9OU19JR05PUkVfU1lTCisjaW5jbHVkZSA8d29sZnNzbC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8d29sZnNzbC9vcHRpb25zLmg+CisKKy8qIFRvIGRldGVybWluZSB3aGF0IGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdlIHJlbHkgb24gb25lIG9yIGJvdGggb2Y6CisgICAtIHRoZSB1c2VyJ3Mgb3B0aW9ucy5oIGdlbmVyYXRlZCBieSB3b2xmU1NMCisgICAtIHRoZSBzeW1ib2xzIGRldGVjdGVkIGJ5IGN1cmwncyBjb25maWd1cmUKKyAgIFNpbmNlIHRoZXkgYXJlIG1hcmtlZGx5IGRpZmZlcmVudCBmcm9tIG9uZSBhbm90aGVyLCBhbmQgb25lIG9yIHRoZSBvdGhlciBtYXkKKyAgIG5vdCBiZSBhdmFpbGFibGUsIHdlIGRvIHNvbWUgY2hlY2tpbmcgYmVsb3cgdG8gYnJpbmcgdGhpbmdzIGluIHN5bmMuICovCisKKy8qIEhBVkVfQUxQTiBpcyB3b2xmU1NMJ3MgYnVpbGQgdGltZSBzeW1ib2wgZm9yIGVuYWJsaW5nIEFMUE4gaW4gb3B0aW9ucy5oLiAqLworI2lmbmRlZiBIQVZFX0FMUE4KKyNpZmRlZiBIQVZFX1dPTEZTU0xfVVNFQUxQTgorI2RlZmluZSBIQVZFX0FMUE4KKyNlbmRpZgorI2VuZGlmCisKKy8qIFdPTEZTU0xfQUxMT1dfU1NMVjMgaXMgd29sZlNTTCdzIGJ1aWxkIHRpbWUgc3ltYm9sIGZvciBlbmFibGluZyBTU0x2MyBpbgorICAgb3B0aW9ucy5oLCBidXQgaXMgb25seSBzZWVuIGluID49IDMuNi42IHNpbmNlIHRoYXQncyB3aGVuIHRoZXkgc3RhcnRlZAorICAgZGlzYWJsaW5nIFNTTHYzIGJ5IGRlZmF1bHQuICovCisjaWZuZGVmIFdPTEZTU0xfQUxMT1dfU1NMVjMKKyNpZiAoTElCV09MRlNTTF9WRVJTSU9OX0hFWCA8IDB4MDMwMDYwMDYpIHx8IFwKKyAgZGVmaW5lZChIQVZFX1dPTEZTU0xWM19DTElFTlRfTUVUSE9EKQorI2RlZmluZSBXT0xGU1NMX0FMTE9XX1NTTFYzCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKKyNpbmNsdWRlICJ2dGxzLmgiCisjaW5jbHVkZSAia2V5bG9nLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLworI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKKyNpbmNsdWRlICJ4NTA5YXNuMS5oIgorI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorCisjaW5jbHVkZSA8d29sZnNzbC9vcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHdvbGZzc2wvc3NsLmg+CisjaW5jbHVkZSA8d29sZnNzbC9lcnJvci1zc2wuaD4KKyNpbmNsdWRlICJ3b2xmc3NsLmgiCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIEtFRVBfUEVFUl9DRVJUIGlzIGEgcHJvZHVjdCBvZiB0aGUgcHJlc2VuY2Ugb2YgYnVpbGQgdGltZSBzeW1ib2wKKyAgIE9QRU5TU0xfRVhUUkEgd2l0aG91dCBOT19DRVJUUywgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uLiBLRUVQX1BFRVJfQ0VSVCBpcworICAgaW4gd29sZlNTTCdzIHNldHRpbmdzLmgsIGFuZCB0aGUgbGF0dGVyIHR3byBhcmUgYnVpbGQgdGltZSBzeW1ib2xzIGluCisgICBvcHRpb25zLmguICovCisjaWZuZGVmIEtFRVBfUEVFUl9DRVJUCisjaWYgZGVmaW5lZChIQVZFX1dPTEZTU0xfR0VUX1BFRVJfQ0VSVElGSUNBVEUpIHx8IFwKKyAgICAoZGVmaW5lZChPUEVOU1NMX0VYVFJBKSAmJiAhZGVmaW5lZChOT19DRVJUUykpCisjZGVmaW5lIEtFRVBfUEVFUl9DRVJUCisjZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSB7CisgIFNTTF9DVFgqIGN0eDsKKyAgU1NMKiAgICAgaGFuZGxlOworfTsKKworc3RhdGljIEN1cmxfcmVjdiB3b2xmc3NsX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHdvbGZzc2xfc2VuZDsKKworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKy8qCisgKiBBdmFpbGFiaWxpdHkgbm90ZToKKyAqIFRoZSBUTFMgMS4zIHNlY3JldCBjYWxsYmFjayAod29sZlNTTF9zZXRfdGxzMTNfc2VjcmV0X2NiKSB3YXMgYWRkZWQgaW4KKyAqIFdvbGZTU0wgNC40LjAsIGJ1dCByZXF1aXJlcyB0aGUgLURIQVZFX1NFQ1JFVF9DQUxMQkFDSyBidWlsZCBvcHRpb24uIElmIHRoYXQKKyAqIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGVuIFRMUyAxLjMgd2lsbCBub3QgYmUgbG9nZ2VkLgorICogRm9yIFRMUyAxLjIgYW5kIGJlZm9yZSwgd2UgdXNlIHdvbGZTU0xfZ2V0X2tleXMoKS4KKyAqIFNTTF9nZXRfY2xpZW50X3JhbmRvbSBhbmQgd29sZlNTTF9nZXRfa2V5cyByZXF1aXJlIE9QRU5TU0xfRVhUUkEKKyAqICgtLWVuYWJsZS1vcGVuc3NsZXh0cmEgb3IgLS1lbmFibGUtYWxsKS4KKyAqLworI2lmIGRlZmluZWQoSEFWRV9TRUNSRVRfQ0FMTEJBQ0spICYmIGRlZmluZWQoV09MRlNTTF9UTFMxMykKK3N0YXRpYyBpbnQKK3dvbGZzc2xfdGxzMTNfc2VjcmV0X2NhbGxiYWNrKFNTTCAqc3NsLCBpbnQgaWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZWNyZXRTeiwgdm9pZCAqY3R4KQoreworICBjb25zdCBjaGFyICpsYWJlbDsKKyAgdW5zaWduZWQgY2hhciBjbGllbnRfcmFuZG9tW1NTTDNfUkFORE9NX1NJWkVdOworICAodm9pZCljdHg7CisKKyAgaWYoIXNzbCB8fCAhQ3VybF90bHNfa2V5bG9nX2VuYWJsZWQoKSkgeworICAgIHJldHVybiAwOworICB9CisKKyAgc3dpdGNoKGlkKSB7CisgIGNhc2UgQ0xJRU5UX0VBUkxZX1RSQUZGSUNfU0VDUkVUOgorICAgIGxhYmVsID0gIkNMSUVOVF9FQVJMWV9UUkFGRklDX1NFQ1JFVCI7CisgICAgYnJlYWs7CisgIGNhc2UgQ0xJRU5UX0hBTkRTSEFLRV9UUkFGRklDX1NFQ1JFVDoKKyAgICBsYWJlbCA9ICJDTElFTlRfSEFORFNIQUtFX1RSQUZGSUNfU0VDUkVUIjsKKyAgICBicmVhazsKKyAgY2FzZSBTRVJWRVJfSEFORFNIQUtFX1RSQUZGSUNfU0VDUkVUOgorICAgIGxhYmVsID0gIlNFUlZFUl9IQU5EU0hBS0VfVFJBRkZJQ19TRUNSRVQiOworICAgIGJyZWFrOworICBjYXNlIENMSUVOVF9UUkFGRklDX1NFQ1JFVDoKKyAgICBsYWJlbCA9ICJDTElFTlRfVFJBRkZJQ19TRUNSRVRfMCI7CisgICAgYnJlYWs7CisgIGNhc2UgU0VSVkVSX1RSQUZGSUNfU0VDUkVUOgorICAgIGxhYmVsID0gIlNFUlZFUl9UUkFGRklDX1NFQ1JFVF8wIjsKKyAgICBicmVhazsKKyAgY2FzZSBFQVJMWV9FWFBPUlRFUl9TRUNSRVQ6CisgICAgbGFiZWwgPSAiRUFSTFlfRVhQT1JURVJfU0VDUkVUIjsKKyAgICBicmVhazsKKyAgY2FzZSBFWFBPUlRFUl9TRUNSRVQ6CisgICAgbGFiZWwgPSAiRVhQT1JURVJfU0VDUkVUIjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmKFNTTF9nZXRfY2xpZW50X3JhbmRvbShzc2wsIGNsaWVudF9yYW5kb20sIFNTTDNfUkFORE9NX1NJWkUpID09IDApIHsKKyAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuIGFzIHdvbGZTU0xfS2VlcEFycmF5cygpIHdhcyBjYWxsZWQgYmVmb3JlLiAqLworICAgIHJldHVybiAwOworICB9CisKKyAgQ3VybF90bHNfa2V5bG9nX3dyaXRlKGxhYmVsLCBjbGllbnRfcmFuZG9tLCBzZWNyZXQsIHNlY3JldFN6KTsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NFQ1JFVF9DQUxMQkFDSykgJiYgZGVmaW5lZChXT0xGU1NMX1RMUzEzKSAqLworCitzdGF0aWMgdm9pZAord29sZnNzbF9sb2dfdGxzMTJfc2VjcmV0KFNTTCAqc3NsKQoreworICB1bnNpZ25lZCBjaGFyICptcywgKnNyLCAqY3I7CisgIHVuc2lnbmVkIGludCBtc0xlbiwgc3JMZW4sIGNyTGVuLCBpLCB4ID0gMDsKKworI2lmIExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwZDAwMCAvKiA+PSAzLjEzLjAgKi8KKyAgLyogd29sZlNTTF9HZXRWZXJzaW9uIGlzIGF2YWlsYWJsZSBzaW5jZSAzLjEzLCB3ZSB1c2UgaXQgaW5zdGVhZCBvZgorICAgKiBTU0xfdmVyc2lvbiBzaW5jZSB0aGUgbGF0dGVyIHJlbGllcyBvbiBPUEVOU1NMX0FMTCAoLS1lbmFibGUtb3BlbnNzbGFsbCBvcgorICAgKiAtLWVuYWJsZS1hbGwpLiBGYWlsaW5nIHRvIHBlcmZvcm0gdGhpcyBjaGVjayBjb3VsZCByZXN1bHQgaW4gYW4gdW51c2FibGUKKyAgICoga2V5IGxvZyBsaW5lIHdoZW4gVExTIDEuMyBpcyBhY3R1YWxseSBuZWdvdGlhdGVkLiAqLworICBzd2l0Y2god29sZlNTTF9HZXRWZXJzaW9uKHNzbCkpIHsKKyAgY2FzZSBXT0xGU1NMX1NTTFYzOgorICBjYXNlIFdPTEZTU0xfVExTVjE6CisgIGNhc2UgV09MRlNTTF9UTFNWMV8xOgorICBjYXNlIFdPTEZTU0xfVExTVjFfMjoKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAvKiBUTFMgMS4zIGRvZXMgbm90IHVzZSB0aGlzIG1lY2hhbmlzbSwgdGhlICJtYXN0ZXIgc2VjcmV0IiByZXR1cm5lZCBiZWxvdworICAgICAqIGlzIG5vdCBkaXJlY3RseSB1c2FibGUuICovCisgICAgcmV0dXJuOworICB9CisjZW5kaWYKKworICBpZihTU0xfZ2V0X2tleXMoc3NsLCAmbXMsICZtc0xlbiwgJnNyLCAmc3JMZW4sICZjciwgJmNyTGVuKSAhPSBTU0xfU1VDQ0VTUykgeworICAgIHJldHVybjsKKyAgfQorCisgIC8qIENoZWNrIGZvciBhIG1pc3NpbmcgbWFzdGVyIHNlY3JldCBhbmQgc2tpcCBsb2dnaW5nLiBUaGF0IGNhbiBoYXBwZW4gaWYKKyAgICogY3VybCByZWplY3RzIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgYW5kIGFib3J0cyB0aGUgaGFuZHNoYWtlLgorICAgKi8KKyAgZm9yKGkgPSAwOyBpIDwgbXNMZW47IGkrKykgeworICAgIHggfD0gbXNbaV07CisgIH0KKyAgaWYoeCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgQ3VybF90bHNfa2V5bG9nX3dyaXRlKCJDTElFTlRfUkFORE9NIiwgY3IsIG1zLCBtc0xlbik7Cit9CisjZW5kaWYgLyogT1BFTlNTTF9FWFRSQSAqLworCitzdGF0aWMgaW50IGRvX2ZpbGVfdHlwZShjb25zdCBjaGFyICp0eXBlKQoreworICBpZighdHlwZSB8fCAhdHlwZVswXSkKKyAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX1BFTTsKKyAgaWYoc3RyY2FzZWNvbXBhcmUodHlwZSwgIlBFTSIpKQorICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOworICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiREVSIikpCisgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9BU04xOworICByZXR1cm4gLTE7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvYWRzIGFsbCB0aGUgY2xpZW50L0NBIGNlcnRpZmljYXRlcyBhbmQgQ1JMcy4gU2V0dXAgdGhlIFRMUworICogbGF5ZXIgYW5kIGRvIGFsbCBuZWNlc3NhcnkgbWFnaWMuCisgKi8KK3N0YXRpYyBDVVJMY29kZQord29sZnNzbF9jb25uZWN0X3N0ZXAxKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCit7CisgIGNoYXIgKmNpcGhlcnM7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBTU0xfTUVUSE9EKiByZXFfbWV0aG9kID0gTlVMTDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisjaWZkZWYgSEFWRV9TTkkKKyAgYm9vbCBzbmkgPSBGQUxTRTsKKyNkZWZpbmUgdXNlX3NuaSh4KSAgc25pID0gKHgpCisjZWxzZQorI2RlZmluZSB1c2Vfc25pKHgpICBDdXJsX25vcF9zdG10CisjZW5kaWYKKworICBpZihjb25uc3NsLT5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcnNpb25fbWF4KSAhPSBDVVJMX1NTTFZFUlNJT05fTUFYX05PTkUpIHsKKyAgICBmYWlsZihkYXRhLCAid29sZlNTTCBkb2VzIG5vdCBzdXBwb3J0IHRvIHNldCBtYXhpbXVtIFNTTC9UTFMgdmVyc2lvbiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gdXNlIGFuIGV4cGxpY2l0IFNTTC9UTFMgdmVyc2lvbiAqLworICBzd2l0Y2goU1NMX0NPTk5fQ09ORklHKHZlcnNpb24pKSB7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgorI2lmIExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwMzAwMCAvKiA+PSAzLjMuMCAqLworICAgIC8qIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcyBzZXQgbGF0ZXIgYWZ0ZXIgdGhlIENUWCBvYmplY3QgaXMgY3JlYXRlZCAqLworICAgIHJlcV9tZXRob2QgPSBTU0x2MjNfY2xpZW50X21ldGhvZCgpOworI2Vsc2UKKyAgICBpbmZvZihkYXRhLCAid29sZlNTTCA8My4zLjAgY2Fubm90IGJlIGNvbmZpZ3VyZWQgdG8gdXNlIFRMUyAxLjAtMS4yLCAiCisgICAgICAgICAgIlRMUyAxLjAgaXMgdXNlZCBleGNsdXNpdmVseVxuIik7CisgICAgcmVxX21ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKKyNlbmRpZgorICAgIHVzZV9zbmkoVFJVRSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6CisjaWZkZWYgV09MRlNTTF9BTExPV19UTFNWMTAKKyAgICByZXFfbWV0aG9kID0gVExTdjFfY2xpZW50X21ldGhvZCgpOworICAgIHVzZV9zbmkoVFJVRSk7CisjZWxzZQorICAgIGZhaWxmKGRhdGEsICJ3b2xmU1NMIGRvZXMgbm90IHN1cHBvcnQgVExTIDEuMCIpOworICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyAgICByZXFfbWV0aG9kID0gVExTdjFfMV9jbGllbnRfbWV0aG9kKCk7CisgICAgdXNlX3NuaShUUlVFKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKKyAgICByZXFfbWV0aG9kID0gVExTdjFfMl9jbGllbnRfbWV0aG9kKCk7CisgICAgdXNlX3NuaShUUlVFKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgcmVxX21ldGhvZCA9IHdvbGZUTFN2MV8zX2NsaWVudF9tZXRob2QoKTsKKyAgICB1c2Vfc25pKFRSVUUpOworICAgIGJyZWFrOworI2Vsc2UKKyAgICBmYWlsZihkYXRhLCAid29sZlNTTDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyNlbmRpZgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKKyNpZmRlZiBXT0xGU1NMX0FMTE9XX1NTTFYzCisgICAgcmVxX21ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKKyAgICB1c2Vfc25pKEZBTFNFKTsKKyNlbHNlCisgICAgZmFpbGYoZGF0YSwgIndvbGZTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MyIpOworICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6CisgICAgZmFpbGYoZGF0YSwgIndvbGZTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgZGVmYXVsdDoKKyAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIGlmKCFyZXFfbWV0aG9kKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgbWV0aG9kISIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgaWYoYmFja2VuZC0+Y3R4KQorICAgIFNTTF9DVFhfZnJlZShiYWNrZW5kLT5jdHgpOworICBiYWNrZW5kLT5jdHggPSBTU0xfQ1RYX25ldyhyZXFfbWV0aG9kKTsKKworICBpZighYmFja2VuZC0+Y3R4KSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgY29udGV4dCEiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIHN3aXRjaChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CisjaWYgTElCV09MRlNTTF9WRVJTSU9OX0hFWCA+IDB4MDMwMDQwMDYgLyogPiAzLjQuNiAqLworICAgIC8qIFZlcnNpb25zIDMuMy4wIHRvIDMuNC42IHdlIGtub3cgdGhlIG1pbmltdW0gcHJvdG9jb2wgdmVyc2lvbiBpcworICAgICAqIHdoYXRldmVyIG1pbmltdW0gdmVyc2lvbiBvZiBUTFMgd2FzIGJ1aWx0IGluIGFuZCBhdCBsZWFzdCBUTFMgMS4wLiBGb3IKKyAgICAgKiBsYXRlciBsaWJyYXJ5IHZlcnNpb25zIHRoYXQgY291bGQgY2hhbmdlIChlZyBUTFMgMS4wIGJ1aWx0IGluIGJ1dAorICAgICAqIGRlZmF1bHRzIHRvIFRMUyAxLjEpIHNvIHdlIGhhdmUgdGhpcyBzaG9ydCBjaXJjdWl0IGV2YWx1YXRpb24gdG8gZmluZAorICAgICAqIHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBUTFMgdmVyc2lvbi4KKyAgICAqLworICAgIGlmKCh3b2xmU1NMX0NUWF9TZXRNaW5WZXJzaW9uKGJhY2tlbmQtPmN0eCwgV09MRlNTTF9UTFNWMSkgIT0gMSkgJiYKKyAgICAgICAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihiYWNrZW5kLT5jdHgsIFdPTEZTU0xfVExTVjFfMSkgIT0gMSkgJiYKKyAgICAgICAod29sZlNTTF9DVFhfU2V0TWluVmVyc2lvbihiYWNrZW5kLT5jdHgsIFdPTEZTU0xfVExTVjFfMikgIT0gMSkKKyNpZmRlZiBXT0xGU1NMX1RMUzEzCisgICAgICAgJiYgKHdvbGZTU0xfQ1RYX1NldE1pblZlcnNpb24oYmFja2VuZC0+Y3R4LCBXT0xGU1NMX1RMU1YxXzMpICE9IDEpCisjZW5kaWYKKyAgICAgICkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3Qgc2V0IHRoZSBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24iKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisjZW5kaWYKKyAgICBicmVhazsKKyAgfQorCisgIGNpcGhlcnMgPSBTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpOworICBpZihjaXBoZXJzKSB7CisgICAgaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGJhY2tlbmQtPmN0eCwgY2lwaGVycykpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgc2V0dGluZyBjaXBoZXIgbGlzdDogJXMiLCBjaXBoZXJzKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0lQSEVSOworICAgIH0KKyAgICBpbmZvZihkYXRhLCAiQ2lwaGVyIHNlbGVjdGlvbjogJXNcbiIsIGNpcGhlcnMpOworICB9CisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAvKiBsb2FkIHRydXN0ZWQgY2FjZXJ0ICovCisgIGlmKFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpKSB7CisgICAgaWYoMSAhPSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhiYWNrZW5kLT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSkpIHsKKyAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgeworICAgICAgICAvKiBGYWlsIGlmIHdlIGluc2lzdCBvbiBzdWNjZXNzZnVsbHkgdmVyaWZ5aW5nIHRoZSBzZXJ2ZXIuICovCisgICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnM6XG4iCisgICAgICAgICAgICAgICIgIENBZmlsZTogJXNcbiAgQ0FwYXRoOiAlcyIsCisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpPworICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKTogIm5vbmUiLAorICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKT8KKyAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgOiAibm9uZSIpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEp1c3QgY29udGludWUgd2l0aCBhIHdhcm5pbmcgaWYgbm8gc3RyaWN0IGNlcnRpZmljYXRlCisgICAgICAgICAgIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZC4gKi8KKyAgICAgICAgaW5mb2YoZGF0YSwgImVycm9yIHNldHRpbmcgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9ucywiCisgICAgICAgICAgICAgICIgY29udGludWluZyBhbnl3YXk6XG4iKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBFdmVyeXRoaW5nIGlzIGZpbmUuICovCisgICAgICBpbmZvZihkYXRhLCAic3VjY2Vzc2Z1bGx5IHNldCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIik7CisgICAgfQorICAgIGluZm9mKGRhdGEsCisgICAgICAgICAgIiAgQ0FmaWxlOiAlc1xuIgorICAgICAgICAgICIgIENBcGF0aDogJXNcbiIsCisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkgPyBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKToKKyAgICAgICAgICAibm9uZSIsCisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgPyBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKToKKyAgICAgICAgICAibm9uZSIpOworICB9CisKKyAgLyogTG9hZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlLCBhbmQgcHJpdmF0ZSBrZXkgKi8KKyAgaWYoU1NMX1NFVF9PUFRJT04oY2VydCkgJiYgU1NMX1NFVF9PUFRJT04oa2V5KSkgeworICAgIGludCBmaWxlX3R5cGUgPSBkb19maWxlX3R5cGUoU1NMX1NFVF9PUFRJT04oY2VydF90eXBlKSk7CisKKyAgICBpZihTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKGJhY2tlbmQtPmN0eCwgU1NMX1NFVF9PUFRJT04oY2VydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV90eXBlKSAhPSAxKSB7CisgICAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIHVzZSBjbGllbnQgY2VydGlmaWNhdGUgKG5vIGtleSBvciB3cm9uZyBwYXNzIgorICAgICAgICAgICAgIiBwaHJhc2U/KSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKworICAgIGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihrZXlfdHlwZSkpOworICAgIGlmKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShiYWNrZW5kLT5jdHgsIFNTTF9TRVRfT1BUSU9OKGtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpICE9IDEpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gc2V0IHByaXZhdGUga2V5Iik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICB9CisjZW5kaWYgLyogIU5PX0ZJTEVTWVNURU0gKi8KKworICAvKiBTU0wgYWx3YXlzIHRyaWVzIHRvIHZlcmlmeSB0aGUgcGVlciwgdGhpcyBvbmx5IHNheXMgd2hldGhlciBpdCBzaG91bGQKKyAgICogZmFpbCB0byBjb25uZWN0IGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMsIG9yIGlmIGl0IHNob3VsZCBjb250aW51ZQorICAgKiBhbnl3YXkuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24gaXMgY2hlY2tlZCB3aXRoCisgICAqIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGJlbG93LiAqLworICBTU0xfQ1RYX3NldF92ZXJpZnkoYmFja2VuZC0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpP1NTTF9WRVJJRllfUEVFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX05PTkUsCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworI2lmZGVmIEhBVkVfU05JCisgIGlmKHNuaSkgeworICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI0OworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgc3RydWN0IGluNl9hZGRyIGFkZHI2OworI2VuZGlmCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgICAgY29ubi0+aG9zdC5uYW1lOworI2Vsc2UKKyAgICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7CisjZW5kaWYKKyAgICBzaXplX3QgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKTsKKyAgICBpZigoaG9zdG5hbWVfbGVuIDwgVVNIUlRfTUFYKSAmJgorICAgICAgICgwID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmYWRkcjQpKSAmJgorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICAgKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGhvc3RuYW1lLCAmYWRkcjYpKSAmJgorI2VuZGlmCisgICAgICAgKHdvbGZTU0xfQ1RYX1VzZVNOSShiYWNrZW5kLT5jdHgsIFdPTEZTU0xfU05JX0hPU1RfTkFNRSwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydClob3N0bmFtZV9sZW4pICE9IDEpKSB7CisgICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogZmFpbGVkIHRvIGNvbmZpZ3VyZSBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uIChTTkkpICIKKyAgICAgICAgICAgICJUTFMgZXh0ZW5zaW9uXG4iKTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIC8qIGdpdmUgYXBwbGljYXRpb24gYSBjaGFuY2UgdG8gaW50ZXJmZXJlIHdpdGggU1NMIHNldCB1cC4gKi8KKyAgaWYoZGF0YS0+c2V0LnNzbC5mc3NsY3R4KSB7CisgICAgQ1VSTGNvZGUgcmVzdWx0ID0gKCpkYXRhLT5zZXQuc3NsLmZzc2xjdHgpKGRhdGEsIGJhY2tlbmQtPmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5mc3NsY3R4cCk7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2lnbmFsZWQgYnkgc3NsIGN0eCBjYWxsYmFjayIpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIH0KKyNpZmRlZiBOT19GSUxFU1lTVEVNCisgIGVsc2UgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogQ2VydGlmaWNhdGVzIGNhbid0IGJlIGxvYWRlZCBiZWNhdXNlIHdvbGZTU0wgd2FzIGJ1aWx0IgorICAgICAgICAgICIgd2l0aCBcIm5vIGZpbGVzeXN0ZW1cIi4gRWl0aGVyIGRpc2FibGUgcGVlciB2ZXJpZmljYXRpb24iCisgICAgICAgICAgIiAoaW5zZWN1cmUpIG9yIGlmIHlvdSBhcmUgYnVpbGRpbmcgYW4gYXBwbGljYXRpb24gd2l0aCBsaWJjdXJsIHlvdSIKKyAgICAgICAgICAiIGNhbiBsb2FkIGNlcnRpZmljYXRlcyB2aWEgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorI2VuZGlmCisKKyAgLyogTGV0J3MgbWFrZSBhbiBTU0wgc3RydWN0dXJlICovCisgIGlmKGJhY2tlbmQtPmhhbmRsZSkKKyAgICBTU0xfZnJlZShiYWNrZW5kLT5oYW5kbGUpOworICBiYWNrZW5kLT5oYW5kbGUgPSBTU0xfbmV3KGJhY2tlbmQtPmN0eCk7CisgIGlmKCFiYWNrZW5kLT5oYW5kbGUpIHsKKyAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0IChoYW5kbGUpISIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyNpZmRlZiBIQVZFX0FMUE4KKyAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4pIHsKKyAgICBjaGFyIHByb3RvY29sc1sxMjhdOworICAgICpwcm90b2NvbHMgPSAnXDAnOworCisgICAgLyogd29sZlNTTCdzIEFMUE4gcHJvdG9jb2wgbmFtZSBsaXN0IGZvcm1hdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YKKyAgICAgICBwcm90b2NvbHMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBwcmVmZXJlbmNlLCBlZzogImgyLGh0dHAvMS4xIiAqLworCisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICBpZihkYXRhLT5zZXQuaHR0cHZlcnNpb24gPj0gQ1VSTF9IVFRQX1ZFUlNJT05fMikgeworICAgICAgc3RyY3B5KHByb3RvY29scyArIHN0cmxlbihwcm90b2NvbHMpLCBOR0hUVFAyX1BST1RPX1ZFUlNJT05fSUQgIiwiKTsKKyAgICAgIGluZm9mKGRhdGEsICJBTFBOLCBvZmZlcmluZyAlc1xuIiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEKTsKKyAgICB9CisjZW5kaWYKKworICAgIHN0cmNweShwcm90b2NvbHMgKyBzdHJsZW4ocHJvdG9jb2xzKSwgQUxQTl9IVFRQXzFfMSk7CisgICAgaW5mb2YoZGF0YSwgIkFMUE4sIG9mZmVyaW5nICVzXG4iLCBBTFBOX0hUVFBfMV8xKTsKKworICAgIGlmKHdvbGZTU0xfVXNlQUxQTihiYWNrZW5kLT5oYW5kbGUsIHByb3RvY29scywKKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXN0cmxlbihwcm90b2NvbHMpLAorICAgICAgICAgICAgICAgICAgICAgICBXT0xGU1NMX0FMUE5fQ09OVElOVUVfT05fTUlTTUFUQ0gpICE9IFNTTF9TVUNDRVNTKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgc2V0dGluZyBBTFBOIHByb3RvY29scyIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgfQorI2VuZGlmIC8qIEhBVkVfQUxQTiAqLworCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorICBpZihDdXJsX3Rsc19rZXlsb2dfZW5hYmxlZCgpKSB7CisgICAgLyogRW5zdXJlIHRoZSBDbGllbnQgUmFuZG9tIGlzIHByZXNlcnZlZC4gKi8KKyAgICB3b2xmU1NMX0tlZXBBcnJheXMoYmFja2VuZC0+aGFuZGxlKTsKKyNpZiBkZWZpbmVkKEhBVkVfU0VDUkVUX0NBTExCQUNLKSAmJiBkZWZpbmVkKFdPTEZTU0xfVExTMTMpCisgICAgd29sZlNTTF9zZXRfdGxzMTNfc2VjcmV0X2NiKGJhY2tlbmQtPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29sZnNzbF90bHMxM19zZWNyZXRfY2FsbGJhY2ssIE5VTEwpOworI2VuZGlmCisgIH0KKyNlbmRpZiAvKiBPUEVOU1NMX0VYVFJBICovCisKKyAgLyogQ2hlY2sgaWYgdGhlcmUncyBhIGNhY2hlZCBJRCB3ZSBjYW4vc2hvdWxkIHVzZSBoZXJlISAqLworICBpZihTU0xfU0VUX09QVElPTihwcmltYXJ5LnNlc3Npb25pZCkpIHsKKyAgICB2b2lkICpzc2xfc2Vzc2lvbmlkID0gTlVMTDsKKworICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOworICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJnNzbF9zZXNzaW9uaWQsIE5VTEwsIHNvY2tpbmRleCkpIHsKKyAgICAgIC8qIHdlIGdvdCBhIHNlc3Npb24gaWQsIHVzZSBpdCEgKi8KKyAgICAgIGlmKCFTU0xfc2V0X3Nlc3Npb24oYmFja2VuZC0+aGFuZGxlLCBzc2xfc2Vzc2lvbmlkKSkgeworICAgICAgICBjaGFyIGVycm9yX2J1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisgICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTF9zZXRfc2Vzc2lvbiBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhTU0xfZ2V0X2Vycm9yKGJhY2tlbmQtPmhhbmRsZSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfYnVmZmVyKSk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLworICAgICAgaW5mb2YoZGF0YSwgIlNTTCByZS11c2luZyBzZXNzaW9uIElEXG4iKTsKKyAgICB9CisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKKyAgfQorCisgIC8qIHBhc3MgdGhlIHJhdyBzb2NrZXQgaW50byB0aGUgU1NMIGxheWVyICovCisgIGlmKCFTU0xfc2V0X2ZkKGJhY2tlbmQtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMX3NldF9mZCBmYWlsZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMjsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKK3N0YXRpYyBDVVJMY29kZQord29sZnNzbF9jb25uZWN0X3N0ZXAyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCit7CisgIGludCByZXQgPSAtMTsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICBjb25uLT5ob3N0Lm5hbWU7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBkaXNwbmFtZSA9IFNTTF9JU19QUk9YWSgpID8KKyAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWUgOiBjb25uLT5ob3N0LmRpc3BuYW1lOworICBjb25zdCBjaGFyICogY29uc3QgcGlubmVkcHVia2V5ID0gU1NMX0lTX1BST1hZKCkgPworICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9QSU5ORURQVUJMSUNLRVlfUFJPWFldIDoKKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOworI2Vsc2UKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBjaGFyICogY29uc3QgZGlzcG5hbWUgPSBjb25uLT5ob3N0LmRpc3BuYW1lOworICBjb25zdCBjaGFyICogY29uc3QgcGlubmVkcHVia2V5ID0KKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUElOTkVEUFVCTElDS0VZX09SSUddOworI2VuZGlmCisKKyAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gd29sZnNzbF9yZWN2OworICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSB3b2xmc3NsX3NlbmQ7CisKKyAgLyogRW5hYmxlIFJGQzI4MTggY2hlY2tzICovCisgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkgeworICAgIHJldCA9IHdvbGZTU0xfY2hlY2tfZG9tYWluX25hbWUoYmFja2VuZC0+aGFuZGxlLCBob3N0bmFtZSk7CisgICAgaWYocmV0ID09IFNTTF9GQUlMVVJFKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICByZXQgPSBTU0xfY29ubmVjdChiYWNrZW5kLT5oYW5kbGUpOworCisjaWZkZWYgT1BFTlNTTF9FWFRSQQorICBpZihDdXJsX3Rsc19rZXlsb2dfZW5hYmxlZCgpKSB7CisgICAgLyogSWYga2V5IGxvZ2dpbmcgaXMgZW5hYmxlZCwgd2FpdCBmb3IgdGhlIGhhbmRzaGFrZSB0byBjb21wbGV0ZSBhbmQgdGhlbgorICAgICAqIHByb2NlZWQgd2l0aCBsb2dnaW5nIHNlY3JldHMgKGZvciBUTFMgMS4yIG9yIG9sZGVyKS4KKyAgICAgKgorICAgICAqIER1cmluZyB0aGUgaGFuZHNoYWtlIChyZXQ9PS0xKSwgd29sZlNTTF93YW50X3JlYWQoKSBpcyB0cnVlIGFzIGl0IHdhaXRzCisgICAgICogZm9yIHRoZSBzZXJ2ZXIgcmVzcG9uc2UuIEF0IHRoYXQgcG9pbnQgdGhlIG1hc3RlciBzZWNyZXQgaXMgbm90IHlldAorICAgICAqIGF2YWlsYWJsZSwgc28gd2UgbXVzdCBub3QgdHJ5IHRvIHJlYWQgaXQuCisgICAgICogVG8gbG9nIHRoZSBzZWNyZXQgb24gY29tcGxldGlvbiB3aXRoIGEgaGFuZHNoYWtlIGZhaWx1cmUsIGRldGVjdAorICAgICAqIGNvbXBsZXRpb24gdmlhIHRoZSBvYnNlcnZhdGlvbiB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVhZCBvciB3cml0ZS4KKyAgICAgKiBOb3RlIHRoYXQgT3BlblNTTCBTU0xfd2FudF9yZWFkKCkgaXMgYWx3YXlzIHRydWUgaGVyZS4gSWYgd29sZlNTTCBldmVyCisgICAgICogY2hhbmdlcywgdGhlIHdvcnN0IGNhc2UgaXMgdGhhdCBubyBrZXkgaXMgbG9nZ2VkIG9uIGVycm9yLgorICAgICAqLworICAgIGlmKHJldCA9PSBTU0xfU1VDQ0VTUyB8fAorICAgICAgICghd29sZlNTTF93YW50X3JlYWQoYmFja2VuZC0+aGFuZGxlKSAmJgorICAgICAgICAhd29sZlNTTF93YW50X3dyaXRlKGJhY2tlbmQtPmhhbmRsZSkpKSB7CisgICAgICB3b2xmc3NsX2xvZ190bHMxMl9zZWNyZXQoYmFja2VuZC0+aGFuZGxlKTsKKyAgICAgIC8qIENsaWVudCBSYW5kb20gYW5kIG1hc3RlciBzZWNyZXRzIGFyZSBubyBsb25nZXIgbmVlZGVkLCBlcmFzZSB0aGVzZS4KKyAgICAgICAqIElnbm9yZWQgd2hpbGUgdGhlIGhhbmRzaGFrZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy4gKi8KKyAgICAgIHdvbGZTU0xfRnJlZUFycmF5cyhiYWNrZW5kLT5oYW5kbGUpOworICAgIH0KKyAgfQorI2VuZGlmICAvKiBPUEVOU1NMX0VYVFJBICovCisKKyAgaWYocmV0ICE9IDEpIHsKKyAgICBjaGFyIGVycm9yX2J1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisgICAgaW50ICBkZXRhaWwgPSBTU0xfZ2V0X2Vycm9yKGJhY2tlbmQtPmhhbmRsZSwgcmV0KTsKKworICAgIGlmKFNTTF9FUlJPUl9XQU5UX1JFQUQgPT0gZGV0YWlsKSB7CisgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBlbHNlIGlmKFNTTF9FUlJPUl9XQU5UX1dSSVRFID09IGRldGFpbCkgeworICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfd3JpdGluZzsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgLyogVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gb3ZlcnJpZGUgb25seSB0aGUgQ04gbWF0Y2hpbmcuCisgICAgICogVGhpcyB3aWxsIGVuYWJsZSB0aGUgb3ZlcnJpZGUgb2YgYm90aCBtaXNtYXRjaGluZyBTdWJqZWN0QWx0TmFtZXMKKyAgICAgKiBhcyBhbHNvIG1pc21hdGNoaW5nIENOIGZpZWxkcyAqLworICAgIGVsc2UgaWYoRE9NQUlOX05BTUVfTUlTTUFUQ0ggPT0gZGV0YWlsKSB7CisjaWYgMQorICAgICAgZmFpbGYoZGF0YSwgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAorICAgICAgICAgICAgZGlzcG5hbWUpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyNlbHNlCisgICAgICAvKiBXaGVuIHRoZSB3b2xmc3NsX2NoZWNrX2RvbWFpbl9uYW1lKCkgaXMgdXNlZCBhbmQgeW91IGRlc2lyZSB0bworICAgICAgICogY29udGludWUgb24gYSBET01BSU5fTkFNRV9NSVNNQVRDSCwgaS5lLiAnY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlob3N0CisgICAgICAgKiA9PSAwJywgQ3lhU1NMIHZlcnNpb24gMi40LjAgd2lsbCBmYWlsIHdpdGggYW4gSU5DT01QTEVURV9EQVRBCisgICAgICAgKiBlcnJvci4gVGhlIG9ubHkgd2F5IHRvIGRvIHRoaXMgaXMgY3VycmVudGx5IHRvIHN3aXRjaCB0aGUKKyAgICAgICAqIFdvbGZzc2xfY2hlY2tfZG9tYWluX25hbWUoKSBpbiBhbmQgb3V0IGJhc2VkIG9uIHRoZQorICAgICAgICogJ2Nvbm4tPnNzbF9jb25maWcudmVyaWZ5aG9zdCcgdmFsdWUuICovCisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBvciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAorICAgICAgICAgICAgICBkaXNwbmFtZSk7CisgICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICAgIlx0c3ViamVjdCBhbHQgbmFtZShzKSBhbmQvb3IgY29tbW9uIG5hbWUgZG8gbm90IG1hdGNoIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgZGlzcG5hbWUpOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisjZW5kaWYKKyAgICB9CisjaWYgTElCV09MRlNTTF9WRVJTSU9OX0hFWCA+PSAweDAyMDA3MDAwIC8qIDIuNy4wICovCisgICAgZWxzZSBpZihBU05fTk9fU0lHTkVSX0UgPT0gZGV0YWlsKSB7CisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlx0Q0Egc2lnbmVyIG5vdCBhdmFpbGFibGUgZm9yIHZlcmlmaWNhdGlvblxuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSnVzdCBjb250aW51ZSB3aXRoIGEgd2FybmluZyBpZiBubyBzdHJpY3QgY2VydGlmaWNhdGUKKyAgICAgICAgICAgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLiAqLworICAgICAgICBpbmZvZihkYXRhLCAiQ0Egc2lnbmVyIG5vdCBhdmFpbGFibGUgZm9yIHZlcmlmaWNhdGlvbiwgIgorICAgICAgICAgICAgICAgICAgICAiY29udGludWluZyBhbnl3YXlcbiIpOworICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTF9jb25uZWN0IGZhaWxlZCB3aXRoIGVycm9yICVkOiAlcyIsIGRldGFpbCwKKyAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGRldGFpbCwgZXJyb3JfYnVmZmVyKSk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICB9CisKKyAgaWYocGlubmVkcHVia2V5KSB7CisjaWZkZWYgS0VFUF9QRUVSX0NFUlQKKyAgICBYNTA5ICp4NTA5OworICAgIGNvbnN0IGNoYXIgKng1MDlfZGVyOworICAgIGludCB4NTA5X2Rlcl9sZW47CisgICAgc3RydWN0IEN1cmxfWDUwOWNlcnRpZmljYXRlIHg1MDlfcGFyc2VkOworICAgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICpwdWJrZXk7CisgICAgQ1VSTGNvZGUgcmVzdWx0OworCisgICAgeDUwOSA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShiYWNrZW5kLT5oYW5kbGUpOworICAgIGlmKCF4NTA5KSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgcmV0cmlldmluZyBzZXJ2ZXIgY2VydGlmaWNhdGUiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7CisgICAgfQorCisgICAgeDUwOV9kZXIgPSAoY29uc3QgY2hhciAqKXdvbGZTU0xfWDUwOV9nZXRfZGVyKHg1MDksICZ4NTA5X2Rlcl9sZW4pOworICAgIGlmKCF4NTA5X2RlcikgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogZmFpbGVkIHJldHJpZXZpbmcgQVNOLjEgc2VydmVyIGNlcnRpZmljYXRlIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOworICAgIH0KKworICAgIG1lbXNldCgmeDUwOV9wYXJzZWQsIDAsIHNpemVvZih4NTA5X3BhcnNlZCkpOworICAgIGlmKEN1cmxfcGFyc2VYNTA5KCZ4NTA5X3BhcnNlZCwgeDUwOV9kZXIsIHg1MDlfZGVyICsgeDUwOV9kZXJfbGVuKSkKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7CisKKyAgICBwdWJrZXkgPSAmeDUwOV9wYXJzZWQuc3ViamVjdFB1YmxpY0tleUluZm87CisgICAgaWYoIXB1YmtleS0+aGVhZGVyIHx8IHB1YmtleS0+ZW5kIDw9IHB1YmtleS0+aGVhZGVyKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBmYWlsZWQgcmV0cmlldmluZyBwdWJsaWMga2V5IGZyb20gc2VydmVyIGNlcnRpZmljYXRlIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIOworICAgIH0KKworICAgIHJlc3VsdCA9IEN1cmxfcGluX3BlZXJfcHVia2V5KGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkcHVia2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopcHVia2V5LT5oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkocHVia2V5LT5lbmQgLSBwdWJrZXktPmhlYWRlcikpOworICAgIGlmKHJlc3VsdCkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogcHVibGljIGtleSBkb2VzIG5vdCBtYXRjaCBwaW5uZWQgcHVibGljIGtleSEiKTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2Vsc2UKKyAgICBmYWlsZihkYXRhLCAiTGlicmFyeSBsYWNrcyBwaW5uaW5nIHN1cHBvcnQgYnVpbHQtaW4iKTsKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworI2VuZGlmCisgIH0KKworI2lmZGVmIEhBVkVfQUxQTgorICBpZihjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbikgeworICAgIGludCByYzsKKyAgICBjaGFyICpwcm90b2NvbCA9IE5VTEw7CisgICAgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2xfbGVuID0gMDsKKworICAgIHJjID0gd29sZlNTTF9BTFBOX0dldFByb3RvY29sKGJhY2tlbmQtPmhhbmRsZSwgJnByb3RvY29sLCAmcHJvdG9jb2xfbGVuKTsKKworICAgIGlmKHJjID09IFNTTF9TVUNDRVNTKSB7CisgICAgICBpbmZvZihkYXRhLCAiQUxQTiwgc2VydmVyIGFjY2VwdGVkIHRvIHVzZSAlLipzXG4iLCBwcm90b2NvbF9sZW4sCisgICAgICAgICAgICBwcm90b2NvbCk7CisKKyAgICAgIGlmKHByb3RvY29sX2xlbiA9PSBBTFBOX0hUVFBfMV8xX0xFTkdUSCAmJgorICAgICAgICAgIW1lbWNtcChwcm90b2NvbCwgQUxQTl9IVFRQXzFfMSwgQUxQTl9IVFRQXzFfMV9MRU5HVEgpKQorICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE7CisjaWZkZWYgVVNFX05HSFRUUDIKKyAgICAgIGVsc2UgaWYoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID49IENVUkxfSFRUUF9WRVJTSU9OXzIgJiYKKyAgICAgICAgICAgICAgcHJvdG9jb2xfbGVuID09IE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4gJiYKKyAgICAgICAgICAgICAgIW1lbWNtcChwcm90b2NvbCwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRF9MRU4pKQorICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8yOworI2VuZGlmCisgICAgICBlbHNlCisgICAgICAgIGluZm9mKGRhdGEsICJBTFBOLCB1bnJlY29nbml6ZWQgcHJvdG9jb2wgJS4qc1xuIiwgcHJvdG9jb2xfbGVuLAorICAgICAgICAgICAgICBwcm90b2NvbCk7CisgICAgICBDdXJsX211bHRpdXNlX3N0YXRlKGNvbm4sIGNvbm4tPm5lZ25wbiA9PSBDVVJMX0hUVFBfVkVSU0lPTl8yID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQlVORExFX01VTFRJUExFWCA6IEJVTkRMRV9OT19NVUxUSVVTRSk7CisgICAgfQorICAgIGVsc2UgaWYocmMgPT0gU1NMX0FMUE5fTk9UX0ZPVU5EKQorICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBkaWQgbm90IGFncmVlIHRvIGEgcHJvdG9jb2xcbiIpOworICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIkFMUE4sIGZhaWx1cmUgZ2V0dGluZyBwcm90b2NvbCwgZXJyb3IgJWQiLCByYyk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICB9CisjZW5kaWYgLyogSEFWRV9BTFBOICovCisKKyAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzM7CisjaWYgKExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwOTAxMCkKKyAgaW5mb2YoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHVzaW5nICVzIC8gJXNcbiIsCisgICAgICAgIHdvbGZTU0xfZ2V0X3ZlcnNpb24oYmFja2VuZC0+aGFuZGxlKSwKKyAgICAgICAgd29sZlNTTF9nZXRfY2lwaGVyX25hbWUoYmFja2VuZC0+aGFuZGxlKSk7CisjZWxzZQorICBpbmZvZihkYXRhLCAiU1NMIGNvbm5lY3RlZFxuIik7CisjZW5kaWYKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworc3RhdGljIENVUkxjb2RlCit3b2xmc3NsX2Nvbm5lY3Rfc3RlcDMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworCisgIERFQlVHQVNTRVJUKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSk7CisKKyAgaWYoU1NMX1NFVF9PUFRJT04ocHJpbWFyeS5zZXNzaW9uaWQpKSB7CisgICAgYm9vbCBpbmNhY2hlOworICAgIFNTTF9TRVNTSU9OICpvdXJfc3NsX3Nlc3Npb25pZDsKKyAgICB2b2lkICpvbGRfc3NsX3Nlc3Npb25pZCA9IE5VTEw7CisKKyAgICBvdXJfc3NsX3Nlc3Npb25pZCA9IFNTTF9nZXRfc2Vzc2lvbihiYWNrZW5kLT5oYW5kbGUpOworCisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7CisgICAgaW5jYWNoZSA9ICEoQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZvbGRfc3NsX3Nlc3Npb25pZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4KSk7CisgICAgaWYoaW5jYWNoZSkgeworICAgICAgaWYob2xkX3NzbF9zZXNzaW9uaWQgIT0gb3VyX3NzbF9zZXNzaW9uaWQpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIm9sZCBTU0wgc2Vzc2lvbiBJRCBpcyBzdGFsZSwgcmVtb3ZpbmdcbiIpOworICAgICAgICBDdXJsX3NzbF9kZWxzZXNzaW9uaWQoY29ubiwgb2xkX3NzbF9zZXNzaW9uaWQpOworICAgICAgICBpbmNhY2hlID0gRkFMU0U7CisgICAgICB9CisgICAgfQorCisgICAgaWYoIWluY2FjaGUpIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCBvdXJfc3NsX3Nlc3Npb25pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIHVua25vd24gc2l6ZSAqLywgc29ja2luZGV4KTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOworICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHRvIHN0b3JlIHNzbCBzZXNzaW9uIik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgfQorICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CisgIH0KKworICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfZG9uZTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHdvbGZzc2xfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKK3sKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgY2hhciBlcnJvcl9idWZmZXJbV09MRlNTTF9NQVhfRVJST1JfU1pdOworICBpbnQgbWVtbGVuID0gKGxlbiA+IChzaXplX3QpSU5UX01BWCkgPyBJTlRfTUFYIDogKGludClsZW47CisgIGludCByYyA9IFNTTF93cml0ZShiYWNrZW5kLT5oYW5kbGUsIG1lbSwgbWVtbGVuKTsKKworICBpZihyYyA8IDApIHsKKyAgICBpbnQgZXJyID0gU1NMX2dldF9lcnJvcihiYWNrZW5kLT5oYW5kbGUsIHJjKTsKKworICAgIHN3aXRjaChlcnIpIHsKKyAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgIC8qIHRoZXJlJ3MgZGF0YSBwZW5kaW5nLCByZS1pbnZva2UgU1NMX3dyaXRlKCkgKi8KKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHdyaXRlOiAlcywgZXJybm8gJWQiLAorICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhlcnIsIGVycm9yX2J1ZmZlciksCisgICAgICAgICAgICBTT0NLRVJSTk8pOworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBDdXJsX3dvbGZzc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworCisgIGlmKGJhY2tlbmQtPmhhbmRsZSkgeworICAgICh2b2lkKVNTTF9zaHV0ZG93bihiYWNrZW5kLT5oYW5kbGUpOworICAgIFNTTF9mcmVlKGJhY2tlbmQtPmhhbmRsZSk7CisgICAgYmFja2VuZC0+aGFuZGxlID0gTlVMTDsKKyAgfQorICBpZihiYWNrZW5kLT5jdHgpIHsKKyAgICBTU0xfQ1RYX2ZyZWUoYmFja2VuZC0+Y3R4KTsKKyAgICBiYWNrZW5kLT5jdHggPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdvbGZzc2xfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbbnVtXTsKKyAgc3RydWN0IHNzbF9iYWNrZW5kX2RhdGEgKmJhY2tlbmQgPSBjb25uc3NsLT5iYWNrZW5kOworICBjaGFyIGVycm9yX2J1ZmZlcltXT0xGU1NMX01BWF9FUlJPUl9TWl07CisgIGludCBidWZmc2l6ZSA9IChidWZmZXJzaXplID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWJ1ZmZlcnNpemU7CisgIGludCBucmVhZCA9IFNTTF9yZWFkKGJhY2tlbmQtPmhhbmRsZSwgYnVmLCBidWZmc2l6ZSk7CisKKyAgaWYobnJlYWQgPCAwKSB7CisgICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IoYmFja2VuZC0+aGFuZGxlLCBucmVhZCk7CisKKyAgICBzd2l0Y2goZXJyKSB7CisgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46IC8qIG5vIG1vcmUgZGF0YSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAvKiB0aGVyZSdzIGRhdGEgcGVuZGluZywgcmUtaW52b2tlIFNTTF9yZWFkKCkgKi8KKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHJlYWQ6ICVzLCBlcnJubyAlZCIsCisgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKGVyciwgZXJyb3JfYnVmZmVyKSwKKyAgICAgICAgICAgIFNPQ0tFUlJOTyk7CisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICByZXR1cm4gbnJlYWQ7Cit9CisKKworc3RhdGljIHZvaWQgQ3VybF93b2xmc3NsX3Nlc3Npb25fZnJlZSh2b2lkICpwdHIpCit7CisgICh2b2lkKXB0cjsKKyAgLyogd29sZlNTTCByZXVzZXMgc2Vzc2lvbnMgb24gb3duLCBubyBmcmVlICovCit9CisKKworc3RhdGljIHNpemVfdCBDdXJsX3dvbGZzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworI2lmIExJQldPTEZTU0xfVkVSU0lPTl9IRVggPj0gMHgwMzAwNjAwMAorICByZXR1cm4gbXNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIndvbGZTU0wvJXMiLCB3b2xmU1NMX2xpYl92ZXJzaW9uKCkpOworI2VsaWYgZGVmaW5lZChXT0xGU1NMX1ZFUlNJT04pCisgIHJldHVybiBtc25wcmludGYoYnVmZmVyLCBzaXplLCAid29sZlNTTC8lcyIsIFdPTEZTU0xfVkVSU0lPTik7CisjZW5kaWYKK30KKworCitzdGF0aWMgaW50IEN1cmxfd29sZnNzbF9pbml0KHZvaWQpCit7CisjaWZkZWYgT1BFTlNTTF9FWFRSQQorICBDdXJsX3Rsc19rZXlsb2dfb3BlbigpOworI2VuZGlmCisgIHJldHVybiAod29sZlNTTF9Jbml0KCkgPT0gU1NMX1NVQ0NFU1MpOworfQorCisKK3N0YXRpYyB2b2lkIEN1cmxfd29sZnNzbF9jbGVhbnVwKHZvaWQpCit7CisgIHdvbGZTU0xfQ2xlYW51cCgpOworI2lmZGVmIE9QRU5TU0xfRVhUUkEKKyAgQ3VybF90bHNfa2V5bG9nX2Nsb3NlKCk7CisjZW5kaWYKK30KKworCitzdGF0aWMgYm9vbCBDdXJsX3dvbGZzc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbm5pbmRleCkKK3sKKyAgY29uc3Qgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW2Nvbm5pbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKyAgaWYoYmFja2VuZC0+aGFuZGxlKSAgIC8qIFNTTCBpcyBpbiB1c2UgKi8KKyAgICByZXR1cm4gKDAgIT0gU1NMX3BlbmRpbmcoYmFja2VuZC0+aGFuZGxlKSkgPyBUUlVFIDogRkFMU0U7CisgIGVsc2UKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGxheWVyIGJ1dCBrZWVwIHRoZQorICogc29ja2V0IG9wZW4gKENDQyAtIENsZWFyIENvbW1hbmQgQ2hhbm5lbCkKKyAqLworc3RhdGljIGludCBDdXJsX3dvbGZzc2xfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBpbnQgcmV0dmFsID0gMDsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBzc2xfYmFja2VuZF9kYXRhICpiYWNrZW5kID0gY29ubnNzbC0+YmFja2VuZDsKKworICBpZihiYWNrZW5kLT5oYW5kbGUpIHsKKyAgICBTU0xfZnJlZShiYWNrZW5kLT5oYW5kbGUpOworICAgIGJhY2tlbmQtPmhhbmRsZSA9IE5VTEw7CisgIH0KKyAgcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgQ1VSTGNvZGUKK3dvbGZzc2xfY29ubmVjdF9jb21tb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub25ibG9ja2luZywKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIGludCB3aGF0OworCisgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KKyAgaWYoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubnNzbC0+c3RhdGUpIHsKKyAgICAqZG9uZSA9IFRSVUU7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgaWYoc3NsX2Nvbm5lY3RfMSA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgLyogRmluZCBvdXQgaG93IG11Y2ggbW9yZSB0aW1lIHdlJ3JlIGFsbG93ZWQgKi8KKyAgICBjb25zdCB0aW1lZGlmZl90IHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworCisgICAgaWYodGltZW91dF9tcyA8IDApIHsKKyAgICAgIC8qIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGltZSBhbHJlYWR5IGlzIHVwICovCisgICAgICBmYWlsZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdGltZW91dCIpOworICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICB9CisKKyAgICByZXN1bHQgPSB3b2xmc3NsX2Nvbm5lY3Rfc3RlcDEoY29ubiwgc29ja2luZGV4KTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgd2hpbGUoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgIHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisKKyAgICAvKiBjaGVjayBhbGxvd2VkIHRpbWUgbGVmdCAqLworICAgIGNvbnN0IHRpbWVkaWZmX3QgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisKKyAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgIH0KKworICAgIC8qIGlmIHNzbCBpcyBleHBlY3Rpbmcgc29tZXRoaW5nLCBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZS4gKi8KKyAgICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfcmVhZGluZworICAgICAgIHx8IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl93cml0aW5nKSB7CisKKyAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCA9IHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PQorICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICBjdXJsX3NvY2tldF90IHJlYWRmZCA9IHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PQorICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOworICAgICAgaWYod2hhdCA8IDApIHsKKyAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoMCA9PSB3aGF0KSB7CisgICAgICAgIGlmKG5vbmJsb2NraW5nKSB7CisgICAgICAgICAgKmRvbmUgPSBGQUxTRTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogdGltZW91dCAqLworICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCisgICAgfQorCisgICAgLyogUnVuIHRyYW5zYWN0aW9uLCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgaWYgaXQgZmFpbGVkIG9yIGlmCisgICAgICogdGhpcyBjb25uZWN0aW9uIGlzIHBhcnQgb2YgYSBtdWx0aSBoYW5kbGUgYW5kIHRoaXMgbG9vcCB3b3VsZAorICAgICAqIGV4ZWN1dGUgYWdhaW4uIFRoaXMgcGVybWl0cyB0aGUgb3duZXIgb2YgYSBtdWx0aSBoYW5kbGUgdG8KKyAgICAgKiBhYm9ydCBhIGNvbm5lY3Rpb24gYXR0ZW1wdCBiZWZvcmUgc3RlcDIgaGFzIGNvbXBsZXRlZCB3aGlsZQorICAgICAqIGVuc3VyaW5nIHRoYXQgYSBjbGllbnQgdXNpbmcgc2VsZWN0KCkgb3IgZXBvbGwoKSB3aWxsIGFsd2F5cworICAgICAqIGhhdmUgYSB2YWxpZCBmZHNldCB0byB3YWl0IG9uLgorICAgICAqLworICAgIHJlc3VsdCA9IHdvbGZzc2xfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJlc3VsdCB8fCAobm9uYmxvY2tpbmcgJiYKKyAgICAgICAgICAgICAgICAgIChzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9IC8qIHJlcGVhdCBzdGVwMiB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIGFyZSBkb25lLiAqLworCisgIGlmKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIHJlc3VsdCA9IHdvbGZzc2xfY29ubmVjdF9zdGVwMyhjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBpZihzc2xfY29ubmVjdF9kb25lID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKyAgICBjb25uc3NsLT5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlOworICAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IHdvbGZzc2xfcmVjdjsKKyAgICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSB3b2xmc3NsX3NlbmQ7CisgICAgKmRvbmUgPSBUUlVFOworICB9CisgIGVsc2UKKyAgICAqZG9uZSA9IEZBTFNFOworCisgIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KKyAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX3dvbGZzc2xfY29ubmVjdF9ub25ibG9ja2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCBib29sICpkb25lKQoreworICByZXR1cm4gd29sZnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIFRSVUUsIGRvbmUpOworfQorCisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX3dvbGZzc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgYm9vbCBkb25lID0gRkFMU0U7CisKKyAgcmVzdWx0ID0gd29sZnNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIEZBTFNFLCAmZG9uZSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIERFQlVHQVNTRVJUKGRvbmUpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIEN1cmxfd29sZnNzbF9yYW5kb20oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZW50cm9weSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgV0NfUk5HIHJuZzsKKyAgKHZvaWQpZGF0YTsKKyAgaWYod2NfSW5pdFJuZygmcm5nKSkKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIGlmKGxlbmd0aCA+IFVJTlRfTUFYKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgaWYod2NfUk5HX0dlbmVyYXRlQmxvY2soJnJuZywgZW50cm9weSwgKHVuc2lnbmVkKWxlbmd0aCkpCisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICBpZih3Y19GcmVlUm5nKCZybmcpKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF93b2xmc3NsX3NoYTI1NnN1bShjb25zdCB1bnNpZ25lZCBjaGFyICp0bXAsIC8qIGlucHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdG1wbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2hhMjU2c3VtIC8qIG91dHB1dCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1bnVzZWQpCit7CisgIHdjX1NoYTI1NiBTSEEyNTZwdzsKKyAgKHZvaWQpdW51c2VkOworICB3Y19Jbml0U2hhMjU2KCZTSEEyNTZwdyk7CisgIHdjX1NoYTI1NlVwZGF0ZSgmU0hBMjU2cHcsIHRtcCwgKHdvcmQzMil0bXBsZW4pOworICB3Y19TaGEyNTZGaW5hbCgmU0hBMjU2cHcsIHNoYTI1NnN1bSk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHZvaWQgKkN1cmxfd29sZnNzbF9nZXRfaW50ZXJuYWxzKHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPIGluZm8gVU5VU0VEX1BBUkFNKQoreworICBzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSAqYmFja2VuZCA9IGNvbm5zc2wtPmJhY2tlbmQ7CisgICh2b2lkKWluZm87CisgIHJldHVybiBiYWNrZW5kLT5oYW5kbGU7Cit9CisKK2NvbnN0IHN0cnVjdCBDdXJsX3NzbCBDdXJsX3NzbF93b2xmc3NsID0geworICB7IENVUkxTU0xCQUNLRU5EX1dPTEZTU0wsICJXb2xmU1NMIiB9LCAvKiBpbmZvICovCisKKyNpZmRlZiBLRUVQX1BFRVJfQ0VSVAorICBTU0xTVVBQX1BJTk5FRFBVQktFWSB8CisjZW5kaWYKKyAgU1NMU1VQUF9TU0xfQ1RYLAorCisgIHNpemVvZihzdHJ1Y3Qgc3NsX2JhY2tlbmRfZGF0YSksCisKKyAgQ3VybF93b2xmc3NsX2luaXQsICAgICAgICAgICAgICAgIC8qIGluaXQgKi8KKyAgQ3VybF93b2xmc3NsX2NsZWFudXAsICAgICAgICAgICAgIC8qIGNsZWFudXAgKi8KKyAgQ3VybF93b2xmc3NsX3ZlcnNpb24sICAgICAgICAgICAgIC8qIHZlcnNpb24gKi8KKyAgQ3VybF9ub25lX2NoZWNrX2N4biwgICAgICAgICAgICAgLyogY2hlY2tfY3huICovCisgIEN1cmxfd29sZnNzbF9zaHV0ZG93biwgICAgICAgICAgICAvKiBzaHV0ZG93biAqLworICBDdXJsX3dvbGZzc2xfZGF0YV9wZW5kaW5nLCAgICAgICAgLyogZGF0YV9wZW5kaW5nICovCisgIEN1cmxfd29sZnNzbF9yYW5kb20sICAgICAgICAgICAgICAvKiByYW5kb20gKi8KKyAgQ3VybF9ub25lX2NlcnRfc3RhdHVzX3JlcXVlc3QsICAgLyogY2VydF9zdGF0dXNfcmVxdWVzdCAqLworICBDdXJsX3dvbGZzc2xfY29ubmVjdCwgICAgICAgICAgICAgLyogY29ubmVjdCAqLworICBDdXJsX3dvbGZzc2xfY29ubmVjdF9ub25ibG9ja2luZywgLyogY29ubmVjdF9ub25ibG9ja2luZyAqLworICBDdXJsX3dvbGZzc2xfZ2V0X2ludGVybmFscywgICAgICAgLyogZ2V0X2ludGVybmFscyAqLworICBDdXJsX3dvbGZzc2xfY2xvc2UsICAgICAgICAgICAgICAgLyogY2xvc2Vfb25lICovCisgIEN1cmxfbm9uZV9jbG9zZV9hbGwsICAgICAgICAgICAgIC8qIGNsb3NlX2FsbCAqLworICBDdXJsX3dvbGZzc2xfc2Vzc2lvbl9mcmVlLCAgICAgICAgLyogc2Vzc2lvbl9mcmVlICovCisgIEN1cmxfbm9uZV9zZXRfZW5naW5lLCAgICAgICAgICAgIC8qIHNldF9lbmdpbmUgKi8KKyAgQ3VybF9ub25lX3NldF9lbmdpbmVfZGVmYXVsdCwgICAgLyogc2V0X2VuZ2luZV9kZWZhdWx0ICovCisgIEN1cmxfbm9uZV9lbmdpbmVzX2xpc3QsICAgICAgICAgIC8qIGVuZ2luZXNfbGlzdCAqLworICBDdXJsX25vbmVfZmFsc2Vfc3RhcnQsICAgICAgICAgICAvKiBmYWxzZV9zdGFydCAqLworICBDdXJsX25vbmVfbWQ1c3VtLCAgICAgICAgICAgICAgICAvKiBtZDVzdW0gKi8KKyAgQ3VybF93b2xmc3NsX3NoYTI1NnN1bSAgICAgICAgICAgIC8qIHNoYTI1NnN1bSAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3Z0bHMvd29sZnNzbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTY3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi92dGxzL3dvbGZzc2wuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1dPTEZTU0xfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9XT0xGU1NMX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpZmRlZiBVU0VfV09MRlNTTAorCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfc3NsIEN1cmxfc3NsX3dvbGZzc2w7CisKKyNlbmRpZiAvKiBVU0VfV09MRlNTTCAqLworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1dPTEZTU0xfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtY3VybC9saWIvd2Fybmxlc3MuaCBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3dhcm5sZXNzLmgKaW5kZXggZWE0YzQzOS4uYWI3OGY5NCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtY3VybC9saWIvd2Fybmxlc3MuaAorKysgYi9VdGlsaXRpZXMvY21jdXJsL2xpYi93YXJubGVzcy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDIwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC05NCwxOSArOTQsNiBAQAogCiB1bnNpZ25lZCBzaG9ydCBjdXJseF9udG9ocyh1bnNpZ25lZCBzaG9ydCB1c251bSk7CiAKLSNpZm5kZWYgQlVJTERJTkdfV0FSTkxFU1NfQwotIyAgdW5kZWYgIEZEX0lTU0VUCi0jICBkZWZpbmUgRkRfSVNTRVQoYSxiKSBjdXJseF9GRF9JU1NFVCgoYSksKGIpKQotIyAgdW5kZWYgIEZEX1NFVAotIyAgZGVmaW5lIEZEX1NFVChhLGIpICAgY3VybHhfRkRfU0VUKChhKSwoYikpCi0jICB1bmRlZiAgRkRfWkVSTwotIyAgZGVmaW5lIEZEX1pFUk8oYSkgICAgY3VybHhfRkRfWkVSTygoYSkpCi0jICB1bmRlZiAgaHRvbnMKLSMgIGRlZmluZSBodG9ucyhhKSAgICAgIGN1cmx4X2h0b25zKChhKSkKLSMgIHVuZGVmICBudG9ocwotIyAgZGVmaW5lIG50b2hzKGEpICAgICAgY3VybHhfbnRvaHMoKGEpKQotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0lOVEVMX0NPTVBJTEVSICYmIF9fdW5peF9fICovCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9XQVJOTEVTU19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5jIGIvVXRpbGl0aWVzL2NtY3VybC9saWIveDUwOWFzbjEuYwppbmRleCAwYzEyNTZiLi41Mjc0N2Q1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5jCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3g1MDlhc24xLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKICNpZiBkZWZpbmVkKFVTRV9HU0tJVCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9HTlVUTFMpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9DWUFTU0wpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKQorICAgIGRlZmluZWQoVVNFX1dPTEZTU0wpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKQogCiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAjaW5jbHVkZSAidXJsZGF0YS5oIgpAQCAtNDQsNyArNDQsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgICAgICAgY25PSURbXSA9ICIyLjUuNC4zIjsgICAgLyogQ29tbW9uIG5hbWUuICovCiBzdGF0aWMgY29uc3QgY2hhciAgICAgICBzYW5PSURbXSA9ICIyLjUuMjkuMTciOyAvKiBTdWJqZWN0IGFsdGVybmF0aXZlIG5hbWUuICovCiAKLXN0YXRpYyBjb25zdCBjdXJsX09JRCAgIE9JRHRhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IEN1cmxfT0lEIE9JRHRhYmxlW10gPSB7CiAgIHsgIjEuMi44NDAuMTAwNDAuNC4xIiwgICAgICAgICJkc2EiIH0sCiAgIHsgIjEuMi44NDAuMTAwNDAuNC4zIiwgICAgICAgICJkc2Etd2l0aC1zaGExIiB9LAogICB7ICIxLjIuODQwLjEwMDQ1LjIuMSIsICAgICAgICAiZWNQdWJsaWNLZXkiIH0sCkBAIC0xMDMsMTYgKzEwMywxNiBAQAogICogUGxlYXNlIG5vdGUgdGhlcmUgaXMgbm8gcHJldGVudGlvbiBoZXJlIHRvIHJld3JpdGUgYSBmdWxsIFNTTCBsaWJyYXJ5LgogICovCiAKLXN0YXRpYyBjb25zdCBjaGFyICpnZXRBU04xRWxlbWVudChjdXJsX2FzbjFFbGVtZW50ICplbGVtLAorc3RhdGljIGNvbnN0IGNoYXIgKmdldEFTTjFFbGVtZW50KHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICplbGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogICBXQVJOX1VOVVNFRF9SRVNVTFQ7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpnZXRBU04xRWxlbWVudChjdXJsX2FzbjFFbGVtZW50ICplbGVtLAorc3RhdGljIGNvbnN0IGNoYXIgKmdldEFTTjFFbGVtZW50KHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICplbGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewogICB1bnNpZ25lZCBjaGFyIGI7CiAgIHVuc2lnbmVkIGxvbmcgbGVuOwotICBjdXJsX2FzbjFFbGVtZW50IGxlbGVtOworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBsZWxlbTsKIAogICAvKiBHZXQgYSBzaW5nbGUgQVNOLjEgZWxlbWVudCBpbnRvIGBlbGVtJywgcGFyc2UgQVNOLjEgc3RyaW5nIGF0IGBiZWcnCiAgICAgIGVuZGluZyBhdCBgZW5kJy4KQEAgLTE3Niw5ICsxNzYsOSBAQAogICogU2VhcmNoIHRoZSBudWxsIHRlcm1pbmF0ZWQgT0lEIG9yIE9JRCBpZGVudGlmaWVyIGluIGxvY2FsIHRhYmxlLgogICogUmV0dXJuIHRoZSB0YWJsZSBlbnRyeSBwb2ludGVyIG9yIE5VTEwgaWYgbm90IGZvdW5kLgogICovCi1zdGF0aWMgY29uc3QgY3VybF9PSUQgKiBzZWFyY2hPSUQoY29uc3QgY2hhciAqb2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX09JRCAqc2VhcmNoT0lEKGNvbnN0IGNoYXIgKm9pZCkKIHsKLSAgY29uc3QgY3VybF9PSUQgKm9wOworICBjb25zdCBzdHJ1Y3QgQ3VybF9PSUQgKm9wOwogICBmb3Iob3AgPSBPSUR0YWJsZTsgb3AtPm51bW9pZDsgb3ArKykKICAgICBpZighc3RyY21wKG9wLT5udW1vaWQsIG9pZCkgfHwgc3RyY2FzZWNvbXBhcmUob3AtPnRleHRvaWQsIG9pZCkpCiAgICAgICByZXR1cm4gb3A7CkBAIC00NDUsNyArNDQ1LDcgQEAKICAgICAgICAgYnVmW2J1Zmxlbl0gPSAnXDAnOwogCiAgICAgICAgIGlmKHN5bWJvbGljKSB7Ci0gICAgICAgICAgY29uc3QgY3VybF9PSUQgKm9wID0gc2VhcmNoT0lEKGJ1Zik7CisgICAgICAgICAgY29uc3Qgc3RydWN0IEN1cmxfT0lEICpvcCA9IHNlYXJjaE9JRChidWYpOwogICAgICAgICAgIGlmKG9wKSB7CiAgICAgICAgICAgICBmcmVlKGJ1Zik7CiAgICAgICAgICAgICBidWYgPSBzdHJkdXAob3AtPnRleHRvaWQpOwpAQCAtNTY1LDcgKzU2NSw3IEBACiAgKiBDb252ZXJ0IGFuIEFTTi4xIGVsZW1lbnQgdG8gYSBwcmludGFibGUgc3RyaW5nLgogICogUmV0dXJuIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3Vycy4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKkFTTjF0b3N0cihjdXJsX2FzbjFFbGVtZW50ICplbGVtLCBpbnQgdHlwZSkKK3N0YXRpYyBjb25zdCBjaGFyICpBU04xdG9zdHIoc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgKmVsZW0sIGludCB0eXBlKQogewogICBpZihlbGVtLT5jb25zdHJ1Y3RlZCkKICAgICByZXR1cm4gTlVMTDsgLyogTm8gY29udmVyc2lvbiBvZiBzdHJ1Y3R1cmVkIGVsZW1lbnRzLiAqLwpAQCAtNjA5LDEyICs2MDksMTIgQEAKICAqIEFTQ0lJIGVuY29kZSBkaXN0aW5ndWlzaGVkIG5hbWUgYXQgYGRuJyBpbnRvIHRoZSBgYnVmbGVuJy1zaXplZCBidWZmZXIgYXQKICAqIGBidWYnLiAgUmV0dXJuIHRoZSB0b3RhbCBzdHJpbmcgbGVuZ3RoLCBldmVuIGlmIGxhcmdlciB0aGFuIGBidWZsZW4nLgogICovCi1zdGF0aWMgc3NpemVfdCBlbmNvZGVETihjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGN1cmxfYXNuMUVsZW1lbnQgKmRuKQorc3RhdGljIHNzaXplX3QgZW5jb2RlRE4oY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqZG4pCiB7Ci0gIGN1cmxfYXNuMUVsZW1lbnQgcmRuOwotICBjdXJsX2FzbjFFbGVtZW50IGF0djsKLSAgY3VybF9hc24xRWxlbWVudCBvaWQ7Ci0gIGN1cmxfYXNuMUVsZW1lbnQgdmFsdWU7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHJkbjsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgYXR2OworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBvaWQ7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHZhbHVlOwogICBzaXplX3QgbCA9IDA7CiAgIGNvbnN0IGNoYXIgKnAxOwogICBjb25zdCBjaGFyICpwMjsKQEAgLTY4Myw3ICs2ODMsNyBAQAogICogQ29udmVydCBhbiBBU04uMSBkaXN0aW5ndWlzaGVkIG5hbWUgaW50byBhIHByaW50YWJsZSBzdHJpbmcuCiAgKiBSZXR1cm4gdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJzLgogICovCi1zdGF0aWMgY29uc3QgY2hhciAqRE50b3N0cihjdXJsX2FzbjFFbGVtZW50ICpkbikKK3N0YXRpYyBjb25zdCBjaGFyICpETnRvc3RyKHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICpkbikKIHsKICAgY2hhciAqYnVmID0gTlVMTDsKICAgc3NpemVfdCBidWZsZW4gPSBlbmNvZGVETihOVUxMLCAwLCBkbik7CkBAIC03MDMsMTEgKzcwMywxMSBAQAogICogU3ludGF4IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gY2hlY2tlZCBieSB0aGUgU1NMIGJhY2tlbmQuCiAgKiBTZWUgUkZDIDUyODAuCiAgKi8KLWludCBDdXJsX3BhcnNlWDUwOShjdXJsX1g1MDljZXJ0aWZpY2F0ZSAqY2VydCwKK2ludCBDdXJsX3BhcnNlWDUwOShzdHJ1Y3QgQ3VybF9YNTA5Y2VydGlmaWNhdGUgKmNlcnQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpCiB7Ci0gIGN1cmxfYXNuMUVsZW1lbnQgZWxlbTsKLSAgY3VybF9hc24xRWxlbWVudCB0YnNDZXJ0aWZpY2F0ZTsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgZWxlbTsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgdGJzQ2VydGlmaWNhdGU7CiAgIGNvbnN0IGNoYXIgKmNjcDsKICAgc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdFZlcnNpb24gPSAwOyAgLyogdjEuICovCiAKQEAgLTgzNSwxMCArODM1LDEwIEBACiAgIHJldHVybiBpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqZHVtcEFsZ28oY3VybF9hc24xRWxlbWVudCAqcGFyYW0sCitzdGF0aWMgY29uc3QgY2hhciAqZHVtcEFsZ28oc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgKnBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewotICBjdXJsX2FzbjFFbGVtZW50IG9pZDsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgb2lkOwogCiAgIC8qIEdldCBhbGdvcml0aG0gcGFyYW1ldGVycyBhbmQgcmV0dXJuIGFsZ29yaXRobSBuYW1lLiAqLwogCkBAIC04NTUsNyArODU1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgZG9fcHVia2V5X2ZpZWxkKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjZXJ0bnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjdXJsX2FzbjFFbGVtZW50ICplbGVtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqZWxlbSkKIHsKICAgY29uc3QgY2hhciAqb3V0cHV0OwogCkBAIC04NzIsMTEgKzg3MiwxMSBAQAogfQogCiBzdGF0aWMgdm9pZCBkb19wdWJrZXkoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgaW50IGNlcnRudW0sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYWxnbywgY3VybF9hc24xRWxlbWVudCAqcGFyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgY3VybF9hc24xRWxlbWVudCAqcHVia2V5KQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFsZ28sIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50ICpwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqcHVia2V5KQogewotICBjdXJsX2FzbjFFbGVtZW50IGVsZW07Ci0gIGN1cmxfYXNuMUVsZW1lbnQgcGs7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGVsZW07CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHBrOwogICBjb25zdCBjaGFyICpwOwogCiAgIC8qIEdlbmVyYXRlIGFsbCBpbmZvcm1hdGlvbiByZWNvcmRzIGZvciB0aGUgcHVibGljIGtleS4gKi8KQEAgLTk1MCw5ICs5NTAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQpCiB7Ci0gIGN1cmxfWDUwOWNlcnRpZmljYXRlIGNlcnQ7CisgIHN0cnVjdCBDdXJsX1g1MDljZXJ0aWZpY2F0ZSBjZXJ0OwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgY3VybF9hc24xRWxlbWVudCBwYXJhbTsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgcGFyYW07CiAgIGNvbnN0IGNoYXIgKmNjcDsKICAgY2hhciAqY3AxOwogICBzaXplX3QgY2wxOwpAQCAtMTEwNCwxNCArMTEwNCwxNCBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKLSNlbmRpZiAvKiBVU0VfR1NLSVQgb3IgVVNFX05TUyBvciBVU0VfR05VVExTIG9yIFVTRV9DWUFTU0wgb3IgVVNFX1NDSEFOTkVMICovCisjZW5kaWYgLyogVVNFX0dTS0lUIG9yIFVTRV9OU1Mgb3IgVVNFX0dOVVRMUyBvciBVU0VfV09MRlNTTCBvciBVU0VfU0NIQU5ORUwgKi8KIAogI2lmIGRlZmluZWQoVVNFX0dTS0lUKQogCiBzdGF0aWMgY29uc3QgY2hhciAqY2hlY2tPSUQoY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb2lkKQogewotICBjdXJsX2FzbjFFbGVtZW50IGU7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGU7CiAgIGNvbnN0IGNoYXIgKmNjcDsKICAgY29uc3QgY2hhciAqcDsKICAgYm9vbCBtYXRjaGVkOwpAQCAtMTEzNiwyMiArMTEzNiwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgY3VybF9YNTA5Y2VydGlmaWNhdGUgY2VydDsKLSAgY3VybF9hc24xRWxlbWVudCBkbjsKLSAgY3VybF9hc24xRWxlbWVudCBlbGVtOwotICBjdXJsX2FzbjFFbGVtZW50IGV4dDsKLSAgY3VybF9hc24xRWxlbWVudCBuYW1lOworICBzdHJ1Y3QgQ3VybF9YNTA5Y2VydGlmaWNhdGUgY2VydDsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgZG47CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGVsZW07CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGV4dDsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgbmFtZTsKICAgY29uc3QgY2hhciAqcDsKICAgY29uc3QgY2hhciAqcTsKICAgY2hhciAqZG5zbmFtZTsKICAgaW50IG1hdGNoZWQgPSAtMTsKICAgc2l6ZV90IGFkZHJsZW4gPSAoc2l6ZV90KSAtMTsKICAgc3NpemVfdCBsZW47Ci0gIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZTsKLSAgY29uc3QgY2hhciAqIGNvbnN0IGRpc3BuYW1lID0gU1NMX0lTX1BST1hZKCk/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QuZGlzcG5hbWU7CisgIGNvbnN0IGNoYXIgKmNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCk/CisgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOiBjb25uLT5ob3N0Lm5hbWU7CisgIGNvbnN0IGNoYXIgKmNvbnN0IGRpc3BuYW1lID0gU1NMX0lTX1BST1hZKCk/CisgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0LmRpc3BuYW1lIDogY29ubi0+aG9zdC5kaXNwbmFtZTsKICNpZmRlZiBFTkFCTEVfSVBWNgogICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKICNlbHNlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5oIGIvVXRpbGl0aWVzL2NtY3VybC9saWIveDUwOWFzbjEuaAppbmRleCBjZTQwMjk3Li4wYjdmYjg4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21jdXJsL2xpYi94NTA5YXNuMS5oCisrKyBiL1V0aWxpdGllcy9jbWN1cmwvbGliL3g1MDlhc24xLmgKQEAgLTgsNyArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMjAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjdXJsX3NldHVwLmgiCiAKICNpZiBkZWZpbmVkKFVTRV9HU0tJVCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9HTlVUTFMpIHx8IFwKLSAgICBkZWZpbmVkKFVTRV9DWUFTU0wpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKQorICAgIGRlZmluZWQoVVNFX1dPTEZTU0wpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKQogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogCkBAIC03OSw1NiArNzksNTUgQEAKICAqLwogCiAvKiBBU04uMSBwYXJzZWQgZWxlbWVudC4gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgY29uc3QgY2hhciAqICBoZWFkZXI7ICAgICAgICAgLyogUG9pbnRlciB0byBoZWFkZXIgYnl0ZS4gKi8KLSAgY29uc3QgY2hhciAqICBiZWc7ICAgICAgICAgICAgLyogUG9pbnRlciB0byBlbGVtZW50IGRhdGEuICovCi0gIGNvbnN0IGNoYXIgKiAgZW5kOyAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gMXN0IGJ5dGUgYWZ0ZXIgZWxlbWVudC4gKi8KLSAgdW5zaWduZWQgY2hhciBjbGFzczsgICAgICAgICAgLyogQVNOLjEgZWxlbWVudCBjbGFzcy4gKi8KLSAgdW5zaWduZWQgY2hhciB0YWc7ICAgICAgICAgICAgLyogQVNOLjEgZWxlbWVudCB0YWcuICovCi0gIGJvb2wgICAgICAgICAgY29uc3RydWN0ZWQ7ICAgIC8qIEVsZW1lbnQgaXMgY29uc3RydWN0ZWQuICovCi19ICBjdXJsX2FzbjFFbGVtZW50Oworc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgeworICBjb25zdCBjaGFyICpoZWFkZXI7ICAgICAgICAgLyogUG9pbnRlciB0byBoZWFkZXIgYnl0ZS4gKi8KKyAgY29uc3QgY2hhciAqYmVnOyAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gZWxlbWVudCBkYXRhLiAqLworICBjb25zdCBjaGFyICplbmQ7ICAgICAgICAgICAgLyogUG9pbnRlciB0byAxc3QgYnl0ZSBhZnRlciBlbGVtZW50LiAqLworICB1bnNpZ25lZCBjaGFyIGNsYXNzOyAgICAgICAgLyogQVNOLjEgZWxlbWVudCBjbGFzcy4gKi8KKyAgdW5zaWduZWQgY2hhciB0YWc7ICAgICAgICAgIC8qIEFTTi4xIGVsZW1lbnQgdGFnLiAqLworICBib29sICAgICAgICAgIGNvbnN0cnVjdGVkOyAgLyogRWxlbWVudCBpcyBjb25zdHJ1Y3RlZC4gKi8KK307CiAKIAogLyogQVNOLjEgT0lEIHRhYmxlIGVudHJ5LiAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBjaGFyICogIG51bW9pZDsgICAgICAgICAvKiBEb3R0ZWQtbnVtZXJpYyBPSUQuICovCi0gIGNvbnN0IGNoYXIgKiAgdGV4dG9pZDsgICAgICAgIC8qIE9JRCBuYW1lLiAqLwotfSAgY3VybF9PSUQ7CitzdHJ1Y3QgQ3VybF9PSUQgeworICBjb25zdCBjaGFyICpudW1vaWQ7ICAvKiBEb3R0ZWQtbnVtZXJpYyBPSUQuICovCisgIGNvbnN0IGNoYXIgKnRleHRvaWQ7IC8qIE9JRCBuYW1lLiAqLworfTsKIAogCiAvKiBYNTA5IGNlcnRpZmljYXRlOiBSRkMgNTI4MC4gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIGNlcnRpZmljYXRlOwotICBjdXJsX2FzbjFFbGVtZW50ICAgICAgdmVyc2lvbjsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHNlcmlhbE51bWJlcjsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHNpZ25hdHVyZUFsZ29yaXRobTsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHNpZ25hdHVyZTsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIGlzc3VlcjsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIG5vdEJlZm9yZTsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIG5vdEFmdGVyOwotICBjdXJsX2FzbjFFbGVtZW50ICAgICAgc3ViamVjdDsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHN1YmplY3RQdWJsaWNLZXlJbmZvOwotICBjdXJsX2FzbjFFbGVtZW50ICAgICAgc3ViamVjdFB1YmxpY0tleUFsZ29yaXRobTsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHN1YmplY3RQdWJsaWNLZXk7Ci0gIGN1cmxfYXNuMUVsZW1lbnQgICAgICBpc3N1ZXJVbmlxdWVJRDsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIHN1YmplY3RVbmlxdWVJRDsKLSAgY3VybF9hc24xRWxlbWVudCAgICAgIGV4dGVuc2lvbnM7Ci19ICBjdXJsX1g1MDljZXJ0aWZpY2F0ZTsKLQorc3RydWN0IEN1cmxfWDUwOWNlcnRpZmljYXRlIHsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgY2VydGlmaWNhdGU7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHZlcnNpb247CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHNlcmlhbE51bWJlcjsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgc2lnbmF0dXJlQWxnb3JpdGhtOworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBzaWduYXR1cmU7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGlzc3VlcjsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgbm90QmVmb3JlOworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBub3RBZnRlcjsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgc3ViamVjdDsKKyAgc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgc3ViamVjdFB1YmxpY0tleUluZm87CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHN1YmplY3RQdWJsaWNLZXlBbGdvcml0aG07CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IHN1YmplY3RQdWJsaWNLZXk7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGlzc3VlclVuaXF1ZUlEOworICBzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCBzdWJqZWN0VW5pcXVlSUQ7CisgIHN0cnVjdCBDdXJsX2FzbjFFbGVtZW50IGV4dGVuc2lvbnM7Cit9OwogCiAvKgogICogUHJvdG90eXBlcy4KICAqLwogCi1jb25zdCBjaGFyICpDdXJsX2dldEFTTjFFbGVtZW50KGN1cmxfYXNuMUVsZW1lbnQgKmVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCk7Ci1jb25zdCBjaGFyICpDdXJsX0FTTjF0b3N0cihjdXJsX2FzbjFFbGVtZW50ICplbGVtLCBpbnQgdHlwZSk7Ci1jb25zdCBjaGFyICpDdXJsX0ROdG9zdHIoY3VybF9hc24xRWxlbWVudCAqZG4pOwotaW50IEN1cmxfcGFyc2VYNTA5KGN1cmxfWDUwOWNlcnRpZmljYXRlICpjZXJ0LAorY29uc3QgY2hhciAqQ3VybF9nZXRBU04xRWxlbWVudChzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpOworY29uc3QgY2hhciAqQ3VybF9BU04xdG9zdHIoc3RydWN0IEN1cmxfYXNuMUVsZW1lbnQgKmVsZW0sIGludCB0eXBlKTsKK2NvbnN0IGNoYXIgKkN1cmxfRE50b3N0cihzdHJ1Y3QgQ3VybF9hc24xRWxlbWVudCAqZG4pOworaW50IEN1cmxfcGFyc2VYNTA5KHN0cnVjdCBDdXJsX1g1MDljZXJ0aWZpY2F0ZSAqY2VydCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCk7CiBDVVJMY29kZSBDdXJsX2V4dHJhY3RfY2VydGluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgY2VydG51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCk7CiBDVVJMY29kZSBDdXJsX3ZlcmlmeWhvc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKTsKLSNlbmRpZiAvKiBVU0VfR1NLSVQgb3IgVVNFX05TUyBvciBVU0VfR05VVExTIG9yIFVTRV9DWUFTU0wgb3IgVVNFX1NDSEFOTkVMICovCisjZW5kaWYgLyogVVNFX0dTS0lUIG9yIFVTRV9OU1Mgb3IgVVNFX0dOVVRMUyBvciBVU0VfV09MRlNTTCBvciBVU0VfU0NIQU5ORUwgKi8KICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9YNTA5QVNOMV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21leHBhdC9Db25maWd1cmVDaGVja3MuY21ha2UgYi9VdGlsaXRpZXMvY21leHBhdC9Db25maWd1cmVDaGVja3MuY21ha2UKaW5kZXggZDg1ZTQ4Yy4uNGRhMjUyYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtZXhwYXQvQ29uZmlndXJlQ2hlY2tzLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWV4cGF0L0NvbmZpZ3VyZUNoZWNrcy5jbWFrZQpAQCAtNDQsMTQgKzQ0LDYgQEAKICAgICBzZXQoQllURU9SREVSIDEyMzQpCiBlbmRpZihXT1JEU19CSUdFTkRJQU4pCiAKLWlmKEhBVkVfU1lTX1RZUEVTX0gpCi0gICAgY2hlY2tfc3ltYm9sX2V4aXN0cygib2ZmX3QiICJzeXMvdHlwZXMuaCIgT0ZGX1QpCi0gICAgY2hlY2tfc3ltYm9sX2V4aXN0cygic2l6ZV90IiAic3lzL3R5cGVzLmgiIFNJWkVfVCkKLWVsc2UoSEFWRV9TWVNfVFlQRVNfSCkKLSAgICBzZXQoT0ZGX1QgImxvbmciKQotICAgIHNldChTSVpFX1QgInVuc2lnbmVkIikKLWVuZGlmKEhBVkVfU1lTX1RZUEVTX0gpCi0KIGNoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCIKICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPiAgLyogZm9yIE5VTEwgKi8KICAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPiAgLyogZm9yIHN5c2NhbGwgKi8KQEAgLTYxLDYgKzUzLDMgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IgogICAgIEhBVkVfU1lTQ0FMTF9HRVRSQU5ET00pCi0KLWNoZWNrX2NfY29tcGlsZXJfZmxhZygiLWZuby1zdHJpY3QtYWxpYXNpbmciIEZMQUdfTk9fU1RSSUNUX0FMSUFTSU5HKQotY2hlY2tfY19jb21waWxlcl9mbGFnKCItZnZpc2liaWxpdHk9aGlkZGVuIiBGTEFHX1ZJU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21leHBhdC9leHBhdF9jb25maWcuaC5jbWFrZSBiL1V0aWxpdGllcy9jbWV4cGF0L2V4cGF0X2NvbmZpZy5oLmNtYWtlCmluZGV4IDc5NWI2MDcuLmU5MTg2MWUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWV4cGF0L2V4cGF0X2NvbmZpZy5oLmNtYWtlCisrKyBiL1V0aWxpdGllcy9jbWV4cGF0L2V4cGF0X2NvbmZpZy5oLmNtYWtlCkBAIC04Niw5ICs4NiwzIEBACiAjaWZkZWYgX01TQ19WRVIKICMgIGRlZmluZSBfX2Z1bmNfXyBfX0ZVTkNUSU9OX18KICNlbmRpZgotCi0vKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLwotI2NtYWtlZGVmaW5lIG9mZl90IEBPRkZfVEAKLQotLyogRGVmaW5lIHRvIGB1bnNpZ25lZCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCi0jY21ha2VkZWZpbmUgc2l6ZV90IEBTSVpFX1RACmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21leHBhdC9saWIvc2lwaGFzaC5oIGIvVXRpbGl0aWVzL2NtZXhwYXQvbGliL3NpcGhhc2guaAppbmRleCA5NWY3OGY4Li5hMzM1ZWMwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21leHBhdC9saWIvc2lwaGFzaC5oCisrKyBiL1V0aWxpdGllcy9jbWV4cGF0L2xpYi9zaXBoYXNoLmgKQEAgLTk3LDcgKzk3LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPiAvKiBzaXplX3QgKi8KIAotI2luY2x1ZGUgPGNtX2t3aW1sLmg+CisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KIAogI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9VSU5UNjRfVAogIyBkZWZpbmUgdWludDY0X3QgS1dJTUxfSU5UX3VpbnQ2NF90CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA2MGM4MzE2Li5iZmNhZjMwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKQEAgLTEsOSArMSw0MyBAQAorIworSUYoMCkgIyBDTWFrZSBoYW5kbGVzIHBvbGljeSBzZXR0aW5ncyBpbiBpdHMgb3duIGJ1aWxkLgorQ01BS0VfTUlOSU1VTV9SRVFVSVJFRChWRVJTSU9OIDIuOC4xMiBGQVRBTF9FUlJPUikKK2lmKFBPTElDWSBDTVAwMDc0KQorICBjbWFrZV9wb2xpY3koU0VUIENNUDAwNzQgTkVXKSAjMy4xMi4wIGBmaW5kX3BhY2thZ2UoKWBgIHVzZXMgYGA8UGFja2FnZU5hbWU+X1JPT1RgYCB2YXJpYWJsZXMuCitlbmRpZigpCitFTkRJRigpCisjCiBQUk9KRUNUKGxpYmFyY2hpdmUgQykKICMKIFNFVChDTUFLRV9NT0RVTEVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2J1aWxkL2NtYWtlIikKIGlmKE5PVCBDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkpCiAgIHNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtsaWJhcmNoaXZlX0JJTkFSWV9ESVJ9L2JpbikKIGVuZGlmKCkKK0lGKDApICMgQ01ha2UgaGFuZGxlcyBidWlsZCB0eXBlIHNlbGVjdGlvbiBpbiBpdHMgb3duIGJ1aWxkLgorIworIyBTZXQgdGhlIEJ1aWxkIHR5cGUgZm9yIG1ha2UgYmFzZWQgZ2VuZXJhdG9ycy4KKyMgWW91IGNhbiBjaG9vc2UgZm9sbG93aW5nIHR5cGVzOgorIyAgIERlYnVnICAgICAgICAgIDogRGVidWcgYnVpbGQKKyMgICBSZWxlYXNlICAgICAgICA6IFJlbGVhc2UgYnVpbGQKKyMgICBSZWxXaXRoRGViSW5mbyA6IFJlbGVhc2UgYnVpbGQgd2l0aCBEZWJ1ZyBJbmZvCisjICAgTWluU2l6ZVJlbCAgICAgOiBSZWxlYXNlIE1pbiBTaXplIGJ1aWxkCitJRihOT1QgQ01BS0VfQlVJTERfVFlQRSkKKyAgU0VUKENNQUtFX0JVSUxEX1RZUEUgIlJlbGVhc2UiIENBQ0hFIFNUUklORyAiQnVpbGQgVHlwZSIgRk9SQ0UpCitFTkRJRihOT1QgQ01BS0VfQlVJTERfVFlQRSkKKyMgU2V0IGEgdmFsdWUgdHlwZSB0byBwcm9wZXJseSBkaXNwbGF5IENNQUtFX0JVSUxEX1RZUEUgb24gR1VJIGlmIHRoZQorIyB2YWx1ZSB0eXBlIGlzICJVTklOSVRJQUxJWkVEIi4KK0dFVF9QUk9QRVJUWShjYWNoZWRfdHlwZSBDQUNIRSBDTUFLRV9CVUlMRF9UWVBFIFBST1BFUlRZIFRZUEUpCitJRigiJHtjYWNoZWRfdHlwZX0iIFNUUkVRVUFMICJVTklOSVRJQUxJWkVEIikKKyAgU0VUKENNQUtFX0JVSUxEX1RZUEUgIiR7Q01BS0VfQlVJTERfVFlQRX0iIENBQ0hFIFNUUklORyAiQnVpbGQgVHlwZSIgRk9SQ0UpCitFTkRJRigiJHtjYWNoZWRfdHlwZX0iIFNUUkVRVUFMICJVTklOSVRJQUxJWkVEIikKKyMgQ2hlY2sgdGhlIEJ1aWxkIFR5cGUuCitJRihOT1QgIiR7Q01BS0VfQlVJTERfVFlQRX0iCisgICAgICAgTUFUQ0hFUyAiXihEZWJ1Z3xSZWxlYXNlfFJlbFdpdGhEZWJJbmZvfE1pblNpemVSZWwpXCQiKQorICBNRVNTQUdFKEZBVEFMX0VSUk9SCisgICAgICAgICAgIlVua25vd24ga2V5d29yZCBmb3IgQ01BS0VfQlVJTERfVFlQRTogJHtDTUFLRV9CVUlMRF9UWVBFfVxuIgorICAgICAgICAgICJBY2NlcHRhYmxlIGtleXdvcmRzOiBEZWJ1ZyxSZWxlYXNlLFJlbFdpdGhEZWJJbmZvLE1pblNpemVSZWwiKQorRU5ESUYoTk9UICIke0NNQUtFX0JVSUxEX1RZUEV9IgorICAgICAgICAgIE1BVENIRVMgIl4oRGVidWd8UmVsZWFzZXxSZWxXaXRoRGViSW5mb3xNaW5TaXplUmVsKVwkIikKK0VORElGKCkKIAogIyBPbiBNYWNPUywgcHJlZmVyIE1hY1BvcnRzIGxpYnJhcmllcyB0byBzeXN0ZW0gbGlicmFyaWVzLgogIyBJIGhhdmVuJ3QgY29tZSB1cCB3aXRoIGEgY29tcGVsbGluZyBhcmd1bWVudCBmb3IgdGhpcyB0byBiZSBjb25kaXRpb25hbC4KQEAgLTY2LDE0ICsxMDAsMTIyIEBACiAgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC13b2ZmYWxsIikKIEVORElGKCkKIAorSUYoMCkgIyBDTWFrZSBkb2VzIG5vdCBuZWVkIGZsYWdzIHNwZWNpZmljIHRvIGxpYmFyY2hpdmUgdXBzdHJlYW0gZGV2ZWxvcG1lbnQuCitpZiAoQ01BS0VfQlVJTERfVFlQRSBTVFJFUVVBTCAiRGVidWciKQorICBPUFRJT04oRU5BQkxFX1dFUlJPUiAiVHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzIC0gZGVmYXVsdCBpcyBPTiBmb3IgRGVidWcsIE9GRiBvdGhlcndpc2UuIiBPTikKK2Vsc2UgKCkKKyAgT1BUSU9OKEVOQUJMRV9XRVJST1IgIlRyZWF0IHdhcm5pbmdzIGFzIGVycm9ycyAtIGRlZmF1bHQgaXMgT04gZm9yIERlYnVnLCBPRkYgb3RoZXJ3aXNlLiIgT0ZGKQorZW5kaWYgKCkKKworIyBFc3BlY2lhbGx5IGZvciBlYXJseSBkZXZlbG9wbWVudCwgd2Ugd2FudCB0byBiZSBhIGxpdHRsZQorIyBhZ2dyZXNzaXZlIGFib3V0IGRpYWdub3NpbmcgYnVpbGQgcHJvYmxlbXM7IHRoaXMgY2FuIGdldAorIyByZWxheGVkIHNvbWV3aGF0IGluIGZpbmFsIHNoaXBwaW5nIHZlcnNpb25zLgorSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkdOVSQiKQorICBTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIi1XYWxsIC1XZm9ybWF0IC1XZm9ybWF0LXNlY3VyaXR5IikKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgIyBTZXQgY29tcGlsZSBmbGFncyBmb3IgYWxsIGJ1aWxkIHR5cGVzLgorICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtV2FsbCAtV2Zvcm1hdCAtV2Zvcm1hdC1zZWN1cml0eSIpCisgIGlmIChFTkFCTEVfV0VSUk9SKQorICAgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1XZXJyb3IiKQorICBlbmRpZiAoKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBkZWJ1ZyBidWlsZC4KKyAgIyBUaGlzIGlzIGFkZGVkIGludG8gQ01BS0VfQ19GTEFHUyB3aGVuIENNQUtFX0JVSUxEX1RZUEUgaXMgIkRlYnVnIgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV2V4dHJhIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVd1bnVzZWQiKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV3NoYWRvdyIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1XbWlzc2luZy1wcm90b3R5cGVzIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVdjYXN0LXF1YWwiKQorRU5ESUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkdOVSQiKQorSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkNsYW5nJCIpCisgIFNFVChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiLVdhbGwgLVdmb3JtYXQgLVdmb3JtYXQtc2VjdXJpdHkiKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBhbGwgYnVpbGQgdHlwZXMuCisgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1XYWxsIC1XZm9ybWF0IC1XZm9ybWF0LXNlY3VyaXR5IikKKyAgaWYgKEVOQUJMRV9XRVJST1IpCisgICAgU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLVdlcnJvciIpCisgIGVuZGlmICgpCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMgU2V0IGNvbXBpbGUgZmxhZ3MgZm9yIGRlYnVnIGJ1aWxkLgorICAjIFRoaXMgaXMgYWRkZWQgaW50byBDTUFLRV9DX0ZMQUdTIHdoZW4gQ01BS0VfQlVJTERfVFlQRSBpcyAiRGVidWciCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1nIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVdleHRyYSIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1XdW51c2VkIikKKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gLVdzaGFkb3ciKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtV21pc3NpbmctcHJvdG90eXBlcyIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1XY2FzdC1xdWFsIikKK0VORElGIChDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl5DbGFuZyQiKQorSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXlhMJCIpCisgIFNFVChDTUFLRV9DX0NPTVBJTEVSICJ4bGNfciIpCisgIFNFVChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiLXFmbGFnPWU6ZSAtcWZvcm1hdD1zZWMiKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBhbGwgYnVpbGQgdHlwZXMuCisgIFNFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1xZmxhZz1lOmUgLXFmb3JtYXQ9c2VjIikKKyAgaWYgKEVOQUJMRV9XRVJST1IpCisgICAgU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLXFoYWx0PXciKQorICBlbmRpZiAoKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBkZWJ1ZyBidWlsZC4KKyAgIyBUaGlzIGlzIGFkZGVkIGludG8gQ01BS0VfQ19GTEFHUyB3aGVuIENNQUtFX0JVSUxEX1RZUEUgaXMgIkRlYnVnIgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtZyIpCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC1xZmxhZz13OnciKQorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAtcWluZm89cHJvOnVzZSIpCitFTkRJRihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl5YTCQiKQorSUYgKE1TVkMpCisgIGlmIChFTkFCTEVfV0VSUk9SKQorICAgICMgL1dYIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyBnY2MncyAtV2Vycm9yIG9wdGlvbi4KKyAgICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAvV1giKQorICBlbmRpZiAoKQorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFNldCBjb21waWxlIGZsYWdzIGZvciBkZWJ1ZyBidWlsZC4KKyAgIyBUaGlzIGlzIGFkZGVkIGludG8gQ01BS0VfQ19GTEFHUyB3aGVuIENNQUtFX0JVSUxEX1RZUEUgaXMgIkRlYnVnIgorICAjIEVuYWJsZSBsZXZlbCA0IEM0MDYyOiBUaGUgZW51bWVyYXRlIGhhcyBubyBhc3NvY2lhdGVkIGhhbmRsZXIgaW4gYSBzd2l0Y2gKKyAgIyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFuZCB0aGVyZSBpcyBubyBkZWZhdWx0IHRoYXQgY2FuIGNhdGNoIGl0LgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0MDYyIikKKyAgIyBFbmFibGUgbGV2ZWwgNCBDNDI1NDogQSBsYXJnZXIgYml0IGZpZWxkIHdhcyBhc3NpZ25lZCB0byBhIHNtYWxsZXIgYml0CisgICMgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0MjU0IikKKyAgIyBFbmFibGUgbGV2ZWwgNCBDNDI5NTogQW4gYXJyYXkgd2FzIGluaXRpYWxpemVkIGJ1dCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4KKyAgIyAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFycmF5IGlzIG5vdCBhIG51bGw7IGFjY2Vzc2luZyB0aGUgYXJyYXkgbWF5CisgICMgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0Mjk1IikKKyAgIyBFbmFibGUgbGV2ZWwgNCBDNDI5NjogQW4gdW5zaWduZWQgdmFyaWFibGUgd2FzIHVzZWQgaW4gYSBjb21wYXJpc29uCisgICMgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiB3aXRoIHplcm8uCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQyOTYiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0Mzg5OiBBbiBvcGVyYXRpb24gaW52b2x2ZWQgc2lnbmVkIGFuZCB1bnNpZ25lZCB2YXJpYWJsZXMuCisgICMgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bGQgcmVzdWx0IGluIGEgbG9zcyBvZiBkYXRhLgorICBTRVQoQ01BS0VfQ19GTEFHU19ERUJVRyAiJHtDTUFLRV9DX0ZMQUdTX0RFQlVHfSAvd2U0Mzg5IikKKyAgIyBFbmFibGUgbGV2ZWwgNCBDNDUwNTogVGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGxvY2FsIGFuZCBub3QgcmVmZXJlbmNlZCBpbgorICAjICAgICAgICAgICAgICAgICAgICAgICB0aGUgYm9keSBvZiB0aGUgbW9kdWxlOyB0aGVyZWZvcmUsIHRoZSBmdW5jdGlvbiBpcworICAjICAgICAgICAgICAgICAgICAgICAgICBkZWFkIGNvZGUuCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQ1MDUiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0NTE0OiBUaGUgb3B0aW1pemVyIHJlbW92ZWQgYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQgaXMgbm90CisgICMgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZC4KKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL3dlNDUxNCIpCisgICMgRW5hYmxlIGxldmVsIDQgQzQ3MDI6IFVucmVhY2hhYmxlIGNvZGUuCisgIFNFVChDTUFLRV9DX0ZMQUdTX0RFQlVHICIke0NNQUtFX0NfRkxBR1NfREVCVUd9IC93ZTQ3MDIiKQorICAjIEVuYWJsZSBsZXZlbCA0IEM0NzA2OiBUaGUgdGVzdCB2YWx1ZSBpbiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gd2FzIHRoZQorICAjICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgb2YgYW4gYXNzaWdubWVudC4KKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL3dlNDcwNiIpCisgICMgL09pIG9wdGlvbiBlbmFibGVzIGJ1aWx0LWluIGZ1bmN0aW9ucy4KKyAgU0VUKENNQUtFX0NfRkxBR1NfREVCVUcgIiR7Q01BS0VfQ19GTEFHU19ERUJVR30gL09pIikKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgIyBTZXQgY29tcGlsZSBmbGFncyBmb3IgcmVsZWFzZSBidWlsZC4KKyAgU0VUKENNQUtFX0NfRkxBR1NfUkVMRUFTRSAiJHtDTUFLRV9DX0ZMQUdTX1JFTEVBU0V9IC9PaSIpCitFTkRJRiAoTVNWQykKK0VORElGKCkKKwogIyBFbmFibGUgQ1Rlc3QvQ0Rhc2ggc3VwcG9ydAogaW5jbHVkZShDVGVzdCkKIAotT1BUSU9OKEVOQUJMRV9ORVRUTEUgIkVuYWJsZSB1c2Ugb2YgTmV0dGxlIiBPTikKK09QVElPTihFTkFCTEVfTUJFRFRMUyAiRW5hYmxlIHVzZSBvZiBtYmVkIFRMUyIgT0ZGKQorT1BUSU9OKEVOQUJMRV9ORVRUTEUgIkVuYWJsZSB1c2Ugb2YgTmV0dGxlIiBPRkYpCiBPUFRJT04oRU5BQkxFX09QRU5TU0wgIkVuYWJsZSB1c2Ugb2YgT3BlblNTTCIgT04pCitPUFRJT04oRU5BQkxFX0xJQkIyICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIExJQkIyIGxpYnJhcnkgaWYgZm91bmQiIE9OKQogT1BUSU9OKEVOQUJMRV9MWjQgIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTFo0IGxpYnJhcnkgaWYgZm91bmQiIE9OKQogT1BUSU9OKEVOQUJMRV9MWk8gIkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBzeXN0ZW0gTFpPIGxpYnJhcnkgaWYgZm91bmQiIE9GRikKIE9QVElPTihFTkFCTEVfTFpNQSAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBMWk1BIGxpYnJhcnkgaWYgZm91bmQiIE9OKQorT1BUSU9OKEVOQUJMRV9aU1REICJFbmFibGUgdGhlIHVzZSBvZiB0aGUgc3lzdGVtIHpzdGQgbGlicmFyeSBpZiBmb3VuZCIgT04pCiAKIE9QVElPTihFTkFCTEVfWkxJQiAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBaTElCIGxpYnJhcnkgaWYgZm91bmQiIE9OKQogT1BUSU9OKEVOQUJMRV9CWmlwMiAiRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIHN5c3RlbSBCWmlwMiBsaWJyYXJ5IGlmIGZvdW5kIiBPTikKQEAgLTg0LDIzICsyMjYsOTggQEAKICMgQ05HIGlzIHVzZWQgZm9yIGVuY3J5cHQvZGVjcnlwdCBaaXAgYXJjaGl2ZXMgb24gV2luZG93cy4KIE9QVElPTihFTkFCTEVfQ05HICJFbmFibGUgdGhlIHVzZSBvZiBDTkcoQ3J5cHRvIE5leHQgR2VuZXJhdGlvbikiIE9OKQogCitJRigwKSAjIENNYWtlIGRvZXMgbm90IGJ1aWxkIGxpYmFyY2hpdmUncyBjb21tYW5kLWxpbmUgdG9vbHMuCitPUFRJT04oRU5BQkxFX1RBUiAiRW5hYmxlIHRhciBidWlsZGluZyIgT04pCitPUFRJT04oRU5BQkxFX1RBUl9TSEFSRUQgIkVuYWJsZSBkeW5hbWljIGJ1aWxkIG9mIHRhciIgRkFMU0UpCitPUFRJT04oRU5BQkxFX0NQSU8gIkVuYWJsZSBjcGlvIGJ1aWxkaW5nIiBPTikKK09QVElPTihFTkFCTEVfQ1BJT19TSEFSRUQgIkVuYWJsZSBkeW5hbWljIGJ1aWxkIG9mIGNwaW8iIEZBTFNFKQorT1BUSU9OKEVOQUJMRV9DQVQgIkVuYWJsZSBjYXQgYnVpbGRpbmciIE9OKQorT1BUSU9OKEVOQUJMRV9DQVRfU0hBUkVEICJFbmFibGUgZHluYW1pYyBidWlsZCBvZiBjYXQiIEZBTFNFKQorRU5ESUYoKQogT1BUSU9OKEVOQUJMRV9YQVRUUiAiRW5hYmxlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IiBPTikKIE9QVElPTihFTkFCTEVfQUNMICJFbmFibGUgQUNMIHN1cHBvcnQiIE9OKQogT1BUSU9OKEVOQUJMRV9JQ09OViAiRW5hYmxlIGljb252IHN1cHBvcnQiIE9OKQorSUYoMCkgIyBDTWFrZSBkb2VzIG5vdCBidWlsZCBsaWJhcmNoaXZlJ3MgdGVzdHMuCitPUFRJT04oRU5BQkxFX1RFU1QgIkVuYWJsZSB1bml0IGFuZCByZWdyZXNzaW9uIHRlc3RzIiBPTikKK09QVElPTihFTkFCTEVfQ09WRVJBR0UgIkVuYWJsZSBjb2RlIGNvdmVyYWdlIChHQ0Mgb25seSwgYXV0b21hdGljYWxseSBzZXRzIEVOQUJMRV9URVNUIHRvIE9OKSIgRkFMU0UpCitPUFRJT04oRU5BQkxFX0lOU1RBTEwgIkVuYWJsZSBpbnN0YWxsaW5nIG9mIGxpYnJhcmllcyIgT04pCisKK1NFVChQT1NJWF9SRUdFWF9MSUIgIkFVVE8iIENBQ0hFIFNUUklORyAiQ2hvb3NlIHdoYXQgbGlicmFyeSBzaG91bGQgcHJvdmlkZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCIpCitTRVQoRU5BQkxFX1NBRkVTRUggIkFVVE8iIENBQ0hFIFNUUklORyAiRW5hYmxlIHVzZSBvZiAvU0FGRVNFSCBsaW5rZXIgZmxhZyAoTVNWQyBvbmx5KSIpCitTRVQoV0lORE9XU19WRVJTSU9OICJXSU43IiBDQUNIRSBTVFJJTkcgIlNldCBXaW5kb3dzIHZlcnNpb24gdG8gdXNlIChXaW5kb3dzIG9ubHkpIikKKworSUYoRU5BQkxFX0NPVkVSQUdFKQorICAgICAgIGluY2x1ZGUoTGliYXJjaGl2ZUNvZGVDb3ZlcmFnZSkKK0VORElGKEVOQUJMRV9DT1ZFUkFHRSkKKworSUYoRU5BQkxFX1RFU1QpCisgICAgICAgRU5BQkxFX1RFU1RJTkcoKQorRU5ESUYoRU5BQkxFX1RFU1QpCitFTkRJRigpCiAKIElGKFdJTjMyKQotICAjRUxTRUlGKFdJTkRPV1NfVkVSU0lPTiBTVFJFUVVBTCAiV0lOWFAiKQogICBTRVQoTlRERElfVkVSU0lPTiAweDA1MDEwMDAwKQogICBTRVQoX1dJTjMyX1dJTk5UIDB4MDUwMSkKICAgU0VUKFdJTlZFUiAweDA1MDEpCiBFTkRJRihXSU4zMikKIAotc2V0KEhBVkVfUFRIUkVBRF9IIDApICMgbm8gdGhyZWFkcyBpbiBDTWFrZQorSUYoMCkgIyBDTWFrZSBoYXJkLWNvZGVzIGl0cyBvd24gc3VwcG9ydGVkIHZlcnNpb24gb2YgV2luZG93cy4KK0lGKFdJTjMyKQorICBJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldJTjgiKQorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDYwMjAwMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA2MDIpCisgICAgU0VUKFdJTlZFUiAweDA2MDIpCisgIEVMU0VJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldJTjciKQorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDYwMTAwMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA2MDEpCisgICAgU0VUKFdJTlZFUiAweDA2MDEpCisgIEVMU0VJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldTMDgiKQorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDYwMDAxMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA2MDApCisgICAgU0VUKFdJTlZFUiAweDA2MDApCisgIEVMU0VJRihXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIlZJU1RBIikKKyAgICBTRVQoTlRERElfVkVSU0lPTiAweDA2MDAwMDAwKQorICAgIFNFVChfV0lOMzJfV0lOTlQgMHgwNjAwKQorICAgIFNFVChXSU5WRVIgMHgwNjAwKQorICBFTFNFSUYoV0lORE9XU19WRVJTSU9OIFNUUkVRVUFMICJXUzAzIikKKyAgICBTRVQoTlRERElfVkVSU0lPTiAweDA1MDIwMDAwKQorICAgIFNFVChfV0lOMzJfV0lOTlQgMHgwNTAyKQorICAgIFNFVChXSU5WRVIgMHgwNTAyKQorICBFTFNFSUYoV0lORE9XU19WRVJTSU9OIFNUUkVRVUFMICJXSU5YUCIpCisgICAgU0VUKE5URERJX1ZFUlNJT04gMHgwNTAxMDAwMCkKKyAgICBTRVQoX1dJTjMyX1dJTk5UIDB4MDUwMSkKKyAgICBTRVQoV0lOVkVSIDB4MDUwMSkKKyAgRUxTRShXSU5ET1dTX1ZFUlNJT04gU1RSRVFVQUwgIldJTjgiKQorICAgICMgRGVmYXVsdCB0byBXaW5kb3dzIFNlcnZlciAyMDAzIEFQSSBpZiB3ZSBkb24ndCByZWNvZ25pemUgdGhlIHNwZWNpZmllcgorICAgIFNFVChOVERESV9WRVJTSU9OIDB4MDUwMjAwMDApCisgICAgU0VUKF9XSU4zMl9XSU5OVCAweDA1MDIpCisgICAgU0VUKFdJTlZFUiAweDA1MDIpCisgIEVORElGKFdJTkRPV1NfVkVSU0lPTiBTVFJFUVVBTCAiV0lOOCIpCitFTkRJRihXSU4zMikKKworSUYoTVNWQykKKyAgSUYoRU5BQkxFX1NBRkVTRUggU1RSRVFVQUwgIllFUyIpCisgICAgU0VUKENNQUtFX0VYRV9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfRVhFX0xJTktFUl9GTEFHU30gL1NBRkVTRUgiKQorICAgIFNFVChDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IC9TQUZFU0VIIikKKyAgICBTRVQoQ01BS0VfTU9EVUxFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTfSAvU0FGRVNFSCIpCisgICAgU0VUKEVOVntMREZMQUdTfSAiJEVOVntMREZMQUdTfSAvU0FGRVNFSCIpCisgIEVMU0VJRihFTkFCTEVfU0FGRVNFSCBTVFJFUVVBTCAiTk8iKQorICAgIFNFVChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC9TQUZFU0VIOk5PIikKKyAgICBTRVQoQ01BS0VfU0hBUkVEX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTfSAvU0FGRVNFSDpOTyIpCisgICAgU0VUKENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfTU9EVUxFX0xJTktFUl9GTEFHU30gL1NBRkVTRUg6Tk8iKQorICAgIFNFVChFTlZ7TERGTEFHU30gIiRFTlZ7TERGTEFHU30gL1NBRkVTRUg6Tk8iKQorICBFTkRJRihFTkFCTEVfU0FGRVNFSCBTVFJFUVVBTCAiWUVTIikKK0VORElGKE1TVkMpCitFTkRJRigpCiAKIElGKCIke0NNQUtFX0NfUExBVEZPUk1fSUR9IiBNQVRDSEVTICJeKEhQLVVYKSQiKQogICBBRERfREVGSU5JVElPTlMoLURfWE9QRU5fU09VUkNFPTUwMCkgIyBBc2sgd2NoYXIuaCBmb3IgbWJzdGF0ZV90CiBFTkRJRigpCiAKK0lGKE1JTkdXKQorICBBRERfREVGSU5JVElPTlMoLURfX1VTRV9NSU5HV19BTlNJX1NURElPKQorRU5ESUYoKQorCiAjCiBJTkNMVURFKENoZWNrQ1NvdXJjZUNvbXBpbGVzKQogSU5DTFVERShDaGVja0NTb3VyY2VSdW5zKQpAQCAtMjgwLDggKzQ5Nyw2IEBACiAgICAgQUREX0RFRklOSVRJT05TKC1EVVNFX0JaSVAyX1NUQVRJQykKICAgRU5ESUYoVVNFX0JaSVAyX0RMTCkKIEVORElGKEJaSVAyX0ZPVU5EKQotTUFSS19BU19BRFZBTkNFRChDTEVBUiBCWklQMl9JTkNMVURFX0RJUikKLU1BUktfQVNfQURWQU5DRUQoQ0xFQVIgQlpJUDJfTElCUkFSSUVTKQogCiAKICMKQEAgLTI5MCwxMiArNTA1LDE1IEBACiBJRihFTkFCTEVfTFpNQSkKICAgRklORF9QQUNLQUdFKExpYkxaTUEpCiBFTFNFKCkKLSAgU0VUKExJQlpNQV9GT1VORCBGQUxTRSkgIyBPdmVycmlkZSBjYWNoZWQgdmFsdWUKKyAgU0VUKExJQkxaTUFfRk9VTkQgRkFMU0UpICMgT3ZlcnJpZGUgY2FjaGVkIHZhbHVlCiBFTkRJRigpCiAKIElGKExJQkxaTUFfRk9VTkQpCiAgIFNFVChIQVZFX0xJQkxaTUEgMSkKICAgU0VUKEhBVkVfTFpNQV9IIDEpCisgIENNQUtFX1BVU0hfQ0hFQ0tfU1RBVEUoKQorICBTRVQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtMSUJMWk1BX0lOQ0xVREVfRElSfSkKKyAgU0VUKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke0xJQkxaTUFfTElCUkFSSUVTfSkKICAgSU5DTFVERV9ESVJFQ1RPUklFUygke0xJQkxaTUFfSU5DTFVERV9ESVJTfSkKICAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICR7TElCTFpNQV9MSUJSQVJJRVN9KQogICBJRihDTUFLRV9VU0VfU1lTVEVNX0xJQkxaTUEpCkBAIC0zMTEsMTAgKzUyOSwxMCBAQAogICBFTFNFKCkKICAgICBBRERfREVGSU5JVElPTlMoLURMWk1BX0FQSV9TVEFUSUMpCiAgIEVORElGKCkKKyAgQ01BS0VfUE9QX0NIRUNLX1NUQVRFKCkKIEVMU0UoTElCTFpNQV9GT1VORCkKICMgTFpNQSBub3QgZm91bmQgYW5kIHdpbGwgbm90IGJlIHVzZWQuCiBFTkRJRihMSUJMWk1BX0ZPVU5EKQotSUYoMCkgIyBDTWFrZSBkb2VzIG5vdCBuZWVkIExaTzIgc3VwcG9ydCBpbiBsaWJhcmNoaXZlCiAjCiAjIEZpbmQgTFpPMgogIwpAQCAtMzQxLDEwICs1NTksMzUgQEAKICAgIyBUT0RPOiB0ZXN0IGZvciBzdGF0aWMgbGlicmFyeS4KICAgIwogRU5ESUYoTFpPMl9GT1VORCkKLU1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTFpPMl9JTkNMVURFX0RJUikKLU1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTFpPMl9MSUJSQVJZKQotRU5ESUYoKQotSUYoMCkgIyBDTWFrZSBkb2VzIG5vdCBuZWVkIExaNCBzdXBwb3J0IGluIGxpYmFyY2hpdmUKKyMKKyMgRmluZCBsaWJiMgorIworSUYoRU5BQkxFX0xJQkIyKQorICBJRiAoTElCQjJfSU5DTFVERV9ESVIpCisgICAgIyBBbHJlYWR5IGluIGNhY2hlLCBiZSBzaWxlbnQKKyAgICBTRVQoTElCQjJfRklORF9RVUlFVExZIFRSVUUpCisgIEVORElGIChMSUJCMl9JTkNMVURFX0RJUikKKworICBGSU5EX1BBVEgoTElCQjJfSU5DTFVERV9ESVIgYmxha2UyLmgpCisgIEZJTkRfTElCUkFSWShMSUJCMl9MSUJSQVJZIE5BTUVTIGIyIGxpYmIyKQorICBJTkNMVURFKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorICBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoTElCQjIgREVGQVVMVF9NU0cgTElCQjJfTElCUkFSWSBMSUJCMl9JTkNMVURFX0RJUikKK0VMU0UoRU5BQkxFX0xJQkIyKQorICBTRVQoTElCQjJfRk9VTkQgRkFMU0UpICMgT3ZlcnJpZGUgY2FjaGVkIHZhbHVlCitFTkRJRihFTkFCTEVfTElCQjIpCitJRihMSUJCMl9GT1VORCkKKyAgU0VUKEhBVkVfTElCQjIgMSkKKyAgU0VUKEhBVkVfQkxBS0UyX0ggMSkKKyAgU0VUKEFSQ0hJVkVfQkxBS0UyIEZBTFNFKQorICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtMSUJCMl9MSUJSQVJZfSkKKyAgQ01BS0VfUFVTSF9DSEVDS19TVEFURSgpCisgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtMSUJCMl9MSUJSQVJZfSkKKyAgU0VUKENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7TElCQjJfSU5DTFVERV9ESVJ9KQorICBDSEVDS19GVU5DVElPTl9FWElTVFMoYmxha2Uyc3BfaW5pdCBIQVZFX0xJQkIyKQorICBDTUFLRV9QT1BfQ0hFQ0tfU1RBVEUoKQorRUxTRShMSUJCMl9GT1VORCkKKyAgU0VUKEFSQ0hJVkVfQkxBS0UyIFRSVUUpCitFTkRJRihMSUJCMl9GT1VORCkKICMKICMgRmluZCBMWjQKICMKQEAgLTM3NCwzMyArNjE3LDQyIEBACiAgICMgVE9ETzogdGVzdCBmb3Igc3RhdGljIGxpYnJhcnkuCiAgICMKIEVORElGKExaNF9GT1VORCkKLU1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTFo0X0lOQ0xVREVfRElSKQotTUFSS19BU19BRFZBTkNFRChDTEVBUiBMWjRfTElCUkFSWSkKLUVORElGKCkKICMKICMgRmluZCBac3RkCiAjCi1JRiAoWlNURF9JTkNMVURFX0RJUikKLSAgIyBBbHJlYWR5IGluIGNhY2hlLCBiZSBzaWxlbnQKLSAgU0VUKFpTVERfRklORF9RVUlFVExZIFRSVUUpCi1FTkRJRiAoWlNURF9JTkNMVURFX0RJUikKK0lGKEVOQUJMRV9aU1REKQorICBJRiAoWlNURF9JTkNMVURFX0RJUikKKyAgICAjIEFscmVhZHkgaW4gY2FjaGUsIGJlIHNpbGVudAorICAgIFNFVChaU1REX0ZJTkRfUVVJRVRMWSBUUlVFKQorICBFTkRJRiAoWlNURF9JTkNMVURFX0RJUikKIAotRklORF9QQVRIKFpTVERfSU5DTFVERV9ESVIgenN0ZC5oKQotRklORF9MSUJSQVJZKFpTVERfTElCUkFSWSBOQU1FUyB6c3RkIGxpYnpzdGQpCi1JTkNMVURFKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQotRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKFpTVEQgREVGQVVMVF9NU0cgWlNURF9MSUJSQVJZIFpTVERfSU5DTFVERV9ESVIpCisgIEZJTkRfUEFUSChaU1REX0lOQ0xVREVfRElSIHpzdGQuaCkKKyAgRklORF9MSUJSQVJZKFpTVERfTElCUkFSWSBOQU1FUyB6c3RkIGxpYnpzdGQpCisgIElOQ0xVREUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCisgIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhaU1REIERFRkFVTFRfTVNHIFpTVERfTElCUkFSWSBaU1REX0lOQ0xVREVfRElSKQorRUxTRShFTkFCTEVfWlNURCkKKyAgU0VUKFpTVERfRk9VTkQgRkFMU0UpICMgT3ZlcnJpZGUgY2FjaGVkIHZhbHVlCitFTkRJRihFTkFCTEVfWlNURCkKIElGKFpTVERfRk9VTkQpCiAgIFNFVChIQVZFX1pTVERfSCAxKQogICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7WlNURF9JTkNMVURFX0RJUn0pCiAgIExJU1QoQVBQRU5EIEFERElUSU9OQUxfTElCUyAke1pTVERfTElCUkFSWX0pCiAgIFNFVChIQVZFX0xJQlpTVEQgMSkKKyAgSUYoMCkgIyBDTWFrZSBleHBlY3RzIHRoZSB6c3RkIGxpYnJhcnkgdG8gd29yay4KKyAgQ01BS0VfUFVTSF9DSEVDS19TVEFURSgpCisgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtaU1REX0xJQlJBUll9KQorICBTRVQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtaU1REX0lOQ0xVREVfRElSfSkKKyAgQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTKFpTVERfY29tcHJlc3NTdHJlYW0gSEFWRV9MSUJaU1REKQogICAjCiAgICMgVE9ETzogdGVzdCBmb3Igc3RhdGljIGxpYnJhcnkuCiAgICMKKyAgQ01BS0VfUE9QX0NIRUNLX1NUQVRFKCkKKyAgRU5ESUYoKQogRU5ESUYoWlNURF9GT1VORCkKIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgWlNURF9JTkNMVURFX0RJUikKIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgWlNURF9MSUJSQVJZKQogCisKICMKICMgQ2hlY2sgaGVhZGVycwogIwpAQCAtNDIwLDkgKzY3MiwxMSBAQAogIyBBbHBoYWJldGl6ZSB0aGUgcmVzdCB1bmxlc3MgdGhlcmUncyBhIGNvbXBlbGxpbmcgcmVhc29uCiBJRihFTkFCTEVfQUNMKQogICBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImFjbC9saWJhY2wuaCIgSEFWRV9BQ0xfTElCQUNMX0gpCi1FTFNFKEVOQUJMRV9BQ0wpCisgIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiYXR0ci94YXR0ci5oIiBIQVZFX0FUVFJfWEFUVFJfSCkKK0VMU0UoKQogICBTRVQoSEFWRV9BQ0xfTElCQUNMX0ggRkFMU0UpCi1FTkRJRihFTkFCTEVfQUNMKQorICBTRVQoSEFWRV9BVFRSX1hBVFRSX0ggRkFMU0UpCitFTkRJRigpCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImN0eXBlLmgiIEhBVkVfQ1RZUEVfSCkKIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiY29weWZpbGUuaCIgSEFWRV9DT1BZRklMRV9IKQogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJkaXJlY3QuaCIgSEFWRV9ESVJFQ1RfSCkKQEAgLTQzNiw3ICs2OTAsNiBAQAogCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImZjbnRsLmgiIEhBVkVfRkNOVExfSCkKIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiZ3JwLmgiIEhBVkVfR1JQX0gpCi1MQV9DSEVDS19JTkNMVURFX0ZJTEUoImludHR5cGVzLmgiIEhBVkVfSU5UVFlQRVNfSCkKIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiaW8uaCIgSEFWRV9JT19IKQogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJsYW5naW5mby5oIiBIQVZFX0xBTkdJTkZPX0gpCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImxpbWl0cy5oIiBIQVZFX0xJTUlUU19IKQpAQCAtNDYyLDcgKzcxNSw2IEBACiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoInNpZ25hbC5oIiBIQVZFX1NJR05BTF9IKQogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJzcGF3bi5oIiBIQVZFX1NQQVdOX0gpCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoInN0ZGFyZy5oIiBIQVZFX1NUREFSR19IKQotTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJzdGRpbnQuaCIgSEFWRV9TVERJTlRfSCkKIExBX0NIRUNLX0lOQ0xVREVfRklMRSgic3RkbGliLmgiIEhBVkVfU1RETElCX0gpCiBMQV9DSEVDS19JTkNMVURFX0ZJTEUoInN0cmluZy5oIiBIQVZFX1NUUklOR19IKQogTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJzdHJpbmdzLmgiIEhBVkVfU1RSSU5HU19IKQpAQCAtNTIwLDYgKzc3MiwyNiBAQAogIFNBRkVfVE9fREVGSU5FX0VYVEVOU0lPTlMpCiAKICMKKyMgRmluZCBtYmVkIFRMUworIworSUYoRU5BQkxFX01CRURUTFMpCisgIEZJTkRfUEFDS0FHRShNYmVkVExTKQorICBJRihNQkVEVExTX0ZPVU5EKQorICAgIFNFVChIQVZFX0xJQk1CRURDUllQVE8gMSkKKyAgICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtNQkVEQ1JZUFRPX0xJQlJBUll9KQorICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtNQkVEVExTX0lOQ0xVREVfRElSU30pCisKKyAgICBMSVNUKEFQUEVORCBDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke01CRURUTFNfSU5DTFVERV9ESVJTfSkKKyAgICBMQV9DSEVDS19JTkNMVURFX0ZJTEUoIm1iZWR0bHMvYWVzLmgiIEhBVkVfTUJFRFRMU19BRVNfSCkKKyAgICBMQV9DSEVDS19JTkNMVURFX0ZJTEUoIm1iZWR0bHMvbWQuaCIgSEFWRV9NQkVEVExTX01EX0gpCisgICAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJtYmVkdGxzL3BrY3M1LmgiIEhBVkVfTUJFRFRMU19QS0NTNV9IKQorCisgIEVORElGKE1CRURUTFNfRk9VTkQpCisgIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTUJFRFRMU19JTkNMVURFX0RJUlMpCisgIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTUJFRENSWVBUT19MSUJSQVJZKQorRU5ESUYoRU5BQkxFX01CRURUTFMpCisKKyMKICMgRmluZCBOZXR0bGUKICMKIElGKEVOQUJMRV9ORVRUTEUpCkBAIC01ODAsNiArODUyLDggQEAKICAgICAgIFNUUklORyhUT1VQUEVSICIke0FMR09SSVRITX0iIGFsZ29yaXRobSkKICAgICAgIElGICgiJHtJTVBMRU1FTlRBVElPTn0iIE1BVENIRVMgIl5PUEVOU1NMJCIgQU5EIE5PVCBPUEVOU1NMX0ZPVU5EKQogICAgICAgICBTRVQoQVJDSElWRV9DUllQVE9fJHtBTEdPUklUSE19XyR7SU1QTEVNRU5UQVRJT059IEZBTFNFKQorICAgICAgRUxTRUlGKCIke0lNUExFTUVOVEFUSU9OfSIgTUFUQ0hFUyAiXk1CRURUTFMkIiBBTkQgTk9UIE1CRURUTFNfRk9VTkQpCisgICAgICAgIFNFVChBUkNISVZFX0NSWVBUT18ke0FMR09SSVRITX1fJHtJTVBMRU1FTlRBVElPTn0gRkFMU0UpCiAgICAgICBFTFNFSUYoIiR7SU1QTEVNRU5UQVRJT059IiBNQVRDSEVTICJeTkVUVExFJCIgQU5EIE5PVCBORVRUTEVfRk9VTkQpCiAgICAgICAgIFNFVChBUkNISVZFX0NSWVBUT18ke0FMR09SSVRITX1fJHtJTVBMRU1FTlRBVElPTn0gRkFMU0UpCiAgICAgICBFTkRJRigiJHtJTVBMRU1FTlRBVElPTn0iIE1BVENIRVMgIl5PUEVOU1NMJCIgQU5EIE5PVCBPUEVOU1NMX0ZPVU5EKQpAQCAtNTk1LDYgKzg2OSwxMSBAQAogCSAgICAgICIke1RSWV9DUllQVE9fUkVRVUlSRURfSU5DTFVERVN9OyR7T1BFTlNTTF9JTkNMVURFX0RJUn0iKQogCSAgICBTRVQoVFJZX0NSWVBUT19SRVFVSVJFRF9MSUJTCiAJICAgICAgICAiLURMSU5LX0xJQlJBUklFUzpTVFJJTkc9JHtPUEVOU1NMX0xJQlJBUklFU30iKQorCUVMU0VJRigiJHtJTVBMRU1FTlRBVElPTn0iIE1BVENIRVMgIl5NQkVEVExTJCIgQU5EIE1CRURUTFNfRk9VTkQpCisJICAgIFNFVChUUllfQ1JZUFRPX1JFUVVJUkVEX0lOQ0xVREVTCisJICAgICAgIiR7VFJZX0NSWVBUT19SRVFVSVJFRF9JTkNMVURFU307JHtNQkVEVExTX0lOQ0xVREVfRElSU30iKQorCSAgICBTRVQoVFJZX0NSWVBUT19SRVFVSVJFRF9MSUJTCisJICAgICAgIi1ETElOS19MSUJSQVJJRVM6U1RSSU5HPSR7TUJFRENSWVBUT19MSUJSQVJZfSIpCiAJRUxTRUlGKCIke0lNUExFTUVOVEFUSU9OfSIgTUFUQ0hFUyAiXk5FVFRMRSQiIEFORCBORVRUTEVfRk9VTkQpCiAJICAgIFNFVChUUllfQ1JZUFRPX1JFUVVJUkVEX0lOQ0xVREVTCiAJICAgICAgIiR7VFJZX0NSWVBUT19SRVFVSVJFRF9JTkNMVURFU307JHtORVRUTEVfSU5DTFVERV9ESVJ9IikKQEAgLTc1OSwxOCArMTAzOCwxOSBAQAogTUFDUk8oQ0hFQ0tfSUNPTlYgTElCIFRSWV9JQ09OVl9DT05TVCkKICAgSUYoTk9UIEhBVkVfSUNPTlYpCiAgICAgQ01BS0VfUFVTSF9DSEVDS19TVEFURSgpCSMgU2F2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcwotICAgIElGIChDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJHTlUiIE9SCi0gICAgICAgIENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkNsYW5nIikKKyAgICBJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeR05VJCIgT1IKKyAgICAgICAgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeQ2xhbmckIikKICAgICAgICMKICAgICAgICMgRHVyaW5nIGNoZWNraW5nIGljb252IHByb3RvIHR5cGUsIHdlIHNob3VsZCB1c2UgLVdlcnJvciB0byBhdm9pZCB0aGUKICAgICAgICMgc3VjY2VzcyBvZiBpY29udiBkZXRlY3Rpb24gd2l0aCBhIHdhcm5pZyB3aGljaCBzdWNjZXNzIGlzIGEgbWlzcwogICAgICAgIyBkZXRlY3Rpb24uIFNvIHRoaXMgbmVlZHMgZm9yIGFsbCBidWlsZCBtb2RlKGV2ZW4gaXQncyBhIHJlbGVhc2UgbW9kZSkuCiAgICAgICAjCiAgICAgICBTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIiR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IC1XZXJyb3IiKQotICAgIEVORElGICgpCi0gICAgSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIlhMIikKKyAgICBFTkRJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeR05VJCIgT1IKKyAgICAgICAgICAgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeQ2xhbmckIikKKyAgICBJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeWEwkIikKICAgICAgIFNFVChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30gLXFoYWx0PXcgLXFmbGFnPXc6dyIpCi0gICAgRU5ESUYgKCkKKyAgICBFTkRJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeWEwkIikKICAgICBJRiAoTVNWQykKICAgICAgICMgTk9URTogL1dYIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyBnY2MncyAtV2Vycm9yIG9wdGlvbi4KICAgICAgIFNFVChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30gL1dYIikKQEAgLTg5MCw3ICsxMTcwLDYgQEAKICAgVU5TRVQoTElCQ0hBUlNFVF9TVEFUSUMgQ0FDSEUpCiBFTkRJRihFTkFCTEVfSUNPTlYpCiAKLUlGKDApICMgQ01ha2UgZG9lcyBub3QgbmVlZCBYTUwgc3VwcG9ydCBpbiBsaWJhcmNoaXZlCiAjCiAjIEZpbmQgTGlieG1sMgogIwpAQCAtOTM3LDIzICsxMjE2LDEzNSBAQAogICAgIENNQUtFX1BPUF9DSEVDS19TVEFURSgpCSMgUmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcwogICBFTkRJRihFWFBBVF9GT1VORCkKIEVORElGKExJQlhNTDJfRk9VTkQpCi1NQVJLX0FTX0FEVkFOQ0VEKENMRUFSIExJQlhNTDJfSU5DTFVERV9ESVIpCi1NQVJLX0FTX0FEVkFOQ0VEKENMRUFSIExJQlhNTDJfTElCUkFSSUVTKQotRU5ESUYoKQorCisjCisjIFBPU0lYIFJlZ3VsYXIgRXhwcmVzc2lvbiBzdXBwb3J0CisjCitJRihQT1NJWF9SRUdFWF9MSUIgTUFUQ0hFUyAiXihBVVRPfExJQkN8TElCUkVHRVgpJCIpCisgICMKKyAgIyBJZiBQQ1JFUE9TSVggaXMgbm90IGZvdW5kIG9yIG5vdCByZXF1ZXN0ZWQsIHRyeSB1c2luZyByZWdleAorICAjIGZyb20gbGliYyBvciBsaWJyZWdleAorICAjCisgIEZJTkRfUEFUSChSRUdFWF9JTkNMVURFX0RJUiByZWdleC5oKQorICBJRihSRUdFWF9JTkNMVURFX0RJUikKKyAgICBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMocmVnY29tcCBIQVZFX1JFR0NPTVBfTElCQykKKyAgICAjCisgICAgIyBJZiBsaWJjIGRvZXMgbm90IHByb3ZpZGUgcmVnZXgsIGZpbmQgbGlicmVnZXguCisgICAgIworICAgIElGKE5PVCBIQVZFX1JFR0NPTVBfTElCQykKKyAgICAgIENNQUtFX1BVU0hfQ0hFQ0tfU1RBVEUoKQkjIFNhdmUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMKKyAgICAgIEZJTkRfTElCUkFSWShSRUdFWF9MSUJSQVJZIHJlZ2V4KQorICAgICAgSUYoUkVHRVhfTElCUkFSWSkKKyAgICAgICAgU0VUKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke1JFR0VYX0xJQlJBUll9KQorICAgICAgICBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMocmVnY29tcCBIQVZFX1JFR0NPTVBfTElCUkVHRVgpCisgICAgICAgIElGKEhBVkVfUkVHQ09NUF9MSUJSRUdFWCkKKyAgICAgICAgICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtSRUdFWF9MSUJSQVJZfSkKKyAgICAgICAgICAjCisgICAgICAgICAgIyBJZiByZWdleC5oIGlzIG5vdCBmb3VuZCwgcmV0cnkgbG9va2luZyBmb3IgcmVnZXguaCBhdAorICAgICAgICAgICMgUkVHRVhfSU5DTFVERV9ESVIKKyAgICAgICAgICAjCisgICAgICAgICAgSUYoTk9UIEhBVkVfUkVHRVhfSCkKKyAgICAgICAgICAgIFVOU0VUKEhBVkVfUkVHRVhfSCBDQUNIRSkKKyAgICAgICAgICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtSRUdFWF9JTkNMVURFX0RJUn0pCisgICAgICAgICAgICBTRVQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtSRUdFWF9JTkNMVURFX0RJUn0pCisgICAgICAgICAgICBMQV9DSEVDS19JTkNMVURFX0ZJTEUoInJlZ2V4LmgiIEhBVkVfUkVHRVhfSCkKKyAgICAgICAgICBFTkRJRihOT1QgSEFWRV9SRUdFWF9IKQorICAgICAgICAgICMgVGVzdCBpZiBhIG1hY3JvIGlzIG5lZWRlZCBmb3IgdGhlIGxpYnJhcnkuCisgICAgICAgICAgVFJZX01BQ1JPX0ZPUl9MSUJSQVJZKAorICAgICAgICAgICAgIiR7UkVHRVhfSU5DTFVERV9ESVJ9IiAiJHtSRUdFWF9MSUJSQVJZfSIKKyAgICAgICAgICAgIENPTVBJTEVTCisgICAgICAgICAgICAiI2luY2x1ZGUgPHN0ZGRlZi5oPlxuI2luY2x1ZGUgPHJlZ2V4Lmg+XG5pbnQgbWFpbigpIHtyZWdleF90IHI7cmV0dXJuIHJlZ2NvbXAoJnIsIFwiXCIsIDApO30iCisgICAgICAgICAgICAiVVNFX1JFR0VYX0RMTDtVU0VfUkVHRVhfU1RBVElDIikKKyAgICAgICAgICBJRihVU0VfUkVHRVhfRExMKQorICAgICAgICAgICAgQUREX0RFRklOSVRJT05TKC1EVVNFX1JFR0VYX0RMTCkKKyAgICAgICAgICBFTFNFSUYoVVNFX1JFR0VYX1NUQVRJQykKKyAgICAgICAgICAgIEFERF9ERUZJTklUSU9OUygtRFVTRV9SRUdFWF9TVEFUSUMpCisgICAgICAgICAgRU5ESUYoVVNFX1JFR0VYX0RMTCkKKyAgICAgICAgRU5ESUYoSEFWRV9SRUdDT01QX0xJQlJFR0VYKQorICAgICAgRU5ESUYoUkVHRVhfTElCUkFSWSkKKyAgICAgIENNQUtFX1BPUF9DSEVDS19TVEFURSgpCSMgUmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcworICAgIEVORElGKE5PVCBIQVZFX1JFR0NPTVBfTElCQykKKyAgRU5ESUYoUkVHRVhfSU5DTFVERV9ESVIpCisgIElGKEhBVkVfUkVHQ09NUF9MSUJDIE9SIEhBVkVfUkVHQ09NUF9MSUJSRUdFWCkKKyAgICBTRVQoRk9VTkRfUE9TSVhfUkVHRVhfTElCIDEpCisgIEVORElGKEhBVkVfUkVHQ09NUF9MSUJDIE9SIEhBVkVfUkVHQ09NUF9MSUJSRUdFWCkKK0VORElGKFBPU0lYX1JFR0VYX0xJQiBNQVRDSEVTICJeKEFVVE98TElCQ3xMSUJSRUdFWCkkIikKKworSUYoTk9UIEZPVU5EX1BPU0lYX1JFR0VYX0xJQiBBTkQgUE9TSVhfUkVHRVhfTElCIE1BVENIRVMgIl4oQVVUT3xMSUJQQ1JFUE9TSVgpJCIpCisgICMKKyAgIyBJZiByZXF1ZXN0ZWQsIHRyeSBmaW5kaW5nIGxpYnJhcnkgZm9yIFBDUkVQT1NJWAorICAjCisgIElGKEVOQUJMRV9MaWJHQ0MpCisgICAgRklORF9QQUNLQUdFKExpYkdDQykKKyAgRUxTRSgpCisgICAgU0VUKExJQkdDQ19GT1VORCBGQUxTRSkgIyBPdmVycmlkZSBjYWNoZWQgdmFsdWUKKyAgRU5ESUYoKQorICBJRihFTkFCTEVfUENSRVBPU0lYKQorICAgIEZJTkRfUEFDS0FHRShQQ1JFUE9TSVgpCisgIEVMU0UoKQorICAgIFNFVChQQ1JFUE9TSVhfRk9VTkQgRkFMU0UpICMgT3ZlcnJpZGUgY2FjaGVkIHZhbHVlCisgIEVORElGKCkKKyAgSUYoUENSRVBPU0lYX0ZPVU5EKQorICAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtQQ1JFX0lOQ0xVREVfRElSfSkKKyAgICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtQQ1JFUE9TSVhfTElCUkFSSUVTfSkKKyAgICAjIFRlc3QgaWYgYSBtYWNybyBpcyBuZWVkZWQgZm9yIHRoZSBsaWJyYXJ5LgorICAgIFRSWV9NQUNST19GT1JfTElCUkFSWSgKKyAgICAgICIke1BDUkVfSU5DTFVERV9ESVJ9IiAiJHtQQ1JFUE9TSVhfTElCUkFSSUVTfSIKKyAgICAgIENPTVBJTEVTCisgICAgICAiI2luY2x1ZGUgPHBjcmVwb3NpeC5oPlxuaW50IG1haW4oKSB7cmVnZXhfdCByO3JldHVybiByZWdjb21wKCZyLCBcIlwiLCAwKTt9IgorICAgICAgIldJVEhPVVRfUENSRV9TVEFUSUM7UENSRV9TVEFUSUMiKQorICAgIElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICAgIEFERF9ERUZJTklUSU9OUygtRFBDUkVfU1RBVElDKQorCUVMU0VJRihOT1QgV0lUSE9VVF9QQ1JFX1NUQVRJQyBBTkQgTk9UIFBDUkVfU1RBVElDIEFORCBQQ1JFX0ZPVU5EKQorCSAgIyBEZXRlcm1pbmUgaWYgcGNyZSBzdGF0aWMgbGlicmFyaWVzIGFyZSB0byBiZSB1c2VkLgorICAgICAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICR7UENSRV9MSUJSQVJJRVN9KQorICAgICAgU0VUKFRNUF9MSUJSQVJJRVMgJHtQQ1JFUE9TSVhfTElCUkFSSUVTfSAke1BDUkVfTElCUkFSSUVTfSkKKyAgICAgIE1FU1NBR0UoU1RBVFVTICJ0cnlpbmcgYWdhaW4gd2l0aCAtbHBjcmUgaW5jbHVkZWQiKQorICAgICAgVFJZX01BQ1JPX0ZPUl9MSUJSQVJZKAorICAgICAgICAiJHtQQ1JFX0lOQ0xVREVfRElSfSIgIiR7VE1QX0xJQlJBUklFU30iCisgICAgICAgIENPTVBJTEVTCisgICAgICAgICIjaW5jbHVkZSA8cGNyZXBvc2l4Lmg+XG5pbnQgbWFpbigpIHtyZWdleF90IHI7cmV0dXJuIHJlZ2NvbXAoJnIsIFwiXCIsIDApO30iCisgICAgICAgICJXSVRIT1VUX1BDUkVfU1RBVElDO1BDUkVfU1RBVElDIikKKyAgICAgIElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICAgICAgQUREX0RFRklOSVRJT05TKC1EUENSRV9TVEFUSUMpCisgICAgICBFTFNFSUYoTk9UIFdJVEhPVVRfUENSRV9TVEFUSUMgQU5EIE5PVCBQQ1JFX1NUQVRJQyBBTkQgTVNWQyBBTkQgTElCR0NDX0ZPVU5EKQorICAgICAgICAjIFdoZW4gZG9pbmcgYSBWaXN1YWwgU3R1ZGlvIGJ1aWxkIHVzaW5nIHBjcmUgc3RhdGljIGxpYnJhcmllcworICAgICAgICAjIGJ1aWx0IHVzaW5nIHRoZSBtaW5ndyB0b29sY2hhaW4sIC1sZ2NjIGlzIG5lZWRlZCB0byByZXNvbHZlCisgICAgICAgICMgX19fY2hrc3RrX21zLgorICAgICAgICBNRVNTQUdFKFNUQVRVUyAiVmlzdWFsIFN0dWRpbyBidWlsZCBkZXRlY3RlZCwgdHJ5aW5nIGFnYWluIHdpdGggLWxnY2MgaW5jbHVkZWQiKQorICAgICAgICBMSVNUKEFQUEVORCBBRERJVElPTkFMX0xJQlMgJHtMSUJHQ0NfTElCUkFSSUVTfSkKKyAgICAgICAgU0VUKFRNUF9MSUJSQVJJRVMgJHtQQ1JFUE9TSVhfTElCUkFSSUVTfSAke1BDUkVfTElCUkFSSUVTfSAke0xJQkdDQ19MSUJSQVJJRVN9KQorICAgICAgICAgIFRSWV9NQUNST19GT1JfTElCUkFSWSgKKyAgICAgICAgICAgICIke1BDUkVfSU5DTFVERV9ESVJ9IiAiJHtUTVBfTElCUkFSSUVTfSIKKyAgICAgICAgICAgIENPTVBJTEVTCisgICAgICAgICAgICAiI2luY2x1ZGUgPHBjcmVwb3NpeC5oPlxuaW50IG1haW4oKSB7cmVnZXhfdCByO3JldHVybiByZWdjb21wKCZyLCBcIlwiLCAwKTt9IgorICAgICAgICAgICAgIldJVEhPVVRfUENSRV9TVEFUSUM7UENSRV9TVEFUSUMiKQorICAgICAgICAgIElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICAgICAgICAgIEFERF9ERUZJTklUSU9OUygtRFBDUkVfU1RBVElDKQorICAgICAgICAgIEVORElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICAgIEVORElGKE5PVCBXSVRIT1VUX1BDUkVfU1RBVElDIEFORCBQQ1JFX1NUQVRJQykKKyAgICBFTkRJRihOT1QgV0lUSE9VVF9QQ1JFX1NUQVRJQyBBTkQgUENSRV9TVEFUSUMpCisgIEVORElGKFBDUkVQT1NJWF9GT1VORCkKKyAgTUFSS19BU19BRFZBTkNFRChDTEVBUiBQQ1JFX0lOQ0xVREVfRElSKQorICBNQVJLX0FTX0FEVkFOQ0VEKENMRUFSIFBDUkVQT1NJWF9MSUJSQVJJRVMpCisgIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgUENSRV9MSUJSQVJJRVMpCisgIE1BUktfQVNfQURWQU5DRUQoQ0xFQVIgTElCR0NDX0xJQlJBUklFUykKK0VORElGKE5PVCBGT1VORF9QT1NJWF9SRUdFWF9MSUIgQU5EIFBPU0lYX1JFR0VYX0xJQiBNQVRDSEVTICJeKEFVVE98TElCUENSRVBPU0lYKSQiKQogCiAjCiAjIENoZWNrIGZ1bmN0aW9ucwogIwogQ01BS0VfUFVTSF9DSEVDS19TVEFURSgpCSMgU2F2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhcmlhYmxlcwotSUYgKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIkdOVSIgT1IKLSAgICBDTUFLRV9DX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJDbGFuZyIpCitJRiAoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeR05VJCIgT1IKKyAgICBDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIl5DbGFuZyQiKQogICAjCiAgICMgRHVyaW5nIGNoZWNraW5nIGZ1bmN0aW9ucywgd2Ugc2hvdWxkIHVzZSAtZm5vLWJ1aWx0aW4gdG8gYXZvaWQgdGhlCiAgICMgZmFpbHVyZSBvZiBmdW5jdGlvbiBkZXRlY3Rpb24gd2hpY2ggZmFpbHVyZSBpcyBhbiBlcnJvciAiY29uZmxpY3RpbmcKICAgIyB0eXBlcyBmb3IgYnVpbHQtaW4gZnVuY3Rpb24iIGNhdXNlZCBieSB1c2luZyAtV2Vycm9yIG9wdGlvbi4KICAgIwogICBTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIiR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IC1mbm8tYnVpbHRpbiIpCi1FTkRJRiAoKQorRU5ESUYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiXkdOVSQiIE9SCisgICAgICAgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJeQ2xhbmckIikKIENIRUNLX1NZTUJPTF9FWElTVFMoX0NydFNldFJlcG9ydE1vZGUgImNydGRiZy5oIiBIQVZFX19DcnRTZXRSZXBvcnRNb2RlKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKGFyYzRyYW5kb21fYnVmIEhBVkVfQVJDNFJBTkRPTV9CVUYpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMoY2hmbGFncyBIQVZFX0NIRkxBR1MpCkBAIC0xMDE3LDYgKzE0MDgsNyBAQAogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHN5bWxpbmsgSEFWRV9TWU1MSU5LKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHRpbWVnbSBIQVZFX1RJTUVHTSkKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyh0enNldCBIQVZFX1RaU0VUKQorQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHVubGlua2F0IEhBVkVfVU5MSU5LQVQpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkModW5zZXRlbnYgSEFWRV9VTlNFVEVOVikKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyh1dGltZSBIQVZFX1VUSU1FKQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKHV0aW1lcyBIQVZFX1VUSU1FUykKQEAgLTEwMzAsNiArMTQyMiw3IEBACiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMoX2N0aW1lNjRfcyBIQVZFX19DVElNRTY0X1MpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMoX2ZzZWVraTY0IEhBVkVfX0ZTRUVLSTY0KQogQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKF9nZXRfdGltZXpvbmUgSEFWRV9fR0VUX1RJTUVaT05FKQorQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTX0dMSUJDKF9nbXRpbWU2NF9zIEhBVkVfX0dNVElNRTY0X1MpCiBDSEVDS19GVU5DVElPTl9FWElTVFNfR0xJQkMoX2xvY2FsdGltZTY0X3MgSEFWRV9fTE9DQUxUSU1FNjRfUykKIENIRUNLX0ZVTkNUSU9OX0VYSVNUU19HTElCQyhfbWtnbXRpbWU2NCBIQVZFX19NS0dNVElNRTY0KQogCkBAIC0xMDkzLDI3ICsxNDg2LDkgQEAKICMKICMgQ2hlY2sgZGVmaW5lcwogIwotU0VUKGhlYWRlcnMgImxpbWl0cy5oIikKLUlGKEhBVkVfU1RESU5UX0gpCi0gIExJU1QoQVBQRU5EIGhlYWRlcnMgInN0ZGludC5oIikKLUVORElGKEhBVkVfU1RESU5UX0gpCi1JRihIQVZFX0lOVFRZUEVTX0gpCi0gIExJU1QoQVBQRU5EIGhlYWRlcnMgImludHR5cGVzLmgiKQotRU5ESUYoSEFWRV9JTlRUWVBFU19IKQogQ0hFQ0tfU1lNQk9MX0VYSVNUUyhFRlRZUEUgICAgICAgICAgICJlcnJuby5oIiAgICBIQVZFX0VGVFlQRSkKIENIRUNLX1NZTUJPTF9FWElTVFMoRUlMU0VRICAgICAgICAgICAiZXJybm8uaCIgICAgSEFWRV9FSUxTRVEpCiBDSEVDS19TWU1CT0xfRVhJU1RTKERfTURfT1JERVIgICAgICAgImxhbmdpbmZvLmgiIEhBVkVfRF9NRF9PUkRFUikKLUNIRUNLX1NZTUJPTF9FWElTVFMoSU5UMzJfTUFYICAgICAgICAiJHtoZWFkZXJzfSIgSEFWRV9ERUNMX0lOVDMyX01BWCkKLUNIRUNLX1NZTUJPTF9FWElTVFMoSU5UMzJfTUlOICAgICAgICAiJHtoZWFkZXJzfSIgSEFWRV9ERUNMX0lOVDMyX01JTikKLUNIRUNLX1NZTUJPTF9FWElTVFMoSU5UNjRfTUFYICAgICAgICAiJHtoZWFkZXJzfSIgSEFWRV9ERUNMX0lOVDY0X01BWCkKLUNIRUNLX1NZTUJPTF9FWElTVFMoSU5UNjRfTUlOICAgICAgICAiJHtoZWFkZXJzfSIgSEFWRV9ERUNMX0lOVDY0X01JTikKLUNIRUNLX1NZTUJPTF9FWElTVFMoSU5UTUFYX01BWCAgICAgICAiJHtoZWFkZXJzfSIgSEFWRV9ERUNMX0lOVE1BWF9NQVgpCi1DSEVDS19TWU1CT0xfRVhJU1RTKElOVE1BWF9NSU4gICAgICAgIiR7aGVhZGVyc30iIEhBVkVfREVDTF9JTlRNQVhfTUlOKQotQ0hFQ0tfU1lNQk9MX0VYSVNUUyhVSU5UMzJfTUFYICAgICAgICIke2hlYWRlcnN9IiBIQVZFX0RFQ0xfVUlOVDMyX01BWCkKLUNIRUNLX1NZTUJPTF9FWElTVFMoVUlOVDY0X01BWCAgICAgICAiJHtoZWFkZXJzfSIgSEFWRV9ERUNMX1VJTlQ2NF9NQVgpCi1DSEVDS19TWU1CT0xfRVhJU1RTKFVJTlRNQVhfTUFYICAgICAgIiR7aGVhZGVyc30iIEhBVkVfREVDTF9VSU5UTUFYX01BWCkKLUNIRUNLX1NZTUJPTF9FWElTVFMoU0laRV9NQVggICAgICAgICAiJHtoZWFkZXJzfSIgSEFWRV9ERUNMX1NJWkVfTUFYKQotQ0hFQ0tfU1lNQk9MX0VYSVNUUyhTU0laRV9NQVggICAgICAgICJsaW1pdHMuaCIgICBIQVZFX0RFQ0xfU1NJWkVfTUFYKQogCiAjCiAjIENoZWNrIHN0cnVjdCBtZW1iZXJzCkBAIC0xMTYyLDMzICsxNTM3LDYgQEAKIENIRUNLX1NUUlVDVF9IQVNfTUVNQkVSKCJzdHJ1Y3QgdG0iIHRtX3NlYwogICAgICJzeXMvdHlwZXMuaDtzeXMvdGltZS5oO3RpbWUuaCIgVElNRV9XSVRIX1NZU19USU1FKQogCi0jCi0jIENoZWNrIGZvciBpbnRlZ2VyIHR5cGVzCi0jCi0jCi1DSEVDS19UWVBFX1NJWkUoInNob3J0IiBTSVpFX09GX1NIT1JUKQotQ0hFQ0tfVFlQRV9TSVpFKCJpbnQiIFNJWkVfT0ZfSU5UKQotQ0hFQ0tfVFlQRV9TSVpFKCJsb25nIiBTSVpFX09GX0xPTkcpCi1DSEVDS19UWVBFX1NJWkUoImxvbmcgbG9uZyIgICAgIFNJWkVfT0ZfTE9OR19MT05HKQotCi1DSEVDS19UWVBFX1NJWkUoInVuc2lnbmVkIHNob3J0IiBTSVpFX09GX1VOU0lHTkVEX1NIT1JUKQotQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCIgU0laRV9PRl9VTlNJR05FRCkKLUNIRUNLX1RZUEVfU0laRSgidW5zaWduZWQgbG9uZyIgU0laRV9PRl9VTlNJR05FRF9MT05HKQotQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCBsb25nIGxvbmciIFNJWkVfT0ZfVU5TSUdORURfTE9OR19MT05HKQotCi1DSEVDS19UWVBFX1NJWkUoIl9faW50NjQiIF9fSU5UNjQpCi1DSEVDS19UWVBFX1NJWkUoInVuc2lnbmVkIF9faW50NjQiIFVOU0lHTkVEX19fSU5UNjQpCi0KLUNIRUNLX1RZUEVfU0laRShpbnQxNl90IElOVDE2X1QpCi1DSEVDS19UWVBFX1NJWkUoaW50MzJfdCBJTlQzMl9UKQotQ0hFQ0tfVFlQRV9TSVpFKGludDY0X3QgSU5UNjRfVCkKLUNIRUNLX1RZUEVfU0laRShpbnRtYXhfdCBJTlRNQVhfVCkKLUNIRUNLX1RZUEVfU0laRSh1aW50OF90IFVJTlQ4X1QpCi1DSEVDS19UWVBFX1NJWkUodWludDE2X3QgVUlOVDE2X1QpCi1DSEVDS19UWVBFX1NJWkUodWludDMyX3QgVUlOVDMyX1QpCi1DSEVDS19UWVBFX1NJWkUodWludDY0X3QgVUlOVDY0X1QpCi1DSEVDS19UWVBFX1NJWkUodWludG1heF90IFVJTlRNQVhfVCkKLQogQ0hFQ0tfVFlQRV9TSVpFKGRldl90ICAgICAgIERFVl9UKQogSUYoTk9UIEhBVkVfREVWX1QpCiAgIElGKE1TVkMpCkBAIC0xMjY0LDI0ICsxNjEyLDYgQEAKICAgRU5ESUYoV0lOMzIpCiBFTkRJRihOT1QgSEFWRV9QSURfVCkKICMKLUNIRUNLX1RZUEVfU0laRShpbnRwdHJfdCAgIElOVFBUUl9UKQotSUYoTk9UIEhBVkVfSU5UUFRSX1QpCi0gIElGKCIke0NNQUtFX1NJWkVPRl9WT0lEX1B9IiBFUVVBTCA4KQotICAgIFNFVChpbnRwdHJfdCAiaW50NjRfdCIpCi0gIEVMU0UoKQotICAgIFNFVChpbnRwdHJfdCAiaW50MzJfdCIpCi0gIEVORElGKCkKLUVORElGKE5PVCBIQVZFX0lOVFBUUl9UKQotIwotQ0hFQ0tfVFlQRV9TSVpFKHVpbnRwdHJfdCAgIFVJTlRQVFJfVCkKLUlGKE5PVCBIQVZFX1VJTlRQVFJfVCkKLSAgSUYoIiR7Q01BS0VfU0laRU9GX1ZPSURfUH0iIEVRVUFMIDgpCi0gICAgU0VUKHVpbnRwdHJfdCAidWludDY0X3QiKQotICBFTFNFKCkKLSAgICBTRVQodWludHB0cl90ICJ1aW50MzJfdCIpCi0gIEVORElGKCkKLUVORElGKE5PVCBIQVZFX1VJTlRQVFJfVCkKLSMKIENIRUNLX1RZUEVfU0laRSh3Y2hhcl90ICAgICBTSVpFT0ZfV0NIQVJfVCkKIElGKEhBVkVfU0laRU9GX1dDSEFSX1QpCiAgIFNFVChIQVZFX1dDSEFSX1QgMSkKQEAgLTEyOTgsNiArMTYyOCwxMSBAQAogICBDSEVDS19MSUJSQVJZX0VYSVNUUyhhdHRyICJzZXR4YXR0ciIgIiIgSEFWRV9MSUJBVFRSKQogICBJRihIQVZFX0xJQkFUVFIpCiAgICAgU0VUKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAiYXR0ciIpCisgIEVMU0UoKQorICAgIENIRUNLX0xJQlJBUllfRVhJU1RTKGdudSAic2V0eGF0dHIiICIiIEhBVkVfTElCQVRUUl9HTlUpCisgICAgSUYoSEFWRV9MSUJBVFRSX0dOVSkKKyAgICAgIFNFVChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgImdudSIpCisgICAgRU5ESUYoKQogICBFTkRJRihIQVZFX0xJQkFUVFIpCiAgIENIRUNLX1NZTUJPTF9FWElTVFMoRVhUQVRUUl9OQU1FU1BBQ0VfVVNFUiAic3lzL3R5cGVzLmg7c3lzL2V4dGF0dHIuaCIgSEFWRV9ERUNMX0VYVEFUVFJfTkFNRVNQQUNFX1VTRVIpCiAgIENIRUNLX1NZTUJPTF9FWElTVFMoWEFUVFJfTk9GT0xMT1cgInN5cy94YXR0ci5oIiBIQVZFX0RFQ0xfWEFUVFJfTk9GT0xMT1cpCkBAIC0xNjIxLDYgKzE5NTYsNyBAQAogQ0hFQ0tfQ1JZUFRPKCJTSEEyNTY7U0hBMzg0O1NIQTUxMiIgTElCQzIpCiBDSEVDS19DUllQVE8oIlNIQTI1NjtTSEEzODQ7U0hBNTEyIiBMSUJDMykKIENIRUNLX0NSWVBUTygiTUQ1O1NIQTE7U0hBMjU2O1NIQTM4NDtTSEE1MTIiIExJQlNZU1RFTSkKK0NIRUNLX0NSWVBUTygiTUQ1O1JNRDE2MDtTSEExO1NIQTI1NjtTSEEzODQ7U0hBNTEyIiBNQkVEVExTKQogQ0hFQ0tfQ1JZUFRPKCJNRDU7Uk1EMTYwO1NIQTE7U0hBMjU2O1NIQTM4NDtTSEE1MTIiIE5FVFRMRSkKIENIRUNLX0NSWVBUTygiTUQ1O1JNRDE2MDtTSEExO1NIQTI1NjtTSEEzODQ7U0hBNTEyIiBPUEVOU1NMKQogCkBAIC0xNjM1LDYgKzE5NzEsMTEgQEAKIElOQ0xVREVfRElSRUNUT1JJRVMoQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSkKIEFERF9ERUZJTklUSU9OUygtREhBVkVfQ09ORklHX0gpCiAKK0lGKDApICMgQ01ha2UgZG9lcyBub3QgYnVpbGQgbGliYXJjaGl2ZSdzIHBhY2thZ2VzLgorIyBIYW5kbGUgZ2VuZXJhdGlvbiBvZiB0aGUgbGliYXJjaGl2ZS5wYyBmaWxlIGZvciBwa2ctY29uZmlnCitJTkNMVURFKENyZWF0ZVBrZ0NvbmZpZ0ZpbGUpCitFTkRJRigpCisKICMKICMgUmVnaXN0ZXIgaW5zdGFsbGF0aW9uIG9mIFBERiBkb2N1bWVudHMuCiAjCkBAIC0xNjYwLDExICsyMDAxLDIyIEBACiAgIEFERF9ERUZJTklUSU9OUygtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSkKIEVORElGKE1TVkMpCiAKK0lGKDApICMgQ01ha2UgZG9lcyBub3QgYnVpbGQgbGliYXJjaGl2ZSdzIHRlc3RzLgorSUYoRU5BQkxFX1RFU1QpCisgIEFERF9DVVNUT01fVEFSR0VUKHJ1bl9hbGxfdGVzdHMpCitFTkRJRihFTkFCTEVfVEVTVCkKK0VORElGKCkKKwogIyBXZSBuZWVkIENvcmVTZXJ2aWNlcyBvbiBNYWMgT1MuCiBJRihBUFBMRSkKICAgTElTVChBUFBFTkQgQURESVRJT05BTF9MSUJTICItZnJhbWV3b3JrIENvcmVTZXJ2aWNlcyIpCiBFTkRJRihBUFBMRSkKIAogYWRkX3N1YmRpcmVjdG9yeShsaWJhcmNoaXZlKQorSUYoMCkgIyBDTWFrZSBkb2VzIG5vdCBidWlsZCBsaWJhcmNoaXZlJ3MgY29tbWFuZC1saW5lIHRvb2xzLgorYWRkX3N1YmRpcmVjdG9yeShjYXQpCithZGRfc3ViZGlyZWN0b3J5KHRhcikKK2FkZF9zdWJkaXJlY3RvcnkoY3BpbykKK0VORElGKCkKIAogaW5zdGFsbChGSUxFUyBDT1BZSU5HIERFU1RJTkFUSU9OICR7Q01BS0VfRE9DX0RJUn0vY21saWJhcmNoaXZlKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DT1BZSU5HIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DT1BZSU5HCmluZGV4IDkzOTUyYjcuLjE0YmJlZmEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvQ09QWUlORworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NPUFlJTkcKQEAgLTIzLDYgKzIzLDEzIEBACiAqIFRoZSBmb2xsb3dpbmcgc291cmNlIGZpbGVzIGFyZSBpbiB0aGUgcHVibGljIGRvbWFpbjoKICAgIGxpYmFyY2hpdmUvYXJjaGl2ZV9nZXRkYXRlLmMKIAorKiBUaGUgZm9sbG93aW5nIHNvdXJjZSBmaWxlcyBhcmUgdHJpcGxlLWxpY2Vuc2VkIHdpdGggdGhlIGFiaWxpdHkgdG8gY2hvb3NlCisgIGZyb20gQ0MwIDEuMCBVbml2ZXJzYWwsIE9wZW5TU0wgb3IgQXBhY2hlIDIuMCBsaWNlbnNlczoKKyAgIGxpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTIuaAorICAgbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMl9pbXBsLmgKKyAgIGxpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJzX3JlZi5jCisgICBsaWJhcmNoaXZlL2FyY2hpdmVfYmxha2Uyc3BfcmVmLmMKKwogKiBUaGUgYnVpbGQgZmlsZXMtLS1pbmNsdWRpbmcgTWFrZWZpbGVzLCBjb25maWd1cmUgc2NyaXB0cywKICAgYW5kIGF1eGlsaWFyeSBzY3JpcHRzIHVzZWQgYXMgcGFydCBvZiB0aGUgY29tcGlsZSBwcm9jZXNzLS0taGF2ZQogICB3aWRlbHkgdmFyeWluZyBsaWNlbnNpbmcgdGVybXMuICBQbGVhc2UgY2hlY2sgaW5kaXZpZHVhbCBmaWxlcyBiZWZvcmUKQEAgLTM0LDcgKzQxLDcgQEAKIHNlZW1zIHRvIGJlIGFuIHVuYXZvaWRhYmxlIG1lc3MuCiAKIAotQ29weXJpZ2h0IChjKSAyMDAzLTIwMDkgPGF1dGhvcihzKT4KK0NvcHlyaWdodCAoYykgMjAwMy0yMDE4IDxhdXRob3Iocyk+CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvY21ha2UvRmluZE1iZWRUTFMuY21ha2UgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL2NtYWtlL0ZpbmRNYmVkVExTLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MTYzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL2NtYWtlL0ZpbmRNYmVkVExTLmNtYWtlCkBAIC0wLDAgKzEsMTMgQEAKK2ZpbmRfcGF0aChNQkVEVExTX0lOQ0xVREVfRElSUyBtYmVkdGxzL3NzbC5oKQorCitmaW5kX2xpYnJhcnkoTUJFRFRMU19MSUJSQVJZIG1iZWR0bHMpCitmaW5kX2xpYnJhcnkoTUJFRFg1MDlfTElCUkFSWSBtYmVkeDUwOSkKK2ZpbmRfbGlicmFyeShNQkVEQ1JZUFRPX0xJQlJBUlkgbWJlZGNyeXB0bykKKworc2V0KE1CRURUTFNfTElCUkFSSUVTICIke01CRURUTFNfTElCUkFSWX0iICIke01CRURYNTA5X0xJQlJBUll9IiAiJHtNQkVEQ1JZUFRPX0xJQlJBUll9IikKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhNQkVEVExTIERFRkFVTFRfTVNHCisgICAgTUJFRFRMU19JTkNMVURFX0RJUlMgTUJFRFRMU19MSUJSQVJZIE1CRURYNTA5X0xJQlJBUlkgTUJFRENSWVBUT19MSUJSQVJZKQorCittYXJrX2FzX2FkdmFuY2VkKE1CRURUTFNfSU5DTFVERV9ESVJTIE1CRURUTFNfTElCUkFSWSBNQkVEWDUwOV9MSUJSQVJZIE1CRURDUllQVE9fTElCUkFSWSkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvY21ha2UvY29uZmlnLmguaW4gYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL2NtYWtlL2NvbmZpZy5oLmluCmluZGV4IDE4NTFkODEuLmYzODYwMWYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvY21ha2UvY29uZmlnLmguaW4KKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC9jbWFrZS9jb25maWcuaC5pbgpAQCAtNywxNzggKzcsNiBAQAogICogRW5zdXJlIHdlIGhhdmUgQzk5LXN0eWxlIGludDY0X3QsIGV0YywgYWxsIGRlZmluZWQuCiAgKi8KIAotLyogRmlyc3QsIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgc3lzdGVtIGhhcyBhbHJlYWR5IGRlZmluZWQgdGhlbS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0lOVDE2X1QKLSNjbWFrZWRlZmluZSBIQVZFX0lOVDMyX1QKLSNjbWFrZWRlZmluZSBIQVZFX0lOVDY0X1QKLSNjbWFrZWRlZmluZSBIQVZFX0lOVE1BWF9UCi0KLSNjbWFrZWRlZmluZSBIQVZFX1VJTlQ4X1QKLSNjbWFrZWRlZmluZSBIQVZFX1VJTlQxNl9UCi0jY21ha2VkZWZpbmUgSEFWRV9VSU5UMzJfVAotI2NtYWtlZGVmaW5lIEhBVkVfVUlOVDY0X1QKLSNjbWFrZWRlZmluZSBIQVZFX1VJTlRNQVhfVAotCi0vKiBXZSBtaWdodCBoYXZlIHRoZSB0eXBlcyB3ZSB3YW50IHVuZGVyIG90aGVyIHNwZWxsaW5ncy4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX19fSU5UNjQKLSNjbWFrZWRlZmluZSBIQVZFX1VfSU5UNjRfVAotI2NtYWtlZGVmaW5lIEhBVkVfVU5TSUdORURfX19JTlQ2NAotCi0vKiBUaGUgc2l6ZXMgb2YgdmFyaW91cyBzdGFuZGFyZCBpbnRlZ2VyIHR5cGVzLiAqLwotQFNJWkVfT0ZfU0hPUlRfQ09ERUAKLUBTSVpFX09GX0lOVF9DT0RFQAotQFNJWkVfT0ZfTE9OR19DT0RFQAotQFNJWkVfT0ZfTE9OR19MT05HX0NPREVACi1AU0laRV9PRl9VTlNJR05FRF9TSE9SVF9DT0RFQAotQFNJWkVfT0ZfVU5TSUdORURfQ09ERUAKLUBTSVpFX09GX1VOU0lHTkVEX0xPTkdfQ09ERUAKLUBTSVpFX09GX1VOU0lHTkVEX0xPTkdfTE9OR19DT0RFQAotCi0vKgotICogSWYgd2UgbGFjayBpbnQ2NF90LCBkZWZpbmUgaXQgdG8gdGhlIGZpcnN0IG9mIF9faW50NjQsIGludCwgbG9uZywgYW5kIGxvbmcgbG9uZwotICogdGhhdCBleGlzdHMgYW5kIGlzIHRoZSByaWdodCBzaXplLgotICovCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQ2NF9UKSAmJiBkZWZpbmVkKEhBVkVfX19JTlQ2NCkKLXR5cGVkZWYgX19pbnQ2NCBpbnQ2NF90OwotI2RlZmluZSBIQVZFX0lOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQ2NF9UKSAmJiBTSVpFX09GX0lOVCA9PSA4Ci10eXBlZGVmIGludCBpbnQ2NF90OwotI2RlZmluZSBIQVZFX0lOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQ2NF9UKSAmJiBTSVpFX09GX0xPTkcgPT0gOAotdHlwZWRlZiBsb25nIGludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfSU5UNjRfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDY0X1QpICYmIFNJWkVfT0ZfTE9OR19MT05HID09IDgKLXR5cGVkZWYgbG9uZyBsb25nIGludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfSU5UNjRfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDY0X1QpCi0jZXJyb3IgTm8gNjQtYml0IGludGVnZXIgdHlwZSB3YXMgZm91bmQuCi0jZW5kaWYKLQotLyoKLSAqIFNpbWlsYXJseSBmb3IgaW50MzJfdAotICovCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQzMl9UKSAmJiBTSVpFX09GX0lOVCA9PSA0Ci10eXBlZGVmIGludCBpbnQzMl90OwotI2RlZmluZSBIQVZFX0lOVDMyX1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQzMl9UKSAmJiBTSVpFX09GX0xPTkcgPT0gNAotdHlwZWRlZiBsb25nIGludDMyX3Q7Ci0jZGVmaW5lIEhBVkVfSU5UMzJfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDMyX1QpCi0jZXJyb3IgTm8gMzItYml0IGludGVnZXIgdHlwZSB3YXMgZm91bmQuCi0jZW5kaWYKLQotLyoKLSAqIFNpbWlsYXJseSBmb3IgaW50MTZfdAotICovCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQxNl9UKSAmJiBTSVpFX09GX0lOVCA9PSAyCi10eXBlZGVmIGludCBpbnQxNl90OwotI2RlZmluZSBIQVZFX0lOVDE2X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQxNl9UKSAmJiBTSVpFX09GX1NIT1JUID09IDIKLXR5cGVkZWYgc2hvcnQgaW50MTZfdDsKLSNkZWZpbmUgSEFWRV9JTlQxNl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UMTZfVCkKLSNlcnJvciBObyAxNi1iaXQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KLSNlbmRpZgotCi0vKgotICogU2ltaWxhcmx5IGZvciB1aW50NjRfdAotICovCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UNjRfVCkgJiYgZGVmaW5lZChIQVZFX1VOU0lHTkVEX19fSU5UNjQpCi10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UNjRfVCkgJiYgU0laRV9PRl9VTlNJR05FRCA9PSA4Ci10eXBlZGVmIHVuc2lnbmVkIHVpbnQ2NF90OwotI2RlZmluZSBIQVZFX1VJTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpICYmIFNJWkVfT0ZfVU5TSUdORURfTE9ORyA9PSA4Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UNjRfVCkgJiYgU0laRV9PRl9VTlNJR05FRF9MT05HX0xPTkcgPT0gOAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UNjRfVCkKLSNlcnJvciBObyA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KLSNlbmRpZgotCi0KLS8qCi0gKiBTaW1pbGFybHkgZm9yIHVpbnQzMl90Ci0gKi8KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQzMl9UKSAmJiBTSVpFX09GX1VOU0lHTkVEID09IDQKLXR5cGVkZWYgdW5zaWduZWQgdWludDMyX3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDMyX1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMzJfVCkgJiYgU0laRV9PRl9VTlNJR05FRF9MT05HID09IDQKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50MzJfdDsKLSNkZWZpbmUgSEFWRV9VSU5UMzJfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQzMl9UKQotI2Vycm9yIE5vIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2FzIGZvdW5kLgotI2VuZGlmCi0KLS8qCi0gKiBTaW1pbGFybHkgZm9yIHVpbnQxNl90Ci0gKi8KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQxNl9UKSAmJiBTSVpFX09GX1VOU0lHTkVEID09IDIKLXR5cGVkZWYgdW5zaWduZWQgdWludDE2X3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDE2X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMTZfVCkgJiYgU0laRV9PRl9VTlNJR05FRF9TSE9SVCA9PSAyCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90OwotI2RlZmluZSBIQVZFX1VJTlQxNl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDE2X1QpCi0jZXJyb3IgTm8gMTYtYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZSB3YXMgZm91bmQuCi0jZW5kaWYKLQotLyoKLSAqIFNpbWlsYXJseSBmb3IgdWludDhfdAotICovCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UOF9UKQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDhfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQxNl9UKQotI2Vycm9yIE5vIDgtYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZSB3YXMgZm91bmQuCi0jZW5kaWYKLQotLyogRGVmaW5lIGludG1heF90IGFuZCB1aW50bWF4X3QgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgZGVmaW5lZC4gKi8KLSNpZiAhZGVmaW5lZChIQVZFX0lOVE1BWF9UKQotdHlwZWRlZiBpbnQ2NF90IGludG1heF90OwotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlRNQVhfVCkKLXR5cGVkZWYgdWludDY0X3QgdWludG1heF90OwotI2VuZGlmCi0KIC8qIERlZmluZSBaTElCX1dJTkFQSSBpZiB6bGliIHdhcyBidWlsdCBvbiBWaXN1YWwgU3R1ZGlvLiAqLwogI2NtYWtlZGVmaW5lIFpMSUJfV0lOQVBJIDEKIApAQCAtNDI2LDU4ICsyNTQsMTQgQEAKICAgIGRvbid0LiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9BQ0xfVVNFUiAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgSU5UMzJfTUFYJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0RFQ0xfSU5UMzJfTUFYIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBJTlQzMl9NSU4nLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9JTlQzMl9NSU4gMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYElOVDY0X01BWCcsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jY21ha2VkZWZpbmUgSEFWRV9ERUNMX0lOVDY0X01BWCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgSU5UNjRfTUlOJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0RFQ0xfSU5UNjRfTUlOIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBJTlRNQVhfTUFYJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0RFQ0xfSU5UTUFYX01BWCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgSU5UTUFYX01JTicsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jY21ha2VkZWZpbmUgSEFWRV9ERUNMX0lOVE1BWF9NSU4gMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFNFVEFDTCcsIGFuZCB0byAwIGlmIHlvdSBkb24ndC4KICAgICovCiAjY21ha2VkZWZpbmUgSEFWRV9ERUNMX1NFVEFDTCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgU0laRV9NQVgnLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9TSVpFX01BWCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgU1NJWkVfTUFYJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0RFQ0xfU1NJWkVfTUFYIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJlcnJvcl9yJywgYW5kIHRvIDAgaWYgeW91CiAgICBkb24ndC4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0RFQ0xfU1RSRVJST1JfUiAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgVUlOVDMyX01BWCcsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jY21ha2VkZWZpbmUgSEFWRV9ERUNMX1VJTlQzMl9NQVggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFVJTlQ2NF9NQVgnLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfREVDTF9VSU5UNjRfTUFYIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBVSU5UTUFYX01BWCcsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jY21ha2VkZWZpbmUgSEFWRV9ERUNMX1VJTlRNQVhfTUFYIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBYQVRUUl9OT0ZPTExPVycsIGFuZCB0byAwIGlmCiAgICB5b3UgZG9uJ3QuICovCiAjY21ha2VkZWZpbmUgSEFWRV9ERUNMX1hBVFRSX05PRk9MTE9XIDEKQEAgLTY0Nyw5ICs0MzEsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpY29udi5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0lDT05WX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9JT19IIDEKIApAQCAtNjgzLDYgKzQ2NCwxMiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiejInIGxpYnJhcnkgKC1sYnoyKS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJQkJaMiAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYjInIGxpYnJhcnkgKC1sYjIpLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTElCQjIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJsYWtlMi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0JMQUtFMl9IIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaGFyc2V0JyBsaWJyYXJ5ICgtbGNoYXJzZXQpLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfTElCQ0hBUlNFVCAxCiAKQEAgLTcwNyw2ICs0OTQsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsem8yJyBsaWJyYXJ5ICgtbGx6bzIpLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfTElCTFpPMiAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWJlZGNyeXB0bycgbGlicmFyeSAoLWxtYmVkY3J5cHRvKS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0xJQk1CRURDUllQVE8gMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG5ldHRsZScgbGlicmFyeSAoLWxuZXR0bGUpLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfTElCTkVUVExFIDEKIApAQCAtOTQ2LDkgKzczNiw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGFyZy5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1NUREFSR19IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9TVERJTlRfSCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfU1RETElCX0ggMQogCkBAIC0xMTExLDYgKzg5OCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1VOSVNURF9IIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmxpbmthdCcgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9VTkxJTktBVCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5zZXRlbnYnIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQogCkBAIC0xMjA0LDYgKzk5NCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9nZXRfdGltZXpvbmUnIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfX0dFVF9USU1FWk9ORSAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2dtdGltZTY0X3MnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfX0dNVElNRTY0X1MgMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sb2NhbHRpbWU2NF9zJyBmdW5jdGlvbi4gKi8KICNjbWFrZWRlZmluZSBIQVZFX19MT0NBTFRJTUU2NF9TIDEKIApAQCAtMTMyMiw4ICsxMTE1LDQ1IEBACiAvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gKi8KICNjbWFrZWRlZmluZSB1aWRfdCAke3VpZF90fQogCi0vKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCi0jY21ha2VkZWZpbmUgaW50cHRyX3QgJHtpbnRwdHJfdH0KKyNpbmNsdWRlIDxjbTNwL2t3aW1sL2ludC5oPgogCi0vKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCi0jY21ha2VkZWZpbmUgdWludHB0cl90ICR7dWludHB0cl90fQorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9JTlQ2NF9UCit0eXBlZGVmIEtXSU1MX0lOVF9pbnQ2NF90IGludDY0X3Q7CisjZW5kaWYKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfSU5UMzJfVAordHlwZWRlZiBLV0lNTF9JTlRfaW50MzJfdCBpbnQzMl90OworI2VuZGlmCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX0lOVDE2X1QKK3R5cGVkZWYgS1dJTUxfSU5UX2ludDE2X3QgaW50MTZfdDsKKyNlbmRpZgorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9JTlQ4X1QKK3R5cGVkZWYgS1dJTUxfSU5UX2ludDhfdCBpbnQ4X3Q7CisjZW5kaWYKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfSU5UUFRSX1QKK3R5cGVkZWYgS1dJTUxfSU5UX2ludHB0cl90IGludHB0cl90OworI2VuZGlmCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmIEtXSU1MX0lOVF91aW50NjRfdCB1aW50NjRfdDsKKyNlbmRpZgorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9VSU5UMzJfVAordHlwZWRlZiBLV0lNTF9JTlRfdWludDMyX3QgdWludDMyX3Q7CisjZW5kaWYKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfVUlOVDE2X1QKK3R5cGVkZWYgS1dJTUxfSU5UX3VpbnQxNl90IHVpbnQxNl90OworI2VuZGlmCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX1VJTlQ4X1QKK3R5cGVkZWYgS1dJTUxfSU5UX3VpbnQ4X3QgdWludDhfdDsKKyNlbmRpZgorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9VSU5UUFRSX1QKK3R5cGVkZWYgS1dJTUxfSU5UX3VpbnRwdHJfdCB1aW50cHRyX3Q7CisjZW5kaWYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjaWZkZWYgS1dJTUxfSU5UX0hBVkVfU1RESU5UX0gKKyMgZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjaWZkZWYgS1dJTUxfSU5UX0hBVkVfSU5UVFlQRVNfSAorIyBkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC92ZXJzaW9uIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9idWlsZC92ZXJzaW9uCmluZGV4IDI0MjdlYWIuLjc4YmUzYWIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvYnVpbGQvdmVyc2lvbgorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2J1aWxkL3ZlcnNpb24KQEAgLTEgKzEgQEAKLTMwMDMwMDMKKzMwMDQwMDIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dAppbmRleCBlMzhkNjY0Li44OTFhMTQwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0CkBAIC01MSw2ICs1MSw4IEBACiAgIGFyY2hpdmVfcGxhdGZvcm1fYWNsLmgKICAgYXJjaGl2ZV9wbGF0Zm9ybV94YXR0ci5oCiAgIGFyY2hpdmVfcHBtZF9wcml2YXRlLmgKKyAgYXJjaGl2ZV9wcG1kOC5jCisgIGFyY2hpdmVfcHBtZDhfcHJpdmF0ZS5oCiAgIGFyY2hpdmVfcHBtZDcuYwogICBhcmNoaXZlX3BwbWQ3X3ByaXZhdGUuaAogICBhcmNoaXZlX3ByaXZhdGUuaApAQCAtMTAwLDYgKzEwMiw3IEBACiAgIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9saGEuYwogICBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbXRyZWUuYwogICBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyLmMKKyAgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcjUuYwogICBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmF3LmMKICAgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Rhci5jCiAgIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF93YXJjLmMKQEAgLTE0Nyw2ICsxNTAsNyBAQAogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfaXNvOTY2MC5jCiAgIGFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9tdHJlZS5jCiAgIGFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wYXguYworICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oCiAgIGFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9yYXcuYwogICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfc2hhci5jCiAgIGFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF91c3Rhci5jCkBAIC0xNjcsNiArMTcxLDcgQEAKICAgYXJjaGl2ZV9lbnRyeS4zCiAgIGFyY2hpdmVfZW50cnlfYWNsLjMKICAgYXJjaGl2ZV9lbnRyeV9saW5raWZ5LjMKKyAgYXJjaGl2ZV9lbnRyeV9taXNjLjMKICAgYXJjaGl2ZV9lbnRyeV9wYXRocy4zCiAgIGFyY2hpdmVfZW50cnlfcGVybXMuMwogICBhcmNoaXZlX2VudHJ5X3N0YXQuMwpAQCAtMjE1LDYgKzIyMCwxMSBAQAogICBMSVNUKEFQUEVORCBsaWJhcmNoaXZlX1NPVVJDRVMgZmlsdGVyX2Zvcmtfd2luZG93cy5jKQogRU5ESUYoV0lOMzIgQU5EIE5PVCBDWUdXSU4pCiAKK0lGKEFSQ0hJVkVfQkxBS0UyKQorICBMSVNUKEFQUEVORCBsaWJhcmNoaXZlX1NPVVJDRVMgYXJjaGl2ZV9ibGFrZTJzcF9yZWYuYykKKyAgTElTVChBUFBFTkQgbGliYXJjaGl2ZV9TT1VSQ0VTIGFyY2hpdmVfYmxha2Uyc19yZWYuYykKK0VORElGKEFSQ0hJVkVfQkxBS0UyKQorCiBJRihBUkNISVZFX0FDTF9EQVJXSU4pCiAgIExJU1QoQVBQRU5EIGxpYmFyY2hpdmVfU09VUkNFUyBhcmNoaXZlX2Rpc2tfYWNsX2Rhcndpbi5jKQogRUxTRUlGKEFSQ0hJVkVfQUNMX0ZSRUVCU0QpCkBAIC0yMjgsMyArMjM4LDMzIEBACiAjIENNYWtlIG5lZWRzIGp1c3Qgb25lIHN0YXRpYyAiY21saWJhcmNoaXZlIiBsaWJyYXJ5LgogQUREX0xJQlJBUlkoY21saWJhcmNoaXZlIFNUQVRJQyAke2xpYmFyY2hpdmVfU09VUkNFU30gJHtpbmNsdWRlX0hFQURFUlN9KQogVEFSR0VUX0xJTktfTElCUkFSSUVTKGNtbGliYXJjaGl2ZSAke0FERElUSU9OQUxfTElCU30pCisKK0lGKDApICMgQ01ha2UgZG9lcyBub3QgYnVpbGQgbGliYXJjaGl2ZSdzIGZ1bGwgcGFja2FnZS4KKyMgTGliYXJjaGl2ZSBpcyBhIHNoYXJlZCBsaWJyYXJ5CitBRERfTElCUkFSWShhcmNoaXZlIFNIQVJFRCAke2xpYmFyY2hpdmVfU09VUkNFU30gJHtpbmNsdWRlX0hFQURFUlN9KQorVEFSR0VUX0lOQ0xVREVfRElSRUNUT1JJRVMoYXJjaGl2ZSBQVUJMSUMgLikKK1RBUkdFVF9MSU5LX0xJQlJBUklFUyhhcmNoaXZlICR7QURESVRJT05BTF9MSUJTfSkKK1NFVF9UQVJHRVRfUFJPUEVSVElFUyhhcmNoaXZlIFBST1BFUlRJRVMgU09WRVJTSU9OICR7U09WRVJTSU9OfSkKKworIyBhcmNoaXZlX3N0YXRpYyBpcyBhIHN0YXRpYyBsaWJyYXJ5CitBRERfTElCUkFSWShhcmNoaXZlX3N0YXRpYyBTVEFUSUMgJHtsaWJhcmNoaXZlX1NPVVJDRVN9ICR7aW5jbHVkZV9IRUFERVJTfSkKK1RBUkdFVF9MSU5LX0xJQlJBUklFUyhhcmNoaXZlX3N0YXRpYyAke0FERElUSU9OQUxfTElCU30pCitTRVRfVEFSR0VUX1BST1BFUlRJRVMoYXJjaGl2ZV9zdGF0aWMgUFJPUEVSVElFUyBDT01QSUxFX0RFRklOSVRJT05TCisgIExJQkFSQ0hJVkVfU1RBVElDKQorIyBPbiBQb3NpeCBzeXN0ZW1zLCBsaWJhcmNoaXZlLnNvIGFuZCBsaWJhcmNoaXZlLmEgY2FuIGNvLWV4aXN0LgorSUYoTk9UIFdJTjMyIE9SIENZR1dJTikKKyAgU0VUX1RBUkdFVF9QUk9QRVJUSUVTKGFyY2hpdmVfc3RhdGljIFBST1BFUlRJRVMgT1VUUFVUX05BTUUgYXJjaGl2ZSkKK0VORElGKE5PVCBXSU4zMiBPUiBDWUdXSU4pCisKK0lGKEVOQUJMRV9JTlNUQUxMKQorICAjIEhvdyB0byBpbnN0YWxsIHRoZSBsaWJyYXJpZXMKKyAgSU5TVEFMTChUQVJHRVRTIGFyY2hpdmUgYXJjaGl2ZV9zdGF0aWMKKyAgICAgICAgICBSVU5USU1FIERFU1RJTkFUSU9OIGJpbgorICAgICAgICAgIExJQlJBUlkgREVTVElOQVRJT04gbGliCisgICAgICAgICAgQVJDSElWRSBERVNUSU5BVElPTiBsaWIpCisgIElOU1RBTExfTUFOKCR7bGliYXJjaGl2ZV9NQU5TfSkKKyAgSU5TVEFMTChGSUxFUyAke2luY2x1ZGVfSEVBREVSU30gREVTVElOQVRJT04gaW5jbHVkZSkKK0VORElGKCkKKworYWRkX3N1YmRpcmVjdG9yeSh0ZXN0KQorRU5ESUYoKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlLmgKaW5kZXggZjNlYmJmZS4uNTc0ZTA4NyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCkBAIC0zNiw3ICszNiw3IEBACiAgKiBhc3NlcnQgdGhhdCBBUkNISVZFX1ZFUlNJT05fTlVNQkVSID49IDIwMTIxMDguCiAgKi8KIC8qIE5vdGU6IENvbXBpbGVyIHdpbGwgY29tcGxhaW4gaWYgdGhpcyBkb2VzIG5vdCBtYXRjaCBhcmNoaXZlX2VudHJ5LmghICovCi0jZGVmaW5lCUFSQ0hJVkVfVkVSU0lPTl9OVU1CRVIgMzAwMzAwMworI2RlZmluZQlBUkNISVZFX1ZFUlNJT05fTlVNQkVSIDMwMDQwMDIKIAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+ICAvKiBmb3Igd2NoYXJfdCAqLwpAQCAtNTIsNyArNTIsNyBAQAogICovCiAjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIF9fQk9STEFORENfXyA+PSAweDU2MAogIyBpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbGlmICFkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19JTlRFUklYKSAmJiAhZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFkZWZpbmVkKF9TQ09fRFMpICYmICFkZWZpbmVkKF9fb3NmX18pCisjZWxpZiAhZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fSU5URVJJWCkgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChfU0NPX0RTKSAmJiAhZGVmaW5lZChfX29zZl9fKSAmJiAhZGVmaW5lZChfX0NMQU5HX0lOVFRZUEVTX0gpCiAjIGluY2x1ZGUgPGludHR5cGVzLmg+CiAjZW5kaWYKIApAQCAtMTUyLDcgKzE1Miw3IEBACiAvKgogICogVGV4dHVhbCBuYW1lL3ZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHVzZWZ1bCBmb3IgdmVyc2lvbiBkaXNwbGF5cy4KICAqLwotI2RlZmluZQlBUkNISVZFX1ZFUlNJT05fT05MWV9TVFJJTkcgIjMuMy4zIgorI2RlZmluZQlBUkNISVZFX1ZFUlNJT05fT05MWV9TVFJJTkcgIjMuNC4yIgogI2RlZmluZQlBUkNISVZFX1ZFUlNJT05fU1RSSU5HICJsaWJhcmNoaXZlICIgQVJDSElWRV9WRVJTSU9OX09OTFlfU1RSSU5HCiBfX0xBX0RFQ0wgY29uc3QgY2hhciAqCWFyY2hpdmVfdmVyc2lvbl9zdHJpbmcodm9pZCk7CiAKQEAgLTMzNyw2ICszMzcsNyBAQAogI2RlZmluZQlBUkNISVZFX0ZPUk1BVF9SQVIJCQkweEQwMDAwCiAjZGVmaW5lCUFSQ0hJVkVfRk9STUFUXzdaSVAJCQkweEUwMDAwCiAjZGVmaW5lCUFSQ0hJVkVfRk9STUFUX1dBUkMJCQkweEYwMDAwCisjZGVmaW5lCUFSQ0hJVkVfRk9STUFUX1JBUl9WNQkJCTB4MTAwMDAwCiAKIC8qCiAgKiBDb2RlcyByZXR1cm5lZCBieSBhcmNoaXZlX3JlYWRfZm9ybWF0X2NhcGFiaWxpdGllcygpLgpAQCAtNDQ2LDYgKzQ0Nyw3IEBACiBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9saGEoc3RydWN0IGFyY2hpdmUgKik7CiBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9tdHJlZShzdHJ1Y3QgYXJjaGl2ZSAqKTsKIF9fTEFfREVDTCBpbnQgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcihzdHJ1Y3QgYXJjaGl2ZSAqKTsKK19fTEFfREVDTCBpbnQgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcjUoc3RydWN0IGFyY2hpdmUgKik7CiBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXcoc3RydWN0IGFyY2hpdmUgKik7CiBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIoc3RydWN0IGFyY2hpdmUgKik7CiBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF93YXJjKHN0cnVjdCBhcmNoaXZlICopOwpAQCAtNjg4LDYgKzY5MCw4IEBACiAjZGVmaW5lIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTICgweDEwMDAwKQogLyogRGVmYXVsdDogRG8gbm90IGNsZWFyIG5vLWNoYW5nZSBmbGFncyB3aGVuIHVubGlua2luZyBvYmplY3QgKi8KICNkZWZpbmUJQVJDSElWRV9FWFRSQUNUX0NMRUFSX05PQ0hBTkdFX0ZGTEFHUwkoMHgyMDAwMCkKKy8qIERlZmF1bHQ6IERvIG5vdCBleHRyYWN0IGF0b21pY2FsbHkgKHVzaW5nIHJlbmFtZSkgKi8KKyNkZWZpbmUJQVJDSElWRV9FWFRSQUNUX1NBRkVfV1JJVEVTCQkoMHg0MDAwMCkKIAogX19MQV9ERUNMIGludCBhcmNoaXZlX3JlYWRfZXh0cmFjdChzdHJ1Y3QgYXJjaGl2ZSAqLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLAogCQkgICAgIGludCBmbGFncyk7CkBAIC0xMDkwLDYgKzEwOTQsOCBAQAogICovCiBfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfcGF0aF9leGNsdWRlZChzdHJ1Y3QgYXJjaGl2ZSAqLAogCQkgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKik7CisvKiBDb250cm9sIHJlY3Vyc2l2ZSBpbmNsdXNpb24gb2YgZGlyZWN0b3J5IGNvbnRlbnQgd2hlbiBkaXJlY3RvcnkgaXMgaW5jbHVkZWQuIERlZmF1bHQgb24uICovCitfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfc2V0X2luY2x1c2lvbl9yZWN1cnNpb24oc3RydWN0IGFyY2hpdmUgKiwgaW50KTsKIC8qIEFkZCBleGNsdXNpb24gcGF0aG5hbWUgcGF0dGVybi4gKi8KIF9fTEFfREVDTCBpbnQJYXJjaGl2ZV9tYXRjaF9leGNsdWRlX3BhdHRlcm4oc3RydWN0IGFyY2hpdmUgKiwgY29uc3QgY2hhciAqKTsKIF9fTEFfREVDTCBpbnQJYXJjaGl2ZV9tYXRjaF9leGNsdWRlX3BhdHRlcm5fdyhzdHJ1Y3QgYXJjaGl2ZSAqLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9hY2wuYwppbmRleCA0NzM2NTMxLi45NTJlMjBkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9hY2wuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9hY2wuYwpAQCAtMTM4LDE0ICsxMzgsMTAgQEAKIAkJZnJlZShhY2wtPmFjbF9oZWFkKTsKIAkJYWNsLT5hY2xfaGVhZCA9IGFwOwogCX0KLQlpZiAoYWNsLT5hY2xfdGV4dF93ICE9IE5VTEwpIHsKLQkJZnJlZShhY2wtPmFjbF90ZXh0X3cpOwotCQlhY2wtPmFjbF90ZXh0X3cgPSBOVUxMOwotCX0KLQlpZiAoYWNsLT5hY2xfdGV4dCAhPSBOVUxMKSB7Ci0JCWZyZWUoYWNsLT5hY2xfdGV4dCk7Ci0JCWFjbC0+YWNsX3RleHQgPSBOVUxMOwotCX0KKwlmcmVlKGFjbC0+YWNsX3RleHRfdyk7CisJYWNsLT5hY2xfdGV4dF93ID0gTlVMTDsKKwlmcmVlKGFjbC0+YWNsX3RleHQpOworCWFjbC0+YWNsX3RleHQgPSBOVUxMOwogCWFjbC0+YWNsX3AgPSBOVUxMOwogCWFjbC0+YWNsX3R5cGVzID0gMDsKIAlhY2wtPmFjbF9zdGF0ZSA9IDA7IC8qIE5vdCBjb3VudGluZy4gKi8KQEAgLTMyNCwxNCArMzIwLDEwIEBACiAJCXJldHVybiAoTlVMTCk7CiAJfQogCi0JaWYgKGFjbC0+YWNsX3RleHRfdyAhPSBOVUxMKSB7Ci0JCWZyZWUoYWNsLT5hY2xfdGV4dF93KTsKLQkJYWNsLT5hY2xfdGV4dF93ID0gTlVMTDsKLQl9Ci0JaWYgKGFjbC0+YWNsX3RleHQgIT0gTlVMTCkgewotCQlmcmVlKGFjbC0+YWNsX3RleHQpOwotCQlhY2wtPmFjbF90ZXh0ID0gTlVMTDsKLQl9CisJZnJlZShhY2wtPmFjbF90ZXh0X3cpOworCWFjbC0+YWNsX3RleHRfdyA9IE5VTEw7CisJZnJlZShhY2wtPmFjbF90ZXh0KTsKKwlhY2wtPmFjbF90ZXh0ID0gTlVMTDsKIAogCS8qCiAJICogSWYgdGhlcmUncyBhIG1hdGNoaW5nIGVudHJ5IGFscmVhZHkgaW4gdGhlIGxpc3QsIG92ZXJ3cml0ZSBpdC4KQEAgLTc1Myw4ICs3NDUsMTAgQEAKIAkJCWFwcGVuZF9lbnRyeV93KCZ3cCwgcHJlZml4LCBhcC0+dHlwZSwgYXAtPnRhZywgZmxhZ3MsCiAJCQkgICAgd25hbWUsIGFwLT5wZXJtc2V0LCBpZCk7CiAJCQljb3VudCsrOwotCQl9IGVsc2UgaWYgKHIgPCAwICYmIGVycm5vID09IEVOT01FTSkKKwkJfSBlbHNlIGlmIChyIDwgMCAmJiBlcnJubyA9PSBFTk9NRU0pIHsKKwkJCWZyZWUod3MpOwogCQkJcmV0dXJuIChOVUxMKTsKKwkJfQogCX0KIAogCS8qIEFkZCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIgKi8KQEAgLTk3NSw4ICs5NjksMTAgQEAKIAkJCXByZWZpeCA9IE5VTEw7CiAJCXIgPSBhcmNoaXZlX21zdHJpbmdfZ2V0X21ic19sKAogCQkgICAgJmFwLT5uYW1lLCAmbmFtZSwgJmxlbiwgc2MpOwotCQlpZiAociAhPSAwKQorCQlpZiAociAhPSAwKSB7CisJCQlmcmVlKHMpOwogCQkJcmV0dXJuIChOVUxMKTsKKwkJfQogCQlpZiAoY291bnQgPiAwKQogCQkJKnArKyA9IHNlcGFyYXRvcjsKIAkJaWYgKG5hbWUgPT0gTlVMTCB8fApAQCAtMTU4MSwxNyArMTU3NywyOSBAQAogCiAJLyogU2NhbiBmb3IgdGhlIHNlcGFyYXRvci4gKi8KIAl3aGlsZSAoKip3cCAhPSBMJ1wwJyAmJiAqKndwICE9IEwnLCcgJiYgKip3cCAhPSBMJzonICYmCi0JICAgICoqd3AgIT0gTCdcbicpIHsKKwkgICAgKip3cCAhPSBMJ1xuJyAmJiAqKndwICE9IEwnIycpIHsKIAkJKCp3cCkrKzsKIAl9CiAJKnNlcCA9ICoqd3A7CiAKLQkvKiBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgdG8gbG9jYXRlIGVuZCBvZiBmaWVsZC4gKi8KLQkqZW5kID0gKndwIC0gMTsKLQl3aGlsZSAoKiplbmQgPT0gTCcgJyB8fCAqKmVuZCA9PSBMJ1x0JyB8fCAqKmVuZCA9PSBMJ1xuJykgewotCQkoKmVuZCktLTsKKwkvKiBMb2NhdGUgZW5kIG9mIGZpZWxkLCB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgaWYgbmVjZXNzYXJ5ICovCisJaWYgKCp3cCA9PSAqc3RhcnQpIHsKKwkJKmVuZCA9ICp3cDsKKwl9IGVsc2UgeworCQkqZW5kID0gKndwIC0gMTsKKwkJd2hpbGUgKCoqZW5kID09IEwnICcgfHwgKiplbmQgPT0gTCdcdCcgfHwgKiplbmQgPT0gTCdcbicpIHsKKwkJCSgqZW5kKS0tOworCQl9CisJCSgqZW5kKSsrOwogCX0KLQkoKmVuZCkrKzsKKworCS8qIEhhbmRsZSBpbi1maWVsZCBjb21tZW50cyAqLworCWlmICgqc2VwID09IEwnIycpIHsKKwkJd2hpbGUgKCoqd3AgIT0gTCdcMCcgJiYgKip3cCAhPSBMJywnICYmICoqd3AgIT0gTCdcbicpIHsKKwkJCSgqd3ApKys7CisJCX0KKwkJKnNlcCA9ICoqd3A7CisJfQogCiAJLyogQWRqdXN0IHNjYW5uZXIgbG9jYXRpb24uICovCiAJaWYgKCoqd3AgIT0gTCdcMCcpCkBAIC0xNjQyLDcgKzE2NTAsNyBAQAogCXJldCA9IEFSQ0hJVkVfT0s7CiAJdHlwZXMgPSAwOwogCi0Jd2hpbGUgKHRleHQgIT0gTlVMTCAgJiYgICp0ZXh0ICE9ICdcMCcpIHsKKwl3aGlsZSAodGV4dCAhPSBOVUxMICYmICAqdGV4dCAhPSAnXDAnKSB7CiAJCS8qCiAJCSAqIFBhcnNlIHRoZSBmaWVsZHMgb3V0IG9mIHRoZSBuZXh0IGVudHJ5LAogCQkgKiBhZHZhbmNlICd0ZXh0JyB0byBzdGFydCBvZiBuZXh0IGVudHJ5LgpAQCAtMTcwNyw2ICsxNzE1LDExIEBACiAJCQlzdCA9IGZpZWxkW25dLnN0YXJ0ICsgMTsKIAkJCWxlbiA9IGZpZWxkW25dLmVuZCAtIGZpZWxkW25dLnN0YXJ0OwogCisJCQlpZiAobGVuID09IDApIHsKKwkJCQlyZXQgPSBBUkNISVZFX1dBUk47CisJCQkJY29udGludWU7CisJCQl9CisKIAkJCXN3aXRjaCAoKnMpIHsKIAkJCWNhc2UgJ3UnOgogCQkJCWlmIChsZW4gPT0gMSB8fCAobGVuID09IDQKQEAgLTIwNTMsMTcgKzIwNjYsMzAgQEAKIAkqc3RhcnQgPSAqcDsKIAogCS8qIFNjYW4gZm9yIHRoZSBzZXBhcmF0b3IuICovCi0Jd2hpbGUgKCoqcCAhPSAnXDAnICYmICoqcCAhPSAnLCcgJiYgKipwICE9ICc6JyAmJiAqKnAgIT0gJ1xuJykgeworCXdoaWxlICgqKnAgIT0gJ1wwJyAmJiAqKnAgIT0gJywnICYmICoqcCAhPSAnOicgJiYgKipwICE9ICdcbicgJiYKKwkgICAgKipwICE9ICcjJykgewogCQkoKnApKys7CiAJfQogCSpzZXAgPSAqKnA7CiAKLQkvKiBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgdG8gbG9jYXRlIGVuZCBvZiBmaWVsZC4gKi8KLQkqZW5kID0gKnAgLSAxOwotCXdoaWxlICgqKmVuZCA9PSAnICcgfHwgKiplbmQgPT0gJ1x0JyB8fCAqKmVuZCA9PSAnXG4nKSB7Ci0JCSgqZW5kKS0tOworCS8qIExvY2F0ZSBlbmQgb2YgZmllbGQsIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoKnAgPT0gKnN0YXJ0KSB7CisJCSplbmQgPSAqcDsKKwl9IGVsc2UgeworCQkqZW5kID0gKnAgLSAxOworCQl3aGlsZSAoKiplbmQgPT0gJyAnIHx8ICoqZW5kID09ICdcdCcgfHwgKiplbmQgPT0gJ1xuJykgeworCQkJKCplbmQpLS07CisJCX0KKwkJKCplbmQpKys7CiAJfQotCSgqZW5kKSsrOworCisJLyogSGFuZGxlIGluLWZpZWxkIGNvbW1lbnRzICovCisJaWYgKCpzZXAgPT0gJyMnKSB7CisJCXdoaWxlICgqKnAgIT0gJ1wwJyAmJiAqKnAgIT0gJywnICYmICoqcCAhPSAnXG4nKSB7CisJCQkoKnApKys7CisJCX0KKwkJKnNlcCA9ICoqcDsKKwl9CiAKIAkvKiBBZGp1c3Qgc2Nhbm5lciBsb2NhdGlvbi4gKi8KIAlpZiAoKipwICE9ICdcMCcpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9hY2xfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYWNsX3ByaXZhdGUuaAppbmRleCBlZjBiMDIzLi5hZjEwODE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9hY2xfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2FjbF9wcml2YXRlLmgKQEAgLTI1LDEzICsyNSwxMyBAQAogICogJEZyZWVCU0QkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX0FDTF9QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9BQ0xfUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfQUNMX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX0FDTF9QUklWQVRFX0hfSU5DTFVERUQKLQogI2luY2x1ZGUgImFyY2hpdmVfc3RyaW5nLmgiCiAKIHN0cnVjdCBhcmNoaXZlX2FjbF9lbnRyeSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTIuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmZlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTIuaApAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAgIEJMQUtFMiByZWZlcmVuY2Ugc291cmNlIGNvZGUgcGFja2FnZSAtIHJlZmVyZW5jZSBDIGltcGxlbWVudGF0aW9ucworCisgICBDb3B5cmlnaHQgMjAxMiwgU2FtdWVsIE5ldmVzIDxzbmV2ZXNAZGVpLnVjLnB0Pi4gIFlvdSBtYXkgdXNlIHRoaXMgdW5kZXIgdGhlCisgICB0ZXJtcyBvZiB0aGUgQ0MwLCB0aGUgT3BlblNTTCBMaWNlbmNlLCBvciB0aGUgQXBhY2hlIFB1YmxpYyBMaWNlbnNlIDIuMCwgYXQKKyAgIHlvdXIgb3B0aW9uLiAgVGhlIHRlcm1zIG9mIHRoZXNlIGxpY2Vuc2VzIGNhbiBiZSBmb3VuZCBhdDoKKworICAgLSBDQzAgMS4wIFVuaXZlcnNhbCA6IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMAorICAgLSBPcGVuU1NMIGxpY2Vuc2UgICA6IGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9saWNlbnNlLmh0bWwKKyAgIC0gQXBhY2hlIDIuMCAgICAgICAgOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQkxBS0UyIGhhc2ggZnVuY3Rpb24gY2FuIGJlIGZvdW5kIGF0CisgICBodHRwczovL2JsYWtlMi5uZXQuCisqLworCisjaWZuZGVmIEFSQ0hJVkVfQkxBS0UyX0gKKyNkZWZpbmUgQVJDSElWRV9CTEFLRTJfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBCTEFLRTJfUEFDS0VEKHgpIF9fcHJhZ21hKHBhY2socHVzaCwgMSkpIHggX19wcmFnbWEocGFjayhwb3ApKQorI2Vsc2UKKyNkZWZpbmUgQkxBS0UyX1BBQ0tFRCh4KSB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisgIGVudW0gYmxha2Uyc19jb25zdGFudAorICB7CisgICAgQkxBS0UyU19CTE9DS0JZVEVTID0gNjQsCisgICAgQkxBS0UyU19PVVRCWVRFUyAgID0gMzIsCisgICAgQkxBS0UyU19LRVlCWVRFUyAgID0gMzIsCisgICAgQkxBS0UyU19TQUxUQllURVMgID0gOCwKKyAgICBCTEFLRTJTX1BFUlNPTkFMQllURVMgPSA4CisgIH07CisKKyAgZW51bSBibGFrZTJiX2NvbnN0YW50CisgIHsKKyAgICBCTEFLRTJCX0JMT0NLQllURVMgPSAxMjgsCisgICAgQkxBS0UyQl9PVVRCWVRFUyAgID0gNjQsCisgICAgQkxBS0UyQl9LRVlCWVRFUyAgID0gNjQsCisgICAgQkxBS0UyQl9TQUxUQllURVMgID0gMTYsCisgICAgQkxBS0UyQl9QRVJTT05BTEJZVEVTID0gMTYKKyAgfTsKKworICB0eXBlZGVmIHN0cnVjdCBibGFrZTJzX3N0YXRlX18KKyAgeworICAgIHVpbnQzMl90IGhbOF07CisgICAgdWludDMyX3QgdFsyXTsKKyAgICB1aW50MzJfdCBmWzJdOworICAgIHVpbnQ4X3QgIGJ1ZltCTEFLRTJTX0JMT0NLQllURVNdOworICAgIHNpemVfdCAgIGJ1ZmxlbjsKKyAgICBzaXplX3QgICBvdXRsZW47CisgICAgdWludDhfdCAgbGFzdF9ub2RlOworICB9IGJsYWtlMnNfc3RhdGU7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2UyYl9zdGF0ZV9fCisgIHsKKyAgICB1aW50NjRfdCBoWzhdOworICAgIHVpbnQ2NF90IHRbMl07CisgICAgdWludDY0X3QgZlsyXTsKKyAgICB1aW50OF90ICBidWZbQkxBS0UyQl9CTE9DS0JZVEVTXTsKKyAgICBzaXplX3QgICBidWZsZW47CisgICAgc2l6ZV90ICAgb3V0bGVuOworICAgIHVpbnQ4X3QgIGxhc3Rfbm9kZTsKKyAgfSBibGFrZTJiX3N0YXRlOworCisgIHR5cGVkZWYgc3RydWN0IGJsYWtlMnNwX3N0YXRlX18KKyAgeworICAgIGJsYWtlMnNfc3RhdGUgU1s4XVsxXTsKKyAgICBibGFrZTJzX3N0YXRlIFJbMV07CisgICAgdWludDhfdCAgICAgICBidWZbOCAqIEJMQUtFMlNfQkxPQ0tCWVRFU107CisgICAgc2l6ZV90ICAgICAgICBidWZsZW47CisgICAgc2l6ZV90ICAgICAgICBvdXRsZW47CisgIH0gYmxha2Uyc3Bfc3RhdGU7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgYmxha2UyYnBfc3RhdGVfXworICB7CisgICAgYmxha2UyYl9zdGF0ZSBTWzRdWzFdOworICAgIGJsYWtlMmJfc3RhdGUgUlsxXTsKKyAgICB1aW50OF90ICAgICAgIGJ1Zls0ICogQkxBS0UyQl9CTE9DS0JZVEVTXTsKKyAgICBzaXplX3QgICAgICAgIGJ1ZmxlbjsKKyAgICBzaXplX3QgICAgICAgIG91dGxlbjsKKyAgfSBibGFrZTJicF9zdGF0ZTsKKworICBCTEFLRTJfUEFDS0VEKHN0cnVjdCBibGFrZTJzX3BhcmFtX18KKyAgeworICAgIHVpbnQ4X3QgIGRpZ2VzdF9sZW5ndGg7IC8qIDEgKi8KKyAgICB1aW50OF90ICBrZXlfbGVuZ3RoOyAgICAvKiAyICovCisgICAgdWludDhfdCAgZmFub3V0OyAgICAgICAgLyogMyAqLworICAgIHVpbnQ4X3QgIGRlcHRoOyAgICAgICAgIC8qIDQgKi8KKyAgICB1aW50MzJfdCBsZWFmX2xlbmd0aDsgICAvKiA4ICovCisgICAgdWludDMyX3Qgbm9kZV9vZmZzZXQ7ICAvKiAxMiAqLworICAgIHVpbnQxNl90IHhvZl9sZW5ndGg7ICAgIC8qIDE0ICovCisgICAgdWludDhfdCAgbm9kZV9kZXB0aDsgICAgLyogMTUgKi8KKyAgICB1aW50OF90ICBpbm5lcl9sZW5ndGg7ICAvKiAxNiAqLworICAgIC8qIHVpbnQ4X3QgIHJlc2VydmVkWzBdOyAqLworICAgIHVpbnQ4X3QgIHNhbHRbQkxBS0UyU19TQUxUQllURVNdOyAvKiAyNCAqLworICAgIHVpbnQ4X3QgIHBlcnNvbmFsW0JMQUtFMlNfUEVSU09OQUxCWVRFU107ICAvKiAzMiAqLworICB9KTsKKworICB0eXBlZGVmIHN0cnVjdCBibGFrZTJzX3BhcmFtX18gYmxha2Uyc19wYXJhbTsKKworICBCTEFLRTJfUEFDS0VEKHN0cnVjdCBibGFrZTJiX3BhcmFtX18KKyAgeworICAgIHVpbnQ4X3QgIGRpZ2VzdF9sZW5ndGg7IC8qIDEgKi8KKyAgICB1aW50OF90ICBrZXlfbGVuZ3RoOyAgICAvKiAyICovCisgICAgdWludDhfdCAgZmFub3V0OyAgICAgICAgLyogMyAqLworICAgIHVpbnQ4X3QgIGRlcHRoOyAgICAgICAgIC8qIDQgKi8KKyAgICB1aW50MzJfdCBsZWFmX2xlbmd0aDsgICAvKiA4ICovCisgICAgdWludDMyX3Qgbm9kZV9vZmZzZXQ7ICAgLyogMTIgKi8KKyAgICB1aW50MzJfdCB4b2ZfbGVuZ3RoOyAgICAvKiAxNiAqLworICAgIHVpbnQ4X3QgIG5vZGVfZGVwdGg7ICAgIC8qIDE3ICovCisgICAgdWludDhfdCAgaW5uZXJfbGVuZ3RoOyAgLyogMTggKi8KKyAgICB1aW50OF90ICByZXNlcnZlZFsxNF07ICAvKiAzMiAqLworICAgIHVpbnQ4X3QgIHNhbHRbQkxBS0UyQl9TQUxUQllURVNdOyAvKiA0OCAqLworICAgIHVpbnQ4X3QgIHBlcnNvbmFsW0JMQUtFMkJfUEVSU09OQUxCWVRFU107ICAvKiA2NCAqLworICB9KTsKKworICB0eXBlZGVmIHN0cnVjdCBibGFrZTJiX3BhcmFtX18gYmxha2UyYl9wYXJhbTsKKworICB0eXBlZGVmIHN0cnVjdCBibGFrZTJ4c19zdGF0ZV9fCisgIHsKKyAgICBibGFrZTJzX3N0YXRlIFNbMV07CisgICAgYmxha2Uyc19wYXJhbSBQWzFdOworICB9IGJsYWtlMnhzX3N0YXRlOworCisgIHR5cGVkZWYgc3RydWN0IGJsYWtlMnhiX3N0YXRlX18KKyAgeworICAgIGJsYWtlMmJfc3RhdGUgU1sxXTsKKyAgICBibGFrZTJiX3BhcmFtIFBbMV07CisgIH0gYmxha2UyeGJfc3RhdGU7CisKKyAgLyogUGFkZGVkIHN0cnVjdHMgcmVzdWx0IGluIGEgY29tcGlsZS10aW1lIGVycm9yICovCisgIGVudW0geworICAgIEJMQUtFMl9EVU1NWV8xID0gMS8oc2l6ZW9mKGJsYWtlMnNfcGFyYW0pID09IEJMQUtFMlNfT1VUQllURVMpLAorICAgIEJMQUtFMl9EVU1NWV8yID0gMS8oc2l6ZW9mKGJsYWtlMmJfcGFyYW0pID09IEJMQUtFMkJfT1VUQllURVMpCisgIH07CisKKyAgLyogU3RyZWFtaW5nIEFQSSAqLworICBpbnQgYmxha2Uyc19pbml0KCBibGFrZTJzX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuICk7CisgIGludCBibGFrZTJzX2luaXRfa2V5KCBibGFrZTJzX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMnNfaW5pdF9wYXJhbSggYmxha2Uyc19zdGF0ZSAqUywgY29uc3QgYmxha2Uyc19wYXJhbSAqUCApOworICBpbnQgYmxha2Uyc191cGRhdGUoIGJsYWtlMnNfc3RhdGUgKlMsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4gKTsKKyAgaW50IGJsYWtlMnNfZmluYWwoIGJsYWtlMnNfc3RhdGUgKlMsIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiApOworCisgIGludCBibGFrZTJiX2luaXQoIGJsYWtlMmJfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4gKTsKKyAgaW50IGJsYWtlMmJfaW5pdF9rZXkoIGJsYWtlMmJfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworICBpbnQgYmxha2UyYl9pbml0X3BhcmFtKCBibGFrZTJiX3N0YXRlICpTLCBjb25zdCBibGFrZTJiX3BhcmFtICpQICk7CisgIGludCBibGFrZTJiX3VwZGF0ZSggYmxha2UyYl9zdGF0ZSAqUywgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiApOworICBpbnQgYmxha2UyYl9maW5hbCggYmxha2UyYl9zdGF0ZSAqUywgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuICk7CisKKyAgaW50IGJsYWtlMnNwX2luaXQoIGJsYWtlMnNwX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuICk7CisgIGludCBibGFrZTJzcF9pbml0X2tleSggYmxha2Uyc3Bfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworICBpbnQgYmxha2Uyc3BfdXBkYXRlKCBibGFrZTJzcF9zdGF0ZSAqUywgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiApOworICBpbnQgYmxha2Uyc3BfZmluYWwoIGJsYWtlMnNwX3N0YXRlICpTLCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4gKTsKKworICBpbnQgYmxha2UyYnBfaW5pdCggYmxha2UyYnBfc3RhdGUgKlMsIHNpemVfdCBvdXRsZW4gKTsKKyAgaW50IGJsYWtlMmJwX2luaXRfa2V5KCBibGFrZTJicF9zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJicF91cGRhdGUoIGJsYWtlMmJwX3N0YXRlICpTLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuICk7CisgIGludCBibGFrZTJicF9maW5hbCggYmxha2UyYnBfc3RhdGUgKlMsIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiApOworCisgIC8qIFZhcmlhYmxlIG91dHB1dCBsZW5ndGggQVBJICovCisgIGludCBibGFrZTJ4c19pbml0KCBibGFrZTJ4c19zdGF0ZSAqUywgY29uc3Qgc2l6ZV90IG91dGxlbiApOworICBpbnQgYmxha2UyeHNfaW5pdF9rZXkoIGJsYWtlMnhzX3N0YXRlICpTLCBjb25zdCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMnhzX3VwZGF0ZSggYmxha2UyeHNfc3RhdGUgKlMsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4gKTsKKyAgaW50IGJsYWtlMnhzX2ZpbmFsKGJsYWtlMnhzX3N0YXRlICpTLCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4pOworCisgIGludCBibGFrZTJ4Yl9pbml0KCBibGFrZTJ4Yl9zdGF0ZSAqUywgY29uc3Qgc2l6ZV90IG91dGxlbiApOworICBpbnQgYmxha2UyeGJfaW5pdF9rZXkoIGJsYWtlMnhiX3N0YXRlICpTLCBjb25zdCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMnhiX3VwZGF0ZSggYmxha2UyeGJfc3RhdGUgKlMsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4gKTsKKyAgaW50IGJsYWtlMnhiX2ZpbmFsKGJsYWtlMnhiX3N0YXRlICpTLCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4pOworCisgIC8qIFNpbXBsZSBBUEkgKi8KKyAgaW50IGJsYWtlMnMoIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisgIGludCBibGFrZTJiKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworCisgIGludCBibGFrZTJzcCggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMmJwKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworCisgIGludCBibGFrZTJ4cyggdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuLCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGlubGVuLCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4gKTsKKyAgaW50IGJsYWtlMnhiKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApOworCisgIC8qIFRoaXMgaXMgc2ltcGx5IGFuIGFsaWFzIGZvciBibGFrZTJiICovCisgIGludCBibGFrZTIoIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICk7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2UyX2ltcGwuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMl9pbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwNWRlZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMl9pbXBsLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgICBCTEFLRTIgcmVmZXJlbmNlIHNvdXJjZSBjb2RlIHBhY2thZ2UgLSByZWZlcmVuY2UgQyBpbXBsZW1lbnRhdGlvbnMKKworICAgQ29weXJpZ2h0IDIwMTIsIFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4uICBZb3UgbWF5IHVzZSB0aGlzIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhlIENDMCwgdGhlIE9wZW5TU0wgTGljZW5jZSwgb3IgdGhlIEFwYWNoZSBQdWJsaWMgTGljZW5zZSAyLjAsIGF0CisgICB5b3VyIG9wdGlvbi4gIFRoZSB0ZXJtcyBvZiB0aGVzZSBsaWNlbnNlcyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgIC0gQ0MwIDEuMCBVbml2ZXJzYWwgOiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAKKyAgIC0gT3BlblNTTCBsaWNlbnNlICAgOiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1sCisgICAtIEFwYWNoZSAyLjAgICAgICAgIDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJMQUtFMiBoYXNoIGZ1bmN0aW9uIGNhbiBiZSBmb3VuZCBhdAorICAgaHR0cHM6Ly9ibGFrZTIubmV0LgorKi8KKworI2lmbmRlZiBBUkNISVZFX0JMQUtFMl9JTVBMX0gKKyNkZWZpbmUgQVJDSElWRV9CTEFLRTJfSU1QTF9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiAoIWRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgfHwgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMUwpCisgICNpZiAgIGRlZmluZWQoX01TQ19WRVIpCisgICAgI2RlZmluZSBCTEFLRTJfSU5MSU5FIF9faW5saW5lCisgICNlbGlmIGRlZmluZWQoX19HTlVDX18pCisgICAgI2RlZmluZSBCTEFLRTJfSU5MSU5FIF9faW5saW5lX18KKyAgI2Vsc2UKKyAgICAjZGVmaW5lIEJMQUtFMl9JTkxJTkUKKyAgI2VuZGlmCisjZWxzZQorICAjZGVmaW5lIEJMQUtFMl9JTkxJTkUgaW5saW5lCisjZW5kaWYKKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdWludDMyX3QgbG9hZDMyKCBjb25zdCB2b2lkICpzcmMgKQoreworI2lmIGRlZmluZWQoTkFUSVZFX0xJVFRMRV9FTkRJQU4pCisgIHVpbnQzMl90IHc7CisgIG1lbWNweSgmdywgc3JjLCBzaXplb2Ygdyk7CisgIHJldHVybiB3OworI2Vsc2UKKyAgY29uc3QgdWludDhfdCAqcCA9ICggY29uc3QgdWludDhfdCAqIClzcmM7CisgIHJldHVybiAoKCB1aW50MzJfdCApKCBwWzBdICkgPDwgIDApIHwKKyAgICAgICAgICgoIHVpbnQzMl90ICkoIHBbMV0gKSA8PCAgOCkgfAorICAgICAgICAgKCggdWludDMyX3QgKSggcFsyXSApIDw8IDE2KSB8CisgICAgICAgICAoKCB1aW50MzJfdCApKCBwWzNdICkgPDwgMjQpIDsKKyNlbmRpZgorfQorCitzdGF0aWMgQkxBS0UyX0lOTElORSB1aW50NjRfdCBsb2FkNjQoIGNvbnN0IHZvaWQgKnNyYyApCit7CisjaWYgZGVmaW5lZChOQVRJVkVfTElUVExFX0VORElBTikKKyAgdWludDY0X3QgdzsKKyAgbWVtY3B5KCZ3LCBzcmMsIHNpemVvZiB3KTsKKyAgcmV0dXJuIHc7CisjZWxzZQorICBjb25zdCB1aW50OF90ICpwID0gKCBjb25zdCB1aW50OF90ICogKXNyYzsKKyAgcmV0dXJuICgoIHVpbnQ2NF90ICkoIHBbMF0gKSA8PCAgMCkgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFsxXSApIDw8ICA4KSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzJdICkgPDwgMTYpIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbM10gKSA8PCAyNCkgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFs0XSApIDw8IDMyKSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzVdICkgPDwgNDApIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbNl0gKSA8PCA0OCkgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFs3XSApIDw8IDU2KSA7CisjZW5kaWYKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdWludDE2X3QgbG9hZDE2KCBjb25zdCB2b2lkICpzcmMgKQoreworI2lmIGRlZmluZWQoTkFUSVZFX0xJVFRMRV9FTkRJQU4pCisgIHVpbnQxNl90IHc7CisgIG1lbWNweSgmdywgc3JjLCBzaXplb2Ygdyk7CisgIHJldHVybiB3OworI2Vsc2UKKyAgY29uc3QgdWludDhfdCAqcCA9ICggY29uc3QgdWludDhfdCAqIClzcmM7CisgIHJldHVybiAoIHVpbnQxNl90ICkoKCggdWludDMyX3QgKSggcFswXSApIDw8ICAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgKCggdWludDMyX3QgKSggcFsxXSApIDw8ICA4KSk7CisjZW5kaWYKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdm9pZCBzdG9yZTE2KCB2b2lkICpkc3QsIHVpbnQxNl90IHcgKQoreworI2lmIGRlZmluZWQoTkFUSVZFX0xJVFRMRV9FTkRJQU4pCisgIG1lbWNweShkc3QsICZ3LCBzaXplb2Ygdyk7CisjZWxzZQorICB1aW50OF90ICpwID0gKCB1aW50OF90ICogKWRzdDsKKyAgKnArKyA9ICggdWludDhfdCApdzsgdyA+Pj0gODsKKyAgKnArKyA9ICggdWludDhfdCApdzsKKyNlbmRpZgorfQorCitzdGF0aWMgQkxBS0UyX0lOTElORSB2b2lkIHN0b3JlMzIoIHZvaWQgKmRzdCwgdWludDMyX3QgdyApCit7CisjaWYgZGVmaW5lZChOQVRJVkVfTElUVExFX0VORElBTikKKyAgbWVtY3B5KGRzdCwgJncsIHNpemVvZiB3KTsKKyNlbHNlCisgIHVpbnQ4X3QgKnAgPSAoIHVpbnQ4X3QgKiApZHN0OworICBwWzBdID0gKHVpbnQ4X3QpKHcgPj4gIDApOworICBwWzFdID0gKHVpbnQ4X3QpKHcgPj4gIDgpOworICBwWzJdID0gKHVpbnQ4X3QpKHcgPj4gMTYpOworICBwWzNdID0gKHVpbnQ4X3QpKHcgPj4gMjQpOworI2VuZGlmCit9CisKK3N0YXRpYyBCTEFLRTJfSU5MSU5FIHZvaWQgc3RvcmU2NCggdm9pZCAqZHN0LCB1aW50NjRfdCB3ICkKK3sKKyNpZiBkZWZpbmVkKE5BVElWRV9MSVRUTEVfRU5ESUFOKQorICBtZW1jcHkoZHN0LCAmdywgc2l6ZW9mIHcpOworI2Vsc2UKKyAgdWludDhfdCAqcCA9ICggdWludDhfdCAqIClkc3Q7CisgIHBbMF0gPSAodWludDhfdCkodyA+PiAgMCk7CisgIHBbMV0gPSAodWludDhfdCkodyA+PiAgOCk7CisgIHBbMl0gPSAodWludDhfdCkodyA+PiAxNik7CisgIHBbM10gPSAodWludDhfdCkodyA+PiAyNCk7CisgIHBbNF0gPSAodWludDhfdCkodyA+PiAzMik7CisgIHBbNV0gPSAodWludDhfdCkodyA+PiA0MCk7CisgIHBbNl0gPSAodWludDhfdCkodyA+PiA0OCk7CisgIHBbN10gPSAodWludDhfdCkodyA+PiA1Nik7CisjZW5kaWYKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdWludDY0X3QgbG9hZDQ4KCBjb25zdCB2b2lkICpzcmMgKQoreworICBjb25zdCB1aW50OF90ICpwID0gKCBjb25zdCB1aW50OF90ICogKXNyYzsKKyAgcmV0dXJuICgoIHVpbnQ2NF90ICkoIHBbMF0gKSA8PCAgMCkgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFsxXSApIDw8ICA4KSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzJdICkgPDwgMTYpIHwKKyAgICAgICAgICgoIHVpbnQ2NF90ICkoIHBbM10gKSA8PCAyNCkgfAorICAgICAgICAgKCggdWludDY0X3QgKSggcFs0XSApIDw8IDMyKSB8CisgICAgICAgICAoKCB1aW50NjRfdCApKCBwWzVdICkgPDwgNDApIDsKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdm9pZCBzdG9yZTQ4KCB2b2lkICpkc3QsIHVpbnQ2NF90IHcgKQoreworICB1aW50OF90ICpwID0gKCB1aW50OF90ICogKWRzdDsKKyAgcFswXSA9ICh1aW50OF90KSh3ID4+ICAwKTsKKyAgcFsxXSA9ICh1aW50OF90KSh3ID4+ICA4KTsKKyAgcFsyXSA9ICh1aW50OF90KSh3ID4+IDE2KTsKKyAgcFszXSA9ICh1aW50OF90KSh3ID4+IDI0KTsKKyAgcFs0XSA9ICh1aW50OF90KSh3ID4+IDMyKTsKKyAgcFs1XSA9ICh1aW50OF90KSh3ID4+IDQwKTsKK30KKworc3RhdGljIEJMQUtFMl9JTkxJTkUgdWludDMyX3Qgcm90cjMyKCBjb25zdCB1aW50MzJfdCB3LCBjb25zdCB1bnNpZ25lZCBjICkKK3sKKyAgcmV0dXJuICggdyA+PiBjICkgfCAoIHcgPDwgKCAzMiAtIGMgKSApOworfQorCitzdGF0aWMgQkxBS0UyX0lOTElORSB1aW50NjRfdCByb3RyNjQoIGNvbnN0IHVpbnQ2NF90IHcsIGNvbnN0IHVuc2lnbmVkIGMgKQoreworICByZXR1cm4gKCB3ID4+IGMgKSB8ICggdyA8PCAoIDY0IC0gYyApICk7Cit9CisKKy8qIHByZXZlbnRzIGNvbXBpbGVyIG9wdGltaXppbmcgb3V0IG1lbXNldCgpICovCitzdGF0aWMgQkxBS0UyX0lOTElORSB2b2lkIHNlY3VyZV96ZXJvX21lbW9yeSh2b2lkICp2LCBzaXplX3QgbikKK3sKKyAgc3RhdGljIHZvaWQgKigqY29uc3Qgdm9sYXRpbGUgbWVtc2V0X3YpKHZvaWQgKiwgaW50LCBzaXplX3QpID0gJm1lbXNldDsKKyAgbWVtc2V0X3YodiwgMCwgbik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2Uyc19yZWYuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNfcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyZmZkMAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2JsYWtlMnNfcmVmLmMKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgICBCTEFLRTIgcmVmZXJlbmNlIHNvdXJjZSBjb2RlIHBhY2thZ2UgLSByZWZlcmVuY2UgQyBpbXBsZW1lbnRhdGlvbnMKKworICAgQ29weXJpZ2h0IDIwMTIsIFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4uICBZb3UgbWF5IHVzZSB0aGlzIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhlIENDMCwgdGhlIE9wZW5TU0wgTGljZW5jZSwgb3IgdGhlIEFwYWNoZSBQdWJsaWMgTGljZW5zZSAyLjAsIGF0CisgICB5b3VyIG9wdGlvbi4gIFRoZSB0ZXJtcyBvZiB0aGVzZSBsaWNlbnNlcyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgIC0gQ0MwIDEuMCBVbml2ZXJzYWwgOiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAKKyAgIC0gT3BlblNTTCBsaWNlbnNlICAgOiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1sCisgICAtIEFwYWNoZSAyLjAgICAgICAgIDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJMQUtFMiBoYXNoIGZ1bmN0aW9uIGNhbiBiZSBmb3VuZCBhdAorICAgaHR0cHM6Ly9ibGFrZTIubmV0LgorKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJhcmNoaXZlX2JsYWtlMi5oIgorI2luY2x1ZGUgImFyY2hpdmVfYmxha2UyX2ltcGwuaCIKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGJsYWtlMnNfSVZbOF0gPQoreworICAweDZBMDlFNjY3VUwsIDB4QkI2N0FFODVVTCwgMHgzQzZFRjM3MlVMLCAweEE1NEZGNTNBVUwsCisgIDB4NTEwRTUyN0ZVTCwgMHg5QjA1Njg4Q1VMLCAweDFGODNEOUFCVUwsIDB4NUJFMENEMTlVTAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgYmxha2Uyc19zaWdtYVsxMF1bMTZdID0KK3sKKyAgeyAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSB9ICwKKyAgeyAxNCwgMTAsICA0LCAgOCwgIDksIDE1LCAxMywgIDYsICAxLCAxMiwgIDAsICAyLCAxMSwgIDcsICA1LCAgMyB9ICwKKyAgeyAxMSwgIDgsIDEyLCAgMCwgIDUsICAyLCAxNSwgMTMsIDEwLCAxNCwgIDMsICA2LCAgNywgIDEsICA5LCAgNCB9ICwKKyAgeyAgNywgIDksICAzLCAgMSwgMTMsIDEyLCAxMSwgMTQsICAyLCAgNiwgIDUsIDEwLCAgNCwgIDAsIDE1LCAgOCB9ICwKKyAgeyAgOSwgIDAsICA1LCAgNywgIDIsICA0LCAxMCwgMTUsIDE0LCAgMSwgMTEsIDEyLCAgNiwgIDgsICAzLCAxMyB9ICwKKyAgeyAgMiwgMTIsICA2LCAxMCwgIDAsIDExLCAgOCwgIDMsICA0LCAxMywgIDcsICA1LCAxNSwgMTQsICAxLCAgOSB9ICwKKyAgeyAxMiwgIDUsICAxLCAxNSwgMTQsIDEzLCAgNCwgMTAsICAwLCAgNywgIDYsICAzLCAgOSwgIDIsICA4LCAxMSB9ICwKKyAgeyAxMywgMTEsICA3LCAxNCwgMTIsICAxLCAgMywgIDksICA1LCAgMCwgMTUsICA0LCAgOCwgIDYsICAyLCAxMCB9ICwKKyAgeyAgNiwgMTUsIDE0LCAgOSwgMTEsICAzLCAgMCwgIDgsIDEyLCAgMiwgMTMsICA3LCAgMSwgIDQsIDEwLCAgNSB9ICwKKyAgeyAxMCwgIDIsICA4LCAgNCwgIDcsICA2LCAgMSwgIDUsIDE1LCAxMSwgIDksIDE0LCAgMywgMTIsIDEzICwgMCB9ICwKK307CisKK3N0YXRpYyB2b2lkIGJsYWtlMnNfc2V0X2xhc3Rub2RlKCBibGFrZTJzX3N0YXRlICpTICkKK3sKKyAgUy0+ZlsxXSA9ICh1aW50MzJfdCktMTsKK30KKworLyogU29tZSBoZWxwZXIgZnVuY3Rpb25zLCBub3QgbmVjZXNzYXJpbHkgdXNlZnVsICovCitzdGF0aWMgaW50IGJsYWtlMnNfaXNfbGFzdGJsb2NrKCBjb25zdCBibGFrZTJzX3N0YXRlICpTICkKK3sKKyAgcmV0dXJuIFMtPmZbMF0gIT0gMDsKK30KKworc3RhdGljIHZvaWQgYmxha2Uyc19zZXRfbGFzdGJsb2NrKCBibGFrZTJzX3N0YXRlICpTICkKK3sKKyAgaWYoIFMtPmxhc3Rfbm9kZSApIGJsYWtlMnNfc2V0X2xhc3Rub2RlKCBTICk7CisKKyAgUy0+ZlswXSA9ICh1aW50MzJfdCktMTsKK30KKworc3RhdGljIHZvaWQgYmxha2Uyc19pbmNyZW1lbnRfY291bnRlciggYmxha2Uyc19zdGF0ZSAqUywgY29uc3QgdWludDMyX3QgaW5jICkKK3sKKyAgUy0+dFswXSArPSBpbmM7CisgIFMtPnRbMV0gKz0gKCBTLT50WzBdIDwgaW5jICk7Cit9CisKK3N0YXRpYyB2b2lkIGJsYWtlMnNfaW5pdDAoIGJsYWtlMnNfc3RhdGUgKlMgKQoreworICBzaXplX3QgaTsKKyAgbWVtc2V0KCBTLCAwLCBzaXplb2YoIGJsYWtlMnNfc3RhdGUgKSApOworCisgIGZvciggaSA9IDA7IGkgPCA4OyArK2kgKSBTLT5oW2ldID0gYmxha2Uyc19JVltpXTsKK30KKworLyogaW5pdDIgeG9ycyBJViB3aXRoIGlucHV0IHBhcmFtZXRlciBibG9jayAqLworaW50IGJsYWtlMnNfaW5pdF9wYXJhbSggYmxha2Uyc19zdGF0ZSAqUywgY29uc3QgYmxha2Uyc19wYXJhbSAqUCApCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSAoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiApKCBQICk7CisgIHNpemVfdCBpOworCisgIGJsYWtlMnNfaW5pdDAoIFMgKTsKKworICAvKiBJViBYT1IgUGFyYW1CbG9jayAqLworICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkKKyAgICBTLT5oW2ldIF49IGxvYWQzMiggJnBbaSAqIDRdICk7CisKKyAgUy0+b3V0bGVuID0gUC0+ZGlnZXN0X2xlbmd0aDsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogU2VxdWVudGlhbCBibGFrZTJzIGluaXRpYWxpemF0aW9uICovCitpbnQgYmxha2Uyc19pbml0KCBibGFrZTJzX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuICkKK3sKKyAgYmxha2Uyc19wYXJhbSBQWzFdOworCisgIC8qIE1vdmUgaW50ZXJ2YWwgdmVyaWZpY2F0aW9uIGhlcmU/ICovCisgIGlmICggKCAhb3V0bGVuICkgfHwgKCBvdXRsZW4gPiBCTEFLRTJTX09VVEJZVEVTICkgKSByZXR1cm4gLTE7CisKKyAgUC0+ZGlnZXN0X2xlbmd0aCA9ICh1aW50OF90KW91dGxlbjsKKyAgUC0+a2V5X2xlbmd0aCAgICA9IDA7CisgIFAtPmZhbm91dCAgICAgICAgPSAxOworICBQLT5kZXB0aCAgICAgICAgID0gMTsKKyAgc3RvcmUzMiggJlAtPmxlYWZfbGVuZ3RoLCAwICk7CisgIHN0b3JlMzIoICZQLT5ub2RlX29mZnNldCwgMCApOworICBzdG9yZTE2KCAmUC0+eG9mX2xlbmd0aCwgMCApOworICBQLT5ub2RlX2RlcHRoICAgID0gMDsKKyAgUC0+aW5uZXJfbGVuZ3RoICA9IDA7CisgIC8qIG1lbXNldChQLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKFAtPnJlc2VydmVkKSApOyAqLworICBtZW1zZXQoIFAtPnNhbHQsICAgICAwLCBzaXplb2YoIFAtPnNhbHQgKSApOworICBtZW1zZXQoIFAtPnBlcnNvbmFsLCAwLCBzaXplb2YoIFAtPnBlcnNvbmFsICkgKTsKKyAgcmV0dXJuIGJsYWtlMnNfaW5pdF9wYXJhbSggUywgUCApOworfQorCitpbnQgYmxha2Uyc19pbml0X2tleSggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICkKK3sKKyAgYmxha2Uyc19wYXJhbSBQWzFdOworCisgIGlmICggKCAhb3V0bGVuICkgfHwgKCBvdXRsZW4gPiBCTEFLRTJTX09VVEJZVEVTICkgKSByZXR1cm4gLTE7CisKKyAgaWYgKCAha2V5IHx8ICFrZXlsZW4gfHwga2V5bGVuID4gQkxBS0UyU19LRVlCWVRFUyApIHJldHVybiAtMTsKKworICBQLT5kaWdlc3RfbGVuZ3RoID0gKHVpbnQ4X3Qpb3V0bGVuOworICBQLT5rZXlfbGVuZ3RoICAgID0gKHVpbnQ4X3Qpa2V5bGVuOworICBQLT5mYW5vdXQgICAgICAgID0gMTsKKyAgUC0+ZGVwdGggICAgICAgICA9IDE7CisgIHN0b3JlMzIoICZQLT5sZWFmX2xlbmd0aCwgMCApOworICBzdG9yZTMyKCAmUC0+bm9kZV9vZmZzZXQsIDAgKTsKKyAgc3RvcmUxNiggJlAtPnhvZl9sZW5ndGgsIDAgKTsKKyAgUC0+bm9kZV9kZXB0aCAgICA9IDA7CisgIFAtPmlubmVyX2xlbmd0aCAgPSAwOworICAvKiBtZW1zZXQoUC0+cmVzZXJ2ZWQsIDAsIHNpemVvZihQLT5yZXNlcnZlZCkgKTsgKi8KKyAgbWVtc2V0KCBQLT5zYWx0LCAgICAgMCwgc2l6ZW9mKCBQLT5zYWx0ICkgKTsKKyAgbWVtc2V0KCBQLT5wZXJzb25hbCwgMCwgc2l6ZW9mKCBQLT5wZXJzb25hbCApICk7CisKKyAgaWYoIGJsYWtlMnNfaW5pdF9wYXJhbSggUywgUCApIDwgMCApIHJldHVybiAtMTsKKworICB7CisgICAgdWludDhfdCBibG9ja1tCTEFLRTJTX0JMT0NLQllURVNdOworICAgIG1lbXNldCggYmxvY2ssIDAsIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworICAgIG1lbWNweSggYmxvY2ssIGtleSwga2V5bGVuICk7CisgICAgYmxha2Uyc191cGRhdGUoIFMsIGJsb2NrLCBCTEFLRTJTX0JMT0NLQllURVMgKTsKKyAgICBzZWN1cmVfemVyb19tZW1vcnkoIGJsb2NrLCBCTEFLRTJTX0JMT0NLQllURVMgKTsgLyogQnVybiB0aGUga2V5IGZyb20gc3RhY2sgKi8KKyAgfQorICByZXR1cm4gMDsKK30KKworI2RlZmluZSBHKHIsaSxhLGIsYyxkKSAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBhID0gYSArIGIgKyBtW2JsYWtlMnNfc2lnbWFbcl1bMippKzBdXTsgXAorICAgIGQgPSByb3RyMzIoZCBeIGEsIDE2KTsgICAgICAgICAgICAgICAgICBcCisgICAgYyA9IGMgKyBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBiID0gcm90cjMyKGIgXiBjLCAxMik7ICAgICAgICAgICAgICAgICAgXAorICAgIGEgPSBhICsgYiArIG1bYmxha2Uyc19zaWdtYVtyXVsyKmkrMV1dOyBcCisgICAgZCA9IHJvdHIzMihkIF4gYSwgOCk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjID0gYyArIGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGIgPSByb3RyMzIoYiBeIGMsIDcpOyAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUoMCkKKworI2RlZmluZSBST1VORChyKSAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEcociwwLHZbIDBdLHZbIDRdLHZbIDhdLHZbMTJdKTsgXAorICAgIEcociwxLHZbIDFdLHZbIDVdLHZbIDldLHZbMTNdKTsgXAorICAgIEcociwyLHZbIDJdLHZbIDZdLHZbMTBdLHZbMTRdKTsgXAorICAgIEcociwzLHZbIDNdLHZbIDddLHZbMTFdLHZbMTVdKTsgXAorICAgIEcociw0LHZbIDBdLHZbIDVdLHZbMTBdLHZbMTVdKTsgXAorICAgIEcociw1LHZbIDFdLHZbIDZdLHZbMTFdLHZbMTJdKTsgXAorICAgIEcociw2LHZbIDJdLHZbIDddLHZbIDhdLHZbMTNdKTsgXAorICAgIEcociw3LHZbIDNdLHZbIDRdLHZbIDldLHZbMTRdKTsgXAorICB9IHdoaWxlKDApCisKK3N0YXRpYyB2b2lkIGJsYWtlMnNfY29tcHJlc3MoIGJsYWtlMnNfc3RhdGUgKlMsIGNvbnN0IHVpbnQ4X3QgaW5bQkxBS0UyU19CTE9DS0JZVEVTXSApCit7CisgIHVpbnQzMl90IG1bMTZdOworICB1aW50MzJfdCB2WzE2XTsKKyAgc2l6ZV90IGk7CisKKyAgZm9yKCBpID0gMDsgaSA8IDE2OyArK2kgKSB7CisgICAgbVtpXSA9IGxvYWQzMiggaW4gKyBpICogc2l6ZW9mKCBtW2ldICkgKTsKKyAgfQorCisgIGZvciggaSA9IDA7IGkgPCA4OyArK2kgKSB7CisgICAgdltpXSA9IFMtPmhbaV07CisgIH0KKworICB2WyA4XSA9IGJsYWtlMnNfSVZbMF07CisgIHZbIDldID0gYmxha2Uyc19JVlsxXTsKKyAgdlsxMF0gPSBibGFrZTJzX0lWWzJdOworICB2WzExXSA9IGJsYWtlMnNfSVZbM107CisgIHZbMTJdID0gUy0+dFswXSBeIGJsYWtlMnNfSVZbNF07CisgIHZbMTNdID0gUy0+dFsxXSBeIGJsYWtlMnNfSVZbNV07CisgIHZbMTRdID0gUy0+ZlswXSBeIGJsYWtlMnNfSVZbNl07CisgIHZbMTVdID0gUy0+ZlsxXSBeIGJsYWtlMnNfSVZbN107CisKKyAgUk9VTkQoIDAgKTsKKyAgUk9VTkQoIDEgKTsKKyAgUk9VTkQoIDIgKTsKKyAgUk9VTkQoIDMgKTsKKyAgUk9VTkQoIDQgKTsKKyAgUk9VTkQoIDUgKTsKKyAgUk9VTkQoIDYgKTsKKyAgUk9VTkQoIDcgKTsKKyAgUk9VTkQoIDggKTsKKyAgUk9VTkQoIDkgKTsKKworICBmb3IoIGkgPSAwOyBpIDwgODsgKytpICkgeworICAgIFMtPmhbaV0gPSBTLT5oW2ldIF4gdltpXSBeIHZbaSArIDhdOworICB9Cit9CisKKyN1bmRlZiBHCisjdW5kZWYgUk9VTkQKKworaW50IGJsYWtlMnNfdXBkYXRlKCBibGFrZTJzX3N0YXRlICpTLCBjb25zdCB2b2lkICpwaW4sIHNpemVfdCBpbmxlbiApCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBpbiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopcGluOworICBpZiggaW5sZW4gPiAwICkKKyAgeworICAgIHNpemVfdCBsZWZ0ID0gUy0+YnVmbGVuOworICAgIHNpemVfdCBmaWxsID0gQkxBS0UyU19CTE9DS0JZVEVTIC0gbGVmdDsKKyAgICBpZiggaW5sZW4gPiBmaWxsICkKKyAgICB7CisgICAgICBTLT5idWZsZW4gPSAwOworICAgICAgbWVtY3B5KCBTLT5idWYgKyBsZWZ0LCBpbiwgZmlsbCApOyAvKiBGaWxsIGJ1ZmZlciAqLworICAgICAgYmxha2Uyc19pbmNyZW1lbnRfY291bnRlciggUywgQkxBS0UyU19CTE9DS0JZVEVTICk7CisgICAgICBibGFrZTJzX2NvbXByZXNzKCBTLCBTLT5idWYgKTsgLyogQ29tcHJlc3MgKi8KKyAgICAgIGluICs9IGZpbGw7IGlubGVuIC09IGZpbGw7CisgICAgICB3aGlsZShpbmxlbiA+IEJMQUtFMlNfQkxPQ0tCWVRFUykgeworICAgICAgICBibGFrZTJzX2luY3JlbWVudF9jb3VudGVyKFMsIEJMQUtFMlNfQkxPQ0tCWVRFUyk7CisgICAgICAgIGJsYWtlMnNfY29tcHJlc3MoIFMsIGluICk7CisgICAgICAgIGluICs9IEJMQUtFMlNfQkxPQ0tCWVRFUzsKKyAgICAgICAgaW5sZW4gLT0gQkxBS0UyU19CTE9DS0JZVEVTOworICAgICAgfQorICAgIH0KKyAgICBtZW1jcHkoIFMtPmJ1ZiArIFMtPmJ1ZmxlbiwgaW4sIGlubGVuICk7CisgICAgUy0+YnVmbGVuICs9IGlubGVuOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgYmxha2Uyc19maW5hbCggYmxha2Uyc19zdGF0ZSAqUywgdm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuICkKK3sKKyAgdWludDhfdCBidWZmZXJbQkxBS0UyU19PVVRCWVRFU10gPSB7MH07CisgIHNpemVfdCBpOworCisgIGlmKCBvdXQgPT0gTlVMTCB8fCBvdXRsZW4gPCBTLT5vdXRsZW4gKQorICAgIHJldHVybiAtMTsKKworICBpZiggYmxha2Uyc19pc19sYXN0YmxvY2soIFMgKSApCisgICAgcmV0dXJuIC0xOworCisgIGJsYWtlMnNfaW5jcmVtZW50X2NvdW50ZXIoIFMsICggdWludDMyX3QgKVMtPmJ1ZmxlbiApOworICBibGFrZTJzX3NldF9sYXN0YmxvY2soIFMgKTsKKyAgbWVtc2V0KCBTLT5idWYgKyBTLT5idWZsZW4sIDAsIEJMQUtFMlNfQkxPQ0tCWVRFUyAtIFMtPmJ1ZmxlbiApOyAvKiBQYWRkaW5nICovCisgIGJsYWtlMnNfY29tcHJlc3MoIFMsIFMtPmJ1ZiApOworCisgIGZvciggaSA9IDA7IGkgPCA4OyArK2kgKSAvKiBPdXRwdXQgZnVsbCBoYXNoIHRvIHRlbXAgYnVmZmVyICovCisgICAgc3RvcmUzMiggYnVmZmVyICsgc2l6ZW9mKCBTLT5oW2ldICkgKiBpLCBTLT5oW2ldICk7CisKKyAgbWVtY3B5KCBvdXQsIGJ1ZmZlciwgb3V0bGVuICk7CisgIHNlY3VyZV96ZXJvX21lbW9yeShidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBibGFrZTJzKCB2b2lkICpvdXQsIHNpemVfdCBvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgaW5sZW4sIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiApCit7CisgIGJsYWtlMnNfc3RhdGUgU1sxXTsKKworICAvKiBWZXJpZnkgcGFyYW1ldGVycyAqLworICBpZiAoIE5VTEwgPT0gaW4gJiYgaW5sZW4gPiAwICkgcmV0dXJuIC0xOworCisgIGlmICggTlVMTCA9PSBvdXQgKSByZXR1cm4gLTE7CisKKyAgaWYgKCBOVUxMID09IGtleSAmJiBrZXlsZW4gPiAwKSByZXR1cm4gLTE7CisKKyAgaWYoICFvdXRsZW4gfHwgb3V0bGVuID4gQkxBS0UyU19PVVRCWVRFUyApIHJldHVybiAtMTsKKworICBpZigga2V5bGVuID4gQkxBS0UyU19LRVlCWVRFUyApIHJldHVybiAtMTsKKworICBpZigga2V5bGVuID4gMCApCisgIHsKKyAgICBpZiggYmxha2Uyc19pbml0X2tleSggUywgb3V0bGVuLCBrZXksIGtleWxlbiApIDwgMCApIHJldHVybiAtMTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBpZiggYmxha2Uyc19pbml0KCBTLCBvdXRsZW4gKSA8IDAgKSByZXR1cm4gLTE7CisgIH0KKworICBibGFrZTJzX3VwZGF0ZSggUywgKCBjb25zdCB1aW50OF90ICogKWluLCBpbmxlbiApOworICBibGFrZTJzX2ZpbmFsKCBTLCBvdXQsIG91dGxlbiApOworICByZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoU1VQRVJDT1ApCitpbnQgY3J5cHRvX2hhc2goIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmxlbiApCit7CisgIHJldHVybiBibGFrZTJzKCBvdXQsIEJMQUtFMlNfT1VUQllURVMsIGluLCBpbmxlbiwgTlVMTCwgMCApOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJMQUtFMlNfU0VMRlRFU1QpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiYmxha2UyLWthdC5oIgoraW50IG1haW4oIHZvaWQgKQoreworICB1aW50OF90IGtleVtCTEFLRTJTX0tFWUJZVEVTXTsKKyAgdWludDhfdCBidWZbQkxBS0UyX0tBVF9MRU5HVEhdOworICBzaXplX3QgaSwgc3RlcDsKKworICBmb3IoIGkgPSAwOyBpIDwgQkxBS0UyU19LRVlCWVRFUzsgKytpICkKKyAgICBrZXlbaV0gPSAoIHVpbnQ4X3QgKWk7CisKKyAgZm9yKCBpID0gMDsgaSA8IEJMQUtFMl9LQVRfTEVOR1RIOyArK2kgKQorICAgIGJ1ZltpXSA9ICggdWludDhfdCApaTsKKworICAvKiBUZXN0IHNpbXBsZSBBUEkgKi8KKyAgZm9yKCBpID0gMDsgaSA8IEJMQUtFMl9LQVRfTEVOR1RIOyArK2kgKQorICB7CisgICAgdWludDhfdCBoYXNoW0JMQUtFMlNfT1VUQllURVNdOworICAgIGJsYWtlMnMoIGhhc2gsIEJMQUtFMlNfT1VUQllURVMsIGJ1ZiwgaSwga2V5LCBCTEFLRTJTX0tFWUJZVEVTICk7CisKKyAgICBpZiggMCAhPSBtZW1jbXAoIGhhc2gsIGJsYWtlMnNfa2V5ZWRfa2F0W2ldLCBCTEFLRTJTX09VVEJZVEVTICkgKQorICAgIHsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgIH0KKworICAvKiBUZXN0IHN0cmVhbWluZyBBUEkgKi8KKyAgZm9yKHN0ZXAgPSAxOyBzdGVwIDwgQkxBS0UyU19CTE9DS0JZVEVTOyArK3N0ZXApIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgQkxBS0UyX0tBVF9MRU5HVEg7ICsraSkgeworICAgICAgdWludDhfdCBoYXNoW0JMQUtFMlNfT1VUQllURVNdOworICAgICAgYmxha2Uyc19zdGF0ZSBTOworICAgICAgdWludDhfdCAqIHAgPSBidWY7CisgICAgICBzaXplX3QgbWxlbiA9IGk7CisgICAgICBpbnQgZXJyID0gMDsKKworICAgICAgaWYoIChlcnIgPSBibGFrZTJzX2luaXRfa2V5KCZTLCBCTEFLRTJTX09VVEJZVEVTLCBrZXksIEJMQUtFMlNfS0VZQllURVMpKSA8IDAgKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgd2hpbGUgKG1sZW4gPj0gc3RlcCkgeworICAgICAgICBpZiAoIChlcnIgPSBibGFrZTJzX3VwZGF0ZSgmUywgcCwgc3RlcCkpIDwgMCApIHsKKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgbWxlbiAtPSBzdGVwOworICAgICAgICBwICs9IHN0ZXA7CisgICAgICB9CisgICAgICBpZiAoIChlcnIgPSBibGFrZTJzX3VwZGF0ZSgmUywgcCwgbWxlbikpIDwgMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisgICAgICBpZiAoIChlcnIgPSBibGFrZTJzX2ZpbmFsKCZTLCBoYXNoLCBCTEFLRTJTX09VVEJZVEVTKSkgPCAwKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgaWYgKDAgIT0gbWVtY21wKGhhc2gsIGJsYWtlMnNfa2V5ZWRfa2F0W2ldLCBCTEFLRTJTX09VVEJZVEVTKSkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHV0cyggIm9rIiApOworICByZXR1cm4gMDsKK2ZhaWw6CisgIHB1dHMoImVycm9yIik7CisgIHJldHVybiAtMTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2Uyc3BfcmVmLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9ibGFrZTJzcF9yZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWYxMDEwCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfYmxha2Uyc3BfcmVmLmMKQEAgLTAsMCArMSwzNTkgQEAKKy8qCisgICBCTEFLRTIgcmVmZXJlbmNlIHNvdXJjZSBjb2RlIHBhY2thZ2UgLSByZWZlcmVuY2UgQyBpbXBsZW1lbnRhdGlvbnMKKworICAgQ29weXJpZ2h0IDIwMTIsIFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4uICBZb3UgbWF5IHVzZSB0aGlzIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhlIENDMCwgdGhlIE9wZW5TU0wgTGljZW5jZSwgb3IgdGhlIEFwYWNoZSBQdWJsaWMgTGljZW5zZSAyLjAsIGF0CisgICB5b3VyIG9wdGlvbi4gIFRoZSB0ZXJtcyBvZiB0aGVzZSBsaWNlbnNlcyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgIC0gQ0MwIDEuMCBVbml2ZXJzYWwgOiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAKKyAgIC0gT3BlblNTTCBsaWNlbnNlICAgOiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1sCisgICAtIEFwYWNoZSAyLjAgICAgICAgIDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJMQUtFMiBoYXNoIGZ1bmN0aW9uIGNhbiBiZSBmb3VuZCBhdAorICAgaHR0cHM6Ly9ibGFrZTIubmV0LgorKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiBkZWZpbmVkKF9PUEVOTVApCisjaW5jbHVkZSA8b21wLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyY2hpdmVfYmxha2UyLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV9ibGFrZTJfaW1wbC5oIgorCisjZGVmaW5lIFBBUkFMTEVMSVNNX0RFR1JFRSA4CisKKy8qCisgIGJsYWtlMnNwX2luaXRfcGFyYW0gZGVmYXVsdHMgdG8gc2V0dGluZyB0aGUgZXhwZWN0aW5nIG91dHB1dCBsZW5ndGgKKyAgZnJvbSB0aGUgZGlnZXN0X2xlbmd0aCBwYXJhbWV0ZXIgYmxvY2sgZmllbGQuCisKKyAgSW4gc29tZSBjYXNlcywgaG93ZXZlciwgd2UgZG8gbm90IHdhbnQgdGhpcywgYXMgdGhlIG91dHB1dCBsZW5ndGgKKyAgb2YgdGhlc2UgaW5zdGFuY2VzIGlzIGdpdmVuIGJ5IGlubmVyX2xlbmd0aCBpbnN0ZWFkLgorKi8KK3N0YXRpYyBpbnQgYmxha2Uyc3BfaW5pdF9sZWFmX3BhcmFtKCBibGFrZTJzX3N0YXRlICpTLCBjb25zdCBibGFrZTJzX3BhcmFtICpQICkKK3sKKyAgaW50IGVyciA9IGJsYWtlMnNfaW5pdF9wYXJhbShTLCBQKTsKKyAgUy0+b3V0bGVuID0gUC0+aW5uZXJfbGVuZ3RoOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJsYWtlMnNwX2luaXRfbGVhZiggYmxha2Uyc19zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiwgc2l6ZV90IGtleWxlbiwgdWludDMyX3Qgb2Zmc2V0ICkKK3sKKyAgYmxha2Uyc19wYXJhbSBQWzFdOworICBQLT5kaWdlc3RfbGVuZ3RoID0gKHVpbnQ4X3Qpb3V0bGVuOworICBQLT5rZXlfbGVuZ3RoID0gKHVpbnQ4X3Qpa2V5bGVuOworICBQLT5mYW5vdXQgPSBQQVJBTExFTElTTV9ERUdSRUU7CisgIFAtPmRlcHRoID0gMjsKKyAgc3RvcmUzMiggJlAtPmxlYWZfbGVuZ3RoLCAwICk7CisgIHN0b3JlMzIoICZQLT5ub2RlX29mZnNldCwgb2Zmc2V0ICk7CisgIHN0b3JlMTYoICZQLT54b2ZfbGVuZ3RoLCAwICk7CisgIFAtPm5vZGVfZGVwdGggPSAwOworICBQLT5pbm5lcl9sZW5ndGggPSBCTEFLRTJTX09VVEJZVEVTOworICBtZW1zZXQoIFAtPnNhbHQsIDAsIHNpemVvZiggUC0+c2FsdCApICk7CisgIG1lbXNldCggUC0+cGVyc29uYWwsIDAsIHNpemVvZiggUC0+cGVyc29uYWwgKSApOworICByZXR1cm4gYmxha2Uyc3BfaW5pdF9sZWFmX3BhcmFtKCBTLCBQICk7Cit9CisKK3N0YXRpYyBpbnQgYmxha2Uyc3BfaW5pdF9yb290KCBibGFrZTJzX3N0YXRlICpTLCBzaXplX3Qgb3V0bGVuLCBzaXplX3Qga2V5bGVuICkKK3sKKyAgYmxha2Uyc19wYXJhbSBQWzFdOworICBQLT5kaWdlc3RfbGVuZ3RoID0gKHVpbnQ4X3Qpb3V0bGVuOworICBQLT5rZXlfbGVuZ3RoID0gKHVpbnQ4X3Qpa2V5bGVuOworICBQLT5mYW5vdXQgPSBQQVJBTExFTElTTV9ERUdSRUU7CisgIFAtPmRlcHRoID0gMjsKKyAgc3RvcmUzMiggJlAtPmxlYWZfbGVuZ3RoLCAwICk7CisgIHN0b3JlMzIoICZQLT5ub2RlX29mZnNldCwgMCApOworICBzdG9yZTE2KCAmUC0+eG9mX2xlbmd0aCwgMCApOworICBQLT5ub2RlX2RlcHRoID0gMTsKKyAgUC0+aW5uZXJfbGVuZ3RoID0gQkxBS0UyU19PVVRCWVRFUzsKKyAgbWVtc2V0KCBQLT5zYWx0LCAwLCBzaXplb2YoIFAtPnNhbHQgKSApOworICBtZW1zZXQoIFAtPnBlcnNvbmFsLCAwLCBzaXplb2YoIFAtPnBlcnNvbmFsICkgKTsKKyAgcmV0dXJuIGJsYWtlMnNfaW5pdF9wYXJhbSggUywgUCApOworfQorCisKK2ludCBibGFrZTJzcF9pbml0KCBibGFrZTJzcF9zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiApCit7CisgIHNpemVfdCBpOworCisgIGlmKCAhb3V0bGVuIHx8IG91dGxlbiA+IEJMQUtFMlNfT1VUQllURVMgKSByZXR1cm4gLTE7CisKKyAgbWVtc2V0KCBTLT5idWYsIDAsIHNpemVvZiggUy0+YnVmICkgKTsKKyAgUy0+YnVmbGVuID0gMDsKKyAgUy0+b3V0bGVuID0gb3V0bGVuOworCisgIGlmKCBibGFrZTJzcF9pbml0X3Jvb3QoIFMtPlIsIG91dGxlbiwgMCApIDwgMCApCisgICAgcmV0dXJuIC0xOworCisgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgaWYoIGJsYWtlMnNwX2luaXRfbGVhZiggUy0+U1tpXSwgb3V0bGVuLCAwLCAodWludDMyX3QpaSApIDwgMCApIHJldHVybiAtMTsKKworICBTLT5SLT5sYXN0X25vZGUgPSAxOworICBTLT5TW1BBUkFMTEVMSVNNX0RFR1JFRSAtIDFdLT5sYXN0X25vZGUgPSAxOworICByZXR1cm4gMDsKK30KKworaW50IGJsYWtlMnNwX2luaXRfa2V5KCBibGFrZTJzcF9zdGF0ZSAqUywgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICkKK3sKKyAgc2l6ZV90IGk7CisKKyAgaWYoICFvdXRsZW4gfHwgb3V0bGVuID4gQkxBS0UyU19PVVRCWVRFUyApIHJldHVybiAtMTsKKworICBpZiggIWtleSB8fCAha2V5bGVuIHx8IGtleWxlbiA+IEJMQUtFMlNfS0VZQllURVMgKSByZXR1cm4gLTE7CisKKyAgbWVtc2V0KCBTLT5idWYsIDAsIHNpemVvZiggUy0+YnVmICkgKTsKKyAgUy0+YnVmbGVuID0gMDsKKyAgUy0+b3V0bGVuID0gb3V0bGVuOworCisgIGlmKCBibGFrZTJzcF9pbml0X3Jvb3QoIFMtPlIsIG91dGxlbiwga2V5bGVuICkgPCAwICkKKyAgICByZXR1cm4gLTE7CisKKyAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyAgICBpZiggYmxha2Uyc3BfaW5pdF9sZWFmKCBTLT5TW2ldLCBvdXRsZW4sIGtleWxlbiwgKHVpbnQzMl90KWkgKSA8IDAgKSByZXR1cm4gLTE7CisKKyAgUy0+Ui0+bGFzdF9ub2RlID0gMTsKKyAgUy0+U1tQQVJBTExFTElTTV9ERUdSRUUgLSAxXS0+bGFzdF9ub2RlID0gMTsKKyAgeworICAgIHVpbnQ4X3QgYmxvY2tbQkxBS0UyU19CTE9DS0JZVEVTXTsKKyAgICBtZW1zZXQoIGJsb2NrLCAwLCBCTEFLRTJTX0JMT0NLQllURVMgKTsKKyAgICBtZW1jcHkoIGJsb2NrLCBrZXksIGtleWxlbiApOworCisgICAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyAgICAgIGJsYWtlMnNfdXBkYXRlKCBTLT5TW2ldLCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7CisKKyAgICBzZWN1cmVfemVyb19tZW1vcnkoIGJsb2NrLCBCTEFLRTJTX0JMT0NLQllURVMgKTsgLyogQnVybiB0aGUga2V5IGZyb20gc3RhY2sgKi8KKyAgfQorICByZXR1cm4gMDsKK30KKworCitpbnQgYmxha2Uyc3BfdXBkYXRlKCBibGFrZTJzcF9zdGF0ZSAqUywgY29uc3Qgdm9pZCAqcGluLCBzaXplX3QgaW5sZW4gKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICogaW4gPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXBpbjsKKyAgc2l6ZV90IGxlZnQgPSBTLT5idWZsZW47CisgIHNpemVfdCBmaWxsID0gc2l6ZW9mKCBTLT5idWYgKSAtIGxlZnQ7CisgIHNpemVfdCBpOworCisgIGlmKCBsZWZ0ICYmIGlubGVuID49IGZpbGwgKQorICB7CisgICAgbWVtY3B5KCBTLT5idWYgKyBsZWZ0LCBpbiwgZmlsbCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyAgICAgIGJsYWtlMnNfdXBkYXRlKCBTLT5TW2ldLCBTLT5idWYgKyBpICogQkxBS0UyU19CTE9DS0JZVEVTLCBCTEFLRTJTX0JMT0NLQllURVMgKTsKKworICAgIGluICs9IGZpbGw7CisgICAgaW5sZW4gLT0gZmlsbDsKKyAgICBsZWZ0ID0gMDsKKyAgfQorCisjaWYgZGVmaW5lZChfT1BFTk1QKQorICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBzaGFyZWQoUyksIG51bV90aHJlYWRzKFBBUkFMTEVMSVNNX0RFR1JFRSkKKyNlbHNlCisgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisjZW5kaWYKKyAgeworI2lmIGRlZmluZWQoX09QRU5NUCkKKyAgICBzaXplX3QgICAgICBpID0gb21wX2dldF90aHJlYWRfbnVtKCk7CisjZW5kaWYKKyAgICBzaXplX3QgaW5sZW5fXyA9IGlubGVuOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluX18gPSAoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiApaW47CisgICAgaW5fXyArPSBpICogQkxBS0UyU19CTE9DS0JZVEVTOworCisgICAgd2hpbGUoIGlubGVuX18gPj0gUEFSQUxMRUxJU01fREVHUkVFICogQkxBS0UyU19CTE9DS0JZVEVTICkKKyAgICB7CisgICAgICBibGFrZTJzX3VwZGF0ZSggUy0+U1tpXSwgaW5fXywgQkxBS0UyU19CTE9DS0JZVEVTICk7CisgICAgICBpbl9fICs9IFBBUkFMTEVMSVNNX0RFR1JFRSAqIEJMQUtFMlNfQkxPQ0tCWVRFUzsKKyAgICAgIGlubGVuX18gLT0gUEFSQUxMRUxJU01fREVHUkVFICogQkxBS0UyU19CTE9DS0JZVEVTOworICAgIH0KKyAgfQorCisgIGluICs9IGlubGVuIC0gaW5sZW4gJSAoIFBBUkFMTEVMSVNNX0RFR1JFRSAqIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworICBpbmxlbiAlPSBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVM7CisKKyAgaWYoIGlubGVuID4gMCApCisgICAgbWVtY3B5KCBTLT5idWYgKyBsZWZ0LCBpbiwgaW5sZW4gKTsKKworICBTLT5idWZsZW4gPSBsZWZ0ICsgaW5sZW47CisgIHJldHVybiAwOworfQorCisKK2ludCBibGFrZTJzcF9maW5hbCggYmxha2Uyc3Bfc3RhdGUgKlMsIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiApCit7CisgIHVpbnQ4X3QgaGFzaFtQQVJBTExFTElTTV9ERUdSRUVdW0JMQUtFMlNfT1VUQllURVNdOworICBzaXplX3QgaTsKKworICBpZihvdXQgPT0gTlVMTCB8fCBvdXRsZW4gPCBTLT5vdXRsZW4pIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorICB7CisgICAgaWYoIFMtPmJ1ZmxlbiA+IGkgKiBCTEFLRTJTX0JMT0NLQllURVMgKQorICAgIHsKKyAgICAgIHNpemVfdCBsZWZ0ID0gUy0+YnVmbGVuIC0gaSAqIEJMQUtFMlNfQkxPQ0tCWVRFUzsKKworICAgICAgaWYoIGxlZnQgPiBCTEFLRTJTX0JMT0NLQllURVMgKSBsZWZ0ID0gQkxBS0UyU19CTE9DS0JZVEVTOworCisgICAgICBibGFrZTJzX3VwZGF0ZSggUy0+U1tpXSwgUy0+YnVmICsgaSAqIEJMQUtFMlNfQkxPQ0tCWVRFUywgbGVmdCApOworICAgIH0KKworICAgIGJsYWtlMnNfZmluYWwoIFMtPlNbaV0sIGhhc2hbaV0sIEJMQUtFMlNfT1VUQllURVMgKTsKKyAgfQorCisgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgYmxha2Uyc191cGRhdGUoIFMtPlIsIGhhc2hbaV0sIEJMQUtFMlNfT1VUQllURVMgKTsKKworICByZXR1cm4gYmxha2Uyc19maW5hbCggUy0+Uiwgb3V0LCBTLT5vdXRsZW4gKTsKK30KKworCitpbnQgYmxha2Uyc3AoIHZvaWQgKm91dCwgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqaW4sIHNpemVfdCBpbmxlbiwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuICkKK3sKKyAgdWludDhfdCBoYXNoW1BBUkFMTEVMSVNNX0RFR1JFRV1bQkxBS0UyU19PVVRCWVRFU107CisgIGJsYWtlMnNfc3RhdGUgU1tQQVJBTExFTElTTV9ERUdSRUVdWzFdOworICBibGFrZTJzX3N0YXRlIEZTWzFdOworICBzaXplX3QgaTsKKworICAvKiBWZXJpZnkgcGFyYW1ldGVycyAqLworICBpZiAoIE5VTEwgPT0gaW4gJiYgaW5sZW4gPiAwICkgcmV0dXJuIC0xOworCisgIGlmICggTlVMTCA9PSBvdXQgKSByZXR1cm4gLTE7CisKKyAgaWYgKCBOVUxMID09IGtleSAmJiBrZXlsZW4gPiAwKSByZXR1cm4gLTE7CisKKyAgaWYoICFvdXRsZW4gfHwgb3V0bGVuID4gQkxBS0UyU19PVVRCWVRFUyApIHJldHVybiAtMTsKKworICBpZigga2V5bGVuID4gQkxBS0UyU19LRVlCWVRFUyApIHJldHVybiAtMTsKKworICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorICAgIGlmKCBibGFrZTJzcF9pbml0X2xlYWYoIFNbaV0sIG91dGxlbiwga2V5bGVuLCAodWludDMyX3QpaSApIDwgMCApIHJldHVybiAtMTsKKworICBTW1BBUkFMTEVMSVNNX0RFR1JFRSAtIDFdLT5sYXN0X25vZGUgPSAxOyAvKiBtYXJrIGxhc3Qgbm9kZSAqLworCisgIGlmKCBrZXlsZW4gPiAwICkKKyAgeworICAgIHVpbnQ4X3QgYmxvY2tbQkxBS0UyU19CTE9DS0JZVEVTXTsKKyAgICBtZW1zZXQoIGJsb2NrLCAwLCBCTEFLRTJTX0JMT0NLQllURVMgKTsKKyAgICBtZW1jcHkoIGJsb2NrLCBrZXksIGtleWxlbiApOworCisgICAgZm9yKCBpID0gMDsgaSA8IFBBUkFMTEVMSVNNX0RFR1JFRTsgKytpICkKKyAgICAgIGJsYWtlMnNfdXBkYXRlKCBTW2ldLCBibG9jaywgQkxBS0UyU19CTE9DS0JZVEVTICk7CisKKyAgICBzZWN1cmVfemVyb19tZW1vcnkoIGJsb2NrLCBCTEFLRTJTX0JMT0NLQllURVMgKTsgLyogQnVybiB0aGUga2V5IGZyb20gc3RhY2sgKi8KKyAgfQorCisjaWYgZGVmaW5lZChfT1BFTk1QKQorICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBzaGFyZWQoUyxoYXNoKSwgbnVtX3RocmVhZHMoUEFSQUxMRUxJU01fREVHUkVFKQorI2Vsc2UKKworICBmb3IoIGkgPSAwOyBpIDwgUEFSQUxMRUxJU01fREVHUkVFOyArK2kgKQorI2VuZGlmCisgIHsKKyNpZiBkZWZpbmVkKF9PUEVOTVApCisgICAgc2l6ZV90ICAgICAgaSA9IG9tcF9nZXRfdGhyZWFkX251bSgpOworI2VuZGlmCisgICAgc2l6ZV90IGlubGVuX18gPSBpbmxlbjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbl9fID0gKCBjb25zdCB1bnNpZ25lZCBjaGFyICogKWluOworICAgIGluX18gKz0gaSAqIEJMQUtFMlNfQkxPQ0tCWVRFUzsKKworICAgIHdoaWxlKCBpbmxlbl9fID49IFBBUkFMTEVMSVNNX0RFR1JFRSAqIEJMQUtFMlNfQkxPQ0tCWVRFUyApCisgICAgeworICAgICAgYmxha2Uyc191cGRhdGUoIFNbaV0sIGluX18sIEJMQUtFMlNfQkxPQ0tCWVRFUyApOworICAgICAgaW5fXyArPSBQQVJBTExFTElTTV9ERUdSRUUgKiBCTEFLRTJTX0JMT0NLQllURVM7CisgICAgICBpbmxlbl9fIC09IFBBUkFMTEVMSVNNX0RFR1JFRSAqIEJMQUtFMlNfQkxPQ0tCWVRFUzsKKyAgICB9CisKKyAgICBpZiggaW5sZW5fXyA+IGkgKiBCTEFLRTJTX0JMT0NLQllURVMgKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdCBsZWZ0ID0gaW5sZW5fXyAtIGkgKiBCTEFLRTJTX0JMT0NLQllURVM7CisgICAgICBjb25zdCBzaXplX3QgbGVuID0gbGVmdCA8PSBCTEFLRTJTX0JMT0NLQllURVMgPyBsZWZ0IDogQkxBS0UyU19CTE9DS0JZVEVTOworICAgICAgYmxha2Uyc191cGRhdGUoIFNbaV0sIGluX18sIGxlbiApOworICAgIH0KKworICAgIGJsYWtlMnNfZmluYWwoIFNbaV0sIGhhc2hbaV0sIEJMQUtFMlNfT1VUQllURVMgKTsKKyAgfQorCisgIGlmKCBibGFrZTJzcF9pbml0X3Jvb3QoIEZTLCBvdXRsZW4sIGtleWxlbiApIDwgMCApCisgICAgcmV0dXJuIC0xOworCisgIEZTLT5sYXN0X25vZGUgPSAxOworCisgIGZvciggaSA9IDA7IGkgPCBQQVJBTExFTElTTV9ERUdSRUU7ICsraSApCisgICAgYmxha2Uyc191cGRhdGUoIEZTLCBoYXNoW2ldLCBCTEFLRTJTX09VVEJZVEVTICk7CisKKyAgcmV0dXJuIGJsYWtlMnNfZmluYWwoIEZTLCBvdXQsIG91dGxlbiApOworfQorCisKKworI2lmIGRlZmluZWQoQkxBS0UyU1BfU0VMRlRFU1QpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiYmxha2UyLWthdC5oIgoraW50IG1haW4oIHZvaWQgKQoreworICB1aW50OF90IGtleVtCTEFLRTJTX0tFWUJZVEVTXTsKKyAgdWludDhfdCBidWZbQkxBS0UyX0tBVF9MRU5HVEhdOworICBzaXplX3QgaSwgc3RlcDsKKworICBmb3IoIGkgPSAwOyBpIDwgQkxBS0UyU19LRVlCWVRFUzsgKytpICkKKyAgICBrZXlbaV0gPSAoIHVpbnQ4X3QgKWk7CisKKyAgZm9yKCBpID0gMDsgaSA8IEJMQUtFMl9LQVRfTEVOR1RIOyArK2kgKQorICAgIGJ1ZltpXSA9ICggdWludDhfdCApaTsKKworICAvKiBUZXN0IHNpbXBsZSBBUEkgKi8KKyAgZm9yKCBpID0gMDsgaSA8IEJMQUtFMl9LQVRfTEVOR1RIOyArK2kgKQorICB7CisgICAgdWludDhfdCBoYXNoW0JMQUtFMlNfT1VUQllURVNdOworICAgIGJsYWtlMnNwKCBoYXNoLCBCTEFLRTJTX09VVEJZVEVTLCBidWYsIGksIGtleSwgQkxBS0UyU19LRVlCWVRFUyApOworCisgICAgaWYoIDAgIT0gbWVtY21wKCBoYXNoLCBibGFrZTJzcF9rZXllZF9rYXRbaV0sIEJMQUtFMlNfT1VUQllURVMgKSApCisgICAgeworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgfQorCisgIC8qIFRlc3Qgc3RyZWFtaW5nIEFQSSAqLworICBmb3Ioc3RlcCA9IDE7IHN0ZXAgPCBCTEFLRTJTX0JMT0NLQllURVM7ICsrc3RlcCkgeworICAgIGZvciAoaSA9IDA7IGkgPCBCTEFLRTJfS0FUX0xFTkdUSDsgKytpKSB7CisgICAgICB1aW50OF90IGhhc2hbQkxBS0UyU19PVVRCWVRFU107CisgICAgICBibGFrZTJzcF9zdGF0ZSBTOworICAgICAgdWludDhfdCAqIHAgPSBidWY7CisgICAgICBzaXplX3QgbWxlbiA9IGk7CisgICAgICBpbnQgZXJyID0gMDsKKworICAgICAgaWYoIChlcnIgPSBibGFrZTJzcF9pbml0X2tleSgmUywgQkxBS0UyU19PVVRCWVRFUywga2V5LCBCTEFLRTJTX0tFWUJZVEVTKSkgPCAwICkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIHdoaWxlIChtbGVuID49IHN0ZXApIHsKKyAgICAgICAgaWYgKCAoZXJyID0gYmxha2Uyc3BfdXBkYXRlKCZTLCBwLCBzdGVwKSkgPCAwICkgeworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICBtbGVuIC09IHN0ZXA7CisgICAgICAgIHAgKz0gc3RlcDsKKyAgICAgIH0KKyAgICAgIGlmICggKGVyciA9IGJsYWtlMnNwX3VwZGF0ZSgmUywgcCwgbWxlbikpIDwgMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisgICAgICBpZiAoIChlcnIgPSBibGFrZTJzcF9maW5hbCgmUywgaGFzaCwgQkxBS0UyU19PVVRCWVRFUykpIDwgMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIGlmICgwICE9IG1lbWNtcChoYXNoLCBibGFrZTJzcF9rZXllZF9rYXRbaV0sIEJMQUtFMlNfT1VUQllURVMpKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwdXRzKCAib2siICk7CisgIHJldHVybiAwOworZmFpbDoKKyAgcHV0cygiZXJyb3IiKTsKKyAgcmV0dXJuIC0xOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jbWRsaW5lX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NtZGxpbmVfcHJpdmF0ZS5oCmluZGV4IDRlNDA5ZTguLjU3YTE5NDkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NtZGxpbmVfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NtZGxpbmVfcHJpdmF0ZS5oCkBAIC0yNSwxNSArMjUsMTUgQEAKICAqICRGcmVlQlNEJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9DTURMSU5FX1BSSVZBVEVfSAorI2RlZmluZSBBUkNISVZFX0NNRExJTkVfUFJJVkFURV9ICisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjaWZuZGVmIF9fTElCQVJDSElWRV9URVNUCiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9DTURMSU5FX1BSSVZBVEVfSAotI2RlZmluZSBBUkNISVZFX0NNRExJTkVfUFJJVkFURV9ICi0KIHN0cnVjdCBhcmNoaXZlX2NtZGxpbmUgewogICAgICAgICBjaGFyICAgICAgICAgICAgKnBhdGg7CiAgICAgICAgIGNoYXIgICAgICAgICAgICAqKmFyZ3Y7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcmMzMi5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3JjMzIuaAppbmRleCBjZDYzM2FmLi40ZjFhZWQzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcmMzMi5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NyYzMyLmgKQEAgLTI1LDYgKzI1LDkgQEAKICAqICRGcmVlQlNEOiBoZWFkL2xpYi9saWJhcmNoaXZlL2FyY2hpdmVfY3JjMzIuaCAyMDExMDIgMjAwOS0xMi0yOCAwMzoxMTozNloga2llbnR6bGUgJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9DUkMzMl9ICisjZGVmaW5lIEFSQ0hJVkVfQ1JDMzJfSAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKQEAgLTc2LDMgKzc5LDUgQEAKIAkJY3JjID0gY3JjX3RibFsoY3JjIF4gKnArKykgJiAweGZmXSBeIChjcmMgPj4gOCk7CiAJcmV0dXJuIChjcmMgXiAweGZmZmZmZmZmVUwpOwogfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NyeXB0b3IuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2NyeXB0b3IuYwppbmRleCA3MTk2N2M5Li44YWIyYjA5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcnlwdG9yLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvci5jCkBAIC04NSw2ICs4NSwzNSBAQAogCXJldHVybiAoQkNSWVBUX1NVQ0NFU1Moc3RhdHVzKSkgPyAwOiAtMTsKIH0KIAorI2VsaWYgZGVmaW5lZChIQVZFX0xJQk1CRURDUllQVE8pICYmIGRlZmluZWQoSEFWRV9NQkVEVExTX1BLQ1M1X0gpCisKK3N0YXRpYyBpbnQKK3Bia2RmMl9zaGExKGNvbnN0IGNoYXIgKnB3LCBzaXplX3QgcHdfbGVuLCBjb25zdCB1aW50OF90ICpzYWx0LAorICAgIHNpemVfdCBzYWx0X2xlbiwgdW5zaWduZWQgcm91bmRzLCB1aW50OF90ICpkZXJpdmVkX2tleSwKKyAgICBzaXplX3QgZGVyaXZlZF9rZXlfbGVuKQoreworCW1iZWR0bHNfbWRfY29udGV4dF90IGN0eDsKKwljb25zdCBtYmVkdGxzX21kX2luZm9fdCAqaW5mbzsKKwlpbnQgcmV0OworCisJbWJlZHRsc19tZF9pbml0KCZjdHgpOworCWluZm8gPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKE1CRURUTFNfTURfU0hBMSk7CisJaWYgKGluZm8gPT0gTlVMTCkgeworCQltYmVkdGxzX21kX2ZyZWUoJmN0eCk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXQgPSBtYmVkdGxzX21kX3NldHVwKCZjdHgsIGluZm8sIDEpOworCWlmIChyZXQgIT0gMCkgeworCQltYmVkdGxzX21kX2ZyZWUoJmN0eCk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXQgPSBtYmVkdGxzX3BrY3M1X3Bia2RmMl9obWFjKCZjdHgsIChjb25zdCB1bnNpZ25lZCBjaGFyICopcHcsCisJICAgIHB3X2xlbiwgc2FsdCwgc2FsdF9sZW4sIHJvdW5kcywgZGVyaXZlZF9rZXlfbGVuLCBkZXJpdmVkX2tleSk7CisKKwltYmVkdGxzX21kX2ZyZWUoJmN0eCk7CisJcmV0dXJuIChyZXQpOworfQorCiAjZWxpZiBkZWZpbmVkKEhBVkVfTElCTkVUVExFKSAmJiBkZWZpbmVkKEhBVkVfTkVUVExFX1BCS0RGMl9IKQogCiBzdGF0aWMgaW50CkBAIC0yNjksNiArMjk4LDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNlbGlmIGRlZmluZWQoSEFWRV9MSUJNQkVEQ1JZUFRPKSAmJiBkZWZpbmVkKEhBVkVfTUJFRFRMU19BRVNfSCkKKworc3RhdGljIGludAorYWVzX2N0cl9pbml0KGFyY2hpdmVfY3J5cHRvX2N0eCAqY3R4LCBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuKQoreworCW1iZWR0bHNfYWVzX2luaXQoJmN0eC0+Y3R4KTsKKwljdHgtPmtleV9sZW4gPSBrZXlfbGVuOworCW1lbWNweShjdHgtPmtleSwga2V5LCBrZXlfbGVuKTsKKwltZW1zZXQoY3R4LT5ub25jZSwgMCwgc2l6ZW9mKGN0eC0+bm9uY2UpKTsKKwljdHgtPmVuY3JfcG9zID0gQUVTX0JMT0NLX1NJWkU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Flc19jdHJfZW5jcnlwdF9jb3VudGVyKGFyY2hpdmVfY3J5cHRvX2N0eCAqY3R4KQoreworCWlmIChtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCZjdHgtPmN0eCwgY3R4LT5rZXksCisJICAgIGN0eC0+a2V5X2xlbiAqIDgpICE9IDApCisJCXJldHVybiAoLTEpOworCWlmIChtYmVkdGxzX2Flc19jcnlwdF9lY2IoJmN0eC0+Y3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBjdHgtPm5vbmNlLAorCSAgICBjdHgtPmVuY3JfYnVmKSAhPSAwKQorCQlyZXR1cm4gKC0xKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYWVzX2N0cl9yZWxlYXNlKGFyY2hpdmVfY3J5cHRvX2N0eCAqY3R4KQoreworCW1iZWR0bHNfYWVzX2ZyZWUoJmN0eC0+Y3R4KTsKKwltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOworCXJldHVybiAwOworfQorCiAjZWxpZiBkZWZpbmVkKEhBVkVfTElCTkVUVExFKSAmJiBkZWZpbmVkKEhBVkVfTkVUVExFX0FFU19IKQogCiBzdGF0aWMgaW50CkBAIC0zMTYsNyArMzc4LDE0IEBACiAJbWVtY3B5KGN0eC0+a2V5LCBrZXksIGtleV9sZW4pOwogCW1lbXNldChjdHgtPm5vbmNlLCAwLCBzaXplb2YoY3R4LT5ub25jZSkpOwogCWN0eC0+ZW5jcl9wb3MgPSBBRVNfQkxPQ0tfU0laRTsKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSICA+PSAweDEwMTAwMDAwTCAmJiAhZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX3Jlc2V0KGN0eC0+Y3R4KSkgeworCQlFVlBfQ0lQSEVSX0NUWF9mcmVlKGN0eC0+Y3R4KTsKKwkJY3R4LT5jdHggPSBOVUxMOworCX0KKyNlbHNlCiAJRVZQX0NJUEhFUl9DVFhfaW5pdChjdHgtPmN0eCk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfY3J5cHRvcl9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcnlwdG9yX3ByaXZhdGUuaAppbmRleCBiOTc1OTIyLi42NGEyMDU1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcnlwdG9yX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9jcnlwdG9yX3ByaXZhdGUuaApAQCAtMjMsMTMgKzIzLDEyIEBACiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCi0jaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAotI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCi0jZW5kaWYKLQogI2lmbmRlZiBBUkNISVZFX0NSWVBUT1JfUFJJVkFURV9IX0lOQ0xVREVECiAjZGVmaW5lIEFSQ0hJVkVfQ1JZUFRPUl9QUklWQVRFX0hfSU5DTFVERUQKIAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKKyNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgorI2VuZGlmCiAvKgogICogT24gc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFueSByZWNvZ25pemVkIGNyeXB0byBsaWJyYXJpZXMsCiAgKiB0aGUgYXJjaGl2ZV9jcnlwdG9yLmMgZmlsZSB3aWxsIG5vcm1hbGx5IGRlZmluZSBubyB1c2FibGUgc3ltYm9scy4KQEAgLTgzLDYgKzgyLDIzIEBACiAJdW5zaWduZWQJZW5jcl9wb3M7CiB9IGFyY2hpdmVfY3J5cHRvX2N0eDsKIAorI2VsaWYgZGVmaW5lZChIQVZFX0xJQk1CRURDUllQVE8pICYmIGRlZmluZWQoSEFWRV9NQkVEVExTX0FFU19IKQorI2luY2x1ZGUgPG1iZWR0bHMvYWVzLmg+CisjaW5jbHVkZSA8bWJlZHRscy9tZC5oPgorI2luY2x1ZGUgPG1iZWR0bHMvcGtjczUuaD4KKworI2RlZmluZSBBRVNfTUFYX0tFWV9TSVpFIDMyCisjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2CisKK3R5cGVkZWYgc3RydWN0IHsKKwltYmVkdGxzX2Flc19jb250ZXh0CWN0eDsKKwl1aW50OF90CQlrZXlbQUVTX01BWF9LRVlfU0laRV07CisJdW5zaWduZWQJa2V5X2xlbjsKKwl1aW50OF90CQlub25jZVtBRVNfQkxPQ0tfU0laRV07CisJdWludDhfdAkJZW5jcl9idWZbQUVTX0JMT0NLX1NJWkVdOworCXVuc2lnbmVkCWVuY3JfcG9zOworfSBhcmNoaXZlX2NyeXB0b19jdHg7CisKICNlbGlmIGRlZmluZWQoSEFWRV9MSUJORVRUTEUpICYmIGRlZmluZWQoSEFWRV9ORVRUTEVfQUVTX0gpCiAjaWYgZGVmaW5lZChIQVZFX05FVFRMRV9QQktERjJfSCkKICNpbmNsdWRlIDxuZXR0bGUvcGJrZGYyLmg+CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3QuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2RpZ2VzdC5jCmluZGV4IDQxNTM5MjMuLjM0YzU4YWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2RpZ2VzdC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2RpZ2VzdC5jCkBAIC0xNzgsNiArMTc4LDQwIEBACiAgIHJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX21kNWluaXQoYXJjaGl2ZV9tZDVfY3R4ICpjdHgpCit7CisgIG1iZWR0bHNfbWQ1X2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfbWQ1X3N0YXJ0c19yZXQoY3R4KSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19tZDV1cGRhdGUoYXJjaGl2ZV9tZDVfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19tZDVfdXBkYXRlX3JldChjdHgsIGluZGF0YSwgaW5zaXplKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19tZDVmaW5hbChhcmNoaXZlX21kNV9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX21kNV9maW5pc2hfcmV0KGN0eCwgbWQpID09IDApIHsKKyAgICBtYmVkdGxzX21kNV9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgfSBlbHNlIHsKKyAgICBtYmVkdGxzX21kNV9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9ORVRUTEUpCiAKIHN0YXRpYyBpbnQKQEAgLTMzNSw2ICszNjksNDAgQEAKICAgcmV0dXJuIChBUkNISVZFX09LKTsKIH0KIAorI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTUJFRFRMUykKKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfcmlwZW1kMTYwaW5pdChhcmNoaXZlX3JtZDE2MF9jdHggKmN0eCkKK3sKKyAgbWJlZHRsc19yaXBlbWQxNjBfaW5pdChjdHgpOworICBpZiAobWJlZHRsc19yaXBlbWQxNjBfc3RhcnRzX3JldChjdHgpID09IDApCisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgZWxzZQorICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7Cit9CisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3JpcGVtZDE2MHVwZGF0ZShhcmNoaXZlX3JtZDE2MF9jdHggKmN0eCwgY29uc3Qgdm9pZCAqaW5kYXRhLAorICAgIHNpemVfdCBpbnNpemUpCit7CisgIGlmIChtYmVkdGxzX3JpcGVtZDE2MF91cGRhdGVfcmV0KGN0eCwgaW5kYXRhLCBpbnNpemUpID09IDApCisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgZWxzZQorICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7Cit9CisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3JpcGVtZDE2MGZpbmFsKGFyY2hpdmVfcm1kMTYwX2N0eCAqY3R4LCB2b2lkICptZCkKK3sKKyAgaWYgKG1iZWR0bHNfcmlwZW1kMTYwX2ZpbmlzaF9yZXQoY3R4LCBtZCkgPT0gMCkgeworICAgIG1iZWR0bHNfcmlwZW1kMTYwX2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICB9IGVsc2UgeworICAgIG1iZWR0bHNfcmlwZW1kMTYwX2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworICB9Cit9CisKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX05FVFRMRSkKIAogc3RhdGljIGludApAQCAtNDkxLDYgKzU1OSw0MCBAQAogICByZXR1cm4gKEFSQ0hJVkVfT0spOwogfQogCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTUJFRFRMUykKKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhMWluaXQoYXJjaGl2ZV9zaGExX2N0eCAqY3R4KQoreworICBtYmVkdGxzX3NoYTFfaW5pdChjdHgpOworICBpZiAobWJlZHRsc19zaGExX3N0YXJ0c19yZXQoY3R4KSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGExdXBkYXRlKGFyY2hpdmVfc2hhMV9jdHggKmN0eCwgY29uc3Qgdm9pZCAqaW5kYXRhLAorICAgIHNpemVfdCBpbnNpemUpCit7CisgIGlmIChtYmVkdGxzX3NoYTFfdXBkYXRlX3JldChjdHgsIGluZGF0YSwgaW5zaXplKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGExZmluYWwoYXJjaGl2ZV9zaGExX2N0eCAqY3R4LCB2b2lkICptZCkKK3sKKyAgaWYgKG1iZWR0bHNfc2hhMV9maW5pc2hfcmV0KGN0eCwgbWQpID09IDApIHsKKyAgICBtYmVkdGxzX3NoYTFfZnJlZShjdHgpOworICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIH0gZWxzZSB7CisgICAgbWJlZHRsc19zaGExX2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworICB9Cit9CisKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9ORVRUTEUpCiAKIHN0YXRpYyBpbnQKQEAgLTcyMCw2ICs4MjIsNDAgQEAKICAgcmV0dXJuIChBUkNISVZFX09LKTsKIH0KIAorI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTUJFRFRMUykKKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhMjU2aW5pdChhcmNoaXZlX3NoYTI1Nl9jdHggKmN0eCkKK3sKKyAgbWJlZHRsc19zaGEyNTZfaW5pdChjdHgpOworICBpZiAobWJlZHRsc19zaGEyNTZfc3RhcnRzX3JldChjdHgsIDApID09IDApCisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgZWxzZQorICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7Cit9CisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTI1NnVwZGF0ZShhcmNoaXZlX3NoYTI1Nl9jdHggKmN0eCwgY29uc3Qgdm9pZCAqaW5kYXRhLAorICAgIHNpemVfdCBpbnNpemUpCit7CisgIGlmIChtYmVkdGxzX3NoYTI1Nl91cGRhdGVfcmV0KGN0eCwgaW5kYXRhLCBpbnNpemUpID09IDApCisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgZWxzZQorICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7Cit9CisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTI1NmZpbmFsKGFyY2hpdmVfc2hhMjU2X2N0eCAqY3R4LCB2b2lkICptZCkKK3sKKyAgaWYgKG1iZWR0bHNfc2hhMjU2X2ZpbmlzaF9yZXQoY3R4LCBtZCkgPT0gMCkgeworICAgIG1iZWR0bHNfc2hhMjU2X2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICB9IGVsc2UgeworICAgIG1iZWR0bHNfc2hhMjU2X2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworICB9Cit9CisKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X05FVFRMRSkKIAogc3RhdGljIGludApAQCAtOTIxLDYgKzEwNTcsNDAgQEAKICAgcmV0dXJuIChBUkNISVZFX09LKTsKIH0KIAorI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfTUJFRFRMUykKKworc3RhdGljIGludAorX19hcmNoaXZlX21iZWR0bHNfc2hhMzg0aW5pdChhcmNoaXZlX3NoYTM4NF9jdHggKmN0eCkKK3sKKyAgbWJlZHRsc19zaGE1MTJfaW5pdChjdHgpOworICBpZiAobWJlZHRsc19zaGE1MTJfc3RhcnRzX3JldChjdHgsIDEpID09IDApCisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgZWxzZQorICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7Cit9CisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTM4NHVwZGF0ZShhcmNoaXZlX3NoYTM4NF9jdHggKmN0eCwgY29uc3Qgdm9pZCAqaW5kYXRhLAorICAgIHNpemVfdCBpbnNpemUpCit7CisgIGlmIChtYmVkdGxzX3NoYTUxMl91cGRhdGVfcmV0KGN0eCwgaW5kYXRhLCBpbnNpemUpID09IDApCisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgZWxzZQorICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7Cit9CisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTM4NGZpbmFsKGFyY2hpdmVfc2hhMzg0X2N0eCAqY3R4LCB2b2lkICptZCkKK3sKKyAgaWYgKG1iZWR0bHNfc2hhNTEyX2ZpbmlzaF9yZXQoY3R4LCBtZCkgPT0gMCkgeworICAgIG1iZWR0bHNfc2hhNTEyX2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworICB9IGVsc2UgeworICAgIG1iZWR0bHNfc2hhNTEyX2ZyZWUoY3R4KTsKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworICB9Cit9CisKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X05FVFRMRSkKIAogc3RhdGljIGludApAQCAtMTE0Niw2ICsxMzE2LDQwIEBACiAgIHJldHVybiAoQVJDSElWRV9PSyk7CiB9CiAKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX01CRURUTFMpCisKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV9tYmVkdGxzX3NoYTUxMmluaXQoYXJjaGl2ZV9zaGE1MTJfY3R4ICpjdHgpCit7CisgIG1iZWR0bHNfc2hhNTEyX2luaXQoY3R4KTsKKyAgaWYgKG1iZWR0bHNfc2hhNTEyX3N0YXJ0c19yZXQoY3R4LCAwKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGE1MTJ1cGRhdGUoYXJjaGl2ZV9zaGE1MTJfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmluZGF0YSwKKyAgICBzaXplX3QgaW5zaXplKQoreworICBpZiAobWJlZHRsc19zaGE1MTJfdXBkYXRlX3JldChjdHgsIGluZGF0YSwgaW5zaXplKSA9PSAwKQorICAgIHJldHVybiAoQVJDSElWRV9PSyk7CisgIGVsc2UKKyAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworfQorCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWJlZHRsc19zaGE1MTJmaW5hbChhcmNoaXZlX3NoYTUxMl9jdHggKmN0eCwgdm9pZCAqbWQpCit7CisgIGlmIChtYmVkdGxzX3NoYTUxMl9maW5pc2hfcmV0KGN0eCwgbWQpID09IDApIHsKKyAgICBtYmVkdGxzX3NoYTUxMl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX09LKTsKKyAgfSBlbHNlIHsKKyAgICBtYmVkdGxzX3NoYTUxMl9mcmVlKGN0eCk7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQorfQorCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9ORVRUTEUpCiAKIHN0YXRpYyBpbnQKQEAgLTEyNzYsNiArMTQ4MCwxMCBAQAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9tZDVpbml0LAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9tZDV1cGRhdGUsCiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX21kNWZpbmFsLAorI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTUJFRFRMUykKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX21kNWluaXQsCisgICZfX2FyY2hpdmVfbWJlZHRsc19tZDV1cGRhdGUsCisgICZfX2FyY2hpdmVfbWJlZHRsc19tZDVmaW5hbCwKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X05FVFRMRSkKICAgJl9fYXJjaGl2ZV9uZXR0bGVfbWQ1aW5pdCwKICAgJl9fYXJjaGl2ZV9uZXR0bGVfbWQ1dXBkYXRlLApAQCAtMTMwMyw2ICsxNTExLDEwIEBACiAgICZfX2FyY2hpdmVfbGlibWRfcmlwZW1kMTYwaW5pdCwKICAgJl9fYXJjaGl2ZV9saWJtZF9yaXBlbWQxNjB1cGRhdGUsCiAgICZfX2FyY2hpdmVfbGlibWRfcmlwZW1kMTYwZmluYWwsCisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9NQkVEVExTKQorICAmX19hcmNoaXZlX21iZWR0bHNfcmlwZW1kMTYwaW5pdCwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3JpcGVtZDE2MHVwZGF0ZSwKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3JpcGVtZDE2MGZpbmFsLAogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTkVUVExFKQogICAmX19hcmNoaXZlX25ldHRsZV9yaXBlbWQxNjBpbml0LAogICAmX19hcmNoaXZlX25ldHRsZV9yaXBlbWQxNjB1cGRhdGUsCkBAIC0xMzMwLDYgKzE1NDIsMTAgQEAKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhMWluaXQsCiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTF1cGRhdGUsCiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTFmaW5hbCwKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9NQkVEVExTKQorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMWluaXQsCisgICZfX2FyY2hpdmVfbWJlZHRsc19zaGExdXBkYXRlLAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMWZpbmFsLAogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX05FVFRMRSkKICAgJl9fYXJjaGl2ZV9uZXR0bGVfc2hhMWluaXQsCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTF1cGRhdGUsCkBAIC0xMzY5LDYgKzE1ODUsMTAgQEAKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhMjU2aW5pdCwKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhMjU2dXBkYXRlLAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGEyNTZmaW5hbCwKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X01CRURUTFMpCisgICZfX2FyY2hpdmVfbWJlZHRsc19zaGEyNTZpbml0LAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMjU2dXBkYXRlLAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhMjU2ZmluYWwsCiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9ORVRUTEUpCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTI1NmluaXQsCiAgICZfX2FyY2hpdmVfbmV0dGxlX3NoYTI1NnVwZGF0ZSwKQEAgLTE0MDQsNiArMTYyNCwxMCBAQAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGEzODRpbml0LAogICAmX19hcmNoaXZlX2xpYnN5c3RlbV9zaGEzODR1cGRhdGUsCiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTM4NGZpbmFsLAorI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfTUJFRFRMUykKKyAgJl9fYXJjaGl2ZV9tYmVkdGxzX3NoYTM4NGluaXQsCisgICZfX2FyY2hpdmVfbWJlZHRsc19zaGEzODR1cGRhdGUsCisgICZfX2FyY2hpdmVfbWJlZHRsc19zaGEzODRmaW5hbCwKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X05FVFRMRSkKICAgJl9fYXJjaGl2ZV9uZXR0bGVfc2hhMzg0aW5pdCwKICAgJl9fYXJjaGl2ZV9uZXR0bGVfc2hhMzg0dXBkYXRlLApAQCAtMTQ0Myw2ICsxNjY3LDEwIEBACiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTUxMmluaXQsCiAgICZfX2FyY2hpdmVfbGlic3lzdGVtX3NoYTUxMnVwZGF0ZSwKICAgJl9fYXJjaGl2ZV9saWJzeXN0ZW1fc2hhNTEyZmluYWwKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX01CRURUTFMpCisgICZfX2FyY2hpdmVfbWJlZHRsc19zaGE1MTJpbml0LAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhNTEydXBkYXRlLAorICAmX19hcmNoaXZlX21iZWR0bHNfc2hhNTEyZmluYWwKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX05FVFRMRSkKICAgJl9fYXJjaGl2ZV9uZXR0bGVfc2hhNTEyaW5pdCwKICAgJl9fYXJjaGl2ZV9uZXR0bGVfc2hhNTEydXBkYXRlLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlnZXN0X3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2RpZ2VzdF9wcml2YXRlLmgKaW5kZXggYjRmZDZjYS4uMTUzMTJlZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlnZXN0X3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaWdlc3RfcHJpdmF0ZS5oCkBAIC0yNCwxMyArMjQsMTIgQEAKICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCiAKKyNpZm5kZWYgQVJDSElWRV9ESUdFU1RfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfRElHRVNUX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKLQotI2lmbmRlZiBBUkNISVZFX0NSWVBUT19QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUgQVJDSElWRV9DUllQVE9fUFJJVkFURV9IX0lOQ0xVREVECi0KIC8qCiAgKiBDcnlwdG8gc3VwcG9ydCBpbiB2YXJpb3VzIE9wZXJhdGluZyBTeXN0ZW1zOgogICoKQEAgLTExMiw2ICsxMTEsMjQgQEAKICNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uRGlnZXN0Lmg+CiAjZW5kaWYKIAorLyogbWJlZCBUTFMgY3J5cHRvIGhlYWRlcnMgKi8KKyNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9NQkVEVExTKQorI2luY2x1ZGUgPG1iZWR0bHMvbWQ1Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9NQkVEVExTKQorI2luY2x1ZGUgPG1iZWR0bHMvcmlwZW1kMTYwLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTUJFRFRMUykKKyNpbmNsdWRlIDxtYmVkdGxzL3NoYTEuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X01CRURUTFMpCisjaW5jbHVkZSA8bWJlZHRscy9zaGEyNTYuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X01CRURUTFMpIHx8XAorICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9NQkVEVExTKQorI2luY2x1ZGUgPG1iZWR0bHMvc2hhNTEyLmg+CisjZW5kaWYKKwogLyogTmV0dGxlIGNyeXB0byBoZWFkZXJzICovCiAjaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTkVUVExFKQogI2luY2x1ZGUgPG5ldHRsZS9tZDUuaD4KQEAgLTE1OSw2ICsxNzYsOCBAQAogdHlwZWRlZiBNRDVfQ1RYIGFyY2hpdmVfbWQ1X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X0xJQlNZU1RFTSkKIHR5cGVkZWYgQ0NfTUQ1X0NUWCBhcmNoaXZlX21kNV9jdHg7CisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9NQkVEVExTKQordHlwZWRlZiBtYmVkdGxzX21kNV9jb250ZXh0IGFyY2hpdmVfbWQ1X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X05FVFRMRSkKIHR5cGVkZWYgc3RydWN0IG1kNV9jdHggYXJjaGl2ZV9tZDVfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfT1BFTlNTTCkKQEAgLTE3Myw2ICsxOTIsOCBAQAogdHlwZWRlZiBSTUQxNjBfQ1RYIGFyY2hpdmVfcm1kMTYwX2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX0xJQk1EKQogdHlwZWRlZiBSSVBFTUQxNjBfQ1RYIGFyY2hpdmVfcm1kMTYwX2N0eDsKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX01CRURUTFMpCit0eXBlZGVmIG1iZWR0bHNfcmlwZW1kMTYwX2NvbnRleHQgYXJjaGl2ZV9ybWQxNjBfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTkVUVExFKQogdHlwZWRlZiBzdHJ1Y3QgcmlwZW1kMTYwX2N0eCBhcmNoaXZlX3JtZDE2MF9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9PUEVOU1NMKQpAQCAtMTg3LDYgKzIwOCw4IEBACiB0eXBlZGVmIFNIQTFfQ1RYIGFyY2hpdmVfc2hhMV9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTElCU1lTVEVNKQogdHlwZWRlZiBDQ19TSEExX0NUWCBhcmNoaXZlX3NoYTFfY3R4OworI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX01CRURUTFMpCit0eXBlZGVmIG1iZWR0bHNfc2hhMV9jb250ZXh0IGFyY2hpdmVfc2hhMV9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTkVUVExFKQogdHlwZWRlZiBzdHJ1Y3Qgc2hhMV9jdHggYXJjaGl2ZV9zaGExX2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9PUEVOU1NMKQpAQCAtMjA3LDYgKzIzMCw4IEBACiB0eXBlZGVmIFNIQTI1Nl9DVFggYXJjaGl2ZV9zaGEyNTZfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTElCU1lTVEVNKQogdHlwZWRlZiBDQ19TSEEyNTZfQ1RYIGFyY2hpdmVfc2hhMjU2X2N0eDsKKyNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X01CRURUTFMpCit0eXBlZGVmIG1iZWR0bHNfc2hhMjU2X2NvbnRleHQgYXJjaGl2ZV9zaGEyNTZfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTkVUVExFKQogdHlwZWRlZiBzdHJ1Y3Qgc2hhMjU2X2N0eCBhcmNoaXZlX3NoYTI1Nl9jdHg7CiAjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9PUEVOU1NMKQpAQCAtMjI1LDYgKzI1MCw4IEBACiB0eXBlZGVmIFNIQTJfQ1RYIGFyY2hpdmVfc2hhMzg0X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X0xJQlNZU1RFTSkKIHR5cGVkZWYgQ0NfU0hBNTEyX0NUWCBhcmNoaXZlX3NoYTM4NF9jdHg7CisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9NQkVEVExTKQordHlwZWRlZiBtYmVkdGxzX3NoYTUxMl9jb250ZXh0IGFyY2hpdmVfc2hhMzg0X2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X05FVFRMRSkKIHR5cGVkZWYgc3RydWN0IHNoYTM4NF9jdHggYXJjaGl2ZV9zaGEzODRfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfT1BFTlNTTCkKQEAgLTI0NSw2ICsyNzIsOCBAQAogdHlwZWRlZiBTSEE1MTJfQ1RYIGFyY2hpdmVfc2hhNTEyX2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX0xJQlNZU1RFTSkKIHR5cGVkZWYgQ0NfU0hBNTEyX0NUWCBhcmNoaXZlX3NoYTUxMl9jdHg7CisjZWxpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9NQkVEVExTKQordHlwZWRlZiBtYmVkdGxzX3NoYTUxMl9jb250ZXh0IGFyY2hpdmVfc2hhNTEyX2N0eDsKICNlbGlmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX05FVFRMRSkKIHR5cGVkZWYgc3RydWN0IHNoYTUxMl9jdHggYXJjaGl2ZV9zaGE1MTJfY3R4OwogI2VsaWYgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfT1BFTlNTTCkKQEAgLTI1OSw2ICsyODgsNyBAQAogI2lmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X0xJQkMpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9MSUJNRCkgfHwJXAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9MSUJTWVNURU0pIHx8XAorICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX01ENV9NQkVEVExTKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfTkVUVExFKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19NRDVfT1BFTlNTTCkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fTUQ1X1dJTikKQEAgLTI3Miw2ICszMDIsNyBAQAogICBfX2FyY2hpdmVfZGlnZXN0Lm1kNXVwZGF0ZShjdHgsIGJ1ZiwgbikKIAogI2lmIGRlZmluZWQoQVJDSElWRV9DUllQVE9fUk1EMTYwX0xJQkMpIHx8XAorICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1JNRDE2MF9NQkVEVExTKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfTkVUVExFKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19STUQxNjBfT1BFTlNTTCkKICNkZWZpbmUgQVJDSElWRV9IQVNfUk1EMTYwCkBAIC0yODYsNiArMzE3LDcgQEAKICNpZiBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTElCQykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMV9MSUJNRCkgfHwJXAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTElCU1lTVEVNKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX01CRURUTFMpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfTkVUVExFKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEExX09QRU5TU0wpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTFfV0lOKQpAQCAtMzAzLDYgKzMzNSw3IEBACiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X0xJQkMzKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTElCTUQpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9MSUJTWVNURU0pIHx8XAorICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTI1Nl9NQkVEVExTKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfTkVUVExFKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEyNTZfT1BFTlNTTCkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMjU2X1dJTikKQEAgLTMxOSw2ICszNTIsNyBAQAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9MSUJDMikgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X0xJQkMzKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfTElCU1lTVEVNKSB8fFwKKyAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEEzODRfTUJFRFRMUykgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X05FVFRMRSkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBMzg0X09QRU5TU0wpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTM4NF9XSU4pCkBAIC0zMzYsNiArMzcwLDcgQEAKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfTElCQzMpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9MSUJNRCkgfHxcCiAgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX0xJQlNZU1RFTSkgfHxcCisgIGRlZmluZWQoQVJDSElWRV9DUllQVE9fU0hBNTEyX01CRURUTFMpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9ORVRUTEUpIHx8XAogICBkZWZpbmVkKEFSQ0hJVkVfQ1JZUFRPX1NIQTUxMl9PUEVOU1NMKSB8fFwKICAgZGVmaW5lZChBUkNISVZFX0NSWVBUT19TSEE1MTJfV0lOKQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlza19hY2xfc3Vub3MuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2Rpc2tfYWNsX3N1bm9zLmMKaW5kZXggYmM4NGZkNi4uYjBmNWRmYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZGlza19hY2xfc3Vub3MuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9kaXNrX2FjbF9zdW5vcy5jCkBAIC0xNDUsMTAgKzE0NSw4IEBACiAJCQkJCWNudCA9IGZhY2woZmQsIGNtZCwgY250LCBhY2xwKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmIChhY2xwICE9IE5VTEwpIHsKLQkJCQlmcmVlKGFjbHApOwotCQkJCWFjbHAgPSBOVUxMOwotCQkJfQorCQkJZnJlZShhY2xwKTsKKwkJCWFjbHAgPSBOVUxMOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbmRpYW4uaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VuZGlhbi5oCmluZGV4IDFjNDg1NjMuLmU2ZDNmMmMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VuZGlhbi5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VuZGlhbi5oCkBAIC0yOCwxNiArMjgsMTUgQEAKICAqIEJvcnJvd2VkIGZyb20gRnJlZUJTRCdzIDxzeXMvZW5kaWFuLmg+CiAgKi8KIAotI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKLSNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgotI2VuZGlmCisjaWZuZGVmIEFSQ0hJVkVfRU5ESUFOX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9FTkRJQU5fSF9JTkNMVURFRAogCiAvKiBOb3RlOiAgVGhpcyBpcyBhIHB1cmVseSBpbnRlcm5hbCBoZWFkZXIhICovCiAvKiBEbyBub3QgdXNlIHRoaXMgb3V0c2lkZSBvZiBsaWJhcmNoaXZlIGludGVybmFsIGNvZGUhICovCiAKLSNpZm5kZWYgQVJDSElWRV9FTkRJQU5fSF9JTkNMVURFRAotI2RlZmluZSBBUkNISVZFX0VORElBTl9IX0lOQ0xVREVECi0KKyNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECisjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KKyNlbmRpZgogCiAvKgogICogRGlzYWJsaW5nIGlubGluZSBrZXl3b3JkIGZvciBjb21waWxlcnMga25vd24gdG8gY2hva2Ugb24gaXQ6CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuMwppbmRleCBmNzU5MTZjLi4yZjYyYTRiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LjMKQEAgLTMyLDcgKzMyLDcgQEAKIC5ObSBhcmNoaXZlX2VudHJ5X2NsZWFyICwKIC5ObSBhcmNoaXZlX2VudHJ5X2Nsb25lICwKIC5ObSBhcmNoaXZlX2VudHJ5X2ZyZWUgLAotLk5tIGFyY2hpdmVfZW50cnlfbmV3ICwKKy5ObSBhcmNoaXZlX2VudHJ5X25ldwogLk5kIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgYXJjaGl2ZSBlbnRyeSBkZXNjcmlwdGlvbnMKIC5TaCBMSUJSQVJZCiBTdHJlYW1pbmcgQXJjaGl2ZSBMaWJyYXJ5IChsaWJhcmNoaXZlLCAtbGFyY2hpdmUpCkBAIC0xMjYsNyArMTI2LDYgQEAKIFNpbWlsYXJseSwgaWYgeW91IHN0b3JlIGEgd2lkZSBzdHJpbmcgYW5kIHRoZW4gc3RvcmUgYQogbmFycm93IHN0cmluZyBmb3IgdGhlIHNhbWUgZGF0YSwgdGhlIHByZXZpb3VzbHktc2V0IHdpZGUgc3RyaW5nIHdpbGwKIGJlIGRpc2NhcmRlZCBpbiBmYXZvciBvZiB0aGUgbmV3IGRhdGEuCi0uUHAKIC5cIiAuU2ggRVhBTVBMRQogLlwiIC5TaCBSRVRVUk4gVkFMVUVTCiAuXCIgLlNoIEVSUk9SUwpAQCAtMTM0LDggKzEzMyw4IEBACiAuWHIgYXJjaGl2ZV9lbnRyeV9hY2wgMyAsCiAuWHIgYXJjaGl2ZV9lbnRyeV9wYXRocyAzICwKIC5YciBhcmNoaXZlX2VudHJ5X3Blcm1zIDMgLAotLlhyIGFyY2hpdmVfZW50cnlfdGltZSAzCi0uWHIgbGliYXJjaGl2ZSAzICwKKy5YciBhcmNoaXZlX2VudHJ5X3RpbWUgMyAsCisuWHIgbGliYXJjaGl2ZSAzCiAuU2ggSElTVE9SWQogVGhlCiAuTm0gbGliYXJjaGl2ZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmMKaW5kZXggZjcyMmJiZS4uYTE1ZTk4YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS5jCkBAIC0xNjgsNiArMTY4LDcgQEAKIAlhcmNoaXZlX2VudHJ5X3hhdHRyX2NsZWFyKGVudHJ5KTsKIAlhcmNoaXZlX2VudHJ5X3NwYXJzZV9jbGVhcihlbnRyeSk7CiAJZnJlZShlbnRyeS0+c3RhdCk7CisJZW50cnktPmFlX3N5bWxpbmtfdHlwZSA9IEFFX1NZTUxJTktfVFlQRV9VTkRFRklORUQ7CiAJbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoKmVudHJ5KSk7CiAJcmV0dXJuIGVudHJ5OwogfQpAQCAtMjAyLDYgKzIwMyw5IEBACiAJZW50cnkyLT5hZV9zZXQgPSBlbnRyeS0+YWVfc2V0OwogCWFyY2hpdmVfbXN0cmluZ19jb3B5KCZlbnRyeTItPmFlX3VuYW1lLCAmZW50cnktPmFlX3VuYW1lKTsKIAorCS8qIENvcHkgc3ltbGluayB0eXBlICovCisJZW50cnkyLT5hZV9zeW1saW5rX3R5cGUgPSBlbnRyeS0+YWVfc3ltbGlua190eXBlOworCiAJLyogQ29weSBlbmNyeXB0aW9uIHN0YXR1cyAqLwogCWVudHJ5Mi0+ZW5jcnlwdGlvbiA9IGVudHJ5LT5lbmNyeXB0aW9uOwogCQpAQCAtMjUzLDYgKzI1Nyw3IEBACiAJaWYgKGVudHJ5ID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAJZW50cnktPmFyY2hpdmUgPSBhOworCWVudHJ5LT5hZV9zeW1saW5rX3R5cGUgPSBBRV9TWU1MSU5LX1RZUEVfVU5ERUZJTkVEOwogCXJldHVybiAoZW50cnkpOwogfQogCkBAIC02NzUsNiArNjgwLDEyIEBACiAJcmV0dXJuIChOVUxMKTsKIH0KIAoraW50CithcmNoaXZlX2VudHJ5X3N5bWxpbmtfdHlwZShzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnkpCit7CisJcmV0dXJuIChlbnRyeS0+YWVfc3ltbGlua190eXBlKTsKK30KKwogY29uc3QgY2hhciAqCiBhcmNoaXZlX2VudHJ5X3N5bWxpbmtfdXRmOChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnkpCiB7CkBAIC0xMjQ2LDYgKzEyNTcsMTIgQEAKIH0KIAogdm9pZAorYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGlua190eXBlKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSwgaW50IHR5cGUpCit7CisJZW50cnktPmFlX3N5bWxpbmtfdHlwZSA9IHR5cGU7Cit9CisKK3ZvaWQKIGFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdXRmOChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksIGNvbnN0IGNoYXIgKmxpbmtuYW1lKQogewogCWFyY2hpdmVfbXN0cmluZ19jb3B5X3V0ZjgoJmVudHJ5LT5hZV9zeW1saW5rLCBsaW5rbmFtZSk7CkBAIC0xNTYwLDEwICsxNTc3LDggQEAKIGNvbnN0IHdjaGFyX3QgKgogYXJjaGl2ZV9lbnRyeV9hY2xfdGV4dF93KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSwgaW50IGZsYWdzKQogewotCWlmIChlbnRyeS0+YWNsLmFjbF90ZXh0X3cgIT0gTlVMTCkgewotCQlmcmVlKGVudHJ5LT5hY2wuYWNsX3RleHRfdyk7Ci0JCWVudHJ5LT5hY2wuYWNsX3RleHRfdyA9IE5VTEw7Ci0JfQorCWZyZWUoZW50cnktPmFjbC5hY2xfdGV4dF93KTsKKwllbnRyeS0+YWNsLmFjbF90ZXh0X3cgPSBOVUxMOwogCWlmIChhcmNoaXZlX2VudHJ5X2FjbF90ZXh0X2NvbXBhdCgmZmxhZ3MpID09IDApCiAJCWVudHJ5LT5hY2wuYWNsX3RleHRfdyA9IGFyY2hpdmVfYWNsX3RvX3RleHRfdygmZW50cnktPmFjbCwKIAkJICAgIE5VTEwsIGZsYWdzLCBlbnRyeS0+YXJjaGl2ZSk7CkBAIC0xNTc0LDEwICsxNTg5LDggQEAKIGNvbnN0IGNoYXIgKgogYXJjaGl2ZV9lbnRyeV9hY2xfdGV4dChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksIGludCBmbGFncykKIHsKLQlpZiAoZW50cnktPmFjbC5hY2xfdGV4dCAhPSBOVUxMKSB7Ci0JCWZyZWUoZW50cnktPmFjbC5hY2xfdGV4dCk7Ci0JCWVudHJ5LT5hY2wuYWNsX3RleHQgPSBOVUxMOwotCX0KKwlmcmVlKGVudHJ5LT5hY2wuYWNsX3RleHQpOworCWVudHJ5LT5hY2wuYWNsX3RleHQgPSBOVUxMOwogCWlmIChhcmNoaXZlX2VudHJ5X2FjbF90ZXh0X2NvbXBhdCgmZmxhZ3MpID09IDApCiAJCWVudHJ5LT5hY2wuYWNsX3RleHQgPSBhcmNoaXZlX2FjbF90b190ZXh0X2woJmVudHJ5LT5hY2wsIE5VTEwsCiAJCSAgICBmbGFncywgTlVMTCk7CkBAIC0xNTkwLDEwICsxNjAzLDggQEAKIF9hcmNoaXZlX2VudHJ5X2FjbF90ZXh0X2woc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LCBpbnQgZmxhZ3MsCiAgICAgY29uc3QgY2hhciAqKmFjbF90ZXh0LCBzaXplX3QgKmxlbiwgc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnYgKnNjKQogewotCWlmIChlbnRyeS0+YWNsLmFjbF90ZXh0ICE9IE5VTEwpIHsKLQkJZnJlZShlbnRyeS0+YWNsLmFjbF90ZXh0KTsKLQkJZW50cnktPmFjbC5hY2xfdGV4dCA9IE5VTEw7Ci0gICAgICAgIH0KKwlmcmVlKGVudHJ5LT5hY2wuYWNsX3RleHQpOworCWVudHJ5LT5hY2wuYWNsX3RleHQgPSBOVUxMOwogCiAJaWYgKGFyY2hpdmVfZW50cnlfYWNsX3RleHRfY29tcGF0KCZmbGFncykgPT0gMCkKIAkJZW50cnktPmFjbC5hY2xfdGV4dCA9IGFyY2hpdmVfYWNsX3RvX3RleHRfbCgmZW50cnktPmFjbCwKQEAgLTE2MzgsMTk4ICsxNjQ5LDIxNSBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAorLyoKKyAqIFN1cHBvcnRlZCBmaWxlIGZsYWdzIG9uIEZyZWVCU0QgYW5kIE1hYyBPUzoKKyAqIHNhcHBuZCxzYXBwZW5kCQlTRl9BUFBFTkQKKyAqIGFyY2gsYXJjaGl2ZWQJCVNGX0FSQ0hJVkVECisgKiBzY2hnLHNjaGFuZ2Usc2ltbXV0YWJsZQlTRl9JTU1VVEFCTEUKKyAqIHN1bmxuayxzdW5saW5rCQlTRl9OT1VOTElOSwkoRnJlZUJTRCBvbmx5KQorICogdWFwcG5kLHVhcHBlbmQJCVVGX0FQUEVORAorICogY29tcHJlc3NlZAkJCVVGX0NPTVBSRVNTRUQJKE1hYyBPUyBvbmx5KQorICogaGlkZGVuLHVoaWRkZW4JCVVGX0hJRERFTgorICogdWNoZyx1Y2hhbmdlLHVpbW11dGFibGUJVUZfSU1NVVRBQkxFCisgKiBub2R1bXAJCQlVRl9OT0RVTVAKKyAqIHV1bmxuayx1dW5saW5rCQlVRl9OT1VOTElOSwkoRnJlZUJTRCBvbmx5KQorICogb2ZmbGluZSx1b2ZmbGluZQkJVUZfT0ZGTElORQkoRnJlZUJTRCBvbmx5KQorICogb3BhcXVlCQkJVUZfT1BBUVVFCisgKiByZG9ubHksdXJkb25seSxyZWFkb25seQlVRl9SRUFET05MWQkoRnJlZUJTRCBvbmx5KQorICogcmVwYXJzZSx1cmVwYXJzZQkJVUZfUkVQQVJTRQkoRnJlZUJTRCBvbmx5KQorICogc3BhcnNlLHVzcGFyc2UJCVVGX1NQQVJTRQkoRnJlZUJTRCBvbmx5KQorICogc3lzdGVtLHVzeXN0ZW0JCVVGX1NZU1RFTQkoRnJlZUJTRCBvbmx5KQorICoKKyAqIFNlZSBjaGZsYWdzKDIpIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKgorICogU3VwcG9ydGVkIGZpbGUgYXR0cmlidXRlcyBvbiBMaW51eDoKKyAqIGEJYXBwZW5kIG9ubHkJCQlGU19BUFBFTkRfRkwJCXNhcHBuZAorICogQQlubyBhdGltZSB1cGRhdGVzCQlGU19OT0FUSU1FX0ZMCQlhdGltZQorICogYwljb21wcmVzcwkJCUZTX0NPTVBSX0ZMCQljb21wcmVzcworICogQwlubyBjb3B5IG9uIHdyaXRlCQlGU19OT0NPV19GTAkJY293CisgKiBkCW5vIGR1bXAJCQkJRlNfTk9EVU1QX0ZMCQlkdW1wCisgKiBECXN5bmNocm9ub3VzIGRpcmVjdG9yeSB1cGRhdGVzCUZTX0RJUlNZTkNfRkwJCWRpcnN5bmMKKyAqIGkJaW1tdXRhYmxlCQkJRlNfSU1NVVRBQkxFX0ZMCQlzY2hnCisgKiBqCWRhdGEgam91cm5hbGxpbmcJCUZTX0pPVVJOQUxfREFUQV9GTAlqb3VybmFsCisgKiBQCXByb2plY3QgaGllcmFyY2h5CQlGU19QUk9KSU5IRVJJVF9GTAlwcm9qaW5oZXJpdAorICogcwlzZWN1cmUgZGVsZXRpb24JCQlGU19TRUNSTV9GTAkJc2VjdXJlZGVsZXRpb24KKyAqIFMJc3luY2hyb25vdXMgdXBkYXRlcwkJRlNfU1lOQ19GTAkJc3luYworICogdAlubyB0YWlsLW1lcmdpbmcJCQlGU19OT1RBSUxfRkwJCXRhaWwKKyAqIFQJdG9wIG9mIGRpcmVjdG9yeSBoaWVyYXJjaHkJRlNfVE9QRElSX0ZMCQl0b3BkaXIKKyAqIHUJdW5kZWxldGFibGUJCQlGU19VTlJNX0ZMCQl1bmRlbAorICoKKyAqIFNlZSBpb2N0bF9pZmxhZ3MoMikgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqCisgKiBFcXVpdmFsZW50IGZpbGUgZmxhZ3Mgc3VwcG9ydGVkIG9uIEZyZWVCU0QgLyBNYWMgT1MgYW5kIExpbnV4OgorICogU0ZfQVBQRU5ECQlGU19BUFBFTkRfRkwJCXNhcHBuZAorICogU0ZfSU1NVVRBQkxFCQlGU19JTU1VVEFCTEVfRkwJCXNjaGcKKyAqIFVGX05PRFVNUAkJRlNfTk9EVU1QX0ZMCQlub2R1bXAKKyAqLworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZsYWcgewogCWNvbnN0IGNoYXIJKm5hbWU7CiAJY29uc3Qgd2NoYXJfdAkqd25hbWU7CiAJdW5zaWduZWQgbG9uZwkgc2V0OwogCXVuc2lnbmVkIGxvbmcJIGNsZWFyOwotfSBmbGFnc1tdID0geworfSBmaWxlZmxhZ3NbXSA9IHsKIAkvKiBQcmVmZXJyZWQgKHNob3J0ZXIpIG5hbWVzIHBlciBmbGFnIGZpcnN0LCBhbGwgcHJlZml4ZWQgYnkgIm5vIiAqLwogI2lmZGVmIFNGX0FQUEVORAotCXsgIm5vc2FwcG5kIiwJTCJub3NhcHBuZCIsCQlTRl9BUFBFTkQsCTAgfSwKLQl7ICJub3NhcHBlbmQiLAlMIm5vc2FwcGVuZCIsCQlTRl9BUFBFTkQsCTAgfSwKKwl7ICJub3NhcHBuZCIsCUwibm9zYXBwbmQiLAkJU0ZfQVBQRU5ELAkwfSwKKwl7ICJub3NhcHBlbmQiLAlMIm5vc2FwcGVuZCIsCQlTRl9BUFBFTkQsCTB9LAogI2VuZGlmCiAjaWYgZGVmaW5lZChGU19BUFBFTkRfRkwpCQkJLyogJ2EnICovCi0JeyAibm9zYXBwbmQiLAlMIm5vc2FwcG5kIiwJCUZTX0FQUEVORF9GTCwJMCB9LAotCXsgIm5vc2FwcGVuZCIsCUwibm9zYXBwZW5kIiwJCUZTX0FQUEVORF9GTCwJMCB9LAorCXsgIm5vc2FwcG5kIiwJTCJub3NhcHBuZCIsCQlGU19BUFBFTkRfRkwsCTB9LAorCXsgIm5vc2FwcGVuZCIsCUwibm9zYXBwZW5kIiwJCUZTX0FQUEVORF9GTCwJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfQVBQRU5EX0ZMKQkJCS8qICdhJyAqLwotCXsgIm5vc2FwcG5kIiwJTCJub3NhcHBuZCIsCQlFWFQyX0FQUEVORF9GTCwJMCB9LAotCXsgIm5vc2FwcGVuZCIsCUwibm9zYXBwZW5kIiwJCUVYVDJfQVBQRU5EX0ZMLAkwIH0sCisJeyAibm9zYXBwbmQiLAlMIm5vc2FwcG5kIiwJCUVYVDJfQVBQRU5EX0ZMLAkwfSwKKwl7ICJub3NhcHBlbmQiLAlMIm5vc2FwcGVuZCIsCQlFWFQyX0FQUEVORF9GTCwJMH0sCiAjZW5kaWYKICNpZmRlZiBTRl9BUkNISVZFRAotCXsgIm5vYXJjaCIsCUwibm9hcmNoIiwJCVNGX0FSQ0hJVkVELAkwIH0sCi0JeyAibm9hcmNoaXZlZCIsCUwibm9hcmNoaXZlZCIsICAgICAgIAlTRl9BUkNISVZFRCwJMCB9LAorCXsgIm5vYXJjaCIsCUwibm9hcmNoIiwJCVNGX0FSQ0hJVkVELAkwfSwKKwl7ICJub2FyY2hpdmVkIiwJTCJub2FyY2hpdmVkIiwgICAgICAgCVNGX0FSQ0hJVkVELAkwfSwKICNlbmRpZgogI2lmZGVmIFNGX0lNTVVUQUJMRQotCXsgIm5vc2NoZyIsCUwibm9zY2hnIiwJCVNGX0lNTVVUQUJMRSwJMCB9LAotCXsgIm5vc2NoYW5nZSIsCUwibm9zY2hhbmdlIiwJCVNGX0lNTVVUQUJMRSwJMCB9LAotCXsgIm5vc2ltbXV0YWJsZSIsCUwibm9zaW1tdXRhYmxlIiwJU0ZfSU1NVVRBQkxFLAkwIH0sCisJeyAibm9zY2hnIiwJTCJub3NjaGciLAkJU0ZfSU1NVVRBQkxFLAkwfSwKKwl7ICJub3NjaGFuZ2UiLAlMIm5vc2NoYW5nZSIsCQlTRl9JTU1VVEFCTEUsCTB9LAorCXsgIm5vc2ltbXV0YWJsZSIsCUwibm9zaW1tdXRhYmxlIiwJU0ZfSU1NVVRBQkxFLAkwfSwKICNlbmRpZgogI2lmIGRlZmluZWQoRlNfSU1NVVRBQkxFX0ZMKQkJCS8qICdpJyAqLwotCXsgIm5vc2NoZyIsCUwibm9zY2hnIiwJCUZTX0lNTVVUQUJMRV9GTCwJMCB9LAotCXsgIm5vc2NoYW5nZSIsCUwibm9zY2hhbmdlIiwJCUZTX0lNTVVUQUJMRV9GTCwJMCB9LAotCXsgIm5vc2ltbXV0YWJsZSIsCUwibm9zaW1tdXRhYmxlIiwJRlNfSU1NVVRBQkxFX0ZMLAkwIH0sCisJeyAibm9zY2hnIiwJTCJub3NjaGciLAkJRlNfSU1NVVRBQkxFX0ZMLAkwfSwKKwl7ICJub3NjaGFuZ2UiLAlMIm5vc2NoYW5nZSIsCQlGU19JTU1VVEFCTEVfRkwsCTB9LAorCXsgIm5vc2ltbXV0YWJsZSIsCUwibm9zaW1tdXRhYmxlIiwJRlNfSU1NVVRBQkxFX0ZMLAkwfSwKICNlbGlmIGRlZmluZWQoRVhUMl9JTU1VVEFCTEVfRkwpCQkvKiAnaScgKi8KLQl7ICJub3NjaGciLAlMIm5vc2NoZyIsCQlFWFQyX0lNTVVUQUJMRV9GTCwJMCB9LAotCXsgIm5vc2NoYW5nZSIsCUwibm9zY2hhbmdlIiwJCUVYVDJfSU1NVVRBQkxFX0ZMLAkwIH0sCi0JeyAibm9zaW1tdXRhYmxlIiwJTCJub3NpbW11dGFibGUiLAlFWFQyX0lNTVVUQUJMRV9GTCwJMCB9LAorCXsgIm5vc2NoZyIsCUwibm9zY2hnIiwJCUVYVDJfSU1NVVRBQkxFX0ZMLAkwfSwKKwl7ICJub3NjaGFuZ2UiLAlMIm5vc2NoYW5nZSIsCQlFWFQyX0lNTVVUQUJMRV9GTCwJMH0sCisJeyAibm9zaW1tdXRhYmxlIiwJTCJub3NpbW11dGFibGUiLAlFWFQyX0lNTVVUQUJMRV9GTCwJMH0sCiAjZW5kaWYKICNpZmRlZiBTRl9OT1VOTElOSwotCXsgIm5vc3VubG5rIiwJTCJub3N1bmxuayIsCQlTRl9OT1VOTElOSywJMCB9LAotCXsgIm5vc3VubGluayIsCUwibm9zdW5saW5rIiwJCVNGX05PVU5MSU5LLAkwIH0sCi0jZW5kaWYKLSNpZmRlZiBTRl9TTkFQU0hPVAotCXsgIm5vc25hcHNob3QiLAlMIm5vc25hcHNob3QiLAlTRl9TTkFQU0hPVCwJMCB9LAorCXsgIm5vc3VubG5rIiwJTCJub3N1bmxuayIsCQlTRl9OT1VOTElOSywJMH0sCisJeyAibm9zdW5saW5rIiwJTCJub3N1bmxpbmsiLAkJU0ZfTk9VTkxJTkssCTB9LAogI2VuZGlmCiAjaWZkZWYgVUZfQVBQRU5ECi0JeyAibm91YXBwbmQiLAlMIm5vdWFwcG5kIiwJCVVGX0FQUEVORCwJMCB9LAotCXsgIm5vdWFwcGVuZCIsCUwibm91YXBwZW5kIiwJCVVGX0FQUEVORCwJMCB9LAorCXsgIm5vdWFwcG5kIiwJTCJub3VhcHBuZCIsCQlVRl9BUFBFTkQsCTB9LAorCXsgIm5vdWFwcGVuZCIsCUwibm91YXBwZW5kIiwJCVVGX0FQUEVORCwJMH0sCiAjZW5kaWYKICNpZmRlZiBVRl9JTU1VVEFCTEUKLQl7ICJub3VjaGciLAlMIm5vdWNoZyIsCQlVRl9JTU1VVEFCTEUsCTAgfSwKLQl7ICJub3VjaGFuZ2UiLAlMIm5vdWNoYW5nZSIsCQlVRl9JTU1VVEFCTEUsCTAgfSwKLQl7ICJub3VpbW11dGFibGUiLAlMIm5vdWltbXV0YWJsZSIsCVVGX0lNTVVUQUJMRSwJMCB9LAorCXsgIm5vdWNoZyIsCUwibm91Y2hnIiwJCVVGX0lNTVVUQUJMRSwJMH0sCisJeyAibm91Y2hhbmdlIiwJTCJub3VjaGFuZ2UiLAkJVUZfSU1NVVRBQkxFLAkwfSwKKwl7ICJub3VpbW11dGFibGUiLAlMIm5vdWltbXV0YWJsZSIsCVVGX0lNTVVUQUJMRSwJMH0sCiAjZW5kaWYKICNpZmRlZiBVRl9OT0RVTVAKIAl7ICJub2R1bXAiLAlMIm5vZHVtcCIsCQkwLAkJVUZfTk9EVU1QfSwKICNlbmRpZgogI2lmIGRlZmluZWQoRlNfTk9EVU1QX0ZMKQkvKiAnZCcgKi8KIAl7ICJub2R1bXAiLAlMIm5vZHVtcCIsCQkwLAkJRlNfTk9EVU1QX0ZMfSwKLSNlbGlmIGRlZmluZWQoRVhUMl9OT0RVTVBfRkwpIAkvKiAnZCcgKi8KKyNlbGlmIGRlZmluZWQoRVhUMl9OT0RVTVBfRkwpCiAJeyAibm9kdW1wIiwJTCJub2R1bXAiLAkJMCwJCUVYVDJfTk9EVU1QX0ZMfSwKICNlbmRpZgogI2lmZGVmIFVGX09QQVFVRQotCXsgIm5vb3BhcXVlIiwJTCJub29wYXF1ZSIsCQlVRl9PUEFRVUUsCTAgfSwKKwl7ICJub29wYXF1ZSIsCUwibm9vcGFxdWUiLAkJVUZfT1BBUVVFLAkwfSwKICNlbmRpZgogI2lmZGVmIFVGX05PVU5MSU5LCi0JeyAibm91dW5sbmsiLAlMIm5vdXVubG5rIiwJCVVGX05PVU5MSU5LLAkwIH0sCi0JeyAibm91dW5saW5rIiwJTCJub3V1bmxpbmsiLAkJVUZfTk9VTkxJTkssCTAgfSwKKwl7ICJub3V1bmxuayIsCUwibm91dW5sbmsiLAkJVUZfTk9VTkxJTkssCTB9LAorCXsgIm5vdXVubGluayIsCUwibm91dW5saW5rIiwJCVVGX05PVU5MSU5LLAkwfSwKICNlbmRpZgogI2lmZGVmIFVGX0NPTVBSRVNTRUQKLQl7ICJub2NvbXByZXNzZWQiLEwibm9jb21wcmVzc2VkIiwJVUZfQ09NUFJFU1NFRCwJMCB9LAorCS8qIE1hYyBPUyAqLworCXsgIm5vY29tcHJlc3NlZCIsCUwibm9jb21wcmVzc2VkIiwJVUZfQ09NUFJFU1NFRCwJMH0sCiAjZW5kaWYKICNpZmRlZiBVRl9ISURERU4KLQl7ICJub2hpZGRlbiIsCUwibm9oaWRkZW4iLAkJVUZfSElEREVOLAkwIH0sCisJeyAibm9oaWRkZW4iLAlMIm5vaGlkZGVuIiwJCVVGX0hJRERFTiwJMH0sCisJeyAibm91aGlkZGVuIiwJTCJub3VoaWRkZW4iLAkJVUZfSElEREVOLAkwfSwKICNlbmRpZgotI2lmIGRlZmluZWQoRlNfVU5STV9GTCkKLSAgICAgICAgeyAibm91dW5saW5rIiwJTCJub3V1bmxpbmsiLAkJRlNfVU5STV9GTCwJMH0sCisjaWZkZWYgRklMRV9BVFRSSUJVVEVfSElEREVOCisJeyAibm9oaWRkZW4iLAlMIm5vaGlkZGVuIiwJRklMRV9BVFRSSUJVVEVfSElEREVOLAkwfSwKKwl7ICJub3VoaWRkZW4iLAlMIm5vdWhpZGRlbiIsCUZJTEVfQVRUUklCVVRFX0hJRERFTiwJMH0sCisjZW5kaWYKKyNpZmRlZiBVRl9PRkZMSU5FCisJeyAibm9vZmZsaW5lIiwJTCJub29mZmxpbmUiLAkJVUZfT0ZGTElORSwJMH0sCisJeyAibm91b2ZmbGluZSIsCUwibm91b2ZmbGluZSIsCQlVRl9PRkZMSU5FLAkwfSwKKyNlbmRpZgorI2lmZGVmIFVGX1JFQURPTkxZCisJeyAibm9yZG9ubHkiLAlMIm5vcmRvbmx5IiwJCVVGX1JFQURPTkxZLAkwfSwKKwl7ICJub3VyZG9ubHkiLAlMIm5vdXJkb25seSIsCQlVRl9SRUFET05MWSwJMH0sCisJeyAibm9yZWFkb25seSIsCUwibm9yZWFkb25seSIsCQlVRl9SRUFET05MWSwJMH0sCisjZW5kaWYKKyNpZmRlZiBGSUxFX0FUVFJJQlVURV9SRUFET05MWQorCXsgIm5vcmRvbmx5IiwJTCJub3Jkb25seSIsCUZJTEVfQVRUUklCVVRFX1JFQURPTkxZLAkwfSwKKwl7ICJub3VyZG9ubHkiLAlMIm5vdXJkb25seSIsCUZJTEVfQVRUUklCVVRFX1JFQURPTkxZLAkwfSwKKwl7ICJub3JlYWRvbmx5IiwJTCJub3JlYWRvbmx5IiwJRklMRV9BVFRSSUJVVEVfUkVBRE9OTFksCTB9LAorI2VuZGlmCisjaWZkZWYgVUZfU1BBUlNFCisJeyAibm9zcGFyc2UiLAlMIm5vc3BhcnNlIiwJCVVGX1NQQVJTRSwJMH0sCisJeyAibm91c3BhcnNlIiwJTCJub3VzcGFyc2UiLAkJVUZfU1BBUlNFLAkwfSwKKyNlbmRpZgorI2lmZGVmIFVGX1JFUEFSU0UKKwl7ICJub3JlcGFyc2UiLAlMIm5vcmVwYXJzZSIsCQlVRl9SRVBBUlNFLAkwfSwKKwl7ICJub3VyZXBhcnNlIiwJTCJub3VyZXBhcnNlIiwJCVVGX1JFUEFSU0UsCTB9LAorI2VuZGlmCisjaWZkZWYgVUZfU1lTVEVNCisJeyAibm9zeXN0ZW0iLAlMIm5vc3lzdGVtIiwJCVVGX1NZU1RFTSwJMH0sCisJeyAibm91c3lzdGVtIiwJTCJub3VzeXN0ZW0iLAkJVUZfU1lTVEVNLAkwfSwKKyNlbmRpZgorI2lmZGVmIEZJTEVfQVRUUklCVVRFX1NZU1RFTQorCXsgIm5vc3lzdGVtIiwJTCJub3N5c3RlbSIsCUZJTEVfQVRUUklCVVRFX1NZU1RFTSwJMH0sCisJeyAibm91c3lzdGVtIiwJTCJub3VzeXN0ZW0iLAlGSUxFX0FUVFJJQlVURV9TWVNURU0sCTB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChGU19VTlJNX0ZMKQkJLyogJ3UnICovCisJeyAibm91bmRlbCIsCUwibm91bmRlbCIsCQlGU19VTlJNX0ZMLAkwfSwKICNlbGlmIGRlZmluZWQoRVhUMl9VTlJNX0ZMKQotICAgICAgICB7ICJub3V1bmxpbmsiLAlMIm5vdXVubGluayIsCQlFWFQyX1VOUk1fRkwsCTB9LAorCXsgIm5vdW5kZWwiLAlMIm5vdW5kZWwiLAkJRVhUMl9VTlJNX0ZMLAkwfSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChGU19CVFJFRV9GTCkKLSAgICAgICAgeyAibm9idHJlZSIsCUwibm9idHJlZSIsICAgICAgIAlGU19CVFJFRV9GTCwJMCB9LAotI2VsaWYgZGVmaW5lZChFWFQyX0JUUkVFX0ZMKQotICAgICAgICB7ICJub2J0cmVlIiwJTCJub2J0cmVlIiwgICAgICAgCUVYVDJfQlRSRUVfRkwsCTAgfSwKKyNpZiBkZWZpbmVkKEZTX0NPTVBSX0ZMKQkvKiAnYycgKi8KKwl7ICJub2NvbXByZXNzIiwJTCJub2NvbXByZXNzIiwgICAgICAgCUZTX0NPTVBSX0ZMLAkwfSwKKyNlbGlmIGRlZmluZWQoRVhUMl9DT01QUl9GTCkKKwl7ICJub2NvbXByZXNzIiwJTCJub2NvbXByZXNzIiwgICAgICAgCUVYVDJfQ09NUFJfRkwsCTB9LAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEZTX0VDT01QUl9GTCkKLSAgICAgICAgeyAibm9jb21wZXJyIiwJTCJub2NvbXBlcnIiLCAgICAgICAJRlNfRUNPTVBSX0ZMLAkwIH0sCi0jZWxpZiBkZWZpbmVkKEVYVDJfRUNPTVBSX0ZMKQotICAgICAgICB7ICJub2NvbXBlcnIiLAlMIm5vY29tcGVyciIsICAgICAgIAlFWFQyX0VDT01QUl9GTCwJMCB9LAorI2lmIGRlZmluZWQoRlNfTk9BVElNRV9GTCkJLyogJ0EnICovCisJeyAibm9hdGltZSIsCUwibm9hdGltZSIsCQkwLAkJRlNfTk9BVElNRV9GTH0sCisjZWxpZiBkZWZpbmVkKEVYVDJfTk9BVElNRV9GTCkKKwl7ICJub2F0aW1lIiwJTCJub2F0aW1lIiwJCTAsCQlFWFQyX05PQVRJTUVfRkx9LAogI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEZTX0NPTVBSX0ZMKQkJCS8qICdjJyAqLwotICAgICAgICB7ICJub2NvbXByZXNzIiwJTCJub2NvbXByZXNzIiwgICAgICAgCUZTX0NPTVBSX0ZMLAkwIH0sCi0jZWxpZiBkZWZpbmVkKEVYVDJfQ09NUFJfRkwpCQkJLyogJ2MnICovCi0gICAgICAgIHsgIm5vY29tcHJlc3MiLAlMIm5vY29tcHJlc3MiLCAgICAgICAJRVhUMl9DT01QUl9GTCwJMCB9LAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEZTX05PQVRJTUVfRkwpCQkJLyogJ0EnICovCi0gICAgICAgIHsgIm5vYXRpbWUiLAlMIm5vYXRpbWUiLAkJMCwJCUZTX05PQVRJTUVfRkx9LAotI2VsaWYgZGVmaW5lZChFWFQyX05PQVRJTUVfRkwpCQkJLyogJ0EnICovCi0gICAgICAgIHsgIm5vYXRpbWUiLAlMIm5vYXRpbWUiLAkJMCwJCUVYVDJfTk9BVElNRV9GTH0sCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoRlNfRElSVFlfRkwpCi0gICAgICAgIHsgIm5vY29tcGRpcnR5IixMIm5vY29tcGRpcnR5IiwJCUZTX0RJUlRZX0ZMLAkJMH0sCi0jZWxpZiBkZWZpbmVkKEVYVDJfRElSVFlfRkwpCi0gICAgICAgIHsgIm5vY29tcGRpcnR5IixMIm5vY29tcGRpcnR5IiwJCUVYVDJfRElSVFlfRkwsCQkwfSwKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChGU19DT01QUkJMS19GTCkKLSNpZiBkZWZpbmVkKEZTX05PQ09NUFJfRkwpCi0gICAgICAgIHsgIm5vY29tcHJibGsiLAlMIm5vY29tcHJibGsiLAkJRlNfQ09NUFJCTEtfRkwsIEZTX05PQ09NUFJfRkx9LAotI2Vsc2UKLSAgICAgICAgeyAibm9jb21wcmJsayIsCUwibm9jb21wcmJsayIsCQlGU19DT01QUkJMS19GTCwJMH0sCi0jZW5kaWYKLSNlbGlmIGRlZmluZWQoRVhUMl9DT01QUkJMS19GTCkKLSNpZiBkZWZpbmVkKEVYVDJfTk9DT01QUl9GTCkKLSAgICAgICAgeyAibm9jb21wcmJsayIsCUwibm9jb21wcmJsayIsCQlFWFQyX0NPTVBSQkxLX0ZMLCBFWFQyX05PQ09NUFJfRkx9LAotI2Vsc2UKLSAgICAgICAgeyAibm9jb21wcmJsayIsCUwibm9jb21wcmJsayIsCQlFWFQyX0NPTVBSQkxLX0ZMLAkwfSwKLSNlbmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChGU19ESVJTWU5DX0ZMKQotICAgICAgICB7ICJub2RpcnN5bmMiLAlMIm5vZGlyc3luYyIsCQlGU19ESVJTWU5DX0ZMLAkwfSwKKyNpZiBkZWZpbmVkKEZTX0RJUlNZTkNfRkwpCS8qICdEJyAqLworCXsgIm5vZGlyc3luYyIsCUwibm9kaXJzeW5jIiwJCUZTX0RJUlNZTkNfRkwsCQkwfSwKICNlbGlmIGRlZmluZWQoRVhUMl9ESVJTWU5DX0ZMKQotICAgICAgICB7ICJub2RpcnN5bmMiLAlMIm5vZGlyc3luYyIsCQlFWFQyX0RJUlNZTkNfRkwsCTB9LAorCXsgIm5vZGlyc3luYyIsCUwibm9kaXJzeW5jIiwJCUVYVDJfRElSU1lOQ19GTCwJMH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEZTX0lOREVYX0ZMKQotICAgICAgICB7ICJub2hhc2hpZHgiLAlMIm5vaGFzaGlkeCIsCQlGU19JTkRFWF9GTCwJCTB9LAotI2VsaWYgZGVmaW5lZChFWFQyX0lOREVYX0ZMKQotICAgICAgICB7ICJub2hhc2hpZHgiLAlMIm5vaGFzaGlkeCIsCQlFWFQyX0lOREVYX0ZMLAkJMH0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEZTX0lNQUdJQ19GTCkKLSAgICAgICAgeyAibm9pbWFnaWMiLAlMIm5vaW1hZ2ljIiwJCUZTX0lNQUdJQ19GTCwJCTB9LAotI2VsaWYgZGVmaW5lZChFWFQyX0lNQUdJQ19GTCkKLSAgICAgICAgeyAibm9pbWFnaWMiLAlMIm5vaW1hZ2ljIiwJCUVYVDJfSU1BR0lDX0ZMLAkJMH0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEZTX0pPVVJOQUxfREFUQV9GTCkKLSAgICAgICAgeyAibm9qb3VybmFsIiwJTCJub2pvdXJuYWwiLAkJRlNfSk9VUk5BTF9EQVRBX0ZMLAkwfSwKKyNpZiBkZWZpbmVkKEZTX0pPVVJOQUxfREFUQV9GTCkJLyogJ2onICovCisJeyAibm9qb3VybmFsLWRhdGEiLEwibm9qb3VybmFsLWRhdGEiLAlGU19KT1VSTkFMX0RBVEFfRkwsCTB9LAorCXsgIm5vam91cm5hbCIsCUwibm9qb3VybmFsIiwJCUZTX0pPVVJOQUxfREFUQV9GTCwJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDNfSk9VUk5BTF9EQVRBX0ZMKQotICAgICAgICB7ICJub2pvdXJuYWwiLAlMIm5vam91cm5hbCIsCQlFWFQzX0pPVVJOQUxfREFUQV9GTCwJMH0sCisJeyAibm9qb3VybmFsLWRhdGEiLEwibm9qb3VybmFsLWRhdGEiLAlFWFQzX0pPVVJOQUxfREFUQV9GTCwJMH0sCisJeyAibm9qb3VybmFsIiwJTCJub2pvdXJuYWwiLAkJRVhUM19KT1VSTkFMX0RBVEFfRkwsCTB9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChGU19TRUNSTV9GTCkKLSAgICAgICAgeyAibm9zZWN1cmVkZWxldGlvbiIsTCJub3NlY3VyZWRlbGV0aW9uIixGU19TRUNSTV9GTCwJCTB9LAorI2lmIGRlZmluZWQoRlNfU0VDUk1fRkwpCS8qICdzJyAqLworCXsgIm5vc2VjZGVsIiwJTCJub3NlY2RlbCIsCQlGU19TRUNSTV9GTCwJCTB9LAorCXsgIm5vc2VjdXJlZGVsZXRpb24iLEwibm9zZWN1cmVkZWxldGlvbiIsRlNfU0VDUk1fRkwsCQkwfSwKICNlbGlmIGRlZmluZWQoRVhUMl9TRUNSTV9GTCkKLSAgICAgICAgeyAibm9zZWN1cmVkZWxldGlvbiIsTCJub3NlY3VyZWRlbGV0aW9uIixFWFQyX1NFQ1JNX0ZMLAkJMH0sCisJeyAibm9zZWNkZWwiLAlMIm5vc2VjZGVsIiwJCUVYVDJfU0VDUk1fRkwsCQkwfSwKKwl7ICJub3NlY3VyZWRlbGV0aW9uIixMIm5vc2VjdXJlZGVsZXRpb24iLEVYVDJfU0VDUk1fRkwsCQkwfSwKICNlbmRpZgotI2lmIGRlZmluZWQoRlNfU1lOQ19GTCkKLSAgICAgICAgeyAibm9zeW5jIiwJTCJub3N5bmMiLAkJRlNfU1lOQ19GTCwJCTB9LAorI2lmIGRlZmluZWQoRlNfU1lOQ19GTCkJCS8qICdTJyAqLworCXsgIm5vc3luYyIsCUwibm9zeW5jIiwJCUZTX1NZTkNfRkwsCQkwfSwKICNlbGlmIGRlZmluZWQoRVhUMl9TWU5DX0ZMKQotICAgICAgICB7ICJub3N5bmMiLAlMIm5vc3luYyIsCQlFWFQyX1NZTkNfRkwsCQkwfSwKKwl7ICJub3N5bmMiLAlMIm5vc3luYyIsCQlFWFQyX1NZTkNfRkwsCQkwfSwKICNlbmRpZgotI2lmIGRlZmluZWQoRlNfTk9UQUlMX0ZMKQotICAgICAgICB7ICJub3RhaWwiLAlMIm5vdGFpbCIsCQkwLAkJRlNfTk9UQUlMX0ZMfSwKKyNpZiBkZWZpbmVkKEZTX05PVEFJTF9GTCkJLyogJ3QnICovCisJeyAibm90YWlsIiwJTCJub3RhaWwiLAkJMCwJCUZTX05PVEFJTF9GTH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfTk9UQUlMX0ZMKQotICAgICAgICB7ICJub3RhaWwiLAlMIm5vdGFpbCIsCQkwLAkJRVhUMl9OT1RBSUxfRkx9LAorCXsgIm5vdGFpbCIsCUwibm90YWlsIiwJCTAsCQlFWFQyX05PVEFJTF9GTH0sCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEZTX1RPUERJUl9GTCkKLSAgICAgICAgeyAibm90b3BkaXIiLAlMIm5vdG9wZGlyIiwJCUZTX1RPUERJUl9GTCwJCTB9LAorI2lmIGRlZmluZWQoRlNfVE9QRElSX0ZMKQkvKiAnVCcgKi8KKwl7ICJub3RvcGRpciIsCUwibm90b3BkaXIiLAkJRlNfVE9QRElSX0ZMLAkJMH0sCiAjZWxpZiBkZWZpbmVkKEVYVDJfVE9QRElSX0ZMKQotICAgICAgICB7ICJub3RvcGRpciIsCUwibm90b3BkaXIiLAkJRVhUMl9UT1BESVJfRkwsCQkwfSwKKwl7ICJub3RvcGRpciIsCUwibm90b3BkaXIiLAkJRVhUMl9UT1BESVJfRkwsCQkwfSwKICNlbmRpZgotI2lmZGVmIEZTX0VOQ1JZUFRfRkwKLSAgICAgICAgeyAibm9lbmNyeXB0IiwJTCJub2VuY3J5cHQiLAkJRlNfRU5DUllQVF9GTCwJMH0sCisjaWZkZWYgRlNfTk9DT1dfRkwJLyogJ0MnICovCisJeyAibm9jb3ciLAlMIm5vY293IiwJCTAsCUZTX05PQ09XX0ZMfSwKICNlbmRpZgotI2lmZGVmIEZTX0hVR0VfRklMRV9GTAotICAgICAgICB7ICJub2h1Z2VmaWxlIiwJTCJub2h1Z2VmaWxlIiwJCUZTX0hVR0VfRklMRV9GTCwJMH0sCisjaWZkZWYgRlNfUFJPSklOSEVSSVRfRkwJLyogJ1AnICovCisJeyAibm9wcm9qaW5oZXJpdCIsTCJub3Byb2ppbmhlcml0IiwJRlNfUFJPSklOSEVSSVRfRkwsCTB9LAogI2VuZGlmCi0jaWZkZWYgRlNfRVhURU5UX0ZMCi0gICAgICAgIHsgIm5vZXh0ZW50IiwJTCJub2V4dGVudCIsCQlGU19FWFRFTlRfRkwsCTB9LAotI2VuZGlmCi0jaWZkZWYgRlNfRUFfSU5PREVfRkwKLSAgICAgICAgeyAibm9lYWlub2RlIiwJTCJub2VhaW5vZGUiLAkJRlNfRUFfSU5PREVfRkwsCTB9LAotI2VuZGlmCi0jaWZkZWYgRlNfRU9GQkxPQ0tTX0ZMCi0gICAgICAgIHsgIm5vZW9mYmxvY2tzIixMIm5vZW9mYmxvY2tzIiwJCUZTX0VPRkJMT0NLU19GTCwJMH0sCi0jZW5kaWYKLSNpZmRlZiBGU19OT0NPV19GTAotICAgICAgICB7ICJub2NvdyIsCUwibm9jb3ciLAkJRlNfTk9DT1dfRkwsCTB9LAotI2VuZGlmCi0jaWZkZWYgRlNfSU5MSU5FX0RBVEFfRkwKLSAgICAgICAgeyAibm9pbmxpbmVkYXRhIixMIm5vaW5saW5lZGF0YSIsCUZTX0lOTElORV9EQVRBX0ZMLAkwfSwKLSNlbmRpZgotI2lmZGVmIEZTX1BST0pJTkhFUklUX0ZMCi0gICAgICAgIHsgIm5vcHJvamluaGVyaXQiLEwibm9wcm9qaW5oZXJpdCIsCUZTX1BST0pJTkhFUklUX0ZMLAkwfSwKLSNlbmRpZgotI2lmIGRlZmluZWQoRlNfUkVTRVJWRURfRkwpCi0gICAgICAgIHsgIm5vcmVzZXJ2ZWQiLAlMIm5vcmVzZXJ2ZWQiLAkJRlNfUkVTRVJWRURfRkwsCTB9LAotI2VsaWYgZGVmaW5lZChFWFQyX1JFU0VSVkVEX0ZMKQotICAgICAgICB7ICJub3Jlc2VydmVkIiwJTCJub3Jlc2VydmVkIiwJCUVYVDJfUkVTRVJWRURfRkwsCTB9LAotI2VuZGlmCi0JeyBOVUxMLAkJTlVMTCwJCQkwLAkJMCB9CisJeyBOVUxMLAkJTlVMTCwJCQkwLAkJMH0KIH07CiAKIC8qCkBAIC0xODQ4LDcgKzE4NzYsNyBAQAogCiAJYml0cyA9IGJpdHNldCB8IGJpdGNsZWFyOwogCWxlbmd0aCA9IDA7Ci0JZm9yIChmbGFnID0gZmxhZ3M7IGZsYWctPm5hbWUgIT0gTlVMTDsgZmxhZysrKQorCWZvciAoZmxhZyA9IGZpbGVmbGFnczsgZmxhZy0+bmFtZSAhPSBOVUxMOyBmbGFnKyspCiAJCWlmIChiaXRzICYgKGZsYWctPnNldCB8IGZsYWctPmNsZWFyKSkgewogCQkJbGVuZ3RoICs9IHN0cmxlbihmbGFnLT5uYW1lKSArIDE7CiAJCQliaXRzICY9IH4oZmxhZy0+c2V0IHwgZmxhZy0+Y2xlYXIpOwpAQCAtMTg2MSw3ICsxODg5LDcgQEAKIAkJcmV0dXJuIChOVUxMKTsKIAogCWRwID0gc3RyaW5nOwotCWZvciAoZmxhZyA9IGZsYWdzOyBmbGFnLT5uYW1lICE9IE5VTEw7IGZsYWcrKykgeworCWZvciAoZmxhZyA9IGZpbGVmbGFnczsgZmxhZy0+bmFtZSAhPSBOVUxMOyBmbGFnKyspIHsKIAkJaWYgKGJpdHNldCAmIGZsYWctPnNldCB8fCBiaXRjbGVhciAmIGZsYWctPmNsZWFyKSB7CiAJCQlzcCA9IGZsYWctPm5hbWUgKyAyOwogCQl9IGVsc2UgaWYgKGJpdHNldCAmIGZsYWctPmNsZWFyICB8fCAgYml0Y2xlYXIgJiBmbGFnLT5zZXQpIHsKQEAgLTE5MTMsNyArMTk0MSw3IEBACiAJCSAgICAqZW5kICE9ICcgJyAgJiYgICplbmQgIT0gJywnKQogCQkJZW5kKys7CiAJCWxlbmd0aCA9IGVuZCAtIHN0YXJ0OwotCQlmb3IgKGZsYWcgPSBmbGFnczsgZmxhZy0+bmFtZSAhPSBOVUxMOyBmbGFnKyspIHsKKwkJZm9yIChmbGFnID0gZmlsZWZsYWdzOyBmbGFnLT5uYW1lICE9IE5VTEw7IGZsYWcrKykgewogCQkJc2l6ZV90IGZsYWdfbGVuZ3RoID0gc3RybGVuKGZsYWctPm5hbWUpOwogCQkJaWYgKGxlbmd0aCA9PSBmbGFnX2xlbmd0aAogCQkJICAgICYmIG1lbWNtcChzdGFydCwgZmxhZy0+bmFtZSwgbGVuZ3RoKSA9PSAwKSB7CkBAIC0xOTgxLDcgKzIwMDksNyBAQAogCQkgICAgKmVuZCAhPSBMJyAnICAmJiAgKmVuZCAhPSBMJywnKQogCQkJZW5kKys7CiAJCWxlbmd0aCA9IGVuZCAtIHN0YXJ0OwotCQlmb3IgKGZsYWcgPSBmbGFnczsgZmxhZy0+d25hbWUgIT0gTlVMTDsgZmxhZysrKSB7CisJCWZvciAoZmxhZyA9IGZpbGVmbGFnczsgZmxhZy0+d25hbWUgIT0gTlVMTDsgZmxhZysrKSB7CiAJCQlzaXplX3QgZmxhZ19sZW5ndGggPSB3Y3NsZW4oZmxhZy0+d25hbWUpOwogCQkJaWYgKGxlbmd0aCA9PSBmbGFnX2xlbmd0aAogCQkJICAgICYmIHdtZW1jbXAoc3RhcnQsIGZsYWctPnduYW1lLCBsZW5ndGgpID09IDApIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeS5oCmluZGV4IGE5MTM0ZjYuLjAwNTNmYWEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5LmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnkuaApAQCAtMzAsNyArMzAsNyBAQAogI2RlZmluZQlBUkNISVZFX0VOVFJZX0hfSU5DTFVERUQKIAogLyogTm90ZTogQ29tcGlsZXIgd2lsbCBjb21wbGFpbiBpZiB0aGlzIGRvZXMgbm90IG1hdGNoIGFyY2hpdmUuaCEgKi8KLSNkZWZpbmUJQVJDSElWRV9WRVJTSU9OX05VTUJFUiAzMDAzMDAzCisjZGVmaW5lCUFSQ0hJVkVfVkVSU0lPTl9OVU1CRVIgMzAwNDAwMgogCiAvKgogICogTm90ZTogYXJjaGl2ZV9lbnRyeS5oIGlzIGZvciB1c2Ugb3V0c2lkZSBvZiBsaWJhcmNoaXZlOyB0aGUKQEAgLTE4OCw2ICsxODgsMTMgQEAKICNkZWZpbmUgQUVfSUZJRk8JKChfX0xBX01PREVfVCkwMDEwMDAwKQogCiAvKgorICogU3ltbGluayB0eXBlcworICovCisjZGVmaW5lIEFFX1NZTUxJTktfVFlQRV9VTkRFRklORUQJMAorI2RlZmluZSBBRV9TWU1MSU5LX1RZUEVfRklMRQkJMQorI2RlZmluZSBBRV9TWU1MSU5LX1RZUEVfRElSRUNUT1JZCTIKKworLyoKICAqIEJhc2ljIG9iamVjdCBtYW5pcHVsYXRpb24KICAqLwogCkBAIC0yNzIsNiArMjc5LDcgQEAKIF9fTEFfREVDTCBjb25zdCBjaGFyCSphcmNoaXZlX2VudHJ5X3N0cm1vZGUoc3RydWN0IGFyY2hpdmVfZW50cnkgKik7CiBfX0xBX0RFQ0wgY29uc3QgY2hhcgkqYXJjaGl2ZV9lbnRyeV9zeW1saW5rKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOwogX19MQV9ERUNMIGNvbnN0IGNoYXIJKmFyY2hpdmVfZW50cnlfc3ltbGlua191dGY4KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOworX19MQV9ERUNMIGludAkJIGFyY2hpdmVfZW50cnlfc3ltbGlua190eXBlKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOwogX19MQV9ERUNMIGNvbnN0IHdjaGFyX3QJKmFyY2hpdmVfZW50cnlfc3ltbGlua193KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOwogX19MQV9ERUNMIGxhX2ludDY0X3QJIGFyY2hpdmVfZW50cnlfdWlkKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOwogX19MQV9ERUNMIGNvbnN0IGNoYXIJKmFyY2hpdmVfZW50cnlfdW5hbWUoc3RydWN0IGFyY2hpdmVfZW50cnkgKik7CkBAIC0zNDcsNiArMzU1LDcgQEAKIF9fTEFfREVDTCB2b2lkCWFyY2hpdmVfZW50cnlfY29weV9zb3VyY2VwYXRoKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGNvbnN0IGNoYXIgKik7CiBfX0xBX0RFQ0wgdm9pZAlhcmNoaXZlX2VudHJ5X2NvcHlfc291cmNlcGF0aF93KHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGNvbnN0IHdjaGFyX3QgKik7CiBfX0xBX0RFQ0wgdm9pZAlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rKHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosIGNvbnN0IGNoYXIgKik7CitfX0xBX0RFQ0wgdm9pZAlhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3R5cGUoc3RydWN0IGFyY2hpdmVfZW50cnkgKiwgaW50KTsKIF9fTEFfREVDTCB2b2lkCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdXRmOChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLCBjb25zdCBjaGFyICopOwogX19MQV9ERUNMIHZvaWQJYXJjaGl2ZV9lbnRyeV9jb3B5X3N5bWxpbmsoc3RydWN0IGFyY2hpdmVfZW50cnkgKiwgY29uc3QgY2hhciAqKTsKIF9fTEFfREVDTCB2b2lkCWFyY2hpdmVfZW50cnlfY29weV9zeW1saW5rX3coc3RydWN0IGFyY2hpdmVfZW50cnkgKiwgY29uc3Qgd2NoYXJfdCAqKTsKQEAgLTUxMiw5ICs1MjEsNiBAQAogX19MQV9ERUNMIGludAkgYXJjaGl2ZV9lbnRyeV9hY2xfbmV4dChzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqLCBpbnQgLyogd2FudF90eXBlICovLAogCSAgICBpbnQgKiAvKiB0eXBlICovLCBpbnQgKiAvKiBwZXJtc2V0ICovLCBpbnQgKiAvKiB0YWcgKi8sCiAJICAgIGludCAqIC8qIHF1YWwgKi8sIGNvbnN0IGNoYXIgKiogLyogbmFtZSAqLyk7Ci1fX0xBX0RFQ0wgaW50CSBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3coc3RydWN0IGFyY2hpdmVfZW50cnkgKiwgaW50IC8qIHdhbnRfdHlwZSAqLywKLQkgICAgaW50ICogLyogdHlwZSAqLywgaW50ICogLyogcGVybXNldCAqLywgaW50ICogLyogdGFnICovLAotCSAgICBpbnQgKiAvKiBxdWFsICovLCBjb25zdCB3Y2hhcl90ICoqIC8qIG5hbWUgKi8pOwogCiAvKgogICogQ29uc3RydWN0IGEgdGV4dC1mb3JtYXQgQUNMLiAgVGhlIGZsYWdzIGFyZ3VtZW50IGlzIGEgYml0bWFzayB0aGF0CkBAIC02ODksNyArNjk1LDYgQEAKICAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKiwgc3RydWN0IGFyY2hpdmVfZW50cnkgKiopOwogX19MQV9ERUNMIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICphcmNoaXZlX2VudHJ5X3BhcnRpYWxfbGlua3MoCiAgICAgc3RydWN0IGFyY2hpdmVfZW50cnlfbGlua3Jlc29sdmVyICpyZXMsIHVuc2lnbmVkIGludCAqbGlua3MpOwotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfYWNsLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9hY2wuMwppbmRleCA1MzRkYmZhLi41MGRkNjQyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9hY2wuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9hY2wuMwpAQCAtMzQsNyArMzQsNiBAQAogLk5tIGFyY2hpdmVfZW50cnlfYWNsX2Zyb21fdGV4dCAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9hY2xfZnJvbV90ZXh0X3cgLAogLk5tIGFyY2hpdmVfZW50cnlfYWNsX25leHQgLAotLk5tIGFyY2hpdmVfZW50cnlfYWNsX25leHRfdyAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9hY2xfcmVzZXQgLAogLk5tIGFyY2hpdmVfZW50cnlfYWNsX3RvX3RleHQgLAogLk5tIGFyY2hpdmVfZW50cnlfYWNsX3RvX3RleHRfdyAsCkBAIC04OSwxNiArODgsNiBAQAogLkZhICJjb25zdCBjaGFyICoqcmV0X25hbWUiCiAuRmMKIC5GdCBpbnQKLS5GbyBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0X3cKLS5GYSAic3RydWN0IGFyY2hpdmVfZW50cnkgKmEiCi0uRmEgImludCB0eXBlIgotLkZhICJpbnQgKnJldF90eXBlIgotLkZhICJpbnQgKnJldF9wZXJtc2V0IgotLkZhICJpbnQgKnJldF90YWciCi0uRmEgImludCAqcmV0X3F1YWwiCi0uRmEgImNvbnN0IHdjaGFyX3QgKipyZXRfbmFtZSIKLS5GYwotLkZ0IGludAogLkZuIGFyY2hpdmVfZW50cnlfYWNsX3Jlc2V0ICJzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqYSIgImludCB0eXBlIgogLkZ0IGNoYXIgKgogLkZvIGFyY2hpdmVfZW50cnlfYWNsX3RvX3RleHQKQEAgLTExOCwxNSArMTA3LDE2IEBACiAuU2ggREVTQ1JJUFRJT04KIFRoZQogLkRxIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKQotZXh0ZW5kIHRoZSBzdGFuZGFyZCBVbml4IHBlcnNzaW9uIG1vZGVsLgorZXh0ZW5kIHRoZSBzdGFuZGFyZCBVbml4IHBlcm1pc3Npb24gbW9kZWwuCiBUaGUgQUNMIGludGVyZmFjZSBvZgogLk5tIGxpYmFyY2hpdmUKLXN1cHBvcnRzIGJvdGggUE9TSVguMWUgYW5kIE5GU3Y0IHN0eWxlIEFDTHMuIFVzZSBvZiBBQ0xzIGlzIHJlc3RyaWN0ZWQgYnkKK3N1cHBvcnRzIGJvdGggUE9TSVguMWUgYW5kIE5GU3Y0IHN0eWxlIEFDTHMuCitVc2Ugb2YgQUNMcyBpcyByZXN0cmljdGVkIGJ5CiB2YXJpb3VzIGxldmVscyBvZiBBQ0wgc3VwcG9ydCBpbiBvcGVyYXRpbmcgc3lzdGVtcywgZmlsZSBzeXN0ZW1zIGFuZCBhcmNoaXZlCiBmb3JtYXRzLgogLlNzIFBPU0lYLjFlIEFjY2VzcyBDb250cm9sIExpc3RzCiBBIFBPU0lYLjFlIEFDTCBjb25zaXN0cyBvZiBhIG51bWJlciBvZiBpbmRlcGVuZGVudCBlbnRyaWVzLgotRWFjaCBlbnRyeSBzcGVjaWZpZXMgdGhlIHBlcm1pc3Npb24gc2V0IGFzIGJpdG1hc2sgb2YgYmFzaWMgcGVybWlzc2lvbnMuCitFYWNoIGVudHJ5IHNwZWNpZmllcyB0aGUgcGVybWlzc2lvbiBzZXQgYXMgYSBiaXRtYXNrIG9mIGJhc2ljIHBlcm1pc3Npb25zLgogVmFsaWQgcGVybWlzc2lvbnMgaW4gdGhlCiAuRmEgcGVybXNldAogYXJlOgpAQCAtMTQ3LDEzICsxMzcsMTMgQEAKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9VU0VSX09CSgogVGhlIG93bmVyIG9mIHRoZSBmaWxlLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0dST1VQCi1UaGUgZ3JvdXAgc3BlY2llZCBieSB0aGUgbmFtZSBmaWVsZC4KK1RoZSBncm91cCBzcGVjaWZpZWQgYnkgdGhlIG5hbWUgZmllbGQuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfR1JPVVBfT0JKCi1UaGUgZ3JvdXAgd2hvIG93bnMgdGhlIGZpbGUuCitUaGUgZ3JvdXAgd2hpY2ggb3ducyB0aGUgZmlsZS4KIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9NQVNLCiBUaGUgbWF4aW11bSBwZXJtaXNzaW9ucyB0byBiZSBvYnRhaW5lZCB2aWEgZ3JvdXAgcGVybWlzc2lvbnMuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfT1RIRVIKLUFueSBwcmluY2lwYWwgd2hvIGlzIG5vdCBmaWxlIG93bmVyIG9yIGEgbWVtYmVyIG9mIHRoZSBvd25pbmcgZ3JvdXAuCitBbnkgcHJpbmNpcGFsIHdobyBpcyBub3QgdGhlIGZpbGUgb3duZXIgb3IgYSBtZW1iZXIgb2YgdGhlIG93bmluZyBncm91cC4KIC5FbAogLlBwCiBUaGUgcHJpbmNpcGFscwpAQCAtMTY0LDEyICsxNTQsMTIgQEAKIGFyZSBlcXVpdmFsZW50IHRvIHVzZXIsIGdyb3VwIGFuZCBvdGhlciBpbiB0aGUgY2xhc3NpYyBVbml4IHBlcm1pc3Npb24KIG1vZGVsIGFuZCBzcGVjaWZ5IG5vbi1leHRlbmRlZCBBQ0wgZW50cmllcy4KIC5QcAotQWxsIGZpbGVzIHdpdGggaGF2ZSBhbiBhY2Nlc3MgQUNMCitBbGwgZmlsZXMgaGF2ZSBhbiBhY2Nlc3MgQUNMCiAuUHEgRHYgQVJDSElWRV9FTlRSWV9BQ0xfVFlQRV9BQ0NFU1MgLgogVGhpcyBzcGVjaWZpZXMgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBhY2Nlc3MgdG8gdGhlIGZpbGUgaXRzZWxmLgogRGlyZWN0b3JpZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIEFDTAogLlBxIER2IEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfREVGQVVMVCAsCi13aGljaCBjb250cm9scyB0aGUgaW5pdGlhbCBhY2Nlc3MgQUNMIGZvciBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeSBlbnRyaWVzLgord2hpY2ggY29udHJvbHMgdGhlIGluaXRpYWwgYWNjZXNzIEFDTCBmb3IgbmV3bHktY3JlYXRlZCBkaXJlY3RvcnkgZW50cmllcy4KIC5TcyBORlN2NCBBY2Nlc3MgQ29udHJvbCBMaXN0cwogQSBORlN2NCBBQ0wgY29uc2lzdHMgb2YgbXVsdGlwbGUgaW5kaXZpZHVhbCBlbnRyaWVzIGNhbGxlZCBBY2Nlc3MgQ29udHJvbAogRW50cmllcyAoQUNFcykuCkBAIC0xOTcsMTEgKzE4NywxMSBAQAogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX1VTRVJfT0JKCiBUaGUgb3duZXIgb2YgdGhlIGZpbGUuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfR1JPVVAKLVRoZSBncm91cCBzcGVjaWVkIGJ5IHRoZSBuYW1lIGZpZWxkLgorVGhlIGdyb3VwIHNwZWNpZmllZCBieSB0aGUgbmFtZSBmaWVsZC4KIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9HUk9VUF9PQkoKLVRoZSBncm91cCB3aG8gb3ducyB0aGUgZmlsZS4KK1RoZSBncm91cCB3aGljaCBvd25zIHRoZSBmaWxlLgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0VWRVJZT05FCi1BbnkgcHJpbmNpcGFsIHdobyBpcyBub3QgZmlsZSBvd25lciBvciBhIG1lbWJlciBvZiB0aGUgb3duaW5nIGdyb3VwLgorQW55IHByaW5jaXBhbCB3aG8gaXMgbm90IHRoZSBmaWxlIG93bmVyIG9yIGEgbWVtYmVyIG9mIHRoZSBvd25pbmcgZ3JvdXAuCiAuRWwKIC5QcAogRW50cmllcyB3aXRoIHRoZQpAQCAtMjE2LDkgKzIwNiwxMCBAQAogLlBwCiBORlN2NCBBQ0UgcGVybWlzc2lvbnMgYW5kIGZsYWdzIGFyZSBzdG9yZWQgaW4gdGhlIHNhbWUKIC5GYSBwZXJtc2V0Ci1iaXRmaWVsZC4gU29tZSBwZXJtaXNzaW9ucyBzaGFyZSB0aGUgc2FtZSBjb25zdGFudCBhbmQgcGVybWlzc2lvbiBjaGFyYWN0ZXIgYnV0Ci1oYXZlIGRpZmZlcmVudCBlZmZlY3Qgb24gZGlyZWN0b3JpZXMgdGhhbiBvbiBmaWxlcy4gVGhlIGZvbGxvd2luZyBBQ0UKLXBlcm1pc3Npb25zIGFyZSBzdXBwb3J0ZWQ6CitiaXRmaWVsZC4KK1NvbWUgcGVybWlzc2lvbnMgc2hhcmUgdGhlIHNhbWUgY29uc3RhbnQgYW5kIHBlcm1pc3Npb24gY2hhcmFjdGVyCitidXQgaGF2ZSBkaWZmZXJlbnQgZWZmZWN0IG9uIGRpcmVjdG9yaWVzIHRoYW4gb24gZmlsZXMuCitUaGUgZm9sbG93aW5nIEFDRSBwZXJtaXNzaW9ucyBhcmUgc3VwcG9ydGVkOgogLkJsIC10YWcgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QgLXdpZHRoIEFSQ0hJVgogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX1JFQURfREFUQSAoIFN5IHIgKQogUmVhZCBkYXRhIChmaWxlKS4KQEAgLTI2NSw3ICsyNTYsOCBAQAogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX0VOVFJZX0lOSEVSSVRfT05MWSAoIFN5IGkgKQogT25seSBpbmhlcml0LCBkbyBub3QgYXBwbHkgdGhlIHBlcm1pc3Npb24gb24gdGhlIGRpcmVjdG9yeSBpdHNlbGYuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfRU5UUllfTk9fUFJPUEFHQVRFX0lOSEVSSVQgKCBTeSBuICkKLURvIG5vdCBwcm9wYWdhdGUgaW5oZXJpdCBmbGFncy4gT25seSBmaXJzdC1sZXZlbCBlbnRyaWVzIGluaGVyaXQgQUNMcy4KK0RvIG5vdCBwcm9wYWdhdGUgaW5oZXJpdCBmbGFncy4KK09ubHkgZmlyc3QtbGV2ZWwgZW50cmllcyBpbmhlcml0IEFDTHMuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfRU5UUllfU1VDQ0VTU0ZVTF9BQ0NFU1MgKCBTeSBTICkKIFRyaWdnZXIgYWxhcm0gb3IgYXVkaXQgb24gc3VjY2Vzc2Z1bCBhY2Nlc3MuCiAuSXQgRHYgQVJDSElWRV9FTlRSWV9BQ0xfRU5UUllfRkFJTEVEX0FDQ0VTUyAoIFN5IEYgKQpAQCAtMjc5LDggKzI3MSw4IEBACiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfYWRkX2VudHJ5X3cKIGFkZCBhIHNpbmdsZSBBQ0wgZW50cnkuCiBGb3IgdGhlIGFjY2VzcyBBQ0wgYW5kIG5vbi1leHRlbmRlZCBwcmluY2lwYWxzLCB0aGUgY2xhc3NpYyBVbml4IHBlcm1pc3Npb25zCi1hcmUgdXBkYXRlZC4gQW4gYXJjaGl2ZSBlbnRyeSBjYW5ub3QgY29udGFpbiBib3RoIFBPU0lYLjFlIGFuZCBORlN2NCBBQ0wKLWVudHJpZXMuCithcmUgdXBkYXRlZC4KK0FuIGFyY2hpdmUgZW50cnkgY2Fubm90IGNvbnRhaW4gYm90aCBQT1NJWC4xZSBhbmQgTkZTdjQgQUNMIGVudHJpZXMuCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9jbGVhcgogcmVtb3ZlcyBhbGwgQUNMIGVudHJpZXMgYW5kIHJlc2V0cyB0aGUgZW51bWVyYXRpb24gcG9pbnRlci4KQEAgLTMwMCw3ICsyOTIsOCBAQAogLkl0IER2IEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfQVVESVQKIC5JdCBEdiBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0FMQVJNCiAuRWwKLWZvciBORlN2NCBBQ0xzLiBGb3IgUE9TSVguMWUgQUNMcyBpZgorZm9yIE5GU3Y0IEFDTHMuCitGb3IgUE9TSVguMWUgQUNMcyBpZgogLkR2IEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfQUNDRVNTCiBpcyBpbmNsdWRlZCBhbmQgYXQgbGVhc3Qgb25lIGV4dGVuZGVkIEFDTCBlbnRyeSBpcyBmb3VuZCwKIHRoZSB0aHJlZSBub24tZXh0ZW5kZWQgQUNMcyBhcmUgYWRkZWQuCkBAIC0zMTIsNyArMzA1LDggQEAKIC5QcSBvciBtZXJnZSB3aXRoIGV4aXN0aW5nCiBBQ0wgZW50cmllcyBmcm9tCiAuUHEgd2lkZQotdGV4dC4gVGhlIGFyZ3VtZW50Cit0ZXh0LgorVGhlIGFyZ3VtZW50CiAuRmEgdHlwZQogbWF5IHRha2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogLkJsIC10YWcgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QgLXdpZHRoICJBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0RFRkFVTFQiCkBAIC0zMjIsMTEgKzMxNiwxMyBAQAogLkVsCiBTdXBwb3J0cyBhbGwgZm9ybWF0cyB0aGF0IGNhbiBiZSBjcmVhdGVkIHdpdGgKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF90b190ZXh0Ci1vciByZXNwZWN0aXZlCitvciByZXNwZWN0aXZlbHkKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF90b190ZXh0X3cgLgotRXhpc3RpbmcgQUNMIGVudHJpZXMgYXJlIHByZXNlcnZlZC4gVG8gZ2V0IGEgY2xlYW4gbmV3IEFDTCBmcm9tIHRleHQKK0V4aXN0aW5nIEFDTCBlbnRyaWVzIGFyZSBwcmVzZXJ2ZWQuCitUbyBnZXQgYSBjbGVhbiBuZXcgQUNMIGZyb20gdGV4dAogLkZuIGFyY2hpdmVfZW50cnlfYWNsX2NsZWFyCi1tdXN0IGJlIGNhbGxlZCBmaXJzdC4gRW50cmllcyBwcmVmaXhlZCB3aXRoCittdXN0IGJlIGNhbGxlZCBmaXJzdC4KK0VudHJpZXMgcHJlZml4ZWQgd2l0aAogLkRxIGRlZmF1bHQ6CiBhcmUgdHJlYXRlZCBhcwogLkR2IEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfREVGQVVMVApAQCAtMzQyLDggKzMzOCw2IEBACiBhcmUgc2tpcHBlZC4KIC5QcAogLkZuIGFyY2hpdmVfZW50cnlfYWNsX25leHQKLWFuZAotLkZuIGFyY2hpdmVfZW50cnlfYWNsX25leHRfdwogcmV0dXJuIHRoZSBuZXh0IGVudHJ5IG9mIHRoZSBBQ0wgbGlzdC4KIFRoaXMgZnVuY3Rpb25zIG1heSBvbmx5IGJlIGNhbGxlZCBhZnRlcgogLkZuIGFyY2hpdmVfZW50cnlfYWNsX3Jlc2V0CkBAIC0zNTEsMTAgKzM0NSw4IEBACiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X2FjbF9yZXNldAogcHJlcGFyZSByZWFkaW5nIHRoZSBsaXN0IG9mIEFDTCBlbnRyaWVzIHdpdGgKLS5GbiBhcmNoaXZlX2VudHJ5X2FjbF9uZXh0Ci1vcgotLkZuIGFyY2hpdmVfZW50cnlfYWNsX25leHRfdyAuCi1UaGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIgMCwgaWYgbm8gbm9uLWV4dGVuZGVkIEFDTHMgYXJlIGZvdW5kLgorLkZuIGFyY2hpdmVfZW50cnlfYWNsX25leHQgLgorVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBubyBub24tZXh0ZW5kZWQgQUNMcyBhcmUgZm91bmQuCiBJbiB0aGlzIGNhc2UsIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgc2hvdWxkIGJlIG9idGFpbmVkIGJ5CiAuWHIgYXJjaGl2ZV9lbnRyeV9tb2RlIDMKIG9yIHNldCB1c2luZwpAQCAtMzY3LDcgKzM1OSw4IEBACiAuRm4gYXJjaGl2ZV9lbnRyeV9hY2xfdG9fdGV4dF93CiBjb252ZXJ0IHRoZSBBQ0wgZW50cmllcyBmb3IgdGhlIGdpdmVuIHR5cGUgaW50byBhCiAuUHEgd2lkZQotc3RyaW5nIG9mIEFDTCBlbnRyaWVzIHNlcGFyYXRlZCBieSBuZXdsaW5lLiBJZiB0aGUgcG9pbnRlcgorc3RyaW5nIG9mIEFDTCBlbnRyaWVzIHNlcGFyYXRlZCBieSBuZXdsaW5lLgorSWYgdGhlIHBvaW50ZXIKIC5GYSBsZW5fcAogaXMgbm90IE5VTEwsIHRoZW4gdGhlIGZ1bmN0aW9uIHNoYWxsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcKIC5QcSBub3QgaW5jbHVkaW5nIHRoZSBOVUxMIHRlcm1pbmF0b3IKQEAgLTQxNSw3ICs0MDgsOCBAQAogLkRxIGRlZmF1bHQ6IC4KIC5QcAogLkZuIGFyY2hpdmVfZW50cnlfYWNsX3R5cGVzCi1nZXQgQUNMIGVudHJ5IHR5cGVzIGNvbnRhaW5lZCBpbiBhbiBhcmNoaXZlIGVudHJ5J3MgQUNMLiBBcyBQT1NJWC4xZSBhbmQgTkZTdjQKK2dldCBBQ0wgZW50cnkgdHlwZXMgY29udGFpbmVkIGluIGFuIGFyY2hpdmUgZW50cnkncyBBQ0wuCitBcyBQT1NJWC4xZSBhbmQgTkZTdjQKIEFDTCBlbnRyaWVzIGNhbm5vdCBiZSBtaXhlZCwgdGhpcyBmdW5jdGlvbiBpcyBhIHZlcnkgZWZmaWNpZW50IHdheSB0byBkZXRlY3QgaWYKIGFuIEFDTCBhbHJlYWR5IGNvbnRhaW5zIFBPU0lYLjFlIG9yIE5GU3Y0IEFDTCBlbnRyaWVzLgogLlNoIFJFVFVSTiBWQUxVRVMKQEAgLTQzOCw5ICs0MzIsNyBAQAogaWYgb25lIG9yIG1vcmUgZW50cmllcyB3ZXJlIGludmFsaWQgb3Igbm9uLXBhcnNlYWJsZS4KIC5QcAogLkZuIGFyY2hpdmVfZW50cnlfYWNsX25leHQKLWFuZAotLkZuIGFyY2hpdmVfZW50cnlfYWNsX25leHRfdwotcmV0dXJuCityZXR1cm5zCiAuRHYgQVJDSElWRV9PSwogb24gc3VjY2VzcywKIC5EdiBBUkNISVZFX0VPRgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbG9jYWxlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaAppbmRleCA0NDU1MGM1Li44MDNjMDM2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaApAQCAtMjUsMTMgKzI1LDEzIEBACiAgKiAkRnJlZUJTRCQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfRU5UUllfTE9DQUxFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9FTlRSWV9MT0NBTEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX0VOVFJZX0xPQ0FMRV9IX0lOQ0xVREVECi0jZGVmaW5lCUFSQ0hJVkVfRU5UUllfTE9DQUxFX0hfSU5DTFVERUQKLQogc3RydWN0IGFyY2hpdmVfZW50cnk7CiBzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udjsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbWlzYy4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfbWlzYy4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYWI3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9taXNjLjMKQEAgLTAsMCArMSw2MyBAQAorLlwiIENvcHlyaWdodCAoYykgMjAxOSBNYXJ0aW4gTWF0dXNrYQorLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisuXCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisuXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisuXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKy5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisuXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKy5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKy5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisuXCIgU1VDSCBEQU1BR0UuCisuXCIKKy5EZCBBcHJpbCAxNSwgMjAxOQorLkR0IEFSQ0hJVkVfRU5UUllfTUlTQyAzCisuT3MKKy5TaCBOQU1FCisuTm0gYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUgLAorLk5tIGFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZQorLk5kIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgcHJvcGVydGllcyBvZiBhcmNoaXZlX2VudHJ5CisuU2ggTElCUkFSWQorU3RyZWFtaW5nIEFyY2hpdmUgTGlicmFyeSAobGliYXJjaGl2ZSwgLWxhcmNoaXZlKQorLlNoIFNZTk9QU0lTCisuSW4gYXJjaGl2ZV9lbnRyeS5oCisuRnQgaW50CisuRm4gYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUgInN0cnVjdCBhcmNoaXZlX2VudHJ5ICphIgorLkZ0IHZvaWQKKy5GbiBhcmNoaXZlX2VudHJ5X3NldF9zeW1saW5rX3R5cGUgInN0cnVjdCBhcmNoaXZlX2VudHJ5ICphIiAiaW50IgorLlNoIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24KKy5GbiBhcmNoaXZlX2VudHJ5X3N5bWxpbmtfdHlwZQorcmV0dXJucyBhbmQgdGhlIGZ1bmN0aW9uCisuRm4gYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGlua190eXBlCitzZXRzIHRoZSB0eXBlIG9mIHRoZSBzeW1ib2xpYyBsaW5rIHN0b3JlZCBpbiBhbiBhcmNoaXZlIGVudHJ5LgorVGhlc2UgZnVuY3Rpb25zCitoYXZlIHNwZWNpYWwgbWVhbmluZyBvbiBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IHN1cHBvcnQgbXVsdGlwbGUgc3ltYm9saWMgbGluawordHlwZXMgKGUuZy4gTWljcm9zb2Z0IFdpbmRvd3MpLgorLlBwCitTdXBwb3J0ZWQgdmFsdWVzIGFyZToKKy5CbCAtdGFnIC13aWR0aCAiQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWSIgLWNvbXBhY3QKKy5JdCBBRV9TWU1MSU5LX1RZUEVfVU5ERUZJTkVECitTeW1ib2xpYyBsaW5rIHRhcmdldCB0eXBlIGlzIG5vdCBkZWZpbmVkIChkZWZhdWx0IG9uIHVuaXggc3lzdGVtcykKKy5JdCBBRV9TWU1MSU5LX1RZUEVfRklMRQorU3ltYm9saWMgbGluayBwb2ludHMgdG8gYSBmaWxlCisuSXQgQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWQorU3ltYm9saWMgbGluayBwb2ludHMgdG8gYSBkaXJlY3RvcnkKKy5FbAorLlNoIFNFRSBBTFNPCisuWHIgYXJjaGl2ZV9lbnRyeSAzICwKKy5YciBhcmNoaXZlX2VudHJ5X3BhdGhzIDMgLAorLlhyIGFyY2hpdmVfZW50cnlfc3RhdCAzICwKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3BhdGhzLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wYXRocy4zCmluZGV4IGY2NDcyMTIuLjBmODQ5YzkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3BhdGhzLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcGF0aHMuMwpAQCAtMTMzLDcgKzEzMyw3IEBACiAuRm4gWFhYX3cgLgogLkl0IFVURi04CiBVbmljb2RlIHN0cmluZ3MgZW5jb2RlZCBhcyBVVEYtOC4KLVRoaXMgYXJlIGNvbnZpZW5jZSBmdW5jdGlvbnMgdG8gdXBkYXRlIGJvdGggdGhlIG11bHRpYnl0ZSBhbmQgd2lkZQorVGhlc2UgYXJlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byB1cGRhdGUgYm90aCB0aGUgbXVsdGlieXRlIGFuZCB3aWRlCiBjaGFyYWN0ZXIgc3RyaW5ncyBhdCB0aGUgc2FtZSB0aW1lLgogLkVsCiAuUHAKQEAgLTE0MSwxMyArMTQxLDEzIEBACiBhcmNoaXZlIGRpcmVjdGx5LgogLlBwCiBGb3IgdGhhdCByZWFzb24sIGl0IGlzIG9ubHkgYXZhaWxhYmxlIGFzIG11bHRpYnl0ZSBzdHJpbmcuCi1UaGUgbGluayBwYXRoIGlzIGEgY29udmllbmNlIGZ1bmN0aW9uIGZvciBjb25kaXRpb25hbGx5IHNldHRpbmcKK1RoZSBsaW5rIHBhdGggaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY29uZGl0aW9uYWxseSBzZXR0aW5nCiBoYXJkbGluayBvciBzeW1saW5rIGRlc3RpbmF0aW9uLgogSXQgZG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBnZXQgYWNjZXNzb3IgZnVuY3Rpb24uCiAuUHAKIC5GbiBhcmNoaXZlX2VudHJ5X3NldF9YWFgKLWlzIGFuIGFsaWFzIGZvciAKK2lzIGFuIGFsaWFzIGZvcgogLkZuIGFyY2hpdmVfZW50cnlfY29weV9YWFggLgogLlNoIFNFRSBBTFNPCi0uWHIgYXJjaGl2ZV9lbnRyeSAzCi0uWHIgbGliYXJjaGl2ZSAzICwKKy5YciBhcmNoaXZlX2VudHJ5IDMgLAorLlhyIGxpYmFyY2hpdmUgMwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcGVybXMuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3Blcm1zLjMKaW5kZXggYWFlMzY0OC4uMDI5MWI3YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcGVybXMuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wZXJtcy4zCkBAIC0xMjYsNyArMTI2LDcgQEAKIGFuZAogLkZuIGFyY2hpdmVfZW50cnlfc2V0X3Blcm0KIHN0b3JlIHRoZSBnaXZlbiB1c2VyIGlkLCBncm91cCBpZCBhbmQgcGVybWlzc2lvbiBpbiB0aGUgZW50cnkuCi1UaGUgcGVybWlzc2lvbiBpcyBhbHNvIHNldCBhcyBzaWRlIGVmZmVjdCBvZiBjYWxsaW5nCitUaGUgcGVybWlzc2lvbiBpcyBhbHNvIHNldCBhcyBhIHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcKIC5GbiBhcmNoaXZlX2VudHJ5X3NldF9tb2RlIC4KIC5QcAogLkZuIGFyY2hpdmVfZW50cnlfc3RybW9kZQpAQCAtMTQzLDEyICsxNDMsMTIgQEAKIC5GbiBYWFhfdyAuCiAuSXQgVVRGLTgKIFVuaWNvZGUgc3RyaW5ncyBlbmNvZGVkIGFzIFVURi04LgotVGhpcyBhcmUgY29udmllbmNlIGZ1bmN0aW9ucyB0byB1cGRhdGUgYm90aCB0aGUgbXVsdGlieXRlIGFuZCB3aWRlCitUaGVzZSBhcmUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIHVwZGF0ZSBib3RoIHRoZSBtdWx0aWJ5dGUgYW5kIHdpZGUKIGNoYXJhY3RlciBzdHJpbmdzIGF0IHRoZSBzYW1lIHRpbWUuCiAuRWwKIC5QcAogLkZuIGFyY2hpdmVfZW50cnlfc2V0X1hYWAotaXMgYW4gYWxpYXMgZm9yIAoraXMgYW4gYWxpYXMgZm9yCiAuRm4gYXJjaGl2ZV9lbnRyeV9jb3B5X1hYWCAuCiAuU3MgRmlsZSBGbGFncwogRmlsZSBmbGFncyBhcmUgdHJhbnNwYXJlbnRseSBjb252ZXJ0ZWQgYmV0d2VlbiBhIGJpdG1hcApAQCAtMTgyLDcgKzE4Miw3IEBACiAuRm4gYXJjaGl2ZV9lbnRyeV9jb3B5X2ZmbGFnc190ZXh0CiBhbmQKIC5GbiBhcmNoaXZlX2VudHJ5X2NvcHlfZmZsYWdzX3RleHRfdwotZnVuY3Rpb25zIHBhcnNlIHRoZSBwcm92aWRlZCB0ZXh0IGFuZCBzZXRzIHRoZSBpbnRlcm5hbCBiaXRtYXAgdmFsdWVzLgorZnVuY3Rpb25zIHBhcnNlIHRoZSBwcm92aWRlZCB0ZXh0IGFuZCBzZXQgdGhlIGludGVybmFsIGJpdG1hcCB2YWx1ZXMuCiBUaGlzIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgb3BlcmF0aW9uOyBuYW1lcyB0aGF0IGFyZSBub3QgbWVhbmluZ2Z1bAogb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0gd2lsbCBiZSBpZ25vcmVkLgogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgbmFtZSB0aGF0IHdhcyBub3QKQEAgLTE5Nyw4ICsxOTcsOCBAQAogLlhyIGFyY2hpdmVfZW50cnkgMyAsCiAuWHIgYXJjaGl2ZV9lbnRyeV9hY2wgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2Rpc2sgMyAsCi0uWHIgYXJjaGl2ZV93cml0ZV9kaXNrIDMKLS5YciBsaWJhcmNoaXZlIDMgLAorLlhyIGFyY2hpdmVfd3JpdGVfZGlzayAzICwKKy5YciBsaWJhcmNoaXZlIDMKIC5TaCBCVUdTCiBUaGUgcGxhdGZvcm0gdHlwZXMKIC5WdCB1aWRfdApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfcHJpdmF0ZS5oCmluZGV4IGM2OTIzM2UuLjJiOWEwODQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wcml2YXRlLmgKQEAgLTI1LDEzICsyNSwxMyBAQAogICogJEZyZWVCU0Q6IGhlYWQvbGliL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9wcml2YXRlLmggMjAxMDk2IDIwMDktMTItMjggMDI6NDE6MjdaIGtpZW50emxlICQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfRU5UUllfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfRU5UUllfUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfRU5UUllfUFJJVkFURV9IX0lOQ0xVREVECi0jZGVmaW5lCUFSQ0hJVkVfRU5UUllfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpbmNsdWRlICJhcmNoaXZlX2FjbF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9zdHJpbmcuaCIKIApAQCAtMTc2LDYgKzE3Niw5IEBACiAKIAkvKiBNaXNjZWxsYW5lb3VzLiAqLwogCWNoYXIJCSBzdHJtb2RlWzEyXTsKKworCS8qIFN5bWxpbmsgdHlwZSBzdXBwb3J0ICovCisJaW50IGFlX3N5bWxpbmtfdHlwZTsKIH07CiAKICNlbmRpZiAvKiBBUkNISVZFX0VOVFJZX1BSSVZBVEVfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfc3RhdC4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfc3RhdC4zCmluZGV4IDI2NjExZTQuLmFhNWM4ZTAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3N0YXQuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV9zdGF0LjMKQEAgLTU0LDcgKzU0LDcgQEAKIC5ObSBhcmNoaXZlX2VudHJ5X3JkZXZtYWpvciAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9zZXRfcmRldm1ham9yICwKIC5ObSBhcmNoaXZlX2VudHJ5X3JkZXZtaW5vciAsCi0uTm0gYXJjaGl2ZV9lbnRyeV9zZXRfcmRldm1pbm9yICwKKy5ObSBhcmNoaXZlX2VudHJ5X3NldF9yZGV2bWlub3IKIC5OZCBhY2Nlc3NvciBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBhcmNoaXZlIGVudHJ5IGRlc2NyaXB0aW9ucwogLlNoIExJQlJBUlkKIFN0cmVhbWluZyBBcmNoaXZlIExpYnJhcnkgKGxpYmFyY2hpdmUsIC1sYXJjaGl2ZSkKQEAgLTI2Nyw4ICsyNjcsOCBAQAogU29tZSBhcmNoaXZlIGZvcm1hdHMgdXNlIHRoZSBjb21iaW5lZCBmb3JtLCB3aGlsZSBvdGhlciBmb3JtYXRzIHVzZQogdGhlIHNwbGl0IGZvcm0uCiAuU2ggU0VFIEFMU08KKy5YciBzdGF0IDIgLAogLlhyIGFyY2hpdmVfZW50cnlfYWNsIDMgLAogLlhyIGFyY2hpdmVfZW50cnlfcGVybXMgMyAsCiAuWHIgYXJjaGl2ZV9lbnRyeV90aW1lIDMgLAotLlhyIGxpYmFyY2hpdmUgMyAsCi0uWHIgc3RhdCAyCisuWHIgbGliYXJjaGl2ZSAzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV90aW1lLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9lbnRyeV90aW1lLjMKaW5kZXggMTg2NDUyMS4uZDA1NjNlYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZW50cnlfdGltZS4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2VudHJ5X3RpbWUuMwpAQCAtNDgsNyArNDgsNyBAQAogLk5tIGFyY2hpdmVfZW50cnlfbXRpbWVfbnNlYyAsCiAuTm0gYXJjaGl2ZV9lbnRyeV9tdGltZV9pc19zZXQgLAogLk5tIGFyY2hpdmVfZW50cnlfc2V0X210aW1lICwKLS5ObSBhcmNoaXZlX2VudHJ5X3Vuc2V0X210aW1lICwKKy5ObSBhcmNoaXZlX2VudHJ5X3Vuc2V0X210aW1lCiAuTmQgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdGltZXMgaW4gYXJjaGl2ZSBlbnRyeSBkZXNjcmlwdGlvbnMKIC5TaCBMSUJSQVJZCiBTdHJlYW1pbmcgQXJjaGl2ZSBMaWJyYXJ5IChsaWJhcmNoaXZlLCAtbGFyY2hpdmUpCkBAIC0xMTMsOCArMTEzLDggQEAKIC5GbiBYWFhfaXNfc2V0IC4KIFVuc2V0IHRpbWUgZmllbGRzIGhhdmUgYSBzZWNvbmQgYW5kIG5hbm9zZWNvbmQgZmllbGQgb2YgMC4KIC5TaCBTRUUgQUxTTwotLlhyIGFyY2hpdmVfZW50cnkgMwotLlhyIGxpYmFyY2hpdmUgMyAsCisuWHIgYXJjaGl2ZV9lbnRyeSAzICwKKy5YciBsaWJhcmNoaXZlIDMKIC5TaCBISVNUT1JZCiBUaGUKIC5ObSBsaWJhcmNoaXZlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9nZXRkYXRlLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9nZXRkYXRlLmMKaW5kZXggMDMwYzA4My4uNjc4NmQzNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuYwpAQCAtMjcsNiArMjcsOSBAQAogKiogIFRoaXMgY29kZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiBhbmQgaGFzIG5vIGNvcHlyaWdodC4KICovCiAKKyNpZm5kZWYgQ01fR0VUX0RBVEUKKyNpbmNsdWRlICJhcmNoaXZlX3BsYXRmb3JtLmgiCisjZW5kaWYKICNpZmRlZiBfX0ZyZWVCU0RfXwogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNESUQoIiRGcmVlQlNEJCIpOwpAQCAtNjk0LDggKzY5NywxNiBAQAogCXNpZ25lZCBjaGFyIERheXNJbk1vbnRoWzEyXSA9IHsKIAkJMzEsIDAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxCiAJfTsKLQl0aW1lX3QJSnVsaWFuOwotCWludAlpOworCXRpbWVfdAkJSnVsaWFuOworCWludAkJaTsKKwlzdHJ1Y3QgdG0JKmx0aW1lOworI2lmIGRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikgfHwgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCXN0cnVjdCB0bQl0bWJ1ZjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwllcnJub190CQl0ZXJyOworCV9fdGltZTY0X3QJdG1wdGltZTsKKyNlbmRpZgogCiAJaWYgKFllYXIgPCA2OSkKIAkJWWVhciArPSAyMDAwOwpAQCAtNzIyLDIxICs3MzMsNjQgQEAKIAlKdWxpYW4gKj0gREFZOwogCUp1bGlhbiArPSBUaW1lem9uZTsKIAlKdWxpYW4gKz0gSG91cnMgKiBIT1VSICsgTWludXRlcyAqIE1JTlVURSArIFNlY29uZHM7CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorCWx0aW1lID0gbG9jYWx0aW1lX3IoJkp1bGlhbiwgJnRtYnVmKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwl0bXB0aW1lID0gSnVsaWFuOworCXRlcnIgPSBfbG9jYWx0aW1lNjRfcygmdG1idWYsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJbHRpbWUgPSBOVUxMOworCWVsc2UKKwkJbHRpbWUgPSAmdG1idWY7CisjZWxzZQorCWx0aW1lID0gbG9jYWx0aW1lKCZKdWxpYW4pOworI2VuZGlmCiAJaWYgKERTVG1vZGUgPT0gRFNUb24KLQkgICAgfHwgKERTVG1vZGUgPT0gRFNUbWF5YmUgJiYgbG9jYWx0aW1lKCZKdWxpYW4pLT50bV9pc2RzdCkpCisJICAgIHx8IChEU1Rtb2RlID09IERTVG1heWJlICYmIGx0aW1lLT50bV9pc2RzdCkpCiAJCUp1bGlhbiAtPSBIT1VSOwogCXJldHVybiBKdWxpYW47CiB9CiAKLQogc3RhdGljIHRpbWVfdAogRFNUY29ycmVjdCh0aW1lX3QgU3RhcnQsIHRpbWVfdCBGdXR1cmUpCiB7Ci0JdGltZV90CVN0YXJ0RGF5OwotCXRpbWVfdAlGdXR1cmVEYXk7CisJdGltZV90CQlTdGFydERheTsKKwl0aW1lX3QJCUZ1dHVyZURheTsKKwlzdHJ1Y3QgdG0JKmx0aW1lOworI2lmIGRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikgfHwgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCXN0cnVjdCB0bQl0bWJ1ZjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwllcnJub190CQl0ZXJyOworCV9fdGltZTY0X3QJdG1wdGltZTsKKyNlbmRpZgogCi0JU3RhcnREYXkgPSAobG9jYWx0aW1lKCZTdGFydCktPnRtX2hvdXIgKyAxKSAlIDI0OwotCUZ1dHVyZURheSA9IChsb2NhbHRpbWUoJkZ1dHVyZSktPnRtX2hvdXIgKyAxKSAlIDI0OworI2lmIGRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikKKwlsdGltZSA9IGxvY2FsdGltZV9yKCZTdGFydCwgJnRtYnVmKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwl0bXB0aW1lID0gU3RhcnQ7CisJdGVyciA9IF9sb2NhbHRpbWU2NF9zKCZ0bWJ1ZiwgJnRtcHRpbWUpOworCWlmICh0ZXJyKQorCQlsdGltZSA9IE5VTEw7CisJZWxzZQorCQlsdGltZSA9ICZ0bWJ1ZjsKKyNlbHNlCisJbHRpbWUgPSBsb2NhbHRpbWUoJlN0YXJ0KTsKKyNlbmRpZgorCVN0YXJ0RGF5ID0gKGx0aW1lLT50bV9ob3VyICsgMSkgJSAyNDsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpCisJbHRpbWUgPSBsb2NhbHRpbWVfcigmRnV0dXJlLCAmdG1idWYpOworI2VsaWYgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCXRtcHRpbWUgPSBGdXR1cmU7CisJdGVyciA9IF9sb2NhbHRpbWU2NF9zKCZ0bWJ1ZiwgJnRtcHRpbWUpOworCWlmICh0ZXJyKQorCQlsdGltZSA9IE5VTEw7CisJZWxzZQorCQlsdGltZSA9ICZ0bWJ1ZjsKKyNlbHNlCisJbHRpbWUgPSBsb2NhbHRpbWUoJkZ1dHVyZSk7CisjZW5kaWYKKwlGdXR1cmVEYXkgPSAobHRpbWUtPnRtX2hvdXIgKyAxKSAlIDI0OwogCXJldHVybiAoRnV0dXJlIC0gU3RhcnQpICsgKFN0YXJ0RGF5IC0gRnV0dXJlRGF5KSAqIEhPVVI7CiB9CiAKQEAgLTc0Nyw5ICs4MDEsMjcgQEAKIHsKIAlzdHJ1Y3QgdG0JKnRtOwogCXRpbWVfdAl0LCBub3c7CisjaWYgZGVmaW5lZChIQVZFX0dNVElNRV9SKSB8fCBkZWZpbmVkKEhBVkVfX0dNVElNRTY0X1MpCisJc3RydWN0IHRtCXRtYnVmOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQorCWVycm5vX3QJCXRlcnI7CisJX190aW1lNjRfdAl0bXB0aW1lOworI2VuZGlmCiAKIAl0ID0gU3RhcnQgLSB6b25lOworI2lmIGRlZmluZWQoSEFWRV9HTVRJTUVfUikKKwl0bSA9IGdtdGltZV9yKCZ0LCAmdG1idWYpOworI2VsaWYgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQorCXRtcHRpbWUgPSB0OworCXRlcnIgPSBfZ210aW1lNjRfcygmdG1idWYsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJdG0gPSBOVUxMOworCWVsc2UKKwkJdG0gPSAmdG1idWY7CisjZWxzZQogCXRtID0gZ210aW1lKCZ0KTsKKyNlbmRpZgogCW5vdyA9IFN0YXJ0OwogCW5vdyArPSBEQVkgKiAoKERheU51bWJlciAtIHRtLT50bV93ZGF5ICsgNykgJSA3KTsKIAlub3cgKz0gNyAqIERBWSAqIChEYXlPcmRpbmFsIDw9IDAgPyBEYXlPcmRpbmFsIDogRGF5T3JkaW5hbCAtIDEpOwpAQCAtNzY1LDEwICs4MzcsMjggQEAKIAlzdHJ1Y3QgdG0JKnRtOwogCXRpbWVfdAlNb250aDsKIAl0aW1lX3QJWWVhcjsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpIHx8IGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwlzdHJ1Y3QgdG0JdG1idWY7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJZXJybm9fdAkJdGVycjsKKwlfX3RpbWU2NF90CXRtcHRpbWU7CisjZW5kaWYKIAogCWlmIChSZWxNb250aCA9PSAwKQogCQlyZXR1cm4gMDsKKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpCisJdG0gPSBsb2NhbHRpbWVfcigmU3RhcnQsICZ0bWJ1Zik7CisjZWxpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJdG1wdGltZSA9IFN0YXJ0OworCXRlcnIgPSBfbG9jYWx0aW1lNjRfcygmdG1idWYsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJdG0gPSBOVUxMOworCWVsc2UKKwkJdG0gPSAmdG1idWY7CisjZWxzZQogCXRtID0gbG9jYWx0aW1lKCZTdGFydCk7CisjZW5kaWYKIAlNb250aCA9IDEyICogKHRtLT50bV95ZWFyICsgMTkwMCkgKyB0bS0+dG1fbW9uICsgUmVsTW9udGg7CiAJWWVhciA9IE1vbnRoIC8gMTI7CiAJTW9udGggPSBNb250aCAlIDEyICsgMTsKQEAgLTkwNSw2ICs5OTUsMTAgQEAKIAl0aW1lX3QJCVN0YXJ0OwogCXRpbWVfdAkJdG9kOwogCWxvbmcJCXR6b25lOworI2lmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykgfHwgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQorCWVycm5vX3QJCXRlcnI7CisJX190aW1lNjRfdAl0bXB0aW1lOworI2VuZGlmCiAKIAkvKiBDbGVhciBvdXQgdGhlIHBhcnNlZCB0b2tlbiBhcnJheS4gKi8KIAltZW1zZXQodG9rZW5zLCAwLCBzaXplb2YodG9rZW5zKSk7CkBAIC05MTMsMjAgKzEwMDcsNDQgQEAKIAlnZHMgPSAmX2dkczsKIAogCS8qIExvb2sgdXAgdGhlIGN1cnJlbnQgdGltZS4gKi8KKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpCisJdG0gPSBsb2NhbHRpbWVfcigmbm93LCAmbG9jYWwpOworI2VsaWYgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCXRtcHRpbWUgPSBub3c7CisJdGVyciA9IF9sb2NhbHRpbWU2NF9zKCZsb2NhbCwgJnRtcHRpbWUpOworCWlmICh0ZXJyKQorCQl0bSA9IE5VTEw7CisJZWxzZQorCQl0bSA9ICZsb2NhbDsKKyNlbHNlCiAJbWVtc2V0KCZsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsKSk7Ci0JdG0gPSBsb2NhbHRpbWUgKCZub3cpOworCXRtID0gbG9jYWx0aW1lKCZub3cpOworI2VuZGlmCiAJaWYgKHRtID09IE5VTEwpCiAJCXJldHVybiAtMTsKKyNpZiAhZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKSAmJiAhZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQogCWxvY2FsID0gKnRtOworI2VuZGlmCiAKIAkvKiBMb29rIHVwIFVUQyBpZiB3ZSBjYW4gYW5kIHVzZSB0aGF0IHRvIGRldGVybWluZSB0aGUgY3VycmVudAogCSAqIHRpbWV6b25lIG9mZnNldC4gKi8KKyNpZiBkZWZpbmVkKEhBVkVfR01USU1FX1IpCisJZ210X3B0ciA9IGdtdGltZV9yKCZub3csICZnbXQpOworI2VsaWYgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQorCXRtcHRpbWUgPSBub3c7CisJdGVyciA9IF9nbXRpbWU2NF9zKCZnbXQsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJZ210X3B0ciA9IE5VTEw7CisJZWxzZQorCQlnbXRfcHRyID0gJmdtdDsKKyNlbHNlCiAJbWVtc2V0KCZnbXQsIDAsIHNpemVvZihnbXQpKTsKLQlnbXRfcHRyID0gZ210aW1lICgmbm93KTsKKwlnbXRfcHRyID0gZ210aW1lKCZub3cpOwogCWlmIChnbXRfcHRyICE9IE5VTEwpIHsKIAkJLyogQ29weSwgaW4gY2FzZSBsb2NhbHRpbWUgYW5kIGdtdGltZSB1c2UgdGhlIHNhbWUgYnVmZmVyLiAqLwogCQlnbXQgPSAqZ210X3B0cjsKIAl9CisjZW5kaWYKIAlpZiAoZ210X3B0ciAhPSBOVUxMKQogCQl0em9uZSA9IGRpZmZ0bSAoJmdtdCwgJmxvY2FsKTsKIAllbHNlCkBAIC05NjAsNyArMTA3OCwxOCBAQAogCSAqIHRpbWUgY29tcG9uZW50cyBpbnN0ZWFkIG9mIHRoZSBsb2NhbCB0aW1lem9uZS4gKi8KIAlpZiAoZ2RzLT5IYXZlWm9uZSAmJiBnbXRfcHRyICE9IE5VTEwpIHsKIAkJbm93IC09IGdkcy0+VGltZXpvbmU7Ci0JCWdtdF9wdHIgPSBnbXRpbWUgKCZub3cpOworI2lmIGRlZmluZWQoSEFWRV9HTVRJTUVfUikKKwkJZ210X3B0ciA9IGdtdGltZV9yKCZub3csICZnbXQpOworI2VsaWYgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQorCQl0bXB0aW1lID0gbm93OworCQl0ZXJyID0gX2dtdGltZTY0X3MoJmdtdCwgJnRtcHRpbWUpOworCQlpZiAodGVycikKKwkJCWdtdF9wdHIgPSBOVUxMOworCQllbHNlCisJCQlnbXRfcHRyID0gJmdtdDsKKyNlbHNlCisJCWdtdF9wdHIgPSBnbXRpbWUoJm5vdyk7CisjZW5kaWYKIAkJaWYgKGdtdF9wdHIgIT0gTlVMTCkKIAkJCWxvY2FsID0gKmdtdF9wdHI7CiAJCW5vdyArPSBnZHMtPlRpbWV6b25lOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfZ2V0ZGF0ZS5oCmluZGV4IDY2NmZmNWYuLjkwMGE4ZjYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2dldGRhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9nZXRkYXRlLmgKQEAgLTI1LDEzICsyNSwxMyBAQAogICogJEZyZWVCU0QkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX0dFVERBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX0dFVERBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX0dFVERBVEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX0dFVERBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSA8dGltZS5oPgogCiB0aW1lX3QgX19hcmNoaXZlX2dldF9kYXRlKHRpbWVfdCBub3csIGNvbnN0IGNoYXIgKik7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjLmMKaW5kZXggZjI5OTY1NS4uMmE5ZDA0YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfaG1hYy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2htYWMuYwpAQCAtODMsNiArODMsOSBAQAogc3RhdGljIGludAogX19obWFjX3NoYTFfaW5pdChhcmNoaXZlX2htYWNfc2hhMV9jdHggKmN0eCwgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbikKIHsKKyNpZmRlZiBfX0dOVUNfXworI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Nhc3QtcXVhbCIKKyNlbmRpZgogCUJDUllQVF9BTEdfSEFORExFIGhBbGc7CiAJQkNSWVBUX0hBU0hfSEFORExFIGhIYXNoOwogCURXT1JEIGhhc2hfbGVuOwpAQCAtMTQ3LDYgKzE1MCw1MyBAQAogCX0KIH0KIAorI2VsaWYgZGVmaW5lZChIQVZFX0xJQk1CRURDUllQVE8pICYmIGRlZmluZWQoSEFWRV9NQkVEVExTX01EX0gpCisKK3N0YXRpYyBpbnQKK19faG1hY19zaGExX2luaXQoYXJjaGl2ZV9obWFjX3NoYTFfY3R4ICpjdHgsIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW4pCit7CisgICAgICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICppbmZvOworICAgICAgICBpbnQgcmV0OworCisgICAgICAgIG1iZWR0bHNfbWRfaW5pdChjdHgpOworICAgICAgICBpbmZvID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZShNQkVEVExTX01EX1NIQTEpOworICAgICAgICBpZiAoaW5mbyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9mcmVlKGN0eCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gbWJlZHRsc19tZF9zZXR1cChjdHgsIGluZm8sIDEpOworICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2ZyZWUoY3R4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgfQorCXJldCA9IG1iZWR0bHNfbWRfaG1hY19zdGFydHMoY3R4LCBrZXksIGtleV9sZW4pOworCWlmIChyZXQgIT0gMCkgeworCQltYmVkdGxzX21kX2ZyZWUoY3R4KTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorX19obWFjX3NoYTFfdXBkYXRlKGFyY2hpdmVfaG1hY19zaGExX2N0eCAqY3R4LCBjb25zdCB1aW50OF90ICpkYXRhLAorICAgIHNpemVfdCBkYXRhX2xlbikKK3sKKwltYmVkdGxzX21kX2htYWNfdXBkYXRlKGN0eCwgZGF0YSwgZGF0YV9sZW4pOworfQorCitzdGF0aWMgdm9pZCBfX2htYWNfc2hhMV9maW5hbChhcmNoaXZlX2htYWNfc2hhMV9jdHggKmN0eCwgdWludDhfdCAqb3V0LCBzaXplX3QgKm91dF9sZW4pCit7CisJKHZvaWQpb3V0X2xlbjsJLyogVU5VU0VEICovCisKKwltYmVkdGxzX21kX2htYWNfZmluaXNoKGN0eCwgb3V0KTsKK30KKworc3RhdGljIHZvaWQgX19obWFjX3NoYTFfY2xlYW51cChhcmNoaXZlX2htYWNfc2hhMV9jdHggKmN0eCkKK3sKKwltYmVkdGxzX21kX2ZyZWUoY3R4KTsKKwltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOworfQorCiAjZWxpZiBkZWZpbmVkKEhBVkVfTElCTkVUVExFKSAmJiBkZWZpbmVkKEhBVkVfTkVUVExFX0hNQUNfSCkKIAogc3RhdGljIGludApAQCAtMTk4LDYgKzI0OCw3IEBACiBfX2htYWNfc2hhMV9maW5hbChhcmNoaXZlX2htYWNfc2hhMV9jdHggKmN0eCwgdWludDhfdCAqb3V0LCBzaXplX3QgKm91dF9sZW4pCiB7CiAJdW5zaWduZWQgaW50IGxlbiA9ICh1bnNpZ25lZCBpbnQpKm91dF9sZW47CisKIAlITUFDX0ZpbmFsKCpjdHgsIG91dCwgJmxlbik7CiAJKm91dF9sZW4gPSBsZW47CiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9obWFjX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2htYWNfcHJpdmF0ZS5oCmluZGV4IGViNDVjNGUuLjEzYTY3ZDQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2htYWNfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX2htYWNfcHJpdmF0ZS5oCkBAIC0yMywxMyArMjMsMTIgQEAKICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCiAKLSNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECi0jZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KLSNlbmRpZgotCiAjaWZuZGVmIEFSQ0hJVkVfSE1BQ19QUklWQVRFX0hfSU5DTFVERUQKICNkZWZpbmUgQVJDSElWRV9ITUFDX1BSSVZBVEVfSF9JTkNMVURFRAogCisjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAorI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCisjZW5kaWYKIC8qCiAgKiBPbiBzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgYW55IHJlY29nbml6ZWQgY3J5cHRvIGxpYnJhcmllcywKICAqIHRoZSBhcmNoaXZlX2htYWMuYyBmaWxlIGlzIGV4cGVjdGVkIHRvIGRlZmluZSBubyB1c2FibGUgc3ltYm9scy4KQEAgLTY0LDYgKzYzLDExIEBACiAKIH0gYXJjaGl2ZV9obWFjX3NoYTFfY3R4OwogCisjZWxpZiBkZWZpbmVkKEhBVkVfTElCTUJFRENSWVBUTykgJiYgZGVmaW5lZChIQVZFX01CRURUTFNfTURfSCkKKyNpbmNsdWRlIDxtYmVkdGxzL21kLmg+CisKK3R5cGVkZWYgbWJlZHRsc19tZF9jb250ZXh0X3QgYXJjaGl2ZV9obWFjX3NoYTFfY3R4OworCiAjZWxpZiBkZWZpbmVkKEhBVkVfTElCTkVUVExFKSAmJiBkZWZpbmVkKEhBVkVfTkVUVExFX0hNQUNfSCkKICNpbmNsdWRlIDxuZXR0bGUvaG1hYy5oPgogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9tYXRjaC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfbWF0Y2guYwppbmRleCBmMTUwZTgyLi4wNDc0N2IxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9tYXRjaC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX21hdGNoLmMKQEAgLTkzLDYgKzkzLDkgQEAKIAkvKiBleGNsdXNpb24vaW5jbHVzaW9uIHNldCBmbGFnLiAqLwogCWludAkJCSBzZXRmbGFnOwogCisJLyogUmVjdXJzaXZlbHkgaW5jbHVkZSBkaXJlY3RvcnkgY29udGVudD8gKi8KKwlpbnQJCQkgcmVjdXJzaXZlX2luY2x1ZGU7CisKIAkvKgogCSAqIE1hdGNoaW5nIGZpbGVuYW1lIHBhdHRlcm5zLgogCSAqLwpAQCAtMjIzLDYgKzIyNiw3IEBACiAJCXJldHVybiAoTlVMTCk7CiAJYS0+YXJjaGl2ZS5tYWdpYyA9IEFSQ0hJVkVfTUFUQ0hfTUFHSUM7CiAJYS0+YXJjaGl2ZS5zdGF0ZSA9IEFSQ0hJVkVfU1RBVEVfTkVXOworCWEtPnJlY3Vyc2l2ZV9pbmNsdWRlID0gMTsKIAltYXRjaF9saXN0X2luaXQoJihhLT5pbmNsdXNpb25zKSk7CiAJbWF0Y2hfbGlzdF9pbml0KCYoYS0+ZXhjbHVzaW9ucykpOwogCV9fYXJjaGl2ZV9yYl90cmVlX2luaXQoJihhLT5leGNsdXNpb25fdHJlZSksICZyYl9vcHNfbWJzKTsKQEAgLTQ3MSw2ICs0NzUsMjggQEAKIH0KIAogLyoKKyAqIFdoZW4gcmVjdXJzaXZlIGluY2x1c2lvbiBvZiBkaXJlY3RvcnkgY29udGVudCBpcyBlbmFibGVkLAorICogYW4gaW5jbHVzaW9uIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGEgZGlyZWN0b3J5IHdpbGwgYWxzbworICogaW5jbHVkZSBldmVyeXRoaW5nIGJlbmVhdGggdGhhdCBkaXJlY3RvcnkuIEVuYWJsZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEdOVSB0YXIsIGV4Y2x1c2lvbiBwYXR0ZXJucyBhbHdheXMKKyAqIG1hdGNoIGlmIGEgc3Vic2V0IG9mIHRoZSBmdWxsIHBhdGNoIG1hdGNoZXMgKGkuZS4sIHRoZXkgYXJlCisgKiBhcmUgbm90IHJvb3RlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoKSBhbmQgdGh1cyB0aGVyZQorICogaXMgbm8gY29ycmVzcG9uZGluZyBub24tcmVjdXJzaXZlIGV4Y2x1c2lvbiBtb2RlLgorICovCitpbnQKK2FyY2hpdmVfbWF0Y2hfc2V0X2luY2x1c2lvbl9yZWN1cnNpb24oc3RydWN0IGFyY2hpdmUgKl9hLCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgYXJjaGl2ZV9tYXRjaCAqYTsKKworCWFyY2hpdmVfY2hlY2tfbWFnaWMoX2EsIEFSQ0hJVkVfTUFUQ0hfTUFHSUMsCisJICAgIEFSQ0hJVkVfU1RBVEVfTkVXLCAiYXJjaGl2ZV9tYXRjaF9zZXRfaW5jbHVzaW9uX3JlY3Vyc2lvbiIpOworCWEgPSAoc3RydWN0IGFyY2hpdmVfbWF0Y2ggKilfYTsKKwlhLT5yZWN1cnNpdmVfaW5jbHVkZSA9IGVuYWJsZWQ7CisJcmV0dXJuIChBUkNISVZFX09LKTsKK30KKworLyoKICAqIFV0aWxpdHkgZnVuY3Rpb25zIHRvIGdldCBzdGF0aXN0aWMgaW5mb3JtYXRpb24gZm9yIGluY2x1c2lvbiBwYXR0ZXJucy4KICAqLwogaW50CkBAIC03ODEsNyArODA3LDEwIEBACiBtYXRjaF9wYXRoX2luY2x1c2lvbihzdHJ1Y3QgYXJjaGl2ZV9tYXRjaCAqYSwgc3RydWN0IG1hdGNoICptLAogICAgIGludCBtYnMsIGNvbnN0IHZvaWQgKnBuKQogewotCWludCBmbGFnID0gUEFUSE1BVENIX05PX0FOQ0hPUl9FTkQ7CisJLyogUmVjdXJzaXZlIG9wZXJhdGlvbiByZXF1aXJlcyBvbmx5IGEgcHJlZml4IG1hdGNoLiAqLworCWludCBmbGFnID0gYS0+cmVjdXJzaXZlX2luY2x1ZGUgPworCQlQQVRITUFUQ0hfTk9fQU5DSE9SX0VORCA6CisJCTA7CiAJaW50IHI7CiAKIAlpZiAobWJzKSB7CkBAIC0xMjMyLDcgKzEyNjEsNyBAQAogCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBFSU5WQUwsICJwYXRobmFtZSBpcyBlbXB0eSIpOwogCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKIAl9Ci0JaWYgKHN0YXQocGF0aCwgJnN0KSAhPSAwKSB7CisJaWYgKGxhX3N0YXQocGF0aCwgJnN0KSAhPSAwKSB7CiAJCWFyY2hpdmVfc2V0X2Vycm9yKCYoYS0+YXJjaGl2ZSksIGVycm5vLCAiRmFpbGVkIHRvIHN0YXQoKSIpOwogCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKIAl9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcGVuc3NsX2V2cF9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcGVuc3NsX2V2cF9wcml2YXRlLmgKaW5kZXggNDNhM2NjYy4uZWJiMDY3MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3BlbnNzbF9ldnBfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wZW5zc2xfZXZwX3ByaXZhdGUuaApAQCAtMjIsOSArMjIsMTQgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIEFSQ0hJVkVfT1BFTlNTTF9FVlBfUFJJVkFURV9IX0lOQ0xVREVECiAjZGVmaW5lIEFSQ0hJVkVfT1BFTlNTTF9FVlBfUFJJVkFURV9IX0lOQ0xVREVECiAKKyNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECisjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KKyNlbmRpZgorCiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wZW5zc2xfaG1hY19wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9vcGVuc3NsX2htYWNfcHJpdmF0ZS5oCmluZGV4IDkyMTI0OWIuLjI1YzhkZGEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wZW5zc2xfaG1hY19wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3BlbnNzbF9obWFjX3ByaXZhdGUuaApAQCAtMjIsOSArMjIsMTQgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIEFSQ0hJVkVfT1BFTlNTTF9ITUFDX1BSSVZBVEVfSF9JTkNMVURFRAogI2RlZmluZSBBUkNISVZFX09QRU5TU0xfSE1BQ19QUklWQVRFX0hfSU5DTFVERUQKIAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKKyNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgorI2VuZGlmCisKICNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX29wdGlvbnNfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3B0aW9uc19wcml2YXRlLmgKaW5kZXggNmVmMDE2NS4uOWE3ZjgwOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3B0aW9uc19wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfb3B0aW9uc19wcml2YXRlLmgKQEAgLTIzLDYgKzIzLDkgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX09QVElPTlNfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfT1BUSU9OU19QUklWQVRFX0hfSU5DTFVERUQKKwogI2luY2x1ZGUgImFyY2hpdmVfcGxhdGZvcm0uaCIKIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKIApAQCAtNDUsMyArNDgsNCBAQAogICAgIGNvbnN0IGNoYXIgKm0sIGNvbnN0IGNoYXIgKm8sIGNvbnN0IGNoYXIgKnYsCiAgICAgb3B0aW9uX2hhbmRsZXIgdXNlX2Zvcm1hdF9vcHRpb24sIG9wdGlvbl9oYW5kbGVyIHVzZV9maWx0ZXJfb3B0aW9uKTsKIAorI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wYWNrX2Rldi5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGFja19kZXYuYwppbmRleCA1M2JkZGQ3Li5mODI4NmQ4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wYWNrX2Rldi5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhY2tfZGV2LmMKQEAgLTU3LDggKzU3LDEyIEBACiAjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1NZU01BQ1JPU19ICisjaWYgTUFKT1JfSU5fTUtERVYKKyNpbmNsdWRlIDxzeXMvbWtkZXYuaD4KKyNkZWZpbmUgSEFWRV9NQUpPUgorI2VsaWYgTUFKT1JfSU5fU1lTTUFDUk9TCiAjaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgorI2RlZmluZSBIQVZFX01BSk9SCiAjZW5kaWYKICNpZmRlZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wYWNrX2Rldi5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGFja19kZXYuaAppbmRleCA3NDlmZDNkLi5lYWYyM2UzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wYWNrX2Rldi5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhY2tfZGV2LmgKQEAgLTMxLDggKzMxLDggQEAKIAogLyogT3JpZ2luYWxseSBmcm9tIE5ldEJTRCdzIG1rbm9kKDgpIHNvdXJjZS4gKi8KIAotI2lmbmRlZglfUEFDS19ERVZfSAotI2RlZmluZQlfUEFDS19ERVZfSAorI2lmbmRlZglBUkNISVZFX1BBQ0tfREVWX0gKKyNkZWZpbmUJQVJDSElWRV9QQUNLX0RFVl9ICiAKIHR5cGVkZWYJZGV2X3QgcGFja190KGludCwgdW5zaWduZWQgbG9uZyBbXSwgY29uc3QgY2hhciAqKik7CiAKQEAgLTQ2LDQgKzQ2LDQgQEAKIAkJCQkJICgoKHkpIDw8IDEyKSAmIDB4ZmZmMDAwMDApIHwgXAogCQkJCQkgKCgoeSkgPDwgIDApICYgMHgwMDAwMDBmZikpKQogCi0jZW5kaWYJLyogX1BBQ0tfREVWX0ggKi8KKyNlbmRpZgkvKiBBUkNISVZFX1BBQ0tfREVWX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BhdGhtYXRjaC5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGF0aG1hdGNoLmgKaW5kZXggZTY5MDE3Ny4uOTk5NTE0MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGF0aG1hdGNoLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGF0aG1hdGNoLmgKQEAgLTI2LDE1ICsyNiwxNSBAQAogICogJEZyZWVCU0QkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX1BBVEhNQVRDSF9ICisjZGVmaW5lIEFSQ0hJVkVfUEFUSE1BVENIX0gKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNpZm5kZWYgX19MSUJBUkNISVZFX1RFU1QKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1BBVEhNQVRDSF9ICi0jZGVmaW5lIEFSQ0hJVkVfUEFUSE1BVENIX0gKLQogLyogRG9uJ3QgYW5jaG9yIGF0IGJlZ2lubmluZyB1bmxlc3MgdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggIl4iICovCiAjZGVmaW5lIFBBVEhNQVRDSF9OT19BTkNIT1JfU1RBUlQJMQogLyogRG9uJ3QgYW5jaG9yIGF0IGVuZCB1bmxlc3MgdGhlIHBhdHRlcm4gZW5kcyB3aXRoICIkIiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm0uaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtLmgKaW5kZXggZTE2MWU2NC4uMzI3MzkzMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm0uaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybS5oCkBAIC02OSw2ICs2OSw4IEBACiAgKiBlaXRoZXIgV2luZG93cyBvciBQb3NpeCBBUElzLiAqLwogI2lmIChkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19XSU4zMikpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAjaW5jbHVkZSAiYXJjaGl2ZV93aW5kb3dzLmgiCisjZWxzZQorI2RlZmluZSBsYV9zdGF0KHBhdGgsc3RyZWYpCQlzdGF0KHBhdGgsc3RyZWYpCiAjZW5kaWYKIAogLyoKQEAgLTEwNSw1NiArMTA3LDQ0IEBACiAKIC8qIEJvcmxhbmQgd2FybnMgYWJvdXQgaXRzIG93biBjb25zdGFudHMhICAqLwogI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKQotIyBpZiBIQVZFX0RFQ0xfVUlOVDY0X01BWAotIyAgdW5kZWYJVUlOVDY0X01BWAotIyAgdW5kZWYJSEFWRV9ERUNMX1VJTlQ2NF9NQVgKLSMgZW5kaWYKLSMgaWYgSEFWRV9ERUNMX1VJTlQ2NF9NSU4KLSMgIHVuZGVmCVVJTlQ2NF9NSU4KLSMgIHVuZGVmCUhBVkVfREVDTF9VSU5UNjRfTUlOCi0jIGVuZGlmCi0jIGlmIEhBVkVfREVDTF9JTlQ2NF9NQVgKLSMgIHVuZGVmCUlOVDY0X01BWAotIyAgdW5kZWYJSEFWRV9ERUNMX0lOVDY0X01BWAotIyBlbmRpZgotIyBpZiBIQVZFX0RFQ0xfSU5UNjRfTUlOCi0jICB1bmRlZglJTlQ2NF9NSU4KLSMgIHVuZGVmCUhBVkVfREVDTF9JTlQ2NF9NSU4KLSMgZW5kaWYKKyMgdW5kZWYJVUlOVDY0X01BWAorIyB1bmRlZglVSU5UNjRfTUlOCisjIHVuZGVmCUlOVDY0X01BWAorIyB1bmRlZglJTlQ2NF9NSU4KICNlbmRpZgogCiAvKiBTb21lIHBsYXRmb3JtcyBsYWNrIHRoZSBzdGFuZGFyZCAqX01BWCBkZWZpbml0aW9ucy4gKi8KLSNpZiAhSEFWRV9ERUNMX1NJWkVfTUFYCisjaWZuZGVmIFNJWkVfTUFYCiAjZGVmaW5lCVNJWkVfTUFYICh+KHNpemVfdCkwKQogI2VuZGlmCi0jaWYgIUhBVkVfREVDTF9TU0laRV9NQVgKKyNpZm5kZWYgU1NJWkVfTUFYCiAjZGVmaW5lCVNTSVpFX01BWCAoKHNzaXplX3QpKFNJWkVfTUFYID4+IDEpKQogI2VuZGlmCi0jaWYgIUhBVkVfREVDTF9VSU5UMzJfTUFYCisjaWZuZGVmIFVJTlQzMl9NQVgKICNkZWZpbmUJVUlOVDMyX01BWCAofih1aW50MzJfdCkwKQogI2VuZGlmCi0jaWYgIUhBVkVfREVDTF9JTlQzMl9NQVgKKyNpZm5kZWYgSU5UMzJfTUFYCiAjZGVmaW5lCUlOVDMyX01BWCAoKGludDMyX3QpKFVJTlQzMl9NQVggPj4gMSkpCiAjZW5kaWYKLSNpZiAhSEFWRV9ERUNMX0lOVDMyX01JTgorI2lmbmRlZiBJTlQzMl9NSU4KICNkZWZpbmUJSU5UMzJfTUlOICgoaW50MzJfdCkofklOVDMyX01BWCkpCiAjZW5kaWYKLSNpZiAhSEFWRV9ERUNMX1VJTlQ2NF9NQVgKKyNpZm5kZWYgVUlOVDY0X01BWAogI2RlZmluZQlVSU5UNjRfTUFYICh+KHVpbnQ2NF90KTApCiAjZW5kaWYKLSNpZiAhSEFWRV9ERUNMX0lOVDY0X01BWAorI2lmbmRlZiBJTlQ2NF9NQVgKICNkZWZpbmUJSU5UNjRfTUFYICgoaW50NjRfdCkoVUlOVDY0X01BWCA+PiAxKSkKICNlbmRpZgotI2lmICFIQVZFX0RFQ0xfSU5UNjRfTUlOCisjaWZuZGVmIElOVDY0X01JTgogI2RlZmluZQlJTlQ2NF9NSU4gKChpbnQ2NF90KSh+SU5UNjRfTUFYKSkKICNlbmRpZgotI2lmICFIQVZFX0RFQ0xfVUlOVE1BWF9NQVgKKyNpZm5kZWYgVUlOVE1BWF9NQVgKICNkZWZpbmUJVUlOVE1BWF9NQVggKH4odWludG1heF90KTApCiAjZW5kaWYKLSNpZiAhSEFWRV9ERUNMX0lOVE1BWF9NQVgKKyNpZm5kZWYgSU5UTUFYX01BWAogI2RlZmluZQlJTlRNQVhfTUFYICgoaW50bWF4X3QpKFVJTlRNQVhfTUFYID4+IDEpKQogI2VuZGlmCi0jaWYgIUhBVkVfREVDTF9JTlRNQVhfTUlOCisjaWZuZGVmIElOVE1BWF9NSU4KICNkZWZpbmUJSU5UTUFYX01JTiAoKGludG1heF90KSh+SU5UTUFYX01BWCkpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm1fYWNsLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybV9hY2wuaAppbmRleCAzNDk4Zjc4Li4yNjRlNmRlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybV9hY2wuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybV9hY2wuaApAQCAtMzAsNiArMzAsMTIgQEAKICNpZm5kZWYgQVJDSElWRV9QTEFURk9STV9BQ0xfSF9JTkNMVURFRAogI2RlZmluZSBBUkNISVZFX1BMQVRGT1JNX0FDTF9IX0lOQ0xVREVECiAKKyNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECisjaWZuZGVmIF9fTElCQVJDSElWRV9URVNUX0NPTU1PTgorI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCisjZW5kaWYKKyNlbmRpZgorCiAvKgogICogRGV0ZXJtaW5lIHdoYXQgQUNMIHR5cGVzIGFyZSBzdXBwb3J0ZWQKICAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm1feGF0dHIuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BsYXRmb3JtX3hhdHRyLmgKaW5kZXggNGVkZmVjZi4uYWQ0YjkwYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcGxhdGZvcm1feGF0dHIuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wbGF0Zm9ybV94YXR0ci5oCkBAIC0zMCw2ICszMCwxMiBAQAogI2lmbmRlZiBBUkNISVZFX1BMQVRGT1JNX1hBVFRSX0hfSU5DTFVERUQKICNkZWZpbmUgQVJDSElWRV9QTEFURk9STV9YQVRUUl9IX0lOQ0xVREVECiAKKyNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECisjaWZuZGVmIF9fTElCQVJDSElWRV9URVNUX0NPTU1PTgorI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCisjZW5kaWYKKyNlbmRpZgorCiAvKgogICogRGV0ZXJtaW5lIGlmIHdlIHN1cHBvcnQgZXh0ZW5kZWQgYXR0cmlidXRlcwogICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kNy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDcuYwppbmRleCBkMGJhY2M2Li40MDI5Mzk1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kNy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ3LmMKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAKIHN0YXRpYyB2b2lkIFJhbmdlRW5jX0VuY29kZShDUHBtZDd6X1JhbmdlRW5jICpwLCBVSW50MzIgc3RhcnQsIFVJbnQzMiBzaXplLCBVSW50MzIgdG90YWwpCiB7Ci0gIHAtPkxvdyArPSBzdGFydCAqIChwLT5SYW5nZSAvPSB0b3RhbCk7CisgIHAtPkxvdyArPSAoVUludDY0KXN0YXJ0ICogKFVJbnQ2NCkocC0+UmFuZ2UgLz0gdG90YWwpOwogICBwLT5SYW5nZSAqPSBzaXplOwogICB3aGlsZSAocC0+UmFuZ2UgPCBrVG9wVmFsdWUpCiAgIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ3X3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ3X3ByaXZhdGUuaAppbmRleCA1NzdkNmZiLi43MWI5NTQ0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kN19wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDdfcHJpdmF0ZS5oCkBAIC02LDEzICs2LDEzIEBACiBvZiBSYW5nZUNvZGVyIGZyb20gN3osIGluc3RlYWQgb2YgUmFuZ2VDb2RlciBmcm9tIG9yaWdpbmFsIFBQTWQgdmFyLkguCiBJZiB5b3UgbmVlZCB0aGUgY29tcGF0aWJpbGl0eSB3aXRoIG9yaWdpbmFsIFBQTWQgdmFyLkgsIHlvdSBjYW4gdXNlIGV4dGVybmFsIFJhbmdlRGVjb2RlciAqLwogCisjaWZuZGVmIEFSQ0hJVkVfUFBNRDdfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfUFBNRDdfUFJJVkFURV9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfUFBNRDdfUFJJVkFURV9IX0lOQ0xVREVECi0jZGVmaW5lIEFSQ0hJVkVfUFBNRDdfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpbmNsdWRlICJhcmNoaXZlX3BwbWRfcHJpdmF0ZS5oIgogCiAjZGVmaW5lIFBQTUQ3X01JTl9PUkRFUiAyCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kOC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTc3OTM5Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHBtZDguYwpAQCAtMCwwICsxLDEyODcgQEAKKy8qIFBwbWQ4LmMgLS0gUFBNZEkgY29kZWMKKzIwMTYtMDUtMjEgOiBJZ29yIFBhdmxvdiA6IFB1YmxpYyBkb21haW4KK1RoaXMgY29kZSBpcyBiYXNlZCBvbiBQUE1kIHZhci5JICgyMDAyKTogRG1pdHJ5IFNoa2FyaW4gOiBQdWJsaWMgZG9tYWluICovCisKKyNpbmNsdWRlICJhcmNoaXZlX3BsYXRmb3JtLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImFyY2hpdmVfcHBtZDhfcHJpdmF0ZS5oIgorCitjb25zdCBCeXRlIFBQTUQ4X2tFeHBFc2NhcGVbMTZdID0geyAyNSwgMTQsIDksIDcsIDUsIDUsIDQsIDQsIDQsIDMsIDMsIDMsIDIsIDIsIDIsIDIgfTsKK3N0YXRpYyBjb25zdCBVSW50MTYga0luaXRCaW5Fc2NbXSA9IHsgMHgzQ0RELCAweDFGM0YsIDB4NTlCRiwgMHg0OEYzLCAweDY0QTEsIDB4NUFCQywgMHg2NjMyLCAweDYwNTF9OworCisjZGVmaW5lIE1BWF9GUkVRIDEyNAorI2RlZmluZSBVTklUX1NJWkUgMTIKKworI2RlZmluZSBVMkIobnUpICgoVUludDMyKShudSkgKiBVTklUX1NJWkUpCisjZGVmaW5lIFUySShudSkgKHAtPlVuaXRzMkluZHhbKG51KSAtIDFdKQorI2RlZmluZSBJMlUoaW5keCkgKHAtPkluZHgyVW5pdHNbaW5keF0pCisKKyNpZmRlZiBQUE1EXzMyQklUCisgICNkZWZpbmUgUkVGKHB0cikgKHB0cikKKyNlbHNlCisgICNkZWZpbmUgUkVGKHB0cikgKChVSW50MzIpKChCeXRlICopKHB0cikgLSAocCktPkJhc2UpKQorI2VuZGlmCisKKyNkZWZpbmUgU1RBVFNfUkVGKHB0cikgKChDUHBtZF9TdGF0ZV9SZWYpUkVGKHB0cikpCisKKyNkZWZpbmUgQ1RYKHJlZikgKChDUHBtZDhfQ29udGV4dCAqKVBwbWQ4X0dldENvbnRleHQocCwgcmVmKSkKKyNkZWZpbmUgU1RBVFMoY3R4KSBQcG1kOF9HZXRTdGF0cyhwLCBjdHgpCisjZGVmaW5lIE9ORV9TVEFURShjdHgpIFBwbWQ4Q29udGV4dF9PbmVTdGF0ZShjdHgpCisjZGVmaW5lIFNVRkZJWChjdHgpIENUWCgoY3R4KS0+U3VmZml4KQorCisjZGVmaW5lIGtUb3AgKDEgPDwgMjQpCisjZGVmaW5lIGtCb3QgKDEgPDwgMTUpCisKK3R5cGVkZWYgQ1BwbWQ4X0NvbnRleHQgKiBDVFhfUFRSOworCitzdHJ1Y3QgQ1BwbWQ4X05vZGVfOworCit0eXBlZGVmCisgICNpZmRlZiBQUE1EXzMyQklUCisgICAgc3RydWN0IENQcG1kOF9Ob2RlXyAqCisgICNlbHNlCisgICAgVUludDMyCisgICNlbmRpZgorICBDUHBtZDhfTm9kZV9SZWY7CisKK3R5cGVkZWYgc3RydWN0IENQcG1kOF9Ob2RlXworeworICBVSW50MzIgU3RhbXA7CisgIENQcG1kOF9Ob2RlX1JlZiBOZXh0OworICBVSW50MzIgTlU7Cit9IENQcG1kOF9Ob2RlOworCisjaWZkZWYgUFBNRF8zMkJJVAorICAjZGVmaW5lIE5PREUocHRyKSAocHRyKQorI2Vsc2UKKyAgI2RlZmluZSBOT0RFKG9mZnMpICgoQ1BwbWQ4X05vZGUgKikocC0+QmFzZSArIChvZmZzKSkpCisjZW5kaWYKKworI2RlZmluZSBFTVBUWV9OT0RFIDB4RkZGRkZGRkYKKwordm9pZCBQcG1kOF9Db25zdHJ1Y3QoQ1BwbWQ4ICpwKQoreworICB1bnNpZ25lZCBpLCBrLCBtOworCisgIHAtPkJhc2UgPSAwOworCisgIGZvciAoaSA9IDAsIGsgPSAwOyBpIDwgUFBNRF9OVU1fSU5ERVhFUzsgaSsrKQorICB7CisgICAgdW5zaWduZWQgc3RlcCA9IChpID49IDEyID8gNCA6IChpID4+IDIpICsgMSk7CisgICAgZG8geyBwLT5Vbml0czJJbmR4W2srK10gPSAoQnl0ZSlpOyB9IHdoaWxlICgtLXN0ZXApOworICAgIHAtPkluZHgyVW5pdHNbaV0gPSAoQnl0ZSlrOworICB9CisKKyAgcC0+TlMyQlNJbmR4WzBdID0gKDAgPDwgMSk7CisgIHAtPk5TMkJTSW5keFsxXSA9ICgxIDw8IDEpOworICBtZW1zZXQocC0+TlMyQlNJbmR4ICsgMiwgKDIgPDwgMSksIDkpOworICBtZW1zZXQocC0+TlMyQlNJbmR4ICsgMTEsICgzIDw8IDEpLCAyNTYgLSAxMSk7CisKKyAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKyAgICBwLT5OUzJJbmR4W2ldID0gKEJ5dGUpaTsKKyAgZm9yIChtID0gaSwgayA9IDE7IGkgPCAyNjA7IGkrKykKKyAgeworICAgIHAtPk5TMkluZHhbaV0gPSAoQnl0ZSltOworICAgIGlmICgtLWsgPT0gMCkKKyAgICAgIGsgPSAoKyttKSAtIDQ7CisgIH0KK30KKwordm9pZCBQcG1kOF9GcmVlKENQcG1kOCAqcCkKK3sKKyAgZnJlZShwLT5CYXNlKTsKKyAgcC0+U2l6ZSA9IDA7CisgIHAtPkJhc2UgPSAwOworfQorCitCb29sIFBwbWQ4X0FsbG9jKENQcG1kOCAqcCwgVUludDMyIHNpemUpCit7CisgIGlmIChwLT5CYXNlID09IDAgfHwgcC0+U2l6ZSAhPSBzaXplKQorICB7CisgICAgUHBtZDhfRnJlZShwKTsKKyAgICBwLT5BbGlnbk9mZnNldCA9CisgICAgICAjaWZkZWYgUFBNRF8zMkJJVAorICAgICAgICAoNCAtIHNpemUpICYgMzsKKyAgICAgICNlbHNlCisgICAgICAgIDQgLSAoc2l6ZSAmIDMpOworICAgICAgI2VuZGlmCisgICAgaWYgKChwLT5CYXNlID0gKEJ5dGUgKiltYWxsb2MocC0+QWxpZ25PZmZzZXQgKyBzaXplKSkgPT0gMCkKKyAgICAgIHJldHVybiBGYWxzZTsKKyAgICBwLT5TaXplID0gc2l6ZTsKKyAgfQorICByZXR1cm4gVHJ1ZTsKK30KKworc3RhdGljIHZvaWQgSW5zZXJ0Tm9kZShDUHBtZDggKnAsIHZvaWQgKm5vZGUsIHVuc2lnbmVkIGluZHgpCit7CisgICgoQ1BwbWQ4X05vZGUgKilub2RlKS0+U3RhbXAgPSBFTVBUWV9OT0RFOworICAoKENQcG1kOF9Ob2RlICopbm9kZSktPk5leHQgPSAoQ1BwbWQ4X05vZGVfUmVmKXAtPkZyZWVMaXN0W2luZHhdOworICAoKENQcG1kOF9Ob2RlICopbm9kZSktPk5VID0gSTJVKGluZHgpOworICBwLT5GcmVlTGlzdFtpbmR4XSA9IFJFRihub2RlKTsKKyAgcC0+U3RhbXBzW2luZHhdKys7Cit9CisKK3N0YXRpYyB2b2lkICpSZW1vdmVOb2RlKENQcG1kOCAqcCwgdW5zaWduZWQgaW5keCkKK3sKKyAgQ1BwbWQ4X05vZGUgKm5vZGUgPSBOT0RFKChDUHBtZDhfTm9kZV9SZWYpcC0+RnJlZUxpc3RbaW5keF0pOworICBwLT5GcmVlTGlzdFtpbmR4XSA9IG5vZGUtPk5leHQ7CisgIHAtPlN0YW1wc1tpbmR4XS0tOworICByZXR1cm4gbm9kZTsKK30KKworc3RhdGljIHZvaWQgU3BsaXRCbG9jayhDUHBtZDggKnAsIHZvaWQgKnB0ciwgdW5zaWduZWQgb2xkSW5keCwgdW5zaWduZWQgbmV3SW5keCkKK3sKKyAgdW5zaWduZWQgaSwgbnUgPSBJMlUob2xkSW5keCkgLSBJMlUobmV3SW5keCk7CisgIHB0ciA9IChCeXRlICopcHRyICsgVTJCKEkyVShuZXdJbmR4KSk7CisgIGlmIChJMlUoaSA9IFUySShudSkpICE9IG51KQorICB7CisgICAgdW5zaWduZWQgayA9IEkyVSgtLWkpOworICAgIEluc2VydE5vZGUocCwgKChCeXRlICopcHRyKSArIFUyQihrKSwgbnUgLSBrIC0gMSk7CisgIH0KKyAgSW5zZXJ0Tm9kZShwLCBwdHIsIGkpOworfQorCitzdGF0aWMgdm9pZCBHbHVlRnJlZUJsb2NrcyhDUHBtZDggKnApCit7CisgIENQcG1kOF9Ob2RlX1JlZiBoZWFkID0gMDsKKyAgQ1BwbWQ4X05vZGVfUmVmICpwcmV2ID0gJmhlYWQ7CisgIHVuc2lnbmVkIGk7CisKKyAgcC0+R2x1ZUNvdW50ID0gMSA8PCAxMzsKKyAgbWVtc2V0KHAtPlN0YW1wcywgMCwgc2l6ZW9mKHAtPlN0YW1wcykpOworICAKKyAgLyogT3JkZXItMCBjb250ZXh0IGlzIGFsd2F5cyBhdCB0b3AgVU5JVCwgc28gd2UgZG9uJ3QgbmVlZCBndWFyZCBOT0RFIGF0IHRoZSBlbmQuCisgICAgIEFsbCBibG9ja3MgdXAgdG8gcC0+TG9Vbml0IGNhbiBiZSBmcmVlLCBzbyB3ZSBuZWVkIGd1YXJkIE5PREUgYXQgTG9Vbml0LiAqLworICBpZiAocC0+TG9Vbml0ICE9IHAtPkhpVW5pdCkKKyAgICAoKENQcG1kOF9Ob2RlICopcC0+TG9Vbml0KS0+U3RhbXAgPSAwOworCisgIC8qIEdsdWUgZnJlZSBibG9ja3MgKi8KKyAgZm9yIChpID0gMDsgaSA8IFBQTURfTlVNX0lOREVYRVM7IGkrKykKKyAgeworICAgIENQcG1kOF9Ob2RlX1JlZiBuZXh0ID0gKENQcG1kOF9Ob2RlX1JlZilwLT5GcmVlTGlzdFtpXTsKKyAgICBwLT5GcmVlTGlzdFtpXSA9IDA7CisgICAgd2hpbGUgKG5leHQgIT0gMCkKKyAgICB7CisgICAgICBDUHBtZDhfTm9kZSAqbm9kZSA9IE5PREUobmV4dCk7CisgICAgICBpZiAobm9kZS0+TlUgIT0gMCkKKyAgICAgIHsKKyAgICAgICAgQ1BwbWQ4X05vZGUgKm5vZGUyOworICAgICAgICAqcHJldiA9IG5leHQ7CisgICAgICAgIHByZXYgPSAmKG5vZGUtPk5leHQpOworICAgICAgICB3aGlsZSAoKG5vZGUyID0gbm9kZSArIG5vZGUtPk5VKS0+U3RhbXAgPT0gRU1QVFlfTk9ERSkKKyAgICAgICAgeworICAgICAgICAgIG5vZGUtPk5VICs9IG5vZGUyLT5OVTsKKyAgICAgICAgICBub2RlMi0+TlUgPSAwOworICAgICAgICB9CisgICAgICB9CisgICAgICBuZXh0ID0gbm9kZS0+TmV4dDsKKyAgICB9CisgIH0KKyAgKnByZXYgPSAwOworICAKKyAgLyogRmlsbCBsaXN0cyBvZiBmcmVlIGJsb2NrcyAqLworICB3aGlsZSAoaGVhZCAhPSAwKQorICB7CisgICAgQ1BwbWQ4X05vZGUgKm5vZGUgPSBOT0RFKGhlYWQpOworICAgIHVuc2lnbmVkIG51OworICAgIGhlYWQgPSBub2RlLT5OZXh0OworICAgIG51ID0gbm9kZS0+TlU7CisgICAgaWYgKG51ID09IDApCisgICAgICBjb250aW51ZTsKKyAgICBmb3IgKDsgbnUgPiAxMjg7IG51IC09IDEyOCwgbm9kZSArPSAxMjgpCisgICAgICBJbnNlcnROb2RlKHAsIG5vZGUsIFBQTURfTlVNX0lOREVYRVMgLSAxKTsKKyAgICBpZiAoSTJVKGkgPSBVMkkobnUpKSAhPSBudSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBrID0gSTJVKC0taSk7CisgICAgICBJbnNlcnROb2RlKHAsIG5vZGUgKyBrLCBudSAtIGsgLSAxKTsKKyAgICB9CisgICAgSW5zZXJ0Tm9kZShwLCBub2RlLCBpKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAqQWxsb2NVbml0c1JhcmUoQ1BwbWQ4ICpwLCB1bnNpZ25lZCBpbmR4KQoreworICB1bnNpZ25lZCBpOworICB2b2lkICpyZXRWYWw7CisgIGlmIChwLT5HbHVlQ291bnQgPT0gMCkKKyAgeworICAgIEdsdWVGcmVlQmxvY2tzKHApOworICAgIGlmIChwLT5GcmVlTGlzdFtpbmR4XSAhPSAwKQorICAgICAgcmV0dXJuIFJlbW92ZU5vZGUocCwgaW5keCk7CisgIH0KKyAgaSA9IGluZHg7CisgIGRvCisgIHsKKyAgICBpZiAoKytpID09IFBQTURfTlVNX0lOREVYRVMpCisgICAgeworICAgICAgVUludDMyIG51bUJ5dGVzID0gVTJCKEkyVShpbmR4KSk7CisgICAgICBwLT5HbHVlQ291bnQtLTsKKyAgICAgIHJldHVybiAoKFVJbnQzMikocC0+VW5pdHNTdGFydCAtIHAtPlRleHQpID4gbnVtQnl0ZXMpID8gKHAtPlVuaXRzU3RhcnQgLT0gbnVtQnl0ZXMpIDogKE5VTEwpOworICAgIH0KKyAgfQorICB3aGlsZSAocC0+RnJlZUxpc3RbaV0gPT0gMCk7CisgIHJldFZhbCA9IFJlbW92ZU5vZGUocCwgaSk7CisgIFNwbGl0QmxvY2socCwgcmV0VmFsLCBpLCBpbmR4KTsKKyAgcmV0dXJuIHJldFZhbDsKK30KKworc3RhdGljIHZvaWQgKkFsbG9jVW5pdHMoQ1BwbWQ4ICpwLCB1bnNpZ25lZCBpbmR4KQoreworICBVSW50MzIgbnVtQnl0ZXM7CisgIGlmIChwLT5GcmVlTGlzdFtpbmR4XSAhPSAwKQorICAgIHJldHVybiBSZW1vdmVOb2RlKHAsIGluZHgpOworICBudW1CeXRlcyA9IFUyQihJMlUoaW5keCkpOworICBpZiAobnVtQnl0ZXMgPD0gKFVJbnQzMikocC0+SGlVbml0IC0gcC0+TG9Vbml0KSkKKyAgeworICAgIHZvaWQgKnJldFZhbCA9IHAtPkxvVW5pdDsKKyAgICBwLT5Mb1VuaXQgKz0gbnVtQnl0ZXM7CisgICAgcmV0dXJuIHJldFZhbDsKKyAgfQorICByZXR1cm4gQWxsb2NVbml0c1JhcmUocCwgaW5keCk7Cit9CisKKyNkZWZpbmUgTXlNZW0xMkNweShkZXN0LCBzcmMsIG51bSkgXAorICB7IFVJbnQzMiAqZCA9IChVSW50MzIgKilkZXN0OyBjb25zdCBVSW50MzIgKnogPSAoY29uc3QgVUludDMyICopc3JjOyBVSW50MzIgbiA9IG51bTsgXAorICAgIGRvIHsgZFswXSA9IHpbMF07IGRbMV0gPSB6WzFdOyBkWzJdID0gelsyXTsgeiArPSAzOyBkICs9IDM7IH0gd2hpbGUgKC0tbik7IH0KKworc3RhdGljIHZvaWQgKlNocmlua1VuaXRzKENQcG1kOCAqcCwgdm9pZCAqb2xkUHRyLCB1bnNpZ25lZCBvbGROVSwgdW5zaWduZWQgbmV3TlUpCit7CisgIHVuc2lnbmVkIGkwID0gVTJJKG9sZE5VKTsKKyAgdW5zaWduZWQgaTEgPSBVMkkobmV3TlUpOworICBpZiAoaTAgPT0gaTEpCisgICAgcmV0dXJuIG9sZFB0cjsKKyAgaWYgKHAtPkZyZWVMaXN0W2kxXSAhPSAwKQorICB7CisgICAgdm9pZCAqcHRyID0gUmVtb3ZlTm9kZShwLCBpMSk7CisgICAgTXlNZW0xMkNweShwdHIsIG9sZFB0ciwgbmV3TlUpOworICAgIEluc2VydE5vZGUocCwgb2xkUHRyLCBpMCk7CisgICAgcmV0dXJuIHB0cjsKKyAgfQorICBTcGxpdEJsb2NrKHAsIG9sZFB0ciwgaTAsIGkxKTsKKyAgcmV0dXJuIG9sZFB0cjsKK30KKworc3RhdGljIHZvaWQgRnJlZVVuaXRzKENQcG1kOCAqcCwgdm9pZCAqcHRyLCB1bnNpZ25lZCBudSkKK3sKKyAgSW5zZXJ0Tm9kZShwLCBwdHIsIFUySShudSkpOworfQorCitzdGF0aWMgdm9pZCBTcGVjaWFsRnJlZVVuaXQoQ1BwbWQ4ICpwLCB2b2lkICpwdHIpCit7CisgIGlmICgoQnl0ZSAqKXB0ciAhPSBwLT5Vbml0c1N0YXJ0KQorICAgIEluc2VydE5vZGUocCwgcHRyLCAwKTsKKyAgZWxzZQorICB7CisgICAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgICAgKihVSW50MzIgKilwdHIgPSBFTVBUWV9OT0RFOyAvKiBpdCdzIHVzZWQgZm9yIChGbGFncyA9PSAweEZGKSBjaGVjayBpbiBSZW1vdmVCaW5Db250ZXh0cyAqLworICAgICNlbmRpZgorICAgIHAtPlVuaXRzU3RhcnQgKz0gVU5JVF9TSVpFOworICB9Cit9CisKK3N0YXRpYyB2b2lkICpNb3ZlVW5pdHNVcChDUHBtZDggKnAsIHZvaWQgKm9sZFB0ciwgdW5zaWduZWQgbnUpCit7CisgIHVuc2lnbmVkIGluZHggPSBVMkkobnUpOworICB2b2lkICpwdHI7CisgIGlmICgoQnl0ZSAqKW9sZFB0ciA+IHAtPlVuaXRzU3RhcnQgKyAxNiAqIDEwMjQgfHwgUkVGKG9sZFB0cikgPiBwLT5GcmVlTGlzdFtpbmR4XSkKKyAgICByZXR1cm4gb2xkUHRyOworICBwdHIgPSBSZW1vdmVOb2RlKHAsIGluZHgpOworICBNeU1lbTEyQ3B5KHB0ciwgb2xkUHRyLCBudSk7CisgIGlmICgoQnl0ZSopb2xkUHRyICE9IHAtPlVuaXRzU3RhcnQpCisgICAgSW5zZXJ0Tm9kZShwLCBvbGRQdHIsIGluZHgpOworICBlbHNlCisgICAgcC0+VW5pdHNTdGFydCArPSBVMkIoSTJVKGluZHgpKTsKKyAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQgRXhwYW5kVGV4dEFyZWEoQ1BwbWQ4ICpwKQoreworICBVSW50MzIgY291bnRbUFBNRF9OVU1fSU5ERVhFU107CisgIHVuc2lnbmVkIGk7CisgIG1lbXNldChjb3VudCwgMCwgc2l6ZW9mKGNvdW50KSk7CisgIGlmIChwLT5Mb1VuaXQgIT0gcC0+SGlVbml0KQorICAgICgoQ1BwbWQ4X05vZGUgKilwLT5Mb1VuaXQpLT5TdGFtcCA9IDA7CisgIAorICB7CisgICAgQ1BwbWQ4X05vZGUgKm5vZGUgPSAoQ1BwbWQ4X05vZGUgKilwLT5Vbml0c1N0YXJ0OworICAgIGZvciAoOyBub2RlLT5TdGFtcCA9PSBFTVBUWV9OT0RFOyBub2RlICs9IG5vZGUtPk5VKQorICAgIHsKKyAgICAgIG5vZGUtPlN0YW1wID0gMDsKKyAgICAgIGNvdW50W1UySShub2RlLT5OVSldKys7CisgICAgfQorICAgIHAtPlVuaXRzU3RhcnQgPSAoQnl0ZSAqKW5vZGU7CisgIH0KKyAgCisgIGZvciAoaSA9IDA7IGkgPCBQUE1EX05VTV9JTkRFWEVTOyBpKyspCisgIHsKKyAgICBDUHBtZDhfTm9kZV9SZWYgKm5leHQgPSAoQ1BwbWQ4X05vZGVfUmVmICopJnAtPkZyZWVMaXN0W2ldOworICAgIHdoaWxlIChjb3VudFtpXSAhPSAwKQorICAgIHsKKyAgICAgIENQcG1kOF9Ob2RlICpub2RlID0gTk9ERSgqbmV4dCk7CisgICAgICB3aGlsZSAobm9kZS0+U3RhbXAgPT0gMCkKKyAgICAgIHsKKyAgICAgICAgKm5leHQgPSBub2RlLT5OZXh0OworICAgICAgICBub2RlID0gTk9ERSgqbmV4dCk7CisgICAgICAgIHAtPlN0YW1wc1tpXS0tOworICAgICAgICBpZiAoLS1jb3VudFtpXSA9PSAwKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgbmV4dCA9ICZub2RlLT5OZXh0OworICAgIH0KKyAgfQorfQorCisjZGVmaW5lIFNVQ0NFU1NPUihwKSAoKENQcG1kX1ZvaWRfUmVmKSgocCktPlN1Y2Nlc3NvckxvdyB8ICgoVUludDMyKShwKS0+U3VjY2Vzc29ySGlnaCA8PCAxNikpKQorCitzdGF0aWMgdm9pZCBTZXRTdWNjZXNzb3IoQ1BwbWRfU3RhdGUgKnAsIENQcG1kX1ZvaWRfUmVmIHYpCit7CisgIChwKS0+U3VjY2Vzc29yTG93ID0gKFVJbnQxNikoKFVJbnQzMikodikgJiAweEZGRkYpOworICAocCktPlN1Y2Nlc3NvckhpZ2ggPSAoVUludDE2KSgoKFVJbnQzMikodikgPj4gMTYpICYgMHhGRkZGKTsKK30KKworI2RlZmluZSBSRVNFVF9URVhUKG9mZnMpIHsgcC0+VGV4dCA9IHAtPkJhc2UgKyBwLT5BbGlnbk9mZnNldCArIChvZmZzKTsgfQorCitzdGF0aWMgdm9pZCBSZXN0YXJ0TW9kZWwoQ1BwbWQ4ICpwKQoreworICB1bnNpZ25lZCBpLCBrLCBtLCByOworCisgIG1lbXNldChwLT5GcmVlTGlzdCwgMCwgc2l6ZW9mKHAtPkZyZWVMaXN0KSk7CisgIG1lbXNldChwLT5TdGFtcHMsIDAsIHNpemVvZihwLT5TdGFtcHMpKTsKKyAgUkVTRVRfVEVYVCgwKTsKKyAgcC0+SGlVbml0ID0gcC0+VGV4dCArIHAtPlNpemU7CisgIHAtPkxvVW5pdCA9IHAtPlVuaXRzU3RhcnQgPSBwLT5IaVVuaXQgLSBwLT5TaXplIC8gOCAvIFVOSVRfU0laRSAqIDcgKiBVTklUX1NJWkU7CisgIHAtPkdsdWVDb3VudCA9IDA7CisKKyAgcC0+T3JkZXJGYWxsID0gcC0+TWF4T3JkZXI7CisgIHAtPlJ1bkxlbmd0aCA9IHAtPkluaXRSTCA9IC0oSW50MzIpKChwLT5NYXhPcmRlciA8IDEyKSA/IHAtPk1heE9yZGVyIDogMTIpIC0gMTsKKyAgcC0+UHJldlN1Y2Nlc3MgPSAwOworCisgIHAtPk1pbkNvbnRleHQgPSBwLT5NYXhDb250ZXh0ID0gKENUWF9QVFIpKHAtPkhpVW5pdCAtPSBVTklUX1NJWkUpOyAvKiBBbGxvY0NvbnRleHQocCk7ICovCisgIHAtPk1pbkNvbnRleHQtPlN1ZmZpeCA9IDA7CisgIHAtPk1pbkNvbnRleHQtPk51bVN0YXRzID0gMjU1OworICBwLT5NaW5Db250ZXh0LT5GbGFncyA9IDA7CisgIHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxID0gMjU2ICsgMTsKKyAgcC0+Rm91bmRTdGF0ZSA9IChDUHBtZF9TdGF0ZSAqKXAtPkxvVW5pdDsgLyogQWxsb2NVbml0cyhwLCBQUE1EX05VTV9JTkRFWEVTIC0gMSk7ICovCisgIHAtPkxvVW5pdCArPSBVMkIoMjU2IC8gMik7CisgIHAtPk1pbkNvbnRleHQtPlN0YXRzID0gUkVGKHAtPkZvdW5kU3RhdGUpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgIHsKKyAgICBDUHBtZF9TdGF0ZSAqcyA9ICZwLT5Gb3VuZFN0YXRlW2ldOworICAgIHMtPlN5bWJvbCA9IChCeXRlKWk7CisgICAgcy0+RnJlcSA9IDE7CisgICAgU2V0U3VjY2Vzc29yKHMsIDApOworICB9CisKKyAgZm9yIChpID0gbSA9IDA7IG0gPCAyNTsgbSsrKQorICB7CisgICAgd2hpbGUgKHAtPk5TMkluZHhbaV0gPT0gbSkKKyAgICAgIGkrKzsKKyAgICBmb3IgKGsgPSAwOyBrIDwgODsgaysrKQorICAgIHsKKyAgICAgIFVJbnQxNiB2YWwgPSAoVUludDE2KShQUE1EX0JJTl9TQ0FMRSAtIGtJbml0QmluRXNjW2tdIC8gKGkgKyAxKSk7CisgICAgICBVSW50MTYgKmRlc3QgPSBwLT5CaW5TdW1tW21dICsgazsKKyAgICAgIGZvciAociA9IDA7IHIgPCA2NDsgciArPSA4KQorICAgICAgICBkZXN0W3JdID0gdmFsOworICAgIH0KKyAgfQorCisgIGZvciAoaSA9IG0gPSAwOyBtIDwgMjQ7IG0rKykKKyAgeworICAgIHdoaWxlIChwLT5OUzJJbmR4W2kgKyAzXSA9PSBtICsgMykKKyAgICAgIGkrKzsKKyAgICBmb3IgKGsgPSAwOyBrIDwgMzI7IGsrKykKKyAgICB7CisgICAgICBDUHBtZF9TZWUgKnMgPSAmcC0+U2VlW21dW2tdOworICAgICAgcy0+U3VtbSA9IChVSW50MTYpKCgyICogaSArIDUpIDw8IChzLT5TaGlmdCA9IFBQTURfUEVSSU9EX0JJVFMgLSA0KSk7CisgICAgICBzLT5Db3VudCA9IDc7CisgICAgfQorICB9Cit9CisKK3ZvaWQgUHBtZDhfSW5pdChDUHBtZDggKnAsIHVuc2lnbmVkIG1heE9yZGVyLCB1bnNpZ25lZCByZXN0b3JlTWV0aG9kKQoreworICBwLT5NYXhPcmRlciA9IG1heE9yZGVyOworICBwLT5SZXN0b3JlTWV0aG9kID0gcmVzdG9yZU1ldGhvZDsKKyAgUmVzdGFydE1vZGVsKHApOworICBwLT5EdW1teVNlZS5TaGlmdCA9IFBQTURfUEVSSU9EX0JJVFM7CisgIHAtPkR1bW15U2VlLlN1bW0gPSAwOyAvKiB1bnVzZWQgKi8KKyAgcC0+RHVtbXlTZWUuQ291bnQgPSA2NDsgLyogdW51c2VkICovCit9CisKK3N0YXRpYyB2b2lkIFJlZnJlc2goQ1BwbWQ4ICpwLCBDVFhfUFRSIGN0eCwgdW5zaWduZWQgb2xkTlUsIHVuc2lnbmVkIHNjYWxlKQoreworICB1bnNpZ25lZCBpID0gY3R4LT5OdW1TdGF0cywgZXNjRnJlcSwgc3VtRnJlcSwgZmxhZ3M7CisgIENQcG1kX1N0YXRlICpzID0gKENQcG1kX1N0YXRlICopU2hyaW5rVW5pdHMocCwgU1RBVFMoY3R4KSwgb2xkTlUsIChpICsgMikgPj4gMSk7CisgIGN0eC0+U3RhdHMgPSBSRUYocyk7CisgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICAvKiBmaXhlZCBvdmVyIFNoa2FyaW4ncyBjb2RlLiBGaXhlZCBjb2RlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggb3JpZ2luYWwgY29kZSBmb3Igc29tZSBmaWxlcyBpbiBGUkVFWkUgbW9kZS4gKi8KKyAgc2NhbGUgfD0gKGN0eC0+U3VtbUZyZXEgPj0gKChVSW50MzIpMSA8PCAxNSkpOworICAjZW5kaWYKKyAgZmxhZ3MgPSAoY3R4LT5GbGFncyAmICgweDEwICsgMHgwNCAqIHNjYWxlKSkgKyAweDA4ICogKHMtPlN5bWJvbCA+PSAweDQwKTsKKyAgZXNjRnJlcSA9IGN0eC0+U3VtbUZyZXEgLSBzLT5GcmVxOworICBzdW1GcmVxID0gKHMtPkZyZXEgPSAoQnl0ZSkoKHMtPkZyZXEgKyBzY2FsZSkgPj4gc2NhbGUpKTsKKyAgZG8KKyAgeworICAgIGVzY0ZyZXEgLT0gKCsrcyktPkZyZXE7CisgICAgc3VtRnJlcSArPSAocy0+RnJlcSA9IChCeXRlKSgocy0+RnJlcSArIHNjYWxlKSA+PiBzY2FsZSkpOworICAgIGZsYWdzIHw9IDB4MDggKiAocy0+U3ltYm9sID49IDB4NDApOworICB9CisgIHdoaWxlICgtLWkpOworICBjdHgtPlN1bW1GcmVxID0gKFVJbnQxNikoc3VtRnJlcSArICgoZXNjRnJlcSArIHNjYWxlKSA+PiBzY2FsZSkpOworICBjdHgtPkZsYWdzID0gKEJ5dGUpZmxhZ3M7Cit9CisKK3N0YXRpYyB2b2lkIFN3YXBTdGF0ZXMoQ1BwbWRfU3RhdGUgKnQxLCBDUHBtZF9TdGF0ZSAqdDIpCit7CisgIENQcG1kX1N0YXRlIHRtcCA9ICp0MTsKKyAgKnQxID0gKnQyOworICAqdDIgPSB0bXA7Cit9CisKK3N0YXRpYyBDUHBtZF9Wb2lkX1JlZiBDdXRPZmYoQ1BwbWQ4ICpwLCBDVFhfUFRSIGN0eCwgdW5zaWduZWQgb3JkZXIpCit7CisgIGludCBpOworICB1bnNpZ25lZCB0bXA7CisgIENQcG1kX1N0YXRlICpzOworICAKKyAgaWYgKCFjdHgtPk51bVN0YXRzKQorICB7CisgICAgcyA9IE9ORV9TVEFURShjdHgpOworICAgIGlmICgoQnl0ZSAqKVBwbWQ4X0dldFB0cihwLCBTVUNDRVNTT1IocykpID49IHAtPlVuaXRzU3RhcnQpCisgICAgeworICAgICAgaWYgKG9yZGVyIDwgcC0+TWF4T3JkZXIpCisgICAgICAgIFNldFN1Y2Nlc3NvcihzLCBDdXRPZmYocCwgQ1RYKFNVQ0NFU1NPUihzKSksIG9yZGVyICsgMSkpOworICAgICAgZWxzZQorICAgICAgICBTZXRTdWNjZXNzb3IocywgMCk7CisgICAgICBpZiAoU1VDQ0VTU09SKHMpIHx8IG9yZGVyIDw9IDkpIC8qIE9fQk9VTkQgKi8KKyAgICAgICAgcmV0dXJuIFJFRihjdHgpOworICAgIH0KKyAgICBTcGVjaWFsRnJlZVVuaXQocCwgY3R4KTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGN0eC0+U3RhdHMgPSBTVEFUU19SRUYoTW92ZVVuaXRzVXAocCwgU1RBVFMoY3R4KSwgdG1wID0gKCh1bnNpZ25lZCljdHgtPk51bVN0YXRzICsgMikgPj4gMSkpOworCisgIGZvciAocyA9IFNUQVRTKGN0eCkgKyAoaSA9IGN0eC0+TnVtU3RhdHMpOyBzID49IFNUQVRTKGN0eCk7IHMtLSkKKyAgICBpZiAoKEJ5dGUgKilQcG1kOF9HZXRQdHIocCwgU1VDQ0VTU09SKHMpKSA8IHAtPlVuaXRzU3RhcnQpCisgICAgeworICAgICAgQ1BwbWRfU3RhdGUgKnMyID0gU1RBVFMoY3R4KSArIChpLS0pOworICAgICAgU2V0U3VjY2Vzc29yKHMsIDApOworICAgICAgU3dhcFN0YXRlcyhzLCBzMik7CisgICAgfQorICAgIGVsc2UgaWYgKG9yZGVyIDwgcC0+TWF4T3JkZXIpCisgICAgICBTZXRTdWNjZXNzb3IocywgQ3V0T2ZmKHAsIENUWChTVUNDRVNTT1IocykpLCBvcmRlciArIDEpKTsKKyAgICBlbHNlCisgICAgICBTZXRTdWNjZXNzb3IocywgMCk7CisgICAgCisgIGlmIChpICE9IGN0eC0+TnVtU3RhdHMgJiYgb3JkZXIpCisgIHsKKyAgICBjdHgtPk51bVN0YXRzID0gKEJ5dGUpaTsKKyAgICBzID0gU1RBVFMoY3R4KTsKKyAgICBpZiAoaSA8IDApCisgICAgeworICAgICAgRnJlZVVuaXRzKHAsIHMsIHRtcCk7CisgICAgICBTcGVjaWFsRnJlZVVuaXQocCwgY3R4KTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoaSA9PSAwKQorICAgIHsKKyAgICAgIGN0eC0+RmxhZ3MgPSAoQnl0ZSkoKGN0eC0+RmxhZ3MgJiAweDEwKSArIDB4MDggKiAocy0+U3ltYm9sID49IDB4NDApKTsKKyAgICAgICpPTkVfU1RBVEUoY3R4KSA9ICpzOworICAgICAgRnJlZVVuaXRzKHAsIHMsIHRtcCk7CisgICAgICAvKiA5LjMxOiB0aGUgY29kZSB3YXMgZml4ZWQuIEl0J3Mgd2FzIG5vdCBCVUcsIGlmIEZyZXEgPD0gTUFYX0ZSRVEgPSAxMjQgKi8KKyAgICAgIE9ORV9TVEFURShjdHgpLT5GcmVxID0gKEJ5dGUpKCgodW5zaWduZWQpT05FX1NUQVRFKGN0eCktPkZyZXEgKyAxMSkgPj4gMyk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIFJlZnJlc2gocCwgY3R4LCB0bXAsIGN0eC0+U3VtbUZyZXEgPiAxNiAqIGkpOworICB9CisgIHJldHVybiBSRUYoY3R4KTsKK30KKworI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCitzdGF0aWMgQ1BwbWRfVm9pZF9SZWYgUmVtb3ZlQmluQ29udGV4dHMoQ1BwbWQ4ICpwLCBDVFhfUFRSIGN0eCwgdW5zaWduZWQgb3JkZXIpCit7CisgIENQcG1kX1N0YXRlICpzOworICBpZiAoIWN0eC0+TnVtU3RhdHMpCisgIHsKKyAgICBzID0gT05FX1NUQVRFKGN0eCk7CisgICAgaWYgKChCeXRlICopUHBtZDhfR2V0UHRyKHAsIFNVQ0NFU1NPUihzKSkgPj0gcC0+VW5pdHNTdGFydCAmJiBvcmRlciA8IHAtPk1heE9yZGVyKQorICAgICAgU2V0U3VjY2Vzc29yKHMsIFJlbW92ZUJpbkNvbnRleHRzKHAsIENUWChTVUNDRVNTT1IocykpLCBvcmRlciArIDEpKTsKKyAgICBlbHNlCisgICAgICBTZXRTdWNjZXNzb3IocywgMCk7CisgICAgLyogU3VmZml4IGNvbnRleHQgY2FuIGJlIHJlbW92ZWQgYWxyZWFkeSwgc2luY2UgZGlmZmVyZW50IChoaWdoLW9yZGVyKQorICAgICAgIFN1Y2Nlc3NvcnMgbWF5IHJlZmVyIHRvIHNhbWUgY29udGV4dC4gU28gd2UgY2hlY2sgRmxhZ3MgPT0gMHhGRiAoU3RhbXAgPT0gRU1QVFlfTk9ERSkgKi8KKyAgICBpZiAoIVNVQ0NFU1NPUihzKSAmJiAoIVNVRkZJWChjdHgpLT5OdW1TdGF0cyB8fCBTVUZGSVgoY3R4KS0+RmxhZ3MgPT0gMHhGRikpCisgICAgeworICAgICAgRnJlZVVuaXRzKHAsIGN0eCwgMSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIFJFRihjdHgpOworICB9CisKKyAgZm9yIChzID0gU1RBVFMoY3R4KSArIGN0eC0+TnVtU3RhdHM7IHMgPj0gU1RBVFMoY3R4KTsgcy0tKQorICAgIGlmICgoQnl0ZSAqKVBwbWQ4X0dldFB0cihwLCBTVUNDRVNTT1IocykpID49IHAtPlVuaXRzU3RhcnQgJiYgb3JkZXIgPCBwLT5NYXhPcmRlcikKKyAgICAgIFNldFN1Y2Nlc3NvcihzLCBSZW1vdmVCaW5Db250ZXh0cyhwLCBDVFgoU1VDQ0VTU09SKHMpKSwgb3JkZXIgKyAxKSk7CisgICAgZWxzZQorICAgICAgU2V0U3VjY2Vzc29yKHMsIDApOworICAKKyAgcmV0dXJuIFJFRihjdHgpOworfQorI2VuZGlmCisKK3N0YXRpYyBVSW50MzIgR2V0VXNlZE1lbW9yeShjb25zdCBDUHBtZDggKnApCit7CisgIFVJbnQzMiB2ID0gMDsKKyAgdW5zaWduZWQgaTsKKyAgZm9yIChpID0gMDsgaSA8IFBQTURfTlVNX0lOREVYRVM7IGkrKykKKyAgICB2ICs9IHAtPlN0YW1wc1tpXSAqIEkyVShpKTsKKyAgcmV0dXJuIHAtPlNpemUgLSAoVUludDMyKShwLT5IaVVuaXQgLSBwLT5Mb1VuaXQpIC0gKFVJbnQzMikocC0+VW5pdHNTdGFydCAtIHAtPlRleHQpIC0gVTJCKHYpOworfQorCisjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgI2RlZmluZSBSRVNUT1JFX01PREVMKGMxLCBmU3VjY2Vzc29yKSBSZXN0b3JlTW9kZWwocCwgYzEsIGZTdWNjZXNzb3IpCisjZWxzZQorICAjZGVmaW5lIFJFU1RPUkVfTU9ERUwoYzEsIGZTdWNjZXNzb3IpIFJlc3RvcmVNb2RlbChwLCBjMSkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBSZXN0b3JlTW9kZWwoQ1BwbWQ4ICpwLCBDVFhfUFRSIGMxCisgICAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgICAgLCBDVFhfUFRSIGZTdWNjZXNzb3IKKyAgICAjZW5kaWYKKyAgICApCit7CisgIENUWF9QVFIgYzsKKyAgQ1BwbWRfU3RhdGUgKnM7CisgIFJFU0VUX1RFWFQoMCk7CisgIGZvciAoYyA9IHAtPk1heENvbnRleHQ7IGMgIT0gYzE7IGMgPSBTVUZGSVgoYykpCisgICAgaWYgKC0tKGMtPk51bVN0YXRzKSA9PSAwKQorICAgIHsKKyAgICAgIHMgPSBTVEFUUyhjKTsKKyAgICAgIGMtPkZsYWdzID0gKEJ5dGUpKChjLT5GbGFncyAmIDB4MTApICsgMHgwOCAqIChzLT5TeW1ib2wgPj0gMHg0MCkpOworICAgICAgKk9ORV9TVEFURShjKSA9ICpzOworICAgICAgU3BlY2lhbEZyZWVVbml0KHAsIHMpOworICAgICAgT05FX1NUQVRFKGMpLT5GcmVxID0gKEJ5dGUpKCgodW5zaWduZWQpT05FX1NUQVRFKGMpLT5GcmVxICsgMTEpID4+IDMpOworICAgIH0KKyAgICBlbHNlCisgICAgICBSZWZyZXNoKHAsIGMsIChjLT5OdW1TdGF0cyszKSA+PiAxLCAwKTsKKyAKKyAgZm9yICg7IGMgIT0gcC0+TWluQ29udGV4dDsgYyA9IFNVRkZJWChjKSkKKyAgICBpZiAoIWMtPk51bVN0YXRzKQorICAgICAgT05FX1NUQVRFKGMpLT5GcmVxID0gKEJ5dGUpKE9ORV9TVEFURShjKS0+RnJlcSAtIChPTkVfU1RBVEUoYyktPkZyZXEgPj4gMSkpOworICAgIGVsc2UgaWYgKChjLT5TdW1tRnJlcSArPSA0KSA+IDEyOCArIDQgKiBjLT5OdW1TdGF0cykKKyAgICAgIFJlZnJlc2gocCwgYywgKGMtPk51bVN0YXRzICsgMikgPj4gMSwgMSk7CisKKyAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgIGlmIChwLT5SZXN0b3JlTWV0aG9kID4gUFBNRDhfUkVTVE9SRV9NRVRIT0RfRlJFRVpFKQorICB7CisgICAgcC0+TWF4Q29udGV4dCA9IGZTdWNjZXNzb3I7CisgICAgcC0+R2x1ZUNvdW50ICs9ICEocC0+U3RhbXBzWzFdICYgMSk7CisgIH0KKyAgZWxzZSBpZiAocC0+UmVzdG9yZU1ldGhvZCA9PSBQUE1EOF9SRVNUT1JFX01FVEhPRF9GUkVFWkUpCisgIHsKKyAgICB3aGlsZSAocC0+TWF4Q29udGV4dC0+U3VmZml4KQorICAgICAgcC0+TWF4Q29udGV4dCA9IFNVRkZJWChwLT5NYXhDb250ZXh0KTsKKyAgICBSZW1vdmVCaW5Db250ZXh0cyhwLCBwLT5NYXhDb250ZXh0LCAwKTsKKyAgICBwLT5SZXN0b3JlTWV0aG9kKys7CisgICAgcC0+R2x1ZUNvdW50ID0gMDsKKyAgICBwLT5PcmRlckZhbGwgPSBwLT5NYXhPcmRlcjsKKyAgfQorICBlbHNlCisgICNlbmRpZgorICBpZiAocC0+UmVzdG9yZU1ldGhvZCA9PSBQUE1EOF9SRVNUT1JFX01FVEhPRF9SRVNUQVJUIHx8IEdldFVzZWRNZW1vcnkocCkgPCAocC0+U2l6ZSA+PiAxKSkKKyAgICBSZXN0YXJ0TW9kZWwocCk7CisgIGVsc2UKKyAgeworICAgIHdoaWxlIChwLT5NYXhDb250ZXh0LT5TdWZmaXgpCisgICAgICBwLT5NYXhDb250ZXh0ID0gU1VGRklYKHAtPk1heENvbnRleHQpOworICAgIGRvCisgICAgeworICAgICAgQ3V0T2ZmKHAsIHAtPk1heENvbnRleHQsIDApOworICAgICAgRXhwYW5kVGV4dEFyZWEocCk7CisgICAgfQorICAgIHdoaWxlIChHZXRVc2VkTWVtb3J5KHApID4gMyAqIChwLT5TaXplID4+IDIpKTsKKyAgICBwLT5HbHVlQ291bnQgPSAwOworICAgIHAtPk9yZGVyRmFsbCA9IHAtPk1heE9yZGVyOworICB9Cit9CisKK3N0YXRpYyBDVFhfUFRSIENyZWF0ZVN1Y2Nlc3NvcnMoQ1BwbWQ4ICpwLCBCb29sIHNraXAsIENQcG1kX1N0YXRlICpzMSwgQ1RYX1BUUiBjKQoreworICBDUHBtZF9TdGF0ZSB1cFN0YXRlOworICBCeXRlIGZsYWdzOworICBDUHBtZF9CeXRlX1JlZiB1cEJyYW5jaCA9IChDUHBtZF9CeXRlX1JlZilTVUNDRVNTT1IocC0+Rm91bmRTdGF0ZSk7CisgIC8qIGZpeGVkIG92ZXIgU2hrYXJpbidzIGNvZGUuIE1heWJlIGl0IGNvdWxkIHdvcmsgd2l0aG91dCArIDEgdG9vLiAqLworICBDUHBtZF9TdGF0ZSAqcHNbUFBNRDhfTUFYX09SREVSICsgMV07CisgIHVuc2lnbmVkIG51bVBzID0gMDsKKyAgCisgIGlmICghc2tpcCkKKyAgICBwc1tudW1QcysrXSA9IHAtPkZvdW5kU3RhdGU7CisgIAorICB3aGlsZSAoYy0+U3VmZml4KQorICB7CisgICAgQ1BwbWRfVm9pZF9SZWYgc3VjY2Vzc29yOworICAgIENQcG1kX1N0YXRlICpzOworICAgIGMgPSBTVUZGSVgoYyk7CisgICAgaWYgKHMxKQorICAgIHsKKyAgICAgIHMgPSBzMTsKKyAgICAgIHMxID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoYy0+TnVtU3RhdHMgIT0gMCkKKyAgICB7CisgICAgICBmb3IgKHMgPSBTVEFUUyhjKTsgcy0+U3ltYm9sICE9IHAtPkZvdW5kU3RhdGUtPlN5bWJvbDsgcysrKTsKKyAgICAgIGlmIChzLT5GcmVxIDwgTUFYX0ZSRVEgLSA5KQorICAgICAgeworICAgICAgICBzLT5GcmVxKys7CisgICAgICAgIGMtPlN1bW1GcmVxKys7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBzID0gT05FX1NUQVRFKGMpOworICAgICAgcy0+RnJlcSA9IChCeXRlKShzLT5GcmVxICsgKCFTVUZGSVgoYyktPk51bVN0YXRzICYgKHMtPkZyZXEgPCAyNCkpKTsKKyAgICB9CisgICAgc3VjY2Vzc29yID0gU1VDQ0VTU09SKHMpOworICAgIGlmIChzdWNjZXNzb3IgIT0gdXBCcmFuY2gpCisgICAgeworICAgICAgYyA9IENUWChzdWNjZXNzb3IpOworICAgICAgaWYgKG51bVBzID09IDApCisgICAgICAgIHJldHVybiBjOworICAgICAgYnJlYWs7CisgICAgfQorICAgIHBzW251bVBzKytdID0gczsKKyAgfQorICAKKyAgdXBTdGF0ZS5TeW1ib2wgPSAqKGNvbnN0IEJ5dGUgKilQcG1kOF9HZXRQdHIocCwgdXBCcmFuY2gpOworICBTZXRTdWNjZXNzb3IoJnVwU3RhdGUsIHVwQnJhbmNoICsgMSk7CisgIGZsYWdzID0gKEJ5dGUpKDB4MTAgKiAocC0+Rm91bmRTdGF0ZS0+U3ltYm9sID49IDB4NDApICsgMHgwOCAqICh1cFN0YXRlLlN5bWJvbCA+PSAweDQwKSk7CisKKyAgaWYgKGMtPk51bVN0YXRzID09IDApCisgICAgdXBTdGF0ZS5GcmVxID0gT05FX1NUQVRFKGMpLT5GcmVxOworICBlbHNlCisgIHsKKyAgICBVSW50MzIgY2YsIHMwOworICAgIENQcG1kX1N0YXRlICpzOworICAgIGZvciAocyA9IFNUQVRTKGMpOyBzLT5TeW1ib2wgIT0gdXBTdGF0ZS5TeW1ib2w7IHMrKyk7CisgICAgY2YgPSBzLT5GcmVxIC0gMTsKKyAgICBzMCA9IGMtPlN1bW1GcmVxIC0gYy0+TnVtU3RhdHMgLSBjZjsKKyAgICB1cFN0YXRlLkZyZXEgPSAoQnl0ZSkoMSArICgoMiAqIGNmIDw9IHMwKSA/ICg1ICogY2YgPiBzMCkgOiAoKGNmICsgMiAqIHMwIC0gMykgLyBzMCkpKTsKKyAgfQorCisgIGRvCisgIHsKKyAgICAvKiBDcmVhdGUgQ2hpbGQgKi8KKyAgICBDVFhfUFRSIGMxOyAvKiA9IEFsbG9jQ29udGV4dChwKTsgKi8KKyAgICBpZiAocC0+SGlVbml0ICE9IHAtPkxvVW5pdCkKKyAgICAgIGMxID0gKENUWF9QVFIpKHAtPkhpVW5pdCAtPSBVTklUX1NJWkUpOworICAgIGVsc2UgaWYgKHAtPkZyZWVMaXN0WzBdICE9IDApCisgICAgICBjMSA9IChDVFhfUFRSKVJlbW92ZU5vZGUocCwgMCk7CisgICAgZWxzZQorICAgIHsKKyAgICAgIGMxID0gKENUWF9QVFIpQWxsb2NVbml0c1JhcmUocCwgMCk7CisgICAgICBpZiAoIWMxKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgYzEtPk51bVN0YXRzID0gMDsKKyAgICBjMS0+RmxhZ3MgPSBmbGFnczsKKyAgICAqT05FX1NUQVRFKGMxKSA9IHVwU3RhdGU7CisgICAgYzEtPlN1ZmZpeCA9IFJFRihjKTsKKyAgICBTZXRTdWNjZXNzb3IocHNbLS1udW1Qc10sIFJFRihjMSkpOworICAgIGMgPSBjMTsKKyAgfQorICB3aGlsZSAobnVtUHMgIT0gMCk7CisgIAorICByZXR1cm4gYzsKK30KKworc3RhdGljIENUWF9QVFIgUmVkdWNlT3JkZXIoQ1BwbWQ4ICpwLCBDUHBtZF9TdGF0ZSAqczEsIENUWF9QVFIgYykKK3sKKyAgQ1BwbWRfU3RhdGUgKnMgPSBOVUxMOworICBDVFhfUFRSIGMxID0gYzsKKyAgQ1BwbWRfVm9pZF9SZWYgdXBCcmFuY2ggPSBSRUYocC0+VGV4dCk7CisgIAorICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgLyogVGhlIEJVRyBpbiBTaGthcmluJ3MgY29kZSB3YXMgZml4ZWQ6IHBzIGNvdWxkIG92ZXJmbG93IGluIENVVF9PRkYgbW9kZS4gKi8KKyAgQ1BwbWRfU3RhdGUgKnBzW1BQTUQ4X01BWF9PUkRFUiArIDFdOworICB1bnNpZ25lZCBudW1QcyA9IDA7CisgIHBzW251bVBzKytdID0gcC0+Rm91bmRTdGF0ZTsKKyAgI2VuZGlmCisKKyAgU2V0U3VjY2Vzc29yKHAtPkZvdW5kU3RhdGUsIHVwQnJhbmNoKTsKKyAgcC0+T3JkZXJGYWxsKys7CisKKyAgZm9yICg7OykKKyAgeworICAgIGlmIChzMSkKKyAgICB7CisgICAgICBjID0gU1VGRklYKGMpOworICAgICAgcyA9IHMxOworICAgICAgczEgPSBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKCFjLT5TdWZmaXgpCisgICAgICB7CisgICAgICAgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICAgICAgICBpZiAocC0+UmVzdG9yZU1ldGhvZCA+IFBQTUQ4X1JFU1RPUkVfTUVUSE9EX0ZSRUVaRSkKKyAgICAgICAgeworICAgICAgICAgIGRvIHsgU2V0U3VjY2Vzc29yKHBzWy0tbnVtUHNdLCBSRUYoYykpOyB9IHdoaWxlIChudW1Qcyk7CisgICAgICAgICAgUkVTRVRfVEVYVCgxKTsKKyAgICAgICAgICBwLT5PcmRlckZhbGwgPSAxOworICAgICAgICB9CisgICAgICAgICNlbmRpZgorICAgICAgICByZXR1cm4gYzsKKyAgICAgIH0KKyAgICAgIGMgPSBTVUZGSVgoYyk7CisgICAgICBpZiAoYy0+TnVtU3RhdHMpCisgICAgICB7CisgICAgICAgIGlmICgocyA9IFNUQVRTKGMpKS0+U3ltYm9sICE9IHAtPkZvdW5kU3RhdGUtPlN5bWJvbCkKKyAgICAgICAgICBkbyB7IHMrKzsgfSB3aGlsZSAocy0+U3ltYm9sICE9IHAtPkZvdW5kU3RhdGUtPlN5bWJvbCk7CisgICAgICAgIGlmIChzLT5GcmVxIDwgTUFYX0ZSRVEgLSA5KQorICAgICAgICB7CisgICAgICAgICAgcy0+RnJlcSArPSAyOworICAgICAgICAgIGMtPlN1bW1GcmVxICs9IDI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcyA9IE9ORV9TVEFURShjKTsKKyAgICAgICAgcy0+RnJlcSA9IChCeXRlKShzLT5GcmVxICsgKHMtPkZyZXEgPCAzMikpOworICAgICAgfQorICAgIH0KKyAgICBpZiAoU1VDQ0VTU09SKHMpKQorICAgICAgYnJlYWs7CisgICAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgICAgcHNbbnVtUHMrK10gPSBzOworICAgICNlbmRpZgorICAgIFNldFN1Y2Nlc3NvcihzLCB1cEJyYW5jaCk7CisgICAgcC0+T3JkZXJGYWxsKys7CisgIH0KKyAgCisgICNpZmRlZiBQUE1EOF9GUkVFWkVfU1VQUE9SVAorICBpZiAocC0+UmVzdG9yZU1ldGhvZCA+IFBQTUQ4X1JFU1RPUkVfTUVUSE9EX0ZSRUVaRSkKKyAgeworICAgIGMgPSBDVFgoU1VDQ0VTU09SKHMpKTsKKyAgICBkbyB7IFNldFN1Y2Nlc3Nvcihwc1stLW51bVBzXSwgUkVGKGMpKTsgfSB3aGlsZSAobnVtUHMpOworICAgIFJFU0VUX1RFWFQoMSk7CisgICAgcC0+T3JkZXJGYWxsID0gMTsKKyAgICByZXR1cm4gYzsKKyAgfQorICBlbHNlCisgICNlbmRpZgorICBpZiAoU1VDQ0VTU09SKHMpIDw9IHVwQnJhbmNoKQorICB7CisgICAgQ1RYX1BUUiBzdWNjZXNzb3I7CisgICAgQ1BwbWRfU3RhdGUgKnMyID0gcC0+Rm91bmRTdGF0ZTsKKyAgICBwLT5Gb3VuZFN0YXRlID0gczsKKworICAgIHN1Y2Nlc3NvciA9IENyZWF0ZVN1Y2Nlc3NvcnMocCwgRmFsc2UsIE5VTEwsIGMpOworICAgIGlmIChzdWNjZXNzb3IgPT0gTlVMTCkKKyAgICAgIFNldFN1Y2Nlc3NvcihzLCAwKTsKKyAgICBlbHNlCisgICAgICBTZXRTdWNjZXNzb3IocywgUkVGKHN1Y2Nlc3NvcikpOworICAgIHAtPkZvdW5kU3RhdGUgPSBzMjsKKyAgfQorICAKKyAgaWYgKHAtPk9yZGVyRmFsbCA9PSAxICYmIGMxID09IHAtPk1heENvbnRleHQpCisgIHsKKyAgICBTZXRTdWNjZXNzb3IocC0+Rm91bmRTdGF0ZSwgU1VDQ0VTU09SKHMpKTsKKyAgICBwLT5UZXh0LS07CisgIH0KKyAgaWYgKFNVQ0NFU1NPUihzKSA9PSAwKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gQ1RYKFNVQ0NFU1NPUihzKSk7Cit9CisKK3N0YXRpYyB2b2lkIFVwZGF0ZU1vZGVsKENQcG1kOCAqcCkKK3sKKyAgQ1BwbWRfVm9pZF9SZWYgc3VjY2Vzc29yLCBmU3VjY2Vzc29yID0gU1VDQ0VTU09SKHAtPkZvdW5kU3RhdGUpOworICBDVFhfUFRSIGM7CisgIHVuc2lnbmVkIHMwLCBucywgZkZyZXEgPSBwLT5Gb3VuZFN0YXRlLT5GcmVxOworICBCeXRlIGZsYWcsIGZTeW1ib2wgPSBwLT5Gb3VuZFN0YXRlLT5TeW1ib2w7CisgIENQcG1kX1N0YXRlICpzID0gTlVMTDsKKyAgCisgIGlmIChwLT5Gb3VuZFN0YXRlLT5GcmVxIDwgTUFYX0ZSRVEgLyA0ICYmIHAtPk1pbkNvbnRleHQtPlN1ZmZpeCAhPSAwKQorICB7CisgICAgYyA9IFNVRkZJWChwLT5NaW5Db250ZXh0KTsKKyAgICAKKyAgICBpZiAoYy0+TnVtU3RhdHMgPT0gMCkKKyAgICB7CisgICAgICBzID0gT05FX1NUQVRFKGMpOworICAgICAgaWYgKHMtPkZyZXEgPCAzMikKKyAgICAgICAgcy0+RnJlcSsrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcyA9IFNUQVRTKGMpOworICAgICAgaWYgKHMtPlN5bWJvbCAhPSBwLT5Gb3VuZFN0YXRlLT5TeW1ib2wpCisgICAgICB7CisgICAgICAgIGRvIHsgcysrOyB9IHdoaWxlIChzLT5TeW1ib2wgIT0gcC0+Rm91bmRTdGF0ZS0+U3ltYm9sKTsKKyAgICAgICAgaWYgKHNbMF0uRnJlcSA+PSBzWy0xXS5GcmVxKQorICAgICAgICB7CisgICAgICAgICAgU3dhcFN0YXRlcygmc1swXSwgJnNbLTFdKTsKKyAgICAgICAgICBzLS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChzLT5GcmVxIDwgTUFYX0ZSRVEgLSA5KQorICAgICAgeworICAgICAgICBzLT5GcmVxICs9IDI7CisgICAgICAgIGMtPlN1bW1GcmVxICs9IDI7CisgICAgICB9CisgICAgfQorICB9CisgIAorICBjID0gcC0+TWF4Q29udGV4dDsKKyAgaWYgKHAtPk9yZGVyRmFsbCA9PSAwICYmIGZTdWNjZXNzb3IpCisgIHsKKyAgICBDVFhfUFRSIGNzID0gQ3JlYXRlU3VjY2Vzc29ycyhwLCBUcnVlLCBzLCBwLT5NaW5Db250ZXh0KTsKKyAgICBpZiAoY3MgPT0gMCkKKyAgICB7CisgICAgICBTZXRTdWNjZXNzb3IocC0+Rm91bmRTdGF0ZSwgMCk7CisgICAgICBSRVNUT1JFX01PREVMKGMsIENUWChmU3VjY2Vzc29yKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBTZXRTdWNjZXNzb3IocC0+Rm91bmRTdGF0ZSwgUkVGKGNzKSk7CisgICAgICBwLT5NYXhDb250ZXh0ID0gY3M7CisgICAgfQorICAgIHJldHVybjsKKyAgfQorICAKKyAgKnAtPlRleHQrKyA9IHAtPkZvdW5kU3RhdGUtPlN5bWJvbDsKKyAgc3VjY2Vzc29yID0gUkVGKHAtPlRleHQpOworICBpZiAocC0+VGV4dCA+PSBwLT5Vbml0c1N0YXJ0KQorICB7CisgICAgUkVTVE9SRV9NT0RFTChjLCBDVFgoZlN1Y2Nlc3NvcikpOyAvKiBjaGVjayBpdCAqLworICAgIHJldHVybjsKKyAgfQorICAKKyAgaWYgKCFmU3VjY2Vzc29yKQorICB7CisgICAgQ1RYX1BUUiBjcyA9IFJlZHVjZU9yZGVyKHAsIHMsIHAtPk1pbkNvbnRleHQpOworICAgIGlmIChjcyA9PSBOVUxMKQorICAgIHsKKyAgICAgIFJFU1RPUkVfTU9ERUwoYywgMCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZTdWNjZXNzb3IgPSBSRUYoY3MpOworICB9CisgIGVsc2UgaWYgKChCeXRlICopUHBtZDhfR2V0UHRyKHAsIGZTdWNjZXNzb3IpIDwgcC0+VW5pdHNTdGFydCkKKyAgeworICAgIENUWF9QVFIgY3MgPSBDcmVhdGVTdWNjZXNzb3JzKHAsIEZhbHNlLCBzLCBwLT5NaW5Db250ZXh0KTsKKyAgICBpZiAoY3MgPT0gTlVMTCkKKyAgICB7CisgICAgICBSRVNUT1JFX01PREVMKGMsIDApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmU3VjY2Vzc29yID0gUkVGKGNzKTsKKyAgfQorICAKKyAgaWYgKC0tcC0+T3JkZXJGYWxsID09IDApCisgIHsKKyAgICBzdWNjZXNzb3IgPSBmU3VjY2Vzc29yOworICAgIHAtPlRleHQgLT0gKHAtPk1heENvbnRleHQgIT0gcC0+TWluQ29udGV4dCk7CisgIH0KKyAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgIGVsc2UgaWYgKHAtPlJlc3RvcmVNZXRob2QgPiBQUE1EOF9SRVNUT1JFX01FVEhPRF9GUkVFWkUpCisgIHsKKyAgICBzdWNjZXNzb3IgPSBmU3VjY2Vzc29yOworICAgIFJFU0VUX1RFWFQoMCk7CisgICAgcC0+T3JkZXJGYWxsID0gMDsKKyAgfQorICAjZW5kaWYKKyAgCisgIHMwID0gcC0+TWluQ29udGV4dC0+U3VtbUZyZXEgLSAobnMgPSBwLT5NaW5Db250ZXh0LT5OdW1TdGF0cykgLSBmRnJlcTsKKyAgZmxhZyA9IChCeXRlKSgweDA4ICogKGZTeW1ib2wgPj0gMHg0MCkpOworICAKKyAgZm9yICg7IGMgIT0gcC0+TWluQ29udGV4dDsgYyA9IFNVRkZJWChjKSkKKyAgeworICAgIHVuc2lnbmVkIG5zMTsKKyAgICBVSW50MzIgY2YsIHNmOworICAgIGlmICgobnMxID0gYy0+TnVtU3RhdHMpICE9IDApCisgICAgeworICAgICAgaWYgKChuczEgJiAxKSAhPSAwKQorICAgICAgeworICAgICAgICAvKiBFeHBhbmQgZm9yIG9uZSBVTklUICovCisgICAgICAgIHVuc2lnbmVkIG9sZE5VID0gKG5zMSArIDEpID4+IDE7CisgICAgICAgIHVuc2lnbmVkIGkgPSBVMkkob2xkTlUpOworICAgICAgICBpZiAoaSAhPSBVMkkob2xkTlUgKyAxKSkKKyAgICAgICAgeworICAgICAgICAgIHZvaWQgKnB0ciA9IEFsbG9jVW5pdHMocCwgaSArIDEpOworICAgICAgICAgIHZvaWQgKm9sZFB0cjsKKyAgICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgICB7CisgICAgICAgICAgICBSRVNUT1JFX01PREVMKGMsIENUWChmU3VjY2Vzc29yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIG9sZFB0ciA9IFNUQVRTKGMpOworICAgICAgICAgIE15TWVtMTJDcHkocHRyLCBvbGRQdHIsIG9sZE5VKTsKKyAgICAgICAgICBJbnNlcnROb2RlKHAsIG9sZFB0ciwgaSk7CisgICAgICAgICAgYy0+U3RhdHMgPSBTVEFUU19SRUYocHRyKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYy0+U3VtbUZyZXEgPSAoVUludDE2KShjLT5TdW1tRnJlcSArICgzICogbnMxICsgMSA8IG5zKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBDUHBtZF9TdGF0ZSAqczIgPSAoQ1BwbWRfU3RhdGUqKUFsbG9jVW5pdHMocCwgMCk7CisgICAgICBpZiAoIXMyKQorICAgICAgeworICAgICAgICBSRVNUT1JFX01PREVMKGMsIENUWChmU3VjY2Vzc29yKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgICpzMiA9ICpPTkVfU1RBVEUoYyk7CisgICAgICBjLT5TdGF0cyA9IFJFRihzMik7CisgICAgICBpZiAoczItPkZyZXEgPCBNQVhfRlJFUSAvIDQgLSAxKQorICAgICAgICBzMi0+RnJlcSA8PD0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgczItPkZyZXEgPSBNQVhfRlJFUSAtIDQ7CisgICAgICBjLT5TdW1tRnJlcSA9IChVSW50MTYpKHMyLT5GcmVxICsgcC0+SW5pdEVzYyArIChucyA+IDIpKTsKKyAgICB9CisgICAgY2YgPSAyICogZkZyZXEgKiAoYy0+U3VtbUZyZXEgKyA2KTsKKyAgICBzZiA9IChVSW50MzIpczAgKyBjLT5TdW1tRnJlcTsKKyAgICBpZiAoY2YgPCA2ICogc2YpCisgICAgeworICAgICAgY2YgPSAxICsgKGNmID4gc2YpICsgKGNmID49IDQgKiBzZik7CisgICAgICBjLT5TdW1tRnJlcSArPSA0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgY2YgPSA0ICsgKGNmID4gOSAqIHNmKSArIChjZiA+IDEyICogc2YpICsgKGNmID4gMTUgKiBzZik7CisgICAgICBjLT5TdW1tRnJlcSA9IChVSW50MTYpKGMtPlN1bW1GcmVxICsgY2YpOworICAgIH0KKyAgICB7CisgICAgICBDUHBtZF9TdGF0ZSAqczIgPSBTVEFUUyhjKSArIG5zMSArIDE7CisgICAgICBTZXRTdWNjZXNzb3IoczIsIHN1Y2Nlc3Nvcik7CisgICAgICBzMi0+U3ltYm9sID0gZlN5bWJvbDsKKyAgICAgIHMyLT5GcmVxID0gKEJ5dGUpY2Y7CisgICAgICBjLT5GbGFncyB8PSBmbGFnOworICAgICAgYy0+TnVtU3RhdHMgPSAoQnl0ZSkobnMxICsgMSk7CisgICAgfQorICB9CisgIHAtPk1heENvbnRleHQgPSBwLT5NaW5Db250ZXh0ID0gQ1RYKGZTdWNjZXNzb3IpOworfQorICAKK3N0YXRpYyB2b2lkIFJlc2NhbGUoQ1BwbWQ4ICpwKQoreworICB1bnNpZ25lZCBpLCBhZGRlciwgc3VtRnJlcSwgZXNjRnJlcTsKKyAgQ1BwbWRfU3RhdGUgKnN0YXRzID0gU1RBVFMocC0+TWluQ29udGV4dCk7CisgIENQcG1kX1N0YXRlICpzID0gcC0+Rm91bmRTdGF0ZTsKKyAgeworICAgIENQcG1kX1N0YXRlIHRtcCA9ICpzOworICAgIGZvciAoOyBzICE9IHN0YXRzOyBzLS0pCisgICAgICBzWzBdID0gc1stMV07CisgICAgKnMgPSB0bXA7CisgIH0KKyAgZXNjRnJlcSA9IHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxIC0gcy0+RnJlcTsKKyAgcy0+RnJlcSArPSA0OworICBhZGRlciA9IChwLT5PcmRlckZhbGwgIT0gMAorICAgICAgI2lmZGVmIFBQTUQ4X0ZSRUVaRV9TVVBQT1JUCisgICAgICB8fCBwLT5SZXN0b3JlTWV0aG9kID4gUFBNRDhfUkVTVE9SRV9NRVRIT0RfRlJFRVpFCisgICAgICAjZW5kaWYKKyAgICAgICk7CisgIHMtPkZyZXEgPSAoQnl0ZSkoKHMtPkZyZXEgKyBhZGRlcikgPj4gMSk7CisgIHN1bUZyZXEgPSBzLT5GcmVxOworICAKKyAgaSA9IHAtPk1pbkNvbnRleHQtPk51bVN0YXRzOworICBkbworICB7CisgICAgZXNjRnJlcSAtPSAoKytzKS0+RnJlcTsKKyAgICBzLT5GcmVxID0gKEJ5dGUpKChzLT5GcmVxICsgYWRkZXIpID4+IDEpOworICAgIHN1bUZyZXEgKz0gcy0+RnJlcTsKKyAgICBpZiAoc1swXS5GcmVxID4gc1stMV0uRnJlcSkKKyAgICB7CisgICAgICBDUHBtZF9TdGF0ZSAqczEgPSBzOworICAgICAgQ1BwbWRfU3RhdGUgdG1wID0gKnMxOworICAgICAgZG8KKyAgICAgICAgczFbMF0gPSBzMVstMV07CisgICAgICB3aGlsZSAoLS1zMSAhPSBzdGF0cyAmJiB0bXAuRnJlcSA+IHMxWy0xXS5GcmVxKTsKKyAgICAgICpzMSA9IHRtcDsKKyAgICB9CisgIH0KKyAgd2hpbGUgKC0taSk7CisgIAorICBpZiAocy0+RnJlcSA9PSAwKQorICB7CisgICAgdW5zaWduZWQgbnVtU3RhdHMgPSBwLT5NaW5Db250ZXh0LT5OdW1TdGF0czsKKyAgICB1bnNpZ25lZCBuMCwgbjE7CisgICAgZG8geyBpKys7IH0gd2hpbGUgKCgtLXMpLT5GcmVxID09IDApOworICAgIGVzY0ZyZXEgKz0gaTsKKyAgICBwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyA9IChCeXRlKShwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyAtIGkpOworICAgIGlmIChwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyA9PSAwKQorICAgIHsKKyAgICAgIENQcG1kX1N0YXRlIHRtcCA9ICpzdGF0czsKKyAgICAgIHRtcC5GcmVxID0gKEJ5dGUpKCgyICogdG1wLkZyZXEgKyBlc2NGcmVxIC0gMSkgLyBlc2NGcmVxKTsKKyAgICAgIGlmICh0bXAuRnJlcSA+IE1BWF9GUkVRIC8gMykKKyAgICAgICAgdG1wLkZyZXEgPSBNQVhfRlJFUSAvIDM7CisgICAgICBJbnNlcnROb2RlKHAsIHN0YXRzLCBVMkkoKG51bVN0YXRzICsgMikgPj4gMSkpOworICAgICAgcC0+TWluQ29udGV4dC0+RmxhZ3MgPSAoQnl0ZSkoKHAtPk1pbkNvbnRleHQtPkZsYWdzICYgMHgxMCkgKyAweDA4ICogKHRtcC5TeW1ib2wgPj0gMHg0MCkpOworICAgICAgKihwLT5Gb3VuZFN0YXRlID0gT05FX1NUQVRFKHAtPk1pbkNvbnRleHQpKSA9IHRtcDsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgbjAgPSAobnVtU3RhdHMgKyAyKSA+PiAxOworICAgIG4xID0gKHAtPk1pbkNvbnRleHQtPk51bVN0YXRzICsgMikgPj4gMTsKKyAgICBpZiAobjAgIT0gbjEpCisgICAgICBwLT5NaW5Db250ZXh0LT5TdGF0cyA9IFNUQVRTX1JFRihTaHJpbmtVbml0cyhwLCBzdGF0cywgbjAsIG4xKSk7CisgICAgcC0+TWluQ29udGV4dC0+RmxhZ3MgJj0gfjB4MDg7CisgICAgcC0+TWluQ29udGV4dC0+RmxhZ3MgfD0gMHgwOCAqICgocyA9IFNUQVRTKHAtPk1pbkNvbnRleHQpKS0+U3ltYm9sID49IDB4NDApOworICAgIGkgPSBwLT5NaW5Db250ZXh0LT5OdW1TdGF0czsKKyAgICBkbyB7IHAtPk1pbkNvbnRleHQtPkZsYWdzIHw9IDB4MDgqKCgrK3MpLT5TeW1ib2wgPj0gMHg0MCk7IH0gd2hpbGUgKC0taSk7CisgIH0KKyAgcC0+TWluQ29udGV4dC0+U3VtbUZyZXEgPSAoVUludDE2KShzdW1GcmVxICsgZXNjRnJlcSAtIChlc2NGcmVxID4+IDEpKTsKKyAgcC0+TWluQ29udGV4dC0+RmxhZ3MgfD0gMHg0OworICBwLT5Gb3VuZFN0YXRlID0gU1RBVFMocC0+TWluQ29udGV4dCk7Cit9CisKK0NQcG1kX1NlZSAqUHBtZDhfTWFrZUVzY0ZyZXEoQ1BwbWQ4ICpwLCB1bnNpZ25lZCBudW1NYXNrZWQxLCBVSW50MzIgKmVzY0ZyZXEpCit7CisgIENQcG1kX1NlZSAqc2VlOworICBpZiAocC0+TWluQ29udGV4dC0+TnVtU3RhdHMgIT0gMHhGRikKKyAgeworICAgIHNlZSA9IHAtPlNlZVsodW5zaWduZWQpcC0+TlMySW5keFsodW5zaWduZWQpcC0+TWluQ29udGV4dC0+TnVtU3RhdHMgKyAyXSAtIDNdICsKKyAgICAgICAgKHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxID4gMTEgKiAoKHVuc2lnbmVkKXAtPk1pbkNvbnRleHQtPk51bVN0YXRzICsgMSkpICsKKyAgICAgICAgMiAqICh1bnNpZ25lZCkoMiAqICh1bnNpZ25lZClwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyA8CisgICAgICAgICgodW5zaWduZWQpU1VGRklYKHAtPk1pbkNvbnRleHQpLT5OdW1TdGF0cyArIG51bU1hc2tlZDEpKSArCisgICAgICAgIHAtPk1pbkNvbnRleHQtPkZsYWdzOworICAgIHsKKyAgICAgIHVuc2lnbmVkIHIgPSAoc2VlLT5TdW1tID4+IHNlZS0+U2hpZnQpOworICAgICAgc2VlLT5TdW1tID0gKFVJbnQxNikoc2VlLT5TdW1tIC0gcik7CisgICAgICAqZXNjRnJlcSA9IHIgKyAociA9PSAwKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgc2VlID0gJnAtPkR1bW15U2VlOworICAgICplc2NGcmVxID0gMTsKKyAgfQorICByZXR1cm4gc2VlOworfQorCitzdGF0aWMgdm9pZCBOZXh0Q29udGV4dChDUHBtZDggKnApCit7CisgIENUWF9QVFIgYyA9IENUWChTVUNDRVNTT1IocC0+Rm91bmRTdGF0ZSkpOworICBpZiAocC0+T3JkZXJGYWxsID09IDAgJiYgKEJ5dGUgKiljID49IHAtPlVuaXRzU3RhcnQpCisgICAgcC0+TWluQ29udGV4dCA9IHAtPk1heENvbnRleHQgPSBjOworICBlbHNlCisgIHsKKyAgICBVcGRhdGVNb2RlbChwKTsKKyAgICBwLT5NaW5Db250ZXh0ID0gcC0+TWF4Q29udGV4dDsKKyAgfQorfQorCit2b2lkIFBwbWQ4X1VwZGF0ZTEoQ1BwbWQ4ICpwKQoreworICBDUHBtZF9TdGF0ZSAqcyA9IHAtPkZvdW5kU3RhdGU7CisgIHMtPkZyZXEgKz0gNDsKKyAgcC0+TWluQ29udGV4dC0+U3VtbUZyZXEgKz0gNDsKKyAgaWYgKHNbMF0uRnJlcSA+IHNbLTFdLkZyZXEpCisgIHsKKyAgICBTd2FwU3RhdGVzKCZzWzBdLCAmc1stMV0pOworICAgIHAtPkZvdW5kU3RhdGUgPSAtLXM7CisgICAgaWYgKHMtPkZyZXEgPiBNQVhfRlJFUSkKKyAgICAgIFJlc2NhbGUocCk7CisgIH0KKyAgTmV4dENvbnRleHQocCk7Cit9CisKK3ZvaWQgUHBtZDhfVXBkYXRlMV8wKENQcG1kOCAqcCkKK3sKKyAgcC0+UHJldlN1Y2Nlc3MgPSAoMiAqIHAtPkZvdW5kU3RhdGUtPkZyZXEgPj0gcC0+TWluQ29udGV4dC0+U3VtbUZyZXEpOworICBwLT5SdW5MZW5ndGggKz0gcC0+UHJldlN1Y2Nlc3M7CisgIHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxICs9IDQ7CisgIGlmICgocC0+Rm91bmRTdGF0ZS0+RnJlcSArPSA0KSA+IE1BWF9GUkVRKQorICAgIFJlc2NhbGUocCk7CisgIE5leHRDb250ZXh0KHApOworfQorCit2b2lkIFBwbWQ4X1VwZGF0ZUJpbihDUHBtZDggKnApCit7CisgIHAtPkZvdW5kU3RhdGUtPkZyZXEgPSAoQnl0ZSkocC0+Rm91bmRTdGF0ZS0+RnJlcSArIChwLT5Gb3VuZFN0YXRlLT5GcmVxIDwgMTk2KSk7CisgIHAtPlByZXZTdWNjZXNzID0gMTsKKyAgcC0+UnVuTGVuZ3RoKys7CisgIE5leHRDb250ZXh0KHApOworfQorCit2b2lkIFBwbWQ4X1VwZGF0ZTIoQ1BwbWQ4ICpwKQoreworICBwLT5NaW5Db250ZXh0LT5TdW1tRnJlcSArPSA0OworICBpZiAoKHAtPkZvdW5kU3RhdGUtPkZyZXEgKz0gNCkgPiBNQVhfRlJFUSkKKyAgICBSZXNjYWxlKHApOworICBwLT5SdW5MZW5ndGggPSBwLT5Jbml0Ukw7CisgIFVwZGF0ZU1vZGVsKHApOworICBwLT5NaW5Db250ZXh0ID0gcC0+TWF4Q29udGV4dDsKK30KKworLyogUHBtZDhEZWMuYyAtLSBQUE1kSSBEZWNvZGVyCisyMDEwLTA0LTE2IDogSWdvciBQYXZsb3YgOiBQdWJsaWMgZG9tYWluCitUaGlzIGNvZGUgaXMgYmFzZWQgb246CisgIFBQTWQgdmFyLkkgKDIwMDIpOiBEbWl0cnkgU2hrYXJpbiA6IFB1YmxpYyBkb21haW4KKyAgQ2FycnlsZXNzIHJhbmdlY29kZXIgKDE5OTkpOiBEbWl0cnkgU3ViYm90aW4gOiBQdWJsaWMgZG9tYWluICovCisKK0Jvb2wgUHBtZDhfUmFuZ2VEZWNfSW5pdChDUHBtZDggKnApCit7CisgIHVuc2lnbmVkIGk7CisgIHAtPkxvdyA9IDA7CisgIHAtPlJhbmdlID0gMHhGRkZGRkZGRjsKKyAgcC0+Q29kZSA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgcC0+Q29kZSA9IChwLT5Db2RlIDw8IDgpIHwgcC0+U3RyZWFtLkluLT5SZWFkKHAtPlN0cmVhbS5Jbik7CisgIHJldHVybiAocC0+Q29kZSA8IDB4RkZGRkZGRkYpOworfQorCitzdGF0aWMgVUludDMyIFJhbmdlRGVjX0dldFRocmVzaG9sZChDUHBtZDggKnAsIFVJbnQzMiB0b3RhbCkKK3sKKyAgcmV0dXJuIHAtPkNvZGUgLyAocC0+UmFuZ2UgLz0gdG90YWwpOworfQorCitzdGF0aWMgdm9pZCBSYW5nZURlY19EZWNvZGUoQ1BwbWQ4ICpwLCBVSW50MzIgc3RhcnQsIFVJbnQzMiBzaXplKQoreworICBzdGFydCAqPSBwLT5SYW5nZTsKKyAgcC0+TG93ICs9IHN0YXJ0OworICBwLT5Db2RlIC09IHN0YXJ0OworICBwLT5SYW5nZSAqPSBzaXplOworCisgIHdoaWxlICgocC0+TG93IF4gKHAtPkxvdyArIHAtPlJhbmdlKSkgPCBrVG9wIHx8CisgICAgICAocC0+UmFuZ2UgPCBrQm90ICYmICgocC0+UmFuZ2UgPSAoMCAtIHAtPkxvdykgJiAoa0JvdCAtIDEpKSwgMSkpKQorICB7CisgICAgcC0+Q29kZSA9IChwLT5Db2RlIDw8IDgpIHwgcC0+U3RyZWFtLkluLT5SZWFkKHAtPlN0cmVhbS5Jbik7CisgICAgcC0+UmFuZ2UgPDw9IDg7CisgICAgcC0+TG93IDw8PSA4OworICB9Cit9CisKKyNkZWZpbmUgTUFTSyhzeW0pICgoc2lnbmVkIGNoYXIgKiljaGFyTWFzaylbc3ltXQorCitpbnQgUHBtZDhfRGVjb2RlU3ltYm9sKENQcG1kOCAqcCkKK3sKKyAgc2l6ZV90IGNoYXJNYXNrWzI1NiAvIHNpemVvZihzaXplX3QpXTsKKyAgaWYgKHAtPk1pbkNvbnRleHQtPk51bVN0YXRzICE9IDApCisgIHsKKyAgICBDUHBtZF9TdGF0ZSAqcyA9IFBwbWQ4X0dldFN0YXRzKHAsIHAtPk1pbkNvbnRleHQpOworICAgIHVuc2lnbmVkIGk7CisgICAgVUludDMyIGNvdW50LCBoaUNudDsKKyAgICBpZiAoKGNvdW50ID0gUmFuZ2VEZWNfR2V0VGhyZXNob2xkKHAsIHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxKSkgPCAoaGlDbnQgPSBzLT5GcmVxKSkKKyAgICB7CisgICAgICBCeXRlIHN5bWJvbDsKKyAgICAgIFJhbmdlRGVjX0RlY29kZShwLCAwLCBzLT5GcmVxKTsKKyAgICAgIHAtPkZvdW5kU3RhdGUgPSBzOworICAgICAgc3ltYm9sID0gcy0+U3ltYm9sOworICAgICAgUHBtZDhfVXBkYXRlMV8wKHApOworICAgICAgcmV0dXJuIHN5bWJvbDsKKyAgICB9CisgICAgcC0+UHJldlN1Y2Nlc3MgPSAwOworICAgIGkgPSBwLT5NaW5Db250ZXh0LT5OdW1TdGF0czsKKyAgICBkbworICAgIHsKKyAgICAgIGlmICgoaGlDbnQgKz0gKCsrcyktPkZyZXEpID4gY291bnQpCisgICAgICB7CisgICAgICAgIEJ5dGUgc3ltYm9sOworICAgICAgICBSYW5nZURlY19EZWNvZGUocCwgaGlDbnQgLSBzLT5GcmVxLCBzLT5GcmVxKTsKKyAgICAgICAgcC0+Rm91bmRTdGF0ZSA9IHM7CisgICAgICAgIHN5bWJvbCA9IHMtPlN5bWJvbDsKKyAgICAgICAgUHBtZDhfVXBkYXRlMShwKTsKKyAgICAgICAgcmV0dXJuIHN5bWJvbDsKKyAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKC0taSk7CisgICAgaWYgKGNvdW50ID49IHAtPk1pbkNvbnRleHQtPlN1bW1GcmVxKQorICAgICAgcmV0dXJuIC0yOworICAgIFJhbmdlRGVjX0RlY29kZShwLCBoaUNudCwgcC0+TWluQ29udGV4dC0+U3VtbUZyZXEgLSBoaUNudCk7CisgICAgUFBNRF9TZXRBbGxCaXRzSW4yNTZCeXRlcyhjaGFyTWFzayk7CisgICAgTUFTSyhzLT5TeW1ib2wpID0gMDsKKyAgICBpID0gcC0+TWluQ29udGV4dC0+TnVtU3RhdHM7CisgICAgZG8geyBNQVNLKCgtLXMpLT5TeW1ib2wpID0gMDsgfSB3aGlsZSAoLS1pKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBVSW50MTYgKnByb2IgPSBQcG1kOF9HZXRCaW5TdW1tKHApOworICAgIGlmICgoKHAtPkNvZGUgLyAocC0+UmFuZ2UgPj49IDE0KSkgPCAqcHJvYikpCisgICAgeworICAgICAgQnl0ZSBzeW1ib2w7CisgICAgICBSYW5nZURlY19EZWNvZGUocCwgMCwgKnByb2IpOworICAgICAgKnByb2IgPSAoVUludDE2KVBQTURfVVBEQVRFX1BST0JfMCgqcHJvYik7CisgICAgICBzeW1ib2wgPSAocC0+Rm91bmRTdGF0ZSA9IFBwbWQ4Q29udGV4dF9PbmVTdGF0ZShwLT5NaW5Db250ZXh0KSktPlN5bWJvbDsKKyAgICAgIFBwbWQ4X1VwZGF0ZUJpbihwKTsKKyAgICAgIHJldHVybiBzeW1ib2w7CisgICAgfQorICAgIFJhbmdlRGVjX0RlY29kZShwLCAqcHJvYiwgKDEgPDwgMTQpIC0gKnByb2IpOworICAgICpwcm9iID0gKFVJbnQxNilQUE1EX1VQREFURV9QUk9CXzEoKnByb2IpOworICAgIHAtPkluaXRFc2MgPSBQUE1EOF9rRXhwRXNjYXBlWypwcm9iID4+IDEwXTsKKyAgICBQUE1EX1NldEFsbEJpdHNJbjI1NkJ5dGVzKGNoYXJNYXNrKTsKKyAgICBNQVNLKFBwbWQ4Q29udGV4dF9PbmVTdGF0ZShwLT5NaW5Db250ZXh0KS0+U3ltYm9sKSA9IDA7CisgICAgcC0+UHJldlN1Y2Nlc3MgPSAwOworICB9CisgIGZvciAoOzspCisgIHsKKyAgICBDUHBtZF9TdGF0ZSAqcHNbMjU2XSwgKnM7CisgICAgVUludDMyIGZyZXFTdW0sIGNvdW50LCBoaUNudDsKKyAgICBDUHBtZF9TZWUgKnNlZTsKKyAgICB1bnNpZ25lZCBpLCBudW0sIG51bU1hc2tlZCA9IHAtPk1pbkNvbnRleHQtPk51bVN0YXRzOworICAgIGRvCisgICAgeworICAgICAgcC0+T3JkZXJGYWxsKys7CisgICAgICBpZiAoIXAtPk1pbkNvbnRleHQtPlN1ZmZpeCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcC0+TWluQ29udGV4dCA9IFBwbWQ4X0dldENvbnRleHQocCwgcC0+TWluQ29udGV4dC0+U3VmZml4KTsKKyAgICB9CisgICAgd2hpbGUgKHAtPk1pbkNvbnRleHQtPk51bVN0YXRzID09IG51bU1hc2tlZCk7CisgICAgaGlDbnQgPSAwOworICAgIHMgPSBQcG1kOF9HZXRTdGF0cyhwLCBwLT5NaW5Db250ZXh0KTsKKyAgICBpID0gMDsKKyAgICBudW0gPSBwLT5NaW5Db250ZXh0LT5OdW1TdGF0cyAtIG51bU1hc2tlZDsKKyAgICBkbworICAgIHsKKyAgICAgIGludCBrID0gKGludCkoTUFTSyhzLT5TeW1ib2wpKTsKKyAgICAgIGhpQ250ICs9IChzLT5GcmVxICYgayk7CisgICAgICBwc1tpXSA9IHMrKzsKKyAgICAgIGkgLT0gazsKKyAgICB9CisgICAgd2hpbGUgKGkgIT0gbnVtKTsKKyAgICAKKyAgICBzZWUgPSBQcG1kOF9NYWtlRXNjRnJlcShwLCBudW1NYXNrZWQsICZmcmVxU3VtKTsKKyAgICBmcmVxU3VtICs9IGhpQ250OworICAgIGNvdW50ID0gUmFuZ2VEZWNfR2V0VGhyZXNob2xkKHAsIGZyZXFTdW0pOworICAgIAorICAgIGlmIChjb3VudCA8IGhpQ250KQorICAgIHsKKyAgICAgIEJ5dGUgc3ltYm9sOworICAgICAgQ1BwbWRfU3RhdGUgKipwcHMgPSBwczsKKyAgICAgIGZvciAoaGlDbnQgPSAwOyAoaGlDbnQgKz0gKCpwcHMpLT5GcmVxKSA8PSBjb3VudDsgcHBzKyspOworICAgICAgcyA9ICpwcHM7CisgICAgICBSYW5nZURlY19EZWNvZGUocCwgaGlDbnQgLSBzLT5GcmVxLCBzLT5GcmVxKTsKKyAgICAgIFBwbWRfU2VlX1VwZGF0ZShzZWUpOworICAgICAgcC0+Rm91bmRTdGF0ZSA9IHM7CisgICAgICBzeW1ib2wgPSBzLT5TeW1ib2w7CisgICAgICBQcG1kOF9VcGRhdGUyKHApOworICAgICAgcmV0dXJuIHN5bWJvbDsKKyAgICB9CisgICAgaWYgKGNvdW50ID49IGZyZXFTdW0pCisgICAgICByZXR1cm4gLTI7CisgICAgUmFuZ2VEZWNfRGVjb2RlKHAsIGhpQ250LCBmcmVxU3VtIC0gaGlDbnQpOworICAgIHNlZS0+U3VtbSA9IChVSW50MTYpKHNlZS0+U3VtbSArIGZyZXFTdW0pOworICAgIGRvIHsgTUFTSyhwc1stLWldLT5TeW1ib2wpID0gMDsgfSB3aGlsZSAoaSAhPSAwKTsKKyAgfQorfQorCisvKiBILT5JIGNoYW5nZXM6CisgIE5TMkluZHgKKyAgR2xld0NvdW50LCBhbmQgR2x1ZSBtZXRob2QKKyAgQmluU3VtCisgIFNlZSAvIEVzY0ZyZXEKKyAgQ3JlYXRlU3VjY2Vzc29ycyB1cGRhdGVzIG1vcmUgc3VmZml4IGNvbnRleHRzCisgIFVwZGF0ZU1vZGVsIGNvbnN0cy4KKyAgUHJldlN1Y2Nlc3MgVXBkYXRlCisqLworCitjb25zdCBJUHBtZDggX19hcmNoaXZlX3BwbWQ4X2Z1bmN0aW9ucyA9Cit7CisgICZQcG1kOF9Db25zdHJ1Y3QsCisgICZQcG1kOF9BbGxvYywKKyAgJlBwbWQ4X0ZyZWUsCisgICZQcG1kOF9Jbml0LAorICAmUHBtZDhfUmFuZ2VEZWNfSW5pdCwKKyAgJlBwbWQ4X0RlY29kZVN5bWJvbCwKK307CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kOF9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kOF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0Yjc1ZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWQ4X3ByaXZhdGUuaApAQCAtMCwwICsxLDE0OCBAQAorLyogUHBtZDguaCAtLSBQUE1kSSBjb2RlYworMjAxMS0wMS0yNyA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbgorVGhpcyBjb2RlIGlzIGJhc2VkIG9uOgorICBQUE1kIHZhci5JICgyMDAyKTogRG1pdHJ5IFNoa2FyaW4gOiBQdWJsaWMgZG9tYWluCisgIENhcnJ5bGVzcyByYW5nZWNvZGVyICgxOTk5KTogRG1pdHJ5IFN1YmJvdGluIDogUHVibGljIGRvbWFpbiAqLworCisjaWZuZGVmIEFSQ0hJVkVfUFBNRDhfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfUFBNRDhfUFJJVkFURV9IX0lOQ0xVREVECisKKyNpbmNsdWRlICJhcmNoaXZlX3BwbWRfcHJpdmF0ZS5oIgorCisjZGVmaW5lIFBQTUQ4X01JTl9PUkRFUiAyCisjZGVmaW5lIFBQTUQ4X01BWF9PUkRFUiAxNgorCitzdHJ1Y3QgQ1BwbWQ4X0NvbnRleHRfOworCit0eXBlZGVmCisgICNpZmRlZiBQUE1EXzMyQklUCisgICAgc3RydWN0IENQcG1kOF9Db250ZXh0XyAqCisgICNlbHNlCisgICAgVUludDMyCisgICNlbmRpZgorICBDUHBtZDhfQ29udGV4dF9SZWY7CisKKyNwcmFnbWEgcGFjayhwdXNoLCAxKQorCit0eXBlZGVmIHN0cnVjdCBDUHBtZDhfQ29udGV4dF8KK3sKKyAgQnl0ZSBOdW1TdGF0czsKKyAgQnl0ZSBGbGFnczsKKyAgVUludDE2IFN1bW1GcmVxOworICBDUHBtZF9TdGF0ZV9SZWYgU3RhdHM7CisgIENQcG1kOF9Db250ZXh0X1JlZiBTdWZmaXg7Cit9IENQcG1kOF9Db250ZXh0OworCisjcHJhZ21hIHBhY2socG9wKQorCisjZGVmaW5lIFBwbWQ4Q29udGV4dF9PbmVTdGF0ZShwKSAoKENQcG1kX1N0YXRlICopJihwKS0+U3VtbUZyZXEpCisKKy8qIFRoZSBCVUcgaW4gU2hrYXJpbidzIGNvZGUgZm9yIEZSRUVaRSBtb2RlIHdhcyBmaXhlZCwgYnV0IHRoYXQgZml4ZWQKKyAgIGNvZGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvcmlnaW5hbCBjb2RlIGZvciBzb21lIGZpbGVzIGNvbXByZXNzZWQKKyAgIGluIEZSRUVaRSBtb2RlLiBTbyB3ZSBkaXNhYmxlIEZSRUVaRSBtb2RlIHN1cHBvcnQuICovCisKK2VudW0KK3sKKyAgUFBNRDhfUkVTVE9SRV9NRVRIT0RfUkVTVEFSVCwKKyAgUFBNRDhfUkVTVE9SRV9NRVRIT0RfQ1VUX09GRgorICAjaWZkZWYgUFBNRDhfRlJFRVpFX1NVUFBPUlQKKyAgLCBQUE1EOF9SRVNUT1JFX01FVEhPRF9GUkVFWkUKKyAgI2VuZGlmCit9OworCit0eXBlZGVmIHN0cnVjdAoreworICBDUHBtZDhfQ29udGV4dCAqTWluQ29udGV4dCwgKk1heENvbnRleHQ7CisgIENQcG1kX1N0YXRlICpGb3VuZFN0YXRlOworICB1bnNpZ25lZCBPcmRlckZhbGwsIEluaXRFc2MsIFByZXZTdWNjZXNzLCBNYXhPcmRlcjsKKyAgSW50MzIgUnVuTGVuZ3RoLCBJbml0Ukw7IC8qIG11c3QgYmUgMzItYml0IGF0IGxlYXN0ICovCisKKyAgVUludDMyIFNpemU7CisgIFVJbnQzMiBHbHVlQ291bnQ7CisgIEJ5dGUgKkJhc2UsICpMb1VuaXQsICpIaVVuaXQsICpUZXh0LCAqVW5pdHNTdGFydDsKKyAgVUludDMyIEFsaWduT2Zmc2V0OworICB1bnNpZ25lZCBSZXN0b3JlTWV0aG9kOworCisgIC8qIFJhbmdlIENvZGVyICovCisgIFVJbnQzMiBSYW5nZTsKKyAgVUludDMyIENvZGU7CisgIFVJbnQzMiBMb3c7CisgIHVuaW9uCisgIHsKKyAgICBJQnl0ZUluICpJbjsKKyAgICBJQnl0ZU91dCAqT3V0OworICB9IFN0cmVhbTsKKworICBCeXRlIEluZHgyVW5pdHNbUFBNRF9OVU1fSU5ERVhFU107CisgIEJ5dGUgVW5pdHMySW5keFsxMjhdOworICBDUHBtZF9Wb2lkX1JlZiBGcmVlTGlzdFtQUE1EX05VTV9JTkRFWEVTXTsKKyAgVUludDMyIFN0YW1wc1tQUE1EX05VTV9JTkRFWEVTXTsKKworICBCeXRlIE5TMkJTSW5keFsyNTZdLCBOUzJJbmR4WzI2MF07CisgIENQcG1kX1NlZSBEdW1teVNlZSwgU2VlWzI0XVszMl07CisgIFVJbnQxNiBCaW5TdW1tWzI1XVs2NF07Cit9IENQcG1kODsKKwordm9pZCBQcG1kOF9Db25zdHJ1Y3QoQ1BwbWQ4ICpwKTsKK0Jvb2wgUHBtZDhfQWxsb2MoQ1BwbWQ4ICpwLCBVSW50MzIgc2l6ZSk7Cit2b2lkIFBwbWQ4X0ZyZWUoQ1BwbWQ4ICpwKTsKK3ZvaWQgUHBtZDhfSW5pdChDUHBtZDggKnAsIHVuc2lnbmVkIG1heE9yZGVyLCB1bnNpZ25lZCByZXN0b3JlTWV0aG9kKTsKKyNkZWZpbmUgUHBtZDhfV2FzQWxsb2NhdGVkKHApICgocCktPkJhc2UgIT0gTlVMTCkKKworCisvKiAtLS0tLS0tLS0tIEludGVybmFsIEZ1bmN0aW9ucyAtLS0tLS0tLS0tICovCisKK2V4dGVybiBjb25zdCBCeXRlIFBQTUQ4X2tFeHBFc2NhcGVbMTZdOworCisjaWZkZWYgUFBNRF8zMkJJVAorICAjZGVmaW5lIFBwbWQ4X0dldFB0cihwLCBwdHIpIChwdHIpCisgICNkZWZpbmUgUHBtZDhfR2V0Q29udGV4dChwLCBwdHIpIChwdHIpCisgICNkZWZpbmUgUHBtZDhfR2V0U3RhdHMocCwgY3R4KSAoKGN0eCktPlN0YXRzKQorI2Vsc2UKKyAgI2RlZmluZSBQcG1kOF9HZXRQdHIocCwgb2ZmcykgKCh2b2lkICopKChwKS0+QmFzZSArIChvZmZzKSkpCisgICNkZWZpbmUgUHBtZDhfR2V0Q29udGV4dChwLCBvZmZzKSAoKENQcG1kOF9Db250ZXh0ICopUHBtZDhfR2V0UHRyKChwKSwgKG9mZnMpKSkKKyAgI2RlZmluZSBQcG1kOF9HZXRTdGF0cyhwLCBjdHgpICgoQ1BwbWRfU3RhdGUgKilQcG1kOF9HZXRQdHIoKHApLCAoKGN0eCktPlN0YXRzKSkpCisjZW5kaWYKKwordm9pZCBQcG1kOF9VcGRhdGUxKENQcG1kOCAqcCk7Cit2b2lkIFBwbWQ4X1VwZGF0ZTFfMChDUHBtZDggKnApOwordm9pZCBQcG1kOF9VcGRhdGUyKENQcG1kOCAqcCk7Cit2b2lkIFBwbWQ4X1VwZGF0ZUJpbihDUHBtZDggKnApOworCisjZGVmaW5lIFBwbWQ4X0dldEJpblN1bW0ocCkgXAorICAgICZwLT5CaW5TdW1tW3AtPk5TMkluZHhbUHBtZDhDb250ZXh0X09uZVN0YXRlKHAtPk1pbkNvbnRleHQpLT5GcmVxIC0gMV1dWyBcCisgICAgcC0+TlMyQlNJbmR4W1BwbWQ4X0dldENvbnRleHQocCwgcC0+TWluQ29udGV4dC0+U3VmZml4KS0+TnVtU3RhdHNdICsgXAorICAgIHAtPlByZXZTdWNjZXNzICsgcC0+TWluQ29udGV4dC0+RmxhZ3MgKyAoKHAtPlJ1bkxlbmd0aCA+PiAyNikgJiAweDIwKV0KKworQ1BwbWRfU2VlICpQcG1kOF9NYWtlRXNjRnJlcShDUHBtZDggKnAsIHVuc2lnbmVkIG51bU1hc2tlZCwgVUludDMyICpzY2FsZSk7CisKKworLyogLS0tLS0tLS0tLSBEZWNvZGUgLS0tLS0tLS0tLSAqLworCitCb29sIFBwbWQ4X1JhbmdlRGVjX0luaXQoQ1BwbWQ4ICpwKTsKKyNkZWZpbmUgUHBtZDhfUmFuZ2VEZWNfSXNGaW5pc2hlZE9LKHApICgocCktPkNvZGUgPT0gMCkKK2ludCBQcG1kOF9EZWNvZGVTeW1ib2woQ1BwbWQ4ICpwKTsgLyogcmV0dXJuczogLTEgYXMgRW5kTWFya2VyLCAtMiBhcyBEYXRhRXJyb3IgKi8KKworLyogLS0tLS0tLS0tLSBFbmNvZGUgLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIFBwbWQ4X1JhbmdlRW5jX0luaXQocCkgeyAocCktPkxvdyA9IDA7IChwKS0+UmFuZ2UgPSAweEZGRkZGRkZGOyB9Cit2b2lkIFBwbWQ4X1JhbmdlRW5jX0ZsdXNoRGF0YShDUHBtZDggKnApOwordm9pZCBQcG1kOF9FbmNvZGVTeW1ib2woQ1BwbWQ4ICpwLCBpbnQgc3ltYm9sKTsgLyogc3ltYm9sID0gLTEgbWVhbnMgRW5kTWFya2VyICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIEJhc2UgRnVuY3Rpb25zICovCisgIHZvaWQgKCpQcG1kOF9Db25zdHJ1Y3QpKENQcG1kOCAqcCk7CisgIEJvb2wgKCpQcG1kOF9BbGxvYykoQ1BwbWQ4ICpwLCBVSW50MzIgc2l6ZSk7CisgIHZvaWQgKCpQcG1kOF9GcmVlKShDUHBtZDggKnApOworICB2b2lkICgqUHBtZDhfSW5pdCkoQ1BwbWQ4ICpwLCB1bnNpZ25lZCBtYXhfb3JkZXIsIHVuc2lnbmVkIHJlc3RvcmVfbWV0aG9kKTsKKyAgI2RlZmluZSBQcG1kN19XYXNBbGxvY2F0ZWQocCkgKChwKS0+QmFzZSAhPSBOVUxMKQorCisgIC8qIERlY29kZSBGdW5jdGlvbnMgKi8KKyAgaW50ICgqUHBtZDhfUmFuZ2VEZWNfSW5pdCkoQ1BwbWQ4ICpwKTsKKyAgaW50ICgqUHBtZDhfRGVjb2RlU3ltYm9sKShDUHBtZDggKnApOworfSBJUHBtZDg7CisKK2V4dGVybiBjb25zdCBJUHBtZDggX19hcmNoaXZlX3BwbWQ4X2Z1bmN0aW9uczsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcG1kX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWRfcHJpdmF0ZS5oCmluZGV4IGE4M2I4NTEuLjU4MjgwM2UgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWRfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3BwbWRfcHJpdmF0ZS5oCkBAIC0yLDEzICsyLDEzIEBACiAyMDEwLTAzLTEyIDogSWdvciBQYXZsb3YgOiBQdWJsaWMgZG9tYWluCiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gUFBNZCB2YXIuSCAoMjAwMSk6IERtaXRyeSBTaGthcmluIDogUHVibGljIGRvbWFpbiAqLwogCisjaWZuZGVmIEFSQ0hJVkVfUFBNRF9QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9QUE1EX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1BQTURfUFJJVkFURV9IX0lOQ0xVREVECi0jZGVmaW5lIEFSQ0hJVkVfUFBNRF9QUklWQVRFX0hfSU5DTFVERUQKLQogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCiAjaW5jbHVkZSAiYXJjaGl2ZV9yZWFkX3ByaXZhdGUuaCIKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3ByaXZhdGUuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3ByaXZhdGUuaAppbmRleCA0YjRiZTk3Li45MzdhODdiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcHJpdmF0ZS5oCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqICRGcmVlQlNEOiBoZWFkL2xpYi9saWJhcmNoaXZlL2FyY2hpdmVfcHJpdmF0ZS5oIDIwMTA5OCAyMDA5LTEyLTI4IDAyOjU4OjE0WiBraWVudHpsZSAkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaWYgSEFWRV9JQ09OVl9ICiAjaW5jbHVkZSA8aWNvbnYuaD4KICNlbmRpZgpAQCAtMTUzLDYgKzE1MywxMSBAQAogCiB2b2lkCV9fYXJjaGl2ZV9lbnN1cmVfY2xvZXhlY19mbGFnKGludCBmZCk7CiBpbnQJX19hcmNoaXZlX21rdGVtcChjb25zdCBjaGFyICp0bXBkaXIpOworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQoraW50CV9fYXJjaGl2ZV9ta3N0ZW1wKHdjaGFyX3QgKnRlbXBsYXRlKTsKKyNlbHNlCitpbnQJX19hcmNoaXZlX21rc3RlbXAoY2hhciAqdGVtcGxhdGUpOworI2VuZGlmCiAKIGludAlfX2FyY2hpdmVfY2xlYW4oc3RydWN0IGFyY2hpdmUgKik7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JhbmRvbV9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yYW5kb21fcHJpdmF0ZS5oCmluZGV4IGM0MTQ3NzkuLjA4YjkxYjMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JhbmRvbV9wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmFuZG9tX3ByaXZhdGUuaApAQCAtMjMsMTMgKzIzLDEzIEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZm5kZWYgQVJDSElWRV9SQU5ET01fUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfUkFORE9NX1BSSVZBVEVfSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1JBTkRPTV9QUklWQVRFX0hfSU5DTFVERUQKLSNkZWZpbmUgQVJDSElWRV9SQU5ET01fUFJJVkFURV9IX0lOQ0xVREVECi0KIC8qIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAqLwogaW50IGFyY2hpdmVfcmFuZG9tKHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlcyk7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JiLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yYi5oCmluZGV4IDQ1NjJlOWUuLjg4NTFmMTAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JiLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmIuaApAQCAtMjgsOCArMjgsOSBAQAogICoKICAqIEJhc2VkIG9uIE5ldEJTRDogcmIuaCx2IDEuMTMgMjAwOS8wOC8xNiAxMDo1NzowMSB5YW10IEV4cAogICovCi0jaWZuZGVmIEFSQ0hJVkVfUkJfSF8KLSNkZWZpbmUJQVJDSElWRV9SQl9IXworCisjaWZuZGVmIEFSQ0hJVkVfUkJfSF9JTkNMVURFRAorI2RlZmluZQlBUkNISVZFX1JCX0hfSU5DTFVERUQKIAogc3RydWN0IGFyY2hpdmVfcmJfbm9kZSB7CiAJc3RydWN0IGFyY2hpdmVfcmJfbm9kZSAqcmJfbm9kZXNbMl07CkBAIC00OCwxMiArNDksMjQgQEAKICAgICBfX2FyY2hpdmVfcmJfdHJlZV9pdGVyYXRlKChUKSwgTlVMTCwgQVJDSElWRV9SQl9ESVJfTEVGVCkKICNkZWZpbmUgQVJDSElWRV9SQl9UUkVFX01BWChUKSBcCiAgICAgX19hcmNoaXZlX3JiX3RyZWVfaXRlcmF0ZSgoVCksIE5VTEwsIEFSQ0hJVkVfUkJfRElSX1JJR0hUKQorI2RlZmluZSBBUkNISVZFX1JCX1RSRUVfTkVYVChULCBOKSBcCisgICAgX19hcmNoaXZlX3JiX3RyZWVfaXRlcmF0ZSgoVCksIChOKSwgQVJDSElWRV9SQl9ESVJfUklHSFQpCisjZGVmaW5lIEFSQ0hJVkVfUkJfVFJFRV9QUkVWKFQsIE4pIFwKKyAgICBfX2FyY2hpdmVfcmJfdHJlZV9pdGVyYXRlKChUKSwgKE4pLCBBUkNISVZFX1JCX0RJUl9MRUZUKQogI2RlZmluZSBBUkNISVZFX1JCX1RSRUVfRk9SRUFDSChOLCBUKSBcCiAgICAgZm9yICgoTikgPSBBUkNISVZFX1JCX1RSRUVfTUlOKFQpOyAoTik7IFwKLQkoTikgPSBfX2FyY2hpdmVfcmJfdHJlZV9pdGVyYXRlKChUKSwgKE4pLCBBUkNISVZFX1JCX0RJUl9SSUdIVCkpCisJKE4pID0gQVJDSElWRV9SQl9UUkVFX05FWFQoKFQpLCAoTikpKQogI2RlZmluZSBBUkNISVZFX1JCX1RSRUVfRk9SRUFDSF9SRVZFUlNFKE4sIFQpIFwKICAgICBmb3IgKChOKSA9IEFSQ0hJVkVfUkJfVFJFRV9NQVgoVCk7IChOKTsgXAotCShOKSA9IF9fYXJjaGl2ZV9yYl90cmVlX2l0ZXJhdGUoKFQpLCAoTiksIEFSQ0hJVkVfUkJfRElSX0xFRlQpKQorCShOKSA9IEFSQ0hJVkVfUkJfVFJFRV9QUkVWKChUKSwgKE4pKSkKKyNkZWZpbmUgQVJDSElWRV9SQl9UUkVFX0ZPUkVBQ0hfU0FGRShOLCBULCBTKSBcCisgICAgZm9yICgoTikgPSBBUkNISVZFX1JCX1RSRUVfTUlOKFQpOyBcCisJKE4pICYmICgoUykgPSBBUkNISVZFX1JCX1RSRUVfTkVYVCgoVCksIChOKSksIDEpOyBcCisJKE4pID0gKFMpKQorI2RlZmluZSBBUkNISVZFX1JCX1RSRUVfRk9SRUFDSF9SRVZFUlNFX1NBRkUoTiwgVCwgUykgXAorICAgIGZvciAoKE4pID0gQVJDSElWRV9SQl9UUkVFX01BWChUKTsgXAorICAgICAgICAoTikgJiYgKChTKSA9IEFSQ0hJVkVfUkJfVFJFRV9QUkVWKChUKSwgKE4pKSwgMSk7IFwKKyAgICAgICAgKE4pID0gKFMpKQogCiAvKgogICogYXJjaGl2ZV9yYnRvX2NvbXBhcmVfbm9kZXNfZm46CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkLjMKaW5kZXggZDM3ZTczMi4uY2JlZGQwYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZC4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWQuMwpAQCAtMTU1LDcgKzE1NSw3IEBACiAuRm4gYXJjaGl2ZV9yZWFkX2ZyZWUKIHRvIHJlbGVhc2UgYWxsIHJlc291cmNlcywgaW5jbHVkaW5nIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBsaWJyYXJ5LgogLlwiCi0uU2ggRVhBTVBMRQorLlNoIEVYQU1QTEVTCiBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGVzIGJhc2ljIHVzYWdlIG9mIHRoZSBsaWJyYXJ5LgogSW4gdGhpcyBleGFtcGxlLAogdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgc2ltcGx5IHdyYXBwZXJzIGFyb3VuZCB0aGUgc3RhbmRhcmQKQEAgLTIxNywxNiArMjE3LDE2IEBACiAuXCIgLlNoIEVSUk9SUwogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCi0uWHIgYXJjaGl2ZV9yZWFkX25ldyAzICwKIC5YciBhcmNoaXZlX3JlYWRfZGF0YSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZXh0cmFjdCAzICwKIC5YciBhcmNoaXZlX3JlYWRfZmlsdGVyIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9mb3JtYXQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2hlYWRlciAzICwKKy5YciBhcmNoaXZlX3JlYWRfbmV3IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9vcGVuIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKIC5YciBhcmNoaXZlX3V0aWwgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciB0YXIgNQogLlNoIEhJU1RPUlkKIFRoZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZC5jCmluZGV4IDBlNTZlNzYuLjRhOTMzYjIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWQuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKIAl9CiAJYS0+Y2xpZW50LmRhdGFzZXQgPSAoc3RydWN0IGFyY2hpdmVfcmVhZF9kYXRhX25vZGUgKilwOwotCWZvciAoaSA9IGEtPmNsaWVudC5ub2RlcyAtIDE7IGkgPiBpaW5kZXggJiYgaSA+IDA7IGktLSkgeworCWZvciAoaSA9IGEtPmNsaWVudC5ub2RlcyAtIDE7IGkgPiBpaW5kZXg7IGktLSkgewogCQlhLT5jbGllbnQuZGF0YXNldFtpXS5kYXRhID0gYS0+Y2xpZW50LmRhdGFzZXRbaS0xXS5kYXRhOwogCQlhLT5jbGllbnQuZGF0YXNldFtpXS5iZWdpbl9wb3NpdGlvbiA9IC0xOwogCQlhLT5jbGllbnQuZGF0YXNldFtpXS50b3RhbF9zaXplID0gLTE7CkBAIC02MTEsNiArNjExLDE1IEBACiAJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIH0KIAoraW50CitfX2FyY2hpdmVfcmVhZF9oZWFkZXIoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5KQoreworCWlmIChhLT5maWx0ZXItPnJlYWRfaGVhZGVyKQorCQlyZXR1cm4gYS0+ZmlsdGVyLT5yZWFkX2hlYWRlcihhLT5maWx0ZXIsIGVudHJ5KTsKKwllbHNlCisJCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKIC8qCiAgKiBSZWFkIGhlYWRlciBvZiBuZXh0IGVudHJ5LgogICovCkBAIC04MzUsNyArODQ0LDggQEAKIAlkZXN0ID0gKGNoYXIgKilidWZmOwogCiAJd2hpbGUgKHMgPiAwKSB7Ci0JCWlmIChhLT5yZWFkX2RhdGFfcmVtYWluaW5nID09IDApIHsKKwkJaWYgKGEtPnJlYWRfZGF0YV9vZmZzZXQgPT0gYS0+cmVhZF9kYXRhX291dHB1dF9vZmZzZXQgJiYKKwkJICAgIGEtPnJlYWRfZGF0YV9yZW1haW5pbmcgPT0gMCkgewogCQkJcmVhZF9idWYgPSBhLT5yZWFkX2RhdGFfYmxvY2s7CiAJCQlhLT5yZWFkX2RhdGFfaXNfcG9zaXhfcmVhZCA9IDE7CiAJCQlhLT5yZWFkX2RhdGFfcmVxdWVzdGVkID0gczsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfYWRkX3Bhc3NwaHJhc2UuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfYWRkX3Bhc3NwaHJhc2UuMwppbmRleCA4YjI0MmVhLi5jYTYwZDRmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2FkZF9wYXNzcGhyYXNlLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZS4zCkBAIC01OSwxNiArNTksMTYgQEAKIHdpbGwgYmUgcmV0dXJuZWQuCiBPdGhlcndpc2UsCiAuQ20gQVJDSElWRV9PSwotd2lsbCBiZSByZXR1cm5lZC4gCit3aWxsIGJlIHJldHVybmVkLgogLkl0IEZuIGFyY2hpdmVfcmVhZF9zZXRfcGFzc3BocmFzZV9jYWxsYmFjawotUmVnaXN0ZXIgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgdG8gZ2V0IGEgcGFzc3BocmFzZSAKLWZvciBkZWNycHRpb24gYWZ0ZXIgdHJ5aW5nIGFsbCBwYXNzcGhyYXNlcyByZWdpc3RlcmVkIGJ5IHRoZQorUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCB0byBnZXQgYSBwYXNzcGhyYXNlIAorZm9yIGRlY3J5cHRpb24gYWZ0ZXIgdHJ5aW5nIGFsbCB0aGUgcGFzc3BocmFzZXMgcmVnaXN0ZXJlZCBieSB0aGUKIC5GbiBhcmNoaXZlX3JlYWRfYWRkX3Bhc3NwaHJhc2UKIGZ1bmN0aW9uIGZhaWxlZC4KIC5FbAogLlwiIC5TaCBFUlJPUlMKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKLS5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMworLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGF0YS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kYXRhLjMKaW5kZXggYzFiYzE1ZC4uNzhjMGM5MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kYXRhLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kYXRhLjMKQEAgLTI4LDcgKzI4LDcgQEAKIC5EdCBBUkNISVZFX1JFQURfREFUQSAzCiAuT3MKIC5TaCBOQU1FCi0uTm0gYXJjaGl2ZV9yZWFkX2RhdGEKKy5ObSBhcmNoaXZlX3JlYWRfZGF0YSAsCiAuTm0gYXJjaGl2ZV9yZWFkX2RhdGFfYmxvY2sgLAogLk5tIGFyY2hpdmVfcmVhZF9kYXRhX3NraXAgLAogLk5tIGFyY2hpdmVfcmVhZF9kYXRhX2ludG9fZmQKQEAgLTExOCw3ICsxMTgsNiBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2V4dHJhY3QgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2ZpbHRlciAzICwKQEAgLTEyNyw0ICsxMjYsNSBAQAogLlhyIGFyY2hpdmVfcmVhZF9vcGVuIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKIC5YciBhcmNoaXZlX3V0aWwgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2suMwppbmRleCAwMjdmNjNjLi44MmQ2YTVjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2suMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2suMwpAQCAtOTksOSArOTksMTAgQEAKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCAiaW5kZW50IgogLkl0IENtIEFSQ0hJVkVfUkVBRERJU0tfSE9OT1JfTk9EVU1QCiBTa2lwIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHRoZSBub2R1bXAgZmlsZSBhdHRyaWJ1dGUgKGZpbGUgZmxhZykgc2V0LgotQnkgZGVmYXVsdCwgdGhlIG5vZHVtcCBmaWxlIGF0cnJpYnV0ZSBpcyBpZ25vcmVkLgorQnkgZGVmYXVsdCwgdGhlIG5vZHVtcCBmaWxlIGF0dHJpYnV0ZSBpcyBpZ25vcmVkLgogLkl0IENtIEFSQ0hJVkVfUkVBRERJU0tfTUFDX0NPUFlGSUxFCi1NYWMgT1MgWCBzcGVjaWZpYy4gUmVhZCBtZXRhZGF0YSAoQUNMcyBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcykgd2l0aAorTWFjIE9TIFggc3BlY2lmaWMuCitSZWFkIG1ldGFkYXRhIChBQ0xzIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzKSB3aXRoCiAuWHIgY29weWZpbGUgMyAuCiBCeSBkZWZhdWx0LCBtZXRhZGF0YSBpcyByZWFkIHVzaW5nCiAuWHIgY29weWZpbGUgMyAuCkBAIC0xMjAsNyArMTIxLDcgQEAKIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGZpbGUgYXR0cmlidXRlcy4KIC5JdCBDbSBBUkNISVZFX1JFQURESVNLX05PX1RSQVZFUlNFX01PVU5UUwogRG8gbm90IHRyYXZlcnNlIG1vdW50IHBvaW50cy4KLUJ5IGRlZmF1dCwgbW9pbnQgcG9pbnRzIGFyZSB0cmF2ZXJzZWQuCitCeSBkZWZhdWx0LCBtb3VudCBwb2ludHMgYXJlIHRyYXZlcnNlZC4KIC5JdCBDbSBBUkNISVZFX1JFQURESVNLX05PX1hBVFRSCiBEbyBub3QgcmVhZCBleHRlbmRlZCBmaWxlIGF0dHJpYnV0ZXMgKHhhdHRycykuCiBCeSBkZWZhdWx0LCBleHRlbmRlZCBmaWxlIGF0dHJpYnV0ZXMgYXJlIHJlYWQgZnJvbSBkaXNrLgpAQCAtMjE2LDcgKzIxNyw3IEBACiAoRm9yIGV4YW1wbGUsIGRpcmVjdG9yeSB0cmF2ZXJzYWwgbGlicmFyaWVzIG9mdGVuIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbi4pCiAuUHAKIFdoZXJlIG5lY2Vzc2FyeSwgdXNlciBhbmQgZ3JvdXAgaWRzIGFyZSBjb252ZXJ0ZWQgdG8gdXNlciBhbmQgZ3JvdXAgbmFtZXMKLXVzaW5nIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBsb29rdXAgZnVuY3Rpb25zIGFib3ZlLgordXNpbmcgdGhlIGN1cnJlbnRseS1yZWdpc3RlcmVkIGxvb2t1cCBmdW5jdGlvbnMgYWJvdmUuCiBUaGlzIGFmZmVjdHMgdGhlIGZpbGUgb3duZXJzaGlwIGZpZWxkcyBhbmQgQUNMIHZhbHVlcyBpbiB0aGUKIC5UbiBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeQogb2JqZWN0LgpAQCAtMjI2LDcgKzIyNyw3IEBACiBvYmplY3QgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgbGlicmFyeSBjYW4gYmUgZm91bmQgaW4gdGhlCiAuWHIgbGliYXJjaGl2ZSAzCiBvdmVydmlldy4KLS5TaCBFWEFNUExFCisuU2ggRVhBTVBMRVMKIFRoZSBmb2xsb3dpbmcgaWxsdXN0cmF0ZXMgYmFzaWMgdXNhZ2Ugb2YgdGhlIGxpYnJhcnkgYnkKIHNob3dpbmcgaG93IHRvIHVzZSBpdCB0byBjb3B5IGFuIGl0ZW0gb24gZGlzayBpbnRvIGFuIGFyY2hpdmUuCiAuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKQEAgLTI5MSwxMSArMjkyLDExIEBACiBmdW5jdGlvbnMuCiAuXCIKIC5TaCBTRUUgQUxTTworLlhyIHRhciAxICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV91dGlsIDMgLAogLlhyIGFyY2hpdmVfd3JpdGUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9kaXNrIDMgLAotLlhyIHRhciAxICwKIC5YciBsaWJhcmNoaXZlIDMKIC5TaCBISVNUT1JZCiBUaGUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19lbnRyeV9mcm9tX2ZpbGUuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19lbnRyeV9mcm9tX2ZpbGUuYwppbmRleCAxNzg2Y2ZmLi4yYThjZWM4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfZW50cnlfZnJvbV9maWxlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX2VudHJ5X2Zyb21fZmlsZS5jCkBAIC0xNjMsNiArMTYzLDkgQEAKIAlpbnQgaW5pdGlhbF9mZCA9IGZkOwogCWludCByLCByMTsKIAorCWFyY2hpdmVfY2hlY2tfbWFnaWMoX2EsIEFSQ0hJVkVfUkVBRF9ESVNLX01BR0lDLCBBUkNISVZFX1NUQVRFX0FOWSwKKwkJImFyY2hpdmVfcmVhZF9kaXNrX2VudHJ5X2Zyb21fZmlsZSIpOworCiAJYXJjaGl2ZV9jbGVhcl9lcnJvcihfYSk7CiAJcGF0aCA9IGFyY2hpdmVfZW50cnlfc291cmNlcGF0aChlbnRyeSk7CiAJaWYgKHBhdGggPT0gTlVMTCkKQEAgLTE4OCw3ICsxOTEsNyBAQAogCQkJCX0KIAkJCX0gZWxzZQogI2VuZGlmCi0JCQlpZiAoc3RhdChwYXRoLCAmcykgIT0gMCkgeworCQkJaWYgKGxhX3N0YXQocGF0aCwgJnMpICE9IDApIHsKIAkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCiAJCQkJICAgICJDYW4ndCBzdGF0ICVzIiwgcGF0aCk7CiAJCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CkBAIC0yNDYsMTEgKzI0OSwxMSBAQAogCiAjaWYgZGVmaW5lZChIQVZFX1JFQURMSU5LKSB8fCBkZWZpbmVkKEhBVkVfUkVBRExJTktBVCkKIAlpZiAoU19JU0xOSyhzdC0+c3RfbW9kZSkpIHsKLQkJc2l6ZV90IGxpbmtidWZmZXJfbGVuID0gc3QtPnN0X3NpemUgKyAxOworCQlzaXplX3QgbGlua2J1ZmZlcl9sZW4gPSBzdC0+c3Rfc2l6ZTsKIAkJY2hhciAqbGlua2J1ZmZlcjsKIAkJaW50IGxua2xlbjsKIAotCQlsaW5rYnVmZmVyID0gbWFsbG9jKGxpbmtidWZmZXJfbGVuKTsKKwkJbGlua2J1ZmZlciA9IG1hbGxvYyhsaW5rYnVmZmVyX2xlbiArIDEpOwogCQlpZiAobGlua2J1ZmZlciA9PSBOVUxMKSB7CiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAogCQkJICAgICJDb3VsZG4ndCByZWFkIGxpbmsgZGF0YSIpOwpAQCAtMjc3LDcgKzI4MCw3IEBACiAJCQlmcmVlKGxpbmtidWZmZXIpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJCX0KLQkJbGlua2J1ZmZlcltsbmtsZW5dID0gMDsKKwkJbGlua2J1ZmZlcltsbmtsZW5dID0gJ1wwJzsKIAkJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGluayhlbnRyeSwgbGlua2J1ZmZlcik7CiAJCWZyZWUobGlua2J1ZmZlcik7CiAJfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3Bvc2l4LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfcG9zaXguYwppbmRleCBjZGY3NTQxLi41MmZlYzdiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfcG9zaXguYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfcG9zaXguYwpAQCAtNjk0LDYgKzY5NCw3IEBACiAJc3RydWN0IHRyZWUgKnQgPSBhLT50cmVlOwogCWludCByOwogCXNzaXplX3QgYnl0ZXM7CisJaW50NjRfdCBzcGFyc2VfYnl0ZXM7CiAJc2l6ZV90IGJ1ZmZieXRlczsKIAlpbnQgZW1wdHlfc3BhcnNlX3JlZ2lvbiA9IDA7CiAKQEAgLTcyOCwyNyArNzI5LDIzIEBACiAJCWlmICgodC0+ZmxhZ3MgJiBuZWVkc1Jlc3RvcmVUaW1lcykgIT0gMCAmJgogCQkgICAgdC0+cmVzdG9yZV90aW1lLm5vYXRpbWUgPT0gMCkKIAkJCWZsYWdzIHw9IE9fTk9BVElNRTsKLQkJZG8gewogI2VuZGlmCi0JCQl0LT5lbnRyeV9mZCA9IG9wZW5fb25fY3VycmVudF9kaXIodCwKLQkJCSAgICB0cmVlX2N1cnJlbnRfYWNjZXNzX3BhdGgodCksIGZsYWdzKTsKLQkJCV9fYXJjaGl2ZV9lbnN1cmVfY2xvZXhlY19mbGFnKHQtPmVudHJ5X2ZkKTsKKwkJdC0+ZW50cnlfZmQgPSBvcGVuX29uX2N1cnJlbnRfZGlyKHQsCisJCSAgICB0cmVlX2N1cnJlbnRfYWNjZXNzX3BhdGgodCksIGZsYWdzKTsKKwkJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcodC0+ZW50cnlfZmQpOwogI2lmIGRlZmluZWQoT19OT0FUSU1FKQotCQkJLyoKLQkJCSAqIFdoZW4gd2UgZGlkIG9wZW4gdGhlIGZpbGUgd2l0aCBPX05PQVRJTUUgZmxhZywKLQkJCSAqIGlmIHN1Y2Nlc3NmdWwsIHNldCAxIHRvIHQtPnJlc3RvcmVfdGltZS5ub2F0aW1lCi0JCQkgKiBub3QgdG8gcmVzdG9yZSBhbiBhdGltZSBvZiB0aGUgZmlsZSBsYXRlci4KLQkJCSAqIGlmIGZhaWxlZCBieSBFUEVSTSwgcmV0cnkgaXQgd2l0aG91dCBPX05PQVRJTUUgZmxhZy4KLQkJCSAqLwotCQkJaWYgKGZsYWdzICYgT19OT0FUSU1FKSB7Ci0JCQkJaWYgKHQtPmVudHJ5X2ZkID49IDApCi0JCQkJCXQtPnJlc3RvcmVfdGltZS5ub2F0aW1lID0gMTsKLQkJCQllbHNlIGlmIChlcnJubyA9PSBFUEVSTSkgewotCQkJCQlmbGFncyAmPSB+T19OT0FUSU1FOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0gd2hpbGUgKDApOworCQkvKgorCQkgKiBXaGVuIHdlIGRpZCBvcGVuIHRoZSBmaWxlIHdpdGggT19OT0FUSU1FIGZsYWcsCisJCSAqIGlmIHN1Y2Nlc3NmdWwsIHNldCAxIHRvIHQtPnJlc3RvcmVfdGltZS5ub2F0aW1lCisJCSAqIG5vdCB0byByZXN0b3JlIGFuIGF0aW1lIG9mIHRoZSBmaWxlIGxhdGVyLgorCQkgKiBpZiBmYWlsZWQgYnkgRVBFUk0sIHJldHJ5IGl0IHdpdGhvdXQgT19OT0FUSU1FIGZsYWcuCisJCSAqLworCQlpZiAoZmxhZ3MgJiBPX05PQVRJTUUpIHsKKwkJCWlmICh0LT5lbnRyeV9mZCA+PSAwKQorCQkJCXQtPnJlc3RvcmVfdGltZS5ub2F0aW1lID0gMTsKKwkJCWVsc2UgaWYgKGVycm5vID09IEVQRVJNKQorCQkJCWZsYWdzICY9IH5PX05PQVRJTUU7CisJCX0KICNlbmRpZgogCQlpZiAodC0+ZW50cnlfZmQgPCAwKSB7CiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCkBAIC03OTIsOSArNzg5LDkgQEAKIAkJCWEtPmFyY2hpdmUuc3RhdGUgPSBBUkNISVZFX1NUQVRFX0ZBVEFMOwogCQkJZ290byBhYm9ydF9yZWFkX2RhdGE7CiAJCX0KLQkJYnl0ZXMgPSB0LT5jdXJyZW50X3NwYXJzZS0+b2Zmc2V0IC0gdC0+ZW50cnlfdG90YWw7Ci0JCXQtPmVudHJ5X3JlbWFpbmluZ19ieXRlcyAtPSBieXRlczsKLQkJdC0+ZW50cnlfdG90YWwgKz0gYnl0ZXM7CisJCXNwYXJzZV9ieXRlcyA9IHQtPmN1cnJlbnRfc3BhcnNlLT5vZmZzZXQgLSB0LT5lbnRyeV90b3RhbDsKKwkJdC0+ZW50cnlfcmVtYWluaW5nX2J5dGVzIC09IHNwYXJzZV9ieXRlczsKKwkJdC0+ZW50cnlfdG90YWwgKz0gc3BhcnNlX2J5dGVzOwogCX0KIAogCS8qCkBAIC04NTYsNyArODUzLDEyIEBACiAJY29uc3Qgc3RydWN0IHN0YXQgKnN0OyAvKiBpbmZvIHRvIHVzZSBmb3IgdGhpcyBlbnRyeSAqLwogCWNvbnN0IHN0cnVjdCBzdGF0ICpsc3Q7LyogbHN0YXQoKSBpbmZvcm1hdGlvbiAqLwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IGRlc2NlbmQsIHI7CisJaW50IGRlbGF5ZWQsIGRlbGF5ZWRfZXJybm8sIGRlc2NlbmQsIHI7CisJc3RydWN0IGFyY2hpdmVfc3RyaW5nIGRlbGF5ZWRfc3RyOworCisJZGVsYXllZCA9IEFSQ0hJVkVfT0s7CisJZGVsYXllZF9lcnJubyA9IDA7CisJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmZGVsYXllZF9zdHIpOwogCiAJc3QgPSBOVUxMOwogCWxzdCA9IE5VTEw7CkBAIC04ODUsMTQgKzg4NywyNiBAQAogCQljYXNlIFRSRUVfUkVHVUxBUjoKIAkJCWxzdCA9IHRyZWVfY3VycmVudF9sc3RhdCh0KTsKIAkJCWlmIChsc3QgPT0gTlVMTCkgeworCQkJICAgIGlmIChlcnJubyA9PSBFTk9FTlQgJiYgdC0+ZGVwdGggPiAwKSB7CisJCQkJZGVsYXllZCA9IEFSQ0hJVkVfV0FSTjsKKwkJCQlkZWxheWVkX2Vycm5vID0gZXJybm87CisJCQkJaWYgKGRlbGF5ZWRfc3RyLmxlbmd0aCA9PSAwKSB7CisJCQkJCWFyY2hpdmVfc3RyaW5nX3NwcmludGYoJmRlbGF5ZWRfc3RyLAorCQkJCQkgICAgIiVzIiwgdHJlZV9jdXJyZW50X3BhdGgodCkpOworCQkJCX0gZWxzZSB7CisJCQkJCWFyY2hpdmVfc3RyaW5nX3NwcmludGYoJmRlbGF5ZWRfc3RyLAorCQkJCQkgICAgIiAlcyIsIHRyZWVfY3VycmVudF9wYXRoKHQpKTsKKwkJCQl9CisJCQkgICAgfSBlbHNlIHsKIAkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCiAJCQkJICAgICIlczogQ2Fubm90IHN0YXQiLAogCQkJCSAgICB0cmVlX2N1cnJlbnRfcGF0aCh0KSk7CiAJCQkJdHJlZV9lbnRlcl9pbml0aWFsX2Rpcih0KTsKIAkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJCSAgICB9CiAJCQl9CiAJCQlicmVhazsKLQkJfQkKKwkJfQogCX0gd2hpbGUgKGxzdCA9PSBOVUxMKTsKIAogI2lmZGVmIF9fQVBQTEVfXwpAQCAtMTA4Myw2ICsxMDk3LDE3IEBACiAJciA9IGFyY2hpdmVfcmVhZF9kaXNrX2VudHJ5X2Zyb21fZmlsZSgmKGEtPmFyY2hpdmUpLCBlbnRyeSwKIAkJdC0+ZW50cnlfZmQsIHN0KTsKIAorCWlmIChyID09IEFSQ0hJVkVfT0spIHsKKwkJciA9IGRlbGF5ZWQ7CisJCWlmIChyICE9IEFSQ0hJVkVfT0spIHsKKwkJCWFyY2hpdmVfc3RyaW5nX3NwcmludGYoJmRlbGF5ZWRfc3RyLCAiOiAlcyIsCisJCQkgICAgIkZpbGUgcmVtb3ZlZCBiZWZvcmUgd2UgcmVhZCBpdCIpOworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwgZGVsYXllZF9lcnJubywKKwkJCSAgICAiJXMiLCBkZWxheWVkX3N0ci5zKTsKKwkJfQorCX0KKwlhcmNoaXZlX3N0cmluZ19mcmVlKCZkZWxheWVkX3N0cik7CisKIAlyZXR1cm4gKHIpOwogfQogCkBAIC0xMTE0LDYgKzExMzksOCBAQAogCQl0LT5lbnRyeV9mZCA9IC0xOwogCX0KIAorCWFyY2hpdmVfZW50cnlfY2xlYXIoZW50cnkpOworCiAJZm9yICg7OykgewogCQlyID0gbmV4dF9lbnRyeShhLCB0LCBlbnRyeSk7CiAJCWlmICh0LT5lbnRyeV9mZCA+PSAwKSB7CkBAIC0xMjY2LDEwICsxMjkzLDIzIEBACiAJaWYgKHQtPnZpc2l0X3R5cGUgIT0gVFJFRV9SRUdVTEFSIHx8ICF0LT5kZXNjZW5kKQogCQlyZXR1cm4gKEFSQ0hJVkVfT0spOwogCisJLyoKKwkgKiBXZSBtdXN0IG5vdCB0cmVhdCB0aGUgaW5pdGlhbCBzcGVjaWZpZWQgcGF0aCBhcyBhIHBoeXNpY2FsIGRpciwKKwkgKiBiZWNhdXNlIGlmIHdlIGRvIHRoZW4gd2Ugd2lsbCB0cnkgYW5kIGFzY2VuZCBvdXQgb2YgaXQgYnkgb3BlbmluZworCSAqICIuLiIgd2hpY2ggaXMgKGEpIHdyb25nIGFuZCAoYikgY2F1c2VzIHNwdXJpb3VzIHBlcm1pc3Npb25zIGVycm9ycworCSAqIGlmICIuLiIgaXMgbm90IHJlYWRhYmxlIGJ5IHVzLiBJbnN0ZWFkLCB0cmVhdCBpdCBhcyBpZiBpdCB3ZXJlIGEKKwkgKiBzeW1saW5rLiAoVGhpcyB1c2VzIGFuIGV4dHJhIGZkLCBidXQgaXQgY2FuIG9ubHkgaGFwcGVuIG9uY2UgYXQgdGhlCisJICogdG9wIGxldmVsIG9mIGEgdHJhdmVyc2UuKSBCdXQgd2UgY2FuJ3QgbmVjZXNzYXJpbHkgYXNzdW1lIHQtPnN0IGlzCisJICogdmFsaWQgaGVyZSAodGhvdWdoIHQtPmxzdCBpcyksIHdoaWNoIGNvbXBsaWNhdGVzIHRoZSBsb2dpYyBhCisJICogbGl0dGxlLgorCSAqLwogCWlmICh0cmVlX2N1cnJlbnRfaXNfcGh5c2ljYWxfZGlyKHQpKSB7CiAJCXRyZWVfcHVzaCh0LCB0LT5iYXNlbmFtZSwgdC0+Y3VycmVudF9maWxlc3lzdGVtX2lkLAogCQkgICAgdC0+bHN0LnN0X2RldiwgdC0+bHN0LnN0X2lubywgJnQtPnJlc3RvcmVfdGltZSk7Ci0JCXQtPnN0YWNrLT5mbGFncyB8PSBpc0RpcjsKKwkJaWYgKHQtPnN0YWNrLT5wYXJlbnQtPnBhcmVudCAhPSBOVUxMKQorCQkJdC0+c3RhY2stPmZsYWdzIHw9IGlzRGlyOworCQllbHNlCisJCQl0LT5zdGFjay0+ZmxhZ3MgfD0gaXNEaXJMaW5rOwogCX0gZWxzZSBpZiAodHJlZV9jdXJyZW50X2lzX2Rpcih0KSkgewogCQl0cmVlX3B1c2godCwgdC0+YmFzZW5hbWUsIHQtPmN1cnJlbnRfZmlsZXN5c3RlbV9pZCwKIAkJICAgIHQtPnN0LnN0X2RldiwgdC0+c3Quc3RfaW5vLCAmdC0+cmVzdG9yZV90aW1lKTsKQEAgLTIxMjIsNiArMjE2MiwxNyBAQAogc3RhdGljIHN0cnVjdCB0cmVlICoKIHRyZWVfcmVvcGVuKHN0cnVjdCB0cmVlICp0LCBjb25zdCBjaGFyICpwYXRoLCBpbnQgcmVzdG9yZV90aW1lKQogeworI2lmIGRlZmluZWQoT19QQVRIKQorCS8qIExpbnV4ICovCisJY29uc3QgaW50IG9fZmxhZyA9IE9fUEFUSDsKKyNlbGlmIGRlZmluZWQoT19TRUFSQ0gpCisJLyogU3VuT1MgKi8KKwljb25zdCBpbnQgb19mbGFnID0gT19TRUFSQ0g7CisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKE9fRVhFQykKKwkvKiBGcmVlQlNEICovCisJY29uc3QgaW50IG9fZmxhZyA9IE9fRVhFQzsKKyNlbmRpZgorCiAJdC0+ZmxhZ3MgPSAocmVzdG9yZV90aW1lICE9IDApP25lZWRzUmVzdG9yZVRpbWVzOjA7CiAJdC0+ZmxhZ3MgfD0gb25Jbml0aWFsRGlyOwogCXQtPnZpc2l0X3R5cGUgPSAwOwpAQCAtMjE0Myw2ICsyMTk0LDE2IEBACiAJdC0+c3RhY2stPmZsYWdzID0gbmVlZHNGaXJzdFZpc2l0OwogCXQtPm1heE9wZW5Db3VudCA9IHQtPm9wZW5Db3VudCA9IDE7CiAJdC0+aW5pdGlhbF9kaXJfZmQgPSBvcGVuKCIuIiwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOworI2lmIGRlZmluZWQoT19QQVRIKSB8fCBkZWZpbmVkKE9fU0VBUkNIKSB8fCBcCisgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoT19FWEVDKSkKKwkvKgorCSAqIE1vc3QgbGlrZWx5IHJlYXNvbiB0byBmYWlsIG9wZW5pbmcgIi4iIGlzIHRoYXQgaXQncyBub3QgcmVhZGFibGUsCisJICogc28gdHJ5IGFnYWluIGZvciBleGVjdXRlLiBUaGUgY29uc2VxdWVuY2VzIG9mIG5vdCBvcGVuaW5nIHRoaXMgYXJlCisJICogdW5oZWxwZnVsIGFuZCB1bm5lY2Vzc2FyeSBlcnJvcnMgbGF0ZXIuCisJICovCisJaWYgKHQtPmluaXRpYWxfZGlyX2ZkIDwgMCkKKwkJdC0+aW5pdGlhbF9kaXJfZmQgPSBvcGVuKCIuIiwgb19mbGFnIHwgT19DTE9FWEVDKTsKKyNlbmRpZgogCV9fYXJjaGl2ZV9lbnN1cmVfY2xvZXhlY19mbGFnKHQtPmluaXRpYWxfZGlyX2ZkKTsKIAl0LT53b3JraW5nX2Rpcl9mZCA9IHRyZWVfZHVwKHQtPmluaXRpYWxfZGlyX2ZkKTsKIAlyZXR1cm4gKHQpOwpAQCAtMjQ1MCw3ICsyNTExLDcgQEAKICNlbHNlCiAJCWlmICh0cmVlX2VudGVyX3dvcmtpbmdfZGlyKHQpICE9IDApCiAJCQlyZXR1cm4gTlVMTDsKLQkJaWYgKHN0YXQodHJlZV9jdXJyZW50X2FjY2Vzc19wYXRoKHQpLCAmdC0+c3QpICE9IDApCisJCWlmIChsYV9zdGF0KHRyZWVfY3VycmVudF9hY2Nlc3NfcGF0aCh0KSwgJnQtPnN0KSAhPSAwKQogI2VuZGlmCiAJCQlyZXR1cm4gTlVMTDsKIAkJdC0+ZmxhZ3MgfD0gaGFzU3RhdDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfcHJpdmF0ZS5oCmluZGV4IGYwM2EwYTkuLmJjOGFiYzEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19wcml2YXRlLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3ByaXZhdGUuaApAQCAtMjYsMTMgKzI2LDEzIEBACiAgKiAkRnJlZUJTRDogaGVhZC9saWIvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza19wcml2YXRlLmggMjAxMTA1IDIwMDktMTItMjggMDM6MjA6NTRaIGtpZW50emxlICQKICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfUkVBRF9ESVNLX1BSSVZBVEVfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1JFQURfRElTS19QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9SRUFEX0RJU0tfUFJJVkFURV9IX0lOQ0xVREVECi0jZGVmaW5lIEFSQ0hJVkVfUkVBRF9ESVNLX1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSAiYXJjaGl2ZV9wbGF0Zm9ybV9hY2wuaCIKIAogc3RydWN0IHRyZWU7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfd2luZG93cy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9kaXNrX3dpbmRvd3MuYwppbmRleCBkODIwNDhkLi5mZGQzNzZmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Rpc2tfd2luZG93cy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZGlza193aW5kb3dzLmMKQEAgLTI5OSw4ICsyOTksMTU1IEBACiAJCSAgICBzdHJ1Y3QgcmVzdG9yZV90aW1lICopOwogc3RhdGljIGludAlzZXR1cF9zcGFyc2VfZnJvbV9kaXNrKHN0cnVjdCBhcmNoaXZlX3JlYWRfZGlzayAqLAogCQkgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKiwgSEFORExFKTsKK3N0YXRpYyBpbnQJbGFfbGlua25hbWVfZnJvbV9oYW5kbGUoSEFORExFLCB3Y2hhcl90ICoqLCBpbnQgKik7CitzdGF0aWMgaW50CWxhX2xpbmtuYW1lX2Zyb21fcGF0aHcoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQgKik7CitzdGF0aWMgdm9pZAllbnRyeV9zeW1saW5rX2Zyb21fcGF0aHcoc3RydWN0IGFyY2hpdmVfZW50cnkgKiwKKwkJICAgIGNvbnN0IHdjaGFyX3QgKnBhdGgpOwogCit0eXBlZGVmIHN0cnVjdCBfUkVQQVJTRV9EQVRBX0JVRkZFUiB7CisJVUxPTkcJUmVwYXJzZVRhZzsKKwlVU0hPUlQgUmVwYXJzZURhdGFMZW5ndGg7CisJVVNIT1JUCVJlc2VydmVkOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCVVTSE9SVAlTdWJzdGl0dXRlTmFtZU9mZnNldDsKKwkJCVVTSE9SVAlTdWJzdGl0dXRlTmFtZUxlbmd0aDsKKwkJCVVTSE9SVAlQcmludE5hbWVPZmZzZXQ7CisJCQlVU0hPUlQJUHJpbnROYW1lTGVuZ3RoOworCQkJVUxPTkcJRmxhZ3M7CisJCQlXQ0hBUglQYXRoQnVmZmVyWzFdOworCQl9IFN5bWJvbGljTGlua1JlcGFyc2VCdWZmZXI7CisJCXN0cnVjdCB7CisJCQlVU0hPUlQJU3Vic3RpdHV0ZU5hbWVPZmZzZXQ7CisJCQlVU0hPUlQJU3Vic3RpdHV0ZU5hbWVMZW5ndGg7CisJCQlVU0hPUlQJUHJpbnROYW1lT2Zmc2V0OworCQkJVVNIT1JUCVByaW50TmFtZUxlbmd0aDsKKwkJCVdDSEFSCVBhdGhCdWZmZXJbMV07CisJCX0gTW91bnRQb2ludFJlcGFyc2VCdWZmZXI7CisJCXN0cnVjdCB7CisJCQlVQ0hBUglEYXRhQnVmZmVyWzFdOworCQl9IEdlbmVyaWNSZXBhcnNlQnVmZmVyOworCX0gRFVNTVlVTklPTk5BTUU7Cit9IFJFUEFSU0VfREFUQV9CVUZGRVIsICpQUkVQQVJTRV9EQVRBX0JVRkZFUjsKIAorLyoKKyAqIFJlYWRzIHRoZSB0YXJnZXQgb2YgYSBzeW1ib2xpYyBsaW5rCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUKKyAqIG91dGJ1ZiBpcyBhbGxvY2F0ZWQgaW4gdGhlIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQKK2xhX2xpbmtuYW1lX2Zyb21faGFuZGxlKEhBTkRMRSBoLCB3Y2hhcl90ICoqbGlua25hbWUsIGludCAqbGlua3R5cGUpCit7CisJRFdPUkQgaW5ieXRlczsKKwlSRVBBUlNFX0RBVEFfQlVGRkVSICpidWY7CisJQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gc3Q7CisJc2l6ZV90IGxlbjsKKwlCT09MIHJldDsKKwlCWVRFICppbmRhdGE7CisJd2NoYXJfdCAqdGJ1ZjsKKworCXJldCA9IEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGgsICZzdCk7CisJaWYgKHJldCA9PSAwIHx8CisJICAgIChzdC5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVQQVJTRV9QT0lOVCkgPT0gMCkgeworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpbmRhdGEgPSBtYWxsb2MoTUFYSU1VTV9SRVBBUlNFX0RBVEFfQlVGRkVSX1NJWkUpOworCXJldCA9IERldmljZUlvQ29udHJvbChoLCBGU0NUTF9HRVRfUkVQQVJTRV9QT0lOVCwgTlVMTCwgMCwgaW5kYXRhLAorCSAgICAxMDI0LCAmaW5ieXRlcywgTlVMTCk7CisJaWYgKHJldCA9PSAwKSB7CisJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCWZyZWUoaW5kYXRhKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJYnVmID0gKFJFUEFSU0VfREFUQV9CVUZGRVIgKikgaW5kYXRhOworCWlmIChidWYtPlJlcGFyc2VUYWcgIT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykgeworCQlmcmVlKGluZGF0YSk7CisJCS8qIEZpbGUgaXMgbm90IGEgc3ltYm9saWMgbGluayAqLworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJbGVuID0gYnVmLT5TeW1ib2xpY0xpbmtSZXBhcnNlQnVmZmVyLlN1YnN0aXR1dGVOYW1lTGVuZ3RoOworCWlmIChsZW4gPD0gMCkgeworCQlmcmVlKGluZGF0YSk7CisJCXJldHVybiAoLTEpOworCX0KKworCXRidWYgPSBtYWxsb2MobGVuICsgMSAqIHNpemVvZih3Y2hhcl90KSk7CisJaWYgKHRidWYgPT0gTlVMTCkgeworCQlmcmVlKGluZGF0YSk7CisJCXJldHVybiAoLTEpOworCX0KKworCW1lbWNweSh0YnVmLCAmKChCWVRFICopYnVmLT5TeW1ib2xpY0xpbmtSZXBhcnNlQnVmZmVyLlBhdGhCdWZmZXIpCisJICAgIFtidWYtPlN5bWJvbGljTGlua1JlcGFyc2VCdWZmZXIuU3Vic3RpdHV0ZU5hbWVPZmZzZXRdLCBsZW4pOworCWZyZWUoaW5kYXRhKTsKKworCXRidWZbbGVuIC8gc2l6ZW9mKHdjaGFyX3QpXSA9IEwnXDAnOworCisJKmxpbmtuYW1lID0gdGJ1ZjsKKworCS8qCisJICogVHJhbnNsYXRlIGJhY2tzbGFzaGVzIHRvIHNsYXNoZXMgZm9yIGxpYmFyY2hpdmUgaW50ZXJuYWwgdXNlCisJICovCisJd2hpbGUoKnRidWYgIT0gTCdcMCcpIHsKKwkJaWYgKCp0YnVmID09IEwnXFwnKQorCQkJKnRidWYgPSBMJy8nOworCQl0YnVmKys7CisJfQorCisJaWYgKChzdC5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSA9PSAwKQorCQkqbGlua3R5cGUgPSBBRV9TWU1MSU5LX1RZUEVfRklMRTsKKwllbHNlCisJCSpsaW5rdHlwZSA9IEFFX1NZTUxJTktfVFlQRV9ESVJFQ1RPUlk7CisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogUmV0dXJucyBBRV9TWU1MSU5LX1RZUEVfRklMRSwgQUVfU1lNTElOS19UWVBFX0RJUkVDVE9SWSBvciAtMSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50CitsYV9saW5rbmFtZV9mcm9tX3BhdGh3KGNvbnN0IHdjaGFyX3QgKnBhdGgsIHdjaGFyX3QgKipvdXRidWYsIGludCAqbGlua3R5cGUpCit7CisJSEFORExFIGg7CisJY29uc3QgRFdPUkQgZmxhZyA9IEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTIHwKKwkgICAgRklMRV9GTEFHX09QRU5fUkVQQVJTRV9QT0lOVDsKKwlpbnQgcmV0OworCisJaCA9IENyZWF0ZUZpbGVXKHBhdGgsIDAsIEZJTEVfU0hBUkVfUkVBRCwgTlVMTCwgT1BFTl9FWElTVElORywgZmxhZywKKwkgICAgTlVMTCk7CisJaWYgKGggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0ID0gbGFfbGlua25hbWVfZnJvbV9oYW5kbGUoaCwgb3V0YnVmLCBsaW5rdHlwZSk7CisJQ2xvc2VIYW5kbGUoaCk7CisKKwlyZXR1cm4gKHJldCk7Cit9CisKK3N0YXRpYyB2b2lkCitlbnRyeV9zeW1saW5rX2Zyb21fcGF0aHcoc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LCBjb25zdCB3Y2hhcl90ICpwYXRoKQoreworCXdjaGFyX3QgKmxpbmtuYW1lID0gTlVMTDsKKwlpbnQgcmV0LCBsaW5rdHlwZTsKKworCXJldCA9IGxhX2xpbmtuYW1lX2Zyb21fcGF0aHcocGF0aCwgJmxpbmtuYW1lLCAmbGlua3R5cGUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuOworCWlmIChsaW5rdHlwZSA+PSAwKSB7CisJCWFyY2hpdmVfZW50cnlfY29weV9zeW1saW5rX3coZW50cnksIGxpbmtuYW1lKTsKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGlua190eXBlKGVudHJ5LCBsaW5rdHlwZSk7CisJfQorCWZyZWUobGlua25hbWUpOworCisJcmV0dXJuOworfQogCiBzdGF0aWMgc3RydWN0IGFyY2hpdmVfdnRhYmxlICoKIGFyY2hpdmVfcmVhZF9kaXNrX3Z0YWJsZSh2b2lkKQpAQCAtOTAwLDYgKzEwNDcsMTkgQEAKIAl9CiAKIAkvKgorCSAqIEZpbGUgYXR0cmlidXRlcworCSAqLworCWlmICgoYS0+ZmxhZ3MgJiBBUkNISVZFX1JFQURESVNLX05PX0ZGTEFHUykgPT0gMCkgeworCQljb25zdCBpbnQgc3VwcG9ydGVkX2F0dHJzID0KKwkJICAgIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZIHwKKwkJICAgIEZJTEVfQVRUUklCVVRFX0hJRERFTiB8CisJCSAgICBGSUxFX0FUVFJJQlVURV9TWVNURU07CisJCURXT1JEIGZpbGVfYXR0cnMgPSBzdC0+ZHdGaWxlQXR0cmlidXRlcyAmIHN1cHBvcnRlZF9hdHRyczsKKwkJaWYgKGZpbGVfYXR0cnMgIT0gMCkKKwkJCWFyY2hpdmVfZW50cnlfc2V0X2ZmbGFncyhlbnRyeSwgZmlsZV9hdHRycywgMCk7CisJfQorCisJLyoKIAkgKiBJbnZva2UgYSBtZXRhIGRhdGEgZmlsdGVyIGNhbGxiYWNrLgogCSAqLwogCWlmIChhLT5tZXRhZGF0YV9maWx0ZXJfZnVuYykgewpAQCAtOTY2LDYgKzExMjYsOCBAQAogCQl0LT5lbnRyeV9maCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogCX0KIAorCWFyY2hpdmVfZW50cnlfY2xlYXIoZW50cnkpOworCiAJd2hpbGUgKChyID0gbmV4dF9lbnRyeShhLCB0LCBlbnRyeSkpID09IEFSQ0hJVkVfUkVUUlkpCiAJCWFyY2hpdmVfZW50cnlfY2xlYXIoZW50cnkpOwogCkBAIC0xODM4LDkgKzIwMDAsMTAgQEAKIAkJbW9kZSB8PSBTX0lXVVNSIHwgU19JV0dSUCB8IFNfSVdPVEg7CiAJaWYgKChiaGZpLT5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVQQVJTRV9QT0lOVCkgJiYKIAkgICAgZmluZERhdGEgIT0gTlVMTCAmJgotCSAgICBmaW5kRGF0YS0+ZHdSZXNlcnZlZDAgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykKKwkgICAgZmluZERhdGEtPmR3UmVzZXJ2ZWQwID09IElPX1JFUEFSU0VfVEFHX1NZTUxJTkspIHsKIAkJbW9kZSB8PSBTX0lGTE5LOwotCWVsc2UgaWYgKGJoZmktPmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCWVudHJ5X3N5bWxpbmtfZnJvbV9wYXRodyhlbnRyeSwgcGF0aCk7CisJfSBlbHNlIGlmIChiaGZpLT5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQogCQltb2RlIHw9IFNfSUZESVIgfCBTX0lYVVNSIHwgU19JWEdSUCB8IFNfSVhPVEg7CiAJZWxzZSB7CiAJCWNvbnN0IHdjaGFyX3QgKnA7CkBAIC0yMTM5LDYgKzIzMDIsOCBAQAogCQlmaWxlQXR0cmlidXRlcyA9IGJoZmkuZHdGaWxlQXR0cmlidXRlczsKIAl9IGVsc2UgewogCQlhcmNoaXZlX2VudHJ5X2NvcHlfc3RhdChlbnRyeSwgc3QpOworCQlpZiAoc3QtPnN0X21vZGUgJiBTX0lGTE5LKQorCQkJZW50cnlfc3ltbGlua19mcm9tX3BhdGh3KGVudHJ5LCBwYXRoKTsKIAkJaCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogCX0KIApAQCAtMjE1MSw2ICsyMzE2LDE5IEBACiAJCWFyY2hpdmVfZW50cnlfY29weV9nbmFtZShlbnRyeSwgbmFtZSk7CiAKIAkvKgorCSAqIEZpbGUgYXR0cmlidXRlcworCSAqLworCWlmICgoYS0+ZmxhZ3MgJiBBUkNISVZFX1JFQURESVNLX05PX0ZGTEFHUykgPT0gMCkgeworCQljb25zdCBpbnQgc3VwcG9ydGVkX2F0dHJzID0KKwkJICAgIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZIHwKKwkJICAgIEZJTEVfQVRUUklCVVRFX0hJRERFTiB8CisJCSAgICBGSUxFX0FUVFJJQlVURV9TWVNURU07CisJCURXT1JEIGZpbGVfYXR0cnMgPSBmaWxlQXR0cmlidXRlcyAmIHN1cHBvcnRlZF9hdHRyczsKKwkJaWYgKGZpbGVfYXR0cnMgIT0gMCkKKwkJCWFyY2hpdmVfZW50cnlfc2V0X2ZmbGFncyhlbnRyeSwgZmlsZV9hdHRycywgMCk7CisJfQorCisJLyoKIAkgKiBDYW4gdGhpcyBmaWxlIGJlIHNwYXJzZSBmaWxlID8KIAkgKi8KIAlpZiAoYXJjaGl2ZV9lbnRyeV9maWxldHlwZShlbnRyeSkgIT0gQUVfSUZSRUcKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZXh0cmFjdC4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9leHRyYWN0LjMKaW5kZXggNmVjMGNlZC4uODU4ZjM5NyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9leHRyYWN0LjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9leHRyYWN0LjMKQEAgLTEyNiw3ICsxMjYsNiBAQAogZnVuY3Rpb25zLgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kYXRhIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9maWx0ZXIgMyAsCkBAIC0xMzQsNCArMTMzLDUgQEAKIC5YciBhcmNoaXZlX3JlYWRfb3BlbiAzICwKIC5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMyAsCiAuWHIgYXJjaGl2ZV91dGlsIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZmlsdGVyLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2ZpbHRlci4zCmluZGV4IGVmMGE3MDEuLjFiYTVmY2IgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZmlsdGVyLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9maWx0ZXIuMwpAQCAtMTQ3LDggKzE0Nyw4IEBACiBmdW5jdGlvbnMuCiAuXCIKIC5TaCBTRUUgQUxTTwotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9kYXRhIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9mb3JtYXQgMyAsCi0uWHIgYXJjaGl2ZV9yZWFkX2Zvcm1hdCAzCisuWHIgYXJjaGl2ZV9yZWFkX2Zvcm1hdCAzICwKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZm9ybWF0LjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2Zvcm1hdC4zCmluZGV4IDkxYzVkMmMuLmYzODA0Y2UgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZm9ybWF0LjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9mb3JtYXQuMwpAQCAtMTAyLDcgKzEwMiw3IEBACiAuRm4gYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3RhcgogZW5hYmxlcyBzdXBwb3J0IGZvciBhIHZhcmlldHkgb2Ygc3RhbmRhcmQgdGFyIGZvcm1hdHMsIG9sZC1zdHlsZSB0YXIsCiB1c3RhciwgcGF4IGludGVyY2hhbmdlIGZvcm1hdCwgYW5kIG1hbnkgY29tbW9uIHZhcmlhbnRzLgotLkl0IEZuIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9hbGwgCisuSXQgRm4gYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FsbAogRW5hYmxlcyBzdXBwb3J0IGZvciBhbGwgYXZhaWxhYmxlIGZvcm1hdHMgZXhjZXB0IHRoZQogLkRxIHJhdwogZm9ybWF0IChzZWUgYmVsb3cpLgpAQCAtMTI1LDcgKzEyNSw3IEBACiBhbiBlbXB0eSBmaWxlIGJhc2VkIHB1cmVseSBvbiBjb250ZW50cy4KIFNvIGVtcHR5IGZpbGVzIGFyZSB0cmVhdGVkIGJ5IGxpYmFyY2hpdmUgYXMgYSBkaXN0aW5jdAogZm9ybWF0LgotLkl0IEZuIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXcgCisuSXQgRm4gYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhdwogVGhlCiAuRHEgcmF3CiBmb3JtYXQgaGFuZGxlciBhbGxvd3MgbGliYXJjaGl2ZSB0byBiZSB1c2VkIHRvIHJlYWQgYXJiaXRyYXJ5IGRhdGEuCkBAIC0xNTMsMTEgKzE1MywxMSBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZGF0YSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZmlsdGVyIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKIC5YciBhcmNoaXZlX3V0aWwgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciB0YXIgNQogLlNoIEJVR1MKIE1hbnkgdHJhZGl0aW9uYWwgYXJjaGl2ZXIgcHJvZ3JhbXMgdHJlYXQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfZnJlZS4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9mcmVlLjMKaW5kZXggNWIyMTgyMi4uODM3MWMzYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9mcmVlLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9mcmVlLjMKQEAgLTgzLDExICs4MywxMSBAQAogZnVuY3Rpb25zLgogLlwiCiAuU2ggU0VFIEFMU08KLS5YciBsaWJhcmNoaXZlIDMgLAotLlhyIGFyY2hpdmVfcmVhZF9uZXcgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3JlYWRfZm9ybWF0IDMgLAorLlhyIGFyY2hpdmVfcmVhZF9uZXcgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX29wZW4gMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAotLlhyIGFyY2hpdmVfdXRpbCAzCisuWHIgYXJjaGl2ZV91dGlsIDMgLAorLlhyIGxpYmFyY2hpdmUgMwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9oZWFkZXIuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfaGVhZGVyLjMKaW5kZXggNDgwYTY2Ni4uMWU5N2YzYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9oZWFkZXIuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX2hlYWRlci4zCkBAIC03OSw3ICs3OSw2IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3JlYWRfZGF0YSAzICwKIC5YciBhcmNoaXZlX3JlYWRfZXh0cmFjdCAzICwKQEAgLTg4LDQgKzg3LDUgQEAKIC5YciBhcmNoaXZlX3JlYWRfb3BlbiAzICwKIC5YciBhcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMgMyAsCiAuWHIgYXJjaGl2ZV91dGlsIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfbmV3LjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX25ldy4zCmluZGV4IDBjOWQxYTcuLjhiYjZiODQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfbmV3LjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9uZXcuMwpAQCAtNTAsMTAgKzUwLDEwIEBACiAuXCIgLlNoIEVSUk9SUwogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3JlYWRfZm9ybWF0IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKIC5YciBhcmNoaXZlX3V0aWwgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9vcGVuLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX29wZW4uMwppbmRleCAyMjc4ZWJjLi5mNjc2Nzc4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX29wZW4uMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX29wZW4uMwpAQCAtMjA1LDcgKzIwNSw3IEBACiAuRm4gYXJjaGl2ZV9zZXRfZXJyb3IKIHRvIHJlZ2lzdGVyIGFuIGVycm9yIGNvZGUgYW5kIG1lc3NhZ2UgYW5kCiByZXR1cm4KLS5DbSBBUkNISVZFX0ZBVEFMLgorLkNtIEFSQ0hJVkVfRkFUQUwgLgogLlwiIC5TaCBFWEFNUExFCiAuXCIKIC5TaCBSRVRVUk4gVkFMVUVTCkBAIC0yMjMsMTEgKzIyMywxMSBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3JlYWQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX2ZpbHRlciAzICwKIC5YciBhcmNoaXZlX3JlYWRfZm9ybWF0IDMgLAogLlhyIGFyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucyAzICwKIC5YciBhcmNoaXZlX3V0aWwgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9vcGVuX2ZpbGUuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfb3Blbl9maWxlLmMKaW5kZXggYmZlOTMzYi4uMTAxZGFlNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9vcGVuX2ZpbGUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX29wZW5fZmlsZS5jCkBAIC0xNzQsOCArMTc0LDcgQEAKIAlzdHJ1Y3QgcmVhZF9GSUxFX2RhdGEgKm1pbmUgPSAoc3RydWN0IHJlYWRfRklMRV9kYXRhICopY2xpZW50X2RhdGE7CiAKIAkodm9pZClhOyAvKiBVTlVTRUQgKi8KLQlpZiAobWluZS0+YnVmZmVyICE9IE5VTEwpCi0JCWZyZWUobWluZS0+YnVmZmVyKTsKKwlmcmVlKG1pbmUtPmJ1ZmZlcik7CiAJZnJlZShtaW5lKTsKIAlyZXR1cm4gKEFSQ0hJVkVfT0spOwogfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3ByaXZhdGUuaAppbmRleCA3ODU0NmRjLi5jODQyZTZmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3ByaXZhdGUuaApAQCAtMjUsMTUgKzI1LDE1IEBACiAgKiAkRnJlZUJTRDogaGVhZC9saWIvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfcHJpdmF0ZS5oIDIwMTA4OCAyMDA5LTEyLTI4IDAyOjE4OjU1WiBraWVudHpsZSAkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX1JFQURfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfUkVBRF9QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNpZm5kZWYgX19MSUJBUkNISVZFX1RFU1QKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1JFQURfUFJJVkFURV9IX0lOQ0xVREVECi0jZGVmaW5lCUFSQ0hJVkVfUkVBRF9QUklWQVRFX0hfSU5DTFVERUQKLQogI2luY2x1ZGUgImFyY2hpdmUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3N0cmluZy5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgpAQCAtOTgsNiArOTgsOCBAQAogCWludCAoKmNsb3NlKShzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqc2VsZik7CiAJLyogRnVuY3Rpb24gdGhhdCBoYW5kbGVzIHN3aXRjaGluZyBmcm9tIHJlYWRpbmcgb25lIGJsb2NrIHRvIHRoZSBuZXh0L3ByZXYgKi8KIAlpbnQgKCpzc3dpdGNoKShzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqc2VsZiwgdW5zaWduZWQgaW50IGlpbmRleCk7CisJLyogUmVhZCBhbnkgaGVhZGVyIG1ldGFkYXRhIGlmIGF2YWlsYWJsZS4gKi8KKwlpbnQgKCpyZWFkX2hlYWRlcikoc3RydWN0IGFyY2hpdmVfcmVhZF9maWx0ZXIgKnNlbGYsIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSk7CiAJLyogTXkgcHJpdmF0ZSBkYXRhLiAqLwogCXZvaWQgKmRhdGE7CiAKQEAgLTI1MCw2ICsyNTIsNyBAQAogaW50NjRfdAlfX2FyY2hpdmVfcmVhZF9maWx0ZXJfc2VlayhzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2ZpbHRlciAqLCBpbnQ2NF90LCBpbnQpOwogaW50NjRfdAlfX2FyY2hpdmVfcmVhZF9jb25zdW1lKHN0cnVjdCBhcmNoaXZlX3JlYWQgKiwgaW50NjRfdCk7CiBpbnQ2NF90CV9fYXJjaGl2ZV9yZWFkX2ZpbHRlcl9jb25zdW1lKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICosIGludDY0X3QpOworaW50IF9fYXJjaGl2ZV9yZWFkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkICosIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOwogaW50IF9fYXJjaGl2ZV9yZWFkX3Byb2dyYW0oc3RydWN0IGFyY2hpdmVfcmVhZF9maWx0ZXIgKiwgY29uc3QgY2hhciAqKTsKIHZvaWQgX19hcmNoaXZlX3JlYWRfZnJlZV9maWx0ZXJzKHN0cnVjdCBhcmNoaXZlX3JlYWQgKik7CiBzdHJ1Y3QgYXJjaGl2ZV9yZWFkX2V4dHJhY3QgKl9fYXJjaGl2ZV9yZWFkX2dldF9leHRyYWN0KHN0cnVjdCBhcmNoaXZlX3JlYWQgKik7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3NldF9mb3JtYXQuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc2V0X2Zvcm1hdC5jCmluZGV4IDE5MGY0MzYuLjFkM2U0OWQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc2V0X2Zvcm1hdC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc2V0X2Zvcm1hdC5jCkBAIC03Myw2ICs3Myw5IEBACiAgICAgY2FzZSBBUkNISVZFX0ZPUk1BVF9SQVI6CiAgICAgICBzdHJjcHkoc3RyLCAicmFyIik7CiAgICAgICBicmVhazsKKyAgICBjYXNlIEFSQ0hJVkVfRk9STUFUX1JBUl9WNToKKyAgICAgIHN0cmNweShzdHIsICJyYXI1Iik7CisgICAgICBicmVhazsKICAgICBjYXNlIEFSQ0hJVkVfRk9STUFUX1RBUjoKICAgICAgIHN0cmNweShzdHIsICJ0YXIiKTsKICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucy4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zZXRfb3B0aW9ucy4zCmluZGV4IDFhMjUxY2UuLjc4ZDk5OTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc2V0X29wdGlvbnMuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zLjMKQEAgLTI0LDcgKzI0LDcgQEAKIC5cIgogLlwiICRGcmVlQlNEJAogLlwiCi0uRGQgRmVicnVhcnkgMiwgMjAxMgorLkRkIEphbnVhcnkgMzEsIDIwMjAKIC5EdCBBUkNISVZFX1JFQURfT1BUSU9OUyAzCiAuT3MKIC5TaCBOQU1FCkBAIC0xODAsNiArMTgwLDE4IEBACiAuXCIKIC5TaCBPUFRJT05TCiAuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgRm9ybWF0IGNhYgorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUgbmFtZXMuCisuRWwKKy5JdCBGb3JtYXQgY3BpbworLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUgbmFtZXMuCisuRWwKIC5JdCBGb3JtYXQgaXNvOTY2MAogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAogLkl0IENtIGpvbGlldApAQCAtMTkzLDYgKzIwNSwyNCBAQAogLkNtICFyb2NrcmlkZ2UKIHRvIGRpc2FibGUuCiAuRWwKKy5JdCBGb3JtYXQgbGhhCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gaGRyY2hhcnNldAorVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSBuYW1lcy4KKy5FbAorLkl0IEZvcm1hdCBtdHJlZQorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGNoZWNrZnMKK0FsbG93IHJlYWRpbmcgaW5mb3JtYXRpb24gbWlzc2luZyBmcm9tIHRoZSBtdHJlZSBmcm9tIHRoZSBmaWxlIHN5c3RlbS4KK0Rpc2FibGVkIGJ5IGRlZmF1bHQuCisuRWwKKy5JdCBGb3JtYXQgcmFyCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gaGRyY2hhcnNldAorVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSBuYW1lcy4KKy5FbAogLkl0IEZvcm1hdCB0YXIKIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKIC5JdCBDbSBjb21wYXQtMngKQEAgLTIwMiw3ICsyMzIsNyBAQAogc28gdGhhdCBzdWNoIGFyY2hpdmVzIGNhbiBiZSByZWFkIGNvcnJlY3RseS4KIC5JdCBDbSBoZHJjaGFyc2V0CiBUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKLXVzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlbmFtZXMuCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSBuYW1lcy4KIC5JdCBDbSBtYWMtZXh0CiBTdXBwb3J0IE1hYyBPUyBtZXRhZGF0YSBleHRlbnNpb24gdGhhdCByZWNvcmRzIGRhdGEgaW4gc3BlY2lhbAogZmlsZXMgYmVnaW5uaW5nIHdpdGggYSBwZXJpb2QgYW5kIHVuZGVyc2NvcmUuCkBAIC0yMTIsNyArMjQyLDggQEAKIHRvIGRpc2FibGUuCiAuSXQgQ20gcmVhZF9jb25jYXRlbmF0ZWRfYXJjaGl2ZXMKIElnbm9yZSB6ZXJvZWQgYmxvY2tzIGluIHRoZSBhcmNoaXZlLCB3aGljaCBvY2N1cnMgd2hlbiBtdWx0aXBsZSB0YXIgYXJjaGl2ZXMKLWhhdmUgYmVlbiBjb25jYXRlbmF0ZWQgdG9nZXRoZXIuICBXaXRob3V0IHRoaXMgb3B0aW9uLCBvbmx5IHRoZSBjb250ZW50cyBvZgoraGF2ZSBiZWVuIGNvbmNhdGVuYXRlZCB0b2dldGhlci4KK1dpdGhvdXQgdGhpcyBvcHRpb24sIG9ubHkgdGhlIGNvbnRlbnRzIG9mCiB0aGUgZmlyc3QgY29uY2F0ZW5hdGVkIGFyY2hpdmUgd291bGQgYmUgcmVhZC4KIC5FbAogLkVsCkBAIC0yMjYsNiArMjU3LDYgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCisuWHIgYXJjaGl2ZV9yZWFkIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCi0uWHIgYXJjaGl2ZV9yZWFkIDMKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfYnppcDIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfYnppcDIuYwppbmRleCAyYjFhNWUyLi41MzMzZDQ3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2J6aXAyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9iemlwMi5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX0JaTElCX0gKLSNpbmNsdWRlIDxjbV9iemxpYi5oPgorI2luY2x1ZGUgPGNtM3AvYnpsaWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9nemlwLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2d6aXAuYwppbmRleCBlOWY1OWYxLi5hYzBiNjk0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2d6aXAuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2d6aXAuYwpAQCAtMzcsMTQgKzM3LDE5IEBACiAjaWZkZWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCiAjaWZkZWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX2VudHJ5LmgiCisjaW5jbHVkZSAiYXJjaGl2ZV9lbmRpYW4uaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3JlYWRfcHJpdmF0ZS5oIgogCkBAIC01Niw2ICs2MSw4IEBACiAJc2l6ZV90CQkgb3V0X2Jsb2NrX3NpemU7CiAJaW50NjRfdAkJIHRvdGFsX291dDsKIAl1bnNpZ25lZCBsb25nCSBjcmM7CisJdWludDMyX3QJIG10aW1lOworCWNoYXIJCSpuYW1lOwogCWNoYXIJCSBlb2Y7IC8qIFRydWUgPSBmb3VuZCBlbmQgb2YgY29tcHJlc3NlZCBkYXRhLiAqLwogfTsKIApAQCAtMTIzLDEyICsxMzAsMjEgQEAKICAqIGNvdW50IG9mIGJpdHMgdmVyaWZpZWQsIHN1aXRhYmxlIGZvciB1c2UgYnkgYmlkZGVyLgogICovCiBzdGF0aWMgc3NpemVfdAotcGVla19hdF9oZWFkZXIoc3RydWN0IGFyY2hpdmVfcmVhZF9maWx0ZXIgKmZpbHRlciwgaW50ICpwYml0cykKK3BlZWtfYXRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICpmaWx0ZXIsIGludCAqcGJpdHMsCisjaWZkZWYgSEFWRV9aTElCX0gKKwkgICAgICAgc3RydWN0IHByaXZhdGVfZGF0YSAqc3RhdGUKKyNlbHNlCisJICAgICAgIHZvaWQgKnN0YXRlCisjZW5kaWYKKwkgICAgICApCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcDsKIAlzc2l6ZV90IGF2YWlsLCBsZW47CiAJaW50IGJpdHMgPSAwOwogCWludCBoZWFkZXJfZmxhZ3M7CisjaWZuZGVmIEhBVkVfWkxJQl9ICisJKHZvaWQpc3RhdGU7IC8qIFVOVVNFRCAqLworI2VuZGlmCiAKIAkvKiBTdGFydCBieSBsb29raW5nIGF0IHRoZSBmaXJzdCB0ZW4gYnl0ZXMgb2YgdGhlIGhlYWRlciwgd2hpY2gKIAkgKiBpcyBhbGwgZml4ZWQgbGF5b3V0LiAqLwpAQCAtMTQ0LDcgKzE2MCwxMSBAQAogCQlyZXR1cm4gKDApOwogCWJpdHMgKz0gMzsKIAloZWFkZXJfZmxhZ3MgPSBwWzNdOwotCS8qIEJ5dGVzIDQtNyBhcmUgbW9kIHRpbWUuICovCisJLyogQnl0ZXMgNC03IGFyZSBtb2QgdGltZSBpbiBsaXR0bGUgZW5kaWFuLiAqLworI2lmZGVmIEhBVkVfWkxJQl9ICisJaWYgKHN0YXRlKQorCQlzdGF0ZS0+bXRpbWUgPSBhcmNoaXZlX2xlMzJkZWMocCArIDQpOworI2VuZGlmCiAJLyogQnl0ZSA4IGlzIGRlZmxhdGUgZmxhZ3MuICovCiAJLyogWFhYWCBUT0RPOiByZXR1cm4gZGVmbGF0ZSBmbGFncyBiYWNrIHRvIGNvbnN1bWVfaGVhZGVyIGZvciB1c2UKIAkgICBpbiBpbml0aWFsaXppbmcgdGhlIGRlY29tcHJlc3Nvci4gKi8KQEAgLTE2MSw2ICsxODEsOSBAQAogCiAJLyogTnVsbC10ZXJtaW5hdGVkIG9wdGlvbmFsIGZpbGVuYW1lLiAqLwogCWlmIChoZWFkZXJfZmxhZ3MgJiA4KSB7CisjaWZkZWYgSEFWRV9aTElCX0gKKwkJc3NpemVfdCBmaWxlX3N0YXJ0ID0gbGVuOworI2VuZGlmCiAJCWRvIHsKIAkJCSsrbGVuOwogCQkJaWYgKGF2YWlsIDwgbGVuKQpAQCAtMTY5LDYgKzE5MiwxNCBAQAogCQkJaWYgKHAgPT0gTlVMTCkKIAkJCQlyZXR1cm4gKDApOwogCQl9IHdoaWxlIChwW2xlbiAtIDFdICE9IDApOworCisjaWZkZWYgSEFWRV9aTElCX0gKKwkJaWYgKHN0YXRlKSB7CisJCQkvKiBSZXNldCB0aGUgbmFtZSBpbiBjYXNlIG9mIHJlcGVhdCBoZWFkZXIgcmVhZHMuICovCisJCQlmcmVlKHN0YXRlLT5uYW1lKTsKKwkJCXN0YXRlLT5uYW1lID0gc3RyZHVwKChjb25zdCBjaGFyICopJnBbZmlsZV9zdGFydF0pOworCQl9CisjZW5kaWYKIAl9CiAKIAkvKiBOdWxsLXRlcm1pbmF0ZWQgb3B0aW9uYWwgY29tbWVudC4gKi8KQEAgLTIxNCwxMiArMjQ1LDExIEBACiAKIAkodm9pZClzZWxmOyAvKiBVTlVTRUQgKi8KIAotCWlmIChwZWVrX2F0X2hlYWRlcihmaWx0ZXIsICZiaXRzX2NoZWNrZWQpKQorCWlmIChwZWVrX2F0X2hlYWRlcihmaWx0ZXIsICZiaXRzX2NoZWNrZWQsIE5VTEwpKQogCQlyZXR1cm4gKGJpdHNfY2hlY2tlZCk7CiAJcmV0dXJuICgwKTsKIH0KIAotCiAjaWZuZGVmIEhBVkVfWkxJQl9ICiAKIC8qCkBAIC0yNDMsNiArMjczLDI0IEBACiAKICNlbHNlCiAKK3N0YXRpYyBpbnQKK2d6aXBfcmVhZF9oZWFkZXIoc3RydWN0IGFyY2hpdmVfcmVhZF9maWx0ZXIgKnNlbGYsIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpzdGF0ZTsKKworCXN0YXRlID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilzZWxmLT5kYXRhOworCisJLyogQSBtdGltZSBvZiAwIGlzIGNvbnNpZGVyZWQgaW52YWxpZC9taXNzaW5nLiAqLworCWlmIChzdGF0ZS0+bXRpbWUgIT0gMCkKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfbXRpbWUoZW50cnksIHN0YXRlLT5tdGltZSwgMCk7CisKKwkvKiBJZiB0aGUgbmFtZSBpcyBhdmFpbGFibGUsIGV4dHJhY3QgaXQuICovCisJaWYgKHN0YXRlLT5uYW1lKQorCQlhcmNoaXZlX2VudHJ5X3NldF9wYXRobmFtZShlbnRyeSwgc3RhdGUtPm5hbWUpOworCisJcmV0dXJuIChBUkNISVZFX09LKTsKK30KKwogLyoKICAqIEluaXRpYWxpemUgdGhlIGZpbHRlciBvYmplY3QuCiAgKi8KQEAgLTI3Miw2ICszMjAsOSBAQAogCXNlbGYtPnJlYWQgPSBnemlwX2ZpbHRlcl9yZWFkOwogCXNlbGYtPnNraXAgPSBOVUxMOyAvKiBub3Qgc3VwcG9ydGVkICovCiAJc2VsZi0+Y2xvc2UgPSBnemlwX2ZpbHRlcl9jbG9zZTsKKyNpZmRlZiBIQVZFX1pMSUJfSAorCXNlbGYtPnJlYWRfaGVhZGVyID0gZ3ppcF9yZWFkX2hlYWRlcjsKKyNlbmRpZgogCiAJc3RhdGUtPmluX3N0cmVhbSA9IDA7IC8qIFdlJ3JlIG5vdCBhY3R1YWxseSB3aXRoaW4gYSBzdHJlYW0geWV0LiAqLwogCkBAIC0yODksNyArMzQwLDcgQEAKIAlzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopc2VsZi0+ZGF0YTsKIAogCS8qIElmIHRoaXMgaXMgYSByZWFsIGhlYWRlciwgY29uc3VtZSBpdC4gKi8KLQlsZW4gPSBwZWVrX2F0X2hlYWRlcihzZWxmLT51cHN0cmVhbSwgTlVMTCk7CisJbGVuID0gcGVla19hdF9oZWFkZXIoc2VsZi0+dXBzdHJlYW0sIE5VTEwsIHN0YXRlKTsKIAlpZiAobGVuID09IDApCiAJCXJldHVybiAoQVJDSElWRV9FT0YpOwogCV9fYXJjaGl2ZV9yZWFkX2ZpbHRlcl9jb25zdW1lKHNlbGYtPnVwc3RyZWFtLCBsZW4pOwpAQCAtMzc0LDcgKzQyNSw3IEBACiB7CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqc3RhdGU7CiAJc2l6ZV90IGRlY29tcHJlc3NlZDsKLQlzc2l6ZV90IGF2YWlsX2luOworCXNzaXplX3QgYXZhaWxfaW4sIG1heF9pbjsKIAlpbnQgcmV0OwogCiAJc3RhdGUgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKXNlbGYtPmRhdGE7CkBAIC00MDgsNiArNDU5LDEyIEBACiAJCQkgICAgInRydW5jYXRlZCBnemlwIGlucHV0Iik7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQl9CisJCWlmIChVSU5UX01BWCA+PSBTU0laRV9NQVgpCisJCQltYXhfaW4gPSBTU0laRV9NQVg7CisJCWVsc2UKKwkJCW1heF9pbiA9IFVJTlRfTUFYOworCQlpZiAoYXZhaWxfaW4gPiBtYXhfaW4pCisJCQlhdmFpbF9pbiA9IG1heF9pbjsKIAkJc3RhdGUtPnN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KWF2YWlsX2luOwogCiAJCS8qIERlY29tcHJlc3MgYW5kIGNvbnN1bWUgc29tZSBvZiB0aGF0IGRhdGEuICovCkBAIC00NjksNiArNTI2LDcgQEAKIAkJfQogCX0KIAorCWZyZWUoc3RhdGUtPm5hbWUpOwogCWZyZWUoc3RhdGUtPm91dF9ibG9jayk7CiAJZnJlZShzdGF0ZSk7CiAJcmV0dXJuIChyZXQpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9sejQuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfbHo0LmMKaW5kZXggMTQ3ZjUwMi4uNDNlZTZjMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl9sejQuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2x6NC5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAogCV9fYXJjaGl2ZV9yZWFkX2ZpbHRlcl9jb25zdW1lKHNlbGYtPnVwc3RyZWFtLCBkZXNjcmlwdG9yX2J5dGVzKTsKIAotCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGVub3VnaCBidWZmZXIgZm9yIHVuY29tcHJlc3NlZCBkYXRhLiAqLworCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgbGFyZ2UgZW5vdWdoIGJ1ZmZlciBmb3IgdW5jb21wcmVzc2VkIGRhdGEuICovCiAJaWYgKGx6NF9hbGxvY2F0ZV9vdXRfYmxvY2soc2VsZikgIT0gQVJDSElWRV9PSykKIAkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAlpZiAoc3RhdGUtPmZsYWdzLnN0cmVhbV9jaGVja3N1bSkKQEAgLTUyMCw3ICs1MjAsNyBAQAogCWlmIChyZWFkX2J1ZiA9PSBOVUxMKQogCQlnb3RvIHRydW5jYXRlZF9lcnJvcjsKIAotCS8qIE9wdGlvbmFsIHByb2Nlc3MsIGNoZWNraW5nIGEgYmxvY2sgc3VtLiAqLworCS8qIE9wdGlvbmFsIHByb2Nlc3NpbmcsIGNoZWNraW5nIGEgYmxvY2sgc3VtLiAqLwogCWlmIChjaGVja3N1bV9zaXplKSB7CiAJCXVuc2lnbmVkIGludCBjaHN1bSA9IF9fYXJjaGl2ZV94eGhhc2guWFhIMzIoCiAJCQlyZWFkX2J1ZiArIDQsIChpbnQpY29tcHJlc3NlZF9zaXplLCAwKTsKQEAgLTY0MCw3ICs2NDAsNyBAQAogCWlmIChyZXQgPT0gMCAmJiAqcCA9PSBOVUxMKQogCQlzdGF0ZS0+c3RhZ2UgPSBTRUxFQ1RfU1RSRUFNOwogCi0JLyogT3B0aW9uYWwgcHJvY2VzcywgY2hlY2tpbmcgYSBzdHJlYW0gc3VtLiAqLworCS8qIE9wdGlvbmFsIHByb2Nlc3NpbmcsIGNoZWNraW5nIGEgc3RyZWFtIHN1bS4gKi8KIAlpZiAoc3RhdGUtPmZsYWdzLnN0cmVhbV9jaGVja3N1bSkgewogCQlpZiAoc3RhdGUtPnN0YWdlID09IFNFTEVDVF9TVFJFQU0pIHsKIAkJCXVuc2lnbmVkIGludCBjaGVja3N1bTsKQEAgLTY2MCw3ICs2NjAsNyBAQAogCQkJaWYgKGNoZWNrc3VtICE9IGNoZWNrc3VtX3N0cmVhbSkgewogCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZzZWxmLT5hcmNoaXZlLT5hcmNoaXZlLAogCQkJCSAgICBBUkNISVZFX0VSUk5PX01JU0MsCi0JCQkJICAgICJsejQgc3RyZWFtIGNoZWtzdW0gZXJyb3IiKTsKKwkJCQkgICAgImx6NCBzdHJlYW0gY2hlY2tzdW0gZXJyb3IiKTsKIAkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQkJfQogCQl9IGVsc2UgaWYgKHJldCA+IDApCkBAIC02NzQsNyArNjc0LDcgQEAKIGx6NF9maWx0ZXJfcmVhZF9sZWdhY3lfc3RyZWFtKHN0cnVjdCBhcmNoaXZlX3JlYWRfZmlsdGVyICpzZWxmLCBjb25zdCB2b2lkICoqcCkKIHsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpzdGF0ZSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopc2VsZi0+ZGF0YTsKLQlpbnQgY29tcHJlc3NlZDsKKwl1aW50MzJfdCBjb21wcmVzc2VkOwogCWNvbnN0IGNoYXIgKnJlYWRfYnVmOwogCXNzaXplX3QgcmV0OwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX2x6b3AuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfbHpvcC5jCmluZGV4IDQzNTZiODIuLjA1Zjc0MGIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfbHpvcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfbHpvcC5jCkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSA8bHpvL2x6bzF4Lmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4gLyogZm9yIGNyYzMyIGFuZCBhZGxlcjMyICovCisjaW5jbHVkZSA8Y20zcC96bGliLmg+IC8qIGZvciBjcmMzMiBhbmQgYWRsZXIzMiAqLwogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3V1LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3V1LmMKaW5kZXggNjQxMjk3OS4uNjdkZGZmYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl91dS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfdXUuYwpAQCAtNTc0LDE0ICs1NzQsMTMgQEAKIAkJCXdoaWxlIChsID4gMCkgewogCQkJCWludCBuID0gMDsKIAotCQkJCWlmIChsID4gMCkgewotCQkJCQlpZiAoIXV1Y2hhcltiWzBdXSB8fCAhdXVjaGFyW2JbMV1dKQotCQkJCQkJYnJlYWs7Ci0JCQkJCW4gPSBVVURFQ09ERSgqYisrKSA8PCAxODsKLQkJCQkJbiB8PSBVVURFQ09ERSgqYisrKSA8PCAxMjsKLQkJCQkJKm91dCsrID0gbiA+PiAxNjsgdG90YWwrKzsKLQkJCQkJLS1sOwotCQkJCX0KKwkJCQlpZiAoIXV1Y2hhcltiWzBdXSB8fCAhdXVjaGFyW2JbMV1dKQorCQkJCQlicmVhazsKKwkJCQluID0gVVVERUNPREUoKmIrKykgPDwgMTg7CisJCQkJbiB8PSBVVURFQ09ERSgqYisrKSA8PCAxMjsKKwkJCQkqb3V0KysgPSBuID4+IDE2OyB0b3RhbCsrOworCQkJCS0tbDsKKwogCQkJCWlmIChsID4gMCkgewogCQkJCQlpZiAoIXV1Y2hhcltiWzBdXSkKIAkJCQkJCWJyZWFrOwpAQCAtNjI2LDE0ICs2MjUsMTMgQEAKIAkJCXdoaWxlIChsID4gMCkgewogCQkJCWludCBuID0gMDsKIAotCQkJCWlmIChsID4gMCkgewotCQkJCQlpZiAoIWJhc2U2NFtiWzBdXSB8fCAhYmFzZTY0W2JbMV1dKQotCQkJCQkJYnJlYWs7Ci0JCQkJCW4gPSBiYXNlNjRudW1bKmIrK10gPDwgMTg7Ci0JCQkJCW4gfD0gYmFzZTY0bnVtWypiKytdIDw8IDEyOwotCQkJCQkqb3V0KysgPSBuID4+IDE2OyB0b3RhbCsrOwotCQkJCQlsIC09IDI7Ci0JCQkJfQorCQkJCWlmICghYmFzZTY0W2JbMF1dIHx8ICFiYXNlNjRbYlsxXV0pCisJCQkJCWJyZWFrOworCQkJCW4gPSBiYXNlNjRudW1bKmIrK10gPDwgMTg7CisJCQkJbiB8PSBiYXNlNjRudW1bKmIrK10gPDwgMTI7CisJCQkJKm91dCsrID0gbiA+PiAxNjsgdG90YWwrKzsKKwkJCQlsIC09IDI7CisKIAkJCQlpZiAobCA+IDApIHsKIAkJCQkJaWYgKCpiID09ICc9JykKIAkJCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl94ei5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2ZpbHRlcl94ei5jCmluZGV4IGExODgxODYuLjMyMjNiMzggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfeHouYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3h6LmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogI2lmIEhBVkVfTFpNQV9ICi0jaW5jbHVkZSA8Y21fbHptYS5oPgorI2luY2x1ZGUgPGNtM3AvbHptYS5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZmlsdGVyX3pzdGQuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfenN0ZC5jCmluZGV4IDQ1MTM3MDYuLmUxZWM2MGUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfenN0ZC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9maWx0ZXJfenN0ZC5jCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKICNpZiBIQVZFX1pTVERfSAotI2luY2x1ZGUgPGNtX3pzdGQuaD4KKyNpbmNsdWRlIDxjbTNwL3pzdGQuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF83emlwLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0Xzd6aXAuYwppbmRleCBhODg1YTRjLi40NTZiMmY4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0Xzd6aXAuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0Xzd6aXAuYwpAQCAtMzMsMTMgKzMzLDEzIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX0JaTElCX0gKLSNpbmNsdWRlIDxjbV9iemxpYi5oPgorI2luY2x1ZGUgPGNtM3AvYnpsaWIuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfTFpNQV9ICi0jaW5jbHVkZSA8Y21fbHptYS5oPgorI2luY2x1ZGUgPGNtM3AvbHptYS5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTEwODYsMTAgKzEwODYsMTcgQEAKIAkJCQl6aXAtPmJjal9zdGF0ZSA9IDA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIF83Wl9ERUxUQToKKwkJCQlpZiAoY29kZXIyLT5wcm9wZXJ0aWVzU2l6ZSAhPSAxKSB7CisJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJCQkgICAgIkludmFsaWQgRGVsdGEgcGFyYW1ldGVyIik7CisJCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQkJCX0KIAkJCQlmaWx0ZXJzW2ZpXS5pZCA9IExaTUFfRklMVEVSX0RFTFRBOwogCQkJCW1lbXNldCgmZGVsdGFfb3B0LCAwLCBzaXplb2YoZGVsdGFfb3B0KSk7CiAJCQkJZGVsdGFfb3B0LnR5cGUgPSBMWk1BX0RFTFRBX1RZUEVfQllURTsKLQkJCQlkZWx0YV9vcHQuZGlzdCA9IDE7CisJCQkJZGVsdGFfb3B0LmRpc3QgPQorCQkJCSAgICAodWludDMyX3QpY29kZXIyLT5wcm9wZXJ0aWVzWzBdICsgMTsKIAkJCQlmaWx0ZXJzW2ZpXS5vcHRpb25zID0gJmRlbHRhX29wdDsKIAkJCQlmaSsrOwogCQkJCWJyZWFrOwpAQCAtMTc4Nyw3ICsxNzk0LDcgQEAKIAkJcmV0dXJuICgwKTsKIAl9CiAKLQlpZiAoKnAgIT0ga1NpemUpCisJaWYgKCpwICE9IGtDUkMpCiAJCXJldHVybiAoLTEpOwogCiAJaWYgKHJlYWRfRGlnZXN0cyhhLCAmKHBpLT5kaWdlc3QpLCAoc2l6ZV90KXBpLT5udW1QYWNrU3RyZWFtcykgPCAwKQpAQCAtMjk2NCwxMyArMjk3MSw3IEBACiAJaWYgKHppcC0+Y29kZWMgPT0gXzdaX0NPUFkgJiYgemlwLT5jb2RlYzIgPT0gKHVuc2lnbmVkIGxvbmcpLTEpIHsKIAkJLyogQ29weSBtb2RlLiAqLwogCi0JCS8qCi0JCSAqIE5vdGU6ICcxJyBoZXJlIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgotCQkgKiBSZWNhbGwgdGhhdCB0aGUgZGVjb21wcmVzc2lvbiBsYXllciByZXR1cm5zIGEgY291bnQgb2YKLQkJICogYXZhaWxhYmxlIGJ5dGVzOyBhc2tpbmcgZm9yIG1vcmUgdGhhbiB0aGF0IGZvcmNlcyB0aGUKLQkJICogZGVjb21wcmVzc29yIHRvIGNvbWJpbmUgcmVhZHMgYnkgY29weWluZyBkYXRhLgotCQkgKi8KLQkJKmJ1ZmYgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAxLCAmYnl0ZXNfYXZhaWwpOworCQkqYnVmZiA9IF9fYXJjaGl2ZV9yZWFkX2FoZWFkKGEsIG1pbmltdW0sICZieXRlc19hdmFpbCk7CiAJCWlmIChieXRlc19hdmFpbCA8PSAwKSB7CiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKIAkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULApAQCAtMzMyMyw4ICszMzI0LDcgQEAKIAkgKiBSZWxlYXNlIHRoZSBtZW1vcnkgd2hpY2ggdGhlIHByZXZpb3VzIGZvbGRlciB1c2VkIGZvciBCQ0oyLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJaWYgKHppcC0+c3ViX3N0cmVhbV9idWZmW2ldICE9IE5VTEwpCi0JCQlmcmVlKHppcC0+c3ViX3N0cmVhbV9idWZmW2ldKTsKKwkJZnJlZSh6aXAtPnN1Yl9zdHJlYW1fYnVmZltpXSk7CiAJCXppcC0+c3ViX3N0cmVhbV9idWZmW2ldID0gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYWxsLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FsbC5jCmluZGV4IDIxMjdlYmQzLi5kZWE1NThiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FsbC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYWxsLmMKQEAgLTcyLDYgKzcyLDcgQEAKIAlhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfN3ppcChhKTsKIAlhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY2FiKGEpOwogCWFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIoYSk7CisJYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcjUoYSk7CiAJYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2lzbzk2NjAoYSk7CiAJLyogU2VlayBpcyByZWFsbHkgYmFkLCBzaW5jZSBpdCBmb3JjZXMgdGhlIHJlYWQtYWhlYWQKIAkgKiBsb2dpYyB0byBkaXNjYXJkIGJ1ZmZlcmVkIGRhdGEuICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2FyLmMKaW5kZXggYjZiOWZjMy4uMjk2YjdkYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9hci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYXIuYwpAQCAtMTM4LDggKzEzOCw3IEBACiAJc3RydWN0IGFyICphcjsKIAogCWFyID0gKHN0cnVjdCBhciAqKShhLT5mb3JtYXQtPmRhdGEpOwotCWlmIChhci0+c3RydGFiKQotCQlmcmVlKGFyLT5zdHJ0YWIpOworCWZyZWUoYXItPnN0cnRhYik7CiAJZnJlZShhcik7CiAJKGEtPmZvcm1hdC0+ZGF0YSkgPSBOVUxMOwogCXJldHVybiAoQVJDSElWRV9PSyk7CkBAIC0zODgsOSArMzg3LDEwIEBACiAKIAkvKgogCSAqICIvIiBpcyB0aGUgU1ZSNC9HTlUgYXJjaGl2ZSBzeW1ib2wgdGFibGUuCisJICogIi9TWU02NC8iIGlzIHRoZSBTVlI0L0dOVSA2NC1iaXQgdmFyaWFudCBhcmNoaXZlIHN5bWJvbCB0YWJsZS4KIAkgKi8KLQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiLyIpID09IDApIHsKLQkJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGVudHJ5LCAiLyIpOworCWlmIChzdHJjbXAoZmlsZW5hbWUsICIvIikgPT0gMCB8fCBzdHJjbXAoZmlsZW5hbWUsICIvU1lNNjQvIikgPT0gMCkgeworCQlhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWUoZW50cnksIGZpbGVuYW1lKTsKIAkJLyogUGFyc2UgdGhlIHRpbWUsIG93bmVyLCBtb2RlLCBzaXplIGZpZWxkcy4gKi8KIAkJciA9IGFyX3BhcnNlX2NvbW1vbl9oZWFkZXIoYXIsIGVudHJ5LCBoKTsKIAkJLyogRm9yY2UgdGhlIGZpbGUgdHlwZSB0byBhIHJlZ3VsYXIgZmlsZS4gKi8KQEAgLTQ1OSw2ICs0NTksNyBAQAogCXVpbnQ2NF90IG47CiAKIAkvKiBDb3B5IHJlbWFpbmluZyBoZWFkZXIgKi8KKwlhcmNoaXZlX2VudHJ5X3NldF9maWxldHlwZShlbnRyeSwgQUVfSUZSRUcpOwogCWFyY2hpdmVfZW50cnlfc2V0X210aW1lKGVudHJ5LAogCSAgICAodGltZV90KWFyX2F0b2wxMChoICsgQVJfZGF0ZV9vZmZzZXQsIEFSX2RhdGVfc2l6ZSksIDBMKTsKIAlhcmNoaXZlX2VudHJ5X3NldF91aWQoZW50cnksCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2J5X2NvZGUuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYnlfY29kZS5jCmluZGV4IDA4NDU2M2YuLjAzNDM1M2QgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYnlfY29kZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfYnlfY29kZS5jCkBAIC02MCw2ICs2MCw5IEBACiAJY2FzZSBBUkNISVZFX0ZPUk1BVF9SQVI6CiAJCXJldHVybiBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyKGEpOwogCQlicmVhazsKKwljYXNlIEFSQ0hJVkVfRk9STUFUX1JBUl9WNToKKwkJcmV0dXJuIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1KGEpOworCQlicmVhazsKIAljYXNlIEFSQ0hJVkVfRk9STUFUX1RBUjoKIAkJcmV0dXJuIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIoYSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jYWIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY2FiLmMKaW5kZXggNTFmNzlmYS4uNTg2NDRiYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jYWIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2NhYi5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpAQCAtMTUwOSw4ICsxNTA5LDggQEAKIAkJCX0KIAkJCWlmIChtc3ppcCA9PSAxICYmIGNhYi0+c3RyZWFtLm5leHRfaW5bMF0gIT0gMHg0YikKIAkJCQlnb3RvIG5vbXN6aXA7Ci0JCQllbHNlIGlmIChjYWItPnN0cmVhbS5uZXh0X2luWzBdICE9IDB4NDMgfHwKLQkJCSAgICBjYWItPnN0cmVhbS5uZXh0X2luWzFdICE9IDB4NGIpCisJCQllbHNlIGlmIChtc3ppcCA9PSAyICYmIChjYWItPnN0cmVhbS5uZXh0X2luWzBdICE9IDB4NDMgfHwKKwkJCSAgICBjYWItPnN0cmVhbS5uZXh0X2luWzFdICE9IDB4NGIpKQogCQkJCWdvdG8gbm9tc3ppcDsKIAkJCWNhYi0+c3RyZWFtLm5leHRfaW4gKz0gbXN6aXA7CiAJCQljYWItPnN0cmVhbS5hdmFpbF9pbiAtPSBtc3ppcDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY3Bpby5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jcGlvLmMKaW5kZXggNjdkNWIyMS4uMWM5NmU2YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jcGlvLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jcGlvLmMKQEAgLTk1NSw4ICs5NTUsNyBAQAogICAgICAgICB3aGlsZSAoY3Bpby0+bGlua3NfaGVhZCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgc3RydWN0IGxpbmtzX2VudHJ5ICpscCA9IGNwaW8tPmxpbmtzX2hlYWQtPm5leHQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoY3Bpby0+bGlua3NfaGVhZC0+bmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoY3Bpby0+bGlua3NfaGVhZC0+bmFtZSk7CisgICAgICAgICAgICAgICAgZnJlZShjcGlvLT5saW5rc19oZWFkLT5uYW1lKTsKICAgICAgICAgICAgICAgICBmcmVlKGNwaW8tPmxpbmtzX2hlYWQpOwogICAgICAgICAgICAgICAgIGNwaW8tPmxpbmtzX2hlYWQgPSBscDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9pc285NjYwLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2lzbzk2NjAuYwppbmRleCA5MzY0OWY4Li45MTIxMTY2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2lzbzk2NjAuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2lzbzk2NjAuYwpAQCAtNDEsNyArNDEsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8dGltZS5oPgogI2lmZGVmIEhBVkVfWkxJQl9ICi0jaW5jbHVkZSA8Y21femxpYi5oPgorI2luY2x1ZGUgPGNtM3AvemxpYi5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCkBAIC0xNzI0LDggKzE3MjQsNyBAQAogCWZyZWUoaXNvOTY2MC0+cmVhZF9jZV9yZXEucmVxcyk7CiAJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmaXNvOTY2MC0+cGF0aG5hbWUpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmlzbzk2NjAtPnByZXZpb3VzX3BhdGhuYW1lKTsKLQlpZiAoaXNvOTY2MC0+cGVuZGluZ19maWxlcy5maWxlcykKLQkJZnJlZShpc285NjYwLT5wZW5kaW5nX2ZpbGVzLmZpbGVzKTsKKwlmcmVlKGlzbzk2NjAtPnBlbmRpbmdfZmlsZXMuZmlsZXMpOwogI2lmZGVmIEhBVkVfWkxJQl9ICiAJZnJlZShpc285NjYwLT5lbnRyeV96aXNvZnMudW5jb21wcmVzc2VkX2J1ZmZlcik7CiAJZnJlZShpc285NjYwLT5lbnRyeV96aXNvZnMuYmxvY2tfcG9pbnRlcnMpOwpAQCAtMjEwMiw2ICsyMTAxLDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwLCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQpCiB7CiAJc3RydWN0IGlzbzk2NjAgKmlzbzk2NjA7CisJaW50IGVudHJ5X3NlZW4gPSAwOwogCiAJaXNvOTY2MCA9IChzdHJ1Y3QgaXNvOTY2MCAqKShhLT5mb3JtYXQtPmRhdGEpOwogCkBAIC0yMjU3LDggKzIyNTcsMTYgQEAKIAkJfQogCiAJCXAgKz0gcFsyXTsKKwkJZW50cnlfc2VlbiA9IDE7CiAJfQotCXJldHVybiAoQVJDSElWRV9PSyk7CisKKwlpZiAoZW50cnlfc2VlbikKKwkJcmV0dXJuIChBUkNISVZFX09LKTsKKwllbHNlIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAiVHJpZWQgdG8gcGFyc2UgUm9ja3JpZGdlIGV4dGVuc2lvbnMsIGJ1dCBub25lIGZvdW5kIik7CisJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTMwMjksOCArMzAzNyw3IEBACiAJCWlmIChoZWFwLT5hbGxvY2F0ZWQpCiAJCQltZW1jcHkobmV3X3BlbmRpbmdfZmlsZXMsIGhlYXAtPmZpbGVzLAogCQkJICAgIGhlYXAtPmFsbG9jYXRlZCAqIHNpemVvZihuZXdfcGVuZGluZ19maWxlc1swXSkpOwotCQlpZiAoaGVhcC0+ZmlsZXMgIT0gTlVMTCkKLQkJCWZyZWUoaGVhcC0+ZmlsZXMpOworCQlmcmVlKGhlYXAtPmZpbGVzKTsKIAkJaGVhcC0+ZmlsZXMgPSBuZXdfcGVuZGluZ19maWxlczsKIAkJaGVhcC0+YWxsb2NhdGVkID0gbmV3X3NpemU7CiAJfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9saGEuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbGhhLmMKaW5kZXggOThkMDJjNi4uMTM1N2Y5YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9saGEuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2xoYS5jCkBAIC0xNzUsNyArMTc1LDkgQEAKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgCSBnbmFtZTsKIAl1aW50MTZfdAkJIGhlYWRlcl9jcmM7CiAJdWludDE2X3QJCSBjcmM7Ci0Jc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnYgKnNjb252OworCS8qIGRpcm5hbWUgYW5kIGZpbGVuYW1lIGNvdWxkIGJlIGluIGRpZmZlcmVudCBjb2RlcGFnZXMgKi8KKwlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqc2NvbnZfZGlyOworCXN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252ICpzY29udl9mbmFtZTsKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqb3B0X3Njb252OwogCiAJc3RydWN0IGFyY2hpdmVfc3RyaW5nIAkgZGlybmFtZTsKQEAgLTIzMiw4ICsyMzQsOCBAQAogc3RhdGljIHRpbWVfdAlsaGFfd2luX3RpbWUodWludDY0X3QsIGxvbmcgKik7CiBzdGF0aWMgdW5zaWduZWQgY2hhcglsaGFfY2FsY3N1bSh1bnNpZ25lZCBjaGFyLCBjb25zdCB2b2lkICosCiAJCSAgICBpbnQsIHNpemVfdCk7Ci1zdGF0aWMgaW50CWxoYV9wYXJzZV9saW5rbmFtZShzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgKiwKLQkJICAgIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqKTsKK3N0YXRpYyBpbnQJbGhhX3BhcnNlX2xpbmtuYW1lKHN0cnVjdCBhcmNoaXZlX3dzdHJpbmcgKiwKKwkJICAgIHN0cnVjdCBhcmNoaXZlX3dzdHJpbmcgKik7CiBzdGF0aWMgaW50CWxoYV9yZWFkX2RhdGFfbm9uZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICosIGNvbnN0IHZvaWQgKiosCiAJCSAgICBzaXplX3QgKiwgaW50NjRfdCAqKTsKIHN0YXRpYyBpbnQJbGhhX3JlYWRfZGF0YV9semgoc3RydWN0IGFyY2hpdmVfcmVhZCAqLCBjb25zdCB2b2lkICoqLApAQCAtNDczLDEzICs0NzUsMTUgQEAKIGFyY2hpdmVfcmVhZF9mb3JtYXRfbGhhX3JlYWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsCiAgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5KQogewotCXN0cnVjdCBhcmNoaXZlX3N0cmluZyBsaW5rbmFtZTsKLQlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgcGF0aG5hbWU7CisJc3RydWN0IGFyY2hpdmVfd3N0cmluZyBsaW5rbmFtZTsKKwlzdHJ1Y3QgYXJjaGl2ZV93c3RyaW5nIHBhdGhuYW1lOwogCXN0cnVjdCBsaGEgKmxoYTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwOwogCWNvbnN0IGNoYXIgKnNpZ25hdHVyZTsKIAlpbnQgZXJyOwotCQorCXN0cnVjdCBhcmNoaXZlX21zdHJpbmcgY29udl9idWZmZXI7CisJY29uc3Qgd2NoYXJfdCAqY29udl9idWZmZXJfcDsKKwogCWxoYV9jcmMxNl9pbml0KCk7CiAKIAlhLT5hcmNoaXZlLmFyY2hpdmVfZm9ybWF0ID0gQVJDSElWRV9GT1JNQVRfTEhBOwpAQCAtNTYxLDEwICs1NjUsMTMgQEAKIAlhcmNoaXZlX3N0cmluZ19lbXB0eSgmbGhhLT5kaXJuYW1lKTsKIAlhcmNoaXZlX3N0cmluZ19lbXB0eSgmbGhhLT5maWxlbmFtZSk7CiAJbGhhLT5kb3NfYXR0ciA9IDA7Ci0JaWYgKGxoYS0+b3B0X3Njb252ICE9IE5VTEwpCi0JCWxoYS0+c2NvbnYgPSBsaGEtPm9wdF9zY29udjsKLQllbHNlCi0JCWxoYS0+c2NvbnYgPSBOVUxMOworCWlmIChsaGEtPm9wdF9zY29udiAhPSBOVUxMKSB7CisJCWxoYS0+c2NvbnZfZGlyID0gbGhhLT5vcHRfc2NvbnY7CisJCWxoYS0+c2NvbnZfZm5hbWUgPSBsaGEtPm9wdF9zY29udjsKKwl9IGVsc2UgeworCQlsaGEtPnNjb252X2RpciA9IE5VTEw7CisJCWxoYS0+c2NvbnZfZm5hbWUgPSBOVUxMOworCX0KIAogCXN3aXRjaCAocFtIX0xFVkVMX09GRlNFVF0pIHsKIAljYXNlIDA6CkBAIC01OTQsMTIgKzYwMSw1NCBAQAogCQlyZXR1cm4gKHRydW5jYXRlZF9lcnJvcihhKSk7CiAKIAkvKgotCSAqIE1ha2UgYSBwYXRobmFtZSBmcm9tIGEgZGlybmFtZSBhbmQgYSBmaWxlbmFtZS4KLQkgKi8KLQlhcmNoaXZlX3N0cmluZ19jb25jYXQoJmxoYS0+ZGlybmFtZSwgJmxoYS0+ZmlsZW5hbWUpOworCSAqIE1ha2UgYSBwYXRobmFtZSBmcm9tIGEgZGlybmFtZSBhbmQgYSBmaWxlbmFtZSwgYWZ0ZXIgY29udmVydGluZyB0byBVbmljb2RlLgorCSAqIFRoaXMgaXMgYmVjYXVzZSBjb2RlcGFnZXMgbWlnaHQgZGlmZmVyIGJldHdlZW4gZGlybmFtZSBhbmQgZmlsZW5hbWUuCisJKi8KIAlhcmNoaXZlX3N0cmluZ19pbml0KCZwYXRobmFtZSk7CiAJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmbGlua25hbWUpOwotCWFyY2hpdmVfc3RyaW5nX2NvcHkoJnBhdGhuYW1lLCAmbGhhLT5kaXJuYW1lKTsKKwlhcmNoaXZlX3N0cmluZ19pbml0KCZjb252X2J1ZmZlci5hZXNfbWJzKTsKKwlhcmNoaXZlX3N0cmluZ19pbml0KCZjb252X2J1ZmZlci5hZXNfbWJzX2luX2xvY2FsZSk7CisJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmY29udl9idWZmZXIuYWVzX3V0ZjgpOworCWFyY2hpdmVfc3RyaW5nX2luaXQoJmNvbnZfYnVmZmVyLmFlc193Y3MpOworCWlmICgwICE9IGFyY2hpdmVfbXN0cmluZ19jb3B5X21ic19sZW5fbCgmY29udl9idWZmZXIsIGxoYS0+ZGlybmFtZS5zLCBsaGEtPmRpcm5hbWUubGVuZ3RoLCBsaGEtPnNjb252X2RpcikpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQlBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJIlBhdGhuYW1lIGNhbm5vdCBiZSBjb252ZXJ0ZWQgIgorCQkJImZyb20gJXMgdG8gVW5pY29kZS4iLAorCQkJYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9jaGFyc2V0X25hbWUobGhhLT5zY29udl9kaXIpKTsKKwkJZXJyID0gQVJDSElWRV9GQVRBTDsKKwl9IGVsc2UgaWYgKDAgIT0gYXJjaGl2ZV9tc3RyaW5nX2dldF93Y3MoJmEtPmFyY2hpdmUsICZjb252X2J1ZmZlciwgJmNvbnZfYnVmZmVyX3ApKQorCQllcnIgPSBBUkNISVZFX0ZBVEFMOworCWlmIChlcnIgPT0gQVJDSElWRV9GQVRBTCkgeworCQlhcmNoaXZlX21zdHJpbmdfY2xlYW4oJmNvbnZfYnVmZmVyKTsKKwkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKKwkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJmxpbmtuYW1lKTsKKwkJcmV0dXJuIChlcnIpOworCX0KKwlhcmNoaXZlX3dzdHJpbmdfY29weSgmcGF0aG5hbWUsICZjb252X2J1ZmZlci5hZXNfd2NzKTsKKworCWFyY2hpdmVfc3RyaW5nX2VtcHR5KCZjb252X2J1ZmZlci5hZXNfbWJzKTsKKwlhcmNoaXZlX3N0cmluZ19lbXB0eSgmY29udl9idWZmZXIuYWVzX21ic19pbl9sb2NhbGUpOworCWFyY2hpdmVfc3RyaW5nX2VtcHR5KCZjb252X2J1ZmZlci5hZXNfdXRmOCk7CisJYXJjaGl2ZV93c3RyaW5nX2VtcHR5KCZjb252X2J1ZmZlci5hZXNfd2NzKTsKKwlpZiAoMCAhPSBhcmNoaXZlX21zdHJpbmdfY29weV9tYnNfbGVuX2woJmNvbnZfYnVmZmVyLCBsaGEtPmZpbGVuYW1lLnMsIGxoYS0+ZmlsZW5hbWUubGVuZ3RoLCBsaGEtPnNjb252X2ZuYW1lKSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCUFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkiUGF0aG5hbWUgY2Fubm90IGJlIGNvbnZlcnRlZCAiCisJCQkiZnJvbSAlcyB0byBVbmljb2RlLiIsCisJCQlhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2NoYXJzZXRfbmFtZShsaGEtPnNjb252X2ZuYW1lKSk7CisJCWVyciA9IEFSQ0hJVkVfRkFUQUw7CisJfQorCWVsc2UgaWYgKDAgIT0gYXJjaGl2ZV9tc3RyaW5nX2dldF93Y3MoJmEtPmFyY2hpdmUsICZjb252X2J1ZmZlciwgJmNvbnZfYnVmZmVyX3ApKQorCQllcnIgPSBBUkNISVZFX0ZBVEFMOworCWlmIChlcnIgPT0gQVJDSElWRV9GQVRBTCkgeworCQlhcmNoaXZlX21zdHJpbmdfY2xlYW4oJmNvbnZfYnVmZmVyKTsKKwkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKKwkJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJmxpbmtuYW1lKTsKKwkJcmV0dXJuIChlcnIpOworCX0KKwlhcmNoaXZlX3dzdHJpbmdfY29uY2F0KCZwYXRobmFtZSwgJmNvbnZfYnVmZmVyLmFlc193Y3MpOworCWFyY2hpdmVfbXN0cmluZ19jbGVhbigmY29udl9idWZmZXIpOwogCiAJaWYgKChsaGEtPm1vZGUgJiBBRV9JRk1UKSA9PSBBRV9JRkxOSykgewogCQkvKgpAQCAtNjEwLDggKzY1OSw4IEBACiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKIAkJICAgIAkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKIAkJCSAgICAiVW5rbm93biBzeW1saW5rLW5hbWUiKTsKLQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKLQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmxpbmtuYW1lKTsKKwkJCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZwYXRobmFtZSk7CisJCQlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmbGlua25hbWUpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJCX0KIAl9IGVsc2UgewpAQCAtNjI5LDM5ICs2NzgsMTMgQEAKIAkvKgogCSAqIFNldCBiYXNpYyBmaWxlIHBhcmFtZXRlcnMuCiAJICovCi0JaWYgKGFyY2hpdmVfZW50cnlfY29weV9wYXRobmFtZV9sKGVudHJ5LCBwYXRobmFtZS5zLAotCSAgICBwYXRobmFtZS5sZW5ndGgsIGxoYS0+c2NvbnYpICE9IDApIHsKLQkJaWYgKGVycm5vID09IEVOT01FTSkgewotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKLQkJCSAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBQYXRobmFtZSIpOwotCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKLQkJfQotCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCSAgICAiUGF0aG5hbWUgY2Fubm90IGJlIGNvbnZlcnRlZCAiCi0JCSAgICAiZnJvbSAlcyB0byBjdXJyZW50IGxvY2FsZS4iLAotCQkgICAgYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9jaGFyc2V0X25hbWUobGhhLT5zY29udikpOwotCQllcnIgPSBBUkNISVZFX1dBUk47Ci0JfQotCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKKwlhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWVfdyhlbnRyeSwgcGF0aG5hbWUucyk7CisJYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJnBhdGhuYW1lKTsKIAlpZiAoYXJjaGl2ZV9zdHJsZW4oJmxpbmtuYW1lKSA+IDApIHsKLQkJaWYgKGFyY2hpdmVfZW50cnlfY29weV9zeW1saW5rX2woZW50cnksIGxpbmtuYW1lLnMsCi0JCSAgICBsaW5rbmFtZS5sZW5ndGgsIGxoYS0+c2NvbnYpICE9IDApIHsKLQkJCWlmIChlcnJubyA9PSBFTk9NRU0pIHsKLQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAotCQkJCSAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBMaW5rbmFtZSIpOwotCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7Ci0JCQl9Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJMaW5rbmFtZSBjYW5ub3QgYmUgY29udmVydGVkICIKLQkJCSAgICAiZnJvbSAlcyB0byBjdXJyZW50IGxvY2FsZS4iLAotCQkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fY2hhcnNldF9uYW1lKGxoYS0+c2NvbnYpKTsKLQkJCWVyciA9IEFSQ0hJVkVfV0FSTjsKLQkJfQorCQlhcmNoaXZlX2VudHJ5X2NvcHlfc3ltbGlua193KGVudHJ5LCBsaW5rbmFtZS5zKTsKIAl9IGVsc2UKIAkJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGluayhlbnRyeSwgTlVMTCk7Ci0JYXJjaGl2ZV9zdHJpbmdfZnJlZSgmbGlua25hbWUpOworCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZsaW5rbmFtZSk7CiAJLyoKIAkgKiBXaGVuIGEgaGVhZGVyIGxldmVsIGlzIDAsIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdAogCSAqIGEgcGF0aG5hbWUgYW5kIGEgc3ltbGluayBoYXMgJ1wnIGNoYXJhY3RlciwgYSBkaXJlY3RvcnkKQEAgLTEyMDgsNiArMTIzMSwyNyBAQAogCQkJYXJjaGl2ZV9zdHJuY3B5KCZsaGEtPmZpbGVuYW1lLAogCQkJICAgIChjb25zdCBjaGFyICopZXh0ZGhlYWRlciwgZGF0YXNpemUpOwogCQkJYnJlYWs7CisJCWNhc2UgRVhUX1VURjE2X0ZJTEVOQU1FOgorCQkJaWYgKGRhdGFzaXplID09IDApIHsKKwkJCQkvKiBtYXliZSBkaXJlY3RvcnkgaGVhZGVyICovCisJCQkJYXJjaGl2ZV9zdHJpbmdfZW1wdHkoJmxoYS0+ZmlsZW5hbWUpOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChkYXRhc2l6ZSAmIDEpIHsKKwkJCQkvKiBVVEYtMTYgY2hhcmFjdGVycyB0YWtlIGFsd2F5cyAyIG9yIDQgYnl0ZXMgKi8KKwkJCQlnb3RvIGludmFsaWQ7CisJCQl9CisJCQlpZiAoZXh0ZGhlYWRlclswXSA9PSAnXDAnKQorCQkJCWdvdG8gaW52YWxpZDsKKwkJCWFyY2hpdmVfc3RyaW5nX2VtcHR5KCZsaGEtPmZpbGVuYW1lKTsKKwkJCWFyY2hpdmVfYXJyYXlfYXBwZW5kKCZsaGEtPmZpbGVuYW1lLAorCQkJCShjb25zdCBjaGFyICopZXh0ZGhlYWRlciwgZGF0YXNpemUpOworCQkJLyogU2V0dXAgYSBzdHJpbmcgY29udmVyc2lvbiBmb3IgYSBmaWxlbmFtZS4gKi8KKwkJCWxoYS0+c2NvbnZfZm5hbWUgPQorCQkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fZnJvbV9jaGFyc2V0KCZhLT5hcmNoaXZlLAorCQkJICAgICAgICAiVVRGLTE2TEUiLCAxKTsKKwkJCWlmIChsaGEtPnNjb252X2ZuYW1lID09IE5VTEwpCisJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCWJyZWFrOwogCQljYXNlIEVYVF9ESVJFQ1RPUlk6CiAJCQlpZiAoZGF0YXNpemUgPT0gMCB8fCBleHRkaGVhZGVyWzBdID09ICdcMCcpCiAJCQkJLyogbm8gZGlyZWN0b3J5IG5hbWUgZGF0YS4gZXhpdCB0aGlzIGNhc2UuICovCkBAIC0xMjI4LDYgKzEyNzIsNTAgQEAKIAkJCQkvKiBpbnZhbGlkIGRpcmVjdG9yeSBkYXRhICovCiAJCQkJZ290byBpbnZhbGlkOwogCQkJYnJlYWs7CisJCWNhc2UgRVhUX1VURjE2X0RJUkVDVE9SWToKKwkJCS8qIFVURi0xNiBjaGFyYWN0ZXJzIHRha2UgYWx3YXlzIDIgb3IgNCBieXRlcyAqLworCQkJaWYgKGRhdGFzaXplID09IDAgfHwgKGRhdGFzaXplICYgMSkgfHwKKwkJCSAgICBleHRkaGVhZGVyWzBdID09ICdcMCcpIHsKKwkJCQkvKiBubyBkaXJlY3RvcnkgbmFtZSBkYXRhLiBleGl0IHRoaXMgY2FzZS4gKi8KKwkJCQlnb3RvIGludmFsaWQ7CisJCQl9CisKKwkJCWFyY2hpdmVfc3RyaW5nX2VtcHR5KCZsaGEtPmRpcm5hbWUpOworCQkJYXJjaGl2ZV9hcnJheV9hcHBlbmQoJmxoYS0+ZGlybmFtZSwKKwkJCQkoY29uc3QgY2hhciAqKWV4dGRoZWFkZXIsIGRhdGFzaXplKTsKKwkJCWxoYS0+c2NvbnZfZGlyID0KKwkJCSAgICBhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2Zyb21fY2hhcnNldCgmYS0+YXJjaGl2ZSwKKwkJCSAgICAgICAgIlVURi0xNkxFIiwgMSk7CisJCQlpZiAobGhhLT5zY29udl9kaXIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBDb252ZXJ0IGRpcmVjdG9yeSBkZWxpbWl0ZXIgZnJvbSAweEZGRkYKKwkJCQkgKiB0byAnLycgZm9yIGxvY2FsIHN5c3RlbS4KKwkJCQkgKi8KKwkJCQl1aW50MTZfdCBkaXJTZXA7CisJCQkJdWludDE2X3QgZCA9IDE7CisJCQkJaWYgKGFyY2hpdmVfYmUxNmRlYygmZCkgPT0gMSkKKwkJCQkJZGlyU2VwID0gMHgyRjAwOworCQkJCWVsc2UKKwkJCQkJZGlyU2VwID0gMHgwMDJGOworCisJCQkJLyogVVRGLTE2TEUgY2hhcmFjdGVyICovCisJCQkJdWludDE2X3QgKnV0ZjE2bmFtZSA9CisJCQkJICAgICh1aW50MTZfdCAqKWxoYS0+ZGlybmFtZS5zOworCQkJCWZvciAoaSA9IDA7IGkgPCBsaGEtPmRpcm5hbWUubGVuZ3RoIC8gMjsgaSsrKSB7CisJCQkJCWlmICh1dGYxNm5hbWVbaV0gPT0gMHhGRkZGKSB7CisJCQkJCQl1dGYxNm5hbWVbaV0gPSBkaXJTZXA7CisJCQkJCX0KKwkJCQl9CisJCQkJLyogSXMgbGFzdCBjaGFyYWN0ZXIgZGlyZWN0b3J5IHNlcGFyYXRvcj8gKi8KKwkJCQlpZiAodXRmMTZuYW1lW2xoYS0+ZGlybmFtZS5sZW5ndGggLyAyIC0gMV0gIT0KKwkJCQkgICAgZGlyU2VwKSB7CisJCQkJCS8qIGludmFsaWQgZGlyZWN0b3J5IGRhdGEgKi8KKwkJCQkJZ290byBpbnZhbGlkOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIEVYVF9ET1NfQVRUUjoKIAkJCWlmIChkYXRhc2l6ZSA9PSAyKQogCQkJCWxoYS0+ZG9zX2F0dHIgPSAodW5zaWduZWQgY2hhcikKQEAgLTEyNzYsMTEgKzEzNjQsMTYgQEAKIAkJCQkJY2hhcnNldCA9IGNwLnM7CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlsaGEtPnNjb252ID0KKwkJCQlsaGEtPnNjb252X2RpciA9CisJCQkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fZnJvbV9jaGFyc2V0KAorCQkJCQkmKGEtPmFyY2hpdmUpLCBjaGFyc2V0LCAxKTsKKwkJCQlsaGEtPnNjb252X2ZuYW1lID0KIAkJCQkgICAgYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9mcm9tX2NoYXJzZXQoCiAJCQkJCSYoYS0+YXJjaGl2ZSksIGNoYXJzZXQsIDEpOwogCQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmNwKTsKLQkJCQlpZiAobGhhLT5zY29udiA9PSBOVUxMKQorCQkJCWlmIChsaGEtPnNjb252X2RpciA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJCWlmIChsaGEtPnNjb252X2ZuYW1lID09IE5VTEwpCiAJCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJCQl9CiAJCQlicmVhazsKQEAgLTEzMzYsOCArMTQyOSw3IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBFWFRfVElNRVpPTkU6CQkvKiBOb3Qgc3VwcG9ydGVkICovCi0JCWNhc2UgRVhUX1VURjE2X0ZJTEVOQU1FOgkvKiBOb3Qgc3VwcG9ydGVkICovCi0JCWNhc2UgRVhUX1VURjE2X0RJUkVDVE9SWToJLyogTm90IHN1cHBvcnRlZCAqLworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMTYwMCwxOSArMTY5MiwxOSBAQAogICogIHRoZW4gYSBhcmNoaXZlZCBwYXRobmFtZSBpcyAneHh4L2JiYnxhYWEvYmIvY2MnCiAgKi8KIHN0YXRpYyBpbnQKLWxoYV9wYXJzZV9saW5rbmFtZShzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgKmxpbmtuYW1lLAotICAgIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqcGF0aG5hbWUpCitsaGFfcGFyc2VfbGlua25hbWUoc3RydWN0IGFyY2hpdmVfd3N0cmluZyAqbGlua25hbWUsCisgICAgc3RydWN0IGFyY2hpdmVfd3N0cmluZyAqcGF0aG5hbWUpCiB7Ci0JY2hhciAqCWxpbmtwdHI7CisJd2NoYXJfdCAqCWxpbmtwdHI7CiAJc2l6ZV90IAlzeW1sZW47CiAKLQlsaW5rcHRyID0gc3RyY2hyKHBhdGhuYW1lLT5zLCAnfCcpOworCWxpbmtwdHIgPSB3Y3NjaHIocGF0aG5hbWUtPnMsIEwnfCcpOwogCWlmIChsaW5rcHRyICE9IE5VTEwpIHsKLQkJc3ltbGVuID0gc3RybGVuKGxpbmtwdHIgKyAxKTsKLQkJYXJjaGl2ZV9zdHJuY3B5KGxpbmtuYW1lLCBsaW5rcHRyKzEsIHN5bWxlbik7CisJCXN5bWxlbiA9IHdjc2xlbihsaW5rcHRyICsgMSk7CisJCWFyY2hpdmVfd3N0cm5jcHkobGlua25hbWUsIGxpbmtwdHIrMSwgc3ltbGVuKTsKIAogCQkqbGlua3B0ciA9IDA7Ci0JCXBhdGhuYW1lLT5sZW5ndGggPSBzdHJsZW4ocGF0aG5hbWUtPnMpOworCQlwYXRobmFtZS0+bGVuZ3RoID0gd2NzbGVuKHBhdGhuYW1lLT5zKTsKIAogCQlyZXR1cm4gKDEpOwogCX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbXRyZWUuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfbXRyZWUuYwppbmRleCA1YjBlYWRjLi4zMzI5NDRhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X210cmVlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9tdHJlZS5jCkBAIC00NSw2ICs0NSw5IEBACiAjaWZkZWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCisjaWZkZWYgSEFWRV9DVFlQRV9ICisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfZW50cnkuaCIKQEAgLTI1NSw2ICsyNTgsNyBAQAogCQkgICAgIkNhbid0IGFsbG9jYXRlIG10cmVlIGRhdGEiKTsKIAkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAl9CisJbXRyZWUtPmNoZWNrZnMgPSAwOwogCW10cmVlLT5mZCA9IC0xOwogCiAJX19hcmNoaXZlX3JiX3RyZWVfaW5pdCgmbXRyZWUtPnJidHJlZSwgJnJiX29wcyk7CkBAIC0xMDExLDcgKzEwMTUsNyBAQAogewogCXNzaXplX3QgbGVuOwogCXVpbnRtYXhfdCBjb3VudGVyOwotCWNoYXIgKnA7CisJY2hhciAqcCwgKnM7CiAJc3RydWN0IG10cmVlX29wdGlvbiAqZ2xvYmFsOwogCXN0cnVjdCBtdHJlZV9lbnRyeSAqbGFzdF9lbnRyeTsKIAlpbnQgciwgaXNfZm9ybV9kOwpAQCAtMTAyNSw2ICsxMDI5LDcgQEAKIAkodm9pZClkZXRlY3RfZm9ybShhLCAmaXNfZm9ybV9kKTsKIAogCWZvciAoY291bnRlciA9IDE7IDsgKytjb3VudGVyKSB7CisJCXIgPSBBUkNISVZFX09LOwogCQlsZW4gPSByZWFkbGluZShhLCBtdHJlZSwgJnAsIDY1NTM2KTsKIAkJaWYgKGxlbiA9PSAwKSB7CiAJCQltdHJlZS0+dGhpc19lbnRyeSA9IG10cmVlLT5lbnRyaWVzOwpAQCAtMTA0NSw2ICsxMDUwLDE1IEBACiAJCQljb250aW51ZTsKIAkJaWYgKCpwID09ICdccicgfHwgKnAgPT0gJ1xuJyB8fCAqcCA9PSAnXDAnKQogCQkJY29udGludWU7CisJCS8qIE5vbi1wcmludGFibGUgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQgKi8KKwkJZm9yIChzID0gcDtzIDwgcCArIGxlbiAtIDE7IHMrKykgeworCQkJaWYgKCFpc3ByaW50KCpzKSkgeworCQkJCXIgPSBBUkNISVZFX0ZBVEFMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChyICE9IEFSQ0hJVkVfT0spCisJCQlicmVhazsKIAkJaWYgKCpwICE9ICcvJykgewogCQkJciA9IHByb2Nlc3NfYWRkX2VudHJ5KGEsIG10cmVlLCAmZ2xvYmFsLCBwLCBsZW4sCiAJCQkgICAgJmxhc3RfZW50cnksIGlzX2Zvcm1fZCk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIuYwppbmRleCBjNjhkNzdiLi42MWYyMzMwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+IC8qIGNyYzMyICovCisjaW5jbHVkZSA8Y20zcC96bGliLmg+IC8qIGNyYzMyICovCiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTE0OCw2ICsxNDgsOSBAQAogI2RlZmluZSBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkgMHgxMAogI2VuZGlmCiAKKyN1bmRlZiBtaW5pbXVtCisjZGVmaW5lIG1pbmltdW0oYSwgYikJKChhKTwoYik/KGEpOihiKSkKKwogLyogRmllbGRzIGNvbW1vbiB0byBhbGwgaGVhZGVycyAqLwogc3RydWN0IHJhcl9oZWFkZXIKIHsKQEAgLTI1OCw2ICsyNjEsNyBAQAogICBzdHJ1Y3QgZGF0YV9ibG9ja19vZmZzZXRzICpkYm87CiAgIHVuc2lnbmVkIGludCBjdXJzb3I7CiAgIHVuc2lnbmVkIGludCBub2RlczsKKyAgY2hhciBmaWxlbmFtZV9tdXN0X21hdGNoOwogCiAgIC8qIExaU1MgbWVtYmVycyAqLwogICBzdHJ1Y3QgaHVmZm1hbl9jb2RlIG1haW5jb2RlOwpAQCAtMTAyMyw4ICsxMDI3LDExIEBACiAgIGNhc2UgQ09NUFJFU1NfTUVUSE9EX0dPT0Q6CiAgIGNhc2UgQ09NUFJFU1NfTUVUSE9EX0JFU1Q6CiAgICAgcmV0ID0gcmVhZF9kYXRhX2NvbXByZXNzZWQoYSwgYnVmZiwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBpZiAocmV0ICE9IEFSQ0hJVkVfT0sgJiYgcmV0ICE9IEFSQ0hJVkVfV0FSTikKKyAgICBpZiAocmV0ICE9IEFSQ0hJVkVfT0sgJiYgcmV0ICE9IEFSQ0hJVkVfV0FSTikgewogICAgICAgX19hcmNoaXZlX3BwbWQ3X2Z1bmN0aW9ucy5QcG1kN19GcmVlKCZyYXItPnBwbWQ3X2NvbnRleHQpOworICAgICAgcmFyLT5zdGFydF9uZXdfdGFibGUgPSAxOworICAgICAgcmFyLT5wcG1kX3ZhbGlkID0gMDsKKyAgICB9CiAgICAgYnJlYWs7CiAKICAgZGVmYXVsdDoKQEAgLTE1NjAsNiArMTU2NywxMiBAQAogICAgIH0KICAgICByZXR1cm4gcmV0OwogICB9CisgIGVsc2UgaWYgKHJhci0+ZmlsZW5hbWVfbXVzdF9tYXRjaCkKKyAgeworICAgIGFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorICAgICAgIk1pc21hdGNoIG9mIGZpbGUgcGFydHMgc3BsaXQgYWNyb3NzIG11bHRpLXZvbHVtZSBhcmNoaXZlIik7CisgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgfQogCiAgIHJhci0+ZmlsZW5hbWVfc2F2ZSA9IChjaGFyKilyZWFsbG9jKHJhci0+ZmlsZW5hbWVfc2F2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVfc2l6ZSArIDEpOwpAQCAtMTcxMiw2ICsxNzI1LDEzIEBACiAgIHN0cnVjdCB0bSAqdG07CiAgIHRpbWVfdCB0OwogICBsb25nIG5zZWM7CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKSB8fCBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisgIHN0cnVjdCB0bSB0bWJ1ZjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKyAgZXJybm9fdCB0ZXJyOworICBfX3RpbWU2NF90IHRtcHRpbWU7CisjZW5kaWYKIAogICBpZiAocCArIDIgPiBlbmRwKQogICAgIHJldHVybiAoLTEpOwpAQCAtMTc0Myw3ICsxNzYzLDE4IEBACiAgICAgICAgIHJlbSA9ICgoKHVuc2lnbmVkKSh1bnNpZ25lZCBjaGFyKSpwKSA8PCAxNikgfCAocmVtID4+IDgpOwogICAgICAgICBwKys7CiAgICAgICB9CisjaWYgZGVmaW5lZChIQVZFX0xPQ0FMVElNRV9SKQorICAgICAgdG0gPSBsb2NhbHRpbWVfcigmdCwgJnRtYnVmKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKyAgICAgIHRtcHRpbWUgPSB0OworICAgICAgdGVyciA9IF9sb2NhbHRpbWU2NF9zKCZ0bWJ1ZiwgJnRtcHRpbWUpOworICAgICAgaWYgKHRlcnIpCisgICAgICAgIHRtID0gTlVMTDsKKyAgICAgIGVsc2UKKyAgICAgICAgdG0gPSAmdG1idWY7CisjZWxzZQogICAgICAgdG0gPSBsb2NhbHRpbWUoJnQpOworI2VuZGlmCiAgICAgICBuc2VjID0gdG0tPnRtX3NlYyArIHJlbSAvIE5TX1VOSVQ7CiAgICAgICBpZiAocm1vZGUgJiA0KQogICAgICAgewpAQCAtMjMwMCw2ICsyMzMxLDExIEBACiAgICAgICBuZXdfc2l6ZSA9IERJQ1RJT05BUllfTUFYX1NJWkU7CiAgICAgZWxzZQogICAgICAgbmV3X3NpemUgPSByYXJfZmxzKCh1bnNpZ25lZCBpbnQpcmFyLT51bnBfc2l6ZSkgPDwgMTsKKyAgICBpZiAobmV3X3NpemUgPT0gMCkgeworICAgICAgYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAiWmVybyB3aW5kb3cgc2l6ZSBpcyBpbnZhbGlkLiIpOworICAgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKyAgICB9CiAgICAgbmV3X3dpbmRvdyA9IHJlYWxsb2MocmFyLT5senNzLndpbmRvdywgbmV3X3NpemUpOwogICAgIGlmIChuZXdfd2luZG93ID09IE5VTEwpIHsKICAgICAgIGFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCkBAIC0yNDM3LDggKzI0NzMsMTEgQEAKICAgICAgIGlmIChhZGRfdmFsdWUoYSwgY29kZSwgaiwgY29kZWJpdHMsIGkpICE9IEFSQ0hJVkVfT0spCiAgICAgICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAgICAgICBjb2RlYml0cysrOwotICAgICAgaWYgKC0tc3ltYm9sc2xlZnQgPD0gMCkgeyBicmVhazsgYnJlYWs7IH0KKyAgICAgIGlmICgtLXN5bWJvbHNsZWZ0IDw9IDApCisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBpZiAoc3ltYm9sc2xlZnQgPD0gMCkKKyAgICAgIGJyZWFrOwogICAgIGNvZGViaXRzIDw8PSAxOwogICB9CiAgIHJldHVybiAoQVJDSElWRV9PSyk7CkBAIC0yNDQ4LDcgKzI0ODcsOCBAQAogYWRkX3ZhbHVlKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCBodWZmbWFuX2NvZGUgKmNvZGUsIGludCB2YWx1ZSwKICAgICAgICAgICBpbnQgY29kZWJpdHMsIGludCBsZW5ndGgpCiB7Ci0gIGludCByZXBlYXRwb3MsIGxhc3Rub2RlLCBiaXRwb3MsIGJpdCwgcmVwZWF0bm9kZSwgbmV4dG5vZGU7CisgIGludCBsYXN0bm9kZSwgYml0cG9zLCBiaXQ7CisgIC8qIGludCByZXBlYXRwb3MsIHJlcGVhdG5vZGUsIG5leHRub2RlOyAqLwogCiAgIGZyZWUoY29kZS0+dGFibGUpOwogICBjb2RlLT50YWJsZSA9IE5VTEw7CkBAIC0yNDU4LDYgKzI0OTgsOSBAQAogICBpZihsZW5ndGggPCBjb2RlLT5taW5sZW5ndGgpCiAgICAgY29kZS0+bWlubGVuZ3RoID0gbGVuZ3RoOwogCisgIC8qCisgICAqIERlYWQgY29kZSwgcmVwZWF0cG9zIHdhcyBpcyAtMQorICAgKgogICByZXBlYXRwb3MgPSAtMTsKICAgaWYgKHJlcGVhdHBvcyA9PSAwIHx8IChyZXBlYXRwb3MgPj0gMAogICAgICYmICgoKGNvZGViaXRzID4+IChyZXBlYXRwb3MgLSAxKSkgJiAzKSA9PSAwCkBAIC0yNDY3LDYgKzI1MTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHJlcGVhdCBwb3NpdGlvbiIpOwogICAgIHJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAgIH0KKyAgKi8KIAogICBsYXN0bm9kZSA9IDA7CiAgIGZvciAoYml0cG9zID0gbGVuZ3RoIC0gMTsgYml0cG9zID49IDA7IGJpdHBvcy0tKQpAQCAtMjQ4Miw5ICsyNTI2LDEyIEBACiAgICAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogICAgIH0KIAorICAgIC8qCisgICAgICogRGVhZCBjb2RlLCByZXBlYXRwb3Mgd2FzIC0xLCBiaXRwb3MgPj0wCisgICAgICoKICAgICBpZiAoYml0cG9zID09IHJlcGVhdHBvcykKICAgICB7Ci0gICAgICAvKiBPcGVuIGJyYW5jaCBjaGVjayAqLworICAgICAgKiBPcGVuIGJyYW5jaCBjaGVjayAqCiAgICAgICBpZiAoIShjb2RlLT50cmVlW2xhc3Rub2RlXS5icmFuY2hlc1tiaXRdIDwgMCkpCiAgICAgICB7CiAgICAgICAgIGFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULApAQCAtMjUwMywxNiArMjU1MCwxNyBAQAogICAgICAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogICAgICAgfQogCi0gICAgICAvKiBTZXQgYnJhbmNoZXMgKi8KKyAgICAgICogU2V0IGJyYW5jaGVzICoKICAgICAgIGNvZGUtPnRyZWVbbGFzdG5vZGVdLmJyYW5jaGVzW2JpdF0gPSByZXBlYXRub2RlOwogICAgICAgY29kZS0+dHJlZVtyZXBlYXRub2RlXS5icmFuY2hlc1tiaXRdID0gcmVwZWF0bm9kZTsKICAgICAgIGNvZGUtPnRyZWVbcmVwZWF0bm9kZV0uYnJhbmNoZXNbYml0XjFdID0gbmV4dG5vZGU7CiAgICAgICBsYXN0bm9kZSA9IG5leHRub2RlOwogCi0gICAgICBiaXRwb3MrKzsgLyogdGVybWluYXRpbmcgYml0IGFscmVhZHkgaGFuZGxlZCwgc2tpcCBpdCAqLworICAgICAgYml0cG9zKys7ICogdGVybWluYXRpbmcgYml0IGFscmVhZHkgaGFuZGxlZCwgc2tpcCBpdCAqCiAgICAgfQogICAgIGVsc2UKICAgICB7CisgICAgKi8KICAgICAgIC8qIE9wZW4gYnJhbmNoIGNoZWNrICovCiAgICAgICBpZiAoY29kZS0+dHJlZVtsYXN0bm9kZV0uYnJhbmNoZXNbYml0XSA8IDApCiAgICAgICB7CkBAIC0yNTI2LDcgKzI1NzQsNyBAQAogCiAgICAgICAvKiBzZXQgdG8gYnJhbmNoICovCiAgICAgICBsYXN0bm9kZSA9IGNvZGUtPnRyZWVbbGFzdG5vZGVdLmJyYW5jaGVzW2JpdF07Ci0gICAgfQorIC8qIH0gKi8KICAgfQogCiAgIGlmICghKGNvZGUtPnRyZWVbbGFzdG5vZGVdLmJyYW5jaGVzWzBdID09IC0xCkBAIC0yNjEwLDExICsyNjU4LDE1IEBACiAgICAgICB0YWJsZVtpXS52YWx1ZSA9IGNvZGUtPnRyZWVbbm9kZV0uYnJhbmNoZXNbMF07CiAgICAgfQogICB9CisgIC8qCisgICAqIERlYWQgY29kZSwgbm9kZSA+PSAwCisgICAqCiAgIGVsc2UgaWYgKG5vZGUgPCAwKQogICB7CiAgICAgZm9yKGkgPSAwOyBpIDwgY3VycnRhYmxlc2l6ZTsgaSsrKQogICAgICAgdGFibGVbaV0ubGVuZ3RoID0gLTE7CiAgIH0KKyAgICovCiAgIGVsc2UKICAgewogICAgIGlmKGRlcHRoID09IG1heGRlcHRoKQpAQCAtMjY0Niw2ICsyNjk4LDEwIEBACiAgICAgICAwLCAxLCAxLCAxLCAxLCAyLCAyLAogICAgICAgMiwgMiwgMywgMywgMywgMywgNCwKICAgICAgIDQsIDQsIDQsIDUsIDUsIDUsIDUgfTsKKyAgc3RhdGljIGNvbnN0IGludCBsZW5ndGhiX21pbiA9IG1pbmltdW0oCisgICAgKGludCkoc2l6ZW9mKGxlbmd0aGJhc2VzKS9zaXplb2YobGVuZ3RoYmFzZXNbMF0pKSwKKyAgICAoaW50KShzaXplb2YobGVuZ3RoYml0cykvc2l6ZW9mKGxlbmd0aGJpdHNbMF0pKQorICApOwogICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldGJhc2VzW10gPQogICAgIHsgICAgICAgMCwgICAgICAgMSwgICAgICAgMiwgICAgICAgMywgICAgICAgNCwgICAgICAgNiwKICAgICAgICAgICAgIDgsICAgICAgMTIsICAgICAgMTYsICAgICAgMjQsICAgICAgMzIsICAgICAgNDgsCkBAIC0yNjYzLDYgKzI3MTksMTAgQEAKICAgICAgIDExLCAxMSwgMTIsIDEyLCAxMywgMTMsIDE0LCAxNCwgMTUsIDE1LCAxNiwgMTYsCiAgICAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAogICAgICAgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCB9OworICBzdGF0aWMgY29uc3QgaW50IG9mZnNldGJfbWluID0gbWluaW11bSgKKyAgICAoaW50KShzaXplb2Yob2Zmc2V0YmFzZXMpL3NpemVvZihvZmZzZXRiYXNlc1swXSkpLAorICAgIChpbnQpKHNpemVvZihvZmZzZXRiaXRzKS9zaXplb2Yob2Zmc2V0Yml0c1swXSkpCisgICk7CiAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNob3J0YmFzZXNbXSA9CiAgICAgeyAwLCA0LCA4LCAxNiwgMzIsIDY0LCAxMjgsIDE5MiB9OwogICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaG9ydGJpdHNbXSA9CkBAIC0yNzQyLDkgKzI4MDIsNyBAQAogCiAgICAgICBpZiAoKGxlbnN5bWJvbCA9IHJlYWRfbmV4dF9zeW1ib2woYSwgJnJhci0+bGVuZ3RoY29kZSkpIDwgMCkKICAgICAgICAgZ290byBiYWRfZGF0YTsKLSAgICAgIGlmIChsZW5zeW1ib2wgPiAoaW50KShzaXplb2YobGVuZ3RoYmFzZXMpL3NpemVvZihsZW5ndGhiYXNlc1swXSkpKQotICAgICAgICBnb3RvIGJhZF9kYXRhOwotICAgICAgaWYgKGxlbnN5bWJvbCA+IChpbnQpKHNpemVvZihsZW5ndGhiaXRzKS9zaXplb2YobGVuZ3RoYml0c1swXSkpKQorICAgICAgaWYgKGxlbnN5bWJvbCA+IGxlbmd0aGJfbWluKQogICAgICAgICBnb3RvIGJhZF9kYXRhOwogICAgICAgbGVuID0gbGVuZ3RoYmFzZXNbbGVuc3ltYm9sXSArIDI7CiAgICAgICBpZiAobGVuZ3RoYml0c1tsZW5zeW1ib2xdID4gMCkgewpAQCAtMjc3Niw5ICsyODM0LDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGlmIChzeW1ib2wtMjcxID4gKGludCkoc2l6ZW9mKGxlbmd0aGJhc2VzKS9zaXplb2YobGVuZ3RoYmFzZXNbMF0pKSkKLSAgICAgICAgZ290byBiYWRfZGF0YTsKLSAgICAgIGlmIChzeW1ib2wtMjcxID4gKGludCkoc2l6ZW9mKGxlbmd0aGJpdHMpL3NpemVvZihsZW5ndGhiaXRzWzBdKSkpCisgICAgICBpZiAoc3ltYm9sLTI3MSA+IGxlbmd0aGJfbWluKQogICAgICAgICBnb3RvIGJhZF9kYXRhOwogICAgICAgbGVuID0gbGVuZ3RoYmFzZXNbc3ltYm9sLTI3MV0rMzsKICAgICAgIGlmKGxlbmd0aGJpdHNbc3ltYm9sLTI3MV0gPiAwKSB7CkBAIC0yNzkwLDkgKzI4NDYsNyBAQAogCiAgICAgICBpZiAoKG9mZnNzeW1ib2wgPSByZWFkX25leHRfc3ltYm9sKGEsICZyYXItPm9mZnNldGNvZGUpKSA8IDApCiAgICAgICAgIGdvdG8gYmFkX2RhdGE7Ci0gICAgICBpZiAob2Zmc3N5bWJvbCA+IChpbnQpKHNpemVvZihvZmZzZXRiYXNlcykvc2l6ZW9mKG9mZnNldGJhc2VzWzBdKSkpCi0gICAgICAgIGdvdG8gYmFkX2RhdGE7Ci0gICAgICBpZiAob2Zmc3N5bWJvbCA+IChpbnQpKHNpemVvZihvZmZzZXRiaXRzKS9zaXplb2Yob2Zmc2V0Yml0c1swXSkpKQorICAgICAgaWYgKG9mZnNzeW1ib2wgPiBvZmZzZXRiX21pbikKICAgICAgICAgZ290byBiYWRfZGF0YTsKICAgICAgIG9mZnMgPSBvZmZzZXRiYXNlc1tvZmZzc3ltYm9sXSsxOwogICAgICAgaWYob2Zmc2V0Yml0c1tvZmZzc3ltYm9sXSA+IDApCkBAIC0yOTI4LDEyICsyOTgyLDE0IEBACiAgICAgZWxzZSBpZiAoKmF2YWlsID09IDAgJiYgcmFyLT5tYWluX2ZsYWdzICYgTUhEX1ZPTFVNRSAmJgogICAgICAgcmFyLT5maWxlX2ZsYWdzICYgRkhEX1NQTElUX0FGVEVSKQogICAgIHsKKyAgICAgIHJhci0+ZmlsZW5hbWVfbXVzdF9tYXRjaCA9IDE7CiAgICAgICByZXQgPSBhcmNoaXZlX3JlYWRfZm9ybWF0X3Jhcl9yZWFkX2hlYWRlcihhLCBhLT5lbnRyeSk7CiAgICAgICBpZiAocmV0ID09IChBUkNISVZFX0VPRikpCiAgICAgICB7CiAgICAgICAgIHJhci0+aGFzX2VuZGFyY19oZWFkZXIgPSAxOwogICAgICAgICByZXQgPSBhcmNoaXZlX3JlYWRfZm9ybWF0X3Jhcl9yZWFkX2hlYWRlcihhLCBhLT5lbnRyeSk7CiAgICAgICB9CisgICAgICByYXItPmZpbGVuYW1lX211c3RfbWF0Y2ggPSAwOwogICAgICAgaWYgKHJldCAhPSAoQVJDSElWRV9PSykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgcmV0dXJuIHJhcl9yZWFkX2FoZWFkKGEsIG1pbiwgYXZhaWwpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3JhcjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2ExYzFiCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1LmMKQEAgLTAsMCArMSw0MTAzIEBACisvKi0KKyogQ29weXJpZ2h0IChjKSAyMDE4IEdyemVnb3J6IEFudG9uaWFrIChodHRwOi8vYW50b25pYWsub3JnKQorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiYXJjaGl2ZV9wbGF0Zm9ybS5oIgorI2luY2x1ZGUgImFyY2hpdmVfZW5kaWFuLmgiCisKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfWkxJQl9ICisjaW5jbHVkZSA8Y20zcC96bGliLmg+IC8qIGNyYzMyICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX0xJTUlUU19ICisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpZm5kZWYgSEFWRV9aTElCX0gKKyNpbmNsdWRlICJhcmNoaXZlX2NyYzMyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImFyY2hpdmVfZW50cnkuaCIKKyNpbmNsdWRlICJhcmNoaXZlX2VudHJ5X2xvY2FsZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfcHBtZDdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfZW50cnlfcHJpdmF0ZS5oIgorCisjaWZkZWYgSEFWRV9CTEFLRTJfSAorI2luY2x1ZGUgPGJsYWtlMi5oPgorI2Vsc2UKKyNpbmNsdWRlICJhcmNoaXZlX2JsYWtlMi5oIgorI2VuZGlmCisKKy8qI2RlZmluZSBDSEVDS19DUkNfT05fU09MSURfU0tJUCovCisvKiNkZWZpbmUgRE9OVF9GQUlMX09OX0NSQ19FUlJPUiovCisvKiNkZWZpbmUgREVCVUcqLworCisjZGVmaW5lIHJhcjVfbWluKGEsIGIpICgoKGEpID4gKGIpKSA/IChiKSA6IChhKSkKKyNkZWZpbmUgcmFyNV9tYXgoYSwgYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQorI2RlZmluZSByYXI1X2NvdW50b2YoWCkgKChjb25zdCBzc2l6ZV90KSAoc2l6ZW9mKFgpIC8gc2l6ZW9mKCpYKSkpCisKKyNpZiBkZWZpbmVkIERFQlVHCisjZGVmaW5lIERFQlVHX0NPREUgaWYoMSkKKyNkZWZpbmUgTE9HKC4uLikgZG8geyBwcmludGYoInJhcjU6ICIgX19WQV9BUkdTX18pOyBwdXRzKCIiKTsgfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfQ09ERSBpZigwKQorI2VuZGlmCisKKy8qIFJlYWwgUkFSNSBtYWdpYyBudW1iZXIgaXM6CisgKgorICogMHg1MiwgMHg2MSwgMHg3MiwgMHgyMSwgMHgxYSwgMHgwNywgMHgwMSwgMHgwMAorICogIlJhciHihpLigKLimLrCt1x4MDAiCisgKgorICogUmV0cmlldmVkIHdpdGggYHJhcjVfc2lnbmF0dXJlKClgIGJ5IFhPUidpbmcgaXQgd2l0aCAweEExLCBiZWNhdXNlIEkgZG9uJ3QKKyAqIHdhbnQgdG8gcHV0IHRoaXMgbWFnaWMgc2VxdWVuY2UgaW4gZWFjaCBiaW5hcnkgdGhhdCB1c2VzIGxpYmFyY2hpdmUsIHNvCisgKiBhcHBsaWNhdGlvbnMgdGhhdCBzY2FuIHRocm91Z2ggdGhlIGZpbGUgZm9yIHRoaXMgbWFya2VyIHdvbid0IHRyaWdnZXIgb24KKyAqIHRoaXMgImZhbHNlIiBvbmUuCisgKgorICogVGhlIGFycmF5IGl0c2VsZiBpcyBkZWNyeXB0ZWQgaW4gYHJhcjVfaW5pdGAgZnVuY3Rpb24uICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHJhcjVfc2lnbmF0dXJlX3hvcltdID0geyAyNDMsIDE5MiwgMjExLCAxMjgsIDE4NywgMTY2LCAxNjAsIDE2MSB9Oworc3RhdGljIGNvbnN0IHNpemVfdCBnX3VucGFja193aW5kb3dfc2l6ZSA9IDB4MjAwMDA7CisKKy8qIFRoZXNlIGNvdWxkIGhhdmUgYmVlbiBzdGF0aWMgY29uc3QncywgYnV0IHRoZXkgYXJlbid0LCBiZWNhdXNlIG9mCisgKiBWaXN1YWwgU3R1ZGlvLiAqLworI2RlZmluZSBNQVhfTkFNRV9JTl9DSEFSUyAyMDQ4CisjZGVmaW5lIE1BWF9OQU1FX0lOX0JZVEVTICg0ICogTUFYX05BTUVfSU5fQ0hBUlMpCisKK3N0cnVjdCBmaWxlX2hlYWRlciB7CisJc3NpemVfdCBieXRlc19yZW1haW5pbmc7CisJc3NpemVfdCB1bnBhY2tlZF9zaXplOworCWludDY0X3QgbGFzdF9vZmZzZXQ7ICAgICAgICAgLyogVXNlZCBpbiBzYW5pdHkgY2hlY2tzLiAqLworCWludDY0X3QgbGFzdF9zaXplOyAgICAgICAgICAgLyogVXNlZCBpbiBzYW5pdHkgY2hlY2tzLiAqLworCisJdWludDhfdCBzb2xpZCA6IDE7ICAgICAgICAgICAvKiBJcyB0aGlzIGEgc29saWQgc3RyZWFtPyAqLworCXVpbnQ4X3Qgc2VydmljZSA6IDE7ICAgICAgICAgLyogSXMgdGhpcyBmaWxlIGEgc2VydmljZSBkYXRhPyAqLworCXVpbnQ4X3QgZW9mIDogMTsgICAgICAgICAgICAgLyogRGlkIHdlIGZpbmlzaCB1bnBhY2tpbmcgdGhlIGZpbGU/ICovCisJdWludDhfdCBkaXIgOiAxOyAgICAgICAgICAgICAvKiBJcyB0aGlzIGZpbGUgZW50cnkgYSBkaXJlY3Rvcnk/ICovCisKKwkvKiBPcHRpb25hbCB0aW1lIGZpZWxkcy4gKi8KKwl1aW50NjRfdCBlX210aW1lOworCXVpbnQ2NF90IGVfY3RpbWU7CisJdWludDY0X3QgZV9hdGltZTsKKwl1aW50MzJfdCBlX3VuaXhfbnM7CisKKwkvKiBPcHRpb25hbCBoYXNoIGZpZWxkcy4gKi8KKwl1aW50MzJfdCBzdG9yZWRfY3JjMzI7CisJdWludDMyX3QgY2FsY3VsYXRlZF9jcmMzMjsKKwl1aW50OF90IGJsYWtlMnNwWzMyXTsKKwlibGFrZTJzcF9zdGF0ZSBiMnN0YXRlOworCWNoYXIgaGFzX2JsYWtlMjsKKworCS8qIE9wdGlvbmFsIHJlZGlyIGZpZWxkcyAqLworCXVpbnQ2NF90IHJlZGlyX3R5cGU7CisJdWludDY0X3QgcmVkaXJfZmxhZ3M7CisKKwlzc2l6ZV90IHNvbGlkX3dpbmRvd19zaXplOyAvKiBVc2VkIGluIGZpbGUgZm9ybWF0IGNoZWNrLiAqLworfTsKKworZW51bSBFWFRSQSB7CisJRVhfQ1JZUFQgPSAweDAxLAorCUVYX0hBU0ggPSAweDAyLAorCUVYX0hUSU1FID0gMHgwMywKKwlFWF9WRVJTSU9OID0gMHgwNCwKKwlFWF9SRURJUiA9IDB4MDUsCisJRVhfVU9XTkVSID0gMHgwNiwKKwlFWF9TVUJEQVRBID0gMHgwNworfTsKKworI2RlZmluZSBSRURJUl9TWU1MSU5LX0lTX0RJUgkxCisKK2VudW0gUkVESVJfVFlQRSB7CisJUkVESVJfVFlQRV9OT05FID0gMCwKKwlSRURJUl9UWVBFX1VOSVhTWU1MSU5LID0gMSwKKwlSRURJUl9UWVBFX1dJTlNZTUxJTksgPSAyLAorCVJFRElSX1RZUEVfSlVOQ1RJT04gPSAzLAorCVJFRElSX1RZUEVfSEFSRExJTksgPSA0LAorCVJFRElSX1RZUEVfRklMRUNPUFkgPSA1LAorfTsKKworI2RlZmluZQlPV05FUl9VU0VSX05BTUUJCTB4MDEKKyNkZWZpbmUJT1dORVJfR1JPVVBfTkFNRQkweDAyCisjZGVmaW5lCU9XTkVSX1VTRVJfVUlECQkweDA0CisjZGVmaW5lCU9XTkVSX0dST1VQX0dJRAkJMHgwOAorI2RlZmluZQlPV05FUl9NQVhOQU1FTEVOCTI1NgorCitlbnVtIEZJTFRFUl9UWVBFIHsKKwlGSUxURVJfREVMVEEgPSAwLCAgIC8qIEdlbmVyaWMgcGF0dGVybi4gKi8KKwlGSUxURVJfRTggICAgPSAxLCAgIC8qIEludGVsIHg4NiBjb2RlLiAqLworCUZJTFRFUl9FOEU5ICA9IDIsICAgLyogSW50ZWwgeDg2IGNvZGUuICovCisJRklMVEVSX0FSTSAgID0gMywgICAvKiBBUk0gY29kZS4gKi8KKwlGSUxURVJfQVVESU8gPSA0LCAgIC8qIEF1ZGlvIGZpbHRlciwgbm90IHVzZWQgaW4gUkFSdjUuICovCisJRklMVEVSX1JHQiAgID0gNSwgICAvKiBDb2xvciBwYWxldHRlLCBub3QgdXNlZCBpbiBSQVJ2NS4gKi8KKwlGSUxURVJfSVRBTklVTSA9IDYsIC8qIEludGVsJ3MgSXRhbml1bSwgbm90IHVzZWQgaW4gUkFSdjUuICovCisJRklMVEVSX1BQTSAgID0gNywgICAvKiBQcmVkaWN0aXZlIHBhdHRlcm4gbWF0Y2hpbmcsIG5vdCB1c2VkIGluCisJCQkgICAgICAgUkFSdjUuICovCisJRklMVEVSX05PTkUgID0gOCwKK307CisKK3N0cnVjdCBmaWx0ZXJfaW5mbyB7CisJaW50IHR5cGU7CisJaW50IGNoYW5uZWxzOworCWludCBwb3NfcjsKKworCWludDY0X3QgYmxvY2tfc3RhcnQ7CisJc3NpemVfdCBibG9ja19sZW5ndGg7CisJdWludDE2X3Qgd2lkdGg7Cit9OworCitzdHJ1Y3QgZGF0YV9yZWFkeSB7CisJY2hhciB1c2VkOworCWNvbnN0IHVpbnQ4X3QqIGJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQ2NF90IG9mZnNldDsKK307CisKK3N0cnVjdCBjZGVxdWUgeworCXVpbnQxNl90IGJlZ19wb3M7CisJdWludDE2X3QgZW5kX3BvczsKKwl1aW50MTZfdCBjYXBfbWFzazsKKwl1aW50MTZfdCBzaXplOworCXNpemVfdCogYXJyOworfTsKKworc3RydWN0IGRlY29kZV90YWJsZSB7CisJdWludDMyX3Qgc2l6ZTsKKwlpbnQzMl90IGRlY29kZV9sZW5bMTZdOworCXVpbnQzMl90IGRlY29kZV9wb3NbMTZdOworCXVpbnQzMl90IHF1aWNrX2JpdHM7CisJdWludDhfdCBxdWlja19sZW5bMSA8PCAxMF07CisJdWludDE2X3QgcXVpY2tfbnVtWzEgPDwgMTBdOworCXVpbnQxNl90IGRlY29kZV9udW1bMzA2XTsKK307CisKK3N0cnVjdCBjb21wX3N0YXRlIHsKKwkvKiBGbGFnIHVzZWQgdG8gc3BlY2lmeSBpZiB1bnBhY2tlciBuZWVkcyB0byByZWluaXRpYWxpemUgdGhlCisJICAgdW5jb21wcmVzc2lvbiBjb250ZXh0LiAqLworCXVpbnQ4X3QgaW5pdGlhbGl6ZWQgOiAxOworCisJLyogRmxhZyB1c2VkIHdoZW4gYXBwbHlpbmcgZmlsdGVycy4gKi8KKwl1aW50OF90IGFsbF9maWx0ZXJzX2FwcGxpZWQgOiAxOworCisJLyogRmxhZyB1c2VkIHRvIHNraXAgZmlsZSBjb250ZXh0IHJlaW5pdGlhbGl6YXRpb24sIHVzZWQgd2hlbiB1bnBhY2tlcgorCSAgIGlzIHNraXBwaW5nIHRocm91Z2ggZGlmZmVyZW50IG11bHRpdm9sdW1lIGFyY2hpdmVzLiAqLworCXVpbnQ4X3Qgc3dpdGNoX211bHRpdm9sdW1lIDogMTsKKworCS8qIEZsYWcgdXNlZCB0byBzcGVjaWZ5IGlmIHVucGFja2VyIGhhcyBwcm9jZXNzZWQgdGhlIHdob2xlIGRhdGEgYmxvY2sKKwkgICBvciBqdXN0IGEgcGFydCBvZiBpdC4gKi8KKwl1aW50OF90IGJsb2NrX3BhcnNpbmdfZmluaXNoZWQgOiAxOworCisJc2lnbmVkIGludCBub3R1c2VkIDogNDsKKworCWludCBmbGFnczsgICAgICAgICAgICAgICAgICAgLyogVW5jb21wcmVzc2lvbiBmbGFncy4gKi8KKwlpbnQgbWV0aG9kOyAgICAgICAgICAgICAgICAgIC8qIFVuY29tcHJlc3Npb24gYWxnb3JpdGhtIG1ldGhvZC4gKi8KKwlpbnQgdmVyc2lvbjsgICAgICAgICAgICAgICAgIC8qIFVuY29tcHJlc3Npb24gYWxnb3JpdGhtIHZlcnNpb24uICovCisJc3NpemVfdCB3aW5kb3dfc2l6ZTsgICAgICAgICAvKiBTaXplIG9mIHdpbmRvd19idWYuICovCisJdWludDhfdCogd2luZG93X2J1ZjsgICAgICAgICAvKiBDaXJjdWxhciBidWZmZXIgdXNlZCBkdXJpbmcKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3Npb24uICovCisJdWludDhfdCogZmlsdGVyZWRfYnVmOyAgICAgICAvKiBCdWZmZXIgdXNlZCB3aGVuIGFwcGx5aW5nIGZpbHRlcnMuICovCisJY29uc3QgdWludDhfdCogYmxvY2tfYnVmOyAgICAvKiBCdWZmZXIgdXNlZCB3aGVuIG1lcmdpbmcgYmxvY2tzLiAqLworCXNpemVfdCB3aW5kb3dfbWFzazsgICAgICAgICAgLyogQ29udmVuaWVuY2UgZmllbGQ7IHdpbmRvd19zaXplIC0gMS4gKi8KKwlpbnQ2NF90IHdyaXRlX3B0cjsgICAgICAgICAgIC8qIFRoaXMgYW1vdW50IG9mIGRhdGEgaGFzIGJlZW4gdW5wYWNrZWQKKwkJCQkJaW4gdGhlIHdpbmRvdyBidWZmZXIuICovCisJaW50NjRfdCBsYXN0X3dyaXRlX3B0cjsgICAgICAvKiBUaGlzIGFtb3VudCBvZiBkYXRhIGhhcyBiZWVuIHN0b3JlZCBpbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG91dHB1dCBmaWxlLiAqLworCWludDY0X3QgbGFzdF91bnN0b3JlX3B0cjsgICAgLyogQ291bnRlciBvZiBieXRlcyBleHRyYWN0ZWQgZHVyaW5nCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN0b3JpbmcuIFRoaXMgaXMgc2VwYXJhdGUgZnJvbQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF93cml0ZV9wdHIgYmVjYXVzZSBvZiBob3cgU0VSVklDRQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSBibG9ja3MgYXJlIGhhbmRsZWQgZHVyaW5nIHNraXBwaW5nCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBzb2xpZCBtdWx0aWFyY2hpdmUgYXJjaGl2ZXMuICovCisJaW50NjRfdCBzb2xpZF9vZmZzZXQ7ICAgICAgICAvKiBBZGRpdGlvbmFsIG9mZnNldCBpbnNpZGUgdGhlIHdpbmRvdworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCB1c2VkIGluIHVucGFja2luZyBzb2xpZAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZXMuICovCisJc3NpemVfdCBjdXJfYmxvY2tfc2l6ZTsgICAgICAvKiBTaXplIG9mIGN1cnJlbnQgZGF0YSBibG9jay4gKi8KKwlpbnQgbGFzdF9sZW47ICAgICAgICAgICAgICAgIC8qIEZsYWcgdXNlZCBpbiBsenNzIGRlY29tcHJlc3Npb24uICovCisKKwkvKiBEZWNvZGUgdGFibGVzIHVzZWQgZHVyaW5nIGx6c3MgdW5jb21wcmVzc2lvbi4gKi8KKworI2RlZmluZSBIVUZGX0JDIDIwCisJc3RydWN0IGRlY29kZV90YWJsZSBiZDsgICAgICAvKiBodWZmbWFuIGJpdCBsZW5ndGhzICovCisjZGVmaW5lIEhVRkZfTkMgMzA2CisJc3RydWN0IGRlY29kZV90YWJsZSBsZDsgICAgICAvKiBsaXRlcmFscyAqLworI2RlZmluZSBIVUZGX0RDIDY0CisJc3RydWN0IGRlY29kZV90YWJsZSBkZDsgICAgICAvKiBkaXN0YW5jZXMgKi8KKyNkZWZpbmUgSFVGRl9MREMgMTYKKwlzdHJ1Y3QgZGVjb2RlX3RhYmxlIGxkZDsgICAgIC8qIGxvd2VyIGJpdHMgb2YgZGlzdGFuY2VzICovCisjZGVmaW5lIEhVRkZfUkMgNDQKKwlzdHJ1Y3QgZGVjb2RlX3RhYmxlIHJkOyAgICAgIC8qIHJlcGVhdGluZyBkaXN0YW5jZXMgKi8KKyNkZWZpbmUgSFVGRl9UQUJMRV9TSVpFIChIVUZGX05DICsgSFVGRl9EQyArIEhVRkZfUkMgKyBIVUZGX0xEQykKKworCS8qIENpcmN1bGFyIGRlcXVlIGZvciBzdG9yaW5nIGZpbHRlcnMuICovCisJc3RydWN0IGNkZXF1ZSBmaWx0ZXJzOworCWludDY0X3QgbGFzdF9ibG9ja19zdGFydDsgICAgLyogVXNlZCBmb3Igc2FuaXR5IGNoZWNraW5nLiAqLworCXNzaXplX3QgbGFzdF9ibG9ja19sZW5ndGg7ICAgLyogVXNlZCBmb3Igc2FuaXR5IGNoZWNraW5nLiAqLworCisJLyogRGlzdGFuY2UgY2FjaGUgdXNlZCBkdXJpbmcgbHpzcyB1bmNvbXByZXNzaW9uLiAqLworCWludCBkaXN0X2NhY2hlWzRdOworCisJLyogRGF0YSBidWZmZXIgc3RhY2suICovCisJc3RydWN0IGRhdGFfcmVhZHkgZHJlYWR5WzJdOworfTsKKworLyogQml0IHJlYWRlciBzdGF0ZS4gKi8KK3N0cnVjdCBiaXRfcmVhZGVyIHsKKwlpbnQ4X3QgYml0X2FkZHI7ICAgIC8qIEN1cnJlbnQgYml0IHBvaW50ZXIgaW5zaWRlIGN1cnJlbnQgYnl0ZS4gKi8KKwlpbnQgaW5fYWRkcjsgICAgICAgIC8qIEN1cnJlbnQgYnl0ZSBwb2ludGVyLiAqLworfTsKKworLyogUkFSdjUgYmxvY2sgaGVhZGVyIHN0cnVjdHVyZS4gVXNlIGJmXyogZnVuY3Rpb25zIHRvIGdldCB2YWx1ZXMgZnJvbQorICogYmxvY2tfZmxhZ3NfdTggZmllbGQuIEkuZS4gYmZfYnl0ZV9jb3VudCwgZXRjLiAqLworc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyIHsKKwkvKiBibG9ja19mbGFnc191OCBjb250YWluIGZpZWxkcyBlbmNvZGVkIGluIGxpdHRsZS1lbmRpYW4gYml0ZmllbGQ6CisJICoKKwkgKiAtIHRhYmxlIHByZXNlbnQgZmxhZyAoc2hyIDcsIGFuZCAxKSwKKwkgKiAtIGxhc3QgYmxvY2sgZmxhZyAgICAoc2hyIDYsIGFuZCAxKSwKKwkgKiAtIGJ5dGVfY291bnQgICAgICAgICAoc2hyIDMsIGFuZCA3KSwKKwkgKiAtIGJpdF9zaXplICAgICAgICAgICAoc2hyIDAsIGFuZCA3KS4KKwkgKi8KKwl1aW50OF90IGJsb2NrX2ZsYWdzX3U4OworCXVpbnQ4X3QgYmxvY2tfY2tzdW07Cit9OworCisvKiBSQVJ2NSBtYWluIGhlYWRlciBzdHJ1Y3R1cmUuICovCitzdHJ1Y3QgbWFpbl9oZWFkZXIgeworCS8qIERvZXMgdGhlIGFyY2hpdmUgY29udGFpbiBzb2xpZCBzdHJlYW1zPyAqLworCXVpbnQ4X3Qgc29saWQgOiAxOworCisJLyogSWYgdGhpcyBhIG11bHRpLWZpbGUgYXJjaGl2ZT8gKi8KKwl1aW50OF90IHZvbHVtZSA6IDE7CisJdWludDhfdCBlbmRhcmMgOiAxOworCXVpbnQ4X3Qgbm90dXNlZCA6IDU7CisKKwl1bnNpZ25lZCBpbnQgdm9sX25vOworfTsKKworc3RydWN0IGdlbmVyaWNfaGVhZGVyIHsKKwl1aW50OF90IHNwbGl0X2FmdGVyIDogMTsKKwl1aW50OF90IHNwbGl0X2JlZm9yZSA6IDE7CisJdWludDhfdCBwYWRkaW5nIDogNjsKKwlpbnQgc2l6ZTsKKwlpbnQgbGFzdF9oZWFkZXJfaWQ7Cit9OworCitzdHJ1Y3QgbXVsdGl2b2x1bWUgeworCXVuc2lnbmVkIGludCBleHBlY3RlZF92b2xfbm87CisJdWludDhfdCogcHVzaF9idWY7Cit9OworCisvKiBNYWluIGNvbnRleHQgc3RydWN0dXJlLiAqLworc3RydWN0IHJhcjUgeworCWludCBoZWFkZXJfaW5pdGlhbGl6ZWQ7CisKKwkvKiBTZXQgdG8gMSBpZiBjdXJyZW50IGZpbGUgaXMgcG9zaXRpb25lZCBBRlRFUiB0aGUgbWFnaWMgdmFsdWUKKwkgKiBvZiB0aGUgYXJjaGl2ZSBmaWxlLiBUaGlzIGlzIHVzZWQgaW4gaGVhZGVyIHJlYWRpbmcgZnVuY3Rpb25zLiAqLworCWludCBza2lwcGVkX21hZ2ljOworCisJLyogU2V0IHRvIG5vdCB6ZXJvIGlmIHdlJ3JlIGluIHNraXAgbW9kZSAoZWl0aGVyIGJ5IGNhbGxpbmcKKwkgKiByYXI1X2RhdGFfc2tpcCBmdW5jdGlvbiBvciB3aGVuIHNraXBwaW5nIG92ZXIgc29saWQgc3RyZWFtcykuCisJICogU2V0IHRvIDAgd2hlbiBpbiAqIGV4dHJhY3Rpb24gbW9kZS4gVGhpcyBpcyB1c2VkIGR1cmluZyBjaGVja3N1bQorCSAqIGNhbGN1bGF0aW9uIGZ1bmN0aW9ucy4gKi8KKwlpbnQgc2tpcF9tb2RlOworCisJLyogU2V0IHRvIG5vdCB6ZXJvIGlmIHdlJ3JlIGluIGJsb2NrIG1lcmdpbmcgbW9kZSAoaS5lLiB3aGVuIHN3aXRjaGluZworCSAqIHRvIGFub3RoZXIgZmlsZSBpbiBtdWx0aXZvbHVtZSBhcmNoaXZlLCBsYXN0IGJsb2NrIGZyb20gMXN0IGFyY2hpdmUKKwkgKiBuZWVkcyB0byBiZSBtZXJnZWQgd2l0aCAxc3QgYmxvY2sgZnJvbSAybmQgYXJjaGl2ZSkuIFRoaXMgZmxhZworCSAqIGd1YXJkcyBhZ2FpbnN0IHJlY3Vyc2l2ZSB1c2Ugb2YgdGhlIG1lcmdpbmcgZnVuY3Rpb24sIHdoaWNoIGRvZXNuJ3QKKwkgKiBzdXBwb3J0IHJlY3Vyc2l2ZSBjYWxscy4gKi8KKwlpbnQgbWVyZ2VfbW9kZTsKKworCS8qIEFuIG9mZnNldCB0byBRdWlja09wZW4gbGlzdC4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdW5wYWNrZXIsCisJICogYmVjYXVzZSB3ZSdyZSBmb2N1c2luZyBvbiBzdHJlYW1pbmcgaW50ZXJmYWNlLiBRdWlja09wZW4gaXMgZGVzaWduZWQKKwkgKiB0byBtYWtlIHRoaW5ncyBxdWlja2VyIGZvciBub24tc3RyZWFtIGludGVyZmFjZXMsIHNvIGl0J3Mgbm90IG91cgorCSAqIHVzZSBjYXNlLiAqLworCXVpbnQ2NF90IHFsaXN0X29mZnNldDsKKworCS8qIEFuIG9mZnNldCB0byBhZGRpdGlvbmFsIFJlY292ZXJ5IGRhdGEuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzCisJICogdW5wYWNrZXIuIFJlY292ZXJ5IGRhdGEgYXJlIGFkZGl0aW9uYWwgUmVlZC1Tb2xvbW9uIGNvZGVzIHRoYXQgY291bGQKKwkgKiBiZSB1c2VkIHRvIGNhbGN1bGF0ZSBieXRlcyB0aGF0IGFyZSBtaXNzaW5nIGluIGFyY2hpdmUgb3IgYXJlCisJICogY29ycnVwdGVkLiAqLworCXVpbnQ2NF90IHJyX29mZnNldDsKKworCS8qIFZhcmlvdXMgY29udGV4dCB2YXJpYWJsZXMgZ3JvdXBlZCB0byBkaWZmZXJlbnQgc3RydWN0dXJlcy4gKi8KKwlzdHJ1Y3QgZ2VuZXJpY19oZWFkZXIgZ2VuZXJpYzsKKwlzdHJ1Y3QgbWFpbl9oZWFkZXIgbWFpbjsKKwlzdHJ1Y3QgY29tcF9zdGF0ZSBjc3RhdGU7CisJc3RydWN0IGZpbGVfaGVhZGVyIGZpbGU7CisJc3RydWN0IGJpdF9yZWFkZXIgYml0czsKKwlzdHJ1Y3QgbXVsdGl2b2x1bWUgdm9sOworCisJLyogVGhlIGhlYWRlciBvZiBjdXJyZW50bHkgcHJvY2Vzc2VkIFJBUnY1IGJsb2NrLiBVc2VkIGluIG1haW4KKwkgKiBkZWNvbXByZXNzaW9uIGxvZ2ljIGxvb3AuICovCisJc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyIGxhc3RfYmxvY2tfaGRyOworfTsKKworLyogRm9yd2FyZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuICovCisKK3N0YXRpYyB2b2lkIHJhcjVfc2lnbmF0dXJlKGNoYXIgKmJ1Zik7CitzdGF0aWMgaW50IHZlcmlmeV9nbG9iYWxfY2hlY2tzdW1zKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpOworc3RhdGljIGludCByYXI1X3JlYWRfZGF0YV9za2lwKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEpOworc3RhdGljIGludCBwdXNoX2RhdGFfcmVhZHkoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKwljb25zdCB1aW50OF90KiBidWYsIHNpemVfdCBzaXplLCBpbnQ2NF90IG9mZnNldCk7CisKKy8qIENERV94eHggPSBDaXJjdWxhciBEb3VibGUgRW5kZWQgKFF1ZXVlKSByZXR1cm4gdmFsdWVzLiAqLworZW51bSBDREVfUkVUVVJOX1ZBTFVFUyB7CisJQ0RFX09LLCBDREVfQUxMT0MsIENERV9QQVJBTSwgQ0RFX09VVF9PRl9CT1VORFMsCit9OworCisvKiBDbGVhcnMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgY2lyY3VsYXIgZGVxdWUuICovCitzdGF0aWMgdm9pZCBjZGVxdWVfY2xlYXIoc3RydWN0IGNkZXF1ZSogZCkgeworCWQtPnNpemUgPSAwOworCWQtPmJlZ19wb3MgPSAwOworCWQtPmVuZF9wb3MgPSAwOworfQorCisvKiBDcmVhdGVzIGEgbmV3IGNpcmN1bGFyIGRlcXVlIG9iamVjdC4gQ2FwYWNpdHkgbXVzdCBiZSBwb3dlciBvZiAyOiA4LCAxNiwgMzIsCisgKiA2NCwgMjU2LCBldGMuIFdoZW4gdGhlIHVzZXIgd2lsbCBhZGQgYW5vdGhlciBpdGVtIGFib3ZlIGN1cnJlbnQgY2FwYWNpdHksCisgKiB0aGUgY2lyY3VsYXIgZGVxdWUgd2lsbCBvdmVyd3JpdGUgdGhlIG9sZGVzdCBlbnRyeS4gKi8KK3N0YXRpYyBpbnQgY2RlcXVlX2luaXQoc3RydWN0IGNkZXF1ZSogZCwgaW50IG1heF9jYXBhY2l0eV9wb3dlcl9vZl8yKSB7CisJaWYoZCA9PSBOVUxMIHx8IG1heF9jYXBhY2l0eV9wb3dlcl9vZl8yID09IDApCisJCXJldHVybiBDREVfUEFSQU07CisKKwlkLT5jYXBfbWFzayA9IG1heF9jYXBhY2l0eV9wb3dlcl9vZl8yIC0gMTsKKwlkLT5hcnIgPSBOVUxMOworCisJaWYoKG1heF9jYXBhY2l0eV9wb3dlcl9vZl8yICYgZC0+Y2FwX21hc2spICE9IDApCisJCXJldHVybiBDREVfUEFSQU07CisKKwljZGVxdWVfY2xlYXIoZCk7CisJZC0+YXJyID0gbWFsbG9jKHNpemVvZih2b2lkKikgKiBtYXhfY2FwYWNpdHlfcG93ZXJfb2ZfMik7CisKKwlyZXR1cm4gZC0+YXJyID8gQ0RFX09LIDogQ0RFX0FMTE9DOworfQorCisvKiBSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSAobm90IGNhcGFjaXR5KSBvZiBjaXJjdWxhciBkZXF1ZSBgZGAuICovCitzdGF0aWMgc2l6ZV90IGNkZXF1ZV9zaXplKHN0cnVjdCBjZGVxdWUqIGQpIHsKKwlyZXR1cm4gZC0+c2l6ZTsKK30KKworLyogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBjdXJyZW50IGNpcmN1bGFyIGRlcXVlLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbgorICogZG9lc24ndCBwZXJmb3JtIGFueSBib3VuZHMgY2hlY2tpbmcuIElmIHlvdSBuZWVkIGJvdW5kcyBjaGVja2luZywgdXNlCisgKiBgY2RlcXVlX2Zyb250KClgIGZ1bmN0aW9uIGluc3RlYWQuICovCitzdGF0aWMgdm9pZCBjZGVxdWVfZnJvbnRfZmFzdChzdHJ1Y3QgY2RlcXVlKiBkLCB2b2lkKiogdmFsdWUpIHsKKwkqdmFsdWUgPSAodm9pZCopIGQtPmFycltkLT5iZWdfcG9zXTsKK30KKworLyogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBjdXJyZW50IGNpcmN1bGFyIGRlcXVlLiBUaGlzIGZ1bmN0aW9uCisgKiBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcuICovCitzdGF0aWMgaW50IGNkZXF1ZV9mcm9udChzdHJ1Y3QgY2RlcXVlKiBkLCB2b2lkKiogdmFsdWUpIHsKKwlpZihkLT5zaXplID4gMCkgeworCQljZGVxdWVfZnJvbnRfZmFzdChkLCB2YWx1ZSk7CisJCXJldHVybiBDREVfT0s7CisJfSBlbHNlCisJCXJldHVybiBDREVfT1VUX09GX0JPVU5EUzsKK30KKworLyogUHVzaGVzIGEgbmV3IGVsZW1lbnQgaW50byB0aGUgZW5kIG9mIHRoaXMgY2lyY3VsYXIgZGVxdWUgb2JqZWN0LiBJZiBjdXJyZW50CisgKiBzaXplIHdpbGwgZXhjZWVkIGNhcGFjaXR5LCB0aGUgb2xkZXN0IGVsZW1lbnQgd2lsbCBiZSBvdmVyd3JpdHRlbi4gKi8KK3N0YXRpYyBpbnQgY2RlcXVlX3B1c2hfYmFjayhzdHJ1Y3QgY2RlcXVlKiBkLCB2b2lkKiBpdGVtKSB7CisJaWYoZCA9PSBOVUxMKQorCQlyZXR1cm4gQ0RFX1BBUkFNOworCisJaWYoZC0+c2l6ZSA9PSBkLT5jYXBfbWFzayArIDEpCisJCXJldHVybiBDREVfT1VUX09GX0JPVU5EUzsKKworCWQtPmFycltkLT5lbmRfcG9zXSA9IChzaXplX3QpIGl0ZW07CisJZC0+ZW5kX3BvcyA9IChkLT5lbmRfcG9zICsgMSkgJiBkLT5jYXBfbWFzazsKKwlkLT5zaXplKys7CisKKwlyZXR1cm4gQ0RFX09LOworfQorCisvKiBQb3BzIGEgZnJvbnQgZWxlbWVudCBvZiB0aGlzIGNpcmN1bGFyIGRlcXVlIG9iamVjdCBhbmQgcmV0dXJucyBpdHMgdmFsdWUuCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcGVyZm9ybSBhbnkgYm91bmRzIGNoZWNraW5nLiAqLworc3RhdGljIHZvaWQgY2RlcXVlX3BvcF9mcm9udF9mYXN0KHN0cnVjdCBjZGVxdWUqIGQsIHZvaWQqKiB2YWx1ZSkgeworCSp2YWx1ZSA9ICh2b2lkKikgZC0+YXJyW2QtPmJlZ19wb3NdOworCWQtPmJlZ19wb3MgPSAoZC0+YmVnX3BvcyArIDEpICYgZC0+Y2FwX21hc2s7CisJZC0+c2l6ZS0tOworfQorCisvKiBQb3BzIGEgZnJvbnQgZWxlbWVudCBvZiB0aGlzIGNpcmN1bGFyIGRlcXVlIG9iamVjdCBhbmQgcmV0dXJucyBpdHMgdmFsdWUuCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGJvdW5kcyBjaGVja2luZy4gKi8KK3N0YXRpYyBpbnQgY2RlcXVlX3BvcF9mcm9udChzdHJ1Y3QgY2RlcXVlKiBkLCB2b2lkKiogdmFsdWUpIHsKKwlpZighZCB8fCAhdmFsdWUpCisJCXJldHVybiBDREVfUEFSQU07CisKKwlpZihkLT5zaXplID09IDApCisJCXJldHVybiBDREVfT1VUX09GX0JPVU5EUzsKKworCWNkZXF1ZV9wb3BfZnJvbnRfZmFzdChkLCB2YWx1ZSk7CisJcmV0dXJuIENERV9PSzsKK30KKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY2FzdCBmaWx0ZXJfaW5mbyoqIHRvIHZvaWQgKiouICovCitzdGF0aWMgdm9pZCoqIGNkZXF1ZV9maWx0ZXJfcChzdHJ1Y3QgZmlsdGVyX2luZm8qKiBmKSB7CisJcmV0dXJuICh2b2lkKiopIChzaXplX3QpIGY7Cit9CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNhc3QgZmlsdGVyX2luZm8qIHRvIHZvaWQgKi4gKi8KK3N0YXRpYyB2b2lkKiBjZGVxdWVfZmlsdGVyKHN0cnVjdCBmaWx0ZXJfaW5mbyogZikgeworCXJldHVybiAodm9pZCoqKSAoc2l6ZV90KSBmOworfQorCisvKiBEZXN0cm95cyB0aGlzIGNpcmN1bGFyIGRlcXVlIG9iamVjdC4gRGVhbGxvY2F0ZXMgdGhlIG1lbW9yeSBvZiB0aGUKKyAqIGNvbGxlY3Rpb24gYnVmZmVyLCBidXQgZG9lc24ndCBkZWFsbG9jYXRlIHRoZSBtZW1vcnkgb2YgYW55IHBvaW50ZXIgcGFzc2VkCisgKiB0byB0aGlzIGRlcXVlIGFzIGEgdmFsdWUuICovCitzdGF0aWMgdm9pZCBjZGVxdWVfZnJlZShzdHJ1Y3QgY2RlcXVlKiBkKSB7CisJaWYoIWQpCisJCXJldHVybjsKKworCWlmKCFkLT5hcnIpCisJCXJldHVybjsKKworCWZyZWUoZC0+YXJyKTsKKworCWQtPmFyciA9IE5VTEw7CisJZC0+YmVnX3BvcyA9IC0xOworCWQtPmVuZF9wb3MgPSAtMTsKKwlkLT5jYXBfbWFzayA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3VpbnQ4X3QgYmZfYml0X3NpemUoY29uc3Qgc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKiBoZHIpIHsKKwlyZXR1cm4gaGRyLT5ibG9ja19mbGFnc191OCAmIDc7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3VpbnQ4X3QgYmZfYnl0ZV9jb3VudChjb25zdCBzdHJ1Y3QgY29tcHJlc3NlZF9ibG9ja19oZWFkZXIqIGhkcikgeworCXJldHVybiAoaGRyLT5ibG9ja19mbGFnc191OCA+PiAzKSAmIDc7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3VpbnQ4X3QgYmZfaXNfdGFibGVfcHJlc2VudChjb25zdCBzdHJ1Y3QgY29tcHJlc3NlZF9ibG9ja19oZWFkZXIqIGhkcikgeworCXJldHVybiAoaGRyLT5ibG9ja19mbGFnc191OCA+PiA3KSAmIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJhcjUqIGdldF9jb250ZXh0KHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlyZXR1cm4gKHN0cnVjdCByYXI1KikgYS0+Zm9ybWF0LT5kYXRhOworfQorCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgdXNlZCBieSBmaWx0ZXIgaW1wbGVtZW50YXRpb25zLiAqLworc3RhdGljIHZvaWQgY2lyY3VsYXJfbWVtY3B5KHVpbnQ4X3QqIGRzdCwgdWludDhfdCogd2luZG93LCBjb25zdCB1aW50NjRfdCBtYXNrLAorICAgIGludDY0X3Qgc3RhcnQsIGludDY0X3QgZW5kKQoreworCWlmKChzdGFydCAmIG1hc2spID4gKGVuZCAmIG1hc2spKSB7CisJCXNzaXplX3QgbGVuMSA9IG1hc2sgKyAxIC0gKHN0YXJ0ICYgbWFzayk7CisJCXNzaXplX3QgbGVuMiA9IGVuZCAmIG1hc2s7CisKKwkJbWVtY3B5KGRzdCwgJndpbmRvd1tzdGFydCAmIG1hc2tdLCBsZW4xKTsKKwkJbWVtY3B5KGRzdCArIGxlbjEsIHdpbmRvdywgbGVuMik7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGRzdCwgJndpbmRvd1tzdGFydCAmIG1hc2tdLCAoc2l6ZV90KSAoZW5kIC0gc3RhcnQpKTsKKwl9Cit9CisKK3N0YXRpYyB1aW50MzJfdCByZWFkX2ZpbHRlcl9kYXRhKHN0cnVjdCByYXI1KiByYXIsIHVpbnQzMl90IG9mZnNldCkgeworCXVpbnQ4X3QgbGluZWFyX2J1Zls0XTsKKwljaXJjdWxhcl9tZW1jcHkobGluZWFyX2J1ZiwgcmFyLT5jc3RhdGUud2luZG93X2J1ZiwKKwkgICAgcmFyLT5jc3RhdGUud2luZG93X21hc2ssIG9mZnNldCwgb2Zmc2V0ICsgNCk7CisJcmV0dXJuIGFyY2hpdmVfbGUzMmRlYyhsaW5lYXJfYnVmKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfZmlsdGVyX2RhdGEoc3RydWN0IHJhcjUqIHJhciwgdWludDMyX3Qgb2Zmc2V0LAorICAgIHVpbnQzMl90IHZhbHVlKQoreworCWFyY2hpdmVfbGUzMmVuYygmcmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmW29mZnNldF0sIHZhbHVlKTsKK30KKworLyogQWxsb2NhdGVzIGEgbmV3IGZpbHRlciBkZXNjcmlwdG9yIGFuZCBhZGRzIGl0IHRvIHRoZSBmaWx0ZXIgYXJyYXkuICovCitzdGF0aWMgc3RydWN0IGZpbHRlcl9pbmZvKiBhZGRfbmV3X2ZpbHRlcihzdHJ1Y3QgcmFyNSogcmFyKSB7CisJc3RydWN0IGZpbHRlcl9pbmZvKiBmID0KKwkJKHN0cnVjdCBmaWx0ZXJfaW5mbyopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGZpbHRlcl9pbmZvKSk7CisKKwlpZighZikgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljZGVxdWVfcHVzaF9iYWNrKCZyYXItPmNzdGF0ZS5maWx0ZXJzLCBjZGVxdWVfZmlsdGVyKGYpKTsKKwlyZXR1cm4gZjsKK30KKworc3RhdGljIGludCBydW5fZGVsdGFfZmlsdGVyKHN0cnVjdCByYXI1KiByYXIsIHN0cnVjdCBmaWx0ZXJfaW5mbyogZmx0KSB7CisJaW50IGk7CisJc3NpemVfdCBkZXN0X3Bvcywgc3JjX3BvcyA9IDA7CisKKwlmb3IoaSA9IDA7IGkgPCBmbHQtPmNoYW5uZWxzOyBpKyspIHsKKwkJdWludDhfdCBwcmV2X2J5dGUgPSAwOworCQlmb3IoZGVzdF9wb3MgPSBpOworCQkJCWRlc3RfcG9zIDwgZmx0LT5ibG9ja19sZW5ndGg7CisJCQkJZGVzdF9wb3MgKz0gZmx0LT5jaGFubmVscykKKwkJeworCQkJdWludDhfdCBieXRlOworCisJCQlieXRlID0gcmFyLT5jc3RhdGUud2luZG93X2J1ZlsKKwkJCSAgICAocmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCArCisJCQkgICAgc3JjX3BvcykgJiByYXItPmNzdGF0ZS53aW5kb3dfbWFza107CisKKwkJCXByZXZfYnl0ZSAtPSBieXRlOworCQkJcmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmW2Rlc3RfcG9zXSA9IHByZXZfYnl0ZTsKKwkJCXNyY19wb3MrKzsKKwkJfQorCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJ1bl9lOGU5X2ZpbHRlcihzdHJ1Y3QgcmFyNSogcmFyLCBzdHJ1Y3QgZmlsdGVyX2luZm8qIGZsdCwKKwkJaW50IGV4dGVuZGVkKQoreworCWNvbnN0IHVpbnQzMl90IGZpbGVfc2l6ZSA9IDB4MTAwMDAwMDsKKwlzc2l6ZV90IGk7CisKKwljaXJjdWxhcl9tZW1jcHkocmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmLAorCSAgICByYXItPmNzdGF0ZS53aW5kb3dfYnVmLCByYXItPmNzdGF0ZS53aW5kb3dfbWFzaywKKwkgICAgcmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCwKKwkgICAgcmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCArIGZsdC0+YmxvY2tfbGVuZ3RoKTsKKworCWZvcihpID0gMDsgaSA8IGZsdC0+YmxvY2tfbGVuZ3RoIC0gNDspIHsKKwkJdWludDhfdCBiID0gcmFyLT5jc3RhdGUud2luZG93X2J1ZlsKKwkJICAgIChyYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKyBmbHQtPmJsb2NrX3N0YXJ0ICsKKwkJICAgIGkrKykgJiByYXItPmNzdGF0ZS53aW5kb3dfbWFza107CisKKwkJLyoKKwkJICogMHhFOCA9IHg4NidzIGNhbGwgPHJlbGF0aXZlX2FkZHJfdWludDMyPiAoZnVuY3Rpb24gY2FsbCkKKwkJICogMHhFOSA9IHg4NidzIGptcCA8cmVsYXRpdmVfYWRkcl91aW50MzI+ICh1bmNvbmRpdGlvbmFsIGp1bXApCisJCSAqLworCQlpZihiID09IDB4RTggfHwgKGV4dGVuZGVkICYmIGIgPT0gMHhFOSkpIHsKKworCQkJdWludDMyX3QgYWRkcjsKKwkJCXVpbnQzMl90IG9mZnNldCA9IChpICsgZmx0LT5ibG9ja19zdGFydCkgJSBmaWxlX3NpemU7CisKKwkJCWFkZHIgPSByZWFkX2ZpbHRlcl9kYXRhKHJhciwKKwkJCSAgICAodWludDMyX3QpKHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArCisJCQkgICAgZmx0LT5ibG9ja19zdGFydCArIGkpICYgcmFyLT5jc3RhdGUud2luZG93X21hc2spOworCisJCQlpZihhZGRyICYgMHg4MDAwMDAwMCkgeworCQkJCWlmKCgoYWRkciArIG9mZnNldCkgJiAweDgwMDAwMDAwKSA9PSAwKSB7CisJCQkJCXdyaXRlX2ZpbHRlcl9kYXRhKHJhciwgKHVpbnQzMl90KWksCisJCQkJCSAgICBhZGRyICsgZmlsZV9zaXplKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmKChhZGRyIC0gZmlsZV9zaXplKSAmIDB4ODAwMDAwMDApIHsKKwkJCQkJdWludDMyX3QgbmFkZHIgPSBhZGRyIC0gb2Zmc2V0OworCQkJCQl3cml0ZV9maWx0ZXJfZGF0YShyYXIsICh1aW50MzJfdClpLAorCQkJCQkgICAgbmFkZHIpOworCQkJCX0KKwkJCX0KKworCQkJaSArPSA0OworCQl9CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2FybV9maWx0ZXIoc3RydWN0IHJhcjUqIHJhciwgc3RydWN0IGZpbHRlcl9pbmZvKiBmbHQpIHsKKwlzc2l6ZV90IGkgPSAwOworCXVpbnQzMl90IG9mZnNldDsKKworCWNpcmN1bGFyX21lbWNweShyYXItPmNzdGF0ZS5maWx0ZXJlZF9idWYsCisJICAgIHJhci0+Y3N0YXRlLndpbmRvd19idWYsIHJhci0+Y3N0YXRlLndpbmRvd19tYXNrLAorCSAgICByYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKyBmbHQtPmJsb2NrX3N0YXJ0LAorCSAgICByYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQgKyBmbHQtPmJsb2NrX3N0YXJ0ICsgZmx0LT5ibG9ja19sZW5ndGgpOworCisJZm9yKGkgPSAwOyBpIDwgZmx0LT5ibG9ja19sZW5ndGggLSAzOyBpICs9IDQpIHsKKwkJdWludDhfdCogYiA9ICZyYXItPmNzdGF0ZS53aW5kb3dfYnVmWworCQkgICAgKHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArCisJCSAgICBmbHQtPmJsb2NrX3N0YXJ0ICsgaSArIDMpICYgcmFyLT5jc3RhdGUud2luZG93X21hc2tdOworCisJCWlmKCpiID09IDB4RUIpIHsKKwkJCS8qIDB4RUIgPSBBUk0ncyBCTCAoYnJhbmNoICsgbGluaykgaW5zdHJ1Y3Rpb24uICovCisJCQlvZmZzZXQgPSByZWFkX2ZpbHRlcl9kYXRhKHJhciwKKwkJCSAgICAocmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ICsgZmx0LT5ibG9ja19zdGFydCArIGkpICYKKwkJCSAgICAgcmFyLT5jc3RhdGUud2luZG93X21hc2spICYgMHgwMGZmZmZmZjsKKworCQkJb2Zmc2V0IC09ICh1aW50MzJfdCkgKChpICsgZmx0LT5ibG9ja19zdGFydCkgLyA0KTsKKwkJCW9mZnNldCA9IChvZmZzZXQgJiAweDAwZmZmZmZmKSB8IDB4ZWIwMDAwMDA7CisJCQl3cml0ZV9maWx0ZXJfZGF0YShyYXIsICh1aW50MzJfdClpLCBvZmZzZXQpOworCQl9CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2ZpbHRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgZmlsdGVyX2luZm8qIGZsdCkgeworCWludCByZXQ7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCisJZnJlZShyYXItPmNzdGF0ZS5maWx0ZXJlZF9idWYpOworCisJcmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmID0gbWFsbG9jKGZsdC0+YmxvY2tfbGVuZ3RoKTsKKwlpZighcmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCisJCSAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWx0ZXIgZGF0YS4iKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJc3dpdGNoKGZsdC0+dHlwZSkgeworCQljYXNlIEZJTFRFUl9ERUxUQToKKwkJCXJldCA9IHJ1bl9kZWx0YV9maWx0ZXIocmFyLCBmbHQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGSUxURVJfRTg6CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIEZJTFRFUl9FOEU5OgorCQkJcmV0ID0gcnVuX2U4ZTlfZmlsdGVyKHJhciwgZmx0LAorCQkJICAgIGZsdC0+dHlwZSA9PSBGSUxURVJfRThFOSk7CisJCQlicmVhazsKKworCQljYXNlIEZJTFRFUl9BUk06CisJCQlyZXQgPSBydW5fYXJtX2ZpbHRlcihyYXIsIGZsdCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiVW5zdXBwb3J0ZWQgZmlsdGVyIHR5cGU6IDB4JXgiLCBmbHQtPnR5cGUpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJLyogRmlsdGVyIGhhcyBmYWlsZWQuICovCisJCXJldHVybiByZXQ7CisJfQorCisJaWYoQVJDSElWRV9PSyAhPSBwdXNoX2RhdGFfcmVhZHkoYSwgcmFyLCByYXItPmNzdGF0ZS5maWx0ZXJlZF9idWYsCisJICAgIGZsdC0+YmxvY2tfbGVuZ3RoLCByYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0cikpCisJeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkgICAgIlN0YWNrIG92ZXJmbG93IHdoZW4gc3VibWl0dGluZyB1bnBhY2tlZCBkYXRhIik7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgKz0gZmx0LT5ibG9ja19sZW5ndGg7CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKy8qIFRoZSBgcHVzaF9kYXRhYCBmdW5jdGlvbiBzdWJtaXRzIHRoZSBzZWxlY3RlZCBkYXRhIHJhbmdlIHRvIHRoZSB1c2VyLgorICogTmV4dCBjYWxsIG9mIGB1c2VfZGF0YWAgd2lsbCB1c2UgdGhlIHBvaW50ZXIsIHNpemUgYW5kIG9mZnNldCBhcmd1bWVudHMKKyAqIHRoYXQgYXJlIHNwZWNpZmllZCBoZXJlLiBUaGVzZSBhcmd1bWVudHMgYXJlIHB1c2hlZCB0byB0aGUgRklGTyBzdGFjayBoZXJlLAorICogYW5kIHBvcHBlZCBmcm9tIHRoZSBzdGFjayBieSB0aGUgYHVzZV9kYXRhYCBmdW5jdGlvbi4gKi8KK3N0YXRpYyB2b2lkIHB1c2hfZGF0YShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50NjRfdCBpZHhfYmVnaW4sIGludDY0X3QgaWR4X2VuZCkKK3sKKwljb25zdCB1aW50NjRfdCB3bWFzayA9IHJhci0+Y3N0YXRlLndpbmRvd19tYXNrOworCWNvbnN0IHNzaXplX3Qgc29saWRfd3JpdGVfcHRyID0gKHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArCisJICAgIHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyKSAmIHdtYXNrOworCisJaWR4X2JlZ2luICs9IHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldDsKKwlpZHhfZW5kICs9IHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldDsKKworCS8qIENoZWNrIGlmIG91ciB1bnBhY2tlZCBkYXRhIGlzIHdyYXBwZWQgaW5zaWRlIHRoZSB3aW5kb3cgY2lyY3VsYXIKKwkgKiBidWZmZXIuICBJZiBpdCdzIG5vdCB3cmFwcGVkLCBpdCBjYW4gYmUgY29waWVkIG91dCBieSB1c2luZworCSAqIGEgc2luZ2xlIG1lbWNweSwgYnV0IHdoZW4gaXQncyB3cmFwcGVkLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIGZpcnN0CisJICogcGFydCB3aXRoIG9uZSBtZW1jcHksIGFuZCB0aGUgc2Vjb25kIHBhcnQgd2l0aCBhbm90aGVyIG1lbWNweS4gKi8KKworCWlmKChpZHhfYmVnaW4gJiB3bWFzaykgPiAoaWR4X2VuZCAmIHdtYXNrKSkgeworCQkvKiBUaGUgZGF0YSBpcyB3cmFwcGVkIChiZWdpbiBvZmZzZXQgc2lzIGJpZ2dlciB0aGFuIGVuZAorCQkgKiBvZmZzZXQpLiAqLworCQljb25zdCBzc2l6ZV90IGZyYWcxX3NpemUgPSByYXItPmNzdGF0ZS53aW5kb3dfc2l6ZSAtCisJCSAgICAoaWR4X2JlZ2luICYgd21hc2spOworCQljb25zdCBzc2l6ZV90IGZyYWcyX3NpemUgPSBpZHhfZW5kICYgd21hc2s7CisKKwkJLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgYnVmZmVyIGZpcnN0LiAqLworCQlwdXNoX2RhdGFfcmVhZHkoYSwgcmFyLCBidWYgKyBzb2xpZF93cml0ZV9wdHIsIGZyYWcxX3NpemUsCisJCSAgICByYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0cik7CisKKwkJLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGJ1ZmZlci4gKi8KKwkJcHVzaF9kYXRhX3JlYWR5KGEsIHJhciwgYnVmLCBmcmFnMl9zaXplLAorCQkgICAgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgKyBmcmFnMV9zaXplKTsKKworCQlyYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0ciArPSBmcmFnMV9zaXplICsgZnJhZzJfc2l6ZTsKKwl9IGVsc2UgeworCQkvKiBEYXRhIGlzIG5vdCB3cmFwcGVkLCBzbyB3ZSBjYW4ganVzdCB1c2Ugb25lIGNhbGwgdG8gY29weSB0aGUKKwkJICogZGF0YS4gKi8KKwkJcHVzaF9kYXRhX3JlYWR5KGEsIHJhciwKKwkJICAgIGJ1ZiArIHNvbGlkX3dyaXRlX3B0ciwgKGlkeF9lbmQgLSBpZHhfYmVnaW4pICYgd21hc2ssCisJCSAgICByYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0cik7CisKKwkJcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgKz0gaWR4X2VuZCAtIGlkeF9iZWdpbjsKKwl9Cit9CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgc3VibWl0cyB0aGUgZGF0YSB0byB0aGUgdXNlci4gSXQgdXNlcyB0aGUKKyAqIHVucGFjayB3aW5kb3cgYnVmZmVyIGFzIGEgc291cmNlIGxvY2F0aW9uLiAqLworc3RhdGljIHZvaWQgcHVzaF93aW5kb3dfZGF0YShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIGludDY0X3QgaWR4X2JlZ2luLCBpbnQ2NF90IGlkeF9lbmQpCit7CisJcHVzaF9kYXRhKGEsIHJhciwgcmFyLT5jc3RhdGUud2luZG93X2J1ZiwgaWR4X2JlZ2luLCBpZHhfZW5kKTsKK30KKworc3RhdGljIGludCBhcHBseV9maWx0ZXJzKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlzdHJ1Y3QgZmlsdGVyX2luZm8qIGZsdDsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisJaW50IHJldDsKKworCXJhci0+Y3N0YXRlLmFsbF9maWx0ZXJzX2FwcGxpZWQgPSAwOworCisJLyogR2V0IHRoZSBmaXJzdCBmaWx0ZXIgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvdXIgZGF0YS4gVGhlIGRhdGEKKwkgKiBuZWVkcyB0byBiZSBmdWxseSB1bnBhY2tlZCBiZWZvcmUgdGhlIGZpbHRlciBjYW4gYmUgcnVuLiAqLworCWlmKENERV9PSyA9PSBjZGVxdWVfZnJvbnQoJnJhci0+Y3N0YXRlLmZpbHRlcnMsCisJICAgIGNkZXF1ZV9maWx0ZXJfcCgmZmx0KSkpIHsKKwkJLyogQ2hlY2sgaWYgb3VyIHVucGFja2VkIGRhdGEgZnVsbHkgY292ZXJzIHRoaXMgZmlsdGVyJ3MKKwkJICogcmFuZ2UuICovCisJCWlmKHJhci0+Y3N0YXRlLndyaXRlX3B0ciA+IGZsdC0+YmxvY2tfc3RhcnQgJiYKKwkJICAgIHJhci0+Y3N0YXRlLndyaXRlX3B0ciA+PSBmbHQtPmJsb2NrX3N0YXJ0ICsKKwkJICAgIGZsdC0+YmxvY2tfbGVuZ3RoKSB7CisJCQkvKiBDaGVjayBpZiB3ZSBoYXZlIHNvbWUgZGF0YSBwZW5kaW5nIHRvIGJlIHdyaXR0ZW4KKwkJCSAqIHJpZ2h0IGJlZm9yZSB0aGUgZmlsdGVyJ3Mgc3RhcnQgb2Zmc2V0LiAqLworCQkJaWYocmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgPT0gZmx0LT5ibG9ja19zdGFydCkgeworCQkJCS8qIFJ1biB0aGUgZmlsdGVyIHNwZWNpZmllZCBieSBkZXNjcmlwdG9yCisJCQkJICogYGZsdGAuICovCisJCQkJcmV0ID0gcnVuX2ZpbHRlcihhLCBmbHQpOworCQkJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkJCS8qIEZpbHRlciBmYWlsdXJlLCByZXR1cm4gZXJyb3IuICovCisJCQkJCXJldHVybiByZXQ7CisJCQkJfQorCisJCQkJLyogRmlsdGVyIGRlc2NyaXB0b3Igd29uJ3QgYmUgbmVlZGVkIGFueW1vcmUKKwkJCQkgKiBhZnRlciBpdCdzIHVzZWQsICogc28gcmVtb3ZlIGl0IGZyb20gdGhlCisJCQkJICogZmlsdGVyIGxpc3QgYW5kIGZyZWUgaXRzIG1lbW9yeS4gKi8KKwkJCQkodm9pZCkgY2RlcXVlX3BvcF9mcm9udCgmcmFyLT5jc3RhdGUuZmlsdGVycywKKwkJCQkgICAgY2RlcXVlX2ZpbHRlcl9wKCZmbHQpKTsKKworCQkJCWZyZWUoZmx0KTsKKwkJCX0gZWxzZSB7CisJCQkJLyogV2UgY2FuJ3QgcnVuIGZpbHRlcnMgeWV0LCBkdW1wIHRoZSBtZW1vcnkKKwkJCQkgKiByaWdodCBiZWZvcmUgdGhlIGZpbHRlci4gKi8KKwkJCQlwdXNoX3dpbmRvd19kYXRhKGEsIHJhciwKKwkJCQkgICAgcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIsCisJCQkJICAgIGZsdC0+YmxvY2tfc3RhcnQpOworCQkJfQorCisJCQkvKiBSZXR1cm4gJ2ZpbHRlciBhcHBsaWVkIG9yIG5vdCBuZWVkZWQnIHN0YXRlIHRvIHRoZQorCQkJICogY2FsbGVyLiAqLworCQkJcmV0dXJuIEFSQ0hJVkVfUkVUUlk7CisJCX0KKwl9CisKKwlyYXItPmNzdGF0ZS5hbGxfZmlsdGVyc19hcHBsaWVkID0gMTsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIHZvaWQgZGlzdF9jYWNoZV9wdXNoKHN0cnVjdCByYXI1KiByYXIsIGludCB2YWx1ZSkgeworCWludCogcSA9IHJhci0+Y3N0YXRlLmRpc3RfY2FjaGU7CisKKwlxWzNdID0gcVsyXTsKKwlxWzJdID0gcVsxXTsKKwlxWzFdID0gcVswXTsKKwlxWzBdID0gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgZGlzdF9jYWNoZV90b3VjaChzdHJ1Y3QgcmFyNSogcmFyLCBpbnQgaWR4KSB7CisJaW50KiBxID0gcmFyLT5jc3RhdGUuZGlzdF9jYWNoZTsKKwlpbnQgaSwgZGlzdCA9IHFbaWR4XTsKKworCWZvcihpID0gaWR4OyBpID4gMDsgaS0tKQorCQlxW2ldID0gcVtpIC0gMV07CisKKwlxWzBdID0gZGlzdDsKKwlyZXR1cm4gZGlzdDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9maWx0ZXJzKHN0cnVjdCByYXI1KiByYXIpIHsKKwlzdHJ1Y3QgY2RlcXVlKiBkID0gJnJhci0+Y3N0YXRlLmZpbHRlcnM7CisKKwkvKiBGcmVlIGFueSByZW1haW5pbmcgZmlsdGVycy4gQWxsIGZpbHRlcnMgc2hvdWxkIGJlIG5hdHVyYWxseQorCSAqIGNvbnN1bWVkIGJ5IHRoZSB1bnBhY2tpbmcgZnVuY3Rpb24sIHNvIHJlbWFpbmluZyBmaWx0ZXJzIGFmdGVyCisJICogdW5wYWNraW5nIG5vcm1hbGx5IG1lYW4gdGhhdCB1bnBhY2tpbmcgd2Fzbid0IHN1Y2Nlc3NmdWwuCisJICogQnV0IHN0aWxsIG9mIGNvdXJzZSB3ZSBzaG91bGRuJ3QgbGVhayBtZW1vcnkgaW4gc3VjaCBjYXNlLiAqLworCisJLyogY2RlcXVlX3NpemUoKSBpcyBhIGZhc3Qgb3BlcmF0aW9uLCBzbyB3ZSBjYW4gdXNlIGl0IGFzIGEgbG9vcAorCSAqIGV4cHJlc3Npb24uICovCisJd2hpbGUoY2RlcXVlX3NpemUoZCkgPiAwKSB7CisJCXN0cnVjdCBmaWx0ZXJfaW5mbyogZiA9IE5VTEw7CisKKwkJLyogUG9wX2Zyb250IHdpbGwgYWxzbyBkZWNyZWFzZSB0aGUgY29sbGVjdGlvbidzIHNpemUuICovCisJCWlmIChDREVfT0sgPT0gY2RlcXVlX3BvcF9mcm9udChkLCBjZGVxdWVfZmlsdGVyX3AoJmYpKSkKKwkJCWZyZWUoZik7CisJfQorCisJY2RlcXVlX2NsZWFyKGQpOworCisJLyogQWxzbyBjbGVhciBvdXQgdGhlIHZhcmlhYmxlcyBuZWVkZWQgZm9yIHNhbml0eSBjaGVja2luZy4gKi8KKwlyYXItPmNzdGF0ZS5sYXN0X2Jsb2NrX3N0YXJ0ID0gMDsKKwlyYXItPmNzdGF0ZS5sYXN0X2Jsb2NrX2xlbmd0aCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2ZpbGVfY29udGV4dChzdHJ1Y3QgcmFyNSogcmFyKSB7CisJbWVtc2V0KCZyYXItPmZpbGUsIDAsIHNpemVvZihyYXItPmZpbGUpKTsKKwlibGFrZTJzcF9pbml0KCZyYXItPmZpbGUuYjJzdGF0ZSwgMzIpOworCisJaWYocmFyLT5tYWluLnNvbGlkKSB7CisJCXJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArPSByYXItPmNzdGF0ZS53cml0ZV9wdHI7CisJfSBlbHNlIHsKKwkJcmFyLT5jc3RhdGUuc29saWRfb2Zmc2V0ID0gMDsKKwl9CisKKwlyYXItPmNzdGF0ZS53cml0ZV9wdHIgPSAwOworCXJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID0gMDsKKwlyYXItPmNzdGF0ZS5sYXN0X3Vuc3RvcmVfcHRyID0gMDsKKworCXJhci0+ZmlsZS5yZWRpcl90eXBlID0gUkVESVJfVFlQRV9OT05FOworCXJhci0+ZmlsZS5yZWRpcl9mbGFncyA9IDA7CisKKwlmcmVlX2ZpbHRlcnMocmFyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2FyY2hpdmVfcmVhZChzdHJ1Y3QgYXJjaGl2ZSogYSwKKyAgICBzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiogYXIpCit7CisJKmFyID0gKHN0cnVjdCBhcmNoaXZlX3JlYWQqKSBhOworCWFyY2hpdmVfY2hlY2tfbWFnaWMoYSwgQVJDSElWRV9SRUFEX01BR0lDLCBBUkNISVZFX1NUQVRFX05FVywKKwkgICAgImFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXI1Iik7CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCByZWFkX2FoZWFkKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHNpemVfdCBob3dfbWFueSwKKyAgICBjb25zdCB1aW50OF90KiogcHRyKQoreworCXNzaXplX3QgYXZhaWwgPSAtMTsKKwlpZighcHRyKQorCQlyZXR1cm4gMDsKKworCSpwdHIgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCBob3dfbWFueSwgJmF2YWlsKTsKKwlpZigqcHRyID09IE5VTEwpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY29uc3VtZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBpbnQ2NF90IGhvd19tYW55KSB7CisJaW50IHJldDsKKworCXJldCA9IGhvd19tYW55ID09IF9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwgaG93X21hbnkpCisJCT8gQVJDSElWRV9PSworCQk6IEFSQ0hJVkVfRkFUQUw7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIFJlYWQgYSBSQVI1IHZhcmlhYmxlIHNpemVkIG51bWVyaWMgdmFsdWUuIFRoaXMgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4KKyAqIGBwdmFsdWVgLiBUaGUgYHB2YWx1ZV9sZW5gIGFyZ3VtZW50IHBvaW50cyB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlCisgKiB0aGUgYnl0ZSBjb3VudCB0aGF0IHdhcyBjb25zdW1lZCBpbiBvcmRlciB0byBkZWNvZGUgdGhlIGBwdmFsdWVgIHZhbHVlLCBwbHVzCisgKiBvbmUuCisgKgorICogcHZhbHVlX2xlbiBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIE5VTEwuCisgKgorICogTk9URTogaWYgYHB2YWx1ZV9sZW5gIGlzIE5PVCBOVUxMLCB0aGUgY2FsbGVyIG5lZWRzIHRvIG1hbnVhbGx5IGNvbnN1bWUKKyAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBgcHZhbHVlX2xlbmAgdmFsdWUgY29udGFpbnMuIElmIHRoZSBgcHZhbHVlX2xlbmAKKyAqIGlzIE5VTEwsIHRoaXMgY29uc3VtaW5nIG9wZXJhdGlvbiBpcyBkb25lIGF1dG9tYXRpY2FsbHkuCisgKgorICogUmV0dXJucyAxIGlmICpwdmFsdWUgd2FzIHN1Y2Nlc3NmdWxseSByZWFkLgorICogUmV0dXJucyAwIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gSW4gdGhpcyBjYXNlLCAqcHZhbHVlIGNvbnRhaW5zIGFuCisgKiAgICAgICAgICAgaW52YWxpZCB2YWx1ZS4KKyAqLworCitzdGF0aWMgaW50IHJlYWRfdmFyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHVpbnQ2NF90KiBwdmFsdWUsCisgICAgdWludDY0X3QqIHB2YWx1ZV9sZW4pCit7CisJdWludDY0X3QgcmVzdWx0ID0gMDsKKwlzaXplX3Qgc2hpZnQsIGk7CisJY29uc3QgdWludDhfdCogcDsKKwl1aW50OF90IGI7CisKKwkvKiBXZSB3aWxsIHJlYWQgbWF4aW11bSBvZiA4IGJ5dGVzLiBXZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0aGUKKwkgKiBzaXR1YXRpb24gdG8gcmVhZCB0aGUgUkFSNSB2YXJpYWJsZS1zaXplZCB2YWx1ZSBzdG9yZWQgYXQgdGhlIGVuZCBvZgorCSAqIHRoZSBmaWxlLCBiZWNhdXNlIHN1Y2ggc2l0dWF0aW9uIHdpbGwgbmV2ZXIgaGFwcGVuLiAqLworCWlmKCFyZWFkX2FoZWFkKGEsIDgsICZwKSkKKwkJcmV0dXJuIDA7CisKKwlmb3Ioc2hpZnQgPSAwLCBpID0gMDsgaSA8IDg7IGkrKywgc2hpZnQgKz0gNykgeworCQliID0gcFtpXTsKKworCQkvKiBTdHJpcCB0aGUgTVNCIGZyb20gdGhlIGlucHV0IGJ5dGUgYW5kIGFkZCB0aGUgcmVzdWx0aW5nCisJCSAqIG51bWJlciB0byB0aGUgYHJlc3VsdGAuICovCisJCXJlc3VsdCArPSAoYiAmICh1aW50NjRfdCkweDdGKSA8PCBzaGlmdDsKKworCQkvKiBNU0Igc2V0IHRvIDEgbWVhbnMgd2UgbmVlZCB0byBjb250aW51ZSBkZWNvZGluZyBwcm9jZXNzLgorCQkgKiBNU0Igc2V0IHRvIDAgbWVhbnMgd2UncmUgZG9uZS4KKwkJICoKKwkJICogVGhpcyBjb25kaXRpb25hbCBjaGVja3MgZm9yIHRoZSBzZWNvbmQgY2FzZS4gKi8KKwkJaWYoKGIgJiAweDgwKSA9PSAwKSB7CisJCQlpZihwdmFsdWUpIHsKKwkJCQkqcHZhbHVlID0gcmVzdWx0OworCQkJfQorCisJCQkvKiBJZiB0aGUgY2FsbGVyIGhhcyBwYXNzZWQgdGhlIGBwdmFsdWVfbGVuYCBwb2ludGVyLAorCQkJICogc3RvcmUgdGhlIG51bWJlciBvZiBjb25zdW1lZCBieXRlcyBpbiBpdCBhbmQgZG8gTk9UCisJCQkgKiBjb25zdW1lIHRob3NlIGJ5dGVzLCBzaW5jZSB0aGUgY2FsbGVyIGhhcyBhbGwgdGhlCisJCQkgKiBpbmZvcm1hdGlvbiBpdCBuZWVkcyB0byBwZXJmb3JtICovCisJCQlpZihwdmFsdWVfbGVuKSB7CisJCQkJKnB2YWx1ZV9sZW4gPSAxICsgaTsKKwkJCX0gZWxzZSB7CisJCQkJLyogSWYgdGhlIGNhbGxlciBkaWQgbm90IHByb3ZpZGUgdGhlCisJCQkJICogYHB2YWx1ZV9sZW5gIHBvaW50ZXIsIGl0IHdpbGwgbm90IGhhdmUgdGhlCisJCQkJICogcG9zc2liaWxpdHkgdG8gYWR2YW5jZSB0aGUgZmlsZSBwb2ludGVyLAorCQkJCSAqIGJlY2F1c2UgaXQgd2lsbCBub3Qga25vdyBob3cgbWFueSBieXRlcyBpdAorCQkJCSAqIG5lZWRzIHRvIGNvbnN1bWUuIFRoaXMgaXMgd2h5IHdlIGhhbmRsZQorCQkJCSAqIHN1Y2ggc2l0dWF0aW9uIGhlcmUgYXV0b21hdGljYWxseS4gKi8KKwkJCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgMSArIGkpKSB7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKworCQkJLyogRW5kIG9mIGRlY29kaW5nIHByb2Nlc3MsIHJldHVybiBzdWNjZXNzLiAqLworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwkvKiBUaGUgZGVjb2RlZCB2YWx1ZSB0YWtlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgOCBieXRlcy4KKwkgKiBJdCdzIGEgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIHNvIGVuZCBkZWNvZGluZyBwcm9jZXNzIGhlcmUKKwkgKiBldmVuIGlmIHRoZSBmaXJzdCBiaXQgb2YgbGFzdCBieXRlIGlzIDEuICovCisJaWYocHZhbHVlKSB7CisJCSpwdmFsdWUgPSByZXN1bHQ7CisJfQorCisJaWYocHZhbHVlX2xlbikgeworCQkqcHZhbHVlX2xlbiA9IDk7CisJfSBlbHNlIHsKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIDkpKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlYWRfdmFyX3NpemVkKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHNpemVfdCogcHZhbHVlLAorICAgIHNpemVfdCogcHZhbHVlX2xlbikKK3sKKwl1aW50NjRfdCB2OworCXVpbnQ2NF90IHZfc2l6ZSA9IDA7CisKKwljb25zdCBpbnQgcmV0ID0gcHZhbHVlX2xlbiA/IHJlYWRfdmFyKGEsICZ2LCAmdl9zaXplKQorCQkJCSAgIDogcmVhZF92YXIoYSwgJnYsIE5VTEwpOworCisJaWYocmV0ID09IDEgJiYgcHZhbHVlKSB7CisJCSpwdmFsdWUgPSAoc2l6ZV90KSB2OworCX0KKworCWlmKHB2YWx1ZV9sZW4pIHsKKwkJLyogUG9zc2libGUgZGF0YSB0cnVuY2F0aW9uIHNob3VsZCBiZSBzYWZlLiAqLworCQkqcHZhbHVlX2xlbiA9IChzaXplX3QpIHZfc2l6ZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJlYWRfYml0c18zMihzdHJ1Y3QgcmFyNSogcmFyLCBjb25zdCB1aW50OF90KiBwLCB1aW50MzJfdCogdmFsdWUpIHsKKwl1aW50MzJfdCBiaXRzID0gKCh1aW50MzJfdCkgcFtyYXItPmJpdHMuaW5fYWRkcl0pIDw8IDI0OworCWJpdHMgfD0gcFtyYXItPmJpdHMuaW5fYWRkciArIDFdIDw8IDE2OworCWJpdHMgfD0gcFtyYXItPmJpdHMuaW5fYWRkciArIDJdIDw8IDg7CisJYml0cyB8PSBwW3Jhci0+Yml0cy5pbl9hZGRyICsgM107CisJYml0cyA8PD0gcmFyLT5iaXRzLmJpdF9hZGRyOworCWJpdHMgfD0gcFtyYXItPmJpdHMuaW5fYWRkciArIDRdID4+ICg4IC0gcmFyLT5iaXRzLmJpdF9hZGRyKTsKKwkqdmFsdWUgPSBiaXRzOworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJlYWRfYml0c18xNihzdHJ1Y3QgcmFyNSogcmFyLCBjb25zdCB1aW50OF90KiBwLCB1aW50MTZfdCogdmFsdWUpIHsKKwlpbnQgYml0cyA9IChpbnQpICgodWludDMyX3QpIHBbcmFyLT5iaXRzLmluX2FkZHJdKSA8PCAxNjsKKwliaXRzIHw9IChpbnQpIHBbcmFyLT5iaXRzLmluX2FkZHIgKyAxXSA8PCA4OworCWJpdHMgfD0gKGludCkgcFtyYXItPmJpdHMuaW5fYWRkciArIDJdOworCWJpdHMgPj49ICg4IC0gcmFyLT5iaXRzLmJpdF9hZGRyKTsKKwkqdmFsdWUgPSBiaXRzICYgMHhmZmZmOworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgdm9pZCBza2lwX2JpdHMoc3RydWN0IHJhcjUqIHJhciwgaW50IGJpdHMpIHsKKwljb25zdCBpbnQgbmV3X2JpdHMgPSByYXItPmJpdHMuYml0X2FkZHIgKyBiaXRzOworCXJhci0+Yml0cy5pbl9hZGRyICs9IG5ld19iaXRzID4+IDM7CisJcmFyLT5iaXRzLmJpdF9hZGRyID0gbmV3X2JpdHMgJiA3OworfQorCisvKiBuID0gdXAgdG8gMTYgKi8KK3N0YXRpYyBpbnQgcmVhZF9jb25zdW1lX2JpdHMoc3RydWN0IHJhcjUqIHJhciwgY29uc3QgdWludDhfdCogcCwgaW50IG4sCisgICAgaW50KiB2YWx1ZSkKK3sKKwl1aW50MTZfdCB2OworCWludCByZXQsIG51bTsKKworCWlmKG4gPT0gMCB8fCBuID4gMTYpIHsKKwkJLyogVGhpcyBpcyBhIHByb2dyYW1tZXIgZXJyb3IgYW5kIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJICogaW4gcnVudGltZS4gKi8KKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmV0ID0gcmVhZF9iaXRzXzE2KHJhciwgcCwgJnYpOworCWlmKHJldCAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gcmV0OworCisJbnVtID0gKGludCkgdjsKKwludW0gPj49IDE2IC0gbjsKKworCXNraXBfYml0cyhyYXIsIG4pOworCisJaWYodmFsdWUpCisJCSp2YWx1ZSA9IG51bTsKKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJlYWRfdTMyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHVpbnQzMl90KiBwdmFsdWUpIHsKKwljb25zdCB1aW50OF90KiBwOworCWlmKCFyZWFkX2FoZWFkKGEsIDQsICZwKSkKKwkJcmV0dXJuIDA7CisKKwkqcHZhbHVlID0gYXJjaGl2ZV9sZTMyZGVjKHApOworCXJldHVybiBBUkNISVZFX09LID09IGNvbnN1bWUoYSwgNCkgPyAxIDogMDsKK30KKworc3RhdGljIGludCByZWFkX3U2NChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCB1aW50NjRfdCogcHZhbHVlKSB7CisJY29uc3QgdWludDhfdCogcDsKKwlpZighcmVhZF9haGVhZChhLCA4LCAmcCkpCisJCXJldHVybiAwOworCisJKnB2YWx1ZSA9IGFyY2hpdmVfbGU2NGRlYyhwKTsKKwlyZXR1cm4gQVJDSElWRV9PSyA9PSBjb25zdW1lKGEsIDgpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgYmlkX3N0YW5kYXJkKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwljb25zdCB1aW50OF90KiBwOworCWNoYXIgc2lnbmF0dXJlW3NpemVvZihyYXI1X3NpZ25hdHVyZV94b3IpXTsKKworCXJhcjVfc2lnbmF0dXJlKHNpZ25hdHVyZSk7CisKKwlpZighcmVhZF9haGVhZChhLCBzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKSwgJnApKQorCQlyZXR1cm4gLTE7CisKKwlpZighbWVtY21wKHNpZ25hdHVyZSwgcCwgc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvcikpKQorCQlyZXR1cm4gMzA7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9iaWQoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgaW50IGJlc3RfYmlkKSB7CisJaW50IG15X2JpZDsKKworCWlmKGJlc3RfYmlkID4gMzApCisJCXJldHVybiAtMTsKKworCW15X2JpZCA9IGJpZF9zdGFuZGFyZChhKTsKKwlpZihteV9iaWQgPiAtMSkgeworCQlyZXR1cm4gbXlfYmlkOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCByYXI1X29wdGlvbnMoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgY29uc3QgY2hhciAqa2V5LAorICAgIGNvbnN0IGNoYXIgKnZhbCkgeworCSh2b2lkKSBhOworCSh2b2lkKSBrZXk7CisJKHZvaWQpIHZhbDsKKworCS8qIE5vIG9wdGlvbnMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbi4gUmV0dXJuIHRoZSBBUkNISVZFX1dBUk4gY29kZQorCSAqIHRvIHNpZ25hbCB0aGUgb3B0aW9ucyBzdXBlcnZpc29yIHRoYXQgdGhlIHVucGFja2VyIGRpZG4ndCBoYW5kbGUKKwkgKiBzZXR0aW5nIHRoaXMgb3B0aW9uLiAqLworCisJcmV0dXJuIEFSQ0hJVkVfV0FSTjsKK30KKworc3RhdGljIHZvaWQgaW5pdF9oZWFkZXIoc3RydWN0IGFyY2hpdmVfcmVhZCogYSkgeworCWEtPmFyY2hpdmUuYXJjaGl2ZV9mb3JtYXQgPSBBUkNISVZFX0ZPUk1BVF9SQVJfVjU7CisJYS0+YXJjaGl2ZS5hcmNoaXZlX2Zvcm1hdF9uYW1lID0gIlJBUjUiOworfQorCitzdGF0aWMgdm9pZCBpbml0X3dpbmRvd19tYXNrKHN0cnVjdCByYXI1KiByYXIpIHsKKwlpZiAocmFyLT5jc3RhdGUud2luZG93X3NpemUpCisJCXJhci0+Y3N0YXRlLndpbmRvd19tYXNrID0gcmFyLT5jc3RhdGUud2luZG93X3NpemUgLSAxOworCWVsc2UKKwkJcmFyLT5jc3RhdGUud2luZG93X21hc2sgPSAwOworfQorCitlbnVtIEhFQURFUl9GTEFHUyB7CisJSEZMX0VYVFJBX0RBVEEgPSAweDAwMDEsCisJSEZMX0RBVEEgPSAweDAwMDIsCisJSEZMX1NLSVBfSUZfVU5LTk9XTiA9IDB4MDAwNCwKKwlIRkxfU1BMSVRfQkVGT1JFID0gMHgwMDA4LAorCUhGTF9TUExJVF9BRlRFUiA9IDB4MDAxMCwKKwlIRkxfQ0hJTEQgPSAweDAwMjAsCisJSEZMX0lOSEVSSVRFRCA9IDB4MDA0MAorfTsKKworc3RhdGljIGludCBwcm9jZXNzX21haW5fbG9jYXRvcl9leHRyYV9ibG9jayhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLAorICAgIHN0cnVjdCByYXI1KiByYXIpCit7CisJdWludDY0X3QgbG9jYXRvcl9mbGFnczsKKworCWVudW0gTE9DQVRPUl9GTEFHUyB7CisJCVFMSVNUID0gMHgwMSwgUkVDT1ZFUlkgPSAweDAyLAorCX07CisKKwlpZighcmVhZF92YXIoYSwgJmxvY2F0b3JfZmxhZ3MsIE5VTEwpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZihsb2NhdG9yX2ZsYWdzICYgUUxJU1QpIHsKKwkJaWYoIXJlYWRfdmFyKGEsICZyYXItPnFsaXN0X29mZnNldCwgTlVMTCkpIHsKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJfQorCisJCS8qIHFsaXN0IGlzIG5vdCB1c2VkICovCisJfQorCisJaWYobG9jYXRvcl9mbGFncyAmIFJFQ09WRVJZKSB7CisJCWlmKCFyZWFkX3ZhcihhLCAmcmFyLT5ycl9vZmZzZXQsIE5VTEwpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQkvKiByciBpcyBub3QgdXNlZCAqLworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZpbGVfZXh0cmFfaGFzaChzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIHNzaXplX3QqIGV4dHJhX2RhdGFfc2l6ZSkKK3sKKwlzaXplX3QgaGFzaF90eXBlID0gMDsKKwlzaXplX3QgdmFsdWVfbGVuOworCisJZW51bSBIQVNIX1RZUEUgeworCQlCTEFLRTJzcCA9IDB4MDAKKwl9OworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZoYXNoX3R5cGUsICZ2YWx1ZV9sZW4pKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX2xlbjsKKwlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdmFsdWVfbGVuKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJLyogVGhlIGZpbGUgdXNlcyBCTEFLRTJzcCBjaGVja3N1bSBhbGdvcml0aG0gaW5zdGVhZCBvZiBwbGFpbiBvbGQKKwkgKiBDUkMzMi4gKi8KKwlpZihoYXNoX3R5cGUgPT0gQkxBS0Uyc3ApIHsKKwkJY29uc3QgdWludDhfdCogcDsKKwkJY29uc3QgaW50IGhhc2hfc2l6ZSA9IHNpemVvZihyYXItPmZpbGUuYmxha2Uyc3ApOworCisJCWlmKCFyZWFkX2FoZWFkKGEsIGhhc2hfc2l6ZSwgJnApKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCXJhci0+ZmlsZS5oYXNfYmxha2UyID0gMTsKKwkJbWVtY3B5KCZyYXItPmZpbGUuYmxha2Uyc3AsIHAsIGhhc2hfc2l6ZSk7CisKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIGhhc2hfc2l6ZSkpIHsKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJfQorCisJCSpleHRyYV9kYXRhX3NpemUgLT0gaGFzaF9zaXplOworCX0gZWxzZSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIlVuc3VwcG9ydGVkIGhhc2ggdHlwZSAoMHgleCkiLCAoaW50KSBoYXNoX3R5cGUpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIHVpbnQ2NF90IHRpbWVfd2luX3RvX3VuaXgodWludDY0X3Qgd2luX3RpbWUpIHsKKwljb25zdCBzaXplX3QgbnNfaW5fc2VjID0gMTAwMDAwMDA7CisJY29uc3QgdWludDY0X3Qgc2VjX3RvX3VuaXggPSAxMTY0NDQ3MzYwMExMOworCXJldHVybiB3aW5fdGltZSAvIG5zX2luX3NlYyAtIHNlY190b191bml4OworfQorCitzdGF0aWMgaW50IHBhcnNlX2h0aW1lX2l0ZW0oc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgY2hhciB1bml4X3RpbWUsCisgICAgdWludDY0X3QqIHdoZXJlLCBzc2l6ZV90KiBleHRyYV9kYXRhX3NpemUpCit7CisJaWYodW5peF90aW1lKSB7CisJCXVpbnQzMl90IHRpbWVfdmFsOworCQlpZighcmVhZF91MzIoYSwgJnRpbWVfdmFsKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQkqZXh0cmFfZGF0YV9zaXplIC09IDQ7CisJCSp3aGVyZSA9ICh1aW50NjRfdCkgdGltZV92YWw7CisJfSBlbHNlIHsKKwkJdWludDY0X3Qgd2luZG93c190aW1lOworCQlpZighcmVhZF91NjQoYSwgJndpbmRvd3NfdGltZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJKndoZXJlID0gdGltZV93aW5fdG9fdW5peCh3aW5kb3dzX3RpbWUpOworCQkqZXh0cmFfZGF0YV9zaXplIC09IDg7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZmlsZV9leHRyYV92ZXJzaW9uKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGUsIHNzaXplX3QqIGV4dHJhX2RhdGFfc2l6ZSkKK3sKKwlzaXplX3QgZmxhZ3MgPSAwOworCXNpemVfdCB2ZXJzaW9uID0gMDsKKwlzaXplX3QgdmFsdWVfbGVuID0gMDsKKwlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcgdmVyc2lvbl9zdHJpbmc7CisJc3RydWN0IGFyY2hpdmVfc3RyaW5nIG5hbWVfdXRmOF9zdHJpbmc7CisJY29uc3QgY2hhciogY3VyX2ZpbGVuYW1lOworCisJLyogRmxhZ3MgYXJlIGlnbm9yZWQuICovCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZmbGFncywgJnZhbHVlX2xlbikpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCSpleHRyYV9kYXRhX3NpemUgLT0gdmFsdWVfbGVuOworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCB2YWx1ZV9sZW4pKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJnZlcnNpb24sICZ2YWx1ZV9sZW4pKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX2xlbjsKKwlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdmFsdWVfbGVuKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJLyogZXh0cmFfZGF0YV9zaXplIHNob3VsZCBiZSB6ZXJvIGhlcmUuICovCisKKwljdXJfZmlsZW5hbWUgPSBhcmNoaXZlX2VudHJ5X3BhdGhuYW1lX3V0ZjgoZSk7CisJaWYoY3VyX2ZpbGVuYW1lID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJICAgICJWZXJzaW9uIGVudHJ5IHdpdGhvdXQgZmlsZSBuYW1lIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCWFyY2hpdmVfc3RyaW5nX2luaXQoJnZlcnNpb25fc3RyaW5nKTsKKwlhcmNoaXZlX3N0cmluZ19pbml0KCZuYW1lX3V0Zjhfc3RyaW5nKTsKKworCS8qIFByZXBhcmUgYSA7MTIzIHN1ZmZpeCBmb3IgdGhlIGZpbGVuYW1lLCB3aGVyZSAnMTIzJyBpcyB0aGUgdmVyc2lvbgorCSAqIHZhbHVlIG9mIHRoaXMgZmlsZS4gKi8KKwlhcmNoaXZlX3N0cmluZ19zcHJpbnRmKCZ2ZXJzaW9uX3N0cmluZywgIjslenUiLCB2ZXJzaW9uKTsKKworCS8qIEJ1aWxkIHRoZSBuZXcgZmlsZW5hbWUuICovCisJYXJjaGl2ZV9zdHJjYXQoJm5hbWVfdXRmOF9zdHJpbmcsIGN1cl9maWxlbmFtZSk7CisJYXJjaGl2ZV9zdHJjYXQoJm5hbWVfdXRmOF9zdHJpbmcsIHZlcnNpb25fc3RyaW5nLnMpOworCisJLyogQXBwbHkgdGhlIG5ldyBmaWxlbmFtZSBpbnRvIHRoaXMgZmlsZSdzIGNvbnRleHQuICovCisJYXJjaGl2ZV9lbnRyeV91cGRhdGVfcGF0aG5hbWVfdXRmOChlLCBuYW1lX3V0Zjhfc3RyaW5nLnMpOworCisJLyogRnJlZSBidWZmZXJzLiAqLworCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJnZlcnNpb25fc3RyaW5nKTsKKwlhcmNoaXZlX3N0cmluZ19mcmVlKCZuYW1lX3V0Zjhfc3RyaW5nKTsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwYXJzZV9maWxlX2V4dHJhX2h0aW1lKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGUsIHN0cnVjdCByYXI1KiByYXIsIHNzaXplX3QqIGV4dHJhX2RhdGFfc2l6ZSkKK3sKKwljaGFyIHVuaXhfdGltZSA9IDA7CisJc2l6ZV90IGZsYWdzID0gMDsKKwlzaXplX3QgdmFsdWVfbGVuOworCisJZW51bSBIVElNRV9GTEFHUyB7CisJCUlTX1VOSVggICAgICAgPSAweDAxLAorCQlIQVNfTVRJTUUgICAgID0gMHgwMiwKKwkJSEFTX0NUSU1FICAgICA9IDB4MDQsCisJCUhBU19BVElNRSAgICAgPSAweDA4LAorCQlIQVNfVU5JWF9OUyAgID0gMHgxMCwKKwl9OworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZmbGFncywgJnZhbHVlX2xlbikpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCSpleHRyYV9kYXRhX3NpemUgLT0gdmFsdWVfbGVuOworCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCB2YWx1ZV9sZW4pKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwl1bml4X3RpbWUgPSBmbGFncyAmIElTX1VOSVg7CisKKwlpZihmbGFncyAmIEhBU19NVElNRSkgeworCQlwYXJzZV9odGltZV9pdGVtKGEsIHVuaXhfdGltZSwgJnJhci0+ZmlsZS5lX210aW1lLAorCQkgICAgZXh0cmFfZGF0YV9zaXplKTsKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfbXRpbWUoZSwgcmFyLT5maWxlLmVfbXRpbWUsIDApOworCX0KKworCWlmKGZsYWdzICYgSEFTX0NUSU1FKSB7CisJCXBhcnNlX2h0aW1lX2l0ZW0oYSwgdW5peF90aW1lLCAmcmFyLT5maWxlLmVfY3RpbWUsCisJCSAgICBleHRyYV9kYXRhX3NpemUpOworCQlhcmNoaXZlX2VudHJ5X3NldF9jdGltZShlLCByYXItPmZpbGUuZV9jdGltZSwgMCk7CisJfQorCisJaWYoZmxhZ3MgJiBIQVNfQVRJTUUpIHsKKwkJcGFyc2VfaHRpbWVfaXRlbShhLCB1bml4X3RpbWUsICZyYXItPmZpbGUuZV9hdGltZSwKKwkJICAgIGV4dHJhX2RhdGFfc2l6ZSk7CisJCWFyY2hpdmVfZW50cnlfc2V0X2F0aW1lKGUsIHJhci0+ZmlsZS5lX2F0aW1lLCAwKTsKKwl9CisKKwlpZihmbGFncyAmIEhBU19VTklYX05TKSB7CisJCWlmKCFyZWFkX3UzMihhLCAmcmFyLT5maWxlLmVfdW5peF9ucykpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSA0OworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZpbGVfZXh0cmFfcmVkaXIoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwKKyAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSogZSwgc3RydWN0IHJhcjUqIHJhciwgc3NpemVfdCogZXh0cmFfZGF0YV9zaXplKQoreworCXVpbnQ2NF90IHZhbHVlX3NpemUgPSAwOworCXNpemVfdCB0YXJnZXRfc2l6ZSA9IDA7CisJY2hhciB0YXJnZXRfdXRmOF9idWZbTUFYX05BTUVfSU5fQllURVNdOworCWNvbnN0IHVpbnQ4X3QqIHA7CisKKwlpZighcmVhZF92YXIoYSwgJnJhci0+ZmlsZS5yZWRpcl90eXBlLCAmdmFsdWVfc2l6ZSkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKwlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgKGludDY0X3QpdmFsdWVfc2l6ZSkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKwkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX3NpemU7CisKKwlpZighcmVhZF92YXIoYSwgJnJhci0+ZmlsZS5yZWRpcl9mbGFncywgJnZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KXZhbHVlX3NpemUpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJKmV4dHJhX2RhdGFfc2l6ZSAtPSB2YWx1ZV9zaXplOworCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZ0YXJnZXRfc2l6ZSwgTlVMTCkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKwkqZXh0cmFfZGF0YV9zaXplIC09IHRhcmdldF9zaXplICsgMTsKKworCWlmKCFyZWFkX2FoZWFkKGEsIHRhcmdldF9zaXplLCAmcCkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCWlmKHRhcmdldF9zaXplID4gKE1BWF9OQU1FX0lOX0NIQVJTIC0gMSkpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiTGluayB0YXJnZXQgaXMgdG9vIGxvbmciKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYodGFyZ2V0X3NpemUgPT0gMCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJObyBsaW5rIHRhcmdldCBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJbWVtY3B5KHRhcmdldF91dGY4X2J1ZiwgcCwgdGFyZ2V0X3NpemUpOworCXRhcmdldF91dGY4X2J1Zlt0YXJnZXRfc2l6ZV0gPSAwOworCisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KXRhcmdldF9zaXplKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJc3dpdGNoKHJhci0+ZmlsZS5yZWRpcl90eXBlKSB7CisJCWNhc2UgUkVESVJfVFlQRV9VTklYU1lNTElOSzoKKwkJY2FzZSBSRURJUl9UWVBFX1dJTlNZTUxJTks6CisJCQlhcmNoaXZlX2VudHJ5X3NldF9maWxldHlwZShlLCBBRV9JRkxOSyk7CisJCQlhcmNoaXZlX2VudHJ5X3VwZGF0ZV9zeW1saW5rX3V0ZjgoZSwgdGFyZ2V0X3V0ZjhfYnVmKTsKKwkJCWlmIChyYXItPmZpbGUucmVkaXJfZmxhZ3MgJiBSRURJUl9TWU1MSU5LX0lTX0RJUikgeworCQkJCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZShlLAorCQkJCQlBRV9TWU1MSU5LX1RZUEVfRElSRUNUT1JZKTsKKwkJCX0gZWxzZSB7CisJCQkJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGlua190eXBlKGUsCisJCQkJQUVfU1lNTElOS19UWVBFX0ZJTEUpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSRURJUl9UWVBFX0hBUkRMSU5LOgorCQkJYXJjaGl2ZV9lbnRyeV9zZXRfZmlsZXR5cGUoZSwgQUVfSUZSRUcpOworCQkJYXJjaGl2ZV9lbnRyeV91cGRhdGVfaGFyZGxpbmtfdXRmOChlLCB0YXJnZXRfdXRmOF9idWYpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIFVua25vd24gcmVkaXIgdHlwZSwgc2tpcCBpdC4gKi8KKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBwYXJzZV9maWxlX2V4dHJhX293bmVyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGUsIHNzaXplX3QqIGV4dHJhX2RhdGFfc2l6ZSkKK3sKKwl1aW50NjRfdCBmbGFncyA9IDA7CisJdWludDY0X3QgdmFsdWVfc2l6ZSA9IDA7CisJdWludDY0X3QgaWQgPSAwOworCXNpemVfdCBuYW1lX2xlbiA9IDA7CisJc2l6ZV90IG5hbWVfc2l6ZSA9IDA7CisJY2hhciBuYW1lYnVmW09XTkVSX01BWE5BTUVMRU5dOworCWNvbnN0IHVpbnQ4X3QqIHA7CisKKwlpZighcmVhZF92YXIoYSwgJmZsYWdzLCAmdmFsdWVfc2l6ZSkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKwlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgKGludDY0X3QpdmFsdWVfc2l6ZSkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKwkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX3NpemU7CisKKwlpZiAoKGZsYWdzICYgT1dORVJfVVNFUl9OQU1FKSAhPSAwKSB7CisJCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmbmFtZV9zaXplLCBOVUxMKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJKmV4dHJhX2RhdGFfc2l6ZSAtPSBuYW1lX3NpemUgKyAxOworCisJCWlmKCFyZWFkX2FoZWFkKGEsIG5hbWVfc2l6ZSwgJnApKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWlmIChuYW1lX3NpemUgPj0gT1dORVJfTUFYTkFNRUxFTikgeworCQkJbmFtZV9sZW4gPSBPV05FUl9NQVhOQU1FTEVOIC0gMTsKKwkJfSBlbHNlIHsKKwkJCW5hbWVfbGVuID0gbmFtZV9zaXplOworCQl9CisKKwkJbWVtY3B5KG5hbWVidWYsIHAsIG5hbWVfbGVuKTsKKwkJbmFtZWJ1ZltuYW1lX2xlbl0gPSAwOworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgKGludDY0X3QpbmFtZV9zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlhcmNoaXZlX2VudHJ5X3NldF91bmFtZShlLCBuYW1lYnVmKTsKKwl9CisJaWYgKChmbGFncyAmIE9XTkVSX0dST1VQX05BTUUpICE9IDApIHsKKwkJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZuYW1lX3NpemUsIE5VTEwpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQkqZXh0cmFfZGF0YV9zaXplIC09IG5hbWVfc2l6ZSArIDE7CisKKwkJaWYoIXJlYWRfYWhlYWQoYSwgbmFtZV9zaXplLCAmcCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJaWYgKG5hbWVfc2l6ZSA+PSBPV05FUl9NQVhOQU1FTEVOKSB7CisJCQluYW1lX2xlbiA9IE9XTkVSX01BWE5BTUVMRU4gLSAxOworCQl9IGVsc2UgeworCQkJbmFtZV9sZW4gPSBuYW1lX3NpemU7CisJCX0KKworCQltZW1jcHkobmFtZWJ1ZiwgcCwgbmFtZV9sZW4pOworCQluYW1lYnVmW25hbWVfbGVuXSA9IDA7CisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCAoaW50NjRfdCluYW1lX3NpemUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCWFyY2hpdmVfZW50cnlfc2V0X2duYW1lKGUsIG5hbWVidWYpOworCX0KKwlpZiAoKGZsYWdzICYgT1dORVJfVVNFUl9VSUQpICE9IDApIHsKKwkJaWYoIXJlYWRfdmFyKGEsICZpZCwgJnZhbHVlX3NpemUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgKGludDY0X3QpdmFsdWVfc2l6ZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCSpleHRyYV9kYXRhX3NpemUgLT0gdmFsdWVfc2l6ZTsKKworCQlhcmNoaXZlX2VudHJ5X3NldF91aWQoZSwgKGxhX2ludDY0X3QpaWQpOworCX0KKwlpZiAoKGZsYWdzICYgT1dORVJfR1JPVVBfR0lEKSAhPSAwKSB7CisJCWlmKCFyZWFkX3ZhcihhLCAmaWQsICZ2YWx1ZV9zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIChpbnQ2NF90KXZhbHVlX3NpemUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQkqZXh0cmFfZGF0YV9zaXplIC09IHZhbHVlX3NpemU7CisKKwkJYXJjaGl2ZV9lbnRyeV9zZXRfZ2lkKGUsIChsYV9pbnQ2NF90KWlkKTsKKwl9CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19oZWFkX2ZpbGVfZXh0cmEoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwKKyAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSogZSwgc3RydWN0IHJhcjUqIHJhciwgc3NpemVfdCBleHRyYV9kYXRhX3NpemUpCit7CisJc2l6ZV90IGV4dHJhX2ZpZWxkX3NpemU7CisJc2l6ZV90IGV4dHJhX2ZpZWxkX2lkID0gMDsKKwlpbnQgcmV0ID0gQVJDSElWRV9GQVRBTDsKKwlzaXplX3QgdmFyX3NpemU7CisKKwl3aGlsZShleHRyYV9kYXRhX3NpemUgPiAwKSB7CisJCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZXh0cmFfZmllbGRfc2l6ZSwgJnZhcl9zaXplKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlleHRyYV9kYXRhX3NpemUgLT0gdmFyX3NpemU7CisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCB2YXJfc2l6ZSkpIHsKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJfQorCisJCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZXh0cmFfZmllbGRfaWQsICZ2YXJfc2l6ZSkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJZXh0cmFfZGF0YV9zaXplIC09IHZhcl9zaXplOworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgdmFyX3NpemUpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQlzd2l0Y2goZXh0cmFfZmllbGRfaWQpIHsKKwkJCWNhc2UgRVhfSEFTSDoKKwkJCQlyZXQgPSBwYXJzZV9maWxlX2V4dHJhX2hhc2goYSwgcmFyLAorCQkJCSAgICAmZXh0cmFfZGF0YV9zaXplKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhfSFRJTUU6CisJCQkJcmV0ID0gcGFyc2VfZmlsZV9leHRyYV9odGltZShhLCBlLCByYXIsCisJCQkJICAgICZleHRyYV9kYXRhX3NpemUpOworCQkJCWJyZWFrOworCQkJY2FzZSBFWF9SRURJUjoKKwkJCQlyZXQgPSBwYXJzZV9maWxlX2V4dHJhX3JlZGlyKGEsIGUsIHJhciwKKwkJCQkgICAgJmV4dHJhX2RhdGFfc2l6ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEVYX1VPV05FUjoKKwkJCQlyZXQgPSBwYXJzZV9maWxlX2V4dHJhX293bmVyKGEsIGUsCisJCQkJICAgICZleHRyYV9kYXRhX3NpemUpOworCQkJCWJyZWFrOworCQkJY2FzZSBFWF9WRVJTSU9OOgorCQkJCXJldCA9IHBhcnNlX2ZpbGVfZXh0cmFfdmVyc2lvbihhLCBlLAorCQkJCSAgICAmZXh0cmFfZGF0YV9zaXplKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhfQ1JZUFQ6CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWNhc2UgRVhfU1VCREFUQToKKwkJCQkvKiBmYWxsdGhyb3VnaCAqLworCQkJZGVmYXVsdDoKKwkJCQkvKiBTa2lwIHVuc3VwcG9ydGVkIGVudHJ5LiAqLworCQkJCXJldHVybiBjb25zdW1lKGEsIGV4dHJhX2RhdGFfc2l6ZSk7CisJCX0KKwl9CisKKwlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkvKiBBdHRyaWJ1dGUgbm90IGltcGxlbWVudGVkLiAqLworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfaGVhZF9maWxlKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCByYXI1KiByYXIsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGVudHJ5LCBzaXplX3QgYmxvY2tfZmxhZ3MpCit7CisJc3NpemVfdCBleHRyYV9kYXRhX3NpemUgPSAwOworCXNpemVfdCBkYXRhX3NpemUgPSAwOworCXNpemVfdCBmaWxlX2ZsYWdzID0gMDsKKwlzaXplX3QgZmlsZV9hdHRyID0gMDsKKwlzaXplX3QgY29tcHJlc3Npb25faW5mbyA9IDA7CisJc2l6ZV90IGhvc3Rfb3MgPSAwOworCXNpemVfdCBuYW1lX3NpemUgPSAwOworCXVpbnQ2NF90IHVucGFja2VkX3NpemUsIHdpbmRvd19zaXplOworCXVpbnQzMl90IG10aW1lID0gMCwgY3JjID0gMDsKKwlpbnQgY19tZXRob2QgPSAwLCBjX3ZlcnNpb24gPSAwOworCWNoYXIgbmFtZV91dGY4X2J1ZltNQVhfTkFNRV9JTl9CWVRFU107CisJY29uc3QgdWludDhfdCogcDsKKworCWVudW0gRklMRV9GTEFHUyB7CisJCURJUkVDVE9SWSA9IDB4MDAwMSwgVVRJTUUgPSAweDAwMDIsIENSQzMyID0gMHgwMDA0LAorCQlVTktOT1dOX1VOUEFDS0VEX1NJWkUgPSAweDAwMDgsCisJfTsKKworCWVudW0gRklMRV9BVFRSUyB7CisJCUFUVFJfUkVBRE9OTFkgPSAweDEsIEFUVFJfSElEREVOID0gMHgyLCBBVFRSX1NZU1RFTSA9IDB4NCwKKwkJQVRUUl9ESVJFQ1RPUlkgPSAweDEwLAorCX07CisKKwllbnVtIENPTVBfSU5GT19GTEFHUyB7CisJCVNPTElEID0gMHgwMDQwLAorCX07CisKKwllbnVtIEhPU1RfT1MgeworCQlIT1NUX1dJTkRPV1MgPSAwLAorCQlIT1NUX1VOSVggPSAxLAorCX07CisKKwlhcmNoaXZlX2VudHJ5X2NsZWFyKGVudHJ5KTsKKworCS8qIERvIG5vdCByZXNldCBmaWxlIGNvbnRleHQgaWYgd2UncmUgc3dpdGNoaW5nIGFyY2hpdmVzLiAqLworCWlmKCFyYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUpIHsKKwkJcmVzZXRfZmlsZV9jb250ZXh0KHJhcik7CisJfQorCisJaWYoYmxvY2tfZmxhZ3MgJiBIRkxfRVhUUkFfREFUQSkgeworCQlzaXplX3QgZWRhdGFfc2l6ZSA9IDA7CisJCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZWRhdGFfc2l6ZSwgTlVMTCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJLyogSW50ZW50aW9uYWwgdHlwZSBjYXN0IGZyb20gdW5zaWduZWQgdG8gc2lnbmVkLiAqLworCQlleHRyYV9kYXRhX3NpemUgPSAoc3NpemVfdCkgZWRhdGFfc2l6ZTsKKwl9CisKKwlpZihibG9ja19mbGFncyAmIEhGTF9EQVRBKSB7CisJCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZGF0YV9zaXplLCBOVUxMKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID0gZGF0YV9zaXplOworCX0gZWxzZSB7CisJCXJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgPSAwOworCisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSJubyBkYXRhIGZvdW5kIGluIGZpbGUvc2VydmljZSBibG9jayIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmZpbGVfZmxhZ3MsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZighcmVhZF92YXIoYSwgJnVucGFja2VkX3NpemUsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZihmaWxlX2ZsYWdzICYgVU5LTk9XTl9VTlBBQ0tFRF9TSVpFKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCSAgICAiRmlsZXMgd2l0aCB1bmtub3duIHVucGFja2VkIHNpemUgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJcmFyLT5maWxlLmRpciA9ICh1aW50OF90KSAoKGZpbGVfZmxhZ3MgJiBESVJFQ1RPUlkpID4gMCk7CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmZpbGVfYXR0ciwgTlVMTCkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCWlmKGZpbGVfZmxhZ3MgJiBVVElNRSkgeworCQlpZighcmVhZF91MzIoYSwgJm10aW1lKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZihmaWxlX2ZsYWdzICYgQ1JDMzIpIHsKKwkJaWYoIXJlYWRfdTMyKGEsICZjcmMpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmY29tcHJlc3Npb25faW5mbywgTlVMTCkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCWNfbWV0aG9kID0gKGludCkgKGNvbXByZXNzaW9uX2luZm8gPj4gNykgJiAweDc7CisJY192ZXJzaW9uID0gKGludCkgKGNvbXByZXNzaW9uX2luZm8gJiAweDNmKTsKKworCS8qIFJBUjUgc2VlbXMgdG8gbGltaXQgdGhlIGRpY3Rpb25hcnkgc2l6ZSB0byA2NE1CLiAqLworCXdpbmRvd19zaXplID0gKHJhci0+ZmlsZS5kaXIgPiAwKSA/CisJCTAgOgorCQlnX3VucGFja193aW5kb3dfc2l6ZSA8PCAoKGNvbXByZXNzaW9uX2luZm8gPj4gMTApICYgMTUpOworCXJhci0+Y3N0YXRlLm1ldGhvZCA9IGNfbWV0aG9kOworCXJhci0+Y3N0YXRlLnZlcnNpb24gPSBjX3ZlcnNpb24gKyA1MDsKKwlyYXItPmZpbGUuc29saWQgPSAoY29tcHJlc3Npb25faW5mbyAmIFNPTElEKSA+IDA7CisKKwkvKiBBcmNoaXZlcyB3aGljaCBkZWNsYXJlIHNvbGlkIGZpbGVzIHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSB3aW5kb3cKKwkgKiBidWZmZXIgZmlyc3QgYXJlIGludmFsaWQuICovCisKKwlpZihyYXItPmZpbGUuc29saWQgPiAwICYmIHJhci0+Y3N0YXRlLndpbmRvd19idWYgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICJEZWNsYXJlZCBzb2xpZCBmaWxlLCBidXQgbm8gd2luZG93IGJ1ZmZlciAiCisJCQkJICAiaW5pdGlhbGl6ZWQgeWV0LiIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBDaGVjayBpZiB3aW5kb3dfc2l6ZSBpcyBhIHNhbmUgdmFsdWUuIEFsc28sIGlmIHRoZSBmaWxlIGlzIG5vdAorCSAqIGRlY2xhcmVkIGFzIGEgZGlyZWN0b3J5LCBkaXNhbGxvdyB3aW5kb3dfc2l6ZSA9PSAwLiAqLworCWlmKHdpbmRvd19zaXplID4gKDY0ICogMTAyNCAqIDEwMjQpIHx8CisJICAgIChyYXItPmZpbGUuZGlyID09IDAgJiYgd2luZG93X3NpemUgPT0gMCkpCisJeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJEZWNsYXJlZCBkaWN0aW9uYXJ5IHNpemUgaXMgbm90IHN1cHBvcnRlZC4iKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYocmFyLT5maWxlLnNvbGlkID4gMCkgeworCQkvKiBSZS1jaGVjayBpZiBjdXJyZW50IHdpbmRvdyBzaXplIGlzIHRoZSBzYW1lIGFzIHByZXZpb3VzCisJCSAqIHdpbmRvdyBzaXplIChmb3Igc29saWQgZmlsZXMgb25seSkuICovCisJCWlmKHJhci0+ZmlsZS5zb2xpZF93aW5kb3dfc2l6ZSA+IDAgJiYKKwkJICAgIHJhci0+ZmlsZS5zb2xpZF93aW5kb3dfc2l6ZSAhPSAoc3NpemVfdCkgd2luZG93X3NpemUpCisJCXsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJXaW5kb3cgc2l6ZSBmb3IgdGhpcyBzb2xpZCBmaWxlIGRvZXNuJ3QgbWF0Y2ggIgorCQkJICAgICJ0aGUgd2luZG93IHNpemUgdXNlZCBpbiBwcmV2aW91cyBzb2xpZCBmaWxlLiAiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisJfQorCisJLyogSWYgd2UncmUgY3VycmVudGx5IHN3aXRjaGluZyB2b2x1bWVzLCBpZ25vcmUgdGhlIG5ldyBkZWZpbml0aW9uIG9mCisJICogd2luZG93X3NpemUuICovCisJaWYocmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lID09IDApIHsKKwkJLyogVmFsdWVzIHVwIHRvIDY0TSBzaG91bGQgZml0IGludG8gc3NpemVfdCBvbiBldmVyeQorCQkgKiBhcmNoaXRlY3R1cmUuICovCisJCXJhci0+Y3N0YXRlLndpbmRvd19zaXplID0gKHNzaXplX3QpIHdpbmRvd19zaXplOworCX0KKworCWlmKHJhci0+ZmlsZS5zb2xpZCA+IDAgJiYgcmFyLT5maWxlLnNvbGlkX3dpbmRvd19zaXplID09IDApIHsKKwkJLyogU29saWQgZmlsZXMgaGF2ZSB0byBoYXZlIHRoZSBzYW1lIHdpbmRvd19zaXplIGFjcm9zcworCQkgICB3aG9sZSBhcmNoaXZlLiBSZW1lbWJlciB0aGUgd2luZG93X3NpemUgcGFyYW1ldGVyCisJCSAgIGZvciBmaXJzdCBzb2xpZCBmaWxlIGZvdW5kLiAqLworCQlyYXItPmZpbGUuc29saWRfd2luZG93X3NpemUgPSByYXItPmNzdGF0ZS53aW5kb3dfc2l6ZTsKKwl9CisKKwlpbml0X3dpbmRvd19tYXNrKHJhcik7CisKKwlyYXItPmZpbGUuc2VydmljZSA9IDA7CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmhvc3Rfb3MsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZihob3N0X29zID09IEhPU1RfV0lORE9XUykgeworCQkvKiBIb3N0IE9TIGlzIFdpbmRvd3MgKi8KKworCQlfX0xBX01PREVfVCBtb2RlOworCisJCWlmKGZpbGVfYXR0ciAmIEFUVFJfRElSRUNUT1JZKSB7CisJCQlpZiAoZmlsZV9hdHRyICYgQVRUUl9SRUFET05MWSkgeworCQkJCW1vZGUgPSAwNTU1IHwgQUVfSUZESVI7CisJCQl9IGVsc2UgeworCQkJCW1vZGUgPSAwNzU1IHwgQUVfSUZESVI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoZmlsZV9hdHRyICYgQVRUUl9SRUFET05MWSkgeworCQkJCW1vZGUgPSAwNDQ0IHwgQUVfSUZSRUc7CisJCQl9IGVsc2UgeworCQkJCW1vZGUgPSAwNjQ0IHwgQUVfSUZSRUc7CisJCQl9CisJCX0KKworCQlhcmNoaXZlX2VudHJ5X3NldF9tb2RlKGVudHJ5LCBtb2RlKTsKKworCQlpZiAoZmlsZV9hdHRyICYgKEFUVFJfUkVBRE9OTFkgfCBBVFRSX0hJRERFTiB8IEFUVFJfU1lTVEVNKSkgeworCQkJY2hhciAqZmZsYWdzX3RleHQsICpwdHI7CisJCQkvKiBhbGxvY2F0ZSBmb3IgInJkb25seSxoaWRkZW4sc3lzdGVtLCIgKi8KKwkJCWZmbGFnc190ZXh0ID0gbWFsbG9jKDIyICogc2l6ZW9mKGNoYXIpKTsKKwkJCWlmIChmZmxhZ3NfdGV4dCAhPSBOVUxMKSB7CisJCQkJcHRyID0gZmZsYWdzX3RleHQ7CisJCQkJaWYgKGZpbGVfYXR0ciAmIEFUVFJfUkVBRE9OTFkpIHsKKwkJCQkJc3RyY3B5KHB0ciwgInJkb25seSwiKTsKKwkJCQkJcHRyID0gcHRyICsgNzsKKwkJCQl9CisJCQkJaWYgKGZpbGVfYXR0ciAmIEFUVFJfSElEREVOKSB7CisJCQkJCXN0cmNweShwdHIsICJoaWRkZW4sIik7CisJCQkJCXB0ciA9IHB0ciArIDc7CisJCQkJfQorCQkJCWlmIChmaWxlX2F0dHIgJiBBVFRSX1NZU1RFTSkgeworCQkJCQlzdHJjcHkocHRyLCAic3lzdGVtLCIpOworCQkJCQlwdHIgPSBwdHIgKyA3OworCQkJCX0KKwkJCQlpZiAocHRyID4gZmZsYWdzX3RleHQpIHsKKwkJCQkJLyogRGVsZXRlIHRyYWlsaW5nIGNvbW1hICovCisJCQkJCSoocHRyIC0gMSkgPSAnXDAnOworCQkJCQlhcmNoaXZlX2VudHJ5X2NvcHlfZmZsYWdzX3RleHQoZW50cnksCisJCQkJCSAgICBmZmxhZ3NfdGV4dCk7CisJCQkJfQorCQkJCWZyZWUoZmZsYWdzX3RleHQpOworCQkJfQorCQl9CisJfSBlbHNlIGlmKGhvc3Rfb3MgPT0gSE9TVF9VTklYKSB7CisJCS8qIEhvc3QgT1MgaXMgVW5peCAqLworCQlhcmNoaXZlX2VudHJ5X3NldF9tb2RlKGVudHJ5LCAoX19MQV9NT0RFX1QpIGZpbGVfYXR0cik7CisJfSBlbHNlIHsKKwkJLyogVW5rbm93biBob3N0IE9TICovCisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSJVbnN1cHBvcnRlZCBIb3N0IE9TOiAweCV4IiwgKGludCkgaG9zdF9vcyk7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZuYW1lX3NpemUsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZighcmVhZF9haGVhZChhLCBuYW1lX3NpemUsICZwKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJaWYobmFtZV9zaXplID4gKE1BWF9OQU1FX0lOX0NIQVJTIC0gMSkpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJIkZpbGVuYW1lIGlzIHRvbyBsb25nIik7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYobmFtZV9zaXplID09IDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJIk5vIGZpbGVuYW1lIHNwZWNpZmllZCIpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCW1lbWNweShuYW1lX3V0ZjhfYnVmLCBwLCBuYW1lX3NpemUpOworCW5hbWVfdXRmOF9idWZbbmFtZV9zaXplXSA9IDA7CisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIG5hbWVfc2l6ZSkpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCWFyY2hpdmVfZW50cnlfdXBkYXRlX3BhdGhuYW1lX3V0ZjgoZW50cnksIG5hbWVfdXRmOF9idWYpOworCisJaWYoZXh0cmFfZGF0YV9zaXplID4gMCkgeworCQlpbnQgcmV0ID0gcHJvY2Vzc19oZWFkX2ZpbGVfZXh0cmEoYSwgZW50cnksIHJhciwKKwkJICAgIGV4dHJhX2RhdGFfc2l6ZSk7CisKKwkJLyoKKwkJICogVE9ETzogcmV3cml0ZSBvciByZW1vdmUgdXNlbGVzcyBzYW5pdHkgY2hlY2sKKwkJICogICAgICAgYXMgZXh0cmFfZGF0YV9zaXplIGlzIG5vdCBwYXNzZWQgYXMgYSBwb2ludGVyCisJCSAqCisJCWlmKGV4dHJhX2RhdGFfc2l6ZSA8IDApIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCQkgICAgIkZpbGUgZXh0cmEgZGF0YSBzaXplIGlzIG5vdCB6ZXJvIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCQkgKi8KKworCQlpZihyZXQgIT0gQVJDSElWRV9PSykKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYoKGZpbGVfZmxhZ3MgJiBVTktOT1dOX1VOUEFDS0VEX1NJWkUpID09IDApIHsKKwkJcmFyLT5maWxlLnVucGFja2VkX3NpemUgPSAoc3NpemVfdCkgdW5wYWNrZWRfc2l6ZTsKKwkJaWYocmFyLT5maWxlLnJlZGlyX3R5cGUgPT0gUkVESVJfVFlQRV9OT05FKQorCQkJYXJjaGl2ZV9lbnRyeV9zZXRfc2l6ZShlbnRyeSwgdW5wYWNrZWRfc2l6ZSk7CisJfQorCisJaWYoZmlsZV9mbGFncyAmIFVUSU1FKSB7CisJCWFyY2hpdmVfZW50cnlfc2V0X210aW1lKGVudHJ5LCAodGltZV90KSBtdGltZSwgMCk7CisJfQorCisJaWYoZmlsZV9mbGFncyAmIENSQzMyKSB7CisJCXJhci0+ZmlsZS5zdG9yZWRfY3JjMzIgPSBjcmM7CisJfQorCisJaWYoIXJhci0+Y3N0YXRlLnN3aXRjaF9tdWx0aXZvbHVtZSkgeworCQkvKiBEbyBub3QgcmVpbml0aWFsaXplIHVucGFja2luZyBzdGF0ZSBpZiB3ZSdyZSBzd2l0Y2hpbmcKKwkJICogYXJjaGl2ZXMuICovCisJCXJhci0+Y3N0YXRlLmJsb2NrX3BhcnNpbmdfZmluaXNoZWQgPSAxOworCQlyYXItPmNzdGF0ZS5hbGxfZmlsdGVyc19hcHBsaWVkID0gMTsKKwkJcmFyLT5jc3RhdGUuaW5pdGlhbGl6ZWQgPSAwOworCX0KKworCWlmKHJhci0+Z2VuZXJpYy5zcGxpdF9iZWZvcmUgPiAwKSB7CisJCS8qIElmIG5vdyB3ZSdyZSBzdGFuZGluZyBvbiBhIGhlYWRlciB0aGF0IGhhcyBhICdzcGxpdCBiZWZvcmUnCisJCSAqIG1hcmssIGl0IG1lYW5zIHdlJ3JlIHN0YW5kaW5nIG9uIGEgJ2NvbnRpbnVhdGlvbicgZmlsZQorCQkgKiBoZWFkZXIuIFNpZ25hbCB0aGUgY2FsbGVyIHRoYXQgaWYgaXQgd2FudHMgdG8gbW92ZSB0bworCQkgKiBhbm90aGVyIGZpbGUsIGl0IG11c3QgY2FsbCByYXI1X3JlYWRfaGVhZGVyKCkgZnVuY3Rpb24KKwkJICogYWdhaW4uICovCisKKwkJcmV0dXJuIEFSQ0hJVkVfUkVUUlk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIEFSQ0hJVkVfT0s7CisJfQorfQorCitzdGF0aWMgaW50IHByb2Nlc3NfaGVhZF9zZXJ2aWNlKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCByYXI1KiByYXIsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkqIGVudHJ5LCBzaXplX3QgYmxvY2tfZmxhZ3MpCit7CisJLyogUHJvY2VzcyB0aGlzIFNFUlZJQ0UgYmxvY2sgdGhlIHNhbWUgd2F5IGFzIEZJTEUgYmxvY2tzLiAqLworCWludCByZXQgPSBwcm9jZXNzX2hlYWRfZmlsZShhLCByYXIsIGVudHJ5LCBibG9ja19mbGFncyk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiByZXQ7CisKKwlyYXItPmZpbGUuc2VydmljZSA9IDE7CisKKwkvKiBCdXQgc2tpcCB0aGUgZGF0YSBwYXJ0IGF1dG9tYXRpY2FsbHkuIEl0J3Mgbm8gdXNlIGZvciB0aGUgdXNlcgorCSAqIGFueXdheS4gIEl0IGNvbnRhaW5zIG9ubHkgc2VydmljZSBkYXRhLCBub3QgZXZlbiBuZWVkZWQgdG8KKwkgKiBwcm9wZXJseSB1bnBhY2sgdGhlIGZpbGUuICovCisJcmV0ID0gcmFyNV9yZWFkX2RhdGFfc2tpcChhKTsKKwlpZihyZXQgIT0gQVJDSElWRV9PSykKKwkJcmV0dXJuIHJldDsKKworCS8qIEFmdGVyIHNraXBwaW5nLCB0cnkgcGFyc2luZyBhbm90aGVyIGJsb2NrIGF1dG9tYXRpY2FsbHkuICovCisJcmV0dXJuIEFSQ0hJVkVfUkVUUlk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19oZWFkX21haW4oc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSogZW50cnksIHNpemVfdCBibG9ja19mbGFncykKK3sKKwlpbnQgcmV0OworCXNpemVfdCBleHRyYV9kYXRhX3NpemUgPSAwOworCXNpemVfdCBleHRyYV9maWVsZF9zaXplID0gMDsKKwlzaXplX3QgZXh0cmFfZmllbGRfaWQgPSAwOworCXNpemVfdCBhcmNoaXZlX2ZsYWdzID0gMDsKKworCWVudW0gTUFJTl9GTEFHUyB7CisJCVZPTFVNRSA9IDB4MDAwMSwgICAgICAgICAvKiBtdWx0aS12b2x1bWUgYXJjaGl2ZSAqLworCQlWT0xVTUVfTlVNQkVSID0gMHgwMDAyLCAgLyogdm9sdW1lIG51bWJlciwgZmlyc3Qgdm9sIGRvZXNuJ3QKKwkJCQkJICAqIGhhdmUgaXQgKi8KKwkJU09MSUQgPSAweDAwMDQsICAgICAgICAgIC8qIHNvbGlkIGFyY2hpdmUgKi8KKwkJUFJPVEVDVCA9IDB4MDAwOCwgICAgICAgIC8qIGNvbnRhaW5zIFJlY292ZXJ5IGluZm8gKi8KKwkJTE9DSyA9IDB4MDAxMCwgICAgICAgICAgIC8qIHJlYWRvbmx5IGZsYWcsIG5vdCB1c2VkICovCisJfTsKKworCWVudW0gTUFJTl9FWFRSQSB7CisJCS8vIEp1c3Qgb25lIGF0dHJpYnV0ZSBoZXJlLgorCQlMT0NBVE9SID0gMHgwMSwKKwl9OworCisJKHZvaWQpIGVudHJ5OworCisJaWYoYmxvY2tfZmxhZ3MgJiBIRkxfRVhUUkFfREFUQSkgeworCQlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmV4dHJhX2RhdGFfc2l6ZSwgTlVMTCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfSBlbHNlIHsKKwkJZXh0cmFfZGF0YV9zaXplID0gMDsKKwl9CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmFyY2hpdmVfZmxhZ3MsIE5VTEwpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlyYXItPm1haW4udm9sdW1lID0gKGFyY2hpdmVfZmxhZ3MgJiBWT0xVTUUpID4gMDsKKwlyYXItPm1haW4uc29saWQgPSAoYXJjaGl2ZV9mbGFncyAmIFNPTElEKSA+IDA7CisKKwlpZihhcmNoaXZlX2ZsYWdzICYgVk9MVU1FX05VTUJFUikgeworCQlzaXplX3QgdiA9IDA7CisJCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmdiwgTlVMTCkpIHsKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJfQorCisJCWlmICh2ID4gVUlOVF9NQVgpIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIkludmFsaWQgdm9sdW1lIG51bWJlciIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKworCQlyYXItPm1haW4udm9sX25vID0gKHVuc2lnbmVkIGludCkgdjsKKwl9IGVsc2UgeworCQlyYXItPm1haW4udm9sX25vID0gMDsKKwl9CisKKwlpZihyYXItPnZvbC5leHBlY3RlZF92b2xfbm8gPiAwICYmCisJCXJhci0+bWFpbi52b2xfbm8gIT0gcmFyLT52b2wuZXhwZWN0ZWRfdm9sX25vKQorCXsKKwkJLyogUmV0dXJuaW5nIEVPRiBpbnN0ZWFkIG9mIEZBVEFMIGJlY2F1c2Ugb2Ygc3RyYW5nZQorCQkgKiBsaWJhcmNoaXZlIGJlaGF2aW9yLiBXaGVuIG9wZW5pbmcgbXVsdGlwbGUgZmlsZXMgdmlhCisJCSAqIGFyY2hpdmVfcmVhZF9vcGVuX2ZpbGVuYW1lcygpLCBhZnRlciByZWFkaW5nIHVwIHRoZSB3aG9sZQorCQkgKiBsYXN0IGZpbGUsIHRoZSBfX2FyY2hpdmVfcmVhZF9haGVhZCBmdW5jdGlvbiB3cmFwcyB1cCB0bworCQkgKiB0aGUgZmlyc3QgYXJjaGl2ZSBpbnN0ZWFkIG9mIHJldHVybmluZyBFT0YuICovCisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZihleHRyYV9kYXRhX3NpemUgPT0gMCkgeworCQkvKiBFYXJseSByZXR1cm4uICovCisJCXJldHVybiBBUkNISVZFX09LOworCX0KKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZXh0cmFfZmllbGRfc2l6ZSwgTlVMTCkpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCWlmKCFyZWFkX3Zhcl9zaXplZChhLCAmZXh0cmFfZmllbGRfaWQsIE5VTEwpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZihleHRyYV9maWVsZF9zaXplID09IDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiSW52YWxpZCBleHRyYSBmaWVsZCBzaXplIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXN3aXRjaChleHRyYV9maWVsZF9pZCkgeworCQljYXNlIExPQ0FUT1I6CisJCQlyZXQgPSBwcm9jZXNzX21haW5fbG9jYXRvcl9leHRyYV9ibG9jayhhLCByYXIpOworCQkJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJCQkvKiBFcnJvciB3aGlsZSBwYXJzaW5nIG1haW4gbG9jYXRvciBleHRyYQorCQkJCSAqIGJsb2NrLiAqLworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiVW5zdXBwb3J0ZWQgZXh0cmEgdHlwZSAoMHgleCkiLAorCQkJICAgIChpbnQpIGV4dHJhX2ZpZWxkX2lkKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHNraXBfdW5wcm9jZXNzZWRfYnl0ZXMoc3RydWN0IGFyY2hpdmVfcmVhZCogYSkgeworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwlpbnQgcmV0OworCisJaWYocmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZykgeworCQkvKiBVc2UgZGlmZmVyZW50IHNraXBwaW5nIG1ldGhvZCBpbiBibG9jayBtZXJnaW5nIG1vZGUgdGhhbiBpbgorCQkgKiBub3JtYWwgbW9kZS4gSWYgbWVyZ2UgbW9kZSBpcyBhY3RpdmUsIHJhcjVfcmVhZF9kYXRhX3NraXAKKwkJICogY2FuJ3QgYmUgdXNlZCwgYmVjYXVzZSBpdCBjb3VsZCBhbGxvdyByZWN1cnNpdmUgdXNlIG9mCisJCSAqIG1lcmdlX2Jsb2NrKCkgKiBmdW5jdGlvbiwgYW5kIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBzdXBwb3J0CisJCSAqIHJlY3Vyc2l2ZSB1c2UuICovCisJCWlmKHJhci0+bWVyZ2VfbW9kZSkgeworCQkJLyogRGlzY2FyZCB3aG9sZSBtZXJnZWQgYmxvY2suIFRoaXMgaXMgdmFsaWQgaW4gc29saWQKKwkJCSAqIG1vZGUgYXMgd2VsbCwgYmVjYXVzZSB0aGUgY29kZSB3aWxsIGRpc2NhcmQgYmxvY2tzCisJCQkgKiBvbmx5IGlmIHRob3NlIGJsb2NrcyBhcmUgc2FmZSB0byBkaXNjYXJkIChpLmUuCisJCQkgKiB0aGV5J3JlIG5vdCBGSUxFIGJsb2NrcykuICAqLworCQkJcmV0ID0gY29uc3VtZShhLCByYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nKTsKKwkJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCXJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgPSAwOworCQl9IGVsc2UgeworCQkJLyogSWYgd2UncmUgbm90IGluIG1lcmdlIG1vZGUsIHVzZSBzYWZlIHNraXBwaW5nIGNvZGUuCisJCQkgKiBUaGlzIHdpbGwgZW5zdXJlIHdlJ2xsIGhhbmRsZSBzb2xpZCBhcmNoaXZlcworCQkJICogcHJvcGVybHkuICovCisJCQlyZXQgPSByYXI1X3JlYWRfZGF0YV9za2lwKGEpOworCQkJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgc2Nhbl9mb3Jfc2lnbmF0dXJlKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpOworCisvKiBCYXNlIGJsb2NrIHByb2Nlc3NpbmcgZnVuY3Rpb24uIEEgJ2Jhc2UgYmxvY2snIGlzIGEgUkFSdjUgaGVhZGVyIGJsb2NrCisgKiB0aGF0IHRlbGxzIHRoZSByZWFkZXIgd2hhdCBraW5kIG9mIGRhdGEgaXMgc3RvcmVkIGluc2lkZSB0aGUgYmxvY2suCisgKgorICogRnJvbSB0aGUgYmlyZHMtZXllIHZpZXcgYSBSQVIgZmlsZSBsb29rcyBmaWxlIHRoaXM6CisgKgorICogPG1hZ2ljPjxiYXNlX2Jsb2NrXzE+PGJhc2VfYmxvY2tfMj4uLi48YmFzZV9ibG9ja19uPgorICoKKyAqIFRoZXJlIGFyZSBhIGZldyB0eXBlcyBvZiBiYXNlIGJsb2Nrcy4gVGhvc2UgdHlwZXMgYXJlIHNwZWNpZmllZCBpbnNpZGUKKyAqIHRoZSAnc3dpdGNoJyBzdGF0ZW1lbnQgaW4gdGhpcyBmdW5jdGlvbi4gRm9yIGV4YW1wbGUgcHVycG9zZXMsIEknbGwgd3JpdGUKKyAqIGhvdyBhIHN0YW5kYXJkIFJBUnY1IGZpbGUgY291bGQgbG9vayBsaWtlIGhlcmU6CisgKgorICogPG1hZ2ljPjxNQUlOPjxGSUxFPjxGSUxFPjxGSUxFPjxTRVJWSUNFPjxFTkRBUkM+CisgKgorICogVGhlIHN0cnVjdHVyZSBhYm92ZSBjb3VsZCBkZXNjcmliZSBhbiBhcmNoaXZlIGZpbGUgd2l0aCAzIGZpbGVzIGluIGl0LAorICogb25lIHNlcnZpY2UgIlF1aWNrT3BlbiIgYmxvY2sgKHRoYXQgaXMgaWdub3JlZCBieSB0aGlzIHBhcnNlciksIGFuZCBhbgorICogZW5kIG9mIGZpbGUgYmFzZSBibG9jayBtYXJrZXIuCisgKgorICogSWYgdGhlIGZpbGUgaXMgc3RvcmVkIGluIG11bHRpcGxlIGFyY2hpdmUgZmlsZXMgKCJtdWx0aWFyY2hpdmUiKSwgaXQgbWlnaHQKKyAqIGxvb2sgbGlrZSB0aGlzOgorICoKKyAqIC5wYXJ0MDEucmFyOiA8bWFnaWM+PE1BSU4+PEZJTEU+PEVOREFSQz4KKyAqIC5wYXJ0MDIucmFyOiA8bWFnaWM+PE1BSU4+PEZJTEU+PEVOREFSQz4KKyAqIC5wYXJ0MDMucmFyOiA8bWFnaWM+PE1BSU4+PEZJTEU+PEVOREFSQz4KKyAqCisgKiBUaGlzIGV4YW1wbGUgY291bGQgZGVzY3JpYmUgMyBSQVIgZmlsZXMgdGhhdCBjb250YWluIE9ORSBhcmNoaXZlZCBmaWxlLgorICogT3IgaXQgY291bGQgZGVzY3JpYmUgMyBSQVIgZmlsZXMgdGhhdCBjb250YWluIDMgZGlmZmVyZW50IGZpbGVzLiBPciAzCisgKiBSQVIgZmlsZXMgdGhhbiBjb250YWluIDIgZmlsZXMuIEl0IGFsbCBkZXBlbmRzIHdoYXQgbWV0YWRhdGEgaXMgc3RvcmVkIGluCisgKiB0aGUgaGVhZGVycyBvZiA8RklMRT4gYmxvY2tzLgorICoKKyAqIEVhY2ggPEZJTEU+IGJsb2NrIGNvbnRhaW5zIGluZm8gYWJvdXQgaXRzIHNpemUsIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGl0J3MKKyAqIHN0b3JpbmcgaW5zaWRlLCBhbmQgd2hldGhlciB0aGlzIEZJTEUgYmxvY2sgaXMgYSBjb250aW51YXRpb24gYmxvY2sgb2YKKyAqIHByZXZpb3VzIGFyY2hpdmUgKCdzcGxpdCBiZWZvcmUnKSwgYW5kIGlzIHRoaXMgRklMRSBibG9jayBzaG91bGQgYmUKKyAqIGNvbnRpbnVlZCBpbiBhbm90aGVyIGFyY2hpdmUgKCdzcGxpdCBhZnRlcicpLiBCeSBwYXJzaW5nIHRoZSAnc3BsaXQgYmVmb3JlJworICogYW5kICdzcGxpdCBhZnRlcicgZmxhZ3MsIHdlJ3JlIGFibGUgdG8gdGVsbCBpZiBtdWx0aXBsZSA8RklMRT4gYmFzZSBibG9ja3MKKyAqIGFyZSBkZXNjcmliaW5nIG9uZSBmaWxlLCBvciBtdWx0aXBsZSBmaWxlcyAod2l0aCB0aGUgc2FtZSBmaWxlbmFtZSwgZm9yCisgKiBleGFtcGxlKS4KKyAqCisgKiBPbmUgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IGlmIHdlJ3JlIHBhcnNpbmcgdGhlIGZpcnN0IDxGSUxFPiBibG9jaywgYW5kCisgKiB3ZSBzZWUgJ3NwbGl0IGFmdGVyJyBmbGFnLCB0aGVuIHdlIG5lZWQgdG8ganVtcCBvdmVyIHRvIGFub3RoZXIgPEZJTEU+CisgKiBibG9jayB0byBiZSBhYmxlIHRvIGRlY29tcHJlc3MgcmVzdCBvZiB0aGUgZGF0YS4gVG8gZG8gdGhpcywgd2UgbmVlZAorICogdG8gc2tpcCB0aGUgPEVOREFSQz4gYmxvY2ssIHRoZW4gc3dpdGNoIHRvIGFub3RoZXIgZmlsZSwgdGhlbiBza2lwIHRoZQorICogPG1hZ2ljPiBibG9jaywgPE1BSU4+IGJsb2NrLCBhbmQgdGhlbiB3ZSdyZSBzdGFuZGluZyBvbiB0aGUgcHJvcGVyCisgKiA8RklMRT4gYmxvY2suCisgKi8KKworc3RhdGljIGludCBwcm9jZXNzX2Jhc2VfYmxvY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSwKKyAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSogZW50cnkpCit7CisJY29uc3Qgc2l6ZV90IFNNQUxMRVNUX1JBUjVfQkxPQ0tfU0laRSA9IDM7CisKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisJdWludDMyX3QgaGRyX2NyYywgY29tcHV0ZWRfY3JjOworCXNpemVfdCByYXdfaGRyX3NpemUgPSAwLCBoZHJfc2l6ZV9sZW4sIGhkcl9zaXplOworCXNpemVfdCBoZWFkZXJfaWQgPSAwOworCXNpemVfdCBoZWFkZXJfZmxhZ3MgPSAwOworCWNvbnN0IHVpbnQ4X3QqIHA7CisJaW50IHJldDsKKworCWVudW0gSEVBREVSX1RZUEUgeworCQlIRUFEX01BUksgICAgPSAweDAwLCBIRUFEX01BSU4gID0gMHgwMSwgSEVBRF9GSUxFICAgPSAweDAyLAorCQlIRUFEX1NFUlZJQ0UgPSAweDAzLCBIRUFEX0NSWVBUID0gMHgwNCwgSEVBRF9FTkRBUkMgPSAweDA1LAorCQlIRUFEX1VOS05PV04gPSAweGZmLAorCX07CisKKwkvKiBTa2lwIGFueSB1bnByb2Nlc3NlZCBkYXRhIGZvciB0aGlzIGZpbGUuICovCisJcmV0ID0gc2tpcF91bnByb2Nlc3NlZF9ieXRlcyhhKTsKKwlpZihyZXQgIT0gQVJDSElWRV9PSykKKwkJcmV0dXJuIHJldDsKKworCS8qIFJlYWQgdGhlIGV4cGVjdGVkIENSQzMyIGNoZWNrc3VtLiAqLworCWlmKCFyZWFkX3UzMihhLCAmaGRyX2NyYykpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCS8qIFJlYWQgaGVhZGVyIHNpemUuICovCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZyYXdfaGRyX3NpemUsICZoZHJfc2l6ZV9sZW4pKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwloZHJfc2l6ZSA9IHJhd19oZHJfc2l6ZSArIGhkcl9zaXplX2xlbjsKKworCS8qIFNhbml0eSBjaGVjaywgbWF4aW11bSBoZWFkZXIgc2l6ZSBmb3IgUkFSNSBpcyAyTUIuICovCisJaWYoaGRyX3NpemUgPiAoMiAqIDEwMjQgKiAxMDI0KSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJCYXNlIGJsb2NrIGhlYWRlciBpcyB0b28gbGFyZ2UiKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBBZGRpdGlvbmFsIHNhbml0eSBjaGVja3MgdG8gd2VlZCBvdXQgaW52YWxpZCBmaWxlcy4gKi8KKwlpZihyYXdfaGRyX3NpemUgPT0gMCB8fCBoZHJfc2l6ZV9sZW4gPT0gMCB8fAorCQloZHJfc2l6ZSA8IFNNQUxMRVNUX1JBUjVfQkxPQ0tfU0laRSkKKwl7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIlRvbyBzbWFsbCBibG9jayBlbmNvdW50ZXJlZCAoJXp1IGJ5dGVzKSIsCisJCSAgICByYXdfaGRyX3NpemUpOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIFJlYWQgdGhlIHdob2xlIGhlYWRlciBkYXRhIGludG8gbWVtb3J5LCBtYXhpbXVtIG1lbW9yeSB1c2UgaGVyZSBpcworCSAqIDJNQi4gKi8KKwlpZighcmVhZF9haGVhZChhLCBoZHJfc2l6ZSwgJnApKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwkvKiBWZXJpZnkgdGhlIENSQzMyIG9mIHRoZSBoZWFkZXIgZGF0YS4gKi8KKwljb21wdXRlZF9jcmMgPSAodWludDMyX3QpIGNyYzMyKDAsIHAsIChpbnQpIGhkcl9zaXplKTsKKwlpZihjb21wdXRlZF9jcmMgIT0gaGRyX2NyYykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJIZWFkZXIgQ1JDIGVycm9yIik7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogSWYgdGhlIGNoZWNrc3VtIGlzIE9LLCB3ZSBwcm9jZWVkIHdpdGggcGFyc2luZy4gKi8KKwlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgaGRyX3NpemVfbGVuKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJaWYoIXJlYWRfdmFyX3NpemVkKGEsICZoZWFkZXJfaWQsIE5VTEwpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZighcmVhZF92YXJfc2l6ZWQoYSwgJmhlYWRlcl9mbGFncywgTlVMTCkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCXJhci0+Z2VuZXJpYy5zcGxpdF9hZnRlciA9IChoZWFkZXJfZmxhZ3MgJiBIRkxfU1BMSVRfQUZURVIpID4gMDsKKwlyYXItPmdlbmVyaWMuc3BsaXRfYmVmb3JlID0gKGhlYWRlcl9mbGFncyAmIEhGTF9TUExJVF9CRUZPUkUpID4gMDsKKwlyYXItPmdlbmVyaWMuc2l6ZSA9IChpbnQpaGRyX3NpemU7CisJcmFyLT5nZW5lcmljLmxhc3RfaGVhZGVyX2lkID0gKGludCloZWFkZXJfaWQ7CisJcmFyLT5tYWluLmVuZGFyYyA9IDA7CisKKwkvKiBUaG9zZSBhcmUgcG9zc2libGUgaGVhZGVyIGlkcyBpbiBSQVJ2NS4gKi8KKwlzd2l0Y2goaGVhZGVyX2lkKSB7CisJCWNhc2UgSEVBRF9NQUlOOgorCQkJcmV0ID0gcHJvY2Vzc19oZWFkX21haW4oYSwgcmFyLCBlbnRyeSwgaGVhZGVyX2ZsYWdzKTsKKworCQkJLyogTWFpbiBoZWFkZXIgZG9lc24ndCBoYXZlIGFueSBmaWxlcyBpbiBpdCwgc28gaXQncworCQkJICogcG9pbnRsZXNzIHRvIHJldHVybiB0byB0aGUgY2FsbGVyLiBSZXRyeSB0byBuZXh0CisJCQkgKiBoZWFkZXIsIHdoaWNoIHNob3VsZCBiZSBIRUFEX0ZJTEUvSEVBRF9TRVJWSUNFLiAqLworCQkJaWYocmV0ID09IEFSQ0hJVkVfT0spCisJCQkJcmV0dXJuIEFSQ0hJVkVfUkVUUlk7CisKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgSEVBRF9TRVJWSUNFOgorCQkJcmV0ID0gcHJvY2Vzc19oZWFkX3NlcnZpY2UoYSwgcmFyLCBlbnRyeSwgaGVhZGVyX2ZsYWdzKTsKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgSEVBRF9GSUxFOgorCQkJcmV0ID0gcHJvY2Vzc19oZWFkX2ZpbGUoYSwgcmFyLCBlbnRyeSwgaGVhZGVyX2ZsYWdzKTsKKwkJCXJldHVybiByZXQ7CisJCWNhc2UgSEVBRF9DUllQVDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIkVuY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZCIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCWNhc2UgSEVBRF9FTkRBUkM6CisJCQlyYXItPm1haW4uZW5kYXJjID0gMTsKKworCQkJLyogQWZ0ZXIgZW5jb3VudGVyaW5nIGFuIGVuZCBvZiBmaWxlIG1hcmtlciwgd2UgbmVlZAorCQkJICogdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gaWYgdGhpcyBhcmNoaXZlIGlzCisJCQkgKiBjb250aW51ZWQgaW4gYW5vdGhlciBmaWxlIChpLmUuIGlzIGl0IHBhcnQwMS5yYXI6CisJCQkgKiBpcyB0aGVyZSBhIHBhcnQwMi5yYXI/KSAqLworCQkJaWYocmFyLT5tYWluLnZvbHVtZSkgeworCQkJCS8qIEluIGNhc2UgdGhlcmUgaXMgcGFydDAyLnJhciwgcG9zaXRpb24gdGhlCisJCQkJICogcmVhZCBwb2ludGVyIGluIGEgcHJvcGVyIHBsYWNlLCBzbyB3ZSBjYW4KKwkJCQkgKiByZXN1bWUgcGFyc2luZy4gKi8KKwkJCQlyZXQgPSBzY2FuX2Zvcl9zaWduYXR1cmUoYSk7CisJCQkJaWYocmV0ID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQkJCX0gZWxzZSB7CisJCQkJCWlmKHJhci0+dm9sLmV4cGVjdGVkX3ZvbF9ubyA9PQorCQkJCQkgICAgVUlOVF9NQVgpIHsKKwkJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJCQkgICAgIkhlYWRlciBlcnJvciIpOworCQkJCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQkJCQl9CisKKwkJCQkJcmFyLT52b2wuZXhwZWN0ZWRfdm9sX25vID0KKwkJCQkJICAgIHJhci0+bWFpbi52b2xfbm8gKyAxOworCQkJCQlyZXR1cm4gQVJDSElWRV9PSzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJCX0KKwkJY2FzZSBIRUFEX01BUks6CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCWRlZmF1bHQ6CisJCQlpZigoaGVhZGVyX2ZsYWdzICYgSEZMX1NLSVBfSUZfVU5LTk9XTikgPT0gMCkgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSAgICAiSGVhZGVyIHR5cGUgZXJyb3IiKTsKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCX0gZWxzZSB7CisJCQkJLyogSWYgdGhlIGJsb2NrIGlzIG1hcmtlZCBhcyAnc2tpcCBpZiB1bmtub3duJywKKwkJCQkgKiBkbyBhcyB0aGUgZmxhZyBzYXlzOiBza2lwIHRoZSBibG9jaworCQkJCSAqIGluc3RlYWQgb24gZmFpbGluZyBvbiBpdC4gKi8KKwkJCQlyZXR1cm4gQVJDSElWRV9SRVRSWTsKKwkJCX0KKwl9CisKKyNpZiAhZGVmaW5lZCBXSU4zMgorCS8vIE5vdCByZWFjaGVkLgorCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJICAgICJJbnRlcm5hbCB1bnBhY2tlciBlcnJvciIpOworCXJldHVybiBBUkNISVZFX0ZBVEFMOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgc2tpcF9iYXNlX2Jsb2NrKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlpbnQgcmV0OworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCS8qIENyZWF0ZSBhIG5ldyBsb2NhbCBhcmNoaXZlX2VudHJ5IHN0cnVjdHVyZSB0aGF0IHdpbGwgYmUgb3BlcmF0ZWQgb24KKwkgKiBieSBoZWFkZXIgcmVhZGVyOyBvcGVyYXRpb25zIG9uIHRoaXMgYXJjaGl2ZV9lbnRyeSB3aWxsIGJlIGRpc2NhcmRlZC4KKwkgKi8KKwlzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSogZW50cnkgPSBhcmNoaXZlX2VudHJ5X25ldygpOworCXJldCA9IHByb2Nlc3NfYmFzZV9ibG9jayhhLCBlbnRyeSk7CisKKwkvKiBEaXNjYXJkIG9wZXJhdGlvbnMgb24gdGhpcyBhcmNoaXZlX2VudHJ5IHN0cnVjdHVyZS4gKi8KKwlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnkpOworCWlmKHJldCA9PSBBUkNISVZFX0ZBVEFMKQorCQlyZXR1cm4gcmV0OworCisJaWYocmFyLT5nZW5lcmljLmxhc3RfaGVhZGVyX2lkID09IDIgJiYgcmFyLT5nZW5lcmljLnNwbGl0X2JlZm9yZSA+IDApCisJCXJldHVybiBBUkNISVZFX09LOworCisJaWYocmV0ID09IEFSQ0hJVkVfT0spCisJCXJldHVybiBBUkNISVZFX1JFVFJZOworCWVsc2UKKwkJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByYXI1X3JlYWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKwlpbnQgcmV0OworCisJaWYocmFyLT5oZWFkZXJfaW5pdGlhbGl6ZWQgPT0gMCkgeworCQlpbml0X2hlYWRlcihhKTsKKwkJcmFyLT5oZWFkZXJfaW5pdGlhbGl6ZWQgPSAxOworCX0KKworCWlmKHJhci0+c2tpcHBlZF9tYWdpYyA9PSAwKSB7CisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCBzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKSkpIHsKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJfQorCisJCXJhci0+c2tpcHBlZF9tYWdpYyA9IDE7CisJfQorCisJZG8geworCQlyZXQgPSBwcm9jZXNzX2Jhc2VfYmxvY2soYSwgZW50cnkpOworCX0gd2hpbGUocmV0ID09IEFSQ0hJVkVfUkVUUlkgfHwKKwkJCShyYXItPm1haW4uZW5kYXJjID4gMCAmJiByZXQgPT0gQVJDSElWRV9PSykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaW5pdF91bnBhY2soc3RydWN0IHJhcjUqIHJhcikgeworCXJhci0+ZmlsZS5jYWxjdWxhdGVkX2NyYzMyID0gMDsKKwlpbml0X3dpbmRvd19tYXNrKHJhcik7CisKKwlmcmVlKHJhci0+Y3N0YXRlLndpbmRvd19idWYpOworCWZyZWUocmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmKTsKKworCWlmKHJhci0+Y3N0YXRlLndpbmRvd19zaXplID4gMCkgeworCQlyYXItPmNzdGF0ZS53aW5kb3dfYnVmID0gY2FsbG9jKDEsIHJhci0+Y3N0YXRlLndpbmRvd19zaXplKTsKKwkJcmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmID0gY2FsbG9jKDEsIHJhci0+Y3N0YXRlLndpbmRvd19zaXplKTsKKwl9IGVsc2UgeworCQlyYXItPmNzdGF0ZS53aW5kb3dfYnVmID0gTlVMTDsKKwkJcmFyLT5jc3RhdGUuZmlsdGVyZWRfYnVmID0gTlVMTDsKKwl9CisKKwlyYXItPmNzdGF0ZS53cml0ZV9wdHIgPSAwOworCXJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID0gMDsKKworCW1lbXNldCgmcmFyLT5jc3RhdGUuYmQsIDAsIHNpemVvZihyYXItPmNzdGF0ZS5iZCkpOworCW1lbXNldCgmcmFyLT5jc3RhdGUubGQsIDAsIHNpemVvZihyYXItPmNzdGF0ZS5sZCkpOworCW1lbXNldCgmcmFyLT5jc3RhdGUuZGQsIDAsIHNpemVvZihyYXItPmNzdGF0ZS5kZCkpOworCW1lbXNldCgmcmFyLT5jc3RhdGUubGRkLCAwLCBzaXplb2YocmFyLT5jc3RhdGUubGRkKSk7CisJbWVtc2V0KCZyYXItPmNzdGF0ZS5yZCwgMCwgc2l6ZW9mKHJhci0+Y3N0YXRlLnJkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jcmMoc3RydWN0IHJhcjUqIHJhciwgY29uc3QgdWludDhfdCogcCwgc2l6ZV90IHRvX3JlYWQpIHsKKyAgICBpbnQgdmVyaWZ5X2NyYzsKKworCWlmKHJhci0+c2tpcF9tb2RlKSB7CisjaWYgZGVmaW5lZCBDSEVDS19DUkNfT05fU09MSURfU0tJUAorCQl2ZXJpZnlfY3JjID0gMTsKKyNlbHNlCisJCXZlcmlmeV9jcmMgPSAwOworI2VuZGlmCisJfSBlbHNlCisJCXZlcmlmeV9jcmMgPSAxOworCisJaWYodmVyaWZ5X2NyYykgeworCQkvKiBEb24ndCB1cGRhdGUgQ1JDMzIgaWYgdGhlIGZpbGUgZG9lc24ndCBoYXZlIHRoZQorCQkgKiBgc3RvcmVkX2NyYzMyYCBpbmZvIGZpbGxlZCBpbi4gKi8KKwkJaWYocmFyLT5maWxlLnN0b3JlZF9jcmMzMiA+IDApIHsKKwkJCXJhci0+ZmlsZS5jYWxjdWxhdGVkX2NyYzMyID0KKwkJCQljcmMzMihyYXItPmZpbGUuY2FsY3VsYXRlZF9jcmMzMiwgcCwgdG9fcmVhZCk7CisJCX0KKworCQkvKiBDaGVjayBpZiB0aGUgZmlsZSB1c2VzIGFuIG9wdGlvbmFsIEJMQUtFMnNwIGNoZWNrc3VtCisJCSAqIGFsZ29yaXRobS4gKi8KKwkJaWYocmFyLT5maWxlLmhhc19ibGFrZTIgPiAwKSB7CisJCQkvKiBSZXR1cm4gdmFsdWUgb2YgdGhlIGB1cGRhdGVgIGZ1bmN0aW9uIGlzIGFsd2F5cyAwLAorCQkJICogc28gd2UgY2FuIGV4cGxpY2l0bHkgaWdub3JlIGl0IGhlcmUuICovCisJCQkodm9pZCkgYmxha2Uyc3BfdXBkYXRlKCZyYXItPmZpbGUuYjJzdGF0ZSwgcCwgdG9fcmVhZCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2RlY29kZV90YWJsZXModWludDhfdCogYml0X2xlbmd0aCwKKyAgICBzdHJ1Y3QgZGVjb2RlX3RhYmxlKiB0YWJsZSwgaW50IHNpemUpCit7CisJaW50IGNvZGUsIHVwcGVyX2xpbWl0ID0gMCwgaSwgbGNbMTZdOworCXVpbnQzMl90IGRlY29kZV9wb3NfY2xvbmVbcmFyNV9jb3VudG9mKHRhYmxlLT5kZWNvZGVfcG9zKV07CisJc3NpemVfdCBjdXJfbGVuLCBxdWlja19kYXRhX3NpemU7CisKKwltZW1zZXQoJmxjLCAwLCBzaXplb2YobGMpKTsKKwltZW1zZXQodGFibGUtPmRlY29kZV9udW0sIDAsIHNpemVvZih0YWJsZS0+ZGVjb2RlX251bSkpOworCXRhYmxlLT5zaXplID0gc2l6ZTsKKwl0YWJsZS0+cXVpY2tfYml0cyA9IHNpemUgPT0gSFVGRl9OQyA/IDEwIDogNzsKKworCWZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlsY1tiaXRfbGVuZ3RoW2ldICYgMTVdKys7CisJfQorCisJbGNbMF0gPSAwOworCXRhYmxlLT5kZWNvZGVfcG9zWzBdID0gMDsKKwl0YWJsZS0+ZGVjb2RlX2xlblswXSA9IDA7CisKKwlmb3IoaSA9IDE7IGkgPCAxNjsgaSsrKSB7CisJCXVwcGVyX2xpbWl0ICs9IGxjW2ldOworCisJCXRhYmxlLT5kZWNvZGVfbGVuW2ldID0gdXBwZXJfbGltaXQgPDwgKDE2IC0gaSk7CisJCXRhYmxlLT5kZWNvZGVfcG9zW2ldID0gdGFibGUtPmRlY29kZV9wb3NbaSAtIDFdICsgbGNbaSAtIDFdOworCisJCXVwcGVyX2xpbWl0IDw8PSAxOworCX0KKworCW1lbWNweShkZWNvZGVfcG9zX2Nsb25lLCB0YWJsZS0+ZGVjb2RlX3Bvcywgc2l6ZW9mKGRlY29kZV9wb3NfY2xvbmUpKTsKKworCWZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQl1aW50OF90IGNsZW4gPSBiaXRfbGVuZ3RoW2ldICYgMTU7CisJCWlmKGNsZW4gPiAwKSB7CisJCQlpbnQgbGFzdF9wb3MgPSBkZWNvZGVfcG9zX2Nsb25lW2NsZW5dOworCQkJdGFibGUtPmRlY29kZV9udW1bbGFzdF9wb3NdID0gaTsKKwkJCWRlY29kZV9wb3NfY2xvbmVbY2xlbl0rKzsKKwkJfQorCX0KKworCXF1aWNrX2RhdGFfc2l6ZSA9IChpbnQ2NF90KTEgPDwgdGFibGUtPnF1aWNrX2JpdHM7CisJY3VyX2xlbiA9IDE7CisJZm9yKGNvZGUgPSAwOyBjb2RlIDwgcXVpY2tfZGF0YV9zaXplOyBjb2RlKyspIHsKKwkJaW50IGJpdF9maWVsZCA9IGNvZGUgPDwgKDE2IC0gdGFibGUtPnF1aWNrX2JpdHMpOworCQlpbnQgZGlzdCwgcG9zOworCisJCXdoaWxlKGN1cl9sZW4gPCByYXI1X2NvdW50b2YodGFibGUtPmRlY29kZV9sZW4pICYmCisJCQkJYml0X2ZpZWxkID49IHRhYmxlLT5kZWNvZGVfbGVuW2N1cl9sZW5dKSB7CisJCQljdXJfbGVuKys7CisJCX0KKworCQl0YWJsZS0+cXVpY2tfbGVuW2NvZGVdID0gKHVpbnQ4X3QpIGN1cl9sZW47CisKKwkJZGlzdCA9IGJpdF9maWVsZCAtIHRhYmxlLT5kZWNvZGVfbGVuW2N1cl9sZW4gLSAxXTsKKwkJZGlzdCA+Pj0gKDE2IC0gY3VyX2xlbik7CisKKwkJcG9zID0gdGFibGUtPmRlY29kZV9wb3NbY3VyX2xlbiAmIDE1XSArIGRpc3Q7CisJCWlmKGN1cl9sZW4gPCByYXI1X2NvdW50b2YodGFibGUtPmRlY29kZV9wb3MpICYmIHBvcyA8IHNpemUpIHsKKwkJCXRhYmxlLT5xdWlja19udW1bY29kZV0gPSB0YWJsZS0+ZGVjb2RlX251bVtwb3NdOworCQl9IGVsc2UgeworCQkJdGFibGUtPnF1aWNrX251bVtjb2RlXSA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCBkZWNvZGVfbnVtYmVyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCBkZWNvZGVfdGFibGUqIHRhYmxlLAorICAgIGNvbnN0IHVpbnQ4X3QqIHAsIHVpbnQxNl90KiBudW0pCit7CisJaW50IGksIGJpdHMsIGRpc3Q7CisJdWludDE2X3QgYml0ZmllbGQ7CisJdWludDMyX3QgcG9zOworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9iaXRzXzE2KHJhciwgcCwgJmJpdGZpZWxkKSkgeworCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJfQorCisJYml0ZmllbGQgJj0gMHhmZmZlOworCisJaWYoYml0ZmllbGQgPCB0YWJsZS0+ZGVjb2RlX2xlblt0YWJsZS0+cXVpY2tfYml0c10pIHsKKwkJaW50IGNvZGUgPSBiaXRmaWVsZCA+PiAoMTYgLSB0YWJsZS0+cXVpY2tfYml0cyk7CisJCXNraXBfYml0cyhyYXIsIHRhYmxlLT5xdWlja19sZW5bY29kZV0pOworCQkqbnVtID0gdGFibGUtPnF1aWNrX251bVtjb2RlXTsKKwkJcmV0dXJuIEFSQ0hJVkVfT0s7CisJfQorCisJYml0cyA9IDE1OworCisJZm9yKGkgPSB0YWJsZS0+cXVpY2tfYml0cyArIDE7IGkgPCAxNTsgaSsrKSB7CisJCWlmKGJpdGZpZWxkIDwgdGFibGUtPmRlY29kZV9sZW5baV0pIHsKKwkJCWJpdHMgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlza2lwX2JpdHMocmFyLCBiaXRzKTsKKworCWRpc3QgPSBiaXRmaWVsZCAtIHRhYmxlLT5kZWNvZGVfbGVuW2JpdHMgLSAxXTsKKwlkaXN0ID4+PSAoMTYgLSBiaXRzKTsKKwlwb3MgPSB0YWJsZS0+ZGVjb2RlX3Bvc1tiaXRzXSArIGRpc3Q7CisKKwlpZihwb3MgPj0gdGFibGUtPnNpemUpCisJCXBvcyA9IDA7CisKKwkqbnVtID0gdGFibGUtPmRlY29kZV9udW1bcG9zXTsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworLyogUmVhZHMgYW5kIHBhcnNlcyBIdWZmbWFuIHRhYmxlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJsb2NrLiAqLworc3RhdGljIGludCBwYXJzZV90YWJsZXMoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgc3RydWN0IHJhcjUqIHJhciwKKyAgICBjb25zdCB1aW50OF90KiBwKQoreworCWludCByZXQsIHZhbHVlLCBpLCB3LCBpZHggPSAwOworCXVpbnQ4X3QgYml0X2xlbmd0aFtIVUZGX0JDXSwKKwkJdGFibGVbSFVGRl9UQUJMRV9TSVpFXSwKKwkJbmliYmxlX21hc2sgPSAweEYwLAorCQluaWJibGVfc2hpZnQgPSA0OworCisJZW51bSB7IEVTQ0FQRSA9IDE1IH07CisKKwkvKiBUaGUgZGF0YSBmb3IgdGFibGUgZ2VuZXJhdGlvbiBpcyBjb21wcmVzc2VkIHVzaW5nIGEgc2ltcGxlIFJMRS1saWtlCisJICogYWxnb3JpdGhtIHdoZW4gc3RvcmluZyB6ZXJvZXMsIHNvIHdlIG5lZWQgdG8gdW5wYWNrIGl0IGZpcnN0LiAqLworCWZvcih3ID0gMCwgaSA9IDA7IHcgPCBIVUZGX0JDOykgeworCQlpZihpID49IHJhci0+Y3N0YXRlLmN1cl9ibG9ja19zaXplKSB7CisJCQkvKiBUcnVuY2F0ZWQgZGF0YSwgY2FuJ3QgY29udGludWUuICovCisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJUcnVuY2F0ZWQgZGF0YSBpbiBodWZmbWFuIHRhYmxlcyIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKworCQl2YWx1ZSA9IChwW2ldICYgbmliYmxlX21hc2spID4+IG5pYmJsZV9zaGlmdDsKKworCQlpZihuaWJibGVfbWFzayA9PSAweDBGKQorCQkJKytpOworCisJCW5pYmJsZV9tYXNrIF49IDB4RkY7CisJCW5pYmJsZV9zaGlmdCBePSA0OworCisJCS8qIFZhbHVlcyBzbWFsbGVyIHRoYW4gMTUgaXMgZGF0YSwgc28gd2Ugd3JpdGUgaXQgZGlyZWN0bHkuCisJCSAqIFZhbHVlIDE1IGlzIGEgZmxhZyB0ZWxsaW5nIHVzIHRoYXQgd2UgbmVlZCB0byB1bnBhY2sgbW9yZQorCQkgKiBieXRlcy4gKi8KKwkJaWYodmFsdWUgPT0gRVNDQVBFKSB7CisJCQl2YWx1ZSA9IChwW2ldICYgbmliYmxlX21hc2spID4+IG5pYmJsZV9zaGlmdDsKKwkJCWlmKG5pYmJsZV9tYXNrID09IDB4MEYpCisJCQkJKytpOworCQkJbmliYmxlX21hc2sgXj0gMHhGRjsKKwkJCW5pYmJsZV9zaGlmdCBePSA0OworCisJCQlpZih2YWx1ZSA9PSAwKSB7CisJCQkJLyogV2Ugc29tZXRpbWVzIG5lZWQgdG8gd3JpdGUgdGhlIGFjdHVhbCB2YWx1ZQorCQkJCSAqIG9mIDE1LCBzbyB0aGlzIGNhc2UgaGFuZGxlcyB0aGF0LiAqLworCQkJCWJpdF9sZW5ndGhbdysrXSA9IEVTQ0FQRTsKKwkJCX0gZWxzZSB7CisJCQkJaW50IGs7CisKKwkJCQkvKiBGaWxsIHplcm9lcy4gKi8KKwkJCQlmb3IoayA9IDA7IChrIDwgdmFsdWUgKyAyKSAmJiAodyA8IEhVRkZfQkMpOworCQkJCSAgICBrKyspIHsKKwkJCQkJYml0X2xlbmd0aFt3KytdID0gMDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQliaXRfbGVuZ3RoW3crK10gPSB2YWx1ZTsKKwkJfQorCX0KKworCXJhci0+Yml0cy5pbl9hZGRyID0gaTsKKwlyYXItPmJpdHMuYml0X2FkZHIgPSBuaWJibGVfc2hpZnQgXiA0OworCisJcmV0ID0gY3JlYXRlX2RlY29kZV90YWJsZXMoYml0X2xlbmd0aCwgJnJhci0+Y3N0YXRlLmJkLCBIVUZGX0JDKTsKKwlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJEZWNvZGluZyBodWZmbWFuIHRhYmxlcyBmYWlsZWQiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJZm9yKGkgPSAwOyBpIDwgSFVGRl9UQUJMRV9TSVpFOykgeworCQl1aW50MTZfdCBudW07CisKKwkJaWYoKHJhci0+Yml0cy5pbl9hZGRyICsgNikgPj0gcmFyLT5jc3RhdGUuY3VyX2Jsb2NrX3NpemUpIHsKKwkJCS8qIFRydW5jYXRlZCBkYXRhLCBjYW4ndCBjb250aW51ZS4gKi8KKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIlRydW5jYXRlZCBkYXRhIGluIGh1ZmZtYW4gdGFibGVzICgjMikiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisKKwkJcmV0ID0gZGVjb2RlX251bWJlcihhLCAmcmFyLT5jc3RhdGUuYmQsIHAsICZudW0pOworCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCSAgICAiRGVjb2RpbmcgaHVmZm1hbiB0YWJsZXMgZmFpbGVkIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCisJCWlmKG51bSA8IDE2KSB7CisJCQkvKiAwLi4xNTogc3RvcmUgZGlyZWN0bHkgKi8KKwkJCXRhYmxlW2ldID0gKHVpbnQ4X3QpIG51bTsKKwkJCWkrKzsKKwkJfSBlbHNlIGlmKG51bSA8IDE4KSB7CisJCQkvKiAxNi4uMTc6IHJlcGVhdCBwcmV2aW91cyBjb2RlICovCisJCQl1aW50MTZfdCBuOworCisJCQlpZihBUkNISVZFX09LICE9IHJlYWRfYml0c18xNihyYXIsIHAsICZuKSkKKwkJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJCWlmKG51bSA9PSAxNikgeworCQkJCW4gPj49IDEzOworCQkJCW4gKz0gMzsKKwkJCQlza2lwX2JpdHMocmFyLCAzKTsKKwkJCX0gZWxzZSB7CisJCQkJbiA+Pj0gOTsKKwkJCQluICs9IDExOworCQkJCXNraXBfYml0cyhyYXIsIDcpOworCQkJfQorCisJCQlpZihpID4gMCkgeworCQkJCXdoaWxlKG4tLSA+IDAgJiYgaSA8IEhVRkZfVEFCTEVfU0laRSkgeworCQkJCQl0YWJsZVtpXSA9IHRhYmxlW2kgLSAxXTsKKwkJCQkJaSsrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJICAgICJVbmV4cGVjdGVkIGVycm9yIHdoZW4gZGVjb2RpbmcgIgorCQkJCSAgICAiaHVmZm1hbiB0YWJsZXMiKTsKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIG90aGVyIGNvZGVzOiBmaWxsIHdpdGggemVyb2VzIGBuYCB0aW1lcyAqLworCQkJdWludDE2X3QgbjsKKworCQkJaWYoQVJDSElWRV9PSyAhPSByZWFkX2JpdHNfMTYocmFyLCBwLCAmbikpCisJCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCQlpZihudW0gPT0gMTgpIHsKKwkJCQluID4+PSAxMzsKKwkJCQluICs9IDM7CisJCQkJc2tpcF9iaXRzKHJhciwgMyk7CisJCQl9IGVsc2UgeworCQkJCW4gPj49IDk7CisJCQkJbiArPSAxMTsKKwkJCQlza2lwX2JpdHMocmFyLCA3KTsKKwkJCX0KKworCQkJd2hpbGUobi0tID4gMCAmJiBpIDwgSFVGRl9UQUJMRV9TSVpFKQorCQkJCXRhYmxlW2krK10gPSAwOworCQl9CisJfQorCisJcmV0ID0gY3JlYXRlX2RlY29kZV90YWJsZXMoJnRhYmxlW2lkeF0sICZyYXItPmNzdGF0ZS5sZCwgSFVGRl9OQyk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAgIkZhaWxlZCB0byBjcmVhdGUgbGl0ZXJhbCB0YWJsZSIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlpZHggKz0gSFVGRl9OQzsKKworCXJldCA9IGNyZWF0ZV9kZWNvZGVfdGFibGVzKCZ0YWJsZVtpZHhdLCAmcmFyLT5jc3RhdGUuZGQsIEhVRkZfREMpOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkZhaWxlZCB0byBjcmVhdGUgZGlzdGFuY2UgdGFibGUiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWR4ICs9IEhVRkZfREM7CisKKwlyZXQgPSBjcmVhdGVfZGVjb2RlX3RhYmxlcygmdGFibGVbaWR4XSwgJnJhci0+Y3N0YXRlLmxkZCwgSFVGRl9MREMpOworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkZhaWxlZCB0byBjcmVhdGUgbG93ZXIgYml0cyBvZiBkaXN0YW5jZXMgdGFibGUiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWR4ICs9IEhVRkZfTERDOworCisJcmV0ID0gY3JlYXRlX2RlY29kZV90YWJsZXMoJnRhYmxlW2lkeF0sICZyYXItPmNzdGF0ZS5yZCwgSFVGRl9SQyk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiRmFpbGVkIHRvIGNyZWF0ZSByZXBlYXRpbmcgZGlzdGFuY2VzIHRhYmxlIik7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCisvKiBQYXJzZXMgdGhlIGJsb2NrIGhlYWRlciwgdmVyaWZpZXMgaXRzIENSQyBieXRlLCBhbmQgc2F2ZXMgdGhlIGhlYWRlcgorICogZmllbGRzIGluc2lkZSB0aGUgYGhkcmAgcG9pbnRlci4gKi8KK3N0YXRpYyBpbnQgcGFyc2VfYmxvY2tfaGVhZGVyKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIGNvbnN0IHVpbnQ4X3QqIHAsCisgICAgc3NpemVfdCogYmxvY2tfc2l6ZSwgc3RydWN0IGNvbXByZXNzZWRfYmxvY2tfaGVhZGVyKiBoZHIpCit7CisJdWludDhfdCBjYWxjdWxhdGVkX2Nrc3VtOworCW1lbWNweShoZHIsIHAsIHNpemVvZihzdHJ1Y3QgY29tcHJlc3NlZF9ibG9ja19oZWFkZXIpKTsKKworCWlmKGJmX2J5dGVfY291bnQoaGRyKSA+IDIpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVW5zdXBwb3J0ZWQgYmxvY2sgaGVhZGVyIHNpemUgKHdhcyAlZCwgbWF4IGlzIDIpIiwKKwkJICAgIGJmX2J5dGVfY291bnQoaGRyKSk7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBiaXQgcmVhZGVyIGludGVyZmFjZSBpbiBvcmRlciB0byBiZSBtb3JlCisJICogZnV0dXJlLXByb29mLiAqLworCSpibG9ja19zaXplID0gMDsKKwlzd2l0Y2goYmZfYnl0ZV9jb3VudChoZHIpKSB7CisJCS8qIDEtYnl0ZSBibG9jayBzaXplICovCisJCWNhc2UgMDoKKwkJCSpibG9ja19zaXplID0gKihjb25zdCB1aW50OF90KikgJnBbMl07CisJCQlicmVhazsKKworCQkvKiAyLWJ5dGUgYmxvY2sgc2l6ZSAqLworCQljYXNlIDE6CisJCQkqYmxvY2tfc2l6ZSA9IGFyY2hpdmVfbGUxNmRlYygmcFsyXSk7CisJCQlicmVhazsKKworCQkvKiAzLWJ5dGUgYmxvY2sgc2l6ZSAqLworCQljYXNlIDI6CisJCQkqYmxvY2tfc2l6ZSA9IGFyY2hpdmVfbGUzMmRlYygmcFsyXSk7CisJCQkqYmxvY2tfc2l6ZSAmPSAweDAwRkZGRkZGOworCQkJYnJlYWs7CisKKwkJLyogT3RoZXIgYmxvY2sgc2l6ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFRoaXMgY2FzZSBpcyBub3QKKwkJICogcmVhY2hlZCwgYmVjYXVzZSB3ZSBoYXZlIGFuICdpZicgZ3VhcmQgYmVmb3JlIHRoZSBzd2l0Y2gKKwkJICogdGhhdCBtYWtlcyBzdXJlIG9mIGl0LiAqLworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogVmVyaWZ5IHRoZSBibG9jayBoZWFkZXIgY2hlY2tzdW0uIDB4NUEgaXMgYSBtYWdpYyB2YWx1ZSBhbmQgaXMKKwkgKiBhbHdheXMgKiBjb25zdGFudC4gKi8KKwljYWxjdWxhdGVkX2Nrc3VtID0gMHg1QQorCSAgICBeICh1aW50OF90KSBoZHItPmJsb2NrX2ZsYWdzX3U4CisJICAgIF4gKHVpbnQ4X3QpICpibG9ja19zaXplCisJICAgIF4gKHVpbnQ4X3QpICgqYmxvY2tfc2l6ZSA+PiA4KQorCSAgICBeICh1aW50OF90KSAoKmJsb2NrX3NpemUgPj4gMTYpOworCisJaWYoY2FsY3VsYXRlZF9ja3N1bSAhPSBoZHItPmJsb2NrX2Nrc3VtKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkJsb2NrIGNoZWNrc3VtIGVycm9yOiBnb3QgMHgleCwgZXhwZWN0ZWQgMHgleCIsCisJCSAgICBoZHItPmJsb2NrX2Nrc3VtLCBjYWxjdWxhdGVkX2Nrc3VtKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gdXNlZCBkdXJpbmcgZmlsdGVyIHByb2Nlc3NpbmcuICovCitzdGF0aWMgaW50IHBhcnNlX2ZpbHRlcl9kYXRhKHN0cnVjdCByYXI1KiByYXIsIGNvbnN0IHVpbnQ4X3QqIHAsCisgICAgdWludDMyX3QqIGZpbHRlcl9kYXRhKQoreworCWludCBpLCBieXRlczsKKwl1aW50MzJfdCBkYXRhID0gMDsKKworCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9jb25zdW1lX2JpdHMocmFyLCBwLCAyLCAmYnl0ZXMpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlieXRlcysrOworCisJZm9yKGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgeworCQl1aW50MTZfdCBieXRlOworCisJCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9iaXRzXzE2KHJhciwgcCwgJmJ5dGUpKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQkvKiBDYXN0IHRvIHVpbnQzMl90IHdpbGwgZW5zdXJlIHRoZSBzaGlmdCBvcGVyYXRpb24gd2lsbCBub3QKKwkJICogcHJvZHVjZSB1bmRlZmluZWQgcmVzdWx0LiAqLworCQlkYXRhICs9ICgodWludDMyX3QpIGJ5dGUgPj4gOCkgPDwgKGkgKiA4KTsKKwkJc2tpcF9iaXRzKHJhciwgOCk7CisJfQorCisJKmZpbHRlcl9kYXRhID0gZGF0YTsKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworLyogRnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgc2FuaXR5IGNoZWNraW5nLiAqLworc3RhdGljIGludCBpc192YWxpZF9maWx0ZXJfYmxvY2tfc3RhcnQoc3RydWN0IHJhcjUqIHJhciwKKyAgICB1aW50MzJfdCBzdGFydCkKK3sKKwljb25zdCBpbnQ2NF90IGJsb2NrX3N0YXJ0ID0gKHNzaXplX3QpIHN0YXJ0ICsgcmFyLT5jc3RhdGUud3JpdGVfcHRyOworCWNvbnN0IGludDY0X3QgbGFzdF9icyA9IHJhci0+Y3N0YXRlLmxhc3RfYmxvY2tfc3RhcnQ7CisJY29uc3Qgc3NpemVfdCBsYXN0X2JsID0gcmFyLT5jc3RhdGUubGFzdF9ibG9ja19sZW5ndGg7CisKKwlpZihsYXN0X2JzID09IDAgfHwgbGFzdF9ibCA9PSAwKSB7CisJCS8qIFdlIGRpZG4ndCBoYXZlIGFueSBmaWx0ZXJzIHlldCwgc28gYWNjZXB0IHRoaXMgb2Zmc2V0LiAqLworCQlyZXR1cm4gMTsKKwl9CisKKwlpZihibG9ja19zdGFydCA+PSBsYXN0X2JzICsgbGFzdF9ibCkgeworCQkvKiBDdXJyZW50IG9mZnNldCBpcyBiaWdnZXIgdGhhbiBsYXN0IGJsb2NrJ3MgZW5kIG9mZnNldCwgc28KKwkJICogYWNjZXB0IGN1cnJlbnQgb2Zmc2V0LiAqLworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBBbnkgb3RoZXIgY2FzZSBpcyBub3QgYSBub3JtYWwgc2l0dWF0aW9uIGFuZCB3ZSBzaG91bGQgZmFpbC4gKi8KKwlyZXR1cm4gMDsKK30KKworLyogVGhlIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgbmV3IGZpbHRlciwgcmVhZCBpdHMgcGFyYW1ldGVycyBmcm9tIHRoZSBpbnB1dAorICogc3RyZWFtIGFuZCBhZGQgaXQgdG8gdGhlIGZpbHRlciBjb2xsZWN0aW9uLiAqLworc3RhdGljIGludCBwYXJzZV9maWx0ZXIoc3RydWN0IGFyY2hpdmVfcmVhZCogYXIsIGNvbnN0IHVpbnQ4X3QqIHApIHsKKwl1aW50MzJfdCBibG9ja19zdGFydCwgYmxvY2tfbGVuZ3RoOworCXVpbnQxNl90IGZpbHRlcl90eXBlOworCXN0cnVjdCBmaWx0ZXJfaW5mbyogZmlsdCA9IE5VTEw7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGFyKTsKKworCS8qIFJlYWQgdGhlIHBhcmFtZXRlcnMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLiAqLworCWlmKEFSQ0hJVkVfT0sgIT0gcGFyc2VfZmlsdGVyX2RhdGEocmFyLCBwLCAmYmxvY2tfc3RhcnQpKQorCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwlpZihBUkNISVZFX09LICE9IHBhcnNlX2ZpbHRlcl9kYXRhKHJhciwgcCwgJmJsb2NrX2xlbmd0aCkpCisJCXJldHVybiBBUkNISVZFX0VPRjsKKworCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9iaXRzXzE2KHJhciwgcCwgJmZpbHRlcl90eXBlKSkKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJZmlsdGVyX3R5cGUgPj49IDEzOworCXNraXBfYml0cyhyYXIsIDMpOworCisJLyogUGVyZm9ybSBzb21lIHNhbml0eSBjaGVja3Mgb24gdGhpcyBmaWx0ZXIgcGFyYW1ldGVycy4gTm90ZSB0aGF0IHdlCisJICogYWxsb3cgb25seSBERUxUQSwgRTgvRTkgYW5kIEFSTSBmaWx0ZXJzIGhlcmUsIGJlY2F1c2UgcmVzdCBvZgorCSAqIGZpbHRlcnMgYXJlIG5vdCB1c2VkIGluIFJBUnY1LiAqLworCisJaWYoYmxvY2tfbGVuZ3RoIDwgNCB8fAorCSAgICBibG9ja19sZW5ndGggPiAweDQwMDAwMCB8fAorCSAgICBmaWx0ZXJfdHlwZSA+IEZJTFRFUl9BUk0gfHwKKwkgICAgIWlzX3ZhbGlkX2ZpbHRlcl9ibG9ja19zdGFydChyYXIsIGJsb2NrX3N0YXJ0KSkKKwl7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhci0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJJbnZhbGlkIGZpbHRlciBlbmNvdW50ZXJlZCIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIG5ldyBmaWx0ZXIuICovCisJZmlsdCA9IGFkZF9uZXdfZmlsdGVyKHJhcik7CisJaWYoZmlsdCA9PSBOVUxMKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhci0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBmaWx0ZXIgZGVzY3JpcHRvci4iKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJZmlsdC0+dHlwZSA9IGZpbHRlcl90eXBlOworCWZpbHQtPmJsb2NrX3N0YXJ0ID0gcmFyLT5jc3RhdGUud3JpdGVfcHRyICsgYmxvY2tfc3RhcnQ7CisJZmlsdC0+YmxvY2tfbGVuZ3RoID0gYmxvY2tfbGVuZ3RoOworCisJcmFyLT5jc3RhdGUubGFzdF9ibG9ja19zdGFydCA9IGZpbHQtPmJsb2NrX3N0YXJ0OworCXJhci0+Y3N0YXRlLmxhc3RfYmxvY2tfbGVuZ3RoID0gZmlsdC0+YmxvY2tfbGVuZ3RoOworCisJLyogUmVhZCBzb21lIG1vcmUgZGF0YSBpbiBjYXNlIHRoaXMgaXMgYSBERUxUQSBmaWx0ZXIuIE90aGVyIGZpbHRlcgorCSAqIHR5cGVzIGRvbid0IHJlcXVpcmUgYW55IGFkZGl0aW9uYWwgZGF0YSBvdmVyIHdoYXQgd2FzIGFscmVhZHkKKwkgKiByZWFkLiAqLworCWlmKGZpbHRlcl90eXBlID09IEZJTFRFUl9ERUxUQSkgeworCQlpbnQgY2hhbm5lbHM7CisKKwkJaWYoQVJDSElWRV9PSyAhPSByZWFkX2NvbnN1bWVfYml0cyhyYXIsIHAsIDUsICZjaGFubmVscykpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJZmlsdC0+Y2hhbm5lbHMgPSBjaGFubmVscyArIDE7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX2NvZGVfbGVuZ3RoKHN0cnVjdCByYXI1KiByYXIsIGNvbnN0IHVpbnQ4X3QqIHAsCisgICAgdWludDE2X3QgY29kZSkKK3sKKwlpbnQgbGJpdHMsIGxlbmd0aCA9IDI7CisJaWYoY29kZSA8IDgpIHsKKwkJbGJpdHMgPSAwOworCQlsZW5ndGggKz0gY29kZTsKKwl9IGVsc2UgeworCQlsYml0cyA9IGNvZGUgLyA0IC0gMTsKKwkJbGVuZ3RoICs9ICg0IHwgKGNvZGUgJiAzKSkgPDwgbGJpdHM7CisJfQorCisJaWYobGJpdHMgPiAwKSB7CisJCWludCBhZGQ7CisKKwkJaWYoQVJDSElWRV9PSyAhPSByZWFkX2NvbnN1bWVfYml0cyhyYXIsIHAsIGxiaXRzLCAmYWRkKSkKKwkJCXJldHVybiAtMTsKKworCQlsZW5ndGggKz0gYWRkOworCX0KKworCXJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQgY29weV9zdHJpbmcoc3RydWN0IGFyY2hpdmVfcmVhZCogYSwgaW50IGxlbiwgaW50IGRpc3QpIHsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisJY29uc3QgdWludDY0X3QgY21hc2sgPSByYXItPmNzdGF0ZS53aW5kb3dfbWFzazsKKwljb25zdCB1aW50NjRfdCB3cml0ZV9wdHIgPSByYXItPmNzdGF0ZS53cml0ZV9wdHIgKworCSAgICByYXItPmNzdGF0ZS5zb2xpZF9vZmZzZXQ7CisJaW50IGk7CisKKwlpZiAocmFyLT5jc3RhdGUud2luZG93X2J1ZiA9PSBOVUxMKQorCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKworCS8qIFRoZSB1bnBhY2tlciBzcGVuZHMgbW9zdCBvZiB0aGUgdGltZSBpbiB0aGlzIGZ1bmN0aW9uLiBJdCB3b3VsZCBiZQorCSAqIGEgZ29vZCBpZGVhIHRvIGludHJvZHVjZSBzb21lIG9wdGltaXphdGlvbnMgaGVyZS4KKwkgKgorCSAqIEp1c3QgcmVtZW1iZXIgdGhhdCB0aGlzIGxvb3AgdHJlYXRzIGJ1ZmZlcnMgdGhhdCBvdmVybGFwIGRpZmZlcmVudGx5CisJICogdGhhbiBidWZmZXJzIHRoYXQgZG8gbm90IG92ZXJsYXAuIFRoaXMgaXMgd2h5IGEgc2ltcGxlIG1lbWNweSgzKQorCSAqIGNhbGwgd2lsbCBub3QgYmUgZW5vdWdoLiAqLworCisJZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJY29uc3Qgc3NpemVfdCB3cml0ZV9pZHggPSAod3JpdGVfcHRyICsgaSkgJiBjbWFzazsKKwkJY29uc3Qgc3NpemVfdCByZWFkX2lkeCA9ICh3cml0ZV9wdHIgKyBpIC0gZGlzdCkgJiBjbWFzazsKKwkJcmFyLT5jc3RhdGUud2luZG93X2J1Zlt3cml0ZV9pZHhdID0KKwkJICAgIHJhci0+Y3N0YXRlLndpbmRvd19idWZbcmVhZF9pZHhdOworCX0KKworCXJhci0+Y3N0YXRlLndyaXRlX3B0ciArPSBsZW47CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgZG9fdW5jb21wcmVzc19ibG9jayhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBjb25zdCB1aW50OF90KiBwKSB7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCXVpbnQxNl90IG51bTsKKwlpbnQgcmV0OworCisJY29uc3QgdWludDY0X3QgY21hc2sgPSByYXItPmNzdGF0ZS53aW5kb3dfbWFzazsKKwljb25zdCBzdHJ1Y3QgY29tcHJlc3NlZF9ibG9ja19oZWFkZXIqIGhkciA9ICZyYXItPmxhc3RfYmxvY2tfaGRyOworCWNvbnN0IHVpbnQ4X3QgYml0X3NpemUgPSAxICsgYmZfYml0X3NpemUoaGRyKTsKKworCXdoaWxlKDEpIHsKKwkJaWYocmFyLT5jc3RhdGUud3JpdGVfcHRyIC0gcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgPgorCQkgICAgKHJhci0+Y3N0YXRlLndpbmRvd19zaXplID4+IDEpKSB7CisJCQkvKiBEb24ndCBhbGxvdyBncm93aW5nIGRhdGEgYnkgbW9yZSB0aGFuIGhhbGYgb2YgdGhlCisJCQkgKiB3aW5kb3cgc2l6ZSBhdCBhIHRpbWUuIEluIHN1Y2ggY2FzZSwgYnJlYWsgdGhlIGxvb3A7CisJCQkgKiAgbmV4dCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBjb250aW51ZSBwcm9jZXNzaW5nCisJCQkgKiAgZnJvbSB0aGlzIG1vbWVudC4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJaWYocmFyLT5iaXRzLmluX2FkZHIgPiByYXItPmNzdGF0ZS5jdXJfYmxvY2tfc2l6ZSAtIDEgfHwKKwkJICAgIChyYXItPmJpdHMuaW5fYWRkciA9PSByYXItPmNzdGF0ZS5jdXJfYmxvY2tfc2l6ZSAtIDEgJiYKKwkJICAgIHJhci0+Yml0cy5iaXRfYWRkciA+PSBiaXRfc2l6ZSkpCisJCXsKKwkJCS8qIElmIHRoZSBwcm9ncmFtIGNvdW50ZXIgaXMgaGVyZSwgaXQgbWVhbnMgdGhlCisJCQkgKiBmdW5jdGlvbiBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgYmxvY2suICovCisJCQlyYXItPmNzdGF0ZS5ibG9ja19wYXJzaW5nX2ZpbmlzaGVkID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogRGVjb2RlIHRoZSBuZXh0IGxpdGVyYWwuICovCisJCWlmKEFSQ0hJVkVfT0sgIT0gZGVjb2RlX251bWJlcihhLCAmcmFyLT5jc3RhdGUubGQsIHAsICZudW0pKSB7CisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCX0KKworCQkvKiBOdW0gaG9sZHMgYSBkZWNvbXByZXNzaW9uIGxpdGVyYWwsIG9yICdjb21tYW5kIGNvZGUnLgorCQkgKgorCQkgKiAtIFZhbHVlcyBsb3dlciB0aGFuIDI1NiBhcmUganVzdCBieXRlcy4gVGhvc2UgY29kZXMKKwkJICogICBjYW4gYmUgc3RvcmVkIGluIHRoZSBvdXRwdXQgYnVmZmVyIGRpcmVjdGx5LgorCQkgKgorCQkgKiAtIENvZGUgMjU2IGRlZmluZXMgYSBuZXcgZmlsdGVyLCB3aGljaCBpcyBsYXRlciB1c2VkIHRvCisJCSAqICAgcmFuc2Zvcm0gdGhlIGRhdGEgYmxvY2sgYWNjb3JkaW5nbHkgdG8gdGhlIGZpbHRlciB0eXBlLgorCQkgKiAgIFRoZSBkYXRhIGJsb2NrIG5lZWRzIHRvIGJlIGZ1bGx5IHVuY29tcHJlc3NlZCBmaXJzdC4KKwkJICoKKwkJICogLSBDb2RlIGJpZ2dlciB0aGFuIDI1NyBhbmQgc21hbGxlciB0aGFuIDI2MiBkZWZpbmUKKwkJICogICBhIHJlcGV0aXRpb24gcGF0dGVybiB0aGF0IHNob3VsZCBiZSBjb3BpZWQgZnJvbQorCQkgKiAgIGFuIGFscmVhZHkgdW5jb21wcmVzc2VkIGNodW5rIG9mIGRhdGEuCisJCSAqLworCisJCWlmKG51bSA8IDI1NikgeworCQkJLyogRGlyZWN0bHkgc3RvcmUgdGhlIGJ5dGUuICovCisJCQlpbnQ2NF90IHdyaXRlX2lkeCA9IHJhci0+Y3N0YXRlLnNvbGlkX29mZnNldCArCisJCQkgICAgcmFyLT5jc3RhdGUud3JpdGVfcHRyKys7CisKKwkJCXJhci0+Y3N0YXRlLndpbmRvd19idWZbd3JpdGVfaWR4ICYgY21hc2tdID0KKwkJCSAgICAodWludDhfdCkgbnVtOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZihudW0gPj0gMjYyKSB7CisJCQl1aW50MTZfdCBkaXN0X3Nsb3Q7CisJCQlpbnQgbGVuID0gZGVjb2RlX2NvZGVfbGVuZ3RoKHJhciwgcCwgbnVtIC0gMjYyKSwKKwkJCQlkYml0cywKKwkJCQlkaXN0ID0gMTsKKworCQkJaWYobGVuID09IC0xKSB7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJCQkgICAgIkZhaWxlZCB0byBkZWNvZGUgdGhlIGNvZGUgbGVuZ3RoIik7CisKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCX0KKworCQkJaWYoQVJDSElWRV9PSyAhPSBkZWNvZGVfbnVtYmVyKGEsICZyYXItPmNzdGF0ZS5kZCwgcCwKKwkJCSAgICAmZGlzdF9zbG90KSkKKwkJCXsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkJCSAgICAiRmFpbGVkIHRvIGRlY29kZSB0aGUgZGlzdGFuY2Ugc2xvdCIpOworCisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQl9CisKKwkJCWlmKGRpc3Rfc2xvdCA8IDQpIHsKKwkJCQlkYml0cyA9IDA7CisJCQkJZGlzdCArPSBkaXN0X3Nsb3Q7CisJCQl9IGVsc2UgeworCQkJCWRiaXRzID0gZGlzdF9zbG90IC8gMiAtIDE7CisKKwkJCQkvKiBDYXN0IHRvIHVpbnQzMl90IHdpbGwgbWFrZSBzdXJlIHRoZSBzaGlmdAorCQkJCSAqIGxlZnQgb3BlcmF0aW9uIHdvbid0IHByb2R1Y2UgdW5kZWZpbmVkCisJCQkJICogcmVzdWx0LiBUaGVuLCB0aGUgdWludDMyX3QgdHlwZSB3aWxsCisJCQkJICogYmUgaW1wbGljaXRseSBjYXN0ZWQgdG8gaW50LiAqLworCQkJCWRpc3QgKz0gKHVpbnQzMl90KSAoMiB8CisJCQkJICAgIChkaXN0X3Nsb3QgJiAxKSkgPDwgZGJpdHM7CisJCQl9CisKKwkJCWlmKGRiaXRzID4gMCkgeworCQkJCWlmKGRiaXRzID49IDQpIHsKKwkJCQkJdWludDMyX3QgYWRkID0gMDsKKwkJCQkJdWludDE2X3QgbG93X2Rpc3Q7CisKKwkJCQkJaWYoZGJpdHMgPiA0KSB7CisJCQkJCQlpZihBUkNISVZFX09LICE9IHJlYWRfYml0c18zMigKKwkJCQkJCSAgICByYXIsIHAsICZhZGQpKSB7CisJCQkJCQkJLyogUmV0dXJuIEVPRiBpZiB3ZQorCQkJCQkJCSAqIGNhbid0IHJlYWQgbW9yZQorCQkJCQkJCSAqIGRhdGEuICovCisJCQkJCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQkJCQkJfQorCisJCQkJCQlza2lwX2JpdHMocmFyLCBkYml0cyAtIDQpOworCQkJCQkJYWRkID0gKGFkZCA+PiAoCisJCQkJCQkgICAgMzYgLSBkYml0cykpIDw8IDQ7CisJCQkJCQlkaXN0ICs9IGFkZDsKKwkJCQkJfQorCisJCQkJCWlmKEFSQ0hJVkVfT0sgIT0gZGVjb2RlX251bWJlcihhLAorCQkJCQkgICAgJnJhci0+Y3N0YXRlLmxkZCwgcCwgJmxvd19kaXN0KSkKKwkJCQkJeworCQkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJCQkgICAgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkJCQkJICAgICJGYWlsZWQgdG8gZGVjb2RlIHRoZSAiCisJCQkJCQkgICAgImRpc3RhbmNlIHNsb3QiKTsKKworCQkJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCQkJCX0KKworCQkJCQlpZihkaXN0ID49IElOVF9NQVggLSBsb3dfZGlzdCAtIDEpIHsKKwkJCQkJCS8qIFRoaXMgb25seSBoYXBwZW5zIGluCisJCQkJCQkgKiBpbnZhbGlkIGFyY2hpdmVzLiAqLworCQkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkJCSAgICAiRGlzdGFuY2UgcG9pbnRlciAiCisJCQkJCQkgICAgIm92ZXJmbG93Iik7CisJCQkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJCQkJfQorCisJCQkJCWRpc3QgKz0gbG93X2Rpc3Q7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogZGJpdHMgaXMgb25lIG9mIFswLDEsMiwzXSAqLworCQkJCQlpbnQgYWRkOworCisJCQkJCWlmKEFSQ0hJVkVfT0sgIT0gcmVhZF9jb25zdW1lX2JpdHMocmFyLAorCQkJCQkgICAgIHAsIGRiaXRzLCAmYWRkKSkgeworCQkJCQkJLyogUmV0dXJuIEVPRiBpZiB3ZSBjYW4ndCByZWFkCisJCQkJCQkgKiBtb3JlIGRhdGEuICovCisJCQkJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisJCQkJCX0KKworCQkJCQlkaXN0ICs9IGFkZDsKKwkJCQl9CisJCQl9CisKKwkJCWlmKGRpc3QgPiAweDEwMCkgeworCQkJCWxlbisrOworCisJCQkJaWYoZGlzdCA+IDB4MjAwMCkgeworCQkJCQlsZW4rKzsKKworCQkJCQlpZihkaXN0ID4gMHg0MDAwMCkgeworCQkJCQkJbGVuKys7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWRpc3RfY2FjaGVfcHVzaChyYXIsIGRpc3QpOworCQkJcmFyLT5jc3RhdGUubGFzdF9sZW4gPSBsZW47CisKKwkJCWlmKEFSQ0hJVkVfT0sgIT0gY29weV9zdHJpbmcoYSwgbGVuLCBkaXN0KSkKKwkJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKworCQkJY29udGludWU7CisJCX0gZWxzZSBpZihudW0gPT0gMjU2KSB7CisJCQkvKiBDcmVhdGUgYSBmaWx0ZXIuICovCisJCQlyZXQgPSBwYXJzZV9maWx0ZXIoYSwgcCk7CisJCQlpZihyZXQgIT0gQVJDSElWRV9PSykKKwkJCQlyZXR1cm4gcmV0OworCisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmKG51bSA9PSAyNTcpIHsKKwkJCWlmKHJhci0+Y3N0YXRlLmxhc3RfbGVuICE9IDApIHsKKwkJCQlpZihBUkNISVZFX09LICE9IGNvcHlfc3RyaW5nKGEsCisJCQkJICAgIHJhci0+Y3N0YXRlLmxhc3RfbGVuLAorCQkJCSAgICByYXItPmNzdGF0ZS5kaXN0X2NhY2hlWzBdKSkKKwkJCQl7CisJCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQkJCX0KKwkJCX0KKworCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQkvKiBudW0gPCAyNjIgKi8KKwkJCWNvbnN0IGludCBpZHggPSBudW0gLSAyNTg7CisJCQljb25zdCBpbnQgZGlzdCA9IGRpc3RfY2FjaGVfdG91Y2gocmFyLCBpZHgpOworCisJCQl1aW50MTZfdCBsZW5fc2xvdDsKKwkJCWludCBsZW47CisKKwkJCWlmKEFSQ0hJVkVfT0sgIT0gZGVjb2RlX251bWJlcihhLCAmcmFyLT5jc3RhdGUucmQsIHAsCisJCQkgICAgJmxlbl9zbG90KSkgeworCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQkJfQorCisJCQlsZW4gPSBkZWNvZGVfY29kZV9sZW5ndGgocmFyLCBwLCBsZW5fc2xvdCk7CisJCQlyYXItPmNzdGF0ZS5sYXN0X2xlbiA9IGxlbjsKKworCQkJaWYoQVJDSElWRV9PSyAhPSBjb3B5X3N0cmluZyhhLCBsZW4sIGRpc3QpKQorCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFRoZSBwcm9ncmFtIGNvdW50ZXIgc2hvdWxkbid0IHJlYWNoIGhlcmUuICovCisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIlVuc3VwcG9ydGVkIGJsb2NrIGNvZGU6IDB4JXgiLCBudW0pOworCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCisvKiBCaW5hcnkgc2VhcmNoIGZvciB0aGUgUkFSdjUgc2lnbmF0dXJlLiAqLworc3RhdGljIGludCBzY2FuX2Zvcl9zaWduYXR1cmUoc3RydWN0IGFyY2hpdmVfcmVhZCogYSkgeworCWNvbnN0IHVpbnQ4X3QqIHA7CisJY29uc3QgaW50IGNodW5rX3NpemUgPSA1MTI7CisJc3NpemVfdCBpOworCWNoYXIgc2lnbmF0dXJlW3NpemVvZihyYXI1X3NpZ25hdHVyZV94b3IpXTsKKworCS8qIElmIHdlJ3JlIGhlcmUsIGl0IG1lYW5zIHdlJ3JlIG9uIGFuICd1bmtub3duIHRlcnJpdG9yeScgZGF0YS4KKwkgKiBUaGVyZSdzIG5vIGluZGljYXRpb24gd2hhdCBraW5kIG9mIGRhdGEgd2UncmUgcmVhZGluZyBoZXJlLgorCSAqIEl0IGNvdWxkIGJlIHNvbWUgdGV4dCBjb21tZW50LCBhbnkga2luZCBvZiBiaW5hcnkgZGF0YSwKKwkgKiBkaWdpdGFsIHNpZ24sIGRyYWdvbnMsIGV0Yy4KKwkgKgorCSAqIFdlIHdhbnQgdG8gZmluZCBhIHZhbGlkIFJBUnY1IG1hZ2ljIGhlYWRlciBpbnNpZGUgdGhpcyB1bmtub3duCisJICogZGF0YS4gKi8KKworCS8qIElzIGl0IHBvc3NpYmxlIGluIGxpYmFyY2hpdmUgdG8ganVzdCBza2lwIGV2ZXJ5dGhpbmcgdW50aWwgdGhlCisJICogZW5kIG9mIHRoZSBmaWxlPyBJZiBzbywgaXQgd291bGQgYmUgYSBiZXR0ZXIgYXBwcm9hY2ggdGhhbiB0aGUKKwkgKiBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24uICovCisKKwlyYXI1X3NpZ25hdHVyZShzaWduYXR1cmUpOworCisJd2hpbGUoMSkgeworCQlpZighcmVhZF9haGVhZChhLCBjaHVua19zaXplLCAmcCkpCisJCQlyZXR1cm4gQVJDSElWRV9FT0Y7CisKKwkJZm9yKGkgPSAwOyBpIDwgY2h1bmtfc2l6ZSAtIChpbnQpc2l6ZW9mKHJhcjVfc2lnbmF0dXJlX3hvcik7CisJCSAgICBpKyspIHsKKwkJCWlmKG1lbWNtcCgmcFtpXSwgc2lnbmF0dXJlLAorCQkJICAgIHNpemVvZihyYXI1X3NpZ25hdHVyZV94b3IpKSA9PSAwKSB7CisJCQkJLyogQ29uc3VtZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlJ3ZlIHVzZWQgdG8KKwkJCQkgKiBzZWFyY2ggZm9yIHRoZSBzaWduYXR1cmUsIGFzIHdlbGwgYXMgdGhlCisJCQkJICogbnVtYmVyIG9mIGJ5dGVzIHVzZWQgYnkgdGhlIHNpZ25hdHVyZQorCQkJCSAqIGl0c2VsZi4gQWZ0ZXIgdGhpcyB3ZSBzaG91bGQgYmUgc3RhbmRpbmcKKwkJCQkgKiBvbiBhIHZhbGlkIGJhc2UgYmxvY2sgaGVhZGVyLiAqLworCQkJCSh2b2lkKSBjb25zdW1lKGEsCisJCQkJICAgIGkgKyBzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKSk7CisJCQkJcmV0dXJuIEFSQ0hJVkVfT0s7CisJCQl9CisJCX0KKworCQljb25zdW1lKGEsIGNodW5rX3NpemUpOworCX0KKworCXJldHVybiBBUkNISVZFX0ZBVEFMOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc3dpdGNoIHRoZSBtdWx0aXZvbHVtZSBhcmNoaXZlIGZpbGUgdG8gYW5vdGhlciBmaWxlLAorICogaS5lLiBmcm9tIHBhcnQwMyB0byBwYXJ0IDA0LiAqLworc3RhdGljIGludCBhZHZhbmNlX211bHRpdm9sdW1lKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlpbnQgbHJldDsKKwlzdHJ1Y3QgcmFyNSogcmFyID0gZ2V0X2NvbnRleHQoYSk7CisKKwkvKiBBIHNtYWxsIHN0YXRlIG1hY2hpbmUgdGhhdCB3aWxsIHNraXAgdW5uZWNlc3NhcnkgZGF0YSwgbmVlZGVkIHRvCisJICogc3dpdGNoIGZyb20gb25lIG11bHRpdm9sdW1lIHRvIGFub3RoZXIuIFN1Y2ggc2tpcHBpbmcgaXMgbmVlZGVkIGlmCisJICogd2Ugd2FudCB0byBiZSBhbiBzdHJlYW0tb3JpZW50ZWQgKGluc3RlYWQgb2YgZmlsZS1vcmllbnRlZCkKKwkgKiB1bnBhY2tlci4KKwkgKgorCSAqIFRoZSBzdGF0ZSBtYWNoaW5lIHN0YXJ0cyB3aXRoIGByYXItPm1haW4uZW5kYXJjYCA9PSAwLiBJdCBhbHNvCisJICogYXNzdW1lcyB0aGF0IGN1cnJlbnQgc3RyZWFtIHBvaW50ZXIgcG9pbnRzIHRvIHNvbWUgYmFzZSBibG9jaworCSAqIGhlYWRlci4KKwkgKgorCSAqIFRoZSBgZW5kYXJjYCBmaWVsZCBpcyBiZWluZyBzZXQgd2hlbiB0aGUgYmFzZSBibG9jayBwYXJzaW5nCisJICogZnVuY3Rpb24gZW5jb3VudGVycyB0aGUgJ2VuZCBvZiBhcmNoaXZlJyBtYXJrZXIuCisJICovCisKKwl3aGlsZSgxKSB7CisJCWlmKHJhci0+bWFpbi5lbmRhcmMgPT0gMSkgeworCQkJaW50IGxvb3BpbmcgPSAxOworCisJCQlyYXItPm1haW4uZW5kYXJjID0gMDsKKworCQkJd2hpbGUobG9vcGluZykgeworCQkJCWxyZXQgPSBza2lwX2Jhc2VfYmxvY2soYSk7CisJCQkJc3dpdGNoKGxyZXQpIHsKKwkJCQkJY2FzZSBBUkNISVZFX1JFVFJZOgorCQkJCQkJLyogQ29udGludWUgbG9vcGluZy4gKi8KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEFSQ0hJVkVfT0s6CisJCQkJCQkvKiBCcmVhayBsb29wLiAqLworCQkJCQkJbG9vcGluZyA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCS8qIEZvcndhcmQgYW55IGVycm9ycyB0byB0aGUKKwkJCQkJCSAqIGNhbGxlci4gKi8KKwkJCQkJCXJldHVybiBscmV0OworCQkJCX0KKwkJCX0KKworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQkvKiBTa2lwIGN1cnJlbnQgYmFzZSBibG9jay4gSW4gb3JkZXIgdG8gcHJvcGVybHkgc2tpcAorCQkJICogaXQsIHdlIHJlYWxseSBuZWVkIHRvIHNpbXBseSBwYXJzZSBpdCBhbmQgZGlzY2FyZAorCQkJICogdGhlIHJlc3VsdHMuICovCisKKwkJCWxyZXQgPSBza2lwX2Jhc2VfYmxvY2soYSk7CisJCQlpZihscmV0ID09IEFSQ0hJVkVfRkFUQUwgfHwgbHJldCA9PSBBUkNISVZFX0ZBSUxFRCkKKwkJCQlyZXR1cm4gbHJldDsKKworCQkJLyogVGhlIGBza2lwX2Jhc2VfYmxvY2tgIGZ1bmN0aW9uIHRlbGxzIHVzIGlmIHdlCisJCQkgKiBzaG91bGQgY29udGludWUgd2l0aCBza2lwcGluZywgb3Igd2Ugc2hvdWxkIHN0b3AKKwkJCSAqIHNraXBwaW5nLiBXZSdyZSB0cnlpbmcgdG8gc2tpcCBldmVyeXRoaW5nIHVwIHRvCisJCQkgKiBhIGJhc2UgRklMRSBibG9jay4gKi8KKworCQkJaWYobHJldCAhPSBBUkNISVZFX1JFVFJZKSB7CisJCQkJLyogSWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBza2lwcGluZywgb3Igd2UKKwkJCQkgKiBoYXZlIGp1c3Qgc2tpcHBlZCBhIEZJTEUgYmFzZSBibG9jay4uLiAqLworCisJCQkJaWYocmFyLT5tYWluLmVuZGFyYyA9PSAwKSB7CisJCQkJCXJldHVybiBscmV0OworCQkJCX0gZWxzZSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBBUkNISVZFX09LOworfQorCisvKiBNZXJnZXMgdGhlIHBhcnRpYWwgYmxvY2sgZnJvbSB0aGUgZmlyc3QgbXVsdGl2b2x1bWUgYXJjaGl2ZSBmaWxlLCBhbmQKKyAqIHBhcnRpYWwgYmxvY2sgZnJvbSB0aGUgc2Vjb25kIG11bHRpdm9sdW1lIGFyY2hpdmUgZmlsZS4gVGhlIHJlc3VsdCBpcworICogYSBjaHVuayBvZiBtZW1vcnkgY29udGFpbmluZyB0aGUgd2hvbGUgYmxvY2ssIGFuZCB0aGUgc3RyZWFtIHBvaW50ZXIKKyAqIGlzIGFkdmFuY2VkIHRvIHRoZSBuZXh0IGJsb2NrIGluIHRoZSBzZWNvbmQgbXVsdGl2b2x1bWUgYXJjaGl2ZSBmaWxlLiAqLworc3RhdGljIGludCBtZXJnZV9ibG9jayhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzc2l6ZV90IGJsb2NrX3NpemUsCisgICAgY29uc3QgdWludDhfdCoqIHApCit7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCXNzaXplX3QgY3VyX2Jsb2NrX3NpemUsIHBhcnRpYWxfb2Zmc2V0ID0gMDsKKwljb25zdCB1aW50OF90KiBscDsKKwlpbnQgcmV0OworCisJaWYocmFyLT5tZXJnZV9tb2RlKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX1BST0dSQU1NRVIsCisJCSAgICAiUmVjdXJzaXZlIG1lcmdlIGlzIG5vdCBhbGxvd2VkIik7CisKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogU2V0IGEgZmxhZyB0aGF0IHdlJ3JlIGluIHRoZSBzd2l0Y2hpbmcgbW9kZS4gKi8KKwlyYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUgPSAxOworCisJLyogUmVhbGxvY2F0ZSB0aGUgbWVtb3J5IHdoaWNoIHdpbGwgaG9sZCB0aGUgd2hvbGUgYmxvY2suICovCisJaWYocmFyLT52b2wucHVzaF9idWYpCisJCWZyZWUoKHZvaWQqKSByYXItPnZvbC5wdXNoX2J1Zik7CisKKwkvKiBJbmNyZWFzaW5nIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGJ5IDggaXMgZHVlIHRvIGJpdCByZWFkaW5nIGZ1bmN0aW9ucywKKwkgKiB3aGljaCBhcmUgdXNpbmcgYWRkaXRpb25hbCAyIG9yIDQgYnl0ZXMuIEFsbG9jYXRpbmcgdGhlIGJsb2NrIHNpemUKKwkgKiBieSBleGFjdCB2YWx1ZSB3b3VsZCBtYWtlIGJpdCByZWFkZXIgcGVyZm9ybSByZWFkcyBmcm9tIGludmFsaWQKKwkgKiBtZW1vcnkgYmxvY2sgd2hlbiByZWFkaW5nIHRoZSBsYXN0IGJ5dGUgZnJvbSB0aGUgYnVmZmVyLiAqLworCXJhci0+dm9sLnB1c2hfYnVmID0gbWFsbG9jKGJsb2NrX3NpemUgKyA4KTsKKwlpZighcmFyLT52b2wucHVzaF9idWYpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgbWVyZ2UgYmxvY2sgYnVmZmVyLiIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBWYWxncmluZCBjb21wbGFpbnMgaWYgdGhlIGV4dGVuc2lvbiBibG9jayBmb3IgYml0IHJlYWRlciBpcyBub3QKKwkgKiBpbml0aWFsaXplZCwgc28gaW5pdGlhbGl6ZSBpdC4gKi8KKwltZW1zZXQoJnJhci0+dm9sLnB1c2hfYnVmW2Jsb2NrX3NpemVdLCAwLCA4KTsKKworCS8qIEEgc2luZ2xlIGJsb2NrIGNhbiBzcGFuIGFjcm9zcyBtdWx0aXBsZSBtdWx0aXZvbHVtZSBhcmNoaXZlIGZpbGVzLAorCSAqIHNvIHdlIHVzZSBhIGxvb3AgaGVyZS4gVGhpcyBsb29wIHdpbGwgY29uc3VtZSBlbm91Z2ggbXVsdGl2b2x1bWUKKwkgKiBhcmNoaXZlIGZpbGVzIHVudGlsIHRoZSB3aG9sZSBibG9jayBpcyByZWFkLiAqLworCisJd2hpbGUoMSkgeworCQkvKiBHZXQgdGhlIHNpemUgb2YgY3VycmVudCBibG9jayBjaHVuayBpbiB0aGlzIG11bHRpdm9sdW1lCisJCSAqIGFyY2hpdmUgZmlsZSBhbmQgcmVhZCBpdC4gKi8KKwkJY3VyX2Jsb2NrX3NpemUgPSByYXI1X21pbihyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nLAorCQkgICAgYmxvY2tfc2l6ZSAtIHBhcnRpYWxfb2Zmc2V0KTsKKworCQlpZihjdXJfYmxvY2tfc2l6ZSA9PSAwKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJFbmNvdW50ZXJlZCBibG9jayBzaXplID09IDAgZHVyaW5nIGJsb2NrIG1lcmdlIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwkJfQorCisJCWlmKCFyZWFkX2FoZWFkKGEsIGN1cl9ibG9ja19zaXplLCAmbHApKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCS8qIFNhbml0eSBjaGVjazsgdGhlcmUgc2hvdWxkIG5ldmVyIGJlIGEgc2l0dWF0aW9uIHdoZXJlIHRoaXMKKwkJICogZnVuY3Rpb24gcmVhZHMgbW9yZSBkYXRhIHRoYW4gdGhlIGJsb2NrJ3Mgc2l6ZS4gKi8KKwkJaWYocGFydGlhbF9vZmZzZXQgKyBjdXJfYmxvY2tfc2l6ZSA+IGJsb2NrX3NpemUpIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJCSAgICAiQ29uc3VtZWQgdG9vIG11Y2ggZGF0YSB3aGVuIG1lcmdpbmcgYmxvY2tzLiIpOworCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKworCQkvKiBNZXJnZSBwcmV2aW91cyBibG9jayBjaHVuayB3aXRoIGN1cnJlbnQgYmxvY2sgY2h1bmssCisJCSAqIG9yIGNyZWF0ZSBmaXJzdCBibG9jayBjaHVuayBpZiB0aGlzIGlzIG91ciBmaXJzdAorCQkgKiBpdGVyYXRpb24uICovCisJCW1lbWNweSgmcmFyLT52b2wucHVzaF9idWZbcGFydGlhbF9vZmZzZXRdLCBscCwgY3VyX2Jsb2NrX3NpemUpOworCisJCS8qIEFkdmFuY2UgdGhlIHN0cmVhbSByZWFkIHBvaW50ZXIgYnkgdGhpcyBibG9jayBjaHVuayBzaXplLiAqLworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgY3VyX2Jsb2NrX3NpemUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCisJCS8qIFVwZGF0ZSB0aGUgcG9pbnRlcnMuIGBwYXJ0aWFsX29mZnNldGAgY29udGFpbnMgaW5mb3JtYXRpb24KKwkJICogYWJvdXQgdGhlIHN1bSBvZiBtZXJnZWQgYmxvY2sgY2h1bmtzLiAqLworCQlwYXJ0aWFsX29mZnNldCArPSBjdXJfYmxvY2tfc2l6ZTsKKwkJcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyAtPSBjdXJfYmxvY2tfc2l6ZTsKKworCQkvKiBJZiBgcGFydGlhbF9vZmZzZXRgIGlzIHRoZSBzYW1lIGFzIGBibG9ja19zaXplYCwgdGhpcyBtZWFucworCQkgKiB3ZSd2ZSBtZXJnZWQgYWxsIGJsb2NrIGNodW5rcyBhbmQgd2UgaGF2ZSBhIHZhbGlkIGZ1bGwKKwkJICogYmxvY2suICovCisJCWlmKHBhcnRpYWxfb2Zmc2V0ID09IGJsb2NrX3NpemUpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYnl0ZXMgdG8gcmVhZCwgdGhpcyBtZWFucyB3ZSBzaG91bGQKKwkJICogc3dpdGNoIHRvIGFub3RoZXIgbXVsdGl2b2x1bWUgYXJjaGl2ZSBmaWxlLiAqLworCQlpZihyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID09IDApIHsKKwkJCXJhci0+bWVyZ2VfbW9kZSsrOworCQkJcmV0ID0gYWR2YW5jZV9tdWx0aXZvbHVtZShhKTsKKwkJCXJhci0+bWVyZ2VfbW9kZS0tOworCQkJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJfQorCisJKnAgPSByYXItPnZvbC5wdXNoX2J1ZjsKKworCS8qIElmIHdlJ3JlIGhlcmUsIHdlIGNhbiByZXN1bWUgdW5wYWNraW5nIGJ5IHByb2Nlc3NpbmcgdGhlIGJsb2NrCisJICogcG9pbnRlZCB0byBieSB0aGUgYCpwYCBtZW1vcnkgcG9pbnRlci4gKi8KKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfYmxvY2soc3RydWN0IGFyY2hpdmVfcmVhZCogYSkgeworCWNvbnN0IHVpbnQ4X3QqIHA7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCWludCByZXQ7CisKKwkvKiBJZiB3ZSBkb24ndCBoYXZlIGFueSBkYXRhIHRvIGJlIHByb2Nlc3NlZCwgdGhpcyBtb3N0IHByb2JhYmx5IG1lYW5zCisJICogd2UgbmVlZCB0byBzd2l0Y2ggdG8gdGhlIG5leHQgdm9sdW1lLiAqLworCWlmKHJhci0+bWFpbi52b2x1bWUgJiYgcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyA9PSAwKSB7CisJCXJldCA9IGFkdmFuY2VfbXVsdGl2b2x1bWUoYSk7CisJCWlmKHJldCAhPSBBUkNISVZFX09LKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZihyYXItPmNzdGF0ZS5ibG9ja19wYXJzaW5nX2ZpbmlzaGVkKSB7CisJCXNzaXplX3QgYmxvY2tfc2l6ZTsKKwkJc3NpemVfdCB0b19za2lwOworCQlzc2l6ZV90IGN1cl9ibG9ja19zaXplOworCisJCS8qIFRoZSBoZWFkZXIgc2l6ZSB3b24ndCBiZSBiaWdnZXIgdGhhbiA2IGJ5dGVzLiAqLworCQlpZighcmVhZF9haGVhZChhLCA2LCAmcCkpIHsKKwkJCS8qIEZhaWxlZCB0byBwcmVmZXRjaCBkYXRhIGJsb2NrIGhlYWRlci4gKi8KKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKwkJfQorCisJCS8qCisJCSAqIFJlYWQgYmxvY2tfc2l6ZSBieSBwYXJzaW5nIGJsb2NrIGhlYWRlci4gVmFsaWRhdGUgdGhlIGhlYWRlcgorCQkgKiBieSBjYWxjdWxhdGluZyBDUkMgYnl0ZSBzdG9yZWQgaW5zaWRlIHRoZSBoZWFkZXIuIFNpemUgb2YKKwkJICogdGhlIGhlYWRlciBpcyBub3QgY29uc3RhbnQgKGJsb2NrIHNpemUgY2FuIGJlIHN0b3JlZCBlaXRoZXIKKwkJICogaW4gMSBvciAyIGJ5dGVzKSwgdGhhdCdzIHdoeSBibG9jayBzaXplIGlzIGxlZnQgb3V0IGZyb20gdGhlCisJCSAqIGBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlcmAgc3RydWN0dXJlIGFuZCByZXR1cm5lZCBieQorCQkgKiBgcGFyc2VfYmxvY2tfaGVhZGVyYCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LiAqLworCisJCXJldCA9IHBhcnNlX2Jsb2NrX2hlYWRlcihhLCBwLCAmYmxvY2tfc2l6ZSwKKwkJICAgICZyYXItPmxhc3RfYmxvY2tfaGRyKTsKKwkJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQkvKiBTa2lwIGJsb2NrIGhlYWRlci4gTmV4dCBkYXRhIGlzIGh1ZmZtYW4gdGFibGVzLAorCQkgKiBpZiBwcmVzZW50LiAqLworCQl0b19za2lwID0gc2l6ZW9mKHN0cnVjdCBjb21wcmVzc2VkX2Jsb2NrX2hlYWRlcikgKworCQkJYmZfYnl0ZV9jb3VudCgmcmFyLT5sYXN0X2Jsb2NrX2hkcikgKyAxOworCisJCWlmKEFSQ0hJVkVfT0sgIT0gY29uc3VtZShhLCB0b19za2lwKSkKKwkJCXJldHVybiBBUkNISVZFX0VPRjsKKworCQlyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nIC09IHRvX3NraXA7CisKKwkJLyogVGhlIGJsb2NrIHNpemUgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdob2xlIGJsb2NrIHNpemUsCisJCSAqIGJ1dCB0aGUgYmxvY2sgY291bGQgYmUgc3RvcmVkIGluIHNwbGl0IGZvcm0gd2hlbiB1c2luZworCQkgKiBtdWx0aS12b2x1bWUgYXJjaGl2ZXMuIEluIHRoaXMgY2FzZSwgdGhlIGJsb2NrIHNpemUgd2lsbCBiZQorCQkgKiBiaWdnZXIgdGhhbiB0aGUgYWN0dWFsIGRhdGEgc3RvcmVkIGluIHRoaXMgZmlsZS4gUmVtYWluaW5nCisJCSAqIHBhcnQgb2YgdGhlIGRhdGEgd2lsbCBiZSBpbiBhbm90aGVyIGZpbGUuICovCisKKwkJY3VyX2Jsb2NrX3NpemUgPQorCQkJcmFyNV9taW4ocmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZywgYmxvY2tfc2l6ZSk7CisKKwkJaWYoYmxvY2tfc2l6ZSA+IHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcpIHsKKwkJCS8qIElmIGN1cnJlbnQgYmxvY2tzJyBzaXplIGlzIGJpZ2dlciB0aGFuIG91ciBkYXRhCisJCQkgKiBzaXplLCB0aGlzIG1lYW5zIHdlIGhhdmUgYSBtdWx0aXZvbHVtZSBhcmNoaXZlLgorCQkJICogSW4gdGhpcyBjYXNlLCBza2lwIGFsbCBiYXNlIGhlYWRlcnMgdW50aWwgdGhlIGVuZAorCQkJICogb2YgdGhlIGZpbGUsIHByb2NlZWQgdG8gbmV4dCAicGFydFhYWC5yYXIiIHZvbHVtZSwKKwkJCSAqIGZpbmQgaXRzIHNpZ25hdHVyZSwgc2tpcCBhbGwgaGVhZGVycyB1cCB0byB0aGUgZmlyc3QKKwkJCSAqIEZJTEUgYmFzZSBoZWFkZXIsIGFuZCBjb250aW51ZSBmcm9tIHRoZXJlLgorCQkJICoKKwkJCSAqIE5vdGUgdGhhdCBgbWVyZ2VfYmxvY2tgIHdpbGwgdXBkYXRlIHRoZSBgcmFyYAorCQkJICogY29udGV4dCBzdHJ1Y3R1cmUgcXVpdGUgZXh0ZW5zaXZlbHkuICovCisKKwkJCXJldCA9IG1lcmdlX2Jsb2NrKGEsIGJsb2NrX3NpemUsICZwKTsKKwkJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJY3VyX2Jsb2NrX3NpemUgPSBibG9ja19zaXplOworCisJCQkvKiBDdXJyZW50IHN0cmVhbSBwb2ludGVyIHNob3VsZCBiZSBub3cgZGlyZWN0bHkKKwkJCSAqICphZnRlciogdGhlIGJsb2NrIHRoYXQgc3Bhbm5lZCB0aHJvdWdoIG11bHRpcGxlCisJCQkgKiBhcmNoaXZlIGZpbGVzLiBgcGAgcG9pbnRlciBzaG91bGQgaGF2ZSB0aGUgZGF0YSBvZgorCQkJICogdGhlICp3aG9sZSogYmxvY2sgKG1lcmdlZCBmcm9tIHBhcnRpYWwgYmxvY2tzCisJCQkgKiBzdG9yZWQgaW4gbXVsdGlwbGUgYXJjaGl2ZXMgZmlsZXMpLiAqLworCQl9IGVsc2UgeworCQkJcmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lID0gMDsKKworCQkJLyogUmVhZCB0aGUgd2hvbGUgYmxvY2sgc2l6ZSBpbnRvIG1lbW9yeS4gVGhpcyBjYW4gdGFrZQorCQkJICogdXAgdG8gIDggbWVnYWJ5dGVzIG9mIG1lbW9yeSBpbiB0aGVvcmV0aWNhbCBjYXNlcy4KKwkJCSAqIE1pZ2h0IGJlIHdvcnRoIHRvIG9wdGltaXplIHRoaXMgYW5kIHVzZSBhIHN0YW5kYXJkCisJCQkgKiBjaHVuayBvZiA0a2Incy4gKi8KKwkJCWlmKCFyZWFkX2FoZWFkKGEsIDQgKyBjdXJfYmxvY2tfc2l6ZSwgJnApKSB7CisJCQkJLyogRmFpbGVkIHRvIHByZWZldGNoIGJsb2NrIGRhdGEuICovCisJCQkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCQkJfQorCQl9CisKKwkJcmFyLT5jc3RhdGUuYmxvY2tfYnVmID0gcDsKKwkJcmFyLT5jc3RhdGUuY3VyX2Jsb2NrX3NpemUgPSBjdXJfYmxvY2tfc2l6ZTsKKwkJcmFyLT5jc3RhdGUuYmxvY2tfcGFyc2luZ19maW5pc2hlZCA9IDA7CisKKwkJcmFyLT5iaXRzLmluX2FkZHIgPSAwOworCQlyYXItPmJpdHMuYml0X2FkZHIgPSAwOworCisJCWlmKGJmX2lzX3RhYmxlX3ByZXNlbnQoJnJhci0+bGFzdF9ibG9ja19oZHIpKSB7CisJCQkvKiBMb2FkIEh1ZmZtYW4gdGFibGVzLiAqLworCQkJcmV0ID0gcGFyc2VfdGFibGVzKGEsIHJhciwgcCk7CisJCQlpZihyZXQgIT0gQVJDSElWRV9PSykgeworCQkJCS8qIEVycm9yIGR1cmluZyBkZWNvbXByZXNzaW9uIG9mIEh1ZmZtYW4KKwkJCQkgKiB0YWJsZXMuICovCisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qIEJsb2NrIHBhcnNpbmcgbm90IGZpbmlzaGVkLCByZXVzZSBwcmV2aW91cyBtZW1vcnkgYnVmZmVyLiAqLworCQlwID0gcmFyLT5jc3RhdGUuYmxvY2tfYnVmOworCX0KKworCS8qIFVuY29tcHJlc3MgdGhlIGJsb2NrLCBvciBhIHBhcnQgb2YgaXQsIGRlcGVuZGluZyBvbiBob3cgbWFueSBieXRlcworCSAqIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHVuY29tcHJlc3NpbmcgdGhlIGJsb2NrLgorCSAqCisJICogSW4gY2FzZSB0b28gbWFueSBieXRlcyB3aWxsIGJlIGdlbmVyYXRlZCwgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisJICogYWdhaW4gd2lsbCByZXN1bWUgdGhlIHVuY29tcHJlc3Npb24gb3BlcmF0aW9uLiAqLworCXJldCA9IGRvX3VuY29tcHJlc3NfYmxvY2soYSwgcCk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZihyYXItPmNzdGF0ZS5ibG9ja19wYXJzaW5nX2ZpbmlzaGVkICYmCisJICAgIHJhci0+Y3N0YXRlLnN3aXRjaF9tdWx0aXZvbHVtZSA9PSAwICYmCisJICAgIHJhci0+Y3N0YXRlLmN1cl9ibG9ja19zaXplID4gMCkKKwl7CisJCS8qIElmIHdlJ3JlIHByb2Nlc3NpbmcgYSBub3JtYWwgYmxvY2ssIGNvbnN1bWUgdGhlIHdob2xlCisJCSAqIGJsb2NrLiBXZSBjYW4gZG8gdGhpcyBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgcmVhZCB0aGUgd2hvbGUKKwkJICogYmxvY2sgdG8gbWVtb3J5LiAqLworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgcmFyLT5jc3RhdGUuY3VyX2Jsb2NrX3NpemUpKQorCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisKKwkJcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyAtPSByYXItPmNzdGF0ZS5jdXJfYmxvY2tfc2l6ZTsKKwl9IGVsc2UgaWYocmFyLT5jc3RhdGUuc3dpdGNoX211bHRpdm9sdW1lKSB7CisJCS8qIERvbid0IGNvbnN1bWUgdGhlIGJsb2NrIGlmIHdlJ3JlIGRvaW5nIG11bHRpdm9sdW1lCisJCSAqIHByb2Nlc3NpbmcuIFRoZSB2b2x1bWUgc3dpdGNoaW5nIGZ1bmN0aW9uIHdpbGwgY29uc3VtZQorCQkgKiB0aGUgcHJvcGVyIGNvdW50IG9mIGJ5dGVzIGluc3RlYWQuICovCisJCXJhci0+Y3N0YXRlLnN3aXRjaF9tdWx0aXZvbHVtZSA9IDA7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKy8qIFBvcHMgdGhlIGBidWZgLCBgc2l6ZWAgYW5kIGBvZmZzZXRgIGZyb20gdGhlICJkYXRhIHJlYWR5IiBzdGFjay4KKyAqCisgKiBSZXR1cm5zIEFSQ0hJVkVfT0sgd2hlbiB0aG9zZSBhcmd1bWVudHMgY2FuIGJlIHVzZWQsIEFSQ0hJVkVfUkVUUlkKKyAqIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSBvbiB0aGUgc3RhY2suICovCitzdGF0aWMgaW50IHVzZV9kYXRhKHN0cnVjdCByYXI1KiByYXIsIGNvbnN0IHZvaWQqKiBidWYsIHNpemVfdCogc2l6ZSwKKyAgICBpbnQ2NF90KiBvZmZzZXQpCit7CisJaW50IGk7CisKKwlmb3IoaSA9IDA7IGkgPCByYXI1X2NvdW50b2YocmFyLT5jc3RhdGUuZHJlYWR5KTsgaSsrKSB7CisJCXN0cnVjdCBkYXRhX3JlYWR5ICpkID0gJnJhci0+Y3N0YXRlLmRyZWFkeVtpXTsKKworCQlpZihkLT51c2VkKSB7CisJCQlpZihidWYpICAgICpidWYgPSBkLT5idWY7CisJCQlpZihzaXplKSAgICpzaXplID0gZC0+c2l6ZTsKKwkJCWlmKG9mZnNldCkgKm9mZnNldCA9IGQtPm9mZnNldDsKKworCQkJZC0+dXNlZCA9IDA7CisJCQlyZXR1cm4gQVJDSElWRV9PSzsKKwkJfQorCX0KKworCXJldHVybiBBUkNISVZFX1JFVFJZOworfQorCisvKiBQdXNoZXMgdGhlIGBidWZgLCBgc2l6ZWAgYW5kIGBvZmZzZXRgIGFyZ3VtZW50cyB0byB0aGUgcmFyLT5jc3RhdGUuZHJlYWR5CisgKiBGSUZPIHN0YWNrLiBUaG9zZSB2YWx1ZXMgd2lsbCBiZSBwb3BwZWQgZnJvbSB0aGlzIHN0YWNrIGJ5IHRoZSBgdXNlX2RhdGFgCisgKiBmdW5jdGlvbi4gKi8KK3N0YXRpYyBpbnQgcHVzaF9kYXRhX3JlYWR5KHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsIHN0cnVjdCByYXI1KiByYXIsCisgICAgY29uc3QgdWludDhfdCogYnVmLCBzaXplX3Qgc2l6ZSwgaW50NjRfdCBvZmZzZXQpCit7CisJaW50IGk7CisKKwkvKiBEb24ndCBwdXNoIGlmIHdlJ3JlIGluIHNraXAgbW9kZS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzb2xpZAorCSAqIHN0cmVhbXMgbmVlZCBmdWxsIHByb2Nlc3NpbmcgZXZlbiBpZiB3ZSdyZSBza2lwcGluZyBkYXRhLiBBZnRlcgorCSAqIGZ1bGx5IHByb2Nlc3NpbmcgdGhlIHN0cmVhbSwgd2UgbmVlZCB0byBkaXNjYXJkIHRoZSBnZW5lcmF0ZWQgYnl0ZXMsCisJICogYmVjYXVzZSB3ZSdyZSBpbnRlcmVzdGVkIG9ubHkgaW4gdGhlIHNpZGUgZWZmZWN0OiBidWlsZGluZyB1cCB0aGUKKwkgKiBpbnRlcm5hbCB3aW5kb3cgY2lyY3VsYXIgYnVmZmVyLiBUaGlzIHdpbmRvdyBidWZmZXIgd2lsbCBiZSB1c2VkCisJICogbGF0ZXIgZHVyaW5nIHVucGFja2luZyBvZiByZXF1ZXN0ZWQgZGF0YS4gKi8KKwlpZihyYXItPnNraXBfbW9kZSkKKwkJcmV0dXJuIEFSQ0hJVkVfT0s7CisKKwkvKiBTYW5pdHkgY2hlY2suICovCisJaWYob2Zmc2V0ICE9IHJhci0+ZmlsZS5sYXN0X29mZnNldCArIHJhci0+ZmlsZS5sYXN0X3NpemUpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJICAgICJTYW5pdHkgY2hlY2sgZXJyb3I6IG91dHB1dCBzdHJlYW0gaXMgbm90IGNvbnRpbnVvdXMiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJZm9yKGkgPSAwOyBpIDwgcmFyNV9jb3VudG9mKHJhci0+Y3N0YXRlLmRyZWFkeSk7IGkrKykgeworCQlzdHJ1Y3QgZGF0YV9yZWFkeSogZCA9ICZyYXItPmNzdGF0ZS5kcmVhZHlbaV07CisJCWlmKCFkLT51c2VkKSB7CisJCQlkLT51c2VkID0gMTsKKwkJCWQtPmJ1ZiA9IGJ1ZjsKKwkJCWQtPnNpemUgPSBzaXplOworCQkJZC0+b2Zmc2V0ID0gb2Zmc2V0OworCisJCQkvKiBUaGVzZSBmaWVsZHMgYXJlIHVzZWQgb25seSBpbiBzYW5pdHkgY2hlY2tpbmcuICovCisJCQlyYXItPmZpbGUubGFzdF9vZmZzZXQgPSBvZmZzZXQ7CisJCQlyYXItPmZpbGUubGFzdF9zaXplID0gc2l6ZTsKKworCQkJLyogQ2FsY3VsYXRlIHRoZSBjaGVja3N1bSBvZiB0aGlzIG5ldyBibG9jayBiZWZvcmUKKwkJCSAqIHN1Ym1pdHRpbmcgZGF0YSB0byBsaWJhcmNoaXZlJ3MgZW5naW5lLiAqLworCQkJdXBkYXRlX2NyYyhyYXIsIGQtPmJ1ZiwgZC0+c2l6ZSk7CisKKwkJCXJldHVybiBBUkNISVZFX09LOworCQl9CisJfQorCisJLyogUHJvZ3JhbSBjb3VudGVyIHdpbGwgcmVhY2ggdGhpcyBjb2RlIGlmIHRoZSBgcmFyLT5jc3RhdGUuZGF0YV9yZWFkeWAKKwkgKiBzdGFjayB3aWxsIGJlIGZpbGxlZCB1cCBzbyB0aGF0IG5vIG5ldyBlbnRyaWVzIHdpbGwgYmUgYWxsb3dlZC4gVGhlCisJICogY29kZSBzaG91bGRuJ3QgYWxsb3cgc3VjaCBzaXR1YXRpb24gdG8gb2NjdXIuIFNvIHdlIHRyZWF0IHRoaXMgY2FzZQorCSAqIGFzIGFuIGludGVybmFsIGVycm9yLiAqLworCisJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkgICAgIkVycm9yOiBwcmVtYXR1cmUgZW5kIG9mIGRhdGFfcmVhZHkgc3RhY2siKTsKKwlyZXR1cm4gQVJDSElWRV9GQVRBTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiB1bmNvbXByZXNzZXMgdGhlIGRhdGEgdGhhdCBpcyBzdG9yZWQgaW4gdGhlIDxGSUxFPiBiYXNlCisgKiBibG9jay4KKyAqCisgKiBUaGUgRklMRSBiYXNlIGJsb2NrIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKiA8aGVhZGVyPjxodWZmbWFuIHRhYmxlcz48YmxvY2tfMT48YmxvY2tfMj4uLi48YmxvY2tfbj4KKyAqCisgKiBUaGUgPGhlYWRlcj4gaXMgYSBibG9jayBoZWFkZXIsIHRoYXQgaXMgcGFyc2VkIGluIHBhcnNlX2Jsb2NrX2hlYWRlcigpLgorICogSXQncyBhICJjb21wcmVzc2VkX2Jsb2NrX2hlYWRlciIgc3RydWN0dXJlLCBjb250YWluaW5nIG1ldGFkYXRhIG5lZWRlZAorICogdG8ga25vdyB3aGVuIHdlIHNob3VsZCBzdG9wIGxvb2tpbmcgZm9yIG1vcmUgPGJsb2NrX24+IGJsb2Nrcy4KKyAqCisgKiA8aHVmZm1hbiB0YWJsZXM+IGNvbnRhaW4gZGF0YSBuZWVkZWQgdG8gc2V0IHVwIHRoZSBodWZmbWFuIHRhYmxlcywgbmVlZGVkCisgKiBmb3IgdGhlIGFjdHVhbCBkZWNvbXByZXNzaW9uLgorICoKKyAqIEVhY2ggPGJsb2NrX24+IGNvbnNpc3RzIG9mIHNlcmllcyBvZiBsaXRlcmFsczoKKyAqCisgKiA8bGl0ZXJhbD48bGl0ZXJhbD48bGl0ZXJhbD4uLi48bGl0ZXJhbD4KKyAqCisgKiBUaG9zZSBsaXRlcmFscyBnZW5lcmF0ZSB0aGUgdW5jb21wcmVzc2lvbiBkYXRhLiBUaGV5IG9wZXJhdGUgb24gYSBjaXJjdWxhcgorICogYnVmZmVyLCBzb21ldGltZXMgd3JpdGluZyByYXcgZGF0YSBpbnRvIGl0LCBzb21ldGltZXMgcmVmZXJlbmNpbmcKKyAqIHNvbWUgcHJldmlvdXMgZGF0YSBpbnNpZGUgdGhpcyBidWZmZXIsIGFuZCBzb21ldGltZXMgZGVjbGFyaW5nIGEgZmlsdGVyCisgKiB0aGF0IHdpbGwgbmVlZCB0byBiZSBleGVjdXRlZCBvbiB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIEl0IGFsbCBkZXBlbmRzIG9uIHRoZSBsaXRlcmFsIHRoYXQgaXMgdXNlZC4KKyAqCisgKiBTb21ldGltZXMgYmxvY2tzIHByb2R1Y2Ugb3V0cHV0IGRhdGEsIHNvbWV0aW1lcyB0aGV5IGRvbid0LiBGb3IgZXhhbXBsZSwgZm9yCisgKiBzb21lIGh1Z2UgZmlsZXMgdGhhdCB1c2UgbG90cyBvZiBmaWx0ZXJzLCBzb21ldGltZXMgYSBibG9jayBpcyBmaWxsZWQgd2l0aAorICogb25seSBmaWx0ZXIgZGVjbGFyYXRpb24gbGl0ZXJhbHMuIFN1Y2ggYmxvY2tzIHdvbid0IHByb2R1Y2UgYW55IGRhdGEgaW4gdGhlCisgKiBjaXJjdWxhciBidWZmZXIuCisgKgorICogU29tZXRpbWVzIGJsb2NrcyB3aWxsIHByb2R1Y2UgNCBieXRlcyBvZiBkYXRhLCBhbmQgc29tZXRpbWVzIDEgbWVnYWJ5dGUsCisgKiBiZWNhdXNlIGEgbGl0ZXJhbCBjYW4gcmVmZXJlbmNlIHByZXZpb3VzbHkgZGVjb21wcmVzc2VkIGRhdGEuIEZvciBleGFtcGxlLAorICogdGhlcmUgY2FuIGJlIGEgbGl0ZXJhbCB0aGF0IHNheXM6ICdhcHBlbmQgYSBieXRlIDB4RkUgaGVyZScsIGFuZCBhZnRlcgorICogaXQgYW5vdGhlciBsaXRlcmFsIGNhbiBzYXkgJ2FwcGVuZCAxIG1lZ2FieXRlIG9mIGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIKKyAqIG9mZnNldCAweDEyMzQ1Jy4gVGhpcyBpcyBob3cgUkFSIGZvcm1hdCBoYW5kbGVzIGNvbXByZXNzaW5nIHJlcGVhdGVkCisgKiBwYXR0ZXJucy4KKyAqCisgKiBUaGUgUkFSIGNvbXByZXNzb3IgY3JlYXRlcyB0aG9zZSBsaXRlcmFscyBhbmQgdGhlIGFjdHVhbCBlZmZpY2llbmN5IG9mCisgKiBjb21wcmVzc2lvbiBkZXBlbmRzIG9uIHdoYXQgdGhvc2UgbGl0ZXJhbHMgYXJlLiBUaGUgbGl0ZXJhbHMgY2FuIGFsc28KKyAqIGJlIHNlZW4gYXMgYSBraW5kIG9mIGEgbm9uLXR1cmluZy1jb21wbGV0ZSB2aXJ0dWFsIG1hY2hpbmUgdGhhdCBzaW1wbHkKKyAqIHRlbGxzIHRoZSBkZWNvbXByZXNzb3Igd2hhdCBpdCBzaG91bGQgZG8uCisgKiAqLworCitzdGF0aWMgaW50IGRvX3VuY29tcHJlc3NfZmlsZShzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCWludCByZXQ7CisJaW50NjRfdCBtYXhfZW5kX3BvczsKKworCWlmKCFyYXItPmNzdGF0ZS5pbml0aWFsaXplZCkgeworCQkvKiBEb24ndCBwZXJmb3JtIGZ1bGwgY29udGV4dCByZWluaXRpYWxpemF0aW9uIGlmIHdlJ3JlCisJCSAqIHByb2Nlc3NpbmcgYSBzb2xpZCBhcmNoaXZlLiAqLworCQlpZighcmFyLT5tYWluLnNvbGlkIHx8ICFyYXItPmNzdGF0ZS53aW5kb3dfYnVmKSB7CisJCQlpbml0X3VucGFjayhyYXIpOworCQl9CisKKwkJcmFyLT5jc3RhdGUuaW5pdGlhbGl6ZWQgPSAxOworCX0KKworCWlmKHJhci0+Y3N0YXRlLmFsbF9maWx0ZXJzX2FwcGxpZWQgPT0gMSkgeworCQkvKiBXZSB1c2Ugd2hpbGUoMSkgaGVyZSwgYnV0IHN0YW5kYXJkIGNhc2UgYWxsb3dzIGZvciBqdXN0IDEKKwkJICogaXRlcmF0aW9uLiBUaGUgbG9vcCB3aWxsIGl0ZXJhdGUgaWYgcHJvY2Vzc19ibG9jaygpIGRpZG4ndAorCQkgKiBnZW5lcmF0ZSBhbnkgZGF0YSBhdCBhbGwuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgYmxvY2sKKwkJICogY29udGFpbnMgb25seSBmaWx0ZXIgZGVmaW5pdGlvbnMgKHRoaXMgaXMgY29tbW9uIGluIGJpZworCQkgKiBmaWxlcykuICovCisJCXdoaWxlKDEpIHsKKwkJCXJldCA9IHByb2Nlc3NfYmxvY2soYSk7CisJCQlpZihyZXQgPT0gQVJDSElWRV9FT0YgfHwgcmV0ID09IEFSQ0hJVkVfRkFUQUwpCisJCQkJcmV0dXJuIHJldDsKKworCQkJaWYocmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgPT0KKwkJCSAgICByYXItPmNzdGF0ZS53cml0ZV9wdHIpIHsKKwkJCQkvKiBUaGUgYmxvY2sgZGlkbid0IGdlbmVyYXRlIGFueSBuZXcgZGF0YSwKKwkJCQkgKiBzbyBqdXN0IHByb2Nlc3MgYSBuZXcgYmxvY2suICovCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFRoZSBibG9jayBoYXMgZ2VuZXJhdGVkIHNvbWUgbmV3IGRhdGEsIHNvIGJyZWFrCisJCQkgKiB0aGUgbG9vcC4gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogVHJ5IHRvIHJ1biBmaWx0ZXJzLiBJZiBmaWx0ZXJzIHdvbid0IGJlIGFwcGxpZWQsIGl0IG1lYW5zIHRoYXQKKwkgKiBpbnN1ZmZpY2llbnQgZGF0YSB3YXMgZ2VuZXJhdGVkLiAqLworCXJldCA9IGFwcGx5X2ZpbHRlcnMoYSk7CisJaWYocmV0ID09IEFSQ0hJVkVfUkVUUlkpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfT0s7CisJfSBlbHNlIGlmKHJldCA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCX0KKworCS8qIElmIGFwcGx5X2ZpbHRlcnMoKSB3aWxsIHJldHVybiBBUkNISVZFX09LLCB3ZSBjYW4gY29udGludWUgaGVyZS4gKi8KKworCWlmKGNkZXF1ZV9zaXplKCZyYXItPmNzdGF0ZS5maWx0ZXJzKSA+IDApIHsKKwkJLyogQ2hlY2sgaWYgd2UgY2FuIHdyaXRlIHNvbWV0aGluZyBiZWZvcmUgaGl0dGluZyBmaXJzdAorCQkgKiBmaWx0ZXIuICovCisJCXN0cnVjdCBmaWx0ZXJfaW5mbyogZmx0OworCisJCS8qIEdldCB0aGUgYmxvY2tfc3RhcnQgb2Zmc2V0IGZyb20gdGhlIGZpcnN0IGZpbHRlci4gKi8KKwkJaWYoQ0RFX09LICE9IGNkZXF1ZV9mcm9udCgmcmFyLT5jc3RhdGUuZmlsdGVycywKKwkJICAgIGNkZXF1ZV9maWx0ZXJfcCgmZmx0KSkpCisJCXsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJCSAgICAiQ2FuJ3QgcmVhZCBmaXJzdCBmaWx0ZXIiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisKKwkJbWF4X2VuZF9wb3MgPSByYXI1X21pbihmbHQtPmJsb2NrX3N0YXJ0LAorCQkgICAgcmFyLT5jc3RhdGUud3JpdGVfcHRyKTsKKwl9IGVsc2UgeworCQkvKiBUaGVyZSBhcmUgbm8gZmlsdGVycyBkZWZpbmVkLCBvciBhbGwgZmlsdGVycyB3ZXJlIGFwcGxpZWQuCisJCSAqIFRoaXMgbWVhbnMgd2UgY2FuIGp1c3Qgc3RvcmUgdGhlIGRhdGEgd2l0aG91dCBhbnkKKwkJICogcG9zdHByb2Nlc3NpbmcuICovCisJCW1heF9lbmRfcG9zID0gcmFyLT5jc3RhdGUud3JpdGVfcHRyOworCX0KKworCWlmKG1heF9lbmRfcG9zID09IHJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyKSB7CisJCS8qIFdlIGNhbid0IHdyaXRlIGFueXRoaW5nIHlldC4gVGhlIGJsb2NrIHVuY29tcHJlc3Npb24KKwkJICogZnVuY3Rpb24gZGlkIG5vdCBnZW5lcmF0ZSBlbm91Z2ggZGF0YSwgYW5kIG5vIGZpbHRlciBjYW4gYmUKKwkJICogYXBwbGllZC4gQXQgdGhlIHNhbWUgdGltZSB3ZSBkb24ndCBoYXZlIGFueSBkYXRhIHRoYXQgY2FuIGJlCisJCSAqICBzdG9yZWQgd2l0aG91dCBmaWx0ZXIgcG9zdHByb2Nlc3NpbmcuIFRoaXMgbWVhbnMgd2UgbmVlZCB0bworCQkgKiAgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGJlIGdlbmVyYXRlZCwgc28gd2UgY2FuIGFwcGx5IHRoZQorCQkgKiBmaWx0ZXJzLgorCQkgKgorCQkgKiBTaWduYWwgdGhlIGNhbGxlciB0aGF0IHdlIG5lZWQgbW9yZSBkYXRhIHRvIGJlIGFibGUgdG8gZG8KKwkJICogYW55dGhpbmcuCisJCSAqLworCQlyZXR1cm4gQVJDSElWRV9SRVRSWTsKKwl9IGVsc2UgeworCQkvKiBXZSBjYW4gd3JpdGUgdGhlIGRhdGEgYmVmb3JlIGhpdHRpbmcgdGhlIGZpcnN0IGZpbHRlci4KKwkJICogU28gbGV0J3MgZG8gaXQuIFRoZSBwdXNoX3dpbmRvd19kYXRhKCkgZnVuY3Rpb24gd2lsbAorCQkgKiBlZmZlY3RpdmVseSByZXR1cm4gdGhlIHNlbGVjdGVkIGRhdGEgYmxvY2sgdG8gdGhlIHVzZXIKKwkJICogYXBwbGljYXRpb24uICovCisJCXB1c2hfd2luZG93X2RhdGEoYSwgcmFyLCByYXItPmNzdGF0ZS5sYXN0X3dyaXRlX3B0ciwKKwkJICAgIG1heF9lbmRfcG9zKTsKKwkJcmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgPSBtYXhfZW5kX3BvczsKKwl9CisKKwlyZXR1cm4gQVJDSElWRV9PSzsKK30KKworc3RhdGljIGludCB1bmNvbXByZXNzX2ZpbGUoc3RydWN0IGFyY2hpdmVfcmVhZCogYSkgeworCWludCByZXQ7CisKKwl3aGlsZSgxKSB7CisJCS8qIFNvbWV0aW1lcyB0aGUgdW5jb21wcmVzc2lvbiBmdW5jdGlvbiB3aWxsIHJldHVybiBhCisJCSAqICdyZXRyeScgc2lnbmFsLiBJZiB0aGlzIHdpbGwgaGFwcGVuLCB3ZSBoYXZlIHRvIHJldHJ5CisJCSAqIHRoZSBmdW5jdGlvbi4gKi8KKwkJcmV0ID0gZG9fdW5jb21wcmVzc19maWxlKGEpOworCQlpZihyZXQgIT0gQVJDSElWRV9SRVRSWSkKKwkJCXJldHVybiByZXQ7CisJfQorfQorCisKK3N0YXRpYyBpbnQgZG9fdW5zdG9yZV9maWxlKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEsCisgICAgc3RydWN0IHJhcjUqIHJhciwgY29uc3Qgdm9pZCoqIGJ1Ziwgc2l6ZV90KiBzaXplLCBpbnQ2NF90KiBvZmZzZXQpCit7CisJc2l6ZV90IHRvX3JlYWQ7CisJY29uc3QgdWludDhfdCogcDsKKworCWlmKHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgPT0gMCAmJiByYXItPm1haW4udm9sdW1lID4gMCAmJgorCSAgICByYXItPmdlbmVyaWMuc3BsaXRfYWZ0ZXIgPiAwKQorCXsKKwkJaW50IHJldDsKKworCQlyYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUgPSAxOworCQlyZXQgPSBhZHZhbmNlX211bHRpdm9sdW1lKGEpOworCQlyYXItPmNzdGF0ZS5zd2l0Y2hfbXVsdGl2b2x1bWUgPSAwOworCisJCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCQkvKiBGYWlsZWQgdG8gYWR2YW5jZSB0byBuZXh0IG11bHRpdm9sdW1lIGFyY2hpdmUKKwkJCSAqIGZpbGUuICovCisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJdG9fcmVhZCA9IHJhcjVfbWluKHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcsIDY0ICogMTAyNCk7CisJaWYodG9fcmVhZCA9PSAwKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZighcmVhZF9haGVhZChhLCB0b19yZWFkLCAmcCkpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiSS9PIGVycm9yIHdoZW4gdW5zdG9yaW5nIGZpbGUiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJaWYoQVJDSElWRV9PSyAhPSBjb25zdW1lKGEsIHRvX3JlYWQpKSB7CisJCXJldHVybiBBUkNISVZFX0VPRjsKKwl9CisKKwlpZihidWYpICAgICpidWYgPSBwOworCWlmKHNpemUpICAgKnNpemUgPSB0b19yZWFkOworCWlmKG9mZnNldCkgKm9mZnNldCA9IHJhci0+Y3N0YXRlLmxhc3RfdW5zdG9yZV9wdHI7CisKKwlyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nIC09IHRvX3JlYWQ7CisJcmFyLT5jc3RhdGUubGFzdF91bnN0b3JlX3B0ciArPSB0b19yZWFkOworCisJdXBkYXRlX2NyYyhyYXIsIHAsIHRvX3JlYWQpOworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IGRvX3VucGFjayhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhLCBzdHJ1Y3QgcmFyNSogcmFyLAorICAgIGNvbnN0IHZvaWQqKiBidWYsIHNpemVfdCogc2l6ZSwgaW50NjRfdCogb2Zmc2V0KQoreworCWVudW0gQ09NUFJFU1NJT05fTUVUSE9EIHsKKwkJU1RPUkUgPSAwLCBGQVNURVNUID0gMSwgRkFTVCA9IDIsIE5PUk1BTCA9IDMsIEdPT0QgPSA0LAorCQlCRVNUID0gNQorCX07CisKKwlpZihyYXItPmZpbGUuc2VydmljZSA+IDApIHsKKwkJcmV0dXJuIGRvX3Vuc3RvcmVfZmlsZShhLCByYXIsIGJ1Ziwgc2l6ZSwgb2Zmc2V0KTsKKwl9IGVsc2UgeworCQlzd2l0Y2gocmFyLT5jc3RhdGUubWV0aG9kKSB7CisJCQljYXNlIFNUT1JFOgorCQkJCXJldHVybiBkb191bnN0b3JlX2ZpbGUoYSwgcmFyLCBidWYsIHNpemUsCisJCQkJICAgIG9mZnNldCk7CisJCQljYXNlIEZBU1RFU1Q6CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWNhc2UgRkFTVDoKKwkJCQkvKiBmYWxsdGhyb3VnaCAqLworCQkJY2FzZSBOT1JNQUw6CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWNhc2UgR09PRDoKKwkJCQkvKiBmYWxsdGhyb3VnaCAqLworCQkJY2FzZSBCRVNUOgorCQkJCXJldHVybiB1bmNvbXByZXNzX2ZpbGUoYSk7CisJCQlkZWZhdWx0OgorCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSAgICAiQ29tcHJlc3Npb24gbWV0aG9kIG5vdCBzdXBwb3J0ZWQ6IDB4JXgiLAorCQkJCSAgICByYXItPmNzdGF0ZS5tZXRob2QpOworCisJCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJCX0KKwl9CisKKyNpZiAhZGVmaW5lZCBXSU4zMgorCS8qIE5vdCByZWFjaGVkLiAqLworCXJldHVybiBBUkNISVZFX09LOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2NoZWNrc3VtcyhzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhKSB7CisJaW50IHZlcmlmeV9jcmM7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCisJLyogQ2hlY2sgY2hlY2tzdW1zIG9ubHkgd2hlbiBhY3R1YWxseSB1bnBhY2tpbmcgdGhlIGRhdGEuIFRoZXJlJ3Mgbm8KKwkgKiBuZWVkIHRvIGNhbGN1bGF0ZSBjaGVja3N1bSB3aGVuIHdlJ3JlIHNraXBwaW5nIGRhdGEgaW4gc29saWQgYXJjaGl2ZXMKKwkgKiAoc2tpcHBpbmcgaW4gc29saWQgYXJjaGl2ZXMgaXMgdGhlIHNhbWUgdGhpbmcgYXMgdW5wYWNraW5nIGNvbXByZXNzZWQKKwkgKiBkYXRhIGFuZCBkaXNjYXJkaW5nIHRoZSByZXN1bHQpLiAqLworCisJaWYoIXJhci0+c2tpcF9tb2RlKSB7CisJCS8qIEFsd2F5cyBjaGVjayBjaGVja3N1bXMgaWYgd2UncmUgbm90IGluIHNraXAgbW9kZSAqLworCQl2ZXJpZnlfY3JjID0gMTsKKwl9IGVsc2UgeworCQkvKiBXZSBjYW4gb3ZlcnJpZGUgdGhlIGxvZ2ljIGFib3ZlIHdpdGggYSBjb21waWxlLXRpbWUgb3B0aW9uCisJCSAqIE5PX0NSQ19PTl9TT0xJRF9TS0lQLiBUaGlzIG9wdGlvbiBpcyB1c2VkIGR1cmluZyBkZWJ1Z2dpbmcsCisJCSAqIGFuZCBpdCB3aWxsIGNoZWNrIGNoZWNrc3VtcyBvZiB1bnBhY2tlZCBkYXRhIGV2ZW4gd2hlbgorCQkgKiB3ZSdyZSBza2lwcGluZyBpdC4gKi8KKworI2lmIGRlZmluZWQgQ0hFQ0tfQ1JDX09OX1NPTElEX1NLSVAKKwkJLyogRGVidWcgY2FzZSAqLworCQl2ZXJpZnlfY3JjID0gMTsKKyNlbHNlCisJCS8qIE5vcm1hbCBjYXNlICovCisJCXZlcmlmeV9jcmMgPSAwOworI2VuZGlmCisJfQorCisJaWYodmVyaWZ5X2NyYykgeworCQkvKiBEdXJpbmcgdW5wYWNraW5nLCBvbiBlYWNoIHVucGFja2VkIGJsb2NrIHdlJ3JlIGNhbGxpbmcgdGhlCisJCSAqIHVwZGF0ZV9jcmMoKSBmdW5jdGlvbi4gU2luY2Ugd2UgYXJlIGhlcmUsIHRoZSB1bnBhY2tpbmcKKwkJICogcHJvY2VzcyBpcyBhbHJlYWR5IG92ZXIgYW5kIHdlIGNhbiBjaGVjayBpZiBjYWxjdWxhdGVkCisJCSAqIGNoZWNrc3VtIChDUkMzMiBvciBCTEFLRTJzcCkgaXMgdGhlIHNhbWUgYXMgd2hhdCBpcyBzdG9yZWQKKwkJICogaW4gdGhlIGFyY2hpdmUuICovCisJCWlmKHJhci0+ZmlsZS5zdG9yZWRfY3JjMzIgPiAwKSB7CisJCQkvKiBDaGVjayBDUkMzMiBvbmx5IHdoZW4gdGhlIGZpbGUgY29udGFpbnMgYSBDUkMzMgorCQkJICogdmFsdWUgZm9yIHRoaXMgZmlsZS4gKi8KKworCQkJaWYocmFyLT5maWxlLmNhbGN1bGF0ZWRfY3JjMzIgIT0KKwkJCSAgICByYXItPmZpbGUuc3RvcmVkX2NyYzMyKSB7CisJCQkJLyogQ2hlY2tzdW1zIGRvIG5vdCBtYXRjaDsgdGhlIHVucGFja2VkIGZpbGUKKwkJCQkgKiBpcyBjb3JydXB0ZWQuICovCisKKwkJCQlERUJVR19DT0RFIHsKKwkJCQkJcHJpbnRmKCJDaGVja3N1bSBlcnJvcjogQ1JDMzIgIgorCQkJCQkgICAgIih3YXM6ICUwOHgsIGV4cGVjdGVkOiAlMDh4KVxuIiwKKwkJCQkJICAgIHJhci0+ZmlsZS5jYWxjdWxhdGVkX2NyYzMyLAorCQkJCQkgICAgcmFyLT5maWxlLnN0b3JlZF9jcmMzMik7CisJCQkJfQorCisjaWZuZGVmIERPTlRfRkFJTF9PTl9DUkNfRVJST1IKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICAgIkNoZWNrc3VtIGVycm9yOiBDUkMzMiIpOworCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworI2VuZGlmCisJCQl9IGVsc2UgeworCQkJCURFQlVHX0NPREUgeworCQkJCQlwcmludGYoIkNoZWNrc3VtIE9LOiBDUkMzMiAiCisJCQkJCSAgICAiKCUwOHgvJTA4eClcbiIsCisJCQkJCSAgICByYXItPmZpbGUuc3RvcmVkX2NyYzMyLAorCQkJCQkgICAgcmFyLT5maWxlLmNhbGN1bGF0ZWRfY3JjMzIpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmKHJhci0+ZmlsZS5oYXNfYmxha2UyID4gMCkgeworCQkJLyogQkxBS0Uyc3AgaXMgYW4gb3B0aW9uYWwgY2hlY2tzdW0gYWxnb3JpdGhtIHRoYXQgaXMKKwkJCSAqIGFkZGVkIHRvIFJBUnY1IGFyY2hpdmVzIHdoZW4gdXNpbmcgdGhlIGAtaHRiYCBzd2l0Y2gKKwkJCSAqICBkdXJpbmcgY3JlYXRpb24gb2YgYXJjaGl2ZS4KKwkJCSAqCisJCQkgKiBXZSBub3cgZmluYWxpemUgdGhlIGhhc2ggY2FsY3VsYXRpb24gYnkgY2FsbGluZyB0aGUKKwkJCSAqIGBmaW5hbGAgZnVuY3Rpb24uIFRoaXMgd2lsbCBnZW5lcmF0ZSB0aGUgZmluYWwgaGFzaAorCQkJICogdmFsdWUgd2UgY2FuIHVzZSB0byBjb21wYXJlIGl0IHdpdGggdGhlIEJMQUtFMnNwCisJCQkgKiBjaGVja3N1bSB0aGF0IGlzIHN0b3JlZCBpbiB0aGUgYXJjaGl2ZS4KKwkJCSAqCisJCQkgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgYGZpbmFsYCBmdW5jdGlvbiBpcyBub3QKKwkJCSAqIHZlcnkgaGVscGZ1bCwgYXMgaXQgZ3VhcmRzIG9ubHkgYWdhaW5zdCBpbXByb3BlciB1c2UuCisgCQkJICogVGhpcyBpcyB3aHkgd2UncmUgZXhwbGljaXRseSBpZ25vcmluZyBpdC4gKi8KKworCQkJdWludDhfdCBiMl9idWZbMzJdOworCQkJKHZvaWQpIGJsYWtlMnNwX2ZpbmFsKCZyYXItPmZpbGUuYjJzdGF0ZSwgYjJfYnVmLCAzMik7CisKKwkJCWlmKG1lbWNtcCgmcmFyLT5maWxlLmJsYWtlMnNwLCBiMl9idWYsIDMyKSAhPSAwKSB7CisjaWZuZGVmIERPTlRfRkFJTF9PTl9DUkNfRVJST1IKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICAgIkNoZWNrc3VtIGVycm9yOiBCTEFLRTIiKTsKKworCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworI2VuZGlmCisJCQl9CisJCX0KKwl9CisKKwkvKiBGaW5hbGl6YXRpb24gZm9yIHRoaXMgZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkLiAqLworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9nbG9iYWxfY2hlY2tzdW1zKHN0cnVjdCBhcmNoaXZlX3JlYWQqIGEpIHsKKwlyZXR1cm4gdmVyaWZ5X2NoZWNrc3VtcyhhKTsKK30KKworLyoKKyAqIERlY3J5cHRpb24gZnVuY3Rpb24gZm9yIHRoZSBtYWdpYyBzaWduYXR1cmUgcGF0dGVybi4gQ2hlY2sgdGhlIGNvbW1lbnQgbmVhcgorICogdGhlIGByYXI1X3NpZ25hdHVyZV94b3JgIHN5bWJvbCB0byByZWFkIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMuCisgKi8KK3N0YXRpYyB2b2lkIHJhcjVfc2lnbmF0dXJlKGNoYXIgKmJ1ZikgeworCQlzaXplX3QgaTsKKworCQlmb3IoaSA9IDA7IGkgPCBzaXplb2YocmFyNV9zaWduYXR1cmVfeG9yKTsgaSsrKSB7CisJCQlidWZbaV0gPSByYXI1X3NpZ25hdHVyZV94b3JbaV0gXiAweEExOworCQl9Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9yZWFkX2RhdGEoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgY29uc3Qgdm9pZCAqKmJ1ZmYsCisgICAgc2l6ZV90ICpzaXplLCBpbnQ2NF90ICpvZmZzZXQpIHsKKwlpbnQgcmV0OworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCWlmKHJhci0+ZmlsZS5kaXIgPiAwKSB7CisJCS8qIERvbid0IHByb2Nlc3MgYW55IGRhdGEgaWYgdGhpcyBmaWxlIGVudHJ5IHdhcyBkZWNsYXJlZAorCQkgKiBhcyBhIGRpcmVjdG9yeS4gVGhpcyBpcyBuZWVkZWQsIGJlY2F1c2UgZW50cmllcyBtYXJrZWQgYXMKKwkJICogZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSBhbnkgZGljdGlvbmFyeSBidWZmZXIgYWxsb2NhdGVkLCBzbworCQkgKiBpdCdzIGltcG9zc2libGUgdG8gcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbi4gKi8KKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiQ2FuJ3QgZGVjb21wcmVzcyBhbiBlbnRyeSBtYXJrZWQgYXMgYSBkaXJlY3RvcnkiKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOworCX0KKworCWlmKCFyYXItPnNraXBfbW9kZSAmJiAocmFyLT5jc3RhdGUubGFzdF93cml0ZV9wdHIgPiByYXItPmZpbGUudW5wYWNrZWRfc2l6ZSkpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJICAgICJVbnBhY2tlciBoYXMgd3JpdHRlbiB0b28gbWFueSBieXRlcyIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXQgPSB1c2VfZGF0YShyYXIsIGJ1ZmYsIHNpemUsIG9mZnNldCk7CisJaWYocmV0ID09IEFSQ0hJVkVfT0spIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZihyYXItPmZpbGUuZW9mID09IDEpIHsKKwkJcmV0dXJuIEFSQ0hJVkVfRU9GOworCX0KKworCXJldCA9IGRvX3VucGFjayhhLCByYXIsIGJ1ZmYsIHNpemUsIG9mZnNldCk7CisJaWYocmV0ICE9IEFSQ0hJVkVfT0spIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZihyYXItPmZpbGUuYnl0ZXNfcmVtYWluaW5nID09IDAgJiYKKwkJCXJhci0+Y3N0YXRlLmxhc3Rfd3JpdGVfcHRyID09IHJhci0+ZmlsZS51bnBhY2tlZF9zaXplKQorCXsKKwkJLyogSWYgYWxsIGJ5dGVzIG9mIGN1cnJlbnQgZmlsZSB3ZXJlIHByb2Nlc3NlZCwgcnVuCisJCSAqIGZpbmFsaXphdGlvbi4KKwkJICoKKwkJICogRmluYWxpemF0aW9uIHdpbGwgY2hlY2sgY2hlY2tzdW0gYWdhaW5zdCBwcm9wZXIgdmFsdWVzLiBJZgorCQkgKiBzb21lIG9mIHRoZSBjaGVja3N1bXMgd2lsbCBub3QgbWF0Y2gsIHdlJ2xsIHJldHVybiBhbiBlcnJvcgorCQkgKiB2YWx1ZSBpbiB0aGUgbGFzdCBgYXJjaGl2ZV9yZWFkX2RhdGFgIGNhbGwgdG8gc2lnbmFsIGFuIGVycm9yCisJCSAqIHRvIHRoZSB1c2VyLiAqLworCisJCXJhci0+ZmlsZS5lb2YgPSAxOworCQlyZXR1cm4gdmVyaWZ5X2dsb2JhbF9jaGVja3N1bXMoYSk7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9yZWFkX2RhdGFfc2tpcChzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphKSB7CisJc3RydWN0IHJhcjUqIHJhciA9IGdldF9jb250ZXh0KGEpOworCisJaWYocmFyLT5tYWluLnNvbGlkKSB7CisJCS8qIEluIHNvbGlkIGFyY2hpdmVzLCBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBkYXRhLCB3ZSBuZWVkIHRvCisJCSAqIGV4dHJhY3QgaXQsIGFuZCBkaXNwb3NlIHRoZSByZXN1bHQuIFRoZSBzaWRlIGVmZmVjdCBvZiB0aGlzCisJCSAqIG9wZXJhdGlvbiB3aWxsIGJlIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgd2luZG93IGJ1ZmZlciBzdGF0ZQorCQkgKiBuZWVkZWQgdG8gYmUgYWJsZSB0byBleHRyYWN0IHRoZSBzZWxlY3RlZCBmaWxlLiAqLworCisJCWludCByZXQ7CisKKwkJLyogTWFrZSBzdXJlIHRvIHByb2Nlc3MgYWxsIGJsb2NrcyBpbiB0aGUgY29tcHJlc3NlZCBzdHJlYW0uICovCisJCXdoaWxlKHJhci0+ZmlsZS5ieXRlc19yZW1haW5pbmcgPiAwKSB7CisJCQkvKiBTZXR0aW5nIHRoZSAic2tpcCBtb2RlIiB3aWxsIGFsbG93IHVzIHRvIHNraXAKKwkJCSAqIGNoZWNrc3VtIGNoZWNrcyBkdXJpbmcgZGF0YSBza2lwcGluZy4gQ2hlY2tpbmcgdGhlCisJCQkgKiBjaGVja3N1bSBvZiBza2lwcGVkIGRhdGEgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBhbmQKKwkJCSAqIGl0J3Mgb25seSBzbG93aW5nIHRoaW5ncyBkb3duLgorCQkJICoKKwkJCSAqIFRoaXMgaXMgaW5jcmVtZW50ZWQgaW5zdGVhZCBvZiBzZXR0aW5nIHRvIDEgYmVjYXVzZQorCQkJICogdGhpcyBkYXRhIHNraXBwaW5nIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQKKwkJCSAqIHJlY3Vyc2l2ZWx5LiAqLworCQkJcmFyLT5za2lwX21vZGUrKzsKKworCQkJLyogV2UncmUgZGlzcG9zaW5nIDEgYmxvY2sgb2YgZGF0YSwgc28gd2UgdXNlIHRyaXBsZQorCQkJICogTlVMTHMgaW4gYXJndW1lbnRzLiAqLworCQkJcmV0ID0gcmFyNV9yZWFkX2RhdGEoYSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCS8qIFR1cm4gb2ZmICJza2lwIG1vZGUiLiAqLworCQkJcmFyLT5za2lwX21vZGUtLTsKKworCQkJaWYocmV0IDwgMCB8fCByZXQgPT0gQVJDSElWRV9FT0YpIHsKKwkJCQkvKiBQcm9wYWdhdGUgYW55IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zCisJCQkJICogdG8gdGhlIGNhbGxlci4gKi8KKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogSW4gc3RhbmRhcmQgYXJjaGl2ZXMsIHdlIGNhbiBqdXN0IGp1bXAgb3ZlciB0aGUgY29tcHJlc3NlZAorCQkgKiBzdHJlYW0uIEVhY2ggZmlsZSBpbiBub24tc29saWQgYXJjaGl2ZXMgc3RhcnRzIGZyb20gYW4gZW1wdHkKKwkJICogd2luZG93IGJ1ZmZlci4gKi8KKworCQlpZihBUkNISVZFX09LICE9IGNvbnN1bWUoYSwgcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZykpIHsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CisKKwkJcmFyLT5maWxlLmJ5dGVzX3JlbWFpbmluZyA9IDA7CisJfQorCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQ2NF90IHJhcjVfc2Vla19kYXRhKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGludDY0X3Qgb2Zmc2V0LAorICAgIGludCB3aGVuY2UpCit7CisJKHZvaWQpIGE7CisJKHZvaWQpIG9mZnNldDsKKwkodm9pZCkgd2hlbmNlOworCisJLyogV2UncmUgYSBzdHJlYW1pbmcgdW5wYWNrZXIsIGFuZCB3ZSBkb24ndCBzdXBwb3J0IHNlZWtpbmcuICovCisKKwlyZXR1cm4gQVJDSElWRV9GQVRBTDsKK30KKworc3RhdGljIGludCByYXI1X2NsZWFudXAoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSkgeworCXN0cnVjdCByYXI1KiByYXIgPSBnZXRfY29udGV4dChhKTsKKworCWZyZWUocmFyLT5jc3RhdGUud2luZG93X2J1Zik7CisJZnJlZShyYXItPmNzdGF0ZS5maWx0ZXJlZF9idWYpOworCisJZnJlZShyYXItPnZvbC5wdXNoX2J1Zik7CisKKwlmcmVlX2ZpbHRlcnMocmFyKTsKKwljZGVxdWVfZnJlZSgmcmFyLT5jc3RhdGUuZmlsdGVycyk7CisKKwlmcmVlKHJhcik7CisJYS0+Zm9ybWF0LT5kYXRhID0gTlVMTDsKKworCXJldHVybiBBUkNISVZFX09LOworfQorCitzdGF0aWMgaW50IHJhcjVfY2FwYWJpbGl0aWVzKHN0cnVjdCBhcmNoaXZlX3JlYWQgKiBhKSB7CisJKHZvaWQpIGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9oYXNfZW5jcnlwdGVkX2VudHJpZXMoc3RydWN0IGFyY2hpdmVfcmVhZCAqX2EpIHsKKwkodm9pZCkgX2E7CisKKwkvKiBVbnN1cHBvcnRlZCBmb3Igbm93LiAqLworCXJldHVybiBBUkNISVZFX1JFQURfRk9STUFUX0VOQ1JZUFRJT05fVU5TVVBQT1JURUQ7Cit9CisKK3N0YXRpYyBpbnQgcmFyNV9pbml0KHN0cnVjdCByYXI1KiByYXIpIHsKKwltZW1zZXQocmFyLCAwLCBzaXplb2Yoc3RydWN0IHJhcjUpKTsKKworCWlmKENERV9PSyAhPSBjZGVxdWVfaW5pdCgmcmFyLT5jc3RhdGUuZmlsdGVycywgODE5MikpCisJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK2ludCBhcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyNShzdHJ1Y3QgYXJjaGl2ZSAqX2EpIHsKKwlzdHJ1Y3QgYXJjaGl2ZV9yZWFkKiBhcjsKKwlpbnQgcmV0OworCXN0cnVjdCByYXI1KiByYXI7CisKKwlpZihBUkNISVZFX09LICE9IChyZXQgPSBnZXRfYXJjaGl2ZV9yZWFkKF9hLCAmYXIpKSkKKwkJcmV0dXJuIHJldDsKKworCXJhciA9IG1hbGxvYyhzaXplb2YoKnJhcikpOworCWlmKHJhciA9PSBOVUxMKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhci0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIkNhbid0IGFsbG9jYXRlIHJhcjUgZGF0YSIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlpZihBUkNISVZFX09LICE9IHJhcjVfaW5pdChyYXIpKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhci0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIkNhbid0IGFsbG9jYXRlIHJhcjUgZmlsdGVyIGJ1ZmZlciIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwlyZXQgPSBfX2FyY2hpdmVfcmVhZF9yZWdpc3Rlcl9mb3JtYXQoYXIsCisJICAgIHJhciwKKwkgICAgInJhcjUiLAorCSAgICByYXI1X2JpZCwKKwkgICAgcmFyNV9vcHRpb25zLAorCSAgICByYXI1X3JlYWRfaGVhZGVyLAorCSAgICByYXI1X3JlYWRfZGF0YSwKKwkgICAgcmFyNV9yZWFkX2RhdGFfc2tpcCwKKwkgICAgcmFyNV9zZWVrX2RhdGEsCisJICAgIHJhcjVfY2xlYW51cCwKKwkgICAgcmFyNV9jYXBhYmlsaXRpZXMsCisJICAgIHJhcjVfaGFzX2VuY3J5cHRlZF9lbnRyaWVzKTsKKworCWlmKHJldCAhPSBBUkNISVZFX09LKSB7CisJCSh2b2lkKSByYXI1X2NsZWFudXAoYXIpOworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhdy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXcuYwppbmRleCBlZmEyYzZhLi5lYzA1MjBiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhdy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmF3LmMKQEAgLTEyMCw3ICsxMjAsOSBAQAogCWFyY2hpdmVfZW50cnlfc2V0X2ZpbGV0eXBlKGVudHJ5LCBBRV9JRlJFRyk7CiAJYXJjaGl2ZV9lbnRyeV9zZXRfcGVybShlbnRyeSwgMDY0NCk7CiAJLyogSSdtIGRlbGliZXJhdGVseSBsZWF2aW5nIG1vc3QgZmllbGRzIHVuc2V0IGhlcmUuICovCi0JcmV0dXJuIChBUkNISVZFX09LKTsKKworCS8qIExldCB0aGUgZmlsdGVyIGZpbGwgb3V0IGFueSBmaWVsZHMgaXQgbWlnaHQgaGF2ZS4gKi8KKwlyZXR1cm4gX19hcmNoaXZlX3JlYWRfaGVhZGVyKGEsIGVudHJ5KTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfdGFyLmMKaW5kZXggNjA4MDBiYi4uYzYzZDQ2ZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Rhci5jCkBAIC02OTQsMTEgKzY5NCwxMyBAQAogICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICplbnRyeSwgc2l6ZV90ICp1bmNvbnN1bWVkKQogewogCXNzaXplX3QgYnl0ZXM7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBlb2Zfdm9sX2hlYWRlcjsKIAljb25zdCBjaGFyICpoOwogCWNvbnN0IHN0cnVjdCBhcmNoaXZlX2VudHJ5X2hlYWRlcl91c3RhciAqaGVhZGVyOwogCWNvbnN0IHN0cnVjdCBhcmNoaXZlX2VudHJ5X2hlYWRlcl9nbnV0YXIgKmdudWhlYWRlcjsKIAorCWVvZl92b2xfaGVhZGVyID0gMDsKKwogCS8qIExvb3AgdW50aWwgd2UgZmluZCBhIHdvcmthYmxlIGhlYWRlciByZWNvcmQuICovCiAJZm9yICg7OykgewogCQl0YXJfZmx1c2hfdW5jb25zdW1lZChhLCB1bmNvbnN1bWVkKTsKQEAgLTc4OCw2ICs3OTAsOCBAQAogCQlicmVhazsKIAljYXNlICdWJzogLyogR05VIHZvbHVtZSBoZWFkZXIgKi8KIAkJZXJyID0gaGVhZGVyX3ZvbHVtZShhLCB0YXIsIGVudHJ5LCBoLCB1bmNvbnN1bWVkKTsKKwkJaWYgKGVyciA9PSBBUkNISVZFX0VPRikKKwkJCWVvZl92b2xfaGVhZGVyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSAnWCc6IC8qIFVzZWQgYnkgU1VOIHRhcjsgc2FtZSBhcyAneCcuICovCiAJCWEtPmFyY2hpdmUuYXJjaGl2ZV9mb3JtYXQgPSBBUkNISVZFX0ZPUk1BVF9UQVJfUEFYX0lOVEVSQ0hBTkdFOwpAQCAtODYyLDkgKzg2NiwxNyBAQAogCQl9CiAJCXJldHVybiAoZXJyKTsKIAl9Ci0JaWYgKGVyciA9PSBBUkNISVZFX0VPRikKLQkJLyogRU9GIHdoZW4gcmVjdXJzaXZlbHkgcmVhZGluZyBhIGhlYWRlciBpcyBiYWQuICovCi0JCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFSU5WQUwsICJEYW1hZ2VkIHRhciBhcmNoaXZlIik7CisJaWYgKGVyciA9PSBBUkNISVZFX0VPRikgeworCQlpZiAoIWVvZl92b2xfaGVhZGVyKSB7CisJCQkvKiBFT0Ygd2hlbiByZWN1cnNpdmVseSByZWFkaW5nIGEgaGVhZGVyIGlzIGJhZC4gKi8KKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFSU5WQUwsCisJCQkgICAgIkRhbWFnZWQgdGFyIGFyY2hpdmUiKTsKKwkJfSBlbHNlIHsKKwkJCS8qIElmIHdlIGVuY291bnRlciBqdXN0IGEgR05VIHZvbHVtZSBoZWFkZXIgdHJlYXQKKwkJCSAqIHRoaXMgc2l0dWF0aW9uIGFzIGFuIGVtcHR5IGFyY2hpdmUgKi8KKwkJCXJldHVybiAoQVJDSElWRV9FT0YpOworCQl9CisJfQogCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiB9CiAKQEAgLTE5NDIsNiArMTk1NCwxNSBAQAogCQkJcGF4X3RpbWUodmFsdWUsICZzLCAmbik7CiAJCQlhcmNoaXZlX2VudHJ5X3NldF9iaXJ0aHRpbWUoZW50cnksIHMsIG4pOwogCQl9CisJCWlmIChzdHJjbXAoa2V5LCAiTElCQVJDSElWRS5zeW1saW5rdHlwZSIpID09IDApIHsKKwkJCWlmIChzdHJjbXAodmFsdWUsICJmaWxlIikgPT0gMCkgeworCQkJCWFyY2hpdmVfZW50cnlfc2V0X3N5bWxpbmtfdHlwZShlbnRyeSwKKwkJCQkgICAgQUVfU1lNTElOS19UWVBFX0ZJTEUpOworCQkJfSBlbHNlIGlmIChzdHJjbXAodmFsdWUsICJkaXIiKSA9PSAwKSB7CisJCQkJYXJjaGl2ZV9lbnRyeV9zZXRfc3ltbGlua190eXBlKGVudHJ5LAorCQkJCSAgICBBRV9TWU1MSU5LX1RZUEVfRElSRUNUT1JZKTsKKwkJCX0KKwkJfQogCQlpZiAobWVtY21wKGtleSwgIkxJQkFSQ0hJVkUueGF0dHIuIiwgMTcpID09IDApCiAJCQlwYXhfYXR0cmlidXRlX3hhdHRyKGVudHJ5LCBrZXksIHZhbHVlKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3dhcmMuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfd2FyYy5jCmluZGV4IGU4NzUzODUuLjcyOTc3YjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfd2FyYy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfd2FyYy5jCkBAIC0zODYsNiArMzg2LDExIEBACiAJCXJldHVybiAoQVJDSElWRV9FT0YpOwogCX0KIAorCWlmICh3LT51bmNvbnN1bWVkKSB7CisJCV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwgdy0+dW5jb25zdW1lZCk7CisJCXctPnVuY29uc3VtZWQgPSAwVTsKKwl9CisKIAlyYWIgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAxVSwgJm5yZCk7CiAJaWYgKG5yZCA8IDApIHsKIAkJKmJzeiA9IDBVOwpAQCAtNjIxLDcgKzYyNiw4IEBACiAJCWlmICh2ZXIgPj0gMTIwMFUpIHsKIAkJCWlmIChtZW1jbXAoYywgIlxyXG4iLCAyVSkgIT0gMCkKIAkJCQl2ZXIgPSAwVTsKLQkJfSBlbHNlIGlmICh2ZXIgPCAxMjAwVSkgeworCQl9IGVsc2UgeworCQkJLyogdmVyIDwgMTIwMFUgKi8KIAkJCWlmICgqYyAhPSAnICcgJiYgKmMgIT0gJ1x0JykKIAkJCQl2ZXIgPSAwVTsKIAkJfQpAQCAtNzM5LDggKzc0NSw5IEBACiAJLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgKi8KIAlpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnZhbCkpCiAJCXJldHVybiAtMTsKKwllcnJubyA9IDA7CiAJbGVuID0gc3RydG9sKHZhbCwgJm9uLCAxMCk7Ci0JaWYgKG9uICE9IGVvbCkgeworCWlmIChlcnJubyAhPSAwIHx8IG9uICE9IGVvbCkgewogCQkvKiBsaW5lIG11c3QgZW5kIGhlcmUgKi8KIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfeGFyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3hhci5jCmluZGV4IDkyOTJlZDcuLjk0ODllNTEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfeGFyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF94YXIuYwpAQCAtMzksMTMgKzM5LDEzIEBACiAjaW5jbHVkZSA8ZXhwYXQuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfQlpMSUJfSAotI2luY2x1ZGUgPGNtX2J6bGliLmg+CisjaW5jbHVkZSA8Y20zcC9iemxpYi5oPgogI2VuZGlmCiAjaWYgSEFWRV9MWk1BX0gKLSNpbmNsdWRlIDxjbV9sem1hLmg+CisjaW5jbHVkZSA8Y20zcC9sem1hLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpAQCAtMTY3LDYgKzE2Nyw5IEBACiAjZGVmaW5lIEhBU19GRkxBR1MJCTB4MDEwMDAKICNkZWZpbmUgSEFTX1hBVFRSCQkweDAyMDAwCiAjZGVmaW5lIEhBU19BQ0wJCQkweDA0MDAwCisjZGVmaW5lIEhBU19DVElNRQkJMHgwODAwMAorI2RlZmluZSBIQVNfTVRJTUUJCTB4MTAwMDAKKyNkZWZpbmUgSEFTX0FUSU1FCQkweDIwMDAwCiAKIAl1aW50NjRfdAkJIGlkOwogCXVpbnQ2NF90CQkgbGVuZ3RoOwpAQCAtNjk1LDkgKzY5OCwxNSBAQAogCQkgKi8KIAkJZmlsZV9mcmVlKGZpbGUpOwogCX0KLQlhcmNoaXZlX2VudHJ5X3NldF9hdGltZShlbnRyeSwgZmlsZS0+YXRpbWUsIDApOwotCWFyY2hpdmVfZW50cnlfc2V0X2N0aW1lKGVudHJ5LCBmaWxlLT5jdGltZSwgMCk7Ci0JYXJjaGl2ZV9lbnRyeV9zZXRfbXRpbWUoZW50cnksIGZpbGUtPm10aW1lLCAwKTsKKyAgICAgICAgaWYgKGZpbGUtPmhhcyAmIEhBU19BVElNRSkgeworICAgICAgICAgIGFyY2hpdmVfZW50cnlfc2V0X2F0aW1lKGVudHJ5LCBmaWxlLT5hdGltZSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbGUtPmhhcyAmIEhBU19DVElNRSkgeworICAgICAgICAgIGFyY2hpdmVfZW50cnlfc2V0X2N0aW1lKGVudHJ5LCBmaWxlLT5jdGltZSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbGUtPmhhcyAmIEhBU19NVElNRSkgeworICAgICAgICAgIGFyY2hpdmVfZW50cnlfc2V0X210aW1lKGVudHJ5LCBmaWxlLT5tdGltZSwgMCk7CisgICAgICAgIH0KIAlhcmNoaXZlX2VudHJ5X3NldF9naWQoZW50cnksIGZpbGUtPmdpZCk7CiAJaWYgKGZpbGUtPmduYW1lLmxlbmd0aCA+IDAgJiYKIAkgICAgYXJjaGl2ZV9lbnRyeV9jb3B5X2duYW1lX2woZW50cnksIGZpbGUtPmduYW1lLnMsCkBAIC03ODksNyArNzk4LDggQEAKIAl4YXR0ciA9IGZpbGUtPnhhdHRyX2xpc3Q7CiAJd2hpbGUgKHhhdHRyICE9IE5VTEwpIHsKIAkJY29uc3Qgdm9pZCAqZDsKLQkJc2l6ZV90IG91dGJ5dGVzLCB1c2VkOworCQlzaXplX3Qgb3V0Ynl0ZXMgPSAwOworCQlzaXplX3QgdXNlZCA9IDA7CiAKIAkJciA9IG1vdmVfcmVhZGluZ19wb2ludChhLCB4YXR0ci0+b2Zmc2V0KTsKIAkJaWYgKHIgIT0gQVJDSElWRV9PSykKQEAgLTgxMSw4ICs4MjEsMTggQEAKIAkJciA9IGNoZWNrc3VtX2ZpbmFsKGEsCiAJCSAgICB4YXR0ci0+YV9zdW0udmFsLCB4YXR0ci0+YV9zdW0ubGVuLAogCQkgICAgeGF0dHItPmVfc3VtLnZhbCwgeGF0dHItPmVfc3VtLmxlbik7Ci0JCWlmIChyICE9IEFSQ0hJVkVfT0spCisJCWlmIChyICE9IEFSQ0hJVkVfT0spIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCYoYS0+YXJjaGl2ZSksIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCSAgICAiWGF0dHIgY2hlY2tzdW0gZXJyb3IiKTsKKwkJCXIgPSBBUkNISVZFX1dBUk47CiAJCQlicmVhazsKKwkJfQorCQlpZiAoeGF0dHItPm5hbWUucyA9PSBOVUxMKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgIlhhdHRyIG5hbWUgZXJyb3IiKTsKKwkJCXIgPSBBUkNISVZFX1dBUk47CisJCQlicmVhazsKKwkJfQogCQlhcmNoaXZlX2VudHJ5X3hhdHRyX2FkZF9lbnRyeShlbnRyeSwKIAkJICAgIHhhdHRyLT5uYW1lLnMsIGQsIG91dGJ5dGVzKTsKIAkJeGF0dHIgPSB4YXR0ci0+bmV4dDsKQEAgLTgzOCw3ICs4NTgsNyBAQAogICAgIGNvbnN0IHZvaWQgKipidWZmLCBzaXplX3QgKnNpemUsIGludDY0X3QgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgeGFyICp4YXI7Ci0Jc2l6ZV90IHVzZWQ7CisJc2l6ZV90IHVzZWQgPSAwOwogCWludCByOwogCiAJeGFyID0gKHN0cnVjdCB4YXIgKikoYS0+Zm9ybWF0LT5kYXRhKTsKQEAgLTk2Nyw3ICs5ODcsNyBAQAogCQkJCXJldHVybiAoKGludClzdGVwKTsKIAkJCXhhci0+b2Zmc2V0ICs9IHN0ZXA7CiAJCX0gZWxzZSB7Ci0JCQlpbnQ2NF90IHBvcyA9IF9fYXJjaGl2ZV9yZWFkX3NlZWsoYSwgb2Zmc2V0LCBTRUVLX1NFVCk7CisJCQlpbnQ2NF90IHBvcyA9IF9fYXJjaGl2ZV9yZWFkX3NlZWsoYSwgeGFyLT5oX2Jhc2UgKyBvZmZzZXQsIFNFRUtfU0VUKTsKIAkJCWlmIChwb3MgPT0gQVJDSElWRV9GQUlMRUQpIHsKIAkJCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLAogCQkJCSAgICBBUkNISVZFX0VSUk5PX01JU0MsCkBAIC0xMjIwLDggKzEyNDAsNyBAQAogCQl9CiAJCW1lbWNweShuZXdfcGVuZGluZ19maWxlcywgaGVhcC0+ZmlsZXMsCiAJCSAgICBoZWFwLT5hbGxvY2F0ZWQgKiBzaXplb2YobmV3X3BlbmRpbmdfZmlsZXNbMF0pKTsKLQkJaWYgKGhlYXAtPmZpbGVzICE9IE5VTEwpCi0JCQlmcmVlKGhlYXAtPmZpbGVzKTsKKwkJZnJlZShoZWFwLT5maWxlcyk7CiAJCWhlYXAtPmZpbGVzID0gbmV3X3BlbmRpbmdfZmlsZXM7CiAJCWhlYXAtPmFsbG9jYXRlZCA9IG5ld19zaXplOwogCX0KQEAgLTE3NjcsOCArMTc4Niw4IEBACiAJfQogCWZpbGUtPnBhcmVudCA9IHhhci0+ZmlsZTsKIAlmaWxlLT5tb2RlID0gMDc3NyB8IEFFX0lGUkVHOwotCWZpbGUtPmF0aW1lID0gdGltZShOVUxMKTsKLQlmaWxlLT5tdGltZSA9IHRpbWUoTlVMTCk7CisJZmlsZS0+YXRpbWUgPSAgMDsKKwlmaWxlLT5tdGltZSA9IDA7CiAJeGFyLT5maWxlID0gZmlsZTsKIAl4YXItPnhhdHRyID0gTlVMTDsKIAlmb3IgKGF0dHIgPSBsaXN0LT5maXJzdDsgYXR0ciAhPSBOVUxMOyBhdHRyID0gYXR0ci0+bmV4dCkgewpAQCAtMjU5NCwxNSArMjYxMywxNCBAQAogCXdoaWxlIChsID4gMCkgewogCQlpbnQgbiA9IDA7CiAKLQkJaWYgKGwgPiAwKSB7Ci0JCQlpZiAoYmFzZTY0W2JbMF1dIDwgMCB8fCBiYXNlNjRbYlsxXV0gPCAwKQotCQkJCWJyZWFrOwotCQkJbiA9IGJhc2U2NFsqYisrXSA8PCAxODsKLQkJCW4gfD0gYmFzZTY0WypiKytdIDw8IDEyOwotCQkJKm91dCsrID0gbiA+PiAxNjsKLQkJCWxlbisrOwotCQkJbCAtPSAyOwotCQl9CisJCWlmIChiYXNlNjRbYlswXV0gPCAwIHx8IGJhc2U2NFtiWzFdXSA8IDApCisJCQlicmVhazsKKwkJbiA9IGJhc2U2NFsqYisrXSA8PCAxODsKKwkJbiB8PSBiYXNlNjRbKmIrK10gPDwgMTI7CisJCSpvdXQrKyA9IG4gPj4gMTY7CisJCWxlbisrOworCQlsIC09IDI7CisKIAkJaWYgKGwgPiAwKSB7CiAJCQlpZiAoYmFzZTY0WypiXSA8IDApCiAJCQkJYnJlYWs7CkBAIC0yNzUxLDE1ICsyNzY5LDE1IEBACiAJCXhhci0+ZmlsZS0+dWlkID0gYXRvbDEwKHMsIGxlbik7CiAJCWJyZWFrOwogCWNhc2UgRklMRV9DVElNRToKLQkJeGFyLT5maWxlLT5oYXMgfD0gSEFTX1RJTUU7CisJCXhhci0+ZmlsZS0+aGFzIHw9IEhBU19USU1FIHwgSEFTX0NUSU1FOwogCQl4YXItPmZpbGUtPmN0aW1lID0gcGFyc2VfdGltZShzLCBsZW4pOwogCQlicmVhazsKIAljYXNlIEZJTEVfTVRJTUU6Ci0JCXhhci0+ZmlsZS0+aGFzIHw9IEhBU19USU1FOworCQl4YXItPmZpbGUtPmhhcyB8PSBIQVNfVElNRSB8IEhBU19NVElNRTsKIAkJeGFyLT5maWxlLT5tdGltZSA9IHBhcnNlX3RpbWUocywgbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBGSUxFX0FUSU1FOgotCQl4YXItPmZpbGUtPmhhcyB8PSBIQVNfVElNRTsKKwkJeGFyLT5maWxlLT5oYXMgfD0gSEFTX1RJTUUgfCBIQVNfQVRJTUU7CiAJCXhhci0+ZmlsZS0+YXRpbWUgPSBwYXJzZV90aW1lKHMsIGxlbik7CiAJCWJyZWFrOwogCWNhc2UgRklMRV9EQVRBX0xFTkdUSDoKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfemlwLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3ppcC5jCmluZGV4IDdlOTliMTIuLjRkNzFmOTggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfemlwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF96aXAuYwpAQCAtNTAsNyArNTAsMTMgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfWkxJQl9ICi0jaW5jbHVkZSA8Y21femxpYi5oPgorI2luY2x1ZGUgPGNtM3AvemxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9CWkxJQl9ICisjaW5jbHVkZSA8YnpsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTFpNQV9ICisjaW5jbHVkZSA8bHptYS5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCkBAIC02Myw2ICs2OSw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9yYi5oIgogI2luY2x1ZGUgImFyY2hpdmVfcmVhZF9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV9wcG1kOF9wcml2YXRlLmgiCiAKICNpZm5kZWYgSEFWRV9aTElCX0gKICNpbmNsdWRlICJhcmNoaXZlX2NyYzMyLmgiCkBAIC0xNjUsMTMgKzE3MiwzMCBAQAogCWNoYXIJCQlkZWNvbXByZXNzX2luaXQ7CiAJY2hhcgkJCWVuZF9vZl9lbnRyeTsKIAotI2lmZGVmIEhBVkVfWkxJQl9ICiAJdW5zaWduZWQgY2hhciAJCSp1bmNvbXByZXNzZWRfYnVmZmVyOwogCXNpemVfdCAJCQl1bmNvbXByZXNzZWRfYnVmZmVyX3NpemU7CisKKyNpZmRlZiBIQVZFX1pMSUJfSAogCXpfc3RyZWFtCQlzdHJlYW07CiAJY2hhcgkJCXN0cmVhbV92YWxpZDsKICNlbmRpZgogCisjaWYgSEFWRV9MWk1BX0ggJiYgSEFWRV9MSUJMWk1BCisJbHptYV9zdHJlYW0JCXppcHhfbHptYV9zdHJlYW07CisJY2hhciAgICAgICAgICAgIHppcHhfbHptYV92YWxpZDsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9CWkxJQl9ICisJYnpfc3RyZWFtCQlienN0cmVhbTsKKwljaGFyICAgICAgICAgICAgYnpzdHJlYW1fdmFsaWQ7CisjZW5kaWYKKworCUlCeXRlSW4JCQl6aXB4X3BwbWRfc3RyZWFtOworCXNzaXplX3QJCQl6aXB4X3BwbWRfcmVhZF9jb21wcmVzc2VkOworCUNQcG1kOAkJCXBwbWQ4OworCWNoYXIJCQlwcG1kOF92YWxpZDsKKwljaGFyCQkJcHBtZDhfc3RyZWFtX2ZhaWxlZDsKKwogCXN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252ICpzY29udjsKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqc2NvbnZfZGVmYXVsdDsKIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmdfY29udiAqc2NvbnZfdXRmODsKQEAgLTIyMiw2ICsyNDYsMzMgQEAKIC8qIE1hbnkgc3lzdGVtcyBkZWZpbmUgbWluIG9yIE1JTiwgYnV0IG5vdCBhbGwuICovCiAjZGVmaW5lCXppcG1pbihhLGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCiAKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBQcG1kOF9EZWNvZGVTeW1ib2wgZHVyaW5nIGRlY29tcHJlc3Npb24gb2YgUHBtZDgKKyAqIHN0cmVhbXMgaW5zaWRlIFpJUCBmaWxlcy4gSXQgaGFzIDIgcHVycG9zZXM6IG9uZSBpcyB0byBmZXRjaCB0aGUgbmV4dAorICogY29tcHJlc3NlZCBieXRlIGZyb20gdGhlIHN0cmVhbSwgc2Vjb25kIG9uZSBpcyB0byBpbmNyZWFzZSB0aGUgY291bnRlciBob3cKKyAqIG1hbnkgY29tcHJlc3NlZCBieXRlcyB3ZXJlIHJlYWQuICovCitzdGF0aWMgQnl0ZQorcHBtZF9yZWFkKHZvaWQqIHApIHsKKwkvKiBHZXQgdGhlIGhhbmRsZSB0byBjdXJyZW50IGRlY29tcHJlc3Npb24gY29udGV4dC4gKi8KKwlzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphID0gKChJQnl0ZUluKilwKS0+YTsKKwlzdHJ1Y3QgemlwICp6aXAgPSAoc3RydWN0IHppcCopIGEtPmZvcm1hdC0+ZGF0YTsKKwlzc2l6ZV90IGJ5dGVzX2F2YWlsID0gMDsKKworCS8qIEZldGNoIG5leHQgYnl0ZS4gKi8KKwljb25zdCB1aW50OF90KiBkYXRhID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMSwgJmJ5dGVzX2F2YWlsKTsKKwlpZihieXRlc19hdmFpbCA8IDEpIHsKKwkJemlwLT5wcG1kOF9zdHJlYW1fZmFpbGVkID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCAxKTsKKworCS8qIEluY3JlbWVudCB0aGUgY291bnRlci4gKi8KKwkrK3ppcC0+emlweF9wcG1kX3JlYWRfY29tcHJlc3NlZDsKKworCS8qIFJldHVybiB0aGUgbmV4dCBjb21wcmVzc2VkIGJ5dGUuICovCisJcmV0dXJuIGRhdGFbMF07Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgpAQCAtMzcyLDYgKzQyMyw4IEBACiAJezE3LCAicmVzZXJ2ZWQifSwgLyogUmVzZXJ2ZWQgYnkgUEtXQVJFICovCiAJezE4LCAiaWJtLXRlcnNlLW5ldyJ9LCAvKiBGaWxlIGlzIGNvbXByZXNzZWQgdXNpbmcgSUJNIFRFUlNFIChuZXcpICovCiAJezE5LCAiaWJtLWx6Nzc3In0sLyogSUJNIExaNzcgeiBBcmNoaXRlY3R1cmUgKFBGUykgKi8KKwl7OTUsICJ4eiJ9LCAgICAgICAvKiBYWiBjb21wcmVzc2VkIGRhdGEgKi8KKwl7OTYsICJqcGVnIn0sICAgICAvKiBKUEVHIGNvbXByZXNzZWQgZGF0YSAqLwogCXs5NywgIndhdi1wYWNrIn0sIC8qIFdhdlBhY2sgY29tcHJlc3NlZCBkYXRhICovCiAJezk4LCAicHBtZC0xIn0sICAgLyogUFBNZCB2ZXJzaW9uIEksIFJldiAxICovCiAJezk5LCAiYWVzIn0gICAgICAgLyogV2luWmlwIEFFUyBlbmNyeXB0aW9uICAqLwpAQCAtNDE5LDI3ICs0NzIsNDkgQEAKICAqICB0cmlwbGV0cy4gIGlkIGFuZCBzaXplIGFyZSAyIGJ5dGVzIGVhY2guCiAgKi8KIHN0YXRpYyBpbnQKLXByb2Nlc3NfZXh0cmEoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgY29uc3QgY2hhciAqcCwgc2l6ZV90IGV4dHJhX2xlbmd0aCwgc3RydWN0IHppcF9lbnRyeSogemlwX2VudHJ5KQorcHJvY2Vzc19leHRyYShzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksCisgICAgIGNvbnN0IGNoYXIgKnAsIHNpemVfdCBleHRyYV9sZW5ndGgsIHN0cnVjdCB6aXBfZW50cnkqIHppcF9lbnRyeSkKIHsKIAl1bnNpZ25lZCBvZmZzZXQgPSAwOworCXN0cnVjdCB6aXAgKnppcCA9IChzdHJ1Y3QgemlwICopKGEtPmZvcm1hdC0+ZGF0YSk7CiAKIAlpZiAoZXh0cmFfbGVuZ3RoID09IDApIHsKIAkJcmV0dXJuIEFSQ0hJVkVfT0s7CiAJfQogCiAJaWYgKGV4dHJhX2xlbmd0aCA8IDQpIHsKLQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCSAgICAiVG9vLXNtYWxsIGV4dHJhIGRhdGE6IE5lZWQgYXQgbGVhc3QgNCBieXRlcywgYnV0IG9ubHkgZm91bmQgJWQgYnl0ZXMiLCAoaW50KWV4dHJhX2xlbmd0aCk7Ci0JCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKKwkJc2l6ZV90IGkgPSAwOworCQkvKiBTb21lIFpJUCBmaWxlcyBtYXkgaGF2ZSB0cmFpbGluZyAwIGJ5dGVzLiBMZXQncyBjaGVjayB0aGV5CisJCSAqIGFyZSBhbGwgMCBhbmQgaWdub3JlIHRoZW0gaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IuCisJCSAqCisJCSAqIFRoaXMgaXMgbm90IHRlY2huaWNhbGx5IGNvcnJlY3QsIGJ1dCBzb21lIFpJUCBmaWxlcyBsb29rCisJCSAqIGxpa2UgdGhpcyBhbmQgb3RoZXIgdG9vbHMgc3VwcG9ydCB0aG9zZSBmaWxlcyAtIHNvIGxldCdzCisJCSAqIGFsc28gIHN1cHBvcnQgdGhlbS4KKwkJICovCisJCWZvciAoOyBpIDwgZXh0cmFfbGVuZ3RoOyBpKyspIHsKKwkJCWlmIChwW2ldICE9IDApIHsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJCQkgICAgIlRvby1zbWFsbCBleHRyYSBkYXRhOiAiCisJCQkJICAgICJOZWVkIGF0IGxlYXN0IDQgYnl0ZXMsICIKKwkJCQkgICAgImJ1dCBvbmx5IGZvdW5kICVkIGJ5dGVzIiwKKwkJCQkgICAgKGludClleHRyYV9sZW5ndGgpOworCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKKwkJCX0KKwkJfQorCisJCXJldHVybiBBUkNISVZFX09LOwogCX0KKwogCXdoaWxlIChvZmZzZXQgPD0gZXh0cmFfbGVuZ3RoIC0gNCkgewogCQl1bnNpZ25lZCBzaG9ydCBoZWFkZXJpZCA9IGFyY2hpdmVfbGUxNmRlYyhwICsgb2Zmc2V0KTsKIAkJdW5zaWduZWQgc2hvcnQgZGF0YXNpemUgPSBhcmNoaXZlX2xlMTZkZWMocCArIG9mZnNldCArIDIpOwogCiAJCW9mZnNldCArPSA0OwogCQlpZiAob2Zmc2V0ICsgZGF0YXNpemUgPiBleHRyYV9sZW5ndGgpIHsKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJFeHRyYSBkYXRhIG92ZXJmbG93OiBOZWVkICVkIGJ5dGVzIGJ1dCBvbmx5IGZvdW5kICVkIGJ5dGVzIiwKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsICJFeHRyYSBkYXRhIG92ZXJmbG93OiAiCisJCQkgICAgIk5lZWQgJWQgYnl0ZXMgYnV0IG9ubHkgZm91bmQgJWQgYnl0ZXMiLAogCQkJICAgIChpbnQpZGF0YXNpemUsIChpbnQpKGV4dHJhX2xlbmd0aCAtIG9mZnNldCkpOwogCQkJcmV0dXJuIEFSQ0hJVkVfRkFJTEVEOwogCQl9CkBAIC00NTQsOSArNTI5LDEyIEBACiAJCQlpZiAoemlwX2VudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSA9PSAweGZmZmZmZmZmKSB7CiAJCQkJdWludDY0X3QgdCA9IDA7CiAJCQkJaWYgKGRhdGFzaXplIDwgOAotCQkJCSAgICB8fCAodCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgb2Zmc2V0KSkgPiBJTlQ2NF9NQVgpIHsKLQkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkJCSAgICAiTWFsZm9ybWVkIDY0LWJpdCB1bmNvbXByZXNzZWQgc2l6ZSIpOworCQkJCSAgICB8fCAodCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgb2Zmc2V0KSkgPgorCQkJCSAgICBJTlQ2NF9NQVgpIHsKKwkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCQkgICAgIk1hbGZvcm1lZCA2NC1iaXQgIgorCQkJCQkgICAgInVuY29tcHJlc3NlZCBzaXplIik7CiAJCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKIAkJCQl9CiAJCQkJemlwX2VudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSA9IHQ7CkBAIC00NjYsOSArNTQ0LDEyIEBACiAJCQlpZiAoemlwX2VudHJ5LT5jb21wcmVzc2VkX3NpemUgPT0gMHhmZmZmZmZmZikgewogCQkJCXVpbnQ2NF90IHQgPSAwOwogCQkJCWlmIChkYXRhc2l6ZSA8IDgKLQkJCQkgICAgfHwgKHQgPSBhcmNoaXZlX2xlNjRkZWMocCArIG9mZnNldCkpID4gSU5UNjRfTUFYKSB7Ci0JCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJCQkgICAgIk1hbGZvcm1lZCA2NC1iaXQgY29tcHJlc3NlZCBzaXplIik7CisJCQkJICAgIHx8ICh0ID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyBvZmZzZXQpKSA+CisJCQkJICAgIElOVDY0X01BWCkgeworCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJCSAgICAiTWFsZm9ybWVkIDY0LWJpdCAiCisJCQkJCSAgICAiY29tcHJlc3NlZCBzaXplIik7CiAJCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKIAkJCQl9CiAJCQkJemlwX2VudHJ5LT5jb21wcmVzc2VkX3NpemUgPSB0OwpAQCAtNDc4LDkgKzU1OSwxMiBAQAogCQkJaWYgKHppcF9lbnRyeS0+bG9jYWxfaGVhZGVyX29mZnNldCA9PSAweGZmZmZmZmZmKSB7CiAJCQkJdWludDY0X3QgdCA9IDA7CiAJCQkJaWYgKGRhdGFzaXplIDwgOAotCQkJCSAgICB8fCAodCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgb2Zmc2V0KSkgPiBJTlQ2NF9NQVgpIHsKLQkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkJCSAgICAiTWFsZm9ybWVkIDY0LWJpdCBsb2NhbCBoZWFkZXIgb2Zmc2V0Iik7CisJCQkJICAgIHx8ICh0ID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyBvZmZzZXQpKSA+CisJCQkJICAgIElOVDY0X01BWCkgeworCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJCSAgICAiTWFsZm9ybWVkIDY0LWJpdCAiCisJCQkJCSAgICAibG9jYWwgaGVhZGVyIG9mZnNldCIpOwogCQkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CiAJCQkJfQogCQkJCXppcF9lbnRyeS0+bG9jYWxfaGVhZGVyX29mZnNldCA9IHQ7CkBAIC01MTMsNyArNTk3LDggQEAKIAkJCS8qIEV4dGVuZGVkIHRpbWUgZmllbGQgIlVUIi4gKi8KIAkJCWludCBmbGFnczsKIAkJCWlmIChkYXRhc2l6ZSA9PSAwKSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCiAJCQkJICAgICJJbmNvbXBsZXRlIGV4dGVuZGVkIHRpbWUgZmllbGQiKTsKIAkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CiAJCQl9CkBAIC01OTUsNyArNjgwLDggQEAKIAkJCSAqICBpZiBiaXRtYXAgJiAxLCAyIGJ5dGUgInZlcnNpb24gbWFkZSBieSIKIAkJCSAqICBpZiBiaXRtYXAgJiAyLCAyIGJ5dGUgImludGVybmFsIGZpbGUgYXR0cmlidXRlcyIKIAkJCSAqICBpZiBiaXRtYXAgJiA0LCA0IGJ5dGUgImV4dGVybmFsIGZpbGUgYXR0cmlidXRlcyIKLQkJCSAqICBpZiBiaXRtYXAgJiA4LCAyIGJ5dGUgY29tbWVudCBsZW5ndGggKyBuIGJ5dGUgY29tbWVudAorCQkJICogIGlmIGJpdG1hcCAmIDgsIDIgYnl0ZSBjb21tZW50IGxlbmd0aCArIG4gYnl0ZQorCQkJICogIGNvbW1lbnQKIAkJCSAqLwogCQkJaW50IGJpdG1hcCwgYml0bWFwX2xhc3Q7CiAKQEAgLTY0NiwxMyArNzMyLDE4IEBACiAJCQkJCSAgICA9IGV4dGVybmFsX2F0dHJpYnV0ZXMgPj4gMTY7CiAJCQkJfSBlbHNlIGlmICh6aXBfZW50cnktPnN5c3RlbSA9PSAwKSB7CiAJCQkJCS8vIEludGVycHJldCBNU0RPUyBkaXJlY3RvcnkgYml0Ci0JCQkJCWlmICgweDEwID09IChleHRlcm5hbF9hdHRyaWJ1dGVzICYgMHgxMCkpIHsKLQkJCQkJCXppcF9lbnRyeS0+bW9kZSA9IEFFX0lGRElSIHwgMDc3NTsKKwkJCQkJaWYgKDB4MTAgPT0gKGV4dGVybmFsX2F0dHJpYnV0ZXMgJgorCQkJCQkgICAgMHgxMCkpIHsKKwkJCQkJCXppcF9lbnRyeS0+bW9kZSA9CisJCQkJCQkgICAgQUVfSUZESVIgfCAwNzc1OwogCQkJCQl9IGVsc2UgewotCQkJCQkJemlwX2VudHJ5LT5tb2RlID0gQUVfSUZSRUcgfCAwNjY0OworCQkJCQkJemlwX2VudHJ5LT5tb2RlID0KKwkJCQkJCSAgICBBRV9JRlJFRyB8IDA2NjQ7CiAJCQkJCX0KLQkJCQkJaWYgKDB4MDEgPT0gKGV4dGVybmFsX2F0dHJpYnV0ZXMgJiAweDAxKSkgewotCQkJCQkJLy8gUmVhZC1vbmx5IGJpdDsgc3RyaXAgd3JpdGUgcGVybWlzc2lvbnMKKwkJCQkJaWYgKDB4MDEgPT0gKGV4dGVybmFsX2F0dHJpYnV0ZXMgJgorCQkJCQkgICAgMHgwMSkpIHsKKwkJCQkJCS8qIFJlYWQtb25seSBiaXQ7CisJCQkJCQkgKiBzdHJpcCB3cml0ZSBwZXJtaXNzaW9ucyAqLwogCQkJCQkJemlwX2VudHJ5LT5tb2RlICY9IDA1NTU7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewpAQCAtNjc5LDYgKzc3MCw1OSBAQAogCQkJfQogCQkJYnJlYWs7CiAJCX0KKwkJY2FzZSAweDcwNzU6CisJCXsKKwkJCS8qIEluZm8tWklQIFVuaWNvZGUgUGF0aCBFeHRyYSBGaWVsZC4gKi8KKwkJCWlmIChkYXRhc2l6ZSA8IDUgfHwgZW50cnkgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJCW9mZnNldCArPSA1OworCQkJZGF0YXNpemUgLT0gNTsKKworCQkJLyogVGhlIHBhdGggbmFtZSBpbiB0aGlzIGZpZWxkIGlzIGFsd2F5cyBlbmNvZGVkCisJCQkgKiBpbiBVVEYtOC4gKi8KKwkJCWlmICh6aXAtPnNjb252X3V0ZjggPT0gTlVMTCkgeworCQkJCXppcC0+c2NvbnZfdXRmOCA9CisJCQkJCWFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fZnJvbV9jaGFyc2V0KAorCQkJCQkmYS0+YXJjaGl2ZSwgIlVURi04IiwgMSk7CisJCQkJLyogSWYgdGhlIGNvbnZlcnRlciBmcm9tIFVURi04IGlzIG5vdAorCQkJCSAqIGF2YWlsYWJsZSwgdGhlbiB0aGUgcGF0aCBuYW1lIGZyb20gdGhlIG1haW4KKwkJCQkgKiBmaWVsZCB3aWxsIG1vcmUgbGlrZWx5IGJlIGNvcnJlY3QuICovCisJCQkJaWYgKHppcC0+c2NvbnZfdXRmOCA9PSBOVUxMKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTWFrZSBzdXJlIHRoZSBDUkMzMiBvZiB0aGUgZmlsZW5hbWUgbWF0Y2hlcy4gKi8KKwkJCWlmICghemlwLT5pZ25vcmVfY3JjMzIpIHsKKwkJCQljb25zdCBjaGFyICpjcCA9IGFyY2hpdmVfZW50cnlfcGF0aG5hbWUoZW50cnkpOworCQkJCWlmIChjcCkgeworCQkJCQl1bnNpZ25lZCBsb25nIGZpbGVfY3JjID0KKwkJCQkJICAgIHppcC0+Y3JjMzJmdW5jKDAsIGNwLCBzdHJsZW4oY3ApKTsKKwkJCQkJdW5zaWduZWQgbG9uZyB1dGZfY3JjID0KKwkJCQkJICAgIGFyY2hpdmVfbGUzMmRlYyhwICsgb2Zmc2V0IC0gNCk7CisJCQkJCWlmIChmaWxlX2NyYyAhPSB1dGZfY3JjKSB7CisjaWZkZWYgREVCVUcKKwkJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJICAgICJDUkMgZmlsZW5hbWUgbWlzbWF0Y2g7ICIKKwkJCQkJCSAgICAiQ0RFIGlzICVseCwgYnV0IFVURjggIgorCQkJCQkJICAgICJpcyBvdXRkYXRlZCB3aXRoICVseFxuIiwKKwkJCQkJCSAgICBmaWxlX2NyYywgdXRmX2NyYyk7CisjZW5kaWYKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lX2woZW50cnksCisJCQkgICAgcCArIG9mZnNldCwgZGF0YXNpemUsIHppcC0+c2NvbnZfdXRmOCkgIT0gMCkgeworCQkJCS8qIElnbm9yZSB0aGUgZXJyb3IsIGFuZCBmYWxsYmFjayB0byB0aGUgcGF0aAorCQkJCSAqIG5hbWUgZnJvbSB0aGUgbWFpbiBmaWVsZC4gKi8KKyNpZmRlZiBERUJVRworCQkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJlYWQgdGhlIFpJUCAiCisJCQkJICAgICIweDcwNzUgZXh0cmEgZmllbGQgcGF0aC5cbiIpOworI2VuZGlmCisJCQl9CisJCQlicmVhazsKKwkJfQogCQljYXNlIDB4Nzg1NToKIAkJCS8qIEluZm8tWklQIFVuaXggRXh0cmEgRmllbGQgKHR5cGUgMikgIlV4Ii4gKi8KICNpZmRlZiBERUJVRwpAQCAtNzEzLDcgKzg1Nyw4IEBACiAJCQkJfQogCQkJCWlmIChkYXRhc2l6ZSA+PSAoMiArIHVpZHNpemUgKyAzKSkgewogCQkJCQkvKiBnZXQgYSBnaWQgc2l6ZS4gKi8KLQkJCQkJZ2lkc2l6ZSA9IDB4ZmYgJiAoaW50KXBbb2Zmc2V0KzIrdWlkc2l6ZV07CisJCQkJCWdpZHNpemUgPSAweGZmICYKKwkJCQkJICAgIChpbnQpcFtvZmZzZXQrMit1aWRzaXplXTsKIAkJCQkJaWYgKGdpZHNpemUgPT0gMikKIAkJCQkJCXppcF9lbnRyeS0+Z2lkID0KIAkJCQkJCSAgICBhcmNoaXZlX2xlMTZkZWMoCkBAIC03MzAsNyArODc1LDggQEAKIAkJY2FzZSAweDk5MDE6CiAJCQkvKiBXaW5aaXAgQUVTIGV4dHJhIGRhdGEgZmllbGQuICovCiAJCQlpZiAoZGF0YXNpemUgPCA2KSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCiAJCQkJICAgICJJbmNvbXBsZXRlIEFFUyBmaWVsZCIpOwogCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKIAkJCX0KQEAgLTc1MCwxMiArODk2LDYgQEAKIAkJfQogCQlvZmZzZXQgKz0gZGF0YXNpemU7CiAJfQotCWlmIChvZmZzZXQgIT0gZXh0cmFfbGVuZ3RoKSB7Ci0JCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkgICAgIk1hbGZvcm1lZCBleHRyYSBkYXRhOiBDb25zdW1lZCAlZCBieXRlcyBvZiAlZCBieXRlcyIsCi0JCSAgICAoaW50KW9mZnNldCwgKGludClleHRyYV9sZW5ndGgpOwotCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7Ci0JfQogCXJldHVybiBBUkNISVZFX09LOwogfQogCkBAIC04NzUsNyArMTAxNSw4IEBACiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJfQogCi0JaWYgKEFSQ0hJVkVfT0sgIT0gcHJvY2Vzc19leHRyYShhLCBoLCBleHRyYV9sZW5ndGgsIHppcF9lbnRyeSkpIHsKKwlpZiAoQVJDSElWRV9PSyAhPSBwcm9jZXNzX2V4dHJhKGEsIGVudHJ5LCBoLCBleHRyYV9sZW5ndGgsCisJICAgIHppcF9lbnRyeSkpIHsKIAkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CiAJfQogCV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwgZXh0cmFfbGVuZ3RoKTsKQEAgLTg5Miw4ICsxMDMzLDggQEAKIAkJemlwX2VudHJ5LT5tb2RlIHw9IDA2NjQ7CiAJfQogCi0JLyogV2luZG93cyBhcmNoaXZlcnMgc29tZXRpbWVzIHVzZSBiYWNrc2xhc2ggYXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IuCi0JICAgTm9ybWFsaXplIHRvIHNsYXNoLiAqLworCS8qIFdpbmRvd3MgYXJjaGl2ZXJzIHNvbWV0aW1lcyB1c2UgYmFja3NsYXNoIGFzIHRoZSBkaXJlY3RvcnkKKwkgKiBzZXBhcmF0b3IuIE5vcm1hbGl6ZSB0byBzbGFzaC4gKi8KIAlpZiAoemlwX2VudHJ5LT5zeXN0ZW0gPT0gMCAmJgogCSAgICAod3AgPSBhcmNoaXZlX2VudHJ5X3BhdGhuYW1lX3coZW50cnkpKSAhPSBOVUxMKSB7CiAJCWlmICh3Y3NjaHIod3AsIEwnLycpID09IE5VTEwgJiYgd2NzY2hyKHdwLCBMJ1xcJykgIT0gTlVMTCkgewpAQCAtOTEyLDcgKzEwNTMsNyBAQAogCiAJLyogTWFrZSBzdXJlIHRoYXQgZW50cmllcyB3aXRoIGEgdHJhaWxpbmcgJy8nIGFyZSBtYXJrZWQgYXMgZGlyZWN0b3JpZXMKIAkgKiBldmVuIGlmIHRoZSBFeHRlcm5hbCBGaWxlIEF0dHJpYnV0ZXMgY29udGFpbnMgYm9ndXMgdmFsdWVzLiAgSWYgdGhpcwotCSAqIGlzIG5vdCBhIGRpcmVjdG9yeSBhbmQgdGhlcmUgaXMgbm8gdHlwZSwgYXNzdW1lIHJlZ3VsYXJmaWxlLiAqLworCSAqIGlzIG5vdCBhIGRpcmVjdG9yeSBhbmQgdGhlcmUgaXMgbm8gdHlwZSwgYXNzdW1lIGEgcmVndWxhciBmaWxlLiAqLwogCWlmICgoemlwX2VudHJ5LT5tb2RlICYgQUVfSUZNVCkgIT0gQUVfSUZESVIpIHsKIAkJaW50IGhhc19zbGFzaDsKIApAQCAtOTYzLDcgKzExMDQsNyBAQAogCX0KIAogCWlmICh6aXBfZW50cnktPmZsYWdzICYgTEFfRlJPTV9DRU5UUkFMX0RJUkVDVE9SWSkgewotCQkvKiBJZiB0aGlzIGNhbWUgZnJvbSB0aGUgY2VudHJhbCBkaXIsIGl0J3Mgc2l6ZSBpbmZvCisJCS8qIElmIHRoaXMgY2FtZSBmcm9tIHRoZSBjZW50cmFsIGRpciwgaXRzIHNpemUgaW5mbwogCQkgKiBpcyBkZWZpbml0aXZlLCBzbyBpZ25vcmUgdGhlIGxlbmd0aC1hdC1lbmQgZmxhZy4gKi8KIAkJemlwX2VudHJ5LT56aXBfZmxhZ3MgJj0gflpJUF9MRU5HVEhfQVRfRU5EOwogCQkvKiBJZiBsb2NhbCBoZWFkZXIgaXMgbWlzc2luZyBhIHZhbHVlLCB1c2UgdGhlIG9uZSBmcm9tCkBAIC0xMjAyLDcgKzEzNDMsOCBAQAogCQkJCXppcC0+ZW50cnktPmNyYzMyID0gYXJjaGl2ZV9sZTMyZGVjKHAgKyA0KTsKIAkJCQljb21wcmVzc2VkID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyA4KTsKIAkJCQl1bmNvbXByZXNzZWQgPSBhcmNoaXZlX2xlNjRkZWMocCArIDE2KTsKLQkJCQlpZiAoY29tcHJlc3NlZCA+IElOVDY0X01BWCB8fCB1bmNvbXByZXNzZWQgPiBJTlQ2NF9NQVgpIHsKKwkJCQlpZiAoY29tcHJlc3NlZCA+IElOVDY0X01BWCB8fCB1bmNvbXByZXNzZWQgPgorCQkJCSAgICBJTlQ2NF9NQVgpIHsKIAkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCiAJCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAogCQkJCQkgICAgIk92ZXJmbG93IG9mIDY0LWJpdCBmaWxlIHNpemVzIik7CkBAIC0xMjk2LDYgKzE0MzgsNzQ1IEBACiAJcmV0dXJuIChBUkNISVZFX09LKTsKIH0KIAorc3RhdGljIGludAorY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQoreworCWlmICh6aXAtPmVuZF9vZl9lbnRyeSAmJiAoemlwLT5lbnRyeS0+emlwX2ZsYWdzICYgWklQX0xFTkdUSF9BVF9FTkQpKSB7CisJCWNvbnN0IGNoYXIgKnA7CisKKwkJaWYgKE5VTEwgPT0gKHAgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAyNCwgTlVMTCkpKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJUcnVuY2F0ZWQgWklQIGVuZC1vZi1maWxlIHJlY29yZCIpOworCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJfQorCQkvKiBDb25zdW1lIHRoZSBvcHRpb25hbCBQS1wwMDdcMDEwIG1hcmtlci4gKi8KKwkJaWYgKHBbMF0gPT0gJ1AnICYmIHBbMV0gPT0gJ0snICYmCisJCSAgICBwWzJdID09ICdcMDA3JyAmJiBwWzNdID09ICdcMDEwJykgeworCQkJcCArPSA0OworCQkJemlwLT51bmNvbnN1bWVkID0gNDsKKwkJfQorCQlpZiAoemlwLT5lbnRyeS0+ZmxhZ3MgJiBMQV9VU0VEX1pJUDY0KSB7CisJCQl1aW50NjRfdCBjb21wcmVzc2VkLCB1bmNvbXByZXNzZWQ7CisJCQl6aXAtPmVudHJ5LT5jcmMzMiA9IGFyY2hpdmVfbGUzMmRlYyhwKTsKKwkJCWNvbXByZXNzZWQgPSBhcmNoaXZlX2xlNjRkZWMocCArIDQpOworCQkJdW5jb21wcmVzc2VkID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyAxMik7CisJCQlpZiAoY29tcHJlc3NlZCA+IElOVDY0X01BWCB8fAorCQkJICAgIHVuY29tcHJlc3NlZCA+IElOVDY0X01BWCkgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJCSAgICAiT3ZlcmZsb3cgb2YgNjQtYml0IGZpbGUgc2l6ZXMiKTsKKwkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CisJCQl9CisJCQl6aXAtPmVudHJ5LT5jb21wcmVzc2VkX3NpemUgPSBjb21wcmVzc2VkOworCQkJemlwLT5lbnRyeS0+dW5jb21wcmVzc2VkX3NpemUgPSB1bmNvbXByZXNzZWQ7CisJCQl6aXAtPnVuY29uc3VtZWQgKz0gMjA7CisJCX0gZWxzZSB7CisJCQl6aXAtPmVudHJ5LT5jcmMzMiA9IGFyY2hpdmVfbGUzMmRlYyhwKTsKKwkJCXppcC0+ZW50cnktPmNvbXByZXNzZWRfc2l6ZSA9IGFyY2hpdmVfbGUzMmRlYyhwICsgNCk7CisJCQl6aXAtPmVudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSA9IGFyY2hpdmVfbGUzMmRlYyhwICsgOCk7CisJCQl6aXAtPnVuY29uc3VtZWQgKz0gMTI7CisJCX0KKwl9CisKKyAgICByZXR1cm4gKEFSQ0hJVkVfT0spOworfQorCisjaWYgSEFWRV9MWk1BX0ggJiYgSEFWRV9MSUJMWk1BCitzdGF0aWMgaW50Cit6aXB4X3h6X2luaXQoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQoreworCWx6bWFfcmV0IHI7CisKKwlpZih6aXAtPnppcHhfbHptYV92YWxpZCkgeworCQlsem1hX2VuZCgmemlwLT56aXB4X2x6bWFfc3RyZWFtKTsKKwkJemlwLT56aXB4X2x6bWFfdmFsaWQgPSAwOworCX0KKworCW1lbXNldCgmemlwLT56aXB4X2x6bWFfc3RyZWFtLCAwLCBzaXplb2YoemlwLT56aXB4X2x6bWFfc3RyZWFtKSk7CisJciA9IGx6bWFfc3RyZWFtX2RlY29kZXIoJnppcC0+emlweF9sem1hX3N0cmVhbSwgVUlOVDY0X01BWCwgMCk7CisJaWYgKHIgIT0gTFpNQV9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCSAgICAieHogaW5pdGlhbGl6YXRpb24gZmFpbGVkKCVkKSIsCisJCSAgICByKTsKKworCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwl9CisKKwl6aXAtPnppcHhfbHptYV92YWxpZCA9IDE7CisKKwlmcmVlKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcik7CisKKwl6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZSA9IDI1NiAqIDEwMjQ7CisJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID0KKwkgICAgKHVpbnQ4X3QqKSBtYWxsb2MoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUpOworCWlmICh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIk5vIG1lbW9yeSBmb3IgeHogZGVjb21wcmVzc2lvbiIpOworCQkgICAgcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisKKwl6aXAtPmRlY29tcHJlc3NfaW5pdCA9IDE7CisJcmV0dXJuIChBUkNISVZFX09LKTsKK30KKworc3RhdGljIGludAoremlweF9sem1hX2Fsb25lX2luaXQoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQoreworCWx6bWFfcmV0IHI7CisJY29uc3QgdWludDhfdCogcDsKKworI3ByYWdtYSBwYWNrKHB1c2gpCisjcHJhZ21hIHBhY2soMSkKKwlzdHJ1Y3QgX2Fsb25lX2hlYWRlciB7CisJICAgIHVpbnQ4X3QgYnl0ZXNbNV07CisJICAgIHVpbnQ2NF90IHVuY29tcHJlc3NlZF9zaXplOworCX0gYWxvbmVfaGVhZGVyOworI3ByYWdtYSBwYWNrKHBvcCkKKworCWlmKHppcC0+emlweF9sem1hX3ZhbGlkKSB7CisJCWx6bWFfZW5kKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0pOworCQl6aXAtPnppcHhfbHptYV92YWxpZCA9IDA7CisJfQorCisJLyogVG8gdW5wYWNrIFpJUFgncyAiTFpNQSIgKGlkIDE0KSBzdHJlYW0gd2UgY2FuIHVzZSBzdGFuZGFyZCBsaWJsem1hCisJICogdGhhdCBpcyBhIHBhcnQgb2YgWFogVXRpbHMuIFRoZSBzdHJlYW0gZm9ybWF0IHN0b3JlZCBpbnNpZGUgWklQWAorCSAqIGZpbGUgaXMgYSBtb2RpZmllZCAibHptYSBhbG9uZSIgZmlsZSBmb3JtYXQsIHRoYXQgd2FzIHVzZWQgYnkgdGhlCisJICogYGx6bWFgIHV0aWxpdHkgd2hpY2ggd2FzIGxhdGVyIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGB4emAgdXRpbGl0eS4gCSAqIFNpbmNlIHRob3NlIGZvcm1hdHMgYXJlIG5lYXJseSB0aGUgc2FtZSwgd2UgY2FuIHVzZSBhIHN0YW5kYXJkCisJICogImx6bWEgYWxvbmUiIGRlY29kZXIgZnJvbSBYWiBVdGlscy4gKi8KKworCW1lbXNldCgmemlwLT56aXB4X2x6bWFfc3RyZWFtLCAwLCBzaXplb2YoemlwLT56aXB4X2x6bWFfc3RyZWFtKSk7CisJciA9IGx6bWFfYWxvbmVfZGVjb2RlcigmemlwLT56aXB4X2x6bWFfc3RyZWFtLCBVSU5UNjRfTUFYKTsKKwlpZiAociAhPSBMWk1BX09LKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCYoYS0+YXJjaGl2ZSksIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJICAgICJsem1hIGluaXRpYWxpemF0aW9uIGZhaWxlZCglZCkiLCByKTsKKworCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwl9CisKKwkvKiBGbGFnIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgd2Ugd2FudCBvdXIgbHptYS1yZWxhdGVkIHN0cnVjdHVyZXMKKwkgKiB0byBiZSBmcmVlZCBsYXRlci4gKi8KKwl6aXAtPnppcHhfbHptYV92YWxpZCA9IDE7CisKKwkvKiBUaGUgImx6bWEgYWxvbmUiIGZpbGUgZm9ybWF0IGFuZCB0aGUgc3RyZWFtIGZvcm1hdCBpbnNpZGUgWklQeCBhcmUKKwkgKiBhbG1vc3QgdGhlIHNhbWUuIEhlcmUncyBhbiBleGFtcGxlIG9mIGEgc3RydWN0dXJlIG9mICJsem1hIGFsb25lIgorCSAqIGZvcm1hdDoKKwkgKgorCSAqICQgY2F0IC9iaW4vbHMgfCBsem1hIHwgeHhkIHwgaGVhZCAtbiAxCisJICogMDAwMDAwMDA6IDVkMDAgMDA4MCAwMGZmIGZmZmYgZmZmZiBmZmZmIGZmMDAgMjgxNAorCSAqCisJICogICAgNSBieXRlcyAgICAgICAgOCBieXRlcyAgICAgICAgbiBieXRlcworCSAqIDxsem1hX3BhcmFtcz48dW5jb21wcmVzc2VkX3NpemU+PGRhdGEuLi4+CisJICoKKwkgKiBsem1hX3BhcmFtcyBpcyBhIDUtYnl0ZSBibG9iIHRoYXQgaGFzIHRvIGJlIGRlY29kZWQgdG8gZXh0cmFjdAorCSAqIHBhcmFtZXRlcnMgb2YgdGhpcyBMWk1BIHN0cmVhbS4gVGhlIHVuY29tcHJlc3NlZF9zaXplIGZpZWxkIGlzIGFuCisJICogdWludDY0X3QgdmFsdWUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2l6ZSBvZiB0aGUKKwkgKiB1bmNvbXByZXNzZWQgZmlsZSwgb3IgVUlOVDY0X01BWCBpZiB0aGlzIHZhbHVlIGlzIHVua25vd24uCisJICogVGhlIDxkYXRhLi4uPiBwYXJ0IGlzIHRoZSBhY3R1YWwgbHptYS1jb21wcmVzc2VkIGRhdGEgc3RyZWFtLgorCSAqCisJICogTm93IGhlcmUncyB0aGUgc3RydWN0dXJlIG9mIHRoZSBzdHJlYW0gaW5zaWRlIHRoZSBaSVBYIGZpbGU6CisJICoKKwkgKiAkIGNhdCBzdHJlYW1faW5zaWRlX3ppcHggfCB4eGQgfCBoZWFkIC1uIDEKKwkgKiAwMDAwMDAwMDogMDkxNCAwNTAwIDVkMDAgODAwMCAwMDAwIDI4MTQgLi4uLiAuLi4uCisJICoKKwkgKiAgMmJ5dGUgICAyYnl0ZSAgICA1IGJ5dGVzICAgICBuIGJ5dGVzCisJICogPG1hZ2ljMT48bWFnaWMyPjxsem1hX3BhcmFtcz48ZGF0YS4uLj4KKwkgKgorCSAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgWklQWCBmaWxlIGNvbnRhaW5zIGFuIGFkZGl0aW9uYWwgbWFnaWMxIGFuZAorCSAqIG1hZ2ljMiBoZWFkZXJzLCB0aGUgbHptYV9wYXJhbXMgZmllbGQgY29udGFpbnMgdGhlIHNhbWUgcGFyYW1ldGVyCisJICogc2V0IGFzIGluIHRoZSAibHptYSBhbG9uZSIgZm9ybWF0LCBhbmQgdGhlIDxkYXRhLi4uPiBmaWVsZCBpcyB0aGUKKwkgKiBzYW1lIGFzIGluIHRoZSAibHptYSBhbG9uZSIgZm9ybWF0IGFzIHdlbGwuIE5vdGUgdGhhdCBhbHNvIHRoZSB6aXB4CisJICogZm9ybWF0IGlzIG1pc3NpbmcgdGhlIHVuY29tcHJlc3NlZF9zaXplIGZpZWxkLgorCSAqCisJICogU28sIGluIG9yZGVyIHRvIHVzZSB0aGUgImx6bWEgYWxvbmUiIGRlY29kZXIgZm9yIHRoZSB6aXB4IGx6bWEKKwkgKiBzdHJlYW0sIHdlIHNpbXBseSBuZWVkIHRvIHNodWZmbGUgYXJvdW5kIHNvbWUgZmllbGRzLCBwcmVwYXJlIGEgbmV3CisJICogbHptYSBhbG9uZSBoZWFkZXIsIGZlZWQgaXQgaW50byBsem1hIGFsb25lIGRlY29kZXIgc28gaXQgd2lsbAorCSAqIGluaXRpYWxpemUgaXRzZWxmIHByb3Blcmx5LCBhbmQgdGhlbiB3ZSBjYW4gc3RhcnQgZmVlZGluZyBub3JtYWwKKwkgKiB6aXB4IGx6bWEgc3RyZWFtIGludG8gdGhlIGRlY29kZXIuCisJICovCisKKwkvKiBSZWFkIG1hZ2ljMSxtYWdpYzIsbHptYV9wYXJhbXMgZnJvbSB0aGUgWklQWCBzdHJlYW0uICovCisJaWYoKHAgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCA5LCBOVUxMKSkgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgbHptYSBkYXRhIik7CisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJaWYocFsyXSAhPSAweDA1IHx8IHBbM10gIT0gMHgwMCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJJbnZhbGlkIGx6bWEgZGF0YSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCS8qIFByZXBhcmUgYW4gbHptYSBhbG9uZSBoZWFkZXI6IGNvcHkgdGhlIGx6bWFfcGFyYW1zIGJsb2IgaW50bworCSAqIGEgcHJvcGVyIHBsYWNlIGludG8gdGhlIGx6bWEgYWxvbmUgaGVhZGVyLiAqLworCW1lbWNweSgmYWxvbmVfaGVhZGVyLmJ5dGVzWzBdLCBwICsgNCwgNSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSAndW5jb21wcmVzc2VkIHNpemUnIGZpZWxkIHRvIHVua25vd247IHdlJ2xsIG1hbnVhbGx5CisJICogbW9uaXRvciBob3cgbWFueSBieXRlcyB0aGVyZSBhcmUgc3RpbGwgdG8gYmUgdW5jb21wcmVzc2VkLiAqLworCWFsb25lX2hlYWRlci51bmNvbXByZXNzZWRfc2l6ZSA9IFVJTlQ2NF9NQVg7CisKKwlpZighemlwLT51bmNvbXByZXNzZWRfYnVmZmVyKSB7CisJCXppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplID0gMjU2ICogMTAyNDsKKwkJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID0KKwkJCSh1aW50OF90KikgbWFsbG9jKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplKTsKKworCQlpZiAoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID09IE5VTEwpIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCisJCQkgICAgIk5vIG1lbW9yeSBmb3IgbHptYSBkZWNvbXByZXNzaW9uIik7CisJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQl9CisJfQorCisJemlwLT56aXB4X2x6bWFfc3RyZWFtLm5leHRfaW4gPSAodm9pZCopICZhbG9uZV9oZWFkZXI7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLmF2YWlsX2luID0gc2l6ZW9mKGFsb25lX2hlYWRlcik7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX2luID0gMDsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0ubmV4dF9vdXQgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLmF2YWlsX291dCA9IHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcl9zaXplOworCXppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9vdXQgPSAwOworCisJLyogRmVlZCBvbmx5IHRoZSBoZWFkZXIgaW50byB0aGUgbHptYSBhbG9uZSBkZWNvZGVyLiBUaGlzIHdpbGwKKwkgKiBlZmZlY3RpdmVseSBpbml0aWFsaXplIHRoZSBkZWNvZGVyLCBhbmQgd2lsbCBub3QgcHJvZHVjZSBhbnkKKwkgKiBvdXRwdXQgYnl0ZXMgeWV0LiAqLworCXIgPSBsem1hX2NvZGUoJnppcC0+emlweF9sem1hX3N0cmVhbSwgTFpNQV9SVU4pOworCWlmIChyICE9IExaTUFfT0spIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fUFJPR1JBTU1FUiwKKwkJICAgICJsem1hIHN0cmVhbSBpbml0aWFsaXphdGlvbiBlcnJvciIpOworCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBXZSd2ZSBhbHJlYWR5IGNvbnN1bWVkIHNvbWUgYnl0ZXMsIHNvIHRha2UgdGhpcyBpbnRvIGFjY291bnQuICovCisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCA5KTsKKwl6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyAtPSA5OworCXppcC0+ZW50cnlfY29tcHJlc3NlZF9ieXRlc19yZWFkICs9IDk7CisKKwl6aXAtPmRlY29tcHJlc3NfaW5pdCA9IDE7CisJcmV0dXJuIChBUkNISVZFX09LKTsKK30KKworc3RhdGljIGludAoremlwX3JlYWRfZGF0YV96aXB4X3h6KHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IHZvaWQgKipidWZmLAorCXNpemVfdCAqc2l6ZSwgaW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCB6aXAqIHppcCA9IChzdHJ1Y3QgemlwICopKGEtPmZvcm1hdC0+ZGF0YSk7CisJaW50IHJldDsKKwlsem1hX3JldCBsel9yZXQ7CisJY29uc3Qgdm9pZCogY29tcHJlc3NlZF9idWY7CisJc3NpemVfdCBieXRlc19hdmFpbCwgaW5fYnl0ZXMsIHRvX2NvbnN1bWUgPSAwOworCisJKHZvaWQpIG9mZnNldDsgLyogVU5VU0VEICovCisKKwkvKiBJbml0aWFsaXplIGRlY29tcHJlc3NvciBpZiBub3QgeWV0IGluaXRpYWxpemVkLiAqLworCWlmICghemlwLT5kZWNvbXByZXNzX2luaXQpIHsKKwkJcmV0ID0gemlweF94el9pbml0KGEsIHppcCk7CisJCWlmIChyZXQgIT0gQVJDSElWRV9PSykKKwkJCXJldHVybiAocmV0KTsKKwl9CisKKwljb21wcmVzc2VkX2J1ZiA9IF9fYXJjaGl2ZV9yZWFkX2FoZWFkKGEsIDEsICZieXRlc19hdmFpbCk7CisJaWYgKGJ5dGVzX2F2YWlsIDwgMCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgeHogZmlsZSBib2R5Iik7CisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJaW5fYnl0ZXMgPSB6aXBtaW4oemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcsIGJ5dGVzX2F2YWlsKTsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0ubmV4dF9pbiA9IGNvbXByZXNzZWRfYnVmOworCXppcC0+emlweF9sem1hX3N0cmVhbS5hdmFpbF9pbiA9IGluX2J5dGVzOworCXppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9pbiA9IDA7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLm5leHRfb3V0ID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCXppcC0+emlweF9sem1hX3N0cmVhbS5hdmFpbF9vdXQgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZTsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0ID0gMDsKKworCS8qIFBlcmZvcm0gdGhlIGRlY29tcHJlc3Npb24uICovCisJbHpfcmV0ID0gbHptYV9jb2RlKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0sIExaTUFfUlVOKTsKKwlzd2l0Y2gobHpfcmV0KSB7CisJCWNhc2UgTFpNQV9EQVRBX0VSUk9SOgorCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCSAgICAieHogZGF0YSBlcnJvciAoZXJyb3IgJWQpIiwgKGludCkgbHpfcmV0KTsKKwkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisKKwkJY2FzZSBMWk1BX05PX0NIRUNLOgorCQljYXNlIExaTUFfT0s6CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCSAgICAieHogdW5rbm93biBlcnJvciAlZCIsIChpbnQpIGx6X3JldCk7CisJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCisJCWNhc2UgTFpNQV9TVFJFQU1fRU5EOgorCQkJbHptYV9lbmQoJnppcC0+emlweF9sem1hX3N0cmVhbSk7CisJCQl6aXAtPnppcHhfbHptYV92YWxpZCA9IDA7CisKKwkJCWlmKChpbnQ2NF90KSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfaW4gIT0KKwkJCSAgICB6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZykKKwkJCXsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJCSAgICAieHogcHJlbWF0dXJlIGVuZCBvZiBzdHJlYW0iKTsKKwkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQkJfQorCisJCQl6aXAtPmVuZF9vZl9lbnRyeSA9IDE7CisJCQlicmVhazsKKwl9CisKKwl0b19jb25zdW1lID0gemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX2luOworCisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCB0b19jb25zdW1lKTsKKwl6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyAtPSB0b19jb25zdW1lOworCXppcC0+ZW50cnlfY29tcHJlc3NlZF9ieXRlc19yZWFkICs9IHRvX2NvbnN1bWU7CisJemlwLT5lbnRyeV91bmNvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0OworCisJKnNpemUgPSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0OworCSpidWZmID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCisJcmV0ID0gY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoYSwgemlwKTsKKwlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiAocmV0KTsKKworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKK3N0YXRpYyBpbnQKK3ppcF9yZWFkX2RhdGFfemlweF9sem1hX2Fsb25lKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IHZvaWQgKipidWZmLAorICAgIHNpemVfdCAqc2l6ZSwgaW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCB6aXAqIHppcCA9IChzdHJ1Y3QgemlwICopKGEtPmZvcm1hdC0+ZGF0YSk7CisJaW50IHJldDsKKwlsem1hX3JldCBsel9yZXQ7CisJY29uc3Qgdm9pZCogY29tcHJlc3NlZF9idWY7CisJc3NpemVfdCBieXRlc19hdmFpbCwgaW5fYnl0ZXMsIHRvX2NvbnN1bWU7CisKKwkodm9pZCkgb2Zmc2V0OyAvKiBVTlVTRUQgKi8KKworCS8qIEluaXRpYWxpemUgZGVjb21wcmVzc29yIGlmIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuICovCisJaWYgKCF6aXAtPmRlY29tcHJlc3NfaW5pdCkgeworCQlyZXQgPSB6aXB4X2x6bWFfYWxvbmVfaW5pdChhLCB6aXApOworCQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCisJCQlyZXR1cm4gKHJldCk7CisJfQorCisJLyogRmV0Y2ggbW9yZSBjb21wcmVzc2VkIGRhdGEuIFRoZSBzYW1lIG5vdGUgYXMgaW4gZGVmbGF0ZSBoYW5kbGVyCisJICogYXBwbGllcyBoZXJlIGFzIHdlbGw6CisJICoKKwkgKiBOb3RlOiAnMScgaGVyZSBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gUmVjYWxsIHRoYXQgdGhlCisJICogZGVjb21wcmVzc2lvbiBsYXllciByZXR1cm5zIGEgY291bnQgb2YgYXZhaWxhYmxlIGJ5dGVzOyBhc2tpbmcgZm9yCisJICogbW9yZSB0aGFuIHRoYXQgZm9yY2VzIHRoZSBkZWNvbXByZXNzb3IgdG8gY29tYmluZSByZWFkcyBieSBjb3B5aW5nCisJICogZGF0YS4KKwkgKi8KKwljb21wcmVzc2VkX2J1ZiA9IF9fYXJjaGl2ZV9yZWFkX2FoZWFkKGEsIDEsICZieXRlc19hdmFpbCk7CisJaWYgKGJ5dGVzX2F2YWlsIDwgMCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgbHptYSBmaWxlIGJvZHkiKTsKKwkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwl9CisKKwkvKiBTZXQgZGVjb21wcmVzc29yIHBhcmFtZXRlcnMuICovCisJaW5fYnl0ZXMgPSB6aXBtaW4oemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcsIGJ5dGVzX2F2YWlsKTsKKworCXppcC0+emlweF9sem1hX3N0cmVhbS5uZXh0X2luID0gY29tcHJlc3NlZF9idWY7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLmF2YWlsX2luID0gaW5fYnl0ZXM7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLnRvdGFsX2luID0gMDsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0ubmV4dF9vdXQgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisJemlwLT56aXB4X2x6bWFfc3RyZWFtLmF2YWlsX291dCA9CisJCS8qIFRoZXNlIGx6bWFfYWxvbmUgc3RyZWFtcyBsYWNrIGVuZCBvZiBzdHJlYW0gbWFya2VyLCBzbyBsZXQncworCQkgKiBtYWtlIHN1cmUgdGhlIHVucGFja2VyIHdvbid0IHRyeSB0byB1bnBhY2sgbW9yZSB0aGFuIGl0J3MKKwkJICogc3VwcG9zZWQgdG8uICovCisJCXppcG1pbigoaW50NjRfdCkgemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUsCisJCSAgICB6aXAtPmVudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSAtCisJCSAgICB6aXAtPmVudHJ5X3VuY29tcHJlc3NlZF9ieXRlc19yZWFkKTsKKwl6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0ID0gMDsKKworCS8qIFBlcmZvcm0gdGhlIGRlY29tcHJlc3Npb24uICovCisJbHpfcmV0ID0gbHptYV9jb2RlKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0sIExaTUFfUlVOKTsKKwlzd2l0Y2gobHpfcmV0KSB7CisJCWNhc2UgTFpNQV9EQVRBX0VSUk9SOgorCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKwkJCSAgICAibHptYSBkYXRhIGVycm9yIChlcnJvciAlZCkiLCAoaW50KSBsel9yZXQpOworCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKworCQkvKiBUaGlzIGNhc2UgaXMgb3B0aW9uYWwgaW4gbHptYSBhbG9uZSBmb3JtYXQuIEl0IGNhbiBoYXBwZW4sCisJCSAqIGJ1dCBtb3N0IG9mIHRoZSBmaWxlcyBkb24ndCBoYXZlIGl0LiAoR2l0SHViICMxMjU3KSAqLworCQljYXNlIExaTUFfU1RSRUFNX0VORDoKKwkJCWx6bWFfZW5kKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0pOworCQkJemlwLT56aXB4X2x6bWFfdmFsaWQgPSAwOworCQkJaWYoKGludDY0X3QpIHppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9pbiAhPQorCQkJICAgIHppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nKQorCQkJeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkJICAgICJsem1hIGFsb25lIHByZW1hdHVyZSBlbmQgb2Ygc3RyZWFtIik7CisJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCX0KKworCQkJemlwLT5lbmRfb2ZfZW50cnkgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBMWk1BX09LOgorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgImx6bWEgdW5rbm93biBlcnJvciAlZCIsIChpbnQpIGx6X3JldCk7CisJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCXRvX2NvbnN1bWUgPSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfaW47CisKKwkvKiBVcGRhdGUgcG9pbnRlcnMuICovCisJX19hcmNoaXZlX3JlYWRfY29uc3VtZShhLCB0b19jb25zdW1lKTsKKwl6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyAtPSB0b19jb25zdW1lOworCXppcC0+ZW50cnlfY29tcHJlc3NlZF9ieXRlc19yZWFkICs9IHRvX2NvbnN1bWU7CisJemlwLT5lbnRyeV91bmNvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB6aXAtPnppcHhfbHptYV9zdHJlYW0udG90YWxfb3V0OworCisJaWYoemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgPT0gMCkgeworCQl6aXAtPmVuZF9vZl9lbnRyeSA9IDE7CisJfQorCisJLyogUmV0dXJuIHZhbHVlcy4gKi8KKwkqc2l6ZSA9IHppcC0+emlweF9sem1hX3N0cmVhbS50b3RhbF9vdXQ7CisJKmJ1ZmYgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisKKwkvKiBCZWhhdmUgdGhlIHNhbWUgd2F5IGFzIGR1cmluZyBkZWZsYXRlIGRlY29tcHJlc3Npb24uICovCisJcmV0ID0gY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoYSwgemlwKTsKKwlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiAocmV0KTsKKworCS8qIEZyZWUgbHptYSBkZWNvZGVyIGhhbmRsZSBiZWNhdXNlIHdlJ2xsIG5vIGxvbmdlciBuZWVkIGl0LiAqLworCWlmKHppcC0+ZW5kX29mX2VudHJ5KSB7CisJCWx6bWFfZW5kKCZ6aXAtPnppcHhfbHptYV9zdHJlYW0pOworCQl6aXAtPnppcHhfbHptYV92YWxpZCA9IDA7CisJfQorCisJLyogSWYgd2UncmUgaGVyZSwgdGhlbiB3ZSdyZSBnb29kISAqLworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisjZW5kaWYgLyogSEFWRV9MWk1BX0ggJiYgSEFWRV9MSUJMWk1BICovCisKK3N0YXRpYyBpbnQKK3ppcHhfcHBtZDhfaW5pdChzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgemlwICp6aXApCit7CisJY29uc3Qgdm9pZCogcDsKKwl1aW50MzJfdCB2YWw7CisJdWludDMyX3Qgb3JkZXI7CisJdWludDMyX3QgbWVtOworCXVpbnQzMl90IHJlc3RvcmVfbWV0aG9kOworCisJLyogUmVtb3ZlIHByZXZpb3VzIGRlY29tcHJlc3Npb24gY29udGV4dCBpZiBpdCBleGlzdHMuICovCisJaWYoemlwLT5wcG1kOF92YWxpZCkgeworCQlfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zLlBwbWQ4X0ZyZWUoJnppcC0+cHBtZDgpOworCQl6aXAtPnBwbWQ4X3ZhbGlkID0gMDsKKwl9CisKKwkvKiBDcmVhdGUgYSBuZXcgZGVjb21wcmVzc2lvbiBjb250ZXh0LiAqLworCV9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnMuUHBtZDhfQ29uc3RydWN0KCZ6aXAtPnBwbWQ4KTsKKwl6aXAtPnBwbWQ4X3N0cmVhbV9mYWlsZWQgPSAwOworCisJLyogU2V0dXAgZnVuY3Rpb24gcG9pbnRlcnMgcmVxdWlyZWQgYnkgUHBtZDggZGVjb21wcmVzc29yLiBUaGUKKwkgKiAncHBtZF9yZWFkJyBmdW5jdGlvbiB3aWxsIGZlZWQgbmV3IGJ5dGVzIHRvIHRoZSBkZWNvbXByZXNzb3IsCisJICogYW5kIHdpbGwgaW5jcmVtZW50IHRoZSAnemlwLT56aXB4X3BwbWRfcmVhZF9jb21wcmVzc2VkJyBjb3VudGVyLiAqLworCXppcC0+cHBtZDguU3RyZWFtLkluID0gJnppcC0+emlweF9wcG1kX3N0cmVhbTsKKwl6aXAtPnppcHhfcHBtZF9zdHJlYW0uYSA9IGE7CisJemlwLT56aXB4X3BwbWRfc3RyZWFtLlJlYWQgPSAmcHBtZF9yZWFkOworCisJLyogUmVzZXQgbnVtYmVyIG9mIHJlYWQgYnl0ZXMgdG8gMC4gKi8KKwl6aXAtPnppcHhfcHBtZF9yZWFkX2NvbXByZXNzZWQgPSAwOworCisJLyogUmVhZCBQcG1kOCBoZWFkZXIgKDIgYnl0ZXMpLiAqLworCXAgPSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAyLCBOVUxMKTsKKwlpZighcCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgZmlsZSBkYXRhIGluIFBQTWQ4IHN0cmVhbSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKwlfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsIDIpOworCisJLyogRGVjb2RlIHRoZSBzdHJlYW0ncyBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLiAqLworCXZhbCA9IGFyY2hpdmVfbGUxNmRlYyhwKTsKKwlvcmRlciA9ICh2YWwgJiAxNSkgKyAxOworCW1lbSA9ICgodmFsID4+IDQpICYgMHhmZikgKyAxOworCXJlc3RvcmVfbWV0aG9kID0gKHZhbCA+PiAxMik7CisKKwlpZihvcmRlciA8IDIgfHwgcmVzdG9yZV9tZXRob2QgPiAyKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIkludmFsaWQgcGFyYW1ldGVyIHNldCBpbiBQUE1kOCBzdHJlYW0gKG9yZGVyPSVkLCAiCisJCSAgICAicmVzdG9yZT0lZCkiLCBvcmRlciwgcmVzdG9yZV9tZXRob2QpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5IG5lZWRlZCB0byBwcm9wZXJseSBkZWNvbXByZXNzIHRoZSBmaWxlLiAqLworCWlmKCFfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zLlBwbWQ4X0FsbG9jKCZ6aXAtPnBwbWQ4LCBtZW0gPDwgMjApKSB7CisJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBFTk9NRU0sCisJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgUFBNZDggc3RyZWFtOiAlZCBieXRlcyIsCisJCSAgICBtZW0gPDwgMjApOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCS8qIFNpZ25hbCB0aGUgY2xlYW51cCBmdW5jdGlvbiB0byByZWxlYXNlIFBwbWQ4IGNvbnRleHQgaW4gdGhlCisJICogY2xlYW51cCBwaGFzZS4gKi8KKwl6aXAtPnBwbWQ4X3ZhbGlkID0gMTsKKworCS8qIFBlcmZvcm0gZnVydGhlciBQcG1kOCBpbml0aWFsaXphdGlvbi4gKi8KKwlpZighX19hcmNoaXZlX3BwbWQ4X2Z1bmN0aW9ucy5QcG1kOF9SYW5nZURlY19Jbml0KCZ6aXAtPnBwbWQ4KSkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19QUk9HUkFNTUVSLAorCQkgICAgIlBQTWQ4IHN0cmVhbSByYW5nZSBkZWNvZGVyIGluaXRpYWxpemF0aW9uIGVycm9yIik7CisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJX19hcmNoaXZlX3BwbWQ4X2Z1bmN0aW9ucy5QcG1kOF9Jbml0KCZ6aXAtPnBwbWQ4LCBvcmRlciwKKwkgICAgcmVzdG9yZV9tZXRob2QpOworCisJLyogQWxsb2NhdGUgdGhlIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCB1bmNvbXByZXNzZWQgZGF0YS4gKi8KKwlmcmVlKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcik7CisKKwl6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZSA9IDI1NiAqIDEwMjQ7CisJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID0KKwkgICAgKHVpbnQ4X3QqKSBtYWxsb2MoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUpOworCisJaWYoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEVOT01FTSwKKwkJICAgICJObyBtZW1vcnkgZm9yIFBQTWQ4IGRlY29tcHJlc3Npb24iKTsKKwkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogUHBtZDggaW5pdGlhbGl6YXRpb24gaXMgZG9uZS4gKi8KKwl6aXAtPmRlY29tcHJlc3NfaW5pdCA9IDE7CisKKwkvKiBXZSd2ZSBhbHJlYWR5IHJlYWQgMiBieXRlcyBpbiB0aGUgb3V0cHV0IHN0cmVhbS4gQWRkaXRpb25hbGx5LAorCSAqIFBwbWQ4IGluaXRpYWxpemF0aW9uIGNvZGUgY291bGQgcmVhZCBzb21lIGRhdGEgYXMgd2VsbC4gU28gd2UKKwkgKiBhcmUgYWR2YW5jaW5nIHRoZSBzdHJlYW0gYnkgMiBieXRlcyBwbHVzIHdoYXRldmVyIG51bWJlciBvZgorCSAqIGJ5dGVzIFBwbWQ4IGluaXQgZnVuY3Rpb24gdXNlZC4gKi8KKwl6aXAtPmVudHJ5X2NvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSAyICsgemlwLT56aXB4X3BwbWRfcmVhZF9jb21wcmVzc2VkOworCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQKK3ppcF9yZWFkX2RhdGFfemlweF9wcG1kKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIGNvbnN0IHZvaWQgKipidWZmLAorICAgIHNpemVfdCAqc2l6ZSwgaW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCB6aXAqIHppcCA9IChzdHJ1Y3QgemlwICopKGEtPmZvcm1hdC0+ZGF0YSk7CisJaW50IHJldDsKKwlzaXplX3QgY29uc3VtZWRfYnl0ZXMgPSAwOworCXNzaXplX3QgYnl0ZXNfYXZhaWwgPSAwOworCisJKHZvaWQpIG9mZnNldDsgLyogVU5VU0VEICovCisKKwkvKiBJZiB3ZSdyZSBoZXJlIGZvciB0aGUgZmlyc3QgdGltZSwgaW5pdGlhbGl6ZSBQcG1kOCBkZWNvbXByZXNzaW9uCisJICogY29udGV4dCBmaXJzdC4gKi8KKwlpZighemlwLT5kZWNvbXByZXNzX2luaXQpIHsKKwkJcmV0ID0gemlweF9wcG1kOF9pbml0KGEsIHppcCk7CisJCWlmKHJldCAhPSBBUkNISVZFX09LKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBGZXRjaCBmb3IgbW9yZSBkYXRhLiBXZSdyZSByZWFkaW5nIDEgYnl0ZSBoZXJlLCBidXQgbGliYXJjaGl2ZQorCSAqIHNob3VsZCBwcmVmZXRjaCBtb3JlIGJ5dGVzLiAqLworCSh2b2lkKSBfX2FyY2hpdmVfcmVhZF9haGVhZChhLCAxLCAmYnl0ZXNfYXZhaWwpOworCWlmKGJ5dGVzX2F2YWlsIDwgMCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICJUcnVuY2F0ZWQgUFBNZDggZmlsZSBib2R5Iik7CisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQorCisJLyogVGhpcyBjb3VudGVyIHdpbGwgYmUgdXBkYXRlZCBpbnNpZGUgcHBtZF9yZWFkKCksIHdoaWNoIGF0IG9uZQorCSAqIHBvaW50IHdpbGwgYmUgY2FsbGVkIGJ5IFBwbWQ4X0RlY29kZVN5bWJvbC4gKi8KKwl6aXAtPnppcHhfcHBtZF9yZWFkX2NvbXByZXNzZWQgPSAwOworCisJLyogRGVjb21wcmVzc2lvbiBsb29wLiAqLworCWRvIHsKKwkJaW50IHN5bSA9IF9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnMuUHBtZDhfRGVjb2RlU3ltYm9sKAorCQkgICAgJnppcC0+cHBtZDgpOworCQlpZihzeW0gPCAwKSB7CisJCQl6aXAtPmVuZF9vZl9lbnRyeSA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFRoaXMgZmllbGQgaXMgc2V0IGJ5IHBwbWRfcmVhZCgpIHdoZW4gdGhlcmUgd2FzIG5vIG1vcmUgZGF0YQorCQkgKiB0byBiZSByZWFkLiAqLworCQlpZih6aXAtPnBwbWQ4X3N0cmVhbV9mYWlsZWQpIHsKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCQkgICAgIlRydW5jYXRlZCBQUE1kOCBmaWxlIGJvZHkiKTsKKwkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCX0KKworCQl6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJbY29uc3VtZWRfYnl0ZXNdID0gKHVpbnQ4X3QpIHN5bTsKKwkJKytjb25zdW1lZF9ieXRlczsKKwl9IHdoaWxlKGNvbnN1bWVkX2J5dGVzIDwgemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUpOworCisJLyogVXBkYXRlIHBvaW50ZXJzIGZvciBsaWJhcmNoaXZlLiAqLworCSpidWZmID0gemlwLT51bmNvbXByZXNzZWRfYnVmZmVyOworCSpzaXplID0gY29uc3VtZWRfYnl0ZXM7CisKKwkvKiBVcGRhdGUgcG9pbnRlcnMgc28gd2UgY2FuIGNvbnRpbnVlIGRlY29tcHJlc3Npb24gaW4gYW5vdGhlciBjYWxsLiAqLworCXppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nIC09IHppcC0+emlweF9wcG1kX3JlYWRfY29tcHJlc3NlZDsKKwl6aXAtPmVudHJ5X2NvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB6aXAtPnppcHhfcHBtZF9yZWFkX2NvbXByZXNzZWQ7CisJemlwLT5lbnRyeV91bmNvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSBjb25zdW1lZF9ieXRlczsKKworCS8qIElmIHdlJ3JlIGF0IHRoZSBlbmQgb2Ygc3RyZWFtLCBkZWluaXRpYWxpemUgUHBtZDggY29udGV4dC4gKi8KKwlpZih6aXAtPmVuZF9vZl9lbnRyeSkgeworCQlfX2FyY2hpdmVfcHBtZDhfZnVuY3Rpb25zLlBwbWQ4X0ZyZWUoJnppcC0+cHBtZDgpOworCQl6aXAtPnBwbWQ4X3ZhbGlkID0gMDsKKwl9CisKKwkvKiBTZWVrIGZvciBvcHRpb25hbCBtYXJrZXIsIHNhbWUgd2F5IGFzIGluIGVhY2ggemlwIGVudHJ5LiAqLworCXJldCA9IGNvbnN1bWVfb3B0aW9uYWxfbWFya2VyKGEsIHppcCk7CisJaWYgKHJldCAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKyNpZmRlZiBIQVZFX0JaTElCX0gKK3N0YXRpYyBpbnQKK3ppcHhfYnppcDJfaW5pdChzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgemlwICp6aXApCit7CisJaW50IHI7CisKKwkvKiBEZWFsbG9jYXRlIGFscmVhZHkgZXhpc3RpbmcgQloyIGRlY29tcHJlc3Npb24gY29udGV4dCBpZiBpdAorCSAqIGV4aXN0cy4gKi8KKwlpZih6aXAtPmJ6c3RyZWFtX3ZhbGlkKSB7CisJCUJaMl9iekRlY29tcHJlc3NFbmQoJnppcC0+YnpzdHJlYW0pOworCQl6aXAtPmJ6c3RyZWFtX3ZhbGlkID0gMDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIG5ldyBCWjIgZGVjb21wcmVzc2lvbiBjb250ZXh0LiAqLworCW1lbXNldCgmemlwLT5ienN0cmVhbSwgMCwgc2l6ZW9mKGJ6X3N0cmVhbSkpOworCXIgPSBCWjJfYnpEZWNvbXByZXNzSW5pdCgmemlwLT5ienN0cmVhbSwgMCwgMSk7CisJaWYociAhPSBCWl9PSykgeworCQlhcmNoaXZlX3NldF9lcnJvcigmKGEtPmFyY2hpdmUpLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCSAgICAiYnppcDIgaW5pdGlhbGl6YXRpb24gZmFpbGVkKCVkKSIsCisJCSAgICByKTsKKworCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CisJfQorCisJLyogTWFyayB0aGUgYnpzdHJlYW0gZmllbGQgdG8gYmUgcmVsZWFzZWQgaW4gY2xlYW51cCBwaGFzZS4gKi8KKwl6aXAtPmJ6c3RyZWFtX3ZhbGlkID0gMTsKKworCS8qIChSZSlhbGxvY2F0ZSB0aGUgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIGRlY29tcHJlc3NlZCBieXRlcy4gKi8KKwlmcmVlKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcik7CisKKwl6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZSA9IDI1NiAqIDEwMjQ7CisJemlwLT51bmNvbXByZXNzZWRfYnVmZmVyID0KKwkgICAgKHVpbnQ4X3QqKSBtYWxsb2MoemlwLT51bmNvbXByZXNzZWRfYnVmZmVyX3NpemUpOworCWlmICh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIgPT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkgICAgIk5vIG1lbW9yeSBmb3IgYnppcDIgZGVjb21wcmVzc2lvbiIpOworCQkgICAgcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CisJfQorCisJLyogSW5pdGlhbGl6YXRpb24gZG9uZS4gKi8KKwl6aXAtPmRlY29tcHJlc3NfaW5pdCA9IDE7CisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKK3N0YXRpYyBpbnQKK3ppcF9yZWFkX2RhdGFfemlweF9iemlwMihzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBjb25zdCB2b2lkICoqYnVmZiwKKyAgICBzaXplX3QgKnNpemUsIGludDY0X3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgemlwICp6aXAgPSAoc3RydWN0IHppcCAqKShhLT5mb3JtYXQtPmRhdGEpOworCXNzaXplX3QgYnl0ZXNfYXZhaWwgPSAwLCBpbl9ieXRlcywgdG9fY29uc3VtZTsKKwljb25zdCB2b2lkICpjb21wcmVzc2VkX2J1ZmY7CisJaW50IHI7CisJdWludDY0X3QgdG90YWxfb3V0OworCisJKHZvaWQpIG9mZnNldDsgLyogVU5VU0VEICovCisKKwkvKiBJbml0aWFsaXplIGRlY29tcHJlc3Npb24gY29udGV4dCBpZiB3ZSdyZSBoZXJlIGZvciB0aGUgZmlyc3QgdGltZS4gKi8KKwlpZighemlwLT5kZWNvbXByZXNzX2luaXQpIHsKKwkJciA9IHppcHhfYnppcDJfaW5pdChhLCB6aXApOworCQlpZihyICE9IEFSQ0hJVkVfT0spCisJCQlyZXR1cm4gcjsKKwl9CisKKwkvKiBGZXRjaCBtb3JlIGNvbXByZXNzZWQgYnl0ZXMuICovCisJY29tcHJlc3NlZF9idWZmID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMSwgJmJ5dGVzX2F2YWlsKTsKKwlpZihieXRlc19hdmFpbCA8IDApIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVHJ1bmNhdGVkIGJ6aXAyIGZpbGUgYm9keSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCWluX2J5dGVzID0gemlwbWluKHppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nLCBieXRlc19hdmFpbCk7CisJaWYoaW5fYnl0ZXMgPCAxKSB7CisJCS8qIGxpYmJ6MiBkb2Vzbid0IGNvbXBsYWluIHdoZW4gY2FsbGVyIGZlZWRzIGF2YWlsX2luID09IDAuCisJCSAqIEl0IHdpbGwgYWN0dWFsbHkgcmV0dXJuIHN1Y2Nlc3MgaW4gdGhpcyBjYXNlLCB3aGljaCBpcworCQkgKiB1bmRlc2lyYWJsZS4gVGhpcyBpcyB3aHkgd2UgbmVlZCB0byBtYWtlIHRoaXMgY2hlY2sKKwkJICogbWFudWFsbHkuICovCisKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCisJCSAgICAiVHJ1bmNhdGVkIGJ6aXAyIGZpbGUgYm9keSIpOworCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCX0KKworCS8qIFNldHVwIGJ1ZmZlciBib3VuZGFyaWVzLiAqLworCXppcC0+YnpzdHJlYW0ubmV4dF9pbiA9IChjaGFyKikodWludHB0cl90KSBjb21wcmVzc2VkX2J1ZmY7CisJemlwLT5ienN0cmVhbS5hdmFpbF9pbiA9IGluX2J5dGVzOworCXppcC0+YnpzdHJlYW0udG90YWxfaW5faGkzMiA9IDA7CisJemlwLT5ienN0cmVhbS50b3RhbF9pbl9sbzMyID0gMDsKKwl6aXAtPmJ6c3RyZWFtLm5leHRfb3V0ID0gKGNoYXIqKSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisJemlwLT5ienN0cmVhbS5hdmFpbF9vdXQgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZTsKKwl6aXAtPmJ6c3RyZWFtLnRvdGFsX291dF9oaTMyID0gMDsKKwl6aXAtPmJ6c3RyZWFtLnRvdGFsX291dF9sbzMyID0gMDsKKworCS8qIFBlcmZvcm0gdGhlIGRlY29tcHJlc3Npb24uICovCisJciA9IEJaMl9iekRlY29tcHJlc3MoJnppcC0+YnpzdHJlYW0pOworCXN3aXRjaChyKSB7CisJCWNhc2UgQlpfU1RSRUFNX0VORDoKKwkJCS8qIElmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgZGVpbml0aWFsaXplIHRoZQorCQkJICogZGVjb21wcmVzc2lvbiBjb250ZXh0IG5vdy4gKi8KKwkJCXN3aXRjaChCWjJfYnpEZWNvbXByZXNzRW5kKCZ6aXAtPmJ6c3RyZWFtKSkgeworCQkJCWNhc2UgQlpfT0s6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkgICAgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJCQkgICAgIkZhaWxlZCB0byBjbGVhbiB1cCBiemlwMiAiCisJCQkJCSAgICAiZGVjb21wcmVzc29yIik7CisJCQkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQkJfQorCisJCQl6aXAtPmVuZF9vZl9lbnRyeSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBCWl9PSzoKKwkJCS8qIFRoZSBkZWNvbXByZXNzb3IgaGFzIHN1Y2Nlc3NmdWxseSBkZWNvZGVkIHRoaXMKKwkJCSAqIGNodW5rIG9mIGRhdGEsIGJ1dCBtb3JlIGRhdGEgaXMgc3RpbGwgaW4gcXVldWUuICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgImJ6aXAyIGRlY29tcHJlc3Npb24gZmFpbGVkIik7CisJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIHBvaW50ZXJzIHNvIGRlY29tcHJlc3NvciBjYW4gY29udGludWUgZGVjb2RpbmcuICovCisJdG9fY29uc3VtZSA9IHppcC0+YnpzdHJlYW0udG90YWxfaW5fbG8zMjsKKwlfX2FyY2hpdmVfcmVhZF9jb25zdW1lKGEsIHRvX2NvbnN1bWUpOworCisJdG90YWxfb3V0ID0gKCh1aW50NjRfdCkgemlwLT5ienN0cmVhbS50b3RhbF9vdXRfaGkzMiA8PCAzMikgKworCSAgICB6aXAtPmJ6c3RyZWFtLnRvdGFsX291dF9sbzMyOworCisJemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgLT0gdG9fY29uc3VtZTsKKwl6aXAtPmVudHJ5X2NvbXByZXNzZWRfYnl0ZXNfcmVhZCArPSB0b19jb25zdW1lOworCXppcC0+ZW50cnlfdW5jb21wcmVzc2VkX2J5dGVzX3JlYWQgKz0gdG90YWxfb3V0OworCisJLyogR2l2ZSBsaWJhcmNoaXZlIGl0cyBkdWUuICovCisJKnNpemUgPSB0b3RhbF9vdXQ7CisJKmJ1ZmYgPSB6aXAtPnVuY29tcHJlc3NlZF9idWZmZXI7CisKKwkvKiBTZWVrIGZvciBvcHRpb25hbCBtYXJrZXIsIGxpa2UgaW4gb3RoZXIgZW50cmllcy4gKi8KKwlyID0gY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoYSwgemlwKTsKKwlpZihyICE9IEFSQ0hJVkVfT0spCisJCXJldHVybiByOworCisJcmV0dXJuIEFSQ0hJVkVfT0s7Cit9CisKKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9aTElCX0gKIHN0YXRpYyBpbnQKIHppcF9kZWZsYXRlX2luaXQoc3RydWN0IGFyY2hpdmVfcmVhZCAqYSwgc3RydWN0IHppcCAqemlwKQpAQCAtMTM3MSw4ICsyMjUyLDEwIEBACiAJaWYgKHppcC0+dGN0eF92YWxpZCB8fCB6aXAtPmNjdHhfdmFsaWQpIHsKIAkJaWYgKHppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZyA8IChzaXplX3QpYnl0ZXNfYXZhaWwpIHsKIAkJCXNpemVfdCBidWZmX3JlbWFpbmluZyA9Ci0JCQkgICAgKHppcC0+ZGVjcnlwdGVkX2J1ZmZlciArIHppcC0+ZGVjcnlwdGVkX2J1ZmZlcl9zaXplKQotCQkJICAgIC0gKHppcC0+ZGVjcnlwdGVkX3B0ciArIHppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZyk7CisJCQkgICAgKHppcC0+ZGVjcnlwdGVkX2J1ZmZlciArCisJCQkgICAgemlwLT5kZWNyeXB0ZWRfYnVmZmVyX3NpemUpCisJCQkgICAgLSAoemlwLT5kZWNyeXB0ZWRfcHRyICsKKwkJCSAgICB6aXAtPmRlY3J5cHRlZF9ieXRlc19yZW1haW5pbmcpOwogCiAJCQlpZiAoYnVmZl9yZW1haW5pbmcgPiAoc2l6ZV90KWJ5dGVzX2F2YWlsKQogCQkJCWJ1ZmZfcmVtYWluaW5nID0gKHNpemVfdClieXRlc19hdmFpbDsKQEAgLTEzODMsMTIgKzIyNjYsMTIgQEAKIAkJCQkgICAgKyBidWZmX3JlbWFpbmluZykKIAkJCQkgICAgICA+IHppcC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nKSB7CiAJCQkJCWlmICh6aXAtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyA8Ci0JCQkJCSAgICAgIChpbnQ2NF90KXppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZykKKwkJCQkJICAgIChpbnQ2NF90KXppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZykKIAkJCQkJCWJ1ZmZfcmVtYWluaW5nID0gMDsKIAkJCQkJZWxzZQogCQkJCQkJYnVmZl9yZW1haW5pbmcgPQogCQkJCQkJICAgIChzaXplX3QpemlwLT5lbnRyeV9ieXRlc19yZW1haW5pbmcKLQkJCQkJCSAgICAgIC0gemlwLT5kZWNyeXB0ZWRfYnl0ZXNfcmVtYWluaW5nOworCQkJCQkJICAgIC0gemlwLT5kZWNyeXB0ZWRfYnl0ZXNfcmVtYWluaW5nOwogCQkJCX0KIAkJCX0KIAkJCWlmIChidWZmX3JlbWFpbmluZyA+IDApIHsKQEAgLTE0MDcsNyArMjI5MCw4IEBACiAJCQkJCSAgICAgICsgemlwLT5kZWNyeXB0ZWRfYnl0ZXNfcmVtYWluaW5nLAogCQkJCQkgICAgJmRzaXplKTsKIAkJCQl9Ci0JCQkJemlwLT5kZWNyeXB0ZWRfYnl0ZXNfcmVtYWluaW5nICs9IGJ1ZmZfcmVtYWluaW5nOworCQkJCXppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZyArPQorCQkJCSAgICBidWZmX3JlbWFpbmluZzsKIAkJCX0KIAkJfQogCQlieXRlc19hdmFpbCA9IHppcC0+ZGVjcnlwdGVkX2J5dGVzX3JlbWFpbmluZzsKQEAgLTE0NzAsNDIgKzIzNTQsOSBAQAogCQkJcmV0dXJuIChyKTsKIAl9CiAKLQlpZiAoemlwLT5lbmRfb2ZfZW50cnkgJiYgKHppcC0+ZW50cnktPnppcF9mbGFncyAmIFpJUF9MRU5HVEhfQVRfRU5EKSkgewotCQljb25zdCBjaGFyICpwOwotCi0JCWlmIChOVUxMID09IChwID0gX19hcmNoaXZlX3JlYWRfYWhlYWQoYSwgMjQsIE5VTEwpKSkgewotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAiVHJ1bmNhdGVkIFpJUCBlbmQtb2YtZmlsZSByZWNvcmQiKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7Ci0JCX0KLQkJLyogQ29uc3VtZSB0aGUgb3B0aW9uYWwgUEtcMDA3XDAxMCBtYXJrZXIuICovCi0JCWlmIChwWzBdID09ICdQJyAmJiBwWzFdID09ICdLJyAmJgotCQkgICAgcFsyXSA9PSAnXDAwNycgJiYgcFszXSA9PSAnXDAxMCcpIHsKLQkJCXAgKz0gNDsKLQkJCXppcC0+dW5jb25zdW1lZCA9IDQ7Ci0JCX0KLQkJaWYgKHppcC0+ZW50cnktPmZsYWdzICYgTEFfVVNFRF9aSVA2NCkgewotCQkJdWludDY0X3QgY29tcHJlc3NlZCwgdW5jb21wcmVzc2VkOwotCQkJemlwLT5lbnRyeS0+Y3JjMzIgPSBhcmNoaXZlX2xlMzJkZWMocCk7Ci0JCQljb21wcmVzc2VkID0gYXJjaGl2ZV9sZTY0ZGVjKHAgKyA0KTsKLQkJCXVuY29tcHJlc3NlZCA9IGFyY2hpdmVfbGU2NGRlYyhwICsgMTIpOwotCQkJaWYgKGNvbXByZXNzZWQgPiBJTlQ2NF9NQVggfHwgdW5jb21wcmVzc2VkID4gSU5UNjRfTUFYKSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkJICAgICJPdmVyZmxvdyBvZiA2NC1iaXQgZmlsZSBzaXplcyIpOwotCQkJCXJldHVybiBBUkNISVZFX0ZBSUxFRDsKLQkJCX0KLQkJCXppcC0+ZW50cnktPmNvbXByZXNzZWRfc2l6ZSA9IGNvbXByZXNzZWQ7Ci0JCQl6aXAtPmVudHJ5LT51bmNvbXByZXNzZWRfc2l6ZSA9IHVuY29tcHJlc3NlZDsKLQkJCXppcC0+dW5jb25zdW1lZCArPSAyMDsKLQkJfSBlbHNlIHsKLQkJCXppcC0+ZW50cnktPmNyYzMyID0gYXJjaGl2ZV9sZTMyZGVjKHApOwotCQkJemlwLT5lbnRyeS0+Y29tcHJlc3NlZF9zaXplID0gYXJjaGl2ZV9sZTMyZGVjKHAgKyA0KTsKLQkJCXppcC0+ZW50cnktPnVuY29tcHJlc3NlZF9zaXplID0gYXJjaGl2ZV9sZTMyZGVjKHAgKyA4KTsKLQkJCXppcC0+dW5jb25zdW1lZCArPSAxMjsKLQkJfQotCX0KKwlyID0gY29uc3VtZV9vcHRpb25hbF9tYXJrZXIoYSwgemlwKTsKKwlpZiAociAhPSBBUkNISVZFX09LKQorCQlyZXR1cm4gKHIpOwogCiAJcmV0dXJuIChBUkNISVZFX09LKTsKIH0KQEAgLTE5MzMsNiArMjc4NCwyNCBAQAogCWNhc2UgMDogIC8qIE5vIGNvbXByZXNzaW9uLiAqLwogCQlyID0gIHppcF9yZWFkX2RhdGFfbm9uZShhLCBidWZmLCBzaXplLCBvZmZzZXQpOwogCQlicmVhazsKKyNpZmRlZiBIQVZFX0JaTElCX0gKKwljYXNlIDEyOiAvKiBaSVB4IGJ6aXAyIGNvbXByZXNzaW9uLiAqLworCQlyID0gemlwX3JlYWRfZGF0YV96aXB4X2J6aXAyKGEsIGJ1ZmYsIHNpemUsIG9mZnNldCk7CisJCWJyZWFrOworI2VuZGlmCisjaWYgSEFWRV9MWk1BX0ggJiYgSEFWRV9MSUJMWk1BCisJY2FzZSAxNDogLyogWklQeCBMWk1BIGNvbXByZXNzaW9uLiAqLworCQlyID0gemlwX3JlYWRfZGF0YV96aXB4X2x6bWFfYWxvbmUoYSwgYnVmZiwgc2l6ZSwgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSA5NTogLyogWklQeCBYWiBjb21wcmVzc2lvbi4gKi8KKwkJciA9IHppcF9yZWFkX2RhdGFfemlweF94eihhLCBidWZmLCBzaXplLCBvZmZzZXQpOworCQlicmVhazsKKyNlbmRpZgorCS8qIFBQTWQgc3VwcG9ydCBpcyBidWlsdC1pbiwgc28gd2UgZG9uJ3QgbmVlZCBhbnkgI2lmIGd1YXJkcy4gKi8KKwljYXNlIDk4OiAvKiBaSVB4IFBQTWQgY29tcHJlc3Npb24uICovCisJCXIgPSB6aXBfcmVhZF9kYXRhX3ppcHhfcHBtZChhLCBidWZmLCBzaXplLCBvZmZzZXQpOworCQlicmVhazsKKwogI2lmZGVmIEhBVkVfWkxJQl9ICiAJY2FzZSA4OiAvKiBEZWZsYXRlIGNvbXByZXNzaW9uLiAqLwogCQlyID0gIHppcF9yZWFkX2RhdGFfZGVmbGF0ZShhLCBidWZmLCBzaXplLCBvZmZzZXQpOwpAQCAtMTk0MSw4ICsyODEwLDggQEAKIAlkZWZhdWx0OiAvKiBVbnN1cHBvcnRlZCBjb21wcmVzc2lvbi4gKi8KIAkJLyogUmV0dXJuIGEgd2FybmluZy4gKi8KIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCSAgICAiVW5zdXBwb3J0ZWQgWklQIGNvbXByZXNzaW9uIG1ldGhvZCAoJXMpIiwKLQkJICAgIGNvbXByZXNzaW9uX25hbWUoemlwLT5lbnRyeS0+Y29tcHJlc3Npb24pKTsKKwkJICAgICJVbnN1cHBvcnRlZCBaSVAgY29tcHJlc3Npb24gbWV0aG9kICglZDogJXMpIiwKKwkJICAgIHppcC0+ZW50cnktPmNvbXByZXNzaW9uLCBjb21wcmVzc2lvbl9uYW1lKHppcC0+ZW50cnktPmNvbXByZXNzaW9uKSk7CiAJCS8qIFdlIGNhbid0IGRlY29tcHJlc3MgdGhpcyBlbnRyeSwgYnV0IHdlIHdpbGwKIAkJICogYmUgYWJsZSB0byBza2lwKCkgaXQgYW5kIHRyeSB0aGUgbmV4dCBlbnRyeS4gKi8KIAkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CkBAIC0yMDAwLDExICsyODY5LDI5IEBACiAJc3RydWN0IHppcF9lbnRyeSAqemlwX2VudHJ5LCAqbmV4dF96aXBfZW50cnk7CiAKIAl6aXAgPSAoc3RydWN0IHppcCAqKShhLT5mb3JtYXQtPmRhdGEpOworCiAjaWZkZWYgSEFWRV9aTElCX0gKIAlpZiAoemlwLT5zdHJlYW1fdmFsaWQpCiAJCWluZmxhdGVFbmQoJnppcC0+c3RyZWFtKTsKLQlmcmVlKHppcC0+dW5jb21wcmVzc2VkX2J1ZmZlcik7CiAjZW5kaWYKKworI2lmIEhBVkVfTFpNQV9IICYmIEhBVkVfTElCTFpNQQorICAgIGlmICh6aXAtPnppcHhfbHptYV92YWxpZCkgeworCQlsem1hX2VuZCgmemlwLT56aXB4X2x6bWFfc3RyZWFtKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQlpMSUJfSAorCWlmICh6aXAtPmJ6c3RyZWFtX3ZhbGlkKSB7CisJCUJaMl9iekRlY29tcHJlc3NFbmQoJnppcC0+YnpzdHJlYW0pOworCX0KKyNlbmRpZgorCisJZnJlZSh6aXAtPnVuY29tcHJlc3NlZF9idWZmZXIpOworCisJaWYgKHppcC0+cHBtZDhfdmFsaWQpCisJCV9fYXJjaGl2ZV9wcG1kOF9mdW5jdGlvbnMuUHBtZDhfRnJlZSgmemlwLT5wcG1kOCk7CisKIAlpZiAoemlwLT56aXBfZW50cmllcykgewogCQl6aXBfZW50cnkgPSB6aXAtPnppcF9lbnRyaWVzOwogCQl3aGlsZSAoemlwX2VudHJ5ICE9IE5VTEwpIHsKQEAgLTI2MjgsNyArMzUxNSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNsdXJwX2NlbnRyYWxfZGlyZWN0b3J5KHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCB6aXAgKnppcCkKK3NsdXJwX2NlbnRyYWxfZGlyZWN0b3J5KHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiBlbnRyeSwKKyAgICBzdHJ1Y3QgemlwICp6aXApCiB7CiAJc3NpemVfdCBpOwogCXVuc2lnbmVkIGZvdW5kOwpAQCAtMjcwOCw2ICszNTk2LDExIEBACiAJCQlyZXR1cm4gQVJDSElWRV9GQVRBTDsKIAogCQl6aXBfZW50cnkgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB6aXBfZW50cnkpKTsKKwkJaWYgKHppcF9lbnRyeSA9PSBOVUxMKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgRU5PTUVNLAorCQkJCSJDYW4ndCBhbGxvY2F0ZSB6aXAgZW50cnkiKTsKKwkJCXJldHVybiBBUkNISVZFX0ZBVEFMOworCQl9CiAJCXppcF9lbnRyeS0+bmV4dCA9IHppcC0+emlwX2VudHJpZXM7CiAJCXppcF9lbnRyeS0+ZmxhZ3MgfD0gTEFfRlJPTV9DRU5UUkFMX0RJUkVDVE9SWTsKIAkJemlwLT56aXBfZW50cmllcyA9IHppcF9lbnRyeTsKQEAgLTI3MzMsOCArMzYyNiwxMCBAQAogCQlmaWxlbmFtZV9sZW5ndGggPSBhcmNoaXZlX2xlMTZkZWMocCArIDI4KTsKIAkJZXh0cmFfbGVuZ3RoID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyAzMCk7CiAJCWNvbW1lbnRfbGVuZ3RoID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyAzMik7Ci0JCS8qIGRpc2tfc3RhcnQgPSBhcmNoaXZlX2xlMTZkZWMocCArIDM0KTsgKi8gLyogQmV0dGVyIGJlIHplcm8uICovCi0JCS8qIGludGVybmFsX2F0dHJpYnV0ZXMgPSBhcmNoaXZlX2xlMTZkZWMocCArIDM2KTsgKi8gLyogdGV4dCBiaXQgKi8KKwkJLyogZGlza19zdGFydCA9IGFyY2hpdmVfbGUxNmRlYyhwICsgMzQpOworCQkgKiAgIEJldHRlciBiZSB6ZXJvLgorCQkgKiBpbnRlcm5hbF9hdHRyaWJ1dGVzID0gYXJjaGl2ZV9sZTE2ZGVjKHAgKyAzNik7CisJCSAqICAgdGV4dCBiaXQgKi8KIAkJZXh0ZXJuYWxfYXR0cmlidXRlcyA9IGFyY2hpdmVfbGUzMmRlYyhwICsgMzgpOwogCQl6aXBfZW50cnktPmxvY2FsX2hlYWRlcl9vZmZzZXQgPQogCQkgICAgYXJjaGl2ZV9sZTMyZGVjKHAgKyA0MikgKyBjb3JyZWN0aW9uOwpAQCAtMjc3MCw3ICszNjY1LDggQEAKIAkJCSAgICAiVHJ1bmNhdGVkIFpJUCBmaWxlIGhlYWRlciIpOwogCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CiAJCX0KLQkJaWYgKEFSQ0hJVkVfT0sgIT0gcHJvY2Vzc19leHRyYShhLCBwICsgZmlsZW5hbWVfbGVuZ3RoLCBleHRyYV9sZW5ndGgsIHppcF9lbnRyeSkpIHsKKwkJaWYgKEFSQ0hJVkVfT0sgIT0gcHJvY2Vzc19leHRyYShhLCBlbnRyeSwgcCArIGZpbGVuYW1lX2xlbmd0aCwKKwkJICAgIGV4dHJhX2xlbmd0aCwgemlwX2VudHJ5KSkgewogCQkJcmV0dXJuIEFSQ0hJVkVfRkFUQUw7CiAJCX0KIApAQCAtMjc5Miw3ICszNjg4LDggQEAKIAkJCQkgKiBhIGRpcmVjdG9yeS4gV2Ugc2hvdWxkIHRyZWF0IGl0IGFzIGEgbm9uCiAJCQkJICogcmVzb3VyY2UgZm9yayBmaWxlIHRvIGV4cG9zZSBpdC4gKi8KIAkJCQlpZiAobmFtZVtmaWxlbmFtZV9sZW5ndGgtMV0gIT0gJy8nICYmCi0JCQkJICAgIChyIC0gbmFtZSA8IDMgfHwgclswXSAhPSAnLicgfHwgclsxXSAhPSAnXycpKSB7CisJCQkJICAgIChyIC0gbmFtZSA8IDMgfHwgclswXSAhPSAnLicgfHwKKwkJCQkgICAgIHJbMV0gIT0gJ18nKSkgewogCQkJCQlfX2FyY2hpdmVfcmJfdHJlZV9pbnNlcnRfbm9kZSgKIAkJCQkJICAgICZ6aXAtPnRyZWUsICZ6aXBfZW50cnktPm5vZGUpOwogCQkJCQkvKiBFeHBvc2UgaXRzIHBhcmVudCBkaXJlY3Rvcmllcy4gKi8KQEAgLTI4NjksOCArMzc2NiwxMCBAQAogCXN3aXRjaChyc3JjLT5jb21wcmVzc2lvbikgewogCWNhc2UgMDogIC8qIE5vIGNvbXByZXNzaW9uLiAqLwogCQlpZiAocnNyYy0+dW5jb21wcmVzc2VkX3NpemUgIT0gcnNyYy0+Y29tcHJlc3NlZF9zaXplKSB7Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAiTWFsZm9ybWVkIE9TIFggbWV0YWRhdGEgZW50cnk6IGluY29uc2lzdGVudCBzaXplIik7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkJICAgICJNYWxmb3JtZWQgT1MgWCBtZXRhZGF0YSBlbnRyeTogIgorCQkJICAgICJpbmNvbnNpc3RlbnQgc2l6ZSIpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAkJfQogI2lmZGVmIEhBVkVfWkxJQl9ICkBAIC0zMDI5LDcgKzM5MjgsNyBAQAogCQlhLT5hcmNoaXZlLmFyY2hpdmVfZm9ybWF0X25hbWUgPSAiWklQIjsKIAogCWlmICh6aXAtPnppcF9lbnRyaWVzID09IE5VTEwpIHsKLQkJciA9IHNsdXJwX2NlbnRyYWxfZGlyZWN0b3J5KGEsIHppcCk7CisJCXIgPSBzbHVycF9jZW50cmFsX2RpcmVjdG9yeShhLCBlbnRyeSwgemlwKTsKIAkJaWYgKHIgIT0gQVJDSElWRV9PSykKIAkJCXJldHVybiByOwogCQkvKiBHZXQgZmlyc3QgZW50cnkgd2hvc2UgbG9jYWwgaGVhZGVyIG9mZnNldCBpcyBsb3dlciB0aGFuCkBAIC0zMDU5LDggKzM5NTgsOCBAQAogCV9fYXJjaGl2ZV9yZWFkX3Jlc2V0X3Bhc3NwaHJhc2UoYSk7CiAKIAkvKiBGaWxlIGVudHJpZXMgYXJlIHNvcnRlZCBieSB0aGUgaGVhZGVyIG9mZnNldCwgd2Ugc2hvdWxkIG1vc3RseQotCSAqIHVzZSBfX2FyY2hpdmVfcmVhZF9jb25zdW1lIHRvIGFkdmFuY2UgYSByZWFkIHBvaW50IHRvIGF2b2lkIHJlZHVuZGFudAotCSAqIGRhdGEgcmVhZGluZy4gICovCisJICogdXNlIF9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUgdG8gYWR2YW5jZSBhIHJlYWQgcG9pbnQgdG8gYXZvaWQKKwkgKiByZWR1bmRhbnQgZGF0YSByZWFkaW5nLiAgKi8KIAlvZmZzZXQgPSBhcmNoaXZlX2ZpbHRlcl9ieXRlcygmYS0+YXJjaGl2ZSwgMCk7CiAJaWYgKG9mZnNldCA8IHppcC0+ZW50cnktPmxvY2FsX2hlYWRlcl9vZmZzZXQpCiAJCV9fYXJjaGl2ZV9yZWFkX2NvbnN1bWUoYSwKQEAgLTMxNDEsMyArNDA0MCw1IEBACiAJCWZyZWUoemlwKTsKIAlyZXR1cm4gKEFSQ0hJVkVfT0spOwogfQorCisvKiMgdmltOnNldCBub2V0OiovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZy5jCmluZGV4IDg1NTk0Y2MuLmM3N2RjZjUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZy5jCkBAIC03NSw2ICs3NSw5IEBACiAjZGVmaW5lIHdtZW1tb3ZlKGEsYixpKSAgKHdjaGFyX3QgKiltZW1tb3ZlKChhKSwgKGIpLCAoaSkgKiBzaXplb2Yod2NoYXJfdCkpCiAjZW5kaWYKIAorI3VuZGVmIG1heAorI2RlZmluZSBtYXgoYSwgYikgICAgICAgKChhKT4oYik/KGEpOihiKSkKKwogc3RydWN0IGFyY2hpdmVfc3RyaW5nX2NvbnYgewogCXN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252CSpuZXh0OwogCWNoYXIJCQkJKmZyb21fY2hhcnNldDsKQEAgLTQ1OCw3ICs0NjEsNyBAQAogCiAJaWYgKGZyb21fY3AgPT0gQ1BfQ19MT0NBTEUpIHsKIAkJLyoKLQkJICogIkMiIGxvY2FsZSBzcGVjaWFsIHByb2Nlc3MuCisJCSAqICJDIiBsb2NhbGUgc3BlY2lhbCBwcm9jZXNzaW5nLgogCQkgKi8KIAkJd2NoYXJfdCAqd3M7CiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1wOwpAQCAtNTkxLDcgKzU5NCw3IEBACiAJICogTm8gc2luZ2xlIGJ5dGUgd2lsbCBiZSBtb3JlIHRoYW4gb25lIHdpZGUgY2hhcmFjdGVyLAogCSAqIHNvIHRoaXMgbGVuZ3RoIGVzdGltYXRlIHdpbGwgYWx3YXlzIGJlIGJpZyBlbm91Z2guCiAJICovCi0Jc2l6ZV90IHdjc19sZW5ndGggPSBsZW47CisJLy8gc2l6ZV90IHdjc19sZW5ndGggPSBsZW47CiAJc2l6ZV90IG1ic19sZW5ndGggPSBsZW47CiAJY29uc3QgY2hhciAqbWJzID0gcDsKIAl3Y2hhcl90ICp3Y3M7CkBAIC02MDAsNyArNjAzLDExIEBACiAKIAltZW1zZXQoJnNoaWZ0X3N0YXRlLCAwLCBzaXplb2Yoc2hpZnRfc3RhdGUpKTsKICNlbmRpZgotCWlmIChOVUxMID09IGFyY2hpdmVfd3N0cmluZ19lbnN1cmUoZGVzdCwgZGVzdC0+bGVuZ3RoICsgd2NzX2xlbmd0aCArIDEpKQorCS8qCisJICogQXMgd2UgZGVjaWRlZCB0byBoYXZlIHdjc19sZW5ndGggPT0gbWJzX2xlbmd0aCA9PSBsZW4KKwkgKiB3ZSBjYW4gdXNlIGxlbiBoZXJlIGluc3RlYWQgb2Ygd2NzX2xlbmd0aAorCSAqLworCWlmIChOVUxMID09IGFyY2hpdmVfd3N0cmluZ19lbnN1cmUoZGVzdCwgZGVzdC0+bGVuZ3RoICsgbGVuICsgMSkpCiAJCXJldHVybiAoLTEpOwogCXdjcyA9IGRlc3QtPnMgKyBkZXN0LT5sZW5ndGg7CiAJLyoKQEAgLTYwOSw2ICs2MTYsMTIgQEAKIAkgKiBtdWx0aSBieXRlcy4KIAkgKi8KIAl3aGlsZSAoKm1icyAmJiBtYnNfbGVuZ3RoID4gMCkgeworCQkvKgorCQkgKiBUaGUgYnVmZmVyIHdlIGFsbG9jYXRlZCBpcyBhbHdheXMgYmlnIGVub3VnaC4KKwkJICogS2VlcCB0aGlzIGNvZGUgcGF0aCBpbiBhIGNvbW1lbnQgaWYgd2UgZGVjaWRlIHRvIGNob29zZQorCQkgKiBzbWFsbGVyIHdjc19sZW5ndGggaW4gdGhlIGZ1dHVyZQorCQkgKi8KKy8qCiAJCWlmICh3Y3NfbGVuZ3RoID09IDApIHsKIAkJCWRlc3QtPmxlbmd0aCA9IHdjcyAtIGRlc3QtPnM7CiAJCQlkZXN0LT5zW2Rlc3QtPmxlbmd0aF0gPSBMJ1wwJzsKQEAgLTYxOCwyNCArNjMxLDIwIEBACiAJCQkJcmV0dXJuICgtMSk7CiAJCQl3Y3MgPSBkZXN0LT5zICsgZGVzdC0+bGVuZ3RoOwogCQl9CisqLwogI2lmIEhBVkVfTUJSVE9XQwotCQlyID0gbWJydG93Yyh3Y3MsIG1icywgd2NzX2xlbmd0aCwgJnNoaWZ0X3N0YXRlKTsKKwkJciA9IG1icnRvd2Mod2NzLCBtYnMsIG1ic19sZW5ndGgsICZzaGlmdF9zdGF0ZSk7CiAjZWxzZQotCQlyID0gbWJ0b3djKHdjcywgbWJzLCB3Y3NfbGVuZ3RoKTsKKwkJciA9IG1idG93Yyh3Y3MsIG1icywgbWJzX2xlbmd0aCk7CiAjZW5kaWYKIAkJaWYgKHIgPT0gKHNpemVfdCktMSB8fCByID09IChzaXplX3QpLTIpIHsKIAkJCXJldF92YWwgPSAtMTsKLQkJCWlmIChlcnJubyA9PSBFSUxTRVEpIHsKLQkJCQkrK21iczsKLQkJCQktLW1ic19sZW5ndGg7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UKLQkJCQlicmVhazsKKwkJCWJyZWFrOwogCQl9CiAJCWlmIChyID09IDAgfHwgciA+IG1ic19sZW5ndGgpCiAJCQlicmVhazsKIAkJd2NzKys7Ci0JCXdjc19sZW5ndGgtLTsKKwkJLy8gd2NzX2xlbmd0aC0tOwogCQltYnMgKz0gcjsKIAkJbWJzX2xlbmd0aCAtPSByOwogCX0KQEAgLTY4MCw3ICs2ODksNyBAQAogCiAJaWYgKHRvX2NwID09IENQX0NfTE9DQUxFKSB7CiAJCS8qCi0JCSAqICJDIiBsb2NhbGUgc3BlY2lhbCBwcm9jZXNzLgorCQkgKiAiQyIgbG9jYWxlIHNwZWNpYWwgcHJvY2Vzc2luZy4KIAkJICovCiAJCWNvbnN0IHdjaGFyX3QgKndwID0gd3M7CiAJCWNoYXIgKnA7CkBAIC03OTksNyArODA4LDggQEAKIAkJCWFzLT5zW2FzLT5sZW5ndGhdID0gJ1wwJzsKIAkJCS8qIFJlLWFsbG9jYXRlIGJ1ZmZlciBmb3IgTUJTLiAqLwogCQkJaWYgKGFyY2hpdmVfc3RyaW5nX2Vuc3VyZShhcywKLQkJCSAgICBhcy0+bGVuZ3RoICsgbGVuICogMiArIDEpID09IE5VTEwpCisJCQkgICAgYXMtPmxlbmd0aCArIG1heChsZW4gKiAyLAorCQkJICAgIChzaXplX3QpTUJfQ1VSX01BWCkgKyAxKSA9PSBOVUxMKQogCQkJCXJldHVybiAoLTEpOwogCQkJcCA9IGFzLT5zICsgYXMtPmxlbmd0aDsKIAkJCWVuZCA9IGFzLT5zICsgYXMtPmJ1ZmZlcl9sZW5ndGggLSBNQl9DVVJfTUFYIC0xOwpAQCAtODkwLDcgKzkwMCw3IEBACiAgICAgIHN0cnVjdCBhcmNoaXZlX3N0cmluZ19jb252ICopKQogewogCWlmIChzYyA9PSBOVUxMIHx8IHNjLT5uY29udmVydGVyID49IDIpCi0JCV9fYXJjaGl2ZV9lcnJ4KDEsICJQcm9ncmFtaW5nIGVycm9yIik7CisJCV9fYXJjaGl2ZV9lcnJ4KDEsICJQcm9ncmFtbWluZyBlcnJvciIpOwogCXNjLT5jb252ZXJ0ZXJbc2MtPm5jb252ZXJ0ZXIrK10gPSBjb252ZXJ0ZXI7CiB9CiAKQEAgLTM0NDEsNyArMzQ1MSw4IEBACiAJCQlhcy0+bGVuZ3RoID0gcCAtIGFzLT5zOwogCQkJLyogUmUtYWxsb2NhdGUgYnVmZmVyIGZvciBNQlMuICovCiAJCQlpZiAoYXJjaGl2ZV9zdHJpbmdfZW5zdXJlKGFzLAotCQkJICAgIGFzLT5sZW5ndGggKyBsZW4gKiAyICsgMSkgPT0gTlVMTCkKKwkJCSAgICBhcy0+bGVuZ3RoICsgbWF4KGxlbiAqIDIsCisJCQkgICAgKHNpemVfdClNQl9DVVJfTUFYKSArIDEpID09IE5VTEwpCiAJCQkJcmV0dXJuICgtMSk7CiAJCQlwID0gYXMtPnMgKyBhcy0+bGVuZ3RoOwogCQkJZW5kID0gYXMtPnMgKyBhcy0+YnVmZmVyX2xlbmd0aCAtIE1CX0NVUl9NQVggLTE7CkBAIC00MDUzLDYgKzQwNjQsNyBAQAogewogICBpZiAodXRmOCA9PSBOVUxMKSB7CiAgICAgYWVzLT5hZXNfc2V0ID0gMDsKKyAgICByZXR1cm4gKDApOwogICB9CiAgIGFlcy0+YWVzX3NldCA9IEFFU19TRVRfVVRGODsKICAgYXJjaGl2ZV9zdHJpbmdfZW1wdHkoJihhZXMtPmFlc19tYnMpKTsKQEAgLTQwNjcsNiArNDA3OSw3IEBACiB7CiAJaWYgKHdjcyA9PSBOVUxMKSB7CiAJCWFlcy0+YWVzX3NldCA9IDA7CisJCXJldHVybiAoMCk7CiAJfQogCWFlcy0+YWVzX3NldCA9IEFFU19TRVRfV0NTOyAvKiBPbmx5IFdDUyBmb3JtIHNldC4gKi8KIAlhcmNoaXZlX3N0cmluZ19lbXB0eSgmKGFlcy0+YWVzX21icykpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuaAppbmRleCA1NmRmYmIyLi4yN2UxYWQ2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV9zdHJpbmcuaApAQCAtMjYsMTUgKzI2LDE1IEBACiAgKgogICovCiAKKyNpZm5kZWYgQVJDSElWRV9TVFJJTkdfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1NUUklOR19IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjaWZuZGVmIF9fTElCQVJDSElWRV9URVNUCiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9TVFJJTkdfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX1NUUklOR19IX0lOQ0xVREVECi0KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+ICAvKiByZXF1aXJlZCBmb3Igd2NoYXJfdCBvbiBzb21lIHN5c3RlbXMgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3N0cmluZ19jb21wb3NpdGlvbi5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nX2NvbXBvc2l0aW9uLmgKaW5kZXggODkwMmFjMS4uZDBhYzM0MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nX2NvbXBvc2l0aW9uLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfc3RyaW5nX2NvbXBvc2l0aW9uLmgKQEAgLTM0LDEzICszNCwxMyBAQAogICogIFNlZSBhbHNvIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnQvdHIxNS8KICAqLwogCisjaWZuZGVmIEFSQ0hJVkVfU1RSSU5HX0NPTVBPU0lUSU9OX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9TVFJJTkdfQ09NUE9TSVRJT05fSF9JTkNMVURFRAorCiAjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAogI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1NUUklOR19DT01QT1NJVElPTl9IX0lOQ0xVREVECi0jZGVmaW5lIEFSQ0hJVkVfU1RSSU5HX0NPTVBPU0lUSU9OX0hfSU5DTFVERUQKLQogc3RydWN0IHVuaWNvZGVfY29tcG9zaXRpb25fdGFibGUgewogCXVpbnQzMl90IGNwMTsKIAl1aW50MzJfdCBjcDI7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV91dGlsLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV91dGlsLjMKaW5kZXggOTlhYjg0Mi4uZDVkNGU3ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdXRpbC4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3V0aWwuMwpAQCAtOTIsMTAgKzkyLDEwIEBACiBOb3QgZ2VuZXJhbGx5IHVzZWQgaW4gY2xpZW50IGNvZGUuCiAuSXQgRm4gYXJjaGl2ZV9jb21wcmVzc2lvbgogU3lub255bSBmb3IKLS5GbiBhcmNoaXZlX2ZpbHRlcl9jb2RlKGEsIDApIC4KKy5GbiBhcmNoaXZlX2ZpbHRlcl9jb2RlIGEgMCAuCiAuSXQgRm4gYXJjaGl2ZV9jb21wcmVzc2lvbl9uYW1lCiBTeW5vbnltIGZvcgotLkZuIGFyY2hpdmVfZmlsdGVyX25hbWUoYSwgMCkgLgorLkZuIGFyY2hpdmVfZmlsdGVyX25hbWUgYSAwIC4KIC5JdCBGbiBhcmNoaXZlX2NvcHlfZXJyb3IKIENvcGllcyBlcnJvciBpbmZvcm1hdGlvbiBmcm9tIG9uZSBhcmNoaXZlIHRvIGFub3RoZXIuCiAuSXQgRm4gYXJjaGl2ZV9lcnJubwpAQCAtMTQyLDEzICsxNDIsMTMgQEAKIGZpbHRlciAxIGlzIHRoZSB1dWRlY29kZSBmaWx0ZXIsCiBhbmQgZmlsdGVyIDIgaXMgdGhlIHBzZXVkby1maWx0ZXIgdGhhdCB3cmFwcyB0aGUgYXJjaGl2ZSByZWFkIGZ1bmN0aW9ucy4KIEluIHRoaXMgY2FzZSwgcmVxdWVzdGluZwotLkZuIGFyY2hpdmVfcG9zaXRpb24oYSwgLTEpCisuRm4gYXJjaGl2ZV9wb3NpdGlvbiBhIC0xCiB3b3VsZCBiZSBhIHN5bm9ueW0gZm9yCi0uRm4gYXJjaGl2ZV9wb3NpdGlvbihhLCAyKQorLkZuIGFyY2hpdmVfcG9zaXRpb24gYSAyCiB3aGljaCB3b3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgcmVhZCBmcm9tIHRoZSBhcmNoaXZlLCB3aGlsZQotLkZuIGFyY2hpdmVfcG9zaXRpb24oYSwgMSkKKy5GbiBhcmNoaXZlX3Bvc2l0aW9uIGEgMQogd291bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWZ0ZXIgdXVkZWNvZGluZywgYW5kCi0uRm4gYXJjaGl2ZV9wb3NpdGlvbihhLCAwKQorLkZuIGFyY2hpdmVfcG9zaXRpb24gYSAwCiB3b3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhZnRlciBkZWNvbXByZXNzaW9uLgogLkl0IEZuIGFyY2hpdmVfZmlsdGVyX25hbWUKIFJldHVybnMgYSB0ZXh0dWFsIG5hbWUgaWRlbnRpZnlpbmcgdGhlIGluZGljYXRlZCBmaWx0ZXIuCkBAIC0xNzAsOSArMTcwLDkgQEAKIC5JdCBGbiBhcmNoaXZlX3Bvc2l0aW9uCiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gdGhlIGluZGljYXRlZCBmaWx0ZXIuCiBJbiBwYXJ0aWN1bGFyLAotLkZuIGFyY2hpdmVfcG9zaXRpb24oYSwgMCkKKy5GbiBhcmNoaXZlX3Bvc2l0aW9uIGEgMAogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3Igd3JpdHRlbiBieSB0aGUgZm9ybWF0IGhhbmRsZXIsIHdoaWxlCi0uRm4gYXJjaGl2ZV9wb3NpdGlvbihhLCAtMSkKKy5GbiBhcmNoaXZlX3Bvc2l0aW9uIGEgLTEKIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIG9yIHdyaXR0ZW4gdG8gdGhlIGFyY2hpdmUuCiBTZWUKIC5GbiBhcmNoaXZlX2ZpbHRlcl9jb3VudApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdXRpbC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfdXRpbC5jCmluZGV4IGU1YzZlM2IuLjEwZGNhNzMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3V0aWwuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV91dGlsLmMKQEAgLTQ2LDEzICs0NiwxMyBAQAogI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfTFpNQV9ICi0jaW5jbHVkZSA8Y21fbHptYS5oPgorI2luY2x1ZGUgPGNtM3AvbHptYS5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9CWkxJQl9ICi0jaW5jbHVkZSA8Y21fYnpsaWIuaD4KKyNpbmNsdWRlIDxjbTNwL2J6bGliLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX0xaNF9ICiAjaW5jbHVkZSA8bHo0Lmg+CkBAIC0yMTgsOCArMjE4LDggQEAKICAqIEFsc28gV2luZG93cyB2ZXJzaW9uIG9mIG1rdGVtcCBmYW1pbHkgaW5jbHVkaW5nIF9ta3RlbXBfcwogICogYXJlIG5vdCBzZWN1cmUuCiAgKi8KLWludAotX19hcmNoaXZlX21rdGVtcChjb25zdCBjaGFyICp0bXBkaXIpCitzdGF0aWMgaW50CitfX2FyY2hpdmVfbWt0ZW1weChjb25zdCBjaGFyICp0bXBkaXIsIHdjaGFyX3QgKnRlbXBsYXRlKQogewogCXN0YXRpYyBjb25zdCB3Y2hhcl90IHByZWZpeFtdID0gTCJsaWJhcmNoaXZlXyI7CiAJc3RhdGljIGNvbnN0IHdjaGFyX3Qgc3VmZml4W10gPSBMIlhYWFhYWFhYWFgiOwpAQCAtMjQzLDY0ICsyNDMsNzYgQEAKIAloUHJvdiA9IChIQ1JZUFRQUk9WKU5VTEw7CiAJZmQgPSAtMTsKIAl3cyA9IE5VTEw7Ci0JYXJjaGl2ZV9zdHJpbmdfaW5pdCgmdGVtcF9uYW1lKTsKIAotCS8qIEdldCBhIHRlbXBvcmFyeSBkaXJlY3RvcnkuICovCi0JaWYgKHRtcGRpciA9PSBOVUxMKSB7Ci0JCXNpemVfdCBsOwotCQl3Y2hhcl90ICp0bXA7CisJaWYgKHRlbXBsYXRlID09IE5VTEwpIHsKKwkJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmdGVtcF9uYW1lKTsKIAotCQlsID0gR2V0VGVtcFBhdGhXKDAsIE5VTEwpOwotCQlpZiAobCA9PSAwKSB7Ci0JCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOwotCQkJZ290byBleGl0X3RtcGZpbGU7Ci0JCX0KLQkJdG1wID0gbWFsbG9jKGwqc2l6ZW9mKHdjaGFyX3QpKTsKLQkJaWYgKHRtcCA9PSBOVUxMKSB7Ci0JCQllcnJubyA9IEVOT01FTTsKLQkJCWdvdG8gZXhpdF90bXBmaWxlOwotCQl9Ci0JCUdldFRlbXBQYXRoVygoRFdPUkQpbCwgdG1wKTsKLQkJYXJjaGl2ZV93c3RyY3B5KCZ0ZW1wX25hbWUsIHRtcCk7Ci0JCWZyZWUodG1wKTsKLQl9IGVsc2UgewotCQlpZiAoYXJjaGl2ZV93c3RyaW5nX2FwcGVuZF9mcm9tX21icygmdGVtcF9uYW1lLCB0bXBkaXIsCi0JCSAgICBzdHJsZW4odG1wZGlyKSkgPCAwKQotCQkJZ290byBleGl0X3RtcGZpbGU7Ci0JCWlmICh0ZW1wX25hbWUuc1t0ZW1wX25hbWUubGVuZ3RoLTFdICE9IEwnLycpCi0JCQlhcmNoaXZlX3dzdHJhcHBlbmRfd2NoYXIoJnRlbXBfbmFtZSwgTCcvJyk7Ci0JfQorCQkvKiBHZXQgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiAqLworCQlpZiAodG1wZGlyID09IE5VTEwpIHsKKwkJCXNpemVfdCBsOworCQkJd2NoYXJfdCAqdG1wOwogCi0JLyogQ2hlY2sgaWYgdGVtcF9uYW1lIGlzIGEgZGlyZWN0b3J5LiAqLwotCWF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1codGVtcF9uYW1lLnMpOwotCWlmIChhdHRyID09IChEV09SRCktMSkgewotCQlpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIHsKLQkJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7Ci0JCQlnb3RvIGV4aXRfdG1wZmlsZTsKKwkJCWwgPSBHZXRUZW1wUGF0aFcoMCwgTlVMTCk7CisJCQlpZiAobCA9PSAwKSB7CisJCQkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJCQlnb3RvIGV4aXRfdG1wZmlsZTsKKwkJCX0KKwkJCXRtcCA9IG1hbGxvYyhsKnNpemVvZih3Y2hhcl90KSk7CisJCQlpZiAodG1wID09IE5VTEwpIHsKKwkJCQllcnJubyA9IEVOT01FTTsKKwkJCQlnb3RvIGV4aXRfdG1wZmlsZTsKKwkJCX0KKwkJCUdldFRlbXBQYXRoVygoRFdPUkQpbCwgdG1wKTsKKwkJCWFyY2hpdmVfd3N0cmNweSgmdGVtcF9uYW1lLCB0bXApOworCQkJZnJlZSh0bXApOworCQl9IGVsc2UgeworCQkJaWYgKGFyY2hpdmVfd3N0cmluZ19hcHBlbmRfZnJvbV9tYnMoJnRlbXBfbmFtZSwgdG1wZGlyLAorCQkJICAgIHN0cmxlbih0bXBkaXIpKSA8IDApCisJCQkJZ290byBleGl0X3RtcGZpbGU7CisJCQlpZiAodGVtcF9uYW1lLnNbdGVtcF9uYW1lLmxlbmd0aC0xXSAhPSBMJy8nKQorCQkJCWFyY2hpdmVfd3N0cmFwcGVuZF93Y2hhcigmdGVtcF9uYW1lLCBMJy8nKTsKIAkJfQotCQl3cyA9IF9fbGFfd2luX3Blcm1pc3NpdmVfbmFtZV93KHRlbXBfbmFtZS5zKTsKLQkJaWYgKHdzID09IE5VTEwpIHsKLQkJCWVycm5vID0gRUlOVkFMOwotCQkJZ290byBleGl0X3RtcGZpbGU7Ci0JCX0KLQkJYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyh3cyk7CisKKwkJLyogQ2hlY2sgaWYgdGVtcF9uYW1lIGlzIGEgZGlyZWN0b3J5LiAqLworCQlhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHRlbXBfbmFtZS5zKTsKIAkJaWYgKGF0dHIgPT0gKERXT1JEKS0xKSB7Ci0JCQlsYV9kb3NtYXBlcnIoR2V0TGFzdEVycm9yKCkpOworCQkJaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSB7CisJCQkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJCQlnb3RvIGV4aXRfdG1wZmlsZTsKKwkJCX0KKwkJCXdzID0gX19sYV93aW5fcGVybWlzc2l2ZV9uYW1lX3codGVtcF9uYW1lLnMpOworCQkJaWYgKHdzID09IE5VTEwpIHsKKwkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQlnb3RvIGV4aXRfdG1wZmlsZTsKKwkJCX0KKwkJCWF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cod3MpOworCQkJaWYgKGF0dHIgPT0gKERXT1JEKS0xKSB7CisJCQkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJCQlnb3RvIGV4aXRfdG1wZmlsZTsKKwkJCX0KKwkJfQorCQlpZiAoIShhdHRyICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkgeworCQkJZXJybm8gPSBFTk9URElSOwogCQkJZ290byBleGl0X3RtcGZpbGU7CiAJCX0KLQl9Ci0JaWYgKCEoYXR0ciAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpIHsKLQkJZXJybm8gPSBFTk9URElSOwotCQlnb3RvIGV4aXRfdG1wZmlsZTsKLQl9CiAKLQkvKgotCSAqIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLgotCSAqLwotCWFyY2hpdmVfd3N0cmNhdCgmdGVtcF9uYW1lLCBwcmVmaXgpOwotCWFyY2hpdmVfd3N0cmNhdCgmdGVtcF9uYW1lLCBzdWZmaXgpOwotCWVwID0gdGVtcF9uYW1lLnMgKyBhcmNoaXZlX3N0cmxlbigmdGVtcF9uYW1lKTsKLQl4cCA9IGVwIC0gd2NzbGVuKHN1ZmZpeCk7CisJCS8qCisJCSAqIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLgorCQkgKi8KKwkJYXJjaGl2ZV93c3RyY2F0KCZ0ZW1wX25hbWUsIHByZWZpeCk7CisJCWFyY2hpdmVfd3N0cmNhdCgmdGVtcF9uYW1lLCBzdWZmaXgpOworCQllcCA9IHRlbXBfbmFtZS5zICsgYXJjaGl2ZV9zdHJsZW4oJnRlbXBfbmFtZSk7CisJCXhwID0gZXAgLSB3Y3NsZW4oc3VmZml4KTsKKwkJdGVtcGxhdGUgPSB0ZW1wX25hbWUuczsKKwl9IGVsc2UgeworCQl4cCA9IHdjc2Nocih0ZW1wbGF0ZSwgTCdYJyk7CisJCWlmICh4cCA9PSBOVUxMKQkvKiBObyBYLCBwcm9ncmFtbWluZyBlcnJvciAqLworCQkJYWJvcnQoKTsKKwkJZm9yIChlcCA9IHhwOyAqZXAgPT0gTCdYJzsgZXArKykKKwkJCWNvbnRpbnVlOworCQlpZiAoKmVwKQkvKiBYIGZvbGxvd2VkIGJ5IG5vbiBYLCBwcm9ncmFtbWluZyBlcnJvciAqLworCQkJYWJvcnQoKTsKKwl9CiAKIAlpZiAoIUNyeXB0QWNxdWlyZUNvbnRleHQoJmhQcm92LCBOVUxMLCBOVUxMLCBQUk9WX1JTQV9GVUxMLAogCQlDUllQVF9WRVJJRllDT05URVhUKSkgewpAQCAtMzIzLDIwICszMzUsMjQgQEAKIAkJCSpwID0gbnVtWygoRFdPUkQpKnApICUgKHNpemVvZihudW0pL3NpemVvZihudW1bMF0pKV07CiAKIAkJZnJlZSh3cyk7Ci0JCXdzID0gX19sYV93aW5fcGVybWlzc2l2ZV9uYW1lX3codGVtcF9uYW1lLnMpOworCQl3cyA9IF9fbGFfd2luX3Blcm1pc3NpdmVfbmFtZV93KHRlbXBsYXRlKTsKIAkJaWYgKHdzID09IE5VTEwpIHsKIAkJCWVycm5vID0gRUlOVkFMOwogCQkJZ290byBleGl0X3RtcGZpbGU7CiAJCX0KLQkJLyogU3BlY2lmaWVzIEZJTEVfRkxBR19ERUxFVEVfT05fQ0xPU0UgZmxhZyBpcyB0bwotCQkgKiBkZWxldGUgdGhpcyB0ZW1wb3JhcnkgZmlsZSBpbW1lZGlhdGVseSB3aGVuIHRoaXMKLQkJICogZmlsZSBjbG9zZWQuICovCisJCWlmICh0ZW1wbGF0ZSA9PSB0ZW1wX25hbWUucykgeworCQkJYXR0ciA9IEZJTEVfQVRUUklCVVRFX1RFTVBPUkFSWSB8CisJCQkgICAgICAgRklMRV9GTEFHX0RFTEVURV9PTl9DTE9TRTsKKwkJfSBlbHNlIHsKKwkJCS8qIG1rc3RlbXAgKi8KKwkJCWF0dHIgPSBGSUxFX0FUVFJJQlVURV9OT1JNQUw7CisJCX0KIAkJaCA9IENyZWF0ZUZpbGVXKHdzLAogCQkgICAgR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSB8IERFTEVURSwKIAkJICAgIDAsLyogTm90IHNoYXJlICovCiAJCSAgICBOVUxMLAogCQkgICAgQ1JFQVRFX05FVywvKiBDcmVhdGUgYSBuZXcgZmlsZSBvbmx5ICovCi0JCSAgICBGSUxFX0FUVFJJQlVURV9URU1QT1JBUlkgfCBGSUxFX0ZMQUdfREVMRVRFX09OX0NMT1NFLAorCQkgICAgYXR0ciwKIAkJICAgIE5VTEwpOwogCQlpZiAoaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewogCQkJLyogVGhlIHNhbWUgZmlsZSBhbHJlYWR5IGV4aXN0cy4gcmV0cnkgd2l0aApAQCAtMzU4LDEwICszNzQsMjMgQEAKIAlpZiAoaFByb3YgIT0gKEhDUllQVFBST1YpTlVMTCkKIAkJQ3J5cHRSZWxlYXNlQ29udGV4dChoUHJvdiwgMCk7CiAJZnJlZSh3cyk7Ci0JYXJjaGl2ZV93c3RyaW5nX2ZyZWUoJnRlbXBfbmFtZSk7CisJaWYgKHRlbXBsYXRlID09IHRlbXBfbmFtZS5zKQorCQlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmdGVtcF9uYW1lKTsKIAlyZXR1cm4gKGZkKTsKIH0KIAoraW50CitfX2FyY2hpdmVfbWt0ZW1wKGNvbnN0IGNoYXIgKnRtcGRpcikKK3sKKwlyZXR1cm4gX19hcmNoaXZlX21rdGVtcHgodG1wZGlyLCBOVUxMKTsKK30KKworaW50CitfX2FyY2hpdmVfbWtzdGVtcCh3Y2hhcl90ICp0ZW1wbGF0ZSkKK3sKKwlyZXR1cm4gX19hcmNoaXZlX21rdGVtcHgoTlVMTCwgdGVtcGxhdGUpOworfQorCiAjZWxzZQogCiBzdGF0aWMgaW50CkBAIC00MTQsMTQgKzQ0MywyNCBAQAogCXJldHVybiAoZmQpOwogfQogCi0jZWxzZQoraW50CitfX2FyY2hpdmVfbWtzdGVtcChjaGFyICp0ZW1wbGF0ZSkKK3sKKwlpbnQgZmQgPSAtMTsKKwlmZCA9IG1rc3RlbXAodGVtcGxhdGUpOworCWlmIChmZCA+PSAwKQorCQlfX2FyY2hpdmVfZW5zdXJlX2Nsb2V4ZWNfZmxhZyhmZCk7CisJcmV0dXJuIChmZCk7Cit9CisKKyNlbHNlIC8qICFIQVZFX01LU1RFTVAgKi8KIAogLyoKICAqIFdlIHVzZSBhIHByaXZhdGUgcm91dGluZS4KICAqLwogCi1pbnQKLV9fYXJjaGl2ZV9ta3RlbXAoY29uc3QgY2hhciAqdG1wZGlyKQorc3RhdGljIGludAorX19hcmNoaXZlX21rdGVtcHgoY29uc3QgY2hhciAqdG1wZGlyLCBjaGFyICp0ZW1wbGF0ZSkKIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgbnVtW10gPSB7CiAJCScwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLApAQCAtNDM5LDI2ICs0NzgsMzcgQEAKIAljaGFyICp0cCwgKmVwOwogCiAJZmQgPSAtMTsKLQlhcmNoaXZlX3N0cmluZ19pbml0KCZ0ZW1wX25hbWUpOwotCWlmICh0bXBkaXIgPT0gTlVMTCkgewotCQlpZiAoZ2V0X3RlbXBkaXIoJnRlbXBfbmFtZSkgIT0gQVJDSElWRV9PSykKKwlpZiAodGVtcGxhdGUgPT0gTlVMTCkgeworCQlhcmNoaXZlX3N0cmluZ19pbml0KCZ0ZW1wX25hbWUpOworCQlpZiAodG1wZGlyID09IE5VTEwpIHsKKwkJCWlmIChnZXRfdGVtcGRpcigmdGVtcF9uYW1lKSAhPSBBUkNISVZFX09LKQorCQkJCWdvdG8gZXhpdF90bXBmaWxlOworCQl9IGVsc2UKKwkJCWFyY2hpdmVfc3RyY3B5KCZ0ZW1wX25hbWUsIHRtcGRpcik7CisJCWlmICh0ZW1wX25hbWUuc1t0ZW1wX25hbWUubGVuZ3RoLTFdID09ICcvJykgeworCQkJdGVtcF9uYW1lLnNbdGVtcF9uYW1lLmxlbmd0aC0xXSA9ICdcMCc7CisJCQl0ZW1wX25hbWUubGVuZ3RoIC0tOworCQl9CisJCWlmIChsYV9zdGF0KHRlbXBfbmFtZS5zLCAmc3QpIDwgMCkKIAkJCWdvdG8gZXhpdF90bXBmaWxlOwotCX0gZWxzZQotCQlhcmNoaXZlX3N0cmNweSgmdGVtcF9uYW1lLCB0bXBkaXIpOwotCWlmICh0ZW1wX25hbWUuc1t0ZW1wX25hbWUubGVuZ3RoLTFdID09ICcvJykgewotCQl0ZW1wX25hbWUuc1t0ZW1wX25hbWUubGVuZ3RoLTFdID0gJ1wwJzsKLQkJdGVtcF9uYW1lLmxlbmd0aCAtLTsKKwkJaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQllcnJubyA9IEVOT1RESVI7CisJCQlnb3RvIGV4aXRfdG1wZmlsZTsKKwkJfQorCQlhcmNoaXZlX3N0cmNhdCgmdGVtcF9uYW1lLCAiL2xpYmFyY2hpdmVfIik7CisJCXRwID0gdGVtcF9uYW1lLnMgKyBhcmNoaXZlX3N0cmxlbigmdGVtcF9uYW1lKTsKKwkJYXJjaGl2ZV9zdHJjYXQoJnRlbXBfbmFtZSwgIlhYWFhYWFhYWFgiKTsKKwkJZXAgPSB0ZW1wX25hbWUucyArIGFyY2hpdmVfc3RybGVuKCZ0ZW1wX25hbWUpOworCQl0ZW1wbGF0ZSA9IHRlbXBfbmFtZS5zOworCX0gZWxzZSB7CisJCXRwID0gc3RyY2hyKHRlbXBsYXRlLCAnWCcpOworCQlpZiAodHAgPT0gTlVMTCkJLyogTm8gWCwgcHJvZ3JhbW1pbmcgZXJyb3IgKi8KKwkJCWFib3J0KCk7CisJCWZvciAoZXAgPSB0cDsgKmVwID09ICdYJzsgZXArKykKKwkJCWNvbnRpbnVlOworCQlpZiAoKmVwKQkvKiBYIGZvbGxvd2VkIGJ5IG5vbiBYLCBwcm9ncmFtbWluZyBlcnJvciAqLworCQkJYWJvcnQoKTsKIAl9Ci0JaWYgKHN0YXQodGVtcF9uYW1lLnMsICZzdCkgPCAwKQotCQlnb3RvIGV4aXRfdG1wZmlsZTsKLQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpIHsKLQkJZXJybm8gPSBFTk9URElSOwotCQlnb3RvIGV4aXRfdG1wZmlsZTsKLQl9Ci0JYXJjaGl2ZV9zdHJjYXQoJnRlbXBfbmFtZSwgIi9saWJhcmNoaXZlXyIpOwotCXRwID0gdGVtcF9uYW1lLnMgKyBhcmNoaXZlX3N0cmxlbigmdGVtcF9uYW1lKTsKLQlhcmNoaXZlX3N0cmNhdCgmdGVtcF9uYW1lLCAiWFhYWFhYWFhYWCIpOwotCWVwID0gdGVtcF9uYW1lLnMgKyBhcmNoaXZlX3N0cmxlbigmdGVtcF9uYW1lKTsKIAogCWRvIHsKIAkJY2hhciAqcDsKQEAgLTQ2OSwxOSArNTE5LDMzIEBACiAJCQlpbnQgZCA9ICooKHVuc2lnbmVkIGNoYXIgKilwKSAlIHNpemVvZihudW0pOwogCQkJKnArKyA9IG51bVtkXTsKIAkJfQotCQlmZCA9IG9wZW4odGVtcF9uYW1lLnMsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IgfCBPX0NMT0VYRUMsCisJCWZkID0gb3Blbih0ZW1wbGF0ZSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiB8IE9fQ0xPRVhFQywKIAkJCSAgMDYwMCk7CiAJfSB3aGlsZSAoZmQgPCAwICYmIGVycm5vID09IEVFWElTVCk7CiAJaWYgKGZkIDwgMCkKIAkJZ290byBleGl0X3RtcGZpbGU7CiAJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcoZmQpOwotCXVubGluayh0ZW1wX25hbWUucyk7CisJaWYgKHRlbXBsYXRlID09IHRlbXBfbmFtZS5zKQorCQl1bmxpbmsodGVtcF9uYW1lLnMpOwogZXhpdF90bXBmaWxlOgotCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJnRlbXBfbmFtZSk7CisJaWYgKHRlbXBsYXRlID09IHRlbXBfbmFtZS5zKQorCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZ0ZW1wX25hbWUpOwogCXJldHVybiAoZmQpOwogfQogCi0jZW5kaWYgLyogSEFWRV9NS1NURU1QICovCitpbnQKK19fYXJjaGl2ZV9ta3RlbXAoY29uc3QgY2hhciAqdG1wZGlyKQoreworCXJldHVybiBfX2FyY2hpdmVfbWt0ZW1weCh0bXBkaXIsIE5VTEwpOworfQorCitpbnQKK19fYXJjaGl2ZV9ta3N0ZW1wKGNoYXIgKnRlbXBsYXRlKQoreworCXJldHVybiBfX2FyY2hpdmVfbWt0ZW1weChOVUxMLCB0ZW1wbGF0ZSk7Cit9CisKKyNlbmRpZiAvKiAhSEFWRV9NS1NURU1QICovCiAjZW5kaWYgLyogIV9XSU4zMiB8fCBfX0NZR1dJTl9fICovCiAKIC8qCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV92ZXJzaW9uX2RldGFpbHMuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3ZlcnNpb25fZGV0YWlscy5jCmluZGV4IGI5YWY2ZDcuLjVmNWE1YjcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3ZlcnNpb25fZGV0YWlscy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3ZlcnNpb25fZGV0YWlscy5jCkBAIC0zNCwxOSArMzQsMTkgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfWkxJQl9ICi0jaW5jbHVkZSA8Y21femxpYi5oPgorI2luY2x1ZGUgPGNtM3AvemxpYi5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9MWk1BX0gKLSNpbmNsdWRlIDxjbV9sem1hLmg+CisjaW5jbHVkZSA8Y20zcC9sem1hLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX0JaTElCX0gKLSNpbmNsdWRlIDxjbV9iemxpYi5oPgorI2luY2x1ZGUgPGNtM3AvYnpsaWIuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfTFo0X0gKICNpbmNsdWRlIDxsejQuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfWlNURF9ICi0jaW5jbHVkZSA8Y21fenN0ZC5oPgorI2luY2x1ZGUgPGNtM3AvenN0ZC5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJhcmNoaXZlLmgiCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93aW5kb3dzLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93aW5kb3dzLmMKaW5kZXggNmZmODc0OS4uNjI0ZTI3MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd2luZG93cy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dpbmRvd3MuYwpAQCAtNDQ1LDcgKzQ0NSw4IEBACiAgKiBXaW5kb3dzJyBzdGF0KCkgZG9lcyBub3QgYWNjZXB0IHRoZSBwYXRoIGFkZGVkICJcXD9cIiBlc3BlY2lhbGx5ICI/IgogICogY2hhcmFjdGVyLgogICogSXQgbWVhbnMgd2UgY2Fubm90IGFjY2VzcyB0aGUgbG9uZyBuYW1lIHBhdGggbG9uZ2VyIHRoYW4gTUFYX1BBVEguCi0gKiBTbyBJJ3ZlIGltcGxlbWVudGVkIHNpbXVsYXIgV2luZG93cycgc3RhdCgpIHRvIGFjY2VzcyB0aGUgbG9uZyBuYW1lIHBhdGguCisgKiBTbyBJJ3ZlIGltcGxlbWVudGVkIGEgZnVuY3Rpb24gc2ltaWxhciB0byBXaW5kb3dzJyBzdGF0KCkgdG8gYWNjZXNzIHRoZQorICogbG9uZyBuYW1lIHBhdGguCiAgKiBBbmQgSSd2ZSBhZGRlZCBzb21lIGZlYXR1cmUuCiAgKiAxLiBzZXQgc3RfaW5vIGJ5IG5GaWxlSW5kZXhIaWdoIGFuZCBuRmlsZUluZGV4TG93IG9mCiAgKiAgICBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTi4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dpbmRvd3MuaCBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dpbmRvd3MuaAppbmRleCBjM2FlZDBjLi5kZGE2M2I4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93aW5kb3dzLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd2luZG93cy5oCkBAIC0yNywxMCArMjcsNiBAQAogICogJEZyZWVCU0QkCiAgKi8KIAotI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKLSNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgotI2VuZGlmCi0KIC8qCiAgKiBUT0RPOiBBIGxvdCBvZiBzdHVmZiBpbiBoZXJlIGlzbid0IGFjdHVhbGx5IHVzZWQgYnkgbGliYXJjaGl2ZSBhbmQKICAqIGNhbiBiZSB0cmltbWVkIG91dC4gIE5vdGUgdGhhdCB0aGlzIGZpbGUgaXMgdXNlZCBieSBsaWJhcmNoaXZlIGFuZApAQCAtNDgsNiArNDQsMTAgQEAKICNpZm5kZWYgTElCQVJDSElWRV9BUkNISVZFX1dJTkRPV1NfSF9JTkNMVURFRAogI2RlZmluZQlMSUJBUkNISVZFX0FSQ0hJVkVfV0lORE9XU19IX0lOQ0xVREVECiAKKyNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECisjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KKyNlbmRpZgorCiAvKiBTdGFydCBvZiBjb25maWd1cmF0aW9uIGZvciBuYXRpdmUgV2luMzIgICovCiAjaWZuZGVmIE1JTkdXX0hBU19TRUNVUkVfQVBJCiAjZGVmaW5lIE1JTkdXX0hBU19TRUNVUkVfQVBJIDEKQEAgLTExNywxMCArMTE3LDcgQEAKICNpZiAhZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFkZWZpbmVkKF9fV0FUQ09NQ19fKQogI2RlZmluZSBzZXRtb2RlCQlfc2V0bW9kZQogI2VuZGlmCi0jaWZkZWYgc3RhdAotI3VuZGVmIHN0YXQKLSNlbmRpZgotI2RlZmluZQlzdGF0KHBhdGgsc3RyZWYpCQlfX2xhX3N0YXQocGF0aCxzdHJlZikKKyNkZWZpbmUJbGFfc3RhdChwYXRoLHN0cmVmKQkJX19sYV9zdGF0KHBhdGgsc3RyZWYpCiAjaWYgIWRlZmluZWQoX19XQVRDT01DX18pCiAjaWYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQogI2RlZmluZQlzdHJkdXAJCV9zdHJkdXAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS4zCmluZGV4IGMxMTY0ZjUuLmU3ZjdmMTMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuMwpAQCAtMTE4LDcgKzExOCw3IEBACiAuRm4gYXJjaGl2ZV93cml0ZV9mcmVlCiBmdW5jdGlvbiB0byByZWxlYXNlIGFsbCByZXNvdXJjZXMuCiAuXCIKLS5TaCBFWEFNUExFCisuU2ggRVhBTVBMRVMKIFRoZSBmb2xsb3dpbmcgc2tldGNoIGlsbHVzdHJhdGVzIGJhc2ljIHVzYWdlIG9mIHRoZSBsaWJyYXJ5LgogSW4gdGhpcyBleGFtcGxlLAogdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgc2ltcGx5IHdyYXBwZXJzIGFyb3VuZCB0aGUgc3RhbmRhcmQKQEAgLTE5Miw3ICsxOTIsNyBAQAogICBpZiAoYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2ZpbHRlcl9ieV9leHQoYSwgb3V0bmFtZSkgIT0gQVJDSElWRV9PSykgIHsKICAgICBhcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfZ3ppcChhKTsKICAgICBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdXN0YXIoYSk7Ci0gIH0gIAorICB9CiAgIGFyY2hpdmVfd3JpdGVfb3BlbihhLCBteWRhdGEsIG15b3BlbiwgbXl3cml0ZSwgbXljbG9zZSk7CiAgIHdoaWxlICgqZmlsZW5hbWUpIHsKICAgICBzdGF0KCpmaWxlbmFtZSwgJnN0KTsKQEAgLTIyNSw4ICsyMjUsOCBAQAogLkVkCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKaW5kZXggZThkYWY1My4uOThhNTVmYiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jCkBAIC0yMTIsNiArMjEyLDcgQEAKIAogCWYgPSBjYWxsb2MoMSwgc2l6ZW9mKCpmKSk7CiAJZi0+YXJjaGl2ZSA9IF9hOworCWYtPnN0YXRlID0gQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfTkVXOwogCWlmIChhLT5maWx0ZXJfZmlyc3QgPT0gTlVMTCkKIAkJYS0+ZmlsdGVyX2ZpcnN0ID0gZjsKIAllbHNlCkBAIC0yMjgsNiArMjI5LDkgQEAKICAgICBjb25zdCB2b2lkICpidWZmLCBzaXplX3QgbGVuZ3RoKQogewogCWludCByOworCS8qIE5ldmVyIHdyaXRlIHRvIG5vbi1vcGVuIGZpbHRlcnMgKi8KKwlpZiAoZi0+c3RhdGUgIT0gQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfT1BFTikKKwkJcmV0dXJuKEFSQ0hJVkVfRkFUQUwpOwogCWlmIChsZW5ndGggPT0gMCkKIAkJcmV0dXJuKEFSQ0hJVkVfT0spOwogCWlmIChmLT53cml0ZSA9PSBOVUxMKQpAQCAtMjQwLDI3ICsyNDQsNzAgQEAKIH0KIAogLyoKLSAqIE9wZW4gYSBmaWx0ZXIuCisgKiBSZWN1cnNpdmUgZnVuY3Rpb24gZm9yIG9wZW5pbmcgdGhlIGZpbHRlciBjaGFpbgorICogTGFzdCBmaWx0ZXIgaXMgb3BlbmVkIGZpcnN0CiAgKi8KLWludAorc3RhdGljIGludAogX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKIHsKLQlpZiAoZi0+b3BlbiA9PSBOVUxMKQorCWludCByZXQ7CisKKwlyZXQgPSBBUkNISVZFX09LOworCWlmIChmLT5uZXh0X2ZpbHRlciAhPSBOVUxMKQorCQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOworCWlmIChyZXQgIT0gQVJDSElWRV9PSykKKwkJcmV0dXJuIChyZXQpOworCWlmIChmLT5zdGF0ZSAhPSBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9ORVcpCisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJaWYgKGYtPm9wZW4gPT0gTlVMTCkgeworCQlmLT5zdGF0ZSA9IEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX09QRU47CiAJCXJldHVybiAoQVJDSElWRV9PSyk7Ci0JcmV0dXJuIChmLT5vcGVuKShmKTsKKwl9CisJcmV0ID0gKGYtPm9wZW4pKGYpOworCWlmIChyZXQgPT0gQVJDSElWRV9PSykKKwkJZi0+c3RhdGUgPSBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9PUEVOOworCWVsc2UKKwkJZi0+c3RhdGUgPSBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9GQVRBTDsKKwlyZXR1cm4gKHJldCk7CiB9CiAKIC8qCi0gKiBDbG9zZSBhIGZpbHRlci4KKyAqIE9wZW4gYWxsIGZpbHRlcnMKICAqLwotaW50Ci1fX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqZikKK3N0YXRpYyBpbnQKK19fYXJjaGl2ZV93cml0ZV9maWx0ZXJzX29wZW4oc3RydWN0IGFyY2hpdmVfd3JpdGUgKmEpCiB7Ci0JaWYgKGYtPmNsb3NlICE9IE5VTEwpCi0JCXJldHVybiAoZi0+Y2xvc2UpKGYpOwotCWlmIChmLT5uZXh0X2ZpbHRlciAhPSBOVUxMKQotCQlyZXR1cm4gKF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpKTsKLQlyZXR1cm4gKEFSQ0hJVkVfT0spOworCXJldHVybiAoX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGEtPmZpbHRlcl9maXJzdCkpOworfQorCisvKgorICogQ2xvc2UgYWxsIGZpbHRlcworICovCitzdGF0aWMgaW50CitfX2FyY2hpdmVfd3JpdGVfZmlsdGVyc19jbG9zZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZSAqYSkKK3sKKwlzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmY7CisJaW50IHJldCwgcmV0MTsKKwlyZXQgPSBBUkNISVZFX09LOworCWZvciAoZiA9IGEtPmZpbHRlcl9maXJzdDsgZiAhPSBOVUxMOyBmID0gZi0+bmV4dF9maWx0ZXIpIHsKKwkJLyogRG8gbm90IGNsb3NlIGZpbHRlcnMgdGhhdCBhcmUgbm90IG9wZW4gKi8KKwkJaWYgKGYtPnN0YXRlID09IEFSQ0hJVkVfV1JJVEVfRklMVEVSX1NUQVRFX09QRU4pIHsKKwkJCWlmIChmLT5jbG9zZSAhPSBOVUxMKSB7CisJCQkJcmV0MSA9IChmLT5jbG9zZSkoZik7CisJCQkJaWYgKHJldDEgPCByZXQpCisJCQkJCXJldCA9IHJldDE7CisJCQkJaWYgKHJldDEgPT0gQVJDSElWRV9PSykgeworCQkJCQlmLT5zdGF0ZSA9CisJCQkJCSAgICBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9DTE9TRUQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJZi0+c3RhdGUgPQorCQkJCQkgICAgQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfRkFUQUw7CisJCQkJfQorCQkJfSBlbHNlCisJCQkJZi0+c3RhdGUgPSBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9DTE9TRUQ7CisJCX0KKwl9CisJcmV0dXJuIChyZXQpOwogfQogCiBpbnQKQEAgLTI5Miw2ICszMzksNyBAQAogCXN0cnVjdCBhcmNoaXZlX25vbmUgKnN0YXRlOwogCXZvaWQgKmJ1ZmZlcjsKIAlzaXplX3QgYnVmZmVyX3NpemU7CisJaW50IHJldDsKIAogCWYtPmJ5dGVzX3Blcl9ibG9jayA9IGFyY2hpdmVfd3JpdGVfZ2V0X2J5dGVzX3Blcl9ibG9jayhmLT5hcmNoaXZlKTsKIAlmLT5ieXRlc19pbl9sYXN0X2Jsb2NrID0KQEAgLTMxNiw3ICszNjQsMTMgQEAKIAogCWlmIChhLT5jbGllbnRfb3BlbmVyID09IE5VTEwpCiAJCXJldHVybiAoQVJDSElWRV9PSyk7Ci0JcmV0dXJuIChhLT5jbGllbnRfb3BlbmVyKGYtPmFyY2hpdmUsIGEtPmNsaWVudF9kYXRhKSk7CisJcmV0ID0gYS0+Y2xpZW50X29wZW5lcihmLT5hcmNoaXZlLCBhLT5jbGllbnRfZGF0YSk7CisJaWYgKHJldCAhPSBBUkNISVZFX09LKSB7CisJCWZyZWUoc3RhdGUtPmJ1ZmZlcik7CisJCWZyZWUoc3RhdGUpOworCQlmLT5kYXRhID0gTlVMTDsKKwl9CisJcmV0dXJuIChyZXQpOwogfQogCiBzdGF0aWMgaW50CkBAIC00MzksOCArNDkzLDYgQEAKIAkJKCphLT5jbGllbnRfY2xvc2VyKSgmYS0+YXJjaGl2ZSwgYS0+Y2xpZW50X2RhdGEpOwogCWZyZWUoc3RhdGUtPmJ1ZmZlcik7CiAJZnJlZShzdGF0ZSk7Ci0JLyogQ2xlYXIgdGhlIGNsb3NlIGhhbmRsZXIgbXlzZWxmIG5vdCB0byBiZSBjYWxsZWQgYWdhaW4uICovCi0JZi0+Y2xvc2UgPSBOVUxMOwogCWEtPmNsaWVudF9kYXRhID0gTlVMTDsKIAkvKiBDbGVhciBwYXNzcGhyYXNlLiAqLwogCWlmIChhLT5wYXNzcGhyYXNlICE9IE5VTEwpIHsKQEAgLTQ0OCw2ICs1MDAsOCBAQAogCQlmcmVlKGEtPnBhc3NwaHJhc2UpOwogCQlhLT5wYXNzcGhyYXNlID0gTlVMTDsKIAl9CisJLyogQ2xlYXIgdGhlIGNsb3NlIGhhbmRsZXIgbXlzZWxmIG5vdCB0byBiZSBjYWxsZWQgYWdhaW4uICovCisJZi0+c3RhdGUgPSBBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9DTE9TRUQ7CiAJcmV0dXJuIChyZXQpOwogfQogCkBAIC00NzcsOSArNTMxLDEwIEBACiAJY2xpZW50X2ZpbHRlci0+d3JpdGUgPSBhcmNoaXZlX3dyaXRlX2NsaWVudF93cml0ZTsKIAljbGllbnRfZmlsdGVyLT5jbG9zZSA9IGFyY2hpdmVfd3JpdGVfY2xpZW50X2Nsb3NlOwogCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGEtPmZpbHRlcl9maXJzdCk7CisJcmV0ID0gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcnNfb3BlbihhKTsKIAlpZiAocmV0IDwgQVJDSElWRV9XQVJOKSB7Ci0JCXIxID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihhLT5maWx0ZXJfZmlyc3QpOworCQlyMSA9IF9fYXJjaGl2ZV93cml0ZV9maWx0ZXJzX2Nsb3NlKGEpOworCQlfX2FyY2hpdmVfd3JpdGVfZmlsdGVyc19mcmVlKF9hKTsKIAkJcmV0dXJuIChyMSA8IHJldCA/IHIxIDogcmV0KTsKIAl9CiAKQEAgLTUyMSw3ICs1NzYsNyBAQAogCX0KIAogCS8qIEZpbmlzaCB0aGUgY29tcHJlc3Npb24gYW5kIGNsb3NlIHRoZSBzdHJlYW0uICovCi0JcjEgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGEtPmZpbHRlcl9maXJzdCk7CisJcjEgPSBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyc19jbG9zZShhKTsKIAlpZiAocjEgPCByKQogCQlyID0gcjE7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfYjY0ZW5jb2RlLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2I2NGVuY29kZS5jCmluZGV4IGI0NmIxOWEuLjg3ZmRiNzMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfYjY0ZW5jb2RlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9iNjRlbmNvZGUuYwpAQCAtMTQ5LDExICsxNDksNiBAQAogewogCXN0cnVjdCBwcml2YXRlX2I2NGVuY29kZSAqc3RhdGUgPSAoc3RydWN0IHByaXZhdGVfYjY0ZW5jb2RlICopZi0+ZGF0YTsKIAlzaXplX3QgYnMgPSA2NTUzNiwgYnBiOwotCWludCByZXQ7Ci0KLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgIT0gQVJDSElWRV9PSykKLQkJcmV0dXJuIChyZXQpOwogCiAJaWYgKGYtPmFyY2hpdmUtPm1hZ2ljID09IEFSQ0hJVkVfV1JJVEVfTUFHSUMpIHsKIAkJLyogQnVmZmVyIHNpemUgc2hvdWxkIGJlIGEgbXVsdGlwbGUgbnVtYmVyIG9mIHRoZSBvZiBieXRlcwpAQCAtMjY2LDcgKzI2MSw2IEBACiBhcmNoaXZlX2ZpbHRlcl9iNjRlbmNvZGVfY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX2I2NGVuY29kZSAqc3RhdGUgPSAoc3RydWN0IHByaXZhdGVfYjY0ZW5jb2RlICopZi0+ZGF0YTsKLQlpbnQgcmV0LCByZXQyOwogCiAJLyogRmx1c2ggcmVtYWluaW5nIGJ5dGVzLiAqLwogCWlmIChzdGF0ZS0+aG9sZF9sZW4gIT0gMCkKQEAgLTI3NCwxMiArMjY4LDggQEAKIAlhcmNoaXZlX3N0cmluZ19zcHJpbnRmKCZzdGF0ZS0+ZW5jb2RlZF9idWZmLCAiPT09PVxuIik7CiAJLyogV3JpdGUgdGhlIGxhc3QgYmxvY2sgKi8KIAlhcmNoaXZlX3dyaXRlX3NldF9ieXRlc19pbl9sYXN0X2Jsb2NrKGYtPmFyY2hpdmUsIDEpOwotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIsCisJcmV0dXJuIF9fYXJjaGl2ZV93cml0ZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIsCiAJICAgIHN0YXRlLT5lbmNvZGVkX2J1ZmYucywgYXJjaGl2ZV9zdHJsZW4oJnN0YXRlLT5lbmNvZGVkX2J1ZmYpKTsKLQlyZXQyID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCA+IHJldDIpCi0JCXJldCA9IHJldDI7Ci0JcmV0dXJuIChyZXQpOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2J6aXAyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2J6aXAyLmMKaW5kZXggNmJkMGQxZC4uMDYzN2U5NiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9iemlwMi5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfYnppcDIuYwpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9CWkxJQl9ICi0jaW5jbHVkZSA8Y21fYnpsaWIuaD4KKyNpbmNsdWRlIDxjbTNwL2J6bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTE2NywxMCArMTY3LDYgQEAKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwogCWludCByZXQ7CiAKLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIChyZXQpOwotCiAJaWYgKGRhdGEtPmNvbXByZXNzZWQgPT0gTlVMTCkgewogCQlzaXplX3QgYnMgPSA2NTUzNiwgYnBiOwogCQlpZiAoZi0+YXJjaGl2ZS0+bWFnaWMgPT0gQVJDSElWRV9XUklURV9NQUdJQykgewpAQCAtMjYyLDcgKzI1OCw3IEBACiBhcmNoaXZlX2NvbXByZXNzb3JfYnppcDJfY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKWYtPmRhdGE7Ci0JaW50IHJldCwgcjE7CisJaW50IHJldDsKIAogCS8qIEZpbmlzaCBjb21wcmVzc2lvbiBjeWNsZS4gKi8KIAlyZXQgPSBkcml2ZV9jb21wcmVzc29yKGYsIGRhdGEsIDEpOwpAQCAtMjgxLDkgKzI3Nyw3IEBACiAJCSAgICAiRmFpbGVkIHRvIGNsZWFuIHVwIGNvbXByZXNzb3IiKTsKIAkJcmV0ID0gQVJDSElWRV9GQVRBTDsKIAl9Ci0KLQlyMSA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCXJldHVybiAocjEgPCByZXQgPyByMSA6IHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9jb21wcmVzcy5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9jb21wcmVzcy5jCmluZGV4IDI2ZmNlZjQuLmQ0MDRmYWUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfY29tcHJlc3MuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2NvbXByZXNzLmMKQEAgLTE0NiwxNyArMTQ2LDEyIEBACiBzdGF0aWMgaW50CiBhcmNoaXZlX2NvbXByZXNzb3JfY29tcHJlc3Nfb3BlbihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCiB7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpzdGF0ZTsKIAlzaXplX3QgYnMgPSA2NTUzNiwgYnBiOwogCiAJZi0+Y29kZSA9IEFSQ0hJVkVfRklMVEVSX0NPTVBSRVNTOwogCWYtPm5hbWUgPSAiY29tcHJlc3MiOwogCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocmV0KTsKLQogCXN0YXRlID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKiljYWxsb2MoMSwgc2l6ZW9mKCpzdGF0ZSkpOwogCWlmIChzdGF0ZSA9PSBOVUxMKSB7CiAJCWFyY2hpdmVfc2V0X2Vycm9yKGYtPmFyY2hpdmUsIEVOT01FTSwKQEAgLTQyNiwzMCArNDIxLDI3IEBACiBhcmNoaXZlX2NvbXByZXNzb3JfY29tcHJlc3NfY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKnN0YXRlID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOwotCWludCByZXQsIHJldDI7CisJaW50IHJldDsKIAogCXJldCA9IG91dHB1dF9jb2RlKGYsIHN0YXRlLT5jdXJfY29kZSk7CiAJaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlnb3RvIGNsZWFudXA7CisJCXJldHVybiByZXQ7CiAJcmV0ID0gb3V0cHV0X2ZsdXNoKGYpOwogCWlmIChyZXQgIT0gQVJDSElWRV9PSykKLQkJZ290byBjbGVhbnVwOworCQlyZXR1cm4gcmV0OwogCiAJLyogV3JpdGUgdGhlIGxhc3QgYmxvY2sgKi8KIAlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKGYtPm5leHRfZmlsdGVyLAogCSAgICBzdGF0ZS0+Y29tcHJlc3NlZCwgc3RhdGUtPmNvbXByZXNzZWRfb2Zmc2V0KTsKLWNsZWFudXA6Ci0JcmV0MiA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgPiByZXQyKQotCQlyZXQgPSByZXQyOwotCWZyZWUoc3RhdGUtPmNvbXByZXNzZWQpOwotCWZyZWUoc3RhdGUpOwogCXJldHVybiAocmV0KTsKIH0KIAogc3RhdGljIGludAogYXJjaGl2ZV9jb21wcmVzc29yX2NvbXByZXNzX2ZyZWUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewotCSh2b2lkKWY7IC8qIFVOVVNFRCAqLworCXN0cnVjdCBwcml2YXRlX2RhdGEgKnN0YXRlID0gKHN0cnVjdCBwcml2YXRlX2RhdGEgKilmLT5kYXRhOworCisJZnJlZShzdGF0ZS0+Y29tcHJlc3NlZCk7CisJZnJlZShzdGF0ZSk7CiAJcmV0dXJuIChBUkNISVZFX09LKTsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfZ3ppcC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9nemlwLmMKaW5kZXggOTg2MTIzYS4uM2UyNjYwNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9nemlwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9nemlwLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHRpbWUuaD4KICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpAQCAtMTg0LDEwICsxODQsNiBAQAogCXN0cnVjdCBwcml2YXRlX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKWYtPmRhdGE7CiAJaW50IHJldDsKIAotCXJldCA9IF9fYXJjaGl2ZV93cml0ZV9vcGVuX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JaWYgKHJldCAhPSBBUkNISVZFX09LKQotCQlyZXR1cm4gKHJldCk7Ci0KIAlpZiAoZGF0YS0+Y29tcHJlc3NlZCA9PSBOVUxMKSB7CiAJCXNpemVfdCBicyA9IDY1NTM2LCBicGI7CiAJCWlmIChmLT5hcmNoaXZlLT5tYWdpYyA9PSBBUkNISVZFX1dSSVRFX01BR0lDKSB7CkBAIC0zMDcsNyArMzAzLDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIHRyYWlsZXJbOF07CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKLQlpbnQgcmV0LCByMTsKKwlpbnQgcmV0OwogCiAJLyogRmluaXNoIGNvbXByZXNzaW9uIGN5Y2xlICovCiAJcmV0ID0gZHJpdmVfY29tcHJlc3NvcihmLCBkYXRhLCAxKTsKQEAgLTMzOCw4ICszMzQsNyBAQAogCQkgICAgIkZhaWxlZCB0byBjbGVhbiB1cCBjb21wcmVzc29yIik7CiAJCXJldCA9IEFSQ0hJVkVfRkFUQUw7CiAJfQotCXIxID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JcmV0dXJuIChyMSA8IHJldCA/IHIxIDogcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9sejQuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfbHo0LmMKaW5kZXggMTVmZDQ5NC4uY2YxOWZhZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9sejQuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2x6NC5jCkBAIC0yMjMsMTYgKzIyMywxMSBAQAogYXJjaGl2ZV9maWx0ZXJfbHo0X29wZW4oc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKWYtPmRhdGE7Ci0JaW50IHJldDsKIAlzaXplX3QgcmVxdWlyZWRfc2l6ZTsKIAlzdGF0aWMgc2l6ZV90IGNvbnN0IGJrbWFwW10gPSB7IDY0ICogMTAyNCwgMjU2ICogMTAyNCwgMSAqIDEwMjQgKiAxMDI0LAogCQkJICAgNCAqIDEwMjQgKiAxMDI0IH07CiAJc2l6ZV90IHByZV9ibG9ja19zaXplOwogCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiAocmV0KTsKLQogCWlmIChkYXRhLT5ibG9ja19tYXhpbXVtX3NpemUgPCA0KQogCQlkYXRhLT5ibG9ja19zaXplID0gYmttYXBbMF07CiAJZWxzZQpAQCAtMzQzLDcgKzMzOCw3IEBACiBhcmNoaXZlX2ZpbHRlcl9sejRfY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKWYtPmRhdGE7Ci0JaW50IHJldCwgcjE7CisJaW50IHJldDsKIAogCS8qIEZpbmlzaCBjb21wcmVzc2lvbiBjeWNsZS4gKi8KIAlyZXQgPSAoaW50KWx6NF93cml0ZV9vbmVfYmxvY2soZiwgTlVMTCwgMCk7CkBAIC0zNjYsOSArMzYxLDcgQEAKIAkJcmV0ID0gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlciwKIAkJCSAgICBkYXRhLT5vdXRfYnVmZmVyLCBkYXRhLT5vdXQgLSBkYXRhLT5vdXRfYnVmZmVyKTsKIAl9Ci0KLQlyMSA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCXJldHVybiAocjEgPCByZXQgPyByMSA6IHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9sem9wLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2x6b3AuYwppbmRleCBhZDcwNWM0Li4zYmQ5MDYyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2x6b3AuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX2x6b3AuYwpAQCAtMjI4LDExICsyMjgsNiBAQAogYXJjaGl2ZV93cml0ZV9sem9wX29wZW4oc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCB3cml0ZV9sem9wICpkYXRhID0gKHN0cnVjdCB3cml0ZV9sem9wICopZi0+ZGF0YTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocmV0KTsKIAogCXN3aXRjaCAoZGF0YS0+Y29tcHJlc3Npb25fbGV2ZWwpIHsKIAljYXNlIDE6CkBAIC00MzksMTAgKzQzNCw3IEBACiAJfQogCS8qIFdyaXRlIGEgemVybyB1bmNvbXByZXNzZWQgc2l6ZSBhcyB0aGUgZW5kIG1hcmsgb2YgdGhlIHNlcmllcyBvZgogCSAqIGNvbXByZXNzZWQgYmxvY2suICovCi0JciA9IF9fYXJjaGl2ZV93cml0ZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIsICZlbmRtYXJrLCBzaXplb2YoZW5kbWFyaykpOwotCWlmIChyICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocik7Ci0JcmV0dXJuIChfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKSk7CisJcmV0dXJuIF9fYXJjaGl2ZV93cml0ZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIsICZlbmRtYXJrLCBzaXplb2YoZW5kbWFyaykpOwogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9wcm9ncmFtLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3Byb2dyYW0uYwppbmRleCA2NjBmNjkzLi5hNGJjMWQ5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3Byb2dyYW0uYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3Byb2dyYW0uYwpAQCAtMjEyLDExICsyMTIsNiBAQAogICAgIHN0cnVjdCBhcmNoaXZlX3dyaXRlX3Byb2dyYW1fZGF0YSAqZGF0YSwgY29uc3QgY2hhciAqY21kKQogewogCXBpZF90IGNoaWxkOwotCWludCByZXQ7Ci0KLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgIT0gQVJDSElWRV9PSykKLQkJcmV0dXJuIChyZXQpOwogCiAJaWYgKGRhdGEtPmNoaWxkX2J1ZiA9PSBOVUxMKSB7CiAJCWRhdGEtPmNoaWxkX2J1Zl9sZW4gPSA2NTUzNjsKQEAgLTM1MywxMSArMzQ4LDExIEBACiBfX2FyY2hpdmVfd3JpdGVfcHJvZ3JhbV9jbG9zZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYsCiAgICAgc3RydWN0IGFyY2hpdmVfd3JpdGVfcHJvZ3JhbV9kYXRhICpkYXRhKQogewotCWludCByZXQsIHIxLCBzdGF0dXM7CisJaW50IHJldCwgc3RhdHVzOwogCXNzaXplX3QgYnl0ZXNfcmVhZDsKIAogCWlmIChkYXRhLT5jaGlsZCA9PSAwKQotCQlyZXR1cm4gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7CisJCXJldHVybiBBUkNISVZFX09LOwogCiAJcmV0ID0gMDsKIAljbG9zZShkYXRhLT5jaGlsZF9zdGRpbik7CkBAIC00MDksNyArNDA0LDYgQEAKIAkJICAgICJFcnJvciBjbG9zaW5nIHByb2dyYW06ICVzIiwgZGF0YS0+cHJvZ3JhbV9uYW1lKTsKIAkJcmV0ID0gQVJDSElWRV9GQVRBTDsKIAl9Ci0JcjEgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlyZXR1cm4gKHIxIDwgcmV0ID8gcjEgOiByZXQpOworCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfdXVlbmNvZGUuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfdXVlbmNvZGUuYwppbmRleCAyM2Q5YzE1Li4xYWQ0NTg5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3V1ZW5jb2RlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl91dWVuY29kZS5jCkBAIC0xMzgsMTEgKzEzOCw2IEBACiB7CiAJc3RydWN0IHByaXZhdGVfdXVlbmNvZGUgKnN0YXRlID0gKHN0cnVjdCBwcml2YXRlX3V1ZW5jb2RlICopZi0+ZGF0YTsKIAlzaXplX3QgYnMgPSA2NTUzNiwgYnBiOwotCWludCByZXQ7Ci0KLQlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3Blbl9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCWlmIChyZXQgIT0gQVJDSElWRV9PSykKLQkJcmV0dXJuIChyZXQpOwogCiAJaWYgKGYtPmFyY2hpdmUtPm1hZ2ljID09IEFSQ0hJVkVfV1JJVEVfTUFHSUMpIHsKIAkJLyogQnVmZmVyIHNpemUgc2hvdWxkIGJlIGEgbXVsdGlwbGUgbnVtYmVyIG9mIHRoZSBvZiBieXRlcwpAQCAtMjU3LDcgKzI1Miw2IEBACiBhcmNoaXZlX2ZpbHRlcl91dWVuY29kZV9jbG9zZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCiB7CiAJc3RydWN0IHByaXZhdGVfdXVlbmNvZGUgKnN0YXRlID0gKHN0cnVjdCBwcml2YXRlX3V1ZW5jb2RlICopZi0+ZGF0YTsKLQlpbnQgcmV0LCByZXQyOwogCiAJLyogRmx1c2ggcmVtYWluaW5nIGJ5dGVzLiAqLwogCWlmIChzdGF0ZS0+aG9sZF9sZW4gIT0gMCkKQEAgLTI2NSwxMiArMjU5LDggQEAKIAlhcmNoaXZlX3N0cmluZ19zcHJpbnRmKCZzdGF0ZS0+ZW5jb2RlZF9idWZmLCAiYFxuZW5kXG4iKTsKIAkvKiBXcml0ZSB0aGUgbGFzdCBibG9jayAqLwogCWFyY2hpdmVfd3JpdGVfc2V0X2J5dGVzX2luX2xhc3RfYmxvY2soZi0+YXJjaGl2ZSwgMSk7Ci0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlciwKKwlyZXR1cm4gX19hcmNoaXZlX3dyaXRlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlciwKIAkgICAgc3RhdGUtPmVuY29kZWRfYnVmZi5zLCBhcmNoaXZlX3N0cmxlbigmc3RhdGUtPmVuY29kZWRfYnVmZikpOwotCXJldDIgPSBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ID4gcmV0MikKLQkJcmV0ID0gcmV0MjsKLQlyZXR1cm4gKHJldCk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfeHouYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfeHouYwppbmRleCBlNGEzNTM1Li5kNTY3YWM5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3h6LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl94ei5jCkBAIC0zOSw3ICszOSw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDx0aW1lLmg+CiAjaWZkZWYgSEFWRV9MWk1BX0gKLSNpbmNsdWRlIDxjbV9sem1hLmg+CisjaW5jbHVkZSA8Y20zcC9sem1hLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTMwOSwxMCArMzA5LDYgQEAKIAlzdHJ1Y3QgcHJpdmF0ZV9kYXRhICpkYXRhID0gZi0+ZGF0YTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocmV0KTsKLQogCWlmIChkYXRhLT5jb21wcmVzc2VkID09IE5VTEwpIHsKIAkJc2l6ZV90IGJzID0gNjU1MzYsIGJwYjsKIAkJaWYgKGYtPmFyY2hpdmUtPm1hZ2ljID09IEFSQ0hJVkVfV1JJVEVfTUFHSUMpIHsKQEAgLTM5MCwxMCArMzg2LDEzIEBACiAJCQlkYXRhLT5jb21wcmVzc2lvbl9sZXZlbCA9IDY7CiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAJfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAidGhyZWFkcyIpID09IDApIHsKKwkJY2hhciAqZW5kcHRyOworCiAJCWlmICh2YWx1ZSA9PSBOVUxMKQogCQkJcmV0dXJuIChBUkNISVZFX1dBUk4pOwotCQlkYXRhLT50aHJlYWRzID0gKGludClzdHJ0b3VsKHZhbHVlLCBOVUxMLCAxMCk7Ci0JCWlmIChkYXRhLT50aHJlYWRzID09IDAgJiYgZXJybm8gIT0gMCkgeworCQllcnJubyA9IDA7CisJCWRhdGEtPnRocmVhZHMgPSAoaW50KXN0cnRvdWwodmFsdWUsICZlbmRwdHIsIDEwKTsKKwkJaWYgKGVycm5vICE9IDAgfHwgKmVuZHB0ciAhPSAnXDAnKSB7CiAJCQlkYXRhLT50aHJlYWRzID0gMTsKIAkJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKIAkJfQpAQCAtNDQ1LDcgKzQ0NCw3IEBACiBhcmNoaXZlX2NvbXByZXNzb3JfeHpfY2xvc2Uoc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyICpmKQogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByaXZhdGVfZGF0YSAqKWYtPmRhdGE7Ci0JaW50IHJldCwgcjE7CisJaW50IHJldDsKIAogCXJldCA9IGRyaXZlX2NvbXByZXNzb3IoZiwgZGF0YSwgMSk7CiAJaWYgKHJldCA9PSBBUkNISVZFX09LKSB7CkBAIC00NjMsOCArNDYyLDcgQEAKIAkJfQogCX0KIAlsem1hX2VuZCgmKGRhdGEtPnN0cmVhbSkpOwotCXIxID0gX19hcmNoaXZlX3dyaXRlX2Nsb3NlX2ZpbHRlcihmLT5uZXh0X2ZpbHRlcik7Ci0JcmV0dXJuIChyMSA8IHJldCA/IHIxIDogcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3pzdGQuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfenN0ZC5jCmluZGV4IDI1MWIxN2QuLmY2N2IwMjUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfenN0ZC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfenN0ZC5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pTVERfSAotI2luY2x1ZGUgPGNtX3pzdGQuaD4KKyNpbmNsdWRlIDxjbTNwL3pzdGQuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpAQCAtMTcyLDExICsxNzIsNiBAQAogYXJjaGl2ZV9jb21wcmVzc29yX3pzdGRfb3BlbihzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCiB7CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKGYtPm5leHRfZmlsdGVyKTsKLQlpZiAocmV0ICE9IEFSQ0hJVkVfT0spCi0JCXJldHVybiAocmV0KTsKIAogCWlmIChkYXRhLT5vdXQuZHN0ID09IE5VTEwpIHsKIAkJc2l6ZV90IGJzID0gWlNURF9DU3RyZWFtT3V0U2l6ZSgpLCBicGI7CkBAIC0yMzgsMTQgKzIzMyw5IEBACiBhcmNoaXZlX2NvbXByZXNzb3JfenN0ZF9jbG9zZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9maWx0ZXIgKmYpCiB7CiAJc3RydWN0IHByaXZhdGVfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJpdmF0ZV9kYXRhICopZi0+ZGF0YTsKLQlpbnQgcjEsIHIyOwogCiAJLyogRmluaXNoIHpzdGQgZnJhbWUgKi8KLQlyMSA9IGRyaXZlX2NvbXByZXNzb3IoZiwgZGF0YSwgMSwgTlVMTCwgMCk7Ci0KLQlyMiA9IF9fYXJjaGl2ZV93cml0ZV9jbG9zZV9maWx0ZXIoZi0+bmV4dF9maWx0ZXIpOwotCi0JcmV0dXJuIHIxIDwgcjIgPyByMSA6IHIyOworCXJldHVybiBkcml2ZV9jb21wcmVzc29yKGYsIGRhdGEsIDEsIE5VTEwsIDApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfYmxvY2tzaXplLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9ibG9ja3NpemUuMwppbmRleCBhZmQ4NGVhLi40OTczZjk5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9ibG9ja3NpemUuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9ibG9ja3NpemUuMwpAQCAtMTA3LDggKzEwNyw4IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kYXRhLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kYXRhLjMKaW5kZXggOWMxNmNkOS4uYmMyMDhiNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGF0YS4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2RhdGEuMwpAQCAtODIsOSArODIsOSBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2ZpbmlzaF9lbnRyeSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCmluZGV4IDk0OWM5ZWYuLjJmYTAxNmUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMKQEAgLTI0LDcgKzI0LDcgQEAKIC5cIgogLlwiICRGcmVlQlNEJAogLlwiCi0uRGQgQXByaWwgMywgMjAxNworLkRkIEphbnVhcnkgMTksIDIwMjAKIC5EdCBBUkNISVZFX1dSSVRFX0RJU0sgMwogLk9zCiAuU2ggTkFNRQpAQCAtMTEzLDcgKzExMyw4IEBACiAuUHEgRnJlZUJTRCwgTWFjIE9TIFgKIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGZpbGUgYXR0cmlidXRlcy4KIC5JdCBDbSBBUkNISVZFX0VYVFJBQ1RfTUFDX01FVEFEQVRBCi1NYWMgT1MgWCBzcGVjaWZpYy4gUmVzdG9yZSBtZXRhZGF0YSB1c2luZworTWFjIE9TIFggc3BlY2lmaWMuCitSZXN0b3JlIG1ldGFkYXRhIHVzaW5nCiAuWHIgY29weWZpbGUgMyAuCiBCeSBkZWZhdWx0LAogLlhyIGNvcHlmaWxlIDMKQEAgLTEzOCw2ICsxMzksMTEgQEAKIGlmIHRoZSBkZWZhdWx0IHVzZXIgYW5kIGdyb3VwIElEcyBvZiBuZXdseS1jcmVhdGVkIG9iamVjdHMgb24gZGlzawogaGFwcGVuIHRvIG1hdGNoIHRob3NlIHNwZWNpZmllZCBpbiB0aGUgYXJjaGl2ZSBlbnRyeS4KIEJ5IGRlZmF1bHQsIG9ubHkgYmFzaWMgcGVybWlzc2lvbnMgYXJlIHJlc3RvcmVkLCBhbmQgdW1hc2sgaXMgb2JleWVkLgorLkl0IENtIEFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUworRXh0cmFjdCBmaWxlcyBhdG9taWNhbGx5LCBieSBmaXJzdCBjcmVhdGluZyBhIHVuaXF1ZSB0ZW1wb3JhcnkgZmlsZSBhbmQgdGhlbgorcmVuYW1pbmcgaXQgdG8gaXRzIHJlcXVpcmVkIGRlc3RpbmF0aW9uIG5hbWUuCitUaGlzIGF2b2lkcyBhIHJhY2Ugd2hlcmUgYW4gYXBwbGljYXRpb24gbWlnaHQgc2VlIGEgcGFydGlhbCBmaWxlIChvciBubworZmlsZSkgZHVyaW5nIGV4dHJhY3Rpb24uCiAuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMKIFJlZnVzZSB0byBleHRyYWN0IGFuIGFic29sdXRlIHBhdGguCiBUaGUgZGVmYXVsdCBpcyB0byBub3QgcmVmdXNlIHN1Y2ggcGF0aHMuCkBAIC0yNjQsOSArMjcwLDkgQEAKIGZ1bmN0aW9ucy4KIC5cIgogLlNoIFNFRSBBTFNPCisuWHIgdGFyIDEgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3dyaXRlIDMgLAotLlhyIHRhciAxICwKIC5YciBsaWJhcmNoaXZlIDMKIC5TaCBISVNUT1JZCiBUaGUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYwppbmRleCBhZmZhNTAzLi5jNGJlOWIwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCkBAIC0xMzEsNyArMTMxLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogLyogVE9ETzogU3VwcG9ydCBNYWMgT1MgJ3F1YXJhbnRpbmUnIGZlYXR1cmUuICBUaGlzIGlzIHJlYWxseSBqdXN0IGEKQEAgLTE2NSw2ICsxNjUsMTAgQEAKICNkZWZpbmUgT19OT0ZPTExPVyAwCiAjZW5kaWYKIAorI2lmbmRlZiBBVF9GRENXRAorI2RlZmluZSBBVF9GRENXRCAtMTAwCisjZW5kaWYKKwogc3RydWN0IGZpeHVwX2VudHJ5IHsKIAlzdHJ1Y3QgZml4dXBfZW50cnkJKm5leHQ7CiAJc3RydWN0IGFyY2hpdmVfYWNsCSBhY2w7CkBAIC0yNDksNiArMjUzLDggQEAKIAlzdHJ1Y3QgYXJjaGl2ZV9lbnRyeQkqZW50cnk7IC8qIEVudHJ5IGJlaW5nIGV4dHJhY3RlZC4gKi8KIAljaGFyCQkJKm5hbWU7IC8qIE5hbWUgb2YgZW50cnksIHBvc3NpYmx5IGVkaXRlZC4gKi8KIAlzdHJ1Y3QgYXJjaGl2ZV9zdHJpbmcJIF9uYW1lX2RhdGE7IC8qIGJhY2tpbmcgc3RvcmUgZm9yICduYW1lJyAqLworCWNoYXIJCQkqdG1wbmFtZTsgLyogVGVtcG9yYXJ5IG5hbWUgKiAqLworCXN0cnVjdCBhcmNoaXZlX3N0cmluZwkgX3RtcG5hbWVfZGF0YTsgLyogYmFja2luZyBzdG9yZSBmb3IgJ3RtcG5hbWUnICovCiAJLyogVGFza3MgcmVtYWluaW5nIGZvciB0aGlzIG9iamVjdC4gKi8KIAlpbnQJCQkgdG9kbzsKIAkvKiBUYXNrcyBkZWZlcnJlZCB1bnRpbCBlbmQtb2YtYXJjaGl2ZS4gKi8KQEAgLTM0OCw2ICszNTQsOSBAQAogCiAjZGVmaW5lIEhGU19CTE9DS1MocykJKChzKSA+PiAxMikKIAorCitzdGF0aWMgaW50CWxhX29wZW5kaXJhdChpbnQsIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50CWxhX21rdGVtcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIHZvaWQJZnNvYmpfZXJyb3IoaW50ICosIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqLCBpbnQsIGNvbnN0IGNoYXIgKiwKIAkJICAgIGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgaW50CWNoZWNrX3N5bWxpbmtzX2Zzb2JqKGNoYXIgKiwgaW50ICosIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqLApAQCAtNDAxLDYgKzQxMCw2MSBAQAogCQkgICAgc2l6ZV90LCBpbnQ2NF90KTsKIAogc3RhdGljIGludAorbGFfbWt0ZW1wKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCit7CisJaW50IG9lcnJubywgZmQ7CisJbW9kZV90IG1vZGU7CisKKwlhcmNoaXZlX3N0cmluZ19lbXB0eSgmYS0+X3RtcG5hbWVfZGF0YSk7CisJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZigmYS0+X3RtcG5hbWVfZGF0YSwgIiVzLlhYWFhYWCIsIGEtPm5hbWUpOworCWEtPnRtcG5hbWUgPSBhLT5fdG1wbmFtZV9kYXRhLnM7CisKKwlmZCA9IF9fYXJjaGl2ZV9ta3N0ZW1wKGEtPnRtcG5hbWUpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJbW9kZSA9IGEtPm1vZGUgJiAwNzc3ICYgfmEtPnVzZXJfdW1hc2s7CisJaWYgKGZjaG1vZChmZCwgbW9kZSkgPT0gLTEpIHsKKwkJb2Vycm5vID0gZXJybm87CisJCWNsb3NlKGZkKTsKKwkJZXJybm8gPSBvZXJybm87CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgaW50CitsYV9vcGVuZGlyYXQoaW50IGZkLCBjb25zdCBjaGFyICpwYXRoKSB7CisJY29uc3QgaW50IGZsYWdzID0gT19DTE9FWEVDCisjaWYgZGVmaW5lZChPX0JJTkFSWSkKKwkgICAgfCBPX0JJTkFSWQorI2VuZGlmCisjaWYgZGVmaW5lZChPX0RJUkVDVE9SWSkKKwkgICAgfCBPX0RJUkVDVE9SWQorI2VuZGlmCisjaWYgZGVmaW5lZChPX1BBVEgpCisJICAgIHwgT19QQVRICisjZWxpZiBkZWZpbmVkKE9fU0VBUkNIKQorCSAgICB8IE9fU0VBUkNICisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKE9fRVhFQykKKwkgICAgfCBPX0VYRUMKKyNlbHNlCisJICAgIHwgT19SRE9OTFkKKyNlbmRpZgorCSAgICA7CisKKyNpZiAhZGVmaW5lZChIQVZFX09QRU5BVCkKKwlpZiAoZmQgIT0gQVRfRkRDV0QpIHsKKwkJZXJybm8gPSBFTk9UU1VQOworCQlyZXR1cm4gKC0xKTsKKwl9IGVsc2UKKwkJcmV0dXJuIChvcGVuKHBhdGgsIGZsYWdzKSk7CisjZWxzZQorCXJldHVybiAob3BlbmF0KGZkLCBwYXRoLCBmbGFncykpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKIGxhenlfc3RhdChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQogewogCWlmIChhLT5wc3QgIT0gTlVMTCkgewpAQCAtMTcwNSw2ICsxNzY5LDIwIEBACiAJfQogCiAJLyoKKwkgKiBIWVBPVEhFU0lTOgorCSAqIElmIHdlJ3JlIG5vdCByb290LCB3ZSB3b24ndCBiZSBzZXR0aW5nIGFueSBzZWN1cml0eQorCSAqIGF0dHJpYnV0ZXMgdGhhdCBtYXkgYmUgd2lwZWQgYnkgdGhlIHNldF9tb2RlKCkgcm91dGluZQorCSAqIGJlbG93LiAgV2UgYWxzbyBjYW4ndCBzZXQgeGF0dHIgb24gbm9uLW93bmVyLXdyaXRhYmxlIGZpbGVzLAorCSAqIHdoaWNoIG1heSBiZSB0aGUgc3RhdGUgYWZ0ZXIgc2V0X21vZGUoKS4gUGVyZm9ybQorCSAqIHNldF94YXR0cnMoKSBmaXJzdCBiYXNlZCBvbiB0aGVzZSBjb25zdHJhaW50cy4KKwkgKi8KKwlpZiAoYS0+dXNlcl91aWQgIT0gMCAmJgorCSAgICAoYS0+dG9kbyAmIFRPRE9fWEFUVFIpKSB7CisJCWludCByMiA9IHNldF94YXR0cnMoYSk7CisJCWlmIChyMiA8IHJldCkgcmV0ID0gcjI7CisJfQorCisJLyoKIAkgKiBzZXRfbW9kZSBtdXN0IHByZWNlZGUgQUNMcyBvbiBzeXN0ZW1zIHN1Y2ggYXMgU29sYXJpcyBhbmQKIAkgKiBGcmVlQlNEIHdoZXJlIHNldHRpbmcgdGhlIG1vZGUgaW1wbGljaXRseSBjbGVhcnMgZXh0ZW5kZWQgQUNMcwogCSAqLwpAQCAtMTcxNyw4ICsxNzk1LDEwIEBACiAJICogU2VjdXJpdHktcmVsYXRlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIChzdWNoIGFzCiAJICogc2VjdXJpdHkuY2FwYWJpbGl0eSBvbiBMaW51eCkgaGF2ZSB0byBiZSByZXN0b3JlZCBsYXN0LAogCSAqIHNpbmNlIHRoZXkncmUgaW1wbGljaXRseSByZW1vdmVkIGJ5IG90aGVyIGZpbGUgY2hhbmdlcy4KKwkgKiBXZSBkbyB0aGlzIGxhc3Qgb25seSB3aGVuIHJvb3QuCiAJICovCi0JaWYgKGEtPnRvZG8gJiBUT0RPX1hBVFRSKSB7CisJaWYgKGEtPnVzZXJfdWlkID09IDAgJiYKKwkgICAgKGEtPnRvZG8gJiBUT0RPX1hBVFRSKSkgewogCQlpbnQgcjIgPSBzZXRfeGF0dHJzKGEpOwogCQlpZiAocjIgPCByZXQpIHJldCA9IHIyOwogCX0KQEAgLTE3NzMsMTIgKzE4NTMsMTggQEAKIAlpZiAoYS0+ZmQgPj0gMCkgewogCQljbG9zZShhLT5mZCk7CiAJCWEtPmZkID0gLTE7CisJCWlmIChhLT50bXBuYW1lKSB7CisJCQlpZiAocmVuYW1lKGEtPnRtcG5hbWUsIGEtPm5hbWUpID09IC0xKSB7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAorCQkJCSAgICAicmVuYW1lIGZhaWxlZCIpOworCQkJCXJldCA9IEFSQ0hJVkVfRkFUQUw7CisJCQl9CisJCQlhLT50bXBuYW1lID0gTlVMTDsKKwkJfQogCX0KIAkvKiBJZiB0aGVyZSdzIGFuIGVudHJ5LCB3ZSBjYW4gcmVsZWFzZSBpdCBub3cuICovCi0JaWYgKGEtPmVudHJ5KSB7Ci0JCWFyY2hpdmVfZW50cnlfZnJlZShhLT5lbnRyeSk7Ci0JCWEtPmVudHJ5ID0gTlVMTDsKLQl9CisJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKKwlhLT5lbnRyeSA9IE5VTEw7CiAJYS0+YXJjaGl2ZS5zdGF0ZSA9IEFSQ0hJVkVfU1RBVEVfSEVBREVSOwogCXJldHVybiAocmV0KTsKIH0KQEAgLTE4OTUsNyArMTk4MSw3IEBACiAJCXJldHVybjsKIAogCS8qIFRyeSB0byByZWNvcmQgb3VyIHN0YXJ0aW5nIGRpci4gKi8KLQlhLT5yZXN0b3JlX3B3ZCA9IG9wZW4oIi4iLCBPX1JET05MWSB8IE9fQklOQVJZIHwgT19DTE9FWEVDKTsKKwlhLT5yZXN0b3JlX3B3ZCA9IGxhX29wZW5kaXJhdChBVF9GRENXRCwgIi4iKTsKIAlfX2FyY2hpdmVfZW5zdXJlX2Nsb2V4ZWNfZmxhZyhhLT5yZXN0b3JlX3B3ZCk7CiAJaWYgKGEtPnJlc3RvcmVfcHdkIDwgMCkKIAkJcmV0dXJuOwpAQCAtMjAxOCw3ICsyMTA0LDcgQEAKIAkJICogZm9sbG93IHRoZSBzeW1saW5rIGlmIHdlJ3JlIGNyZWF0aW5nIGEgZGlyLgogCQkgKi8KIAkJaWYgKFNfSVNESVIoYS0+bW9kZSkpCi0JCQlyID0gc3RhdChhLT5uYW1lLCAmYS0+c3QpOworCQkJciA9IGxhX3N0YXQoYS0+bmFtZSwgJmEtPnN0KTsKIAkJLyoKIAkJICogSWYgaXQncyBub3QgYSBkaXIgKG9yIGl0J3MgYSBicm9rZW4gc3ltbGluayksCiAJCSAqIHRoZW4gZG9uJ3QgZm9sbG93IGl0LgpAQCAtMjA1MiwxNyArMjEzOCwyOCBAQAogCQl9CiAKIAkJaWYgKCFTX0lTRElSKGEtPnN0LnN0X21vZGUpKSB7Ci0JCQkvKiBBIG5vbi1kaXIgaXMgaW4gdGhlIHdheSwgdW5saW5rIGl0LiAqLwogCQkJaWYgKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX0NMRUFSX05PQ0hBTkdFX0ZGTEFHUykKIAkJCQkodm9pZCljbGVhcl9ub2NoYW5nZV9mZmxhZ3MoYSk7Ci0JCQlpZiAodW5saW5rKGEtPm5hbWUpICE9IDApIHsKLQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCi0JCQkJICAgICJDYW4ndCB1bmxpbmsgYWxyZWFkeS1leGlzdGluZyBvYmplY3QiKTsKLQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKworCQkJaWYgKChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUykgJiYKKwkJCSAgICBTX0lTUkVHKGEtPnN0LnN0X21vZGUpKSB7CisJCQkJLyogVXNlIGEgdGVtcG9yYXJ5IGZpbGUgdG8gZXh0cmFjdCAqLworCQkJCWlmICgoYS0+ZmQgPSBsYV9ta3RlbXAoYSkpID09IC0xKQorCQkJCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CisJCQkJYS0+cHN0ID0gTlVMTDsKKwkJCQllbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCS8qIEEgbm9uLWRpciBpcyBpbiB0aGUgd2F5LCB1bmxpbmsgaXQuICovCisJCQkJaWYgKHVubGluayhhLT5uYW1lKSAhPSAwKSB7CisJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKKwkJCQkJICAgICJDYW4ndCB1bmxpbmsgYWxyZWFkeS1leGlzdGluZyAiCisJCQkJCSAgICAib2JqZWN0Iik7CisJCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQkJCX0KKwkJCQlhLT5wc3QgPSBOVUxMOworCQkJCS8qIFRyeSBhZ2Fpbi4gKi8KKwkJCQllbiA9IGNyZWF0ZV9maWxlc3lzdGVtX29iamVjdChhKTsKIAkJCX0KLQkJCWEtPnBzdCA9IE5VTEw7Ci0JCQkvKiBUcnkgYWdhaW4uICovCi0JCQllbiA9IGNyZWF0ZV9maWxlc3lzdGVtX29iamVjdChhKTsKIAkJfSBlbHNlIGlmICghU19JU0RJUihhLT5tb2RlKSkgewogCQkJLyogQSBkaXIgaXMgaW4gdGhlIHdheSBvZiBhIG5vbi1kaXIsIHJtZGlyIGl0LiAqLwogCQkJaWYgKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX0NMRUFSX05PQ0hBTkdFX0ZGTEFHUykKQEAgLTIxNjQsNiArMjI2MSwxMyBAQAogCQl9CiAJCWZyZWUobGlua25hbWVfY29weSk7CiAJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVycm9yX3N0cmluZyk7CisJCS8qCisJCSAqIFVubGlua2luZyBhbmQgbGlua2luZyBoZXJlIGlzIHJlYWxseSBub3QgYXRvbWljLAorCQkgKiBidXQgZG9pbmcgaXQgcmlnaHQsIHdvdWxkIHJlcXVpcmUgdXMgdG8gY29uc3RydWN0CisJCSAqIGFuIG1rdGVtcGxpbmsoKSBmdW5jdGlvbiwgYW5kIHRoZW4gdXNlIHJlbmFtZSgyKS4KKwkJICovCisJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUykKKwkJCXVubGluayhhLT5uYW1lKTsKIAkJciA9IGxpbmsobGlua25hbWUsIGEtPm5hbWUpID8gZXJybm8gOiAwOwogCQkvKgogCQkgKiBOZXcgY3BpbyBhbmQgcGF4IGZvcm1hdHMgYWxsb3cgaGFyZGxpbmsgZW50cmllcwpAQCAtMjE4NCw3ICsyMjg4LDcgQEAKICNpZmRlZiBIQVZFX0xTVEFUCiAJCQlyID0gbHN0YXQoYS0+bmFtZSwgJnN0KTsKICNlbHNlCi0JCQlyID0gc3RhdChhLT5uYW1lLCAmc3QpOworCQkJciA9IGxhX3N0YXQoYS0+bmFtZSwgJnN0KTsKICNlbmRpZgogCQkJaWYgKHIgIT0gMCkKIAkJCQlyID0gZXJybm87CkBAIC0yMjAyLDYgKzIzMDYsMTMgQEAKIAlsaW5rbmFtZSA9IGFyY2hpdmVfZW50cnlfc3ltbGluayhhLT5lbnRyeSk7CiAJaWYgKGxpbmtuYW1lICE9IE5VTEwpIHsKICNpZiBIQVZFX1NZTUxJTksKKwkJLyoKKwkJICogVW5saW5raW5nIGFuZCBsaW5raW5nIGhlcmUgaXMgcmVhbGx5IG5vdCBhdG9taWMsCisJCSAqIGJ1dCBkb2luZyBpdCByaWdodCwgd291bGQgcmVxdWlyZSB1cyB0byBjb25zdHJ1Y3QKKwkJICogYW4gbWt0ZW1wc3ltbGluaygpIGZ1bmN0aW9uLCBhbmQgdGhlbiB1c2UgcmVuYW1lKDIpLgorCQkgKi8KKwkJaWYgKGEtPmZsYWdzICYgQVJDSElWRV9FWFRSQUNUX1NBRkVfV1JJVEVTKQorCQkJdW5saW5rKGEtPm5hbWUpOwogCQlyZXR1cm4gc3ltbGluayhsaW5rbmFtZSwgYS0+bmFtZSkgPyBlcnJubyA6IDA7CiAjZWxzZQogCQlyZXR1cm4gKEVQRVJNKTsKQEAgLTIyMjMsMTEgKzIzMzQsMjEgQEAKIAkgKi8KIAltb2RlID0gZmluYWxfbW9kZSAmIDA3NzcgJiB+YS0+dXNlcl91bWFzazsKIAorCS8qIAorCSAqIEFsd2F5cyBjcmVhdGUgd3JpdGFibGUgc3VjaCB0aGF0IFtmXXNldHhhdHRyKCkgd29ya3MgaWYgd2UncmUgbm90CisJICogcm9vdC4KKwkgKi8KKwlpZiAoYS0+dXNlcl91aWQgIT0gMCAmJgorCSAgICBhLT50b2RvICYgKFRPRE9fSEZTX0NPTVBSRVNTSU9OIHwgVE9ET19YQVRUUikpIHsKKwkJbW9kZSB8PSAwMjAwOworCX0KKwogCXN3aXRjaCAoYS0+bW9kZSAmIEFFX0lGTVQpIHsKIAlkZWZhdWx0OgogCQkvKiBQT1NJWCByZXF1aXJlcyB0aGF0IHdlIGZhbGwgdGhyb3VnaCBoZXJlLiAqLwogCQkvKiBGQUxMVEhST1VHSCAqLwogCWNhc2UgQUVfSUZSRUc6CisJCWEtPnRtcG5hbWUgPSBOVUxMOwogCQlhLT5mZCA9IG9wZW4oYS0+bmFtZSwKIAkJICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCB8IE9fQklOQVJZIHwgT19DTE9FWEVDLCBtb2RlKTsKIAkJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcoYS0+ZmQpOwpAQCAtMjMxOSw3ICsyNDQwLDcgQEAKIHsKIAlzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphID0gKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKilfYTsKIAlzdHJ1Y3QgZml4dXBfZW50cnkgKm5leHQsICpwOwotCWludCByZXQ7CisJaW50IGZkLCByZXQ7CiAKIAlhcmNoaXZlX2NoZWNrX21hZ2ljKCZhLT5hcmNoaXZlLCBBUkNISVZFX1dSSVRFX0RJU0tfTUFHSUMsCiAJICAgIEFSQ0hJVkVfU1RBVEVfSEVBREVSIHwgQVJDSElWRV9TVEFURV9EQVRBLApAQCAtMjMzMCwyMSArMjQ1MSwzMyBAQAogCXAgPSBzb3J0X2Rpcl9saXN0KGEtPmZpeHVwX2xpc3QpOwogCiAJd2hpbGUgKHAgIT0gTlVMTCkgeworCQlmZCA9IC0xOwogCQlhLT5wc3QgPSBOVUxMOyAvKiBNYXJrIHN0YXQgY2FjaGUgYXMgb3V0LW9mLWRhdGUuICovCisJCWlmIChwLT5maXh1cCAmCisJCSAgICAoVE9ET19USU1FUyB8IFRPRE9fTU9ERV9CQVNFIHwgVE9ET19BQ0xTIHwgVE9ET19GRkxBR1MpKSB7CisJCQlmZCA9IG9wZW4ocC0+bmFtZSwKKwkJCSAgICBPX1dST05MWSB8IE9fQklOQVJZIHwgT19OT0ZPTExPVyB8IE9fQ0xPRVhFQyk7CisJCX0KIAkJaWYgKHAtPmZpeHVwICYgVE9ET19USU1FUykgewotCQkJc2V0X3RpbWVzKGEsIC0xLCBwLT5tb2RlLCBwLT5uYW1lLAorCQkJc2V0X3RpbWVzKGEsIGZkLCBwLT5tb2RlLCBwLT5uYW1lLAogCQkJICAgIHAtPmF0aW1lLCBwLT5hdGltZV9uYW5vcywKIAkJCSAgICBwLT5iaXJ0aHRpbWUsIHAtPmJpcnRodGltZV9uYW5vcywKIAkJCSAgICBwLT5tdGltZSwgcC0+bXRpbWVfbmFub3MsCiAJCQkgICAgcC0+Y3RpbWUsIHAtPmN0aW1lX25hbm9zKTsKIAkJfQotCQlpZiAocC0+Zml4dXAgJiBUT0RPX01PREVfQkFTRSkKKwkJaWYgKHAtPmZpeHVwICYgVE9ET19NT0RFX0JBU0UpIHsKKyNpZmRlZiBIQVZFX0ZDSE1PRAorCQkJaWYgKGZkID49IDApCisJCQkJZmNobW9kKGZkLCBwLT5tb2RlKTsKKwkJCWVsc2UKKyNlbmRpZgogCQkJY2htb2QocC0+bmFtZSwgcC0+bW9kZSk7CisJCX0KIAkJaWYgKHAtPmZpeHVwICYgVE9ET19BQ0xTKQotCQkJYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9hY2xzKCZhLT5hcmNoaXZlLCAtMSwgcC0+bmFtZSwKLQkJCSAgICAmcC0+YWNsLCBwLT5tb2RlKTsKKwkJCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfYWNscygmYS0+YXJjaGl2ZSwgZmQsCisJCQkgICAgcC0+bmFtZSwgJnAtPmFjbCwgcC0+bW9kZSk7CiAJCWlmIChwLT5maXh1cCAmIFRPRE9fRkZMQUdTKQotCQkJc2V0X2ZmbGFnc19wbGF0Zm9ybShhLCAtMSwgcC0+bmFtZSwKKwkJCXNldF9mZmxhZ3NfcGxhdGZvcm0oYSwgZmQsIHAtPm5hbWUsCiAJCQkgICAgcC0+bW9kZSwgcC0+ZmZsYWdzX3NldCwgMCk7CiAJCWlmIChwLT5maXh1cCAmIFRPRE9fTUFDX01FVEFEQVRBKQogCQkJc2V0X21hY19tZXRhZGF0YShhLCBwLT5uYW1lLCBwLT5tYWNfbWV0YWRhdGEsCkBAIC0yMzUzLDYgKzI0ODYsOCBAQAogCQlhcmNoaXZlX2FjbF9jbGVhcigmcC0+YWNsKTsKIAkJZnJlZShwLT5tYWNfbWV0YWRhdGEpOwogCQlmcmVlKHAtPm5hbWUpOworCQlpZiAoZmQgPj0gMCkKKwkJCWNsb3NlKGZkKTsKIAkJZnJlZShwKTsKIAkJcCA9IG5leHQ7CiAJfQpAQCAtMjM3Myw5ICsyNTA4LDkgQEAKIAlyZXQgPSBfYXJjaGl2ZV93cml0ZV9kaXNrX2Nsb3NlKCZhLT5hcmNoaXZlKTsKIAlhcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X2dyb3VwX2xvb2t1cCgmYS0+YXJjaGl2ZSwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJYXJjaGl2ZV93cml0ZV9kaXNrX3NldF91c2VyX2xvb2t1cCgmYS0+YXJjaGl2ZSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JaWYgKGEtPmVudHJ5KQotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOworCWFyY2hpdmVfZW50cnlfZnJlZShhLT5lbnRyeSk7CiAJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmYS0+X25hbWVfZGF0YSk7CisJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmYS0+X3RtcG5hbWVfZGF0YSk7CiAJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmYS0+YXJjaGl2ZS5lcnJvcl9zdHJpbmcpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmEtPnBhdGhfc2FmZSk7CiAJYS0+YXJjaGl2ZS5tYWdpYyA9IDA7CkBAIC0yNTE4LDggKzI2NTMsNiBAQAogICogc2NhbiB0aGUgcGF0aCBhbmQgYm90aCBjYW4gYmUgb3B0aW1pemVkIGJ5IGNvbXBhcmluZyBhZ2FpbnN0IG90aGVyCiAgKiByZWNlbnQgcGF0aHMuCiAgKi8KLS8qIFRPRE86IEV4dGVuZCB0aGlzIHRvIHN1cHBvcnQgc3ltbGlua3Mgb24gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIuICovCi0KIC8qCiAgKiBDaGVja3MgdGhlIGdpdmVuIHBhdGggdG8gc2VlIGlmIGFueSBlbGVtZW50cyBhbG9uZyBpdCBhcmUgc3ltbGlua3MuICBSZXR1cm5zCiAgKiBBUkNISVZFX09LIGlmIHRoZXJlIGFyZSBub25lLCBvdGhlcndpc2UgcHV0cyBhbiBlcnJvciBpbiBlcnJtc2cuCkBAIC0yNTI4LDcgKzI2NjEsOCBAQAogY2hlY2tfc3ltbGlua3NfZnNvYmooY2hhciAqcGF0aCwgaW50ICphX2Vubywgc3RydWN0IGFyY2hpdmVfc3RyaW5nICphX2VzdHIsCiAgICAgaW50IGZsYWdzKQogewotI2lmICFkZWZpbmVkKEhBVkVfTFNUQVQpCisjaWYgIWRlZmluZWQoSEFWRV9MU1RBVCkgJiYgXAorICAgICEoZGVmaW5lZChIQVZFX09QRU5BVCkgJiYgZGVmaW5lZChIQVZFX0ZTVEFUQVQpICYmIGRlZmluZWQoSEFWRV9VTkxJTktBVCkpCiAJLyogUGxhdGZvcm0gZG9lc24ndCBoYXZlIGxzdGF0LCBzbyB3ZSBjYW4ndCBsb29rIGZvciBzeW1saW5rcy4gKi8KIAkodm9pZClwYXRoOyAvKiBVTlVTRUQgKi8KIAkodm9pZCllcnJvcl9udW1iZXI7IC8qIFVOVVNFRCAqLwpAQCAtMjU0Myw3ICsyNjc3LDEwIEBACiAJY2hhciBjOwogCWludCByOwogCXN0cnVjdCBzdGF0IHN0OwotCWludCByZXN0b3JlX3B3ZDsKKwlpbnQgY2hkaXJfZmQ7CisjaWYgZGVmaW5lZChIQVZFX09QRU5BVCkgJiYgZGVmaW5lZChIQVZFX0ZTVEFUQVQpICYmIGRlZmluZWQoSEFWRV9VTkxJTktBVCkKKwlpbnQgZmQ7CisjZW5kaWYKIAogCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSBpZiBuYW1lIGlzIGVtcHR5ICovCiAJaWYocGF0aFswXSA9PSAnXDAnKQpAQCAtMjU2NCwxMCArMjcwMSwxMyBAQAogCSAqICBjIGhvbGRzIHdoYXQgdXNlZCB0byBiZSBpbiAqdGFpbAogCSAqICBsYXN0IGlzIDEgaWYgdGhpcyBpcyB0aGUgbGFzdCB0YWlsCiAJICovCi0JcmVzdG9yZV9wd2QgPSBvcGVuKCIuIiwgT19SRE9OTFkgfCBPX0JJTkFSWSB8IE9fQ0xPRVhFQyk7Ci0JX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcocmVzdG9yZV9wd2QpOwotCWlmIChyZXN0b3JlX3B3ZCA8IDApCisJY2hkaXJfZmQgPSBsYV9vcGVuZGlyYXQoQVRfRkRDV0QsICIuIik7CisJX19hcmNoaXZlX2Vuc3VyZV9jbG9leGVjX2ZsYWcoY2hkaXJfZmQpOworCWlmIChjaGRpcl9mZCA8IDApIHsKKwkJZnNvYmpfZXJyb3IoYV9lbm8sIGFfZXN0ciwgZXJybm8sCisJCSAgICAiQ291bGQgbm90IG9wZW4gIiwgcGF0aCk7CiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQogCWhlYWQgPSBwYXRoOwogCXRhaWwgPSBwYXRoOwogCWxhc3QgPSAwOwpAQCAtMjU5Niw3ICsyNzM2LDExIEBACiAJCWMgPSB0YWlsWzBdOwogCQl0YWlsWzBdID0gJ1wwJzsKIAkJLyogQ2hlY2sgdGhhdCB3ZSBoYXZlbid0IGhpdCBhIHN5bWxpbmsuICovCisjaWYgZGVmaW5lZChIQVZFX09QRU5BVCkgJiYgZGVmaW5lZChIQVZFX0ZTVEFUQVQpICYmIGRlZmluZWQoSEFWRV9VTkxJTktBVCkKKwkJciA9IGZzdGF0YXQoY2hkaXJfZmQsIGhlYWQsICZzdCwgQVRfU1lNTElOS19OT0ZPTExPVyk7CisjZWxzZQogCQlyID0gbHN0YXQoaGVhZCwgJnN0KTsKKyNlbmRpZgogCQlpZiAociAhPSAwKSB7CiAJCQl0YWlsWzBdID0gYzsKIAkJCS8qIFdlJ3ZlIGhpdCBhIGRpciB0aGF0IGRvZXNuJ3QgZXhpc3Q7IHN0b3Agbm93LiAqLwpAQCAtMjYyMiw3ICsyNzY2LDE5IEBACiAJCQl9CiAJCX0gZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewogCQkJaWYgKCFsYXN0KSB7Ci0JCQkJaWYgKGNoZGlyKGhlYWQpICE9IDApIHsKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTkFUKSAmJiBkZWZpbmVkKEhBVkVfRlNUQVRBVCkgJiYgZGVmaW5lZChIQVZFX1VOTElOS0FUKQorCQkJCWZkID0gbGFfb3BlbmRpcmF0KGNoZGlyX2ZkLCBoZWFkKTsKKwkJCQlpZiAoZmQgPCAwKQorCQkJCQlyID0gLTE7CisJCQkJZWxzZSB7CisJCQkJCXIgPSAwOworCQkJCQljbG9zZShjaGRpcl9mZCk7CisJCQkJCWNoZGlyX2ZkID0gZmQ7CisJCQkJfQorI2Vsc2UKKwkJCQlyID0gY2hkaXIoaGVhZCk7CisjZW5kaWYKKwkJCQlpZiAociAhPSAwKSB7CiAJCQkJCXRhaWxbMF0gPSBjOwogCQkJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCBlcnJubywKIAkJCQkJICAgICJDb3VsZCBub3QgY2hkaXIgIiwgcGF0aCk7CkBAIC0yNjM5LDcgKzI3OTUsMTIgQEAKIAkJCQkgKiBzbyB3ZSBjYW4gb3ZlcndyaXRlIGl0IHdpdGggdGhlCiAJCQkJICogaXRlbSBiZWluZyBleHRyYWN0ZWQuCiAJCQkJICovCi0JCQkJaWYgKHVubGluayhoZWFkKSkgeworI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJCQkJciA9IHVubGlua2F0KGNoZGlyX2ZkLCBoZWFkLCAwKTsKKyNlbHNlCisJCQkJciA9IHVubGluayhoZWFkKTsKKyNlbmRpZgorCQkJCWlmIChyICE9IDApIHsKIAkJCQkJdGFpbFswXSA9IGM7CiAJCQkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsIGVycm5vLAogCQkJCQkgICAgIkNvdWxkIG5vdCByZW1vdmUgc3ltbGluayAiLApAQCAtMjY2OSw3ICsyODMwLDEyIEBACiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgaWYgKGZsYWdzICYgQVJDSElWRV9FWFRSQUNUX1VOTElOSykgewogCQkJCS8qIFVzZXIgYXNrZWQgdXMgdG8gcmVtb3ZlIHByb2JsZW1zLiAqLwotCQkJCWlmICh1bmxpbmsoaGVhZCkgIT0gMCkgeworI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJCQkJciA9IHVubGlua2F0KGNoZGlyX2ZkLCBoZWFkLCAwKTsKKyNlbHNlCisJCQkJciA9IHVubGluayhoZWFkKTsKKyNlbmRpZgorCQkJCWlmIChyICE9IDApIHsKIAkJCQkJdGFpbFswXSA9IGM7CiAJCQkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsIDAsCiAJCQkJCSAgICAiQ2Fubm90IHJlbW92ZSBpbnRlcnZlbmluZyAiCkBAIC0yNjg3LDcgKzI4NTMsMTEgQEAKIAkJCQkgKiBUaGlzIGlzIG5lZWRlZCB0byBleHRyYWN0IGhhcmRsaW5rcyBvdmVyCiAJCQkJICogc3ltbGlua3MuCiAJCQkJICovCi0JCQkJciA9IHN0YXQoaGVhZCwgJnN0KTsKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTkFUKSAmJiBkZWZpbmVkKEhBVkVfRlNUQVRBVCkgJiYgZGVmaW5lZChIQVZFX1VOTElOS0FUKQorCQkJCXIgPSBmc3RhdGF0KGNoZGlyX2ZkLCBoZWFkLCAmc3QsIDApOworI2Vsc2UKKwkJCQlyID0gbGFfc3RhdChoZWFkLCAmc3QpOworI2VuZGlmCiAJCQkJaWYgKHIgIT0gMCkgewogCQkJCQl0YWlsWzBdID0gYzsKIAkJCQkJaWYgKGVycm5vID09IEVOT0VOVCkgewpAQCAtMjcwMCw3ICsyODcwLDE5IEBACiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0gZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewotCQkJCQlpZiAoY2hkaXIoaGVhZCkgIT0gMCkgeworI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJCQkJCWZkID0gbGFfb3BlbmRpcmF0KGNoZGlyX2ZkLCBoZWFkKTsKKwkJCQkJaWYgKGZkIDwgMCkKKwkJCQkJCXIgPSAtMTsKKwkJCQkJZWxzZSB7CisJCQkJCQlyID0gMDsKKwkJCQkJCWNsb3NlKGNoZGlyX2ZkKTsKKwkJCQkJCWNoZGlyX2ZkID0gZmQ7CisJCQkJCX0KKyNlbHNlCisJCQkJCXIgPSBjaGRpcihoZWFkKTsKKyNlbmRpZgorCQkJCQlpZiAociAhPSAwKSB7CiAJCQkJCQl0YWlsWzBdID0gYzsKIAkJCQkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsCiAJCQkJCQkgICAgZXJybm8sCkBAIC0yNzM2LDE2ICsyOTE4LDIxIEBACiAJfQogCS8qIENhdGNoZXMgbG9vcCBleGl0cyB2aWEgYnJlYWsgKi8KIAl0YWlsWzBdID0gYzsKLSNpZmRlZiBIQVZFX0ZDSERJUgorI2lmIGRlZmluZWQoSEFWRV9PUEVOQVQpICYmIGRlZmluZWQoSEFWRV9GU1RBVEFUKSAmJiBkZWZpbmVkKEhBVkVfVU5MSU5LQVQpCisJLyogSWYgd2Ugb3BlcmF0ZSB3aXRoIG9wZW5hdCgpLCBmc3RhdGF0KCkgYW5kIHVubGlua2F0KCkgdGhlcmUgd2FzCisJICogbm8gY2hkaXIoKSwgc28ganVzdCBjbG9zZSB0aGUgZmQgKi8KKwlpZiAoY2hkaXJfZmQgPj0gMCkKKwkJY2xvc2UoY2hkaXJfZmQpOworI2VsaWYgSEFWRV9GQ0hESVIKIAkvKiBJZiB3ZSBjaGFuZ2VkIGRpcmVjdG9yeSBhYm92ZSwgcmVzdG9yZSBpdCBoZXJlLiAqLwotCWlmIChyZXN0b3JlX3B3ZCA+PSAwKSB7Ci0JCXIgPSBmY2hkaXIocmVzdG9yZV9wd2QpOworCWlmIChjaGRpcl9mZCA+PSAwKSB7CisJCXIgPSBmY2hkaXIoY2hkaXJfZmQpOwogCQlpZiAociAhPSAwKSB7CiAJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCBlcnJubywKIAkJCSAgICAiY2hkaXIoKSBmYWlsdXJlIiwgIiIpOwogCQl9Ci0JCWNsb3NlKHJlc3RvcmVfcHdkKTsKLQkJcmVzdG9yZV9wd2QgPSAtMTsKKwkJY2xvc2UoY2hkaXJfZmQpOworCQljaGRpcl9mZCA9IC0xOwogCQlpZiAociAhPSAwKSB7CiAJCQlyZXMgPSAoQVJDSElWRV9GQVRBTCk7CiAJCX0KQEAgLTMwMjcsNyArMzIxNCw3IEBACiAJICogaGVyZSBsb3NlcyB0aGUgYWJpbGl0eSB0byBleHRyYWN0IHRocm91Z2ggc3ltbGlua3MuICBBbHNvIG5vdGUKIAkgKiB0aGF0IHRoaXMgc2hvdWxkIG5vdCB1c2UgdGhlIGEtPnN0IGNhY2hlLgogCSAqLwotCWlmIChzdGF0KHBhdGgsICZzdCkgPT0gMCkgeworCWlmIChsYV9zdGF0KHBhdGgsICZzdCkgPT0gMCkgewogCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKIAkJCXJldHVybiAoQVJDSElWRV9PSyk7CiAJCWlmICgoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfTk9fT1ZFUldSSVRFKSkgewpAQCAtMzA4NSw3ICszMjcyLDcgQEAKIAkgKiBkb24ndCBhZGQgaXQgdG8gdGhlIGZpeHVwIGxpc3QgaGVyZSwgYXMgaXQncyBhbHJlYWR5IGJlZW4KIAkgKiBhZGRlZC4KIAkgKi8KLQlpZiAoc3RhdChwYXRoLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKKwlpZiAobGFfc3RhdChwYXRoLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKIAogCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywgIkZhaWxlZCB0byBjcmVhdGUgZGlyICclcyciLApAQCAtMzEwNiwxMiArMzI5MywxNCBAQAogc3RhdGljIGludAogc2V0X293bmVyc2hpcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQogewotI2lmbmRlZiBfX0NZR1dJTl9fCi0vKiB1bmZvcnR1bmF0ZWx5LCBvbiB3aW4zMiB0aGVyZSBpcyBubyAncm9vdCcgdXNlciB3aXRoIHVpZCAwLAotICAgc28gd2UganVzdCBoYXZlIHRvIHRyeSB0aGUgY2hvd24gYW5kIHNlZSBpZiBpdCB3b3JrcyAqLwotCi0JLyogSWYgd2Uga25vdyB3ZSBjYW4ndCBjaGFuZ2UgaXQsIGRvbid0IGJvdGhlciB0cnlpbmcuICovCi0JaWYgKGEtPnVzZXJfdWlkICE9IDAgICYmICBhLT51c2VyX3VpZCAhPSBhLT51aWQpIHsKKyNpZiAhZGVmaW5lZChfX0NZR1dJTl9fKSAmJiAhZGVmaW5lZChfX2xpbnV4X18pCisvKgorICogT24gTGludXgsIGEgcHJvY2VzcyBtYXkgaGF2ZSB0aGUgQ0FQX0NIT1dOIGNhcGFiaWxpdHkuCisgKiBPbiBXaW5kb3dzIHRoZXJlIGlzIG5vICdyb290JyB1c2VyIHdpdGggdWlkIDAuCisgKiBFbHNld2hlcmUgd2UgY2FuIHNraXAgY2FsbGluZyBjaG93biBpZiB3ZSBhcmUgbm90IHJvb3QgYW5kIHRoZSBkZXNpcmVkCisgKiB1c2VyIGlkIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHVzZXIuCisgKi8KKwlpZiAoYS0+dXNlcl91aWQgIT0gMCAmJiBhLT51c2VyX3VpZCAhPSBhLT51aWQpIHsKIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAogCQkgICAgIkNhbid0IHNldCBVSUQ9JWpkIiwgKGludG1heF90KWEtPnVpZCk7CiAJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKQEAgLTMzNjAsNiArMzU0OSw3IEBACiBzZXRfbW9kZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphLCBpbnQgbW9kZSkKIHsKIAlpbnQgciA9IEFSQ0hJVkVfT0s7CisJaW50IHIyOwogCW1vZGUgJj0gMDc3Nzc7IC8qIFN0cmlwIG9mZiBmaWxlIHR5cGUgYml0cy4gKi8KIAogCWlmIChhLT50b2RvICYgVE9ET19TR0lEX0NIRUNLKSB7CkBAIC0zNDUzLDIxICszNjQzLDE5IEBACiAJCSAqIHBvc3QtZXh0cmFjdCBmaXh1cCwgd2hpY2ggaXMgaGFuZGxlZCBlbHNld2hlcmUuCiAJCSAqLwogI2lmZGVmIEhBVkVfRkNITU9ECi0JCWlmIChhLT5mZCA+PSAwKSB7Ci0JCQlpZiAoZmNobW9kKGEtPmZkLCBtb2RlKSAhPSAwKSB7Ci0JCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAotCQkJCSAgICAiQ2FuJ3Qgc2V0IHBlcm1pc3Npb25zIHRvIDAlbyIsIChpbnQpbW9kZSk7Ci0JCQkJciA9IEFSQ0hJVkVfV0FSTjsKLQkJCX0KLQkJfSBlbHNlCisJCWlmIChhLT5mZCA+PSAwKQorCQkJcjIgPSBmY2htb2QoYS0+ZmQsIG1vZGUpOworCQllbHNlCiAjZW5kaWYKLQkJCS8qIElmIHRoaXMgcGxhdGZvcm0gbGFja3MgZmNobW9kKCksIHRoZW4KLQkJCSAqIHdlJ2xsIGp1c3QgdXNlIGNobW9kKCkuICovCi0JCQlpZiAoY2htb2QoYS0+bmFtZSwgbW9kZSkgIT0gMCkgewotCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKLQkJCQkgICAgIkNhbid0IHNldCBwZXJtaXNzaW9ucyB0byAwJW8iLCAoaW50KW1vZGUpOwotCQkJCXIgPSBBUkNISVZFX1dBUk47Ci0JCQl9CisJCS8qIElmIHRoaXMgcGxhdGZvcm0gbGFja3MgZmNobW9kKCksIHRoZW4KKwkJICogd2UnbGwganVzdCB1c2UgY2htb2QoKS4gKi8KKwkJcjIgPSBjaG1vZChhLT5uYW1lLCBtb2RlKTsKKworCQlpZiAocjIgIT0gMCkgeworCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAorCQkJICAgICJDYW4ndCBzZXQgcGVybWlzc2lvbnMgdG8gMCVvIiwgKGludCltb2RlKTsKKwkJCXIgPSBBUkNISVZFX1dBUk47CisJCX0KIAl9CiAJcmV0dXJuIChyKTsKIH0KQEAgLTM0NzgsOSArMzY2Niw3IEBACiAJc3RydWN0IGZpeHVwX2VudHJ5ICpsZTsKIAl1bnNpZ25lZCBsb25nCXNldCwgY2xlYXI7CiAJaW50CQlyOwotCWludAkJY3JpdGljYWxfZmxhZ3M7CiAJbW9kZV90CQltb2RlID0gYXJjaGl2ZV9lbnRyeV9tb2RlKGEtPmVudHJ5KTsKLQogCS8qCiAJICogTWFrZSAnY3JpdGljYWxfZmxhZ3MnIGhvbGQgYWxsIGZpbGUgZmxhZ3MgdGhhdCBjYW4ndCBiZQogCSAqIGltbWVkaWF0ZWx5IHJlc3RvcmVkLiAgRm9yIGV4YW1wbGUsIG9uIEJTRCBzeXN0ZW1zLApAQCAtMzQ5NiwzMyArMzY4MiwzMyBAQAogCSAqIG90aGVyIHByb2dyYW1zIHRoYXQgbWlnaHQgdHJ5IHRvIG11Y2sgd2l0aCBmaWxlcyBhcyB0aGV5J3JlCiAJICogYmVpbmcgcmVzdG9yZWQuCiAJICovCi0JLyogSG9wZWZ1bGx5LCB0aGUgY29tcGlsZXIgd2lsbCBvcHRpbWl6ZSB0aGlzIG1lc3MgaW50byBhIGNvbnN0YW50LiAqLwotCWNyaXRpY2FsX2ZsYWdzID0gMDsKKwljb25zdCBpbnQJY3JpdGljYWxfZmxhZ3MgPSAwCiAjaWZkZWYgU0ZfSU1NVVRBQkxFCi0JY3JpdGljYWxfZmxhZ3MgfD0gU0ZfSU1NVVRBQkxFOworCSAgICB8IFNGX0lNTVVUQUJMRQogI2VuZGlmCiAjaWZkZWYgVUZfSU1NVVRBQkxFCi0JY3JpdGljYWxfZmxhZ3MgfD0gVUZfSU1NVVRBQkxFOworCSAgICB8IFVGX0lNTVVUQUJMRQogI2VuZGlmCiAjaWZkZWYgU0ZfQVBQRU5ECi0JY3JpdGljYWxfZmxhZ3MgfD0gU0ZfQVBQRU5EOworCSAgICB8IFNGX0FQUEVORAogI2VuZGlmCiAjaWZkZWYgVUZfQVBQRU5ECi0JY3JpdGljYWxfZmxhZ3MgfD0gVUZfQVBQRU5EOworCSAgICB8IFVGX0FQUEVORAogI2VuZGlmCiAjaWYgZGVmaW5lZChGU19BUFBFTkRfRkwpCi0JY3JpdGljYWxfZmxhZ3MgfD0gRlNfQVBQRU5EX0ZMOworCSAgICB8IEZTX0FQUEVORF9GTAogI2VsaWYgZGVmaW5lZChFWFQyX0FQUEVORF9GTCkKLQljcml0aWNhbF9mbGFncyB8PSBFWFQyX0FQUEVORF9GTDsKKwkgICAgfCBFWFQyX0FQUEVORF9GTAogI2VuZGlmCiAjaWYgZGVmaW5lZChGU19JTU1VVEFCTEVfRkwpCi0JY3JpdGljYWxfZmxhZ3MgfD0gRlNfSU1NVVRBQkxFX0ZMOworCSAgICB8IEZTX0lNTVVUQUJMRV9GTAogI2VsaWYgZGVmaW5lZChFWFQyX0lNTVVUQUJMRV9GTCkKLQljcml0aWNhbF9mbGFncyB8PSBFWFQyX0lNTVVUQUJMRV9GTDsKKwkgICAgfCBFWFQyX0lNTVVUQUJMRV9GTAogI2VuZGlmCiAjaWZkZWYgRlNfSk9VUk5BTF9EQVRBX0ZMCi0JY3JpdGljYWxfZmxhZ3MgfD0gRlNfSk9VUk5BTF9EQVRBX0ZMOworCSAgICB8IEZTX0pPVVJOQUxfREFUQV9GTAogI2VuZGlmCisJOwogCiAJaWYgKGEtPnRvZG8gJiBUT0RPX0ZGTEFHUykgewogCQlhcmNoaXZlX2VudHJ5X2ZmbGFncyhhLT5lbnRyeSwgJnNldCwgJmNsZWFyKTsKQEAgLTM1NTMsMjkgKzM3MzksMjcgQEAKIHN0YXRpYyBpbnQKIGNsZWFyX25vY2hhbmdlX2ZmbGFncyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQogewotCWludAkJbm9jaGFuZ2VfZmxhZ3M7CiAJbW9kZV90CQltb2RlID0gYXJjaGl2ZV9lbnRyeV9tb2RlKGEtPmVudHJ5KTsKLQotCS8qIEhvcGVmdWxseSwgdGhlIGNvbXBpbGVyIHdpbGwgb3B0aW1pemUgdGhpcyBtZXNzIGludG8gYSBjb25zdGFudC4gKi8KLQlub2NoYW5nZV9mbGFncyA9IDA7CisJY29uc3QgaW50IG5vY2hhbmdlX2ZsYWdzID0gMAogI2lmZGVmIFNGX0lNTVVUQUJMRQotCW5vY2hhbmdlX2ZsYWdzIHw9IFNGX0lNTVVUQUJMRTsKKwkgICAgfCBTRl9JTU1VVEFCTEUKICNlbmRpZgogI2lmZGVmIFVGX0lNTVVUQUJMRQotCW5vY2hhbmdlX2ZsYWdzIHw9IFVGX0lNTVVUQUJMRTsKKwkgICAgfCBVRl9JTU1VVEFCTEUKICNlbmRpZgogI2lmZGVmIFNGX0FQUEVORAotCW5vY2hhbmdlX2ZsYWdzIHw9IFNGX0FQUEVORDsKKwkgICAgfCBTRl9BUFBFTkQKICNlbmRpZgogI2lmZGVmIFVGX0FQUEVORAotCW5vY2hhbmdlX2ZsYWdzIHw9IFVGX0FQUEVORDsKKwkgICAgfCBVRl9BUFBFTkQKICNlbmRpZgogI2lmZGVmIEVYVDJfQVBQRU5EX0ZMCi0Jbm9jaGFuZ2VfZmxhZ3MgfD0gRVhUMl9BUFBFTkRfRkw7CisJICAgIHwgRVhUMl9BUFBFTkRfRkwKICNlbmRpZgogI2lmZGVmIEVYVDJfSU1NVVRBQkxFX0ZMCi0Jbm9jaGFuZ2VfZmxhZ3MgfD0gRVhUMl9JTU1VVEFCTEVfRkw7CisJICAgIHwgRVhUMl9JTU1VVEFCTEVfRkwKICNlbmRpZgorCTsKIAogCXJldHVybiAoc2V0X2ZmbGFnc19wbGF0Zm9ybShhLCBhLT5mZCwgYS0+bmFtZSwgbW9kZSwgMCwKIAkgICAgbm9jaGFuZ2VfZmxhZ3MpKTsKQEAgLTM1OTEsOCArMzc3NSwyMiBAQAogICAgIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBsb25nIHNldCwgdW5zaWduZWQgbG9uZyBjbGVhcikKIHsKIAlpbnQgcjsKLQorCWNvbnN0IGludCBzZl9tYXNrID0gMAorI2lmZGVmIFNGX0FQUEVORAorCSAgICB8IFNGX0FQUEVORAorI2VuZGlmCisjaWZkZWYgU0ZfQVJDSElWRUQKKwkgICAgfCBTRl9BUkNISVZFRAorI2VuZGlmCisjaWZkZWYgU0ZfSU1NVVRBQkxFCisJICAgIHwgU0ZfSU1NVVRBQkxFCisjZW5kaWYKKyNpZmRlZiBTRl9OT1VOTElOSworCSAgICB8IFNGX05PVU5MSU5LCisjZW5kaWYKKwk7CiAJKHZvaWQpbW9kZTsgLyogVU5VU0VEICovCisKIAlpZiAoc2V0ID09IDAgICYmIGNsZWFyID09IDApCiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAKQEAgLTM2MDcsNiArMzgwNSwxMiBAQAogCiAJYS0+c3Quc3RfZmxhZ3MgJj0gfmNsZWFyOwogCWEtPnN0LnN0X2ZsYWdzIHw9IHNldDsKKworCS8qIE9ubHkgc3VwZXItdXNlciBtYXkgY2hhbmdlIFNGXyogZmxhZ3MgKi8KKworCWlmIChhLT51c2VyX3VpZCAhPSAwKQorCQlhLT5zdC5zdF9mbGFncyAmPSB+c2ZfbWFzazsKKwogI2lmZGVmIEhBVkVfRkNIRkxBR1MKIAkvKiBJZiBwbGF0Zm9ybSBoYXMgZmNoZmxhZ3MoKSBhbmQgd2Ugd2VyZSBnaXZlbiBhbiBmZCwgdXNlIGl0LiAqLwogCWlmIChmZCA+PSAwICYmIGZjaGZsYWdzKGZkLCBhLT5zdC5zdF9mbGFncykgPT0gMCkKQEAgLTM2NDgsNyArMzg1MiwyOCBAQAogCWludAkJIHJldDsKIAlpbnQJCSBteWZkID0gZmQ7CiAJaW50IG5ld2ZsYWdzLCBvbGRmbGFnczsKLQlpbnQgc2ZfbWFzayA9IDA7CisJLyoKKwkgKiBMaW51eCBoYXMgbm8gZGVmaW5lIGZvciB0aGUgZmxhZ3MgdGhhdCBhcmUgb25seSBzZXR0YWJsZSBieQorCSAqIHRoZSByb290IHVzZXIuICBUaGlzIGNvZGUgbWF5IHNlZW0gYSBsaXR0bGUgY29tcGxleCwgYnV0CisJICogdGhlcmUgc2VlbSB0byBiZSBzb21lIExpbnV4IHN5c3RlbXMgdGhhdCBsYWNrIHRoZXNlCisJICogZGVmaW5lcy4gKD8pICBUaGUgY29kZSBiZWxvdyBkZWdyYWRlcyByZWFzb25hYmx5IGdyYWNlZnVsbHkKKwkgKiBpZiBzZl9tYXNrIGlzIGluY29tcGxldGUuCisJICovCisJY29uc3QgaW50IHNmX21hc2sgPSAwCisjaWYgZGVmaW5lZChGU19JTU1VVEFCTEVfRkwpCisJICAgIHwgRlNfSU1NVVRBQkxFX0ZMCisjZWxpZiBkZWZpbmVkKEVYVDJfSU1NVVRBQkxFX0ZMKQorCSAgICB8IEVYVDJfSU1NVVRBQkxFX0ZMCisjZW5kaWYKKyNpZiBkZWZpbmVkKEZTX0FQUEVORF9GTCkKKwkgICAgfCBGU19BUFBFTkRfRkwKKyNlbGlmIGRlZmluZWQoRVhUMl9BUFBFTkRfRkwpCisJICAgIHwgRVhUMl9BUFBFTkRfRkwKKyNlbmRpZgorI2lmIGRlZmluZWQoRlNfSk9VUk5BTF9EQVRBX0ZMKQorCSAgICB8IEZTX0pPVVJOQUxfREFUQV9GTAorI2VuZGlmCisJOwogCiAJaWYgKHNldCA9PSAwICYmIGNsZWFyID09IDApCiAJCXJldHVybiAoQVJDSElWRV9PSyk7CkBAIC0zNjY1LDI2ICszODkwLDYgQEAKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKIAogCS8qCi0JICogTGludXggaGFzIG5vIGRlZmluZSBmb3IgdGhlIGZsYWdzIHRoYXQgYXJlIG9ubHkgc2V0dGFibGUgYnkKLQkgKiB0aGUgcm9vdCB1c2VyLiAgVGhpcyBjb2RlIG1heSBzZWVtIGEgbGl0dGxlIGNvbXBsZXgsIGJ1dAotCSAqIHRoZXJlIHNlZW0gdG8gYmUgc29tZSBMaW51eCBzeXN0ZW1zIHRoYXQgbGFjayB0aGVzZQotCSAqIGRlZmluZXMuICg/KSAgVGhlIGNvZGUgYmVsb3cgZGVncmFkZXMgcmVhc29uYWJseSBncmFjZWZ1bGx5Ci0JICogaWYgc2ZfbWFzayBpcyBpbmNvbXBsZXRlLgotCSAqLwotI2lmIGRlZmluZWQoRlNfSU1NVVRBQkxFX0ZMKQotCXNmX21hc2sgfD0gRlNfSU1NVVRBQkxFX0ZMOwotI2VsaWYgZGVmaW5lZChFWFQyX0lNTVVUQUJMRV9GTCkKLQlzZl9tYXNrIHw9IEVYVDJfSU1NVVRBQkxFX0ZMOwotI2VuZGlmCi0jaWYgZGVmaW5lZChGU19BUFBFTkRfRkwpCi0Jc2ZfbWFzayB8PSBGU19BUFBFTkRfRkw7Ci0jZWxpZiBkZWZpbmVkKEVYVDJfQVBQRU5EX0ZMKQotCXNmX21hc2sgfD0gRVhUMl9BUFBFTkRfRkw7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKEZTX0pPVVJOQUxfREFUQV9GTCkKLQlzZl9tYXNrIHw9IEZTX0pPVVJOQUxfREFUQV9GTDsKLSNlbmRpZgotCS8qCiAJICogWFhYIEFzIGFib3ZlLCB0aGlzIHdvdWxkIGJlIHdheSBzaW1wbGVyIGlmIHdlIGRpZG4ndCBoYXZlCiAJICogdG8gcmVhZCB0aGUgY3VycmVudCBmbGFncyBmcm9tIGRpc2suIFhYWAogCSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3ByaXZhdGUuaAppbmRleCBiNjU1ZGVhLi41NTdkN2UyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3ByaXZhdGUuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3ByaXZhdGUuaApAQCAtMjYsMTMgKzI2LDEzIEBACiAgKiAkRnJlZUJTRDogaGVhZC9saWIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcHJpdmF0ZS5oIDIwMTA4NiAyMDA5LTEyLTI4IDAyOjE3OjUzWiBraWVudHpsZSAkCiAgKi8KIAorI2lmbmRlZiBBUkNISVZFX1dSSVRFX0RJU0tfUFJJVkFURV9IX0lOQ0xVREVECisjZGVmaW5lIEFSQ0hJVkVfV1JJVEVfRElTS19QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAKLSNpZm5kZWYgQVJDSElWRV9XUklURV9ESVNLX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZSBBUkNISVZFX1dSSVRFX0RJU0tfUFJJVkFURV9IX0lOQ0xVREVECi0KICNpbmNsdWRlICJhcmNoaXZlX3BsYXRmb3JtX2FjbC5oIgogI2luY2x1ZGUgImFyY2hpdmVfYWNsX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5LmgiCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9zdGFuZGFyZF9sb29rdXAuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X3N0YW5kYXJkX2xvb2t1cC5jCmluZGV4IDVjNzY2ZDcuLjVmY2NkYjkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X3N0YW5kYXJkX2xvb2t1cC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfc2V0X3N0YW5kYXJkX2xvb2t1cC5jCkBAIC0xMTQsOCArMTE0LDcgQEAKIAkJcmV0dXJuICgoZ2lkX3QpYi0+aWQpOwogCiAJLyogRnJlZSB0aGUgY2FjaGUgc2xvdCBmb3IgYSBuZXcgZW50cnkuICovCi0JaWYgKGItPm5hbWUgIT0gTlVMTCkKLQkJZnJlZShiLT5uYW1lKTsKKwlmcmVlKGItPm5hbWUpOwogCWItPm5hbWUgPSBzdHJkdXAoZ25hbWUpOwogCS8qIE5vdGU6IElmIHN0cmR1cCBmYWlscywgdGhhdCdzIG9rYXk7IHdlIGp1c3Qgd29uJ3QgY2FjaGUuICovCiAJYi0+aGFzaCA9IGg7CkBAIC0xODQsOCArMTgzLDcgQEAKIAkJcmV0dXJuICgodWlkX3QpYi0+aWQpOwogCiAJLyogRnJlZSB0aGUgY2FjaGUgc2xvdCBmb3IgYSBuZXcgZW50cnkuICovCi0JaWYgKGItPm5hbWUgIT0gTlVMTCkKLQkJZnJlZShiLT5uYW1lKTsKKwlmcmVlKGItPm5hbWUpOwogCWItPm5hbWUgPSBzdHJkdXAodW5hbWUpOwogCS8qIE5vdGU6IElmIHN0cmR1cCBmYWlscywgdGhhdCdzIG9rYXk7IHdlIGp1c3Qgd29uJ3QgY2FjaGUuICovCiAJYi0+aGFzaCA9IGg7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3dpbmRvd3MuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfd2luZG93cy5jCmluZGV4IDc4ZWRhNGEuLjc3ZTM2YzQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfd2luZG93cy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfd2luZG93cy5jCkBAIC0xNjUsNiArMTY1LDggQEAKIAlzdHJ1Y3QgYXJjaGl2ZV9lbnRyeQkqZW50cnk7IC8qIEVudHJ5IGJlaW5nIGV4dHJhY3RlZC4gKi8KIAl3Y2hhcl90CQkJKm5hbWU7IC8qIE5hbWUgb2YgZW50cnksIHBvc3NpYmx5IGVkaXRlZC4gKi8KIAlzdHJ1Y3QgYXJjaGl2ZV93c3RyaW5nCSBfbmFtZV9kYXRhOyAvKiBiYWNraW5nIHN0b3JlIGZvciAnbmFtZScgKi8KKwl3Y2hhcl90CQkJKnRtcG5hbWU7IC8qIFRlbXBvcmFyeSBuYW1lICovCisJc3RydWN0IGFyY2hpdmVfd3N0cmluZwlfdG1wbmFtZV9kYXRhOyAvKiBiYWNraW5nIHN0b3JlIGZvciAndG1wbmFtZScgKi8KIAkvKiBUYXNrcyByZW1haW5pbmcgZm9yIHRoaXMgb2JqZWN0LiAqLwogCWludAkJCSB0b2RvOwogCS8qIFRhc2tzIGRlZmVycmVkIHVudGlsIGVuZC1vZi1hcmNoaXZlLiAqLwpAQCAtMjA1LDYgKzIwNyw4IEBACiAjZGVmaW5lCU1JTklNVU1fRElSX01PREUgMDcwMAogI2RlZmluZQlNQVhJTVVNX0RJUl9NT0RFIDA3NzUKIAorc3RhdGljIGludAlkaXNrX3VubGluayhjb25zdCB3Y2hhcl90ICopOworc3RhdGljIGludAlkaXNrX3JtZGlyKGNvbnN0IHdjaGFyX3QgKik7CiBzdGF0aWMgaW50CWNoZWNrX3N5bWxpbmtzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKik7CiBzdGF0aWMgaW50CWNyZWF0ZV9maWxlc3lzdGVtX29iamVjdChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIHN0cnVjdCBmaXh1cF9lbnRyeSAqY3VycmVudF9maXh1cChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICosCkBAIC0yMTMsMTMgKzIxNywxNyBAQAogc3RhdGljIGludAljcmVhdGVfZGlyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKiwgd2NoYXJfdCAqKTsKIHN0YXRpYyBpbnQJY3JlYXRlX3BhcmVudF9kaXIoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqLCB3Y2hhcl90ICopOwogc3RhdGljIGludAlsYV9jaG1vZChjb25zdCB3Y2hhcl90ICosIG1vZGVfdCk7CitzdGF0aWMgaW50CWxhX21rdGVtcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIGludAlvbGRlcihCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiAqLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqKTsKIHN0YXRpYyBpbnQJcGVybWlzc2l2ZV9uYW1lX3coc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKIHN0YXRpYyBpbnQJcmVzdG9yZV9lbnRyeShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIGludAlzZXRfYWNscyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICosIEhBTkRMRSBoLAogCQkgICAgY29uc3Qgd2NoYXJfdCAqLCBzdHJ1Y3QgYXJjaGl2ZV9hY2wgKik7CiBzdGF0aWMgaW50CXNldF94YXR0cnMoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKK3N0YXRpYyBpbnQJY2xlYXJfbm9jaGFuZ2VfZmZsYWdzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKik7CiBzdGF0aWMgaW50CXNldF9mZmxhZ3Moc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqKTsKK3N0YXRpYyBpbnQJc2V0X2ZmbGFnc19wbGF0Zm9ybShjb25zdCB3Y2hhcl90ICosIHVuc2lnbmVkIGxvbmcsCisJCSAgICB1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyBpbnQJc2V0X293bmVyc2hpcChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwogc3RhdGljIGludAlzZXRfbW9kZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICosIGludCBtb2RlKTsKIHN0YXRpYyBpbnQJc2V0X3RpbWVzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKiwgSEFORExFLCBpbnQsCkBAIC00NzQsNiArNDgyLDExIEBACiAJewogCQlhcmNoaXZlX3dzdHJuY3B5KCYoYS0+X25hbWVfZGF0YSksIHdzcCwgbCk7CiAJfQorCWVsc2UgaWYgKGwgPiAyICYmIHdzcFswXSA9PSBMJ1xcJyAmJiB3c3BbMV0gPT0gTCdcXCcgJiYgd3NwWzJdICE9IEwnXFwnKQorCXsKKwkJYXJjaGl2ZV93c3RybmNweSgmKGEtPl9uYW1lX2RhdGEpLCBMIlxcXFw/XFxVTkNcXCIsIDgpOworCQlhcmNoaXZlX3dzdHJuY2F0KCYoYS0+X25hbWVfZGF0YSksIHdzcCsyLCBsLTIpOworCX0KIAllbHNlCiAJewogCQlhcmNoaXZlX3dzdHJuY3B5KCYoYS0+X25hbWVfZGF0YSksIEwiXFxcXD9cXCIsIDQpOwpAQCAtNTI0LDYgKzUzNywyOCBAQAogCXJldHVybiAocmV0KTsKIH0KIAorc3RhdGljIGludAorbGFfbWt0ZW1wKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCit7CisJaW50IGZkOworCW1vZGVfdCBtb2RlOworCisJYXJjaGl2ZV93c3RyaW5nX2VtcHR5KCYoYS0+X3RtcG5hbWVfZGF0YSkpOworCWFyY2hpdmVfd3N0cmNweSgmKGEtPl90bXBuYW1lX2RhdGEpLCBhLT5uYW1lKTsKKwlhcmNoaXZlX3dzdHJjYXQoJihhLT5fdG1wbmFtZV9kYXRhKSwgTCIuWFhYWFhYIik7CisJYS0+dG1wbmFtZSA9IGEtPl90bXBuYW1lX2RhdGEuczsKKworCWZkID0gX19hcmNoaXZlX21rc3RlbXAoYS0+dG1wbmFtZSk7CisKKwltb2RlID0gYS0+bW9kZSAmIDA3NzcgJiB+YS0+dXNlcl91bWFzazsKKwlpZiAobGFfY2htb2QoYS0+dG1wbmFtZSwgbW9kZSkgPT0gLTEpIHsKKwkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJX2Nsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gKGZkKTsKK30KKwogc3RhdGljIHZvaWQgKgogbGFfR2V0RnVuY3Rpb25LZXJuZWwzMihjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNTUxLDggKzU4NiwxMCBAQAogCQlzZXQgPSAxOwogCQlmID0gbGFfR2V0RnVuY3Rpb25LZXJuZWwzMigiQ3JlYXRlSGFyZExpbmtXIik7CiAJfQotCWlmICghZikKKwlpZiAoIWYpIHsKKwkJZXJybm8gPSBFTk9UU1VQOwogCQlyZXR1cm4gKDApOworCX0KIAlyZXQgPSAoKmYpKGxpbmtuYW1lLCB0YXJnZXQsIE5VTEwpOwogCWlmICghcmV0KSB7CiAJCS8qIFVuZGVyIHdpbmRvd3MgMjAwMCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlbW92ZQpAQCAtNTc3LDYgKzYxNCwxMDMgQEAKIAlyZXR1cm4gKHJldCk7CiB9CiAKKy8qCisgKiBDcmVhdGUgZmlsZSBvciBkaXJlY3Rvcnkgc3ltb2xpYyBsaW5rCisgKgorICogSWYgbGlua3R5cGUgaXMgQUVfU1lNTElOS19UWVBFX1VOREVGSU5FRCAob3IgdW5rbm93biksIGd1ZXNzIGxpbmt0eXBlIGZyb20KKyAqIHRoZSBsaW5rIHRhcmdldAorICovCitzdGF0aWMgaW50CitsYV9DcmVhdGVTeW1ib2xpY0xpbmtXKGNvbnN0IHdjaGFyX3QgKmxpbmtuYW1lLCBjb25zdCB3Y2hhcl90ICp0YXJnZXQsCisgICAgaW50IGxpbmt0eXBlKSB7CisJc3RhdGljIEJPT0xFQU4gKFdJTkFQSSAqZikoTFBDV1NUUiwgTFBDV1NUUiwgRFdPUkQpOworCXN0YXRpYyBpbnQgc2V0OworCXdjaGFyX3QgKnR0YXJnZXQsICpwOworCWludCBsZW47CisJRFdPUkQgYXR0cnMgPSAwOworCURXT1JEIGZsYWdzID0gMDsKKwlEV09SRCBuZXdmbGFncyA9IDA7CisJQk9PTCByZXQgPSAwOworCisJaWYgKCFzZXQpIHsKKwkJc2V0ID0gMTsKKwkJZiA9IGxhX0dldEZ1bmN0aW9uS2VybmVsMzIoIkNyZWF0ZVN5bWJvbGljTGlua1ciKTsKKwl9CisJaWYgKCFmKQorCQlyZXR1cm4gKDApOworCisJbGVuID0gd2NzbGVuKHRhcmdldCk7CisJaWYgKGxlbiA9PSAwKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4oMCk7CisJfQorCS8qCisJICogV2hlbiB3cml0aW5nIHBhdGggdGFyZ2V0cywgd2UgbmVlZCB0byB0cmFuc2xhdGUgc2xhc2hlcworCSAqIHRvIGJhY2tzbGFzaGVzCisJICovCisJdHRhcmdldCA9IG1hbGxvYygobGVuICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworCWlmICh0dGFyZ2V0ID09IE5VTEwpCisJCXJldHVybigwKTsKKworCXAgPSB0dGFyZ2V0OworCisJd2hpbGUoKnRhcmdldCAhPSBMJ1wwJykgeworCQlpZiAoKnRhcmdldCA9PSBMJy8nKQorCQkJKnAgPSBMJ1xcJzsKKwkJZWxzZQorCQkJKnAgPSAqdGFyZ2V0OworCQl0YXJnZXQrKzsKKwkJcCsrOworCX0KKwkqcCA9IEwnXDAnOworCisJLyoKKwkgKiBJbiBjYXNlIG9mIHVuZGVmaW5lZCBzeW1saW5rIHR5cGUgd2UgZ3Vlc3MgaXQgZnJvbSB0aGUgdGFyZ2V0LgorCSAqIElmIHRoZSB0YXJnZXQgZXF1YWxzICIuIiwgIi4uIiwgZW5kcyB3aXRoIGEgYmFja3NsYXNoIG9yIGEKKwkgKiBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgIi4iIG9yICIuLiIgd2UgYXNzdW1lIGl0IGlzIGEgZGlyZWN0b3J5CisJICogc3ltbGluay4gSW4gYWxsIG90aGVyIGNhc2VzIHdlIGFzc3VtZSBhIGZpbGUgc3ltbGluay4KKwkgKi8KKwlpZiAobGlua3R5cGUgIT0gQUVfU1lNTElOS19UWVBFX0ZJTEUgJiYgKAorCQlsaW5rdHlwZSA9PSBBRV9TWU1MSU5LX1RZUEVfRElSRUNUT1JZIHx8CisJCSoocCAtIDEpID09IEwnXFwnIHx8ICgqKHAgLSAxKSA9PSBMJy4nICYmICgKKwkgICAgbGVuID09IDEgfHwgKihwIC0gMikgPT0gTCdcXCcgfHwgKCAqKHAgLSAyKSA9PSBMJy4nICYmICgKKwkgICAgbGVuID09IDIgfHwgKihwIC0gMykgPT0gTCdcXCcpKSkpKSkgeworI2lmIGRlZmluZWQoU1lNQk9MSUNfTElOS19GTEFHX0RJUkVDVE9SWSkKKwkJZmxhZ3MgfD0gU1lNQk9MSUNfTElOS19GTEFHX0RJUkVDVE9SWTsKKyNlbHNlCisJCWZsYWdzIHw9IDB4MTsKKyNlbmRpZgorCX0KKworI2lmIGRlZmluZWQoU1lNQk9MSUNfTElOS19GTEFHX0FMTE9XX1VOUFJJVklMRUdFRF9DUkVBVEUpCisJbmV3ZmxhZ3MgPSBmbGFncyB8IFNZTUJPTElDX0xJTktfRkxBR19BTExPV19VTlBSSVZJTEVHRURfQ1JFQVRFOworI2Vsc2UKKwluZXdmbGFncyA9IGZsYWdzIHwgMHgyOworI2VuZGlmCisKKwkvKgorCSAqIFdpbmRvd3Mgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGxpbmtzCisJICovCisJYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cobGlua25hbWUpOworCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgeworCQlpZiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCQlkaXNrX3JtZGlyKGxpbmtuYW1lKTsKKwkJZWxzZQorCQkJZGlza191bmxpbmsobGlua25hbWUpOworCX0KKworCXJldCA9ICgqZikobGlua25hbWUsIHR0YXJnZXQsIG5ld2ZsYWdzKTsKKwkvKgorCSAqIFByaW9yIHRvIFdpbmRvd3MgMTAgY2FsbGluZyBDcmVhdGVTeW1ib2xpY0xpbmtXKCkgd2lsbCBmYWlsCisJICogaWYgU1lNQk9MSUNfTElOS19GTEFHX0FMTE9XX1VOUFJJVklMRUdFRF9DUkVBVEUgaXMgc2V0CisJICovCisJaWYgKCFyZXQpIHsKKwkJcmV0ID0gKCpmKShsaW5rbmFtZSwgdHRhcmdldCwgZmxhZ3MpOworCX0KKwlmcmVlKHR0YXJnZXQpOworCXJldHVybiAocmV0KTsKK30KKwogc3RhdGljIGludAogbGFfZnRydW5jYXRlKEhBTkRMRSBoYW5kbGUsIGludDY0X3QgbGVuZ3RoKQogewpAQCAtNjk2LDEwICs4MzAsOCBAQAogCWEtPnBzdCA9IE5VTEw7CiAJYS0+Y3VycmVudF9maXh1cCA9IE5VTEw7CiAJYS0+ZGVmZXJyZWQgPSAwOwotCWlmIChhLT5lbnRyeSkgewotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOwotCQlhLT5lbnRyeSA9IE5VTEw7Ci0JfQorCWFyY2hpdmVfZW50cnlfZnJlZShhLT5lbnRyeSk7CisJYS0+ZW50cnkgPSBOVUxMOwogCWEtPmVudHJ5ID0gYXJjaGl2ZV9lbnRyeV9jbG9uZShlbnRyeSk7CiAJYS0+ZmggPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKIAlhLT5mZF9vZmZzZXQgPSAwOwpAQCAtODYwLDkgKzk5MiwxMSBAQAogCX0KIAogCWlmIChhLT5kZWZlcnJlZCAmIFRPRE9fRkZMQUdTKSB7CisJCXVuc2lnbmVkIGxvbmcgc2V0LCBjbGVhcjsKKwogCQlmZSA9IGN1cnJlbnRfZml4dXAoYSwgYXJjaGl2ZV9lbnRyeV9wYXRobmFtZV93KGVudHJ5KSk7Ci0JCWZlLT5maXh1cCB8PSBUT0RPX0ZGTEFHUzsKLQkJLyogVE9ETzogQ29tcGxldGUgdGhpcy4uIGRlZmVyIGZmbGFncyBmcm9tIGJlbG93LiAqLworCQlhcmNoaXZlX2VudHJ5X2ZmbGFncyhlbnRyeSwgJnNldCwgJmNsZWFyKTsKKwkJZmUtPmZmbGFnc19zZXQgPSBzZXQ7CiAJfQogCiAJLyoKQEAgLTExNDMsMTIgKzEyNzcsMjAgQEAKIAlpZiAoYS0+ZmggIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKIAkJQ2xvc2VIYW5kbGUoYS0+ZmgpOwogCQlhLT5maCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworCQlpZiAoYS0+dG1wbmFtZSkgeworCQkJLyogV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IGF0b21pYyByZW5hbWUgKi8KKwkJCWRpc2tfdW5saW5rKGEtPm5hbWUpOworCQkJaWYgKF93cmVuYW1lKGEtPnRtcG5hbWUsIGEtPm5hbWUpICE9IDApIHsKKwkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCisJCQkJICAgICJyZW5hbWUgZmFpbGVkIik7CisJCQkJcmV0ID0gQVJDSElWRV9GQVRBTDsKKwkJCX0KKwkJCWEtPnRtcG5hbWUgPSBOVUxMOworCQl9CiAJfQogCS8qIElmIHRoZXJlJ3MgYW4gZW50cnksIHdlIGNhbiByZWxlYXNlIGl0IG5vdy4gKi8KLQlpZiAoYS0+ZW50cnkpIHsKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKLQkJYS0+ZW50cnkgPSBOVUxMOwotCX0KKwlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOworCWEtPmVudHJ5ID0gTlVMTDsKIAlhLT5hcmNoaXZlLnN0YXRlID0gQVJDSElWRV9TVEFURV9IRUFERVI7CiAJcmV0dXJuIChyZXQpOwogfQpAQCAtMTIzOSw3ICsxMzgxLDcgQEAKIH0KIAogc3RhdGljIGludAotZGlza191bmxpbmsod2NoYXJfdCAqcGF0aCkKK2Rpc2tfdW5saW5rKGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAJd2NoYXJfdCAqZnVsbG5hbWU7CiAJaW50IHI7CkBAIC0xMjU0LDcgKzEzOTYsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1kaXNrX3JtZGlyKHdjaGFyX3QgKnBhdGgpCitkaXNrX3JtZGlyKGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAJd2NoYXJfdCAqZnVsbG5hbWU7CiAJaW50IHI7CkBAIC0xMjg1LDYgKzE0MjcsOCBAQAogCQkgKiBvYmplY3QgaXMgYSBkaXIsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGUgb2xkCiAJCSAqIG9iamVjdCBpc24ndCBhIGRpci4KIAkJICovCisJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9DTEVBUl9OT0NIQU5HRV9GRkxBR1MpCisJCQkodm9pZCljbGVhcl9ub2NoYW5nZV9mZmxhZ3MoYSk7CiAJCWlmIChkaXNrX3VubGluayhhLT5uYW1lKSA9PSAwKSB7CiAJCQkvKiBXZSByZW1vdmVkIGl0LCByZXNldCBjYWNoZWQgc3RhdC4gKi8KIAkJCWEtPnBzdCA9IE5VTEw7CkBAIC0xMzU5LDI4ICsxNTAzLDQ1IEBACiAJCWVuID0gY3JlYXRlX2ZpbGVzeXN0ZW1fb2JqZWN0KGEpOwogCX0gZWxzZSBpZiAoZW4gPT0gRUVYSVNUKSB7CiAJCW1vZGVfdCBzdF9tb2RlOworCQltb2RlX3QgbHN0X21vZGU7CisJCUJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OIGxzdDsKIAkJLyoKIAkJICogV2Uga25vdyBzb21ldGhpbmcgaXMgaW4gdGhlIHdheSwgYnV0IHdlIGRvbid0IGtub3cgd2hhdDsKIAkJICogd2UgbmVlZCB0byBmaW5kIG91dCBiZWZvcmUgd2UgZ28gYW55IGZ1cnRoZXIuCiAJCSAqLwogCQlpbnQgciA9IDA7CisJCWludCBkaXJsbmsgPSAwOworCiAJCS8qCiAJCSAqIFRoZSBTRUNVUkVfU1lNTElOSyBsb2dpYyBoYXMgYWxyZWFkeSByZW1vdmVkIGEKIAkJICogc3ltbGluayB0byBhIGRpciBpZiB0aGUgY2xpZW50IHdhbnRzIHRoYXQuICBTbwogCQkgKiBmb2xsb3cgdGhlIHN5bWxpbmsgaWYgd2UncmUgY3JlYXRpbmcgYSBkaXIuCi0JCSAqLwotCQlpZiAoU19JU0RJUihhLT5tb2RlKSkKLQkJCXIgPSBmaWxlX2luZm9ybWF0aW9uKGEsIGEtPm5hbWUsICZhLT5zdCwgJnN0X21vZGUsIDApOwotCQkvKgogCQkgKiBJZiBpdCdzIG5vdCBhIGRpciAob3IgaXQncyBhIGJyb2tlbiBzeW1saW5rKSwKIAkJICogdGhlbiBkb24ndCBmb2xsb3cgaXQuCisJCSAqCisJCSAqIFdpbmRvd3MgZGlzdGluZ3Vpc2hlcyBmaWxlIGFuZCBkaXJlY3Rvcnkgc3ltbGlua3MuCisJCSAqIEEgZmlsZSBzeW1saW5rIG1heSBlcnJvbmVvdXNseSBwb2ludCB0byBhIGRpcmVjdG9yeQorCQkgKiBhbmQgYSBkaXJlY3Rvcnkgc3ltbGluayB0byBhIGZpbGUuIFdpbmRvd3MgZG9lcyBub3QgZm9sbG93CisJCSAqIHN1Y2ggc3ltbGlua3MuIFdlIGFsd2F5cyBuZWVkIGJvdGggc291cmNlIGFuZCB0YXJnZXQKKwkJICogaW5mb3JtYXRpb24uCiAJCSAqLwotCQlpZiAociAhPSAwIHx8ICFTX0lTRElSKGEtPm1vZGUpKQotCQkJciA9IGZpbGVfaW5mb3JtYXRpb24oYSwgYS0+bmFtZSwgJmEtPnN0LCAmc3RfbW9kZSwgMSk7CisJCXIgPSBmaWxlX2luZm9ybWF0aW9uKGEsIGEtPm5hbWUsICZsc3QsICZsc3RfbW9kZSwgMSk7CiAJCWlmIChyICE9IDApIHsKIAkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKIAkJCSAgICAiQ2FuJ3Qgc3RhdCBleGlzdGluZyBvYmplY3QiKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQl9IGVsc2UgaWYgKFNfSVNMTksobHN0X21vZGUpKSB7CisJCQlpZiAobHN0LmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCQkJZGlybG5rID0gMTsKKwkJCS8qIEluIGNhc2Ugb2YgYSBzeW1saW5rIHdlIG5lZWQgdGFyZ2V0IGluZm9ybWF0aW9uICovCisJCQlyID0gZmlsZV9pbmZvcm1hdGlvbihhLCBhLT5uYW1lLCAmYS0+c3QsICZzdF9tb2RlLCAwKTsKKwkJCWlmIChyICE9IDApIHsKKwkJCQlhLT5zdCA9IGxzdDsKKwkJCQlzdF9tb2RlID0gbHN0X21vZGU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhLT5zdCA9IGxzdDsKKwkJCXN0X21vZGUgPSBsc3RfbW9kZTsKIAkJfQogCiAJCS8qCkBAIC0xNDA0LDE3ICsxNTY1LDUwIEBACiAJCX0KIAogCQlpZiAoIVNfSVNESVIoc3RfbW9kZSkpIHsKLQkJCS8qIEEgbm9uLWRpciBpcyBpbiB0aGUgd2F5LCB1bmxpbmsgaXQuICovCi0JCQlpZiAoZGlza191bmxpbmsoYS0+bmFtZSkgIT0gMCkgewotCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBlcnJubywKLQkJCQkgICAgIkNhbid0IHVubGluayBhbHJlYWR5LWV4aXN0aW5nIG9iamVjdCIpOwotCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQkJaWYgKGEtPmZsYWdzICYKKwkJCSAgICBBUkNISVZFX0VYVFJBQ1RfQ0xFQVJfTk9DSEFOR0VfRkZMQUdTKSB7CisJCQkJKHZvaWQpY2xlYXJfbm9jaGFuZ2VfZmZsYWdzKGEpOwogCQkJfQotCQkJYS0+cHN0ID0gTlVMTDsKLQkJCS8qIFRyeSBhZ2Fpbi4gKi8KLQkJCWVuID0gY3JlYXRlX2ZpbGVzeXN0ZW1fb2JqZWN0KGEpOworCQkJaWYgKChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TQUZFX1dSSVRFUykgJiYKKwkJCQlTX0lTUkVHKHN0X21vZGUpKSB7CisJCQkJaW50IGZkID0gbGFfbWt0ZW1wKGEpOworCisJCQkJaWYgKGZkID09IC0xKQorCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJCQlhLT5maCA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworCQkJCWlmIChhLT5maCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CisKKwkJCQlhLT5wc3QgPSBOVUxMOworCQkJCWVuID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGRpcmxuaykgeworCQkJCQkvKiBFZGdlIGNhc2U6IGRpciBzeW1saW5rIHBvaW50aW5nCisJCQkJCSAqIHRvIGEgZmlsZSAqLworCQkJCQlpZiAoZGlza19ybWRpcihhLT5uYW1lKSAhPSAwKSB7CisJCQkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKKwkJCQkJCSAgICBlcnJubywgIkNhbid0IHVubGluayAiCisJCQkJCQkgICAgImRpcmVjdG9yeSBzeW1saW5rIik7CisJCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChkaXNrX3VubGluayhhLT5uYW1lKSAhPSAwKSB7CisJCQkJCQkvKiBBIG5vbi1kaXIgaXMgaW4gdGhlIHdheSwKKwkJCQkJCSAqIHVubGluayBpdC4gKi8KKwkJCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCQkJICAgIGVycm5vLCAiQ2FuJ3QgdW5saW5rICIKKwkJCQkJCSAgICAiYWxyZWFkeS1leGlzdGluZyBvYmplY3QiKTsKKwkJCQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworCQkJCQl9CisJCQkJfQorCQkJCWEtPnBzdCA9IE5VTEw7CisJCQkJLyogVHJ5IGFnYWluLiAqLworCQkJCWVuID0gY3JlYXRlX2ZpbGVzeXN0ZW1fb2JqZWN0KGEpOworCQkJfQogCQl9IGVsc2UgaWYgKCFTX0lTRElSKGEtPm1vZGUpKSB7CiAJCQkvKiBBIGRpciBpcyBpbiB0aGUgd2F5IG9mIGEgbm9uLWRpciwgcm1kaXIgaXQuICovCisJCQlpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfQ0xFQVJfTk9DSEFOR0VfRkZMQUdTKQorCQkJCSh2b2lkKWNsZWFyX25vY2hhbmdlX2ZmbGFncyhhKTsKIAkJCWlmIChkaXNrX3JtZGlyKGEtPm5hbWUpICE9IDApIHsKIAkJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZXJybm8sCiAJCQkJICAgICJDYW4ndCByZW1vdmUgYWxyZWFkeS1leGlzdGluZyBkaXIiKTsKQEAgLTE0NjIsNiArMTY1Niw3IEBACiAJd2NoYXJfdCAqZnVsbG5hbWU7CiAJbW9kZV90IGZpbmFsX21vZGUsIG1vZGU7CiAJaW50IHI7CisJRFdPUkQgYXR0cnMgPSAwOwogCiAJLyogV2UgaWRlbnRpZnkgaGFyZC9zeW1saW5rcyBhY2NvcmRpbmcgdG8gdGhlIGxpbmsgbmFtZXMuICovCiAJLyogU2luY2UgbGluaygyKSBhbmQgc3ltbGluaygyKSBkb24ndCBoYW5kbGUgbW9kZXMsIHdlJ3JlIGRvbmUgaGVyZS4gKi8KQEAgLTE0NzUsNiArMTY3MCwyMCBAQAogCQkJZXJybm8gPSBFSU5WQUw7CiAJCQlyID0gLTE7CiAJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVW5saW5raW5nIGFuZCBsaW5raW5nIGhlcmUgaXMgcmVhbGx5IG5vdCBhdG9taWMsCisJCQkgKiBidXQgZG9pbmcgaXQgcmlnaHQsIHdvdWxkIHJlcXVpcmUgdXMgdG8gY29uc3RydWN0CisJCQkgKiBhbiBta3RlbXBsaW5rKCkgZnVuY3Rpb24sIGFuZCB0aGVuIHVzZSBfd3JlbmFtZSgpLgorCQkJICovCisJCQlpZiAoYS0+ZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfU0FGRV9XUklURVMpIHsKKwkJCQlhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyhuYW1lZnVsbCk7CisJCQkJaWYgKGF0dHJzICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisJCQkJCWlmIChhdHRycyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKwkJCQkJCWRpc2tfcm1kaXIobmFtZWZ1bGwpOworCQkJCQllbHNlCisJCQkJCQlkaXNrX3VubGluayhuYW1lZnVsbCk7CisJCQkJfQorCQkJfQogCQkJciA9IGxhX0NyZWF0ZUhhcmRMaW5rVyhuYW1lZnVsbCwgbGlua2Z1bGwpOwogCQkJaWYgKHIgPT0gMCkgewogCQkJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CkBAIC0xNTExLDEwICsxNzIwLDMxIEBACiAJfQogCWxpbmtuYW1lID0gYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3coYS0+ZW50cnkpOwogCWlmIChsaW5rbmFtZSAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFVubGlua2luZyBhbmQgbGlua2luZyBoZXJlIGlzIHJlYWxseSBub3QgYXRvbWljLAorCQkgKiBidXQgZG9pbmcgaXQgcmlnaHQsIHdvdWxkIHJlcXVpcmUgdXMgdG8gY29uc3RydWN0CisJCSAqIGFuIG1rdGVtcGxpbmsoKSBmdW5jdGlvbiwgYW5kIHRoZW4gdXNlIF93cmVuYW1lKCkuCisJCSAqLworCQlhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyhhLT5uYW1lKTsKKwkJaWYgKGF0dHJzICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisJCQlpZiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCQkJZGlza19ybWRpcihhLT5uYW1lKTsKKwkJCWVsc2UKKwkJCQlkaXNrX3VubGluayhhLT5uYW1lKTsKKwkJfQogI2lmIEhBVkVfU1lNTElOSwogCQlyZXR1cm4gc3ltbGluayhsaW5rbmFtZSwgYS0+bmFtZSkgPyBlcnJubyA6IDA7CiAjZWxzZQotCQlyZXR1cm4gKEVQRVJNKTsKKwkJZXJybm8gPSAwOworCQlyID0gbGFfQ3JlYXRlU3ltYm9saWNMaW5rVygoY29uc3Qgd2NoYXJfdCAqKWEtPm5hbWUsIGxpbmtuYW1lLAorCQkgICAgYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUoYS0+ZW50cnkpKTsKKwkJaWYgKHIgPT0gMCkgeworCQkJaWYgKGVycm5vID09IDApCisJCQkJbGFfZG9zbWFwZXJyKEdldExhc3RFcnJvcigpKTsKKwkJCXIgPSBlcnJubzsKKwkJfSBlbHNlCisJCQlyID0gMDsKKwkJcmV0dXJuIChyKTsKICNlbmRpZgogCX0KIApAQCAtMTUzOCw2ICsxNzY4LDcgQEAKIAkJLyogUE9TSVggcmVxdWlyZXMgdGhhdCB3ZSBmYWxsIHRocm91Z2ggaGVyZS4gKi8KIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIEFFX0lGUkVHOgorCQlhLT50bXBuYW1lID0gTlVMTDsKIAkJZnVsbG5hbWUgPSBhLT5uYW1lOwogCQkvKiBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wgKi8KIAkJYS0+ZmggPSBDcmVhdGVGaWxlVyhmdWxsbmFtZSwgR0VORVJJQ19XUklURSwgMCwgTlVMTCwKQEAgLTE2NjcsNiArMTg5OCw4IEBACiAJCQlsYV9jaG1vZChwLT5uYW1lLCBwLT5tb2RlKTsKIAkJaWYgKHAtPmZpeHVwICYgVE9ET19BQ0xTKQogCQkJc2V0X2FjbHMoYSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUsIHAtPm5hbWUsICZwLT5hY2wpOworCQlpZiAocC0+Zml4dXAgJiBUT0RPX0ZGTEFHUykKKwkJCXNldF9mZmxhZ3NfcGxhdGZvcm0ocC0+bmFtZSwgcC0+ZmZsYWdzX3NldCwgMCk7CiAJCW5leHQgPSBwLT5uZXh0OwogCQlhcmNoaXZlX2FjbF9jbGVhcigmcC0+YWNsKTsKIAkJZnJlZShwLT5uYW1lKTsKQEAgLTE2OTAsOSArMTkyMyw5IEBACiAJcmV0ID0gX2FyY2hpdmVfd3JpdGVfZGlza19jbG9zZSgmYS0+YXJjaGl2ZSk7CiAJYXJjaGl2ZV93cml0ZV9kaXNrX3NldF9ncm91cF9sb29rdXAoJmEtPmFyY2hpdmUsIE5VTEwsIE5VTEwsIE5VTEwpOwogCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfdXNlcl9sb29rdXAoJmEtPmFyY2hpdmUsIE5VTEwsIE5VTEwsIE5VTEwpOwotCWlmIChhLT5lbnRyeSkKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGEtPmVudHJ5KTsKKwlhcmNoaXZlX2VudHJ5X2ZyZWUoYS0+ZW50cnkpOwogCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZhLT5fbmFtZV9kYXRhKTsKKwlhcmNoaXZlX3dzdHJpbmdfZnJlZSgmYS0+X3RtcG5hbWVfZGF0YSk7CiAJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmYS0+YXJjaGl2ZS5lcnJvcl9zdHJpbmcpOwogCWFyY2hpdmVfd3N0cmluZ19mcmVlKCZhLT5wYXRoX3NhZmUpOwogCWEtPmFyY2hpdmUubWFnaWMgPSAwOwpAQCAtMTc4NCw2ICsyMDE3LDcgQEAKIAlhLT5maXh1cF9saXN0ID0gZmU7CiAJZmUtPmZpeHVwID0gMDsKIAlmZS0+bmFtZSA9IF93Y3NkdXAocGF0aG5hbWUpOworCWZlLT5mZmxhZ3Nfc2V0ID0gMDsKIAlyZXR1cm4gKGZlKTsKIH0KIApAQCAtMTc5OCw3ICsyMDMyLDYgQEAKIAlyZXR1cm4gKGEtPmN1cnJlbnRfZml4dXApOwogfQogCi0vKiBUT0RPOiBNYWtlIHRoaXMgd29yay4gKi8KIC8qCiAgKiBUT0RPOiBUaGUgZGVlcC1kaXJlY3Rvcnkgc3VwcG9ydCBieXBhc3NlcyB0aGlzOyBkaXNhYmxlIGRlZXAgZGlyZWN0b3J5CiAgKiBzdXBwb3J0IGlmIHdlJ3JlIGRvaW5nIHN5bWxpbmsgY2hlY2tzLgpAQCAtMTgwOCw3ICsyMDQxLDYgQEAKICAqIHNjYW4gdGhlIHBhdGggYW5kIGJvdGggY2FuIGJlIG9wdGltaXplZCBieSBjb21wYXJpbmcgYWdhaW5zdCBvdGhlcgogICogcmVjZW50IHBhdGhzLgogICovCi0vKiBUT0RPOiBFeHRlbmQgdGhpcyB0byBzdXBwb3J0IHN5bWxpbmtzIG9uIFdpbmRvd3MgVmlzdGEgYW5kIGxhdGVyLiAqLwogc3RhdGljIGludAogY2hlY2tfc3ltbGlua3Moc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKIHsKQEAgLTE4MjcsNiArMjA1OSw5IEBACiAJcCA9IGEtPnBhdGhfc2FmZS5zOwogCXdoaWxlICgoKnBuICE9ICdcMCcpICYmICgqcCA9PSAqcG4pKQogCQkrK3AsICsrcG47CisJLyogU2tpcCBsZWFkaW5nIGJhY2tzbGFzaGVzICovCisJd2hpbGUgKCpwbiA9PSAnXFwnKQorCQkrK3BuOwogCWMgPSBwblswXTsKIAkvKiBLZWVwIGdvaW5nIHVudGlsIHdlJ3ZlIGNoZWNrZWQgdGhlIGVudGlyZSBuYW1lLiAqLwogCXdoaWxlIChwblswXSAhPSAnXDAnICYmIChwblswXSAhPSAnXFwnIHx8IHBuWzFdICE9ICdcMCcpKSB7CkBAIC0xODQ0LDExICsyMDc5LDIxIEBACiAJCX0gZWxzZSBpZiAoU19JU0xOSyhzdF9tb2RlKSkgewogCQkJaWYgKGMgPT0gJ1wwJykgewogCQkJCS8qCi0JCQkJICogTGFzdCBlbGVtZW50IGlzIHN5bWxpbms7IHJlbW92ZSBpdAotCQkJCSAqIHNvIHdlIGNhbiBvdmVyd3JpdGUgaXQgd2l0aCB0aGUKKwkJCQkgKiBMYXN0IGVsZW1lbnQgaXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBzeW1saW5rLgorCQkJCSAqIFJlbW92ZSBpdCBzbyB3ZSBjYW4gb3ZlcndyaXRlIGl0IHdpdGggdGhlCiAJCQkJICogaXRlbSBiZWluZyBleHRyYWN0ZWQuCiAJCQkJICovCi0JCQkJaWYgKGRpc2tfdW5saW5rKGEtPm5hbWUpKSB7CisJCQkJaWYgKGEtPmZsYWdzICYKKwkJCQkgICAgQVJDSElWRV9FWFRSQUNUX0NMRUFSX05PQ0hBTkdFX0ZGTEFHUykgeworCQkJCQkodm9pZCljbGVhcl9ub2NoYW5nZV9mZmxhZ3MoYSk7CisJCQkJfQorCQkJCWlmIChzdC5kd0ZpbGVBdHRyaWJ1dGVzICYKKwkJCQkgICAgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSB7CisJCQkJCXIgPSBkaXNrX3JtZGlyKGEtPm5hbWUpOworCQkJCX0gZWxzZSB7CisJCQkJCXIgPSBkaXNrX3VubGluayhhLT5uYW1lKTsKKwkJCQl9CisJCQkJaWYgKHIpIHsKIAkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIGVycm5vLAogCQkJCQkgICAgIkNvdWxkIG5vdCByZW1vdmUgc3ltbGluayAlbHMiLAogCQkJCQkgICAgYS0+bmFtZSk7CkBAIC0xODcyLDcgKzIxMTcsMTcgQEAKIAkJCQlyZXR1cm4gKDApOwogCQkJfSBlbHNlIGlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9VTkxJTkspIHsKIAkJCQkvKiBVc2VyIGFza2VkIHVzIHRvIHJlbW92ZSBwcm9ibGVtcy4gKi8KLQkJCQlpZiAoZGlza191bmxpbmsoYS0+bmFtZSkgIT0gMCkgeworCQkJCWlmIChhLT5mbGFncyAmCisJCQkJICAgIEFSQ0hJVkVfRVhUUkFDVF9DTEVBUl9OT0NIQU5HRV9GRkxBR1MpIHsKKwkJCQkJKHZvaWQpY2xlYXJfbm9jaGFuZ2VfZmZsYWdzKGEpOworCQkJCX0KKwkJCQlpZiAoc3QuZHdGaWxlQXR0cmlidXRlcyAmCisJCQkJICAgIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgeworCQkJCQlyID0gZGlza19ybWRpcihhLT5uYW1lKTsKKwkJCQl9IGVsc2UgeworCQkJCQlyID0gZGlza191bmxpbmsoYS0+bmFtZSk7CisJCQkJfQorCQkJCWlmIChyICE9IDApIHsKIAkJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIDAsCiAJCQkJCSAgICAiQ2Fubm90IHJlbW92ZSBpbnRlcnZlbmluZyAiCiAJCQkJCSAgICAic3ltbGluayAlbHMiLCBhLT5uYW1lKTsKQEAgLTE4ODgsNiArMjE0Myw4IEBACiAJCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CiAJCQl9CiAJCX0KKwkJcG5bMF0gPSBjOworCQlwbisrOwogCX0KIAlwblswXSA9IGM7CiAJLyogV2UndmUgY2hlY2tlZCBhbmQvb3IgY2xlYW5lZCB0aGUgd2hvbGUgcGF0aCwgc28gcmVtZW1iZXIgaXQuICovCkBAIC0yNDM4LDEwICsyNjk1LDU2IEBACiAJcmV0dXJuIChyKTsKIH0KIAorc3RhdGljIGludCBzZXRfZmZsYWdzX3BsYXRmb3JtKGNvbnN0IHdjaGFyX3QgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZmZsYWdzX3NldCwKKyAgICB1bnNpZ25lZCBsb25nIGZmbGFnc19jbGVhcikKK3sKKwlEV09SRCBvbGRmbGFncywgbmV3ZmxhZ3M7CisJd2NoYXJfdCAqZnVsbG5hbWU7CisKKwljb25zdCBEV09SRCBzZXR0YWJsZV9mbGFncyA9CisJICAgIEZJTEVfQVRUUklCVVRFX0FSQ0hJVkUgfAorCSAgICBGSUxFX0FUVFJJQlVURV9ISURERU4gfAorCSAgICBGSUxFX0FUVFJJQlVURV9OT1JNQUwgfAorCSAgICBGSUxFX0FUVFJJQlVURV9OT1RfQ09OVEVOVF9JTkRFWEVEIHwKKwkgICAgRklMRV9BVFRSSUJVVEVfT0ZGTElORSB8CisJICAgIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZIHwKKwkgICAgRklMRV9BVFRSSUJVVEVfU1lTVEVNIHwKKwkgICAgRklMRV9BVFRSSUJVVEVfVEVNUE9SQVJZOworCisJb2xkZmxhZ3MgPSBHZXRGaWxlQXR0cmlidXRlc1cobmFtZSk7CisJaWYgKG9sZGZsYWdzID09IChEV09SRCktMSAmJgorCSAgICBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9JTlZBTElEX05BTUUpIHsKKwkJZnVsbG5hbWUgPSBfX2xhX3dpbl9wZXJtaXNzaXZlX25hbWVfdyhuYW1lKTsKKwkJb2xkZmxhZ3MgPSBHZXRGaWxlQXR0cmlidXRlc1coZnVsbG5hbWUpOworCX0KKwlpZiAob2xkZmxhZ3MgPT0gKERXT1JEKS0xKSB7CisJCWxhX2Rvc21hcGVycihHZXRMYXN0RXJyb3IoKSk7CisJCXJldHVybiAoQVJDSElWRV9XQVJOKTsKKwl9CisJbmV3ZmxhZ3MgPSAoKG9sZGZsYWdzICYgfmZmbGFnc19jbGVhcikgfCBmZmxhZ3Nfc2V0KSAmIHNldHRhYmxlX2ZsYWdzOworCWlmKFNldEZpbGVBdHRyaWJ1dGVzVyhuYW1lLCBuZXdmbGFncykgPT0gMCkKKwkJcmV0dXJuIChBUkNISVZFX1dBUk4pOworCXJldHVybiAoQVJDSElWRV9PSyk7Cit9CisKK3N0YXRpYyBpbnQKK2NsZWFyX25vY2hhbmdlX2ZmbGFncyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQoreworCXJldHVybiAoc2V0X2ZmbGFnc19wbGF0Zm9ybShhLT5uYW1lLCAwLCBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkpOworfQorCiBzdGF0aWMgaW50CiBzZXRfZmZsYWdzKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCiB7Ci0JKHZvaWQpYTsgLyogVU5VU0VEICovCisJdW5zaWduZWQgbG9uZwlzZXQsIGNsZWFyOworCisJaWYgKGEtPnRvZG8gJiBUT0RPX0ZGTEFHUykgeworCQlhcmNoaXZlX2VudHJ5X2ZmbGFncyhhLT5lbnRyeSwgJnNldCwgJmNsZWFyKTsKKwkJaWYgKHNldCA9PSAwICAmJiBjbGVhciA9PSAwKQorCQkJcmV0dXJuIChBUkNISVZFX09LKTsKKwkJcmV0dXJuIChzZXRfZmZsYWdzX3BsYXRmb3JtKGEtPm5hbWUsIHNldCwgY2xlYXIpKTsKKworICAgICAgICB9CiAJcmV0dXJuIChBUkNISVZFX09LKTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmlsdGVyLjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maWx0ZXIuMwppbmRleCBkNmZhMDcxLi5jODNlYjc3IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maWx0ZXIuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maWx0ZXIuMwpAQCAtNDMsNyArNDMsNyBAQAogLk5tIGFyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl9wcm9ncmFtICwKIC5ObSBhcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfdXVlbmNvZGUgLAogLk5tIGFyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl94eiAsCi0uTm0gYXJjaGl2ZV93cml0ZV9hZGRfZmlsdGVyX3pzdGQgLAorLk5tIGFyY2hpdmVfd3JpdGVfYWRkX2ZpbHRlcl96c3RkCiAuTmQgZnVuY3Rpb25zIGVuYWJsaW5nIG91dHB1dCBmaWx0ZXJzCiAuU2ggTElCUkFSWQogU3RyZWFtaW5nIEFyY2hpdmUgTGlicmFyeSAobGliYXJjaGl2ZSwgLWxhcmNoaXZlKQpAQCAtMTI1LDEwICsxMjUsMTAgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2Zvcm1hdCAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5LjMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkuMwppbmRleCBkYzFiOTRiLi41Nzk3ZTE2IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkuMwpAQCAtNzEsOSArNzEsOSBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX2RhdGEgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucyAzICwKKy5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGNwaW8gNSAsCiAuWHIgbXRyZWUgNSAsCiAuWHIgdGFyIDUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Zvcm1hdC4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZm9ybWF0LjMKaW5kZXggYWFhZmIwYS4uNDdhNzQwMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZm9ybWF0LjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZm9ybWF0LjMKQEAgLTUyLDcgKzUyLDcgQEAKIC5ObSBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdjd0YXIgLAogLk5tIGFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF93YXJjICwKIC5ObSBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfeGFyICwKLS5ObSBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfemlwICwKKy5ObSBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfemlwCiAuTmQgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBhcmNoaXZlcwogLlNoIExJQlJBUlkKIFN0cmVhbWluZyBBcmNoaXZlIExpYnJhcnkgKGxpYmFyY2hpdmUsIC1sYXJjaGl2ZSkKQEAgLTE2Niw5ICsxNjYsOSBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIGxpYmFyY2hpdmUtZm9ybWF0cyA1ICwKIC5YciBtdHJlZSA1ICwKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2ZyZWUuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2ZyZWUuMwppbmRleCAxYjJkMDcxLi41MjEwZTJhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9mcmVlLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZnJlZS4zCkBAIC01Niw3ICs1Niw3IEBACiB0byByZWxlYXNlIHRoZSByZXNvdXJjZXMuCiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNwZWVkIHJlY292ZXJ5IHdoZW4gdGhlIGFyY2hpdmUgY3JlYXRpb24KIG11c3QgYmUgYWJvcnRlZC4KLU5vdGUgdGhhdCB0aGUgY3JlYXRlZCBhcmNoaXZlIGlzIGxpa2VseSB0byBiZSBtYWxmb3JtZWQgaW4gdGhpcyBjYXNlOyAKK05vdGUgdGhhdCB0aGUgY3JlYXRlZCBhcmNoaXZlIGlzIGxpa2VseSB0byBiZSBtYWxmb3JtZWQgaW4gdGhpcyBjYXNlOwogLkl0IEZuIGFyY2hpdmVfd3JpdGVfY2xvc2UKIENvbXBsZXRlIHRoZSBhcmNoaXZlIGFuZCBpbnZva2UgdGhlIGNsb3NlIGNhbGxiYWNrLgogLkl0IEZuIGFyY2hpdmVfd3JpdGVfZmluaXNoCkBAIC04OSw4ICs4OSw4IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9oZWFkZXIuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2hlYWRlci4zCmluZGV4IDRkZTU4ZjMuLjIyMTdiMTggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2hlYWRlci4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2hlYWRlci4zCkBAIC02Niw4ICs2Niw4IEBACiAuXCIKIC5TaCBTRUUgQUxTTwogLlhyIHRhciAxICwKLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9uZXcuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX25ldy4zCmluZGV4IGYwNWQyNjkuLjc4OGNiYjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX25ldy4zCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX25ldy4zCkBAIC01MCw5ICs1MCw5IEBACiAuXCIgLlNoIEVSUk9SUwogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgY3BpbyA1ICwKIC5YciBtdHJlZSA1ICwKIC5YciB0YXIgNQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfb3Blbi4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfb3Blbi4zCmluZGV4IDQ1Nzg3M2UuLjAxMjlkMTAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX29wZW4uMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9vcGVuLjMKQEAgLTIwMCw3ICsyMDAsNyBAQAogLkZuIGFyY2hpdmVfc2V0X2Vycm9yCiB0byByZWdpc3RlciBhbiBlcnJvciBjb2RlIGFuZCBtZXNzYWdlIGFuZAogcmV0dXJuCi0uQ20gQVJDSElWRV9GQVRBTC4KKy5DbSBBUkNISVZFX0ZBVEFMIC4KIC5QcAogTm90ZSB0aGF0IGlmIHRoZSBjbGllbnQtcHJvdmlkZWQgd3JpdGUgY2FsbGJhY2sgZnVuY3Rpb24KIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgdGhhdCBlcnJvciB3aWxsIGJlIHByb3BhZ2F0ZWQgYmFjayB0byB0aGUgY2FsbGVyCkBAIC0yMzQsMTMgKzIzNCwxMyBAQAogLlwiCiAuU2ggU0VFIEFMU08KIC5YciB0YXIgMSAsCi0uWHIgbGliYXJjaGl2ZSAzICwKIC5YciBhcmNoaXZlX3dyaXRlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfYmxvY2tzaXplIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfZmlsdGVyIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfZm9ybWF0IDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfbmV3IDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCisuWHIgbGliYXJjaGl2ZSAzICwKIC5YciBjcGlvIDUgLAogLlhyIG10cmVlIDUgLAogLlhyIHRhciA1CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9wcml2YXRlLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgKaW5kZXggMGRmZDFiMS4uMjdjYmEwMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3ByaXZhdGUuaApAQCAtMjUsMTkgKzI1LDI0IEBACiAgKiAkRnJlZUJTRDogaGVhZC9saWIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCAyMDExNTUgMjAwOS0xMi0yOSAwNToyMDoxMloga2llbnR6bGUgJAogICovCiAKKyNpZm5kZWYgQVJDSElWRV9XUklURV9QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9XUklURV9QUklWQVRFX0hfSU5DTFVERUQKKwogI2lmbmRlZiBfX0xJQkFSQ0hJVkVfQlVJTEQKICNpZm5kZWYgX19MSUJBUkNISVZFX1RFU1QKICNlcnJvciBUaGlzIGhlYWRlciBpcyBvbmx5IHRvIGJlIHVzZWQgaW50ZXJuYWxseSB0byBsaWJhcmNoaXZlLgogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBBUkNISVZFX1dSSVRFX1BSSVZBVEVfSF9JTkNMVURFRAotI2RlZmluZQlBUkNISVZFX1dSSVRFX1BSSVZBVEVfSF9JTkNMVURFRAotCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfc3RyaW5nLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAKKyNkZWZpbmUJQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfTkVXCQkxVQorI2RlZmluZQlBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9PUEVOCQkyVQorI2RlZmluZQlBUkNISVZFX1dSSVRFX0ZJTFRFUl9TVEFURV9DTE9TRUQJNFUKKyNkZWZpbmUJQVJDSElWRV9XUklURV9GSUxURVJfU1RBVEVfRkFUQUwJMHg4MDAwVQorCiBzdHJ1Y3QgYXJjaGl2ZV93cml0ZTsKIAogc3RydWN0IGFyY2hpdmVfd3JpdGVfZmlsdGVyIHsKQEAgLTU1LDYgKzYwLDcgQEAKIAlpbnQJICBjb2RlOwogCWludAkgIGJ5dGVzX3Blcl9ibG9jazsKIAlpbnQJICBieXRlc19pbl9sYXN0X2Jsb2NrOworCWludAkgIHN0YXRlOwogfTsKIAogI2lmIEFSQ0hJVkVfVkVSU0lPTiA8IDQwMDAwMDAKQEAgLTY2LDggKzcyLDYgQEAKIGludCBfX2FyY2hpdmVfd3JpdGVfb3V0cHV0KHN0cnVjdCBhcmNoaXZlX3dyaXRlICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKIGludCBfX2FyY2hpdmVfd3JpdGVfbnVsbHMoc3RydWN0IGFyY2hpdmVfd3JpdGUgKiwgc2l6ZV90KTsKIGludCBfX2FyY2hpdmVfd3JpdGVfZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7Ci1pbnQgX19hcmNoaXZlX3dyaXRlX29wZW5fZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqKTsKLWludCBfX2FyY2hpdmVfd3JpdGVfY2xvc2VfZmlsdGVyKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2ZpbHRlciAqKTsKIAogc3RydWN0IGFyY2hpdmVfd3JpdGUgewogCXN0cnVjdCBhcmNoaXZlCWFyY2hpdmU7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0LmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0LmMKaW5kZXggMGY3MDYyMy4uMTJkZTA4MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXQuYwpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIC8qIEEgdGFibGUgdGhhdCBtYXBzIGZvcm1hdCBjb2RlcyB0byBmdW5jdGlvbnMuICovCiBzdGF0aWMgY29uc3QKQEAgLTc2LDMgKzc3LDQ3IEBACiAJYXJjaGl2ZV9zZXRfZXJyb3IoYSwgRUlOVkFMLCAiTm8gc3VjaCBmb3JtYXQiKTsKIAlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogfQorCit2b2lkCitfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoc3RydWN0IGFyY2hpdmUgKmEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LCBjb25zdCBjaGFyICpmb3JtYXQpCit7CisJY2hhciAqbmFtZSA9IE5VTEw7CisKKwlzd2l0Y2ggKGFyY2hpdmVfZW50cnlfZmlsZXR5cGUoZW50cnkpKSB7CisJLyoKKwkgKiBBbGwgZm9ybWF0cyBzaG91bGQgYmUgYWJsZSB0byBhcmNoaXZlIHJlZ3VsYXIgZmlsZXMgKEFFX0lGUkVHKQorCSAqLworCWNhc2UgQUVfSUZESVI6CisJCW5hbWUgPSAiZGlyZWN0b3JpZXMiOworCQlicmVhazsKKwljYXNlIEFFX0lGTE5LOgorCQluYW1lID0gInN5bWJvbGljIGxpbmtzIjsKKwkJYnJlYWs7CisJY2FzZSBBRV9JRkNIUjoKKwkJbmFtZSA9ICJjaGFyYWN0ZXIgZGV2aWNlcyI7CisJCWJyZWFrOworCWNhc2UgQUVfSUZCTEs6CisJCW5hbWUgPSAiYmxvY2sgZGV2aWNlcyI7CisJCWJyZWFrOworCWNhc2UgQUVfSUZJRk86CisJCW5hbWUgPSAibmFtZWQgcGlwZXMiOworCQlicmVhazsKKwljYXNlIEFFX0lGU09DSzoKKwkJbmFtZSA9ICJzb2NrZXRzIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKG5hbWUgIT0gTlVMTCkgeworCQlhcmNoaXZlX3NldF9lcnJvcihhLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorCQkgICAgIiVzOiAlcyBmb3JtYXQgY2Fubm90IGFyY2hpdmUgJXMiLAorCQkgICAgYXJjaGl2ZV9lbnRyeV9wYXRobmFtZShlbnRyeSksIGZvcm1hdCwgbmFtZSk7CisJfSBlbHNlIHsKKwkJYXJjaGl2ZV9zZXRfZXJyb3IoYSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKKwkJICAgICIlczogJXMgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIGZpbGVzIHdpdGggbW9kZSAwJWxvIiwKKwkJICAgIGFyY2hpdmVfZW50cnlfcGF0aG5hbWUoZW50cnkpLCBmb3JtYXQsCisJCSAgICAodW5zaWduZWQgbG9uZylhcmNoaXZlX2VudHJ5X21vZGUoZW50cnkpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0Xzd6aXAuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfN3ppcC5jCmluZGV4IDJiZDRlYzQuLjY5YWY4MTQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfN3ppcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfN3ppcC5jCkBAIC0zMSwxMyArMzEsMTMgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lmZGVmIEhBVkVfQlpMSUJfSAotI2luY2x1ZGUgPGNtX2J6bGliLmg+CisjaW5jbHVkZSA8Y20zcC9iemxpYi5oPgogI2VuZGlmCiAjaWYgSEFWRV9MWk1BX0gKLSNpbmNsdWRlIDxjbV9sem1hLmg+CisjaW5jbHVkZSA8Y20zcC9sem1hLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfcmIuaCIKICNpbmNsdWRlICJhcmNoaXZlX3N0cmluZy5oIgogI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIC8qCiAgKiBDb2RlYyBJRApAQCAtMTY0LDcgKzE2NSw3IEBACiAJbW9kZV90CQkJIG1vZGU7CiAJdWludDMyX3QJCSBjcmMzMjsKIAotCWludAkJCSBkaXI6MTsKKwlzaWduZWQgaW50CQkgZGlyOjE7CiB9OwogCiBzdHJ1Y3QgXzd6aXAgewpAQCAtNDM5LDcgKzQ0MCw4IEBACiAKIAlyID0gZmlsZV9uZXcoYSwgZW50cnksICZmaWxlKTsKIAlpZiAociA8IEFSQ0hJVkVfV0FSTikgewotCQlmaWxlX2ZyZWUoZmlsZSk7CisJCWlmIChmaWxlICE9IE5VTEwpCisJCQlmaWxlX2ZyZWUoZmlsZSk7CiAJCXJldHVybiAocik7CiAJfQogCWlmIChmaWxlLT5zaXplID09IDAgJiYgZmlsZS0+ZGlyKSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2FyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2FyLmMKaW5kZXggNTAzMDVjYy4uZmMwZGUxZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9hci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfYXIuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfZW50cnkuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdHJ1Y3QgYXJfdyB7CiAJdWludDY0X3QJIGVudHJ5X2J5dGVzX3JlbWFpbmluZzsKQEAgLTE4Nyw2ICsxODgsMTEgQEAKIAkJYnVmZltBUl9uYW1lX29mZnNldF0gPSAnLyc7CiAJCWdvdG8gc3RhdDsKIAl9CisJaWYgKHN0cmNtcChwYXRobmFtZSwgIi9TWU02NC8iKSA9PSAwKSB7CisJCS8qIEVudHJ5IGlzIGFyY2hpdmUgc3ltYm9sIHRhYmxlIGluIEdOVSA2NC1iaXQgZm9ybWF0ICovCisJCW1lbWNweShidWZmICsgQVJfbmFtZV9vZmZzZXQsICIvU1lNNjQvIiwgNyk7CisJCWdvdG8gc3RhdDsKKwl9CiAJaWYgKHN0cmNtcChwYXRobmFtZSwgIl9fLlNZTURFRiIpID09IDApIHsKIAkJLyogRW50cnkgaXMgYXJjaGl2ZSBzeW1ib2wgdGFibGUgaW4gQlNEIGZvcm1hdCAqLwogCQltZW1jcHkoYnVmZiArIEFSX25hbWVfb2Zmc2V0LCAiX18uU1lNREVGIiwgOSk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2NwaW8uYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfY3Bpby5jCmluZGV4IGE0YzlkMWUuLjcyOWY5YzcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfY3Bpby5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfY3Bpby5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdGF0aWMgc3NpemVfdAlhcmNoaXZlX3dyaXRlX2NwaW9fZGF0YShzdHJ1Y3QgYXJjaGl2ZV93cml0ZSAqLAogCQkgICAgY29uc3Qgdm9pZCAqYnVmZiwgc2l6ZV90IHMpOwpAQCAtNDA4LDggKzQwOSw3IEBACiAJCX0KIAl9CiBleGl0X3dyaXRlX2hlYWRlcjoKLQlpZiAoZW50cnlfbWFpbikKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAlyZXR1cm4gKHJldF9maW5hbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfY3Bpb19uZXdjLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2NwaW9fbmV3Yy5jCmluZGV4IDk1N2YxYTMuLjE3MmZkYTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfY3Bpb19uZXdjLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9jcGlvX25ld2MuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfZW50cnlfbG9jYWxlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogc3RhdGljIHNzaXplX3QJYXJjaGl2ZV93cml0ZV9uZXdjX2RhdGEoc3RydWN0IGFyY2hpdmVfd3JpdGUgKiwKIAkJICAgIGNvbnN0IHZvaWQgKmJ1ZmYsIHNpemVfdCBzKTsKQEAgLTM2Niw4ICszNjcsNyBAQAogCQl9CiAJfQogZXhpdF93cml0ZV9oZWFkZXI6Ci0JaWYgKGVudHJ5X21haW4pCi0JCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJcmV0dXJuIChyZXRfZmluYWwpOwogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2dudXRhci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9nbnV0YXIuYwppbmRleCAyZDg1OGM5Li5lYzI5YzVjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2dudXRhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfZ251dGFyLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5X2xvY2FsZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIHN0cnVjdCBnbnV0YXIgewogCXVpbnQ2NF90CWVudHJ5X2J5dGVzX3JlbWFpbmluZzsKQEAgLTMzOSw3ICszNDAsNyBAQAogCQkgKiBjYXNlIGdldHRpbmcgV0NTIGZhaWxlZC4gT24gUE9TSVgsIHRoaXMgaXMgYQogCQkgKiBub3JtYWwgb3BlcmF0aW9uLgogCQkgKi8KLQkJaWYgKHAgIT0gTlVMTCAmJiBwW3N0cmxlbihwKSAtIDFdICE9ICcvJykgeworCQlpZiAocCAhPSBOVUxMICYmIHBbMF0gIT0gJ1wwJyAmJiBwW3N0cmxlbihwKSAtIDFdICE9ICcvJykgewogCQkJc3RydWN0IGFyY2hpdmVfc3RyaW5nIGFzOwogCiAJCQlhcmNoaXZlX3N0cmluZ19pbml0KCZhcyk7CkBAIC01MzQsMTcgKzUzNSw5IEBACiAJCWNhc2UgQUVfSUZCTEs6IHRhcnR5cGUgPSAnNCcgOyBicmVhazsKIAkJY2FzZSBBRV9JRkRJUjogdGFydHlwZSA9ICc1JyA7IGJyZWFrOwogCQljYXNlIEFFX0lGSUZPOiB0YXJ0eXBlID0gJzYnIDsgYnJlYWs7Ci0JCWNhc2UgQUVfSUZTT0NLOgotCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCi0JCQkgICAgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKLQkJCSAgICAidGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSBzb2NrZXQiKTsKLQkJCXJldCA9IEFSQ0hJVkVfRkFJTEVEOwotCQkJZ290byBleGl0X3dyaXRlX2hlYWRlcjsKLQkJZGVmYXVsdDoKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAotCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkgICAgInRhciBmb3JtYXQgY2Fubm90IGFyY2hpdmUgdGhpcyAobW9kZT0wJWxvKSIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpYXJjaGl2ZV9lbnRyeV9tb2RlKGVudHJ5KSk7CisJCWRlZmF1bHQ6IC8qIEFFX0lGU09DSyBhbmQgdW5rbm93biAqLworCQkJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhLT5hcmNoaXZlLCBlbnRyeSwgImdudXRhciIpOwogCQkJcmV0ID0gQVJDSElWRV9GQUlMRUQ7CiAJCQlnb3RvIGV4aXRfd3JpdGVfaGVhZGVyOwogCQl9CkBAIC01NjUsOCArNTU4LDcgQEAKIAlnbnV0YXItPmVudHJ5X2J5dGVzX3JlbWFpbmluZyA9IGFyY2hpdmVfZW50cnlfc2l6ZShlbnRyeSk7CiAJZ251dGFyLT5lbnRyeV9wYWRkaW5nID0gMHgxZmYgJiAoLShpbnQ2NF90KWdudXRhci0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nKTsKIGV4aXRfd3JpdGVfaGVhZGVyOgotCWlmIChlbnRyeV9tYWluKQotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCXJldHVybiAocmV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9pc285NjYwLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2lzbzk2NjAuYwppbmRleCA0YWRmNjhlLi41ZGI0MTRmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2lzbzk2NjAuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X2lzbzk2NjAuYwpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWZkZWYgSEFWRV9aTElCX0gKLSNpbmNsdWRlIDxjbV96bGliLmg+CisjaW5jbHVkZSA8Y20zcC96bGliLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgImFyY2hpdmUuaCIKQEAgLTI4OSwxMiArMjg5LDEyIEBACiAJCXN0cnVjdCBleHRyX3JlYwkqY3VycmVudDsKIAl9CQkJIGV4dHJfcmVjX2xpc3Q7CiAKLQlpbnQJCQkgdmlydHVhbDoxOworCXNpZ25lZCBpbnQJCSB2aXJ0dWFsOjE7CiAJLyogSWYgc2V0IHRvIG9uZSwgdGhpcyBmaWxlIHR5cGUgaXMgYSBkaXJlY3RvcnkuCiAJICogQSBjb252ZW5pZW5jZSBmbGFnIHRvIGJlIHVzZWQgYXMKIAkgKiAiYXJjaGl2ZV9lbnRyeV9maWxldHlwZShpc29lbnQtPmZpbGUtPmVudHJ5KSA9PSBBRV9JRkRJUiIuCiAJICovCi0JaW50CQkJIGRpcjoxOworCXNpZ25lZCBpbnQJCSBkaXI6MTsKIH07CiAKIHN0cnVjdCBoYXJkbGluayB7CkBAIC03NTUsOSArNzU1LDkgQEAKIAogCS8qIFVzZWQgZm9yIG1ha2luZyB6aXNvZnMuICovCiAJc3RydWN0IHsKLQkJaW50CQkgZGV0ZWN0X21hZ2ljOjE7Ci0JCWludAkJIG1ha2luZzoxOwotCQlpbnQJCSBhbGx6ZXJvOjE7CisJCXNpZ25lZCBpbnQJIGRldGVjdF9tYWdpYzoxOworCQlzaWduZWQgaW50CSBtYWtpbmc6MTsKKwkJc2lnbmVkIGludAkgYWxsemVybzoxOwogCQl1bnNpZ25lZCBjaGFyCSBtYWdpY19idWZmZXJbNjRdOwogCQlpbnQJCSBtYWdpY19jbnQ7CiAKQEAgLTM2NTAsNyArMzY1MCw3IEBACiAJaWYgKHNpemUgPiBpc285NjYwLT53YnVmZl9yZW1haW5pbmcgfHwKIAkgICAgaXNvOTY2MC0+d2J1ZmZfcmVtYWluaW5nID09IDApIHsKIAkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKLQkJICAgICJJbnRlcm5hbCBQcm9ncmFtaW5nIGVycm9yOiBpc285NjYwOndiX2NvbnN1bWUoKSIKKwkJICAgICJJbnRlcm5hbCBQcm9ncmFtbWluZyBlcnJvcjogaXNvOTY2MDp3Yl9jb25zdW1lKCkiCiAJCSAgICAiIHNpemU9JWpkLCB3YnVmZl9yZW1haW5pbmc9JWpkIiwKIAkJICAgIChpbnRtYXhfdClzaXplLCAoaW50bWF4X3QpaXNvOTY2MC0+d2J1ZmZfcmVtYWluaW5nKTsKIAkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKQEAgLTM2NzEsNyArMzY3MSw3IEBACiAKIAlpZiAoaXNvOTY2MC0+d2J1ZmZfdHlwZSAhPSBXQl9UT19URU1QKSB7CiAJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCi0JCSAgICAiSW50ZXJuYWwgUHJvZ3JhbWluZyBlcnJvcjogaXNvOTY2MDp3Yl9zZXRfb2Zmc2V0KCkiKTsKKwkJICAgICJJbnRlcm5hbCBQcm9ncmFtbWluZyBlcnJvcjogaXNvOTY2MDp3Yl9zZXRfb2Zmc2V0KCkiKTsKIAkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAl9CiAKQEAgLTQ4OTksMTAgKzQ4OTksMTAgQEAKIAkJaWYgKHBbMF0gPT0gJy8nKSB7CiAJCQlpZiAocFsxXSA9PSAnLycpCiAJCQkJLyogQ29udmVydCAnLy8nIC0tPiAnLycgKi8KLQkJCQlzdHJjcHkocCwgcCsxKTsKKwkJCQltZW1tb3ZlKHAsIHArMSwgc3RybGVuKHArMSkgKyAxKTsKIAkJCWVsc2UgaWYgKHBbMV0gPT0gJy4nICYmIHBbMl0gPT0gJy8nKQogCQkJCS8qIENvbnZlcnQgJy8uLycgLS0+ICcvJyAqLwotCQkJCXN0cmNweShwLCBwKzIpOworCQkJCW1lbW1vdmUocCwgcCsyLCBzdHJsZW4ocCsyKSArIDEpOwogCQkJZWxzZSBpZiAocFsxXSA9PSAnLicgJiYgcFsyXSA9PSAnLicgJiYgcFszXSA9PSAnLycpIHsKIAkJCQkvKiBDb252ZXJ0ICdkaXIvZGlyMS8uLi9kaXIyLycKIAkJCQkgKiAgICAgLS0+ICdkaXIvZGlyMi8nCkBAIC01MDk0LDEzICs1MDk0LDExIEBACiBzdGF0aWMgdm9pZAogaXNvZmlsZV9mcmVlX2hhcmRsaW5rcyhzdHJ1Y3QgaXNvOTY2MCAqaXNvOTY2MCkKIHsKLQlzdHJ1Y3QgYXJjaGl2ZV9yYl9ub2RlICpuLCAqbmV4dDsKKwlzdHJ1Y3QgYXJjaGl2ZV9yYl9ub2RlICpuLCAqdG1wOwogCi0JZm9yIChuID0gQVJDSElWRV9SQl9UUkVFX01JTigmKGlzbzk2NjAtPmhhcmRsaW5rX3JidHJlZSkpOyBuOykgewotCQluZXh0ID0gX19hcmNoaXZlX3JiX3RyZWVfaXRlcmF0ZSgmKGlzbzk2NjAtPmhhcmRsaW5rX3JidHJlZSksCi0JCSAgICBuLCBBUkNISVZFX1JCX0RJUl9SSUdIVCk7CisJQVJDSElWRV9SQl9UUkVFX0ZPUkVBQ0hfU0FGRShuLCAmKGlzbzk2NjAtPmhhcmRsaW5rX3JidHJlZSksIHRtcCkgeworCQlfX2FyY2hpdmVfcmJfdHJlZV9yZW1vdmVfbm9kZSgmKGlzbzk2NjAtPmhhcmRsaW5rX3JidHJlZSksIG4pOwogCQlmcmVlKG4pOwotCQluID0gbmV4dDsKIAl9CiB9CiAKQEAgLTc4MDEsOCArNzc5OSw4IEBACiAJdWludDY0X3QJIHB6X3VuY29tcHJlc3NlZF9zaXplOwogCXNpemVfdAkJIHVuY29tcHJlc3NlZF9idWZmZXJfc2l6ZTsKIAotCWludAkJIGluaXRpYWxpemVkOjE7Ci0JaW50CQkgaGVhZGVyX3Bhc3NlZDoxOworCXNpZ25lZCBpbnQJIGluaXRpYWxpemVkOjE7CisJc2lnbmVkIGludAkgaGVhZGVyX3Bhc3NlZDoxOwogCiAJdWludDMyX3QJIHB6X29mZnNldDsKIAl1bnNpZ25lZCBjaGFyCSpibG9ja19wb2ludGVyczsKQEAgLTgxMjgsNyArODEyNiw3IEBACiB7CiAJKHZvaWQpYnVmZjsgLyogVU5VU0VEICovCiAJKHZvaWQpczsgLyogVU5VU0VEICovCi0JYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywgIlByb2dyYW1pbmcgZXJyb3IiKTsKKwlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLCAiUHJvZ3JhbW1pbmcgZXJyb3IiKTsKIAlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X210cmVlLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X210cmVlLmMKaW5kZXggNDkzZDQ3My4uYWE0MWU5YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9tdHJlZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfbXRyZWUuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAjZW5kaWYKIAkvKiBLZXl3b3JkIG9wdGlvbnMgKi8KIAlpbnQga2V5czsKLSNkZWZpbmUJRl9DS1NVTQkJMHgwMDAwMDAwMQkJLyogY2hlY2sgc3VtICovCisjZGVmaW5lCUZfQ0tTVU0JCTB4MDAwMDAwMDEJCS8qIGNoZWNrc3VtICovCiAjZGVmaW5lCUZfREVWCQkweDAwMDAwMDAyCQkvKiBkZXZpY2UgdHlwZSAqLwogI2RlZmluZQlGX0RPTkUJCTB4MDAwMDAwMDQJCS8qIGRpcmVjdG9yeSBkb25lICovCiAjZGVmaW5lCUZfRkxBR1MJCTB4MDAwMDAwMDgJCS8qIGZpbGUgZmxhZ3MgKi8KQEAgLTM3MSw3ICszNzEsNyBAQAogfQogCiAvKgotICogSW5kZW50IGEgbGluZSBhcyBtdHJlZSB1dGlsaXR5IHRvIGJlIHJlYWRhYmxlIGZvciBwZW9wbGUuCisgKiBJbmRlbnQgYSBsaW5lIGFzIHRoZSBtdHJlZSB1dGlsaXR5IGRvZXMgc28gaXQgaXMgcmVhZGFibGUgZm9yIHBlb3BsZS4KICAqLwogc3RhdGljIHZvaWQKIG10cmVlX2luZGVudChzdHJ1Y3QgbXRyZWVfd3JpdGVyICptdHJlZSkKQEAgLTQ0Niw4ICs0NDYsOCBAQAogCiAvKgogICogV3JpdGUgL3NldCBrZXl3b3JkLgotICogU2V0IG1vc3QgdXNlZCB2YWx1ZSBvZiB1aWQsZ2lkLG1vZGUgYW5kIGZmbGFncywgd2hpY2ggYXJlCi0gKiBjb2xsZWN0ZWQgYnkgYXR0cl9jb3VudGVyX3NldF9jb2xsZWN0KCkgZnVuY3Rpb24uCisgKiBTZXQgdGhlIG1vc3QgdXNlZCB2YWx1ZSBvZiB1aWQsIGdpZCwgbW9kZSBhbmQgZmZsYWdzLCB3aGljaCBhcmUKKyAqIGNvbGxlY3RlZCBieSB0aGUgYXR0cl9jb3VudGVyX3NldF9jb2xsZWN0KCkgZnVuY3Rpb24uCiAgKi8KIHN0YXRpYyB2b2lkCiB3cml0ZV9nbG9iYWwoc3RydWN0IG10cmVlX3dyaXRlciAqbXRyZWUpCkBAIC02NDksNyArNjQ5LDcgQEAKIH0KIAogLyoKLSAqIFRhYnVsYXRlIHVpZCxnaWQsbW9kZSBhbmQgZmZsYWdzIG9mIGEgZW50cnkgaW4gb3JkZXIgdG8gYmUgdXNlZCBmb3IgL3NldC4KKyAqIFRhYnVsYXRlIHVpZCwgZ2lkLCBtb2RlIGFuZCBmZmxhZ3Mgb2YgYSBlbnRyeSBpbiBvcmRlciB0byBiZSB1c2VkIGZvciAvc2V0LgogICovCiBzdGF0aWMgaW50CiBhdHRyX2NvdW50ZXJfc2V0X2NvbGxlY3Qoc3RydWN0IG10cmVlX3dyaXRlciAqbXRyZWUsIHN0cnVjdCBtdHJlZV9lbnRyeSAqbWUpCkBAIC05MTIsNyArOTEyLDcgQEAKIAogCS8qIElmIHRoZSBjdXJyZW50IGZpbGUgaXMgYSByZWd1bGFyIGZpbGUsIHdlIGhhdmUgdG8KIAkgKiBjb21wdXRlIHRoZSBzdW0gb2YgaXRzIGNvbnRlbnQuCi0JICogSW5pdGlhbGl6ZSBhIGJ1bmNoIG9mIHN1bSBjaGVjayBjb250ZXh0LiAqLworCSAqIEluaXRpYWxpemUgYSBidW5jaCBvZiBjaGVja3N1bSBjb250ZXh0LiAqLwogCWlmIChtdHJlZV9lbnRyeS0+cmVnX2luZm8pCiAJCXN1bV9pbml0KG10cmVlKTsKIApAQCAtMTI2NSw3ICsxMjY1LDcgQEAKIAlpZiAobXRyZWUgPT0gTlVMTCkKIAkJcmV0dXJuIChBUkNISVZFX09LKTsKIAotCS8qIE1ha2Ugc3VyZSB3ZSBkb3Qgbm90IGxlYXZlIGFueSBlbnRyaWVzLiAqLworCS8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgbGVhdmUgYW55IGVudHJpZXMuICovCiAJbXRyZWVfZW50cnlfcmVnaXN0ZXJfZnJlZShtdHJlZSk7CiAJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmbXRyZWUtPmN1cl9kaXJzdHIpOwogCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJm10cmVlLT5lYnVmKTsKQEAgLTE4MTAsMTAgKzE4MTAsMTAgQEAKIAkJaWYgKHBbMF0gPT0gJy8nKSB7CiAJCQlpZiAocFsxXSA9PSAnLycpCiAJCQkJLyogQ29udmVydCAnLy8nIC0tPiAnLycgKi8KLQkJCQlzdHJjcHkocCwgcCsxKTsKKwkJCQltZW1tb3ZlKHAsIHArMSwgc3RybGVuKHArMSkgKyAxKTsKIAkJCWVsc2UgaWYgKHBbMV0gPT0gJy4nICYmIHBbMl0gPT0gJy8nKQogCQkJCS8qIENvbnZlcnQgJy8uLycgLS0+ICcvJyAqLwotCQkJCXN0cmNweShwLCBwKzIpOworCQkJCW1lbW1vdmUocCwgcCsyLCBzdHJsZW4ocCsyKSArIDEpOwogCQkJZWxzZSBpZiAocFsxXSA9PSAnLicgJiYgcFsyXSA9PSAnLicgJiYgcFszXSA9PSAnLycpIHsKIAkJCQkvKiBDb252ZXJ0ICdkaXIvZGlyMS8uLi9kaXIyLycKIAkJCQkgKiAgICAgLS0+ICdkaXIvZGlyMi8nCkBAIC0yMDI0LDcgKzIwMjQsNyBAQAogCiAJaWYgKGZpbGUtPnBhcmVudGRpci5sZW5ndGggPT0gMCkgewogCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAotCQkgICAgIkludGVybmFsIHByb2dyYW1pbmcgZXJyb3IgIgorCQkgICAgIkludGVybmFsIHByb2dyYW1taW5nIGVycm9yICIKIAkJICAgICJpbiBnZW5lcmF0aW5nIGNhbm9uaWNhbCBuYW1lIGZvciAlcyIsCiAJCSAgICBmaWxlLT5wYXRobmFtZS5zKTsKIAkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3BheC5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wYXguYwppbmRleCAzY2ViZWFlLi5hMmIyNzEwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3BheC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcGF4LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJhcmNoaXZlX2VudHJ5X2xvY2FsZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIHN0cnVjdCBzcGFyc2VfYmxvY2sgewogCXN0cnVjdCBzcGFyc2VfYmxvY2sJKm5leHQ7CkBAIC0xOTksNiArMjAwLDI4IEBACiAJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAogCQkJICAgICJwYXg6IGludmFsaWQgY2hhcnNldCBuYW1lIik7CiAJCXJldHVybiAocmV0KTsKKwl9IGVsc2UgaWYgKHN0cmNtcChrZXksICJ4YXR0cmhlYWRlciIpID09IDApIHsKKwkJaWYgKHZhbCA9PSBOVUxMIHx8IHZhbFswXSA9PSAwKSB7CisJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAorCQkJICAgICJwYXg6IHhhdHRyaGVhZGVyIHJlcXVpcmVzIGEgdmFsdWUiKTsKKwkJfSBlbHNlIGlmIChzdHJjbXAodmFsLCAiQUxMIikgPT0gMCB8fAorCQkgICAgc3RyY21wKHZhbCwgImFsbCIpID09IDApIHsKKwkJCXBheC0+ZmxhZ3MgfD0gV1JJVEVfTElCQVJDSElWRV9YQVRUUiB8IFdSSVRFX1NDSElMWV9YQVRUUjsKKwkJCXJldCA9IEFSQ0hJVkVfT0s7CisJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgIlNDSElMWSIpID09IDAgfHwKKwkJICAgIHN0cmNtcCh2YWwsICJzY2hpbHkiKSA9PSAwKSB7CisJCQlwYXgtPmZsYWdzIHw9IFdSSVRFX1NDSElMWV9YQVRUUjsKKwkJCXBheC0+ZmxhZ3MgJj0gfldSSVRFX0xJQkFSQ0hJVkVfWEFUVFI7CisJCQlyZXQgPSBBUkNISVZFX09LOworCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICJMSUJBUkNISVZFIikgPT0gMCB8fAorCQkgICAgc3RyY21wKHZhbCwgImxpYmFyY2hpdmUiKSA9PSAwKSB7CisJCQlwYXgtPmZsYWdzIHw9IFdSSVRFX0xJQkFSQ0hJVkVfWEFUVFI7CisJCQlwYXgtPmZsYWdzICY9IH5XUklURV9TQ0hJTFlfWEFUVFI7CisJCQlyZXQgPSBBUkNISVZFX09LOworCQl9IGVsc2UKKwkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCisJCQkgICAgInBheDogaW52YWxpZCB4YXR0ciBoZWFkZXIgbmFtZSIpOworCQlyZXR1cm4gKHJldCk7CiAJfQogCiAJLyogTm90ZTogVGhlICJ3YXJuIiByZXR1cm4gaXMganVzdCB0byBpbmZvcm0gdGhlIG9wdGlvbnMKQEAgLTUyMiwxMSArNTQ1LDEzIEBACiAJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULCAiJXMgJXMgJXMiLAogCQkgICAgIkNhbid0IHRyYW5zbGF0ZSAiLCBhdHRyLCAiIHRvIFVURi04Iik7CiAJCXJldHVybihBUkNISVZFX1dBUk4pOwotCX0gZWxzZSBpZiAoKnAgIT0gJ1wwJykgeworCX0KKworCWlmICgqcCAhPSAnXDAnKSB7CiAJCWFkZF9wYXhfYXR0cigmKHBheC0+cGF4X2hlYWRlciksCiAJCSAgICBhdHRyLCBwKTsKLQkJZnJlZShwKTsKIAl9CisJZnJlZShwKTsKIAlyZXR1cm4oQVJDSElWRV9PSyk7CiB9CiAKQEAgLTY2MCw3ICs2ODUsNyBAQAogCQkJICogY2FzZSBnZXR0aW5nIFdDUyBmYWlsZWQuIE9uIFBPU0lYLCB0aGlzIGlzIGEKIAkJCSAqIG5vcm1hbCBvcGVyYXRpb24uCiAJCQkgKi8KLQkJCWlmIChwICE9IE5VTEwgJiYgcFtzdHJsZW4ocCkgLSAxXSAhPSAnLycpIHsKKwkJCWlmIChwICE9IE5VTEwgJiYgcFswXSAhPSAnXDAnICYmIHBbc3RybGVuKHApIC0gMV0gIT0gJy8nKSB7CiAJCQkJc3RydWN0IGFyY2hpdmVfc3RyaW5nIGFzOwogCiAJCQkJYXJjaGl2ZV9zdHJpbmdfaW5pdCgmYXMpOwpAQCAtNjg5LDE3ICs3MTQsOSBAQAogCQkJfQogCQkJYnJlYWs7CiAJCX0KLQkJY2FzZSBBRV9JRlNPQ0s6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHNvY2tldCIpOwotCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7Ci0JCWRlZmF1bHQ6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIHRoaXMgKHR5cGU9MCVsbykiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKQotCQkJICAgIGFyY2hpdmVfZW50cnlfZmlsZXR5cGUoZW50cnlfb3JpZ2luYWwpKTsKKwkJZGVmYXVsdDogLyogQUVfSUZTT0NLIGFuZCB1bmtub3duICovCisJCQlfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoCisJCQkgICAgJmEtPmFyY2hpdmUsIGVudHJ5X29yaWdpbmFsLCAicGF4Iik7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKIAkJfQogCX0KQEAgLTgzNSwxMyArODUyLDE2IEBACiAJICogdGhlbSBkby4KIAkgKi8KIAlyID0gZ2V0X2VudHJ5X3BhdGhuYW1lKGEsIGVudHJ5X21haW4sICZwYXRoLCAmcGF0aF9sZW5ndGgsIHNjb252KTsKLQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQlyZXR1cm4gKHIpOwotCWVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgeworCX0gZWxzZSBpZiAociAhPSBBUkNISVZFX09LKSB7CiAJCXIgPSBnZXRfZW50cnlfcGF0aG5hbWUoYSwgZW50cnlfbWFpbiwgJnBhdGgsCiAJCSAgICAmcGF0aF9sZW5ndGgsIE5VTEwpOwotCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCQlyZXR1cm4gKHIpOworCQl9CiAJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAogCQkgICAgIkNhbid0IHRyYW5zbGF0ZSBwYXRobmFtZSAnJXMnIHRvICVzIiwgcGF0aCwKIAkJICAgIGFyY2hpdmVfc3RyaW5nX2NvbnZlcnNpb25fY2hhcnNldF9uYW1lKHNjb252KSk7CkBAIC04NDksMTIgKzg2OSwxNSBAQAogCQlzY29udiA9IE5VTEw7LyogVGhlIGhlYWRlciBjaGFyc2V0IHN3aXRjaGVzIHRvIGJpbmFyeSBtb2RlLiAqLwogCX0KIAlyID0gZ2V0X2VudHJ5X3VuYW1lKGEsIGVudHJ5X21haW4sICZ1bmFtZSwgJnVuYW1lX2xlbmd0aCwgc2NvbnYpOwotCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCXJldHVybiAocik7Ci0JZWxzZSBpZiAociAhPSBBUkNISVZFX09LKSB7CisJfSBlbHNlIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKIAkJciA9IGdldF9lbnRyeV91bmFtZShhLCBlbnRyeV9tYWluLCAmdW5hbWUsICZ1bmFtZV9sZW5ndGgsIE5VTEwpOwotCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCQlyZXR1cm4gKHIpOworCQl9CiAJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAogCQkgICAgIkNhbid0IHRyYW5zbGF0ZSB1bmFtZSAnJXMnIHRvICVzIiwgdW5hbWUsCiAJCSAgICBhcmNoaXZlX3N0cmluZ19jb252ZXJzaW9uX2NoYXJzZXRfbmFtZShzY29udikpOwpAQCAtODYyLDEyICs4ODUsMTUgQEAKIAkJc2NvbnYgPSBOVUxMOy8qIFRoZSBoZWFkZXIgY2hhcnNldCBzd2l0Y2hlcyB0byBiaW5hcnkgbW9kZS4gKi8KIAl9CiAJciA9IGdldF9lbnRyeV9nbmFtZShhLCBlbnRyeV9tYWluLCAmZ25hbWUsICZnbmFtZV9sZW5ndGgsIHNjb252KTsKLQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQlyZXR1cm4gKHIpOwotCWVsc2UgaWYgKHIgIT0gQVJDSElWRV9PSykgeworCX0gZWxzZSBpZiAociAhPSBBUkNISVZFX09LKSB7CiAJCXIgPSBnZXRfZW50cnlfZ25hbWUoYSwgZW50cnlfbWFpbiwgJmduYW1lLCAmZ25hbWVfbGVuZ3RoLCBOVUxMKTsKLQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJcmV0dXJuIChyKTsKKwkJfQogCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19GSUxFX0ZPUk1BVCwKIAkJICAgICJDYW4ndCB0cmFuc2xhdGUgZ25hbWUgJyVzJyB0byAlcyIsIGduYW1lLAogCQkgICAgYXJjaGl2ZV9zdHJpbmdfY29udmVyc2lvbl9jaGFyc2V0X25hbWUoc2NvbnYpKTsKQEAgLTg3OSwxMyArOTA1LDE2IEBACiAJaWYgKGxpbmtwYXRoID09IE5VTEwpIHsKIAkJciA9IGdldF9lbnRyeV9zeW1saW5rKGEsIGVudHJ5X21haW4sICZsaW5rcGF0aCwKIAkJICAgICZsaW5rcGF0aF9sZW5ndGgsIHNjb252KTsKLQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJcmV0dXJuIChyKTsKLQkJZWxzZSBpZiAociAhPSBBUkNISVZFX09LKSB7CisJCX0gZWxzZSBpZiAociAhPSBBUkNISVZFX09LKSB7CiAJCQlyID0gZ2V0X2VudHJ5X3N5bWxpbmsoYSwgZW50cnlfbWFpbiwgJmxpbmtwYXRoLAogCQkJICAgICZsaW5rcGF0aF9sZW5ndGgsIE5VTEwpOwotCQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCQkJcmV0dXJuIChyKTsKKwkJCX0KIAkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAogCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCiAJCQkgICAgIkNhbid0IHRyYW5zbGF0ZSBsaW5rbmFtZSAnJXMnIHRvICVzIiwgbGlua3BhdGgsCkBAIC05MDEsMjEgKzkzMCwyOSBAQAogCQlpZiAoaGFyZGxpbmsgIT0gTlVMTCkgewogCQkJciA9IGdldF9lbnRyeV9oYXJkbGluayhhLCBlbnRyeV9tYWluLCAmaGFyZGxpbmssCiAJCQkgICAgJmhhcmRsaW5rX2xlbmd0aCwgTlVMTCk7Ci0JCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJCQlyZXR1cm4gKHIpOworCQkJfQogCQkJbGlua3BhdGggPSBoYXJkbGluazsKIAkJCWxpbmtwYXRoX2xlbmd0aCA9IGhhcmRsaW5rX2xlbmd0aDsKIAkJfQogCQlyID0gZ2V0X2VudHJ5X3BhdGhuYW1lKGEsIGVudHJ5X21haW4sICZwYXRoLAogCQkgICAgJnBhdGhfbGVuZ3RoLCBOVUxMKTsKLQkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkKKwkJaWYgKHIgPT0gQVJDSElWRV9GQVRBTCkgeworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQkJcmV0dXJuIChyKTsKKwkJfQogCQlyID0gZ2V0X2VudHJ5X3VuYW1lKGEsIGVudHJ5X21haW4sICZ1bmFtZSwgJnVuYW1lX2xlbmd0aCwgTlVMTCk7Ci0JCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpCisJCWlmIChyID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJCXJldHVybiAocik7CisJCX0KIAkJciA9IGdldF9lbnRyeV9nbmFtZShhLCBlbnRyeV9tYWluLCAmZ25hbWUsICZnbmFtZV9sZW5ndGgsIE5VTEwpOwotCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKQorCQlpZiAociA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCQlyZXR1cm4gKHIpOworCQl9CiAJfQogCiAJLyogU3RvcmUgdGhlIGhlYWRlciBlbmNvZGluZyBmaXJzdCwgdG8gYmUgbmljZSB0byByZWFkZXJzLiAqLwpAQCAtMTExMiw2ICsxMTQ5LDEwIEBACiAJaWYgKCFuZWVkX2V4dGVuc2lvbiAmJiBhY2xfdHlwZXMgIT0gMCkKIAkJbmVlZF9leHRlbnNpb24gPSAxOwogCisJLyogSWYgdGhlIHN5bWxpbmsgdHlwZSBpcyBkZWZpbmVkLCB3ZSBuZWVkIGFuIGV4dGVuc2lvbiAqLworCWlmICghbmVlZF9leHRlbnNpb24gJiYgYXJjaGl2ZV9lbnRyeV9zeW1saW5rX3R5cGUoZW50cnlfbWFpbikgPiAwKQorCQluZWVkX2V4dGVuc2lvbiA9IDE7CisKIAkvKgogCSAqIExpYmFyY2hpdmUgdXNlZCB0byBpbmNsdWRlIHRoZXNlIGluIGV4dGVuZGVkIGhlYWRlcnMgZm9yCiAJICogcmVzdHJpY3RlZCBwYXggZm9ybWF0LCBidXQgdGhhdCBjb25mdXNlZCBwZW9wbGUgd2hvCkBAIC0xMTY4LDI0ICsxMjA5LDMzIEBACiAJCQkgICAgQVJDSElWRV9FTlRSWV9BQ0xfU1RZTEVfRVhUUkFfSUQgfAogCQkJICAgIEFSQ0hJVkVfRU5UUllfQUNMX1NUWUxFX1NFUEFSQVRPUl9DT01NQSB8CiAJCQkgICAgQVJDSElWRV9FTlRSWV9BQ0xfU1RZTEVfQ09NUEFDVCk7Ci0JCQlpZiAocmV0ID09IEFSQ0hJVkVfRkFUQUwpCisJCQlpZiAocmV0ID09IEFSQ0hJVkVfRkFUQUwpIHsKKwkJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCQkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZW50cnlfbmFtZSk7CiAJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCX0KIAkJfQogCQlpZiAoYWNsX3R5cGVzICYgQVJDSElWRV9FTlRSWV9BQ0xfVFlQRV9BQ0NFU1MpIHsKIAkJCXJldCA9IGFkZF9wYXhfYWNsKGEsIGVudHJ5X29yaWdpbmFsLCBwYXgsCiAJCQkgICAgQVJDSElWRV9FTlRSWV9BQ0xfVFlQRV9BQ0NFU1MgfAogCQkJICAgIEFSQ0hJVkVfRU5UUllfQUNMX1NUWUxFX0VYVFJBX0lEIHwKIAkJCSAgICBBUkNISVZFX0VOVFJZX0FDTF9TVFlMRV9TRVBBUkFUT1JfQ09NTUEpOwotCQkJaWYgKHJldCA9PSBBUkNISVZFX0ZBVEFMKQorCQkJaWYgKHJldCA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCQl9CiAJCX0KIAkJaWYgKGFjbF90eXBlcyAmIEFSQ0hJVkVfRU5UUllfQUNMX1RZUEVfREVGQVVMVCkgewogCQkJcmV0ID0gYWRkX3BheF9hY2woYSwgZW50cnlfb3JpZ2luYWwsIHBheCwKIAkJCSAgICBBUkNISVZFX0VOVFJZX0FDTF9UWVBFX0RFRkFVTFQgfAogCQkJICAgIEFSQ0hJVkVfRU5UUllfQUNMX1NUWUxFX0VYVFJBX0lEIHwKIAkJCSAgICBBUkNISVZFX0VOVFJZX0FDTF9TVFlMRV9TRVBBUkFUT1JfQ09NTUEpOwotCQkJaWYgKHJldCA9PSBBUkNISVZFX0ZBVEFMKQorCQkJaWYgKHJldCA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCQl9CiAJCX0KIAogCQkvKiBXZSB1c2UgR05VLXRhci1jb21wYXRpYmxlIHNwYXJzZSBhdHRyaWJ1dGVzLiAqLwpAQCAtMTI0NSw2ICsxMjk1LDE3IEBACiAJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJCX0KKworCQkvKiBTdG9yZSBleHRlbmRlZCBzeW1saW5rIGluZm9ybWF0aW9uICovCisJCWlmIChhcmNoaXZlX2VudHJ5X3N5bWxpbmtfdHlwZShlbnRyeV9tYWluKSA9PQorCQkgICAgQUVfU1lNTElOS19UWVBFX0ZJTEUpIHsKKwkJCWFkZF9wYXhfYXR0cigmKHBheC0+cGF4X2hlYWRlciksCisJCQkgICAgIkxJQkFSQ0hJVkUuc3ltbGlua3R5cGUiLCAiZmlsZSIpOworCQl9IGVsc2UgaWYgKGFyY2hpdmVfZW50cnlfc3ltbGlua190eXBlKGVudHJ5X21haW4pID09CisJCSAgICBBRV9TWU1MSU5LX1RZUEVfRElSRUNUT1JZKSB7CisJCQlhZGRfcGF4X2F0dHIoJihwYXgtPnBheF9oZWFkZXIpLAorCQkJICAgICJMSUJBUkNISVZFLnN5bWxpbmt0eXBlIiwgImRpciIpOworCQl9CiAJfQogCiAJLyogT25seSByZWd1bGFyIGZpbGVzIGhhdmUgZGF0YS4gKi8KQEAgLTEzMTMsOCArMTM3NCwxMSBAQAogCSAqIG51bWVyaWMgZmllbGRzLCB0aG91Z2ggdGhleSdyZSBsZXNzIGNyaXRpY2FsLgogCSAqLwogCWlmIChfX2FyY2hpdmVfd3JpdGVfZm9ybWF0X2hlYWRlcl91c3RhcihhLCB1c3RhcmJ1ZmYsIGVudHJ5X21haW4sIC0xLCAwLAotCSAgICBOVUxMKSA9PSBBUkNISVZFX0ZBVEFMKQorCSAgICBOVUxMKSA9PSBBUkNISVZFX0ZBVEFMKSB7CisJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZW50cnlfbmFtZSk7CiAJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJfQogCiAJLyogSWYgd2UgYnVpbHQgYW55IGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHdyaXRlIHRoYXQgZW50cnkgZmlyc3QuICovCiAJaWYgKGFyY2hpdmVfc3RybGVuKCYocGF4LT5wYXhfaGVhZGVyKSkgPiAwKSB7CkBAIC0xMzc5LDYgKzE0NDMsOCBAQAogCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKIAkJCSAgICAiYXJjaGl2ZV93cml0ZV9wYXhfaGVhZGVyOiAiCiAJCQkgICAgIid4JyBoZWFkZXIgZmFpbGVkPyEgIFRoaXMgY2FuJ3QgaGFwcGVuLlxuIik7CisJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJCX0gZWxzZSBpZiAociA8IHJldCkKIAkJCXJldCA9IHI7CkBAIC0xMzg3LDYgKzE0NTMsOCBAQAogCQkJc3BhcnNlX2xpc3RfY2xlYXIocGF4KTsKIAkJCXBheC0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nID0gMDsKIAkJCXBheC0+ZW50cnlfcGFkZGluZyA9IDA7CisJCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCQlhcmNoaXZlX3N0cmluZ19mcmVlKCZlbnRyeV9uYW1lKTsKIAkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CiAJCX0KIApAQCAtMTM5OCwxMiArMTQ2NiwxNiBAQAogCQkgICAgYXJjaGl2ZV9zdHJsZW4oJihwYXgtPnBheF9oZWFkZXIpKSk7CiAJCWlmIChyICE9IEFSQ0hJVkVfT0spIHsKIAkJCS8qIElmIGEgd3JpdGUgZmFpbHMsIHdlJ3JlIHByZXR0eSBtdWNoIHRvYXN0LiAqLworCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQkJYXJjaGl2ZV9zdHJpbmdfZnJlZSgmZW50cnlfbmFtZSk7CiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwogCQl9CiAJCS8qIFBhZCBvdXQgdGhlIGVuZCBvZiB0aGUgZW50cnkuICovCiAJCXIgPSBfX2FyY2hpdmVfd3JpdGVfbnVsbHMoYSwgKHNpemVfdClwYXgtPmVudHJ5X3BhZGRpbmcpOwogCQlpZiAociAhPSBBUkNISVZFX09LKSB7CiAJCQkvKiBJZiBhIHdyaXRlIGZhaWxzLCB3ZSdyZSBwcmV0dHkgbXVjaCB0b2FzdC4gKi8KKwkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKIAkJfQogCQlwYXgtPmVudHJ5X2J5dGVzX3JlbWFpbmluZyA9IHBheC0+ZW50cnlfcGFkZGluZyA9IDA7CkBAIC0xNDExLDggKzE0ODMsMTEgQEAKIAogCS8qIFdyaXRlIHRoZSBoZWFkZXIgZm9yIG1haW4gZW50cnkuICovCiAJciA9IF9fYXJjaGl2ZV93cml0ZV9vdXRwdXQoYSwgdXN0YXJidWZmLCA1MTIpOwotCWlmIChyICE9IEFSQ0hJVkVfT0spCisJaWYgKHIgIT0gQVJDSElWRV9PSykgeworCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCWFyY2hpdmVfc3RyaW5nX2ZyZWUoJmVudHJ5X25hbWUpOwogCQlyZXR1cm4gKHIpOworCX0KIAogCS8qCiAJICogSW5mb3JtIHRoZSBjbGllbnQgb2YgdGhlIG9uLWRpc2sgc2l6ZSB3ZSdyZSB1c2luZywgc28KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwMDIyNwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDIwIE1hcnRpbiBNYXR1c2thCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUihTKSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmIEFSQ0hJVkVfV1JJVEVfU0VUX0ZPUk1BVF9QUklWQVRFX0hfSU5DTFVERUQKKyNkZWZpbmUgQVJDSElWRV9XUklURV9TRVRfRk9STUFUX1BSSVZBVEVfSF9JTkNMVURFRAorCisjaWZuZGVmIF9fTElCQVJDSElWRV9CVUlMRAorI2lmbmRlZiBfX0xJQkFSQ0hJVkVfVEVTVAorI2Vycm9yIFRoaXMgaGVhZGVyIGlzIG9ubHkgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHRvIGxpYmFyY2hpdmUuCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSAiYXJjaGl2ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfZW50cnkuaCIKKwordm9pZCBfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoc3RydWN0IGFyY2hpdmUgKmEsCisgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5LCBjb25zdCBjaGFyICpmb3JtYXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3NoYXIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfc2hhci5jCmluZGV4IDViZTMxMGEuLjllNDkzMWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfc2hhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfc2hhci5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF9wcml2YXRlLmgiCiAKIHN0cnVjdCBzaGFyIHsKIAlpbnQJCQkgZHVtcDsKQEAgLTE2OSw4ICsxNzAsNyBAQAogCX0KIAogCS8qIFNhdmUgdGhlIGVudHJ5IGZvciB0aGUgY2xvc2luZy4gKi8KLQlpZiAoc2hhci0+ZW50cnkpCi0JCWFyY2hpdmVfZW50cnlfZnJlZShzaGFyLT5lbnRyeSk7CisJYXJjaGl2ZV9lbnRyeV9mcmVlKHNoYXItPmVudHJ5KTsKIAlzaGFyLT5lbnRyeSA9IGFyY2hpdmVfZW50cnlfY2xvbmUoZW50cnkpOwogCW5hbWUgPSBhcmNoaXZlX2VudHJ5X3BhdGhuYW1lKGVudHJ5KTsKIApAQCAtMTk1LDggKzE5NSw4IEBACiAJCWFyY2hpdmVfZW50cnlfc2V0X3NpemUoZW50cnksIDApOwogCQlpZiAoYXJjaGl2ZV9lbnRyeV9oYXJkbGluayhlbnRyeSkgPT0gTlVMTCAmJgogCQkgICAgYXJjaGl2ZV9lbnRyeV9zeW1saW5rKGVudHJ5KSA9PSBOVUxMKSB7Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgQVJDSElWRV9FUlJOT19NSVNDLAotCQkJICAgICJzaGFyIGZvcm1hdCBjYW5ub3QgYXJjaGl2ZSB0aGlzIik7CisJCQlfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoCisJCQkgICAgJmEtPmFyY2hpdmUsIGVudHJ5LCAic2hhciIpOwogCQkJcmV0dXJuIChBUkNISVZFX1dBUk4pOwogCQl9CiAJfQpAQCAtMjg5LDggKzI4OSw3IEBACiAJCQkgICAgIm1rZGlyIC1wICVzID4gL2Rldi9udWxsIDI+JjFcbiIsCiAJCQkgICAgc2hhci0+cXVvdGVkX25hbWUucyk7CiAJCQkvKiBSZWNvcmQgdGhhdCB3ZSBqdXN0IGNyZWF0ZWQgdGhpcyBkaXJlY3RvcnkuICovCi0JCQlpZiAoc2hhci0+bGFzdF9kaXIgIT0gTlVMTCkKLQkJCQlmcmVlKHNoYXItPmxhc3RfZGlyKTsKKwkJCWZyZWUoc2hhci0+bGFzdF9kaXIpOwogCiAJCQlzaGFyLT5sYXN0X2RpciA9IHN0cmR1cChuYW1lKTsKIAkJCS8qIFRyaW0gYSB0cmFpbGluZyAnLycuICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3VzdGFyLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3VzdGFyLmMKaW5kZXggYzU0YWVhYi4uZDFhMDZiYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF91c3Rhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdXN0YXIuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfZW50cnlfbG9jYWxlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ByaXZhdGUuaCIKIAogc3RydWN0IHVzdGFyIHsKIAl1aW50NjRfdAllbnRyeV9ieXRlc19yZW1haW5pbmc7CkBAIC0zNTIsMTQgKzM1MywxMiBAQAogI2VuZGlmCiAJcmV0ID0gX19hcmNoaXZlX3dyaXRlX2Zvcm1hdF9oZWFkZXJfdXN0YXIoYSwgYnVmZiwgZW50cnksIC0xLCAxLCBzY29udik7CiAJaWYgKHJldCA8IEFSQ0hJVkVfV0FSTikgewotCQlpZiAoZW50cnlfbWFpbikKLQkJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKKwkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCQlyZXR1cm4gKHJldCk7CiAJfQogCXJldDIgPSBfX2FyY2hpdmVfd3JpdGVfb3V0cHV0KGEsIGJ1ZmYsIDUxMik7CiAJaWYgKHJldDIgPCBBUkNISVZFX1dBUk4pIHsKLQkJaWYgKGVudHJ5X21haW4pCi0JCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJcmV0dXJuIChyZXQyKTsKIAl9CiAJaWYgKHJldDIgPCByZXQpCkBAIC0zNjcsOCArMzY2LDcgQEAKIAogCXVzdGFyLT5lbnRyeV9ieXRlc19yZW1haW5pbmcgPSBhcmNoaXZlX2VudHJ5X3NpemUoZW50cnkpOwogCXVzdGFyLT5lbnRyeV9wYWRkaW5nID0gMHgxZmYgJiAoLShpbnQ2NF90KXVzdGFyLT5lbnRyeV9ieXRlc19yZW1haW5pbmcpOwotCWlmIChlbnRyeV9tYWluKQotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOwogCXJldHVybiAocmV0KTsKIH0KIApAQCAtNTE1LDkgKzUxMywxMSBAQAogCX0KIAlpZiAoY29weV9sZW5ndGggPiAwKSB7CiAJCWlmIChjb3B5X2xlbmd0aCA+IFVTVEFSX3VuYW1lX3NpemUpIHsKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCi0JCQkgICAgIlVzZXJuYW1lIHRvbyBsb25nIik7Ci0JCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKKwkJCWlmICh0YXJ0eXBlICE9ICd4JykgeworCQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAorCQkJCSAgICBBUkNISVZFX0VSUk5PX01JU0MsICJVc2VybmFtZSB0b28gbG9uZyIpOworCQkJCXJldCA9IEFSQ0hJVkVfRkFJTEVEOworCQkJfQogCQkJY29weV9sZW5ndGggPSBVU1RBUl91bmFtZV9zaXplOwogCQl9CiAJCW1lbWNweShoICsgVVNUQVJfdW5hbWVfb2Zmc2V0LCBwLCBjb3B5X2xlbmd0aCk7CkBAIC01MzgsOSArNTM4LDExIEBACiAJfQogCWlmIChjb3B5X2xlbmd0aCA+IDApIHsKIAkJaWYgKHN0cmxlbihwKSA+IFVTVEFSX2duYW1lX3NpemUpIHsKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX01JU0MsCi0JCQkgICAgIkdyb3VwIG5hbWUgdG9vIGxvbmciKTsKLQkJCXJldCA9IEFSQ0hJVkVfRkFJTEVEOworCQkJaWYgKHRhcnR5cGUgIT0gJ3gnKSB7CisJCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsCisJCQkJICAgIEFSQ0hJVkVfRVJSTk9fTUlTQywgIkdyb3VwIG5hbWUgdG9vIGxvbmciKTsKKwkJCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKKwkJCX0KIAkJCWNvcHlfbGVuZ3RoID0gVVNUQVJfZ25hbWVfc2l6ZTsKIAkJfQogCQltZW1jcHkoaCArIFVTVEFSX2duYW1lX29mZnNldCwgcCwgY29weV9sZW5ndGgpOwpAQCAtNjEyLDE2ICs2MTQsOSBAQAogCQljYXNlIEFFX0lGQkxLOiBoW1VTVEFSX3R5cGVmbGFnX29mZnNldF0gPSAnNCcgOyBicmVhazsKIAkJY2FzZSBBRV9JRkRJUjogaFtVU1RBUl90eXBlZmxhZ19vZmZzZXRdID0gJzUnIDsgYnJlYWs7CiAJCWNhc2UgQUVfSUZJRk86IGhbVVNUQVJfdHlwZWZsYWdfb2Zmc2V0XSA9ICc2JyA7IGJyZWFrOwotCQljYXNlIEFFX0lGU09DSzoKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAotCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkgICAgInRhciBmb3JtYXQgY2Fubm90IGFyY2hpdmUgc29ja2V0Iik7Ci0JCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKLQkJZGVmYXVsdDoKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAotCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkgICAgInRhciBmb3JtYXQgY2Fubm90IGFyY2hpdmUgdGhpcyAobW9kZT0wJWxvKSIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpYXJjaGl2ZV9lbnRyeV9tb2RlKGVudHJ5KSk7CisJCWRlZmF1bHQ6IC8qIEFFX0lGU09DSyBhbmQgdW5rbm93biAqLworCQkJX19hcmNoaXZlX3dyaXRlX2VudHJ5X2ZpbGV0eXBlX3Vuc3VwcG9ydGVkKAorCQkJICAgICZhLT5hcmNoaXZlLCBlbnRyeSwgInVzdGFyIik7CiAJCQlyZXQgPSBBUkNISVZFX0ZBSUxFRDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdjd0YXIuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfdjd0YXIuYwppbmRleCA2MmIxNTIyLi41OTk0MDcxIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3Y3dGFyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF92N3Rhci5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiYXJjaGl2ZV9lbnRyeV9sb2NhbGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdHJ1Y3Qgdjd0YXIgewogCXVpbnQ2NF90CWVudHJ5X2J5dGVzX3JlbWFpbmluZzsKQEAgLTI4NCw3ICsyODUsNyBAQAogCQkgKiBjYXNlIGdldHRpbmcgV0NTIGZhaWxlZC4gT24gUE9TSVgsIHRoaXMgaXMgYQogCQkgKiBub3JtYWwgb3BlcmF0aW9uLgogCQkgKi8KLQkJaWYgKHAgIT0gTlVMTCAmJiBwW3N0cmxlbihwKSAtIDFdICE9ICcvJykgeworCQlpZiAocCAhPSBOVUxMICYmIHBbMF0gIT0gJ1wwJyAmJiBwW3N0cmxlbihwKSAtIDFdICE9ICcvJykgewogCQkJc3RydWN0IGFyY2hpdmVfc3RyaW5nIGFzOwogCiAJCQlhcmNoaXZlX3N0cmluZ19pbml0KCZhcyk7CkBAIC0zMzAsMTQgKzMzMSwxMiBAQAogI2VuZGlmCiAJcmV0ID0gZm9ybWF0X2hlYWRlcl92N3RhcihhLCBidWZmLCBlbnRyeSwgMSwgc2NvbnYpOwogCWlmIChyZXQgPCBBUkNISVZFX1dBUk4pIHsKLQkJaWYgKGVudHJ5X21haW4pCi0JCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CisJCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAkJcmV0dXJuIChyZXQpOwogCX0KIAlyZXQyID0gX19hcmNoaXZlX3dyaXRlX291dHB1dChhLCBidWZmLCA1MTIpOwogCWlmIChyZXQyIDwgQVJDSElWRV9XQVJOKSB7Ci0JCWlmIChlbnRyeV9tYWluKQotCQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCQlhcmNoaXZlX2VudHJ5X2ZyZWUoZW50cnlfbWFpbik7CiAJCXJldHVybiAocmV0Mik7CiAJfQogCWlmIChyZXQyIDwgcmV0KQpAQCAtMzQ1LDggKzM0NCw3IEBACiAKIAl2N3Rhci0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nID0gYXJjaGl2ZV9lbnRyeV9zaXplKGVudHJ5KTsKIAl2N3Rhci0+ZW50cnlfcGFkZGluZyA9IDB4MWZmICYgKC0oaW50NjRfdCl2N3Rhci0+ZW50cnlfYnl0ZXNfcmVtYWluaW5nKTsKLQlpZiAoZW50cnlfbWFpbikKLQkJYXJjaGl2ZV9lbnRyeV9mcmVlKGVudHJ5X21haW4pOworCWFyY2hpdmVfZW50cnlfZnJlZShlbnRyeV9tYWluKTsKIAlyZXR1cm4gKHJldCk7CiB9CiAKQEAgLTQ5NCwzMSArNDkyLDExIEBACiAJCWNhc2UgQUVfSUZMTks6CiAJCQloW1Y3VEFSX3R5cGVmbGFnX29mZnNldF0gPSAnMic7CiAJCQlicmVhazsKLQkJY2FzZSBBRV9JRkNIUjoKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAotCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkgICAgInRhciBmb3JtYXQgY2Fubm90IGFyY2hpdmUgY2hhcmFjdGVyIGRldmljZSIpOwotCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7Ci0JCWNhc2UgQUVfSUZCTEs6Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIGJsb2NrIGRldmljZSIpOwotCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7Ci0JCWNhc2UgQUVfSUZJRk86Ci0JCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwKLQkJCSAgICBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkJICAgICJ0YXIgZm9ybWF0IGNhbm5vdCBhcmNoaXZlIGZpZm8iKTsKLQkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotCQljYXNlIEFFX0lGU09DSzoKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAotCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkgICAgInRhciBmb3JtYXQgY2Fubm90IGFyY2hpdmUgc29ja2V0Iik7Ci0JCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKIAkJZGVmYXVsdDoKLQkJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLAotCQkJICAgIEFSQ0hJVkVfRVJSTk9fRklMRV9GT1JNQVQsCi0JCQkgICAgInRhciBmb3JtYXQgY2Fubm90IGFyY2hpdmUgdGhpcyAobW9kZT0wJWxvKSIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpYXJjaGl2ZV9lbnRyeV9tb2RlKGVudHJ5KSk7CisJCQkvKiBBRV9JRkJMSywgQUVfSUZDSFIsIEFFX0lGSUZPLCBBRV9JRlNPQ0sKKwkJCSAqIGFuZCB1bmtub3duICovCisJCQlfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoCisJCQkgICAgJmEtPmFyY2hpdmUsIGVudHJ5LCAidjd0YXIiKTsKIAkJCXJldCA9IEFSQ0hJVkVfRkFJTEVEOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF93YXJjLmMgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3dhcmMuYwppbmRleCBlZGFkMDcyLi40NmIwNTczIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3dhcmMuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3dhcmMuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcmFuZG9tX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiBzdHJ1Y3Qgd2FyY19zIHsKIAl1bnNpZ25lZCBpbnQgb21pdF93YXJjaW5mbzoxOwpAQCAtMjU5LDEwICsyNjAsOCBAQAogCQlyZXR1cm4gKEFSQ0hJVkVfT0spOwogCX0KIAkvKiBqdXN0IHJlc29ydCB0byBlcnJvcmluZyBhcyBwZXIgVGltJ3MgYWR2aWNlICovCi0JYXJjaGl2ZV9zZXRfZXJyb3IoCi0JCSZhLT5hcmNoaXZlLAotCQlBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAotCQkiV0FSQyBjYW4gb25seSBwcm9jZXNzIHJlZ3VsYXIgZmlsZXMiKTsKKwlfX2FyY2hpdmVfd3JpdGVfZW50cnlfZmlsZXR5cGVfdW5zdXBwb3J0ZWQoCisJICAgICZhLT5hcmNoaXZlLCBlbnRyeSwgIldBUkMiKTsKIAlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKIH0KIApAQCAtMzMzLDYgKzMzMiwxMCBAQAogI2lmIGRlZmluZWQoSEFWRV9HTVRJTUVfUikgfHwgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQogCXN0cnVjdCB0bSB0aW1lSGVyZTsKICNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9fR01USU1FNjRfUykKKwllcnJub190IHRlcnI7CisJX190aW1lNjRfdCB0bXB0aW1lOworI2VuZGlmCiAJY2hhciBzdHJ0aW1lWzEwMF07CiAJc2l6ZV90IGxlbjsKIApAQCAtMzQwLDcgKzM0MywxMiBAQAogCWlmICgocnQgPSBnbXRpbWVfcigmdCwgJnRpbWVIZXJlKSkgPT0gTlVMTCkKIAkJcmV0dXJuOwogI2VsaWYgZGVmaW5lZChIQVZFX19HTVRJTUU2NF9TKQotCV9nbXRpbWU2NF9zKCZ0aW1lSGVyZSwgJnQpOworCXRtcHRpbWUgPSB0OworCXRlcnIgPSBfZ210aW1lNjRfcygmdGltZUhlcmUsICZ0bXB0aW1lKTsKKwlpZiAodGVycikKKwkJcnQgPSBOVUxMOworCWVsc2UKKwkJcnQgPSAmdGltZUhlcmU7CiAjZWxzZQogCWlmICgocnQgPSBnbXRpbWUoJnQpKSA9PSBOVUxMKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3hhci5jIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF94YXIuYwppbmRleCAzYzYxN2VjLi4zYjBmZmIzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3hhci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfeGFyLmMKQEAgLTM3LDEzICszNywxMyBAQAogI2luY2x1ZGUgPGxpYnhtbC94bWx3cml0ZXIuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfQlpMSUJfSAotI2luY2x1ZGUgPGNtX2J6bGliLmg+CisjaW5jbHVkZSA8Y20zcC9iemxpYi5oPgogI2VuZGlmCiAjaWYgSEFWRV9MWk1BX0gKLSNpbmNsdWRlIDxjbV9sem1hLmg+CisjaW5jbHVkZSA8Y20zcC9sem1hLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpAQCAtMjEyLDggKzIxMiw4IEBACiAJc3RydWN0IGhlYXBfZGF0YQkgZGF0YTsKICAgICAgICAgc3RydWN0IGFyY2hpdmVfc3RyaW5nICAgIHNjcmlwdDsKIAotCWludAkJCSB2aXJ0dWFsOjE7Ci0JaW50CQkJIGRpcjoxOworCXNpZ25lZCBpbnQJCSB2aXJ0dWFsOjE7CisJc2lnbmVkIGludAkJIGRpcjoxOwogfTsKIAogc3RydWN0IGhhcmRsaW5rIHsKQEAgLTQxMSw2ICs0MTEsOCBAQAogCWlmIChzdHJjbXAoa2V5LCAiY2hlY2tzdW0iKSA9PSAwKSB7CiAJCWlmICh2YWx1ZSA9PSBOVUxMKQogCQkJeGFyLT5vcHRfc3VtYWxnID0gQ0tTVU1fTk9ORTsKKwkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAibm9uZSIpID09IDApCisJCQl4YXItPm9wdF9zdW1hbGcgPSBDS1NVTV9OT05FOwogCQllbHNlIGlmIChzdHJjbXAodmFsdWUsICJzaGExIikgPT0gMCkKIAkJCXhhci0+b3B0X3N1bWFsZyA9IENLU1VNX1NIQTE7CiAJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgIm1kNSIpID09IDApCkBAIC00MjksNiArNDMxLDggQEAKIAogCQlpZiAodmFsdWUgPT0gTlVMTCkKIAkJCXhhci0+b3B0X2NvbXByZXNzaW9uID0gTk9ORTsKKwkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAibm9uZSIpID09IDApCisJCQl4YXItPm9wdF9jb21wcmVzc2lvbiA9IE5PTkU7CiAJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgImd6aXAiKSA9PSAwKQogCQkJeGFyLT5vcHRfY29tcHJlc3Npb24gPSBHWklQOwogCQllbHNlIGlmIChzdHJjbXAodmFsdWUsICJiemlwMiIpID09IDApCkBAIC00ODIsNiArNDg2LDggQEAKIAlpZiAoc3RyY21wKGtleSwgInRvYy1jaGVja3N1bSIpID09IDApIHsKIAkJaWYgKHZhbHVlID09IE5VTEwpCiAJCQl4YXItPm9wdF90b2Nfc3VtYWxnID0gQ0tTVU1fTk9ORTsKKwkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAibm9uZSIpID09IDApCisJCQl4YXItPm9wdF90b2Nfc3VtYWxnID0gQ0tTVU1fTk9ORTsKIAkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAic2hhMSIpID09IDApCiAJCQl4YXItPm9wdF90b2Nfc3VtYWxnID0gQ0tTVU1fU0hBMTsKIAkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAibWQ1IikgPT0gMCkKQEAgLTQ5NiwxMCArNTAyLDEzIEBACiAJCXJldHVybiAoQVJDSElWRV9PSyk7CiAJfQogCWlmIChzdHJjbXAoa2V5LCAidGhyZWFkcyIpID09IDApIHsKKwkJY2hhciAqZW5kcHRyOworCiAJCWlmICh2YWx1ZSA9PSBOVUxMKQogCQkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7Ci0JCXhhci0+b3B0X3RocmVhZHMgPSAoaW50KXN0cnRvdWwodmFsdWUsIE5VTEwsIDEwKTsKLQkJaWYgKHhhci0+b3B0X3RocmVhZHMgPT0gMCAmJiBlcnJubyAhPSAwKSB7CisJCWVycm5vID0gMDsKKwkJeGFyLT5vcHRfdGhyZWFkcyA9IChpbnQpc3RydG91bCh2YWx1ZSwgJmVuZHB0ciwgMTApOworCQlpZiAoZXJybm8gIT0gMCB8fCAqZW5kcHRyICE9ICdcMCcpIHsKIAkJCXhhci0+b3B0X3RocmVhZHMgPSAxOwogCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJihhLT5hcmNoaXZlKSwKIAkJCSAgICBBUkNISVZFX0VSUk5PX01JU0MsCkBAIC02OTMsMTMgKzcwMiwzNyBAQAogCQllbHNlCiAJCQlydW4gPSBBUkNISVZFX1pfRklOSVNIOwogCQkvKiBDb21wcmVzcyBmaWxlIGRhdGEuICovCi0JCXIgPSBjb21wcmVzc2lvbl9jb2RlKCYoYS0+YXJjaGl2ZSksICYoeGFyLT5zdHJlYW0pLCBydW4pOwotCQlpZiAociAhPSBBUkNISVZFX09LICYmIHIgIT0gQVJDSElWRV9FT0YpCi0JCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQlmb3IgKDs7KSB7CisJCQlyID0gY29tcHJlc3Npb25fY29kZSgmKGEtPmFyY2hpdmUpLCAmKHhhci0+c3RyZWFtKSwKKwkJCSAgICBydW4pOworCQkJaWYgKHIgIT0gQVJDSElWRV9PSyAmJiByICE9IEFSQ0hJVkVfRU9GKQorCQkJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisJCQlpZiAoeGFyLT5zdHJlYW0uYXZhaWxfb3V0ID09IDAgfHwKKwkJCSAgICBydW4gPT0gQVJDSElWRV9aX0ZJTklTSCkgeworCQkJCXNpemUgPSBzaXplb2YoeGFyLT53YnVmZikgLQorCQkJCSAgICB4YXItPnN0cmVhbS5hdmFpbF9vdXQ7CisJCQkJY2hlY2tzdW1fdXBkYXRlKCYoeGFyLT5hX3N1bXdyayksIHhhci0+d2J1ZmYsCisJCQkJICAgIHNpemUpOworCQkJCXhhci0+Y3VyX2ZpbGUtPmRhdGEubGVuZ3RoICs9IHNpemU7CisJCQkJaWYgKHdyaXRlX3RvX3RlbXAoYSwgeGFyLT53YnVmZiwKKwkJCQkgICAgc2l6ZSkgIT0gQVJDSElWRV9PSykKKwkJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCQlpZiAociA9PSBBUkNISVZFX09LKSB7CisJCQkJCS8qIE91dHB1dCBidWZmZXIgd2FzIGZ1bGwgKi8KKwkJCQkJeGFyLT5zdHJlYW0ubmV4dF9vdXQgPSB4YXItPndidWZmOworCQkJCQl4YXItPnN0cmVhbS5hdmFpbF9vdXQgPQorCQkJCQkgICAgc2l6ZW9mKHhhci0+d2J1ZmYpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIEFSQ0hJVkVfRU9GIC0gV2UgYXJlIGRvbmUgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBDb21wcmVzc29yIHdhbnRzIG1vcmUgaW5wdXQgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCQlyc2l6ZSA9IHMgLSB4YXItPnN0cmVhbS5hdmFpbF9pbjsKIAkJY2hlY2tzdW1fdXBkYXRlKCYoeGFyLT5lX3N1bXdyayksIGJ1ZmYsIHJzaXplKTsKLQkJc2l6ZSA9IHNpemVvZih4YXItPndidWZmKSAtIHhhci0+c3RyZWFtLmF2YWlsX291dDsKLQkJY2hlY2tzdW1fdXBkYXRlKCYoeGFyLT5hX3N1bXdyayksIHhhci0+d2J1ZmYsIHNpemUpOwogCX0KICNpZiAhZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKIAlpZiAoeGFyLT5ieXRlc19yZW1haW5pbmcgPT0KQEAgLTczNiwxMiArNzY5LDkgQEAKIAlpZiAoeGFyLT5jdXJfZmlsZS0+ZGF0YS5jb21wcmVzc2lvbiA9PSBOT05FKSB7CiAJCWlmICh3cml0ZV90b190ZW1wKGEsIGJ1ZmYsIHNpemUpICE9IEFSQ0hJVkVfT0spCiAJCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwotCX0gZWxzZSB7Ci0JCWlmICh3cml0ZV90b190ZW1wKGEsIHhhci0+d2J1ZmYsIHNpemUpICE9IEFSQ0hJVkVfT0spCi0JCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworCQl4YXItPmN1cl9maWxlLT5kYXRhLmxlbmd0aCArPSBzaXplOwogCX0KIAl4YXItPmJ5dGVzX3JlbWFpbmluZyAtPSByc2l6ZTsKLQl4YXItPmN1cl9maWxlLT5kYXRhLmxlbmd0aCArPSBzaXplOwogCiAJcmV0dXJuIChyc2l6ZSk7CiB9CkBAIC04NzUsMTEgKzkwNSwxNSBAQAogewogCWNoYXIgdGltZXN0clsxMDBdOwogCXN0cnVjdCB0bSB0bTsKKyNpZiBkZWZpbmVkKEhBVkVfX0dNVElNRTY0X1MpCisJX190aW1lNjRfdCB0bXB0aW1lOworI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfR01USU1FX1IpCiAJZ210aW1lX3IoJnQsICZ0bSk7CiAjZWxpZiBkZWZpbmVkKEhBVkVfX0dNVElNRTY0X1MpCi0JX2dtdGltZTY0X3MoJnRtLCAmdCk7CisJdG1wdGltZSA9IHQ7CisJX2dtdGltZTY0X3MoJnRtLCAmdG1wdGltZSk7CiAjZWxzZQogCW1lbWNweSgmdG0sIGdtdGltZSgmdCksIHNpemVvZih0bSkpOwogI2VuZGlmCkBAIC0yMTAwLDcgKzIxMzQsNyBAQAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCXNpemVfdCBsbCA9IGxlbjsKIAotCQlpZiAobGVuID4gMCAmJiBwW2xlbi0xXSA9PSAnLycpIHsKKwkJaWYgKHBbbGVuLTFdID09ICcvJykgewogCQkJcFtsZW4tMV0gPSAnXDAnOwogCQkJbGVuLS07CiAJCX0KQEAgLTIxMjAsMTAgKzIxNTQsMTAgQEAKIAkJaWYgKHBbMF0gPT0gJy8nKSB7CiAJCQlpZiAocFsxXSA9PSAnLycpCiAJCQkJLyogQ29udmVydCAnLy8nIC0tPiAnLycgKi8KLQkJCQlzdHJjcHkocCwgcCsxKTsKKwkJCQltZW1tb3ZlKHAsIHArMSwgc3RybGVuKHArMSkgKyAxKTsKIAkJCWVsc2UgaWYgKHBbMV0gPT0gJy4nICYmIHBbMl0gPT0gJy8nKQogCQkJCS8qIENvbnZlcnQgJy8uLycgLS0+ICcvJyAqLwotCQkJCXN0cmNweShwLCBwKzIpOworCQkJCW1lbW1vdmUocCwgcCsyLCBzdHJsZW4ocCsyKSArIDEpOwogCQkJZWxzZSBpZiAocFsxXSA9PSAnLicgJiYgcFsyXSA9PSAnLicgJiYgcFszXSA9PSAnLycpIHsKIAkJCQkvKiBDb252ZXJ0ICdkaXIvZGlyMS8uLi9kaXIyLycKIAkJCQkgKiAgICAgLS0+ICdkaXIvZGlyMi8nCkBAIC0yNTI5LDEzICsyNTYzLDExIEBACiBzdGF0aWMgdm9pZAogZmlsZV9mcmVlX2hhcmRsaW5rcyhzdHJ1Y3QgeGFyICp4YXIpCiB7Ci0Jc3RydWN0IGFyY2hpdmVfcmJfbm9kZSAqbiwgKm5leHQ7CisJc3RydWN0IGFyY2hpdmVfcmJfbm9kZSAqbiwgKnRtcDsKIAotCWZvciAobiA9IEFSQ0hJVkVfUkJfVFJFRV9NSU4oJih4YXItPmhhcmRsaW5rX3JidHJlZSkpOyBuOykgewotCQluZXh0ID0gX19hcmNoaXZlX3JiX3RyZWVfaXRlcmF0ZSgmKHhhci0+aGFyZGxpbmtfcmJ0cmVlKSwKLQkJICAgIG4sIEFSQ0hJVkVfUkJfRElSX1JJR0hUKTsKKwlBUkNISVZFX1JCX1RSRUVfRk9SRUFDSF9TQUZFKG4sICYoeGFyLT5oYXJkbGlua19yYnRyZWUpLCB0bXApIHsKKwkJX19hcmNoaXZlX3JiX3RyZWVfcmVtb3ZlX25vZGUoJih4YXItPmhhcmRsaW5rX3JidHJlZSksIG4pOwogCQlmcmVlKG4pOwotCQluID0gbmV4dDsKIAl9CiB9CiAKQEAgLTMxNjksOCArMzIwMSwxMCBAQAogCQkJY2hlY2tzdW1fdXBkYXRlKCYoeGFyLT5hX3N1bXdyayksCiAJCQkgICAgeGFyLT53YnVmZiwgc2l6ZSk7CiAJCQlpZiAod3JpdGVfdG9fdGVtcChhLCB4YXItPndidWZmLCBzaXplKQotCQkJICAgICE9IEFSQ0hJVkVfT0spCisJCQkgICAgIT0gQVJDSElWRV9PSykgeworCQkJCWZyZWUoaGVhcCk7CiAJCQkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKwkJCX0KIAkJCWlmIChyID09IEFSQ0hJVkVfT0spIHsKIAkJCQl4YXItPnN0cmVhbS5uZXh0X291dCA9IHhhci0+d2J1ZmY7CiAJCQkJeGFyLT5zdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKHhhci0+d2J1ZmYpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF96aXAuYyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfemlwLmMKaW5kZXggYTRhZTIyOS4uYjBjZDIxNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF96aXAuYworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfZm9ybWF0X3ppcC5jCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKICNpZmRlZiBIQVZFX1pMSUJfSAotI2luY2x1ZGUgPGNtX3psaWIuaD4KKyNpbmNsdWRlIDxjbTNwL3psaWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiYXJjaGl2ZS5oIgpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImFyY2hpdmVfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFyY2hpdmVfcmFuZG9tX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfcHJpdmF0ZS5oIgogCiAjaWZuZGVmIEhBVkVfWkxJQl9ICiAjaW5jbHVkZSAiYXJjaGl2ZV9jcmMzMi5oIgpAQCAtNTI2LDggKzUyNyw4IEBACiAJLyogSWdub3JlIHR5cGVzIG9mIGVudHJpZXMgdGhhdCB3ZSBkb24ndCBzdXBwb3J0LiAqLwogCXR5cGUgPSBhcmNoaXZlX2VudHJ5X2ZpbGV0eXBlKGVudHJ5KTsKIAlpZiAodHlwZSAhPSBBRV9JRlJFRyAmJiB0eXBlICE9IEFFX0lGRElSICYmIHR5cGUgIT0gQUVfSUZMTkspIHsKLQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKLQkJICAgICJGaWxldHlwZSBub3Qgc3VwcG9ydGVkIik7CisJCV9fYXJjaGl2ZV93cml0ZV9lbnRyeV9maWxldHlwZV91bnN1cHBvcnRlZCgKKwkJICAgICZhLT5hcmNoaXZlLCBlbnRyeSwgInppcCIpOwogCQlyZXR1cm4gQVJDSElWRV9GQUlMRUQ7CiAJfTsKIApAQCAtNTY0LDEwICs1NjUsOCBAQAogCXppcC0+ZW50cnlfdXNlc196aXA2NCA9IDA7CiAJemlwLT5lbnRyeV9jcmMzMiA9IHppcC0+Y3JjMzJmdW5jKDAsIE5VTEwsIDApOwogCXppcC0+ZW50cnlfZW5jcnlwdGlvbiA9IDA7Ci0JaWYgKHppcC0+ZW50cnkgIT0gTlVMTCkgewotCQlhcmNoaXZlX2VudHJ5X2ZyZWUoemlwLT5lbnRyeSk7Ci0JCXppcC0+ZW50cnkgPSBOVUxMOwotCX0KKwlhcmNoaXZlX2VudHJ5X2ZyZWUoemlwLT5lbnRyeSk7CisJemlwLT5lbnRyeSA9IE5VTEw7CiAKIAlpZiAoemlwLT5jY3R4X3ZhbGlkKQogCQlhcmNoaXZlX2VuY3J5cHRvX2Flc19jdHJfcmVsZWFzZSgmemlwLT5jY3R4KTsKQEAgLTEzNzQsMTAgKzEzNzMsMjggQEAKIHsKIAlzdHJ1Y3QgdG0gKnQ7CiAJdW5zaWduZWQgaW50IGR0OworI2lmIGRlZmluZWQoSEFWRV9MT0NBTFRJTUVfUikgfHwgZGVmaW5lZChIQVZFX19MT0NBTFRJTUU2NF9TKQorCXN0cnVjdCB0bSB0bWJ1ZjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9fTE9DQUxUSU1FNjRfUykKKwllcnJub190IHRlcnI7CisJX190aW1lNjRfdCB0bXB0aW1lOworI2VuZGlmCiAKIAkvKiBUaGlzIHdpbGwgbm90IHByZXNlcnZlIHRpbWUgd2hlbiBjcmVhdGluZy9leHRyYWN0aW5nIHRoZSBhcmNoaXZlCiAJICogb24gdHdvIHN5c3RlbXMgd2l0aCBkaWZmZXJlbnQgdGltZSB6b25lcy4gKi8KKyNpZiBkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpCisJdCA9IGxvY2FsdGltZV9yKCZ1bml4X3RpbWUsICZ0bWJ1Zik7CisjZWxpZiBkZWZpbmVkKEhBVkVfX0xPQ0FMVElNRTY0X1MpCisJdG1wdGltZSA9IHVuaXhfdGltZTsKKwl0ZXJyID0gX2xvY2FsdGltZTY0X3MoJnRtYnVmLCAmdG1wdGltZSk7CisJaWYgKHRlcnIpCisJCXQgPSBOVUxMOworCWVsc2UKKwkJdCA9ICZ0bWJ1ZjsKKyNlbHNlCiAJdCA9IGxvY2FsdGltZSgmdW5peF90aW1lKTsKKyNlbmRpZgogCiAJLyogTVNET1Mtc3R5bGUgZGF0ZS90aW1lIGlzIG9ubHkgYmV0d2VlbiAxOTgwLTAxLTAxIGFuZCAyMTA3LTEyLTMxICovCiAJaWYgKHQtPnRtX3llYXIgPCAxOTgwIC0gMTkwMCkKQEAgLTE0MDQsMTggKzE0MjEsMTcgQEAKIHsKIAltb2RlX3QgdHlwZTsKIAljb25zdCBjaGFyICpwYXRoOworCXNpemVfdCBsZW47CiAKIAl0eXBlID0gYXJjaGl2ZV9lbnRyeV9maWxldHlwZShlbnRyeSk7CiAJcGF0aCA9IGFyY2hpdmVfZW50cnlfcGF0aG5hbWUoZW50cnkpOwogCiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuICgwKTsKLQlpZiAodHlwZSA9PSBBRV9JRkRJUiAmJgotCSAgICAocGF0aFswXSA9PSAnXDAnIHx8IHBhdGhbc3RybGVuKHBhdGgpIC0gMV0gIT0gJy8nKSkgewotCQlyZXR1cm4gc3RybGVuKHBhdGgpICsgMTsKLQl9IGVsc2UgewotCQlyZXR1cm4gc3RybGVuKHBhdGgpOwotCX0KKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJaWYgKHR5cGUgPT0gQUVfSUZESVIgJiYgKHBhdGhbMF0gPT0gJ1wwJyB8fCBwYXRoW2xlbiAtIDFdICE9ICcvJykpCisJCSsrbGVuOyAvKiBTcGFjZSBmb3IgdGhlIHRyYWlsaW5nIC8gKi8KKwlyZXR1cm4gbGVuOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNDMwLDYgKzE0NDYsOSBAQAogCXR5cGUgPSBhcmNoaXZlX2VudHJ5X2ZpbGV0eXBlKGVudHJ5KTsKIAl3cml0dGVuX2J5dGVzID0gMDsKIAorCWlmIChwYXRoID09IE5VTEwpCisJCXJldHVybiAoQVJDSElWRV9GQVRBTCk7CisKIAlyZXQgPSBfX2FyY2hpdmVfd3JpdGVfb3V0cHV0KGFyY2hpdmUsIHBhdGgsIHN0cmxlbihwYXRoKSk7CiAJaWYgKHJldCAhPSBBUkNISVZFX09LKQogCQlyZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOwpAQCAtMTQ2MCwxMCArMTQ3OSw4IEBACiAJbWVtY3B5KHAsIHBhdGgsIHBhdGhsZW4pOwogCiAJLyogRm9sZGVycyBhcmUgcmVjb2duaXplZCBieSBhIHRyYWlsaW5nIHNsYXNoLiAqLwotCWlmICgodHlwZSA9PSBBRV9JRkRJUikgJiAocGF0aFtwYXRobGVuIC0gMV0gIT0gJy8nKSkgeworCWlmICgodHlwZSA9PSBBRV9JRkRJUikgJiYgKHBhdGhbcGF0aGxlbiAtIDFdICE9ICcvJykpCiAJCXBbcGF0aGxlbl0gPSAnLyc7Ci0JCXBbcGF0aGxlbiArIDFdID0gJ1wwJzsKLQl9CiB9CiAKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zLjMKaW5kZXggYWViN2ExOC4uY2ZmZTU3MSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucy4zCkBAIC0yNCw3ICsyNCw3IEBACiAuXCIKIC5cIiAkRnJlZUJTRCQKIC5cIgotLkRkIEZlYnJ1YXJ5IDIsIDIwMTIKKy5EZCBKYW51YXJ5IDMxLCAyMDIwCiAuRHQgQVJDSElWRV9XUklURV9PUFRJT05TIDMKIC5PcwogLlNoIE5BTUUKQEAgLTcwLDcgKzcwLDcgQEAKIC5GbiBhcmNoaXZlX3dyaXRlX3NldF9maWx0ZXJfb3B0aW9uICwKIC5GbiBhcmNoaXZlX3dyaXRlX3NldF9mb3JtYXRfb3B0aW9uCiAuWGMKLVNwZWNpZmllcyBhbiBvcHRpb24gdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBjdXJyZW50bHktcmVnaXN0ZXJlZAorU3BlY2lmaWVzIGFuIG9wdGlvbiB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjdXJyZW50bHktcmVnaXN0ZXJlZAogZmlsdGVycyAoaW5jbHVkaW5nIGRlY29tcHJlc3Npb24gZmlsdGVycykgb3IgZm9ybWF0IHJlYWRlcnMuCiAuUHAKIElmCkBAIC0xMzgsNyArMTM4LDcgQEAKIC5DbSBBUkNISVZFX0ZBVEFMCiB3aWxsIGJlIHJldHVybmVkCiBpbW1lZGlhdGVseS4KLU90aGVyd2lzZSwgZ3JlYXRlciBvZiB0aGUgdHdvIHZhbHVlcyB3aWxsIGJlIHJldHVybmVkLgorT3RoZXJ3aXNlLCB0aGUgZ3JlYXRlciBvZiB0aGUgdHdvIHZhbHVlcyB3aWxsIGJlIHJldHVybmVkLgogLlwiCiAuSXQgRm4gYXJjaGl2ZV93cml0ZV9zZXRfb3B0aW9ucwogLkFyIG9wdGlvbnMKQEAgLTE3MCw1NSArMTcwLDE1MyBAQAogLlwiCiAuU2ggT1BUSU9OUwogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IEZpbHRlciBiNjRlbmNvZGUKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBtb2RlCitUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgb2N0YWwgZGlnaXRzIHNwZWNpZnlpbmcgdGhlIGZpbGUgbW9kZS4KKy5JdCBDbSBuYW1lCitUaGUgdmFsdWUgc3BlY2lmaWVzIHRoZSBmaWxlIG5hbWUuCisuRWwKKy5JdCBGaWx0ZXIgYnppcDIKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitiemlwMiBjb21wcmVzc2lvbiBsZXZlbC4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgZnJvbSAxIHRvIDkuCisuRWwKIC5JdCBGaWx0ZXIgZ3ppcAogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAogLkl0IENtIGNvbXByZXNzaW9uLWxldmVsCiBUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIGludGVnZXIgc3BlY2lmeWluZyB0aGUKLWd6aXAgY29tcHJlc3Npb24gbGV2ZWwuCitnemlwIGNvbXByZXNzaW9uIGxldmVsLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBmcm9tIDAgdG8gOS4KKy5JdCBDbSB0aW1lc3RhbXAKK1N0b3JlIHRpbWVzdGFtcC4gVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuRWwKKy5JdCBGaWx0ZXIgbHJ6aXAKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBjb21wcmVzc2lvbiBOcyA9IE5zIEFyIHR5cGUKK1VzZQorLkFyIHR5cGUKK2FzIGNvbXByZXNzaW9uIG1ldGhvZC4KK1N1cHBvcnRlZCB2YWx1ZXMgYXJlCisuRHEgYnppcDIgLAorLkRxIGd6aXBpICwKKy5EcSBsem8KKy5QcSB1bHRyYSBmYXN0ICwKK2FuZAorLkRxIHpwYXEKKy5QcSBiZXN0LCBleHRyZW1lbHkgc2xvdyAuCisuSXQgQ20gY29tcHJlc3Npb24tbGV2ZWwKK1RoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQorbHJ6aXAgY29tcHJlc3Npb24gbGV2ZWwuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gMSB0byA5LgorLkVsCisuSXQgRmlsdGVyIGx6NAorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGNvbXByZXNzaW9uLWxldmVsCitUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIGludGVnZXIgc3BlY2lmeWluZyB0aGUKK2x6NCBjb21wcmVzc2lvbiBsZXZlbC4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgZnJvbSAwIHRvIDkuCisuSXQgQ20gc3RyZWFtLWNoZWNrc3VtCitFbmFibGUgc3RyZWFtIGNoZWNrc3VtLiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKy5JdCBDbSBibG9jay1jaGVja3N1bQorRW5hYmxlIGJsb2NrIGNoZWNrc3VtLiBUaGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisuSXQgQ20gYmxvY2stc2l6ZQorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitsejQgY29tcHJlc3Npb24gYmxvY2sgc2l6ZS4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgZnJvbSA0IHRvIDcKKy5QcSBkZWZhdWx0IC4KKy5JdCBDbSBibG9jay1kZXBlbmRlbmNlCitVc2UgdGhlIHByZXZpb3VzIGJsb2NrIG9mIHRoZSBibG9jayBiZWluZyBjb21wcmVzc2VkIGZvcgorYSBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IHRvIGltcHJvdmUgY29tcHJlc3Npb24gcmF0aW8uCitUaGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisuRWwKKy5JdCBGaWx0ZXIgbHpvcAorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGNvbXByZXNzaW9uLWxldmVsCitUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIGludGVnZXIgc3BlY2lmeWluZyB0aGUKK2x6b3AgY29tcHJlc3Npb24gbGV2ZWwuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGZyb20gMSB0byA5LgorLkVsCisuSXQgRmlsdGVyIHV1ZW5jb2RlCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gbW9kZQorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIG9jdGFsIGRpZ2l0cyBzcGVjaWZ5aW5nIHRoZSBmaWxlIG1vZGUuCisuSXQgQ20gbmFtZQorVGhlIHZhbHVlIHNwZWNpZmllcyB0aGUgZmlsZSBuYW1lLgogLkVsCiAuSXQgRmlsdGVyIHh6CiAuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CiAuSXQgQ20gY29tcHJlc3Npb24tbGV2ZWwKIFRoZSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGRlY2ltYWwgaW50ZWdlciBzcGVjaWZ5aW5nIHRoZQotY29tcHJlc3Npb24gbGV2ZWwuCitjb21wcmVzc2lvbiBsZXZlbC4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgZnJvbSAwIHRvIDkuCisuSXQgQ20gdGhyZWFkcworVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitudW1iZXIgb2YgdGhyZWFkcyBmb3IgbXVsdGktdGhyZWFkZWQgbHptYSBjb21wcmVzc2lvbi4KK0lmIHN1cHBvcnRlZCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgcmVhZCBmcm9tCisuRm4gbHptYV9jcHV0aHJlYWRzIC4KIC5FbAotLkl0IEZvcm1hdCBtdHJlZQorLkl0IEZpbHRlciB6c3RkCiAuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50Ci0uSXQgQ20gY2tzdW0gLCBDbSBkZXZpY2UgLCBDbSBmbGFncyAsIENtIGdpZCAsIENtIGduYW1lICwgQ20gaW5kZW50ICwgQ20gbGluayAsIENtIG1kNSAsIENtIG1vZGUgLCBDbSBubGluayAsIENtIHJtZDE2MCAsIENtIHNoYTEgLCBDbSBzaGEyNTYgLCBDbSBzaGEzODQgLCBDbSBzaGE1MTIgLCBDbSBzaXplICwgQ20gdGltZSAsIENtIHVpZCAsIENtIHVuYW1lCi1FbmFibGUgYSBwYXJ0aWN1bGFyIGtleXdvcmQgaW4gdGhlIG10cmVlIG91dHB1dC4KLVByZWZpeCB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmsgdG8gZGlzYWJsZSB0aGUgY29ycmVzcG9uZGluZyBrZXl3b3JkLgotVGhlIGRlZmF1bHQgaXMgZXF1aXZhbGVudCB0bwotLkRxIGRldmljZSwgZmxhZ3MsIGdpZCwgZ25hbWUsIGxpbmssIG1vZGUsIG5saW5rLCBzaXplLCB0aW1lLCB0eXBlLCB1aWQsIHVuYW1lIC4KLS5JdCBDbSBhbGwKLUVuYWJsZXMgYWxsIG9mIHRoZSBhYm92ZSBrZXl3b3Jkcy4KLS5JdCBDbSB1c2Utc2V0Ci1FbmFibGVzIGdlbmVyYXRpb24gb2YKLS5DbSAvc2V0Ci1saW5lcyB0aGF0IHNwZWNpZnkgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBmb2xsb3dpbmcgZmlsZXMgYW5kL29yIGRpcmVjdG9yaWVzLgotLkl0IENtIGluZGVudAotWFhYIG5lZWRzIGV4cGxhbmF0aW9uIFhYWAorLkl0IENtIGNvbXByZXNzaW9uLWxldmVsCitUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIGludGVnZXIgc3BlY2lmeWluZyB0aGUKK2NvbXByZXNzaW9uIGxldmVsLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBmcm9tIDEgdG8gMjIuCisuRWwKKy5JdCBGb3JtYXQgN3ppcAorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGNvbXByZXNzaW9uCitUaGUgdmFsdWUgaXMgb25lIG9mCisuRHEgc3RvcmUgLAorLkRxIGRlZmxhdGUgLAorLkRxIGJ6aXAyICwKKy5EcSBsem1hMSAsCisuRHEgbHptYTIKK29yCisuRHEgcHBtZAordG8gaW5kaWNhdGUgaG93IHRoZSBmb2xsb3dpbmcgZW50cmllcyBzaG91bGQgYmUgY29tcHJlc3NlZC4KK05vdGUgdGhhdCB0aGlzIHNldHRpbmcgaXMgaWdub3JlZCBmb3IgZGlyZWN0b3JpZXMsIHN5bWJvbGljIGxpbmtzLAorYW5kIG90aGVyIHNwZWNpYWwgZW50cmllcy4KKy5JdCBDbSBjb21wcmVzc2lvbi1sZXZlbAorVGhlIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZGVjaW1hbCBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlCitjb21wcmVzc2lvbiBsZXZlbC4KK1ZhbHVlcyBiZXR3ZWVuIDAgYW5kIDkgYXJlIHN1cHBvcnRlZC4KK1RoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGV2ZWwgZGVwZW5kcyBvbiB0aGUgY2hvc2VuCitjb21wcmVzc2lvbiBtZXRob2QuCisuRWwKKy5JdCBGb3JtYXQgY3BpbworLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUgbmFtZXMuCisuRWwKKy5JdCBGb3JtYXQgZ251dGFyCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gaGRyY2hhcnNldAorVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSwgZ3JvdXAgYW5kIHVzZXIgbmFtZXMuCiAuRWwKIC5JdCBGb3JtYXQgaXNvOTY2MCAtIHZvbHVtZSBtZXRhZGF0YQogVGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCB0byBzZXQgc3RhbmRhcmQgSVNPOTY2MCBtZXRhZGF0YS4KIC5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKIC5JdCBDbSBhYnN0cmFjdC1maWxlIE5zID0gTnMgQXIgZmlsZW5hbWUKIFRoZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgSVNPOTY2MCBtZXRhZGF0YQotYXMgaG9sZGluZyB0aGUgYWJzdHJhY3QgZm9yIHRoaXMgdm9sdW1lLiAgRGVmYXVsdDogbm9uZS4KK2FzIGhvbGRpbmcgdGhlIGFic3RyYWN0IGZvciB0aGlzIHZvbHVtZS4KK0RlZmF1bHQ6IG5vbmUuCiAuSXQgQ20gYXBwbGljYXRpb24taWQgTnMgPSBOcyBBciBmaWxlbmFtZQogVGhlIGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgd2lsbCBiZSBpZGVudGlmaWVkIGluIHRoZSBJU085NjYwIG1ldGFkYXRhCi1hcyBob2xkaW5nIHRoZSBhcHBsaWNhdGlvbiBpZGVudGlmaWVyIGZvciB0aGlzIHZvbHVtZS4gIERlZmF1bHQ6IG5vbmUuCithcyBob2xkaW5nIHRoZSBhcHBsaWNhdGlvbiBpZGVudGlmaWVyIGZvciB0aGlzIHZvbHVtZS4KK0RlZmF1bHQ6IG5vbmUuCiAuSXQgQ20gYmlibGlvLWZpbGUgTnMgPSBOcyBBciBmaWxlbmFtZQogVGhlIGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgd2lsbCBiZSBpZGVudGlmaWVkIGluIHRoZSBJU085NjYwIG1ldGFkYXRhCi1hcyBob2xkaW5nIHRoZSBiaWJsaW9ncmFwaHkgZm9yIHRoaXMgdm9sdW1lLiAgRGVmYXVsdDogbm9uZS4KK2FzIGhvbGRpbmcgdGhlIGJpYmxpb2dyYXBoeSBmb3IgdGhpcyB2b2x1bWUuCitEZWZhdWx0OiBub25lLgogLkl0IENtIGNvcHlyaWdodC1maWxlIE5zID0gTnMgQXIgZmlsZW5hbWUKIFRoZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgSVNPOTY2MCBtZXRhZGF0YQotYXMgaG9sZGluZyB0aGUgY29weXJpZ2h0IGZvciB0aGlzIHZvbHVtZS4gIERlZmF1bHQ6IG5vbmUuCithcyBob2xkaW5nIHRoZSBjb3B5cmlnaHQgZm9yIHRoaXMgdm9sdW1lLgorRGVmYXVsdDogbm9uZS4KIC5JdCBDbSBwdWJsaXNoZXIgTnMgPSBOcyBBciBmaWxlbmFtZQogVGhlIGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgd2lsbCBiZSBpZGVudGlmaWVkIGluIHRoZSBJU085NjYwIG1ldGFkYXRhCi1hcyBob2xkaW5nIHRoZSBwdWJsaXNoZXIgaW5mb3JtYXRpb24gZm9yIHRoaXMgdm9sdW1lLiAgRGVmYXVsdDogbm9uZS4KK2FzIGhvbGRpbmcgdGhlIHB1Ymxpc2hlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyB2b2x1bWUuCitEZWZhdWx0OiBub25lLgogLkl0IENtIHZvbHVtZS1pZCBOcyA9IE5zIEFyIHN0cmluZwogVGhlIHNwZWNpZmllZCBzdHJpbmcgd2lsbCBiZSB1c2VkIGFzIHRoZSBWb2x1bWUgSWRlbnRpZmllciBpbiB0aGUgSVNPOTY2MCBtZXRhZGF0YS4KLUl0IGlzIGxpbWl0ZWQgdG8gMzIgYnl0ZXMuIERlZmF1bHQ6IG5vbmUuCitJdCBpcyBsaW1pdGVkIHRvIDMyIGJ5dGVzLgorRGVmYXVsdDogbm9uZS4KIC5FbAogLkl0IEZvcm1hdCBpc285NjYwIC0gYm9vdCBzdXBwb3J0CiBUaGVzZSBvcHRpb25zIGFyZSB1c2VkIHRvIG1ha2UgYW4gSVNPOTY2MCBpbWFnZSB0aGF0IGNhbiBiZSBkaXJlY3RseQpAQCAtMjY2LDcgKzM2NCw3IEBACiB0aGUgZGVmYXVsdCBpcwogLkNtIGZkICwKIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBpcwotLkNtIG5vLWVtdWxhdGlvbi4KKy5DbSBuby1lbXVsYXRpb24gLgogLkVsCiAuSXQgRm9ybWF0IGlzbzk2NjAgLSBmaWxlbmFtZSBhbmQgc2l6ZSBleHRlbnNpb25zCiBWYXJpb3VzIGV4dGVuc2lvbnMgdG8gdGhlIGJhc2UgSVNPOTY2MCBmb3JtYXQuCkBAIC0yOTAsNyArMzg4LDcgQEAKIERlZmF1bHQ6IGRpc2FibGVkLgogLkl0IENtIGFsbG93LXBlcmlvZAogSWYgZW5hYmxlZCwgYWxsb3dzIGZpbGVuYW1lcyB0byBjb250YWluIHRyYWlsaW5nIHBlcmlvZCBjaGFyYWN0ZXJzLCBpbiB2aW9sYXRpb24gb2YgdGhlIElTTzk2NjAgc3BlY2lmaWNhdGlvbi4KLUlmIGRpc2FibGVkLHRyYWlsaW5nIHBlcmlvZHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdW5kZXJzY29yZSBjaGFyYWN0ZXJzLgorSWYgZGlzYWJsZWQsIHRyYWlsaW5nIHBlcmlvZHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdW5kZXJzY29yZSBjaGFyYWN0ZXJzLgogVGhpcyBkb2VzIG5vdCBpbXBhY3QgbmFtZXMgc3RvcmVkIGluIHRoZSBSb2NrcmlkZ2Ugb3IgSm9saWV0IGV4dGVuc2lvbiBhcmVhLgogRGVmYXVsdDogZGlzYWJsZWQuCiAuSXQgQ20gYWxsb3ctcHZkLWxvd2VyY2FzZQpAQCAtMzk4LDYgKzQ5NiwxMTEgQEAKIFRoaXMgb3B0aW9uIGNhbiBiZSBwcm92aWRlZCBtdWx0aXBsZSB0aW1lcyB0byBzdXBwcmVzcyBjb21wcmVzc2lvbgogb24gbWFueSBmaWxlcy4KIC5FbAorLkl0IEZvcm1hdCBtdHJlZQorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGNrc3VtICwgQ20gZGV2aWNlICwgQ20gZmxhZ3MgLCBDbSBnaWQgLCBDbSBnbmFtZSAsIENtIGluZGVudCAsIENtIGxpbmsgLCBDbSBtZDUgLCBDbSBtb2RlICwgQ20gbmxpbmsgLCBDbSBybWQxNjAgLCBDbSBzaGExICwgQ20gc2hhMjU2ICwgQ20gc2hhMzg0ICwgQ20gc2hhNTEyICwgQ20gc2l6ZSAsIENtIHRpbWUgLCBDbSB1aWQgLCBDbSB1bmFtZQorRW5hYmxlIGEgcGFydGljdWxhciBrZXl3b3JkIGluIHRoZSBtdHJlZSBvdXRwdXQuCitQcmVmaXggd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIHRvIGRpc2FibGUgdGhlIGNvcnJlc3BvbmRpbmcga2V5d29yZC4KK1RoZSBkZWZhdWx0IGlzIGVxdWl2YWxlbnQgdG8KKy5EcSBkZXZpY2UsIGZsYWdzLCBnaWQsIGduYW1lLCBsaW5rLCBtb2RlLCBubGluaywgc2l6ZSwgdGltZSwgdHlwZSwgdWlkLCB1bmFtZSAuCisuSXQgQ20gYWxsCitFbmFibGVzIGFsbCBvZiB0aGUgYWJvdmUga2V5d29yZHMuCisuSXQgQ20gdXNlLXNldAorRW5hYmxlcyBnZW5lcmF0aW9uIG9mCisuQ20gL3NldAorbGluZXMgdGhhdCBzcGVjaWZ5IGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIGZpbGVzIGFuZC9vciBkaXJlY3Rvcmllcy4KKy5JdCBDbSBpbmRlbnQKK1hYWCBuZWVkcyBleHBsYW5hdGlvbiBYWFgKKy5FbAorLkl0IEZvcm1hdCBuZXdjCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gaGRyY2hhcnNldAorVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSBuYW1lcy4KKy5FbAorLkl0IEZvcm1hdCBwYXgKKy5CbCAtdGFnIC1jb21wYWN0IC13aWR0aCBpbmRlbnQKKy5JdCBDbSBoZHJjaGFyc2V0CitUaGUgdmFsdWUgaXMgdXNlZCBhcyBhIGNoYXJhY3RlciBzZXQgbmFtZSB0aGF0IHdpbGwgYmUKK3VzZWQgd2hlbiB0cmFuc2xhdGluZyBmaWxlLCBncm91cCBhbmQgdXNlciBuYW1lcy4KK1RoZSB2YWx1ZSBpcyBvbmUgb2YKKy5EcSBCSU5BUlkKK29yCisuRHEgVVRGLTggLgorV2l0aAorLkRxIEJJTkFSWQordGhlcmUgaXMgbm8gY2hhcmFjdGVyIGNvbnZlcnNpb24sIHdpdGgKKy5EcSBVVEYtOAorbmFtZXMgYXJlIGNvbnZlcnRlZCB0byBVVEYtOC4KKy5JdCBDbSB4YXR0cmhlYWRlcgorV2hlbiBzdG9yaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHRoaXMgb3B0aW9uIGNvbmZpZ3VyZXMgd2hpY2gKK2hlYWRlcnMgc2hvdWxkIGJlIHdyaXR0ZW4uIFRoZSB2YWx1ZSBpcyBvbmUgb2YKKy5EcSBhbGwgLAorLkRxIExJQkFSQ0hJVkUgLAorb3IKKy5EcSBTQ0hJTFkgLgorQnkgZGVmYXVsdCwgYm90aAorLkRxIExJQkFSQ0hJVkUueGF0dHIKK2FuZAorLkRxIFNDSElMWS54YXR0cgoraGVhZGVycyBhcmUgd3JpdHRlbi4KKy5FbAorLkl0IEZvcm1hdCB1c3RhcgorLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIGhkcmNoYXJzZXQKK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUsIGdyb3VwIGFuZCB1c2VyIG5hbWVzLgorLkVsCisuSXQgRm9ybWF0IHY3dGFyCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gaGRyY2hhcnNldAorVGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBjaGFyYWN0ZXIgc2V0IG5hbWUgdGhhdCB3aWxsIGJlCit1c2VkIHdoZW4gdHJhbnNsYXRpbmcgZmlsZSwgZ3JvdXAgYW5kIHVzZXIgbmFtZXMuCisuRWwKKy5JdCBGb3JtYXQgd2FyYworLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAorLkl0IENtIG9taXQtd2FyY2luZm8KK1NldCB0bworLkRxIHRydWUKK3RvIGRpc2FibGUgb3V0cHV0IG9mIHRoZSB3YXJjaW5mbyByZWNvcmQuCisuRWwKKy5JdCBGb3JtYXQgeGFyCisuQmwgLXRhZyAtY29tcGFjdCAtd2lkdGggaW5kZW50CisuSXQgQ20gY2hlY2tzdW0gTnMgPSBOcyBBciB0eXBlCitVc2UKKy5BciB0eXBlCithcyBmaWxlIGNoZWNrc3VtIG1ldGhvZC4KK1N1cHBvcnRlZCB2YWx1ZXMgYXJlCisuRHEgbm9uZSAsCisuRHEgbWQ1ICwKK2FuZAorLkRxIHNoYTEKKy5QcSBkZWZhdWx0IC4KKy5JdCBDbSBjb21wcmVzc2lvbiBOcyA9IE5zIEFyIHR5cGUKK1VzZQorLkFyIHR5cGUKK2FzIGNvbXByZXNzaW9uIG1ldGhvZC4KK1N1cHBvcnRlZCB2YWx1ZXMgYXJlCisuRHEgbm9uZSAsCisuRHEgYnppcDIgLAorLkRxIGd6aXAKKy5QcSBkZWZhdWx0ICwKKy5EcSBsem1hCithbmQKKy5EcSB4eiAuCisuSXQgQ20gY29tcHJlc3Npb25fbGV2ZWwKK1RoZSB2YWx1ZSBpcyBhIGRlY2ltYWwgaW50ZWdlciBmcm9tIDEgdG8gOSBzcGVjaWZ5aW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbC4KKy5JdCBDbSB0b2MtY2hlY2tzdW0gTnMgPSBOcyBBciB0eXBlCitVc2UKKy5BciB0eXBlCithcyB0YWJsZSBvZiBjb250ZW50cyBjaGVja3N1bSBtZXRob2QuCitTdXBwb3J0ZWQgdmFsdWVzIGFyZQorLkRxIG5vbmUgLAorLkRxIG1kNQorYW5kCisuRHEgc2hhMQorLlBxIGRlZmF1bHQgLgorLkVsCiAuSXQgRm9ybWF0IHppcAogLkJsIC10YWcgLWNvbXBhY3QgLXdpZHRoIGluZGVudAogLkl0IENtIGNvbXByZXNzaW9uCkBAIC00MDgsNiArNjExLDI5IEBACiB0byBpbmRpY2F0ZSBob3cgdGhlIGZvbGxvd2luZyBlbnRyaWVzIHNob3VsZCBiZSBjb21wcmVzc2VkLgogTm90ZSB0aGF0IHRoaXMgc2V0dGluZyBpcyBpZ25vcmVkIGZvciBkaXJlY3Rvcmllcywgc3ltYm9saWMgbGlua3MsCiBhbmQgb3RoZXIgc3BlY2lhbCBlbnRyaWVzLgorLkl0IENtIGNvbXByZXNzaW9uLWxldmVsCitUaGUgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBkZWNpbWFsIGludGVnZXIgc3BlY2lmeWluZyB0aGUKK2NvbXByZXNzaW9uIGxldmVsLgorVmFsdWVzIGJldHdlZW4gMCBhbmQgOSBhcmUgc3VwcG9ydGVkLgorQSBjb21wcmVzc2lvbiBsZXZlbCBvZiAwIHN3aXRjaGVzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdG8KKy5EcSBzdG9yZSAsCitvdGhlciB2YWx1ZXMgd2lsbCBlbmFibGUKKy5EcSBkZWZsYXRlCitjb21wcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiBsZXZlbC4KKy5JdCBDbSBlbmNyeXB0aW9uCitFbmFibGUgZW5jcnlwdGlvbiB1c2luZyB0cmFkaXRpb25hbCB6aXAgZW5jcnlwdGlvbi4KKy5JdCBDbSBlbmNyeXB0aW9uIE5zID0gTnMgQXIgdHlwZQorVXNlCisuQXIgdHlwZQorYXMgZW5jcnlwdGlvbiB0eXBlLgorU3VwcG9ydGVkIHZhbHVlcyBhcmUKKy5EcSB6aXBjcnlwdAorLlBxIHRyYWRpdGlvbmFsIHppcCBlbmNyeXB0aW9uICwKKy5EcSBhZXMxMjgKKy5QcSBXaW5aaXAgQUVTLTEyOCBlbmNyeXB0aW9uCithbmQKKy5EcSBhZXMyNTYKKy5QcSBXaW5aaXAgQUVTLTI1NiBlbmNyeXB0aW9uIC4KIC5JdCBDbSBleHBlcmltZW50YWwKIFRoaXMgYm9vbGVhbiBvcHRpb24gZW5hYmxlcyBvciBkaXNhYmxlcyBleHBlcmltZW50YWwgWmlwIGZlYXR1cmVzCiB0aGF0IG1heSBub3QgYmUgY29tcGF0aWJsZSB3aXRoIG90aGVyIFppcCBpbXBsZW1lbnRhdGlvbnMuCkBAIC00MTYsNyArNjQyLDggQEAKIEFsbCBDUkMgZmllbGRzIGFyZSBzZXQgdG8gemVyby4KIEl0IHNob3VsZCBub3QgYmUgdXNlZCBleGNlcHQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCiAuSXQgQ20gaGRyY2hhcnNldAotVGhpcyBzZXRzIHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQgZm9yIGZpbGVuYW1lcy4KK1RoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgY2hhcmFjdGVyIHNldCBuYW1lIHRoYXQgd2lsbCBiZQordXNlZCB3aGVuIHRyYW5zbGF0aW5nIGZpbGUgbmFtZXMuCiAuSXQgQ20gemlwNjQKIFppcDY0IGV4dGVuc2lvbnMgcHJvdmlkZSBhZGRpdGlvbmFsIGZpbGUgc2l6ZSBpbmZvcm1hdGlvbgogZm9yIGVudHJpZXMgbGFyZ2VyIHRoYW4gNCBHaUIuCkBAIC00NjUsOSArNjkyLDkgQEAKIC5cIgogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAotLlhyIGFyY2hpdmVfd3JpdGUgMworLlhyIGFyY2hpdmVfd3JpdGUgMyAsCisuWHIgbGliYXJjaGl2ZSAzCiAuU2ggSElTVE9SWQogVGhlCiAuTm0gbGliYXJjaGl2ZQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X3Bhc3NwaHJhc2UuMyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlLjMKaW5kZXggMjU4NTU5NS4uMmRiNzcwMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfc2V0X3Bhc3NwaHJhc2UuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9zZXRfcGFzc3BocmFzZS4zCkBAIC00OSw3ICs0OSw3IEBACiAuU2ggREVTQ1JJUFRJT04KIC5CbCAtdGFnIC13aWR0aCBpbmRlbnQKIC5JdCBGbiBhcmNoaXZlX3dyaXRlX3NldF9wYXNzcGhyYXNlCi1TZXQgYSBwYXNzcGhyYXNlIGZvciB3cml0aW5nIGFuIGVuY3J5cHRpb24gYXJjaGl2ZS4KK1NldCBhIHBhc3NwaHJhc2UgZm9yIHdyaXRpbmcgYW4gZW5jcnlwdGVkIGFyY2hpdmUuCiBJZgogLkFyIHBhc3NwaHJhc2UKIGlzCkBAIC01OSwxNiArNTksMTYgQEAKIHdpbGwgYmUgcmV0dXJuZWQuCiBPdGhlcndpc2UsCiAuQ20gQVJDSElWRV9PSwotd2lsbCBiZSByZXR1cm5lZC4gCit3aWxsIGJlIHJldHVybmVkLgogLkl0IEZuIGFyY2hpdmVfd3JpdGVfc2V0X3Bhc3NwaHJhc2VfY2FsbGJhY2sKLVJlZ2lzdGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIHRvIGdldCBhIHBhc3NwaHJhc2UKLWZvciBlbmNycHRpb24gaWYgdGhlIHBhc3NwaHJhc2Ugd2FzIG5vdCBzZXQgYnkgdGhlCitSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIHRvIGdldCBhIHBhc3NwaHJhc2UKK2ZvciBlbmNyeXB0aW9uIGlmIHRoZSBwYXNzcGhyYXNlIHdhcyBub3Qgc2V0IGJ5IHRoZQogLkZuIGFyY2hpdmVfd3JpdGVfc2V0X3Bhc3NwaHJhc2UKIGZ1bmN0aW9uLgogLkVsCiAuXCIgLlNoIEVSUk9SUwogLlNoIFNFRSBBTFNPCiAuWHIgdGFyIDEgLAotLlhyIGxpYmFyY2hpdmUgMyAsCiAuWHIgYXJjaGl2ZV93cml0ZSAzICwKLS5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMKKy5YciBhcmNoaXZlX3dyaXRlX3NldF9vcHRpb25zIDMgLAorLlhyIGxpYmFyY2hpdmUgMwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2FyY2hpdmVfeHhoYXNoLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV94eGhhc2guaAppbmRleCA0MjcyNDE2Li4xYzcxMzFjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV94eGhhc2guaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvYXJjaGl2ZV94eGhhc2guaApAQCAtMjQsMTIgKzI0LDEzIEBACiAgKgogICovCiAKKyNpZm5kZWYgQVJDSElWRV9YWEhBU0hfSF9JTkNMVURFRAorI2RlZmluZSBBUkNISVZFX1hYSEFTSF9IX0lOQ0xVREVECisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEFSQ0hJVkVfWFhIQVNIX0gKLSNkZWZpbmUgQVJDSElWRV9YWEhBU0hfSAogCiB0eXBlZGVmIGVudW0geyBYWEhfT0s9MCwgWFhIX0VSUk9SIH0gWFhIX2Vycm9yY29kZTsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbmZpZ19mcmVlYnNkLmggYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvY29uZmlnX2ZyZWVic2QuaAppbmRleCBiZTI1MjU4Li5mMTZmZDM0IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvY29uZmlnX2ZyZWVic2QuaAorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvY29uZmlnX2ZyZWVic2QuaApAQCAtMjEwLDYgKzIxMCw3IEBACiAjZGVmaW5lIEhBVkVfVFpTRVQgMQogI2RlZmluZSBIQVZFX1VJTlRNQVhfVCAxCiAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorI2RlZmluZSBIQVZFX1VOTElOS0FUIDEKICNkZWZpbmUgSEFWRV9VTlNFVEVOViAxCiAjZGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HIDEKICNkZWZpbmUgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UIDEKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9maWx0ZXJfZm9yay5oIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2ZpbHRlcl9mb3JrLmgKaW5kZXggYTI4MjcyYi4uOTA4ZTdjZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2ZpbHRlcl9mb3JrLmgKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2ZpbHRlcl9mb3JrLmgKQEAgLTI1LDEzICsyNSwxMyBAQAogICogJEZyZWVCU0Q6IGhlYWQvbGliL2xpYmFyY2hpdmUvZmlsdGVyX2ZvcmsuaCAyMDEwODcgMjAwOS0xMi0yOCAwMjoxODoyNloga2llbnR6bGUgJAogICovCiAKKyNpZm5kZWYgRklMVEVSX0ZPUktfSAorI2RlZmluZSBGSUxURVJfRk9SS19ICisKICNpZm5kZWYgX19MSUJBUkNISVZFX0JVSUxECiAjZXJyb3IgVGhpcyBoZWFkZXIgaXMgb25seSB0byBiZSB1c2VkIGludGVybmFsbHkgdG8gbGliYXJjaGl2ZS4KICNlbmRpZgogCi0jaWZuZGVmIEZJTFRFUl9GT1JLX0gKLSNkZWZpbmUgRklMVEVSX0ZPUktfSAotCiBwaWRfdAogX19hcmNoaXZlX2NyZWF0ZV9jaGlsZChjb25zdCBjaGFyICpjbWQsIGludCAqY2hpbGRfc3RkaW4sIGludCAqY2hpbGRfc3Rkb3V0KTsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmVfY2hhbmdlcy4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmVfY2hhbmdlcy4zCmluZGV4IGFkYzg3ZmUuLjZiZjhkYjAgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2NoYW5nZXMuMworKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV9jaGFuZ2VzLjMKQEAgLTM1LDcgKzM1LDYgQEAKIFRoaXMgcGFnZSBkZXNjcmliZXMgdXNlci12aXNpYmxlIGNoYW5nZXMgaW4gbGliYXJjaGl2ZTMsIGFuZCBsaXN0cwogcHVibGljIGZ1bmN0aW9ucyBhbmQgb3RoZXIgc3ltYm9scyBjaGFuZ2VkLCBkZXByZWNhdGVkIG9yIHJlbW92ZWQKIGluIGxpYmFyY2hpdmUzLCBhbG9uZyB3aXRoIHRoZWlyIHJlcGxhY2VtZW50cyBpZiBhbnkuCi0uUHAKIC5cIgogLlNzIE11bHRpcGxlIEZpbHRlcnMKIC5cIgpAQCAtMzMwLDEzICszMjksMTMgQEAKIC5MaSAxMDI0MAogLkVsCiAuU2ggU0VFIEFMU08KLS5YciBsaWJhcmNoaXZlIDMgLAogLlhyIGFyY2hpdmVfcmVhZCAzICwKIC5YciBhcmNoaXZlX3JlYWRfZmlsdGVyIDMgLAogLlhyIGFyY2hpdmVfcmVhZF9mb3JtYXQgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkX3NldF9vcHRpb25zIDMgLAorLlhyIGFyY2hpdmVfdXRpbCAzICwKIC5YciBhcmNoaXZlX3dyaXRlIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfZmlsdGVyIDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfZm9ybWF0IDMgLAogLlhyIGFyY2hpdmVfd3JpdGVfc2V0X29wdGlvbnMgMyAsCi0uWHIgYXJjaGl2ZV91dGlsIDMKKy5YciBsaWJhcmNoaXZlIDMKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9saWJhcmNoaXZlX2ludGVybmFscy4zIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmVfaW50ZXJuYWxzLjMKaW5kZXggODI3NWQ2Ni4uZDY3MmYzZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmVfaW50ZXJuYWxzLjMKKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmVfaW50ZXJuYWxzLjMKQEAgLTM1MCw4ICszNTAsOCBAQAogLlhyIGFyY2hpdmVfZW50cnkgMyAsCiAuWHIgYXJjaGl2ZV9yZWFkIDMgLAogLlhyIGFyY2hpdmVfd3JpdGUgMyAsCi0uWHIgYXJjaGl2ZV93cml0ZV9kaXNrIDMKLS5YciBsaWJhcmNoaXZlIDMgLAorLlhyIGFyY2hpdmVfd3JpdGVfZGlzayAzICwKKy5YciBsaWJhcmNoaXZlIDMKIC5TaCBISVNUT1JZCiBUaGUKIC5ObSBsaWJhcmNoaXZlCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvbXRyZWUuNSBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9tdHJlZS41CmluZGV4IGU2MDdlNGEuLjgxNDc3OTYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9tdHJlZS41CisrKyBiL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS9tdHJlZS41CkBAIC0xMzMsNyArMTMzLDYgQEAKIC5TeSBjaGFyCiBmaWxlIHR5cGVzLgogVGhlIHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Ci0uUHAKIC5CbCAtdGFnIC13aWR0aCA0bgogLkl0IEFyIGZvcm1hdCAsIE5zIEFyIG1ham9yICwgTnMgQXIgbWlub3IgTnMgQm8gLCBOcyBBciBzdWJ1bml0IEJjCiBBIGRldmljZSB3aXRoCkBAIC0xNjUsOCArMTY0LDggQEAKIC5TeSBzb2xhcmlzICwKIC5TeSBzdW5vcyAsCiAuU3kgc3ZyMyAsCi0uU3kgc3ZyNCAsICAKLWFuZCAKKy5TeSBzdnI0ICwKK2FuZAogLlN5IHVsdHJpeCAuCiAuUHAKIFNlZQpAQCAtMjg4LDEyICsyODcsMTAgQEAKIC5JdCBDbSB1bmFtZQogVGhlIGZpbGUgb3duZXIgYXMgYSBzeW1ib2xpYyBuYW1lLgogLkVsCi0uUHAKIC5TaCBTRUUgQUxTTwogLlhyIGNrc3VtIDEgLAogLlhyIGZpbmQgMSAsCiAuWHIgbXRyZWUgOAotLlNoIEJVR1MKIC5TaCBISVNUT1JZCiBUaGUKIC5ObQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL3Rhci41IGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9saWJhcmNoaXZlL3Rhci41CmluZGV4IDMwYjgzN2QuLjM0YWQ0ZjcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYmFyY2hpdmUvbGliYXJjaGl2ZS90YXIuNQorKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL2xpYmFyY2hpdmUvdGFyLjUKQEAgLTQ0MSw3ICs0NDEsNyBAQAogVmVuZG9yLXNwZWNpZmljIGF0dHJpYnV0ZXMgdXNlZCBieSBKb2VyZyBTY2hpbGxpbmcncwogLk5tIHN0YXIKIGltcGxlbWVudGF0aW9uLgotLkl0IENtIFNDSElMWS5hY2wuYWNjZXNzICwgQ20gU0NISUxZLmFjbC5kZWZhdWx0LCBDbSBTQ0hJTFkuYWNsLmFjZQorLkl0IENtIFNDSElMWS5hY2wuYWNjZXNzICwgQ20gU0NISUxZLmFjbC5kZWZhdWx0ICwgQ20gU0NISUxZLmFjbC5hY2UKIFN0b3JlcyB0aGUgYWNjZXNzLCBkZWZhdWx0IGFuZCBORlN2NCBBQ0xzIGFzIHRleHR1YWwgc3RyaW5ncyBpbiBhIGZvcm1hdAogdGhhdCBpcyBhbiBleHRlbnNpb24gb2YgdGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkgUE9TSVguMWUgZHJhZnQgMTcuCiBJbiBwYXJ0aWN1bGFyLCBlYWNoIHVzZXIgb3IgZ3JvdXAgYWNjZXNzIHNwZWNpZmljYXRpb24gY2FuIGluY2x1ZGUKQEAgLTQ1Niw3ICs0NTYsNyBAQAogLkl0IENtIFNDSElMWS5yZWFsc2l6ZQogVGhlIGZ1bGwgc2l6ZSBvZiB0aGUgZmlsZSBvbiBkaXNrLgogWFhYIGV4cGxhaW4/IFhYWAotLkl0IENtIFNDSElMWS5kZXYsIENtIFNDSElMWS5pbm8gLCBDbSBTQ0hJTFkubmxpbmtzCisuSXQgQ20gU0NISUxZLmRldiAsIENtIFNDSElMWS5pbm8gLCBDbSBTQ0hJTFkubmxpbmtzCiBUaGUgZGV2aWNlIG51bWJlciwgaW5vZGUgbnVtYmVyLCBhbmQgbGluayBjb3VudCBmb3IgdGhlIGVudHJ5LgogSW4gcGFydGljdWxhciwgbm90ZSB0aGF0IGEgcGF4IGludGVyY2hhbmdlIGZvcm1hdCBhcmNoaXZlIHVzaW5nIEpvZXJnCiBTY2hpbGxpbmcncwpAQCAtNDczLDcgKzQ3Myw3IEBACiAuRHEgY3RpbWUKIGF0dHJpYnV0ZSwgd2hpY2ggcmVmZXJzIHRvIHRoZSB0aW1lIHdoZW4gdGhlIGZpbGUKIG1ldGFkYXRhIHdhcyBsYXN0IGNoYW5nZWQuKQotLkl0IENtIExJQkFSQ0hJVkUueGF0dHIuIE5zIEFyIG5hbWVzcGFjZSBOcyAuIE5zIEFyIGtleQorLkl0IENtIExJQkFSQ0hJVkUueGF0dHIgLiBOcyBBciBuYW1lc3BhY2UgLiBOcyBBciBrZXkKIExpYmFyY2hpdmUgc3RvcmVzIFBPU0lYLjFlLXN0eWxlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgdXNpbmcKIGtleXMgb2YgdGhpcyBmb3JtLgogVGhlCkBAIC04OTAsNyArODkwLDggQEAKIC5JdCBDbSBNCiBHTlUgdGFyIG11bHRpdm9sdW1lIG1hcmtlciwgaW5kaWNhdGluZyB0aGUgZmlsZSBpcyBhIGNvbnRpbnVhdGlvbiBvZiBhIGZpbGUgZnJvbSB0aGUgcHJldmlvdXMgdm9sdW1lLgogLkl0IENtIE4KLUdOVSB0YXIgbG9uZyBmaWxlbmFtZSBzdXBwb3J0LiAgRGVwcmVjYXRlZC4KK0dOVSB0YXIgbG9uZyBmaWxlbmFtZSBzdXBwb3J0LgorRGVwcmVjYXRlZC4KIC5JdCBDbSBTCiBHTlUgdGFyIHNwYXJzZSByZWd1bGFyIGZpbGUuCiAuSXQgQ20gVgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlibHptYS9DTWFrZUxpc3RzLnR4dCBiL1V0aWxpdGllcy9jbWxpYmx6bWEvQ01ha2VMaXN0cy50eHQKaW5kZXggYjQ0M2ZkNi4uNmI2ZmFlNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlibHptYS9DTWFrZUxpc3RzLnR4dAorKysgYi9VdGlsaXRpZXMvY21saWJsem1hL0NNYWtlTGlzdHMudHh0CkBAIC03LDExICs3LDEwIEBACiBpbmNsdWRlKFRlc3RCaWdFbmRpYW4pCiAKIENIRUNLX0lOQ0xVREVfRklMRShieXRlc3dhcC5oIEhBVkVfQllURVNXQVBfSCkKLUNIRUNLX0lOQ0xVREVfRklMRShpbnR0eXBlcy5oIEhBVkVfSU5UVFlQRVNfSCkKIENIRUNLX0lOQ0xVREVfRklMRShsaW1pdHMuaCBIQVZFX0xJTUlUU19IKQogQ0hFQ0tfSU5DTFVERV9GSUxFKG1lbW9yeS5oIEhBVkVfTUVNT1JZX0gpCiBDSEVDS19JTkNMVURFX0ZJTEUoc3RyaW5ncy5oIEhBVkVfU1RSSU5HU19IKQotQ0hFQ0tfSU5DTFVERV9GSUxFKHN0cmluZy5oIEhBVkVfU1RSSU5HX0gpCitzZXQoSEFWRV9TVFJJTkdfSCAxKQogQ0hFQ0tfSU5DTFVERV9GSUxFKHN5cy9zeXNjdGwuaCBIQVZFX1NZU19TWVNDVExfSCkKIAogQ0hFQ0tfSU5DTFVERV9GSUxFKHN0ZGJvb2wuaCBIQVZFX1NUREJPT0xfSCkKQEAgLTYwLDQwICs1OSw2IEBACiBzZXQoSEFWRV9NRl9IQzMgMSkKIHNldChIQVZFX01GX0hDNCAxKQogCi1DSEVDS19UWVBFX1NJWkUoaW50MTZfdCBJTlQxNl9UKQotQ0hFQ0tfVFlQRV9TSVpFKGludDMyX3QgSU5UMzJfVCkKLUNIRUNLX1RZUEVfU0laRShpbnQ2NF90IElOVDY0X1QpCi1DSEVDS19UWVBFX1NJWkUoaW50bWF4X3QgSU5UTUFYX1QpCi1DSEVDS19UWVBFX1NJWkUodWludDhfdCBVSU5UOF9UKQotQ0hFQ0tfVFlQRV9TSVpFKHVpbnQxNl90IFVJTlQxNl9UKQotQ0hFQ0tfVFlQRV9TSVpFKHVpbnQzMl90IFVJTlQzMl9UKQotQ0hFQ0tfVFlQRV9TSVpFKHVpbnQ2NF90IFVJTlQ2NF9UKQotQ0hFQ0tfVFlQRV9TSVpFKHVpbnRtYXhfdCBVSU5UTUFYX1QpCi0KLUNIRUNLX1RZUEVfU0laRSgic2hvcnQiIFNJWkVfT0ZfU0hPUlQpCi1DSEVDS19UWVBFX1NJWkUoImludCIgU0laRV9PRl9JTlQpCi1DSEVDS19UWVBFX1NJWkUoImxvbmciIFNJWkVfT0ZfTE9ORykKLUNIRUNLX1RZUEVfU0laRSgibG9uZyBsb25nIiBTSVpFX09GX0xPTkdfTE9ORykKLQotQ0hFQ0tfVFlQRV9TSVpFKCJ1bnNpZ25lZCBzaG9ydCIgU0laRV9PRl9VTlNJR05FRF9TSE9SVCkKLUNIRUNLX1RZUEVfU0laRSgidW5zaWduZWQiIFNJWkVfT0ZfVU5TSUdORUQpCi1DSEVDS19UWVBFX1NJWkUoInVuc2lnbmVkIGxvbmciIFNJWkVfT0ZfVU5TSUdORURfTE9ORykKLUNIRUNLX1RZUEVfU0laRSgidW5zaWduZWQgbG9uZyBsb25nIiBTSVpFX09GX1VOU0lHTkVEX0xPTkdfTE9ORykKLUNIRUNLX1RZUEVfU0laRSgic2l6ZV90IiBTSVpFT0ZfU0laRV9UKQotCi1DSEVDS19UWVBFX1NJWkUoIl9faW50NjQiIF9fSU5UNjQpCi1DSEVDS19UWVBFX1NJWkUoInVuc2lnbmVkIF9faW50NjQiIFVOU0lHTkVEX19fSU5UNjQpCi0KLUNIRUNLX1RZUEVfU0laRSh1aW50cHRyX3QgVUlOVFBUUl9UKQotSUYoTk9UIEhBVkVfVUlOVFBUUl9UKQotICBJRigiJHtDTUFLRV9TSVpFT0ZfVk9JRF9QfSIgRVFVQUwgOCkKLSAgICBTRVQodWludHB0cl90ICJ1aW50NjRfdCIpCi0gIEVMU0UoKQotICAgIFNFVCh1aW50cHRyX3QgInVpbnQzMl90IikKLSAgRU5ESUYoKQotRU5ESUYoKQotCi0KIFNFVChMWk1BX1NSQ1MKICAgY29tbW9uL3N5c2RlZnMuaAogICBjb21tb24vdHVrbGliX2ludGVnZXIuaApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlibHptYS9jb25maWcuaC5pbiBiL1V0aWxpdGllcy9jbWxpYmx6bWEvY29uZmlnLmguaW4KaW5kZXggMDZmN2ZjYi4uMjA5MTZjYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlibHptYS9jb25maWcuaC5pbgorKysgYi9VdGlsaXRpZXMvY21saWJsem1hL2NvbmZpZy5oLmluCkBAIC0zLDE4MyArMywzNiBAQAogICogRW5zdXJlIHdlIGhhdmUgQzk5LXN0eWxlIGludDY0X3QsIGV0YywgYWxsIGRlZmluZWQuCiAgKi8KIAotLyogRmlyc3QsIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgc3lzdGVtIGhhcyBhbHJlYWR5IGRlZmluZWQgdGhlbS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0lOVDE2X1QKLSNjbWFrZWRlZmluZSBIQVZFX0lOVDMyX1QKLSNjbWFrZWRlZmluZSBIQVZFX0lOVDY0X1QKLSNjbWFrZWRlZmluZSBIQVZFX0lOVE1BWF9UCisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KIAotI2NtYWtlZGVmaW5lIEhBVkVfVUlOVDhfVAotI2NtYWtlZGVmaW5lIEhBVkVfVUlOVDE2X1QKLSNjbWFrZWRlZmluZSBIQVZFX1VJTlQzMl9UCi0jY21ha2VkZWZpbmUgSEFWRV9VSU5UNjRfVAotI2NtYWtlZGVmaW5lIEhBVkVfVUlOVE1BWF9UCi0KLS8qIFdlIG1pZ2h0IGhhdmUgdGhlIHR5cGVzIHdlIHdhbnQgdW5kZXIgb3RoZXIgc3BlbGxpbmdzLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfX19JTlQ2NAotI2NtYWtlZGVmaW5lIEhBVkVfVV9JTlQ2NF9UCi0jY21ha2VkZWZpbmUgSEFWRV9VTlNJR05FRF9fX0lOVDY0Ci0KLS8qIFRoZSBzaXplcyBvZiB2YXJpb3VzIHN0YW5kYXJkIGludGVnZXIgdHlwZXMuICovCi1AU0laRV9PRl9TSE9SVF9DT0RFQAotQFNJWkVfT0ZfSU5UX0NPREVACi1AU0laRV9PRl9MT05HX0NPREVACi1AU0laRV9PRl9MT05HX0xPTkdfQ09ERUAKLUBTSVpFX09GX1VOU0lHTkVEX1NIT1JUX0NPREVACi1AU0laRV9PRl9VTlNJR05FRF9DT0RFQAotQFNJWkVfT0ZfVU5TSUdORURfTE9OR19DT0RFQAotQFNJWkVfT0ZfVU5TSUdORURfTE9OR19MT05HX0NPREVACi1AU0laRU9GX1NJWkVfVF9DT0RFQAotCi0vKgotICogSWYgd2UgbGFjayBpbnQ2NF90LCBkZWZpbmUgaXQgdG8gdGhlIGZpcnN0IG9mIF9faW50NjQsIGludCwgbG9uZywgYW5kIGxvbmcgbG9uZwotICogdGhhdCBleGlzdHMgYW5kIGlzIHRoZSByaWdodCBzaXplLgotICovCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQ2NF9UKSAmJiBkZWZpbmVkKEhBVkVfX19JTlQ2NCkKLXR5cGVkZWYgX19pbnQ2NCBpbnQ2NF90OwotI2RlZmluZSBIQVZFX0lOVDY0X1QKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfSU5UNjRfVAordHlwZWRlZiBLV0lNTF9JTlRfaW50NjRfdCBpbnQ2NF90OwogI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDY0X1QpICYmIFNJWkVfT0ZfSU5UID09IDgKLXR5cGVkZWYgaW50IGludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfSU5UNjRfVAorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9JTlQzMl9UCit0eXBlZGVmIEtXSU1MX0lOVF9pbnQzMl90IGludDMyX3Q7CiAjZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UNjRfVCkgJiYgU0laRV9PRl9MT05HID09IDgKLXR5cGVkZWYgbG9uZyBpbnQ2NF90OwotI2RlZmluZSBIQVZFX0lOVDY0X1QKKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfSU5UMTZfVAordHlwZWRlZiBLV0lNTF9JTlRfaW50MTZfdCBpbnQxNl90OwogI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX0lOVDY0X1QpICYmIFNJWkVfT0ZfTE9OR19MT05HID09IDgKLXR5cGVkZWYgbG9uZyBsb25nIGludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfSU5UNjRfVAorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9JTlQ4X1QKK3R5cGVkZWYgS1dJTUxfSU5UX2ludDhfdCBpbnQ4X3Q7CiAjZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UNjRfVCkKLSNlcnJvciBObyA2NC1iaXQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfVUlOVDY0X1QKK3R5cGVkZWYgS1dJTUxfSU5UX3VpbnQ2NF90IHVpbnQ2NF90OwogI2VuZGlmCi0KLS8qCi0gKiBTaW1pbGFybHkgZm9yIGludDMyX3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfSU5UMzJfVCkgJiYgU0laRV9PRl9JTlQgPT0gNAotdHlwZWRlZiBpbnQgaW50MzJfdDsKLSNkZWZpbmUgSEFWRV9JTlQzMl9UCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX1VJTlQzMl9UCit0eXBlZGVmIEtXSU1MX0lOVF91aW50MzJfdCB1aW50MzJfdDsKICNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQzMl9UKSAmJiBTSVpFX09GX0xPTkcgPT0gNAotdHlwZWRlZiBsb25nIGludDMyX3Q7Ci0jZGVmaW5lIEhBVkVfSU5UMzJfVAorI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9VSU5UMTZfVAordHlwZWRlZiBLV0lNTF9JTlRfdWludDE2X3QgdWludDE2X3Q7CiAjZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UMzJfVCkKLSNlcnJvciBObyAzMi1iaXQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KKyNpZm5kZWYgS1dJTUxfSU5UX0hBVkVfVUlOVDhfVAordHlwZWRlZiBLV0lNTF9JTlRfdWludDhfdCB1aW50OF90OwogI2VuZGlmCi0KLS8qCi0gKiBTaW1pbGFybHkgZm9yIGludDE2X3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfSU5UMTZfVCkgJiYgU0laRV9PRl9JTlQgPT0gMgotdHlwZWRlZiBpbnQgaW50MTZfdDsKLSNkZWZpbmUgSEFWRV9JTlQxNl9UCisjaWZuZGVmIEtXSU1MX0lOVF9IQVZFX1VJTlRQVFJfVAordHlwZWRlZiBLV0lNTF9JTlRfdWludHB0cl90IHVpbnRwdHJfdDsKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoSEFWRV9JTlQxNl9UKSAmJiBTSVpFX09GX1NIT1JUID09IDIKLXR5cGVkZWYgc2hvcnQgaW50MTZfdDsKLSNkZWZpbmUgSEFWRV9JTlQxNl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfSU5UMTZfVCkKLSNlcnJvciBObyAxNi1iaXQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KLSNlbmRpZgotCi0vKgotICogU2ltaWxhcmx5IGZvciB1aW50NjRfdAotICovCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UNjRfVCkgJiYgZGVmaW5lZChIQVZFX1VOU0lHTkVEX19fSU5UNjQpCi10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UNjRfVCkgJiYgU0laRV9PRl9VTlNJR05FRCA9PSA4Ci10eXBlZGVmIHVuc2lnbmVkIHVpbnQ2NF90OwotI2RlZmluZSBIQVZFX1VJTlQ2NF9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDY0X1QpICYmIFNJWkVfT0ZfVU5TSUdORURfTE9ORyA9PSA4Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UNjRfVCkgJiYgU0laRV9PRl9VTlNJR05FRF9MT05HX0xPTkcgPT0gOAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDY0X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UNjRfVCkKLSNlcnJvciBObyA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KLSNlbmRpZgotCi0vKgotICogU2ltaWxhcmx5IGZvciB1aW50MzJfdAotICovCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMzJfVCkgJiYgU0laRV9PRl9VTlNJR05FRCA9PSA0Ci10eXBlZGVmIHVuc2lnbmVkIHVpbnQzMl90OwotI2RlZmluZSBIQVZFX1VJTlQzMl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDMyX1QpICYmIFNJWkVfT0ZfVU5TSUdORURfTE9ORyA9PSA0Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDMyX3Q7Ci0jZGVmaW5lIEhBVkVfVUlOVDMyX1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMzJfVCkKLSNlcnJvciBObyAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlIHdhcyBmb3VuZC4KLSNlbmRpZgotCi0vKgotICogU2ltaWxhcmx5IGZvciB1aW50MTZfdAotICovCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMTZfVCkgJiYgU0laRV9PRl9VTlNJR05FRCA9PSAyCi10eXBlZGVmIHVuc2lnbmVkIHVpbnQxNl90OwotI2RlZmluZSBIQVZFX1VJTlQxNl9UCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDE2X1QpICYmIFNJWkVfT0ZfVU5TSUdORURfU0hPUlQgPT0gMgotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKLSNkZWZpbmUgSEFWRV9VSU5UMTZfVAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChIQVZFX1VJTlQxNl9UKQotI2Vycm9yIE5vIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2FzIGZvdW5kLgotI2VuZGlmCi0KLS8qCi0gKiBTaW1pbGFybHkgZm9yIHVpbnQ4X3QKLSAqLwotI2lmICFkZWZpbmVkKEhBVkVfVUlOVDhfVCkKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwotI2RlZmluZSBIQVZFX1VJTlQ4X1QKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UMTZfVCkKLSNlcnJvciBObyA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2FzIGZvdW5kLgotI2VuZGlmCi0KLS8qIERlZmluZSBpbnRtYXhfdCBhbmQgdWludG1heF90IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IGRlZmluZWQuICovCi0jaWYgIWRlZmluZWQoSEFWRV9JTlRNQVhfVCkKLXR5cGVkZWYgaW50NjRfdCBpbnRtYXhfdDsKLSNkZWZpbmUgSU5UTUFYX01JTiBJTlQ2NF9NSU4KLSNkZWZpbmUgSU5UTUFYX01BWCBJTlQ2NF9NQVgKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSEFWRV9VSU5UTUFYX1QpCi10eXBlZGVmIHVpbnQ2NF90IHVpbnRtYXhfdDsKLSNlbmRpZgotCi0KLSNjbWFrZWRlZmluZSB1aW50cHRyX3QgQHVpbnRwdHJfdEAKLQogI2NtYWtlZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCiAKICNjbWFrZWRlZmluZSBIQVZFX0JZVEVTV0FQX0ggMQpAQCAtMjE5LDcgKzcyLDkgQEAKICNkZWZpbmUgSEFWRV9NRl9IQzQgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisjaWZkZWYgS1dJTUxfSU5UX0hBVkVfSU5UVFlQRVNfSAorIyBkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKyNlbmRpZgogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJTUlUU19IIDEKQEAgLTIzMSw3ICs4Niw5IEBACiAjY21ha2VkZWZpbmUgSEFWRV9TVERCT09MX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX1NURElOVF9IIDEKKyNpZmRlZiBLV0lNTF9JTlRfSEFWRV9TVERJTlRfSAorIyBkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisjZW5kaWYKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ01ha2VMaXN0cy50eHQKaW5kZXggNjA2N2I3ZC4uMWIwMjVmYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ01ha2VMaXN0cy50eHQKQEAgLTM3LDQgKzM3LDQgQEAKIAogYWRkX2xpYnJhcnkoY21saWJyaGFzaCAke2xpYnJoYXNoX3NvdXJjZXN9KQogCi1pbnN0YWxsKEZJTEVTIENPUFlJTkcgUkVBRE1FIERFU1RJTkFUSU9OICR7Q01BS0VfRE9DX0RJUn0vY21saWJyaGFzaCkKK2luc3RhbGwoRklMRVMgQ09QWUlORyBERVNUSU5BVElPTiAke0NNQUtFX0RPQ19ESVJ9L2NtbGlicmhhc2gpCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9DT1BZSU5HIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvQ09QWUlORwppbmRleCBiZjY1ZWUxLi5iZTdkNGE5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9DT1BZSU5HCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL0NPUFlJTkcKQEAgLTEsMTUgKzEsMTUgQEAKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSSGFzaCBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCU0QgWmVybyBDbGF1c2UgTGljZW5zZQogCi1Db3B5cmlnaHQgKGMpIDIwMDUtMjAxNCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KK0NvcHlyaWdodCAoYykgMjAwNSwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAKLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci1vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLXRvICB1c2UsICBjb3B5LCAgbW9kaWZ5LCAgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSAgdGhlIFNvZnR3YXJlICBpcwotZnVybmlzaGVkIHRvIGRvIHNvLgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCiAKLVRoZSBTb2Z0d2FyZSAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dCBXSVRIT1VUCi1BTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlICB0aGlzICBwcm9ncmFtICBhdCAgeW91ciAgb3duICByaXNrIQorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKK1JFR0FSRCBUTyBUSElTIFNPRlRXQVJFICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZCitBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorSU5ESVJFQ1QsICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KK0xPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsICBORUdMSUdFTkNFCitPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICBBUklTSU5HIE9VVCBPRiAgT1IgSU4gQ09OTkVDVElPTiAgV0lUSCBUSEUgVVNFICBPUgorUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL1JFQURNRSBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhNDkyZi4uMDAwMDAwMAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgPT09IE5vdGVzIG9uIFJIYXNoIExpY2Vuc2UgPT09Ci0KLVRoZSBSSGFzaCBwcm9ncmFtIGFuZCBMaWJSSGFzaCBsaWJyYXJ5IGFyZSBkaXN0cmlidXRlZCB1bmRlciAgUkhhc2ggTGljZW5zZSwKLXNlZSB0aGUgQ09QWUlORyBmaWxlIGZvciBkZXRhaWxzLiAgSW4gcGFydGljdWxhciwgIHRoZSBwcm9ncmFtLCAgdGhlIGxpYnJhcnkKLWFuZCAgc291cmNlIGNvZGUgIGNhbiBiZSAgdXNlZCAgZnJlZSBvZiBjaGFyZ2UgIHVuZGVyICB0aGUgIE1JVCwgIEJTRCwgIEdQTCwKLWNvbW1lcmNpYWwgb3IgZnJlZXdhcmUgbGljZW5zZSB3aXRob3V0IGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zLiAgSW4gdGhlIGNhc2UKLXRoZSBPU0ktYXBwcm92ZWQgbGljZW5zZSBpcyByZXF1aXJlZCB0aGUgIE1JVCBsaWNlbnNlIHNob3VsZCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5jCmluZGV4IGZjMDE2OTAuLmNkZDQwNTMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2FsZ29yaXRobXMuYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9hbGdvcml0aG1zLmMKQEAgLTEsMTcgKzEsMTcgQEAKIC8qIGFsZ29yaXRobXMuYyAtIHRoZSBhbGdvcml0aG1zIHN1cHBvcnRlZCBieSB0aGUgcmhhc2ggbGlicmFyeQogICoKLSAqIENvcHlyaWdodDogMjAxMS0yMDEyIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDExLCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCAgZnJlZSBvZiBjaGFyZ2UsICB0byBhbnkgcGVyc29uICBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvICB1c2UsIGNvcHksIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogICoKLSAqIFRoaXMgcHJvZ3JhbSAgaXMgIGRpc3RyaWJ1dGVkICBpbiAgdGhlICBob3BlICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBVc2UgdGhpcyBwcm9ncmFtICBhdCAgeW91ciBvd24gcmlzayEKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCisgKiBMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorICogT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0yNyw3ICsyNyw4IEBACiAjaW5jbHVkZSAiY3JjMzIuaCIKICNpbmNsdWRlICJlZDJrLmgiCiAjaW5jbHVkZSAiZWRvbnIuaCIKLSNpbmNsdWRlICJnb3N0LmgiCisjaW5jbHVkZSAiZ29zdDEyLmgiCisjaW5jbHVkZSAiZ29zdDk0LmgiCiAjaW5jbHVkZSAiaGFzMTYwLmgiCiAjaW5jbHVkZSAibWQ0LmgiCiAjZW5kaWYKQEAgLTU0LDE4ICs1NSwxMyBAQAogI2Vsc2UKICMgZGVmaW5lIE5FRURfT1BFTlNTTF9JTklUIDAKICNlbmRpZiAvKiBVU0VfT1BFTlNTTCAqLwotI2lmZGVmIEdFTkVSQVRFX0dPU1RfTE9PS1VQX1RBQkxFCi0jIGRlZmluZSBORUVEX0dPU1RfSU5JVCAoUkhBU0hfR09TVCB8IFJIQVNIX0dPU1RfQ1JZUFRPUFJPKQorI2lmZGVmIEdFTkVSQVRFX0dPU1Q5NF9MT09LVVBfVEFCTEUKKyMgZGVmaW5lIE5FRURfR09TVDk0X0lOSVQgKFJIQVNIX0dPU1Q5NCB8IFJIQVNIX0dPU1Q5NF9DUllQVE9QUk8pCiAjZWxzZQotIyBkZWZpbmUgTkVFRF9HT1NUX0lOSVQgMAotI2VuZGlmIC8qIEdFTkVSQVRFX0dPU1RfTE9PS1VQX1RBQkxFICovCi0jaWZkZWYgR0VORVJBVEVfQ1JDMzJfVEFCTEUKLSMgZGVmaW5lIE5FRURfQ1JDMzJfSU5JVCBSSEFTSF9DUkMzMgotI2Vsc2UKLSMgZGVmaW5lIE5FRURfQ1JDMzJfSU5JVCAwCi0jZW5kaWYgLyogR0VORVJBVEVfQ1JDMzJfVEFCTEUgKi8KKyMgZGVmaW5lIE5FRURfR09TVDk0X0lOSVQgMAorI2VuZGlmIC8qIEdFTkVSQVRFX0dPU1Q5NF9MT09LVVBfVEFCTEUgKi8KIAotI2RlZmluZSBSSEFTSF9ORUVEX0lOSVRfQUxHIChORUVEX0NSQzMyX0lOSVQgfCBORUVEX0dPU1RfSU5JVCB8IE5FRURfT1BFTlNTTF9JTklUKQorI2RlZmluZSBSSEFTSF9ORUVEX0lOSVRfQUxHIChORUVEX0dPU1Q5NF9JTklUIHwgTkVFRF9PUEVOU1NMX0lOSVQpCiB1bnNpZ25lZCByaGFzaF91bmluaXRpYWxpemVkX2FsZ29yaXRobXMgPSBSSEFTSF9ORUVEX0lOSVRfQUxHOwogCiByaGFzaF9oYXNoX2luZm8qIHJoYXNoX2luZm9fdGFibGUgPSByaGFzaF9oYXNoX2luZm9fZGVmYXVsdDsKQEAgLTc1LDEwICs3MSwxNCBAQAogc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJfaW5pdCh1aW50MzJfdCogY3JjMzIpOwogc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJfdXBkYXRlKHVpbnQzMl90KiBjcmMzMiwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSk7CiBzdGF0aWMgdm9pZCByaGFzaF9jcmMzMl9maW5hbCh1aW50MzJfdCogY3JjMzIsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7CitzdGF0aWMgdm9pZCByaGFzaF9jcmMzMmNfaW5pdCh1aW50MzJfdCogY3JjMzIpOworc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJjX3VwZGF0ZSh1aW50MzJfdCogY3JjMzIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJjX2ZpbmFsKHVpbnQzMl90KiBjcmMzMiwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKICNlbmRpZgogCiAjaWYgMAotcmhhc2hfaW5mbyBpbmZvX2NyYzMyID0geyBSSEFTSF9DUkMzMiwgRl9CRTMyLCA0LCAiQ1JDMzIiLCAiY3JjMzIiIH07CityaGFzaF9pbmZvIGluZm9fY3JjMzIgID0geyBSSEFTSF9DUkMzMiwgIEZfQkUzMiwgNCwgIkNSQzMyIiwgImNyYzMyIiB9Oworcmhhc2hfaW5mbyBpbmZvX2NyYzMyYyA9IHsgUkhBU0hfQ1JDMzJDLCBGX0JFMzIsIDQsICJDUkMzMkMiLCAiY3JjMzJjIiB9Owogcmhhc2hfaW5mbyBpbmZvX21kNCA9IHsgUkhBU0hfTUQ0LCBGX0xFMzIsIDE2LCAiTUQ0IiwgIm1kNCIgfTsKICNlbmRpZgogcmhhc2hfaW5mbyBpbmZvX21kNSA9IHsgUkhBU0hfTUQ1LCBGX0xFMzIsIDE2LCAiTUQ1IiwgIm1kNSIgfTsKQEAgLTkxLDggKzkxLDEwIEBACiByaGFzaF9pbmZvIGluZm9fYWljaCA9IHsgUkhBU0hfQUlDSCwgICAgICBGX0JTMzIsIDIwLCAiQUlDSCIsICJhaWNoIiB9Owogcmhhc2hfaW5mbyBpbmZvX3doaXJscG9vbCA9IHsgUkhBU0hfV0hJUkxQT09MLCBGX0JFNjQsIDY0LCAiV0hJUkxQT09MIiwgIndoaXJscG9vbCIgfTsKIHJoYXNoX2luZm8gaW5mb19ybWQxNjAgPSB7IFJIQVNIX1JJUEVNRDE2MCwgIEZfTEUzMiwgMjAsICJSSVBFTUQtMTYwIiwgInJpcGVtZDE2MCIgfTsKLXJoYXNoX2luZm8gaW5mb19nb3N0ID0gICB7IFJIQVNIX0dPU1QsICAgICAgIEZfTEUzMiwgMzIsICJHT1NUIiwgImdvc3QiIH07Ci1yaGFzaF9pbmZvIGluZm9fZ29zdHBybyA9IHsgUkhBU0hfR09TVF9DUllQVE9QUk8sIEZfTEUzMiwgMzIsICJHT1NULUNSWVBUT1BSTyIsICJnb3N0LWNyeXB0b3BybyIgfTsKK3JoYXNoX2luZm8gaW5mb19nb3N0MTJfMjU2ID0geyBSSEFTSF9HT1NUMTJfMjU2LCBGX0xFNjQsIDMyLCAiR09TVDEyLTI1NiIsICJnb3N0MTItMjU2IiB9Oworcmhhc2hfaW5mbyBpbmZvX2dvc3QxMl81MTIgPSB7IFJIQVNIX0dPU1QxMl81MTIsIEZfTEU2NCwgNjQsICJHT1NUMTItNTEyIiwgImdvc3QxMi01MTIiIH07CityaGFzaF9pbmZvIGluZm9fZ29zdDk0ID0geyBSSEFTSF9HT1NUOTQsICAgICAgIEZfTEUzMiwgMzIsICJHT1NUOTQiLCAiZ29zdDk0IiB9Oworcmhhc2hfaW5mbyBpbmZvX2dvc3Q5NHBybyA9IHsgUkhBU0hfR09TVDk0X0NSWVBUT1BSTywgRl9MRTMyLCAzMiwgIkdPU1Q5NC1DUllQVE9QUk8iLCAiZ29zdDk0LWNyeXB0b3BybyIgfTsKIHJoYXNoX2luZm8gaW5mb19oYXMxNjAgPSB7IFJIQVNIX0hBUzE2MCwgICAgIEZfTEUzMiwgMjAsICJIQVMtMTYwIiwgImhhczE2MCIgfTsKIHJoYXNoX2luZm8gaW5mb19zbmYxMjggPSB7IFJIQVNIX1NORUZSVTEyOCwgIEZfQkUzMiwgMTYsICJTTkVGUlUtMTI4IiwgInNuZWZydTEyOCIgfTsKIHJoYXNoX2luZm8gaW5mb19zbmYyNTYgPSB7IFJIQVNIX1NORUZSVTI1NiwgIEZfQkUzMiwgMzIsICJTTkVGUlUtMjU2IiwgInNuZWZydTI1NiIgfTsKQEAgLTExNyw5ICsxMTksMTAgQEAKICNkZWZpbmUgdXBkKG5hbWUpICgocHVwZGF0ZV90KShuYW1lIyNfdXBkYXRlKSkKICNkZWZpbmUgZmluKG5hbWUpICgocGZpbmFsX3QpKG5hbWUjI19maW5hbCkpCiAjZGVmaW5lIGl1ZihuYW1lKSBpbmkobmFtZSksIHVwZChuYW1lKSwgZmluKG5hbWUpCisjZGVmaW5lIGl1ZjIobmFtZTEsIG5hbWUyKSBpbmkobmFtZTEpLCB1cGQobmFtZTIpLCBmaW4obmFtZTIpCiAjZGVmaW5lIGRpdWYobmFtZSkgZGdzaGZ0KG5hbWUpLCBpbmkobmFtZSksIHVwZChuYW1lKSwgZmluKG5hbWUpCiAKLS8qIGluZm9ybWF0aW9uIGFib3V0IGFsbCBoYXNoZXMgKi8KKy8qIGluZm9ybWF0aW9uIGFib3V0IGFsbCBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbnMgKi8KIHJoYXNoX2hhc2hfaW5mbyByaGFzaF9oYXNoX2luZm9fZGVmYXVsdFtSSEFTSF9IQVNIX0NPVU5UXSA9CiB7CiAjaWYgMApAQCAtMTM1LDI4ICsxMzgsMzUgQEAKIAl7ICZpbmZvX2FpY2gsIHNpemVvZihhaWNoX2N0eCksIGRnc2hmdDIoYWljaCwgc2hhMV9jb250ZXh0Lmhhc2gpLCBpdWYocmhhc2hfYWljaCksIChwY2xlYW51cF90KXJoYXNoX2FpY2hfY2xlYW51cCB9LCAvKiAxNjAgYml0ICovCiAJeyAmaW5mb193aGlybHBvb2wsIHNpemVvZih3aGlybHBvb2xfY3R4KSwgZGdzaGZ0KHdoaXJscG9vbCksIGl1ZihyaGFzaF93aGlybHBvb2wpLCAwIH0sIC8qIDUxMiBiaXQgKi8KIAl7ICZpbmZvX3JtZDE2MCwgc2l6ZW9mKHJpcGVtZDE2MF9jdHgpLCBkZ3NoZnQocmlwZW1kMTYwKSwgaXVmKHJoYXNoX3JpcGVtZDE2MCksIDAgfSwgLyogMTYwIGJpdCAqLwotCXsgJmluZm9fZ29zdCwgc2l6ZW9mKGdvc3RfY3R4KSwgZGdzaGZ0KGdvc3QpLCBpdWYocmhhc2hfZ29zdCksIDAgfSwgLyogMjU2IGJpdCAqLwotCXsgJmluZm9fZ29zdHBybywgc2l6ZW9mKGdvc3RfY3R4KSwgZGdzaGZ0KGdvc3QpLCBpbmkocmhhc2hfZ29zdF9jcnlwdG9wcm8pLCB1cGQocmhhc2hfZ29zdCksIGZpbihyaGFzaF9nb3N0KSwgMCB9LCAvKiAyNTYgYml0ICovCisJeyAmaW5mb19nb3N0OTQsIHNpemVvZihnb3N0OTRfY3R4KSwgZGdzaGZ0KGdvc3Q5NCksIGl1ZihyaGFzaF9nb3N0OTQpLCAwIH0sIC8qIDI1NiBiaXQgKi8KKwl7ICZpbmZvX2dvc3Q5NHBybywgc2l6ZW9mKGdvc3Q5NF9jdHgpLCBkZ3NoZnQoZ29zdDk0KSwgaXVmMihyaGFzaF9nb3N0OTRfY3J5cHRvcHJvLCByaGFzaF9nb3N0OTQpLCAwIH0sIC8qIDI1NiBiaXQgKi8KIAl7ICZpbmZvX2hhczE2MCwgc2l6ZW9mKGhhczE2MF9jdHgpLCBkZ3NoZnQoaGFzMTYwKSwgaXVmKHJoYXNoX2hhczE2MCksIDAgfSwgLyogMTYwIGJpdCAqLwotCXsgJmluZm9fc25mMTI4LCBzaXplb2Yoc25lZnJ1X2N0eCksIGRnc2hmdChzbmVmcnUpLCBpbmkocmhhc2hfc25lZnJ1MTI4KSwgdXBkKHJoYXNoX3NuZWZydSksIGZpbihyaGFzaF9zbmVmcnUpLCAwIH0sIC8qIDEyOCBiaXQgKi8KLQl7ICZpbmZvX3NuZjI1Niwgc2l6ZW9mKHNuZWZydV9jdHgpLCBkZ3NoZnQoc25lZnJ1KSwgaW5pKHJoYXNoX3NuZWZydTI1NiksIHVwZChyaGFzaF9zbmVmcnUpLCBmaW4ocmhhc2hfc25lZnJ1KSwgMCB9LCAvKiAyNTYgYml0ICovCisJeyAmaW5mb19nb3N0MTJfMjU2LCBzaXplb2YoZ29zdDEyX2N0eCksIGRnc2hmdDIoZ29zdDEyLCBoKSArIDMyLCBpdWYyKHJoYXNoX2dvc3QxMl8yNTYsIHJoYXNoX2dvc3QxMiksIDAgfSwgLyogMjU2IGJpdCAqLworCXsgJmluZm9fZ29zdDEyXzUxMiwgc2l6ZW9mKGdvc3QxMl9jdHgpLCBkZ3NoZnQyKGdvc3QxMiwgaCksIGl1ZjIocmhhc2hfZ29zdDEyXzUxMiwgcmhhc2hfZ29zdDEyKSwgMCB9LCAvKiA1MTIgYml0ICovCiAjZW5kaWYKLQl7ICZpbmZvX3NoYTIyNCwgc2l6ZW9mKHNoYTI1Nl9jdHgpLCBkZ3NoZnQoc2hhMjU2KSwgaW5pKHJoYXNoX3NoYTIyNCksIHVwZChyaGFzaF9zaGEyNTYpLCBmaW4ocmhhc2hfc2hhMjU2KSwgMCB9LCAvKiAyMjQgYml0ICovCisJeyAmaW5mb19zaGEyMjQsIHNpemVvZihzaGEyNTZfY3R4KSwgZGdzaGZ0KHNoYTI1NiksIGl1ZjIocmhhc2hfc2hhMjI0LCByaGFzaF9zaGEyNTYpLCAwIH0sIC8qIDIyNCBiaXQgKi8KIAl7ICZpbmZvX3NoYTI1Niwgc2l6ZW9mKHNoYTI1Nl9jdHgpLCBkZ3NoZnQoc2hhMjU2KSwgaXVmKHJoYXNoX3NoYTI1NiksIDAgfSwgIC8qIDI1NiBiaXQgKi8KLQl7ICZpbmZvX3NoYTM4NCwgc2l6ZW9mKHNoYTUxMl9jdHgpLCBkZ3NoZnQoc2hhNTEyKSwgaW5pKHJoYXNoX3NoYTM4NCksIHVwZChyaGFzaF9zaGE1MTIpLCBmaW4ocmhhc2hfc2hhNTEyKSwgMCB9LCAvKiAzODQgYml0ICovCisJeyAmaW5mb19zaGEzODQsIHNpemVvZihzaGE1MTJfY3R4KSwgZGdzaGZ0KHNoYTUxMiksIGl1ZjIocmhhc2hfc2hhMzg0LCByaGFzaF9zaGE1MTIpLCAwIH0sIC8qIDM4NCBiaXQgKi8KIAl7ICZpbmZvX3NoYTUxMiwgc2l6ZW9mKHNoYTUxMl9jdHgpLCBkZ3NoZnQoc2hhNTEyKSwgaXVmKHJoYXNoX3NoYTUxMiksIDAgfSwgIC8qIDUxMiBiaXQgKi8KICNpZiAwCi0JeyAmaW5mb19lZHIyNTYsIHNpemVvZihlZG9ucl9jdHgpLCBkZ3NoZnQyKGVkb25yLCB1LmRhdGEyNTYuaGFzaCkgKyAzMiwgaXVmKHJoYXNoX2Vkb25yMjU2KSwgMCB9LCAgLyogMjU2IGJpdCAqLwotCXsgJmluZm9fZWRyNTEyLCBzaXplb2YoZWRvbnJfY3R4KSwgZGdzaGZ0MihlZG9uciwgdS5kYXRhNTEyLmhhc2gpICsgNjQsIGl1ZihyaGFzaF9lZG9ucjUxMiksIDAgfSwgIC8qIDUxMiBiaXQgKi8KKwl7ICZpbmZvX2VkcjI1Niwgc2l6ZW9mKGVkb25yX2N0eCksICBkZ3NoZnQyKGVkb25yLCB1LmRhdGEyNTYuaGFzaCkgKyAzMiwgaXVmKHJoYXNoX2Vkb25yMjU2KSwgMCB9LCAgLyogMjU2IGJpdCAqLworCXsgJmluZm9fZWRyNTEyLCBzaXplb2YoZWRvbnJfY3R4KSwgIGRnc2hmdDIoZWRvbnIsIHUuZGF0YTUxMi5oYXNoKSArIDY0LCBpdWYocmhhc2hfZWRvbnI1MTIpLCAwIH0sICAvKiA1MTIgYml0ICovCiAjZW5kaWYKLQl7ICZpbmZvX3NoYTNfMjI0LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGluaShyaGFzaF9zaGEzXzIyNCksIHVwZChyaGFzaF9zaGEzKSwgZmluKHJoYXNoX3NoYTMpLCAwIH0sIC8qIDIyNCBiaXQgKi8KLQl7ICZpbmZvX3NoYTNfMjU2LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGluaShyaGFzaF9zaGEzXzI1NiksIHVwZChyaGFzaF9zaGEzKSwgZmluKHJoYXNoX3NoYTMpLCAwIH0sIC8qIDI1NiBiaXQgKi8KLQl7ICZpbmZvX3NoYTNfMzg0LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGluaShyaGFzaF9zaGEzXzM4NCksIHVwZChyaGFzaF9zaGEzKSwgZmluKHJoYXNoX3NoYTMpLCAwIH0sIC8qIDM4NCBiaXQgKi8KLQl7ICZpbmZvX3NoYTNfNTEyLCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGluaShyaGFzaF9zaGEzXzUxMiksIHVwZChyaGFzaF9zaGEzKSwgZmluKHJoYXNoX3NoYTMpLCAwIH0sIC8qIDUxMiBiaXQgKi8KKwl7ICZpbmZvX3NoYTNfMjI0LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGl1ZjIocmhhc2hfc2hhM18yMjQsIHJoYXNoX3NoYTMpLCAwIH0sIC8qIDIyNCBiaXQgKi8KKwl7ICZpbmZvX3NoYTNfMjU2LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGl1ZjIocmhhc2hfc2hhM18yNTYsIHJoYXNoX3NoYTMpLCAwIH0sIC8qIDI1NiBiaXQgKi8KKwl7ICZpbmZvX3NoYTNfMzg0LCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGl1ZjIocmhhc2hfc2hhM18zODQsIHJoYXNoX3NoYTMpLCAwIH0sIC8qIDM4NCBiaXQgKi8KKwl7ICZpbmZvX3NoYTNfNTEyLCBzaXplb2Yoc2hhM19jdHgpLCBkZ3NoZnQoc2hhMyksIGl1ZjIocmhhc2hfc2hhM181MTIsIHJoYXNoX3NoYTMpLCAwIH0sIC8qIDUxMiBiaXQgKi8KKyNpZiAwCisJeyAmaW5mb19jcmMzMmMsIHNpemVvZih1aW50MzJfdCksIDAsIGl1ZihyaGFzaF9jcmMzMmMpLCAwIH0sIC8qIDMyIGJpdCAqLworCXsgJmluZm9fc25mMTI4LCBzaXplb2Yoc25lZnJ1X2N0eCksIGRnc2hmdChzbmVmcnUpLCBpdWYyKHJoYXNoX3NuZWZydTEyOCwgcmhhc2hfc25lZnJ1KSwgMCB9LCAvKiAxMjggYml0ICovCisJeyAmaW5mb19zbmYyNTYsIHNpemVvZihzbmVmcnVfY3R4KSwgZGdzaGZ0KHNuZWZydSksIGl1ZjIocmhhc2hfc25lZnJ1MjU2LCByaGFzaF9zbmVmcnUpLCAwIH0sIC8qIDI1NiBiaXQgKi8KKyNlbmRpZgogfTsKIAogLyoqCiAgKiBJbml0aWFsaXplIHJlcXVlc3RlZCBhbGdvcml0aG1zLgorICoKKyAqIEBwYXJhbSBtYXNrIGlkcyBvZiBoYXNoIHN1bXMgdG8gaW5pdGlhbGl6ZQogICovCiB2b2lkIHJoYXNoX2luaXRfYWxnb3JpdGhtcyh1bnNpZ25lZCBtYXNrKQogewpAQCAtMTY1LDE1ICsxNzUsMjYgQEAKIAkvKiB2ZXJpZnkgdGhhdCBSSEFTSF9IQVNIX0NPVU5UIGlzIHRoZSBpbmRleCBvZiB0aGUgbWFqb3IgYml0IG9mIFJIQVNIX0FMTF9IQVNIRVMgKi8KIAlhc3NlcnQoMSA9PSAoUkhBU0hfQUxMX0hBU0hFUyA+PiAoUkhBU0hfSEFTSF9DT1VOVCAtIDEpKSk7CiAKLSNpZmRlZiBHRU5FUkFURV9DUkMzMl9UQUJMRQotCXJoYXNoX2NyYzMyX2luaXRfdGFibGUoKTsKLSNlbmRpZgotI2lmZGVmIEdFTkVSQVRFX0dPU1RfTE9PS1VQX1RBQkxFCi0Jcmhhc2hfZ29zdF9pbml0X3RhYmxlKCk7CisjaWZkZWYgR0VORVJBVEVfR09TVDk0X0xPT0tVUF9UQUJMRQorCXJoYXNoX2dvc3Q5NF9pbml0X3RhYmxlKCk7CiAjZW5kaWYKIAlyaGFzaF91bmluaXRpYWxpemVkX2FsZ29yaXRobXMgPSAwOwogfQogCisvKioKKyAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBoYXNoIGZ1bmN0aW9uIGJ5IGl0cyBoYXNoX2lkLgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQorICogQHJldHVybiBwb2ludGVyIHRvIHRoZSByaGFzaF9pbmZvIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbgorICovCitjb25zdCByaGFzaF9pbmZvKiByaGFzaF9pbmZvX2J5X2lkKHVuc2lnbmVkIGhhc2hfaWQpCit7CisJaGFzaF9pZCAmPSBSSEFTSF9BTExfSEFTSEVTOworCS8qIGNoZWNrIHRoYXQgb25lIGFuZCBvbmx5IG9uZSBiaXQgaXMgc2V0ICovCisJaWYgKCFoYXNoX2lkIHx8IChoYXNoX2lkICYgKGhhc2hfaWQgLSAxKSkgIT0gMCkgcmV0dXJuIE5VTEw7CisJcmV0dXJuIHJoYXNoX2luZm9fdGFibGVbcmhhc2hfY3R6KGhhc2hfaWQpXS5pbmZvOworfQorCiAjaWYgMAogLyogQ1JDMzIgaGVscGVyIGZ1bmN0aW9ucyAqLwogCkBAIC0yMTcsNCArMjM4LDQ1IEBACiAJcmVzdWx0WzJdID0gKHVuc2lnbmVkIGNoYXIpKCpjcmMzMiA+PiA4KSwgcmVzdWx0WzNdID0gKHVuc2lnbmVkIGNoYXIpKCpjcmMzMik7CiAjZW5kaWYKIH0KKworLyoqCisgKiBJbml0aWFsaXplIGNyYzMyYyBoYXNoLgorICoKKyAqIEBwYXJhbSBjcmMzMmMgcG9pbnRlciB0byB0aGUgaGFzaCB0byBpbml0aWFsaXplCisgKi8KK3N0YXRpYyB2b2lkIHJoYXNoX2NyYzMyY19pbml0KHVpbnQzMl90KiBjcmMzMmMpCit7CisJKmNyYzMyYyA9IDA7IC8qIG5vdGU6IGNvbnRleHQgc2l6ZSBpcyBzaXplb2YodWludDMyX3QpICovCit9CisKKy8qKgorICogQ2FsY3VsYXRlIG1lc3NhZ2UgQ1JDMzJDIGhhc2guCisgKiBDYW4gYmUgY2FsbGVkIHJlcGVhdGVkbHkgd2l0aCBjaHVua3Mgb2YgdGhlIG1lc3NhZ2UgdG8gYmUgaGFzaGVkLgorICoKKyAqIEBwYXJhbSBjcmMzMmMgcG9pbnRlciB0byB0aGUgaGFzaAorICogQHBhcmFtIG1zZyBtZXNzYWdlIGNodW5rCisgKiBAcGFyYW0gc2l6ZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgY2h1bmsKKyAqLworc3RhdGljIHZvaWQgcmhhc2hfY3JjMzJjX3VwZGF0ZSh1aW50MzJfdCogY3JjMzJjLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKQoreworCSpjcmMzMmMgPSByaGFzaF9nZXRfY3JjMzJjKCpjcmMzMmMsIG1zZywgc2l6ZSk7Cit9CisKKy8qKgorICogU3RvcmUgY2FsY3VsYXRlZCBoYXNoIGludG8gdGhlIGdpdmVuIGFycmF5LgorICoKKyAqIEBwYXJhbSBjcmMzMmMgcG9pbnRlciB0byB0aGUgY3VycmVudCBoYXNoIHZhbHVlCisgKiBAcGFyYW0gcmVzdWx0IGNhbGN1bGF0ZWQgaGFzaCBpbiBiaW5hcnkgZm9ybQorICovCitzdGF0aWMgdm9pZCByaGFzaF9jcmMzMmNfZmluYWwodWludDMyX3QqIGNyYzMyYywgdW5zaWduZWQgY2hhciogcmVzdWx0KQoreworI2lmIGRlZmluZWQoQ1BVX0lBMzIpIHx8IGRlZmluZWQoQ1BVX1g2NCkKKwkvKiBpbnRlbCBDUFVzIHN1cHBvcnQgYXNzaWdtZW50IHdpdGggbm9uIDMyLWJpdCBhbGlnbmVkIHBvaW50ZXJzICovCisJKih1bnNpZ25lZCopcmVzdWx0ID0gYmUybWVfMzIoKmNyYzMyYyk7CisjZWxzZQorCS8qIGNvcnJlY3Qgc2F2aW5nIEJpZ0VuZGlhbiBpbnRlZ2VyIG9uIGFsbCBhcmNocyAqLworCXJlc3VsdFswXSA9ICh1bnNpZ25lZCBjaGFyKSgqY3JjMzJjID4+IDI0KSwgcmVzdWx0WzFdID0gKHVuc2lnbmVkIGNoYXIpKCpjcmMzMmMgPj4gMTYpOworCXJlc3VsdFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgqY3JjMzJjID4+IDgpLCByZXN1bHRbM10gPSAodW5zaWduZWQgY2hhcikoKmNyYzMyYyk7CisjZW5kaWYKK30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYWxnb3JpdGhtcy5oCmluZGV4IDRkYjI1MTcuLjAxZGRhODggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2FsZ29yaXRobXMuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9hbGdvcml0aG1zLmgKQEAgLTIsOSArMiw5IEBACiAjaWZuZGVmIFJIQVNIX0FMR09SSVRITVNfSAogI2RlZmluZSBSSEFTSF9BTEdPUklUSE1TX0gKIAotI2luY2x1ZGUgPHN0ZGRlZi5oPiAvKiBmb3IgcHRyZGlmZl90ICovCiAjaW5jbHVkZSAicmhhc2guaCIKICNpbmNsdWRlICJieXRlX29yZGVyLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC0xNSw4ICsxNSw0MCBAQAogIyBkZWZpbmUgUkhBU0hfQVBJCiAjZW5kaWYKIAorLyoqCisgKiBCaXQgZmxhZzogZGVmYXVsdCBoYXNoIG91dHB1dCBmb3JtYXQgaXMgYmFzZTMyLgorICovCisjZGVmaW5lIFJIQVNIX0lORk9fQkFTRTMyIDEKKworLyoqCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhIGhhc2ggZnVuY3Rpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHJoYXNoX2luZm8KK3sKKwkvKioKKwkgKiBIYXNoIGZ1bmN0aW9uIGluZGVudGlmaWVyLgorCSAqLworCXVuc2lnbmVkIGhhc2hfaWQ7CisJLyoqCisJICogRmxhZ3MgYml0LW1hc2ssIGluY2x1ZGluZyBSSEFTSF9JTkZPX0JBU0UzMiBiaXQuCisJICovCisJdW5zaWduZWQgZmxhZ3M7CisJLyoqCisJIFRoZSBzaXplIG9mIG9mIHRoZSByYXcgbWVzc2FnZSBkaWdlc3QgaW4gYnl0ZXMuCisJICovCisJc2l6ZV90IGRpZ2VzdF9zaXplOworCS8qKgorCSAqIFRoZSBoYXNoIGZ1bmN0aW9uIG5hbWUuCisJICovCisJY29uc3QgY2hhciogbmFtZTsKKwkvKioKKwkgKiBUaGUgY29ycmVzcG9uZGluZyBwYXJhbWVudGVyIG5hbWUgaW4gYSBtYWduZXQgbGluay4KKwkgKi8KKwljb25zdCBjaGFyKiBtYWduZXRfbmFtZTsKK30gcmhhc2hfaW5mbzsKKwogdHlwZWRlZiB2b2lkICgqcGluaXRfdCkodm9pZCopOwotdHlwZWRlZiB2b2lkICgqcHVwZGF0ZV90KSh2b2lkICpjdHgsIGNvbnN0IHZvaWQqIG1zZywgc2l6ZV90IHNpemUpOwordHlwZWRlZiB2b2lkICgqcHVwZGF0ZV90KSh2b2lkKiBjdHgsIGNvbnN0IHZvaWQqIG1zZywgc2l6ZV90IHNpemUpOwogdHlwZWRlZiB2b2lkICgqcGZpbmFsX3QpKHZvaWQqLCB1bnNpZ25lZCBjaGFyKik7CiB0eXBlZGVmIHZvaWQgKCpwY2xlYW51cF90KSh2b2lkKik7CiAKQEAgLTI1LDcgKzU3LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3Qgcmhhc2hfaGFzaF9pbmZvCiB7Ci0Jcmhhc2hfaW5mbyAqaW5mbzsKKwlyaGFzaF9pbmZvKiBpbmZvOwogCXNpemVfdCBjb250ZXh0X3NpemU7CiAJcHRyZGlmZl90ICBkaWdlc3RfZGlmZjsKIAlwaW5pdF90ICAgIGluaXQ7CkBAIC00MCw3ICs3Miw3IEBACiB0eXBlZGVmIHN0cnVjdCByaGFzaF92ZWN0b3JfaXRlbQogewogCXN0cnVjdCByaGFzaF9oYXNoX2luZm8qIGhhc2hfaW5mbzsKLQl2b2lkICpjb250ZXh0OworCXZvaWQqIGNvbnRleHQ7CiB9IHJoYXNoX3ZlY3Rvcl9pdGVtOwogCiAvKioKQEAgLTUyLDggKzg0LDkgQEAKIAl1bnNpZ25lZCBoYXNoX3ZlY3Rvcl9zaXplOyAvKiBudW1iZXIgb2YgY29udGFpbmVkIGhhc2ggc3VtcyAqLwogCXVuc2lnbmVkIGZsYWdzOwogCXVuc2lnbmVkIHN0YXRlOwotCXZvaWQgKmNhbGxiYWNrLCAqY2FsbGJhY2tfZGF0YTsKLQl2b2lkICpidF9jdHg7CisJdm9pZCogY2FsbGJhY2s7CisJdm9pZCogY2FsbGJhY2tfZGF0YTsKKwl2b2lkKiBidF9jdHg7CiAJcmhhc2hfdmVjdG9yX2l0ZW0gdmVjdG9yWzFdOyAvKiBjb250ZXh0cyBvZiBjb250YWluZWQgaGFzaCBzdW1zICovCiB9IHJoYXNoX2NvbnRleHRfZXh0OwogCkBAIC02Myw2ICs5Niw3IEBACiBleHRlcm4gdW5zaWduZWQgcmhhc2hfdW5pbml0aWFsaXplZF9hbGdvcml0aG1zOwogCiBleHRlcm4gcmhhc2hfaW5mbyBpbmZvX2NyYzMyOworZXh0ZXJuIHJoYXNoX2luZm8gaW5mb19jcmMzMmM7CiBleHRlcm4gcmhhc2hfaW5mbyBpbmZvX21kNDsKIGV4dGVybiByaGFzaF9pbmZvIGluZm9fbWQ1OwogZXh0ZXJuIHJoYXNoX2luZm8gaW5mb19zaGExOwpAQCAtOTUsNyArMTI5LDcgQEAKICNkZWZpbmUgRl9TV0FQNjQgNAogCiAvKiBkZWZpbmUgZW5kaWFubmVzcyBmbGFncyAqLwotI2lmbmRlZiBDUFVfQklHX0VORElBTgorI2lmIElTX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgRl9MRTMyIDAKICNkZWZpbmUgRl9MRTY0IDAKICNkZWZpbmUgRl9CRTMyIEZfU1dBUDMyCkBAIC0xMDgsNiArMTQyLDcgQEAKICNlbmRpZgogCiB2b2lkIHJoYXNoX2luaXRfYWxnb3JpdGhtcyh1bnNpZ25lZCBtYXNrKTsKK2NvbnN0IHJoYXNoX2luZm8qIHJoYXNoX2luZm9fYnlfaWQodW5zaWduZWQgaGFzaF9pZCk7IC8qIGdldCBoYXNoIHN1bSBpbmZvIGJ5IGhhc2ggaWQgKi8KIAogI2lmIGRlZmluZWQoT1BFTlNTTF9SVU5USU1FKSAmJiAhZGVmaW5lZChVU0VfT1BFTlNTTCkKICMgZGVmaW5lIFVTRV9PUEVOU1NMCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9ieXRlX29yZGVyLmMgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9ieXRlX29yZGVyLmMKaW5kZXggOGNlNmZjOC4uZGUyYzU4MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYnl0ZV9vcmRlci5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2J5dGVfb3JkZXIuYwpAQCAtMSwyMSArMSwyMSBAQAogLyogYnl0ZV9vcmRlci5jIC0gYnl0ZSBvcmRlciByZWxhdGVkIHBsYXRmb3JtIGRlcGVuZGVudCByb3V0aW5lcywKICAqCi0gKiBDb3B5cmlnaHQ6IDIwMDgtMjAxMiBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAjaW5jbHVkZSAiYnl0ZV9vcmRlci5oIgogCi0jaWYgIShfX0dOVUNfXyA+PSA0IHx8IChfX0dOVUNfXyA9PTMgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpIC8qIGlmICFHQ0Mgb3IgR0NDIDwgNC4zICovCisjaWZuZGVmIHJoYXNoX2N0egogCiAjICBpZiBfTVNDX1ZFUiA+PSAxMzAwICYmIChfTV9JWDg2IHx8IF9NX0FNRDY0IHx8IF9NX0lBNjQpIC8qIGlmIE1TVkMrKyA+PSAyMDAyIG9uIHg4Ni94NjQgKi8KICMgIGluY2x1ZGUgPGludHJpbi5oPgpAQCAtNTksNyArNTksNyBAQAogCXJldHVybiAodW5zaWduZWQpYml0X3Bvc1soKHVpbnQzMl90KSgoeCAmIC14KSAqIDB4MDc3Q0I1MzFVKSkgPj4gMjddOwogfQogIyAgZW5kaWYgLyogX01TQ19WRVIgPj0gMTMwMC4uLiAqLwotI2VuZGlmIC8qICEoR0NDID49IDQuMykgKi8KKyNlbmRpZiAvKiByaGFzaF9jdHogKi8KIAogLyoqCiAgKiBDb3B5IGEgbWVtb3J5IGJsb2NrIHdpdGggc2ltdWx0YW5lb3VzIGV4Y2hhbmdpbmcgYnl0ZSBvcmRlci4KQEAgLTc5LDEwICs3OSwxMiBAQAogCQljb25zdCB1aW50MzJfdCogc3JjID0gKGNvbnN0IHVpbnQzMl90Kilmcm9tOwogCQljb25zdCB1aW50MzJfdCogZW5kID0gKGNvbnN0IHVpbnQzMl90KikoKGNvbnN0IGNoYXIqKXNyYyArIGxlbmd0aCk7CiAJCXVpbnQzMl90KiBkc3QgPSAodWludDMyX3QqKSgoY2hhciopdG8gKyBpbmRleCk7Ci0JCXdoaWxlIChzcmMgPCBlbmQpICooZHN0KyspID0gYnN3YXBfMzIoICooc3JjKyspICk7CisJCWZvciAoOyBzcmMgPCBlbmQ7IGRzdCsrLCBzcmMrKykKKwkJCSpkc3QgPSBic3dhcF8zMigqc3JjKTsKIAl9IGVsc2UgewogCQljb25zdCBjaGFyKiBzcmMgPSAoY29uc3QgY2hhciopZnJvbTsKLQkJZm9yIChsZW5ndGggKz0gaW5kZXg7IChzaXplX3QpaW5kZXggPCBsZW5ndGg7IGluZGV4KyspICgoY2hhciopdG8pW2luZGV4IF4gM10gPSAqKHNyYysrKTsKKwkJZm9yIChsZW5ndGggKz0gaW5kZXg7IChzaXplX3QpaW5kZXggPCBsZW5ndGg7IGluZGV4KyspCisJCQkoKGNoYXIqKXRvKVtpbmRleCBeIDNdID0gKihzcmMrKyk7CiAJfQogfQogCkBAIC0xNDEsMTAgKzE0MywzMSBAQAogICogQHBhcmFtIGFyciAgICB0aGUgYXJyYXkgdG8gcHJvY2VzcwogICogQHBhcmFtIGxlbmd0aCBhcnJheSBsZW5ndGgKICAqLwotdm9pZCByaGFzaF91MzJfbWVtX3N3YXAodW5zaWduZWQgKmFyciwgaW50IGxlbmd0aCkKK3ZvaWQgcmhhc2hfdTMyX21lbV9zd2FwKHVuc2lnbmVkKiBhcnIsIGludCBsZW5ndGgpCiB7CiAJdW5zaWduZWQqIGVuZCA9IGFyciArIGxlbmd0aDsKIAlmb3IgKDsgYXJyIDwgZW5kOyBhcnIrKykgewogCQkqYXJyID0gYnN3YXBfMzIoKmFycik7CiAJfQogfQorCisjaWZkZWYgSEFTX0lOVEVMX0NQVUlECisjaW5jbHVkZSA8Y3B1aWQuaD4KKworc3RhdGljIHVpbnQ2NF90IGdldF9jcHVpZF9mZWF0dXJlcyh2b2lkKQoreworCXVpbnQzMl90IHRtcCwgZWR4LCBlY3g7CisJaWYgKF9fZ2V0X2NwdWlkKDEsICZ0bXAsICZ0bXAsICZlY3gsICZlZHgpKQorCQlyZXR1cm4gKCgoKHVpbnQ2NF90KWVjeCkgPDwgMzIpIF4gZWR4KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGhhc19jcHVfZmVhdHVyZSh1bnNpZ25lZCBmZWF0dXJlX2JpdCkKK3sKKwlzdGF0aWMgdWludDY0X3QgZmVhdHVyZXM7CisJY29uc3QgdWludDY0X3QgZmVhdHVyZSA9ICgodWludDY0X3QpMSkgPDwgZmVhdHVyZV9iaXQ7CisJaWYgKCFmZWF0dXJlcykKKwkJZmVhdHVyZXMgPSAoZ2V0X2NwdWlkX2ZlYXR1cmVzKCkgfCAxKTsKKwlyZXR1cm4gISEoZmVhdHVyZXMgJiBmZWF0dXJlKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYnl0ZV9vcmRlci5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvYnl0ZV9vcmRlci5oCmluZGV4IGQzNGEwMjAuLmNmYjllMjUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2J5dGVfb3JkZXIuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9ieXRlX29yZGVyLmgKQEAgLTQsNiArNCwxOSBAQAogI2luY2x1ZGUgInVzdGQuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorI2lmIDAKKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykKKyMgaW5jbHVkZSA8ZW5kaWFuLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZWxpZiBkZWZpbmVkIChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQorIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTI2LDkgKzM5LDcgQEAKICMgZW5kaWYKICNlbmRpZgogCi0KLS8qIGRldGVjdCBDUFUgZW5kaWFubmVzcyAqLwotI2luY2x1ZGUgPGNtX2t3aW1sLmg+CisjaW5jbHVkZSA8Y20zcC9rd2ltbC9hYmkuaD4KICNpZiBLV0lNTF9BQklfRU5ESUFOX0lEID09IEtXSU1MX0FCSV9FTkRJQU5fSURfTElUVExFCiAjIGRlZmluZSBDUFVfTElUVExFX0VORElBTgogIyBkZWZpbmUgSVNfQklHX0VORElBTiAwCkBAIC0zNyw4ICs0OCw1MyBAQAogIyBkZWZpbmUgQ1BVX0JJR19FTkRJQU4KICMgZGVmaW5lIElTX0JJR19FTkRJQU4gMQogIyBkZWZpbmUgSVNfTElUVExFX0VORElBTiAwCisjZW5kaWYKKworI2lmIDAKKyNkZWZpbmUgUkhBU0hfQllURV9PUkRFUl9MRSAxMjM0CisjZGVmaW5lIFJIQVNIX0JZVEVfT1JERVJfQkUgNDMyMQorCisjaWYgKGRlZmluZWQoX19CWVRFX09SREVSKSAmJiBkZWZpbmVkKF9fTElUVExFX0VORElBTikgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikgfHwgXAorICAgIChkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBkZWZpbmVkKF9fT1JERVJfTElUVExFX0VORElBTl9fKSAmJiBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXykKKyMgIGRlZmluZSBSSEFTSF9CWVRFX09SREVSIFJIQVNIX0JZVEVfT1JERVJfTEUKKyNlbGlmIChkZWZpbmVkKF9fQllURV9PUkRFUikgJiYgZGVmaW5lZChfX0JJR19FTkRJQU4pICYmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4pIHx8IFwKKyAgICAgIChkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBkZWZpbmVkKF9fT1JERVJfQklHX0VORElBTl9fKSAmJiBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXykKKyMgIGRlZmluZSBSSEFTSF9CWVRFX09SREVSIFJIQVNIX0JZVEVfT1JERVJfQkUKKyNlbGlmIGRlZmluZWQoX0JZVEVfT1JERVIpCisjICBpZiBkZWZpbmVkKF9MSVRUTEVfRU5ESUFOKSAmJiAoX0JZVEVfT1JERVIgPT0gX0xJVFRMRV9FTkRJQU4pCisjICAgIGRlZmluZSBSSEFTSF9CWVRFX09SREVSIFJIQVNIX0JZVEVfT1JERVJfTEUKKyMgIGVsaWYgZGVmaW5lZChfQklHX0VORElBTikgJiYgKF9CWVRFX09SREVSID09IF9CSUdfRU5ESUFOKQorIyAgICBkZWZpbmUgUkhBU0hfQllURV9PUkRFUiBSSEFTSF9CWVRFX09SREVSX0JFCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX3N1bikgJiYgZGVmaW5lZChfTElUVExFX0VORElBTikKKyMgIGRlZmluZSBSSEFTSF9CWVRFX09SREVSIFJIQVNIX0JZVEVfT1JERVJfTEUKKyNlbGlmIGRlZmluZWQoX19zdW4pICYmIGRlZmluZWQoX0JJR19FTkRJQU4pCisjICBkZWZpbmUgUkhBU0hfQllURV9PUkRFUiBSSEFTSF9CWVRFX09SREVSX0JFCisjZW5kaWYKKworLyogdHJ5IGRldGVjdGluZyBlbmRpYW5uZXNzIGJ5IENQVSAqLworI2lmZGVmIFJIQVNIX0JZVEVfT1JERVIKKyNlbGlmIGRlZmluZWQoQ1BVX0lBMzIpIHx8IGRlZmluZWQoQ1BVX1g2NCkgfHwgZGVmaW5lZChfX2lhNjQpIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9NX0FMUEhBKSB8fCBkZWZpbmVkKHZheCkgfHwgZGVmaW5lZChNSVBTRUwpIHx8IFwKKyAgICAgIGRlZmluZWQoX0FSTV8pIHx8IGRlZmluZWQoX19hcm1fXykKKyMgIGRlZmluZSBSSEFTSF9CWVRFX09SREVSIFJIQVNIX0JZVEVfT1JERVJfTEUKKyNlbGlmIGRlZmluZWQoX19zcGFyYykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoc3BhcmMpIHx8IFwKKyAgICAgIGRlZmluZWQoX0FSQ0hfUFBDKSB8fCBkZWZpbmVkKF9BUkNIX1BQQzY0KSB8fCBkZWZpbmVkKF9QT1dFUikgfHwgXAorICAgICAgZGVmaW5lZChfX1BPV0VSUENfXykgfHwgZGVmaW5lZChQT1dFUlBDKSB8fCBkZWZpbmVkKF9fcG93ZXJwYykgfHwgXAorICAgICAgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBkZWZpbmVkKF9fcHBjX18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19ocHV4KSAgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKG1jNjgwMDApIHx8IFwKKyAgICAgIGRlZmluZWQoX19zMzkwX18pIHx8IGRlZmluZWQoX19zMzkweF9fKSB8fCBkZWZpbmVkKHNlbCkKKyMgZGVmaW5lIFJIQVNIX0JZVEVfT1JERVIgUkhBU0hfQllURV9PUkRFUl9CRQogI2Vsc2UKLSMgZXJyb3IgIkNhbid0IGRldGVjdCBDUFUgYXJjaGl0ZWNodHVyZSIKKyMgIGVycm9yICJDYW4ndCBkZXRlY3QgQ1BVIGFyY2hpdGVjaHR1cmUiCisjZW5kaWYKKworI2RlZmluZSBJU19CSUdfRU5ESUFOIChSSEFTSF9CWVRFX09SREVSID09IFJIQVNIX0JZVEVfT1JERVJfQkUpCisjZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gKFJIQVNIX0JZVEVfT1JERVIgPT0gUkhBU0hfQllURV9PUkRFUl9MRSkKKyNlbmRpZgorCisjaWZuZGVmIF9faGFzX2J1aWx0aW4KKyMgZGVmaW5lIF9faGFzX2J1aWx0aW4oeCkgMAogI2VuZGlmCiAKICNkZWZpbmUgSVNfQUxJR05FRF8zMihwKSAoMCA9PSAoMyAmICgoY29uc3QgY2hhciopKHApIC0gKGNvbnN0IGNoYXIqKTApKSkKQEAgLTU2LDExICsxMTIsMjMgQEAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKICNkZWZpbmUgSTY0KHgpIHgjI3VpNjQKICNlbHNlCi0jZGVmaW5lIEk2NCh4KSB4IyNMTAorI2RlZmluZSBJNjQoeCkgeCMjVUxMCiAjZW5kaWYKIAotLyogY29udmVydCBhIGhhc2ggZmxhZyB0byBpbmRleCAqLwotI2lmIF9fR05VQ19fID49IDQgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gNCkgLyogR0NDIDwgMy40ICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgUkhBU0hfSU5MSU5FIF9faW5saW5lCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisjZGVmaW5lIFJIQVNIX0lOTElORSBpbmxpbmUKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIFJIQVNIX0lOTElORSBfX2lubGluZV9fCisjZWxzZQorI2RlZmluZSBSSEFTSF9JTkxJTkUKKyNlbmRpZgorCisvKiBkZWZpbmUgcmhhc2hfY3R6IC0gY291bnQgdHJhbGluZyB6ZXJvIGJpdHMgKi8KKyNpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gNCB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgXAorICAgIChkZWZpbmVkKF9fY2xhbmdfXykgJiYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fY3R6KSkKKy8qIEdDQyA+PSAzLjQgb3IgY2xhbmcgKi8KICMgZGVmaW5lIHJoYXNoX2N0eih4KSBfX2J1aWx0aW5fY3R6KHgpCiAjZWxzZQogdW5zaWduZWQgcmhhc2hfY3R6KHVuc2lnbmVkKTsgLyogZGVmaW5lIGFzIGZ1bmN0aW9uICovCkBAIC02OSw0MiArMTM3LDMxIEBACiB2b2lkIHJoYXNoX3N3YXBfY29weV9zdHJfdG9fdTMyKHZvaWQqIHRvLCBpbnQgaW5kZXgsIGNvbnN0IHZvaWQqIGZyb20sIHNpemVfdCBsZW5ndGgpOwogdm9pZCByaGFzaF9zd2FwX2NvcHlfc3RyX3RvX3U2NCh2b2lkKiB0bywgaW50IGluZGV4LCBjb25zdCB2b2lkKiBmcm9tLCBzaXplX3QgbGVuZ3RoKTsKIHZvaWQgcmhhc2hfc3dhcF9jb3B5X3U2NF90b19zdHIodm9pZCogdG8sIGNvbnN0IHZvaWQqIGZyb20sIHNpemVfdCBsZW5ndGgpOwotdm9pZCByaGFzaF91MzJfbWVtX3N3YXAodW5zaWduZWQgKnAsIGludCBsZW5ndGhfaW5fdTMyKTsKK3ZvaWQgcmhhc2hfdTMyX21lbV9zd2FwKHVuc2lnbmVkKiBwLCBpbnQgbGVuZ3RoX2luX3UzMik7CiAKLSNpZm5kZWYgX19oYXNfYnVpbHRpbgotIyBkZWZpbmUgX19oYXNfYnVpbHRpbih4KSAwCi0jZW5kaWYKLQotLyogZGVmaW5lIGJzd2FwXzMyICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChDUFVfSUEzMikgJiYgIWRlZmluZWQoX19pMzg2X18pCi0vKiBmb3IgaW50ZWwgeDg2IENQVSAqLwotc3RhdGljIGlubGluZSB1aW50MzJfdCBic3dhcF8zMih1aW50MzJfdCB4KSB7Ci0JX19hc20oImJzd2FwXHQlMCIgOiAiPXIiICh4KSA6ICIwIiAoeCkpOwotCXJldHVybiB4OwotfQotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgICYmIChfX0dOVUNfXyA+PSA0KSAmJiAoX19HTlVDX18gPiA0IHx8IF9fR05VQ19NSU5PUl9fID49IDMpCi0vKiBmb3IgR0NDID49IDQuMyAqLworLyogYnN3YXAgZGVmaW5pdGlvbnMgKi8KKyNpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQpICYmIChfX0dOVUNfXyA+IDQgfHwgX19HTlVDX01JTk9SX18gPj0gMykpIHx8IFwKKyAgICAoZGVmaW5lZChfX2NsYW5nX18pICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2Jzd2FwMzIpICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2Jzd2FwNjQpKQorLyogR0NDID49IDQuMyBvciBjbGFuZyAqLwogIyBkZWZpbmUgYnN3YXBfMzIoeCkgX19idWlsdGluX2Jzd2FwMzIoeCkKLSNlbGlmIGRlZmluZWQoX19jbGFuZ19fKSAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9ic3dhcDMyKQotIyBkZWZpbmUgYnN3YXBfMzIoeCkgX19idWlsdGluX2Jzd2FwMzIoeCkKKyMgZGVmaW5lIGJzd2FwXzY0KHgpIF9fYnVpbHRpbl9ic3dhcDY0KHgpCiAjZWxpZiAoX01TQ19WRVIgPiAxMzAwKSAmJiAoZGVmaW5lZChDUFVfSUEzMikgfHwgZGVmaW5lZChDUFVfWDY0KSkgLyogTVMgVkMgKi8KICMgZGVmaW5lIGJzd2FwXzMyKHgpIF9ieXRlc3dhcF91bG9uZygodW5zaWduZWQgbG9uZyl4KQotI2Vsc2UKLS8qIGdlbmVyYWwgYnN3YXBfMzIgZGVmaW5pdGlvbiAqLwotc3RhdGljIHVpbnQzMl90IGJzd2FwXzMyKHVpbnQzMl90IHgpIHsKLQl4ID0gKCh4IDw8IDgpICYgMHhGRjAwRkYwMCkgfCAoKHggPj4gOCkgJiAweDAwRkYwMEZGKTsKLQlyZXR1cm4gKHggPj4gMTYpIHwgKHggPDwgMTYpOwotfQotI2VuZGlmIC8qIGJzd2FwXzMyICovCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPj0gNCkgJiYgKF9fR05VQ19fID4gNCB8fCBfX0dOVUNfTUlOT1JfXyA+PSAzKQotIyBkZWZpbmUgYnN3YXBfNjQoeCkgX19idWlsdGluX2Jzd2FwNjQoeCkKLSNlbGlmIGRlZmluZWQoX19jbGFuZ19fKSAmJiBfX2hhc19idWlsdGluKF9fYnVpbHRpbl9ic3dhcDY0KQotIyBkZWZpbmUgYnN3YXBfNjQoeCkgX19idWlsdGluX2Jzd2FwNjQoeCkKLSNlbGlmIChfTVNDX1ZFUiA+IDEzMDApICYmIChkZWZpbmVkKENQVV9JQTMyKSB8fCBkZWZpbmVkKENQVV9YNjQpKSAvKiBNUyBWQyAqLwogIyBkZWZpbmUgYnN3YXBfNjQoeCkgX2J5dGVzd2FwX3VpbnQ2NCgoX19pbnQ2NCl4KQogI2Vsc2UKLXN0YXRpYyB1aW50NjRfdCBic3dhcF82NCh1aW50NjRfdCB4KSB7CisvKiBmYWxsYmFjayB0byBnZW5lcmljIGJzd2FwIGRlZmluaXRpb24gKi8KK3N0YXRpYyBSSEFTSF9JTkxJTkUgdWludDMyX3QgYnN3YXBfMzIodWludDMyX3QgeCkKK3sKKyMgaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChDUFVfSUEzMikgJiYgIWRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKFJIQVNIX05PX0FTTSkKKwlfX2FzbSgiYnN3YXBcdCUwIiA6ICI9ciIgKHgpIDogIjAiICh4KSk7IC8qIGdjYyB4ODYgdmVyc2lvbiAqLworCXJldHVybiB4OworIyBlbHNlCisJeCA9ICgoeCA8PCA4KSAmIDB4RkYwMEZGMDB1KSB8ICgoeCA+PiA4KSAmIDB4MDBGRjAwRkZ1KTsKKwlyZXR1cm4gKHggPj4gMTYpIHwgKHggPDwgMTYpOworIyBlbmRpZgorfQorc3RhdGljIFJIQVNIX0lOTElORSB1aW50NjRfdCBic3dhcF82NCh1aW50NjRfdCB4KQorewogCXVuaW9uIHsKIAkJdWludDY0X3QgbGw7CiAJCXVpbnQzMl90IGxbMl07CkBAIC0xMTQsOSArMTcxLDkgQEAKIAlyLmxbMV0gPSBic3dhcF8zMih3LmxbMF0pOwogCXJldHVybiByLmxsOwogfQotI2VuZGlmCisjZW5kaWYgLyogYnN3YXAgZGVmaW5pdGlvbnMgKi8KIAotI2lmZGVmIENQVV9CSUdfRU5ESUFOCisjaWYgSVNfQklHX0VORElBTgogIyBkZWZpbmUgYmUybWVfMzIoeCkgKHgpCiAjIGRlZmluZSBiZTJtZV82NCh4KSAoeCkKICMgZGVmaW5lIGxlMm1lXzMyKHgpIGJzd2FwXzMyKHgpCkBAIC0xMjksNyArMTg2LDcgQEAKICMgZGVmaW5lIG1lNjRfdG9fYmVfc3RyKHRvLCBmcm9tLCBsZW5ndGgpIG1lbWNweSgodG8pLCAoZnJvbSksIChsZW5ndGgpKQogIyBkZWZpbmUgbWU2NF90b19sZV9zdHIodG8sIGZyb20sIGxlbmd0aCkgcmhhc2hfc3dhcF9jb3B5X3U2NF90b19zdHIoKHRvKSwgKGZyb20pLCAobGVuZ3RoKSkKIAotI2Vsc2UgLyogQ1BVX0JJR19FTkRJQU4gKi8KKyNlbHNlIC8qIElTX0JJR19FTkRJQU4gKi8KICMgZGVmaW5lIGJlMm1lXzMyKHgpIGJzd2FwXzMyKHgpCiAjIGRlZmluZSBiZTJtZV82NCh4KSBic3dhcF82NCh4KQogIyBkZWZpbmUgbGUybWVfMzIoeCkgKHgpCkBAIC0xNDEsNyArMTk4LDcgQEAKICMgZGVmaW5lIGxlNjRfY29weSh0bywgaW5kZXgsIGZyb20sIGxlbmd0aCkgbWVtY3B5KCh0bykgKyAoaW5kZXgpLCAoZnJvbSksIChsZW5ndGgpKQogIyBkZWZpbmUgbWU2NF90b19iZV9zdHIodG8sIGZyb20sIGxlbmd0aCkgcmhhc2hfc3dhcF9jb3B5X3U2NF90b19zdHIoKHRvKSwgKGZyb20pLCAobGVuZ3RoKSkKICMgZGVmaW5lIG1lNjRfdG9fbGVfc3RyKHRvLCBmcm9tLCBsZW5ndGgpIG1lbWNweSgodG8pLCAoZnJvbSksIChsZW5ndGgpKQotI2VuZGlmIC8qIENQVV9CSUdfRU5ESUFOICovCisjZW5kaWYgLyogSVNfQklHX0VORElBTiAqLwogCiAvKiBST1RML1JPVFIgbWFjcm9zIHJvdGF0ZSBhIDMyLzY0LWJpdCB3b3JkIGxlZnQvcmlnaHQgYnkgbiBiaXRzICovCiAjZGVmaW5lIFJPVEwzMihkd29yZCwgbikgKChkd29yZCkgPDwgKG4pIF4gKChkd29yZCkgPj4gKDMyIC0gKG4pKSkpCkBAIC0xNDksNiArMjA2LDE2IEBACiAjZGVmaW5lIFJPVEw2NChxd29yZCwgbikgKChxd29yZCkgPDwgKG4pIF4gKChxd29yZCkgPj4gKDY0IC0gKG4pKSkpCiAjZGVmaW5lIFJPVFI2NChxd29yZCwgbikgKChxd29yZCkgPj4gKG4pIF4gKChxd29yZCkgPDwgKDY0IC0gKG4pKSkpCiAKKyNkZWZpbmUgQ1BVX0ZFQVRVUkVfU1NFNF8yICg1MikKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gMykpIFwKKwkmJiAoZGVmaW5lZChDUFVfWDY0KSB8fCBkZWZpbmVkKENQVV9JQTMyKSkKKyMgZGVmaW5lIEhBU19JTlRFTF9DUFVJRAoraW50IGhhc19jcHVfZmVhdHVyZSh1bnNpZ25lZCBmZWF0dXJlX2JpdCk7CisjZWxzZQorIyBkZWZpbmUgaGFzX2NwdV9mZWF0dXJlKHgpICgwKQorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfSAvKiBleHRlcm4gIkMiICovCiAjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2hleC5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvaGV4LmMKaW5kZXggYzk0MTE0OS4uZjBiYmYwNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvaGV4LmMKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvaGV4LmMKQEAgLTEsNzEgKzEsNTcgQEAKIC8qIGhleC5jIC0gY29udmVyc2lvbiBmb3IgaGV4YWRlY2ltYWwgYW5kIGJhc2UzMiBzdHJpbmdzLgogICoKLSAqIENvcHlyaWdodDogMjAwOC0yMDEyIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCAgZnJlZSBvZiBjaGFyZ2UsICB0byBhbnkgcGVyc29uICBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvICB1c2UsIGNvcHksIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogICoKLSAqIFRoaXMgcHJvZ3JhbSAgaXMgIGRpc3RyaWJ1dGVkICBpbiAgdGhlICBob3BlICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBVc2UgdGhpcyBwcm9ncmFtICBhdCAgeW91ciBvd24gcmlzayEKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCisgKiBMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorICogT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgImhleC5oIgotCi0vKioKLSogQ29udmVydCBhIGJ5dGUgdG8gYSBoZXhhZGVjaW1hbCBudW1iZXIuIFRoZSByZXN1bHQsIGNvbnNpc3Rpbmcgb2YgdHdvCi0qIGhleGFkZWNpbWFsIGRpZ2l0cyBpcyBzdG9yZWQgaW50byBhIGJ1ZmZlci4KLSAqCi0gKiBAcGFyYW0gZGVzdCAgdGhlIGJ1ZmZlciB0byByZWNlaXZlIHR3byBzeW1ib2xzIG9mIGhleCByZXByZXNlbnRhdGlvbgotICogQHBhcmFtIGJ5dGUgdGhlIGJ5dGUgdG8gZGVjb2RlCi0gKiBAcGFyYW0gdXBwZXJfY2FzZSBmbGFnIHRvIHByaW50IHN0cmluZyBpbiB1cHBlcmNhc2UKLSAqIEByZXR1cm4gcG9pbnRlciB0byB0aGUgY2hhcmFyY3RlciBqdXN0IGFmdGVyIHRoZSB3cml0dGVuIG51bWJlciAoZGVzdCArIDIpCi0gKi8KLWNoYXIqIHJoYXNoX3ByaW50X2hleF9ieXRlKGNoYXIgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnl0ZSwgaW50IHVwcGVyX2Nhc2UpCi17Ci0JY29uc3QgY2hhciBhZGQgPSAodXBwZXJfY2FzZSA/ICdBJyAtIDEwIDogJ2EnIC0gMTApOwotCXVuc2lnbmVkIGNoYXIgYyA9IChieXRlID4+IDQpICYgMTU7Ci0JKmRlc3QrKyA9IChjID4gOSA/IGMgKyBhZGQgOiBjICsgJzAnKTsKLQljID0gYnl0ZSAmIDE1OwotCSpkZXN0KysgPSAoYyA+IDkgPyBjICsgYWRkIDogYyArICcwJyk7Ci0JcmV0dXJuIGRlc3Q7Ci19CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KIAogLyoqCiAgKiBTdG9yZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIGJpbmFyeSBzdHJpbmcgdG8gZ2l2ZW4gYnVmZmVyLgogICoKLSAqIEBwYXJhbSBkZXN0IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbgorICogQHBhcmFtIGRzdCB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24KICAqIEBwYXJhbSBzcmMgYmluYXJ5IHN0cmluZwotICogQHBhcmFtIGxlbiBzdHJpbmcgbGVuZ3RoCisgKiBAcGFyYW0gbGVuZ3RoIHN0cmluZyBsZW5ndGgKICAqIEBwYXJhbSB1cHBlcl9jYXNlIGZsYWcgdG8gcHJpbnQgc3RyaW5nIGluIHVwcGVyY2FzZQogICovCi12b2lkIHJoYXNoX2J5dGVfdG9faGV4KGNoYXIgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgbGVuLCBpbnQgdXBwZXJfY2FzZSkKK3ZvaWQgcmhhc2hfYnl0ZV90b19oZXgoY2hhciogZHN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHNpemVfdCBsZW5ndGgsIGludCB1cHBlcl9jYXNlKQogewotCXdoaWxlIChsZW4tLSA+IDApIHsKLQkJZGVzdCA9IHJoYXNoX3ByaW50X2hleF9ieXRlKGRlc3QsICpzcmMrKywgdXBwZXJfY2FzZSk7CisJY29uc3QgY2hhciBoZXhfYWRkID0gKHVwcGVyX2Nhc2UgPyAnQScgLSAxMCA6ICdhJyAtIDEwKTsKKwlmb3IgKDsgbGVuZ3RoID4gMDsgc3JjKyssIGxlbmd0aC0tKSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgaGkgPSAoKnNyYyA+PiA0KSAmIDE1OworCQljb25zdCB1bnNpZ25lZCBjaGFyIGxvID0gKnNyYyAmIDE1OworCQkqZHN0KysgPSAoaGkgPiA5ID8gaGkgKyBoZXhfYWRkIDogaGkgKyAnMCcpOworCQkqZHN0KysgPSAobG8gPiA5ID8gbG8gKyBoZXhfYWRkIDogbG8gKyAnMCcpOwogCX0KLQkqZGVzdCA9ICdcMCc7CisJKmRzdCA9ICdcMCc7CiB9CiAKIC8qKgogICogRW5jb2RlIGEgYmluYXJ5IHN0cmluZyB0byBiYXNlMzIuCiAgKgotICogQHBhcmFtIGRlc3QgdGhlIGJ1ZmZlciB0byBzdG9yZSByZXN1bHQKKyAqIEBwYXJhbSBkc3QgdGhlIGJ1ZmZlciB0byBzdG9yZSByZXN1bHQKICAqIEBwYXJhbSBzcmMgYmluYXJ5IHN0cmluZwotICogQHBhcmFtIGxlbiBzdHJpbmcgbGVuZ3RoCisgKiBAcGFyYW0gbGVuZ3RoIHN0cmluZyBsZW5ndGgKICAqIEBwYXJhbSB1cHBlcl9jYXNlIGZsYWcgdG8gcHJpbnQgc3RyaW5nIGluIHVwcGVyY2FzZQogICovCi12b2lkIHJoYXNoX2J5dGVfdG9fYmFzZTMyKGNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgdW5zaWduZWQgbGVuLCBpbnQgdXBwZXJfY2FzZSkKK3ZvaWQgcmhhc2hfYnl0ZV90b19iYXNlMzIoY2hhciogZHN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHNpemVfdCBsZW5ndGgsIGludCB1cHBlcl9jYXNlKQogewogCWNvbnN0IGNoYXIgYSA9ICh1cHBlcl9jYXNlID8gJ0EnIDogJ2EnKTsKIAl1bnNpZ25lZCBzaGlmdCA9IDA7CiAJdW5zaWduZWQgY2hhciB3b3JkOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIqIGUgPSBzcmMgKyBsZW47CisJY29uc3QgdW5zaWduZWQgY2hhciogZSA9IHNyYyArIGxlbmd0aDsKIAl3aGlsZSAoc3JjIDwgZSkgewogCQlpZiAoc2hpZnQgPiAzKSB7CiAJCQl3b3JkID0gKCpzcmMgJiAoMHhGRiA+PiBzaGlmdCkpOwpAQCAtNzksMjUgKzY1LDI1IEBACiAJCQl3b3JkID0gKCAqc3JjID4+ICggKDggLSBzaGlmdCkgJiA3ICkgKSAmIDB4MUY7CiAJCQlpZiAoc2hpZnQgPT0gMCkgc3JjKys7CiAJCX0KLQkJKmRlc3QrKyA9ICggd29yZCA8IDI2ID8gd29yZCArIGEgOiB3b3JkICsgJzInIC0gMjYgKTsKKwkJKmRzdCsrID0gKCB3b3JkIDwgMjYgPyB3b3JkICsgYSA6IHdvcmQgKyAnMicgLSAyNiApOwogCX0KLQkqZGVzdCA9ICdcMCc7CisJKmRzdCA9ICdcMCc7CiB9CiAKIC8qKgogICogRW5jb2RlIGEgYmluYXJ5IHN0cmluZyB0byBiYXNlNjQuCiAgKiBFbmNvZGVkIG91dHB1dCBsZW5ndGggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KICAqCi0gKiBAcGFyYW0gZGVzdCB0aGUgYnVmZmVyIHRvIHN0b3JlIHJlc3VsdAorICogQHBhcmFtIGRzdCB0aGUgYnVmZmVyIHRvIHN0b3JlIHJlc3VsdAogICogQHBhcmFtIHNyYyBiaW5hcnkgc3RyaW5nCi0gKiBAcGFyYW0gbGVuIHN0cmluZyBsZW5ndGgKKyAqIEBwYXJhbSBsZW5ndGggc3RyaW5nIGxlbmd0aAogICovCi12b2lkIHJoYXNoX2J5dGVfdG9fYmFzZTY0KGNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgdW5zaWduZWQgbGVuKQordm9pZCByaGFzaF9ieXRlX3RvX2Jhc2U2NChjaGFyKiBkc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgc2l6ZV90IGxlbmd0aCkKIHsKIAlzdGF0aWMgY29uc3QgY2hhciogdGFpbCA9ICIwMTIzNDU2Nzg5Ky8iOwogCXVuc2lnbmVkIHNoaWZ0ID0gMDsKIAl1bnNpZ25lZCBjaGFyIHdvcmQ7Ci0JY29uc3QgdW5zaWduZWQgY2hhciogZSA9IHNyYyArIGxlbjsKKwljb25zdCB1bnNpZ25lZCBjaGFyKiBlID0gc3JjICsgbGVuZ3RoOwogCXdoaWxlIChzcmMgPCBlKSB7CiAJCWlmIChzaGlmdCA+IDIpIHsKIAkJCXdvcmQgPSAoKnNyYyAmICgweEZGID4+IHNoaWZ0KSk7CkBAIC0xMTEsNDUgKzk3LDgwIEBACiAJCQl3b3JkID0gKCAqc3JjID4+ICggKDggLSBzaGlmdCkgJiA3ICkgKSAmIDB4M0Y7CiAJCQlpZiAoc2hpZnQgPT0gMCkgc3JjKys7CiAJCX0KLQkJKmRlc3QrKyA9ICggd29yZCA8IDUyID8gKHdvcmQgPCAyNiA/IHdvcmQgKyAnQScgOiB3b3JkIC0gMjYgKyAnYScpIDogdGFpbFt3b3JkIC0gNTJdKTsKKwkJKmRzdCsrID0gKCB3b3JkIDwgNTIgPyAod29yZCA8IDI2ID8gd29yZCArICdBJyA6IHdvcmQgLSAyNiArICdhJykgOiB0YWlsW3dvcmQgLSA1Ml0pOwogCX0KIAlpZiAoc2hpZnQgPiAwKSB7Ci0JCSpkZXN0KysgPSAnPSc7Ci0JCWlmIChzaGlmdCA9PSA0KSAqZGVzdCsrID0gJz0nOworCQkqZHN0KysgPSAnPSc7CisJCWlmIChzaGlmdCA9PSA0KSAqZHN0KysgPSAnPSc7CiAJfQotCSpkZXN0ID0gJ1wwJzsKKwkqZHN0ID0gJ1wwJzsKIH0KIAotLyogdW5zYWZlIGNoYXJhY3RlcnMgYXJlICI8Pnt9W10lIy98XF5+YEA6Oz89JisgKi8KLSNkZWZpbmUgSVNfR09PRF9VUkxfQ0hBUihjKSAoaXNhbG51bSgodW5zaWduZWQgY2hhciljKSB8fCBzdHJjaHIoIiQtXy4hJygpLCIsIGMpKQorc2l6ZV90IHJoYXNoX2Jhc2U2NF91cmxfZW5jb2RlZF9oZWxwZXIoY2hhciogZHN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHNpemVfdCBsZW5ndGgsIGludCB1cmxfZW5jb2RlLCBpbnQgdXBwZXJfY2FzZSkKK3sKKyNkZWZpbmUgQjY0X0NIVU5LX1NJWkUgMTIwCisJY2hhciBidWZmZXJbMTY0XTsKKwlhc3NlcnQoKEJBU0U2NF9MRU5HVEgoQjY0X0NIVU5LX1NJWkUpICsgNCkgPD0gc2l6ZW9mKGJ1ZmZlcikpOworCWFzc2VydCgoQjY0X0NIVU5LX1NJWkUgJSA2KSA9PSAwKTsKKwlpZiAodXJsX2VuY29kZSkgeworCQlzaXplX3QgcmVzdWx0X2xlbmd0aCA9IDA7CisJCWZvciAoOyBsZW5ndGggPiAwOyBzcmMgKz0gQjY0X0NIVU5LX1NJWkUpIHsKKwkJCXNpemVfdCBjaHVua19zaXplID0gKGxlbmd0aCA8IEI2NF9DSFVOS19TSVpFID8gbGVuZ3RoIDogQjY0X0NIVU5LX1NJWkUpOworCQkJc2l6ZV90IGVuY29kZWRfbGVuZ3RoOworCQkJcmhhc2hfYnl0ZV90b19iYXNlNjQoYnVmZmVyLCBzcmMsIGNodW5rX3NpemUpOworCQkJZW5jb2RlZF9sZW5ndGggPSByaGFzaF91cmxlbmNvZGUoZHN0LCBidWZmZXIsIEJBU0U2NF9MRU5HVEgoY2h1bmtfc2l6ZSksIHVwcGVyX2Nhc2UpOworCQkJcmVzdWx0X2xlbmd0aCArPSBlbmNvZGVkX2xlbmd0aDsKKwkJCWRzdCArPSBlbmNvZGVkX2xlbmd0aDsKKwkJCWxlbmd0aCAtPSBjaHVua19zaXplOworCQl9CisJCXJldHVybiByZXN1bHRfbGVuZ3RoOworCX0KKwlyaGFzaF9ieXRlX3RvX2Jhc2U2NChkc3QsIHNyYywgbGVuZ3RoKTsKKwlyZXR1cm4gQkFTRTY0X0xFTkdUSChsZW5ndGgpOworfQorCisvKiBSRkMgMzk4Njogc2FmZSB1cmwgY2hhcmFjdGVycyBhcmUgYXNjaWkgYWxwaGEtbnVtZXJpYyBhbmQgIi0uX34iLCBvdGhlciBjaGFyYWN0ZXJzIHNob3VsZCBiZSBwZXJjZW50LWVuY29kZWQgKi8KK3N0YXRpYyB1bnNpZ25lZCB1cmxfc2FmZV9jaGFyX21hc2tbNF0gPSB7IDAsIDB4MDNmZjYwMDAsIDB4ODdmZmZmZmUsIDB4NDdmZmZmZmUgfTsKKyNkZWZpbmUgSVNfVVJMX0dPT0RfQ0hBUihjKSAoKHVuc2lnbmVkKShjKSA8IDEyOCAmJiAodXJsX3NhZmVfY2hhcl9tYXNrW2MgPj4gNV0gJiAoMSA8PCAoYyAmIDMxKSkpKQogCiAvKioKLSAqIFVSTC1lbmNvZGUgYSBzdHJpbmcuCisgKiBVUkwtZW5jb2RlIHNwZWNpZmllZCBiaW5hcnkgc3RyaW5nLgogICoKLSAqIEBwYXJhbSBkc3QgYnVmZmVyIHRvIHJlY2VpdmUgcmVzdWx0IG9yIE5VTEwgdG8gY2FsY3VsYXRlCi0gKiAgICB0aGUgbGVuZ3RocyBvZiBlbmNvZGVkIHN0cmluZwotICogQHBhcmFtIGZpbGVuYW1lIHRoZSBmaWxlIG5hbWUKKyAqIEBwYXJhbSBkc3QgKG51bGxhYmxlKSBidWZmZXIgdG8gb3V0cHV0IGVuY29kZWQgc3RyaW5nIHRvLAorICogICAgICAgICAgICBOVUxMIHRvIGp1c3QgY2FsY3VsYXRlIHRoZSBsZW5ndGhzIG9mIGVuY29kZWQgc3RyaW5nCisgKiBAcGFyYW0gc3JjIGJpbmFyeSBzdHJpbmcgdG8gZW5jb2RlCisgKiBAcGFyYW0gc2l6ZSBzaXplIG9mIHRoZSBiaW5hcnkgc3RyaW5nCisgKiBAcGFyYW0gdXBwZXJfY2FzZSBmbGFnIHRvIG91dHB1dCBoZXgtY29kZXMgaW4gdXBwZXJjYXNlCiAgKiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBzdHJpbmcKICAqLwotaW50IHJoYXNoX3VybGVuY29kZShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKm5hbWUpCitzaXplX3Qgcmhhc2hfdXJsZW5jb2RlKGNoYXIqIGRzdCwgY29uc3QgY2hhciogc3JjLCBzaXplX3Qgc2l6ZSwgaW50IHVwcGVyX2Nhc2UpCiB7Ci0JY29uc3QgY2hhciAqc3RhcnQ7CisJY29uc3QgY2hhciogc3RhcnQ7CisJc2l6ZV90IGk7CiAJaWYgKCFkc3QpIHsKLQkJaW50IGxlbjsKLQkJZm9yIChsZW4gPSAwOyAqbmFtZTsgbmFtZSsrKSBsZW4gKz0gKElTX0dPT0RfVVJMX0NIQVIoKm5hbWUpID8gMSA6IDMpOwotCQlyZXR1cm4gbGVuOwotCX0KLQkvKiBlbmNvZGUgVVJMIGFzIHNwZWNpZmllZCBieSBSRkMgMTczOCAqLwotCWZvciAoc3RhcnQgPSBkc3Q7ICpuYW1lOyBuYW1lKyspIHsKLQkJaWYgKCBJU19HT09EX1VSTF9DSEFSKCpuYW1lKSApIHsKLQkJCSpkc3QrKyA9ICpuYW1lOwotCQl9IGVsc2UgewotCQkJKmRzdCsrID0gJyUnOwotCQkJZHN0ID0gcmhhc2hfcHJpbnRfaGV4X2J5dGUoZHN0LCAqbmFtZSwgJ0EnKTsKKwkJc2l6ZV90IGxlbmd0aCA9IHNpemU7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCQlpZiAoIUlTX1VSTF9HT09EX0NIQVIoc3JjW2ldKSkKKwkJCQlsZW5ndGggKz0gMjsKKwkJcmV0dXJuIGxlbmd0aDsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyIGhleF9hZGQgPSAodXBwZXJfY2FzZSA/ICdBJyAtIDEwIDogJ2EnIC0gMTApOworCQlzdGFydCA9IGRzdDsKKwkJLyogcGVyY2VudC1lbmNvZGUgYWxsIGJ1dCB1bnJlc2VydmVkIFVSTCBjaGFyYWN0ZXJzICovCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWlmIChJU19VUkxfR09PRF9DSEFSKHNyY1tpXSkpIHsKKwkJCQkqZHN0KysgPSBzcmNbaV07CisJCQl9IGVsc2UgeworCQkJCXVuc2lnbmVkIGNoYXIgaGkgPSAoKHVuc2lnbmVkIGNoYXIpKHNyY1tpXSkgPj4gNCkgJiAweDBmOworCQkJCXVuc2lnbmVkIGNoYXIgbG8gPSAodW5zaWduZWQgY2hhcikoc3JjW2ldKSAmIDB4MGY7CisJCQkJKmRzdCsrID0gJyUnOworCQkJCSpkc3QrKyA9IChoaSA+IDkgPyBoaSArIGhleF9hZGQgOiBoaSArICcwJyk7CisJCQkJKmRzdCsrID0gKGxvID4gOSA/IGxvICsgaGV4X2FkZCA6IGxvICsgJzAnKTsKKwkJCX0KIAkJfQorCQkqZHN0ID0gMDsKIAl9Ci0JKmRzdCA9IDA7Ci0JcmV0dXJuIChpbnQpKGRzdCAtIHN0YXJ0KTsKKwlyZXR1cm4gZHN0IC0gc3RhcnQ7CiB9CiAKIC8qKgpAQCAtMTYwLDEwICsxODEsMTEgQEAKICAqIEBwYXJhbSBudW1iZXIgdGhlIG51bWJlciB0byBwcmludAogICogQHJldHVybiBsZW5ndGggb2YgdGhlIHByaW50ZWQgbnVtYmVyICh3aXRob3V0IHRyYWlsaW5nICdcMCcpCiAgKi8KLWludCByaGFzaF9zcHJpbnRJNjQoY2hhciAqZHN0LCB1aW50NjRfdCBudW1iZXIpCitpbnQgcmhhc2hfc3ByaW50STY0KGNoYXIqIGRzdCwgdWludDY0X3QgbnVtYmVyKQogewogCS8qIFRoZSBiaWdnZXN0IG51bWJlciBoYXMgMjAgZGlnaXRzOiAyXjY0ID0gMTggNDQ2IDc0NCAwNzMgNzA5IDU1MSA2MTYgKi8KLQljaGFyIGJ1ZlsyNF0sICpwOworCWNoYXIgYnVmWzI0XTsKKwljaGFyKiBwOwogCXNpemVfdCBsZW5ndGg7CiAKIAlpZiAoZHN0ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL2hleC5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvaGV4LmgKaW5kZXggMmIzNjVlMi4uNmJlYTAzNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvaGV4LmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvaGV4LmgKQEAgLTgsMTIgKzgsMTMgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLXZvaWQgcmhhc2hfYnl0ZV90b19oZXgoY2hhciAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBsZW4sIGludCB1cHBlcl9jYXNlKTsKLXZvaWQgcmhhc2hfYnl0ZV90b19iYXNlMzIoY2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCB1bnNpZ25lZCBsZW4sIGludCB1cHBlcl9jYXNlKTsKLXZvaWQgcmhhc2hfYnl0ZV90b19iYXNlNjQoY2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCB1bnNpZ25lZCBsZW4pOwotY2hhciogcmhhc2hfcHJpbnRfaGV4X2J5dGUoY2hhciAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciBieXRlLCBpbnQgdXBwZXJfY2FzZSk7Ci1pbnQgIHJoYXNoX3VybGVuY29kZShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKm5hbWUpOwotaW50ICByaGFzaF9zcHJpbnRJNjQoY2hhciAqZHN0LCB1aW50NjRfdCBudW1iZXIpOwordm9pZCByaGFzaF9ieXRlX3RvX2hleChjaGFyKiBkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIHNpemVfdCBsZW5ndGgsIGludCB1cHBlcl9jYXNlKTsKK3ZvaWQgcmhhc2hfYnl0ZV90b19iYXNlMzIoY2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLCBzaXplX3QgbGVuZ3RoLCBpbnQgdXBwZXJfY2FzZSk7Cit2b2lkIHJoYXNoX2J5dGVfdG9fYmFzZTY0KGNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgc2l6ZV90IGxlbmd0aCk7CitjaGFyKiByaGFzaF9wcmludF9oZXhfYnl0ZShjaGFyKiBkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyIGJ5dGUsIGludCB1cHBlcl9jYXNlKTsKK3NpemVfdCByaGFzaF91cmxlbmNvZGUoY2hhciogZHN0LCBjb25zdCBjaGFyKiBzdHIsIHNpemVfdCBzaXplLCBpbnQgdXBwZXJfY2FzZSk7CitzaXplX3Qgcmhhc2hfYmFzZTY0X3VybF9lbmNvZGVkX2hlbHBlcihjaGFyKiBkc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYywgc2l6ZV90IGxlbmd0aCwgaW50IHVybF9lbmNvZGUsIGludCB1cHBlcl9jYXNlKTsKK2ludCByaGFzaF9zcHJpbnRJNjQoY2hhciogZHN0LCB1aW50NjRfdCBudW1iZXIpOwogCiAjZGVmaW5lIEJBU0UzMl9MRU5HVEgoYnl0ZXMpICgoKGJ5dGVzKSAqIDggKyA0KSAvIDUpCiAjZGVmaW5lIEJBU0U2NF9MRU5HVEgoYnl0ZXMpICgoKChieXRlcykgKyAyKSAvIDMpICogNCkKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL21kNS5jIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvbWQ1LmMKaW5kZXggYjIwZGU0NS4uOWI3NjgyMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvbWQ1LmMKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvbWQ1LmMKQEAgLTEsMTcgKzEsMTcgQEAKIC8qIG1kNS5jIC0gYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIE1ENSBhbGdvcml0aG0sIGJhc2VkIG9uIFJGQyAxMzIxLgogICoKLSAqIENvcHlyaWdodDogMjAwNy0yMDEyIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCAgZnJlZSBvZiBjaGFyZ2UsICB0byBhbnkgcGVyc29uICBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvICB1c2UsIGNvcHksIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogICoKLSAqIFRoaXMgcHJvZ3JhbSAgaXMgIGRpc3RyaWJ1dGVkICBpbiAgdGhlICBob3BlICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBVc2UgdGhpcyBwcm9ncmFtICBhdCAgeW91ciBvd24gcmlzayEKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCisgKiBMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorICogT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMjMsNyArMjMsNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfbWQ1X2luaXQobWQ1X2N0eCAqY3R4KQordm9pZCByaGFzaF9tZDVfaW5pdChtZDVfY3R4KiBjdHgpCiB7CiAJY3R4LT5sZW5ndGggPSAwOwogCkBAIC0xNjIsNyArMTYyLDcgQEAKICAqIEBwYXJhbSBtc2cgbWVzc2FnZSBjaHVuawogICogQHBhcmFtIHNpemUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGNodW5rCiAgKi8KLXZvaWQgcmhhc2hfbWQ1X3VwZGF0ZShtZDVfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpCit2b2lkIHJoYXNoX21kNV91cGRhdGUobWQ1X2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKQogewogCXVuc2lnbmVkIGluZGV4ID0gKHVuc2lnbmVkKWN0eC0+bGVuZ3RoICYgNjM7CiAJY3R4LT5sZW5ndGggKz0gc2l6ZTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogICogQHBhcmFtIGN0eCB0aGUgYWxnb3JpdGhtIGNvbnRleHQgY29udGFpbmluZyBjdXJyZW50IGhhc2hpbmcgc3RhdGUKICAqIEBwYXJhbSByZXN1bHQgY2FsY3VsYXRlZCBoYXNoIGluIGJpbmFyeSBmb3JtCiAgKi8KLXZvaWQgcmhhc2hfbWQ1X2ZpbmFsKG1kNV9jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQordm9pZCByaGFzaF9tZDVfZmluYWwobWQ1X2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCiB7CiAJdW5zaWduZWQgaW5kZXggPSAoKHVuc2lnbmVkKWN0eC0+bGVuZ3RoICYgNjMpID4+IDI7CiAJdW5zaWduZWQgc2hpZnQgPSAoKHVuc2lnbmVkKWN0eC0+bGVuZ3RoICYgMykgKiA4OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvbWQ1LmggYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9tZDUuaAppbmRleCAxYWY2ZjEzLi4xMmE2YjUyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9tZDUuaAorKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9tZDUuaApAQCAtMjAsOSArMjAsOSBAQAogCiAvKiBoYXNoIGZ1bmN0aW9ucyAqLwogCi12b2lkIHJoYXNoX21kNV9pbml0KG1kNV9jdHggKmN0eCk7Ci12b2lkIHJoYXNoX21kNV91cGRhdGUobWQ1X2N0eCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKTsKLXZvaWQgcmhhc2hfbWQ1X2ZpbmFsKG1kNV9jdHggKmN0eCwgdW5zaWduZWQgY2hhciByZXN1bHRbMTZdKTsKK3ZvaWQgcmhhc2hfbWQ1X2luaXQobWQ1X2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfbWQ1X3VwZGF0ZShtZDVfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpOwordm9pZCByaGFzaF9tZDVfZmluYWwobWQ1X2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyIHJlc3VsdFsxNl0pOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0gLyogZXh0ZXJuICJDIiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvcmhhc2guYyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmMKaW5kZXggMzRlMWViMy4uY2U2YWNlNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvcmhhc2guYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5jCkBAIC0xLDQyICsxLDQwIEBACiAvKiByaGFzaC5jIC0gaW1wbGVtZW50YXRpb24gb2YgTGliUkhhc2ggbGlicmFyeSBjYWxscwogICoKLSAqIENvcHlyaWdodDogMjAwOC0yMDEyIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCAgZnJlZSBvZiBjaGFyZ2UsICB0byBhbnkgcGVyc29uICBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvICB1c2UsIGNvcHksIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogICoKLSAqIFRoaXMgcHJvZ3JhbSAgaXMgIGRpc3RyaWJ1dGVkICBpbiAgdGhlICBob3BlICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBVc2UgdGhpcyBwcm9ncmFtICBhdCAgeW91ciBvd24gcmlzayEKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCisgKiBMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorICogT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAorLyogbW9kaWZpZXIgZm9yIFdpbmRvd3MgRExMICovCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pKSAmJiBkZWZpbmVkKFJIQVNIX0VYUE9SVFMpCisjIGRlZmluZSBSSEFTSF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZW5kaWYKKwogLyogbWFjcm9zIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQsIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgYW55IGluY2x1ZGUgZmlsZSAqLwogI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCiAjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CiAKICNpbmNsdWRlICJ1c3RkLmgiICAgLyogTmVlZCB0aGlzIGZpcnN0IHdpdGhpbiBDTWFrZS4gICovCiAKLSNpbmNsdWRlIDxzdHJpbmcuaD4gLyogbWVtc2V0KCkgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4gLyogZnJlZSgpICovCi0jaW5jbHVkZSA8c3RkZGVmLmg+IC8qIHB0cmRpZmZfdCAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAicmhhc2guaCIKKyNpbmNsdWRlICJhbGdvcml0aG1zLmgiCisjaW5jbHVkZSAiYnl0ZV9vcmRlci5oIgorI2luY2x1ZGUgImhleC5oIgorI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotCi0vKiBtb2RpZmllciBmb3IgV2luZG93cyBETEwgKi8KLSNpZiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChSSEFTSF9FWFBPUlRTKQotIyBkZWZpbmUgUkhBU0hfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotI2VuZGlmCi0KLSNpbmNsdWRlICJieXRlX29yZGVyLmgiCi0jaW5jbHVkZSAiYWxnb3JpdGhtcy5oIgotI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJoZXguaCIKLSNpbmNsdWRlICJyaGFzaC5oIiAvKiBSSGFzaCBsaWJyYXJ5IGludGVyZmFjZSAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjZGVmaW5lIFNUQVRFX0FDVElWRSAgMHhiMDFkYmFiZQogI2RlZmluZSBTVEFURV9TVE9QRUQgIDB4ZGVhZGJlZWYKQEAgLTQ1LDExICs0Myw4IEBACiAjZGVmaW5lIFJDVFhfRklOQUxJWkVEICAweDIKICNkZWZpbmUgUkNUWF9GSU5BTElaRURfTUFTSyAoUkNUWF9BVVRPX0ZJTkFMIHwgUkNUWF9GSU5BTElaRUQpCiAjZGVmaW5lIFJIUFJfRk9STUFUIChSSFBSX1JBVyB8IFJIUFJfSEVYIHwgUkhQUl9CQVNFMzIgfCBSSFBSX0JBU0U2NCkKLSNkZWZpbmUgUkhQUl9NT0RJRklFUiAoUkhQUl9VUFBFUkNBU0UgfCBSSFBSX1JFVkVSU0UpCisjZGVmaW5lIFJIUFJfTU9ESUZJRVIgKFJIUFJfVVBQRVJDQVNFIHwgUkhQUl9VUkxFTkNPREUgfCBSSFBSX1JFVkVSU0UpCiAKLS8qKgotICogSW5pdGlhbGl6ZSBzdGF0aWMgZGF0YSBvZiByaGFzaCBhbGdvcml0aG1zCi0gKi8KIHZvaWQgcmhhc2hfbGlicmFyeV9pbml0KHZvaWQpCiB7CiAJcmhhc2hfaW5pdF9hbGdvcml0aG1zKFJIQVNIX0FMTF9IQVNIRVMpOwpAQCAtNTgsMzEgKzUzLDE4IEBACiAjZW5kaWYKIH0KIAotLyoqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtcy4KLSAqCi0gKiBAcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGhhc2ggZnVuY3Rpb25zCi0gKi8KIGludCBSSEFTSF9BUEkgcmhhc2hfY291bnQodm9pZCkKIHsKIAlyZXR1cm4gcmhhc2hfaW5mb19zaXplOwogfQogCi0vKiBMby1sZXZlbCByaGFzaCBsaWJyYXJ5IGZ1bmN0aW9ucyAqLworLyogTE9XLUxFVkVMIExJQlJIQVNIIElOVEVSRkFDRSAqLwogCi0vKioKLSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIFJIYXNoIGNvbnRleHQgZm9yIGNhbGN1bGF0aW5nIGhhc2goZXMpLgotICogQWZ0ZXIgaW5pdGlhbGl6aW5nIHJoYXNoX3VwZGF0ZSgpL3JoYXNoX2ZpbmFsKCkgZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkLgotICogVGhlbiB0aGUgY29udGV4dCBtdXN0IGJlIGZyZWVkIGJ5IGNhbGxpbmcgcmhhc2hfZnJlZSgpLgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIHVuaW9uIG9mIGJpdCBmbGFncywgY29udGFpbmluZyBpZHMgb2YgaGFzaGVzIHRvIGNhbGN1bGF0ZS4KLSAqIEByZXR1cm4gaW5pdGlhbGl6ZWQgcmhhc2ggY29udGV4dCwgTlVMTCBvbiBlcnJvciBhbmQgZXJybm8gaXMgc2V0Ci0gKi8KIFJIQVNIX0FQSSByaGFzaCByaGFzaF9pbml0KHVuc2lnbmVkIGhhc2hfaWQpCiB7CiAJdW5zaWduZWQgdGFpbF9iaXRfaW5kZXg7IC8qIGluZGV4IG9mIGhhc2hfaWQgdHJhaWxpbmcgYml0ICovCiAJdW5zaWduZWQgbnVtID0gMDsgICAgICAgIC8qIG51bWJlciBvZiBoYXNoZXMgdG8gY29tcHV0ZSAqLwotCXJoYXNoX2NvbnRleHRfZXh0ICpyY3R4ID0gTlVMTDsgLyogYWxsb2NhdGVkIHJoYXNoIGNvbnRleHQgKi8KKwlyaGFzaF9jb250ZXh0X2V4dCogcmN0eCA9IE5VTEw7IC8qIGFsbG9jYXRlZCByaGFzaCBjb250ZXh0ICovCiAJc2l6ZV90IGhhc2hfc2l6ZV9zdW0gPSAwOyAgIC8qIHNpemUgb2YgaGFzaCBjb250ZXh0cyB0byBzdG9yZSBpbiByY3R4ICovCiAKIAl1bnNpZ25lZCBpLCBiaXRfaW5kZXgsIGlkOwpAQCAtMTIzLDcgKzEwNSw3IEBACiAJfQogCiAJLyogYWxpZ24gdGhlIHNpemUgb2YgdGhlIHJoYXNoIGNvbnRleHQgY29tbW9uIHBhcnQgKi8KLQlhbGlnbmVkX3NpemUgPSAob2Zmc2V0b2Yocmhhc2hfY29udGV4dF9leHQsIHZlY3RvcltudW1dKSArIDcpICYgfjc7CisJYWxpZ25lZF9zaXplID0gKChvZmZzZXRvZihyaGFzaF9jb250ZXh0X2V4dCwgdmVjdG9yKSArIHNpemVvZihyaGFzaF92ZWN0b3JfaXRlbSkgKiBudW0pICsgNykgJiB+NzsKIAlhc3NlcnQoYWxpZ25lZF9zaXplID49IHNpemVvZihyaGFzaF9jb250ZXh0X2V4dCkpOwogCiAJLyogYWxsb2NhdGUgcmhhc2ggY29udGV4dCB3aXRoIGVub3VnaCBtZW1vcnkgdG8gc3RvcmUgY29udGV4dHMgb2YgYWxsIHVzZWQgaGFzaGVzICovCkBAIC0xNzAsMTEgKzE1Miw2IEBACiAJcmV0dXJuICZyY3R4LT5yYzsgLyogcmV0dXJuIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgcmhhc2ggY29udGV4dCAqLwogfQogCi0vKioKLSAqIEZyZWUgUkhhc2ggY29udGV4dCBtZW1vcnkuCi0gKgotICogQHBhcmFtIGN0eCB0aGUgY29udGV4dCB0byBmcmVlLgotICovCiB2b2lkIHJoYXNoX2ZyZWUocmhhc2ggY3R4KQogewogCXJoYXNoX2NvbnRleHRfZXh0KiBjb25zdCBlY3R4ID0gKHJoYXNoX2NvbnRleHRfZXh0KiljdHg7CkBAIC0xOTUsMTIgKzE3Miw2IEBACiAJZnJlZShlY3R4KTsKIH0KIAotLyoqCi0gKiBSZS1pbml0aWFsaXplIFJIYXNoIGNvbnRleHQgdG8gcmV1c2UgaXQuCi0gKiBVc2VmdWwgdG8gc3BlZWQgdXAgcHJvY2Vzc2luZyBvZiBtYW55IHNtYWxsIG1lc3NhZ2VzLgotICoKLSAqIEBwYXJhbSBjdHggY29udGV4dCB0byByZWluaXRpYWxpemUKLSAqLwogUkhBU0hfQVBJIHZvaWQgcmhhc2hfcmVzZXQocmhhc2ggY3R4KQogewogCXJoYXNoX2NvbnRleHRfZXh0KiBjb25zdCBlY3R4ID0gKHJoYXNoX2NvbnRleHRfZXh0KiljdHg7CkBAIC0yMjMsMTUgKzE5NCw2IEBACiAJZWN0eC0+ZmxhZ3MgJj0gflJDVFhfRklOQUxJWkVEOyAvKiBjbGVhciBmaW5hbGl6ZWQgc3RhdGUgKi8KIH0KIAotLyoqCi0gKiBDYWxjdWxhdGUgaGFzaGVzIG9mIG1lc3NhZ2UuCi0gKiBDYW4gYmUgY2FsbGVkIHJlcGVhdGVkbHkgd2l0aCBjaHVua3Mgb2YgdGhlIG1lc3NhZ2UgdG8gYmUgaGFzaGVkLgotICoKLSAqIEBwYXJhbSBjdHggdGhlIHJoYXNoIGNvbnRleHQKLSAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgY2h1bmsKLSAqIEBwYXJhbSBsZW5ndGggbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGNodW5rCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzczsgT24gZmFpbCByZXR1cm4gLTEgYW5kIHNldCBlcnJubwotICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX3VwZGF0ZShyaGFzaCBjdHgsIGNvbnN0IHZvaWQqIG1lc3NhZ2UsIHNpemVfdCBsZW5ndGgpCiB7CiAJcmhhc2hfY29udGV4dF9leHQqIGNvbnN0IGVjdHggPSAocmhhc2hfY29udGV4dF9leHQqKWN0eDsKQEAgLTI1MSwxMyArMjEzLDYgQEAKIAlyZXR1cm4gMDsgLyogbm8gZXJyb3IgcHJvY2Vzc2luZyBhdCB0aGUgbW9tZW50ICovCiB9CiAKLS8qKgotICogRmluYWxpemUgaGFzaCBjYWxjdWxhdGlvbiBhbmQgb3B0aW9uYWxseSBzdG9yZSB0aGUgZmlyc3QgaGFzaC4KLSAqCi0gKiBAcGFyYW0gY3R4IHRoZSByaGFzaCBjb250ZXh0Ci0gKiBAcGFyYW0gZmlyc3RfcmVzdWx0IG9wdGlvbmFsIGJ1ZmZlciB0byBzdG9yZSBhIGNhbGN1bGF0ZWQgaGFzaCB3aXRoIHRoZSBsb3dlc3QgYXZhaWxhYmxlIGlkCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzczsgT24gZmFpbCByZXR1cm4gLTEgYW5kIHNldCBlcnJubwotICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX2ZpbmFsKHJoYXNoIGN0eCwgdW5zaWduZWQgY2hhciogZmlyc3RfcmVzdWx0KQogewogCXVuc2lnbmVkIGkgPSAwOwpAQCAtMjk1LDcgKzI1MCw3IEBACiB7CiAJcmhhc2hfY29udGV4dF9leHQqIGNvbnN0IGVjdHggPSAocmhhc2hfY29udGV4dF9leHQqKWN0eDsKIAl1bnNpZ25lZCBpOwotCXJoYXNoX3ZlY3Rvcl9pdGVtICppdGVtOworCXJoYXNoX3ZlY3Rvcl9pdGVtKiBpdGVtOwogCXN0cnVjdCByaGFzaF9oYXNoX2luZm8qIGluZm87CiAJdW5zaWduZWQgY2hhciogZGlnZXN0OwogCkBAIC0zMzIsMzQgKzI4NywxNCBAQAogCX0KIH0KIAotLyoqCi0gKiBTZXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmcm9tIHRoZQotICogcmhhc2hfZmlsZSgpIGFuZCByaGFzaF9maWxlX3VwZGF0ZSgpIGZ1bmN0aW9ucwotICogb24gcHJvY2Vzc2luZyBldmVyeSBmaWxlIGJsb2NrLiBUaGUgZmlsZSBibG9jawotICogc2l6ZSBpcyBzZXQgaW50ZXJuYWxseSBieSByaGFzaCBhbmQgbm93IGlzIDggS2lCLgotICoKLSAqIEBwYXJhbSBjdHggcmhhc2ggY29udGV4dAotICogQHBhcmFtIGNhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBAcGFyYW0gY2FsbGJhY2tfZGF0YSBwb2ludGVyIHRvIGRhdGEgcGFzc2VkIHRvIHRoZSBjYWxsYmFjawotICovCiBSSEFTSF9BUEkgdm9pZCByaGFzaF9zZXRfY2FsbGJhY2socmhhc2ggY3R4LCByaGFzaF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkKiBjYWxsYmFja19kYXRhKQogewotCSgocmhhc2hfY29udGV4dF9leHQqKWN0eCktPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJKChyaGFzaF9jb250ZXh0X2V4dCopY3R4KS0+Y2FsbGJhY2sgPSAodm9pZCopY2FsbGJhY2s7CiAJKChyaGFzaF9jb250ZXh0X2V4dCopY3R4KS0+Y2FsbGJhY2tfZGF0YSA9IGNhbGxiYWNrX2RhdGE7CiB9CiAKKy8qIEhJR0gtTEVWRUwgTElCUkhBU0ggSU5URVJGQUNFICovCiAKLS8qIGhpLWxldmVsIG1lc3NhZ2UgaGFzaGluZyBpbnRlcmZhY2UgKi8KLQotLyoqCi0gKiBDb21wdXRlIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gbWVzc2FnZS4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCBpZCBvZiBoYXNoIHN1bSB0byBjb21wdXRlCi0gKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZSB0byBwcm9jZXNzCi0gKiBAcGFyYW0gbGVuZ3RoIG1lc3NhZ2UgbGVuZ3RoCi0gKiBAcGFyYW0gcmVzdWx0IGJ1ZmZlciB0byByZWNlaXZlIGJpbmFyeSBoYXNoIHN0cmluZwotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCi0gKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfbXNnKHVuc2lnbmVkIGhhc2hfaWQsIGNvbnN0IHZvaWQqIG1lc3NhZ2UsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKIHsKIAlyaGFzaCBjdHg7CkBAIC0zNzIsMjIgKzMwNywxMiBAQAogCXJldHVybiAwOwogfQogCi0vKioKLSAqIEhhc2ggYSBmaWxlIG9yIHN0cmVhbS4gTXVsdGlwbGUgaGFzaGVzIGNhbiBiZSBjb21wdXRlZC4KLSAqIEZpcnN0LCBpbmludGlhbGl6ZSBjdHggcGFyYW1ldGVyIHdpdGggcmhhc2hfaW5pdCgpIGJlZm9yZSBjYWxsaW5nCi0gKiByaGFzaF9maWxlX3VwZGF0ZSgpLiBUaGVuIHVzZSByaGFzaF9maW5hbCgpIGFuZCByaGFzaF9wcmludCgpCi0gKiB0byByZXRyaXZlIGhhc2ggdmFsdWVzLiBGaW5hbHkgY2FsbCByaGFzaF9mcmVlKCkgb24gY3R4Ci0gKiB0byBmcmVlIGFsbG9jYXRlZCBtZW1vcnkgb3IgY2FsbCByaGFzaF9yZXNldCgpIHRvIHJldXNlIGN0eC4KLSAqCi0gKiBAcGFyYW0gY3R4IHJoYXNoIGNvbnRleHQKLSAqIEBwYXJhbSBmZCBkZXNjcmlwdG9yIG9mIHRoZSBmaWxlIHRvIGhhc2gKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciBhbmQgZXJybm8gaXMgc2V0Ci0gKi8KIFJIQVNIX0FQSSBpbnQgcmhhc2hfZmlsZV91cGRhdGUocmhhc2ggY3R4LCBGSUxFKiBmZCkKIHsKIAlyaGFzaF9jb250ZXh0X2V4dCogY29uc3QgZWN0eCA9IChyaGFzaF9jb250ZXh0X2V4dCopY3R4OwogCWNvbnN0IHNpemVfdCBibG9ja19zaXplID0gODE5MjsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXIsICpwbWVtOworCXVuc2lnbmVkIGNoYXIqIGJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyKiBwbWVtOwogCXNpemVfdCBsZW5ndGggPSAwLCBhbGlnbjg7CiAJaW50IHJlcyA9IDA7CiAJaWYgKGVjdHgtPnN0YXRlICE9IFNUQVRFX0FDVElWRSkgcmV0dXJuIDA7IC8qIGRvIG5vdGhpbmcgaWYgY2FuY2VsZWQgKi8KQEAgLTQyNSwxNCArMzUwLDYgQEAKIAlyZXR1cm4gcmVzOwogfQogCi0vKioKLSAqIENvbXB1dGUgYSBzaW5nbGUgaGFzaCBmb3IgZ2l2ZW4gZmlsZS4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCBpZCBvZiBoYXNoIHN1bSB0byBjb21wdXRlCi0gKiBAcGFyYW0gZmlsZXBhdGggcGF0aCB0byB0aGUgZmlsZSB0byBoYXNoCi0gKiBAcGFyYW0gcmVzdWx0IGJ1ZmZlciB0byByZWNlaXZlIGhhc2ggdmFsdWUgd2l0aCB0aGUgbG93ZXN0IHJlcXVlc3RlZCBpZAotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yIGFuZCBlcnJubyBpcyBzZXQKLSAqLwogUkhBU0hfQVBJIGludCByaGFzaF9maWxlKHVuc2lnbmVkIGhhc2hfaWQsIGNvbnN0IGNoYXIqIGZpbGVwYXRoLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCiB7CiAJRklMRSogZmQ7CkBAIC00NDcsNyArMzY0LDEwIEBACiAKIAlpZiAoKGZkID0gZm9wZW4oZmlsZXBhdGgsICJyYiIpKSA9PSBOVUxMKSByZXR1cm4gLTE7CiAKLQlpZiAoKGN0eCA9IHJoYXNoX2luaXQoaGFzaF9pZCkpID09IE5VTEwpIHJldHVybiAtMTsKKwlpZiAoKGN0eCA9IHJoYXNoX2luaXQoaGFzaF9pZCkpID09IE5VTEwpIHsKKwkJZmNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KIAogCXJlcyA9IHJoYXNoX2ZpbGVfdXBkYXRlKGN0eCwgZmQpOyAvKiBoYXNoIHRoZSBmaWxlICovCiAJZmNsb3NlKGZkKTsKQEAgLTQ2MCwxNCArMzgwLDYgQEAKICNpZmRlZiBfV0lOMzIgLyogd2luZG93cyBvbmx5IGZ1bmN0aW9uICovCiAjaW5jbHVkZSA8c2hhcmUuaD4KIAotLyoqCi0gKiBDb21wdXRlIGEgc2luZ2xlIGhhc2ggZm9yIGdpdmVuIGZpbGUuCi0gKgotICogQHBhcmFtIGhhc2hfaWQgaWQgb2YgaGFzaCBzdW0gdG8gY29tcHV0ZQotICogQHBhcmFtIGZpbGVwYXRoIHBhdGggdG8gdGhlIGZpbGUgdG8gaGFzaAotICogQHBhcmFtIHJlc3VsdCBidWZmZXIgdG8gcmVjZWl2ZSBoYXNoIHZhbHVlIHdpdGggdGhlIGxvd2VzdCByZXF1ZXN0ZWQgaWQKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciwgLTEgb24gZXJyb3IgYW5kIGVycm5vIGlzIHNldAotICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX3dmaWxlKHVuc2lnbmVkIGhhc2hfaWQsIGNvbnN0IHdjaGFyX3QqIGZpbGVwYXRoLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCiB7CiAJRklMRSogZmQ7CkBAIC00ODIsNyArMzk0LDEwIEBACiAKIAlpZiAoKGZkID0gX3dmc29wZW4oZmlsZXBhdGgsIEwicmIiLCBfU0hfREVOWVdSKSkgPT0gTlVMTCkgcmV0dXJuIC0xOwogCi0JaWYgKChjdHggPSByaGFzaF9pbml0KGhhc2hfaWQpKSA9PSBOVUxMKSByZXR1cm4gLTE7CisJaWYgKChjdHggPSByaGFzaF9pbml0KGhhc2hfaWQpKSA9PSBOVUxMKSB7CisJCWZjbG9zZShmZCk7CisJCXJldHVybiAtMTsKKwl9CiAKIAlyZXMgPSByaGFzaF9maWxlX3VwZGF0ZShjdHgsIGZkKTsgLyogaGFzaCB0aGUgZmlsZSAqLwogCWZjbG9zZShmZCk7CkBAIC00OTUsMjggKzQxMCw3IEBACiAKIC8qIFJIYXNoIGluZm9ybWF0aW9uIGZ1bmN0aW9ucyAqLwogCi0vKioKLSAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBoYXNoIGZ1bmN0aW9uIGJ5IGl0cyBoYXNoX2lkLgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQotICogQHJldHVybiBwb2ludGVyIHRvIHRoZSByaGFzaF9pbmZvIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbgotICovCi1jb25zdCByaGFzaF9pbmZvKiByaGFzaF9pbmZvX2J5X2lkKHVuc2lnbmVkIGhhc2hfaWQpCi17Ci0JaGFzaF9pZCAmPSBSSEFTSF9BTExfSEFTSEVTOwotCS8qIGNoZWNrIHRoYXQgb25seSBvbmUgYml0IGlzIHNldCAqLwotCWlmIChoYXNoX2lkICE9IChoYXNoX2lkICYgLShpbnQpaGFzaF9pZCkpIHJldHVybiBOVUxMOwotCS8qIG5vdGU6IGFsdGVybmF0aXZlIGNvbmRpdGlvbiBpcyAoaGFzaF9pZCA9PSAwIHx8IChoYXNoX2lkICYgKGhhc2hfaWQgLSAxKSkgIT0gMCkgKi8KLQlyZXR1cm4gcmhhc2hfaW5mb190YWJsZVtyaGFzaF9jdHooaGFzaF9pZCldLmluZm87Ci19Ci0KICNpZiAwCi0vKioKLSAqIERldGVjdCBkZWZhdWx0IGRpZ2VzdCBvdXRwdXQgZm9ybWF0IGZvciBnaXZlbiBoYXNoIGFsZ29yaXRobS4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KLSAqIEByZXR1cm4gMSBmb3IgYmFzZTMyIGZvcm1hdCwgMCBmb3IgaGV4YWRlY2ltYWwKLSAqLwogUkhBU0hfQVBJIGludCByaGFzaF9pc19iYXNlMzIodW5zaWduZWQgaGFzaF9pZCkKIHsKIAkvKiBmYXN0IG1ldGhvZCBpcyBqdXN0IHRvIHRlc3QgYSBiaXQtbWFzayAqLwpAQCAtNTI0LDEyICs0MTgsNiBAQAogfQogI2VuZGlmCiAKLS8qKgotICogUmV0dXJucyBzaXplIG9mIGJpbmFyeSBkaWdlc3QgZm9yIGdpdmVuIGhhc2ggYWxnb3JpdGhtLgotICoKLSAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQotICogQHJldHVybiBkaWdlc3Qgc2l6ZSBpbiBieXRlcwotICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX2dldF9kaWdlc3Rfc2l6ZSh1bnNpZ25lZCBoYXNoX2lkKQogewogCWhhc2hfaWQgJj0gUkhBU0hfQUxMX0hBU0hFUzsKQEAgLTUzNywxMiArNDI1LDYgQEAKIAlyZXR1cm4gKGludClyaGFzaF9pbmZvX3RhYmxlW3JoYXNoX2N0eihoYXNoX2lkKV0uaW5mby0+ZGlnZXN0X3NpemU7CiB9CiAKLS8qKgotICogUmV0dXJucyBsZW5ndGggb2YgZGlnZXN0IGhhc2ggc3RyaW5nIGluIGRlZmF1bHQgb3V0cHV0IGZvcm1hdC4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KLSAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiBoYXNoIHN0cmluZwotICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX2dldF9oYXNoX2xlbmd0aCh1bnNpZ25lZCBoYXNoX2lkKQogewogCWNvbnN0IHJoYXNoX2luZm8qIGluZm8gPSByaGFzaF9pbmZvX2J5X2lkKGhhc2hfaWQpOwpAQCAtNTUwLDI2ICs0MzIsMTIgQEAKIAkJQkFTRTMyX0xFTkdUSChpbmZvLT5kaWdlc3Rfc2l6ZSkgOiBpbmZvLT5kaWdlc3Rfc2l6ZSAqIDIpIDogMCk7CiB9CiAKLS8qKgotICogUmV0dXJucyBhIG5hbWUgb2YgZ2l2ZW4gaGFzaCBhbGdvcml0aG0uCi0gKgotICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCi0gKiBAcmV0dXJuIGFsZ29yaXRobSBuYW1lCi0gKi8KIFJIQVNIX0FQSSBjb25zdCBjaGFyKiByaGFzaF9nZXRfbmFtZSh1bnNpZ25lZCBoYXNoX2lkKQogewogCWNvbnN0IHJoYXNoX2luZm8qIGluZm8gPSByaGFzaF9pbmZvX2J5X2lkKGhhc2hfaWQpOwogCXJldHVybiAoaW5mbyA/IGluZm8tPm5hbWUgOiAwKTsKIH0KIAotLyoqCi0gKiBSZXR1cm5zIGEgbmFtZSBwYXJ0IG9mIG1hZ25ldCB1cm4gb2YgdGhlIGdpdmVuIGhhc2ggYWxnb3JpdGhtLgotICogU3VjaCBtYWduZXRfbmFtZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgbWFnbmV0IGxpbmsgb2YgdGhlIGZvcm0KLSAqIHVybjombHQ7bWFnbmV0X25hbWUmZ3Q7PSZsdDtoYXNoX3ZhbHVlJmd0Oy4KLSAqCi0gKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KLSAqIEByZXR1cm4gbmFtZQotICovCiBSSEFTSF9BUEkgY29uc3QgY2hhciogcmhhc2hfZ2V0X21hZ25ldF9uYW1lKHVuc2lnbmVkIGhhc2hfaWQpCiB7CiAJY29uc3Qgcmhhc2hfaW5mbyogaW5mbyA9IHJoYXNoX2luZm9fYnlfaWQoaGFzaF9pZCk7CkBAIC01OTksNyArNDY3LDcgQEAKIAl9CiAKIAlpZiAoZmlsZXBhdGgpIHsKLQkJc2l6ZSArPSA0ICsgcmhhc2hfdXJsZW5jb2RlKE5VTEwsIGZpbGVwYXRoKTsKKwkJc2l6ZSArPSA0ICsgcmhhc2hfdXJsZW5jb2RlKE5VTEwsIGZpbGVwYXRoLCBzdHJsZW4oZmlsZXBhdGgpLCAwKTsKIAl9CiAKIAkvKiBsb29wIHRocm91Z2ggaGFzaCB2YWx1ZXMgKi8KQEAgLTYxMCwzNCArNDc4LDIwIEBACiAKIAkJc2l6ZSArPSAoNyArIDIpICsgc3RybGVuKG5hbWUpOwogCQlzaXplICs9IHJoYXNoX3ByaW50KE5VTEwsIGNvbnRleHQsIGJpdCwKLQkJCShiaXQgJiAoUkhBU0hfU0hBMSB8IFJIQVNIX0JUSUgpID8gUkhQUl9CQVNFMzIgOiAwKSk7CisJCQkoYml0ICYgUkhBU0hfU0hBMSA/IFJIUFJfQkFTRTMyIDogMCkpOwogCX0KIAogCXJldHVybiBzaXplOwogfQogCi0vKioKLSAqIFByaW50IG1hZ25ldCBsaW5rIHdpdGggZ2l2ZW4gZmlsZXBhdGggYW5kIGNhbGN1bGF0ZWQgaGFzaCBzdW1zIGludG8gdGhlCi0gKiBvdXRwdXQgYnVmZmVyLiBUaGUgaGFzaF9tYXNrIGNhbiBsaW1pdCB3aGljaCBoYXNoIHZhbHVlcyB3aWxsIGJlIHByaW50ZWQuCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgcmVxdWlyZWQgYnVmZmVyLgotICogSWYgb3V0cHV0IGlzIE5VTEwgdGhlIC4KLSAqCi0gKiBAcGFyYW0gb3V0cHV0IGEgc3RyaW5nIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBtYWduZXQgbGluayBvciBOVUxMCi0gKiBAcGFyYW0gZmlsZXBhdGggdGhlIGZpbGUgcGF0aCB0byBiZSBwcmludGVkIG9yIE5VTEwKLSAqIEBwYXJhbSBjb250ZXh0IGFsZ29yaXRobXMgc3RhdGUKLSAqIEBwYXJhbSBoYXNoX21hc2sgYml0IG1hc2sgb2YgdGhlIGhhc2ggc3VtcyB0byBhZGQgdG8gdGhlIGxpbmsKLSAqIEBwYXJhbSBmbGFncyAgIGNhbiBiZSBjb21iaW5hdGlvbiBvZiBiaXRzIFJIUFJfVVBQRVJDQVNFLCBSSFBSX05PX01BR05FVCwKLSAqICAgICAgICAgICAgICAgIFJIUFJfRklMRVNJWkUKLSAqIEByZXR1cm4gbnVtYmVyIG9mIHdyaXR0ZW4gY2hhcmFjdGVycywgaW5jbHVkaW5nIHRlcm1pbmF0aW5nICdcMCcgb24gc3VjY2VzcywgMCBvbiBmYWlsCi0gKi8KIFJIQVNIX0FQSSBzaXplX3Qgcmhhc2hfcHJpbnRfbWFnbmV0KGNoYXIqIG91dHB1dCwgY29uc3QgY2hhciogZmlsZXBhdGgsCiAJcmhhc2ggY29udGV4dCwgdW5zaWduZWQgaGFzaF9tYXNrLCBpbnQgZmxhZ3MpCiB7CiAJaW50IGk7CiAJY29uc3QgY2hhciogYmVnaW4gPSBvdXRwdXQ7CiAKLQlpZiAob3V0cHV0ID09IE5VTEwpIHJldHVybiByaGFzaF9nZXRfbWFnbmV0X3VybF9zaXplKAotCQlmaWxlcGF0aCwgY29udGV4dCwgaGFzaF9tYXNrLCBmbGFncyk7CisJaWYgKG91dHB1dCA9PSBOVUxMKQorCQlyZXR1cm4gcmhhc2hfZ2V0X21hZ25ldF91cmxfc2l6ZShmaWxlcGF0aCwgY29udGV4dCwgaGFzaF9tYXNrLCBmbGFncyk7CiAKIAkvKiBSSFBSX05PX01BR05FVCwgUkhQUl9GSUxFU0laRSAqLwogCWlmICgoZmxhZ3MgJiBSSFBSX05PX01BR05FVCkgPT0gMCkgewpAQCAtNjUyLDEzICs1MDYsMTMgQEAKIAkJKihvdXRwdXQrKykgPSAnJic7CiAJfQogCisJZmxhZ3MgJj0gUkhQUl9VUFBFUkNBU0U7CiAJaWYgKGZpbGVwYXRoKSB7CiAJCXN0cmNweShvdXRwdXQsICJkbj0iKTsKIAkJb3V0cHV0ICs9IDM7Ci0JCW91dHB1dCArPSByaGFzaF91cmxlbmNvZGUob3V0cHV0LCBmaWxlcGF0aCk7CisJCW91dHB1dCArPSByaGFzaF91cmxlbmNvZGUob3V0cHV0LCBmaWxlcGF0aCwgc3RybGVuKGZpbGVwYXRoKSwgZmxhZ3MpOwogCQkqKG91dHB1dCsrKSA9ICcmJzsKIAl9Ci0JZmxhZ3MgJj0gUkhQUl9VUFBFUkNBU0U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCXVuc2lnbmVkIGJpdDsKQEAgLTY3OSw3ICs1MzMsNyBAQAogCQkJb3V0cHV0ICs9IHN0cmxlbihuYW1lKTsKIAkJCSoob3V0cHV0KyspID0gJzonOwogCQkJb3V0cHV0ICs9IHJoYXNoX3ByaW50KG91dHB1dCwgY29udGV4dCwgYml0LAotCQkJCShiaXQgJiAoUkhBU0hfU0hBMSB8IFJIQVNIX0JUSUgpID8gZmxhZ3MgfCBSSFBSX0JBU0UzMiA6IGZsYWdzKSk7CisJCQkJKGJpdCAmIFJIQVNIX1NIQTEgPyBmbGFncyB8IFJIUFJfQkFTRTMyIDogZmxhZ3MpKTsKIAkJCSoob3V0cHV0KyspID0gJyYnOwogCQl9CiAJfQpAQCAtNjg4LDYyICs1NDIsMzkgQEAKIAlyZXR1cm4gKG91dHB1dCAtIGJlZ2luKTsKIH0KIAotLyogaGFzaCBzdW0gb3V0cHV0ICovCiAKLS8qKgotICogUHJpbnQgYSB0ZXh0IHByZXNlbnRhdGlvbiBvZiBhIGdpdmVuIGhhc2ggc3VtIHRvIHRoZSBzcGVjaWZpZWQgYnVmZmVyLAotICoKLSAqIEBwYXJhbSBvdXRwdXQgYSBidWZmZXIgdG8gcHJpbnQgdGhlIGhhc2ggdG8KLSAqIEBwYXJhbSBieXRlcyBhIGhhc2ggc3VtIHRvIHByaW50Ci0gKiBAcGFyYW0gc2l6ZSBhIHNpemUgb2YgaGFzaCBzdW0gaW4gYnl0ZXMKLSAqIEBwYXJhbSBmbGFncyAgYSBiaXQtbWFzayBjb250cm9sbGluZyBob3cgdG8gZm9ybWF0IHRoZSBoYXNoIHN1bSwKLSAqICAgICAgICAgICAgICAgY2FuIGJlIGEgbWl4IG9mIHRoZSBmbGFnczogUkhQUl9SQVcsIFJIUFJfSEVYLCBSSFBSX0JBU0UzMiwKLSAqICAgICAgICAgICAgICAgUkhQUl9CQVNFNjQsIFJIUFJfVVBQRVJDQVNFLCBSSFBSX1JFVkVSU0UKLSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiB3cml0dGVuIGNoYXJhY3RlcnMKLSAqLwotc2l6ZV90IHJoYXNoX3ByaW50X2J5dGVzKGNoYXIqIG91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciogYnl0ZXMsCi0Jc2l6ZV90IHNpemUsIGludCBmbGFncykKKy8qIEhBU0ggU1VNIE9VVFBVVCBJTlRFUkZBQ0UgKi8KKworc2l6ZV90IHJoYXNoX3ByaW50X2J5dGVzKGNoYXIqIG91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciogYnl0ZXMsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7Ci0Jc2l6ZV90IHN0cl9sZW47CisJc2l6ZV90IHJlc3VsdF9sZW5ndGg7CiAJaW50IHVwcGVyX2Nhc2UgPSAoZmxhZ3MgJiBSSFBSX1VQUEVSQ0FTRSk7CiAJaW50IGZvcm1hdCA9IChmbGFncyAmIH5SSFBSX01PRElGSUVSKTsKIAogCXN3aXRjaCAoZm9ybWF0KSB7CiAJY2FzZSBSSFBSX0hFWDoKLQkJc3RyX2xlbiA9IHNpemUgKiAyOwotCQlyaGFzaF9ieXRlX3RvX2hleChvdXRwdXQsIGJ5dGVzLCAodW5zaWduZWQpc2l6ZSwgdXBwZXJfY2FzZSk7CisJCXJlc3VsdF9sZW5ndGggPSBzaXplICogMjsKKwkJcmhhc2hfYnl0ZV90b19oZXgob3V0cHV0LCBieXRlcywgc2l6ZSwgdXBwZXJfY2FzZSk7CiAJCWJyZWFrOwogCWNhc2UgUkhQUl9CQVNFMzI6Ci0JCXN0cl9sZW4gPSBCQVNFMzJfTEVOR1RIKHNpemUpOwotCQlyaGFzaF9ieXRlX3RvX2Jhc2UzMihvdXRwdXQsIGJ5dGVzLCAodW5zaWduZWQpc2l6ZSwgdXBwZXJfY2FzZSk7CisJCXJlc3VsdF9sZW5ndGggPSBCQVNFMzJfTEVOR1RIKHNpemUpOworCQlyaGFzaF9ieXRlX3RvX2Jhc2UzMihvdXRwdXQsIGJ5dGVzLCBzaXplLCB1cHBlcl9jYXNlKTsKIAkJYnJlYWs7CiAJY2FzZSBSSFBSX0JBU0U2NDoKLQkJc3RyX2xlbiA9IEJBU0U2NF9MRU5HVEgoc2l6ZSk7Ci0JCXJoYXNoX2J5dGVfdG9fYmFzZTY0KG91dHB1dCwgYnl0ZXMsICh1bnNpZ25lZClzaXplKTsKKwkJcmVzdWx0X2xlbmd0aCA9IHJoYXNoX2Jhc2U2NF91cmxfZW5jb2RlZF9oZWxwZXIob3V0cHV0LCBieXRlcywgc2l6ZSwgKGZsYWdzICYgUkhQUl9VUkxFTkNPREUpLCB1cHBlcl9jYXNlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc3RyX2xlbiA9IHNpemU7Ci0JCW1lbWNweShvdXRwdXQsIGJ5dGVzLCBzaXplKTsKKwkJaWYgKGZsYWdzICYgUkhQUl9VUkxFTkNPREUpIHsKKwkJCXJlc3VsdF9sZW5ndGggPSByaGFzaF91cmxlbmNvZGUob3V0cHV0LCAoY2hhciopYnl0ZXMsIHNpemUsIHVwcGVyX2Nhc2UpOworCQl9IGVsc2UgeworCQkJbWVtY3B5KG91dHB1dCwgYnl0ZXMsIHNpemUpOworCQkJcmVzdWx0X2xlbmd0aCA9IHNpemU7CisJCX0KIAkJYnJlYWs7CiAJfQotCXJldHVybiBzdHJfbGVuOworCXJldHVybiByZXN1bHRfbGVuZ3RoOwogfQogCi0vKioKLSAqIFByaW50IHRleHQgcHJlc2VudGF0aW9uIG9mIGEgaGFzaCBzdW0gd2l0aCBnaXZlbiBoYXNoX2lkIHRvIHRoZSBzcGVjaWZpZWQKLSAqIG91dHB1dCBidWZmZXIuIElmIHRoZSBoYXNoX2lkIGlzIHplcm8sIHRoZW4gcHJpbnQgdGhlIGhhc2ggc3VtIHdpdGgKLSAqIHRoZSBsb3dlc3QgaWQgc3RvcmVkIGluIHRoZSBoYXNoIGNvbnRleHQuCi0gKiBUaGUgZnVuY3Rpb24gY2FsbCBmYWlscyBpZiB0aGUgY29udGV4dCBkb2Vzbid0IGluY2x1ZGUgYSBoYXNoIHdpdGggdGhlCi0gKiBnaXZlbiBoYXNoX2lkLgotICoKLSAqIEBwYXJhbSBvdXRwdXQgYSBidWZmZXIgdG8gcHJpbnQgdGhlIGhhc2ggdG8KLSAqIEBwYXJhbSBjb250ZXh0IGFsZ29yaXRobXMgc3RhdGUKLSAqIEBwYXJhbSBoYXNoX2lkIGlkIG9mIHRoZSBoYXNoIHN1bSB0byBwcmludCBvciAwIHRvIHByaW50IHRoZSBmaXJzdCBoYXNoCi0gKiAgICAgICAgICAgICAgICBzYXZlZCBpbiB0aGUgY29udGV4dC4KLSAqIEBwYXJhbSBmbGFncyAgYSBiaXRtYXNrIGNvbnRyb2xsaW5nIGhvdyB0byBwcmludCB0aGUgaGFzaC4gQ2FuIGNvbnRhaW4gZmxhZ3MKLSAqICAgICAgICAgICAgICAgUkhQUl9VUFBFUkNBU0UsIFJIUFJfSEVYLCBSSFBSX0JBU0UzMiwgUkhQUl9CQVNFNjQsIGV0Yy4KLSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiB3cml0dGVuIGNoYXJhY3RlcnMgb24gc3VjY2VzcyBvciAwIG9uIGZhaWwKLSAqLwogc2l6ZV90IFJIQVNIX0FQSSByaGFzaF9wcmludChjaGFyKiBvdXRwdXQsIHJoYXNoIGNvbnRleHQsIHVuc2lnbmVkIGhhc2hfaWQsIGludCBmbGFncykKIHsKIAljb25zdCByaGFzaF9pbmZvKiBpbmZvOwpAQCAtNzY0LDE1ICs1OTUsMTYgQEAKIAl9CiAKIAlpZiAob3V0cHV0ID09IE5VTEwpIHsKKwkJc2l6ZV90IG11bHRpcGxpZXIgPSAoZmxhZ3MgJiBSSFBSX1VSTEVOQ09ERSA/IDMgOiAxKTsKIAkJc3dpdGNoIChmbGFncyAmIFJIUFJfRk9STUFUKSB7CiAJCWNhc2UgUkhQUl9IRVg6CiAJCQlyZXR1cm4gKGRpZ2VzdF9zaXplICogMik7CiAJCWNhc2UgUkhQUl9CQVNFMzI6CiAJCQlyZXR1cm4gQkFTRTMyX0xFTkdUSChkaWdlc3Rfc2l6ZSk7CiAJCWNhc2UgUkhQUl9CQVNFNjQ6Ci0JCQlyZXR1cm4gQkFTRTY0X0xFTkdUSChkaWdlc3Rfc2l6ZSk7CisJCQlyZXR1cm4gQkFTRTY0X0xFTkdUSChkaWdlc3Rfc2l6ZSkgKiBtdWx0aXBsaWVyOwogCQlkZWZhdWx0OgotCQkJcmV0dXJuIGRpZ2VzdF9zaXplOworCQkJcmV0dXJuIGRpZ2VzdF9zaXplICogbXVsdGlwbGllcjsKIAkJfQogCX0KIApAQCAtNzgxLDcgKzYxMyw4IEBACiAKIAlpZiAoKGZsYWdzICYgflJIUFJfVVBQRVJDQVNFKSA9PSAoUkhQUl9SRVZFUlNFIHwgUkhQUl9IRVgpKSB7CiAJCS8qIHJldmVyc2UgdGhlIGRpZ2VzdCAqLwotCQl1bnNpZ25lZCBjaGFyICpwID0gZGlnZXN0LCAqciA9IGRpZ2VzdCArIGRpZ2VzdF9zaXplIC0gMTsKKwkJdW5zaWduZWQgY2hhciogcCA9IGRpZ2VzdDsKKwkJdW5zaWduZWQgY2hhciogciA9IGRpZ2VzdCArIGRpZ2VzdF9zaXplIC0gMTsKIAkJY2hhciB0bXA7CiAJCWZvciAoOyBwIDwgcjsgcCsrLCByLS0pIHsKIAkJCXRtcCA9ICpwOwpAQCAtNzkzLDcgKzYyNiw3IEBACiAJcmV0dXJuIHJoYXNoX3ByaW50X2J5dGVzKG91dHB1dCwgZGlnZXN0LCBkaWdlc3Rfc2l6ZSwgZmxhZ3MpOwogfQogCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoUkhBU0hfRVhQT1JUUykKKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykpICYmIGRlZmluZWQoUkhBU0hfRVhQT1JUUykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiBCT09MIEFQSUVOVFJZIERsbE1haW4oSE1PRFVMRSBoTW9kdWxlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCk7CiBCT09MIEFQSUVOVFJZIERsbE1haW4oSE1PRFVMRSBoTW9kdWxlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkKQEAgLTgxNCwxNyArNjQ3LDggQEAKIH0KICNlbmRpZgogCi0jZGVmaW5lIFBWT0lEMlVQVFIocCkgKChyaGFzaF91cHRyX3QpKChjaGFyKilwIC0gMCkpCisjZGVmaW5lIFBWT0lEMlVQVFIocCkgKChyaGFzaF91cHRyX3QpKCgoY2hhciopKHApKSArIDApKQogCi0vKioKLSAqIFByb2Nlc3MgYSByaGFzaCBtZXNzYWdlLgotICoKLSAqIEBwYXJhbSBtc2dfaWQgbWVzc2FnZSBpZGVudGlmaWVyCi0gKiBAcGFyYW0gZHN0IG1lc3NhZ2UgZGVzdGluYXRpb24gKGNhbiBiZSBOVUxMIGZvciBnZW5lcmljIG1lc3NhZ2VzKQotICogQHBhcmFtIGxkYXRhIGRhdGEgZGVwZW5kaW5nIG9uIG1lc3NhZ2UKLSAqIEBwYXJhbSByZGF0YSBkYXRhIGRlcGVuZGluZyBvbiBtZXNzYWdlCi0gKiBAcmV0dXJuIG1lc3NhZ2Utc3BlY2lmaWMgZGF0YQotICovCiBSSEFTSF9BUEkgcmhhc2hfdXB0cl90IHJoYXNoX3RyYW5zbWl0KHVuc2lnbmVkIG1zZ19pZCwgdm9pZCogZHN0LCByaGFzaF91cHRyX3QgbGRhdGEsIHJoYXNoX3VwdHJfdCByZGF0YSkKIHsKIAkvKiBmb3IgbWVzc2FnZXMgd29ya2luZyB3aXRoIHJoYXNoIGNvbnRleHQgKi8KQEAgLTg2NSw2ICs2ODksMTAgQEAKIAljYXNlIFJNU0dfR0VUX09QRU5TU0xfTUFTSzoKIAkJcmV0dXJuIHJoYXNoX29wZW5zc2xfaGFzaF9tYXNrOwogI2VuZGlmCisJY2FzZSBSTVNHX0dFVF9PUEVOU1NMX1NVUFBPUlRFRF9NQVNLOgorCQlyZXR1cm4gcmhhc2hfZ2V0X29wZW5zc2xfc3VwcG9ydGVkX2hhc2hfbWFzaygpOworCWNhc2UgUk1TR19HRVRfT1BFTlNTTF9BVkFJTEFCTEVfTUFTSzoKKwkJcmV0dXJuIHJoYXNoX2dldF9vcGVuc3NsX2F2YWlsYWJsZV9oYXNoX21hc2soKTsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiBSSEFTSF9FUlJPUjsgLyogdW5rbm93biBtZXNzYWdlICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5oIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvcmhhc2guaAppbmRleCBjZWUwZTI1Li5jMDExNzYyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9yaGFzaC5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3JoYXNoLmgKQEAgLTksNyArOSw5IEBACiAjZW5kaWYKIAogI2lmbmRlZiBSSEFTSF9BUEkKLS8qIG1vZGlmaWVyIGZvciBMaWJSSGFzaCBmdW5jdGlvbnMgKi8KKy8qKgorICogTW9kaWZpZXIgZm9yIExpYlJIYXNoIGZ1bmN0aW9ucworICovCiAjIGRlZmluZSBSSEFTSF9BUEkKICNlbmRpZgogCkBAIC0zMiwxMSArMzQsMTEgQEAKIAlSSEFTSF9BSUNIICA9IDB4MTAwLAogCVJIQVNIX1dISVJMUE9PTCA9IDB4MjAwLAogCVJIQVNIX1JJUEVNRDE2MCA9IDB4NDAwLAotCVJIQVNIX0dPU1QgICAgICA9IDB4ODAwLAotCVJIQVNIX0dPU1RfQ1JZUFRPUFJPID0gMHgxMDAwLAotCVJIQVNIX0hBUzE2MCAgICA9IDB4MjAwMCwKLQlSSEFTSF9TTkVGUlUxMjggPSAweDQwMDAsCi0JUkhBU0hfU05FRlJVMjU2ID0gMHg4MDAwLAorCVJIQVNIX0dPU1Q5NCAgICA9IDB4ODAwLAorCVJIQVNIX0dPU1Q5NF9DUllQVE9QUk8gPSAweDEwMDAsCisJUkhBU0hfSEFTMTYwICAgICA9IDB4MjAwMCwKKwlSSEFTSF9HT1NUMTJfMjU2ID0gMHg0MDAwLAorCVJIQVNIX0dPU1QxMl81MTIgPSAweDgwMDAsCiAJUkhBU0hfU0hBMjI0ICAgID0gMHgxMDAwMCwKIAlSSEFTSF9TSEEyNTYgICAgPSAweDIwMDAwLAogCVJIQVNIX1NIQTM4NCAgICA9IDB4NDAwMDAsCkBAIC00NywxOCArNDksMjggQEAKIAlSSEFTSF9TSEEzXzI1NiAgPSAweDA4MDAwMDAsCiAJUkhBU0hfU0hBM18zODQgID0gMHgxMDAwMDAwLAogCVJIQVNIX1NIQTNfNTEyICA9IDB4MjAwMDAwMCwKKwlSSEFTSF9DUkMzMkMgICAgPSAweDQwMDAwMDAsCisJUkhBU0hfU05FRlJVMTI4ID0gMHg4MDAwMDAwLAorCVJIQVNIX1NORUZSVTI1NiA9IDB4MTAwMDAwMDAsCiAKLQkvKiogVGhlIGJpdC1tYXNrIGNvbnRhaW5pbmcgYWxsIHN1cHBvcnRlZCBoYXNoZSBmdW5jdGlvbnMgKi8KLQlSSEFTSF9BTExfSEFTSEVTID0gUkhBU0hfQ1JDMzIgfCBSSEFTSF9NRDQgfCBSSEFTSF9NRDUgfCBSSEFTSF9FRDJLIHwgUkhBU0hfU0hBMSB8Ci0JCVJIQVNIX1RJR0VSIHwgUkhBU0hfVFRIIHwgUkhBU0hfR09TVCB8IFJIQVNIX0dPU1RfQ1JZUFRPUFJPIHwKKwkvKioKKwkgKiBUaGUgYml0LW1hc2sgY29udGFpbmluZyBhbGwgc3VwcG9ydGVkIGhhc2hlIGZ1bmN0aW9ucy4KKwkgKi8KKwlSSEFTSF9BTExfSEFTSEVTID0gUkhBU0hfQ1JDMzIgfCBSSEFTSF9DUkMzMkMgfCBSSEFTSF9NRDQgfCBSSEFTSF9NRDUgfAorCQlSSEFTSF9FRDJLIHwgUkhBU0hfU0hBMSB8UkhBU0hfVElHRVIgfCBSSEFTSF9UVEggfAorCQlSSEFTSF9HT1NUOTQgfCBSSEFTSF9HT1NUOTRfQ1JZUFRPUFJPIHwgUkhBU0hfR09TVDEyXzI1NiB8IFJIQVNIX0dPU1QxMl81MTIgfAogCQlSSEFTSF9CVElIIHwgUkhBU0hfQUlDSCB8IFJIQVNIX1dISVJMUE9PTCB8IFJIQVNIX1JJUEVNRDE2MCB8CiAJCVJIQVNIX0hBUzE2MCB8IFJIQVNIX1NORUZSVTEyOCB8IFJIQVNIX1NORUZSVTI1NiB8CiAJCVJIQVNIX1NIQTIyNCB8IFJIQVNIX1NIQTI1NiB8IFJIQVNIX1NIQTM4NCB8IFJIQVNIX1NIQTUxMiB8CiAJCVJIQVNIX1NIQTNfMjI0IHwgUkhBU0hfU0hBM18yNTYgfCBSSEFTSF9TSEEzXzM4NCB8IFJIQVNIX1NIQTNfNTEyIHwKIAkJUkhBU0hfRURPTlIyNTYgfCBSSEFTSF9FRE9OUjUxMiwKIAotCS8qKiBUaGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXNoIGZ1bmN0aW9ucyAqLwotCVJIQVNIX0hBU0hfQ09VTlQgPSAyNgorCVJIQVNIX0dPU1QgPSBSSEFTSF9HT1NUOTQsIC8qIGRlcHJlY2F0ZWQgY29uc3RhbnQgbmFtZSAqLworCVJIQVNIX0dPU1RfQ1JZUFRPUFJPID0gUkhBU0hfR09TVDk0X0NSWVBUT1BSTywgLyogZGVwcmVjYXRlZCBjb25zdGFudCBuYW1lICovCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbnMuCisJICovCisJUkhBU0hfSEFTSF9DT1VOVCA9IDI5CiAjZWxzZQogCVJIQVNIX01ENSAgICAgICAgPSAweDAxLAogCVJIQVNIX1NIQTEgICAgICAgPSAweDAyLApAQCAtODYsMTUgKzk4LDE3IEBACiB9OwogCiAvKioKLSAqIFRoZSByaGFzaCBjb250ZXh0IHN0cnVjdHVyZSBjb250YWlucyBjb250ZXh0cyBmb3Igc2V2ZXJhbCBoYXNoIGZ1bmN0aW9ucworICogVGhlIHJoYXNoIGNvbnRleHQgc3RydWN0dXJlIGNvbnRhaW5zIGNvbnRleHRzIGZvciBzZXZlcmFsIGhhc2ggZnVuY3Rpb25zLgogICovCiB0eXBlZGVmIHN0cnVjdCByaGFzaF9jb250ZXh0CiB7Ci0JLyoqIFRoZSBzaXplIG9mIHRoZSBoYXNoZWQgbWVzc2FnZSAqLworCS8qKgorCSAqIFRoZSBzaXplIG9mIHRoZSBoYXNoZWQgbWVzc2FnZS4KKwkgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgbXNnX3NpemU7CiAKIAkvKioKLQkgKiBUaGUgYml0LW1hc2sgY29udGFpbmluZyBpZGVudGlmaWVycyBvZiB0aGUgaGFzaGVzIGJlaW5nIGNhbGN1bGF0ZWQKKwkgKiBUaGUgYml0LW1hc2sgY29udGFpbmluZyBpZGVudGlmaWVycyBvZiB0aGUgaGFzaGVzIGJlaW5nIGNhbGN1bGF0ZWQuCiAJICovCiAJdW5zaWduZWQgaGFzaF9pZDsKIH0gcmhhc2hfY29udGV4dDsKQEAgLTEwNywxMDkgKzEyMSwyODUgQEAKIHR5cGVkZWYgc3RydWN0IHJoYXNoX2NvbnRleHQqIHJoYXNoOwogI2VuZGlmIC8qIExJQlJIQVNIX1JIQVNIX0NUWF9ERUZJTkVEICovCiAKLS8qKiB0eXBlIG9mIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHBlcmlvZGljYWxseSB3aGlsZSBoYXNoaW5nIGEgZmlsZSAqLworLyoqCisgKiBUeXBlIG9mIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHBlcmlvZGljYWxseSB3aGlsZSBoYXNoaW5nIGEgZmlsZS4KKyAqLwogdHlwZWRlZiB2b2lkICgqcmhhc2hfY2FsbGJhY2tfdCkodm9pZCogZGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCk7CiAKLVJIQVNIX0FQSSB2b2lkIHJoYXNoX2xpYnJhcnlfaW5pdCh2b2lkKTsgLyogaW5pdGlhbGl6ZSBzdGF0aWMgZGF0YSAqLworLyoqCisgKiBJbml0aWFsaXplIHN0YXRpYyBkYXRhIG9mIHJoYXNoIGFsZ29yaXRobXMKKyAqLworUkhBU0hfQVBJIHZvaWQgcmhhc2hfbGlicmFyeV9pbml0KHZvaWQpOwogCi0vKiBoaS1sZXZlbCBoYXNoaW5nIGZ1bmN0aW9ucyAqLworCisvKiBISUdILUxFVkVMIExJQlJIQVNIIElOVEVSRkFDRSAqLworCisvKioKKyAqIENvbXB1dGUgYSBoYXNoIG9mIHRoZSBnaXZlbiBtZXNzYWdlLgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIGlkIG9mIGhhc2ggc3VtIHRvIGNvbXB1dGUKKyAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIHRvIHByb2Nlc3MKKyAqIEBwYXJhbSBsZW5ndGggbWVzc2FnZSBsZW5ndGgKKyAqIEBwYXJhbSByZXN1bHQgYnVmZmVyIHRvIHJlY2VpdmUgYmluYXJ5IGhhc2ggc3RyaW5nCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAqLwogUkhBU0hfQVBJIGludCByaGFzaF9tc2codW5zaWduZWQgaGFzaF9pZCwgY29uc3Qgdm9pZCogbWVzc2FnZSwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKLVJIQVNIX0FQSSBpbnQgcmhhc2hfZmlsZSh1bnNpZ25lZCBoYXNoX2lkLCBjb25zdCBjaGFyKiBmaWxlcGF0aCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKLVJIQVNIX0FQSSBpbnQgcmhhc2hfZmlsZV91cGRhdGUocmhhc2ggY3R4LCBGSUxFKiBmZCk7CiAKLSNpZmRlZiBfV0lOMzIgLyogd2luZG93cyBvbmx5IGZ1bmN0aW9uICovCisvKioKKyAqIENvbXB1dGUgYSBzaW5nbGUgaGFzaCBmb3IgZ2l2ZW4gZmlsZS4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCBpZCBvZiBoYXNoIHN1bSB0byBjb21wdXRlCisgKiBAcGFyYW0gZmlsZXBhdGggcGF0aCB0byB0aGUgZmlsZSB0byBoYXNoCisgKiBAcGFyYW0gcmVzdWx0IGJ1ZmZlciB0byByZWNlaXZlIGhhc2ggdmFsdWUgd2l0aCB0aGUgbG93ZXN0IHJlcXVlc3RlZCBpZAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yIGFuZCBlcnJubyBpcyBzZXQKKyAqLworUkhBU0hfQVBJIGludCByaGFzaF9maWxlKHVuc2lnbmVkIGhhc2hfaWQsIGNvbnN0IGNoYXIqIGZpbGVwYXRoLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOworCisjaWZkZWYgX1dJTjMyCisvKioKKyAqIENvbXB1dGUgYSBzaW5nbGUgaGFzaCBmb3IgZ2l2ZW4gZmlsZSAoV2luZG93cy1zcGVjaWZpYyBmdW5jdGlvbikuCisgKgorICogQHBhcmFtIGhhc2hfaWQgaWQgb2YgaGFzaCBzdW0gdG8gY29tcHV0ZQorICogQHBhcmFtIGZpbGVwYXRoIHBhdGggdG8gdGhlIGZpbGUgdG8gaGFzaAorICogQHBhcmFtIHJlc3VsdCBidWZmZXIgdG8gcmVjZWl2ZSBoYXNoIHZhbHVlIHdpdGggdGhlIGxvd2VzdCByZXF1ZXN0ZWQgaWQKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciwgLTEgb24gZXJyb3IgYW5kIGVycm5vIGlzIHNldAorICovCiBSSEFTSF9BUEkgaW50IHJoYXNoX3dmaWxlKHVuc2lnbmVkIGhhc2hfaWQsIGNvbnN0IHdjaGFyX3QqIGZpbGVwYXRoLCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwogI2VuZGlmCiAKLS8qIGxvLWxldmVsIGludGVyZmFjZSAqLwotUkhBU0hfQVBJIHJoYXNoIHJoYXNoX2luaXQodW5zaWduZWQgaGFzaF9pZCk7Ci0vKlJIQVNIX0FQSSByaGFzaCByaGFzaF9pbml0X2J5X2lkcyh1bnNpZ25lZCBoYXNoX2lkc1tdLCB1bnNpZ25lZCBjb3VudCk7Ki8KLVJIQVNIX0FQSSBpbnQgIHJoYXNoX3VwZGF0ZShyaGFzaCBjdHgsIGNvbnN0IHZvaWQqIG1lc3NhZ2UsIHNpemVfdCBsZW5ndGgpOwotUkhBU0hfQVBJIGludCAgcmhhc2hfZmluYWwocmhhc2ggY3R4LCB1bnNpZ25lZCBjaGFyKiBmaXJzdF9yZXN1bHQpOwotUkhBU0hfQVBJIHZvaWQgcmhhc2hfcmVzZXQocmhhc2ggY3R4KTsgLyogcmVpbml0aWFsaXplIHRoZSBjb250ZXh0ICovCi1SSEFTSF9BUEkgdm9pZCByaGFzaF9mcmVlKHJoYXNoIGN0eCk7CiAKLS8qIGFkZGl0aW9uYWwgbG8tbGV2ZWwgZnVuY3Rpb25zICovCi1SSEFTSF9BUEkgdm9pZCAgcmhhc2hfc2V0X2NhbGxiYWNrKHJoYXNoIGN0eCwgcmhhc2hfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCogY2FsbGJhY2tfZGF0YSk7Ci0KLS8qKiBiaXQtZmxhZzogZGVmYXVsdCBoYXNoIG91dHB1dCBmb3JtYXQgaXMgYmFzZTMyICovCi0jZGVmaW5lIFJIQVNIX0lORk9fQkFTRTMyIDEKKy8qIExPVy1MRVZFTCBMSUJSSEFTSCBJTlRFUkZBQ0UgKi8KIAogLyoqCi0gKiBJbmZvcm1hdGlvbiBhYm91dCBhIGhhc2ggZnVuY3Rpb24uCisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBSSGFzaCBjb250ZXh0IGZvciBjYWxjdWxhdGluZyBoYXNoKGVzKS4KKyAqIEFmdGVyIGluaXRpYWxpemluZyByaGFzaF91cGRhdGUoKS9yaGFzaF9maW5hbCgpIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZC4KKyAqIFRoZW4gdGhlIGNvbnRleHQgbXVzdCBiZSBmcmVlZCBieSBjYWxsaW5nIHJoYXNoX2ZyZWUoKS4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCB1bmlvbiBvZiBiaXQgZmxhZ3MsIGNvbnRhaW5pbmcgaWRzIG9mIGhhc2hlcyB0byBjYWxjdWxhdGUuCisgKiBAcmV0dXJuIGluaXRpYWxpemVkIHJoYXNoIGNvbnRleHQsIE5VTEwgb24gZXJyb3IgYW5kIGVycm5vIGlzIHNldAogICovCi10eXBlZGVmIHN0cnVjdCByaGFzaF9pbmZvCi17Ci0JLyoqIGhhc2ggZnVuY3Rpb24gaW5kZW50aWZpZXIgKi8KLQl1bnNpZ25lZCBoYXNoX2lkOwotCS8qKiBmbGFncyBiaXQtbWFzaywgaW5jbHVkaW5nIFJIQVNIX0lORk9fQkFTRTMyIGJpdCAqLwotCXVuc2lnbmVkIGZsYWdzOwotCS8qKiBzaXplIG9mIGJpbmFyeSBtZXNzYWdlIGRpZ2VzdCBpbiBieXRlcyAqLwotCXNpemVfdCBkaWdlc3Rfc2l6ZTsKLQljb25zdCBjaGFyKiBuYW1lOwotCWNvbnN0IGNoYXIqIG1hZ25ldF9uYW1lOwotfSByaGFzaF9pbmZvOworUkhBU0hfQVBJIHJoYXNoIHJoYXNoX2luaXQodW5zaWduZWQgaGFzaF9pZCk7CiAKLS8qIGluZm9ybWF0aW9uIGZ1bmN0aW9ucyAqLworLyoqCisgKiBDYWxjdWxhdGUgaGFzaGVzIG9mIG1lc3NhZ2UuCisgKiBDYW4gYmUgY2FsbGVkIHJlcGVhdGVkbHkgd2l0aCBjaHVua3Mgb2YgdGhlIG1lc3NhZ2UgdG8gYmUgaGFzaGVkLgorICoKKyAqIEBwYXJhbSBjdHggdGhlIHJoYXNoIGNvbnRleHQKKyAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgY2h1bmsKKyAqIEBwYXJhbSBsZW5ndGggbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGNodW5rCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzczsgT24gZmFpbCByZXR1cm4gLTEgYW5kIHNldCBlcnJubworICovCitSSEFTSF9BUEkgaW50IHJoYXNoX3VwZGF0ZShyaGFzaCBjdHgsIGNvbnN0IHZvaWQqIG1lc3NhZ2UsIHNpemVfdCBsZW5ndGgpOworCisvKioKKyAqIEhhc2ggYSBmaWxlIG9yIHN0cmVhbS4gTXVsdGlwbGUgaGFzaGVzIGNhbiBiZSBjb21wdXRlZC4KKyAqIEZpcnN0LCBpbmludGlhbGl6ZSBjdHggcGFyYW1ldGVyIHdpdGggcmhhc2hfaW5pdCgpIGJlZm9yZSBjYWxsaW5nCisgKiByaGFzaF9maWxlX3VwZGF0ZSgpLiBUaGVuIHVzZSByaGFzaF9maW5hbCgpIGFuZCByaGFzaF9wcmludCgpCisgKiB0byByZXRyaXZlIGhhc2ggdmFsdWVzLiBGaW5hbHkgY2FsbCByaGFzaF9mcmVlKCkgb24gY3R4CisgKiB0byBmcmVlIGFsbG9jYXRlZCBtZW1vcnkgb3IgY2FsbCByaGFzaF9yZXNldCgpIHRvIHJldXNlIGN0eC4KKyAqCisgKiBAcGFyYW0gY3R4IHJoYXNoIGNvbnRleHQKKyAqIEBwYXJhbSBmZCBkZXNjcmlwdG9yIG9mIHRoZSBmaWxlIHRvIGhhc2gKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciBhbmQgZXJybm8gaXMgc2V0CisgKi8KK1JIQVNIX0FQSSBpbnQgcmhhc2hfZmlsZV91cGRhdGUocmhhc2ggY3R4LCBGSUxFKiBmZCk7CisKKy8qKgorICogRmluYWxpemUgaGFzaCBjYWxjdWxhdGlvbiBhbmQgb3B0aW9uYWxseSBzdG9yZSB0aGUgZmlyc3QgaGFzaC4KKyAqCisgKiBAcGFyYW0gY3R4IHRoZSByaGFzaCBjb250ZXh0CisgKiBAcGFyYW0gZmlyc3RfcmVzdWx0IG9wdGlvbmFsIGJ1ZmZlciB0byBzdG9yZSBhIGNhbGN1bGF0ZWQgaGFzaCB3aXRoIHRoZSBsb3dlc3QgYXZhaWxhYmxlIGlkCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzczsgT24gZmFpbCByZXR1cm4gLTEgYW5kIHNldCBlcnJubworICovCitSSEFTSF9BUEkgaW50IHJoYXNoX2ZpbmFsKHJoYXNoIGN0eCwgdW5zaWduZWQgY2hhciogZmlyc3RfcmVzdWx0KTsKKworLyoqCisgKiBSZS1pbml0aWFsaXplIFJIYXNoIGNvbnRleHQgdG8gcmV1c2UgaXQuCisgKiBVc2VmdWwgdG8gc3BlZWQgdXAgcHJvY2Vzc2luZyBvZiBtYW55IHNtYWxsIG1lc3NhZ2VzLgorICoKKyAqIEBwYXJhbSBjdHggY29udGV4dCB0byByZWluaXRpYWxpemUKKyAqLworUkhBU0hfQVBJIHZvaWQgcmhhc2hfcmVzZXQocmhhc2ggY3R4KTsKKworLyoqCisgKiBGcmVlIFJIYXNoIGNvbnRleHQgbWVtb3J5LgorICoKKyAqIEBwYXJhbSBjdHggdGhlIGNvbnRleHQgdG8gZnJlZS4KKyAqLworUkhBU0hfQVBJIHZvaWQgcmhhc2hfZnJlZShyaGFzaCBjdHgpOworCisvKioKKyAqIFNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZyb20gdGhlCisgKiByaGFzaF9maWxlKCkgYW5kIHJoYXNoX2ZpbGVfdXBkYXRlKCkgZnVuY3Rpb25zCisgKiBvbiBwcm9jZXNzaW5nIGV2ZXJ5IGZpbGUgYmxvY2suIFRoZSBmaWxlIGJsb2NrCisgKiBzaXplIGlzIHNldCBpbnRlcm5hbGx5IGJ5IHJoYXNoIGFuZCBub3cgaXMgOCBLaUIuCisgKgorICogQHBhcmFtIGN0eCByaGFzaCBjb250ZXh0CisgKiBAcGFyYW0gY2FsbGJhY2sgcG9pbnRlciB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAqIEBwYXJhbSBjYWxsYmFja19kYXRhIHBvaW50ZXIgdG8gZGF0YSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCisgKi8KK1JIQVNIX0FQSSB2b2lkICByaGFzaF9zZXRfY2FsbGJhY2socmhhc2ggY3R4LCByaGFzaF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkKiBjYWxsYmFja19kYXRhKTsKKworCisvKiBJTkZPUk1BVElPTiBGVU5DVElPTlMgKi8KKworLyoqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtcy4KKyAqCisgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGhhc2ggZnVuY3Rpb25zCisgKi8KIFJIQVNIX0FQSSBpbnQgIHJoYXNoX2NvdW50KHZvaWQpOyAvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIGhhc2hlcyAqLworCisvKioKKyAqIFJldHVybnMgc2l6ZSBvZiBiaW5hcnkgZGlnZXN0IGZvciBnaXZlbiBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KKyAqIEByZXR1cm4gZGlnZXN0IHNpemUgaW4gYnl0ZXMKKyAqLwogUkhBU0hfQVBJIGludCAgcmhhc2hfZ2V0X2RpZ2VzdF9zaXplKHVuc2lnbmVkIGhhc2hfaWQpOyAvKiBzaXplIG9mIGJpbmFyeSBtZXNzYWdlIGRpZ2VzdCAqLworCisvKioKKyAqIFJldHVybnMgbGVuZ3RoIG9mIGRpZ2VzdCBoYXNoIHN0cmluZyBpbiBkZWZhdWx0IG91dHB1dCBmb3JtYXQuCisgKgorICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCisgKiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgaGFzaCBzdHJpbmcKKyAqLwogUkhBU0hfQVBJIGludCAgcmhhc2hfZ2V0X2hhc2hfbGVuZ3RoKHVuc2lnbmVkIGhhc2hfaWQpOyAvKiBsZW5ndGggb2YgZm9ybWF0dGVkIGhhc2ggc3RyaW5nICovCisKKy8qKgorICogRGV0ZWN0IGRlZmF1bHQgZGlnZXN0IG91dHB1dCBmb3JtYXQgZm9yIGdpdmVuIGhhc2ggYWxnb3JpdGhtLgorICoKKyAqIEBwYXJhbSBoYXNoX2lkIHRoZSBpZCBvZiBoYXNoIGFsZ29yaXRobQorICogQHJldHVybiAxIGZvciBiYXNlMzIgZm9ybWF0LCAwIGZvciBoZXhhZGVjaW1hbAorICovCiBSSEFTSF9BUEkgaW50ICByaGFzaF9pc19iYXNlMzIodW5zaWduZWQgaGFzaF9pZCk7IC8qIGRlZmF1bHQgZGlnZXN0IG91dHB1dCBmb3JtYXQgKi8KKworLyoqCisgKiBSZXR1cm5zIGEgbmFtZSBvZiBnaXZlbiBoYXNoIGFsZ29yaXRobS4KKyAqCisgKiBAcGFyYW0gaGFzaF9pZCB0aGUgaWQgb2YgaGFzaCBhbGdvcml0aG0KKyAqIEByZXR1cm4gYWxnb3JpdGhtIG5hbWUKKyAqLwogUkhBU0hfQVBJIGNvbnN0IGNoYXIqIHJoYXNoX2dldF9uYW1lKHVuc2lnbmVkIGhhc2hfaWQpOyAvKiBnZXQgaGFzaCBmdW5jdGlvbiBuYW1lICovCisKKy8qKgorICogUmV0dXJucyBhIG5hbWUgcGFydCBvZiBtYWduZXQgdXJuIG9mIHRoZSBnaXZlbiBoYXNoIGFsZ29yaXRobS4KKyAqIFN1Y2ggbWFnbmV0X25hbWUgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIG1hZ25ldCBsaW5rIG9mIHRoZSBmb3JtCisgKiB1cm46Jmx0O21hZ25ldF9uYW1lJmd0Oz0mbHQ7aGFzaF92YWx1ZSZndDsuCisgKgorICogQHBhcmFtIGhhc2hfaWQgdGhlIGlkIG9mIGhhc2ggYWxnb3JpdGhtCisgKiBAcmV0dXJuIG5hbWUKKyAqLwogUkhBU0hfQVBJIGNvbnN0IGNoYXIqIHJoYXNoX2dldF9tYWduZXRfbmFtZSh1bnNpZ25lZCBoYXNoX2lkKTsgLyogZ2V0IG5hbWUgcGFydCBvZiBtYWduZXQgdXJuICovCiAKLS8qIG5vdGUsIHRoYXQgcmhhc2hfaW5mb19ieV9pZCgpIGlzIG5vdCBleHBvcnRlZCB0byBhIHNoYXJlZCBsaWJyYXJ5IG9yIERMTCAqLwotY29uc3Qgcmhhc2hfaW5mbyogcmhhc2hfaW5mb19ieV9pZCh1bnNpZ25lZCBoYXNoX2lkKTsgLyogZ2V0IGhhc2ggc3VtIGluZm8gYnkgaGFzaCBpZCAqLworLyogSEFTSCBTVU0gT1VUUFVUIElOVEVSRkFDRSAqLwogCiAjaWYgMAogLyoqCi0gKiBGbGFncyBmb3IgcHJpbnRpbmcgYSBoYXNoIHN1bQorICogRmxhZ3MgZm9yIHByaW50aW5nIGEgaGFzaCBzdW0uCiAgKi8KIGVudW0gcmhhc2hfcHJpbnRfc3VtX2ZsYWdzCiB7Ci0JLyoqIHByaW50IGluIGEgZGVmYXVsdCBmb3JtYXQgKi8KKwkvKgorCSAqIFByaW50IGluIGEgZGVmYXVsdCBmb3JtYXQKKwkgKi8KIAlSSFBSX0RFRkFVTFQgICA9IDB4MCwKLQkvKiogb3V0cHV0IGFzIGJpbmFyeSBtZXNzYWdlIGRpZ2VzdCAqLworCS8qCisJICogT3V0cHV0IGFzIGJpbmFyeSBtZXNzYWdlIGRpZ2VzdAorCSAqLwogCVJIUFJfUkFXICAgICAgID0gMHgxLAotCS8qKiBwcmludCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZyAqLworCS8qCisJICogUHJpbnQgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcKKwkgKi8KIAlSSFBSX0hFWCAgICAgICA9IDB4MiwKLQkvKiogcHJpbnQgYXMgYSBiYXNlMzItZW5jb2RlZCBzdHJpbmcgKi8KKwkvKgorCSAqIFByaW50IGFzIGEgYmFzZTMyLWVuY29kZWQgc3RyaW5nCisJICovCiAJUkhQUl9CQVNFMzIgICAgPSAweDMsCi0JLyoqIHByaW50IGFzIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nICovCisJLyoKKwkgKiBQcmludCBhcyBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZworCSAqLwogCVJIUFJfQkFTRTY0ICAgID0gMHg0LAotCi0JLyoqCisJLyoKIAkgKiBQcmludCBhcyBhbiB1cHBlcmNhc2Ugc3RyaW5nLiBDYW4gYmUgdXNlZAogCSAqIGZvciBiYXNlMzIgb3IgaGV4YWRlY2ltYWwgZm9ybWF0IG9ubHkuCiAJICovCiAJUkhQUl9VUFBFUkNBU0UgPSAweDgsCi0KLQkvKioKKwkvKgogCSAqIFJldmVyc2UgaGFzaCBieXRlcy4gQ2FuIGJlIHVzZWQgZm9yIEdPU1QgaGFzaC4KIAkgKi8KIAlSSFBSX1JFVkVSU0UgICA9IDB4MTAsCi0KLQkvKiogZG9uJ3QgcHJpbnQgJ21hZ25ldDo/JyBwcmVmaXggaW4gcmhhc2hfcHJpbnRfbWFnbmV0ICovCisJLyoKKwkgKiBEb24ndCBwcmludCAnbWFnbmV0Oj8nIHByZWZpeCBpbiByaGFzaF9wcmludF9tYWduZXQKKwkgKi8KIAlSSFBSX05PX01BR05FVCAgPSAweDIwLAotCS8qKiBwcmludCBmaWxlIHNpemUgaW4gcmhhc2hfcHJpbnRfbWFnbmV0ICovCisJLyoKKwkgKiBQcmludCBmaWxlIHNpemUgaW4gcmhhc2hfcHJpbnRfbWFnbmV0CisJICovCiAJUkhQUl9GSUxFU0laRSAgPSAweDQwLAorCS8qCisJICogUHJpbnQgYXMgVVJMLWVuY29kZWQgc3RyaW5nCisJICovCisJUkhQUl9VUkxFTkNPREUgID0gMHg4MAogfTsKICNlbmRpZgogCi0vKiBvdXRwdXQgaGFzaCBpbnRvIHRoZSBnaXZlbiBidWZmZXIgKi8KKworLyoqCisgKiBQcmludCBhIHRleHQgcHJlc2VudGF0aW9uIG9mIGEgZ2l2ZW4gaGFzaCBzdW0gdG8gdGhlIHNwZWNpZmllZCBidWZmZXIuCisgKgorICogQHBhcmFtIG91dHB1dCBhIGJ1ZmZlciB0byBwcmludCB0aGUgaGFzaCB0bworICogQHBhcmFtIGJ5dGVzIGEgaGFzaCBzdW0gdG8gcHJpbnQKKyAqIEBwYXJhbSBzaXplIGEgc2l6ZSBvZiBoYXNoIHN1bSBpbiBieXRlcworICogQHBhcmFtIGZsYWdzICBhIGJpdC1tYXNrIGNvbnRyb2xsaW5nIGhvdyB0byBmb3JtYXQgdGhlIGhhc2ggc3VtLAorICogICAgICAgICAgICAgICBjYW4gYmUgYSBtaXggb2YgdGhlIGZsYWdzOiBSSFBSX1JBVywgUkhQUl9IRVgsIFJIUFJfQkFTRTMyLAorICogICAgICAgICAgICAgICBSSFBSX0JBU0U2NCwgUkhQUl9VUkxFTkNPREUsIFJIUFJfVVBQRVJDQVNFLCBSSFBSX1JFVkVSU0UKKyAqIEByZXR1cm4gdGhlIG51bWJlciBvZiB3cml0dGVuIGNoYXJhY3RlcnMKKyAqLwogUkhBU0hfQVBJIHNpemVfdCByaGFzaF9wcmludF9ieXRlcyhjaGFyKiBvdXRwdXQsCiAJY29uc3QgdW5zaWduZWQgY2hhciogYnl0ZXMsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwogCisvKioKKyAqIFByaW50IHRleHQgcHJlc2VudGF0aW9uIG9mIGEgaGFzaCBzdW0gd2l0aCBnaXZlbiBoYXNoX2lkIHRvIHRoZSBzcGVjaWZpZWQKKyAqIG91dHB1dCBidWZmZXIuIElmIHRoZSBoYXNoX2lkIGlzIHplcm8sIHRoZW4gcHJpbnQgdGhlIGhhc2ggc3VtIHdpdGgKKyAqIHRoZSBsb3dlc3QgaWQgc3RvcmVkIGluIHRoZSBoYXNoIGNvbnRleHQuCisgKiBUaGUgZnVuY3Rpb24gY2FsbCBmYWlscyBpZiB0aGUgY29udGV4dCBkb2Vzbid0IGluY2x1ZGUgYSBoYXNoIHdpdGggdGhlCisgKiBnaXZlbiBoYXNoX2lkLgorICoKKyAqIEBwYXJhbSBvdXRwdXQgYSBidWZmZXIgdG8gcHJpbnQgdGhlIGhhc2ggdG8KKyAqIEBwYXJhbSBjdHggICAgYWxnb3JpdGhtcyBzdGF0ZQorICogQHBhcmFtIGhhc2hfaWQgaWQgb2YgdGhlIGhhc2ggc3VtIHRvIHByaW50IG9yIDAgdG8gcHJpbnQgdGhlIGZpcnN0IGhhc2gKKyAqICAgICAgICAgICAgICAgIHNhdmVkIGluIHRoZSBjb250ZXh0LgorICogQHBhcmFtIGZsYWdzICBhIGJpdG1hc2sgY29udHJvbGxpbmcgaG93IHRvIHByaW50IHRoZSBoYXNoLiBDYW4gY29udGFpbiBmbGFncworICogICAgICAgICAgICAgICBSSFBSX1VQUEVSQ0FTRSwgUkhQUl9IRVgsIFJIUFJfQkFTRTMyLCBSSFBSX0JBU0U2NCwgZXRjLgorICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gY2hhcmFjdGVycyBvbiBzdWNjZXNzIG9yIDAgb24gZmFpbAorICovCiBSSEFTSF9BUEkgc2l6ZV90IHJoYXNoX3ByaW50KGNoYXIqIG91dHB1dCwgcmhhc2ggY3R4LCB1bnNpZ25lZCBoYXNoX2lkLAogCWludCBmbGFncyk7CiAKLS8qIG91dHB1dCBtYWduZXQgVVJMIGludG8gdGhlIGdpdmVuIGJ1ZmZlciAqLworLyoqCisgKiBQcmludCBtYWduZXQgbGluayB3aXRoIGdpdmVuIGZpbGVwYXRoIGFuZCBjYWxjdWxhdGVkIGhhc2ggc3VtcyBpbnRvIHRoZQorICogb3V0cHV0IGJ1ZmZlci4gVGhlIGhhc2hfbWFzayBjYW4gbGltaXQgd2hpY2ggaGFzaCB2YWx1ZXMgd2lsbCBiZSBwcmludGVkLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIHJlcXVpcmVkIGJ1ZmZlci4KKyAqIElmIG91dHB1dCBpcyBOVUxMIHRoZSAuCisgKgorICogQHBhcmFtIG91dHB1dCBhIHN0cmluZyBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgbWFnbmV0IGxpbmsgb3IgTlVMTAorICogQHBhcmFtIGZpbGVwYXRoIHRoZSBmaWxlIHBhdGggdG8gYmUgcHJpbnRlZCBvciBOVUxMCisgKiBAcGFyYW0gY29udGV4dCBhbGdvcml0aG1zIHN0YXRlCisgKiBAcGFyYW0gaGFzaF9tYXNrIGJpdCBtYXNrIG9mIHRoZSBoYXNoIHN1bXMgdG8gYWRkIHRvIHRoZSBsaW5rCisgKiBAcGFyYW0gZmxhZ3MgICBjYW4gYmUgY29tYmluYXRpb24gb2YgYml0cyBSSFBSX1VQUEVSQ0FTRSwgUkhQUl9OT19NQUdORVQsCisgKiAgICAgICAgICAgICAgICBSSFBSX0ZJTEVTSVpFCisgKiBAcmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGNoYXJhY3RlcnMsIGluY2x1ZGluZyB0ZXJtaW5hdGluZyAnXDAnIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbAorICovCiBSSEFTSF9BUEkgc2l6ZV90IHJoYXNoX3ByaW50X21hZ25ldChjaGFyKiBvdXRwdXQsIGNvbnN0IGNoYXIqIGZpbGVwYXRoLAogCXJoYXNoIGNvbnRleHQsIHVuc2lnbmVkIGhhc2hfbWFzaywgaW50IGZsYWdzKTsKIAotLyogbWFjcm9zIGZvciBtZXNzYWdlIEFQSSAqLwogCi0vKiogVGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIHBvaW50ZXIgKi8KKy8qIE1FU1NBR0UgQVBJICovCisKKy8qKgorICogVGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIHBvaW50ZXIuCisgKi8KICNpZiBkZWZpbmVkKFVJTlRQVFJfTUFYKQogdHlwZWRlZiB1aW50cHRyX3Qgcmhhc2hfdXB0cl90OwogI2VsaWYgZGVmaW5lZChfTFA2NCkgfHwgZGVmaW5lZChfX0xQNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NCkgfHwgXApAQCAtMjE5LDE0ICs0MDksMjggQEAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyByaGFzaF91cHRyX3Q7CiAjZW5kaWYKIAotLyoqIFRoZSB2YWx1ZSByZXR1cm5lZCBieSByaGFzaF90cmFuc21pdCBvbiBlcnJvciAqLworLyoqCisgKiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgcmhhc2hfdHJhbnNtaXQgb24gZXJyb3IuCisgKi8KICNkZWZpbmUgUkhBU0hfRVJST1IgKChyaGFzaF91cHRyX3QpLTEpCi0vKiogQ29udmVydCBhIHBvaW50ZXIgdG8gcmhhc2hfdXB0cl90ICovCisvKioKKyAqIENvbnZlcnQgYSBwb2ludGVyIHRvIHJoYXNoX3VwdHJfdC4KKyAqLwogI2RlZmluZSBSSEFTSF9TVFIyVVBUUihzdHIpICgocmhhc2hfdXB0cl90KShjaGFyKikoc3RyKSkKLS8qKiBDb252ZXJ0IGEgcmhhc2hfdXB0cl90IHRvIGEgdm9pZCogcG9pbnRlciAqLwotI2RlZmluZSBSSEFTSF9VUFRSMlBWT0lEKHUpICgodm9pZCopKChjaGFyKikwICsgKHUpKSkKKy8qKgorICogQ29udmVydCBhIHJoYXNoX3VwdHJfdCB0byBhIHZvaWQqIHBvaW50ZXIuCisgKi8KKyNkZWZpbmUgUkhBU0hfVVBUUjJQVk9JRCh1KSAoKHZvaWQqKSgodSkgKyAwKSkKIAotLyogcmhhc2ggQVBJIHRvIHNldC9nZXQgZGF0YSB2aWEgbWVzc2FnZXMgKi8KKy8qKgorICogUHJvY2VzcyBhIHJoYXNoIG1lc3NhZ2UuCisgKgorICogQHBhcmFtIG1zZ19pZCBtZXNzYWdlIGlkZW50aWZpZXIKKyAqIEBwYXJhbSBkc3QgbWVzc2FnZSBkZXN0aW5hdGlvbiAoY2FuIGJlIE5VTEwgZm9yIGdlbmVyaWMgbWVzc2FnZXMpCisgKiBAcGFyYW0gbGRhdGEgZGF0YSBkZXBlbmRpbmcgb24gbWVzc2FnZQorICogQHBhcmFtIHJkYXRhIGRhdGEgZGVwZW5kaW5nIG9uIG1lc3NhZ2UKKyAqIEByZXR1cm4gbWVzc2FnZS1zcGVjaWZpYyBkYXRhCisgKi8KIFJIQVNIX0FQSSByaGFzaF91cHRyX3Qgcmhhc2hfdHJhbnNtaXQoCiAJdW5zaWduZWQgbXNnX2lkLCB2b2lkKiBkc3QsIHJoYXNoX3VwdHJfdCBsZGF0YSwgcmhhc2hfdXB0cl90IHJkYXRhKTsKIApAQCAtMjM5LDIyICs0NDMsMzIgQEAKICNkZWZpbmUgUk1TR19TRVRfQVVUT0ZJTkFMIDUKICNkZWZpbmUgUk1TR19TRVRfT1BFTlNTTF9NQVNLIDEwCiAjZGVmaW5lIFJNU0dfR0VUX09QRU5TU0xfTUFTSyAxMQorI2RlZmluZSBSTVNHX0dFVF9PUEVOU1NMX1NVUFBPUlRFRF9NQVNLIDEyCisjZGVmaW5lIFJNU0dfR0VUX09QRU5TU0xfQVZBSUxBQkxFX01BU0sgMTMKIAotLyogaGVscGVyIG1hY3JvcyAqLworLyogSEVMUEVSIE1BQ1JPUyAqLwogCi0vKiogR2V0IGEgcG9pbnRlciB0byBjb250ZXh0IG9mIHRoZSBzcGVjaWZpZWQgaGFzaCBmdW5jdGlvbiAqLworLyoqCisgKiBHZXQgYSBwb2ludGVyIHRvIGNvbnRleHQgb2YgdGhlIHNwZWNpZmllZCBoYXNoIGZ1bmN0aW9uLgorICovCiAjZGVmaW5lIHJoYXNoX2dldF9jb250ZXh0X3B0cihjdHgsIGhhc2hfaWQpIFJIQVNIX1VQVFIyUFZPSUQocmhhc2hfdHJhbnNtaXQoUk1TR19HRVRfQ09OVEVYVCwgY3R4LCBoYXNoX2lkLCAwKSkKLS8qKiBDYW5jZWwgaGFzaCBjYWxjdWxhdGlvbiBvZiBhIGZpbGUgKi8KKy8qKgorICogQ2FuY2VsIGhhc2ggY2FsY3VsYXRpb24gb2YgYSBmaWxlLgorICovCiAjZGVmaW5lIHJoYXNoX2NhbmNlbChjdHgpIHJoYXNoX3RyYW5zbWl0KFJNU0dfQ0FOQ0VMLCBjdHgsIDAsIDApCi0vKiogUmV0dXJuIG5vbi16ZXJvIGlmIGhhc2ggY2FsY3VsYXRpb24gd2FzIGNhbmNlbGVkLCB6ZXJvIG90aGVyd2lzZSAqLworLyoqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgaGFzaCBjYWxjdWxhdGlvbiB3YXMgY2FuY2VsZWQsIHplcm8gb3RoZXJ3aXNlLgorICovCiAjZGVmaW5lIHJoYXNoX2lzX2NhbmNlbGVkKGN0eCkgcmhhc2hfdHJhbnNtaXQoUk1TR19JU19DQU5DRUxFRCwgY3R4LCAwLCAwKQotLyoqIFJldHVybiBub24temVybyBpZiByaGFzaF9maW5hbCB3YXMgY2FsbGVkIGZvciByaGFzaF9jb250ZXh0ICovCisvKioKKyAqIFJldHVybiBub24temVybyBpZiByaGFzaF9maW5hbCB3YXMgY2FsbGVkIGZvciByaGFzaF9jb250ZXh0LgorICovCiAjZGVmaW5lIHJoYXNoX2dldF9maW5hbGl6ZWQoY3R4KSByaGFzaF90cmFuc21pdChSTVNHX0dFVF9GSU5BTElaRUQsIGN0eCwgMCwgMCkKIAogLyoqCiAgKiBUdXJuIG9uL29mZiB0aGUgYXV0by1maW5hbCBmbGFnIGZvciB0aGUgZ2l2ZW4gcmhhc2hfY29udGV4dC4gQnkgZGVmYXVsdAogICogYXV0by1maW5hbCBpcyBvbiwgd2hpY2ggbWVhbnMgcmhhc2hfZmluYWwgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHksIGlmCi0gKiBuZWVkZWQgd2hlbiBhIGhhc2ggdmFsdWUgaXMgcmV0cml2ZWQgYnkgcmhhc2hfcHJpbnQgY2FsbC4KKyAqIG5lZWRlZCB3aGVuIGEgaGFzaCB2YWx1ZSBpcyByZXRyaWV2ZWQgYnkgcmhhc2hfcHJpbnQgY2FsbC4KICAqLwogI2RlZmluZSByaGFzaF9zZXRfYXV0b2ZpbmFsKGN0eCwgb24pIHJoYXNoX3RyYW5zbWl0KFJNU0dfU0VUX0FVVE9GSU5BTCwgY3R4LCBvbiwgMCkKIApAQCAtMjY3LDE5ICs0ODEsMzYgQEAKICNkZWZpbmUgcmhhc2hfc2V0X29wZW5zc2xfbWFzayhtYXNrKSByaGFzaF90cmFuc21pdChSTVNHX1NFVF9PUEVOU1NMX01BU0ssIE5VTEwsIG1hc2ssIDApCiAKIC8qKgotICogUmV0dXJuIGN1cnJlbnQgYml0LW1hc2sgb2YgaGFzaCBhbGdvcml0aG1zIHNlbGVjdGVkIHRvIGJlIGNhbGN1bGF0ZWQKLSAqIGJ5IE9wZW5TU0wgbGlicmFyeS4KKyAqIFJldHVybiBjdXJyZW50IGJpdC1tYXNrIG9mIGhhc2ggYWxnb3JpdGhtcyBzZWxlY3RlZCB0byBiZSBjYWxjdWxhdGVkIGJ5IE9wZW5TU0wKKyAqIGxpYnJhcnkuIFJldHVybiBSSEFTSF9FUlJPUiBpZiBMaWJSSGFzaCBpcyBjb21waWxlZCB3aXRob3V0IE9wZW5TU0wgc3VwcG9ydC4KICAqLwogI2RlZmluZSByaGFzaF9nZXRfb3BlbnNzbF9tYXNrKCkgcmhhc2hfdHJhbnNtaXQoUk1TR19HRVRfT1BFTlNTTF9NQVNLLCBOVUxMLCAwLCAwKQogCi0vKiogVGhlIGJpdCBtYXNrIG9mIGhhc2ggYWxnb3JpdGhtcyBpbXBsZW1lbnRlZCBieSBPcGVuU1NMICovCi0jaWYgZGVmaW5lZChVU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChPUEVOU1NMX1JVTlRJTUUpCi0jIGRlZmluZSBSSEFTSF9PUEVOU1NMX1NVUFBPUlRFRF9IQVNIRVMgKFJIQVNIX01ENCB8IFJIQVNIX01ENSB8IFwKLQlSSEFTSF9TSEExIHwgUkhBU0hfU0hBMjI0IHwgUkhBU0hfU0hBMjU2IHwgUkhBU0hfU0hBMzg0IHwgXAotCVJIQVNIX1NIQTUxMiB8IFJIQVNIX1JJUEVNRDE2MCB8IFJIQVNIX1dISVJMUE9PTCkKLSNlbHNlCi0jIGRlZmluZSBSSEFTSF9PUEVOU1NMX1NVUFBPUlRFRF9IQVNIRVMgMAotI2VuZGlmCisvKioKKyAqIFJldHVybiB0aGUgYml0LW1hc2sgb2YgYWxnb3JpdGhtcyB0aGF0IGNhbiBiZSBwcm92aWRlZCBieSB0aGUgT3BlblNTTCBwbHVnaW4sCisgKiBpZiB0aGUgbGlicmFyeSBpcyBjb21waWxlZCB3aXRoIE9wZW5TU0wgc3VwcG9ydCwgMCBvdGhlcndpc2UuIFRoaXMgYml0LW1hc2sgaXMKKyAqIGEgY29uc3RhbnQgdmFsdWUgY29tcHV0ZWQgYXQgY29tcGlsZS10aW1lLgorICovCisjZGVmaW5lIHJoYXNoX2dldF9vcGVuc3NsX3N1cHBvcnRlZF9tYXNrKCkgcmhhc2hfdHJhbnNtaXQoUk1TR19HRVRfT1BFTlNTTF9TVVBQT1JURURfTUFTSywgTlVMTCwgMCwgMCkKKworLyoqCisgKiBSZXR1cm4gdGhlIGJpdC1tYXNrIG9mIGFsZ29yaXRobXMgdGhhdCBhcmUgc3VjY2Vzc2Z1bGx5IGxvYWRlZCBmcm9tCisgKiBPcGVuU1NMIGxpYnJhcnkuIElmIHRoZSBsaWJyYXJ5IGlzIG5vdCBsb2FkZWQgb3Igbm90IHN1cHBvcnRlZCBieSBMaWJSSGFzaCwKKyAqIHRoZW4gcmV0dXJuIDAuCisgKi8KKyNkZWZpbmUgcmhhc2hfZ2V0X29wZW5zc2xfYXZhaWxhYmxlX21hc2soKSByaGFzaF90cmFuc21pdChSTVNHX0dFVF9PUEVOU1NMX0FWQUlMQUJMRV9NQVNLLCBOVUxMLCAwLCAwKQorCisKKy8qKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIExpYlJIYXNoIGhhc2ggYmVlbiBjb21waWxlZCB3aXRoIE9wZW5TU0wgc3VwcG9ydCwKKyAqIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworI2RlZmluZSByaGFzaF9pc19vcGVuc3NsX3N1cHBvcnRlZCgpIChyaGFzaF9nZXRfb3BlbnNzbF9tYXNrKCkgIT0gUkhBU0hfRVJST1IpCisKKy8qKgorICogTGVnYWN5IG1hY3JvLiBUaGUgYml0IG1hc2sgb2YgaGFzaCBhbGdvcml0aG1zIGltcGxlbWVudGVkIGJ5IE9wZW5TU0wuCisgKi8KKyMgZGVmaW5lIFJIQVNIX09QRU5TU0xfU1VQUE9SVEVEX0hBU0hFUyAocmhhc2hfZ2V0X29wZW5zc2xfc3VwcG9ydGVkX21hc2soKSkKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9IC8qIGV4dGVybiAiQyIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTEuYyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTEuYwppbmRleCBmNWEwNTNiLi5iMjI2OTI1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGExLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMS5jCkBAIC0xLDE4ICsxLDE4IEBACiAvKiBzaGExLmMgLSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBTZWN1cmUgSGFzaCBBbGdvcml0aG0gMSAoU0hBMSkKICAqIGJhc2VkIG9uIFJGQyAzMTc0LgogICoKLSAqIENvcHlyaWdodDogMjAwOC0yMDEyIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCAgZnJlZSBvZiBjaGFyZ2UsICB0byBhbnkgcGVyc29uICBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvICB1c2UsIGNvcHksIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogICoKLSAqIFRoaXMgcHJvZ3JhbSAgaXMgIGRpc3RyaWJ1dGVkICBpbiAgdGhlICBob3BlICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBVc2UgdGhpcyBwcm9ncmFtICBhdCAgeW91ciBvd24gcmlzayEKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCisgKiBMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorICogT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMjQsNyArMjQsNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfc2hhMV9pbml0KHNoYTFfY3R4ICpjdHgpCit2b2lkIHJoYXNoX3NoYTFfaW5pdChzaGExX2N0eCogY3R4KQogewogCWN0eC0+bGVuZ3RoID0gMDsKIApAQCAtMTIxLDcgKzEyMSw3IEBACiAgKiBAcGFyYW0gbXNnIG1lc3NhZ2UgY2h1bmsKICAqIEBwYXJhbSBzaXplIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBjaHVuawogICovCi12b2lkIHJoYXNoX3NoYTFfdXBkYXRlKHNoYTFfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpCit2b2lkIHJoYXNoX3NoYTFfdXBkYXRlKHNoYTFfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpCiB7CiAJdW5zaWduZWQgaW5kZXggPSAodW5zaWduZWQpY3R4LT5sZW5ndGggJiA2MzsKIAljdHgtPmxlbmd0aCArPSBzaXplOwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgKiBAcGFyYW0gY3R4IHRoZSBhbGdvcml0aG0gY29udGV4dCBjb250YWluaW5nIGN1cnJlbnQgaGFzaGluZyBzdGF0ZQogICogQHBhcmFtIHJlc3VsdCBjYWxjdWxhdGVkIGhhc2ggaW4gYmluYXJ5IGZvcm0KICAqLwotdm9pZCByaGFzaF9zaGExX2ZpbmFsKHNoYTFfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKK3ZvaWQgcmhhc2hfc2hhMV9maW5hbChzaGExX2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCiB7CiAJdW5zaWduZWQgIGluZGV4ID0gKHVuc2lnbmVkKWN0eC0+bGVuZ3RoICYgNjM7CiAJdW5zaWduZWQqIG1zZzMyID0gKHVuc2lnbmVkKiljdHgtPm1lc3NhZ2U7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGExLmggYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGExLmgKaW5kZXggNzRiMmY5NC4uN2U5OTU0MiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMS5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTEuaApAQCAtMjAsOSArMjAsOSBAQAogCiAvKiBoYXNoIGZ1bmN0aW9ucyAqLwogCi12b2lkIHJoYXNoX3NoYTFfaW5pdChzaGExX2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfc2hhMV91cGRhdGUoc2hhMV9jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSk7Ci12b2lkIHJoYXNoX3NoYTFfZmluYWwoc2hhMV9jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKK3ZvaWQgcmhhc2hfc2hhMV9pbml0KHNoYTFfY3R4KiBjdHgpOwordm9pZCByaGFzaF9zaGExX3VwZGF0ZShzaGExX2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKTsKK3ZvaWQgcmhhc2hfc2hhMV9maW5hbChzaGExX2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0gLyogZXh0ZXJuICJDIiAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMjU2LmMgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEyNTYuYwppbmRleCBhZjViMGZlLi4yMWE2OWFhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEyNTYuYworKysgYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEyNTYuYwpAQCAtMSwxOCArMSwxOCBAQAogLyogc2hhMjU2LmMgLSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBTSEEtMjU2LzIyNCBoYXNoIGZ1bmN0aW9ucwogICogYmFzZWQgb24gRklQUyAxODAtMyAoRmVkZXJhbCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIFN0YW5kYXJ0KS4KICAqCi0gKiBDb3B5cmlnaHQ6IDIwMTAtMjAxMiBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTY1LDcgKzY1LDcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX3NoYTI1Nl9pbml0KHNoYTI1Nl9jdHggKmN0eCkKK3ZvaWQgcmhhc2hfc2hhMjU2X2luaXQoc2hhMjU2X2N0eCogY3R4KQogewogCS8qIEluaXRpYWwgdmFsdWVzLiBUaGVzZSB3b3JkcyB3ZXJlIG9idGFpbmVkIGJ5IHRha2luZyB0aGUgZmlyc3QgMzIKIAkgKiBiaXRzIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnRzIG9mIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlIGZpcnN0CkBAIC04Nyw3ICs4Nyw3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9zaGEyMjRfaW5pdChzdHJ1Y3Qgc2hhMjU2X2N0eCAqY3R4KQordm9pZCByaGFzaF9zaGEyMjRfaW5pdChzdHJ1Y3Qgc2hhMjU2X2N0eCogY3R4KQogewogCS8qIEluaXRpYWwgdmFsdWVzIGZyb20gRklQUyAxODAtMy4gVGhlc2Ugd29yZHMgd2VyZSBvYnRhaW5lZCBieSB0YWtpbmcKIAkgKiBiaXRzIGZyb20gMzN0aCB0byA2NHRoIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnRzIG9mIHRoZSBzcXVhcmUKQEAgLTExMyw3ICsxMTMsNyBAQAogewogCXVuc2lnbmVkIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEg7CiAJdW5zaWduZWQgV1sxNl07Ci0JY29uc3QgdW5zaWduZWQgKms7CisJY29uc3QgdW5zaWduZWQqIGs7CiAJaW50IGk7CiAKIAlBID0gaGFzaFswXSwgQiA9IGhhc2hbMV0sIEMgPSBoYXNoWzJdLCBEID0gaGFzaFszXTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogICogQHBhcmFtIG1zZyBtZXNzYWdlIGNodW5rCiAgKiBAcGFyYW0gc2l6ZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgY2h1bmsKICAqLwotdm9pZCByaGFzaF9zaGEyNTZfdXBkYXRlKHNoYTI1Nl9jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgcmhhc2hfc2hhMjU2X3VwZGF0ZShzaGEyNTZfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpCiB7CiAJc2l6ZV90IGluZGV4ID0gKHNpemVfdCljdHgtPmxlbmd0aCAmIDYzOwogCWN0eC0+bGVuZ3RoICs9IHNpemU7CkBAIC0yMTAsNyArMjEwLDcgQEAKICAqIEBwYXJhbSBjdHggdGhlIGFsZ29yaXRobSBjb250ZXh0IGNvbnRhaW5pbmcgY3VycmVudCBoYXNoaW5nIHN0YXRlCiAgKiBAcGFyYW0gcmVzdWx0IGNhbGN1bGF0ZWQgaGFzaCBpbiBiaW5hcnkgZm9ybQogICovCi12b2lkIHJoYXNoX3NoYTI1Nl9maW5hbChzaGEyNTZfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKK3ZvaWQgcmhhc2hfc2hhMjU2X2ZpbmFsKHNoYTI1Nl9jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQogewogCXNpemVfdCBpbmRleCA9ICgodW5zaWduZWQpY3R4LT5sZW5ndGggJiA2MykgPj4gMjsKIAl1bnNpZ25lZCBzaGlmdCA9ICgodW5zaWduZWQpY3R4LT5sZW5ndGggJiAzKSAqIDg7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEyNTYuaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTI1Ni5oCmluZGV4IGY4N2ViYWEuLjM2MjVjZmUgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTI1Ni5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTI1Ni5oCkBAIC0yMCwxMCArMjAsMTAgQEAKIAl1bnNpZ25lZCBkaWdlc3RfbGVuZ3RoOyAvKiBsZW5ndGggb2YgdGhlIGFsZ29yaXRobSBkaWdlc3QgaW4gYnl0ZXMgKi8KIH0gc2hhMjU2X2N0eDsKIAotdm9pZCByaGFzaF9zaGEyMjRfaW5pdChzaGEyNTZfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9zaGEyNTZfaW5pdChzaGEyNTZfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9zaGEyNTZfdXBkYXRlKHNoYTI1Nl9jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci12b2lkIHJoYXNoX3NoYTI1Nl9maW5hbChzaGEyNTZfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIgcmVzdWx0WzMyXSk7Cit2b2lkIHJoYXNoX3NoYTIyNF9pbml0KHNoYTI1Nl9jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX3NoYTI1Nl9pbml0KHNoYTI1Nl9jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX3NoYTI1Nl91cGRhdGUoc2hhMjU2X2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKK3ZvaWQgcmhhc2hfc2hhMjU2X2ZpbmFsKHNoYTI1Nl9jdHgqIGN0eCwgdW5zaWduZWQgY2hhciByZXN1bHRbMzJdKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9IC8qIGV4dGVybiAiQyIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTMuYyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTMuYwppbmRleCBlNGE4NDVmLi5iZDI4NTRmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMy5jCkBAIC0zLDE4ICszLDE4IEBACiAgKiBUaGUgS2VjY2FrIFNIQS0zIHN1Ym1pc3Npb24uIFN1Ym1pc3Npb24gdG8gTklTVCAoUm91bmQgMyksIDIwMTEKICAqIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLCBNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZQogICoKLSAqIENvcHlyaWdodDogMjAxMyBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAxMywgQWxla3NleSBLcmF2Y2hlbmtvIDxyaGFzaC5hZG1pbkBnbWFpbC5jb20+CiAgKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgIGZyZWUgb2YgY2hhcmdlLCAgdG8gYW55IHBlcnNvbiAgb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byAgdXNlLCBjb3B5LCBtb2RpZnksICBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwgIGFuZCB0byBwZXJtaXQgIHBlcnNvbnMgIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KICAqCi0gKiBUaGlzIHByb2dyYW0gIGlzICBkaXN0cmlidXRlZCAgaW4gIHRoZSAgaG9wZSAgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVXNlIHRoaXMgcHJvZ3JhbSAgYXQgIHlvdXIgb3duIHJpc2shCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsICBEQVRBIE9SIFBST0ZJVFMsICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgIEFSSVNJTkcgT1VUIE9GICBPUiBJTiBDT05ORUNUSU9OICBXSVRIIFRIRSBVU0UgIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKICNpbmNsdWRlIDxhc3NlcnQuaD4KQEAgLTM2LDcgKzM2LDcgQEAKIH07CiAKIC8qIEluaXRpYWxpemluZyBhIHNoYTMgY29udGV4dCBmb3IgZ2l2ZW4gbnVtYmVyIG9mIG91dHB1dCBiaXRzICovCi1zdGF0aWMgdm9pZCByaGFzaF9rZWNjYWtfaW5pdChzaGEzX2N0eCAqY3R4LCB1bnNpZ25lZCBiaXRzKQorc3RhdGljIHZvaWQgcmhhc2hfa2VjY2FrX2luaXQoc2hhM19jdHgqIGN0eCwgdW5zaWduZWQgYml0cykKIHsKIAkvKiBOQjogVGhlIEtlY2NhayBjYXBhY2l0eSBwYXJhbWV0ZXIgPSBiaXRzICogMiAqLwogCXVuc2lnbmVkIHJhdGUgPSAxNjAwIC0gYml0cyAqIDI7CkBAIC01MSw3ICs1MSw3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9zaGEzXzIyNF9pbml0KHNoYTNfY3R4ICpjdHgpCit2b2lkIHJoYXNoX3NoYTNfMjI0X2luaXQoc2hhM19jdHgqIGN0eCkKIHsKIAlyaGFzaF9rZWNjYWtfaW5pdChjdHgsIDIyNCk7CiB9CkBAIC02MSw3ICs2MSw3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9zaGEzXzI1Nl9pbml0KHNoYTNfY3R4ICpjdHgpCit2b2lkIHJoYXNoX3NoYTNfMjU2X2luaXQoc2hhM19jdHgqIGN0eCkKIHsKIAlyaGFzaF9rZWNjYWtfaW5pdChjdHgsIDI1Nik7CiB9CkBAIC03MSw3ICs3MSw3IEBACiAgKgogICogQHBhcmFtIGN0eCBjb250ZXh0IHRvIGluaXRpYWxpemUKICAqLwotdm9pZCByaGFzaF9zaGEzXzM4NF9pbml0KHNoYTNfY3R4ICpjdHgpCit2b2lkIHJoYXNoX3NoYTNfMzg0X2luaXQoc2hhM19jdHgqIGN0eCkKIHsKIAlyaGFzaF9rZWNjYWtfaW5pdChjdHgsIDM4NCk7CiB9CkBAIC04MSwzNyArODEsMzcgQEAKICAqCiAgKiBAcGFyYW0gY3R4IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIHJoYXNoX3NoYTNfNTEyX2luaXQoc2hhM19jdHggKmN0eCkKK3ZvaWQgcmhhc2hfc2hhM181MTJfaW5pdChzaGEzX2N0eCogY3R4KQogewogCXJoYXNoX2tlY2Nha19pbml0KGN0eCwgNTEyKTsKIH0KIAorI2RlZmluZSBYT1JFRF9BKGkpIEFbKGkpXSBeIEFbKGkpICsgNV0gXiBBWyhpKSArIDEwXSBeIEFbKGkpICsgMTVdIF4gQVsoaSkgKyAyMF0KKyNkZWZpbmUgVEhFVEFfU1RFUChpKSBcCisJQVsoaSldICAgICAgXj0gRFsoaSldOyBcCisJQVsoaSkgKyA1XSAgXj0gRFsoaSldOyBcCisJQVsoaSkgKyAxMF0gXj0gRFsoaSldOyBcCisJQVsoaSkgKyAxNV0gXj0gRFsoaSldOyBcCisJQVsoaSkgKyAyMF0gXj0gRFsoaSldIFwKKwogLyogS2VjY2FrIHRoZXRhKCkgdHJhbnNmb3JtYXRpb24gKi8KLXN0YXRpYyB2b2lkIGtlY2Nha190aGV0YSh1aW50NjRfdCAqQSkKK3N0YXRpYyB2b2lkIGtlY2Nha190aGV0YSh1aW50NjRfdCogQSkKIHsKLQl1bnNpZ25lZCBpbnQgeDsKLQl1aW50NjRfdCBDWzVdLCBEWzVdOwotCi0JZm9yICh4ID0gMDsgeCA8IDU7IHgrKykgewotCQlDW3hdID0gQVt4XSBeIEFbeCArIDVdIF4gQVt4ICsgMTBdIF4gQVt4ICsgMTVdIF4gQVt4ICsgMjBdOwotCX0KLQlEWzBdID0gUk9UTDY0KENbMV0sIDEpIF4gQ1s0XTsKLQlEWzFdID0gUk9UTDY0KENbMl0sIDEpIF4gQ1swXTsKLQlEWzJdID0gUk9UTDY0KENbM10sIDEpIF4gQ1sxXTsKLQlEWzNdID0gUk9UTDY0KENbNF0sIDEpIF4gQ1syXTsKLQlEWzRdID0gUk9UTDY0KENbMF0sIDEpIF4gQ1szXTsKLQotCWZvciAoeCA9IDA7IHggPCA1OyB4KyspIHsKLQkJQVt4XSAgICAgIF49IERbeF07Ci0JCUFbeCArIDVdICBePSBEW3hdOwotCQlBW3ggKyAxMF0gXj0gRFt4XTsKLQkJQVt4ICsgMTVdIF49IERbeF07Ci0JCUFbeCArIDIwXSBePSBEW3hdOwotCX0KKwl1aW50NjRfdCBEWzVdOworCURbMF0gPSBST1RMNjQoWE9SRURfQSgxKSwgMSkgXiBYT1JFRF9BKDQpOworCURbMV0gPSBST1RMNjQoWE9SRURfQSgyKSwgMSkgXiBYT1JFRF9BKDApOworCURbMl0gPSBST1RMNjQoWE9SRURfQSgzKSwgMSkgXiBYT1JFRF9BKDEpOworCURbM10gPSBST1RMNjQoWE9SRURfQSg0KSwgMSkgXiBYT1JFRF9BKDIpOworCURbNF0gPSBST1RMNjQoWE9SRURfQSgwKSwgMSkgXiBYT1JFRF9BKDMpOworCVRIRVRBX1NURVAoMCk7CisJVEhFVEFfU1RFUCgxKTsKKwlUSEVUQV9TVEVQKDIpOworCVRIRVRBX1NURVAoMyk7CisJVEhFVEFfU1RFUCg0KTsKIH0KIAogLyogS2VjY2FrIHBpKCkgdHJhbnNmb3JtYXRpb24gKi8KLXN0YXRpYyB2b2lkIGtlY2Nha19waSh1aW50NjRfdCAqQSkKK3N0YXRpYyB2b2lkIGtlY2Nha19waSh1aW50NjRfdCogQSkKIHsKIAl1aW50NjRfdCBBMTsKIAlBMSA9IEFbMV07CkBAIC0xNDIsMjEgKzE0MiwyNyBAQAogCS8qIG5vdGU6IEFbIDBdIGlzIGxlZnQgYXMgaXMgKi8KIH0KIAorI2RlZmluZSBDSElfU1RFUChpKSBcCisJQTAgPSBBWzAgKyAoaSldOyBcCisJQTEgPSBBWzEgKyAoaSldOyBcCisJQVswICsgKGkpXSBePSB+QTEgJiBBWzIgKyAoaSldOyBcCisJQVsxICsgKGkpXSBePSB+QVsyICsgKGkpXSAmIEFbMyArIChpKV07IFwKKwlBWzIgKyAoaSldIF49IH5BWzMgKyAoaSldICYgQVs0ICsgKGkpXTsgXAorCUFbMyArIChpKV0gXj0gfkFbNCArIChpKV0gJiBBMDsgXAorCUFbNCArIChpKV0gXj0gfkEwICYgQTEgXAorCiAvKiBLZWNjYWsgY2hpKCkgdHJhbnNmb3JtYXRpb24gKi8KLXN0YXRpYyB2b2lkIGtlY2Nha19jaGkodWludDY0X3QgKkEpCitzdGF0aWMgdm9pZCBrZWNjYWtfY2hpKHVpbnQ2NF90KiBBKQogewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCAyNTsgaSArPSA1KSB7Ci0JCXVpbnQ2NF90IEEwID0gQVswICsgaV0sIEExID0gQVsxICsgaV07Ci0JCUFbMCArIGldIF49IH5BMSAmIEFbMiArIGldOwotCQlBWzEgKyBpXSBePSB+QVsyICsgaV0gJiBBWzMgKyBpXTsKLQkJQVsyICsgaV0gXj0gfkFbMyArIGldICYgQVs0ICsgaV07Ci0JCUFbMyArIGldIF49IH5BWzQgKyBpXSAmIEEwOwotCQlBWzQgKyBpXSBePSB+QTAgJiBBMTsKLQl9CisJdWludDY0X3QgQTAsIEExOworCUNISV9TVEVQKDApOworCUNISV9TVEVQKDUpOworCUNISV9TVEVQKDEwKTsKKwlDSElfU1RFUCgxNSk7CisJQ0hJX1NURVAoMjApOwogfQogCi1zdGF0aWMgdm9pZCByaGFzaF9zaGEzX3Blcm11dGF0aW9uKHVpbnQ2NF90ICpzdGF0ZSkKK3N0YXRpYyB2b2lkIHJoYXNoX3NoYTNfcGVybXV0YXRpb24odWludDY0X3QqIHN0YXRlKQogewogCWludCByb3VuZDsKIAlmb3IgKHJvdW5kID0gMDsgcm91bmQgPCBOdW1iZXJPZlJvdW5kczsgcm91bmQrKykKQEAgLTIwNCw3ICsyMTAsNyBAQAogICogQHBhcmFtIGJsb2NrIHRoZSBtZXNzYWdlIGJsb2NrIHRvIHByb2Nlc3MKICAqIEBwYXJhbSBibG9ja19zaXplIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzZWQgYmxvY2sgaW4gYnl0ZXMKICAqLwotc3RhdGljIHZvaWQgcmhhc2hfc2hhM19wcm9jZXNzX2Jsb2NrKHVpbnQ2NF90IGhhc2hbMjVdLCBjb25zdCB1aW50NjRfdCAqYmxvY2ssIHNpemVfdCBibG9ja19zaXplKQorc3RhdGljIHZvaWQgcmhhc2hfc2hhM19wcm9jZXNzX2Jsb2NrKHVpbnQ2NF90IGhhc2hbMjVdLCBjb25zdCB1aW50NjRfdCogYmxvY2ssIHNpemVfdCBibG9ja19zaXplKQogewogCS8qIGV4cGFuZGVkIGxvb3AgKi8KIAloYXNoWyAwXSBePSBsZTJtZV82NChibG9ja1sgMF0pOwpAQCAtMjYwLDcgKzI2Niw3IEBACiAgKiBAcGFyYW0gbXNnIG1lc3NhZ2UgY2h1bmsKICAqIEBwYXJhbSBzaXplIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBjaHVuawogICovCi12b2lkIHJoYXNoX3NoYTNfdXBkYXRlKHNoYTNfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgc2l6ZV90IHNpemUpCit2b2lkIHJoYXNoX3NoYTNfdXBkYXRlKHNoYTNfY3R4KiBjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1zZywgc2l6ZV90IHNpemUpCiB7CiAJc2l6ZV90IGluZGV4ID0gKHNpemVfdCljdHgtPnJlc3Q7CiAJc2l6ZV90IGJsb2NrX3NpemUgPSAoc2l6ZV90KWN0eC0+YmxvY2tfc2l6ZTsKQEAgLTMwNSw3ICszMTEsNyBAQAogICogQHBhcmFtIGN0eCB0aGUgYWxnb3JpdGhtIGNvbnRleHQgY29udGFpbmluZyBjdXJyZW50IGhhc2hpbmcgc3RhdGUKICAqIEBwYXJhbSByZXN1bHQgY2FsY3VsYXRlZCBoYXNoIGluIGJpbmFyeSBmb3JtCiAgKi8KLXZvaWQgcmhhc2hfc2hhM19maW5hbChzaGEzX2N0eCAqY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCit2b2lkIHJoYXNoX3NoYTNfZmluYWwoc2hhM19jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQogewogCXNpemVfdCBkaWdlc3RfbGVuZ3RoID0gMTAwIC0gY3R4LT5ibG9ja19zaXplIC8gMjsKIAljb25zdCBzaXplX3QgYmxvY2tfc2l6ZSA9IGN0eC0+YmxvY2tfc2l6ZTsKQEAgLTMzMyw3ICszMzksNyBAQAogKiBAcGFyYW0gY3R4IHRoZSBhbGdvcml0aG0gY29udGV4dCBjb250YWluaW5nIGN1cnJlbnQgaGFzaGluZyBzdGF0ZQogKiBAcGFyYW0gcmVzdWx0IGNhbGN1bGF0ZWQgaGFzaCBpbiBiaW5hcnkgZm9ybQogKi8KLXZvaWQgcmhhc2hfa2VjY2FrX2ZpbmFsKHNoYTNfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKK3ZvaWQgcmhhc2hfa2VjY2FrX2ZpbmFsKHNoYTNfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCkKIHsKIAlzaXplX3QgZGlnZXN0X2xlbmd0aCA9IDEwMCAtIGN0eC0+YmxvY2tfc2l6ZSAvIDI7CiAJY29uc3Qgc2l6ZV90IGJsb2NrX3NpemUgPSBjdHgtPmJsb2NrX3NpemU7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEzLmggYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGEzLmgKaW5kZXggMjgzMTk5Ny4uZTAwMDQxZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvc2hhMy5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTMuaApAQCAtMzEsMTIgKzMxLDEyIEBACiAKIC8qIG1ldGhvZHMgZm9yIGNhbGN1bGF0aW5nIHRoZSBoYXNoIGZ1bmN0aW9uICovCiAKLXZvaWQgcmhhc2hfc2hhM18yMjRfaW5pdChzaGEzX2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfc2hhM18yNTZfaW5pdChzaGEzX2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfc2hhM18zODRfaW5pdChzaGEzX2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfc2hhM181MTJfaW5pdChzaGEzX2N0eCAqY3R4KTsKLXZvaWQgcmhhc2hfc2hhM191cGRhdGUoc2hhM19jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSk7Ci12b2lkIHJoYXNoX3NoYTNfZmluYWwoc2hhM19jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKK3ZvaWQgcmhhc2hfc2hhM18yMjRfaW5pdChzaGEzX2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfc2hhM18yNTZfaW5pdChzaGEzX2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfc2hhM18zODRfaW5pdChzaGEzX2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfc2hhM181MTJfaW5pdChzaGEzX2N0eCogY3R4KTsKK3ZvaWQgcmhhc2hfc2hhM191cGRhdGUoc2hhM19jdHgqIGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogbXNnLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIHJoYXNoX3NoYTNfZmluYWwoc2hhM19jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKIAogI2lmZGVmIFVTRV9LRUNDQUsKICNkZWZpbmUgcmhhc2hfa2VjY2FrXzIyNF9pbml0IHJoYXNoX3NoYTNfMjI0X2luaXQKQEAgLTQ0LDcgKzQ0LDcgQEAKICNkZWZpbmUgcmhhc2hfa2VjY2FrXzM4NF9pbml0IHJoYXNoX3NoYTNfMzg0X2luaXQKICNkZWZpbmUgcmhhc2hfa2VjY2FrXzUxMl9pbml0IHJoYXNoX3NoYTNfNTEyX2luaXQKICNkZWZpbmUgcmhhc2hfa2VjY2FrX3VwZGF0ZSByaGFzaF9zaGEzX3VwZGF0ZQotdm9pZCByaGFzaF9rZWNjYWtfZmluYWwoc2hhM19jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKK3ZvaWQgcmhhc2hfa2VjY2FrX2ZpbmFsKHNoYTNfY3R4KiBjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGE1MTIuYyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTUxMi5jCmluZGV4IGEzZTY4MWQuLjU1NWU2ZWYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTUxMi5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTUxMi5jCkBAIC0xLDE4ICsxLDE4IEBACiAvKiBzaGE1MTIuYyAtIGFuIGltcGxlbWVudGF0aW9uIG9mIFNIQS0zODQvNTEyIGhhc2ggZnVuY3Rpb25zCiAgKiBiYXNlZCBvbiBGSVBTIDE4MC0zIChGZWRlcmFsIEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgU3RhbmRhcnQpLgogICoKLSAqIENvcHlyaWdodDogMjAxMC0yMDEyIEFsZWtzZXkgS3JhdmNoZW5rbyA8cmhhc2guYWRtaW5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBBbGVrc2V5IEtyYXZjaGVua28gPHJoYXNoLmFkbWluQGdtYWlsLmNvbT4KICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCAgZnJlZSBvZiBjaGFyZ2UsICB0byBhbnkgcGVyc29uICBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvICB1c2UsIGNvcHksIG1vZGlmeSwgIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kIHRvIHBlcm1pdCAgcGVyc29ucyAgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgogICoKLSAqIFRoaXMgcHJvZ3JhbSAgaXMgIGRpc3RyaWJ1dGVkICBpbiAgdGhlICBob3BlICB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBVc2UgdGhpcyBwcm9ncmFtICBhdCAgeW91ciBvd24gcmlzayEKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCisgKiBMT1NTIE9GIFVTRSwgIERBVEEgT1IgUFJPRklUUywgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAgTkVHTElHRU5DRQorICogT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgIE9SIElOIENPTk5FQ1RJT04gIFdJVEggVEhFIFVTRSAgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtODEsNyArODEsNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfc2hhNTEyX2luaXQoc2hhNTEyX2N0eCAqY3R4KQordm9pZCByaGFzaF9zaGE1MTJfaW5pdChzaGE1MTJfY3R4KiBjdHgpCiB7CiAJLyogSW5pdGlhbCB2YWx1ZXMuIFRoZXNlIHdvcmRzIHdlcmUgb2J0YWluZWQgYnkgdGFraW5nIHRoZSBmaXJzdCAzMgogCSAqIGJpdHMgb2YgdGhlIGZyYWN0aW9uYWwgcGFydHMgb2YgdGhlIHNxdWFyZSByb290cyBvZiB0aGUgZmlyc3QKQEAgLTEwNCw3ICsxMDQsNyBAQAogICoKICAqIEBwYXJhbSBjdHggY29udGV4dCB0byBpbml0aWFsaXplCiAgKi8KLXZvaWQgcmhhc2hfc2hhMzg0X2luaXQoc3RydWN0IHNoYTUxMl9jdHggKmN0eCkKK3ZvaWQgcmhhc2hfc2hhMzg0X2luaXQoc3RydWN0IHNoYTUxMl9jdHgqIGN0eCkKIHsKIAkvKiBJbml0aWFsIHZhbHVlcyBmcm9tIEZJUFMgMTgwLTMuIFRoZXNlIHdvcmRzIHdlcmUgb2J0YWluZWQgYnkgdGFraW5nCiAJICogdGhlIGZpcnN0IHNpeHR5LWZvdXIgYml0cyBvZiB0aGUgZnJhY3Rpb25hbCBwYXJ0cyBvZiB0aGUgc3F1YXJlCkBAIC0xMzEsNyArMTMxLDcgQEAKIHsKIAl1aW50NjRfdCBBLCBCLCBDLCBELCBFLCBGLCBHLCBIOwogCXVpbnQ2NF90IFdbMTZdOwotCWNvbnN0IHVpbnQ2NF90ICprOworCWNvbnN0IHVpbnQ2NF90KiBrOwogCWludCBpOwogCiAJQSA9IGhhc2hbMF0sIEIgPSBoYXNoWzFdLCBDID0gaGFzaFsyXSwgRCA9IGhhc2hbM107CkBAIC0xODYsNyArMTg2LDcgQEAKICAqIEBwYXJhbSBtc2cgbWVzc2FnZSBjaHVuawogICogQHBhcmFtIHNpemUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGNodW5rCiAgKi8KLXZvaWQgcmhhc2hfc2hhNTEyX3VwZGF0ZShzaGE1MTJfY3R4ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgc2l6ZV90IHNpemUpCit2b2lkIHJoYXNoX3NoYTUxMl91cGRhdGUoc2hhNTEyX2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBtc2csIHNpemVfdCBzaXplKQogewogCXNpemVfdCBpbmRleCA9IChzaXplX3QpY3R4LT5sZW5ndGggJiAxMjc7CiAJY3R4LT5sZW5ndGggKz0gc2l6ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQAogICogQHBhcmFtIGN0eCB0aGUgYWxnb3JpdGhtIGNvbnRleHQgY29udGFpbmluZyBjdXJyZW50IGhhc2hpbmcgc3RhdGUKICAqIEBwYXJhbSByZXN1bHQgY2FsY3VsYXRlZCBoYXNoIGluIGJpbmFyeSBmb3JtCiAgKi8KLXZvaWQgcmhhc2hfc2hhNTEyX2ZpbmFsKHNoYTUxMl9jdHggKmN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KQordm9pZCByaGFzaF9zaGE1MTJfZmluYWwoc2hhNTEyX2N0eCogY3R4LCB1bnNpZ25lZCBjaGFyKiByZXN1bHQpCiB7CiAJc2l6ZV90IGluZGV4ID0gKCh1bnNpZ25lZCljdHgtPmxlbmd0aCAmIDEyNykgPj4gMzsKIAl1bnNpZ25lZCBzaGlmdCA9ICgodW5zaWduZWQpY3R4LT5sZW5ndGggJiA3KSAqIDg7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC9zaGE1MTIuaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTUxMi5oCmluZGV4IDdjNjg5YmUuLmY4MGFlMGQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTUxMi5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3NoYTUxMi5oCkBAIC0yMCwxMCArMjAsMTAgQEAKIAl1bnNpZ25lZCBkaWdlc3RfbGVuZ3RoOyAvKiBsZW5ndGggb2YgdGhlIGFsZ29yaXRobSBkaWdlc3QgaW4gYnl0ZXMgKi8KIH0gc2hhNTEyX2N0eDsKIAotdm9pZCByaGFzaF9zaGEzODRfaW5pdChzaGE1MTJfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9zaGE1MTJfaW5pdChzaGE1MTJfY3R4ICpjdHgpOwotdm9pZCByaGFzaF9zaGE1MTJfdXBkYXRlKHNoYTUxMl9jdHggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci12b2lkIHJoYXNoX3NoYTUxMl9maW5hbChzaGE1MTJfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCk7Cit2b2lkIHJoYXNoX3NoYTM4NF9pbml0KHNoYTUxMl9jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX3NoYTUxMl9pbml0KHNoYTUxMl9jdHgqIGN0eCk7Cit2b2lkIHJoYXNoX3NoYTUxMl91cGRhdGUoc2hhNTEyX2N0eCogY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKK3ZvaWQgcmhhc2hfc2hhNTEyX2ZpbmFsKHNoYTUxMl9jdHgqIGN0eCwgdW5zaWduZWQgY2hhciogcmVzdWx0KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9IC8qIGV4dGVybiAiQyIgKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3VzdGQuaCBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3VzdGQuaAppbmRleCAwMTliOTMxLi43NTZjZTBiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC91c3RkLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvdXN0ZC5oCkBAIC05LDcgKzksNyBAQAogIyBwcmFnbWEgd2FybmluZyhwdXNoLDEpCiAjZW5kaWYKIAotI2luY2x1ZGUgPGNtX2t3aW1sLmg+CisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KIAogI2lmbmRlZiBLV0lNTF9JTlRfSEFWRV9JTlQ2NF9UCiAjIGRlZmluZSBpbnQ2NF90IEtXSU1MX0lOVF9pbnQ2NF90CkBAIC0zNiw0ICszNiwzNiBAQAogIyBkZWZpbmUgdWludDhfdCBLV0lNTF9JTlRfdWludDhfdAogI2VuZGlmCiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmIDAKKyNpZiBfTVNDX1ZFUiA+IDEwMDAKKyMgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIHNpemVfdCBmb3IgdmM2LjAgKi8KKworIyBpZiBfTVNDX1ZFUiA+PSAxNjAwCisvKiBWaXN1YWwgU3R1ZGlvID49IDIwMTAgaGFzIHN0ZGludC5oICovCisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZWxzZQorICAvKiB2YzYuMCBoYXMgYnVnIHdpdGggX19pbnQ4LCBzbyB1c2luZyBjaGFyIGluc3RlYWQgKi8KKyAgdHlwZWRlZiBzaWduZWQgY2hhciAgICAgICBpbnQ4X3Q7CisgIHR5cGVkZWYgc2lnbmVkIF9faW50MTYgICAgaW50MTZfdDsKKyAgdHlwZWRlZiBzaWduZWQgX19pbnQzMiAgICBpbnQzMl90OworICB0eXBlZGVmIHNpZ25lZCBfX2ludDY0ICAgIGludDY0X3Q7CisgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgdWludDhfdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDE2ICB1aW50MTZfdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyICB1aW50MzJfdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0ICB1aW50NjRfdDsKKyMgZW5kaWYgLyogX01TQ19WRVIgPj0gMTYwMCAqLworCisvKiBkaXNhYmxlIHdhcm5pbmdzOiBUaGUgUE9TSVggbmFtZSBmb3IgdGhpcyBpdGVtIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgSVNPIEMrKyBjb25mb3JtYW50IG5hbWUuICovCisjIHByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0OTk2KQorCisjZWxzZSAvKiBfTVNDX1ZFUiA+IDEwMDAgKi8KKworIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNlbmRpZiAvKiBfTVNDX1ZFUiA+IDEwMDAgKi8KKyNlbmRpZgorCiAjZW5kaWYgLyogTElCUkhBU0hfVVNURF9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC91dGlsLmggYi9VdGlsaXRpZXMvY21saWJyaGFzaC9saWJyaGFzaC91dGlsLmgKaW5kZXggOWYzNzE1Ny4uNTdjYWU5YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlicmhhc2gvbGlicmhhc2gvdXRpbC5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnJoYXNoL2xpYnJoYXNoL3V0aWwuaApAQCAtMjAsNyArMjAsNyBAQAogIyBkZWZpbmUgYXRvbWljX2NvbXBhcmVfYW5kX3N3YXAocHRyLCBvbGR2YWwsIG5ld3ZhbCkgYXRvbWljX2Nhc18zMihwdHIsIG9sZHZhbCwgbmV3dmFsKQogI2Vsc2UKIC8qIHByYXkgdGhhdCBpdCB3aWxsIHdvcmsgKi8KLSMgZGVmaW5lIGF0b21pY19jb21wYXJlX2FuZF9zd2FwKHB0ciwgb2xkdmFsLCBuZXd2YWwpIHsgaWYoKihwdHIpID09IChvbGR2YWwpKSAqKHB0cikgPSAobmV3dmFsKTsgfQorIyBkZWZpbmUgYXRvbWljX2NvbXBhcmVfYW5kX3N3YXAocHRyLCBvbGR2YWwsIG5ld3ZhbCkgeyBpZiAoKihwdHIpID09IChvbGR2YWwpKSAqKHB0cikgPSAobmV3dmFsKTsgfQogIyBkZWZpbmUgTk9fQVRPTUlDX0JVSUxUSU5TCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di5oIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di5oCmluZGV4IGViODBiZmIuLjZmMzJiNDggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYuaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2LmgKQEAgLTMxLDYgKzMxLDEwIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCisjaWYgZGVmaW5lZChCVUlMRElOR19VVl9TSEFSRUQpICYmIGRlZmluZWQoVVNJTkdfVVZfU0hBUkVEKQorI2Vycm9yICJEZWZpbmUgZWl0aGVyIEJVSUxESU5HX1VWX1NIQVJFRCBvciBVU0lOR19VVl9TSEFSRUQsIG5vdCBib3RoLiIKKyNlbmRpZgorCiAjaWZkZWYgX1dJTjMyCiAgIC8qIFdpbmRvd3MgLSBzZXQgdXAgZGxsIGltcG9ydC9leHBvcnQgZGVjb3JhdG9ycy4gKi8KICMgaWYgZGVmaW5lZChCVUlMRElOR19VVl9TSEFSRUQpCkBAIC0xNDcsNiArMTUxLDcgQEAKICAgWFgoRVJFTU9URUlPLCAicmVtb3RlIEkvTyBlcnJvciIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgWFgoRU5PVFRZLCAiaW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlIikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgWFgoRUZUWVBFLCAiaW5hcHByb3ByaWF0ZSBmaWxlIHR5cGUgb3IgZm9ybWF0IikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgWFgoRUlMU0VRLCAiaWxsZWdhbCBieXRlIHNlcXVlbmNlIikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAogI2RlZmluZSBVVl9IQU5ETEVfVFlQRV9NQVAoWFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBYWChBU1lOQywgYXN5bmMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTc2LDYgKzE4MSw3IEBACiAgIFhYKFdPUkssIHdvcmspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIFhYKEdFVEFERFJJTkZPLCBnZXRhZGRyaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIFhYKEdFVE5BTUVJTkZPLCBnZXRuYW1laW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFhYKFJBTkRPTSwgcmFuZG9tKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAKIHR5cGVkZWYgZW51bSB7CiAjZGVmaW5lIFhYKGNvZGUsIF8pIFVWXyAjIyBjb2RlID0gVVZfXyAjIyBjb2RlLApAQCAtMjMzLDEzICsyMzksMTYgQEAKIHR5cGVkZWYgc3RydWN0IHV2X3VkcF9zZW5kX3MgdXZfdWRwX3NlbmRfdDsKIHR5cGVkZWYgc3RydWN0IHV2X2ZzX3MgdXZfZnNfdDsKIHR5cGVkZWYgc3RydWN0IHV2X3dvcmtfcyB1dl93b3JrX3Q7Cit0eXBlZGVmIHN0cnVjdCB1dl9yYW5kb21fcyB1dl9yYW5kb21fdDsKIAogLyogTm9uZSBvZiB0aGUgYWJvdmUuICovCit0eXBlZGVmIHN0cnVjdCB1dl9lbnZfaXRlbV9zIHV2X2Vudl9pdGVtX3Q7CiB0eXBlZGVmIHN0cnVjdCB1dl9jcHVfaW5mb19zIHV2X2NwdV9pbmZvX3Q7CiB0eXBlZGVmIHN0cnVjdCB1dl9pbnRlcmZhY2VfYWRkcmVzc19zIHV2X2ludGVyZmFjZV9hZGRyZXNzX3Q7CiB0eXBlZGVmIHN0cnVjdCB1dl9kaXJlbnRfcyB1dl9kaXJlbnRfdDsKIHR5cGVkZWYgc3RydWN0IHV2X3Bhc3N3ZF9zIHV2X3Bhc3N3ZF90OwogdHlwZWRlZiBzdHJ1Y3QgdXZfdXRzbmFtZV9zIHV2X3V0c25hbWVfdDsKK3R5cGVkZWYgc3RydWN0IHV2X3N0YXRmc19zIHV2X3N0YXRmc190OwogCiB0eXBlZGVmIGVudW0gewogICBVVl9MT09QX0JMT0NLX1NJR05BTApAQCAtMjYwLDYgKzI2OSw4IEBACiB0eXBlZGVmIHZvaWQqICgqdXZfY2FsbG9jX2Z1bmMpKHNpemVfdCBjb3VudCwgc2l6ZV90IHNpemUpOwogdHlwZWRlZiB2b2lkICgqdXZfZnJlZV9mdW5jKSh2b2lkKiBwdHIpOwogCitVVl9FWFRFUk4gdm9pZCB1dl9saWJyYXJ5X3NodXRkb3duKHZvaWQpOworCiBVVl9FWFRFUk4gaW50IHV2X3JlcGxhY2VfYWxsb2NhdG9yKHV2X21hbGxvY19mdW5jIG1hbGxvY19mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9yZWFsbG9jX2Z1bmMgcmVhbGxvY19mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9jYWxsb2NfZnVuYyBjYWxsb2NfZnVuYywKQEAgLTMyNyw2ICszMzgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGhvc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNlcnZpY2UpOwordHlwZWRlZiB2b2lkICgqdXZfcmFuZG9tX2NiKSh1dl9yYW5kb21fdCogcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZsZW4pOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgIGxvbmcgdHZfc2VjOwpAQCAtNTYxLDYgKzU3Niw3IEBACiBVVl9FWFRFUk4gaW50IHV2X3RjcF9nZXRwZWVybmFtZShjb25zdCB1dl90Y3BfdCogaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBuYW1lbGVuKTsKK1VWX0VYVEVSTiBpbnQgdXZfdGNwX2Nsb3NlX3Jlc2V0KHV2X3RjcF90KiBoYW5kbGUsIHV2X2Nsb3NlX2NiIGNsb3NlX2NiKTsKIFVWX0VYVEVSTiBpbnQgdXZfdGNwX2Nvbm5lY3QodXZfY29ubmVjdF90KiByZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X3RjcF90KiBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciogYWRkciwKQEAgLTU5NSw3ICs2MTEsMTcgQEAKICAgICogKHByb3ZpZGVkIHRoZXkgYWxsIHNldCB0aGUgZmxhZykgYnV0IG9ubHkgdGhlIGxhc3Qgb25lIHRvIGJpbmQgd2lsbCByZWNlaXZlCiAgICAqIGFueSB0cmFmZmljLCBpbiBlZmZlY3QgInN0ZWFsaW5nIiB0aGUgcG9ydCBmcm9tIHRoZSBwcmV2aW91cyBsaXN0ZW5lci4KICAgICovCi0gIFVWX1VEUF9SRVVTRUFERFIgPSA0CisgIFVWX1VEUF9SRVVTRUFERFIgPSA0LAorICAvKgorICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYnkgcmVjdm1tc2csIHNvIHRoZSBidWZmZXIgcHJvdmlkZWQKKyAgICogbXVzdCBub3QgYmUgZnJlZWQgYnkgdGhlIHJlY3ZfY2IgY2FsbGJhY2suCisgICAqLworICBVVl9VRFBfTU1TR19DSFVOSyA9IDgsCisKKyAgLyoKKyAgICogSW5kaWNhdGVzIHRoYXQgcmVjdm1tc2cgc2hvdWxkIGJlIHVzZWQsIGlmIGF2YWlsYWJsZS4KKyAgICovCisgIFVWX1VEUF9SRUNWTU1TRyA9IDI1NgogfTsKIAogdHlwZWRlZiB2b2lkICgqdXZfdWRwX3NlbmRfY2IpKHV2X3VkcF9zZW5kX3QqIHJlcSwgaW50IHN0YXR1cyk7CkBAIC02NDcsNiArNjczLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtdWx0aWNhc3RfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZV9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfbWVtYmVyc2hpcCBtZW1iZXJzaGlwKTsKK1VWX0VYVEVSTiBpbnQgdXZfdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcCh1dl91ZHBfdCogaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG11bHRpY2FzdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X21lbWJlcnNoaXAgbWVtYmVyc2hpcCk7CiBVVl9FWFRFUk4gaW50IHV2X3VkcF9zZXRfbXVsdGljYXN0X2xvb3AodXZfdWRwX3QqIGhhbmRsZSwgaW50IG9uKTsKIFVWX0VYVEVSTiBpbnQgdXZfdWRwX3NldF9tdWx0aWNhc3RfdHRsKHV2X3VkcF90KiBoYW5kbGUsIGludCB0dGwpOwogVVZfRVhURVJOIGludCB1dl91ZHBfc2V0X211bHRpY2FzdF9pbnRlcmZhY2UodXZfdWRwX3QqIGhhbmRsZSwKQEAgLTY5MSwxMCArNzIyLDI1IEBACiAgIFVWX1RUWV9NT0RFX0lPCiB9IHV2X3R0eV9tb2RlX3Q7CiAKK3R5cGVkZWYgZW51bSB7CisgIC8qCisgICAqIFRoZSBjb25zb2xlIHN1cHBvcnRzIGhhbmRsaW5nIG9mIHZpcnR1YWwgdGVybWluYWwgc2VxdWVuY2VzCisgICAqIChXaW5kb3dzMTAgbmV3IGNvbnNvbGUsIENvbkVtdSkKKyAgICovCisgIFVWX1RUWV9TVVBQT1JURUQsCisgIC8qIFRoZSBjb25zb2xlIGNhbm5vdCBwcm9jZXNzIHRoZSB2aXJ0dWFsIHRlcm1pbmFsIHNlcXVlbmNlLiAgKExlZ2FjeQorICAgKiBjb25zb2xlKQorICAgKi8KKyAgVVZfVFRZX1VOU1VQUE9SVEVECit9IHV2X3R0eV92dGVybXN0YXRlX3Q7CisKKwogVVZfRVhURVJOIGludCB1dl90dHlfaW5pdCh1dl9sb29wX3QqLCB1dl90dHlfdCosIHV2X2ZpbGUgZmQsIGludCByZWFkYWJsZSk7CiBVVl9FWFRFUk4gaW50IHV2X3R0eV9zZXRfbW9kZSh1dl90dHlfdCosIHV2X3R0eV9tb2RlX3QgbW9kZSk7CiBVVl9FWFRFUk4gaW50IHV2X3R0eV9yZXNldF9tb2RlKHZvaWQpOwogVVZfRVhURVJOIGludCB1dl90dHlfZ2V0X3dpbnNpemUodXZfdHR5X3QqLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCk7CitVVl9FWFRFUk4gdm9pZCB1dl90dHlfc2V0X3Z0ZXJtX3N0YXRlKHV2X3R0eV92dGVybXN0YXRlX3Qgc3RhdGUpOworVVZfRVhURVJOIGludCB1dl90dHlfZ2V0X3Z0ZXJtX3N0YXRlKHV2X3R0eV92dGVybXN0YXRlX3QqIHN0YXRlKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMrKyIgewpAQCAtMTA0MiwxMSArMTA4OCwxMSBAQAogCiAKIHN0cnVjdCB1dl9jcHVfdGltZXNfcyB7Ci0gIHVpbnQ2NF90IHVzZXI7Ci0gIHVpbnQ2NF90IG5pY2U7Ci0gIHVpbnQ2NF90IHN5czsKLSAgdWludDY0X3QgaWRsZTsKLSAgdWludDY0X3QgaXJxOworICB1aW50NjRfdCB1c2VyOyAvKiBtaWxsaXNlY29uZHMgKi8KKyAgdWludDY0X3QgbmljZTsgLyogbWlsbGlzZWNvbmRzICovCisgIHVpbnQ2NF90IHN5czsgLyogbWlsbGlzZWNvbmRzICovCisgIHVpbnQ2NF90IGlkbGU7IC8qIG1pbGxpc2Vjb25kcyAqLworICB1aW50NjRfdCBpcnE7IC8qIG1pbGxpc2Vjb25kcyAqLwogfTsKIAogc3RydWN0IHV2X2NwdV9pbmZvX3MgewpAQCAtMTA4Nyw2ICsxMTMzLDE3IEBACiAgICAgIHRvIGFzIG1lYW5pbmdsZXNzIGluIHRoZSBkb2NzLiAqLwogfTsKIAorc3RydWN0IHV2X3N0YXRmc19zIHsKKyAgdWludDY0X3QgZl90eXBlOworICB1aW50NjRfdCBmX2JzaXplOworICB1aW50NjRfdCBmX2Jsb2NrczsKKyAgdWludDY0X3QgZl9iZnJlZTsKKyAgdWludDY0X3QgZl9iYXZhaWw7CisgIHVpbnQ2NF90IGZfZmlsZXM7CisgIHVpbnQ2NF90IGZfZmZyZWU7CisgIHVpbnQ2NF90IGZfc3BhcmVbNF07Cit9OworCiB0eXBlZGVmIGVudW0gewogICBVVl9ESVJFTlRfVU5LTk9XTiwKICAgVVZfRElSRU5UX0ZJTEUsCkBAIC0xMTQ5LDEyICsxMjA2LDIyIEBACiBVVl9FWFRFUk4gdXZfcGlkX3QgdXZfb3NfZ2V0cGlkKHZvaWQpOwogVVZfRVhURVJOIHV2X3BpZF90IHV2X29zX2dldHBwaWQodm9pZCk7CiAKLSNkZWZpbmUgVVZfUFJJT1JJVFlfTE9XIDE5Ci0jZGVmaW5lIFVWX1BSSU9SSVRZX0JFTE9XX05PUk1BTCAxMAotI2RlZmluZSBVVl9QUklPUklUWV9OT1JNQUwgMAotI2RlZmluZSBVVl9QUklPUklUWV9BQk9WRV9OT1JNQUwgLTcKLSNkZWZpbmUgVVZfUFJJT1JJVFlfSElHSCAtMTQKLSNkZWZpbmUgVVZfUFJJT1JJVFlfSElHSEVTVCAtMjAKKyNpZiBkZWZpbmVkKF9fUEFTRV9fKQorLyogT24gSUJNIGkgUEFTRSwgdGhlIGhpZ2hlc3QgcHJvY2VzcyBwcmlvcml0eSBpcyAtMTAgKi8KKyMgZGVmaW5lIFVWX1BSSU9SSVRZX0xPVyAzOSAgICAgICAgICAgIC8vIFJVTlBUWSg5OSkKKyMgZGVmaW5lIFVWX1BSSU9SSVRZX0JFTE9XX05PUk1BTCAxNSAgIC8vIFJVTlBUWSg1MCkKKyMgZGVmaW5lIFVWX1BSSU9SSVRZX05PUk1BTCAwICAgICAgICAgIC8vIFJVTlBUWSgyMCkKKyMgZGVmaW5lIFVWX1BSSU9SSVRZX0FCT1ZFX05PUk1BTCAtNCAgIC8vIFJVTlRZKDEyKQorIyBkZWZpbmUgVVZfUFJJT1JJVFlfSElHSCAtNyAgICAgICAgICAgLy8gUlVOUFRZKDYpCisjIGRlZmluZSBVVl9QUklPUklUWV9ISUdIRVNUIC0xMCAgICAgICAvLyBSVU5QVFkoMSkKKyNlbHNlCisjIGRlZmluZSBVVl9QUklPUklUWV9MT1cgMTkKKyMgZGVmaW5lIFVWX1BSSU9SSVRZX0JFTE9XX05PUk1BTCAxMAorIyBkZWZpbmUgVVZfUFJJT1JJVFlfTk9STUFMIDAKKyMgZGVmaW5lIFVWX1BSSU9SSVRZX0FCT1ZFX05PUk1BTCAtNworIyBkZWZpbmUgVVZfUFJJT1JJVFlfSElHSCAtMTQKKyMgZGVmaW5lIFVWX1BSSU9SSVRZX0hJR0hFU1QgLTIwCisjZW5kaWYKIAogVVZfRVhURVJOIGludCB1dl9vc19nZXRwcmlvcml0eSh1dl9waWRfdCBwaWQsIGludCogcHJpb3JpdHkpOwogVVZfRVhURVJOIGludCB1dl9vc19zZXRwcmlvcml0eSh1dl9waWRfdCBwaWQsIGludCBwcmlvcml0eSk7CkBAIC0xMTY4LDYgKzEyMzUsMTMgQEAKIFVWX0VYVEVSTiB2b2lkIHV2X2ZyZWVfaW50ZXJmYWNlX2FkZHJlc3Nlcyh1dl9pbnRlcmZhY2VfYWRkcmVzc190KiBhZGRyZXNzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50KTsKIAorc3RydWN0IHV2X2Vudl9pdGVtX3MgeworICBjaGFyKiBuYW1lOworICBjaGFyKiB2YWx1ZTsKK307CisKK1VWX0VYVEVSTiBpbnQgdXZfb3NfZW52aXJvbih1dl9lbnZfaXRlbV90KiogZW52aXRlbXMsIGludCogY291bnQpOworVVZfRVhURVJOIHZvaWQgdXZfb3NfZnJlZV9lbnZpcm9uKHV2X2Vudl9pdGVtX3QqIGVudml0ZW1zLCBpbnQgY291bnQpOwogVVZfRVhURVJOIGludCB1dl9vc19nZXRlbnYoY29uc3QgY2hhciogbmFtZSwgY2hhciogYnVmZmVyLCBzaXplX3QqIHNpemUpOwogVVZfRVhURVJOIGludCB1dl9vc19zZXRlbnYoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpOwogVVZfRVhURVJOIGludCB1dl9vc191bnNldGVudihjb25zdCBjaGFyKiBuYW1lKTsKQEAgLTEyMjMsNyArMTI5NywxMCBAQAogICBVVl9GU19MQ0hPV04sCiAgIFVWX0ZTX09QRU5ESVIsCiAgIFVWX0ZTX1JFQURESVIsCi0gIFVWX0ZTX0NMT1NFRElSCisgIFVWX0ZTX0NMT1NFRElSLAorICBVVl9GU19TVEFURlMsCisgIFVWX0ZTX01LU1RFTVAsCisgIFVWX0ZTX0xVVElNRQogfSB1dl9mc190eXBlOwogCiBzdHJ1Y3QgdXZfZGlyX3MgewpAQCAtMTI0OCw2ICsxMzI1LDcgQEAKIAogVVZfRVhURVJOIHV2X2ZzX3R5cGUgdXZfZnNfZ2V0X3R5cGUoY29uc3QgdXZfZnNfdCopOwogVVZfRVhURVJOIHNzaXplX3QgdXZfZnNfZ2V0X3Jlc3VsdChjb25zdCB1dl9mc190Kik7CitVVl9FWFRFUk4gaW50IHV2X2ZzX2dldF9zeXN0ZW1fZXJyb3IoY29uc3QgdXZfZnNfdCopOwogVVZfRVhURVJOIHZvaWQqIHV2X2ZzX2dldF9wdHIoY29uc3QgdXZfZnNfdCopOwogVVZfRVhURVJOIGNvbnN0IGNoYXIqIHV2X2ZzX2dldF9wYXRoKGNvbnN0IHV2X2ZzX3QqKTsKIFVWX0VYVEVSTiB1dl9zdGF0X3QqIHV2X2ZzX2dldF9zdGF0YnVmKHV2X2ZzX3QqKTsKQEAgLTEzMTQsNiArMTM5MiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2ZzX3QqIHJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0cGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpOworVVZfRVhURVJOIGludCB1dl9mc19ta3N0ZW1wKHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9mc190KiByZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdHBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKTsKIFVWX0VYVEVSTiBpbnQgdXZfZnNfcm1kaXIodXZfbG9vcF90KiBsb29wLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9mc190KiByZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsCkBAIC0xMzkyLDYgKzE0NzQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBtdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKTsKK1VWX0VYVEVSTiBpbnQgdXZfZnNfbHV0aW1lKHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2ZzX3QqIHJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9mc19jYiBjYik7CiBVVl9FWFRFUk4gaW50IHV2X2ZzX2xzdGF0KHV2X2xvb3BfdCogbG9vcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLApAQCAtMTQ1MSw2ICsxNTM5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl91aWRfdCB1aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9naWRfdCBnaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9mc19jYiBjYik7CitVVl9FWFRFUk4gaW50IHV2X2ZzX3N0YXRmcyh1dl9sb29wX3QqIGxvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9mc190KiByZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpOwogCiAKIGVudW0gdXZfZnNfZXZlbnQgewpAQCAtMTU1Niw2ICsxNjQ4LDI2IEBACiBVVl9FWFRFUk4gaW50IHV2X2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQqIHNyYywgY2hhciogZHN0LCBzaXplX3Qgc2l6ZSk7CiBVVl9FWFRFUk4gaW50IHV2X2luZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIqIHNyYywgdm9pZCogZHN0KTsKIAorCitzdHJ1Y3QgdXZfcmFuZG9tX3MgeworICBVVl9SRVFfRklFTERTCisgIC8qIHJlYWQtb25seSAqLworICB1dl9sb29wX3QqIGxvb3A7CisgIC8qIHByaXZhdGUgKi8KKyAgaW50IHN0YXR1czsKKyAgdm9pZCogYnVmOworICBzaXplX3QgYnVmbGVuOworICB1dl9yYW5kb21fY2IgY2I7CisgIHN0cnVjdCB1dl9fd29yayB3b3JrX3JlcTsKK307CisKK1VWX0VYVEVSTiBpbnQgdXZfcmFuZG9tKHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHV2X3JhbmRvbV90KiByZXEsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsICAvKiBGb3IgZnV0dXJlIGV4dGVuc2lvbjsgbXVzdCBiZSAwLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgdXZfcmFuZG9tX2NiIGNiKTsKKwogI2lmIGRlZmluZWQoSUZfTkFNRVNJWkUpCiAjIGRlZmluZSBVVl9JRl9OQU1FU0laRSAoSUZfTkFNRVNJWkUgKyAxKQogI2VsaWYgZGVmaW5lZChJRk5BTVNJWikKQEAgLTE1ODIsNiArMTY5NCw3IEBACiBVVl9FWFRFUk4gdWludDY0X3QgdXZfZ2V0X2NvbnN0cmFpbmVkX21lbW9yeSh2b2lkKTsKIAogVVZfRVhURVJOIHVpbnQ2NF90IHV2X2hydGltZSh2b2lkKTsKK1VWX0VYVEVSTiB2b2lkIHV2X3NsZWVwKHVuc2lnbmVkIGludCBtc2VjKTsKIAogVVZfRVhURVJOIHZvaWQgdXZfZGlzYWJsZV9zdGRpb19pbmhlcml0YW5jZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di9lcnJuby5oIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di9lcnJuby5oCmluZGV4IDhlZWI5NWQuLjE2NWZkMTEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvZXJybm8uaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2L2Vycm5vLmgKQEAgLTQzOSw1ICs0MzksMTAgQEAKICMgZGVmaW5lIFVWX19FRlRZUEUgKC00MDI4KQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKEVJTFNFUSkgJiYgIWRlZmluZWQoX1dJTjMyKQorIyBkZWZpbmUgVVZfX0VJTFNFUSBVVl9fRVJSKEVJTFNFUSkKKyNlbHNlCisjIGRlZmluZSBVVl9fRUlMU0VRICgtNDAyNykKKyNlbmRpZgogCiAjZW5kaWYgLyogVVZfRVJSTk9fSF8gKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvdW5peC5oIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di91bml4LmgKaW5kZXggNGUyNjEwOC4uZjMwNTYyZSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di91bml4LmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di91bml4LmgKQEAgLTQ3LDEwICs0NywxNSBAQAogCiAjaWZkZWYgQ01BS0VfQk9PVFNUUkFQCiAjIGluY2x1ZGUgInBvc2l4LmgiCisjIGlmIGRlZmluZWQoX19BUFBMRV9fKQorIyAgaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisjIGVuZGlmCiAjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKICMgaW5jbHVkZSAibGludXguaCIKICNlbGlmIGRlZmluZWQgKF9fTVZTX18pCiAjIGluY2x1ZGUgIm9zMzkwLmgiCisjZWxpZiBkZWZpbmVkKF9fUEFTRV9fKSAgLyogX19QQVNFX18gYW5kIF9BSVggYXJlIGJvdGggZGVmaW5lZCBvbiBJQk0gaSAqLworIyBpbmNsdWRlICJwb3NpeC5oIiAgLyogSUJNIGkgbmVlZHMgdXYvcG9zaXguaCwgbm90IHV2L2FpeC5oICovCiAjZWxpZiBkZWZpbmVkKF9BSVgpCiAjIGluY2x1ZGUgImFpeC5oIgogI2VsaWYgZGVmaW5lZChfX3N1bikKQEAgLTY1LDggKzcwLDcgQEAKICAgICAgIGRlZmluZWQoX19PcGVuQlNEX18pICAgICAgICAgfHwgXAogICAgICAgZGVmaW5lZChfX05ldEJTRF9fKQogIyBpbmNsdWRlICJic2QuaCIKLSNlbGlmIGRlZmluZWQoX19QQVNFX18pICAgfHwgXAotICAgICAgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBcCisjZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IFwKICAgICAgIGRlZmluZWQoX19NU1lTX18pICAgfHwgXAogICAgICAgZGVmaW5lZChfX0dOVV9fKQogIyBpbmNsdWRlICJwb3NpeC5oIgpAQCAtNDIxLDExICs0MjUsMjUgQEAKICNlbHNlCiAjIGRlZmluZSBVVl9GU19PX0NSRUFUICAgICAgICAwCiAjZW5kaWYKLSNpZiBkZWZpbmVkKE9fRElSRUNUKQorCisjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19hcm1fXykKKyMgZGVmaW5lIFVWX0ZTX09fRElSRUNUICAgICAgIDB4MTAwMDAKKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9fbTY4a19fKQorIyBkZWZpbmUgVVZfRlNfT19ESVJFQ1QgICAgICAgMHgxMDAwMAorI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19taXBzX18pCisjIGRlZmluZSBVVl9GU19PX0RJUkVDVCAgICAgICAweDA4MDAwCisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX3Bvd2VycGNfXykKKyMgZGVmaW5lIFVWX0ZTX09fRElSRUNUICAgICAgIDB4MjAwMDAKKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9fczM5MHhfXykKKyMgZGVmaW5lIFVWX0ZTX09fRElSRUNUICAgICAgIDB4MDQwMDAKKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCisjIGRlZmluZSBVVl9GU19PX0RJUkVDVCAgICAgICAweDA0MDAwCisjZWxpZiBkZWZpbmVkKE9fRElSRUNUKQogIyBkZWZpbmUgVVZfRlNfT19ESVJFQ1QgICAgICAgT19ESVJFQ1QKICNlbHNlCiAjIGRlZmluZSBVVl9GU19PX0RJUkVDVCAgICAgICAwCiAjZW5kaWYKKwogI2lmIGRlZmluZWQoT19ESVJFQ1RPUlkpCiAjIGRlZmluZSBVVl9GU19PX0RJUkVDVE9SWSAgICBPX0RJUkVDVE9SWQogI2Vsc2UKQEAgLTQ5OCw2ICs1MTYsNyBAQAogI2VuZGlmCiAKIC8qIGZzIG9wZW4oKSBmbGFncyBzdXBwb3J0ZWQgb24gb3RoZXIgcGxhdGZvcm1zOiAqLworI2RlZmluZSBVVl9GU19PX0ZJTEVNQVAgICAgICAgMAogI2RlZmluZSBVVl9GU19PX1JBTkRPTSAgICAgICAgMAogI2RlZmluZSBVVl9GU19PX1NIT1JUX0xJVkVEICAgMAogI2RlZmluZSBVVl9GU19PX1NFUVVFTlRJQUwgICAgMApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di92ZXJzaW9uLmggYi9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2L3ZlcnNpb24uaAppbmRleCA5N2YwYmMyLi5mOTMyNDgzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2L3ZlcnNpb24uaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2L3ZlcnNpb24uaApAQCAtMjYsMTMgKzI2LDEzIEBACiAgKiBWZXJzaW9ucyB3aXRoIHRoZSBzYW1lIG1ham9yIG51bWJlciBhcmUgQUJJIHN0YWJsZS4gQVBJIGlzIGFsbG93ZWQgdG8KICAqIGV2b2x2ZSBiZXR3ZWVuIG1pbm9yIHJlbGVhc2VzLCBidXQgb25seSBpbiBhIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdheS4KICAqIE1ha2Ugc3VyZSB5b3UgdXBkYXRlIHRoZSAtc29uYW1lIGRpcmVjdGl2ZXMgaW4gY29uZmlndXJlLmFjCi0gKiBhbmQgdXYuZ3lwIHdoZW5ldmVyIHlvdSBidW1wIFVWX1ZFUlNJT05fTUFKT1Igb3IgVVZfVkVSU0lPTl9NSU5PUiAoYnV0CisgKiB3aGVuZXZlciB5b3UgYnVtcCBVVl9WRVJTSU9OX01BSk9SIG9yIFVWX1ZFUlNJT05fTUlOT1IgKGJ1dAogICogbm90IFVWX1ZFUlNJT05fUEFUQ0guKQogICovCiAKICNkZWZpbmUgVVZfVkVSU0lPTl9NQUpPUiAxCi0jZGVmaW5lIFVWX1ZFUlNJT05fTUlOT1IgMjkKLSNkZWZpbmUgVVZfVkVSU0lPTl9QQVRDSCAyCisjZGVmaW5lIFVWX1ZFUlNJT05fTUlOT1IgMzcKKyNkZWZpbmUgVVZfVkVSU0lPTl9QQVRDSCAxCiAjZGVmaW5lIFVWX1ZFUlNJT05fSVNfUkVMRUFTRSAwCiAjZGVmaW5lIFVWX1ZFUlNJT05fU1VGRklYICJkZXYiCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvd2luLmggYi9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlL3V2L3dpbi5oCmluZGV4IDdmNzdjYzIuLmY4NjM1N2IgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L2luY2x1ZGUvdXYvd2luLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZS91di93aW4uaApAQCAtNTI4LDcgKzUyOCw3IEBACiAgICAgICAvKiBlb2wgY29udmVyc2lvbiBzdGF0ZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICB1bnNpZ25lZCBjaGFyIHByZXZpb3VzX2VvbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAvKiBhbnNpIHBhcnNlciBzdGF0ZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB1bnNpZ25lZCBjaGFyIGFuc2lfcGFyc2VyX3N0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB1bnNpZ25lZCBzaG9ydCBhbnNpX3BhcnNlcl9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICB1bnNpZ25lZCBjaGFyIGFuc2lfY3NpX2FyZ2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICB1bnNpZ25lZCBzaG9ydCBhbnNpX2NzaV9hcmd2WzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBDT09SRCBzYXZlZF9wb3NpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC02NzksNiArNjc5LDcgQEAKICNkZWZpbmUgVVZfRlNfT19BUFBFTkQgICAgICAgX09fQVBQRU5ECiAjZGVmaW5lIFVWX0ZTX09fQ1JFQVQgICAgICAgIF9PX0NSRUFUCiAjZGVmaW5lIFVWX0ZTX09fRVhDTCAgICAgICAgIF9PX0VYQ0wKKyNkZWZpbmUgVVZfRlNfT19GSUxFTUFQICAgICAgMHgyMDAwMDAwMAogI2RlZmluZSBVVl9GU19PX1JBTkRPTSAgICAgICBfT19SQU5ET00KICNkZWZpbmUgVVZfRlNfT19SRE9OTFkgICAgICAgX09fUkRPTkxZCiAjZGVmaW5lIFVWX0ZTX09fUkRXUiAgICAgICAgIF9PX1JEV1IKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy9yYW5kb20uYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTFiZjcwCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3JhbmRvbS5jCkBAIC0wLDAgKzEsMTIzIEBACisvKiBDb3B5cmlnaHQgbGlidXYgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAidXYuaCIKKyNpbmNsdWRlICJ1di1jb21tb24uaCIKKworI2lmZGVmIF9XSU4zMgorIyAgaW5jbHVkZSAid2luL2ludGVybmFsLmgiCisjZWxzZQorIyAgaW5jbHVkZSAidW5peC9pbnRlcm5hbC5oIgorI2VuZGlmCisKK3N0YXRpYyBpbnQgdXZfX3JhbmRvbSh2b2lkKiBidWYsIHNpemVfdCBidWZsZW4pIHsKKyAgaW50IHJjOworCisjaWYgZGVmaW5lZChfX1BBU0VfXykKKyAgcmMgPSB1dl9fcmFuZG9tX3JlYWRwYXRoKCIvZGV2L3VyYW5kb20iLCBidWYsIGJ1Zmxlbik7CisjZWxpZiBkZWZpbmVkKF9BSVgpCisgIHJjID0gdXZfX3JhbmRvbV9yZWFkcGF0aCgiL2Rldi9yYW5kb20iLCBidWYsIGJ1Zmxlbik7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgXAorICAgICAoZGVmaW5lZChfX0FORFJPSURfQVBJX18pICYmIF9fQU5EUk9JRF9BUElfXyA+PSAyOCkKKyAgcmMgPSB1dl9fcmFuZG9tX2dldGVudHJvcHkoYnVmLCBidWZsZW4pOworICBpZiAocmMgPT0gVVZfRU5PU1lTKQorICAgIHJjID0gdXZfX3JhbmRvbV9kZXZ1cmFuZG9tKGJ1ZiwgYnVmbGVuKTsKKyNlbGlmIGRlZmluZWQoX19OZXRCU0RfXykKKyAgcmMgPSB1dl9fcmFuZG9tX3N5c2N0bChidWYsIGJ1Zmxlbik7CisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykKKyAgcmMgPSB1dl9fcmFuZG9tX2dldHJhbmRvbShidWYsIGJ1Zmxlbik7CisgIGlmIChyYyA9PSBVVl9FTk9TWVMpCisgICAgcmMgPSB1dl9fcmFuZG9tX2RldnVyYW5kb20oYnVmLCBidWZsZW4pOworIyBpZiBkZWZpbmVkKF9fbGludXhfXykKKyAgc3dpdGNoIChyYykgeworICAgIGNhc2UgVVZfRUFDQ0VTOgorICAgIGNhc2UgVVZfRUlPOgorICAgIGNhc2UgVVZfRUxPT1A6CisgICAgY2FzZSBVVl9FTUZJTEU6CisgICAgY2FzZSBVVl9FTkZJTEU6CisgICAgY2FzZSBVVl9FTk9FTlQ6CisgICAgY2FzZSBVVl9FUEVSTToKKyAgICAgIHJjID0gdXZfX3JhbmRvbV9zeXNjdGwoYnVmLCBidWZsZW4pOworICAgICAgYnJlYWs7CisgIH0KKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorICB1dl9fb25jZV9pbml0KCk7CisgIHJjID0gdXZfX3JhbmRvbV9ydGxnZW5yYW5kb20oYnVmLCBidWZsZW4pOworI2Vsc2UKKyAgcmMgPSB1dl9fcmFuZG9tX2RldnVyYW5kb20oYnVmLCBidWZsZW4pOworI2VuZGlmCisKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyB2b2lkIHV2X19yYW5kb21fd29yayhzdHJ1Y3QgdXZfX3dvcmsqIHcpIHsKKyAgdXZfcmFuZG9tX3QqIHJlcTsKKworICByZXEgPSBjb250YWluZXJfb2YodywgdXZfcmFuZG9tX3QsIHdvcmtfcmVxKTsKKyAgcmVxLT5zdGF0dXMgPSB1dl9fcmFuZG9tKHJlcS0+YnVmLCByZXEtPmJ1Zmxlbik7Cit9CisKKworc3RhdGljIHZvaWQgdXZfX3JhbmRvbV9kb25lKHN0cnVjdCB1dl9fd29yayogdywgaW50IHN0YXR1cykgeworICB1dl9yYW5kb21fdCogcmVxOworCisgIHJlcSA9IGNvbnRhaW5lcl9vZih3LCB1dl9yYW5kb21fdCwgd29ya19yZXEpOworICB1dl9fcmVxX3VucmVnaXN0ZXIocmVxLT5sb29wLCByZXEpOworCisgIGlmIChzdGF0dXMgPT0gMCkKKyAgICBzdGF0dXMgPSByZXEtPnN0YXR1czsKKworICByZXEtPmNiKHJlcSwgc3RhdHVzLCByZXEtPmJ1ZiwgcmVxLT5idWZsZW4pOworfQorCisKK2ludCB1dl9yYW5kb20odXZfbG9vcF90KiBsb29wLAorICAgICAgICAgICAgICB1dl9yYW5kb21fdCogcmVxLAorICAgICAgICAgICAgICB2b2lkICpidWYsCisgICAgICAgICAgICAgIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLAorICAgICAgICAgICAgICB1dl9yYW5kb21fY2IgY2IpIHsKKyAgaWYgKGJ1ZmxlbiA+IDB4N0ZGRkZGRkZ1KQorICAgIHJldHVybiBVVl9FMkJJRzsKKworICBpZiAoZmxhZ3MgIT0gMCkKKyAgICByZXR1cm4gVVZfRUlOVkFMOworCisgIGlmIChjYiA9PSBOVUxMKQorICAgIHJldHVybiB1dl9fcmFuZG9tKGJ1ZiwgYnVmbGVuKTsKKworICB1dl9fcmVxX2luaXQobG9vcCwgcmVxLCBVVl9SQU5ET00pOworICByZXEtPmxvb3AgPSBsb29wOworICByZXEtPnN0YXR1cyA9IDA7CisgIHJlcS0+Y2IgPSBjYjsKKyAgcmVxLT5idWYgPSBidWY7CisgIHJlcS0+YnVmbGVuID0gYnVmbGVuOworCisgIHV2X193b3JrX3N1Ym1pdChsb29wLAorICAgICAgICAgICAgICAgICAgJnJlcS0+d29ya19yZXEsCisgICAgICAgICAgICAgICAgICBVVl9fV09SS19DUFUsCisgICAgICAgICAgICAgICAgICB1dl9fcmFuZG9tX3dvcmssCisgICAgICAgICAgICAgICAgICB1dl9fcmFuZG9tX2RvbmUpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3RocmVhZHBvb2wuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy90aHJlYWRwb29sLmMKaW5kZXggN2FhNTc1NS4uMDk5ODkzOCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3RocmVhZHBvb2wuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdGhyZWFkcG9vbC5jCkBAIC0xNjAsOCArMTYwLDggQEAKIH0KIAogCit2b2lkIHV2X190aHJlYWRwb29sX2NsZWFudXAodm9pZCkgewogI2lmbmRlZiBfV0lOMzIKLVVWX0RFU1RSVUNUT1Ioc3RhdGljIHZvaWQgY2xlYW51cCh2b2lkKSkgewogICB1bnNpZ25lZCBpbnQgaTsKIAogICBpZiAobnRocmVhZHMgPT0gMCkKQEAgLTE4MSw4ICsxODEsOCBAQAogCiAgIHRocmVhZHMgPSBOVUxMOwogICBudGhyZWFkcyA9IDA7Ci19CiAjZW5kaWYKK30KIAogCiBzdGF0aWMgdm9pZCBpbml0X3RocmVhZHModm9pZCkgewpAQCAtMzcyLDYgKzM3MiwxMCBAQAogICAgIGxvb3AgPSAoKHV2X2dldG5hbWVpbmZvX3QqKSByZXEpLT5sb29wOwogICAgIHdyZXEgPSAmKCh1dl9nZXRuYW1laW5mb190KikgcmVxKS0+d29ya19yZXE7CiAgICAgYnJlYWs7CisgIGNhc2UgVVZfUkFORE9NOgorICAgIGxvb3AgPSAoKHV2X3JhbmRvbV90KikgcmVxKS0+bG9vcDsKKyAgICB3cmVxID0gJigodXZfcmFuZG9tX3QqKSByZXEpLT53b3JrX3JlcTsKKyAgICBicmVhazsKICAgY2FzZSBVVl9XT1JLOgogICAgIGxvb3AgPSAgKCh1dl93b3JrX3QqKSByZXEpLT5sb29wOwogICAgIHdyZXEgPSAmKCh1dl93b3JrX3QqKSByZXEpLT53b3JrX3JlcTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy90aW1lci5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3RpbWVyLmMKaW5kZXggZGQ3OGJjYi4uNGNmNGVkNCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3RpbWVyLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3RpbWVyLmMKQEAgLTUxLDEyICs1MSw3IEBACiAgIC8qIENvbXBhcmUgc3RhcnRfaWQgd2hlbiBib3RoIGhhdmUgdGhlIHNhbWUgdGltZW91dC4gc3RhcnRfaWQgaXMKICAgICogYWxsb2NhdGVkIHdpdGggbG9vcC0+dGltZXJfY291bnRlciBpbiB1dl90aW1lcl9zdGFydCgpLgogICAgKi8KLSAgaWYgKGEtPnN0YXJ0X2lkIDwgYi0+c3RhcnRfaWQpCi0gICAgcmV0dXJuIDE7Ci0gIGlmIChiLT5zdGFydF9pZCA8IGEtPnN0YXJ0X2lkKQotICAgIHJldHVybiAwOwotCi0gIHJldHVybiAwOworICByZXR1cm4gYS0+c3RhcnRfaWQgPCBiLT5zdGFydF9pZDsKIH0KIAogCkBAIC03NCw3ICs2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgcmVwZWF0KSB7CiAgIHVpbnQ2NF90IGNsYW1wZWRfdGltZW91dDsKIAotICBpZiAoY2IgPT0gTlVMTCkKKyAgaWYgKHV2X19pc19jbG9zaW5nKGhhbmRsZSkgfHwgY2IgPT0gTlVMTCkKICAgICByZXR1cm4gVVZfRUlOVkFMOwogCiAgIGlmICh1dl9faXNfYWN0aXZlKGhhbmRsZSkpCkBAIC04Nyw3ICs4Miw3IEBACiAgIGhhbmRsZS0+dGltZXJfY2IgPSBjYjsKICAgaGFuZGxlLT50aW1lb3V0ID0gY2xhbXBlZF90aW1lb3V0OwogICBoYW5kbGUtPnJlcGVhdCA9IHJlcGVhdDsKLSAgLyogc3RhcnRfaWQgaXMgdGhlIHNlY29uZCBpbmRleCB0byBiZSBjb21wYXJlZCBpbiB1dl9fdGltZXJfY21wKCkgKi8KKyAgLyogc3RhcnRfaWQgaXMgdGhlIHNlY29uZCBpbmRleCB0byBiZSBjb21wYXJlZCBpbiB0aW1lcl9sZXNzX3RoYW4oKSAqLwogICBoYW5kbGUtPnN0YXJ0X2lkID0gaGFuZGxlLT5sb29wLT50aW1lcl9jb3VudGVyKys7CiAKICAgaGVhcF9pbnNlcnQodGltZXJfaGVhcChoYW5kbGUtPmxvb3ApLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYWl4LWNvbW1vbi5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYWl4LWNvbW1vbi5jCmluZGV4IGU5Njk3ZTkuLjQ0Yzg3YjEgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FpeC1jb21tb24uYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9haXgtY29tbW9uLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxuZXQvaWYuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbjZfdmFyLmg+CiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgpAQCAtMTU1LDE0NCArMTU2LDMgQEAKICAgfQogfQogCi12b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOwotICB9Ci0KLSAgdXZfX2ZyZWUoY3B1X2luZm9zKTsKLX0KLQotCi1pbnQgdXZfaW50ZXJmYWNlX2FkZHJlc3Nlcyh1dl9pbnRlcmZhY2VfYWRkcmVzc190KiogYWRkcmVzc2VzLCBpbnQqIGNvdW50KSB7Ci0gIHV2X2ludGVyZmFjZV9hZGRyZXNzX3QqIGFkZHJlc3M7Ci0gIGludCBzb2NrZmQsIGluZXQ2LCBzaXplID0gMTsKLSAgc3RydWN0IGlmY29uZiBpZmM7Ci0gIHN0cnVjdCBpZnJlcSAqaWZyLCAqcCwgZmxnOwotICBzdHJ1Y3Qgc29ja2FkZHJfZGwqIHNhX2FkZHI7Ci0KLSAgKmNvdW50ID0gMDsKLSAgKmFkZHJlc3NlcyA9IE5VTEw7Ci0KLSAgaWYgKDAgPiAoc29ja2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fSVApKSkgewotICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLSAgfQotCi0gIGlmIChpb2N0bChzb2NrZmQsIFNJT0NHU0laSUZDT05GLCAmc2l6ZSkgPT0gLTEpIHsKLSAgICB1dl9fY2xvc2Uoc29ja2ZkKTsKLSAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7Ci0gIH0KLQotICBpZmMuaWZjX3JlcSA9IChzdHJ1Y3QgaWZyZXEqKXV2X19tYWxsb2Moc2l6ZSk7Ci0gIGlmYy5pZmNfbGVuID0gc2l6ZTsKLSAgaWYgKGlvY3RsKHNvY2tmZCwgU0lPQ0dJRkNPTkYsICZpZmMpID09IC0xKSB7Ci0gICAgdXZfX2Nsb3NlKHNvY2tmZCk7Ci0gICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotICB9Ci0KLSNkZWZpbmUgQUREUl9TSVpFKHApIE1BWCgocCkuc2FfbGVuLCBzaXplb2YocCkpCi0KLSAgLyogQ291bnQgYWxsIHVwIGFuZCBydW5uaW5nIGlwdjQvaXB2NiBhZGRyZXNzZXMgKi8KLSAgaWZyID0gaWZjLmlmY19yZXE7Ci0gIHdoaWxlICgoY2hhciopaWZyIDwgKGNoYXIqKWlmYy5pZmNfcmVxICsgaWZjLmlmY19sZW4pIHsKLSAgICBwID0gaWZyOwotICAgIGlmciA9IChzdHJ1Y3QgaWZyZXEqKQotICAgICAgKChjaGFyKilpZnIgKyBzaXplb2YoaWZyLT5pZnJfbmFtZSkgKyBBRERSX1NJWkUoaWZyLT5pZnJfYWRkcikpOwotCi0gICAgaWYgKCEocC0+aWZyX2FkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQ2IHx8Ci0gICAgICAgICAgcC0+aWZyX2FkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQpKQotICAgICAgY29udGludWU7Ci0KLSAgICBtZW1jcHkoZmxnLmlmcl9uYW1lLCBwLT5pZnJfbmFtZSwgc2l6ZW9mKGZsZy5pZnJfbmFtZSkpOwotICAgIGlmIChpb2N0bChzb2NrZmQsIFNJT0NHSUZGTEFHUywgJmZsZykgPT0gLTEpIHsKLSAgICAgIHV2X19jbG9zZShzb2NrZmQpOwotICAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotICAgIH0KLQotICAgIGlmICghKGZsZy5pZnJfZmxhZ3MgJiBJRkZfVVAgJiYgZmxnLmlmcl9mbGFncyAmIElGRl9SVU5OSU5HKSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgKCpjb3VudCkrKzsKLSAgfQotCi0gIGlmICgqY291bnQgPT0gMCkgewotICAgIHV2X19jbG9zZShzb2NrZmQpOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgLyogQWxsb2MgdGhlIHJldHVybiBpbnRlcmZhY2Ugc3RydWN0cyAqLwotICAqYWRkcmVzc2VzID0gdXZfX21hbGxvYygqY291bnQgKiBzaXplb2YodXZfaW50ZXJmYWNlX2FkZHJlc3NfdCkpOwotICBpZiAoISgqYWRkcmVzc2VzKSkgewotICAgIHV2X19jbG9zZShzb2NrZmQpOwotICAgIHJldHVybiBVVl9FTk9NRU07Ci0gIH0KLSAgYWRkcmVzcyA9ICphZGRyZXNzZXM7Ci0KLSAgaWZyID0gaWZjLmlmY19yZXE7Ci0gIHdoaWxlICgoY2hhciopaWZyIDwgKGNoYXIqKWlmYy5pZmNfcmVxICsgaWZjLmlmY19sZW4pIHsKLSAgICBwID0gaWZyOwotICAgIGlmciA9IChzdHJ1Y3QgaWZyZXEqKQotICAgICAgKChjaGFyKilpZnIgKyBzaXplb2YoaWZyLT5pZnJfbmFtZSkgKyBBRERSX1NJWkUoaWZyLT5pZnJfYWRkcikpOwotCi0gICAgaWYgKCEocC0+aWZyX2FkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQ2IHx8Ci0gICAgICAgICAgcC0+aWZyX2FkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQpKQotICAgICAgY29udGludWU7Ci0KLSAgICBpbmV0NiA9IChwLT5pZnJfYWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpOwotCi0gICAgbWVtY3B5KGZsZy5pZnJfbmFtZSwgcC0+aWZyX25hbWUsIHNpemVvZihmbGcuaWZyX25hbWUpKTsKLSAgICBpZiAoaW9jdGwoc29ja2ZkLCBTSU9DR0lGRkxBR1MsICZmbGcpID09IC0xKSB7Ci0gICAgICB1dl9fY2xvc2Uoc29ja2ZkKTsKLSAgICAgIHJldHVybiBVVl9FTk9TWVM7Ci0gICAgfQotCi0gICAgaWYgKCEoZmxnLmlmcl9mbGFncyAmIElGRl9VUCAmJiBmbGcuaWZyX2ZsYWdzICYgSUZGX1JVTk5JTkcpKQotICAgICAgY29udGludWU7Ci0KLSAgICAvKiBBbGwgY29uZGl0aW9ucyBhYm92ZSBtdXN0IG1hdGNoIGNvdW50IGxvb3AgKi8KLQotICAgIGFkZHJlc3MtPm5hbWUgPSB1dl9fc3RyZHVwKHAtPmlmcl9uYW1lKTsKLQotICAgIGlmIChpbmV0NikKLSAgICAgIGFkZHJlc3MtPmFkZHJlc3MuYWRkcmVzczYgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW42KikgJnAtPmlmcl9hZGRyKTsKLSAgICBlbHNlCi0gICAgICBhZGRyZXNzLT5hZGRyZXNzLmFkZHJlc3M0ID0gKigoc3RydWN0IHNvY2thZGRyX2luKikgJnAtPmlmcl9hZGRyKTsKLQotICAgIHNhX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2RsKikgJnAtPmlmcl9hZGRyOwotICAgIG1lbWNweShhZGRyZXNzLT5waHlzX2FkZHIsIExMQUREUihzYV9hZGRyKSwgc2l6ZW9mKGFkZHJlc3MtPnBoeXNfYWRkcikpOwotCi0gICAgaWYgKGlvY3RsKHNvY2tmZCwgU0lPQ0dJRk5FVE1BU0ssIHApID09IC0xKSB7Ci0gICAgICB1dl9fY2xvc2Uoc29ja2ZkKTsKLSAgICAgIHJldHVybiBVVl9FTk9TWVM7Ci0gICAgfQotCi0gICAgaWYgKGluZXQ2KQotICAgICAgYWRkcmVzcy0+bmV0bWFzay5uZXRtYXNrNiA9ICooKHN0cnVjdCBzb2NrYWRkcl9pbjYqKSAmcC0+aWZyX2FkZHIpOwotICAgIGVsc2UKLSAgICAgIGFkZHJlc3MtPm5ldG1hc2submV0bWFzazQgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKSAmcC0+aWZyX2FkZHIpOwotCi0gICAgYWRkcmVzcy0+aXNfaW50ZXJuYWwgPSBmbGcuaWZyX2ZsYWdzICYgSUZGX0xPT1BCQUNLID8gMSA6IDA7Ci0KLSAgICBhZGRyZXNzKys7Ci0gIH0KLQotI3VuZGVmIEFERFJfU0laRQotCi0gIHV2X19jbG9zZShzb2NrZmQpOwotICByZXR1cm4gMDsKLX0KLQotCi12b2lkIHV2X2ZyZWVfaW50ZXJmYWNlX2FkZHJlc3Nlcyh1dl9pbnRlcmZhY2VfYWRkcmVzc190KiBhZGRyZXNzZXMsCi0gIGludCBjb3VudCkgewotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgIHV2X19mcmVlKGFkZHJlc3Nlc1tpXS5uYW1lKTsKLSAgfQotCi0gIHV2X19mcmVlKGFkZHJlc3Nlcyk7Ci19Ci0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FpeC5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYWl4LmMKaW5kZXggMWYzNjkyNi4uNmI0NTk0YiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYWl4LmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYWl4LmMKQEAgLTkyNiw3ICs5MjYsNyBAQAogfQogCiAKLVVWX0RFU1RSVUNUT1Ioc3RhdGljIHZvaWQgZnJlZV9hcmdzX21lbSh2b2lkKSkgewordm9pZCB1dl9fcHJvY2Vzc190aXRsZV9jbGVhbnVwKHZvaWQpIHsKICAgdXZfX2ZyZWUoYXJnc19tZW0pOyAgLyogS2VlcCB2YWxncmluZCBoYXBweS4gKi8KICAgYXJnc19tZW0gPSBOVUxMOwogfQpAQCAtMTAzOSw2ICsxMDM5LDE4NiBAQAogfQogCiAKK2ludCB1dl9pbnRlcmZhY2VfYWRkcmVzc2VzKHV2X2ludGVyZmFjZV9hZGRyZXNzX3QqKiBhZGRyZXNzZXMsIGludCogY291bnQpIHsKKyAgdXZfaW50ZXJmYWNlX2FkZHJlc3NfdCogYWRkcmVzczsKKyAgaW50IHNvY2tmZCwgc29jazZmZCwgaW5ldDYsIGksIHIsIHNpemUgPSAxOworICBzdHJ1Y3QgaWZjb25mIGlmYzsKKyAgc3RydWN0IGlmcmVxICppZnIsICpwLCBmbGc7CisgIHN0cnVjdCBpbjZfaWZyZXEgaWY2OworICBzdHJ1Y3Qgc29ja2FkZHJfZGwqIHNhX2FkZHI7CisKKyAgaWZjLmlmY19yZXEgPSBOVUxMOworICBzb2NrNmZkID0gLTE7CisgIHIgPSAwOworICAqY291bnQgPSAwOworICAqYWRkcmVzc2VzID0gTlVMTDsKKworICBpZiAoMCA+IChzb2NrZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19JUCkpKSB7CisgICAgciA9IFVWX19FUlIoZXJybm8pOworICAgIGdvdG8gY2xlYW51cDsKKyAgfQorCisgIGlmICgwID4gKHNvY2s2ZmQgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fSVApKSkgeworICAgIHIgPSBVVl9fRVJSKGVycm5vKTsKKyAgICBnb3RvIGNsZWFudXA7CisgIH0KKworICBpZiAoaW9jdGwoc29ja2ZkLCBTSU9DR1NJWklGQ09ORiwgJnNpemUpID09IC0xKSB7CisgICAgciA9IFVWX19FUlIoZXJybm8pOworICAgIGdvdG8gY2xlYW51cDsKKyAgfQorCisgIGlmYy5pZmNfcmVxID0gKHN0cnVjdCBpZnJlcSopdXZfX21hbGxvYyhzaXplKTsKKyAgaWYgKGlmYy5pZmNfcmVxID09IE5VTEwpIHsKKyAgICByID0gVVZfRU5PTUVNOworICAgIGdvdG8gY2xlYW51cDsKKyAgfQorICBpZmMuaWZjX2xlbiA9IHNpemU7CisgIGlmIChpb2N0bChzb2NrZmQsIFNJT0NHSUZDT05GLCAmaWZjKSA9PSAtMSkgeworICAgIHIgPSBVVl9fRVJSKGVycm5vKTsKKyAgICBnb3RvIGNsZWFudXA7CisgIH0KKworI2RlZmluZSBBRERSX1NJWkUocCkgTUFYKChwKS5zYV9sZW4sIHNpemVvZihwKSkKKworICAvKiBDb3VudCBhbGwgdXAgYW5kIHJ1bm5pbmcgaXB2NC9pcHY2IGFkZHJlc3NlcyAqLworICBpZnIgPSBpZmMuaWZjX3JlcTsKKyAgd2hpbGUgKChjaGFyKilpZnIgPCAoY2hhciopaWZjLmlmY19yZXEgKyBpZmMuaWZjX2xlbikgeworICAgIHAgPSBpZnI7CisgICAgaWZyID0gKHN0cnVjdCBpZnJlcSopCisgICAgICAoKGNoYXIqKWlmciArIHNpemVvZihpZnItPmlmcl9uYW1lKSArIEFERFJfU0laRShpZnItPmlmcl9hZGRyKSk7CisKKyAgICBpZiAoIShwLT5pZnJfYWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgfHwKKyAgICAgICAgICBwLT5pZnJfYWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVCkpCisgICAgICBjb250aW51ZTsKKworICAgIG1lbWNweShmbGcuaWZyX25hbWUsIHAtPmlmcl9uYW1lLCBzaXplb2YoZmxnLmlmcl9uYW1lKSk7CisgICAgaWYgKGlvY3RsKHNvY2tmZCwgU0lPQ0dJRkZMQUdTLCAmZmxnKSA9PSAtMSkgeworICAgICAgciA9IFVWX19FUlIoZXJybm8pOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmICghKGZsZy5pZnJfZmxhZ3MgJiBJRkZfVVAgJiYgZmxnLmlmcl9mbGFncyAmIElGRl9SVU5OSU5HKSkKKyAgICAgIGNvbnRpbnVlOworCisgICAgKCpjb3VudCkrKzsKKyAgfQorCisgIGlmICgqY291bnQgPT0gMCkKKyAgICBnb3RvIGNsZWFudXA7CisKKyAgLyogQWxsb2MgdGhlIHJldHVybiBpbnRlcmZhY2Ugc3RydWN0cyAqLworICAqYWRkcmVzc2VzID0gdXZfX2NhbGxvYygqY291bnQsIHNpemVvZigqKmFkZHJlc3NlcykpOworICBpZiAoISgqYWRkcmVzc2VzKSkgeworICAgIHIgPSBVVl9FTk9NRU07CisgICAgZ290byBjbGVhbnVwOworICB9CisgIGFkZHJlc3MgPSAqYWRkcmVzc2VzOworCisgIGlmciA9IGlmYy5pZmNfcmVxOworICB3aGlsZSAoKGNoYXIqKWlmciA8IChjaGFyKilpZmMuaWZjX3JlcSArIGlmYy5pZmNfbGVuKSB7CisgICAgcCA9IGlmcjsKKyAgICBpZnIgPSAoc3RydWN0IGlmcmVxKikKKyAgICAgICgoY2hhciopaWZyICsgc2l6ZW9mKGlmci0+aWZyX25hbWUpICsgQUREUl9TSVpFKGlmci0+aWZyX2FkZHIpKTsKKworICAgIGlmICghKHAtPmlmcl9hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiB8fAorICAgICAgICAgIHAtPmlmcl9hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSkKKyAgICAgIGNvbnRpbnVlOworCisgICAgaW5ldDYgPSAocC0+aWZyX2FkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQ2KTsKKworICAgIG1lbWNweShmbGcuaWZyX25hbWUsIHAtPmlmcl9uYW1lLCBzaXplb2YoZmxnLmlmcl9uYW1lKSk7CisgICAgaWYgKGlvY3RsKHNvY2tmZCwgU0lPQ0dJRkZMQUdTLCAmZmxnKSA9PSAtMSkKKyAgICAgIGdvdG8gc3lzZXJyb3I7CisKKyAgICBpZiAoIShmbGcuaWZyX2ZsYWdzICYgSUZGX1VQICYmIGZsZy5pZnJfZmxhZ3MgJiBJRkZfUlVOTklORykpCisgICAgICBjb250aW51ZTsKKworICAgIC8qIEFsbCBjb25kaXRpb25zIGFib3ZlIG11c3QgbWF0Y2ggY291bnQgbG9vcCAqLworCisgICAgYWRkcmVzcy0+bmFtZSA9IHV2X19zdHJkdXAocC0+aWZyX25hbWUpOworCisgICAgaWYgKGluZXQ2KQorICAgICAgYWRkcmVzcy0+YWRkcmVzcy5hZGRyZXNzNiA9ICooKHN0cnVjdCBzb2NrYWRkcl9pbjYqKSAmcC0+aWZyX2FkZHIpOworICAgIGVsc2UKKyAgICAgIGFkZHJlc3MtPmFkZHJlc3MuYWRkcmVzczQgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKSAmcC0+aWZyX2FkZHIpOworCisgICAgaWYgKGluZXQ2KSB7CisgICAgICBtZW1zZXQoJmlmNiwgMCwgc2l6ZW9mKGlmNikpOworICAgICAgciA9IHV2X19zdHJzY3B5KGlmNi5pZnJfbmFtZSwgcC0+aWZyX25hbWUsIHNpemVvZihpZjYuaWZyX25hbWUpKTsKKyAgICAgIGlmIChyID09IFVWX0UyQklHKQorICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICByID0gMDsKKyAgICAgIG1lbWNweSgmaWY2Lmlmcl9BZGRyLCAmcC0+aWZyX2FkZHIsIHNpemVvZihpZjYuaWZyX0FkZHIpKTsKKyAgICAgIGlmIChpb2N0bChzb2NrNmZkLCBTSU9DR0lGTkVUTUFTSzYsICZpZjYpID09IC0xKQorICAgICAgICBnb3RvIHN5c2Vycm9yOworICAgICAgYWRkcmVzcy0+bmV0bWFzay5uZXRtYXNrNiA9ICooKHN0cnVjdCBzb2NrYWRkcl9pbjYqKSAmaWY2Lmlmcl9BZGRyKTsKKyAgICAgIC8qIEV4cGxpY2l0bHkgc2V0IGZhbWlseSBhcyB0aGUgaW9jdGwgY2FsbCBhcHBlYXJzIHRvIHJldHVybiBpdCBhcyAwLiAqLworICAgICAgYWRkcmVzcy0+bmV0bWFzay5uZXRtYXNrNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgIH0gZWxzZSB7CisgICAgICBpZiAoaW9jdGwoc29ja2ZkLCBTSU9DR0lGTkVUTUFTSywgcCkgPT0gLTEpCisgICAgICAgIGdvdG8gc3lzZXJyb3I7CisgICAgICBhZGRyZXNzLT5uZXRtYXNrLm5ldG1hc2s0ID0gKigoc3RydWN0IHNvY2thZGRyX2luKikgJnAtPmlmcl9hZGRyKTsKKyAgICAgIC8qIEV4cGxpY2l0bHkgc2V0IGZhbWlseSBhcyB0aGUgaW9jdGwgY2FsbCBhcHBlYXJzIHRvIHJldHVybiBpdCBhcyAwLiAqLworICAgICAgYWRkcmVzcy0+bmV0bWFzay5uZXRtYXNrNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICB9CisKKyAgICBhZGRyZXNzLT5pc19pbnRlcm5hbCA9IGZsZy5pZnJfZmxhZ3MgJiBJRkZfTE9PUEJBQ0sgPyAxIDogMDsKKworICAgIGFkZHJlc3MrKzsKKyAgfQorCisgIC8qIEZpbGwgaW4gcGh5c2ljYWwgYWRkcmVzc2VzLiAqLworICBpZnIgPSBpZmMuaWZjX3JlcTsKKyAgd2hpbGUgKChjaGFyKilpZnIgPCAoY2hhciopaWZjLmlmY19yZXEgKyBpZmMuaWZjX2xlbikgeworICAgIHAgPSBpZnI7CisgICAgaWZyID0gKHN0cnVjdCBpZnJlcSopCisgICAgICAoKGNoYXIqKWlmciArIHNpemVvZihpZnItPmlmcl9uYW1lKSArIEFERFJfU0laRShpZnItPmlmcl9hZGRyKSk7CisKKyAgICBpZiAocC0+aWZyX2FkZHIuc2FfZmFtaWx5ICE9IEFGX0xJTkspCisgICAgICBjb250aW51ZTsKKworICAgIGFkZHJlc3MgPSAqYWRkcmVzc2VzOworICAgIGZvciAoaSA9IDA7IGkgPCAqY291bnQ7IGkrKykgeworICAgICAgaWYgKHN0cmNtcChhZGRyZXNzLT5uYW1lLCBwLT5pZnJfbmFtZSkgPT0gMCkgeworICAgICAgICBzYV9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9kbCopICZwLT5pZnJfYWRkcjsKKyAgICAgICAgbWVtY3B5KGFkZHJlc3MtPnBoeXNfYWRkciwgTExBRERSKHNhX2FkZHIpLCBzaXplb2YoYWRkcmVzcy0+cGh5c19hZGRyKSk7CisgICAgICB9CisgICAgICBhZGRyZXNzKys7CisgICAgfQorICB9CisKKyN1bmRlZiBBRERSX1NJWkUKKyAgZ290byBjbGVhbnVwOworCitzeXNlcnJvcjoKKyAgdXZfZnJlZV9pbnRlcmZhY2VfYWRkcmVzc2VzKCphZGRyZXNzZXMsICpjb3VudCk7CisgICphZGRyZXNzZXMgPSBOVUxMOworICAqY291bnQgPSAwOworICByID0gVVZfRU5PU1lTOworCitjbGVhbnVwOgorICBpZiAoc29ja2ZkICE9IC0xKQorICAgIHV2X19jbG9zZShzb2NrZmQpOworICBpZiAoc29jazZmZCAhPSAtMSkKKyAgICB1dl9fY2xvc2Uoc29jazZmZCk7CisgIHV2X19mcmVlKGlmYy5pZmNfcmVxKTsKKyAgcmV0dXJuIHI7Cit9CisKKwordm9pZCB1dl9mcmVlX2ludGVyZmFjZV9hZGRyZXNzZXModXZfaW50ZXJmYWNlX2FkZHJlc3NfdCogYWRkcmVzc2VzLAorICBpbnQgY291bnQpIHsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICB1dl9fZnJlZShhZGRyZXNzZXNbaV0ubmFtZSk7CisgIH0KKworICB1dl9fZnJlZShhZGRyZXNzZXMpOworfQorCisKIHZvaWQgdXZfX3BsYXRmb3JtX2ludmFsaWRhdGVfZmQodXZfbG9vcF90KiBsb29wLCBpbnQgZmQpIHsKICAgc3RydWN0IHBvbGxmZCogZXZlbnRzOwogICB1aW50cHRyX3QgaTsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FuZHJvaWQtaWZhZGRycy5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYW5kcm9pZC1pZmFkZHJzLmMKaW5kZXggOTlmYjI1YS4uNDc2NWNjMCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYW5kcm9pZC1pZmFkZHJzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYW5kcm9pZC1pZmFkZHJzLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPgogCiB0eXBlZGVmIHN0cnVjdCBOZXRsaW5rTGlzdAogewpAQCAtNDY5LDEyICs0NzAsMTQgQEAKICAgICAgICAgewogICAgICAgICAgICAgY2FzZSBJRkFfQUREUkVTUzoKICAgICAgICAgICAgIGNhc2UgSUZBX0xPQ0FMOgorICAgICAgICAgICAgICAgIGxfYWRkclNpemUgKz0gTkxNU0dfQUxJR04oY2FsY0FkZHJMZW4obF9pbmZvLT5pZmFfZmFtaWx5LCBsX3J0YURhdGFTaXplKSk7CiAgICAgICAgICAgICAgICAgaWYoKGxfaW5mby0+aWZhX2ZhbWlseSA9PSBBRl9JTkVUIHx8IGxfaW5mby0+aWZhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYgIWxfYWRkZWROZXRtYXNrKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSByb29tIGZvciBuZXRtYXNrICovCiAgICAgICAgICAgICAgICAgICAgIGxfYWRkclNpemUgKz0gTkxNU0dfQUxJR04oY2FsY0FkZHJMZW4obF9pbmZvLT5pZmFfZmFtaWx5LCBsX3J0YURhdGFTaXplKSk7CiAgICAgICAgICAgICAgICAgICAgIGxfYWRkZWROZXRtYXNrID0gMTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIElGQV9CUk9BRENBU1Q6CiAgICAgICAgICAgICAgICAgbF9hZGRyU2l6ZSArPSBOTE1TR19BTElHTihjYWxjQWRkckxlbihsX2luZm8tPmlmYV9mYW1pbHksIGxfcnRhRGF0YVNpemUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FzeW5jLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9hc3luYy5jCmluZGV4IGE1YzQ3YmMuLjVmNThmYjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2FzeW5jLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYXN5bmMuYwpAQCAtMzIsMTAgKzMyLDE0IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4gIC8qIHNjaGVkX3lpZWxkKCkgKi8KKworI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN5cy9ldmVudGZkLmg+CisjZW5kaWYKIAogc3RhdGljIHZvaWQgdXZfX2FzeW5jX3NlbmQodXZfbG9vcF90KiBsb29wKTsKIHN0YXRpYyBpbnQgdXZfX2FzeW5jX3N0YXJ0KHV2X2xvb3BfdCogbG9vcCk7Ci1zdGF0aWMgaW50IHV2X19hc3luY19ldmVudGZkKHZvaWQpOwogCiAKIGludCB1dl9hc3luY19pbml0KHV2X2xvb3BfdCogbG9vcCwgdXZfYXN5bmNfdCogaGFuZGxlLCB1dl9hc3luY19jYiBhc3luY19jYikgewpAQCAtNzgsMjAgKzgyLDMyIEBACiAKIC8qIE9ubHkgY2FsbCB0aGlzIGZyb20gdGhlIGV2ZW50IGxvb3AgdGhyZWFkLiAqLwogc3RhdGljIGludCB1dl9fYXN5bmNfc3Bpbih1dl9hc3luY190KiBoYW5kbGUpIHsKKyAgaW50IGk7CiAgIGludCByYzsKIAogICBmb3IgKDs7KSB7Ci0gICAgLyogcmM9MCAtLSBoYW5kbGUgaXMgbm90IHBlbmRpbmcuCi0gICAgICogcmM9MSAtLSBoYW5kbGUgaXMgcGVuZGluZywgb3RoZXIgdGhyZWFkIGlzIHN0aWxsIHdvcmtpbmcgd2l0aCBpdC4KLSAgICAgKiByYz0yIC0tIGhhbmRsZSBpcyBwZW5kaW5nLCBvdGhlciB0aHJlYWQgaXMgZG9uZS4KKyAgICAvKiA5OTcgaXMgbm90IGNvbXBsZXRlbHkgY2hvc2VuIGF0IHJhbmRvbS4gSXQncyBhIHByaW1lIG51bWJlciwgYWN5Y2xpY2FsCisgICAgICogYnkgbmF0dXJlLCBhbmQgc2hvdWxkIHRoZXJlZm9yZSBob3BlZnVsbHkgZGFtcGVuIHN5bXBhdGhldGljIHJlc29uYW5jZS4KICAgICAgKi8KLSAgICByYyA9IGNtcHhjaGdpKCZoYW5kbGUtPnBlbmRpbmcsIDIsIDApOworICAgIGZvciAoaSA9IDA7IGkgPCA5OTc7IGkrKykgeworICAgICAgLyogcmM9MCAtLSBoYW5kbGUgaXMgbm90IHBlbmRpbmcuCisgICAgICAgKiByYz0xIC0tIGhhbmRsZSBpcyBwZW5kaW5nLCBvdGhlciB0aHJlYWQgaXMgc3RpbGwgd29ya2luZyB3aXRoIGl0LgorICAgICAgICogcmM9MiAtLSBoYW5kbGUgaXMgcGVuZGluZywgb3RoZXIgdGhyZWFkIGlzIGRvbmUuCisgICAgICAgKi8KKyAgICAgIHJjID0gY21weGNoZ2koJmhhbmRsZS0+cGVuZGluZywgMiwgMCk7CiAKLSAgICBpZiAocmMgIT0gMSkKLSAgICAgIHJldHVybiByYzsKKyAgICAgIGlmIChyYyAhPSAxKQorICAgICAgICByZXR1cm4gcmM7CiAKLSAgICAvKiBPdGhlciB0aHJlYWQgaXMgYnVzeSB3aXRoIHRoaXMgaGFuZGxlLCBzcGluIHVudGlsIGl0J3MgZG9uZS4gKi8KLSAgICBjcHVfcmVsYXgoKTsKKyAgICAgIC8qIE90aGVyIHRocmVhZCBpcyBidXN5IHdpdGggdGhpcyBoYW5kbGUsIHNwaW4gdW50aWwgaXQncyBkb25lLiAqLworICAgICAgY3B1X3JlbGF4KCk7CisgICAgfQorCisgICAgLyogWWllbGQgdGhlIENQVS4gV2UgbWF5IGhhdmUgcHJlZW1wdGVkIHRoZSBvdGhlciB0aHJlYWQgd2hpbGUgaXQncworICAgICAqIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBhbmQgaWYgaXQncyBydW5uaW5nIG9uIHRoZSBzYW1lIENQVQorICAgICAqIGFzIHVzLCB3ZSdsbCBqdXN0IGJ1cm4gQ1BVIGN5Y2xlcyB1bnRpbCB0aGUgZW5kIG9mIG91ciB0aW1lIHNsaWNlLgorICAgICAqLworICAgIHNjaGVkX3lpZWxkKCk7CiAgIH0KIH0KIApAQCAtMTkwLDM2ICsyMDYsMTggQEAKICAgaWYgKGxvb3AtPmFzeW5jX2lvX3dhdGNoZXIuZmQgIT0gLTEpCiAgICAgcmV0dXJuIDA7CiAKLSAgZXJyID0gdXZfX2FzeW5jX2V2ZW50ZmQoKTsKLSAgaWYgKGVyciA+PSAwKSB7Ci0gICAgcGlwZWZkWzBdID0gZXJyOwotICAgIHBpcGVmZFsxXSA9IC0xOwotICB9Ci0gIGVsc2UgaWYgKGVyciA9PSBVVl9FTk9TWVMpIHsKLSAgICBlcnIgPSB1dl9fbWFrZV9waXBlKHBpcGVmZCwgVVZfX0ZfTk9OQkxPQ0spOwotI2lmIGRlZmluZWQoX19saW51eF9fKQotICAgIC8qIFNhdmUgYSBmaWxlIGRlc2NyaXB0b3IgYnkgb3BlbmluZyBvbmUgb2YgdGhlIHBpcGUgZGVzY3JpcHRvcnMgYXMKLSAgICAgKiByZWFkL3dyaXRlIHRocm91Z2ggdGhlIHByb2Nmcy4gIFRoYXQgZmlsZSBkZXNjcmlwdG9yIGNhbiB0aGVuCi0gICAgICogZnVuY3Rpb24gYXMgYm90aCBlbmRzIG9mIHRoZSBwaXBlLgotICAgICAqLwotICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgY2hhciBidWZbMzJdOwotICAgICAgaW50IGZkOworI2lmZGVmIF9fbGludXhfXworICBlcnIgPSBldmVudGZkKDAsIEVGRF9DTE9FWEVDIHwgRUZEX05PTkJMT0NLKTsKKyAgaWYgKGVyciA8IDApCisgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCi0gICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiL3Byb2Mvc2VsZi9mZC8lZCIsIHBpcGVmZFswXSk7Ci0gICAgICBmZCA9IHV2X19vcGVuX2Nsb2V4ZWMoYnVmLCBPX1JEV1IpOwotICAgICAgaWYgKGZkID49IDApIHsKLSAgICAgICAgdXZfX2Nsb3NlKHBpcGVmZFswXSk7Ci0gICAgICAgIHV2X19jbG9zZShwaXBlZmRbMV0pOwotICAgICAgICBwaXBlZmRbMF0gPSBmZDsKLSAgICAgICAgcGlwZWZkWzFdID0gZmQ7Ci0gICAgICB9Ci0gICAgfQotI2VuZGlmCi0gIH0KLQorICBwaXBlZmRbMF0gPSBlcnI7CisgIHBpcGVmZFsxXSA9IC0xOworI2Vsc2UKKyAgZXJyID0gdXZfX21ha2VfcGlwZShwaXBlZmQsIFVWX19GX05PTkJMT0NLKTsKICAgaWYgKGVyciA8IDApCiAgICAgcmV0dXJuIGVycjsKKyNlbmRpZgogCiAgIHV2X19pb19pbml0KCZsb29wLT5hc3luY19pb193YXRjaGVyLCB1dl9fYXN5bmNfaW8sIHBpcGVmZFswXSk7CiAgIHV2X19pb19zdGFydChsb29wLCAmbG9vcC0+YXN5bmNfaW9fd2F0Y2hlciwgUE9MTElOKTsKQEAgLTI1Myw0NiArMjUxLDMgQEAKICAgdXZfX2Nsb3NlKGxvb3AtPmFzeW5jX2lvX3dhdGNoZXIuZmQpOwogICBsb29wLT5hc3luY19pb193YXRjaGVyLmZkID0gLTE7CiB9Ci0KLQotc3RhdGljIGludCB1dl9fYXN5bmNfZXZlbnRmZCh2b2lkKSB7Ci0jaWYgZGVmaW5lZChfX2xpbnV4X18pCi0gIHN0YXRpYyBpbnQgbm9fZXZlbnRmZDI7Ci0gIHN0YXRpYyBpbnQgbm9fZXZlbnRmZDsKLSAgaW50IGZkOwotCi0gIGlmIChub19ldmVudGZkMikKLSAgICBnb3RvIHNraXBfZXZlbnRmZDI7Ci0KLSAgZmQgPSB1dl9fZXZlbnRmZDIoMCwgVVZfX0VGRF9DTE9FWEVDIHwgVVZfX0VGRF9OT05CTE9DSyk7Ci0gIGlmIChmZCAhPSAtMSkKLSAgICByZXR1cm4gZmQ7Ci0KLSAgaWYgKGVycm5vICE9IEVOT1NZUykKLSAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7Ci0KLSAgbm9fZXZlbnRmZDIgPSAxOwotCi1za2lwX2V2ZW50ZmQyOgotCi0gIGlmIChub19ldmVudGZkKQotICAgIGdvdG8gc2tpcF9ldmVudGZkOwotCi0gIGZkID0gdXZfX2V2ZW50ZmQoMCk7Ci0gIGlmIChmZCAhPSAtMSkgewotICAgIHV2X19jbG9leGVjKGZkLCAxKTsKLSAgICB1dl9fbm9uYmxvY2soZmQsIDEpOwotICAgIHJldHVybiBmZDsKLSAgfQotCi0gIGlmIChlcnJubyAhPSBFTk9TWVMpCi0gICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotCi0gIG5vX2V2ZW50ZmQgPSAxOwotCi1za2lwX2V2ZW50ZmQ6Ci0KLSNlbmRpZgotCi0gIHJldHVybiBVVl9FTk9TWVM7Ci19CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9hdG9taWMtb3BzLmggYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9hdG9taWMtb3BzLmgKaW5kZXggOTk1YWNhNi4uMjUxOGEwNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYXRvbWljLW9wcy5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2F0b21pYy1vcHMuaApAQCAtMzYsMTAgKzM2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAobmV3dmFsKSwgIjAiIChvbGR2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICAgcmV0dXJuIG91dDsKLSNlbGlmIGRlZmluZWQoX0FJWCkgJiYgKGRlZmluZWQoX194bENfXykgfHwgZGVmaW5lZChfX2libXhsX18pKQotICBjb25zdCBpbnQgb3V0ID0gKCoodm9sYXRpbGUgaW50KikgcHRyKTsKLSAgX19jb21wYXJlX2FuZF9zd2FwKHB0ciwgJm9sZHZhbCwgbmV3dmFsKTsKLSAgcmV0dXJuIG91dDsKKyNlbGlmIGRlZmluZWQoX0FJWCkgJiYgZGVmaW5lZChfX2libXhsX18pCisgIC8qIEZJWE1FOiBUaGlzIGlzIG5vdCBhY3R1YWxseSBhdG9taWMgYnV0IFhMQ2xhbmcgMTYuMSBmb3IgQUlYCisgICAgIGRvZXMgbm90IHByb3ZpZGUgX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwIG9yIGFuIGVxdWl2YWxlbnQuCisgICAgIEl0cyBkb2N1bWVudGF0aW9uIHN1Z2dlc3RzIHVzaW5nIEMrKzExIGF0b21pY3MgYnV0IHRoaXMgaXMgQy4gICovCisgIF9fY29tcGFyZV9hbmRfc3dhcCgodm9sYXRpbGUgaW50KilwdHIsICZvbGR2YWwsIG5ld3ZhbCk7CisgIHJldHVybiBvbGR2YWw7CiAjZWxpZiBkZWZpbmVkKF9fTVZTX18pCiAgIHVuc2lnbmVkIGludCBvcDQ7CiAgIGlmIChfX3Bsb19DU1NUKHB0ciwgKHVuc2lnbmVkIGludCopICZvbGR2YWwsIG5ld3ZhbCwKQEAgLTU3LDYgKzU5LDggQEAKIFVWX1VOVVNFRChzdGF0aWMgdm9pZCBjcHVfcmVsYXgodm9pZCkpIHsKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwOyBub3AiKTsgIC8qIGEuay5hLiBQQVVTRSAqLworI2VsaWYgKGRlZmluZWQoX19hcm1fXykgJiYgX19BUk1fQVJDSCA+PSA3KSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQorICBfX2FzbV9fIHZvbGF0aWxlKCJ5aWVsZCIpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2JzZC1pZmFkZHJzLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9ic2QtaWZhZGRycy5jCmluZGV4IDBkN2JiZTYuLmEzMzg1YWYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2JzZC1pZmFkZHJzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYnNkLWlmYWRkcnMuYwpAQCAtNjksNyArNjksOSBAQAogICBzdHJ1Y3QgaWZhZGRycyogYWRkcnM7CiAgIHN0cnVjdCBpZmFkZHJzKiBlbnQ7CiAgIHV2X2ludGVyZmFjZV9hZGRyZXNzX3QqIGFkZHJlc3M7CisjaWYgIShkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19NU1lTX18pKQogICBpbnQgaTsKKyNlbmRpZgogCiAgICpjb3VudCA9IDA7CiAgICphZGRyZXNzZXMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYnNkLXByb2N0aXRsZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvYnNkLXByb2N0aXRsZS5jCmluZGV4IDBjZTQ3YzguLjcyM2I4MWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2JzZC1wcm9jdGl0bGUuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9ic2QtcHJvY3RpdGxlLmMKQEAgLTM3LDYgKzM3LDEzIEBACiB9CiAKIAordm9pZCB1dl9fcHJvY2Vzc190aXRsZV9jbGVhbnVwKHZvaWQpIHsKKyAgLyogVE9ETyhibm9vcmRodWlzKSB1dl9tdXRleF9kZXN0cm95KCZwcm9jZXNzX3RpdGxlX211dGV4KQorICAgKiBhbmQgcmVzZXQgcHJvY2Vzc190aXRsZV9tdXRleF9vbmNlPworICAgKi8KK30KKworCiBjaGFyKiogdXZfc2V0dXBfYXJncyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKICAgcHJvY2Vzc190aXRsZSA9IGFyZ2MgPiAwID8gdXZfX3N0cmR1cChhcmd2WzBdKSA6IE5VTEw7CiAgIHJldHVybiBhcmd2OwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY21ha2UtYm9vdHN0cmFwLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9jbWFrZS1ib290c3RyYXAuYwppbmRleCBkNDJmZjA1Li42Y2Y0MmZhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9jbWFrZS1ib290c3RyYXAuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9jbWFrZS1ib290c3RyYXAuYwpAQCAtMSw2ICsxLDEyIEBACiAjaW5jbHVkZSAidXYuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCit2b2lkIHV2X19wcm9jZXNzX3RpdGxlX2NsZWFudXAodm9pZCkgeworfQorCit2b2lkIHV2X190aHJlYWRwb29sX2NsZWFudXAodm9pZCkgeworfQorCiBpbnQgdXZfX3RjcF9ub2RlbGF5KGludCBmZCwgaW50IG9uKSB7CiAgIGVycm5vID0gRUlOVkFMOwogICByZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9jb3JlLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9jb3JlLmMKaW5kZXggY2Y3ZGVhMC4uN2I4MGVkNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY29yZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2NvcmUuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxmY250bC5oPiAgLyogT19DTE9FWEVDICovCiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPHN5cy91bi5oPgpAQCAtNTAsMzcgKzUwLDM2IEBACiAjIGluY2x1ZGUgPHN5cy93YWl0Lmg+CiAjZW5kaWYKIAotI2lmZGVmIF9fQVBQTEVfXwotIyBpbmNsdWRlIDxtYWNoLW8vZHlsZC5oPiAvKiBfTlNHZXRFeGVjdXRhYmxlUGF0aCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKQogIyBpbmNsdWRlIDxzeXMvZmlsaW8uaD4KLSMgaWYgZGVmaW5lZChPX0NMT0VYRUMpCi0jICBkZWZpbmUgVVZfX09fQ0xPRVhFQyBPX0NMT0VYRUMKLSMgZW5kaWYKLSNlbmRpZgorIyBlbmRpZiAvKiBkZWZpbmVkKF9fQVBQTEVfXykgKi8KKworCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFUQVJHRVRfT1NfSVBIT05FCisjIGluY2x1ZGUgPGNydF9leHRlcm5zLmg+CisjIGluY2x1ZGUgPG1hY2gtby9keWxkLmg+IC8qIF9OU0dldEV4ZWN1dGFibGVQYXRoICovCisjIGRlZmluZSBlbnZpcm9uICgqX05TR2V0RW52aXJvbigpKQorI2Vsc2UgLyogZGVmaW5lZChfX0FQUExFX18pICYmICFUQVJHRVRfT1NfSVBIT05FICovCitleHRlcm4gY2hhcioqIGVudmlyb247CisjZW5kaWYgLyogIShkZWZpbmVkKF9fQVBQTEVfXykgJiYgIVRBUkdFVF9PU19JUEhPTkUpICovCisKIAogI2lmIGRlZmluZWQoX19EcmFnb25GbHlfXykgICAgICB8fCBcCiAgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgICAgICAgIHx8IFwKICAgICBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykgfHwgXAotICAgIGRlZmluZWQoX19OZXRCU0RfXykKKyAgICBkZWZpbmVkKF9fTmV0QlNEX18pICAgICAgICAgfHwgXAorICAgIGRlZmluZWQoX19PcGVuQlNEX18pCiAjIGluY2x1ZGUgPHN5cy9zeXNjdGwuaD4KICMgaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CiAjIGluY2x1ZGUgPHN5cy93YWl0Lmg+CiAjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgogIyBpbmNsdWRlIDxzeXMvY3B1c2V0Lmg+Ci0jIGRlZmluZSBVVl9fT19DTE9FWEVDIE9fQ0xPRVhFQwotIyBpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfXyA+PSAxMAorIyBpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQogIyAgZGVmaW5lIHV2X19hY2NlcHQ0IGFjY2VwdDQKICMgZW5kaWYKICMgaWYgZGVmaW5lZChfX05ldEJTRF9fKQogIyAgZGVmaW5lIHV2X19hY2NlcHQ0KGEsIGIsIGMsIGQpIHBhY2NlcHQoKGEpLCAoYiksIChjKSwgTlVMTCwgKGQpKQogIyBlbmRpZgotIyBpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX18gPj0gMTApIHx8IGRlZmluZWQoX19OZXRCU0RfXykKLSMgIGRlZmluZSBVVl9fU09DS19OT05CTE9DSyBTT0NLX05PTkJMT0NLCi0jICBkZWZpbmUgVVZfX1NPQ0tfQ0xPRVhFQyAgU09DS19DTE9FWEVDCi0jIGVuZGlmCi0jIGlmICFkZWZpbmVkKEZfRFVQMkZEX0NMT0VYRUMpICYmIGRlZmluZWQoX0ZfRFVQMkZEX0NMT0VYRUMpCi0jICBkZWZpbmUgRl9EVVAyRkRfQ0xPRVhFQyAgX0ZfRFVQMkZEX0NMT0VYRUMKLSMgZW5kaWYKICNlbmRpZgogCiAjaWYgZGVmaW5lZChfX0FORFJPSURfQVBJX18pICYmIF9fQU5EUk9JRF9BUElfXyA8IDIxCkBAIC05Miw3ICs5MSw4IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX19saW51eF9fKQotI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjIGluY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjIGRlZmluZSB1dl9fYWNjZXB0NCBhY2NlcHQ0CiAjZW5kaWYKIAogc3RhdGljIGludCB1dl9fcnVuX3BlbmRpbmcodXZfbG9vcF90KiBsb29wKTsKQEAgLTE3NSw5ICsxNzUsNyBAQAogCiAgIGNhc2UgVVZfU0lHTkFMOgogICAgIHV2X19zaWduYWxfY2xvc2UoKHV2X3NpZ25hbF90KikgaGFuZGxlKTsKLSAgICAvKiBTaWduYWwgaGFuZGxlcyBtYXkgbm90IGJlIGNsb3NlZCBpbW1lZGlhdGVseS4gVGhlIHNpZ25hbCBjb2RlIHdpbGwKLSAgICAgKiBpdHNlbGYgY2xvc2UgdXZfX21ha2VfY2xvc2VfcGVuZGluZyB3aGVuZXZlciBhcHByb3ByaWF0ZS4gKi8KLSAgICByZXR1cm47CisgICAgYnJlYWs7CiAKICAgZGVmYXVsdDoKICAgICBhc3NlcnQoMCk7CkBAIC0yNDIsNiArMjQwLDggQEAKIAogCiBzdGF0aWMgdm9pZCB1dl9fZmluaXNoX2Nsb3NlKHV2X2hhbmRsZV90KiBoYW5kbGUpIHsKKyAgdXZfc2lnbmFsX3QqIHNoOworCiAgIC8qIE5vdGU6IHdoaWxlIHRoZSBoYW5kbGUgaXMgaW4gdGhlIFVWX0hBTkRMRV9DTE9TSU5HIHN0YXRlIG5vdywgaXQncyBzdGlsbAogICAgKiBwb3NzaWJsZSBmb3IgaXQgdG8gYmUgYWN0aXZlIGluIHRoZSBzZW5zZSB0aGF0IHV2X19pc19hY3RpdmUoKSByZXR1cm5zCiAgICAqIHRydWUuCkBAIC0yNjQsNyArMjY0LDIwIEBACiAgICAgY2FzZSBVVl9GU19FVkVOVDoKICAgICBjYXNlIFVWX0ZTX1BPTEw6CiAgICAgY2FzZSBVVl9QT0xMOgorICAgICAgYnJlYWs7CisKICAgICBjYXNlIFVWX1NJR05BTDoKKyAgICAgIC8qIElmIHRoZXJlIGFyZSBhbnkgY2F1Z2h0IHNpZ25hbHMgInRyYXBwZWQiIGluIHRoZSBzaWduYWwgcGlwZSwKKyAgICAgICAqIHdlIGNhbid0IGNhbGwgdGhlIGNsb3NlIGNhbGxiYWNrIHlldC4gUmVpbnNlcnRpbmcgdGhlIGhhbmRsZQorICAgICAgICogaW50byB0aGUgY2xvc2luZyBxdWV1ZSBtYWtlcyB0aGUgZXZlbnQgbG9vcCBzcGluIGJ1dCB0aGF0J3MKKyAgICAgICAqIG9rYXkgYmVjYXVzZSB3ZSBvbmx5IG5lZWQgdG8gZGVsaXZlciB0aGUgcGVuZGluZyBldmVudHMuCisgICAgICAgKi8KKyAgICAgIHNoID0gKHV2X3NpZ25hbF90KikgaGFuZGxlOworICAgICAgaWYgKHNoLT5jYXVnaHRfc2lnbmFscyA+IHNoLT5kaXNwYXRjaGVkX3NpZ25hbHMpIHsKKyAgICAgICAgaGFuZGxlLT5mbGFncyBePSBVVl9IQU5ETEVfQ0xPU0VEOworICAgICAgICB1dl9fbWFrZV9jbG9zZV9wZW5kaW5nKGhhbmRsZSk7ICAvKiBCYWNrIGludG8gdGhlIHF1ZXVlLiAqLworICAgICAgICByZXR1cm47CisgICAgICB9CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVVZfTkFNRURfUElQRToKQEAgLTQ2OCw1MiArNDgxLDMyIEBACiAgIGludCBwZWVyZmQ7CiAgIGludCBlcnI7CiAKKyAgKHZvaWQpICZlcnI7CiAgIGFzc2VydChzb2NrZmQgPj0gMCk7CiAKLSAgd2hpbGUgKDEpIHsKLSNpZiBkZWZpbmVkKF9fbGludXhfXykgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKLSAgICAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX18gPj0gMTApIHx8IFwKLSAgICBkZWZpbmVkKF9fTmV0QlNEX18pCi0gICAgc3RhdGljIGludCBub19hY2NlcHQ0OworICBkbworI2lmZGVmIHV2X19hY2NlcHQ0CisgICAgcGVlcmZkID0gdXZfX2FjY2VwdDQoc29ja2ZkLCBOVUxMLCBOVUxMLCBTT0NLX05PTkJMT0NLfFNPQ0tfQ0xPRVhFQyk7CisjZWxzZQorICAgIHBlZXJmZCA9IGFjY2VwdChzb2NrZmQsIE5VTEwsIE5VTEwpOworI2VuZGlmCisgIHdoaWxlIChwZWVyZmQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOwogCi0gICAgaWYgKG5vX2FjY2VwdDQpCi0gICAgICBnb3RvIHNraXA7CisgIGlmIChwZWVyZmQgPT0gLTEpCisgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCi0gICAgcGVlcmZkID0gdXZfX2FjY2VwdDQoc29ja2ZkLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBVVl9fU09DS19OT05CTE9DS3xVVl9fU09DS19DTE9FWEVDKTsKLSAgICBpZiAocGVlcmZkICE9IC0xKQotICAgICAgcmV0dXJuIHBlZXJmZDsKKyNpZm5kZWYgdXZfX2FjY2VwdDQKKyAgZXJyID0gdXZfX2Nsb2V4ZWMocGVlcmZkLCAxKTsKKyAgaWYgKGVyciA9PSAwKQorICAgIGVyciA9IHV2X19ub25ibG9jayhwZWVyZmQsIDEpOwogCi0gICAgaWYgKGVycm5vID09IEVJTlRSKQotICAgICAgY29udGludWU7Ci0KLSAgICBpZiAoZXJybm8gIT0gRU5PU1lTKQotICAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotCi0gICAgbm9fYWNjZXB0NCA9IDE7Ci1za2lwOgorICBpZiAoZXJyICE9IDApIHsKKyAgICB1dl9fY2xvc2UocGVlcmZkKTsKKyAgICByZXR1cm4gZXJyOworICB9CiAjZW5kaWYKIAotICAgIHBlZXJmZCA9IGFjY2VwdChzb2NrZmQsIE5VTEwsIE5VTEwpOwotICAgIGlmIChwZWVyZmQgPT0gLTEpIHsKLSAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKLSAgICAgICAgY29udGludWU7Ci0gICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7Ci0gICAgfQotCi0gICAgZXJyID0gdXZfX2Nsb2V4ZWMocGVlcmZkLCAxKTsKLSAgICBpZiAoZXJyID09IDApCi0gICAgICBlcnIgPSB1dl9fbm9uYmxvY2socGVlcmZkLCAxKTsKLQotICAgIGlmIChlcnIpIHsKLSAgICAgIHV2X19jbG9zZShwZWVyZmQpOwotICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGVlcmZkOwotICB9CisgIHJldHVybiBwZWVyZmQ7CiB9CiAKIApAQCAtNTI5LDcgKzUyMiw3IEBACiAjaWYgZGVmaW5lZChfX0FQUExFX18pCiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkb2xsYXItaW4taWRlbnRpZmllci1leHRlbnNpb24iCi0jaWYgZGVmaW5lZChfX0xQNjRfXykKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKSB8fCBUQVJHRVRfT1NfSVBIT05FCiAgIGV4dGVybiBpbnQgY2xvc2UkTk9DQU5DRUwoaW50KTsKICAgcmV0dXJuIGNsb3NlJE5PQ0FOQ0VMKGZkKTsKICNlbHNlCkBAIC03MDQsMTYgKzY5NywzOCBAQAogCiAKIGludCB1dl9jd2QoY2hhciogYnVmZmVyLCBzaXplX3QqIHNpemUpIHsKKyAgY2hhciBzY3JhdGNoWzEgKyBVVl9fUEFUSF9NQVhdOworCiAgIGlmIChidWZmZXIgPT0gTlVMTCB8fCBzaXplID09IE5VTEwpCiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKIAotICBpZiAoZ2V0Y3dkKGJ1ZmZlciwgKnNpemUpID09IE5VTEwpCisgIC8qIFRyeSB0byByZWFkIGRpcmVjdGx5IGludG8gdGhlIHVzZXIncyBidWZmZXIgZmlyc3QuLi4gKi8KKyAgaWYgKGdldGN3ZChidWZmZXIsICpzaXplKSAhPSBOVUxMKQorICAgIGdvdG8gZml4dXA7CisKKyAgaWYgKGVycm5vICE9IEVSQU5HRSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKKyAgLyogLi4ub3IgaW50byBzY3JhdGNoIHNwYWNlIGlmIHRoZSB1c2VyJ3MgYnVmZmVyIGlzIHRvbyBzbWFsbAorICAgKiBzbyB3ZSBjYW4gcmVwb3J0IGhvdyBtdWNoIHNwYWNlIHRvIHByb3ZpZGUgb24gdGhlIG5leHQgdHJ5LgorICAgKi8KKyAgaWYgKGdldGN3ZChzY3JhdGNoLCBzaXplb2Yoc2NyYXRjaCkpID09IE5VTEwpCisgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworCisgIGJ1ZmZlciA9IHNjcmF0Y2g7CisKK2ZpeHVwOgorCiAgICpzaXplID0gc3RybGVuKGJ1ZmZlcik7CisKICAgaWYgKCpzaXplID4gMSAmJiBidWZmZXJbKnNpemUgLSAxXSA9PSAnLycpIHsKLSAgICBidWZmZXJbKnNpemUtMV0gPSAnXDAnOwotICAgICgqc2l6ZSktLTsKKyAgICAqc2l6ZSAtPSAxOworICAgIGJ1ZmZlclsqc2l6ZV0gPSAnXDAnOworICB9CisKKyAgaWYgKGJ1ZmZlciA9PSBzY3JhdGNoKSB7CisgICAgKnNpemUgKz0gMTsKKyAgICByZXR1cm4gVVZfRU5PQlVGUzsKICAgfQogCiAgIHJldHVybiAwOwpAQCAtODIzLDggKzgzOCw4IEBACiAgIH0KIAogICBud2F0Y2hlcnMgPSBuZXh0X3Bvd2VyX29mX3R3byhsZW4gKyAyKSAtIDI7Ci0gIHdhdGNoZXJzID0gdXZfX3JlYWxsb2MobG9vcC0+d2F0Y2hlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKG53YXRjaGVycyArIDIpICogc2l6ZW9mKGxvb3AtPndhdGNoZXJzWzBdKSk7CisgIHdhdGNoZXJzID0gdXZfX3JlYWxsb2NmKGxvb3AtPndhdGNoZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobndhdGNoZXJzICsgMikgKiBzaXplb2YobG9vcC0+d2F0Y2hlcnNbMF0pKTsKIAogICBpZiAod2F0Y2hlcnMgPT0gTlVMTCkKICAgICBhYm9ydCgpOwpAQCAtOTc3LDI0ICs5OTIsMTcgQEAKIAogCiBpbnQgdXZfX29wZW5fY2xvZXhlYyhjb25zdCBjaGFyKiBwYXRoLCBpbnQgZmxhZ3MpIHsKLSAgaW50IGVycjsKKyNpZiBkZWZpbmVkKE9fQ0xPRVhFQykKICAgaW50IGZkOwogCi0jaWYgZGVmaW5lZChVVl9fT19DTE9FWEVDKQotICBzdGF0aWMgaW50IG5vX2Nsb2V4ZWM7CisgIGZkID0gb3BlbihwYXRoLCBmbGFncyB8IE9fQ0xPRVhFQyk7CisgIGlmIChmZCA9PSAtMSkKKyAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKLSAgaWYgKCFub19jbG9leGVjKSB7Ci0gICAgZmQgPSBvcGVuKHBhdGgsIGZsYWdzIHwgVVZfX09fQ0xPRVhFQyk7Ci0gICAgaWYgKGZkICE9IC0xKQotICAgICAgcmV0dXJuIGZkOwotCi0gICAgaWYgKGVycm5vICE9IEVJTlZBTCkKLSAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLQotICAgIC8qIE9fQ0xPRVhFQyBub3Qgc3VwcG9ydGVkLiAqLwotICAgIG5vX2Nsb2V4ZWMgPSAxOwotICB9Ci0jZW5kaWYKKyAgcmV0dXJuIGZkOworI2Vsc2UgIC8qIE9fQ0xPRVhFQyAqLworICBpbnQgZXJyOworICBpbnQgZmQ7CiAKICAgZmQgPSBvcGVuKHBhdGgsIGZsYWdzKTsKICAgaWYgKGZkID09IC0xKQpAQCAtMTAwNyw1OCArMTAxNSwzNSBAQAogICB9CiAKICAgcmV0dXJuIGZkOworI2VuZGlmICAvKiBPX0NMT0VYRUMgKi8KIH0KIAogCiBpbnQgdXZfX2R1cDJfY2xvZXhlYyhpbnQgb2xkZmQsIGludCBuZXdmZCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pCiAgIGludCByOwotI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfXyA+PSAxMCkgfHwgZGVmaW5lZChfX05ldEJTRF9fKQorCiAgIHIgPSBkdXAzKG9sZGZkLCBuZXdmZCwgT19DTE9FWEVDKTsKICAgaWYgKHIgPT0gLTEpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworCiAgIHJldHVybiByOwotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChGX0RVUDJGRF9DTE9FWEVDKQotICByID0gZmNudGwob2xkZmQsIEZfRFVQMkZEX0NMT0VYRUMsIG5ld2ZkKTsKLSAgaWYgKHIgIT0gLTEpCi0gICAgcmV0dXJuIHI7Ci0gIGlmIChlcnJubyAhPSBFSU5WQUwpCi0gICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotICAvKiBGYWxsIHRocm91Z2guICovCi0jZWxpZiBkZWZpbmVkKF9fbGludXhfXykKLSAgc3RhdGljIGludCBub19kdXAzOwotICBpZiAoIW5vX2R1cDMpIHsKLSAgICBkbwotICAgICAgciA9IHV2X19kdXAzKG9sZGZkLCBuZXdmZCwgVVZfX09fQ0xPRVhFQyk7Ci0gICAgd2hpbGUgKHIgPT0gLTEgJiYgZXJybm8gPT0gRUJVU1kpOwotICAgIGlmIChyICE9IC0xKQotICAgICAgcmV0dXJuIHI7Ci0gICAgaWYgKGVycm5vICE9IEVOT1NZUykKLSAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLSAgICAvKiBGYWxsIHRocm91Z2guICovCi0gICAgbm9fZHVwMyA9IDE7Ci0gIH0KLSNlbmRpZgotICB7Ci0gICAgaW50IGVycjsKLSAgICBkbwotICAgICAgciA9IGR1cDIob2xkZmQsIG5ld2ZkKTsKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKLSAgICB3aGlsZSAociA9PSAtMSAmJiBlcnJubyA9PSBFQlVTWSk7CiAjZWxzZQotICAgIHdoaWxlICgwKTsgIC8qIE5ldmVyIHJldHJ5LiAqLwotI2VuZGlmCisgIGludCBlcnI7CisgIGludCByOwogCi0gICAgaWYgKHIgPT0gLTEpCi0gICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisgIHIgPSBkdXAyKG9sZGZkLCBuZXdmZCk7ICAvKiBOZXZlciByZXRyeS4gKi8KKyAgaWYgKHIgPT0gLTEpCisgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCi0gICAgZXJyID0gdXZfX2Nsb2V4ZWMobmV3ZmQsIDEpOwotICAgIGlmIChlcnIpIHsKLSAgICAgIHV2X19jbG9zZShuZXdmZCk7Ci0gICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVybiByOworICBlcnIgPSB1dl9fY2xvZXhlYyhuZXdmZCwgMSk7CisgIGlmIChlcnIgIT0gMCkgeworICAgIHV2X19jbG9zZShuZXdmZCk7CisgICAgcmV0dXJuIGVycjsKICAgfQorCisgIHJldHVybiByOworI2VuZGlmCiB9CiAKIApAQCAtMTI2NSw2ICsxMjUwLDYyIEBACiB9CiAKIAoraW50IHV2X29zX2Vudmlyb24odXZfZW52X2l0ZW1fdCoqIGVudml0ZW1zLCBpbnQqIGNvdW50KSB7CisgIGludCBpLCBqLCBjbnQ7CisgIHV2X2Vudl9pdGVtX3QqIGVudml0ZW07CisKKyAgKmVudml0ZW1zID0gTlVMTDsKKyAgKmNvdW50ID0gMDsKKworICBmb3IgKGkgPSAwOyBlbnZpcm9uW2ldICE9IE5VTEw7IGkrKyk7CisKKyAgKmVudml0ZW1zID0gdXZfX2NhbGxvYyhpLCBzaXplb2YoKiplbnZpdGVtcykpOworCisgIGlmICgqZW52aXRlbXMgPT0gTlVMTCkKKyAgICByZXR1cm4gVVZfRU5PTUVNOworCisgIGZvciAoaiA9IDAsIGNudCA9IDA7IGogPCBpOyBqKyspIHsKKyAgICBjaGFyKiBidWY7CisgICAgY2hhciogcHRyOworCisgICAgaWYgKGVudmlyb25bal0gPT0gTlVMTCkKKyAgICAgIGJyZWFrOworCisgICAgYnVmID0gdXZfX3N0cmR1cChlbnZpcm9uW2pdKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICBnb3RvIGZhaWw7CisKKyAgICBwdHIgPSBzdHJjaHIoYnVmLCAnPScpOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgdXZfX2ZyZWUoYnVmKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgICpwdHIgPSAnXDAnOworCisgICAgZW52aXRlbSA9ICYoKmVudml0ZW1zKVtjbnRdOworICAgIGVudml0ZW0tPm5hbWUgPSBidWY7CisgICAgZW52aXRlbS0+dmFsdWUgPSBwdHIgKyAxOworCisgICAgY250Kys7CisgIH0KKworICAqY291bnQgPSBjbnQ7CisgIHJldHVybiAwOworCitmYWlsOgorICBmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKyAgICBlbnZpdGVtID0gJigqZW52aXRlbXMpW2NudF07CisgICAgdXZfX2ZyZWUoZW52aXRlbS0+bmFtZSk7CisgIH0KKyAgdXZfX2ZyZWUoKmVudml0ZW1zKTsKKworICAqZW52aXRlbXMgPSBOVUxMOworICAqY291bnQgPSAwOworICByZXR1cm4gVVZfRU5PTUVNOworfQorCisKIGludCB1dl9vc19nZXRlbnYoY29uc3QgY2hhciogbmFtZSwgY2hhciogYnVmZmVyLCBzaXplX3QqIHNpemUpIHsKICAgY2hhciogdmFyOwogICBzaXplX3QgbGVuOwpAQCAtMTQ4OCwzICsxNTI5LDE3IEBACiAgIHR2LT50dl91c2VjID0gKGludDMyX3QpIHRpbWUudHZfdXNlYzsKICAgcmV0dXJuIDA7CiB9CisKK3ZvaWQgdXZfc2xlZXAodW5zaWduZWQgaW50IG1zZWMpIHsKKyAgc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQ7CisgIGludCByYzsKKworICB0aW1lb3V0LnR2X3NlYyA9IG1zZWMgLyAxMDAwOworICB0aW1lb3V0LnR2X25zZWMgPSAobXNlYyAlIDEwMDApICogMTAwMCAqIDEwMDA7CisKKyAgZG8KKyAgICByYyA9IG5hbm9zbGVlcCgmdGltZW91dCwgJnRpbWVvdXQpOworICB3aGlsZSAocmMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisgIGFzc2VydChyYyA9PSAwKTsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2N5Z3dpbi5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY3lnd2luLmMKaW5kZXggOWRhMjBlMi4uMTY5OTU4ZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY3lnd2luLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvY3lnd2luLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKICAgcmV0dXJuIFVWX0VOT1NZUzsKIH0KIAotdm9pZCB1dl9mcmVlX2NwdV9pbmZvKHV2X2NwdV9pbmZvX3QqIGNwdV9pbmZvcywgaW50IGNvdW50KSB7Ci0gICh2b2lkKWNwdV9pbmZvczsKLSAgKHZvaWQpY291bnQ7Cit1aW50NjRfdCB1dl9nZXRfY29uc3RyYWluZWRfbWVtb3J5KHZvaWQpIHsKKyAgcmV0dXJuIDA7ICAvKiBNZW1vcnkgY29uc3RyYWludHMgYXJlIHVua25vd24uICovCiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9kYXJ3aW4tcHJvY3RpdGxlLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9kYXJ3aW4tcHJvY3RpdGxlLmMKaW5kZXggZTUwNWJkZC4uNTI4ODA4MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZGFyd2luLXByb2N0aXRsZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2Rhcndpbi1wcm9jdGl0bGUuYwpAQCAtMjMsNjYgKzIzLDYxIEBACiAKICNpbmNsdWRlIDxkbGZjbi5oPgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CiAKICNpZiAhVEFSR0VUX09TX0lQSE9ORQotIyBpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotIyBpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbmNsdWRlICJkYXJ3aW4tc3R1Yi5oIgogI2VuZGlmCiAKLSNkZWZpbmUgUyhzKSBwQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhOVUxMLCAocyksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkKIAorc3RhdGljIGludCB1dl9fcHRocmVhZF9zZXRuYW1lX25wKGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgY2hhciBuYW1lYnVmWzY0XTsgIC8qIE1BWFRIUkVBRE5BTUVTSVpFICovCisgIGludCBlcnI7CiAKLXN0YXRpYyBpbnQgKCpkeW5hbWljX3B0aHJlYWRfc2V0bmFtZV9ucCkoY29uc3QgY2hhciogbmFtZSk7Ci0jaWYgIVRBUkdFVF9PU19JUEhPTkUKLXN0YXRpYyBDRlN0cmluZ1JlZiAoKnBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKShDRkFsbG9jYXRvclJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ0VuY29kaW5nKTsKLXN0YXRpYyBDRkJ1bmRsZVJlZiAoKnBDRkJ1bmRsZUdldEJ1bmRsZVdpdGhJZGVudGlmaWVyKShDRlN0cmluZ1JlZik7Ci1zdGF0aWMgdm9pZCAqKCpwQ0ZCdW5kbGVHZXREYXRhUG9pbnRlckZvck5hbWUpKENGQnVuZGxlUmVmLCBDRlN0cmluZ1JlZik7Ci1zdGF0aWMgdm9pZCAqKCpwQ0ZCdW5kbGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1lKShDRkJ1bmRsZVJlZiwgQ0ZTdHJpbmdSZWYpOwotc3RhdGljIENGVHlwZVJlZiAoKnBMU0dldEN1cnJlbnRBcHBsaWNhdGlvbkFTTikodm9pZCk7Ci1zdGF0aWMgT1NTdGF0dXMgKCpwTFNTZXRBcHBsaWNhdGlvbkluZm9ybWF0aW9uSXRlbSkoaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGVHlwZVJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlSZWYqKTsKLXN0YXRpYyB2b2lkKiBhcHBsaWNhdGlvbl9zZXJ2aWNlc19oYW5kbGU7Ci1zdGF0aWMgdm9pZCogY29yZV9mb3VuZGF0aW9uX2hhbmRsZTsKLXN0YXRpYyBDRkJ1bmRsZVJlZiBsYXVuY2hfc2VydmljZXNfYnVuZGxlOwotc3RhdGljIENGU3RyaW5nUmVmKiBkaXNwbGF5X25hbWVfa2V5Owotc3RhdGljIENGRGljdGlvbmFyeVJlZiAoKnBDRkJ1bmRsZUdldEluZm9EaWN0aW9uYXJ5KShDRkJ1bmRsZVJlZik7Ci1zdGF0aWMgQ0ZCdW5kbGVSZWYgKCpwQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKSh2b2lkKTsKLXN0YXRpYyBDRkJ1bmRsZVJlZiBoaV9zZXJ2aWNlc19idW5kbGU7Ci1zdGF0aWMgT1NTdGF0dXMgKCpwU2V0QXBwbGljYXRpb25Jc0RhZW1vbikoaW50KTsKLXN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgKCpwTFNBcHBsaWNhdGlvbkNoZWNrSW4pKGludCwgQ0ZEaWN0aW9uYXJ5UmVmKTsKLXN0YXRpYyB2b2lkICgqcExTU2V0QXBwbGljYXRpb25MYXVuY2hTZXJ2aWNlc1NlcnZlckNvbm5lY3Rpb25TdGF0dXMpKHVpbnQ2NF90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCopOworICBzdHJuY3B5KG5hbWVidWYsIG5hbWUsIHNpemVvZihuYW1lYnVmKSAtIDEpOworICBuYW1lYnVmW3NpemVvZihuYW1lYnVmKSAtIDFdID0gJ1wwJzsKIAorICBlcnIgPSBwdGhyZWFkX3NldG5hbWVfbnAobmFtZWJ1Zik7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIFVWX19FUlIoZXJyKTsKIAotVVZfREVTVFJVQ1RPUihzdGF0aWMgdm9pZCB1dl9fc2V0X3Byb2Nlc3NfdGl0bGVfcGxhdGZvcm1fZmluaSh2b2lkKSkgewotICBpZiAoY29yZV9mb3VuZGF0aW9uX2hhbmRsZSAhPSBOVUxMKSB7Ci0gICAgZGxjbG9zZShjb3JlX2ZvdW5kYXRpb25faGFuZGxlKTsKLSAgICBjb3JlX2ZvdW5kYXRpb25faGFuZGxlID0gTlVMTDsKLSAgfQotCi0gIGlmIChhcHBsaWNhdGlvbl9zZXJ2aWNlc19oYW5kbGUgIT0gTlVMTCkgewotICAgIGRsY2xvc2UoYXBwbGljYXRpb25fc2VydmljZXNfaGFuZGxlKTsKLSAgICBhcHBsaWNhdGlvbl9zZXJ2aWNlc19oYW5kbGUgPSBOVUxMOwotICB9CisgIHJldHVybiAwOwogfQotI2VuZGlmICAvKiAhVEFSR0VUX09TX0lQSE9ORSAqLwogCiAKLXZvaWQgdXZfX3NldF9wcm9jZXNzX3RpdGxlX3BsYXRmb3JtX2luaXQodm9pZCkgewotICAvKiBwdGhyZWFkX3NldG5hbWVfbnAoKSBmaXJzdCBhcHBlYXJlZCBpbiBPUyBYIDEwLjYgYW5kIGlPUyAzLjIuICovCi0gICoodm9pZCAqKikoJmR5bmFtaWNfcHRocmVhZF9zZXRuYW1lX25wKSA9Ci0gICAgICBkbHN5bShSVExEX0RFRkFVTFQsICJwdGhyZWFkX3NldG5hbWVfbnAiKTsKK2ludCB1dl9fc2V0X3Byb2Nlc3NfdGl0bGUoY29uc3QgY2hhciogdGl0bGUpIHsKKyNpZiBUQVJHRVRfT1NfSVBIT05FCisgIHJldHVybiB1dl9fcHRocmVhZF9zZXRuYW1lX25wKHRpdGxlKTsKKyNlbHNlCisgIENGU3RyaW5nUmVmICgqcENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcpKENGQWxsb2NhdG9yUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyk7CisgIENGQnVuZGxlUmVmICgqcENGQnVuZGxlR2V0QnVuZGxlV2l0aElkZW50aWZpZXIpKENGU3RyaW5nUmVmKTsKKyAgdm9pZCAqKCpwQ0ZCdW5kbGVHZXREYXRhUG9pbnRlckZvck5hbWUpKENGQnVuZGxlUmVmLCBDRlN0cmluZ1JlZik7CisgIHZvaWQgKigqcENGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZSkoQ0ZCdW5kbGVSZWYsIENGU3RyaW5nUmVmKTsKKyAgQ0ZUeXBlUmVmICgqcExTR2V0Q3VycmVudEFwcGxpY2F0aW9uQVNOKSh2b2lkKTsKKyAgT1NTdGF0dXMgKCpwTFNTZXRBcHBsaWNhdGlvbkluZm9ybWF0aW9uSXRlbSkoaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlR5cGVSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmKik7CisgIHZvaWQqIGFwcGxpY2F0aW9uX3NlcnZpY2VzX2hhbmRsZTsKKyAgdm9pZCogY29yZV9mb3VuZGF0aW9uX2hhbmRsZTsKKyAgQ0ZCdW5kbGVSZWYgbGF1bmNoX3NlcnZpY2VzX2J1bmRsZTsKKyAgQ0ZTdHJpbmdSZWYqIGRpc3BsYXlfbmFtZV9rZXk7CisgIENGRGljdGlvbmFyeVJlZiAoKnBDRkJ1bmRsZUdldEluZm9EaWN0aW9uYXJ5KShDRkJ1bmRsZVJlZik7CisgIENGQnVuZGxlUmVmICgqcENGQnVuZGxlR2V0TWFpbkJ1bmRsZSkodm9pZCk7CisgIENGRGljdGlvbmFyeVJlZiAoKnBMU0FwcGxpY2F0aW9uQ2hlY2tJbikoaW50LCBDRkRpY3Rpb25hcnlSZWYpOworICB2b2lkICgqcExTU2V0QXBwbGljYXRpb25MYXVuY2hTZXJ2aWNlc1NlcnZlckNvbm5lY3Rpb25TdGF0dXMpKHVpbnQ2NF90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKTsKKyAgQ0ZUeXBlUmVmIGFzbjsKKyAgaW50IGVycjsKIAotI2lmICFUQVJHRVRfT1NfSVBIT05FCisgIGVyciA9IFVWX0VOT0VOVDsKICAgYXBwbGljYXRpb25fc2VydmljZXNfaGFuZGxlID0gZGxvcGVuKCIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZlcnNpb25zL0EvQXBwbGljYXRpb25TZXJ2aWNlcyIsCkBAIC0xMTEsNiArMTA2LDggQEAKICAgICBnb3RvIG91dDsKICAgfQogCisjZGVmaW5lIFMocykgcENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgKHMpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpCisKICAgbGF1bmNoX3NlcnZpY2VzX2J1bmRsZSA9CiAgICAgICBwQ0ZCdW5kbGVHZXRCdW5kbGVXaXRoSWRlbnRpZmllcihTKCJjb20uYXBwbGUuTGF1bmNoU2VydmljZXMiKSk7CiAKQEAgLTE0MSw1OCArMTM4LDU1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNGQnVuZGxlR2V0SW5mb0RpY3Rpb25hcnkiKTsKICAgKih2b2lkICoqKSgmcENGQnVuZGxlR2V0TWFpbkJ1bmRsZSkgPSBkbHN5bShjb3JlX2ZvdW5kYXRpb25faGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNGQnVuZGxlR2V0TWFpbkJ1bmRsZSIpOwotCiAgIGlmIChwQ0ZCdW5kbGVHZXRJbmZvRGljdGlvbmFyeSA9PSBOVUxMIHx8IHBDRkJ1bmRsZUdldE1haW5CdW5kbGUgPT0gTlVMTCkKICAgICBnb3RvIG91dDsKIAotICAvKiBCbGFjayAxMC45IG1hZ2ljLCB0byByZW1vdmUgKE5vdCByZXNwb25kaW5nKSBtYXJrIGluIEFjdGl2aXR5IE1vbml0b3IgKi8KLSAgaGlfc2VydmljZXNfYnVuZGxlID0KLSAgICAgIHBDRkJ1bmRsZUdldEJ1bmRsZVdpdGhJZGVudGlmaWVyKFMoImNvbS5hcHBsZS5ISVNlcnZpY2VzIikpOwotCi0gIGlmIChoaV9zZXJ2aWNlc19idW5kbGUgPT0gTlVMTCkKLSAgICBnb3RvIG91dDsKLQotICAqKHZvaWQgKiopKCZwU2V0QXBwbGljYXRpb25Jc0RhZW1vbikgPSBwQ0ZCdW5kbGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1lKAotICAgICAgaGlfc2VydmljZXNfYnVuZGxlLAotICAgICAgUygiU2V0QXBwbGljYXRpb25Jc0RhZW1vbiIpKTsKICAgKih2b2lkICoqKSgmcExTQXBwbGljYXRpb25DaGVja0luKSA9IHBDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUoCiAgICAgICBsYXVuY2hfc2VydmljZXNfYnVuZGxlLAogICAgICAgUygiX0xTQXBwbGljYXRpb25DaGVja0luIikpOworCisgIGlmIChwTFNBcHBsaWNhdGlvbkNoZWNrSW4gPT0gTlVMTCkKKyAgICBnb3RvIG91dDsKKwogICAqKHZvaWQgKiopKCZwTFNTZXRBcHBsaWNhdGlvbkxhdW5jaFNlcnZpY2VzU2VydmVyQ29ubmVjdGlvblN0YXR1cykgPQogICAgICAgcENGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZSgKICAgICAgICAgICBsYXVuY2hfc2VydmljZXNfYnVuZGxlLAogICAgICAgICAgIFMoIl9MU1NldEFwcGxpY2F0aW9uTGF1bmNoU2VydmljZXNTZXJ2ZXJDb25uZWN0aW9uU3RhdHVzIikpOwogCi0gIGlmIChwU2V0QXBwbGljYXRpb25Jc0RhZW1vbiA9PSBOVUxMIHx8Ci0gICAgICBwTFNBcHBsaWNhdGlvbkNoZWNrSW4gPT0gTlVMTCB8fAotICAgICAgcExTU2V0QXBwbGljYXRpb25MYXVuY2hTZXJ2aWNlc1NlcnZlckNvbm5lY3Rpb25TdGF0dXMgPT0gTlVMTCkgeworICBpZiAocExTU2V0QXBwbGljYXRpb25MYXVuY2hTZXJ2aWNlc1NlcnZlckNvbm5lY3Rpb25TdGF0dXMgPT0gTlVMTCkKKyAgICBnb3RvIG91dDsKKworICBwTFNTZXRBcHBsaWNhdGlvbkxhdW5jaFNlcnZpY2VzU2VydmVyQ29ubmVjdGlvblN0YXR1cygwLCBOVUxMKTsKKworICAvKiBDaGVjayBpbnRvIHByb2Nlc3MgbWFuYWdlcj8hICovCisgIHBMU0FwcGxpY2F0aW9uQ2hlY2tJbigtMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBDRkJ1bmRsZUdldEluZm9EaWN0aW9uYXJ5KHBDRkJ1bmRsZUdldE1haW5CdW5kbGUoKSkpOworCisgIGFzbiA9IHBMU0dldEN1cnJlbnRBcHBsaWNhdGlvbkFTTigpOworCisgIGVyciA9IFVWX0VCVVNZOworICBpZiAoYXNuID09IE5VTEwpCisgICAgZ290byBvdXQ7CisKKyAgZXJyID0gVVZfRUlOVkFMOworICBpZiAocExTU2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbkl0ZW0oLTIsICAvKiBNYWdpYyB2YWx1ZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkaXNwbGF5X25hbWVfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyh0aXRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSAhPSBub0VycikgewogICAgIGdvdG8gb3V0OwogICB9CiAKLSAgcmV0dXJuOworICB1dl9fcHRocmVhZF9zZXRuYW1lX25wKHRpdGxlKTsgIC8qIERvbid0IGNhcmUgaWYgaXQgZmFpbHMuICovCisgIGVyciA9IDA7CiAKIG91dDoKLSAgdXZfX3NldF9wcm9jZXNzX3RpdGxlX3BsYXRmb3JtX2ZpbmkoKTsKKyAgaWYgKGNvcmVfZm91bmRhdGlvbl9oYW5kbGUgIT0gTlVMTCkKKyAgICBkbGNsb3NlKGNvcmVfZm91bmRhdGlvbl9oYW5kbGUpOworCisgIGlmIChhcHBsaWNhdGlvbl9zZXJ2aWNlc19oYW5kbGUgIT0gTlVMTCkKKyAgICBkbGNsb3NlKGFwcGxpY2F0aW9uX3NlcnZpY2VzX2hhbmRsZSk7CisKKyAgcmV0dXJuIGVycjsKICNlbmRpZiAgLyogIVRBUkdFVF9PU19JUEhPTkUgKi8KIH0KLQotCi12b2lkIHV2X19zZXRfcHJvY2Vzc190aXRsZShjb25zdCBjaGFyKiB0aXRsZSkgewotI2lmICFUQVJHRVRfT1NfSVBIT05FCi0gIGlmIChjb3JlX2ZvdW5kYXRpb25faGFuZGxlICE9IE5VTEwgJiYgcFNldEFwcGxpY2F0aW9uSXNEYWVtb24oMSkgIT0gbm9FcnIpIHsKLSAgICBDRlR5cGVSZWYgYXNuOwotICAgIHBMU1NldEFwcGxpY2F0aW9uTGF1bmNoU2VydmljZXNTZXJ2ZXJDb25uZWN0aW9uU3RhdHVzKDAsIE5VTEwpOwotICAgIHBMU0FwcGxpY2F0aW9uQ2hlY2tJbigvKiBNYWdpYyB2YWx1ZSAqLyAtMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcENGQnVuZGxlR2V0SW5mb0RpY3Rpb25hcnkocENGQnVuZGxlR2V0TWFpbkJ1bmRsZSgpKSk7Ci0gICAgYXNuID0gcExTR2V0Q3VycmVudEFwcGxpY2F0aW9uQVNOKCk7Ci0gICAgcExTU2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbkl0ZW0oLyogTWFnaWMgdmFsdWUgKi8gLTIsIGFzbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGlzcGxheV9uYW1lX2tleSwgUyh0aXRsZSksIE5VTEwpOwotICB9Ci0jZW5kaWYgIC8qICFUQVJHRVRfT1NfSVBIT05FICovCi0KLSAgaWYgKGR5bmFtaWNfcHRocmVhZF9zZXRuYW1lX25wICE9IE5VTEwpIHsKLSAgICBjaGFyIG5hbWVidWZbNjRdOyAgLyogTUFYVEhSRUFETkFNRVNJWkUgKi8KLSAgICB1dl9fc3Ryc2NweShuYW1lYnVmLCB0aXRsZSwgc2l6ZW9mKG5hbWVidWYpKTsKLSAgICBkeW5hbWljX3B0aHJlYWRfc2V0bmFtZV9ucChuYW1lYnVmKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZGFyd2luLXN0dWIuaCBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2Rhcndpbi1zdHViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzY2Y2NwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2Rhcndpbi1zdHViLmgKQEAgLTAsMCArMSw5NyBAQAorLyogQ29weXJpZ2h0IGxpYnV2IHByb2plY3QgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIFVWX0RBUldJTl9TVFVCX0hfCisjZGVmaW5lIFVWX0RBUldJTl9TVFVCX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworc3RydWN0IENGQXJyYXlDYWxsQmFja3M7CitzdHJ1Y3QgQ0ZSdW5Mb29wU291cmNlQ29udGV4dDsKK3N0cnVjdCBGU0V2ZW50U3RyZWFtQ29udGV4dDsKKwordHlwZWRlZiBkb3VibGUgQ0ZBYnNvbHV0ZVRpbWU7Cit0eXBlZGVmIGRvdWJsZSBDRlRpbWVJbnRlcnZhbDsKK3R5cGVkZWYgaW50IEZTRXZlbnRTdHJlYW1FdmVudEZsYWdzOwordHlwZWRlZiBpbnQgT1NTdGF0dXM7Cit0eXBlZGVmIGxvbmcgQ0ZJbmRleDsKK3R5cGVkZWYgc3RydWN0IENGQXJyYXlDYWxsQmFja3MgQ0ZBcnJheUNhbGxCYWNrczsKK3R5cGVkZWYgc3RydWN0IENGUnVuTG9vcFNvdXJjZUNvbnRleHQgQ0ZSdW5Mb29wU291cmNlQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IEZTRXZlbnRTdHJlYW1Db250ZXh0IEZTRXZlbnRTdHJlYW1Db250ZXh0OwordHlwZWRlZiB1aW50MzJfdCBGU0V2ZW50U3RyZWFtQ3JlYXRlRmxhZ3M7Cit0eXBlZGVmIHVpbnQ2NF90IEZTRXZlbnRTdHJlYW1FdmVudElkOwordHlwZWRlZiB1bnNpZ25lZCBDRlN0cmluZ0VuY29kaW5nOwordHlwZWRlZiB2b2lkKiBDRkFsbG9jYXRvclJlZjsKK3R5cGVkZWYgdm9pZCogQ0ZBcnJheVJlZjsKK3R5cGVkZWYgdm9pZCogQ0ZCdW5kbGVSZWY7Cit0eXBlZGVmIHZvaWQqIENGRGljdGlvbmFyeVJlZjsKK3R5cGVkZWYgdm9pZCogQ0ZSdW5Mb29wUmVmOwordHlwZWRlZiB2b2lkKiBDRlJ1bkxvb3BTb3VyY2VSZWY7Cit0eXBlZGVmIHZvaWQqIENGU3RyaW5nUmVmOwordHlwZWRlZiB2b2lkKiBDRlR5cGVSZWY7Cit0eXBlZGVmIHZvaWQqIEZTRXZlbnRTdHJlYW1SZWY7CisKK3R5cGVkZWYgdm9pZCAoKkZTRXZlbnRTdHJlYW1DYWxsYmFjaykoY29uc3QgRlNFdmVudFN0cmVhbVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZTRXZlbnRTdHJlYW1FdmVudEZsYWdzKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlNFdmVudFN0cmVhbUV2ZW50SWQqKTsKKworc3RydWN0IENGUnVuTG9vcFNvdXJjZUNvbnRleHQgeworICBDRkluZGV4IHZlcnNpb247CisgIHZvaWQqIGluZm87CisgIHZvaWQqIHBhZFs3XTsKKyAgdm9pZCAoKnBlcmZvcm0pKHZvaWQqKTsKK307CisKK3N0cnVjdCBGU0V2ZW50U3RyZWFtQ29udGV4dCB7CisgIENGSW5kZXggdmVyc2lvbjsKKyAgdm9pZCogaW5mbzsKKyAgdm9pZCogcGFkWzNdOworfTsKKworc3RhdGljIGNvbnN0IENGU3RyaW5nRW5jb2Rpbmcga0NGU3RyaW5nRW5jb2RpbmdVVEY4ID0gMHg4MDAwMTAwOworc3RhdGljIGNvbnN0IE9TU3RhdHVzIG5vRXJyID0gMDsKKworc3RhdGljIGNvbnN0IEZTRXZlbnRTdHJlYW1FdmVudElkIGtGU0V2ZW50U3RyZWFtRXZlbnRJZFNpbmNlTm93ID0gLTE7CisKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1DcmVhdGVGbGFnTm9EZWZlciA9IDI7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtQ3JlYXRlRmxhZ0ZpbGVFdmVudHMgPSAxNjsKKworc3RhdGljIGNvbnN0IGludCBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0V2ZW50SWRzV3JhcHBlZCA9IDg7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSGlzdG9yeURvbmUgPSAxNjsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtQ2hhbmdlT3duZXIgPSAweDQwMDA7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUNyZWF0ZWQgPSAweDEwMDsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtRmluZGVySW5mb01vZCA9IDB4MjAwMDsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtSW5vZGVNZXRhTW9kID0gMHg0MDA7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUlzRGlyID0gMHgyMDAwMDsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtTW9kaWZpZWQgPSAweDEwMDA7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbVJlbW92ZWQgPSAweDIwMDsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtUmVuYW1lZCA9IDB4ODAwOworc3RhdGljIGNvbnN0IGludCBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1YYXR0ck1vZCA9IDB4ODAwMDsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdLZXJuZWxEcm9wcGVkID0gNDsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdNb3VudCA9IDY0Oworc3RhdGljIGNvbnN0IGludCBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ1Jvb3RDaGFuZ2VkID0gMzI7CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnVW5tb3VudCA9IDEyODsKK3N0YXRpYyBjb25zdCBpbnQga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdVc2VyRHJvcHBlZCA9IDI7CisKKyNlbmRpZiAgLyogVVZfREFSV0lOX1NUVUJfSF8gKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2Rhcndpbi5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZGFyd2luLmMKaW5kZXggZTRjZDhmZi4uNjU0YWJhMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZGFyd2luLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZGFyd2luLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogICBpbnQgd2hpY2hbXSA9IHtDVExfSFcsIEhXX01FTVNJWkV9OwogICBzaXplX3Qgc2l6ZSA9IHNpemVvZihpbmZvKTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQorICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKICAgcmV0dXJuICh1aW50NjRfdCkgaW5mbzsKQEAgLTEyNyw3ICsxMjcsNyBAQAogICBzaXplX3Qgc2l6ZSA9IHNpemVvZihpbmZvKTsKICAgaW50IHdoaWNoW10gPSB7Q1RMX1ZNLCBWTV9MT0FEQVZHfTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApIDwgMCkgcmV0dXJuOworICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSA8IDApIHJldHVybjsKIAogICBhdmdbMF0gPSAoZG91YmxlKSBpbmZvLmxkYXZnWzBdIC8gaW5mby5mc2NhbGU7CiAgIGF2Z1sxXSA9IChkb3VibGUpIGluZm8ubGRhdmdbMV0gLyBpbmZvLmZzY2FsZTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogICBzaXplX3Qgc2l6ZSA9IHNpemVvZihpbmZvKTsKICAgc3RhdGljIGludCB3aGljaFtdID0ge0NUTF9LRVJOLCBLRVJOX0JPT1RUSU1FfTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQorICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKICAgbm93ID0gdGltZShOVUxMKTsKQEAgLTIyMywxNCArMjIzLDMgQEAKIAogICByZXR1cm4gMDsKIH0KLQotCi12b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOwotICB9Ci0KLSAgdXZfX2ZyZWUoY3B1X2luZm9zKTsKLX0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2ZyZWVic2QuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2ZyZWVic2QuYwppbmRleCA3ZGU4OGQ2Li5lZjc3ZTEyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9mcmVlYnNkLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZnJlZWJzZC5jCkBAIC05NSw3ICs5NSw3IEBACiAgIG1pYlszXSA9IC0xOwogCiAgIGFic3BhdGhfc2l6ZSA9IHNpemVvZiBhYnNwYXRoOwotICBpZiAoc3lzY3RsKG1pYiwgNCwgYWJzcGF0aCwgJmFic3BhdGhfc2l6ZSwgTlVMTCwgMCkpCisgIGlmIChzeXNjdGwobWliLCBBUlJBWV9TSVpFKG1pYiksIGFic3BhdGgsICZhYnNwYXRoX3NpemUsIE5VTEwsIDApKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAogICBhc3NlcnQoYWJzcGF0aF9zaXplID4gMCk7CkBAIC0xMzAsNyArMTMwLDcgQEAKIAogICBzaXplX3Qgc2l6ZSA9IHNpemVvZihpbmZvKTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQorICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKICAgcmV0dXJuICh1aW50NjRfdCkgaW5mbzsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICBzaXplX3Qgc2l6ZSA9IHNpemVvZihpbmZvKTsKICAgaW50IHdoaWNoW10gPSB7Q1RMX1ZNLCBWTV9MT0FEQVZHfTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApIDwgMCkgcmV0dXJuOworICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSA8IDApIHJldHVybjsKIAogICBhdmdbMF0gPSAoZG91YmxlKSBpbmZvLmxkYXZnWzBdIC8gaW5mby5mc2NhbGU7CiAgIGF2Z1sxXSA9IChkb3VibGUpIGluZm8ubGRhdmdbMV0gLyBpbmZvLmZzY2FsZTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogCiAgIGtpbmZvX3NpemUgPSBzaXplb2Yoa2luZm8pOwogCi0gIGlmIChzeXNjdGwobWliLCA0LCAma2luZm8sICZraW5mb19zaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bChtaWIsIEFSUkFZX1NJWkUobWliKSwgJmtpbmZvLCAma2luZm9fc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CkBAIC0yOTAsMTIgKzI5MCwyNiBAQAogfQogCiAKLXZvaWQgdXZfZnJlZV9jcHVfaW5mbyh1dl9jcHVfaW5mb190KiBjcHVfaW5mb3MsIGludCBjb3VudCkgewotICBpbnQgaTsKK2ludCB1dl9fc2VuZG1tc2coaW50IGZkLAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXZfX21tc2doZHIqIG1tc2csCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2bGVuLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsKKyNpZiBfX0ZyZWVCU0RfXyA+PSAxMQorICByZXR1cm4gc2VuZG1tc2coZmQsIG1tc2csIHZsZW4sIGZsYWdzKTsKKyNlbHNlCisgIHJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7CisjZW5kaWYKK30KIAotICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgIHV2X19mcmVlKGNwdV9pbmZvc1tpXS5tb2RlbCk7Ci0gIH0KIAotICB1dl9fZnJlZShjcHVfaW5mb3MpOworaW50IHV2X19yZWN2bW1zZyhpbnQgZmQsCisgICAgICAgICAgICAgICAgIHN0cnVjdCB1dl9fbW1zZ2hkciogbW1zZywKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZsZW4sCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KSB7CisjaWYgX19GcmVlQlNEX18gPj0gMTEKKyAgcmV0dXJuIHJlY3ZtbXNnKGZkLCBtbXNnLCB2bGVuLCBmbGFncywgdGltZW91dCk7CisjZWxzZQorICByZXR1cm4gZXJybm8gPSBFTk9TWVMsIC0xOworI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9mcy5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZnMuYwppbmRleCA1ZmIzNGYxYi4uZjM3NzQ5YyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZnMuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9mcy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNzAsNiArNzEsMjAgQEAKICMgaW5jbHVkZSA8dXRpbWUuaD4KICNlbmRpZgogCisjaWYgZGVmaW5lZChfX0FQUExFX18pICAgICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKF9fRHJhZ29uRmx5X18pICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoX19GcmVlQlNEX18pICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoX19OZXRCU0RfXykKKyMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjIGluY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VsaWYgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChfX01WU19fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19IQUlLVV9fKQorIyBpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisKICNpZiBkZWZpbmVkKF9BSVgpICYmIF9YT1BFTl9TT1VSQ0UgPD0gNjAwCiBleHRlcm4gY2hhciAqbWtkdGVtcChjaGFyICp0ZW1wbGF0ZSk7IC8qIFNlZSBpc3N1ZSAjNzQwIG9uIEFJWCA8IDcgKi8KICNlbmRpZgpAQCAtMTkwLDYgKzIwNSwyMCBAQAogfQogCiAKK1VWX1VOVVNFRChzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHV2X19mc190b190aW1lc3BlYyhkb3VibGUgdGltZSkpIHsKKyAgc3RydWN0IHRpbWVzcGVjIHRzOworICB0cy50dl9zZWMgID0gdGltZTsKKyAgdHMudHZfbnNlYyA9ICh1aW50NjRfdCkodGltZSAqIDEwMDAwMDApICUgMTAwMDAwMCAqIDEwMDA7CisgIHJldHVybiB0czsKK30KKworVVZfVU5VU0VEKHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB1dl9fZnNfdG9fdGltZXZhbChkb3VibGUgdGltZSkpIHsKKyAgc3RydWN0IHRpbWV2YWwgdHY7CisgIHR2LnR2X3NlYyAgPSB0aW1lOworICB0di50dl91c2VjID0gKHVpbnQ2NF90KSh0aW1lICogMTAwMDAwMCkgJSAxMDAwMDAwOworICByZXR1cm4gdHY7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHV2X19mc19mdXRpbWUodXZfZnNfdCogcmVxKSB7CiAjaWYgZGVmaW5lZChfX2xpbnV4X18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfHwgZGVmaW5lZChfQUlYNzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xOTgsMTEgKzIyNywxMyBAQAogICAgKiBmb3IgdGhlIHNha2Ugb2YgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBwbGF0Zm9ybXMuCiAgICAqLwogICBzdHJ1Y3QgdGltZXNwZWMgdHNbMl07Ci0gIHRzWzBdLnR2X3NlYyAgPSByZXEtPmF0aW1lOwotICB0c1swXS50dl9uc2VjID0gKHVpbnQ2NF90KShyZXEtPmF0aW1lICogMTAwMDAwMCkgJSAxMDAwMDAwICogMTAwMDsKLSAgdHNbMV0udHZfc2VjICA9IHJlcS0+bXRpbWU7Ci0gIHRzWzFdLnR2X25zZWMgPSAodWludDY0X3QpKHJlcS0+bXRpbWUgKiAxMDAwMDAwKSAlIDEwMDAwMDAgKiAxMDAwOworICB0c1swXSA9IHV2X19mc190b190aW1lc3BlYyhyZXEtPmF0aW1lKTsKKyAgdHNbMV0gPSB1dl9fZnNfdG9fdGltZXNwZWMocmVxLT5tdGltZSk7CisjaWYgZGVmaW5lZChfX0FORFJPSURfQVBJX18pICYmIF9fQU5EUk9JRF9BUElfXyA8IDIxCisgIHJldHVybiB1dGltZW5zYXQocmVxLT5maWxlLCBOVUxMLCB0cywgMCk7CisjZWxzZQogICByZXR1cm4gZnV0aW1lbnMocmVxLT5maWxlLCB0cyk7CisjZW5kaWYKICNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTIxMSwxMCArMjQyLDggQEAKICAgICB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB8fCBkZWZpbmVkKF9fc3VuKQogICBzdHJ1Y3QgdGltZXZhbCB0dlsyXTsKLSAgdHZbMF0udHZfc2VjICA9IHJlcS0+YXRpbWU7Ci0gIHR2WzBdLnR2X3VzZWMgPSAodWludDY0X3QpKHJlcS0+YXRpbWUgKiAxMDAwMDAwKSAlIDEwMDAwMDA7Ci0gIHR2WzFdLnR2X3NlYyAgPSByZXEtPm10aW1lOwotICB0dlsxXS50dl91c2VjID0gKHVpbnQ2NF90KShyZXEtPm10aW1lICogMTAwMDAwMCkgJSAxMDAwMDAwOworICB0dlswXSA9IHV2X19mc190b190aW1ldmFsKHJlcS0+YXRpbWUpOworICB0dlsxXSA9IHV2X19mc190b190aW1ldmFsKHJlcS0+bXRpbWUpOwogIyBpZiBkZWZpbmVkKF9fc3VuKQogICByZXR1cm4gZnV0aW1lc2F0KHJlcS0+ZmlsZSwgTlVMTCwgdHYpOwogIyBlbHNlCkBAIC0yNTAsMjEgKzI3OSw5NyBAQAogfQogCiAKLXN0YXRpYyBzc2l6ZV90IHV2X19mc19vcGVuKHV2X2ZzX3QqIHJlcSkgewotICBzdGF0aWMgaW50IG5vX2Nsb2V4ZWNfc3VwcG9ydDsKLSAgaW50IHI7CitzdGF0aWMgaW50ICgqdXZfX21rb3N0ZW1wKShjaGFyKiwgaW50KTsKIAotICAvKiBUcnkgT19DTE9FWEVDIGJlZm9yZSBlbnRlcmluZyBsb2NrcyAqLwotICBpZiAobm9fY2xvZXhlY19zdXBwb3J0ID09IDApIHsKKworc3RhdGljIHZvaWQgdXZfX21rb3N0ZW1wX2luaXRvbmNlKHZvaWQpIHsKKyAgLyogei9vcyBkb2Vzbid0IGhhdmUgUlRMRF9ERUZBVUxUIGJ1dCB0aGF0J3Mgb2theQorICAgKiBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBta29zdGVtcChPX0NMT0VYRUMpIGVpdGhlci4KKyAgICovCisjaWZkZWYgUlRMRF9ERUZBVUxUCisgIHV2X19ta29zdGVtcCA9IChpbnQgKCopKGNoYXIqLCBpbnQpKSBkbHN5bShSVExEX0RFRkFVTFQsICJta29zdGVtcCIpOworCisgIC8qIFdlIGRvbid0IGNhcmUgYWJvdXQgZXJyb3JzLCBidXQgd2UgZG8gd2FudCB0byBjbGVhbiB0aGVtIHVwLgorICAgKiBJZiB0aGVyZSBoYXMgYmVlbiBubyBlcnJvciwgdGhlbiBkbGVycm9yKCkgd2lsbCBqdXN0IHJldHVybgorICAgKiBOVUxMLgorICAgKi8KKyAgZGxlcnJvcigpOworI2VuZGlmICAvKiBSVExEX0RFRkFVTFQgKi8KK30KKworCitzdGF0aWMgaW50IHV2X19mc19ta3N0ZW1wKHV2X2ZzX3QqIHJlcSkgeworICBzdGF0aWMgdXZfb25jZV90IG9uY2UgPSBVVl9PTkNFX0lOSVQ7CisgIGludCByOwogI2lmZGVmIE9fQ0xPRVhFQwotICAgIHIgPSBvcGVuKHJlcS0+cGF0aCwgcmVxLT5mbGFncyB8IE9fQ0xPRVhFQywgcmVxLT5tb2RlKTsKKyAgc3RhdGljIGludCBub19jbG9leGVjX3N1cHBvcnQ7CisjZW5kaWYKKyAgc3RhdGljIGNvbnN0IGNoYXIgcGF0dGVybltdID0gIlhYWFhYWCI7CisgIHN0YXRpYyBjb25zdCBzaXplX3QgcGF0dGVybl9zaXplID0gc2l6ZW9mKHBhdHRlcm4pIC0gMTsKKyAgY2hhciogcGF0aDsKKyAgc2l6ZV90IHBhdGhfbGVuZ3RoOworCisgIHBhdGggPSAoY2hhciopIHJlcS0+cGF0aDsKKyAgcGF0aF9sZW5ndGggPSBzdHJsZW4ocGF0aCk7CisKKyAgLyogRUlOVkFMIGNhbiBiZSByZXR1cm5lZCBmb3IgMiByZWFzb25zOgorICAgICAgMS4gVGhlIHRlbXBsYXRlJ3MgbGFzdCA2IGNoYXJhY3RlcnMgd2VyZSBub3QgWFhYWFhYCisgICAgICAyLiBvcGVuKCkgZGlkbid0IHN1cHBvcnQgT19DTE9FWEVDCisgICAgIFdlIHdhbnQgdG8gYXZvaWQgZ29pbmcgdG8gdGhlIGZhbGxiYWNrIHBhdGggaW4gY2FzZQorICAgICBvZiAxLCBzbyBpdCdzIG1hbnVhbGx5IGNoZWNrZWQgYmVmb3JlLiAqLworICBpZiAocGF0aF9sZW5ndGggPCBwYXR0ZXJuX3NpemUgfHwKKyAgICAgIHN0cmNtcChwYXRoICsgcGF0aF9sZW5ndGggLSBwYXR0ZXJuX3NpemUsIHBhdHRlcm4pKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgdXZfb25jZSgmb25jZSwgdXZfX21rb3N0ZW1wX2luaXRvbmNlKTsKKworI2lmZGVmIE9fQ0xPRVhFQworICBpZiAobm9fY2xvZXhlY19zdXBwb3J0ID09IDAgJiYgdXZfX21rb3N0ZW1wICE9IE5VTEwpIHsKKyAgICByID0gdXZfX21rb3N0ZW1wKHBhdGgsIE9fQ0xPRVhFQyk7CisKICAgICBpZiAociA+PSAwKQogICAgICAgcmV0dXJuIHI7CisKKyAgICAvKiBJZiBta29zdGVtcCgpIHJldHVybnMgRUlOVkFMLCBpdCBtZWFucyB0aGUga2VybmVsIGRvZXNuJ3QKKyAgICAgICBzdXBwb3J0IE9fQ0xPRVhFQywgc28gd2UganVzdCBmYWxsYmFjayB0byBta3N0ZW1wKCkgYmVsb3cuICovCiAgICAgaWYgKGVycm5vICE9IEVJTlZBTCkKICAgICAgIHJldHVybiByOworCisgICAgLyogV2Ugc2V0IHRoZSBzdGF0aWMgdmFyaWFibGUgc28gdGhhdCBuZXh0IGNhbGxzIGRvbid0IGV2ZW4KKyAgICAgICB0cnkgdG8gdXNlIG1rb3N0ZW1wLiAqLwogICAgIG5vX2Nsb2V4ZWNfc3VwcG9ydCA9IDE7Ci0jZW5kaWYgIC8qIE9fQ0xPRVhFQyAqLwogICB9CisjZW5kaWYgIC8qIE9fQ0xPRVhFQyAqLworCisgIGlmIChyZXEtPmNiICE9IE5VTEwpCisgICAgdXZfcndsb2NrX3JkbG9jaygmcmVxLT5sb29wLT5jbG9leGVjX2xvY2spOworCisgIHIgPSBta3N0ZW1wKHBhdGgpOworCisgIC8qIEluIGNhc2Ugb2YgZmFpbHVyZSBgdXZfX2Nsb2V4ZWNgIHdpbGwgbGVhdmUgZXJyb3IgaW4gYGVycm5vYCwKKyAgICogc28gaXQgaXMgZW5vdWdoIHRvIGp1c3Qgc2V0IGByYCB0byBgLTFgLgorICAgKi8KKyAgaWYgKHIgPj0gMCAmJiB1dl9fY2xvZXhlYyhyLCAxKSAhPSAwKSB7CisgICAgciA9IHV2X19jbG9zZShyKTsKKyAgICBpZiAociAhPSAwKQorICAgICAgYWJvcnQoKTsKKyAgICByID0gLTE7CisgIH0KKworICBpZiAocmVxLT5jYiAhPSBOVUxMKQorICAgIHV2X3J3bG9ja19yZHVubG9jaygmcmVxLT5sb29wLT5jbG9leGVjX2xvY2spOworCisgIHJldHVybiByOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHV2X19mc19vcGVuKHV2X2ZzX3QqIHJlcSkgeworI2lmZGVmIE9fQ0xPRVhFQworICByZXR1cm4gb3BlbihyZXEtPnBhdGgsIHJlcS0+ZmxhZ3MgfCBPX0NMT0VYRUMsIHJlcS0+bW9kZSk7CisjZWxzZSAgLyogT19DTE9FWEVDICovCisgIGludCByOwogCiAgIGlmIChyZXEtPmNiICE9IE5VTEwpCiAgICAgdXZfcndsb2NrX3JkbG9jaygmcmVxLT5sb29wLT5jbG9leGVjX2xvY2spOwpAQCAtMjg1LDkgKzM5MCw2MCBAQAogICAgIHV2X3J3bG9ja19yZHVubG9jaygmcmVxLT5sb29wLT5jbG9leGVjX2xvY2spOwogCiAgIHJldHVybiByOworI2VuZGlmICAvKiBPX0NMT0VYRUMgKi8KIH0KIAogCisjaWYgIUhBVkVfUFJFQURWCitzdGF0aWMgc3NpemVfdCB1dl9fZnNfcHJlYWR2KHV2X2ZpbGUgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2J1Zl90KiBidWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZikgeworICB1dl9idWZfdCogYnVmOworICB1dl9idWZfdCogZW5kOworICBzc2l6ZV90IHJlc3VsdDsKKyAgc3NpemVfdCByYzsKKyAgc2l6ZV90IHBvczsKKworICBhc3NlcnQobmJ1ZnMgPiAwKTsKKworICByZXN1bHQgPSAwOworICBwb3MgPSAwOworICBidWYgPSBidWZzICsgMDsKKyAgZW5kID0gYnVmcyArIG5idWZzOworCisgIGZvciAoOzspIHsKKyAgICBkbworICAgICAgcmMgPSBwcmVhZChmZCwgYnVmLT5iYXNlICsgcG9zLCBidWYtPmxlbiAtIHBvcywgb2ZmICsgcmVzdWx0KTsKKyAgICB3aGlsZSAocmMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisgICAgaWYgKHJjID09IDApCisgICAgICBicmVhazsKKworICAgIGlmIChyYyA9PSAtMSAmJiByZXN1bHQgPT0gMCkKKyAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKworICAgIGlmIChyYyA9PSAtMSkKKyAgICAgIGJyZWFrOyAgLyogV2UgcmVhZCBzb21lIGRhdGEgc28gcmV0dXJuIHRoYXQsIGlnbm9yZSB0aGUgZXJyb3IuICovCisKKyAgICBwb3MgKz0gcmM7CisgICAgcmVzdWx0ICs9IHJjOworCisgICAgaWYgKHBvcyA8IGJ1Zi0+bGVuKQorICAgICAgY29udGludWU7CisKKyAgICBwb3MgPSAwOworICAgIGJ1ZiArPSAxOworCisgICAgaWYgKGJ1ZiA9PSBlbmQpCisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworCiBzdGF0aWMgc3NpemVfdCB1dl9fZnNfcmVhZCh1dl9mc190KiByZXEpIHsKICNpZiBkZWZpbmVkKF9fbGludXhfXykKICAgc3RhdGljIGludCBub19wcmVhZHY7CkBAIC0zMTcsNyArNDczLDcgQEAKICAgICBpZiAobm9fcHJlYWR2KSByZXRyeToKICMgZW5kaWYKICAgICB7Ci0gICAgICByZXN1bHQgPSBwcmVhZChyZXEtPmZpbGUsIHJlcS0+YnVmc1swXS5iYXNlLCByZXEtPmJ1ZnNbMF0ubGVuLCByZXEtPm9mZik7CisgICAgICByZXN1bHQgPSB1dl9fZnNfcHJlYWR2KHJlcS0+ZmlsZSwgcmVxLT5idWZzLCByZXEtPm5idWZzLCByZXEtPm9mZik7CiAgICAgfQogIyBpZiBkZWZpbmVkKF9fbGludXhfXykKICAgICBlbHNlIHsKQEAgLTQ4MSwxNCArNjM3LDM5IEBACiAgIHJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChfUE9TSVhfUEFUSF9NQVgpCi0jIGRlZmluZSBVVl9fRlNfUEFUSF9NQVggX1BPU0lYX1BBVEhfTUFYCi0jZWxpZiBkZWZpbmVkKFBBVEhfTUFYKQotIyBkZWZpbmUgVVZfX0ZTX1BBVEhfTUFYIFBBVEhfTUFYCitzdGF0aWMgaW50IHV2X19mc19zdGF0ZnModXZfZnNfdCogcmVxKSB7CisgIHV2X3N0YXRmc190KiBzdGF0X2ZzOworI2lmIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoX19NVlNfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fSEFJS1VfXykKKyAgc3RydWN0IHN0YXR2ZnMgYnVmOworCisgIGlmICgwICE9IHN0YXR2ZnMocmVxLT5wYXRoLCAmYnVmKSkKICNlbHNlCi0jIGRlZmluZSBVVl9fRlNfUEFUSF9NQVhfRkFMTEJBQ0sgODE5MgotIyBkZWZpbmUgVVZfX0ZTX1BBVEhfTUFYIFVWX19GU19QQVRIX01BWF9GQUxMQkFDSworICBzdHJ1Y3Qgc3RhdGZzIGJ1ZjsKKworICBpZiAoMCAhPSBzdGF0ZnMocmVxLT5wYXRoLCAmYnVmKSkKKyNlbmRpZiAvKiBkZWZpbmVkKF9fc3VuKSAqLworICAgIHJldHVybiAtMTsKKworICBzdGF0X2ZzID0gdXZfX21hbGxvYyhzaXplb2YoKnN0YXRfZnMpKTsKKyAgaWYgKHN0YXRfZnMgPT0gTlVMTCkgeworICAgIGVycm5vID0gRU5PTUVNOworICAgIHJldHVybiAtMTsKKyAgfQorCisjaWYgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChfX01WU19fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19IQUlLVV9fKQorICBzdGF0X2ZzLT5mX3R5cGUgPSAwOyAgLyogZl90eXBlIGlzIG5vdCBzdXBwb3J0ZWQuICovCisjZWxzZQorICBzdGF0X2ZzLT5mX3R5cGUgPSBidWYuZl90eXBlOwogI2VuZGlmCisgIHN0YXRfZnMtPmZfYnNpemUgPSBidWYuZl9ic2l6ZTsKKyAgc3RhdF9mcy0+Zl9ibG9ja3MgPSBidWYuZl9ibG9ja3M7CisgIHN0YXRfZnMtPmZfYmZyZWUgPSBidWYuZl9iZnJlZTsKKyAgc3RhdF9mcy0+Zl9iYXZhaWwgPSBidWYuZl9iYXZhaWw7CisgIHN0YXRfZnMtPmZfZmlsZXMgPSBidWYuZl9maWxlczsKKyAgc3RhdF9mcy0+Zl9mZnJlZSA9IGJ1Zi5mX2ZmcmVlOworICByZXEtPnB0ciA9IHN0YXRfZnM7CisgIHJldHVybiAwOworfQogCiBzdGF0aWMgc3NpemVfdCB1dl9fZnNfcGF0aG1heF9zaXplKGNvbnN0IGNoYXIqIHBhdGgpIHsKICAgc3NpemVfdCBwYXRobWF4OwpAQCAtNDk2LDcgKzY3Nyw3IEBACiAgIHBhdGhtYXggPSBwYXRoY29uZihwYXRoLCBfUENfUEFUSF9NQVgpOwogCiAgIGlmIChwYXRobWF4ID09IC0xKQotICAgIHBhdGhtYXggPSBVVl9fRlNfUEFUSF9NQVg7CisgICAgcGF0aG1heCA9IFVWX19QQVRIX01BWDsKIAogICByZXR1cm4gcGF0aG1heDsKIH0KQEAgLTUwNSw5ICs2ODYsMTAgQEAKICAgc3NpemVfdCBtYXhsZW47CiAgIHNzaXplX3QgbGVuOwogICBjaGFyKiBidWY7Ci0gIGNoYXIqIG5ld2J1ZjsKIAotI2lmIGRlZmluZWQoVVZfX0ZTX1BBVEhfTUFYX0ZBTExCQUNLKQorI2lmIGRlZmluZWQoX1BPU0lYX1BBVEhfTUFYKSB8fCBkZWZpbmVkKFBBVEhfTUFYKQorICBtYXhsZW4gPSB1dl9fZnNfcGF0aG1heF9zaXplKHJlcS0+cGF0aCk7CisjZWxzZQogICAvKiBXZSBtYXkgbm90IGhhdmUgYSByZWFsIFBBVEhfTUFYLiAgUmVhZCBzaXplIG9mIGxpbmsuICAqLwogICBzdHJ1Y3Qgc3RhdCBzdDsKICAgaW50IHJldDsKQEAgLTUyNSw4ICs3MDcsNiBAQAogICAgICBmb3Igc29tZSBzeW1saW5rcywgc3VjaCBhcyB0aG9zZSBpbiAvcHJvYyBvciAvc3lzLiAgKi8KICAgaWYgKG1heGxlbiA9PSAwKQogICAgIG1heGxlbiA9IHV2X19mc19wYXRobWF4X3NpemUocmVxLT5wYXRoKTsKLSNlbHNlCi0gIG1heGxlbiA9IHV2X19mc19wYXRobWF4X3NpemUocmVxLT5wYXRoKTsKICNlbmRpZgogCiAgIGJ1ZiA9IHV2X19tYWxsb2MobWF4bGVuKTsKQEAgLTU0OSwxNCArNzI5LDEwIEBACiAKICAgLyogVW5jb21tb24gY2FzZTogcmVzaXplIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIHRyYWlsaW5nIG51bCBieXRlLiAqLwogICBpZiAobGVuID09IG1heGxlbikgewotICAgIG5ld2J1ZiA9IHV2X19yZWFsbG9jKGJ1ZiwgbGVuICsgMSk7CisgICAgYnVmID0gdXZfX3JlYWxsb2NmKGJ1ZiwgbGVuICsgMSk7CiAKLSAgICBpZiAobmV3YnVmID09IE5VTEwpIHsKLSAgICAgIHV2X19mcmVlKGJ1Zik7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGJ1ZiA9IG5ld2J1ZjsKICAgfQogCiAgIGJ1ZltsZW5dID0gJ1wwJzsKQEAgLTgxNiwxMCArOTkyLDggQEAKICAgICogZm9yIHRoZSBzYWtlIG9mIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgcGxhdGZvcm1zLgogICAgKi8KICAgc3RydWN0IHRpbWVzcGVjIHRzWzJdOwotICB0c1swXS50dl9zZWMgID0gcmVxLT5hdGltZTsKLSAgdHNbMF0udHZfbnNlYyA9ICh1aW50NjRfdCkocmVxLT5hdGltZSAqIDEwMDAwMDApICUgMTAwMDAwMCAqIDEwMDA7Ci0gIHRzWzFdLnR2X3NlYyAgPSByZXEtPm10aW1lOwotICB0c1sxXS50dl9uc2VjID0gKHVpbnQ2NF90KShyZXEtPm10aW1lICogMTAwMDAwMCkgJSAxMDAwMDAwICogMTAwMDsKKyAgdHNbMF0gPSB1dl9fZnNfdG9fdGltZXNwZWMocmVxLT5hdGltZSk7CisgIHRzWzFdID0gdXZfX2ZzX3RvX3RpbWVzcGVjKHJlcS0+bXRpbWUpOwogICByZXR1cm4gdXRpbWVuc2F0KEFUX0ZEQ1dELCByZXEtPnBhdGgsIHRzLCAwKTsKICNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTgyOCwxMCArMTAwMiw4IEBACiAgICAgfHwgZGVmaW5lZChfX05ldEJTRF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfHwgZGVmaW5lZChfX09wZW5CU0RfXykKICAgc3RydWN0IHRpbWV2YWwgdHZbMl07Ci0gIHR2WzBdLnR2X3NlYyAgPSByZXEtPmF0aW1lOwotICB0dlswXS50dl91c2VjID0gKHVpbnQ2NF90KShyZXEtPmF0aW1lICogMTAwMDAwMCkgJSAxMDAwMDAwOwotICB0dlsxXS50dl9zZWMgID0gcmVxLT5tdGltZTsKLSAgdHZbMV0udHZfdXNlYyA9ICh1aW50NjRfdCkocmVxLT5tdGltZSAqIDEwMDAwMDApICUgMTAwMDAwMDsKKyAgdHZbMF0gPSB1dl9fZnNfdG9fdGltZXZhbChyZXEtPmF0aW1lKTsKKyAgdHZbMV0gPSB1dl9fZnNfdG9fdGltZXZhbChyZXEtPm10aW1lKTsKICAgcmV0dXJuIHV0aW1lcyhyZXEtPnBhdGgsIHR2KTsKICNlbGlmIGRlZmluZWQoX0FJWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAmJiAhZGVmaW5lZChfQUlYNzEpCkBAIC04NTQsNiArMTAyNiwzMSBAQAogfQogCiAKK3N0YXRpYyBzc2l6ZV90IHV2X19mc19sdXRpbWUodXZfZnNfdCogcmVxKSB7CisjaWYgZGVmaW5lZChfX2xpbnV4X18pICAgICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoX0FJWDcxKSAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKF9fc3VuKSAgICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChfX0hBSUtVX18pCisgIHN0cnVjdCB0aW1lc3BlYyB0c1syXTsKKyAgdHNbMF0gPSB1dl9fZnNfdG9fdGltZXNwZWMocmVxLT5hdGltZSk7CisgIHRzWzFdID0gdXZfX2ZzX3RvX3RpbWVzcGVjKHJlcS0+bXRpbWUpOworICByZXR1cm4gdXRpbWVuc2F0KEFUX0ZEQ1dELCByZXEtPnBhdGgsIHRzLCBBVF9TWU1MSU5LX05PRk9MTE9XKTsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGRlZmluZWQoX19EcmFnb25GbHlfXykgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGRlZmluZWQoX19OZXRCU0RfXykKKyAgc3RydWN0IHRpbWV2YWwgdHZbMl07CisgIHR2WzBdID0gdXZfX2ZzX3RvX3RpbWV2YWwocmVxLT5hdGltZSk7CisgIHR2WzFdID0gdXZfX2ZzX3RvX3RpbWV2YWwocmVxLT5tdGltZSk7CisgIHJldHVybiBsdXRpbWVzKHJlcS0+cGF0aCwgdHYpOworI2Vsc2UKKyAgZXJybm8gPSBFTk9TWVM7CisgIHJldHVybiAtMTsKKyNlbmRpZgorfQorCisKIHN0YXRpYyBzc2l6ZV90IHV2X19mc193cml0ZSh1dl9mc190KiByZXEpIHsKICNpZiBkZWZpbmVkKF9fbGludXhfXykKICAgc3RhdGljIGludCBub19wd3JpdGV2OwpAQCAtOTE4LDEyICsxMTE1LDE1IEBACiAgIHV2X2ZzX3QgZnNfcmVxOwogICB1dl9maWxlIHNyY2ZkOwogICB1dl9maWxlIGRzdGZkOwotICBzdHJ1Y3Qgc3RhdCBzdGF0c2J1ZjsKKyAgc3RydWN0IHN0YXQgc3JjX3N0YXRzYnVmOworICBzdHJ1Y3Qgc3RhdCBkc3Rfc3RhdHNidWY7CiAgIGludCBkc3RfZmxhZ3M7CiAgIGludCByZXN1bHQ7CiAgIGludCBlcnI7Ci0gIHNpemVfdCBieXRlc190b19zZW5kOwotICBpbnQ2NF90IGluX29mZnNldDsKKyAgb2ZmX3QgYnl0ZXNfdG9fc2VuZDsKKyAgb2ZmX3QgaW5fb2Zmc2V0OworICBvZmZfdCBieXRlc193cml0dGVuOworICBzaXplX3QgYnl0ZXNfY2h1bms7CiAKICAgZHN0ZmQgPSAtMTsKICAgZXJyID0gMDsKQEAgLTkzNiw3ICsxMTM2LDcgQEAKICAgICByZXR1cm4gc3JjZmQ7CiAKICAgLyogR2V0IHRoZSBzb3VyY2UgZmlsZSdzIG1vZGUuICovCi0gIGlmIChmc3RhdChzcmNmZCwgJnN0YXRzYnVmKSkgeworICBpZiAoZnN0YXQoc3JjZmQsICZzcmNfc3RhdHNidWYpKSB7CiAgICAgZXJyID0gVVZfX0VSUihlcnJubyk7CiAgICAgZ290byBvdXQ7CiAgIH0KQEAgLTk1MSw3ICsxMTUxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICZmc19yZXEsCiAgICAgICAgICAgICAgICAgICAgICByZXEtPm5ld19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgZHN0X2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgc3RhdHNidWYuc3RfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgIHNyY19zdGF0c2J1Zi5zdF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgIHV2X2ZzX3JlcV9jbGVhbnVwKCZmc19yZXEpOwogCkBAIC05NjAsMjYgKzExNjAsNTUgQEAKICAgICBnb3RvIG91dDsKICAgfQogCi0gIGlmIChmY2htb2QoZHN0ZmQsIHN0YXRzYnVmLnN0X21vZGUpID09IC0xKSB7CisgIC8qIEdldCB0aGUgZGVzdGluYXRpb24gZmlsZSdzIG1vZGUuICovCisgIGlmIChmc3RhdChkc3RmZCwgJmRzdF9zdGF0c2J1ZikpIHsKICAgICBlcnIgPSBVVl9fRVJSKGVycm5vKTsKICAgICBnb3RvIG91dDsKICAgfQogCisgIC8qIENoZWNrIGlmIHNyY2ZkIGFuZCBkc3RmZCByZWZlciB0byB0aGUgc2FtZSBmaWxlICovCisgIGlmIChzcmNfc3RhdHNidWYuc3RfZGV2ID09IGRzdF9zdGF0c2J1Zi5zdF9kZXYgJiYKKyAgICAgIHNyY19zdGF0c2J1Zi5zdF9pbm8gPT0gZHN0X3N0YXRzYnVmLnN0X2lubykgeworICAgIGdvdG8gb3V0OworICB9CisKKyAgaWYgKGZjaG1vZChkc3RmZCwgc3JjX3N0YXRzYnVmLnN0X21vZGUpID09IC0xKSB7CisgICAgZXJyID0gVVZfX0VSUihlcnJubyk7CisjaWZkZWYgX19saW51eF9fCisgICAgaWYgKGVyciAhPSBVVl9FUEVSTSkKKyAgICAgIGdvdG8gb3V0OworCisgICAgeworICAgICAgc3RydWN0IHN0YXRmcyBzOworCisgICAgICAvKiBmY2htb2QoKSBvbiBDSUZTIHNoYXJlcyBhbHdheXMgZmFpbHMgd2l0aCBFUEVSTSB1bmxlc3MgdGhlIHNoYXJlIGlzCisgICAgICAgKiBtb3VudGVkIHdpdGggIm5vcGVybSIuIEFzIGZjaG1vZCgpIGlzIGEgbWVhbmluZ2xlc3Mgb3BlcmF0aW9uIG9uIHN1Y2gKKyAgICAgICAqIHNoYXJlcyBhbnl3YXksIGRldGVjdCB0aGF0IGNvbmRpdGlvbiBhbmQgc3F1ZWxjaCB0aGUgZXJyb3IuCisgICAgICAgKi8KKyAgICAgIGlmIChmc3RhdGZzKGRzdGZkLCAmcykgPT0gLTEpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgICBpZiAocy5mX3R5cGUgIT0gLyogQ0lGUyAqLyAweEZGNTM0RDQydSkKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgZXJyID0gMDsKKyNlbHNlICAvKiAhX19saW51eF9fICovCisgICAgZ290byBvdXQ7CisjZW5kaWYgIC8qICFfX2xpbnV4X18gKi8KKyAgfQorCiAjaWZkZWYgRklDTE9ORQogICBpZiAocmVxLT5mbGFncyAmIFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkUgfHwKICAgICAgIHJlcS0+ZmxhZ3MgJiBVVl9GU19DT1BZRklMRV9GSUNMT05FX0ZPUkNFKSB7Ci0gICAgaWYgKGlvY3RsKGRzdGZkLCBGSUNMT05FLCBzcmNmZCkgPT0gLTEpIHsKLSAgICAgIC8qIElmIGFuIGVycm9yIG9jY3VycmVkIHRoYXQgdGhlIHNlbmRmaWxlIGZhbGxiYWNrIGFsc28gd29uJ3QgaGFuZGxlLCBvcgotICAgICAgICAgdGhpcyBpcyBhIGZvcmNlIGNsb25lIHRoZW4gZXhpdC4gT3RoZXJ3aXNlLCBmYWxsIHRocm91Z2ggdG8gdHJ5IHVzaW5nCi0gICAgICAgICBzZW5kZmlsZSgpLiAqLwotICAgICAgaWYgKGVycm5vICE9IEVOT1RUWSAmJiBlcnJubyAhPSBFT1BOT1RTVVBQICYmIGVycm5vICE9IEVYREVWKSB7Ci0gICAgICAgIGVyciA9IFVWX19FUlIoZXJybm8pOwotICAgICAgICBnb3RvIG91dDsKLSAgICAgIH0gZWxzZSBpZiAocmVxLT5mbGFncyAmIFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkVfRk9SQ0UpIHsKLSAgICAgICAgZXJyID0gVVZfRU5PVFNVUDsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoaW9jdGwoZHN0ZmQsIEZJQ0xPTkUsIHNyY2ZkKSA9PSAwKSB7CisgICAgICAvKiBpb2N0bCgpIHdpdGggRklDTE9ORSBzdWNjZWVkZWQuICovCisgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQgYW5kIGZvcmNlIHdhcyBzZXQsIHJldHVybiB0aGUgZXJyb3IgdG8gdGhlIGNhbGxlcjsKKyAgICAgKiBmYWxsIGJhY2sgdG8gc2VuZGZpbGUoKSB3aGVuIGZvcmNlIHdhcyBub3Qgc2V0LiAqLworICAgIGlmIChyZXEtPmZsYWdzICYgVVZfRlNfQ09QWUZJTEVfRklDTE9ORV9GT1JDRSkgeworICAgICAgZXJyID0gVVZfX0VSUihlcnJubyk7CiAgICAgICBnb3RvIG91dDsKICAgICB9CiAgIH0KQEAgLTk5MCwyMSArMTIxOSwyMyBAQAogICB9CiAjZW5kaWYKIAotICBieXRlc190b19zZW5kID0gc3RhdHNidWYuc3Rfc2l6ZTsKKyAgYnl0ZXNfdG9fc2VuZCA9IHNyY19zdGF0c2J1Zi5zdF9zaXplOwogICBpbl9vZmZzZXQgPSAwOwogICB3aGlsZSAoYnl0ZXNfdG9fc2VuZCAhPSAwKSB7Ci0gICAgZXJyID0gdXZfZnNfc2VuZGZpbGUoTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmZnNfcmVxLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRzdGZkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2ZkLAotICAgICAgICAgICAgICAgICAgICAgICAgIGluX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc190b19zZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGJ5dGVzX2NodW5rID0gU1NJWkVfTUFYOworICAgIGlmIChieXRlc190b19zZW5kIDwgKG9mZl90KSBieXRlc19jaHVuaykKKyAgICAgIGJ5dGVzX2NodW5rID0gYnl0ZXNfdG9fc2VuZDsKKyAgICB1dl9mc19zZW5kZmlsZShOVUxMLCAmZnNfcmVxLCBkc3RmZCwgc3JjZmQsIGluX29mZnNldCwgYnl0ZXNfY2h1bmssIE5VTEwpOworICAgIGJ5dGVzX3dyaXR0ZW4gPSBmc19yZXEucmVzdWx0OwogICAgIHV2X2ZzX3JlcV9jbGVhbnVwKCZmc19yZXEpOwotICAgIGlmIChlcnIgPCAwKQorCisgICAgaWYgKGJ5dGVzX3dyaXR0ZW4gPCAwKSB7CisgICAgICBlcnIgPSBieXRlc193cml0dGVuOwogICAgICAgYnJlYWs7Ci0gICAgYnl0ZXNfdG9fc2VuZCAtPSBmc19yZXEucmVzdWx0OwotICAgIGluX29mZnNldCArPSBmc19yZXEucmVzdWx0OworICAgIH0KKworICAgIGJ5dGVzX3RvX3NlbmQgLT0gYnl0ZXNfd3JpdHRlbjsKKyAgICBpbl9vZmZzZXQgKz0gYnl0ZXNfd3JpdHRlbjsKICAgfQogCiBvdXQ6CkBAIC0xMTUxLDEzICsxMzgyLDIyIEBACiAKICAgcmMgPSB1dl9fc3RhdHgoZGlyZmQsIHBhdGgsIGZsYWdzLCBtb2RlLCAmc3RhdHhidWYpOwogCi0gIGlmIChyYyA9PSAtMSkgeworICBzd2l0Y2ggKHJjKSB7CisgIGNhc2UgMDoKKyAgICBicmVhazsKKyAgY2FzZSAtMToKICAgICAvKiBFUEVSTSBoYXBwZW5zIHdoZW4gYSBzZWNjb21wIGZpbHRlciByZWplY3RzIHRoZSBzeXN0ZW0gY2FsbC4KICAgICAgKiBIYXMgYmVlbiBvYnNlcnZlZCB3aXRoIGxpYnNlY2NvbXAgPCAyLjMuMyBhbmQgZG9ja2VyIDwgMTguMDQuCiAgICAgICovCiAgICAgaWYgKGVycm5vICE9IEVJTlZBTCAmJiBlcnJubyAhPSBFUEVSTSAmJiBlcnJubyAhPSBFTk9TWVMpCiAgICAgICByZXR1cm4gLTE7Ci0KKyAgICAvKiBGYWxsIHRocm91Z2guICovCisgIGRlZmF1bHQ6CisgICAgLyogTm9ybWFsbHkgb24gc3VjY2VzcywgemVybyBpcyByZXR1cm5lZCBhbmQgT24gZXJyb3IsIC0xIGlzIHJldHVybmVkLgorICAgICAqIE9ic2VydmVkIG9uIFMzOTAgUkhFTCBydW5uaW5nIGluIGEgZG9ja2VyIGNvbnRhaW5lciB3aXRoIHN0YXR4IG5vdAorICAgICAqIGltcGxlbWVudGVkLCByYyBtaWdodCByZXR1cm4gMSB3aXRoIDAgc2V0IGFzIHRoZSBlcnJvciBjb2RlIGluIHdoaWNoCisgICAgICogY2FzZSB3ZSByZXR1cm4gRU5PU1lTLgorICAgICAqLwogICAgIG5vX3N0YXR4ID0gMTsKICAgICByZXR1cm4gVVZfRU5PU1lTOwogICB9CkBAIC0xMzI4LDEwICsxNTY4LDEyIEBACiAgICAgWChGU1lOQywgdXZfX2ZzX2ZzeW5jKHJlcSkpOwogICAgIFgoRlRSVU5DQVRFLCBmdHJ1bmNhdGUocmVxLT5maWxlLCByZXEtPm9mZikpOwogICAgIFgoRlVUSU1FLCB1dl9fZnNfZnV0aW1lKHJlcSkpOworICAgIFgoTFVUSU1FLCB1dl9fZnNfbHV0aW1lKHJlcSkpOwogICAgIFgoTFNUQVQsIHV2X19mc19sc3RhdChyZXEtPnBhdGgsICZyZXEtPnN0YXRidWYpKTsKICAgICBYKExJTkssIGxpbmsocmVxLT5wYXRoLCByZXEtPm5ld19wYXRoKSk7CiAgICAgWChNS0RJUiwgbWtkaXIocmVxLT5wYXRoLCByZXEtPm1vZGUpKTsKICAgICBYKE1LRFRFTVAsIHV2X19mc19ta2R0ZW1wKHJlcSkpOworICAgIFgoTUtTVEVNUCwgdXZfX2ZzX21rc3RlbXAocmVxKSk7CiAgICAgWChPUEVOLCB1dl9fZnNfb3BlbihyZXEpKTsKICAgICBYKFJFQUQsIHV2X19mc19yZWFkKHJlcSkpOwogICAgIFgoU0NBTkRJUiwgdXZfX2ZzX3NjYW5kaXIocmVxKSk7CkBAIC0xMzQ0LDYgKzE1ODYsNyBAQAogICAgIFgoUk1ESVIsIHJtZGlyKHJlcS0+cGF0aCkpOwogICAgIFgoU0VOREZJTEUsIHV2X19mc19zZW5kZmlsZShyZXEpKTsKICAgICBYKFNUQVQsIHV2X19mc19zdGF0KHJlcS0+cGF0aCwgJnJlcS0+c3RhdGJ1ZikpOworICAgIFgoU1RBVEZTLCB1dl9fZnNfc3RhdGZzKHJlcSkpOwogICAgIFgoU1lNTElOSywgc3ltbGluayhyZXEtPnBhdGgsIHJlcS0+bmV3X3BhdGgpKTsKICAgICBYKFVOTElOSywgdW5saW5rKHJlcS0+cGF0aCkpOwogICAgIFgoVVRJTUUsIHV2X19mc191dGltZShyZXEpKTsKQEAgLTE1MTIsNiArMTc1NSwxOSBAQAogICBQT1NUOwogfQogCitpbnQgdXZfZnNfbHV0aW1lKHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLAorICAgICAgICAgICAgICAgICBkb3VibGUgYXRpbWUsCisgICAgICAgICAgICAgICAgIGRvdWJsZSBtdGltZSwKKyAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpIHsKKyAgSU5JVChMVVRJTUUpOworICBQQVRIOworICByZXEtPmF0aW1lID0gYXRpbWU7CisgIHJlcS0+bXRpbWUgPSBtdGltZTsKKyAgUE9TVDsKK30KKwogCiBpbnQgdXZfZnNfbHN0YXQodXZfbG9vcF90KiBsb29wLCB1dl9mc190KiByZXEsIGNvbnN0IGNoYXIqIHBhdGgsIHV2X2ZzX2NiIGNiKSB7CiAgIElOSVQoTFNUQVQpOwpAQCAtMTU1NSw2ICsxODExLDE4IEBACiB9CiAKIAoraW50IHV2X2ZzX21rc3RlbXAodXZfbG9vcF90KiBsb29wLAorICAgICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdHBsLAorICAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpIHsKKyAgSU5JVChNS1NURU1QKTsKKyAgcmVxLT5wYXRoID0gdXZfX3N0cmR1cCh0cGwpOworICBpZiAocmVxLT5wYXRoID09IE5VTEwpCisgICAgcmV0dXJuIFVWX0VOT01FTTsKKyAgUE9TVDsKK30KKworCiBpbnQgdXZfZnNfb3Blbih1dl9sb29wX3QqIGxvb3AsCiAgICAgICAgICAgICAgICB1dl9mc190KiByZXEsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLApAQCAtMTc3MywxMCArMjA0MSwxMiBAQAogCiAgIC8qIE9ubHkgbmVjZXNzYXJ5IGZvciBhc3ljaHJvbm91cyByZXF1ZXN0cywgaS5lLiwgcmVxdWVzdHMgd2l0aCBhIGNhbGxiYWNrLgogICAgKiBTeW5jaHJvbm91cyBvbmVzIGRvbid0IGNvcHkgdGhlaXIgYXJndW1lbnRzIGFuZCBoYXZlIHJlcS0+cGF0aCBhbmQKLSAgICogcmVxLT5uZXdfcGF0aCBwb2ludGluZyB0byB1c2VyLW93bmVkIG1lbW9yeS4gIFVWX0ZTX01LRFRFTVAgaXMgdGhlCi0gICAqIGV4Y2VwdGlvbiB0byB0aGUgcnVsZSwgaXQgYWx3YXlzIGFsbG9jYXRlcyBtZW1vcnkuCisgICAqIHJlcS0+bmV3X3BhdGggcG9pbnRpbmcgdG8gdXNlci1vd25lZCBtZW1vcnkuICBVVl9GU19NS0RURU1QIGFuZCAKKyAgICogVVZfRlNfTUtTVEVNUCBhcmUgdGhlIGV4Y2VwdGlvbiB0byB0aGUgcnVsZSwgdGhleSBhbHdheXMgYWxsb2NhdGUgbWVtb3J5LgogICAgKi8KLSAgaWYgKHJlcS0+cGF0aCAhPSBOVUxMICYmIChyZXEtPmNiICE9IE5VTEwgfHwgcmVxLT5mc190eXBlID09IFVWX0ZTX01LRFRFTVApKQorICBpZiAocmVxLT5wYXRoICE9IE5VTEwgJiYKKyAgICAgIChyZXEtPmNiICE9IE5VTEwgfHwKKyAgICAgICAgcmVxLT5mc190eXBlID09IFVWX0ZTX01LRFRFTVAgfHwgcmVxLT5mc190eXBlID09IFVWX0ZTX01LU1RFTVApKQogICAgIHV2X19mcmVlKCh2b2lkKikgcmVxLT5wYXRoKTsgIC8qIE1lbW9yeSBpcyBzaGFyZWQgd2l0aCByZXEtPm5ld19wYXRoLiAqLwogCiAgIHJlcS0+cGF0aCA9IE5VTEw7CkBAIC0xODE2LDMgKzIwODYsMTcgQEAKICAgcmVxLT5mbGFncyA9IGZsYWdzOwogICBQT1NUOwogfQorCisKK2ludCB1dl9mc19zdGF0ZnModXZfbG9vcF90KiBsb29wLAorICAgICAgICAgICAgICAgICB1dl9mc190KiByZXEsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsCisgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKSB7CisgIElOSVQoU1RBVEZTKTsKKyAgUEFUSDsKKyAgUE9TVDsKK30KKworaW50IHV2X2ZzX2dldF9zeXN0ZW1fZXJyb3IoY29uc3QgdXZfZnNfdCogcmVxKSB7CisgIHJldHVybiAtcmVxLT5yZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9mc2V2ZW50cy5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvZnNldmVudHMuYwppbmRleCBkZGFjZGEzLi5hNTFmMjliIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9mc2V2ZW50cy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2ZzZXZlbnRzLmMKQEAgLTQxLDM0ICs0MSwzMyBAQAogCiAjZWxzZSAvKiBUQVJHRVRfT1NfSVBIT05FICovCiAKKyNpbmNsdWRlICJkYXJ3aW4tc3R1Yi5oIgorCiAjaW5jbHVkZSA8ZGxmY24uaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlJ1bkxvb3AuaD4KLSNpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50c01vZGlmaWVkID0KKyAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1DaGFuZ2VPd25lciB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtRmluZGVySW5mb01vZCB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtSW5vZGVNZXRhTW9kIHwKKyAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0l0ZW1Nb2RpZmllZCB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtWGF0dHJNb2Q7CiAKLS8qIFRoZXNlIGFyZSBtYWNyb3MgdG8gYXZvaWQgImluaXRpYWxpemVyIGVsZW1lbnQgaXMgbm90IGNvbnN0YW50IiBlcnJvcnMKLSAqIHdpdGggb2xkIHZlcnNpb25zIG9mIGdjYy4KLSAqLwotI2RlZmluZSBrRlNFdmVudHNNb2RpZmllZCAoa0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtRmluZGVySW5mb01vZCB8ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtTW9kaWZpZWQgfCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtSW5vZGVNZXRhTW9kIHwgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtQ2hhbmdlT3duZXIgfCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdJdGVtWGF0dHJNb2QpCitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50c1JlbmFtZWQgPQorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUNyZWF0ZWQgfAorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbVJlbW92ZWQgfAorICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbVJlbmFtZWQ7CiAKLSNkZWZpbmUga0ZTRXZlbnRzUmVuYW1lZCAgKGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbUNyZWF0ZWQgfCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbVJlbW92ZWQgfCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSXRlbVJlbmFtZWQpCi0KLSNkZWZpbmUga0ZTRXZlbnRzU3lzdGVtICAgKGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnVXNlckRyb3BwZWQgfCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnS2VybmVsRHJvcHBlZCB8ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnRXZlbnRJZHNXcmFwcGVkIHwgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnSGlzdG9yeURvbmUgfCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnTW91bnQgfCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnVW5tb3VudCB8ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGU0V2ZW50U3RyZWFtRXZlbnRGbGFnUm9vdENoYW5nZWQpCitzdGF0aWMgY29uc3QgaW50IGtGU0V2ZW50c1N5c3RlbSA9CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdVc2VyRHJvcHBlZCB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdLZXJuZWxEcm9wcGVkIHwKKyAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ0V2ZW50SWRzV3JhcHBlZCB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdIaXN0b3J5RG9uZSB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdNb3VudCB8CisgICAga0ZTRXZlbnRTdHJlYW1FdmVudEZsYWdVbm1vdW50IHwKKyAgICBrRlNFdmVudFN0cmVhbUV2ZW50RmxhZ1Jvb3RDaGFuZ2VkOwogCiB0eXBlZGVmIHN0cnVjdCB1dl9fZnNldmVudHNfZXZlbnRfcyB1dl9fZnNldmVudHNfZXZlbnRfdDsKIHR5cGVkZWYgc3RydWN0IHV2X19jZl9sb29wX3NpZ25hbF9zIHV2X19jZl9sb29wX3NpZ25hbF90OwpAQCAtMTQ4LDcgKzE0Nyw3IEBACiBzdGF0aWMgdm9pZCAoKnBGU0V2ZW50U3RyZWFtU2NoZWR1bGVXaXRoUnVuTG9vcCkoRlNFdmVudFN0cmVhbVJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlJ1bkxvb3BSZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYpOwotc3RhdGljIEJvb2xlYW4gKCpwRlNFdmVudFN0cmVhbVN0YXJ0KShGU0V2ZW50U3RyZWFtUmVmKTsKK3N0YXRpYyBpbnQgKCpwRlNFdmVudFN0cmVhbVN0YXJ0KShGU0V2ZW50U3RyZWFtUmVmKTsKIHN0YXRpYyB2b2lkICgqcEZTRXZlbnRTdHJlYW1TdG9wKShGU0V2ZW50U3RyZWFtUmVmKTsKIAogI2RlZmluZSBVVl9fRlNFVkVOVFNfUFJPQ0VTUyhoYW5kbGUsIGJsb2NrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjE1LDcgKzIxNCw3IEBACiAKIAogLyogUnVucyBpbiBDRiB0aHJlYWQsIHdoZW4gdGhlcmUncmUgZXZlbnRzIGluIEZTRXZlbnRTdHJlYW0gKi8KLXN0YXRpYyB2b2lkIHV2X19mc2V2ZW50c19ldmVudF9jYihDb25zdEZTRXZlbnRTdHJlYW1SZWYgc3RyZWFtUmVmLAorc3RhdGljIHZvaWQgdXZfX2ZzZXZlbnRzX2V2ZW50X2NiKGNvbnN0IEZTRXZlbnRTdHJlYW1SZWYgc3RyZWFtUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bUV2ZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBldmVudFBhdGhzLApAQCAtMjYzLDEwICsyNjIsMTIgQEAKICAgICAgIGlmIChsZW4gPCBoYW5kbGUtPnJlYWxwYXRoX2xlbikKICAgICAgICAgY29udGludWU7CiAKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHJlYWxwYXRoIGFjdHVhbGx5IG5hbWVkIGEgZGlyZWN0b3J5LAorICAgICAgICogKHVubGVzcyB3YXRjaGluZyByb290LCB3aGljaCBhbG9uZSBrZWVwcyBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSByZWFscGF0aCkKKyAgICAgICAqIG9yIHRoYXQgd2UgbWF0Y2hlZCB0aGUgd2hvbGUgc3RyaW5nICovCiAgICAgICBpZiAoaGFuZGxlLT5yZWFscGF0aF9sZW4gIT0gbGVuICYmCisgICAgICAgICAgaGFuZGxlLT5yZWFscGF0aF9sZW4gPiAxICYmCiAgICAgICAgICAgcGF0aFtoYW5kbGUtPnJlYWxwYXRoX2xlbl0gIT0gJy8nKQotICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCByZWFscGF0aCBhY3R1YWxseSBuYW1lZCBhIGRpcmVjdG9yeSwKLSAgICAgICAgICogb3IgdGhhdCB3ZSBtYXRjaGVkIHRoZSB3aG9sZSBzdHJpbmcgKi8KICAgICAgICAgY29udGludWU7CiAKICAgICAgIGlmIChtZW1jbXAocGF0aCwgaGFuZGxlLT5yZWFscGF0aCwgaGFuZGxlLT5yZWFscGF0aF9sZW4pICE9IDApCkBAIC0zMzgsMTEgKzMzOSw4IEBACiAgIEZTRXZlbnRTdHJlYW1DcmVhdGVGbGFncyBmbGFnczsKIAogICAvKiBJbml0aWFsaXplIGNvbnRleHQgKi8KLSAgY3R4LnZlcnNpb24gPSAwOworICBtZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOwogICBjdHguaW5mbyA9IGxvb3A7Ci0gIGN0eC5yZXRhaW4gPSBOVUxMOwotICBjdHgucmVsZWFzZSA9IE5VTEw7Ci0gIGN0eC5jb3B5RGVzY3JpcHRpb24gPSBOVUxMOwogCiAgIGxhdGVuY3kgPSAwLjA1OwogCkBAIC03NDUsNiArNzQzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2lnbmFsX3NvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAqcGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiAKKyAgc3RhdGUtPmxvb3AgPSBOVUxMOworCiAgIHJldHVybiBOVUxMOwogfQogCkBAIC03OTcsMTMgKzc5NywxNCBAQAogCiAgIHV2X211dGV4X2xvY2soJmxvb3AtPmNmX211dGV4KTsKICAgUVVFVUVfSU5TRVJUX1RBSUwoJmxvb3AtPmNmX3NpZ25hbHMsICZpdGVtLT5tZW1iZXIpOwotICB1dl9tdXRleF91bmxvY2soJmxvb3AtPmNmX211dGV4KTsKIAogICBzdGF0ZSA9IGxvb3AtPmNmX3N0YXRlOwogICBhc3NlcnQoc3RhdGUgIT0gTlVMTCk7CiAgIHBDRlJ1bkxvb3BTb3VyY2VTaWduYWwoc3RhdGUtPnNpZ25hbF9zb3VyY2UpOwogICBwQ0ZSdW5Mb29wV2FrZVVwKHN0YXRlLT5sb29wKTsKIAorICB1dl9tdXRleF91bmxvY2soJmxvb3AtPmNmX211dGV4KTsKKwogICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvaGFpa3UuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2hhaWt1LmMKaW5kZXggNzcwODg1MS4uY2YxN2Q4MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvaGFpa3UuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9oYWlrdS5jCkBAIC0xNjUsMTIgKzE2NSwzIEBACiAKICAgcmV0dXJuIDA7CiB9Ci0KLXZvaWQgdXZfZnJlZV9jcHVfaW5mbyh1dl9jcHVfaW5mb190KiBjcHVfaW5mb3MsIGludCBjb3VudCkgewotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOwotCi0gIHV2X19mcmVlKGNwdV9pbmZvcyk7Ci19CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9pYm1pLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9pYm1pLmMKaW5kZXggYzdlMTA1MS4uZTRjNTEyMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvaWJtaS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2libWkuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPHN5cy92bm9kZS5oPgogCiAjaW5jbHVkZSA8YXM0MDBfcHJvdG9zLmg+CisjaW5jbHVkZSA8YXM0MDBfdHlwZXMuaD4KIAogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC05OCwyNCArOTksOTEgQEAKIH0gU1NUUzAyMDA7CiAKIAordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyIGhlYWRlclsyMDhdOworICB1bnNpZ25lZCBjaGFyIGxvY2FfYWRhcHRlcl9hZGRyZXNzWzEyXTsKK30gTElORDA1MDA7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgYnl0ZXNfcHJvdmlkZWQ7CisgIGludCBieXRlc19hdmFpbGFibGU7CisgIGNoYXIgbXNnaWRbN107Cit9IGVycmNvZGVfczsKKworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlMmFbMjU2XSA9IHsKKyAgICAwLCAxLCAyLCAzLCAxNTYsIDksIDEzNCwgMTI3LCAxNTEsIDE0MSwgMTQyLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisgICAgMTYsIDE3LCAxOCwgMTksIDE1NywgMTMzLCA4LCAxMzUsIDI0LCAyNSwgMTQ2LCAxNDMsIDI4LCAyOSwgMzAsIDMxLAorICAgIDEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMCwgMjMsIDI3LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgNSwgNiwgNywKKyAgICAxNDQsIDE0NSwgMjIsIDE0NywgMTQ4LCAxNDksIDE1MCwgNCwgMTUyLCAxNTMsIDE1NCwgMTU1LCAyMCwgMjEsIDE1OCwgMjYsCisgICAgMzIsIDE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDkxLCA0NiwgNjAsIDQwLCA0MywgMzMsCisgICAgMzgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NSwgMTc2LCAxNzcsIDkzLCAzNiwgNDIsIDQxLCA1OSwgOTQsCisgICAgNDUsIDQ3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTI0LCA0NCwgMzcsIDk1LCA2MiwgNjMsCisgICAgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgOTYsIDU4LCAzNSwgNjQsIDM5LCA2MSwgMzQsCisgICAgMTk1LCA5NywgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLAorICAgIDIwMiwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwKKyAgICAyMDksIDEyNiwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsCisgICAgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLAorICAgIDEyMywgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywKKyAgICAxMjUsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDIzOCwgMjM5LCAyNDAsIDI0MSwgMjQyLCAyNDMsCisgICAgOTIsIDE1OSwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LAorICAgIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1fTsKKworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhMmVbMjU2XSA9IHsKKyAgICAwLCAxLCAyLCAzLCA1NSwgNDUsIDQ2LCA0NywgMjIsIDUsIDM3LCAxMSwgMTIsIDEzLCAxNCwgMTUsCisgICAgMTYsIDE3LCAxOCwgMTksIDYwLCA2MSwgNTAsIDM4LCAyNCwgMjUsIDYzLCAzOSwgMjgsIDI5LCAzMCwgMzEsCisgICAgNjQsIDc5LCAxMjcsIDEyMywgOTEsIDEwOCwgODAsIDEyNSwgNzcsIDkzLCA5MiwgNzgsIDEwNywgOTYsIDc1LCA5NywKKyAgICAyNDAsIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDEyMiwgOTQsIDc2LCAxMjYsIDExMCwgMTExLAorICAgIDEyNCwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwKKyAgICAyMTUsIDIxNiwgMjE3LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgNzQsIDIyNCwgOTAsIDk1LCAxMDksCisgICAgMTIxLCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLAorICAgIDE1MSwgMTUyLCAxNTMsIDE2MiwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxOTIsIDEwNiwgMjA4LCAxNjEsIDcsCisgICAgMzIsIDMzLCAzNCwgMzUsIDM2LCAyMSwgNiwgMjMsIDQwLCA0MSwgNDIsIDQzLCA0NCwgOSwgMTAsIDI3LAorICAgIDQ4LCA0OSwgMjYsIDUxLCA1MiwgNTMsIDU0LCA4LCA1NiwgNTcsIDU4LCA1OSwgNCwgMjAsIDYyLCAyMjUsCisgICAgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsCisgICAgODgsIDg5LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsCisgICAgMTE4LCAxMTksIDEyMCwgMTI4LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAxNDQsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LAorICAgIDE1OSwgMTYwLCAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywKKyAgICAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjE4LCAyMTksCisgICAgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1fTsKKworCitzdGF0aWMgdm9pZCBpY29udl9lMmEodW5zaWduZWQgY2hhciBzcmNbXSwgdW5zaWduZWQgY2hhciBkc3RbXSwgc2l6ZV90IGxlbmd0aCkgeworICBzaXplX3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgIGRzdFtpXSA9IGUyYVtzcmNbaV1dOworfQorCisKK3N0YXRpYyB2b2lkIGljb252X2EyZShjb25zdCBjaGFyKiBzcmMsIHVuc2lnbmVkIGNoYXIgZHN0W10sIHNpemVfdCBsZW5ndGgpIHsKKyAgc2l6ZV90IHNyY2xlbjsKKyAgc2l6ZV90IGk7CisKKyAgc3JjbGVuID0gc3RybGVuKHNyYyk7CisgIGlmIChzcmNsZW4gPiBsZW5ndGgpCisgICAgYWJvcnQoKTsKKyAgZm9yIChpID0gMDsgaSA8IHNyY2xlbjsgaSsrKQorICAgIGRzdFtpXSA9IGEyZVtzcmNbaV1dOworICAvKiBwYWRkaW5nIHRoZSByZW1haW5pbmcgcGFydCB3aXRoIHNwYWNlcyAqLworICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKQorICAgIGRzdFtpXSA9IGEyZVsnICddOworfQorCisKIHN0YXRpYyBpbnQgZ2V0X2libWlfc3lzdGVtX3N0YXR1cyhTU1RTMDIwMCogcmN2cikgewogICAvKiByY3ZybGVuIGlzIGlucHV0IHBhcmFtZXRlciAyIHRvIFFXQ1JTU1RTICovCiAgIHVuc2lnbmVkIGludCByY3ZybGVuID0gc2l6ZW9mKCpyY3ZyKTsKKyAgdW5zaWduZWQgY2hhciBmb3JtYXRbOF0sIHJlc2V0X3N0YXR1c1sxMF07CiAKLSAgLyogZm9ybWF0IGlzIGlucHV0IHBhcmFtZXRlciAzIHRvIFFXQ1JTU1RTICgiU1NUUzAyMDAiIGluIEVCQ0RJQykgKi8KLSAgdW5zaWduZWQgY2hhciBmb3JtYXRbXSA9IHsweEUyLCAweEUyLCAweEUzLCAweEUyLCAweEYwLCAweEYyLCAweEYwLCAweEYwfTsKLQotICAvKiByZXNldF9zdGF0dXMgaXMgaW5wdXQgcGFyYW1ldGVyIDQgdG8gUVdDUlNTVFMgKCIqTk8gICAgICAgIiBpbiBFQkNESUMpICovCi0gIHVuc2lnbmVkIGNoYXIgcmVzZXRfc3RhdHVzW10gPSB7Ci0gICAgMHg1QywgMHhENSwgMHhENiwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MAotICB9OworICAvKiBmb3JtYXQgaXMgaW5wdXQgcGFyYW1ldGVyIDMgdG8gUVdDUlNTVFMgKi8KKyAgaWNvbnZfYTJlKCJTU1RTMDIwMCIsIGZvcm1hdCwgc2l6ZW9mKGZvcm1hdCkpOworICAvKiByZXNldF9zdGF0dXMgaXMgaW5wdXQgcGFyYW1ldGVyIDQgKi8KKyAgaWNvbnZfYTJlKCIqTk8iLCByZXNldF9zdGF0dXMsIHNpemVvZihyZXNldF9zdGF0dXMpKTsKIAogICAvKiBlcnJjb2RlIGlzIGlucHV0IHBhcmFtZXRlciA1IHRvIFFXQ1JTU1RTICovCi0gIHN0cnVjdCBfZXJyY29kZSB7Ci0gICAgaW50IGJ5dGVzX3Byb3ZpZGVkOwotICAgIGludCBieXRlc19hdmFpbGFibGU7Ci0gICAgY2hhciBtc2dpZFs3XTsKLSAgfSBlcnJjb2RlOworICBlcnJjb2RlX3MgZXJyY29kZTsKIAogICAvKiBxd2Nyc3N0c19wb2ludGVyIGlzIHRoZSAxNi1ieXRlIHRhZ2dlZCBzeXN0ZW0gcG9pbnRlciB0byBRV0NSU1NUUyAqLwogICBJTEVwb2ludGVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSkgcXdjcnNzdHNfcG9pbnRlcjsKQEAgLTE0NSw3ICsyMTMsNyBAQAogICBxd2Nyc3N0c19hcmd2WzVdID0gTlVMTDsKIAogICAvKiBDYWxsIHRoZSBJQk0gaSBRV0NSU1NUUyBBUEkgZnJvbSBQQVNFICovCi0gIHJjID0gX1BHTUNBTEwoJnF3Y3Jzc3RzX3BvaW50ZXIsICh2b2lkKiopJnF3Y3Jzc3RzX2FyZ3YsIDApOworICByYyA9IF9QR01DQUxMKCZxd2Nyc3N0c19wb2ludGVyLCBxd2Nyc3N0c19hcmd2LCAwKTsKIAogICByZXR1cm4gcmM7CiB9CkBAIC0xNTcsMTkgKzIyNSw3IEBACiAgIGlmIChnZXRfaWJtaV9zeXN0ZW1fc3RhdHVzKCZyY3ZyKSkKICAgICByZXR1cm4gMDsKIAotICAvKiBUaGUgYW1vdW50IG9mIG1haW4gc3RvcmFnZSwgaW4ga2lsb2J5dGVzLCBpbiB0aGUgc3lzdGVtLiAqLwotICB1aW50NjRfdCBtYWluX3N0b3JhZ2Vfc2l6ZSA9IHJjdnIubWFpbl9zdG9yYWdlX3NpemU7Ci0KLSAgLyogVGhlIGN1cnJlbnQgYW1vdW50IG9mIHN0b3JhZ2UgaW4gdXNlIGZvciB0ZW1wb3Jhcnkgb2JqZWN0cy4KLSAgICogaW4gbWlsbGlvbnMgKE0pIG9mIGJ5dGVzLgotICAgKi8KLSAgdWludDY0X3QgY3VycmVudF91bnByb3RlY3RlZF9zdG9yYWdlX3VzZWQgPQotICAgIHJjdnIuY3VycmVudF91bnByb3RlY3RlZF9zdG9yYWdlX3VzZWQgKiAxMDI0VUxMOwotCi0gIHVpbnQ2NF90IGZyZWVfc3RvcmFnZV9zaXplID0KLSAgICAobWFpbl9zdG9yYWdlX3NpemUgLSBjdXJyZW50X3VucHJvdGVjdGVkX3N0b3JhZ2VfdXNlZCkgKiAxMDI0VUxMOwotCi0gIHJldHVybiBmcmVlX3N0b3JhZ2Vfc2l6ZSA8IDAgPyAwIDogZnJlZV9zdG9yYWdlX3NpemU7CisgIHJldHVybiAodWludDY0X3QpcmN2ci5tYWluX3N0b3JhZ2Vfc2l6ZSAqIDEwMjRVTEw7CiB9CiAKIApAQCAtMjQ4LDMgKzMwNCwxNTkgQEAKICAgcmV0dXJuIDA7CiB9CiAKKworc3RhdGljIGludCBnZXRfaWJtaV9waHlzaWNhbF9hZGRyZXNzKGNvbnN0IGNoYXIqIGxpbmUsIGNoYXIgKCpwaHlzX2FkZHIpWzZdKSB7CisgIExJTkQwNTAwIHJjdnI7CisgIC8qIHJjdnJsZW4gaXMgaW5wdXQgcGFyYW1ldGVyIDIgdG8gUURDUkxJTkQgKi8KKyAgdW5zaWduZWQgaW50IHJjdnJsZW4gPSBzaXplb2YocmN2cik7CisgIHVuc2lnbmVkIGNoYXIgZm9ybWF0WzhdLCBsaW5lX25hbWVbMTBdOworICB1bnNpZ25lZCBjaGFyIG1hY19hZGRyW3NpemVvZihyY3ZyLmxvY2FfYWRhcHRlcl9hZGRyZXNzKV07CisgIGludCBjWzZdOworCisgIC8qIGZvcm1hdCBpcyBpbnB1dCBwYXJhbWV0ZXIgMyB0byBRRENSTElORCAqLworICBpY29udl9hMmUoIkxJTkQwNTAwIiwgZm9ybWF0LCBzaXplb2YoZm9ybWF0KSk7CisKKyAgLyogbGluZV9uYW1lIGlzIGlucHV0IHBhcmFtZXRlciA0IHRvIFFEQ1JMSU5EICovCisgIGljb252X2EyZShsaW5lLCBsaW5lX25hbWUsIHNpemVvZihsaW5lX25hbWUpKTsKKworICAvKiBlcnIgaXMgaW5wdXQgcGFyYW1ldGVyIDUgdG8gUURDUkxJTkQgKi8KKyAgZXJyY29kZV9zIGVycjsKKworICAvKiBxd2Nyc3N0c19wb2ludGVyIGlzIHRoZSAxNi1ieXRlIHRhZ2dlZCBzeXN0ZW0gcG9pbnRlciB0byBRRENSTElORCAqLworICBJTEVwb2ludGVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSkgcWRjcmxpbmRfcG9pbnRlcjsKKworICAvKiBxd2Nyc3N0c19hcmd2IGlzIHRoZSBhcnJheSBvZiBhcmd1bWVudCBwb2ludGVycyB0byBRRENSTElORCAqLworICB2b2lkKiBxZGNybGluZF9hcmd2WzZdOworCisgIC8qIFNldCB0aGUgSUJNIGkgcG9pbnRlciB0byB0aGUgUVNZUy9RRENSTElORCAqUEdNIG9iamVjdCAqLworICBpbnQgcmMgPSBfUlNMT0JKMigmcWRjcmxpbmRfcG9pbnRlciwgUlNMT0JKX1RTX1BHTSwgIlFEQ1JMSU5EIiwgIlFTWVMiKTsKKworICBpZiAocmMgIT0gMCkKKyAgICByZXR1cm4gcmM7CisKKyAgLyogaW5pdGlhbGl6ZSB0aGUgUURDUkxJTkQgcmV0dXJuZWQgaW5mbyBzdHJ1Y3R1cmUgKi8KKyAgbWVtc2V0KCZyY3ZyLCAwLCBzaXplb2YocmN2cikpOworCisgIC8qIGluaXRpYWxpemUgdGhlIFFEQ1JMSU5EIGVycm9yIGNvZGUgc3RydWN0dXJlICovCisgIG1lbXNldCgmZXJyLCAwLCBzaXplb2YoZXJyKSk7CisgIGVyci5ieXRlc19wcm92aWRlZCA9IHNpemVvZihlcnIpOworCisgIC8qIGluaXRpYWxpemUgdGhlIGFycmF5IG9mIGFyZ3VtZW50IHBvaW50ZXJzIGZvciB0aGUgUURDUkxJTkQgQVBJICovCisgIHFkY3JsaW5kX2FyZ3ZbMF0gPSAmcmN2cjsKKyAgcWRjcmxpbmRfYXJndlsxXSA9ICZyY3ZybGVuOworICBxZGNybGluZF9hcmd2WzJdID0gJmZvcm1hdDsKKyAgcWRjcmxpbmRfYXJndlszXSA9ICZsaW5lX25hbWU7CisgIHFkY3JsaW5kX2FyZ3ZbNF0gPSAmZXJyOworICBxZGNybGluZF9hcmd2WzVdID0gTlVMTDsKKworICAvKiBDYWxsIHRoZSBJQk0gaSBRRENSTElORCBBUEkgZnJvbSBQQVNFICovCisgIHJjID0gX1BHTUNBTEwoJnFkY3JsaW5kX3BvaW50ZXIsIHFkY3JsaW5kX2FyZ3YsIDApOworICBpZiAocmMgIT0gMCkKKyAgICByZXR1cm4gcmM7CisKKyAgLyogY29udmVydCBlYmNkaWMgbG9jYV9hZGFwdGVyX2FkZHJlc3MgdG8gYXNjaWkgZmlyc3QgKi8KKyAgaWNvbnZfZTJhKHJjdnIubG9jYV9hZGFwdGVyX2FkZHJlc3MsIG1hY19hZGRyLAorICAgICAgICAgICAgc2l6ZW9mKHJjdnIubG9jYV9hZGFwdGVyX2FkZHJlc3MpKTsKKworICAvKiBjb252ZXJ0IGxvY2FfYWRhcHRlcl9hZGRyZXNzKGNoYXJbMTJdKSB0byBwaHlzX2FkZHIoY2hhcls2XSkgKi8KKyAgaW50IHIgPSBzc2NhbmYobWFjX2FkZHIsICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiLAorICAgICAgICAgICAgICAgICZjWzBdLCAmY1sxXSwgJmNbMl0sICZjWzNdLCAmY1s0XSwgJmNbNV0pOworCisgIGlmIChyID09IEFSUkFZX1NJWkUoYykpIHsKKyAgICAoKnBoeXNfYWRkcilbMF0gPSBjWzBdOworICAgICgqcGh5c19hZGRyKVsxXSA9IGNbMV07CisgICAgKCpwaHlzX2FkZHIpWzJdID0gY1syXTsKKyAgICAoKnBoeXNfYWRkcilbM10gPSBjWzNdOworICAgICgqcGh5c19hZGRyKVs0XSA9IGNbNF07CisgICAgKCpwaHlzX2FkZHIpWzVdID0gY1s1XTsKKyAgfSBlbHNlIHsKKyAgICBtZW1zZXQoKnBoeXNfYWRkciwgMCwgc2l6ZW9mKCpwaHlzX2FkZHIpKTsKKyAgICByYyA9IC0xOworICB9CisgIHJldHVybiByYzsKK30KKworCitpbnQgdXZfaW50ZXJmYWNlX2FkZHJlc3Nlcyh1dl9pbnRlcmZhY2VfYWRkcmVzc190KiogYWRkcmVzc2VzLCBpbnQqIGNvdW50KSB7CisgIHV2X2ludGVyZmFjZV9hZGRyZXNzX3QqIGFkZHJlc3M7CisgIHN0cnVjdCBpZmFkZHJzX3Bhc2UgKmlmYXAgPSBOVUxMLCAqY3VyOworICBpbnQgaW5ldDYsIHIgPSAwOworCisgICpjb3VudCA9IDA7CisgICphZGRyZXNzZXMgPSBOVUxMOworCisgIGlmIChRcDJnZXRpZmFkZHJzKCZpZmFwKSkKKyAgICByZXR1cm4gVVZfRU5PU1lTOworCisgIC8qIFRoZSBmaXJzdCBsb29wIHRvIGdldCB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgdG8gYmUgYWxsb2NhdGVkICovCisgIGZvciAoY3VyID0gaWZhcDsgY3VyOyBjdXIgPSBjdXItPmlmYV9uZXh0KSB7CisgICAgaWYgKCEoY3VyLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2IHx8CisgICAgICAgICAgY3VyLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpKQorICAgICAgY29udGludWU7CisKKyAgICBpZiAoIShjdXItPmlmYV9mbGFncyAmIElGRl9VUCAmJiBjdXItPmlmYV9mbGFncyAmIElGRl9SVU5OSU5HKSkKKyAgICAgIGNvbnRpbnVlOworCisgICAgKCpjb3VudCkrKzsKKyAgfQorCisgIGlmICgqY291bnQgPT0gMCkgeworICAgIFFwMmZyZWVpZmFkZHJzKGlmYXApOworICAgIHJldHVybiAwOworICB9CisKKyAgLyogQWxsb2MgdGhlIHJldHVybiBpbnRlcmZhY2Ugc3RydWN0cyAqLworICAqYWRkcmVzc2VzID0gdXZfX2NhbGxvYygqY291bnQsIHNpemVvZigqKmFkZHJlc3NlcykpOworICBpZiAoKmFkZHJlc3NlcyA9PSBOVUxMKSB7CisgICAgUXAyZnJlZWlmYWRkcnMoaWZhcCk7CisgICAgcmV0dXJuIFVWX0VOT01FTTsKKyAgfQorICBhZGRyZXNzID0gKmFkZHJlc3NlczsKKworICAvKiBUaGUgc2Vjb25kIGxvb3AgdG8gZmlsbCBpbiB0aGUgYXJyYXkgKi8KKyAgZm9yIChjdXIgPSBpZmFwOyBjdXI7IGN1ciA9IGN1ci0+aWZhX25leHQpIHsKKyAgICBpZiAoIShjdXItPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgfHwKKyAgICAgICAgICBjdXItPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkpCisgICAgICBjb250aW51ZTsKKworICAgIGlmICghKGN1ci0+aWZhX2ZsYWdzICYgSUZGX1VQICYmIGN1ci0+aWZhX2ZsYWdzICYgSUZGX1JVTk5JTkcpKQorICAgICAgY29udGludWU7CisKKyAgICBhZGRyZXNzLT5uYW1lID0gdXZfX3N0cmR1cChjdXItPmlmYV9uYW1lKTsKKworICAgIGluZXQ2ID0gKGN1ci0+aWZhX2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNik7CisKKyAgICBpZiAoaW5ldDYpIHsKKyAgICAgIGFkZHJlc3MtPmFkZHJlc3MuYWRkcmVzczYgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW42KiljdXItPmlmYV9hZGRyKTsKKyAgICAgIGFkZHJlc3MtPm5ldG1hc2submV0bWFzazYgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW42KiljdXItPmlmYV9uZXRtYXNrKTsKKyAgICAgIGFkZHJlc3MtPm5ldG1hc2submV0bWFzazYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICB9IGVsc2UgeworICAgICAgYWRkcmVzcy0+YWRkcmVzcy5hZGRyZXNzNCA9ICooKHN0cnVjdCBzb2NrYWRkcl9pbiopY3VyLT5pZmFfYWRkcik7CisgICAgICBhZGRyZXNzLT5uZXRtYXNrLm5ldG1hc2s0ID0gKigoc3RydWN0IHNvY2thZGRyX2luKiljdXItPmlmYV9uZXRtYXNrKTsKKyAgICAgIGFkZHJlc3MtPm5ldG1hc2submV0bWFzazQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgfQorICAgIGFkZHJlc3MtPmlzX2ludGVybmFsID0gY3VyLT5pZmFfZmxhZ3MgJiBJRkZfTE9PUEJBQ0sgPyAxIDogMDsKKyAgICBpZiAoIWFkZHJlc3MtPmlzX2ludGVybmFsKSB7CisgICAgICBpbnQgcmMgPSBnZXRfaWJtaV9waHlzaWNhbF9hZGRyZXNzKGFkZHJlc3MtPm5hbWUsICZhZGRyZXNzLT5waHlzX2FkZHIpOworICAgICAgaWYgKHJjICE9IDApCisgICAgICAgIHIgPSByYzsKKyAgICB9CisKKyAgICBhZGRyZXNzKys7CisgIH0KKworICBRcDJmcmVlaWZhZGRycyhpZmFwKTsKKyAgcmV0dXJuIHI7Cit9CisKKwordm9pZCB1dl9mcmVlX2ludGVyZmFjZV9hZGRyZXNzZXModXZfaW50ZXJmYWNlX2FkZHJlc3NfdCogYWRkcmVzc2VzLCBpbnQgY291bnQpIHsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICB1dl9fZnJlZShhZGRyZXNzZXNbaV0ubmFtZSk7CisgIH0KKworICB1dl9fZnJlZShhZGRyZXNzZXMpOworfQorCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9pbnRlcm5hbC5oIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvaW50ZXJuYWwuaAppbmRleCBiNDNjMGIxLi4yNTQ5NjAyIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9pbnRlcm5hbC5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2ludGVybmFsLmgKQEAgLTI1LDExICsyNSwxMyBAQAogI2luY2x1ZGUgInV2LWNvbW1vbi5oIgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+IC8qIF9QT1NJWF9QQVRIX01BWCwgUEFUSF9NQVggKi8KICNpbmNsdWRlIDxzdGRsaWIuaD4gLyogYWJvcnQgKi8KICNpbmNsdWRlIDxzdHJpbmcuaD4gLyogc3RycmNociAqLwotI2luY2x1ZGUgPGZjbnRsLmg+ICAvKiBPX0NMT0VYRUMsIG1heSBiZSAqLworI2luY2x1ZGUgPGZjbnRsLmg+ICAvKiBPX0NMT0VYRUMgYW5kIE9fTk9OQkxPQ0ssIGlmIHN1cHBvcnRlZC4gKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogCiAjaWYgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCiAjIGRlZmluZSBpbmxpbmUgX19pbmxpbmUKQEAgLTYwLDYgKzYyLDE0IEBACiAjIGluY2x1ZGUgPEF2YWlsYWJpbGl0eU1hY3Jvcy5oPgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKF9QT1NJWF9QQVRIX01BWCkKKyMgZGVmaW5lIFVWX19QQVRIX01BWCBfUE9TSVhfUEFUSF9NQVgKKyNlbGlmIGRlZmluZWQoUEFUSF9NQVgpCisjIGRlZmluZSBVVl9fUEFUSF9NQVggUEFUSF9NQVgKKyNlbHNlCisjIGRlZmluZSBVVl9fUEFUSF9NQVggODE5MgorI2VuZGlmCisKICNpZiBkZWZpbmVkKENNQUtFX0JPT1RTVFJBUCkKICMgdW5kZWYgcHRocmVhZF9hdGZvcmsKICMgZGVmaW5lIHB0aHJlYWRfYXRmb3JrKHByZXBhcmUsIHBhcmVudCwgY2hpbGQpIFwKQEAgLTEwNiwxMCArMTE2LDggQEAKICNpZiBkZWZpbmVkKF9fY2xhbmdfXykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkZWZpbmVkKF9fR05VQ19fKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCi0jIGRlZmluZSBVVl9ERVNUUlVDVE9SKGRlY2xhcmF0aW9uKSBfX2F0dHJpYnV0ZV9fKChkZXN0cnVjdG9yKSkgZGVjbGFyYXRpb24KICMgZGVmaW5lIFVWX1VOVVNFRChkZWNsYXJhdGlvbikgICAgIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGRlY2xhcmF0aW9uCiAjZWxzZQotIyBkZWZpbmUgVVZfREVTVFJVQ1RPUihkZWNsYXJhdGlvbikgZGVjbGFyYXRpb24KICMgZGVmaW5lIFVWX1VOVVNFRChkZWNsYXJhdGlvbikgICAgIGRlY2xhcmF0aW9uCiAjZW5kaWYKIApAQCAtMjcxLDYgKzI3OSwxMiBAQAogRklMRSogdXZfX29wZW5fZmlsZShjb25zdCBjaGFyKiBwYXRoKTsKIGludCB1dl9fZ2V0cHd1aWRfcih1dl9wYXNzd2RfdCogcHdkKTsKIAorLyogcmFuZG9tICovCitpbnQgdXZfX3JhbmRvbV9kZXZ1cmFuZG9tKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CitpbnQgdXZfX3JhbmRvbV9nZXRyYW5kb20odm9pZCogYnVmLCBzaXplX3QgYnVmbGVuKTsKK2ludCB1dl9fcmFuZG9tX2dldGVudHJvcHkodm9pZCogYnVmLCBzaXplX3QgYnVmbGVuKTsKK2ludCB1dl9fcmFuZG9tX3JlYWRwYXRoKGNvbnN0IGNoYXIqIHBhdGgsIHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CitpbnQgdXZfX3JhbmRvbV9zeXNjdGwodm9pZCogYnVmLCBzaXplX3QgYnVmbGVuKTsKIAogI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChDTUFLRV9CT09UU1RSQVApCiBpbnQgdXZfX19zdHJlYW1fZmQoY29uc3QgdXZfc3RyZWFtX3QqIGhhbmRsZSk7CkBAIC0yNzksMTMgKzI5MywxMiBAQAogI2RlZmluZSB1dl9fc3RyZWFtX2ZkKGhhbmRsZSkgKChoYW5kbGUpLT5pb193YXRjaGVyLmZkKQogI2VuZGlmIC8qIGRlZmluZWQoX19BUFBMRV9fKSAqLwogCi0jaWZkZWYgVVZfX09fTk9OQkxPQ0sKLSMgZGVmaW5lIFVWX19GX05PTkJMT0NLIFVWX19PX05PTkJMT0NLCisjaWZkZWYgT19OT05CTE9DSworIyBkZWZpbmUgVVZfX0ZfTk9OQkxPQ0sgT19OT05CTE9DSwogI2Vsc2UKICMgZGVmaW5lIFVWX19GX05PTkJMT0NLIDEKICNlbmRpZgogCi1pbnQgdXZfX21ha2Vfc29ja2V0cGFpcihpbnQgZmRzWzJdLCBpbnQgZmxhZ3MpOwogaW50IHV2X19tYWtlX3BpcGUoaW50IGZkc1syXSwgaW50IGZsYWdzKTsKIAogI2lmIGRlZmluZWQoX19BUFBMRV9fKQpAQCAtMzIzLDQgKzMzNiwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBuYW1lbGVuKTsKIAorI2lmIGRlZmluZWQoX19saW51eF9fKSAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykKKyNkZWZpbmUgSEFWRV9NTVNHIDEKK3N0cnVjdCB1dl9fbW1zZ2hkciB7CisgIHN0cnVjdCBtc2doZHIgbXNnX2hkcjsKKyAgdW5zaWduZWQgaW50IG1zZ19sZW47Cit9OworCitpbnQgdXZfX3JlY3ZtbXNnKGludCBmZCwKKyAgICAgICAgICAgICAgICAgc3RydWN0IHV2X19tbXNnaGRyKiBtbXNnLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmxlbiwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpOworaW50IHV2X19zZW5kbW1zZyhpbnQgZmQsCisgICAgICAgICAgICAgICAgIHN0cnVjdCB1dl9fbW1zZ2hkciogbW1zZywKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZsZW4sCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CisjZWxzZQorI2RlZmluZSBIQVZFX01NU0cgMAorI2VuZGlmCisKKwogI2VuZGlmIC8qIFVWX1VOSVhfSU5URVJOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2txdWV1ZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgva3F1ZXVlLmMKaW5kZXggYzA0ZTdhNC4uYWQwOWY0MCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgva3F1ZXVlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgva3F1ZXVlLmMKQEAgLTQ1NCwxMCArNDU0LDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsKICAgaW50IGZkOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwNzAKKyAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyNlbmRpZgogCiAgIGlmICh1dl9faXNfYWN0aXZlKGhhbmRsZSkpCiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKIAorICBoYW5kbGUtPmNiID0gY2I7CisgIGhhbmRsZS0+cGF0aCA9IHV2X19zdHJkdXAocGF0aCk7CisgIGlmIChoYW5kbGUtPnBhdGggPT0gTlVMTCkKKyAgICByZXR1cm4gVVZfRU5PTUVNOworCisgIC8qIFRPRE8gb3BlbiBhc3luY2hyb25vdXNseSAtIGJ1dCBob3cgZG8gd2UgcmVwb3J0IGJhY2sgZXJyb3JzPyAqLworICBmZCA9IG9wZW4oaGFuZGxlLT5wYXRoLCBPX1JET05MWSk7CisgIGlmIChmZCA9PSAtMSkgeworICAgIHV2X19mcmVlKGhhbmRsZS0+cGF0aCk7CisgICAgaGFuZGxlLT5wYXRoID0gTlVMTDsKKyAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisgIH0KKwogI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwNzAKICAgLyogTnVsbGlmeSBmaWVsZCB0byBwZXJmb3JtIGNoZWNrcyBsYXRlciAqLwogICBoYW5kbGUtPmNmX2NiID0gTlVMTDsKQEAgLTQ2NSwxNCArNDgxLDE3IEBACiAgIGhhbmRsZS0+cmVhbHBhdGhfbGVuID0gMDsKICAgaGFuZGxlLT5jZl9mbGFncyA9IGZsYWdzOwogCisgIGlmIChmc3RhdChmZCwgJnN0YXRidWYpKQorICAgIGdvdG8gZmFsbGJhY2s7CisgIC8qIEZTRXZlbnRzIHdvcmtzIG9ubHkgd2l0aCBkaXJlY3RvcmllcyAqLworICBpZiAoIShzdGF0YnVmLnN0X21vZGUgJiBTX0lGRElSKSkKKyAgICBnb3RvIGZhbGxiYWNrOworCiAgIGlmICghdXZfX2hhc19mb3JrZWRfd2l0aF9jZnJ1bmxvb3ApIHsKICAgICBpbnQgcjsKLSAgICAvKiBUaGUgZmFsbGJhY2sgZmQgaXMgbm90IHVzZWQgKi8KKyAgICAvKiBUaGUgZmFsbGJhY2sgZmQgaXMgbm8gbG9uZ2VyIG5lZWRlZCAqLworICAgIHV2X19jbG9zZV9ub2NoZWNrc3RkaW8oZmQpOwogICAgIGhhbmRsZS0+ZXZlbnRfd2F0Y2hlci5mZCA9IC0xOwotICAgIGhhbmRsZS0+cGF0aCA9IHV2X19zdHJkdXAocGF0aCk7Ci0gICAgaWYgKGhhbmRsZS0+cGF0aCA9PSBOVUxMKQotICAgICAgcmV0dXJuIFVWX0VOT01FTTsKLSAgICBoYW5kbGUtPmNiID0gY2I7CiAgICAgciA9IHV2X19mc2V2ZW50c19pbml0KGhhbmRsZSk7CiAgICAgaWYgKHIgPT0gMCkgewogICAgICAgdXZfX2hhbmRsZV9zdGFydChoYW5kbGUpOwpAQCAtNDgyLDIwICs1MDEsOSBAQAogICAgIH0KICAgICByZXR1cm4gcjsKICAgfQorZmFsbGJhY2s6CiAjZW5kaWYgLyogI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwNzAgKi8KIAotICAvKiBUT0RPIG9wZW4gYXN5bmNocm9ub3VzbHkgLSBidXQgaG93IGRvIHdlIHJlcG9ydCBiYWNrIGVycm9ycz8gKi8KLSAgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKLSAgaWYgKGZkID09IC0xKQotICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLQotICBoYW5kbGUtPnBhdGggPSB1dl9fc3RyZHVwKHBhdGgpOwotICBpZiAoaGFuZGxlLT5wYXRoID09IE5VTEwpIHsKLSAgICB1dl9fY2xvc2Vfbm9jaGVja3N0ZGlvKGZkKTsKLSAgICByZXR1cm4gVVZfRU5PTUVNOwotICB9Ci0KLSAgaGFuZGxlLT5jYiA9IGNiOwogICB1dl9faGFuZGxlX3N0YXJ0KGhhbmRsZSk7CiAgIHV2X19pb19pbml0KCZoYW5kbGUtPmV2ZW50X3dhdGNoZXIsIHV2X19mc19ldmVudCwgZmQpOwogICB1dl9faW9fc3RhcnQoaGFuZGxlLT5sb29wLCAmaGFuZGxlLT5ldmVudF93YXRjaGVyLCBQT0xMSU4pOwpAQCAtNTE0LDcgKzUyMiw3IEBACiAgIHV2X19oYW5kbGVfc3RvcChoYW5kbGUpOwogCiAjaWYgZGVmaW5lZChfX0FQUExFX18pICYmIE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTA3MAotICBpZiAoIXV2X19oYXNfZm9ya2VkX3dpdGhfY2ZydW5sb29wKQorICBpZiAoIXV2X19oYXNfZm9ya2VkX3dpdGhfY2ZydW5sb29wICYmIGhhbmRsZS0+Y2ZfY2IgIT0gTlVMTCkKICAgICByID0gdXZfX2ZzZXZlbnRzX2Nsb3NlKGhhbmRsZSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtY29yZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtY29yZS5jCmluZGV4IGI1MzliZWIuLjk5Y2JiMWMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LWNvcmUuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9saW51eC1jb3JlLmMKQEAgLTkwLDcgKzkwLDEyIEBACiAgICAqIGEuay5hLiBMb2xsaXBvcC4gU2luY2UgRVBPTExfQ0xPRVhFQyBpcyBhbiBhbGlhcyBmb3IgT19DTE9FWEVDIG9uIGFsbAogICAgKiBhcmNoaXRlY3R1cmVzLCB3ZSBqdXN0IHVzZSB0aGF0IGluc3RlYWQuCiAgICAqLworI2lmIGRlZmluZWQoX19BTkRST0lEX0FQSV9fKSAmJiBfX0FORFJPSURfQVBJX18gPCAyMQorICBmZCA9IC0xOworICBlcnJubyA9IEVOT1NZUzsKKyNlbHNlCiAgIGZkID0gZXBvbGxfY3JlYXRlMShPX0NMT0VYRUMpOworI2VuZGlmCiAKICAgLyogZXBvbGxfY3JlYXRlMSgpIGNhbiBmYWlsIGVpdGhlciBiZWNhdXNlIGl0J3Mgbm90IGltcGxlbWVudGVkIChvbGQga2VybmVsKQogICAgKiBvciBiZWNhdXNlIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgT19DTE9FWEVDIGZsYWcuCkBAIC0yMDMsNiArMjA4LDggQEAKICAgICogdGhhdCBiZWluZyB0aGUgbGFyZ2VzdCB2YWx1ZSBJIGhhdmUgc2VlbiBpbiB0aGUgd2lsZCAoYW5kIG9ubHkgb25jZS4pCiAgICAqLwogICBzdGF0aWMgY29uc3QgaW50IG1heF9zYWZlX3RpbWVvdXQgPSAxNzg5NTY5OworICBzdGF0aWMgaW50IG5vX2Vwb2xsX3B3YWl0OworICBzdGF0aWMgaW50IG5vX2Vwb2xsX3dhaXQ7CiAgIHN0cnVjdCBlcG9sbF9ldmVudCBldmVudHNbMTAyNF07CiAgIHN0cnVjdCBlcG9sbF9ldmVudCogcGU7CiAgIHN0cnVjdCBlcG9sbF9ldmVudCBlOwpAQCAtMjEwLDcgKzIxNyw3IEBACiAgIFFVRVVFKiBxOwogICB1dl9faW9fdCogdzsKICAgc2lnc2V0X3Qgc2lnc2V0OwotICBzaWdzZXRfdCogcHNpZ3NldDsKKyAgdWludDY0X3Qgc2lnbWFzazsKICAgdWludDY0X3QgYmFzZTsKICAgaW50IGhhdmVfc2lnbmFsczsKICAgaW50IG5ldmVudHM7CkBAIC0yNjIsMTEgKzI2OSwxMSBAQAogICAgIHctPmV2ZW50cyA9IHctPnBldmVudHM7CiAgIH0KIAotICBwc2lnc2V0ID0gTlVMTDsKKyAgc2lnbWFzayA9IDA7CiAgIGlmIChsb29wLT5mbGFncyAmIFVWX0xPT1BfQkxPQ0tfU0lHUFJPRikgewogICAgIHNpZ2VtcHR5c2V0KCZzaWdzZXQpOwogICAgIHNpZ2FkZHNldCgmc2lnc2V0LCBTSUdQUk9GKTsKLSAgICBwc2lnc2V0ID0gJnNpZ3NldDsKKyAgICBzaWdtYXNrIHw9IDEgPDwgKFNJR1BST0YgLSAxKTsKICAgfQogCiAgIGFzc2VydCh0aW1lb3V0ID49IC0xKTsKQEAgLTI4MSwxMSArMjg4LDM1IEBACiAgICAgaWYgKHNpemVvZihpbnQzMl90KSA9PSBzaXplb2YobG9uZykgJiYgdGltZW91dCA+PSBtYXhfc2FmZV90aW1lb3V0KQogICAgICAgdGltZW91dCA9IG1heF9zYWZlX3RpbWVvdXQ7CiAKLSAgICBuZmRzID0gZXBvbGxfcHdhaXQobG9vcC0+YmFja2VuZF9mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGV2ZW50cyksCi0gICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgIHBzaWdzZXQpOworICAgIGlmIChzaWdtYXNrICE9IDAgJiYgbm9fZXBvbGxfcHdhaXQgIT0gMCkKKyAgICAgIGlmIChwdGhyZWFkX3NpZ21hc2soU0lHX0JMT0NLLCAmc2lnc2V0LCBOVUxMKSkKKyAgICAgICAgYWJvcnQoKTsKKworICAgIGlmIChub19lcG9sbF93YWl0ICE9IDAgfHwgKHNpZ21hc2sgIT0gMCAmJiBub19lcG9sbF9wd2FpdCA9PSAwKSkgeworI2lmIGRlZmluZWQoX19BTkRST0lEX0FQSV9fKSAmJiBfX0FORFJPSURfQVBJX18gPCAyMQorICAgICAgbmZkcyA9IC0xOworICAgICAgZXJybm8gPSBFTk9TWVM7CisjZWxzZQorICAgICAgbmZkcyA9IGVwb2xsX3B3YWl0KGxvb3AtPmJhY2tlbmRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUoZXZlbnRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICZzaWdzZXQpOworI2VuZGlmCisgICAgICBpZiAobmZkcyA9PSAtMSAmJiBlcnJubyA9PSBFTk9TWVMpCisgICAgICAgIG5vX2Vwb2xsX3B3YWl0ID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgbmZkcyA9IGVwb2xsX3dhaXQobG9vcC0+YmFja2VuZF9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUoZXZlbnRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpOworICAgICAgaWYgKG5mZHMgPT0gLTEgJiYgZXJybm8gPT0gRU5PU1lTKQorICAgICAgICBub19lcG9sbF93YWl0ID0gMTsKKyAgICB9CisKKyAgICBpZiAoc2lnbWFzayAhPSAwICYmIG5vX2Vwb2xsX3B3YWl0ICE9IDApCisgICAgICBpZiAocHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmc2lnc2V0LCBOVUxMKSkKKyAgICAgICAgYWJvcnQoKTsKIAogICAgIC8qIFVwZGF0ZSBsb29wLT50aW1lIHVuY29uZGl0aW9uYWxseS4gSXQncyB0ZW1wdGluZyB0byBza2lwIHRoZSB1cGRhdGUgd2hlbgogICAgICAqIHRpbWVvdXQgPT0gMCAoaS5lLiBub24tYmxvY2tpbmcgcG9sbCkgYnV0IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZQpAQCAtMzA2LDYgKzMzNywxMiBAQAogICAgIH0KIAogICAgIGlmIChuZmRzID09IC0xKSB7CisgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTKSB7CisgICAgICAgIC8qIGVwb2xsX3dhaXQoKSBvciBlcG9sbF9wd2FpdCgpIGZhaWxlZCwgdHJ5IHRoZSBvdGhlciBzeXN0ZW0gY2FsbC4gKi8KKyAgICAgICAgYXNzZXJ0KG5vX2Vwb2xsX3dhaXQgPT0gMCB8fCBub19lcG9sbF9wd2FpdCA9PSAwKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKICAgICAgICAgYWJvcnQoKTsKIApAQCAtMzIyLDkgKzM1OSwxOSBAQAogICAgIGhhdmVfc2lnbmFscyA9IDA7CiAgICAgbmV2ZW50cyA9IDA7CiAKLSAgICBhc3NlcnQobG9vcC0+d2F0Y2hlcnMgIT0gTlVMTCk7Ci0gICAgbG9vcC0+d2F0Y2hlcnNbbG9vcC0+bndhdGNoZXJzXSA9ICh2b2lkKikgZXZlbnRzOwotICAgIGxvb3AtPndhdGNoZXJzW2xvb3AtPm53YXRjaGVycyArIDFdID0gKHZvaWQqKSAodWludHB0cl90KSBuZmRzOworICAgIHsKKyAgICAgIC8qIFNxdWVsY2ggYSAtV2FkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciB3YXJuaW5nIHdpdGggZ2NjID49IDkuICovCisgICAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCogZXZlbnRzOworICAgICAgICB1dl9faW9fdCogd2F0Y2hlcnM7CisgICAgICB9IHg7CisKKyAgICAgIHguZXZlbnRzID0gZXZlbnRzOworICAgICAgYXNzZXJ0KGxvb3AtPndhdGNoZXJzICE9IE5VTEwpOworICAgICAgbG9vcC0+d2F0Y2hlcnNbbG9vcC0+bndhdGNoZXJzXSA9IHgud2F0Y2hlcnM7CisgICAgICBsb29wLT53YXRjaGVyc1tsb29wLT5ud2F0Y2hlcnMgKyAxXSA9ICh2b2lkKikgKHVpbnRwdHJfdCkgbmZkczsKKyAgICB9CisKICAgICBmb3IgKGkgPSAwOyBpIDwgbmZkczsgaSsrKSB7CiAgICAgICBwZSA9IGV2ZW50cyArIGk7CiAgICAgICBmZCA9IHBlLT5kYXRhLmZkOwpAQCAtNzIxLDcgKzc2OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bWNwdXMsCiAgICAgICAgICAgICAgICAgICAgICAgdXZfY3B1X2luZm9fdCogY2kpIHsKICAgc3RydWN0IHV2X2NwdV90aW1lc19zIHRzOwotICB1aW50NjRfdCBjbG9ja190aWNrczsKKyAgdW5zaWduZWQgaW50IHRpY2tzOworICB1bnNpZ25lZCBpbnQgbXVsdGlwbGllcjsKICAgdWludDY0X3QgdXNlcjsKICAgdWludDY0X3QgbmljZTsKICAgdWludDY0X3Qgc3lzOwpAQCAtNzMyLDkgKzc4MCwxMCBAQAogICB1aW50NjRfdCBsZW47CiAgIGNoYXIgYnVmWzEwMjRdOwogCi0gIGNsb2NrX3RpY2tzID0gc3lzY29uZihfU0NfQ0xLX1RDSyk7Ci0gIGFzc2VydChjbG9ja190aWNrcyAhPSAodWludDY0X3QpIC0xKTsKLSAgYXNzZXJ0KGNsb2NrX3RpY2tzICE9IDApOworICB0aWNrcyA9ICh1bnNpZ25lZCBpbnQpc3lzY29uZihfU0NfQ0xLX1RDSyk7CisgIG11bHRpcGxpZXIgPSAoKHVpbnQ2NF90KTEwMDBMIC8gdGlja3MpOworICBhc3NlcnQodGlja3MgIT0gKHVuc2lnbmVkIGludCkgLTEpOworICBhc3NlcnQodGlja3MgIT0gMCk7CiAKICAgcmV3aW5kKHN0YXRmaWxlX2ZwKTsKIApAQCAtNzc2LDExICs4MjUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgJmlycSkpCiAgICAgICBhYm9ydCgpOwogCi0gICAgdHMudXNlciA9IGNsb2NrX3RpY2tzICogdXNlcjsKLSAgICB0cy5uaWNlID0gY2xvY2tfdGlja3MgKiBuaWNlOwotICAgIHRzLnN5cyAgPSBjbG9ja190aWNrcyAqIHN5czsKLSAgICB0cy5pZGxlID0gY2xvY2tfdGlja3MgKiBpZGxlOwotICAgIHRzLmlycSAgPSBjbG9ja190aWNrcyAqIGlycTsKKyAgICB0cy51c2VyID0gdXNlciAqIG11bHRpcGxpZXI7CisgICAgdHMubmljZSA9IG5pY2UgKiBtdWx0aXBsaWVyOworICAgIHRzLnN5cyAgPSBzeXMgKiBtdWx0aXBsaWVyOworICAgIHRzLmlkbGUgPSBpZGxlICogbXVsdGlwbGllcjsKKyAgICB0cy5pcnEgID0gaXJxICogbXVsdGlwbGllcjsKICAgICBjaVtudW0rK10uY3B1X3RpbWVzID0gdHM7CiAgIH0KICAgYXNzZXJ0KG51bSA9PSBudW1jcHVzKTsKQEAgLTgxMiwxNiArODYxLDYgQEAKIH0KIAogCi12b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOwotICB9Ci0KLSAgdXZfX2ZyZWUoY3B1X2luZm9zKTsKLX0KLQogc3RhdGljIGludCB1dl9faWZhZGRyX2V4Y2x1ZGUoc3RydWN0IGlmYWRkcnMgKmVudCwgaW50IGV4Y2x1ZGVfdHlwZSkgewogICBpZiAoISgoZW50LT5pZmFfZmxhZ3MgJiBJRkZfVVApICYmIChlbnQtPmlmYV9mbGFncyAmIElGRl9SVU5OSU5HKSkpCiAgICAgcmV0dXJuIDE7CkBAIC05NTMsNyArOTkyLDcgQEAKICAgcmMgPSAwOwogICBmZCA9IHV2X19vcGVuX2Nsb2V4ZWMoIi9wcm9jL21lbWluZm8iLCBPX1JET05MWSk7CiAKLSAgaWYgKGZkID09IC0xKQorICBpZiAoZmQgPCAwKQogICAgIHJldHVybiAwOwogCiAgIG4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSk7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9saW51eC1pbm90aWZ5LmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9saW51eC1pbm90aWZ5LmMKaW5kZXggOWIyNjIwMi4uNDJiNjAxYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtaW5vdGlmeS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LWlub3RpZnkuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKKyNpbmNsdWRlIDxzeXMvaW5vdGlmeS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCkBAIC02NCw0NSArNjUsMTcgQEAKIHN0YXRpYyB2b2lkIG1heWJlX2ZyZWVfd2F0Y2hlcl9saXN0KHN0cnVjdCB3YXRjaGVyX2xpc3QqIHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9sb29wX3QqIGxvb3ApOwogCi1zdGF0aWMgaW50IG5ld19pbm90aWZ5X2ZkKHZvaWQpIHsKLSAgaW50IGVycjsKLSAgaW50IGZkOwotCi0gIGZkID0gdXZfX2lub3RpZnlfaW5pdDEoVVZfX0lOX05PTkJMT0NLIHwgVVZfX0lOX0NMT0VYRUMpOwotICBpZiAoZmQgIT0gLTEpCi0gICAgcmV0dXJuIGZkOwotCi0gIGlmIChlcnJubyAhPSBFTk9TWVMpCi0gICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotCi0gIGZkID0gdXZfX2lub3RpZnlfaW5pdCgpOwotICBpZiAoZmQgPT0gLTEpCi0gICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotCi0gIGVyciA9IHV2X19jbG9leGVjKGZkLCAxKTsKLSAgaWYgKGVyciA9PSAwKQotICAgIGVyciA9IHV2X19ub25ibG9jayhmZCwgMSk7Ci0KLSAgaWYgKGVycikgewotICAgIHV2X19jbG9zZShmZCk7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotCi0gIHJldHVybiBmZDsKLX0KLQotCiBzdGF0aWMgaW50IGluaXRfaW5vdGlmeSh1dl9sb29wX3QqIGxvb3ApIHsKLSAgaW50IGVycjsKKyAgaW50IGZkOwogCiAgIGlmIChsb29wLT5pbm90aWZ5X2ZkICE9IC0xKQogICAgIHJldHVybiAwOwogCi0gIGVyciA9IG5ld19pbm90aWZ5X2ZkKCk7Ci0gIGlmIChlcnIgPCAwKQotICAgIHJldHVybiBlcnI7CisgIGZkID0gaW5vdGlmeV9pbml0MShJTl9OT05CTE9DSyB8IElOX0NMT0VYRUMpOworICBpZiAoZmQgPCAwKQorICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAotICBsb29wLT5pbm90aWZ5X2ZkID0gZXJyOworICBsb29wLT5pbm90aWZ5X2ZkID0gZmQ7CiAgIHV2X19pb19pbml0KCZsb29wLT5pbm90aWZ5X3JlYWRfd2F0Y2hlciwgdXZfX2lub3RpZnlfcmVhZCwgbG9vcC0+aW5vdGlmeV9mZCk7CiAgIHV2X19pb19zdGFydChsb29wLCAmbG9vcC0+aW5vdGlmeV9yZWFkX3dhdGNoZXIsIFBPTExJTik7CiAKQEAgLTE4Niw3ICsxNTksNyBAQAogICBpZiAoKCF3LT5pdGVyYXRpbmcpICYmIFFVRVVFX0VNUFRZKCZ3LT53YXRjaGVycykpIHsKICAgICAvKiBObyB3YXRjaGVycyBsZWZ0IGZvciB0aGlzIHBhdGguIENsZWFuIHVwLiAqLwogICAgIFJCX1JFTU9WRSh3YXRjaGVyX3Jvb3QsIENBU1QoJmxvb3AtPmlub3RpZnlfd2F0Y2hlcnMpLCB3KTsKLSAgICB1dl9faW5vdGlmeV9ybV93YXRjaChsb29wLT5pbm90aWZ5X2ZkLCB3LT53ZCk7CisgICAgaW5vdGlmeV9ybV93YXRjaChsb29wLT5pbm90aWZ5X2ZkLCB3LT53ZCk7CiAgICAgdXZfX2ZyZWUodyk7CiAgIH0KIH0KQEAgLTE5NCw3ICsxNjcsNyBAQAogc3RhdGljIHZvaWQgdXZfX2lub3RpZnlfcmVhZCh1dl9sb29wX3QqIGxvb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X19pb190KiBkdW1teSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV2ZW50cykgewotICBjb25zdCBzdHJ1Y3QgdXZfX2lub3RpZnlfZXZlbnQqIGU7CisgIGNvbnN0IHN0cnVjdCBpbm90aWZ5X2V2ZW50KiBlOwogICBzdHJ1Y3Qgd2F0Y2hlcl9saXN0KiB3OwogICB1dl9mc19ldmVudF90KiBoOwogICBRVUVVRSBxdWV1ZTsKQEAgLTIxOSwxMiArMTkyLDEyIEBACiAKICAgICAvKiBOb3cgd2UgaGF2ZSBvbmUgb3IgbW9yZSBpbm90aWZ5X2V2ZW50IHN0cnVjdHMuICovCiAgICAgZm9yIChwID0gYnVmOyBwIDwgYnVmICsgc2l6ZTsgcCArPSBzaXplb2YoKmUpICsgZS0+bGVuKSB7Ci0gICAgICBlID0gKGNvbnN0IHN0cnVjdCB1dl9faW5vdGlmeV9ldmVudCopcDsKKyAgICAgIGUgPSAoY29uc3Qgc3RydWN0IGlub3RpZnlfZXZlbnQqKSBwOwogCiAgICAgICBldmVudHMgPSAwOwotICAgICAgaWYgKGUtPm1hc2sgJiAoVVZfX0lOX0FUVFJJQnxVVl9fSU5fTU9ESUZZKSkKKyAgICAgIGlmIChlLT5tYXNrICYgKElOX0FUVFJJQnxJTl9NT0RJRlkpKQogICAgICAgICBldmVudHMgfD0gVVZfQ0hBTkdFOwotICAgICAgaWYgKGUtPm1hc2sgJiB+KFVWX19JTl9BVFRSSUJ8VVZfX0lOX01PRElGWSkpCisgICAgICBpZiAoZS0+bWFzayAmIH4oSU5fQVRUUklCfElOX01PRElGWSkpCiAgICAgICAgIGV2ZW50cyB8PSBVVl9SRU5BTUU7CiAKICAgICAgIHcgPSBmaW5kX3dhdGNoZXIobG9vcCwgZS0+d2QpOwpAQCAtMjkwLDE2ICsyNjMsMTYgQEAKICAgaWYgKGVycikKICAgICByZXR1cm4gZXJyOwogCi0gIGV2ZW50cyA9IFVWX19JTl9BVFRSSUIKLSAgICAgICAgIHwgVVZfX0lOX0NSRUFURQotICAgICAgICAgfCBVVl9fSU5fTU9ESUZZCi0gICAgICAgICB8IFVWX19JTl9ERUxFVEUKLSAgICAgICAgIHwgVVZfX0lOX0RFTEVURV9TRUxGCi0gICAgICAgICB8IFVWX19JTl9NT1ZFX1NFTEYKLSAgICAgICAgIHwgVVZfX0lOX01PVkVEX0ZST00KLSAgICAgICAgIHwgVVZfX0lOX01PVkVEX1RPOworICBldmVudHMgPSBJTl9BVFRSSUIKKyAgICAgICAgIHwgSU5fQ1JFQVRFCisgICAgICAgICB8IElOX01PRElGWQorICAgICAgICAgfCBJTl9ERUxFVEUKKyAgICAgICAgIHwgSU5fREVMRVRFX1NFTEYKKyAgICAgICAgIHwgSU5fTU9WRV9TRUxGCisgICAgICAgICB8IElOX01PVkVEX0ZST00KKyAgICAgICAgIHwgSU5fTU9WRURfVE87CiAKLSAgd2QgPSB1dl9faW5vdGlmeV9hZGRfd2F0Y2goaGFuZGxlLT5sb29wLT5pbm90aWZ5X2ZkLCBwYXRoLCBldmVudHMpOworICB3ZCA9IGlub3RpZnlfYWRkX3dhdGNoKGhhbmRsZS0+bG9vcC0+aW5vdGlmeV9mZCwgcGF0aCwgZXZlbnRzKTsKICAgaWYgKHdkID09IC0xKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtc3lzY2FsbHMuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LXN5c2NhbGxzLmMKaW5kZXggNTYzN2NmOS4uNzQyZjI2YSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtc3lzY2FsbHMuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9saW51eC1zeXNjYWxscy5jCkBAIC0yNiwxOSArMjYsNiBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKLSNpZiBkZWZpbmVkKF9faGFzX2ZlYXR1cmUpCi0jIGlmIF9faGFzX2ZlYXR1cmUobWVtb3J5X3Nhbml0aXplcikKLSMgIGRlZmluZSBNU0FOX0FDVElWRSAxCi0jICBpbmNsdWRlIDxzYW5pdGl6ZXIvbXNhbl9pbnRlcmZhY2UuaD4KLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX2kzODZfXykKLSMgaWZuZGVmIF9fTlJfc29ja2V0Y2FsbAotIyAgZGVmaW5lIF9fTlJfc29ja2V0Y2FsbCAxMDIKLSMgZW5kaWYKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX2FybV9fKQogIyBpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCiAjICBkZWZpbmUgVVZfU1lTQ0FMTF9CQVNFIDAKQEAgLTQ3LDg2ICszNCw2IEBACiAjIGVuZGlmCiAjZW5kaWYgLyogX19hcm1fXyAqLwogCi0jaWZuZGVmIF9fTlJfYWNjZXB0NAotIyBpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jICBkZWZpbmUgX19OUl9hY2NlcHQ0IDI4OAotIyBlbGlmIGRlZmluZWQoX19pMzg2X18pCi0gICAvKiBOb3RoaW5nLiBIYW5kbGVkIHRocm91Z2ggc29ja2V0Y2FsbCgpLiAqLwotIyBlbGlmIGRlZmluZWQoX19hcm1fXykKLSMgIGRlZmluZSBfX05SX2FjY2VwdDQgKFVWX1NZU0NBTExfQkFTRSArIDM2NikKLSMgZW5kaWYKLSNlbmRpZiAvKiBfX05SX2FjY2VwdDQgKi8KLQotI2lmbmRlZiBfX05SX2V2ZW50ZmQKLSMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotIyAgZGVmaW5lIF9fTlJfZXZlbnRmZCAyODQKLSMgZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotIyAgZGVmaW5lIF9fTlJfZXZlbnRmZCAzMjMKLSMgZWxpZiBkZWZpbmVkKF9fYXJtX18pCi0jICBkZWZpbmUgX19OUl9ldmVudGZkIChVVl9TWVNDQUxMX0JBU0UgKyAzNTEpCi0jIGVuZGlmCi0jZW5kaWYgLyogX19OUl9ldmVudGZkICovCi0KLSNpZm5kZWYgX19OUl9ldmVudGZkMgotIyBpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jICBkZWZpbmUgX19OUl9ldmVudGZkMiAyOTAKLSMgZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotIyAgZGVmaW5lIF9fTlJfZXZlbnRmZDIgMzI4Ci0jIGVsaWYgZGVmaW5lZChfX2FybV9fKQotIyAgZGVmaW5lIF9fTlJfZXZlbnRmZDIgKFVWX1NZU0NBTExfQkFTRSArIDM1NikKLSMgZW5kaWYKLSNlbmRpZiAvKiBfX05SX2V2ZW50ZmQyICovCi0KLSNpZm5kZWYgX19OUl9pbm90aWZ5X2luaXQKLSMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IDI1MwotIyBlbGlmIGRlZmluZWQoX19pMzg2X18pCi0jICBkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQgMjkxCi0jIGVsaWYgZGVmaW5lZChfX2FybV9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IChVVl9TWVNDQUxMX0JBU0UgKyAzMTYpCi0jIGVuZGlmCi0jZW5kaWYgLyogX19OUl9pbm90aWZ5X2luaXQgKi8KLQotI2lmbmRlZiBfX05SX2lub3RpZnlfaW5pdDEKLSMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MSAyOTQKLSMgZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MSAzMzIKLSMgZWxpZiBkZWZpbmVkKF9fYXJtX18pCi0jICBkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxIChVVl9TWVNDQUxMX0JBU0UgKyAzNjApCi0jIGVuZGlmCi0jZW5kaWYgLyogX19OUl9pbm90aWZ5X2luaXQxICovCi0KLSNpZm5kZWYgX19OUl9pbm90aWZ5X2FkZF93YXRjaAotIyBpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jICBkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAyNTQKLSMgZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggMjkyCi0jIGVsaWYgZGVmaW5lZChfX2FybV9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggKFVWX1NZU0NBTExfQkFTRSArIDMxNykKLSMgZW5kaWYKLSNlbmRpZiAvKiBfX05SX2lub3RpZnlfYWRkX3dhdGNoICovCi0KLSNpZm5kZWYgX19OUl9pbm90aWZ5X3JtX3dhdGNoCi0jIGlmIGRlZmluZWQoX194ODZfNjRfXykKLSMgIGRlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggMjU1Ci0jIGVsaWYgZGVmaW5lZChfX2kzODZfXykKLSMgIGRlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggMjkzCi0jIGVsaWYgZGVmaW5lZChfX2FybV9fKQotIyAgZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAoVVZfU1lTQ0FMTF9CQVNFICsgMzE4KQotIyBlbmRpZgotI2VuZGlmIC8qIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAqLwotCi0jaWZuZGVmIF9fTlJfcGlwZTIKLSMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotIyAgZGVmaW5lIF9fTlJfcGlwZTIgMjkzCi0jIGVsaWYgZGVmaW5lZChfX2kzODZfXykKLSMgIGRlZmluZSBfX05SX3BpcGUyIDMzMQotIyBlbGlmIGRlZmluZWQoX19hcm1fXykKLSMgIGRlZmluZSBfX05SX3BpcGUyIChVVl9TWVNDQUxMX0JBU0UgKyAzNTkpCi0jIGVuZGlmCi0jZW5kaWYgLyogX19OUl9waXBlMiAqLwotCiAjaWZuZGVmIF9fTlJfcmVjdm1tc2cKICMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQogIyAgZGVmaW5lIF9fTlJfcmVjdm1tc2cgMjk5CkBAIC0yMDMsMTAzICsxMTAsMjMgQEAKICMgZW5kaWYKICNlbmRpZiAvKiBfX05SX3N0YXR4ICovCiAKLWludCB1dl9fYWNjZXB0NChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciogYWRkciwgc29ja2xlbl90KiBhZGRybGVuLCBpbnQgZmxhZ3MpIHsKLSNpZiBkZWZpbmVkKF9faTM4Nl9fKQotICB1bnNpZ25lZCBsb25nIGFyZ3NbNF07Ci0gIGludCByOworI2lmbmRlZiBfX05SX2dldHJhbmRvbQorIyBpZiBkZWZpbmVkKF9feDg2XzY0X18pCisjICBkZWZpbmUgX19OUl9nZXRyYW5kb20gMzE4CisjIGVsaWYgZGVmaW5lZChfX2kzODZfXykKKyMgIGRlZmluZSBfX05SX2dldHJhbmRvbSAzNTUKKyMgZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorIyAgZGVmaW5lIF9fTlJfZ2V0cmFuZG9tIDM4NAorIyBlbGlmIGRlZmluZWQoX19hcm1fXykKKyMgIGRlZmluZSBfX05SX2dldHJhbmRvbSAoVVZfU1lTQ0FMTF9CQVNFICsgMzg0KQorIyBlbGlmIGRlZmluZWQoX19wcGNfXykKKyMgIGRlZmluZSBfX05SX2dldHJhbmRvbSAzNTkKKyMgZWxpZiBkZWZpbmVkKF9fczM5MF9fKQorIyAgZGVmaW5lIF9fTlJfZ2V0cmFuZG9tIDM0OQorIyBlbmRpZgorI2VuZGlmIC8qIF9fTlJfZ2V0cmFuZG9tICovCiAKLSAgYXJnc1swXSA9ICh1bnNpZ25lZCBsb25nKSBmZDsKLSAgYXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOwotICBhcmdzWzJdID0gKHVuc2lnbmVkIGxvbmcpIGFkZHJsZW47Ci0gIGFyZ3NbM10gPSAodW5zaWduZWQgbG9uZykgZmxhZ3M7Ci0KLSAgciA9IHN5c2NhbGwoX19OUl9zb2NrZXRjYWxsLCAxOCAvKiBTWVNfQUNDRVBUNCAqLywgYXJncyk7Ci0KLSAgLyogc29ja2V0Y2FsbCgpIHJhaXNlcyBFSU5WQUwgd2hlbiBTWVNfQUNDRVBUNCBpcyBub3Qgc3VwcG9ydGVkIGJ1dCBzbyBkb2VzCi0gICAqIGEgYmFkIGZsYWdzIGFyZ3VtZW50LiBUcnkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvIGNhc2VzLgotICAgKi8KLSAgaWYgKHIgPT0gLTEpCi0gICAgaWYgKGVycm5vID09IEVJTlZBTCkKLSAgICAgIGlmICgoZmxhZ3MgJiB+KFVWX19TT0NLX0NMT0VYRUN8VVZfX1NPQ0tfTk9OQkxPQ0spKSA9PSAwKQotICAgICAgICBlcnJubyA9IEVOT1NZUzsKLQotICByZXR1cm4gcjsKLSNlbGlmIGRlZmluZWQoX19OUl9hY2NlcHQ0KQotICByZXR1cm4gc3lzY2FsbChfX05SX2FjY2VwdDQsIGZkLCBhZGRyLCBhZGRybGVuLCBmbGFncyk7Ci0jZWxzZQotICByZXR1cm4gZXJybm8gPSBFTk9TWVMsIC0xOwotI2VuZGlmCi19Ci0KLQotaW50IHV2X19ldmVudGZkKHVuc2lnbmVkIGludCBjb3VudCkgewotI2lmIGRlZmluZWQoX19OUl9ldmVudGZkKQotICByZXR1cm4gc3lzY2FsbChfX05SX2V2ZW50ZmQsIGNvdW50KTsKLSNlbHNlCi0gIHJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7Ci0jZW5kaWYKLX0KLQotCi1pbnQgdXZfX2V2ZW50ZmQyKHVuc2lnbmVkIGludCBjb3VudCwgaW50IGZsYWdzKSB7Ci0jaWYgZGVmaW5lZChfX05SX2V2ZW50ZmQyKQotICByZXR1cm4gc3lzY2FsbChfX05SX2V2ZW50ZmQyLCBjb3VudCwgZmxhZ3MpOwotI2Vsc2UKLSAgcmV0dXJuIGVycm5vID0gRU5PU1lTLCAtMTsKLSNlbmRpZgotfQotCi0KLWludCB1dl9faW5vdGlmeV9pbml0KHZvaWQpIHsKLSNpZiBkZWZpbmVkKF9fTlJfaW5vdGlmeV9pbml0KQotICByZXR1cm4gc3lzY2FsbChfX05SX2lub3RpZnlfaW5pdCk7Ci0jZWxzZQotICByZXR1cm4gZXJybm8gPSBFTk9TWVMsIC0xOwotI2VuZGlmCi19Ci0KLQotaW50IHV2X19pbm90aWZ5X2luaXQxKGludCBmbGFncykgewotI2lmIGRlZmluZWQoX19OUl9pbm90aWZ5X2luaXQxKQotICByZXR1cm4gc3lzY2FsbChfX05SX2lub3RpZnlfaW5pdDEsIGZsYWdzKTsKLSNlbHNlCi0gIHJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7Ci0jZW5kaWYKLX0KLQotCi1pbnQgdXZfX2lub3RpZnlfYWRkX3dhdGNoKGludCBmZCwgY29uc3QgY2hhciogcGF0aCwgdWludDMyX3QgbWFzaykgewotI2lmIGRlZmluZWQoX19OUl9pbm90aWZ5X2FkZF93YXRjaCkKLSAgcmV0dXJuIHN5c2NhbGwoX19OUl9pbm90aWZ5X2FkZF93YXRjaCwgZmQsIHBhdGgsIG1hc2spOwotI2Vsc2UKLSAgcmV0dXJuIGVycm5vID0gRU5PU1lTLCAtMTsKLSNlbmRpZgotfQotCi0KLWludCB1dl9faW5vdGlmeV9ybV93YXRjaChpbnQgZmQsIGludDMyX3Qgd2QpIHsKLSNpZiBkZWZpbmVkKF9fTlJfaW5vdGlmeV9ybV93YXRjaCkKLSAgcmV0dXJuIHN5c2NhbGwoX19OUl9pbm90aWZ5X3JtX3dhdGNoLCBmZCwgd2QpOwotI2Vsc2UKLSAgcmV0dXJuIGVycm5vID0gRU5PU1lTLCAtMTsKLSNlbmRpZgotfQotCi0KLWludCB1dl9fcGlwZTIoaW50IHBpcGVmZFsyXSwgaW50IGZsYWdzKSB7Ci0jaWYgZGVmaW5lZChfX05SX3BpcGUyKQotICBpbnQgcmVzdWx0OwotICByZXN1bHQgPSBzeXNjYWxsKF9fTlJfcGlwZTIsIHBpcGVmZCwgZmxhZ3MpOwotI2lmIE1TQU5fQUNUSVZFCi0gIGlmICghcmVzdWx0KQotICAgIF9fbXNhbl91bnBvaXNvbihwaXBlZmQsIHNpemVvZihpbnRbMl0pKTsKLSNlbmRpZgotICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgcmV0dXJuIGVycm5vID0gRU5PU1lTLCAtMTsKLSNlbmRpZgotfQotCitzdHJ1Y3QgdXZfX21tc2doZHI7CiAKIGludCB1dl9fc2VuZG1tc2coaW50IGZkLAogICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXZfX21tc2doZHIqIG1tc2csCkBAIC0zNjcsMyArMTk0LDEyIEBACiAgIHJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7CiAjZW5kaWYKIH0KKworCitzc2l6ZV90IHV2X19nZXRyYW5kb20odm9pZCogYnVmLCBzaXplX3QgYnVmbGVuLCB1bnNpZ25lZCBmbGFncykgeworI2lmIGRlZmluZWQoX19OUl9nZXRyYW5kb20pCisgIHJldHVybiBzeXNjYWxsKF9fTlJfZ2V0cmFuZG9tLCBidWYsIGJ1ZmxlbiwgZmxhZ3MpOworI2Vsc2UKKyAgcmV0dXJuIGVycm5vID0gRU5PU1lTLCAtMTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtc3lzY2FsbHMuaCBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L2xpbnV4LXN5c2NhbGxzLmgKaW5kZXggN2U1OGJmYS4uMmU4ZmEyYSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbGludXgtc3lzY2FsbHMuaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9saW51eC1zeXNjYWxscy5oCkBAIC0zMSw1NSArMzEsNiBAQAogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogCi0jaWYgZGVmaW5lZChfX2FscGhhX18pCi0jIGRlZmluZSBVVl9fT19DTE9FWEVDICAgICAgICAweDIwMDAwMAotI2VsaWYgZGVmaW5lZChfX2hwcGFfXykKLSMgZGVmaW5lIFVWX19PX0NMT0VYRUMgICAgICAgIDB4MjAwMDAwCi0jZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykKLSMgZGVmaW5lIFVWX19PX0NMT0VYRUMgICAgICAgIDB4NDAwMDAwCi0jZWxzZQotIyBkZWZpbmUgVVZfX09fQ0xPRVhFQyAgICAgICAgMHg4MDAwMAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fYWxwaGFfXykKLSMgZGVmaW5lIFVWX19PX05PTkJMT0NLICAgICAgIDB4NAotI2VsaWYgZGVmaW5lZChfX2hwcGFfXykKLSMgZGVmaW5lIFVWX19PX05PTkJMT0NLICAgICAgIE9fTk9OQkxPQ0sKLSNlbGlmIGRlZmluZWQoX19taXBzX18pCi0jIGRlZmluZSBVVl9fT19OT05CTE9DSyAgICAgICAweDgwCi0jZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykKLSMgZGVmaW5lIFVWX19PX05PTkJMT0NLICAgICAgIDB4NDAwMAotI2Vsc2UKLSMgZGVmaW5lIFVWX19PX05PTkJMT0NLICAgICAgIDB4ODAwCi0jZW5kaWYKLQotI2RlZmluZSBVVl9fRUZEX0NMT0VYRUMgICAgICAgVVZfX09fQ0xPRVhFQwotI2RlZmluZSBVVl9fRUZEX05PTkJMT0NLICAgICAgVVZfX09fTk9OQkxPQ0sKLQotI2RlZmluZSBVVl9fSU5fQ0xPRVhFQyAgICAgICAgVVZfX09fQ0xPRVhFQwotI2RlZmluZSBVVl9fSU5fTk9OQkxPQ0sgICAgICAgVVZfX09fTk9OQkxPQ0sKLQotI2RlZmluZSBVVl9fU09DS19DTE9FWEVDICAgICAgVVZfX09fQ0xPRVhFQwotI2lmIGRlZmluZWQoU09DS19OT05CTE9DSykKLSMgZGVmaW5lIFVWX19TT0NLX05PTkJMT0NLICAgIFNPQ0tfTk9OQkxPQ0sKLSNlbHNlCi0jIGRlZmluZSBVVl9fU09DS19OT05CTE9DSyAgICBVVl9fT19OT05CTE9DSwotI2VuZGlmCi0KLS8qIGlub3RpZnkgZmxhZ3MgKi8KLSNkZWZpbmUgVVZfX0lOX0FDQ0VTUyAgICAgICAgIDB4MDAxCi0jZGVmaW5lIFVWX19JTl9NT0RJRlkgICAgICAgICAweDAwMgotI2RlZmluZSBVVl9fSU5fQVRUUklCICAgICAgICAgMHgwMDQKLSNkZWZpbmUgVVZfX0lOX0NMT1NFX1dSSVRFICAgIDB4MDA4Ci0jZGVmaW5lIFVWX19JTl9DTE9TRV9OT1dSSVRFICAweDAxMAotI2RlZmluZSBVVl9fSU5fT1BFTiAgICAgICAgICAgMHgwMjAKLSNkZWZpbmUgVVZfX0lOX01PVkVEX0ZST00gICAgIDB4MDQwCi0jZGVmaW5lIFVWX19JTl9NT1ZFRF9UTyAgICAgICAweDA4MAotI2RlZmluZSBVVl9fSU5fQ1JFQVRFICAgICAgICAgMHgxMDAKLSNkZWZpbmUgVVZfX0lOX0RFTEVURSAgICAgICAgIDB4MjAwCi0jZGVmaW5lIFVWX19JTl9ERUxFVEVfU0VMRiAgICAweDQwMAotI2RlZmluZSBVVl9fSU5fTU9WRV9TRUxGICAgICAgMHg4MDAKLQogc3RydWN0IHV2X19zdGF0eF90aW1lc3RhbXAgewogICBpbnQ2NF90IHR2X3NlYzsKICAgdWludDMyX3QgdHZfbnNlYzsKQEAgLTExMCwzNiArNjEsNiBAQAogICB1aW50NjRfdCB1bnVzZWQxWzE0XTsKIH07CiAKLXN0cnVjdCB1dl9faW5vdGlmeV9ldmVudCB7Ci0gIGludDMyX3Qgd2Q7Ci0gIHVpbnQzMl90IG1hc2s7Ci0gIHVpbnQzMl90IGNvb2tpZTsKLSAgdWludDMyX3QgbGVuOwotICAvKiBjaGFyIG5hbWVbMF07ICovCi19OwotCi1zdHJ1Y3QgdXZfX21tc2doZHIgewotICBzdHJ1Y3QgbXNnaGRyIG1zZ19oZHI7Ci0gIHVuc2lnbmVkIGludCBtc2dfbGVuOwotfTsKLQotaW50IHV2X19hY2NlcHQ0KGludCBmZCwgc3RydWN0IHNvY2thZGRyKiBhZGRyLCBzb2NrbGVuX3QqIGFkZHJsZW4sIGludCBmbGFncyk7Ci1pbnQgdXZfX2V2ZW50ZmQodW5zaWduZWQgaW50IGNvdW50KTsKLWludCB1dl9fZXZlbnRmZDIodW5zaWduZWQgaW50IGNvdW50LCBpbnQgZmxhZ3MpOwotaW50IHV2X19pbm90aWZ5X2luaXQodm9pZCk7Ci1pbnQgdXZfX2lub3RpZnlfaW5pdDEoaW50IGZsYWdzKTsKLWludCB1dl9faW5vdGlmeV9hZGRfd2F0Y2goaW50IGZkLCBjb25zdCBjaGFyKiBwYXRoLCB1aW50MzJfdCBtYXNrKTsKLWludCB1dl9faW5vdGlmeV9ybV93YXRjaChpbnQgZmQsIGludDMyX3Qgd2QpOwotaW50IHV2X19waXBlMihpbnQgcGlwZWZkWzJdLCBpbnQgZmxhZ3MpOwotaW50IHV2X19yZWN2bW1zZyhpbnQgZmQsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCB1dl9fbW1zZ2hkciogbW1zZywKLSAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZsZW4sCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KTsKLWludCB1dl9fc2VuZG1tc2coaW50IGZkLAotICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXZfX21tc2doZHIqIG1tc2csCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2bGVuLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogc3NpemVfdCB1dl9fcHJlYWR2KGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsIGludDY0X3Qgb2Zmc2V0KTsKIHNzaXplX3QgdXZfX3B3cml0ZXYoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvdmNudCwgaW50NjRfdCBvZmZzZXQpOwogaW50IHV2X19kdXAzKGludCBvbGRmZCwgaW50IG5ld2ZkLCBpbnQgZmxhZ3MpOwpAQCAtMTQ4LDUgKzY5LDYgQEAKICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFzaywKICAgICAgICAgICAgICAgc3RydWN0IHV2X19zdGF0eCogc3RhdHhidWYpOworc3NpemVfdCB1dl9fZ2V0cmFuZG9tKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgdW5zaWduZWQgZmxhZ3MpOwogCiAjZW5kaWYgLyogVVZfTElOVVhfU1lTQ0FMTF9IXyAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbmV0YnNkLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9uZXRic2QuYwppbmRleCBjNjQ5YmIzLi5jNjYzMzNmIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9uZXRic2QuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9uZXRic2QuYwpAQCAtNTUsNyArNTUsNyBAQAogICBzaXplX3Qgc2l6ZSA9IHNpemVvZihpbmZvKTsKICAgaW50IHdoaWNoW10gPSB7Q1RMX1ZNLCBWTV9MT0FEQVZHfTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApID09IC0xKSByZXR1cm47CisgIGlmIChzeXNjdGwod2hpY2gsIEFSUkFZX1NJWkUod2hpY2gpLCAmaW5mbywgJnNpemUsIE5VTEwsIDApID09IC0xKSByZXR1cm47CiAKICAgYXZnWzBdID0gKGRvdWJsZSkgaW5mby5sZGF2Z1swXSAvIGluZm8uZnNjYWxlOwogICBhdmdbMV0gPSAoZG91YmxlKSBpbmZvLmxkYXZnWzFdIC8gaW5mby5mc2NhbGU7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAgIGludCB3aGljaFtdID0ge0NUTF9WTSwgVk1fVVZNRVhQfTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQorICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKICAgcmV0dXJuICh1aW50NjRfdCkgaW5mby5mcmVlICogc3lzY29uZihfU0NfUEFHRVNJWkUpOwpAQCAtMTE5LDcgKzExOSw3IEBACiAjZW5kaWYKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIHJldHVybiAodWludDY0X3QpIGluZm87CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAgIHN0YXRpYyBpbnQgd2hpY2hbXSA9IHtDVExfS0VSTiwgS0VSTl9CT09UVElNRX07CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIG5vdyA9IHRpbWUoTlVMTCk7CkBAIC0yMzUsMTMgKzIzNSwyNSBAQAogICByZXR1cm4gMDsKIH0KIAoraW50IHV2X19yYW5kb21fc3lzY3RsKHZvaWQqIGJ1Ziwgc2l6ZV90IGxlbikgeworICBzdGF0aWMgaW50IG5hbWVbXSA9IHtDVExfS0VSTiwgS0VSTl9BUk5EfTsKKyAgc2l6ZV90IGNvdW50LCByZXE7CisgIHVuc2lnbmVkIGNoYXIqIHA7CiAKLXZvaWQgdXZfZnJlZV9jcHVfaW5mbyh1dl9jcHVfaW5mb190KiBjcHVfaW5mb3MsIGludCBjb3VudCkgewotICBpbnQgaTsKKyAgcCA9IGJ1ZjsKKyAgd2hpbGUgKGxlbikgeworICAgIHJlcSA9IGxlbiA8IDMyID8gbGVuIDogMzI7CisgICAgY291bnQgPSByZXE7CiAKLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOworICAgIGlmIChzeXNjdGwobmFtZSwgQVJSQVlfU0laRShuYW1lKSwgcCwgJmNvdW50LCBOVUxMLCAwKSA9PSAtMSkKKyAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKworICAgIGlmIChjb3VudCAhPSByZXEpCisgICAgICByZXR1cm4gVVZfRUlPOyAgLyogQ2FuJ3QgaGFwcGVuLiAqLworCisgICAgcCArPSBjb3VudDsKKyAgICBsZW4gLT0gY291bnQ7CiAgIH0KIAotICB1dl9fZnJlZShjcHVfaW5mb3MpOworICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L25vLXByb2N0aXRsZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbm8tcHJvY3RpdGxlLmMKaW5kZXggMTY1NzQwYy4uMzJhYTBhZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbm8tcHJvY3RpdGxlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvbm8tcHJvY3RpdGxlLmMKQEAgLTI5LDYgKzI5LDkgQEAKICAgcmV0dXJuIGFyZ3Y7CiB9CiAKK3ZvaWQgdXZfX3Byb2Nlc3NfdGl0bGVfY2xlYW51cCh2b2lkKSB7Cit9CisKIGludCB1dl9zZXRfcHJvY2Vzc190aXRsZShjb25zdCBjaGFyKiB0aXRsZSkgewogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29wZW5ic2QuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29wZW5ic2QuYwppbmRleCBmZmFlNzY4Li5mMzJhOTRkIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vcGVuYnNkLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3BlbmJzZC5jCkBAIC01MCw3ICs1MCw3IEBACiAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGluZm8pOwogICBpbnQgd2hpY2hbXSA9IHtDVExfVk0sIFZNX0xPQURBVkd9OwogCi0gIGlmIChzeXNjdGwod2hpY2gsIDIsICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkgPCAwKSByZXR1cm47CisgIGlmIChzeXNjdGwod2hpY2gsIEFSUkFZX1NJWkUod2hpY2gpLCAmaW5mbywgJnNpemUsIE5VTEwsIDApIDwgMCkgcmV0dXJuOwogCiAgIGF2Z1swXSA9IChkb3VibGUpIGluZm8ubGRhdmdbMF0gLyBpbmZvLmZzY2FsZTsKICAgYXZnWzFdID0gKGRvdWJsZSkgaW5mby5sZGF2Z1sxXSAvIGluZm8uZnNjYWxlOwpAQCAtNjEsNyArNjEsNiBAQAogaW50IHV2X2V4ZXBhdGgoY2hhciogYnVmZmVyLCBzaXplX3QqIHNpemUpIHsKICAgaW50IG1pYls0XTsKICAgY2hhciAqKmFyZ3NidWYgPSBOVUxMOwotICBjaGFyICoqYXJnc2J1Zl90bXA7CiAgIHNpemVfdCBhcmdzYnVmX3NpemUgPSAxMDBVOwogICBzaXplX3QgZXhlcGF0aF9zaXplOwogICBwaWRfdCBteXBpZDsKQEAgLTczLDE1ICs3MiwxNCBAQAogICBteXBpZCA9IGdldHBpZCgpOwogICBmb3IgKDs7KSB7CiAgICAgZXJyID0gVVZfRU5PTUVNOwotICAgIGFyZ3NidWZfdG1wID0gdXZfX3JlYWxsb2MoYXJnc2J1ZiwgYXJnc2J1Zl9zaXplKTsKLSAgICBpZiAoYXJnc2J1Zl90bXAgPT0gTlVMTCkKKyAgICBhcmdzYnVmID0gdXZfX3JlYWxsb2NmKGFyZ3NidWYsIGFyZ3NidWZfc2l6ZSk7CisgICAgaWYgKGFyZ3NidWYgPT0gTlVMTCkKICAgICAgIGdvdG8gb3V0OwotICAgIGFyZ3NidWYgPSBhcmdzYnVmX3RtcDsKICAgICBtaWJbMF0gPSBDVExfS0VSTjsKICAgICBtaWJbMV0gPSBLRVJOX1BST0NfQVJHUzsKICAgICBtaWJbMl0gPSBteXBpZDsKICAgICBtaWJbM10gPSBLRVJOX1BST0NfQVJHVjsKLSAgICBpZiAoc3lzY3RsKG1pYiwgNCwgYXJnc2J1ZiwgJmFyZ3NidWZfc2l6ZSwgTlVMTCwgMCkgPT0gMCkgeworICAgIGlmIChzeXNjdGwobWliLCBBUlJBWV9TSVpFKG1pYiksIGFyZ3NidWYsICZhcmdzYnVmX3NpemUsIE5VTEwsIDApID09IDApIHsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoZXJybm8gIT0gRU5PTUVNKSB7CkBAIC0xMTcsNyArMTE1LDcgQEAKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAgIGludCB3aGljaFtdID0ge0NUTF9WTSwgVk1fVVZNRVhQfTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQorICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKICAgcmV0dXJuICh1aW50NjRfdCkgaW5mby5mcmVlICogc3lzY29uZihfU0NfUEFHRVNJWkUpOwpAQCAtMTI5LDcgKzEyNyw3IEBACiAgIGludCB3aGljaFtdID0ge0NUTF9IVywgSFdfUEhZU01FTTY0fTsKICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaW5mbyk7CiAKLSAgaWYgKHN5c2N0bCh3aGljaCwgMiwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKKyAgaWYgKHN5c2N0bCh3aGljaCwgQVJSQVlfU0laRSh3aGljaCksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgIHJldHVybiAodWludDY0X3QpIGluZm87CkBAIC0xNTQsNyArMTUyLDcgQEAKICAgbWliWzRdID0gc2l6ZW9mKHN0cnVjdCBraW5mb19wcm9jKTsKICAgbWliWzVdID0gMTsKIAotICBpZiAoc3lzY3RsKG1pYiwgNiwgJmtpbmZvLCAmc2l6ZSwgTlVMTCwgMCkgPCAwKQorICBpZiAoc3lzY3RsKG1pYiwgQVJSQVlfU0laRShtaWIpLCAma2luZm8sICZzaXplLCBOVUxMLCAwKSA8IDApCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCiAgICpyc3MgPSBraW5mby5wX3ZtX3Jzc2l6ZSAqIHBhZ2Vfc2l6ZTsKQEAgLTE2OCw3ICsxNjYsNyBAQAogICBzaXplX3Qgc2l6ZSA9IHNpemVvZihpbmZvKTsKICAgc3RhdGljIGludCB3aGljaFtdID0ge0NUTF9LRVJOLCBLRVJOX0JPT1RUSU1FfTsKIAotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmaW5mbywgJnNpemUsIE5VTEwsIDApKQorICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmluZm8sICZzaXplLCBOVUxMLCAwKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKICAgbm93ID0gdGltZShOVUxMKTsKQEAgLTE4NCw0MyArMTgyLDM4IEBACiAgIHVpbnQ2NF90IGluZm9bQ1BVU1RBVEVTXTsKICAgY2hhciBtb2RlbFs1MTJdOwogICBpbnQgbnVtY3B1cyA9IDE7Ci0gIGludCB3aGljaFtdID0ge0NUTF9IVyxIV19NT0RFTCwwfTsKKyAgaW50IHdoaWNoW10gPSB7Q1RMX0hXLEhXX01PREVMfTsKKyAgaW50IHBlcmNwdVtdID0ge0NUTF9LRVJOLEtFUk5fQ1BUSU1FMiwwfTsKICAgc2l6ZV90IHNpemU7Ci0gIGludCBpOworICBpbnQgaSwgajsKICAgdXZfY3B1X2luZm9fdCogY3B1X2luZm87CiAKICAgc2l6ZSA9IHNpemVvZihtb2RlbCk7Ci0gIGlmIChzeXNjdGwod2hpY2gsIDIsICZtb2RlbCwgJnNpemUsIE5VTEwsIDApKQorICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJm1vZGVsLCAmc2l6ZSwgTlVMTCwgMCkpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCi0gIHdoaWNoWzFdID0gSFdfTkNQVTsKKyAgd2hpY2hbMV0gPSBIV19OQ1BVT05MSU5FOwogICBzaXplID0gc2l6ZW9mKG51bWNwdXMpOwotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmbnVtY3B1cywgJnNpemUsIE5VTEwsIDApKQorICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJm51bWNwdXMsICZzaXplLCBOVUxMLCAwKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKICAgKmNwdV9pbmZvcyA9IHV2X19tYWxsb2MobnVtY3B1cyAqIHNpemVvZigqKmNwdV9pbmZvcykpOwogICBpZiAoISgqY3B1X2luZm9zKSkKICAgICByZXR1cm4gVVZfRU5PTUVNOwogCisgIGkgPSAwOwogICAqY291bnQgPSBudW1jcHVzOwogCiAgIHdoaWNoWzFdID0gSFdfQ1BVU1BFRUQ7CiAgIHNpemUgPSBzaXplb2YoY3B1c3BlZWQpOwotICBpZiAoc3lzY3RsKHdoaWNoLCAyLCAmY3B1c3BlZWQsICZzaXplLCBOVUxMLCAwKSkgewotICAgIHV2X19mcmVlKCpjcHVfaW5mb3MpOwotICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKLSAgfQorICBpZiAoc3lzY3RsKHdoaWNoLCBBUlJBWV9TSVpFKHdoaWNoKSwgJmNwdXNwZWVkLCAmc2l6ZSwgTlVMTCwgMCkpCisgICAgZ290byBlcnJvcjsKIAogICBzaXplID0gc2l6ZW9mKGluZm8pOwotICB3aGljaFswXSA9IENUTF9LRVJOOwotICB3aGljaFsxXSA9IEtFUk5fQ1BUSU1FMjsKICAgZm9yIChpID0gMDsgaSA8IG51bWNwdXM7IGkrKykgewotICAgIHdoaWNoWzJdID0gaTsKLSAgICBzaXplID0gc2l6ZW9mKGluZm8pOwotICAgIGlmIChzeXNjdGwod2hpY2gsIDMsICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpIHsKLSAgICAgIHV2X19mcmVlKCpjcHVfaW5mb3MpOwotICAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwotICAgIH0KKyAgICBwZXJjcHVbMl0gPSBpOworICAgIGlmIChzeXNjdGwocGVyY3B1LCBBUlJBWV9TSVpFKHBlcmNwdSksICZpbmZvLCAmc2l6ZSwgTlVMTCwgMCkpCisgICAgICBnb3RvIGVycm9yOwogCiAgICAgY3B1X2luZm8gPSAmKCpjcHVfaW5mb3MpW2ldOwogCkBAIC0yMzUsMTUgKzIyOCwxMyBAQAogICB9CiAKICAgcmV0dXJuIDA7Ci19CiAKK2Vycm9yOgorICAqY291bnQgPSAwOworICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorICAgIHV2X19mcmVlKCgqY3B1X2luZm9zKVtqXS5tb2RlbCk7CiAKLXZvaWQgdXZfZnJlZV9jcHVfaW5mbyh1dl9jcHVfaW5mb190KiBjcHVfaW5mb3MsIGludCBjb3VudCkgewotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgIHV2X19mcmVlKGNwdV9pbmZvc1tpXS5tb2RlbCk7Ci0gIH0KLQotICB1dl9fZnJlZShjcHVfaW5mb3MpOworICB1dl9fZnJlZSgqY3B1X2luZm9zKTsKKyAgKmNwdV9pbmZvcyA9IE5VTEw7CisgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29zMzkwLXN5c2NhbGxzLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vczM5MC1zeXNjYWxscy5jCmluZGV4IDEwNDBkNjYuLjQyNGNjNDggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29zMzkwLXN5c2NhbGxzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3MzOTAtc3lzY2FsbHMuYwpAQCAtMjMsMTEgKzIzLDExIEBACiAjaW5jbHVkZSAib3MzOTAtc3lzY2FsbHMuaCIKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHNlYXJjaC5oPgogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNpbmNsdWRlIDxzeXMvbXNnLmg+CiAKKyNkZWZpbmUgQ1dfSU5UUlBUIDEKICNkZWZpbmUgQ1dfQ09ORFZBUiAzMgogCiAjcHJhZ21hIGxpbmthZ2UoQlBYNENUVywgT1MpCkBAIC00Myw2ICs0Myw3IEBACiAgICAgICAgICAgICBpbnQgKCpjb21wYXIpKGNvbnN0IHN0cnVjdCBkaXJlbnQqKiwKICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkaXJlbnQgKiopKSB7CiAgIHN0cnVjdCBkaXJlbnQqKiBubDsKKyAgc3RydWN0IGRpcmVudCoqIG5sX2NvcHk7CiAgIHN0cnVjdCBkaXJlbnQqIGRpcmVudDsKICAgdW5zaWduZWQgY291bnQ7CiAgIHNpemVfdCBhbGxvY2F0ZWQ7CkBAIC02MiwxOSArNjMsMTcgQEAKICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZGlyZW50KSkgewogICAgICAgc3RydWN0IGRpcmVudCogY29weTsKICAgICAgIGNvcHkgPSB1dl9fbWFsbG9jKHNpemVvZigqY29weSkpOwotICAgICAgaWYgKCFjb3B5KSB7Ci0gICAgICAgIHdoaWxlIChjb3VudCkgewotICAgICAgICAgIGRpcmVudCA9IG5sWy0tY291bnRdOwotICAgICAgICAgIHV2X19mcmVlKGRpcmVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgdXZfX2ZyZWUobmwpOwotICAgICAgICBjbG9zZWRpcihtZGlyKTsKLSAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KKyAgICAgIGlmICghY29weSkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICAgIG1lbWNweShjb3B5LCBkaXJlbnQsIHNpemVvZigqY29weSkpOwogCi0gICAgICBubCA9IHV2X19yZWFsbG9jKG5sLCBzaXplb2YoKmNvcHkpICogKGNvdW50ICsgMSkpOworICAgICAgbmxfY29weSA9IHV2X19yZWFsbG9jKG5sLCBzaXplb2YoKmNvcHkpICogKGNvdW50ICsgMSkpOworICAgICAgaWYgKG5sX2NvcHkgPT0gTlVMTCkgeworICAgICAgICB1dl9fZnJlZShjb3B5KTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIH0KKworICAgICAgbmwgPSBubF9jb3B5OwogICAgICAgbmxbY291bnQrK10gPSBjb3B5OwogICAgIH0KICAgfQpAQCAtODYsNiArODUsMTYgQEAKIAogICAqbmFtZWxpc3QgPSBubDsKICAgcmV0dXJuIGNvdW50OworCitlcnJvcjoKKyAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgIGRpcmVudCA9IG5sWy0tY291bnRdOworICAgIHV2X19mcmVlKGRpcmVudCk7CisgIH0KKyAgdXZfX2ZyZWUobmwpOworICBjbG9zZWRpcihtZGlyKTsKKyAgZXJybm8gPSBFTk9NRU07CisgIHJldHVybiAtMTsKIH0KIAogCkBAIC0xMTksNyArMTI4LDcgQEAKICAgfQogCiAgIG5ld3NpemUgPSBuZXh0X3Bvd2VyX29mX3R3byhsZW4pOwotICBuZXdsc3QgPSB1dl9fcmVhbGxvYyhsc3QtPml0ZW1zLCBuZXdzaXplICogc2l6ZW9mKGxzdC0+aXRlbXNbMF0pKTsKKyAgbmV3bHN0ID0gdXZfX3JlYWxsb2NmKGxzdC0+aXRlbXMsIG5ld3NpemUgKiBzaXplb2YobHN0LT5pdGVtc1swXSkpOwogCiAgIGlmIChuZXdsc3QgPT0gTlVMTCkKICAgICBhYm9ydCgpOwpAQCAtMjY5LDYgKzI3OCw4IEBACiAgIHJldHVybiAwOwogfQogCisjZGVmaW5lIEVQX01BWF9QRkRTIChVTE9OR19NQVggLyBzaXplb2Yoc3RydWN0IHBvbGxmZCkpCisjZGVmaW5lIEVQX01BWF9FVkVOVFMgKElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGVwb2xsX2V2ZW50KSkKIAogaW50IGVwb2xsX3dhaXQodXZfX29zMzkwX2Vwb2xsKiBsc3QsIHN0cnVjdCBlcG9sbF9ldmVudCogZXZlbnRzLAogICAgICAgICAgICAgICAgaW50IG1heGV2ZW50cywgaW50IHRpbWVvdXQpIHsKQEAgLTI3NywxOCArMjg4LDQxIEBACiAgIGludCBwb2xscmV0OwogICBpbnQgcmV2ZW50Y291bnQ7CiAgIGludCBuZXZlbnRzOworICBzdHJ1Y3QgcG9sbGZkIG1zZ19mZDsKKyAgaW50IGk7CiAKLSAgX1NFVF9GRFNfTVNHUyhzaXplLCAxLCBsc3QtPnNpemUgLSAxKTsKKyAgaWYgKCFsc3QgfHwgIWxzdC0+aXRlbXMgfHwgIWV2ZW50cykgeworICAgIGVycm5vID0gRUZBVUxUOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChsc3QtPnNpemUgPiBFUF9NQVhfUEZEUykgeworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChtYXhldmVudHMgPD0gMCB8fCBtYXhldmVudHMgPiBFUF9NQVhfRVZFTlRTKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYgKGxzdC0+c2l6ZSA+IDApCisgICAgX1NFVF9GRFNfTVNHUyhzaXplLCAxLCBsc3QtPnNpemUgLSAxKTsKKyAgZWxzZQorICAgIF9TRVRfRkRTX01TR1Moc2l6ZSwgMCwgMCk7CiAgIHBmZHMgPSBsc3QtPml0ZW1zOwogICBwb2xscmV0ID0gcG9sbChwZmRzLCBzaXplLCB0aW1lb3V0KTsKICAgaWYgKHBvbGxyZXQgPD0gMCkKICAgICByZXR1cm4gcG9sbHJldDsKIAorICBhc3NlcnQobHN0LT5zaXplID4gMCk7CisKICAgcG9sbHJldCA9IF9ORkRTKHBvbGxyZXQpICsgX05NU0dTKHBvbGxyZXQpOwogCiAgIHJldmVudGNvdW50ID0gMDsKICAgbmV2ZW50cyA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyAKKyAgbXNnX2ZkID0gcGZkc1tsc3QtPnNpemUgLSAxXTsKKyAgZm9yIChpID0gMDsKICAgICAgICBpIDwgbHN0LT5zaXplICYmIGkgPCBtYXhldmVudHMgJiYgcmV2ZW50Y291bnQgPCBwb2xscmV0OyArK2kpIHsKICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgZXY7CiAgICAgc3RydWN0IHBvbGxmZCogcGZkOwpAQCAtMjk5LDYgKzMzMyw3IEBACiAKICAgICBldi5mZCA9IHBmZC0+ZmQ7CiAgICAgZXYuZXZlbnRzID0gcGZkLT5yZXZlbnRzOworICAgIGV2LmlzX21zZyA9IDA7CiAgICAgaWYgKHBmZC0+cmV2ZW50cyAmIFBPTExJTiAmJiBwZmQtPnJldmVudHMgJiBQT0xMT1VUKQogICAgICAgcmV2ZW50Y291bnQgKz0gMjsKICAgICBlbHNlIGlmIChwZmQtPnJldmVudHMgJiAoUE9MTElOIHwgUE9MTE9VVCkpCkBAIC0zMDgsNiArMzQzLDEwIEBACiAgICAgZXZlbnRzW25ldmVudHMrK10gPSBldjsKICAgfQogCisgIGlmIChtc2dfZmQucmV2ZW50cyAhPSAwICYmIG1zZ19mZC5mZCAhPSAtMSkKKyAgICBpZiAoaSA9PSBsc3QtPnNpemUpCisgICAgICBldmVudHNbbmV2ZW50cyAtIDFdLmlzX21zZyA9IDE7CisKICAgcmV0dXJuIG5ldmVudHM7CiB9CiAKQEAgLTM1MCwyNyArMzg5LDM2IEBACiAgIHVuc2lnbmVkIHNlY3JlbTsKICAgdW5zaWduZWQgbmFub3JlbTsKICAgaW50IHJ2OwotICBpbnQgcmM7CisgIGludCBlcnI7CiAgIGludCByc247CiAKICAgbmFubyA9IChpbnQpcmVxLT50dl9uc2VjOwogICBzZWNvbmRzID0gcmVxLT50dl9zZWM7Ci0gIGV2ZW50cyA9IENXX0NPTkRWQVI7CisgIGV2ZW50cyA9IENXX0NPTkRWQVIgfCBDV19JTlRSUFQ7CisgIHNlY3JlbSA9IDA7CisgIG5hbm9yZW0gPSAwOwogCiAjaWYgZGVmaW5lZChfTFA2NCkKLSAgQlBYNENUVygmc2Vjb25kcywgJm5hbm8sICZldmVudHMsICZzZWNyZW0sICZuYW5vcmVtLCAmcnYsICZyYywgJnJzbik7CisgIEJQWDRDVFcoJnNlY29uZHMsICZuYW5vLCAmZXZlbnRzLCAmc2VjcmVtLCAmbmFub3JlbSwgJnJ2LCAmZXJyLCAmcnNuKTsKICNlbHNlCi0gIEJQWDFDVFcoJnNlY29uZHMsICZuYW5vLCAmZXZlbnRzLCAmc2VjcmVtLCAmbmFub3JlbSwgJnJ2LCAmcmMsICZyc24pOworICBCUFgxQ1RXKCZzZWNvbmRzLCAmbmFubywgJmV2ZW50cywgJnNlY3JlbSwgJm5hbm9yZW0sICZydiwgJmVyciwgJnJzbik7CiAjZW5kaWYKIAotICBhc3NlcnQocnYgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKTsKKyAgLyogRG9uJ3QgY2xvYmJlciBlcnJubyB1bmxlc3MgQlBYMUNUVy9CUFg0Q1RXIGVycm9yZWQuCisgICAqIERvbid0IGxlYWsgRUFHQUlOLCB0aGF0IGp1c3QgbWVhbnMgdGhlIHRpbWVvdXQgZXhwaXJlZC4KKyAgICovCisgIGlmIChydiA9PSAtMSkKKyAgICBpZiAoZXJyID09IEVBR0FJTikKKyAgICAgIHJ2ID0gMDsKKyAgICBlbHNlCisgICAgICBlcnJubyA9IGVycjsKIAotICBpZihyZW0gIT0gTlVMTCkgeworICBpZiAocmVtICE9IE5VTEwgJiYgKHJ2ID09IDAgfHwgZXJyID09IEVJTlRSKSkgewogICAgIHJlbS0+dHZfbnNlYyA9IG5hbm9yZW07CiAgICAgcmVtLT50dl9zZWMgPSBzZWNyZW07CiAgIH0KIAotICByZXR1cm4gMDsKKyAgcmV0dXJuIHJ2OwogfQogCiAKQEAgLTUxMCwzICs1NTgsMjggQEAKICAgZWxzZQogICAgIHJldHVybiBwIC0gc3RyOwogfQorCisKK2ludCBzZW1faW5pdChVVl9QTEFURk9STV9TRU1fVCogc2VtaWQsIGludCBwc2hhcmVkLCB1bnNpZ25lZCBpbnQgdmFsdWUpIHsKKyAgVU5SRUFDSEFCTEUoKTsKK30KKworCitpbnQgc2VtX2Rlc3Ryb3koVVZfUExBVEZPUk1fU0VNX1QqIHNlbWlkKSB7CisgIFVOUkVBQ0hBQkxFKCk7Cit9CisKKworaW50IHNlbV9wb3N0KFVWX1BMQVRGT1JNX1NFTV9UKiBzZW1pZCkgeworICBVTlJFQUNIQUJMRSgpOworfQorCisKK2ludCBzZW1fdHJ5d2FpdChVVl9QTEFURk9STV9TRU1fVCogc2VtaWQpIHsKKyAgVU5SRUFDSEFCTEUoKTsKK30KKworCitpbnQgc2VtX3dhaXQoVVZfUExBVEZPUk1fU0VNX1QqIHNlbWlkKSB7CisgIFVOUkVBQ0hBQkxFKCk7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vczM5MC1zeXNjYWxscy5oIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3MzOTAtc3lzY2FsbHMuaAppbmRleCBlYTU5OTEwLi44NjQxNmJiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vczM5MC1zeXNjYWxscy5oCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29zMzkwLXN5c2NhbGxzLmgKQEAgLTQwLDYgKzQwLDcgQEAKIHN0cnVjdCBlcG9sbF9ldmVudCB7CiAgIGludCBldmVudHM7CiAgIGludCBmZDsKKyAgaW50IGlzX21zZzsKIH07CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTY0LDUgKzY1LDEwIEBACiBjaGFyICpta2R0ZW1wKGNoYXIqIHBhdGgpOwogc3NpemVfdCBvczM5MF9yZWFkbGluayhjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiBidWYsIHNpemVfdCBsZW4pOwogc2l6ZV90IHN0cm5sZW4oY29uc3QgY2hhciogc3RyLCBzaXplX3QgbWF4bGVuKTsKK2ludCBzZW1faW5pdChVVl9QTEFURk9STV9TRU1fVCogc2VtaWQsIGludCBwc2hhcmVkLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworaW50IHNlbV9kZXN0cm95KFVWX1BMQVRGT1JNX1NFTV9UKiBzZW1pZCk7CitpbnQgc2VtX3Bvc3QoVVZfUExBVEZPUk1fU0VNX1QqIHNlbWlkKTsKK2ludCBzZW1fdHJ5d2FpdChVVl9QTEFURk9STV9TRU1fVCogc2VtaWQpOworaW50IHNlbV93YWl0KFVWX1BMQVRGT1JNX1NFTV9UKiBzZW1pZCk7CiAKICNlbmRpZiAvKiBVVl9PUzM5MF9TWVNDQUxMX0hfICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vczM5MC5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvb3MzOTAuYwppbmRleCAyNzNkZWQ3Li5kY2UxNjliIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9vczM5MC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L29zMzkwLmMKQEAgLTQzMywxMyArNDMzLDYgQEAKIH0KIAogCi12b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgIHV2X19mcmVlKGNwdV9pbmZvc1tpXS5tb2RlbCk7Ci0gIHV2X19mcmVlKGNwdV9pbmZvcyk7Ci19Ci0KLQogc3RhdGljIGludCB1dl9faW50ZXJmYWNlX2FkZHJlc3Nlc192Nih1dl9pbnRlcmZhY2VfYWRkcmVzc190KiogYWRkcmVzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGNvdW50KSB7CiAgIHV2X2ludGVyZmFjZV9hZGRyZXNzX3QqIGFkZHJlc3M7CkBAIC05MzAsNyArOTIzLDcgQEAKICAgICAgICAgY29udGludWU7CiAKICAgICAgIGVwID0gbG9vcC0+ZXA7Ci0gICAgICBpZiAoZmQgPT0gZXAtPm1zZ19xdWV1ZSkgeworICAgICAgaWYgKHBlLT5pc19tc2cpIHsKICAgICAgICAgb3MzOTBfbWVzc2FnZV9xdWV1ZV9oYW5kbGVyKGVwKTsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9waXBlLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9waXBlLmMKaW5kZXggN2Q5NzU1MC4uNTJhOGZkNSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcGlwZS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3BpcGUuYwpAQCAtOTMsOCArOTMsMTIgQEAKICAgaWYgKHV2X19zdHJlYW1fZmQoaGFuZGxlKSA9PSAtMSkKICAgICByZXR1cm4gVVZfRUlOVkFMOwogCi0jaWYgZGVmaW5lZChfX01WU19fKQorICBpZiAoaGFuZGxlLT5pcGMpCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKworI2lmIGRlZmluZWQoX19NVlNfXykgfHwgZGVmaW5lZChfX1BBU0VfXykKICAgLyogT24gek9TLCBiYWNrbG9nPTAgaGFzIHVuZGVmaW5lZCBiZWhhdmlvdXIgKi8KKyAgLyogT24gSUJNaSBQQVNFLCBiYWNrbG9nPTAgbGVhZHMgdG8gIkNvbm5lY3Rpb24gcmVmdXNlZCIgZXJyb3IgKi8KICAgaWYgKGJhY2tsb2cgPT0gMCkKICAgICBiYWNrbG9nID0gMTsKICAgZWxzZSBpZiAoYmFja2xvZyA8IDApCkBAIC0yNTksNyArMjYzLDcgQEAKICAgICBhZGRybGVuID0gc3RybGVuKHNhLnN1bl9wYXRoKTsKIAogCi0gIGlmIChhZGRybGVuID49ICpzaXplKSB7CisgIGlmICgoc2l6ZV90KWFkZHJsZW4gPj0gKnNpemUpIHsKICAgICAqc2l6ZSA9IGFkZHJsZW4gKyAxOwogICAgIHJldHVybiBVVl9FTk9CVUZTOwogICB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9wb3NpeC1wb2xsLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9wb3NpeC1wb2xsLmMKaW5kZXggYTNiOWYyMS4uNzY2ZTgzMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcG9zaXgtcG9sbC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3Bvc2l4LXBvbGwuYwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHJldHVybjsKIAogICBuID0gbG9vcC0+cG9sbF9mZHNfc2l6ZSA/IGxvb3AtPnBvbGxfZmRzX3NpemUgKiAyIDogNjQ7Ci0gIHAgPSB1dl9fcmVhbGxvYyhsb29wLT5wb2xsX2ZkcywgbiAqIHNpemVvZigqbG9vcC0+cG9sbF9mZHMpKTsKKyAgcCA9IHV2X19yZWFsbG9jZihsb29wLT5wb2xsX2ZkcywgbiAqIHNpemVvZigqbG9vcC0+cG9sbF9mZHMpKTsKICAgaWYgKHAgPT0gTlVMTCkKICAgICBhYm9ydCgpOwogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9wcm9jZXNzLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9wcm9jZXNzLmMKaW5kZXggZjQ4MjZiZi4uMDhhYTJmMyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcHJvY2Vzcy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3Byb2Nlc3MuYwpAQCAtMTIzLDcyICsxMjMsNjQgQEAKIH0KIAogCi1pbnQgdXZfX21ha2Vfc29ja2V0cGFpcihpbnQgZmRzWzJdLCBpbnQgZmxhZ3MpIHsKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKLSAgc3RhdGljIGludCBub19jbG9leGVjOwotCi0gIGlmIChub19jbG9leGVjKQotICAgIGdvdG8gc2tpcDsKLQotICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSB8IFVWX19TT0NLX0NMT0VYRUMgfCBmbGFncywgMCwgZmRzKSA9PSAwKQotICAgIHJldHVybiAwOwotCi0gIC8qIFJldHJ5IG9uIEVJTlZBTCwgaXQgbWVhbnMgU09DS19DTE9FWEVDIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAqIEFueXRoaW5nIGVsc2UgaXMgYSBnZW51aW5lIGVycm9yLgotICAgKi8KLSAgaWYgKGVycm5vICE9IEVJTlZBTCkKK3N0YXRpYyBpbnQgdXZfX21ha2Vfc29ja2V0cGFpcihpbnQgZmRzWzJdKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pCisgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNIHwgU09DS19DTE9FWEVDLCAwLCBmZHMpKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAotICBub19jbG9leGVjID0gMTsKLQotc2tpcDoKLSNlbmRpZgorICByZXR1cm4gMDsKKyNlbHNlCisgIGludCBlcnI7CiAKICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIGZkcykpCiAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOwogCi0gIHV2X19jbG9leGVjKGZkc1swXSwgMSk7Ci0gIHV2X19jbG9leGVjKGZkc1sxXSwgMSk7CisgIGVyciA9IHV2X19jbG9leGVjKGZkc1swXSwgMSk7CisgIGlmIChlcnIgPT0gMCkKKyAgICBlcnIgPSB1dl9fY2xvZXhlYyhmZHNbMV0sIDEpOwogCi0gIGlmIChmbGFncyAmIFVWX19GX05PTkJMT0NLKSB7Ci0gICAgdXZfX25vbmJsb2NrKGZkc1swXSwgMSk7Ci0gICAgdXZfX25vbmJsb2NrKGZkc1sxXSwgMSk7CisgIGlmIChlcnIgIT0gMCkgeworICAgIHV2X19jbG9zZShmZHNbMF0pOworICAgIHV2X19jbG9zZShmZHNbMV0pOworICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKICAgfQogCiAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKIAogaW50IHV2X19tYWtlX3BpcGUoaW50IGZkc1syXSwgaW50IGZsYWdzKSB7Ci0jaWYgZGVmaW5lZChfX2xpbnV4X18pCi0gIHN0YXRpYyBpbnQgbm9fcGlwZTI7Ci0KLSAgaWYgKG5vX3BpcGUyKQotICAgIGdvdG8gc2tpcDsKLQotICBpZiAodXZfX3BpcGUyKGZkcywgZmxhZ3MgfCBVVl9fT19DTE9FWEVDKSA9PSAwKQotICAgIHJldHVybiAwOwotCi0gIGlmIChlcnJubyAhPSBFTk9TWVMpCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pCisgIGlmIChwaXBlMihmZHMsIGZsYWdzIHwgT19DTE9FWEVDKSkKICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CiAKLSAgbm9fcGlwZTIgPSAxOwotCi1za2lwOgotI2VuZGlmCi0KKyAgcmV0dXJuIDA7CisjZWxzZQogICBpZiAocGlwZShmZHMpKQogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAotICB1dl9fY2xvZXhlYyhmZHNbMF0sIDEpOwotICB1dl9fY2xvZXhlYyhmZHNbMV0sIDEpOworICBpZiAodXZfX2Nsb2V4ZWMoZmRzWzBdLCAxKSkKKyAgICBnb3RvIGZhaWw7CisKKyAgaWYgKHV2X19jbG9leGVjKGZkc1sxXSwgMSkpCisgICAgZ290byBmYWlsOwogCiAgIGlmIChmbGFncyAmIFVWX19GX05PTkJMT0NLKSB7Ci0gICAgdXZfX25vbmJsb2NrKGZkc1swXSwgMSk7Ci0gICAgdXZfX25vbmJsb2NrKGZkc1sxXSwgMSk7CisgICAgaWYgKHV2X19ub25ibG9jayhmZHNbMF0sIDEpKQorICAgICAgZ290byBmYWlsOworCisgICAgaWYgKHV2X19ub25ibG9jayhmZHNbMV0sIDEpKQorICAgICAgZ290byBmYWlsOwogICB9CiAKICAgcmV0dXJuIDA7CisKK2ZhaWw6CisgIHV2X19jbG9zZShmZHNbMF0pOworICB1dl9fY2xvc2UoZmRzWzFdKTsKKyAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworI2VuZGlmCiB9CiAKIApAQCAtMjExLDcgKzIwMyw3IEBACiAgICAgaWYgKGNvbnRhaW5lci0+ZGF0YS5zdHJlYW0tPnR5cGUgIT0gVVZfTkFNRURfUElQRSkKICAgICAgIHJldHVybiBVVl9FSU5WQUw7CiAgICAgZWxzZQotICAgICAgcmV0dXJuIHV2X19tYWtlX3NvY2tldHBhaXIoZmRzLCAwKTsKKyAgICAgIHJldHVybiB1dl9fbWFrZV9zb2NrZXRwYWlyKGZkcyk7CiAKICAgY2FzZSBVVl9JTkhFUklUX0ZEOgogICBjYXNlIFVWX0lOSEVSSVRfU1RSRUFNOgpAQCAtMjYwLDcgKzI1Miw3IEBACiAKIHN0YXRpYyB2b2lkIHV2X19wcm9jZXNzX2Nsb3NlX3N0cmVhbSh1dl9zdGRpb19jb250YWluZXJfdCogY29udGFpbmVyKSB7CiAgIGlmICghKGNvbnRhaW5lci0+ZmxhZ3MgJiBVVl9DUkVBVEVfUElQRSkpIHJldHVybjsKLSAgdXZfX3N0cmVhbV9jbG9zZSgodXZfc3RyZWFtX3QqKWNvbnRhaW5lci0+ZGF0YS5zdHJlYW0pOworICB1dl9fc3RyZWFtX2Nsb3NlKGNvbnRhaW5lci0+ZGF0YS5zdHJlYW0pOwogfQogCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3Byb2N0aXRsZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcHJvY3RpdGxlLmMKaW5kZXggYTVjZTIwMy4uNGVlOTkxZiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcHJvY3RpdGxlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcHJvY3RpdGxlLmMKQEAgLTI0LDI4ICsyNCwyNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCi1leHRlcm4gdm9pZCB1dl9fc2V0X3Byb2Nlc3NfdGl0bGVfcGxhdGZvcm1faW5pdCh2b2lkKTsKK3N0cnVjdCB1dl9fcHJvY2Vzc190aXRsZSB7CisgIGNoYXIqIHN0cjsKKyAgc2l6ZV90IGxlbjsgIC8qIExlbmd0aCBvZiB0aGUgY3VycmVudCBwcm9jZXNzIHRpdGxlLiAqLworICBzaXplX3QgY2FwOyAgLyogTWF4aW11bSBjYXBhY2l0eS4gQ29tcHV0ZWQgb25jZSBpbiB1dl9zZXR1cF9hcmdzKCkuICovCit9OworCiBleHRlcm4gdm9pZCB1dl9fc2V0X3Byb2Nlc3NfdGl0bGUoY29uc3QgY2hhciogdGl0bGUpOwogCiBzdGF0aWMgdXZfbXV0ZXhfdCBwcm9jZXNzX3RpdGxlX211dGV4Owogc3RhdGljIHV2X29uY2VfdCBwcm9jZXNzX3RpdGxlX211dGV4X29uY2UgPSBVVl9PTkNFX0lOSVQ7CitzdGF0aWMgc3RydWN0IHV2X19wcm9jZXNzX3RpdGxlIHByb2Nlc3NfdGl0bGU7CiBzdGF0aWMgdm9pZCogYXJnc19tZW07CiAKLXN0YXRpYyBzdHJ1Y3QgewotICBjaGFyKiBzdHI7Ci0gIHNpemVfdCBsZW47Ci19IHByb2Nlc3NfdGl0bGU7Ci0KIAogc3RhdGljIHZvaWQgaW5pdF9wcm9jZXNzX3RpdGxlX211dGV4X29uY2Uodm9pZCkgewogICB1dl9tdXRleF9pbml0KCZwcm9jZXNzX3RpdGxlX211dGV4KTsKLSNpZmRlZiBfX0FQUExFX18KLSAgdXZfX3NldF9wcm9jZXNzX3RpdGxlX3BsYXRmb3JtX2luaXQoKTsKLSNlbmRpZgogfQogCiAKIGNoYXIqKiB1dl9zZXR1cF9hcmdzKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICBzdHJ1Y3QgdXZfX3Byb2Nlc3NfdGl0bGUgcHQ7CiAgIGNoYXIqKiBuZXdfYXJndjsKICAgc2l6ZV90IHNpemU7CiAgIGNoYXIqIHM7CkBAIC01NCwyMCArNTMsMTQgQEAKICAgaWYgKGFyZ2MgPD0gMCkKICAgICByZXR1cm4gYXJndjsKIAotICAvKiBDYWxjdWxhdGUgaG93IG11Y2ggbWVtb3J5IHdlIG5lZWQgZm9yIHRoZSBhcmd2IHN0cmluZ3MuICovCi0gIHNpemUgPSAwOwotICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQotICAgIHNpemUgKz0gc3RybGVuKGFyZ3ZbaV0pICsgMTsKKyAgcHQuc3RyID0gYXJndlswXTsKKyAgcHQubGVuID0gc3RybGVuKGFyZ3ZbMF0pOworICBwdC5jYXAgPSBwdC5sZW4gKyAxOwogCi0jaWYgZGVmaW5lZChfX01WU19fKQotICAvKiBhcmd2IGlzIG5vdCBhZGphY2VudC4gU28ganVzdCB1c2UgYXJndlswXSAqLwotICBwcm9jZXNzX3RpdGxlLnN0ciA9IGFyZ3ZbMF07Ci0gIHByb2Nlc3NfdGl0bGUubGVuID0gc3RybGVuKGFyZ3ZbMF0pOwotI2Vsc2UKLSAgcHJvY2Vzc190aXRsZS5zdHIgPSBhcmd2WzBdOwotICBwcm9jZXNzX3RpdGxlLmxlbiA9IGFyZ3ZbYXJnYyAtIDFdICsgc3RybGVuKGFyZ3ZbYXJnYyAtIDFdKSAtIGFyZ3ZbMF07Ci0gIGFzc2VydChwcm9jZXNzX3RpdGxlLmxlbiArIDEgPT0gc2l6ZSk7ICAvKiBhcmd2IG1lbW9yeSBzaG91bGQgYmUgYWRqYWNlbnQuICovCi0jZW5kaWYKKyAgLyogQ2FsY3VsYXRlIGhvdyBtdWNoIG1lbW9yeSB3ZSBuZWVkIGZvciB0aGUgYXJndiBzdHJpbmdzLiAqLworICBzaXplID0gcHQuY2FwOworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHNpemUgKz0gc3RybGVuKGFyZ3ZbaV0pICsgMTsKIAogICAvKiBBZGQgc3BhY2UgZm9yIHRoZSBhcmd2IHBvaW50ZXJzLiAqLwogICBzaXplICs9IChhcmdjICsgMSkgKiBzaXplb2YoY2hhciopOwpAQCAtNzUsMzIgKzY4LDU0IEBACiAgIG5ld19hcmd2ID0gdXZfX21hbGxvYyhzaXplKTsKICAgaWYgKG5ld19hcmd2ID09IE5VTEwpCiAgICAgcmV0dXJuIGFyZ3Y7Ci0gIGFyZ3NfbWVtID0gbmV3X2FyZ3Y7CiAKICAgLyogQ29weSBvdmVyIHRoZSBzdHJpbmdzIGFuZCBzZXQgdXAgdGhlIHBvaW50ZXIgdGFibGUuICovCisgIGkgPSAwOwogICBzID0gKGNoYXIqKSAmbmV3X2FyZ3ZbYXJnYyArIDFdOwotICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisgIHNpemUgPSBwdC5jYXA7CisgIGdvdG8gbG9vcDsKKworICBmb3IgKC8qIGVtcHR5ICovOyBpIDwgYXJnYzsgaSsrKSB7CiAgICAgc2l6ZSA9IHN0cmxlbihhcmd2W2ldKSArIDE7CisgIGxvb3A6CiAgICAgbWVtY3B5KHMsIGFyZ3ZbaV0sIHNpemUpOwogICAgIG5ld19hcmd2W2ldID0gczsKICAgICBzICs9IHNpemU7CiAgIH0KICAgbmV3X2FyZ3ZbaV0gPSBOVUxMOwogCisgIC8qIGFyZ3YgaXMgbm90IGFkamFjZW50IG9uIHovb3MsIHdlIHVzZSBqdXN0IGFyZ3ZbMF0gb24gdGhhdCBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgX19NVlNfXworICBwdC5jYXAgPSBhcmd2W2kgLSAxXSArIHNpemUgLSBhcmd2WzBdOworI2VuZGlmCisKKyAgYXJnc19tZW0gPSBuZXdfYXJndjsKKyAgcHJvY2Vzc190aXRsZSA9IHB0OworCiAgIHJldHVybiBuZXdfYXJndjsKIH0KIAogCiBpbnQgdXZfc2V0X3Byb2Nlc3NfdGl0bGUoY29uc3QgY2hhciogdGl0bGUpIHsKKyAgc3RydWN0IHV2X19wcm9jZXNzX3RpdGxlKiBwdDsKKyAgc2l6ZV90IGxlbjsKKworICBwdCA9ICZwcm9jZXNzX3RpdGxlOworICBsZW4gPSBzdHJsZW4odGl0bGUpOworCiAgIHV2X29uY2UoJnByb2Nlc3NfdGl0bGVfbXV0ZXhfb25jZSwgaW5pdF9wcm9jZXNzX3RpdGxlX211dGV4X29uY2UpOwogICB1dl9tdXRleF9sb2NrKCZwcm9jZXNzX3RpdGxlX211dGV4KTsKIAotICBpZiAocHJvY2Vzc190aXRsZS5sZW4gIT0gMCkgewotICAgIC8qIE5vIG5lZWQgdG8gdGVybWluYXRlLCBieXRlIGFmdGVyIGlzIGFsd2F5cyAnXDAnLiAqLwotICAgIHN0cm5jcHkocHJvY2Vzc190aXRsZS5zdHIsIHRpdGxlLCBwcm9jZXNzX3RpdGxlLmxlbik7Ci0gICAgdXZfX3NldF9wcm9jZXNzX3RpdGxlKHRpdGxlKTsKKyAgaWYgKGxlbiA+PSBwdC0+Y2FwKSB7CisgICAgbGVuID0gMDsKKyAgICBpZiAocHQtPmNhcCA+IDApCisgICAgICBsZW4gPSBwdC0+Y2FwIC0gMTsKICAgfQogCisgIG1lbWNweShwdC0+c3RyLCB0aXRsZSwgbGVuKTsKKyAgbWVtc2V0KHB0LT5zdHIgKyBsZW4sICdcMCcsIHB0LT5jYXAgLSBsZW4pOworICBwdC0+bGVuID0gbGVuOworCiAgIHV2X211dGV4X3VubG9jaygmcHJvY2Vzc190aXRsZV9tdXRleCk7CiAKICAgcmV0dXJuIDA7CkBAIC0xMzAsNyArMTQ1LDcgQEAKIH0KIAogCi1VVl9ERVNUUlVDVE9SKHN0YXRpYyB2b2lkIGZyZWVfYXJnc19tZW0odm9pZCkpIHsKK3ZvaWQgdXZfX3Byb2Nlc3NfdGl0bGVfY2xlYW51cCh2b2lkKSB7CiAgIHV2X19mcmVlKGFyZ3NfbWVtKTsgIC8qIEtlZXAgdmFsZ3JpbmQgaGFwcHkuICovCiAgIGFyZ3NfbWVtID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3JhbmRvbS1kZXZ1cmFuZG9tLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tZGV2dXJhbmRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTUyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tZGV2dXJhbmRvbS5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qIENvcHlyaWdodCBsaWJ1diBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisgKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJ1di5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgdXZfb25jZV90IG9uY2UgPSBVVl9PTkNFX0lOSVQ7CitzdGF0aWMgaW50IHN0YXR1czsKKworCitpbnQgdXZfX3JhbmRvbV9yZWFkcGF0aChjb25zdCBjaGFyKiBwYXRoLCB2b2lkKiBidWYsIHNpemVfdCBidWZsZW4pIHsKKyAgc3RydWN0IHN0YXQgczsKKyAgc2l6ZV90IHBvczsKKyAgc3NpemVfdCBuOworICBpbnQgZmQ7CisKKyAgZmQgPSB1dl9fb3Blbl9jbG9leGVjKHBhdGgsIE9fUkRPTkxZKTsKKworICBpZiAoZmQgPCAwKQorICAgIHJldHVybiBmZDsKKworICBpZiAoZnN0YXQoZmQsICZzKSkgeworICAgIHV2X19jbG9zZShmZCk7CisgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworICB9CisKKyAgaWYgKCFTX0lTQ0hSKHMuc3RfbW9kZSkpIHsKKyAgICB1dl9fY2xvc2UoZmQpOworICAgIHJldHVybiBVVl9FSU87CisgIH0KKworICBmb3IgKHBvcyA9IDA7IHBvcyAhPSBidWZsZW47IHBvcyArPSBuKSB7CisgICAgZG8KKyAgICAgIG4gPSByZWFkKGZkLCAoY2hhciopIGJ1ZiArIHBvcywgYnVmbGVuIC0gcG9zKTsKKyAgICB3aGlsZSAobiA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgICBpZiAobiA9PSAtMSkgeworICAgICAgdXZfX2Nsb3NlKGZkKTsKKyAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKyAgICB9CisKKyAgICBpZiAobiA9PSAwKSB7CisgICAgICB1dl9fY2xvc2UoZmQpOworICAgICAgcmV0dXJuIFVWX0VJTzsKKyAgICB9CisgIH0KKworICB1dl9fY2xvc2UoZmQpOworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB1dl9fcmFuZG9tX2RldnVyYW5kb21faW5pdCh2b2lkKSB7CisgIGNoYXIgYzsKKworICAvKiBMaW51eCdzIHJhbmRvbSg0KSBtYW4gcGFnZSBzdWdnZXN0cyBhcHBsaWNhdGlvbnMgc2hvdWxkIHJlYWQgYXQgbGVhc3QKKyAgICogb25jZSBmcm9tIC9kZXYvcmFuZG9tIGJlZm9yZSBzd2l0Y2hpbmcgdG8gL2Rldi91cmFuZG9tIGluIG9yZGVyIHRvIHNlZWQKKyAgICogdGhlIHN5c3RlbSBSTkcuIFJlYWRzIGZyb20gL2Rldi9yYW5kb20gY2FuIG9mIGNvdXJzZSBibG9jayBpbmRlZmluaXRlbHkKKyAgICogdW50aWwgZW50cm9weSBpcyBhdmFpbGFibGUgYnV0IHRoYXQncyB0aGUgcG9pbnQuCisgICAqLworICBzdGF0dXMgPSB1dl9fcmFuZG9tX3JlYWRwYXRoKCIvZGV2L3JhbmRvbSIsICZjLCAxKTsKK30KKworCitpbnQgdXZfX3JhbmRvbV9kZXZ1cmFuZG9tKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1ZmxlbikgeworICB1dl9vbmNlKCZvbmNlLCB1dl9fcmFuZG9tX2RldnVyYW5kb21faW5pdCk7CisKKyAgaWYgKHN0YXR1cyAhPSAwKQorICAgIHJldHVybiBzdGF0dXM7CisKKyAgcmV0dXJuIHV2X19yYW5kb21fcmVhZHBhdGgoIi9kZXYvdXJhbmRvbSIsIGJ1ZiwgYnVmbGVuKTsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3JhbmRvbS1nZXRlbnRyb3B5LmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tZ2V0ZW50cm9weS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NWQ5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9yYW5kb20tZ2V0ZW50cm9weS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qIENvcHlyaWdodCBsaWJ1diBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisgKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJ1di5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorCit0eXBlZGVmIGludCAoKnV2X19nZXRlbnRyb3B5X2NiKSh2b2lkICosIHNpemVfdCk7CisKK3N0YXRpYyB1dl9fZ2V0ZW50cm9weV9jYiB1dl9fZ2V0ZW50cm9weTsKK3N0YXRpYyB1dl9vbmNlX3Qgb25jZSA9IFVWX09OQ0VfSU5JVDsKKworCitzdGF0aWMgdm9pZCB1dl9fcmFuZG9tX2dldGVudHJvcHlfaW5pdCh2b2lkKSB7CisgIHV2X19nZXRlbnRyb3B5ID0gKHV2X19nZXRlbnRyb3B5X2NiKSBkbHN5bShSVExEX0RFRkFVTFQsICJnZXRlbnRyb3B5Iik7Cit9CisKKworaW50IHV2X19yYW5kb21fZ2V0ZW50cm9weSh2b2lkKiBidWYsIHNpemVfdCBidWZsZW4pIHsKKyAgc2l6ZV90IHBvczsKKyAgc2l6ZV90IHN0cmlkZTsKKworICB1dl9vbmNlKCZvbmNlLCB1dl9fcmFuZG9tX2dldGVudHJvcHlfaW5pdCk7CisKKyAgaWYgKHV2X19nZXRlbnRyb3B5ID09IE5VTEwpCisgICAgcmV0dXJuIFVWX0VOT1NZUzsKKworICAvKiBnZXRlbnRyb3B5KCkgcmV0dXJucyBhbiBlcnJvciBmb3IgcmVxdWVzdHMgPiAyNTYgYnl0ZXMuICovCisgIGZvciAocG9zID0gMCwgc3RyaWRlID0gMjU2OyBwb3MgKyBzdHJpZGUgPCBidWZsZW47IHBvcyArPSBzdHJpZGUpCisgICAgaWYgKHV2X19nZXRlbnRyb3B5KChjaGFyICopIGJ1ZiArIHBvcywgc3RyaWRlKSkKKyAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKworICBpZiAodXZfX2dldGVudHJvcHkoKGNoYXIgKikgYnVmICsgcG9zLCBidWZsZW4gLSBwb3MpKQorICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3JhbmRvbS1nZXRyYW5kb20uYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3JhbmRvbS1nZXRyYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2M5NDA4Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcmFuZG9tLWdldHJhbmRvbS5jCkBAIC0wLDAgKzEsODggQEAKKy8qIENvcHlyaWdodCBsaWJ1diBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisgKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJ1di5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpZmRlZiBfX2xpbnV4X18KKworI2luY2x1ZGUgImxpbnV4LXN5c2NhbGxzLmgiCisKKyNkZWZpbmUgdXZfX3JhbmRvbV9nZXRyYW5kb21faW5pdCgpIDAKKworI2Vsc2UgIC8qICFfX2xpbnV4X18gKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisKK3R5cGVkZWYgc3NpemVfdCAoKnV2X19nZXRyYW5kb21fY2IpKHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCk7CisKK3N0YXRpYyB1dl9fZ2V0cmFuZG9tX2NiIHV2X19nZXRyYW5kb207CitzdGF0aWMgdXZfb25jZV90IG9uY2UgPSBVVl9PTkNFX0lOSVQ7CisKK3N0YXRpYyB2b2lkIHV2X19yYW5kb21fZ2V0cmFuZG9tX2luaXRfb25jZSh2b2lkKSB7CisgIHV2X19nZXRyYW5kb20gPSAodXZfX2dldHJhbmRvbV9jYikgZGxzeW0oUlRMRF9ERUZBVUxULCAiZ2V0cmFuZG9tIik7Cit9CisKK3N0YXRpYyBpbnQgdXZfX3JhbmRvbV9nZXRyYW5kb21faW5pdCh2b2lkKSB7CisgIHV2X29uY2UoJm9uY2UsIHV2X19yYW5kb21fZ2V0cmFuZG9tX2luaXRfb25jZSk7CisKKyAgaWYgKHV2X19nZXRyYW5kb20gPT0gTlVMTCkKKyAgICByZXR1cm4gVVZfRU5PU1lTOworCisgIHJldHVybiAwOworfQorCisjZW5kaWYgIC8qICFfX2xpbnV4X18gKi8KKworaW50IHV2X19yYW5kb21fZ2V0cmFuZG9tKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1ZmxlbikgeworICBzc2l6ZV90IG47CisgIHNpemVfdCBwb3M7CisgIGludCByYzsKKworICByYyA9IHV2X19yYW5kb21fZ2V0cmFuZG9tX2luaXQoKTsKKyAgaWYgKHJjICE9IDApCisgICAgcmV0dXJuIHJjOworCisgIGZvciAocG9zID0gMDsgcG9zICE9IGJ1ZmxlbjsgcG9zICs9IG4pIHsKKyAgICBkbyB7CisgICAgICBuID0gYnVmbGVuIC0gcG9zOworCisgICAgICAvKiBNb3N0IGdldHJhbmRvbSgpIGltcGxlbWVudGF0aW9ucyBwcm9taXNlIHRoYXQgcmVhZHMgPD0gMjU2IGJ5dGVzCisgICAgICAgKiB3aWxsIGFsd2F5cyBzdWNjZWVkIGFuZCB3b24ndCBiZSBpbnRlcnJ1cHRlZCBieSBzaWduYWxzLgorICAgICAgICogSXQncyB0aGVyZWZvcmUgdXNlZnVsIHRvIHNwbGl0IGl0IHVwIGluIHNtYWxsZXIgcmVhZHMgYmVjYXVzZQorICAgICAgICogb25lIGJpZyByZWFkIG1heSwgaW4gdGhlb3J5LCBjb250aW51b3VzbHkgZmFpbCB3aXRoIEVJTlRSLgorICAgICAgICovCisgICAgICBpZiAobiA+IDI1NikKKyAgICAgICAgbiA9IDI1NjsKKworICAgICAgbiA9IHV2X19nZXRyYW5kb20oKGNoYXIgKikgYnVmICsgcG9zLCBuLCAwKTsKKyAgICB9IHdoaWxlIChuID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKworICAgIGlmIChuID09IC0xKQorICAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworCisgICAgaWYgKG4gPT0gMCkKKyAgICAgIHJldHVybiBVVl9FSU87CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3JhbmRvbS1zeXNjdGwtbGludXguYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3JhbmRvbS1zeXNjdGwtbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmJhOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvcmFuZG9tLXN5c2N0bC1saW51eC5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qIENvcHlyaWdodCBsaWJ1diBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisgKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJ1di5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8c3lzY2FsbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisKK3N0cnVjdCB1dl9fc3lzY3RsX2FyZ3MgeworICBpbnQqIG5hbWU7CisgIGludCBubGVuOworICB2b2lkKiBvbGR2YWw7CisgIHNpemVfdCogb2xkbGVucDsKKyAgdm9pZCogbmV3dmFsOworICBzaXplX3QgbmV3bGVuOworICB1bnNpZ25lZCBsb25nIHVudXNlZFs0XTsKK307CisKKworaW50IHV2X19yYW5kb21fc3lzY3RsKHZvaWQqIGJ1Ziwgc2l6ZV90IGJ1ZmxlbikgeworICBzdGF0aWMgaW50IG5hbWVbXSA9IHsxIC8qQ1RMX0tFUk4qLywgNDAgLypLRVJOX1JBTkRPTSovLCA2IC8qUkFORE9NX1VVSUQqL307CisgIHN0cnVjdCB1dl9fc3lzY3RsX2FyZ3MgYXJnczsKKyAgY2hhciB1dWlkWzE2XTsKKyAgY2hhciogcDsKKyAgY2hhciogcGU7CisgIHNpemVfdCBuOworCisgIHAgPSBidWY7CisgIHBlID0gcCArIGJ1ZmxlbjsKKworICB3aGlsZSAocCA8IHBlKSB7CisgICAgbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCisgICAgYXJncy5uYW1lID0gbmFtZTsKKyAgICBhcmdzLm5sZW4gPSBBUlJBWV9TSVpFKG5hbWUpOworICAgIGFyZ3Mub2xkdmFsID0gdXVpZDsKKyAgICBhcmdzLm9sZGxlbnAgPSAmbjsKKyAgICBuID0gc2l6ZW9mKHV1aWQpOworCisgICAgLyogRW1pdHMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdpdGggc29tZSBrZXJuZWxzIGJ1dCB0aGF0IHNlZW1zIGxpa2UKKyAgICAgKiBhbiBva2F5IHRyYWRlLW9mZiBmb3IgdGhlIGZhbGxiYWNrIG9mIHRoZSBmYWxsYmFjazogdGhpcyBmdW5jdGlvbiBpcworICAgICAqIG9ubHkgY2FsbGVkIHdoZW4gbmVpdGhlciBnZXRyYW5kb20oMikgbm9yIC9kZXYvdXJhbmRvbSBhcmUgYXZhaWxhYmxlLgorICAgICAqIEZhaWxzIHdpdGggRU5PU1lTIG9uIGtlcm5lbHMgY29uZmlndXJlZCB3aXRob3V0IENPTkZJR19TWVNDVExfU1lTQ0FMTC4KKyAgICAgKiBBdCBsZWFzdCBhcm02NCBuZXZlciBoYWQgYSBfc3lzY3RsIHN5c3RlbSBjYWxsIGFuZCB0aGVyZWZvcmUgZG9lc24ndAorICAgICAqIGhhdmUgYSBTWVNfX3N5c2N0bCBkZWZpbmUgZWl0aGVyLgorICAgICAqLworI2lmZGVmIFNZU19fc3lzY3RsCisgICAgaWYgKHN5c2NhbGwoU1lTX19zeXNjdGwsICZhcmdzKSA9PSAtMSkKKyAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKyNlbHNlCisgICAgeworICAgICAgKHZvaWQpICZhcmdzOworICAgICAgcmV0dXJuIFVWX0VOT1NZUzsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChuICE9IHNpemVvZih1dWlkKSkKKyAgICAgIHJldHVybiBVVl9FSU87ICAvKiBDYW4ndCBoYXBwZW4uICovCisKKyAgICAvKiB1dWlkW10gaXMgbm93IGEgdHlwZSA0IFVVSUQuIEJ5dGVzIDYgYW5kIDggKGNvdW50aW5nIGZyb20gemVybykgY29udGFpbgorICAgICAqIDQgYW5kIDUgYml0cyBvZiBlbnRyb3B5LCByZXNwZWN0aXZlbHkuIEZvciBlYXNlIG9mIHVzZSwgd2Ugc2tpcCB0aG9zZQorICAgICAqIGFuZCBvbmx5IHVzZSAxNCBvZiB0aGUgMTYgYnl0ZXMuCisgICAgICovCisgICAgdXVpZFs2XSA9IHV1aWRbMTRdOworICAgIHV1aWRbOF0gPSB1dWlkWzE1XTsKKworICAgIG4gPSBwZSAtIHA7CisgICAgaWYgKG4gPiAxNCkKKyAgICAgIG4gPSAxNDsKKworICAgIG1lbWNweShwLCB1dWlkLCBuKTsKKyAgICBwICs9IG47CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3NpZ25hbC5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvc2lnbmFsLmMKaW5kZXggMDFhYTU1Zi4uMWM4M2UwOSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvc2lnbmFsLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvc2lnbmFsLmMKQEAgLTc3LDcgKzc3LDcgQEAKIH0KIAogCi1VVl9ERVNUUlVDVE9SKHN0YXRpYyB2b2lkIHV2X19zaWduYWxfZ2xvYmFsX2Zpbmkodm9pZCkpIHsKK3ZvaWQgdXZfX3NpZ25hbF9jbGVhbnVwKHZvaWQpIHsKICAgLyogV2UgY2FuIG9ubHkgdXNlIHNpZ25hbC1zYWZlIGZ1bmN0aW9ucyBoZXJlLgogICAgKiBUaGF0IGluY2x1ZGVzIHJlYWQvd3JpdGUgYW5kIGNsb3NlLCBmb3J0dW5hdGVseS4KICAgICogV2UgZG8gYWxsIG9mIHRoaXMgZGlyZWN0bHkgaGVyZSBpbnN0ZWFkIG9mIHJlc2V0dGluZwpAQCAtOTgsNyArOTgsNyBAQAogCiAKIHN0YXRpYyB2b2lkIHV2X19zaWduYWxfZ2xvYmFsX3JlaW5pdCh2b2lkKSB7Ci0gIHV2X19zaWduYWxfZ2xvYmFsX2ZpbmkoKTsKKyAgdXZfX3NpZ25hbF9jbGVhbnVwKCk7CiAKICAgaWYgKHV2X19tYWtlX3BpcGUodXZfX3NpZ25hbF9sb2NrX3BpcGVmZCwgMCkpCiAgICAgYWJvcnQoKTsKQEAgLTMzMSwxNiArMzMxLDcgQEAKIAogCiB2b2lkIHV2X19zaWduYWxfY2xvc2UodXZfc2lnbmFsX3QqIGhhbmRsZSkgewotCiAgIHV2X19zaWduYWxfc3RvcChoYW5kbGUpOwotCi0gIC8qIElmIHRoZXJlIGFyZSBhbnkgY2F1Z2h0IHNpZ25hbHMgInRyYXBwZWQiIGluIHRoZSBzaWduYWwgcGlwZSwgd2UgY2FuJ3QKLSAgICogY2FsbCB0aGUgY2xvc2UgY2FsbGJhY2sgeWV0LiBPdGhlcndpc2UsIGFkZCB0aGUgaGFuZGxlIHRvIHRoZSBmaW5pc2hfY2xvc2UKLSAgICogcXVldWUuCi0gICAqLwotICBpZiAoaGFuZGxlLT5jYXVnaHRfc2lnbmFscyA9PSBoYW5kbGUtPmRpc3BhdGNoZWRfc2lnbmFscykgewotICAgIHV2X19tYWtlX2Nsb3NlX3BlbmRpbmcoKHV2X2hhbmRsZV90KikgaGFuZGxlKTsKLSAgfQogfQogCiAKQEAgLTM3NSw3ICszNjYsNyBAQAogCiAgIC8qIFNob3J0IGNpcmN1aXQ6IGlmIHRoZSBzaWduYWwgd2F0Y2hlciBpcyBhbHJlYWR5IHdhdGNoaW5nIHtzaWdudW19IGRvbid0CiAgICAqIGdvIHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgZGVyZWdpc3RlcmluZyBhbmQgcmVnaXN0ZXJpbmcgdGhlIGhhbmRsZXIuCi0gICAqIEFkZGl0aW9uYWxseSwgdGhpcyBhdm9pZHMgcGVuZGluZyBzaWduYWxzIGdldHRpbmcgbG9zdCBpbiB0aGUgc21hbGwgdGltZQorICAgKiBBZGRpdGlvbmFsbHksIHRoaXMgYXZvaWRzIHBlbmRpbmcgc2lnbmFscyBnZXR0aW5nIGxvc3QgaW4gdGhlIHNtYWxsCiAgICAqIHRpbWUgZnJhbWUgdGhhdCBoYW5kbGUtPnNpZ251bSA9PSAwLgogICAgKi8KICAgaWYgKHNpZ251bSA9PSBoYW5kbGUtPnNpZ251bSkgewpAQCAtNDcyLDE1ICs0NjMsNiBAQAogCiAgICAgICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX1NJR05BTF9PTkVfU0hPVCkKICAgICAgICAgdXZfX3NpZ25hbF9zdG9wKGhhbmRsZSk7Ci0KLSAgICAgIC8qIElmIHV2X2Nsb3NlIHdhcyBjYWxsZWQgd2hpbGUgdGhlcmUgd2VyZSBjYXVnaHQgc2lnbmFscyB0aGF0IHdlcmUgbm90Ci0gICAgICAgKiB5ZXQgZGlzcGF0Y2hlZCwgdGhlIHV2X19maW5pc2hfY2xvc2Ugd2FzIGRlZmVycmVkLiBNYWtlIGNsb3NlIHBlbmRpbmcKLSAgICAgICAqIG5vdyBpZiB0aGlzIGhhcyBoYXBwZW5lZC4KLSAgICAgICAqLwotICAgICAgaWYgKChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0NMT1NJTkcpICYmCi0gICAgICAgICAgKGhhbmRsZS0+Y2F1Z2h0X3NpZ25hbHMgPT0gaGFuZGxlLT5kaXNwYXRjaGVkX3NpZ25hbHMpKSB7Ci0gICAgICAgIHV2X19tYWtlX2Nsb3NlX3BlbmRpbmcoKHV2X2hhbmRsZV90KikgaGFuZGxlKTsKLSAgICAgIH0KICAgICB9CiAKICAgICBieXRlcyAtPSBlbmQ7CkBAIC01NjMsNiArNTQ1LDcgQEAKICAgICBpZiAoZmlyc3Rfb25lc2hvdCAmJiAhcmVtX29uZXNob3QpIHsKICAgICAgIHJldCA9IHV2X19zaWduYWxfcmVnaXN0ZXJfaGFuZGxlcihoYW5kbGUtPnNpZ251bSwgMSk7CiAgICAgICBhc3NlcnQocmV0ID09IDApOworICAgICAgKHZvaWQpcmV0OwogICAgIH0KICAgfQogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9zdHJlYW0uYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3N0cmVhbS5jCmluZGV4IDgxMjFmNjQuLjNiNmRhOGQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3N0cmVhbS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3N0cmVhbS5jCkBAIC0xMDAwLDEyICsxMDAwLDEyIEBACiAKIHN0YXRpYyB2b2lkIHV2X19zdHJlYW1fZW9mKHV2X3N0cmVhbV90KiBzdHJlYW0sIGNvbnN0IHV2X2J1Zl90KiBidWYpIHsKICAgc3RyZWFtLT5mbGFncyB8PSBVVl9IQU5ETEVfUkVBRF9FT0Y7CisgIHN0cmVhbS0+ZmxhZ3MgJj0gflVWX0hBTkRMRV9SRUFESU5HOwogICB1dl9faW9fc3RvcChzdHJlYW0tPmxvb3AsICZzdHJlYW0tPmlvX3dhdGNoZXIsIFBPTExJTik7CiAgIGlmICghdXZfX2lvX2FjdGl2ZSgmc3RyZWFtLT5pb193YXRjaGVyLCBQT0xMT1VUKSkKICAgICB1dl9faGFuZGxlX3N0b3Aoc3RyZWFtKTsKICAgdXZfX3N0cmVhbV9vc3hfaW50ZXJydXB0X3NlbGVjdChzdHJlYW0pOwogICBzdHJlYW0tPnJlYWRfY2Ioc3RyZWFtLCBVVl9FT0YsIGJ1Zik7Ci0gIHN0cmVhbS0+ZmxhZ3MgJj0gflVWX0hBTkRMRV9SRUFESU5HOwogfQogCiAKQEAgLTEwNDgsNyArMTA0OCwxMiBAQAogfQogCiAKLSNkZWZpbmUgVVZfX0NNU0dfRkRfQ09VTlQgNjQKKyNpZiBkZWZpbmVkKF9fUEFTRV9fKQorLyogb24gSUJNaSBQQVNFIHRoZSBjb250cm9sIG1lc3NhZ2UgbGVuZ3RoIGNhbiBub3QgZXhjZWVkIDI1Ni4gKi8KKyMgZGVmaW5lIFVWX19DTVNHX0ZEX0NPVU5UIDYwCisjZWxzZQorIyBkZWZpbmUgVVZfX0NNU0dfRkRfQ09VTlQgNjQKKyNlbmRpZgogI2RlZmluZSBVVl9fQ01TR19GRF9TSVpFIChVVl9fQ01TR19GRF9DT1VOVCAqIHNpemVvZihpbnQpKQogCiAKQEAgLTE0MDMsNyArMTQwOCw3IEBACiAgICAgcmV0dXJuIFVWX0VCQURGOwogCiAgIGlmICghKHN0cmVhbS0+ZmxhZ3MgJiBVVl9IQU5ETEVfV1JJVEFCTEUpKQotICAgIHJldHVybiAtRVBJUEU7CisgICAgcmV0dXJuIFVWX0VQSVBFOwogCiAgIGlmIChzZW5kX2hhbmRsZSkgewogICAgIGlmIChzdHJlYW0tPnR5cGUgIT0gVVZfTkFNRURfUElQRSB8fCAhKCh1dl9waXBlX3QqKXN0cmVhbSktPmlwYykKQEAgLTE1NTcsNyArMTU2Miw3IEBACiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKIAogICBpZiAoIShzdHJlYW0tPmZsYWdzICYgVVZfSEFORExFX1JFQURBQkxFKSkKLSAgICByZXR1cm4gLUVOT1RDT05OOworICAgIHJldHVybiBVVl9FTk9UQ09OTjsKIAogICAvKiBUaGUgVVZfSEFORExFX1JFQURJTkcgZmxhZyBpcyBpcnJlbGV2YW50IG9mIHRoZSBzdGF0ZSBvZiB0aGUgdGNwIC0gaXQganVzdAogICAgKiBleHByZXNzZXMgdGhlIGRlc2lyZWQgc3RhdGUgb2YgdGhlIHVzZXIuCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9zdW5vcy5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvc3Vub3MuYwppbmRleCAwY2QyNWMxLi45Njk3NjQ4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC9zdW5vcy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3N1bm9zLmMKQEAgLTcwMCwxNiArNzAwLDYgQEAKIH0KIAogCi12b2lkIHV2X2ZyZWVfY3B1X2luZm8odXZfY3B1X2luZm9fdCogY3B1X2luZm9zLCBpbnQgY291bnQpIHsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOwotICB9Ci0KLSAgdXZfX2ZyZWUoY3B1X2luZm9zKTsKLX0KLQogI2lmZGVmIFNVTk9TX05PX0lGQUREUlMKIGludCB1dl9pbnRlcmZhY2VfYWRkcmVzc2VzKHV2X2ludGVyZmFjZV9hZGRyZXNzX3QqKiBhZGRyZXNzZXMsIGludCogY291bnQpIHsKICAgKmNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3RjcC5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdGNwLmMKaW5kZXggOGNlZGNkNi4uZDQ3ZTk0MyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdGNwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdGNwLmMKQEAgLTMwOCw2ICszMDgsMjMgQEAKIH0KIAogCitpbnQgdXZfdGNwX2Nsb3NlX3Jlc2V0KHV2X3RjcF90KiBoYW5kbGUsIHV2X2Nsb3NlX2NiIGNsb3NlX2NiKSB7CisgIGludCBmZDsKKyAgc3RydWN0IGxpbmdlciBsID0geyAxLCAwIH07CisKKyAgLyogRGlzYWxsb3cgc2V0dGluZyBTT19MSU5HRVIgdG8gemVybyBkdWUgdG8gc29tZSBwbGF0Zm9ybSBpbmNvbnNpc3RlbmNpZXMgKi8KKyAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfU0hVVFRJTkcpCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKworICBmZCA9IHV2X19zdHJlYW1fZmQoaGFuZGxlKTsKKyAgaWYgKDAgIT0gc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fTElOR0VSLCAmbCwgc2l6ZW9mKGwpKSkKKyAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisKKyAgdXZfY2xvc2UoKHV2X2hhbmRsZV90KikgaGFuZGxlLCBjbG9zZV9jYik7CisgIHJldHVybiAwOworfQorCisKIGludCB1dl90Y3BfbGlzdGVuKHV2X3RjcF90KiB0Y3AsIGludCBiYWNrbG9nLCB1dl9jb25uZWN0aW9uX2NiIGNiKSB7CiAgIHN0YXRpYyBpbnQgc2luZ2xlX2FjY2VwdCA9IC0xOwogICB1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzYyLDggKzM3OSwxNiBAQAogICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKIAogI2lmZGVmIFRDUF9LRUVQSURMRQotICBpZiAob24gJiYgc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9LRUVQSURMRSwgJmRlbGF5LCBzaXplb2YoZGVsYXkpKSkKLSAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisgIGlmIChvbikgeworICAgIGludCBpbnR2bCA9IDE7ICAvKiAgMSBzZWNvbmQ7IHNhbWUgYXMgZGVmYXVsdCBvbiBXaW4zMiAqLworICAgIGludCBjbnQgPSAxMDsgIC8qIDEwIHJldHJpZXM7IHNhbWUgYXMgaGFyZGNvZGVkIG9uIFdpbjMyICovCisgICAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfS0VFUElETEUsICZkZWxheSwgc2l6ZW9mKGRlbGF5KSkpCisgICAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisgICAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfS0VFUElOVFZMLCAmaW50dmwsIHNpemVvZihpbnR2bCkpKQorICAgICAgcmV0dXJuIFVWX19FUlIoZXJybm8pOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX0tFRVBDTlQsICZjbnQsIHNpemVvZihjbnQpKSkKKyAgICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKyAgfQogI2VuZGlmCiAKICAgLyogU29sYXJpcy9TbWFydE9TLCBpZiB5b3UgZG9uJ3Qgc3VwcG9ydCBrZWVwLWFsaXZlLApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdGhyZWFkLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC90aHJlYWQuYwppbmRleCAwNDUzMjIxLi5mOTNhYTUzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC90aHJlYWQuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC90aHJlYWQuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPHN5cy9zZW0uaD4KICNlbmRpZgogCi0jaWZkZWYgX19HTElCQ19fCisjaWYgZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCiAjaW5jbHVkZSA8Z251L2xpYmMtdmVyc2lvbi5oPiAgLyogZ251X2dldF9saWJjX3ZlcnNpb24oKSAqLwogI2VuZGlmCiAKQEAgLTIyMiw2ICsyMjIsMTIgQEAKICAgc2l6ZV90IHBhZ2VzaXplOwogICBzaXplX3Qgc3RhY2tfc2l6ZTsKIAorICAvKiBVc2VkIHRvIHNxdWVsY2ggYSAtV2Nhc3QtZnVuY3Rpb24tdHlwZSB3YXJuaW5nLiAqLworICB1bmlvbiB7CisgICAgdm9pZCAoKmluKSh2b2lkKik7CisgICAgdm9pZCogKCpvdXQpKHZvaWQqKTsKKyAgfSBmOworCiAgIHN0YWNrX3NpemUgPQogICAgICAgcGFyYW1zLT5mbGFncyAmIFVWX1RIUkVBRF9IQVNfU1RBQ0tfU0laRSA/IHBhcmFtcy0+c3RhY2tfc2l6ZSA6IDA7CiAKQEAgLTI0OCw3ICsyNTQsOCBAQAogICAgICAgYWJvcnQoKTsKICAgfQogCi0gIGVyciA9IHB0aHJlYWRfY3JlYXRlKHRpZCwgYXR0ciwgKHZvaWQqKCopKHZvaWQqKSkgZW50cnksIGFyZyk7CisgIGYuaW4gPSBlbnRyeTsKKyAgZXJyID0gcHRocmVhZF9jcmVhdGUodGlkLCBhdHRyLCBmLm91dCwgYXJnKTsKIAogICBpZiAoYXR0ciAhPSBOVUxMKQogICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KGF0dHIpOwpAQCAtNDc0LDcgKzQ4MSw3IEBACiAKICNlbHNlIC8qICEoZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19NQUNIX18pKSAqLwogCi0jaWZkZWYgX19HTElCQ19fCisjaWYgZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCiAKIC8qIEhhY2sgYXJvdW5kIGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTEyNjc0CiAgKiBieSBwcm92aWRpbmcgYSBjdXN0b20gaW1wbGVtZW50YXRpb24gZm9yIGdsaWJjIDwgMi4yMSBpbiB0ZXJtcyBvZiBvdGhlcgpAQCAtNTEwLDcgKzUxNyw4IEBACiAgIHVuc2lnbmVkIGludCB2YWx1ZTsKIH0gdXZfc2VtYXBob3JlX3Q7CiAKLSNpZiBkZWZpbmVkKF9fR0xJQkNfXykgfHwgcGxhdGZvcm1fbmVlZHNfY3VzdG9tX3NlbWFwaG9yZQorI2lmIChkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykpIHx8IFwKKyAgICBwbGF0Zm9ybV9uZWVkc19jdXN0b21fc2VtYXBob3JlCiBTVEFUSUNfQVNTRVJUKHNpemVvZih1dl9zZW1fdCkgPj0gc2l6ZW9mKHV2X3NlbWFwaG9yZV90KikpOwogI2VuZGlmCiAKQEAgLTYzOSw3ICs2NDcsNyBAQAogfQogCiBpbnQgdXZfc2VtX2luaXQodXZfc2VtX3QqIHNlbSwgdW5zaWduZWQgaW50IHZhbHVlKSB7Ci0jaWZkZWYgX19HTElCQ19fCisjaWYgZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCiAgIHV2X29uY2UoJmdsaWJjX3ZlcnNpb25fY2hlY2tfb25jZSwgZ2xpYmNfdmVyc2lvbl9jaGVjayk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3VuaXgvdHR5LmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC90dHkuYwppbmRleCBkYjQ3OWQ2Li44MmNkNzIzIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC90dHkuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC90dHkuYwpAQCAtMzQsNiArMzQsMzQgQEAKICNkZWZpbmUgSU1BWEJFTCAwCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19QQVNFX18pCisvKiBPbiBJQk0gaSBQQVNFLCBmb3IgYmV0dGVyIGNvbXBhdGliaWxpdHkgd2l0aCBydW5uaW5nIGludGVyYWN0aXZlIHByb2dyYW1zIGluCisgKiBhIDUyNTAgZW52aXJvbm1lbnQsIGlzYXR0eSgpIHdpbGwgcmV0dXJuIHRydWUgZm9yIHRoZSBzdGRpbi9zdGRvdXQvc3RkZXJyCisgKiBzdHJlYW1zIGNyZWF0ZWQgYnkgUVNIL1FQMlRFUk0uCisgKgorICogRm9yIG1vcmUsIHNlZSBkb2NzIG9uIFBBU0VfU1RESU9fSVNBVFRZIGluCisgKiBodHRwczovL3d3dy5pYm0uY29tL3N1cHBvcnQva25vd2xlZGdlY2VudGVyL3Nzd19pYm1faV83NC9hcGlzL3Bhc2VfZW52aXJvbi5odG0KKyAqCisgKiBUaGlzIGJlaGF2aW9yIGNhdXNlcyBwcm9ibGVtcyBmb3IgTm9kZSBhcyBpdCBleHBlY3RzIHRoYXQgaWYgaXNhdHR5KCkgcmV0dXJucworICogdHJ1ZSB0aGF0IFRUWSBpb2N0bHMgd2lsbCBiZSBzdXBwb3J0ZWQgYnkgdGhhdCBmZCAod2hpY2ggaXMgbm90IGFuCisgKiB1bnJlYXNvbmFibGUgZXhwZWN0YXRpb24pIGFuZCB3aGVuIHRoZXkgZG9uJ3QgaXQgY3Jhc2hlcyB3aXRoIGFzc2VydGlvbgorICogZXJyb3JzLgorICoKKyAqIEhlcmUsIHdlIGNyZWF0ZSBvdXIgb3duIHZlcnNpb24gb2YgaXNhdHR5KCkgdGhhdCB1c2VzIGlvY3RsKCkgdG8gaWRlbnRpZnkKKyAqIHdoZXRoZXIgdGhlIGZkIGlzICpyZWFsbHkqIGEgVFRZIG9yIG5vdC4KKyAqLworc3RhdGljIGludCBpc3JlYWxseWF0dHkoaW50IGZpbGUpIHsKKyAgaW50IHJjOworIAorICByYyA9ICFpb2N0bChmaWxlLCBUWElTQVRUWSArIDB4ODEsIE5VTEwpOworICBpZiAoIXJjICYmIGVycm5vICE9IEVCQURGKQorICAgICAgZXJybm8gPSBFTk9UVFk7CisKKyAgcmV0dXJuIHJjOworfQorI2RlZmluZSBpc2F0dHkoZmQpIGlzcmVhbGx5YXR0eShmZCkKKyNlbmRpZgorCiBzdGF0aWMgaW50IG9yaWdfdGVybWlvc19mZCA9IC0xOwogc3RhdGljIHN0cnVjdCB0ZXJtaW9zIG9yaWdfdGVybWlvczsKIHN0YXRpYyB1dl9zcGlubG9ja190IHRlcm1pb3Nfc3BpbmxvY2sgPSBVVl9TUElOTE9DS19JTklUSUFMSVpFUjsKQEAgLTEzNiw3ICsxNjQsNyBAQAogICAgICAqIHNsYXZlIGRldmljZS4KICAgICAgKi8KICAgICBpZiAodXZfX3R0eV9pc19zbGF2ZShmZCkgJiYgdHR5bmFtZV9yKGZkLCBwYXRoLCBzaXplb2YocGF0aCkpID09IDApCi0gICAgICByID0gdXZfX29wZW5fY2xvZXhlYyhwYXRoLCBtb2RlKTsKKyAgICAgIHIgPSB1dl9fb3Blbl9jbG9leGVjKHBhdGgsIG1vZGUgfCBPX05PQ1RUWSk7CiAgICAgZWxzZQogICAgICAgciA9IC0xOwogCkBAIC0zNjIsMyArMzkwLDEwIEBACiAKICAgcmV0dXJuIGVycjsKIH0KKwordm9pZCB1dl90dHlfc2V0X3Z0ZXJtX3N0YXRlKHV2X3R0eV92dGVybXN0YXRlX3Qgc3RhdGUpIHsKK30KKworaW50IHV2X3R0eV9nZXRfdnRlcm1fc3RhdGUodXZfdHR5X3Z0ZXJtc3RhdGVfdCogc3RhdGUpIHsKKyAgcmV0dXJuIFVWX0VOT1RTVVA7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peC91ZHAuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3VkcC5jCmluZGV4IGI1NzhlN2IuLjIxYjkyMmYgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3VkcC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4L3VkcC5jCkBAIC0zMiw2ICszMiw4IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdW4uaD4KIAorI2RlZmluZSBVVl9fVURQX0RHUkFNX01BWFNJWkUgKDY0ICogMTAyNCkKKwogI2lmIGRlZmluZWQoSVBWNl9KT0lOX0dST1VQKSAmJiAhZGVmaW5lZChJUFY2X0FERF9NRU1CRVJTSElQKQogIyBkZWZpbmUgSVBWNl9BRERfTUVNQkVSU0hJUCBJUFY2X0pPSU5fR1JPVVAKICNlbmRpZgpAQCAtNDksNiArNTEsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCisjaWYgSEFWRV9NTVNHCisKKyNkZWZpbmUgVVZfX01NU0dfTUFYV0lEVEggMjAKKworc3RhdGljIGludCB1dl9fdWRwX3JlY3ZtbXNnKHV2X3VkcF90KiBoYW5kbGUsIHV2X2J1Zl90KiBidWYpOworc3RhdGljIHZvaWQgdXZfX3VkcF9zZW5kbW1zZyh1dl91ZHBfdCogaGFuZGxlKTsKKworc3RhdGljIGludCB1dl9fcmVjdm1tc2dfYXZhaWw7CitzdGF0aWMgaW50IHV2X19zZW5kbW1zZ19hdmFpbDsKK3N0YXRpYyB1dl9vbmNlX3Qgb25jZSA9IFVWX09OQ0VfSU5JVDsKKworc3RhdGljIHZvaWQgdXZfX3VkcF9tbXNnX2luaXQodm9pZCkgeworICBpbnQgcmV0OworICBpbnQgczsKKyAgcyA9IHV2X19zb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgIGlmIChzIDwgMCkKKyAgICByZXR1cm47CisgIHJldCA9IHV2X19zZW5kbW1zZyhzLCBOVUxMLCAwLCAwKTsKKyAgaWYgKHJldCA9PSAwIHx8IGVycm5vICE9IEVOT1NZUykgeworICAgIHV2X19zZW5kbW1zZ19hdmFpbCA9IDE7CisgICAgdXZfX3JlY3ZtbXNnX2F2YWlsID0gMTsKKyAgfSBlbHNlIHsKKyAgICByZXQgPSB1dl9fcmVjdm1tc2cocywgTlVMTCwgMCwgMCwgTlVMTCk7CisgICAgaWYgKHJldCA9PSAwIHx8IGVycm5vICE9IEVOT1NZUykKKyAgICAgIHV2X19yZWN2bW1zZ19hdmFpbCA9IDE7CisgIH0KKyAgdXZfX2Nsb3NlKHMpOworfQorCisjZW5kaWYKIAogdm9pZCB1dl9fdWRwX2Nsb3NlKHV2X3VkcF90KiBoYW5kbGUpIHsKICAgdXZfX2lvX2Nsb3NlKGhhbmRsZS0+bG9vcCwgJmhhbmRsZS0+aW9fd2F0Y2hlcik7CkBAIC0xNDgsNiArMTgwLDY0IEBACiAgIH0KIH0KIAorI2lmIEhBVkVfTU1TRworc3RhdGljIGludCB1dl9fdWRwX3JlY3ZtbXNnKHV2X3VkcF90KiBoYW5kbGUsIHV2X2J1Zl90KiBidWYpIHsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBwZWVyc1tVVl9fTU1TR19NQVhXSURUSF07CisgIHN0cnVjdCBpb3ZlYyBpb3ZbVVZfX01NU0dfTUFYV0lEVEhdOworICBzdHJ1Y3QgdXZfX21tc2doZHIgbXNnc1tVVl9fTU1TR19NQVhXSURUSF07CisgIHNzaXplX3QgbnJlYWQ7CisgIHV2X2J1Zl90IGNodW5rX2J1ZjsKKyAgc2l6ZV90IGNodW5rczsKKyAgaW50IGZsYWdzOworICBzaXplX3QgazsKKworICAvKiBwcmVwYXJlIHN0cnVjdHVyZXMgZm9yIHJlY3ZtbXNnICovCisgIGNodW5rcyA9IGJ1Zi0+bGVuIC8gVVZfX1VEUF9ER1JBTV9NQVhTSVpFOworICBpZiAoY2h1bmtzID4gQVJSQVlfU0laRShpb3YpKQorICAgIGNodW5rcyA9IEFSUkFZX1NJWkUoaW92KTsKKyAgZm9yIChrID0gMDsgayA8IGNodW5rczsgKytrKSB7CisgICAgaW92W2tdLmlvdl9iYXNlID0gYnVmLT5iYXNlICsgayAqIFVWX19VRFBfREdSQU1fTUFYU0laRTsKKyAgICBpb3Zba10uaW92X2xlbiA9IFVWX19VRFBfREdSQU1fTUFYU0laRTsKKyAgICBtc2dzW2tdLm1zZ19oZHIubXNnX2lvdiA9IGlvdiArIGs7CisgICAgbXNnc1trXS5tc2dfaGRyLm1zZ19pb3ZsZW4gPSAxOworICAgIG1zZ3Nba10ubXNnX2hkci5tc2dfbmFtZSA9IHBlZXJzICsgazsKKyAgICBtc2dzW2tdLm1zZ19oZHIubXNnX25hbWVsZW4gPSBzaXplb2YocGVlcnNbMF0pOworICAgIG1zZ3Nba10ubXNnX2hkci5tc2dfY29udHJvbCA9IE5VTEw7CisgICAgbXNnc1trXS5tc2dfaGRyLm1zZ19jb250cm9sbGVuID0gMDsKKyAgICBtc2dzW2tdLm1zZ19oZHIubXNnX2ZsYWdzID0gMDsKKyAgfQorCisgIGRvCisgICAgbnJlYWQgPSB1dl9fcmVjdm1tc2coaGFuZGxlLT5pb193YXRjaGVyLmZkLCBtc2dzLCBjaHVua3MsIDAsIE5VTEwpOworICB3aGlsZSAobnJlYWQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisgIGlmIChucmVhZCA8IDEpIHsKKyAgICBpZiAobnJlYWQgPT0gMCB8fCBlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRVdPVUxEQkxPQ0spCisgICAgICBoYW5kbGUtPnJlY3ZfY2IoaGFuZGxlLCAwLCBidWYsIE5VTEwsIDApOworICAgIGVsc2UKKyAgICAgIGhhbmRsZS0+cmVjdl9jYihoYW5kbGUsIFVWX19FUlIoZXJybm8pLCBidWYsIE5VTEwsIDApOworICB9IGVsc2UgeworICAgIC8qIHBhc3MgZWFjaCBjaHVuayB0byB0aGUgYXBwbGljYXRpb24gKi8KKyAgICBmb3IgKGsgPSAwOyBrIDwgKHNpemVfdCkgbnJlYWQgJiYgaGFuZGxlLT5yZWN2X2NiICE9IE5VTEw7IGsrKykgeworICAgICAgZmxhZ3MgPSBVVl9VRFBfTU1TR19DSFVOSzsKKyAgICAgIGlmIChtc2dzW2tdLm1zZ19oZHIubXNnX2ZsYWdzICYgTVNHX1RSVU5DKQorICAgICAgICBmbGFncyB8PSBVVl9VRFBfUEFSVElBTDsKKworICAgICAgY2h1bmtfYnVmID0gdXZfYnVmX2luaXQoaW92W2tdLmlvdl9iYXNlLCBpb3Zba10uaW92X2xlbik7CisgICAgICBoYW5kbGUtPnJlY3ZfY2IoaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgIG1zZ3Nba10ubXNnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAmY2h1bmtfYnVmLAorICAgICAgICAgICAgICAgICAgICAgIG1zZ3Nba10ubXNnX2hkci5tc2dfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisgICAgfQorCisgICAgLyogb25lIGxhc3QgY2FsbGJhY2sgc28gdGhlIG9yaWdpbmFsIGJ1ZmZlciBpcyBmcmVlZCAqLworICAgIGlmIChoYW5kbGUtPnJlY3ZfY2IgIT0gTlVMTCkKKyAgICAgIGhhbmRsZS0+cmVjdl9jYihoYW5kbGUsIDAsIGJ1ZiwgTlVMTCwgMCk7CisgIH0KKyAgcmV0dXJuIG5yZWFkOworfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHV2X191ZHBfcmVjdm1zZyh1dl91ZHBfdCogaGFuZGxlKSB7CiAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHBlZXI7CkBAIC0xNjUsMTggKzI1NSwzMCBAQAogICAgKi8KICAgY291bnQgPSAzMjsKIAotICBtZW1zZXQoJmgsIDAsIHNpemVvZihoKSk7Ci0gIGgubXNnX25hbWUgPSAmcGVlcjsKLQogICBkbyB7CiAgICAgYnVmID0gdXZfYnVmX2luaXQoTlVMTCwgMCk7Ci0gICAgaGFuZGxlLT5hbGxvY19jYigodXZfaGFuZGxlX3QqKSBoYW5kbGUsIDY0ICogMTAyNCwgJmJ1Zik7CisgICAgaGFuZGxlLT5hbGxvY19jYigodXZfaGFuZGxlX3QqKSBoYW5kbGUsIFVWX19VRFBfREdSQU1fTUFYU0laRSwgJmJ1Zik7CiAgICAgaWYgKGJ1Zi5iYXNlID09IE5VTEwgfHwgYnVmLmxlbiA9PSAwKSB7CiAgICAgICBoYW5kbGUtPnJlY3ZfY2IoaGFuZGxlLCBVVl9FTk9CVUZTLCAmYnVmLCBOVUxMLCAwKTsKICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXNzZXJ0KGJ1Zi5iYXNlICE9IE5VTEwpOwogCisjaWYgSEFWRV9NTVNHCisgICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfVURQX1JFQ1ZNTVNHKSB7CisgICAgICB1dl9vbmNlKCZvbmNlLCB1dl9fdWRwX21tc2dfaW5pdCk7CisgICAgICBpZiAodXZfX3JlY3ZtbXNnX2F2YWlsKSB7CisgICAgICAgIG5yZWFkID0gdXZfX3VkcF9yZWN2bW1zZyhoYW5kbGUsICZidWYpOworICAgICAgICBpZiAobnJlYWQgPiAwKQorICAgICAgICAgIGNvdW50IC09IG5yZWFkOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIG1lbXNldCgmaCwgMCwgc2l6ZW9mKGgpKTsKKyAgICBtZW1zZXQoJnBlZXIsIDAsIHNpemVvZihwZWVyKSk7CisgICAgaC5tc2dfbmFtZSA9ICZwZWVyOwogICAgIGgubXNnX25hbWVsZW4gPSBzaXplb2YocGVlcik7CiAgICAgaC5tc2dfaW92ID0gKHZvaWQqKSAmYnVmOwogICAgIGgubXNnX2lvdmxlbiA9IDE7CkBAIC0xOTMsMzMgKzI5NSwxMjYgQEAKICAgICAgICAgaGFuZGxlLT5yZWN2X2NiKGhhbmRsZSwgVVZfX0VSUihlcnJubyksICZidWYsIE5VTEwsIDApOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcjsKLSAgICAgIGlmIChoLm1zZ19uYW1lbGVuID09IDApCi0gICAgICAgIGFkZHIgPSBOVUxMOwotICAgICAgZWxzZQotICAgICAgICBhZGRyID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopICZwZWVyOwotCiAgICAgICBmbGFncyA9IDA7CiAgICAgICBpZiAoaC5tc2dfZmxhZ3MgJiBNU0dfVFJVTkMpCiAgICAgICAgIGZsYWdzIHw9IFVWX1VEUF9QQVJUSUFMOwogCi0gICAgICBoYW5kbGUtPnJlY3ZfY2IoaGFuZGxlLCBucmVhZCwgJmJ1ZiwgYWRkciwgZmxhZ3MpOworICAgICAgaGFuZGxlLT5yZWN2X2NiKGhhbmRsZSwgbnJlYWQsICZidWYsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSAmcGVlciwgZmxhZ3MpOwogICAgIH0KKyAgICBjb3VudC0tOwogICB9CiAgIC8qIHJlY3ZfY2IgY2FsbGJhY2sgbWF5IGRlY2lkZSB0byBwYXVzZSBvciBjbG9zZSB0aGUgaGFuZGxlICovCiAgIHdoaWxlIChucmVhZCAhPSAtMQotICAgICAgJiYgY291bnQtLSA+IDAKKyAgICAgICYmIGNvdW50ID4gMAogICAgICAgJiYgaGFuZGxlLT5pb193YXRjaGVyLmZkICE9IC0xCiAgICAgICAmJiBoYW5kbGUtPnJlY3ZfY2IgIT0gTlVMTCk7CiB9CiAKKyNpZiBIQVZFX01NU0cKK3N0YXRpYyB2b2lkIHV2X191ZHBfc2VuZG1tc2codXZfdWRwX3QqIGhhbmRsZSkgeworICB1dl91ZHBfc2VuZF90KiByZXE7CisgIHN0cnVjdCB1dl9fbW1zZ2hkciBoW1VWX19NTVNHX01BWFdJRFRIXTsKKyAgc3RydWN0IHV2X19tbXNnaGRyICpwOworICBRVUVVRSogcTsKKyAgc3NpemVfdCBucGt0czsKKyAgc2l6ZV90IHBrdHM7CisgIHNpemVfdCBpOworCisgIGlmIChRVUVVRV9FTVBUWSgmaGFuZGxlLT53cml0ZV9xdWV1ZSkpCisgICAgcmV0dXJuOworCit3cml0ZV9xdWV1ZV9kcmFpbjoKKyAgZm9yIChwa3RzID0gMCwgcSA9IFFVRVVFX0hFQUQoJmhhbmRsZS0+d3JpdGVfcXVldWUpOworICAgICAgIHBrdHMgPCBVVl9fTU1TR19NQVhXSURUSCAmJiBxICE9ICZoYW5kbGUtPndyaXRlX3F1ZXVlOworICAgICAgICsrcGt0cywgcSA9IFFVRVVFX0hFQUQocSkpIHsKKyAgICBhc3NlcnQocSAhPSBOVUxMKTsKKyAgICByZXEgPSBRVUVVRV9EQVRBKHEsIHV2X3VkcF9zZW5kX3QsIHF1ZXVlKTsKKyAgICBhc3NlcnQocmVxICE9IE5VTEwpOworCisgICAgcCA9ICZoW3BrdHNdOworICAgIG1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKyAgICBpZiAocmVxLT5hZGRyLnNzX2ZhbWlseSA9PSBBRl9VTlNQRUMpIHsKKyAgICAgIHAtPm1zZ19oZHIubXNnX25hbWUgPSBOVUxMOworICAgICAgcC0+bXNnX2hkci5tc2dfbmFtZWxlbiA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIHAtPm1zZ19oZHIubXNnX25hbWUgPSAmcmVxLT5hZGRyOworICAgICAgaWYgKHJlcS0+YWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgICAgIHAtPm1zZ19oZHIubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisgICAgICBlbHNlIGlmIChyZXEtPmFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHAtPm1zZ19oZHIubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICAgIGVsc2UgaWYgKHJlcS0+YWRkci5zc19mYW1pbHkgPT0gQUZfVU5JWCkKKyAgICAgICAgcC0+bXNnX2hkci5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOworICAgICAgZWxzZSB7CisgICAgICAgIGFzc2VydCgwICYmICJ1bnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseSIpOworICAgICAgICBhYm9ydCgpOworICAgICAgfQorICAgIH0KKyAgICBoW3BrdHNdLm1zZ19oZHIubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMqKSByZXEtPmJ1ZnM7CisgICAgaFtwa3RzXS5tc2dfaGRyLm1zZ19pb3ZsZW4gPSByZXEtPm5idWZzOworICB9CisKKyAgZG8KKyAgICBucGt0cyA9IHV2X19zZW5kbW1zZyhoYW5kbGUtPmlvX3dhdGNoZXIuZmQsIGgsIHBrdHMsIDApOworICB3aGlsZSAobnBrdHMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisgIGlmIChucGt0cyA8IDEpIHsKKyAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLIHx8IGVycm5vID09IEVOT0JVRlMpCisgICAgICByZXR1cm47CisgICAgZm9yIChpID0gMCwgcSA9IFFVRVVFX0hFQUQoJmhhbmRsZS0+d3JpdGVfcXVldWUpOworICAgICAgICAgaSA8IHBrdHMgJiYgcSAhPSAmaGFuZGxlLT53cml0ZV9xdWV1ZTsKKyAgICAgICAgICsraSwgcSA9IFFVRVVFX0hFQUQocSkpIHsKKyAgICAgIGFzc2VydChxICE9IE5VTEwpOworICAgICAgcmVxID0gUVVFVUVfREFUQShxLCB1dl91ZHBfc2VuZF90LCBxdWV1ZSk7CisgICAgICBhc3NlcnQocmVxICE9IE5VTEwpOworCisgICAgICByZXEtPnN0YXR1cyA9IFVWX19FUlIoZXJybm8pOworICAgICAgUVVFVUVfUkVNT1ZFKCZyZXEtPnF1ZXVlKTsKKyAgICAgIFFVRVVFX0lOU0VSVF9UQUlMKCZoYW5kbGUtPndyaXRlX2NvbXBsZXRlZF9xdWV1ZSwgJnJlcS0+cXVldWUpOworICAgIH0KKyAgICB1dl9faW9fZmVlZChoYW5kbGUtPmxvb3AsICZoYW5kbGUtPmlvX3dhdGNoZXIpOworICAgIHJldHVybjsKKyAgfQorCisgIGZvciAoaSA9IDAsIHEgPSBRVUVVRV9IRUFEKCZoYW5kbGUtPndyaXRlX3F1ZXVlKTsKKyAgICAgICBpIDwgcGt0cyAmJiBxICE9ICZoYW5kbGUtPndyaXRlX3F1ZXVlOworICAgICAgICsraSwgcSA9IFFVRVVFX0hFQUQoJmhhbmRsZS0+d3JpdGVfcXVldWUpKSB7CisgICAgYXNzZXJ0KHEgIT0gTlVMTCk7CisgICAgcmVxID0gUVVFVUVfREFUQShxLCB1dl91ZHBfc2VuZF90LCBxdWV1ZSk7CisgICAgYXNzZXJ0KHJlcSAhPSBOVUxMKTsKKworICAgIHJlcS0+c3RhdHVzID0gcmVxLT5idWZzWzBdLmxlbjsKKworICAgIC8qIFNlbmRpbmcgYSBkYXRhZ3JhbSBpcyBhbiBhdG9taWMgb3BlcmF0aW9uOiBlaXRoZXIgYWxsIGRhdGEKKyAgICAgKiBpcyB3cml0dGVuIG9yIG5vdGhpbmcgaXMgKGFuZCBFTVNHU0laRSBpcyByYWlzZWQpLiBUaGF0IGlzCisgICAgICogd2h5IHdlIGRvbid0IGhhbmRsZSBwYXJ0aWFsIHdyaXRlcy4gSnVzdCBwb3AgdGhlIHJlcXVlc3QKKyAgICAgKiBvZmYgdGhlIHdyaXRlIHF1ZXVlIGFuZCBvbnRvIHRoZSBjb21wbGV0ZWQgcXVldWUsIGRvbmUuCisgICAgICovCisgICAgUVVFVUVfUkVNT1ZFKCZyZXEtPnF1ZXVlKTsKKyAgICBRVUVVRV9JTlNFUlRfVEFJTCgmaGFuZGxlLT53cml0ZV9jb21wbGV0ZWRfcXVldWUsICZyZXEtPnF1ZXVlKTsKKyAgfQorCisgIC8qIGNvdWxkbid0IGJhdGNoIGV2ZXJ5dGhpbmcsIGNvbnRpbnVlIHNlbmRpbmcgKGp1bXAgdG8gYXZvaWQgc3RhY2sgZ3Jvd3RoKSAqLworICBpZiAoIVFVRVVFX0VNUFRZKCZoYW5kbGUtPndyaXRlX3F1ZXVlKSkKKyAgICBnb3RvIHdyaXRlX3F1ZXVlX2RyYWluOworICB1dl9faW9fZmVlZChoYW5kbGUtPmxvb3AsICZoYW5kbGUtPmlvX3dhdGNoZXIpOworICByZXR1cm47Cit9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgdXZfX3VkcF9zZW5kbXNnKHV2X3VkcF90KiBoYW5kbGUpIHsKICAgdXZfdWRwX3NlbmRfdCogcmVxOwotICBRVUVVRSogcTsKICAgc3RydWN0IG1zZ2hkciBoOworICBRVUVVRSogcTsKICAgc3NpemVfdCBzaXplOwogCisjaWYgSEFWRV9NTVNHCisgIHV2X29uY2UoJm9uY2UsIHV2X191ZHBfbW1zZ19pbml0KTsKKyAgaWYgKHV2X19zZW5kbW1zZ19hdmFpbCkgeworICAgIHV2X191ZHBfc2VuZG1tc2coaGFuZGxlKTsKKyAgICByZXR1cm47CisgIH0KKyNlbmRpZgorCiAgIHdoaWxlICghUVVFVUVfRU1QVFkoJmhhbmRsZS0+d3JpdGVfcXVldWUpKSB7CiAgICAgcSA9IFFVRVVFX0hFQUQoJmhhbmRsZS0+d3JpdGVfcXVldWUpOwogICAgIGFzc2VydChxICE9IE5VTEwpOwpAQCAtMjY5LDcgKzQ2NCw2IEBACiAgIH0KIH0KIAotCiAvKiBPbiB0aGUgQlNEcywgU09fUkVVU0VQT1JUIGltcGxpZXMgU09fUkVVU0VBRERSIGJ1dCB3aXRoIHNvbWUgYWRkaXRpb25hbAogICogcmVmaW5lbWVudHMgZm9yIHByb2dyYW1zIHRoYXQgdXNlIG11bHRpY2FzdC4KICAqCkBAIC02NTksMjYgKzg1MywxMTEgQEAKIH0KIAogCi1pbnQgdXZfdWRwX2luaXRfZXgodXZfbG9vcF90KiBsb29wLCB1dl91ZHBfdCogaGFuZGxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsKLSAgaW50IGRvbWFpbjsKKyNpZiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19BTkRST0lEX18pCitzdGF0aWMgaW50IHV2X191ZHBfc2V0X3NvdXJjZV9tZW1iZXJzaGlwNCh1dl91ZHBfdCogaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luKiBtdWx0aWNhc3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luKiBzb3VyY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2X21lbWJlcnNoaXAgbWVtYmVyc2hpcCkgeworICBzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgbXJlcTsKKyAgaW50IG9wdG5hbWU7CiAgIGludCBlcnI7CisKKyAgZXJyID0gdXZfX3VkcF9tYXliZV9kZWZlcnJlZF9iaW5kKGhhbmRsZSwgQUZfSU5FVCwgVVZfVURQX1JFVVNFQUREUik7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKworICBtZW1zZXQoJm1yZXEsIDAsIHNpemVvZihtcmVxKSk7CisKKyAgaWYgKGludGVyZmFjZV9hZGRyICE9IE5VTEwpIHsKKyAgICBlcnIgPSB1dl9pbmV0X3B0b24oQUZfSU5FVCwgaW50ZXJmYWNlX2FkZHIsICZtcmVxLmltcl9pbnRlcmZhY2Uuc19hZGRyKTsKKyAgICBpZiAoZXJyKQorICAgICAgcmV0dXJuIGVycjsKKyAgfSBlbHNlIHsKKyAgICBtcmVxLmltcl9pbnRlcmZhY2Uuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgIH0KKworICBtcmVxLmltcl9tdWx0aWFkZHIuc19hZGRyID0gbXVsdGljYXN0X2FkZHItPnNpbl9hZGRyLnNfYWRkcjsKKyAgbXJlcS5pbXJfc291cmNlYWRkci5zX2FkZHIgPSBzb3VyY2VfYWRkci0+c2luX2FkZHIuc19hZGRyOworCisgIGlmIChtZW1iZXJzaGlwID09IFVWX0pPSU5fR1JPVVApCisgICAgb3B0bmFtZSA9IElQX0FERF9TT1VSQ0VfTUVNQkVSU0hJUDsKKyAgZWxzZSBpZiAobWVtYmVyc2hpcCA9PSBVVl9MRUFWRV9HUk9VUCkKKyAgICBvcHRuYW1lID0gSVBfRFJPUF9TT1VSQ0VfTUVNQkVSU0hJUDsKKyAgZWxzZQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyAgaWYgKHNldHNvY2tvcHQoaGFuZGxlLT5pb193YXRjaGVyLmZkLAorICAgICAgICAgICAgICAgICBJUFBST1RPX0lQLAorICAgICAgICAgICAgICAgICBvcHRuYW1lLAorICAgICAgICAgICAgICAgICAmbXJlcSwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKG1yZXEpKSkgeworICAgIHJldHVybiBVVl9fRVJSKGVycm5vKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdXZfX3VkcF9zZXRfc291cmNlX21lbWJlcnNoaXA2KHV2X3VkcF90KiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42KiBtdWx0aWNhc3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiogc291cmNlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9tZW1iZXJzaGlwIG1lbWJlcnNoaXApIHsKKyAgc3RydWN0IGdyb3VwX3NvdXJjZV9yZXEgbXJlcTsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyNjsKKyAgaW50IG9wdG5hbWU7CisgIGludCBlcnI7CisKKyAgZXJyID0gdXZfX3VkcF9tYXliZV9kZWZlcnJlZF9iaW5kKGhhbmRsZSwgQUZfSU5FVDYsIFVWX1VEUF9SRVVTRUFERFIpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisKKyAgbWVtc2V0KCZtcmVxLCAwLCBzaXplb2YobXJlcSkpOworCisgIGlmIChpbnRlcmZhY2VfYWRkciAhPSBOVUxMKSB7CisgICAgZXJyID0gdXZfaXA2X2FkZHIoaW50ZXJmYWNlX2FkZHIsIDAsICZhZGRyNik7CisgICAgaWYgKGVycikKKyAgICAgIHJldHVybiBlcnI7CisgICAgbXJlcS5nc3JfaW50ZXJmYWNlID0gYWRkcjYuc2luNl9zY29wZV9pZDsKKyAgfSBlbHNlIHsKKyAgICBtcmVxLmdzcl9pbnRlcmZhY2UgPSAwOworICB9CisKKyAgbWVtY3B5KCZtcmVxLmdzcl9ncm91cCwgbXVsdGljYXN0X2FkZHIsIHNpemVvZihtcmVxLmdzcl9ncm91cCkpOworICBtZW1jcHkoJm1yZXEuZ3NyX3NvdXJjZSwgc291cmNlX2FkZHIsIHNpemVvZihtcmVxLmdzcl9zb3VyY2UpKTsKKworICBpZiAobWVtYmVyc2hpcCA9PSBVVl9KT0lOX0dST1VQKQorICAgIG9wdG5hbWUgPSBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUDsKKyAgZWxzZSBpZiAobWVtYmVyc2hpcCA9PSBVVl9MRUFWRV9HUk9VUCkKKyAgICBvcHRuYW1lID0gTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQOworICBlbHNlCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKworICBpZiAoc2V0c29ja29wdChoYW5kbGUtPmlvX3dhdGNoZXIuZmQsCisgICAgICAgICAgICAgICAgIElQUFJPVE9fSVBWNiwKKyAgICAgICAgICAgICAgICAgb3B0bmFtZSwKKyAgICAgICAgICAgICAgICAgJm1yZXEsCisgICAgICAgICAgICAgICAgIHNpemVvZihtcmVxKSkpIHsKKyAgICByZXR1cm4gVVZfX0VSUihlcnJubyk7CisgIH0KKworICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisKK2ludCB1dl9fdWRwX2luaXRfZXgodXZfbG9vcF90KiBsb29wLAorICAgICAgICAgICAgICAgICAgICB1dl91ZHBfdCogaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgaW50IGRvbWFpbikgewogICBpbnQgZmQ7CiAKLSAgLyogVXNlIHRoZSBsb3dlciA4IGJpdHMgZm9yIHRoZSBkb21haW4gKi8KLSAgZG9tYWluID0gZmxhZ3MgJiAweEZGOwotICBpZiAoZG9tYWluICE9IEFGX0lORVQgJiYgZG9tYWluICE9IEFGX0lORVQ2ICYmIGRvbWFpbiAhPSBBRl9VTlNQRUMpCi0gICAgcmV0dXJuIFVWX0VJTlZBTDsKLQotICBpZiAoZmxhZ3MgJiB+MHhGRikKLSAgICByZXR1cm4gVVZfRUlOVkFMOwotCisgIGZkID0gLTE7CiAgIGlmIChkb21haW4gIT0gQUZfVU5TUEVDKSB7Ci0gICAgZXJyID0gdXZfX3NvY2tldChkb21haW4sIFNPQ0tfREdSQU0sIDApOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgcmV0dXJuIGVycjsKLSAgICBmZCA9IGVycjsKLSAgfSBlbHNlIHsKLSAgICBmZCA9IC0xOworICAgIGZkID0gdXZfX3NvY2tldChkb21haW4sIFNPQ0tfREdSQU0sIDApOworICAgIGlmIChmZCA8IDApCisgICAgICByZXR1cm4gZmQ7CiAgIH0KIAogICB1dl9faGFuZGxlX2luaXQobG9vcCwgKHV2X2hhbmRsZV90KiloYW5kbGUsIFVWX1VEUCk7CkBAIC02OTQsMTEgKzk3Myw2IEBACiB9CiAKIAotaW50IHV2X3VkcF9pbml0KHV2X2xvb3BfdCogbG9vcCwgdXZfdWRwX3QqIGhhbmRsZSkgewotICByZXR1cm4gdXZfdWRwX2luaXRfZXgobG9vcCwgaGFuZGxlLCBBRl9VTlNQRUMpOwotfQotCi0KIGludCB1dl91ZHBfb3Blbih1dl91ZHBfdCogaGFuZGxlLCB1dl9vc19zb2NrX3Qgc29jaykgewogICBpbnQgZXJyOwogCkBAIC03NDgsMTEgKzEwMjIsNjAgQEAKICAgfQogfQogCisKK2ludCB1dl91ZHBfc2V0X3NvdXJjZV9tZW1iZXJzaGlwKHV2X3VkcF90KiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtdWx0aWNhc3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc291cmNlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9tZW1iZXJzaGlwIG1lbWJlcnNoaXApIHsKKyNpZiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19BTkRST0lEX18pCisgIGludCBlcnI7CisgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIG1jYXN0X2FkZHI7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiogbWNhc3RfYWRkcjQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYqIG1jYXN0X2FkZHI2OworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcmNfYWRkcjsKKyAgc3RydWN0IHNvY2thZGRyX2luKiBzcmNfYWRkcjQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYqIHNyY19hZGRyNjsKKworICBtY2FzdF9hZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKSZtY2FzdF9hZGRyOworICBtY2FzdF9hZGRyNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42KikmbWNhc3RfYWRkcjsKKyAgc3JjX2FkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiopJnNyY19hZGRyOworICBzcmNfYWRkcjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiopJnNyY19hZGRyOworCisgIGVyciA9IHV2X2lwNF9hZGRyKG11bHRpY2FzdF9hZGRyLCAwLCBtY2FzdF9hZGRyNCk7CisgIGlmIChlcnIpIHsKKyAgICBlcnIgPSB1dl9pcDZfYWRkcihtdWx0aWNhc3RfYWRkciwgMCwgbWNhc3RfYWRkcjYpOworICAgIGlmIChlcnIpCisgICAgICByZXR1cm4gZXJyOworICAgIGVyciA9IHV2X2lwNl9hZGRyKHNvdXJjZV9hZGRyLCAwLCBzcmNfYWRkcjYpOworICAgIGlmIChlcnIpCisgICAgICByZXR1cm4gZXJyOworICAgIHJldHVybiB1dl9fdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcDYoaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNhc3RfYWRkcjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hZGRyNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcnNoaXApOworICB9CisKKyAgZXJyID0gdXZfaXA0X2FkZHIoc291cmNlX2FkZHIsIDAsIHNyY19hZGRyNCk7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKyAgcmV0dXJuIHV2X191ZHBfc2V0X3NvdXJjZV9tZW1iZXJzaGlwNChoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNhc3RfYWRkcjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FkZHI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcnNoaXApOworI2Vsc2UKKyAgcmV0dXJuIFVWX0VOT1NZUzsKKyNlbmRpZgorfQorCisKIHN0YXRpYyBpbnQgdXZfX3NldHNvY2tvcHQodXZfdWRwX3QqIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9uNCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9uNiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiB2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3Qgc2l6ZSkgewogICBpbnQgcjsKIAogICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9JUFY2KQpAQCAtODc1LDcgKzExOTgsNyBAQAogICogYW5kIHVzZSB0aGUgZ2VuZXJhbCB1dl9fc2V0c29ja29wdF9tYXliZV9jaGFyIGNhbGwgb3RoZXJ3aXNlLgogICovCiAjaWYgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCi0gICAgZGVmaW5lZChfX01WU19fKSAKKyAgICBkZWZpbmVkKF9fTVZTX18pCiAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0lQVjYpCiAgICAgcmV0dXJuIHV2X19zZXRzb2Nrb3B0KGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBfTVVMVElDQVNUX0xPT1AsCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdXYtY29tbW9uLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdXYtY29tbW9uLmMKaW5kZXggZjQ4NTNkNi4uMmZjYmUzZCAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3V2LWNvbW1vbi5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91di1jb21tb24uYwpAQCAtMTAwLDYgKzEwMCwxNyBAQAogICByZXR1cm4gTlVMTDsKIH0KIAordm9pZCogdXZfX3JlYWxsb2NmKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogbmV3cHRyOworCisgIG5ld3B0ciA9IHV2X19yZWFsbG9jKHB0ciwgc2l6ZSk7CisgIGlmIChuZXdwdHIgPT0gTlVMTCkKKyAgICBpZiAoc2l6ZSA+IDApCisgICAgICB1dl9fZnJlZShwdHIpOworCisgIHJldHVybiBuZXdwdHI7Cit9CisKIGludCB1dl9yZXBsYWNlX2FsbG9jYXRvcih1dl9tYWxsb2NfZnVuYyBtYWxsb2NfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9yZWFsbG9jX2Z1bmMgcmVhbGxvY19mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHV2X2NhbGxvY19mdW5jIGNhbGxvY19mdW5jLApAQCAtMjEyLDYgKzIyMyw5IEBACiAgIG1lbXNldChhZGRyLCAwLCBzaXplb2YoKmFkZHIpKTsKICAgYWRkci0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgIGFkZHItPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisjaWZkZWYgU0lONl9MRU4KKyAgYWRkci0+c2luX2xlbiA9IHNpemVvZigqYWRkcik7CisjZW5kaWYKICAgcmV0dXJuIHV2X2luZXRfcHRvbihBRl9JTkVULCBpcCwgJihhZGRyLT5zaW5fYWRkci5zX2FkZHIpKTsKIH0KIApAQCAtMjgwLDYgKzI5NCwzNiBAQAogfQogCiAKK2ludCB1dl91ZHBfaW5pdF9leCh1dl9sb29wX3QqIGxvb3AsIHV2X3VkcF90KiBoYW5kbGUsIHVuc2lnbmVkIGZsYWdzKSB7CisgIHVuc2lnbmVkIGV4dHJhX2ZsYWdzOworICBpbnQgZG9tYWluOworICBpbnQgcmM7CisKKyAgLyogVXNlIHRoZSBsb3dlciA4IGJpdHMgZm9yIHRoZSBkb21haW4uICovCisgIGRvbWFpbiA9IGZsYWdzICYgMHhGRjsKKyAgaWYgKGRvbWFpbiAhPSBBRl9JTkVUICYmIGRvbWFpbiAhPSBBRl9JTkVUNiAmJiBkb21haW4gIT0gQUZfVU5TUEVDKQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyAgLyogVXNlIHRoZSBoaWdoZXIgYml0cyBmb3IgZXh0cmEgZmxhZ3MuICovCisgIGV4dHJhX2ZsYWdzID0gZmxhZ3MgJiB+MHhGRjsKKyAgaWYgKGV4dHJhX2ZsYWdzICYgflVWX1VEUF9SRUNWTU1TRykKKyAgICByZXR1cm4gVVZfRUlOVkFMOworCisgIHJjID0gdXZfX3VkcF9pbml0X2V4KGxvb3AsIGhhbmRsZSwgZmxhZ3MsIGRvbWFpbik7CisKKyAgaWYgKHJjID09IDApCisgICAgaWYgKGV4dHJhX2ZsYWdzICYgVVZfVURQX1JFQ1ZNTVNHKQorICAgICAgaGFuZGxlLT5mbGFncyB8PSBVVl9IQU5ETEVfVURQX1JFQ1ZNTVNHOworCisgIHJldHVybiByYzsKK30KKworCitpbnQgdXZfdWRwX2luaXQodXZfbG9vcF90KiBsb29wLCB1dl91ZHBfdCogaGFuZGxlKSB7CisgIHJldHVybiB1dl91ZHBfaW5pdF9leChsb29wLCBoYW5kbGUsIEFGX1VOU1BFQyk7Cit9CisKKwogaW50IHV2X3VkcF9iaW5kKHV2X3VkcF90KiBoYW5kbGUsCiAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyKiBhZGRyLAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncykgewpAQCAtNzg4LDMgKzgzMiw0MCBAQAogICBpZiAobG9vcCAhPSBkZWZhdWx0X2xvb3ApCiAgICAgdXZfX2ZyZWUobG9vcCk7CiB9CisKKwordm9pZCB1dl9vc19mcmVlX2Vudmlyb24odXZfZW52X2l0ZW1fdCogZW52aXRlbXMsIGludCBjb3VudCkgeworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgIHV2X19mcmVlKGVudml0ZW1zW2ldLm5hbWUpOworICB9CisKKyAgdXZfX2ZyZWUoZW52aXRlbXMpOworfQorCisKK3ZvaWQgdXZfZnJlZV9jcHVfaW5mbyh1dl9jcHVfaW5mb190KiBjcHVfaW5mb3MsIGludCBjb3VudCkgeworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB1dl9fZnJlZShjcHVfaW5mb3NbaV0ubW9kZWwpOworCisgIHV2X19mcmVlKGNwdV9pbmZvcyk7Cit9CisKKworI2lmZGVmIF9fR05VQ19fICAvKiBBbHNvIGNvdmVycyBfX2NsYW5nX18gYW5kIF9fSU5URUxfQ09NUElMRVIuICovCitfX2F0dHJpYnV0ZV9fKChkZXN0cnVjdG9yKSkKKyNlbmRpZgordm9pZCB1dl9saWJyYXJ5X3NodXRkb3duKHZvaWQpIHsKKyAgc3RhdGljIGludCB3YXNfc2h1dGRvd247CisKKyAgaWYgKHdhc19zaHV0ZG93bikKKyAgICByZXR1cm47CisKKyAgdXZfX3Byb2Nlc3NfdGl0bGVfY2xlYW51cCgpOworICB1dl9fc2lnbmFsX2NsZWFudXAoKTsKKyAgdXZfX3RocmVhZHBvb2xfY2xlYW51cCgpOworICB3YXNfc2h1dGRvd24gPSAxOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3V2LWNvbW1vbi5oIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3V2LWNvbW1vbi5oCmluZGV4IGY3ODgxNjEuLjBiMGY1ZjggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy91di1jb21tb24uaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvdXYtY29tbW9uLmgKQEAgLTEwNCw2ICsxMDQsNyBAQAogICAvKiBPbmx5IHVzZWQgYnkgdXZfdWRwX3QgaGFuZGxlcy4gKi8KICAgVVZfSEFORExFX1VEUF9QUk9DRVNTSU5HICAgICAgICAgICAgICA9IDB4MDEwMDAwMDAsCiAgIFVWX0hBTkRMRV9VRFBfQ09OTkVDVEVEICAgICAgICAgICAgICAgPSAweDAyMDAwMDAwLAorICBVVl9IQU5ETEVfVURQX1JFQ1ZNTVNHICAgICAgICAgICAgICAgID0gMHgwNDAwMDAwMCwKIAogICAvKiBPbmx5IHVzZWQgYnkgdXZfcGlwZV90IGhhbmRsZXMuICovCiAgIFVWX0hBTkRMRV9OT05fT1ZFUkxBUFBFRF9QSVBFICAgICAgICAgPSAweDAxMDAwMDAwLApAQCAtMTM4LDYgKzEzOSwxMSBAQAogICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhZGRybGVuLAogICAgICAgICAgICAgICAgICAgIHV2X2Nvbm5lY3RfY2IgY2IpOwogCitpbnQgdXZfX3VkcF9pbml0X2V4KHV2X2xvb3BfdCogbG9vcCwKKyAgICAgICAgICAgICAgICAgICAgdXZfdWRwX3QqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIGludCBkb21haW4pOworCiBpbnQgdXZfX3VkcF9iaW5kKHV2X3VkcF90KiBoYW5kbGUsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciogYWRkciwKICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICBhZGRybGVuLApAQCAtMjAwLDYgKzIwNiwxMCBAQAogdm9pZCB1dl9fcnVuX3RpbWVycyh1dl9sb29wX3QqIGxvb3ApOwogdm9pZCB1dl9fdGltZXJfY2xvc2UodXZfdGltZXJfdCogaGFuZGxlKTsKIAordm9pZCB1dl9fcHJvY2Vzc190aXRsZV9jbGVhbnVwKHZvaWQpOwordm9pZCB1dl9fc2lnbmFsX2NsZWFudXAodm9pZCk7Cit2b2lkIHV2X190aHJlYWRwb29sX2NsZWFudXAodm9pZCk7CisKICNkZWZpbmUgdXZfX2hhc19hY3RpdmVfcmVxcyhsb29wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKChsb29wKS0+YWN0aXZlX3JlcXMuY291bnQgPiAwKQogCkBAIC0zMjIsNSArMzMyLDYgQEAKIHZvaWQqIHV2X19tYWxsb2Moc2l6ZV90IHNpemUpOwogdm9pZCB1dl9fZnJlZSh2b2lkKiBwdHIpOwogdm9pZCogdXZfX3JlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgc2l6ZSk7Cit2b2lkKiB1dl9fcmVhbGxvY2Yodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSk7CiAKICNlbmRpZiAvKiBVVl9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vY29yZS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9jb3JlLmMKaW5kZXggZTlkMGE1OC4uOTk3NGExMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9jb3JlLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9jb3JlLmMKQEAgLTMyMSw4ICszMjEsMTMgQEAKIAogICB1dl9fbG9vcHNfcmVtb3ZlKGxvb3ApOwogCi0gIC8qIGNsb3NlIHRoZSBhc3luYyBoYW5kbGUgd2l0aG91dCBuZWVkaW5nIGFuIGV4dHJhIGxvb3AgaXRlcmF0aW9uICovCi0gIGFzc2VydCghbG9vcC0+d3FfYXN5bmMuYXN5bmNfc2VudCk7CisgIC8qIENsb3NlIHRoZSBhc3luYyBoYW5kbGUgd2l0aG91dCBuZWVkaW5nIGFuIGV4dHJhIGxvb3AgaXRlcmF0aW9uLgorICAgKiBXZSBtaWdodCBoYXZlIGEgcGVuZGluZyBtZXNzYWdlLCBidXQgd2UncmUganVzdCBnb2luZyB0byBkZXN0cm95IHRoZSBJT0NQCisgICAqIHNvb24sIHNvIHdlIGNhbiBqdXN0IGRpc2NhcmQgaXQgbm93IHdpdGhvdXQgdGhlIHVzdWFsIHJpc2sgb2YgYSBnZXR0aW5nCisgICAqIGFub3RoZXIgbm90aWZpY2F0aW9uIGZyb20gR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c0V4IGFmdGVyIGNhbGxpbmcgdGhlCisgICAqIGNsb3NlX2NiICh3aGljaCB3ZSBhbHNvIHNraXAgZGVmaW5pbmcpLiBXZSdsbCBhc3NlcnQgbGF0ZXIgdGhhdCBxdWV1ZSB3YXMKKyAgICogYWN0dWFsbHkgZW1wdHkgYW5kIGFsbCByZXFzIGhhbmRsZWQuICovCisgIGxvb3AtPndxX2FzeW5jLmFzeW5jX3NlbnQgPSAwOwogICBsb29wLT53cV9hc3luYy5jbG9zZV9jYiA9IE5VTEw7CiAgIHV2X19oYW5kbGVfY2xvc2luZygmbG9vcC0+d3FfYXN5bmMpOwogICB1dl9faGFuZGxlX2Nsb3NlKCZsb29wLT53cV9hc3luYyk7CkBAIC00NDQsMTIgKzQ0OSwxMiBAQAogICB0aW1lb3V0X3RpbWUgPSBsb29wLT50aW1lICsgdGltZW91dDsKIAogICBmb3IgKHJlcGVhdCA9IDA7IDsgcmVwZWF0KyspIHsKLSAgICBzdWNjZXNzID0gR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c0V4KGxvb3AtPmlvY3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGFwcGVkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUob3ZlcmxhcHBlZHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKKyAgICBzdWNjZXNzID0gcEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNFeChsb29wLT5pb2NwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXBwZWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUob3ZlcmxhcHBlZHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKIAogICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9lcnJvci5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9lcnJvci5jCmluZGV4IDI0OTI0YmEuLjNlYzk4NGMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZXJyb3IuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2Vycm9yLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAgICBjYXNlIEVSUk9SX05PQUNDRVNTOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVWX0VBQ0NFUzsKICAgICBjYXNlIFdTQUVBQ0NFUzogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVWX0VBQ0NFUzsKICAgICBjYXNlIEVSUk9SX0VMRVZBVElPTl9SRVFVSVJFRDogICAgICAgICAgcmV0dXJuIFVWX0VBQ0NFUzsKKyAgICBjYXNlIEVSUk9SX0NBTlRfQUNDRVNTX0ZJTEU6ICAgICAgICAgICAgcmV0dXJuIFVWX0VBQ0NFUzsKICAgICBjYXNlIEVSUk9SX0FERFJFU1NfQUxSRUFEWV9BU1NPQ0lBVEVEOiAgcmV0dXJuIFVWX0VBRERSSU5VU0U7CiAgICAgY2FzZSBXU0FFQUREUklOVVNFOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVVl9FQUREUklOVVNFOwogICAgIGNhc2UgV1NBRUFERFJOT1RBVkFJTDogICAgICAgICAgICAgICAgICByZXR1cm4gVVZfRUFERFJOT1RBVkFJTDsKQEAgLTEzMiw2ICsxMzMsNyBAQAogICAgIGNhc2UgV1NBRU5PQlVGUzogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVVZfRU5PQlVGUzsKICAgICBjYXNlIEVSUk9SX0JBRF9QQVRITkFNRTogICAgICAgICAgICAgICAgcmV0dXJuIFVWX0VOT0VOVDsKICAgICBjYXNlIEVSUk9SX0RJUkVDVE9SWTogICAgICAgICAgICAgICAgICAgcmV0dXJuIFVWX0VOT0VOVDsKKyAgICBjYXNlIEVSUk9SX0VOVlZBUl9OT1RfRk9VTkQ6ICAgICAgICAgICAgcmV0dXJuIFVWX0VOT0VOVDsKICAgICBjYXNlIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EOiAgICAgICAgICAgICAgcmV0dXJuIFVWX0VOT0VOVDsKICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTkFNRTogICAgICAgICAgICAgICAgcmV0dXJuIFVWX0VOT0VOVDsKICAgICBjYXNlIEVSUk9SX0lOVkFMSURfRFJJVkU6ICAgICAgICAgICAgICAgcmV0dXJuIFVWX0VOT0VOVDsKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZnMtZXZlbnQuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZnMtZXZlbnQuYwppbmRleCBhY2Y4ZTExLi4wMTI2YzVlIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2ZzLWV2ZW50LmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9mcy1ldmVudC5jCkBAIC04Myw2ICs4Myw3IEBACiBzdGF0aWMgaW50IHV2X3NwbGl0X3BhdGgoY29uc3QgV0NIQVIqIGZpbGVuYW1lLCBXQ0hBUioqIGRpciwKICAgICBXQ0hBUioqIGZpbGUpIHsKICAgc2l6ZV90IGxlbiwgaTsKKyAgRFdPUkQgZGlyX2xlbjsKIAogICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgewogICAgIGlmIChkaXIgIT0gTlVMTCkKQEAgLTk3LDEyICs5OCwxNiBAQAogCiAgIGlmIChpID09IDApIHsKICAgICBpZiAoZGlyKSB7Ci0gICAgICAqZGlyID0gKFdDSEFSKil1dl9fbWFsbG9jKChNQVhfUEFUSCArIDEpICogc2l6ZW9mKFdDSEFSKSk7CisgICAgICBkaXJfbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoMCwgTlVMTCk7CisgICAgICBpZiAoZGlyX2xlbiA9PSAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgICAgICpkaXIgPSAoV0NIQVIqKXV2X19tYWxsb2MoZGlyX2xlbiAqIHNpemVvZihXQ0hBUikpOwogICAgICAgaWYgKCEqZGlyKSB7CiAgICAgICAgIHV2X2ZhdGFsX2Vycm9yKEVSUk9SX09VVE9GTUVNT1JZLCAidXZfX21hbGxvYyIpOwogICAgICAgfQogCi0gICAgICBpZiAoIUdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCAqZGlyKSkgeworICAgICAgaWYgKCFHZXRDdXJyZW50RGlyZWN0b3J5VyhkaXJfbGVuLCAqZGlyKSkgewogICAgICAgICB1dl9fZnJlZSgqZGlyKTsKICAgICAgICAgKmRpciA9IE5VTEw7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTE1NSw5ICsxNjAsMTEgQEAKICAgaW50IG5hbWVfc2l6ZSwgaXNfcGF0aF9kaXIsIHNpemU7CiAgIERXT1JEIGF0dHIsIGxhc3RfZXJyb3I7CiAgIFdDSEFSKiBkaXIgPSBOVUxMLCAqZGlyX3RvX3dhdGNoLCAqcGF0aHcgPSBOVUxMOwotICBXQ0hBUiBzaG9ydF9wYXRoX2J1ZmZlcltNQVhfUEFUSF07CisgIERXT1JEIHNob3J0X3BhdGhfYnVmZmVyX2xlbjsKKyAgV0NIQVIgKnNob3J0X3BhdGhfYnVmZmVyOwogICBXQ0hBUiogc2hvcnRfcGF0aCwgKmxvbmdfcGF0aDsKIAorICBzaG9ydF9wYXRoID0gTlVMTDsKICAgaWYgKHV2X19pc19hY3RpdmUoaGFuZGxlKSkKICAgICByZXR1cm4gVVZfRUlOVkFMOwogCkBAIC0yMzAsMTMgKzIzNywyMyBAQAogICAgICAqLwogCiAgICAgLyogQ29udmVydCB0byBzaG9ydCBwYXRoLiAqLworICAgIHNob3J0X3BhdGhfYnVmZmVyID0gTlVMTDsKKyAgICBzaG9ydF9wYXRoX2J1ZmZlcl9sZW4gPSBHZXRTaG9ydFBhdGhOYW1lVyhwYXRodywgTlVMTCwgMCk7CisgICAgaWYgKHNob3J0X3BhdGhfYnVmZmVyX2xlbiA9PSAwKSB7CisgICAgICBnb3RvIHNob3J0X3BhdGhfZG9uZTsKKyAgICB9CisgICAgc2hvcnRfcGF0aF9idWZmZXIgPSB1dl9fbWFsbG9jKHNob3J0X3BhdGhfYnVmZmVyX2xlbiAqIHNpemVvZihXQ0hBUikpOworICAgIGlmIChzaG9ydF9wYXRoX2J1ZmZlciA9PSBOVUxMKSB7CisgICAgICBnb3RvIHNob3J0X3BhdGhfZG9uZTsKKyAgICB9CiAgICAgaWYgKEdldFNob3J0UGF0aE5hbWVXKHBhdGh3LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9wYXRoX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShzaG9ydF9wYXRoX2J1ZmZlcikpKSB7Ci0gICAgICBzaG9ydF9wYXRoID0gc2hvcnRfcGF0aF9idWZmZXI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNob3J0X3BhdGggPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9wYXRoX2J1ZmZlcl9sZW4pID09IDApIHsKKyAgICAgIHV2X19mcmVlKHNob3J0X3BhdGhfYnVmZmVyKTsKKyAgICAgIHNob3J0X3BhdGhfYnVmZmVyID0gTlVMTDsKICAgICB9CitzaG9ydF9wYXRoX2RvbmU6CisgICAgc2hvcnRfcGF0aCA9IHNob3J0X3BhdGhfYnVmZmVyOwogCiAgICAgaWYgKHV2X3NwbGl0X3BhdGgocGF0aHcsICZkaXIsICZoYW5kbGUtPmZpbGV3KSAhPSAwKSB7CiAgICAgICBsYXN0X2Vycm9yID0gR2V0TGFzdEVycm9yKCk7CkBAIC0zNDYsNiArMzYzLDggQEAKICAgaWYgKHV2X19pc19hY3RpdmUoaGFuZGxlKSkKICAgICB1dl9faGFuZGxlX3N0b3AoaGFuZGxlKTsKIAorICB1dl9fZnJlZShzaG9ydF9wYXRoKTsKKwogICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihsYXN0X2Vycm9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9mcy1mZC1oYXNoLWlubC5oIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9mcy1mZC1oYXNoLWlubC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjAzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2ZzLWZkLWhhc2gtaW5sLmgKQEAgLTAsMCArMSwxNzggQEAKKyNpZm5kZWYgVVZfV0lOX0ZTX0ZEX0hBU0hfSU5MX0hfCisjZGVmaW5lIFVWX1dJTl9GU19GRF9IQVNIX0lOTF9IXworCisjaW5jbHVkZSAidXYuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisvKiBGaWxlcyBhcmUgb25seSBpbnNlcnRlZCBpbiB1dl9fZmRfaGFzaCB3aGVuIHRoZSBVVl9GU19PX0ZJTEVNQVAgZmxhZyBpcworICogc3BlY2lmaWVkLiBUaHVzLCB3aGVuIHV2X19mZF9oYXNoX2dldCByZXR1cm5zIHRydWUsIHRoZSBmaWxlIG1hcHBpbmcgaW4gdGhlCisgKiBpbmZvIHN0cnVjdHVyZSBzaG91bGQgYmUgdXNlZCBmb3IgcmVhZC93cml0ZSBvcGVyYXRpb25zLgorICoKKyAqIElmIHRoZSBmaWxlIGlzIGVtcHR5LCB0aGUgbWFwcGluZyBmaWVsZCB3aWxsIGJlIHNldCB0bworICogSU5WQUxJRF9IQU5ETEVfVkFMVUUuIFRoaXMgaXMgbm90IGFuIGlzc3VlIHNpbmNlIHRoZSBmaWxlIG1hcHBpbmcgbmVlZHMgdG8KKyAqIGJlIGNyZWF0ZWQgYW55d2F5IHdoZW4gdGhlIGZpbGUgc2l6ZSBjaGFuZ2VzLgorICoKKyAqIFNpbmNlIGZpbGUgZGVzY3JpcHRvcnMgYXJlIHNlcXVlbnRpYWwgaW50ZWdlcnMsIHRoZSBtb2R1bG8gb3BlcmF0b3IgaXMgdXNlZAorICogYXMgaGFzaGluZyBmdW5jdGlvbi4gRm9yIGVhY2ggYnVja2V0LCBhIHNpbmdsZSBsaW5rZWQgbGlzdCBvZiBhcnJheXMgaXMKKyAqIGtlcHQgdG8gbWluaW1pemUgYWxsb2NhdGlvbnMuIEEgc3RhdGljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGJ1ZmZlciBpcyBrZXB0CisgKiBmb3IgdGhlIGZpcnN0IGFycmF5IGluIGVhY2ggYnVja2V0LiAqLworCisKKyNkZWZpbmUgVVZfX0ZEX0hBU0hfU0laRSAyNTYKKyNkZWZpbmUgVVZfX0ZEX0hBU0hfR1JPVVBfU0laRSAxNgorCitzdHJ1Y3QgdXZfX2ZkX2luZm9fcyB7CisgIGludCBmbGFnczsKKyAgQk9PTEVBTiBpc19kaXJlY3Rvcnk7CisgIEhBTkRMRSBtYXBwaW5nOworICBMQVJHRV9JTlRFR0VSIHNpemU7CisgIExBUkdFX0lOVEVHRVIgY3VycmVudF9wb3M7Cit9OworCitzdHJ1Y3QgdXZfX2ZkX2hhc2hfZW50cnlfcyB7CisgIHV2X2ZpbGUgZmQ7CisgIHN0cnVjdCB1dl9fZmRfaW5mb19zIGluZm87Cit9OworCitzdHJ1Y3QgdXZfX2ZkX2hhc2hfZW50cnlfZ3JvdXBfcyB7CisgIHN0cnVjdCB1dl9fZmRfaGFzaF9lbnRyeV9zIGVudHJpZXNbVVZfX0ZEX0hBU0hfR1JPVVBfU0laRV07CisgIHN0cnVjdCB1dl9fZmRfaGFzaF9lbnRyeV9ncm91cF9zKiBuZXh0OworfTsKKworc3RydWN0IHV2X19mZF9oYXNoX2J1Y2tldF9zIHsKKyAgc2l6ZV90IHNpemU7CisgIHN0cnVjdCB1dl9fZmRfaGFzaF9lbnRyeV9ncm91cF9zKiBkYXRhOworfTsKKworCitzdGF0aWMgdXZfbXV0ZXhfdCB1dl9fZmRfaGFzaF9tdXRleDsKKworc3RhdGljIHN0cnVjdCB1dl9fZmRfaGFzaF9lbnRyeV9ncm91cF9zCisgIHV2X19mZF9oYXNoX2VudHJ5X2luaXRpYWxbVVZfX0ZEX0hBU0hfU0laRSAqIFVWX19GRF9IQVNIX0dST1VQX1NJWkVdOworc3RhdGljIHN0cnVjdCB1dl9fZmRfaGFzaF9idWNrZXRfcyB1dl9fZmRfaGFzaFtVVl9fRkRfSEFTSF9TSVpFXTsKKworCitJTkxJTkUgc3RhdGljIHZvaWQgdXZfX2ZkX2hhc2hfaW5pdCh2b2lkKSB7CisgIGludCBpLCBlcnI7CisKKyAgZXJyID0gdXZfbXV0ZXhfaW5pdCgmdXZfX2ZkX2hhc2hfbXV0ZXgpOworICBpZiAoZXJyKSB7CisgICAgdXZfZmF0YWxfZXJyb3IoZXJyLCAidXZfbXV0ZXhfaW5pdCIpOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodXZfX2ZkX2hhc2gpOyArK2kpIHsKKyAgICB1dl9fZmRfaGFzaFtpXS5zaXplID0gMDsKKyAgICB1dl9fZmRfaGFzaFtpXS5kYXRhID0KKyAgICAgICAgdXZfX2ZkX2hhc2hfZW50cnlfaW5pdGlhbCArIGkgKiBVVl9fRkRfSEFTSF9HUk9VUF9TSVpFOworICB9Cit9CisKKyNkZWZpbmUgRklORF9DT01NT05fVkFSSUFCTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB1bnNpZ25lZCBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHVuc2lnbmVkIGJ1Y2tldCA9IGZkICUgQVJSQVlfU0laRSh1dl9fZmRfaGFzaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgc3RydWN0IHV2X19mZF9oYXNoX2VudHJ5X3MqIGVudHJ5X3B0ciA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdHJ1Y3QgdXZfX2ZkX2hhc2hfZW50cnlfZ3JvdXBfcyogZ3JvdXBfcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN0cnVjdCB1dl9fZmRfaGFzaF9idWNrZXRfcyogYnVja2V0X3B0ciA9ICZ1dl9fZmRfaGFzaFtidWNrZXRdOworCisjZGVmaW5lIEZJTkRfSU5fR1JPVVBfUFRSKGdyb3VwX3NpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZvciAoaSA9IDA7IGkgPCBncm91cF9zaXplOyArK2kpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoZ3JvdXBfcHRyLT5lbnRyaWVzW2ldLmZkID09IGZkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW50cnlfcHRyID0gJmdyb3VwX3B0ci0+ZW50cmllc1tpXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEZJTkRfSU5fQlVDS0VUX1BUUigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNpemVfdCBmaXJzdF9ncm91cF9zaXplID0gYnVja2V0X3B0ci0+c2l6ZSAlIFVWX19GRF9IQVNIX0dST1VQX1NJWkU7ICAgICBcCisgICAgaWYgKGJ1Y2tldF9wdHItPnNpemUgIT0gMCAmJiBmaXJzdF9ncm91cF9zaXplID09IDApICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGZpcnN0X2dyb3VwX3NpemUgPSBVVl9fRkRfSEFTSF9HUk9VUF9TSVpFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdyb3VwX3B0ciA9IGJ1Y2tldF9wdHItPmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRklORF9JTl9HUk9VUF9QVFIoZmlyc3RfZ3JvdXBfc2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmb3IgKGdyb3VwX3B0ciA9IGdyb3VwX3B0ci0+bmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgZ3JvdXBfcHRyICE9IE5VTEwgJiYgZW50cnlfcHRyID09IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICBncm91cF9wdHIgPSBncm91cF9wdHItPm5leHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZJTkRfSU5fR1JPVVBfUFRSKFVWX19GRF9IQVNIX0dST1VQX1NJWkUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCitJTkxJTkUgc3RhdGljIGludCB1dl9fZmRfaGFzaF9nZXQoaW50IGZkLCBzdHJ1Y3QgdXZfX2ZkX2luZm9fcyogaW5mbykgeworICBGSU5EX0NPTU1PTl9WQVJJQUJMRVMKKworICB1dl9tdXRleF9sb2NrKCZ1dl9fZmRfaGFzaF9tdXRleCk7CisKKyAgRklORF9JTl9CVUNLRVRfUFRSKCk7CisKKyAgaWYgKGVudHJ5X3B0ciAhPSBOVUxMKSB7CisgICAgKmluZm8gPSBlbnRyeV9wdHItPmluZm87CisgIH0KKworICB1dl9tdXRleF91bmxvY2soJnV2X19mZF9oYXNoX211dGV4KTsKKyAgcmV0dXJuIGVudHJ5X3B0ciAhPSBOVUxMOworfQorCitJTkxJTkUgc3RhdGljIHZvaWQgdXZfX2ZkX2hhc2hfYWRkKGludCBmZCwgc3RydWN0IHV2X19mZF9pbmZvX3MqIGluZm8pIHsKKyAgRklORF9DT01NT05fVkFSSUFCTEVTCisKKyAgdXZfbXV0ZXhfbG9jaygmdXZfX2ZkX2hhc2hfbXV0ZXgpOworCisgIEZJTkRfSU5fQlVDS0VUX1BUUigpOworCisgIGlmIChlbnRyeV9wdHIgPT0gTlVMTCkgeworICAgIGkgPSBidWNrZXRfcHRyLT5zaXplICUgVVZfX0ZEX0hBU0hfR1JPVVBfU0laRTsKKworICAgIGlmIChidWNrZXRfcHRyLT5zaXplICE9IDAgJiYgaSA9PSAwKSB7CisgICAgICBzdHJ1Y3QgdXZfX2ZkX2hhc2hfZW50cnlfZ3JvdXBfcyogbmV3X2dyb3VwX3B0ciA9CisgICAgICAgIHV2X19tYWxsb2Moc2l6ZW9mKCpuZXdfZ3JvdXBfcHRyKSk7CisgICAgICBpZiAobmV3X2dyb3VwX3B0ciA9PSBOVUxMKSB7CisgICAgICAgIHV2X2ZhdGFsX2Vycm9yKEVSUk9SX09VVE9GTUVNT1JZLCAidXZfX21hbGxvYyIpOworICAgICAgfQorICAgICAgbmV3X2dyb3VwX3B0ci0+bmV4dCA9IGJ1Y2tldF9wdHItPmRhdGE7CisgICAgICBidWNrZXRfcHRyLT5kYXRhID0gbmV3X2dyb3VwX3B0cjsKKyAgICB9CisKKyAgICBidWNrZXRfcHRyLT5zaXplICs9IDE7CisgICAgZW50cnlfcHRyID0gJmJ1Y2tldF9wdHItPmRhdGEtPmVudHJpZXNbaV07CisgICAgZW50cnlfcHRyLT5mZCA9IGZkOworICB9CisKKyAgZW50cnlfcHRyLT5pbmZvID0gKmluZm87CisKKyAgdXZfbXV0ZXhfdW5sb2NrKCZ1dl9fZmRfaGFzaF9tdXRleCk7Cit9CisKK0lOTElORSBzdGF0aWMgaW50IHV2X19mZF9oYXNoX3JlbW92ZShpbnQgZmQsIHN0cnVjdCB1dl9fZmRfaW5mb19zKiBpbmZvKSB7CisgIEZJTkRfQ09NTU9OX1ZBUklBQkxFUworCisgIHV2X211dGV4X2xvY2soJnV2X19mZF9oYXNoX211dGV4KTsKKworICBGSU5EX0lOX0JVQ0tFVF9QVFIoKTsKKworICBpZiAoZW50cnlfcHRyICE9IE5VTEwpIHsKKyAgICAqaW5mbyA9IGVudHJ5X3B0ci0+aW5mbzsKKworICAgIGJ1Y2tldF9wdHItPnNpemUgLT0gMTsKKworICAgIGkgPSBidWNrZXRfcHRyLT5zaXplICUgVVZfX0ZEX0hBU0hfR1JPVVBfU0laRTsKKyAgICBpZiAoZW50cnlfcHRyICE9ICZidWNrZXRfcHRyLT5kYXRhLT5lbnRyaWVzW2ldKSB7CisgICAgICAqZW50cnlfcHRyID0gYnVja2V0X3B0ci0+ZGF0YS0+ZW50cmllc1tpXTsKKyAgICB9CisKKyAgICBpZiAoYnVja2V0X3B0ci0+c2l6ZSAhPSAwICYmCisgICAgICAgIGJ1Y2tldF9wdHItPnNpemUgJSBVVl9fRkRfSEFTSF9HUk9VUF9TSVpFID09IDApIHsKKyAgICAgIHN0cnVjdCB1dl9fZmRfaGFzaF9lbnRyeV9ncm91cF9zKiBvbGRfZ3JvdXBfcHRyID0gYnVja2V0X3B0ci0+ZGF0YTsKKyAgICAgIGJ1Y2tldF9wdHItPmRhdGEgPSBvbGRfZ3JvdXBfcHRyLT5uZXh0OworICAgICAgdXZfX2ZyZWUob2xkX2dyb3VwX3B0cik7CisgICAgfQorICB9CisKKyAgdXZfbXV0ZXhfdW5sb2NrKCZ1dl9fZmRfaGFzaF9tdXRleCk7CisgIHJldHVybiBlbnRyeV9wdHIgIT0gTlVMTDsKK30KKworI3VuZGVmIEZJTkRfQ09NTU9OX1ZBUklBQkxFUworI3VuZGVmIEZJTkRfSU5fR1JPVVBfUFRSCisjdW5kZWYgRklORF9JTl9CVUNLRVRfUFRSCisKKyNlbmRpZiAvKiBVVl9XSU5fRlNfRkRfSEFTSF9JTkxfSF8gKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZnMuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vZnMuYwppbmRleCA5ZTJmMDg0Li45NTc3YmMwIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2ZzLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9mcy5jCkBAIC0zNCw4ICszNCw3IEBACiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJyZXEtaW5sLmgiCiAjaW5jbHVkZSAiaGFuZGxlLWlubC5oIgotCi0jaW5jbHVkZSA8d2luY3J5cHQuaD4KKyNpbmNsdWRlICJmcy1mZC1oYXNoLWlubC5oIgogCiAKICNkZWZpbmUgVVZfRlNfRlJFRV9QQVRIUyAgICAgICAgIDB4MDAwMgpAQCAtMTI2LDYgKzEyNSw4IEBACiAjZGVmaW5lIElTX0xFVFRFUihjKSAoKChjKSA+PSBMJ2EnICYmIChjKSA8PSBMJ3onKSB8fCBcCiAgICgoYykgPj0gTCdBJyAmJiAoYykgPD0gTCdaJykpCiAKKyNkZWZpbmUgTUlOKGEsYikgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQorCiBjb25zdCBXQ0hBUiBKVU5DVElPTl9QUkVGSVhbXSA9IEwiXFw/P1xcIjsKIGNvbnN0IFdDSEFSIEpVTkNUSU9OX1BSRUZJWF9MRU4gPSA0OwogCkBAIC0xMzcsOCArMTM4LDE2IEBACiAKIHN0YXRpYyBpbnQgdXZfX2ZpbGVfc3ltbGlua191c2VybW9kZV9mbGFnID0gU1lNQk9MSUNfTElOS19GTEFHX0FMTE9XX1VOUFJJVklMRUdFRF9DUkVBVEU7CiAKK3N0YXRpYyBEV09SRCB1dl9fYWxsb2NhdGlvbl9ncmFudWxhcml0eTsKKworCiB2b2lkIHV2X2ZzX2luaXQodm9pZCkgewotICBfZm1vZGUgPSBfT19CSU5BUlk7CisgIFNZU1RFTV9JTkZPIHN5c3RlbV9pbmZvOworCisgIEdldFN5c3RlbUluZm8oJnN5c3RlbV9pbmZvKTsKKyAgdXZfX2FsbG9jYXRpb25fZ3JhbnVsYXJpdHkgPSBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eTsKKworICB1dl9fZmRfaGFzaF9pbml0KCk7CiB9CiAKIApAQCAtMjQ4LDYgKzI1Nyw3IEBACiAgIHJlcS0+bG9vcCA9IGxvb3A7CiAgIHJlcS0+ZmxhZ3MgPSAwOwogICByZXEtPmZzX3R5cGUgPSBmc190eXBlOworICByZXEtPnN5c19lcnJub18gPSAwOwogICByZXEtPnJlc3VsdCA9IDA7CiAgIHJlcS0+cHRyID0gTlVMTDsKICAgcmVxLT5wYXRoID0gTlVMTDsKQEAgLTMxMiw2ICszMjIsOCBAQAogICBXQ0hBUiogd190YXJnZXQ7CiAgIERXT1JEIHdfdGFyZ2V0X2xlbjsKICAgRFdPUkQgYnl0ZXM7CisgIHNpemVfdCBpOworICBzaXplX3QgbGVuOwogCiAgIGlmICghRGV2aWNlSW9Db250cm9sKGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgRlNDVExfR0VUX1JFUEFSU0VfUE9JTlQsCkBAIC0zOTYsNiArNDA4LDM4IEBACiAgICAgd190YXJnZXQgKz0gNDsKICAgICB3X3RhcmdldF9sZW4gLT0gNDsKIAorICB9IGVsc2UgaWYgKHJlcGFyc2VfZGF0YS0+UmVwYXJzZVRhZyA9PSBJT19SRVBBUlNFX1RBR19BUFBFWEVDTElOSykgeworICAgIC8qIFN0cmluZyAjMyBpbiB0aGUgbGlzdCBoYXMgdGhlIHRhcmdldCBmaWxlbmFtZS4gKi8KKyAgICBpZiAocmVwYXJzZV9kYXRhLT5BcHBFeGVjTGlua1JlcGFyc2VCdWZmZXIuU3RyaW5nQ291bnQgPCAzKSB7CisgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfU1lNTElOS19OT1RfU1VQUE9SVEVEKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgd190YXJnZXQgPSByZXBhcnNlX2RhdGEtPkFwcEV4ZWNMaW5rUmVwYXJzZUJ1ZmZlci5TdHJpbmdMaXN0OworICAgIC8qIFRoZSBTdHJpbmdMaXN0IGJ1ZmZlciBjb250YWlucyBhIGxpc3Qgb2Ygc3RyaW5ncyBzZXBhcmF0ZWQgYnkgIlwwIiwgICAqLworICAgIC8qIHdpdGggIlwwXDAiIHRlcm1pbmF0aW5nIHRoZSBsaXN0LiBNb3ZlIHRvIHRoZSAzcmQgc3RyaW5nIGluIHRoZSBsaXN0OiAqLworICAgIGZvciAoaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgIGxlbiA9IHdjc2xlbih3X3RhcmdldCk7CisgICAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX1NZTUxJTktfTk9UX1NVUFBPUlRFRCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgICAgIHdfdGFyZ2V0ICs9IGxlbiArIDE7CisgICAgfQorICAgIHdfdGFyZ2V0X2xlbiA9IHdjc2xlbih3X3RhcmdldCk7CisgICAgaWYgKHdfdGFyZ2V0X2xlbiA9PSAwKSB7CisgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfU1lNTElOS19OT1RfU1VQUE9SVEVEKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgLyogTWFrZSBzdXJlIGl0IGlzIGFuIGFic29sdXRlIHBhdGguICovCisgICAgaWYgKCEod190YXJnZXRfbGVuID49IDMgJiYKKyAgICAgICAgICgod190YXJnZXRbMF0gPj0gTCdhJyAmJiB3X3RhcmdldFswXSA8PSBMJ3onKSB8fAorICAgICAgICAgICh3X3RhcmdldFswXSA+PSBMJ0EnICYmIHdfdGFyZ2V0WzBdIDw9IEwnWicpKSAmJgorICAgICAgICAgd190YXJnZXRbMV0gPT0gTCc6JyAmJgorICAgICAgICAgd190YXJnZXRbMl0gPT0gTCdcXCcpKSB7CisgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfU1lNTElOS19OT1RfU1VQUE9SVEVEKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgfSBlbHNlIHsKICAgICAvKiBSZXBhcnNlIHRhZyBkb2VzIG5vdCBpbmRpY2F0ZSBhIHN5bWxpbmsuICovCiAgICAgU2V0TGFzdEVycm9yKEVSUk9SX1NZTUxJTktfTk9UX1NVUFBPUlRFRCk7CkBAIC00MTQsNiArNDU4LDI3IEBACiAgIEhBTkRMRSBmaWxlOwogICBpbnQgZmQsIGN1cnJlbnRfdW1hc2s7CiAgIGludCBmbGFncyA9IHJlcS0+ZnMuaW5mby5maWxlX2ZsYWdzOworICBzdHJ1Y3QgdXZfX2ZkX2luZm9fcyBmZF9pbmZvOworCisgIC8qIEFkanVzdCBmbGFncyB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIG1lbW9yeSBmaWxlIG1hcHBpbmcuIFNhdmUgdGhlCisgICAqIG9yaWdpbmFsIGZsYWdzIHRvIGVtdWxhdGUgdGhlIGNvcnJlY3QgYmVoYXZpb3IuICovCisgIGlmIChmbGFncyAmIFVWX0ZTX09fRklMRU1BUCkgeworICAgIGZkX2luZm8uZmxhZ3MgPSBmbGFnczsKKyAgICBmZF9pbmZvLmN1cnJlbnRfcG9zLlF1YWRQYXJ0ID0gMDsKKworICAgIGlmICgoZmxhZ3MgJiAoVVZfRlNfT19SRE9OTFkgfCBVVl9GU19PX1dST05MWSB8IFVWX0ZTX09fUkRXUikpID09CisgICAgICAgIFVWX0ZTX09fV1JPTkxZKSB7CisgICAgICAvKiBDcmVhdGVGaWxlTWFwcGluZyBhbHdheXMgbmVlZHMgcmVhZCBhY2Nlc3MgKi8KKyAgICAgIGZsYWdzID0gKGZsYWdzICYgflVWX0ZTX09fV1JPTkxZKSB8IFVWX0ZTX09fUkRXUjsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBVVl9GU19PX0FQUEVORCkgeworICAgICAgLyogQ2xlYXIgdGhlIGFwcGVuZCBmbGFnIGFuZCBlbnN1cmUgUkRSVyBtb2RlICovCisgICAgICBmbGFncyAmPSB+VVZfRlNfT19BUFBFTkQ7CisgICAgICBmbGFncyAmPSB+KFVWX0ZTX09fUkRPTkxZIHwgVVZfRlNfT19XUk9OTFkgfCBVVl9GU19PX1JEV1IpOworICAgICAgZmxhZ3MgfD0gVVZfRlNfT19SRFdSOworICAgIH0KKyAgfQogCiAgIC8qIE9idGFpbiB0aGUgYWN0aXZlIHVtYXNrLiB1bWFzaygpIG5ldmVyIGZhaWxzIGFuZCByZXR1cm5zIHRoZSBwcmV2aW91cwogICAgKiB1bWFzay4gKi8KQEAgLTQ0NCw3ICs1MDksOCBAQAogICAgKiBIZXJlIGlzIHdoZXJlIHdlIGRldmlhdGUgc2lnbmlmaWNhbnRseSBmcm9tIHdoYXQgQ1JUJ3MgX29wZW4oKQogICAgKiBkb2VzLiBXZSBpbmRpc2NyaW1pbmF0ZWx5IHVzZSBhbGwgdGhlIHNoYXJpbmcgbW9kZXMsIHRvIG1hdGNoCiAgICAqIFVOSVggc2VtYW50aWNzLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgZmlsZSBjYW4KLSAgICogYmUgZGVsZXRlZCBldmVuIHdoaWxzdCBpdCdzIG9wZW4sIGZpeGluZyBpc3N1ZSAjMTQ0OS4KKyAgICogYmUgZGVsZXRlZCBldmVuIHdoaWxzdCBpdCdzIG9wZW4sIGZpeGluZyBpc3N1ZQorICAgKiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUtdjAueC1hcmNoaXZlL2lzc3Vlcy8xNDQ5LgogICAgKiBXZSBzdGlsbCBzdXBwb3J0IGV4Y2x1c2l2ZSBzaGFyaW5nIG1vZGUsIHNpbmNlIGl0IGlzIG5lY2Vzc2FyeQogICAgKiBmb3Igb3BlbmluZyByYXcgYmxvY2sgZGV2aWNlcywgb3RoZXJ3aXNlIFdpbmRvd3Mgd2lsbCBwcmV2ZW50CiAgICAqIGFueSBhdHRlbXB0IHRvIHdyaXRlIHBhc3QgdGhlIG1hc3RlciBib290IHJlY29yZC4KQEAgLTU4MywxMSArNjQ5LDU1IEBACiAgICAgZWxzZSBpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU1VDQ0VTUykKICAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CiAgICAgZWxzZQotICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIFVWX1VOS05PV04pOworICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIChEV09SRCkgVVZfVU5LTk9XTik7CiAgICAgQ2xvc2VIYW5kbGUoZmlsZSk7CiAgICAgcmV0dXJuOwogICB9CiAKKyAgaWYgKGZsYWdzICYgVVZfRlNfT19GSUxFTUFQKSB7CisgICAgRklMRV9TVEFOREFSRF9JTkZPIGZpbGVfaW5mbzsKKyAgICBpZiAoIUdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlRXgoZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVN0YW5kYXJkSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIGZpbGVfaW5mbykpIHsKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICBDbG9zZUhhbmRsZShmaWxlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZmRfaW5mby5pc19kaXJlY3RvcnkgPSBmaWxlX2luZm8uRGlyZWN0b3J5OworCisgICAgaWYgKGZkX2luZm8uaXNfZGlyZWN0b3J5KSB7CisgICAgICBmZF9pbmZvLnNpemUuUXVhZFBhcnQgPSAwOworICAgICAgZmRfaW5mby5tYXBwaW5nID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghR2V0RmlsZVNpemVFeChmaWxlLCAmZmRfaW5mby5zaXplKSkgeworICAgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICAgICAgICBDbG9zZUhhbmRsZShmaWxlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBpZiAoZmRfaW5mby5zaXplLlF1YWRQYXJ0ID09IDApIHsKKyAgICAgICAgZmRfaW5mby5tYXBwaW5nID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgICB9IGVsc2UgeworICAgICAgICBEV09SRCBmbFByb3RlY3QgPSAoZmRfaW5mby5mbGFncyAmIChVVl9GU19PX1JET05MWSB8IFVWX0ZTX09fV1JPTkxZIHwKKyAgICAgICAgICBVVl9GU19PX1JEV1IpKSA9PSBVVl9GU19PX1JET05MWSA/IFBBR0VfUkVBRE9OTFkgOiBQQUdFX1JFQURXUklURTsKKyAgICAgICAgZmRfaW5mby5tYXBwaW5nID0gQ3JlYXRlRmlsZU1hcHBpbmcoZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxQcm90ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9pbmZvLnNpemUuSGlnaFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX2luZm8uc2l6ZS5Mb3dQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgaWYgKGZkX2luZm8ubWFwcGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICBDbG9zZUhhbmRsZShmaWxlKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICB1dl9fZmRfaGFzaF9hZGQoZmQsICZmZF9pbmZvKTsKKyAgfQorCiAgIFNFVF9SRVFfUkVTVUxUKHJlcSwgZmQpOwogICByZXR1cm47CiAKQEAgLTU5OCw5ICs3MDgsMTYgQEAKIHZvaWQgZnNfX2Nsb3NlKHV2X2ZzX3QqIHJlcSkgewogICBpbnQgZmQgPSByZXEtPmZpbGUuZmQ7CiAgIGludCByZXN1bHQ7CisgIHN0cnVjdCB1dl9fZmRfaW5mb19zIGZkX2luZm87CiAKICAgVkVSSUZZX0ZEKGZkLCByZXEpOwogCisgIGlmICh1dl9fZmRfaGFzaF9yZW1vdmUoZmQsICZmZF9pbmZvKSkgeworICAgIGlmIChmZF9pbmZvLm1hcHBpbmcgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgIENsb3NlSGFuZGxlKGZkX2luZm8ubWFwcGluZyk7CisgICAgfQorICB9CisKICAgaWYgKGZkID4gMikKICAgICByZXN1bHQgPSBfY2xvc2UoZmQpOwogICBlbHNlCkBAIC02MTgsNiArNzM1LDEyMyBAQAogfQogCiAKK0xPTkcgZnNfX2ZpbGVtYXBfZXhfZmlsdGVyKExPTkcgZXhjb2RlLCBQRVhDRVBUSU9OX1BPSU5URVJTIHBlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcGVycm9yKSB7CisgIGlmIChleGNvZGUgIT0gRVhDRVBUSU9OX0lOX1BBR0VfRVJST1IpIHsKKyAgICByZXR1cm4gRVhDRVBUSU9OX0NPTlRJTlVFX1NFQVJDSDsKKyAgfQorCisgIGFzc2VydChwZXJyb3IgIT0gTlVMTCk7CisgIGlmIChwZXAgIT0gTlVMTCAmJiBwZXAtPkV4Y2VwdGlvblJlY29yZCAhPSBOVUxMICYmCisgICAgICBwZXAtPkV4Y2VwdGlvblJlY29yZC0+TnVtYmVyUGFyYW1ldGVycyA+PSAzKSB7CisgICAgTlRTVEFUVVMgc3RhdHVzID0gKE5UU1RBVFVTKXBlcC0+RXhjZXB0aW9uUmVjb3JkLT5FeGNlcHRpb25JbmZvcm1hdGlvblszXTsKKyAgICAqcGVycm9yID0gcFJ0bE50U3RhdHVzVG9Eb3NFcnJvcihzdGF0dXMpOworICAgIGlmICgqcGVycm9yICE9IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgIHJldHVybiBFWENFUFRJT05fRVhFQ1VURV9IQU5ETEVSOworICAgIH0KKyAgfQorICAqcGVycm9yID0gVVZfVU5LTk9XTjsKKyAgcmV0dXJuIEVYQ0VQVElPTl9FWEVDVVRFX0hBTkRMRVI7Cit9CisKKwordm9pZCBmc19fcmVhZF9maWxlbWFwKHV2X2ZzX3QqIHJlcSwgc3RydWN0IHV2X19mZF9pbmZvX3MqIGZkX2luZm8pIHsKKyAgaW50IGZkID0gcmVxLT5maWxlLmZkOyAvKiBWRVJJRllfRkQgZG9uZSBpbiBmc19fcmVhZCAqLworICBpbnQgcndfZmxhZ3MgPSBmZF9pbmZvLT5mbGFncyAmCisgICAgKFVWX0ZTX09fUkRPTkxZIHwgVVZfRlNfT19XUk9OTFkgfCBVVl9GU19PX1JEV1IpOworICBzaXplX3QgcmVhZF9zaXplLCBkb25lX3JlYWQ7CisgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgTEFSR0VfSU5URUdFUiBwb3MsIGVuZF9wb3M7CisgIHNpemVfdCB2aWV3X29mZnNldDsKKyAgTEFSR0VfSU5URUdFUiB2aWV3X2Jhc2U7CisgIHZvaWQqIHZpZXc7CisKKyAgaWYgKHJ3X2ZsYWdzID09IFVWX0ZTX09fV1JPTkxZKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEVSUk9SX0FDQ0VTU19ERU5JRUQpOworICAgIHJldHVybjsKKyAgfQorICBpZiAoZmRfaW5mby0+aXNfZGlyZWN0b3J5KSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEVSUk9SX0lOVkFMSURfRlVOQ1RJT04pOworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChyZXEtPmZzLmluZm8ub2Zmc2V0ID09IC0xKSB7CisgICAgcG9zID0gZmRfaW5mby0+Y3VycmVudF9wb3M7CisgIH0gZWxzZSB7CisgICAgcG9zLlF1YWRQYXJ0ID0gcmVxLT5mcy5pbmZvLm9mZnNldDsKKyAgfQorCisgIC8qIE1ha2Ugc3VyZSB3ZSB3b250IHJlYWQgcGFzdCBFT0YuICovCisgIGlmIChwb3MuUXVhZFBhcnQgPj0gZmRfaW5mby0+c2l6ZS5RdWFkUGFydCkgeworICAgIFNFVF9SRVFfUkVTVUxUKHJlcSwgMCk7CisgICAgcmV0dXJuOworICB9CisKKyAgcmVhZF9zaXplID0gMDsKKyAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcmVxLT5mcy5pbmZvLm5idWZzOyArK2luZGV4KSB7CisgICAgcmVhZF9zaXplICs9IHJlcS0+ZnMuaW5mby5idWZzW2luZGV4XS5sZW47CisgIH0KKyAgcmVhZF9zaXplID0gKHNpemVfdCkgTUlOKChMT05HTE9ORykgcmVhZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfaW5mby0+c2l6ZS5RdWFkUGFydCAtIHBvcy5RdWFkUGFydCk7CisgIGlmIChyZWFkX3NpemUgPT0gMCkgeworICAgIFNFVF9SRVFfUkVTVUxUKHJlcSwgMCk7CisgICAgcmV0dXJuOworICB9CisKKyAgZW5kX3Bvcy5RdWFkUGFydCA9IHBvcy5RdWFkUGFydCArIHJlYWRfc2l6ZTsKKworICB2aWV3X29mZnNldCA9IHBvcy5RdWFkUGFydCAlIHV2X19hbGxvY2F0aW9uX2dyYW51bGFyaXR5OworICB2aWV3X2Jhc2UuUXVhZFBhcnQgPSBwb3MuUXVhZFBhcnQgLSB2aWV3X29mZnNldDsKKyAgdmlldyA9IE1hcFZpZXdPZkZpbGUoZmRfaW5mby0+bWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgRklMRV9NQVBfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgdmlld19iYXNlLkhpZ2hQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICB2aWV3X2Jhc2UuTG93UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgdmlld19vZmZzZXQgKyByZWFkX3NpemUpOworICBpZiAodmlldyA9PSBOVUxMKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICByZXR1cm47CisgIH0KKworICBkb25lX3JlYWQgPSAwOworICBmb3IgKGluZGV4ID0gMDsKKyAgICAgICBpbmRleCA8IHJlcS0+ZnMuaW5mby5uYnVmcyAmJiBkb25lX3JlYWQgPCByZWFkX3NpemU7CisgICAgICAgKytpbmRleCkgeworICAgIGludCBlcnIgPSAwOworICAgIHNpemVfdCB0aGlzX3JlYWRfc2l6ZSA9IE1JTihyZXEtPmZzLmluZm8uYnVmc1tpbmRleF0ubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3NpemUgLSBkb25lX3JlYWQpOworI2lmZGVmIF9NU0NfVkVSCisgICAgX190cnkgeworI2VuZGlmCisgICAgICBtZW1jcHkocmVxLT5mcy5pbmZvLmJ1ZnNbaW5kZXhdLmJhc2UsCisgICAgICAgICAgICAgKGNoYXIqKXZpZXcgKyB2aWV3X29mZnNldCArIGRvbmVfcmVhZCwKKyAgICAgICAgICAgICB0aGlzX3JlYWRfc2l6ZSk7CisjaWZkZWYgX01TQ19WRVIKKyAgICB9CisgICAgX19leGNlcHQgKGZzX19maWxlbWFwX2V4X2ZpbHRlcihHZXRFeGNlcHRpb25Db2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRFeGNlcHRpb25JbmZvcm1hdGlvbigpLCAmZXJyKSkgeworICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgICBVbm1hcFZpZXdPZkZpbGUodmlldyk7CisgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgZG9uZV9yZWFkICs9IHRoaXNfcmVhZF9zaXplOworICB9CisgIGFzc2VydChkb25lX3JlYWQgPT0gcmVhZF9zaXplKTsKKworICBpZiAoIVVubWFwVmlld09mRmlsZSh2aWV3KSkgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKHJlcS0+ZnMuaW5mby5vZmZzZXQgPT0gLTEpIHsKKyAgICBmZF9pbmZvLT5jdXJyZW50X3BvcyA9IGVuZF9wb3M7CisgICAgdXZfX2ZkX2hhc2hfYWRkKGZkLCBmZF9pbmZvKTsKKyAgfQorCisgIFNFVF9SRVFfUkVTVUxUKHJlcSwgcmVhZF9zaXplKTsKKyAgcmV0dXJuOworfQorCiB2b2lkIGZzX19yZWFkKHV2X2ZzX3QqIHJlcSkgewogICBpbnQgZmQgPSByZXEtPmZpbGUuZmQ7CiAgIGludDY0X3Qgb2Zmc2V0ID0gcmVxLT5mcy5pbmZvLm9mZnNldDsKQEAgLTYzMSw5ICs4NjUsMTUgQEAKICAgTEFSR0VfSU5URUdFUiBvcmlnaW5hbF9wb3NpdGlvbjsKICAgTEFSR0VfSU5URUdFUiB6ZXJvX29mZnNldDsKICAgaW50IHJlc3RvcmVfcG9zaXRpb247CisgIHN0cnVjdCB1dl9fZmRfaW5mb19zIGZkX2luZm87CiAKICAgVkVSSUZZX0ZEKGZkLCByZXEpOwogCisgIGlmICh1dl9fZmRfaGFzaF9nZXQoZmQsICZmZF9pbmZvKSkgeworICAgIGZzX19yZWFkX2ZpbGVtYXAocmVxLCAmZmRfaW5mbyk7CisgICAgcmV0dXJuOworICB9CisKICAgemVyb19vZmZzZXQuUXVhZFBhcnQgPSAwOwogICByZXN0b3JlX3Bvc2l0aW9uID0gMDsKICAgaGFuZGxlID0gdXZfX2dldF9vc2ZoYW5kbGUoZmQpOwpAQCAtNjkwLDYgKzkzMCwxMzEgQEAKIH0KIAogCit2b2lkIGZzX193cml0ZV9maWxlbWFwKHV2X2ZzX3QqIHJlcSwgSEFORExFIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1dl9fZmRfaW5mb19zKiBmZF9pbmZvKSB7CisgIGludCBmZCA9IHJlcS0+ZmlsZS5mZDsgLyogVkVSSUZZX0ZEIGRvbmUgaW4gZnNfX3dyaXRlICovCisgIGludCBmb3JjZV9hcHBlbmQgPSBmZF9pbmZvLT5mbGFncyAmIFVWX0ZTX09fQVBQRU5EOworICBpbnQgcndfZmxhZ3MgPSBmZF9pbmZvLT5mbGFncyAmCisgICAgKFVWX0ZTX09fUkRPTkxZIHwgVVZfRlNfT19XUk9OTFkgfCBVVl9GU19PX1JEV1IpOworICBzaXplX3Qgd3JpdGVfc2l6ZSwgZG9uZV93cml0ZTsKKyAgdW5zaWduZWQgaW50IGluZGV4OworICBMQVJHRV9JTlRFR0VSIHplcm8sIHBvcywgZW5kX3BvczsKKyAgc2l6ZV90IHZpZXdfb2Zmc2V0OworICBMQVJHRV9JTlRFR0VSIHZpZXdfYmFzZTsKKyAgdm9pZCogdmlldzsKKyAgRklMRVRJTUUgZnQ7CisKKyAgaWYgKHJ3X2ZsYWdzID09IFVWX0ZTX09fUkRPTkxZKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEVSUk9SX0FDQ0VTU19ERU5JRUQpOworICAgIHJldHVybjsKKyAgfQorICBpZiAoZmRfaW5mby0+aXNfZGlyZWN0b3J5KSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEVSUk9SX0lOVkFMSURfRlVOQ1RJT04pOworICAgIHJldHVybjsKKyAgfQorCisgIHdyaXRlX3NpemUgPSAwOworICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCByZXEtPmZzLmluZm8ubmJ1ZnM7ICsraW5kZXgpIHsKKyAgICB3cml0ZV9zaXplICs9IHJlcS0+ZnMuaW5mby5idWZzW2luZGV4XS5sZW47CisgIH0KKworICBpZiAod3JpdGVfc2l6ZSA9PSAwKSB7CisgICAgU0VUX1JFUV9SRVNVTFQocmVxLCAwKTsKKyAgICByZXR1cm47CisgIH0KKworICB6ZXJvLlF1YWRQYXJ0ID0gMDsKKyAgaWYgKGZvcmNlX2FwcGVuZCkgeworICAgIHBvcyA9IGZkX2luZm8tPnNpemU7CisgIH0gZWxzZSBpZiAocmVxLT5mcy5pbmZvLm9mZnNldCA9PSAtMSkgeworICAgIHBvcyA9IGZkX2luZm8tPmN1cnJlbnRfcG9zOworICB9IGVsc2UgeworICAgIHBvcy5RdWFkUGFydCA9IHJlcS0+ZnMuaW5mby5vZmZzZXQ7CisgIH0KKworICBlbmRfcG9zLlF1YWRQYXJ0ID0gcG9zLlF1YWRQYXJ0ICsgd3JpdGVfc2l6ZTsKKworICAvKiBSZWNyZWF0ZSB0aGUgbWFwcGluZyB0byBlbmxhcmdlIHRoZSBmaWxlIGlmIG5lZWRlZCAqLworICBpZiAoZW5kX3Bvcy5RdWFkUGFydCA+IGZkX2luZm8tPnNpemUuUXVhZFBhcnQpIHsKKyAgICBpZiAoZmRfaW5mby0+bWFwcGluZyAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgQ2xvc2VIYW5kbGUoZmRfaW5mby0+bWFwcGluZyk7CisgICAgfQorCisgICAgZmRfaW5mby0+bWFwcGluZyA9IENyZWF0ZUZpbGVNYXBwaW5nKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBR0VfUkVBRFdSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfcG9zLkhpZ2hQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfcG9zLkxvd1BhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChmZF9pbmZvLT5tYXBwaW5nID09IE5VTEwpIHsKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICBDbG9zZUhhbmRsZShmaWxlKTsKKyAgICAgIGZkX2luZm8tPm1hcHBpbmcgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICAgIGZkX2luZm8tPnNpemUuUXVhZFBhcnQgPSAwOworICAgICAgZmRfaW5mby0+Y3VycmVudF9wb3MuUXVhZFBhcnQgPSAwOworICAgICAgdXZfX2ZkX2hhc2hfYWRkKGZkLCBmZF9pbmZvKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmZF9pbmZvLT5zaXplID0gZW5kX3BvczsKKyAgICB1dl9fZmRfaGFzaF9hZGQoZmQsIGZkX2luZm8pOworICB9CisKKyAgdmlld19vZmZzZXQgPSBwb3MuUXVhZFBhcnQgJSB1dl9fYWxsb2NhdGlvbl9ncmFudWxhcml0eTsKKyAgdmlld19iYXNlLlF1YWRQYXJ0ID0gcG9zLlF1YWRQYXJ0IC0gdmlld19vZmZzZXQ7CisgIHZpZXcgPSBNYXBWaWV3T2ZGaWxlKGZkX2luZm8tPm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfTUFQX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICB2aWV3X2Jhc2UuSGlnaFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIHZpZXdfYmFzZS5Mb3dQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICB2aWV3X29mZnNldCArIHdyaXRlX3NpemUpOworICBpZiAodmlldyA9PSBOVUxMKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICByZXR1cm47CisgIH0KKworICBkb25lX3dyaXRlID0gMDsKKyAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcmVxLT5mcy5pbmZvLm5idWZzOyArK2luZGV4KSB7CisgICAgaW50IGVyciA9IDA7CisjaWZkZWYgX01TQ19WRVIKKyAgICBfX3RyeSB7CisjZW5kaWYKKyAgICAgIG1lbWNweSgoY2hhciopdmlldyArIHZpZXdfb2Zmc2V0ICsgZG9uZV93cml0ZSwKKyAgICAgICAgICAgICByZXEtPmZzLmluZm8uYnVmc1tpbmRleF0uYmFzZSwKKyAgICAgICAgICAgICByZXEtPmZzLmluZm8uYnVmc1tpbmRleF0ubGVuKTsKKyNpZmRlZiBfTVNDX1ZFUgorICAgIH0KKyAgICBfX2V4Y2VwdCAoZnNfX2ZpbGVtYXBfZXhfZmlsdGVyKEdldEV4Y2VwdGlvbkNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEV4Y2VwdGlvbkluZm9ybWF0aW9uKCksICZlcnIpKSB7CisgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICAgIFVubWFwVmlld09mRmlsZSh2aWV3KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBkb25lX3dyaXRlICs9IHJlcS0+ZnMuaW5mby5idWZzW2luZGV4XS5sZW47CisgIH0KKyAgYXNzZXJ0KGRvbmVfd3JpdGUgPT0gd3JpdGVfc2l6ZSk7CisKKyAgaWYgKCFGbHVzaFZpZXdPZkZpbGUodmlldywgMCkpIHsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICAgIFVubWFwVmlld09mRmlsZSh2aWV3KTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKCFVbm1hcFZpZXdPZkZpbGUodmlldykpIHsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChyZXEtPmZzLmluZm8ub2Zmc2V0ID09IC0xKSB7CisgICAgZmRfaW5mby0+Y3VycmVudF9wb3MgPSBlbmRfcG9zOworICAgIHV2X19mZF9oYXNoX2FkZChmZCwgZmRfaW5mbyk7CisgIH0KKworICBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOworICBTZXRGaWxlVGltZShmaWxlLCBOVUxMLCBOVUxMLCAmZnQpOworCisgIFNFVF9SRVFfUkVTVUxUKHJlcSwgZG9uZV93cml0ZSk7Cit9CisKIHZvaWQgZnNfX3dyaXRlKHV2X2ZzX3QqIHJlcSkgewogICBpbnQgZmQgPSByZXEtPmZpbGUuZmQ7CiAgIGludDY0X3Qgb2Zmc2V0ID0gcmVxLT5mcy5pbmZvLm9mZnNldDsKQEAgLTcwMiw2ICsxMDY3LDcgQEAKICAgTEFSR0VfSU5URUdFUiBvcmlnaW5hbF9wb3NpdGlvbjsKICAgTEFSR0VfSU5URUdFUiB6ZXJvX29mZnNldDsKICAgaW50IHJlc3RvcmVfcG9zaXRpb247CisgIHN0cnVjdCB1dl9fZmRfaW5mb19zIGZkX2luZm87CiAKICAgVkVSSUZZX0ZEKGZkLCByZXEpOwogCkBAIC03MTMsNiArMTA3OSwxMSBAQAogICAgIHJldHVybjsKICAgfQogCisgIGlmICh1dl9fZmRfaGFzaF9nZXQoZmQsICZmZF9pbmZvKSkgeworICAgIGZzX193cml0ZV9maWxlbWFwKHJlcSwgaGFuZGxlLCAmZmRfaW5mbyk7CisgICAgcmV0dXJuOworICB9CisKICAgaWYgKG9mZnNldCAhPSAtMSkgewogICAgIG1lbXNldCgmb3ZlcmxhcHBlZCwgMCwgc2l6ZW9mIG92ZXJsYXBwZWQpOwogICAgIG92ZXJsYXBwZWRfcHRyID0gJm92ZXJsYXBwZWQ7CkBAIC04NTAsMTMgKzEyMjEsMTkgQEAKIAogdm9pZCBmc19fbWtkaXIodXZfZnNfdCogcmVxKSB7CiAgIC8qIFRPRE86IHVzZSByZXEtPm1vZGUuICovCi0gIGludCByZXN1bHQgPSBfd21rZGlyKHJlcS0+ZmlsZS5wYXRodyk7Ci0gIFNFVF9SRVFfUkVTVUxUKHJlcSwgcmVzdWx0KTsKKyAgcmVxLT5yZXN1bHQgPSBfd21rZGlyKHJlcS0+ZmlsZS5wYXRodyk7CisgIGlmIChyZXEtPnJlc3VsdCA9PSAtMSkgeworICAgIHJlcS0+c3lzX2Vycm5vXyA9IF9kb3NlcnJubzsKKyAgICByZXEtPnJlc3VsdCA9IHJlcS0+c3lzX2Vycm5vXyA9PSBFUlJPUl9JTlZBTElEX05BTUUKKyAgICAgICAgICAgICAgICA/IFVWX0VJTlZBTAorICAgICAgICAgICAgICAgIDogdXZfdHJhbnNsYXRlX3N5c19lcnJvcihyZXEtPnN5c19lcnJub18pOworICB9CiB9CiAKK3R5cGVkZWYgaW50ICgqdXZfX2ZzX21rdGVtcF9mdW5jKSh1dl9mc190KiByZXEpOwogCiAvKiBPcGVuQlNEIG9yaWdpbmFsOiBsaWIvbGliYy9zdGRpby9ta3RlbXAuYyAqLwotdm9pZCBmc19fbWtkdGVtcCh1dl9mc190KiByZXEpIHsKK3ZvaWQgZnNfX21rdGVtcCh1dl9mc190KiByZXEsIHV2X19mc19ta3RlbXBfZnVuYyBmdW5jKSB7CiAgIHN0YXRpYyBjb25zdCBXQ0hBUiAqdGVtcGNoYXJzID0KICAgICBMImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5IjsKICAgc3RhdGljIGNvbnN0IHNpemVfdCBudW1fY2hhcnMgPSA2MjsKQEAgLTg2NCw5ICsxMjQxLDcgQEAKICAgV0NIQVIgKmNwLCAqZXA7CiAgIHVuc2lnbmVkIGludCB0cmllcywgaTsKICAgc2l6ZV90IGxlbjsKLSAgSENSWVBUUFJPViBoX2NyeXB0X3Byb3Y7CiAgIHVpbnQ2NF90IHY7Ci0gIEJPT0wgcmVsZWFzZWQ7CiAKICAgbGVuID0gd2NzbGVuKHJlcS0+ZmlsZS5wYXRodyk7CiAgIGVwID0gcmVxLT5maWxlLnBhdGh3ICsgbGVuOwpAQCAtODc1LDE2ICsxMjUwLDEwIEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgaWYgKCFDcnlwdEFjcXVpcmVDb250ZXh0KCZoX2NyeXB0X3Byb3YsIE5VTEwsIE5VTEwsIFBST1ZfUlNBX0ZVTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9WRVJJRllDT05URVhUKSkgewotICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KICAgdHJpZXMgPSBUTVBfTUFYOwogICBkbyB7Ci0gICAgaWYgKCFDcnlwdEdlblJhbmRvbShoX2NyeXB0X3Byb3YsIHNpemVvZih2KSwgKEJZVEUqKSAmdikpIHsKLSAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgaWYgKHV2X19yYW5kb21fcnRsZ2VucmFuZG9tKCh2b2lkICopJnYsIHNpemVvZih2KSkgPCAwKSB7CisgICAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRUlPLCBFUlJPUl9JT19ERVZJQ0UpOwogICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC04OTQsMjUgKzEyNjMsOTIgQEAKICAgICAgIHYgLz0gbnVtX2NoYXJzOwogICAgIH0KIAotICAgIGlmIChfd21rZGlyKHJlcS0+ZmlsZS5wYXRodykgPT0gMCkgewotICAgICAgbGVuID0gc3RybGVuKHJlcS0+cGF0aCk7Ci0gICAgICB3Y3N0b21icygoY2hhciopIHJlcS0+cGF0aCArIGxlbiAtIG51bV94LCBlcCAtIG51bV94LCBudW1feCk7Ci0gICAgICBTRVRfUkVRX1JFU1VMVChyZXEsIDApOwotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIGlmIChlcnJubyAhPSBFRVhJU1QpIHsKLSAgICAgIFNFVF9SRVFfUkVTVUxUKHJlcSwgLTEpOworICAgIGlmIChmdW5jKHJlcSkpIHsKKyAgICAgIGlmIChyZXEtPnJlc3VsdCA+PSAwKSB7CisgICAgICAgIGxlbiA9IHN0cmxlbihyZXEtPnBhdGgpOworICAgICAgICB3Y3N0b21icygoY2hhciopIHJlcS0+cGF0aCArIGxlbiAtIG51bV94LCBlcCAtIG51bV94LCBudW1feCk7CisgICAgICB9CiAgICAgICBicmVhazsKICAgICB9CiAgIH0gd2hpbGUgKC0tdHJpZXMpOwogCi0gIHJlbGVhc2VkID0gQ3J5cHRSZWxlYXNlQ29udGV4dChoX2NyeXB0X3Byb3YsIDApOwotICBhc3NlcnQocmVsZWFzZWQpOwogICBpZiAodHJpZXMgPT0gMCkgewogICAgIFNFVF9SRVFfUkVTVUxUKHJlcSwgLTEpOwogICB9CiB9CiAKIAorc3RhdGljIGludCBmc19fbWtkdGVtcF9mdW5jKHV2X2ZzX3QqIHJlcSkgeworICBpZiAoX3dta2RpcihyZXEtPmZpbGUucGF0aHcpID09IDApIHsKKyAgICBTRVRfUkVRX1JFU1VMVChyZXEsIDApOworICAgIHJldHVybiAxOworICB9IGVsc2UgaWYgKGVycm5vICE9IEVFWElTVCkgeworICAgIFNFVF9SRVFfUkVTVUxUKHJlcSwgLTEpOworICAgIHJldHVybiAxOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKwordm9pZCBmc19fbWtkdGVtcCh1dl9mc190KiByZXEpIHsKKyAgZnNfX21rdGVtcChyZXEsIGZzX19ta2R0ZW1wX2Z1bmMpOworfQorCisKK3N0YXRpYyBpbnQgZnNfX21rc3RlbXBfZnVuYyh1dl9mc190KiByZXEpIHsKKyAgSEFORExFIGZpbGU7CisgIGludCBmZDsKKworICBmaWxlID0gQ3JlYXRlRmlsZVcocmVxLT5maWxlLnBhdGh3LAorICAgICAgICAgICAgICAgICAgICAgR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSwKKyAgICAgICAgICAgICAgICAgICAgIEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEUgfCBGSUxFX1NIQVJFX0RFTEVURSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICBDUkVBVEVfTkVXLAorICAgICAgICAgICAgICAgICAgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgaWYgKGZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICBEV09SRCBlcnJvcjsKKyAgICBlcnJvciA9IEdldExhc3RFcnJvcigpOworCisgICAgLyogSWYgdGhlIGZpbGUgZXhpc3RzLCB0aGUgbWFpbiBmc19fbWt0ZW1wKCkgZnVuY3Rpb24KKyAgICAgICB3aWxsIHJldHJ5LiBJZiBpdCdzIGFub3RoZXIgZXJyb3IsIHdlIHdhbnQgdG8gc3RvcC4gKi8KKyAgICBpZiAoZXJyb3IgIT0gRVJST1JfRklMRV9FWElTVFMpIHsKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnJvcik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGZkID0gX29wZW5fb3NmaGFuZGxlKChpbnRwdHJfdCkgZmlsZSwgMCk7CisgIGlmIChmZCA8IDApIHsKKyAgICAvKiBUaGUgb25seSBrbm93biBmYWlsdXJlIG1vZGUgZm9yIF9vcGVuX29zZmhhbmRsZSgpIGlzIEVNRklMRSwgaW4gd2hpY2gKKyAgICAgKiBjYXNlIEdldExhc3RFcnJvcigpIHdpbGwgcmV0dXJuIHplcm8uIEhvd2V2ZXIgd2UnbGwgdHJ5IHRvIGhhbmRsZSBvdGhlcgorICAgICAqIGVycm9ycyBhcyB3ZWxsLCBzaG91bGQgdGhleSBldmVyIG9jY3VyLgorICAgICAqLworICAgIGlmIChlcnJubyA9PSBFTUZJTEUpCisgICAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRU1GSUxFLCBFUlJPUl9UT09fTUFOWV9PUEVOX0ZJTEVTKTsKKyAgICBlbHNlIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICBlbHNlCisgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgVVZfVU5LTk9XTik7CisgICAgQ2xvc2VIYW5kbGUoZmlsZSk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBTRVRfUkVRX1JFU1VMVChyZXEsIGZkKTsKKworICByZXR1cm4gMTsKK30KKworCit2b2lkIGZzX19ta3N0ZW1wKHV2X2ZzX3QqIHJlcSkgeworICBmc19fbWt0ZW1wKHJlcSwgZnNfX21rc3RlbXBfZnVuYyk7Cit9CisKKwogdm9pZCBmc19fc2NhbmRpcih1dl9mc190KiByZXEpIHsKICAgc3RhdGljIGNvbnN0IHNpemVfdCBkaXJlbnRzX2luaXRpYWxfc2l6ZSA9IDMyOwogCkBAIC0xNDA5LDQ3ICsxODQ1LDU3IEBACiB9CiAKIAotSU5MSU5FIHN0YXRpYyB2b2lkIGZzX19zdGF0X2ltcGwodXZfZnNfdCogcmVxLCBpbnQgZG9fbHN0YXQpIHsKK0lOTElORSBzdGF0aWMgRFdPUkQgZnNfX3N0YXRfaW1wbF9mcm9tX3BhdGgoV0NIQVIqIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb19sc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfc3RhdF90KiBzdGF0YnVmKSB7CiAgIEhBTkRMRSBoYW5kbGU7CiAgIERXT1JEIGZsYWdzOworICBEV09SRCByZXQ7CiAKICAgZmxhZ3MgPSBGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUzsKLSAgaWYgKGRvX2xzdGF0KSB7CisgIGlmIChkb19sc3RhdCkKICAgICBmbGFncyB8PSBGSUxFX0ZMQUdfT1BFTl9SRVBBUlNFX1BPSU5UOwotICB9CiAKLSAgaGFuZGxlID0gQ3JlYXRlRmlsZVcocmVxLT5maWxlLnBhdGh3LAorICBoYW5kbGUgPSBDcmVhdGVGaWxlVyhwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFX1JFQURfQVRUUklCVVRFUywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9TSEFSRV9SRUFEIHwgRklMRV9TSEFSRV9XUklURSB8IEZJTEVfU0hBUkVfREVMRVRFLAogICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICBPUEVOX0VYSVNUSU5HLAogICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOwotICAgIHJldHVybjsKLSAgfQogCi0gIGlmIChmc19fc3RhdF9oYW5kbGUoaGFuZGxlLCAmcmVxLT5zdGF0YnVmLCBkb19sc3RhdCkgIT0gMCkgewotICAgIERXT1JEIGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgcmV0ID0gR2V0TGFzdEVycm9yKCk7CisgIGVsc2UgaWYgKGZzX19zdGF0X2hhbmRsZShoYW5kbGUsIHN0YXRidWYsIGRvX2xzdGF0KSAhPSAwKQorICAgIHJldCA9IEdldExhc3RFcnJvcigpOworICBlbHNlCisgICAgcmV0ID0gMDsKKworICBDbG9zZUhhbmRsZShoYW5kbGUpOworICByZXR1cm4gcmV0OworfQorCisKK0lOTElORSBzdGF0aWMgdm9pZCBmc19fc3RhdF9pbXBsKHV2X2ZzX3QqIHJlcSwgaW50IGRvX2xzdGF0KSB7CisgIERXT1JEIGVycm9yOworCisgIGVycm9yID0gZnNfX3N0YXRfaW1wbF9mcm9tX3BhdGgocmVxLT5maWxlLnBhdGh3LCBkb19sc3RhdCwgJnJlcS0+c3RhdGJ1Zik7CisgIGlmIChlcnJvciAhPSAwKSB7CiAgICAgaWYgKGRvX2xzdGF0ICYmCiAgICAgICAgIChlcnJvciA9PSBFUlJPUl9TWU1MSU5LX05PVF9TVVBQT1JURUQgfHwKICAgICAgICAgIGVycm9yID09IEVSUk9SX05PVF9BX1JFUEFSU0VfUE9JTlQpKSB7CiAgICAgICAvKiBXZSBvcGVuZWQgYSByZXBhcnNlIHBvaW50IGJ1dCBpdCB3YXMgbm90IGEgc3ltbGluay4gVHJ5IGFnYWluLiAqLwogICAgICAgZnNfX3N0YXRfaW1wbChyZXEsIDApOwotCiAgICAgfSBlbHNlIHsKICAgICAgIC8qIFN0YXQgZmFpbGVkLiAqLwotICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnJvcik7CiAgICAgfQogCi0gICAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKICAgICByZXR1cm47CiAgIH0KIAogICByZXEtPnB0ciA9ICZyZXEtPnN0YXRidWY7CiAgIHJlcS0+cmVzdWx0ID0gMDsKLSAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKIH0KIAogCkBAIC0xNTI2LDYgKzE5NzIsNyBAQAogc3RhdGljIHZvaWQgZnNfX2Z0cnVuY2F0ZSh1dl9mc190KiByZXEpIHsKICAgaW50IGZkID0gcmVxLT5maWxlLmZkOwogICBIQU5ETEUgaGFuZGxlOworICBzdHJ1Y3QgdXZfX2ZkX2luZm9fcyBmZF9pbmZvID0geyAwIH07CiAgIE5UU1RBVFVTIHN0YXR1czsKICAgSU9fU1RBVFVTX0JMT0NLIGlvX3N0YXR1czsKICAgRklMRV9FTkRfT0ZfRklMRV9JTkZPUk1BVElPTiBlb2ZfaW5mbzsKQEAgLTE1MzQsNiArMTk4MSwxNyBAQAogCiAgIGhhbmRsZSA9IHV2X19nZXRfb3NmaGFuZGxlKGZkKTsKIAorICBpZiAodXZfX2ZkX2hhc2hfZ2V0KGZkLCAmZmRfaW5mbykpIHsKKyAgICBpZiAoZmRfaW5mby5pc19kaXJlY3RvcnkpIHsKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBFUlJPUl9BQ0NFU1NfREVOSUVEKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZmRfaW5mby5tYXBwaW5nICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICBDbG9zZUhhbmRsZShmZF9pbmZvLm1hcHBpbmcpOworICAgIH0KKyAgfQorCiAgIGVvZl9pbmZvLkVuZE9mRmlsZS5RdWFkUGFydCA9IHJlcS0+ZnMuaW5mby5vZmZzZXQ7CiAKICAgc3RhdHVzID0gcE50U2V0SW5mb3JtYXRpb25GaWxlKGhhbmRsZSwKQEAgLTE1NDYsNiArMjAwNCw0MyBAQAogICAgIFNFVF9SRVFfUkVTVUxUKHJlcSwgMCk7CiAgIH0gZWxzZSB7CiAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIHBSdGxOdFN0YXR1c1RvRG9zRXJyb3Ioc3RhdHVzKSk7CisKKyAgICBpZiAoZmRfaW5mby5mbGFncykgeworICAgICAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKKyAgICAgIGZkX2luZm8ubWFwcGluZyA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgICAgZmRfaW5mby5zaXplLlF1YWRQYXJ0ID0gMDsKKyAgICAgIGZkX2luZm8uY3VycmVudF9wb3MuUXVhZFBhcnQgPSAwOworICAgICAgdXZfX2ZkX2hhc2hfYWRkKGZkLCAmZmRfaW5mbyk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgaWYgKGZkX2luZm8uZmxhZ3MpIHsKKyAgICBmZF9pbmZvLnNpemUgPSBlb2ZfaW5mby5FbmRPZkZpbGU7CisKKyAgICBpZiAoZmRfaW5mby5zaXplLlF1YWRQYXJ0ID09IDApIHsKKyAgICAgIGZkX2luZm8ubWFwcGluZyA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIH0gZWxzZSB7CisgICAgICBEV09SRCBmbFByb3RlY3QgPSAoZmRfaW5mby5mbGFncyAmIChVVl9GU19PX1JET05MWSB8IFVWX0ZTX09fV1JPTkxZIHwKKyAgICAgICAgVVZfRlNfT19SRFdSKSkgPT0gVVZfRlNfT19SRE9OTFkgPyBQQUdFX1JFQURPTkxZIDogUEFHRV9SRUFEV1JJVEU7CisgICAgICBmZF9pbmZvLm1hcHBpbmcgPSBDcmVhdGVGaWxlTWFwcGluZyhoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxQcm90ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfaW5mby5zaXplLkhpZ2hQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfaW5mby5zaXplLkxvd1BhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgIGlmIChmZF9pbmZvLm1hcHBpbmcgPT0gTlVMTCkgeworICAgICAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICAgICAgICBDbG9zZUhhbmRsZShoYW5kbGUpOworICAgICAgICBmZF9pbmZvLm1hcHBpbmcgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICAgICAgZmRfaW5mby5zaXplLlF1YWRQYXJ0ID0gMDsKKyAgICAgICAgZmRfaW5mby5jdXJyZW50X3Bvcy5RdWFkUGFydCA9IDA7CisgICAgICAgIHV2X19mZF9oYXNoX2FkZChmZCwgJmZkX2luZm8pOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgdXZfX2ZkX2hhc2hfYWRkKGZkLCAmZmRfaW5mbyk7CiAgIH0KIH0KIApAQCAtMTU1Myw2ICsyMDQ4LDggQEAKIHN0YXRpYyB2b2lkIGZzX19jb3B5ZmlsZSh1dl9mc190KiByZXEpIHsKICAgaW50IGZsYWdzOwogICBpbnQgb3ZlcndyaXRlOworICB1dl9zdGF0X3Qgc3RhdGJ1ZjsKKyAgdXZfc3RhdF90IG5ld19zdGF0YnVmOwogCiAgIGZsYWdzID0gcmVxLT5mcy5pbmZvLmZpbGVfZmxhZ3M7CiAKQEAgLTE1NjMsMTIgKzIwNjAsMjUgQEAKIAogICBvdmVyd3JpdGUgPSBmbGFncyAmIFVWX0ZTX0NPUFlGSUxFX0VYQ0w7CiAKLSAgaWYgKENvcHlGaWxlVyhyZXEtPmZpbGUucGF0aHcsIHJlcS0+ZnMuaW5mby5uZXdfcGF0aHcsIG92ZXJ3cml0ZSkgPT0gMCkgewotICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgIGlmIChDb3B5RmlsZVcocmVxLT5maWxlLnBhdGh3LCByZXEtPmZzLmluZm8ubmV3X3BhdGh3LCBvdmVyd3JpdGUpICE9IDApIHsKKyAgICBTRVRfUkVRX1JFU1VMVChyZXEsIDApOwogICAgIHJldHVybjsKICAgfQogCi0gIFNFVF9SRVFfUkVTVUxUKHJlcSwgMCk7CisgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7CisgIGlmIChyZXEtPnJlc3VsdCAhPSBVVl9FQlVTWSkKKyAgICByZXR1cm47CisKKyAgLyogaWYgZXJyb3IgVVZfRUJVU1kgY2hlY2sgaWYgc3JjIGFuZCBkc3QgZmlsZSBhcmUgdGhlIHNhbWUgKi8KKyAgaWYgKGZzX19zdGF0X2ltcGxfZnJvbV9wYXRoKHJlcS0+ZmlsZS5wYXRodywgMCwgJnN0YXRidWYpICE9IDAgfHwKKyAgICAgIGZzX19zdGF0X2ltcGxfZnJvbV9wYXRoKHJlcS0+ZnMuaW5mby5uZXdfcGF0aHcsIDAsICZuZXdfc3RhdGJ1ZikgIT0gMCkgeworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChzdGF0YnVmLnN0X2RldiA9PSBuZXdfc3RhdGJ1Zi5zdF9kZXYgJiYKKyAgICAgIHN0YXRidWYuc3RfaW5vID09IG5ld19zdGF0YnVmLnN0X2lubykgeworICAgIFNFVF9SRVFfUkVTVUxUKHJlcSwgMCk7CisgIH0KIH0KIAogCkBAIC0xNzUwLDM0ICsyMjYwLDY4IEBACiAgIHJldHVybiAwOwogfQogCi0KLXN0YXRpYyB2b2lkIGZzX191dGltZSh1dl9mc190KiByZXEpIHsKK0lOTElORSBzdGF0aWMgRFdPUkQgZnNfX3V0aW1lX2ltcGxfZnJvbV9wYXRoKFdDSEFSKiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGF0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG10aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRvX2x1dGltZSkgewogICBIQU5ETEUgaGFuZGxlOworICBEV09SRCBmbGFnczsKKyAgRFdPUkQgcmV0OwogCi0gIGhhbmRsZSA9IENyZWF0ZUZpbGVXKHJlcS0+ZmlsZS5wYXRodywKKyAgZmxhZ3MgPSBGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUzsKKyAgaWYgKGRvX2x1dGltZSkgeworICAgIGZsYWdzIHw9IEZJTEVfRkxBR19PUEVOX1JFUEFSU0VfUE9JTlQ7CisgIH0KKworICBoYW5kbGUgPSBDcmVhdGVGaWxlVyhwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFX1dSSVRFX0FUVFJJQlVURVMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEUgfCBGSUxFX1NIQVJFX0RFTEVURSwKICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgT1BFTl9FWElTVElORywKLSAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsCisgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIAogICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoZnNfX3V0aW1lX2hhbmRsZShoYW5kbGUsIHJlcS0+ZnMudGltZS5hdGltZSwgcmVxLT5mcy50aW1lLm10aW1lKSAhPSAwKSB7Ci0gICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKLSAgICBDbG9zZUhhbmRsZShoYW5kbGUpOwotICAgIHJldHVybjsKKyAgICByZXQgPSBHZXRMYXN0RXJyb3IoKTsKKyAgfSBlbHNlIGlmIChmc19fdXRpbWVfaGFuZGxlKGhhbmRsZSwgYXRpbWUsIG10aW1lKSAhPSAwKSB7CisgICAgcmV0ID0gR2V0TGFzdEVycm9yKCk7CisgIH0gZWxzZSB7CisgICAgcmV0ID0gMDsKICAgfQogCiAgIENsb3NlSGFuZGxlKGhhbmRsZSk7CisgIHJldHVybiByZXQ7Cit9CisKK0lOTElORSBzdGF0aWMgdm9pZCBmc19fdXRpbWVfaW1wbCh1dl9mc190KiByZXEsIGludCBkb19sdXRpbWUpIHsKKyAgRFdPUkQgZXJyb3I7CisKKyAgZXJyb3IgPSBmc19fdXRpbWVfaW1wbF9mcm9tX3BhdGgocmVxLT5maWxlLnBhdGh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEtPmZzLnRpbWUuYXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS0+ZnMudGltZS5tdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fbHV0aW1lKTsKKworICBpZiAoZXJyb3IgIT0gMCkgeworICAgIGlmIChkb19sdXRpbWUgJiYKKyAgICAgICAgKGVycm9yID09IEVSUk9SX1NZTUxJTktfTk9UX1NVUFBPUlRFRCB8fAorICAgICAgICAgZXJyb3IgPT0gRVJST1JfTk9UX0FfUkVQQVJTRV9QT0lOVCkpIHsKKyAgICAgIC8qIE9wZW5lZCBmaWxlIGlzIGEgcmVwYXJzZSBwb2ludCBidXQgbm90IGEgc3ltbGluay4gVHJ5IGFnYWluLiAqLworICAgICAgZnNfX3V0aW1lX2ltcGwocmVxLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogdXRpbWUgZmFpbGVkLiAqLworICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm47CisgIH0KIAogICByZXEtPnJlc3VsdCA9IDA7CiB9CiAKK3N0YXRpYyB2b2lkIGZzX191dGltZSh1dl9mc190KiByZXEpIHsKKyAgZnNfX3V0aW1lX2ltcGwocmVxLCAvKiBkb19sdXRpbWUgKi8gMCk7Cit9CisKIAogc3RhdGljIHZvaWQgZnNfX2Z1dGltZSh1dl9mc190KiByZXEpIHsKICAgaW50IGZkID0gcmVxLT5maWxlLmZkOwpAQCAtMTc5OSw2ICsyMzQzLDEwIEBACiAgIHJlcS0+cmVzdWx0ID0gMDsKIH0KIAorc3RhdGljIHZvaWQgZnNfX2x1dGltZSh1dl9mc190KiByZXEpIHsKKyAgZnNfX3V0aW1lX2ltcGwocmVxLCAvKiBkb19sdXRpbWUgKi8gMSk7Cit9CisKIAogc3RhdGljIHZvaWQgZnNfX2xpbmsodXZfZnNfdCogcmVxKSB7CiAgIERXT1JEIHIgPSBDcmVhdGVIYXJkTGlua1cocmVxLT5mcy5pbmZvLm5ld19wYXRodywgcmVxLT5maWxlLnBhdGh3LCBOVUxMKTsKQEAgLTIxMzksNiArMjY4Nyw5MCBAQAogICByZXEtPnJlc3VsdCA9IDA7CiB9CiAKKworc3RhdGljIHZvaWQgZnNfX3N0YXRmcyh1dl9mc190KiByZXEpIHsKKyAgdXZfc3RhdGZzX3QqIHN0YXRfZnM7CisgIERXT1JEIHNlY3RvcnNfcGVyX2NsdXN0ZXI7CisgIERXT1JEIGJ5dGVzX3Blcl9zZWN0b3I7CisgIERXT1JEIGZyZWVfY2x1c3RlcnM7CisgIERXT1JEIHRvdGFsX2NsdXN0ZXJzOworICBXQ0hBUiogcGF0aHc7CisKKyAgcGF0aHcgPSByZXEtPmZpbGUucGF0aHc7CityZXRyeV9nZXRfZGlza19mcmVlX3NwYWNlOgorICBpZiAoMCA9PSBHZXREaXNrRnJlZVNwYWNlVyhwYXRodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlY3RvcnNfcGVyX2NsdXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc19wZXJfc2VjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJlZV9jbHVzdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRvdGFsX2NsdXN0ZXJzKSkgeworICAgIERXT1JEIGVycjsKKyAgICBXQ0hBUiogZnBhcnQ7CisgICAgc2l6ZV90IGxlbjsKKyAgICBEV09SRCByZXQ7CisgICAgQk9PTCBpc19zZWNvbmQ7CisKKyAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBpc19zZWNvbmQgPSBwYXRodyAhPSByZXEtPmZpbGUucGF0aHc7CisgICAgaWYgKGVyciAhPSBFUlJPUl9ESVJFQ1RPUlkgfHwgaXNfc2Vjb25kKSB7CisgICAgICBpZiAoaXNfc2Vjb25kKQorICAgICAgICB1dl9fZnJlZShwYXRodyk7CisKKyAgICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxlbiA9IE1BWF9QQVRIICsgMTsKKyAgICBwYXRodyA9IHV2X19tYWxsb2MobGVuICogc2l6ZW9mKCpwYXRodykpOworICAgIGlmIChwYXRodyA9PSBOVUxMKSB7CisgICAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRU5PTUVNLCBFUlJPUl9PVVRPRk1FTU9SWSk7CisgICAgICByZXR1cm47CisgICAgfQorcmV0cnlfZ2V0X2Z1bGxfcGF0aF9uYW1lOgorICAgIHJldCA9IEdldEZ1bGxQYXRoTmFtZVcocmVxLT5maWxlLnBhdGh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnBhcnQpOworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgdXZfX2ZyZWUocGF0aHcpOworICAgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChyZXQgPiBsZW4pIHsKKyAgICAgIGxlbiA9IHJldDsKKyAgICAgIHBhdGh3ID0gdXZfX3JlYWxsb2NmKHBhdGh3LCBsZW4gKiBzaXplb2YoKnBhdGh3KSk7CisgICAgICBpZiAocGF0aHcgPT0gTlVMTCkgeworICAgICAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRU5PTUVNLCBFUlJPUl9PVVRPRk1FTU9SWSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGdvdG8gcmV0cnlfZ2V0X2Z1bGxfcGF0aF9uYW1lOworICAgIH0KKyAgICBpZiAoZnBhcnQgIT0gMCkKKyAgICAgICpmcGFydCA9IEwnXDAnOworCisgICAgZ290byByZXRyeV9nZXRfZGlza19mcmVlX3NwYWNlOworICB9CisgIGlmIChwYXRodyAhPSByZXEtPmZpbGUucGF0aHcpIHsKKyAgICB1dl9fZnJlZShwYXRodyk7CisgIH0KKworICBzdGF0X2ZzID0gdXZfX21hbGxvYyhzaXplb2YoKnN0YXRfZnMpKTsKKyAgaWYgKHN0YXRfZnMgPT0gTlVMTCkgeworICAgIFNFVF9SRVFfVVZfRVJST1IocmVxLCBVVl9FTk9NRU0sIEVSUk9SX09VVE9GTUVNT1JZKTsKKyAgICByZXR1cm47CisgIH0KKworICBzdGF0X2ZzLT5mX3R5cGUgPSAwOworICBzdGF0X2ZzLT5mX2JzaXplID0gYnl0ZXNfcGVyX3NlY3RvciAqIHNlY3RvcnNfcGVyX2NsdXN0ZXI7CisgIHN0YXRfZnMtPmZfYmxvY2tzID0gdG90YWxfY2x1c3RlcnM7CisgIHN0YXRfZnMtPmZfYmZyZWUgPSBmcmVlX2NsdXN0ZXJzOworICBzdGF0X2ZzLT5mX2JhdmFpbCA9IGZyZWVfY2x1c3RlcnM7CisgIHN0YXRfZnMtPmZfZmlsZXMgPSAwOworICBzdGF0X2ZzLT5mX2ZmcmVlID0gMDsKKyAgcmVxLT5wdHIgPSBzdGF0X2ZzOworICByZXEtPmZsYWdzIHw9IFVWX0ZTX0ZSRUVfUFRSOworICBTRVRfUkVRX1JFU1VMVChyZXEsIDApOworfQorCisKIHN0YXRpYyB2b2lkIHV2X19mc193b3JrKHN0cnVjdCB1dl9fd29yayogdykgewogICB1dl9mc190KiByZXE7CiAKQEAgLTIxNTksNiArMjc5MSw3IEBACiAgICAgWFgoRlRSVU5DQVRFLCBmdHJ1bmNhdGUpCiAgICAgWFgoVVRJTUUsIHV0aW1lKQogICAgIFhYKEZVVElNRSwgZnV0aW1lKQorICAgIFhYKExVVElNRSwgbHV0aW1lKQogICAgIFhYKEFDQ0VTUywgYWNjZXNzKQogICAgIFhYKENITU9ELCBjaG1vZCkKICAgICBYWChGQ0hNT0QsIGZjaG1vZCkKQEAgLTIxNjgsNiArMjgwMSw3IEBACiAgICAgWFgoUk1ESVIsIHJtZGlyKQogICAgIFhYKE1LRElSLCBta2RpcikKICAgICBYWChNS0RURU1QLCBta2R0ZW1wKQorICAgIFhYKE1LU1RFTVAsIG1rc3RlbXApCiAgICAgWFgoUkVOQU1FLCByZW5hbWUpCiAgICAgWFgoU0NBTkRJUiwgc2NhbmRpcikKICAgICBYWChSRUFERElSLCByZWFkZGlyKQpAQCAtMjE3OCw4ICsyODEyLDkgQEAKICAgICBYWChSRUFETElOSywgcmVhZGxpbmspCiAgICAgWFgoUkVBTFBBVEgsIHJlYWxwYXRoKQogICAgIFhYKENIT1dOLCBjaG93bikKLSAgICBYWChGQ0hPV04sIGZjaG93bik7Ci0gICAgWFgoTENIT1dOLCBsY2hvd24pOworICAgIFhYKEZDSE9XTiwgZmNob3duKQorICAgIFhYKExDSE9XTiwgbGNob3duKQorICAgIFhYKFNUQVRGUywgc3RhdGZzKQogICAgIGRlZmF1bHQ6CiAgICAgICBhc3NlcnQoISJiYWQgdXZfZnNfdHlwZSIpOwogICB9CkBAIC0yMjQwLDcgKzI4NzUsOCBAQAogICBJTklUKFVWX0ZTX09QRU4pOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIHJlcS0+ZnMuaW5mby5maWxlX2ZsYWdzID0gZmxhZ3M7CkBAIC0yMjY1LDggKzI5MDEsMTAgQEAKICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKSB7CiAgIElOSVQoVVZfRlNfUkVBRCk7CiAKLSAgaWYgKGJ1ZnMgPT0gTlVMTCB8fCBuYnVmcyA9PSAwKQorICBpZiAoYnVmcyA9PSBOVUxMIHx8IG5idWZzID09IDApIHsKKyAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRUlOVkFMLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7CiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKKyAgfQogCiAgIHJlcS0+ZmlsZS5mZCA9IGZkOwogCkBAIC0yMjc1LDggKzI5MTMsMTAgQEAKICAgaWYgKG5idWZzID4gQVJSQVlfU0laRShyZXEtPmZzLmluZm8uYnVmc21sKSkKICAgICByZXEtPmZzLmluZm8uYnVmcyA9IHV2X19tYWxsb2MobmJ1ZnMgKiBzaXplb2YoKmJ1ZnMpKTsKIAotICBpZiAocmVxLT5mcy5pbmZvLmJ1ZnMgPT0gTlVMTCkKKyAgaWYgKHJlcS0+ZnMuaW5mby5idWZzID09IE5VTEwpIHsKKyAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRU5PTUVNLCBFUlJPUl9PVVRPRk1FTU9SWSk7CiAgICAgcmV0dXJuIFVWX0VOT01FTTsKKyAgfQogCiAgIG1lbWNweShyZXEtPmZzLmluZm8uYnVmcywgYnVmcywgbmJ1ZnMgKiBzaXplb2YoKmJ1ZnMpKTsKIApAQCAtMjI5NCw4ICsyOTM0LDEwIEBACiAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpIHsKICAgSU5JVChVVl9GU19XUklURSk7CiAKLSAgaWYgKGJ1ZnMgPT0gTlVMTCB8fCBuYnVmcyA9PSAwKQorICBpZiAoYnVmcyA9PSBOVUxMIHx8IG5idWZzID09IDApIHsKKyAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRUlOVkFMLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7CiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKKyAgfQogCiAgIHJlcS0+ZmlsZS5mZCA9IGZkOwogCkBAIC0yMzA0LDggKzI5NDYsMTAgQEAKICAgaWYgKG5idWZzID4gQVJSQVlfU0laRShyZXEtPmZzLmluZm8uYnVmc21sKSkKICAgICByZXEtPmZzLmluZm8uYnVmcyA9IHV2X19tYWxsb2MobmJ1ZnMgKiBzaXplb2YoKmJ1ZnMpKTsKIAotICBpZiAocmVxLT5mcy5pbmZvLmJ1ZnMgPT0gTlVMTCkKKyAgaWYgKHJlcS0+ZnMuaW5mby5idWZzID09IE5VTEwpIHsKKyAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRU5PTUVNLCBFUlJPUl9PVVRPRk1FTU9SWSk7CiAgICAgcmV0dXJuIFVWX0VOT01FTTsKKyAgfQogCiAgIG1lbWNweShyZXEtPmZzLmluZm8uYnVmcywgYnVmcywgbmJ1ZnMgKiBzaXplb2YoKmJ1ZnMpKTsKIApAQCAtMjMyMSw3ICsyOTY1LDggQEAKICAgSU5JVChVVl9GU19VTkxJTkspOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIFBPU1Q7CkBAIC0yMzM1LDcgKzI5ODAsOCBAQAogICBJTklUKFVWX0ZTX01LRElSKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICByZXEtPmZzLmluZm8ubW9kZSA9IG1vZGU7CkBAIC0yMzQzLDE0ICsyOTg5LDM1IEBACiB9CiAKIAotaW50IHV2X2ZzX21rZHRlbXAodXZfbG9vcF90KiBsb29wLCB1dl9mc190KiByZXEsIGNvbnN0IGNoYXIqIHRwbCwKLSAgICB1dl9mc19jYiBjYikgeworaW50IHV2X2ZzX21rZHRlbXAodXZfbG9vcF90KiBsb29wLAorICAgICAgICAgICAgICAgICAgdXZfZnNfdCogcmVxLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdHBsLAorICAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpIHsKICAgaW50IGVycjsKIAogICBJTklUKFVWX0ZTX01LRFRFTVApOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgdHBsLCBOVUxMLCBUUlVFKTsKLSAgaWYgKGVycikKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICBpZiAoZXJyKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OworICB9CisKKyAgUE9TVDsKK30KKworCitpbnQgdXZfZnNfbWtzdGVtcCh1dl9sb29wX3QqIGxvb3AsCisgICAgICAgICAgICAgICAgICB1dl9mc190KiByZXEsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0cGwsCisgICAgICAgICAgICAgICAgICB1dl9mc19jYiBjYikgeworICBpbnQgZXJyOworCisgIElOSVQoVVZfRlNfTUtTVEVNUCk7CisgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCB0cGwsIE5VTEwsIFRSVUUpOworICBpZiAoZXJyKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OworICB9CiAKICAgUE9TVDsKIH0KQEAgLTIzNjIsNyArMzAyOSw4IEBACiAgIElOSVQoVVZfRlNfUk1ESVIpOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIFBPU1Q7CkBAIC0yMzc2LDcgKzMwNDQsOCBAQAogICBJTklUKFVWX0ZTX1NDQU5ESVIpOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIHJlcS0+ZnMuaW5mby5maWxlX2ZsYWdzID0gZmxhZ3M7CkBAIC0yMzkxLDggKzMwNjAsMTAgQEAKIAogICBJTklUKFVWX0ZTX09QRU5ESVIpOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7Ci0gIGlmIChlcnIpCi0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgaWYgKGVycikgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKKyAgfQogICBQT1NUOwogfQogCkBAIC0yNDA1LDYgKzMwNzYsNyBAQAogICBpZiAoZGlyID09IE5VTEwgfHwKICAgICAgIGRpci0+ZGlyZW50cyA9PSBOVUxMIHx8CiAgICAgICBkaXItPmRpcl9oYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRUlOVkFMLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7CiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKICAgfQogCkBAIC0yNDE3LDggKzMwODksMTAgQEAKICAgICAgICAgICAgICAgICAgICB1dl9kaXJfdCogZGlyLAogICAgICAgICAgICAgICAgICAgIHV2X2ZzX2NiIGNiKSB7CiAgIElOSVQoVVZfRlNfQ0xPU0VESVIpOwotICBpZiAoZGlyID09IE5VTEwpCisgIGlmIChkaXIgPT0gTlVMTCkgeworICAgIFNFVF9SRVFfVVZfRVJST1IocmVxLCBVVl9FSU5WQUwsIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKTsKICAgICByZXR1cm4gVVZfRUlOVkFMOworICB9CiAgIHJlcS0+cHRyID0gZGlyOwogICBQT1NUOwogfQpAQCAtMjQzMCw3ICszMTA0LDggQEAKICAgSU5JVChVVl9GU19MSU5LKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIG5ld19wYXRoLCBjYiAhPSBOVUxMKTsKICAgaWYgKGVycikgewotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OwogICB9CiAKICAgUE9TVDsKQEAgLTI0NDQsNyArMzExOSw4IEBACiAgIElOSVQoVVZfRlNfU1lNTElOSyk7CiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBuZXdfcGF0aCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIHJlcS0+ZnMuaW5mby5maWxlX2ZsYWdzID0gZmxhZ3M7CkBAIC0yNDU5LDcgKzMxMzUsOCBAQAogICBJTklUKFVWX0ZTX1JFQURMSU5LKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwogICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CiAgIH0KIAogICBQT1NUOwpAQCAtMjQ3MywxMiArMzE1MCwxNCBAQAogICBJTklUKFVWX0ZTX1JFQUxQQVRIKTsKIAogICBpZiAoIXBhdGgpIHsKKyAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRUlOVkFMLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7CiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKICAgfQogCiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBOVUxMLCBjYiAhPSBOVUxMKTsKICAgaWYgKGVycikgewotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OwogICB9CiAKICAgUE9TVDsKQEAgLTI0OTIsNyArMzE3MSw4IEBACiAgIElOSVQoVVZfRlNfQ0hPV04pOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIFBPU1Q7CkBAIC0yNTEzLDggKzMxOTMsMTAgQEAKICAgSU5JVChVVl9GU19MQ0hPV04pOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQorCiAgIFBPU1Q7CiB9CiAKQEAgLTI1MjUsNyArMzIwNyw4IEBACiAgIElOSVQoVVZfRlNfU1RBVCk7CiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBOVUxMLCBjYiAhPSBOVUxMKTsKICAgaWYgKGVycikgewotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OwogICB9CiAKICAgUE9TVDsKQEAgLTI1MzgsNyArMzIyMSw4IEBACiAgIElOSVQoVVZfRlNfTFNUQVQpOwogICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIFBPU1Q7CkBAIC0yNTU5LDcgKzMyNDMsOCBAQAogICBJTklUKFVWX0ZTX1JFTkFNRSk7CiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBuZXdfcGF0aCwgY2IgIT0gTlVMTCk7CiAgIGlmIChlcnIpIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKICAgfQogCiAgIFBPU1Q7CkBAIC0yNjAyLDEzICszMjg3LDE1IEBACiAgIGlmIChmbGFncyAmIH4oVVZfRlNfQ09QWUZJTEVfRVhDTCB8CiAgICAgICAgICAgICAgICAgVVZfRlNfQ09QWUZJTEVfRklDTE9ORSB8CiAgICAgICAgICAgICAgICAgVVZfRlNfQ09QWUZJTEVfRklDTE9ORV9GT1JDRSkpIHsKKyAgICBTRVRfUkVRX1VWX0VSUk9SKHJlcSwgVVZfRUlOVkFMLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7CiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKICAgfQogCiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBuZXdfcGF0aCwgY2IgIT0gTlVMTCk7Ci0KLSAgaWYgKGVycikKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnIpOworICBpZiAoZXJyKSB7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OworICB9CiAKICAgcmVxLT5mcy5pbmZvLmZpbGVfZmxhZ3MgPSBmbGFnczsKICAgUE9TVDsKQEAgLTI2MzUsOCArMzMyMiwxMCBAQAogCiAgIElOSVQoVVZfRlNfQUNDRVNTKTsKICAgZXJyID0gZnNfX2NhcHR1cmVfcGF0aChyZXEsIHBhdGgsIE5VTEwsIGNiICE9IE5VTEwpOwotICBpZiAoZXJyKQotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgIGlmIChlcnIpIHsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CisgIH0KIAogICByZXEtPmZzLmluZm8ubW9kZSA9IGZsYWdzOwogICBQT1NUOwpAQCAtMjY1MCw3ICszMzM5LDggQEAKICAgSU5JVChVVl9GU19DSE1PRCk7CiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBOVUxMLCBjYiAhPSBOVUxMKTsKICAgaWYgKGVycikgewotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OwogICB9CiAKICAgcmVxLT5mcy5pbmZvLm1vZGUgPSBtb2RlOwpAQCAtMjY3NCw3ICszMzY0LDggQEAKICAgSU5JVChVVl9GU19VVElNRSk7CiAgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBOVUxMLCBjYiAhPSBOVUxMKTsKICAgaWYgKGVycikgewotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisgICAgU0VUX1JFUV9XSU4zMl9FUlJPUihyZXEsIGVycik7CisgICAgcmV0dXJuIHJlcS0+cmVzdWx0OwogICB9CiAKICAgcmVxLT5mcy50aW1lLmF0aW1lID0gYXRpbWU7CkBAIC0yNjkxLDMgKzMzODIsNDAgQEAKICAgcmVxLT5mcy50aW1lLm10aW1lID0gbXRpbWU7CiAgIFBPU1Q7CiB9CisKK2ludCB1dl9mc19sdXRpbWUodXZfbG9vcF90KiBsb29wLCB1dl9mc190KiByZXEsIGNvbnN0IGNoYXIqIHBhdGgsIGRvdWJsZSBhdGltZSwKKyAgICBkb3VibGUgbXRpbWUsIHV2X2ZzX2NiIGNiKSB7CisgIGludCBlcnI7CisKKyAgSU5JVChVVl9GU19MVVRJTUUpOworICBlcnIgPSBmc19fY2FwdHVyZV9wYXRoKHJlcSwgcGF0aCwgTlVMTCwgY2IgIT0gTlVMTCk7CisgIGlmIChlcnIpIHsKKyAgICBTRVRfUkVRX1dJTjMyX0VSUk9SKHJlcSwgZXJyKTsKKyAgICByZXR1cm4gcmVxLT5yZXN1bHQ7CisgIH0KKworICByZXEtPmZzLnRpbWUuYXRpbWUgPSBhdGltZTsKKyAgcmVxLT5mcy50aW1lLm10aW1lID0gbXRpbWU7CisgIFBPU1Q7Cit9CisKKworaW50IHV2X2ZzX3N0YXRmcyh1dl9sb29wX3QqIGxvb3AsCisgICAgICAgICAgICAgICAgIHV2X2ZzX3QqIHJlcSwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgdXZfZnNfY2IgY2IpIHsKKyAgaW50IGVycjsKKworICBJTklUKFVWX0ZTX1NUQVRGUyk7CisgIGVyciA9IGZzX19jYXB0dXJlX3BhdGgocmVxLCBwYXRoLCBOVUxMLCBjYiAhPSBOVUxMKTsKKyAgaWYgKGVycikgeworICAgIFNFVF9SRVFfV0lOMzJfRVJST1IocmVxLCBlcnIpOworICAgIHJldHVybiByZXEtPnJlc3VsdDsKKyAgfQorCisgIFBPU1Q7Cit9CisKK2ludCB1dl9mc19nZXRfc3lzdGVtX2Vycm9yKGNvbnN0IHV2X2ZzX3QqIHJlcSkgeworICByZXR1cm4gcmVxLT5zeXNfZXJybm9fOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9pbnRlcm5hbC5oIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9pbnRlcm5hbC5oCmluZGV4IGY3ZDhjY2YuLjQ2M2VmMzMgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vaW50ZXJuYWwuaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL2ludGVybmFsLmgKQEAgLTI4NCw2ICsyODQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBuYW1lbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlbGF5ZWRfZXJyb3IpOwogCitpbnQgdXZfX3JhbmRvbV9ydGxnZW5yYW5kb20odm9pZCogYnVmLCBzaXplX3QgYnVmbGVuKTsKKwogCiAvKgogICogUHJvY2VzcyBzdGRpbyBoYW5kbGVzLgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9waXBlLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3BpcGUuYwppbmRleCAyNzdmNjQ5Li5mYzAxMTJhIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3BpcGUuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3BpcGUuYwpAQCAtMjY0LDggKzI2NCw5IEBACiAgIERXT1JEIGN1cnJlbnRfbW9kZSA9IDA7CiAgIERXT1JEIGVyciA9IDA7CiAKLSAgaWYgKCEoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9QSVBFU0VSVkVSKSAmJgotICAgICAgaGFuZGxlLT5oYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1BJUEVTRVJWRVIpCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKyAgaWYgKGhhbmRsZS0+aGFuZGxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQogICAgIHJldHVybiBVVl9FQlVTWTsKIAogICBpZiAoIVNldE5hbWVkUGlwZUhhbmRsZVN0YXRlKHBpcGVIYW5kbGUsICZtb2RlLCBOVUxMLCBOVUxMKSkgewpAQCAtMzEyLDcgKzMxMyw3IEBACiAgICAgLyogT3ZlcmxhcHBlZCBwaXBlLiAgVHJ5IHRvIGFzc29jaWF0ZSB3aXRoIElPQ1AuICovCiAgICAgaWYgKENyZWF0ZUlvQ29tcGxldGlvblBvcnQocGlwZUhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wLT5pb2NwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVTE9OR19QVFIpaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVTE9OR19QVFIpIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PSBOVUxMKSB7CiAgICAgICBoYW5kbGUtPmZsYWdzIHw9IFVWX0hBTkRMRV9FTVVMQVRFX0lPQ1A7CiAgICAgfQpAQCAtMzI2LDYgKzMyNywzOCBAQAogfQogCiAKK3N0YXRpYyBpbnQgcGlwZV9hbGxvY19hY2NlcHQodXZfbG9vcF90KiBsb29wLCB1dl9waXBlX3QqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZfcGlwZV9hY2NlcHRfdCogcmVxLCBCT09MIGZpcnN0SW5zdGFuY2UpIHsKKyAgYXNzZXJ0KHJlcS0+cGlwZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSk7CisKKyAgcmVxLT5waXBlSGFuZGxlID0KKyAgICAgIENyZWF0ZU5hbWVkUGlwZVcoaGFuZGxlLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBQSVBFX0FDQ0VTU19EVVBMRVggfCBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCB8IFdSSVRFX0RBQyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKGZpcnN0SW5zdGFuY2UgPyBGSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRSA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICBQSVBFX1RZUEVfQllURSB8IFBJUEVfUkVBRE1PREVfQllURSB8IFBJUEVfV0FJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgUElQRV9VTkxJTUlURURfSU5TVEFOQ0VTLCA2NTUzNiwgNjU1MzYsIDAsIE5VTEwpOworCisgIGlmIChyZXEtPnBpcGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIEFzc29jaWF0ZSBpdCB3aXRoIElPQ1Agc28gd2UgY2FuIGdldCBldmVudHMuICovCisgIGlmIChDcmVhdGVJb0NvbXBsZXRpb25Qb3J0KHJlcS0+cGlwZUhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcC0+aW9jcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVMT05HX1BUUikgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSA9PSBOVUxMKSB7CisgICAgdXZfZmF0YWxfZXJyb3IoR2V0TGFzdEVycm9yKCksICJDcmVhdGVJb0NvbXBsZXRpb25Qb3J0Iik7CisgIH0KKworICAvKiBTdGFzaCBhIGhhbmRsZSBpbiB0aGUgc2VydmVyIG9iamVjdCBmb3IgdXNlIGZyb20gcGxhY2VzIHN1Y2ggYXMKKyAgICogZ2V0c29ja25hbWUgYW5kIGNobW9kLiBBcyB3ZSB0cmFuc2ZlciBvd25lcnNoaXAgb2YgdGhlc2UgdG8gY2xpZW50CisgICAqIG9iamVjdHMsIHdlJ2xsIGFsbG9jYXRlIG5ldyBvbmVzIGhlcmUuICovCisgIGhhbmRsZS0+aGFuZGxlID0gcmVxLT5waXBlSGFuZGxlOworCisgIHJldHVybiAxOworfQorCisKIHN0YXRpYyBEV09SRCBXSU5BUEkgcGlwZV9zaHV0ZG93bl90aHJlYWRfcHJvYyh2b2lkKiBwYXJhbWV0ZXIpIHsKICAgdXZfbG9vcF90KiBsb29wOwogICB1dl9waXBlX3QqIGhhbmRsZTsKQEAgLTQ1OCw3ICs0OTEsNyBAQAogICAgICAgICAgIFVucmVnaXN0ZXJXYWl0KGhhbmRsZS0+cmVhZF9yZXEud2FpdF9oYW5kbGUpOwogICAgICAgICAgIGhhbmRsZS0+cmVhZF9yZXEud2FpdF9oYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICAgICAgfQotICAgICAgICBpZiAoaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUpIHsKKyAgICAgICAgaWYgKGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlICE9IE5VTEwpIHsKICAgICAgICAgICBDbG9zZUhhbmRsZShoYW5kbGUtPnJlYWRfcmVxLmV2ZW50X2hhbmRsZSk7CiAgICAgICAgICAgaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUgPSBOVUxMOwogICAgICAgICB9CkBAIC01NDAsMTMgKzU3MywxMCBAQAogICAgKiBBdHRlbXB0IHRvIGNyZWF0ZSB0aGUgZmlyc3QgcGlwZSB3aXRoIEZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFLgogICAgKiBJZiB0aGlzIGZhaWxzIHRoZW4gdGhlcmUncyBhbHJlYWR5IGEgcGlwZSBzZXJ2ZXIgZm9yIHRoZSBnaXZlbiBwaXBlIG5hbWUuCiAgICAqLwotICBoYW5kbGUtPnBpcGUuc2Vydi5hY2NlcHRfcmVxc1swXS5waXBlSGFuZGxlID0gQ3JlYXRlTmFtZWRQaXBlVyhoYW5kbGUtPm5hbWUsCi0gICAgICBQSVBFX0FDQ0VTU19EVVBMRVggfCBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCB8Ci0gICAgICBGSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRSB8IFdSSVRFX0RBQywKLSAgICAgIFBJUEVfVFlQRV9CWVRFIHwgUElQRV9SRUFETU9ERV9CWVRFIHwgUElQRV9XQUlULAotICAgICAgUElQRV9VTkxJTUlURURfSU5TVEFOQ0VTLCA2NTUzNiwgNjU1MzYsIDAsIE5VTEwpOwotCi0gIGlmIChoYW5kbGUtPnBpcGUuc2Vydi5hY2NlcHRfcmVxc1swXS5waXBlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgIGlmICghcGlwZV9hbGxvY19hY2NlcHQobG9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZS0+cGlwZS5zZXJ2LmFjY2VwdF9yZXFzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUpKSB7CiAgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7CiAgICAgaWYgKGVyciA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEKSB7CiAgICAgICBlcnIgPSBXU0FFQUREUklOVVNFOyAgLyogVHJhbnNsYXRlcyB0byBVVl9FQUREUklOVVNFLiAqLwpAQCAtNTU2LDE1ICs1ODYsNiBAQAogICAgIGdvdG8gZXJyb3I7CiAgIH0KIAotICBpZiAodXZfc2V0X3BpcGVfaGFuZGxlKGxvb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+cGlwZS5zZXJ2LmFjY2VwdF9yZXFzWzBdLnBpcGVIYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgMCkpIHsKLSAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci0KICAgaGFuZGxlLT5waXBlLnNlcnYucGVuZGluZ19hY2NlcHRzID0gTlVMTDsKICAgaGFuZGxlLT5mbGFncyB8PSBVVl9IQU5ETEVfUElQRVNFUlZFUjsKICAgaGFuZGxlLT5mbGFncyB8PSBVVl9IQU5ETEVfQk9VTkQ7CkBAIC01NzcsMTEgKzU5OCw2IEBACiAgICAgaGFuZGxlLT5uYW1lID0gTlVMTDsKICAgfQogCi0gIGlmIChoYW5kbGUtPnBpcGUuc2Vydi5hY2NlcHRfcmVxc1swXS5waXBlSGFuZGxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgQ2xvc2VIYW5kbGUoaGFuZGxlLT5waXBlLnNlcnYuYWNjZXB0X3JlcXNbMF0ucGlwZUhhbmRsZSk7Ci0gICAgaGFuZGxlLT5waXBlLnNlcnYuYWNjZXB0X3JlcXNbMF0ucGlwZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotICB9Ci0KICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKIH0KIApAQCAtODI3LDI5ICs4NDMsMTEgQEAKICAgICB1dl9waXBlX2FjY2VwdF90KiByZXEsIEJPT0wgZmlyc3RJbnN0YW5jZSkgewogICBhc3NlcnQoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9MSVNURU5JTkcpOwogCi0gIGlmICghZmlyc3RJbnN0YW5jZSkgewotICAgIGFzc2VydChyZXEtPnBpcGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpOwotCi0gICAgcmVxLT5waXBlSGFuZGxlID0gQ3JlYXRlTmFtZWRQaXBlVyhoYW5kbGUtPm5hbWUsCi0gICAgICAgIFBJUEVfQUNDRVNTX0RVUExFWCB8IEZJTEVfRkxBR19PVkVSTEFQUEVEIHwgV1JJVEVfREFDLAotICAgICAgICBQSVBFX1RZUEVfQllURSB8IFBJUEVfUkVBRE1PREVfQllURSB8IFBJUEVfV0FJVCwKLSAgICAgICAgUElQRV9VTkxJTUlURURfSU5TVEFOQ0VTLCA2NTUzNiwgNjU1MzYsIDAsIE5VTEwpOwotCi0gICAgaWYgKHJlcS0+cGlwZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgU0VUX1JFUV9FUlJPUihyZXEsIEdldExhc3RFcnJvcigpKTsKLSAgICAgIHV2X2luc2VydF9wZW5kaW5nX3JlcShsb29wLCAodXZfcmVxX3QqKSByZXEpOwotICAgICAgaGFuZGxlLT5yZXFzX3BlbmRpbmcrKzsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodXZfc2V0X3BpcGVfaGFuZGxlKGxvb3AsIGhhbmRsZSwgcmVxLT5waXBlSGFuZGxlLCAtMSwgMCkpIHsKLSAgICAgIENsb3NlSGFuZGxlKHJlcS0+cGlwZUhhbmRsZSk7Ci0gICAgICByZXEtPnBpcGVIYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLSAgICAgIFNFVF9SRVFfRVJST1IocmVxLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICB1dl9pbnNlcnRfcGVuZGluZ19yZXEobG9vcCwgKHV2X3JlcV90KikgcmVxKTsKLSAgICAgIGhhbmRsZS0+cmVxc19wZW5kaW5nKys7Ci0gICAgICByZXR1cm47Ci0gICAgfQorICBpZiAoIWZpcnN0SW5zdGFuY2UgJiYgIXBpcGVfYWxsb2NfYWNjZXB0KGxvb3AsIGhhbmRsZSwgcmVxLCBGQUxTRSkpIHsKKyAgICBTRVRfUkVRX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOworICAgIHV2X2luc2VydF9wZW5kaW5nX3JlcShsb29wLCAodXZfcmVxX3QqKSByZXEpOworICAgIGhhbmRsZS0+cmVxc19wZW5kaW5nKys7CisgICAgcmV0dXJuOwogICB9CiAKICAgYXNzZXJ0KHJlcS0+cGlwZUhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSk7CkBAIC05MDQsNyArOTAyLDcgQEAKICAgICB1dl9fZnJlZShpdGVtKTsKIAogICB9IGVsc2UgewotICAgIHBpcGVfY2xpZW50ID0gKHV2X3BpcGVfdCopY2xpZW50OworICAgIHBpcGVfY2xpZW50ID0gKHV2X3BpcGVfdCopIGNsaWVudDsKIAogICAgIC8qIEZpbmQgYSBjb25uZWN0aW9uIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gY29ubmVjdGVkLCBidXQgbm90IHlldAogICAgICAqIGFjY2VwdGVkLiAqLwpAQCAtOTI1LDYgKzkyMyw3IEBACiAgICAgcmVxLT5uZXh0X3BlbmRpbmcgPSBOVUxMOwogICAgIHJlcS0+cGlwZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogCisgICAgc2VydmVyLT5oYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICBpZiAoIShzZXJ2ZXItPmZsYWdzICYgVVZfSEFORExFX0NMT1NJTkcpKSB7CiAgICAgICB1dl9waXBlX3F1ZXVlX2FjY2VwdChsb29wLCBzZXJ2ZXIsIHJlcSwgRkFMU0UpOwogICAgIH0KQEAgLTk1NSw2ICs5NTQsMTAgQEAKICAgICByZXR1cm4gRVJST1JfTk9UX1NVUFBPUlRFRDsKICAgfQogCisgIGlmIChoYW5kbGUtPmlwYykgeworICAgIHJldHVybiBXU0FFSU5WQUw7CisgIH0KKwogICBoYW5kbGUtPmZsYWdzIHw9IFVWX0hBTkRMRV9MSVNURU5JTkc7CiAgIElOQ1JFQVNFX0FDVElWRV9DT1VOVChsb29wLCBoYW5kbGUpOwogICBoYW5kbGUtPnN0cmVhbS5zZXJ2LmNvbm5lY3Rpb25fY2IgPSBjYjsKQEAgLTExMzEsNiArMTEzNCw3IEBACiAgIH0gZWxzZSB7CiAgICAgbWVtc2V0KCZyZXEtPnUuaW8ub3ZlcmxhcHBlZCwgMCwgc2l6ZW9mKHJlcS0+dS5pby5vdmVybGFwcGVkKSk7CiAgICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfRU1VTEFURV9JT0NQKSB7CisgICAgICBhc3NlcnQocmVxLT5ldmVudF9oYW5kbGUgIT0gTlVMTCk7CiAgICAgICByZXEtPnUuaW8ub3ZlcmxhcHBlZC5oRXZlbnQgPSAoSEFORExFKSAoKHVpbnRwdHJfdCkgcmVxLT5ldmVudF9oYW5kbGUgfCAxKTsKICAgICB9CiAKQEAgLTExNDgsMTUgKzExNTIsOSBAQAogICAgIH0KIAogICAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0VNVUxBVEVfSU9DUCkgewotICAgICAgaWYgKCFyZXEtPmV2ZW50X2hhbmRsZSkgewotICAgICAgICByZXEtPmV2ZW50X2hhbmRsZSA9IENyZWF0ZUV2ZW50KE5VTEwsIDAsIDAsIE5VTEwpOwotICAgICAgICBpZiAoIXJlcS0+ZXZlbnRfaGFuZGxlKSB7Ci0gICAgICAgICAgdXZfZmF0YWxfZXJyb3IoR2V0TGFzdEVycm9yKCksICJDcmVhdGVFdmVudCIpOwotICAgICAgICB9Ci0gICAgICB9CiAgICAgICBpZiAocmVxLT53YWl0X2hhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewogICAgICAgICBpZiAoIVJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmcmVxLT53YWl0X2hhbmRsZSwKLSAgICAgICAgICAgIHJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCwgcG9zdF9jb21wbGV0aW9uX3JlYWRfd2FpdCwgKHZvaWQqKSByZXEsCisgICAgICAgICAgICByZXEtPmV2ZW50X2hhbmRsZSwgcG9zdF9jb21wbGV0aW9uX3JlYWRfd2FpdCwgKHZvaWQqKSByZXEsCiAgICAgICAgICAgICBJTkZJTklURSwgV1RfRVhFQ1VURUlOV0FJVFRIUkVBRCkpIHsKICAgICAgICAgICBTRVRfUkVRX0VSUk9SKHJlcSwgR2V0TGFzdEVycm9yKCkpOwogICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xMTkwLDggKzExODgsMTYgQEAKIAogICAvKiBJZiByZWFkaW5nIHdhcyBzdG9wcGVkIGFuZCB0aGVuIHN0YXJ0ZWQgYWdhaW4sIHRoZXJlIGNvdWxkIHN0aWxsIGJlIGEgcmVhZAogICAgKiByZXF1ZXN0IHBlbmRpbmcuICovCi0gIGlmICghKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfUkVBRF9QRU5ESU5HKSkKKyAgaWYgKCEoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9SRUFEX1BFTkRJTkcpKSB7CisgICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfRU1VTEFURV9JT0NQICYmCisgICAgICAgIGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlID09IE5VTEwpIHsKKyAgICAgIGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlID0gQ3JlYXRlRXZlbnQoTlVMTCwgMCwgMCwgTlVMTCk7CisgICAgICBpZiAoaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUgPT0gTlVMTCkgeworICAgICAgICB1dl9mYXRhbF9lcnJvcihHZXRMYXN0RXJyb3IoKSwgIkNyZWF0ZUV2ZW50Iik7CisgICAgICB9CisgICAgfQogICAgIHV2X3BpcGVfcXVldWVfcmVhZChsb29wLCBoYW5kbGUpOworICB9CiAKICAgcmV0dXJuIDA7CiB9CkBAIC0xMzI2LDcgKzEzMzIsMTYgQEAKICAgcmVxLT5jb2FsZXNjZWQgPSAwOwogICByZXEtPmV2ZW50X2hhbmRsZSA9IE5VTEw7CiAgIHJlcS0+d2FpdF9oYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKworICAvKiBQcmVwYXJlIHRoZSBvdmVybGFwcGVkIHN0cnVjdHVyZS4gKi8KICAgbWVtc2V0KCZyZXEtPnUuaW8ub3ZlcmxhcHBlZCwgMCwgc2l6ZW9mKHJlcS0+dS5pby5vdmVybGFwcGVkKSk7CisgIGlmIChoYW5kbGUtPmZsYWdzICYgKFVWX0hBTkRMRV9FTVVMQVRFX0lPQ1AgfCBVVl9IQU5ETEVfQkxPQ0tJTkdfV1JJVEVTKSkgeworICAgIHJlcS0+ZXZlbnRfaGFuZGxlID0gQ3JlYXRlRXZlbnQoTlVMTCwgMCwgMCwgTlVMTCk7CisgICAgaWYgKHJlcS0+ZXZlbnRfaGFuZGxlID09IE5VTEwpIHsKKyAgICAgIHV2X2ZhdGFsX2Vycm9yKEdldExhc3RFcnJvcigpLCAiQ3JlYXRlRXZlbnQiKTsKKyAgICB9CisgICAgcmVxLT51LmlvLm92ZXJsYXBwZWQuaEV2ZW50ID0gKEhBTkRMRSkgKCh1aW50cHRyX3QpIHJlcS0+ZXZlbnRfaGFuZGxlIHwgMSk7CisgIH0KICAgcmVxLT53cml0ZV9idWZmZXIgPSB1dl9udWxsX2J1Zl87CiAKICAgaWYgKG5idWZzID09IDApIHsKQEAgLTEzNzUsMTEgKzEzOTAsNiBAQAogICAgIGhhbmRsZS0+d3JpdGVfcXVldWVfc2l6ZSArPSByZXEtPnUuaW8ucXVldWVkX2J5dGVzOwogICB9IGVsc2UgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfQkxPQ0tJTkdfV1JJVEVTKSB7CiAgICAgLyogVXNpbmcgb3ZlcmxhcHBlZCBJTywgYnV0IHdhaXQgZm9yIGNvbXBsZXRpb24gYmVmb3JlIHJldHVybmluZyAqLwotICAgIHJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIDEsIDAsIE5VTEwpOwotICAgIGlmICghcmVxLT51LmlvLm92ZXJsYXBwZWQuaEV2ZW50KSB7Ci0gICAgICB1dl9mYXRhbF9lcnJvcihHZXRMYXN0RXJyb3IoKSwgIkNyZWF0ZUV2ZW50Iik7Ci0gICAgfQotCiAgICAgcmVzdWx0ID0gV3JpdGVGaWxlKGhhbmRsZS0+aGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9idWYuYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfYnVmLmxlbiwKQEAgLTEzODgsNyArMTM5OCw4IEBACiAKICAgICBpZiAoIXJlc3VsdCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9JT19QRU5ESU5HKSB7CiAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgIENsb3NlSGFuZGxlKHJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCk7CisgICAgICBDbG9zZUhhbmRsZShyZXEtPmV2ZW50X2hhbmRsZSk7CisgICAgICByZXEtPmV2ZW50X2hhbmRsZSA9IE5VTEw7CiAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIApAQCAtMTM5OSwxNCArMTQxMCwxNiBAQAogICAgICAgLyogUmVxdWVzdCBxdWV1ZWQgYnkgdGhlIGtlcm5lbC4gKi8KICAgICAgIHJlcS0+dS5pby5xdWV1ZWRfYnl0ZXMgPSB3cml0ZV9idWYubGVuOwogICAgICAgaGFuZGxlLT53cml0ZV9xdWV1ZV9zaXplICs9IHJlcS0+dS5pby5xdWV1ZWRfYnl0ZXM7Ci0gICAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChyZXEtPnUuaW8ub3ZlcmxhcHBlZC5oRXZlbnQsIElORklOSVRFKSAhPQorICAgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3QocmVxLT5ldmVudF9oYW5kbGUsIElORklOSVRFKSAhPQogICAgICAgICAgIFdBSVRfT0JKRUNUXzApIHsKICAgICAgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIENsb3NlSGFuZGxlKHJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCk7CisgICAgICAgIENsb3NlSGFuZGxlKHJlcS0+ZXZlbnRfaGFuZGxlKTsKKyAgICAgICAgcmVxLT5ldmVudF9oYW5kbGUgPSBOVUxMOwogICAgICAgICByZXR1cm4gZXJyOwogICAgICAgfQogICAgIH0KLSAgICBDbG9zZUhhbmRsZShyZXEtPnUuaW8ub3ZlcmxhcHBlZC5oRXZlbnQpOworICAgIENsb3NlSGFuZGxlKHJlcS0+ZXZlbnRfaGFuZGxlKTsKKyAgICByZXEtPmV2ZW50X2hhbmRsZSA9IE5VTEw7CiAKICAgICBSRUdJU1RFUl9IQU5ETEVfUkVRKGxvb3AsIGhhbmRsZSwgcmVxKTsKICAgICBoYW5kbGUtPnJlcXNfcGVuZGluZysrOwpAQCAtMTQzMywxMiArMTQ0Niw4IEBACiAgICAgfQogCiAgICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfRU1VTEFURV9JT0NQKSB7Ci0gICAgICByZXEtPmV2ZW50X2hhbmRsZSA9IENyZWF0ZUV2ZW50KE5VTEwsIDAsIDAsIE5VTEwpOwotICAgICAgaWYgKCFyZXEtPmV2ZW50X2hhbmRsZSkgewotICAgICAgICB1dl9mYXRhbF9lcnJvcihHZXRMYXN0RXJyb3IoKSwgIkNyZWF0ZUV2ZW50Iik7Ci0gICAgICB9CiAgICAgICBpZiAoIVJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmcmVxLT53YWl0X2hhbmRsZSwKLSAgICAgICAgICByZXEtPnUuaW8ub3ZlcmxhcHBlZC5oRXZlbnQsIHBvc3RfY29tcGxldGlvbl93cml0ZV93YWl0LCAodm9pZCopIHJlcSwKKyAgICAgICAgICByZXEtPmV2ZW50X2hhbmRsZSwgcG9zdF9jb21wbGV0aW9uX3dyaXRlX3dhaXQsICh2b2lkKikgcmVxLAogICAgICAgICAgIElORklOSVRFLCBXVF9FWEVDVVRFSU5XQUlUVEhSRUFEKSkgewogICAgICAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7CiAgICAgICB9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3BvbGwuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vcG9sbC5jCmluZGV4IDNjNjY3ODYuLjg3ODU4NTkgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vcG9sbC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vcG9sbC5jCkBAIC0xMzQsMzIgKzEzNCw2IEBACiB9CiAKIAotc3RhdGljIGludCB1dl9fZmFzdF9wb2xsX2NhbmNlbF9wb2xsX3JlcSh1dl9sb29wX3QqIGxvb3AsIHV2X3BvbGxfdCogaGFuZGxlKSB7Ci0gIEFGRF9QT0xMX0lORk8gYWZkX3BvbGxfaW5mbzsKLSAgaW50IHJlc3VsdDsKLQotICBhZmRfcG9sbF9pbmZvLkV4Y2x1c2l2ZSA9IFRSVUU7Ci0gIGFmZF9wb2xsX2luZm8uTnVtYmVyT2ZIYW5kbGVzID0gMTsKLSAgYWZkX3BvbGxfaW5mby5UaW1lb3V0LlF1YWRQYXJ0ID0gSU5UNjRfTUFYOwotICBhZmRfcG9sbF9pbmZvLkhhbmRsZXNbMF0uSGFuZGxlID0gKEhBTkRMRSkgaGFuZGxlLT5zb2NrZXQ7Ci0gIGFmZF9wb2xsX2luZm8uSGFuZGxlc1swXS5TdGF0dXMgPSAwOwotICBhZmRfcG9sbF9pbmZvLkhhbmRsZXNbMF0uRXZlbnRzID0gQUZEX1BPTExfQUxMOwotCi0gIHJlc3VsdCA9IHV2X21zYWZkX3BvbGwoaGFuZGxlLT5zb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmFmZF9wb2xsX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXZfX2dldF9hZmRfcG9sbF9pbmZvX2R1bW15KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXZfX2dldF9vdmVybGFwcGVkX2R1bW15KCkpOwotCi0gIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKSB7Ci0gICAgRFdPUkQgZXJyb3IgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLSAgICBpZiAoZXJyb3IgIT0gV1NBX0lPX1BFTkRJTkcpCi0gICAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgdm9pZCB1dl9fZmFzdF9wb2xsX3Byb2Nlc3NfcG9sbF9yZXEodXZfbG9vcF90KiBsb29wLCB1dl9wb2xsX3QqIGhhbmRsZSwKICAgICB1dl9yZXFfdCogcmVxKSB7CiAgIHVuc2lnbmVkIGNoYXIgbWFza19ldmVudHM7CkBAIC0yMjYsNDQgKzIwMCw2IEBACiB9CiAKIAotc3RhdGljIGludCB1dl9fZmFzdF9wb2xsX3NldCh1dl9sb29wX3QqIGxvb3AsIHV2X3BvbGxfdCogaGFuZGxlLCBpbnQgZXZlbnRzKSB7Ci0gIGFzc2VydChoYW5kbGUtPnR5cGUgPT0gVVZfUE9MTCk7Ci0gIGFzc2VydCghKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfQ0xPU0lORykpOwotICBhc3NlcnQoKGV2ZW50cyAmIH4oVVZfUkVBREFCTEUgfCBVVl9XUklUQUJMRSB8IFVWX0RJU0NPTk5FQ1QpKSA9PSAwKTsKLQotICBoYW5kbGUtPmV2ZW50cyA9IGV2ZW50czsKLQotICBpZiAoaGFuZGxlLT5ldmVudHMgIT0gMCkgewotICAgIHV2X19oYW5kbGVfc3RhcnQoaGFuZGxlKTsKLSAgfSBlbHNlIHsKLSAgICB1dl9faGFuZGxlX3N0b3AoaGFuZGxlKTsKLSAgfQotCi0gIGlmICgoaGFuZGxlLT5ldmVudHMgJiB+KGhhbmRsZS0+c3VibWl0dGVkX2V2ZW50c18xIHwKLSAgICAgIGhhbmRsZS0+c3VibWl0dGVkX2V2ZW50c18yKSkgIT0gMCkgewotICAgIHV2X19mYXN0X3BvbGxfc3VibWl0X3BvbGxfcmVxKGhhbmRsZS0+bG9vcCwgaGFuZGxlKTsKLSAgfQotCi0gIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgdXZfX2Zhc3RfcG9sbF9jbG9zZSh1dl9sb29wX3QqIGxvb3AsIHV2X3BvbGxfdCogaGFuZGxlKSB7Ci0gIGhhbmRsZS0+ZXZlbnRzID0gMDsKLSAgdXZfX2hhbmRsZV9jbG9zaW5nKGhhbmRsZSk7Ci0KLSAgaWYgKGhhbmRsZS0+c3VibWl0dGVkX2V2ZW50c18xID09IDAgJiYKLSAgICAgIGhhbmRsZS0+c3VibWl0dGVkX2V2ZW50c18yID09IDApIHsKLSAgICB1dl93YW50X2VuZGdhbWUobG9vcCwgKHV2X2hhbmRsZV90KikgaGFuZGxlKTsKLSAgICByZXR1cm4gMDsKLSAgfSBlbHNlIHsKLSAgICAvKiBDYW5jZWwgb3V0c3RhbmRpbmcgcG9sbCByZXF1ZXN0cyBieSBleGVjdXRpbmcgYW5vdGhlciwgdW5pcXVlIHBvbGwKLSAgICAgKiByZXF1ZXN0IHRoYXQgZm9yY2VzIHRoZSBvdXRzdGFuZGluZyBvbmVzIHRvIHJldHVybi4gKi8KLSAgICByZXR1cm4gdXZfX2Zhc3RfcG9sbF9jYW5jZWxfcG9sbF9yZXEobG9vcCwgaGFuZGxlKTsKLSAgfQotfQotCi0KIHN0YXRpYyBTT0NLRVQgdXZfX2Zhc3RfcG9sbF9jcmVhdGVfcGVlcl9zb2NrZXQoSEFORExFIGlvY3AsCiAgICAgV1NBUFJPVE9DT0xfSU5GT1cqIHByb3RvY29sX2luZm8pIHsKICAgU09DS0VUIHNvY2sgPSAwOwpAQCAtNDY5LDQxICs0MDUsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgdXZfX3Nsb3dfcG9sbF9zZXQodXZfbG9vcF90KiBsb29wLCB1dl9wb2xsX3QqIGhhbmRsZSwgaW50IGV2ZW50cykgewotICBhc3NlcnQoaGFuZGxlLT50eXBlID09IFVWX1BPTEwpOwotICBhc3NlcnQoIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0NMT1NJTkcpKTsKLSAgYXNzZXJ0KChldmVudHMgJiB+KFVWX1JFQURBQkxFIHwgVVZfV1JJVEFCTEUpKSA9PSAwKTsKLQotICBoYW5kbGUtPmV2ZW50cyA9IGV2ZW50czsKLQotICBpZiAoaGFuZGxlLT5ldmVudHMgIT0gMCkgewotICAgIHV2X19oYW5kbGVfc3RhcnQoaGFuZGxlKTsKLSAgfSBlbHNlIHsKLSAgICB1dl9faGFuZGxlX3N0b3AoaGFuZGxlKTsKLSAgfQotCi0gIGlmICgoaGFuZGxlLT5ldmVudHMgJgotICAgICAgfihoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMSB8IGhhbmRsZS0+c3VibWl0dGVkX2V2ZW50c18yKSkgIT0gMCkgewotICAgIHV2X19zbG93X3BvbGxfc3VibWl0X3BvbGxfcmVxKGhhbmRsZS0+bG9vcCwgaGFuZGxlKTsKLSAgfQotCi0gIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgdXZfX3Nsb3dfcG9sbF9jbG9zZSh1dl9sb29wX3QqIGxvb3AsIHV2X3BvbGxfdCogaGFuZGxlKSB7Ci0gIGhhbmRsZS0+ZXZlbnRzID0gMDsKLSAgdXZfX2hhbmRsZV9jbG9zaW5nKGhhbmRsZSk7Ci0KLSAgaWYgKGhhbmRsZS0+c3VibWl0dGVkX2V2ZW50c18xID09IDAgJiYKLSAgICAgIGhhbmRsZS0+c3VibWl0dGVkX2V2ZW50c18yID09IDApIHsKLSAgICB1dl93YW50X2VuZGdhbWUobG9vcCwgKHV2X2hhbmRsZV90KikgaGFuZGxlKTsKLSAgfQotCi0gIHJldHVybiAwOwotfQotCi0KIGludCB1dl9wb2xsX2luaXQodXZfbG9vcF90KiBsb29wLCB1dl9wb2xsX3QqIGhhbmRsZSwgaW50IGZkKSB7CiAgIHJldHVybiB1dl9wb2xsX2luaXRfc29ja2V0KGxvb3AsIGhhbmRsZSwgKFNPQ0tFVCkgdXZfX2dldF9vc2ZoYW5kbGUoZmQpKTsKIH0KQEAgLTU4MiwzNSArNDgzLDQzIEBACiB9CiAKIAotaW50IHV2X3BvbGxfc3RhcnQodXZfcG9sbF90KiBoYW5kbGUsIGludCBldmVudHMsIHV2X3BvbGxfY2IgY2IpIHsKLSAgaW50IGVycjsKK3N0YXRpYyBpbnQgdXZfX3BvbGxfc2V0KHV2X3BvbGxfdCogaGFuZGxlLCBpbnQgZXZlbnRzLCB1dl9wb2xsX2NiIGNiKSB7CisgIGludCBzdWJtaXR0ZWRfZXZlbnRzOwogCi0gIGlmICghKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfUE9MTF9TTE9XKSkgewotICAgIGVyciA9IHV2X19mYXN0X3BvbGxfc2V0KGhhbmRsZS0+bG9vcCwgaGFuZGxlLCBldmVudHMpOwotICB9IGVsc2UgewotICAgIGVyciA9IHV2X19zbG93X3BvbGxfc2V0KGhhbmRsZS0+bG9vcCwgaGFuZGxlLCBldmVudHMpOwotICB9CisgIGFzc2VydChoYW5kbGUtPnR5cGUgPT0gVVZfUE9MTCk7CisgIGFzc2VydCghKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfQ0xPU0lORykpOworICBhc3NlcnQoKGV2ZW50cyAmIH4oVVZfUkVBREFCTEUgfCBVVl9XUklUQUJMRSB8IFVWX0RJU0NPTk5FQ1QpKSA9PSAwKTsKIAotICBpZiAoZXJyKSB7Ci0gICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKLSAgfQotCisgIGhhbmRsZS0+ZXZlbnRzID0gZXZlbnRzOwogICBoYW5kbGUtPnBvbGxfY2IgPSBjYjsKIAorICBpZiAoaGFuZGxlLT5ldmVudHMgPT0gMCkgeworICAgIHV2X19oYW5kbGVfc3RvcChoYW5kbGUpOworICAgIHJldHVybiAwOworICB9CisKKyAgdXZfX2hhbmRsZV9zdGFydChoYW5kbGUpOworICBzdWJtaXR0ZWRfZXZlbnRzID0gaGFuZGxlLT5zdWJtaXR0ZWRfZXZlbnRzXzEgfCBoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMjsKKworICBpZiAoaGFuZGxlLT5ldmVudHMgJiB+c3VibWl0dGVkX2V2ZW50cykgeworICAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1BPTExfU0xPVykgeworICAgICAgdXZfX3Nsb3dfcG9sbF9zdWJtaXRfcG9sbF9yZXEoaGFuZGxlLT5sb29wLCBoYW5kbGUpOworICAgIH0gZWxzZSB7CisgICAgICB1dl9fZmFzdF9wb2xsX3N1Ym1pdF9wb2xsX3JlcShoYW5kbGUtPmxvb3AsIGhhbmRsZSk7CisgICAgfQorICB9CisKICAgcmV0dXJuIDA7CiB9CiAKIAoraW50IHV2X3BvbGxfc3RhcnQodXZfcG9sbF90KiBoYW5kbGUsIGludCBldmVudHMsIHV2X3BvbGxfY2IgY2IpIHsKKyAgcmV0dXJuIHV2X19wb2xsX3NldChoYW5kbGUsIGV2ZW50cywgY2IpOworfQorCisKIGludCB1dl9wb2xsX3N0b3AodXZfcG9sbF90KiBoYW5kbGUpIHsKLSAgaW50IGVycjsKLQotICBpZiAoIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1BPTExfU0xPVykpIHsKLSAgICBlcnIgPSB1dl9fZmFzdF9wb2xsX3NldChoYW5kbGUtPmxvb3AsIGhhbmRsZSwgMCk7Ci0gIH0gZWxzZSB7Ci0gICAgZXJyID0gdXZfX3Nsb3dfcG9sbF9zZXQoaGFuZGxlLT5sb29wLCBoYW5kbGUsIDApOwotICB9Ci0KLSAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKyAgcmV0dXJuIHV2X19wb2xsX3NldChoYW5kbGUsIDAsIGhhbmRsZS0+cG9sbF9jYik7CiB9CiAKIApAQCAtNjI0LDExICs1MzMsNDMgQEAKIAogCiBpbnQgdXZfcG9sbF9jbG9zZSh1dl9sb29wX3QqIGxvb3AsIHV2X3BvbGxfdCogaGFuZGxlKSB7Ci0gIGlmICghKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfUE9MTF9TTE9XKSkgewotICAgIHJldHVybiB1dl9fZmFzdF9wb2xsX2Nsb3NlKGxvb3AsIGhhbmRsZSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHV2X19zbG93X3BvbGxfY2xvc2UobG9vcCwgaGFuZGxlKTsKKyAgQUZEX1BPTExfSU5GTyBhZmRfcG9sbF9pbmZvOworICBEV09SRCBlcnJvcjsKKyAgaW50IHJlc3VsdDsKKworICBoYW5kbGUtPmV2ZW50cyA9IDA7CisgIHV2X19oYW5kbGVfY2xvc2luZyhoYW5kbGUpOworCisgIGlmIChoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMSA9PSAwICYmCisgICAgICBoYW5kbGUtPnN1Ym1pdHRlZF9ldmVudHNfMiA9PSAwKSB7CisgICAgdXZfd2FudF9lbmRnYW1lKGxvb3AsICh1dl9oYW5kbGVfdCopIGhhbmRsZSk7CisgICAgcmV0dXJuIDA7CiAgIH0KKworICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9QT0xMX1NMT1cpCisgICAgcmV0dXJuIDA7CisKKyAgLyogQ2FuY2VsIG91dHN0YW5kaW5nIHBvbGwgcmVxdWVzdHMgYnkgZXhlY3V0aW5nIGFub3RoZXIsIHVuaXF1ZSBwb2xsCisgICAqIHJlcXVlc3QgdGhhdCBmb3JjZXMgdGhlIG91dHN0YW5kaW5nIG9uZXMgdG8gcmV0dXJuLiAqLworICBhZmRfcG9sbF9pbmZvLkV4Y2x1c2l2ZSA9IFRSVUU7CisgIGFmZF9wb2xsX2luZm8uTnVtYmVyT2ZIYW5kbGVzID0gMTsKKyAgYWZkX3BvbGxfaW5mby5UaW1lb3V0LlF1YWRQYXJ0ID0gSU5UNjRfTUFYOworICBhZmRfcG9sbF9pbmZvLkhhbmRsZXNbMF0uSGFuZGxlID0gKEhBTkRMRSkgaGFuZGxlLT5zb2NrZXQ7CisgIGFmZF9wb2xsX2luZm8uSGFuZGxlc1swXS5TdGF0dXMgPSAwOworICBhZmRfcG9sbF9pbmZvLkhhbmRsZXNbMF0uRXZlbnRzID0gQUZEX1BPTExfQUxMOworCisgIHJlc3VsdCA9IHV2X21zYWZkX3BvbGwoaGFuZGxlLT5zb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmFmZF9wb2xsX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgdXZfX2dldF9hZmRfcG9sbF9pbmZvX2R1bW15KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdXZfX2dldF9vdmVybGFwcGVkX2R1bW15KCkpOworCisgIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgZXJyb3IgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gV1NBX0lPX1BFTkRJTkcpCisgICAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihlcnJvcik7CisgIH0KKworICByZXR1cm4gMDsKIH0KIAogCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3Byb2Nlc3MuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vcHJvY2Vzcy5jCmluZGV4IDI0MDM3YjMuLjA0NzE4ZGIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vcHJvY2Vzcy5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vcHJvY2Vzcy5jCkBAIC01OCw3ICs1OCw2IEBACiAgIEVfVigiVVNFUlBST0ZJTEUiKSwKICAgRV9WKCJXSU5ESVIiKSwKIH07Ci1zdGF0aWMgc2l6ZV90IG5fcmVxdWlyZWRfdmFycyA9IEFSUkFZX1NJWkUocmVxdWlyZWRfdmFycyk7CiAKIAogc3RhdGljIEhBTkRMRSB1dl9nbG9iYWxfam9iX2hhbmRsZV87CkBAIC02OTIsNyArNjkxLDcgQEAKICAgV0NIQVIqIGRzdF9jb3B5OwogICBXQ0hBUioqIHB0cl9jb3B5OwogICBXQ0hBUioqIGVudl9jb3B5OwotICBEV09SRCogcmVxdWlyZWRfdmFyc192YWx1ZV9sZW4gPSBhbGxvY2Eobl9yZXF1aXJlZF92YXJzICogc2l6ZW9mKERXT1JEKikpOworICBEV09SRCByZXF1aXJlZF92YXJzX3ZhbHVlX2xlbltBUlJBWV9TSVpFKHJlcXVpcmVkX3ZhcnMpXTsKIAogICAvKiBmaXJzdCBwYXNzOiBkZXRlcm1pbmUgc2l6ZSBpbiBVVEYtMTYgKi8KICAgZm9yIChlbnYgPSBlbnZfYmxvY2s7ICplbnY7IGVudisrKSB7CkBAIC03MTQsNyArNzEzLDcgQEAKIAogICAvKiBzZWNvbmQgcGFzczogY29weSB0byBVVEYtMTYgZW52aXJvbm1lbnQgYmxvY2sgKi8KICAgZHN0X2NvcHkgPSAoV0NIQVIqKXV2X19tYWxsb2MoZW52X2xlbiAqIHNpemVvZihXQ0hBUikpOwotICBpZiAoIWRzdF9jb3B5KSB7CisgIGlmIChkc3RfY29weSA9PSBOVUxMICYmIGVudl9sZW4gPiAwKSB7CiAgICAgcmV0dXJuIEVSUk9SX09VVE9GTUVNT1JZOwogICB9CiAgIGVudl9jb3B5ID0gYWxsb2NhKGVudl9ibG9ja19jb3VudCAqIHNpemVvZihXQ0hBUiopKTsKQEAgLTczOSwxMyArNzM4LDEzIEBACiAgICAgfQogICB9CiAgICpwdHJfY29weSA9IE5VTEw7Ci0gIGFzc2VydChlbnZfbGVuID09IChzaXplX3QpIChwdHIgLSBkc3RfY29weSkpOworICBhc3NlcnQoZW52X2xlbiA9PSAwIHx8IGVudl9sZW4gPT0gKHNpemVfdCkgKHB0ciAtIGRzdF9jb3B5KSk7CiAKICAgLyogc29ydCBvdXIgKFVURi0xNikgY29weSAqLwogICBxc29ydChlbnZfY29weSwgZW52X2Jsb2NrX2NvdW50LTEsIHNpemVvZih3Y2hhcl90KiksIHFzb3J0X3djc2NtcCk7CiAKICAgLyogdGhpcmQgcGFzczogY2hlY2sgZm9yIHJlcXVpcmVkIHZhcmlhYmxlcyAqLwotICBmb3IgKHB0cl9jb3B5ID0gZW52X2NvcHksIGkgPSAwOyBpIDwgbl9yZXF1aXJlZF92YXJzOyApIHsKKyAgZm9yIChwdHJfY29weSA9IGVudl9jb3B5LCBpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVxdWlyZWRfdmFycyk7ICkgewogICAgIGludCBjbXA7CiAgICAgaWYgKCEqcHRyX2NvcHkpIHsKICAgICAgIGNtcCA9IC0xOwpAQCAtNzc4LDEwICs3NzcsMTAgQEAKICAgfQogCiAgIGZvciAocHRyID0gZHN0LCBwdHJfY29weSA9IGVudl9jb3B5LCBpID0gMDsKLSAgICAgICAqcHRyX2NvcHkgfHwgaSA8IG5fcmVxdWlyZWRfdmFyczsKKyAgICAgICAqcHRyX2NvcHkgfHwgaSA8IEFSUkFZX1NJWkUocmVxdWlyZWRfdmFycyk7CiAgICAgICAgcHRyICs9IGxlbikgewogICAgIGludCBjbXA7Ci0gICAgaWYgKGkgPj0gbl9yZXF1aXJlZF92YXJzKSB7CisgICAgaWYgKGkgPj0gQVJSQVlfU0laRShyZXF1aXJlZF92YXJzKSkgewogICAgICAgY21wID0gMTsKICAgICB9IGVsc2UgaWYgKCEqcHRyX2NvcHkpIHsKICAgICAgIGNtcCA9IC0xOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9zaWduYWwuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vc2lnbmFsLmMKaW5kZXggMjc2ZGM2MC4uM2Q5ZjkyYyAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9zaWduYWwuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3NpZ25hbC5jCkBAIC00Niw2ICs0NiwxMSBAQAogfQogCiAKK3ZvaWQgdXZfX3NpZ25hbF9jbGVhbnVwKHZvaWQpIHsKKyAgLyogVE9ETyhibm9vcmRodWlzKSBVbmRvIGVmZmVjdHMgb2YgdXZfc2lnbmFsX2luaXQoKT8gKi8KK30KKworCiBzdGF0aWMgaW50IHV2X19zaWduYWxfY29tcGFyZSh1dl9zaWduYWxfdCogdzEsIHV2X3NpZ25hbF90KiB3MikgewogICAvKiBDb21wYXJlIHNpZ251bXMgZmlyc3Qgc28gYWxsIHdhdGNoZXJzIHdpdGggdGhlIHNhbWUgc2lnbm51bSBlbmQgdXAKICAgICogYWRqYWNlbnQuICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3N0cmVhbS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi9zdHJlYW0uYwppbmRleCA3NjU2NjI3Li40NmEwNzA5IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3N0cmVhbS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vc3RyZWFtLmMKQEAgLTE5OCw4ICsxOTgsMTAgQEAKIGludCB1dl9zaHV0ZG93bih1dl9zaHV0ZG93bl90KiByZXEsIHV2X3N0cmVhbV90KiBoYW5kbGUsIHV2X3NodXRkb3duX2NiIGNiKSB7CiAgIHV2X2xvb3BfdCogbG9vcCA9IGhhbmRsZS0+bG9vcDsKIAotICBpZiAoIShoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1dSSVRBQkxFKSkgewotICAgIHJldHVybiBVVl9FUElQRTsKKyAgaWYgKCEoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9XUklUQUJMRSkgfHwKKyAgICAgIGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfU0hVVFRJTkcgfHwKKyAgICAgIHV2X19pc19jbG9zaW5nKGhhbmRsZSkpIHsKKyAgICByZXR1cm4gVVZfRU5PVENPTk47CiAgIH0KIAogICBVVl9SRVFfSU5JVChyZXEsIFVWX1NIVVRET1dOKTsKQEAgLTIwNyw2ICsyMDksNyBAQAogICByZXEtPmNiID0gY2I7CiAKICAgaGFuZGxlLT5mbGFncyAmPSB+VVZfSEFORExFX1dSSVRBQkxFOworICBoYW5kbGUtPmZsYWdzIHw9IFVWX0hBTkRMRV9TSFVUVElORzsKICAgaGFuZGxlLT5zdHJlYW0uY29ubi5zaHV0ZG93bl9yZXEgPSByZXE7CiAgIGhhbmRsZS0+cmVxc19wZW5kaW5nKys7CiAgIFJFR0lTVEVSX0hBTkRMRV9SRVEobG9vcCwgaGFuZGxlLCByZXEpOwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi90Y3AuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdGNwLmMKaW5kZXggZjJjYjUyNy4uOTQxYzgwMSAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi90Y3AuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3RjcC5jCkBAIC0yNTEsNyArMjUxLDcgQEAKICAgICAgICAgICAgIFVucmVnaXN0ZXJXYWl0KHJlcS0+d2FpdF9oYW5kbGUpOwogICAgICAgICAgICAgcmVxLT53YWl0X2hhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocmVxLT5ldmVudF9oYW5kbGUpIHsKKyAgICAgICAgICBpZiAocmVxLT5ldmVudF9oYW5kbGUgIT0gTlVMTCkgewogICAgICAgICAgICAgQ2xvc2VIYW5kbGUocmVxLT5ldmVudF9oYW5kbGUpOwogICAgICAgICAgICAgcmVxLT5ldmVudF9oYW5kbGUgPSBOVUxMOwogICAgICAgICAgIH0KQEAgLTI2OCw3ICsyNjgsNyBAQAogICAgICAgICBVbnJlZ2lzdGVyV2FpdChoYW5kbGUtPnJlYWRfcmVxLndhaXRfaGFuZGxlKTsKICAgICAgICAgaGFuZGxlLT5yZWFkX3JlcS53YWl0X2hhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICAgICAgfQotICAgICAgaWYgKGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlKSB7CisgICAgICBpZiAoaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUgIT0gTlVMTCkgewogICAgICAgICBDbG9zZUhhbmRsZShoYW5kbGUtPnJlYWRfcmVxLmV2ZW50X2hhbmRsZSk7CiAgICAgICAgIGhhbmRsZS0+cmVhZF9yZXEuZXZlbnRfaGFuZGxlID0gTlVMTDsKICAgICAgIH0KQEAgLTQyOCw2ICs0MjgsNyBAQAogICAvKiBQcmVwYXJlIHRoZSBvdmVybGFwcGVkIHN0cnVjdHVyZS4gKi8KICAgbWVtc2V0KCYocmVxLT51LmlvLm92ZXJsYXBwZWQpLCAwLCBzaXplb2YocmVxLT51LmlvLm92ZXJsYXBwZWQpKTsKICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfRU1VTEFURV9JT0NQKSB7CisgICAgYXNzZXJ0KHJlcS0+ZXZlbnRfaGFuZGxlICE9IE5VTEwpOwogICAgIHJlcS0+dS5pby5vdmVybGFwcGVkLmhFdmVudCA9IChIQU5ETEUpICgoVUxPTkdfUFRSKSByZXEtPmV2ZW50X2hhbmRsZSB8IDEpOwogICB9CiAKQEAgLTQ2Niw3ICs0NjcsNyBAQAogICAgIGNsb3Nlc29ja2V0KGFjY2VwdF9zb2NrZXQpOwogICAgIC8qIERlc3Ryb3kgdGhlIGV2ZW50IGhhbmRsZSAqLwogICAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0VNVUxBVEVfSU9DUCkgewotICAgICAgQ2xvc2VIYW5kbGUocmVxLT51LmlvLm92ZXJsYXBwZWQuaEV2ZW50KTsKKyAgICAgIENsb3NlSGFuZGxlKHJlcS0+ZXZlbnRfaGFuZGxlKTsKICAgICAgIHJlcS0+ZXZlbnRfaGFuZGxlID0gTlVMTDsKICAgICB9CiAgIH0KQEAgLTUwOSw3ICs1MTAsNyBAQAogICAvKiBQcmVwYXJlIHRoZSBvdmVybGFwcGVkIHN0cnVjdHVyZS4gKi8KICAgbWVtc2V0KCYocmVxLT51LmlvLm92ZXJsYXBwZWQpLCAwLCBzaXplb2YocmVxLT51LmlvLm92ZXJsYXBwZWQpKTsKICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfRU1VTEFURV9JT0NQKSB7Ci0gICAgYXNzZXJ0KHJlcS0+ZXZlbnRfaGFuZGxlKTsKKyAgICBhc3NlcnQocmVxLT5ldmVudF9oYW5kbGUgIT0gTlVMTCk7CiAgICAgcmVxLT51LmlvLm92ZXJsYXBwZWQuaEV2ZW50ID0gKEhBTkRMRSkgKChVTE9OR19QVFIpIHJlcS0+ZXZlbnRfaGFuZGxlIHwgMSk7CiAgIH0KIApAQCAtNTQ5LDYgKzU1MCwyMSBAQAogfQogCiAKK2ludCB1dl90Y3BfY2xvc2VfcmVzZXQodXZfdGNwX3QqIGhhbmRsZSwgdXZfY2xvc2VfY2IgY2xvc2VfY2IpIHsKKyAgc3RydWN0IGxpbmdlciBsID0geyAxLCAwIH07CisKKyAgLyogRGlzYWxsb3cgc2V0dGluZyBTT19MSU5HRVIgdG8gemVybyBkdWUgdG8gc29tZSBwbGF0Zm9ybSBpbmNvbnNpc3RlbmNpZXMgKi8KKyAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfU0hVVFRJTkcpCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKworICBpZiAoMCAhPSBzZXRzb2Nrb3B0KGhhbmRsZS0+c29ja2V0LCBTT0xfU09DS0VULCBTT19MSU5HRVIsIChjb25zdCBjaGFyKikmbCwgc2l6ZW9mKGwpKSkKKyAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihXU0FHZXRMYXN0RXJyb3IoKSk7CisKKyAgdXZfY2xvc2UoKHV2X2hhbmRsZV90KikgaGFuZGxlLCBjbG9zZV9jYik7CisgIHJldHVybiAwOworfQorCisKIGludCB1dl90Y3BfbGlzdGVuKHV2X3RjcF90KiBoYW5kbGUsIGludCBiYWNrbG9nLCB1dl9jb25uZWN0aW9uX2NiIGNiKSB7CiAgIHVuc2lnbmVkIGludCBpLCBzaW11bHRhbmVvdXNfYWNjZXB0czsKICAgdXZfdGNwX2FjY2VwdF90KiByZXE7CkBAIC01OTcsOCArNjEzLDggQEAKICAgc2ltdWx0YW5lb3VzX2FjY2VwdHMgPSBoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX1RDUF9TSU5HTEVfQUNDRVBUID8gMQogICAgIDogdXZfc2ltdWx0YW5lb3VzX3NlcnZlcl9hY2NlcHRzOwogCi0gIGlmKCFoYW5kbGUtPnRjcC5zZXJ2LmFjY2VwdF9yZXFzKSB7Ci0gICAgaGFuZGxlLT50Y3Auc2Vydi5hY2NlcHRfcmVxcyA9ICh1dl90Y3BfYWNjZXB0X3QqKQorICBpZiAoaGFuZGxlLT50Y3Auc2Vydi5hY2NlcHRfcmVxcyA9PSBOVUxMKSB7CisgICAgaGFuZGxlLT50Y3Auc2Vydi5hY2NlcHRfcmVxcyA9CiAgICAgICB1dl9fbWFsbG9jKHV2X3NpbXVsdGFuZW91c19zZXJ2ZXJfYWNjZXB0cyAqIHNpemVvZih1dl90Y3BfYWNjZXB0X3QpKTsKICAgICBpZiAoIWhhbmRsZS0+dGNwLnNlcnYuYWNjZXB0X3JlcXMpIHsKICAgICAgIHV2X2ZhdGFsX2Vycm9yKEVSUk9SX09VVE9GTUVNT1JZLCAidXZfX21hbGxvYyIpOwpAQCAtNjEzLDcgKzYyOSw3IEBACiAgICAgICByZXEtPndhaXRfaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAgICAgICBpZiAoaGFuZGxlLT5mbGFncyAmIFVWX0hBTkRMRV9FTVVMQVRFX0lPQ1ApIHsKICAgICAgICAgcmVxLT5ldmVudF9oYW5kbGUgPSBDcmVhdGVFdmVudChOVUxMLCAwLCAwLCBOVUxMKTsKLSAgICAgICAgaWYgKCFyZXEtPmV2ZW50X2hhbmRsZSkgeworICAgICAgICBpZiAocmVxLT5ldmVudF9oYW5kbGUgPT0gTlVMTCkgewogICAgICAgICAgIHV2X2ZhdGFsX2Vycm9yKEdldExhc3RFcnJvcigpLCAiQ3JlYXRlRXZlbnQiKTsKICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKQEAgLTcyMiw5ICs3MzgsOSBAQAogICAgKiByZXF1ZXN0IHBlbmRpbmcuICovCiAgIGlmICghKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfUkVBRF9QRU5ESU5HKSkgewogICAgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0VNVUxBVEVfSU9DUCAmJgotICAgICAgICAhaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUpIHsKKyAgICAgICAgaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUgPT0gTlVMTCkgewogICAgICAgaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUgPSBDcmVhdGVFdmVudChOVUxMLCAwLCAwLCBOVUxMKTsKLSAgICAgIGlmICghaGFuZGxlLT5yZWFkX3JlcS5ldmVudF9oYW5kbGUpIHsKKyAgICAgIGlmIChoYW5kbGUtPnJlYWRfcmVxLmV2ZW50X2hhbmRsZSA9PSBOVUxMKSB7CiAgICAgICAgIHV2X2ZhdGFsX2Vycm9yKEdldExhc3RFcnJvcigpLCAiQ3JlYXRlRXZlbnQiKTsKICAgICAgIH0KICAgICB9CkBAIC04NDcsNyArODYzLDcgQEAKICAgbWVtc2V0KCYocmVxLT51LmlvLm92ZXJsYXBwZWQpLCAwLCBzaXplb2YocmVxLT51LmlvLm92ZXJsYXBwZWQpKTsKICAgaWYgKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfRU1VTEFURV9JT0NQKSB7CiAgICAgcmVxLT5ldmVudF9oYW5kbGUgPSBDcmVhdGVFdmVudChOVUxMLCAwLCAwLCBOVUxMKTsKLSAgICBpZiAoIXJlcS0+ZXZlbnRfaGFuZGxlKSB7CisgICAgaWYgKHJlcS0+ZXZlbnRfaGFuZGxlID09IE5VTEwpIHsKICAgICAgIHV2X2ZhdGFsX2Vycm9yKEdldExhc3RFcnJvcigpLCAiQ3JlYXRlRXZlbnQiKTsKICAgICB9CiAgICAgcmVxLT51LmlvLm92ZXJsYXBwZWQuaEV2ZW50ID0gKEhBTkRMRSkgKChVTE9OR19QVFIpIHJlcS0+ZXZlbnRfaGFuZGxlIHwgMSk7CkBAIC0xMDY1LDcgKzEwODEsNyBAQAogICAgICAgVW5yZWdpc3RlcldhaXQocmVxLT53YWl0X2hhbmRsZSk7CiAgICAgICByZXEtPndhaXRfaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAgICAgfQotICAgIGlmIChyZXEtPmV2ZW50X2hhbmRsZSkgeworICAgIGlmIChyZXEtPmV2ZW50X2hhbmRsZSAhPSBOVUxMKSB7CiAgICAgICBDbG9zZUhhbmRsZShyZXEtPmV2ZW50X2hhbmRsZSk7CiAgICAgICByZXEtPmV2ZW50X2hhbmRsZSA9IE5VTEw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi90dHkuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdHR5LmMKaW5kZXggYTk4ZmUyNi4uNDg4ZDliMiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi90dHkuYworKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3R0eS5jCkBAIC00NiwxNCArNDYsMTYgQEAKIAogI2RlZmluZSBVTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUiAoMHhmZmZkKQogCi0jZGVmaW5lIEFOU0lfTk9STUFMICAgICAgICAgICAweDAwCi0jZGVmaW5lIEFOU0lfRVNDQVBFX1NFRU4gICAgICAweDAyCi0jZGVmaW5lIEFOU0lfQ1NJICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEFOU0lfU1RfQ09OVFJPTCAgICAgICAweDA4Ci0jZGVmaW5lIEFOU0lfSUdOT1JFICAgICAgICAgICAweDEwCi0jZGVmaW5lIEFOU0lfSU5fQVJHICAgICAgICAgICAweDIwCi0jZGVmaW5lIEFOU0lfSU5fU1RSSU5HICAgICAgICAweDQwCi0jZGVmaW5lIEFOU0lfQkFDS1NMQVNIX1NFRU4gICAweDgwCisjZGVmaW5lIEFOU0lfTk9STUFMICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgQU5TSV9FU0NBUEVfU0VFTiAgICAgIDB4MDAwMgorI2RlZmluZSBBTlNJX0NTSSAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEFOU0lfU1RfQ09OVFJPTCAgICAgICAweDAwMDgKKyNkZWZpbmUgQU5TSV9JR05PUkUgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBBTlNJX0lOX0FSRyAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIEFOU0lfSU5fU1RSSU5HICAgICAgICAweDAwNDAKKyNkZWZpbmUgQU5TSV9CQUNLU0xBU0hfU0VFTiAgIDB4MDA4MAorI2RlZmluZSBBTlNJX0VYVEVOU0lPTiAgICAgICAgMHgwMTAwCisjZGVmaW5lIEFOU0lfREVDU0NVU1IgICAgICAgICAweDAyMDAKIAogI2RlZmluZSBNQVhfSU5QVVRfQlVGRkVSX0xFTkdUSCA4MTkyCiAjZGVmaW5lIE1BWF9DT05TT0xFX0NIQVIgODE5MgpAQCAtNjIsNyArNjQsMTIgQEAKICNkZWZpbmUgRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORyAweDAwMDQKICNlbmRpZgogCi1zdGF0aWMgdm9pZCB1dl90dHlfY2FwdHVyZV9pbml0aWFsX3N0eWxlKENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPKiBpbmZvKTsKKyNkZWZpbmUgQ1VSU09SX1NJWkVfU01BTEwgICAgIDI1CisjZGVmaW5lIENVUlNPUl9TSVpFX0xBUkdFICAgICAxMDAKKworc3RhdGljIHZvaWQgdXZfdHR5X2NhcHR1cmVfaW5pdGlhbF9zdHlsZSgKKyAgICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyogc2NyZWVuX2J1ZmZlcl9pbmZvLAorICAgIENPTlNPTEVfQ1VSU09SX0lORk8qIGN1cnNvcl9pbmZvKTsKIHN0YXRpYyB2b2lkIHV2X3R0eV91cGRhdGVfdmlydHVhbF93aW5kb3coQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8qIGluZm8pOwogc3RhdGljIGludCB1dl9fY2FuY2VsX3JlYWRfY29uc29sZSh1dl90dHlfdCogaGFuZGxlKTsKIApAQCAtMTIwLDYgKzEyNyw4IEBACiBzdGF0aWMgSEFORExFIHV2X190dHlfY29uc29sZV9oYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKIHN0YXRpYyBpbnQgdXZfX3R0eV9jb25zb2xlX2hlaWdodCA9IC0xOwogc3RhdGljIGludCB1dl9fdHR5X2NvbnNvbGVfd2lkdGggPSAtMTsKK3N0YXRpYyBIQU5ETEUgdXZfX3R0eV9jb25zb2xlX3Jlc2l6ZWQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKK3N0YXRpYyB1dl9tdXRleF90IHV2X190dHlfY29uc29sZV9yZXNpemVfbXV0ZXg7CiAKIHN0YXRpYyBEV09SRCBXSU5BUEkgdXZfX3R0eV9jb25zb2xlX3Jlc2l6ZV9tZXNzYWdlX2xvb3BfdGhyZWFkKHZvaWQqIHBhcmFtKTsKIHN0YXRpYyB2b2lkIENBTExCQUNLIHV2X190dHlfY29uc29sZV9yZXNpemVfZXZlbnQoSFdJTkVWRU5USE9PSyBoV2luRXZlbnRIb29rLApAQCAtMTI5LDYgKzEzOCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExPTkcgaWRDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdFdmVudFRocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdtc0V2ZW50VGltZSk7CitzdGF0aWMgRFdPUkQgV0lOQVBJIHV2X190dHlfY29uc29sZV9yZXNpemVfd2F0Y2hlcl90aHJlYWQodm9pZCogcGFyYW0pOworc3RhdGljIHZvaWQgdXZfX3R0eV9jb25zb2xlX3NpZ25hbF9yZXNpemUodm9pZCk7CiAKIC8qIFdlIHVzZSBhIHNlbWFwaG9yZSByYXRoZXIgdGhhbiBhIG11dGV4IG9yIGNyaXRpY2FsIHNlY3Rpb24gYmVjYXVzZSBpbiBzb21lCiAgICBjYXNlcyAodXZfX2NhbmNlbF9yZWFkX2NvbnNvbGUpIHdlIG5lZWQgdGFrZSB0aGUgbG9jayBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kCkBAIC0xNDUsMTMgKzE1NiwxMSBAQAogc3RhdGljIGNoYXIgdXZfdHR5X2RlZmF1bHRfYmdfYnJpZ2h0ID0gMDsKIHN0YXRpYyBjaGFyIHV2X3R0eV9kZWZhdWx0X2ludmVyc2UgPSAwOwogCi10eXBlZGVmIGVudW0gewotICBVVl9TVVBQT1JURUQsCi0gIFVWX1VOQ0hFQ0tFRCwKLSAgVVZfVU5TVVBQT1JURUQKLX0gdXZfdnRlcm1zdGF0ZV90Oworc3RhdGljIENPTlNPTEVfQ1VSU09SX0lORk8gdXZfdHR5X2RlZmF1bHRfY3Vyc29yX2luZm87CisKIC8qIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCBBTlNJIHN1cHBvcnQgaXMgZW5hYmxlZC4gKi8KLXN0YXRpYyB1dl92dGVybXN0YXRlX3QgdXZfX3Z0ZXJtX3N0YXRlID0gVVZfVU5DSEVDS0VEOworc3RhdGljIEJPT0wgdXZfX25lZWRfY2hlY2tfdnRlcm1fc3RhdGUgPSBUUlVFOworc3RhdGljIHV2X3R0eV92dGVybXN0YXRlX3QgdXZfX3Z0ZXJtX3N0YXRlID0gVVZfVFRZX1VOU1VQUE9SVEVEOwogc3RhdGljIHZvaWQgdXZfX2RldGVybWluZV92dGVybV9zdGF0ZShIQU5ETEUgaGFuZGxlKTsKIAogdm9pZCB1dl9jb25zb2xlX2luaXQodm9pZCkgewpAQCAtMTY1LDkgKzE3NCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICBpZiAodXZfX3R0eV9jb25zb2xlX2hhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHNiX2luZm87CiAgICAgUXVldWVVc2VyV29ya0l0ZW0odXZfX3R0eV9jb25zb2xlX3Jlc2l6ZV9tZXNzYWdlX2xvb3BfdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgV1RfRVhFQ1VURUxPTkdGVU5DVElPTik7CisgICAgdXZfbXV0ZXhfaW5pdCgmdXZfX3R0eV9jb25zb2xlX3Jlc2l6ZV9tdXRleCk7CisgICAgaWYgKEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKHV2X190dHlfY29uc29sZV9oYW5kbGUsICZzYl9pbmZvKSkgeworICAgICAgdXZfX3R0eV9jb25zb2xlX3dpZHRoID0gc2JfaW5mby5kd1NpemUuWDsKKyAgICAgIHV2X190dHlfY29uc29sZV9oZWlnaHQgPSBzYl9pbmZvLnNyV2luZG93LkJvdHRvbSAtIHNiX2luZm8uc3JXaW5kb3cuVG9wICsgMTsKKyAgICB9CiAgIH0KIH0KIApAQCAtMTc3LDYgKzE5Miw3IEBACiAgIERXT1JEIE51bWJlck9mRXZlbnRzOwogICBIQU5ETEUgaGFuZGxlOwogICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBzY3JlZW5fYnVmZmVyX2luZm87CisgIENPTlNPTEVfQ1VSU09SX0lORk8gY3Vyc29yX2luZm87CiAgICh2b2lkKXVudXNlZDsKIAogICB1dl9fb25jZV9pbml0KCk7CkBAIC0yMDksMTUgKzIyNSwyMCBAQAogICAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwogICAgIH0KIAorICAgIC8qIE9idGFpbiB0aGUgY3Vyc29yIGluZm8gd2l0aCB0aGUgb3V0cHV0IGhhbmRsZS4gKi8KKyAgICBpZiAoIUdldENvbnNvbGVDdXJzb3JJbmZvKGhhbmRsZSwgJmN1cnNvcl9pbmZvKSkgeworICAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKwogICAgIC8qIE9idGFpbiB0aGUgdHR5X291dHB1dF9sb2NrIGJlY2F1c2UgdGhlIHZpcnR1YWwgd2luZG93IHN0YXRlIGlzIHNoYXJlZAogICAgICAqIGJldHdlZW4gYWxsIHV2X3R0eV90IGhhbmRsZXMuICovCiAgICAgdXZfc2VtX3dhaXQoJnV2X3R0eV9vdXRwdXRfbG9jayk7CiAKLSAgICBpZiAodXZfX3Z0ZXJtX3N0YXRlID09IFVWX1VOQ0hFQ0tFRCkKKyAgICBpZiAodXZfX25lZWRfY2hlY2tfdnRlcm1fc3RhdGUpCiAgICAgICB1dl9fZGV0ZXJtaW5lX3Z0ZXJtX3N0YXRlKGhhbmRsZSk7CiAKLSAgICAvKiBSZW1lbWJlciB0aGUgb3JpZ2luYWwgY29uc29sZSB0ZXh0IGF0dHJpYnV0ZXMuICovCi0gICAgdXZfdHR5X2NhcHR1cmVfaW5pdGlhbF9zdHlsZSgmc2NyZWVuX2J1ZmZlcl9pbmZvKTsKKyAgICAvKiBSZW1lbWJlciB0aGUgb3JpZ2luYWwgY29uc29sZSB0ZXh0IGF0dHJpYnV0ZXMgYW5kIGN1cnNvciBpbmZvLiAqLworICAgIHV2X3R0eV9jYXB0dXJlX2luaXRpYWxfc3R5bGUoJnNjcmVlbl9idWZmZXJfaW5mbywgJmN1cnNvcl9pbmZvKTsKIAogICAgIHV2X3R0eV91cGRhdGVfdmlydHVhbF93aW5kb3coJnNjcmVlbl9idWZmZXJfaW5mbyk7CiAKQEAgLTI2OCw3ICsyODksOSBAQAogLyogU2V0IHRoZSBkZWZhdWx0IGNvbnNvbGUgdGV4dCBhdHRyaWJ1dGVzIGJhc2VkIG9uIGhvdyB0aGUgY29uc29sZSB3YXMKICAqIGNvbmZpZ3VyZWQgd2hlbiBsaWJ1diBzdGFydGVkLgogICovCi1zdGF0aWMgdm9pZCB1dl90dHlfY2FwdHVyZV9pbml0aWFsX3N0eWxlKENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPKiBpbmZvKSB7CitzdGF0aWMgdm9pZCB1dl90dHlfY2FwdHVyZV9pbml0aWFsX3N0eWxlKAorICAgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPKiBzY3JlZW5fYnVmZmVyX2luZm8sCisgICAgQ09OU09MRV9DVVJTT1JfSU5GTyogY3Vyc29yX2luZm8pIHsKICAgc3RhdGljIGludCBzdHlsZV9jYXB0dXJlZCA9IDA7CiAKICAgLyogT25seSBkbyB0aGlzIG9uY2UuCkBAIC0yNzcsNyArMzAwLDcgQEAKICAgICByZXR1cm47CiAKICAgLyogU2F2ZSByYXcgd2luMzIgYXR0cmlidXRlcy4gKi8KLSAgdXZfdHR5X2RlZmF1bHRfdGV4dF9hdHRyaWJ1dGVzID0gaW5mby0+d0F0dHJpYnV0ZXM7CisgIHV2X3R0eV9kZWZhdWx0X3RleHRfYXR0cmlidXRlcyA9IHNjcmVlbl9idWZmZXJfaW5mby0+d0F0dHJpYnV0ZXM7CiAKICAgLyogQ29udmVydCBibGFjayB0ZXh0IG9uIGJsYWNrIGJhY2tncm91bmQgdG8gdXNlIHdoaXRlIHRleHQuICovCiAgIGlmICh1dl90dHlfZGVmYXVsdF90ZXh0X2F0dHJpYnV0ZXMgPT0gMCkKQEAgLTMxNyw2ICszNDAsOSBAQAogICBpZiAodXZfdHR5X2RlZmF1bHRfdGV4dF9hdHRyaWJ1dGVzICYgQ09NTU9OX0xWQl9SRVZFUlNFX1ZJREVPKQogICAgIHV2X3R0eV9kZWZhdWx0X2ludmVyc2UgPSAxOwogCisgIC8qIFNhdmUgdGhlIGN1cnNvciBzaXplIGFuZCB0aGUgY3Vyc29yIHN0YXRlLiAqLworICB1dl90dHlfZGVmYXVsdF9jdXJzb3JfaW5mbyA9ICpjdXJzb3JfaW5mbzsKKwogICBzdHlsZV9jYXB0dXJlZCA9IDE7CiB9CiAKQEAgLTcyOCw2ICs3NTQsMTIgQEAKICAgICAgIH0KICAgICAgIHJlY29yZHNfbGVmdC0tOwogCisgICAgICAvKiBXZSBtaWdodCBiZSBub3Qgc3Vic2NyaWJlZCB0byBFVkVOVF9DT05TT0xFX0xBWU9VVCBvciB3ZSBtaWdodCBiZQorICAgICAgICogcnVubmluZyB1bmRlciBzb21lIFRUWSBlbXVsYXRvciB0aGF0IGRvZXMgbm90IHNlbmQgdGhvc2UgZXZlbnRzLiAqLworICAgICAgaWYgKGhhbmRsZS0+dHR5LnJkLmxhc3RfaW5wdXRfcmVjb3JkLkV2ZW50VHlwZSA9PSBXSU5ET1dfQlVGRkVSX1NJWkVfRVZFTlQpIHsKKyAgICAgICAgdXZfX3R0eV9jb25zb2xlX3NpZ25hbF9yZXNpemUoKTsKKyAgICAgIH0KKwogICAgICAgLyogSWdub3JlIG90aGVyIGV2ZW50cyB0aGF0IGFyZSBub3Qga2V5IGV2ZW50cy4gKi8KICAgICAgIGlmIChoYW5kbGUtPnR0eS5yZC5sYXN0X2lucHV0X3JlY29yZC5FdmVudFR5cGUgIT0gS0VZX0VWRU5UKSB7CiAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTIxOCw3ICsxMjUwLDcgQEAKIHN0YXRpYyBpbnQgdXZfdHR5X3Jlc2V0KHV2X3R0eV90KiBoYW5kbGUsIERXT1JEKiBlcnJvcikgewogICBjb25zdCBDT09SRCBvcmlnaW4gPSB7MCwgMH07CiAgIGNvbnN0IFdPUkQgY2hhcl9hdHRycyA9IHV2X3R0eV9kZWZhdWx0X3RleHRfYXR0cmlidXRlczsKLSAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gaW5mbzsKKyAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gc2NyZWVuX2J1ZmZlcl9pbmZvOwogICBEV09SRCBjb3VudCwgd3JpdHRlbjsKIAogICBpZiAoKmVycm9yICE9IEVSUk9SX1NVQ0NFU1MpIHsKQEAgLTEyMzksMTIgKzEyNzEsMTIgQEAKIAogICAvKiBDbGVhciB0aGUgc2NyZWVuIGJ1ZmZlci4gKi8KICByZXRyeToKLSAgaWYgKCFHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhoYW5kbGUtPmhhbmRsZSwgJmluZm8pKSB7Ci0gICAgKmVycm9yID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgcmV0dXJuIC0xOworICAgaWYgKCFHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhoYW5kbGUtPmhhbmRsZSwgJnNjcmVlbl9idWZmZXJfaW5mbykpIHsKKyAgICAgKmVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgIHJldHVybiAtMTsKICAgfQogCi0gIGNvdW50ID0gaW5mby5kd1NpemUuWCAqIGluZm8uZHdTaXplLlk7CisgIGNvdW50ID0gc2NyZWVuX2J1ZmZlcl9pbmZvLmR3U2l6ZS5YICogc2NyZWVuX2J1ZmZlcl9pbmZvLmR3U2l6ZS5ZOwogCiAgIGlmICghKEZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyVyhoYW5kbGUtPmhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwnXHgyMCcsCkBAIC0xMjY3LDcgKzEyOTksMTMgQEAKIAogICAvKiBNb3ZlIHRoZSB2aXJ0dWFsIHdpbmRvdyB1cCB0byB0aGUgdG9wLiAqLwogICB1dl90dHlfdmlydHVhbF9vZmZzZXQgPSAwOwotICB1dl90dHlfdXBkYXRlX3ZpcnR1YWxfd2luZG93KCZpbmZvKTsKKyAgdXZfdHR5X3VwZGF0ZV92aXJ0dWFsX3dpbmRvdygmc2NyZWVuX2J1ZmZlcl9pbmZvKTsKKworICAvKiBSZXNldCB0aGUgY3Vyc29yIHNpemUgYW5kIHRoZSBjdXJzb3Igc3RhdGUuICovCisgIGlmICghU2V0Q29uc29sZUN1cnNvckluZm8oaGFuZGxlLT5oYW5kbGUsICZ1dl90dHlfZGVmYXVsdF9jdXJzb3JfaW5mbykpIHsKKyAgICAqZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICByZXR1cm4gLTE7CisgIH0KIAogICByZXR1cm4gMDsKIH0KQEAgLTE2MDYsNiArMTY0NCwzMSBAQAogICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB1dl90dHlfc2V0X2N1cnNvcl9zaGFwZSh1dl90dHlfdCogaGFuZGxlLCBpbnQgc3R5bGUsIERXT1JEKiBlcnJvcikgeworICBDT05TT0xFX0NVUlNPUl9JTkZPIGN1cnNvcl9pbmZvOworCisgIGlmICghR2V0Q29uc29sZUN1cnNvckluZm8oaGFuZGxlLT5oYW5kbGUsICZjdXJzb3JfaW5mbykpIHsKKyAgICAqZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoc3R5bGUgPT0gMCkgeworICAgIGN1cnNvcl9pbmZvLmR3U2l6ZSA9IHV2X3R0eV9kZWZhdWx0X2N1cnNvcl9pbmZvLmR3U2l6ZTsKKyAgfSBlbHNlIGlmIChzdHlsZSA8PSAyKSB7CisgICAgY3Vyc29yX2luZm8uZHdTaXplID0gQ1VSU09SX1NJWkVfTEFSR0U7CisgIH0gZWxzZSB7CisgICAgY3Vyc29yX2luZm8uZHdTaXplID0gQ1VSU09SX1NJWkVfU01BTEw7CisgIH0KKworICBpZiAoIVNldENvbnNvbGVDdXJzb3JJbmZvKGhhbmRsZS0+aGFuZGxlLCAmY3Vyc29yX2luZm8pKSB7CisgICAgKmVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIGludCB1dl90dHlfd3JpdGVfYnVmcyh1dl90dHlfdCogaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dl9idWZfdCBidWZzW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuYnVmcywKQEAgLTE2MTMsMjggKzE2NzYsMTYgQEAKICAgLyogV2UgY2FuIG9ubHkgd3JpdGUgOGsgY2hhcmFjdGVycyBhdCBhIHRpbWUuIFdpbmRvd3MgY2FuJ3QgaGFuZGxlIG11Y2ggbW9yZQogICAgKiBjaGFyYWN0ZXJzIGluIGEgc2luZ2xlIGNvbnNvbGUgd3JpdGUgYW55d2F5LiAqLwogICBXQ0hBUiB1dGYxNl9idWZbTUFYX0NPTlNPTEVfQ0hBUl07Ci0gIFdDSEFSKiB1dGYxNl9idWZmZXI7CiAgIERXT1JEIHV0ZjE2X2J1Zl91c2VkID0gMDsKLSAgdW5zaWduZWQgaW50IGksIGxlbiwgbWF4X2xlbiwgcG9zOwotICBpbnQgYWxsb2NhdGUgPSAwOworICB1bnNpZ25lZCBpbnQgaTsKIAotI2RlZmluZSBGTFVTSF9URVhUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHBvcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgbGVuID0gdXRmMTZfYnVmX3VzZWQgLSBwb3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYgKGxlbiA+IE1BWF9DT05TT0xFX0NIQVIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBsZW4gPSBNQVhfQ09OU09MRV9DSEFSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdXZfdHR5X2VtaXRfdGV4dChoYW5kbGUsICZ1dGYxNl9idWZmZXJbcG9zXSwgbGVuLCBlcnJvcik7ICAgICAgXAotICAgICAgcG9zICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKHBvcyA8IHV0ZjE2X2J1Zl91c2VkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChhbGxvY2F0ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgYWxsb2NhdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdXRmMTZfYnVmZmVyID0gdXRmMTZfYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHV0ZjE2X2J1Zl91c2VkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotIH0gd2hpbGUgKDApCisjZGVmaW5lIEZMVVNIX1RFWFQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICh1dGYxNl9idWZfdXNlZCA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB1dl90dHlfZW1pdF90ZXh0KGhhbmRsZSwgdXRmMTZfYnVmLCB1dGYxNl9idWZfdXNlZCwgZXJyb3IpOyAgIFwKKyAgICAgIHV0ZjE2X2J1Zl91c2VkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgRU5TVVJFX0JVRkZFUl9TUEFDRSh3Y2hhcnNfbmVlZGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBpZiAod2NoYXJzX25lZWRlZCA+IEFSUkFZX1NJWkUodXRmMTZfYnVmKSAtIHV0ZjE2X2J1Zl91c2VkKSB7ICAgICBcCkBAIC0xNjQ1LDU0ICsxNjk2LDE4IEBACiAgIHVuc2lnbmVkIGNoYXIgdXRmOF9ieXRlc19sZWZ0ID0gaGFuZGxlLT50dHkud3IudXRmOF9ieXRlc19sZWZ0OwogICB1bnNpZ25lZCBpbnQgdXRmOF9jb2RlcG9pbnQgPSBoYW5kbGUtPnR0eS53ci51dGY4X2NvZGVwb2ludDsKICAgdW5zaWduZWQgY2hhciBwcmV2aW91c19lb2wgPSBoYW5kbGUtPnR0eS53ci5wcmV2aW91c19lb2w7Ci0gIHVuc2lnbmVkIGNoYXIgYW5zaV9wYXJzZXJfc3RhdGUgPSBoYW5kbGUtPnR0eS53ci5hbnNpX3BhcnNlcl9zdGF0ZTsKKyAgdW5zaWduZWQgc2hvcnQgYW5zaV9wYXJzZXJfc3RhdGUgPSBoYW5kbGUtPnR0eS53ci5hbnNpX3BhcnNlcl9zdGF0ZTsKIAogICAvKiBTdG9yZSB0aGUgZXJyb3IgaGVyZS4gSWYgd2UgZW5jb3VudGVyIGFuIGVycm9yLCBzdG9wIHRyeWluZyB0byBkbyBpL28gYnV0CiAgICAqIGtlZXAgcGFyc2luZyB0aGUgYnVmZmVyIHNvIHdlIGxlYXZlIHRoZSBwYXJzZXIgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiAqLwogICAqZXJyb3IgPSBFUlJPUl9TVUNDRVNTOwogCi0gIHV0ZjE2X2J1ZmZlciA9IHV0ZjE2X2J1ZjsKLQogICB1dl9zZW1fd2FpdCgmdXZfdHR5X291dHB1dF9sb2NrKTsKIAogICBmb3IgKGkgPSAwOyBpIDwgbmJ1ZnM7IGkrKykgewogICAgIHV2X2J1Zl90IGJ1ZiA9IGJ1ZnNbaV07CiAgICAgdW5zaWduZWQgaW50IGo7CiAKLSAgICBpZiAodXZfX3Z0ZXJtX3N0YXRlID09IFVWX1NVUFBPUlRFRCAmJiBidWYubGVuID4gMCkgewotICAgICAgdXRmMTZfYnVmX3VzZWQgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYuYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0KLSAgICAgIGlmICh1dGYxNl9idWZfdXNlZCA9PSAwKSB7Ci0gICAgICAgICplcnJvciA9IEdldExhc3RFcnJvcigpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgbWF4X2xlbiA9ICh1dGYxNl9idWZfdXNlZCArIDEpICogc2l6ZW9mKFdDSEFSKTsKLSAgICAgIGFsbG9jYXRlID0gbWF4X2xlbiA+IE1BWF9DT05TT0xFX0NIQVI7Ci0gICAgICBpZiAoYWxsb2NhdGUpCi0gICAgICAgIHV0ZjE2X2J1ZmZlciA9IHV2X19tYWxsb2MobWF4X2xlbik7Ci0gICAgICBpZiAoIU11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfVVRGOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmMTZfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjE2X2J1Zl91c2VkKSkgewotICAgICAgICBpZiAoYWxsb2NhdGUpCi0gICAgICAgICAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsKLSAgICAgICAgKmVycm9yID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBGTFVTSF9URVhUKCk7Ci0KLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQogICAgIGZvciAoaiA9IDA7IGogPCBidWYubGVuOyBqKyspIHsKICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IGJ1Zi5iYXNlW2pdOwogCkBAIC0xNzQ5LDcgKzE3NjQsOSBAQAogICAgICAgfQogCiAgICAgICAvKiBQYXJzZSB2dDEwMC9hbnNpIGVzY2FwZSBjb2RlcyAqLwotICAgICAgaWYgKGFuc2lfcGFyc2VyX3N0YXRlID09IEFOU0lfTk9STUFMKSB7CisgICAgICBpZiAodXZfX3Z0ZXJtX3N0YXRlID09IFVWX1RUWV9TVVBQT1JURUQpIHsKKyAgICAgICAgLyogUGFzcyB0aHJvdWdoIGVzY2FwZSBjb2RlcyBpZiBjb25ob3N0IHN1cHBvcnRzIHRoZW0uICovCisgICAgICB9IGVsc2UgaWYgKGFuc2lfcGFyc2VyX3N0YXRlID09IEFOU0lfTk9STUFMKSB7CiAgICAgICAgIHN3aXRjaCAodXRmOF9jb2RlcG9pbnQpIHsKICAgICAgICAgICBjYXNlICdcMDMzJzoKICAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9FU0NBUEVfU0VFTjsKQEAgLTE3OTUsNyArMTgxMiw3IEBACiAgICAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfTk9STUFMOwogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgY2FzZSAnOCc6CisgICAgICAgICAgY2FzZSAnOCc6CiAgICAgICAgICAgICAvKiBSZXN0b3JlIHRoZSBjdXJzb3IgcG9zaXRpb24gYW5kIHRleHQgYXR0cmlidXRlcyAqLwogICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwogICAgICAgICAgICAgdXZfdHR5X3Jlc3RvcmVfc3RhdGUoaGFuZGxlLCAxLCBlcnJvcik7CkBAIC0xODEzLDEyMSArMTgzMCwxOTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICB9IGVsc2UgaWYgKGFuc2lfcGFyc2VyX3N0YXRlID09IEFOU0lfSUdOT1JFKSB7CisgICAgICAgIC8qIFdlJ3JlIGlnbm9yaW5nIHRoaXMgY29tbWFuZC4gU3RvcCBvbmx5IG9uIGNvbW1hbmQgY2hhcmFjdGVyLiAqLworICAgICAgICBpZiAodXRmOF9jb2RlcG9pbnQgPj0gJ0AnICYmIHV0ZjhfY29kZXBvaW50IDw9ICd+JykgeworICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9OT1JNQUw7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7CisKKyAgICAgIH0gZWxzZSBpZiAoYW5zaV9wYXJzZXJfc3RhdGUgPT0gQU5TSV9ERUNTQ1VTUikgeworICAgICAgICAvKiBTbyBmYXIgd2UndmUgdGhlIHNlcXVlbmNlIGBFU0MgWyBhcmcgc3BhY2VgLCBhbmQgd2UncmUgd2FpdGluZyBmb3IKKyAgICAgICAgICogdGhlIGZpbmFsIGNvbW1hbmQgYnl0ZS4gKi8KKyAgICAgICAgaWYgKHV0ZjhfY29kZXBvaW50ID49ICdAJyAmJiB1dGY4X2NvZGVwb2ludCA8PSAnficpIHsKKyAgICAgICAgICAvKiBDb21tYW5kIGJ5dGUgKi8KKyAgICAgICAgICBpZiAodXRmOF9jb2RlcG9pbnQgPT0gJ3EnKSB7CisgICAgICAgICAgICAvKiBDaGFuZ2UgdGhlIGN1cnNvciBzaGFwZSAqLworICAgICAgICAgICAgaW50IHN0eWxlID0gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYworICAgICAgICAgICAgICA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gOiAxOworICAgICAgICAgICAgaWYgKHN0eWxlID49IDAgJiYgc3R5bGUgPD0gNikgeworICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7CisgICAgICAgICAgICAgIHV2X3R0eV9zZXRfY3Vyc29yX3NoYXBlKGhhbmRsZSwgc3R5bGUsIGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBTZXF1ZW5jZSBlbmRlZCAtIGdvIGJhY2sgdG8gbm9ybWFsIHN0YXRlLiAqLworICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9OT1JNQUw7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLyogVW5leHBlY3RlZCBjaGFyYWN0ZXIsIGJ1dCBzZXF1ZW5jZSBoYXNuJ3QgZW5kZWQgeWV0LiBJZ25vcmUgdGhlIHJlc3QKKyAgICAgICAgICogb2YgdGhlIHNlcXVlbmNlLiAqLworICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSA9IEFOU0lfSUdOT1JFOworCiAgICAgICB9IGVsc2UgaWYgKGFuc2lfcGFyc2VyX3N0YXRlICYgQU5TSV9DU0kpIHsKLSAgICAgICAgaWYgKCEoYW5zaV9wYXJzZXJfc3RhdGUgJiBBTlNJX0lHTk9SRSkpIHsKLSAgICAgICAgICBpZiAodXRmOF9jb2RlcG9pbnQgPj0gJzAnICYmIHV0ZjhfY29kZXBvaW50IDw9ICc5JykgewotICAgICAgICAgICAgLyogUGFyc2luZyBhIG51bWVyaWNhbCBhcmd1bWVudCAqLworICAgICAgICAvKiBTbyBmYXIgd2UndmUgc2VlbiBgRVNDIFtgLCBhbmQgd2UgbWF5IG9yIG1heSBub3QgaGF2ZSBhbHJlYWR5IHBhcnNlZAorICAgICAgICAgKiBzb21lIG9mIHRoZSBhcmd1bWVudHMgdGhhdCBmb2xsb3cuICovCiAKLSAgICAgICAgICAgIGlmICghKGFuc2lfcGFyc2VyX3N0YXRlICYgQU5TSV9JTl9BUkcpKSB7Ci0gICAgICAgICAgICAgIC8qIFdlIHdlcmUgbm90IGN1cnJlbnRseSBwYXJzaW5nIGEgbnVtYmVyICovCi0KLSAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHRvbyBtYW55IGFyZ3VtZW50cyAqLwotICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA+PSBBUlJBWV9TSVpFKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3YpKSB7Ci0gICAgICAgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgfD0gQU5TSV9JR05PUkU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBhbnNpX3BhcnNlcl9zdGF0ZSB8PSBBTlNJX0lOX0FSRzsKLSAgICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYysrOwotICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2W2hhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgLSAxXSA9Ci0gICAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQpIHV0ZjhfY29kZXBvaW50IC0gJzAnOwotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8qIFdlIHdlcmUgYWxyZWFkeSBwYXJzaW5nIGEgbnVtYmVyLiBQYXJzZSBuZXh0IGRpZ2l0LiAqLwotICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSA9IDEwICoKLSAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyAtIDFdOwotCi0gICAgICAgICAgICAgIC8qIENoZWNrIGZvciBvdmVyZmxvdy4gKi8KLSAgICAgICAgICAgICAgaWYgKHZhbHVlID4gVUlOVDE2X01BWCkgewotICAgICAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlIHw9IEFOU0lfSUdOT1JFOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyAtIDFdID0KLSAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQpIHZhbHVlICsgKHV0ZjhfY29kZXBvaW50IC0gJzAnKTsKLSAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgfSBlbHNlIGlmICh1dGY4X2NvZGVwb2ludCA9PSAnOycpIHsKLSAgICAgICAgICAgIC8qIERlbm90ZXMgdGhlIGVuZCBvZiBhbiBhcmd1bWVudC4gKi8KLSAgICAgICAgICAgIGlmIChhbnNpX3BhcnNlcl9zdGF0ZSAmIEFOU0lfSU5fQVJHKSB7Ci0gICAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlICY9IH5BTlNJX0lOX0FSRzsKLSAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8qIElmIEFOU0lfSU5fQVJHIGlzIG5vdCBzZXQsIGFkZCBhbm90aGVyIGFyZ3VtZW50IGFuZCBkZWZhdWx0IGl0Ci0gICAgICAgICAgICAgICAqIHRvIDAuICovCi0KLSAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHRvbyBtYW55IGFyZ3VtZW50cyAqLwotICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA+PSBBUlJBWV9TSVpFKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3YpKSB7Ci0gICAgICAgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgfD0gQU5TSV9JR05PUkU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjKys7Ci0gICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyAtIDFdID0gMDsKKyAgICAgICAgaWYgKHV0ZjhfY29kZXBvaW50ID49ICcwJyAmJiB1dGY4X2NvZGVwb2ludCA8PSAnOScpIHsKKyAgICAgICAgICAvKiBQYXJzZSBhIG51bWVyaWNhbCBhcmd1bWVudC4gKi8KKyAgICAgICAgICBpZiAoIShhbnNpX3BhcnNlcl9zdGF0ZSAmIEFOU0lfSU5fQVJHKSkgeworICAgICAgICAgICAgLyogV2Ugd2VyZSBub3QgY3VycmVudGx5IHBhcnNpbmcgYSBudW1iZXIsIGFkZCBhIG5ldyBvbmUuICovCisgICAgICAgICAgICAvKiBDaGVjayBmb3IgdGhhdCB0aGVyZSBhcmUgdG9vIG1hbnkgYXJndW1lbnRzLiAqLworICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPj0KKyAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3YpKSB7CisgICAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9JR05PUkU7CiAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgfSBlbHNlIGlmICh1dGY4X2NvZGVwb2ludCA9PSAnPycgJiYgIShhbnNpX3BhcnNlcl9zdGF0ZSAmIEFOU0lfSU5fQVJHKSAmJgotICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA9PSAwKSB7Ci0gICAgICAgICAgICAvKiBJZ25vcmVzICc/JyBpZiBpdCBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIENTSVsuIFRoaXMgaXMgYW4KLSAgICAgICAgICAgICAqIGV4dGVuc2lvbiBjaGFyYWN0ZXIgZnJvbSB0aGUgVlQxMDAgY29kZXNldCB0aGF0IGlzIHN1cHBvcnRlZCBhbmQKLSAgICAgICAgICAgICAqIHVzZWQgYnkgbW9zdCBBTlNJIHRlcm1pbmFscyB0b2RheS4gKi8KKyAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlIHw9IEFOU0lfSU5fQVJHOworICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYysrOworICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndltoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjIC0gMV0gPQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCkgdXRmOF9jb2RlcG9pbnQgLSAnMCc7CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgIH0gZWxzZSBpZiAodXRmOF9jb2RlcG9pbnQgPj0gJ0AnICYmIHV0ZjhfY29kZXBvaW50IDw9ICd+JyAmJgotICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPiAwIHx8IHV0ZjhfY29kZXBvaW50ICE9ICdbJykpIHsKLSAgICAgICAgICAgIGludCB4LCB5LCBkOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBXZSB3ZXJlIGFscmVhZHkgcGFyc2luZyBhIG51bWJlci4gUGFyc2UgbmV4dCBkaWdpdC4gKi8KKyAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlID0gMTAgKgorICAgICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyAtIDFdOwogCi0gICAgICAgICAgICAvKiBDb21tYW5kIGJ5dGUgKi8KKyAgICAgICAgICAgIC8qIENoZWNrIGZvciBvdmVyZmxvdy4gKi8KKyAgICAgICAgICAgIGlmICh2YWx1ZSA+IFVJTlQxNl9NQVgpIHsKKyAgICAgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgPSBBTlNJX0lHTk9SRTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyAtIDFdID0KKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQpIHZhbHVlICsgKHV0ZjhfY29kZXBvaW50IC0gJzAnKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgaWYgKHV0ZjhfY29kZXBvaW50ID09ICc7JykgeworICAgICAgICAgIC8qIERlbm90ZXMgdGhlIGVuZCBvZiBhbiBhcmd1bWVudC4gKi8KKyAgICAgICAgICBpZiAoYW5zaV9wYXJzZXJfc3RhdGUgJiBBTlNJX0lOX0FSRykgeworICAgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgJj0gfkFOU0lfSU5fQVJHOworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogSWYgQU5TSV9JTl9BUkcgaXMgbm90IHNldCwgYWRkIGFub3RoZXIgYXJndW1lbnQgYW5kIGRlZmF1bHQKKyAgICAgICAgICAgICAqIGl0IHRvIDAuICovCisKKyAgICAgICAgICAgIC8qIENoZWNrIGZvciB0b28gbWFueSBhcmd1bWVudHMgKi8KKyAgICAgICAgICAgIGlmIChoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID49CisKKyAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3YpKSB7CisgICAgICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9JR05PUkU7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjKys7CisgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2W2hhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgLSAxXSA9IDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIGlmICh1dGY4X2NvZGVwb2ludCA9PSAnPycgJiYKKyAgICAgICAgICAgICAgICAgICAhKGFuc2lfcGFyc2VyX3N0YXRlICYgQU5TSV9JTl9BUkcpICYmCisgICAgICAgICAgICAgICAgICAgIShhbnNpX3BhcnNlcl9zdGF0ZSAmIEFOU0lfRVhURU5TSU9OKSAmJgorICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPT0gMCkgeworICAgICAgICAgIC8qIFBhc3MgdGhyb3VnaCAnPycgaWYgaXQgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciBDU0kgKi8KKyAgICAgICAgICAvKiBUaGlzIGlzIGFuIGV4dGVuc2lvbiBjaGFyYWN0ZXIgZnJvbSB0aGUgVlQxMDAgY29kZXNldCAqLworICAgICAgICAgIC8qIHRoYXQgaXMgc3VwcG9ydGVkIGFuZCB1c2VkIGJ5IG1vc3QgQU5TSSB0ZXJtaW5hbHMgdG9kYXkuICovCisgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgfD0gQU5TSV9FWFRFTlNJT047CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgfSBlbHNlIGlmICh1dGY4X2NvZGVwb2ludCA9PSAnICcgJiYKKyAgICAgICAgICAgICAgICAgICAhKGFuc2lfcGFyc2VyX3N0YXRlICYgQU5TSV9FWFRFTlNJT04pKSB7CisgICAgICAgICAgLyogV2UgZXhwZWN0IGEgY29tbWFuZCBieXRlIHRvIGZvbGxvdyBhZnRlciB0aGlzIHNwYWNlLiBUaGUgb25seQorICAgICAgICAgICAqIGNvbW1hbmQgdGhhdCB3ZSBjdXJyZW50IHN1cHBvcnQgaXMgJ3NldCBjdXJzb3Igc3R5bGUnLiAqLworICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9ERUNTQ1VTUjsKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB9IGVsc2UgaWYgKHV0ZjhfY29kZXBvaW50ID49ICdAJyAmJiB1dGY4X2NvZGVwb2ludCA8PSAnficpIHsKKyAgICAgICAgICAvKiBDb21tYW5kIGJ5dGUgKi8KKyAgICAgICAgICBpZiAoYW5zaV9wYXJzZXJfc3RhdGUgJiBBTlNJX0VYVEVOU0lPTikgeworICAgICAgICAgICAgLyogU2VxdWVuY2UgaXMgYEVTQyBbID8gYXJncyBjb21tYW5kYC4gKi8KKyAgICAgICAgICAgIHN3aXRjaCAodXRmOF9jb2RlcG9pbnQpIHsKKyAgICAgICAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICAgICAgLyogSGlkZSB0aGUgY3Vyc29yICovCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPT0gMSAmJgorICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdID09IDI1KSB7CisgICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7CisgICAgICAgICAgICAgICAgICB1dl90dHlfc2V0X2N1cnNvcl92aXNpYmlsaXR5KGhhbmRsZSwgMCwgZXJyb3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAgICAvKiBTaG93IHRoZSBjdXJzb3IgKi8KKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA9PSAxICYmCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gPT0gMjUpIHsKKyAgICAgICAgICAgICAgICAgIEZMVVNIX1RFWFQoKTsKKyAgICAgICAgICAgICAgICAgIHV2X3R0eV9zZXRfY3Vyc29yX3Zpc2liaWxpdHkoaGFuZGxlLCAxLCBlcnJvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFNlcXVlbmNlIGlzIGBFU0MgWyBhcmdzIGNvbW1hbmRgLiAqLworICAgICAgICAgICAgaW50IHgsIHksIGQ7CiAgICAgICAgICAgICBzd2l0Y2ggKHV0ZjhfY29kZXBvaW50KSB7CiAgICAgICAgICAgICAgIGNhc2UgJ0EnOgogICAgICAgICAgICAgICAgIC8qIGN1cnNvciB1cCAqLwogICAgICAgICAgICAgICAgIEZMVVNIX1RFWFQoKTsKLSAgICAgICAgICAgICAgICB5ID0gLShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDEpOworICAgICAgICAgICAgICAgIHkgPSAtKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MKKyAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDEpOwogICAgICAgICAgICAgICAgIHV2X3R0eV9tb3ZlX2NhcmV0KGhhbmRsZSwgMCwgMSwgeSwgMSwgZXJyb3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgIGNhc2UgJ0InOgogICAgICAgICAgICAgICAgIC8qIGN1cnNvciBkb3duICovCiAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwotICAgICAgICAgICAgICAgIHkgPSBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDE7CisgICAgICAgICAgICAgICAgeSA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MKKyAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDE7CiAgICAgICAgICAgICAgICAgdXZfdHR5X21vdmVfY2FyZXQoaGFuZGxlLCAwLCAxLCB5LCAxLCBlcnJvcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgY2FzZSAnQyc6CiAgICAgICAgICAgICAgICAgLyogY3Vyc29yIGZvcndhcmQgKi8KICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgeCA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIDogMTsKKyAgICAgICAgICAgICAgICB4ID0gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYworICAgICAgICAgICAgICAgICAgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIDogMTsKICAgICAgICAgICAgICAgICB1dl90dHlfbW92ZV9jYXJldChoYW5kbGUsIHgsIDEsIDAsIDEsIGVycm9yKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICBjYXNlICdEJzoKICAgICAgICAgICAgICAgICAvKiBjdXJzb3IgYmFjayAqLwogICAgICAgICAgICAgICAgIEZMVVNIX1RFWFQoKTsKLSAgICAgICAgICAgICAgICB4ID0gLShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDEpOworICAgICAgICAgICAgICAgIHggPSAtKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MKKyAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDEpOwogICAgICAgICAgICAgICAgIHV2X3R0eV9tb3ZlX2NhcmV0KGhhbmRsZSwgeCwgMSwgMCwgMSwgZXJyb3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgIGNhc2UgJ0UnOgogICAgICAgICAgICAgICAgIC8qIGN1cnNvciBuZXh0IGxpbmUgKi8KICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgeSA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIDogMTsKKyAgICAgICAgICAgICAgICB5ID0gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYworICAgICAgICAgICAgICAgICAgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIDogMTsKICAgICAgICAgICAgICAgICB1dl90dHlfbW92ZV9jYXJldChoYW5kbGUsIDAsIDAsIHksIDEsIGVycm9yKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICBjYXNlICdGJzoKICAgICAgICAgICAgICAgICAvKiBjdXJzb3IgcHJldmlvdXMgbGluZSAqLwogICAgICAgICAgICAgICAgIEZMVVNIX1RFWFQoKTsKLSAgICAgICAgICAgICAgICB5ID0gLShoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDEpOworICAgICAgICAgICAgICAgIHkgPSAtKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MKKyAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSA6IDEpOwogICAgICAgICAgICAgICAgIHV2X3R0eV9tb3ZlX2NhcmV0KGhhbmRsZSwgMCwgMCwgeSwgMSwgZXJyb3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgIGNhc2UgJ0cnOgogICAgICAgICAgICAgICAgIC8qIGN1cnNvciBob3Jpem9udGFsIG1vdmUgYWJzb2x1dGUgKi8KICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgeCA9IChoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID49IDEgJiYgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSkKKyAgICAgICAgICAgICAgICB4ID0gKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPj0gMSAmJgorICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSkKICAgICAgICAgICAgICAgICAgID8gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJndlswXSAtIDEgOiAwOwogICAgICAgICAgICAgICAgIHV2X3R0eV9tb3ZlX2NhcmV0KGhhbmRsZSwgeCwgMCwgMCwgMSwgZXJyb3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkzNiw5ICsyMDI1LDExIEBACiAgICAgICAgICAgICAgIGNhc2UgJ2YnOgogICAgICAgICAgICAgICAgIC8qIGN1cnNvciBtb3ZlIGFic29sdXRlICovCiAgICAgICAgICAgICAgICAgRkxVU0hfVEVYVCgpOwotICAgICAgICAgICAgICAgIHkgPSAoaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA+PSAxICYmIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0pCisgICAgICAgICAgICAgICAgeSA9IChoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmdjID49IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0pCiAgICAgICAgICAgICAgICAgICA/IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gLSAxIDogMDsKLSAgICAgICAgICAgICAgICB4ID0gKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPj0gMiAmJiBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzFdKQorICAgICAgICAgICAgICAgIHggPSAoaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA+PSAyICYmCisgICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzFdKQogICAgICAgICAgICAgICAgICAgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzFdIC0gMSA6IDA7CiAgICAgICAgICAgICAgICAgdXZfdHR5X21vdmVfY2FyZXQoaGFuZGxlLCB4LCAwLCB5LCAwLCBlcnJvcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTQ2LDcgKzIwMzcsOCBAQAogICAgICAgICAgICAgICBjYXNlICdKJzoKICAgICAgICAgICAgICAgICAvKiBFcmFzZSBzY3JlZW4gKi8KICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgZCA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIDogMDsKKyAgICAgICAgICAgICAgICBkID0gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYworICAgICAgICAgICAgICAgICAgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIDogMDsKICAgICAgICAgICAgICAgICBpZiAoZCA+PSAwICYmIGQgPD0gMikgewogICAgICAgICAgICAgICAgICAgdXZfdHR5X2NsZWFyKGhhbmRsZSwgZCwgMSwgZXJyb3IpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE5NTUsNyArMjA0Nyw4IEBACiAgICAgICAgICAgICAgIGNhc2UgJ0snOgogICAgICAgICAgICAgICAgIC8qIEVyYXNlIGxpbmUgKi8KICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgZCA9IGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIDogMDsKKyAgICAgICAgICAgICAgICBkID0gaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYworICAgICAgICAgICAgICAgICAgPyBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdIDogMDsKICAgICAgICAgICAgICAgICBpZiAoZCA+PSAwICYmIGQgPD0gMikgewogICAgICAgICAgICAgICAgICAgdXZfdHR5X2NsZWFyKGhhbmRsZSwgZCwgMCwgZXJyb3IpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE5NzgsNDEgKzIwNzEsMTcgQEAKICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7CiAgICAgICAgICAgICAgICAgdXZfdHR5X3Jlc3RvcmVfc3RhdGUoaGFuZGxlLCAwLCBlcnJvcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSAnbCc6Ci0gICAgICAgICAgICAgICAgLyogSGlkZSB0aGUgY3Vyc29yICovCi0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ2MgPT0gMSAmJgotICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPnR0eS53ci5hbnNpX2NzaV9hcmd2WzBdID09IDI1KSB7Ci0gICAgICAgICAgICAgICAgICBGTFVTSF9URVhUKCk7Ci0gICAgICAgICAgICAgICAgICB1dl90dHlfc2V0X2N1cnNvcl92aXNpYmlsaXR5KGhhbmRsZSwgMCwgZXJyb3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgICAgICAvKiBTaG93IHRoZSBjdXJzb3IgKi8KLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLT50dHkud3IuYW5zaV9jc2lfYXJnYyA9PSAxICYmCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+dHR5LndyLmFuc2lfY3NpX2FyZ3ZbMF0gPT0gMjUpIHsKLSAgICAgICAgICAgICAgICAgIEZMVVNIX1RFWFQoKTsKLSAgICAgICAgICAgICAgICAgIHV2X3R0eV9zZXRfY3Vyc29yX3Zpc2liaWxpdHkoaGFuZGxlLCAxLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBTZXF1ZW5jZSBlbmRlZCAtIGdvIGJhY2sgdG8gbm9ybWFsIHN0YXRlLiAqLwotICAgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgPSBBTlNJX05PUk1BTDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIFdlIGRvbid0IHN1cHBvcnQgY29tbWFuZHMgdGhhdCB1c2UgcHJpdmF0ZSBtb2RlIGNoYXJhY3RlcnMgb3IKLSAgICAgICAgICAgICAqIGludGVybWVkaWFyaWVzLiBJZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIHNlcXVlbmNlLiAqLwotICAgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgfD0gQU5TSV9JR05PUkU7Ci0gICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBTZXF1ZW5jZSBlbmRlZCAtIGdvIGJhY2sgdG8gbm9ybWFsIHN0YXRlLiAqLworICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9OT1JNQUw7CisgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBXZSdyZSBpZ25vcmluZyB0aGlzIGNvbW1hbmQuIFN0b3Agb25seSBvbiBjb21tYW5kIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgICBpZiAodXRmOF9jb2RlcG9pbnQgPj0gJ0AnICYmIHV0ZjhfY29kZXBvaW50IDw9ICd+JykgewotICAgICAgICAgICAgYW5zaV9wYXJzZXJfc3RhdGUgPSBBTlNJX05PUk1BTDsKLSAgICAgICAgICB9CisgICAgICAgICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBjb21tYW5kcyB0aGF0IHVzZSBwcml2YXRlIG1vZGUgY2hhcmFjdGVycyBvcgorICAgICAgICAgICAqIGludGVybWVkaWFyaWVzLiBJZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIHNlcXVlbmNlLiAqLworICAgICAgICAgIGFuc2lfcGFyc2VyX3N0YXRlID0gQU5TSV9JR05PUkU7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMjI2NCwzOCArMjMzMyw1NiBAQAogc3RhdGljIHZvaWQgdXZfX2RldGVybWluZV92dGVybV9zdGF0ZShIQU5ETEUgaGFuZGxlKSB7CiAgIERXT1JEIGR3TW9kZSA9IDA7CiAKKyAgdXZfX25lZWRfY2hlY2tfdnRlcm1fc3RhdGUgPSBGQUxTRTsKICAgaWYgKCFHZXRDb25zb2xlTW9kZShoYW5kbGUsICZkd01vZGUpKSB7Ci0gICAgdXZfX3Z0ZXJtX3N0YXRlID0gVVZfVU5TVVBQT1JURUQ7CiAgICAgcmV0dXJuOwogICB9CiAKICAgZHdNb2RlIHw9IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkc7CiAgIGlmICghU2V0Q29uc29sZU1vZGUoaGFuZGxlLCBkd01vZGUpKSB7Ci0gICAgdXZfX3Z0ZXJtX3N0YXRlID0gVVZfVU5TVVBQT1JURUQ7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgdXZfX3Z0ZXJtX3N0YXRlID0gVVZfU1VQUE9SVEVEOworICB1dl9fdnRlcm1fc3RhdGUgPSBVVl9UVFlfU1VQUE9SVEVEOwogfQogCiBzdGF0aWMgRFdPUkQgV0lOQVBJIHV2X190dHlfY29uc29sZV9yZXNpemVfbWVzc2FnZV9sb29wX3RocmVhZCh2b2lkKiBwYXJhbSkgewotICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBzYl9pbmZvOworICBOVFNUQVRVUyBzdGF0dXM7CisgIFVMT05HX1BUUiBjb25ob3N0X3BpZDsKICAgTVNHIG1zZzsKIAotICBpZiAoIUdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKHV2X190dHlfY29uc29sZV9oYW5kbGUsICZzYl9pbmZvKSkKKyAgaWYgKHBTZXRXaW5FdmVudEhvb2sgPT0gTlVMTCB8fCBwTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcyA9PSBOVUxMKQogICAgIHJldHVybiAwOwogCi0gIHV2X190dHlfY29uc29sZV93aWR0aCA9IHNiX2luZm8uZHdTaXplLlg7Ci0gIHV2X190dHlfY29uc29sZV9oZWlnaHQgPSBzYl9pbmZvLnNyV2luZG93LkJvdHRvbSAtIHNiX2luZm8uc3JXaW5kb3cuVG9wICsgMTsKKyAgc3RhdHVzID0gcE50UXVlcnlJbmZvcm1hdGlvblByb2Nlc3MoR2V0Q3VycmVudFByb2Nlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc0NvbnNvbGVIb3N0UHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmhvc3RfcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY29uaG9zdF9waWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIAotICBpZiAocFNldFdpbkV2ZW50SG9vayA9PSBOVUxMKQorICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgIC8qIFdlIGNvdWxkbid0IHJldHJpZXZlIG91ciBjb25zb2xlIGhvc3QgcHJvY2VzcywgcHJvYmFibHkgYmVjYXVzZSB0aGlzCisgICAgICogaXMgYSAzMi1iaXQgcHJvY2VzcyBydW5uaW5nIG9uIDY0LWJpdCBXaW5kb3dzLiBGYWxsIGJhY2sgdG8gcmVjZWl2aW5nCisgICAgICogY29uc29sZSBldmVudHMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIG9ubHkuICovCisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBFbnN1cmUgdGhlIFBJRCBpcyBhIG11bHRpcGxlIG9mIDQsIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IFNldFdpbkV2ZW50SG9vayAqLworICBjb25ob3N0X3BpZCAmPSB+KFVMT05HX1BUUikweDM7CisKKyAgdXZfX3R0eV9jb25zb2xlX3Jlc2l6ZWQgPSBDcmVhdGVFdmVudChOVUxMLCBUUlVFLCBGQUxTRSwgTlVMTCk7CisgIGlmICh1dl9fdHR5X2NvbnNvbGVfcmVzaXplZCA9PSBOVUxMKQorICAgIHJldHVybiAwOworICBpZiAoUXVldWVVc2VyV29ya0l0ZW0odXZfX3R0eV9jb25zb2xlX3Jlc2l6ZV93YXRjaGVyX3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICBXVF9FWEVDVVRFTE9OR0ZVTkNUSU9OKSA9PSAwKQogICAgIHJldHVybiAwOwogCiAgIGlmICghcFNldFdpbkV2ZW50SG9vayhFVkVOVF9DT05TT0xFX0xBWU9VVCwKICAgICAgICAgICAgICAgICAgICAgICAgIEVWRU5UX0NPTlNPTEVfTEFZT1VULAogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgIHV2X190dHlfY29uc29sZV9yZXNpemVfZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgKERXT1JEKWNvbmhvc3RfcGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkVWRU5UX09VVE9GQ09OVEVYVCkpCiAgICAgcmV0dXJuIDA7CkBAIC0yMzE0LDYgKzI0MDEsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9ORyBpZENoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkd0V2ZW50VGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkd21zRXZlbnRUaW1lKSB7CisgIFNldEV2ZW50KHV2X190dHlfY29uc29sZV9yZXNpemVkKTsKK30KKworc3RhdGljIERXT1JEIFdJTkFQSSB1dl9fdHR5X2NvbnNvbGVfcmVzaXplX3dhdGNoZXJfdGhyZWFkKHZvaWQqIHBhcmFtKSB7CisgIGZvciAoOzspIHsKKyAgICAvKiBNYWtlIHN1cmUgdG8gbm90IG92ZXJ3aGVsbSB0aGUgc3lzdGVtIHdpdGggcmVzaXplIGV2ZW50cyAqLworICAgIFNsZWVwKDMzKTsKKyAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KHV2X190dHlfY29uc29sZV9yZXNpemVkLCBJTkZJTklURSk7CisgICAgdXZfX3R0eV9jb25zb2xlX3NpZ25hbF9yZXNpemUoKTsKKyAgICBSZXNldEV2ZW50KHV2X190dHlfY29uc29sZV9yZXNpemVkKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCB1dl9fdHR5X2NvbnNvbGVfc2lnbmFsX3Jlc2l6ZSh2b2lkKSB7CiAgIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHNiX2luZm87CiAgIGludCB3aWR0aCwgaGVpZ2h0OwogCkBAIC0yMzIzLDkgKzI0MjQsMjggQEAKICAgd2lkdGggPSBzYl9pbmZvLmR3U2l6ZS5YOwogICBoZWlnaHQgPSBzYl9pbmZvLnNyV2luZG93LkJvdHRvbSAtIHNiX2luZm8uc3JXaW5kb3cuVG9wICsgMTsKIAorICB1dl9tdXRleF9sb2NrKCZ1dl9fdHR5X2NvbnNvbGVfcmVzaXplX211dGV4KTsKKyAgYXNzZXJ0KHV2X190dHlfY29uc29sZV93aWR0aCAhPSAtMSAmJiB1dl9fdHR5X2NvbnNvbGVfaGVpZ2h0ICE9IC0xKTsKICAgaWYgKHdpZHRoICE9IHV2X190dHlfY29uc29sZV93aWR0aCB8fCBoZWlnaHQgIT0gdXZfX3R0eV9jb25zb2xlX2hlaWdodCkgewogICAgIHV2X190dHlfY29uc29sZV93aWR0aCA9IHdpZHRoOwogICAgIHV2X190dHlfY29uc29sZV9oZWlnaHQgPSBoZWlnaHQ7CisgICAgdXZfbXV0ZXhfdW5sb2NrKCZ1dl9fdHR5X2NvbnNvbGVfcmVzaXplX211dGV4KTsKICAgICB1dl9fc2lnbmFsX2Rpc3BhdGNoKFNJR1dJTkNIKTsKKyAgfSBlbHNlIHsKKyAgICB1dl9tdXRleF91bmxvY2soJnV2X190dHlfY29uc29sZV9yZXNpemVfbXV0ZXgpOwogICB9CiB9CisKK3ZvaWQgdXZfdHR5X3NldF92dGVybV9zdGF0ZSh1dl90dHlfdnRlcm1zdGF0ZV90IHN0YXRlKSB7CisgIHV2X3NlbV93YWl0KCZ1dl90dHlfb3V0cHV0X2xvY2spOworICB1dl9fbmVlZF9jaGVja192dGVybV9zdGF0ZSA9IEZBTFNFOworICB1dl9fdnRlcm1fc3RhdGUgPSBzdGF0ZTsKKyAgdXZfc2VtX3Bvc3QoJnV2X3R0eV9vdXRwdXRfbG9jayk7Cit9CisKK2ludCB1dl90dHlfZ2V0X3Z0ZXJtX3N0YXRlKHV2X3R0eV92dGVybXN0YXRlX3QqIHN0YXRlKSB7CisgIHV2X3NlbV93YWl0KCZ1dl90dHlfb3V0cHV0X2xvY2spOworICAqc3RhdGUgPSB1dl9fdnRlcm1fc3RhdGU7CisgIHV2X3NlbV9wb3N0KCZ1dl90dHlfb3V0cHV0X2xvY2spOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdWRwLmMgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3VkcC5jCmluZGV4IDhhZWVhYjMuLjUwOGVkMzcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdWRwLmMKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi91ZHAuYwpAQCAtMTI1LDE3ICsxMjUsMTAgQEAKIH0KIAogCi1pbnQgdXZfdWRwX2luaXRfZXgodXZfbG9vcF90KiBsb29wLCB1dl91ZHBfdCogaGFuZGxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsKLSAgaW50IGRvbWFpbjsKLQotICAvKiBVc2UgdGhlIGxvd2VyIDggYml0cyBmb3IgdGhlIGRvbWFpbiAqLwotICBkb21haW4gPSBmbGFncyAmIDB4RkY7Ci0gIGlmIChkb21haW4gIT0gQUZfSU5FVCAmJiBkb21haW4gIT0gQUZfSU5FVDYgJiYgZG9tYWluICE9IEFGX1VOU1BFQykKLSAgICByZXR1cm4gVVZfRUlOVkFMOwotCi0gIGlmIChmbGFncyAmIH4weEZGKQotICAgIHJldHVybiBVVl9FSU5WQUw7Ci0KK2ludCB1dl9fdWRwX2luaXRfZXgodXZfbG9vcF90KiBsb29wLAorICAgICAgICAgICAgICAgICAgICB1dl91ZHBfdCogaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgaW50IGRvbWFpbikgewogICB1dl9faGFuZGxlX2luaXQobG9vcCwgKHV2X2hhbmRsZV90KikgaGFuZGxlLCBVVl9VRFApOwogICBoYW5kbGUtPnNvY2tldCA9IElOVkFMSURfU09DS0VUOwogICBoYW5kbGUtPnJlcXNfcGVuZGluZyA9IDA7CkBAIC0xNzQsMTEgKzE2Nyw2IEBACiB9CiAKIAotaW50IHV2X3VkcF9pbml0KHV2X2xvb3BfdCogbG9vcCwgdXZfdWRwX3QqIGhhbmRsZSkgewotICByZXR1cm4gdXZfdWRwX2luaXRfZXgobG9vcCwgaGFuZGxlLCBBRl9VTlNQRUMpOwotfQotCi0KIHZvaWQgdXZfdWRwX2Nsb3NlKHV2X2xvb3BfdCogbG9vcCwgdXZfdWRwX3QqIGhhbmRsZSkgewogICB1dl91ZHBfcmVjdl9zdG9wKGhhbmRsZSk7CiAgIGNsb3Nlc29ja2V0KGhhbmRsZS0+c29ja2V0KTsKQEAgLTcwMiw2ICs2OTAsMTEyIEBACiB9CiAKIAorc3RhdGljIGludCB1dl9fdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcDQodXZfdWRwX3QqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiogbXVsdGljYXN0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiogc291cmNlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9tZW1iZXJzaGlwIG1lbWJlcnNoaXApIHsKKyAgc3RydWN0IGlwX21yZXFfc291cmNlIG1yZXE7CisgIGludCBvcHRuYW1lOworICBpbnQgZXJyOworCisgIGlmIChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0lQVjYpCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKworICAvKiBJZiB0aGUgc29ja2V0IGlzIHVuYm91bmQsIGJpbmQgdG8gaW5hZGRyX2FueS4gKi8KKyAgZXJyID0gdXZfdWRwX21heWJlX2JpbmQoaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgJnV2X2FkZHJfaXA0X2FueV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1dl9hZGRyX2lwNF9hbnlfKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVZfVURQX1JFVVNFQUREUik7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyKTsKKworICBtZW1zZXQoJm1yZXEsIDAsIHNpemVvZihtcmVxKSk7CisKKyAgaWYgKGludGVyZmFjZV9hZGRyICE9IE5VTEwpIHsKKyAgICBlcnIgPSB1dl9pbmV0X3B0b24oQUZfSU5FVCwgaW50ZXJmYWNlX2FkZHIsICZtcmVxLmltcl9pbnRlcmZhY2Uuc19hZGRyKTsKKyAgICBpZiAoZXJyKQorICAgICAgcmV0dXJuIGVycjsKKyAgfSBlbHNlIHsKKyAgICBtcmVxLmltcl9pbnRlcmZhY2Uuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgIH0KKworICBtcmVxLmltcl9tdWx0aWFkZHIuc19hZGRyID0gbXVsdGljYXN0X2FkZHItPnNpbl9hZGRyLnNfYWRkcjsKKyAgbXJlcS5pbXJfc291cmNlYWRkci5zX2FkZHIgPSBzb3VyY2VfYWRkci0+c2luX2FkZHIuc19hZGRyOworCisgIGlmIChtZW1iZXJzaGlwID09IFVWX0pPSU5fR1JPVVApCisgICAgb3B0bmFtZSA9IElQX0FERF9TT1VSQ0VfTUVNQkVSU0hJUDsKKyAgZWxzZSBpZiAobWVtYmVyc2hpcCA9PSBVVl9MRUFWRV9HUk9VUCkKKyAgICBvcHRuYW1lID0gSVBfRFJPUF9TT1VSQ0VfTUVNQkVSU0hJUDsKKyAgZWxzZQorICAgIHJldHVybiBVVl9FSU5WQUw7CisKKyAgaWYgKHNldHNvY2tvcHQoaGFuZGxlLT5zb2NrZXQsCisgICAgICAgICAgICAgICAgIElQUFJPVE9fSVAsCisgICAgICAgICAgICAgICAgIG9wdG5hbWUsCisgICAgICAgICAgICAgICAgIChjaGFyKikgJm1yZXEsCisgICAgICAgICAgICAgICAgIHNpemVvZihtcmVxKSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoV1NBR2V0TGFzdEVycm9yKCkpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKworaW50IHV2X191ZHBfc2V0X3NvdXJjZV9tZW1iZXJzaGlwNih1dl91ZHBfdCogaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42KiBtdWx0aWNhc3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW50ZXJmYWNlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYqIHNvdXJjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9tZW1iZXJzaGlwIG1lbWJlcnNoaXApIHsKKyAgc3RydWN0IGdyb3VwX3NvdXJjZV9yZXEgbXJlcTsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyNjsKKyAgaW50IG9wdG5hbWU7CisgIGludCBlcnI7CisKKyAgaWYgKChoYW5kbGUtPmZsYWdzICYgVVZfSEFORExFX0JPVU5EKSAmJiAhKGhhbmRsZS0+ZmxhZ3MgJiBVVl9IQU5ETEVfSVBWNikpCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKworICBlcnIgPSB1dl91ZHBfbWF5YmVfYmluZChoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSAmdXZfYWRkcl9pcDZfYW55XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHV2X2FkZHJfaXA2X2FueV8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVVl9VRFBfUkVVU0VBRERSKTsKKworICBpZiAoZXJyKQorICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKGVycik7CisKKyAgbWVtc2V0KCZtcmVxLCAwLCBzaXplb2YobXJlcSkpOworCisgIGlmIChpbnRlcmZhY2VfYWRkciAhPSBOVUxMKSB7CisgICAgZXJyID0gdXZfaXA2X2FkZHIoaW50ZXJmYWNlX2FkZHIsIDAsICZhZGRyNik7CisgICAgaWYgKGVycikKKyAgICAgIHJldHVybiBlcnI7CisgICAgbXJlcS5nc3JfaW50ZXJmYWNlID0gYWRkcjYuc2luNl9zY29wZV9pZDsKKyAgfSBlbHNlIHsKKyAgICBtcmVxLmdzcl9pbnRlcmZhY2UgPSAwOworICB9CisKKyAgbWVtY3B5KCZtcmVxLmdzcl9ncm91cCwgbXVsdGljYXN0X2FkZHIsIHNpemVvZihtcmVxLmdzcl9ncm91cCkpOworICBtZW1jcHkoJm1yZXEuZ3NyX3NvdXJjZSwgc291cmNlX2FkZHIsIHNpemVvZihtcmVxLmdzcl9zb3VyY2UpKTsKKworICBpZiAobWVtYmVyc2hpcCA9PSBVVl9KT0lOX0dST1VQKQorICAgIG9wdG5hbWUgPSBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUDsKKyAgZWxzZSBpZiAobWVtYmVyc2hpcCA9PSBVVl9MRUFWRV9HUk9VUCkKKyAgICBvcHRuYW1lID0gTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQOworICBlbHNlCisgICAgcmV0dXJuIFVWX0VJTlZBTDsKKworICBpZiAoc2V0c29ja29wdChoYW5kbGUtPnNvY2tldCwKKyAgICAgICAgICAgICAgICAgSVBQUk9UT19JUFY2LAorICAgICAgICAgICAgICAgICBvcHRuYW1lLAorICAgICAgICAgICAgICAgICAoY2hhciopICZtcmVxLAorICAgICAgICAgICAgICAgICBzaXplb2YobXJlcSkpID09IFNPQ0tFVF9FUlJPUikgeworICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKFdTQUdldExhc3RFcnJvcigpKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCisKIGludCB1dl91ZHBfc2V0X21lbWJlcnNoaXAodXZfdWRwX3QqIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbXVsdGljYXN0X2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZV9hZGRyLApAQCAtNzE4LDYgKzgxMiw1MCBAQAogfQogCiAKK2ludCB1dl91ZHBfc2V0X3NvdXJjZV9tZW1iZXJzaGlwKHV2X3VkcF90KiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtdWx0aWNhc3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGludGVyZmFjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc291cmNlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dl9tZW1iZXJzaGlwIG1lbWJlcnNoaXApIHsKKyAgaW50IGVycjsKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbWNhc3RfYWRkcjsKKyAgc3RydWN0IHNvY2thZGRyX2luKiBtY2FzdF9hZGRyNDsKKyAgc3RydWN0IHNvY2thZGRyX2luNiogbWNhc3RfYWRkcjY7CisgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNyY19hZGRyOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4qIHNyY19hZGRyNDsKKyAgc3RydWN0IHNvY2thZGRyX2luNiogc3JjX2FkZHI2OworCisgIG1jYXN0X2FkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiopJm1jYXN0X2FkZHI7CisgIG1jYXN0X2FkZHI2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYqKSZtY2FzdF9hZGRyOworICBzcmNfYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luKikmc3JjX2FkZHI7CisgIHNyY19hZGRyNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42Kikmc3JjX2FkZHI7CisKKyAgZXJyID0gdXZfaXA0X2FkZHIobXVsdGljYXN0X2FkZHIsIDAsIG1jYXN0X2FkZHI0KTsKKyAgaWYgKGVycikgeworICAgIGVyciA9IHV2X2lwNl9hZGRyKG11bHRpY2FzdF9hZGRyLCAwLCBtY2FzdF9hZGRyNik7CisgICAgaWYgKGVycikKKyAgICAgIHJldHVybiBlcnI7CisgICAgZXJyID0gdXZfaXA2X2FkZHIoc291cmNlX2FkZHIsIDAsIHNyY19hZGRyNik7CisgICAgaWYgKGVycikKKyAgICAgIHJldHVybiBlcnI7CisgICAgcmV0dXJuIHV2X191ZHBfc2V0X3NvdXJjZV9tZW1iZXJzaGlwNihoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY2FzdF9hZGRyNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FkZHI2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyc2hpcCk7CisgIH0KKyAgCisgIGVyciA9IHV2X2lwNF9hZGRyKHNvdXJjZV9hZGRyLCAwLCBzcmNfYWRkcjQpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisgIHJldHVybiB1dl9fdWRwX3NldF9zb3VyY2VfbWVtYmVyc2hpcDQoaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jYXN0X2FkZHI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hZGRyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJzaGlwKTsKK30KKworCiBpbnQgdXZfdWRwX3NldF9tdWx0aWNhc3RfaW50ZXJmYWNlKHV2X3VkcF90KiBoYW5kbGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZV9hZGRyKSB7CiAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJfc3Q7CiAgIHN0cnVjdCBzb2NrYWRkcl9pbiogYWRkcjQ7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3V0aWwuYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdXRpbC5jCmluZGV4IDdjYTgzMjEuLjllMWU3ZjcgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdXRpbC5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vdXRpbC5jCkBAIC02MCw4ICs2MCw4IEBACiAjZW5kaWYKIAogCi0vKiBNYXhpbXVtIGVudmlyb25tZW50IHZhcmlhYmxlIHNpemUsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCAqLwotI2RlZmluZSBNQVhfRU5WX1ZBUl9MRU5HVEggMzI3NjcKKy8qIEEgUnRsR2VuUmFuZG9tKCkgYnkgYW55IG90aGVyIG5hbWUuLi4gKi8KK2V4dGVybiBCT09MRUFOIE5UQVBJIFN5c3RlbUZ1bmN0aW9uMDM2KFBWT0lEIEJ1ZmZlciwgVUxPTkcgQnVmZmVyTGVuZ3RoKTsKIAogLyogQ2FjaGVkIGNvcHkgb2YgdGhlIHByb2Nlc3MgdGl0bGUsIHBsdXMgYSBtdXRleCBndWFyZGluZyBpdC4gKi8KIHN0YXRpYyBjaGFyICpwcm9jZXNzX3RpdGxlOwpAQCAtMTUxLDIwICsxNTEsMjYgQEAKIAogaW50IHV2X2N3ZChjaGFyKiBidWZmZXIsIHNpemVfdCogc2l6ZSkgewogICBEV09SRCB1dGYxNl9sZW47Ci0gIFdDSEFSIHV0ZjE2X2J1ZmZlcltNQVhfUEFUSF07CisgIFdDSEFSICp1dGYxNl9idWZmZXI7CiAgIGludCByOwogCiAgIGlmIChidWZmZXIgPT0gTlVMTCB8fCBzaXplID09IE5VTEwpIHsKICAgICByZXR1cm4gVVZfRUlOVkFMOwogICB9CiAKLSAgdXRmMTZfbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgsIHV0ZjE2X2J1ZmZlcik7CisgIHV0ZjE2X2xlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKDAsIE5VTEwpOwogICBpZiAodXRmMTZfbGVuID09IDApIHsKICAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7Ci0gIH0gZWxzZSBpZiAodXRmMTZfbGVuID4gTUFYX1BBVEgpIHsKLSAgICAvKiBUaGlzIHNob3VsZCBiZSBpbXBvc3NpYmxlOyBob3dldmVyIHRoZSBDUlQgaGFzIGEgY29kZSBwYXRoIHRvIGRlYWwgd2l0aAotICAgICAqIHRoaXMgc2NlbmFyaW8sIHNvIEkgYWRkZWQgYSBjaGVjayBhbnl3YXkuICovCi0gICAgcmV0dXJuIFVWX0VJTzsKKyAgfQorICB1dGYxNl9idWZmZXIgPSB1dl9fbWFsbG9jKHV0ZjE2X2xlbiAqIHNpemVvZihXQ0hBUikpOworICBpZiAodXRmMTZfYnVmZmVyID09IE5VTEwpIHsKKyAgICByZXR1cm4gVVZfRU5PTUVNOworICB9CisKKyAgdXRmMTZfbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcodXRmMTZfbGVuLCB1dGYxNl9idWZmZXIpOworICBpZiAodXRmMTZfbGVuID09IDApIHsKKyAgICB1dl9fZnJlZSh1dGYxNl9idWZmZXIpOworICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKICAgfQogCiAgIC8qIHV0ZjE2X2xlbiBjb250YWlucyB0aGUgbGVuZ3RoLCAqbm90KiBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwuICovCkBAIC0xODgsOCArMTk0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICBpZiAociA9PSAwKSB7CisgICAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsKICAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CiAgIH0gZWxzZSBpZiAociA+IChpbnQpICpzaXplKSB7CisgICAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsKICAgICAqc2l6ZSA9IHI7CiAgICAgcmV0dXJuIFVWX0VOT0JVRlM7CiAgIH0KQEAgLTIwMyw2ICsyMTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAqc2l6ZSA+IElOVF9NQVggPyBJTlRfTUFYIDogKGludCkgKnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICB1dl9fZnJlZSh1dGYxNl9idWZmZXIpOworCiAgIGlmIChyID09IDApIHsKICAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CiAgIH0KQEAgLTIxMyw0MyArMjIzLDYxIEBACiAKIAogaW50IHV2X2NoZGlyKGNvbnN0IGNoYXIqIGRpcikgewotICBXQ0hBUiB1dGYxNl9idWZmZXJbTUFYX1BBVEhdOwotICBzaXplX3QgdXRmMTZfbGVuOworICBXQ0hBUiAqdXRmMTZfYnVmZmVyOworICBzaXplX3QgdXRmMTZfbGVuLCBuZXdfdXRmMTZfbGVuOwogICBXQ0hBUiBkcml2ZV9sZXR0ZXIsIGVudl92YXJbNF07CiAKICAgaWYgKGRpciA9PSBOVUxMKSB7CiAgICAgcmV0dXJuIFVWX0VJTlZBTDsKICAgfQogCisgIHV0ZjE2X2xlbiA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfVVRGOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICBpZiAodXRmMTZfbGVuID09IDApIHsKKyAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CisgIH0KKyAgdXRmMTZfYnVmZmVyID0gdXZfX21hbGxvYyh1dGYxNl9sZW4gKiBzaXplb2YoV0NIQVIpKTsKKyAgaWYgKHV0ZjE2X2J1ZmZlciA9PSBOVUxMKSB7CisgICAgcmV0dXJuIFVWX0VOT01FTTsKKyAgfQorCiAgIGlmIChNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjE2X2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1BBVEgpID09IDApIHsKLSAgICBEV09SRCBlcnJvciA9IEdldExhc3RFcnJvcigpOwotICAgIC8qIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyAyNjAgY2hhcnMsCi0gICAgICogaW5jbHVkaW5nIHRlcm1pbmF0aW5nIG51bGwuIElmIGl0IGRvZXNuJ3QgZml0LCB0aGUgcGF0aCBuYW1lIG11c3QgYmUgdG9vCi0gICAgICogbG9uZy4gKi8KLSAgICBpZiAoZXJyb3IgPT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikgewotICAgICAgcmV0dXJuIFVWX0VOQU1FVE9PTE9ORzsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoZXJyb3IpOwotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmMTZfbGVuKSA9PSAwKSB7CisgICAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsKKyAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CiAgIH0KIAogICBpZiAoIVNldEN1cnJlbnREaXJlY3RvcnlXKHV0ZjE2X2J1ZmZlcikpIHsKKyAgICB1dl9fZnJlZSh1dGYxNl9idWZmZXIpOwogICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKICAgfQogCiAgIC8qIFdpbmRvd3Mgc3RvcmVzIHRoZSBkcml2ZS1sb2NhbCBwYXRoIGluIGFuICJoaWRkZW4iIGVudmlyb25tZW50IHZhcmlhYmxlLAogICAgKiB3aGljaCBoYXMgdGhlIGZvcm0gIj1DOj1DOlxXaW5kb3dzIi4gU2V0Q3VycmVudERpcmVjdG9yeSBkb2VzIG5vdCB1cGRhdGUKICAgICogdGhpcywgc28gd2UnbGwgaGF2ZSB0byBkbyBpdC4gKi8KLSAgdXRmMTZfbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgsIHV0ZjE2X2J1ZmZlcik7CisgIG5ld191dGYxNl9sZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5Vyh1dGYxNl9sZW4sIHV0ZjE2X2J1ZmZlcik7CisgIGlmIChuZXdfdXRmMTZfbGVuID4gdXRmMTZfbGVuICkgeworICAgIHV2X19mcmVlKHV0ZjE2X2J1ZmZlcik7CisgICAgdXRmMTZfYnVmZmVyID0gdXZfX21hbGxvYyhuZXdfdXRmMTZfbGVuICogc2l6ZW9mKFdDSEFSKSk7CisgICAgaWYgKHV0ZjE2X2J1ZmZlciA9PSBOVUxMKSB7CisgICAgICAvKiBXaGVuIHVwZGF0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBmYWlscywgcmV0dXJuIFVWX09LIGFueXdheS4KKyAgICAgICAqIFdlIGRpZCBzdWNjZXNzZnVsbHkgY2hhbmdlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIG9ubHkgdXBkYXRpbmcKKyAgICAgICAqIGhpZGRlbiBlbnYgdmFyaWFibGUgZmFpbGVkLiAqLworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG5ld191dGYxNl9sZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhuZXdfdXRmMTZfbGVuLCB1dGYxNl9idWZmZXIpOworICB9CiAgIGlmICh1dGYxNl9sZW4gPT0gMCkgewotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKLSAgfSBlbHNlIGlmICh1dGYxNl9sZW4gPiBNQVhfUEFUSCkgewotICAgIHJldHVybiBVVl9FSU87CisgICAgdXZfX2ZyZWUodXRmMTZfYnVmZmVyKTsKKyAgICByZXR1cm4gMDsKICAgfQogCiAgIC8qIFRoZSByZXR1cm5lZCBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBoYXZlIGEgdHJhaWxpbmcgc2xhc2gsIHVubGVzcyBpdCBwb2ludHMKQEAgLTI4MSwxMSArMzA5LDEwIEBACiAgICAgZW52X3ZhclsyXSA9IEwnOic7CiAgICAgZW52X3ZhclszXSA9IEwnXDAnOwogCi0gICAgaWYgKCFTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhlbnZfdmFyLCB1dGYxNl9idWZmZXIpKSB7Ci0gICAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7Ci0gICAgfQorICAgIFNldEVudmlyb25tZW50VmFyaWFibGVXKGVudl92YXIsIHV0ZjE2X2J1ZmZlcik7CiAgIH0KIAorICB1dl9fZnJlZSh1dGYxNl9idWZmZXIpOwogICByZXR1cm4gMDsKIH0KIApAQCAtMzU4LDYgKzM4NSwxMCBAQAogfQogCiAKK3ZvaWQgdXZfX3Byb2Nlc3NfdGl0bGVfY2xlYW51cCh2b2lkKSB7Cit9CisKKwogaW50IHV2X3NldF9wcm9jZXNzX3RpdGxlKGNvbnN0IGNoYXIqIHRpdGxlKSB7CiAgIGludCBlcnI7CiAgIGludCBsZW5ndGg7CkBAIC03MjEsMTcgKzc1Miw2IEBACiB9CiAKIAotdm9pZCB1dl9mcmVlX2NwdV9pbmZvKHV2X2NwdV9pbmZvX3QqIGNwdV9pbmZvcywgaW50IGNvdW50KSB7Ci0gIGludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgdXZfX2ZyZWUoY3B1X2luZm9zW2ldLm1vZGVsKTsKLSAgfQotCi0gIHV2X19mcmVlKGNwdV9pbmZvcyk7Ci19Ci0KLQogc3RhdGljIGludCBpc193aW5kb3dzX3ZlcnNpb25fb3JfZ3JlYXRlcihEV09SRCBvc19tYWpvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgb3NfbWlub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQgc2VydmljZV9wYWNrX21ham9yLApAQCAtMTE3MSwyMCArMTE5MSwyOSBAQAogCiAKIGludCB1dl9vc190bXBkaXIoY2hhciogYnVmZmVyLCBzaXplX3QqIHNpemUpIHsKLSAgd2NoYXJfdCBwYXRoW01BWF9QQVRIICsgMV07CisgIHdjaGFyX3QgKnBhdGg7CiAgIERXT1JEIGJ1ZnNpemU7CiAgIHNpemVfdCBsZW47CiAKICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8IHNpemUgPT0gTlVMTCB8fCAqc2l6ZSA9PSAwKQogICAgIHJldHVybiBVVl9FSU5WQUw7CiAKLSAgbGVuID0gR2V0VGVtcFBhdGhXKE1BWF9QQVRIICsgMSwgcGF0aCk7Ci0KKyAgbGVuID0gMDsKKyAgbGVuID0gR2V0VGVtcFBhdGhXKDAsIE5VTEwpOwogICBpZiAobGVuID09IDApIHsKICAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7Ci0gIH0gZWxzZSBpZiAobGVuID4gTUFYX1BBVEggKyAxKSB7Ci0gICAgLyogVGhpcyBzaG91bGQgbm90IGJlIHBvc3NpYmxlICovCi0gICAgcmV0dXJuIFVWX0VJTzsKKyAgfQorICAvKiBJbmNsdWRlIHNwYWNlIGZvciB0ZXJtaW5hdGluZyBudWxsIGNoYXIuICovCisgIGxlbiArPSAxOworICBwYXRoID0gdXZfX21hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICBpZiAocGF0aCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIFVWX0VOT01FTTsKKyAgfQorICBsZW4gID0gR2V0VGVtcFBhdGhXKGxlbiwgcGF0aCk7CisKKyAgaWYgKGxlbiA9PSAwKSB7CisgICAgdXZfX2ZyZWUocGF0aCk7CisgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwogICB9CiAKICAgLyogVGhlIHJldHVybmVkIGRpcmVjdG9yeSBzaG91bGQgbm90IGhhdmUgYSB0cmFpbGluZyBzbGFzaCwgdW5sZXNzIGl0IHBvaW50cwpAQCAtMTE5OSw4ICsxMjI4LDEwIEBACiAgIGJ1ZnNpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIHBhdGgsIC0xLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKIAogICBpZiAoYnVmc2l6ZSA9PSAwKSB7CisgICAgdXZfX2ZyZWUocGF0aCk7CiAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwogICB9IGVsc2UgaWYgKGJ1ZnNpemUgPiAqc2l6ZSkgeworICAgIHV2X19mcmVlKHBhdGgpOwogICAgICpzaXplID0gYnVmc2l6ZTsKICAgICByZXR1cm4gVVZfRU5PQlVGUzsKICAgfQpAQCAtMTIxNCw2ICsxMjQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICB1dl9fZnJlZShwYXRoKTsKIAogICBpZiAoYnVmc2l6ZSA9PSAwKQogICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKQEAgLTEzMjUsNyArMTM1Nyw3IEBACiAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwogICB9CiAKLSAgKCp1dGYxNilbYnVmc2l6ZV0gPSAnXDAnOworICAoKnV0ZjE2KVtidWZzaXplXSA9IEwnXDAnOwogICByZXR1cm4gMDsKIH0KIApAQCAtMTMzMyw3ICsxMzY1LDcgQEAKIGludCB1dl9fZ2V0cHd1aWRfcih1dl9wYXNzd2RfdCogcHdkKSB7CiAgIEhBTkRMRSB0b2tlbjsKICAgd2NoYXJfdCB1c2VybmFtZVtVTkxFTiArIDFdOwotICB3Y2hhcl90IHBhdGhbTUFYX1BBVEhdOworICB3Y2hhcl90ICpwYXRoOwogICBEV09SRCBidWZzaXplOwogICBpbnQgcjsKIApAQCAtMTM0NCwxNSArMTM3NiwyNCBAQAogICBpZiAoT3BlblByb2Nlc3NUb2tlbihHZXRDdXJyZW50UHJvY2VzcygpLCBUT0tFTl9SRUFELCAmdG9rZW4pID09IDApCiAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOwogCi0gIGJ1ZnNpemUgPSBBUlJBWV9TSVpFKHBhdGgpOworICBidWZzaXplID0gMDsKKyAgR2V0VXNlclByb2ZpbGVEaXJlY3RvcnlXKHRva2VuLCBOVUxMLCAmYnVmc2l6ZSk7CisgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSB7CisgICAgciA9IEdldExhc3RFcnJvcigpOworICAgIENsb3NlSGFuZGxlKHRva2VuKTsKKyAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihyKTsKKyAgfQorCisgIHBhdGggPSB1dl9fbWFsbG9jKGJ1ZnNpemUgKiBzaXplb2Yod2NoYXJfdCkpOworICBpZiAocGF0aCA9PSBOVUxMKSB7CisgICAgQ2xvc2VIYW5kbGUodG9rZW4pOworICAgIHJldHVybiBVVl9FTk9NRU07CisgIH0KKwogICBpZiAoIUdldFVzZXJQcm9maWxlRGlyZWN0b3J5Vyh0b2tlbiwgcGF0aCwgJmJ1ZnNpemUpKSB7CiAgICAgciA9IEdldExhc3RFcnJvcigpOwogICAgIENsb3NlSGFuZGxlKHRva2VuKTsKLQotICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSAqLwotICAgIGlmIChyID09IEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpCi0gICAgICByZXR1cm4gVVZfRU5PTUVNOwotCisgICAgdXZfX2ZyZWUocGF0aCk7CiAgICAgcmV0dXJuIHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3Iocik7CiAgIH0KIApAQCAtMTM2Miw2ICsxNDAzLDcgQEAKICAgYnVmc2l6ZSA9IEFSUkFZX1NJWkUodXNlcm5hbWUpOwogICBpZiAoIUdldFVzZXJOYW1lVyh1c2VybmFtZSwgJmJ1ZnNpemUpKSB7CiAgICAgciA9IEdldExhc3RFcnJvcigpOworICAgIHV2X19mcmVlKHBhdGgpOwogCiAgICAgLyogVGhpcyBzaG91bGQgbm90IGJlIHBvc3NpYmxlICovCiAgICAgaWYgKHIgPT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikKQEAgLTEzNzIsNiArMTQxNCw3IEBACiAKICAgcHdkLT5ob21lZGlyID0gTlVMTDsKICAgciA9IHV2X19jb252ZXJ0X3V0ZjE2X3RvX3V0ZjgocGF0aCwgLTEsICZwd2QtPmhvbWVkaXIpOworICB1dl9fZnJlZShwYXRoKTsKIAogICBpZiAociAhPSAwKQogICAgIHJldHVybiByOwpAQCAtMTM5Nyw4ICsxNDQwLDgxIEBACiB9CiAKIAoraW50IHV2X29zX2Vudmlyb24odXZfZW52X2l0ZW1fdCoqIGVudml0ZW1zLCBpbnQqIGNvdW50KSB7CisgIHdjaGFyX3QqIGVudjsKKyAgd2NoYXJfdCogcGVudjsKKyAgaW50IGksIGNudDsKKyAgdXZfZW52X2l0ZW1fdCogZW52aXRlbTsKKworICAqZW52aXRlbXMgPSBOVUxMOworICAqY291bnQgPSAwOworCisgIGVudiA9IEdldEVudmlyb25tZW50U3RyaW5nc1coKTsKKyAgaWYgKGVudiA9PSBOVUxMKQorICAgIHJldHVybiAwOworCisgIGZvciAocGVudiA9IGVudiwgaSA9IDA7ICpwZW52ICE9IEwnXDAnOyBwZW52ICs9IHdjc2xlbihwZW52KSArIDEsIGkrKyk7CisKKyAgKmVudml0ZW1zID0gdXZfX2NhbGxvYyhpLCBzaXplb2YoKiplbnZpdGVtcykpOworICBpZiAoKmVudml0ZW1zID09IE5VTEwpIHsKKyAgICBGcmVlRW52aXJvbm1lbnRTdHJpbmdzVyhlbnYpOworICAgIHJldHVybiBVVl9FTk9NRU07CisgIH0KKworICBwZW52ID0gZW52OworICBjbnQgPSAwOworCisgIHdoaWxlICgqcGVudiAhPSBMJ1wwJyAmJiBjbnQgPCBpKSB7CisgICAgY2hhciogYnVmOworICAgIGNoYXIqIHB0cjsKKworICAgIGlmICh1dl9fY29udmVydF91dGYxNl90b191dGY4KHBlbnYsIC0xLCAmYnVmKSAhPSAwKQorICAgICAgZ290byBmYWlsOworCisgICAgLyogVXNpbmcgYnVmICsgMSBoZXJlIGJlY2F1c2Ugd2Uga25vdyB0aGF0IGBidWZgIGhhcyBsZW5ndGggYXQgbGVhc3QgMSwKKyAgICAgKiBhbmQgc29tZSBzcGVjaWFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBvbiBXaW5kb3dzIHN0YXJ0IHdpdGggYSA9IHNpZ24uICovCisgICAgcHRyID0gc3RyY2hyKGJ1ZiArIDEsICc9Jyk7CisgICAgaWYgKHB0ciA9PSBOVUxMKSB7CisgICAgICB1dl9fZnJlZShidWYpOworICAgICAgZ290byBkb19jb250aW51ZTsKKyAgICB9CisKKyAgICAqcHRyID0gJ1wwJzsKKworICAgIGVudml0ZW0gPSAmKCplbnZpdGVtcylbY250XTsKKyAgICBlbnZpdGVtLT5uYW1lID0gYnVmOworICAgIGVudml0ZW0tPnZhbHVlID0gcHRyICsgMTsKKworICAgIGNudCsrOworCisgIGRvX2NvbnRpbnVlOgorICAgIHBlbnYgKz0gd2NzbGVuKHBlbnYpICsgMTsKKyAgfQorCisgIEZyZWVFbnZpcm9ubWVudFN0cmluZ3NXKGVudik7CisKKyAgKmNvdW50ID0gY250OworICByZXR1cm4gMDsKKworZmFpbDoKKyAgRnJlZUVudmlyb25tZW50U3RyaW5nc1coZW52KTsKKworICBmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKyAgICBlbnZpdGVtID0gJigqZW52aXRlbXMpW2NudF07CisgICAgdXZfX2ZyZWUoZW52aXRlbS0+bmFtZSk7CisgIH0KKyAgdXZfX2ZyZWUoKmVudml0ZW1zKTsKKworICAqZW52aXRlbXMgPSBOVUxMOworICAqY291bnQgPSAwOworICByZXR1cm4gVVZfRU5PTUVNOworfQorCisKIGludCB1dl9vc19nZXRlbnYoY29uc3QgY2hhciogbmFtZSwgY2hhciogYnVmZmVyLCBzaXplX3QqIHNpemUpIHsKLSAgd2NoYXJfdCB2YXJbTUFYX0VOVl9WQVJfTEVOR1RIXTsKKyAgd2NoYXJfdCBmYXN0dmFyWzUxMl07CisgIHdjaGFyX3QqIHZhcjsKKyAgRFdPUkQgdmFybGVuOwogICB3Y2hhcl90KiBuYW1lX3c7CiAgIERXT1JEIGJ1ZnNpemU7CiAgIHNpemVfdCBsZW47CkBAIC0xNDEyLDI3ICsxNTI4LDUyIEBACiAgIGlmIChyICE9IDApCiAgICAgcmV0dXJuIHI7CiAKLSAgbGVuID0gR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcobmFtZV93LCB2YXIsIE1BWF9FTlZfVkFSX0xFTkdUSCk7CisgIHZhciA9IGZhc3R2YXI7CisgIHZhcmxlbiA9IEFSUkFZX1NJWkUoZmFzdHZhcik7CisKKyAgZm9yICg7OykgeworICAgIFNldExhc3RFcnJvcihFUlJPUl9TVUNDRVNTKTsKKyAgICBsZW4gPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhuYW1lX3csIHZhciwgdmFybGVuKTsKKworICAgIGlmIChsZW4gPCB2YXJsZW4pCisgICAgICBicmVhazsKKworICAgIC8qIFRyeSByZXBlYXRlZGx5IGJlY2F1c2Ugd2UgbWlnaHQgaGF2ZSBiZWVuIHByZWVtcHRlZCBieSBhbm90aGVyIHRocmVhZAorICAgICAqIG1vZGlmeWluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUganVzdCBhcyB3ZSdyZSB0cnlpbmcgdG8gcmVhZCBpdC4KKyAgICAgKi8KKyAgICBpZiAodmFyICE9IGZhc3R2YXIpCisgICAgICB1dl9fZnJlZSh2YXIpOworCisgICAgdmFybGVuID0gMSArIGxlbjsKKyAgICB2YXIgPSB1dl9fbWFsbG9jKHZhcmxlbiAqIHNpemVvZigqdmFyKSk7CisKKyAgICBpZiAodmFyID09IE5VTEwpIHsKKyAgICAgIHIgPSBVVl9FTk9NRU07CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICB9CisKICAgdXZfX2ZyZWUobmFtZV93KTsKLSAgYXNzZXJ0KGxlbiA8IE1BWF9FTlZfVkFSX0xFTkdUSCk7IC8qIGxlbiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBudWxsICovCisgIG5hbWVfdyA9IE5VTEw7CiAKICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgciA9IEdldExhc3RFcnJvcigpOwotCi0gICAgaWYgKHIgPT0gRVJST1JfRU5WVkFSX05PVF9GT1VORCkKLSAgICAgIHJldHVybiBVVl9FTk9FTlQ7Ci0KLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihyKTsKKyAgICBpZiAociAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICByID0gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihyKTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CiAgIH0KIAogICAvKiBDaGVjayBob3cgbXVjaCBzcGFjZSB3ZSBuZWVkICovCiAgIGJ1ZnNpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIHZhciwgLTEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOwogCiAgIGlmIChidWZzaXplID09IDApIHsKLSAgICByZXR1cm4gdXZfdHJhbnNsYXRlX3N5c19lcnJvcihHZXRMYXN0RXJyb3IoKSk7CisgICAgciA9IHV2X3RyYW5zbGF0ZV9zeXNfZXJyb3IoR2V0TGFzdEVycm9yKCkpOworICAgIGdvdG8gZmFpbDsKICAgfSBlbHNlIGlmIChidWZzaXplID4gKnNpemUpIHsKICAgICAqc2l6ZSA9IGJ1ZnNpemU7Ci0gICAgcmV0dXJuIFVWX0VOT0JVRlM7CisgICAgciA9IFVWX0VOT0JVRlM7CisgICAgZ290byBmYWlsOwogICB9CiAKICAgLyogQ29udmVydCB0byBVVEYtOCAqLwpAQCAtMTQ0NSwxMSArMTU4NiwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIAotICBpZiAoYnVmc2l6ZSA9PSAwKQotICAgIHJldHVybiB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKKyAgaWYgKGJ1ZnNpemUgPT0gMCkgeworICAgIHIgPSB1dl90cmFuc2xhdGVfc3lzX2Vycm9yKEdldExhc3RFcnJvcigpKTsKKyAgICBnb3RvIGZhaWw7CisgIH0KIAogICAqc2l6ZSA9IGJ1ZnNpemUgLSAxOwotICByZXR1cm4gMDsKKyAgciA9IDA7CisKK2ZhaWw6CisKKyAgaWYgKG5hbWVfdyAhPSBOVUxMKQorICAgIHV2X19mcmVlKG5hbWVfdyk7CisKKyAgaWYgKHZhciAhPSBmYXN0dmFyKQorICAgIHV2X19mcmVlKHZhcik7CisKKyAgcmV0dXJuIHI7CiB9CiAKIApAQCAtMTgwMiwzICsxOTU1LDE3IEBACiAgIHR2LT50dl91c2VjID0gKGludDMyX3QpICgoKHVsYXJnZS5RdWFkUGFydCAtIGVwb2NoKSAlIDEwMDAwMDAwTCkgLyAxMCk7CiAgIHJldHVybiAwOwogfQorCitpbnQgdXZfX3JhbmRvbV9ydGxnZW5yYW5kb20odm9pZCogYnVmLCBzaXplX3QgYnVmbGVuKSB7CisgIGlmIChidWZsZW4gPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoU3lzdGVtRnVuY3Rpb24wMzYoYnVmLCBidWZsZW4pID09IEZBTFNFKQorICAgIHJldHVybiBVVl9FSU87CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXZfc2xlZXAodW5zaWduZWQgaW50IG1zZWMpIHsKKyAgU2xlZXAobXNlYyk7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbmFwaS5jIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5hcGkuYwppbmRleCBmYmJiY2VlLi5iYjg2ZWM4IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbmFwaS5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vd2luYXBpLmMKQEAgLTM0LDYgKzM0LDcgQEAKIHNOdFF1ZXJ5Vm9sdW1lSW5mb3JtYXRpb25GaWxlIHBOdFF1ZXJ5Vm9sdW1lSW5mb3JtYXRpb25GaWxlOwogc050UXVlcnlEaXJlY3RvcnlGaWxlIHBOdFF1ZXJ5RGlyZWN0b3J5RmlsZTsKIHNOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb24gcE50UXVlcnlTeXN0ZW1JbmZvcm1hdGlvbjsKK3NOdFF1ZXJ5SW5mb3JtYXRpb25Qcm9jZXNzIHBOdFF1ZXJ5SW5mb3JtYXRpb25Qcm9jZXNzOwogCiAvKiBLZXJuZWwzMiBmdW5jdGlvbiBwb2ludGVycyAqLwogc0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNFeCBwR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c0V4OwpAQCAtMTA2LDYgKzEwNywxMyBAQAogICAgIHV2X2ZhdGFsX2Vycm9yKEdldExhc3RFcnJvcigpLCAiR2V0UHJvY0FkZHJlc3MiKTsKICAgfQogCisgIHBOdFF1ZXJ5SW5mb3JtYXRpb25Qcm9jZXNzID0gKHNOdFF1ZXJ5SW5mb3JtYXRpb25Qcm9jZXNzKSBHZXRQcm9jQWRkcmVzcygKKyAgICAgIG50ZGxsX21vZHVsZSwKKyAgICAgICJOdFF1ZXJ5SW5mb3JtYXRpb25Qcm9jZXNzIik7CisgIGlmIChwTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcyA9PSBOVUxMKSB7CisgICAgdXZfZmF0YWxfZXJyb3IoR2V0TGFzdEVycm9yKCksICJHZXRQcm9jQWRkcmVzcyIpOworICB9CisKICAga2VybmVsMzJfbW9kdWxlID0gR2V0TW9kdWxlSGFuZGxlQSgia2VybmVsMzIuZGxsIik7CiAgIGlmIChrZXJuZWwzMl9tb2R1bGUgPT0gTlVMTCkgewogICAgIHV2X2ZhdGFsX2Vycm9yKEdldExhc3RFcnJvcigpLCAiR2V0TW9kdWxlSGFuZGxlQSIpOwpAQCAtMTI2LDUgKzEzNCw0IEBACiAgICAgcFNldFdpbkV2ZW50SG9vayA9IChzU2V0V2luRXZlbnRIb29rKQogICAgICAgR2V0UHJvY0FkZHJlc3ModXNlcjMyX21vZHVsZSwgIlNldFdpbkV2ZW50SG9vayIpOwogICB9Ci0KIH0KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vd2luYXBpLmggYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbmFwaS5oCmluZGV4IDFlNDliNTcuLjc3ZjE4NzggMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vd2luYXBpLmgKKysrIGIvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5hcGkuaApAQCAtNDEwOSw3ICs0MTA5LDcgQEAKICNlbmRpZgogCiAvKiBmcm9tIHdpbnRlcm5sLmggKi8KLSNpZiAhZGVmaW5lZChfX1VOSUNPREVfU1RSSU5HX0RFRklORUQpICYmIGRlZmluZWQoX19NSU5HVzMyXykKKyNpZiAhZGVmaW5lZChfX1VOSUNPREVfU1RSSU5HX0RFRklORUQpICYmIGRlZmluZWQoX19NSU5HVzMyX18pCiAjZGVmaW5lIF9fVU5JQ09ERV9TVFJJTkdfREVGSU5FRAogI2VuZGlmCiB0eXBlZGVmIHN0cnVjdCBfVU5JQ09ERV9TVFJJTkcgewpAQCAtNDE2MCw2ICs0MTYwLDEwIEBACiAgICAgICBzdHJ1Y3QgewogICAgICAgICBVQ0hBUiAgRGF0YUJ1ZmZlclsxXTsKICAgICAgIH0gR2VuZXJpY1JlcGFyc2VCdWZmZXI7CisgICAgICBzdHJ1Y3QgeworICAgICAgICBVTE9ORyBTdHJpbmdDb3VudDsKKyAgICAgICAgV0NIQVIgU3RyaW5nTGlzdFsxXTsKKyAgICAgIH0gQXBwRXhlY0xpbmtSZXBhcnNlQnVmZmVyOwogICAgIH07CiAgIH0gUkVQQVJTRV9EQVRBX0JVRkZFUiwgKlBSRVBBUlNFX0RBVEFfQlVGRkVSOwogI2VuZGlmCkBAIC00NDQ0LDYgKzQ0NDgsMTAgQEAKICMgZGVmaW5lIFN5c3RlbVByb2Nlc3NvclBlcmZvcm1hbmNlSW5mb3JtYXRpb24gOAogI2VuZGlmCiAKKyNpZm5kZWYgUHJvY2Vzc0NvbnNvbGVIb3N0UHJvY2VzcworIyBkZWZpbmUgUHJvY2Vzc0NvbnNvbGVIb3N0UHJvY2VzcyA0OQorI2VuZGlmCisKICNpZm5kZWYgRklMRV9ERVZJQ0VfRklMRV9TWVNURU0KICMgZGVmaW5lIEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNIDB4MDAwMDAwMDkKICNlbmRpZgpAQCAtNDUyMSw2ICs0NTI5LDkgQEAKICNpZm5kZWYgSU9fUkVQQVJTRV9UQUdfU1lNTElOSwogIyBkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU1lNTElOSyAoMHhBMDAwMDAwQ0wpCiAjZW5kaWYKKyNpZm5kZWYgSU9fUkVQQVJTRV9UQUdfQVBQRVhFQ0xJTksKKyMgZGVmaW5lIElPX1JFUEFSU0VfVEFHX0FQUEVYRUNMSU5LICgweDgwMDAwMDFCTCkKKyNlbmRpZgogCiB0eXBlZGVmIFZPSUQgKE5UQVBJICpQSU9fQVBDX1JPVVRJTkUpCiAgICAgICAgICAgICAgKFBWT0lEIEFwY0NvbnRleHQsCkBAIC00NTg2LDYgKzQ1OTcsMTMgQEAKICAgICAgICAgICAgICAgICAgIEJPT0xFQU4gUmVzdGFydFNjYW4KICAgICAgICAgICAgICAgICApOwogCit0eXBlZGVmIE5UU1RBVFVTIChOVEFQSSAqc050UXVlcnlJbmZvcm1hdGlvblByb2Nlc3MpCisgICAgICAgICAgICAgICAgIChIQU5ETEUgUHJvY2Vzc0hhbmRsZSwKKyAgICAgICAgICAgICAgICAgIFVJTlQgUHJvY2Vzc0luZm9ybWF0aW9uQ2xhc3MsCisgICAgICAgICAgICAgICAgICBQVk9JRCBQcm9jZXNzSW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgICBVTE9ORyBMZW5ndGgsCisgICAgICAgICAgICAgICAgICBQVUxPTkcgUmV0dXJuTGVuZ3RoKTsKKwogLyoKICAqIEtlcm5lbDMyIGhlYWRlcnMKICAqLwpAQCAtNDcyNyw2ICs0NzQ1LDcgQEAKIGV4dGVybiBzTnRRdWVyeVZvbHVtZUluZm9ybWF0aW9uRmlsZSBwTnRRdWVyeVZvbHVtZUluZm9ybWF0aW9uRmlsZTsKIGV4dGVybiBzTnRRdWVyeURpcmVjdG9yeUZpbGUgcE50UXVlcnlEaXJlY3RvcnlGaWxlOwogZXh0ZXJuIHNOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb24gcE50UXVlcnlTeXN0ZW1JbmZvcm1hdGlvbjsKK2V4dGVybiBzTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcyBwTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzczsKIAogLyogS2VybmVsMzIgZnVuY3Rpb24gcG9pbnRlcnMgKi8KIGV4dGVybiBzR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c0V4IHBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzRXg7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbnNvY2suYyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vd2luc29jay5jCmluZGV4IDU4MjBiYTkuLjRjZjZlNmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vd2luc29jay5jCisrKyBiL1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4vd2luc29jay5jCkBAIC03NCwxMSArNzQsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgZXJyb3JfbWVhbnNfbm9fc3VwcG9ydChEV09SRCBlcnJvcikgewotICByZXR1cm4gZXJyb3IgPT0gV1NBRVBST1RPTk9TVVBQT1JUIHx8IGVycm9yID09IFdTQUVTT0NLVE5PU1VQUE9SVCB8fAotICAgICAgICAgZXJyb3IgPT0gV1NBRVBGTk9TVVBQT1JUIHx8IGVycm9yID09IFdTQUVBRk5PU1VQUE9SVDsKLX0KLQogCiB2b2lkIHV2X3dpbnNvY2tfaW5pdCh2b2lkKSB7CiAgIFdTQURBVEEgd3NhX2RhdGE7CkBAIC0xMDUsNTAgKzEwMCwzNiBAQAogICAgIHV2X2ZhdGFsX2Vycm9yKGVycm9ybm8sICJXU0FTdGFydHVwIik7CiAgIH0KIAotICAvKiBEZXRlY3Qgbm9uLUlGUyBMU1BzICovCisgIC8qIFRyeSB0byBkZXRlY3Qgbm9uLUlGUyBMU1BzICovCisgIHV2X3RjcF9ub25faWZzX2xzcF9pcHY0ID0gMTsKICAgZHVtbXkgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fSVApOwotCiAgIGlmIChkdW1teSAhPSBJTlZBTElEX1NPQ0tFVCkgewogICAgIG9wdF9sZW4gPSAoaW50KSBzaXplb2YgcHJvdG9jb2xfaW5mbzsKICAgICBpZiAoZ2V0c29ja29wdChkdW1teSwKICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULAogICAgICAgICAgICAgICAgICAgIFNPX1BST1RPQ09MX0lORk9XLAogICAgICAgICAgICAgICAgICAgIChjaGFyKikgJnByb3RvY29sX2luZm8sCi0gICAgICAgICAgICAgICAgICAgJm9wdF9sZW4pID09IFNPQ0tFVF9FUlJPUikKLSAgICAgIHV2X2ZhdGFsX2Vycm9yKFdTQUdldExhc3RFcnJvcigpLCAiZ2V0c29ja29wdCIpOwotCi0gICAgaWYgKCEocHJvdG9jb2xfaW5mby5kd1NlcnZpY2VGbGFnczEgJiBYUDFfSUZTX0hBTkRMRVMpKQotICAgICAgdXZfdGNwX25vbl9pZnNfbHNwX2lwdjQgPSAxOwotCi0gICAgaWYgKGNsb3Nlc29ja2V0KGR1bW15KSA9PSBTT0NLRVRfRVJST1IpCi0gICAgICB1dl9mYXRhbF9lcnJvcihXU0FHZXRMYXN0RXJyb3IoKSwgImNsb3Nlc29ja2V0Iik7Ci0KLSAgfSBlbHNlIGlmICghZXJyb3JfbWVhbnNfbm9fc3VwcG9ydChXU0FHZXRMYXN0RXJyb3IoKSkpIHsKLSAgICAvKiBBbnkgZXJyb3Igb3RoZXIgdGhhbiAic29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCIgaXMgZmF0YWwuICovCi0gICAgdXZfZmF0YWxfZXJyb3IoV1NBR2V0TGFzdEVycm9yKCksICJzb2NrZXQiKTsKKyAgICAgICAgICAgICAgICAgICAmb3B0X2xlbikgPT0gMCkgeworICAgICAgaWYgKHByb3RvY29sX2luZm8uZHdTZXJ2aWNlRmxhZ3MxICYgWFAxX0lGU19IQU5ETEVTKQorICAgICAgICB1dl90Y3Bfbm9uX2lmc19sc3BfaXB2NCA9IDA7CisgICAgfQorICAgIGNsb3Nlc29ja2V0KGR1bW15KTsKICAgfQogCi0gIC8qIERldGVjdCBJUFY2IHN1cHBvcnQgYW5kIG5vbi1JRlMgTFNQcyAqLworICAvKiBUcnkgdG8gZGV0ZWN0IElQVjYgc3VwcG9ydCBhbmQgbm9uLUlGUyBMU1BzICovCisgIHV2X3RjcF9ub25faWZzX2xzcF9pcHY2ID0gMTsKICAgZHVtbXkgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX0lQKTsKLQogICBpZiAoZHVtbXkgIT0gSU5WQUxJRF9TT0NLRVQpIHsKICAgICBvcHRfbGVuID0gKGludCkgc2l6ZW9mIHByb3RvY29sX2luZm87CiAgICAgaWYgKGdldHNvY2tvcHQoZHVtbXksCiAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKICAgICAgICAgICAgICAgICAgICBTT19QUk9UT0NPTF9JTkZPVywKICAgICAgICAgICAgICAgICAgICAoY2hhciopICZwcm90b2NvbF9pbmZvLAotICAgICAgICAgICAgICAgICAgICZvcHRfbGVuKSA9PSBTT0NLRVRfRVJST1IpCi0gICAgICB1dl9mYXRhbF9lcnJvcihXU0FHZXRMYXN0RXJyb3IoKSwgImdldHNvY2tvcHQiKTsKLQotICAgIGlmICghKHByb3RvY29sX2luZm8uZHdTZXJ2aWNlRmxhZ3MxICYgWFAxX0lGU19IQU5ETEVTKSkKLSAgICAgIHV2X3RjcF9ub25faWZzX2xzcF9pcHY2ID0gMTsKLQotICAgIGlmIChjbG9zZXNvY2tldChkdW1teSkgPT0gU09DS0VUX0VSUk9SKQotICAgICAgdXZfZmF0YWxfZXJyb3IoV1NBR2V0TGFzdEVycm9yKCksICJjbG9zZXNvY2tldCIpOwotCi0gIH0gZWxzZSBpZiAoIWVycm9yX21lYW5zX25vX3N1cHBvcnQoV1NBR2V0TGFzdEVycm9yKCkpKSB7Ci0gICAgLyogQW55IGVycm9yIG90aGVyIHRoYW4gInNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiIGlzIGZhdGFsLiAqLwotICAgIHV2X2ZhdGFsX2Vycm9yKFdTQUdldExhc3RFcnJvcigpLCAic29ja2V0Iik7CisgICAgICAgICAgICAgICAgICAgJm9wdF9sZW4pID09IDApIHsKKyAgICAgIGlmIChwcm90b2NvbF9pbmZvLmR3U2VydmljZUZsYWdzMSAmIFhQMV9JRlNfSEFORExFUykKKyAgICAgICAgdXZfdGNwX25vbl9pZnNfbHNwX2lwdjYgPSAwOworICAgIH0KKyAgICBjbG9zZXNvY2tldChkdW1teSk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbGlidXYvc3JjL3dpbi93aW5zb2NrLmggYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbnNvY2suaAppbmRleCBlOGIyNzRlLi4xNTM2MzJjIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbnNvY2suaAorKysgYi9VdGlsaXRpZXMvY21saWJ1di9zcmMvd2luL3dpbnNvY2suaApAQCAtNTQsNiArNTQsMTQgQEAKICMgZGVmaW5lIFNJT19CQVNFX0hBTkRMRSAweDQ4MDAwMDIyCiAjZW5kaWYKIAorI2lmbmRlZiBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUAorIyBkZWZpbmUgTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAgNDUKKyNlbmRpZgorCisjaWZuZGVmIE1DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUAorIyBkZWZpbmUgTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQIDQ2CisjZW5kaWYKKwogLyoKICAqIFRESSBkZWZpbmVzIHRoYXQgYXJlIG9ubHkgaW4gdGhlIERESy4KICAqIFdlIG9ubHkgbmVlZCByZWNlaXZlIGZsYWdzIHNvIGZhci4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvLmdpdGF0dHJpYnV0ZXMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyLy5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKKyogLXdoaXRlc3BhY2UKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTFhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNTIgQEAKKyMgRGlzYWJsZSB3YXJuaW5ncyB0byBhdm9pZCBjaGFuZ2luZyAzcmQgcGFydHkgY29kZS4KK2lmKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUworICAgICJeKEdOVXxDbGFuZ3xBcHBsZUNsYW5nfFhMQ2xhbmd8WEx8VmlzdWFsQWdlfFN1blByb3xIUHxJbnRlbCkkIikKKyAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLXciKQorZWxzZWlmKENNQUtFX0NfQ09NUElMRVJfSUQgU1RSRVFVQUwgIlBhdGhTY2FsZSIpCisgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC13b2ZmYWxsIikKK2VuZGlmKCkKKworIyBSZS11c2Ugc29tZSBjaGVjayByZXN1bHQgY2FjaGUgZW50cmllcyBmcm9tIGNtY3VybDoKKyMgKiBIQVZFX0FSUEFfSU5FVF9ICisjICogSEFWRV9ORVRJTkVUX0lOX0gKKyMgKiBIQVZFX1NTSVpFX1QKK2lmKE5PVCBIQVZFX1NTSVpFX1QpCisgIHNldChzc2l6ZV90IEtXSU1MX0lOVF9pbnRwdHJfdCkKK2VuZGlmKCkKK2NvbmZpZ3VyZV9maWxlKGNtYWtlY29uZmlnLmguaW4gY29uZmlnLmgpCisKK2FkZF9saWJyYXJ5KGNtbmdodHRwMiBTVEFUSUMKKyAgbGliL25naHR0cDJfYnVmLmMKKyAgbGliL25naHR0cDJfY2FsbGJhY2tzLmMKKyAgbGliL25naHR0cDJfZGVidWcuYworICBsaWIvbmdodHRwMl9mcmFtZS5jCisgIGxpYi9uZ2h0dHAyX2hkLmMKKyAgbGliL25naHR0cDJfaGRfaHVmZm1hbi5jCisgIGxpYi9uZ2h0dHAyX2hkX2h1ZmZtYW5fZGF0YS5jCisgIGxpYi9uZ2h0dHAyX2hlbHBlci5jCisgIGxpYi9uZ2h0dHAyX2h0dHAuYworICBsaWIvbmdodHRwMl9tYXAuYworICBsaWIvbmdodHRwMl9tZW0uYworICBsaWIvbmdodHRwMl9ucG4uYworICBsaWIvbmdodHRwMl9vcHRpb24uYworICBsaWIvbmdodHRwMl9vdXRib3VuZF9pdGVtLmMKKyAgbGliL25naHR0cDJfcHEuYworICBsaWIvbmdodHRwMl9wcmlvcml0eV9zcGVjLmMKKyAgbGliL25naHR0cDJfcXVldWUuYworICBsaWIvbmdodHRwMl9yY2J1Zi5jCisgIGxpYi9uZ2h0dHAyX3Nlc3Npb24uYworICBsaWIvbmdodHRwMl9zdHJlYW0uYworICBsaWIvbmdodHRwMl9zdWJtaXQuYworICBsaWIvbmdodHRwMl92ZXJzaW9uLmMKKyAgKQorCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyhjbW5naHR0cDIKKyAgUFVCTElDIE5HSFRUUDJfU1RBVElDTElCCisgIFBSSVZBVEUgSEFWRV9DT05GSUdfSAorICApCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhjbW5naHR0cDIgUFJJVkFURQorICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0KKyAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYi9pbmNsdWRlcworICApCisKK2luc3RhbGwoRklMRVMgQ09QWUlORyBERVNUSU5BVElPTiAke0NNQUtFX0RPQ19ESVJ9L2NtbmdodHRwMikKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvQ09QWUlORyBiL1V0aWxpdGllcy9jbW5naHR0cDIvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIwMTc5Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9DT1BZSU5HCkBAIC0wLDAgKzEsMjMgQEAKK1RoZSBNSVQgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTQsIDIwMTUsIDIwMTYgVGF0c3VoaXJvIFRzdWppa2F3YQorQ29weXJpZ2h0IChjKSAyMDEyLCAyMDE0LCAyMDE1LCAyMDE2IG5naHR0cDIgY29udHJpYnV0b3JzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCitXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvY21ha2Vjb25maWcuaC5pbiBiL1V0aWxpdGllcy9jbW5naHR0cDIvY21ha2Vjb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDY5OGZiCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9jbWFrZWNvbmZpZy5oLmluCkBAIC0wLDAgKzEsMTggQEAKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyBwcmFnbWEgd2FybmluZyhwdXNoLDEpCisjZW5kaWYKKworI2luY2x1ZGUgPGNtM3Ava3dpbWwvYWJpLmg+CisjaW5jbHVkZSA8Y20zcC9rd2ltbC9pbnQuaD4KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI2NtYWtlZGVmaW5lIHNzaXplX3QgQHNzaXplX3RACisKKy8qIHNpemVvZihpbnQgKikgKi8KKyNkZWZpbmUgU0laRU9GX0lOVF9QIEtXSU1MX0FCSV9TSVpFT0ZfREFUQV9QVFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9BUlBBX0lORVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX05FVElORVRfSU5fSCAxCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9pbmNsdWRlcy9uZ2h0dHAyL25naHR0cDIuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL2luY2x1ZGVzL25naHR0cDIvbmdodHRwMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYWViOWYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9pbmNsdWRlcy9uZ2h0dHAyL25naHR0cDIuaApAQCAtMCwwICsxLDU0ODcgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMywgMjAxNCBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX0gKKyNkZWZpbmUgTkdIVFRQMl9ICisKKy8qIERlZmluZSBXSU4zMiB3aGVuIGJ1aWxkIHRhcmdldCBpcyBXaW4zMiBBUEkgKGJvcnJvd2VkIGZyb20KKyAgIGxpYmN1cmwpICovCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykpICYmICFkZWZpbmVkKFdJTjMyKQorIyAgZGVmaW5lIFdJTjMyCisjZW5kaWYKKworLyogQ29tcGF0aWJpbGl0eSBmb3Igbm9uLUNsYW5nIGNvbXBpbGVycyAqLworI2lmbmRlZiBfX2hhc19kZWNsc3BlY19hdHRyaWJ1dGUKKyMgIGRlZmluZSBfX2hhc19kZWNsc3BlY19hdHRyaWJ1dGUoeCkgMAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA8IDE4MDApCisvKiBNU1ZDIDwgMjAxMyBkb2VzIG5vdCBoYXZlIGludHR5cGVzLmggYmVjYXVzZSBpdCBpcyBub3QgQzk5CisgICBjb21wbGlhbnQuICBTZWUgY29tcGlsZXIgbWFjcm9zIGFuZCB2ZXJzaW9uIG51bWJlciBpbgorICAgaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9wcmVkZWYvd2lraS9Db21waWxlcnMvICovCisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbHNlIC8qICFkZWZpbmVkKF9NU0NfVkVSKSB8fCAoX01TQ19WRVIgPj0gMTgwMCkgKi8KKyMgIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYgLyogIWRlZmluZWQoX01TQ19WRVIpIHx8IChfTVNDX1ZFUiA+PSAxODAwKSAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAydmVyLmg+CisKKyNpZmRlZiBOR0hUVFAyX1NUQVRJQ0xJQgorIyAgZGVmaW5lIE5HSFRUUDJfRVhURVJOCisjZWxpZiBkZWZpbmVkKFdJTjMyKSB8fCAoX19oYXNfZGVjbHNwZWNfYXR0cmlidXRlKGRsbGV4cG9ydCkgJiYgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIF9faGFzX2RlY2xzcGVjX2F0dHJpYnV0ZShkbGxpbXBvcnQpKQorIyAgaWZkZWYgQlVJTERJTkdfTkdIVFRQMgorIyAgICBkZWZpbmUgTkdIVFRQMl9FWFRFUk4gX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICBlbHNlIC8qICFCVUlMRElOR19OR0hUVFAyICovCisjICAgIGRlZmluZSBOR0hUVFAyX0VYVEVSTiBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGVuZGlmIC8qICFCVUlMRElOR19OR0hUVFAyICovCisjZWxzZSAgICAvKiAhZGVmaW5lZChXSU4zMikgKi8KKyMgIGlmZGVmIEJVSUxESU5HX05HSFRUUDIKKyMgICAgZGVmaW5lIE5HSFRUUDJfRVhURVJOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisjICBlbHNlIC8qICFCVUlMRElOR19OR0hUVFAyICovCisjICAgIGRlZmluZSBOR0hUVFAyX0VYVEVSTgorIyAgZW5kaWYgLyogIUJVSUxESU5HX05HSFRUUDIgKi8KKyNlbmRpZiAgIC8qICFkZWZpbmVkKFdJTjMyKSAqLworCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBwcm90b2NvbCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIHN0cmluZyBvZiB0aGlzIGxpYnJhcnkKKyAqIHN1cHBvcnRzLiAgVGhpcyBpZGVudGlmaWVyIGlzIHVzZWQgaWYgSFRUUC8yIGlzIHVzZWQgb3ZlciBUTFMuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEICJoMiIKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIGxlbmd0aCBvZiA6bWFjcm86YE5HSFRUUDJfUFJPVE9fVkVSU0lPTl9JRGAuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEX0xFTiAyCisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIHNlcmlhbGl6ZWQgZm9ybSBvZiBBTFBOIHByb3RvY29sIGlkZW50aWZpZXIgdGhpcyBsaWJyYXJ5CisgKiBzdXBwb3J0cy4gIE5vdGljZSB0aGF0IGZpcnN0IGJ5dGUgaXMgdGhlIGxlbmd0aCBvZiBmb2xsb3dpbmcKKyAqIHByb3RvY29sIGlkZW50aWZpZXIuICBUaGlzIGlzIHRoZSBzYW1lIHdpcmUgZm9ybWF0IG9mIGBUTFMgQUxQTgorICogZXh0ZW5zaW9uIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzMwMT5gXy4gIFRoaXMgaXMgdXNlZnVsCisgKiB0byBwcm9jZXNzIGluY29taW5nIEFMUE4gdG9rZW5zIGluIHdpcmUgZm9ybWF0LgorICovCisjZGVmaW5lIE5HSFRUUDJfUFJPVE9fQUxQTiAiXHgyaDIiCisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIGxlbmd0aCBvZiA6bWFjcm86YE5HSFRUUDJfUFJPVE9fQUxQTmAuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9QUk9UT19BTFBOX0xFTiAoc2l6ZW9mKE5HSFRUUDJfUFJPVE9fQUxQTikgLSAxKQorCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBwcm90b2NvbCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIHN0cmluZyBvZiB0aGlzIGxpYnJhcnkKKyAqIHN1cHBvcnRzLiAgVGhpcyBpZGVudGlmaWVyIGlzIHVzZWQgaWYgSFRUUC8yIGlzIHVzZWQgb3ZlciBjbGVhcnRleHQKKyAqIFRDUC4KKyAqLworI2RlZmluZSBOR0hUVFAyX0NMRUFSVEVYVF9QUk9UT19WRVJTSU9OX0lEICJoMmMiCisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIGxlbmd0aCBvZiA6bWFjcm86YE5HSFRUUDJfQ0xFQVJURVhUX1BST1RPX1ZFUlNJT05fSURgLgorICovCisjZGVmaW5lIE5HSFRUUDJfQ0xFQVJURVhUX1BST1RPX1ZFUlNJT05fSURfTEVOIDMKKworc3RydWN0IG5naHR0cDJfc2Vzc2lvbjsKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBwcmltYXJ5IHN0cnVjdHVyZSB0byBob2xkIHRoZSByZXNvdXJjZXMgbmVlZGVkIGZvciBhIEhUVFAvMgorICogc2Vzc2lvbi4gIFRoZSBkZXRhaWxzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBpbnRlbnRpb25hbGx5IGhpZGRlbgorICogZnJvbSB0aGUgcHVibGljIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmdodHRwMl9zZXNzaW9uIG5naHR0cDJfc2Vzc2lvbjsKKworLyoqCisgKiBAbWFjcm8KKyAqCisgKiBUaGUgYWdlIG9mIDp0eXBlOmBuZ2h0dHAyX2luZm9gCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9WRVJTSU9OX0FHRSAxCisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoaXMgc3RydWN0IGlzIHdoYXQgYG5naHR0cDJfdmVyc2lvbigpYCByZXR1cm5zLiAgSXQgaG9sZHMKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJ0aWN1bGFyIG5naHR0cDIgdmVyc2lvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogQWdlIG9mIHRoaXMgc3RydWN0LiAgVGhpcyBpbnN0YW5jZSBvZiBuZ2h0dHAyIHNldHMgaXQgdG8KKyAgICogOm1hY3JvOmBOR0hUVFAyX1ZFUlNJT05fQUdFYCBidXQgYSBmdXR1cmUgdmVyc2lvbiBtYXkgYnVtcCBpdCBhbmQKKyAgICogYWRkIG1vcmUgc3RydWN0IGZpZWxkcyBhdCB0aGUgYm90dG9tCisgICAqLworICBpbnQgYWdlOworICAvKioKKyAgICogdGhlIDptYWNybzpgTkdIVFRQMl9WRVJTSU9OX05VTWAgbnVtYmVyIChzaW5jZSBhZ2UgPT0xKQorICAgKi8KKyAgaW50IHZlcnNpb25fbnVtOworICAvKioKKyAgICogcG9pbnRzIHRvIHRoZSA6bWFjcm86YE5HSFRUUDJfVkVSU0lPTmAgc3RyaW5nIChzaW5jZSBhZ2UgPT0xKQorICAgKi8KKyAgY29uc3QgY2hhciAqdmVyc2lvbl9zdHI7CisgIC8qKgorICAgKiBwb2ludHMgdG8gdGhlIDptYWNybzpgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEYCBzdHJpbmcgdGhpcworICAgKiBpbnN0YW5jZSBpbXBsZW1lbnRzIChzaW5jZSBhZ2UgPT0xKQorICAgKi8KKyAgY29uc3QgY2hhciAqcHJvdG9fc3RyOworICAvKiAtLS0tLS0tLSB0aGUgYWJvdmUgZmllbGRzIGFsbCBleGlzdCB3aGVuIGFnZSA9PSAxICovCit9IG5naHR0cDJfaW5mbzsKKworLyoqCisgKiBAbWFjcm8KKyAqCisgKiBUaGUgZGVmYXVsdCB3ZWlnaHQgb2Ygc3RyZWFtIGRlcGVuZGVuY3kuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9ERUZBVUxUX1dFSUdIVCAxNgorCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBtYXhpbXVtIHdlaWdodCBvZiBzdHJlYW0gZGVwZW5kZW5jeS4KKyAqLworI2RlZmluZSBOR0hUVFAyX01BWF9XRUlHSFQgMjU2CisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIG1pbmltdW0gd2VpZ2h0IG9mIHN0cmVhbSBkZXBlbmRlbmN5LgorICovCisjZGVmaW5lIE5HSFRUUDJfTUlOX1dFSUdIVCAxCisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIG1heGltdW0gd2luZG93IHNpemUKKyAqLworI2RlZmluZSBOR0hUVFAyX01BWF9XSU5ET1dfU0laRSAoKGludDMyX3QpKCgxVSA8PCAzMSkgLSAxKSkKKworLyoqCisgKiBAbWFjcm8KKyAqCisgKiBUaGUgaW5pdGlhbCB3aW5kb3cgc2l6ZSBmb3Igc3RyZWFtIGxldmVsIGZsb3cgY29udHJvbC4KKyAqLworI2RlZmluZSBOR0hUVFAyX0lOSVRJQUxfV0lORE9XX1NJWkUgKCgxIDw8IDE2KSAtIDEpCisvKioKKyAqIEBtYWNybworICoKKyAqIFRoZSBpbml0aWFsIHdpbmRvdyBzaXplIGZvciBjb25uZWN0aW9uIGxldmVsIGZsb3cgY29udHJvbC4KKyAqLworI2RlZmluZSBOR0hUVFAyX0lOSVRJQUxfQ09OTkVDVElPTl9XSU5ET1dfU0laRSAoKDEgPDwgMTYpIC0gMSkKKworLyoqCisgKiBAbWFjcm8KKyAqCisgKiBUaGUgZGVmYXVsdCBoZWFkZXIgdGFibGUgc2l6ZS4KKyAqLworI2RlZmluZSBOR0hUVFAyX0RFRkFVTFRfSEVBREVSX1RBQkxFX1NJWkUgKDEgPDwgMTIpCisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIGNsaWVudCBtYWdpYyBzdHJpbmcsIHdoaWNoIGlzIHRoZSBmaXJzdCAyNCBieXRlcyBieXRlIHN0cmluZyBvZgorICogY2xpZW50IGNvbm5lY3Rpb24gcHJlZmFjZS4KKyAqLworI2RlZmluZSBOR0hUVFAyX0NMSUVOVF9NQUdJQyAiUFJJICogSFRUUC8yLjBcclxuXHJcblNNXHJcblxyXG4iCisKKy8qKgorICogQG1hY3JvCisgKgorICogVGhlIGxlbmd0aCBvZiA6bWFjcm86YE5HSFRUUDJfQ0xJRU5UX01BR0lDYC4KKyAqLworI2RlZmluZSBOR0hUVFAyX0NMSUVOVF9NQUdJQ19MRU4gMjQKKworLyoqCisgKiBAZW51bQorICoKKyAqIEVycm9yIGNvZGVzIHVzZWQgaW4gdGhpcyBsaWJyYXJ5LiAgVGhlIGNvZGUgcmFuZ2UgaXMgWy05OTksIC01MDBdLAorICogaW5jbHVzaXZlLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgZGVmaW5lZDoKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqCisgICAqIEludmFsaWQgYXJndW1lbnQgcGFzc2VkLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVCA9IC01MDEsCisgIC8qKgorICAgKiBPdXQgb2YgYnVmZmVyIHNwYWNlLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfQlVGRkVSX0VSUk9SID0gLTUwMiwKKyAgLyoqCisgICAqIFRoZSBzcGVjaWZpZWQgcHJvdG9jb2wgdmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfVU5TVVBQT1JURURfVkVSU0lPTiA9IC01MDMsCisgIC8qKgorICAgKiBVc2VkIGFzIGEgcmV0dXJuIHZhbHVlIGZyb20gOnR5cGU6YG5naHR0cDJfc2VuZF9jYWxsYmFja2AsCisgICAqIDp0eXBlOmBuZ2h0dHAyX3JlY3ZfY2FsbGJhY2tgIGFuZAorICAgKiA6dHlwZTpgbmdodHRwMl9zZW5kX2RhdGFfY2FsbGJhY2tgIHRvIGluZGljYXRlIHRoYXQgdGhlIG9wZXJhdGlvbgorICAgKiB3b3VsZCBibG9jay4KKyAgICovCisgIE5HSFRUUDJfRVJSX1dPVUxEQkxPQ0sgPSAtNTA0LAorICAvKioKKyAgICogR2VuZXJhbCBwcm90b2NvbCBlcnJvcgorICAgKi8KKyAgTkdIVFRQMl9FUlJfUFJPVE8gPSAtNTA1LAorICAvKioKKyAgICogVGhlIGZyYW1lIGlzIGludmFsaWQuCisgICAqLworICBOR0hUVFAyX0VSUl9JTlZBTElEX0ZSQU1FID0gLTUwNiwKKyAgLyoqCisgICAqIFRoZSBwZWVyIHBlcmZvcm1lZCBhIHNodXRkb3duIG9uIHRoZSBjb25uZWN0aW9uLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfRU9GID0gLTUwNywKKyAgLyoqCisgICAqIFVzZWQgYXMgYSByZXR1cm4gdmFsdWUgZnJvbQorICAgKiA6ZnVuYzpgbmdodHRwMl9kYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrYCB0byBpbmRpY2F0ZSB0aGF0IGRhdGEKKyAgICogdHJhbnNmZXIgaXMgcG9zdHBvbmVkLiAgU2VlCisgICAqIDpmdW5jOmBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2tgIGZvciBkZXRhaWxzLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfREVGRVJSRUQgPSAtNTA4LAorICAvKioKKyAgICogU3RyZWFtIElEIGhhcyByZWFjaGVkIHRoZSBtYXhpbXVtIHZhbHVlLiAgVGhlcmVmb3JlIG5vIHN0cmVhbSBJRAorICAgKiBpcyBhdmFpbGFibGUuCisgICAqLworICBOR0hUVFAyX0VSUl9TVFJFQU1fSURfTk9UX0FWQUlMQUJMRSA9IC01MDksCisgIC8qKgorICAgKiBUaGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkOyBvciB0aGUgc3RyZWFtIElEIGlzIGludmFsaWQuCisgICAqLworICBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VEID0gLTUxMCwKKyAgLyoqCisgICAqIFJTVF9TVFJFQU0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIG91dGJvdW5kIHF1ZXVlLiAgVGhlIHN0cmVhbSBpcworICAgKiBpbiBjbG9zaW5nIHN0YXRlLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkcgPSAtNTExLAorICAvKioKKyAgICogVGhlIHRyYW5zbWlzc2lvbiBpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBzdHJlYW0gKGUuZy4sIGEgZnJhbWUKKyAgICogd2l0aCBFTkRfU1RSRUFNIGZsYWcgc2V0IGhhcyBhbHJlYWR5IHNlbnQpLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfU1RSRUFNX1NIVVRfV1IgPSAtNTEyLAorICAvKioKKyAgICogVGhlIHN0cmVhbSBJRCBpcyBpbnZhbGlkLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fSUQgPSAtNTEzLAorICAvKioKKyAgICogVGhlIHN0YXRlIG9mIHRoZSBzdHJlYW0gaXMgbm90IHZhbGlkIChlLmcuLCBEQVRBIGNhbm5vdCBiZSBzZW50CisgICAqIHRvIHRoZSBzdHJlYW0gaWYgcmVzcG9uc2UgSEVBREVSUyBoYXMgbm90IGJlZW4gc2VudCkuCisgICAqLworICBOR0hUVFAyX0VSUl9JTlZBTElEX1NUUkVBTV9TVEFURSA9IC01MTQsCisgIC8qKgorICAgKiBBbm90aGVyIERBVEEgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBkZWZlcnJlZC4KKyAgICovCisgIE5HSFRUUDJfRVJSX0RFRkVSUkVEX0RBVEFfRVhJU1QgPSAtNTE1LAorICAvKioKKyAgICogU3RhcnRpbmcgbmV3IHN0cmVhbSBpcyBub3QgYWxsb3dlZCAoZS5nLiwgR09BV0FZIGhhcyBiZWVuIHNlbnQKKyAgICogYW5kL29yIHJlY2VpdmVkKS4KKyAgICovCisgIE5HSFRUUDJfRVJSX1NUQVJUX1NUUkVBTV9OT1RfQUxMT1dFRCA9IC01MTYsCisgIC8qKgorICAgKiBHT0FXQVkgaGFzIGFscmVhZHkgYmVlbiBzZW50LgorICAgKi8KKyAgTkdIVFRQMl9FUlJfR09BV0FZX0FMUkVBRFlfU0VOVCA9IC01MTcsCisgIC8qKgorICAgKiBUaGUgcmVjZWl2ZWQgZnJhbWUgY29udGFpbnMgdGhlIGludmFsaWQgaGVhZGVyIGJsb2NrIChlLmcuLCBUaGVyZQorICAgKiBhcmUgZHVwbGljYXRlIGhlYWRlciBuYW1lczsgb3IgdGhlIGhlYWRlciBuYW1lcyBhcmUgbm90IGVuY29kZWQKKyAgICogaW4gVVMtQVNDSUkgY2hhcmFjdGVyIHNldCBhbmQgbm90IGxvd2VyIGNhc2VkOyBvciB0aGUgaGVhZGVyIG5hbWUKKyAgICogaXMgemVyby1sZW5ndGggc3RyaW5nOyBvciB0aGUgaGVhZGVyIHZhbHVlIGNvbnRhaW5zIG11bHRpcGxlCisgICAqIGluLXNlcXVlbmNlIE5VTCBieXRlcykuCisgICAqLworICBOR0hUVFAyX0VSUl9JTlZBTElEX0hFQURFUl9CTE9DSyA9IC01MTgsCisgIC8qKgorICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY29udGV4dCBpcyBub3Qgc3VpdGFibGUgdG8gcGVyZm9ybSB0aGUKKyAgICogcmVxdWVzdGVkIG9wZXJhdGlvbi4KKyAgICovCisgIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEUgPSAtNTE5LAorICAvKioKKyAgICogVGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkIGR1ZSB0byB0aGUgdGVtcG9yYWwgZXJyb3IuCisgICAqLworICBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFID0gLTUyMSwKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIGlzIGludmFsaWQsIGVpdGhlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUiA9IC01MjIsCisgIC8qKgorICAgKiBIZWFkZXIgYmxvY2sgaW5mbGF0ZS9kZWZsYXRlIGVycm9yLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAgPSAtNTIzLAorICAvKioKKyAgICogRmxvdyBjb250cm9sIGVycm9yCisgICAqLworICBOR0hUVFAyX0VSUl9GTE9XX0NPTlRST0wgPSAtNTI0LAorICAvKioKKyAgICogSW5zdWZmaWNpZW50IGJ1ZmZlciBzaXplIGdpdmVuIHRvIGZ1bmN0aW9uLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfSU5TVUZGX0JVRlNJWkUgPSAtNTI1LAorICAvKioKKyAgICogQ2FsbGJhY2sgd2FzIHBhdXNlZCBieSB0aGUgYXBwbGljYXRpb24KKyAgICovCisgIE5HSFRUUDJfRVJSX1BBVVNFID0gLTUyNiwKKyAgLyoqCisgICAqIFRoZXJlIGFyZSB0b28gbWFueSBpbi1mbGlnaHQgU0VUVElORyBmcmFtZSBhbmQgbm8gbW9yZQorICAgKiB0cmFuc21pc3Npb24gb2YgU0VUVElOR1MgaXMgYWxsb3dlZC4KKyAgICovCisgIE5HSFRUUDJfRVJSX1RPT19NQU5ZX0lORkxJR0hUX1NFVFRJTkdTID0gLTUyNywKKyAgLyoqCisgICAqIFRoZSBzZXJ2ZXIgcHVzaCBpcyBkaXNhYmxlZC4KKyAgICovCisgIE5HSFRUUDJfRVJSX1BVU0hfRElTQUJMRUQgPSAtNTI4LAorICAvKioKKyAgICogREFUQSBvciBIRUFERVJTIGZyYW1lIGZvciBhIGdpdmVuIHN0cmVhbSBoYXMgYmVlbiBhbHJlYWR5CisgICAqIHN1Ym1pdHRlZCBhbmQgaGFzIG5vdCBiZWVuIGZ1bGx5IHByb2Nlc3NlZCB5ZXQuICBBcHBsaWNhdGlvbgorICAgKiBzaG91bGQgd2FpdCBmb3IgdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGUgcHJldmlvdXNseSBzdWJtaXR0ZWQKKyAgICogZnJhbWUgYmVmb3JlIHN1Ym1pdHRpbmcgYW5vdGhlci4KKyAgICovCisgIE5HSFRUUDJfRVJSX0RBVEFfRVhJU1QgPSAtNTI5LAorICAvKioKKyAgICogVGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBjbG9zaW5nIGR1ZSB0byBhIGNvbm5lY3Rpb24gZXJyb3Igb3IKKyAgICogYG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbigpYCBpcyBjYWxsZWQuCisgICAqLworICBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkcgPSAtNTMwLAorICAvKioKKyAgICogSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCB3YXMgcmVjZWl2ZWQgYW5kIHN0cmVhbSBpcyBnb2luZyB0byBiZQorICAgKiBjbG9zZWQuCisgICAqLworICBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUiA9IC01MzEsCisgIC8qKgorICAgKiBWaW9sYXRpb24gaW4gSFRUUCBtZXNzYWdpbmcgcnVsZS4KKyAgICovCisgIE5HSFRUUDJfRVJSX0hUVFBfTUVTU0FHSU5HID0gLTUzMiwKKyAgLyoqCisgICAqIFN0cmVhbSB3YXMgcmVmdXNlZC4KKyAgICovCisgIE5HSFRUUDJfRVJSX1JFRlVTRURfU1RSRUFNID0gLTUzMywKKyAgLyoqCisgICAqIFVuZXhwZWN0ZWQgaW50ZXJuYWwgZXJyb3IsIGJ1dCByZWNvdmVyZWQuCisgICAqLworICBOR0hUVFAyX0VSUl9JTlRFUk5BTCA9IC01MzQsCisgIC8qKgorICAgKiBJbmRpY2F0ZXMgdGhhdCBhIHByb2Nlc3Npbmcgd2FzIGNhbmNlbGVkLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfQ0FOQ0VMID0gLTUzNSwKKyAgLyoqCisgICAqIFdoZW4gYSBsb2NhbCBlbmRwb2ludCBleHBlY3RzIHRvIHJlY2VpdmUgU0VUVElOR1MgZnJhbWUsIGl0CisgICAqIHJlY2VpdmVzIGFuIG90aGVyIHR5cGUgb2YgZnJhbWUuCisgICAqLworICBOR0hUVFAyX0VSUl9TRVRUSU5HU19FWFBFQ1RFRCA9IC01MzYsCisgIC8qKgorICAgKiBUaGUgZXJyb3JzIDwgOmVudW06YE5HSFRUUDJfRVJSX0ZBVEFMYCBtZWFuIHRoYXQgdGhlIGxpYnJhcnkgaXMKKyAgICogdW5kZXIgdW5leHBlY3RlZCBjb25kaXRpb24gYW5kIHByb2Nlc3Npbmcgd2FzIHRlcm1pbmF0ZWQgKGUuZy4sCisgICAqIG91dCBvZiBtZW1vcnkpLiAgSWYgYXBwbGljYXRpb24gcmVjZWl2ZXMgdGhpcyBlcnJvciBjb2RlLCBpdCBtdXN0CisgICAqIHN0b3AgdXNpbmcgdGhhdCA6dHlwZTpgbmdodHRwMl9zZXNzaW9uYCBvYmplY3QgYW5kIG9ubHkgYWxsb3dlZAorICAgKiBvcGVyYXRpb24gZm9yIHRoYXQgb2JqZWN0IGlzIGRlYWxsb2NhdGUgaXQgdXNpbmcKKyAgICogYG5naHR0cDJfc2Vzc2lvbl9kZWwoKWAuCisgICAqLworICBOR0hUVFAyX0VSUl9GQVRBTCA9IC05MDAsCisgIC8qKgorICAgKiBPdXQgb2YgbWVtb3J5LiAgVGhpcyBpcyBhIGZhdGFsIGVycm9yLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfTk9NRU0gPSAtOTAxLAorICAvKioKKyAgICogVGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLiAgVGhpcyBpcyBhIGZhdGFsIGVycm9yLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRSA9IC05MDIsCisgIC8qKgorICAgKiBJbnZhbGlkIGNsaWVudCBtYWdpYyAoc2VlIDptYWNybzpgTkdIVFRQMl9DTElFTlRfTUFHSUNgKSB3YXMKKyAgICogcmVjZWl2ZWQgYW5kIGZ1cnRoZXIgcHJvY2Vzc2luZyBpcyBub3QgcG9zc2libGUuCisgICAqLworICBOR0hUVFAyX0VSUl9CQURfQ0xJRU5UX01BR0lDID0gLTkwMywKKyAgLyoqCisgICAqIFBvc3NpYmxlIGZsb29kaW5nIGJ5IHBlZXIgd2FzIGRldGVjdGVkIGluIHRoaXMgSFRUUC8yIHNlc3Npb24uCisgICAqIEZsb29kaW5nIGlzIG1lYXN1cmVkIGJ5IGhvdyBtYW55IFBJTkcgYW5kIFNFVFRJTkdTIGZyYW1lcyB3aXRoCisgICAqIEFDSyBmbGFnIHNldCBhcmUgcXVldWVkIGZvciB0cmFuc21pc3Npb24uICBUaGVzZSBmcmFtZXMgYXJlCisgICAqIHJlc3BvbnNlIGZvciB0aGUgcGVlciBpbml0aWF0ZWQgZnJhbWVzLCBhbmQgcGVlciBjYW4gY2F1c2UgbWVtb3J5CisgICAqIGV4aGF1c3Rpb24gb24gc2VydmVyIHNpZGUgdG8gc2VuZCB0aGVzZSBmcmFtZXMgZm9yZXZlciBhbmQgZG9lcworICAgKiBub3QgcmVhZCBuZXR3b3JrLgorICAgKi8KKyAgTkdIVFRQMl9FUlJfRkxPT0RFRCA9IC05MDQKK30gbmdodHRwMl9lcnJvcjsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIG9iamVjdCByZXByZXNlbnRpbmcgc2luZ2xlIGNvbnRpZ3VvdXMgYnVmZmVyLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICAgKi8KKyAgdWludDhfdCAqYmFzZTsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4KKyAgICovCisgIHNpemVfdCBsZW47Cit9IG5naHR0cDJfdmVjOworCitzdHJ1Y3QgbmdodHRwMl9yY2J1ZjsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIG9iamVjdCByZXByZXNlbnRpbmcgcmVmZXJlbmNlIGNvdW50ZWQgYnVmZmVyLiAgVGhlIGRldGFpbHMgb2YKKyAqIHRoaXMgc3RydWN0dXJlIGFyZSBpbnRlbnRpb25hbGx5IGhpZGRlbiBmcm9tIHRoZSBwdWJsaWMgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX3JjYnVmIG5naHR0cDJfcmNidWY7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogSW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHxyY2J1ZnwgYnkgMS4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3JjYnVmX2luY3JlZihuZ2h0dHAyX3JjYnVmICpyY2J1Zik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogRGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHxyY2J1ZnwgYnkgMS4gIElmIHRoZSByZWZlcmVuY2UKKyAqIGNvdW50IGJlY29tZXMgemVybywgdGhlIG9iamVjdCBwb2ludGVkIGJ5IHxyY2J1Znwgd2lsbCBiZSBmcmVlZC4KKyAqIEluIHRoaXMgY2FzZSwgYXBwbGljYXRpb24gbXVzdCBub3QgdXNlIHxyY2J1ZnwgYWdhaW4uCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9yY2J1Zl9kZWNyZWYobmdodHRwMl9yY2J1ZiAqcmNidWYpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHVuZGVybHlpbmcgYnVmZmVyIG1hbmFnZWQgYnkgfHJjYnVmfC4KKyAqLworTkdIVFRQMl9FWFRFUk4gbmdodHRwMl92ZWMgbmdodHRwMl9yY2J1Zl9nZXRfYnVmKG5naHR0cDJfcmNidWYgKnJjYnVmKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIHVuZGVybHlpbmcgYnVmZmVyIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLAorICogYW5kIDAgb3RoZXJ3aXNlLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGxhbmd1YWdlIGJpbmRpbmdzIHRoYXQgd2lzaAorICogdG8gYXZvaWQgY3JlYXRpbmcgZHVwbGljYXRlIHN0cmluZ3MgZm9yIHRoZXNlIGJ1ZmZlcnMuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3JjYnVmX2lzX3N0YXRpYyhjb25zdCBuZ2h0dHAyX3JjYnVmICpyY2J1Zik7CisKKy8qKgorICogQGVudW0KKyAqCisgKiBUaGUgZmxhZ3MgZm9yIGhlYWRlciBmaWVsZCBuYW1lL3ZhbHVlIHBhaXIuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qKgorICAgKiBObyBmbGFnIHNldC4KKyAgICovCisgIE5HSFRUUDJfTlZfRkxBR19OT05FID0gMCwKKyAgLyoqCisgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgbmFtZS92YWx1ZSBwYWlyIG11c3Qgbm90IGJlIGluZGV4ZWQgKCJMaXRlcmFsCisgICAqIEhlYWRlciBGaWVsZCBuZXZlciBJbmRleGVkIiByZXByZXNlbnRhdGlvbiBtdXN0IGJlIHVzZWQgaW4gSFBBQ0sKKyAgICogZW5jb2RpbmcpLiAgT3RoZXIgaW1wbGVtZW50YXRpb24gY2FsbHMgdGhpcyBiaXQgYXMgInNlbnNpdGl2ZSIuCisgICAqLworICBOR0hUVFAyX05WX0ZMQUdfTk9fSU5ERVggPSAweDAxLAorICAvKioKKyAgICogVGhpcyBmbGFnIGlzIHNldCBzb2xlbHkgYnkgYXBwbGljYXRpb24uICBJZiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUKKyAgICogbGlicmFyeSBkb2VzIG5vdCBtYWtlIGEgY29weSBvZiBoZWFkZXIgZmllbGQgbmFtZS4gIFRoaXMgY291bGQKKyAgICogaW1wcm92ZSBwZXJmb3JtYW5jZS4KKyAgICovCisgIE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX05BTUUgPSAweDAyLAorICAvKioKKyAgICogVGhpcyBmbGFnIGlzIHNldCBzb2xlbHkgYnkgYXBwbGljYXRpb24uICBJZiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUKKyAgICogbGlicmFyeSBkb2VzIG5vdCBtYWtlIGEgY29weSBvZiBoZWFkZXIgZmllbGQgdmFsdWUuICBUaGlzIGNvdWxkCisgICAqIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgICAqLworICBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9WQUxVRSA9IDB4MDQKK30gbmdodHRwMl9udl9mbGFnOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgbmFtZS92YWx1ZSBwYWlyLCB3aGljaCBtYWlubHkgdXNlZCB0byByZXByZXNlbnQgaGVhZGVyIGZpZWxkcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIHxuYW1lfCBieXRlIHN0cmluZy4gIElmIHRoaXMgc3RydWN0IGlzIHByZXNlbnRlZCBmcm9tIGxpYnJhcnkKKyAgICogKGUuZy4sIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgKSwgfG5hbWV8IGlzCisgICAqIGd1YXJhbnRlZWQgdG8gYmUgTlVMTC10ZXJtaW5hdGVkLiAgRm9yIHNvbWUgY2FsbGJhY2tzCisgICAqICg6dHlwZTpgbmdodHRwMl9iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFja2AsCisgICAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3NlbmRfY2FsbGJhY2tgLCBhbmQKKyAgICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2tgKSwgaXQgbWF5IG5vdCBiZQorICAgKiBOVUxMLXRlcm1pbmF0ZWQgaWYgaGVhZGVyIGZpZWxkIGlzIHBhc3NlZCBmcm9tIGFwcGxpY2F0aW9uIHdpdGgKKyAgICogdGhlIGZsYWcgOmVudW06YE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX05BTUVgKS4gIFdoZW4gYXBwbGljYXRpb24KKyAgICogaXMgY29uc3RydWN0aW5nIHRoaXMgc3RydWN0LCB8bmFtZXwgaXMgbm90IHJlcXVpcmVkIHRvIGJlCisgICAqIE5VTEwtdGVybWluYXRlZC4KKyAgICovCisgIHVpbnQ4X3QgKm5hbWU7CisgIC8qKgorICAgKiBUaGUgfHZhbHVlfCBieXRlIHN0cmluZy4gIElmIHRoaXMgc3RydWN0IGlzIHByZXNlbnRlZCBmcm9tCisgICAqIGxpYnJhcnkgKGUuZy4sIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgKSwgfHZhbHVlfAorICAgKiBpcyBndWFyYW50ZWVkIHRvIGJlIE5VTEwtdGVybWluYXRlZC4gIEZvciBzb21lIGNhbGxiYWNrcworICAgKiAoOnR5cGU6YG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2tgLAorICAgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrYCwgYW5kCisgICAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrYCksIGl0IG1heSBub3QgYmUKKyAgICogTlVMTC10ZXJtaW5hdGVkIGlmIGhlYWRlciBmaWVsZCBpcyBwYXNzZWQgZnJvbSBhcHBsaWNhdGlvbiB3aXRoCisgICAqIHRoZSBmbGFnIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9WQUxVRWApLiAgV2hlbgorICAgKiBhcHBsaWNhdGlvbiBpcyBjb25zdHJ1Y3RpbmcgdGhpcyBzdHJ1Y3QsIHx2YWx1ZXwgaXMgbm90IHJlcXVpcmVkCisgICAqIHRvIGJlIE5VTEwtdGVybWluYXRlZC4KKyAgICovCisgIHVpbnQ4X3QgKnZhbHVlOworICAvKioKKyAgICogVGhlIGxlbmd0aCBvZiB0aGUgfG5hbWV8LCBleGNsdWRpbmcgdGVybWluYXRpbmcgTlVMTC4KKyAgICovCisgIHNpemVfdCBuYW1lbGVuOworICAvKioKKyAgICogVGhlIGxlbmd0aCBvZiB0aGUgfHZhbHVlfCwgZXhjbHVkaW5nIHRlcm1pbmF0aW5nIE5VTEwuCisgICAqLworICBzaXplX3QgdmFsdWVsZW47CisgIC8qKgorICAgKiBCaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIDp0eXBlOmBuZ2h0dHAyX252X2ZsYWdgLgorICAgKi8KKyAgdWludDhfdCBmbGFnczsKK30gbmdodHRwMl9udjsKKworLyoqCisgKiBAZW51bQorICoKKyAqIFRoZSBmcmFtZSB0eXBlcyBpbiBIVFRQLzIgc3BlY2lmaWNhdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqCisgICAqIFRoZSBEQVRBIGZyYW1lLgorICAgKi8KKyAgTkdIVFRQMl9EQVRBID0gMCwKKyAgLyoqCisgICAqIFRoZSBIRUFERVJTIGZyYW1lLgorICAgKi8KKyAgTkdIVFRQMl9IRUFERVJTID0gMHgwMSwKKyAgLyoqCisgICAqIFRoZSBQUklPUklUWSBmcmFtZS4KKyAgICovCisgIE5HSFRUUDJfUFJJT1JJVFkgPSAweDAyLAorICAvKioKKyAgICogVGhlIFJTVF9TVFJFQU0gZnJhbWUuCisgICAqLworICBOR0hUVFAyX1JTVF9TVFJFQU0gPSAweDAzLAorICAvKioKKyAgICogVGhlIFNFVFRJTkdTIGZyYW1lLgorICAgKi8KKyAgTkdIVFRQMl9TRVRUSU5HUyA9IDB4MDQsCisgIC8qKgorICAgKiBUaGUgUFVTSF9QUk9NSVNFIGZyYW1lLgorICAgKi8KKyAgTkdIVFRQMl9QVVNIX1BST01JU0UgPSAweDA1LAorICAvKioKKyAgICogVGhlIFBJTkcgZnJhbWUuCisgICAqLworICBOR0hUVFAyX1BJTkcgPSAweDA2LAorICAvKioKKyAgICogVGhlIEdPQVdBWSBmcmFtZS4KKyAgICovCisgIE5HSFRUUDJfR09BV0FZID0gMHgwNywKKyAgLyoqCisgICAqIFRoZSBXSU5ET1dfVVBEQVRFIGZyYW1lLgorICAgKi8KKyAgTkdIVFRQMl9XSU5ET1dfVVBEQVRFID0gMHgwOCwKKyAgLyoqCisgICAqIFRoZSBDT05USU5VQVRJT04gZnJhbWUuICBUaGlzIGZyYW1lIHR5cGUgd29uJ3QgYmUgcGFzc2VkIHRvIGFueQorICAgKiBjYWxsYmFja3MgYmVjYXVzZSB0aGUgbGlicmFyeSBwcm9jZXNzZXMgdGhpcyBmcmFtZSB0eXBlIGFuZCBpdHMKKyAgICogcHJlY2VkaW5nIEhFQURFUlMvUFVTSF9QUk9NSVNFIGFzIGEgc2luZ2xlIGZyYW1lLgorICAgKi8KKyAgTkdIVFRQMl9DT05USU5VQVRJT04gPSAweDA5LAorICAvKioKKyAgICogVGhlIEFMVFNWQyBmcmFtZSwgd2hpY2ggaXMgZGVmaW5lZCBpbiBgUkZDIDczODMKKyAgICogPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3ODM4I3NlY3Rpb24tND5gXy4KKyAgICovCisgIE5HSFRUUDJfQUxUU1ZDID0gMHgwYSwKKyAgLyoqCisgICAqIFRoZSBPUklHSU4gZnJhbWUsIHdoaWNoIGlzIGRlZmluZWQgYnkgYFJGQyA4MzM2CisgICAqIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODMzNj5gXy4KKyAgICovCisgIE5HSFRUUDJfT1JJR0lOID0gMHgwYworfSBuZ2h0dHAyX2ZyYW1lX3R5cGU7CisKKy8qKgorICogQGVudW0KKyAqCisgKiBUaGUgZmxhZ3MgZm9yIEhUVFAvMiBmcmFtZXMuICBUaGlzIGVudW0gZGVmaW5lcyBhbGwgZmxhZ3MgZm9yIGFsbAorICogZnJhbWVzLgorICovCit0eXBlZGVmIGVudW0geworICAvKioKKyAgICogTm8gZmxhZyBzZXQuCisgICAqLworICBOR0hUVFAyX0ZMQUdfTk9ORSA9IDAsCisgIC8qKgorICAgKiBUaGUgRU5EX1NUUkVBTSBmbGFnLgorICAgKi8KKyAgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0gPSAweDAxLAorICAvKioKKyAgICogVGhlIEVORF9IRUFERVJTIGZsYWcuCisgICAqLworICBOR0hUVFAyX0ZMQUdfRU5EX0hFQURFUlMgPSAweDA0LAorICAvKioKKyAgICogVGhlIEFDSyBmbGFnLgorICAgKi8KKyAgTkdIVFRQMl9GTEFHX0FDSyA9IDB4MDEsCisgIC8qKgorICAgKiBUaGUgUEFEREVEIGZsYWcuCisgICAqLworICBOR0hUVFAyX0ZMQUdfUEFEREVEID0gMHgwOCwKKyAgLyoqCisgICAqIFRoZSBQUklPUklUWSBmbGFnLgorICAgKi8KKyAgTkdIVFRQMl9GTEFHX1BSSU9SSVRZID0gMHgyMAorfSBuZ2h0dHAyX2ZsYWc7CisKKy8qKgorICogQGVudW0KKyAqIFRoZSBTRVRUSU5HUyBJRC4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqCisgICAqIFNFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFCisgICAqLworICBOR0hUVFAyX1NFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFID0gMHgwMSwKKyAgLyoqCisgICAqIFNFVFRJTkdTX0VOQUJMRV9QVVNICisgICAqLworICBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9QVVNIID0gMHgwMiwKKyAgLyoqCisgICAqIFNFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMKKyAgICovCisgIE5HSFRUUDJfU0VUVElOR1NfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyA9IDB4MDMsCisgIC8qKgorICAgKiBTRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFCisgICAqLworICBOR0hUVFAyX1NFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkUgPSAweDA0LAorICAvKioKKyAgICogU0VUVElOR1NfTUFYX0ZSQU1FX1NJWkUKKyAgICovCisgIE5HSFRUUDJfU0VUVElOR1NfTUFYX0ZSQU1FX1NJWkUgPSAweDA1LAorICAvKioKKyAgICogU0VUVElOR1NfTUFYX0hFQURFUl9MSVNUX1NJWkUKKyAgICovCisgIE5HSFRUUDJfU0VUVElOR1NfTUFYX0hFQURFUl9MSVNUX1NJWkUgPSAweDA2LAorICAvKioKKyAgICogU0VUVElOR1NfRU5BQkxFX0NPTk5FQ1RfUFJPVE9DT0wKKyAgICogKGBSRkMgODQ0MSA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzg0NDE+YF8pCisgICAqLworICBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9DT05ORUNUX1BST1RPQ09MID0gMHgwOAorfSBuZ2h0dHAyX3NldHRpbmdzX2lkOworLyogTm90ZTogSWYgd2UgYWRkIFNFVFRJTkdTLCB1cGRhdGUgdGhlIGNhcGFjaXR5IG9mCisgICBOR0hUVFAyX0lOQk9VTkRfTlVNX0lWIGFzIHdlbGwgKi8KKworLyoqCisgKiBAbWFjcm8KKyAqCisgKiAuLiB3YXJuaW5nOjoKKyAqCisgKiAgIERlcHJlY2F0ZWQuICBUaGUgaW5pdGlhbCBtYXggY29uY3VycmVudCBzdHJlYW1zIGlzIDB4ZmZmZmZmZmZ1LgorICoKKyAqIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgaW5jb21pbmcgY29uY3VycmVudCBzdHJlYW1zLiAgVXNlCisgKiBgbmdodHRwMl9zdWJtaXRfc2V0dGluZ3MoKWAgd2l0aAorICogOmVudW06YE5HSFRUUDJfU0VUVElOR1NfTUFYX0NPTkNVUlJFTlRfU1RSRUFNU2AgdG8gY2hhbmdlIHRoZQorICogbWF4aW11bSBudW1iZXIgb2YgaW5jb21pbmcgY29uY3VycmVudCBzdHJlYW1zLgorICoKKyAqIC4uIG5vdGU6OgorICoKKyAqICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIG91dGdvaW5nIGNvbmN1cnJlbnQgc3RyZWFtcyBpcyAxMDAgYnkKKyAqICAgZGVmYXVsdC4KKyAqLworI2RlZmluZSBOR0hUVFAyX0lOSVRJQUxfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyAoKDFVIDw8IDMxKSAtIDEpCisKKy8qKgorICogQGVudW0KKyAqIFRoZSBzdGF0dXMgY29kZXMgZm9yIHRoZSBSU1RfU1RSRUFNIGFuZCBHT0FXQVkgZnJhbWVzLgorICovCit0eXBlZGVmIGVudW0geworICAvKioKKyAgICogTm8gZXJyb3JzLgorICAgKi8KKyAgTkdIVFRQMl9OT19FUlJPUiA9IDB4MDAsCisgIC8qKgorICAgKiBQUk9UT0NPTF9FUlJPUgorICAgKi8KKyAgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUiA9IDB4MDEsCisgIC8qKgorICAgKiBJTlRFUk5BTF9FUlJPUgorICAgKi8KKyAgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUiA9IDB4MDIsCisgIC8qKgorICAgKiBGTE9XX0NPTlRST0xfRVJST1IKKyAgICovCisgIE5HSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SID0gMHgwMywKKyAgLyoqCisgICAqIFNFVFRJTkdTX1RJTUVPVVQKKyAgICovCisgIE5HSFRUUDJfU0VUVElOR1NfVElNRU9VVCA9IDB4MDQsCisgIC8qKgorICAgKiBTVFJFQU1fQ0xPU0VECisgICAqLworICBOR0hUVFAyX1NUUkVBTV9DTE9TRUQgPSAweDA1LAorICAvKioKKyAgICogRlJBTUVfU0laRV9FUlJPUgorICAgKi8KKyAgTkdIVFRQMl9GUkFNRV9TSVpFX0VSUk9SID0gMHgwNiwKKyAgLyoqCisgICAqIFJFRlVTRURfU1RSRUFNCisgICAqLworICBOR0hUVFAyX1JFRlVTRURfU1RSRUFNID0gMHgwNywKKyAgLyoqCisgICAqIENBTkNFTAorICAgKi8KKyAgTkdIVFRQMl9DQU5DRUwgPSAweDA4LAorICAvKioKKyAgICogQ09NUFJFU1NJT05fRVJST1IKKyAgICovCisgIE5HSFRUUDJfQ09NUFJFU1NJT05fRVJST1IgPSAweDA5LAorICAvKioKKyAgICogQ09OTkVDVF9FUlJPUgorICAgKi8KKyAgTkdIVFRQMl9DT05ORUNUX0VSUk9SID0gMHgwYSwKKyAgLyoqCisgICAqIEVOSEFOQ0VfWU9VUl9DQUxNCisgICAqLworICBOR0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNID0gMHgwYiwKKyAgLyoqCisgICAqIElOQURFUVVBVEVfU0VDVVJJVFkKKyAgICovCisgIE5HSFRUUDJfSU5BREVRVUFURV9TRUNVUklUWSA9IDB4MGMsCisgIC8qKgorICAgKiBIVFRQXzFfMV9SRVFVSVJFRAorICAgKi8KKyAgTkdIVFRQMl9IVFRQXzFfMV9SRVFVSVJFRCA9IDB4MGQKK30gbmdodHRwMl9lcnJvcl9jb2RlOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqIFRoZSBmcmFtZSBoZWFkZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggZmllbGQgb2YgdGhpcyBmcmFtZSwgZXhjbHVkaW5nIGZyYW1lIGhlYWRlci4KKyAgICovCisgIHNpemVfdCBsZW5ndGg7CisgIC8qKgorICAgKiBUaGUgc3RyZWFtIGlkZW50aWZpZXIgKGFrYSwgc3RyZWFtIElEKQorICAgKi8KKyAgaW50MzJfdCBzdHJlYW1faWQ7CisgIC8qKgorICAgKiBUaGUgdHlwZSBvZiB0aGlzIGZyYW1lLiAgU2VlIGBuZ2h0dHAyX2ZyYW1lX3R5cGVgLgorICAgKi8KKyAgdWludDhfdCB0eXBlOworICAvKioKKyAgICogVGhlIGZsYWdzLgorICAgKi8KKyAgdWludDhfdCBmbGFnczsKKyAgLyoqCisgICAqIFJlc2VydmVkIGJpdCBpbiBmcmFtZSBoZWFkZXIuICBDdXJyZW50bHksIHRoaXMgaXMgYWx3YXlzIHNldCB0byAwCisgICAqIGFuZCBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGV4cGVjdCBzb21ldGhpbmcgdXNlZnVsIGluIGhlcmUuCisgICAqLworICB1aW50OF90IHJlc2VydmVkOworfSBuZ2h0dHAyX2ZyYW1lX2hkOworCisvKioKKyAqIEB1bmlvbgorICoKKyAqIFRoaXMgdW5pb24gcmVwcmVzZW50cyB0aGUgc29tZSBraW5kIG9mIGRhdGEgc291cmNlIHBhc3NlZCB0bworICogOnR5cGU6YG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFja2AuCisgKi8KK3R5cGVkZWYgdW5pb24geworICAvKioKKyAgICogVGhlIGludGVnZXIgZmllbGQsIHN1aXRhYmxlIGZvciBhIGZpbGUgZGVzY3JpcHRvci4KKyAgICovCisgIGludCBmZDsKKyAgLyoqCisgICAqIFRoZSBwb2ludGVyIHRvIGFuIGFyYml0cmFyeSBvYmplY3QuCisgICAqLworICB2b2lkICpwdHI7Cit9IG5naHR0cDJfZGF0YV9zb3VyY2U7CisKKy8qKgorICogQGVudW0KKyAqCisgKiBUaGUgZmxhZ3MgdXNlZCB0byBzZXQgaW4gfGRhdGFfZmxhZ3N8IG91dHB1dCBwYXJhbWV0ZXIgaW4KKyAqIDp0eXBlOmBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2tgLgorICovCit0eXBlZGVmIGVudW0geworICAvKioKKyAgICogTm8gZmxhZyBzZXQuCisgICAqLworICBOR0hUVFAyX0RBVEFfRkxBR19OT05FID0gMCwKKyAgLyoqCisgICAqIEluZGljYXRlcyBFT0Ygd2FzIHNlbnNlZC4KKyAgICovCisgIE5HSFRUUDJfREFUQV9GTEFHX0VPRiA9IDB4MDEsCisgIC8qKgorICAgKiBJbmRpY2F0ZXMgdGhhdCBFTkRfU1RSRUFNIGZsYWcgbXVzdCBub3QgYmUgc2V0IGV2ZW4gaWYKKyAgICogTkdIVFRQMl9EQVRBX0ZMQUdfRU9GIGlzIHNldC4gIFVzdWFsbHkgdGhpcyBmbGFnIGlzIHVzZWQgdG8gc2VuZAorICAgKiB0cmFpbGVyIGZpZWxkcyB3aXRoIGBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0KClgIG9yCisgICAqIGBuZ2h0dHAyX3N1Ym1pdF9yZXNwb25zZSgpYC4KKyAgICovCisgIE5HSFRUUDJfREFUQV9GTEFHX05PX0VORF9TVFJFQU0gPSAweDAyLAorICAvKioKKyAgICogSW5kaWNhdGVzIHRoYXQgYXBwbGljYXRpb24gd2lsbCBzZW5kIGNvbXBsZXRlIERBVEEgZnJhbWUgaW4KKyAgICogOnR5cGU6YG5naHR0cDJfc2VuZF9kYXRhX2NhbGxiYWNrYC4KKyAgICovCisgIE5HSFRUUDJfREFUQV9GTEFHX05PX0NPUFkgPSAweDA0Cit9IG5naHR0cDJfZGF0YV9mbGFnOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgbGlicmFyeSB3YW50cyB0byByZWFkIGRhdGEgZnJvbQorICogdGhlIHxzb3VyY2V8LiAgVGhlIHJlYWQgZGF0YSBpcyBzZW50IGluIHRoZSBzdHJlYW0gfHN0cmVhbV9pZHwuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJlYWQgYXQgbW9zdCB8bGVuZ3RofAorICogYnl0ZXMgb2YgZGF0YSBmcm9tIHxzb3VyY2V8IChvciBwb3NzaWJseSBvdGhlciBwbGFjZXMpIGFuZCBzdG9yZQorICogdGhlbSBpbiB8YnVmfCBhbmQgcmV0dXJuIG51bWJlciBvZiBkYXRhIHN0b3JlZCBpbiB8YnVmfC4gIElmIEVPRiBpcworICogcmVhY2hlZCwgc2V0IDplbnVtOmBOR0hUVFAyX0RBVEFfRkxBR19FT0ZgIGZsYWcgaW4gfCpkYXRhX2ZsYWdzfC4KKyAqCisgKiBTb21ldGltZSBpdCBpcyBkZXNpcmFibGUgdG8gYXZvaWQgY29weWluZyBkYXRhIGludG8gfGJ1ZnwgYW5kIGxldAorICogYXBwbGljYXRpb24gdG8gc2VuZCBkYXRhIGRpcmVjdGx5LiAgVG8gYWNoaWV2ZSB0aGlzLCBzZXQKKyAqIDplbnVtOmBOR0hUVFAyX0RBVEFfRkxBR19OT19DT1BZYCB0byB8KmRhdGFfZmxhZ3N8IChhbmQgcG9zc2libHkKKyAqIG90aGVyIGZsYWdzLCBqdXN0IGxpa2Ugd2hlbiB3ZSBkbyBjb3B5KSwgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mCisgKiBieXRlcyB0byBzZW5kIHdpdGhvdXQgY29weWluZyBkYXRhIGludG8gfGJ1ZnwuICBUaGUgbGlicmFyeSwgc2VlaW5nCisgKiA6ZW51bTpgTkdIVFRQMl9EQVRBX0ZMQUdfTk9fQ09QWWAsIHdpbGwgaW52b2tlCisgKiA6dHlwZTpgbmdodHRwMl9zZW5kX2RhdGFfY2FsbGJhY2tgLiAgVGhlIGFwcGxpY2F0aW9uIG11c3Qgc2VuZAorICogY29tcGxldGUgREFUQSBmcmFtZSBpbiB0aGF0IGNhbGxiYWNrLgorICoKKyAqIElmIHRoaXMgY2FsbGJhY2sgaXMgc2V0IGJ5IGBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0KClgLAorICogYG5naHR0cDJfc3VibWl0X3Jlc3BvbnNlKClgIG9yIGBuZ2h0dHAyX3N1Ym1pdF9oZWFkZXJzKClgIGFuZAorICogYG5naHR0cDJfc3VibWl0X2RhdGEoKWAgd2l0aCBmbGFnIHBhcmFtZXRlcgorICogOmVudW06YE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNYCBzZXQsIGFuZAorICogOmVudW06YE5HSFRUUDJfREFUQV9GTEFHX0VPRmAgZmxhZyBpcyBzZXQgdG8gfCpkYXRhX2ZsYWdzfCwgREFUQQorICogZnJhbWUgd2lsbCBoYXZlIEVORF9TVFJFQU0gZmxhZyBzZXQuICBVc3VhbGx5LCB0aGlzIGlzIGV4cGVjdGVkCisgKiBiZWhhdmlvdXIgYW5kIGFsbCBhcmUgZmluZS4gIE9uZSBleGNlcHRpb24gaXMgc2VuZCB0cmFpbGVyIGZpZWxkcy4KKyAqIFlvdSBjYW5ub3Qgc2VuZCB0cmFpbGVyIGZpZWxkcyBhZnRlciBzZW5kaW5nIGZyYW1lIHdpdGggRU5EX1NUUkVBTQorICogc2V0LiAgVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBvbmUgY2FuIHNldAorICogOmVudW06YE5HSFRUUDJfREFUQV9GTEFHX05PX0VORF9TVFJFQU1gIGFsb25nIHdpdGgKKyAqIDplbnVtOmBOR0hUVFAyX0RBVEFfRkxBR19FT0ZgIHRvIHNpZ25hbCB0aGUgbGlicmFyeSBub3QgdG8gc2V0CisgKiBFTkRfU1RSRUFNIGluIERBVEEgZnJhbWUuICBUaGVuIGFwcGxpY2F0aW9uIGNhbiB1c2UKKyAqIGBuZ2h0dHAyX3N1Ym1pdF90cmFpbGVyKClgIHRvIHNlbmQgdHJhaWxlciBmaWVsZHMuCisgKiBgbmdodHRwMl9zdWJtaXRfdHJhaWxlcigpYCBjYW4gYmUgY2FsbGVkIGluc2lkZSB0aGlzIGNhbGxiYWNrLgorICoKKyAqIElmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBwb3N0cG9uZSBEQVRBIGZyYW1lcyAoZS5nLiwKKyAqIGFzeW5jaHJvbm91cyBJL08sIG9yIHJlYWRpbmcgZGF0YSBibG9ja3MgZm9yIGxvbmcgdGltZSksIGl0IGlzCisgKiBhY2hpZXZlZCBieSByZXR1cm5pbmcgOmVudW06YE5HSFRUUDJfRVJSX0RFRkVSUkVEYCB3aXRob3V0IHJlYWRpbmcKKyAqIGFueSBkYXRhIGluIHRoaXMgaW52b2NhdGlvbi4gIFRoZSBsaWJyYXJ5IHJlbW92ZXMgREFUQSBmcmFtZSBmcm9tCisgKiB0aGUgb3V0Z29pbmcgcXVldWUgdGVtcG9yYXJpbHkuICBUbyBtb3ZlIGJhY2sgZGVmZXJyZWQgREFUQSBmcmFtZQorICogdG8gb3V0Z29pbmcgcXVldWUsIGNhbGwgYG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YSgpYC4KKyAqCisgKiBCeSBkZWZhdWx0LCB8bGVuZ3RofCBpcyBsaW1pdGVkIHRvIDE2S2lCIGF0IG1heGltdW0uICBJZiBwZWVyCisgKiBhbGxvd3MgbGFyZ2VyIGZyYW1lcywgYXBwbGljYXRpb24gY2FuIGVubGFyZ2UgdHJhbnNtaXNzaW9uIGJ1ZmZlcgorICogc2l6ZS4gIFNlZSA6dHlwZTpgbmdodHRwMl9kYXRhX3NvdXJjZV9yZWFkX2xlbmd0aF9jYWxsYmFja2AgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGp1c3Qgd2FudHMgdG8gcmV0dXJuIGZyb20KKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VuZCgpYCBvciBgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kKClgIHdpdGhvdXQKKyAqIHNlbmRpbmcgYW55dGhpbmcsIHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfUEFVU0VgLgorICoKKyAqIEluIGNhc2Ugb2YgZXJyb3IsIHRoZXJlIGFyZSAyIGNob2ljZXMuIFJldHVybmluZworICogOmVudW06YE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkVgIHdpbGwgY2xvc2UgdGhlIHN0cmVhbQorICogYnkgaXNzdWluZyBSU1RfU1RSRUFNIHdpdGggOmVudW06YE5HSFRUUDJfSU5URVJOQUxfRVJST1JgLiAgSWYgYQorICogZGlmZmVyZW50IGVycm9yIGNvZGUgaXMgZGVzaXJhYmxlLCB1c2UKKyAqIGBuZ2h0dHAyX3N1Ym1pdF9yc3Rfc3RyZWFtKClgIHdpdGggYSBkZXNpcmVkIGVycm9yIGNvZGUgYW5kIHRoZW4KKyAqIHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRWAuICBSZXR1cm5pbmcKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYCB3aWxsIHNpZ25hbCB0aGUgZW50aXJlIHNlc3Npb24KKyAqIGZhaWx1cmUuCisgKi8KK3R5cGVkZWYgc3NpemVfdCAoKm5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFjaykoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwgdWludDhfdCAqYnVmLCBzaXplX3QgbGVuZ3RoLAorICAgIHVpbnQzMl90ICpkYXRhX2ZsYWdzLCBuZ2h0dHAyX2RhdGFfc291cmNlICpzb3VyY2UsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoaXMgc3RydWN0IHJlcHJlc2VudHMgdGhlIGRhdGEgc291cmNlIGFuZCB0aGUgd2F5IHRvIHJlYWQgYSBjaHVuaworICogb2YgZGF0YSBmcm9tIGl0LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgZGF0YSBzb3VyY2UuCisgICAqLworICBuZ2h0dHAyX2RhdGFfc291cmNlIHNvdXJjZTsKKyAgLyoqCisgICAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZWFkIGEgY2h1bmsgb2YgZGF0YSBmcm9tIHRoZSB8c291cmNlfC4KKyAgICovCisgIG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFjayByZWFkX2NhbGxiYWNrOworfSBuZ2h0dHAyX2RhdGFfcHJvdmlkZXI7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBEQVRBIGZyYW1lLiAgVGhlIHJlY2VpdmVkIGRhdGEgaXMgZGVsaXZlcmVkIHZpYQorICogOnR5cGU6YG5naHR0cDJfb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrYC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBuZ2h0dHAyX2ZyYW1lX2hkIGhkOworICAvKioKKyAgICogVGhlIGxlbmd0aCBvZiB0aGUgcGFkZGluZyBpbiB0aGlzIGZyYW1lLiAgVGhpcyBpbmNsdWRlcyBQQURfSElHSAorICAgKiBhbmQgUEFEX0xPVy4KKyAgICovCisgIHNpemVfdCBwYWRsZW47Cit9IG5naHR0cDJfZGF0YTsKKworLyoqCisgKiBAZW51bQorICoKKyAqIFRoZSBjYXRlZ29yeSBvZiBIRUFERVJTLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHJvbGUgb2YgdGhlIGZyYW1lLiAgSW4KKyAqIEhUVFAvMiBzcGVjLCByZXF1ZXN0LCByZXNwb25zZSwgcHVzaCByZXNwb25zZSBhbmQgb3RoZXIgYXJiaXRyYXJ5CisgKiBoZWFkZXJzIChlLmcuLCB0cmFpbGVyIGZpZWxkcykgYXJlIGFsbCBjYWxsZWQganVzdCBIRUFERVJTLiAgVG8KKyAqIGdpdmUgdGhlIGFwcGxpY2F0aW9uIHRoZSByb2xlIG9mIGluY29taW5nIEhFQURFUlMgZnJhbWUsIHdlIGRlZmluZQorICogc2V2ZXJhbCBjYXRlZ29yaWVzLgorICovCit0eXBlZGVmIGVudW0geworICAvKioKKyAgICogVGhlIEhFQURFUlMgZnJhbWUgaXMgb3BlbmluZyBuZXcgc3RyZWFtLCB3aGljaCBpcyBhbmFsb2dvdXMgdG8KKyAgICogU1lOX1NUUkVBTSBpbiBTUERZLgorICAgKi8KKyAgTkdIVFRQMl9IQ0FUX1JFUVVFU1QgPSAwLAorICAvKioKKyAgICogVGhlIEhFQURFUlMgZnJhbWUgaXMgdGhlIGZpcnN0IHJlc3BvbnNlIGhlYWRlcnMsIHdoaWNoIGlzCisgICAqIGFuYWxvZ291cyB0byBTWU5fUkVQTFkgaW4gU1BEWS4KKyAgICovCisgIE5HSFRUUDJfSENBVF9SRVNQT05TRSA9IDEsCisgIC8qKgorICAgKiBUaGUgSEVBREVSUyBmcmFtZSBpcyB0aGUgZmlyc3QgaGVhZGVycyBzZW50IGFnYWluc3QgcmVzZXJ2ZWQKKyAgICogc3RyZWFtLgorICAgKi8KKyAgTkdIVFRQMl9IQ0FUX1BVU0hfUkVTUE9OU0UgPSAyLAorICAvKioKKyAgICogVGhlIEhFQURFUlMgZnJhbWUgd2hpY2ggZG9lcyBub3QgYXBwbHkgZm9yIHRoZSBhYm92ZSBjYXRlZ29yaWVzLAorICAgKiB3aGljaCBpcyBhbmFsb2dvdXMgdG8gSEVBREVSUyBpbiBTUERZLiAgSWYgbm9uLWZpbmFsIHJlc3BvbnNlCisgICAqIChlLmcuLCBzdGF0dXMgMXh4KSBpcyB1c2VkLCBmaW5hbCByZXNwb25zZSBIRUFERVJTIGZyYW1lIHdpbGwgYmUKKyAgICogY2F0ZWdvcml6ZWQgaGVyZS4KKyAgICovCisgIE5HSFRUUDJfSENBVF9IRUFERVJTID0gMworfSBuZ2h0dHAyX2hlYWRlcnNfY2F0ZWdvcnk7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBzdHJ1Y3R1cmUgdG8gc3BlY2lmeSBzdHJlYW0gZGVwZW5kZW5jeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIHN0cmVhbSBJRCBvZiB0aGUgc3RyZWFtIHRvIGRlcGVuZCBvbi4gIFNwZWNpZnlpbmcgMCBtYWtlcworICAgKiBzdHJlYW0gbm90IGRlcGVuZCBhbnkgb3RoZXIgc3RyZWFtLgorICAgKi8KKyAgaW50MzJfdCBzdHJlYW1faWQ7CisgIC8qKgorICAgKiBUaGUgd2VpZ2h0IG9mIHRoaXMgZGVwZW5kZW5jeS4KKyAgICovCisgIGludDMyX3Qgd2VpZ2h0OworICAvKioKKyAgICogbm9uemVybyBtZWFucyBleGNsdXNpdmUgZGVwZW5kZW5jeQorICAgKi8KKyAgdWludDhfdCBleGNsdXNpdmU7Cit9IG5naHR0cDJfcHJpb3JpdHlfc3BlYzsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIEhFQURFUlMgZnJhbWUuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgZnJhbWUgaGVhZGVyLgorICAgKi8KKyAgbmdodHRwMl9mcmFtZV9oZCBoZDsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgdGhlIHBhZGRpbmcgaW4gdGhpcyBmcmFtZS4gIFRoaXMgaW5jbHVkZXMgUEFEX0hJR0gKKyAgICogYW5kIFBBRF9MT1cuCisgICAqLworICBzaXplX3QgcGFkbGVuOworICAvKioKKyAgICogVGhlIHByaW9yaXR5IHNwZWNpZmljYXRpb24KKyAgICovCisgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyBwcmlfc3BlYzsKKyAgLyoqCisgICAqIFRoZSBuYW1lL3ZhbHVlIHBhaXJzLgorICAgKi8KKyAgbmdodHRwMl9udiAqbnZhOworICAvKioKKyAgICogVGhlIG51bWJlciBvZiBuYW1lL3ZhbHVlIHBhaXJzIGluIHxudmF8LgorICAgKi8KKyAgc2l6ZV90IG52bGVuOworICAvKioKKyAgICogVGhlIGNhdGVnb3J5IG9mIHRoaXMgSEVBREVSUyBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfaGVhZGVyc19jYXRlZ29yeSBjYXQ7Cit9IG5naHR0cDJfaGVhZGVyczsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIFBSSU9SSVRZIGZyYW1lLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIGZyYW1lIGhlYWRlci4KKyAgICovCisgIG5naHR0cDJfZnJhbWVfaGQgaGQ7CisgIC8qKgorICAgKiBUaGUgcHJpb3JpdHkgc3BlY2lmaWNhdGlvbi4KKyAgICovCisgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyBwcmlfc3BlYzsKK30gbmdodHRwMl9wcmlvcml0eTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIFJTVF9TVFJFQU0gZnJhbWUuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgZnJhbWUgaGVhZGVyLgorICAgKi8KKyAgbmdodHRwMl9mcmFtZV9oZCBoZDsKKyAgLyoqCisgICAqIFRoZSBlcnJvciBjb2RlLiAgU2VlIDp0eXBlOmBuZ2h0dHAyX2Vycm9yX2NvZGVgLgorICAgKi8KKyAgdWludDMyX3QgZXJyb3JfY29kZTsKK30gbmdodHRwMl9yc3Rfc3RyZWFtOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgU0VUVElOR1MgSUQvVmFsdWUgcGFpci4gIEl0IGhhcyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBTRVRUSU5HUyBJRC4gIFNlZSA6dHlwZTpgbmdodHRwMl9zZXR0aW5nc19pZGAuCisgICAqLworICBpbnQzMl90IHNldHRpbmdzX2lkOworICAvKioKKyAgICogVGhlIHZhbHVlIG9mIHRoaXMgZW50cnkuCisgICAqLworICB1aW50MzJfdCB2YWx1ZTsKK30gbmdodHRwMl9zZXR0aW5nc19lbnRyeTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIFNFVFRJTkdTIGZyYW1lLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIGZyYW1lIGhlYWRlci4KKyAgICovCisgIG5naHR0cDJfZnJhbWVfaGQgaGQ7CisgIC8qKgorICAgKiBUaGUgbnVtYmVyIG9mIFNFVFRJTkdTIElEL1ZhbHVlIHBhaXJzIGluIHxpdnwuCisgICAqLworICBzaXplX3Qgbml2OworICAvKioKKyAgICogVGhlIHBvaW50ZXIgdG8gdGhlIGFycmF5IG9mIFNFVFRJTkdTIElEL1ZhbHVlIHBhaXIuCisgICAqLworICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdjsKK30gbmdodHRwMl9zZXR0aW5nczsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIFBVU0hfUFJPTUlTRSBmcmFtZS4gIEl0IGhhcyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBmcmFtZSBoZWFkZXIuCisgICAqLworICBuZ2h0dHAyX2ZyYW1lX2hkIGhkOworICAvKioKKyAgICogVGhlIGxlbmd0aCBvZiB0aGUgcGFkZGluZyBpbiB0aGlzIGZyYW1lLiAgVGhpcyBpbmNsdWRlcyBQQURfSElHSAorICAgKiBhbmQgUEFEX0xPVy4KKyAgICovCisgIHNpemVfdCBwYWRsZW47CisgIC8qKgorICAgKiBUaGUgbmFtZS92YWx1ZSBwYWlycy4KKyAgICovCisgIG5naHR0cDJfbnYgKm52YTsKKyAgLyoqCisgICAqIFRoZSBudW1iZXIgb2YgbmFtZS92YWx1ZSBwYWlycyBpbiB8bnZhfC4KKyAgICovCisgIHNpemVfdCBudmxlbjsKKyAgLyoqCisgICAqIFRoZSBwcm9taXNlZCBzdHJlYW0gSUQKKyAgICovCisgIGludDMyX3QgcHJvbWlzZWRfc3RyZWFtX2lkOworICAvKioKKyAgICogUmVzZXJ2ZWQgYml0LiAgQ3VycmVudGx5IHRoaXMgaXMgYWx3YXlzIHNldCB0byAwIGFuZCBhcHBsaWNhdGlvbgorICAgKiBzaG91bGQgbm90IGV4cGVjdCBzb21ldGhpbmcgdXNlZnVsIGluIGhlcmUuCisgICAqLworICB1aW50OF90IHJlc2VydmVkOworfSBuZ2h0dHAyX3B1c2hfcHJvbWlzZTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIFBJTkcgZnJhbWUuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBtZW1iZXJzOgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qKgorICAgKiBUaGUgZnJhbWUgaGVhZGVyLgorICAgKi8KKyAgbmdodHRwMl9mcmFtZV9oZCBoZDsKKyAgLyoqCisgICAqIFRoZSBvcGFxdWUgZGF0YQorICAgKi8KKyAgdWludDhfdCBvcGFxdWVfZGF0YVs4XTsKK30gbmdodHRwMl9waW5nOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgR09BV0FZIGZyYW1lLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIGZyYW1lIGhlYWRlci4KKyAgICovCisgIG5naHR0cDJfZnJhbWVfaGQgaGQ7CisgIC8qKgorICAgKiBUaGUgbGFzdCBzdHJlYW0gc3RyZWFtIElELgorICAgKi8KKyAgaW50MzJfdCBsYXN0X3N0cmVhbV9pZDsKKyAgLyoqCisgICAqIFRoZSBlcnJvciBjb2RlLiAgU2VlIDp0eXBlOmBuZ2h0dHAyX2Vycm9yX2NvZGVgLgorICAgKi8KKyAgdWludDMyX3QgZXJyb3JfY29kZTsKKyAgLyoqCisgICAqIFRoZSBhZGRpdGlvbmFsIGRlYnVnIGRhdGEKKyAgICovCisgIHVpbnQ4X3QgKm9wYXF1ZV9kYXRhOworICAvKioKKyAgICogVGhlIGxlbmd0aCBvZiB8b3BhcXVlX2RhdGF8IG1lbWJlci4KKyAgICovCisgIHNpemVfdCBvcGFxdWVfZGF0YV9sZW47CisgIC8qKgorICAgKiBSZXNlcnZlZCBiaXQuICBDdXJyZW50bHkgdGhpcyBpcyBhbHdheXMgc2V0IHRvIDAgYW5kIGFwcGxpY2F0aW9uCisgICAqIHNob3VsZCBub3QgZXhwZWN0IHNvbWV0aGluZyB1c2VmdWwgaW4gaGVyZS4KKyAgICovCisgIHVpbnQ4X3QgcmVzZXJ2ZWQ7Cit9IG5naHR0cDJfZ29hd2F5OworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgV0lORE9XX1VQREFURSBmcmFtZS4gIEl0IGhhcyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBmcmFtZSBoZWFkZXIuCisgICAqLworICBuZ2h0dHAyX2ZyYW1lX2hkIGhkOworICAvKioKKyAgICogVGhlIHdpbmRvdyBzaXplIGluY3JlbWVudC4KKyAgICovCisgIGludDMyX3Qgd2luZG93X3NpemVfaW5jcmVtZW50OworICAvKioKKyAgICogUmVzZXJ2ZWQgYml0LiAgQ3VycmVudGx5IHRoaXMgaXMgYWx3YXlzIHNldCB0byAwIGFuZCBhcHBsaWNhdGlvbgorICAgKiBzaG91bGQgbm90IGV4cGVjdCBzb21ldGhpbmcgdXNlZnVsIGluIGhlcmUuCisgICAqLworICB1aW50OF90IHJlc2VydmVkOworfSBuZ2h0dHAyX3dpbmRvd191cGRhdGU7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIFRoZSBleHRlbnNpb24gZnJhbWUuICBJdCBoYXMgZm9sbG93aW5nIG1lbWJlcnM6CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBmcmFtZSBoZWFkZXIuCisgICAqLworICBuZ2h0dHAyX2ZyYW1lX2hkIGhkOworICAvKioKKyAgICogVGhlIHBvaW50ZXIgdG8gZXh0ZW5zaW9uIHBheWxvYWQuICBUaGUgZXhhY3QgcG9pbnRlciB0eXBlIGlzCisgICAqIGRldGVybWluZWQgYnkgaGQudHlwZS4KKyAgICoKKyAgICogQ3VycmVudGx5LCBubyBleHRlbnNpb24gaXMgc3VwcG9ydGVkLiAgVGhpcyBpcyBhIHBsYWNlIGhvbGRlciBmb3IKKyAgICogdGhlIGZ1dHVyZSBleHRlbnNpb25zLgorICAgKi8KKyAgdm9pZCAqcGF5bG9hZDsKK30gbmdodHRwMl9leHRlbnNpb247CisKKy8qKgorICogQHVuaW9uCisgKgorICogVGhpcyB1bmlvbiBpbmNsdWRlcyBhbGwgZnJhbWVzIHRvIHBhc3MgdGhlbSB0byB2YXJpb3VzIGZ1bmN0aW9uCisgKiBjYWxscyBhcyBuZ2h0dHAyX2ZyYW1lIHR5cGUuICBUaGUgQ09OVElOVUFUSU9OIGZyYW1lIGlzIG9taXR0ZWQKKyAqIGZyb20gaGVyZSBiZWNhdXNlIHRoZSBsaWJyYXJ5IGRlYWxzIHdpdGggaXQgaW50ZXJuYWxseS4KKyAqLwordHlwZWRlZiB1bmlvbiB7CisgIC8qKgorICAgKiBUaGUgZnJhbWUgaGVhZGVyLCB3aGljaCBpcyBjb252ZW5pZW50IHRvIGluc3BlY3QgZnJhbWUgaGVhZGVyLgorICAgKi8KKyAgbmdodHRwMl9mcmFtZV9oZCBoZDsKKyAgLyoqCisgICAqIFRoZSBEQVRBIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl9kYXRhIGRhdGE7CisgIC8qKgorICAgKiBUaGUgSEVBREVSUyBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfaGVhZGVycyBoZWFkZXJzOworICAvKioKKyAgICogVGhlIFBSSU9SSVRZIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl9wcmlvcml0eSBwcmlvcml0eTsKKyAgLyoqCisgICAqIFRoZSBSU1RfU1RSRUFNIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl9yc3Rfc3RyZWFtIHJzdF9zdHJlYW07CisgIC8qKgorICAgKiBUaGUgU0VUVElOR1MgZnJhbWUuCisgICAqLworICBuZ2h0dHAyX3NldHRpbmdzIHNldHRpbmdzOworICAvKioKKyAgICogVGhlIFBVU0hfUFJPTUlTRSBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfcHVzaF9wcm9taXNlIHB1c2hfcHJvbWlzZTsKKyAgLyoqCisgICAqIFRoZSBQSU5HIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl9waW5nIHBpbmc7CisgIC8qKgorICAgKiBUaGUgR09BV0FZIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl9nb2F3YXkgZ29hd2F5OworICAvKioKKyAgICogVGhlIFdJTkRPV19VUERBVEUgZnJhbWUuCisgICAqLworICBuZ2h0dHAyX3dpbmRvd191cGRhdGUgd2luZG93X3VwZGF0ZTsKKyAgLyoqCisgICAqIFRoZSBleHRlbnNpb24gZnJhbWUuCisgICAqLworICBuZ2h0dHAyX2V4dGVuc2lvbiBleHQ7Cit9IG5naHR0cDJfZnJhbWU7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHxzZXNzaW9ufCB3YW50cyB0byBzZW5kIGRhdGEgdG8gdGhlCisgKiByZW1vdGUgcGVlci4gIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG11c3Qgc2VuZCBhdCBtb3N0CisgKiB8bGVuZ3RofCBieXRlcyBvZiBkYXRhIHN0b3JlZCBpbiB8ZGF0YXwuICBUaGUgfGZsYWdzfCBpcyBjdXJyZW50bHkKKyAqIG5vdCB1c2VkIGFuZCBhbHdheXMgMC4gSXQgbXVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBzZW50IGlmCisgKiBpdCBzdWNjZWVkcy4gIElmIGl0IGNhbm5vdCBzZW5kIGFueSBzaW5nbGUgYnl0ZSB3aXRob3V0IGJsb2NraW5nLAorICogaXQgbXVzdCByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX1dPVUxEQkxPQ0tgLiAgRm9yIG90aGVyIGVycm9ycywKKyAqIGl0IG11c3QgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIFRoZQorICogfHVzZXJfZGF0YXwgcG9pbnRlciBpcyB0aGUgdGhpcmQgYXJndW1lbnQgcGFzc2VkIGluIHRvIHRoZSBjYWxsIHRvCisgKiBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAgb3IgYG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3KClgLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgaXMgcmVxdWlyZWQgaWYgdGhlIGFwcGxpY2F0aW9uIHVzZXMKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VuZCgpYCB0byBzZW5kIGRhdGEgdG8gdGhlIHJlbW90ZSBlbmRwb2ludC4gIElmCisgKiB0aGUgYXBwbGljYXRpb24gdXNlcyBzb2xlbHkgYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCBpbnN0ZWFkLAorICogdGhpcyBjYWxsYmFjayBmdW5jdGlvbiBpcyB1bm5lY2Vzc2FyeS4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X3NlbmRfY2FsbGJhY2soKWAuCisgKgorICogLi4gbm90ZTo6CisgKgorICogICBUaGUgfGxlbmd0aHwgbWF5IGJlIHZlcnkgc21hbGwuICBJZiB0aGF0IGlzIHRoZSBjYXNlLCBhbmQKKyAqICAgYXBwbGljYXRpb24gZGlzYWJsZXMgTmFnbGUgYWxnb3JpdGhtIChgYFRDUF9OT0RFTEFZYGApLCB0aGVuIGp1c3QKKyAqICAgd3JpdGluZyB8ZGF0YXwgdG8gdGhlIG5ldHdvcmsgc3RhY2sgbGVhZHMgdG8gdmVyeSBzbWFsbCBwYWNrZXQsCisgKiAgIGFuZCBpdCBpcyB2ZXJ5IGluZWZmaWNpZW50LiAgQW4gYXBwbGljYXRpb24gc2hvdWxkIGJlIHJlc3BvbnNpYmxlCisgKiAgIHRvIGJ1ZmZlciB1cCBzbWFsbCBjaHVua3Mgb2YgZGF0YSBhcyBuZWNlc3NhcnkgdG8gYXZvaWQgdGhpcworICogICBzaXR1YXRpb24uCisgKi8KK3R5cGVkZWYgc3NpemVfdCAoKm5naHR0cDJfc2VuZF9jYWxsYmFjaykobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIDplbnVtOmBOR0hUVFAyX0RBVEFfRkxBR19OT19DT1BZYCBpcworICogdXNlZCBpbiA6dHlwZTpgbmdodHRwMl9kYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrYCB0byBzZW5kIGNvbXBsZXRlCisgKiBEQVRBIGZyYW1lLgorICoKKyAqIFRoZSB8ZnJhbWV8IGlzIGEgREFUQSBmcmFtZSB0byBzZW5kLiAgVGhlIHxmcmFtZWhkfCBpcyB0aGUKKyAqIHNlcmlhbGl6ZWQgZnJhbWUgaGVhZGVyICg5IGJ5dGVzKS4gVGhlIHxsZW5ndGh8IGlzIHRoZSBsZW5ndGggb2YKKyAqIGFwcGxpY2F0aW9uIGRhdGEgdG8gc2VuZCAodGhpcyBkb2VzIG5vdCBpbmNsdWRlIHBhZGRpbmcpLiAgVGhlCisgKiB8c291cmNlfCBpcyB0aGUgc2FtZSBwb2ludGVyIHBhc3NlZCB0bworICogOnR5cGU6YG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFja2AuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIGZpcnN0IG11c3Qgc2VuZCBmcmFtZSBoZWFkZXIgfGZyYW1laGR8IG9mIGxlbmd0aCA5CisgKiBieXRlcy4gIElmIGBgZnJhbWUtPmRhdGEucGFkbGVuID4gMGBgLCBzZW5kIDEgYnl0ZSBvZiB2YWx1ZQorICogYGBmcmFtZS0+ZGF0YS5wYWRsZW4gLSAxYGAuICBUaGVuIHNlbmQgZXhhY3RseSB8bGVuZ3RofCBieXRlcyBvZgorICogYXBwbGljYXRpb24gZGF0YS4gIEZpbmFsbHksIGlmIGBgZnJhbWUtPmRhdGEucGFkbGVuID4gMWBgLCBzZW5kCisgKiBgYGZyYW1lLT5kYXRhLnBhZGxlbiAtIDFgYCBieXRlcyBvZiB6ZXJvIGFzIHBhZGRpbmcuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIGhhcyB0byBzZW5kIGNvbXBsZXRlIERBVEEgZnJhbWUgaW4gdGhpcyBjYWxsYmFjay4KKyAqIElmIGFsbCBkYXRhIHdlcmUgd3JpdHRlbiBzdWNjZXNzZnVsbHksIHJldHVybiAwLgorICoKKyAqIElmIGl0IGNhbm5vdCBzZW5kIGFueSBkYXRhIGF0IGFsbCwganVzdCByZXR1cm4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9XT1VMREJMT0NLYDsgdGhlIGxpYnJhcnkgd2lsbCBjYWxsIHRoaXMgY2FsbGJhY2sKKyAqIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyBsYXRlciAoSXQgaXMgcmVjb21tZW5kZWQgdG8gc2VuZCBjb21wbGV0ZQorICogREFUQSBmcmFtZSBhdCBvbmNlIGluIHRoaXMgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIGVycm9yOyBpZiBwYXJ0aWFsCisgKiBmcmFtZSBkYXRhIGhhcyBhbHJlYWR5IHNlbnQsIGl0IGlzIGltcG9zc2libGUgdG8gc2VuZCBhbm90aGVyIGRhdGEKKyAqIGluIHRoYXQgc3RhdGUsIGFuZCBhbGwgd2UgY2FuIGRvIGlzIHRlYXIgZG93biBjb25uZWN0aW9uKS4gIFdoZW4KKyAqIGRhdGEgaXMgZnVsbHkgcHJvY2Vzc2VkLCBidXQgYXBwbGljYXRpb24gd2FudHMgdG8gbWFrZQorICogYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCBvciBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAgcmV0dXJuCisgKiBpbW1lZGlhdGVseSB3aXRob3V0IHByb2Nlc3NpbmcgbmV4dCBmcmFtZXMsIHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX1BBVVNFYC4gIElmIGFwcGxpY2F0aW9uIGRlY2lkZWQgdG8gcmVzZXQgdGhpcworICogc3RyZWFtLCByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkVgLCB0aGVuCisgKiB0aGUgbGlicmFyeSB3aWxsIHNlbmQgUlNUX1NUUkVBTSB3aXRoIElOVEVSTkFMX0VSUk9SIGFzIGVycm9yIGNvZGUuCisgKiBUaGUgYXBwbGljYXRpb24gY2FuIGFsc28gcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAsIHdoaWNoIHdpbGwgcmVzdWx0IGluCisgKiBjb25uZWN0aW9uIGNsb3N1cmUuICBSZXR1cm5pbmcgYW55IG90aGVyIHZhbHVlIGlzIHRyZWF0ZWQgYXMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYCBpcyByZXR1cm5lZC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX3NlbmRfZGF0YV9jYWxsYmFjaykobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpmcmFtZWhkLCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9kYXRhX3NvdXJjZSAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gfHNlc3Npb258IHdhbnRzIHRvIHJlY2VpdmUgZGF0YSBmcm9tCisgKiB0aGUgcmVtb3RlIHBlZXIuICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJlYWQgYXQKKyAqIG1vc3QgfGxlbmd0aHwgYnl0ZXMgb2YgZGF0YSBhbmQgc3RvcmUgaXQgaW4gfGJ1ZnwuICBUaGUgfGZsYWdzfCBpcworICogY3VycmVudGx5IG5vdCB1c2VkIGFuZCBhbHdheXMgMC4gIEl0IG11c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YKKyAqIGJ5dGVzIHdyaXR0ZW4gaW4gfGJ1ZnwgaWYgaXQgc3VjY2VlZHMuICBJZiBpdCBjYW5ub3QgcmVhZCBhbnkKKyAqIHNpbmdsZSBieXRlIHdpdGhvdXQgYmxvY2tpbmcsIGl0IG11c3QgcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfV09VTERCTE9DS2AuICBJZiBpdCBnZXRzIEVPRiBiZWZvcmUgaXQgcmVhZHMgYW55CisgKiBzaW5nbGUgYnl0ZSwgaXQgbXVzdCByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0VPRmAuICBGb3Igb3RoZXIKKyAqIGVycm9ycywgaXQgbXVzdCByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICogUmV0dXJuaW5nIDAgaXMgdHJlYXRlZCBhcyA6ZW51bTpgTkdIVFRQMl9FUlJfV09VTERCTE9DS2AuICBUaGUKKyAqIHx1c2VyX2RhdGF8IHBvaW50ZXIgaXMgdGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCBpbiB0byB0aGUgY2FsbCB0bworICogYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KClgIG9yIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIGlzIHJlcXVpcmVkIGlmIHRoZSBhcHBsaWNhdGlvbiB1c2VzCisgKiBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgdG8gcmVjZWl2ZSBkYXRhIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludC4KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiB1c2VzIHNvbGVseSBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgCisgKiBpbnN0ZWFkLCB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHVubmVjZXNzYXJ5LgorICoKKyAqIFRvIHNldCB0aGlzIGNhbGxiYWNrIHRvIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzYCwgdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfcmVjdl9jYWxsYmFjaygpYC4KKyAqLwordHlwZWRlZiBzc2l6ZV90ICgqbmdodHRwMl9yZWN2X2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYnkgYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCB3aGVuIGEgZnJhbWUgaXMgcmVjZWl2ZWQuICBUaGUKKyAqIHx1c2VyX2RhdGF8IHBvaW50ZXIgaXMgdGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCBpbiB0byB0aGUgY2FsbCB0bworICogYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3KClgIG9yIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBJZiBmcmFtZSBpcyBIRUFERVJTIG9yIFBVU0hfUFJPTUlTRSwgdGhlIGBgbnZhYGAgYW5kIGBgbnZsZW5gYAorICogbWVtYmVyIG9mIHRoZWlyIGRhdGEgc3RydWN0dXJlIGFyZSBhbHdheXMgYGBOVUxMYGAgYW5kIDAKKyAqIHJlc3BlY3RpdmVseS4gIFRoZSBoZWFkZXIgbmFtZS92YWx1ZSBwYWlycyBhcmUgZW1pdHRlZCB2aWEKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFja2AuCisgKgorICogRm9yIEhFQURFUlMsIFBVU0hfUFJPTUlTRSBhbmQgREFUQSBmcmFtZXMsIHRoaXMgY2FsbGJhY2sgbWF5IGJlCisgKiBjYWxsZWQgYWZ0ZXIgc3RyZWFtIGlzIGNsb3NlZCAoc2VlCisgKiA6dHlwZTpgbmdodHRwMl9vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2tgKS4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAqIGNoZWNrIHRoYXQgc3RyZWFtIGlzIHN0aWxsIGFsaXZlIHVzaW5nIGl0cyBvd24gc3RyZWFtIG1hbmFnZW1lbnQgb3IKKyAqIDpmdW5jOmBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV91c2VyX2RhdGEoKWAuCisgKgorICogT25seSBIRUFERVJTIGFuZCBEQVRBIGZyYW1lIGNhbiBzaWduYWwgdGhlIGVuZCBvZiBpbmNvbWluZyBkYXRhLgorICogSWYgYGBmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTWBgIGlzIG5vbnplcm8sIHRoZQorICogfGZyYW1lfCBpcyB0aGUgbGFzdCBmcmFtZSBmcm9tIHRoZSByZW1vdGUgcGVlciBpbiB0aGlzIHN0cmVhbS4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIHdvbid0IGJlIGNhbGxlZCBmb3IgQ09OVElOVUFUSU9OIGZyYW1lcy4KKyAqIEhFQURFUlMvUFVTSF9QUk9NSVNFICsgQ09OVElOVUFUSU9OcyBhcmUgdHJlYXRlZCBhcyBzaW5nbGUgZnJhbWUuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBpZiBpdCBzdWNjZWVkcy4KKyAqIElmIG5vbnplcm8gdmFsdWUgaXMgcmV0dXJuZWQsIGl0IGlzIHRyZWF0ZWQgYXMgZmF0YWwgZXJyb3IgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgZnVuY3Rpb25zCisgKiBpbW1lZGlhdGVseSByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICoKKyAqIFRvIHNldCB0aGlzIGNhbGxiYWNrIHRvIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzYCwgdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZnJhbWVfcmVjdl9jYWxsYmFjaygpYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2spKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYnkgYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCB3aGVuIGFuIGludmFsaWQgbm9uLURBVEEgZnJhbWUgaXMKKyAqIHJlY2VpdmVkLiAgVGhlIGVycm9yIGlzIGluZGljYXRlZCBieSB0aGUgfGxpYl9lcnJvcl9jb2RlfCwgd2hpY2ggaXMKKyAqIG9uZSBvZiB0aGUgdmFsdWVzIGRlZmluZWQgaW4gOnR5cGU6YG5naHR0cDJfZXJyb3JgLiAgV2hlbiB0aGlzCisgKiBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkLCB0aGUgbGlicmFyeSBhdXRvbWF0aWNhbGx5IHN1Ym1pdHMKKyAqIGVpdGhlciBSU1RfU1RSRUFNIG9yIEdPQVdBWSBmcmFtZS4gIFRoZSB8dXNlcl9kYXRhfCBwb2ludGVyIGlzIHRoZQorICogdGhpcmQgYXJndW1lbnQgcGFzc2VkIGluIHRvIHRoZSBjYWxsIHRvCisgKiBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAgb3IgYG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3KClgLgorICoKKyAqIElmIGZyYW1lIGlzIEhFQURFUlMgb3IgUFVTSF9QUk9NSVNFLCB0aGUgYGBudmFgYCBhbmQgYGBudmxlbmBgCisgKiBtZW1iZXIgb2YgdGhlaXIgZGF0YSBzdHJ1Y3R1cmUgYXJlIGFsd2F5cyBgYE5VTExgYCBhbmQgMAorICogcmVzcGVjdGl2ZWx5LgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIDAgaWYgaXQgc3VjY2VlZHMuCisgKiBJZiBub256ZXJvIGlzIHJldHVybmVkLCBpdCBpcyB0cmVhdGVkIGFzIGZhdGFsIGVycm9yIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIGZ1bmN0aW9ucworICogaW1tZWRpYXRlbHkgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjaygpYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjaykoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwgaW50IGxpYl9lcnJvcl9jb2RlLAorICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgY2h1bmsgb2YgZGF0YSBpbiBEQVRBIGZyYW1lIGlzCisgKiByZWNlaXZlZC4gIFRoZSB8c3RyZWFtX2lkfCBpcyB0aGUgc3RyZWFtIElEIHRoaXMgREFUQSBmcmFtZSBiZWxvbmdzCisgKiB0by4gIFRoZSB8ZmxhZ3N8IGlzIHRoZSBmbGFncyBvZiBEQVRBIGZyYW1lIHdoaWNoIHRoaXMgZGF0YSBjaHVuaworICogaXMgY29udGFpbmVkLiAgYGAoZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkgIT0gMGBgIGRvZXMgbm90CisgKiBuZWNlc3NhcmlseSBtZWFuIHRoaXMgY2h1bmsgb2YgZGF0YSBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHN0cmVhbS4KKyAqIFlvdSBzaG91bGQgdXNlIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgIHRvIGtub3cgYWxsCisgKiBkYXRhIGZyYW1lcyBhcmUgcmVjZWl2ZWQuICBUaGUgfHVzZXJfZGF0YXwgcG9pbnRlciBpcyB0aGUgdGhpcmQKKyAqIGFyZ3VtZW50IHBhc3NlZCBpbiB0byB0aGUgY2FsbCB0byBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAgb3IKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBJZiB0aGUgYXBwbGljYXRpb24gdXNlcyBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgLCBpdCBjYW4gcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfUEFVU0VgIHRvIG1ha2UgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYAorICogcmV0dXJuIHdpdGhvdXQgcHJvY2Vzc2luZyBmdXJ0aGVyIGlucHV0IGJ5dGVzLiAgVGhlIG1lbW9yeSBieQorICogcG9pbnRlZCBieSB0aGUgfGRhdGF8IGlzIHJldGFpbmVkIHVudGlsCisgKiBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIG9yIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCBpcyBjYWxsZWQuCisgKiBUaGUgYXBwbGljYXRpb24gbXVzdCByZXRhaW4gdGhlIGlucHV0IGJ5dGVzIHdoaWNoIHdhcyB1c2VkIHRvCisgKiBwcm9kdWNlIHRoZSB8ZGF0YXwgcGFyYW1ldGVyLCBiZWNhdXNlIGl0IG1heSByZWZlciB0byB0aGUgbWVtb3J5CisgKiByZWdpb24gaW5jbHVkZWQgaW4gdGhlIGlucHV0IGJ5dGVzLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIDAgaWYgaXQgc3VjY2VlZHMuCisgKiBJZiBub256ZXJvIGlzIHJldHVybmVkLCBpdCBpcyB0cmVhdGVkIGFzIGZhdGFsIGVycm9yLCBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCBhbmQgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCBmdW5jdGlvbnMKKyAqIGltbWVkaWF0ZWx5IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuCisgKgorICogVG8gc2V0IHRoaXMgY2FsbGJhY2sgdG8gOnR5cGU6YG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NgLCB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2soKWAuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9vbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2spKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQganVzdCBiZWZvcmUgdGhlIG5vbi1EQVRBIGZyYW1lIHxmcmFtZXwgaXMKKyAqIHNlbnQuICBUaGUgfHVzZXJfZGF0YXwgcG9pbnRlciBpcyB0aGUgdGhpcmQgYXJndW1lbnQgcGFzc2VkIGluIHRvCisgKiB0aGUgY2FsbCB0byBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAgb3IKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiAwIGlmIGl0IHN1Y2NlZWRzLgorICogSXQgY2FuIGFsc28gcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQU5DRUxgIHRvIGNhbmNlbCB0aGUKKyAqIHRyYW5zbWlzc2lvbiBvZiB0aGUgZ2l2ZW4gZnJhbWUuCisgKgorICogSWYgdGhlcmUgaXMgYSBmYXRhbCBlcnJvciB3aGlsZSBleGVjdXRpbmcgdGhpcyBjYWxsYmFjaywgdGhlCisgKiBpbXBsZW1lbnRhdGlvbiBzaG91bGQgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYCwKKyAqIHdoaWNoIG1ha2VzIGBuZ2h0dHAyX3Nlc3Npb25fc2VuZCgpYCBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQoKWAgZnVuY3Rpb25zIGltbWVkaWF0ZWx5IHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICoKKyAqIElmIHRoZSBvdGhlciB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgaXMgdHJlYXRlZCBhcyBpZgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgIGlzIHJldHVybmVkLiAgQnV0IHRoZQorICogaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCByZWx5IG9uIHRoaXMgc2luY2UgdGhlIGxpYnJhcnkgbWF5IGRlZmluZQorICogbmV3IHJldHVybiB2YWx1ZSB0byBleHRlbmQgaXRzIGNhcGFiaWxpdHkuCisgKgorICogVG8gc2V0IHRoaXMgY2FsbGJhY2sgdG8gOnR5cGU6YG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NgLCB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjaygpYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX2JlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgdGhlIGZyYW1lIHxmcmFtZXwgaXMgc2VudC4gIFRoZQorICogfHVzZXJfZGF0YXwgcG9pbnRlciBpcyB0aGUgdGhpcmQgYXJndW1lbnQgcGFzc2VkIGluIHRvIHRoZSBjYWxsIHRvCisgKiBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAgb3IgYG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3KClgLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIDAgaWYgaXQgc3VjY2VlZHMuCisgKiBJZiBub256ZXJvIGlzIHJldHVybmVkLCBpdCBpcyB0cmVhdGVkIGFzIGZhdGFsIGVycm9yIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl9zZW5kKClgIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kKClgIGZ1bmN0aW9ucworICogaW1tZWRpYXRlbHkgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ZyYW1lX3NlbmRfY2FsbGJhY2soKWAuCisgKi8KK3R5cGVkZWYgaW50ICgqbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGFmdGVyIHRoZSBub24tREFUQSBmcmFtZSB8ZnJhbWV8IGlzIG5vdAorICogc2VudCBiZWNhdXNlIG9mIHRoZSBlcnJvci4gIFRoZSBlcnJvciBpcyBpbmRpY2F0ZWQgYnkgdGhlCisgKiB8bGliX2Vycm9yX2NvZGV8LCB3aGljaCBpcyBvbmUgb2YgdGhlIHZhbHVlcyBkZWZpbmVkIGluCisgKiA6dHlwZTpgbmdodHRwMl9lcnJvcmAuICBUaGUgfHVzZXJfZGF0YXwgcG9pbnRlciBpcyB0aGUgdGhpcmQKKyAqIGFyZ3VtZW50IHBhc3NlZCBpbiB0byB0aGUgY2FsbCB0byBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAgb3IKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiAwIGlmIGl0IHN1Y2NlZWRzLgorICogSWYgbm9uemVybyBpcyByZXR1cm5lZCwgaXQgaXMgdHJlYXRlZCBhcyBmYXRhbCBlcnJvciBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VuZCgpYCBhbmQgYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCBmdW5jdGlvbnMKKyAqIGltbWVkaWF0ZWx5IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuCisgKgorICogYG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3VzZXJfZGF0YSgpYCBjYW4gYmUgdXNlZCB0byBnZXQKKyAqIGFzc29jaWF0ZWQgZGF0YS4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrKClgLgorICovCit0eXBlZGVmIGludCAoKm5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2spKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaWJfZXJyb3JfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIHN0cmVhbSB8c3RyZWFtX2lkfCBpcyBjbG9zZWQuCisgKiBUaGUgcmVhc29uIG9mIGNsb3N1cmUgaXMgaW5kaWNhdGVkIGJ5IHRoZSB8ZXJyb3JfY29kZXwuICBUaGUKKyAqIHxlcnJvcl9jb2RlfCBpcyB1c3VhbGx5IG9uZSBvZiA6ZW51bTpgbmdodHRwMl9lcnJvcl9jb2RlYCwgYnV0IHRoYXQKKyAqIGlzIG5vdCBndWFyYW50ZWVkLiAgVGhlIHN0cmVhbV91c2VyX2RhdGEsIHdoaWNoIHdhcyBzcGVjaWZpZWQgaW4KKyAqIGBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0KClgIG9yIGBuZ2h0dHAyX3N1Ym1pdF9oZWFkZXJzKClgLCBpcyBzdGlsbAorICogYXZhaWxhYmxlIGluIHRoaXMgZnVuY3Rpb24uICBUaGUgfHVzZXJfZGF0YXwgcG9pbnRlciBpcyB0aGUgdGhpcmQKKyAqIGFyZ3VtZW50IHBhc3NlZCBpbiB0byB0aGUgY2FsbCB0byBgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcoKWAgb3IKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGZvciBhIHN0cmVhbSBpbiByZXNlcnZlZCBzdGF0ZS4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiAwIGlmIGl0IHN1Y2NlZWRzLgorICogSWYgbm9uemVybyBpcyByZXR1cm5lZCwgaXQgaXMgdHJlYXRlZCBhcyBmYXRhbCBlcnJvciBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCwgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCwKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VuZCgpYCwgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQoKWAKKyAqIGZ1bmN0aW9ucyBpbW1lZGlhdGVseSByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICoKKyAqIFRvIHNldCB0aGlzIGNhbGxiYWNrIHRvIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzYCwgdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrKClgLgorICovCit0eXBlZGVmIGludCAoKm5naHR0cDJfb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgcmVjZXB0aW9uIG9mIGhlYWRlciBibG9jayBpbgorICogSEVBREVSUyBvciBQVVNIX1BST01JU0UgaXMgc3RhcnRlZC4gIEVhY2ggaGVhZGVyIG5hbWUvdmFsdWUgcGFpcgorICogd2lsbCBiZSBlbWl0dGVkIGJ5IDp0eXBlOmBuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFja2AuCisgKgorICogVGhlIGBgZnJhbWUtPmhkLmZsYWdzYGAgbWF5IG5vdCBoYXZlCisgKiA6ZW51bTpgTkdIVFRQMl9GTEFHX0VORF9IRUFERVJTYCBmbGFnIHNldCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgb25lCisgKiBvciBtb3JlIENPTlRJTlVBVElPTiBmcmFtZXMgYXJlIGludm9sdmVkLiAgQnV0IHRoZSBhcHBsaWNhdGlvbiBkb2VzCisgKiBub3QgbmVlZCB0byBjYXJlIGFib3V0IHRoYXQgYmVjYXVzZSB0aGUgaGVhZGVyIG5hbWUvdmFsdWUgcGFpcnMgYXJlCisgKiBlbWl0dGVkIHRyYW5zcGFyZW50bHkgcmVnYXJkbGVzcyBvZiBDT05USU5VQVRJT04gZnJhbWVzLgorICoKKyAqIFRoZSBzZXJ2ZXIgYXBwbGljYXRpb25zIHByb2JhYmx5IGNyZWF0ZSBhbiBvYmplY3QgdG8gc3RvcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IG5ldyBzdHJlYW0gaWYgYGBmcmFtZS0+aGQudHlwZSA9PQorICogTkdIVFRQMl9IRUFERVJTYGAgYW5kIGBgZnJhbWUtPmhlYWRlcnMuY2F0ID09CisgKiBOR0hUVFAyX0hDQVRfUkVRVUVTVGBgLiAgSWYgfHNlc3Npb258IGlzIGNvbmZpZ3VyZWQgYXMgc2VydmVyIHNpZGUsCisgKiBgYGZyYW1lLT5oZWFkZXJzLmNhdGBgIGlzIGVpdGhlciBgYE5HSFRUUDJfSENBVF9SRVFVRVNUYGAKKyAqIGNvbnRhaW5pbmcgcmVxdWVzdCBoZWFkZXJzIG9yIGBgTkdIVFRQMl9IQ0FUX0hFQURFUlNgYCBjb250YWluaW5nCisgKiB0cmFpbGVyIGZpZWxkcyBhbmQgbmV2ZXIgZ2V0IFBVU0hfUFJPTUlTRSBpbiB0aGlzIGNhbGxiYWNrLgorICoKKyAqIEZvciB0aGUgY2xpZW50IGFwcGxpY2F0aW9ucywgYGBmcmFtZS0+aGQudHlwZWBgIGlzIGVpdGhlcgorICogYGBOR0hUVFAyX0hFQURFUlNgYCBvciBgYE5HSFRUUDJfUFVTSF9QUk9NSVNFYGAuICBJbiBjYXNlIG9mCisgKiBgYE5HSFRUUDJfSEVBREVSU2BgLCBgYGZyYW1lLT5oZWFkZXJzLmNhdCA9PQorICogTkdIVFRQMl9IQ0FUX1JFU1BPTlNFYGAgbWVhbnMgdGhhdCBpdCBpcyB0aGUgZmlyc3QgcmVzcG9uc2UKKyAqIGhlYWRlcnMsIGJ1dCBpdCBtYXkgYmUgbm9uLWZpbmFsIHJlc3BvbnNlIHdoaWNoIGlzIGluZGljYXRlZCBieSAxeHgKKyAqIHN0YXR1cyBjb2RlLiAgSW4gdGhpcyBjYXNlLCB0aGVyZSBtYXkgYmUgemVybyBvciBtb3JlIEhFQURFUlMgZnJhbWUKKyAqIHdpdGggYGBmcmFtZS0+aGVhZGVycy5jYXQgPT0gTkdIVFRQMl9IQ0FUX0hFQURFUlNgYCB3aGljaCBoYXMKKyAqIG5vbi1maW5hbCByZXNwb25zZSBjb2RlIGFuZCBmaW5hbGx5IGNsaWVudCBnZXRzIGV4YWN0bHkgb25lIEhFQURFUlMKKyAqIGZyYW1lIHdpdGggYGBmcmFtZS0+aGVhZGVycy5jYXQgPT0gTkdIVFRQMl9IQ0FUX0hFQURFUlNgYAorICogY29udGFpbmluZyBmaW5hbCByZXNwb25zZSBoZWFkZXJzIChub24tMXh4IHN0YXR1cyBjb2RlKS4gIFRoZQorICogdHJhaWxlciBmaWVsZHMgYWxzbyBoYXMgYGBmcmFtZS0+aGVhZGVycy5jYXQgPT0KKyAqIE5HSFRUUDJfSENBVF9IRUFERVJTYGAgd2hpY2ggZG9lcyBub3QgY29udGFpbiBhbnkgc3RhdHVzIGNvZGUuCisgKgorICogUmV0dXJuaW5nIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYCB3aWxsIGNsb3NlCisgKiB0aGUgc3RyZWFtIChwcm9taXNlZCBzdHJlYW0gaWYgZnJhbWUgaXMgUFVTSF9QUk9NSVNFKSBieSBpc3N1aW5nCisgKiBSU1RfU1RSRUFNIHdpdGggOmVudW06YE5HSFRUUDJfSU5URVJOQUxfRVJST1JgLiAgSW4gdGhpcyBjYXNlLAorICogOnR5cGU6YG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrYCBhbmQKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgIHdpbGwgbm90IGJlIGludm9rZWQuICBJZiBhCisgKiBkaWZmZXJlbnQgZXJyb3IgY29kZSBpcyBkZXNpcmFibGUsIHVzZQorICogYG5naHR0cDJfc3VibWl0X3JzdF9zdHJlYW0oKWAgd2l0aCBhIGRlc2lyZWQgZXJyb3IgY29kZSBhbmQgdGhlbgorICogcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYC4gIEFnYWluLCB1c2UKKyAqIGBgZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWRgYCBhcyBzdHJlYW1faWQgcGFyYW1ldGVyCisgKiBpbiBgbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbSgpYCBpZiBmcmFtZSBpcyBQVVNIX1BST01JU0UuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBpZiBpdCBzdWNjZWVkcy4KKyAqIEl0IGNhbiByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkVgIHRvCisgKiByZXNldCB0aGUgc3RyZWFtIChwcm9taXNlZCBzdHJlYW0gaWYgZnJhbWUgaXMgUFVTSF9QUk9NSVNFKS4gIEZvcgorICogY3JpdGljYWwgZXJyb3JzLCBpdCBtdXN0IHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgSWYgdGhlIG90aGVyIHZhbHVlIGlzCisgKiByZXR1cm5lZCwgaXQgaXMgdHJlYXRlZCBhcyBpZiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAKKyAqIGlzIHJldHVybmVkLiAgSWYgOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgIGlzIHJldHVybmVkLAorICogYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYCBmdW5jdGlvbiB3aWxsIGltbWVkaWF0ZWx5IHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICoKKyAqIFRvIHNldCB0aGlzIGNhbGxiYWNrIHRvIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzYCwgdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fYmVnaW5faGVhZGVyc19jYWxsYmFjaygpYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2spKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIgaXMgcmVjZWl2ZWQKKyAqIGZvciB0aGUgfGZyYW1lfC4gIFRoZSB8bmFtZXwgb2YgbGVuZ3RoIHxuYW1lbGVufCBpcyBoZWFkZXIgbmFtZS4KKyAqIFRoZSB8dmFsdWV8IG9mIGxlbmd0aCB8dmFsdWVsZW58IGlzIGhlYWRlciB2YWx1ZS4gIFRoZSB8ZmxhZ3N8IGlzCisgKiBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIDp0eXBlOmBuZ2h0dHAyX252X2ZsYWdgLgorICoKKyAqIElmIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fSU5ERVhgIGlzIHNldCBpbiB8ZmxhZ3N8LCB0aGUgcmVjZWl2ZXIKKyAqIG11c3Qgbm90IGluZGV4IHRoaXMgbmFtZS92YWx1ZSBwYWlyIHdoZW4gZm9yd2FyZGluZyBpdCB0byB0aGUgbmV4dAorICogaG9wLiAgTW9yZSBzcGVjaWZpY2FsbHksICJMaXRlcmFsIEhlYWRlciBGaWVsZCBuZXZlciBJbmRleGVkIgorICogcmVwcmVzZW50YXRpb24gbXVzdCBiZSB1c2VkIGluIEhQQUNLIGVuY29kaW5nLgorICoKKyAqIFdoZW4gdGhpcyBjYWxsYmFjayBpcyBpbnZva2VkLCBgYGZyYW1lLT5oZC50eXBlYGAgaXMgZWl0aGVyCisgKiA6ZW51bTpgTkdIVFRQMl9IRUFERVJTYCBvciA6ZW51bTpgTkdIVFRQMl9QVVNIX1BST01JU0VgLiAgQWZ0ZXIgYWxsCisgKiBoZWFkZXIgbmFtZS92YWx1ZSBwYWlycyBhcmUgcHJvY2Vzc2VkIHdpdGggdGhpcyBjYWxsYmFjaywgYW5kIG5vCisgKiBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZCwgOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2AKKyAqIHdpbGwgYmUgaW52b2tlZC4gIElmIHRoZXJlIGlzIGFuIGVycm9yIGluIGRlY29tcHJlc3Npb24sCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrYCBmb3IgdGhlIHxmcmFtZXwgd2lsbCBub3QgYmUKKyAqIGludm9rZWQuCisgKgorICogQm90aCB8bmFtZXwgYW5kIHx2YWx1ZXwgYXJlIGd1YXJhbnRlZWQgdG8gYmUgTlVMTC10ZXJtaW5hdGVkLiAgVGhlCisgKiB8bmFtZWxlbnwgYW5kIHx2YWx1ZWxlbnwgZG8gbm90IGluY2x1ZGUgdGVybWluYWwgTlVMTC4gIElmCisgKiBgbmdodHRwMl9vcHRpb25fc2V0X25vX2h0dHBfbWVzc2FnaW5nKClgIGlzIHVzZWQgd2l0aCBub256ZXJvCisgKiB2YWx1ZSwgTlVMTCBjaGFyYWN0ZXIgbWF5IGJlIGluY2x1ZGVkIGluIHxuYW1lfCBvciB8dmFsdWV8IGJlZm9yZQorICogdGVybWluYXRpbmcgTlVMTC4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHVubGVzcyBgbmdodHRwMl9vcHRpb25fc2V0X25vX2h0dHBfbWVzc2FnaW5nKClgIGlzCisgKiB1c2VkLCBuZ2h0dHAyIGxpYnJhcnkgZG9lcyBwZXJmb3JtIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgfG5hbWV8CisgKiBhbmQgdGhlIHx2YWx1ZXwgdXNpbmcgYG5naHR0cDJfY2hlY2tfaGVhZGVyX25hbWUoKWAgYW5kCisgKiBgbmdodHRwMl9jaGVja19oZWFkZXJfdmFsdWUoKWAuICBJbiBhZGRpdGlvbiB0byB0aGlzLCBuZ2h0dHAyCisgKiBwZXJmb3JtcyB2YWxpZGF0aW9uIGJhc2VkIG9uIEhUVFAgTWVzc2FnaW5nIHJ1bGUsIHdoaWNoIGlzIGJyaWVmbHkKKyAqIGV4cGxhaW5lZCBpbiA6cmVmOmBodHRwLW1lc3NhZ2luZ2Agc2VjdGlvbi4KKyAqCisgKiBJZiB0aGUgYXBwbGljYXRpb24gdXNlcyBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgLCBpdCBjYW4gcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfUEFVU0VgIHRvIG1ha2UgYG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdigpYAorICogcmV0dXJuIHdpdGhvdXQgcHJvY2Vzc2luZyBmdXJ0aGVyIGlucHV0IGJ5dGVzLiAgVGhlIG1lbW9yeSBwb2ludGVkCisgKiBieSB8ZnJhbWV8LCB8bmFtZXwgYW5kIHx2YWx1ZXwgcGFyYW1ldGVycyBhcmUgcmV0YWluZWQgdW50aWwKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgb3IgYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGlzIGNhbGxlZC4KKyAqIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHJldGFpbiB0aGUgaW5wdXQgYnl0ZXMgd2hpY2ggd2FzIHVzZWQgdG8KKyAqIHByb2R1Y2UgdGhlc2UgcGFyYW1ldGVycywgYmVjYXVzZSBpdCBtYXkgcmVmZXIgdG8gdGhlIG1lbW9yeSByZWdpb24KKyAqIGluY2x1ZGVkIGluIHRoZSBpbnB1dCBieXRlcy4KKyAqCisgKiBSZXR1cm5pbmcgOmVudW06YE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkVgIHdpbGwgY2xvc2UKKyAqIHRoZSBzdHJlYW0gKHByb21pc2VkIHN0cmVhbSBpZiBmcmFtZSBpcyBQVVNIX1BST01JU0UpIGJ5IGlzc3VpbmcKKyAqIFJTVF9TVFJFQU0gd2l0aCA6ZW51bTpgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUmAuICBJbiB0aGlzIGNhc2UsCisgKiA6dHlwZTpgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2tgIGFuZAorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2Agd2lsbCBub3QgYmUgaW52b2tlZC4gIElmIGEKKyAqIGRpZmZlcmVudCBlcnJvciBjb2RlIGlzIGRlc2lyYWJsZSwgdXNlCisgKiBgbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbSgpYCB3aXRoIGEgZGVzaXJlZCBlcnJvciBjb2RlIGFuZCB0aGVuCisgKiByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkVgLiAgQWdhaW4sIHVzZQorICogYGBmcmFtZS0+cHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZGBgIGFzIHN0cmVhbV9pZCBwYXJhbWV0ZXIKKyAqIGluIGBuZ2h0dHAyX3N1Ym1pdF9yc3Rfc3RyZWFtKClgIGlmIGZyYW1lIGlzIFBVU0hfUFJPTUlTRS4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiAwIGlmIGl0IHN1Y2NlZWRzLgorICogSXQgbWF5IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfUEFVU0VgIG9yCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRWAuICBGb3Igb3RoZXIgY3JpdGljYWwKKyAqIGZhaWx1cmVzLCBpdCBtdXN0IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBJZgorICogdGhlIG90aGVyIG5vbnplcm8gdmFsdWUgaXMgcmV0dXJuZWQsIGl0IGlzIHRyZWF0ZWQgYXMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIElmCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAgaXMgcmV0dXJuZWQsCisgKiBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgZnVuY3Rpb25zCisgKiBpbW1lZGlhdGVseSByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICoKKyAqIFRvIHNldCB0aGlzIGNhbGxiYWNrIHRvIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzYCwgdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrKClgLgorICoKKyAqIC4uIHdhcm5pbmc6OgorICoKKyAqICAgQXBwbGljYXRpb24gc2hvdWxkIHByb3Blcmx5IGxpbWl0IHRoZSB0b3RhbCBidWZmZXIgc2l6ZSB0byBzdG9yZQorICogICBpbmNvbWluZyBoZWFkZXIgZmllbGRzLiAgV2l0aG91dCBpdCwgcGVlciBtYXkgc2VuZCBsYXJnZSBudW1iZXIKKyAqICAgb2YgaGVhZGVyIGZpZWxkcyBvciBsYXJnZSBoZWFkZXIgZmllbGRzIHRvIGNhdXNlIG91dCBvZiBtZW1vcnkgaW4KKyAqICAgbG9jYWwgZW5kcG9pbnQuICBEdWUgdG8gaG93IEhQQUNLIHdvcmtzLCBwZWVyIGNhbiBkbyB0aGlzCisgKiAgIGVmZmVjdGl2ZWx5IHdpdGhvdXQgdXNpbmcgbXVjaCBtZW1vcnkgb24gdGhlaXIgb3duLgorICovCit0eXBlZGVmIGludCAoKm5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgaGVhZGVyIG5hbWUvdmFsdWUgcGFpciBpcyByZWNlaXZlZAorICogZm9yIHRoZSB8ZnJhbWV8LiAgVGhlIHxuYW1lfCBpcyBoZWFkZXIgbmFtZS4gIFRoZSB8dmFsdWV8IGlzIGhlYWRlcgorICogdmFsdWUuICBUaGUgfGZsYWdzfCBpcyBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgKiA6dHlwZTpgbmdodHRwMl9udl9mbGFnYC4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIGJlaGF2ZXMgbGlrZSA6dHlwZTpgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2tgLAorICogZXhjZXB0IHRoYXQgfG5hbWV8IGFuZCB8dmFsdWV8IGFyZSBzdG9yZWQgaW4gcmVmZXJlbmNlIGNvdW50ZWQKKyAqIGJ1ZmZlci4gIElmIGFwcGxpY2F0aW9uIHdpc2hlcyB0byBrZWVwIHRoZXNlIHJlZmVyZW5jZXMgd2l0aG91dAorICogY29weWluZyB0aGVtLCB1c2UgYG5naHR0cDJfcmNidWZfaW5jcmVmKClgIHRvIGluY3JlbWVudCB0aGVpcgorICogcmVmZXJlbmNlIGNvdW50LiAgSXQgaXMgdGhlIGFwcGxpY2F0aW9uJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2FsbAorICogYG5naHR0cDJfcmNidWZfZGVjcmVmKClgIGlmIHRoZXkgY2FsbGVkIGBuZ2h0dHAyX3JjYnVmX2luY3JlZigpYCBzbworICogYXMgbm90IHRvIGxlYWsgbWVtb3J5LiAgSWYgdGhlIHxzZXNzaW9ufCBpcyBjcmVhdGVkIGJ5CisgKiBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXczKClgIG9yIGBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldzMoKWAsCisgKiB0aGUgZnVuY3Rpb24gdG8gZnJlZSBtZW1vcnkgaXMgdGhlIG9uZSBiZWxvbmdzIHRvIHRoZSBtZW0KKyAqIHBhcmFtZXRlci4gIEFzIGxvbmcgYXMgdGhpcyBmcmVlIGZ1bmN0aW9uIGFsaXZlcywgfG5hbWV8IGFuZAorICogfHZhbHVlfCBjYW4gbGl2ZSBhZnRlciB8c2Vzc2lvbnwgd2FzIGRlc3Ryb3llZC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFjazIpKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3JjYnVmICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfcmNidWYgKnZhbHVlLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgaW52YWxpZCBoZWFkZXIgbmFtZS92YWx1ZSBwYWlyIGlzCisgKiByZWNlaXZlZCBmb3IgdGhlIHxmcmFtZXwuCisgKgorICogVGhlIHBhcmFtZXRlciBhbmQgYmVoYXZpb3VyIGFyZSBzaW1pbGFyIHRvCisgKiA6dHlwZTpgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2tgLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGlzCisgKiBjYWxsYmFjayBpcyBvbmx5IGludm9rZWQgd2hlbiBhIGludmFsaWQgaGVhZGVyIG5hbWUvdmFsdWUgcGFpciBpcworICogcmVjZWl2ZWQgd2hpY2ggaXMgdHJlYXRlZCBhcyBzdHJlYW0gZXJyb3IgaWYgdGhpcyBjYWxsYmFjayBpcyBub3QKKyAqIHNldC4gIE9ubHkgaW52YWxpZCByZWd1bGFyIGhlYWRlciBmaWVsZCBhcmUgcGFzc2VkIHRvIHRoaXMKKyAqIGNhbGxiYWNrLiAgSW4gb3RoZXIgd29yZHMsIGludmFsaWQgcHNldWRvIGhlYWRlciBmaWVsZCBpcyBub3QKKyAqIHBhc3NlZCB0byB0aGlzIGNhbGxiYWNrLiAgQWxzbyBoZWFkZXIgZmllbGRzIHdoaWNoIGluY2x1ZGVzIHVwcGVyCisgKiBjYXNlZCBsYXR0ZXIgYXJlIGFsc28gdHJlYXRlZCBhcyBlcnJvciB3aXRob3V0IHBhc3NpbmcgdGhlbSB0byB0aGlzCisgKiBjYWxsYmFjay4KKyAqCisgKiBUaGlzIGNhbGxiYWNrIGlzIG9ubHkgY29uc2lkZXJlZCBpZiBIVFRQIG1lc3NhZ2luZyB2YWxpZGF0aW9uIGlzCisgKiB0dXJuZWQgb24gKHdoaWNoIGlzIG9uIGJ5IGRlZmF1bHQsIHNlZQorICogYG5naHR0cDJfb3B0aW9uX3NldF9ub19odHRwX21lc3NhZ2luZygpYCkuCisgKgorICogV2l0aCB0aGlzIGNhbGxiYWNrLCBhcHBsaWNhdGlvbiBpbnNwZWN0cyB0aGUgaW5jb21pbmcgaW52YWxpZAorICogZmllbGQsIGFuZCBpdCBhbHNvIGNhbiByZXNldCBzdHJlYW0gZnJvbSB0aGlzIGNhbGxiYWNrIGJ5IHJldHVybmluZworICogOmVudW06YE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkVgLiAgQnkgZGVmYXVsdCwgdGhlCisgKiBlcnJvciBjb2RlIGlzIDplbnVtOmBOR0hUVFAyX1BST1RPQ09MX0VSUk9SYC4gIFRvIGNoYW5nZSB0aGUgZXJyb3IKKyAqIGNvZGUsIGNhbGwgYG5naHR0cDJfc3VibWl0X3JzdF9zdHJlYW0oKWAgd2l0aCB0aGUgZXJyb3IgY29kZSBvZgorICogY2hvaWNlIGluIGFkZGl0aW9uIHRvIHJldHVybmluZworICogOmVudW06YE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkVgLgorICoKKyAqIElmIDAgaXMgcmV0dXJuZWQsIHRoZSBoZWFkZXIgZmllbGQgaXMgaWdub3JlZCwgYW5kIHRoZSBzdHJlYW0gaXMKKyAqIG5vdCByZXNldC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrKSgKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGNvbnN0IG5naHR0cDJfZnJhbWUgKmZyYW1lLCBjb25zdCB1aW50OF90ICpuYW1lLAorICAgIHNpemVfdCBuYW1lbGVuLCBjb25zdCB1aW50OF90ICp2YWx1ZSwgc2l6ZV90IHZhbHVlbGVuLCB1aW50OF90IGZsYWdzLAorICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgaW52YWxpZCBoZWFkZXIgbmFtZS92YWx1ZSBwYWlyIGlzCisgKiByZWNlaXZlZCBmb3IgdGhlIHxmcmFtZXwuCisgKgorICogVGhlIHBhcmFtZXRlciBhbmQgYmVoYXZpb3VyIGFyZSBzaW1pbGFyIHRvCisgKiA6dHlwZTpgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2syYC4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhpcworICogY2FsbGJhY2sgaXMgb25seSBpbnZva2VkIHdoZW4gYSBpbnZhbGlkIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIgaXMKKyAqIHJlY2VpdmVkIHdoaWNoIGlzIHNpbGVudGx5IGlnbm9yZWQgaWYgdGhpcyBjYWxsYmFjayBpcyBub3Qgc2V0LgorICogT25seSBpbnZhbGlkIHJlZ3VsYXIgaGVhZGVyIGZpZWxkIGFyZSBwYXNzZWQgdG8gdGhpcyBjYWxsYmFjay4gIEluCisgKiBvdGhlciB3b3JkcywgaW52YWxpZCBwc2V1ZG8gaGVhZGVyIGZpZWxkIGlzIG5vdCBwYXNzZWQgdG8gdGhpcworICogY2FsbGJhY2suICBBbHNvIGhlYWRlciBmaWVsZHMgd2hpY2ggaW5jbHVkZXMgdXBwZXIgY2FzZWQgbGF0dGVyIGFyZQorICogYWxzbyB0cmVhdGVkIGFzIGVycm9yIHdpdGhvdXQgcGFzc2luZyB0aGVtIHRvIHRoaXMgY2FsbGJhY2suCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBvbmx5IGNvbnNpZGVyZWQgaWYgSFRUUCBtZXNzYWdpbmcgdmFsaWRhdGlvbiBpcworICogdHVybmVkIG9uICh3aGljaCBpcyBvbiBieSBkZWZhdWx0LCBzZWUKKyAqIGBuZ2h0dHAyX29wdGlvbl9zZXRfbm9faHR0cF9tZXNzYWdpbmcoKWApLgorICoKKyAqIFdpdGggdGhpcyBjYWxsYmFjaywgYXBwbGljYXRpb24gaW5zcGVjdHMgdGhlIGluY29taW5nIGludmFsaWQKKyAqIGZpZWxkLCBhbmQgaXQgYWxzbyBjYW4gcmVzZXQgc3RyZWFtIGZyb20gdGhpcyBjYWxsYmFjayBieSByZXR1cm5pbmcKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYC4gIEJ5IGRlZmF1bHQsIHRoZQorICogZXJyb3IgY29kZSBpcyA6ZW51bTpgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUmAuICBUbyBjaGFuZ2UgdGhlIGVycm9yCisgKiBjb2RlLCBjYWxsIGBuZ2h0dHAyX3N1Ym1pdF9yc3Rfc3RyZWFtKClgIHdpdGggdGhlIGVycm9yIGNvZGUgb2YKKyAqIGNob2ljZSBpbiBhZGRpdGlvbiB0byByZXR1cm5pbmcKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrMikoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwgbmdodHRwMl9yY2J1ZiAqbmFtZSwKKyAgICBuZ2h0dHAyX3JjYnVmICp2YWx1ZSwgdWludDhfdCBmbGFncywgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIGxpYnJhcnkgYXNrcyBhcHBsaWNhdGlvbiBob3cKKyAqIG1hbnkgcGFkZGluZyBieXRlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlCisgKiB8ZnJhbWV8LiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgY2hvb3NlIHRoZSB0b3RhbCBsZW5ndGggb2YgcGF5bG9hZAorICogaW5jbHVkaW5nIHBhZGRlZCBieXRlcyBpbiByYW5nZSBbZnJhbWUtPmhkLmxlbmd0aCwgbWF4X3BheWxvYWRsZW5dLAorICogaW5jbHVzaXZlLiAgQ2hvb3NpbmcgbnVtYmVyIG5vdCBpbiB0aGlzIHJhbmdlIHdpbGwgYmUgdHJlYXRlZCBhcworICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgUmV0dXJuaW5nCisgKiBgYGZyYW1lLT5oZC5sZW5ndGhgYCBtZWFucyBubyBwYWRkaW5nIGlzIGFkZGVkLiAgUmV0dXJuaW5nCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAgd2lsbCBtYWtlCisgKiBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQoKWAgZnVuY3Rpb25zCisgKiBpbW1lZGlhdGVseSByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICoKKyAqIFRvIHNldCB0aGlzIGNhbGxiYWNrIHRvIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzYCwgdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2soKWAuCisgKi8KK3R5cGVkZWYgc3NpemVfdCAoKm5naHR0cDJfc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2spKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9wYXlsb2FkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gbGlicmFyeSB3YW50cyB0byBnZXQgbWF4IGxlbmd0aCBvZgorICogZGF0YSB0byBzZW5kIGRhdGEgdG8gdGhlIHJlbW90ZSBwZWVyLiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMKKyAqIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSB2YWx1ZSBpbiB0aGUgZm9sbG93aW5nIHJhbmdlLiAgWzEsCisgKiBtaW4ofHNlc3Npb25fcmVtb3RlX3dpbmRvd19zaXplfCwgfHN0cmVhbV9yZW1vdGVfd2luZG93X3NpemV8LAorICogfHJlbW90ZV9tYXhfZnJhbWVfc2l6ZXwpXS4gIElmIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHRoaXMgcmFuZ2UgaXMKKyAqIHJldHVybmVkIHRoYW4gdGhlIG1heCBhbGxvdyB2YWx1ZSB3aWxsIGJlIHVzZWQuICBSZXR1cm5pbmcgYSB2YWx1ZQorICogc21hbGxlciB0aGFuIHRoaXMgcmFuZ2UgaXMgdHJlYXRlZCBhcworICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgVGhlIHxmcmFtZV90eXBlfCBpcyBwcm92aWRlZAorICogZm9yIGZ1dHVyZSBleHRlbnNpYmlsaXR5IGFuZCBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIGZyYW1lIChzZWUKKyAqIDp0eXBlOmBuZ2h0dHAyX2ZyYW1lX3R5cGVgKSBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBsZW5ndGggZm9yLgorICogQ3VycmVudGx5IHN1cHBvcnRlZCBmcmFtZSB0eXBlcyBhcmU6IDplbnVtOmBOR0hUVFAyX0RBVEFgLgorICoKKyAqIFRoaXMgY2FsbGJhY2sgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgbGVuZ3RoIGluIGJ5dGVzIGZvciB3aGljaAorICogOnR5cGU6YG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFja2AgaXMgYWxsb3dlZCB0byBzZW5kIHRvIHRoZQorICogcmVtb3RlIGVuZHBvaW50LiAgVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4gIFJldHVybmluZworICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgIHdpbGwgc2lnbmFsIHRoZSBlbnRpcmUgc2Vzc2lvbgorICogZmFpbHVyZS4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2RhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrKClgLgorICovCit0eXBlZGVmIHNzaXplX3QgKCpuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrKSgKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZnJhbWVfdHlwZSwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgaW50MzJfdCBzZXNzaW9uX3JlbW90ZV93aW5kb3dfc2l6ZSwgaW50MzJfdCBzdHJlYW1fcmVtb3RlX3dpbmRvd19zaXplLAorICAgIHVpbnQzMl90IHJlbW90ZV9tYXhfZnJhbWVfc2l6ZSwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYSBmcmFtZSBoZWFkZXIgaXMgcmVjZWl2ZWQuICBUaGUKKyAqIHxoZHwgcG9pbnRzIHRvIHJlY2VpdmVkIGZyYW1lIGhlYWRlci4KKyAqCisgKiBVbmxpa2UgOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2AsIHRoaXMgY2FsbGJhY2sgd2lsbAorICogYWxzbyBiZSBjYWxsZWQgd2hlbiBmcmFtZSBoZWFkZXIgb2YgQ09OVElOVUFUSU9OIGZyYW1lIGlzIHJlY2VpdmVkLgorICoKKyAqIElmIGJvdGggOnR5cGU6YG5naHR0cDJfb25fYmVnaW5fZnJhbWVfY2FsbGJhY2tgIGFuZAorICogOnR5cGU6YG5naHR0cDJfb25fYmVnaW5faGVhZGVyc19jYWxsYmFja2AgYXJlIHNldCBhbmQgSEVBREVSUyBvcgorICogUFVTSF9QUk9NSVNFIGlzIHJlY2VpdmVkLCA6dHlwZTpgbmdodHRwMl9vbl9iZWdpbl9mcmFtZV9jYWxsYmFja2AKKyAqIHdpbGwgYmUgY2FsbGVkIGZpcnN0LgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIDAgaWYgaXQgc3VjY2VlZHMuCisgKiBJZiBub256ZXJvIHZhbHVlIGlzIHJldHVybmVkLCBpdCBpcyB0cmVhdGVkIGFzIGZhdGFsIGVycm9yIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIGZ1bmN0aW9ucworICogaW1tZWRpYXRlbHkgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqCisgKiBUbyBzZXQgdGhpcyBjYWxsYmFjayB0byA6dHlwZTpgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc2AsIHVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrKClgLgorICovCit0eXBlZGVmIGludCAoKm5naHR0cDJfb25fYmVnaW5fZnJhbWVfY2FsbGJhY2spKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9mcmFtZV9oZCAqaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGNodW5rIG9mIGV4dGVuc2lvbiBmcmFtZSBwYXlsb2FkIGlzCisgKiByZWNlaXZlZC4gIFRoZSB8aGR8IHBvaW50cyB0byBmcmFtZSBoZWFkZXIuICBUaGUgcmVjZWl2ZWQKKyAqIGNodW5rIGlzIHxkYXRhfCBvZiBsZW5ndGggfGxlbnwuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBpZiBpdCBzdWNjZWVkcy4KKyAqCisgKiBUbyBhYm9ydCBwcm9jZXNzaW5nIHRoaXMgZXh0ZW5zaW9uIGZyYW1lLCByZXR1cm4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQU5DRUxgLgorICoKKyAqIElmIGZhdGFsIGVycm9yIG9jY3VycmVkLCBhcHBsaWNhdGlvbiBzaG91bGQgcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBJbiB0aGlzIGNhc2UsCisgKiBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgZnVuY3Rpb25zCisgKiBpbW1lZGlhdGVseSByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgSWYgdGhlCisgKiBvdGhlciB2YWx1ZXMgYXJlIHJldHVybmVkLCBjdXJyZW50bHkgdGhleSBhcmUgdHJlYXRlZCBhcworICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICovCit0eXBlZGVmIGludCAoKm5naHR0cDJfb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2spKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgY29uc3QgbmdodHRwMl9mcmFtZV9oZCAqaGQsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAgc2l6ZV90IGxlbiwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gbGlicmFyeSBhc2tzIHRoZSBhcHBsaWNhdGlvbiB0bworICogdW5wYWNrIGV4dGVuc2lvbiBwYXlsb2FkIGZyb20gaXRzIHdpcmUgZm9ybWF0LiAgVGhlIGV4dGVuc2lvbgorICogcGF5bG9hZCBoYXMgYmVlbiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHVzaW5nCisgKiA6dHlwZTpgbmdodHRwMl9vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFja2AuICBUaGUgZnJhbWUgaGVhZGVyCisgKiBpcyBhbHJlYWR5IHVucGFja2VkIGJ5IHRoZSBsaWJyYXJ5IGFuZCBwcm92aWRlZCBhcyB8aGR8LgorICoKKyAqIFRvIHJlY2VpdmUgZXh0ZW5zaW9uIGZyYW1lcywgdGhlIGFwcGxpY2F0aW9uIG11c3QgdGVsbCBkZXNpcmVkCisgKiBleHRlbnNpb24gZnJhbWUgdHlwZSB0byB0aGUgbGlicmFyeSB1c2luZworICogYG5naHR0cDJfb3B0aW9uX3NldF91c2VyX3JlY3ZfZXh0ZW5zaW9uX3R5cGUoKWAuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbWF5IHN0b3JlIHRoZSBwb2ludGVyIHRvIHRoZQorICogY3JlYXRlZCBvYmplY3QgYXMgYSByZXN1bHQgb2YgdW5wYWNraW5nIGluIHwqcGF5bG9hZHwsIGFuZCByZXR1cm5zCisgKiAwLiAgVGhlIHBvaW50ZXIgc3RvcmVkIGluIHwqcGF5bG9hZHwgaXMgb3BhcXVlIHRvIHRoZSBsaWJyYXJ5LCBhbmQKKyAqIHRoZSBsaWJyYXJ5IGRvZXMgbm90IG93biBpdHMgcG9pbnRlci4gIHwqcGF5bG9hZHwgaXMgaW5pdGlhbGl6ZWQgYXMKKyAqIGBgTlVMTGBgLiAgVGhlIHwqcGF5bG9hZHwgaXMgYXZhaWxhYmxlIGFzIGBgZnJhbWUtPmV4dC5wYXlsb2FkYGAgaW4KKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgLiAgVGhlcmVmb3JlIGlmIGFwcGxpY2F0aW9uCisgKiBjYW4gZnJlZSB0aGF0IG1lbW9yeSBpbnNpZGUgOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2AKKyAqIGNhbGxiYWNrLiAgT2YgY291cnNlLCBhcHBsaWNhdGlvbiBoYXMgYSBsaWJlcnR5IG5vdCBvdCB1c2UKKyAqIHwqcGF5bG9hZHwsIGFuZCBkbyBpdHMgb3duIG1lY2hhbmlzbSB0byBwcm9jZXNzIGV4dGVuc2lvbiBmcmFtZXMuCisgKgorICogVG8gYWJvcnQgcHJvY2Vzc2luZyB0aGlzIGV4dGVuc2lvbiBmcmFtZSwgcmV0dXJuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FOQ0VMYC4KKyAqCisgKiBJZiBmYXRhbCBlcnJvciBvY2N1cnJlZCwgYXBwbGljYXRpb24gc2hvdWxkIHJldHVybgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgSW4gdGhpcyBjYXNlLAorICogYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgIGFuZCBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIGZ1bmN0aW9ucworICogaW1tZWRpYXRlbHkgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIElmIHRoZQorICogb3RoZXIgdmFsdWVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IHRoZXkgYXJlIHRyZWF0ZWQgYXMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX3VucGFja19leHRlbnNpb25fY2FsbGJhY2spKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lX2hkICpoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBsaWJyYXJ5IGFza3MgdGhlIGFwcGxpY2F0aW9uIHRvIHBhY2sKKyAqIGV4dGVuc2lvbiBwYXlsb2FkIGluIGl0cyB3aXJlIGZvcm1hdC4gIFRoZSBmcmFtZSBoZWFkZXIgd2lsbCBiZQorICogcGFja2VkIGJ5IGxpYnJhcnkuICBBcHBsaWNhdGlvbiBtdXN0IHBhY2sgcGF5bG9hZCBvbmx5LgorICogYGBmcmFtZS0+ZXh0LnBheWxvYWRgYCBpcyB0aGUgb2JqZWN0IHBhc3NlZCB0bworICogYG5naHR0cDJfc3VibWl0X2V4dGVuc2lvbigpYCBhcyBwYXlsb2FkIHBhcmFtZXRlci4gIEFwcGxpY2F0aW9uCisgKiBtdXN0IHBhY2sgZXh0ZW5zaW9uIHBheWxvYWQgdG8gdGhlIHxidWZ8IG9mIGl0cyBjYXBhY2l0eSB8bGVufAorICogYnl0ZXMuICBUaGUgfGxlbnwgaXMgYXQgbGVhc3QgMTZLaUIuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mCisgKiBieXRlcyB3cml0dGVuIGludG8gfGJ1Znwgd2hlbiBpdCBzdWNjZWVkcy4KKyAqCisgKiBUbyBhYm9ydCBwcm9jZXNzaW5nIHRoaXMgZXh0ZW5zaW9uIGZyYW1lLCByZXR1cm4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQU5DRUxgLCBhbmQKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrYCB3aWxsIGJlIGludm9rZWQuCisgKgorICogSWYgZmF0YWwgZXJyb3Igb2NjdXJyZWQsIGFwcGxpY2F0aW9uIHNob3VsZCByZXR1cm4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIEluIHRoaXMgY2FzZSwKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VuZCgpYCBhbmQgYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCBmdW5jdGlvbnMKKyAqIGltbWVkaWF0ZWx5IHJldHVybiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBJZiB0aGUKKyAqIG90aGVyIHZhbHVlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSB0aGV5IGFyZSB0cmVhdGVkIGFzCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzCisgKiBzdHJpY3RseSBsYXJnZXIgdGhhbiB8bGVufCwgaXQgaXMgdHJlYXRlZCBhcworICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLgorICovCit0eXBlZGVmIHNzaXplX3QgKCpuZ2h0dHAyX3BhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidWYsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGxpYnJhcnkgcHJvdmlkZXMgdGhlIGVycm9yIG1lc3NhZ2UKKyAqIGludGVuZGVkIGZvciBodW1hbiBjb25zdW1wdGlvbi4gIFRoaXMgY2FsbGJhY2sgaXMgc29sZWx5IGZvcgorICogZGVidWdnaW5nIHB1cnBvc2UuICBUaGUgfG1zZ3wgaXMgdHlwaWNhbGx5IE5VTEwtdGVybWluYXRlZCBzdHJpbmcKKyAqIG9mIGxlbmd0aCB8bGVufC4gIHxsZW58IGRvZXMgbm90IGluY2x1ZGUgdGhlIHNlbnRpbmVsIE5VTEwKKyAqIGNoYXJhY3Rlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQuICBUaGUgbmV3IGFwcGxpY2F0aW9uIHNob3VsZCB1c2UKKyAqIDp0eXBlOmBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrMmAuCisgKgorICogVGhlIGZvcm1hdCBvZiBlcnJvciBtZXNzYWdlIG1heSBjaGFuZ2UgYmV0d2VlbiBuZ2h0dHAyIGxpYnJhcnkKKyAqIHZlcnNpb25zLiAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgZGVwZW5kIG9uIHRoZSBwYXJ0aWN1bGFyCisgKiBmb3JtYXQuCisgKgorICogTm9ybWFsbHksIGFwcGxpY2F0aW9uIHNob3VsZCByZXR1cm4gMCBmcm9tIHRoaXMgY2FsbGJhY2suICBJZiBmYXRhbAorICogZXJyb3Igb2NjdXJyZWQgd2hpbGUgZG9pbmcgc29tZXRoaW5nIGluIHRoaXMgY2FsbGJhY2ssIGFwcGxpY2F0aW9uCisgKiBzaG91bGQgcmV0dXJuIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIEluIHRoaXMgY2FzZSwKKyAqIGxpYnJhcnkgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgd2l0aCByZXR1cm4gdmFsdWUKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYC4gIEN1cnJlbnRseSwgaWYgbm9uemVybyB2YWx1ZQorICogaXMgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGxiYWNrLCB0aGV5IGFyZSB0cmVhdGVkIGFzCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAsIGJ1dCBhcHBsaWNhdGlvbiBzaG91bGQgbm90CisgKiByZWx5IG9uIHRoaXMgZGV0YWlscy4KKyAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGNvbnN0IGNoYXIgKm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gbGlicmFyeSBwcm92aWRlcyB0aGUgZXJyb3IgY29kZSwgYW5kCisgKiBtZXNzYWdlLiAgVGhpcyBjYWxsYmFjayBpcyBzb2xlbHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLgorICogfGxpYl9lcnJvcl9jb2RlfCBpcyBvbmUgb2YgZXJyb3IgY29kZSBkZWZpbmVkIGluCisgKiA6ZW51bTpgbmdodHRwMl9lcnJvcmAuICBUaGUgfG1zZ3wgaXMgdHlwaWNhbGx5IE5VTEwtdGVybWluYXRlZAorICogc3RyaW5nIG9mIGxlbmd0aCB8bGVufCwgYW5kIGludGVuZGVkIGZvciBodW1hbiBjb25zdW1wdGlvbi4gIHxsZW58CisgKiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzZW50aW5lbCBOVUxMIGNoYXJhY3Rlci4KKyAqCisgKiBUaGUgZm9ybWF0IG9mIGVycm9yIG1lc3NhZ2UgbWF5IGNoYW5nZSBiZXR3ZWVuIG5naHR0cDIgbGlicmFyeQorICogdmVyc2lvbnMuICBUaGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBkZXBlbmQgb24gdGhlIHBhcnRpY3VsYXIKKyAqIGZvcm1hdC4KKyAqCisgKiBOb3JtYWxseSwgYXBwbGljYXRpb24gc2hvdWxkIHJldHVybiAwIGZyb20gdGhpcyBjYWxsYmFjay4gIElmIGZhdGFsCisgKiBlcnJvciBvY2N1cnJlZCB3aGlsZSBkb2luZyBzb21ldGhpbmcgaW4gdGhpcyBjYWxsYmFjaywgYXBwbGljYXRpb24KKyAqIHNob3VsZCByZXR1cm4gOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgSW4gdGhpcyBjYXNlLAorICogbGlicmFyeSB3aWxsIHJldHVybiBpbW1lZGlhdGVseSB3aXRoIHJldHVybiB2YWx1ZQorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgLiAgQ3VycmVudGx5LCBpZiBub256ZXJvIHZhbHVlCisgKiBpcyByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbGJhY2ssIHRoZXkgYXJlIHRyZWF0ZWQgYXMKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYCwgYnV0IGFwcGxpY2F0aW9uIHNob3VsZCBub3QKKyAqIHJlbHkgb24gdGhpcyBkZXRhaWxzLgorICovCit0eXBlZGVmIGludCAoKm5naHR0cDJfZXJyb3JfY2FsbGJhY2syKShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGliX2Vycm9yX2NvZGUsIGNvbnN0IGNoYXIgKm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIHZvaWQgKnVzZXJfZGF0YSk7CisKK3N0cnVjdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZm9yIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25gLiAgVGhlIGRldGFpbHMgb2YKKyAqIHRoaXMgc3RydWN0dXJlIGFyZSBpbnRlbnRpb25hbGx5IGhpZGRlbiBmcm9tIHRoZSBwdWJsaWMgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3M7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogSW5pdGlhbGl6ZXMgfCpjYWxsYmFja3NfcHRyfCB3aXRoIE5VTEwgdmFsdWVzLgorICoKKyAqIFRoZSBpbml0aWFsaXplZCBvYmplY3QgY2FuIGJlIHVzZWQgd2hlbiBpbml0aWFsaXppbmcgbXVsdGlwbGUKKyAqIDp0eXBlOmBuZ2h0dHAyX3Nlc3Npb25gIG9iamVjdHMuCisgKgorICogV2hlbiB0aGUgYXBwbGljYXRpb24gZmluaXNoZWQgdXNpbmcgdGhpcyBvYmplY3QsIGl0IGNhbiB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX2RlbCgpYCB0byBmcmVlIGl0cyBtZW1vcnkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX25ldyhuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICoqY2FsbGJhY2tzX3B0cik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogRnJlZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHxjYWxsYmFja3N8LiAgSWYgfGNhbGxiYWNrc3wgaXMKKyAqIGBgTlVMTGBgLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZAorbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19kZWwobmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIHNlc3Npb24gd2FudHMgdG8gc2VuZCBkYXRhIHRvCisgKiB0aGUgcmVtb3RlIHBlZXIuICBUaGlzIGNhbGxiYWNrIGlzIG5vdCBuZWNlc3NhcnkgaWYgdGhlIGFwcGxpY2F0aW9uCisgKiB1c2VzIHNvbGVseSBgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kKClgIHRvIHNlcmlhbGl6ZSBkYXRhIHRvCisgKiB0cmFuc21pdC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9zZW5kX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywgbmdodHRwMl9zZW5kX2NhbGxiYWNrIHNlbmRfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBhIHNlc3Npb24gd2FudHMgdG8gcmVjZWl2ZQorICogZGF0YSBmcm9tIHRoZSByZW1vdGUgcGVlci4gIFRoaXMgY2FsbGJhY2sgaXMgbm90IG5lY2Vzc2FyeSBpZiB0aGUKKyAqIGFwcGxpY2F0aW9uIHVzZXMgc29sZWx5IGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgdG8gcHJvY2VzcworICogcmVjZWl2ZWQgZGF0YS4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9yZWN2X2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywgbmdodHRwMl9yZWN2X2NhbGxiYWNrIHJlY3ZfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBieSBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIHdoZW4gYSBmcmFtZSBpcyByZWNlaXZlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2ZyYW1lX3JlY3ZfY2FsbGJhY2sgb25fZnJhbWVfcmVjdl9jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGJ5IGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgd2hlbiBhbiBpbnZhbGlkIG5vbi1EQVRBIGZyYW1lIGlzCisgKiByZWNlaXZlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZAorbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjayBvbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgY2h1bmsgb2YgZGF0YSBpbiBEQVRBIGZyYW1lCisgKiBpcyByZWNlaXZlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrIG9uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGJlZm9yZSBhIG5vbi1EQVRBIGZyYW1lIGlzIHNlbnQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2sgYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBhZnRlciBhIGZyYW1lIGlzIHNlbnQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZnJhbWVfc2VuZF9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrIG9uX2ZyYW1lX3NlbmRfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgbm9uLURBVEEgZnJhbWUgaXMgbm90IHNlbnQKKyAqIGJlY2F1c2Ugb2YgYW4gZXJyb3IuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2sgb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBzdHJlYW0gaXMgY2xvc2VkLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX3N0cmVhbV9jbG9zZV9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2sgb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgcmVjZXB0aW9uIG9mIGhlYWRlciBibG9jaworICogaW4gSEVBREVSUyBvciBQVVNIX1BST01JU0UgaXMgc3RhcnRlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2sgb25fYmVnaW5faGVhZGVyc19jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYSBoZWFkZXIgbmFtZS92YWx1ZSBwYWlyIGlzCisgKiByZWNlaXZlZC4gIElmIGJvdGgKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9oZWFkZXJfY2FsbGJhY2soKWAgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrMigpYCBhcmUgdXNlZCB0bworICogc2V0IGNhbGxiYWNrcywgdGhlIGxhdHRlciBoYXMgdGhlIHByZWNlZGVuY2UuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFjayBvbl9oZWFkZXJfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgaGVhZGVyIG5hbWUvdmFsdWUgcGFpciBpcworICogcmVjZWl2ZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faGVhZGVyX2NhbGxiYWNrMigKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2syIG9uX2hlYWRlcl9jYWxsYmFjazIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgaW52YWxpZCBoZWFkZXIgbmFtZS92YWx1ZQorICogcGFpciBpcyByZWNlaXZlZC4gIElmIGJvdGgKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjaygpYCBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazIoKWAgYXJlCisgKiB1c2VkIHRvIHNldCBjYWxsYmFja3MsIHRoZSBsYXR0ZXIgdGFrZXMgdGhlIHByZWNlZGVuY2UuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2sgb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgaW52YWxpZCBoZWFkZXIgbmFtZS92YWx1ZQorICogcGFpciBpcyByZWNlaXZlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazIoCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2syIG9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrMik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIGxpYnJhcnkgYXNrcyBhcHBsaWNhdGlvbgorICogaG93IG1hbnkgcGFkZGluZyBieXRlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlCisgKiBnaXZlbiBmcmFtZS4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9zZWxlY3RfcGFkZGluZ19jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9zZWxlY3RfcGFkZGluZ19jYWxsYmFjayBzZWxlY3RfcGFkZGluZ19jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBkZXRlcm1pbmUgdGhlIGxlbmd0aCBhbGxvd2VkIGluCisgKiA6dHlwZTpgbmdodHRwMl9kYXRhX3NvdXJjZV9yZWFkX2NhbGxiYWNrYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZAorbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfZGF0YV9zb3VyY2VfcmVhZF9sZW5ndGhfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9sZW5ndGhfY2FsbGJhY2sgZGF0YV9zb3VyY2VfcmVhZF9sZW5ndGhfY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgZnJhbWUgaGVhZGVyIGlzIHJlY2VpdmVkLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrIG9uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbgorICogOmVudW06YE5HSFRUUDJfREFUQV9GTEFHX05PX0NPUFlgIGlzIHVzZWQgaW4KKyAqIDp0eXBlOmBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2tgIHRvIGF2b2lkIGRhdGEgY29weS4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9zZW5kX2RhdGFfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfc2VuZF9kYXRhX2NhbGxiYWNrIHNlbmRfZGF0YV9jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIGxpYnJhcnkgYXNrcyB0aGUKKyAqIGFwcGxpY2F0aW9uIHRvIHBhY2sgZXh0ZW5zaW9uIGZyYW1lIHBheWxvYWQgaW4gd2lyZSBmb3JtYXQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfcGFja19leHRlbnNpb25fY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfcGFja19leHRlbnNpb25fY2FsbGJhY2sgcGFja19leHRlbnNpb25fY2FsbGJhY2spOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNldHMgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBsaWJyYXJ5IGFza3MgdGhlCisgKiBhcHBsaWNhdGlvbiB0byB1bnBhY2sgZXh0ZW5zaW9uIGZyYW1lIHBheWxvYWQgZnJvbSB3aXJlIGZvcm1hdC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF91bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX3VucGFja19leHRlbnNpb25fY2FsbGJhY2sgdW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gY2h1bmsgb2YgZXh0ZW5zaW9uIGZyYW1lCisgKiBwYXlsb2FkIGlzIHJlY2VpdmVkLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkCituZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjayBvbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gbGlicmFyeSB0ZWxscyBlcnJvciBtZXNzYWdlIHRvCisgKiB0aGUgYXBwbGljYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiAgVGhlIG5ldyBhcHBsaWNhdGlvbiBzaG91bGQgdXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfZXJyb3JfY2FsbGJhY2syKClgLgorICoKKyAqIElmIGJvdGggOnR5cGU6YG5naHR0cDJfZXJyb3JfY2FsbGJhY2tgIGFuZAorICogOnR5cGU6YG5naHR0cDJfZXJyb3JfY2FsbGJhY2syYCBhcmUgc2V0LCB0aGUgbGF0dGVyIHRha2VzCisgKiBwcmVjZWRlbmNlLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywgbmdodHRwMl9lcnJvcl9jYWxsYmFjayBlcnJvcl9jYWxsYmFjayk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gbGlicmFyeSB0ZWxscyBlcnJvciBjb2RlLCBhbmQKKyAqIG1lc3NhZ2UgdG8gdGhlIGFwcGxpY2F0aW9uLgorICoKKyAqIElmIGJvdGggOnR5cGU6YG5naHR0cDJfZXJyb3JfY2FsbGJhY2tgIGFuZAorICogOnR5cGU6YG5naHR0cDJfZXJyb3JfY2FsbGJhY2syYCBhcmUgc2V0LCB0aGUgbGF0dGVyIHRha2VzCisgKiBwcmVjZWRlbmNlLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrMigKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsIG5naHR0cDJfZXJyb3JfY2FsbGJhY2syIGVycm9yX2NhbGxiYWNrMik7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ3VzdG9tIG1lbW9yeSBhbGxvY2F0b3IgdG8gcmVwbGFjZSBtYWxsb2MoKS4gIFRoZSB8bWVtX3VzZXJfZGF0YXwKKyAqIGlzIHRoZSBtZW1fdXNlcl9kYXRhIG1lbWJlciBvZiA6dHlwZTpgbmdodHRwMl9tZW1gIHN0cnVjdHVyZS4KKyAqLwordHlwZWRlZiB2b2lkICooKm5naHR0cDJfbWFsbG9jKShzaXplX3Qgc2l6ZSwgdm9pZCAqbWVtX3VzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0eXBlZGVmCisgKgorICogQ3VzdG9tIG1lbW9yeSBhbGxvY2F0b3IgdG8gcmVwbGFjZSBmcmVlKCkuICBUaGUgfG1lbV91c2VyX2RhdGF8IGlzCisgKiB0aGUgbWVtX3VzZXJfZGF0YSBtZW1iZXIgb2YgOnR5cGU6YG5naHR0cDJfbWVtYCBzdHJ1Y3R1cmUuCisgKi8KK3R5cGVkZWYgdm9pZCAoKm5naHR0cDJfZnJlZSkodm9pZCAqcHRyLCB2b2lkICptZW1fdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDdXN0b20gbWVtb3J5IGFsbG9jYXRvciB0byByZXBsYWNlIGNhbGxvYygpLiAgVGhlIHxtZW1fdXNlcl9kYXRhfAorICogaXMgdGhlIG1lbV91c2VyX2RhdGEgbWVtYmVyIG9mIDp0eXBlOmBuZ2h0dHAyX21lbWAgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHZvaWQgKigqbmdodHRwMl9jYWxsb2MpKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsIHZvaWQgKm1lbV91c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdHlwZWRlZgorICoKKyAqIEN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yIHRvIHJlcGxhY2UgcmVhbGxvYygpLiAgVGhlIHxtZW1fdXNlcl9kYXRhfAorICogaXMgdGhlIG1lbV91c2VyX2RhdGEgbWVtYmVyIG9mIDp0eXBlOmBuZ2h0dHAyX21lbWAgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHZvaWQgKigqbmdodHRwMl9yZWFsbG9jKSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCB2b2lkICptZW1fdXNlcl9kYXRhKTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogQ3VzdG9tIG1lbW9yeSBhbGxvY2F0b3IgZnVuY3Rpb25zIGFuZCB1c2VyIGRlZmluZWQgcG9pbnRlci4gIFRoZQorICogfG1lbV91c2VyX2RhdGF8IG1lbWJlciBpcyBwYXNzZWQgdG8gZWFjaCBhbGxvY2F0b3IgZnVuY3Rpb24uICBUaGlzCisgKiBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGFjaGlldmUgcGVyLXNlc3Npb24gbWVtb3J5IHBvb2wuCisgKgorICogSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIGNvZGUsIGBgbXlfbWFsbG9jYGAsIGBgbXlfZnJlZWBgLAorICogYGBteV9jYWxsb2NgYCBhbmQgYGBteV9yZWFsbG9jYGAgYXJlIHRoZSByZXBsYWNlbWVudCBvZiB0aGUKKyAqIHN0YW5kYXJkIGFsbG9jYXRvcnMgYGBtYWxsb2NgYCwgYGBmcmVlYGAsIGBgY2FsbG9jYGAgYW5kCisgKiBgYHJlYWxsb2NgYCByZXNwZWN0aXZlbHk6OgorICoKKyAqICAgICB2b2lkICpteV9tYWxsb2NfY2Ioc2l6ZV90IHNpemUsIHZvaWQgKm1lbV91c2VyX2RhdGEpIHsKKyAqICAgICAgIHJldHVybiBteV9tYWxsb2Moc2l6ZSk7CisgKiAgICAgfQorICoKKyAqICAgICB2b2lkIG15X2ZyZWVfY2Iodm9pZCAqcHRyLCB2b2lkICptZW1fdXNlcl9kYXRhKSB7IG15X2ZyZWUocHRyKTsgfQorICoKKyAqICAgICB2b2lkICpteV9jYWxsb2NfY2Ioc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwgdm9pZCAqbWVtX3VzZXJfZGF0YSkgeworICogICAgICAgcmV0dXJuIG15X2NhbGxvYyhubWVtYiwgc2l6ZSk7CisgKiAgICAgfQorICoKKyAqICAgICB2b2lkICpteV9yZWFsbG9jX2NiKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHZvaWQgKm1lbV91c2VyX2RhdGEpIHsKKyAqICAgICAgIHJldHVybiBteV9yZWFsbG9jKHB0ciwgc2l6ZSk7CisgKiAgICAgfQorICoKKyAqICAgICB2b2lkIHNlc3Npb25fbmV3KCkgeworICogICAgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uOworICogICAgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzOworICogICAgICAgbmdodHRwMl9tZW0gbWVtID0ge05VTEwsIG15X21hbGxvY19jYiwgbXlfZnJlZV9jYiwgbXlfY2FsbG9jX2NiLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIG15X3JlYWxsb2NfY2J9OworICoKKyAqICAgICAgIC4uLgorICoKKyAqICAgICAgIG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3Mygmc2Vzc2lvbiwgY2FsbGJhY2tzLCBOVUxMLCBOVUxMLCAmbWVtKTsKKyAqCisgKiAgICAgICAuLi4KKyAqICAgICB9CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIEFuIGFyYml0cmFyeSB1c2VyIHN1cHBsaWVkIGRhdGEuICBUaGlzIGlzIHBhc3NlZCB0byBlYWNoCisgICAqIGFsbG9jYXRvciBmdW5jdGlvbi4KKyAgICovCisgIHZvaWQgKm1lbV91c2VyX2RhdGE7CisgIC8qKgorICAgKiBDdXN0b20gYWxsb2NhdG9yIGZ1bmN0aW9uIHRvIHJlcGxhY2UgbWFsbG9jKCkuCisgICAqLworICBuZ2h0dHAyX21hbGxvYyBtYWxsb2M7CisgIC8qKgorICAgKiBDdXN0b20gYWxsb2NhdG9yIGZ1bmN0aW9uIHRvIHJlcGxhY2UgZnJlZSgpLgorICAgKi8KKyAgbmdodHRwMl9mcmVlIGZyZWU7CisgIC8qKgorICAgKiBDdXN0b20gYWxsb2NhdG9yIGZ1bmN0aW9uIHRvIHJlcGxhY2UgY2FsbG9jKCkuCisgICAqLworICBuZ2h0dHAyX2NhbGxvYyBjYWxsb2M7CisgIC8qKgorICAgKiBDdXN0b20gYWxsb2NhdG9yIGZ1bmN0aW9uIHRvIHJlcGxhY2UgcmVhbGxvYygpLgorICAgKi8KKyAgbmdodHRwMl9yZWFsbG9jIHJlYWxsb2M7Cit9IG5naHR0cDJfbWVtOworCitzdHJ1Y3QgbmdodHRwMl9vcHRpb247CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgOnR5cGU6YG5naHR0cDJfc2Vzc2lvbmAuICBUaGUgZGV0YWlscyBvZgorICogdGhpcyBzdHJ1Y3R1cmUgYXJlIGludGVudGlvbmFsbHkgaGlkZGVuIGZyb20gdGhlIHB1YmxpYyBBUEkuCisgKi8KK3R5cGVkZWYgc3RydWN0IG5naHR0cDJfb3B0aW9uIG5naHR0cDJfb3B0aW9uOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEluaXRpYWxpemVzIHwqb3B0aW9uX3B0cnwgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKyAqCisgKiBXaGVuIHRoZSBhcHBsaWNhdGlvbiBmaW5pc2hlZCB1c2luZyB0aGlzIG9iamVjdCwgaXQgY2FuIHVzZQorICogYG5naHR0cDJfb3B0aW9uX2RlbCgpYCB0byBmcmVlIGl0cyBtZW1vcnkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfb3B0aW9uX25ldyhuZ2h0dHAyX29wdGlvbiAqKm9wdGlvbl9wdHIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEZyZWVzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB8b3B0aW9ufC4gIElmIHxvcHRpb258IGlzCisgKiBgYE5VTExgYCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9vcHRpb25fZGVsKG5naHR0cDJfb3B0aW9uICpvcHRpb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFRoaXMgb3B0aW9uIHByZXZlbnRzIHRoZSBsaWJyYXJ5IGZyb20gc2VuZGluZyBXSU5ET1dfVVBEQVRFIGZvciBhCisgKiBjb25uZWN0aW9uIGF1dG9tYXRpY2FsbHkuICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gbm9uemVybywgdGhlCisgKiBsaWJyYXJ5IHdvbid0IHNlbmQgV0lORE9XX1VQREFURSBmb3IgREFUQSB1bnRpbCBhcHBsaWNhdGlvbiBjYWxscworICogYG5naHR0cDJfc2Vzc2lvbl9jb25zdW1lKClgIHRvIGluZGljYXRlIHRoZSBjb25zdW1lZCBhbW91bnQgb2YKKyAqIGRhdGEuICBEb24ndCB1c2UgYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAgZm9yIHRoaXMgcHVycG9zZS4KKyAqIEJ5IGRlZmF1bHQsIHRoaXMgb3B0aW9uIGlzIHNldCB0byB6ZXJvLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkCituZ2h0dHAyX29wdGlvbl9zZXRfbm9fYXV0b193aW5kb3dfdXBkYXRlKG5naHR0cDJfb3B0aW9uICpvcHRpb24sIGludCB2YWwpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFRoaXMgb3B0aW9uIHNldHMgdGhlIFNFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgdmFsdWUgb2YKKyAqIHJlbW90ZSBlbmRwb2ludCBhcyBpZiBpdCBpcyByZWNlaXZlZCBpbiBTRVRUSU5HUyBmcmFtZS4gIFdpdGhvdXQKKyAqIHNwZWNpZnlpbmcgdGhpcyBvcHRpb24sIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRnb2luZyBjb25jdXJyZW50CisgKiBzdHJlYW1zIGlzIGluaXRpYWxseSBsaW1pdGVkIHRvIDEwMCB0byBhdm9pZCBpc3N1ZXMgd2hlbiB0aGUgbG9jYWwKKyAqIGVuZHBvaW50IHN1Ym1pdHMgbG90cyBvZiByZXF1ZXN0cyBiZWZvcmUgcmVjZWl2aW5nIGluaXRpYWwgU0VUVElOR1MKKyAqIGZyYW1lIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludCwgc2luY2Ugc2VuZGluZyB0aGVtIGF0IG9uY2UgdG8gdGhlCisgKiByZW1vdGUgZW5kcG9pbnQgY291bGQgbGVhZCB0byByZWplY3Rpb24gb2Ygc29tZSBvZiB0aGUgcmVxdWVzdHMuCisgKiBUaGlzIHZhbHVlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgbG9jYWwgZW5kcG9pbnQgcmVjZWl2ZXMKKyAqIGluaXRpYWwgU0VUVElOR1MgZnJhbWUgZnJvbSB0aGUgcmVtb3RlIGVuZHBvaW50LCBlaXRoZXIgdG8gdGhlCisgKiB2YWx1ZSBhZHZlcnRpc2VkIGluIFNFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgb3IgdG8gdGhlCisgKiBkZWZhdWx0IHZhbHVlICh1bmxpbWl0ZWQpIGlmIG5vbmUgd2FzIGFkdmVydGlzZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQKK25naHR0cDJfb3B0aW9uX3NldF9wZWVyX21heF9jb25jdXJyZW50X3N0cmVhbXMobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBCeSBkZWZhdWx0LCBuZ2h0dHAyIGxpYnJhcnksIGlmIGNvbmZpZ3VyZWQgYXMgc2VydmVyLCByZXF1aXJlcworICogZmlyc3QgMjQgYnl0ZXMgb2YgY2xpZW50IG1hZ2ljIGJ5dGUgc3RyaW5nIChNQUdJQykuICBJbiBtb3N0IGNhc2VzLAorICogdGhpcyB3aWxsIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzZXJ2ZXIuICBCdXQgc29tZXRpbWVzCisgKiBzZXJ2ZXIgbWF5IHdhbnQgdG8gZGV0ZWN0IHRoZSBhcHBsaWNhdGlvbiBwcm90b2NvbCBiYXNlZCBvbiBmaXJzdAorICogZmV3IGJ5dGVzIG9uIGNsZWFyIHRleHQgY29tbXVuaWNhdGlvbi4KKyAqCisgKiBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHdpdGggbm9uemVybyB8dmFsfCwgbmdodHRwMiBsaWJyYXJ5IGRvZXMgbm90CisgKiBoYW5kbGUgTUFHSUMuICBJdCBzdGlsbCBjaGVja3MgZm9sbG93aW5nIFNFVFRJTkdTIGZyYW1lLiAgVGhpcworICogbWVhbnMgdGhhdCBhcHBsaWNhdGlvbnMgc2hvdWxkIGRlYWwgd2l0aCBNQUdJQyBieSB0aGVtc2VsdmVzLgorICoKKyAqIElmIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkIG9yIHVzZWQgd2l0aCB6ZXJvIHZhbHVlLCBpZiBNQUdJQyBkb2VzCisgKiBub3QgbWF0Y2ggOm1hY3JvOmBOR0hUVFAyX0NMSUVOVF9NQUdJQ2AsIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYAorICogYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAgd2lsbCByZXR1cm4gZXJyb3IKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9CQURfQ0xJRU5UX01BR0lDYCwgd2hpY2ggaXMgZmF0YWwgZXJyb3IuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQKK25naHR0cDJfb3B0aW9uX3NldF9ub19yZWN2X2NsaWVudF9tYWdpYyhuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLCBpbnQgdmFsKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBCeSBkZWZhdWx0LCBuZ2h0dHAyIGxpYnJhcnkgZW5mb3JjZXMgc3Vic2V0IG9mIEhUVFAgTWVzc2FnaW5nIHJ1bGVzCisgKiBkZXNjcmliZWQgaW4gYEhUVFAvMiBzcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDgKKyAqIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTg+YF8uICBTZWUKKyAqIDpyZWY6YGh0dHAtbWVzc2FnaW5nYCBzZWN0aW9uIGZvciBkZXRhaWxzLiAgRm9yIHRob3NlIGFwcGxpY2F0aW9ucworICogd2hvIHVzZSBuZ2h0dHAyIGxpYnJhcnkgYXMgbm9uLUhUVFAgdXNlLCBnaXZlIG5vbnplcm8gdG8gfHZhbHwgdG8KKyAqIGRpc2FibGUgdGhpcyBlbmZvcmNlbWVudC4gIFBsZWFzZSBub3RlIHRoYXQgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZQorICogZG9lcyBub3QgY2hhbmdlIHRoZSBmdW5kYW1lbnRhbCBjbGllbnQgYW5kIHNlcnZlciBtb2RlbCBvZiBIVFRQLgorICogVGhhdCBpcywgZXZlbiBpZiB0aGUgdmFsaWRhdGlvbiBpcyBkaXNhYmxlZCwgb25seSBjbGllbnQgY2FuIHNlbmQKKyAqIHJlcXVlc3RzLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfb3B0aW9uX3NldF9ub19odHRwX21lc3NhZ2luZyhuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUkZDIDc1NDAgZG9lcyBub3QgZW5mb3JjZSBhbnkgbGltaXQgb24gdGhlIG51bWJlciBvZiBpbmNvbWluZworICogcmVzZXJ2ZWQgc3RyZWFtcyAoaW4gUkZDIDc1NDAgdGVybXMsIHN0cmVhbXMgaW4gcmVzZXJ2ZWQgKHJlbW90ZSkKKyAqIHN0YXRlKS4gIFRoaXMgb25seSBhZmZlY3RzIGNsaWVudCBzaWRlLCBzaW5jZSBvbmx5IHNlcnZlciBjYW4gcHVzaAorICogc3RyZWFtcy4gIE1hbGljaW91cyBzZXJ2ZXIgY2FuIHB1c2ggYXJiaXRyYXJ5IG51bWJlciBvZiBzdHJlYW1zLAorICogYW5kIG1ha2UgY2xpZW50J3MgbWVtb3J5IGV4aGF1c3RlZC4gIFRoaXMgb3B0aW9uIGNhbiBzZXQgdGhlCisgKiBtYXhpbXVtIG51bWJlciBvZiBzdWNoIGluY29taW5nIHN0cmVhbXMgdG8gYXZvaWQgcG9zc2libGUgbWVtb3J5CisgKiBleGhhdXN0aW9uLiAgSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBhbmQgcHVzaGVkIHN0cmVhbXMgYXJlCisgKiBhdXRvbWF0aWNhbGx5IGNsb3NlZCBvbiByZWNlcHRpb24sIHdpdGhvdXQgY2FsbGluZyB1c2VyIHByb3ZpZGVkCisgKiBjYWxsYmFjaywgaWYgdGhleSBleGNlZWQgdGhlIGdpdmVuIGxpbWl0LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKKyAqIDIwMC4gIElmIHNlc3Npb24gaXMgY29uZmlndXJlZCBhcyBzZXJ2ZXIgc2lkZSwgdGhpcyBvcHRpb24gaGFzIG5vCisgKiBlZmZlY3QuICBTZXJ2ZXIgY2FuIGNvbnRyb2wgdGhlIG51bWJlciBvZiBzdHJlYW1zIHRvIHB1c2guCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQKK25naHR0cDJfb3B0aW9uX3NldF9tYXhfcmVzZXJ2ZWRfcmVtb3RlX3N0cmVhbXMobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGV4dGVuc2lvbiBmcmFtZSB0eXBlIHRoZSBhcHBsaWNhdGlvbiBpcyB3aWxsaW5nIHRvIGhhbmRsZSB3aXRoCisgKiB1c2VyIGRlZmluZWQgY2FsbGJhY2tzIChzZWUKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2V4dGVuc2lvbl9jaHVua19yZWN2X2NhbGxiYWNrYCBhbmQKKyAqIDp0eXBlOmBuZ2h0dHAyX3VucGFja19leHRlbnNpb25fY2FsbGJhY2tgKS4gIFRoZSB8dHlwZXwgaXMKKyAqIGV4dGVuc2lvbiBmcmFtZSB0eXBlLCBhbmQgbXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gMHg5LgorICogT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gIFRoZSBhcHBsaWNhdGlvbiBjYW4gY2FsbAorICogdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyB0byBzZXQgbW9yZSB0aGFuIG9uZSBmcmFtZSB0eXBlIHRvCisgKiByZWNlaXZlLiAgVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIGl0CisgKiBqdXN0IHNlbmRzIGV4dGVuc2lvbiBmcmFtZXMuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQKK25naHR0cDJfb3B0aW9uX3NldF91c2VyX3JlY3ZfZXh0ZW5zaW9uX3R5cGUobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0eXBlKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIGV4dGVuc2lvbiBmcmFtZSB0eXBlIHRoZSBhcHBsaWNhdGlvbiBpcyB3aWxsaW5nIHRvIHJlY2VpdmUKKyAqIHVzaW5nIGJ1aWx0aW4gaGFuZGxlci4gIFRoZSB8dHlwZXwgaXMgdGhlIGV4dGVuc2lvbiBmcmFtZSB0eXBlIHRvCisgKiByZWNlaXZlLCBhbmQgbXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gMHg5LiAgT3RoZXJ3aXNlLCB0aGlzCisgKiBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuICBUaGUgYXBwbGljYXRpb24gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgorICogbXVsdGlwbGUgdGltZXMgdG8gc2V0IG1vcmUgdGhhbiBvbmUgZnJhbWUgdHlwZSB0byByZWNlaXZlLiAgVGhlCisgKiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiBpdCBqdXN0IHNlbmRzCisgKiBleHRlbnNpb24gZnJhbWVzLgorICoKKyAqIElmIHNhbWUgZnJhbWUgdHlwZSBpcyBwYXNzZWQgdG8gYm90aAorICogYG5naHR0cDJfb3B0aW9uX3NldF9idWlsdGluX3JlY3ZfZXh0ZW5zaW9uX3R5cGUoKWAgYW5kCisgKiBgbmdodHRwMl9vcHRpb25fc2V0X3VzZXJfcmVjdl9leHRlbnNpb25fdHlwZSgpYCwgdGhlIGxhdHRlciB0YWtlcworICogcHJlY2VkZW5jZS4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZAorbmdodHRwMl9vcHRpb25fc2V0X2J1aWx0aW5fcmVjdl9leHRlbnNpb25fdHlwZShuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHR5cGUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFRoaXMgb3B0aW9uIHByZXZlbnRzIHRoZSBsaWJyYXJ5IGZyb20gc2VuZGluZyBQSU5HIGZyYW1lIHdpdGggQUNLCisgKiBmbGFnIHNldCBhdXRvbWF0aWNhbGx5IHdoZW4gUElORyBmcmFtZSB3aXRob3V0IEFDSyBmbGFnIHNldCBpcworICogcmVjZWl2ZWQuICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gbm9uemVybywgdGhlIGxpYnJhcnkgd29uJ3Qgc2VuZAorICogUElORyBmcmFtZSB3aXRoIEFDSyBmbGFnIHNldCBpbiB0aGUgcmVzcG9uc2UgZm9yIGluY29taW5nIFBJTkcKKyAqIGZyYW1lLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBzZW5kIFBJTkcgZnJhbWUgd2l0aCBBQ0sgZmxhZyBzZXQgdXNpbmcKKyAqIGBuZ2h0dHAyX3N1Ym1pdF9waW5nKClgIHdpdGggOmVudW06YE5HSFRUUDJfRkxBR19BQ0tgIGFzIGZsYWdzCisgKiBwYXJhbWV0ZXIuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9vcHRpb25fc2V0X25vX2F1dG9fcGluZ19hY2sobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogVGhpcyBvcHRpb24gc2V0cyB0aGUgbWF4aW11bSBsZW5ndGggb2YgaGVhZGVyIGJsb2NrIChhIHNldCBvZgorICogaGVhZGVyIGZpZWxkcyBwZXIgb25lIEhFQURFUlMgZnJhbWUpIHRvIHNlbmQuICBUaGUgbGVuZ3RoIG9mIGEKKyAqIGdpdmVuIHNldCBvZiBoZWFkZXIgZmllbGRzIGlzIGNhbGN1bGF0ZWQgdXNpbmcKKyAqIGBuZ2h0dHAyX2hkX2RlZmxhdGVfYm91bmQoKWAuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2NEtpQi4gIElmCisgKiBhcHBsaWNhdGlvbiBhdHRlbXB0cyB0byBzZW5kIGhlYWRlciBmaWVsZHMgbGFyZ2VyIHRoYW4gdGhpcyBsaW1pdCwKKyAqIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIGZyYW1lIGZhaWxzIHdpdGggZXJyb3IgY29kZQorICogOmVudW06YE5HSFRUUDJfRVJSX0ZSQU1FX1NJWkVfRVJST1JgLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkCituZ2h0dHAyX29wdGlvbl9zZXRfbWF4X3NlbmRfaGVhZGVyX2Jsb2NrX2xlbmd0aChuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogVGhpcyBvcHRpb24gc2V0cyB0aGUgbWF4aW11bSBkeW5hbWljIHRhYmxlIHNpemUgZm9yIGRlZmxhdGluZworICogaGVhZGVyIGZpZWxkcy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDRLaUIuICBJbiBIVFRQLzIsIHJlY2VpdmVyIG9mCisgKiBkZWZsYXRlZCBoZWFkZXIgYmxvY2sgY2FuIHNwZWNpZnkgbWF4aW11bSBkeW5hbWljIHRhYmxlIHNpemUuICBUaGUKKyAqIGFjdHVhbCBtYXhpbXVtIHNpemUgaXMgdGhlIG1pbmltdW0gb2YgdGhlIHNpemUgcmVjZWl2ZXIgc3BlY2lmaWVkCisgKiBhbmQgdGhpcyBvcHRpb24gdmFsdWUuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQKK25naHR0cDJfb3B0aW9uX3NldF9tYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogVGhpcyBvcHRpb24gcHJldmVudHMgdGhlIGxpYnJhcnkgZnJvbSByZXRhaW5pbmcgY2xvc2VkIHN0cmVhbXMgdG8KKyAqIG1haW50YWluIHRoZSBwcmlvcml0eSB0cmVlLiAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIG5vbnplcm8sCisgKiBhcHBsaWNhdGlvbnMgY2FuIGRpc2NhcmQgY2xvc2VkIHN0cmVhbSBjb21wbGV0ZWx5IHRvIHNhdmUgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfb3B0aW9uX3NldF9ub19jbG9zZWRfc3RyZWFtcyhuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRnb2luZyBTRVRUSU5HUyBBQ0sgYW5kCisgKiBQSU5HIEFDSyBmcmFtZXMgcmV0YWluZWQgaW4gOnR5cGU6YG5naHR0cDJfc2Vzc2lvbmAgb2JqZWN0LiAgSWYKKyAqIG1vcmUgdGhhbiB0aG9zZSBmcmFtZXMgYXJlIHJldGFpbmVkLCB0aGUgcGVlciBpcyBjb25zaWRlcmVkIHRvIGJlCisgKiBtaXNiZWhhdmluZyBhbmQgc2Vzc2lvbiB3aWxsIGJlIGNsb3NlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMDAuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9vcHRpb25fc2V0X21heF9vdXRib3VuZF9hY2sobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogSW5pdGlhbGl6ZXMgfCpzZXNzaW9uX3B0cnwgZm9yIGNsaWVudCB1c2UuICBUaGUgYWxsIG1lbWJlcnMgb2YKKyAqIHxjYWxsYmFja3N8IGFyZSBjb3BpZWQgdG8gfCpzZXNzaW9uX3B0cnwuICBUaGVyZWZvcmUgfCpzZXNzaW9uX3B0cnwKKyAqIGRvZXMgbm90IHN0b3JlIHxjYWxsYmFja3N8LiAgVGhlIHx1c2VyX2RhdGF8IGlzIGFuIGFyYml0cmFyeSB1c2VyCisgKiBzdXBwbGllZCBkYXRhLCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorICoKKyAqIFRoZSA6dHlwZTpgbmdodHRwMl9zZW5kX2NhbGxiYWNrYCBtdXN0IGJlIHNwZWNpZmllZC4gIElmIHRoZQorICogYXBwbGljYXRpb24gY29kZSB1c2VzIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCwgdGhlCisgKiA6dHlwZTpgbmdodHRwMl9yZWN2X2NhbGxiYWNrYCBtdXN0IGJlIHNwZWNpZmllZC4gIFRoZSBvdGhlciBtZW1iZXJzCisgKiBvZiB8Y2FsbGJhY2tzfCBjYW4gYmUgYGBOVUxMYGAuCisgKgorICogSWYgdGhpcyBmdW5jdGlvbiBmYWlscywgfCpzZXNzaW9uX3B0cnwgaXMgbGVmdCB1bnRvdWNoZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldyhuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogSW5pdGlhbGl6ZXMgfCpzZXNzaW9uX3B0cnwgZm9yIHNlcnZlciB1c2UuICBUaGUgYWxsIG1lbWJlcnMgb2YKKyAqIHxjYWxsYmFja3N8IGFyZSBjb3BpZWQgdG8gfCpzZXNzaW9uX3B0cnwuIFRoZXJlZm9yZSB8KnNlc3Npb25fcHRyfAorICogZG9lcyBub3Qgc3RvcmUgfGNhbGxiYWNrc3wuICBUaGUgfHVzZXJfZGF0YXwgaXMgYW4gYXJiaXRyYXJ5IHVzZXIKKyAqIHN1cHBsaWVkIGRhdGEsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMuCisgKgorICogVGhlIDp0eXBlOmBuZ2h0dHAyX3NlbmRfY2FsbGJhY2tgIG11c3QgYmUgc3BlY2lmaWVkLiAgSWYgdGhlCisgKiBhcHBsaWNhdGlvbiBjb2RlIHVzZXMgYG5naHR0cDJfc2Vzc2lvbl9yZWN2KClgLCB0aGUKKyAqIDp0eXBlOmBuZ2h0dHAyX3JlY3ZfY2FsbGJhY2tgIG11c3QgYmUgc3BlY2lmaWVkLiAgVGhlIG90aGVyIG1lbWJlcnMKKyAqIG9mIHxjYWxsYmFja3N8IGNhbiBiZSBgYE5VTExgYC4KKyAqCisgKiBJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCB8KnNlc3Npb25fcHRyfCBpcyBsZWZ0IHVudG91Y2hlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3KG5naHR0cDJfc2Vzc2lvbiAqKnNlc3Npb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBMaWtlIGBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldygpYCwgYnV0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zCisgKiBzcGVjaWZpZWQgaW4gdGhlIHxvcHRpb258LgorICoKKyAqIFRoZSB8b3B0aW9ufCBjYW4gYmUgYGBOVUxMYGAgYW5kIHRoZSBjYWxsIGlzIGVxdWl2YWxlbnQgdG8KKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldygpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIHxvcHRpb258LiAgVGhlIGFwcGxpY2F0aW9uIGlzCisgKiByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB8b3B0aW9ufCBpZiBpdCBmaW5pc2hlcyB1c2luZyB0aGUgb2JqZWN0LgorICoKKyAqIFRoZSBsaWJyYXJ5IGNvZGUgZG9lcyBub3QgcmVmZXIgdG8gfG9wdGlvbnwgYWZ0ZXIgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3MihuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCBjb25zdCBuZ2h0dHAyX29wdGlvbiAqb3B0aW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBMaWtlIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYCwgYnV0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zCisgKiBzcGVjaWZpZWQgaW4gdGhlIHxvcHRpb258LgorICoKKyAqIFRoZSB8b3B0aW9ufCBjYW4gYmUgYGBOVUxMYGAgYW5kIHRoZSBjYWxsIGlzIGVxdWl2YWxlbnQgdG8KKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIHxvcHRpb258LiAgVGhlIGFwcGxpY2F0aW9uIGlzCisgKiByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB8b3B0aW9ufCBpZiBpdCBmaW5pc2hlcyB1c2luZyB0aGUgb2JqZWN0LgorICoKKyAqIFRoZSBsaWJyYXJ5IGNvZGUgZG9lcyBub3QgcmVmZXIgdG8gfG9wdGlvbnwgYWZ0ZXIgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3MihuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCBjb25zdCBuZ2h0dHAyX29wdGlvbiAqb3B0aW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBMaWtlIGBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldzIoKWAsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgY3VzdG9tCisgKiBtZW1vcnkgYWxsb2NhdG9yIHNwZWNpZmllZCBpbiB0aGUgfG1lbXwuCisgKgorICogVGhlIHxtZW18IGNhbiBiZSBgYE5VTExgYCBhbmQgdGhlIGNhbGwgaXMgZXF1aXZhbGVudCB0bworICogYG5naHR0cDJfc2Vzc2lvbl9jbGllbnRfbmV3MigpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIHxtZW18LiAgVGhlIGFwcGxpY2F0aW9uIGlzCisgKiByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB8bWVtfC4KKyAqCisgKiBUaGUgbGlicmFyeSBjb2RlIGRvZXMgbm90IHJlZmVyIHRvIHxtZW18IHBvaW50ZXIgYWZ0ZXIgdGhpcworICogZnVuY3Rpb24gcmV0dXJucywgc28gdGhlIGFwcGxpY2F0aW9uIGNhbiBzYWZlbHkgZnJlZSBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXczKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqKnNlc3Npb25fcHRyLCBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgdm9pZCAqdXNlcl9kYXRhLCBjb25zdCBuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBMaWtlIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldzIoKWAsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgY3VzdG9tCisgKiBtZW1vcnkgYWxsb2NhdG9yIHNwZWNpZmllZCBpbiB0aGUgfG1lbXwuCisgKgorICogVGhlIHxtZW18IGNhbiBiZSBgYE5VTExgYCBhbmQgdGhlIGNhbGwgaXMgZXF1aXZhbGVudCB0bworICogYG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3MigpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIHxtZW18LiAgVGhlIGFwcGxpY2F0aW9uIGlzCisgKiByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB8bWVtfC4KKyAqCisgKiBUaGUgbGlicmFyeSBjb2RlIGRvZXMgbm90IHJlZmVyIHRvIHxtZW18IHBvaW50ZXIgYWZ0ZXIgdGhpcworICogZnVuY3Rpb24gcmV0dXJucywgc28gdGhlIGFwcGxpY2F0aW9uIGNhbiBzYWZlbHkgZnJlZSBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXczKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqKnNlc3Npb25fcHRyLCBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgdm9pZCAqdXNlcl9kYXRhLCBjb25zdCBuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBGcmVlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgfHNlc3Npb258LiAgSWYgfHNlc3Npb258IGlzCisgKiBgYE5VTExgYCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9zZXNzaW9uX2RlbChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNlbmRzIHBlbmRpbmcgZnJhbWVzIHRvIHRoZSByZW1vdGUgcGVlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgaGlnaGVzdCBwcmlvcml0aXplZCBmcmFtZSBmcm9tIHRoZQorICogb3V0Ym91bmQgcXVldWUgYW5kIHNlbmRzIGl0IHRvIHRoZSByZW1vdGUgcGVlci4gIEl0IGRvZXMgdGhpcyBhcworICogbWFueSBhcyBwb3NzaWJsZSB1bnRpbCB0aGUgdXNlciBjYWxsYmFjaworICogOnR5cGU6YG5naHR0cDJfc2VuZF9jYWxsYmFja2AgcmV0dXJucworICogOmVudW06YE5HSFRUUDJfRVJSX1dPVUxEQkxPQ0tgIG9yIHRoZSBvdXRib3VuZCBxdWV1ZSBiZWNvbWVzIGVtcHR5LgorICogVGhpcyBmdW5jdGlvbiBjYWxscyBzZXZlcmFsIGNhbGxiYWNrIGZ1bmN0aW9ucyB3aGljaCBhcmUgcGFzc2VkCisgKiB3aGVuIGluaXRpYWxpemluZyB0aGUgfHNlc3Npb258LiAgSGVyZSBpcyB0aGUgc2ltcGxlIHRpbWUgY2hhcnQKKyAqIHdoaWNoIHRlbGxzIHdoZW4gZWFjaCBjYWxsYmFjayBpcyBpbnZva2VkOgorICoKKyAqIDEuIEdldCB0aGUgbmV4dCBmcmFtZSB0byBzZW5kIGZyb20gb3V0Ym91bmQgcXVldWUuCisgKgorICogMi4gUHJlcGFyZSB0cmFuc21pc3Npb24gb2YgdGhlIGZyYW1lLgorICoKKyAqIDMuIElmIHRoZSBjb250cm9sIGZyYW1lIGNhbm5vdCBiZSBzZW50IGJlY2F1c2Ugc29tZSBwcmVjb25kaXRpb25zCisgKiAgICBhcmUgbm90IG1ldCAoZS5nLiwgcmVxdWVzdCBIRUFERVJTIGNhbm5vdCBiZSBzZW50IGFmdGVyIEdPQVdBWSksCisgKiAgICA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFja2AgaXMgaW52b2tlZC4gIEFib3J0CisgKiAgICB0aGUgZm9sbG93aW5nIHN0ZXBzLgorICoKKyAqIDQuIElmIHRoZSBmcmFtZSBpcyBIRUFERVJTLCBQVVNIX1BST01JU0Ugb3IgREFUQSwKKyAqICAgIDp0eXBlOmBuZ2h0dHAyX3NlbGVjdF9wYWRkaW5nX2NhbGxiYWNrYCBpcyBpbnZva2VkLgorICoKKyAqIDUuIElmIHRoZSBmcmFtZSBpcyByZXF1ZXN0IEhFQURFUlMsIHRoZSBzdHJlYW0gaXMgb3BlbmVkIGhlcmUuCisgKgorICogNi4gOnR5cGU6YG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2tgIGlzIGludm9rZWQuCisgKgorICogNy4gSWYgOmVudW06YE5HSFRUUDJfRVJSX0NBTkNFTGAgaXMgcmV0dXJuZWQgZnJvbQorICogICAgOnR5cGU6YG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2tgLCB0aGUgY3VycmVudCBmcmFtZQorICogICAgdHJhbnNtaXNzaW9uIGlzIGNhbmNlbGVkLCBhbmQKKyAqICAgIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrYCBpcyBpbnZva2VkLiAgQWJvcnQKKyAqICAgIHRoZSBmb2xsb3dpbmcgc3RlcHMuCisgKgorICogOC4gOnR5cGU6YG5naHR0cDJfc2VuZF9jYWxsYmFja2AgaXMgaW52b2tlZCBvbmUgb3IgbW9yZSB0aW1lcyB0bworICogICAgc2VuZCB0aGUgZnJhbWUuCisgKgorICogOS4gOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfc2VuZF9jYWxsYmFja2AgaXMgaW52b2tlZC4KKyAqCisgKiAxMC4gSWYgdGhlIHRyYW5zbWlzc2lvbiBvZiB0aGUgZnJhbWUgdHJpZ2dlcnMgY2xvc3VyZSBvZiB0aGUKKyAqICAgICBzdHJlYW0sIHRoZSBzdHJlYW0gaXMgY2xvc2VkIGFuZAorICogICAgIDp0eXBlOmBuZ2h0dHAyX29uX3N0cmVhbV9jbG9zZV9jYWxsYmFja2AgaXMgaW52b2tlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkVgCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl9zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgc2VyaWFsaXplZCBkYXRhIHRvIHNlbmQuCisgKgorICogVGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgYG5naHR0cDJfc2Vzc2lvbl9zZW5kKClgIGV4Y2VwdCB0aGF0IGl0CisgKiBkb2VzIG5vdCB1c2UgOnR5cGU6YG5naHR0cDJfc2VuZF9jYWxsYmFja2AgdG8gdHJhbnNtaXQgZGF0YS4KKyAqIEluc3RlYWQsIGl0IGFzc2lnbnMgdGhlIHBvaW50ZXIgdG8gdGhlIHNlcmlhbGl6ZWQgZGF0YSB0byB0aGUKKyAqIHwqZGF0YV9wdHJ8IGFuZCByZXR1cm5zIGl0cyBsZW5ndGguICBUaGUgb3RoZXIgY2FsbGJhY2tzIGFyZSBjYWxsZWQKKyAqIGluIHRoZSBzYW1lIHdheSBhcyB0aGV5IGFyZSBpbiBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAuCisgKgorICogSWYgbm8gZGF0YSBpcyBhdmFpbGFibGUgdG8gc2VuZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgbm90IHJldHVybiBhbGwgc2VyaWFsaXplZCBkYXRhIGluIG9uZSBpbnZvY2F0aW9uLgorICogVG8gZ2V0IGFsbCBkYXRhLCBjYWxsIHRoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSB1bnRpbCBpdCByZXR1cm5zIDAKKyAqIG9yIG9uZSBvZiBuZWdhdGl2ZSBlcnJvciBjb2Rlcy4KKyAqCisgKiBUaGUgYXNzaWduZWQgfCpkYXRhX3B0cnwgaXMgdmFsaWQgdW50aWwgdGhlIG5leHQgY2FsbCBvZgorICogYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCBvciBgbmdodHRwMl9zZXNzaW9uX3NlbmQoKWAuCisgKgorICogVGhlIGNhbGxlciBtdXN0IHNlbmQgYWxsIGRhdGEgYmVmb3JlIHNlbmRpbmcgdGhlIG5leHQgY2h1bmsgb2YKKyAqIGRhdGEuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgcG9pbnRlZCBieSB0aGUKKyAqIHwqZGF0YV9wdHJ8IGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvcgorICogY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKgorICogLi4gbm90ZTo6CisgKgorICogICBUaGlzIGZ1bmN0aW9uIG1heSBwcm9kdWNlIHZlcnkgc21hbGwgYnl0ZSBzdHJpbmcuICBJZiB0aGF0IGlzIHRoZQorICogICBjYXNlLCBhbmQgYXBwbGljYXRpb24gZGlzYWJsZXMgTmFnbGUgYWxnb3JpdGhtIChgYFRDUF9OT0RFTEFZYGApLAorICogICB0aGVuIHdyaXRpbmcgdGhpcyBzbWFsbCBjaHVuayBsZWFkcyB0byB2ZXJ5IHNtYWxsIHBhY2tldCwgYW5kIGl0CisgKiAgIGlzIHZlcnkgaW5lZmZpY2llbnQuICBBbiBhcHBsaWNhdGlvbiBzaG91bGQgYmUgcmVzcG9uc2libGUgdG8KKyAqICAgYnVmZmVyIHVwIHNtYWxsIGNodW5rcyBvZiBkYXRhIGFzIG5lY2Vzc2FyeSB0byBhdm9pZCB0aGlzCisgKiAgIHNpdHVhdGlvbi4KKyAqLworTkdIVFRQMl9FWFRFUk4gc3NpemVfdCBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqKmRhdGFfcHRyKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZWNlaXZlcyBmcmFtZXMgZnJvbSB0aGUgcmVtb3RlIHBlZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWNlaXZlcyBhcyBtYW55IGZyYW1lcyBhcyBwb3NzaWJsZSB1bnRpbCB0aGUgdXNlcgorICogY2FsbGJhY2sgOnR5cGU6YG5naHR0cDJfcmVjdl9jYWxsYmFja2AgcmV0dXJucworICogOmVudW06YE5HSFRUUDJfRVJSX1dPVUxEQkxPQ0tgLiAgVGhpcyBmdW5jdGlvbiBjYWxscyBzZXZlcmFsCisgKiBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggYXJlIHBhc3NlZCB3aGVuIGluaXRpYWxpemluZyB0aGUKKyAqIHxzZXNzaW9ufC4gIEhlcmUgaXMgdGhlIHNpbXBsZSB0aW1lIGNoYXJ0IHdoaWNoIHRlbGxzIHdoZW4gZWFjaAorICogY2FsbGJhY2sgaXMgaW52b2tlZDoKKyAqCisgKiAxLiA6dHlwZTpgbmdodHRwMl9yZWN2X2NhbGxiYWNrYCBpcyBpbnZva2VkIG9uZSBvciBtb3JlIHRpbWVzIHRvCisgKiAgICByZWNlaXZlIGZyYW1lIGhlYWRlci4KKyAqCisgKiAyLiBXaGVuIGZyYW1lIGhlYWRlciBpcyByZWNlaXZlZCwKKyAqICAgIDp0eXBlOmBuZ2h0dHAyX29uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrYCBpcyBpbnZva2VkLgorICoKKyAqIDMuIElmIHRoZSBmcmFtZSBpcyBEQVRBIGZyYW1lOgorICoKKyAqICAgIDEuIDp0eXBlOmBuZ2h0dHAyX3JlY3ZfY2FsbGJhY2tgIGlzIGludm9rZWQgdG8gcmVjZWl2ZSBEQVRBCisgKiAgICAgICBwYXlsb2FkLiBGb3IgZWFjaCBjaHVuayBvZiBkYXRhLAorICogICAgICAgOnR5cGU6YG5naHR0cDJfb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrYCBpcyBpbnZva2VkLgorICoKKyAqICAgIDIuIElmIG9uZSBEQVRBIGZyYW1lIGlzIGNvbXBsZXRlbHkgcmVjZWl2ZWQsCisgKiAgICAgICA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrYCBpcyBpbnZva2VkLiAgSWYgdGhlCisgKiAgICAgICByZWNlcHRpb24gb2YgdGhlIGZyYW1lIHRyaWdnZXJzIHRoZSBjbG9zdXJlIG9mIHRoZSBzdHJlYW0sCisgKiAgICAgICA6dHlwZTpgbmdodHRwMl9vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2tgIGlzIGludm9rZWQuCisgKgorICogNC4gSWYgdGhlIGZyYW1lIGlzIHRoZSBjb250cm9sIGZyYW1lOgorICoKKyAqICAgIDEuIDp0eXBlOmBuZ2h0dHAyX3JlY3ZfY2FsbGJhY2tgIGlzIGludm9rZWQgb25lIG9yIG1vcmUgdGltZXMgdG8KKyAqICAgICAgIHJlY2VpdmUgd2hvbGUgZnJhbWUuCisgKgorICogICAgMi4gSWYgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIHZhbGlkLCB0aGVuIGZvbGxvd2luZyBhY3Rpb25zIGFyZQorICogICAgICAgdGFrZW4uICBJZiB0aGUgZnJhbWUgaXMgZWl0aGVyIEhFQURFUlMgb3IgUFVTSF9QUk9NSVNFLAorICogICAgICAgOnR5cGU6YG5naHR0cDJfb25fYmVnaW5faGVhZGVyc19jYWxsYmFja2AgaXMgaW52b2tlZC4gIFRoZW4KKyAqICAgICAgIDp0eXBlOmBuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFja2AgaXMgaW52b2tlZCBmb3IgZWFjaCBoZWFkZXIKKyAqICAgICAgIG5hbWUvdmFsdWUgcGFpci4gIEZvciBpbnZhbGlkIGhlYWRlciBmaWVsZCwKKyAqICAgICAgIDp0eXBlOmBuZ2h0dHAyX29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrYCBpcyBjYWxsZWQuICBBZnRlcgorICogICAgICAgYWxsIG5hbWUvdmFsdWUgcGFpcnMgYXJlIGVtaXR0ZWQgc3VjY2Vzc2Z1bGx5LAorICogICAgICAgOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2AgaXMgaW52b2tlZC4gIEZvciBvdGhlcgorICogICAgICAgZnJhbWVzLCA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrYCBpcyBpbnZva2VkLgorICogICAgICAgSWYgdGhlIHJlY2VwdGlvbiBvZiB0aGUgZnJhbWUgdHJpZ2dlcnMgdGhlIGNsb3N1cmUgb2YgdGhlCisgKiAgICAgICBzdHJlYW0sIDp0eXBlOmBuZ2h0dHAyX29uX3N0cmVhbV9jbG9zZV9jYWxsYmFja2AgaXMgaW52b2tlZC4KKyAqCisgKiAgICAzLiBJZiB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgdW5wYWNrZWQgYnV0IGlzIGludGVycHJldGVkIGFzCisgKiAgICAgICBpbnZhbGlkLCA6dHlwZTpgbmdodHRwMl9vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2tgIGlzCisgKiAgICAgICBpbnZva2VkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX0VPRmAKKyAqICAgICBUaGUgcmVtb3RlIHBlZXIgZGlkIHNodXRkb3duIG9uIHRoZSBjb25uZWN0aW9uLgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRWAKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX0JBRF9DTElFTlRfTUFHSUNgCisgKiAgICAgSW52YWxpZCBjbGllbnQgbWFnaWMgd2FzIGRldGVjdGVkLiAgVGhpcyBlcnJvciBvbmx5IHJldHVybnMKKyAqICAgICB3aGVuIHxzZXNzaW9ufCB3YXMgY29uZmlndXJlZCBhcyBzZXJ2ZXIgYW5kCisgKiAgICAgYG5naHR0cDJfb3B0aW9uX3NldF9ub19yZWN2X2NsaWVudF9tYWdpYygpYCBpcyBub3QgdXNlZCB3aXRoCisgKiAgICAgbm9uemVybyB2YWx1ZS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9GTE9PREVEYAorICogICAgIEZsb29kaW5nIHdhcyBkZXRlY3RlZCBpbiB0aGlzIEhUVFAvMiBzZXNzaW9uLCBhbmQgaXQgbXVzdCBiZQorICogICAgIGNsb3NlZC4gIFRoaXMgaXMgbW9zdCBsaWtlbHkgY2F1c2VkIGJ5IG1pc2JlaGF2aW91ciBvZiBwZWVyLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX3JlY3YobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBQcm9jZXNzZXMgZGF0YSB8aW58IGFzIGFuIGlucHV0IGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludC4gIFRoZQorICogfGlubGVufCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgfGlufC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGJlaGF2ZXMgbGlrZSBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgZXhjZXB0IHRoYXQgaXQKKyAqIGRvZXMgbm90IHVzZSA6dHlwZTpgbmdodHRwMl9yZWN2X2NhbGxiYWNrYCB0byByZWNlaXZlIGRhdGE7IHRoZQorICogfGlufCBpcyB0aGUgb25seSBkYXRhIGZvciB0aGUgaW52b2NhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiAgSWYgYWxsCisgKiBieXRlcyBhcmUgcHJvY2Vzc2VkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMuICBUaGUgb3RoZXIgY2FsbGJhY2tzCisgKiBhcmUgY2FsbGVkIGluIHRoZSBzYW1lIHdheSBhcyB0aGV5IGFyZSBpbiBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAuCisgKgorICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHRyaWVzIHRvCisgKiBwcm9jZXNzZXMgYWxsIGlucHV0IGRhdGEgdW5sZXNzIGVpdGhlciBhbiBlcnJvciBvY2N1cnMgb3IKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9QQVVTRWAgaXMgcmV0dXJuZWQgZnJvbQorICogOnR5cGU6YG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrYCBvcgorICogOnR5cGU6YG5naHR0cDJfb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrYC4gIElmCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfUEFVU0VgIGlzIHVzZWQsIHRoZSByZXR1cm4gdmFsdWUgaW5jbHVkZXMgdGhlCisgKiBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggd2FzIHVzZWQgdG8gcHJvZHVjZSB0aGUgZGF0YSBvciBmcmFtZSBmb3IgdGhlCisgKiBjYWxsYmFjay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBwcm9jZXNzZWQgYnl0ZXMsIG9yIG9uZSBvZiB0aGUKKyAqIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFYAorICogICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBmYWlsZWQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQkFEX0NMSUVOVF9NQUdJQ2AKKyAqICAgICBJbnZhbGlkIGNsaWVudCBtYWdpYyB3YXMgZGV0ZWN0ZWQuICBUaGlzIGVycm9yIG9ubHkgcmV0dXJucworICogICAgIHdoZW4gfHNlc3Npb258IHdhcyBjb25maWd1cmVkIGFzIHNlcnZlciBhbmQKKyAqICAgICBgbmdodHRwMl9vcHRpb25fc2V0X25vX3JlY3ZfY2xpZW50X21hZ2ljKClgIGlzIG5vdCB1c2VkIHdpdGgKKyAqICAgICBub256ZXJvIHZhbHVlLgorICogOmVudW06YE5HSFRUUDJfRVJSX0ZMT09ERURgCisgKiAgICAgRmxvb2Rpbmcgd2FzIGRldGVjdGVkIGluIHRoaXMgSFRUUC8yIHNlc3Npb24sIGFuZCBpdCBtdXN0IGJlCisgKiAgICAgY2xvc2VkLiAgVGhpcyBpcyBtb3N0IGxpa2VseSBjYXVzZWQgYnkgbWlzYmVoYXZpb3VyIG9mIHBlZXIuCisgKi8KK05HSFRUUDJfRVhURVJOIHNzaXplX3QgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlubGVuKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBQdXRzIGJhY2sgcHJldmlvdXNseSBkZWZlcnJlZCBEQVRBIGZyYW1lIGluIHRoZSBzdHJlYW0gfHN0cmVhbV9pZHwKKyAqIHRvIHRoZSBvdXRib3VuZCBxdWV1ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSBzdHJlYW0gZG9lcyBub3QgZXhpc3Q7IG9yIG5vIGRlZmVycmVkIGRhdGEgZXhpc3QuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIG5vbnplcm8gdmFsdWUgaWYgfHNlc3Npb258IHdhbnRzIHRvIHJlY2VpdmUgZGF0YSBmcm9tIHRoZQorICogcmVtb3RlIHBlZXIuCisgKgorICogSWYgYm90aCBgbmdodHRwMl9zZXNzaW9uX3dhbnRfcmVhZCgpYCBhbmQKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fd2FudF93cml0ZSgpYCByZXR1cm4gMCwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZAorICogZHJvcCB0aGUgY29ubmVjdGlvbi4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl93YW50X3JlYWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIG5vbnplcm8gdmFsdWUgaWYgfHNlc3Npb258IHdhbnRzIHRvIHNlbmQgZGF0YSB0byB0aGUgcmVtb3RlCisgKiBwZWVyLgorICoKKyAqIElmIGJvdGggYG5naHR0cDJfc2Vzc2lvbl93YW50X3JlYWQoKWAgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX3dhbnRfd3JpdGUoKWAgcmV0dXJuIDAsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAqIGRyb3AgdGhlIGNvbm5lY3Rpb24uCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fd2FudF93cml0ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgc3RyZWFtX3VzZXJfZGF0YSBmb3IgdGhlIHN0cmVhbSB8c3RyZWFtX2lkfC4gIFRoZQorICogc3RyZWFtX3VzZXJfZGF0YSBpcyBwcm92aWRlZCBieSBgbmdodHRwMl9zdWJtaXRfcmVxdWVzdCgpYCwKKyAqIGBuZ2h0dHAyX3N1Ym1pdF9oZWFkZXJzKClgIG9yCisgKiBgbmdodHRwMl9zZXNzaW9uX3NldF9zdHJlYW1fdXNlcl9kYXRhKClgLiAgVW5sZXNzIGl0IGlzIHNldCB1c2luZworICogYG5naHR0cDJfc2Vzc2lvbl9zZXRfc3RyZWFtX3VzZXJfZGF0YSgpYCwgaWYgdGhlIHN0cmVhbSBpcworICogaW5pdGlhdGVkIGJ5IHRoZSByZW1vdGUgZW5kcG9pbnQsIHN0cmVhbV91c2VyX2RhdGEgaXMgYWx3YXlzCisgKiBgYE5VTExgYC4gIElmIHRoZSBzdHJlYW0gZG9lcyBub3QgZXhpc3QsIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICogYGBOVUxMYGAuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgKgorbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fdXNlcl9kYXRhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyB0aGUgfHN0cmVhbV91c2VyX2RhdGF8IHRvIHRoZSBzdHJlYW0gZGVub3RlZCBieSB0aGUKKyAqIHxzdHJlYW1faWR8LiAgSWYgYSBzdHJlYW0gdXNlciBkYXRhIGlzIGFscmVhZHkgc2V0IHRvIHRoZSBzdHJlYW0sCisgKiBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSB8c3RyZWFtX3VzZXJfZGF0YXwuICBJdCBpcyB2YWxpZCB0byBzcGVjaWZ5CisgKiBgYE5VTExgYCBpbiB0aGUgfHN0cmVhbV91c2VyX2RhdGF8LCB3aGljaCBudWxsaWZpZXMgdGhlIGFzc29jaWF0ZWQKKyAqIGRhdGEgcG9pbnRlci4KKyAqCisgKiBJdCBpcyB2YWxpZCB0byBzZXQgdGhlIHxzdHJlYW1fdXNlcl9kYXRhfCB0byB0aGUgc3RyZWFtIHJlc2VydmVkIGJ5CisgKiBQVVNIX1BST01JU0UgZnJhbWUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSBzdHJlYW0gZG9lcyBub3QgZXhpc3QKKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fc2V0X3N0cmVhbV91c2VyX2RhdGEobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLCB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTZXRzIHx1c2VyX2RhdGF8IHRvIHxzZXNzaW9ufCwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nIHVzZXIgZGF0YQorICogc3BlY2lmaWVkIGluIGBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldygpYCwgb3IKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldygpYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX3Nlc3Npb25fc2V0X3VzZXJfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgb3V0Ym91bmQgcXVldWUuICBUaGlzIGRvZXMgbm90CisgKiBpbmNsdWRlIHRoZSBkZWZlcnJlZCBEQVRBIGZyYW1lcy4KKyAqLworTkdIVFRQMl9FWFRFUk4gc2l6ZV90CituZ2h0dHAyX3Nlc3Npb25fZ2V0X291dGJvdW5kX3F1ZXVlX3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgREFUQSBwYXlsb2FkIGluIGJ5dGVzIHJlY2VpdmVkIHdpdGhvdXQKKyAqIFdJTkRPV19VUERBVEUgdHJhbnNtaXNzaW9uIGZvciB0aGUgc3RyZWFtIHxzdHJlYW1faWR8LiAgVGhlIGxvY2FsCisgKiAocmVjZWl2ZSkgd2luZG93IHNpemUgY2FuIGJlIGFkanVzdGVkIGJ5CisgKiBgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZSgpYC4gIFRoaXMgZnVuY3Rpb24gdGFrZXMgaW50byBhY2NvdW50CisgKiB0aGF0IGFuZCByZXR1cm5zIGVmZmVjdGl2ZSBkYXRhIGxlbmd0aC4gIEluIHBhcnRpY3VsYXIsIGlmIHRoZQorICogbG9jYWwgd2luZG93IHNpemUgaXMgcmVkdWNlZCBieSBzdWJtaXR0aW5nIG5lZ2F0aXZlCisgKiB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgd2l0aCBgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZSgpYCwgdGhpcworICogZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlc3MgdGhhbiBhY3R1YWxseSByZWNlaXZlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLTEgaWYgaXQgZmFpbHMuCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QgbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fZWZmZWN0aXZlX3JlY3ZfZGF0YV9sZW5ndGgoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgbG9jYWwgKHJlY2VpdmUpIHdpbmRvdyBzaXplIGZvciB0aGUgc3RyZWFtIHxzdHJlYW1faWR8LgorICogVGhlIGxvY2FsIHdpbmRvdyBzaXplIGNhbiBiZSBhZGp1c3RlZCBieQorICogYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAuICBUaGlzIGZ1bmN0aW9uIHRha2VzIGludG8gYWNjb3VudAorICogdGhhdCBhbmQgcmV0dXJucyBlZmZlY3RpdmUgd2luZG93IHNpemUuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGUgYW1vdW50IG9mIHJlY2VpdmVkCisgKiBkYXRhIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludC4gIFVzZQorICogYG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2xvY2FsX3dpbmRvd19zaXplKClgIHRvIGtub3cgdGhlIGFtb3VudAorICogb2YgZGF0YSB0aGUgcmVtb3RlIGVuZHBvaW50IGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIHN0cmVhbSBsZXZlbAorICogV0lORE9XX1VQREFURSBmcmFtZS4gIE5vdGUgdGhhdCBlYWNoIHN0cmVhbSBpcyBzdGlsbCBzdWJqZWN0IHRvIHRoZQorICogY29ubmVjdGlvbiBsZXZlbCBmbG93IGNvbnRyb2wuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xIGlmIGl0IGZhaWxzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2VmZmVjdGl2ZV9sb2NhbF93aW5kb3dfc2l6ZSgKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgZmxvdy1jb250cm9sbGVkIHBheWxvYWQgKGUuZy4sIERBVEEpIHRoYXQgdGhlCisgKiByZW1vdGUgZW5kcG9pbnQgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgc3RyZWFtIGxldmVsCisgKiBXSU5ET1dfVVBEQVRFIGZyYW1lLiAgSXQgaXMgYWxzbyBzdWJqZWN0IHRvIHRoZSBjb25uZWN0aW9uIGxldmVsCisgKiBmbG93IGNvbnRyb2wuICBTbyB0aGUgYWN0dWFsIGFtb3VudCBvZiBkYXRhIHRvIHNlbmQgaXMKKyAqIG1pbihgbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fbG9jYWxfd2luZG93X3NpemUoKWAsCisgKiBgbmdodHRwMl9zZXNzaW9uX2dldF9sb2NhbF93aW5kb3dfc2l6ZSgpYCkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xIGlmIGl0IGZhaWxzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2xvY2FsX3dpbmRvd19zaXplKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBEQVRBIHBheWxvYWQgaW4gYnl0ZXMgcmVjZWl2ZWQgd2l0aG91dAorICogV0lORE9XX1VQREFURSB0cmFuc21pc3Npb24gZm9yIGEgY29ubmVjdGlvbi4gIFRoZSBsb2NhbCAocmVjZWl2ZSkKKyAqIHdpbmRvdyBzaXplIGNhbiBiZSBhZGp1c3RlZCBieSBgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZSgpYC4KKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgaW50byBhY2NvdW50IHRoYXQgYW5kIHJldHVybnMgZWZmZWN0aXZlIGRhdGEKKyAqIGxlbmd0aC4gIEluIHBhcnRpY3VsYXIsIGlmIHRoZSBsb2NhbCB3aW5kb3cgc2l6ZSBpcyByZWR1Y2VkIGJ5CisgKiBzdWJtaXR0aW5nIG5lZ2F0aXZlIHdpbmRvd19zaXplX2luY3JlbWVudCB3aXRoCisgKiBgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZSgpYCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIKKyAqIG9mIGJ5dGVzIGxlc3MgdGhhbiBhY3R1YWxseSByZWNlaXZlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLTEgaWYgaXQgZmFpbHMuCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfZWZmZWN0aXZlX3JlY3ZfZGF0YV9sZW5ndGgobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBsb2NhbCAocmVjZWl2ZSkgd2luZG93IHNpemUgZm9yIGEgY29ubmVjdGlvbi4gIFRoZQorICogbG9jYWwgd2luZG93IHNpemUgY2FuIGJlIGFkanVzdGVkIGJ5CisgKiBgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZSgpYC4gIFRoaXMgZnVuY3Rpb24gdGFrZXMgaW50byBhY2NvdW50CisgKiB0aGF0IGFuZCByZXR1cm5zIGVmZmVjdGl2ZSB3aW5kb3cgc2l6ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHRoZSBhbW91bnQgb2YgcmVjZWl2ZWQKKyAqIGRhdGEgZnJvbSB0aGUgcmVtb3RlIGVuZHBvaW50LiAgVXNlCisgKiBgbmdodHRwMl9zZXNzaW9uX2dldF9sb2NhbF93aW5kb3dfc2l6ZSgpYCB0byBrbm93IHRoZSBhbW91bnQgb2YKKyAqIGRhdGEgdGhlIHJlbW90ZSBlbmRwb2ludCBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZworICogY29ubmVjdGlvbi1sZXZlbCBXSU5ET1dfVVBEQVRFIGZyYW1lLiAgTm90ZSB0aGF0IGVhY2ggc3RyZWFtIGlzCisgKiBzdGlsbCBzdWJqZWN0IHRvIHRoZSBzdHJlYW0gbGV2ZWwgZmxvdyBjb250cm9sLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBpdCBmYWlscy4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50MzJfdAorbmdodHRwMl9zZXNzaW9uX2dldF9lZmZlY3RpdmVfbG9jYWxfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgZmxvdy1jb250cm9sbGVkIHBheWxvYWQgKGUuZy4sIERBVEEpIHRoYXQgdGhlCisgKiByZW1vdGUgZW5kcG9pbnQgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgY29ubmVjdGlvbiBsZXZlbAorICogV0lORE9XX1VQREFURSBmcmFtZS4gIE5vdGUgdGhhdCBlYWNoIHN0cmVhbSBpcyBzdGlsbCBzdWJqZWN0IHRvIHRoZQorICogc3RyZWFtIGxldmVsIGZsb3cgY29udHJvbCAoc2VlCisgKiBgbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fbG9jYWxfd2luZG93X3NpemUoKWApLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiBpdCBmYWlscy4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50MzJfdAorbmdodHRwMl9zZXNzaW9uX2dldF9sb2NhbF93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHJlbW90ZSB3aW5kb3cgc2l6ZSBmb3IgYSBnaXZlbiBzdHJlYW0gfHN0cmVhbV9pZHwuCisgKgorICogVGhpcyBpcyB0aGUgYW1vdW50IG9mIGZsb3ctY29udHJvbGxlZCBwYXlsb2FkIChlLmcuLCBEQVRBKSB0aGF0IHRoZQorICogbG9jYWwgZW5kcG9pbnQgY2FuIHNlbmQgd2l0aG91dCBzdHJlYW0gbGV2ZWwgV0lORE9XX1VQREFURS4gIFRoZXJlCisgKiBpcyBhbHNvIGNvbm5lY3Rpb24gbGV2ZWwgZmxvdyBjb250cm9sLCBzbyB0aGUgZWZmZWN0aXZlIHNpemUgb2YKKyAqIHBheWxvYWQgdGhhdCB0aGUgbG9jYWwgZW5kcG9pbnQgY2FuIGFjdHVhbGx5IHNlbmQgaXMKKyAqIG1pbihgbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmVtb3RlX3dpbmRvd19zaXplKClgLAorICogYG5naHR0cDJfc2Vzc2lvbl9nZXRfcmVtb3RlX3dpbmRvd19zaXplKClgKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLTEgaWYgaXQgZmFpbHMuCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QgbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmVtb3RlX3dpbmRvd19zaXplKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHJlbW90ZSB3aW5kb3cgc2l6ZSBmb3IgYSBjb25uZWN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQzMl90CituZ2h0dHAyX3Nlc3Npb25fZ2V0X3JlbW90ZV93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgMSBpZiBsb2NhbCBwZWVyIGhhbGYgY2xvc2VkIHRoZSBnaXZlbiBzdHJlYW0gfHN0cmVhbV9pZHwuCisgKiBSZXR1cm5zIDAgaWYgaXQgZGlkIG5vdC4gIFJldHVybnMgLTEgaWYgbm8gc3VjaCBzdHJlYW0gZXhpc3RzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2xvY2FsX2Nsb3NlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIDEgaWYgcmVtb3RlIHBlZXIgaGFsZiBjbG9zZWQgdGhlIGdpdmVuIHN0cmVhbSB8c3RyZWFtX2lkfC4KKyAqIFJldHVybnMgMCBpZiBpdCBkaWQgbm90LiAgUmV0dXJucyAtMSBpZiBubyBzdWNoIHN0cmVhbSBleGlzdHMuCisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmVtb3RlX2Nsb3NlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBkeW5hbWljIHRhYmxlIHNpemUgb2YgSFBBQ0sgaW5mbGF0ZXIsIGluY2x1ZGluZworICogdGhlIG92ZXJoZWFkIDMyIGJ5dGVzIHBlciBlbnRyeSBkZXNjcmliZWQgaW4gUkZDIDc1NDEuCisgKi8KK05HSFRUUDJfRVhURVJOIHNpemVfdAorbmdodHRwMl9zZXNzaW9uX2dldF9oZF9pbmZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgZHluYW1pYyB0YWJsZSBzaXplIG9mIEhQQUNLIGRlZmxhdGVyIGluY2x1ZGluZworICogdGhlIG92ZXJoZWFkIDMyIGJ5dGVzIHBlciBlbnRyeSBkZXNjcmliZWQgaW4gUkZDIDc1NDEuCisgKi8KK05HSFRUUDJfRVhURVJOIHNpemVfdAorbmdodHRwMl9zZXNzaW9uX2dldF9oZF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNpZ25hbHMgdGhlIHNlc3Npb24gc28gdGhhdCB0aGUgY29ubmVjdGlvbiBzaG91bGQgYmUgdGVybWluYXRlZC4KKyAqCisgKiBUaGUgbGFzdCBzdHJlYW0gSUQgaXMgdGhlIG1pbmltdW0gdmFsdWUgYmV0d2VlbiB0aGUgc3RyZWFtIElEIG9mIGEKKyAqIHN0cmVhbSBmb3Igd2hpY2ggOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfcmVjdl9jYWxsYmFja2Agd2FzIGNhbGxlZAorICogbW9zdCByZWNlbnRseSBhbmQgdGhlIGxhc3Qgc3RyZWFtIElEIHdlIGhhdmUgc2VudCB0byB0aGUgcGVlcgorICogcHJldmlvdXNseS4KKyAqCisgKiBUaGUgfGVycm9yX2NvZGV8IGlzIHRoZSBlcnJvciBjb2RlIG9mIHRoaXMgR09BV0FZIGZyYW1lLiAgVGhlCisgKiBwcmUtZGVmaW5lZCBlcnJvciBjb2RlIGlzIG9uZSBvZiA6ZW51bTpgbmdodHRwMl9lcnJvcl9jb2RlYC4KKyAqCisgKiBBZnRlciB0aGUgdHJhbnNtaXNzaW9uLCBib3RoIGBuZ2h0dHAyX3Nlc3Npb25fd2FudF9yZWFkKClgIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl93YW50X3dyaXRlKClgIHJldHVybiAwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHNob3VsZCBiZQorICogdGVybWluYXRlZCBhZnRlciBzZW5kaW5nIEdPQVdBWS4gIElmIHRoZSByZW1haW5pbmcgc3RyZWFtcyBzaG91bGQKKyAqIGJlIHByb2Nlc3NlZCBhZnRlciBHT0FXQVksIHVzZSBgbmdodHRwMl9zdWJtaXRfZ29hd2F5KClgIGluc3RlYWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNpZ25hbHMgdGhlIHNlc3Npb24gc28gdGhhdCB0aGUgY29ubmVjdGlvbiBzaG91bGQgYmUgdGVybWluYXRlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGJlaGF2ZXMgbGlrZSBgbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uKClgLAorICogYnV0IHRoZSBsYXN0IHN0cmVhbSBJRCBjYW4gYmUgc3BlY2lmaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBmb3IgZmluZQorICogZ3JhaW5lZCBjb250cm9sIG9mIHN0cmVhbS4gIFRoZSBIVFRQLzIgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBhbGxvdworICogbGFzdF9zdHJlYW1faWQgdG8gYmUgaW5jcmVhc2VkLiAgU28gdGhlIGFjdHVhbCB2YWx1ZSBzZW50IGFzCisgKiBsYXN0X3N0cmVhbV9pZCBpcyB0aGUgbWluaW11bSB2YWx1ZSBiZXR3ZWVuIHRoZSBnaXZlbgorICogfGxhc3Rfc3RyZWFtX2lkfCBhbmQgdGhlIGxhc3Rfc3RyZWFtX2lkIHdlIGhhdmUgcHJldmlvdXNseSBzZW50IHRvCisgKiB0aGUgcGVlci4KKyAqCisgKiBUaGUgfGxhc3Rfc3RyZWFtX2lkfCBpcyBwZWVyJ3Mgc3RyZWFtIElEIG9yIDAuICBTbyBpZiB8c2Vzc2lvbnwgaXMKKyAqIGluaXRpYWxpemVkIGFzIGNsaWVudCwgfGxhc3Rfc3RyZWFtX2lkfCBtdXN0IGJlIGV2ZW4gb3IgMC4gIElmCisgKiB8c2Vzc2lvbnwgaXMgaW5pdGlhbGl6ZWQgYXMgc2VydmVyLCB8bGFzdF9zdHJlYW1faWR8IG11c3QgYmUgb2RkIG9yCisgKiAwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfGxhc3Rfc3RyZWFtX2lkfCBpcyBpbnZhbGlkLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uMihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxhc3Rfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2lnbmFscyB0byB0aGUgY2xpZW50IHRoYXQgdGhlIHNlcnZlciBzdGFydGVkIGdyYWNlZnVsIHNodXRkb3duCisgKiBwcm9jZWR1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzYWJsZSBmb3Igc2VydmVyLiAgSWYgdGhpcyBmdW5jdGlvbiBpcworICogY2FsbGVkIHdpdGggY2xpZW50IHNpZGUgc2Vzc2lvbiwgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAuCisgKgorICogVG8gZ3JhY2VmdWxseSBzaHV0ZG93biBIVFRQLzIgc2Vzc2lvbiwgc2VydmVyIHNob3VsZCBjYWxsIHRoaXMKKyAqIGZ1bmN0aW9uIHRvIHNlbmQgR09BV0FZIHdpdGggbGFzdF9zdHJlYW1faWQgKDF1IDw8IDMxKSAtIDEuICBBbmQKKyAqIGFmdGVyIHNvbWUgZGVsYXkgKGUuZy4sIDEgUlRUKSwgc2VuZCBhbm90aGVyIEdPQVdBWSB3aXRoIHRoZSBzdHJlYW0KKyAqIElEIHRoYXQgdGhlIHNlcnZlciBoYXMgc29tZSBwcm9jZXNzaW5nIHVzaW5nCisgKiBgbmdodHRwMl9zdWJtaXRfZ29hd2F5KClgLiAgU2VlIGFsc28KKyAqIGBuZ2h0dHAyX3Nlc3Npb25fZ2V0X2xhc3RfcHJvY19zdHJlYW1faWQoKWAuCisgKgorICogVW5saWtlIGBuZ2h0dHAyX3N1Ym1pdF9nb2F3YXkoKWAsIHRoaXMgZnVuY3Rpb24ganVzdCBzZW5kcyBHT0FXQVkKKyAqIGFuZCBkb2VzIG5vdGhpbmcgbW9yZS4gIFRoaXMgaXMgYSBtZXJlIGluZGljYXRpb24gdG8gdGhlIGNsaWVudAorICogdGhhdCBzZXNzaW9uIHNodXRkb3duIGlzIGltbWluZW50LiAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBjYWxsCisgKiBgbmdodHRwMl9zdWJtaXRfZ29hd2F5KClgIHdpdGggYXBwcm9wcmlhdGUgbGFzdF9zdHJlYW1faWQgYWZ0ZXIKKyAqIHRoaXMgY2FsbC4KKyAqCisgKiBJZiBvbmUgb3IgbW9yZSBHT0FXQVkgZnJhbWUgaGF2ZSBiZWVuIGFscmVhZHkgc2VudCBieSBlaXRoZXIKKyAqIGBuZ2h0dHAyX3N1Ym1pdF9nb2F3YXkoKWAgb3IgYG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbigpYCwKKyAqIHRoaXMgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEVgCisgKiAgICAgVGhlIHxzZXNzaW9ufCBpcyBpbml0aWFsaXplZCBhcyBjbGllbnQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3N1Ym1pdF9zaHV0ZG93bl9ub3RpY2UobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBTRVRUSU5HUyB8aWR8IG5vdGlmaWVkIGJ5IGEgcmVtb3RlIGVuZHBvaW50LgorICogVGhlIHxpZHwgbXVzdCBiZSBvbmUgb2YgdmFsdWVzIGRlZmluZWQgaW4KKyAqIDplbnVtOmBuZ2h0dHAyX3NldHRpbmdzX2lkYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdWludDMyX3QgbmdodHRwMl9zZXNzaW9uX2dldF9yZW1vdGVfc2V0dGluZ3MoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBuZ2h0dHAyX3NldHRpbmdzX2lkIGlkKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBTRVRUSU5HUyB8aWR8IG9mIGxvY2FsIGVuZHBvaW50IGFja25vd2xlZGdlZAorICogYnkgdGhlIHJlbW90ZSBlbmRwb2ludC4gIFRoZSB8aWR8IG11c3QgYmUgb25lIG9mIHRoZSB2YWx1ZXMgZGVmaW5lZAorICogaW4gOmVudW06YG5naHR0cDJfc2V0dGluZ3NfaWRgLgorICovCitOR0hUVFAyX0VYVEVSTiB1aW50MzJfdCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X2xvY2FsX3NldHRpbmdzKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgbmdodHRwMl9zZXR0aW5nc19pZCBpZCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogVGVsbHMgdGhlIHxzZXNzaW9ufCB0aGF0IG5leHQgc3RyZWFtIElEIGlzIHxuZXh0X3N0cmVhbV9pZHwuICBUaGUKKyAqIHxuZXh0X3N0cmVhbV9pZHwgbXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIHJldHVybmVkCisgKiBieSBgbmdodHRwMl9zZXNzaW9uX2dldF9uZXh0X3N0cmVhbV9pZCgpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8bmV4dF9zdHJlYW1faWR8IGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgdmFsdWUKKyAqICAgICBgbmdodHRwMl9zZXNzaW9uX2dldF9uZXh0X3N0cmVhbV9pZCgpYCByZXR1cm5zOyBvcgorICogICAgIHxuZXh0X3N0cmVhbV9pZHwgaXMgaW52YWxpZCAoZS5nLiwgZXZlbiBpbnRlZ2VyIGZvciBjbGllbnQsIG9yCisgKiAgICAgb2RkIGludGVnZXIgZm9yIHNlcnZlcikuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fc2V0X25leHRfc3RyZWFtX2lkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbmV4dF9zdHJlYW1faWQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIG5leHQgb3V0Z29pbmcgc3RyZWFtIElELiAgTm90aWNlIHRoYXQgcmV0dXJuIHR5cGUgaXMKKyAqIHVpbnQzMl90LiAgSWYgd2UgcnVuIG91dCBvZiBzdHJlYW0gSUQgZm9yIHRoaXMgc2Vzc2lvbiwgdGhpcworICogZnVuY3Rpb24gcmV0dXJucyAxIDw8IDMxLgorICovCitOR0hUVFAyX0VYVEVSTiB1aW50MzJfdAorbmdodHRwMl9zZXNzaW9uX2dldF9uZXh0X3N0cmVhbV9pZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFRlbGxzIHRoZSB8c2Vzc2lvbnwgdGhhdCB8c2l6ZXwgYnl0ZXMgZm9yIGEgc3RyZWFtIGRlbm90ZWQgYnkKKyAqIHxzdHJlYW1faWR8IHdlcmUgY29uc3VtZWQgYnkgYXBwbGljYXRpb24gYW5kIGFyZSByZWFkeSB0bworICogV0lORE9XX1VQREFURS4gIFRoZSBjb25zdW1lZCBieXRlcyBhcmUgY291bnRlZCB0b3dhcmRzIGJvdGgKKyAqIGNvbm5lY3Rpb24gYW5kIHN0cmVhbSBsZXZlbCBXSU5ET1dfVVBEQVRFIChzZWUKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZV9jb25uZWN0aW9uKClgIGFuZAorICogYG5naHR0cDJfc2Vzc2lvbl9jb25zdW1lX3N0cmVhbSgpYCB0byB1cGRhdGUgY29uc3VtcHRpb24KKyAqIGluZGVwZW5kZW50bHkpLiAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGhvdXQKKyAqIGF1dG9tYXRpYyB3aW5kb3cgdXBkYXRlIChzZWUKKyAqIGBuZ2h0dHAyX29wdGlvbl9zZXRfbm9fYXV0b193aW5kb3dfdXBkYXRlKClgKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxzdHJlYW1faWR8IGlzIDAuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAKKyAqICAgICBBdXRvbWF0aWMgV0lORE9XX1VQREFURSBpcyBub3QgZGlzYWJsZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIHNpemVfdCBzaXplKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBMaWtlIGBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZSgpYCwgYnV0IHRoaXMgb25seSB0ZWxscyBsaWJyYXJ5IHRoYXQKKyAqIHxzaXplfCBieXRlcyB3ZXJlIGNvbnN1bWVkIG9ubHkgZm9yIGNvbm5lY3Rpb24gbGV2ZWwuICBOb3RlIHRoYXQKKyAqIEhUVFAvMiBtYWludGFpbnMgY29ubmVjdGlvbiBhbmQgc3RyZWFtIGxldmVsIGZsb3cgY29udHJvbCB3aW5kb3dzCisgKiBpbmRlcGVuZGVudGx5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAKKyAqICAgICBBdXRvbWF0aWMgV0lORE9XX1VQREFURSBpcyBub3QgZGlzYWJsZWQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZV9jb25uZWN0aW9uKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBMaWtlIGBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZSgpYCwgYnV0IHRoaXMgb25seSB0ZWxscyBsaWJyYXJ5IHRoYXQKKyAqIHxzaXplfCBieXRlcyB3ZXJlIGNvbnN1bWVkIG9ubHkgZm9yIHN0cmVhbSBkZW5vdGVkIGJ5IHxzdHJlYW1faWR8LgorICogTm90ZSB0aGF0IEhUVFAvMiBtYWludGFpbnMgY29ubmVjdGlvbiBhbmQgc3RyZWFtIGxldmVsIGZsb3cgY29udHJvbAorICogd2luZG93cyBpbmRlcGVuZGVudGx5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfHN0cmVhbV9pZHwgaXMgMC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFYAorICogICAgIEF1dG9tYXRpYyBXSU5ET1dfVVBEQVRFIGlzIG5vdCBkaXNhYmxlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2Vzc2lvbl9jb25zdW1lX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogQ2hhbmdlcyBwcmlvcml0eSBvZiBleGlzdGluZyBzdHJlYW0gZGVub3RlZCBieSB8c3RyZWFtX2lkfC4gIFRoZQorICogbmV3IHByaW9yaXR5IHNwZWNpZmljYXRpb24gaXMgfHByaV9zcGVjfC4KKyAqCisgKiBUaGUgcHJpb3JpdHkgaXMgY2hhbmdlZCBzaWxlbnRseSBhbmQgaW5zdGFudGx5LCBhbmQgbm8gUFJJT1JJVFkKKyAqIGZyYW1lIHdpbGwgYmUgc2VudCB0byBub3RpZnkgdGhlIHBlZXIgb2YgdGhpcyBjaGFuZ2UuICBUaGlzCisgKiBmdW5jdGlvbiBtYXkgYmUgdXNlZnVsIGZvciBzZXJ2ZXIgdG8gY2hhbmdlIHRoZSBwcmlvcml0eSBvZiBwdXNoZWQKKyAqIHN0cmVhbS4KKyAqCisgKiBJZiB8c2Vzc2lvbnwgaXMgaW5pdGlhbGl6ZWQgYXMgc2VydmVyLCBhbmQgYGBwcmlfc3BlYy0+c3RyZWFtX2lkYGAKKyAqIHBvaW50cyB0byB0aGUgaWRsZSBzdHJlYW0sIHRoZSBpZGxlIHN0cmVhbSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMKKyAqIG5vdCBleGlzdC4gIFRoZSBjcmVhdGVkIGlkbGUgc3RyZWFtIHdpbGwgZGVwZW5kIG9uIHJvb3Qgc3RyZWFtCisgKiAoc3RyZWFtIDApIHdpdGggd2VpZ2h0IDE2LgorICoKKyAqIE90aGVyd2lzZSwgaWYgc3RyZWFtIGRlbm90ZWQgYnkgYGBwcmlfc3BlYy0+c3RyZWFtX2lkYGAgaXMgbm90CisgKiBmb3VuZCwgd2UgdXNlIGRlZmF1bHQgcHJpb3JpdHkgaW5zdGVhZCBvZiBnaXZlbiB8cHJpX3NwZWN8LiAgVGhhdAorICogaXMgbWFrZSBzdHJlYW0gZGVwZW5kIG9uIHJvb3Qgc3RyZWFtIHdpdGggd2VpZ2h0IDE2LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBBdHRlbXB0ZWQgdG8gZGVwZW5kIG9uIGl0c2VsZjsgb3Igbm8gc3RyZWFtIGV4aXN0IGZvciB0aGUgZ2l2ZW4KKyAqICAgICB8c3RyZWFtX2lkfDsgb3IgfHN0cmVhbV9pZHwgaXMgMAorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc2Vzc2lvbl9jaGFuZ2Vfc3RyZWFtX3ByaW9yaXR5KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYyk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogQ3JlYXRlcyBpZGxlIHN0cmVhbSB3aXRoIHRoZSBnaXZlbiB8c3RyZWFtX2lkfCwgYW5kIHByaW9yaXR5CisgKiB8cHJpX3NwZWN8LgorICoKKyAqIFRoZSBzdHJlYW0gY3JlYXRpb24gaXMgZG9uZSB3aXRob3V0IHNlbmRpbmcgUFJJT1JJVFkgZnJhbWUsIHdoaWNoCisgKiBtZWFucyB0aGF0IHBlZXIgZG9lcyBub3Qga25vdyBhYm91dCB0aGUgZXhpc3RlbmNlIG9mIHRoaXMgaWRsZQorICogc3RyZWFtIGluIHRoZSBsb2NhbCBlbmRwb2ludC4KKyAqCisgKiBSRkMgNzU0MCBkb2VzIG5vdCBkaXNhbGxvdyB0aGUgdXNlIG9mIGNyZWF0aW9uIG9mIGlkbGUgc3RyZWFtIHdpdGgKKyAqIG9kZCBvciBldmVuIHN0cmVhbSBJRCByZWdhcmRsZXNzIG9mIGNsaWVudCBvciBzZXJ2ZXIuICBTbyB0aGlzCisgKiBmdW5jdGlvbiBjYW4gY3JlYXRlIG9kZCBvciBldmVuIHN0cmVhbSBJRCByZWdhcmRsZXNzIG9mIGNsaWVudCBvcgorICogc2VydmVyLiAgQnV0IHByb2JhYmx5IGl0IGlzIGEgYml0IHNhZmVyIHRvIHVzZSB0aGUgc3RyZWFtIElEIHRoZQorICogbG9jYWwgZW5kcG9pbnQgY2FuIGluaXRpYXRlIChpbiBvdGhlciB3b3JkcywgdXNlIG9kZCBzdHJlYW0gSUQgZm9yCisgKiBjbGllbnQsIGFuZCBldmVuIHN0cmVhbSBJRCBmb3Igc2VydmVyKSwgdG8gYXZvaWQgcG90ZW50aWFsCisgKiBjb2xsaXNpb24gZnJvbSBwZWVyJ3MgaW5zdHJ1Y3Rpb24uICBBbHNvIHdlIGNhbiB1c2UKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fc2V0X25leHRfc3RyZWFtX2lkKClgIHRvIGF2b2lkIHRvIG9wZW4gY3JlYXRlZAorICogaWRsZSBzdHJlYW1zIGFjY2lkZW50YWxseSBpZiB3ZSBmb2xsb3cgdGhpcyByZWNvbW1lbmRhdGlvbi4KKyAqCisgKiBJZiB8c2Vzc2lvbnwgaXMgaW5pdGlhbGl6ZWQgYXMgc2VydmVyLCBhbmQgYGBwcmlfc3BlYy0+c3RyZWFtX2lkYGAKKyAqIHBvaW50cyB0byB0aGUgaWRsZSBzdHJlYW0sIHRoZSBpZGxlIHN0cmVhbSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMKKyAqIG5vdCBleGlzdC4gIFRoZSBjcmVhdGVkIGlkbGUgc3RyZWFtIHdpbGwgZGVwZW5kIG9uIHJvb3Qgc3RyZWFtCisgKiAoc3RyZWFtIDApIHdpdGggd2VpZ2h0IDE2LgorICoKKyAqIE90aGVyd2lzZSwgaWYgc3RyZWFtIGRlbm90ZWQgYnkgYGBwcmlfc3BlYy0+c3RyZWFtX2lkYGAgaXMgbm90CisgKiBmb3VuZCwgd2UgdXNlIGRlZmF1bHQgcHJpb3JpdHkgaW5zdGVhZCBvZiBnaXZlbiB8cHJpX3NwZWN8LiAgVGhhdAorICogaXMgbWFrZSBzdHJlYW0gZGVwZW5kIG9uIHJvb3Qgc3RyZWFtIHdpdGggd2VpZ2h0IDE2LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBBdHRlbXB0ZWQgdG8gZGVwZW5kIG9uIGl0c2VsZjsgb3Igc3RyZWFtIGRlbm90ZWQgYnkgfHN0cmVhbV9pZHwKKyAqICAgICBhbHJlYWR5IGV4aXN0czsgb3IgfHN0cmVhbV9pZHwgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRlIGlkbGUKKyAqICAgICBzdHJlYW0gKGluIG90aGVyIHdvcmRzLCBsb2NhbCBlbmRwb2ludCBoYXMgYWxyZWFkeSBvcGVuZWQKKyAqICAgICBzdHJlYW0gSUQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBzdHJlYW0gSUQ7IG9yCisgKiAgICAgfHN0cmVhbV9pZHwgaXMgMAorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc2Vzc2lvbl9jcmVhdGVfaWRsZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYyk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUGVyZm9ybXMgcG9zdC1wcm9jZXNzIG9mIEhUVFAgVXBncmFkZSByZXF1ZXN0LiAgVGhpcyBmdW5jdGlvbiBjYW4KKyAqIGJlIGNhbGxlZCBmcm9tIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIsIGJ1dCB0aGUgYmVoYXZpb3IgaXMgdmVyeQorICogZGlmZmVyZW50IGluIGVhY2ggb3RoZXIuCisgKgorICogLi4gd2FybmluZzo6CisgKgorICogICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YKKyAqICAgYG5naHR0cDJfc2Vzc2lvbl91cGdyYWRlMigpYCwgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGxhY2tzIHRoZQorICogICBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgbGlicmFyeSB0aGUgcmVxdWVzdCBtZXRob2QgdXNlZCBpbiB0aGUKKyAqICAgb3JpZ2luYWwgSFRUUCByZXF1ZXN0LiAgVGhpcyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCBmb3IgY2xpZW50CisgKiAgIHRvIHZhbGlkYXRlIGFjdHVhbCByZXNwb25zZSBib2R5IGxlbmd0aCBhZ2FpbnN0IGNvbnRlbnQtbGVuZ3RoCisgKiAgIGhlYWRlciBmaWVsZCAoc2VlIGBuZ2h0dHAyX29wdGlvbl9zZXRfbm9faHR0cF9tZXNzYWdpbmcoKWApLiAgSWYKKyAqICAgSEVBRCBpcyB1c2VkIGluIHJlcXVlc3QsIHRoZSBsZW5ndGggb2YgcmVzcG9uc2UgYm9keSBtdXN0IGJlIDAKKyAqICAgcmVnYXJkbGVzcyBvZiB2YWx1ZSBpbmNsdWRlZCBpbiBjb250ZW50LWxlbmd0aCBoZWFkZXIgZmllbGQuCisgKgorICogSWYgY2FsbGVkIGZyb20gY2xpZW50IHNpZGUsIHRoZSB8c2V0dGluZ3NfcGF5bG9hZHwgbXVzdCBiZSB0aGUKKyAqIHZhbHVlIHNlbnQgaW4gYGBIVFRQMi1TZXR0aW5nc2BgIGhlYWRlciBmaWVsZCBhbmQgbXVzdCBiZSBkZWNvZGVkCisgKiBieSBiYXNlNjR1cmwgZGVjb2Rlci4gIFRoZSB8c2V0dGluZ3NfcGF5bG9hZGxlbnwgaXMgdGhlIGxlbmd0aCBvZgorICogfHNldHRpbmdzX3BheWxvYWR8LiAgVGhlIHxzZXR0aW5nc19wYXlsb2FkfCBpcyB1bnBhY2tlZCBhbmQgaXRzCisgKiBzZXR0aW5nIHZhbHVlcyB3aWxsIGJlIHN1Ym1pdHRlZCB1c2luZyBgbmdodHRwMl9zdWJtaXRfc2V0dGluZ3MoKWAuCisgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBjb2RlIGRvZXMgbm90IG5lZWQgdG8gc3VibWl0CisgKiBTRVRUSU5HUyBieSBpdHNlbGYuICBUaGUgc3RyZWFtIHdpdGggc3RyZWFtIElEPTEgaXMgb3BlbmVkIGFuZCB0aGUKKyAqIHxzdHJlYW1fdXNlcl9kYXRhfCBpcyB1c2VkIGZvciBpdHMgc3RyZWFtX3VzZXJfZGF0YS4gIFRoZSBvcGVuZWQKKyAqIHN0cmVhbSBiZWNvbWVzIGhhbGYtY2xvc2VkIChsb2NhbCkgc3RhdGUuCisgKgorICogSWYgY2FsbGVkIGZyb20gc2VydmVyIHNpZGUsIHRoZSB8c2V0dGluZ3NfcGF5bG9hZHwgbXVzdCBiZSB0aGUKKyAqIHZhbHVlIHJlY2VpdmVkIGluIGBgSFRUUDItU2V0dGluZ3NgYCBoZWFkZXIgZmllbGQgYW5kIG11c3QgYmUKKyAqIGRlY29kZWQgYnkgYmFzZTY0dXJsIGRlY29kZXIuICBUaGUgfHNldHRpbmdzX3BheWxvYWRsZW58IGlzIHRoZQorICogbGVuZ3RoIG9mIHxzZXR0aW5nc19wYXlsb2FkfC4gIEl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIFNFVFRJTkdTCisgKiBmcmFtZSB3aXRoIHRoYXQgcGF5bG9hZCBpcyByZWNlaXZlZC4gIFRodXMsIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IKKyAqIHRoZSByZWNlcHRpb24gb2YgU0VUVElOR1MgZnJhbWUgd2lsbCBiZSBpbnZva2VkLiAgVGhlIHN0cmVhbSB3aXRoCisgKiBzdHJlYW0gSUQ9MSBpcyBvcGVuZWQuICBUaGUgfHN0cmVhbV91c2VyX2RhdGF8IGlzIGlnbm9yZWQuICBUaGUKKyAqIG9wZW5lZCBzdHJlYW0gYmVjb21lcyBoYWxmLWNsb3NlZCAocmVtb3RlKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxzZXR0aW5nc19wYXlsb2FkfCBpcyBiYWRseSBmb3JtZWQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfUFJPVE9gCisgKiAgICAgVGhlIHN0cmVhbSBJRCAxIGlzIGFscmVhZHkgdXNlZCBvciBjbG9zZWQ7IG9yIGlzIG5vdCBhdmFpbGFibGUuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3Nlc3Npb25fdXBncmFkZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc2V0dGluZ3NfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2V0dGluZ3NfcGF5bG9hZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBQZXJmb3JtcyBwb3N0LXByb2Nlc3Mgb2YgSFRUUCBVcGdyYWRlIHJlcXVlc3QuICBUaGlzIGZ1bmN0aW9uIGNhbgorICogYmUgY2FsbGVkIGZyb20gYm90aCBjbGllbnQgYW5kIHNlcnZlciwgYnV0IHRoZSBiZWhhdmlvciBpcyB2ZXJ5CisgKiBkaWZmZXJlbnQgaW4gZWFjaCBvdGhlci4KKyAqCisgKiBJZiBjYWxsZWQgZnJvbSBjbGllbnQgc2lkZSwgdGhlIHxzZXR0aW5nc19wYXlsb2FkfCBtdXN0IGJlIHRoZQorICogdmFsdWUgc2VudCBpbiBgYEhUVFAyLVNldHRpbmdzYGAgaGVhZGVyIGZpZWxkIGFuZCBtdXN0IGJlIGRlY29kZWQKKyAqIGJ5IGJhc2U2NHVybCBkZWNvZGVyLiAgVGhlIHxzZXR0aW5nc19wYXlsb2FkbGVufCBpcyB0aGUgbGVuZ3RoIG9mCisgKiB8c2V0dGluZ3NfcGF5bG9hZHwuICBUaGUgfHNldHRpbmdzX3BheWxvYWR8IGlzIHVucGFja2VkIGFuZCBpdHMKKyAqIHNldHRpbmcgdmFsdWVzIHdpbGwgYmUgc3VibWl0dGVkIHVzaW5nIGBuZ2h0dHAyX3N1Ym1pdF9zZXR0aW5ncygpYC4KKyAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGNvZGUgZG9lcyBub3QgbmVlZCB0byBzdWJtaXQKKyAqIFNFVFRJTkdTIGJ5IGl0c2VsZi4gIFRoZSBzdHJlYW0gd2l0aCBzdHJlYW0gSUQ9MSBpcyBvcGVuZWQgYW5kIHRoZQorICogfHN0cmVhbV91c2VyX2RhdGF8IGlzIHVzZWQgZm9yIGl0cyBzdHJlYW1fdXNlcl9kYXRhLiAgVGhlIG9wZW5lZAorICogc3RyZWFtIGJlY29tZXMgaGFsZi1jbG9zZWQgKGxvY2FsKSBzdGF0ZS4KKyAqCisgKiBJZiBjYWxsZWQgZnJvbSBzZXJ2ZXIgc2lkZSwgdGhlIHxzZXR0aW5nc19wYXlsb2FkfCBtdXN0IGJlIHRoZQorICogdmFsdWUgcmVjZWl2ZWQgaW4gYGBIVFRQMi1TZXR0aW5nc2BgIGhlYWRlciBmaWVsZCBhbmQgbXVzdCBiZQorICogZGVjb2RlZCBieSBiYXNlNjR1cmwgZGVjb2Rlci4gIFRoZSB8c2V0dGluZ3NfcGF5bG9hZGxlbnwgaXMgdGhlCisgKiBsZW5ndGggb2YgfHNldHRpbmdzX3BheWxvYWR8LiAgSXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgU0VUVElOR1MKKyAqIGZyYW1lIHdpdGggdGhhdCBwYXlsb2FkIGlzIHJlY2VpdmVkLiAgVGh1cywgY2FsbGJhY2sgZnVuY3Rpb25zIGZvcgorICogdGhlIHJlY2VwdGlvbiBvZiBTRVRUSU5HUyBmcmFtZSB3aWxsIGJlIGludm9rZWQuICBUaGUgc3RyZWFtIHdpdGgKKyAqIHN0cmVhbSBJRD0xIGlzIG9wZW5lZC4gIFRoZSB8c3RyZWFtX3VzZXJfZGF0YXwgaXMgaWdub3JlZC4gIFRoZQorICogb3BlbmVkIHN0cmVhbSBiZWNvbWVzIGhhbGYtY2xvc2VkIChyZW1vdGUpLgorICoKKyAqIElmIHRoZSByZXF1ZXN0IG1ldGhvZCBpcyBIRUFELCBwYXNzIG5vbnplcm8gdmFsdWUgdG8KKyAqIHxoZWFkX3JlcXVlc3R8LiAgT3RoZXJ3aXNlLCBwYXNzIDAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8c2V0dGluZ3NfcGF5bG9hZHwgaXMgYmFkbHkgZm9ybWVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX1BST1RPYAorICogICAgIFRoZSBzdHJlYW0gSUQgMSBpcyBhbHJlYWR5IHVzZWQgb3IgY2xvc2VkOyBvciBpcyBub3QgYXZhaWxhYmxlLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zZXNzaW9uX3VwZ3JhZGUyKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc2V0dGluZ3NfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNldHRpbmdzX3BheWxvYWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWFkX3JlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNlcmlhbGl6ZXMgdGhlIFNFVFRJTkdTIHZhbHVlcyB8aXZ8IGluIHRoZSB8YnVmfC4gIFRoZSBzaXplIG9mIHRoZQorICogfGJ1ZnwgaXMgc3BlY2lmaWVkIGJ5IHxidWZsZW58LiAgVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB8aXZ8CisgKiBhcnJheSBpcyBnaXZlbiBieSB8bml2fC4gIFRoZSByZXF1aXJlZCBzcGFjZSBpbiB8YnVmfCBmb3IgdGhlIHxuaXZ8CisgKiBlbnRyaWVzIGlzIGBgNipuaXZgYCBieXRlcyBhbmQgaWYgdGhlIGdpdmVuIGJ1ZmZlciBpcyB0b28gc21hbGwsIGFuCisgKiBlcnJvciBpcyByZXR1cm5lZC4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBtYWlubHkgZm9yIGNyZWF0aW5nIGEKKyAqIFNFVFRJTkdTIHBheWxvYWQgdG8gYmUgc2VudCB3aXRoIHRoZSBgYEhUVFAyLVNldHRpbmdzYGAgaGVhZGVyCisgKiBmaWVsZCBpbiBhbiBIVFRQIFVwZ3JhZGUgcmVxdWVzdC4gIFRoZSBkYXRhIHdyaXR0ZW4gaW4gfGJ1ZnwgaXMgTk9UCisgKiBiYXNlNjR1cmwgZW5jb2RlZCBhbmQgdGhlIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmNvZGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGluIHxidWZ8LCBvciBvbmUKKyAqIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxpdnwgY29udGFpbnMgZHVwbGljYXRlIHNldHRpbmdzIElEIG9yIGludmFsaWQgdmFsdWUuCisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOU1VGRl9CVUZTSVpFYAorICogICAgIFRoZSBwcm92aWRlZCB8YnVmbGVufCBzaXplIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSBvdXRwdXQuCisgKi8KK05HSFRUUDJfRVhURVJOIHNzaXplX3QgbmdodHRwMl9wYWNrX3NldHRpbmdzX3BheWxvYWQoCisgICAgdWludDhfdCAqYnVmLCBzaXplX3QgYnVmbGVuLCBjb25zdCBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwgc2l6ZV90IG5pdik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBzdHJpbmcgZGVzY3JpYmluZyB0aGUgfGxpYl9lcnJvcl9jb2RlfC4gIFRoZQorICogfGxpYl9lcnJvcl9jb2RlfCBtdXN0IGJlIG9uZSBvZiB0aGUgOmVudW06YG5naHR0cDJfZXJyb3JgLgorICovCitOR0hUVFAyX0VYVEVSTiBjb25zdCBjaGFyICpuZ2h0dHAyX3N0cmVycm9yKGludCBsaWJfZXJyb3JfY29kZSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgSFRUUC8yIGVycm9yIGNvZGUgfGVycm9yX2NvZGV8CisgKiAoZS5nLiwgYGBQUk9UT0NPTF9FUlJPUmBgIGlzIHJldHVybmVkIGlmIGBgZXJyb3JfY29kZSA9PQorICogTkdIVFRQMl9QUk9UT0NPTF9FUlJPUmBgKS4gIElmIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyB1bmtub3duIGZvcgorICogZ2l2ZW4gfGVycm9yX2NvZGV8LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc3RyaW5nIGBgdW5rbm93bmBgLgorICovCitOR0hUVFAyX0VYVEVSTiBjb25zdCBjaGFyICpuZ2h0dHAyX2h0dHAyX3N0cmVycm9yKHVpbnQzMl90IGVycm9yX2NvZGUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEluaXRpYWxpemVzIHxwcmlfc3BlY3wgd2l0aCB0aGUgfHN0cmVhbV9pZHwgb2YgdGhlIHN0cmVhbSB0byBkZXBlbmQKKyAqIG9uIHdpdGggfHdlaWdodHwgYW5kIGl0cyBleGNsdXNpdmUgZmxhZy4gIElmIHxleGNsdXNpdmV8IGlzCisgKiBub256ZXJvLCBleGNsdXNpdmUgZmxhZyBpcyBzZXQuCisgKgorICogVGhlIHx3ZWlnaHR8IG11c3QgYmUgaW4gWzplbnVtOmBOR0hUVFAyX01JTl9XRUlHSFRgLAorICogOmVudW06YE5HSFRUUDJfTUFYX1dFSUdIVGBdLCBpbmNsdXNpdmUuCisgKi8KK05HSFRUUDJfRVhURVJOIHZvaWQgbmdodHRwMl9wcmlvcml0eV9zcGVjX2luaXQobmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgd2VpZ2h0LCBpbnQgZXhjbHVzaXZlKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBJbml0aWFsaXplcyB8cHJpX3NwZWN8IHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzLiAgVGhlIGRlZmF1bHQgdmFsdWVzCisgKiBhcmU6IHN0cmVhbV9pZCA9IDAsIHdlaWdodCA9IDptYWNybzpgTkdIVFRQMl9ERUZBVUxUX1dFSUdIVGAgYW5kCisgKiBleGNsdXNpdmUgPSAwLgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkCituZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgbm9uemVybyBpZiB0aGUgfHByaV9zcGVjfCBpcyBmaWxsZWQgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3ByaW9yaXR5X3NwZWNfY2hlY2tfZGVmYXVsdChjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTdWJtaXRzIEhFQURFUlMgZnJhbWUgYW5kIG9wdGlvbmFsbHkgb25lIG9yIG1vcmUgREFUQSBmcmFtZXMuCisgKgorICogVGhlIHxwcmlfc3BlY3wgaXMgcHJpb3JpdHkgc3BlY2lmaWNhdGlvbiBvZiB0aGlzIHJlcXVlc3QuICBgYE5VTExgYAorICogbWVhbnMgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKHNlZQorICogYG5naHR0cDJfcHJpb3JpdHlfc3BlY19kZWZhdWx0X2luaXQoKWApLiAgVG8gc3BlY2lmeSB0aGUgcHJpb3JpdHksCisgKiB1c2UgYG5naHR0cDJfcHJpb3JpdHlfc3BlY19pbml0KClgLiAgSWYgfHByaV9zcGVjfCBpcyBub3QgYGBOVUxMYGAsCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29weSBpdHMgZGF0YSBtZW1iZXJzLgorICoKKyAqIFRoZSBgYHByaV9zcGVjLT53ZWlnaHRgYCBtdXN0IGJlIGluIFs6ZW51bTpgTkdIVFRQMl9NSU5fV0VJR0hUYCwKKyAqIDplbnVtOmBOR0hUVFAyX01BWF9XRUlHSFRgXSwgaW5jbHVzaXZlLiAgSWYgYGBwcmlfc3BlYy0+d2VpZ2h0YGAgaXMKKyAqIHN0cmljdGx5IGxlc3MgdGhhbiA6ZW51bTpgTkdIVFRQMl9NSU5fV0VJR0hUYCwgaXQgYmVjb21lcworICogOmVudW06YE5HSFRUUDJfTUlOX1dFSUdIVGAuICBJZiBpdCBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4KKyAqIDplbnVtOmBOR0hUVFAyX01BWF9XRUlHSFRgLCBpdCBiZWNvbWVzIDplbnVtOmBOR0hUVFAyX01BWF9XRUlHSFRgLgorICoKKyAqIFRoZSB8bnZhfCBpcyBhbiBhcnJheSBvZiBuYW1lL3ZhbHVlIHBhaXIgOnR5cGU6YG5naHR0cDJfbnZgIHdpdGgKKyAqIHxudmxlbnwgZWxlbWVudHMuICBUaGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgdG8gaW5jbHVkZQorICogcmVxdWlyZWQgcHNldWRvLWhlYWRlciBmaWVsZHMgKGhlYWRlciBmaWVsZCB3aG9zZSBuYW1lIHN0YXJ0cyB3aXRoCisgKiAiOiIpIGluIHxudmF8IGFuZCBtdXN0IHBsYWNlIHBzZXVkby1oZWFkZXJzIGJlZm9yZSByZWd1bGFyIGhlYWRlcgorICogZmllbGRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBjb3BpZXMgb2YgYWxsIG5hbWUvdmFsdWUgcGFpcnMgaW4gfG52YXwuICBJdAorICogYWxzbyBsb3dlci1jYXNlcyBhbGwgbmFtZXMgaW4gfG52YXwuICBUaGUgb3JkZXIgb2YgZWxlbWVudHMgaW4KKyAqIHxudmF8IGlzIHByZXNlcnZlZC4gIEZvciBoZWFkZXIgZmllbGRzIHdpdGgKKyAqIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9OQU1FYCBhbmQKKyAqIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9WQUxVRWAgYXJlIHNldCwgaGVhZGVyIGZpZWxkIG5hbWUKKyAqIGFuZCB2YWx1ZSBhcmUgbm90IGNvcGllZCByZXNwZWN0aXZlbHkuICBXaXRoCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRWAsIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIHRvCisgKiBwYXNzIGhlYWRlciBmaWVsZCBuYW1lIGluIGxvd2VyY2FzZS4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAqIG1haW50YWluIHRoZSByZWZlcmVuY2VzIHRvIHRoZW0gdW50aWwKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3NlbmRfY2FsbGJhY2tgIG9yCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFja2AgaXMgY2FsbGVkLgorICoKKyAqIEhUVFAvMiBzcGVjaWZpY2F0aW9uIGhhcyByZXF1aXJlbWVudCBhYm91dCBoZWFkZXIgZmllbGRzIGluIHRoZQorICogcmVxdWVzdCBIRUFERVJTLiAgU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogSWYgfGRhdGFfcHJkfCBpcyBub3QgYGBOVUxMYGAsIGl0IHByb3ZpZGVzIGRhdGEgd2hpY2ggd2lsbCBiZSBzZW50CisgKiBpbiBzdWJzZXF1ZW50IERBVEEgZnJhbWVzLiAgSW4gdGhpcyBjYXNlLCBhIG1ldGhvZCB0aGF0IGFsbG93cworICogcmVxdWVzdCBtZXNzYWdlIGJvZGllcworICogKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNCkgbXVzdCBiZSBzcGVjaWZpZWQKKyAqIHdpdGggYGA6bWV0aG9kYGAga2V5IGluIHxudmF8IChlLmcuIGBgUE9TVGBgKS4gIFRoaXMgZnVuY3Rpb24gZG9lcworICogbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSB8ZGF0YV9wcmR8LiAgVGhlIGZ1bmN0aW9uIGNvcGllcyB0aGUKKyAqIG1lbWJlcnMgb2YgdGhlIHxkYXRhX3ByZHwuICBJZiB8ZGF0YV9wcmR8IGlzIGBgTlVMTGBgLCBIRUFERVJTIGhhdmUKKyAqIEVORF9TVFJFQU0gc2V0LiAgVGhlIHxzdHJlYW1fdXNlcl9kYXRhfCBpcyBkYXRhIGFzc29jaWF0ZWQgdG8gdGhlCisgKiBzdHJlYW0gb3BlbmVkIGJ5IHRoaXMgcmVxdWVzdCBhbmQgY2FuIGJlIGFuIGFyYml0cmFyeSBwb2ludGVyLAorICogd2hpY2ggY2FuIGJlIHJldHJpZXZlZCBsYXRlciBieQorICogYG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3VzZXJfZGF0YSgpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYXNzaWduZWQgc3RyZWFtIElEIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YKKyAqIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfU1RSRUFNX0lEX05PVF9BVkFJTEFCTEVgCisgKiAgICAgTm8gc3RyZWFtIElEIGlzIGF2YWlsYWJsZSBiZWNhdXNlIG1heGltdW0gc3RyZWFtIElEIHdhcworICogICAgIHJlYWNoZWQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUcnlpbmcgdG8gZGVwZW5kIG9uIGl0c2VsZiAobmV3IHN0cmVhbSBJRCBlcXVhbHMKKyAqICAgICBgYHByaV9zcGVjLT5zdHJlYW1faWRgYCkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfUFJPVE9gCisgKiAgICAgVGhlIHxzZXNzaW9ufCBpcyBzZXJ2ZXIgc2Vzc2lvbi4KKyAqCisgKiAuLiB3YXJuaW5nOjoKKyAqCisgKiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhc3NpZ25lZCBzdHJlYW0gSUQgaWYgaXQgc3VjY2VlZHMuICBCdXQKKyAqICAgdGhhdCBzdHJlYW0gaXMgbm90IGNyZWF0ZWQgeWV0LiAgVGhlIGFwcGxpY2F0aW9uIG11c3Qgbm90IHN1Ym1pdAorICogICBmcmFtZSB0byB0aGF0IHN0cmVhbSBJRCBiZWZvcmUKKyAqICAgOnR5cGU6YG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2tgIGlzIGNhbGxlZCBmb3IgdGhpcworICogICBmcmFtZS4gIFRoaXMgbWVhbnMgYG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3VzZXJfZGF0YSgpYCBkb2VzCisgKiAgIG5vdCB3b3JrIGJlZm9yZSB0aGUgY2FsbGJhY2suICBCdXQKKyAqICAgYG5naHR0cDJfc2Vzc2lvbl9zZXRfc3RyZWFtX3VzZXJfZGF0YSgpYCBoYW5kbGVzIHRoaXMgc2l0dWF0aW9uCisgKiAgIHNwZWNpYWxseSwgYW5kIGl0IGNhbiBzZXQgZGF0YSB0byBhIHN0cmVhbSBkdXJpbmcgdGhpcyBwZXJpb2QuCisgKgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQzMl90IG5naHR0cDJfc3VibWl0X3JlcXVlc3QoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgIGNvbnN0IG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuLCBjb25zdCBuZ2h0dHAyX2RhdGFfcHJvdmlkZXIgKmRhdGFfcHJkLAorICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgcmVzcG9uc2UgSEVBREVSUyBmcmFtZSBhbmQgb3B0aW9uYWxseSBvbmUgb3IgbW9yZSBEQVRBCisgKiBmcmFtZXMgYWdhaW5zdCB0aGUgc3RyZWFtIHxzdHJlYW1faWR8LgorICoKKyAqIFRoZSB8bnZhfCBpcyBhbiBhcnJheSBvZiBuYW1lL3ZhbHVlIHBhaXIgOnR5cGU6YG5naHR0cDJfbnZgIHdpdGgKKyAqIHxudmxlbnwgZWxlbWVudHMuICBUaGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgdG8gaW5jbHVkZQorICogcmVxdWlyZWQgcHNldWRvLWhlYWRlciBmaWVsZHMgKGhlYWRlciBmaWVsZCB3aG9zZSBuYW1lIHN0YXJ0cyB3aXRoCisgKiAiOiIpIGluIHxudmF8IGFuZCBtdXN0IHBsYWNlIHBzZXVkby1oZWFkZXJzIGJlZm9yZSByZWd1bGFyIGhlYWRlcgorICogZmllbGRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBjb3BpZXMgb2YgYWxsIG5hbWUvdmFsdWUgcGFpcnMgaW4gfG52YXwuICBJdAorICogYWxzbyBsb3dlci1jYXNlcyBhbGwgbmFtZXMgaW4gfG52YXwuICBUaGUgb3JkZXIgb2YgZWxlbWVudHMgaW4KKyAqIHxudmF8IGlzIHByZXNlcnZlZC4gIEZvciBoZWFkZXIgZmllbGRzIHdpdGgKKyAqIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9OQU1FYCBhbmQKKyAqIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9WQUxVRWAgYXJlIHNldCwgaGVhZGVyIGZpZWxkIG5hbWUKKyAqIGFuZCB2YWx1ZSBhcmUgbm90IGNvcGllZCByZXNwZWN0aXZlbHkuICBXaXRoCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRWAsIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIHRvCisgKiBwYXNzIGhlYWRlciBmaWVsZCBuYW1lIGluIGxvd2VyY2FzZS4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAqIG1haW50YWluIHRoZSByZWZlcmVuY2VzIHRvIHRoZW0gdW50aWwKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3NlbmRfY2FsbGJhY2tgIG9yCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFja2AgaXMgY2FsbGVkLgorICoKKyAqIEhUVFAvMiBzcGVjaWZpY2F0aW9uIGhhcyByZXF1aXJlbWVudCBhYm91dCBoZWFkZXIgZmllbGRzIGluIHRoZQorICogcmVzcG9uc2UgSEVBREVSUy4gIFNlZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIElmIHxkYXRhX3ByZHwgaXMgbm90IGBgTlVMTGBgLCBpdCBwcm92aWRlcyBkYXRhIHdoaWNoIHdpbGwgYmUgc2VudAorICogaW4gc3Vic2VxdWVudCBEQVRBIGZyYW1lcy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAKKyAqIG9mIHRoZSB8ZGF0YV9wcmR8LiAgVGhlIGZ1bmN0aW9uIGNvcGllcyB0aGUgbWVtYmVycyBvZiB0aGUKKyAqIHxkYXRhX3ByZHwuICBJZiB8ZGF0YV9wcmR8IGlzIGBgTlVMTGBgLCBIRUFERVJTIHdpbGwgaGF2ZQorICogRU5EX1NUUkVBTSBmbGFnIHNldC4KKyAqCisgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBhcyBub3JtYWwgSFRUUCByZXNwb25zZSBhbmQgcHVzaCByZXNwb25zZS4KKyAqIFdoZW4gcHVzaGluZyBhIHJlc291cmNlIHVzaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSB8c2Vzc2lvbnwgbXVzdCBiZQorICogY29uZmlndXJlZCB1c2luZyBgbmdodHRwMl9zZXNzaW9uX3NlcnZlcl9uZXcoKWAgb3IgaXRzIHZhcmlhbnRzIGFuZAorICogdGhlIHRhcmdldCBzdHJlYW0gZGVub3RlZCBieSB0aGUgfHN0cmVhbV9pZHwgbXVzdCBiZSByZXNlcnZlZCB1c2luZworICogYG5naHR0cDJfc3VibWl0X3B1c2hfcHJvbWlzZSgpYC4KKyAqCisgKiBUbyBzZW5kIG5vbi1maW5hbCByZXNwb25zZSBoZWFkZXJzIChlLmcuLCBIVFRQIHN0YXR1cyAxMDEpLCBkb24ndAorICogdXNlIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGhhbGYtY2xvc2VzIHRoZSBvdXRib3VuZAorICogc3RyZWFtLiAgSW5zdGVhZCwgdXNlIGBuZ2h0dHAyX3N1Ym1pdF9oZWFkZXJzKClgIGZvciB0aGlzIHB1cnBvc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8c3RyZWFtX2lkfCBpcyAwLgorICogOmVudW06YE5HSFRUUDJfRVJSX0RBVEFfRVhJU1RgCisgKiAgICAgREFUQSBvciBIRUFERVJTIGhhcyBiZWVuIGFscmVhZHkgc3VibWl0dGVkIGFuZCBub3QgZnVsbHkKKyAqICAgICBwcm9jZXNzZWQgeWV0LiAgTm9ybWFsbHksIHRoaXMgZG9lcyBub3QgaGFwcGVuLCBidXQgd2hlbgorICogICAgIGFwcGxpY2F0aW9uIHdyb25nbHkgY2FsbHMgYG5naHR0cDJfc3VibWl0X3Jlc3BvbnNlKClgIHR3aWNlLAorICogICAgIHRoaXMgbWF5IGhhcHBlbi4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9QUk9UT2AKKyAqICAgICBUaGUgfHNlc3Npb258IGlzIGNsaWVudCBzZXNzaW9uLgorICoKKyAqIC4uIHdhcm5pbmc6OgorICoKKyAqICAgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHR3aWNlIGZvciB0aGUgc2FtZSBzdHJlYW0gSUQgbWF5IGxlYWQgdG8KKyAqICAgcHJvZ3JhbSBjcmFzaC4gIEl0IGlzIGdlbmVyYWxseSBjb25zaWRlcmVkIHRvIGEgcHJvZ3JhbW1pbmcgZXJyb3IKKyAqICAgdG8gY29tbWl0IHJlc3BvbnNlIHR3aWNlLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc3VibWl0X3Jlc3BvbnNlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZGF0YV9wcm92aWRlciAqZGF0YV9wcmQpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgdHJhaWxlciBmaWVsZHMgSEVBREVSUyBhZ2FpbnN0IHRoZSBzdHJlYW0gfHN0cmVhbV9pZHwuCisgKgorICogVGhlIHxudmF8IGlzIGFuIGFycmF5IG9mIG5hbWUvdmFsdWUgcGFpciA6dHlwZTpgbmdodHRwMl9udmAgd2l0aAorICogfG52bGVufCBlbGVtZW50cy4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IG5vdCBpbmNsdWRlIHBzZXVkby1oZWFkZXIKKyAqIGZpZWxkcyAoaGVhZGVycyB3aG9zZSBuYW1lcyBzdGFydHMgd2l0aCAiOiIpIGluIHxudmF8LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBjb3BpZXMgb2YgYWxsIG5hbWUvdmFsdWUgcGFpcnMgaW4gfG52YXwuICBJdAorICogYWxzbyBsb3dlci1jYXNlcyBhbGwgbmFtZXMgaW4gfG52YXwuICBUaGUgb3JkZXIgb2YgZWxlbWVudHMgaW4KKyAqIHxudmF8IGlzIHByZXNlcnZlZC4gIEZvciBoZWFkZXIgZmllbGRzIHdpdGgKKyAqIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9OQU1FYCBhbmQKKyAqIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9WQUxVRWAgYXJlIHNldCwgaGVhZGVyIGZpZWxkIG5hbWUKKyAqIGFuZCB2YWx1ZSBhcmUgbm90IGNvcGllZCByZXNwZWN0aXZlbHkuICBXaXRoCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRWAsIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIHRvCisgKiBwYXNzIGhlYWRlciBmaWVsZCBuYW1lIGluIGxvd2VyY2FzZS4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAqIG1haW50YWluIHRoZSByZWZlcmVuY2VzIHRvIHRoZW0gdW50aWwKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3NlbmRfY2FsbGJhY2tgIG9yCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFja2AgaXMgY2FsbGVkLgorICoKKyAqIEZvciBzZXJ2ZXIsIHRyYWlsZXIgZmllbGRzIG11c3QgZm9sbG93IHJlc3BvbnNlIEhFQURFUlMgb3IgcmVzcG9uc2UKKyAqIERBVEEgd2l0aG91dCBFTkRfU1RSRUFNIGZsYXQgc2V0LiAgVGhlIGxpYnJhcnkgZG9lcyBub3QgZW5mb3JjZQorICogdGhpcyByZXF1aXJlbWVudCwgYW5kIGFwcGxpY2F0aW9ucyBzaG91bGQgZG8gdGhpcyBmb3IgdGhlbXNlbHZlcy4KKyAqIElmIGBuZ2h0dHAyX3N1Ym1pdF90cmFpbGVyKClgIGlzIGNhbGxlZCBiZWZvcmUgYW55IHJlc3BvbnNlIEhFQURFUlMKKyAqIHN1Ym1pc3Npb24gKHVzdWFsbHkgYnkgYG5naHR0cDJfc3VibWl0X3Jlc3BvbnNlKClgKSwgdGhlIGNvbnRlbnQgb2YKKyAqIHxudmF8IHdpbGwgYmUgc2VudCBhcyByZXNwb25zZSBoZWFkZXJzLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBlcnJvci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZSBlZmZlY3Qgd2l0aCBgbmdodHRwMl9zdWJtaXRfaGVhZGVycygpYCwKKyAqIHdpdGggZmxhZ3MgPSA6ZW51bTpgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU1gIGFuZCBib3RoIHByaV9zcGVjIGFuZAorICogc3RyZWFtX3VzZXJfZGF0YSB0byBOVUxMLgorICoKKyAqIFRvIHN1Ym1pdCB0cmFpbGVyIGZpZWxkcyBhZnRlciBgbmdodHRwMl9zdWJtaXRfcmVzcG9uc2UoKWAgaXMKKyAqIGNhbGxlZCwgdGhlIGFwcGxpY2F0aW9uIGhhcyB0byBzcGVjaWZ5CisgKiA6dHlwZTpgbmdodHRwMl9kYXRhX3Byb3ZpZGVyYCB0byBgbmdodHRwMl9zdWJtaXRfcmVzcG9uc2UoKWAuCisgKiBJbnNpZGUgb2YgOnR5cGU6YG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFja2AsIHdoZW4gc2V0dGluZworICogOmVudW06YE5HSFRUUDJfREFUQV9GTEFHX0VPRmAsIGFsc28gc2V0CisgKiA6ZW51bTpgTkdIVFRQMl9EQVRBX0ZMQUdfTk9fRU5EX1NUUkVBTWAuICBBZnRlciB0aGF0LCB0aGUKKyAqIGFwcGxpY2F0aW9uIGNhbiBzZW5kIHRyYWlsZXIgZmllbGRzIHVzaW5nCisgKiBgbmdodHRwMl9zdWJtaXRfdHJhaWxlcigpYC4gIGBuZ2h0dHAyX3N1Ym1pdF90cmFpbGVyKClgIGNhbiBiZSB1c2VkCisgKiBpbnNpZGUgOnR5cGU6YG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFja2AuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMgYW5kIHxzdHJlYW1faWR8IGlzIC0xLgorICogT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZQorICogZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxzdHJlYW1faWR8IGlzIDAuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3N1Ym1pdF90cmFpbGVyKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnZhLCBzaXplX3QgbnZsZW4pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgSEVBREVSUyBmcmFtZS4gVGhlIHxmbGFnc3wgaXMgYml0d2lzZSBPUiBvZiB0aGUKKyAqIGZvbGxvd2luZyB2YWx1ZXM6CisgKgorICogKiA6ZW51bTpgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU1gCisgKgorICogSWYgfGZsYWdzfCBpbmNsdWRlcyA6ZW51bTpgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU1gLCB0aGlzIGZyYW1lIGhhcworICogRU5EX1NUUkVBTSBmbGFnIHNldC4KKyAqCisgKiBUaGUgbGlicmFyeSBoYW5kbGVzIHRoZSBDT05USU5VQVRJT04gZnJhbWUgaW50ZXJuYWxseSBhbmQgaXQKKyAqIGNvcnJlY3RseSBzZXRzIEVORF9IRUFERVJTIHRvIHRoZSBsYXN0IHNlcXVlbmNlIG9mIHRoZSBQVVNIX1BST01JU0UKKyAqIG9yIENPTlRJTlVBVElPTiBmcmFtZS4KKyAqCisgKiBJZiB0aGUgfHN0cmVhbV9pZHwgaXMgLTEsIHRoaXMgZnJhbWUgaXMgYXNzdW1lZCBhcyByZXF1ZXN0IChpLmUuLAorICogcmVxdWVzdCBIRUFERVJTIGZyYW1lIHdoaWNoIG9wZW5zIG5ldyBzdHJlYW0pLiAgSW4gdGhpcyBjYXNlLCB0aGUKKyAqIGFzc2lnbmVkIHN0cmVhbSBJRCB3aWxsIGJlIHJldHVybmVkLiAgT3RoZXJ3aXNlLCBzcGVjaWZ5IHN0cmVhbSBJRAorICogaW4gfHN0cmVhbV9pZHwuCisgKgorICogVGhlIHxwcmlfc3BlY3wgaXMgcHJpb3JpdHkgc3BlY2lmaWNhdGlvbiBvZiB0aGlzIHJlcXVlc3QuICBgYE5VTExgYAorICogbWVhbnMgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKHNlZQorICogYG5naHR0cDJfcHJpb3JpdHlfc3BlY19kZWZhdWx0X2luaXQoKWApLiAgVG8gc3BlY2lmeSB0aGUgcHJpb3JpdHksCisgKiB1c2UgYG5naHR0cDJfcHJpb3JpdHlfc3BlY19pbml0KClgLiAgSWYgfHByaV9zcGVjfCBpcyBub3QgYGBOVUxMYGAsCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29weSBpdHMgZGF0YSBtZW1iZXJzLgorICoKKyAqIFRoZSBgYHByaV9zcGVjLT53ZWlnaHRgYCBtdXN0IGJlIGluIFs6ZW51bTpgTkdIVFRQMl9NSU5fV0VJR0hUYCwKKyAqIDplbnVtOmBOR0hUVFAyX01BWF9XRUlHSFRgXSwgaW5jbHVzaXZlLiAgSWYgYGBwcmlfc3BlYy0+d2VpZ2h0YGAgaXMKKyAqIHN0cmljdGx5IGxlc3MgdGhhbiA6ZW51bTpgTkdIVFRQMl9NSU5fV0VJR0hUYCwgaXQgYmVjb21lcworICogOmVudW06YE5HSFRUUDJfTUlOX1dFSUdIVGAuICBJZiBpdCBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4KKyAqIDplbnVtOmBOR0hUVFAyX01BWF9XRUlHSFRgLCBpdCBiZWNvbWVzIDplbnVtOmBOR0hUVFAyX01BWF9XRUlHSFRgLgorICoKKyAqIFRoZSB8bnZhfCBpcyBhbiBhcnJheSBvZiBuYW1lL3ZhbHVlIHBhaXIgOnR5cGU6YG5naHR0cDJfbnZgIHdpdGgKKyAqIHxudmxlbnwgZWxlbWVudHMuICBUaGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgdG8gaW5jbHVkZQorICogcmVxdWlyZWQgcHNldWRvLWhlYWRlciBmaWVsZHMgKGhlYWRlciBmaWVsZCB3aG9zZSBuYW1lIHN0YXJ0cyB3aXRoCisgKiAiOiIpIGluIHxudmF8IGFuZCBtdXN0IHBsYWNlIHBzZXVkby1oZWFkZXJzIGJlZm9yZSByZWd1bGFyIGhlYWRlcgorICogZmllbGRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBjb3BpZXMgb2YgYWxsIG5hbWUvdmFsdWUgcGFpcnMgaW4gfG52YXwuICBJdAorICogYWxzbyBsb3dlci1jYXNlcyBhbGwgbmFtZXMgaW4gfG52YXwuICBUaGUgb3JkZXIgb2YgZWxlbWVudHMgaW4KKyAqIHxudmF8IGlzIHByZXNlcnZlZC4gIEZvciBoZWFkZXIgZmllbGRzIHdpdGgKKyAqIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9OQU1FYCBhbmQKKyAqIDplbnVtOmBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9WQUxVRWAgYXJlIHNldCwgaGVhZGVyIGZpZWxkIG5hbWUKKyAqIGFuZCB2YWx1ZSBhcmUgbm90IGNvcGllZCByZXNwZWN0aXZlbHkuICBXaXRoCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRWAsIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIHRvCisgKiBwYXNzIGhlYWRlciBmaWVsZCBuYW1lIGluIGxvd2VyY2FzZS4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAqIG1haW50YWluIHRoZSByZWZlcmVuY2VzIHRvIHRoZW0gdW50aWwKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3NlbmRfY2FsbGJhY2tgIG9yCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFja2AgaXMgY2FsbGVkLgorICoKKyAqIFRoZSB8c3RyZWFtX3VzZXJfZGF0YXwgaXMgYSBwb2ludGVyIHRvIGFuIGFyYml0cmFyeSBkYXRhIHdoaWNoIGlzCisgKiBhc3NvY2lhdGVkIHRvIHRoZSBzdHJlYW0gdGhpcyBmcmFtZSB3aWxsIG9wZW4uICBUaGVyZWZvcmUgaXQgaXMKKyAqIG9ubHkgdXNlZCBpZiB0aGlzIGZyYW1lIG9wZW5zIHN0cmVhbXMsIGluIG90aGVyIHdvcmRzLCBpdCBjaGFuZ2VzCisgKiBzdHJlYW0gc3RhdGUgZnJvbSBpZGxlIG9yIHJlc2VydmVkIHRvIG9wZW4uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBsb3ctbGV2ZWwgaW4gYSBzZW5zZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjb2RlIGNhbgorICogc3BlY2lmeSBmbGFncyBkaXJlY3RseS4gIEZvciB1c3VhbCBIVFRQIHJlcXVlc3QsCisgKiBgbmdodHRwMl9zdWJtaXRfcmVxdWVzdCgpYCBpcyB1c2VmdWwuICBMaWtld2lzZSwgZm9yIEhUVFAgcmVzcG9uc2UsCisgKiBwcmVmZXIgYG5naHR0cDJfc3VibWl0X3Jlc3BvbnNlKClgLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBuZXdseSBhc3NpZ25lZCBzdHJlYW0gSUQgaWYgaXQgc3VjY2VlZHMgYW5kCisgKiB8c3RyZWFtX2lkfCBpcyAtMS4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQKKyAqIHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9TVFJFQU1fSURfTk9UX0FWQUlMQUJMRWAKKyAqICAgICBObyBzdHJlYW0gSUQgaXMgYXZhaWxhYmxlIGJlY2F1c2UgbWF4aW11bSBzdHJlYW0gSUQgd2FzCisgKiAgICAgcmVhY2hlZC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8c3RyZWFtX2lkfCBpcyAwOyBvciB0cnlpbmcgdG8gZGVwZW5kIG9uIGl0c2VsZiAoc3RyZWFtIElECisgKiAgICAgZXF1YWxzIGBgcHJpX3NwZWMtPnN0cmVhbV9pZGBgKS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9EQVRBX0VYSVNUYAorICogICAgIERBVEEgb3IgSEVBREVSUyBoYXMgYmVlbiBhbHJlYWR5IHN1Ym1pdHRlZCBhbmQgbm90IGZ1bGx5CisgKiAgICAgcHJvY2Vzc2VkIHlldC4gIFRoaXMgaGFwcGVucyBpZiBzdHJlYW0gZGVub3RlZCBieSB8c3RyZWFtX2lkfAorICogICAgIGlzIGluIHJlc2VydmVkIHN0YXRlLgorICogOmVudW06YE5HSFRUUDJfRVJSX1BST1RPYAorICogICAgIFRoZSB8c3RyZWFtX2lkfCBpcyAtMSwgYW5kIHxzZXNzaW9ufCBpcyBzZXJ2ZXIgc2Vzc2lvbi4KKyAqCisgKiAuLiB3YXJuaW5nOjoKKyAqCisgKiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhc3NpZ25lZCBzdHJlYW0gSUQgaWYgaXQgc3VjY2VlZHMgYW5kCisgKiAgIHxzdHJlYW1faWR8IGlzIC0xLiAgQnV0IHRoYXQgc3RyZWFtIGlzIG5vdCBvcGVuZWQgeWV0LiAgVGhlCisgKiAgIGFwcGxpY2F0aW9uIG11c3Qgbm90IHN1Ym1pdCBmcmFtZSB0byB0aGF0IHN0cmVhbSBJRCBiZWZvcmUKKyAqICAgOnR5cGU6YG5naHR0cDJfYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2tgIGlzIGNhbGxlZCBmb3IgdGhpcworICogICBmcmFtZS4KKyAqCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QgbmdodHRwMl9zdWJtaXRfaGVhZGVycygKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsIGludDMyX3Qgc3RyZWFtX2lkLAorICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMsIGNvbnN0IG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuLAorICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgb25lIG9yIG1vcmUgREFUQSBmcmFtZXMgdG8gdGhlIHN0cmVhbSB8c3RyZWFtX2lkfC4gIFRoZQorICogZGF0YSB0byBiZSBzZW50IGFyZSBwcm92aWRlZCBieSB8ZGF0YV9wcmR8LiAgSWYgfGZsYWdzfCBjb250YWlucworICogOmVudW06YE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNYCwgdGhlIGxhc3QgREFUQSBmcmFtZSBoYXMgRU5EX1NUUkVBTQorICogZmxhZyBzZXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgfGRhdGFfcHJkfC4gIFRoZQorICogZnVuY3Rpb24gY29waWVzIHRoZSBtZW1iZXJzIG9mIHRoZSB8ZGF0YV9wcmR8LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfREFUQV9FWElTVGAKKyAqICAgICBEQVRBIG9yIEhFQURFUlMgaGFzIGJlZW4gYWxyZWFkeSBzdWJtaXR0ZWQgYW5kIG5vdCBmdWxseQorICogICAgIHByb2Nlc3NlZCB5ZXQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfHN0cmVhbV9pZHwgaXMgMC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VEYAorICogICAgIFRoZSBzdHJlYW0gd2FzIGFscmVhZHkgY2xvc2VkOyBvciB0aGUgfHN0cmVhbV9pZHwgaXMgaW52YWxpZC4KKyAqCisgKiAuLiBub3RlOjoKKyAqCisgKiAgIEN1cnJlbnRseSwgb25seSBvbmUgREFUQSBvciBIRUFERVJTIGlzIGFsbG93ZWQgZm9yIGEgc3RyZWFtIGF0IGEKKyAqICAgdGltZS4gIFN1Ym1pdHRpbmcgdGhlc2UgZnJhbWVzIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSBmaXJzdCBEQVRBCisgKiAgIG9yIEhFQURFUlMgaXMgZmluaXNoZWQgcmVzdWx0cyBpbiA6ZW51bTpgTkdIVFRQMl9FUlJfREFUQV9FWElTVGAKKyAqICAgZXJyb3IgY29kZS4gIFRoZSBlYXJsaWVzdCBjYWxsYmFjayB3aGljaCB0ZWxscyB0aGF0IHByZXZpb3VzCisgKiAgIGZyYW1lIGlzIGRvbmUgaXMgOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfc2VuZF9jYWxsYmFja2AuICBJbiBzaWRlCisgKiAgIHRoYXQgY2FsbGJhY2ssIG5ldyBkYXRhIGNhbiBiZSBzdWJtaXR0ZWQgdXNpbmcKKyAqICAgYG5naHR0cDJfc3VibWl0X2RhdGEoKWAuICBPZiBjb3Vyc2UsIGFsbCBkYXRhIGV4Y2VwdCBmb3IgbGFzdCBvbmUKKyAqICAgbXVzdCBub3QgaGF2ZSA6ZW51bTpgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU1gIGZsYWcgc2V0IGluCisgKiAgIHxmbGFnc3wuICBUaGlzIHNvdW5kcyBhIGJpdCBjb21wbGljYXRlZCwgYW5kIHdlIHJlY29tbWVuZCB0byB1c2UKKyAqICAgYG5naHR0cDJfc3VibWl0X3JlcXVlc3QoKWAgYW5kIGBuZ2h0dHAyX3N1Ym1pdF9yZXNwb25zZSgpYCB0bworICogICBhdm9pZCB0aGlzIGNhc2NhZGluZyBpc3N1ZS4gIFRoZSBleHBlcmllbmNlIHNob3dzIHRoYXQgZm9yIEhUVFAKKyAqICAgdXNlLCB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBlbm91Z2ggdG8gaW1wbGVtZW50IGJvdGggY2xpZW50IGFuZAorICogICBzZXJ2ZXIuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3N1Ym1pdF9kYXRhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9kYXRhX3Byb3ZpZGVyICpkYXRhX3ByZCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU3VibWl0cyBQUklPUklUWSBmcmFtZSB0byBjaGFuZ2UgdGhlIHByaW9yaXR5IG9mIHN0cmVhbSB8c3RyZWFtX2lkfAorICogdG8gdGhlIHByaW9yaXR5IHNwZWNpZmljYXRpb24gfHByaV9zcGVjfC4KKyAqCisgKiBUaGUgfGZsYWdzfCBpcyBjdXJyZW50bHkgaWdub3JlZCBhbmQgc2hvdWxkIGJlCisgKiA6ZW51bTpgTkdIVFRQMl9GTEFHX05PTkVgLgorICoKKyAqIFRoZSB8cHJpX3NwZWN8IGlzIHByaW9yaXR5IHNwZWNpZmljYXRpb24gb2YgdGhpcyByZXF1ZXN0LiAgYGBOVUxMYGAKKyAqIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIGZ1bmN0aW9uLiBUbyBzcGVjaWZ5IHRoZSBwcmlvcml0eSwgdXNlCisgKiBgbmdodHRwMl9wcmlvcml0eV9zcGVjX2luaXQoKWAuICBUaGlzIGZ1bmN0aW9uIHdpbGwgY29weSBpdHMgZGF0YQorICogbWVtYmVycy4KKyAqCisgKiBUaGUgYGBwcmlfc3BlYy0+d2VpZ2h0YGAgbXVzdCBiZSBpbiBbOmVudW06YE5HSFRUUDJfTUlOX1dFSUdIVGAsCisgKiA6ZW51bTpgTkdIVFRQMl9NQVhfV0VJR0hUYF0sIGluY2x1c2l2ZS4gIElmIGBgcHJpX3NwZWMtPndlaWdodGBgIGlzCisgKiBzdHJpY3RseSBsZXNzIHRoYW4gOmVudW06YE5HSFRUUDJfTUlOX1dFSUdIVGAsIGl0IGJlY29tZXMKKyAqIDplbnVtOmBOR0hUVFAyX01JTl9XRUlHSFRgLiAgSWYgaXQgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuCisgKiA6ZW51bTpgTkdIVFRQMl9NQVhfV0VJR0hUYCwgaXQgYmVjb21lcyA6ZW51bTpgTkdIVFRQMl9NQVhfV0VJR0hUYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxzdHJlYW1faWR8IGlzIDA7IG9yIHRoZSB8cHJpX3NwZWN8IGlzIE5VTEw7IG9yIHRyeWluZyB0bworICogICAgIGRlcGVuZCBvbiBpdHNlbGYuCisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9zdWJtaXRfcHJpb3JpdHkobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBTdWJtaXRzIFJTVF9TVFJFQU0gZnJhbWUgdG8gY2FuY2VsL3JlamVjdCB0aGUgc3RyZWFtIHxzdHJlYW1faWR8CisgKiB3aXRoIHRoZSBlcnJvciBjb2RlIHxlcnJvcl9jb2RlfC4KKyAqCisgKiBUaGUgcHJlLWRlZmluZWQgZXJyb3IgY29kZSBpcyBvbmUgb2YgOmVudW06YG5naHR0cDJfZXJyb3JfY29kZWAuCisgKgorICogVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5IGlnbm9yZWQgYW5kIHNob3VsZCBiZQorICogOmVudW06YE5HSFRUUDJfRkxBR19OT05FYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlIHxzdHJlYW1faWR8IGlzIDAuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3N1Ym1pdF9yc3Rfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU3RvcmVzIGxvY2FsIHNldHRpbmdzIGFuZCBzdWJtaXRzIFNFVFRJTkdTIGZyYW1lLiAgVGhlIHxpdnwgaXMgdGhlCisgKiBwb2ludGVyIHRvIHRoZSBhcnJheSBvZiA6dHlwZTpgbmdodHRwMl9zZXR0aW5nc19lbnRyeWAuICBUaGUgfG5pdnwKKyAqIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIDp0eXBlOmBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5YC4KKyAqCisgKiBUaGUgfGZsYWdzfCBpcyBjdXJyZW50bHkgaWdub3JlZCBhbmQgc2hvdWxkIGJlCisgKiA6ZW51bTpgTkdIVFRQMl9GTEFHX05PTkVgLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHxpdnwuICBUaGlzIGZ1bmN0aW9uCisgKiBjb3BpZXMgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgfGl2fC4KKyAqCisgKiBXaGlsZSB1cGRhdGluZyBpbmRpdmlkdWFsIHN0cmVhbSdzIGxvY2FsIHdpbmRvdyBzaXplLCBpZiB0aGUgd2luZG93CisgKiBzaXplIGJlY29tZXMgc3RyaWN0bHkgbGFyZ2VyIHRoYW4gTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUsCisgKiBSU1RfU1RSRUFNIGlzIGlzc3VlZCBhZ2FpbnN0IHN1Y2ggYSBzdHJlYW0uCisgKgorICogU0VUVElOR1Mgd2l0aCA6ZW51bTpgTkdIVFRQMl9GTEFHX0FDS2AgaXMgYXV0b21hdGljYWxseSBzdWJtaXR0ZWQKKyAqIGJ5IHRoZSBsaWJyYXJ5IGFuZCBhcHBsaWNhdGlvbiBjb3VsZCBub3Qgc2VuZCBpdCBhdCBpdHMgd2lsbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8aXZ8IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgKGUuZy4sIGluaXRpYWwgd2luZG93IHNpemUKKyAqICAgICBzdHJpY3RseSBncmVhdGVyIHRoYW4gKDEgPDwgMzEpIC0gMS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfc2V0dGluZ3MobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU3VibWl0cyBQVVNIX1BST01JU0UgZnJhbWUuCisgKgorICogVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5IGlnbm9yZWQuICBUaGUgbGlicmFyeSBoYW5kbGVzIHRoZQorICogQ09OVElOVUFUSU9OIGZyYW1lIGludGVybmFsbHkgYW5kIGl0IGNvcnJlY3RseSBzZXRzIEVORF9IRUFERVJTIHRvCisgKiB0aGUgbGFzdCBzZXF1ZW5jZSBvZiB0aGUgUFVTSF9QUk9NSVNFIG9yIENPTlRJTlVBVElPTiBmcmFtZS4KKyAqCisgKiBUaGUgfHN0cmVhbV9pZHwgbXVzdCBiZSBjbGllbnQgaW5pdGlhdGVkIHN0cmVhbSBJRC4KKyAqCisgKiBUaGUgfG52YXwgaXMgYW4gYXJyYXkgb2YgbmFtZS92YWx1ZSBwYWlyIDp0eXBlOmBuZ2h0dHAyX252YCB3aXRoCisgKiB8bnZsZW58IGVsZW1lbnRzLiAgVGhlIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIHRvIGluY2x1ZGUKKyAqIHJlcXVpcmVkIHBzZXVkby1oZWFkZXIgZmllbGRzIChoZWFkZXIgZmllbGQgd2hvc2UgbmFtZSBzdGFydHMgd2l0aAorICogIjoiKSBpbiB8bnZhfCBhbmQgbXVzdCBwbGFjZSBwc2V1ZG8taGVhZGVycyBiZWZvcmUgcmVndWxhciBoZWFkZXIKKyAqIGZpZWxkcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgY29waWVzIG9mIGFsbCBuYW1lL3ZhbHVlIHBhaXJzIGluIHxudmF8LiAgSXQKKyAqIGFsc28gbG93ZXItY2FzZXMgYWxsIG5hbWVzIGluIHxudmF8LiAgVGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluCisgKiB8bnZhfCBpcyBwcmVzZXJ2ZWQuICBGb3IgaGVhZGVyIGZpZWxkcyB3aXRoCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfTkFNRWAgYW5kCisgKiA6ZW51bTpgTkdIVFRQMl9OVl9GTEFHX05PX0NPUFlfVkFMVUVgIGFyZSBzZXQsIGhlYWRlciBmaWVsZCBuYW1lCisgKiBhbmQgdmFsdWUgYXJlIG5vdCBjb3BpZWQgcmVzcGVjdGl2ZWx5LiAgV2l0aAorICogOmVudW06YE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX05BTUVgLCBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSB0bworICogcGFzcyBoZWFkZXIgZmllbGQgbmFtZSBpbiBsb3dlcmNhc2UuICBUaGUgYXBwbGljYXRpb24gc2hvdWxkCisgKiBtYWludGFpbiB0aGUgcmVmZXJlbmNlcyB0byB0aGVtIHVudGlsCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrYCBvcgorICogOnR5cGU6YG5naHR0cDJfb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2tgIGlzIGNhbGxlZC4KKyAqCisgKiBUaGUgfHByb21pc2VkX3N0cmVhbV91c2VyX2RhdGF8IGlzIGEgcG9pbnRlciB0byBhbiBhcmJpdHJhcnkgZGF0YQorICogd2hpY2ggaXMgYXNzb2NpYXRlZCB0byB0aGUgcHJvbWlzZWQgc3RyZWFtIHRoaXMgZnJhbWUgd2lsbCBvcGVuIGFuZAorICogbWFrZSBpdCBpbiByZXNlcnZlZCBzdGF0ZS4gIEl0IGlzIGF2YWlsYWJsZSB1c2luZworICogYG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3VzZXJfZGF0YSgpYC4gIFRoZSBhcHBsaWNhdGlvbiBjYW4KKyAqIGFjY2VzcyBpdCBpbiA6dHlwZTpgbmdodHRwMl9iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFja2AgYW5kCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrYCBvZiB0aGlzIGZyYW1lLgorICoKKyAqIFRoZSBjbGllbnQgc2lkZSBpcyBub3QgYWxsb3dlZCB0byB1c2UgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUbyBzdWJtaXQgcmVzcG9uc2UgaGVhZGVycyBhbmQgZGF0YSwgdXNlCisgKiBgbmdodHRwMl9zdWJtaXRfcmVzcG9uc2UoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFzc2lnbmVkIHByb21pc2VkIHN0cmVhbSBJRCBpZiBpdCBzdWNjZWVkcywKKyAqIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX1BST1RPYAorICogICAgIFRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQgd2hlbiB8c2Vzc2lvbnwgaXMgaW5pdGlhbGl6ZWQgYXMKKyAqICAgICBjbGllbnQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfU1RSRUFNX0lEX05PVF9BVkFJTEFCTEVgCisgKiAgICAgTm8gc3RyZWFtIElEIGlzIGF2YWlsYWJsZSBiZWNhdXNlIG1heGltdW0gc3RyZWFtIElEIHdhcworICogICAgIHJlYWNoZWQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfHN0cmVhbV9pZHwgaXMgMDsgVGhlIHxzdHJlYW1faWR8IGRvZXMgbm90IGRlc2lnbmF0ZSBzdHJlYW0KKyAqICAgICB0aGF0IHBlZXIgaW5pdGlhdGVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRURgCisgKiAgICAgVGhlIHN0cmVhbSB3YXMgYWxyZWFkeSBjbG9zZWQ7IG9yIHRoZSB8c3RyZWFtX2lkfCBpcyBpbnZhbGlkLgorICoKKyAqIC4uIHdhcm5pbmc6OgorICoKKyAqICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFzc2lnbmVkIHByb21pc2VkIHN0cmVhbSBJRCBpZiBpdCBzdWNjZWVkcy4KKyAqICAgQXMgb2YgMS4xNi4wLCBzdHJlYW0gb2JqZWN0IGZvciBwdXNoZWQgcmVzb3VyY2UgaXMgY3JlYXRlZCB3aGVuCisgKiAgIHRoaXMgZnVuY3Rpb24gc3VjY2VlZHMuICBJbiB0aGF0IGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBjYW4gc3VibWl0CisgKiAgIHB1c2ggcmVzcG9uc2UgZm9yIHRoZSBwcm9taXNlZCBmcmFtZS4KKyAqCisgKiAgIEluIDEuMTUuMCBvciBwcmlvciB2ZXJzaW9ucywgcHVzaGVkIHN0cmVhbSBpcyBub3Qgb3BlbmVkIHlldCB3aGVuCisgKiAgIHRoaXMgZnVuY3Rpb24gc3VjY2VlZHMuICBUaGUgYXBwbGljYXRpb24gbXVzdCBub3Qgc3VibWl0IGZyYW1lIHRvCisgKiAgIHRoYXQgc3RyZWFtIElEIGJlZm9yZSA6dHlwZTpgbmdodHRwMl9iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFja2AKKyAqICAgaXMgY2FsbGVkIGZvciB0aGlzIGZyYW1lLgorICoKKyAqLworTkdIVFRQMl9FWFRFUk4gaW50MzJfdCBuZ2h0dHAyX3N1Ym1pdF9wdXNoX3Byb21pc2UoCisgICAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbiwgdm9pZCAqcHJvbWlzZWRfc3RyZWFtX3VzZXJfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU3VibWl0cyBQSU5HIGZyYW1lLiAgWW91IGRvbid0IGhhdmUgdG8gc2VuZCBQSU5HIGJhY2sgd2hlbiB5b3UKKyAqIHJlY2VpdmVkIFBJTkcgZnJhbWUuICBUaGUgbGlicmFyeSBhdXRvbWF0aWNhbGx5IHN1Ym1pdHMgUElORyBmcmFtZQorICogaW4gdGhpcyBjYXNlLgorICoKKyAqIFRoZSB8ZmxhZ3N8IGlzIGJpdHdpc2UgT1Igb2YgMCBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWUuCisgKgorICogKiA6ZW51bTpgTkdIVFRQMl9GTEFHX0FDS2AKKyAqCisgKiBVbmxlc3MgYG5naHR0cDJfb3B0aW9uX3NldF9ub19hdXRvX3BpbmdfYWNrKClgIGlzIHVzZWQsIHRoZSB8ZmxhZ3N8CisgKiBzaG91bGQgYmUgOmVudW06YE5HSFRUUDJfRkxBR19OT05FYC4KKyAqCisgKiBJZiB0aGUgfG9wYXF1ZV9kYXRhfCBpcyBub24gYGBOVUxMYGAsIHRoZW4gaXQgc2hvdWxkIHBvaW50IHRvIHRoZSA4CisgKiBieXRlcyBhcnJheSBvZiBtZW1vcnkgdG8gc3BlY2lmeSBvcGFxdWUgZGF0YSB0byBzZW5kIHdpdGggUElORworICogZnJhbWUuICBJZiB0aGUgfG9wYXF1ZV9kYXRhfCBpcyBgYE5VTExgYCwgemVyby1jbGVhcmVkIDggYnl0ZXMgd2lsbAorICogYmUgc2VudCBhcyBvcGFxdWUgZGF0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfcGluZyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpvcGFxdWVfZGF0YSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU3VibWl0cyBHT0FXQVkgZnJhbWUgd2l0aCB0aGUgbGFzdCBzdHJlYW0gSUQgfGxhc3Rfc3RyZWFtX2lkfCBhbmQKKyAqIHRoZSBlcnJvciBjb2RlIHxlcnJvcl9jb2RlfC4KKyAqCisgKiBUaGUgcHJlLWRlZmluZWQgZXJyb3IgY29kZSBpcyBvbmUgb2YgOmVudW06YG5naHR0cDJfZXJyb3JfY29kZWAuCisgKgorICogVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5IGlnbm9yZWQgYW5kIHNob3VsZCBiZQorICogOmVudW06YE5HSFRUUDJfRkxBR19OT05FYC4KKyAqCisgKiBUaGUgfGxhc3Rfc3RyZWFtX2lkfCBpcyBwZWVyJ3Mgc3RyZWFtIElEIG9yIDAuICBTbyBpZiB8c2Vzc2lvbnwgaXMKKyAqIGluaXRpYWxpemVkIGFzIGNsaWVudCwgfGxhc3Rfc3RyZWFtX2lkfCBtdXN0IGJlIGV2ZW4gb3IgMC4gIElmCisgKiB8c2Vzc2lvbnwgaXMgaW5pdGlhbGl6ZWQgYXMgc2VydmVyLCB8bGFzdF9zdHJlYW1faWR8IG11c3QgYmUgb2RkIG9yCisgKiAwLgorICoKKyAqIFRoZSBIVFRQLzIgc3BlY2lmaWNhdGlvbiBzYXlzIGxhc3Rfc3RyZWFtX2lkIG11c3Qgbm90IGJlIGluY3JlYXNlZAorICogZnJvbSB0aGUgdmFsdWUgcHJldmlvdXNseSBzZW50LiAgU28gdGhlIGFjdHVhbCB2YWx1ZSBzZW50IGFzCisgKiBsYXN0X3N0cmVhbV9pZCBpcyB0aGUgbWluaW11bSB2YWx1ZSBiZXR3ZWVuIHRoZSBnaXZlbgorICogfGxhc3Rfc3RyZWFtX2lkfCBhbmQgdGhlIGxhc3Rfc3RyZWFtX2lkIHByZXZpb3VzbHkgc2VudCB0byB0aGUKKyAqIHBlZXIuCisgKgorICogSWYgdGhlIHxvcGFxdWVfZGF0YXwgaXMgbm90IGBgTlVMTGBgIGFuZCB8b3BhcXVlX2RhdGFfbGVufCBpcyBub3QKKyAqIHplcm8sIHRob3NlIGRhdGEgd2lsbCBiZSBzZW50IGFzIGFkZGl0aW9uYWwgZGVidWcgZGF0YS4gIFRoZQorICogbGlicmFyeSBtYWtlcyBhIGNvcHkgb2YgdGhlIG1lbW9yeSByZWdpb24gcG9pbnRlZCBieSB8b3BhcXVlX2RhdGF8CisgKiB3aXRoIHRoZSBsZW5ndGggfG9wYXF1ZV9kYXRhX2xlbnwsIHNvIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0bworICoga2VlcCB0aGlzIG1lbW9yeSBhZnRlciB0aGUgcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24uICBJZiB0aGUKKyAqIHxvcGFxdWVfZGF0YV9sZW58IGlzIDAsIHRoZSB8b3BhcXVlX2RhdGF8IGNvdWxkIGJlIGBgTlVMTGBgLgorICoKKyAqIEFmdGVyIHN1Y2Nlc3NmdWwgdHJhbnNtaXNzaW9uIG9mIEdPQVdBWSwgZm9sbG93aW5nIHRoaW5ncyBoYXBwZW4uCisgKiBBbGwgaW5jb21pbmcgc3RyZWFtcyBoYXZpbmcgc3RyaWN0bHkgbW9yZSB0aGFuIHxsYXN0X3N0cmVhbV9pZHwgYXJlCisgKiBjbG9zZWQuICBBbGwgaW5jb21pbmcgSEVBREVSUyB3aGljaCBzdGFydHMgbmV3IHN0cmVhbSBhcmUgc2ltcGx5CisgKiBpZ25vcmVkLiAgQWZ0ZXIgYWxsIGFjdGl2ZSBzdHJlYW1zIGFyZSBoYW5kbGVkLCBib3RoCisgKiBgbmdodHRwMl9zZXNzaW9uX3dhbnRfcmVhZCgpYCBhbmQgYG5naHR0cDJfc2Vzc2lvbl93YW50X3dyaXRlKClgCisgKiByZXR1cm4gMCBhbmQgdGhlIGFwcGxpY2F0aW9uIGNhbiBjbG9zZSBzZXNzaW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgfG9wYXF1ZV9kYXRhX2xlbnwgaXMgdG9vIGxhcmdlOyB0aGUgfGxhc3Rfc3RyZWFtX2lkfCBpcworICogICAgIGludmFsaWQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3N1Ym1pdF9nb2F3YXkobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBpbnQzMl90IGxhc3Rfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpvcGFxdWVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9wYXF1ZV9kYXRhX2xlbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgbGFzdCBzdHJlYW0gSUQgb2YgYSBzdHJlYW0gZm9yIHdoaWNoCisgKiA6dHlwZTpgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrYCB3YXMgaW52b2tlZCBtb3N0IHJlY2VudGx5LgorICogVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSB1c2VkIGFzIGxhc3Rfc3RyZWFtX2lkIHBhcmFtZXRlciBmb3IKKyAqIGBuZ2h0dHAyX3N1Ym1pdF9nb2F3YXkoKWAgYW5kCisgKiBgbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uMigpYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBzdWNjZWVkcy4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50MzJfdAorbmdodHRwMl9zZXNzaW9uX2dldF9sYXN0X3Byb2Nfc3RyZWFtX2lkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBub256ZXJvIGlmIG5ldyByZXF1ZXN0IGNhbiBiZSBzZW50IGZyb20gbG9jYWwgZW5kcG9pbnQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm4gMCBpZiByZXF1ZXN0IGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHNlc3Npb24uCisgKiBUaGVyZSBhcmUgc2V2ZXJhbCByZWFzb25zIHdoeSByZXF1ZXN0IGlzIG5vdCBhbGxvd2VkLiAgU29tZSBvZiB0aGUKKyAqIHJlYXNvbnMgYXJlOiBzZXNzaW9uIGlzIHNlcnZlcjsgc3RyZWFtIElEIGhhcyBiZWVuIHNwZW50OyBHT0FXQVkKKyAqIGhhcyBiZWVuIHNlbnQgb3IgcmVjZWl2ZWQuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIGNhbiBjYWxsIGBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0KClgIHdpdGhvdXQKKyAqIGNvbnN1bHRpbmcgdGhpcyBmdW5jdGlvbi4gIEluIHRoYXQgY2FzZSwgYG5naHR0cDJfc3VibWl0X3JlcXVlc3QoKWAKKyAqIG1heSByZXR1cm4gZXJyb3IuICBPciwgcmVxdWVzdCBpcyBmYWlsZWQgdG8gc2VudCwgYW5kCisgKiA6dHlwZTpgbmdodHRwMl9vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2tgIGlzIGNhbGxlZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX3Nlc3Npb25fY2hlY2tfcmVxdWVzdF9hbGxvd2VkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBub256ZXJvIGlmIHxzZXNzaW9ufCBpcyBpbml0aWFsaXplZCBhcyBzZXJ2ZXIgc2lkZSBzZXNzaW9uLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc2Vzc2lvbl9jaGVja19zZXJ2ZXJfc2Vzc2lvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgV0lORE9XX1VQREFURSBmcmFtZS4KKyAqCisgKiBUaGUgfGZsYWdzfCBpcyBjdXJyZW50bHkgaWdub3JlZCBhbmQgc2hvdWxkIGJlCisgKiA6ZW51bTpgTkdIVFRQMl9GTEFHX05PTkVgLgorICoKKyAqIFRoZSB8c3RyZWFtX2lkfCBpcyB0aGUgc3RyZWFtIElEIHRvIHNlbmQgdGhpcyBXSU5ET1dfVVBEQVRFLiAgVG8KKyAqIHNlbmQgY29ubmVjdGlvbiBsZXZlbCBXSU5ET1dfVVBEQVRFLCBzcGVjaWZ5IDAgdG8gfHN0cmVhbV9pZHwuCisgKgorICogSWYgdGhlIHx3aW5kb3dfc2l6ZV9pbmNyZW1lbnR8IGlzIHBvc2l0aXZlLCB0aGUgV0lORE9XX1VQREFURSB3aXRoCisgKiB0aGF0IHZhbHVlIGFzIHdpbmRvd19zaXplX2luY3JlbWVudCBpcyBxdWV1ZWQuICBJZiB0aGUKKyAqIHx3aW5kb3dfc2l6ZV9pbmNyZW1lbnR8IGlzIGxhcmdlciB0aGFuIHRoZSByZWNlaXZlZCBieXRlcyBmcm9tIHRoZQorICogcmVtb3RlIGVuZHBvaW50LCB0aGUgbG9jYWwgd2luZG93IHNpemUgaXMgaW5jcmVhc2VkIGJ5IHRoYXQKKyAqIGRpZmZlcmVuY2UuICBJZiB0aGUgc29sZSBwdXJwb3NlIGlzIHRvIGluY3JlYXNlIHRoZSBsb2NhbCB3aW5kb3cKKyAqIHNpemUsIGNvbnNpZGVyIHRvIHVzZSBgbmdodHRwMl9zZXNzaW9uX3NldF9sb2NhbF93aW5kb3dfc2l6ZSgpYC4KKyAqCisgKiBJZiB0aGUgfHdpbmRvd19zaXplX2luY3JlbWVudHwgaXMgbmVnYXRpdmUsIHRoZSBsb2NhbCB3aW5kb3cgc2l6ZQorICogaXMgZGVjcmVhc2VkIGJ5IC18d2luZG93X3NpemVfaW5jcmVtZW50fC4gIElmIGF1dG9tYXRpYworICogV0lORE9XX1VQREFURSBpcyBlbmFibGVkCisgKiAoYG5naHR0cDJfb3B0aW9uX3NldF9ub19hdXRvX3dpbmRvd191cGRhdGUoKWApLCBhbmQgdGhlIGxpYnJhcnkKKyAqIGRlY2lkZWQgdGhhdCB0aGUgV0lORE9XX1VQREFURSBzaG91bGQgYmUgc3VibWl0dGVkLCB0aGVuCisgKiBXSU5ET1dfVVBEQVRFIGlzIHF1ZXVlZCB3aXRoIHRoZSBjdXJyZW50IHJlY2VpdmVkIGJ5dGVzIGNvdW50LiAgSWYKKyAqIHRoZSBzb2xlIHB1cnBvc2UgaXMgdG8gZGVjcmVhc2UgdGhlIGxvY2FsIHdpbmRvdyBzaXplLCBjb25zaWRlciB0bworICogdXNlIGBuZ2h0dHAyX3Nlc3Npb25fc2V0X2xvY2FsX3dpbmRvd19zaXplKClgLgorICoKKyAqIElmIHRoZSB8d2luZG93X3NpemVfaW5jcmVtZW50fCBpcyAwLCB0aGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGFuZAorICogcmV0dXJucyAwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX0ZMT1dfQ09OVFJPTGAKKyAqICAgICBUaGUgbG9jYWwgd2luZG93IHNpemUgb3ZlcmZsb3cgb3IgZ2V0cyBuZWdhdGl2ZS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdpbmRvd19zaXplX2luY3JlbWVudCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0IGxvY2FsIHdpbmRvdyBzaXplIChsb2NhbCBlbmRwb2ludHMncyB3aW5kb3cgc2l6ZSkgdG8gdGhlIGdpdmVuCisgKiB8d2luZG93X3NpemV8IGZvciB0aGUgZ2l2ZW4gc3RyZWFtIGRlbm90ZWQgYnkgfHN0cmVhbV9pZHwuICBUbworICogY2hhbmdlIGNvbm5lY3Rpb24gbGV2ZWwgd2luZG93IHNpemUsIHNwZWNpZnkgMCB0byB8c3RyZWFtX2lkfC4gIFRvCisgKiBpbmNyZWFzZSB3aW5kb3cgc2l6ZSwgdGhpcyBmdW5jdGlvbiBtYXkgc3VibWl0IFdJTkRPV19VUERBVEUgZnJhbWUKKyAqIHRvIHRyYW5zbWlzc2lvbiBxdWV1ZS4KKyAqCisgKiBUaGUgfGZsYWdzfCBpcyBjdXJyZW50bHkgaWdub3JlZCBhbmQgc2hvdWxkIGJlCisgKiA6ZW51bTpgTkdIVFRQMl9GTEFHX05PTkVgLgorICoKKyAqIFRoaXMgc291bmRzIHNpbWlsYXIgdG8gYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAsIGJ1dCB0aGVyZQorICogYXJlIDIgZGlmZmVyZW5jZXMuICBUaGUgZmlyc3QgZGlmZmVyZW5jZSBpcyB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIHRha2VzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB3aW5kb3cgc2l6ZSB0byBzZXQsIHJhdGhlciB0aGFuIHRoZQorICogZGVsdGEuICBUbyBjaGFuZ2UgdGhlIHdpbmRvdyBzaXplLCB0aGlzIG1heSBiZSBlYXNpZXIgdG8gdXNlIHNpbmNlCisgKiB0aGUgYXBwbGljYXRpb24ganVzdCBkZWNsYXJlcyB0aGUgaW50ZW5kZWQgd2luZG93IHNpemUsIHJhdGhlciB0aGFuCisgKiBjYWxjdWxhdGluZyBkZWx0YS4gIFRoZSBzZWNvbmQgZGlmZmVyZW5jZSBpcyB0aGF0CisgKiBgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZSgpYCBhZmZlY3RzIHRoZSByZWNlaXZlZCBieXRlcyBjb3VudAorICogd2hpY2ggaGFzIG5vdCBhY2tlZCB5ZXQuICBCeSB0aGUgc3BlY2lmaWNhdGlvbiBvZgorICogYG5naHR0cDJfc3VibWl0X3dpbmRvd191cGRhdGUoKWAsIHRvIHN0cmljdGx5IGluY3JlYXNlIHRoZSBsb2NhbAorICogd2luZG93IHNpemUsIHdlIGhhdmUgdG8gc3VibWl0IGRlbHRhIGluY2x1ZGluZyBhbGwgcmVjZWl2ZWQgYnl0ZXMKKyAqIGNvdW50LCB3aGljaCBtaWdodCBub3QgYmUgZGVzaXJhYmxlIGluIHNvbWUgY2FzZXMuICBPbiB0aGUgb3RoZXIKKyAqIGhhbmQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWZmZWN0IHRoZSByZWNlaXZlZCBieXRlcyBjb3VudC4gIEl0CisgKiBqdXN0IHNldHMgdGhlIGxvY2FsIHdpbmRvdyBzaXplIHRvIHRoZSBnaXZlbiB2YWx1ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIFRoZSB8c3RyZWFtX2lkfCBpcyBuZWdhdGl2ZS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfc2Vzc2lvbl9zZXRfbG9jYWxfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwgaW50MzJfdCB3aW5kb3dfc2l6ZSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU3VibWl0cyBleHRlbnNpb24gZnJhbWUuCisgKgorICogQXBwbGljYXRpb24gY2FuIHBhc3MgYXJiaXRyYXJ5IGZyYW1lIGZsYWdzIGFuZCBzdHJlYW0gSUQgaW4gfGZsYWdzfAorICogYW5kIHxzdHJlYW1faWR8IHJlc3BlY3RpdmVseS4gIFRoZSB8cGF5bG9hZHwgaXMgb3BhcXVlIHBvaW50ZXIsIGFuZAorICogaXQgY2FuIGJlIGFjY2Vzc2libGUgdGhvdWdoIGBgZnJhbWUtPmV4dC5wYXlsb2FkYGAgaW4KKyAqIDp0eXBlOmBuZ2h0dHAyX3BhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrYC4gIFRoZSBsaWJyYXJ5IHdpbGwgbm90IG93bgorICogcGFzc2VkIHxwYXlsb2FkfCBwb2ludGVyLgorICoKKyAqIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHNldCA6dHlwZTpgbmdodHRwMl9wYWNrX2V4dGVuc2lvbl9jYWxsYmFja2AKKyAqIHVzaW5nIGBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9wYWNrX2V4dGVuc2lvbl9jYWxsYmFjaygpYC4KKyAqCisgKiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIHJldGFpbiB0aGUgbWVtb3J5IHBvaW50ZWQgYnkgfHBheWxvYWR8IHVudGlsCisgKiB0aGUgdHJhbnNtaXNzaW9uIG9mIGV4dGVuc2lvbiBmcmFtZSBpcyBkb25lICh3aGljaCBpcyBpbmRpY2F0ZWQgYnkKKyAqIDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX3NlbmRfY2FsbGJhY2tgKSwgb3IgdHJhbnNtaXNzaW9uIGZhaWxzCisgKiAod2hpY2ggaXMgaW5kaWNhdGVkIGJ5IDp0eXBlOmBuZ2h0dHAyX29uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrYCkuCisgKiBJZiBhcHBsaWNhdGlvbiBkb2VzIG5vdCB0b3VjaCB0aGlzIG1lbW9yeSByZWdpb24gYWZ0ZXIgcGFja2luZyBpdAorICogaW50byBhIHdpcmUgZm9ybWF0LCBhcHBsaWNhdGlvbiBjYW4gZnJlZSBpdCBpbnNpZGUKKyAqIDp0eXBlOmBuZ2h0dHAyX3BhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrYC4KKyAqCisgKiBUaGUgc3RhbmRhcmQgSFRUUC8yIGZyYW1lIGNhbm5vdCBiZSBzZW50IHdpdGggdGhpcyBmdW5jdGlvbiwgc28KKyAqIHx0eXBlfCBtdXN0IGJlIHN0cmljdGx5IGdyYXRlciB0aGFuIDB4OS4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbgorICogd2lsbCBmYWlsIHdpdGggZXJyb3IgY29kZSA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAKKyAqICAgICBJZiA6dHlwZTpgbmdodHRwMl9wYWNrX2V4dGVuc2lvbl9jYWxsYmFja2AgaXMgbm90IHNldC4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UYAorICogICAgIElmICB8dHlwZXwgc3BlY2lmaWVzICBzdGFuZGFyZCAgSFRUUC8yIGZyYW1lICB0eXBlLiAgVGhlICBmcmFtZQorICogICAgIHR5cGVzICBpbiB0aGUgIHJhZ2UgWzB4MCwgIDB4OV0sIGJvdGggIGluY2x1c2l2ZSwgYXJlICBzdGFuZGFyZAorICogICAgIEhUVFAvMiBmcmFtZSB0eXBlLCBhbmQgY2Fubm90IGJlIHNlbnQgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3N1Ym1pdF9leHRlbnNpb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHR5cGUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLCB2b2lkICpwYXlsb2FkKTsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogVGhlIHBheWxvYWQgb2YgQUxUU1ZDIGZyYW1lLiAgQUxUU1ZDIGZyYW1lIGlzIGEgbm9uLWNyaXRpY2FsCisgKiBleHRlbnNpb24gdG8gSFRUUC8yLiAgSWYgdGhpcyBmcmFtZSBpcyByZWNlaXZlZCwgYW5kCisgKiBgbmdodHRwMl9vcHRpb25fc2V0X3VzZXJfcmVjdl9leHRlbnNpb25fdHlwZSgpYCBpcyBub3Qgc2V0LCBhbmQKKyAqIGBuZ2h0dHAyX29wdGlvbl9zZXRfYnVpbHRpbl9yZWN2X2V4dGVuc2lvbl90eXBlKClgIGlzIHNldCBmb3IKKyAqIDplbnVtOmBOR0hUVFAyX0FMVFNWQ2AsIGBgbmdodHRwMl9leHRlbnNpb24ucGF5bG9hZGBgIHdpbGwgcG9pbnQgdG8KKyAqIHRoaXMgc3RydWN0LgorICoKKyAqIEl0IGhhcyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBwb2ludGVyIHRvIG9yaWdpbiB3aGljaCB0aGlzIGFsdGVybmF0aXZlIHNlcnZpY2UgaXMKKyAgICogYXNzb2NpYXRlZCB3aXRoLiAgVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgTlVMTC10ZXJtaW5hdGVkLgorICAgKi8KKyAgdWludDhfdCAqb3JpZ2luOworICAvKioKKyAgICogVGhlIGxlbmd0aCBvZiB0aGUgfG9yaWdpbnwuCisgICAqLworICBzaXplX3Qgb3JpZ2luX2xlbjsKKyAgLyoqCisgICAqIFRoZSBwb2ludGVyIHRvIEFsdC1TdmMgZmllbGQgdmFsdWUgY29udGFpbmVkIGluIEFMVFNWQyBmcmFtZS4KKyAgICogVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgTlVMTC10ZXJtaW5hdGVkLgorICAgKi8KKyAgdWludDhfdCAqZmllbGRfdmFsdWU7CisgIC8qKgorICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSB8ZmllbGRfdmFsdWV8LgorICAgKi8KKyAgc2l6ZV90IGZpZWxkX3ZhbHVlX2xlbjsKK30gbmdodHRwMl9leHRfYWx0c3ZjOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFN1Ym1pdHMgQUxUU1ZDIGZyYW1lLgorICoKKyAqIEFMVFNWQyBmcmFtZSBpcyBhIG5vbi1jcml0aWNhbCBleHRlbnNpb24gdG8gSFRUUC8yLCBhbmQgZGVmaW5lZCBpbgorICogYFJGQyA3MzgzIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzgzOCNzZWN0aW9uLTQ+YF8uCisgKgorICogVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5IGlnbm9yZWQgYW5kIHNob3VsZCBiZQorICogOmVudW06YE5HSFRUUDJfRkxBR19OT05FYC4KKyAqCisgKiBUaGUgfG9yaWdpbnwgcG9pbnRzIHRvIHRoZSBvcmlnaW4gdGhpcyBhbHRlcm5hdGl2ZSBzZXJ2aWNlIGlzCisgKiBhc3NvY2lhdGVkIHdpdGguICBUaGUgfG9yaWdpbl9sZW58IGlzIHRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbi4gIElmCisgKiB8c3RyZWFtX2lkfCBpcyAwLCB0aGUgb3JpZ2luIG11c3QgYmUgc3BlY2lmaWVkLiAgSWYgfHN0cmVhbV9pZHwgaXMKKyAqIG5vdCB6ZXJvLCB0aGUgb3JpZ2luIG11c3QgYmUgZW1wdHkgKGluIG90aGVyIHdvcmRzLCB8b3JpZ2luX2xlbnwKKyAqIG11c3QgYmUgMCkuCisgKgorICogVGhlIEFMVFNWQyBmcmFtZSBpcyBvbmx5IHVzYWJsZSBmcm9tIHNlcnZlciBzaWRlLiAgSWYgdGhpcyBmdW5jdGlvbgorICogaXMgaW52b2tlZCB3aXRoIGNsaWVudCBzaWRlIHNlc3Npb24sIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEVgLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFYAorICogICAgIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBjbGllbnQgc2lkZSBzZXNzaW9uCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVGAKKyAqICAgICBUaGUgc3VtIG9mIHxvcmlnaW5fbGVufCBhbmQgfGZpZWxkX3ZhbHVlX2xlbnwgaXMgbGFyZ2VyIHRoYW4KKyAqICAgICAxNjM4Mjsgb3IgfG9yaWdpbl9sZW58IGlzIDAgd2hpbGUgfHN0cmVhbV9pZHwgaXMgMDsgb3IKKyAqICAgICB8b3JpZ2luX2xlbnwgaXMgbm90IDAgd2hpbGUgfHN0cmVhbV9pZHwgaXMgbm90IDAuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX3N1Ym1pdF9hbHRzdmMobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3JpZ2luX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZmllbGRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmaWVsZF92YWx1ZV9sZW4pOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgc2luZ2xlIGVudHJ5IG9mIGFuIG9yaWdpbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIHBvaW50ZXIgdG8gb3JpZ2luLiAgTm8gdmFsaWRhdGlvbiBpcyBtYWRlIGFnYWluc3QgdGhpcyBmaWVsZAorICAgKiBieSB0aGUgbGlicmFyeS4gIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IE5VTEwtdGVybWluYXRlZC4KKyAgICovCisgIHVpbnQ4X3QgKm9yaWdpbjsKKyAgLyoqCisgICAqIFRoZSBsZW5ndGggb2YgdGhlIHxvcmlnaW58LgorICAgKi8KKyAgc2l6ZV90IG9yaWdpbl9sZW47Cit9IG5naHR0cDJfb3JpZ2luX2VudHJ5OworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgcGF5bG9hZCBvZiBPUklHSU4gZnJhbWUuICBPUklHSU4gZnJhbWUgaXMgYSBub24tY3JpdGljYWwKKyAqIGV4dGVuc2lvbiB0byBIVFRQLzIgYW5kIGRlZmluZWQgYnkgYFJGQyA4MzM2CisgKiA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzgzMzY+YF8uCisgKgorICogSWYgdGhpcyBmcmFtZSBpcyByZWNlaXZlZCwgYW5kCisgKiBgbmdodHRwMl9vcHRpb25fc2V0X3VzZXJfcmVjdl9leHRlbnNpb25fdHlwZSgpYCBpcyBub3Qgc2V0LCBhbmQKKyAqIGBuZ2h0dHAyX29wdGlvbl9zZXRfYnVpbHRpbl9yZWN2X2V4dGVuc2lvbl90eXBlKClgIGlzIHNldCBmb3IKKyAqIDplbnVtOmBOR0hUVFAyX09SSUdJTmAsIGBgbmdodHRwMl9leHRlbnNpb24ucGF5bG9hZGBgIHdpbGwgcG9pbnQgdG8KKyAqIHRoaXMgc3RydWN0LgorICoKKyAqIEl0IGhhcyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgLyoqCisgICAqIFRoZSBudW1iZXIgb2Ygb3JpZ2lucyBjb250YWluZWQgaW4gfG92fC4KKyAgICovCisgIHNpemVfdCBub3Y7CisgIC8qKgorICAgKiBUaGUgcG9pbnRlciB0byB0aGUgYXJyYXkgb2Ygb3JpZ2lucyBjb250YWluZWQgaW4gT1JJR0lOIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl9vcmlnaW5fZW50cnkgKm92OworfSBuZ2h0dHAyX2V4dF9vcmlnaW47CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU3VibWl0cyBPUklHSU4gZnJhbWUuCisgKgorICogT1JJR0lOIGZyYW1lIGlzIGEgbm9uLWNyaXRpY2FsIGV4dGVuc2lvbiB0byBIVFRQLzIgYW5kIGRlZmluZWQgYnkKKyAqIGBSRkMgODMzNiA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzgzMzY+YF8uCisgKgorICogVGhlIHxmbGFnc3wgaXMgY3VycmVudGx5IGlnbm9yZWQgYW5kIHNob3VsZCBiZQorICogOmVudW06YE5HSFRUUDJfRkxBR19OT05FYC4KKyAqCisgKiBUaGUgfG92fCBwb2ludHMgdG8gdGhlIGFycmF5IG9mIG9yaWdpbnMuICBUaGUgfG5vdnwgc3BlY2lmaWVzIHRoZQorICogbnVtYmVyIG9mIG9yaWdpbnMgaW5jbHVkZWQgaW4gfG92fC4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBjb3BpZXMKKyAqIG9mIGFsbCBlbGVtZW50cyBpbiB8b3Z8LgorICoKKyAqIFRoZSBPUklHSU4gZnJhbWUgaXMgb25seSB1c2FibGUgYnkgYSBzZXJ2ZXIuICBJZiB0aGlzIGZ1bmN0aW9uIGlzCisgKiBpbnZva2VkIHdpdGggY2xpZW50IHNpZGUgc2Vzc2lvbiwgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAuCisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFYAorICogICAgIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBjbGllbnQgc2lkZSBzZXNzaW9uLgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlRgCisgKiAgICAgVGhlcmUgYXJlIHRvbyBtYW55IG9yaWdpbnMsIG9yIGFuIG9yaWdpbiBpcyB0b28gbGFyZ2UgdG8gZml0CisgKiAgICAgaW50byBhIGRlZmF1bHQgZnJhbWUgcGF5bG9hZC4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc3VibWl0X29yaWdpbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfb3JpZ2luX2VudHJ5ICpvdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5vdik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogQ29tcGFyZXMgYGBsaHMtPm5hbWVgYCBvZiBsZW5ndGggYGBsaHMtPm5hbWVsZW5gYCBieXRlcyBhbmQKKyAqIGBgcmhzLT5uYW1lYGAgb2YgbGVuZ3RoIGBgcmhzLT5uYW1lbGVuYGAgYnl0ZXMuICBSZXR1cm5zIG5lZ2F0aXZlCisgKiBpbnRlZ2VyIGlmIGBgbGhzLT5uYW1lYGAgaXMgZm91bmQgdG8gYmUgbGVzcyB0aGFuIGBgcmhzLT5uYW1lYGA7IG9yCisgKiByZXR1cm5zIHBvc2l0aXZlIGludGVnZXIgaWYgYGBsaHMtPm5hbWVgYCBpcyBmb3VuZCB0byBiZSBncmVhdGVyCisgKiB0aGFuIGBgcmhzLT5uYW1lYGA7IG9yIHJldHVybnMgMCBvdGhlcndpc2UuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX252X2NvbXBhcmVfbmFtZShjb25zdCBuZ2h0dHAyX252ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqcmhzKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgZGVhbGluZyB3aXRoIE5QTiBpbiBjbGllbnQgc2lkZSBvciBBTFBOIGluCisgKiBzZXJ2ZXIgc2lkZS4gIFRoZSB8aW58IGNvbnRhaW5zIHBlZXIncyBwcm90b2NvbCBsaXN0IGluIHByZWZlcmFibGUKKyAqIG9yZGVyLiAgVGhlIGZvcm1hdCBvZiB8aW58IGlzIGxlbmd0aC1wcmVmaXhlZCBhbmQgbm90CisgKiBudWxsLXRlcm1pbmF0ZWQuICBGb3IgZXhhbXBsZSwgYGBoMmBgIGFuZAorICogYGBodHRwLzEuMWBgIHN0b3JlZCBpbiB8aW58IGxpa2UgdGhpczo6CisgKgorICogICAgIGluWzBdID0gMgorICogICAgIGluWzEuLjJdID0gImgyIgorICogICAgIGluWzNdID0gOAorICogICAgIGluWzQuLjExXSA9ICJodHRwLzEuMSIKKyAqICAgICBpbmxlbiA9IDEyCisgKgorICogVGhlIHNlbGVjdGlvbiBhbGdvcml0aG0gaXMgYXMgZm9sbG93czoKKyAqCisgKiAxLiBJZiBwZWVyJ3MgbGlzdCBjb250YWlucyBIVFRQLzIgcHJvdG9jb2wgdGhlIGxpYnJhcnkgc3VwcG9ydHMsCisgKiAgICBpdCBpcyBzZWxlY3RlZCBhbmQgcmV0dXJucyAxLiBUaGUgZm9sbG93aW5nIHN0ZXAgaXMgbm90IHRha2VuLgorICoKKyAqIDIuIElmIHBlZXIncyBsaXN0IGNvbnRhaW5zIGBgaHR0cC8xLjFgYCwgdGhpcyBmdW5jdGlvbiBzZWxlY3RzCisgKiAgICBgYGh0dHAvMS4xYGAgYW5kIHJldHVybnMgMC4gIFRoZSBmb2xsb3dpbmcgc3RlcCBpcyBub3QgdGFrZW4uCisgKgorICogMy4gVGhpcyBmdW5jdGlvbiBzZWxlY3RzIG5vdGhpbmcgYW5kIHJldHVybnMgLTEgKFNvIGNhbGxlZAorICogICAgbm9uLW92ZXJsYXAgY2FzZSkuICBJbiB0aGlzIGNhc2UsIHxvdXR8IGFuZCB8b3V0bGVufCBhcmUgbGVmdAorICogICAgdW50b3VjaGVkLgorICoKKyAqIFNlbGVjdGluZyBgYGgyYGAgbWVhbnMgdGhhdCBgYGgyYGAgaXMgd3JpdHRlbiBpbnRvIHwqb3V0fCBhbmQgaXRzCisgKiBsZW5ndGggKHdoaWNoIGlzIDIpIGlzIGFzc2lnbmVkIHRvIHwqb3V0bGVufC4KKyAqCisgKiBGb3IgQUxQTiwgcmVmZXIgdG8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzczMDEKKyAqCisgKiBTZWUgaHR0cDovL3RlY2hub3Rlcy5nb29nbGVjb2RlLmNvbS9naXQvbmV4dHByb3RvbmVnLmh0bWwgZm9yIG1vcmUKKyAqIGRldGFpbHMgYWJvdXQgTlBOLgorICoKKyAqIEZvciBOUE4sIHRvIHVzZSB0aGlzIG1ldGhvZCB5b3Ugc2hvdWxkIGRvIHNvbWV0aGluZyBsaWtlOjoKKyAqCisgKiAgICAgc3RhdGljIGludCBzZWxlY3RfbmV4dF9wcm90b19jYihTU0wqIHNzbCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXQsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRsZW4sCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmxlbiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKKyAqICAgICB7CisgKiAgICAgICAgIGludCBydjsKKyAqICAgICAgICAgcnYgPSBuZ2h0dHAyX3NlbGVjdF9uZXh0X3Byb3RvY29sKG91dCwgb3V0bGVuLCBpbiwgaW5sZW4pOworICogICAgICAgICBpZiAocnYgPT0gLTEpIHsKKyAqICAgICAgICAgICAgIHJldHVybiBTU0xfVExTRVhUX0VSUl9OT0FDSzsKKyAqICAgICAgICAgfQorICogICAgICAgICBpZiAocnYgPT0gMSkgeworICogICAgICAgICAgICAgKChNeVR5cGUqKWFyZyktPmh0dHAyX3NlbGVjdGVkID0gMTsKKyAqICAgICAgICAgfQorICogICAgICAgICByZXR1cm4gU1NMX1RMU0VYVF9FUlJfT0s7CisgKiAgICAgfQorICogICAgIC4uLgorICogICAgIFNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiKHNzbF9jdHgsIHNlbGVjdF9uZXh0X3Byb3RvX2NiLCBteV9vYmopOworICoKKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfc2VsZWN0X25leHRfcHJvdG9jb2wodW5zaWduZWQgY2hhciAqKm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlubGVuKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5naHR0cDJfaW5mbyBzdHJ1Y3Qgd2l0aCB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiBhYm91dCB0aGUgcnVuLXRpbWUgbGlicmFyeSBpbiB1c2UuICBUaGUgfGxlYXN0X3ZlcnNpb258IGFyZ3VtZW50CisgKiBjYW4gYmUgc2V0IHRvIGEgMjQgYml0IG51bWVyaWNhbCB2YWx1ZSBmb3IgdGhlIGxlYXN0IGFjY2VwdGVkCisgKiB2ZXJzaW9uIG51bWJlciBhbmQgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAqIHJldHVybiBhIGBgTlVMTGBgLiAgUGFzcyBpbiAwIHRvIHNraXAgdGhlIHZlcnNpb24gY2hlY2tpbmcuCisgKi8KK05HSFRUUDJfRVhURVJOIG5naHR0cDJfaW5mbyAqbmdodHRwMl92ZXJzaW9uKGludCBsZWFzdF92ZXJzaW9uKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIDp0eXBlOmBuZ2h0dHAyX2Vycm9yYCBsaWJyYXJ5IGVycm9yIGNvZGUKKyAqIHxsaWJfZXJyb3J8IGlzIGZhdGFsLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9pc19mYXRhbChpbnQgbGliX2Vycm9yX2NvZGUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgbm9uemVybyBpZiBIVFRQIGhlYWRlciBmaWVsZCBuYW1lIHxuYW1lfCBvZiBsZW5ndGggfGxlbnwgaXMKKyAqIHZhbGlkIGFjY29yZGluZyB0byBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yCisgKgorICogQmVjYXVzZSB0aGlzIGlzIGEgaGVhZGVyIGZpZWxkIG5hbWUgaW4gSFRUUDIsIHRoZSB1cHBlciBjYXNlZCBhbHBoYWJldAorICogaXMgdHJlYXRlZCBhcyBlcnJvci4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfY2hlY2tfaGVhZGVyX25hbWUoY29uc3QgdWludDhfdCAqbmFtZSwgc2l6ZV90IGxlbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBub256ZXJvIGlmIEhUVFAgaGVhZGVyIGZpZWxkIHZhbHVlIHx2YWx1ZXwgb2YgbGVuZ3RoIHxsZW58CisgKiBpcyB2YWxpZCBhY2NvcmRpbmcgdG8KKyAqIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIKKyAqLworTkdIVFRQMl9FWFRFUk4gaW50IG5naHR0cDJfY2hlY2tfaGVhZGVyX3ZhbHVlKGNvbnN0IHVpbnQ4X3QgKnZhbHVlLCBzaXplX3QgbGVuKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIHx2YWx1ZXwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gdGhlIHZhbHVlIG9mCisgKiA6YXV0aG9yaXR5IG9yIGhvc3QgaGVhZGVyIGZpZWxkIGlzIHZhbGlkIGFjY29yZGluZyB0bworICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjIKKyAqCisgKiB8dmFsdWV8IGlzIHZhbGlkIGlmIGl0IG1lcmVseSBjb25zaXN0cyBvZiB0aGUgYWxsb3dlZCBjaGFyYWN0ZXJzLgorICogSW4gcGFydGljdWxhciwgaXQgZG9lcyBub3QgY2hlY2sgd2hldGhlciB8dmFsdWV8IGZvbGxvd3MgdGhlIHN5bnRheAorICogb2YgYXV0aG9yaXR5LgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQgbmdodHRwMl9jaGVja19hdXRob3JpdHkoY29uc3QgdWludDhfdCAqdmFsdWUsIHNpemVfdCBsZW4pOworCisvKiBIUEFDSyBBUEkgKi8KKworc3RydWN0IG5naHR0cDJfaGRfZGVmbGF0ZXI7CisKKy8qKgorICogQHN0cnVjdAorICoKKyAqIEhQQUNLIGRlZmxhdGVyIG9iamVjdC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmdodHRwMl9oZF9kZWZsYXRlciBuZ2h0dHAyX2hkX2RlZmxhdGVyOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIEluaXRpYWxpemVzIHwqZGVmbGF0ZXJfcHRyfCBmb3IgZGVmbGF0aW5nIG5hbWUvdmFsdWVzIHBhaXJzLgorICoKKyAqIFRoZSB8bWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplfCBpcyB0aGUgdXBwZXIgYm91bmQgb2YgaGVhZGVyCisgKiB0YWJsZSBzaXplIHRoZSBkZWZsYXRlciB3aWxsIHVzZS4KKyAqCisgKiBJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCB8KmRlZmxhdGVyX3B0cnwgaXMgbGVmdCB1bnRvdWNoZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX2hkX2RlZmxhdGVfbmV3KG5naHR0cDJfaGRfZGVmbGF0ZXIgKipkZWZsYXRlcl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIExpa2UgYG5naHR0cDJfaGRfZGVmbGF0ZV9uZXcoKWAsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgY3VzdG9tIG1lbW9yeQorICogYWxsb2NhdG9yIHNwZWNpZmllZCBpbiB0aGUgfG1lbXwuCisgKgorICogVGhlIHxtZW18IGNhbiBiZSBgYE5VTExgYCBhbmQgdGhlIGNhbGwgaXMgZXF1aXZhbGVudCB0bworICogYG5naHR0cDJfaGRfZGVmbGF0ZV9uZXcoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCB8bWVtfC4gIFRoZSBhcHBsaWNhdGlvbiBpcworICogcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgfG1lbXwuCisgKgorICogVGhlIGxpYnJhcnkgY29kZSBkb2VzIG5vdCByZWZlciB0byB8bWVtfCBwb2ludGVyIGFmdGVyIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMsIHNvIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2FmZWx5IGZyZWUgaXQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludAorbmdodHRwMl9oZF9kZWZsYXRlX25ldzIobmdodHRwMl9oZF9kZWZsYXRlciAqKmRlZmxhdGVyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBEZWFsbG9jYXRlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgfGRlZmxhdGVyfC4KKyAqLworTkdIVFRQMl9FWFRFUk4gdm9pZCBuZ2h0dHAyX2hkX2RlZmxhdGVfZGVsKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBDaGFuZ2VzIGhlYWRlciB0YWJsZSBzaXplIG9mIHRoZSB8ZGVmbGF0ZXJ8IHRvCisgKiB8c2V0dGluZ3NfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZXwgYnl0ZXMuICBUaGlzIG1heSB0cmlnZ2VyIGV2aWN0aW9uCisgKiBpbiB0aGUgZHluYW1pYyB0YWJsZS4KKyAqCisgKiBUaGUgfHNldHRpbmdzX21heF9keW5hbWljX3RhYmxlX3NpemV8IHNob3VsZCBiZSB0aGUgdmFsdWUgcmVjZWl2ZWQKKyAqIGluIFNFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFLgorICoKKyAqIFRoZSBkZWZsYXRlciBuZXZlciB1c2VzIG1vcmUgbWVtb3J5IHRoYW4KKyAqIGBgbWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplYGAgYnl0ZXMgc3BlY2lmaWVkIGluCisgKiBgbmdodHRwMl9oZF9kZWZsYXRlX25ldygpYC4gIFRoZXJlZm9yZSwgaWYKKyAqIHxzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplfCA+CisgKiBgYG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZWBgLCByZXN1bHRpbmcgbWF4aW11bSB0YWJsZSBzaXplCisgKiBiZWNvbWVzIGBgbWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplYGAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50CituZ2h0dHAyX2hkX2RlZmxhdGVfY2hhbmdlX3RhYmxlX3NpemUobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNldHRpbmdzX21heF9keW5hbWljX3RhYmxlX3NpemUpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIERlZmxhdGVzIHRoZSB8bnZhfCwgd2hpY2ggaGFzIHRoZSB8bnZsZW58IG5hbWUvdmFsdWUgcGFpcnMsIGludG8KKyAqIHRoZSB8YnVmfCBvZiBsZW5ndGggfGJ1ZmxlbnwuCisgKgorICogSWYgfGJ1ZnwgaXMgbm90IGxhcmdlIGVub3VnaCB0byBzdG9yZSB0aGUgZGVmbGF0ZWQgaGVhZGVyIGJsb2NrLAorICogdGhpcyBmdW5jdGlvbiBmYWlscyB3aXRoIDplbnVtOmBOR0hUVFAyX0VSUl9JTlNVRkZfQlVGU0laRWAuICBUaGUKKyAqIGNhbGxlciBzaG91bGQgdXNlIGBuZ2h0dHAyX2hkX2RlZmxhdGVfYm91bmQoKWAgdG8ga25vdyB0aGUgdXBwZXIKKyAqIGJvdW5kIG9mIGJ1ZmZlciBzaXplIHJlcXVpcmVkIHRvIGRlZmxhdGUgZ2l2ZW4gaGVhZGVyIG5hbWUvdmFsdWUKKyAqIHBhaXJzLgorICoKKyAqIE9uY2UgdGhpcyBmdW5jdGlvbiBmYWlscywgc3Vic2VxdWVudCBjYWxsIG9mIHRoaXMgZnVuY3Rpb24gYWx3YXlzCisgKiByZXR1cm5zIDplbnVtOmBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUGAuCisgKgorICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBpdCBpcyBzYWZlIHRvIGRlbGV0ZSB0aGUgfG52YXwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB8YnVmfCBpZiBpdAorICogc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0hFQURFUl9DT01QYAorICogICAgIERlZmxhdGlvbiBwcm9jZXNzIGhhcyBmYWlsZWQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5TVUZGX0JVRlNJWkVgCisgKiAgICAgVGhlIHByb3ZpZGVkIHxidWZsZW58IHNpemUgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIG91dHB1dC4KKyAqLworTkdIVFRQMl9FWFRFUk4gc3NpemVfdCBuZ2h0dHAyX2hkX2RlZmxhdGVfaGQobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnZsZW4pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIERlZmxhdGVzIHRoZSB8bnZhfCwgd2hpY2ggaGFzIHRoZSB8bnZsZW58IG5hbWUvdmFsdWUgcGFpcnMsIGludG8KKyAqIHRoZSB8dmVjbGVufCBzaXplIG9mIGJ1ZiB2ZWN0b3IgfHZlY3wuICBUaGUgZWFjaCBzaXplIG9mIGJ1ZmZlcgorICogbXVzdCBiZSBzZXQgaW4gbGVuIGZpZWxkIG9mIDp0eXBlOmBuZ2h0dHAyX3ZlY2AuICBJZiBhbmQgb25seSBpZgorICogb25lIGNodW5rIGlzIGZpbGxlZCB1cCBjb21wbGV0ZWx5LCBuZXh0IGNodW5rIHdpbGwgYmUgdXNlZC4gIElmCisgKiB8dmVjfCBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIHRoZSBkZWZsYXRlZCBoZWFkZXIgYmxvY2ssIHRoaXMKKyAqIGZ1bmN0aW9uIGZhaWxzIHdpdGggOmVudW06YE5HSFRUUDJfRVJSX0lOU1VGRl9CVUZTSVpFYC4gIFRoZSBjYWxsZXIKKyAqIHNob3VsZCB1c2UgYG5naHR0cDJfaGRfZGVmbGF0ZV9ib3VuZCgpYCB0byBrbm93IHRoZSB1cHBlciBib3VuZCBvZgorICogYnVmZmVyIHNpemUgcmVxdWlyZWQgdG8gZGVmbGF0ZSBnaXZlbiBoZWFkZXIgbmFtZS92YWx1ZSBwYWlycy4KKyAqCisgKiBPbmNlIHRoaXMgZnVuY3Rpb24gZmFpbHMsIHN1YnNlcXVlbnQgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uIGFsd2F5cworICogcmV0dXJucyA6ZW51bTpgTkdIVFRQMl9FUlJfSEVBREVSX0NPTVBgLgorICoKKyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgaXQgaXMgc2FmZSB0byBkZWxldGUgdGhlIHxudmF8LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gfHZlY3wgaWYgaXQKKyAqIHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUGAKKyAqICAgICBEZWZsYXRpb24gcHJvY2VzcyBoYXMgZmFpbGVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX0lOU1VGRl9CVUZTSVpFYAorICogICAgIFRoZSBwcm92aWRlZCB8YnVmbGVufCBzaXplIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSBvdXRwdXQuCisgKi8KK05HSFRUUDJfRVhURVJOIHNzaXplX3QgbmdodHRwMl9oZF9kZWZsYXRlX2hkX3ZlYyhuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ZlYyAqdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2ZWNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudmxlbik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBhbiB1cHBlciBib3VuZCBvbiB0aGUgY29tcHJlc3NlZCBzaXplIGFmdGVyIGRlZmxhdGlvbiBvZgorICogfG52YXwgb2YgbGVuZ3RoIHxudmxlbnwuCisgKi8KK05HSFRUUDJfRVhURVJOIHNpemVfdCBuZ2h0dHAyX2hkX2RlZmxhdGVfYm91bmQobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG52bGVuKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGF0IGhlYWRlciB0YWJsZSBvZiB8ZGVmbGF0ZXJ8CisgKiBjb250YWlucy4gIFRoaXMgaXMgdGhlIHN1bSBvZiB0aGUgbnVtYmVyIG9mIHN0YXRpYyB0YWJsZSBhbmQKKyAqIGR5bmFtaWMgdGFibGUsIHNvIHRoZSByZXR1cm4gdmFsdWUgaXMgYXQgbGVhc3QgNjEuCisgKi8KK05HSFRUUDJfRVhURVJOCitzaXplX3QgbmdodHRwMl9oZF9kZWZsYXRlX2dldF9udW1fdGFibGVfZW50cmllcyhuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgdGFibGUgZW50cnkgZGVub3RlZCBieSB8aWR4fCBmcm9tIGhlYWRlciB0YWJsZSBvZgorICogfGRlZmxhdGVyfC4gIFRoZSB8aWR4fCBpcyAxLWJhc2VkLCBhbmQgaWR4PTEgcmV0dXJucyBmaXJzdCBlbnRyeSBvZgorICogc3RhdGljIHRhYmxlLiAgaWR4PTYyIHJldHVybnMgZmlyc3QgZW50cnkgb2YgZHluYW1pYyB0YWJsZSBpZiBpdAorICogZXhpc3RzLiAgU3BlY2lmeWluZyBpZHg9MCBpcyBlcnJvciwgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLgorICogSWYgfGlkeHwgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGUgdGFibGVzCisgKiBjb250YWluLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KKyAqLworTkdIVFRQMl9FWFRFUk4KK2NvbnN0IG5naHR0cDJfbnYgKgorbmdodHRwMl9oZF9kZWZsYXRlX2dldF90YWJsZV9lbnRyeShuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwgc2l6ZV90IGlkeCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgdXNlZCBkeW5hbWljIHRhYmxlIHNpemUsIGluY2x1ZGluZyB0aGUgb3ZlcmhlYWQgMzIKKyAqIGJ5dGVzIHBlciBlbnRyeSBkZXNjcmliZWQgaW4gUkZDIDc1NDEuCisgKi8KK05HSFRUUDJfRVhURVJOCitzaXplX3QgbmdodHRwMl9oZF9kZWZsYXRlX2dldF9keW5hbWljX3RhYmxlX3NpemUobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIG1heGltdW0gZHluYW1pYyB0YWJsZSBzaXplLgorICovCitOR0hUVFAyX0VYVEVSTgorc2l6ZV90CituZ2h0dHAyX2hkX2RlZmxhdGVfZ2V0X21heF9keW5hbWljX3RhYmxlX3NpemUobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIpOworCitzdHJ1Y3QgbmdodHRwMl9oZF9pbmZsYXRlcjsKKworLyoqCisgKiBAc3RydWN0CisgKgorICogSFBBQ0sgaW5mbGF0ZXIgb2JqZWN0LgorICovCit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX2hkX2luZmxhdGVyIG5naHR0cDJfaGRfaW5mbGF0ZXI7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogSW5pdGlhbGl6ZXMgfCppbmZsYXRlcl9wdHJ8IGZvciBpbmZsYXRpbmcgbmFtZS92YWx1ZXMgcGFpcnMuCisgKgorICogSWYgdGhpcyBmdW5jdGlvbiBmYWlscywgfCppbmZsYXRlcl9wdHJ8IGlzIGxlZnQgdW50b3VjaGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX2hkX2luZmxhdGVfbmV3KG5naHR0cDJfaGRfaW5mbGF0ZXIgKippbmZsYXRlcl9wdHIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIExpa2UgYG5naHR0cDJfaGRfaW5mbGF0ZV9uZXcoKWAsIGJ1dCB3aXRoIGFkZGl0aW9uYWwgY3VzdG9tIG1lbW9yeQorICogYWxsb2NhdG9yIHNwZWNpZmllZCBpbiB0aGUgfG1lbXwuCisgKgorICogVGhlIHxtZW18IGNhbiBiZSBgYE5VTExgYCBhbmQgdGhlIGNhbGwgaXMgZXF1aXZhbGVudCB0bworICogYG5naHR0cDJfaGRfaW5mbGF0ZV9uZXcoKWAuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCB8bWVtfC4gIFRoZSBhcHBsaWNhdGlvbiBpcworICogcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgfG1lbXwuCisgKgorICogVGhlIGxpYnJhcnkgY29kZSBkb2VzIG5vdCByZWZlciB0byB8bWVtfCBwb2ludGVyIGFmdGVyIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMsIHNvIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2FmZWx5IGZyZWUgaXQuCisgKi8KK05HSFRUUDJfRVhURVJOIGludCBuZ2h0dHAyX2hkX2luZmxhdGVfbmV3MihuZ2h0dHAyX2hkX2luZmxhdGVyICoqaW5mbGF0ZXJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIERlYWxsb2NhdGVzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB8aW5mbGF0ZXJ8LgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfaGRfaW5mbGF0ZV9kZWwobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIENoYW5nZXMgaGVhZGVyIHRhYmxlIHNpemUgaW4gdGhlIHxpbmZsYXRlcnwuICBUaGlzIG1heSB0cmlnZ2VyCisgKiBldmljdGlvbiBpbiB0aGUgZHluYW1pYyB0YWJsZS4KKyAqCisgKiBUaGUgfHNldHRpbmdzX21heF9keW5hbWljX3RhYmxlX3NpemV8IHNob3VsZCBiZSB0aGUgdmFsdWUKKyAqIHRyYW5zbWl0dGVkIGluIFNFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIGhlYWRlciBibG9jayBpcyBiZWluZworICogaW5mbGF0ZWQuICBJbiBvdGhlciB3b3JkcywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlcgorICogaW5pdGlhbGl6YXRpb24gb2YgfGluZmxhdGVyfCwgYnV0IGJlZm9yZSBjYWxsaW5nCisgKiBgbmdodHRwMl9oZF9pbmZsYXRlX2hkMigpYCwgb3IgYWZ0ZXIKKyAqIGBuZ2h0dHAyX2hkX2luZmxhdGVfZW5kX2hlYWRlcnMoKWAuICBPdGhlcndpc2UsCisgKiBgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAgd2FzIHJldHVybmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURWAKKyAqICAgICBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoaWxlIGhlYWRlciBibG9jayBpcyBiZWluZyBpbmZsYXRlZC4KKyAqICAgICBQcm9iYWJseSwgYXBwbGljYXRpb24gbWlzc2VkIHRvIGNhbGwKKyAqICAgICBgbmdodHRwMl9oZF9pbmZsYXRlX2VuZF9oZWFkZXJzKClgLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfaGRfaW5mbGF0ZV9jaGFuZ2VfdGFibGVfc2l6ZShuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2V0dGluZ3NfbWF4X2R5bmFtaWNfdGFibGVfc2l6ZSk7CisKKy8qKgorICogQGVudW0KKyAqCisgKiBUaGUgZmxhZ3MgZm9yIGhlYWRlciBpbmZsYXRpb24uCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qKgorICAgKiBObyBmbGFnIHNldC4KKyAgICovCisgIE5HSFRUUDJfSERfSU5GTEFURV9OT05FID0gMCwKKyAgLyoqCisgICAqIEluZGljYXRlcyBhbGwgaGVhZGVycyB3ZXJlIGluZmxhdGVkLgorICAgKi8KKyAgTkdIVFRQMl9IRF9JTkZMQVRFX0ZJTkFMID0gMHgwMSwKKyAgLyoqCisgICAqIEluZGljYXRlcyBhIGhlYWRlciB3YXMgZW1pdHRlZC4KKyAgICovCisgIE5HSFRUUDJfSERfSU5GTEFURV9FTUlUID0gMHgwMgorfSBuZ2h0dHAyX2hkX2luZmxhdGVfZmxhZzsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiAuLiB3YXJuaW5nOjoKKyAqCisgKiAgIERlcHJlY2F0ZWQuICBVc2UgYG5naHR0cDJfaGRfaW5mbGF0ZV9oZDIoKWAgaW5zdGVhZC4KKyAqCisgKiBJbmZsYXRlcyBuYW1lL3ZhbHVlIGJsb2NrIHN0b3JlZCBpbiB8aW58IHdpdGggbGVuZ3RoIHxpbmxlbnwuICBUaGlzCisgKiBmdW5jdGlvbiBwZXJmb3JtcyBkZWNvbXByZXNzaW9uLiAgRm9yIGVhY2ggc3VjY2Vzc2Z1bCBlbWlzc2lvbiBvZgorICogaGVhZGVyIG5hbWUvdmFsdWUgcGFpciwgOmVudW06YE5HSFRUUDJfSERfSU5GTEFURV9FTUlUYCBpcyBzZXQgaW4KKyAqIHwqaW5mbGF0ZV9mbGFnc3wgYW5kIG5hbWUvdmFsdWUgcGFpciBpcyBhc3NpZ25lZCB0byB0aGUgfG52X291dHwKKyAqIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucy4gIFRoZSBjYWxsZXIgbXVzdCBub3QgZnJlZSB0aGUgbWVtYmVycyBvZgorICogfG52X291dHwuCisgKgorICogVGhlIHxudl9vdXR8IG1heSBpbmNsdWRlIHBvaW50ZXJzIHRvIHRoZSBtZW1vcnkgcmVnaW9uIGluIHRoZSB8aW58LgorICogVGhlIGNhbGxlciBtdXN0IHJldGFpbiB0aGUgfGlufCB3aGlsZSB0aGUgfG52X291dHwgaXMgdXNlZC4KKyAqCisgKiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiByZXBlYXRlZGx5IHVudGlsIHRoZQorICogYGAoKmluZmxhdGVfZmxhZ3MpICYgTkdIVFRQMl9IRF9JTkZMQVRFX0ZJTkFMYGAgaXMgbm9uemVybyBhbmQKKyAqIHJldHVybiB2YWx1ZSBpcyBub24tbmVnYXRpdmUuICBUaGlzIG1lYW5zIHRoZSBhbGwgaW5wdXQgdmFsdWVzIGFyZQorICogcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseS4gIFRoZW4gdGhlIGFwcGxpY2F0aW9uIG11c3QgY2FsbAorICogYG5naHR0cDJfaGRfaW5mbGF0ZV9lbmRfaGVhZGVycygpYCB0byBwcmVwYXJlIGZvciB0aGUgbmV4dCBoZWFkZXIKKyAqIGJsb2NrIGlucHV0LgorICoKKyAqIFRoZSBjYWxsZXIgY2FuIGZlZWQgY29tcGxldGUgY29tcHJlc3NlZCBoZWFkZXIgYmxvY2suICBJdCBhbHNvIGNhbgorICogZmVlZCBpdCBpbiBzZXZlcmFsIGNodW5rcy4gIFRoZSBjYWxsZXIgbXVzdCBzZXQgfGluX2ZpbmFsfCB0bworICogbm9uemVybyBpZiB0aGUgZ2l2ZW4gaW5wdXQgaXMgdGhlIGxhc3QgYmxvY2sgb2YgdGhlIGNvbXByZXNzZWQKKyAqIGhlYWRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgaWYgaXQgc3VjY2VlZHMsCisgKiBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfTk9NRU1gCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUGAKKyAqICAgICBJbmZsYXRpb24gcHJvY2VzcyBoYXMgZmFpbGVkLgorICogOmVudW06YE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUmAKKyAqICAgICBUaGUgaGVhZGVyIGZpZWxkIG5hbWUgb3IgdmFsdWUgaXMgdG9vIGxhcmdlLgorICoKKyAqIEV4YW1wbGUgZm9sbG93czo6CisgKgorICogICAgIGludCBpbmZsYXRlX2hlYWRlcl9ibG9jayhuZ2h0dHAyX2hkX2luZmxhdGVyICpoZF9pbmZsYXRlciwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqaW4sIHNpemVfdCBpbmxlbiwgaW50IGZpbmFsKQorICogICAgIHsKKyAqICAgICAgICAgc3NpemVfdCBydjsKKyAqCisgKiAgICAgICAgIGZvcig7OykgeworICogICAgICAgICAgICAgbmdodHRwMl9udiBudjsKKyAqICAgICAgICAgICAgIGludCBpbmZsYXRlX2ZsYWdzID0gMDsKKyAqCisgKiAgICAgICAgICAgICBydiA9IG5naHR0cDJfaGRfaW5mbGF0ZV9oZChoZF9pbmZsYXRlciwgJm52LCAmaW5mbGF0ZV9mbGFncywKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLCBpbmxlbiwgZmluYWwpOworICoKKyAqICAgICAgICAgICAgIGlmKHJ2IDwgMCkgeworICogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW5mbGF0ZSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICV6ZCIsIHJ2KTsKKyAqICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgKiAgICAgICAgICAgICB9CisgKgorICogICAgICAgICAgICAgaW4gKz0gcnY7CisgKiAgICAgICAgICAgICBpbmxlbiAtPSBydjsKKyAqCisgKiAgICAgICAgICAgICBpZihpbmZsYXRlX2ZsYWdzICYgTkdIVFRQMl9IRF9JTkZMQVRFX0VNSVQpIHsKKyAqICAgICAgICAgICAgICAgICBmd3JpdGUobnYubmFtZSwgbnYubmFtZWxlbiwgMSwgc3RkZXJyKTsKKyAqICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIjogIik7CisgKiAgICAgICAgICAgICAgICAgZndyaXRlKG52LnZhbHVlLCBudi52YWx1ZWxlbiwgMSwgc3RkZXJyKTsKKyAqICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgKiAgICAgICAgICAgICB9CisgKiAgICAgICAgICAgICBpZihpbmZsYXRlX2ZsYWdzICYgTkdIVFRQMl9IRF9JTkZMQVRFX0ZJTkFMKSB7CisgKiAgICAgICAgICAgICAgICAgbmdodHRwMl9oZF9pbmZsYXRlX2VuZF9oZWFkZXJzKGhkX2luZmxhdGVyKTsKKyAqICAgICAgICAgICAgICAgICBicmVhazsKKyAqICAgICAgICAgICAgIH0KKyAqICAgICAgICAgICAgIGlmKChpbmZsYXRlX2ZsYWdzICYgTkdIVFRQMl9IRF9JTkZMQVRFX0VNSVQpID09IDAgJiYKKyAqICAgICAgICAgICAgICAgIGlubGVuID09IDApIHsKKyAqICAgICAgICAgICAgICAgIGJyZWFrOworICogICAgICAgICAgICAgfQorICogICAgICAgICB9CisgKgorICogICAgICAgICByZXR1cm4gMDsKKyAqICAgICB9CisgKgorICovCitOR0hUVFAyX0VYVEVSTiBzc2l6ZV90IG5naHR0cDJfaGRfaW5mbGF0ZV9oZChuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbnYgKm52X291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaW5mbGF0ZV9mbGFncywgdWludDhfdCAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5sZW4sIGludCBpbl9maW5hbCk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogSW5mbGF0ZXMgbmFtZS92YWx1ZSBibG9jayBzdG9yZWQgaW4gfGlufCB3aXRoIGxlbmd0aCB8aW5sZW58LiAgVGhpcworICogZnVuY3Rpb24gcGVyZm9ybXMgZGVjb21wcmVzc2lvbi4gIEZvciBlYWNoIHN1Y2Nlc3NmdWwgZW1pc3Npb24gb2YKKyAqIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIsIDplbnVtOmBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVGAgaXMgc2V0IGluCisgKiB8KmluZmxhdGVfZmxhZ3N8IGFuZCBuYW1lL3ZhbHVlIHBhaXIgaXMgYXNzaWduZWQgdG8gdGhlIHxudl9vdXR8CisgKiBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMuICBUaGUgY2FsbGVyIG11c3Qgbm90IGZyZWUgdGhlIG1lbWJlcnMgb2YKKyAqIHxudl9vdXR8LgorICoKKyAqIFRoZSB8bnZfb3V0fCBtYXkgaW5jbHVkZSBwb2ludGVycyB0byB0aGUgbWVtb3J5IHJlZ2lvbiBpbiB0aGUgfGlufC4KKyAqIFRoZSBjYWxsZXIgbXVzdCByZXRhaW4gdGhlIHxpbnwgd2hpbGUgdGhlIHxudl9vdXR8IGlzIHVzZWQuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSB1bnRpbCB0aGUKKyAqIGBgKCppbmZsYXRlX2ZsYWdzKSAmIE5HSFRUUDJfSERfSU5GTEFURV9GSU5BTGBgIGlzIG5vbnplcm8gYW5kCisgKiByZXR1cm4gdmFsdWUgaXMgbm9uLW5lZ2F0aXZlLiAgSWYgdGhhdCBoYXBwZW5zLCBhbGwgZ2l2ZW4gaW5wdXQKKyAqIGRhdGEgKHxpbmxlbnwgYnl0ZXMpIGFyZSBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5LiAgVGhlbiB0aGUKKyAqIGFwcGxpY2F0aW9uIG11c3QgY2FsbCBgbmdodHRwMl9oZF9pbmZsYXRlX2VuZF9oZWFkZXJzKClgIHRvIHByZXBhcmUKKyAqIGZvciB0aGUgbmV4dCBoZWFkZXIgYmxvY2sgaW5wdXQuCisgKgorICogSW4gb3RoZXIgd29yZHMsIGlmIHxpbl9maW5hbHwgaXMgbm9uemVybywgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICogfGlubGVufCwgeW91IGNhbiBhc3NlcnQgdGhhdCA6ZW51bTpgTkdIVFRQMl9IRF9JTkZMQVRFX0ZJTkFMYCBpcworICogc2V0IGluIHwqaW5mbGF0ZV9mbGFnc3wuCisgKgorICogVGhlIGNhbGxlciBjYW4gZmVlZCBjb21wbGV0ZSBjb21wcmVzc2VkIGhlYWRlciBibG9jay4gIEl0IGFsc28gY2FuCisgKiBmZWVkIGl0IGluIHNldmVyYWwgY2h1bmtzLiAgVGhlIGNhbGxlciBtdXN0IHNldCB8aW5fZmluYWx8IHRvCisgKiBub256ZXJvIGlmIHRoZSBnaXZlbiBpbnB1dCBpcyB0aGUgbGFzdCBibG9jayBvZiB0aGUgY29tcHJlc3NlZAorICogaGVhZGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZCBpZiBpdCBzdWNjZWVkcywKKyAqIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIDplbnVtOmBOR0hUVFAyX0VSUl9OT01FTWAKKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogOmVudW06YE5HSFRUUDJfRVJSX0hFQURFUl9DT01QYAorICogICAgIEluZmxhdGlvbiBwcm9jZXNzIGhhcyBmYWlsZWQuCisgKiA6ZW51bTpgTkdIVFRQMl9FUlJfQlVGRkVSX0VSUk9SYAorICogICAgIFRoZSBoZWFkZXIgZmllbGQgbmFtZSBvciB2YWx1ZSBpcyB0b28gbGFyZ2UuCisgKgorICogRXhhbXBsZSBmb2xsb3dzOjoKKyAqCisgKiAgICAgaW50IGluZmxhdGVfaGVhZGVyX2Jsb2NrKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmhkX2luZmxhdGVyLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICppbiwgc2l6ZV90IGlubGVuLCBpbnQgZmluYWwpCisgKiAgICAgeworICogICAgICAgICBzc2l6ZV90IHJ2OworICoKKyAqICAgICAgICAgZm9yKDs7KSB7CisgKiAgICAgICAgICAgICBuZ2h0dHAyX252IG52OworICogICAgICAgICAgICAgaW50IGluZmxhdGVfZmxhZ3MgPSAwOworICoKKyAqICAgICAgICAgICAgIHJ2ID0gbmdodHRwMl9oZF9pbmZsYXRlX2hkMihoZF9pbmZsYXRlciwgJm52LCAmaW5mbGF0ZV9mbGFncywKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiwgaW5sZW4sIGZpbmFsKTsKKyAqCisgKiAgICAgICAgICAgICBpZihydiA8IDApIHsKKyAqICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImluZmxhdGUgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlemQiLCBydik7CisgKiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICogICAgICAgICAgICAgfQorICoKKyAqICAgICAgICAgICAgIGluICs9IHJ2OworICogICAgICAgICAgICAgaW5sZW4gLT0gcnY7CisgKgorICogICAgICAgICAgICAgaWYoaW5mbGF0ZV9mbGFncyAmIE5HSFRUUDJfSERfSU5GTEFURV9FTUlUKSB7CisgKiAgICAgICAgICAgICAgICAgZndyaXRlKG52Lm5hbWUsIG52Lm5hbWVsZW4sIDEsIHN0ZGVycik7CisgKiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI6ICIpOworICogICAgICAgICAgICAgICAgIGZ3cml0ZShudi52YWx1ZSwgbnYudmFsdWVsZW4sIDEsIHN0ZGVycik7CisgKiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICogICAgICAgICAgICAgfQorICogICAgICAgICAgICAgaWYoaW5mbGF0ZV9mbGFncyAmIE5HSFRUUDJfSERfSU5GTEFURV9GSU5BTCkgeworICogICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfaW5mbGF0ZV9lbmRfaGVhZGVycyhoZF9pbmZsYXRlcik7CisgKiAgICAgICAgICAgICAgICAgYnJlYWs7CisgKiAgICAgICAgICAgICB9CisgKiAgICAgICAgICAgICBpZigoaW5mbGF0ZV9mbGFncyAmIE5HSFRUUDJfSERfSU5GTEFURV9FTUlUKSA9PSAwICYmCisgKiAgICAgICAgICAgICAgICBpbmxlbiA9PSAwKSB7CisgKiAgICAgICAgICAgICAgICBicmVhazsKKyAqICAgICAgICAgICAgIH0KKyAqICAgICAgICAgfQorICoKKyAqICAgICAgICAgcmV0dXJuIDA7CisgKiAgICAgfQorICoKKyAqLworTkdIVFRQMl9FWFRFUk4gc3NpemVfdCBuZ2h0dHAyX2hkX2luZmxhdGVfaGQyKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbnYgKm52X291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmluZmxhdGVfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW4sIHNpemVfdCBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5fZmluYWwpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFNpZ25hbHMgdGhlIGVuZCBvZiBkZWNvbXByZXNzaW9uIGZvciBvbmUgaGVhZGVyIGJsb2NrLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbgorICogYWx3YXlzIHN1Y2NlZWRzLgorICovCitOR0hUVFAyX0VYVEVSTiBpbnQKK25naHR0cDJfaGRfaW5mbGF0ZV9lbmRfaGVhZGVycyhuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlcik7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBoZWFkZXIgdGFibGUgb2YgfGluZmxhdGVyfAorICogY29udGFpbnMuICBUaGlzIGlzIHRoZSBzdW0gb2YgdGhlIG51bWJlciBvZiBzdGF0aWMgdGFibGUgYW5kCisgKiBkeW5hbWljIHRhYmxlLCBzbyB0aGUgcmV0dXJuIHZhbHVlIGlzIGF0IGxlYXN0IDYxLgorICovCitOR0hUVFAyX0VYVEVSTgorc2l6ZV90IG5naHR0cDJfaGRfaW5mbGF0ZV9nZXRfbnVtX3RhYmxlX2VudHJpZXMobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHRhYmxlIGVudHJ5IGRlbm90ZWQgYnkgfGlkeHwgZnJvbSBoZWFkZXIgdGFibGUgb2YKKyAqIHxpbmZsYXRlcnwuICBUaGUgfGlkeHwgaXMgMS1iYXNlZCwgYW5kIGlkeD0xIHJldHVybnMgZmlyc3QgZW50cnkgb2YKKyAqIHN0YXRpYyB0YWJsZS4gIGlkeD02MiByZXR1cm5zIGZpcnN0IGVudHJ5IG9mIGR5bmFtaWMgdGFibGUgaWYgaXQKKyAqIGV4aXN0cy4gIFNwZWNpZnlpbmcgaWR4PTAgaXMgZXJyb3IsIGFuZCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KKyAqIElmIHxpZHh8IGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIHRhYmxlcworICogY29udGFpbiwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK05HSFRUUDJfRVhURVJOCitjb25zdCBuZ2h0dHAyX252ICoKK25naHR0cDJfaGRfaW5mbGF0ZV9nZXRfdGFibGVfZW50cnkobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsIHNpemVfdCBpZHgpOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHVzZWQgZHluYW1pYyB0YWJsZSBzaXplLCBpbmNsdWRpbmcgdGhlIG92ZXJoZWFkIDMyCisgKiBieXRlcyBwZXIgZW50cnkgZGVzY3JpYmVkIGluIFJGQyA3NTQxLgorICovCitOR0hUVFAyX0VYVEVSTgorc2l6ZV90IG5naHR0cDJfaGRfaW5mbGF0ZV9nZXRfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGR5bmFtaWMgdGFibGUgc2l6ZS4KKyAqLworTkdIVFRQMl9FWFRFUk4KK3NpemVfdAorbmdodHRwMl9oZF9pbmZsYXRlX2dldF9tYXhfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyKTsKKworc3RydWN0IG5naHR0cDJfc3RyZWFtOworCisvKioKKyAqIEBzdHJ1Y3QKKyAqCisgKiBUaGUgc3RydWN0dXJlIHRvIHJlcHJlc2VudCBIVFRQLzIgc3RyZWFtLiAgVGhlIGRldGFpbHMgb2YgdGhpcworICogc3RydWN0dXJlIGFyZSBpbnRlbnRpb25hbGx5IGhpZGRlbiBmcm9tIHRoZSBwdWJsaWMgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX3N0cmVhbSBuZ2h0dHAyX3N0cmVhbTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gOnR5cGU6YG5naHR0cDJfc3RyZWFtYCBvYmplY3QgZGVub3RlZCBieQorICogfHN0cmVhbV9pZHwuICBJZiBzdHJlYW0gd2FzIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLgorICoKKyAqIFJldHVybnMgaW1hZ2luYXJ5IHJvb3Qgc3RyZWFtIChzZWUKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3Jvb3Rfc3RyZWFtKClgKSBpZiAwIGlzIGdpdmVuIGluIHxzdHJlYW1faWR8LgorICoKKyAqIFVubGVzcyB8c3RyZWFtX2lkfCA9PSAwLCB0aGUgcmV0dXJuZWQgcG9pbnRlciBpcyB2YWxpZCB1bnRpbCBuZXh0CisgKiBjYWxsIG9mIGBuZ2h0dHAyX3Nlc3Npb25fc2VuZCgpYCwgYG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCgpYCwKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCwgYW5kIGBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKWAuCisgKi8KK05HSFRUUDJfRVhURVJOIG5naHR0cDJfc3RyZWFtICoKK25naHR0cDJfc2Vzc2lvbl9maW5kX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkKTsKKworLyoqCisgKiBAZW51bQorICoKKyAqIFN0YXRlIG9mIHN0cmVhbSBhcyBkZXNjcmliZWQgaW4gUkZDIDc1NDAuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qKgorICAgKiBpZGxlIHN0YXRlLgorICAgKi8KKyAgTkdIVFRQMl9TVFJFQU1fU1RBVEVfSURMRSA9IDEsCisgIC8qKgorICAgKiBvcGVuIHN0YXRlLgorICAgKi8KKyAgTkdIVFRQMl9TVFJFQU1fU1RBVEVfT1BFTiwKKyAgLyoqCisgICAqIHJlc2VydmVkIChsb2NhbCkgc3RhdGUuCisgICAqLworICBOR0hUVFAyX1NUUkVBTV9TVEFURV9SRVNFUlZFRF9MT0NBTCwKKyAgLyoqCisgICAqIHJlc2VydmVkIChyZW1vdGUpIHN0YXRlLgorICAgKi8KKyAgTkdIVFRQMl9TVFJFQU1fU1RBVEVfUkVTRVJWRURfUkVNT1RFLAorICAvKioKKyAgICogaGFsZiBjbG9zZWQgKGxvY2FsKSBzdGF0ZS4KKyAgICovCisgIE5HSFRUUDJfU1RSRUFNX1NUQVRFX0hBTEZfQ0xPU0VEX0xPQ0FMLAorICAvKioKKyAgICogaGFsZiBjbG9zZWQgKHJlbW90ZSkgc3RhdGUuCisgICAqLworICBOR0hUVFAyX1NUUkVBTV9TVEFURV9IQUxGX0NMT1NFRF9SRU1PVEUsCisgIC8qKgorICAgKiBjbG9zZWQgc3RhdGUuCisgICAqLworICBOR0hUVFAyX1NUUkVBTV9TVEFURV9DTE9TRUQKK30gbmdodHRwMl9zdHJlYW1fcHJvdG9fc3RhdGU7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyBzdGF0ZSBvZiB8c3RyZWFtfC4gIFRoZSByb290IHN0cmVhbSByZXRyaWV2ZWQgYnkKKyAqIGBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3Jvb3Rfc3RyZWFtKClgIHdpbGwgaGF2ZSBzdHJlYW0gc3RhdGUKKyAqIDplbnVtOmBOR0hUVFAyX1NUUkVBTV9TVEFURV9JRExFYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gbmdodHRwMl9zdHJlYW1fcHJvdG9fc3RhdGUKK25naHR0cDJfc3RyZWFtX2dldF9zdGF0ZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHJvb3Qgb2YgZGVwZW5kZW5jeSB0cmVlLCB3aGljaCBpcyBpbWFnaW5hcnkgc3RyZWFtIHdpdGgKKyAqIHN0cmVhbSBJRCAwLiAgVGhlIHJldHVybmVkIHBvaW50ZXIgaXMgdmFsaWQgdW50aWwgfHNlc3Npb258IGlzCisgKiBmcmVlZCBieSBgbmdodHRwMl9zZXNzaW9uX2RlbCgpYC4KKyAqLworTkdIVFRQMl9FWFRFUk4gbmdodHRwMl9zdHJlYW0gKgorbmdodHRwMl9zZXNzaW9uX2dldF9yb290X3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHBhcmVudCBzdHJlYW0gb2YgfHN0cmVhbXwgaW4gZGVwZW5kZW5jeSB0cmVlLiAgUmV0dXJucworICogTlVMTCBpZiB0aGVyZSBpcyBubyBzdWNoIHN0cmVhbS4KKyAqLworTkdIVFRQMl9FWFRFUk4gbmdodHRwMl9zdHJlYW0gKgorbmdodHRwMl9zdHJlYW1fZ2V0X3BhcmVudChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworTkdIVFRQMl9FWFRFUk4gaW50MzJfdCBuZ2h0dHAyX3N0cmVhbV9nZXRfc3RyZWFtX2lkKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIG5leHQgc2libGluZyBzdHJlYW0gb2YgfHN0cmVhbXwgaW4gZGVwZW5kZW5jeSB0cmVlLgorICogUmV0dXJucyBOVUxMIGlmIHRoZXJlIGlzIG5vIHN1Y2ggc3RyZWFtLgorICovCitOR0hUVFAyX0VYVEVSTiBuZ2h0dHAyX3N0cmVhbSAqCituZ2h0dHAyX3N0cmVhbV9nZXRfbmV4dF9zaWJsaW5nKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgdGhlIHByZXZpb3VzIHNpYmxpbmcgc3RyZWFtIG9mIHxzdHJlYW18IGluIGRlcGVuZGVuY3kgdHJlZS4KKyAqIFJldHVybnMgTlVMTCBpZiB0aGVyZSBpcyBubyBzdWNoIHN0cmVhbS4KKyAqLworTkdIVFRQMl9FWFRFUk4gbmdodHRwMl9zdHJlYW0gKgorbmdodHRwMl9zdHJlYW1fZ2V0X3ByZXZpb3VzX3NpYmxpbmcobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgc3RyZWFtIG9mIHxzdHJlYW18IGluIGRlcGVuZGVuY3kgdHJlZS4KKyAqIFJldHVybnMgTlVMTCBpZiB0aGVyZSBpcyBubyBzdWNoIHN0cmVhbS4KKyAqLworTkdIVFRQMl9FWFRFUk4gbmdodHRwMl9zdHJlYW0gKgorbmdodHRwMl9zdHJlYW1fZ2V0X2ZpcnN0X2NoaWxkKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKioKKyAqIEBmdW5jdGlvbgorICoKKyAqIFJldHVybnMgZGVwZW5kZW5jeSB3ZWlnaHQgdG8gdGhlIHBhcmVudCBzdHJlYW0gb2YgfHN0cmVhbXwuCisgKi8KK05HSFRUUDJfRVhURVJOIGludDMyX3QgbmdodHRwMl9zdHJlYW1fZ2V0X3dlaWdodChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoqCisgKiBAZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhlIHdlaWdodCBmb3IgfHN0cmVhbXwncyBjaGlsZHJlbi4KKyAqLworTkdIVFRQMl9FWFRFUk4gaW50MzJfdAorbmdodHRwMl9zdHJlYW1fZ2V0X3N1bV9kZXBlbmRlbmN5X3dlaWdodChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoqCisgKiBAZnVuY3R5cGVkZWYKKyAqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIGxpYnJhcnkgb3V0cHV0cyBkZWJ1ZyBsb2dnaW5nLgorICogVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyBzdWl0YWJsZSBmb3IgYGB2ZnByaW50ZigzKWBgCisgKgorICogVGhlIGRlYnVnIG91dHB1dCBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIGxpYnJhcnkgaXMgYnVpbHQgd2l0aAorICogYGBERUJVR0JVSUxEYGAgbWFjcm8gZGVmaW5lZC4KKyAqLwordHlwZWRlZiB2b2lkICgqbmdodHRwMl9kZWJ1Z192cHJpbnRmX2NhbGxiYWNrKShjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncyk7CisKKy8qKgorICogQGZ1bmN0aW9uCisgKgorICogU2V0cyBhIGRlYnVnIG91dHB1dCBjYWxsYmFjayBjYWxsZWQgYnkgdGhlIGxpYnJhcnkgd2hlbiBidWlsdCB3aXRoCisgKiBgYERFQlVHQlVJTERgYCBtYWNybyBkZWZpbmVkLiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHVzZWQsIGRlYnVnCisgKiBsb2cgaXMgd3JpdHRlbiBpbnRvIHN0YW5kYXJkIGVycm9yIG91dHB1dC4KKyAqCisgKiBGb3IgYnVpbGRzIHdpdGhvdXQgYGBERUJVR0JVSUxEYGAgbWFjcm8gZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBpcworICogbm9vcC4KKyAqCisgKiBOb3RlIHRoYXQgYnVpbGRpbmcgd2l0aCBgYERFQlVHQlVJTERgYCBtYXkgY2F1c2Ugc2lnbmlmaWNhbnQKKyAqIHBlcmZvcm1hbmNlIHBlbmFsdHkgdG8gbGlibmdodHRwMiBiZWNhdXNlIG9mIGV4dHJhIHByb2Nlc3NpbmcuICBJdAorICogc2hvdWxkIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkuCisgKgorICogLi4gV2FybmluZzo6CisgKgorICogICBCdWlsZGluZyB3aXRoIGBgREVCVUdCVUlMRGBgIG1heSBjYXVzZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQorICogICBwZW5hbHR5IHRvIGxpYm5naHR0cDIgYmVjYXVzZSBvZiBleHRyYSBwcm9jZXNzaW5nLiAgSXQgc2hvdWxkIGJlCisgKiAgIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlIG9ubHkuICBXZSB3cml0ZSB0aGlzIHR3byB0aW1lcyBiZWNhdXNlCisgKiAgIHRoaXMgaXMgaW1wb3J0YW50LgorICovCitOR0hUVFAyX0VYVEVSTiB2b2lkIG5naHR0cDJfc2V0X2RlYnVnX3ZwcmludGZfY2FsbGJhY2soCisgICAgbmdodHRwMl9kZWJ1Z192cHJpbnRmX2NhbGxiYWNrIGRlYnVnX3ZwcmludGZfY2FsbGJhY2spOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTkdIVFRQMl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9pbmNsdWRlcy9uZ2h0dHAyL25naHR0cDJ2ZXIuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL2luY2x1ZGVzL25naHR0cDIvbmdodHRwMnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDIxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9pbmNsdWRlcy9uZ2h0dHAyL25naHR0cDJ2ZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTMgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMlZFUl9ICisjZGVmaW5lIE5HSFRUUDJWRVJfSAorCisvKioKKyAqIEBtYWNybworICogVmVyc2lvbiBudW1iZXIgb2YgdGhlIG5naHR0cDIgbGlicmFyeSByZWxlYXNlCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9WRVJTSU9OICIxLjQwLjAiCisKKy8qKgorICogQG1hY3JvCisgKiBOdW1lcmljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBuZ2h0dHAyIGxpYnJhcnkKKyAqIHJlbGVhc2UuIFRoaXMgaXMgYSAyNCBiaXQgbnVtYmVyIHdpdGggOCBiaXRzIGZvciBtYWpvciBudW1iZXIsIDggYml0cworICogZm9yIG1pbm9yIGFuZCA4IGJpdHMgZm9yIHBhdGNoLiBWZXJzaW9uIDEuMi4zIGJlY29tZXMgMHgwMTAyMDMuCisgKi8KKyNkZWZpbmUgTkdIVFRQMl9WRVJTSU9OX05VTSAweDAxMjgwMAorCisjZW5kaWYgLyogTkdIVFRQMlZFUl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2J1Zi5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9idWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTQzNWJlCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9idWYuYwpAQCAtMCwwICsxLDUyNSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9idWYuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJuZ2h0dHAyX2hlbHBlci5oIgorI2luY2x1ZGUgIm5naHR0cDJfZGVidWcuaCIKKwordm9pZCBuZ2h0dHAyX2J1Zl9pbml0KG5naHR0cDJfYnVmICpidWYpIHsKKyAgYnVmLT5iZWdpbiA9IE5VTEw7CisgIGJ1Zi0+ZW5kID0gTlVMTDsKKyAgYnVmLT5wb3MgPSBOVUxMOworICBidWYtPmxhc3QgPSBOVUxMOworICBidWYtPm1hcmsgPSBOVUxMOworfQorCitpbnQgbmdodHRwMl9idWZfaW5pdDIobmdodHRwMl9idWYgKmJ1Ziwgc2l6ZV90IGluaXRpYWwsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgbmdodHRwMl9idWZfaW5pdChidWYpOworICByZXR1cm4gbmdodHRwMl9idWZfcmVzZXJ2ZShidWYsIGluaXRpYWwsIG1lbSk7Cit9CisKK3ZvaWQgbmdodHRwMl9idWZfZnJlZShuZ2h0dHAyX2J1ZiAqYnVmLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIGlmIChidWYgPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorCisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBidWYtPmJlZ2luKTsKKyAgYnVmLT5iZWdpbiA9IE5VTEw7Cit9CisKK2ludCBuZ2h0dHAyX2J1Zl9yZXNlcnZlKG5naHR0cDJfYnVmICpidWYsIHNpemVfdCBuZXdfY2FwLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIHVpbnQ4X3QgKnB0cjsKKyAgc2l6ZV90IGNhcDsKKworICBjYXAgPSBuZ2h0dHAyX2J1Zl9jYXAoYnVmKTsKKworICBpZiAoY2FwID49IG5ld19jYXApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIG5ld19jYXAgPSBuZ2h0dHAyX21heChuZXdfY2FwLCBjYXAgKiAyKTsKKworICBwdHIgPSBuZ2h0dHAyX21lbV9yZWFsbG9jKG1lbSwgYnVmLT5iZWdpbiwgbmV3X2NhcCk7CisgIGlmIChwdHIgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIGJ1Zi0+cG9zID0gcHRyICsgKGJ1Zi0+cG9zIC0gYnVmLT5iZWdpbik7CisgIGJ1Zi0+bGFzdCA9IHB0ciArIChidWYtPmxhc3QgLSBidWYtPmJlZ2luKTsKKyAgYnVmLT5tYXJrID0gcHRyICsgKGJ1Zi0+bWFyayAtIGJ1Zi0+YmVnaW4pOworICBidWYtPmJlZ2luID0gcHRyOworICBidWYtPmVuZCA9IHB0ciArIG5ld19jYXA7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9idWZfcmVzZXQobmdodHRwMl9idWYgKmJ1ZikgeworICBidWYtPnBvcyA9IGJ1Zi0+bGFzdCA9IGJ1Zi0+bWFyayA9IGJ1Zi0+YmVnaW47Cit9CisKK3ZvaWQgbmdodHRwMl9idWZfd3JhcF9pbml0KG5naHR0cDJfYnVmICpidWYsIHVpbnQ4X3QgKmJlZ2luLCBzaXplX3QgbGVuKSB7CisgIGJ1Zi0+YmVnaW4gPSBidWYtPnBvcyA9IGJ1Zi0+bGFzdCA9IGJ1Zi0+bWFyayA9IGJlZ2luOworICBidWYtPmVuZCA9IGJlZ2luICsgbGVuOworfQorCitzdGF0aWMgaW50IGJ1Zl9jaGFpbl9uZXcobmdodHRwMl9idWZfY2hhaW4gKipjaGFpbiwgc2l6ZV90IGNodW5rX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIGludCBydjsKKworICAqY2hhaW4gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9idWZfY2hhaW4pKTsKKyAgaWYgKCpjaGFpbiA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgKCpjaGFpbiktPm5leHQgPSBOVUxMOworCisgIHJ2ID0gbmdodHRwMl9idWZfaW5pdDIoJigqY2hhaW4pLT5idWYsIGNodW5rX2xlbmd0aCwgbWVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgKmNoYWluKTsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYnVmX2NoYWluX2RlbChuZ2h0dHAyX2J1Zl9jaGFpbiAqY2hhaW4sIG5naHR0cDJfbWVtICptZW0pIHsKKyAgbmdodHRwMl9idWZfZnJlZSgmY2hhaW4tPmJ1ZiwgbWVtKTsKKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGNoYWluKTsKK30KKworaW50IG5naHR0cDJfYnVmc19pbml0KG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGNodW5rX2xlbmd0aCwgc2l6ZV90IG1heF9jaHVuaywKKyAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIHJldHVybiBuZ2h0dHAyX2J1ZnNfaW5pdDIoYnVmcywgY2h1bmtfbGVuZ3RoLCBtYXhfY2h1bmssIDAsIG1lbSk7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfaW5pdDIobmdodHRwMl9idWZzICpidWZzLCBzaXplX3QgY2h1bmtfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2NodW5rLCBzaXplX3Qgb2Zmc2V0LCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIHJldHVybiBuZ2h0dHAyX2J1ZnNfaW5pdDMoYnVmcywgY2h1bmtfbGVuZ3RoLCBtYXhfY2h1bmssIG1heF9jaHVuaywgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbSk7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfaW5pdDMobmdodHRwMl9idWZzICpidWZzLCBzaXplX3QgY2h1bmtfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2NodW5rLCBzaXplX3QgY2h1bmtfa2VlcCwgc2l6ZV90IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfYnVmX2NoYWluICpjaGFpbjsKKworICBpZiAoY2h1bmtfa2VlcCA9PSAwIHx8IG1heF9jaHVuayA8IGNodW5rX2tlZXAgfHwgY2h1bmtfbGVuZ3RoIDwgb2Zmc2V0KSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBydiA9IGJ1Zl9jaGFpbl9uZXcoJmNoYWluLCBjaHVua19sZW5ndGgsIG1lbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgYnVmcy0+bWVtID0gbWVtOworICBidWZzLT5vZmZzZXQgPSBvZmZzZXQ7CisKKyAgYnVmcy0+aGVhZCA9IGNoYWluOworICBidWZzLT5jdXIgPSBidWZzLT5oZWFkOworCisgIG5naHR0cDJfYnVmX3NoaWZ0X3JpZ2h0KCZidWZzLT5jdXItPmJ1Ziwgb2Zmc2V0KTsKKworICBidWZzLT5jaHVua19sZW5ndGggPSBjaHVua19sZW5ndGg7CisgIGJ1ZnMtPmNodW5rX3VzZWQgPSAxOworICBidWZzLT5tYXhfY2h1bmsgPSBtYXhfY2h1bms7CisgIGJ1ZnMtPmNodW5rX2tlZXAgPSBjaHVua19rZWVwOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9idWZzX3JlYWxsb2MobmdodHRwMl9idWZzICpidWZzLCBzaXplX3QgY2h1bmtfbGVuZ3RoKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9idWZfY2hhaW4gKmNoYWluOworCisgIGlmIChjaHVua19sZW5ndGggPCBidWZzLT5vZmZzZXQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIHJ2ID0gYnVmX2NoYWluX25ldygmY2hhaW4sIGNodW5rX2xlbmd0aCwgYnVmcy0+bWVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBuZ2h0dHAyX2J1ZnNfZnJlZShidWZzKTsKKworICBidWZzLT5oZWFkID0gY2hhaW47CisgIGJ1ZnMtPmN1ciA9IGJ1ZnMtPmhlYWQ7CisKKyAgbmdodHRwMl9idWZfc2hpZnRfcmlnaHQoJmJ1ZnMtPmN1ci0+YnVmLCBidWZzLT5vZmZzZXQpOworCisgIGJ1ZnMtPmNodW5rX2xlbmd0aCA9IGNodW5rX2xlbmd0aDsKKyAgYnVmcy0+Y2h1bmtfdXNlZCA9IDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9idWZzX2ZyZWUobmdodHRwMl9idWZzICpidWZzKSB7CisgIG5naHR0cDJfYnVmX2NoYWluICpjaGFpbiwgKm5leHRfY2hhaW47CisKKyAgaWYgKGJ1ZnMgPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorCisgIGZvciAoY2hhaW4gPSBidWZzLT5oZWFkOyBjaGFpbjspIHsKKyAgICBuZXh0X2NoYWluID0gY2hhaW4tPm5leHQ7CisKKyAgICBidWZfY2hhaW5fZGVsKGNoYWluLCBidWZzLT5tZW0pOworCisgICAgY2hhaW4gPSBuZXh0X2NoYWluOworICB9CisKKyAgYnVmcy0+aGVhZCA9IE5VTEw7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfd3JhcF9pbml0KG5naHR0cDJfYnVmcyAqYnVmcywgdWludDhfdCAqYmVnaW4sIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfYnVmX2NoYWluICpjaGFpbjsKKworICBjaGFpbiA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX2J1Zl9jaGFpbikpOworICBpZiAoY2hhaW4gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIGNoYWluLT5uZXh0ID0gTlVMTDsKKworICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJmNoYWluLT5idWYsIGJlZ2luLCBsZW4pOworCisgIGJ1ZnMtPm1lbSA9IG1lbTsKKyAgYnVmcy0+b2Zmc2V0ID0gMDsKKworICBidWZzLT5oZWFkID0gY2hhaW47CisgIGJ1ZnMtPmN1ciA9IGJ1ZnMtPmhlYWQ7CisKKyAgYnVmcy0+Y2h1bmtfbGVuZ3RoID0gbGVuOworICBidWZzLT5jaHVua191c2VkID0gMTsKKyAgYnVmcy0+bWF4X2NodW5rID0gMTsKKyAgYnVmcy0+Y2h1bmtfa2VlcCA9IDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfd3JhcF9pbml0MihuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIGNvbnN0IG5naHR0cDJfdmVjICp2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZlY2xlbiwgbmdodHRwMl9tZW0gKm1lbSkgeworICBzaXplX3QgaSA9IDA7CisgIG5naHR0cDJfYnVmX2NoYWluICpjdXJfY2hhaW47CisgIG5naHR0cDJfYnVmX2NoYWluICpoZWFkX2NoYWluOworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqKmRzdF9jaGFpbiA9ICZoZWFkX2NoYWluOworCisgIGlmICh2ZWNsZW4gPT0gMCkgeworICAgIHJldHVybiBuZ2h0dHAyX2J1ZnNfd3JhcF9pbml0KGJ1ZnMsIE5VTEwsIDAsIG1lbSk7CisgIH0KKworICBoZWFkX2NoYWluID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfYnVmX2NoYWluKSAqIHZlY2xlbik7CisgIGlmIChoZWFkX2NoYWluID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgdmVjbGVuOyArK2kpIHsKKyAgICBjdXJfY2hhaW4gPSAmaGVhZF9jaGFpbltpXTsKKyAgICBjdXJfY2hhaW4tPm5leHQgPSBOVUxMOworICAgIG5naHR0cDJfYnVmX3dyYXBfaW5pdCgmY3VyX2NoYWluLT5idWYsIHZlY1tpXS5iYXNlLCB2ZWNbaV0ubGVuKTsKKworICAgICpkc3RfY2hhaW4gPSBjdXJfY2hhaW47CisgICAgZHN0X2NoYWluID0gJmN1cl9jaGFpbi0+bmV4dDsKKyAgfQorCisgIGJ1ZnMtPm1lbSA9IG1lbTsKKyAgYnVmcy0+b2Zmc2V0ID0gMDsKKworICBidWZzLT5oZWFkID0gaGVhZF9jaGFpbjsKKyAgYnVmcy0+Y3VyID0gYnVmcy0+aGVhZDsKKworICAvKiBXZSBkb24ndCB1c2UgY2h1bmtfbGVuZ3RoIHNpbmNlIG5vIGFsbG9jYXRpb24gaXMgZXhwZWN0ZWQuICovCisgIGJ1ZnMtPmNodW5rX2xlbmd0aCA9IDA7CisgIGJ1ZnMtPmNodW5rX3VzZWQgPSB2ZWNsZW47CisgIGJ1ZnMtPm1heF9jaHVuayA9IHZlY2xlbjsKKyAgYnVmcy0+Y2h1bmtfa2VlcCA9IHZlY2xlbjsKKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX2J1ZnNfd3JhcF9mcmVlKG5naHR0cDJfYnVmcyAqYnVmcykgeworICBpZiAoYnVmcyA9PSBOVUxMKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGJ1ZnMtPmhlYWQpIHsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKGJ1ZnMtPm1lbSwgYnVmcy0+aGVhZCk7CisgIH0KK30KKwordm9pZCBuZ2h0dHAyX2J1ZnNfc2Vla19sYXN0X3ByZXNlbnQobmdodHRwMl9idWZzICpidWZzKSB7CisgIG5naHR0cDJfYnVmX2NoYWluICpjaTsKKworICBmb3IgKGNpID0gYnVmcy0+Y3VyOyBjaTsgY2kgPSBjaS0+bmV4dCkgeworICAgIGlmIChuZ2h0dHAyX2J1Zl9sZW4oJmNpLT5idWYpID09IDApIHsKKyAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgYnVmcy0+Y3VyID0gY2k7CisgICAgfQorICB9Cit9CisKK3NpemVfdCBuZ2h0dHAyX2J1ZnNfbGVuKG5naHR0cDJfYnVmcyAqYnVmcykgeworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY2k7CisgIHNpemVfdCBsZW47CisKKyAgbGVuID0gMDsKKyAgZm9yIChjaSA9IGJ1ZnMtPmhlYWQ7IGNpOyBjaSA9IGNpLT5uZXh0KSB7CisgICAgbGVuICs9IG5naHR0cDJfYnVmX2xlbigmY2ktPmJ1Zik7CisgIH0KKworICByZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGJ1ZnNfYWxsb2NfY2hhaW4obmdodHRwMl9idWZzICpidWZzKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9idWZfY2hhaW4gKmNoYWluOworCisgIGlmIChidWZzLT5jdXItPm5leHQpIHsKKyAgICBidWZzLT5jdXIgPSBidWZzLT5jdXItPm5leHQ7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChidWZzLT5tYXhfY2h1bmsgPT0gYnVmcy0+Y2h1bmtfdXNlZCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1I7CisgIH0KKworICBydiA9IGJ1Zl9jaGFpbl9uZXcoJmNoYWluLCBidWZzLT5jaHVua19sZW5ndGgsIGJ1ZnMtPm1lbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgREVCVUdGKCJuZXcgYnVmZmVyICV6dSBieXRlcyBhbGxvY2F0ZWQgZm9yIGJ1ZnMgJXAsIHVzZWQgJXp1XG4iLAorICAgICAgICAgYnVmcy0+Y2h1bmtfbGVuZ3RoLCBidWZzLCBidWZzLT5jaHVua191c2VkKTsKKworICArK2J1ZnMtPmNodW5rX3VzZWQ7CisKKyAgYnVmcy0+Y3VyLT5uZXh0ID0gY2hhaW47CisgIGJ1ZnMtPmN1ciA9IGNoYWluOworCisgIG5naHR0cDJfYnVmX3NoaWZ0X3JpZ2h0KCZidWZzLT5jdXItPmJ1ZiwgYnVmcy0+b2Zmc2V0KTsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfYnVmc19hZGQobmdodHRwMl9idWZzICpidWZzLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKSB7CisgIGludCBydjsKKyAgc2l6ZV90IG53cml0ZTsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKyAgY29uc3QgdWludDhfdCAqcDsKKworICBwID0gZGF0YTsKKworICB3aGlsZSAobGVuKSB7CisgICAgYnVmID0gJmJ1ZnMtPmN1ci0+YnVmOworCisgICAgbndyaXRlID0gbmdodHRwMl9taW4obmdodHRwMl9idWZfYXZhaWwoYnVmKSwgbGVuKTsKKyAgICBpZiAobndyaXRlID09IDApIHsKKyAgICAgIHJ2ID0gYnVmc19hbGxvY19jaGFpbihidWZzKTsKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGJ1Zi0+bGFzdCA9IG5naHR0cDJfY3B5bWVtKGJ1Zi0+bGFzdCwgcCwgbndyaXRlKTsKKyAgICBwICs9IG53cml0ZTsKKyAgICBsZW4gLT0gbndyaXRlOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVmc19lbnN1cmVfYWRkYihuZ2h0dHAyX2J1ZnMgKmJ1ZnMpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgIGJ1ZiA9ICZidWZzLT5jdXItPmJ1ZjsKKworICBpZiAobmdodHRwMl9idWZfYXZhaWwoYnVmKSA+IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJ2ID0gYnVmc19hbGxvY19jaGFpbihidWZzKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfYnVmc19hZGRiKG5naHR0cDJfYnVmcyAqYnVmcywgdWludDhfdCBiKSB7CisgIGludCBydjsKKworICBydiA9IGJ1ZnNfZW5zdXJlX2FkZGIoYnVmcyk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgKmJ1ZnMtPmN1ci0+YnVmLmxhc3QrKyA9IGI7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2J1ZnNfYWRkYl9ob2xkKG5naHR0cDJfYnVmcyAqYnVmcywgdWludDhfdCBiKSB7CisgIGludCBydjsKKworICBydiA9IGJ1ZnNfZW5zdXJlX2FkZGIoYnVmcyk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgKmJ1ZnMtPmN1ci0+YnVmLmxhc3QgPSBiOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9idWZzX29yYihuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgYikgeworICBpbnQgcnY7CisKKyAgcnYgPSBidWZzX2Vuc3VyZV9hZGRiKGJ1ZnMpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgICpidWZzLT5jdXItPmJ1Zi5sYXN0KysgfD0gYjsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfYnVmc19vcmJfaG9sZChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgYikgeworICBpbnQgcnY7CisKKyAgcnYgPSBidWZzX2Vuc3VyZV9hZGRiKGJ1ZnMpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgICpidWZzLT5jdXItPmJ1Zi5sYXN0IHw9IGI7CisKKyAgcmV0dXJuIDA7Cit9CisKK3NzaXplX3QgbmdodHRwMl9idWZzX3JlbW92ZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgKipvdXQpIHsKKyAgc2l6ZV90IGxlbjsKKyAgbmdodHRwMl9idWZfY2hhaW4gKmNoYWluOworICBuZ2h0dHAyX2J1ZiAqYnVmOworICB1aW50OF90ICpyZXM7CisgIG5naHR0cDJfYnVmIHJlc2J1ZjsKKworICBsZW4gPSAwOworCisgIGZvciAoY2hhaW4gPSBidWZzLT5oZWFkOyBjaGFpbjsgY2hhaW4gPSBjaGFpbi0+bmV4dCkgeworICAgIGxlbiArPSBuZ2h0dHAyX2J1Zl9sZW4oJmNoYWluLT5idWYpOworICB9CisKKyAgaWYgKGxlbiA9PSAwKSB7CisgICAgcmVzID0gTlVMTDsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJlcyA9IG5naHR0cDJfbWVtX21hbGxvYyhidWZzLT5tZW0sIGxlbik7CisgIGlmIChyZXMgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIG5naHR0cDJfYnVmX3dyYXBfaW5pdCgmcmVzYnVmLCByZXMsIGxlbik7CisKKyAgZm9yIChjaGFpbiA9IGJ1ZnMtPmhlYWQ7IGNoYWluOyBjaGFpbiA9IGNoYWluLT5uZXh0KSB7CisgICAgYnVmID0gJmNoYWluLT5idWY7CisgICAgcmVzYnVmLmxhc3QgPSBuZ2h0dHAyX2NweW1lbShyZXNidWYubGFzdCwgYnVmLT5wb3MsIG5naHR0cDJfYnVmX2xlbihidWYpKTsKKyAgfQorCisgICpvdXQgPSByZXM7CisKKyAgcmV0dXJuIChzc2l6ZV90KWxlbjsKK30KKworc2l6ZV90IG5naHR0cDJfYnVmc19yZW1vdmVfY29weShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgKm91dCkgeworICBzaXplX3QgbGVuOworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY2hhaW47CisgIG5naHR0cDJfYnVmICpidWY7CisgIG5naHR0cDJfYnVmIHJlc2J1ZjsKKworICBsZW4gPSBuZ2h0dHAyX2J1ZnNfbGVuKGJ1ZnMpOworCisgIG5naHR0cDJfYnVmX3dyYXBfaW5pdCgmcmVzYnVmLCBvdXQsIGxlbik7CisKKyAgZm9yIChjaGFpbiA9IGJ1ZnMtPmhlYWQ7IGNoYWluOyBjaGFpbiA9IGNoYWluLT5uZXh0KSB7CisgICAgYnVmID0gJmNoYWluLT5idWY7CisgICAgcmVzYnVmLmxhc3QgPSBuZ2h0dHAyX2NweW1lbShyZXNidWYubGFzdCwgYnVmLT5wb3MsIG5naHR0cDJfYnVmX2xlbihidWYpKTsKKyAgfQorCisgIHJldHVybiBsZW47Cit9CisKK3ZvaWQgbmdodHRwMl9idWZzX3Jlc2V0KG5naHR0cDJfYnVmcyAqYnVmcykgeworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY2hhaW4sICpjaTsKKyAgc2l6ZV90IGs7CisKKyAgayA9IGJ1ZnMtPmNodW5rX2tlZXA7CisKKyAgZm9yIChjaSA9IGJ1ZnMtPmhlYWQ7IGNpOyBjaSA9IGNpLT5uZXh0KSB7CisgICAgbmdodHRwMl9idWZfcmVzZXQoJmNpLT5idWYpOworICAgIG5naHR0cDJfYnVmX3NoaWZ0X3JpZ2h0KCZjaS0+YnVmLCBidWZzLT5vZmZzZXQpOworCisgICAgaWYgKC0tayA9PSAwKSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZiAoY2kpIHsKKyAgICBjaGFpbiA9IGNpLT5uZXh0OworICAgIGNpLT5uZXh0ID0gTlVMTDsKKworICAgIGZvciAoY2kgPSBjaGFpbjsgY2k7KSB7CisgICAgICBjaGFpbiA9IGNpLT5uZXh0OworCisgICAgICBidWZfY2hhaW5fZGVsKGNpLCBidWZzLT5tZW0pOworCisgICAgICBjaSA9IGNoYWluOworICAgIH0KKworICAgIGJ1ZnMtPmNodW5rX3VzZWQgPSBidWZzLT5jaHVua19rZWVwOworICB9CisKKyAgYnVmcy0+Y3VyID0gYnVmcy0+aGVhZDsKK30KKworaW50IG5naHR0cDJfYnVmc19hZHZhbmNlKG5naHR0cDJfYnVmcyAqYnVmcykgeyByZXR1cm4gYnVmc19hbGxvY19jaGFpbihidWZzKTsgfQorCitpbnQgbmdodHRwMl9idWZzX25leHRfcHJlc2VudChuZ2h0dHAyX2J1ZnMgKmJ1ZnMpIHsKKyAgbmdodHRwMl9idWZfY2hhaW4gKmNoYWluOworCisgIGNoYWluID0gYnVmcy0+Y3VyLT5uZXh0OworCisgIHJldHVybiBjaGFpbiAmJiBuZ2h0dHAyX2J1Zl9sZW4oJmNoYWluLT5idWYpOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9idWYuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjY2U2NwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfYnVmLmgKQEAgLTAsMCArMSw0MTIgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX0JVRl9ICisjZGVmaW5lIE5HSFRUUDJfQlVGX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCisjaW5jbHVkZSAibmdodHRwMl9pbnQuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX21lbS5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIFRoaXMgcG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4gVGhlIGVmZmVjdGl2ZSByYW5nZQorICAgICBvZiBidWZmZXIgaXMgW2JlZ2luLCBlbmQpLiAqLworICB1aW50OF90ICpiZWdpbjsKKyAgLyogVGhpcyBwb2ludHMgdG8gdGhlIG1lbW9yeSBvbmUgYnl0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUKKyAgICAgYnVmZmVyLiAqLworICB1aW50OF90ICplbmQ7CisgIC8qIFRoZSBwb3NpdGlvbiBpbmRpY2F0b3IgZm9yIGVmZmVjdGl2ZSBzdGFydCBvZiB0aGUgYnVmZmVyLiBwb3MgPD0KKyAgICAgbGFzdCBtdXN0IGJlIGhvbGQuICovCisgIHVpbnQ4X3QgKnBvczsKKyAgLyogVGhlIHBvc2l0aW9uIGluZGljYXRvciBmb3IgZWZmZWN0aXZlIG9uZSBiZXlvbmQgb2YgdGhlIGVuZCBvZiB0aGUKKyAgICAgYnVmZmVyLiBsYXN0IDw9IGVuZCBtdXN0IGJlIGhvbGQuICovCisgIHVpbnQ4X3QgKmxhc3Q7CisgIC8qIE1hcmsgYXJiaXRyYXJ5IHBvc2l0aW9uIGluIGJ1ZmZlciBbYmVnaW4sIGVuZCkgKi8KKyAgdWludDhfdCAqbWFyazsKK30gbmdodHRwMl9idWY7CisKKyNkZWZpbmUgbmdodHRwMl9idWZfbGVuKEJVRikgKChzaXplX3QpKChCVUYpLT5sYXN0IC0gKEJVRiktPnBvcykpCisjZGVmaW5lIG5naHR0cDJfYnVmX2F2YWlsKEJVRikgKChzaXplX3QpKChCVUYpLT5lbmQgLSAoQlVGKS0+bGFzdCkpCisjZGVmaW5lIG5naHR0cDJfYnVmX21hcmtfYXZhaWwoQlVGKSAoKHNpemVfdCkoKEJVRiktPm1hcmsgLSAoQlVGKS0+bGFzdCkpCisjZGVmaW5lIG5naHR0cDJfYnVmX2NhcChCVUYpICgoc2l6ZV90KSgoQlVGKS0+ZW5kIC0gKEJVRiktPmJlZ2luKSkKKworI2RlZmluZSBuZ2h0dHAyX2J1Zl9wb3Nfb2Zmc2V0KEJVRikgKChzaXplX3QpKChCVUYpLT5wb3MgLSAoQlVGKS0+YmVnaW4pKQorI2RlZmluZSBuZ2h0dHAyX2J1Zl9sYXN0X29mZnNldChCVUYpICgoc2l6ZV90KSgoQlVGKS0+bGFzdCAtIChCVUYpLT5iZWdpbikpCisKKyNkZWZpbmUgbmdodHRwMl9idWZfc2hpZnRfcmlnaHQoQlVGLCBBTVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChCVUYpLT5wb3MgKz0gQU1UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoQlVGKS0+bGFzdCArPSBBTVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgbmdodHRwMl9idWZfc2hpZnRfbGVmdChCVUYsIEFNVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChCVUYpLT5wb3MgLT0gQU1UOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoQlVGKS0+bGFzdCAtPSBBTVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKy8qCisgKiBJbml0aWFsaXplcyB0aGUgfGJ1ZnwuIE5vIG1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4gdGhpcyBmdW5jdGlvbi4gVXNlCisgKiBuZ2h0dHAyX2J1Zl9yZXNlcnZlKCkgdG8gYWxsb2NhdGUgbWVtb3J5LgorICovCit2b2lkIG5naHR0cDJfYnVmX2luaXQobmdodHRwMl9idWYgKmJ1Zik7CisKKy8qCisgKiBJbml0aWFsaXplcyB0aGUgfGJ1ZnwgYW5kIGFsbG9jYXRlcyBhdCBsZWFzdCB8aW5pdGlhbHwgYnl0ZXMgb2YKKyAqIG1lbW9yeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9idWZfaW5pdDIobmdodHRwMl9idWYgKmJ1Ziwgc2l6ZV90IGluaXRpYWwsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogRnJlZXMgYnVmZmVyIGluIHxidWZ8LgorICovCit2b2lkIG5naHR0cDJfYnVmX2ZyZWUobmdodHRwMl9idWYgKmJ1ZiwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBFeHRlbmRzIGJ1ZmZlciBzbyB0aGF0IG5naHR0cDJfYnVmX2NhcCgpIHJldHVybnMgYXQgbGVhc3QKKyAqIHxuZXdfY2FwfC4gSWYgZXh0ZW5zaW9ucyB0b29rIHBsYWNlLCBidWZmZXIgcG9pbnRlcnMgaW4gfGJ1Znwgd2lsbAorICogY2hhbmdlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZ3MKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9idWZfcmVzZXJ2ZShuZ2h0dHAyX2J1ZiAqYnVmLCBzaXplX3QgbmV3X2NhcCwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBSZXNldHMgcG9zLCBsYXN0LCBtYXJrIG1lbWJlciBvZiB8YnVmfCB0byBidWYtPmJlZ2luLgorICovCit2b2lkIG5naHR0cDJfYnVmX3Jlc2V0KG5naHR0cDJfYnVmICpidWYpOworCisvKgorICogSW5pdGlhbGl6ZXMgfGJ1ZnwgdXNpbmcgc3VwcGxpZWQgYnVmZmVyIHxiZWdpbnwgb2YgbGVuZ3RoCisgKiB8bGVufC4gU2VtYW50aWNhbGx5LCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBjYWxsICpfcmVzZXJ2ZSgpIG9yCisgKiBuZ2h0dHAyX2ZyZWUoKSBmdW5jdGlvbnMgZm9yIHxidWZ8LgorICovCit2b2lkIG5naHR0cDJfYnVmX3dyYXBfaW5pdChuZ2h0dHAyX2J1ZiAqYnVmLCB1aW50OF90ICpiZWdpbiwgc2l6ZV90IGxlbik7CisKK3N0cnVjdCBuZ2h0dHAyX2J1Zl9jaGFpbjsKKwordHlwZWRlZiBzdHJ1Y3QgbmdodHRwMl9idWZfY2hhaW4gbmdodHRwMl9idWZfY2hhaW47CisKKy8qIENoYWlucyAyIGJ1ZmZlcnMgKi8KK3N0cnVjdCBuZ2h0dHAyX2J1Zl9jaGFpbiB7CisgIC8qIFBvaW50cyB0byB0aGUgc3Vic2VxdWVudCBidWZmZXIuIE5VTEwgaWYgdGhlcmUgaXMgbm8gc3VjaAorICAgICBidWZmZXIuICovCisgIG5naHR0cDJfYnVmX2NoYWluICpuZXh0OworICBuZ2h0dHAyX2J1ZiBidWY7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIFBvaW50cyB0byB0aGUgZmlyc3QgYnVmZmVyICovCisgIG5naHR0cDJfYnVmX2NoYWluICpoZWFkOworICAvKiBCdWZmZXIgcG9pbnRlciB3aGVyZSB3cml0ZSBvY2N1cnMuICovCisgIG5naHR0cDJfYnVmX2NoYWluICpjdXI7CisgIC8qIE1lbW9yeSBhbGxvY2F0b3IgKi8KKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgLyogVGhlIGJ1ZmZlciBjYXBhY2l0eSBvZiBlYWNoIGJ1Zi4gIFRoaXMgZmllbGQgbWF5IGJlIDAgaWYKKyAgICAgbmdodHRwMl9idWZzIGlzIGluaXRpYWxpemVkIGJ5IG5naHR0cDJfYnVmc193cmFwX2luaXQqIGZhbWlseQorICAgICBmdW5jdGlvbnMuICovCisgIHNpemVfdCBjaHVua19sZW5ndGg7CisgIC8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBuZ2h0dHAyX2J1Zl9jaGFpbiAqLworICBzaXplX3QgbWF4X2NodW5rOworICAvKiBUaGUgbnVtYmVyIG9mIG5naHR0cDJfYnVmX2NoYWluIGFsbG9jYXRlZCAqLworICBzaXplX3QgY2h1bmtfdXNlZDsKKyAgLyogVGhlIG51bWJlciBvZiBuZ2h0dHAyX2J1Zl9jaGFpbiB0byBrZWVwIG9uIHJlc2V0ICovCisgIHNpemVfdCBjaHVua19rZWVwOworICAvKiBwb3Mgb2Zmc2V0IGZyb20gYmVnaW4gaW4gZWFjaCBidWZmZXJzLiBPbiBpbml0aWFsaXphdGlvbiBhbmQKKyAgICAgcmVzZXQsIGJ1Zi0+cG9zIGFuZCBidWYtPmxhc3QgYXJlIHBvc2l0aW9uZWQgYXQgYnVmLT5iZWdpbiArCisgICAgIG9mZnNldC4gKi8KKyAgc2l6ZV90IG9mZnNldDsKK30gbmdodHRwMl9idWZzOworCisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIG5naHR0cDJfYnVmc19pbml0MiB3aXRoIHRoZSBnaXZlbgorICogYXJndW1lbnRzIGFuZCBvZmZzZXQgPSAwLgorICovCitpbnQgbmdodHRwMl9idWZzX2luaXQobmdodHRwMl9idWZzICpidWZzLCBzaXplX3QgY2h1bmtfbGVuZ3RoLCBzaXplX3QgbWF4X2NodW5rLAorICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIG5naHR0cDJfYnVmc19pbml0MyB3aXRoIHRoZSBnaXZlbgorICogYXJndW1lbnRzIGFuZCBjaHVua19rZWVwID0gbWF4X2NodW5rLgorICovCitpbnQgbmdodHRwMl9idWZzX2luaXQyKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGNodW5rX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9jaHVuaywgc2l6ZV90IG9mZnNldCwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBJbml0aWFsaXplcyB8YnVmc3wuIEVhY2ggYnVmZmVyIHNpemUgaXMgZ2l2ZW4gaW4gdGhlCisgKiB8Y2h1bmtfbGVuZ3RofC4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiBidWZmZXJzIGlzIGdpdmVuIGluIHRoZQorICogfG1heF9jaHVua3wuICBPbiByZXNldCwgZmlyc3QgfGNodW5rX2tlZXB8IGJ1ZmZlcnMgYXJlIGtlcHQgYW5kCisgKiByZW1haW5pbmcgYnVmZmVycyBhcmUgZGVsZXRlZC4gIEVhY2ggYnVmZmVyIHdpbGwgaGF2ZSBidWZzLT5wb3MgYW5kCisgKiBidWZzLT5sYXN0IHNoaWZ0ZWQgdG8gbGVmdCBieSB8b2Zmc2V0fCBieXRlcyBvbiBjcmVhdGlvbiBhbmQgcmVzZXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgZmlyc3QgYnVmZmVyLiAgYnVmcy0+aGVhZCBhbmQgYnVmcy0+Y3VyCisgKiB3aWxsIHBvaW50IHRvIHRoZSBmaXJzdCBidWZmZXIgYWZ0ZXIgdGhpcyBjYWxsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVAorICogICAgIGNodW5rX2tlZXAgaXMgMDsgb3IgbWF4X2NodW5rIDwgY2h1bmtfa2VlcDsgb3Igb2Zmc2V0IGlzIHRvbworICogICAgIGxvbmcuCisgKi8KK2ludCBuZ2h0dHAyX2J1ZnNfaW5pdDMobmdodHRwMl9idWZzICpidWZzLCBzaXplX3QgY2h1bmtfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2NodW5rLCBzaXplX3QgY2h1bmtfa2VlcCwgc2l6ZV90IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBGcmVlcyBhbnkgcmVsYXRlZCByZXNvdXJjZXMgdG8gdGhlIHxidWZzfC4KKyAqLwordm9pZCBuZ2h0dHAyX2J1ZnNfZnJlZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMpOworCisvKgorICogSW5pdGlhbGl6ZXMgfGJ1ZnN8IHVzaW5nIHN1cHBsaWVkIGJ1ZmZlciB8YmVnaW58IG9mIGxlbmd0aCB8bGVufC4KKyAqIFRoZSBmaXJzdCBidWZmZXIgYnVmcy0+aGVhZCB1c2VzIGJ1ZmZlciB8YmVnaW58LiAgVGhlIGJ1ZmZlciBzaXplCisgKiBpcyBmaXhlZCBhbmQgbm8gZXh0cmEgY2h1bmsgYnVmZmVyIGlzIGFsbG9jYXRlZC4gIEluIG90aGVyCisgKiB3b3JkcywgbWF4X2NodW5rID0gY2h1bmtfa2VlcCA9IDEuICBUbyBmcmVlIHRoZSByZXNvdXJjZSBhbGxvY2F0ZWQKKyAqIGZvciB8YnVmc3wsIHVzZSBuZ2h0dHAyX2J1ZnNfd3JhcF9mcmVlKCkuCisgKgorICogRG9uJ3QgdXNlIHRoZSBmdW5jdGlvbiB3aGljaCBwZXJmb3JtcyBhbGxvY2F0aW9uLCBzdWNoIGFzCisgKiBuZ2h0dHAyX2J1ZnNfcmVhbGxvYygpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9idWZzX3dyYXBfaW5pdChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgKmJlZ2luLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBJbml0aWFsaXplcyB8YnVmc3wgdXNpbmcgc3VwcGxpZWQgfHZlY2xlbnwgc2l6ZSBvZiBidWYgdmVjdG9yCisgKiB8dmVjfC4gIFRoZSBudW1iZXIgb2YgYnVmZmVycyBpcyBmaXhlZCBhbmQgbm8gZXh0cmEgY2h1bmsgYnVmZmVyIGlzCisgKiBhbGxvY2F0ZWQuICBJbiBvdGhlciB3b3JkcywgbWF4X2NodW5rID0gY2h1bmtfa2VlcCA9IHxpbl9sZW58LiAgVG8KKyAqIGZyZWUgdGhlIHJlc291cmNlIGFsbG9jYXRlZCBmb3IgfGJ1ZnN8LCB1c2UKKyAqIG5naHR0cDJfYnVmc193cmFwX2ZyZWUoKS4KKyAqCisgKiBEb24ndCB1c2UgdGhlIGZ1bmN0aW9uIHdoaWNoIHBlcmZvcm1zIGFsbG9jYXRpb24sIHN1Y2ggYXMKKyAqIG5naHR0cDJfYnVmc19yZWFsbG9jKCkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBuZ2h0dHAyX2J1ZnNfd3JhcF9pbml0MihuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIGNvbnN0IG5naHR0cDJfdmVjICp2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZlY2xlbiwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBGcmVlcyBhbnkgcmVsYXRlZCByZXNvdXJjZSB0byB0aGUgfGJ1ZnN8LiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdAorICogZnJlZSBzdXBwbGllZCBidWZmZXIgcHJvdmlkZWQgaW4gbmdodHRwMl9idWZzX3dyYXBfaW5pdCgpLgorICovCit2b2lkIG5naHR0cDJfYnVmc193cmFwX2ZyZWUobmdodHRwMl9idWZzICpidWZzKTsKKworLyoKKyAqIFJlYWxsb2NhdGVzIGludGVybmFsIGJ1ZmZlciB1c2luZyB8Y2h1bmtfbGVuZ3RofC4gIFRoZSBtYXhfY2h1bmssCisgKiBjaHVua19rZWVwIGFuZCBvZmZzZXQgZG8gbm90IGNoYW5nZS4gIEFmdGVyIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbgorICogb2YgbmV3IGJ1ZmZlciwgcHJldmlvdXMgYnVmZmVycyBhcmUgZGVhbGxvY2F0ZWQgd2l0aG91dCBjb3B5aW5nCisgKiBhbnl0aGluZyBpbnRvIG5ldyBidWZmZXJzLiAgY2h1bmtfdXNlZCBpcyByZXNldCB0byAxLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVAorICogICAgIGNodW5rX2xlbmd0aCA8IG9mZnNldAorICovCitpbnQgbmdodHRwMl9idWZzX3JlYWxsb2MobmdodHRwMl9idWZzICpidWZzLCBzaXplX3QgY2h1bmtfbGVuZ3RoKTsKKworLyoKKyAqIEFwcGVuZHMgdGhlIHxkYXRhfCBvZiBsZW5ndGggfGxlbnwgdG8gdGhlIHxidWZzfC4gVGhlIHdyaXRlIHN0YXJ0cworICogYXQgYnVmcy0+Y3VyLT5idWYubGFzdC4gQSBuZXcgYnVmZmVycyB3aWxsIGJlIGFsbG9jYXRlZCB0byBzdG9yZQorICogYWxsIGRhdGEuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1IKKyAqICAgICBPdXQgb2YgYnVmZmVyIHNwYWNlLgorICovCitpbnQgbmdodHRwMl9idWZzX2FkZChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworCisvKgorICogQXBwZW5kcyBhIHNpbmdsZSBieXRlIHxifCB0byB0aGUgfGJ1ZnN8LiBUaGUgd3JpdGUgc3RhcnRzIGF0CisgKiBidWZzLT5jdXItPmJ1Zi5sYXN0LiBBIG5ldyBidWZmZXJzIHdpbGwgYmUgYWxsb2NhdGVkIHRvIHN0b3JlIGFsbAorICogZGF0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUgorICogICAgIE91dCBvZiBidWZmZXIgc3BhY2UuCisgKi8KK2ludCBuZ2h0dHAyX2J1ZnNfYWRkYihuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHVpbnQ4X3QgYik7CisKKy8qCisgKiBCZWhhdmVzIGxpa2UgbmdodHRwMl9idWZzX2FkZGIoKSwgYnV0IHRoaXMgZG9lcyBub3QgdXBkYXRlCisgKiBidWYtPmxhc3QgcG9pbnRlci4KKyAqLworaW50IG5naHR0cDJfYnVmc19hZGRiX2hvbGQobmdodHRwMl9idWZzICpidWZzLCB1aW50OF90IGIpOworCisjZGVmaW5lIG5naHR0cDJfYnVmc19mYXN0X2FkZGIoQlVGUywgQikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqKEJVRlMpLT5jdXItPmJ1Zi5sYXN0KysgPSBCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgbmdodHRwMl9idWZzX2Zhc3RfYWRkYl9ob2xkKEJVRlMsIEIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICooQlVGUyktPmN1ci0+YnVmLmxhc3QgPSBCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworLyoKKyAqIFBlcmZvcm1zIGJpdHdpc2UtT1Igb2YgfGJ8IGF0IGJ1ZnMtPmN1ci0+YnVmLmxhc3QuIEEgbmV3IGJ1ZmZlcnMKKyAqIHdpbGwgYmUgYWxsb2NhdGVkIGlmIG5lY2Vzc2FyeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUgorICogICAgIE91dCBvZiBidWZmZXIgc3BhY2UuCisgKi8KK2ludCBuZ2h0dHAyX2J1ZnNfb3JiKG5naHR0cDJfYnVmcyAqYnVmcywgdWludDhfdCBiKTsKKworLyoKKyAqIEJlaGF2ZXMgbGlrZSBuZ2h0dHAyX2J1ZnNfb3JiKCksIGJ1dCBkb2VzIG5vdCB1cGRhdGUgYnVmLT5sYXN0CisgKiBwb2ludGVyLgorICovCitpbnQgbmdodHRwMl9idWZzX29yYl9ob2xkKG5naHR0cDJfYnVmcyAqYnVmcywgdWludDhfdCBiKTsKKworI2RlZmluZSBuZ2h0dHAyX2J1ZnNfZmFzdF9vcmIoQlVGUywgQikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdWludDhfdCAqKnAgPSAmKEJVRlMpLT5jdXItPmJ1Zi5sYXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICoqcCA9ICh1aW50OF90KSgqKnAgfCAoQikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICArKygqcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgbmdodHRwMl9idWZzX2Zhc3Rfb3JiX2hvbGQoQlVGUywgQikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVpbnQ4X3QgKnAgPSAoQlVGUyktPmN1ci0+YnVmLmxhc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqcCA9ICh1aW50OF90KSgqcCB8IChCKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKy8qCisgKiBDb3BpZXMgYWxsIGRhdGEgc3RvcmVkIGluIHxidWZzfCB0byB0aGUgY29udGlndW91cyBidWZmZXIuICBUaGlzCisgKiBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIGNvbnRpZ3VvdXMgbWVtb3J5IHRvIHN0b3JlIGFsbCBkYXRhIGluCisgKiB8YnVmc3wgYW5kIGFzc2lnbnMgaXQgdG8gfCpvdXR8LgorICoKKyAqIFRoZSBjb250ZW50cyBvZiB8YnVmc3wgaXMgbGVmdCB1bmNoYW5nZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgY29waWVkIGRhdGEgYW5kIGFzc2lnbnMgdGhlCisgKiBwb2ludGVyIHRvIGNvcGllZCBkYXRhIHRvIHwqb3V0fCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZQorICogZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitzc2l6ZV90IG5naHR0cDJfYnVmc19yZW1vdmUobmdodHRwMl9idWZzICpidWZzLCB1aW50OF90ICoqb3V0KTsKKworLyoKKyAqIENvcGllcyBhbGwgZGF0YSBzdG9yZWQgaW4gfGJ1ZnN8IHRvIHxvdXR8LiAgVGhpcyBmdW5jdGlvbiBhc3N1bWVzCisgKiB0aGF0IHRoZSBidWZmZXIgc3BhY2UgcG9pbnRlZCBieSB8b3V0fCBoYXMgYXQgbGVhc3QKKyAqIG5naHR0cDJfYnVmcyhidWZzKSBieXRlcy4KKyAqCisgKiBUaGUgY29udGVudHMgb2YgfGJ1ZnN8IGlzIGxlZnQgdW5jaGFuZ2VkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIGNvcGllZCBkYXRhLgorICovCitzaXplX3QgbmdodHRwMl9idWZzX3JlbW92ZV9jb3B5KG5naHR0cDJfYnVmcyAqYnVmcywgdWludDhfdCAqb3V0KTsKKworLyoKKyAqIFJlc2V0cyB8YnVmc3wgYW5kIG1ha2VzIHRoZSBidWZmZXJzIGVtcHR5LgorICovCit2b2lkIG5naHR0cDJfYnVmc19yZXNldChuZ2h0dHAyX2J1ZnMgKmJ1ZnMpOworCisvKgorICogTW92ZXMgYnVmcy0+Y3VyIHRvIGJ1ZnMtPmN1ci0+bmV4dC4gIElmIHJlc3VsdGluZyBidWZzLT5jdXIgaXMKKyAqIE5VTEwsIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG5ldyBidWZmZXJzIGFuZCBidWZzLT5jdXIgcG9pbnRzIHRvCisgKiBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICogTkdIVFRQMl9FUlJfQlVGRkVSX0VSUk9SCisgKiAgICAgT3V0IG9mIGJ1ZmZlciBzcGFjZS4KKyAqLworaW50IG5naHR0cDJfYnVmc19hZHZhbmNlKG5naHR0cDJfYnVmcyAqYnVmcyk7CisKKy8qIFNldHMgYnVmcy0+Y3VyIHRvIGJ1ZnMtPmhlYWQgKi8KKyNkZWZpbmUgbmdodHRwMl9idWZzX3Jld2luZChCVUZTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChCVUZTKS0+Y3VyID0gKEJVRlMpLT5oZWFkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworLyoKKyAqIE1vdmUgYnVmcy0+Y3VyLCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLCB1c2luZyBuZXh0IG1lbWJlciwgdG8KKyAqIHRoZSBsYXN0IGJ1ZiB3aGljaCBoYXMgbmdodHRwMl9idWZfbGVuKGJ1ZikgPiAwIHdpdGhvdXQgc2VlaW5nIGJ1ZgorICogd2hpY2ggc2F0aXNmaWVzIG5naHR0cDJfYnVmX2xlbihidWYpID09IDAuICBJZgorICogbmdodHRwMl9idWZfbGVuKCZidWZzLT5jdXItPmJ1ZikgPT0gMCBvciBidWZzLT5jdXItPm5leHQgaXMgTlVMTCwKKyAqIGJ1ZnMtPmN1ciBpcyB1bmNoYW5nZWQuCisgKi8KK3ZvaWQgbmdodHRwMl9idWZzX3NlZWtfbGFzdF9wcmVzZW50KG5naHR0cDJfYnVmcyAqYnVmcyk7CisKKy8qCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgYnVmcy0+Y3VyLT5uZXh0IGlzIG5vdCBlbXB0eS4KKyAqLworaW50IG5naHR0cDJfYnVmc19uZXh0X3ByZXNlbnQobmdodHRwMl9idWZzICpidWZzKTsKKworI2RlZmluZSBuZ2h0dHAyX2J1ZnNfY3VyX2F2YWlsKEJVRlMpIG5naHR0cDJfYnVmX2F2YWlsKCYoQlVGUyktPmN1ci0+YnVmKQorCisvKgorICogUmV0dXJucyB0aGUgdG90YWwgYnVmZmVyIGxlbmd0aCBvZiB8YnVmc3wuCisgKi8KK3NpemVfdCBuZ2h0dHAyX2J1ZnNfbGVuKG5naHR0cDJfYnVmcyAqYnVmcyk7CisKKyNlbmRpZiAvKiBOR0hUVFAyX0JVRl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2NhbGxiYWNrcy5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9jYWxsYmFja3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzM4MjE0Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9jYWxsYmFja3MuYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9jYWxsYmFja3MuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19uZXcobmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqKmNhbGxiYWNrc19wdHIpIHsKKyAgKmNhbGxiYWNrc19wdHIgPSBjYWxsb2MoMSwgc2l6ZW9mKG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MpKTsKKworICBpZiAoKmNhbGxiYWNrc19wdHIgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3NfZGVsKG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNhbGxiYWNrcykgeworICBmcmVlKGNhbGxiYWNrcyk7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfc2VuZF9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsIG5naHR0cDJfc2VuZF9jYWxsYmFjayBzZW5kX2NhbGxiYWNrKSB7CisgIGNicy0+c2VuZF9jYWxsYmFjayA9IHNlbmRfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfcmVjdl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsIG5naHR0cDJfcmVjdl9jYWxsYmFjayByZWN2X2NhbGxiYWNrKSB7CisgIGNicy0+cmVjdl9jYWxsYmFjayA9IHJlY3ZfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZnJhbWVfcmVjdl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrIG9uX2ZyYW1lX3JlY3ZfY2FsbGJhY2spIHsKKyAgY2JzLT5vbl9mcmFtZV9yZWN2X2NhbGxiYWNrID0gb25fZnJhbWVfcmVjdl9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrIG9uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjaykgeworICBjYnMtPm9uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjayA9IG9uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrIG9uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFjaykgeworICBjYnMtPm9uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFjayA9IG9uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjayBiZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjaykgeworICBjYnMtPmJlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrID0gYmVmb3JlX2ZyYW1lX3NlbmRfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fZnJhbWVfc2VuZF9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9mcmFtZV9zZW5kX2NhbGxiYWNrIG9uX2ZyYW1lX3NlbmRfY2FsbGJhY2spIHsKKyAgY2JzLT5vbl9mcmFtZV9zZW5kX2NhbGxiYWNrID0gb25fZnJhbWVfc2VuZF9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFjayBvbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFjaykgeworICBjYnMtPm9uX2ZyYW1lX25vdF9zZW5kX2NhbGxiYWNrID0gb25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX3N0cmVhbV9jbG9zZV9jYWxsYmFjayBvbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2spIHsKKyAgY2JzLT5vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2sgPSBvbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfb25fYmVnaW5faGVhZGVyc19jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrIG9uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2spIHsKKyAgY2JzLT5vbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrID0gb25fYmVnaW5faGVhZGVyc19jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9oZWFkZXJfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25faGVhZGVyX2NhbGxiYWNrIG9uX2hlYWRlcl9jYWxsYmFjaykgeworICBjYnMtPm9uX2hlYWRlcl9jYWxsYmFjayA9IG9uX2hlYWRlcl9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9oZWFkZXJfY2FsbGJhY2syKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFjazIgb25faGVhZGVyX2NhbGxiYWNrMikgeworICBjYnMtPm9uX2hlYWRlcl9jYWxsYmFjazIgPSBvbl9oZWFkZXJfY2FsbGJhY2syOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrIG9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrKSB7CisgIGNicy0+b25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2sgPSBvbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazIoCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2syIG9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrMikgeworICBjYnMtPm9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrMiA9IG9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrMjsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9zZWxlY3RfcGFkZGluZ19jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9zZWxlY3RfcGFkZGluZ19jYWxsYmFjayBzZWxlY3RfcGFkZGluZ19jYWxsYmFjaykgeworICBjYnMtPnNlbGVjdF9wYWRkaW5nX2NhbGxiYWNrID0gc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfZGF0YV9zb3VyY2VfcmVhZF9sZW5ndGhfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9sZW5ndGhfY2FsbGJhY2sgZGF0YV9zb3VyY2VfcmVhZF9sZW5ndGhfY2FsbGJhY2spIHsKKyAgY2JzLT5yZWFkX2xlbmd0aF9jYWxsYmFjayA9IGRhdGFfc291cmNlX3JlYWRfbGVuZ3RoX2NhbGxiYWNrOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X29uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrKAorICAgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNicywKKyAgICBuZ2h0dHAyX29uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrIG9uX2JlZ2luX2ZyYW1lX2NhbGxiYWNrKSB7CisgIGNicy0+b25fYmVnaW5fZnJhbWVfY2FsbGJhY2sgPSBvbl9iZWdpbl9mcmFtZV9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9zZW5kX2RhdGFfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLAorICAgIG5naHR0cDJfc2VuZF9kYXRhX2NhbGxiYWNrIHNlbmRfZGF0YV9jYWxsYmFjaykgeworICBjYnMtPnNlbmRfZGF0YV9jYWxsYmFjayA9IHNlbmRfZGF0YV9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9wYWNrX2V4dGVuc2lvbl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9wYWNrX2V4dGVuc2lvbl9jYWxsYmFjayBwYWNrX2V4dGVuc2lvbl9jYWxsYmFjaykgeworICBjYnMtPnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrID0gcGFja19leHRlbnNpb25fY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfdW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl91bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrIHVucGFja19leHRlbnNpb25fY2FsbGJhY2spIHsKKyAgY2JzLT51bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrID0gdW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjaygKKyAgICBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYnMsCisgICAgbmdodHRwMl9vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjayBvbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjaykgeworICBjYnMtPm9uX2V4dGVuc2lvbl9jaHVua19yZWN2X2NhbGxiYWNrID0gb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2s7Cit9CisKK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrc19zZXRfZXJyb3JfY2FsbGJhY2soCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLCBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNrKSB7CisgIGNicy0+ZXJyb3JfY2FsbGJhY2sgPSBlcnJvcl9jYWxsYmFjazsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzX3NldF9lcnJvcl9jYWxsYmFjazIoCisgICAgbmdodHRwMl9zZXNzaW9uX2NhbGxiYWNrcyAqY2JzLCBuZ2h0dHAyX2Vycm9yX2NhbGxiYWNrMiBlcnJvcl9jYWxsYmFjazIpIHsKKyAgY2JzLT5lcnJvcl9jYWxsYmFjazIgPSBlcnJvcl9jYWxsYmFjazI7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2NhbGxiYWNrcy5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9jYWxsYmFja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWU1MWZhCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9jYWxsYmFja3MuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfQ0FMTEJBQ0tTX0gKKyNkZWZpbmUgTkdIVFRQMl9DQUxMQkFDS1NfSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMuCisgKi8KK3N0cnVjdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzIHsKKyAgLyoqCisgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgc2Vzc2lvbiB3YW50cyB0byBzZW5kIGRhdGEgdG8KKyAgICogdGhlIHJlbW90ZSBwZWVyLiAgVGhpcyBjYWxsYmFjayBpcyBub3QgbmVjZXNzYXJ5IGlmIHRoZQorICAgKiBhcHBsaWNhdGlvbiB1c2VzIHNvbGVseSBgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kKClgIHRvIHNlcmlhbGl6ZQorICAgKiBkYXRhIHRvIHRyYW5zbWl0LgorICAgKi8KKyAgbmdodHRwMl9zZW5kX2NhbGxiYWNrIHNlbmRfY2FsbGJhY2s7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gdGhlIHNlc3Npb24gd2FudHMgdG8gcmVjZWl2ZSBkYXRhCisgICAqIGZyb20gdGhlIHJlbW90ZSBwZWVyLiAgVGhpcyBjYWxsYmFjayBpcyBub3QgbmVjZXNzYXJ5IGlmIHRoZQorICAgKiBhcHBsaWNhdGlvbiB1c2VzIHNvbGVseSBgbmdodHRwMl9zZXNzaW9uX21lbV9yZWN2KClgIHRvIHByb2Nlc3MKKyAgICogcmVjZWl2ZWQgZGF0YS4KKyAgICovCisgIG5naHR0cDJfcmVjdl9jYWxsYmFjayByZWN2X2NhbGxiYWNrOworICAvKioKKyAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBieSBgbmdodHRwMl9zZXNzaW9uX3JlY3YoKWAgd2hlbiBhCisgICAqIGZyYW1lIGlzIHJlY2VpdmVkLgorICAgKi8KKyAgbmdodHRwMl9vbl9mcmFtZV9yZWN2X2NhbGxiYWNrIG9uX2ZyYW1lX3JlY3ZfY2FsbGJhY2s7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGJ5IGBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpYCB3aGVuIGFuCisgICAqIGludmFsaWQgbm9uLURBVEEgZnJhbWUgaXMgcmVjZWl2ZWQuCisgICAqLworICBuZ2h0dHAyX29uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjayBvbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2s7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYSBjaHVuayBvZiBkYXRhIGluIERBVEEgZnJhbWUgaXMKKyAgICogcmVjZWl2ZWQuCisgICAqLworICBuZ2h0dHAyX29uX2RhdGFfY2h1bmtfcmVjdl9jYWxsYmFjayBvbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2s7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGJlZm9yZSBhIG5vbi1EQVRBIGZyYW1lIGlzIHNlbnQuCisgICAqLworICBuZ2h0dHAyX2JlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrIGJlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrOworICAvKioKKyAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBhZnRlciBhIGZyYW1lIGlzIHNlbnQuCisgICAqLworICBuZ2h0dHAyX29uX2ZyYW1lX3NlbmRfY2FsbGJhY2sgb25fZnJhbWVfc2VuZF9jYWxsYmFjazsKKyAgLyoqCisgICAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYSBub24tREFUQSBmcmFtZSBpcyBub3Qgc2VudAorICAgKiBiZWNhdXNlIG9mIGFuIGVycm9yLgorICAgKi8KKyAgbmdodHRwMl9vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFjayBvbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFjazsKKyAgLyoqCisgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZC4KKyAgICovCisgIG5naHR0cDJfb25fc3RyZWFtX2Nsb3NlX2NhbGxiYWNrIG9uX3N0cmVhbV9jbG9zZV9jYWxsYmFjazsKKyAgLyoqCisgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgcmVjZXB0aW9uIG9mIGhlYWRlciBibG9jayBpbgorICAgKiBIRUFERVJTIG9yIFBVU0hfUFJPTUlTRSBpcyBzdGFydGVkLgorICAgKi8KKyAgbmdodHRwMl9vbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrIG9uX2JlZ2luX2hlYWRlcnNfY2FsbGJhY2s7CisgIC8qKgorICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gYSBoZWFkZXIgbmFtZS92YWx1ZSBwYWlyIGlzCisgICAqIHJlY2VpdmVkLgorICAgKi8KKyAgbmdodHRwMl9vbl9oZWFkZXJfY2FsbGJhY2sgb25faGVhZGVyX2NhbGxiYWNrOworICBuZ2h0dHAyX29uX2hlYWRlcl9jYWxsYmFjazIgb25faGVhZGVyX2NhbGxiYWNrMjsKKyAgLyoqCisgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGludmFsaWQgaGVhZGVyIG5hbWUvdmFsdWUgcGFpcgorICAgKiBpcyByZWNlaXZlZCB3aGljaCBpcyBzaWxlbnRseSBpZ25vcmVkIGlmIHRoZXNlIGNhbGxiYWNrcyBhcmUgbm90CisgICAqIHNldC4KKyAgICovCisgIG5naHR0cDJfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2sgb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2s7CisgIG5naHR0cDJfb25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2syIG9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrMjsKKyAgLyoqCisgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgbGlicmFyeSBhc2tzIGFwcGxpY2F0aW9uIGhvdworICAgKiBtYW55IHBhZGRpbmcgYnl0ZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgdHJhbnNtaXNzaW9uIG9mIHRoZSBnaXZlbgorICAgKiBmcmFtZS4KKyAgICovCisgIG5naHR0cDJfc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2sgc2VsZWN0X3BhZGRpbmdfY2FsbGJhY2s7CisgIC8qKgorICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aCBhbGxvd2VkIGluCisgICAqIGBuZ2h0dHAyX2RhdGFfc291cmNlX3JlYWRfY2FsbGJhY2soKWAKKyAgICovCisgIG5naHR0cDJfZGF0YV9zb3VyY2VfcmVhZF9sZW5ndGhfY2FsbGJhY2sgcmVhZF9sZW5ndGhfY2FsbGJhY2s7CisgIC8qKgorICAgKiBTZXRzIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIGZyYW1lIGhlYWRlciBpcyByZWNlaXZlZC4KKyAgICovCisgIG5naHR0cDJfb25fYmVnaW5fZnJhbWVfY2FsbGJhY2sgb25fYmVnaW5fZnJhbWVfY2FsbGJhY2s7CisgIG5naHR0cDJfc2VuZF9kYXRhX2NhbGxiYWNrIHNlbmRfZGF0YV9jYWxsYmFjazsKKyAgbmdodHRwMl9wYWNrX2V4dGVuc2lvbl9jYWxsYmFjayBwYWNrX2V4dGVuc2lvbl9jYWxsYmFjazsKKyAgbmdodHRwMl91bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrIHVucGFja19leHRlbnNpb25fY2FsbGJhY2s7CisgIG5naHR0cDJfb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2sgb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2s7CisgIG5naHR0cDJfZXJyb3JfY2FsbGJhY2sgZXJyb3JfY2FsbGJhY2s7CisgIG5naHR0cDJfZXJyb3JfY2FsbGJhY2syIGVycm9yX2NhbGxiYWNrMjsKK307CisKKyNlbmRpZiAvKiBOR0hUVFAyX0NBTExCQUNLU19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2RlYnVnLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyNzc5NwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfZGVidWcuYwpAQCAtMCwwICsxLDYwIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX2RlYnVnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgREVCVUdCVUlMRAorCitzdGF0aWMgdm9pZCBuZ2h0dHAyX2RlZmF1bHRfZGVidWdfdmZwcmludGZfY2FsbGJhY2soY29uc3QgY2hhciAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncykgeworICB2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXJncyk7Cit9CisKK3N0YXRpYyBuZ2h0dHAyX2RlYnVnX3ZwcmludGZfY2FsbGJhY2sgc3RhdGljX2RlYnVnX3ZwcmludGZfY2FsbGJhY2sgPQorICAgIG5naHR0cDJfZGVmYXVsdF9kZWJ1Z192ZnByaW50Zl9jYWxsYmFjazsKKwordm9pZCBuZ2h0dHAyX2RlYnVnX3ZwcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKKyAgaWYgKHN0YXRpY19kZWJ1Z192cHJpbnRmX2NhbGxiYWNrKSB7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgc3RhdGljX2RlYnVnX3ZwcmludGZfY2FsbGJhY2soZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisgIH0KK30KKwordm9pZCBuZ2h0dHAyX3NldF9kZWJ1Z192cHJpbnRmX2NhbGxiYWNrKAorICAgIG5naHR0cDJfZGVidWdfdnByaW50Zl9jYWxsYmFjayBkZWJ1Z192cHJpbnRmX2NhbGxiYWNrKSB7CisgIHN0YXRpY19kZWJ1Z192cHJpbnRmX2NhbGxiYWNrID0gZGVidWdfdnByaW50Zl9jYWxsYmFjazsKK30KKworI2Vsc2UgLyogIURFQlVHQlVJTEQgKi8KKwordm9pZCBuZ2h0dHAyX3NldF9kZWJ1Z192cHJpbnRmX2NhbGxiYWNrKAorICAgIG5naHR0cDJfZGVidWdfdnByaW50Zl9jYWxsYmFjayBkZWJ1Z192cHJpbnRmX2NhbGxiYWNrKSB7CisgICh2b2lkKWRlYnVnX3ZwcmludGZfY2FsbGJhY2s7Cit9CisKKyNlbmRpZiAvKiAhREVCVUdCVUlMRCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9kZWJ1Zy5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYjRkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2RlYnVnLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfREVCVUdfSAorI2RlZmluZSBOR0hUVFAyX0RFQlVHX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCisjaWZkZWYgREVCVUdCVUlMRAorIyAgZGVmaW5lIERFQlVHRiguLi4pIG5naHR0cDJfZGVidWdfdnByaW50ZihfX1ZBX0FSR1NfXykKK3ZvaWQgbmdodHRwMl9kZWJ1Z192cHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKyNlbHNlCisjICBkZWZpbmUgREVCVUdGKC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBOR0hUVFAyX0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfZnJhbWUuYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfZnJhbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODIxZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9mcmFtZS5jCkBAIC0wLDAgKzEsMTEzNCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9mcmFtZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibmdodHRwMl9oZWxwZXIuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX25ldC5oIgorI2luY2x1ZGUgIm5naHR0cDJfcHJpb3JpdHlfc3BlYy5oIgorI2luY2x1ZGUgIm5naHR0cDJfZGVidWcuaCIKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3BhY2tfZnJhbWVfaGQodWludDhfdCAqYnVmLCBjb25zdCBuZ2h0dHAyX2ZyYW1lX2hkICpoZCkgeworICBuZ2h0dHAyX3B1dF91aW50MzJiZSgmYnVmWzBdLCAodWludDMyX3QpKGhkLT5sZW5ndGggPDwgOCkpOworICBidWZbM10gPSBoZC0+dHlwZTsKKyAgYnVmWzRdID0gaGQtPmZsYWdzOworICBuZ2h0dHAyX3B1dF91aW50MzJiZSgmYnVmWzVdLCAodWludDMyX3QpaGQtPnN0cmVhbV9pZCk7CisgIC8qIGlnbm9yZSBoZC0+cmVzZXJ2ZWQgZm9yIG5vdyAqLworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX2ZyYW1lX2hkKG5naHR0cDJfZnJhbWVfaGQgKmhkLCBjb25zdCB1aW50OF90ICpidWYpIHsKKyAgaGQtPmxlbmd0aCA9IG5naHR0cDJfZ2V0X3VpbnQzMigmYnVmWzBdKSA+PiA4OworICBoZC0+dHlwZSA9IGJ1ZlszXTsKKyAgaGQtPmZsYWdzID0gYnVmWzRdOworICBoZC0+c3RyZWFtX2lkID0gbmdodHRwMl9nZXRfdWludDMyKCZidWZbNV0pICYgTkdIVFRQMl9TVFJFQU1fSURfTUFTSzsKKyAgaGQtPnJlc2VydmVkID0gMDsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2hkX2luaXQobmdodHRwMl9mcmFtZV9oZCAqaGQsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIGhkLT5sZW5ndGggPSBsZW5ndGg7CisgIGhkLT50eXBlID0gdHlwZTsKKyAgaGQtPmZsYWdzID0gZmxhZ3M7CisgIGhkLT5zdHJlYW1faWQgPSBzdHJlYW1faWQ7CisgIGhkLT5yZXNlcnZlZCA9IDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9oZWFkZXJzX2luaXQobmdodHRwMl9oZWFkZXJzICpmcmFtZSwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIG5naHR0cDJfaGVhZGVyc19jYXRlZ29yeSBjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuKSB7CisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCAwLCBOR0hUVFAyX0hFQURFUlMsIGZsYWdzLCBzdHJlYW1faWQpOworICBmcmFtZS0+cGFkbGVuID0gMDsKKyAgZnJhbWUtPm52YSA9IG52YTsKKyAgZnJhbWUtPm52bGVuID0gbnZsZW47CisgIGZyYW1lLT5jYXQgPSBjYXQ7CisKKyAgaWYgKHByaV9zcGVjKSB7CisgICAgZnJhbWUtPnByaV9zcGVjID0gKnByaV9zcGVjOworICB9IGVsc2UgeworICAgIG5naHR0cDJfcHJpb3JpdHlfc3BlY19kZWZhdWx0X2luaXQoJmZyYW1lLT5wcmlfc3BlYyk7CisgIH0KK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfZnJlZShuZ2h0dHAyX2hlYWRlcnMgKmZyYW1lLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfbnZfYXJyYXlfZGVsKGZyYW1lLT5udmEsIG1lbSk7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9wcmlvcml0eV9pbml0KG5naHR0cDJfcHJpb3JpdHkgKmZyYW1lLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpIHsKKyAgbmdodHRwMl9mcmFtZV9oZF9pbml0KCZmcmFtZS0+aGQsIE5HSFRUUDJfUFJJT1JJVFlfU1BFQ0xFTiwgTkdIVFRQMl9QUklPUklUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRkxBR19OT05FLCBzdHJlYW1faWQpOworICBmcmFtZS0+cHJpX3NwZWMgPSAqcHJpX3NwZWM7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9wcmlvcml0eV9mcmVlKG5naHR0cDJfcHJpb3JpdHkgKmZyYW1lKSB7ICh2b2lkKWZyYW1lOyB9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9yc3Rfc3RyZWFtX2luaXQobmdodHRwMl9yc3Rfc3RyZWFtICpmcmFtZSwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUpIHsKKyAgbmdodHRwMl9mcmFtZV9oZF9pbml0KCZmcmFtZS0+aGQsIDQsIE5HSFRUUDJfUlNUX1NUUkVBTSwgTkdIVFRQMl9GTEFHX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1faWQpOworICBmcmFtZS0+ZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9yc3Rfc3RyZWFtX2ZyZWUobmdodHRwMl9yc3Rfc3RyZWFtICpmcmFtZSkgeyAodm9pZClmcmFtZTsgfQorCit2b2lkIG5naHR0cDJfZnJhbWVfc2V0dGluZ3NfaW5pdChuZ2h0dHAyX3NldHRpbmdzICpmcmFtZSwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LCBzaXplX3Qgbml2KSB7CisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCBuaXYgKiBOR0hUVFAyX0ZSQU1FX1NFVFRJTkdTX0VOVFJZX0xFTkdUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfU0VUVElOR1MsIGZsYWdzLCAwKTsKKyAgZnJhbWUtPm5pdiA9IG5pdjsKKyAgZnJhbWUtPml2ID0gaXY7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9zZXR0aW5nc19mcmVlKG5naHR0cDJfc2V0dGluZ3MgKmZyYW1lLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBmcmFtZS0+aXYpOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfcHVzaF9wcm9taXNlX2luaXQobmdodHRwMl9wdXNoX3Byb21pc2UgKmZyYW1lLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcHJvbWlzZWRfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuKSB7CisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCAwLCBOR0hUVFAyX1BVU0hfUFJPTUlTRSwgZmxhZ3MsIHN0cmVhbV9pZCk7CisgIGZyYW1lLT5wYWRsZW4gPSAwOworICBmcmFtZS0+bnZhID0gbnZhOworICBmcmFtZS0+bnZsZW4gPSBudmxlbjsKKyAgZnJhbWUtPnByb21pc2VkX3N0cmVhbV9pZCA9IHByb21pc2VkX3N0cmVhbV9pZDsKKyAgZnJhbWUtPnJlc2VydmVkID0gMDsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3B1c2hfcHJvbWlzZV9mcmVlKG5naHR0cDJfcHVzaF9wcm9taXNlICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfbnZfYXJyYXlfZGVsKGZyYW1lLT5udmEsIG1lbSk7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9waW5nX2luaXQobmdodHRwMl9waW5nICpmcmFtZSwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqb3BhcXVlX2RhdGEpIHsKKyAgbmdodHRwMl9mcmFtZV9oZF9pbml0KCZmcmFtZS0+aGQsIDgsIE5HSFRUUDJfUElORywgZmxhZ3MsIDApOworICBpZiAob3BhcXVlX2RhdGEpIHsKKyAgICBtZW1jcHkoZnJhbWUtPm9wYXF1ZV9kYXRhLCBvcGFxdWVfZGF0YSwgc2l6ZW9mKGZyYW1lLT5vcGFxdWVfZGF0YSkpOworICB9IGVsc2UgeworICAgIG1lbXNldChmcmFtZS0+b3BhcXVlX2RhdGEsIDAsIHNpemVvZihmcmFtZS0+b3BhcXVlX2RhdGEpKTsKKyAgfQorfQorCit2b2lkIG5naHR0cDJfZnJhbWVfcGluZ19mcmVlKG5naHR0cDJfcGluZyAqZnJhbWUpIHsgKHZvaWQpZnJhbWU7IH0KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2dvYXdheV9pbml0KG5naHR0cDJfZ29hd2F5ICpmcmFtZSwgaW50MzJfdCBsYXN0X3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlLCB1aW50OF90ICpvcGFxdWVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3BhcXVlX2RhdGFfbGVuKSB7CisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCA4ICsgb3BhcXVlX2RhdGFfbGVuLCBOR0hUVFAyX0dPQVdBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRkxBR19OT05FLCAwKTsKKyAgZnJhbWUtPmxhc3Rfc3RyZWFtX2lkID0gbGFzdF9zdHJlYW1faWQ7CisgIGZyYW1lLT5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKyAgZnJhbWUtPm9wYXF1ZV9kYXRhID0gb3BhcXVlX2RhdGE7CisgIGZyYW1lLT5vcGFxdWVfZGF0YV9sZW4gPSBvcGFxdWVfZGF0YV9sZW47CisgIGZyYW1lLT5yZXNlcnZlZCA9IDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9nb2F3YXlfZnJlZShuZ2h0dHAyX2dvYXdheSAqZnJhbWUsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGZyYW1lLT5vcGFxdWVfZGF0YSk7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV93aW5kb3dfdXBkYXRlX2luaXQobmdodHRwMl93aW5kb3dfdXBkYXRlICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgd2luZG93X3NpemVfaW5jcmVtZW50KSB7CisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCA0LCBOR0hUVFAyX1dJTkRPV19VUERBVEUsIGZsYWdzLCBzdHJlYW1faWQpOworICBmcmFtZS0+d2luZG93X3NpemVfaW5jcmVtZW50ID0gd2luZG93X3NpemVfaW5jcmVtZW50OworICBmcmFtZS0+cmVzZXJ2ZWQgPSAwOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfd2luZG93X3VwZGF0ZV9mcmVlKG5naHR0cDJfd2luZG93X3VwZGF0ZSAqZnJhbWUpIHsKKyAgKHZvaWQpZnJhbWU7Cit9CisKK3NpemVfdCBuZ2h0dHAyX2ZyYW1lX3RyYWlsX3BhZGxlbihuZ2h0dHAyX2ZyYW1lICpmcmFtZSwgc2l6ZV90IHBhZGxlbikgeworICAvKiBXZSBoYXZlIGlmcmFtZS0+cGFkbGVuID09IDAsIGJ1dCBpZnJhbWUtPmZyYW1lLmhkLmZsYWdzIG1heSBoYXZlCisgICAgIE5HSFRUUDJfRkxBR19QQURERUQgc2V0LiAgVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nCisgICAgIENPTlRJTlVBVElPTiBmcmFtZSwgc2luY2Ugd2UgZG9uJ3QgcmVzZXQgZmxhZ3MgYWZ0ZXIgSEVBREVSUyB3YXMKKyAgICAgcmVjZWl2ZWQuICovCisgIGlmIChwYWRsZW4gPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBwYWRsZW4gLSAoKGZyYW1lLT5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19QQURERUQpID4gMCk7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9kYXRhX2luaXQobmdodHRwMl9kYXRhICpmcmFtZSwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgLyogQXQgdGhpcyBtb21lbnQsIHRoZSBsZW5ndGggb2YgREFUQSBmcmFtZSBpcyB1bmtub3duICovCisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCAwLCBOR0hUVFAyX0RBVEEsIGZsYWdzLCBzdHJlYW1faWQpOworICBmcmFtZS0+cGFkbGVuID0gMDsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2RhdGFfZnJlZShuZ2h0dHAyX2RhdGEgKmZyYW1lKSB7ICh2b2lkKWZyYW1lOyB9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9leHRlbnNpb25faW5pdChuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsIHVpbnQ4X3QgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXlsb2FkKSB7CisgIG5naHR0cDJfZnJhbWVfaGRfaW5pdCgmZnJhbWUtPmhkLCAwLCB0eXBlLCBmbGFncywgc3RyZWFtX2lkKTsKKyAgZnJhbWUtPnBheWxvYWQgPSBwYXlsb2FkOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfZXh0ZW5zaW9uX2ZyZWUobmdodHRwMl9leHRlbnNpb24gKmZyYW1lKSB7ICh2b2lkKWZyYW1lOyB9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9hbHRzdmNfaW5pdChuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm9yaWdpbiwgc2l6ZV90IG9yaWdpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZmllbGRfdmFsdWUsIHNpemVfdCBmaWVsZF92YWx1ZV9sZW4pIHsKKyAgbmdodHRwMl9leHRfYWx0c3ZjICphbHRzdmM7CisKKyAgbmdodHRwMl9mcmFtZV9oZF9pbml0KCZmcmFtZS0+aGQsIDIgKyBvcmlnaW5fbGVuICsgZmllbGRfdmFsdWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9BTFRTVkMsIE5HSFRUUDJfRkxBR19OT05FLCBzdHJlYW1faWQpOworCisgIGFsdHN2YyA9IGZyYW1lLT5wYXlsb2FkOworICBhbHRzdmMtPm9yaWdpbiA9IG9yaWdpbjsKKyAgYWx0c3ZjLT5vcmlnaW5fbGVuID0gb3JpZ2luX2xlbjsKKyAgYWx0c3ZjLT5maWVsZF92YWx1ZSA9IGZpZWxkX3ZhbHVlOworICBhbHRzdmMtPmZpZWxkX3ZhbHVlX2xlbiA9IGZpZWxkX3ZhbHVlX2xlbjsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2FsdHN2Y19mcmVlKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX2V4dF9hbHRzdmMgKmFsdHN2YzsKKworICBhbHRzdmMgPSBmcmFtZS0+cGF5bG9hZDsKKyAgaWYgKGFsdHN2YyA9PSBOVUxMKSB7CisgICAgcmV0dXJuOworICB9CisgIC8qIFdlIHVzZSB0aGUgc2FtZSBidWZmZXIgZm9yIGFsdHN2Yy0+b3JpZ2luIGFuZAorICAgICBhbHRzdmMtPmZpZWxkX3ZhbHVlLiAqLworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgYWx0c3ZjLT5vcmlnaW4pOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfb3JpZ2luX2luaXQobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfb3JpZ2luX2VudHJ5ICpvdiwgc2l6ZV90IG5vdikgeworICBuZ2h0dHAyX2V4dF9vcmlnaW4gKm9yaWdpbjsKKyAgc2l6ZV90IHBheWxvYWRsZW4gPSAwOworICBzaXplX3QgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgbm92OyArK2kpIHsKKyAgICBwYXlsb2FkbGVuICs9IDIgKyBvdltpXS5vcmlnaW5fbGVuOworICB9CisKKyAgbmdodHRwMl9mcmFtZV9oZF9pbml0KCZmcmFtZS0+aGQsIHBheWxvYWRsZW4sIE5HSFRUUDJfT1JJR0lOLAorICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9GTEFHX05PTkUsIDApOworCisgIG9yaWdpbiA9IGZyYW1lLT5wYXlsb2FkOworICBvcmlnaW4tPm92ID0gb3Y7CisgIG9yaWdpbi0+bm92ID0gbm92OworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfb3JpZ2luX2ZyZWUobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfZXh0X29yaWdpbiAqb3JpZ2luOworCisgIG9yaWdpbiA9IGZyYW1lLT5wYXlsb2FkOworICBpZiAob3JpZ2luID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KKyAgLyogV2UgdXNlIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYWxsIHJlc291cmNlcyBwb2ludGVkIGJ5IHRoZSBmaWVsZCBvZgorICAgICBvcmlnaW4gZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gKi8KKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIG9yaWdpbi0+b3YpOworfQorCitzaXplX3QgbmdodHRwMl9mcmFtZV9wcmlvcml0eV9sZW4odWludDhfdCBmbGFncykgeworICBpZiAoZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfUFJJT1JJVFkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9QUklPUklUWV9TUEVDTEVOOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfcGF5bG9hZF9udl9vZmZzZXQobmdodHRwMl9oZWFkZXJzICpmcmFtZSkgeworICByZXR1cm4gbmdodHRwMl9mcmFtZV9wcmlvcml0eV9sZW4oZnJhbWUtPmhkLmZsYWdzKTsKK30KKworLyoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciBwYXlsb2FkIHdhcyBzZXJpYWxpemVkLCBidXQgbm90IGJlZm9yZQorICogY2hhbmdpbmcgYnVmLT5wb3MgYW5kIHNlcmlhbGl6aW5nIGZyYW1lIGhlYWRlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgYnVmcy0+Y3VyIHBvaW50cyB0byB0aGUgbGFzdCBidWYgY2hhaW4gb2YgdGhlCisgKiBmcmFtZShzKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlcmlhbGl6ZXMgZnJhbWUgaGVhZGVyIGZvciBIRUFERVJTL1BVU0hfUFJPTUlTRSBhbmQKKyAqIGhhbmRsZXMgdGhlaXIgc3VjY2Vzc2l2ZSBDT05USU5VQVRJT04gZnJhbWVzLgorICoKKyAqIFdlIGRvbid0IHByb2Nlc3MgYW55IHBhZGRpbmcgaGVyZS4KKyAqLworc3RhdGljIGludCBmcmFtZV9wYWNrX2hlYWRlcnNfc2hhcmVkKG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lX2hkICpmcmFtZV9oZCkgeworICBuZ2h0dHAyX2J1ZiAqYnVmOworICBuZ2h0dHAyX2J1Zl9jaGFpbiAqY2ksICpjZTsKKyAgbmdodHRwMl9mcmFtZV9oZCBoZDsKKworICBidWYgPSAmYnVmcy0+aGVhZC0+YnVmOworCisgIGhkID0gKmZyYW1lX2hkOworICBoZC5sZW5ndGggPSBuZ2h0dHAyX2J1Zl9sZW4oYnVmKTsKKworICBERUJVR0YoInNlbmQ6IEhFQURFUlMvUFVTSF9QUk9NSVNFLCBwYXlsb2FkbGVuPSV6dVxuIiwgaGQubGVuZ3RoKTsKKworICAvKiBXZSBoYXZlIG11bHRpcGxlIGZyYW1lIGJ1ZmZlcnMsIHdoaWNoIG1lYW5zIG9uZSBvciBtb3JlCisgICAgIENPTlRJTlVBVElPTiBmcmFtZSBpcyBpbnZvbHZlZC4gUmVtb3ZlIEVORF9IRUFERVJTIGZsYWcgZnJvbSB0aGUKKyAgICAgZmlyc3QgZnJhbWUuICovCisgIGlmIChidWZzLT5oZWFkICE9IGJ1ZnMtPmN1cikgeworICAgIGhkLmZsYWdzID0gKHVpbnQ4X3QpKGhkLmZsYWdzICYgfk5HSFRUUDJfRkxBR19FTkRfSEVBREVSUyk7CisgIH0KKworICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworICBuZ2h0dHAyX2ZyYW1lX3BhY2tfZnJhbWVfaGQoYnVmLT5wb3MsICZoZCk7CisKKyAgaWYgKGJ1ZnMtPmhlYWQgIT0gYnVmcy0+Y3VyKSB7CisgICAgLyogMm5kIGFuZCBsYXRlciBmcmFtZXMgYXJlIENPTlRJTlVBVElPTiBmcmFtZXMuICovCisgICAgaGQudHlwZSA9IE5HSFRUUDJfQ09OVElOVUFUSU9OOworICAgIC8qIFdlIGRvbid0IGhhdmUgbm8gZmxhZ3MgZXhjZXB0IGZvciBsYXN0IENPTlRJTlVBVElPTiAqLworICAgIGhkLmZsYWdzID0gTkdIVFRQMl9GTEFHX05PTkU7CisKKyAgICBjZSA9IGJ1ZnMtPmN1cjsKKworICAgIGZvciAoY2kgPSBidWZzLT5oZWFkLT5uZXh0OyBjaSAhPSBjZTsgY2kgPSBjaS0+bmV4dCkgeworICAgICAgYnVmID0gJmNpLT5idWY7CisKKyAgICAgIGhkLmxlbmd0aCA9IG5naHR0cDJfYnVmX2xlbihidWYpOworCisgICAgICBERUJVR0YoInNlbmQ6IGludCBDT05USU5VQVRJT04sIHBheWxvYWRsZW49JXp1XG4iLCBoZC5sZW5ndGgpOworCisgICAgICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworICAgICAgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKGJ1Zi0+cG9zLCAmaGQpOworICAgIH0KKworICAgIGJ1ZiA9ICZjaS0+YnVmOworICAgIGhkLmxlbmd0aCA9IG5naHR0cDJfYnVmX2xlbihidWYpOworICAgIC8qIFNldCBFTkRfSEVBREVSUyBmbGFnIGZvciBsYXN0IENPTlRJTlVBVElPTiAqLworICAgIGhkLmZsYWdzID0gTkdIVFRQMl9GTEFHX0VORF9IRUFERVJTOworCisgICAgREVCVUdGKCJzZW5kOiBsYXN0IENPTlRJTlVBVElPTiwgcGF5bG9hZGxlbj0lenVcbiIsIGhkLmxlbmd0aCk7CisKKyAgICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworICAgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmhkKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX2hlYWRlcnMobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX2hlYWRlcnMgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKSB7CisgIHNpemVfdCBudl9vZmZzZXQ7CisgIGludCBydjsKKyAgbmdodHRwMl9idWYgKmJ1ZjsKKworICBhc3NlcnQoYnVmcy0+aGVhZCA9PSBidWZzLT5jdXIpOworCisgIG52X29mZnNldCA9IG5naHR0cDJfZnJhbWVfaGVhZGVyc19wYXlsb2FkX252X29mZnNldChmcmFtZSk7CisKKyAgYnVmID0gJmJ1ZnMtPmN1ci0+YnVmOworCisgIGJ1Zi0+cG9zICs9IG52X29mZnNldDsKKyAgYnVmLT5sYXN0ID0gYnVmLT5wb3M7CisKKyAgLyogVGhpcyBjYWxsIHdpbGwgYWRqdXN0IGJ1Zi0+bGFzdCB0byB0aGUgY29ycmVjdCBwb3NpdGlvbiAqLworICBydiA9IG5naHR0cDJfaGRfZGVmbGF0ZV9oZF9idWZzKGRlZmxhdGVyLCBidWZzLCBmcmFtZS0+bnZhLCBmcmFtZS0+bnZsZW4pOworCisgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1IpIHsKKyAgICBydiA9IE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICB9CisKKyAgYnVmLT5wb3MgLT0gbnZfb2Zmc2V0OworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgaWYgKGZyYW1lLT5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19QUklPUklUWSkgeworICAgIG5naHR0cDJfZnJhbWVfcGFja19wcmlvcml0eV9zcGVjKGJ1Zi0+cG9zLCAmZnJhbWUtPnByaV9zcGVjKTsKKyAgfQorCisgIGZyYW1lLT5wYWRsZW4gPSAwOworICBmcmFtZS0+aGQubGVuZ3RoID0gbmdodHRwMl9idWZzX2xlbihidWZzKTsKKworICByZXR1cm4gZnJhbWVfcGFja19oZWFkZXJzX3NoYXJlZChidWZzLCAmZnJhbWUtPmhkKTsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3BhY2tfcHJpb3JpdHlfc3BlYyh1aW50OF90ICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpIHsKKyAgbmdodHRwMl9wdXRfdWludDMyYmUoYnVmLCAodWludDMyX3QpcHJpX3NwZWMtPnN0cmVhbV9pZCk7CisgIGlmIChwcmlfc3BlYy0+ZXhjbHVzaXZlKSB7CisgICAgYnVmWzBdIHw9IDB4ODA7CisgIH0KKyAgYnVmWzRdID0gKHVpbnQ4X3QpKHByaV9zcGVjLT53ZWlnaHQgLSAxKTsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19wcmlvcml0eV9zcGVjKG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCkgeworICBpbnQzMl90IGRlcF9zdHJlYW1faWQ7CisgIHVpbnQ4X3QgZXhjbHVzaXZlOworICBpbnQzMl90IHdlaWdodDsKKworICBkZXBfc3RyZWFtX2lkID0gbmdodHRwMl9nZXRfdWludDMyKHBheWxvYWQpICYgTkdIVFRQMl9TVFJFQU1fSURfTUFTSzsKKyAgZXhjbHVzaXZlID0gKHBheWxvYWRbMF0gJiAweDgwKSA+IDA7CisgIHdlaWdodCA9IHBheWxvYWRbNF0gKyAxOworCisgIG5naHR0cDJfcHJpb3JpdHlfc3BlY19pbml0KHByaV9zcGVjLCBkZXBfc3RyZWFtX2lkLCB3ZWlnaHQsIGV4Y2x1c2l2ZSk7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3VucGFja19oZWFkZXJzX3BheWxvYWQobmdodHRwMl9oZWFkZXJzICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCkgeworICBpZiAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX1BSSU9SSVRZKSB7CisgICAgbmdodHRwMl9mcmFtZV91bnBhY2tfcHJpb3JpdHlfc3BlYygmZnJhbWUtPnByaV9zcGVjLCBwYXlsb2FkKTsKKyAgfSBlbHNlIHsKKyAgICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KCZmcmFtZS0+cHJpX3NwZWMpOworICB9CisKKyAgZnJhbWUtPm52YSA9IE5VTEw7CisgIGZyYW1lLT5udmxlbiA9IDA7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfcHJpb3JpdHkobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX3ByaW9yaXR5ICpmcmFtZSkgeworICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgIGFzc2VydChidWZzLT5oZWFkID09IGJ1ZnMtPmN1cik7CisKKyAgYnVmID0gJmJ1ZnMtPmhlYWQtPmJ1ZjsKKworICBhc3NlcnQobmdodHRwMl9idWZfYXZhaWwoYnVmKSA+PSBOR0hUVFAyX1BSSU9SSVRZX1NQRUNMRU4pOworCisgIGJ1Zi0+cG9zIC09IE5HSFRUUDJfRlJBTUVfSERMRU47CisKKyAgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKGJ1Zi0+cG9zLCAmZnJhbWUtPmhkKTsKKworICBuZ2h0dHAyX2ZyYW1lX3BhY2tfcHJpb3JpdHlfc3BlYyhidWYtPmxhc3QsICZmcmFtZS0+cHJpX3NwZWMpOworCisgIGJ1Zi0+bGFzdCArPSBOR0hUVFAyX1BSSU9SSVRZX1NQRUNMRU47CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV91bnBhY2tfcHJpb3JpdHlfcGF5bG9hZChuZ2h0dHAyX3ByaW9yaXR5ICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKSB7CisgIG5naHR0cDJfZnJhbWVfdW5wYWNrX3ByaW9yaXR5X3NwZWMoJmZyYW1lLT5wcmlfc3BlYywgcGF5bG9hZCk7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfcnN0X3N0cmVhbShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9yc3Rfc3RyZWFtICpmcmFtZSkgeworICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgIGFzc2VydChidWZzLT5oZWFkID09IGJ1ZnMtPmN1cik7CisKKyAgYnVmID0gJmJ1ZnMtPmhlYWQtPmJ1ZjsKKworICBhc3NlcnQobmdodHRwMl9idWZfYXZhaWwoYnVmKSA+PSA0KTsKKworICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworCisgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmZyYW1lLT5oZCk7CisKKyAgbmdodHRwMl9wdXRfdWludDMyYmUoYnVmLT5sYXN0LCBmcmFtZS0+ZXJyb3JfY29kZSk7CisgIGJ1Zi0+bGFzdCArPSA0OworCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3JzdF9zdHJlYW1fcGF5bG9hZChuZ2h0dHAyX3JzdF9zdHJlYW0gKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCkgeworICBmcmFtZS0+ZXJyb3JfY29kZSA9IG5naHR0cDJfZ2V0X3VpbnQzMihwYXlsb2FkKTsKK30KKworaW50IG5naHR0cDJfZnJhbWVfcGFja19zZXR0aW5ncyhuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfc2V0dGluZ3MgKmZyYW1lKSB7CisgIG5naHR0cDJfYnVmICpidWY7CisKKyAgYXNzZXJ0KGJ1ZnMtPmhlYWQgPT0gYnVmcy0+Y3VyKTsKKworICBidWYgPSAmYnVmcy0+aGVhZC0+YnVmOworCisgIGlmIChuZ2h0dHAyX2J1Zl9hdmFpbChidWYpIDwgZnJhbWUtPmhkLmxlbmd0aCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SOworICB9CisKKyAgYnVmLT5wb3MgLT0gTkdIVFRQMl9GUkFNRV9IRExFTjsKKworICBuZ2h0dHAyX2ZyYW1lX3BhY2tfZnJhbWVfaGQoYnVmLT5wb3MsICZmcmFtZS0+aGQpOworCisgIGJ1Zi0+bGFzdCArPQorICAgICAgbmdodHRwMl9mcmFtZV9wYWNrX3NldHRpbmdzX3BheWxvYWQoYnVmLT5sYXN0LCBmcmFtZS0+aXYsIGZyYW1lLT5uaXYpOworCisgIHJldHVybiAwOworfQorCitzaXplX3QgbmdodHRwMl9mcmFtZV9wYWNrX3NldHRpbmdzX3BheWxvYWQodWludDhfdCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuaXYpIHsKKyAgc2l6ZV90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBuaXY7ICsraSwgYnVmICs9IE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIKSB7CisgICAgbmdodHRwMl9wdXRfdWludDE2YmUoYnVmLCAodWludDE2X3QpaXZbaV0uc2V0dGluZ3NfaWQpOworICAgIG5naHR0cDJfcHV0X3VpbnQzMmJlKGJ1ZiArIDIsIGl2W2ldLnZhbHVlKTsKKyAgfQorICByZXR1cm4gTkdIVFRQMl9GUkFNRV9TRVRUSU5HU19FTlRSWV9MRU5HVEggKiBuaXY7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV91bnBhY2tfc2V0dGluZ3NfcGF5bG9hZChuZ2h0dHAyX3NldHRpbmdzICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml2KSB7CisgIGZyYW1lLT5pdiA9IGl2OworICBmcmFtZS0+bml2ID0gbml2OworfQorCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3NldHRpbmdzX2VudHJ5KG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKSB7CisgIGl2LT5zZXR0aW5nc19pZCA9IG5naHR0cDJfZ2V0X3VpbnQxNigmcGF5bG9hZFswXSk7CisgIGl2LT52YWx1ZSA9IG5naHR0cDJfZ2V0X3VpbnQzMigmcGF5bG9hZFsyXSk7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3VucGFja19zZXR0aW5nc19wYXlsb2FkMihuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICoqaXZfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbml2X3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXlsb2FkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pIHsKKyAgc2l6ZV90IGk7CisKKyAgKm5pdl9wdHIgPSBwYXlsb2FkbGVuIC8gTkdIVFRQMl9GUkFNRV9TRVRUSU5HU19FTlRSWV9MRU5HVEg7CisKKyAgaWYgKCpuaXZfcHRyID09IDApIHsKKyAgICAqaXZfcHRyID0gTlVMTDsKKworICAgIHJldHVybiAwOworICB9CisKKyAgKml2X3B0ciA9CisgICAgICBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCAoKm5pdl9wdHIpICogc2l6ZW9mKG5naHR0cDJfc2V0dGluZ3NfZW50cnkpKTsKKworICBpZiAoKml2X3B0ciA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8ICpuaXZfcHRyOyArK2kpIHsKKyAgICBzaXplX3Qgb2ZmID0gaSAqIE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIOworICAgIG5naHR0cDJfZnJhbWVfdW5wYWNrX3NldHRpbmdzX2VudHJ5KCYoKml2X3B0cilbaV0sICZwYXlsb2FkW29mZl0pOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfcHVzaF9wcm9taXNlKG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfcHVzaF9wcm9taXNlICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKSB7CisgIHNpemVfdCBudl9vZmZzZXQgPSA0OworICBpbnQgcnY7CisgIG5naHR0cDJfYnVmICpidWY7CisKKyAgYXNzZXJ0KGJ1ZnMtPmhlYWQgPT0gYnVmcy0+Y3VyKTsKKworICBidWYgPSAmYnVmcy0+Y3VyLT5idWY7CisKKyAgYnVmLT5wb3MgKz0gbnZfb2Zmc2V0OworICBidWYtPmxhc3QgPSBidWYtPnBvczsKKworICAvKiBUaGlzIGNhbGwgd2lsbCBhZGp1c3QgYnVmLT5sYXN0IHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uICovCisgIHJ2ID0gbmdodHRwMl9oZF9kZWZsYXRlX2hkX2J1ZnMoZGVmbGF0ZXIsIGJ1ZnMsIGZyYW1lLT5udmEsIGZyYW1lLT5udmxlbik7CisKKyAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUikgeworICAgIHJ2ID0gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgIH0KKworICBidWYtPnBvcyAtPSBudl9vZmZzZXQ7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBuZ2h0dHAyX3B1dF91aW50MzJiZShidWYtPnBvcywgKHVpbnQzMl90KWZyYW1lLT5wcm9taXNlZF9zdHJlYW1faWQpOworCisgIGZyYW1lLT5wYWRsZW4gPSAwOworICBmcmFtZS0+aGQubGVuZ3RoID0gbmdodHRwMl9idWZzX2xlbihidWZzKTsKKworICByZXR1cm4gZnJhbWVfcGFja19oZWFkZXJzX3NoYXJlZChidWZzLCAmZnJhbWUtPmhkKTsKK30KKworaW50IG5naHR0cDJfZnJhbWVfdW5wYWNrX3B1c2hfcHJvbWlzZV9wYXlsb2FkKG5naHR0cDJfcHVzaF9wcm9taXNlICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKSB7CisgIGZyYW1lLT5wcm9taXNlZF9zdHJlYW1faWQgPQorICAgICAgbmdodHRwMl9nZXRfdWludDMyKHBheWxvYWQpICYgTkdIVFRQMl9TVFJFQU1fSURfTUFTSzsKKyAgZnJhbWUtPm52YSA9IE5VTEw7CisgIGZyYW1lLT5udmxlbiA9IDA7CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX3BpbmcobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX3BpbmcgKmZyYW1lKSB7CisgIG5naHR0cDJfYnVmICpidWY7CisKKyAgYXNzZXJ0KGJ1ZnMtPmhlYWQgPT0gYnVmcy0+Y3VyKTsKKworICBidWYgPSAmYnVmcy0+aGVhZC0+YnVmOworCisgIGFzc2VydChuZ2h0dHAyX2J1Zl9hdmFpbChidWYpID49IDgpOworCisgIGJ1Zi0+cG9zIC09IE5HSFRUUDJfRlJBTUVfSERMRU47CisKKyAgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKGJ1Zi0+cG9zLCAmZnJhbWUtPmhkKTsKKworICBidWYtPmxhc3QgPQorICAgICAgbmdodHRwMl9jcHltZW0oYnVmLT5sYXN0LCBmcmFtZS0+b3BhcXVlX2RhdGEsIHNpemVvZihmcmFtZS0+b3BhcXVlX2RhdGEpKTsKKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19waW5nX3BheWxvYWQobmdodHRwMl9waW5nICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQpIHsKKyAgbWVtY3B5KGZyYW1lLT5vcGFxdWVfZGF0YSwgcGF5bG9hZCwgc2l6ZW9mKGZyYW1lLT5vcGFxdWVfZGF0YSkpOworfQorCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX2dvYXdheShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfZ29hd2F5ICpmcmFtZSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfYnVmICpidWY7CisKKyAgYXNzZXJ0KGJ1ZnMtPmhlYWQgPT0gYnVmcy0+Y3VyKTsKKworICBidWYgPSAmYnVmcy0+aGVhZC0+YnVmOworCisgIGJ1Zi0+cG9zIC09IE5HSFRUUDJfRlJBTUVfSERMRU47CisKKyAgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKGJ1Zi0+cG9zLCAmZnJhbWUtPmhkKTsKKworICBuZ2h0dHAyX3B1dF91aW50MzJiZShidWYtPmxhc3QsICh1aW50MzJfdClmcmFtZS0+bGFzdF9zdHJlYW1faWQpOworICBidWYtPmxhc3QgKz0gNDsKKworICBuZ2h0dHAyX3B1dF91aW50MzJiZShidWYtPmxhc3QsIGZyYW1lLT5lcnJvcl9jb2RlKTsKKyAgYnVmLT5sYXN0ICs9IDQ7CisKKyAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkKGJ1ZnMsIGZyYW1lLT5vcGFxdWVfZGF0YSwgZnJhbWUtPm9wYXF1ZV9kYXRhX2xlbik7CisKKyAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SOworICB9CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19nb2F3YXlfcGF5bG9hZChuZ2h0dHAyX2dvYXdheSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnZhcl9naWZ0X3BheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJfZ2lmdF9wYXlsb2FkbGVuKSB7CisgIGZyYW1lLT5sYXN0X3N0cmVhbV9pZCA9IG5naHR0cDJfZ2V0X3VpbnQzMihwYXlsb2FkKSAmIE5HSFRUUDJfU1RSRUFNX0lEX01BU0s7CisgIGZyYW1lLT5lcnJvcl9jb2RlID0gbmdodHRwMl9nZXRfdWludDMyKHBheWxvYWQgKyA0KTsKKworICBmcmFtZS0+b3BhcXVlX2RhdGEgPSB2YXJfZ2lmdF9wYXlsb2FkOworICBmcmFtZS0+b3BhcXVlX2RhdGFfbGVuID0gdmFyX2dpZnRfcGF5bG9hZGxlbjsKK30KKworaW50IG5naHR0cDJfZnJhbWVfdW5wYWNrX2dvYXdheV9wYXlsb2FkMihuZ2h0dHAyX2dvYXdheSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXlsb2FkbGVuLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIHVpbnQ4X3QgKnZhcl9naWZ0X3BheWxvYWQ7CisgIHNpemVfdCB2YXJfZ2lmdF9wYXlsb2FkbGVuOworCisgIGlmIChwYXlsb2FkbGVuID4gOCkgeworICAgIHZhcl9naWZ0X3BheWxvYWRsZW4gPSBwYXlsb2FkbGVuIC0gODsKKyAgfSBlbHNlIHsKKyAgICB2YXJfZ2lmdF9wYXlsb2FkbGVuID0gMDsKKyAgfQorCisgIHBheWxvYWRsZW4gLT0gdmFyX2dpZnRfcGF5bG9hZGxlbjsKKworICBpZiAoIXZhcl9naWZ0X3BheWxvYWRsZW4pIHsKKyAgICB2YXJfZ2lmdF9wYXlsb2FkID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAgICB2YXJfZ2lmdF9wYXlsb2FkID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgdmFyX2dpZnRfcGF5bG9hZGxlbik7CisKKyAgICBpZiAodmFyX2dpZnRfcGF5bG9hZCA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgfQorCisgICAgbWVtY3B5KHZhcl9naWZ0X3BheWxvYWQsIHBheWxvYWQgKyA4LCB2YXJfZ2lmdF9wYXlsb2FkbGVuKTsKKyAgfQorCisgIG5naHR0cDJfZnJhbWVfdW5wYWNrX2dvYXdheV9wYXlsb2FkKGZyYW1lLCBwYXlsb2FkLCB2YXJfZ2lmdF9wYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJfZ2lmdF9wYXlsb2FkbGVuKTsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfZnJhbWVfcGFja193aW5kb3dfdXBkYXRlKG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3dpbmRvd191cGRhdGUgKmZyYW1lKSB7CisgIG5naHR0cDJfYnVmICpidWY7CisKKyAgYXNzZXJ0KGJ1ZnMtPmhlYWQgPT0gYnVmcy0+Y3VyKTsKKworICBidWYgPSAmYnVmcy0+aGVhZC0+YnVmOworCisgIGFzc2VydChuZ2h0dHAyX2J1Zl9hdmFpbChidWYpID49IDQpOworCisgIGJ1Zi0+cG9zIC09IE5HSFRUUDJfRlJBTUVfSERMRU47CisKKyAgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKGJ1Zi0+cG9zLCAmZnJhbWUtPmhkKTsKKworICBuZ2h0dHAyX3B1dF91aW50MzJiZShidWYtPmxhc3QsICh1aW50MzJfdClmcmFtZS0+d2luZG93X3NpemVfaW5jcmVtZW50KTsKKyAgYnVmLT5sYXN0ICs9IDQ7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9mcmFtZV91bnBhY2tfd2luZG93X3VwZGF0ZV9wYXlsb2FkKG5naHR0cDJfd2luZG93X3VwZGF0ZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKSB7CisgIGZyYW1lLT53aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPQorICAgICAgbmdodHRwMl9nZXRfdWludDMyKHBheWxvYWQpICYgTkdIVFRQMl9XSU5ET1dfU0laRV9JTkNSRU1FTlRfTUFTSzsKK30KKworaW50IG5naHR0cDJfZnJhbWVfcGFja19hbHRzdmMobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2J1ZiAqYnVmOworICBuZ2h0dHAyX2V4dF9hbHRzdmMgKmFsdHN2YzsKKworICAvKiBUaGlzIGlzIHJlcXVpcmVkIHdpdGggLS1kaXNhYmxlLWFzc2VydC4gKi8KKyAgKHZvaWQpcnY7CisKKyAgYWx0c3ZjID0gZnJhbWUtPnBheWxvYWQ7CisKKyAgYnVmID0gJmJ1ZnMtPmhlYWQtPmJ1ZjsKKworICBhc3NlcnQobmdodHRwMl9idWZfYXZhaWwoYnVmKSA+PQorICAgICAgICAgMiArIGFsdHN2Yy0+b3JpZ2luX2xlbiArIGFsdHN2Yy0+ZmllbGRfdmFsdWVfbGVuKTsKKworICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworCisgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmZyYW1lLT5oZCk7CisKKyAgbmdodHRwMl9wdXRfdWludDE2YmUoYnVmLT5sYXN0LCAodWludDE2X3QpYWx0c3ZjLT5vcmlnaW5fbGVuKTsKKyAgYnVmLT5sYXN0ICs9IDI7CisKKyAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkKGJ1ZnMsIGFsdHN2Yy0+b3JpZ2luLCBhbHRzdmMtPm9yaWdpbl9sZW4pOworCisgIGFzc2VydChydiA9PSAwKTsKKworICBydiA9IG5naHR0cDJfYnVmc19hZGQoYnVmcywgYWx0c3ZjLT5maWVsZF92YWx1ZSwgYWx0c3ZjLT5maWVsZF92YWx1ZV9sZW4pOworCisgIGFzc2VydChydiA9PSAwKTsKKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja19hbHRzdmNfcGF5bG9hZChuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvcmlnaW5fbGVuLCB1aW50OF90ICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlbikgeworICBuZ2h0dHAyX2V4dF9hbHRzdmMgKmFsdHN2YzsKKyAgdWludDhfdCAqcDsKKworICBhbHRzdmMgPSBmcmFtZS0+cGF5bG9hZDsKKyAgcCA9IHBheWxvYWQ7CisKKyAgYWx0c3ZjLT5vcmlnaW4gPSBwOworCisgIHAgKz0gb3JpZ2luX2xlbjsKKworICBhbHRzdmMtPm9yaWdpbl9sZW4gPSBvcmlnaW5fbGVuOworCisgIGFsdHN2Yy0+ZmllbGRfdmFsdWUgPSBwOworICBhbHRzdmMtPmZpZWxkX3ZhbHVlX2xlbiA9IChzaXplX3QpKHBheWxvYWQgKyBwYXlsb2FkbGVuIC0gcCk7Cit9CisKK2ludCBuZ2h0dHAyX2ZyYW1lX3VucGFja19hbHRzdmNfcGF5bG9hZDIobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlbiwgbmdodHRwMl9tZW0gKm1lbSkgeworICB1aW50OF90ICpidWY7CisgIHNpemVfdCBvcmlnaW5fbGVuOworCisgIGlmIChwYXlsb2FkbGVuIDwgMikgeworICAgIHJldHVybiBOR0hUVFAyX0ZSQU1FX1NJWkVfRVJST1I7CisgIH0KKworICBvcmlnaW5fbGVuID0gbmdodHRwMl9nZXRfdWludDE2KHBheWxvYWQpOworCisgIGJ1ZiA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHBheWxvYWRsZW4gLSAyKTsKKyAgaWYgKCFidWYpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBuZ2h0dHAyX2NweW1lbShidWYsIHBheWxvYWQgKyAyLCBwYXlsb2FkbGVuIC0gMik7CisKKyAgbmdodHRwMl9mcmFtZV91bnBhY2tfYWx0c3ZjX3BheWxvYWQoZnJhbWUsIG9yaWdpbl9sZW4sIGJ1ZiwgcGF5bG9hZGxlbiAtIDIpOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX29yaWdpbihuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSkgeworICBuZ2h0dHAyX2J1ZiAqYnVmOworICBuZ2h0dHAyX2V4dF9vcmlnaW4gKm9yaWdpbjsKKyAgbmdodHRwMl9vcmlnaW5fZW50cnkgKm9yaWc7CisgIHNpemVfdCBpOworCisgIG9yaWdpbiA9IGZyYW1lLT5wYXlsb2FkOworCisgIGJ1ZiA9ICZidWZzLT5oZWFkLT5idWY7CisKKyAgaWYgKG5naHR0cDJfYnVmX2F2YWlsKGJ1ZikgPCBmcmFtZS0+aGQubGVuZ3RoKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0ZSQU1FX1NJWkVfRVJST1I7CisgIH0KKworICBidWYtPnBvcyAtPSBOR0hUVFAyX0ZSQU1FX0hETEVOOworCisgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmZyYW1lLT5oZCk7CisKKyAgZm9yIChpID0gMDsgaSA8IG9yaWdpbi0+bm92OyArK2kpIHsKKyAgICBvcmlnID0gJm9yaWdpbi0+b3ZbaV07CisgICAgbmdodHRwMl9wdXRfdWludDE2YmUoYnVmLT5sYXN0LCAodWludDE2X3Qpb3JpZy0+b3JpZ2luX2xlbik7CisgICAgYnVmLT5sYXN0ICs9IDI7CisgICAgYnVmLT5sYXN0ID0gbmdodHRwMl9jcHltZW0oYnVmLT5sYXN0LCBvcmlnLT5vcmlnaW4sIG9yaWctPm9yaWdpbl9sZW4pOworICB9CisKKyAgYXNzZXJ0KG5naHR0cDJfYnVmX2xlbihidWYpID09IE5HSFRUUDJfRlJBTUVfSERMRU4gKyBmcmFtZS0+aGQubGVuZ3RoKTsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfZnJhbWVfdW5wYWNrX29yaWdpbl9wYXlsb2FkKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXlsb2FkbGVuLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfZXh0X29yaWdpbiAqb3JpZ2luOworICBjb25zdCB1aW50OF90ICpwLCAqZW5kOworICB1aW50OF90ICpkc3Q7CisgIHNpemVfdCBvcmlnaW5sZW47CisgIG5naHR0cDJfb3JpZ2luX2VudHJ5ICpvdjsKKyAgc2l6ZV90IG5vdiA9IDA7CisgIHNpemVfdCBsZW4gPSAwOworCisgIG9yaWdpbiA9IGZyYW1lLT5wYXlsb2FkOworICBwID0gcGF5bG9hZDsKKyAgZW5kID0gcCArIHBheWxvYWRsZW47CisKKyAgZm9yICg7IHAgIT0gZW5kOykgeworICAgIGlmIChlbmQgLSBwIDwgMikgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0ZSQU1FX1NJWkVfRVJST1I7CisgICAgfQorICAgIG9yaWdpbmxlbiA9IG5naHR0cDJfZ2V0X3VpbnQxNihwKTsKKyAgICBwICs9IDI7CisgICAgaWYgKG9yaWdpbmxlbiA9PSAwKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKG9yaWdpbmxlbiA+IChzaXplX3QpKGVuZCAtIHApKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICB9CisgICAgcCArPSBvcmlnaW5sZW47CisgICAgLyogMSBmb3IgdGVybWluYWwgTlVMTCAqLworICAgIGxlbiArPSBvcmlnaW5sZW4gKyAxOworICAgICsrbm92OworICB9CisKKyAgaWYgKG5vdiA9PSAwKSB7CisgICAgb3JpZ2luLT5vdiA9IE5VTEw7CisgICAgb3JpZ2luLT5ub3YgPSAwOworCisgICAgcmV0dXJuIDA7CisgIH0KKworICBsZW4gKz0gbm92ICogc2l6ZW9mKG5naHR0cDJfb3JpZ2luX2VudHJ5KTsKKworICBvdiA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIGxlbik7CisgIGlmIChvdiA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgb3JpZ2luLT5vdiA9IG92OworICBvcmlnaW4tPm5vdiA9IG5vdjsKKworICBkc3QgPSAodWludDhfdCAqKW92ICsgbm92ICogc2l6ZW9mKG5naHR0cDJfb3JpZ2luX2VudHJ5KTsKKyAgcCA9IHBheWxvYWQ7CisKKyAgZm9yICg7IHAgIT0gZW5kOykgeworICAgIG9yaWdpbmxlbiA9IG5naHR0cDJfZ2V0X3VpbnQxNihwKTsKKyAgICBwICs9IDI7CisgICAgaWYgKG9yaWdpbmxlbiA9PSAwKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgb3YtPm9yaWdpbiA9IGRzdDsKKyAgICBvdi0+b3JpZ2luX2xlbiA9IG9yaWdpbmxlbjsKKyAgICBkc3QgPSBuZ2h0dHAyX2NweW1lbShkc3QsIHAsIG9yaWdpbmxlbik7CisgICAgKmRzdCsrID0gJ1wwJzsKKyAgICBwICs9IG9yaWdpbmxlbjsKKyAgICArK292OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK25naHR0cDJfc2V0dGluZ3NfZW50cnkgKm5naHR0cDJfZnJhbWVfaXZfY29weShjb25zdCBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml2LCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2X2NvcHk7CisgIHNpemVfdCBsZW4gPSBuaXYgKiBzaXplb2YobmdodHRwMl9zZXR0aW5nc19lbnRyeSk7CisKKyAgaWYgKGxlbiA9PSAwKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpdl9jb3B5ID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgbGVuKTsKKworICBpZiAoaXZfY29weSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBtZW1jcHkoaXZfY29weSwgaXYsIGxlbik7CisKKyAgcmV0dXJuIGl2X2NvcHk7Cit9CisKK2ludCBuZ2h0dHAyX252X2VxdWFsKGNvbnN0IG5naHR0cDJfbnYgKmEsIGNvbnN0IG5naHR0cDJfbnYgKmIpIHsKKyAgcmV0dXJuIGEtPm5hbWVsZW4gPT0gYi0+bmFtZWxlbiAmJiBhLT52YWx1ZWxlbiA9PSBiLT52YWx1ZWxlbiAmJgorICAgICAgICAgbWVtY21wKGEtPm5hbWUsIGItPm5hbWUsIGEtPm5hbWVsZW4pID09IDAgJiYKKyAgICAgICAgIG1lbWNtcChhLT52YWx1ZSwgYi0+dmFsdWUsIGEtPnZhbHVlbGVuKSA9PSAwOworfQorCit2b2lkIG5naHR0cDJfbnZfYXJyYXlfZGVsKG5naHR0cDJfbnYgKm52YSwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgbnZhKTsKK30KKworc3RhdGljIGludCBieXRlc19jb21wYXIoY29uc3QgdWludDhfdCAqYSwgc2l6ZV90IGFsZW4sIGNvbnN0IHVpbnQ4X3QgKmIsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYmxlbikgeworICBpbnQgcnY7CisKKyAgaWYgKGFsZW4gPT0gYmxlbikgeworICAgIHJldHVybiBtZW1jbXAoYSwgYiwgYWxlbik7CisgIH0KKworICBpZiAoYWxlbiA8IGJsZW4pIHsKKyAgICBydiA9IG1lbWNtcChhLCBiLCBhbGVuKTsKKworICAgIGlmIChydiA9PSAwKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcnYgPSBtZW1jbXAoYSwgYiwgYmxlbik7CisKKyAgaWYgKHJ2ID09IDApIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiBydjsKK30KKworaW50IG5naHR0cDJfbnZfY29tcGFyZV9uYW1lKGNvbnN0IG5naHR0cDJfbnYgKmxocywgY29uc3QgbmdodHRwMl9udiAqcmhzKSB7CisgIHJldHVybiBieXRlc19jb21wYXIobGhzLT5uYW1lLCBsaHMtPm5hbWVsZW4sIHJocy0+bmFtZSwgcmhzLT5uYW1lbGVuKTsKK30KKworc3RhdGljIGludCBudl9jb21wYXIoY29uc3Qgdm9pZCAqbGhzLCBjb25zdCB2b2lkICpyaHMpIHsKKyAgY29uc3QgbmdodHRwMl9udiAqYSA9IChjb25zdCBuZ2h0dHAyX252ICopbGhzOworICBjb25zdCBuZ2h0dHAyX252ICpiID0gKGNvbnN0IG5naHR0cDJfbnYgKilyaHM7CisgIGludCBydjsKKworICBydiA9IGJ5dGVzX2NvbXBhcihhLT5uYW1lLCBhLT5uYW1lbGVuLCBiLT5uYW1lLCBiLT5uYW1lbGVuKTsKKworICBpZiAocnYgPT0gMCkgeworICAgIHJldHVybiBieXRlc19jb21wYXIoYS0+dmFsdWUsIGEtPnZhbHVlbGVuLCBiLT52YWx1ZSwgYi0+dmFsdWVsZW4pOworICB9CisKKyAgcmV0dXJuIHJ2OworfQorCit2b2lkIG5naHR0cDJfbnZfYXJyYXlfc29ydChuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbikgeworICBxc29ydChudmEsIG52bGVuLCBzaXplb2YobmdodHRwMl9udiksIG52X2NvbXBhcik7Cit9CisKK2ludCBuZ2h0dHAyX252X2FycmF5X2NvcHkobmdodHRwMl9udiAqKm52YV9wdHIsIGNvbnN0IG5naHR0cDJfbnYgKm52YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG52bGVuLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIHNpemVfdCBpOworICB1aW50OF90ICpkYXRhID0gTlVMTDsKKyAgc2l6ZV90IGJ1ZmxlbiA9IDA7CisgIG5naHR0cDJfbnYgKnA7CisKKyAgaWYgKG52bGVuID09IDApIHsKKyAgICAqbnZhX3B0ciA9IE5VTEw7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBudmxlbjsgKytpKSB7CisgICAgLyogKyAxIGZvciBudWxsLXRlcm1pbmF0aW9uICovCisgICAgaWYgKChudmFbaV0uZmxhZ3MgJiBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9OQU1FKSA9PSAwKSB7CisgICAgICBidWZsZW4gKz0gbnZhW2ldLm5hbWVsZW4gKyAxOworICAgIH0KKyAgICBpZiAoKG52YVtpXS5mbGFncyAmIE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX1ZBTFVFKSA9PSAwKSB7CisgICAgICBidWZsZW4gKz0gbnZhW2ldLnZhbHVlbGVuICsgMTsKKyAgICB9CisgIH0KKworICBidWZsZW4gKz0gc2l6ZW9mKG5naHR0cDJfbnYpICogbnZsZW47CisKKyAgKm52YV9wdHIgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBidWZsZW4pOworCisgIGlmICgqbnZhX3B0ciA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgcCA9ICpudmFfcHRyOworICBkYXRhID0gKHVpbnQ4X3QgKikoKm52YV9wdHIpICsgc2l6ZW9mKG5naHR0cDJfbnYpICogbnZsZW47CisKKyAgZm9yIChpID0gMDsgaSA8IG52bGVuOyArK2kpIHsKKyAgICBwLT5mbGFncyA9IG52YVtpXS5mbGFnczsKKworICAgIGlmIChudmFbaV0uZmxhZ3MgJiBOR0hUVFAyX05WX0ZMQUdfTk9fQ09QWV9OQU1FKSB7CisgICAgICBwLT5uYW1lID0gbnZhW2ldLm5hbWU7CisgICAgICBwLT5uYW1lbGVuID0gbnZhW2ldLm5hbWVsZW47CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChudmFbaV0ubmFtZWxlbikgeworICAgICAgICBtZW1jcHkoZGF0YSwgbnZhW2ldLm5hbWUsIG52YVtpXS5uYW1lbGVuKTsKKyAgICAgIH0KKyAgICAgIHAtPm5hbWUgPSBkYXRhOworICAgICAgcC0+bmFtZWxlbiA9IG52YVtpXS5uYW1lbGVuOworICAgICAgZGF0YVtwLT5uYW1lbGVuXSA9ICdcMCc7CisgICAgICBuZ2h0dHAyX2Rvd25jYXNlKHAtPm5hbWUsIHAtPm5hbWVsZW4pOworICAgICAgZGF0YSArPSBudmFbaV0ubmFtZWxlbiArIDE7CisgICAgfQorCisgICAgaWYgKG52YVtpXS5mbGFncyAmIE5HSFRUUDJfTlZfRkxBR19OT19DT1BZX1ZBTFVFKSB7CisgICAgICBwLT52YWx1ZSA9IG52YVtpXS52YWx1ZTsKKyAgICAgIHAtPnZhbHVlbGVuID0gbnZhW2ldLnZhbHVlbGVuOworICAgIH0gZWxzZSB7CisgICAgICBpZiAobnZhW2ldLnZhbHVlbGVuKSB7CisgICAgICAgIG1lbWNweShkYXRhLCBudmFbaV0udmFsdWUsIG52YVtpXS52YWx1ZWxlbik7CisgICAgICB9CisgICAgICBwLT52YWx1ZSA9IGRhdGE7CisgICAgICBwLT52YWx1ZWxlbiA9IG52YVtpXS52YWx1ZWxlbjsKKyAgICAgIGRhdGFbcC0+dmFsdWVsZW5dID0gJ1wwJzsKKyAgICAgIGRhdGEgKz0gbnZhW2ldLnZhbHVlbGVuICsgMTsKKyAgICB9CisKKyAgICArK3A7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2l2X2NoZWNrKGNvbnN0IG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LCBzaXplX3Qgbml2KSB7CisgIHNpemVfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgbml2OyArK2kpIHsKKyAgICBzd2l0Y2ggKGl2W2ldLnNldHRpbmdzX2lkKSB7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVM6CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX1BVU0g6CisgICAgICBpZiAoaXZbaV0udmFsdWUgIT0gMCAmJiBpdltpXS52YWx1ZSAhPSAxKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkU6CisgICAgICBpZiAoaXZbaV0udmFsdWUgPiAodWludDMyX3QpTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0ZSQU1FX1NJWkU6CisgICAgICBpZiAoaXZbaV0udmFsdWUgPCBOR0hUVFAyX01BWF9GUkFNRV9TSVpFX01JTiB8fAorICAgICAgICAgIGl2W2ldLnZhbHVlID4gTkdIVFRQMl9NQVhfRlJBTUVfU0laRV9NQVgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0hFQURFUl9MSVNUX1NJWkU6CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX0NPTk5FQ1RfUFJPVE9DT0w6CisgICAgICBpZiAoaXZbaV0udmFsdWUgIT0gMCAmJiBpdltpXS52YWx1ZSAhPSAxKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBmcmFtZV9zZXRfcGFkKG5naHR0cDJfYnVmICpidWYsIHNpemVfdCBwYWRsZW4sIGludCBmcmFtZWhkX29ubHkpIHsKKyAgc2l6ZV90IHRyYWlsX3BhZGxlbjsKKyAgc2l6ZV90IG5ld2xlbjsKKworICBERUJVR0YoInNlbmQ6IHBhZGxlbj0lenUsIHNoaWZ0IGxlZnQgMSBieXRlc1xuIiwgcGFkbGVuKTsKKworICBtZW1tb3ZlKGJ1Zi0+cG9zIC0gMSwgYnVmLT5wb3MsIE5HSFRUUDJfRlJBTUVfSERMRU4pOworCisgIC0tYnVmLT5wb3M7CisKKyAgYnVmLT5wb3NbNF0gfD0gTkdIVFRQMl9GTEFHX1BBRERFRDsKKworICBuZXdsZW4gPSAobmdodHRwMl9nZXRfdWludDMyKGJ1Zi0+cG9zKSA+PiA4KSArIHBhZGxlbjsKKyAgbmdodHRwMl9wdXRfdWludDMyYmUoYnVmLT5wb3MsICh1aW50MzJfdCkoKG5ld2xlbiA8PCA4KSArIGJ1Zi0+cG9zWzNdKSk7CisKKyAgaWYgKGZyYW1laGRfb25seSkgeworICAgIHJldHVybjsKKyAgfQorCisgIHRyYWlsX3BhZGxlbiA9IHBhZGxlbiAtIDE7CisgIGJ1Zi0+cG9zW05HSFRUUDJfRlJBTUVfSERMRU5dID0gKHVpbnQ4X3QpdHJhaWxfcGFkbGVuOworCisgIC8qIHplcm8gb3V0IHBhZGRpbmcgKi8KKyAgbWVtc2V0KGJ1Zi0+bGFzdCwgMCwgdHJhaWxfcGFkbGVuKTsKKyAgLyogZXh0ZW5kIGJ1ZmZlcnMgdHJhaWxfcGFkbGVuIGJ5dGVzLCBzaW5jZSB3ZSBhdGUgcHJldmlvdXMgcGFkbGVuIC0KKyAgICAgdHJhaWxfcGFkbGVuIGJ5dGUocykgKi8KKyAgYnVmLT5sYXN0ICs9IHRyYWlsX3BhZGxlbjsKK30KKworaW50IG5naHR0cDJfZnJhbWVfYWRkX3BhZChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfZnJhbWVfaGQgKmhkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFkbGVuLCBpbnQgZnJhbWVoZF9vbmx5KSB7CisgIG5naHR0cDJfYnVmICpidWY7CisKKyAgaWYgKHBhZGxlbiA9PSAwKSB7CisgICAgREVCVUdGKCJzZW5kOiBwYWRsZW4gPSAwLCBub3RoaW5nIHRvIGRvXG4iKTsKKworICAgIHJldHVybiAwOworICB9CisKKyAgLyoKKyAgICogV2UgaGF2ZSBhcnJhbmdlZCBidWZzIGxpa2UgdGhpczoKKyAgICoKKyAgICogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgKiB8IHxGcmFtZSBoZWFkZXIgICAgIHwgRnJhbWUgcGF5bG9hZC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgKiArLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgKiB8IHxGcmFtZSBoZWFkZXIgICAgIHwgRnJhbWUgcGF5bG9hZC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgKiArLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgKiB8IHxGcmFtZSBoZWFkZXIgICAgIHwgRnJhbWUgcGF5bG9hZC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgKiArLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgKgorICAgKiBXZSBhcnJhbmdlZCBwYWRkaW5nIHNvIHRoYXQgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIGZpcnN0IGZyYW1lCisgICAqIGNvbXBsZXRlbHkuICBGb3IgcGFkZGVkIGZyYW1lLCB3ZSBhcmUgZ29pbmcgdG8gYWRqdXN0IGJ1Zi0+cG9zIG9mCisgICAqIGZyYW1lIHdoaWNoIGluY2x1ZGVzIHBhZGRpbmcgYW5kIHNlcmlhbGl6ZSAobWVtbW92ZSkgZnJhbWUgaGVhZGVyCisgICAqIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uLiAgQWxzbyBleHRlbmRzIGJ1Zi0+bGFzdCB0byBpbmNsdWRlCisgICAqIHBhZGRpbmcuCisgICAqLworCisgIGJ1ZiA9ICZidWZzLT5oZWFkLT5idWY7CisKKyAgYXNzZXJ0KG5naHR0cDJfYnVmX2F2YWlsKGJ1ZikgPj0gcGFkbGVuIC0gMSk7CisKKyAgZnJhbWVfc2V0X3BhZChidWYsIHBhZGxlbiwgZnJhbWVoZF9vbmx5KTsKKworICBoZC0+bGVuZ3RoICs9IHBhZGxlbjsKKyAgaGQtPmZsYWdzIHw9IE5HSFRUUDJfRkxBR19QQURERUQ7CisKKyAgREVCVUdGKCJzZW5kOiBmaW5hbCBwYXlsb2FkbGVuPSV6dSwgcGFkbGVuPSV6dVxuIiwgaGQtPmxlbmd0aCwgcGFkbGVuKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfZnJhbWUuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfZnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTViYmYzCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9mcmFtZS5oCkBAIC0wLDAgKzEsNjI0IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9GUkFNRV9ICisjZGVmaW5lIE5HSFRUUDJfRlJBTUVfSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisjaW5jbHVkZSAibmdodHRwMl9oZC5oIgorI2luY2x1ZGUgIm5naHR0cDJfYnVmLmgiCisKKyNkZWZpbmUgTkdIVFRQMl9TVFJFQU1fSURfTUFTSyAoKDF1IDw8IDMxKSAtIDEpCisjZGVmaW5lIE5HSFRUUDJfUFJJX0dST1VQX0lEX01BU0sgKCgxdSA8PCAzMSkgLSAxKQorI2RlZmluZSBOR0hUVFAyX1BSSU9SSVRZX01BU0sgKCgxdSA8PCAzMSkgLSAxKQorI2RlZmluZSBOR0hUVFAyX1dJTkRPV19TSVpFX0lOQ1JFTUVOVF9NQVNLICgoMXUgPDwgMzEpIC0gMSkKKyNkZWZpbmUgTkdIVFRQMl9TRVRUSU5HU19JRF9NQVNLICgoMSA8PCAyNCkgLSAxKQorCisvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGZyYW1lIGhlYWRlci4gKi8KKyNkZWZpbmUgTkdIVFRQMl9GUkFNRV9IRExFTiA5CisKKyNkZWZpbmUgTkdIVFRQMl9NQVhfRlJBTUVfU0laRV9NQVggKCgxIDw8IDI0KSAtIDEpCisjZGVmaW5lIE5HSFRUUDJfTUFYX0ZSQU1FX1NJWkVfTUlOICgxIDw8IDE0KQorCisjZGVmaW5lIE5HSFRUUDJfTUFYX1BBWUxPQURMRU4gMTYzODQKKy8qIFRoZSBvbmUgZnJhbWUgYnVmZmVyIGxlbmd0aCBmb3IgdHJhbm1pc3Npb24uICBXZSBtYXkgdXNlIHNldmVyYWwgb2YKKyAgIHRoZW0gdG8gc3VwcG9ydCBDT05USU5VQVRJT04uICBUbyBhY2NvdW50IGZvciBQYWQgTGVuZ3RoIGZpZWxkLCB3ZQorICAgYWxsb2NhdGUgZXh0cmEgMSBieXRlLCB3aGljaCBzYXZlcyBleHRyYSBsYXJnZSBtZW1jb3B5aW5nLiAqLworI2RlZmluZSBOR0hUVFAyX0ZSQU1FQlVGX0NIVU5LTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKE5HSFRUUDJfRlJBTUVfSERMRU4gKyAxICsgTkdIVFRQMl9NQVhfUEFZTE9BRExFTikKKworLyogVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIERBVEEgZnJhbWUgcGF5bG9hZC4gKi8KKyNkZWZpbmUgTkdIVFRQMl9EQVRBX1BBWUxPQURMRU4gTkdIVFRQMl9NQVhfRlJBTUVfU0laRV9NSU4KKworLyogTWF4aW11bSBoZWFkZXJzIGJsb2NrIHNpemUgdG8gc2VuZCwgY2FsY3VsYXRlZCB1c2luZworICAgbmdodHRwMl9oZF9kZWZsYXRlX2JvdW5kKCkuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgY2FuIGJlCisgICBvdmVycmlkZGVuIGJ5IG5naHR0cDJfb3B0aW9uX3NldF9tYXhfc2VuZF9oZWFkZXJfYmxvY2tfc2l6ZSgpLiAqLworI2RlZmluZSBOR0hUVFAyX01BWF9IRUFERVJTTEVOIDY1NTM2CisKKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgZm9yIGVhY2ggU0VUVElOR1MgZW50cnkgKi8KKyNkZWZpbmUgTkdIVFRQMl9GUkFNRV9TRVRUSU5HU19FTlRSWV9MRU5HVEggNgorCisvKiBMZW5ndGggb2YgcHJpb3JpdHkgcmVsYXRlZCBmaWVsZHMgaW4gSEVBREVSUy9QUklPUklUWSBmcmFtZXMgKi8KKyNkZWZpbmUgTkdIVFRQMl9QUklPUklUWV9TUEVDTEVOIDUKKworLyogTWF4aW11bSBsZW5ndGggb2YgcGFkZGluZyBpbiBieXRlcy4gKi8KKyNkZWZpbmUgTkdIVFRQMl9NQVhfUEFETEVOIDI1NgorCisvKiBVbmlvbiBvZiBleHRlbnNpb24gZnJhbWUgcGF5bG9hZCAqLwordHlwZWRlZiB1bmlvbiB7CisgIG5naHR0cDJfZXh0X2FsdHN2YyBhbHRzdmM7CisgIG5naHR0cDJfZXh0X29yaWdpbiBvcmlnaW47Cit9IG5naHR0cDJfZXh0X2ZyYW1lX3BheWxvYWQ7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9wYWNrX2ZyYW1lX2hkKHVpbnQ4X3QgKmJ1ZiwgY29uc3QgbmdodHRwMl9mcmFtZV9oZCAqaGQpOworCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX2ZyYW1lX2hkKG5naHR0cDJfZnJhbWVfaGQgKmhkLCBjb25zdCB1aW50OF90ICpidWYpOworCisvKioKKyAqIEluaXRpYWxpemVzIGZyYW1lIGhlYWRlciB8aGR8IHdpdGggZ2l2ZW4gcGFyYW1ldGVycy4gIFJlc2VydmVkIGJpdAorICogaXMgc2V0IHRvIDAuCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV9oZF9pbml0KG5naHR0cDJfZnJhbWVfaGQgKmhkLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHByaW9yaXR5IGZpZWxkIGRlcGVuZGluZyBvbiB0aGUgfGZsYWdzfC4gIElmCisgKiB8ZmxhZ3N8IGhhcyBuZWl0aGVyIE5HSFRUUDJfRkxBR19QUklPUklUWV9HUk9VUCBub3IKKyAqIE5HSFRUUDJfRkxBR19QUklPUklUWV9ERVBFTkRFTkNZIHNldCwgcmV0dXJuIDAuCisgKi8KK3NpemVfdCBuZ2h0dHAyX2ZyYW1lX3ByaW9yaXR5X2xlbih1aW50OF90IGZsYWdzKTsKKworLyoqCisgKiBQYWNrcyB0aGUgfHByaV9zcGVjfCBpbiB8YnVmfC4gIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB8YnVmfCBoYXMKKyAqIGVub3VnaCBzcGFjZSBmb3Igc2VyaWFsaXphdGlvbi4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX3BhY2tfcHJpb3JpdHlfc3BlYyh1aW50OF90ICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpOworCisvKioKKyAqIFVucGFja3MgdGhlIHByaW9yaXR5IHNwZWNpZmljYXRpb24gZnJvbSBwYXlsb2FkIHxwYXlsb2FkfCBvZiBsZW5ndGgKKyAqIHxwYXlsb2FkbGVufCB0byB8cHJpX3NwZWN8LiAgVGhlIHxmbGFnc3wgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdAorICoga2luZCBvZiBwcmlvcml0eSBzcGVjaWZpY2F0aW9uIGlzIGluIHxwYXlsb2FkfC4gIFRoaXMgZnVuY3Rpb24KKyAqIGFzc3VtZXMgdGhlIHxwYXlsb2FkfCBjb250YWlucyB3aG9sZSBwcmlvcml0eSBzcGVjaWZpY2F0aW9uLgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3ByaW9yaXR5X3NwZWMobmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKTsKKworLyoKKyAqIFJldHVybnMgdGhlIG9mZnNldCBmcm9tIHRoZSBIRUFERVJTIGZyYW1lIHBheWxvYWQgd2hlcmUgdGhlCisgKiBjb21wcmVzc2VkIGhlYWRlciBibG9jayBzdGFydHMuIFRoZSBmcmFtZSBwYXlsb2FkIGRvZXMgbm90IGluY2x1ZGUKKyAqIGZyYW1lIGhlYWRlci4KKyAqLworc2l6ZV90IG5naHR0cDJfZnJhbWVfaGVhZGVyc19wYXlsb2FkX252X29mZnNldChuZ2h0dHAyX2hlYWRlcnMgKmZyYW1lKTsKKworLyoKKyAqIFBhY2tzIEhFQURFUlMgZnJhbWUgfGZyYW1lfCBpbiB3aXJlIGZvcm1hdCBhbmQgc3RvcmUgaXQgaW4gfGJ1ZnN8LgorICogVGhpcyBmdW5jdGlvbiBleHBhbmRzIHxidWZzfCBhcyBuZWNlc3NhcnkgdG8gc3RvcmUgZnJhbWUuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5naHR0cDJfYnVmc19yZXNldChidWZzKSBpcyBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogZnJhbWUtPmhkLmxlbmd0aCBpcyBhc3NpZ25lZCBhZnRlciBsZW5ndGggaXMgZGV0ZXJtaW5lZCBkdXJpbmcKKyAqIHBhY2tpbmcgcHJvY2Vzcy4gIENPTlRJTlVBVElPTiBmcmFtZXMgYXJlIGFsc28gc2VyaWFsaXplZCBpbiB0aGlzCisgKiBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGFkZGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3IgcmV0dXJucyBvbmUgb2YgdGhlCisgKiBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfSEVBREVSX0NPTVAKKyAqICAgICBUaGUgZGVmbGF0ZSBvcGVyYXRpb24gZmFpbGVkLgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX2hlYWRlcnMobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX2hlYWRlcnMgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKTsKKworLyoKKyAqIFVucGFja3MgSEVBREVSUyBmcmFtZSBieXRlIHNlcXVlbmNlIGludG8gfGZyYW1lfC4gIFRoaXMgZnVuY3Rpb24KKyAqIG9ubHkgdW5hcGNrcyBieXRlcyB0aGF0IGNvbWUgYmVmb3JlIG5hbWUvdmFsdWUgaGVhZGVyIGJsb2NrIGFuZAorICogYWZ0ZXIgcG9zc2libGUgUGFkIExlbmd0aCBmaWVsZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBzdWNjZWVkcyBhbmQgcmV0dXJucyAwLgorICovCitpbnQgbmdodHRwMl9mcmFtZV91bnBhY2tfaGVhZGVyc19wYXlsb2FkKG5naHR0cDJfaGVhZGVycyAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQpOworCisvKgorICogUGFja3MgUFJJT1JJVFkgZnJhbWUgfGZyYW1lfCBpbiB3aXJlIGZvcm1hdCBhbmQgc3RvcmUgaXQgaW4KKyAqIHxidWZzfC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgbmdodHRwMl9idWZzX3Jlc2V0KGJ1ZnMpIGlzIGNhbGxlZAorICogYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBzdWNjZWVkcyBhbmQgcmV0dXJucyAwLgorICovCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX3ByaW9yaXR5KG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9wcmlvcml0eSAqZnJhbWUpOworCisvKgorICogVW5wYWNrcyBQUklPUklUWSB3aXJlIGZvcm1hdCBpbnRvIHxmcmFtZXwuCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV91bnBhY2tfcHJpb3JpdHlfcGF5bG9hZChuZ2h0dHAyX3ByaW9yaXR5ICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKTsKKworLyoKKyAqIFBhY2tzIFJTVF9TVFJFQU0gZnJhbWUgfGZyYW1lfCBpbiB3aXJlIGZyYW1lIGZvcm1hdCBhbmQgc3RvcmUgaXQgaW4KKyAqIHxidWZzfC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgbmdodHRwMl9idWZzX3Jlc2V0KGJ1ZnMpIGlzIGNhbGxlZAorICogYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBzdWNjZWVkcyBhbmQgcmV0dXJucyAwLgorICovCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX3JzdF9zdHJlYW0obmdodHRwMl9idWZzICpidWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfcnN0X3N0cmVhbSAqZnJhbWUpOworCisvKgorICogVW5wYWNrcyBSU1RfU1RSRUFNIGZyYW1lIGJ5dGUgc2VxdWVuY2UgaW50byB8ZnJhbWV8LgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3JzdF9zdHJlYW1fcGF5bG9hZChuZ2h0dHAyX3JzdF9zdHJlYW0gKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCk7CisKKy8qCisgKiBQYWNrcyBTRVRUSU5HUyBmcmFtZSB8ZnJhbWV8IGluIHdpcmUgZm9ybWF0IGFuZCBzdG9yZSBpdCBpbgorICogfGJ1ZnN8LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBuZ2h0dHAyX2J1ZnNfcmVzZXQoYnVmcykgaXMgY2FsbGVkCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciByZXR1cm5zIG9uZSBvZiB0aGUKKyAqIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SCisgKiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgaXMgdG9vIGxhcmdlLgorICovCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX3NldHRpbmdzKG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9zZXR0aW5ncyAqZnJhbWUpOworCisvKgorICogUGFja3MgdGhlIHxpdnwsIHdoaWNoIGluY2x1ZGVzIHxuaXZ8IGVudHJpZXMsIGluIHRoZSB8YnVmfCwKKyAqIGFzc3VtaW5nIHRoZSB8YnVmfCBoYXMgYXQgbGVhc3QgOCAqIHxuaXZ8IGJ5dGVzLgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGludG8gdGhlIHxidWZ8LgorICovCitzaXplX3QgbmdodHRwMl9mcmFtZV9wYWNrX3NldHRpbmdzX3BheWxvYWQodWludDhfdCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuaXYpOworCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3NldHRpbmdzX2VudHJ5KG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkKTsKKworLyoKKyAqIEluaXRpYWxpemVzIHBheWxvYWQgb2YgZnJhbWUtPnNldHRpbmdzLiAgVGhlIHxmcmFtZXwgdGFrZXMKKyAqIG93bmVyc2hpcCBvZiB8aXZ8LgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3NldHRpbmdzX3BheWxvYWQobmdodHRwMl9zZXR0aW5ncyAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdik7CisKKy8qCisgKiBVbnBhY2tzIFNFVFRJTkdTIHBheWxvYWQgaW50byB8Kml2X3B0cnwuIFRoZSBudW1iZXIgb2YgZW50cmllcyBhcmUKKyAqIGFzc2lnbmVkIHRvIHRoZSB8Km5pdl9wdHJ8LiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBlbm91Z2ggbWVtb3J5CisgKiB0byBzdG9yZSB0aGUgcmVzdWx0IGluIHwqaXZfcHRyfC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBmcmVlCisgKiB8Kml2X3B0cnwgYWZ0ZXIgaXRzIHVzZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9mcmFtZV91bnBhY2tfc2V0dGluZ3NfcGF5bG9hZDIobmdodHRwMl9zZXR0aW5nc19lbnRyeSAqKml2X3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm5pdl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlbiwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBQYWNrcyBQVVNIX1BST01JU0UgZnJhbWUgfGZyYW1lfCBpbiB3aXJlIGZvcm1hdCBhbmQgc3RvcmUgaXQgaW4KKyAqIHxidWZzfC4gIFRoaXMgZnVuY3Rpb24gZXhwYW5kcyB8YnVmc3wgYXMgbmVjZXNzYXJ5IHRvIHN0b3JlCisgKiBmcmFtZS4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgbmdodHRwMl9idWZzX3Jlc2V0KGJ1ZnMpIGlzIGNhbGxlZAorICogYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBmcmFtZS0+aGQubGVuZ3RoIGlzIGFzc2lnbmVkIGFmdGVyIGxlbmd0aCBpcyBkZXRlcm1pbmVkIGR1cmluZworICogcGFja2luZyBwcm9jZXNzLiAgQ09OVElOVUFUSU9OIGZyYW1lcyBhcmUgYWxzbyBzZXJpYWxpemVkIGluIHRoaXMKKyAqIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBwYWRkaW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciByZXR1cm5zIG9uZSBvZiB0aGUKKyAqIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUAorICogICAgIFRoZSBkZWZsYXRlIG9wZXJhdGlvbiBmYWlsZWQuCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfcHVzaF9wcm9taXNlKG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfcHVzaF9wcm9taXNlICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKTsKKworLyoKKyAqIFVucGFja3MgUFVTSF9QUk9NSVNFIGZyYW1lIGJ5dGUgc2VxdWVuY2UgaW50byB8ZnJhbWV8LiAgVGhpcworICogZnVuY3Rpb24gb25seSB1bmFwY2tzIGJ5dGVzIHRoYXQgY29tZSBiZWZvcmUgbmFtZS92YWx1ZSBoZWFkZXIKKyAqIGJsb2NrIGFuZCBhZnRlciBwb3NzaWJsZSBQYWQgTGVuZ3RoIGZpZWxkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9QUk9UTworICogICAgIFRPRE8gRU5EX0hFQURFUlMgZmxhZyBpcyBub3Qgc2V0CisgKi8KK2ludCBuZ2h0dHAyX2ZyYW1lX3VucGFja19wdXNoX3Byb21pc2VfcGF5bG9hZChuZ2h0dHAyX3B1c2hfcHJvbWlzZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCk7CisKKy8qCisgKiBQYWNrcyBQSU5HIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmb3JtYXQgYW5kIHN0b3JlIGl0IGluCisgKiB8YnVmc3wuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5naHR0cDJfYnVmc19yZXNldChidWZzKSBpcyBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMgYW5kIHJldHVybnMgMC4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfcGFja19waW5nKG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9waW5nICpmcmFtZSk7CisKKy8qCisgKiBVbnBhY2tzIFBJTkcgd2lyZSBmb3JtYXQgaW50byB8ZnJhbWV8LgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX3BpbmdfcGF5bG9hZChuZ2h0dHAyX3BpbmcgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCk7CisKKy8qCisgKiBQYWNrcyBHT0FXQVkgZnJhbWUgfGZyYW1lfCBpbiB3aXJlIGZvcm1hdCBhbmQgc3RvcmUgaXQgaW4gfGJ1ZnN8LgorICogVGhpcyBmdW5jdGlvbiBleHBhbmRzIHxidWZzfCBhcyBuZWNlc3NhcnkgdG8gc3RvcmUgZnJhbWUuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5naHR0cDJfYnVmc19yZXNldChidWZzKSBpcyBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0ZSQU1FX1NJWkVfRVJST1IKKyAqICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBmcmFtZSBpcyB0b28gbGFyZ2UuCisgKi8KK2ludCBuZ2h0dHAyX2ZyYW1lX3BhY2tfZ29hd2F5KG5naHR0cDJfYnVmcyAqYnVmcywgbmdodHRwMl9nb2F3YXkgKmZyYW1lKTsKKworLyoKKyAqIFVucGFja3MgR09BV0FZIHdpcmUgZm9ybWF0IGludG8gfGZyYW1lfC4gIFRoZSB8cGF5bG9hZHwgb2YgbGVuZ3RoCisgKiB8cGF5bG9hZGxlbnwgY29udGFpbnMgZmlyc3QgOCBieXRlcyBvZiBwYXlsb2FkLiAgVGhlCisgKiB8dmFyX2dpZnRfcGF5bG9hZHwgb2YgbGVuZ3RoIHx2YXJfZ2lmdF9wYXlsb2FkbGVufCBjb250YWlucworICogcmVtYWluaW5nIHBheWxvYWQgYW5kIGl0cyBidWZmZXIgaXMgZ2lmdGVkIHRvIHRoZSBmdW5jdGlvbiBhbmQgdGhlbgorICogfGZyYW1lfC4gIFRoZSB8dmFyX2dpZnRfcGF5bG9hZGxlbnwgbXVzdCBiZSBmcmVlZCBieQorICogbmdodHRwMl9mcmFtZV9nb2F3YXlfZnJlZSgpLgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX2dvYXdheV9wYXlsb2FkKG5naHR0cDJfZ29hd2F5ICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdmFyX2dpZnRfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcl9naWZ0X3BheWxvYWRsZW4pOworCisvKgorICogVW5wYWNrcyBHT0FXQVkgd2lyZSBmb3JtYXQgaW50byB8ZnJhbWV8LiAgVGhpcyBmdW5jdGlvbiBvbmx5IGV4aXN0cworICogZm9yIHVuaXQgdGVzdC4gIEFmdGVyIGFsbG9jYXRpbmcgYnVmZmVyIGZvciBkZWJ1ZyBkYXRhLCB0aGlzCisgKiBmdW5jdGlvbiBpbnRlcm5hbGx5IGNhbGxzIG5naHR0cDJfZnJhbWVfdW5wYWNrX2dvYXdheV9wYXlsb2FkKCkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBuZ2h0dHAyX2ZyYW1lX3VucGFja19nb2F3YXlfcGF5bG9hZDIobmdodHRwMl9nb2F3YXkgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlbiwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBQYWNrcyBXSU5ET1dfVVBEQVRFIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmcmFtZSBmb3JtYXQgYW5kIHN0b3JlIGl0CisgKiBpbiB8YnVmc3wuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5naHR0cDJfYnVmc19yZXNldChidWZzKSBpcyBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMgYW5kIHJldHVybnMgMC4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfcGFja193aW5kb3dfdXBkYXRlKG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3dpbmRvd191cGRhdGUgKmZyYW1lKTsKKworLyoKKyAqIFVucGFja3MgV0lORE9XX1VQREFURSBmcmFtZSBieXRlIHNlcXVlbmNlIGludG8gfGZyYW1lfC4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX3VucGFja193aW5kb3dfdXBkYXRlX3BheWxvYWQobmdodHRwMl93aW5kb3dfdXBkYXRlICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBheWxvYWQpOworCisvKgorICogUGFja3MgQUxUU1ZDIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmcmFtZSBmb3JtYXQgYW5kIHN0b3JlIGl0IGluCisgKiB8YnVmc3wuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5naHR0cDJfYnVmc19yZXNldChidWZzKSBpcyBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMgYW5kIHJldHVybnMgMC4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfcGFja19hbHRzdmMobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX2V4dGVuc2lvbiAqZXh0KTsKKworLyoKKyAqIFVucGFja3MgQUxUU1ZDIHdpcmUgZm9ybWF0IGludG8gfGZyYW1lfC4gIFRoZSB8cGF5bG9hZHwgb2YKKyAqIHxwYXlsb2FkbGVufCBieXRlcyBjb250YWlucyBmcmFtZSBwYXlsb2FkLiAgVGhpcyBmdW5jdGlvbiBhc3N1bWVzCisgKiB0aGF0IGZyYW1lLT5wYXlsb2FkIHBvaW50cyB0byB0aGUgbmdodHRwMl9leHRfYWx0c3ZjIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBzdWNjZWVkcyBhbmQgcmV0dXJucyAwLgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfdW5wYWNrX2FsdHN2Y19wYXlsb2FkKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9yaWdpbl9sZW4sIHVpbnQ4X3QgKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXlsb2FkbGVuKTsKKworLyoKKyAqIFVucGFja3MgQUxUU1ZDIHdpcmUgZm9ybWF0IGludG8gfGZyYW1lfC4gIFRoaXMgZnVuY3Rpb24gb25seSBleGlzdHMKKyAqIGZvciB1bml0IHRlc3QuICBBZnRlciBhbGxvY2F0aW5nIGJ1ZmZlciBmb3IgZmllbGRzLCB0aGlzIGZ1bmN0aW9uCisgKiBpbnRlcm5hbGx5IGNhbGxzIG5naHR0cDJfZnJhbWVfdW5wYWNrX2FsdHN2Y19wYXlsb2FkKCkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SCisgKiAgICAgVGhlIHBheWxvYWQgaXMgdG9vIHNtYWxsLgorICovCitpbnQgbmdodHRwMl9mcmFtZV91bnBhY2tfYWx0c3ZjX3BheWxvYWQyKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBheWxvYWRsZW4sIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogUGFja3MgT1JJR0lOIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmcmFtZSBmb3JtYXQgYW5kIHN0b3JlIGl0IGluCisgKiB8YnVmc3wuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IG5naHR0cDJfYnVmc19yZXNldChidWZzKSBpcyBjYWxsZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SCisgKiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgaXMgdG9vIGxhcmdlLgorICovCitpbnQgbmdodHRwMl9mcmFtZV9wYWNrX29yaWdpbihuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfZXh0ZW5zaW9uICpleHQpOworCisvKgorICogVW5wYWNrcyBPUklHSU4gd2lyZSBmb3JtYXQgaW50byB8ZnJhbWV8LiAgVGhlIHxwYXlsb2FkfCBvZiBsZW5ndGgKKyAqIHxwYXlsb2FkbGVufCBjb250YWlucyB0aGUgZnJhbWUgcGF5bG9hZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0ZSQU1FX1NJWkVfRVJST1IKKyAqICAgICBUaGUgcGF5bG9hZCBpcyB0b28gc21hbGwuCisgKi8KK2ludCBuZ2h0dHAyX2ZyYW1lX3VucGFja19vcmlnaW5fcGF5bG9hZChuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlbiwgbmdodHRwMl9tZW0gKm1lbSk7CisvKgorICogSW5pdGlhbGl6ZXMgSEVBREVSUyBmcmFtZSB8ZnJhbWV8IHdpdGggZ2l2ZW4gdmFsdWVzLiAgfGZyYW1lfCB0YWtlcworICogb3duZXJzaGlwIG9mIHxudmF8LCBzbyBjYWxsZXIgbXVzdCBub3QgZnJlZSBpdC4gSWYgfHN0cmVhbV9pZHwgaXMKKyAqIG5vdCBhc3NpZ25lZCB5ZXQsIGl0IG11c3QgYmUgLTEuCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV9oZWFkZXJzX2luaXQobmdodHRwMl9oZWFkZXJzICpmcmFtZSwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIG5naHR0cDJfaGVhZGVyc19jYXRlZ29yeSBjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuKTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfZnJlZShuZ2h0dHAyX2hlYWRlcnMgKmZyYW1lLCBuZ2h0dHAyX21lbSAqbWVtKTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3ByaW9yaXR5X2luaXQobmdodHRwMl9wcmlvcml0eSAqZnJhbWUsIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYyk7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9wcmlvcml0eV9mcmVlKG5naHR0cDJfcHJpb3JpdHkgKmZyYW1lKTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3JzdF9zdHJlYW1faW5pdChuZ2h0dHAyX3JzdF9zdHJlYW0gKmZyYW1lLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSk7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9yc3Rfc3RyZWFtX2ZyZWUobmdodHRwMl9yc3Rfc3RyZWFtICpmcmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplcyBQVVNIX1BST01JU0UgZnJhbWUgfGZyYW1lfCB3aXRoIGdpdmVuIHZhbHVlcy4gIHxmcmFtZXwKKyAqIHRha2VzIG93bmVyc2hpcCBvZiB8bnZhfCwgc28gY2FsbGVyIG11c3Qgbm90IGZyZWUgaXQuCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV9wdXNoX3Byb21pc2VfaW5pdChuZ2h0dHAyX3B1c2hfcHJvbWlzZSAqZnJhbWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBwcm9taXNlZF9zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9udiAqbnZhLCBzaXplX3QgbnZsZW4pOworCit2b2lkIG5naHR0cDJfZnJhbWVfcHVzaF9wcm9taXNlX2ZyZWUobmdodHRwMl9wdXNoX3Byb21pc2UgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogSW5pdGlhbGl6ZXMgU0VUVElOR1MgZnJhbWUgfGZyYW1lfCB3aXRoIGdpdmVuIHZhbHVlcy4gfGZyYW1lfCB0YWtlcworICogb3duZXJzaGlwIG9mIHxpdnwsIHNvIGNhbGxlciBtdXN0IG5vdCBmcmVlIGl0LiBUaGUgfGZsYWdzfCBhcmUKKyAqIGJpdHdpc2UtT1Igb2Ygb25lIG9yIG1vcmUgb2YgbmdodHRwMl9zZXR0aW5nc19mbGFnLgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfc2V0dGluZ3NfaW5pdChuZ2h0dHAyX3NldHRpbmdzICpmcmFtZSwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LCBzaXplX3Qgbml2KTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX3NldHRpbmdzX2ZyZWUobmdodHRwMl9zZXR0aW5ncyAqZnJhbWUsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogSW5pdGlhbGl6ZXMgUElORyBmcmFtZSB8ZnJhbWV8IHdpdGggZ2l2ZW4gdmFsdWVzLiBJZiB0aGUKKyAqIHxvcHFldWVfZGF0YXwgaXMgbm90IE5VTEwsIGl0IG11c3QgcG9pbnQgdG8gOCBieXRlcyBtZW1vcnkgcmVnaW9uCisgKiBvZiBkYXRhLiBUaGUgZGF0YSBwb2ludGVkIGJ5IHxvcGFxdWVfZGF0YXwgaXMgY29waWVkLiBJdCBjYW4gYmUKKyAqIE5VTEwuIEluIHRoaXMgY2FzZSwgOCBieXRlcyBOVUxMIGlzIHVzZWQuCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV9waW5nX2luaXQobmdodHRwMl9waW5nICpmcmFtZSwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqb3BxdWVfZGF0YSk7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9waW5nX2ZyZWUobmdodHRwMl9waW5nICpmcmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplcyBHT0FXQVkgZnJhbWUgfGZyYW1lfCB3aXRoIGdpdmVuIHZhbHVlcy4gT24gc3VjY2VzcywKKyAqIHRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIHxvcGFxdWVfZGF0YXwsIHNvIGNhbGxlciBtdXN0IG5vdAorICogZnJlZSBpdC4gSWYgdGhlIHxvcGFxdWVfZGF0YV9sZW58IGlzIDAsIG9wYXF1ZV9kYXRhIGNvdWxkIGJlIE5VTEwuCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV9nb2F3YXlfaW5pdChuZ2h0dHAyX2dvYXdheSAqZnJhbWUsIGludDMyX3QgbGFzdF9zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSwgdWludDhfdCAqb3BhcXVlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9wYXF1ZV9kYXRhX2xlbik7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9nb2F3YXlfZnJlZShuZ2h0dHAyX2dvYXdheSAqZnJhbWUsIG5naHR0cDJfbWVtICptZW0pOworCit2b2lkIG5naHR0cDJfZnJhbWVfd2luZG93X3VwZGF0ZV9pbml0KG5naHR0cDJfd2luZG93X3VwZGF0ZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZmxhZ3MsIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdpbmRvd19zaXplX2luY3JlbWVudCk7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV93aW5kb3dfdXBkYXRlX2ZyZWUobmdodHRwMl93aW5kb3dfdXBkYXRlICpmcmFtZSk7CisKK3ZvaWQgbmdodHRwMl9mcmFtZV9leHRlbnNpb25faW5pdChuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsIHVpbnQ4X3QgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXlsb2FkKTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2V4dGVuc2lvbl9mcmVlKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplcyBBTFRTVkMgZnJhbWUgfGZyYW1lfCB3aXRoIGdpdmVuIHZhbHVlcy4gIFRoaXMgZnVuY3Rpb24KKyAqIGFzc3VtZXMgdGhhdCBmcmFtZS0+cGF5bG9hZCBwb2ludHMgdG8gbmdodHRwMl9leHRfYWx0c3ZjIG9iamVjdC4KKyAqIEFsc28gfG9yaWdpbnwgYW5kIHxmaWVsZF92YWx1ZXwgYXJlIGFsbG9jYXRlZCBpbiBzaW5nbGUgYnVmZmVyLAorICogc3RhcnRpbmcgfG9yaWdpbnwuICBPbiBzdWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZgorICogfG9yaWdpbnwsIHNvIGNhbGxlciBtdXN0IG5vdCBmcmVlIGl0LgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfYWx0c3ZjX2luaXQobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpvcmlnaW4sIHNpemVfdCBvcmlnaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmZpZWxkX3ZhbHVlLCBzaXplX3QgZmllbGRfdmFsdWVfbGVuKTsKKworLyoKKyAqIEZyZWVzIHVwIHJlc291cmNlcyB1bmRlciB8ZnJhbWV8LiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBmcmVlCisgKiBuZ2h0dHAyX2V4dF9hbHRzdmMgb2JqZWN0IHBvaW50ZWQgYnkgZnJhbWUtPnBheWxvYWQuICBUaGlzIGZ1bmN0aW9uCisgKiBvbmx5IGZyZWVzIG9yaWdpbiBwb2ludGVkIGJ5IG5naHR0cDJfZXh0X2FsdHN2Yy5vcmlnaW4uICBUaGVyZWZvcmUsCisgKiBvdGhlciBmaWVsZHMgbXVzdCBiZSBhbGxvY2F0ZWQgaW4gdGhlIHNhbWUgYnVmZmVyIHdpdGggb3JpZ2luLgorICovCit2b2lkIG5naHR0cDJfZnJhbWVfYWx0c3ZjX2ZyZWUobmdodHRwMl9leHRlbnNpb24gKmZyYW1lLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIEluaXRpYWxpemVzIE9SSUdJTiBmcmFtZSB8ZnJhbWV8IHdpdGggZ2l2ZW4gdmFsdWVzLiAgVGhpcyBmdW5jdGlvbgorICogYXNzdW1lcyB0aGF0IGZyYW1lLT5wYXlsb2FkIHBvaW50cyB0byBuZ2h0dHAyX2V4dF9vcmlnaW4gb2JqZWN0LgorICogQWxzbyB8b3Z8IGFuZCB0aGUgbWVtb3J5IHBvaW50ZWQgYnkgdGhlIGZpZWxkIG9mIGl0cyBlbGVtZW50cyBhcmUKKyAqIGFsbG9jYXRlZCBpbiBzaW5nbGUgYnVmZmVyLCBzdGFydGluZyB3aXRoIHxvdnwuICBPbiBzdWNjZXNzLCB0aGlzCisgKiBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgfG92fCwgc28gY2FsbGVyIG11c3Qgbm90IGZyZWUgaXQuCisgKi8KK3ZvaWQgbmdodHRwMl9mcmFtZV9vcmlnaW5faW5pdChuZ2h0dHAyX2V4dGVuc2lvbiAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9vcmlnaW5fZW50cnkgKm92LCBzaXplX3Qgbm92KTsKKworLyoKKyAqIEZyZWVzIHVwIHJlc291cmNlcyB1bmRlciB8ZnJhbWV8LiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBmcmVlCisgKiBuZ2h0dHAyX2V4dF9vcmlnaW4gb2JqZWN0IHBvaW50ZWQgYnkgZnJhbWUtPnBheWxvYWQuICBUaGlzIGZ1bmN0aW9uCisgKiBvbmx5IGZyZWVzIG5naHR0cDJfZXh0X29yaWdpbi5vdi4gIFRoZXJlZm9yZSwgb3RoZXIgZmllbGRzIG11c3QgYmUKKyAqIGFsbG9jYXRlZCBpbiB0aGUgc2FtZSBidWZmZXIgd2l0aCBvdi4KKyAqLwordm9pZCBuZ2h0dHAyX2ZyYW1lX29yaWdpbl9mcmVlKG5naHR0cDJfZXh0ZW5zaW9uICpmcmFtZSwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBhZnRlciBwYXlsb2FkLiAgVGhlIHRvdGFsCisgKiBwYWRkaW5nIGxlbmd0aCBpcyBnaXZlbiBpbiB0aGUgfHBhZGxlbnwuICBUaGUgcmV0dXJuZWQgdmFsdWUgZG9lcworICogbm90IGluY2x1ZGUgdGhlIFBhZCBMZW5ndGggZmllbGQuICBJZiB8cGFkbGVufCBpcyAwLCB0aGlzIGZ1bmN0aW9uCisgKiByZXR1cm5zIDAsIHJlZ2FyZGxlc3Mgb2YgZnJhbWUtPmhkLmZsYWdzLgorICovCitzaXplX3QgbmdodHRwMl9mcmFtZV90cmFpbF9wYWRsZW4obmdodHRwMl9mcmFtZSAqZnJhbWUsIHNpemVfdCBwYWRsZW4pOworCit2b2lkIG5naHR0cDJfZnJhbWVfZGF0YV9pbml0KG5naHR0cDJfZGF0YSAqZnJhbWUsIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKTsKKwordm9pZCBuZ2h0dHAyX2ZyYW1lX2RhdGFfZnJlZShuZ2h0dHAyX2RhdGEgKmZyYW1lKTsKKworLyoKKyAqIE1ha2VzIGNvcHkgb2YgfGl2fCBhbmQgcmV0dXJuIHRoZSBjb3B5LiBUaGUgfG5pdnwgaXMgdGhlIG51bWJlciBvZgorICogZW50cmllcyBpbiB8aXZ8LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIGNvcHkgaWYKKyAqIGl0IHN1Y2NlZWRzLCBvciBOVUxMLgorICovCituZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICpuZ2h0dHAyX2ZyYW1lX2l2X2NvcHkoY29uc3QgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdiwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBTb3J0cyB0aGUgfG52YXwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIG5hbWUgYW5kIHZhbHVlLiBJZiBuYW1lcyBhcmUKKyAqIGVxdWl2YWxlbnQsIHNvcnQgdGhlbSBieSB2YWx1ZS4KKyAqLwordm9pZCBuZ2h0dHAyX252X2FycmF5X3NvcnQobmdodHRwMl9udiAqbnZhLCBzaXplX3QgbnZsZW4pOworCisvKgorICogQ29waWVzIG5hbWUvdmFsdWUgcGFpcnMgZnJvbSB8bnZhfCwgd2hpY2ggY29udGFpbnMgfG52bGVufCBwYWlycywKKyAqIHRvIHwqbnZhX3B0cnwsIHdoaWNoIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzbyB0aGF0IGFsbCBpdGVtcyBjYW4KKyAqIGJlIHN0b3JlZC4gIFRoZSByZXN1bHRhbnQgbmFtZSBhbmQgdmFsdWUgaW4gbmdodHRwMl9udiBhcmUKKyAqIGd1YXJhbnRlZWQgdG8gYmUgTlVMTC10ZXJtaW5hdGVkIGV2ZW4gaWYgdGhlIGlucHV0IGlzIG5vdAorICogbnVsbC10ZXJtaW5hdGVkLgorICoKKyAqIFRoZSB8Km52YV9wdHJ8IG11c3QgYmUgZnJlZWQgdXNpbmcgbmdodHRwMl9udl9hcnJheV9kZWwoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9udl9hcnJheV9jb3B5KG5naHR0cDJfbnYgKipudmFfcHRyLCBjb25zdCBuZ2h0dHAyX252ICpudmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudmxlbiwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIG5hbWUvdmFsdWUgcGFpciB8YXwgZXF1YWxzIHRvIHxifC4gVGhlIG5hbWUKKyAqIGlzIGNvbXBhcmVkIGluIGNhc2Utc2Vuc2l0aXZlLCBiZWNhdXNlIHdlIGVuc3VyZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCBhZnRlciB0aGUgbmFtZSBpcyBsb3dlci1jYXNlZC4KKyAqLworaW50IG5naHR0cDJfbnZfZXF1YWwoY29uc3QgbmdodHRwMl9udiAqYSwgY29uc3QgbmdodHRwMl9udiAqYik7CisKKy8qCisgKiBGcmVlcyB8bnZhfC4KKyAqLwordm9pZCBuZ2h0dHAyX252X2FycmF5X2RlbChuZ2h0dHAyX252ICpudmEsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogQ2hlY2tzIHRoYXQgdGhlIHxpdnwsIHdoaWNoIGluY2x1ZGVzIHxuaXZ8IGVudHJpZXMsIGRvZXMgbm90IGhhdmUKKyAqIGludmFsaWQgdmFsdWVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBub256ZXJvIGlmIGl0IHN1Y2NlZWRzLCBvciAwLgorICovCitpbnQgbmdodHRwMl9pdl9jaGVjayhjb25zdCBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwgc2l6ZV90IG5pdik7CisKKy8qCisgKiBTZXRzIFBhZCBMZW5ndGggZmllbGQgYW5kIGZsYWdzIGFuZCBhZGp1c3RzIGZyYW1lIGhlYWRlciBwb3NpdGlvbgorICogb2YgZWFjaCBidWZmZXJzIGluIHxidWZzfC4gIFRoZSBudW1iZXIgb2YgcGFkZGluZyBpcyBnaXZlbiBpbiB0aGUKKyAqIHxwYWRsZW58IGluY2x1ZGluZyBQYWQgTGVuZ3RoIGZpZWxkLiAgVGhlIHxoZHwgaXMgdGhlIGZyYW1lIGhlYWRlcgorICogZm9yIHRoZSBzZXJpYWxpemVkIGRhdGEuICBUaGlzIGZ1bmN0aW9uIGZpbGxzIHplcm9zIHBhZGRpbmcgcmVnaW9uCisgKiB1bmxlc3MgZnJhbWVoZF9vbmx5IGlzIG5vbnplcm8uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SCisgKiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIGZyYW1lIGlzIHRvbyBsYXJnZS4KKyAqLworaW50IG5naHR0cDJfZnJhbWVfYWRkX3BhZChuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIG5naHR0cDJfZnJhbWVfaGQgKmhkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFkbGVuLCBpbnQgZnJhbWVoZF9vbmx5KTsKKworI2VuZGlmIC8qIE5HSFRUUDJfRlJBTUVfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZC5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlODY5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hkLmMKQEAgLTAsMCArMSwyMzUxIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX2hkLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibmdodHRwMl9oZWxwZXIuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2ludC5oIgorI2luY2x1ZGUgIm5naHR0cDJfZGVidWcuaCIKKworLyogTWFrZSBzY2FsYXIgaW5pdGlhbGl6YXRpb24gZm9ybSBvZiBuZ2h0dHAyX2hkX2VudHJ5ICovCisjZGVmaW5lIE1BS0VfU1RBVElDX0VOVChOLCBWLCBULCBIKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7TlVMTCwgTlVMTCwgKHVpbnQ4X3QgKikoTiksIHNpemVvZigoTikpIC0gMSwgLTF9LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHtOVUxMLCBOVUxMLCAodWludDhfdCAqKShWKSwgc2l6ZW9mKChWKSkgLSAxLCAtMX0sICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7KHVpbnQ4X3QgKikoTiksICh1aW50OF90ICopKFYpLCBzaXplb2YoKE4pKSAtIDEsIHNpemVvZigoVikpIC0gMSwgMH0sIFwKKyAgICAgICAgVCwgSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworLyogR2VuZXJhdGVkIGJ5IG1rc3RhdGljdGJsLnB5ICovCisvKiAzcmQgcGFyYW1ldGVyIGlzIG5naHR0cDJfdG9rZW4gdmFsdWUgZm9yIGhlYWRlciBmaWVsZCBuYW1lLiAgV2UgdXNlCisgICBmaXJzdCBlbnVtIHZhbHVlIGlmIHNhbWUgaGVhZGVyIG5hbWVzIGFyZSByZXBlYXRlZCAoZS5nLiwKKyAgIDpzdGF0dXMpLiAqLworc3RhdGljIGNvbnN0IG5naHR0cDJfaGRfc3RhdGljX2VudHJ5IHN0YXRpY190YWJsZVtdID0geworICAgIE1BS0VfU1RBVElDX0VOVCgiOmF1dGhvcml0eSIsICIiLCAwLCAzMTUzNzI1MTUwdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCI6bWV0aG9kIiwgIkdFVCIsIDEsIDY5NTY2NjA1NnUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOm1ldGhvZCIsICJQT1NUIiwgMSwgNjk1NjY2MDU2dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCI6cGF0aCIsICIvIiwgMywgMzI5Mjg0ODY4NnUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOnBhdGgiLCAiL2luZGV4Lmh0bWwiLCAzLCAzMjkyODQ4Njg2dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCI6c2NoZW1lIiwgImh0dHAiLCA1LCAyNTEwNDc3Njc0dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCI6c2NoZW1lIiwgImh0dHBzIiwgNSwgMjUxMDQ3NzY3NHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOnN0YXR1cyIsICIyMDAiLCA3LCA0MDAwMjg4OTgzdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCI6c3RhdHVzIiwgIjIwNCIsIDcsIDQwMDAyODg5ODN1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoIjpzdGF0dXMiLCAiMjA2IiwgNywgNDAwMDI4ODk4M3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOnN0YXR1cyIsICIzMDQiLCA3LCA0MDAwMjg4OTgzdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCI6c3RhdHVzIiwgIjQwMCIsIDcsIDQwMDAyODg5ODN1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoIjpzdGF0dXMiLCAiNDA0IiwgNywgNDAwMDI4ODk4M3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiOnN0YXR1cyIsICI1MDAiLCA3LCA0MDAwMjg4OTgzdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJhY2NlcHQtY2hhcnNldCIsICIiLCAxNCwgMzY2NDAxMDM0NHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiYWNjZXB0LWVuY29kaW5nIiwgImd6aXAsIGRlZmxhdGUiLCAxNSwgMzM3OTY0OTE3N3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiYWNjZXB0LWxhbmd1YWdlIiwgIiIsIDE2LCAxOTc5MDg2NjE0dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJhY2NlcHQtcmFuZ2VzIiwgIiIsIDE3LCAxNzEzNzUzOTU4dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJhY2NlcHQiLCAiIiwgMTgsIDEzNjYwOTMyMXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIiwgIiIsIDE5LCAyNzEwNzk3MjkydSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJhZ2UiLCAiIiwgMjAsIDc0MjQ3NjE4OHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiYWxsb3ciLCAiIiwgMjEsIDI5MzA4Nzg1MTR1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImF1dGhvcml6YXRpb24iLCAiIiwgMjIsIDI0MzYyNTc3MjZ1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImNhY2hlLWNvbnRyb2wiLCAiIiwgMjMsIDEzNTUzMjY2Njl1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImNvbnRlbnQtZGlzcG9zaXRpb24iLCAiIiwgMjQsIDM4ODkxODQzNDh1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImNvbnRlbnQtZW5jb2RpbmciLCAiIiwgMjUsIDY1MjAzNTkydSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJjb250ZW50LWxhbmd1YWdlIiwgIiIsIDI2LCAyNDk3MzU4N3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiY29udGVudC1sZW5ndGgiLCAiIiwgMjcsIDEzMDgxODE3ODl1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImNvbnRlbnQtbG9jYXRpb24iLCAiIiwgMjgsIDIzMDIzNjQ3MTh1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImNvbnRlbnQtcmFuZ2UiLCAiIiwgMjksIDM1NTU1MjMxNDZ1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImNvbnRlbnQtdHlwZSIsICIiLCAzMCwgNDI0NDA0ODI3N3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiY29va2llIiwgIiIsIDMxLCAyMDA3NDQ5NzkxdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJkYXRlIiwgIiIsIDMyLCAzNTY0Mjk3MzA1dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJldGFnIiwgIiIsIDMzLCAxMTM3OTI5NjB1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImV4cGVjdCIsICIiLCAzNCwgMjUzMDg5NjcyOHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiZXhwaXJlcyIsICIiLCAzNSwgMTA0OTU0NDU3OXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiZnJvbSIsICIiLCAzNiwgMjUxMzI3Mjk0OXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiaG9zdCIsICIiLCAzNywgMjk1MjcwMTI5NXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiaWYtbWF0Y2giLCAiIiwgMzgsIDM1OTc2OTQ2OTh1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoImlmLW1vZGlmaWVkLXNpbmNlIiwgIiIsIDM5LCAyMjEzMDUwNzkzdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJpZi1ub25lLW1hdGNoIiwgIiIsIDQwLCAyNTM2MjAyNjE1dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJpZi1yYW5nZSIsICIiLCA0MSwgMjM0MDk3ODIzOHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgiaWYtdW5tb2RpZmllZC1zaW5jZSIsICIiLCA0MiwgMzc5NDgxNDg1OHUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgibGFzdC1tb2RpZmllZCIsICIiLCA0MywgMzIyNjk1MDI1MXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgibGluayIsICIiLCA0NCwgMjMyNDU3ODMzdSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJsb2NhdGlvbiIsICIiLCA0NSwgMjAwNjQ5MTI2dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJtYXgtZm9yd2FyZHMiLCAiIiwgNDYsIDE4MjYxNjIxMzR1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInByb3h5LWF1dGhlbnRpY2F0ZSIsICIiLCA0NywgMjcwOTQ0NTM1OXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgicHJveHktYXV0aG9yaXphdGlvbiIsICIiLCA0OCwgMjY4NjM5MjUwN3UpLAorICAgIE1BS0VfU1RBVElDX0VOVCgicmFuZ2UiLCAiIiwgNDksIDQyMDg3MjUyMDJ1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInJlZmVyZXIiLCAiIiwgNTAsIDM5Njk1NzkzNjZ1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInJlZnJlc2giLCAiIiwgNTEsIDM1NzI2NTU2Njh1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInJldHJ5LWFmdGVyIiwgIiIsIDUyLCAzMzM2MTgwNTk4dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJzZXJ2ZXIiLCAiIiwgNTMsIDEwODUwMjk4NDJ1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInNldC1jb29raWUiLCAiIiwgNTQsIDE4NDgzNzEwMDB1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAiIiwgNTUsIDQxMzgxNDczNjF1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInRyYW5zZmVyLWVuY29kaW5nIiwgIiIsIDU2LCAzNzE5NTkwOTg4dSksCisgICAgTUFLRV9TVEFUSUNfRU5UKCJ1c2VyLWFnZW50IiwgIiIsIDU3LCA2MDY0NDQ1MjZ1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInZhcnkiLCAiIiwgNTgsIDEwODUwMDUzODF1KSwKKyAgICBNQUtFX1NUQVRJQ19FTlQoInZpYSIsICIiLCA1OSwgMTc2Mjc5ODYxMXUpLAorICAgIE1BS0VfU1RBVElDX0VOVCgid3d3LWF1dGhlbnRpY2F0ZSIsICIiLCA2MCwgNzc5ODY1ODU4dSksCit9OworCitzdGF0aWMgaW50IG1lbWVxKGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwgc2l6ZV90IG4pIHsKKyAgcmV0dXJuIG1lbWNtcChzMSwgczIsIG4pID09IDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdhcyBnZW5lcmF0ZWQgYnkgZ2VubGlidG9rZW5sb29rdXAucHkuICBJbnNwaXJlZCBieQorICogaDJvIGhlYWRlciBsb29rdXAuICBodHRwczovL2dpdGh1Yi5jb20vaDJvL2gybworICovCitzdGF0aWMgaW50MzJfdCBsb29rdXBfdG9rZW4oY29uc3QgdWludDhfdCAqbmFtZSwgc2l6ZV90IG5hbWVsZW4pIHsKKyAgc3dpdGNoIChuYW1lbGVuKSB7CisgIGNhc2UgMjoKKyAgICBzd2l0Y2ggKG5hbWVbMV0pIHsKKyAgICBjYXNlICdlJzoKKyAgICAgIGlmIChtZW1lcSgidCIsIG5hbWUsIDEpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1RFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDM6CisgICAgc3dpdGNoIChuYW1lWzJdKSB7CisgICAgY2FzZSAnYSc6CisgICAgICBpZiAobWVtZXEoInZpIiwgbmFtZSwgMikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fVklBOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoImFnIiwgbmFtZSwgMikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQUdFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDQ6CisgICAgc3dpdGNoIChuYW1lWzNdKSB7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoImRhdCIsIG5hbWUsIDMpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0RBVEU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdnJzoKKyAgICAgIGlmIChtZW1lcSgiZXRhIiwgbmFtZSwgMykpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fRVRBRzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2snOgorICAgICAgaWYgKG1lbWVxKCJsaW4iLCBuYW1lLCAzKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9MSU5LOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnbSc6CisgICAgICBpZiAobWVtZXEoImZybyIsIG5hbWUsIDMpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0ZST007CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICd0JzoKKyAgICAgIGlmIChtZW1lcSgiaG9zIiwgbmFtZSwgMykpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fSE9TVDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3knOgorICAgICAgaWYgKG1lbWVxKCJ2YXIiLCBuYW1lLCAzKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9WQVJZOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDU6CisgICAgc3dpdGNoIChuYW1lWzRdKSB7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoInJhbmciLCBuYW1lLCA0KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9SQU5HRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2gnOgorICAgICAgaWYgKG1lbWVxKCI6cGF0IiwgbmFtZSwgNCkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fX1BBVEg7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICd3JzoKKyAgICAgIGlmIChtZW1lcSgiYWxsbyIsIG5hbWUsIDQpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0FMTE9XOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDY6CisgICAgc3dpdGNoIChuYW1lWzVdKSB7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoImNvb2tpIiwgbmFtZSwgNSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ09PS0lFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAncic6CisgICAgICBpZiAobWVtZXEoInNlcnZlIiwgbmFtZSwgNSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fU0VSVkVSOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAndCc6CisgICAgICBpZiAobWVtZXEoImFjY2VwIiwgbmFtZSwgNSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQUNDRVBUOworICAgICAgfQorICAgICAgaWYgKG1lbWVxKCJleHBlYyIsIG5hbWUsIDUpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0VYUEVDVDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSA3OgorICAgIHN3aXRjaCAobmFtZVs2XSkgeworICAgIGNhc2UgJ2QnOgorICAgICAgaWYgKG1lbWVxKCI6bWV0aG8iLCBuYW1lLCA2KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9fTUVUSE9EOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoIjpzY2hlbSIsIG5hbWUsIDYpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX19TQ0hFTUU7CisgICAgICB9CisgICAgICBpZiAobWVtZXEoInVwZ3JhZCIsIG5hbWUsIDYpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1VQR1JBREU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdoJzoKKyAgICAgIGlmIChtZW1lcSgicmVmcmVzIiwgbmFtZSwgNikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fUkVGUkVTSDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3InOgorICAgICAgaWYgKG1lbWVxKCJyZWZlcmUiLCBuYW1lLCA2KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9SRUZFUkVSOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAncyc6CisgICAgICBpZiAobWVtZXEoIjpzdGF0dSIsIG5hbWUsIDYpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX19TVEFUVVM7CisgICAgICB9CisgICAgICBpZiAobWVtZXEoImV4cGlyZSIsIG5hbWUsIDYpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0VYUElSRVM7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgODoKKyAgICBzd2l0Y2ggKG5hbWVbN10pIHsKKyAgICBjYXNlICdlJzoKKyAgICAgIGlmIChtZW1lcSgiaWYtcmFuZyIsIG5hbWUsIDcpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0lGX1JBTkdFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnaCc6CisgICAgICBpZiAobWVtZXEoImlmLW1hdGMiLCBuYW1lLCA3KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9JRl9NQVRDSDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ24nOgorICAgICAgaWYgKG1lbWVxKCJsb2NhdGlvIiwgbmFtZSwgNykpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fTE9DQVRJT047CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgOToKKyAgICBzd2l0Y2ggKG5hbWVbOF0pIHsKKyAgICBjYXNlICdsJzoKKyAgICAgIGlmIChtZW1lcSgiOnByb3RvY28iLCBuYW1lLCA4KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9fUFJPVE9DT0w7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMTA6CisgICAgc3dpdGNoIChuYW1lWzldKSB7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoImtlZXAtYWxpdiIsIG5hbWUsIDkpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0tFRVBfQUxJVkU7CisgICAgICB9CisgICAgICBpZiAobWVtZXEoInNldC1jb29raSIsIG5hbWUsIDkpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1NFVF9DT09LSUU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgIGlmIChtZW1lcSgiY29ubmVjdGlvIiwgbmFtZSwgOSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ09OTkVDVElPTjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3QnOgorICAgICAgaWYgKG1lbWVxKCJ1c2VyLWFnZW4iLCBuYW1lLCA5KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9VU0VSX0FHRU5UOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAneSc6CisgICAgICBpZiAobWVtZXEoIjphdXRob3JpdCIsIG5hbWUsIDkpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX19BVVRIT1JJVFk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMTE6CisgICAgc3dpdGNoIChuYW1lWzEwXSkgeworICAgIGNhc2UgJ3InOgorICAgICAgaWYgKG1lbWVxKCJyZXRyeS1hZnRlIiwgbmFtZSwgMTApKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1JFVFJZX0FGVEVSOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDEyOgorICAgIHN3aXRjaCAobmFtZVsxMV0pIHsKKyAgICBjYXNlICdlJzoKKyAgICAgIGlmIChtZW1lcSgiY29udGVudC10eXAiLCBuYW1lLCAxMSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9UWVBFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAncyc6CisgICAgICBpZiAobWVtZXEoIm1heC1mb3J3YXJkIiwgbmFtZSwgMTEpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX01BWF9GT1JXQVJEUzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSAxMzoKKyAgICBzd2l0Y2ggKG5hbWVbMTJdKSB7CisgICAgY2FzZSAnZCc6CisgICAgICBpZiAobWVtZXEoImxhc3QtbW9kaWZpZSIsIG5hbWUsIDEyKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9MQVNUX01PRElGSUVEOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoImNvbnRlbnQtcmFuZyIsIG5hbWUsIDEyKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9DT05URU5UX1JBTkdFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnaCc6CisgICAgICBpZiAobWVtZXEoImlmLW5vbmUtbWF0YyIsIG5hbWUsIDEyKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9JRl9OT05FX01BVENIOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnbCc6CisgICAgICBpZiAobWVtZXEoImNhY2hlLWNvbnRybyIsIG5hbWUsIDEyKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9DQUNIRV9DT05UUk9MOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICBpZiAobWVtZXEoImF1dGhvcml6YXRpbyIsIG5hbWUsIDEyKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9BVVRIT1JJWkFUSU9OOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAncyc6CisgICAgICBpZiAobWVtZXEoImFjY2VwdC1yYW5nZSIsIG5hbWUsIDEyKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9BQ0NFUFRfUkFOR0VTOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDE0OgorICAgIHN3aXRjaCAobmFtZVsxM10pIHsKKyAgICBjYXNlICdoJzoKKyAgICAgIGlmIChtZW1lcSgiY29udGVudC1sZW5ndCIsIG5hbWUsIDEzKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9DT05URU5UX0xFTkdUSDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3QnOgorICAgICAgaWYgKG1lbWVxKCJhY2NlcHQtY2hhcnNlIiwgbmFtZSwgMTMpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0FDQ0VQVF9DSEFSU0VUOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIDE1OgorICAgIHN3aXRjaCAobmFtZVsxNF0pIHsKKyAgICBjYXNlICdlJzoKKyAgICAgIGlmIChtZW1lcSgiYWNjZXB0LWxhbmd1YWciLCBuYW1lLCAxNCkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQUNDRVBUX0xBTkdVQUdFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnZyc6CisgICAgICBpZiAobWVtZXEoImFjY2VwdC1lbmNvZGluIiwgbmFtZSwgMTQpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0FDQ0VQVF9FTkNPRElORzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSAxNjoKKyAgICBzd2l0Y2ggKG5hbWVbMTVdKSB7CisgICAgY2FzZSAnZSc6CisgICAgICBpZiAobWVtZXEoImNvbnRlbnQtbGFuZ3VhZyIsIG5hbWUsIDE1KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9DT05URU5UX0xBTkdVQUdFOworICAgICAgfQorICAgICAgaWYgKG1lbWVxKCJ3d3ctYXV0aGVudGljYXQiLCBuYW1lLCAxNSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fV1dXX0FVVEhFTlRJQ0FURTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2cnOgorICAgICAgaWYgKG1lbWVxKCJjb250ZW50LWVuY29kaW4iLCBuYW1lLCAxNSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9FTkNPRElORzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ24nOgorICAgICAgaWYgKG1lbWVxKCJjb250ZW50LWxvY2F0aW8iLCBuYW1lLCAxNSkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9MT0NBVElPTjsKKyAgICAgIH0KKyAgICAgIGlmIChtZW1lcSgicHJveHktY29ubmVjdGlvIiwgbmFtZSwgMTUpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1BST1hZX0NPTk5FQ1RJT047CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMTc6CisgICAgc3dpdGNoIChuYW1lWzE2XSkgeworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJpZi1tb2RpZmllZC1zaW5jIiwgbmFtZSwgMTYpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0lGX01PRElGSUVEX1NJTkNFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnZyc6CisgICAgICBpZiAobWVtZXEoInRyYW5zZmVyLWVuY29kaW4iLCBuYW1lLCAxNikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fVFJBTlNGRVJfRU5DT0RJTkc7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMTg6CisgICAgc3dpdGNoIChuYW1lWzE3XSkgeworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJwcm94eS1hdXRoZW50aWNhdCIsIG5hbWUsIDE3KSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9UT0tFTl9QUk9YWV9BVVRIRU5USUNBVEU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMTk6CisgICAgc3dpdGNoIChuYW1lWzE4XSkgeworICAgIGNhc2UgJ2UnOgorICAgICAgaWYgKG1lbWVxKCJpZi11bm1vZGlmaWVkLXNpbmMiLCBuYW1lLCAxOCkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fSUZfVU5NT0RJRklFRF9TSU5DRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ24nOgorICAgICAgaWYgKG1lbWVxKCJjb250ZW50LWRpc3Bvc2l0aW8iLCBuYW1lLCAxOCkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9ESVNQT1NJVElPTjsKKyAgICAgIH0KKyAgICAgIGlmIChtZW1lcSgicHJveHktYXV0aG9yaXphdGlvIiwgbmFtZSwgMTgpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX1BST1hZX0FVVEhPUklaQVRJT047CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMjU6CisgICAgc3dpdGNoIChuYW1lWzI0XSkgeworICAgIGNhc2UgJ3knOgorICAgICAgaWYgKG1lbWVxKCJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXQiLCBuYW1lLCAyNCkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfVE9LRU5fU1RSSUNUX1RSQU5TUE9SVF9TRUNVUklUWTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSAyNzoKKyAgICBzd2l0Y2ggKG5hbWVbMjZdKSB7CisgICAgY2FzZSAnbic6CisgICAgICBpZiAobWVtZXEoImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpIiwgbmFtZSwgMjYpKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX1RPS0VOX0FDQ0VTU19DT05UUk9MX0FMTE9XX09SSUdJTjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgbmdodHRwMl9oZF9lbnRyeV9pbml0KG5naHR0cDJfaGRfZW50cnkgKmVudCwgbmdodHRwMl9oZF9udiAqbnYpIHsKKyAgZW50LT5udiA9ICpudjsKKyAgZW50LT5jbnYubmFtZSA9IG52LT5uYW1lLT5iYXNlOworICBlbnQtPmNudi5uYW1lbGVuID0gbnYtPm5hbWUtPmxlbjsKKyAgZW50LT5jbnYudmFsdWUgPSBudi0+dmFsdWUtPmJhc2U7CisgIGVudC0+Y252LnZhbHVlbGVuID0gbnYtPnZhbHVlLT5sZW47CisgIGVudC0+Y252LmZsYWdzID0gbnYtPmZsYWdzOworICBlbnQtPm5leHQgPSBOVUxMOworICBlbnQtPmhhc2ggPSAwOworCisgIG5naHR0cDJfcmNidWZfaW5jcmVmKGVudC0+bnYubmFtZSk7CisgIG5naHR0cDJfcmNidWZfaW5jcmVmKGVudC0+bnYudmFsdWUpOworfQorCit2b2lkIG5naHR0cDJfaGRfZW50cnlfZnJlZShuZ2h0dHAyX2hkX2VudHJ5ICplbnQpIHsKKyAgbmdodHRwMl9yY2J1Zl9kZWNyZWYoZW50LT5udi52YWx1ZSk7CisgIG5naHR0cDJfcmNidWZfZGVjcmVmKGVudC0+bnYubmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgbmFtZV9lcShjb25zdCBuZ2h0dHAyX2hkX252ICphLCBjb25zdCBuZ2h0dHAyX252ICpiKSB7CisgIHJldHVybiBhLT5uYW1lLT5sZW4gPT0gYi0+bmFtZWxlbiAmJgorICAgICAgICAgbWVtZXEoYS0+bmFtZS0+YmFzZSwgYi0+bmFtZSwgYi0+bmFtZWxlbik7Cit9CisKK3N0YXRpYyBpbnQgdmFsdWVfZXEoY29uc3QgbmdodHRwMl9oZF9udiAqYSwgY29uc3QgbmdodHRwMl9udiAqYikgeworICByZXR1cm4gYS0+dmFsdWUtPmxlbiA9PSBiLT52YWx1ZWxlbiAmJgorICAgICAgICAgbWVtZXEoYS0+dmFsdWUtPmJhc2UsIGItPnZhbHVlLCBiLT52YWx1ZWxlbik7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBuYW1lX2hhc2goY29uc3QgbmdodHRwMl9udiAqbnYpIHsKKyAgLyogMzIgYml0IEZOVi0xYTogaHR0cDovL2lzdGhlLmNvbS9jaG9uZ28vdGVjaC9jb21wL2Zudi8gKi8KKyAgdWludDMyX3QgaCA9IDIxNjYxMzYyNjF1OworICBzaXplX3QgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgbnYtPm5hbWVsZW47ICsraSkgeworICAgIGggXj0gbnYtPm5hbWVbaV07CisgICAgaCArPSAoaCA8PCAxKSArIChoIDw8IDQpICsgKGggPDwgNykgKyAoaCA8PCA4KSArIChoIDw8IDI0KTsKKyAgfQorCisgIHJldHVybiBoOworfQorCitzdGF0aWMgdm9pZCBoZF9tYXBfaW5pdChuZ2h0dHAyX2hkX21hcCAqbWFwKSB7CisgIG1lbXNldChtYXAsIDAsIHNpemVvZihuZ2h0dHAyX2hkX21hcCkpOworfQorCitzdGF0aWMgdm9pZCBoZF9tYXBfaW5zZXJ0KG5naHR0cDJfaGRfbWFwICptYXAsIG5naHR0cDJfaGRfZW50cnkgKmVudCkgeworICBuZ2h0dHAyX2hkX2VudHJ5ICoqYnVja2V0OworCisgIGJ1Y2tldCA9ICZtYXAtPnRhYmxlW2VudC0+aGFzaCAmIChIRF9NQVBfU0laRSAtIDEpXTsKKworICBpZiAoKmJ1Y2tldCA9PSBOVUxMKSB7CisgICAgKmJ1Y2tldCA9IGVudDsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBsb3dlciBpbmRleCBpcyBsaW5rZWQgbmVhciB0aGUgcm9vdCAqLworICBlbnQtPm5leHQgPSAqYnVja2V0OworICAqYnVja2V0ID0gZW50OworfQorCitzdGF0aWMgbmdodHRwMl9oZF9lbnRyeSAqaGRfbWFwX2ZpbmQobmdodHRwMl9oZF9tYXAgKm1hcCwgaW50ICpleGFjdF9tYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudiwgaW50MzJfdCB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoYXNoLCBpbnQgbmFtZV9vbmx5KSB7CisgIG5naHR0cDJfaGRfZW50cnkgKnA7CisgIG5naHR0cDJfaGRfZW50cnkgKnJlcyA9IE5VTEw7CisKKyAgKmV4YWN0X21hdGNoID0gMDsKKworICBmb3IgKHAgPSBtYXAtPnRhYmxlW2hhc2ggJiAoSERfTUFQX1NJWkUgLSAxKV07IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgaWYgKHRva2VuICE9IHAtPm52LnRva2VuIHx8CisgICAgICAgICh0b2tlbiA9PSAtMSAmJiAoaGFzaCAhPSBwLT5oYXNoIHx8ICFuYW1lX2VxKCZwLT5udiwgbnYpKSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoIXJlcykgeworICAgICAgcmVzID0gcDsKKyAgICAgIGlmIChuYW1lX29ubHkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGlmICh2YWx1ZV9lcSgmcC0+bnYsIG52KSkgeworICAgICAgcmVzID0gcDsKKyAgICAgICpleGFjdF9tYXRjaCA9IDE7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBoZF9tYXBfcmVtb3ZlKG5naHR0cDJfaGRfbWFwICptYXAsIG5naHR0cDJfaGRfZW50cnkgKmVudCkgeworICBuZ2h0dHAyX2hkX2VudHJ5ICoqZHN0OworCisgIGRzdCA9ICZtYXAtPnRhYmxlW2VudC0+aGFzaCAmIChIRF9NQVBfU0laRSAtIDEpXTsKKworICBmb3IgKDsgKmRzdDsgZHN0ID0gJigqZHN0KS0+bmV4dCkgeworICAgIGlmICgqZHN0ICE9IGVudCkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgKmRzdCA9IGVudC0+bmV4dDsKKyAgICBlbnQtPm5leHQgPSBOVUxMOworICAgIHJldHVybjsKKyAgfQorfQorCitzdGF0aWMgaW50IGhkX3JpbmdidWZfaW5pdChuZ2h0dHAyX2hkX3JpbmdidWYgKnJpbmdidWYsIHNpemVfdCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBzaXplX3Qgc2l6ZTsKKyAgZm9yIChzaXplID0gMTsgc2l6ZSA8IGJ1ZnNpemU7IHNpemUgPDw9IDEpCisgICAgOworICByaW5nYnVmLT5idWZmZXIgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9oZF9lbnRyeSAqKSAqIHNpemUpOworICBpZiAocmluZ2J1Zi0+YnVmZmVyID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKyAgcmluZ2J1Zi0+bWFzayA9IHNpemUgLSAxOworICByaW5nYnVmLT5maXJzdCA9IDA7CisgIHJpbmdidWYtPmxlbiA9IDA7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgbmdodHRwMl9oZF9lbnRyeSAqaGRfcmluZ2J1Zl9nZXQobmdodHRwMl9oZF9yaW5nYnVmICpyaW5nYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpZHgpIHsKKyAgYXNzZXJ0KGlkeCA8IHJpbmdidWYtPmxlbik7CisgIHJldHVybiByaW5nYnVmLT5idWZmZXJbKHJpbmdidWYtPmZpcnN0ICsgaWR4KSAmIHJpbmdidWYtPm1hc2tdOworfQorCitzdGF0aWMgaW50IGhkX3JpbmdidWZfcmVzZXJ2ZShuZ2h0dHAyX2hkX3JpbmdidWYgKnJpbmdidWYsIHNpemVfdCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBzaXplX3QgaTsKKyAgc2l6ZV90IHNpemU7CisgIG5naHR0cDJfaGRfZW50cnkgKipidWZmZXI7CisKKyAgaWYgKHJpbmdidWYtPm1hc2sgKyAxID49IGJ1ZnNpemUpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICBmb3IgKHNpemUgPSAxOyBzaXplIDwgYnVmc2l6ZTsgc2l6ZSA8PD0gMSkKKyAgICA7CisgIGJ1ZmZlciA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX2hkX2VudHJ5ICopICogc2l6ZSk7CisgIGlmIChidWZmZXIgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgcmluZ2J1Zi0+bGVuOyArK2kpIHsKKyAgICBidWZmZXJbaV0gPSBoZF9yaW5nYnVmX2dldChyaW5nYnVmLCBpKTsKKyAgfQorICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgcmluZ2J1Zi0+YnVmZmVyKTsKKyAgcmluZ2J1Zi0+YnVmZmVyID0gYnVmZmVyOworICByaW5nYnVmLT5tYXNrID0gc2l6ZSAtIDE7CisgIHJpbmdidWYtPmZpcnN0ID0gMDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhkX3JpbmdidWZfZnJlZShuZ2h0dHAyX2hkX3JpbmdidWYgKnJpbmdidWYsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgc2l6ZV90IGk7CisgIGlmIChyaW5nYnVmID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IHJpbmdidWYtPmxlbjsgKytpKSB7CisgICAgbmdodHRwMl9oZF9lbnRyeSAqZW50ID0gaGRfcmluZ2J1Zl9nZXQocmluZ2J1ZiwgaSk7CisKKyAgICBuZ2h0dHAyX2hkX2VudHJ5X2ZyZWUoZW50KTsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgZW50KTsKKyAgfQorICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgcmluZ2J1Zi0+YnVmZmVyKTsKK30KKworc3RhdGljIGludCBoZF9yaW5nYnVmX3B1c2hfZnJvbnQobmdodHRwMl9oZF9yaW5nYnVmICpyaW5nYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9oZF9lbnRyeSAqZW50LCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIGludCBydjsKKworICBydiA9IGhkX3JpbmdidWZfcmVzZXJ2ZShyaW5nYnVmLCByaW5nYnVmLT5sZW4gKyAxLCBtZW0pOworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmluZ2J1Zi0+YnVmZmVyWy0tcmluZ2J1Zi0+Zmlyc3QgJiByaW5nYnVmLT5tYXNrXSA9IGVudDsKKyAgKytyaW5nYnVmLT5sZW47CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhkX3JpbmdidWZfcG9wX2JhY2sobmdodHRwMl9oZF9yaW5nYnVmICpyaW5nYnVmKSB7CisgIGFzc2VydChyaW5nYnVmLT5sZW4gPiAwKTsKKyAgLS1yaW5nYnVmLT5sZW47Cit9CisKK3N0YXRpYyBpbnQgaGRfY29udGV4dF9pbml0KG5naHR0cDJfaGRfY29udGV4dCAqY29udGV4dCwgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisgIGNvbnRleHQtPm1lbSA9IG1lbTsKKyAgY29udGV4dC0+YmFkID0gMDsKKyAgY29udGV4dC0+aGRfdGFibGVfYnVmc2l6ZV9tYXggPSBOR0hUVFAyX0hEX0RFRkFVTFRfTUFYX0JVRkZFUl9TSVpFOworICBydiA9IGhkX3JpbmdidWZfaW5pdCgKKyAgICAgICZjb250ZXh0LT5oZF90YWJsZSwKKyAgICAgIGNvbnRleHQtPmhkX3RhYmxlX2J1ZnNpemVfbWF4IC8gTkdIVFRQMl9IRF9FTlRSWV9PVkVSSEVBRCwgbWVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBjb250ZXh0LT5oZF90YWJsZV9idWZzaXplID0gMDsKKyAgY29udGV4dC0+bmV4dF9zZXEgPSAwOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoZF9jb250ZXh0X2ZyZWUobmdodHRwMl9oZF9jb250ZXh0ICpjb250ZXh0KSB7CisgIGhkX3JpbmdidWZfZnJlZSgmY29udGV4dC0+aGRfdGFibGUsIGNvbnRleHQtPm1lbSk7Cit9CisKK2ludCBuZ2h0dHAyX2hkX2RlZmxhdGVfaW5pdChuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwgbmdodHRwMl9tZW0gKm1lbSkgeworICByZXR1cm4gbmdodHRwMl9oZF9kZWZsYXRlX2luaXQyKAorICAgICAgZGVmbGF0ZXIsIE5HSFRUUDJfSERfREVGQVVMVF9NQVhfREVGTEFURV9CVUZGRVJfU0laRSwgbWVtKTsKK30KKworaW50IG5naHR0cDJfaGRfZGVmbGF0ZV9pbml0MihuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisgIHJ2ID0gaGRfY29udGV4dF9pbml0KCZkZWZsYXRlci0+Y3R4LCBtZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIGhkX21hcF9pbml0KCZkZWZsYXRlci0+bWFwKTsKKworICBpZiAobWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplIDwgTkdIVFRQMl9IRF9ERUZBVUxUX01BWF9CVUZGRVJfU0laRSkgeworICAgIGRlZmxhdGVyLT5ub3RpZnlfdGFibGVfc2l6ZV9jaGFuZ2UgPSAxOworICAgIGRlZmxhdGVyLT5jdHguaGRfdGFibGVfYnVmc2l6ZV9tYXggPSBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemU7CisgIH0gZWxzZSB7CisgICAgZGVmbGF0ZXItPm5vdGlmeV90YWJsZV9zaXplX2NoYW5nZSA9IDA7CisgIH0KKworICBkZWZsYXRlci0+ZGVmbGF0ZV9oZF90YWJsZV9idWZzaXplX21heCA9IG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZTsKKyAgZGVmbGF0ZXItPm1pbl9oZF90YWJsZV9idWZzaXplX21heCA9IFVJTlQzMl9NQVg7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2hkX2luZmxhdGVfaW5pdChuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisKKyAgcnYgPSBoZF9jb250ZXh0X2luaXQoJmluZmxhdGVyLT5jdHgsIG1lbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgZ290byBmYWlsOworICB9CisKKyAgaW5mbGF0ZXItPnNldHRpbmdzX2hkX3RhYmxlX2J1ZnNpemVfbWF4ID0gTkdIVFRQMl9IRF9ERUZBVUxUX01BWF9CVUZGRVJfU0laRTsKKyAgaW5mbGF0ZXItPm1pbl9oZF90YWJsZV9idWZzaXplX21heCA9IFVJTlQzMl9NQVg7CisKKyAgaW5mbGF0ZXItPm52X25hbWVfa2VlcCA9IE5VTEw7CisgIGluZmxhdGVyLT5udl92YWx1ZV9rZWVwID0gTlVMTDsKKworICBpbmZsYXRlci0+b3Bjb2RlID0gTkdIVFRQMl9IRF9PUENPREVfTk9ORTsKKyAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9JTkZMQVRFX1NUQVJUOworCisgIG5naHR0cDJfYnVmX2luaXQoJmluZmxhdGVyLT5uYW1lYnVmKTsKKyAgbmdodHRwMl9idWZfaW5pdCgmaW5mbGF0ZXItPnZhbHVlYnVmKTsKKworICBpbmZsYXRlci0+bmFtZXJjYnVmID0gTlVMTDsKKyAgaW5mbGF0ZXItPnZhbHVlcmNidWYgPSBOVUxMOworCisgIGluZmxhdGVyLT5odWZmbWFuX2VuY29kZWQgPSAwOworICBpbmZsYXRlci0+aW5kZXggPSAwOworICBpbmZsYXRlci0+bGVmdCA9IDA7CisgIGluZmxhdGVyLT5zaGlmdCA9IDA7CisgIGluZmxhdGVyLT5pbmRleF9yZXF1aXJlZCA9IDA7CisgIGluZmxhdGVyLT5ub19pbmRleCA9IDA7CisKKyAgcmV0dXJuIDA7CisKK2ZhaWw6CisgIHJldHVybiBydjsKK30KKworc3RhdGljIHZvaWQgaGRfaW5mbGF0ZV9rZWVwX2ZyZWUobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIpIHsKKyAgbmdodHRwMl9yY2J1Zl9kZWNyZWYoaW5mbGF0ZXItPm52X3ZhbHVlX2tlZXApOworICBuZ2h0dHAyX3JjYnVmX2RlY3JlZihpbmZsYXRlci0+bnZfbmFtZV9rZWVwKTsKKworICBpbmZsYXRlci0+bnZfdmFsdWVfa2VlcCA9IE5VTEw7CisgIGluZmxhdGVyLT5udl9uYW1lX2tlZXAgPSBOVUxMOworfQorCit2b2lkIG5naHR0cDJfaGRfZGVmbGF0ZV9mcmVlKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKSB7CisgIGhkX2NvbnRleHRfZnJlZSgmZGVmbGF0ZXItPmN0eCk7Cit9CisKK3ZvaWQgbmdodHRwMl9oZF9pbmZsYXRlX2ZyZWUobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIpIHsKKyAgaGRfaW5mbGF0ZV9rZWVwX2ZyZWUoaW5mbGF0ZXIpOworCisgIG5naHR0cDJfcmNidWZfZGVjcmVmKGluZmxhdGVyLT52YWx1ZXJjYnVmKTsKKyAgbmdodHRwMl9yY2J1Zl9kZWNyZWYoaW5mbGF0ZXItPm5hbWVyY2J1Zik7CisKKyAgaGRfY29udGV4dF9mcmVlKCZpbmZsYXRlci0+Y3R4KTsKK30KKworc3RhdGljIHNpemVfdCBlbnRyeV9yb29tKHNpemVfdCBuYW1lbGVuLCBzaXplX3QgdmFsdWVsZW4pIHsKKyAgcmV0dXJuIE5HSFRUUDJfSERfRU5UUllfT1ZFUkhFQUQgKyBuYW1lbGVuICsgdmFsdWVsZW47Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfaGVhZGVyKG5naHR0cDJfaGRfbnYgKm52X291dCwgbmdodHRwMl9oZF9udiAqbnYpIHsKKyAgREVCVUdGKCJpbmZsYXRlaGQ6IGhlYWRlciBlbWlzc2lvbjogJXM6ICVzXG4iLCBudi0+bmFtZS0+YmFzZSwKKyAgICAgICAgIG52LT52YWx1ZS0+YmFzZSk7CisgIC8qIGVudC0+cmVmIG1heSBiZSAwLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGVuY29kZXIgZW1pdHMgbGl0ZXJhbAorICAgICBibG9jayBsYXJnZXIgdGhhbiBoZWFkZXIgdGFibGUgY2FwYWNpdHkgd2l0aCBpbmRleGluZy4gKi8KKyAgKm52X291dCA9ICpudjsKK30KKworc3RhdGljIHNpemVfdCBjb3VudF9lbmNvZGVkX2xlbmd0aChzaXplX3Qgbiwgc2l6ZV90IHByZWZpeCkgeworICBzaXplX3QgayA9IChzaXplX3QpKCgxIDw8IHByZWZpeCkgLSAxKTsKKyAgc2l6ZV90IGxlbiA9IDA7CisKKyAgaWYgKG4gPCBrKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBuIC09IGs7CisgICsrbGVuOworCisgIGZvciAoOyBuID49IDEyODsgbiA+Pj0gNywgKytsZW4pCisgICAgOworCisgIHJldHVybiBsZW4gKyAxOworfQorCitzdGF0aWMgc2l6ZV90IGVuY29kZV9sZW5ndGgodWludDhfdCAqYnVmLCBzaXplX3Qgbiwgc2l6ZV90IHByZWZpeCkgeworICBzaXplX3QgayA9IChzaXplX3QpKCgxIDw8IHByZWZpeCkgLSAxKTsKKyAgdWludDhfdCAqYmVnaW4gPSBidWY7CisKKyAgKmJ1ZiA9ICh1aW50OF90KSgqYnVmICYgfmspOworCisgIGlmIChuIDwgaykgeworICAgICpidWYgPSAodWludDhfdCkoKmJ1ZiB8IG4pOworICAgIHJldHVybiAxOworICB9CisKKyAgKmJ1ZiA9ICh1aW50OF90KSgqYnVmIHwgayk7CisgICsrYnVmOworCisgIG4gLT0gazsKKworICBmb3IgKDsgbiA+PSAxMjg7IG4gPj49IDcpIHsKKyAgICAqYnVmKysgPSAodWludDhfdCkoKDEgPDwgNykgfCAobiAmIDB4N2YpKTsKKyAgfQorCisgICpidWYrKyA9ICh1aW50OF90KW47CisKKyAgcmV0dXJuIChzaXplX3QpKGJ1ZiAtIGJlZ2luKTsKK30KKworLyoKKyAqIERlY29kZXMgfHByZWZpeHwgcHJlZml4ZWQgaW50ZWdlciBzdG9yZWQgZnJvbSB8aW58LiAgVGhlIHxsYXN0fAorICogcmVwcmVzZW50cyB0aGUgMSBiZXlvbmQgdGhlIGxhc3Qgb2YgdGhlIHZhbGlkIGNvbnRpZ3VvdXMgbWVtb3J5CisgKiByZWdpb24gZnJvbSB8aW58LiAgVGhlIGRlY29kZWQgaW50ZWdlciBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbAorICogdG8gVUlOVDMyX01BWC4KKyAqCisgKiBJZiB0aGUgfGluaXRpYWx8IGlzIG5vbnplcm8sIGl0IGlzIHVzZWQgYXMgYSBpbml0aWFsIHZhbHVlLCB0aGlzCisgKiBmdW5jdGlvbiBhc3N1bWVzIHRoZSB8aW58IHN0YXJ0cyB3aXRoIGludGVybWVkaWF0ZSBkYXRhLgorICoKKyAqIEFuIGVudGlyZSBpbnRlZ2VyIGlzIGRlY29kZWQgc3VjY2Vzc2Z1bGx5LCBkZWNvZGVkLCB0aGUgfCpmaW58IGlzCisgKiBzZXQgdG8gbm9uemVyby4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN0b3JlcyB0aGUgZGVjb2RlZCBpbnRlZ2VyIGluIHwqcmVzfCBpZiBpdCBzdWNjZWVkLAorICogaW5jbHVkaW5nIHBhcnRpYWwgZGVjb2RpbmcgKGluIHRoaXMgY2FzZSwgbnVtYmVyIG9mIHNoaWZ0IHRvIG1ha2UKKyAqIGluIHRoZSBuZXh0IGNhbGwgd2lsbCBiZSBzdG9yZWQgaW4gfCpzaGlmdF9wdHJ8KSBhbmQgcmV0dXJucyBudW1iZXIKKyAqIG9mIGJ5dGVzIHByb2Nlc3NlZCwgb3IgcmV0dXJucyAtMSwgaW5kaWNhdGluZyBkZWNvZGluZyBlcnJvci4KKyAqLworc3RhdGljIHNzaXplX3QgZGVjb2RlX2xlbmd0aCh1aW50MzJfdCAqcmVzLCBzaXplX3QgKnNoaWZ0X3B0ciwgaW50ICpmaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluaXRpYWwsIHNpemVfdCBzaGlmdCwgY29uc3QgdWludDhfdCAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmxhc3QsIHNpemVfdCBwcmVmaXgpIHsKKyAgdWludDMyX3QgayA9ICh1aW50OF90KSgoMSA8PCBwcmVmaXgpIC0gMSk7CisgIHVpbnQzMl90IG4gPSBpbml0aWFsOworICBjb25zdCB1aW50OF90ICpzdGFydCA9IGluOworCisgICpzaGlmdF9wdHIgPSAwOworICAqZmluID0gMDsKKworICBpZiAobiA9PSAwKSB7CisgICAgaWYgKCgqaW4gJiBrKSAhPSBrKSB7CisgICAgICAqcmVzID0gKCppbikgJiBrOworICAgICAgKmZpbiA9IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBuID0gazsKKworICAgIGlmICgrK2luID09IGxhc3QpIHsKKyAgICAgICpyZXMgPSBuOworICAgICAgcmV0dXJuIChzc2l6ZV90KShpbiAtIHN0YXJ0KTsKKyAgICB9CisgIH0KKworICBmb3IgKDsgaW4gIT0gbGFzdDsgKytpbiwgc2hpZnQgKz0gNykgeworICAgIHVpbnQzMl90IGFkZCA9ICppbiAmIDB4N2Y7CisKKyAgICBpZiAoc2hpZnQgPj0gMzIpIHsKKyAgICAgIERFQlVHRigiaW5mbGF0ZTogc2hpZnQgZXhwb25lbnQgb3ZlcmZsb3dcbiIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgoVUlOVDMyX01BWCA+PiBzaGlmdCkgPCBhZGQpIHsKKyAgICAgIERFQlVHRigiaW5mbGF0ZTogaW50ZWdlciBvdmVyZmxvdyBvbiBzaGlmdFxuIik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgYWRkIDw8PSBzaGlmdDsKKworICAgIGlmIChVSU5UMzJfTUFYIC0gYWRkIDwgbikgeworICAgICAgREVCVUdGKCJpbmZsYXRlOiBpbnRlZ2VyIG92ZXJmbG93IG9uIGFkZGl0aW9uXG4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBuICs9IGFkZDsKKworICAgIGlmICgoKmluICYgKDEgPDwgNykpID09IDApIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgICpzaGlmdF9wdHIgPSBzaGlmdDsKKworICBpZiAoaW4gPT0gbGFzdCkgeworICAgICpyZXMgPSBuOworICAgIHJldHVybiAoc3NpemVfdCkoaW4gLSBzdGFydCk7CisgIH0KKworICAqcmVzID0gbjsKKyAgKmZpbiA9IDE7CisgIHJldHVybiAoc3NpemVfdCkoaW4gKyAxIC0gc3RhcnQpOworfQorCitzdGF0aWMgaW50IGVtaXRfdGFibGVfc2l6ZShuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIHNpemVfdCB0YWJsZV9zaXplKSB7CisgIGludCBydjsKKyAgdWludDhfdCAqYnVmcDsKKyAgc2l6ZV90IGJsb2NrbGVuOworICB1aW50OF90IHNiWzE2XTsKKworICBERUJVR0YoImRlZmxhdGVoZDogZW1pdCB0YWJsZV9zaXplPSV6dVxuIiwgdGFibGVfc2l6ZSk7CisKKyAgYmxvY2tsZW4gPSBjb3VudF9lbmNvZGVkX2xlbmd0aCh0YWJsZV9zaXplLCA1KTsKKworICBpZiAoc2l6ZW9mKHNiKSA8IGJsb2NrbGVuKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICB9CisKKyAgYnVmcCA9IHNiOworCisgICpidWZwID0gMHgyMHU7CisKKyAgZW5jb2RlX2xlbmd0aChidWZwLCB0YWJsZV9zaXplLCA1KTsKKworICBydiA9IG5naHR0cDJfYnVmc19hZGQoYnVmcywgc2IsIGJsb2NrbGVuKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbWl0X2luZGV4ZWRfYmxvY2sobmdodHRwMl9idWZzICpidWZzLCBzaXplX3QgaWR4KSB7CisgIGludCBydjsKKyAgc2l6ZV90IGJsb2NrbGVuOworICB1aW50OF90IHNiWzE2XTsKKyAgdWludDhfdCAqYnVmcDsKKworICBibG9ja2xlbiA9IGNvdW50X2VuY29kZWRfbGVuZ3RoKGlkeCArIDEsIDcpOworCisgIERFQlVHRigiZGVmbGF0ZWhkOiBlbWl0IGluZGV4ZWQgaW5kZXg9JXp1LCAlenUgYnl0ZXNcbiIsIGlkeCwgYmxvY2tsZW4pOworCisgIGlmIChzaXplb2Yoc2IpIDwgYmxvY2tsZW4pIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgIH0KKworICBidWZwID0gc2I7CisgICpidWZwID0gMHg4MHU7CisgIGVuY29kZV9sZW5ndGgoYnVmcCwgaWR4ICsgMSwgNyk7CisKKyAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkKGJ1ZnMsIHNiLCBibG9ja2xlbik7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW1pdF9zdHJpbmcobmdodHRwMl9idWZzICpidWZzLCBjb25zdCB1aW50OF90ICpzdHIsIHNpemVfdCBsZW4pIHsKKyAgaW50IHJ2OworICB1aW50OF90IHNiWzE2XTsKKyAgdWludDhfdCAqYnVmcDsKKyAgc2l6ZV90IGJsb2NrbGVuOworICBzaXplX3QgZW5jbGVuOworICBpbnQgaHVmZm1hbiA9IDA7CisKKyAgZW5jbGVuID0gbmdodHRwMl9oZF9odWZmX2VuY29kZV9jb3VudChzdHIsIGxlbik7CisKKyAgaWYgKGVuY2xlbiA8IGxlbikgeworICAgIGh1ZmZtYW4gPSAxOworICB9IGVsc2UgeworICAgIGVuY2xlbiA9IGxlbjsKKyAgfQorCisgIGJsb2NrbGVuID0gY291bnRfZW5jb2RlZF9sZW5ndGgoZW5jbGVuLCA3KTsKKworICBERUJVR0YoImRlZmxhdGVoZDogZW1pdCBzdHJpbmcgc3RyPSUuKnMsIGxlbmd0aD0lenUsIGh1ZmZtYW49JWQsICIKKyAgICAgICAgICJlbmNvZGVkX2xlbmd0aD0lenVcbiIsCisgICAgICAgICAoaW50KWxlbiwgKGNvbnN0IGNoYXIgKilzdHIsIGxlbiwgaHVmZm1hbiwgZW5jbGVuKTsKKworICBpZiAoc2l6ZW9mKHNiKSA8IGJsb2NrbGVuKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICB9CisKKyAgYnVmcCA9IHNiOworICAqYnVmcCA9IGh1ZmZtYW4gPyAxIDw8IDcgOiAwOworICBlbmNvZGVfbGVuZ3RoKGJ1ZnAsIGVuY2xlbiwgNyk7CisKKyAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkKGJ1ZnMsIHNiLCBibG9ja2xlbik7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgaWYgKGh1ZmZtYW4pIHsKKyAgICBydiA9IG5naHR0cDJfaGRfaHVmZl9lbmNvZGUoYnVmcywgc3RyLCBsZW4pOworICB9IGVsc2UgeworICAgIGFzc2VydChlbmNsZW4gPT0gbGVuKTsKKyAgICBydiA9IG5naHR0cDJfYnVmc19hZGQoYnVmcywgc3RyLCBsZW4pOworICB9CisKKyAgcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdWludDhfdCBwYWNrX2ZpcnN0X2J5dGUoaW50IGluZGV4aW5nX21vZGUpIHsKKyAgc3dpdGNoIChpbmRleGluZ19tb2RlKSB7CisgIGNhc2UgTkdIVFRQMl9IRF9XSVRIX0lOREVYSU5HOgorICAgIHJldHVybiAweDQwdTsKKyAgY2FzZSBOR0hUVFAyX0hEX1dJVEhPVVRfSU5ERVhJTkc6CisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9IRF9ORVZFUl9JTkRFWElORzoKKyAgICByZXR1cm4gMHgxMHU7CisgIGRlZmF1bHQ6CisgICAgYXNzZXJ0KDApOworICB9CisgIC8qIFRoaXMgaXMgcmVxdWlyZWQgdG8gY29tcGlsZSB3aXRoIGFuZHJvaWQgTkRLIHIxMGQgKworICAgICAtLWVuYWJsZS13ZXJyb3IgKi8KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW1pdF9pbmRuYW1lX2Jsb2NrKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52LCBpbnQgaW5kZXhpbmdfbW9kZSkgeworICBpbnQgcnY7CisgIHVpbnQ4X3QgKmJ1ZnA7CisgIHNpemVfdCBibG9ja2xlbjsKKyAgdWludDhfdCBzYlsxNl07CisgIHNpemVfdCBwcmVmaXhsZW47CisKKyAgaWYgKGluZGV4aW5nX21vZGUgPT0gTkdIVFRQMl9IRF9XSVRIX0lOREVYSU5HKSB7CisgICAgcHJlZml4bGVuID0gNjsKKyAgfSBlbHNlIHsKKyAgICBwcmVmaXhsZW4gPSA0OworICB9CisKKyAgREVCVUdGKCJkZWZsYXRlaGQ6IGVtaXQgaW5kbmFtZSBpbmRleD0lenUsIHZhbHVlbGVuPSV6dSwgaW5kZXhpbmdfbW9kZT0lZFxuIiwKKyAgICAgICAgIGlkeCwgbnYtPnZhbHVlbGVuLCBpbmRleGluZ19tb2RlKTsKKworICBibG9ja2xlbiA9IGNvdW50X2VuY29kZWRfbGVuZ3RoKGlkeCArIDEsIHByZWZpeGxlbik7CisKKyAgaWYgKHNpemVvZihzYikgPCBibG9ja2xlbikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgfQorCisgIGJ1ZnAgPSBzYjsKKworICAqYnVmcCA9IHBhY2tfZmlyc3RfYnl0ZShpbmRleGluZ19tb2RlKTsKKworICBlbmNvZGVfbGVuZ3RoKGJ1ZnAsIGlkeCArIDEsIHByZWZpeGxlbik7CisKKyAgcnYgPSBuZ2h0dHAyX2J1ZnNfYWRkKGJ1ZnMsIHNiLCBibG9ja2xlbik7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcnYgPSBlbWl0X3N0cmluZyhidWZzLCBudi0+dmFsdWUsIG52LT52YWx1ZWxlbik7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW1pdF9uZXduYW1lX2Jsb2NrKG5naHR0cDJfYnVmcyAqYnVmcywgY29uc3QgbmdodHRwMl9udiAqbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXhpbmdfbW9kZSkgeworICBpbnQgcnY7CisKKyAgREVCVUdGKAorICAgICAgImRlZmxhdGVoZDogZW1pdCBuZXduYW1lIG5hbWVsZW49JXp1LCB2YWx1ZWxlbj0lenUsIGluZGV4aW5nX21vZGU9JWRcbiIsCisgICAgICBudi0+bmFtZWxlbiwgbnYtPnZhbHVlbGVuLCBpbmRleGluZ19tb2RlKTsKKworICBydiA9IG5naHR0cDJfYnVmc19hZGRiKGJ1ZnMsIHBhY2tfZmlyc3RfYnl0ZShpbmRleGluZ19tb2RlKSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcnYgPSBlbWl0X3N0cmluZyhidWZzLCBudi0+bmFtZSwgbnYtPm5hbWVsZW4pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJ2ID0gZW1pdF9zdHJpbmcoYnVmcywgbnYtPnZhbHVlLCBudi0+dmFsdWVsZW4pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9oZF90YWJsZV9pbmNyZW1lbnRhbChuZ2h0dHAyX2hkX2NvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX252ICpudiwgbmdodHRwMl9oZF9tYXAgKm1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhhc2gpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2hkX2VudHJ5ICpuZXdfZW50OworICBzaXplX3Qgcm9vbTsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSBjb250ZXh0LT5tZW07CisgIHJvb20gPSBlbnRyeV9yb29tKG52LT5uYW1lLT5sZW4sIG52LT52YWx1ZS0+bGVuKTsKKworICB3aGlsZSAoY29udGV4dC0+aGRfdGFibGVfYnVmc2l6ZSArIHJvb20gPiBjb250ZXh0LT5oZF90YWJsZV9idWZzaXplX21heCAmJgorICAgICAgICAgY29udGV4dC0+aGRfdGFibGUubGVuID4gMCkgeworCisgICAgc2l6ZV90IGlkeCA9IGNvbnRleHQtPmhkX3RhYmxlLmxlbiAtIDE7CisgICAgbmdodHRwMl9oZF9lbnRyeSAqZW50ID0gaGRfcmluZ2J1Zl9nZXQoJmNvbnRleHQtPmhkX3RhYmxlLCBpZHgpOworCisgICAgY29udGV4dC0+aGRfdGFibGVfYnVmc2l6ZSAtPQorICAgICAgICBlbnRyeV9yb29tKGVudC0+bnYubmFtZS0+bGVuLCBlbnQtPm52LnZhbHVlLT5sZW4pOworCisgICAgREVCVUdGKCJocGFjazogcmVtb3ZlIGl0ZW0gZnJvbSBoZWFkZXIgdGFibGU6ICVzOiAlc1xuIiwKKyAgICAgICAgICAgKGNoYXIgKillbnQtPm52Lm5hbWUtPmJhc2UsIChjaGFyICopZW50LT5udi52YWx1ZS0+YmFzZSk7CisKKyAgICBoZF9yaW5nYnVmX3BvcF9iYWNrKCZjb250ZXh0LT5oZF90YWJsZSk7CisgICAgaWYgKG1hcCkgeworICAgICAgaGRfbWFwX3JlbW92ZShtYXAsIGVudCk7CisgICAgfQorCisgICAgbmdodHRwMl9oZF9lbnRyeV9mcmVlKGVudCk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGVudCk7CisgIH0KKworICBpZiAocm9vbSA+IGNvbnRleHQtPmhkX3RhYmxlX2J1ZnNpemVfbWF4KSB7CisgICAgLyogVGhlIGVudHJ5IHRha2luZyBtb3JlIHRoYW4gTkdIVFRQMl9IRF9NQVhfQlVGRkVSX1NJWkUgaXMKKyAgICAgICBpbW1lZGlhdGVseSBldmljdGVkLiAgU28gd2UgZG9uJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpdC4gKi8KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIG5ld19lbnQgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9oZF9lbnRyeSkpOworICBpZiAobmV3X2VudCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgbmdodHRwMl9oZF9lbnRyeV9pbml0KG5ld19lbnQsIG52KTsKKworICBydiA9IGhkX3JpbmdidWZfcHVzaF9mcm9udCgmY29udGV4dC0+aGRfdGFibGUsIG5ld19lbnQsIG1lbSk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2hkX2VudHJ5X2ZyZWUobmV3X2VudCk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIG5ld19lbnQpOworCisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgbmV3X2VudC0+c2VxID0gY29udGV4dC0+bmV4dF9zZXErKzsKKyAgbmV3X2VudC0+aGFzaCA9IGhhc2g7CisKKyAgaWYgKG1hcCkgeworICAgIGhkX21hcF9pbnNlcnQobWFwLCBuZXdfZW50KTsKKyAgfQorCisgIGNvbnRleHQtPmhkX3RhYmxlX2J1ZnNpemUgKz0gcm9vbTsKKworICByZXR1cm4gMDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzc2l6ZV90IGluZGV4OworICAvKiBOb256ZXJvIGlmIGJvdGggbmFtZSBhbmQgdmFsdWUgYXJlIG1hdGNoZWQuICovCisgIGludCBuYW1lX3ZhbHVlX21hdGNoOworfSBzZWFyY2hfcmVzdWx0OworCitzdGF0aWMgc2VhcmNoX3Jlc3VsdCBzZWFyY2hfc3RhdGljX3RhYmxlKGNvbnN0IG5naHR0cDJfbnYgKm52LCBpbnQzMl90IHRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmFtZV9vbmx5KSB7CisgIHNlYXJjaF9yZXN1bHQgcmVzID0ge3Rva2VuLCAwfTsKKyAgaW50IGk7CisgIGNvbnN0IG5naHR0cDJfaGRfc3RhdGljX2VudHJ5ICplbnQ7CisKKyAgaWYgKG5hbWVfb25seSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICBmb3IgKGkgPSB0b2tlbjsKKyAgICAgICBpIDw9IE5HSFRUUDJfVE9LRU5fV1dXX0FVVEhFTlRJQ0FURSAmJiBzdGF0aWNfdGFibGVbaV0udG9rZW4gPT0gdG9rZW47CisgICAgICAgKytpKSB7CisgICAgZW50ID0gJnN0YXRpY190YWJsZVtpXTsKKyAgICBpZiAoZW50LT52YWx1ZS5sZW4gPT0gbnYtPnZhbHVlbGVuICYmCisgICAgICAgIG1lbWNtcChlbnQtPnZhbHVlLmJhc2UsIG52LT52YWx1ZSwgbnYtPnZhbHVlbGVuKSA9PSAwKSB7CisgICAgICByZXMuaW5kZXggPSBpOworICAgICAgcmVzLm5hbWVfdmFsdWVfbWF0Y2ggPSAxOworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHNlYXJjaF9yZXN1bHQgc2VhcmNoX2hkX3RhYmxlKG5naHR0cDJfaGRfY29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudiwgaW50MzJfdCB0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXhpbmdfbW9kZSwgbmdodHRwMl9oZF9tYXAgKm1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoYXNoKSB7CisgIHNlYXJjaF9yZXN1bHQgcmVzID0gey0xLCAwfTsKKyAgY29uc3QgbmdodHRwMl9oZF9lbnRyeSAqZW50OworICBpbnQgZXhhY3RfbWF0Y2g7CisgIGludCBuYW1lX29ubHkgPSBpbmRleGluZ19tb2RlID09IE5HSFRUUDJfSERfTkVWRVJfSU5ERVhJTkc7CisKKyAgZXhhY3RfbWF0Y2ggPSAwOworICBlbnQgPSBoZF9tYXBfZmluZChtYXAsICZleGFjdF9tYXRjaCwgbnYsIHRva2VuLCBoYXNoLCBuYW1lX29ubHkpOworCisgIGlmICghZXhhY3RfbWF0Y2ggJiYgdG9rZW4gPj0gMCAmJiB0b2tlbiA8PSBOR0hUVFAyX1RPS0VOX1dXV19BVVRIRU5USUNBVEUpIHsKKyAgICByZXR1cm4gc2VhcmNoX3N0YXRpY190YWJsZShudiwgdG9rZW4sIG5hbWVfb25seSk7CisgIH0KKworICBpZiAoZW50ID09IE5VTEwpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgcmVzLmluZGV4ID0KKyAgICAgIChzc2l6ZV90KShjb250ZXh0LT5uZXh0X3NlcSAtIDEgLSBlbnQtPnNlcSArIE5HSFRUUDJfU1RBVElDX1RBQkxFX0xFTkdUSCk7CisgIHJlcy5uYW1lX3ZhbHVlX21hdGNoID0gZXhhY3RfbWF0Y2g7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgaGRfY29udGV4dF9zaHJpbmtfdGFibGVfc2l6ZShuZ2h0dHAyX2hkX2NvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfbWFwICptYXApIHsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSBjb250ZXh0LT5tZW07CisKKyAgd2hpbGUgKGNvbnRleHQtPmhkX3RhYmxlX2J1ZnNpemUgPiBjb250ZXh0LT5oZF90YWJsZV9idWZzaXplX21heCAmJgorICAgICAgICAgY29udGV4dC0+aGRfdGFibGUubGVuID4gMCkgeworICAgIHNpemVfdCBpZHggPSBjb250ZXh0LT5oZF90YWJsZS5sZW4gLSAxOworICAgIG5naHR0cDJfaGRfZW50cnkgKmVudCA9IGhkX3JpbmdidWZfZ2V0KCZjb250ZXh0LT5oZF90YWJsZSwgaWR4KTsKKyAgICBjb250ZXh0LT5oZF90YWJsZV9idWZzaXplIC09CisgICAgICAgIGVudHJ5X3Jvb20oZW50LT5udi5uYW1lLT5sZW4sIGVudC0+bnYudmFsdWUtPmxlbik7CisgICAgaGRfcmluZ2J1Zl9wb3BfYmFjaygmY29udGV4dC0+aGRfdGFibGUpOworICAgIGlmIChtYXApIHsKKyAgICAgIGhkX21hcF9yZW1vdmUobWFwLCBlbnQpOworICAgIH0KKworICAgIG5naHR0cDJfaGRfZW50cnlfZnJlZShlbnQpOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBlbnQpOworICB9Cit9CisKK2ludCBuZ2h0dHAyX2hkX2RlZmxhdGVfY2hhbmdlX3RhYmxlX3NpemUoCisgICAgbmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsIHNpemVfdCBzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplKSB7CisgIHNpemVfdCBuZXh0X2J1ZnNpemUgPSBuZ2h0dHAyX21pbihzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbGF0ZXItPmRlZmxhdGVfaGRfdGFibGVfYnVmc2l6ZV9tYXgpOworCisgIGRlZmxhdGVyLT5jdHguaGRfdGFibGVfYnVmc2l6ZV9tYXggPSBuZXh0X2J1ZnNpemU7CisKKyAgZGVmbGF0ZXItPm1pbl9oZF90YWJsZV9idWZzaXplX21heCA9CisgICAgICBuZ2h0dHAyX21pbihkZWZsYXRlci0+bWluX2hkX3RhYmxlX2J1ZnNpemVfbWF4LCBuZXh0X2J1ZnNpemUpOworCisgIGRlZmxhdGVyLT5ub3RpZnlfdGFibGVfc2l6ZV9jaGFuZ2UgPSAxOworCisgIGhkX2NvbnRleHRfc2hyaW5rX3RhYmxlX3NpemUoJmRlZmxhdGVyLT5jdHgsICZkZWZsYXRlci0+bWFwKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2hkX2luZmxhdGVfY2hhbmdlX3RhYmxlX3NpemUoCisgICAgbmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsIHNpemVfdCBzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplKSB7CisgIHN3aXRjaCAoaW5mbGF0ZXItPnN0YXRlKSB7CisgIGNhc2UgTkdIVFRQMl9IRF9TVEFURV9FWFBFQ1RfVEFCTEVfU0laRToKKyAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX0lORkxBVEVfU1RBUlQ6CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEU7CisgIH0KKworICAvKiBJdCBzZWVtcyB0aGF0IGVuY29kZXIgaXMgbm90IHJlcXVpcmVkIHRvIHNlbmQgZHluYW1pYyB0YWJsZSBzaXplCisgICAgIHVwZGF0ZSBpZiB0aGUgdGFibGUgc2l6ZSBpcyBub3QgY2hhbmdlZCBhZnRlciBhcHBseWluZworICAgICBTRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRS4gIFJGQyA3NTQxIGlzIGFtYmlndW91cyBoZXJlLCBidXQgdGhpcworICAgICBpcyB0aGUgaW50ZW50aW9uIG9mIHRoZSBlZGl0b3IuICBJZiBuZXcgbWF4aW11bSB0YWJsZSBzaXplIGlzCisgICAgIHN0cmljdGx5IHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBuZWdvdGlhdGVkIG1heGltdW0gc2l6ZSwKKyAgICAgZW5jb2RlciBtdXN0IHNlbmQgZHluYW1pYyB0YWJsZSBzaXplIHVwZGF0ZS4gIEluIG90aGVyIGNhc2VzLCB3ZQorICAgICBjYW5ub3QgZXhwZWN0IGl0IHRvIGRvIHNvLiAqLworICBpZiAoaW5mbGF0ZXItPmN0eC5oZF90YWJsZV9idWZzaXplX21heCA+IHNldHRpbmdzX21heF9keW5hbWljX3RhYmxlX3NpemUpIHsKKyAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX0VYUEVDVF9UQUJMRV9TSVpFOworICAgIC8qIFJlbWVtYmVyIG1pbmltdW0gdmFsdWUsIGFuZCB2YWxpZGF0ZSB0aGF0IGVuY29kZXIgc2VuZHMgdGhlCisgICAgICAgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoaXMuICovCisgICAgaW5mbGF0ZXItPm1pbl9oZF90YWJsZV9idWZzaXplX21heCA9IHNldHRpbmdzX21heF9keW5hbWljX3RhYmxlX3NpemU7CisgIH0KKworICBpbmZsYXRlci0+c2V0dGluZ3NfaGRfdGFibGVfYnVmc2l6ZV9tYXggPSBzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplOworCisgIGluZmxhdGVyLT5jdHguaGRfdGFibGVfYnVmc2l6ZV9tYXggPSBzZXR0aW5nc19tYXhfZHluYW1pY190YWJsZV9zaXplOworCisgIGhkX2NvbnRleHRfc2hyaW5rX3RhYmxlX3NpemUoJmluZmxhdGVyLT5jdHgsIE5VTEwpOworICByZXR1cm4gMDsKK30KKworI2RlZmluZSBJTkRFWF9SQU5HRV9WQUxJRChjb250ZXh0LCBpZHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChpZHgpIDwgKGNvbnRleHQpLT5oZF90YWJsZS5sZW4gKyBOR0hUVFAyX1NUQVRJQ19UQUJMRV9MRU5HVEgpCisKK3N0YXRpYyBzaXplX3QgZ2V0X21heF9pbmRleChuZ2h0dHAyX2hkX2NvbnRleHQgKmNvbnRleHQpIHsKKyAgcmV0dXJuIGNvbnRleHQtPmhkX3RhYmxlLmxlbiArIE5HSFRUUDJfU1RBVElDX1RBQkxFX0xFTkdUSDsKK30KKworbmdodHRwMl9oZF9udiBuZ2h0dHAyX2hkX3RhYmxlX2dldChuZ2h0dHAyX2hkX2NvbnRleHQgKmNvbnRleHQsIHNpemVfdCBpZHgpIHsKKyAgYXNzZXJ0KElOREVYX1JBTkdFX1ZBTElEKGNvbnRleHQsIGlkeCkpOworICBpZiAoaWR4ID49IE5HSFRUUDJfU1RBVElDX1RBQkxFX0xFTkdUSCkgeworICAgIHJldHVybiBoZF9yaW5nYnVmX2dldCgmY29udGV4dC0+aGRfdGFibGUsIGlkeCAtIE5HSFRUUDJfU1RBVElDX1RBQkxFX0xFTkdUSCkKKyAgICAgICAgLT5udjsKKyAgfSBlbHNlIHsKKyAgICBjb25zdCBuZ2h0dHAyX2hkX3N0YXRpY19lbnRyeSAqZW50ID0gJnN0YXRpY190YWJsZVtpZHhdOworICAgIG5naHR0cDJfaGRfbnYgbnYgPSB7KG5naHR0cDJfcmNidWYgKikmZW50LT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgKG5naHR0cDJfcmNidWYgKikmZW50LT52YWx1ZSwgZW50LT50b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfTlZfRkxBR19OT05FfTsKKyAgICByZXR1cm4gbnY7CisgIH0KK30KKworc3RhdGljIGNvbnN0IG5naHR0cDJfbnYgKm5naHR0cDJfaGRfdGFibGVfZ2V0MihuZ2h0dHAyX2hkX2NvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpZHgpIHsKKyAgYXNzZXJ0KElOREVYX1JBTkdFX1ZBTElEKGNvbnRleHQsIGlkeCkpOworICBpZiAoaWR4ID49IE5HSFRUUDJfU1RBVElDX1RBQkxFX0xFTkdUSCkgeworICAgIHJldHVybiAmaGRfcmluZ2J1Zl9nZXQoJmNvbnRleHQtPmhkX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4IC0gTkdIVFRQMl9TVEFUSUNfVEFCTEVfTEVOR1RIKQorICAgICAgICAgICAgICAgIC0+Y252OworICB9CisKKyAgcmV0dXJuICZzdGF0aWNfdGFibGVbaWR4XS5jbnY7Cit9CisKK3N0YXRpYyBpbnQgaGRfZGVmbGF0ZV9kZWNpZGVfaW5kZXhpbmcobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52LCBpbnQzMl90IHRva2VuKSB7CisgIGlmICh0b2tlbiA9PSBOR0hUVFAyX1RPS0VOX19QQVRIIHx8IHRva2VuID09IE5HSFRUUDJfVE9LRU5fQUdFIHx8CisgICAgICB0b2tlbiA9PSBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfTEVOR1RIIHx8IHRva2VuID09IE5HSFRUUDJfVE9LRU5fRVRBRyB8fAorICAgICAgdG9rZW4gPT0gTkdIVFRQMl9UT0tFTl9JRl9NT0RJRklFRF9TSU5DRSB8fAorICAgICAgdG9rZW4gPT0gTkdIVFRQMl9UT0tFTl9JRl9OT05FX01BVENIIHx8IHRva2VuID09IE5HSFRUUDJfVE9LRU5fTE9DQVRJT04gfHwKKyAgICAgIHRva2VuID09IE5HSFRUUDJfVE9LRU5fU0VUX0NPT0tJRSB8fAorICAgICAgZW50cnlfcm9vbShudi0+bmFtZWxlbiwgbnYtPnZhbHVlbGVuKSA+CisgICAgICAgICAgZGVmbGF0ZXItPmN0eC5oZF90YWJsZV9idWZzaXplX21heCAqIDMgLyA0KSB7CisgICAgcmV0dXJuIE5HSFRUUDJfSERfV0lUSE9VVF9JTkRFWElORzsKKyAgfQorCisgIHJldHVybiBOR0hUVFAyX0hEX1dJVEhfSU5ERVhJTkc7Cit9CisKK3N0YXRpYyBpbnQgZGVmbGF0ZV9udihuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwgbmdodHRwMl9idWZzICpidWZzLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52KSB7CisgIGludCBydjsKKyAgc2VhcmNoX3Jlc3VsdCByZXM7CisgIHNzaXplX3QgaWR4OworICBpbnQgaW5kZXhpbmdfbW9kZTsKKyAgaW50MzJfdCB0b2tlbjsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgdWludDMyX3QgaGFzaCA9IDA7CisKKyAgREVCVUdGKCJkZWZsYXRlaGQ6IGRlZmxhdGluZyAlLipzOiAlLipzXG4iLCAoaW50KW52LT5uYW1lbGVuLCBudi0+bmFtZSwKKyAgICAgICAgIChpbnQpbnYtPnZhbHVlbGVuLCBudi0+dmFsdWUpOworCisgIG1lbSA9IGRlZmxhdGVyLT5jdHgubWVtOworCisgIHRva2VuID0gbG9va3VwX3Rva2VuKG52LT5uYW1lLCBudi0+bmFtZWxlbik7CisgIGlmICh0b2tlbiA9PSAtMSkgeworICAgIGhhc2ggPSBuYW1lX2hhc2gobnYpOworICB9IGVsc2UgaWYgKHRva2VuIDw9IE5HSFRUUDJfVE9LRU5fV1dXX0FVVEhFTlRJQ0FURSkgeworICAgIGhhc2ggPSBzdGF0aWNfdGFibGVbdG9rZW5dLmhhc2g7CisgIH0KKworICAvKiBEb24ndCBpbmRleCBhdXRob3JpemF0aW9uIGhlYWRlciBmaWVsZCBzaW5jZSBpdCBtYXkgY29udGFpbiBsb3cKKyAgICAgZW50cm9weSBzZWNyZXQgZGF0YSAoZS5nLiwgaWQvcGFzc3dvcmQpLiAgQWxzbyBjb29raWUgaGVhZGVyCisgICAgIGZpZWxkIHdpdGggbGVzcyB0aGFuIDIwIGJ5dGVzIHZhbHVlIGlzIGFsc28gbmV2ZXIgaW5kZXhlZC4gIFRoaXMKKyAgICAgaXMgdGhlIHNhbWUgY3JpdGVyaWEgdXNlZCBpbiBGaXJlZm94IGNvZGViYXNlLiAqLworICBpbmRleGluZ19tb2RlID0KKyAgICAgIHRva2VuID09IE5HSFRUUDJfVE9LRU5fQVVUSE9SSVpBVElPTiB8fAorICAgICAgICAgICAgICAodG9rZW4gPT0gTkdIVFRQMl9UT0tFTl9DT09LSUUgJiYgbnYtPnZhbHVlbGVuIDwgMjApIHx8CisgICAgICAgICAgICAgIChudi0+ZmxhZ3MgJiBOR0hUVFAyX05WX0ZMQUdfTk9fSU5ERVgpCisgICAgICAgICAgPyBOR0hUVFAyX0hEX05FVkVSX0lOREVYSU5HCisgICAgICAgICAgOiBoZF9kZWZsYXRlX2RlY2lkZV9pbmRleGluZyhkZWZsYXRlciwgbnYsIHRva2VuKTsKKworICByZXMgPSBzZWFyY2hfaGRfdGFibGUoJmRlZmxhdGVyLT5jdHgsIG52LCB0b2tlbiwgaW5kZXhpbmdfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkZWZsYXRlci0+bWFwLCBoYXNoKTsKKworICBpZHggPSByZXMuaW5kZXg7CisKKyAgaWYgKHJlcy5uYW1lX3ZhbHVlX21hdGNoKSB7CisKKyAgICBERUJVR0YoImRlZmxhdGVoZDogbmFtZS92YWx1ZSBtYXRjaCBpbmRleD0lemRcbiIsIGlkeCk7CisKKyAgICBydiA9IGVtaXRfaW5kZXhlZF9ibG9jayhidWZzLCAoc2l6ZV90KWlkeCk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChyZXMuaW5kZXggIT0gLTEpIHsKKyAgICBERUJVR0YoImRlZmxhdGVoZDogbmFtZSBtYXRjaCBpbmRleD0lemRcbiIsIHJlcy5pbmRleCk7CisgIH0KKworICBpZiAoaW5kZXhpbmdfbW9kZSA9PSBOR0hUVFAyX0hEX1dJVEhfSU5ERVhJTkcpIHsKKyAgICBuZ2h0dHAyX2hkX252IGhkX252OworCisgICAgaWYgKGlkeCAhPSAtMSkgeworICAgICAgaGRfbnYubmFtZSA9IG5naHR0cDJfaGRfdGFibGVfZ2V0KCZkZWZsYXRlci0+Y3R4LCAoc2l6ZV90KWlkeCkubmFtZTsKKyAgICAgIG5naHR0cDJfcmNidWZfaW5jcmVmKGhkX252Lm5hbWUpOworICAgIH0gZWxzZSB7CisgICAgICBydiA9IG5naHR0cDJfcmNidWZfbmV3MigmaGRfbnYubmFtZSwgbnYtPm5hbWUsIG52LT5uYW1lbGVuLCBtZW0pOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgIH0KKworICAgIHJ2ID0gbmdodHRwMl9yY2J1Zl9uZXcyKCZoZF9udi52YWx1ZSwgbnYtPnZhbHVlLCBudi0+dmFsdWVsZW4sIG1lbSk7CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgbmdodHRwMl9yY2J1Zl9kZWNyZWYoaGRfbnYubmFtZSk7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgaGRfbnYudG9rZW4gPSB0b2tlbjsKKyAgICBoZF9udi5mbGFncyA9IE5HSFRUUDJfTlZfRkxBR19OT05FOworCisgICAgcnYgPSBhZGRfaGRfdGFibGVfaW5jcmVtZW50YWwoJmRlZmxhdGVyLT5jdHgsICZoZF9udiwgJmRlZmxhdGVyLT5tYXAsIGhhc2gpOworCisgICAgbmdodHRwMl9yY2J1Zl9kZWNyZWYoaGRfbnYudmFsdWUpOworICAgIG5naHR0cDJfcmNidWZfZGVjcmVmKGhkX252Lm5hbWUpOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgICB9CisgIH0KKyAgaWYgKGlkeCA9PSAtMSkgeworICAgIHJ2ID0gZW1pdF9uZXduYW1lX2Jsb2NrKGJ1ZnMsIG52LCBpbmRleGluZ19tb2RlKTsKKyAgfSBlbHNlIHsKKyAgICBydiA9IGVtaXRfaW5kbmFtZV9ibG9jayhidWZzLCAoc2l6ZV90KWlkeCwgbnYsIGluZGV4aW5nX21vZGUpOworICB9CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2hkX2RlZmxhdGVfaGRfYnVmcyhuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIGNvbnN0IG5naHR0cDJfbnYgKm52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudmxlbikgeworICBzaXplX3QgaTsKKyAgaW50IHJ2ID0gMDsKKworICBpZiAoZGVmbGF0ZXItPmN0eC5iYWQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgIH0KKworICBpZiAoZGVmbGF0ZXItPm5vdGlmeV90YWJsZV9zaXplX2NoYW5nZSkgeworICAgIHNpemVfdCBtaW5faGRfdGFibGVfYnVmc2l6ZV9tYXg7CisKKyAgICBtaW5faGRfdGFibGVfYnVmc2l6ZV9tYXggPSBkZWZsYXRlci0+bWluX2hkX3RhYmxlX2J1ZnNpemVfbWF4OworCisgICAgZGVmbGF0ZXItPm5vdGlmeV90YWJsZV9zaXplX2NoYW5nZSA9IDA7CisgICAgZGVmbGF0ZXItPm1pbl9oZF90YWJsZV9idWZzaXplX21heCA9IFVJTlQzMl9NQVg7CisKKyAgICBpZiAoZGVmbGF0ZXItPmN0eC5oZF90YWJsZV9idWZzaXplX21heCA+IG1pbl9oZF90YWJsZV9idWZzaXplX21heCkgeworCisgICAgICBydiA9IGVtaXRfdGFibGVfc2l6ZShidWZzLCBtaW5faGRfdGFibGVfYnVmc2l6ZV9tYXgpOworCisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisgICAgfQorCisgICAgcnYgPSBlbWl0X3RhYmxlX3NpemUoYnVmcywgZGVmbGF0ZXItPmN0eC5oZF90YWJsZV9idWZzaXplX21heCk7CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBudmxlbjsgKytpKSB7CisgICAgcnYgPSBkZWZsYXRlX252KGRlZmxhdGVyLCBidWZzLCAmbnZbaV0pOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICB9CisKKyAgREVCVUdGKCJkZWZsYXRlaGQ6IGFsbCBpbnB1dCBuYW1lL3ZhbHVlIHBhaXJzIHdlcmUgZGVmbGF0ZWRcbiIpOworCisgIHJldHVybiAwOworZmFpbDoKKyAgREVCVUdGKCJkZWZsYXRlaGQ6IGVycm9yIHJldHVybiAlZFxuIiwgcnYpOworCisgIGRlZmxhdGVyLT5jdHguYmFkID0gMTsKKyAgcmV0dXJuIHJ2OworfQorCitzc2l6ZV90IG5naHR0cDJfaGRfZGVmbGF0ZV9oZChuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwgdWludDhfdCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmxlbiwgY29uc3QgbmdodHRwMl9udiAqbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnZsZW4pIHsKKyAgbmdodHRwMl9idWZzIGJ1ZnM7CisgIGludCBydjsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSBkZWZsYXRlci0+Y3R4Lm1lbTsKKworICBydiA9IG5naHR0cDJfYnVmc193cmFwX2luaXQoJmJ1ZnMsIGJ1ZiwgYnVmbGVuLCBtZW0pOworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcnYgPSBuZ2h0dHAyX2hkX2RlZmxhdGVfaGRfYnVmcyhkZWZsYXRlciwgJmJ1ZnMsIG52LCBudmxlbik7CisKKyAgYnVmbGVuID0gbmdodHRwMl9idWZzX2xlbigmYnVmcyk7CisKKyAgbmdodHRwMl9idWZzX3dyYXBfZnJlZSgmYnVmcyk7CisKKyAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlNVRkZfQlVGU0laRTsKKyAgfQorCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIChzc2l6ZV90KWJ1ZmxlbjsKK30KKworc3NpemVfdCBuZ2h0dHAyX2hkX2RlZmxhdGVfaGRfdmVjKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfdmVjICp2ZWMsIHNpemVfdCB2ZWNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnYsIHNpemVfdCBudmxlbikgeworICBuZ2h0dHAyX2J1ZnMgYnVmczsKKyAgaW50IHJ2OworICBuZ2h0dHAyX21lbSAqbWVtOworICBzaXplX3QgYnVmbGVuOworCisgIG1lbSA9IGRlZmxhdGVyLT5jdHgubWVtOworCisgIHJ2ID0gbmdodHRwMl9idWZzX3dyYXBfaW5pdDIoJmJ1ZnMsIHZlYywgdmVjbGVuLCBtZW0pOworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcnYgPSBuZ2h0dHAyX2hkX2RlZmxhdGVfaGRfYnVmcyhkZWZsYXRlciwgJmJ1ZnMsIG52LCBudmxlbik7CisKKyAgYnVmbGVuID0gbmdodHRwMl9idWZzX2xlbigmYnVmcyk7CisKKyAgbmdodHRwMl9idWZzX3dyYXBfZnJlZSgmYnVmcyk7CisKKyAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlNVRkZfQlVGU0laRTsKKyAgfQorCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIChzc2l6ZV90KWJ1ZmxlbjsKK30KKworc2l6ZV90IG5naHR0cDJfaGRfZGVmbGF0ZV9ib3VuZChuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnZhLCBzaXplX3QgbnZsZW4pIHsKKyAgc2l6ZV90IG4gPSAwOworICBzaXplX3QgaTsKKyAgKHZvaWQpZGVmbGF0ZXI7CisKKyAgLyogUG9zc2libGUgTWF4aW11bSBIZWFkZXIgVGFibGUgU2l6ZSBDaGFuZ2UuICBFbmNvZGluZyAoMXUgPDwgMzEpIC0KKyAgICAgMSB1c2luZyA0IGJpdCBwcmVmaXggcmVxdWlyZXMgNiBieXRlcy4gIFdlIG1heSBlbWl0IHRoaXMgYXQgbW9zdAorICAgICB0d2ljZS4gKi8KKyAgbiArPSAxMjsKKworICAvKiBVc2UgTGl0ZXJhbCBIZWFkZXIgRmllbGQgd2l0aG91dCBpbmRleGluZyAtIE5ldyBOYW1lLCBzaW5jZSBpdCBpcworICAgICBtb3N0IHNwYWNlIGNvbnN1bWluZyBmb3JtYXQuICBBbHNvIHdlIGNob29zZSB0aGUgbGVzcyBvbmUgYmV0d2VlbgorICAgICBub24taHVmZm1hbiBhbmQgaHVmZm1hbiwgc28gdXNpbmcgbGl0ZXJhbCBieXRlIGNvdW50IGlzCisgICAgIHN1ZmZpY2llbnQgZm9yIHVwcGVyIGJvdW5kLgorCisgICAgIEVuY29kaW5nICgxdSA8PCAzMSkgLSAxIHVzaW5nIDcgYml0IHByZWZpeCByZXF1aXJlcyA2IGJ5dGVzLiAgV2UKKyAgICAgbmVlZCAyIG9mIHRoaXMgZm9yIHxudmxlbnwgaGVhZGVyIGZpZWxkcy4gKi8KKyAgbiArPSA2ICogMiAqIG52bGVuOworCisgIGZvciAoaSA9IDA7IGkgPCBudmxlbjsgKytpKSB7CisgICAgbiArPSBudmFbaV0ubmFtZWxlbiArIG52YVtpXS52YWx1ZWxlbjsKKyAgfQorCisgIHJldHVybiBuOworfQorCitpbnQgbmdodHRwMl9oZF9kZWZsYXRlX25ldyhuZ2h0dHAyX2hkX2RlZmxhdGVyICoqZGVmbGF0ZXJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlZmxhdGVfaGRfdGFibGVfYnVmc2l6ZV9tYXgpIHsKKyAgcmV0dXJuIG5naHR0cDJfaGRfZGVmbGF0ZV9uZXcyKGRlZmxhdGVyX3B0ciwgZGVmbGF0ZV9oZF90YWJsZV9idWZzaXplX21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfQorCitpbnQgbmdodHRwMl9oZF9kZWZsYXRlX25ldzIobmdodHRwMl9oZF9kZWZsYXRlciAqKmRlZmxhdGVyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVmbGF0ZV9oZF90YWJsZV9idWZzaXplX21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXI7CisKKyAgaWYgKG1lbSA9PSBOVUxMKSB7CisgICAgbWVtID0gbmdodHRwMl9tZW1fZGVmYXVsdCgpOworICB9CisKKyAgZGVmbGF0ZXIgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9oZF9kZWZsYXRlcikpOworCisgIGlmIChkZWZsYXRlciA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgcnYgPSBuZ2h0dHAyX2hkX2RlZmxhdGVfaW5pdDIoZGVmbGF0ZXIsIGRlZmxhdGVfaGRfdGFibGVfYnVmc2l6ZV9tYXgsIG1lbSk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgZGVmbGF0ZXIpOworCisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgKmRlZmxhdGVyX3B0ciA9IGRlZmxhdGVyOworCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfaGRfZGVmbGF0ZV9kZWwobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIpIHsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSBkZWZsYXRlci0+Y3R4Lm1lbTsKKworICBuZ2h0dHAyX2hkX2RlZmxhdGVfZnJlZShkZWZsYXRlcik7CisKKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGRlZmxhdGVyKTsKK30KKworc3RhdGljIHZvaWQgaGRfaW5mbGF0ZV9zZXRfaHVmZm1hbl9lbmNvZGVkKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluKSB7CisgIGluZmxhdGVyLT5odWZmbWFuX2VuY29kZWQgPSAoKmluICYgKDEgPDwgNykpICE9IDA7Cit9CisKKy8qCisgKiBEZWNvZGVzIHRoZSBpbnRlZ2VyIGZyb20gdGhlIHJhbmdlIFtpbiwgbGFzdCkuICBUaGUgcmVzdWx0IGlzCisgKiBhc3NpZ25lZCB0byB8aW5mbGF0ZXItPmxlZnR8LiAgSWYgdGhlIHxpbmZsYXRlci0+bGVmdHwgaXMgMCwgdGhlbgorICogaXQgcGVyZm9ybXMgdmFyaWFibGUgaW50ZWdlciBkZWNvZGluZyBmcm9tIHNjcmF0Y2guIE90aGVyd2lzZSwgaXQKKyAqIHVzZXMgdGhlIHxpbmZsYXRlci0+bGVmdHwgYXMgdGhlIGluaXRpYWwgdmFsdWUgYW5kIGNvbnRpbnVlcyB0bworICogZGVjb2RlIGFzc3VtaW5nIHRoYXQgW2luLCBsYXN0KSBiZWdpbnMgd2l0aCBpbnRlcm1lZGlhcnkgc2VxdWVuY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpZiBpdCBzdWNjZWVkcywgb3IKKyAqIG9uZSBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QCisgKiAgIEludGVnZXIgZGVjb2RpbmcgZmFpbGVkCisgKi8KK3N0YXRpYyBzc2l6ZV90IGhkX2luZmxhdGVfcmVhZF9sZW4obmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsIGludCAqcmZpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW4sIGNvbnN0IHVpbnQ4X3QgKmxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwcmVmaXgsIHNpemVfdCBtYXhsZW4pIHsKKyAgc3NpemVfdCBydjsKKyAgdWludDMyX3Qgb3V0OworCisgICpyZmluID0gMDsKKworICBydiA9IGRlY29kZV9sZW5ndGgoJm91dCwgJmluZmxhdGVyLT5zaGlmdCwgcmZpbiwgKHVpbnQzMl90KWluZmxhdGVyLT5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZXItPnNoaWZ0LCBpbiwgbGFzdCwgcHJlZml4KTsKKworICBpZiAocnYgPT0gLTEpIHsKKyAgICBERUJVR0YoImluZmxhdGVoZDogaW50ZWdlciBkZWNvZGluZyBmYWlsZWRcbiIpOworICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgfQorCisgIGlmIChvdXQgPiBtYXhsZW4pIHsKKyAgICBERUJVR0YoImluZmxhdGVoZDogaW50ZWdlciBleGNlZWRlZCB0aGUgbWF4aW11bSB2YWx1ZSAlenVcbiIsIG1heGxlbik7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICB9CisKKyAgaW5mbGF0ZXItPmxlZnQgPSBvdXQ7CisKKyAgREVCVUdGKCJpbmZsYXRlaGQ6IGRlY29kZWQgaW50ZWdlciBpcyAldVxuIiwgb3V0KTsKKworICByZXR1cm4gcnY7Cit9CisKKy8qCisgKiBSZWFkcyB8aW5mbGF0ZXItPmxlZnR8IGJ5dGVzIGZyb20gdGhlIHJhbmdlIFtpbiwgbGFzdCkgYW5kIHBlcmZvcm1zCisgKiBodWZmbWFuIGRlY29kaW5nIGFnYWluc3QgdGhlbSBhbmQgcHVzaGVzIHRoZSByZXN1bHQgaW50byB0aGUKKyAqIHxidWZmZXJ8LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaWYgaXQgc3VjY2VlZHMsIG9yCisgKiBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICBPdXQgb2YgbWVtb3J5CisgKiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUAorICogICBIdWZmbWFuIGRlY29kaW5nIGZhaWxlZAorICovCitzdGF0aWMgc3NpemVfdCBoZF9pbmZsYXRlX3JlYWRfaHVmZihuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfYnVmICpidWYsIGNvbnN0IHVpbnQ4X3QgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqbGFzdCkgeworICBzc2l6ZV90IHJlYWRsZW47CisgIGludCBmaW4gPSAwOworICBpZiAoKHNpemVfdCkobGFzdCAtIGluKSA+PSBpbmZsYXRlci0+bGVmdCkgeworICAgIGxhc3QgPSBpbiArIGluZmxhdGVyLT5sZWZ0OworICAgIGZpbiA9IDE7CisgIH0KKyAgcmVhZGxlbiA9IG5naHR0cDJfaGRfaHVmZl9kZWNvZGUoJmluZmxhdGVyLT5odWZmX2RlY29kZV9jdHgsIGJ1ZiwgaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpKGxhc3QgLSBpbiksIGZpbik7CisKKyAgaWYgKHJlYWRsZW4gPCAwKSB7CisgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGh1ZmZtYW4gZGVjb2RpbmcgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gcmVhZGxlbjsKKyAgfQorICBpZiAobmdodHRwMl9oZF9odWZmX2RlY29kZV9mYWlsdXJlX3N0YXRlKCZpbmZsYXRlci0+aHVmZl9kZWNvZGVfY3R4KSkgeworICAgIERFQlVHRigiaW5mbGF0ZWhkOiBodWZmbWFuIGRlY29kaW5nIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICB9CisKKyAgaW5mbGF0ZXItPmxlZnQgLT0gKHNpemVfdClyZWFkbGVuOworICByZXR1cm4gcmVhZGxlbjsKK30KKworLyoKKyAqIFJlYWRzIHxpbmZsYXRlci0+bGVmdHwgYnl0ZXMgZnJvbSB0aGUgcmFuZ2UgW2luLCBsYXN0KSBhbmQgY29waWVzCisgKiB0aGVtIGludG8gdGhlIHxidWZmZXJ8LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaWYgaXQgc3VjY2VlZHMsIG9yCisgKiBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICBPdXQgb2YgbWVtb3J5CisgKiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUAorICogICBIZWFkZXIgZGVjb21wcmVzc2lvbiBmYWlsZWQKKyAqLworc3RhdGljIHNzaXplX3QgaGRfaW5mbGF0ZV9yZWFkKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLCBuZ2h0dHAyX2J1ZiAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluLCBjb25zdCB1aW50OF90ICpsYXN0KSB7CisgIHNpemVfdCBsZW4gPSBuZ2h0dHAyX21pbigoc2l6ZV90KShsYXN0IC0gaW4pLCBpbmZsYXRlci0+bGVmdCk7CisKKyAgYnVmLT5sYXN0ID0gbmdodHRwMl9jcHltZW0oYnVmLT5sYXN0LCBpbiwgbGVuKTsKKworICBpbmZsYXRlci0+bGVmdCAtPSBsZW47CisgIHJldHVybiAoc3NpemVfdClsZW47Cit9CisKKy8qCisgKiBGaW5hbGl6ZSBpbmRleGVkIGhlYWRlciByZXByZXNlbnRhdGlvbiByZWNlcHRpb24uICBUaGUgcmVmZXJlbmNlZAorICogaGVhZGVyIGlzIGFsd2F5cyBlbWl0dGVkLCBhbmQgfCpudl9vdXR8IGlzIGZpbGxlZCB3aXRoIHRoYXQgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIGhkX2luZmxhdGVfY29tbWl0X2luZGV4ZWQobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfbnYgKm52X291dCkgeworICBuZ2h0dHAyX2hkX252IG52ID0gbmdodHRwMl9oZF90YWJsZV9nZXQoJmluZmxhdGVyLT5jdHgsIGluZmxhdGVyLT5pbmRleCk7CisKKyAgZW1pdF9oZWFkZXIobnZfb3V0LCAmbnYpOworfQorCisvKgorICogRmluYWxpemUgbGl0ZXJhbCBoZWFkZXIgcmVwcmVzZW50YXRpb24gLSBuZXcgbmFtZS0gcmVjZXB0aW9uLiBJZgorICogaGVhZGVyIGlzIGVtaXR0ZWQsIHwqbnZfb3V0fCBpcyBmaWxsZWQgd2l0aCB0aGF0IHZhbHVlIGFuZCAwIGlzCisgKiByZXR1cm5lZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgIE91dCBvZiBtZW1vcnkKKyAqLworc3RhdGljIGludCBoZF9pbmZsYXRlX2NvbW1pdF9uZXduYW1lKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfbnYgKm52X291dCkgeworICBuZ2h0dHAyX2hkX252IG52OworICBpbnQgcnY7CisKKyAgaWYgKGluZmxhdGVyLT5ub19pbmRleCkgeworICAgIG52LmZsYWdzID0gTkdIVFRQMl9OVl9GTEFHX05PX0lOREVYOworICB9IGVsc2UgeworICAgIG52LmZsYWdzID0gTkdIVFRQMl9OVl9GTEFHX05PTkU7CisgIH0KKworICBudi5uYW1lID0gaW5mbGF0ZXItPm5hbWVyY2J1ZjsKKyAgbnYudmFsdWUgPSBpbmZsYXRlci0+dmFsdWVyY2J1ZjsKKyAgbnYudG9rZW4gPSBsb29rdXBfdG9rZW4oaW5mbGF0ZXItPm5hbWVyY2J1Zi0+YmFzZSwgaW5mbGF0ZXItPm5hbWVyY2J1Zi0+bGVuKTsKKworICBpZiAoaW5mbGF0ZXItPmluZGV4X3JlcXVpcmVkKSB7CisgICAgcnYgPSBhZGRfaGRfdGFibGVfaW5jcmVtZW50YWwoJmluZmxhdGVyLT5jdHgsICZudiwgTlVMTCwgMCk7CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorCisgIGVtaXRfaGVhZGVyKG52X291dCwgJm52KTsKKworICBpbmZsYXRlci0+bnZfbmFtZV9rZWVwID0gbnYubmFtZTsKKyAgaW5mbGF0ZXItPm52X3ZhbHVlX2tlZXAgPSBudi52YWx1ZTsKKworICBpbmZsYXRlci0+bmFtZXJjYnVmID0gTlVMTDsKKyAgaW5mbGF0ZXItPnZhbHVlcmNidWYgPSBOVUxMOworCisgIHJldHVybiAwOworfQorCisvKgorICogRmluYWxpemUgbGl0ZXJhbCBoZWFkZXIgcmVwcmVzZW50YXRpb24gLSBpbmRleGVkIG5hbWUtCisgKiByZWNlcHRpb24uIElmIGhlYWRlciBpcyBlbWl0dGVkLCB8Km52X291dHwgaXMgZmlsbGVkIHdpdGggdGhhdAorICogdmFsdWUgYW5kIDAgaXMgcmV0dXJuZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICBPdXQgb2YgbWVtb3J5CisgKi8KK3N0YXRpYyBpbnQgaGRfaW5mbGF0ZV9jb21taXRfaW5kbmFtZShuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2hkX252ICpudl9vdXQpIHsKKyAgbmdodHRwMl9oZF9udiBudjsKKyAgaW50IHJ2OworCisgIG52ID0gbmdodHRwMl9oZF90YWJsZV9nZXQoJmluZmxhdGVyLT5jdHgsIGluZmxhdGVyLT5pbmRleCk7CisKKyAgaWYgKGluZmxhdGVyLT5ub19pbmRleCkgeworICAgIG52LmZsYWdzID0gTkdIVFRQMl9OVl9GTEFHX05PX0lOREVYOworICB9IGVsc2UgeworICAgIG52LmZsYWdzID0gTkdIVFRQMl9OVl9GTEFHX05PTkU7CisgIH0KKworICBuZ2h0dHAyX3JjYnVmX2luY3JlZihudi5uYW1lKTsKKworICBudi52YWx1ZSA9IGluZmxhdGVyLT52YWx1ZXJjYnVmOworCisgIGlmIChpbmZsYXRlci0+aW5kZXhfcmVxdWlyZWQpIHsKKyAgICBydiA9IGFkZF9oZF90YWJsZV9pbmNyZW1lbnRhbCgmaW5mbGF0ZXItPmN0eCwgJm52LCBOVUxMLCAwKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgbmdodHRwMl9yY2J1Zl9kZWNyZWYobnYubmFtZSk7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgfQorICB9CisKKyAgZW1pdF9oZWFkZXIobnZfb3V0LCAmbnYpOworCisgIGluZmxhdGVyLT5udl9uYW1lX2tlZXAgPSBudi5uYW1lOworICBpbmZsYXRlci0+bnZfdmFsdWVfa2VlcCA9IG52LnZhbHVlOworCisgIGluZmxhdGVyLT52YWx1ZXJjYnVmID0gTlVMTDsKKworICByZXR1cm4gMDsKK30KKworc3NpemVfdCBuZ2h0dHAyX2hkX2luZmxhdGVfaGQobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIsIG5naHR0cDJfbnYgKm52X291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaW5mbGF0ZV9mbGFncywgdWludDhfdCAqaW4sIHNpemVfdCBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbl9maW5hbCkgeworICByZXR1cm4gbmdodHRwMl9oZF9pbmZsYXRlX2hkMihpbmZsYXRlciwgbnZfb3V0LCBpbmZsYXRlX2ZsYWdzLCBpbiwgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2ZpbmFsKTsKK30KKworc3NpemVfdCBuZ2h0dHAyX2hkX2luZmxhdGVfaGQyKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbnYgKm52X291dCwgaW50ICppbmZsYXRlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmluLCBzaXplX3QgaW5sZW4sIGludCBpbl9maW5hbCkgeworICBzc2l6ZV90IHJ2OworICBuZ2h0dHAyX2hkX252IGhkX252OworCisgIHJ2ID0gbmdodHRwMl9oZF9pbmZsYXRlX2hkX252KGluZmxhdGVyLCAmaGRfbnYsIGluZmxhdGVfZmxhZ3MsIGluLCBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fZmluYWwpOworCisgIGlmIChydiA8IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBpZiAoKmluZmxhdGVfZmxhZ3MgJiBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVCkgeworICAgIG52X291dC0+bmFtZSA9IGhkX252Lm5hbWUtPmJhc2U7CisgICAgbnZfb3V0LT5uYW1lbGVuID0gaGRfbnYubmFtZS0+bGVuOworCisgICAgbnZfb3V0LT52YWx1ZSA9IGhkX252LnZhbHVlLT5iYXNlOworICAgIG52X291dC0+dmFsdWVsZW4gPSBoZF9udi52YWx1ZS0+bGVuOworCisgICAgbnZfb3V0LT5mbGFncyA9IGhkX252LmZsYWdzOworICB9CisKKyAgcmV0dXJuIHJ2OworfQorCitzc2l6ZV90IG5naHR0cDJfaGRfaW5mbGF0ZV9oZF9udihuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaGRfbnYgKm52X291dCwgaW50ICppbmZsYXRlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW4sIHNpemVfdCBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbl9maW5hbCkgeworICBzc2l6ZV90IHJ2ID0gMDsKKyAgY29uc3QgdWludDhfdCAqZmlyc3QgPSBpbjsKKyAgY29uc3QgdWludDhfdCAqbGFzdCA9IGluICsgaW5sZW47CisgIGludCByZmluID0gMDsKKyAgaW50IGJ1c3kgPSAwOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9IGluZmxhdGVyLT5jdHgubWVtOworCisgIGlmIChpbmZsYXRlci0+Y3R4LmJhZCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgfQorCisgIERFQlVHRigiaW5mbGF0ZWhkOiBzdGFydCBzdGF0ZT0lZFxuIiwgaW5mbGF0ZXItPnN0YXRlKTsKKyAgaGRfaW5mbGF0ZV9rZWVwX2ZyZWUoaW5mbGF0ZXIpOworICAqaW5mbGF0ZV9mbGFncyA9IE5HSFRUUDJfSERfSU5GTEFURV9OT05FOworICBmb3IgKDsgaW4gIT0gbGFzdCB8fCBidXN5OykgeworICAgIGJ1c3kgPSAwOworICAgIHN3aXRjaCAoaW5mbGF0ZXItPnN0YXRlKSB7CisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX0VYUEVDVF9UQUJMRV9TSVpFOgorICAgICAgaWYgKCgqaW4gJiAweGUwdSkgIT0gMHgyMHUpIHsKKyAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGhlYWRlciB0YWJsZSBzaXplIGNoYW5nZSB3YXMgZXhwZWN0ZWQsIGJ1dCBzYXcgIgorICAgICAgICAgICAgICAgIjB4JTAyeCBhcyBmaXJzdCBieXRlIiwKKyAgICAgICAgICAgICAgICppbik7CisgICAgICAgIHJ2ID0gTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKyAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfSU5GTEFURV9TVEFSVDoKKyAgICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfT1BDT0RFOgorICAgICAgaWYgKCgqaW4gJiAweGUwdSkgPT0gMHgyMHUpIHsKKyAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGhlYWRlciB0YWJsZSBzaXplIGNoYW5nZVxuIik7CisgICAgICAgIGlmIChpbmZsYXRlci0+c3RhdGUgPT0gTkdIVFRQMl9IRF9TVEFURV9PUENPREUpIHsKKyAgICAgICAgICBERUJVR0YoImluZmxhdGVoZDogaGVhZGVyIHRhYmxlIHNpemUgY2hhbmdlIG11c3QgYXBwZWFyIGF0IHRoZSBoZWFkICIKKyAgICAgICAgICAgICAgICAgIm9mIGhlYWRlciBibG9ja1xuIik7CisgICAgICAgICAgcnYgPSBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgaW5mbGF0ZXItPm9wY29kZSA9IE5HSFRUUDJfSERfT1BDT0RFX0lOREVYRUQ7CisgICAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfUkVBRF9UQUJMRV9TSVpFOworICAgICAgfSBlbHNlIGlmICgqaW4gJiAweDgwdSkgeworICAgICAgICBERUJVR0YoImluZmxhdGVoZDogaW5kZXhlZCByZXByXG4iKTsKKyAgICAgICAgaW5mbGF0ZXItPm9wY29kZSA9IE5HSFRUUDJfSERfT1BDT0RFX0lOREVYRUQ7CisgICAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfUkVBRF9JTkRFWDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgqaW4gPT0gMHg0MHUgfHwgKmluID09IDAgfHwgKmluID09IDB4MTB1KSB7CisgICAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGxpdGVyYWwgaGVhZGVyIHJlcHIgLSBuZXcgbmFtZVxuIik7CisgICAgICAgICAgaW5mbGF0ZXItPm9wY29kZSA9IE5HSFRUUDJfSERfT1BDT0RFX05FV05BTUU7CisgICAgICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX0NIRUNLX05BTUVMRU47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGxpdGVyYWwgaGVhZGVyIHJlcHIgLSBpbmRleGVkIG5hbWVcbiIpOworICAgICAgICAgIGluZmxhdGVyLT5vcGNvZGUgPSBOR0hUVFAyX0hEX09QQ09ERV9JTkROQU1FOworICAgICAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfUkVBRF9JTkRFWDsKKyAgICAgICAgfQorICAgICAgICBpbmZsYXRlci0+aW5kZXhfcmVxdWlyZWQgPSAoKmluICYgMHg0MCkgIT0gMDsKKyAgICAgICAgaW5mbGF0ZXItPm5vX2luZGV4ID0gKCppbiAmIDB4ZjB1KSA9PSAweDEwdTsKKyAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGluZGV4aW5nIHJlcXVpcmVkPSVkLCBub19pbmRleD0lZFxuIiwKKyAgICAgICAgICAgICAgIGluZmxhdGVyLT5pbmRleF9yZXF1aXJlZCwgaW5mbGF0ZXItPm5vX2luZGV4KTsKKyAgICAgICAgaWYgKGluZmxhdGVyLT5vcGNvZGUgPT0gTkdIVFRQMl9IRF9PUENPREVfTkVXTkFNRSkgeworICAgICAgICAgICsraW47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGluZmxhdGVyLT5sZWZ0ID0gMDsKKyAgICAgIGluZmxhdGVyLT5zaGlmdCA9IDA7CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfUkVBRF9UQUJMRV9TSVpFOgorICAgICAgcmZpbiA9IDA7CisgICAgICBydiA9IGhkX2luZmxhdGVfcmVhZF9sZW4oCisgICAgICAgICAgaW5mbGF0ZXIsICZyZmluLCBpbiwgbGFzdCwgNSwKKyAgICAgICAgICBuZ2h0dHAyX21pbihpbmZsYXRlci0+bWluX2hkX3RhYmxlX2J1ZnNpemVfbWF4LAorICAgICAgICAgICAgICAgICAgICAgIGluZmxhdGVyLT5zZXR0aW5nc19oZF90YWJsZV9idWZzaXplX21heCkpOworICAgICAgaWYgKHJ2IDwgMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisgICAgICBpbiArPSBydjsKKyAgICAgIGlmICghcmZpbikgeworICAgICAgICBnb3RvIGFsbW9zdF9vazsKKyAgICAgIH0KKyAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiB0YWJsZV9zaXplPSV6dVxuIiwgaW5mbGF0ZXItPmxlZnQpOworICAgICAgaW5mbGF0ZXItPm1pbl9oZF90YWJsZV9idWZzaXplX21heCA9IFVJTlQzMl9NQVg7CisgICAgICBpbmZsYXRlci0+Y3R4LmhkX3RhYmxlX2J1ZnNpemVfbWF4ID0gaW5mbGF0ZXItPmxlZnQ7CisgICAgICBoZF9jb250ZXh0X3Nocmlua190YWJsZV9zaXplKCZpbmZsYXRlci0+Y3R4LCBOVUxMKTsKKyAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfSU5GTEFURV9TVEFSVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9IRF9TVEFURV9SRUFEX0lOREVYOiB7CisgICAgICBzaXplX3QgcHJlZml4bGVuOworCisgICAgICBpZiAoaW5mbGF0ZXItPm9wY29kZSA9PSBOR0hUVFAyX0hEX09QQ09ERV9JTkRFWEVEKSB7CisgICAgICAgIHByZWZpeGxlbiA9IDc7CisgICAgICB9IGVsc2UgaWYgKGluZmxhdGVyLT5pbmRleF9yZXF1aXJlZCkgeworICAgICAgICBwcmVmaXhsZW4gPSA2OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlZml4bGVuID0gNDsKKyAgICAgIH0KKworICAgICAgcmZpbiA9IDA7CisgICAgICBydiA9IGhkX2luZmxhdGVfcmVhZF9sZW4oaW5mbGF0ZXIsICZyZmluLCBpbiwgbGFzdCwgcHJlZml4bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9tYXhfaW5kZXgoJmluZmxhdGVyLT5jdHgpKTsKKyAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBpbiArPSBydjsKKworICAgICAgaWYgKCFyZmluKSB7CisgICAgICAgIGdvdG8gYWxtb3N0X29rOworICAgICAgfQorCisgICAgICBpZiAoaW5mbGF0ZXItPmxlZnQgPT0gMCkgeworICAgICAgICBydiA9IE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBpbmRleD0lenVcbiIsIGluZmxhdGVyLT5sZWZ0KTsKKyAgICAgIGlmIChpbmZsYXRlci0+b3Bjb2RlID09IE5HSFRUUDJfSERfT1BDT0RFX0lOREVYRUQpIHsKKyAgICAgICAgaW5mbGF0ZXItPmluZGV4ID0gaW5mbGF0ZXItPmxlZnQ7CisgICAgICAgIC0taW5mbGF0ZXItPmluZGV4OworCisgICAgICAgIGhkX2luZmxhdGVfY29tbWl0X2luZGV4ZWQoaW5mbGF0ZXIsIG52X291dCk7CisKKyAgICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9PUENPREU7CisgICAgICAgICppbmZsYXRlX2ZsYWdzIHw9IE5HSFRUUDJfSERfSU5GTEFURV9FTUlUOworICAgICAgICByZXR1cm4gKHNzaXplX3QpKGluIC0gZmlyc3QpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaW5mbGF0ZXItPmluZGV4ID0gaW5mbGF0ZXItPmxlZnQ7CisgICAgICAgIC0taW5mbGF0ZXItPmluZGV4OworCisgICAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfQ0hFQ0tfVkFMVUVMRU47CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX05FV05BTUVfQ0hFQ0tfTkFNRUxFTjoKKyAgICAgIGhkX2luZmxhdGVfc2V0X2h1ZmZtYW5fZW5jb2RlZChpbmZsYXRlciwgaW4pOworICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX1JFQURfTkFNRUxFTjsKKyAgICAgIGluZmxhdGVyLT5sZWZ0ID0gMDsKKyAgICAgIGluZmxhdGVyLT5zaGlmdCA9IDA7CisgICAgICBERUJVR0YoImluZmxhdGVoZDogaHVmZm1hbiBlbmNvZGVkPSVkXG4iLCBpbmZsYXRlci0+aHVmZm1hbl9lbmNvZGVkICE9IDApOworICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX1JFQURfTkFNRUxFTjoKKyAgICAgIHJmaW4gPSAwOworICAgICAgcnYgPSBoZF9pbmZsYXRlX3JlYWRfbGVuKGluZmxhdGVyLCAmcmZpbiwgaW4sIGxhc3QsIDcsIE5HSFRUUDJfSERfTUFYX05WKTsKKyAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgICAgaW4gKz0gcnY7CisgICAgICBpZiAoIXJmaW4pIHsKKyAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGludGVnZXIgbm90IGZ1bGx5IGRlY29kZWQuIGN1cnJlbnQ9JXp1XG4iLAorICAgICAgICAgICAgICAgaW5mbGF0ZXItPmxlZnQpOworCisgICAgICAgIGdvdG8gYWxtb3N0X29rOworICAgICAgfQorCisgICAgICBpZiAoaW5mbGF0ZXItPmh1ZmZtYW5fZW5jb2RlZCkgeworICAgICAgICBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHRfaW5pdCgmaW5mbGF0ZXItPmh1ZmZfZGVjb2RlX2N0eCk7CisKKyAgICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX1JFQURfTkFNRUhVRkY7CisKKyAgICAgICAgcnYgPSBuZ2h0dHAyX3JjYnVmX25ldygmaW5mbGF0ZXItPm5hbWVyY2J1ZiwgaW5mbGF0ZXItPmxlZnQgKiAyICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX1JFQURfTkFNRTsKKyAgICAgICAgcnYgPSBuZ2h0dHAyX3JjYnVmX25ldygmaW5mbGF0ZXItPm5hbWVyY2J1ZiwgaW5mbGF0ZXItPmxlZnQgKyAxLCBtZW0pOworICAgICAgfQorCisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIG5naHR0cDJfYnVmX3dyYXBfaW5pdCgmaW5mbGF0ZXItPm5hbWVidWYsIGluZmxhdGVyLT5uYW1lcmNidWYtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZXItPm5hbWVyY2J1Zi0+bGVuKTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX05FV05BTUVfUkVBRF9OQU1FSFVGRjoKKyAgICAgIHJ2ID0gaGRfaW5mbGF0ZV9yZWFkX2h1ZmYoaW5mbGF0ZXIsICZpbmZsYXRlci0+bmFtZWJ1ZiwgaW4sIGxhc3QpOworICAgICAgaWYgKHJ2IDwgMCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisKKyAgICAgIGluICs9IHJ2OworCisgICAgICBERUJVR0YoImluZmxhdGVoZDogJXpkIGJ5dGVzIHJlYWRcbiIsIHJ2KTsKKworICAgICAgaWYgKGluZmxhdGVyLT5sZWZ0KSB7CisgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiBzdGlsbCAlenUgYnl0ZXMgdG8gZ29cbiIsIGluZmxhdGVyLT5sZWZ0KTsKKworICAgICAgICBnb3RvIGFsbW9zdF9vazsKKyAgICAgIH0KKworICAgICAgKmluZmxhdGVyLT5uYW1lYnVmLmxhc3QgPSAnXDAnOworICAgICAgaW5mbGF0ZXItPm5hbWVyY2J1Zi0+bGVuID0gbmdodHRwMl9idWZfbGVuKCZpbmZsYXRlci0+bmFtZWJ1Zik7CisKKyAgICAgIGluZmxhdGVyLT5zdGF0ZSA9IE5HSFRUUDJfSERfU1RBVEVfQ0hFQ0tfVkFMVUVMRU47CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX1JFQURfTkFNRToKKyAgICAgIHJ2ID0gaGRfaW5mbGF0ZV9yZWFkKGluZmxhdGVyLCAmaW5mbGF0ZXItPm5hbWVidWYsIGluLCBsYXN0KTsKKyAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBpbiArPSBydjsKKworICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6ICV6ZCBieXRlcyByZWFkXG4iLCBydik7CisgICAgICBpZiAoaW5mbGF0ZXItPmxlZnQpIHsKKyAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IHN0aWxsICV6dSBieXRlcyB0byBnb1xuIiwgaW5mbGF0ZXItPmxlZnQpOworCisgICAgICAgIGdvdG8gYWxtb3N0X29rOworICAgICAgfQorCisgICAgICAqaW5mbGF0ZXItPm5hbWVidWYubGFzdCA9ICdcMCc7CisgICAgICBpbmZsYXRlci0+bmFtZXJjYnVmLT5sZW4gPSBuZ2h0dHAyX2J1Zl9sZW4oJmluZmxhdGVyLT5uYW1lYnVmKTsKKworICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9DSEVDS19WQUxVRUxFTjsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0hEX1NUQVRFX0NIRUNLX1ZBTFVFTEVOOgorICAgICAgaGRfaW5mbGF0ZV9zZXRfaHVmZm1hbl9lbmNvZGVkKGluZmxhdGVyLCBpbik7CisgICAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVkFMVUVMRU47CisgICAgICBpbmZsYXRlci0+bGVmdCA9IDA7CisgICAgICBpbmZsYXRlci0+c2hpZnQgPSAwOworICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGh1ZmZtYW4gZW5jb2RlZD0lZFxuIiwgaW5mbGF0ZXItPmh1ZmZtYW5fZW5jb2RlZCAhPSAwKTsKKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfUkVBRF9WQUxVRUxFTjoKKyAgICAgIHJmaW4gPSAwOworICAgICAgcnYgPSBoZF9pbmZsYXRlX3JlYWRfbGVuKGluZmxhdGVyLCAmcmZpbiwgaW4sIGxhc3QsIDcsIE5HSFRUUDJfSERfTUFYX05WKTsKKyAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBpbiArPSBydjsKKworICAgICAgaWYgKCFyZmluKSB7CisgICAgICAgIGdvdG8gYWxtb3N0X29rOworICAgICAgfQorCisgICAgICBERUJVR0YoImluZmxhdGVoZDogdmFsdWVsZW49JXp1XG4iLCBpbmZsYXRlci0+bGVmdCk7CisKKyAgICAgIGlmIChpbmZsYXRlci0+aHVmZm1hbl9lbmNvZGVkKSB7CisgICAgICAgIG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfY29udGV4dF9pbml0KCZpbmZsYXRlci0+aHVmZl9kZWNvZGVfY3R4KTsKKworICAgICAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVkFMVUVIVUZGOworCisgICAgICAgIHJ2ID0gbmdodHRwMl9yY2J1Zl9uZXcoJmluZmxhdGVyLT52YWx1ZXJjYnVmLCBpbmZsYXRlci0+bGVmdCAqIDIgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVkFMVUU7CisKKyAgICAgICAgcnYgPSBuZ2h0dHAyX3JjYnVmX25ldygmaW5mbGF0ZXItPnZhbHVlcmNidWYsIGluZmxhdGVyLT5sZWZ0ICsgMSwgbWVtKTsKKyAgICAgIH0KKworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJmluZmxhdGVyLT52YWx1ZWJ1ZiwgaW5mbGF0ZXItPnZhbHVlcmNidWYtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZXItPnZhbHVlcmNidWYtPmxlbik7CisKKyAgICAgIGJ1c3kgPSAxOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfUkVBRF9WQUxVRUhVRkY6CisgICAgICBydiA9IGhkX2luZmxhdGVfcmVhZF9odWZmKGluZmxhdGVyLCAmaW5mbGF0ZXItPnZhbHVlYnVmLCBpbiwgbGFzdCk7CisgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgaW4gKz0gcnY7CisKKyAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiAlemQgYnl0ZXMgcmVhZFxuIiwgcnYpOworCisgICAgICBpZiAoaW5mbGF0ZXItPmxlZnQpIHsKKyAgICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6IHN0aWxsICV6dSBieXRlcyB0byBnb1xuIiwgaW5mbGF0ZXItPmxlZnQpOworCisgICAgICAgIGdvdG8gYWxtb3N0X29rOworICAgICAgfQorCisgICAgICAqaW5mbGF0ZXItPnZhbHVlYnVmLmxhc3QgPSAnXDAnOworICAgICAgaW5mbGF0ZXItPnZhbHVlcmNidWYtPmxlbiA9IG5naHR0cDJfYnVmX2xlbigmaW5mbGF0ZXItPnZhbHVlYnVmKTsKKworICAgICAgaWYgKGluZmxhdGVyLT5vcGNvZGUgPT0gTkdIVFRQMl9IRF9PUENPREVfTkVXTkFNRSkgeworICAgICAgICBydiA9IGhkX2luZmxhdGVfY29tbWl0X25ld25hbWUoaW5mbGF0ZXIsIG52X291dCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBydiA9IGhkX2luZmxhdGVfY29tbWl0X2luZG5hbWUoaW5mbGF0ZXIsIG52X291dCk7CisgICAgICB9CisKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9PUENPREU7CisgICAgICAqaW5mbGF0ZV9mbGFncyB8PSBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVDsKKworICAgICAgcmV0dXJuIChzc2l6ZV90KShpbiAtIGZpcnN0KTsKKyAgICBjYXNlIE5HSFRUUDJfSERfU1RBVEVfUkVBRF9WQUxVRToKKyAgICAgIHJ2ID0gaGRfaW5mbGF0ZV9yZWFkKGluZmxhdGVyLCAmaW5mbGF0ZXItPnZhbHVlYnVmLCBpbiwgbGFzdCk7CisgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiB2YWx1ZSByZWFkIGZhaWx1cmUgJXpkOiAlc1xuIiwgcnYsCisgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVycm9yKChpbnQpcnYpKTsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorCisgICAgICBpbiArPSBydjsKKworICAgICAgREVCVUdGKCJpbmZsYXRlaGQ6ICV6ZCBieXRlcyByZWFkXG4iLCBydik7CisKKyAgICAgIGlmIChpbmZsYXRlci0+bGVmdCkgeworICAgICAgICBERUJVR0YoImluZmxhdGVoZDogc3RpbGwgJXp1IGJ5dGVzIHRvIGdvXG4iLCBpbmZsYXRlci0+bGVmdCk7CisgICAgICAgIGdvdG8gYWxtb3N0X29rOworICAgICAgfQorCisgICAgICAqaW5mbGF0ZXItPnZhbHVlYnVmLmxhc3QgPSAnXDAnOworICAgICAgaW5mbGF0ZXItPnZhbHVlcmNidWYtPmxlbiA9IG5naHR0cDJfYnVmX2xlbigmaW5mbGF0ZXItPnZhbHVlYnVmKTsKKworICAgICAgaWYgKGluZmxhdGVyLT5vcGNvZGUgPT0gTkdIVFRQMl9IRF9PUENPREVfTkVXTkFNRSkgeworICAgICAgICBydiA9IGhkX2luZmxhdGVfY29tbWl0X25ld25hbWUoaW5mbGF0ZXIsIG52X291dCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBydiA9IGhkX2luZmxhdGVfY29tbWl0X2luZG5hbWUoaW5mbGF0ZXIsIG52X291dCk7CisgICAgICB9CisKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKworICAgICAgaW5mbGF0ZXItPnN0YXRlID0gTkdIVFRQMl9IRF9TVEFURV9PUENPREU7CisgICAgICAqaW5mbGF0ZV9mbGFncyB8PSBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVDsKKworICAgICAgcmV0dXJuIChzc2l6ZV90KShpbiAtIGZpcnN0KTsKKyAgICB9CisgIH0KKworICBhc3NlcnQoaW4gPT0gbGFzdCk7CisKKyAgREVCVUdGKCJpbmZsYXRlaGQ6IGFsbCBpbnB1dCBieXRlcyB3ZXJlIHByb2Nlc3NlZFxuIik7CisKKyAgaWYgKGluX2ZpbmFsKSB7CisgICAgREVCVUdGKCJpbmZsYXRlaGQ6IGluX2ZpbmFsIHNldFxuIik7CisKKyAgICBpZiAoaW5mbGF0ZXItPnN0YXRlICE9IE5HSFRUUDJfSERfU1RBVEVfT1BDT0RFICYmCisgICAgICAgIGluZmxhdGVyLT5zdGF0ZSAhPSBOR0hUVFAyX0hEX1NUQVRFX0lORkxBVEVfU1RBUlQpIHsKKyAgICAgIERFQlVHRigiaW5mbGF0ZWhkOiB1bmFjY2VwdGFibGUgc3RhdGU9JWRcbiIsIGluZmxhdGVyLT5zdGF0ZSk7CisgICAgICBydiA9IE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworCisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgICppbmZsYXRlX2ZsYWdzIHw9IE5HSFRUUDJfSERfSU5GTEFURV9GSU5BTDsKKyAgfQorICByZXR1cm4gKHNzaXplX3QpKGluIC0gZmlyc3QpOworCithbG1vc3Rfb2s6CisgIGlmIChpbl9maW5hbCkgeworICAgIERFQlVHRigiaW5mbGF0ZWhkOiBpbnB1dCBlbmRlZCBwcmVtYXR1cmVseVxuIik7CisKKyAgICBydiA9IE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworCisgICAgZ290byBmYWlsOworICB9CisgIHJldHVybiAoc3NpemVfdCkoaW4gLSBmaXJzdCk7CisKK2ZhaWw6CisgIERFQlVHRigiaW5mbGF0ZWhkOiBlcnJvciByZXR1cm4gJXpkXG4iLCBydik7CisKKyAgaW5mbGF0ZXItPmN0eC5iYWQgPSAxOworICByZXR1cm4gcnY7Cit9CisKK2ludCBuZ2h0dHAyX2hkX2luZmxhdGVfZW5kX2hlYWRlcnMobmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXIpIHsKKyAgaGRfaW5mbGF0ZV9rZWVwX2ZyZWUoaW5mbGF0ZXIpOworICBpbmZsYXRlci0+c3RhdGUgPSBOR0hUVFAyX0hEX1NUQVRFX0lORkxBVEVfU1RBUlQ7CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9oZF9pbmZsYXRlX25ldyhuZ2h0dHAyX2hkX2luZmxhdGVyICoqaW5mbGF0ZXJfcHRyKSB7CisgIHJldHVybiBuZ2h0dHAyX2hkX2luZmxhdGVfbmV3MihpbmZsYXRlcl9wdHIsIE5VTEwpOworfQorCitpbnQgbmdodHRwMl9oZF9pbmZsYXRlX25ldzIobmdodHRwMl9oZF9pbmZsYXRlciAqKmluZmxhdGVyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9oZF9pbmZsYXRlciAqaW5mbGF0ZXI7CisKKyAgaWYgKG1lbSA9PSBOVUxMKSB7CisgICAgbWVtID0gbmdodHRwMl9tZW1fZGVmYXVsdCgpOworICB9CisKKyAgaW5mbGF0ZXIgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9oZF9pbmZsYXRlcikpOworCisgIGlmIChpbmZsYXRlciA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgcnYgPSBuZ2h0dHAyX2hkX2luZmxhdGVfaW5pdChpbmZsYXRlciwgbWVtKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpbmZsYXRlcik7CisKKyAgICByZXR1cm4gcnY7CisgIH0KKworICAqaW5mbGF0ZXJfcHRyID0gaW5mbGF0ZXI7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9oZF9pbmZsYXRlX2RlbChuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlcikgeworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9IGluZmxhdGVyLT5jdHgubWVtOworICBuZ2h0dHAyX2hkX2luZmxhdGVfZnJlZShpbmZsYXRlcik7CisKKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGluZmxhdGVyKTsKK30KKworaW50IG5naHR0cDJfaGRfZW1pdF9pbmRuYW1lX2Jsb2NrKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX252ICpudiwgaW50IGluZGV4aW5nX21vZGUpIHsKKworICByZXR1cm4gZW1pdF9pbmRuYW1lX2Jsb2NrKGJ1ZnMsIGlkeCwgbnYsIGluZGV4aW5nX21vZGUpOworfQorCitpbnQgbmdodHRwMl9oZF9lbWl0X25ld25hbWVfYmxvY2sobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX252ICpudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXhpbmdfbW9kZSkgeworICByZXR1cm4gZW1pdF9uZXduYW1lX2Jsb2NrKGJ1ZnMsIG52LCBpbmRleGluZ19tb2RlKTsKK30KKworaW50IG5naHR0cDJfaGRfZW1pdF90YWJsZV9zaXplKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IHRhYmxlX3NpemUpIHsKKyAgcmV0dXJuIGVtaXRfdGFibGVfc2l6ZShidWZzLCB0YWJsZV9zaXplKTsKK30KKworc3NpemVfdCBuZ2h0dHAyX2hkX2RlY29kZV9sZW5ndGgodWludDMyX3QgKnJlcywgc2l6ZV90ICpzaGlmdF9wdHIsIGludCAqZmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5pdGlhbCwgc2l6ZV90IHNoaWZ0LCB1aW50OF90ICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmxhc3QsIHNpemVfdCBwcmVmaXgpIHsKKyAgcmV0dXJuIGRlY29kZV9sZW5ndGgocmVzLCBzaGlmdF9wdHIsIGZpbiwgaW5pdGlhbCwgc2hpZnQsIGluLCBsYXN0LCBwcmVmaXgpOworfQorCitzdGF0aWMgY29uc3QgbmdodHRwMl9udiAqaGRfZ2V0X3RhYmxlX2VudHJ5KG5naHR0cDJfaGRfY29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlkeCkgeworICBpZiAoaWR4ID09IDApIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIC0taWR4OworCisgIGlmICghSU5ERVhfUkFOR0VfVkFMSUQoY29udGV4dCwgaWR4KSkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcmV0dXJuIG5naHR0cDJfaGRfdGFibGVfZ2V0Mihjb250ZXh0LCBpZHgpOworfQorCitzaXplX3QgbmdodHRwMl9oZF9kZWZsYXRlX2dldF9udW1fdGFibGVfZW50cmllcyhuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlcikgeworICByZXR1cm4gZ2V0X21heF9pbmRleCgmZGVmbGF0ZXItPmN0eCk7Cit9CisKK2NvbnN0IG5naHR0cDJfbnYgKgorbmdodHRwMl9oZF9kZWZsYXRlX2dldF90YWJsZV9lbnRyeShuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwgc2l6ZV90IGlkeCkgeworICByZXR1cm4gaGRfZ2V0X3RhYmxlX2VudHJ5KCZkZWZsYXRlci0+Y3R4LCBpZHgpOworfQorCitzaXplX3QKK25naHR0cDJfaGRfZGVmbGF0ZV9nZXRfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKSB7CisgIHJldHVybiBkZWZsYXRlci0+Y3R4LmhkX3RhYmxlX2J1ZnNpemU7Cit9CisKK3NpemVfdAorbmdodHRwMl9oZF9kZWZsYXRlX2dldF9tYXhfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfaGRfZGVmbGF0ZXIgKmRlZmxhdGVyKSB7CisgIHJldHVybiBkZWZsYXRlci0+Y3R4LmhkX3RhYmxlX2J1ZnNpemVfbWF4OworfQorCitzaXplX3QgbmdodHRwMl9oZF9pbmZsYXRlX2dldF9udW1fdGFibGVfZW50cmllcyhuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlcikgeworICByZXR1cm4gZ2V0X21heF9pbmRleCgmaW5mbGF0ZXItPmN0eCk7Cit9CisKK2NvbnN0IG5naHR0cDJfbnYgKgorbmdodHRwMl9oZF9pbmZsYXRlX2dldF90YWJsZV9lbnRyeShuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwgc2l6ZV90IGlkeCkgeworICByZXR1cm4gaGRfZ2V0X3RhYmxlX2VudHJ5KCZpbmZsYXRlci0+Y3R4LCBpZHgpOworfQorCitzaXplX3QKK25naHR0cDJfaGRfaW5mbGF0ZV9nZXRfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyKSB7CisgIHJldHVybiBpbmZsYXRlci0+Y3R4LmhkX3RhYmxlX2J1ZnNpemU7Cit9CisKK3NpemVfdAorbmdodHRwMl9oZF9pbmZsYXRlX2dldF9tYXhfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyKSB7CisgIHJldHVybiBpbmZsYXRlci0+Y3R4LmhkX3RhYmxlX2J1ZnNpemVfbWF4OworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZC5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NzQwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hkLmgKQEAgLTAsMCArMSw0MzkgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX0hEX0gKKyNkZWZpbmUgTkdIVFRQMl9IRF9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKworI2luY2x1ZGUgIm5naHR0cDJfaGRfaHVmZm1hbi5oIgorI2luY2x1ZGUgIm5naHR0cDJfYnVmLmgiCisjaW5jbHVkZSAibmdodHRwMl9tZW0uaCIKKyNpbmNsdWRlICJuZ2h0dHAyX3JjYnVmLmgiCisKKyNkZWZpbmUgTkdIVFRQMl9IRF9ERUZBVUxUX01BWF9CVUZGRVJfU0laRSBOR0hUVFAyX0RFRkFVTFRfSEVBREVSX1RBQkxFX1NJWkUKKyNkZWZpbmUgTkdIVFRQMl9IRF9FTlRSWV9PVkVSSEVBRCAzMgorCisvKiBUaGUgbWF4aW11bSBsZW5ndGggb2Ygb25lIG5hbWUvdmFsdWUgcGFpci4gIFRoaXMgaXMgdGhlIHN1bSBvZiB0aGUKKyAgIGxlbmd0aCBvZiBuYW1lIGFuZCB2YWx1ZS4gIFRoaXMgaXMgbm90IHNwZWNpZmllZCBieSB0aGUgc3BlYy4gV2UKKyAgIGp1c3QgY2hvc2UgdGhlIGFyYml0cmFyeSBzaXplICovCisjZGVmaW5lIE5HSFRUUDJfSERfTUFYX05WIDY1NTM2CisKKy8qIERlZmF1bHQgc2l6ZSBvZiBtYXhpbXVtIHRhYmxlIGJ1ZmZlciBzaXplIGZvciBlbmNvZGVyLiBFdmVuIGlmCisgICByZW1vdGUgZGVjb2RlciBub3RpZmllcyBsYXJnZXIgYnVmZmVyIHNpemUgZm9yIGl0cyBkZWNvZGluZywKKyAgIGVuY29kZXIgb25seSB1c2VzIHRoZSBtZW1vcnkgdXAgdG8gdGhpcyB2YWx1ZS4gKi8KKyNkZWZpbmUgTkdIVFRQMl9IRF9ERUZBVUxUX01BWF9ERUZMQVRFX0JVRkZFUl9TSVpFICgxIDw8IDEyKQorCisvKiBFeHBvcnRlZCBmb3IgdW5pdCB0ZXN0ICovCisjZGVmaW5lIE5HSFRUUDJfU1RBVElDX1RBQkxFX0xFTkdUSCA2MQorCisvKiBHZW5lcmF0ZWQgYnkgZ2VubGlidG9rZW5sb29rdXAucHkgKi8KK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfVE9LRU5fX0FVVEhPUklUWSA9IDAsCisgIE5HSFRUUDJfVE9LRU5fX01FVEhPRCA9IDEsCisgIE5HSFRUUDJfVE9LRU5fX1BBVEggPSAzLAorICBOR0hUVFAyX1RPS0VOX19TQ0hFTUUgPSA1LAorICBOR0hUVFAyX1RPS0VOX19TVEFUVVMgPSA3LAorICBOR0hUVFAyX1RPS0VOX0FDQ0VQVF9DSEFSU0VUID0gMTQsCisgIE5HSFRUUDJfVE9LRU5fQUNDRVBUX0VOQ09ESU5HID0gMTUsCisgIE5HSFRUUDJfVE9LRU5fQUNDRVBUX0xBTkdVQUdFID0gMTYsCisgIE5HSFRUUDJfVE9LRU5fQUNDRVBUX1JBTkdFUyA9IDE3LAorICBOR0hUVFAyX1RPS0VOX0FDQ0VQVCA9IDE4LAorICBOR0hUVFAyX1RPS0VOX0FDQ0VTU19DT05UUk9MX0FMTE9XX09SSUdJTiA9IDE5LAorICBOR0hUVFAyX1RPS0VOX0FHRSA9IDIwLAorICBOR0hUVFAyX1RPS0VOX0FMTE9XID0gMjEsCisgIE5HSFRUUDJfVE9LRU5fQVVUSE9SSVpBVElPTiA9IDIyLAorICBOR0hUVFAyX1RPS0VOX0NBQ0hFX0NPTlRST0wgPSAyMywKKyAgTkdIVFRQMl9UT0tFTl9DT05URU5UX0RJU1BPU0lUSU9OID0gMjQsCisgIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9FTkNPRElORyA9IDI1LAorICBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfTEFOR1VBR0UgPSAyNiwKKyAgTkdIVFRQMl9UT0tFTl9DT05URU5UX0xFTkdUSCA9IDI3LAorICBOR0hUVFAyX1RPS0VOX0NPTlRFTlRfTE9DQVRJT04gPSAyOCwKKyAgTkdIVFRQMl9UT0tFTl9DT05URU5UX1JBTkdFID0gMjksCisgIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9UWVBFID0gMzAsCisgIE5HSFRUUDJfVE9LRU5fQ09PS0lFID0gMzEsCisgIE5HSFRUUDJfVE9LRU5fREFURSA9IDMyLAorICBOR0hUVFAyX1RPS0VOX0VUQUcgPSAzMywKKyAgTkdIVFRQMl9UT0tFTl9FWFBFQ1QgPSAzNCwKKyAgTkdIVFRQMl9UT0tFTl9FWFBJUkVTID0gMzUsCisgIE5HSFRUUDJfVE9LRU5fRlJPTSA9IDM2LAorICBOR0hUVFAyX1RPS0VOX0hPU1QgPSAzNywKKyAgTkdIVFRQMl9UT0tFTl9JRl9NQVRDSCA9IDM4LAorICBOR0hUVFAyX1RPS0VOX0lGX01PRElGSUVEX1NJTkNFID0gMzksCisgIE5HSFRUUDJfVE9LRU5fSUZfTk9ORV9NQVRDSCA9IDQwLAorICBOR0hUVFAyX1RPS0VOX0lGX1JBTkdFID0gNDEsCisgIE5HSFRUUDJfVE9LRU5fSUZfVU5NT0RJRklFRF9TSU5DRSA9IDQyLAorICBOR0hUVFAyX1RPS0VOX0xBU1RfTU9ESUZJRUQgPSA0MywKKyAgTkdIVFRQMl9UT0tFTl9MSU5LID0gNDQsCisgIE5HSFRUUDJfVE9LRU5fTE9DQVRJT04gPSA0NSwKKyAgTkdIVFRQMl9UT0tFTl9NQVhfRk9SV0FSRFMgPSA0NiwKKyAgTkdIVFRQMl9UT0tFTl9QUk9YWV9BVVRIRU5USUNBVEUgPSA0NywKKyAgTkdIVFRQMl9UT0tFTl9QUk9YWV9BVVRIT1JJWkFUSU9OID0gNDgsCisgIE5HSFRUUDJfVE9LRU5fUkFOR0UgPSA0OSwKKyAgTkdIVFRQMl9UT0tFTl9SRUZFUkVSID0gNTAsCisgIE5HSFRUUDJfVE9LRU5fUkVGUkVTSCA9IDUxLAorICBOR0hUVFAyX1RPS0VOX1JFVFJZX0FGVEVSID0gNTIsCisgIE5HSFRUUDJfVE9LRU5fU0VSVkVSID0gNTMsCisgIE5HSFRUUDJfVE9LRU5fU0VUX0NPT0tJRSA9IDU0LAorICBOR0hUVFAyX1RPS0VOX1NUUklDVF9UUkFOU1BPUlRfU0VDVVJJVFkgPSA1NSwKKyAgTkdIVFRQMl9UT0tFTl9UUkFOU0ZFUl9FTkNPRElORyA9IDU2LAorICBOR0hUVFAyX1RPS0VOX1VTRVJfQUdFTlQgPSA1NywKKyAgTkdIVFRQMl9UT0tFTl9WQVJZID0gNTgsCisgIE5HSFRUUDJfVE9LRU5fVklBID0gNTksCisgIE5HSFRUUDJfVE9LRU5fV1dXX0FVVEhFTlRJQ0FURSA9IDYwLAorICBOR0hUVFAyX1RPS0VOX1RFLAorICBOR0hUVFAyX1RPS0VOX0NPTk5FQ1RJT04sCisgIE5HSFRUUDJfVE9LRU5fS0VFUF9BTElWRSwKKyAgTkdIVFRQMl9UT0tFTl9QUk9YWV9DT05ORUNUSU9OLAorICBOR0hUVFAyX1RPS0VOX1VQR1JBREUsCisgIE5HSFRUUDJfVE9LRU5fX1BST1RPQ09MLAorfSBuZ2h0dHAyX3Rva2VuOworCitzdHJ1Y3QgbmdodHRwMl9oZF9lbnRyeTsKK3R5cGVkZWYgc3RydWN0IG5naHR0cDJfaGRfZW50cnkgbmdodHRwMl9oZF9lbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgaGVhZGVyIGZpZWxkIG5hbWUuICBOVUxMLXRlcm1pbmF0aW9uIGlzCisgICAgIGd1YXJhbnRlZWQuICovCisgIG5naHR0cDJfcmNidWYgKm5hbWU7CisgIC8qIFRoZSBidWZmZXIgY29udGFpbmluZyBoZWFkZXIgZmllbGQgdmFsdWUuICBOVUxMLXRlcm1pbmF0aW9uIGlzCisgICAgIGd1YXJhbnRlZWQuICovCisgIG5naHR0cDJfcmNidWYgKnZhbHVlOworICAvKiBuZ2h0dHAyX3Rva2VuIHZhbHVlIGZvciBuYW1lLiAgSXQgY291bGQgYmUgLTEgaWYgd2UgaGF2ZSBubyB0b2tlbgorICAgICBmb3IgdGhhdCBoZWFkZXIgZmllbGQgbmFtZS4gKi8KKyAgaW50MzJfdCB0b2tlbjsKKyAgLyogQml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiBuZ2h0dHAyX252X2ZsYWcuICovCisgIHVpbnQ4X3QgZmxhZ3M7Cit9IG5naHR0cDJfaGRfbnY7CisKK3N0cnVjdCBuZ2h0dHAyX2hkX2VudHJ5IHsKKyAgLyogVGhlIGhlYWRlciBmaWVsZCBuYW1lL3ZhbHVlIHBhaXIgKi8KKyAgbmdodHRwMl9oZF9udiBudjsKKyAgLyogVGhpcyBpcyBzb2xlbHkgZm9yIG5naHR0cDJfaGRfe2RlZmxhdGUsaW5mbGF0ZX1fZ2V0X3RhYmxlX2VudHJ5CisgICAgIEFQSXMgdG8ga2VlcCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLworICBuZ2h0dHAyX252IGNudjsKKyAgLyogVGhlIG5leHQgZW50cnkgd2hpY2ggc2hhcmVzIHNhbWUgYnVja2V0IGluIGhhc2ggdGFibGUuICovCisgIG5naHR0cDJfaGRfZW50cnkgKm5leHQ7CisgIC8qIFRoZSBzZXF1ZW5jZSBudW1iZXIuICBXZSB3aWxsIGluY3JlbWVudCBpdCBieSBvbmUgd2hlbmV2ZXIgd2UKKyAgICAgc3RvcmUgbmdodHRwMl9oZF9lbnRyeSB0byBkeW5hbWljIGhlYWRlciB0YWJsZS4gKi8KKyAgdWludDMyX3Qgc2VxOworICAvKiBUaGUgaGFzaCB2YWx1ZSBmb3IgaGVhZGVyIG5hbWUgKG52Lm5hbWUpLiAqLworICB1aW50MzJfdCBoYXNoOworfTsKKworLyogVGhlIGVudHJ5IHVzZWQgZm9yIHN0YXRpYyBoZWFkZXIgdGFibGUuICovCit0eXBlZGVmIHN0cnVjdCB7CisgIG5naHR0cDJfcmNidWYgbmFtZTsKKyAgbmdodHRwMl9yY2J1ZiB2YWx1ZTsKKyAgbmdodHRwMl9udiBjbnY7CisgIGludDMyX3QgdG9rZW47CisgIHVpbnQzMl90IGhhc2g7Cit9IG5naHR0cDJfaGRfc3RhdGljX2VudHJ5OworCit0eXBlZGVmIHN0cnVjdCB7CisgIG5naHR0cDJfaGRfZW50cnkgKipidWZmZXI7CisgIHNpemVfdCBtYXNrOworICBzaXplX3QgZmlyc3Q7CisgIHNpemVfdCBsZW47Cit9IG5naHR0cDJfaGRfcmluZ2J1ZjsKKwordHlwZWRlZiBlbnVtIHsKKyAgTkdIVFRQMl9IRF9PUENPREVfTk9ORSwKKyAgTkdIVFRQMl9IRF9PUENPREVfSU5ERVhFRCwKKyAgTkdIVFRQMl9IRF9PUENPREVfTkVXTkFNRSwKKyAgTkdIVFRQMl9IRF9PUENPREVfSU5ETkFNRQorfSBuZ2h0dHAyX2hkX29wY29kZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgTkdIVFRQMl9IRF9TVEFURV9FWFBFQ1RfVEFCTEVfU0laRSwKKyAgTkdIVFRQMl9IRF9TVEFURV9JTkZMQVRFX1NUQVJULAorICBOR0hUVFAyX0hEX1NUQVRFX09QQ09ERSwKKyAgTkdIVFRQMl9IRF9TVEFURV9SRUFEX1RBQkxFX1NJWkUsCisgIE5HSFRUUDJfSERfU1RBVEVfUkVBRF9JTkRFWCwKKyAgTkdIVFRQMl9IRF9TVEFURV9ORVdOQU1FX0NIRUNLX05BTUVMRU4sCisgIE5HSFRUUDJfSERfU1RBVEVfTkVXTkFNRV9SRUFEX05BTUVMRU4sCisgIE5HSFRUUDJfSERfU1RBVEVfTkVXTkFNRV9SRUFEX05BTUVIVUZGLAorICBOR0hUVFAyX0hEX1NUQVRFX05FV05BTUVfUkVBRF9OQU1FLAorICBOR0hUVFAyX0hEX1NUQVRFX0NIRUNLX1ZBTFVFTEVOLAorICBOR0hUVFAyX0hEX1NUQVRFX1JFQURfVkFMVUVMRU4sCisgIE5HSFRUUDJfSERfU1RBVEVfUkVBRF9WQUxVRUhVRkYsCisgIE5HSFRUUDJfSERfU1RBVEVfUkVBRF9WQUxVRQorfSBuZ2h0dHAyX2hkX2luZmxhdGVfc3RhdGU7CisKK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfSERfV0lUSF9JTkRFWElORywKKyAgTkdIVFRQMl9IRF9XSVRIT1VUX0lOREVYSU5HLAorICBOR0hUVFAyX0hEX05FVkVSX0lOREVYSU5HCit9IG5naHR0cDJfaGRfaW5kZXhpbmdfbW9kZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBkeW5hbWljIGhlYWRlciB0YWJsZSAqLworICBuZ2h0dHAyX2hkX3JpbmdidWYgaGRfdGFibGU7CisgIC8qIE1lbW9yeSBhbGxvY2F0b3IgKi8KKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgLyogQWJzdHJhY3QgYnVmZmVyIHNpemUgb2YgaGRfdGFibGUgYXMgZGVzY3JpYmVkIGluIHRoZSBzcGVjLiBUaGlzCisgICAgIGlzIHRoZSBzdW0gb2YgbGVuZ3RoIG9mIG5hbWUvdmFsdWUgaW4gaGRfdGFibGUgKworICAgICBOR0hUVFAyX0hEX0VOVFJZX09WRVJIRUFEIGJ5dGVzIG92ZXJoZWFkIHBlciBlYWNoIGVudHJ5LiAqLworICBzaXplX3QgaGRfdGFibGVfYnVmc2l6ZTsKKyAgLyogVGhlIGVmZmVjdGl2ZSBoZWFkZXIgdGFibGUgc2l6ZS4gKi8KKyAgc2l6ZV90IGhkX3RhYmxlX2J1ZnNpemVfbWF4OworICAvKiBOZXh0IHNlcXVlbmNlIG51bWJlciBmb3IgbmdodHRwMl9oZF9lbnRyeSAqLworICB1aW50MzJfdCBuZXh0X3NlcTsKKyAgLyogSWYgaW5mbGF0ZS9kZWZsYXRlIGVycm9yIG9jY3VycmVkLCB0aGlzIHZhbHVlIGlzIHNldCB0byAxIGFuZAorICAgICBmdXJ0aGVyIGludm9jYXRpb24gb2YgaW5mbGF0ZS9kZWZsYXRlIHdpbGwgZmFpbCB3aXRoCisgICAgIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QLiAqLworICB1aW50OF90IGJhZDsKK30gbmdodHRwMl9oZF9jb250ZXh0OworCisjZGVmaW5lIEhEX01BUF9TSVpFIDEyOAorCit0eXBlZGVmIHN0cnVjdCB7CisgIG5naHR0cDJfaGRfZW50cnkgKnRhYmxlW0hEX01BUF9TSVpFXTsKK30gbmdodHRwMl9oZF9tYXA7CisKK3N0cnVjdCBuZ2h0dHAyX2hkX2RlZmxhdGVyIHsKKyAgbmdodHRwMl9oZF9jb250ZXh0IGN0eDsKKyAgbmdodHRwMl9oZF9tYXAgbWFwOworICAvKiBUaGUgdXBwZXIgbGltaXQgb2YgdGhlIGhlYWRlciB0YWJsZSBzaXplIHRoZSBkZWZsYXRlciBhY2NlcHRzLiAqLworICBzaXplX3QgZGVmbGF0ZV9oZF90YWJsZV9idWZzaXplX21heDsKKyAgLyogTWluaW11bSBoZWFkZXIgdGFibGUgc2l6ZSBub3RpZmllZCBpbiB0aGUgbmV4dCBjb250ZXh0IHVwZGF0ZSAqLworICBzaXplX3QgbWluX2hkX3RhYmxlX2J1ZnNpemVfbWF4OworICAvKiBJZiBub256ZXJvLCBzZW5kIGhlYWRlciB0YWJsZSBzaXplIHVzaW5nIGVuY29kaW5nIGNvbnRleHQgdXBkYXRlCisgICAgIGluIHRoZSBuZXh0IGRlZmxhdGUgcHJvY2VzcyAqLworICB1aW50OF90IG5vdGlmeV90YWJsZV9zaXplX2NoYW5nZTsKK307CisKK3N0cnVjdCBuZ2h0dHAyX2hkX2luZmxhdGVyIHsKKyAgbmdodHRwMl9oZF9jb250ZXh0IGN0eDsKKyAgLyogU3RvcmVzIGN1cnJlbnQgc3RhdGUgb2YgaHVmZm1hbiBkZWNvZGluZyAqLworICBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHQgaHVmZl9kZWNvZGVfY3R4OworICAvKiBoZWFkZXIgYnVmZmVyICovCisgIG5naHR0cDJfYnVmIG5hbWVidWYsIHZhbHVlYnVmOworICBuZ2h0dHAyX3JjYnVmICpuYW1lcmNidWYsICp2YWx1ZXJjYnVmOworICAvKiBQb2ludGVyIHRvIHRoZSBuYW1lL3ZhbHVlIHBhaXIgd2hpY2ggYXJlIHVzZWQgaW4gdGhlIGN1cnJlbnQKKyAgICAgaGVhZGVyIGVtaXNzaW9uLiAqLworICBuZ2h0dHAyX3JjYnVmICpudl9uYW1lX2tlZXAsICpudl92YWx1ZV9rZWVwOworICAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgKi8KKyAgc2l6ZV90IGxlZnQ7CisgIC8qIFRoZSBpbmRleCBpbiBpbmRleGVkIHJlcHIgb3IgaW5kZXhlZCBuYW1lICovCisgIHNpemVfdCBpbmRleDsKKyAgLyogVGhlIG1heGltdW0gaGVhZGVyIHRhYmxlIHNpemUgdGhlIGluZmxhdGVyIHN1cHBvcnRzLiBUaGlzIGlzIHRoZQorICAgICBzYW1lIHZhbHVlIHRyYW5zbWl0dGVkIGluIFNFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFICovCisgIHNpemVfdCBzZXR0aW5nc19oZF90YWJsZV9idWZzaXplX21heDsKKyAgLyogTWluaW11bSBoZWFkZXIgdGFibGUgc2l6ZSBzZXQgYnkgbmdodHRwMl9oZF9pbmZsYXRlX2NoYW5nZV90YWJsZV9zaXplICovCisgIHNpemVfdCBtaW5faGRfdGFibGVfYnVmc2l6ZV9tYXg7CisgIC8qIFRoZSBudW1iZXIgb2YgbmV4dCBzaGlmdCB0byBkZWNvZGUgaW50ZWdlciAqLworICBzaXplX3Qgc2hpZnQ7CisgIG5naHR0cDJfaGRfb3Bjb2RlIG9wY29kZTsKKyAgbmdodHRwMl9oZF9pbmZsYXRlX3N0YXRlIHN0YXRlOworICAvKiBub256ZXJvIGlmIHN0cmluZyBpcyBodWZmbWFuIGVuY29kZWQgKi8KKyAgdWludDhfdCBodWZmbWFuX2VuY29kZWQ7CisgIC8qIG5vbnplcm8gaWYgZGVmbGF0ZXIgcmVxdWlyZXMgdGhhdCBjdXJyZW50IGVudHJ5IGlzIGluZGV4ZWQgKi8KKyAgdWludDhfdCBpbmRleF9yZXF1aXJlZDsKKyAgLyogbm9uemVybyBpZiBkZWZsYXRlciByZXF1aXJlcyB0aGF0IGN1cnJlbnQgZW50cnkgbXVzdCBub3QgYmUKKyAgICAgaW5kZXhlZCAqLworICB1aW50OF90IG5vX2luZGV4OworfTsKKworLyoKKyAqIEluaXRpYWxpemVzIHRoZSB8ZW50fCBtZW1iZXJzLiAgVGhlIHJlZmVyZW5jZSBjb3VudHMgb2YgbnYtPm5hbWUKKyAqIGFuZCBudi0+dmFsdWUgYXJlIGluY3JlYXNlZCBieSBvbmUgZm9yIGVhY2guCisgKi8KK3ZvaWQgbmdodHRwMl9oZF9lbnRyeV9pbml0KG5naHR0cDJfaGRfZW50cnkgKmVudCwgbmdodHRwMl9oZF9udiAqbnYpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2YgbnYtPm5hbWUgYW5kCisgKiBudi0+dmFsdWUuCisgKi8KK3ZvaWQgbmdodHRwMl9oZF9lbnRyeV9mcmVlKG5naHR0cDJfaGRfZW50cnkgKmVudCk7CisKKy8qCisgKiBJbml0aWFsaXplcyB8ZGVmbGF0ZXJ8IGZvciBkZWZsYXRpbmcgbmFtZS92YWx1ZXMgcGFpcnMuCisgKgorICogVGhlIGVuY29kZXIgb25seSB1c2VzIHVwIHRvCisgKiBOR0hUVFAyX0hEX0RFRkFVTFRfTUFYX0RFRkxBVEVfQlVGRkVSX1NJWkUgYnl0ZXMgZm9yIGhlYWRlciB0YWJsZQorICogZXZlbiBpZiB0aGUgbGFyZ2VyIHZhbHVlIGlzIHNwZWNpZmllZCBsYXRlciBpbgorICogbmdodHRwMl9oZF9jaGFuZ2VfdGFibGVfc2l6ZSgpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9oZF9kZWZsYXRlX2luaXQobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogSW5pdGlhbGl6ZXMgfGRlZmxhdGVyfCBmb3IgZGVmbGF0aW5nIG5hbWUvdmFsdWVzIHBhaXJzLgorICoKKyAqIFRoZSBlbmNvZGVyIG9ubHkgdXNlcyB1cCB0byB8bWF4X2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplfCBieXRlcworICogZm9yIGhlYWRlciB0YWJsZSBldmVuIGlmIHRoZSBsYXJnZXIgdmFsdWUgaXMgc3BlY2lmaWVkIGxhdGVyIGluCisgKiBuZ2h0dHAyX2hkX2NoYW5nZV90YWJsZV9zaXplKCkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBuZ2h0dHAyX2hkX2RlZmxhdGVfaW5pdDIobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogRGVhbGxvY2F0ZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHxkZWZsYXRlcnwuCisgKi8KK3ZvaWQgbmdodHRwMl9oZF9kZWZsYXRlX2ZyZWUobmdodHRwMl9oZF9kZWZsYXRlciAqZGVmbGF0ZXIpOworCisvKgorICogRGVmbGF0ZXMgdGhlIHxudmF8LCB3aGljaCBoYXMgdGhlIHxudmxlbnwgbmFtZS92YWx1ZSBwYWlycywgaW50bworICogdGhlIHxidWZzfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGV4cGFuZHMgfGJ1ZnN8IGFzIG5lY2Vzc2FyeSB0byBzdG9yZSB0aGUgcmVzdWx0LiBJZgorICogYnVmZmVycyBpcyBmdWxsIGFuZCB0aGUgcHJvY2VzcyBzdGlsbCByZXF1aXJlcyBtb3JlIHNwYWNlLCB0aGlzCisgKiBmdW5jdGlvbiBmYWlscyBhbmQgcmV0dXJucyBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUC4KKyAqCisgKiBBZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGl0IGlzIHNhZmUgdG8gZGVsZXRlIHRoZSB8bnZhfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QCisgKiAgICAgRGVmbGF0aW9uIHByb2Nlc3MgaGFzIGZhaWxlZC4KKyAqIE5HSFRUUDJfRVJSX0JVRkZFUl9FUlJPUgorICogICAgIE91dCBvZiBidWZmZXIgc3BhY2UuCisgKi8KK2ludCBuZ2h0dHAyX2hkX2RlZmxhdGVfaGRfYnVmcyhuZ2h0dHAyX2hkX2RlZmxhdGVyICpkZWZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2J1ZnMgKmJ1ZnMsIGNvbnN0IG5naHR0cDJfbnYgKm52YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnZsZW4pOworCisvKgorICogSW5pdGlhbGl6ZXMgfGluZmxhdGVyfCBmb3IgaW5mbGF0aW5nIG5hbWUvdmFsdWVzIHBhaXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogOmVudW06YE5HSFRUUDJfRVJSX05PTUVNYAorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBuZ2h0dHAyX2hkX2luZmxhdGVfaW5pdChuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlciwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBEZWFsbG9jYXRlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgfGluZmxhdGVyfC4KKyAqLwordm9pZCBuZ2h0dHAyX2hkX2luZmxhdGVfZnJlZShuZ2h0dHAyX2hkX2luZmxhdGVyICppbmZsYXRlcik7CisKKy8qCisgKiBTaW1pbGFyIHRvIG5naHR0cDJfaGRfaW5mbGF0ZV9oZCgpLCBidXQgdGhpcyB0YWtlcyBuZ2h0dHAyX2hkX252CisgKiBpbnN0ZWFkIG9mIG5naHR0cDJfbnYgYXMgb3V0cHV0IHBhcmFtZXRlciB8bnZfb3V0fC4gIE90aGVyIHRoYW4KKyAqIHRoYXQgcmV0dXJuIHZhbHVlcyBhbmQgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcworICogbmdodHRwMl9oZF9pbmZsYXRlX2hkKCkuCisgKi8KK3NzaXplX3QgbmdodHRwMl9oZF9pbmZsYXRlX2hkX252KG5naHR0cDJfaGRfaW5mbGF0ZXIgKmluZmxhdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9oZF9udiAqbnZfb3V0LCBpbnQgKmluZmxhdGVfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbiwgc2l6ZV90IGlubGVuLCBpbnQgaW5fZmluYWwpOworCisvKiBGb3IgdW5pdHRlc3RpbmcgcHVycG9zZSAqLworaW50IG5naHR0cDJfaGRfZW1pdF9pbmRuYW1lX2Jsb2NrKG5naHR0cDJfYnVmcyAqYnVmcywgc2l6ZV90IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbnYgKm52LCBpbnQgaW5kZXhpbmdfbW9kZSk7CisKKy8qIEZvciB1bml0dGVzdGluZyBwdXJwb3NlICovCitpbnQgbmdodHRwMl9oZF9lbWl0X25ld25hbWVfYmxvY2sobmdodHRwMl9idWZzICpidWZzLCBuZ2h0dHAyX252ICpudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXhpbmdfbW9kZSk7CisKKy8qIEZvciB1bml0dGVzdGluZyBwdXJwb3NlICovCitpbnQgbmdodHRwMl9oZF9lbWl0X3RhYmxlX3NpemUobmdodHRwMl9idWZzICpidWZzLCBzaXplX3QgdGFibGVfc2l6ZSk7CisKKy8qIEZvciB1bml0dGVzdGluZyBwdXJwb3NlICovCituZ2h0dHAyX2hkX252IG5naHR0cDJfaGRfdGFibGVfZ2V0KG5naHR0cDJfaGRfY29udGV4dCAqY29udGV4dCwgc2l6ZV90IGluZGV4KTsKKworLyogRm9yIHVuaXR0ZXN0aW5nIHB1cnBvc2UgKi8KK3NzaXplX3QgbmdodHRwMl9oZF9kZWNvZGVfbGVuZ3RoKHVpbnQzMl90ICpyZXMsIHNpemVfdCAqc2hpZnRfcHRyLCBpbnQgKmZpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluaXRpYWwsIHNpemVfdCBzaGlmdCwgdWludDhfdCAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpsYXN0LCBzaXplX3QgcHJlZml4KTsKKworLyogSHVmZm1hbiBlbmNvZGluZy9kZWNvZGluZyBmdW5jdGlvbnMgKi8KKworLyoKKyAqIENvdW50cyB0aGUgcmVxdWlyZWQgYnl0ZXMgdG8gZW5jb2RlIHxzcmN8IHdpdGggbGVuZ3RoIHxsZW58LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGJ5dGVzIHRvIGVuY29kZSBnaXZlbgorICogZGF0YSwgaW5jbHVkaW5nIHBhZGRpbmcgb2YgcHJlZml4IG9mIHRlcm1pbmFsIHN5bWJvbCBjb2RlLiBUaGlzCisgKiBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMuCisgKi8KK3NpemVfdCBuZ2h0dHAyX2hkX2h1ZmZfZW5jb2RlX2NvdW50KGNvbnN0IHVpbnQ4X3QgKnNyYywgc2l6ZV90IGxlbik7CisKKy8qCisgKiBFbmNvZGVzIHRoZSBnaXZlbiBkYXRhIHxzcmN8IHdpdGggbGVuZ3RoIHxzcmNsZW58IHRvIHRoZSB8YnVmc3wuCisgKiBUaGlzIGZ1bmN0aW9uIGV4cGFuZHMgZXh0cmEgYnVmZmVycyBpbiB8YnVmc3wgaWYgbmVjZXNzYXJ5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfQlVGRkVSX0VSUk9SCisgKiAgICAgT3V0IG9mIGJ1ZmZlciBzcGFjZS4KKyAqLworaW50IG5naHR0cDJfaGRfaHVmZl9lbmNvZGUobmdodHRwMl9idWZzICpidWZzLCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjbGVuKTsKKwordm9pZCBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHRfaW5pdChuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHQgKmN0eCk7CisKKy8qCisgKiBEZWNvZGVzIHRoZSBnaXZlbiBkYXRhIHxzcmN8IHdpdGggbGVuZ3RoIHxzcmNsZW58LiAgVGhlIHxjdHh8IG11c3QKKyAqIGJlIGluaXRpYWxpemVkIGJ5IG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfY29udGV4dF9pbml0KCkuIFRoZSByZXN1bHQKKyAqIHdpbGwgYmUgd3JpdHRlbiB0byB8YnVmfC4gIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHxidWZ8IGhhcyB0aGUKKyAqIGVub3VnaCByb29tIHRvIHN0b3JlIHRoZSBkZWNvZGVkIGJ5dGUgc3RyaW5nLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBzZXQgdGhlIHxmaW58IHRvIG5vbnplcm8gaWYgdGhlIGdpdmVuIGlucHV0IGlzIHRoZQorICogZmluYWwgYmxvY2suCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcyBmcm9tIHRoZSB8aW58LgorICoKKyAqIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGl0IHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUKKyAqIHJldHVybiBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUAorICogICAgIERlY29kaW5nIHByb2Nlc3MgaGFzIGZhaWxlZC4KKyAqLworc3NpemVfdCBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlKG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfYnVmICpidWYsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjbGVuLCBpbnQgZmluKTsKKworLyoKKyAqIG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfZmFpbHVyZV9zdGF0ZSByZXR1cm5zIG5vbnplcm8gaWYgfGN0eHwKKyAqIGluZGljYXRlcyB0aGF0IGh1ZmZtYW4gZGVjb2RpbmcgY29udGV4dCBpcyBpbiBmYWlsdXJlIHN0YXRlLgorICovCitpbnQgbmdodHRwMl9oZF9odWZmX2RlY29kZV9mYWlsdXJlX3N0YXRlKG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfY29udGV4dCAqY3R4KTsKKworI2VuZGlmIC8qIE5HSFRUUDJfSERfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZF9odWZmbWFuLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hkX2h1ZmZtYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzkwZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZF9odWZmbWFuLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfaGRfaHVmZm1hbi5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIm5naHR0cDJfaGQuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX25ldC5oIgorCitzaXplX3QgbmdodHRwMl9oZF9odWZmX2VuY29kZV9jb3VudChjb25zdCB1aW50OF90ICpzcmMsIHNpemVfdCBsZW4pIHsKKyAgc2l6ZV90IGk7CisgIHNpemVfdCBuYml0cyA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgbmJpdHMgKz0gaHVmZl9zeW1fdGFibGVbc3JjW2ldXS5uYml0czsKKyAgfQorICAvKiBwYWQgdGhlIHByZWZpeCBvZiBFT1MgKDI1NikgKi8KKyAgcmV0dXJuIChuYml0cyArIDcpIC8gODsKK30KKworaW50IG5naHR0cDJfaGRfaHVmZl9lbmNvZGUobmdodHRwMl9idWZzICpidWZzLCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjbGVuKSB7CisgIGNvbnN0IG5naHR0cDJfaHVmZl9zeW0gKnN5bTsKKyAgY29uc3QgdWludDhfdCAqZW5kID0gc3JjICsgc3JjbGVuOworICB1aW50NjRfdCBjb2RlID0gMDsKKyAgdWludDMyX3QgeDsKKyAgc2l6ZV90IG5iaXRzID0gMDsKKyAgc2l6ZV90IGF2YWlsOworICBpbnQgcnY7CisKKyAgYXZhaWwgPSBuZ2h0dHAyX2J1ZnNfY3VyX2F2YWlsKGJ1ZnMpOworCisgIGZvciAoOyBzcmMgIT0gZW5kOykgeworICAgIHN5bSA9ICZodWZmX3N5bV90YWJsZVsqc3JjKytdOworICAgIGNvZGUgfD0gKHVpbnQ2NF90KXN5bS0+Y29kZSA8PCAoMzIgLSBuYml0cyk7CisgICAgbmJpdHMgKz0gc3ltLT5uYml0czsKKyAgICBpZiAobmJpdHMgPCAzMikgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmIChhdmFpbCA+PSA0KSB7CisgICAgICB4ID0gaHRvbmwoKHVpbnQzMl90KShjb2RlID4+IDMyKSk7CisgICAgICBtZW1jcHkoYnVmcy0+Y3VyLT5idWYubGFzdCwgJngsIDQpOworICAgICAgYnVmcy0+Y3VyLT5idWYubGFzdCArPSA0OworICAgICAgYXZhaWwgLT0gNDsKKyAgICAgIGNvZGUgPDw9IDMyOworICAgICAgbmJpdHMgLT0gMzI7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBmb3IgKDsgbmJpdHMgPj0gODspIHsKKyAgICAgIHJ2ID0gbmdodHRwMl9idWZzX2FkZGIoYnVmcywgKHVpbnQ4X3QpKGNvZGUgPj4gNTYpKTsKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICAgIGNvZGUgPDw9IDg7CisgICAgICBuYml0cyAtPSA4OworICAgIH0KKworICAgIGF2YWlsID0gbmdodHRwMl9idWZzX2N1cl9hdmFpbChidWZzKTsKKyAgfQorCisgIGZvciAoOyBuYml0cyA+PSA4OykgeworICAgIHJ2ID0gbmdodHRwMl9idWZzX2FkZGIoYnVmcywgKHVpbnQ4X3QpKGNvZGUgPj4gNTYpKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICBjb2RlIDw8PSA4OworICAgIG5iaXRzIC09IDg7CisgIH0KKworICBpZiAobmJpdHMpIHsKKyAgICBydiA9IG5naHR0cDJfYnVmc19hZGRiKAorICAgICAgICBidWZzLCAodWludDhfdCkoKHVpbnQ4X3QpKGNvZGUgPj4gNTYpIHwgKCgxIDw8ICg4IC0gbmJpdHMpKSAtIDEpKSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHRfaW5pdChuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHQgKmN0eCkgeworICBjdHgtPmZzdGF0ZSA9IE5HSFRUUDJfSFVGRl9BQ0NFUFRFRDsKK30KKworc3NpemVfdCBuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlKG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfY29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfYnVmICpidWYsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjbGVuLCBpbnQgZmluYWwpIHsKKyAgY29uc3QgdWludDhfdCAqZW5kID0gc3JjICsgc3JjbGVuOworICBuZ2h0dHAyX2h1ZmZfZGVjb2RlIG5vZGUgPSB7Y3R4LT5mc3RhdGUsIDB9OworICBjb25zdCBuZ2h0dHAyX2h1ZmZfZGVjb2RlICp0ID0gJm5vZGU7CisgIHVpbnQ4X3QgYzsKKworICAvKiBXZSB1c2UgdGhlIGRlY29kaW5nIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KKyAgICAgaHR0cDovL2dyYXBoaWNzLmljcy51Y2kuZWR1L3B1Yi9QcmVmaXgucGRmICovCisgIGZvciAoOyBzcmMgIT0gZW5kOykgeworICAgIGMgPSAqc3JjKys7CisgICAgdCA9ICZodWZmX2RlY29kZV90YWJsZVt0LT5mc3RhdGUgJiAweDFmZl1bYyA+PiA0XTsKKyAgICBpZiAodC0+ZnN0YXRlICYgTkdIVFRQMl9IVUZGX1NZTSkgeworICAgICAgKmJ1Zi0+bGFzdCsrID0gdC0+c3ltOworICAgIH0KKworICAgIHQgPSAmaHVmZl9kZWNvZGVfdGFibGVbdC0+ZnN0YXRlICYgMHgxZmZdW2MgJiAweGZdOworICAgIGlmICh0LT5mc3RhdGUgJiBOR0hUVFAyX0hVRkZfU1lNKSB7CisgICAgICAqYnVmLT5sYXN0KysgPSB0LT5zeW07CisgICAgfQorICB9CisKKyAgY3R4LT5mc3RhdGUgPSB0LT5mc3RhdGU7CisKKyAgaWYgKGZpbmFsICYmICEoY3R4LT5mc3RhdGUgJiBOR0hUVFAyX0hVRkZfQUNDRVBURUQpKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hFQURFUl9DT01QOworICB9CisKKyAgcmV0dXJuIChzc2l6ZV90KXNyY2xlbjsKK30KKworaW50IG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfZmFpbHVyZV9zdGF0ZShuZ2h0dHAyX2hkX2h1ZmZfZGVjb2RlX2NvbnRleHQgKmN0eCkgeworICByZXR1cm4gY3R4LT5mc3RhdGUgPT0gMHgxMDA7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hkX2h1ZmZtYW4uaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGRfaHVmZm1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZmQ1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hkX2h1ZmZtYW4uaApAQCAtMCwwICsxLDcyIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9IRF9IVUZGTUFOX0gKKyNkZWZpbmUgTkdIVFRQMl9IRF9IVUZGTUFOX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCit0eXBlZGVmIGVudW0geworICAvKiBGU0EgYWNjZXB0cyB0aGlzIHN0YXRlIGFzIHRoZSBlbmQgb2YgaHVmZm1hbiBlbmNvZGluZworICAgICBzZXF1ZW5jZS4gKi8KKyAgTkdIVFRQMl9IVUZGX0FDQ0VQVEVEID0gMSA8PCAxNCwKKyAgLyogVGhpcyBzdGF0ZSBlbWl0cyBzeW1ib2wgKi8KKyAgTkdIVFRQMl9IVUZGX1NZTSA9IDEgPDwgMTUsCit9IG5naHR0cDJfaHVmZl9kZWNvZGVfZmxhZzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBmc3RhdGUgaXMgdGhlIGN1cnJlbnQgaHVmZm1hbiBkZWNvZGluZyBzdGF0ZSwgd2hpY2ggaXMgYWN0dWFsbHkKKyAgICAgdGhlIG5vZGUgSUQgb2YgaW50ZXJuYWwgaHVmZm1hbiB0cmVlIHdpdGgKKyAgICAgbmdodHRwMl9odWZmX2RlY29kZV9mbGFnIE9SLWVkLiAgV2UgaGF2ZSAyNTcgbGVhZiBub2RlcywgYnV0IHRoZXkKKyAgICAgYXJlIGlkZW50aWNhbCB0byByb290IG5vZGUgb3RoZXIgdGhhbiBlbWl0dGluZyBhIHN5bWJvbCwgc28gd2UKKyAgICAgaGF2ZSAyNTYgaW50ZXJuYWwgbm9kZXMgWzEuLjI1NV0sIGluY2x1c2l2ZS4gIFRoZSBub2RlIElEIDI1NiBpcworICAgICBhIHNwZWNpYWwgbm9kZSBhbmQgaXQgaXMgYSB0ZXJtaW5hbCBzdGF0ZSB0aGF0IG1lYW5zIGRlY29kaW5nCisgICAgIGZhaWxlZC4gKi8KKyAgdWludDE2X3QgZnN0YXRlOworICAvKiBzeW1ib2wgaWYgTkdIVFRQMl9IVUZGX1NZTSBmbGFnIHNldCAqLworICB1aW50OF90IHN5bTsKK30gbmdodHRwMl9odWZmX2RlY29kZTsKKwordHlwZWRlZiBuZ2h0dHAyX2h1ZmZfZGVjb2RlIGh1ZmZfZGVjb2RlX3RhYmxlX3R5cGVbMTZdOworCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIGZzdGF0ZSBpcyB0aGUgY3VycmVudCBodWZmbWFuIGRlY29kaW5nIHN0YXRlLiAqLworICB1aW50MTZfdCBmc3RhdGU7Cit9IG5naHR0cDJfaGRfaHVmZl9kZWNvZGVfY29udGV4dDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBUaGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhpcyBjb2RlICovCisgIHVpbnQzMl90IG5iaXRzOworICAvKiBIdWZmbWFuIGNvZGUgYWxpZ25lZCB0byBMU0IgKi8KKyAgdWludDMyX3QgY29kZTsKK30gbmdodHRwMl9odWZmX3N5bTsKKworZXh0ZXJuIGNvbnN0IG5naHR0cDJfaHVmZl9zeW0gaHVmZl9zeW1fdGFibGVbXTsKK2V4dGVybiBjb25zdCBuZ2h0dHAyX2h1ZmZfZGVjb2RlIGh1ZmZfZGVjb2RlX3RhYmxlW11bMTZdOworCisjZW5kaWYgLyogTkdIVFRQMl9IRF9IVUZGTUFOX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGRfaHVmZm1hbl9kYXRhLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hkX2h1ZmZtYW5fZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmUxM2YKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hkX2h1ZmZtYW5fZGF0YS5jCkBAIC0wLDAgKzEsNDk4MCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9oZF9odWZmbWFuLmgiCisKKy8qIEdlbmVyYXRlZCBieSBta2h1ZmZ0YmwucHkgKi8KKworY29uc3QgbmdodHRwMl9odWZmX3N5bSBodWZmX3N5bV90YWJsZVtdID0geworICAgIHsxMywgMHhmZmMwMDAwMHV9LCB7MjMsIDB4ZmZmZmIwMDB1fSwgezI4LCAweGZmZmZmZTIwdX0sIHsyOCwgMHhmZmZmZmUzMHV9LAorICAgIHsyOCwgMHhmZmZmZmU0MHV9LCB7MjgsIDB4ZmZmZmZlNTB1fSwgezI4LCAweGZmZmZmZTYwdX0sIHsyOCwgMHhmZmZmZmU3MHV9LAorICAgIHsyOCwgMHhmZmZmZmU4MHV9LCB7MjQsIDB4ZmZmZmVhMDB1fSwgezMwLCAweGZmZmZmZmYwdX0sIHsyOCwgMHhmZmZmZmU5MHV9LAorICAgIHsyOCwgMHhmZmZmZmVhMHV9LCB7MzAsIDB4ZmZmZmZmZjR1fSwgezI4LCAweGZmZmZmZWIwdX0sIHsyOCwgMHhmZmZmZmVjMHV9LAorICAgIHsyOCwgMHhmZmZmZmVkMHV9LCB7MjgsIDB4ZmZmZmZlZTB1fSwgezI4LCAweGZmZmZmZWYwdX0sIHsyOCwgMHhmZmZmZmYwMHV9LAorICAgIHsyOCwgMHhmZmZmZmYxMHV9LCB7MjgsIDB4ZmZmZmZmMjB1fSwgezMwLCAweGZmZmZmZmY4dX0sIHsyOCwgMHhmZmZmZmYzMHV9LAorICAgIHsyOCwgMHhmZmZmZmY0MHV9LCB7MjgsIDB4ZmZmZmZmNTB1fSwgezI4LCAweGZmZmZmZjYwdX0sIHsyOCwgMHhmZmZmZmY3MHV9LAorICAgIHsyOCwgMHhmZmZmZmY4MHV9LCB7MjgsIDB4ZmZmZmZmOTB1fSwgezI4LCAweGZmZmZmZmEwdX0sIHsyOCwgMHhmZmZmZmZiMHV9LAorICAgIHs2LCAweDUwMDAwMDAwdX0sICB7MTAsIDB4ZmUwMDAwMDB1fSwgezEwLCAweGZlNDAwMDAwdX0sIHsxMiwgMHhmZmEwMDAwMHV9LAorICAgIHsxMywgMHhmZmM4MDAwMHV9LCB7NiwgMHg1NDAwMDAwMHV9LCAgezgsIDB4ZjgwMDAwMDB1fSwgIHsxMSwgMHhmZjQwMDAwMHV9LAorICAgIHsxMCwgMHhmZTgwMDAwMHV9LCB7MTAsIDB4ZmVjMDAwMDB1fSwgezgsIDB4ZjkwMDAwMDB1fSwgIHsxMSwgMHhmZjYwMDAwMHV9LAorICAgIHs4LCAweGZhMDAwMDAwdX0sICB7NiwgMHg1ODAwMDAwMHV9LCAgezYsIDB4NWMwMDAwMDB1fSwgIHs2LCAweDYwMDAwMDAwdX0sCisgICAgezUsIDB4MHV9LCAgICAgICAgIHs1LCAweDgwMDAwMDB1fSwgICB7NSwgMHgxMDAwMDAwMHV9LCAgezYsIDB4NjQwMDAwMDB1fSwKKyAgICB7NiwgMHg2ODAwMDAwMHV9LCAgezYsIDB4NmMwMDAwMDB1fSwgIHs2LCAweDcwMDAwMDAwdX0sICB7NiwgMHg3NDAwMDAwMHV9LAorICAgIHs2LCAweDc4MDAwMDAwdX0sICB7NiwgMHg3YzAwMDAwMHV9LCAgezcsIDB4YjgwMDAwMDB1fSwgIHs4LCAweGZiMDAwMDAwdX0sCisgICAgezE1LCAweGZmZjgwMDAwdX0sIHs2LCAweDgwMDAwMDAwdX0sICB7MTIsIDB4ZmZiMDAwMDB1fSwgezEwLCAweGZmMDAwMDAwdX0sCisgICAgezEzLCAweGZmZDAwMDAwdX0sIHs2LCAweDg0MDAwMDAwdX0sICB7NywgMHhiYTAwMDAwMHV9LCAgezcsIDB4YmMwMDAwMDB1fSwKKyAgICB7NywgMHhiZTAwMDAwMHV9LCAgezcsIDB4YzAwMDAwMDB1fSwgIHs3LCAweGMyMDAwMDAwdX0sICB7NywgMHhjNDAwMDAwMHV9LAorICAgIHs3LCAweGM2MDAwMDAwdX0sICB7NywgMHhjODAwMDAwMHV9LCAgezcsIDB4Y2EwMDAwMDB1fSwgIHs3LCAweGNjMDAwMDAwdX0sCisgICAgezcsIDB4Y2UwMDAwMDB1fSwgIHs3LCAweGQwMDAwMDAwdX0sICB7NywgMHhkMjAwMDAwMHV9LCAgezcsIDB4ZDQwMDAwMDB1fSwKKyAgICB7NywgMHhkNjAwMDAwMHV9LCAgezcsIDB4ZDgwMDAwMDB1fSwgIHs3LCAweGRhMDAwMDAwdX0sICB7NywgMHhkYzAwMDAwMHV9LAorICAgIHs3LCAweGRlMDAwMDAwdX0sICB7NywgMHhlMDAwMDAwMHV9LCAgezcsIDB4ZTIwMDAwMDB1fSwgIHs3LCAweGU0MDAwMDAwdX0sCisgICAgezgsIDB4ZmMwMDAwMDB1fSwgIHs3LCAweGU2MDAwMDAwdX0sICB7OCwgMHhmZDAwMDAwMHV9LCAgezEzLCAweGZmZDgwMDAwdX0sCisgICAgezE5LCAweGZmZmUwMDAwdX0sIHsxMywgMHhmZmUwMDAwMHV9LCB7MTQsIDB4ZmZmMDAwMDB1fSwgezYsIDB4ODgwMDAwMDB1fSwKKyAgICB7MTUsIDB4ZmZmYTAwMDB1fSwgezUsIDB4MTgwMDAwMDB1fSwgIHs2LCAweDhjMDAwMDAwdX0sICB7NSwgMHgyMDAwMDAwMHV9LAorICAgIHs2LCAweDkwMDAwMDAwdX0sICB7NSwgMHgyODAwMDAwMHV9LCAgezYsIDB4OTQwMDAwMDB1fSwgIHs2LCAweDk4MDAwMDAwdX0sCisgICAgezYsIDB4OWMwMDAwMDB1fSwgIHs1LCAweDMwMDAwMDAwdX0sICB7NywgMHhlODAwMDAwMHV9LCAgezcsIDB4ZWEwMDAwMDB1fSwKKyAgICB7NiwgMHhhMDAwMDAwMHV9LCAgezYsIDB4YTQwMDAwMDB1fSwgIHs2LCAweGE4MDAwMDAwdX0sICB7NSwgMHgzODAwMDAwMHV9LAorICAgIHs2LCAweGFjMDAwMDAwdX0sICB7NywgMHhlYzAwMDAwMHV9LCAgezYsIDB4YjAwMDAwMDB1fSwgIHs1LCAweDQwMDAwMDAwdX0sCisgICAgezUsIDB4NDgwMDAwMDB1fSwgIHs2LCAweGI0MDAwMDAwdX0sICB7NywgMHhlZTAwMDAwMHV9LCAgezcsIDB4ZjAwMDAwMDB1fSwKKyAgICB7NywgMHhmMjAwMDAwMHV9LCAgezcsIDB4ZjQwMDAwMDB1fSwgIHs3LCAweGY2MDAwMDAwdX0sICB7MTUsIDB4ZmZmYzAwMDB1fSwKKyAgICB7MTEsIDB4ZmY4MDAwMDB1fSwgezE0LCAweGZmZjQwMDAwdX0sIHsxMywgMHhmZmU4MDAwMHV9LCB7MjgsIDB4ZmZmZmZmYzB1fSwKKyAgICB7MjAsIDB4ZmZmZTYwMDB1fSwgezIyLCAweGZmZmY0ODAwdX0sIHsyMCwgMHhmZmZlNzAwMHV9LCB7MjAsIDB4ZmZmZTgwMDB1fSwKKyAgICB7MjIsIDB4ZmZmZjRjMDB1fSwgezIyLCAweGZmZmY1MDAwdX0sIHsyMiwgMHhmZmZmNTQwMHV9LCB7MjMsIDB4ZmZmZmIyMDB1fSwKKyAgICB7MjIsIDB4ZmZmZjU4MDB1fSwgezIzLCAweGZmZmZiNDAwdX0sIHsyMywgMHhmZmZmYjYwMHV9LCB7MjMsIDB4ZmZmZmI4MDB1fSwKKyAgICB7MjMsIDB4ZmZmZmJhMDB1fSwgezIzLCAweGZmZmZiYzAwdX0sIHsyNCwgMHhmZmZmZWIwMHV9LCB7MjMsIDB4ZmZmZmJlMDB1fSwKKyAgICB7MjQsIDB4ZmZmZmVjMDB1fSwgezI0LCAweGZmZmZlZDAwdX0sIHsyMiwgMHhmZmZmNWMwMHV9LCB7MjMsIDB4ZmZmZmMwMDB1fSwKKyAgICB7MjQsIDB4ZmZmZmVlMDB1fSwgezIzLCAweGZmZmZjMjAwdX0sIHsyMywgMHhmZmZmYzQwMHV9LCB7MjMsIDB4ZmZmZmM2MDB1fSwKKyAgICB7MjMsIDB4ZmZmZmM4MDB1fSwgezIxLCAweGZmZmVlMDAwdX0sIHsyMiwgMHhmZmZmNjAwMHV9LCB7MjMsIDB4ZmZmZmNhMDB1fSwKKyAgICB7MjIsIDB4ZmZmZjY0MDB1fSwgezIzLCAweGZmZmZjYzAwdX0sIHsyMywgMHhmZmZmY2UwMHV9LCB7MjQsIDB4ZmZmZmVmMDB1fSwKKyAgICB7MjIsIDB4ZmZmZjY4MDB1fSwgezIxLCAweGZmZmVlODAwdX0sIHsyMCwgMHhmZmZlOTAwMHV9LCB7MjIsIDB4ZmZmZjZjMDB1fSwKKyAgICB7MjIsIDB4ZmZmZjcwMDB1fSwgezIzLCAweGZmZmZkMDAwdX0sIHsyMywgMHhmZmZmZDIwMHV9LCB7MjEsIDB4ZmZmZWYwMDB1fSwKKyAgICB7MjMsIDB4ZmZmZmQ0MDB1fSwgezIyLCAweGZmZmY3NDAwdX0sIHsyMiwgMHhmZmZmNzgwMHV9LCB7MjQsIDB4ZmZmZmYwMDB1fSwKKyAgICB7MjEsIDB4ZmZmZWY4MDB1fSwgezIyLCAweGZmZmY3YzAwdX0sIHsyMywgMHhmZmZmZDYwMHV9LCB7MjMsIDB4ZmZmZmQ4MDB1fSwKKyAgICB7MjEsIDB4ZmZmZjAwMDB1fSwgezIxLCAweGZmZmYwODAwdX0sIHsyMiwgMHhmZmZmODAwMHV9LCB7MjEsIDB4ZmZmZjEwMDB1fSwKKyAgICB7MjMsIDB4ZmZmZmRhMDB1fSwgezIyLCAweGZmZmY4NDAwdX0sIHsyMywgMHhmZmZmZGMwMHV9LCB7MjMsIDB4ZmZmZmRlMDB1fSwKKyAgICB7MjAsIDB4ZmZmZWEwMDB1fSwgezIyLCAweGZmZmY4ODAwdX0sIHsyMiwgMHhmZmZmOGMwMHV9LCB7MjIsIDB4ZmZmZjkwMDB1fSwKKyAgICB7MjMsIDB4ZmZmZmUwMDB1fSwgezIyLCAweGZmZmY5NDAwdX0sIHsyMiwgMHhmZmZmOTgwMHV9LCB7MjMsIDB4ZmZmZmUyMDB1fSwKKyAgICB7MjYsIDB4ZmZmZmY4MDB1fSwgezI2LCAweGZmZmZmODQwdX0sIHsyMCwgMHhmZmZlYjAwMHV9LCB7MTksIDB4ZmZmZTIwMDB1fSwKKyAgICB7MjIsIDB4ZmZmZjljMDB1fSwgezIzLCAweGZmZmZlNDAwdX0sIHsyMiwgMHhmZmZmYTAwMHV9LCB7MjUsIDB4ZmZmZmY2MDB1fSwKKyAgICB7MjYsIDB4ZmZmZmY4ODB1fSwgezI2LCAweGZmZmZmOGMwdX0sIHsyNiwgMHhmZmZmZjkwMHV9LCB7MjcsIDB4ZmZmZmZiYzB1fSwKKyAgICB7MjcsIDB4ZmZmZmZiZTB1fSwgezI2LCAweGZmZmZmOTQwdX0sIHsyNCwgMHhmZmZmZjEwMHV9LCB7MjUsIDB4ZmZmZmY2ODB1fSwKKyAgICB7MTksIDB4ZmZmZTQwMDB1fSwgezIxLCAweGZmZmYxODAwdX0sIHsyNiwgMHhmZmZmZjk4MHV9LCB7MjcsIDB4ZmZmZmZjMDB1fSwKKyAgICB7MjcsIDB4ZmZmZmZjMjB1fSwgezI2LCAweGZmZmZmOWMwdX0sIHsyNywgMHhmZmZmZmM0MHV9LCB7MjQsIDB4ZmZmZmYyMDB1fSwKKyAgICB7MjEsIDB4ZmZmZjIwMDB1fSwgezIxLCAweGZmZmYyODAwdX0sIHsyNiwgMHhmZmZmZmEwMHV9LCB7MjYsIDB4ZmZmZmZhNDB1fSwKKyAgICB7MjgsIDB4ZmZmZmZmZDB1fSwgezI3LCAweGZmZmZmYzYwdX0sIHsyNywgMHhmZmZmZmM4MHV9LCB7MjcsIDB4ZmZmZmZjYTB1fSwKKyAgICB7MjAsIDB4ZmZmZWMwMDB1fSwgezI0LCAweGZmZmZmMzAwdX0sIHsyMCwgMHhmZmZlZDAwMHV9LCB7MjEsIDB4ZmZmZjMwMDB1fSwKKyAgICB7MjIsIDB4ZmZmZmE0MDB1fSwgezIxLCAweGZmZmYzODAwdX0sIHsyMSwgMHhmZmZmNDAwMHV9LCB7MjMsIDB4ZmZmZmU2MDB1fSwKKyAgICB7MjIsIDB4ZmZmZmE4MDB1fSwgezIyLCAweGZmZmZhYzAwdX0sIHsyNSwgMHhmZmZmZjcwMHV9LCB7MjUsIDB4ZmZmZmY3ODB1fSwKKyAgICB7MjQsIDB4ZmZmZmY0MDB1fSwgezI0LCAweGZmZmZmNTAwdX0sIHsyNiwgMHhmZmZmZmE4MHV9LCB7MjMsIDB4ZmZmZmU4MDB1fSwKKyAgICB7MjYsIDB4ZmZmZmZhYzB1fSwgezI3LCAweGZmZmZmY2MwdX0sIHsyNiwgMHhmZmZmZmIwMHV9LCB7MjYsIDB4ZmZmZmZiNDB1fSwKKyAgICB7MjcsIDB4ZmZmZmZjZTB1fSwgezI3LCAweGZmZmZmZDAwdX0sIHsyNywgMHhmZmZmZmQyMHV9LCB7MjcsIDB4ZmZmZmZkNDB1fSwKKyAgICB7MjcsIDB4ZmZmZmZkNjB1fSwgezI4LCAweGZmZmZmZmUwdX0sIHsyNywgMHhmZmZmZmQ4MHV9LCB7MjcsIDB4ZmZmZmZkYTB1fSwKKyAgICB7MjcsIDB4ZmZmZmZkYzB1fSwgezI3LCAweGZmZmZmZGUwdX0sIHsyNywgMHhmZmZmZmUwMHV9LCB7MjYsIDB4ZmZmZmZiODB1fSwKKyAgICB7MzAsIDB4ZmZmZmZmZmN1fX07CisKK2NvbnN0IG5naHR0cDJfaHVmZl9kZWNvZGUgaHVmZl9kZWNvZGVfdGFibGVbXVsxNl0gPSB7CisgICAgLyogMCAqLworICAgIHsKKyAgICAgICAgezB4MDQsIDB9LAorICAgICAgICB7MHgwNSwgMH0sCisgICAgICAgIHsweDA3LCAwfSwKKyAgICAgICAgezB4MDgsIDB9LAorICAgICAgICB7MHgwYiwgMH0sCisgICAgICAgIHsweDBjLCAwfSwKKyAgICAgICAgezB4MTAsIDB9LAorICAgICAgICB7MHgxMywgMH0sCisgICAgICAgIHsweDE5LCAwfSwKKyAgICAgICAgezB4MWMsIDB9LAorICAgICAgICB7MHgyMCwgMH0sCisgICAgICAgIHsweDIzLCAwfSwKKyAgICAgICAgezB4MmEsIDB9LAorICAgICAgICB7MHgzMSwgMH0sCisgICAgICAgIHsweDM5LCAwfSwKKyAgICAgICAgezB4NDA0MCwgMH0sCisgICAgfSwKKyAgICAvKiAxICovCisgICAgeworICAgICAgICB7MHhjMDAwLCA0OH0sCisgICAgICAgIHsweGMwMDAsIDQ5fSwKKyAgICAgICAgezB4YzAwMCwgNTB9LAorICAgICAgICB7MHhjMDAwLCA5N30sCisgICAgICAgIHsweGMwMDAsIDk5fSwKKyAgICAgICAgezB4YzAwMCwgMTAxfSwKKyAgICAgICAgezB4YzAwMCwgMTA1fSwKKyAgICAgICAgezB4YzAwMCwgMTExfSwKKyAgICAgICAgezB4YzAwMCwgMTE1fSwKKyAgICAgICAgezB4YzAwMCwgMTE2fSwKKyAgICAgICAgezB4MGQsIDB9LAorICAgICAgICB7MHgwZSwgMH0sCisgICAgICAgIHsweDExLCAwfSwKKyAgICAgICAgezB4MTIsIDB9LAorICAgICAgICB7MHgxNCwgMH0sCisgICAgICAgIHsweDE1LCAwfSwKKyAgICB9LAorICAgIC8qIDIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDQ4fSwKKyAgICAgICAgezB4YzAxNiwgNDh9LAorICAgICAgICB7MHg4MDAxLCA0OX0sCisgICAgICAgIHsweGMwMTYsIDQ5fSwKKyAgICAgICAgezB4ODAwMSwgNTB9LAorICAgICAgICB7MHhjMDE2LCA1MH0sCisgICAgICAgIHsweDgwMDEsIDk3fSwKKyAgICAgICAgezB4YzAxNiwgOTd9LAorICAgICAgICB7MHg4MDAxLCA5OX0sCisgICAgICAgIHsweGMwMTYsIDk5fSwKKyAgICAgICAgezB4ODAwMSwgMTAxfSwKKyAgICAgICAgezB4YzAxNiwgMTAxfSwKKyAgICAgICAgezB4ODAwMSwgMTA1fSwKKyAgICAgICAgezB4YzAxNiwgMTA1fSwKKyAgICAgICAgezB4ODAwMSwgMTExfSwKKyAgICAgICAgezB4YzAxNiwgMTExfSwKKyAgICB9LAorICAgIC8qIDMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDQ4fSwKKyAgICAgICAgezB4ODAwOSwgNDh9LAorICAgICAgICB7MHg4MDE3LCA0OH0sCisgICAgICAgIHsweGMwMjgsIDQ4fSwKKyAgICAgICAgezB4ODAwMiwgNDl9LAorICAgICAgICB7MHg4MDA5LCA0OX0sCisgICAgICAgIHsweDgwMTcsIDQ5fSwKKyAgICAgICAgezB4YzAyOCwgNDl9LAorICAgICAgICB7MHg4MDAyLCA1MH0sCisgICAgICAgIHsweDgwMDksIDUwfSwKKyAgICAgICAgezB4ODAxNywgNTB9LAorICAgICAgICB7MHhjMDI4LCA1MH0sCisgICAgICAgIHsweDgwMDIsIDk3fSwKKyAgICAgICAgezB4ODAwOSwgOTd9LAorICAgICAgICB7MHg4MDE3LCA5N30sCisgICAgICAgIHsweGMwMjgsIDk3fSwKKyAgICB9LAorICAgIC8qIDQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDQ4fSwKKyAgICAgICAgezB4ODAwNiwgNDh9LAorICAgICAgICB7MHg4MDBhLCA0OH0sCisgICAgICAgIHsweDgwMGYsIDQ4fSwKKyAgICAgICAgezB4ODAxOCwgNDh9LAorICAgICAgICB7MHg4MDFmLCA0OH0sCisgICAgICAgIHsweDgwMjksIDQ4fSwKKyAgICAgICAgezB4YzAzOCwgNDh9LAorICAgICAgICB7MHg4MDAzLCA0OX0sCisgICAgICAgIHsweDgwMDYsIDQ5fSwKKyAgICAgICAgezB4ODAwYSwgNDl9LAorICAgICAgICB7MHg4MDBmLCA0OX0sCisgICAgICAgIHsweDgwMTgsIDQ5fSwKKyAgICAgICAgezB4ODAxZiwgNDl9LAorICAgICAgICB7MHg4MDI5LCA0OX0sCisgICAgICAgIHsweGMwMzgsIDQ5fSwKKyAgICB9LAorICAgIC8qIDUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDUwfSwKKyAgICAgICAgezB4ODAwNiwgNTB9LAorICAgICAgICB7MHg4MDBhLCA1MH0sCisgICAgICAgIHsweDgwMGYsIDUwfSwKKyAgICAgICAgezB4ODAxOCwgNTB9LAorICAgICAgICB7MHg4MDFmLCA1MH0sCisgICAgICAgIHsweDgwMjksIDUwfSwKKyAgICAgICAgezB4YzAzOCwgNTB9LAorICAgICAgICB7MHg4MDAzLCA5N30sCisgICAgICAgIHsweDgwMDYsIDk3fSwKKyAgICAgICAgezB4ODAwYSwgOTd9LAorICAgICAgICB7MHg4MDBmLCA5N30sCisgICAgICAgIHsweDgwMTgsIDk3fSwKKyAgICAgICAgezB4ODAxZiwgOTd9LAorICAgICAgICB7MHg4MDI5LCA5N30sCisgICAgICAgIHsweGMwMzgsIDk3fSwKKyAgICB9LAorICAgIC8qIDYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDk5fSwKKyAgICAgICAgezB4ODAwOSwgOTl9LAorICAgICAgICB7MHg4MDE3LCA5OX0sCisgICAgICAgIHsweGMwMjgsIDk5fSwKKyAgICAgICAgezB4ODAwMiwgMTAxfSwKKyAgICAgICAgezB4ODAwOSwgMTAxfSwKKyAgICAgICAgezB4ODAxNywgMTAxfSwKKyAgICAgICAgezB4YzAyOCwgMTAxfSwKKyAgICAgICAgezB4ODAwMiwgMTA1fSwKKyAgICAgICAgezB4ODAwOSwgMTA1fSwKKyAgICAgICAgezB4ODAxNywgMTA1fSwKKyAgICAgICAgezB4YzAyOCwgMTA1fSwKKyAgICAgICAgezB4ODAwMiwgMTExfSwKKyAgICAgICAgezB4ODAwOSwgMTExfSwKKyAgICAgICAgezB4ODAxNywgMTExfSwKKyAgICAgICAgezB4YzAyOCwgMTExfSwKKyAgICB9LAorICAgIC8qIDcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDk5fSwKKyAgICAgICAgezB4ODAwNiwgOTl9LAorICAgICAgICB7MHg4MDBhLCA5OX0sCisgICAgICAgIHsweDgwMGYsIDk5fSwKKyAgICAgICAgezB4ODAxOCwgOTl9LAorICAgICAgICB7MHg4MDFmLCA5OX0sCisgICAgICAgIHsweDgwMjksIDk5fSwKKyAgICAgICAgezB4YzAzOCwgOTl9LAorICAgICAgICB7MHg4MDAzLCAxMDF9LAorICAgICAgICB7MHg4MDA2LCAxMDF9LAorICAgICAgICB7MHg4MDBhLCAxMDF9LAorICAgICAgICB7MHg4MDBmLCAxMDF9LAorICAgICAgICB7MHg4MDE4LCAxMDF9LAorICAgICAgICB7MHg4MDFmLCAxMDF9LAorICAgICAgICB7MHg4MDI5LCAxMDF9LAorICAgICAgICB7MHhjMDM4LCAxMDF9LAorICAgIH0sCisgICAgLyogOCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTA1fSwKKyAgICAgICAgezB4ODAwNiwgMTA1fSwKKyAgICAgICAgezB4ODAwYSwgMTA1fSwKKyAgICAgICAgezB4ODAwZiwgMTA1fSwKKyAgICAgICAgezB4ODAxOCwgMTA1fSwKKyAgICAgICAgezB4ODAxZiwgMTA1fSwKKyAgICAgICAgezB4ODAyOSwgMTA1fSwKKyAgICAgICAgezB4YzAzOCwgMTA1fSwKKyAgICAgICAgezB4ODAwMywgMTExfSwKKyAgICAgICAgezB4ODAwNiwgMTExfSwKKyAgICAgICAgezB4ODAwYSwgMTExfSwKKyAgICAgICAgezB4ODAwZiwgMTExfSwKKyAgICAgICAgezB4ODAxOCwgMTExfSwKKyAgICAgICAgezB4ODAxZiwgMTExfSwKKyAgICAgICAgezB4ODAyOSwgMTExfSwKKyAgICAgICAgezB4YzAzOCwgMTExfSwKKyAgICB9LAorICAgIC8qIDkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDExNX0sCisgICAgICAgIHsweGMwMTYsIDExNX0sCisgICAgICAgIHsweDgwMDEsIDExNn0sCisgICAgICAgIHsweGMwMTYsIDExNn0sCisgICAgICAgIHsweGMwMDAsIDMyfSwKKyAgICAgICAgezB4YzAwMCwgMzd9LAorICAgICAgICB7MHhjMDAwLCA0NX0sCisgICAgICAgIHsweGMwMDAsIDQ2fSwKKyAgICAgICAgezB4YzAwMCwgNDd9LAorICAgICAgICB7MHhjMDAwLCA1MX0sCisgICAgICAgIHsweGMwMDAsIDUyfSwKKyAgICAgICAgezB4YzAwMCwgNTN9LAorICAgICAgICB7MHhjMDAwLCA1NH0sCisgICAgICAgIHsweGMwMDAsIDU1fSwKKyAgICAgICAgezB4YzAwMCwgNTZ9LAorICAgICAgICB7MHhjMDAwLCA1N30sCisgICAgfSwKKyAgICAvKiAxMCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTE1fSwKKyAgICAgICAgezB4ODAwOSwgMTE1fSwKKyAgICAgICAgezB4ODAxNywgMTE1fSwKKyAgICAgICAgezB4YzAyOCwgMTE1fSwKKyAgICAgICAgezB4ODAwMiwgMTE2fSwKKyAgICAgICAgezB4ODAwOSwgMTE2fSwKKyAgICAgICAgezB4ODAxNywgMTE2fSwKKyAgICAgICAgezB4YzAyOCwgMTE2fSwKKyAgICAgICAgezB4ODAwMSwgMzJ9LAorICAgICAgICB7MHhjMDE2LCAzMn0sCisgICAgICAgIHsweDgwMDEsIDM3fSwKKyAgICAgICAgezB4YzAxNiwgMzd9LAorICAgICAgICB7MHg4MDAxLCA0NX0sCisgICAgICAgIHsweGMwMTYsIDQ1fSwKKyAgICAgICAgezB4ODAwMSwgNDZ9LAorICAgICAgICB7MHhjMDE2LCA0Nn0sCisgICAgfSwKKyAgICAvKiAxMSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTE1fSwKKyAgICAgICAgezB4ODAwNiwgMTE1fSwKKyAgICAgICAgezB4ODAwYSwgMTE1fSwKKyAgICAgICAgezB4ODAwZiwgMTE1fSwKKyAgICAgICAgezB4ODAxOCwgMTE1fSwKKyAgICAgICAgezB4ODAxZiwgMTE1fSwKKyAgICAgICAgezB4ODAyOSwgMTE1fSwKKyAgICAgICAgezB4YzAzOCwgMTE1fSwKKyAgICAgICAgezB4ODAwMywgMTE2fSwKKyAgICAgICAgezB4ODAwNiwgMTE2fSwKKyAgICAgICAgezB4ODAwYSwgMTE2fSwKKyAgICAgICAgezB4ODAwZiwgMTE2fSwKKyAgICAgICAgezB4ODAxOCwgMTE2fSwKKyAgICAgICAgezB4ODAxZiwgMTE2fSwKKyAgICAgICAgezB4ODAyOSwgMTE2fSwKKyAgICAgICAgezB4YzAzOCwgMTE2fSwKKyAgICB9LAorICAgIC8qIDEyICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAzMn0sCisgICAgICAgIHsweDgwMDksIDMyfSwKKyAgICAgICAgezB4ODAxNywgMzJ9LAorICAgICAgICB7MHhjMDI4LCAzMn0sCisgICAgICAgIHsweDgwMDIsIDM3fSwKKyAgICAgICAgezB4ODAwOSwgMzd9LAorICAgICAgICB7MHg4MDE3LCAzN30sCisgICAgICAgIHsweGMwMjgsIDM3fSwKKyAgICAgICAgezB4ODAwMiwgNDV9LAorICAgICAgICB7MHg4MDA5LCA0NX0sCisgICAgICAgIHsweDgwMTcsIDQ1fSwKKyAgICAgICAgezB4YzAyOCwgNDV9LAorICAgICAgICB7MHg4MDAyLCA0Nn0sCisgICAgICAgIHsweDgwMDksIDQ2fSwKKyAgICAgICAgezB4ODAxNywgNDZ9LAorICAgICAgICB7MHhjMDI4LCA0Nn0sCisgICAgfSwKKyAgICAvKiAxMyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMzJ9LAorICAgICAgICB7MHg4MDA2LCAzMn0sCisgICAgICAgIHsweDgwMGEsIDMyfSwKKyAgICAgICAgezB4ODAwZiwgMzJ9LAorICAgICAgICB7MHg4MDE4LCAzMn0sCisgICAgICAgIHsweDgwMWYsIDMyfSwKKyAgICAgICAgezB4ODAyOSwgMzJ9LAorICAgICAgICB7MHhjMDM4LCAzMn0sCisgICAgICAgIHsweDgwMDMsIDM3fSwKKyAgICAgICAgezB4ODAwNiwgMzd9LAorICAgICAgICB7MHg4MDBhLCAzN30sCisgICAgICAgIHsweDgwMGYsIDM3fSwKKyAgICAgICAgezB4ODAxOCwgMzd9LAorICAgICAgICB7MHg4MDFmLCAzN30sCisgICAgICAgIHsweDgwMjksIDM3fSwKKyAgICAgICAgezB4YzAzOCwgMzd9LAorICAgIH0sCisgICAgLyogMTQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDQ1fSwKKyAgICAgICAgezB4ODAwNiwgNDV9LAorICAgICAgICB7MHg4MDBhLCA0NX0sCisgICAgICAgIHsweDgwMGYsIDQ1fSwKKyAgICAgICAgezB4ODAxOCwgNDV9LAorICAgICAgICB7MHg4MDFmLCA0NX0sCisgICAgICAgIHsweDgwMjksIDQ1fSwKKyAgICAgICAgezB4YzAzOCwgNDV9LAorICAgICAgICB7MHg4MDAzLCA0Nn0sCisgICAgICAgIHsweDgwMDYsIDQ2fSwKKyAgICAgICAgezB4ODAwYSwgNDZ9LAorICAgICAgICB7MHg4MDBmLCA0Nn0sCisgICAgICAgIHsweDgwMTgsIDQ2fSwKKyAgICAgICAgezB4ODAxZiwgNDZ9LAorICAgICAgICB7MHg4MDI5LCA0Nn0sCisgICAgICAgIHsweGMwMzgsIDQ2fSwKKyAgICB9LAorICAgIC8qIDE1ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCA0N30sCisgICAgICAgIHsweGMwMTYsIDQ3fSwKKyAgICAgICAgezB4ODAwMSwgNTF9LAorICAgICAgICB7MHhjMDE2LCA1MX0sCisgICAgICAgIHsweDgwMDEsIDUyfSwKKyAgICAgICAgezB4YzAxNiwgNTJ9LAorICAgICAgICB7MHg4MDAxLCA1M30sCisgICAgICAgIHsweGMwMTYsIDUzfSwKKyAgICAgICAgezB4ODAwMSwgNTR9LAorICAgICAgICB7MHhjMDE2LCA1NH0sCisgICAgICAgIHsweDgwMDEsIDU1fSwKKyAgICAgICAgezB4YzAxNiwgNTV9LAorICAgICAgICB7MHg4MDAxLCA1Nn0sCisgICAgICAgIHsweGMwMTYsIDU2fSwKKyAgICAgICAgezB4ODAwMSwgNTd9LAorICAgICAgICB7MHhjMDE2LCA1N30sCisgICAgfSwKKyAgICAvKiAxNiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgNDd9LAorICAgICAgICB7MHg4MDA5LCA0N30sCisgICAgICAgIHsweDgwMTcsIDQ3fSwKKyAgICAgICAgezB4YzAyOCwgNDd9LAorICAgICAgICB7MHg4MDAyLCA1MX0sCisgICAgICAgIHsweDgwMDksIDUxfSwKKyAgICAgICAgezB4ODAxNywgNTF9LAorICAgICAgICB7MHhjMDI4LCA1MX0sCisgICAgICAgIHsweDgwMDIsIDUyfSwKKyAgICAgICAgezB4ODAwOSwgNTJ9LAorICAgICAgICB7MHg4MDE3LCA1Mn0sCisgICAgICAgIHsweGMwMjgsIDUyfSwKKyAgICAgICAgezB4ODAwMiwgNTN9LAorICAgICAgICB7MHg4MDA5LCA1M30sCisgICAgICAgIHsweDgwMTcsIDUzfSwKKyAgICAgICAgezB4YzAyOCwgNTN9LAorICAgIH0sCisgICAgLyogMTcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDQ3fSwKKyAgICAgICAgezB4ODAwNiwgNDd9LAorICAgICAgICB7MHg4MDBhLCA0N30sCisgICAgICAgIHsweDgwMGYsIDQ3fSwKKyAgICAgICAgezB4ODAxOCwgNDd9LAorICAgICAgICB7MHg4MDFmLCA0N30sCisgICAgICAgIHsweDgwMjksIDQ3fSwKKyAgICAgICAgezB4YzAzOCwgNDd9LAorICAgICAgICB7MHg4MDAzLCA1MX0sCisgICAgICAgIHsweDgwMDYsIDUxfSwKKyAgICAgICAgezB4ODAwYSwgNTF9LAorICAgICAgICB7MHg4MDBmLCA1MX0sCisgICAgICAgIHsweDgwMTgsIDUxfSwKKyAgICAgICAgezB4ODAxZiwgNTF9LAorICAgICAgICB7MHg4MDI5LCA1MX0sCisgICAgICAgIHsweGMwMzgsIDUxfSwKKyAgICB9LAorICAgIC8qIDE4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA1Mn0sCisgICAgICAgIHsweDgwMDYsIDUyfSwKKyAgICAgICAgezB4ODAwYSwgNTJ9LAorICAgICAgICB7MHg4MDBmLCA1Mn0sCisgICAgICAgIHsweDgwMTgsIDUyfSwKKyAgICAgICAgezB4ODAxZiwgNTJ9LAorICAgICAgICB7MHg4MDI5LCA1Mn0sCisgICAgICAgIHsweGMwMzgsIDUyfSwKKyAgICAgICAgezB4ODAwMywgNTN9LAorICAgICAgICB7MHg4MDA2LCA1M30sCisgICAgICAgIHsweDgwMGEsIDUzfSwKKyAgICAgICAgezB4ODAwZiwgNTN9LAorICAgICAgICB7MHg4MDE4LCA1M30sCisgICAgICAgIHsweDgwMWYsIDUzfSwKKyAgICAgICAgezB4ODAyOSwgNTN9LAorICAgICAgICB7MHhjMDM4LCA1M30sCisgICAgfSwKKyAgICAvKiAxOSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgNTR9LAorICAgICAgICB7MHg4MDA5LCA1NH0sCisgICAgICAgIHsweDgwMTcsIDU0fSwKKyAgICAgICAgezB4YzAyOCwgNTR9LAorICAgICAgICB7MHg4MDAyLCA1NX0sCisgICAgICAgIHsweDgwMDksIDU1fSwKKyAgICAgICAgezB4ODAxNywgNTV9LAorICAgICAgICB7MHhjMDI4LCA1NX0sCisgICAgICAgIHsweDgwMDIsIDU2fSwKKyAgICAgICAgezB4ODAwOSwgNTZ9LAorICAgICAgICB7MHg4MDE3LCA1Nn0sCisgICAgICAgIHsweGMwMjgsIDU2fSwKKyAgICAgICAgezB4ODAwMiwgNTd9LAorICAgICAgICB7MHg4MDA5LCA1N30sCisgICAgICAgIHsweDgwMTcsIDU3fSwKKyAgICAgICAgezB4YzAyOCwgNTd9LAorICAgIH0sCisgICAgLyogMjAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDU0fSwKKyAgICAgICAgezB4ODAwNiwgNTR9LAorICAgICAgICB7MHg4MDBhLCA1NH0sCisgICAgICAgIHsweDgwMGYsIDU0fSwKKyAgICAgICAgezB4ODAxOCwgNTR9LAorICAgICAgICB7MHg4MDFmLCA1NH0sCisgICAgICAgIHsweDgwMjksIDU0fSwKKyAgICAgICAgezB4YzAzOCwgNTR9LAorICAgICAgICB7MHg4MDAzLCA1NX0sCisgICAgICAgIHsweDgwMDYsIDU1fSwKKyAgICAgICAgezB4ODAwYSwgNTV9LAorICAgICAgICB7MHg4MDBmLCA1NX0sCisgICAgICAgIHsweDgwMTgsIDU1fSwKKyAgICAgICAgezB4ODAxZiwgNTV9LAorICAgICAgICB7MHg4MDI5LCA1NX0sCisgICAgICAgIHsweGMwMzgsIDU1fSwKKyAgICB9LAorICAgIC8qIDIxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA1Nn0sCisgICAgICAgIHsweDgwMDYsIDU2fSwKKyAgICAgICAgezB4ODAwYSwgNTZ9LAorICAgICAgICB7MHg4MDBmLCA1Nn0sCisgICAgICAgIHsweDgwMTgsIDU2fSwKKyAgICAgICAgezB4ODAxZiwgNTZ9LAorICAgICAgICB7MHg4MDI5LCA1Nn0sCisgICAgICAgIHsweGMwMzgsIDU2fSwKKyAgICAgICAgezB4ODAwMywgNTd9LAorICAgICAgICB7MHg4MDA2LCA1N30sCisgICAgICAgIHsweDgwMGEsIDU3fSwKKyAgICAgICAgezB4ODAwZiwgNTd9LAorICAgICAgICB7MHg4MDE4LCA1N30sCisgICAgICAgIHsweDgwMWYsIDU3fSwKKyAgICAgICAgezB4ODAyOSwgNTd9LAorICAgICAgICB7MHhjMDM4LCA1N30sCisgICAgfSwKKyAgICAvKiAyMiAqLworICAgIHsKKyAgICAgICAgezB4MWEsIDB9LAorICAgICAgICB7MHgxYiwgMH0sCisgICAgICAgIHsweDFkLCAwfSwKKyAgICAgICAgezB4MWUsIDB9LAorICAgICAgICB7MHgyMSwgMH0sCisgICAgICAgIHsweDIyLCAwfSwKKyAgICAgICAgezB4MjQsIDB9LAorICAgICAgICB7MHgyNSwgMH0sCisgICAgICAgIHsweDJiLCAwfSwKKyAgICAgICAgezB4MmUsIDB9LAorICAgICAgICB7MHgzMiwgMH0sCisgICAgICAgIHsweDM1LCAwfSwKKyAgICAgICAgezB4M2EsIDB9LAorICAgICAgICB7MHgzZCwgMH0sCisgICAgICAgIHsweDQxLCAwfSwKKyAgICAgICAgezB4NDA0NCwgMH0sCisgICAgfSwKKyAgICAvKiAyMyAqLworICAgIHsKKyAgICAgICAgezB4YzAwMCwgNjF9LAorICAgICAgICB7MHhjMDAwLCA2NX0sCisgICAgICAgIHsweGMwMDAsIDk1fSwKKyAgICAgICAgezB4YzAwMCwgOTh9LAorICAgICAgICB7MHhjMDAwLCAxMDB9LAorICAgICAgICB7MHhjMDAwLCAxMDJ9LAorICAgICAgICB7MHhjMDAwLCAxMDN9LAorICAgICAgICB7MHhjMDAwLCAxMDR9LAorICAgICAgICB7MHhjMDAwLCAxMDh9LAorICAgICAgICB7MHhjMDAwLCAxMDl9LAorICAgICAgICB7MHhjMDAwLCAxMTB9LAorICAgICAgICB7MHhjMDAwLCAxMTJ9LAorICAgICAgICB7MHhjMDAwLCAxMTR9LAorICAgICAgICB7MHhjMDAwLCAxMTd9LAorICAgICAgICB7MHgyNiwgMH0sCisgICAgICAgIHsweDI3LCAwfSwKKyAgICB9LAorICAgIC8qIDI0ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCA2MX0sCisgICAgICAgIHsweGMwMTYsIDYxfSwKKyAgICAgICAgezB4ODAwMSwgNjV9LAorICAgICAgICB7MHhjMDE2LCA2NX0sCisgICAgICAgIHsweDgwMDEsIDk1fSwKKyAgICAgICAgezB4YzAxNiwgOTV9LAorICAgICAgICB7MHg4MDAxLCA5OH0sCisgICAgICAgIHsweGMwMTYsIDk4fSwKKyAgICAgICAgezB4ODAwMSwgMTAwfSwKKyAgICAgICAgezB4YzAxNiwgMTAwfSwKKyAgICAgICAgezB4ODAwMSwgMTAyfSwKKyAgICAgICAgezB4YzAxNiwgMTAyfSwKKyAgICAgICAgezB4ODAwMSwgMTAzfSwKKyAgICAgICAgezB4YzAxNiwgMTAzfSwKKyAgICAgICAgezB4ODAwMSwgMTA0fSwKKyAgICAgICAgezB4YzAxNiwgMTA0fSwKKyAgICB9LAorICAgIC8qIDI1ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA2MX0sCisgICAgICAgIHsweDgwMDksIDYxfSwKKyAgICAgICAgezB4ODAxNywgNjF9LAorICAgICAgICB7MHhjMDI4LCA2MX0sCisgICAgICAgIHsweDgwMDIsIDY1fSwKKyAgICAgICAgezB4ODAwOSwgNjV9LAorICAgICAgICB7MHg4MDE3LCA2NX0sCisgICAgICAgIHsweGMwMjgsIDY1fSwKKyAgICAgICAgezB4ODAwMiwgOTV9LAorICAgICAgICB7MHg4MDA5LCA5NX0sCisgICAgICAgIHsweDgwMTcsIDk1fSwKKyAgICAgICAgezB4YzAyOCwgOTV9LAorICAgICAgICB7MHg4MDAyLCA5OH0sCisgICAgICAgIHsweDgwMDksIDk4fSwKKyAgICAgICAgezB4ODAxNywgOTh9LAorICAgICAgICB7MHhjMDI4LCA5OH0sCisgICAgfSwKKyAgICAvKiAyNiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNjF9LAorICAgICAgICB7MHg4MDA2LCA2MX0sCisgICAgICAgIHsweDgwMGEsIDYxfSwKKyAgICAgICAgezB4ODAwZiwgNjF9LAorICAgICAgICB7MHg4MDE4LCA2MX0sCisgICAgICAgIHsweDgwMWYsIDYxfSwKKyAgICAgICAgezB4ODAyOSwgNjF9LAorICAgICAgICB7MHhjMDM4LCA2MX0sCisgICAgICAgIHsweDgwMDMsIDY1fSwKKyAgICAgICAgezB4ODAwNiwgNjV9LAorICAgICAgICB7MHg4MDBhLCA2NX0sCisgICAgICAgIHsweDgwMGYsIDY1fSwKKyAgICAgICAgezB4ODAxOCwgNjV9LAorICAgICAgICB7MHg4MDFmLCA2NX0sCisgICAgICAgIHsweDgwMjksIDY1fSwKKyAgICAgICAgezB4YzAzOCwgNjV9LAorICAgIH0sCisgICAgLyogMjcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDk1fSwKKyAgICAgICAgezB4ODAwNiwgOTV9LAorICAgICAgICB7MHg4MDBhLCA5NX0sCisgICAgICAgIHsweDgwMGYsIDk1fSwKKyAgICAgICAgezB4ODAxOCwgOTV9LAorICAgICAgICB7MHg4MDFmLCA5NX0sCisgICAgICAgIHsweDgwMjksIDk1fSwKKyAgICAgICAgezB4YzAzOCwgOTV9LAorICAgICAgICB7MHg4MDAzLCA5OH0sCisgICAgICAgIHsweDgwMDYsIDk4fSwKKyAgICAgICAgezB4ODAwYSwgOTh9LAorICAgICAgICB7MHg4MDBmLCA5OH0sCisgICAgICAgIHsweDgwMTgsIDk4fSwKKyAgICAgICAgezB4ODAxZiwgOTh9LAorICAgICAgICB7MHg4MDI5LCA5OH0sCisgICAgICAgIHsweGMwMzgsIDk4fSwKKyAgICB9LAorICAgIC8qIDI4ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxMDB9LAorICAgICAgICB7MHg4MDA5LCAxMDB9LAorICAgICAgICB7MHg4MDE3LCAxMDB9LAorICAgICAgICB7MHhjMDI4LCAxMDB9LAorICAgICAgICB7MHg4MDAyLCAxMDJ9LAorICAgICAgICB7MHg4MDA5LCAxMDJ9LAorICAgICAgICB7MHg4MDE3LCAxMDJ9LAorICAgICAgICB7MHhjMDI4LCAxMDJ9LAorICAgICAgICB7MHg4MDAyLCAxMDN9LAorICAgICAgICB7MHg4MDA5LCAxMDN9LAorICAgICAgICB7MHg4MDE3LCAxMDN9LAorICAgICAgICB7MHhjMDI4LCAxMDN9LAorICAgICAgICB7MHg4MDAyLCAxMDR9LAorICAgICAgICB7MHg4MDA5LCAxMDR9LAorICAgICAgICB7MHg4MDE3LCAxMDR9LAorICAgICAgICB7MHhjMDI4LCAxMDR9LAorICAgIH0sCisgICAgLyogMjkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEwMH0sCisgICAgICAgIHsweDgwMDYsIDEwMH0sCisgICAgICAgIHsweDgwMGEsIDEwMH0sCisgICAgICAgIHsweDgwMGYsIDEwMH0sCisgICAgICAgIHsweDgwMTgsIDEwMH0sCisgICAgICAgIHsweDgwMWYsIDEwMH0sCisgICAgICAgIHsweDgwMjksIDEwMH0sCisgICAgICAgIHsweGMwMzgsIDEwMH0sCisgICAgICAgIHsweDgwMDMsIDEwMn0sCisgICAgICAgIHsweDgwMDYsIDEwMn0sCisgICAgICAgIHsweDgwMGEsIDEwMn0sCisgICAgICAgIHsweDgwMGYsIDEwMn0sCisgICAgICAgIHsweDgwMTgsIDEwMn0sCisgICAgICAgIHsweDgwMWYsIDEwMn0sCisgICAgICAgIHsweDgwMjksIDEwMn0sCisgICAgICAgIHsweGMwMzgsIDEwMn0sCisgICAgfSwKKyAgICAvKiAzMCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTAzfSwKKyAgICAgICAgezB4ODAwNiwgMTAzfSwKKyAgICAgICAgezB4ODAwYSwgMTAzfSwKKyAgICAgICAgezB4ODAwZiwgMTAzfSwKKyAgICAgICAgezB4ODAxOCwgMTAzfSwKKyAgICAgICAgezB4ODAxZiwgMTAzfSwKKyAgICAgICAgezB4ODAyOSwgMTAzfSwKKyAgICAgICAgezB4YzAzOCwgMTAzfSwKKyAgICAgICAgezB4ODAwMywgMTA0fSwKKyAgICAgICAgezB4ODAwNiwgMTA0fSwKKyAgICAgICAgezB4ODAwYSwgMTA0fSwKKyAgICAgICAgezB4ODAwZiwgMTA0fSwKKyAgICAgICAgezB4ODAxOCwgMTA0fSwKKyAgICAgICAgezB4ODAxZiwgMTA0fSwKKyAgICAgICAgezB4ODAyOSwgMTA0fSwKKyAgICAgICAgezB4YzAzOCwgMTA0fSwKKyAgICB9LAorICAgIC8qIDMxICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxMDh9LAorICAgICAgICB7MHhjMDE2LCAxMDh9LAorICAgICAgICB7MHg4MDAxLCAxMDl9LAorICAgICAgICB7MHhjMDE2LCAxMDl9LAorICAgICAgICB7MHg4MDAxLCAxMTB9LAorICAgICAgICB7MHhjMDE2LCAxMTB9LAorICAgICAgICB7MHg4MDAxLCAxMTJ9LAorICAgICAgICB7MHhjMDE2LCAxMTJ9LAorICAgICAgICB7MHg4MDAxLCAxMTR9LAorICAgICAgICB7MHhjMDE2LCAxMTR9LAorICAgICAgICB7MHg4MDAxLCAxMTd9LAorICAgICAgICB7MHhjMDE2LCAxMTd9LAorICAgICAgICB7MHhjMDAwLCA1OH0sCisgICAgICAgIHsweGMwMDAsIDY2fSwKKyAgICAgICAgezB4YzAwMCwgNjd9LAorICAgICAgICB7MHhjMDAwLCA2OH0sCisgICAgfSwKKyAgICAvKiAzMiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTA4fSwKKyAgICAgICAgezB4ODAwOSwgMTA4fSwKKyAgICAgICAgezB4ODAxNywgMTA4fSwKKyAgICAgICAgezB4YzAyOCwgMTA4fSwKKyAgICAgICAgezB4ODAwMiwgMTA5fSwKKyAgICAgICAgezB4ODAwOSwgMTA5fSwKKyAgICAgICAgezB4ODAxNywgMTA5fSwKKyAgICAgICAgezB4YzAyOCwgMTA5fSwKKyAgICAgICAgezB4ODAwMiwgMTEwfSwKKyAgICAgICAgezB4ODAwOSwgMTEwfSwKKyAgICAgICAgezB4ODAxNywgMTEwfSwKKyAgICAgICAgezB4YzAyOCwgMTEwfSwKKyAgICAgICAgezB4ODAwMiwgMTEyfSwKKyAgICAgICAgezB4ODAwOSwgMTEyfSwKKyAgICAgICAgezB4ODAxNywgMTEyfSwKKyAgICAgICAgezB4YzAyOCwgMTEyfSwKKyAgICB9LAorICAgIC8qIDMzICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMDh9LAorICAgICAgICB7MHg4MDA2LCAxMDh9LAorICAgICAgICB7MHg4MDBhLCAxMDh9LAorICAgICAgICB7MHg4MDBmLCAxMDh9LAorICAgICAgICB7MHg4MDE4LCAxMDh9LAorICAgICAgICB7MHg4MDFmLCAxMDh9LAorICAgICAgICB7MHg4MDI5LCAxMDh9LAorICAgICAgICB7MHhjMDM4LCAxMDh9LAorICAgICAgICB7MHg4MDAzLCAxMDl9LAorICAgICAgICB7MHg4MDA2LCAxMDl9LAorICAgICAgICB7MHg4MDBhLCAxMDl9LAorICAgICAgICB7MHg4MDBmLCAxMDl9LAorICAgICAgICB7MHg4MDE4LCAxMDl9LAorICAgICAgICB7MHg4MDFmLCAxMDl9LAorICAgICAgICB7MHg4MDI5LCAxMDl9LAorICAgICAgICB7MHhjMDM4LCAxMDl9LAorICAgIH0sCisgICAgLyogMzQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDExMH0sCisgICAgICAgIHsweDgwMDYsIDExMH0sCisgICAgICAgIHsweDgwMGEsIDExMH0sCisgICAgICAgIHsweDgwMGYsIDExMH0sCisgICAgICAgIHsweDgwMTgsIDExMH0sCisgICAgICAgIHsweDgwMWYsIDExMH0sCisgICAgICAgIHsweDgwMjksIDExMH0sCisgICAgICAgIHsweGMwMzgsIDExMH0sCisgICAgICAgIHsweDgwMDMsIDExMn0sCisgICAgICAgIHsweDgwMDYsIDExMn0sCisgICAgICAgIHsweDgwMGEsIDExMn0sCisgICAgICAgIHsweDgwMGYsIDExMn0sCisgICAgICAgIHsweDgwMTgsIDExMn0sCisgICAgICAgIHsweDgwMWYsIDExMn0sCisgICAgICAgIHsweDgwMjksIDExMn0sCisgICAgICAgIHsweGMwMzgsIDExMn0sCisgICAgfSwKKyAgICAvKiAzNSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTE0fSwKKyAgICAgICAgezB4ODAwOSwgMTE0fSwKKyAgICAgICAgezB4ODAxNywgMTE0fSwKKyAgICAgICAgezB4YzAyOCwgMTE0fSwKKyAgICAgICAgezB4ODAwMiwgMTE3fSwKKyAgICAgICAgezB4ODAwOSwgMTE3fSwKKyAgICAgICAgezB4ODAxNywgMTE3fSwKKyAgICAgICAgezB4YzAyOCwgMTE3fSwKKyAgICAgICAgezB4ODAwMSwgNTh9LAorICAgICAgICB7MHhjMDE2LCA1OH0sCisgICAgICAgIHsweDgwMDEsIDY2fSwKKyAgICAgICAgezB4YzAxNiwgNjZ9LAorICAgICAgICB7MHg4MDAxLCA2N30sCisgICAgICAgIHsweGMwMTYsIDY3fSwKKyAgICAgICAgezB4ODAwMSwgNjh9LAorICAgICAgICB7MHhjMDE2LCA2OH0sCisgICAgfSwKKyAgICAvKiAzNiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTE0fSwKKyAgICAgICAgezB4ODAwNiwgMTE0fSwKKyAgICAgICAgezB4ODAwYSwgMTE0fSwKKyAgICAgICAgezB4ODAwZiwgMTE0fSwKKyAgICAgICAgezB4ODAxOCwgMTE0fSwKKyAgICAgICAgezB4ODAxZiwgMTE0fSwKKyAgICAgICAgezB4ODAyOSwgMTE0fSwKKyAgICAgICAgezB4YzAzOCwgMTE0fSwKKyAgICAgICAgezB4ODAwMywgMTE3fSwKKyAgICAgICAgezB4ODAwNiwgMTE3fSwKKyAgICAgICAgezB4ODAwYSwgMTE3fSwKKyAgICAgICAgezB4ODAwZiwgMTE3fSwKKyAgICAgICAgezB4ODAxOCwgMTE3fSwKKyAgICAgICAgezB4ODAxZiwgMTE3fSwKKyAgICAgICAgezB4ODAyOSwgMTE3fSwKKyAgICAgICAgezB4YzAzOCwgMTE3fSwKKyAgICB9LAorICAgIC8qIDM3ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA1OH0sCisgICAgICAgIHsweDgwMDksIDU4fSwKKyAgICAgICAgezB4ODAxNywgNTh9LAorICAgICAgICB7MHhjMDI4LCA1OH0sCisgICAgICAgIHsweDgwMDIsIDY2fSwKKyAgICAgICAgezB4ODAwOSwgNjZ9LAorICAgICAgICB7MHg4MDE3LCA2Nn0sCisgICAgICAgIHsweGMwMjgsIDY2fSwKKyAgICAgICAgezB4ODAwMiwgNjd9LAorICAgICAgICB7MHg4MDA5LCA2N30sCisgICAgICAgIHsweDgwMTcsIDY3fSwKKyAgICAgICAgezB4YzAyOCwgNjd9LAorICAgICAgICB7MHg4MDAyLCA2OH0sCisgICAgICAgIHsweDgwMDksIDY4fSwKKyAgICAgICAgezB4ODAxNywgNjh9LAorICAgICAgICB7MHhjMDI4LCA2OH0sCisgICAgfSwKKyAgICAvKiAzOCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNTh9LAorICAgICAgICB7MHg4MDA2LCA1OH0sCisgICAgICAgIHsweDgwMGEsIDU4fSwKKyAgICAgICAgezB4ODAwZiwgNTh9LAorICAgICAgICB7MHg4MDE4LCA1OH0sCisgICAgICAgIHsweDgwMWYsIDU4fSwKKyAgICAgICAgezB4ODAyOSwgNTh9LAorICAgICAgICB7MHhjMDM4LCA1OH0sCisgICAgICAgIHsweDgwMDMsIDY2fSwKKyAgICAgICAgezB4ODAwNiwgNjZ9LAorICAgICAgICB7MHg4MDBhLCA2Nn0sCisgICAgICAgIHsweDgwMGYsIDY2fSwKKyAgICAgICAgezB4ODAxOCwgNjZ9LAorICAgICAgICB7MHg4MDFmLCA2Nn0sCisgICAgICAgIHsweDgwMjksIDY2fSwKKyAgICAgICAgezB4YzAzOCwgNjZ9LAorICAgIH0sCisgICAgLyogMzkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDY3fSwKKyAgICAgICAgezB4ODAwNiwgNjd9LAorICAgICAgICB7MHg4MDBhLCA2N30sCisgICAgICAgIHsweDgwMGYsIDY3fSwKKyAgICAgICAgezB4ODAxOCwgNjd9LAorICAgICAgICB7MHg4MDFmLCA2N30sCisgICAgICAgIHsweDgwMjksIDY3fSwKKyAgICAgICAgezB4YzAzOCwgNjd9LAorICAgICAgICB7MHg4MDAzLCA2OH0sCisgICAgICAgIHsweDgwMDYsIDY4fSwKKyAgICAgICAgezB4ODAwYSwgNjh9LAorICAgICAgICB7MHg4MDBmLCA2OH0sCisgICAgICAgIHsweDgwMTgsIDY4fSwKKyAgICAgICAgezB4ODAxZiwgNjh9LAorICAgICAgICB7MHg4MDI5LCA2OH0sCisgICAgICAgIHsweGMwMzgsIDY4fSwKKyAgICB9LAorICAgIC8qIDQwICovCisgICAgeworICAgICAgICB7MHgyYywgMH0sCisgICAgICAgIHsweDJkLCAwfSwKKyAgICAgICAgezB4MmYsIDB9LAorICAgICAgICB7MHgzMCwgMH0sCisgICAgICAgIHsweDMzLCAwfSwKKyAgICAgICAgezB4MzQsIDB9LAorICAgICAgICB7MHgzNiwgMH0sCisgICAgICAgIHsweDM3LCAwfSwKKyAgICAgICAgezB4M2IsIDB9LAorICAgICAgICB7MHgzYywgMH0sCisgICAgICAgIHsweDNlLCAwfSwKKyAgICAgICAgezB4M2YsIDB9LAorICAgICAgICB7MHg0MiwgMH0sCisgICAgICAgIHsweDQzLCAwfSwKKyAgICAgICAgezB4NDUsIDB9LAorICAgICAgICB7MHg0MDQ4LCAwfSwKKyAgICB9LAorICAgIC8qIDQxICovCisgICAgeworICAgICAgICB7MHhjMDAwLCA2OX0sCisgICAgICAgIHsweGMwMDAsIDcwfSwKKyAgICAgICAgezB4YzAwMCwgNzF9LAorICAgICAgICB7MHhjMDAwLCA3Mn0sCisgICAgICAgIHsweGMwMDAsIDczfSwKKyAgICAgICAgezB4YzAwMCwgNzR9LAorICAgICAgICB7MHhjMDAwLCA3NX0sCisgICAgICAgIHsweGMwMDAsIDc2fSwKKyAgICAgICAgezB4YzAwMCwgNzd9LAorICAgICAgICB7MHhjMDAwLCA3OH0sCisgICAgICAgIHsweGMwMDAsIDc5fSwKKyAgICAgICAgezB4YzAwMCwgODB9LAorICAgICAgICB7MHhjMDAwLCA4MX0sCisgICAgICAgIHsweGMwMDAsIDgyfSwKKyAgICAgICAgezB4YzAwMCwgODN9LAorICAgICAgICB7MHhjMDAwLCA4NH0sCisgICAgfSwKKyAgICAvKiA0MiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgNjl9LAorICAgICAgICB7MHhjMDE2LCA2OX0sCisgICAgICAgIHsweDgwMDEsIDcwfSwKKyAgICAgICAgezB4YzAxNiwgNzB9LAorICAgICAgICB7MHg4MDAxLCA3MX0sCisgICAgICAgIHsweGMwMTYsIDcxfSwKKyAgICAgICAgezB4ODAwMSwgNzJ9LAorICAgICAgICB7MHhjMDE2LCA3Mn0sCisgICAgICAgIHsweDgwMDEsIDczfSwKKyAgICAgICAgezB4YzAxNiwgNzN9LAorICAgICAgICB7MHg4MDAxLCA3NH0sCisgICAgICAgIHsweGMwMTYsIDc0fSwKKyAgICAgICAgezB4ODAwMSwgNzV9LAorICAgICAgICB7MHhjMDE2LCA3NX0sCisgICAgICAgIHsweDgwMDEsIDc2fSwKKyAgICAgICAgezB4YzAxNiwgNzZ9LAorICAgIH0sCisgICAgLyogNDMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDY5fSwKKyAgICAgICAgezB4ODAwOSwgNjl9LAorICAgICAgICB7MHg4MDE3LCA2OX0sCisgICAgICAgIHsweGMwMjgsIDY5fSwKKyAgICAgICAgezB4ODAwMiwgNzB9LAorICAgICAgICB7MHg4MDA5LCA3MH0sCisgICAgICAgIHsweDgwMTcsIDcwfSwKKyAgICAgICAgezB4YzAyOCwgNzB9LAorICAgICAgICB7MHg4MDAyLCA3MX0sCisgICAgICAgIHsweDgwMDksIDcxfSwKKyAgICAgICAgezB4ODAxNywgNzF9LAorICAgICAgICB7MHhjMDI4LCA3MX0sCisgICAgICAgIHsweDgwMDIsIDcyfSwKKyAgICAgICAgezB4ODAwOSwgNzJ9LAorICAgICAgICB7MHg4MDE3LCA3Mn0sCisgICAgICAgIHsweGMwMjgsIDcyfSwKKyAgICB9LAorICAgIC8qIDQ0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA2OX0sCisgICAgICAgIHsweDgwMDYsIDY5fSwKKyAgICAgICAgezB4ODAwYSwgNjl9LAorICAgICAgICB7MHg4MDBmLCA2OX0sCisgICAgICAgIHsweDgwMTgsIDY5fSwKKyAgICAgICAgezB4ODAxZiwgNjl9LAorICAgICAgICB7MHg4MDI5LCA2OX0sCisgICAgICAgIHsweGMwMzgsIDY5fSwKKyAgICAgICAgezB4ODAwMywgNzB9LAorICAgICAgICB7MHg4MDA2LCA3MH0sCisgICAgICAgIHsweDgwMGEsIDcwfSwKKyAgICAgICAgezB4ODAwZiwgNzB9LAorICAgICAgICB7MHg4MDE4LCA3MH0sCisgICAgICAgIHsweDgwMWYsIDcwfSwKKyAgICAgICAgezB4ODAyOSwgNzB9LAorICAgICAgICB7MHhjMDM4LCA3MH0sCisgICAgfSwKKyAgICAvKiA0NSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNzF9LAorICAgICAgICB7MHg4MDA2LCA3MX0sCisgICAgICAgIHsweDgwMGEsIDcxfSwKKyAgICAgICAgezB4ODAwZiwgNzF9LAorICAgICAgICB7MHg4MDE4LCA3MX0sCisgICAgICAgIHsweDgwMWYsIDcxfSwKKyAgICAgICAgezB4ODAyOSwgNzF9LAorICAgICAgICB7MHhjMDM4LCA3MX0sCisgICAgICAgIHsweDgwMDMsIDcyfSwKKyAgICAgICAgezB4ODAwNiwgNzJ9LAorICAgICAgICB7MHg4MDBhLCA3Mn0sCisgICAgICAgIHsweDgwMGYsIDcyfSwKKyAgICAgICAgezB4ODAxOCwgNzJ9LAorICAgICAgICB7MHg4MDFmLCA3Mn0sCisgICAgICAgIHsweDgwMjksIDcyfSwKKyAgICAgICAgezB4YzAzOCwgNzJ9LAorICAgIH0sCisgICAgLyogNDYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDczfSwKKyAgICAgICAgezB4ODAwOSwgNzN9LAorICAgICAgICB7MHg4MDE3LCA3M30sCisgICAgICAgIHsweGMwMjgsIDczfSwKKyAgICAgICAgezB4ODAwMiwgNzR9LAorICAgICAgICB7MHg4MDA5LCA3NH0sCisgICAgICAgIHsweDgwMTcsIDc0fSwKKyAgICAgICAgezB4YzAyOCwgNzR9LAorICAgICAgICB7MHg4MDAyLCA3NX0sCisgICAgICAgIHsweDgwMDksIDc1fSwKKyAgICAgICAgezB4ODAxNywgNzV9LAorICAgICAgICB7MHhjMDI4LCA3NX0sCisgICAgICAgIHsweDgwMDIsIDc2fSwKKyAgICAgICAgezB4ODAwOSwgNzZ9LAorICAgICAgICB7MHg4MDE3LCA3Nn0sCisgICAgICAgIHsweGMwMjgsIDc2fSwKKyAgICB9LAorICAgIC8qIDQ3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA3M30sCisgICAgICAgIHsweDgwMDYsIDczfSwKKyAgICAgICAgezB4ODAwYSwgNzN9LAorICAgICAgICB7MHg4MDBmLCA3M30sCisgICAgICAgIHsweDgwMTgsIDczfSwKKyAgICAgICAgezB4ODAxZiwgNzN9LAorICAgICAgICB7MHg4MDI5LCA3M30sCisgICAgICAgIHsweGMwMzgsIDczfSwKKyAgICAgICAgezB4ODAwMywgNzR9LAorICAgICAgICB7MHg4MDA2LCA3NH0sCisgICAgICAgIHsweDgwMGEsIDc0fSwKKyAgICAgICAgezB4ODAwZiwgNzR9LAorICAgICAgICB7MHg4MDE4LCA3NH0sCisgICAgICAgIHsweDgwMWYsIDc0fSwKKyAgICAgICAgezB4ODAyOSwgNzR9LAorICAgICAgICB7MHhjMDM4LCA3NH0sCisgICAgfSwKKyAgICAvKiA0OCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNzV9LAorICAgICAgICB7MHg4MDA2LCA3NX0sCisgICAgICAgIHsweDgwMGEsIDc1fSwKKyAgICAgICAgezB4ODAwZiwgNzV9LAorICAgICAgICB7MHg4MDE4LCA3NX0sCisgICAgICAgIHsweDgwMWYsIDc1fSwKKyAgICAgICAgezB4ODAyOSwgNzV9LAorICAgICAgICB7MHhjMDM4LCA3NX0sCisgICAgICAgIHsweDgwMDMsIDc2fSwKKyAgICAgICAgezB4ODAwNiwgNzZ9LAorICAgICAgICB7MHg4MDBhLCA3Nn0sCisgICAgICAgIHsweDgwMGYsIDc2fSwKKyAgICAgICAgezB4ODAxOCwgNzZ9LAorICAgICAgICB7MHg4MDFmLCA3Nn0sCisgICAgICAgIHsweDgwMjksIDc2fSwKKyAgICAgICAgezB4YzAzOCwgNzZ9LAorICAgIH0sCisgICAgLyogNDkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDc3fSwKKyAgICAgICAgezB4YzAxNiwgNzd9LAorICAgICAgICB7MHg4MDAxLCA3OH0sCisgICAgICAgIHsweGMwMTYsIDc4fSwKKyAgICAgICAgezB4ODAwMSwgNzl9LAorICAgICAgICB7MHhjMDE2LCA3OX0sCisgICAgICAgIHsweDgwMDEsIDgwfSwKKyAgICAgICAgezB4YzAxNiwgODB9LAorICAgICAgICB7MHg4MDAxLCA4MX0sCisgICAgICAgIHsweGMwMTYsIDgxfSwKKyAgICAgICAgezB4ODAwMSwgODJ9LAorICAgICAgICB7MHhjMDE2LCA4Mn0sCisgICAgICAgIHsweDgwMDEsIDgzfSwKKyAgICAgICAgezB4YzAxNiwgODN9LAorICAgICAgICB7MHg4MDAxLCA4NH0sCisgICAgICAgIHsweGMwMTYsIDg0fSwKKyAgICB9LAorICAgIC8qIDUwICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA3N30sCisgICAgICAgIHsweDgwMDksIDc3fSwKKyAgICAgICAgezB4ODAxNywgNzd9LAorICAgICAgICB7MHhjMDI4LCA3N30sCisgICAgICAgIHsweDgwMDIsIDc4fSwKKyAgICAgICAgezB4ODAwOSwgNzh9LAorICAgICAgICB7MHg4MDE3LCA3OH0sCisgICAgICAgIHsweGMwMjgsIDc4fSwKKyAgICAgICAgezB4ODAwMiwgNzl9LAorICAgICAgICB7MHg4MDA5LCA3OX0sCisgICAgICAgIHsweDgwMTcsIDc5fSwKKyAgICAgICAgezB4YzAyOCwgNzl9LAorICAgICAgICB7MHg4MDAyLCA4MH0sCisgICAgICAgIHsweDgwMDksIDgwfSwKKyAgICAgICAgezB4ODAxNywgODB9LAorICAgICAgICB7MHhjMDI4LCA4MH0sCisgICAgfSwKKyAgICAvKiA1MSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNzd9LAorICAgICAgICB7MHg4MDA2LCA3N30sCisgICAgICAgIHsweDgwMGEsIDc3fSwKKyAgICAgICAgezB4ODAwZiwgNzd9LAorICAgICAgICB7MHg4MDE4LCA3N30sCisgICAgICAgIHsweDgwMWYsIDc3fSwKKyAgICAgICAgezB4ODAyOSwgNzd9LAorICAgICAgICB7MHhjMDM4LCA3N30sCisgICAgICAgIHsweDgwMDMsIDc4fSwKKyAgICAgICAgezB4ODAwNiwgNzh9LAorICAgICAgICB7MHg4MDBhLCA3OH0sCisgICAgICAgIHsweDgwMGYsIDc4fSwKKyAgICAgICAgezB4ODAxOCwgNzh9LAorICAgICAgICB7MHg4MDFmLCA3OH0sCisgICAgICAgIHsweDgwMjksIDc4fSwKKyAgICAgICAgezB4YzAzOCwgNzh9LAorICAgIH0sCisgICAgLyogNTIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDc5fSwKKyAgICAgICAgezB4ODAwNiwgNzl9LAorICAgICAgICB7MHg4MDBhLCA3OX0sCisgICAgICAgIHsweDgwMGYsIDc5fSwKKyAgICAgICAgezB4ODAxOCwgNzl9LAorICAgICAgICB7MHg4MDFmLCA3OX0sCisgICAgICAgIHsweDgwMjksIDc5fSwKKyAgICAgICAgezB4YzAzOCwgNzl9LAorICAgICAgICB7MHg4MDAzLCA4MH0sCisgICAgICAgIHsweDgwMDYsIDgwfSwKKyAgICAgICAgezB4ODAwYSwgODB9LAorICAgICAgICB7MHg4MDBmLCA4MH0sCisgICAgICAgIHsweDgwMTgsIDgwfSwKKyAgICAgICAgezB4ODAxZiwgODB9LAorICAgICAgICB7MHg4MDI5LCA4MH0sCisgICAgICAgIHsweGMwMzgsIDgwfSwKKyAgICB9LAorICAgIC8qIDUzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA4MX0sCisgICAgICAgIHsweDgwMDksIDgxfSwKKyAgICAgICAgezB4ODAxNywgODF9LAorICAgICAgICB7MHhjMDI4LCA4MX0sCisgICAgICAgIHsweDgwMDIsIDgyfSwKKyAgICAgICAgezB4ODAwOSwgODJ9LAorICAgICAgICB7MHg4MDE3LCA4Mn0sCisgICAgICAgIHsweGMwMjgsIDgyfSwKKyAgICAgICAgezB4ODAwMiwgODN9LAorICAgICAgICB7MHg4MDA5LCA4M30sCisgICAgICAgIHsweDgwMTcsIDgzfSwKKyAgICAgICAgezB4YzAyOCwgODN9LAorICAgICAgICB7MHg4MDAyLCA4NH0sCisgICAgICAgIHsweDgwMDksIDg0fSwKKyAgICAgICAgezB4ODAxNywgODR9LAorICAgICAgICB7MHhjMDI4LCA4NH0sCisgICAgfSwKKyAgICAvKiA1NCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgODF9LAorICAgICAgICB7MHg4MDA2LCA4MX0sCisgICAgICAgIHsweDgwMGEsIDgxfSwKKyAgICAgICAgezB4ODAwZiwgODF9LAorICAgICAgICB7MHg4MDE4LCA4MX0sCisgICAgICAgIHsweDgwMWYsIDgxfSwKKyAgICAgICAgezB4ODAyOSwgODF9LAorICAgICAgICB7MHhjMDM4LCA4MX0sCisgICAgICAgIHsweDgwMDMsIDgyfSwKKyAgICAgICAgezB4ODAwNiwgODJ9LAorICAgICAgICB7MHg4MDBhLCA4Mn0sCisgICAgICAgIHsweDgwMGYsIDgyfSwKKyAgICAgICAgezB4ODAxOCwgODJ9LAorICAgICAgICB7MHg4MDFmLCA4Mn0sCisgICAgICAgIHsweDgwMjksIDgyfSwKKyAgICAgICAgezB4YzAzOCwgODJ9LAorICAgIH0sCisgICAgLyogNTUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDgzfSwKKyAgICAgICAgezB4ODAwNiwgODN9LAorICAgICAgICB7MHg4MDBhLCA4M30sCisgICAgICAgIHsweDgwMGYsIDgzfSwKKyAgICAgICAgezB4ODAxOCwgODN9LAorICAgICAgICB7MHg4MDFmLCA4M30sCisgICAgICAgIHsweDgwMjksIDgzfSwKKyAgICAgICAgezB4YzAzOCwgODN9LAorICAgICAgICB7MHg4MDAzLCA4NH0sCisgICAgICAgIHsweDgwMDYsIDg0fSwKKyAgICAgICAgezB4ODAwYSwgODR9LAorICAgICAgICB7MHg4MDBmLCA4NH0sCisgICAgICAgIHsweDgwMTgsIDg0fSwKKyAgICAgICAgezB4ODAxZiwgODR9LAorICAgICAgICB7MHg4MDI5LCA4NH0sCisgICAgICAgIHsweGMwMzgsIDg0fSwKKyAgICB9LAorICAgIC8qIDU2ICovCisgICAgeworICAgICAgICB7MHhjMDAwLCA4NX0sCisgICAgICAgIHsweGMwMDAsIDg2fSwKKyAgICAgICAgezB4YzAwMCwgODd9LAorICAgICAgICB7MHhjMDAwLCA4OX0sCisgICAgICAgIHsweGMwMDAsIDEwNn0sCisgICAgICAgIHsweGMwMDAsIDEwN30sCisgICAgICAgIHsweGMwMDAsIDExM30sCisgICAgICAgIHsweGMwMDAsIDExOH0sCisgICAgICAgIHsweGMwMDAsIDExOX0sCisgICAgICAgIHsweGMwMDAsIDEyMH0sCisgICAgICAgIHsweGMwMDAsIDEyMX0sCisgICAgICAgIHsweGMwMDAsIDEyMn0sCisgICAgICAgIHsweDQ2LCAwfSwKKyAgICAgICAgezB4NDcsIDB9LAorICAgICAgICB7MHg0OSwgMH0sCisgICAgICAgIHsweDQwNGEsIDB9LAorICAgIH0sCisgICAgLyogNTcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDg1fSwKKyAgICAgICAgezB4YzAxNiwgODV9LAorICAgICAgICB7MHg4MDAxLCA4Nn0sCisgICAgICAgIHsweGMwMTYsIDg2fSwKKyAgICAgICAgezB4ODAwMSwgODd9LAorICAgICAgICB7MHhjMDE2LCA4N30sCisgICAgICAgIHsweDgwMDEsIDg5fSwKKyAgICAgICAgezB4YzAxNiwgODl9LAorICAgICAgICB7MHg4MDAxLCAxMDZ9LAorICAgICAgICB7MHhjMDE2LCAxMDZ9LAorICAgICAgICB7MHg4MDAxLCAxMDd9LAorICAgICAgICB7MHhjMDE2LCAxMDd9LAorICAgICAgICB7MHg4MDAxLCAxMTN9LAorICAgICAgICB7MHhjMDE2LCAxMTN9LAorICAgICAgICB7MHg4MDAxLCAxMTh9LAorICAgICAgICB7MHhjMDE2LCAxMTh9LAorICAgIH0sCisgICAgLyogNTggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDg1fSwKKyAgICAgICAgezB4ODAwOSwgODV9LAorICAgICAgICB7MHg4MDE3LCA4NX0sCisgICAgICAgIHsweGMwMjgsIDg1fSwKKyAgICAgICAgezB4ODAwMiwgODZ9LAorICAgICAgICB7MHg4MDA5LCA4Nn0sCisgICAgICAgIHsweDgwMTcsIDg2fSwKKyAgICAgICAgezB4YzAyOCwgODZ9LAorICAgICAgICB7MHg4MDAyLCA4N30sCisgICAgICAgIHsweDgwMDksIDg3fSwKKyAgICAgICAgezB4ODAxNywgODd9LAorICAgICAgICB7MHhjMDI4LCA4N30sCisgICAgICAgIHsweDgwMDIsIDg5fSwKKyAgICAgICAgezB4ODAwOSwgODl9LAorICAgICAgICB7MHg4MDE3LCA4OX0sCisgICAgICAgIHsweGMwMjgsIDg5fSwKKyAgICB9LAorICAgIC8qIDU5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA4NX0sCisgICAgICAgIHsweDgwMDYsIDg1fSwKKyAgICAgICAgezB4ODAwYSwgODV9LAorICAgICAgICB7MHg4MDBmLCA4NX0sCisgICAgICAgIHsweDgwMTgsIDg1fSwKKyAgICAgICAgezB4ODAxZiwgODV9LAorICAgICAgICB7MHg4MDI5LCA4NX0sCisgICAgICAgIHsweGMwMzgsIDg1fSwKKyAgICAgICAgezB4ODAwMywgODZ9LAorICAgICAgICB7MHg4MDA2LCA4Nn0sCisgICAgICAgIHsweDgwMGEsIDg2fSwKKyAgICAgICAgezB4ODAwZiwgODZ9LAorICAgICAgICB7MHg4MDE4LCA4Nn0sCisgICAgICAgIHsweDgwMWYsIDg2fSwKKyAgICAgICAgezB4ODAyOSwgODZ9LAorICAgICAgICB7MHhjMDM4LCA4Nn0sCisgICAgfSwKKyAgICAvKiA2MCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgODd9LAorICAgICAgICB7MHg4MDA2LCA4N30sCisgICAgICAgIHsweDgwMGEsIDg3fSwKKyAgICAgICAgezB4ODAwZiwgODd9LAorICAgICAgICB7MHg4MDE4LCA4N30sCisgICAgICAgIHsweDgwMWYsIDg3fSwKKyAgICAgICAgezB4ODAyOSwgODd9LAorICAgICAgICB7MHhjMDM4LCA4N30sCisgICAgICAgIHsweDgwMDMsIDg5fSwKKyAgICAgICAgezB4ODAwNiwgODl9LAorICAgICAgICB7MHg4MDBhLCA4OX0sCisgICAgICAgIHsweDgwMGYsIDg5fSwKKyAgICAgICAgezB4ODAxOCwgODl9LAorICAgICAgICB7MHg4MDFmLCA4OX0sCisgICAgICAgIHsweDgwMjksIDg5fSwKKyAgICAgICAgezB4YzAzOCwgODl9LAorICAgIH0sCisgICAgLyogNjEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDEwNn0sCisgICAgICAgIHsweDgwMDksIDEwNn0sCisgICAgICAgIHsweDgwMTcsIDEwNn0sCisgICAgICAgIHsweGMwMjgsIDEwNn0sCisgICAgICAgIHsweDgwMDIsIDEwN30sCisgICAgICAgIHsweDgwMDksIDEwN30sCisgICAgICAgIHsweDgwMTcsIDEwN30sCisgICAgICAgIHsweGMwMjgsIDEwN30sCisgICAgICAgIHsweDgwMDIsIDExM30sCisgICAgICAgIHsweDgwMDksIDExM30sCisgICAgICAgIHsweDgwMTcsIDExM30sCisgICAgICAgIHsweGMwMjgsIDExM30sCisgICAgICAgIHsweDgwMDIsIDExOH0sCisgICAgICAgIHsweDgwMDksIDExOH0sCisgICAgICAgIHsweDgwMTcsIDExOH0sCisgICAgICAgIHsweGMwMjgsIDExOH0sCisgICAgfSwKKyAgICAvKiA2MiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTA2fSwKKyAgICAgICAgezB4ODAwNiwgMTA2fSwKKyAgICAgICAgezB4ODAwYSwgMTA2fSwKKyAgICAgICAgezB4ODAwZiwgMTA2fSwKKyAgICAgICAgezB4ODAxOCwgMTA2fSwKKyAgICAgICAgezB4ODAxZiwgMTA2fSwKKyAgICAgICAgezB4ODAyOSwgMTA2fSwKKyAgICAgICAgezB4YzAzOCwgMTA2fSwKKyAgICAgICAgezB4ODAwMywgMTA3fSwKKyAgICAgICAgezB4ODAwNiwgMTA3fSwKKyAgICAgICAgezB4ODAwYSwgMTA3fSwKKyAgICAgICAgezB4ODAwZiwgMTA3fSwKKyAgICAgICAgezB4ODAxOCwgMTA3fSwKKyAgICAgICAgezB4ODAxZiwgMTA3fSwKKyAgICAgICAgezB4ODAyOSwgMTA3fSwKKyAgICAgICAgezB4YzAzOCwgMTA3fSwKKyAgICB9LAorICAgIC8qIDYzICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMTN9LAorICAgICAgICB7MHg4MDA2LCAxMTN9LAorICAgICAgICB7MHg4MDBhLCAxMTN9LAorICAgICAgICB7MHg4MDBmLCAxMTN9LAorICAgICAgICB7MHg4MDE4LCAxMTN9LAorICAgICAgICB7MHg4MDFmLCAxMTN9LAorICAgICAgICB7MHg4MDI5LCAxMTN9LAorICAgICAgICB7MHhjMDM4LCAxMTN9LAorICAgICAgICB7MHg4MDAzLCAxMTh9LAorICAgICAgICB7MHg4MDA2LCAxMTh9LAorICAgICAgICB7MHg4MDBhLCAxMTh9LAorICAgICAgICB7MHg4MDBmLCAxMTh9LAorICAgICAgICB7MHg4MDE4LCAxMTh9LAorICAgICAgICB7MHg4MDFmLCAxMTh9LAorICAgICAgICB7MHg4MDI5LCAxMTh9LAorICAgICAgICB7MHhjMDM4LCAxMTh9LAorICAgIH0sCisgICAgLyogNjQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDExOX0sCisgICAgICAgIHsweGMwMTYsIDExOX0sCisgICAgICAgIHsweDgwMDEsIDEyMH0sCisgICAgICAgIHsweGMwMTYsIDEyMH0sCisgICAgICAgIHsweDgwMDEsIDEyMX0sCisgICAgICAgIHsweGMwMTYsIDEyMX0sCisgICAgICAgIHsweDgwMDEsIDEyMn0sCisgICAgICAgIHsweGMwMTYsIDEyMn0sCisgICAgICAgIHsweGMwMDAsIDM4fSwKKyAgICAgICAgezB4YzAwMCwgNDJ9LAorICAgICAgICB7MHhjMDAwLCA0NH0sCisgICAgICAgIHsweGMwMDAsIDU5fSwKKyAgICAgICAgezB4YzAwMCwgODh9LAorICAgICAgICB7MHhjMDAwLCA5MH0sCisgICAgICAgIHsweDRiLCAwfSwKKyAgICAgICAgezB4NGUsIDB9LAorICAgIH0sCisgICAgLyogNjUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDExOX0sCisgICAgICAgIHsweDgwMDksIDExOX0sCisgICAgICAgIHsweDgwMTcsIDExOX0sCisgICAgICAgIHsweGMwMjgsIDExOX0sCisgICAgICAgIHsweDgwMDIsIDEyMH0sCisgICAgICAgIHsweDgwMDksIDEyMH0sCisgICAgICAgIHsweDgwMTcsIDEyMH0sCisgICAgICAgIHsweGMwMjgsIDEyMH0sCisgICAgICAgIHsweDgwMDIsIDEyMX0sCisgICAgICAgIHsweDgwMDksIDEyMX0sCisgICAgICAgIHsweDgwMTcsIDEyMX0sCisgICAgICAgIHsweGMwMjgsIDEyMX0sCisgICAgICAgIHsweDgwMDIsIDEyMn0sCisgICAgICAgIHsweDgwMDksIDEyMn0sCisgICAgICAgIHsweDgwMTcsIDEyMn0sCisgICAgICAgIHsweGMwMjgsIDEyMn0sCisgICAgfSwKKyAgICAvKiA2NiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTE5fSwKKyAgICAgICAgezB4ODAwNiwgMTE5fSwKKyAgICAgICAgezB4ODAwYSwgMTE5fSwKKyAgICAgICAgezB4ODAwZiwgMTE5fSwKKyAgICAgICAgezB4ODAxOCwgMTE5fSwKKyAgICAgICAgezB4ODAxZiwgMTE5fSwKKyAgICAgICAgezB4ODAyOSwgMTE5fSwKKyAgICAgICAgezB4YzAzOCwgMTE5fSwKKyAgICAgICAgezB4ODAwMywgMTIwfSwKKyAgICAgICAgezB4ODAwNiwgMTIwfSwKKyAgICAgICAgezB4ODAwYSwgMTIwfSwKKyAgICAgICAgezB4ODAwZiwgMTIwfSwKKyAgICAgICAgezB4ODAxOCwgMTIwfSwKKyAgICAgICAgezB4ODAxZiwgMTIwfSwKKyAgICAgICAgezB4ODAyOSwgMTIwfSwKKyAgICAgICAgezB4YzAzOCwgMTIwfSwKKyAgICB9LAorICAgIC8qIDY3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMjF9LAorICAgICAgICB7MHg4MDA2LCAxMjF9LAorICAgICAgICB7MHg4MDBhLCAxMjF9LAorICAgICAgICB7MHg4MDBmLCAxMjF9LAorICAgICAgICB7MHg4MDE4LCAxMjF9LAorICAgICAgICB7MHg4MDFmLCAxMjF9LAorICAgICAgICB7MHg4MDI5LCAxMjF9LAorICAgICAgICB7MHhjMDM4LCAxMjF9LAorICAgICAgICB7MHg4MDAzLCAxMjJ9LAorICAgICAgICB7MHg4MDA2LCAxMjJ9LAorICAgICAgICB7MHg4MDBhLCAxMjJ9LAorICAgICAgICB7MHg4MDBmLCAxMjJ9LAorICAgICAgICB7MHg4MDE4LCAxMjJ9LAorICAgICAgICB7MHg4MDFmLCAxMjJ9LAorICAgICAgICB7MHg4MDI5LCAxMjJ9LAorICAgICAgICB7MHhjMDM4LCAxMjJ9LAorICAgIH0sCisgICAgLyogNjggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDM4fSwKKyAgICAgICAgezB4YzAxNiwgMzh9LAorICAgICAgICB7MHg4MDAxLCA0Mn0sCisgICAgICAgIHsweGMwMTYsIDQyfSwKKyAgICAgICAgezB4ODAwMSwgNDR9LAorICAgICAgICB7MHhjMDE2LCA0NH0sCisgICAgICAgIHsweDgwMDEsIDU5fSwKKyAgICAgICAgezB4YzAxNiwgNTl9LAorICAgICAgICB7MHg4MDAxLCA4OH0sCisgICAgICAgIHsweGMwMTYsIDg4fSwKKyAgICAgICAgezB4ODAwMSwgOTB9LAorICAgICAgICB7MHhjMDE2LCA5MH0sCisgICAgICAgIHsweDRjLCAwfSwKKyAgICAgICAgezB4NGQsIDB9LAorICAgICAgICB7MHg0ZiwgMH0sCisgICAgICAgIHsweDUxLCAwfSwKKyAgICB9LAorICAgIC8qIDY5ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAzOH0sCisgICAgICAgIHsweDgwMDksIDM4fSwKKyAgICAgICAgezB4ODAxNywgMzh9LAorICAgICAgICB7MHhjMDI4LCAzOH0sCisgICAgICAgIHsweDgwMDIsIDQyfSwKKyAgICAgICAgezB4ODAwOSwgNDJ9LAorICAgICAgICB7MHg4MDE3LCA0Mn0sCisgICAgICAgIHsweGMwMjgsIDQyfSwKKyAgICAgICAgezB4ODAwMiwgNDR9LAorICAgICAgICB7MHg4MDA5LCA0NH0sCisgICAgICAgIHsweDgwMTcsIDQ0fSwKKyAgICAgICAgezB4YzAyOCwgNDR9LAorICAgICAgICB7MHg4MDAyLCA1OX0sCisgICAgICAgIHsweDgwMDksIDU5fSwKKyAgICAgICAgezB4ODAxNywgNTl9LAorICAgICAgICB7MHhjMDI4LCA1OX0sCisgICAgfSwKKyAgICAvKiA3MCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMzh9LAorICAgICAgICB7MHg4MDA2LCAzOH0sCisgICAgICAgIHsweDgwMGEsIDM4fSwKKyAgICAgICAgezB4ODAwZiwgMzh9LAorICAgICAgICB7MHg4MDE4LCAzOH0sCisgICAgICAgIHsweDgwMWYsIDM4fSwKKyAgICAgICAgezB4ODAyOSwgMzh9LAorICAgICAgICB7MHhjMDM4LCAzOH0sCisgICAgICAgIHsweDgwMDMsIDQyfSwKKyAgICAgICAgezB4ODAwNiwgNDJ9LAorICAgICAgICB7MHg4MDBhLCA0Mn0sCisgICAgICAgIHsweDgwMGYsIDQyfSwKKyAgICAgICAgezB4ODAxOCwgNDJ9LAorICAgICAgICB7MHg4MDFmLCA0Mn0sCisgICAgICAgIHsweDgwMjksIDQyfSwKKyAgICAgICAgezB4YzAzOCwgNDJ9LAorICAgIH0sCisgICAgLyogNzEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDQ0fSwKKyAgICAgICAgezB4ODAwNiwgNDR9LAorICAgICAgICB7MHg4MDBhLCA0NH0sCisgICAgICAgIHsweDgwMGYsIDQ0fSwKKyAgICAgICAgezB4ODAxOCwgNDR9LAorICAgICAgICB7MHg4MDFmLCA0NH0sCisgICAgICAgIHsweDgwMjksIDQ0fSwKKyAgICAgICAgezB4YzAzOCwgNDR9LAorICAgICAgICB7MHg4MDAzLCA1OX0sCisgICAgICAgIHsweDgwMDYsIDU5fSwKKyAgICAgICAgezB4ODAwYSwgNTl9LAorICAgICAgICB7MHg4MDBmLCA1OX0sCisgICAgICAgIHsweDgwMTgsIDU5fSwKKyAgICAgICAgezB4ODAxZiwgNTl9LAorICAgICAgICB7MHg4MDI5LCA1OX0sCisgICAgICAgIHsweGMwMzgsIDU5fSwKKyAgICB9LAorICAgIC8qIDcyICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA4OH0sCisgICAgICAgIHsweDgwMDksIDg4fSwKKyAgICAgICAgezB4ODAxNywgODh9LAorICAgICAgICB7MHhjMDI4LCA4OH0sCisgICAgICAgIHsweDgwMDIsIDkwfSwKKyAgICAgICAgezB4ODAwOSwgOTB9LAorICAgICAgICB7MHg4MDE3LCA5MH0sCisgICAgICAgIHsweGMwMjgsIDkwfSwKKyAgICAgICAgezB4YzAwMCwgMzN9LAorICAgICAgICB7MHhjMDAwLCAzNH0sCisgICAgICAgIHsweGMwMDAsIDQwfSwKKyAgICAgICAgezB4YzAwMCwgNDF9LAorICAgICAgICB7MHhjMDAwLCA2M30sCisgICAgICAgIHsweDUwLCAwfSwKKyAgICAgICAgezB4NTIsIDB9LAorICAgICAgICB7MHg1NCwgMH0sCisgICAgfSwKKyAgICAvKiA3MyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgODh9LAorICAgICAgICB7MHg4MDA2LCA4OH0sCisgICAgICAgIHsweDgwMGEsIDg4fSwKKyAgICAgICAgezB4ODAwZiwgODh9LAorICAgICAgICB7MHg4MDE4LCA4OH0sCisgICAgICAgIHsweDgwMWYsIDg4fSwKKyAgICAgICAgezB4ODAyOSwgODh9LAorICAgICAgICB7MHhjMDM4LCA4OH0sCisgICAgICAgIHsweDgwMDMsIDkwfSwKKyAgICAgICAgezB4ODAwNiwgOTB9LAorICAgICAgICB7MHg4MDBhLCA5MH0sCisgICAgICAgIHsweDgwMGYsIDkwfSwKKyAgICAgICAgezB4ODAxOCwgOTB9LAorICAgICAgICB7MHg4MDFmLCA5MH0sCisgICAgICAgIHsweDgwMjksIDkwfSwKKyAgICAgICAgezB4YzAzOCwgOTB9LAorICAgIH0sCisgICAgLyogNzQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDMzfSwKKyAgICAgICAgezB4YzAxNiwgMzN9LAorICAgICAgICB7MHg4MDAxLCAzNH0sCisgICAgICAgIHsweGMwMTYsIDM0fSwKKyAgICAgICAgezB4ODAwMSwgNDB9LAorICAgICAgICB7MHhjMDE2LCA0MH0sCisgICAgICAgIHsweDgwMDEsIDQxfSwKKyAgICAgICAgezB4YzAxNiwgNDF9LAorICAgICAgICB7MHg4MDAxLCA2M30sCisgICAgICAgIHsweGMwMTYsIDYzfSwKKyAgICAgICAgezB4YzAwMCwgMzl9LAorICAgICAgICB7MHhjMDAwLCA0M30sCisgICAgICAgIHsweGMwMDAsIDEyNH0sCisgICAgICAgIHsweDUzLCAwfSwKKyAgICAgICAgezB4NTUsIDB9LAorICAgICAgICB7MHg1OCwgMH0sCisgICAgfSwKKyAgICAvKiA3NSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMzN9LAorICAgICAgICB7MHg4MDA5LCAzM30sCisgICAgICAgIHsweDgwMTcsIDMzfSwKKyAgICAgICAgezB4YzAyOCwgMzN9LAorICAgICAgICB7MHg4MDAyLCAzNH0sCisgICAgICAgIHsweDgwMDksIDM0fSwKKyAgICAgICAgezB4ODAxNywgMzR9LAorICAgICAgICB7MHhjMDI4LCAzNH0sCisgICAgICAgIHsweDgwMDIsIDQwfSwKKyAgICAgICAgezB4ODAwOSwgNDB9LAorICAgICAgICB7MHg4MDE3LCA0MH0sCisgICAgICAgIHsweGMwMjgsIDQwfSwKKyAgICAgICAgezB4ODAwMiwgNDF9LAorICAgICAgICB7MHg4MDA5LCA0MX0sCisgICAgICAgIHsweDgwMTcsIDQxfSwKKyAgICAgICAgezB4YzAyOCwgNDF9LAorICAgIH0sCisgICAgLyogNzYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDMzfSwKKyAgICAgICAgezB4ODAwNiwgMzN9LAorICAgICAgICB7MHg4MDBhLCAzM30sCisgICAgICAgIHsweDgwMGYsIDMzfSwKKyAgICAgICAgezB4ODAxOCwgMzN9LAorICAgICAgICB7MHg4MDFmLCAzM30sCisgICAgICAgIHsweDgwMjksIDMzfSwKKyAgICAgICAgezB4YzAzOCwgMzN9LAorICAgICAgICB7MHg4MDAzLCAzNH0sCisgICAgICAgIHsweDgwMDYsIDM0fSwKKyAgICAgICAgezB4ODAwYSwgMzR9LAorICAgICAgICB7MHg4MDBmLCAzNH0sCisgICAgICAgIHsweDgwMTgsIDM0fSwKKyAgICAgICAgezB4ODAxZiwgMzR9LAorICAgICAgICB7MHg4MDI5LCAzNH0sCisgICAgICAgIHsweGMwMzgsIDM0fSwKKyAgICB9LAorICAgIC8qIDc3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA0MH0sCisgICAgICAgIHsweDgwMDYsIDQwfSwKKyAgICAgICAgezB4ODAwYSwgNDB9LAorICAgICAgICB7MHg4MDBmLCA0MH0sCisgICAgICAgIHsweDgwMTgsIDQwfSwKKyAgICAgICAgezB4ODAxZiwgNDB9LAorICAgICAgICB7MHg4MDI5LCA0MH0sCisgICAgICAgIHsweGMwMzgsIDQwfSwKKyAgICAgICAgezB4ODAwMywgNDF9LAorICAgICAgICB7MHg4MDA2LCA0MX0sCisgICAgICAgIHsweDgwMGEsIDQxfSwKKyAgICAgICAgezB4ODAwZiwgNDF9LAorICAgICAgICB7MHg4MDE4LCA0MX0sCisgICAgICAgIHsweDgwMWYsIDQxfSwKKyAgICAgICAgezB4ODAyOSwgNDF9LAorICAgICAgICB7MHhjMDM4LCA0MX0sCisgICAgfSwKKyAgICAvKiA3OCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgNjN9LAorICAgICAgICB7MHg4MDA5LCA2M30sCisgICAgICAgIHsweDgwMTcsIDYzfSwKKyAgICAgICAgezB4YzAyOCwgNjN9LAorICAgICAgICB7MHg4MDAxLCAzOX0sCisgICAgICAgIHsweGMwMTYsIDM5fSwKKyAgICAgICAgezB4ODAwMSwgNDN9LAorICAgICAgICB7MHhjMDE2LCA0M30sCisgICAgICAgIHsweDgwMDEsIDEyNH0sCisgICAgICAgIHsweGMwMTYsIDEyNH0sCisgICAgICAgIHsweGMwMDAsIDM1fSwKKyAgICAgICAgezB4YzAwMCwgNjJ9LAorICAgICAgICB7MHg1NiwgMH0sCisgICAgICAgIHsweDU3LCAwfSwKKyAgICAgICAgezB4NTksIDB9LAorICAgICAgICB7MHg1YSwgMH0sCisgICAgfSwKKyAgICAvKiA3OSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNjN9LAorICAgICAgICB7MHg4MDA2LCA2M30sCisgICAgICAgIHsweDgwMGEsIDYzfSwKKyAgICAgICAgezB4ODAwZiwgNjN9LAorICAgICAgICB7MHg4MDE4LCA2M30sCisgICAgICAgIHsweDgwMWYsIDYzfSwKKyAgICAgICAgezB4ODAyOSwgNjN9LAorICAgICAgICB7MHhjMDM4LCA2M30sCisgICAgICAgIHsweDgwMDIsIDM5fSwKKyAgICAgICAgezB4ODAwOSwgMzl9LAorICAgICAgICB7MHg4MDE3LCAzOX0sCisgICAgICAgIHsweGMwMjgsIDM5fSwKKyAgICAgICAgezB4ODAwMiwgNDN9LAorICAgICAgICB7MHg4MDA5LCA0M30sCisgICAgICAgIHsweDgwMTcsIDQzfSwKKyAgICAgICAgezB4YzAyOCwgNDN9LAorICAgIH0sCisgICAgLyogODAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDM5fSwKKyAgICAgICAgezB4ODAwNiwgMzl9LAorICAgICAgICB7MHg4MDBhLCAzOX0sCisgICAgICAgIHsweDgwMGYsIDM5fSwKKyAgICAgICAgezB4ODAxOCwgMzl9LAorICAgICAgICB7MHg4MDFmLCAzOX0sCisgICAgICAgIHsweDgwMjksIDM5fSwKKyAgICAgICAgezB4YzAzOCwgMzl9LAorICAgICAgICB7MHg4MDAzLCA0M30sCisgICAgICAgIHsweDgwMDYsIDQzfSwKKyAgICAgICAgezB4ODAwYSwgNDN9LAorICAgICAgICB7MHg4MDBmLCA0M30sCisgICAgICAgIHsweDgwMTgsIDQzfSwKKyAgICAgICAgezB4ODAxZiwgNDN9LAorICAgICAgICB7MHg4MDI5LCA0M30sCisgICAgICAgIHsweGMwMzgsIDQzfSwKKyAgICB9LAorICAgIC8qIDgxICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxMjR9LAorICAgICAgICB7MHg4MDA5LCAxMjR9LAorICAgICAgICB7MHg4MDE3LCAxMjR9LAorICAgICAgICB7MHhjMDI4LCAxMjR9LAorICAgICAgICB7MHg4MDAxLCAzNX0sCisgICAgICAgIHsweGMwMTYsIDM1fSwKKyAgICAgICAgezB4ODAwMSwgNjJ9LAorICAgICAgICB7MHhjMDE2LCA2Mn0sCisgICAgICAgIHsweGMwMDAsIDB9LAorICAgICAgICB7MHhjMDAwLCAzNn0sCisgICAgICAgIHsweGMwMDAsIDY0fSwKKyAgICAgICAgezB4YzAwMCwgOTF9LAorICAgICAgICB7MHhjMDAwLCA5M30sCisgICAgICAgIHsweGMwMDAsIDEyNn0sCisgICAgICAgIHsweDViLCAwfSwKKyAgICAgICAgezB4NWMsIDB9LAorICAgIH0sCisgICAgLyogODIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEyNH0sCisgICAgICAgIHsweDgwMDYsIDEyNH0sCisgICAgICAgIHsweDgwMGEsIDEyNH0sCisgICAgICAgIHsweDgwMGYsIDEyNH0sCisgICAgICAgIHsweDgwMTgsIDEyNH0sCisgICAgICAgIHsweDgwMWYsIDEyNH0sCisgICAgICAgIHsweDgwMjksIDEyNH0sCisgICAgICAgIHsweGMwMzgsIDEyNH0sCisgICAgICAgIHsweDgwMDIsIDM1fSwKKyAgICAgICAgezB4ODAwOSwgMzV9LAorICAgICAgICB7MHg4MDE3LCAzNX0sCisgICAgICAgIHsweGMwMjgsIDM1fSwKKyAgICAgICAgezB4ODAwMiwgNjJ9LAorICAgICAgICB7MHg4MDA5LCA2Mn0sCisgICAgICAgIHsweDgwMTcsIDYyfSwKKyAgICAgICAgezB4YzAyOCwgNjJ9LAorICAgIH0sCisgICAgLyogODMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDM1fSwKKyAgICAgICAgezB4ODAwNiwgMzV9LAorICAgICAgICB7MHg4MDBhLCAzNX0sCisgICAgICAgIHsweDgwMGYsIDM1fSwKKyAgICAgICAgezB4ODAxOCwgMzV9LAorICAgICAgICB7MHg4MDFmLCAzNX0sCisgICAgICAgIHsweDgwMjksIDM1fSwKKyAgICAgICAgezB4YzAzOCwgMzV9LAorICAgICAgICB7MHg4MDAzLCA2Mn0sCisgICAgICAgIHsweDgwMDYsIDYyfSwKKyAgICAgICAgezB4ODAwYSwgNjJ9LAorICAgICAgICB7MHg4MDBmLCA2Mn0sCisgICAgICAgIHsweDgwMTgsIDYyfSwKKyAgICAgICAgezB4ODAxZiwgNjJ9LAorICAgICAgICB7MHg4MDI5LCA2Mn0sCisgICAgICAgIHsweGMwMzgsIDYyfSwKKyAgICB9LAorICAgIC8qIDg0ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAwfSwKKyAgICAgICAgezB4YzAxNiwgMH0sCisgICAgICAgIHsweDgwMDEsIDM2fSwKKyAgICAgICAgezB4YzAxNiwgMzZ9LAorICAgICAgICB7MHg4MDAxLCA2NH0sCisgICAgICAgIHsweGMwMTYsIDY0fSwKKyAgICAgICAgezB4ODAwMSwgOTF9LAorICAgICAgICB7MHhjMDE2LCA5MX0sCisgICAgICAgIHsweDgwMDEsIDkzfSwKKyAgICAgICAgezB4YzAxNiwgOTN9LAorICAgICAgICB7MHg4MDAxLCAxMjZ9LAorICAgICAgICB7MHhjMDE2LCAxMjZ9LAorICAgICAgICB7MHhjMDAwLCA5NH0sCisgICAgICAgIHsweGMwMDAsIDEyNX0sCisgICAgICAgIHsweDVkLCAwfSwKKyAgICAgICAgezB4NWUsIDB9LAorICAgIH0sCisgICAgLyogODUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDB9LAorICAgICAgICB7MHg4MDA5LCAwfSwKKyAgICAgICAgezB4ODAxNywgMH0sCisgICAgICAgIHsweGMwMjgsIDB9LAorICAgICAgICB7MHg4MDAyLCAzNn0sCisgICAgICAgIHsweDgwMDksIDM2fSwKKyAgICAgICAgezB4ODAxNywgMzZ9LAorICAgICAgICB7MHhjMDI4LCAzNn0sCisgICAgICAgIHsweDgwMDIsIDY0fSwKKyAgICAgICAgezB4ODAwOSwgNjR9LAorICAgICAgICB7MHg4MDE3LCA2NH0sCisgICAgICAgIHsweGMwMjgsIDY0fSwKKyAgICAgICAgezB4ODAwMiwgOTF9LAorICAgICAgICB7MHg4MDA5LCA5MX0sCisgICAgICAgIHsweDgwMTcsIDkxfSwKKyAgICAgICAgezB4YzAyOCwgOTF9LAorICAgIH0sCisgICAgLyogODYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDB9LAorICAgICAgICB7MHg4MDA2LCAwfSwKKyAgICAgICAgezB4ODAwYSwgMH0sCisgICAgICAgIHsweDgwMGYsIDB9LAorICAgICAgICB7MHg4MDE4LCAwfSwKKyAgICAgICAgezB4ODAxZiwgMH0sCisgICAgICAgIHsweDgwMjksIDB9LAorICAgICAgICB7MHhjMDM4LCAwfSwKKyAgICAgICAgezB4ODAwMywgMzZ9LAorICAgICAgICB7MHg4MDA2LCAzNn0sCisgICAgICAgIHsweDgwMGEsIDM2fSwKKyAgICAgICAgezB4ODAwZiwgMzZ9LAorICAgICAgICB7MHg4MDE4LCAzNn0sCisgICAgICAgIHsweDgwMWYsIDM2fSwKKyAgICAgICAgezB4ODAyOSwgMzZ9LAorICAgICAgICB7MHhjMDM4LCAzNn0sCisgICAgfSwKKyAgICAvKiA4NyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNjR9LAorICAgICAgICB7MHg4MDA2LCA2NH0sCisgICAgICAgIHsweDgwMGEsIDY0fSwKKyAgICAgICAgezB4ODAwZiwgNjR9LAorICAgICAgICB7MHg4MDE4LCA2NH0sCisgICAgICAgIHsweDgwMWYsIDY0fSwKKyAgICAgICAgezB4ODAyOSwgNjR9LAorICAgICAgICB7MHhjMDM4LCA2NH0sCisgICAgICAgIHsweDgwMDMsIDkxfSwKKyAgICAgICAgezB4ODAwNiwgOTF9LAorICAgICAgICB7MHg4MDBhLCA5MX0sCisgICAgICAgIHsweDgwMGYsIDkxfSwKKyAgICAgICAgezB4ODAxOCwgOTF9LAorICAgICAgICB7MHg4MDFmLCA5MX0sCisgICAgICAgIHsweDgwMjksIDkxfSwKKyAgICAgICAgezB4YzAzOCwgOTF9LAorICAgIH0sCisgICAgLyogODggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDkzfSwKKyAgICAgICAgezB4ODAwOSwgOTN9LAorICAgICAgICB7MHg4MDE3LCA5M30sCisgICAgICAgIHsweGMwMjgsIDkzfSwKKyAgICAgICAgezB4ODAwMiwgMTI2fSwKKyAgICAgICAgezB4ODAwOSwgMTI2fSwKKyAgICAgICAgezB4ODAxNywgMTI2fSwKKyAgICAgICAgezB4YzAyOCwgMTI2fSwKKyAgICAgICAgezB4ODAwMSwgOTR9LAorICAgICAgICB7MHhjMDE2LCA5NH0sCisgICAgICAgIHsweDgwMDEsIDEyNX0sCisgICAgICAgIHsweGMwMTYsIDEyNX0sCisgICAgICAgIHsweGMwMDAsIDYwfSwKKyAgICAgICAgezB4YzAwMCwgOTZ9LAorICAgICAgICB7MHhjMDAwLCAxMjN9LAorICAgICAgICB7MHg1ZiwgMH0sCisgICAgfSwKKyAgICAvKiA4OSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgOTN9LAorICAgICAgICB7MHg4MDA2LCA5M30sCisgICAgICAgIHsweDgwMGEsIDkzfSwKKyAgICAgICAgezB4ODAwZiwgOTN9LAorICAgICAgICB7MHg4MDE4LCA5M30sCisgICAgICAgIHsweDgwMWYsIDkzfSwKKyAgICAgICAgezB4ODAyOSwgOTN9LAorICAgICAgICB7MHhjMDM4LCA5M30sCisgICAgICAgIHsweDgwMDMsIDEyNn0sCisgICAgICAgIHsweDgwMDYsIDEyNn0sCisgICAgICAgIHsweDgwMGEsIDEyNn0sCisgICAgICAgIHsweDgwMGYsIDEyNn0sCisgICAgICAgIHsweDgwMTgsIDEyNn0sCisgICAgICAgIHsweDgwMWYsIDEyNn0sCisgICAgICAgIHsweDgwMjksIDEyNn0sCisgICAgICAgIHsweGMwMzgsIDEyNn0sCisgICAgfSwKKyAgICAvKiA5MCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgOTR9LAorICAgICAgICB7MHg4MDA5LCA5NH0sCisgICAgICAgIHsweDgwMTcsIDk0fSwKKyAgICAgICAgezB4YzAyOCwgOTR9LAorICAgICAgICB7MHg4MDAyLCAxMjV9LAorICAgICAgICB7MHg4MDA5LCAxMjV9LAorICAgICAgICB7MHg4MDE3LCAxMjV9LAorICAgICAgICB7MHhjMDI4LCAxMjV9LAorICAgICAgICB7MHg4MDAxLCA2MH0sCisgICAgICAgIHsweGMwMTYsIDYwfSwKKyAgICAgICAgezB4ODAwMSwgOTZ9LAorICAgICAgICB7MHhjMDE2LCA5Nn0sCisgICAgICAgIHsweDgwMDEsIDEyM30sCisgICAgICAgIHsweGMwMTYsIDEyM30sCisgICAgICAgIHsweDYwLCAwfSwKKyAgICAgICAgezB4NmUsIDB9LAorICAgIH0sCisgICAgLyogOTEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDk0fSwKKyAgICAgICAgezB4ODAwNiwgOTR9LAorICAgICAgICB7MHg4MDBhLCA5NH0sCisgICAgICAgIHsweDgwMGYsIDk0fSwKKyAgICAgICAgezB4ODAxOCwgOTR9LAorICAgICAgICB7MHg4MDFmLCA5NH0sCisgICAgICAgIHsweDgwMjksIDk0fSwKKyAgICAgICAgezB4YzAzOCwgOTR9LAorICAgICAgICB7MHg4MDAzLCAxMjV9LAorICAgICAgICB7MHg4MDA2LCAxMjV9LAorICAgICAgICB7MHg4MDBhLCAxMjV9LAorICAgICAgICB7MHg4MDBmLCAxMjV9LAorICAgICAgICB7MHg4MDE4LCAxMjV9LAorICAgICAgICB7MHg4MDFmLCAxMjV9LAorICAgICAgICB7MHg4MDI5LCAxMjV9LAorICAgICAgICB7MHhjMDM4LCAxMjV9LAorICAgIH0sCisgICAgLyogOTIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDYwfSwKKyAgICAgICAgezB4ODAwOSwgNjB9LAorICAgICAgICB7MHg4MDE3LCA2MH0sCisgICAgICAgIHsweGMwMjgsIDYwfSwKKyAgICAgICAgezB4ODAwMiwgOTZ9LAorICAgICAgICB7MHg4MDA5LCA5Nn0sCisgICAgICAgIHsweDgwMTcsIDk2fSwKKyAgICAgICAgezB4YzAyOCwgOTZ9LAorICAgICAgICB7MHg4MDAyLCAxMjN9LAorICAgICAgICB7MHg4MDA5LCAxMjN9LAorICAgICAgICB7MHg4MDE3LCAxMjN9LAorICAgICAgICB7MHhjMDI4LCAxMjN9LAorICAgICAgICB7MHg2MSwgMH0sCisgICAgICAgIHsweDY1LCAwfSwKKyAgICAgICAgezB4NmYsIDB9LAorICAgICAgICB7MHg4NSwgMH0sCisgICAgfSwKKyAgICAvKiA5MyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNjB9LAorICAgICAgICB7MHg4MDA2LCA2MH0sCisgICAgICAgIHsweDgwMGEsIDYwfSwKKyAgICAgICAgezB4ODAwZiwgNjB9LAorICAgICAgICB7MHg4MDE4LCA2MH0sCisgICAgICAgIHsweDgwMWYsIDYwfSwKKyAgICAgICAgezB4ODAyOSwgNjB9LAorICAgICAgICB7MHhjMDM4LCA2MH0sCisgICAgICAgIHsweDgwMDMsIDk2fSwKKyAgICAgICAgezB4ODAwNiwgOTZ9LAorICAgICAgICB7MHg4MDBhLCA5Nn0sCisgICAgICAgIHsweDgwMGYsIDk2fSwKKyAgICAgICAgezB4ODAxOCwgOTZ9LAorICAgICAgICB7MHg4MDFmLCA5Nn0sCisgICAgICAgIHsweDgwMjksIDk2fSwKKyAgICAgICAgezB4YzAzOCwgOTZ9LAorICAgIH0sCisgICAgLyogOTQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEyM30sCisgICAgICAgIHsweDgwMDYsIDEyM30sCisgICAgICAgIHsweDgwMGEsIDEyM30sCisgICAgICAgIHsweDgwMGYsIDEyM30sCisgICAgICAgIHsweDgwMTgsIDEyM30sCisgICAgICAgIHsweDgwMWYsIDEyM30sCisgICAgICAgIHsweDgwMjksIDEyM30sCisgICAgICAgIHsweGMwMzgsIDEyM30sCisgICAgICAgIHsweDYyLCAwfSwKKyAgICAgICAgezB4NjMsIDB9LAorICAgICAgICB7MHg2NiwgMH0sCisgICAgICAgIHsweDY5LCAwfSwKKyAgICAgICAgezB4NzAsIDB9LAorICAgICAgICB7MHg3NywgMH0sCisgICAgICAgIHsweDg2LCAwfSwKKyAgICAgICAgezB4OTksIDB9LAorICAgIH0sCisgICAgLyogOTUgKi8KKyAgICB7CisgICAgICAgIHsweGMwMDAsIDkyfSwKKyAgICAgICAgezB4YzAwMCwgMTk1fSwKKyAgICAgICAgezB4YzAwMCwgMjA4fSwKKyAgICAgICAgezB4NjQsIDB9LAorICAgICAgICB7MHg2NywgMH0sCisgICAgICAgIHsweDY4LCAwfSwKKyAgICAgICAgezB4NmEsIDB9LAorICAgICAgICB7MHg2YiwgMH0sCisgICAgICAgIHsweDcxLCAwfSwKKyAgICAgICAgezB4NzQsIDB9LAorICAgICAgICB7MHg3OCwgMH0sCisgICAgICAgIHsweDdlLCAwfSwKKyAgICAgICAgezB4ODcsIDB9LAorICAgICAgICB7MHg4ZSwgMH0sCisgICAgICAgIHsweDlhLCAwfSwKKyAgICAgICAgezB4YTksIDB9LAorICAgIH0sCisgICAgLyogOTYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDkyfSwKKyAgICAgICAgezB4YzAxNiwgOTJ9LAorICAgICAgICB7MHg4MDAxLCAxOTV9LAorICAgICAgICB7MHhjMDE2LCAxOTV9LAorICAgICAgICB7MHg4MDAxLCAyMDh9LAorICAgICAgICB7MHhjMDE2LCAyMDh9LAorICAgICAgICB7MHhjMDAwLCAxMjh9LAorICAgICAgICB7MHhjMDAwLCAxMzB9LAorICAgICAgICB7MHhjMDAwLCAxMzF9LAorICAgICAgICB7MHhjMDAwLCAxNjJ9LAorICAgICAgICB7MHhjMDAwLCAxODR9LAorICAgICAgICB7MHhjMDAwLCAxOTR9LAorICAgICAgICB7MHhjMDAwLCAyMjR9LAorICAgICAgICB7MHhjMDAwLCAyMjZ9LAorICAgICAgICB7MHg2YywgMH0sCisgICAgICAgIHsweDZkLCAwfSwKKyAgICB9LAorICAgIC8qIDk3ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCA5Mn0sCisgICAgICAgIHsweDgwMDksIDkyfSwKKyAgICAgICAgezB4ODAxNywgOTJ9LAorICAgICAgICB7MHhjMDI4LCA5Mn0sCisgICAgICAgIHsweDgwMDIsIDE5NX0sCisgICAgICAgIHsweDgwMDksIDE5NX0sCisgICAgICAgIHsweDgwMTcsIDE5NX0sCisgICAgICAgIHsweGMwMjgsIDE5NX0sCisgICAgICAgIHsweDgwMDIsIDIwOH0sCisgICAgICAgIHsweDgwMDksIDIwOH0sCisgICAgICAgIHsweDgwMTcsIDIwOH0sCisgICAgICAgIHsweGMwMjgsIDIwOH0sCisgICAgICAgIHsweDgwMDEsIDEyOH0sCisgICAgICAgIHsweGMwMTYsIDEyOH0sCisgICAgICAgIHsweDgwMDEsIDEzMH0sCisgICAgICAgIHsweGMwMTYsIDEzMH0sCisgICAgfSwKKyAgICAvKiA5OCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgOTJ9LAorICAgICAgICB7MHg4MDA2LCA5Mn0sCisgICAgICAgIHsweDgwMGEsIDkyfSwKKyAgICAgICAgezB4ODAwZiwgOTJ9LAorICAgICAgICB7MHg4MDE4LCA5Mn0sCisgICAgICAgIHsweDgwMWYsIDkyfSwKKyAgICAgICAgezB4ODAyOSwgOTJ9LAorICAgICAgICB7MHhjMDM4LCA5Mn0sCisgICAgICAgIHsweDgwMDMsIDE5NX0sCisgICAgICAgIHsweDgwMDYsIDE5NX0sCisgICAgICAgIHsweDgwMGEsIDE5NX0sCisgICAgICAgIHsweDgwMGYsIDE5NX0sCisgICAgICAgIHsweDgwMTgsIDE5NX0sCisgICAgICAgIHsweDgwMWYsIDE5NX0sCisgICAgICAgIHsweDgwMjksIDE5NX0sCisgICAgICAgIHsweGMwMzgsIDE5NX0sCisgICAgfSwKKyAgICAvKiA5OSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjA4fSwKKyAgICAgICAgezB4ODAwNiwgMjA4fSwKKyAgICAgICAgezB4ODAwYSwgMjA4fSwKKyAgICAgICAgezB4ODAwZiwgMjA4fSwKKyAgICAgICAgezB4ODAxOCwgMjA4fSwKKyAgICAgICAgezB4ODAxZiwgMjA4fSwKKyAgICAgICAgezB4ODAyOSwgMjA4fSwKKyAgICAgICAgezB4YzAzOCwgMjA4fSwKKyAgICAgICAgezB4ODAwMiwgMTI4fSwKKyAgICAgICAgezB4ODAwOSwgMTI4fSwKKyAgICAgICAgezB4ODAxNywgMTI4fSwKKyAgICAgICAgezB4YzAyOCwgMTI4fSwKKyAgICAgICAgezB4ODAwMiwgMTMwfSwKKyAgICAgICAgezB4ODAwOSwgMTMwfSwKKyAgICAgICAgezB4ODAxNywgMTMwfSwKKyAgICAgICAgezB4YzAyOCwgMTMwfSwKKyAgICB9LAorICAgIC8qIDEwMCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTI4fSwKKyAgICAgICAgezB4ODAwNiwgMTI4fSwKKyAgICAgICAgezB4ODAwYSwgMTI4fSwKKyAgICAgICAgezB4ODAwZiwgMTI4fSwKKyAgICAgICAgezB4ODAxOCwgMTI4fSwKKyAgICAgICAgezB4ODAxZiwgMTI4fSwKKyAgICAgICAgezB4ODAyOSwgMTI4fSwKKyAgICAgICAgezB4YzAzOCwgMTI4fSwKKyAgICAgICAgezB4ODAwMywgMTMwfSwKKyAgICAgICAgezB4ODAwNiwgMTMwfSwKKyAgICAgICAgezB4ODAwYSwgMTMwfSwKKyAgICAgICAgezB4ODAwZiwgMTMwfSwKKyAgICAgICAgezB4ODAxOCwgMTMwfSwKKyAgICAgICAgezB4ODAxZiwgMTMwfSwKKyAgICAgICAgezB4ODAyOSwgMTMwfSwKKyAgICAgICAgezB4YzAzOCwgMTMwfSwKKyAgICB9LAorICAgIC8qIDEwMSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMTMxfSwKKyAgICAgICAgezB4YzAxNiwgMTMxfSwKKyAgICAgICAgezB4ODAwMSwgMTYyfSwKKyAgICAgICAgezB4YzAxNiwgMTYyfSwKKyAgICAgICAgezB4ODAwMSwgMTg0fSwKKyAgICAgICAgezB4YzAxNiwgMTg0fSwKKyAgICAgICAgezB4ODAwMSwgMTk0fSwKKyAgICAgICAgezB4YzAxNiwgMTk0fSwKKyAgICAgICAgezB4ODAwMSwgMjI0fSwKKyAgICAgICAgezB4YzAxNiwgMjI0fSwKKyAgICAgICAgezB4ODAwMSwgMjI2fSwKKyAgICAgICAgezB4YzAxNiwgMjI2fSwKKyAgICAgICAgezB4YzAwMCwgMTUzfSwKKyAgICAgICAgezB4YzAwMCwgMTYxfSwKKyAgICAgICAgezB4YzAwMCwgMTY3fSwKKyAgICAgICAgezB4YzAwMCwgMTcyfSwKKyAgICB9LAorICAgIC8qIDEwMiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTMxfSwKKyAgICAgICAgezB4ODAwOSwgMTMxfSwKKyAgICAgICAgezB4ODAxNywgMTMxfSwKKyAgICAgICAgezB4YzAyOCwgMTMxfSwKKyAgICAgICAgezB4ODAwMiwgMTYyfSwKKyAgICAgICAgezB4ODAwOSwgMTYyfSwKKyAgICAgICAgezB4ODAxNywgMTYyfSwKKyAgICAgICAgezB4YzAyOCwgMTYyfSwKKyAgICAgICAgezB4ODAwMiwgMTg0fSwKKyAgICAgICAgezB4ODAwOSwgMTg0fSwKKyAgICAgICAgezB4ODAxNywgMTg0fSwKKyAgICAgICAgezB4YzAyOCwgMTg0fSwKKyAgICAgICAgezB4ODAwMiwgMTk0fSwKKyAgICAgICAgezB4ODAwOSwgMTk0fSwKKyAgICAgICAgezB4ODAxNywgMTk0fSwKKyAgICAgICAgezB4YzAyOCwgMTk0fSwKKyAgICB9LAorICAgIC8qIDEwMyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTMxfSwKKyAgICAgICAgezB4ODAwNiwgMTMxfSwKKyAgICAgICAgezB4ODAwYSwgMTMxfSwKKyAgICAgICAgezB4ODAwZiwgMTMxfSwKKyAgICAgICAgezB4ODAxOCwgMTMxfSwKKyAgICAgICAgezB4ODAxZiwgMTMxfSwKKyAgICAgICAgezB4ODAyOSwgMTMxfSwKKyAgICAgICAgezB4YzAzOCwgMTMxfSwKKyAgICAgICAgezB4ODAwMywgMTYyfSwKKyAgICAgICAgezB4ODAwNiwgMTYyfSwKKyAgICAgICAgezB4ODAwYSwgMTYyfSwKKyAgICAgICAgezB4ODAwZiwgMTYyfSwKKyAgICAgICAgezB4ODAxOCwgMTYyfSwKKyAgICAgICAgezB4ODAxZiwgMTYyfSwKKyAgICAgICAgezB4ODAyOSwgMTYyfSwKKyAgICAgICAgezB4YzAzOCwgMTYyfSwKKyAgICB9LAorICAgIC8qIDEwNCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTg0fSwKKyAgICAgICAgezB4ODAwNiwgMTg0fSwKKyAgICAgICAgezB4ODAwYSwgMTg0fSwKKyAgICAgICAgezB4ODAwZiwgMTg0fSwKKyAgICAgICAgezB4ODAxOCwgMTg0fSwKKyAgICAgICAgezB4ODAxZiwgMTg0fSwKKyAgICAgICAgezB4ODAyOSwgMTg0fSwKKyAgICAgICAgezB4YzAzOCwgMTg0fSwKKyAgICAgICAgezB4ODAwMywgMTk0fSwKKyAgICAgICAgezB4ODAwNiwgMTk0fSwKKyAgICAgICAgezB4ODAwYSwgMTk0fSwKKyAgICAgICAgezB4ODAwZiwgMTk0fSwKKyAgICAgICAgezB4ODAxOCwgMTk0fSwKKyAgICAgICAgezB4ODAxZiwgMTk0fSwKKyAgICAgICAgezB4ODAyOSwgMTk0fSwKKyAgICAgICAgezB4YzAzOCwgMTk0fSwKKyAgICB9LAorICAgIC8qIDEwNSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMjI0fSwKKyAgICAgICAgezB4ODAwOSwgMjI0fSwKKyAgICAgICAgezB4ODAxNywgMjI0fSwKKyAgICAgICAgezB4YzAyOCwgMjI0fSwKKyAgICAgICAgezB4ODAwMiwgMjI2fSwKKyAgICAgICAgezB4ODAwOSwgMjI2fSwKKyAgICAgICAgezB4ODAxNywgMjI2fSwKKyAgICAgICAgezB4YzAyOCwgMjI2fSwKKyAgICAgICAgezB4ODAwMSwgMTUzfSwKKyAgICAgICAgezB4YzAxNiwgMTUzfSwKKyAgICAgICAgezB4ODAwMSwgMTYxfSwKKyAgICAgICAgezB4YzAxNiwgMTYxfSwKKyAgICAgICAgezB4ODAwMSwgMTY3fSwKKyAgICAgICAgezB4YzAxNiwgMTY3fSwKKyAgICAgICAgezB4ODAwMSwgMTcyfSwKKyAgICAgICAgezB4YzAxNiwgMTcyfSwKKyAgICB9LAorICAgIC8qIDEwNiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjI0fSwKKyAgICAgICAgezB4ODAwNiwgMjI0fSwKKyAgICAgICAgezB4ODAwYSwgMjI0fSwKKyAgICAgICAgezB4ODAwZiwgMjI0fSwKKyAgICAgICAgezB4ODAxOCwgMjI0fSwKKyAgICAgICAgezB4ODAxZiwgMjI0fSwKKyAgICAgICAgezB4ODAyOSwgMjI0fSwKKyAgICAgICAgezB4YzAzOCwgMjI0fSwKKyAgICAgICAgezB4ODAwMywgMjI2fSwKKyAgICAgICAgezB4ODAwNiwgMjI2fSwKKyAgICAgICAgezB4ODAwYSwgMjI2fSwKKyAgICAgICAgezB4ODAwZiwgMjI2fSwKKyAgICAgICAgezB4ODAxOCwgMjI2fSwKKyAgICAgICAgezB4ODAxZiwgMjI2fSwKKyAgICAgICAgezB4ODAyOSwgMjI2fSwKKyAgICAgICAgezB4YzAzOCwgMjI2fSwKKyAgICB9LAorICAgIC8qIDEwNyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTUzfSwKKyAgICAgICAgezB4ODAwOSwgMTUzfSwKKyAgICAgICAgezB4ODAxNywgMTUzfSwKKyAgICAgICAgezB4YzAyOCwgMTUzfSwKKyAgICAgICAgezB4ODAwMiwgMTYxfSwKKyAgICAgICAgezB4ODAwOSwgMTYxfSwKKyAgICAgICAgezB4ODAxNywgMTYxfSwKKyAgICAgICAgezB4YzAyOCwgMTYxfSwKKyAgICAgICAgezB4ODAwMiwgMTY3fSwKKyAgICAgICAgezB4ODAwOSwgMTY3fSwKKyAgICAgICAgezB4ODAxNywgMTY3fSwKKyAgICAgICAgezB4YzAyOCwgMTY3fSwKKyAgICAgICAgezB4ODAwMiwgMTcyfSwKKyAgICAgICAgezB4ODAwOSwgMTcyfSwKKyAgICAgICAgezB4ODAxNywgMTcyfSwKKyAgICAgICAgezB4YzAyOCwgMTcyfSwKKyAgICB9LAorICAgIC8qIDEwOCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTUzfSwKKyAgICAgICAgezB4ODAwNiwgMTUzfSwKKyAgICAgICAgezB4ODAwYSwgMTUzfSwKKyAgICAgICAgezB4ODAwZiwgMTUzfSwKKyAgICAgICAgezB4ODAxOCwgMTUzfSwKKyAgICAgICAgezB4ODAxZiwgMTUzfSwKKyAgICAgICAgezB4ODAyOSwgMTUzfSwKKyAgICAgICAgezB4YzAzOCwgMTUzfSwKKyAgICAgICAgezB4ODAwMywgMTYxfSwKKyAgICAgICAgezB4ODAwNiwgMTYxfSwKKyAgICAgICAgezB4ODAwYSwgMTYxfSwKKyAgICAgICAgezB4ODAwZiwgMTYxfSwKKyAgICAgICAgezB4ODAxOCwgMTYxfSwKKyAgICAgICAgezB4ODAxZiwgMTYxfSwKKyAgICAgICAgezB4ODAyOSwgMTYxfSwKKyAgICAgICAgezB4YzAzOCwgMTYxfSwKKyAgICB9LAorICAgIC8qIDEwOSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTY3fSwKKyAgICAgICAgezB4ODAwNiwgMTY3fSwKKyAgICAgICAgezB4ODAwYSwgMTY3fSwKKyAgICAgICAgezB4ODAwZiwgMTY3fSwKKyAgICAgICAgezB4ODAxOCwgMTY3fSwKKyAgICAgICAgezB4ODAxZiwgMTY3fSwKKyAgICAgICAgezB4ODAyOSwgMTY3fSwKKyAgICAgICAgezB4YzAzOCwgMTY3fSwKKyAgICAgICAgezB4ODAwMywgMTcyfSwKKyAgICAgICAgezB4ODAwNiwgMTcyfSwKKyAgICAgICAgezB4ODAwYSwgMTcyfSwKKyAgICAgICAgezB4ODAwZiwgMTcyfSwKKyAgICAgICAgezB4ODAxOCwgMTcyfSwKKyAgICAgICAgezB4ODAxZiwgMTcyfSwKKyAgICAgICAgezB4ODAyOSwgMTcyfSwKKyAgICAgICAgezB4YzAzOCwgMTcyfSwKKyAgICB9LAorICAgIC8qIDExMCAqLworICAgIHsKKyAgICAgICAgezB4NzIsIDB9LAorICAgICAgICB7MHg3MywgMH0sCisgICAgICAgIHsweDc1LCAwfSwKKyAgICAgICAgezB4NzYsIDB9LAorICAgICAgICB7MHg3OSwgMH0sCisgICAgICAgIHsweDdiLCAwfSwKKyAgICAgICAgezB4N2YsIDB9LAorICAgICAgICB7MHg4MiwgMH0sCisgICAgICAgIHsweDg4LCAwfSwKKyAgICAgICAgezB4OGIsIDB9LAorICAgICAgICB7MHg4ZiwgMH0sCisgICAgICAgIHsweDkyLCAwfSwKKyAgICAgICAgezB4OWIsIDB9LAorICAgICAgICB7MHhhMiwgMH0sCisgICAgICAgIHsweGFhLCAwfSwKKyAgICAgICAgezB4YjQsIDB9LAorICAgIH0sCisgICAgLyogMTExICovCisgICAgeworICAgICAgICB7MHhjMDAwLCAxNzZ9LAorICAgICAgICB7MHhjMDAwLCAxNzd9LAorICAgICAgICB7MHhjMDAwLCAxNzl9LAorICAgICAgICB7MHhjMDAwLCAyMDl9LAorICAgICAgICB7MHhjMDAwLCAyMTZ9LAorICAgICAgICB7MHhjMDAwLCAyMTd9LAorICAgICAgICB7MHhjMDAwLCAyMjd9LAorICAgICAgICB7MHhjMDAwLCAyMjl9LAorICAgICAgICB7MHhjMDAwLCAyMzB9LAorICAgICAgICB7MHg3YSwgMH0sCisgICAgICAgIHsweDdjLCAwfSwKKyAgICAgICAgezB4N2QsIDB9LAorICAgICAgICB7MHg4MCwgMH0sCisgICAgICAgIHsweDgxLCAwfSwKKyAgICAgICAgezB4ODMsIDB9LAorICAgICAgICB7MHg4NCwgMH0sCisgICAgfSwKKyAgICAvKiAxMTIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDE3Nn0sCisgICAgICAgIHsweGMwMTYsIDE3Nn0sCisgICAgICAgIHsweDgwMDEsIDE3N30sCisgICAgICAgIHsweGMwMTYsIDE3N30sCisgICAgICAgIHsweDgwMDEsIDE3OX0sCisgICAgICAgIHsweGMwMTYsIDE3OX0sCisgICAgICAgIHsweDgwMDEsIDIwOX0sCisgICAgICAgIHsweGMwMTYsIDIwOX0sCisgICAgICAgIHsweDgwMDEsIDIxNn0sCisgICAgICAgIHsweGMwMTYsIDIxNn0sCisgICAgICAgIHsweDgwMDEsIDIxN30sCisgICAgICAgIHsweGMwMTYsIDIxN30sCisgICAgICAgIHsweDgwMDEsIDIyN30sCisgICAgICAgIHsweGMwMTYsIDIyN30sCisgICAgICAgIHsweDgwMDEsIDIyOX0sCisgICAgICAgIHsweGMwMTYsIDIyOX0sCisgICAgfSwKKyAgICAvKiAxMTMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE3Nn0sCisgICAgICAgIHsweDgwMDksIDE3Nn0sCisgICAgICAgIHsweDgwMTcsIDE3Nn0sCisgICAgICAgIHsweGMwMjgsIDE3Nn0sCisgICAgICAgIHsweDgwMDIsIDE3N30sCisgICAgICAgIHsweDgwMDksIDE3N30sCisgICAgICAgIHsweDgwMTcsIDE3N30sCisgICAgICAgIHsweGMwMjgsIDE3N30sCisgICAgICAgIHsweDgwMDIsIDE3OX0sCisgICAgICAgIHsweDgwMDksIDE3OX0sCisgICAgICAgIHsweDgwMTcsIDE3OX0sCisgICAgICAgIHsweGMwMjgsIDE3OX0sCisgICAgICAgIHsweDgwMDIsIDIwOX0sCisgICAgICAgIHsweDgwMDksIDIwOX0sCisgICAgICAgIHsweDgwMTcsIDIwOX0sCisgICAgICAgIHsweGMwMjgsIDIwOX0sCisgICAgfSwKKyAgICAvKiAxMTQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE3Nn0sCisgICAgICAgIHsweDgwMDYsIDE3Nn0sCisgICAgICAgIHsweDgwMGEsIDE3Nn0sCisgICAgICAgIHsweDgwMGYsIDE3Nn0sCisgICAgICAgIHsweDgwMTgsIDE3Nn0sCisgICAgICAgIHsweDgwMWYsIDE3Nn0sCisgICAgICAgIHsweDgwMjksIDE3Nn0sCisgICAgICAgIHsweGMwMzgsIDE3Nn0sCisgICAgICAgIHsweDgwMDMsIDE3N30sCisgICAgICAgIHsweDgwMDYsIDE3N30sCisgICAgICAgIHsweDgwMGEsIDE3N30sCisgICAgICAgIHsweDgwMGYsIDE3N30sCisgICAgICAgIHsweDgwMTgsIDE3N30sCisgICAgICAgIHsweDgwMWYsIDE3N30sCisgICAgICAgIHsweDgwMjksIDE3N30sCisgICAgICAgIHsweGMwMzgsIDE3N30sCisgICAgfSwKKyAgICAvKiAxMTUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE3OX0sCisgICAgICAgIHsweDgwMDYsIDE3OX0sCisgICAgICAgIHsweDgwMGEsIDE3OX0sCisgICAgICAgIHsweDgwMGYsIDE3OX0sCisgICAgICAgIHsweDgwMTgsIDE3OX0sCisgICAgICAgIHsweDgwMWYsIDE3OX0sCisgICAgICAgIHsweDgwMjksIDE3OX0sCisgICAgICAgIHsweGMwMzgsIDE3OX0sCisgICAgICAgIHsweDgwMDMsIDIwOX0sCisgICAgICAgIHsweDgwMDYsIDIwOX0sCisgICAgICAgIHsweDgwMGEsIDIwOX0sCisgICAgICAgIHsweDgwMGYsIDIwOX0sCisgICAgICAgIHsweDgwMTgsIDIwOX0sCisgICAgICAgIHsweDgwMWYsIDIwOX0sCisgICAgICAgIHsweDgwMjksIDIwOX0sCisgICAgICAgIHsweGMwMzgsIDIwOX0sCisgICAgfSwKKyAgICAvKiAxMTYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDIxNn0sCisgICAgICAgIHsweDgwMDksIDIxNn0sCisgICAgICAgIHsweDgwMTcsIDIxNn0sCisgICAgICAgIHsweGMwMjgsIDIxNn0sCisgICAgICAgIHsweDgwMDIsIDIxN30sCisgICAgICAgIHsweDgwMDksIDIxN30sCisgICAgICAgIHsweDgwMTcsIDIxN30sCisgICAgICAgIHsweGMwMjgsIDIxN30sCisgICAgICAgIHsweDgwMDIsIDIyN30sCisgICAgICAgIHsweDgwMDksIDIyN30sCisgICAgICAgIHsweDgwMTcsIDIyN30sCisgICAgICAgIHsweGMwMjgsIDIyN30sCisgICAgICAgIHsweDgwMDIsIDIyOX0sCisgICAgICAgIHsweDgwMDksIDIyOX0sCisgICAgICAgIHsweDgwMTcsIDIyOX0sCisgICAgICAgIHsweGMwMjgsIDIyOX0sCisgICAgfSwKKyAgICAvKiAxMTcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIxNn0sCisgICAgICAgIHsweDgwMDYsIDIxNn0sCisgICAgICAgIHsweDgwMGEsIDIxNn0sCisgICAgICAgIHsweDgwMGYsIDIxNn0sCisgICAgICAgIHsweDgwMTgsIDIxNn0sCisgICAgICAgIHsweDgwMWYsIDIxNn0sCisgICAgICAgIHsweDgwMjksIDIxNn0sCisgICAgICAgIHsweGMwMzgsIDIxNn0sCisgICAgICAgIHsweDgwMDMsIDIxN30sCisgICAgICAgIHsweDgwMDYsIDIxN30sCisgICAgICAgIHsweDgwMGEsIDIxN30sCisgICAgICAgIHsweDgwMGYsIDIxN30sCisgICAgICAgIHsweDgwMTgsIDIxN30sCisgICAgICAgIHsweDgwMWYsIDIxN30sCisgICAgICAgIHsweDgwMjksIDIxN30sCisgICAgICAgIHsweGMwMzgsIDIxN30sCisgICAgfSwKKyAgICAvKiAxMTggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIyN30sCisgICAgICAgIHsweDgwMDYsIDIyN30sCisgICAgICAgIHsweDgwMGEsIDIyN30sCisgICAgICAgIHsweDgwMGYsIDIyN30sCisgICAgICAgIHsweDgwMTgsIDIyN30sCisgICAgICAgIHsweDgwMWYsIDIyN30sCisgICAgICAgIHsweDgwMjksIDIyN30sCisgICAgICAgIHsweGMwMzgsIDIyN30sCisgICAgICAgIHsweDgwMDMsIDIyOX0sCisgICAgICAgIHsweDgwMDYsIDIyOX0sCisgICAgICAgIHsweDgwMGEsIDIyOX0sCisgICAgICAgIHsweDgwMGYsIDIyOX0sCisgICAgICAgIHsweDgwMTgsIDIyOX0sCisgICAgICAgIHsweDgwMWYsIDIyOX0sCisgICAgICAgIHsweDgwMjksIDIyOX0sCisgICAgICAgIHsweGMwMzgsIDIyOX0sCisgICAgfSwKKyAgICAvKiAxMTkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDIzMH0sCisgICAgICAgIHsweGMwMTYsIDIzMH0sCisgICAgICAgIHsweGMwMDAsIDEyOX0sCisgICAgICAgIHsweGMwMDAsIDEzMn0sCisgICAgICAgIHsweGMwMDAsIDEzM30sCisgICAgICAgIHsweGMwMDAsIDEzNH0sCisgICAgICAgIHsweGMwMDAsIDEzNn0sCisgICAgICAgIHsweGMwMDAsIDE0Nn0sCisgICAgICAgIHsweGMwMDAsIDE1NH0sCisgICAgICAgIHsweGMwMDAsIDE1Nn0sCisgICAgICAgIHsweGMwMDAsIDE2MH0sCisgICAgICAgIHsweGMwMDAsIDE2M30sCisgICAgICAgIHsweGMwMDAsIDE2NH0sCisgICAgICAgIHsweGMwMDAsIDE2OX0sCisgICAgICAgIHsweGMwMDAsIDE3MH0sCisgICAgICAgIHsweGMwMDAsIDE3M30sCisgICAgfSwKKyAgICAvKiAxMjAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDIzMH0sCisgICAgICAgIHsweDgwMDksIDIzMH0sCisgICAgICAgIHsweDgwMTcsIDIzMH0sCisgICAgICAgIHsweGMwMjgsIDIzMH0sCisgICAgICAgIHsweDgwMDEsIDEyOX0sCisgICAgICAgIHsweGMwMTYsIDEyOX0sCisgICAgICAgIHsweDgwMDEsIDEzMn0sCisgICAgICAgIHsweGMwMTYsIDEzMn0sCisgICAgICAgIHsweDgwMDEsIDEzM30sCisgICAgICAgIHsweGMwMTYsIDEzM30sCisgICAgICAgIHsweDgwMDEsIDEzNH0sCisgICAgICAgIHsweGMwMTYsIDEzNH0sCisgICAgICAgIHsweDgwMDEsIDEzNn0sCisgICAgICAgIHsweGMwMTYsIDEzNn0sCisgICAgICAgIHsweDgwMDEsIDE0Nn0sCisgICAgICAgIHsweGMwMTYsIDE0Nn0sCisgICAgfSwKKyAgICAvKiAxMjEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIzMH0sCisgICAgICAgIHsweDgwMDYsIDIzMH0sCisgICAgICAgIHsweDgwMGEsIDIzMH0sCisgICAgICAgIHsweDgwMGYsIDIzMH0sCisgICAgICAgIHsweDgwMTgsIDIzMH0sCisgICAgICAgIHsweDgwMWYsIDIzMH0sCisgICAgICAgIHsweDgwMjksIDIzMH0sCisgICAgICAgIHsweGMwMzgsIDIzMH0sCisgICAgICAgIHsweDgwMDIsIDEyOX0sCisgICAgICAgIHsweDgwMDksIDEyOX0sCisgICAgICAgIHsweDgwMTcsIDEyOX0sCisgICAgICAgIHsweGMwMjgsIDEyOX0sCisgICAgICAgIHsweDgwMDIsIDEzMn0sCisgICAgICAgIHsweDgwMDksIDEzMn0sCisgICAgICAgIHsweDgwMTcsIDEzMn0sCisgICAgICAgIHsweGMwMjgsIDEzMn0sCisgICAgfSwKKyAgICAvKiAxMjIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEyOX0sCisgICAgICAgIHsweDgwMDYsIDEyOX0sCisgICAgICAgIHsweDgwMGEsIDEyOX0sCisgICAgICAgIHsweDgwMGYsIDEyOX0sCisgICAgICAgIHsweDgwMTgsIDEyOX0sCisgICAgICAgIHsweDgwMWYsIDEyOX0sCisgICAgICAgIHsweDgwMjksIDEyOX0sCisgICAgICAgIHsweGMwMzgsIDEyOX0sCisgICAgICAgIHsweDgwMDMsIDEzMn0sCisgICAgICAgIHsweDgwMDYsIDEzMn0sCisgICAgICAgIHsweDgwMGEsIDEzMn0sCisgICAgICAgIHsweDgwMGYsIDEzMn0sCisgICAgICAgIHsweDgwMTgsIDEzMn0sCisgICAgICAgIHsweDgwMWYsIDEzMn0sCisgICAgICAgIHsweDgwMjksIDEzMn0sCisgICAgICAgIHsweGMwMzgsIDEzMn0sCisgICAgfSwKKyAgICAvKiAxMjMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDEzM30sCisgICAgICAgIHsweDgwMDksIDEzM30sCisgICAgICAgIHsweDgwMTcsIDEzM30sCisgICAgICAgIHsweGMwMjgsIDEzM30sCisgICAgICAgIHsweDgwMDIsIDEzNH0sCisgICAgICAgIHsweDgwMDksIDEzNH0sCisgICAgICAgIHsweDgwMTcsIDEzNH0sCisgICAgICAgIHsweGMwMjgsIDEzNH0sCisgICAgICAgIHsweDgwMDIsIDEzNn0sCisgICAgICAgIHsweDgwMDksIDEzNn0sCisgICAgICAgIHsweDgwMTcsIDEzNn0sCisgICAgICAgIHsweGMwMjgsIDEzNn0sCisgICAgICAgIHsweDgwMDIsIDE0Nn0sCisgICAgICAgIHsweDgwMDksIDE0Nn0sCisgICAgICAgIHsweDgwMTcsIDE0Nn0sCisgICAgICAgIHsweGMwMjgsIDE0Nn0sCisgICAgfSwKKyAgICAvKiAxMjQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEzM30sCisgICAgICAgIHsweDgwMDYsIDEzM30sCisgICAgICAgIHsweDgwMGEsIDEzM30sCisgICAgICAgIHsweDgwMGYsIDEzM30sCisgICAgICAgIHsweDgwMTgsIDEzM30sCisgICAgICAgIHsweDgwMWYsIDEzM30sCisgICAgICAgIHsweDgwMjksIDEzM30sCisgICAgICAgIHsweGMwMzgsIDEzM30sCisgICAgICAgIHsweDgwMDMsIDEzNH0sCisgICAgICAgIHsweDgwMDYsIDEzNH0sCisgICAgICAgIHsweDgwMGEsIDEzNH0sCisgICAgICAgIHsweDgwMGYsIDEzNH0sCisgICAgICAgIHsweDgwMTgsIDEzNH0sCisgICAgICAgIHsweDgwMWYsIDEzNH0sCisgICAgICAgIHsweDgwMjksIDEzNH0sCisgICAgICAgIHsweGMwMzgsIDEzNH0sCisgICAgfSwKKyAgICAvKiAxMjUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEzNn0sCisgICAgICAgIHsweDgwMDYsIDEzNn0sCisgICAgICAgIHsweDgwMGEsIDEzNn0sCisgICAgICAgIHsweDgwMGYsIDEzNn0sCisgICAgICAgIHsweDgwMTgsIDEzNn0sCisgICAgICAgIHsweDgwMWYsIDEzNn0sCisgICAgICAgIHsweDgwMjksIDEzNn0sCisgICAgICAgIHsweGMwMzgsIDEzNn0sCisgICAgICAgIHsweDgwMDMsIDE0Nn0sCisgICAgICAgIHsweDgwMDYsIDE0Nn0sCisgICAgICAgIHsweDgwMGEsIDE0Nn0sCisgICAgICAgIHsweDgwMGYsIDE0Nn0sCisgICAgICAgIHsweDgwMTgsIDE0Nn0sCisgICAgICAgIHsweDgwMWYsIDE0Nn0sCisgICAgICAgIHsweDgwMjksIDE0Nn0sCisgICAgICAgIHsweGMwMzgsIDE0Nn0sCisgICAgfSwKKyAgICAvKiAxMjYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDE1NH0sCisgICAgICAgIHsweGMwMTYsIDE1NH0sCisgICAgICAgIHsweDgwMDEsIDE1Nn0sCisgICAgICAgIHsweGMwMTYsIDE1Nn0sCisgICAgICAgIHsweDgwMDEsIDE2MH0sCisgICAgICAgIHsweGMwMTYsIDE2MH0sCisgICAgICAgIHsweDgwMDEsIDE2M30sCisgICAgICAgIHsweGMwMTYsIDE2M30sCisgICAgICAgIHsweDgwMDEsIDE2NH0sCisgICAgICAgIHsweGMwMTYsIDE2NH0sCisgICAgICAgIHsweDgwMDEsIDE2OX0sCisgICAgICAgIHsweGMwMTYsIDE2OX0sCisgICAgICAgIHsweDgwMDEsIDE3MH0sCisgICAgICAgIHsweGMwMTYsIDE3MH0sCisgICAgICAgIHsweDgwMDEsIDE3M30sCisgICAgICAgIHsweGMwMTYsIDE3M30sCisgICAgfSwKKyAgICAvKiAxMjcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE1NH0sCisgICAgICAgIHsweDgwMDksIDE1NH0sCisgICAgICAgIHsweDgwMTcsIDE1NH0sCisgICAgICAgIHsweGMwMjgsIDE1NH0sCisgICAgICAgIHsweDgwMDIsIDE1Nn0sCisgICAgICAgIHsweDgwMDksIDE1Nn0sCisgICAgICAgIHsweDgwMTcsIDE1Nn0sCisgICAgICAgIHsweGMwMjgsIDE1Nn0sCisgICAgICAgIHsweDgwMDIsIDE2MH0sCisgICAgICAgIHsweDgwMDksIDE2MH0sCisgICAgICAgIHsweDgwMTcsIDE2MH0sCisgICAgICAgIHsweGMwMjgsIDE2MH0sCisgICAgICAgIHsweDgwMDIsIDE2M30sCisgICAgICAgIHsweDgwMDksIDE2M30sCisgICAgICAgIHsweDgwMTcsIDE2M30sCisgICAgICAgIHsweGMwMjgsIDE2M30sCisgICAgfSwKKyAgICAvKiAxMjggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE1NH0sCisgICAgICAgIHsweDgwMDYsIDE1NH0sCisgICAgICAgIHsweDgwMGEsIDE1NH0sCisgICAgICAgIHsweDgwMGYsIDE1NH0sCisgICAgICAgIHsweDgwMTgsIDE1NH0sCisgICAgICAgIHsweDgwMWYsIDE1NH0sCisgICAgICAgIHsweDgwMjksIDE1NH0sCisgICAgICAgIHsweGMwMzgsIDE1NH0sCisgICAgICAgIHsweDgwMDMsIDE1Nn0sCisgICAgICAgIHsweDgwMDYsIDE1Nn0sCisgICAgICAgIHsweDgwMGEsIDE1Nn0sCisgICAgICAgIHsweDgwMGYsIDE1Nn0sCisgICAgICAgIHsweDgwMTgsIDE1Nn0sCisgICAgICAgIHsweDgwMWYsIDE1Nn0sCisgICAgICAgIHsweDgwMjksIDE1Nn0sCisgICAgICAgIHsweGMwMzgsIDE1Nn0sCisgICAgfSwKKyAgICAvKiAxMjkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE2MH0sCisgICAgICAgIHsweDgwMDYsIDE2MH0sCisgICAgICAgIHsweDgwMGEsIDE2MH0sCisgICAgICAgIHsweDgwMGYsIDE2MH0sCisgICAgICAgIHsweDgwMTgsIDE2MH0sCisgICAgICAgIHsweDgwMWYsIDE2MH0sCisgICAgICAgIHsweDgwMjksIDE2MH0sCisgICAgICAgIHsweGMwMzgsIDE2MH0sCisgICAgICAgIHsweDgwMDMsIDE2M30sCisgICAgICAgIHsweDgwMDYsIDE2M30sCisgICAgICAgIHsweDgwMGEsIDE2M30sCisgICAgICAgIHsweDgwMGYsIDE2M30sCisgICAgICAgIHsweDgwMTgsIDE2M30sCisgICAgICAgIHsweDgwMWYsIDE2M30sCisgICAgICAgIHsweDgwMjksIDE2M30sCisgICAgICAgIHsweGMwMzgsIDE2M30sCisgICAgfSwKKyAgICAvKiAxMzAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE2NH0sCisgICAgICAgIHsweDgwMDksIDE2NH0sCisgICAgICAgIHsweDgwMTcsIDE2NH0sCisgICAgICAgIHsweGMwMjgsIDE2NH0sCisgICAgICAgIHsweDgwMDIsIDE2OX0sCisgICAgICAgIHsweDgwMDksIDE2OX0sCisgICAgICAgIHsweDgwMTcsIDE2OX0sCisgICAgICAgIHsweGMwMjgsIDE2OX0sCisgICAgICAgIHsweDgwMDIsIDE3MH0sCisgICAgICAgIHsweDgwMDksIDE3MH0sCisgICAgICAgIHsweDgwMTcsIDE3MH0sCisgICAgICAgIHsweGMwMjgsIDE3MH0sCisgICAgICAgIHsweDgwMDIsIDE3M30sCisgICAgICAgIHsweDgwMDksIDE3M30sCisgICAgICAgIHsweDgwMTcsIDE3M30sCisgICAgICAgIHsweGMwMjgsIDE3M30sCisgICAgfSwKKyAgICAvKiAxMzEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE2NH0sCisgICAgICAgIHsweDgwMDYsIDE2NH0sCisgICAgICAgIHsweDgwMGEsIDE2NH0sCisgICAgICAgIHsweDgwMGYsIDE2NH0sCisgICAgICAgIHsweDgwMTgsIDE2NH0sCisgICAgICAgIHsweDgwMWYsIDE2NH0sCisgICAgICAgIHsweDgwMjksIDE2NH0sCisgICAgICAgIHsweGMwMzgsIDE2NH0sCisgICAgICAgIHsweDgwMDMsIDE2OX0sCisgICAgICAgIHsweDgwMDYsIDE2OX0sCisgICAgICAgIHsweDgwMGEsIDE2OX0sCisgICAgICAgIHsweDgwMGYsIDE2OX0sCisgICAgICAgIHsweDgwMTgsIDE2OX0sCisgICAgICAgIHsweDgwMWYsIDE2OX0sCisgICAgICAgIHsweDgwMjksIDE2OX0sCisgICAgICAgIHsweGMwMzgsIDE2OX0sCisgICAgfSwKKyAgICAvKiAxMzIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE3MH0sCisgICAgICAgIHsweDgwMDYsIDE3MH0sCisgICAgICAgIHsweDgwMGEsIDE3MH0sCisgICAgICAgIHsweDgwMGYsIDE3MH0sCisgICAgICAgIHsweDgwMTgsIDE3MH0sCisgICAgICAgIHsweDgwMWYsIDE3MH0sCisgICAgICAgIHsweDgwMjksIDE3MH0sCisgICAgICAgIHsweGMwMzgsIDE3MH0sCisgICAgICAgIHsweDgwMDMsIDE3M30sCisgICAgICAgIHsweDgwMDYsIDE3M30sCisgICAgICAgIHsweDgwMGEsIDE3M30sCisgICAgICAgIHsweDgwMGYsIDE3M30sCisgICAgICAgIHsweDgwMTgsIDE3M30sCisgICAgICAgIHsweDgwMWYsIDE3M30sCisgICAgICAgIHsweDgwMjksIDE3M30sCisgICAgICAgIHsweGMwMzgsIDE3M30sCisgICAgfSwKKyAgICAvKiAxMzMgKi8KKyAgICB7CisgICAgICAgIHsweDg5LCAwfSwKKyAgICAgICAgezB4OGEsIDB9LAorICAgICAgICB7MHg4YywgMH0sCisgICAgICAgIHsweDhkLCAwfSwKKyAgICAgICAgezB4OTAsIDB9LAorICAgICAgICB7MHg5MSwgMH0sCisgICAgICAgIHsweDkzLCAwfSwKKyAgICAgICAgezB4OTYsIDB9LAorICAgICAgICB7MHg5YywgMH0sCisgICAgICAgIHsweDlmLCAwfSwKKyAgICAgICAgezB4YTMsIDB9LAorICAgICAgICB7MHhhNiwgMH0sCisgICAgICAgIHsweGFiLCAwfSwKKyAgICAgICAgezB4YWUsIDB9LAorICAgICAgICB7MHhiNSwgMH0sCisgICAgICAgIHsweGJlLCAwfSwKKyAgICB9LAorICAgIC8qIDEzNCAqLworICAgIHsKKyAgICAgICAgezB4YzAwMCwgMTc4fSwKKyAgICAgICAgezB4YzAwMCwgMTgxfSwKKyAgICAgICAgezB4YzAwMCwgMTg1fSwKKyAgICAgICAgezB4YzAwMCwgMTg2fSwKKyAgICAgICAgezB4YzAwMCwgMTg3fSwKKyAgICAgICAgezB4YzAwMCwgMTg5fSwKKyAgICAgICAgezB4YzAwMCwgMTkwfSwKKyAgICAgICAgezB4YzAwMCwgMTk2fSwKKyAgICAgICAgezB4YzAwMCwgMTk4fSwKKyAgICAgICAgezB4YzAwMCwgMjI4fSwKKyAgICAgICAgezB4YzAwMCwgMjMyfSwKKyAgICAgICAgezB4YzAwMCwgMjMzfSwKKyAgICAgICAgezB4OTQsIDB9LAorICAgICAgICB7MHg5NSwgMH0sCisgICAgICAgIHsweDk3LCAwfSwKKyAgICAgICAgezB4OTgsIDB9LAorICAgIH0sCisgICAgLyogMTM1ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxNzh9LAorICAgICAgICB7MHhjMDE2LCAxNzh9LAorICAgICAgICB7MHg4MDAxLCAxODF9LAorICAgICAgICB7MHhjMDE2LCAxODF9LAorICAgICAgICB7MHg4MDAxLCAxODV9LAorICAgICAgICB7MHhjMDE2LCAxODV9LAorICAgICAgICB7MHg4MDAxLCAxODZ9LAorICAgICAgICB7MHhjMDE2LCAxODZ9LAorICAgICAgICB7MHg4MDAxLCAxODd9LAorICAgICAgICB7MHhjMDE2LCAxODd9LAorICAgICAgICB7MHg4MDAxLCAxODl9LAorICAgICAgICB7MHhjMDE2LCAxODl9LAorICAgICAgICB7MHg4MDAxLCAxOTB9LAorICAgICAgICB7MHhjMDE2LCAxOTB9LAorICAgICAgICB7MHg4MDAxLCAxOTZ9LAorICAgICAgICB7MHhjMDE2LCAxOTZ9LAorICAgIH0sCisgICAgLyogMTM2ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNzh9LAorICAgICAgICB7MHg4MDA5LCAxNzh9LAorICAgICAgICB7MHg4MDE3LCAxNzh9LAorICAgICAgICB7MHhjMDI4LCAxNzh9LAorICAgICAgICB7MHg4MDAyLCAxODF9LAorICAgICAgICB7MHg4MDA5LCAxODF9LAorICAgICAgICB7MHg4MDE3LCAxODF9LAorICAgICAgICB7MHhjMDI4LCAxODF9LAorICAgICAgICB7MHg4MDAyLCAxODV9LAorICAgICAgICB7MHg4MDA5LCAxODV9LAorICAgICAgICB7MHg4MDE3LCAxODV9LAorICAgICAgICB7MHhjMDI4LCAxODV9LAorICAgICAgICB7MHg4MDAyLCAxODZ9LAorICAgICAgICB7MHg4MDA5LCAxODZ9LAorICAgICAgICB7MHg4MDE3LCAxODZ9LAorICAgICAgICB7MHhjMDI4LCAxODZ9LAorICAgIH0sCisgICAgLyogMTM3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNzh9LAorICAgICAgICB7MHg4MDA2LCAxNzh9LAorICAgICAgICB7MHg4MDBhLCAxNzh9LAorICAgICAgICB7MHg4MDBmLCAxNzh9LAorICAgICAgICB7MHg4MDE4LCAxNzh9LAorICAgICAgICB7MHg4MDFmLCAxNzh9LAorICAgICAgICB7MHg4MDI5LCAxNzh9LAorICAgICAgICB7MHhjMDM4LCAxNzh9LAorICAgICAgICB7MHg4MDAzLCAxODF9LAorICAgICAgICB7MHg4MDA2LCAxODF9LAorICAgICAgICB7MHg4MDBhLCAxODF9LAorICAgICAgICB7MHg4MDBmLCAxODF9LAorICAgICAgICB7MHg4MDE4LCAxODF9LAorICAgICAgICB7MHg4MDFmLCAxODF9LAorICAgICAgICB7MHg4MDI5LCAxODF9LAorICAgICAgICB7MHhjMDM4LCAxODF9LAorICAgIH0sCisgICAgLyogMTM4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxODV9LAorICAgICAgICB7MHg4MDA2LCAxODV9LAorICAgICAgICB7MHg4MDBhLCAxODV9LAorICAgICAgICB7MHg4MDBmLCAxODV9LAorICAgICAgICB7MHg4MDE4LCAxODV9LAorICAgICAgICB7MHg4MDFmLCAxODV9LAorICAgICAgICB7MHg4MDI5LCAxODV9LAorICAgICAgICB7MHhjMDM4LCAxODV9LAorICAgICAgICB7MHg4MDAzLCAxODZ9LAorICAgICAgICB7MHg4MDA2LCAxODZ9LAorICAgICAgICB7MHg4MDBhLCAxODZ9LAorICAgICAgICB7MHg4MDBmLCAxODZ9LAorICAgICAgICB7MHg4MDE4LCAxODZ9LAorICAgICAgICB7MHg4MDFmLCAxODZ9LAorICAgICAgICB7MHg4MDI5LCAxODZ9LAorICAgICAgICB7MHhjMDM4LCAxODZ9LAorICAgIH0sCisgICAgLyogMTM5ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxODd9LAorICAgICAgICB7MHg4MDA5LCAxODd9LAorICAgICAgICB7MHg4MDE3LCAxODd9LAorICAgICAgICB7MHhjMDI4LCAxODd9LAorICAgICAgICB7MHg4MDAyLCAxODl9LAorICAgICAgICB7MHg4MDA5LCAxODl9LAorICAgICAgICB7MHg4MDE3LCAxODl9LAorICAgICAgICB7MHhjMDI4LCAxODl9LAorICAgICAgICB7MHg4MDAyLCAxOTB9LAorICAgICAgICB7MHg4MDA5LCAxOTB9LAorICAgICAgICB7MHg4MDE3LCAxOTB9LAorICAgICAgICB7MHhjMDI4LCAxOTB9LAorICAgICAgICB7MHg4MDAyLCAxOTZ9LAorICAgICAgICB7MHg4MDA5LCAxOTZ9LAorICAgICAgICB7MHg4MDE3LCAxOTZ9LAorICAgICAgICB7MHhjMDI4LCAxOTZ9LAorICAgIH0sCisgICAgLyogMTQwICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxODd9LAorICAgICAgICB7MHg4MDA2LCAxODd9LAorICAgICAgICB7MHg4MDBhLCAxODd9LAorICAgICAgICB7MHg4MDBmLCAxODd9LAorICAgICAgICB7MHg4MDE4LCAxODd9LAorICAgICAgICB7MHg4MDFmLCAxODd9LAorICAgICAgICB7MHg4MDI5LCAxODd9LAorICAgICAgICB7MHhjMDM4LCAxODd9LAorICAgICAgICB7MHg4MDAzLCAxODl9LAorICAgICAgICB7MHg4MDA2LCAxODl9LAorICAgICAgICB7MHg4MDBhLCAxODl9LAorICAgICAgICB7MHg4MDBmLCAxODl9LAorICAgICAgICB7MHg4MDE4LCAxODl9LAorICAgICAgICB7MHg4MDFmLCAxODl9LAorICAgICAgICB7MHg4MDI5LCAxODl9LAorICAgICAgICB7MHhjMDM4LCAxODl9LAorICAgIH0sCisgICAgLyogMTQxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxOTB9LAorICAgICAgICB7MHg4MDA2LCAxOTB9LAorICAgICAgICB7MHg4MDBhLCAxOTB9LAorICAgICAgICB7MHg4MDBmLCAxOTB9LAorICAgICAgICB7MHg4MDE4LCAxOTB9LAorICAgICAgICB7MHg4MDFmLCAxOTB9LAorICAgICAgICB7MHg4MDI5LCAxOTB9LAorICAgICAgICB7MHhjMDM4LCAxOTB9LAorICAgICAgICB7MHg4MDAzLCAxOTZ9LAorICAgICAgICB7MHg4MDA2LCAxOTZ9LAorICAgICAgICB7MHg4MDBhLCAxOTZ9LAorICAgICAgICB7MHg4MDBmLCAxOTZ9LAorICAgICAgICB7MHg4MDE4LCAxOTZ9LAorICAgICAgICB7MHg4MDFmLCAxOTZ9LAorICAgICAgICB7MHg4MDI5LCAxOTZ9LAorICAgICAgICB7MHhjMDM4LCAxOTZ9LAorICAgIH0sCisgICAgLyogMTQyICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxOTh9LAorICAgICAgICB7MHhjMDE2LCAxOTh9LAorICAgICAgICB7MHg4MDAxLCAyMjh9LAorICAgICAgICB7MHhjMDE2LCAyMjh9LAorICAgICAgICB7MHg4MDAxLCAyMzJ9LAorICAgICAgICB7MHhjMDE2LCAyMzJ9LAorICAgICAgICB7MHg4MDAxLCAyMzN9LAorICAgICAgICB7MHhjMDE2LCAyMzN9LAorICAgICAgICB7MHhjMDAwLCAxfSwKKyAgICAgICAgezB4YzAwMCwgMTM1fSwKKyAgICAgICAgezB4YzAwMCwgMTM3fSwKKyAgICAgICAgezB4YzAwMCwgMTM4fSwKKyAgICAgICAgezB4YzAwMCwgMTM5fSwKKyAgICAgICAgezB4YzAwMCwgMTQwfSwKKyAgICAgICAgezB4YzAwMCwgMTQxfSwKKyAgICAgICAgezB4YzAwMCwgMTQzfSwKKyAgICB9LAorICAgIC8qIDE0MyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTk4fSwKKyAgICAgICAgezB4ODAwOSwgMTk4fSwKKyAgICAgICAgezB4ODAxNywgMTk4fSwKKyAgICAgICAgezB4YzAyOCwgMTk4fSwKKyAgICAgICAgezB4ODAwMiwgMjI4fSwKKyAgICAgICAgezB4ODAwOSwgMjI4fSwKKyAgICAgICAgezB4ODAxNywgMjI4fSwKKyAgICAgICAgezB4YzAyOCwgMjI4fSwKKyAgICAgICAgezB4ODAwMiwgMjMyfSwKKyAgICAgICAgezB4ODAwOSwgMjMyfSwKKyAgICAgICAgezB4ODAxNywgMjMyfSwKKyAgICAgICAgezB4YzAyOCwgMjMyfSwKKyAgICAgICAgezB4ODAwMiwgMjMzfSwKKyAgICAgICAgezB4ODAwOSwgMjMzfSwKKyAgICAgICAgezB4ODAxNywgMjMzfSwKKyAgICAgICAgezB4YzAyOCwgMjMzfSwKKyAgICB9LAorICAgIC8qIDE0NCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTk4fSwKKyAgICAgICAgezB4ODAwNiwgMTk4fSwKKyAgICAgICAgezB4ODAwYSwgMTk4fSwKKyAgICAgICAgezB4ODAwZiwgMTk4fSwKKyAgICAgICAgezB4ODAxOCwgMTk4fSwKKyAgICAgICAgezB4ODAxZiwgMTk4fSwKKyAgICAgICAgezB4ODAyOSwgMTk4fSwKKyAgICAgICAgezB4YzAzOCwgMTk4fSwKKyAgICAgICAgezB4ODAwMywgMjI4fSwKKyAgICAgICAgezB4ODAwNiwgMjI4fSwKKyAgICAgICAgezB4ODAwYSwgMjI4fSwKKyAgICAgICAgezB4ODAwZiwgMjI4fSwKKyAgICAgICAgezB4ODAxOCwgMjI4fSwKKyAgICAgICAgezB4ODAxZiwgMjI4fSwKKyAgICAgICAgezB4ODAyOSwgMjI4fSwKKyAgICAgICAgezB4YzAzOCwgMjI4fSwKKyAgICB9LAorICAgIC8qIDE0NSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjMyfSwKKyAgICAgICAgezB4ODAwNiwgMjMyfSwKKyAgICAgICAgezB4ODAwYSwgMjMyfSwKKyAgICAgICAgezB4ODAwZiwgMjMyfSwKKyAgICAgICAgezB4ODAxOCwgMjMyfSwKKyAgICAgICAgezB4ODAxZiwgMjMyfSwKKyAgICAgICAgezB4ODAyOSwgMjMyfSwKKyAgICAgICAgezB4YzAzOCwgMjMyfSwKKyAgICAgICAgezB4ODAwMywgMjMzfSwKKyAgICAgICAgezB4ODAwNiwgMjMzfSwKKyAgICAgICAgezB4ODAwYSwgMjMzfSwKKyAgICAgICAgezB4ODAwZiwgMjMzfSwKKyAgICAgICAgezB4ODAxOCwgMjMzfSwKKyAgICAgICAgezB4ODAxZiwgMjMzfSwKKyAgICAgICAgezB4ODAyOSwgMjMzfSwKKyAgICAgICAgezB4YzAzOCwgMjMzfSwKKyAgICB9LAorICAgIC8qIDE0NiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMX0sCisgICAgICAgIHsweGMwMTYsIDF9LAorICAgICAgICB7MHg4MDAxLCAxMzV9LAorICAgICAgICB7MHhjMDE2LCAxMzV9LAorICAgICAgICB7MHg4MDAxLCAxMzd9LAorICAgICAgICB7MHhjMDE2LCAxMzd9LAorICAgICAgICB7MHg4MDAxLCAxMzh9LAorICAgICAgICB7MHhjMDE2LCAxMzh9LAorICAgICAgICB7MHg4MDAxLCAxMzl9LAorICAgICAgICB7MHhjMDE2LCAxMzl9LAorICAgICAgICB7MHg4MDAxLCAxNDB9LAorICAgICAgICB7MHhjMDE2LCAxNDB9LAorICAgICAgICB7MHg4MDAxLCAxNDF9LAorICAgICAgICB7MHhjMDE2LCAxNDF9LAorICAgICAgICB7MHg4MDAxLCAxNDN9LAorICAgICAgICB7MHhjMDE2LCAxNDN9LAorICAgIH0sCisgICAgLyogMTQ3ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxfSwKKyAgICAgICAgezB4ODAwOSwgMX0sCisgICAgICAgIHsweDgwMTcsIDF9LAorICAgICAgICB7MHhjMDI4LCAxfSwKKyAgICAgICAgezB4ODAwMiwgMTM1fSwKKyAgICAgICAgezB4ODAwOSwgMTM1fSwKKyAgICAgICAgezB4ODAxNywgMTM1fSwKKyAgICAgICAgezB4YzAyOCwgMTM1fSwKKyAgICAgICAgezB4ODAwMiwgMTM3fSwKKyAgICAgICAgezB4ODAwOSwgMTM3fSwKKyAgICAgICAgezB4ODAxNywgMTM3fSwKKyAgICAgICAgezB4YzAyOCwgMTM3fSwKKyAgICAgICAgezB4ODAwMiwgMTM4fSwKKyAgICAgICAgezB4ODAwOSwgMTM4fSwKKyAgICAgICAgezB4ODAxNywgMTM4fSwKKyAgICAgICAgezB4YzAyOCwgMTM4fSwKKyAgICB9LAorICAgIC8qIDE0OCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMX0sCisgICAgICAgIHsweDgwMDYsIDF9LAorICAgICAgICB7MHg4MDBhLCAxfSwKKyAgICAgICAgezB4ODAwZiwgMX0sCisgICAgICAgIHsweDgwMTgsIDF9LAorICAgICAgICB7MHg4MDFmLCAxfSwKKyAgICAgICAgezB4ODAyOSwgMX0sCisgICAgICAgIHsweGMwMzgsIDF9LAorICAgICAgICB7MHg4MDAzLCAxMzV9LAorICAgICAgICB7MHg4MDA2LCAxMzV9LAorICAgICAgICB7MHg4MDBhLCAxMzV9LAorICAgICAgICB7MHg4MDBmLCAxMzV9LAorICAgICAgICB7MHg4MDE4LCAxMzV9LAorICAgICAgICB7MHg4MDFmLCAxMzV9LAorICAgICAgICB7MHg4MDI5LCAxMzV9LAorICAgICAgICB7MHhjMDM4LCAxMzV9LAorICAgIH0sCisgICAgLyogMTQ5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMzd9LAorICAgICAgICB7MHg4MDA2LCAxMzd9LAorICAgICAgICB7MHg4MDBhLCAxMzd9LAorICAgICAgICB7MHg4MDBmLCAxMzd9LAorICAgICAgICB7MHg4MDE4LCAxMzd9LAorICAgICAgICB7MHg4MDFmLCAxMzd9LAorICAgICAgICB7MHg4MDI5LCAxMzd9LAorICAgICAgICB7MHhjMDM4LCAxMzd9LAorICAgICAgICB7MHg4MDAzLCAxMzh9LAorICAgICAgICB7MHg4MDA2LCAxMzh9LAorICAgICAgICB7MHg4MDBhLCAxMzh9LAorICAgICAgICB7MHg4MDBmLCAxMzh9LAorICAgICAgICB7MHg4MDE4LCAxMzh9LAorICAgICAgICB7MHg4MDFmLCAxMzh9LAorICAgICAgICB7MHg4MDI5LCAxMzh9LAorICAgICAgICB7MHhjMDM4LCAxMzh9LAorICAgIH0sCisgICAgLyogMTUwICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxMzl9LAorICAgICAgICB7MHg4MDA5LCAxMzl9LAorICAgICAgICB7MHg4MDE3LCAxMzl9LAorICAgICAgICB7MHhjMDI4LCAxMzl9LAorICAgICAgICB7MHg4MDAyLCAxNDB9LAorICAgICAgICB7MHg4MDA5LCAxNDB9LAorICAgICAgICB7MHg4MDE3LCAxNDB9LAorICAgICAgICB7MHhjMDI4LCAxNDB9LAorICAgICAgICB7MHg4MDAyLCAxNDF9LAorICAgICAgICB7MHg4MDA5LCAxNDF9LAorICAgICAgICB7MHg4MDE3LCAxNDF9LAorICAgICAgICB7MHhjMDI4LCAxNDF9LAorICAgICAgICB7MHg4MDAyLCAxNDN9LAorICAgICAgICB7MHg4MDA5LCAxNDN9LAorICAgICAgICB7MHg4MDE3LCAxNDN9LAorICAgICAgICB7MHhjMDI4LCAxNDN9LAorICAgIH0sCisgICAgLyogMTUxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMzl9LAorICAgICAgICB7MHg4MDA2LCAxMzl9LAorICAgICAgICB7MHg4MDBhLCAxMzl9LAorICAgICAgICB7MHg4MDBmLCAxMzl9LAorICAgICAgICB7MHg4MDE4LCAxMzl9LAorICAgICAgICB7MHg4MDFmLCAxMzl9LAorICAgICAgICB7MHg4MDI5LCAxMzl9LAorICAgICAgICB7MHhjMDM4LCAxMzl9LAorICAgICAgICB7MHg4MDAzLCAxNDB9LAorICAgICAgICB7MHg4MDA2LCAxNDB9LAorICAgICAgICB7MHg4MDBhLCAxNDB9LAorICAgICAgICB7MHg4MDBmLCAxNDB9LAorICAgICAgICB7MHg4MDE4LCAxNDB9LAorICAgICAgICB7MHg4MDFmLCAxNDB9LAorICAgICAgICB7MHg4MDI5LCAxNDB9LAorICAgICAgICB7MHhjMDM4LCAxNDB9LAorICAgIH0sCisgICAgLyogMTUyICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNDF9LAorICAgICAgICB7MHg4MDA2LCAxNDF9LAorICAgICAgICB7MHg4MDBhLCAxNDF9LAorICAgICAgICB7MHg4MDBmLCAxNDF9LAorICAgICAgICB7MHg4MDE4LCAxNDF9LAorICAgICAgICB7MHg4MDFmLCAxNDF9LAorICAgICAgICB7MHg4MDI5LCAxNDF9LAorICAgICAgICB7MHhjMDM4LCAxNDF9LAorICAgICAgICB7MHg4MDAzLCAxNDN9LAorICAgICAgICB7MHg4MDA2LCAxNDN9LAorICAgICAgICB7MHg4MDBhLCAxNDN9LAorICAgICAgICB7MHg4MDBmLCAxNDN9LAorICAgICAgICB7MHg4MDE4LCAxNDN9LAorICAgICAgICB7MHg4MDFmLCAxNDN9LAorICAgICAgICB7MHg4MDI5LCAxNDN9LAorICAgICAgICB7MHhjMDM4LCAxNDN9LAorICAgIH0sCisgICAgLyogMTUzICovCisgICAgeworICAgICAgICB7MHg5ZCwgMH0sCisgICAgICAgIHsweDllLCAwfSwKKyAgICAgICAgezB4YTAsIDB9LAorICAgICAgICB7MHhhMSwgMH0sCisgICAgICAgIHsweGE0LCAwfSwKKyAgICAgICAgezB4YTUsIDB9LAorICAgICAgICB7MHhhNywgMH0sCisgICAgICAgIHsweGE4LCAwfSwKKyAgICAgICAgezB4YWMsIDB9LAorICAgICAgICB7MHhhZCwgMH0sCisgICAgICAgIHsweGFmLCAwfSwKKyAgICAgICAgezB4YjEsIDB9LAorICAgICAgICB7MHhiNiwgMH0sCisgICAgICAgIHsweGI5LCAwfSwKKyAgICAgICAgezB4YmYsIDB9LAorICAgICAgICB7MHhjZiwgMH0sCisgICAgfSwKKyAgICAvKiAxNTQgKi8KKyAgICB7CisgICAgICAgIHsweGMwMDAsIDE0N30sCisgICAgICAgIHsweGMwMDAsIDE0OX0sCisgICAgICAgIHsweGMwMDAsIDE1MH0sCisgICAgICAgIHsweGMwMDAsIDE1MX0sCisgICAgICAgIHsweGMwMDAsIDE1Mn0sCisgICAgICAgIHsweGMwMDAsIDE1NX0sCisgICAgICAgIHsweGMwMDAsIDE1N30sCisgICAgICAgIHsweGMwMDAsIDE1OH0sCisgICAgICAgIHsweGMwMDAsIDE2NX0sCisgICAgICAgIHsweGMwMDAsIDE2Nn0sCisgICAgICAgIHsweGMwMDAsIDE2OH0sCisgICAgICAgIHsweGMwMDAsIDE3NH0sCisgICAgICAgIHsweGMwMDAsIDE3NX0sCisgICAgICAgIHsweGMwMDAsIDE4MH0sCisgICAgICAgIHsweGMwMDAsIDE4Mn0sCisgICAgICAgIHsweGMwMDAsIDE4M30sCisgICAgfSwKKyAgICAvKiAxNTUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDE0N30sCisgICAgICAgIHsweGMwMTYsIDE0N30sCisgICAgICAgIHsweDgwMDEsIDE0OX0sCisgICAgICAgIHsweGMwMTYsIDE0OX0sCisgICAgICAgIHsweDgwMDEsIDE1MH0sCisgICAgICAgIHsweGMwMTYsIDE1MH0sCisgICAgICAgIHsweDgwMDEsIDE1MX0sCisgICAgICAgIHsweGMwMTYsIDE1MX0sCisgICAgICAgIHsweDgwMDEsIDE1Mn0sCisgICAgICAgIHsweGMwMTYsIDE1Mn0sCisgICAgICAgIHsweDgwMDEsIDE1NX0sCisgICAgICAgIHsweGMwMTYsIDE1NX0sCisgICAgICAgIHsweDgwMDEsIDE1N30sCisgICAgICAgIHsweGMwMTYsIDE1N30sCisgICAgICAgIHsweDgwMDEsIDE1OH0sCisgICAgICAgIHsweGMwMTYsIDE1OH0sCisgICAgfSwKKyAgICAvKiAxNTYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE0N30sCisgICAgICAgIHsweDgwMDksIDE0N30sCisgICAgICAgIHsweDgwMTcsIDE0N30sCisgICAgICAgIHsweGMwMjgsIDE0N30sCisgICAgICAgIHsweDgwMDIsIDE0OX0sCisgICAgICAgIHsweDgwMDksIDE0OX0sCisgICAgICAgIHsweDgwMTcsIDE0OX0sCisgICAgICAgIHsweGMwMjgsIDE0OX0sCisgICAgICAgIHsweDgwMDIsIDE1MH0sCisgICAgICAgIHsweDgwMDksIDE1MH0sCisgICAgICAgIHsweDgwMTcsIDE1MH0sCisgICAgICAgIHsweGMwMjgsIDE1MH0sCisgICAgICAgIHsweDgwMDIsIDE1MX0sCisgICAgICAgIHsweDgwMDksIDE1MX0sCisgICAgICAgIHsweDgwMTcsIDE1MX0sCisgICAgICAgIHsweGMwMjgsIDE1MX0sCisgICAgfSwKKyAgICAvKiAxNTcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE0N30sCisgICAgICAgIHsweDgwMDYsIDE0N30sCisgICAgICAgIHsweDgwMGEsIDE0N30sCisgICAgICAgIHsweDgwMGYsIDE0N30sCisgICAgICAgIHsweDgwMTgsIDE0N30sCisgICAgICAgIHsweDgwMWYsIDE0N30sCisgICAgICAgIHsweDgwMjksIDE0N30sCisgICAgICAgIHsweGMwMzgsIDE0N30sCisgICAgICAgIHsweDgwMDMsIDE0OX0sCisgICAgICAgIHsweDgwMDYsIDE0OX0sCisgICAgICAgIHsweDgwMGEsIDE0OX0sCisgICAgICAgIHsweDgwMGYsIDE0OX0sCisgICAgICAgIHsweDgwMTgsIDE0OX0sCisgICAgICAgIHsweDgwMWYsIDE0OX0sCisgICAgICAgIHsweDgwMjksIDE0OX0sCisgICAgICAgIHsweGMwMzgsIDE0OX0sCisgICAgfSwKKyAgICAvKiAxNTggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE1MH0sCisgICAgICAgIHsweDgwMDYsIDE1MH0sCisgICAgICAgIHsweDgwMGEsIDE1MH0sCisgICAgICAgIHsweDgwMGYsIDE1MH0sCisgICAgICAgIHsweDgwMTgsIDE1MH0sCisgICAgICAgIHsweDgwMWYsIDE1MH0sCisgICAgICAgIHsweDgwMjksIDE1MH0sCisgICAgICAgIHsweGMwMzgsIDE1MH0sCisgICAgICAgIHsweDgwMDMsIDE1MX0sCisgICAgICAgIHsweDgwMDYsIDE1MX0sCisgICAgICAgIHsweDgwMGEsIDE1MX0sCisgICAgICAgIHsweDgwMGYsIDE1MX0sCisgICAgICAgIHsweDgwMTgsIDE1MX0sCisgICAgICAgIHsweDgwMWYsIDE1MX0sCisgICAgICAgIHsweDgwMjksIDE1MX0sCisgICAgICAgIHsweGMwMzgsIDE1MX0sCisgICAgfSwKKyAgICAvKiAxNTkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE1Mn0sCisgICAgICAgIHsweDgwMDksIDE1Mn0sCisgICAgICAgIHsweDgwMTcsIDE1Mn0sCisgICAgICAgIHsweGMwMjgsIDE1Mn0sCisgICAgICAgIHsweDgwMDIsIDE1NX0sCisgICAgICAgIHsweDgwMDksIDE1NX0sCisgICAgICAgIHsweDgwMTcsIDE1NX0sCisgICAgICAgIHsweGMwMjgsIDE1NX0sCisgICAgICAgIHsweDgwMDIsIDE1N30sCisgICAgICAgIHsweDgwMDksIDE1N30sCisgICAgICAgIHsweDgwMTcsIDE1N30sCisgICAgICAgIHsweGMwMjgsIDE1N30sCisgICAgICAgIHsweDgwMDIsIDE1OH0sCisgICAgICAgIHsweDgwMDksIDE1OH0sCisgICAgICAgIHsweDgwMTcsIDE1OH0sCisgICAgICAgIHsweGMwMjgsIDE1OH0sCisgICAgfSwKKyAgICAvKiAxNjAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE1Mn0sCisgICAgICAgIHsweDgwMDYsIDE1Mn0sCisgICAgICAgIHsweDgwMGEsIDE1Mn0sCisgICAgICAgIHsweDgwMGYsIDE1Mn0sCisgICAgICAgIHsweDgwMTgsIDE1Mn0sCisgICAgICAgIHsweDgwMWYsIDE1Mn0sCisgICAgICAgIHsweDgwMjksIDE1Mn0sCisgICAgICAgIHsweGMwMzgsIDE1Mn0sCisgICAgICAgIHsweDgwMDMsIDE1NX0sCisgICAgICAgIHsweDgwMDYsIDE1NX0sCisgICAgICAgIHsweDgwMGEsIDE1NX0sCisgICAgICAgIHsweDgwMGYsIDE1NX0sCisgICAgICAgIHsweDgwMTgsIDE1NX0sCisgICAgICAgIHsweDgwMWYsIDE1NX0sCisgICAgICAgIHsweDgwMjksIDE1NX0sCisgICAgICAgIHsweGMwMzgsIDE1NX0sCisgICAgfSwKKyAgICAvKiAxNjEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE1N30sCisgICAgICAgIHsweDgwMDYsIDE1N30sCisgICAgICAgIHsweDgwMGEsIDE1N30sCisgICAgICAgIHsweDgwMGYsIDE1N30sCisgICAgICAgIHsweDgwMTgsIDE1N30sCisgICAgICAgIHsweDgwMWYsIDE1N30sCisgICAgICAgIHsweDgwMjksIDE1N30sCisgICAgICAgIHsweGMwMzgsIDE1N30sCisgICAgICAgIHsweDgwMDMsIDE1OH0sCisgICAgICAgIHsweDgwMDYsIDE1OH0sCisgICAgICAgIHsweDgwMGEsIDE1OH0sCisgICAgICAgIHsweDgwMGYsIDE1OH0sCisgICAgICAgIHsweDgwMTgsIDE1OH0sCisgICAgICAgIHsweDgwMWYsIDE1OH0sCisgICAgICAgIHsweDgwMjksIDE1OH0sCisgICAgICAgIHsweGMwMzgsIDE1OH0sCisgICAgfSwKKyAgICAvKiAxNjIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDE2NX0sCisgICAgICAgIHsweGMwMTYsIDE2NX0sCisgICAgICAgIHsweDgwMDEsIDE2Nn0sCisgICAgICAgIHsweGMwMTYsIDE2Nn0sCisgICAgICAgIHsweDgwMDEsIDE2OH0sCisgICAgICAgIHsweGMwMTYsIDE2OH0sCisgICAgICAgIHsweDgwMDEsIDE3NH0sCisgICAgICAgIHsweGMwMTYsIDE3NH0sCisgICAgICAgIHsweDgwMDEsIDE3NX0sCisgICAgICAgIHsweGMwMTYsIDE3NX0sCisgICAgICAgIHsweDgwMDEsIDE4MH0sCisgICAgICAgIHsweGMwMTYsIDE4MH0sCisgICAgICAgIHsweDgwMDEsIDE4Mn0sCisgICAgICAgIHsweGMwMTYsIDE4Mn0sCisgICAgICAgIHsweDgwMDEsIDE4M30sCisgICAgICAgIHsweGMwMTYsIDE4M30sCisgICAgfSwKKyAgICAvKiAxNjMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE2NX0sCisgICAgICAgIHsweDgwMDksIDE2NX0sCisgICAgICAgIHsweDgwMTcsIDE2NX0sCisgICAgICAgIHsweGMwMjgsIDE2NX0sCisgICAgICAgIHsweDgwMDIsIDE2Nn0sCisgICAgICAgIHsweDgwMDksIDE2Nn0sCisgICAgICAgIHsweDgwMTcsIDE2Nn0sCisgICAgICAgIHsweGMwMjgsIDE2Nn0sCisgICAgICAgIHsweDgwMDIsIDE2OH0sCisgICAgICAgIHsweDgwMDksIDE2OH0sCisgICAgICAgIHsweDgwMTcsIDE2OH0sCisgICAgICAgIHsweGMwMjgsIDE2OH0sCisgICAgICAgIHsweDgwMDIsIDE3NH0sCisgICAgICAgIHsweDgwMDksIDE3NH0sCisgICAgICAgIHsweDgwMTcsIDE3NH0sCisgICAgICAgIHsweGMwMjgsIDE3NH0sCisgICAgfSwKKyAgICAvKiAxNjQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE2NX0sCisgICAgICAgIHsweDgwMDYsIDE2NX0sCisgICAgICAgIHsweDgwMGEsIDE2NX0sCisgICAgICAgIHsweDgwMGYsIDE2NX0sCisgICAgICAgIHsweDgwMTgsIDE2NX0sCisgICAgICAgIHsweDgwMWYsIDE2NX0sCisgICAgICAgIHsweDgwMjksIDE2NX0sCisgICAgICAgIHsweGMwMzgsIDE2NX0sCisgICAgICAgIHsweDgwMDMsIDE2Nn0sCisgICAgICAgIHsweDgwMDYsIDE2Nn0sCisgICAgICAgIHsweDgwMGEsIDE2Nn0sCisgICAgICAgIHsweDgwMGYsIDE2Nn0sCisgICAgICAgIHsweDgwMTgsIDE2Nn0sCisgICAgICAgIHsweDgwMWYsIDE2Nn0sCisgICAgICAgIHsweDgwMjksIDE2Nn0sCisgICAgICAgIHsweGMwMzgsIDE2Nn0sCisgICAgfSwKKyAgICAvKiAxNjUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE2OH0sCisgICAgICAgIHsweDgwMDYsIDE2OH0sCisgICAgICAgIHsweDgwMGEsIDE2OH0sCisgICAgICAgIHsweDgwMGYsIDE2OH0sCisgICAgICAgIHsweDgwMTgsIDE2OH0sCisgICAgICAgIHsweDgwMWYsIDE2OH0sCisgICAgICAgIHsweDgwMjksIDE2OH0sCisgICAgICAgIHsweGMwMzgsIDE2OH0sCisgICAgICAgIHsweDgwMDMsIDE3NH0sCisgICAgICAgIHsweDgwMDYsIDE3NH0sCisgICAgICAgIHsweDgwMGEsIDE3NH0sCisgICAgICAgIHsweDgwMGYsIDE3NH0sCisgICAgICAgIHsweDgwMTgsIDE3NH0sCisgICAgICAgIHsweDgwMWYsIDE3NH0sCisgICAgICAgIHsweDgwMjksIDE3NH0sCisgICAgICAgIHsweGMwMzgsIDE3NH0sCisgICAgfSwKKyAgICAvKiAxNjYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE3NX0sCisgICAgICAgIHsweDgwMDksIDE3NX0sCisgICAgICAgIHsweDgwMTcsIDE3NX0sCisgICAgICAgIHsweGMwMjgsIDE3NX0sCisgICAgICAgIHsweDgwMDIsIDE4MH0sCisgICAgICAgIHsweDgwMDksIDE4MH0sCisgICAgICAgIHsweDgwMTcsIDE4MH0sCisgICAgICAgIHsweGMwMjgsIDE4MH0sCisgICAgICAgIHsweDgwMDIsIDE4Mn0sCisgICAgICAgIHsweDgwMDksIDE4Mn0sCisgICAgICAgIHsweDgwMTcsIDE4Mn0sCisgICAgICAgIHsweGMwMjgsIDE4Mn0sCisgICAgICAgIHsweDgwMDIsIDE4M30sCisgICAgICAgIHsweDgwMDksIDE4M30sCisgICAgICAgIHsweDgwMTcsIDE4M30sCisgICAgICAgIHsweGMwMjgsIDE4M30sCisgICAgfSwKKyAgICAvKiAxNjcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE3NX0sCisgICAgICAgIHsweDgwMDYsIDE3NX0sCisgICAgICAgIHsweDgwMGEsIDE3NX0sCisgICAgICAgIHsweDgwMGYsIDE3NX0sCisgICAgICAgIHsweDgwMTgsIDE3NX0sCisgICAgICAgIHsweDgwMWYsIDE3NX0sCisgICAgICAgIHsweDgwMjksIDE3NX0sCisgICAgICAgIHsweGMwMzgsIDE3NX0sCisgICAgICAgIHsweDgwMDMsIDE4MH0sCisgICAgICAgIHsweDgwMDYsIDE4MH0sCisgICAgICAgIHsweDgwMGEsIDE4MH0sCisgICAgICAgIHsweDgwMGYsIDE4MH0sCisgICAgICAgIHsweDgwMTgsIDE4MH0sCisgICAgICAgIHsweDgwMWYsIDE4MH0sCisgICAgICAgIHsweDgwMjksIDE4MH0sCisgICAgICAgIHsweGMwMzgsIDE4MH0sCisgICAgfSwKKyAgICAvKiAxNjggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE4Mn0sCisgICAgICAgIHsweDgwMDYsIDE4Mn0sCisgICAgICAgIHsweDgwMGEsIDE4Mn0sCisgICAgICAgIHsweDgwMGYsIDE4Mn0sCisgICAgICAgIHsweDgwMTgsIDE4Mn0sCisgICAgICAgIHsweDgwMWYsIDE4Mn0sCisgICAgICAgIHsweDgwMjksIDE4Mn0sCisgICAgICAgIHsweGMwMzgsIDE4Mn0sCisgICAgICAgIHsweDgwMDMsIDE4M30sCisgICAgICAgIHsweDgwMDYsIDE4M30sCisgICAgICAgIHsweDgwMGEsIDE4M30sCisgICAgICAgIHsweDgwMGYsIDE4M30sCisgICAgICAgIHsweDgwMTgsIDE4M30sCisgICAgICAgIHsweDgwMWYsIDE4M30sCisgICAgICAgIHsweDgwMjksIDE4M30sCisgICAgICAgIHsweGMwMzgsIDE4M30sCisgICAgfSwKKyAgICAvKiAxNjkgKi8KKyAgICB7CisgICAgICAgIHsweGMwMDAsIDE4OH0sCisgICAgICAgIHsweGMwMDAsIDE5MX0sCisgICAgICAgIHsweGMwMDAsIDE5N30sCisgICAgICAgIHsweGMwMDAsIDIzMX0sCisgICAgICAgIHsweGMwMDAsIDIzOX0sCisgICAgICAgIHsweGIwLCAwfSwKKyAgICAgICAgezB4YjIsIDB9LAorICAgICAgICB7MHhiMywgMH0sCisgICAgICAgIHsweGI3LCAwfSwKKyAgICAgICAgezB4YjgsIDB9LAorICAgICAgICB7MHhiYSwgMH0sCisgICAgICAgIHsweGJiLCAwfSwKKyAgICAgICAgezB4YzAsIDB9LAorICAgICAgICB7MHhjNywgMH0sCisgICAgICAgIHsweGQwLCAwfSwKKyAgICAgICAgezB4ZGYsIDB9LAorICAgIH0sCisgICAgLyogMTcwICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxODh9LAorICAgICAgICB7MHhjMDE2LCAxODh9LAorICAgICAgICB7MHg4MDAxLCAxOTF9LAorICAgICAgICB7MHhjMDE2LCAxOTF9LAorICAgICAgICB7MHg4MDAxLCAxOTd9LAorICAgICAgICB7MHhjMDE2LCAxOTd9LAorICAgICAgICB7MHg4MDAxLCAyMzF9LAorICAgICAgICB7MHhjMDE2LCAyMzF9LAorICAgICAgICB7MHg4MDAxLCAyMzl9LAorICAgICAgICB7MHhjMDE2LCAyMzl9LAorICAgICAgICB7MHhjMDAwLCA5fSwKKyAgICAgICAgezB4YzAwMCwgMTQyfSwKKyAgICAgICAgezB4YzAwMCwgMTQ0fSwKKyAgICAgICAgezB4YzAwMCwgMTQ1fSwKKyAgICAgICAgezB4YzAwMCwgMTQ4fSwKKyAgICAgICAgezB4YzAwMCwgMTU5fSwKKyAgICB9LAorICAgIC8qIDE3MSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMTg4fSwKKyAgICAgICAgezB4ODAwOSwgMTg4fSwKKyAgICAgICAgezB4ODAxNywgMTg4fSwKKyAgICAgICAgezB4YzAyOCwgMTg4fSwKKyAgICAgICAgezB4ODAwMiwgMTkxfSwKKyAgICAgICAgezB4ODAwOSwgMTkxfSwKKyAgICAgICAgezB4ODAxNywgMTkxfSwKKyAgICAgICAgezB4YzAyOCwgMTkxfSwKKyAgICAgICAgezB4ODAwMiwgMTk3fSwKKyAgICAgICAgezB4ODAwOSwgMTk3fSwKKyAgICAgICAgezB4ODAxNywgMTk3fSwKKyAgICAgICAgezB4YzAyOCwgMTk3fSwKKyAgICAgICAgezB4ODAwMiwgMjMxfSwKKyAgICAgICAgezB4ODAwOSwgMjMxfSwKKyAgICAgICAgezB4ODAxNywgMjMxfSwKKyAgICAgICAgezB4YzAyOCwgMjMxfSwKKyAgICB9LAorICAgIC8qIDE3MiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTg4fSwKKyAgICAgICAgezB4ODAwNiwgMTg4fSwKKyAgICAgICAgezB4ODAwYSwgMTg4fSwKKyAgICAgICAgezB4ODAwZiwgMTg4fSwKKyAgICAgICAgezB4ODAxOCwgMTg4fSwKKyAgICAgICAgezB4ODAxZiwgMTg4fSwKKyAgICAgICAgezB4ODAyOSwgMTg4fSwKKyAgICAgICAgezB4YzAzOCwgMTg4fSwKKyAgICAgICAgezB4ODAwMywgMTkxfSwKKyAgICAgICAgezB4ODAwNiwgMTkxfSwKKyAgICAgICAgezB4ODAwYSwgMTkxfSwKKyAgICAgICAgezB4ODAwZiwgMTkxfSwKKyAgICAgICAgezB4ODAxOCwgMTkxfSwKKyAgICAgICAgezB4ODAxZiwgMTkxfSwKKyAgICAgICAgezB4ODAyOSwgMTkxfSwKKyAgICAgICAgezB4YzAzOCwgMTkxfSwKKyAgICB9LAorICAgIC8qIDE3MyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTk3fSwKKyAgICAgICAgezB4ODAwNiwgMTk3fSwKKyAgICAgICAgezB4ODAwYSwgMTk3fSwKKyAgICAgICAgezB4ODAwZiwgMTk3fSwKKyAgICAgICAgezB4ODAxOCwgMTk3fSwKKyAgICAgICAgezB4ODAxZiwgMTk3fSwKKyAgICAgICAgezB4ODAyOSwgMTk3fSwKKyAgICAgICAgezB4YzAzOCwgMTk3fSwKKyAgICAgICAgezB4ODAwMywgMjMxfSwKKyAgICAgICAgezB4ODAwNiwgMjMxfSwKKyAgICAgICAgezB4ODAwYSwgMjMxfSwKKyAgICAgICAgezB4ODAwZiwgMjMxfSwKKyAgICAgICAgezB4ODAxOCwgMjMxfSwKKyAgICAgICAgezB4ODAxZiwgMjMxfSwKKyAgICAgICAgezB4ODAyOSwgMjMxfSwKKyAgICAgICAgezB4YzAzOCwgMjMxfSwKKyAgICB9LAorICAgIC8qIDE3NCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMiwgMjM5fSwKKyAgICAgICAgezB4ODAwOSwgMjM5fSwKKyAgICAgICAgezB4ODAxNywgMjM5fSwKKyAgICAgICAgezB4YzAyOCwgMjM5fSwKKyAgICAgICAgezB4ODAwMSwgOX0sCisgICAgICAgIHsweGMwMTYsIDl9LAorICAgICAgICB7MHg4MDAxLCAxNDJ9LAorICAgICAgICB7MHhjMDE2LCAxNDJ9LAorICAgICAgICB7MHg4MDAxLCAxNDR9LAorICAgICAgICB7MHhjMDE2LCAxNDR9LAorICAgICAgICB7MHg4MDAxLCAxNDV9LAorICAgICAgICB7MHhjMDE2LCAxNDV9LAorICAgICAgICB7MHg4MDAxLCAxNDh9LAorICAgICAgICB7MHhjMDE2LCAxNDh9LAorICAgICAgICB7MHg4MDAxLCAxNTl9LAorICAgICAgICB7MHhjMDE2LCAxNTl9LAorICAgIH0sCisgICAgLyogMTc1ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMzl9LAorICAgICAgICB7MHg4MDA2LCAyMzl9LAorICAgICAgICB7MHg4MDBhLCAyMzl9LAorICAgICAgICB7MHg4MDBmLCAyMzl9LAorICAgICAgICB7MHg4MDE4LCAyMzl9LAorICAgICAgICB7MHg4MDFmLCAyMzl9LAorICAgICAgICB7MHg4MDI5LCAyMzl9LAorICAgICAgICB7MHhjMDM4LCAyMzl9LAorICAgICAgICB7MHg4MDAyLCA5fSwKKyAgICAgICAgezB4ODAwOSwgOX0sCisgICAgICAgIHsweDgwMTcsIDl9LAorICAgICAgICB7MHhjMDI4LCA5fSwKKyAgICAgICAgezB4ODAwMiwgMTQyfSwKKyAgICAgICAgezB4ODAwOSwgMTQyfSwKKyAgICAgICAgezB4ODAxNywgMTQyfSwKKyAgICAgICAgezB4YzAyOCwgMTQyfSwKKyAgICB9LAorICAgIC8qIDE3NiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgOX0sCisgICAgICAgIHsweDgwMDYsIDl9LAorICAgICAgICB7MHg4MDBhLCA5fSwKKyAgICAgICAgezB4ODAwZiwgOX0sCisgICAgICAgIHsweDgwMTgsIDl9LAorICAgICAgICB7MHg4MDFmLCA5fSwKKyAgICAgICAgezB4ODAyOSwgOX0sCisgICAgICAgIHsweGMwMzgsIDl9LAorICAgICAgICB7MHg4MDAzLCAxNDJ9LAorICAgICAgICB7MHg4MDA2LCAxNDJ9LAorICAgICAgICB7MHg4MDBhLCAxNDJ9LAorICAgICAgICB7MHg4MDBmLCAxNDJ9LAorICAgICAgICB7MHg4MDE4LCAxNDJ9LAorICAgICAgICB7MHg4MDFmLCAxNDJ9LAorICAgICAgICB7MHg4MDI5LCAxNDJ9LAorICAgICAgICB7MHhjMDM4LCAxNDJ9LAorICAgIH0sCisgICAgLyogMTc3ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxNDR9LAorICAgICAgICB7MHg4MDA5LCAxNDR9LAorICAgICAgICB7MHg4MDE3LCAxNDR9LAorICAgICAgICB7MHhjMDI4LCAxNDR9LAorICAgICAgICB7MHg4MDAyLCAxNDV9LAorICAgICAgICB7MHg4MDA5LCAxNDV9LAorICAgICAgICB7MHg4MDE3LCAxNDV9LAorICAgICAgICB7MHhjMDI4LCAxNDV9LAorICAgICAgICB7MHg4MDAyLCAxNDh9LAorICAgICAgICB7MHg4MDA5LCAxNDh9LAorICAgICAgICB7MHg4MDE3LCAxNDh9LAorICAgICAgICB7MHhjMDI4LCAxNDh9LAorICAgICAgICB7MHg4MDAyLCAxNTl9LAorICAgICAgICB7MHg4MDA5LCAxNTl9LAorICAgICAgICB7MHg4MDE3LCAxNTl9LAorICAgICAgICB7MHhjMDI4LCAxNTl9LAorICAgIH0sCisgICAgLyogMTc4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNDR9LAorICAgICAgICB7MHg4MDA2LCAxNDR9LAorICAgICAgICB7MHg4MDBhLCAxNDR9LAorICAgICAgICB7MHg4MDBmLCAxNDR9LAorICAgICAgICB7MHg4MDE4LCAxNDR9LAorICAgICAgICB7MHg4MDFmLCAxNDR9LAorICAgICAgICB7MHg4MDI5LCAxNDR9LAorICAgICAgICB7MHhjMDM4LCAxNDR9LAorICAgICAgICB7MHg4MDAzLCAxNDV9LAorICAgICAgICB7MHg4MDA2LCAxNDV9LAorICAgICAgICB7MHg4MDBhLCAxNDV9LAorICAgICAgICB7MHg4MDBmLCAxNDV9LAorICAgICAgICB7MHg4MDE4LCAxNDV9LAorICAgICAgICB7MHg4MDFmLCAxNDV9LAorICAgICAgICB7MHg4MDI5LCAxNDV9LAorICAgICAgICB7MHhjMDM4LCAxNDV9LAorICAgIH0sCisgICAgLyogMTc5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxNDh9LAorICAgICAgICB7MHg4MDA2LCAxNDh9LAorICAgICAgICB7MHg4MDBhLCAxNDh9LAorICAgICAgICB7MHg4MDBmLCAxNDh9LAorICAgICAgICB7MHg4MDE4LCAxNDh9LAorICAgICAgICB7MHg4MDFmLCAxNDh9LAorICAgICAgICB7MHg4MDI5LCAxNDh9LAorICAgICAgICB7MHhjMDM4LCAxNDh9LAorICAgICAgICB7MHg4MDAzLCAxNTl9LAorICAgICAgICB7MHg4MDA2LCAxNTl9LAorICAgICAgICB7MHg4MDBhLCAxNTl9LAorICAgICAgICB7MHg4MDBmLCAxNTl9LAorICAgICAgICB7MHg4MDE4LCAxNTl9LAorICAgICAgICB7MHg4MDFmLCAxNTl9LAorICAgICAgICB7MHg4MDI5LCAxNTl9LAorICAgICAgICB7MHhjMDM4LCAxNTl9LAorICAgIH0sCisgICAgLyogMTgwICovCisgICAgeworICAgICAgICB7MHhjMDAwLCAxNzF9LAorICAgICAgICB7MHhjMDAwLCAyMDZ9LAorICAgICAgICB7MHhjMDAwLCAyMTV9LAorICAgICAgICB7MHhjMDAwLCAyMjV9LAorICAgICAgICB7MHhjMDAwLCAyMzZ9LAorICAgICAgICB7MHhjMDAwLCAyMzd9LAorICAgICAgICB7MHhiYywgMH0sCisgICAgICAgIHsweGJkLCAwfSwKKyAgICAgICAgezB4YzEsIDB9LAorICAgICAgICB7MHhjNCwgMH0sCisgICAgICAgIHsweGM4LCAwfSwKKyAgICAgICAgezB4Y2IsIDB9LAorICAgICAgICB7MHhkMSwgMH0sCisgICAgICAgIHsweGQ4LCAwfSwKKyAgICAgICAgezB4ZTAsIDB9LAorICAgICAgICB7MHhlZSwgMH0sCisgICAgfSwKKyAgICAvKiAxODEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDE3MX0sCisgICAgICAgIHsweGMwMTYsIDE3MX0sCisgICAgICAgIHsweDgwMDEsIDIwNn0sCisgICAgICAgIHsweGMwMTYsIDIwNn0sCisgICAgICAgIHsweDgwMDEsIDIxNX0sCisgICAgICAgIHsweGMwMTYsIDIxNX0sCisgICAgICAgIHsweDgwMDEsIDIyNX0sCisgICAgICAgIHsweGMwMTYsIDIyNX0sCisgICAgICAgIHsweDgwMDEsIDIzNn0sCisgICAgICAgIHsweGMwMTYsIDIzNn0sCisgICAgICAgIHsweDgwMDEsIDIzN30sCisgICAgICAgIHsweGMwMTYsIDIzN30sCisgICAgICAgIHsweGMwMDAsIDE5OX0sCisgICAgICAgIHsweGMwMDAsIDIwN30sCisgICAgICAgIHsweGMwMDAsIDIzNH0sCisgICAgICAgIHsweGMwMDAsIDIzNX0sCisgICAgfSwKKyAgICAvKiAxODIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE3MX0sCisgICAgICAgIHsweDgwMDksIDE3MX0sCisgICAgICAgIHsweDgwMTcsIDE3MX0sCisgICAgICAgIHsweGMwMjgsIDE3MX0sCisgICAgICAgIHsweDgwMDIsIDIwNn0sCisgICAgICAgIHsweDgwMDksIDIwNn0sCisgICAgICAgIHsweDgwMTcsIDIwNn0sCisgICAgICAgIHsweGMwMjgsIDIwNn0sCisgICAgICAgIHsweDgwMDIsIDIxNX0sCisgICAgICAgIHsweDgwMDksIDIxNX0sCisgICAgICAgIHsweDgwMTcsIDIxNX0sCisgICAgICAgIHsweGMwMjgsIDIxNX0sCisgICAgICAgIHsweDgwMDIsIDIyNX0sCisgICAgICAgIHsweDgwMDksIDIyNX0sCisgICAgICAgIHsweDgwMTcsIDIyNX0sCisgICAgICAgIHsweGMwMjgsIDIyNX0sCisgICAgfSwKKyAgICAvKiAxODMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE3MX0sCisgICAgICAgIHsweDgwMDYsIDE3MX0sCisgICAgICAgIHsweDgwMGEsIDE3MX0sCisgICAgICAgIHsweDgwMGYsIDE3MX0sCisgICAgICAgIHsweDgwMTgsIDE3MX0sCisgICAgICAgIHsweDgwMWYsIDE3MX0sCisgICAgICAgIHsweDgwMjksIDE3MX0sCisgICAgICAgIHsweGMwMzgsIDE3MX0sCisgICAgICAgIHsweDgwMDMsIDIwNn0sCisgICAgICAgIHsweDgwMDYsIDIwNn0sCisgICAgICAgIHsweDgwMGEsIDIwNn0sCisgICAgICAgIHsweDgwMGYsIDIwNn0sCisgICAgICAgIHsweDgwMTgsIDIwNn0sCisgICAgICAgIHsweDgwMWYsIDIwNn0sCisgICAgICAgIHsweDgwMjksIDIwNn0sCisgICAgICAgIHsweGMwMzgsIDIwNn0sCisgICAgfSwKKyAgICAvKiAxODQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIxNX0sCisgICAgICAgIHsweDgwMDYsIDIxNX0sCisgICAgICAgIHsweDgwMGEsIDIxNX0sCisgICAgICAgIHsweDgwMGYsIDIxNX0sCisgICAgICAgIHsweDgwMTgsIDIxNX0sCisgICAgICAgIHsweDgwMWYsIDIxNX0sCisgICAgICAgIHsweDgwMjksIDIxNX0sCisgICAgICAgIHsweGMwMzgsIDIxNX0sCisgICAgICAgIHsweDgwMDMsIDIyNX0sCisgICAgICAgIHsweDgwMDYsIDIyNX0sCisgICAgICAgIHsweDgwMGEsIDIyNX0sCisgICAgICAgIHsweDgwMGYsIDIyNX0sCisgICAgICAgIHsweDgwMTgsIDIyNX0sCisgICAgICAgIHsweDgwMWYsIDIyNX0sCisgICAgICAgIHsweDgwMjksIDIyNX0sCisgICAgICAgIHsweGMwMzgsIDIyNX0sCisgICAgfSwKKyAgICAvKiAxODUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDIzNn0sCisgICAgICAgIHsweDgwMDksIDIzNn0sCisgICAgICAgIHsweDgwMTcsIDIzNn0sCisgICAgICAgIHsweGMwMjgsIDIzNn0sCisgICAgICAgIHsweDgwMDIsIDIzN30sCisgICAgICAgIHsweDgwMDksIDIzN30sCisgICAgICAgIHsweDgwMTcsIDIzN30sCisgICAgICAgIHsweGMwMjgsIDIzN30sCisgICAgICAgIHsweDgwMDEsIDE5OX0sCisgICAgICAgIHsweGMwMTYsIDE5OX0sCisgICAgICAgIHsweDgwMDEsIDIwN30sCisgICAgICAgIHsweGMwMTYsIDIwN30sCisgICAgICAgIHsweDgwMDEsIDIzNH0sCisgICAgICAgIHsweGMwMTYsIDIzNH0sCisgICAgICAgIHsweDgwMDEsIDIzNX0sCisgICAgICAgIHsweGMwMTYsIDIzNX0sCisgICAgfSwKKyAgICAvKiAxODYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIzNn0sCisgICAgICAgIHsweDgwMDYsIDIzNn0sCisgICAgICAgIHsweDgwMGEsIDIzNn0sCisgICAgICAgIHsweDgwMGYsIDIzNn0sCisgICAgICAgIHsweDgwMTgsIDIzNn0sCisgICAgICAgIHsweDgwMWYsIDIzNn0sCisgICAgICAgIHsweDgwMjksIDIzNn0sCisgICAgICAgIHsweGMwMzgsIDIzNn0sCisgICAgICAgIHsweDgwMDMsIDIzN30sCisgICAgICAgIHsweDgwMDYsIDIzN30sCisgICAgICAgIHsweDgwMGEsIDIzN30sCisgICAgICAgIHsweDgwMGYsIDIzN30sCisgICAgICAgIHsweDgwMTgsIDIzN30sCisgICAgICAgIHsweDgwMWYsIDIzN30sCisgICAgICAgIHsweDgwMjksIDIzN30sCisgICAgICAgIHsweGMwMzgsIDIzN30sCisgICAgfSwKKyAgICAvKiAxODcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE5OX0sCisgICAgICAgIHsweDgwMDksIDE5OX0sCisgICAgICAgIHsweDgwMTcsIDE5OX0sCisgICAgICAgIHsweGMwMjgsIDE5OX0sCisgICAgICAgIHsweDgwMDIsIDIwN30sCisgICAgICAgIHsweDgwMDksIDIwN30sCisgICAgICAgIHsweDgwMTcsIDIwN30sCisgICAgICAgIHsweGMwMjgsIDIwN30sCisgICAgICAgIHsweDgwMDIsIDIzNH0sCisgICAgICAgIHsweDgwMDksIDIzNH0sCisgICAgICAgIHsweDgwMTcsIDIzNH0sCisgICAgICAgIHsweGMwMjgsIDIzNH0sCisgICAgICAgIHsweDgwMDIsIDIzNX0sCisgICAgICAgIHsweDgwMDksIDIzNX0sCisgICAgICAgIHsweDgwMTcsIDIzNX0sCisgICAgICAgIHsweGMwMjgsIDIzNX0sCisgICAgfSwKKyAgICAvKiAxODggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE5OX0sCisgICAgICAgIHsweDgwMDYsIDE5OX0sCisgICAgICAgIHsweDgwMGEsIDE5OX0sCisgICAgICAgIHsweDgwMGYsIDE5OX0sCisgICAgICAgIHsweDgwMTgsIDE5OX0sCisgICAgICAgIHsweDgwMWYsIDE5OX0sCisgICAgICAgIHsweDgwMjksIDE5OX0sCisgICAgICAgIHsweGMwMzgsIDE5OX0sCisgICAgICAgIHsweDgwMDMsIDIwN30sCisgICAgICAgIHsweDgwMDYsIDIwN30sCisgICAgICAgIHsweDgwMGEsIDIwN30sCisgICAgICAgIHsweDgwMGYsIDIwN30sCisgICAgICAgIHsweDgwMTgsIDIwN30sCisgICAgICAgIHsweDgwMWYsIDIwN30sCisgICAgICAgIHsweDgwMjksIDIwN30sCisgICAgICAgIHsweGMwMzgsIDIwN30sCisgICAgfSwKKyAgICAvKiAxODkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIzNH0sCisgICAgICAgIHsweDgwMDYsIDIzNH0sCisgICAgICAgIHsweDgwMGEsIDIzNH0sCisgICAgICAgIHsweDgwMGYsIDIzNH0sCisgICAgICAgIHsweDgwMTgsIDIzNH0sCisgICAgICAgIHsweDgwMWYsIDIzNH0sCisgICAgICAgIHsweDgwMjksIDIzNH0sCisgICAgICAgIHsweGMwMzgsIDIzNH0sCisgICAgICAgIHsweDgwMDMsIDIzNX0sCisgICAgICAgIHsweDgwMDYsIDIzNX0sCisgICAgICAgIHsweDgwMGEsIDIzNX0sCisgICAgICAgIHsweDgwMGYsIDIzNX0sCisgICAgICAgIHsweDgwMTgsIDIzNX0sCisgICAgICAgIHsweDgwMWYsIDIzNX0sCisgICAgICAgIHsweDgwMjksIDIzNX0sCisgICAgICAgIHsweGMwMzgsIDIzNX0sCisgICAgfSwKKyAgICAvKiAxOTAgKi8KKyAgICB7CisgICAgICAgIHsweGMyLCAwfSwKKyAgICAgICAgezB4YzMsIDB9LAorICAgICAgICB7MHhjNSwgMH0sCisgICAgICAgIHsweGM2LCAwfSwKKyAgICAgICAgezB4YzksIDB9LAorICAgICAgICB7MHhjYSwgMH0sCisgICAgICAgIHsweGNjLCAwfSwKKyAgICAgICAgezB4Y2QsIDB9LAorICAgICAgICB7MHhkMiwgMH0sCisgICAgICAgIHsweGQ1LCAwfSwKKyAgICAgICAgezB4ZDksIDB9LAorICAgICAgICB7MHhkYywgMH0sCisgICAgICAgIHsweGUxLCAwfSwKKyAgICAgICAgezB4ZTcsIDB9LAorICAgICAgICB7MHhlZiwgMH0sCisgICAgICAgIHsweGY2LCAwfSwKKyAgICB9LAorICAgIC8qIDE5MSAqLworICAgIHsKKyAgICAgICAgezB4YzAwMCwgMTkyfSwKKyAgICAgICAgezB4YzAwMCwgMTkzfSwKKyAgICAgICAgezB4YzAwMCwgMjAwfSwKKyAgICAgICAgezB4YzAwMCwgMjAxfSwKKyAgICAgICAgezB4YzAwMCwgMjAyfSwKKyAgICAgICAgezB4YzAwMCwgMjA1fSwKKyAgICAgICAgezB4YzAwMCwgMjEwfSwKKyAgICAgICAgezB4YzAwMCwgMjEzfSwKKyAgICAgICAgezB4YzAwMCwgMjE4fSwKKyAgICAgICAgezB4YzAwMCwgMjE5fSwKKyAgICAgICAgezB4YzAwMCwgMjM4fSwKKyAgICAgICAgezB4YzAwMCwgMjQwfSwKKyAgICAgICAgezB4YzAwMCwgMjQyfSwKKyAgICAgICAgezB4YzAwMCwgMjQzfSwKKyAgICAgICAgezB4YzAwMCwgMjU1fSwKKyAgICAgICAgezB4Y2UsIDB9LAorICAgIH0sCisgICAgLyogMTkyICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAxOTJ9LAorICAgICAgICB7MHhjMDE2LCAxOTJ9LAorICAgICAgICB7MHg4MDAxLCAxOTN9LAorICAgICAgICB7MHhjMDE2LCAxOTN9LAorICAgICAgICB7MHg4MDAxLCAyMDB9LAorICAgICAgICB7MHhjMDE2LCAyMDB9LAorICAgICAgICB7MHg4MDAxLCAyMDF9LAorICAgICAgICB7MHhjMDE2LCAyMDF9LAorICAgICAgICB7MHg4MDAxLCAyMDJ9LAorICAgICAgICB7MHhjMDE2LCAyMDJ9LAorICAgICAgICB7MHg4MDAxLCAyMDV9LAorICAgICAgICB7MHhjMDE2LCAyMDV9LAorICAgICAgICB7MHg4MDAxLCAyMTB9LAorICAgICAgICB7MHhjMDE2LCAyMTB9LAorICAgICAgICB7MHg4MDAxLCAyMTN9LAorICAgICAgICB7MHhjMDE2LCAyMTN9LAorICAgIH0sCisgICAgLyogMTkzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxOTJ9LAorICAgICAgICB7MHg4MDA5LCAxOTJ9LAorICAgICAgICB7MHg4MDE3LCAxOTJ9LAorICAgICAgICB7MHhjMDI4LCAxOTJ9LAorICAgICAgICB7MHg4MDAyLCAxOTN9LAorICAgICAgICB7MHg4MDA5LCAxOTN9LAorICAgICAgICB7MHg4MDE3LCAxOTN9LAorICAgICAgICB7MHhjMDI4LCAxOTN9LAorICAgICAgICB7MHg4MDAyLCAyMDB9LAorICAgICAgICB7MHg4MDA5LCAyMDB9LAorICAgICAgICB7MHg4MDE3LCAyMDB9LAorICAgICAgICB7MHhjMDI4LCAyMDB9LAorICAgICAgICB7MHg4MDAyLCAyMDF9LAorICAgICAgICB7MHg4MDA5LCAyMDF9LAorICAgICAgICB7MHg4MDE3LCAyMDF9LAorICAgICAgICB7MHhjMDI4LCAyMDF9LAorICAgIH0sCisgICAgLyogMTk0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxOTJ9LAorICAgICAgICB7MHg4MDA2LCAxOTJ9LAorICAgICAgICB7MHg4MDBhLCAxOTJ9LAorICAgICAgICB7MHg4MDBmLCAxOTJ9LAorICAgICAgICB7MHg4MDE4LCAxOTJ9LAorICAgICAgICB7MHg4MDFmLCAxOTJ9LAorICAgICAgICB7MHg4MDI5LCAxOTJ9LAorICAgICAgICB7MHhjMDM4LCAxOTJ9LAorICAgICAgICB7MHg4MDAzLCAxOTN9LAorICAgICAgICB7MHg4MDA2LCAxOTN9LAorICAgICAgICB7MHg4MDBhLCAxOTN9LAorICAgICAgICB7MHg4MDBmLCAxOTN9LAorICAgICAgICB7MHg4MDE4LCAxOTN9LAorICAgICAgICB7MHg4MDFmLCAxOTN9LAorICAgICAgICB7MHg4MDI5LCAxOTN9LAorICAgICAgICB7MHhjMDM4LCAxOTN9LAorICAgIH0sCisgICAgLyogMTk1ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMDB9LAorICAgICAgICB7MHg4MDA2LCAyMDB9LAorICAgICAgICB7MHg4MDBhLCAyMDB9LAorICAgICAgICB7MHg4MDBmLCAyMDB9LAorICAgICAgICB7MHg4MDE4LCAyMDB9LAorICAgICAgICB7MHg4MDFmLCAyMDB9LAorICAgICAgICB7MHg4MDI5LCAyMDB9LAorICAgICAgICB7MHhjMDM4LCAyMDB9LAorICAgICAgICB7MHg4MDAzLCAyMDF9LAorICAgICAgICB7MHg4MDA2LCAyMDF9LAorICAgICAgICB7MHg4MDBhLCAyMDF9LAorICAgICAgICB7MHg4MDBmLCAyMDF9LAorICAgICAgICB7MHg4MDE4LCAyMDF9LAorICAgICAgICB7MHg4MDFmLCAyMDF9LAorICAgICAgICB7MHg4MDI5LCAyMDF9LAorICAgICAgICB7MHhjMDM4LCAyMDF9LAorICAgIH0sCisgICAgLyogMTk2ICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyMDJ9LAorICAgICAgICB7MHg4MDA5LCAyMDJ9LAorICAgICAgICB7MHg4MDE3LCAyMDJ9LAorICAgICAgICB7MHhjMDI4LCAyMDJ9LAorICAgICAgICB7MHg4MDAyLCAyMDV9LAorICAgICAgICB7MHg4MDA5LCAyMDV9LAorICAgICAgICB7MHg4MDE3LCAyMDV9LAorICAgICAgICB7MHhjMDI4LCAyMDV9LAorICAgICAgICB7MHg4MDAyLCAyMTB9LAorICAgICAgICB7MHg4MDA5LCAyMTB9LAorICAgICAgICB7MHg4MDE3LCAyMTB9LAorICAgICAgICB7MHhjMDI4LCAyMTB9LAorICAgICAgICB7MHg4MDAyLCAyMTN9LAorICAgICAgICB7MHg4MDA5LCAyMTN9LAorICAgICAgICB7MHg4MDE3LCAyMTN9LAorICAgICAgICB7MHhjMDI4LCAyMTN9LAorICAgIH0sCisgICAgLyogMTk3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMDJ9LAorICAgICAgICB7MHg4MDA2LCAyMDJ9LAorICAgICAgICB7MHg4MDBhLCAyMDJ9LAorICAgICAgICB7MHg4MDBmLCAyMDJ9LAorICAgICAgICB7MHg4MDE4LCAyMDJ9LAorICAgICAgICB7MHg4MDFmLCAyMDJ9LAorICAgICAgICB7MHg4MDI5LCAyMDJ9LAorICAgICAgICB7MHhjMDM4LCAyMDJ9LAorICAgICAgICB7MHg4MDAzLCAyMDV9LAorICAgICAgICB7MHg4MDA2LCAyMDV9LAorICAgICAgICB7MHg4MDBhLCAyMDV9LAorICAgICAgICB7MHg4MDBmLCAyMDV9LAorICAgICAgICB7MHg4MDE4LCAyMDV9LAorICAgICAgICB7MHg4MDFmLCAyMDV9LAorICAgICAgICB7MHg4MDI5LCAyMDV9LAorICAgICAgICB7MHhjMDM4LCAyMDV9LAorICAgIH0sCisgICAgLyogMTk4ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMTB9LAorICAgICAgICB7MHg4MDA2LCAyMTB9LAorICAgICAgICB7MHg4MDBhLCAyMTB9LAorICAgICAgICB7MHg4MDBmLCAyMTB9LAorICAgICAgICB7MHg4MDE4LCAyMTB9LAorICAgICAgICB7MHg4MDFmLCAyMTB9LAorICAgICAgICB7MHg4MDI5LCAyMTB9LAorICAgICAgICB7MHhjMDM4LCAyMTB9LAorICAgICAgICB7MHg4MDAzLCAyMTN9LAorICAgICAgICB7MHg4MDA2LCAyMTN9LAorICAgICAgICB7MHg4MDBhLCAyMTN9LAorICAgICAgICB7MHg4MDBmLCAyMTN9LAorICAgICAgICB7MHg4MDE4LCAyMTN9LAorICAgICAgICB7MHg4MDFmLCAyMTN9LAorICAgICAgICB7MHg4MDI5LCAyMTN9LAorICAgICAgICB7MHhjMDM4LCAyMTN9LAorICAgIH0sCisgICAgLyogMTk5ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAyMTh9LAorICAgICAgICB7MHhjMDE2LCAyMTh9LAorICAgICAgICB7MHg4MDAxLCAyMTl9LAorICAgICAgICB7MHhjMDE2LCAyMTl9LAorICAgICAgICB7MHg4MDAxLCAyMzh9LAorICAgICAgICB7MHhjMDE2LCAyMzh9LAorICAgICAgICB7MHg4MDAxLCAyNDB9LAorICAgICAgICB7MHhjMDE2LCAyNDB9LAorICAgICAgICB7MHg4MDAxLCAyNDJ9LAorICAgICAgICB7MHhjMDE2LCAyNDJ9LAorICAgICAgICB7MHg4MDAxLCAyNDN9LAorICAgICAgICB7MHhjMDE2LCAyNDN9LAorICAgICAgICB7MHg4MDAxLCAyNTV9LAorICAgICAgICB7MHhjMDE2LCAyNTV9LAorICAgICAgICB7MHhjMDAwLCAyMDN9LAorICAgICAgICB7MHhjMDAwLCAyMDR9LAorICAgIH0sCisgICAgLyogMjAwICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyMTh9LAorICAgICAgICB7MHg4MDA5LCAyMTh9LAorICAgICAgICB7MHg4MDE3LCAyMTh9LAorICAgICAgICB7MHhjMDI4LCAyMTh9LAorICAgICAgICB7MHg4MDAyLCAyMTl9LAorICAgICAgICB7MHg4MDA5LCAyMTl9LAorICAgICAgICB7MHg4MDE3LCAyMTl9LAorICAgICAgICB7MHhjMDI4LCAyMTl9LAorICAgICAgICB7MHg4MDAyLCAyMzh9LAorICAgICAgICB7MHg4MDA5LCAyMzh9LAorICAgICAgICB7MHg4MDE3LCAyMzh9LAorICAgICAgICB7MHhjMDI4LCAyMzh9LAorICAgICAgICB7MHg4MDAyLCAyNDB9LAorICAgICAgICB7MHg4MDA5LCAyNDB9LAorICAgICAgICB7MHg4MDE3LCAyNDB9LAorICAgICAgICB7MHhjMDI4LCAyNDB9LAorICAgIH0sCisgICAgLyogMjAxICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMTh9LAorICAgICAgICB7MHg4MDA2LCAyMTh9LAorICAgICAgICB7MHg4MDBhLCAyMTh9LAorICAgICAgICB7MHg4MDBmLCAyMTh9LAorICAgICAgICB7MHg4MDE4LCAyMTh9LAorICAgICAgICB7MHg4MDFmLCAyMTh9LAorICAgICAgICB7MHg4MDI5LCAyMTh9LAorICAgICAgICB7MHhjMDM4LCAyMTh9LAorICAgICAgICB7MHg4MDAzLCAyMTl9LAorICAgICAgICB7MHg4MDA2LCAyMTl9LAorICAgICAgICB7MHg4MDBhLCAyMTl9LAorICAgICAgICB7MHg4MDBmLCAyMTl9LAorICAgICAgICB7MHg4MDE4LCAyMTl9LAorICAgICAgICB7MHg4MDFmLCAyMTl9LAorICAgICAgICB7MHg4MDI5LCAyMTl9LAorICAgICAgICB7MHhjMDM4LCAyMTl9LAorICAgIH0sCisgICAgLyogMjAyICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMzh9LAorICAgICAgICB7MHg4MDA2LCAyMzh9LAorICAgICAgICB7MHg4MDBhLCAyMzh9LAorICAgICAgICB7MHg4MDBmLCAyMzh9LAorICAgICAgICB7MHg4MDE4LCAyMzh9LAorICAgICAgICB7MHg4MDFmLCAyMzh9LAorICAgICAgICB7MHg4MDI5LCAyMzh9LAorICAgICAgICB7MHhjMDM4LCAyMzh9LAorICAgICAgICB7MHg4MDAzLCAyNDB9LAorICAgICAgICB7MHg4MDA2LCAyNDB9LAorICAgICAgICB7MHg4MDBhLCAyNDB9LAorICAgICAgICB7MHg4MDBmLCAyNDB9LAorICAgICAgICB7MHg4MDE4LCAyNDB9LAorICAgICAgICB7MHg4MDFmLCAyNDB9LAorICAgICAgICB7MHg4MDI5LCAyNDB9LAorICAgICAgICB7MHhjMDM4LCAyNDB9LAorICAgIH0sCisgICAgLyogMjAzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyNDJ9LAorICAgICAgICB7MHg4MDA5LCAyNDJ9LAorICAgICAgICB7MHg4MDE3LCAyNDJ9LAorICAgICAgICB7MHhjMDI4LCAyNDJ9LAorICAgICAgICB7MHg4MDAyLCAyNDN9LAorICAgICAgICB7MHg4MDA5LCAyNDN9LAorICAgICAgICB7MHg4MDE3LCAyNDN9LAorICAgICAgICB7MHhjMDI4LCAyNDN9LAorICAgICAgICB7MHg4MDAyLCAyNTV9LAorICAgICAgICB7MHg4MDA5LCAyNTV9LAorICAgICAgICB7MHg4MDE3LCAyNTV9LAorICAgICAgICB7MHhjMDI4LCAyNTV9LAorICAgICAgICB7MHg4MDAxLCAyMDN9LAorICAgICAgICB7MHhjMDE2LCAyMDN9LAorICAgICAgICB7MHg4MDAxLCAyMDR9LAorICAgICAgICB7MHhjMDE2LCAyMDR9LAorICAgIH0sCisgICAgLyogMjA0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNDJ9LAorICAgICAgICB7MHg4MDA2LCAyNDJ9LAorICAgICAgICB7MHg4MDBhLCAyNDJ9LAorICAgICAgICB7MHg4MDBmLCAyNDJ9LAorICAgICAgICB7MHg4MDE4LCAyNDJ9LAorICAgICAgICB7MHg4MDFmLCAyNDJ9LAorICAgICAgICB7MHg4MDI5LCAyNDJ9LAorICAgICAgICB7MHhjMDM4LCAyNDJ9LAorICAgICAgICB7MHg4MDAzLCAyNDN9LAorICAgICAgICB7MHg4MDA2LCAyNDN9LAorICAgICAgICB7MHg4MDBhLCAyNDN9LAorICAgICAgICB7MHg4MDBmLCAyNDN9LAorICAgICAgICB7MHg4MDE4LCAyNDN9LAorICAgICAgICB7MHg4MDFmLCAyNDN9LAorICAgICAgICB7MHg4MDI5LCAyNDN9LAorICAgICAgICB7MHhjMDM4LCAyNDN9LAorICAgIH0sCisgICAgLyogMjA1ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyNTV9LAorICAgICAgICB7MHg4MDA2LCAyNTV9LAorICAgICAgICB7MHg4MDBhLCAyNTV9LAorICAgICAgICB7MHg4MDBmLCAyNTV9LAorICAgICAgICB7MHg4MDE4LCAyNTV9LAorICAgICAgICB7MHg4MDFmLCAyNTV9LAorICAgICAgICB7MHg4MDI5LCAyNTV9LAorICAgICAgICB7MHhjMDM4LCAyNTV9LAorICAgICAgICB7MHg4MDAyLCAyMDN9LAorICAgICAgICB7MHg4MDA5LCAyMDN9LAorICAgICAgICB7MHg4MDE3LCAyMDN9LAorICAgICAgICB7MHhjMDI4LCAyMDN9LAorICAgICAgICB7MHg4MDAyLCAyMDR9LAorICAgICAgICB7MHg4MDA5LCAyMDR9LAorICAgICAgICB7MHg4MDE3LCAyMDR9LAorICAgICAgICB7MHhjMDI4LCAyMDR9LAorICAgIH0sCisgICAgLyogMjA2ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAyMDN9LAorICAgICAgICB7MHg4MDA2LCAyMDN9LAorICAgICAgICB7MHg4MDBhLCAyMDN9LAorICAgICAgICB7MHg4MDBmLCAyMDN9LAorICAgICAgICB7MHg4MDE4LCAyMDN9LAorICAgICAgICB7MHg4MDFmLCAyMDN9LAorICAgICAgICB7MHg4MDI5LCAyMDN9LAorICAgICAgICB7MHhjMDM4LCAyMDN9LAorICAgICAgICB7MHg4MDAzLCAyMDR9LAorICAgICAgICB7MHg4MDA2LCAyMDR9LAorICAgICAgICB7MHg4MDBhLCAyMDR9LAorICAgICAgICB7MHg4MDBmLCAyMDR9LAorICAgICAgICB7MHg4MDE4LCAyMDR9LAorICAgICAgICB7MHg4MDFmLCAyMDR9LAorICAgICAgICB7MHg4MDI5LCAyMDR9LAorICAgICAgICB7MHhjMDM4LCAyMDR9LAorICAgIH0sCisgICAgLyogMjA3ICovCisgICAgeworICAgICAgICB7MHhkMywgMH0sCisgICAgICAgIHsweGQ0LCAwfSwKKyAgICAgICAgezB4ZDYsIDB9LAorICAgICAgICB7MHhkNywgMH0sCisgICAgICAgIHsweGRhLCAwfSwKKyAgICAgICAgezB4ZGIsIDB9LAorICAgICAgICB7MHhkZCwgMH0sCisgICAgICAgIHsweGRlLCAwfSwKKyAgICAgICAgezB4ZTIsIDB9LAorICAgICAgICB7MHhlNCwgMH0sCisgICAgICAgIHsweGU4LCAwfSwKKyAgICAgICAgezB4ZWIsIDB9LAorICAgICAgICB7MHhmMCwgMH0sCisgICAgICAgIHsweGYzLCAwfSwKKyAgICAgICAgezB4ZjcsIDB9LAorICAgICAgICB7MHhmYSwgMH0sCisgICAgfSwKKyAgICAvKiAyMDggKi8KKyAgICB7CisgICAgICAgIHsweGMwMDAsIDIxMX0sCisgICAgICAgIHsweGMwMDAsIDIxMn0sCisgICAgICAgIHsweGMwMDAsIDIxNH0sCisgICAgICAgIHsweGMwMDAsIDIyMX0sCisgICAgICAgIHsweGMwMDAsIDIyMn0sCisgICAgICAgIHsweGMwMDAsIDIyM30sCisgICAgICAgIHsweGMwMDAsIDI0MX0sCisgICAgICAgIHsweGMwMDAsIDI0NH0sCisgICAgICAgIHsweGMwMDAsIDI0NX0sCisgICAgICAgIHsweGMwMDAsIDI0Nn0sCisgICAgICAgIHsweGMwMDAsIDI0N30sCisgICAgICAgIHsweGMwMDAsIDI0OH0sCisgICAgICAgIHsweGMwMDAsIDI1MH0sCisgICAgICAgIHsweGMwMDAsIDI1MX0sCisgICAgICAgIHsweGMwMDAsIDI1Mn0sCisgICAgICAgIHsweGMwMDAsIDI1M30sCisgICAgfSwKKyAgICAvKiAyMDkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDIxMX0sCisgICAgICAgIHsweGMwMTYsIDIxMX0sCisgICAgICAgIHsweDgwMDEsIDIxMn0sCisgICAgICAgIHsweGMwMTYsIDIxMn0sCisgICAgICAgIHsweDgwMDEsIDIxNH0sCisgICAgICAgIHsweGMwMTYsIDIxNH0sCisgICAgICAgIHsweDgwMDEsIDIyMX0sCisgICAgICAgIHsweGMwMTYsIDIyMX0sCisgICAgICAgIHsweDgwMDEsIDIyMn0sCisgICAgICAgIHsweGMwMTYsIDIyMn0sCisgICAgICAgIHsweDgwMDEsIDIyM30sCisgICAgICAgIHsweGMwMTYsIDIyM30sCisgICAgICAgIHsweDgwMDEsIDI0MX0sCisgICAgICAgIHsweGMwMTYsIDI0MX0sCisgICAgICAgIHsweDgwMDEsIDI0NH0sCisgICAgICAgIHsweGMwMTYsIDI0NH0sCisgICAgfSwKKyAgICAvKiAyMTAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDIxMX0sCisgICAgICAgIHsweDgwMDksIDIxMX0sCisgICAgICAgIHsweDgwMTcsIDIxMX0sCisgICAgICAgIHsweGMwMjgsIDIxMX0sCisgICAgICAgIHsweDgwMDIsIDIxMn0sCisgICAgICAgIHsweDgwMDksIDIxMn0sCisgICAgICAgIHsweDgwMTcsIDIxMn0sCisgICAgICAgIHsweGMwMjgsIDIxMn0sCisgICAgICAgIHsweDgwMDIsIDIxNH0sCisgICAgICAgIHsweDgwMDksIDIxNH0sCisgICAgICAgIHsweDgwMTcsIDIxNH0sCisgICAgICAgIHsweGMwMjgsIDIxNH0sCisgICAgICAgIHsweDgwMDIsIDIyMX0sCisgICAgICAgIHsweDgwMDksIDIyMX0sCisgICAgICAgIHsweDgwMTcsIDIyMX0sCisgICAgICAgIHsweGMwMjgsIDIyMX0sCisgICAgfSwKKyAgICAvKiAyMTEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIxMX0sCisgICAgICAgIHsweDgwMDYsIDIxMX0sCisgICAgICAgIHsweDgwMGEsIDIxMX0sCisgICAgICAgIHsweDgwMGYsIDIxMX0sCisgICAgICAgIHsweDgwMTgsIDIxMX0sCisgICAgICAgIHsweDgwMWYsIDIxMX0sCisgICAgICAgIHsweDgwMjksIDIxMX0sCisgICAgICAgIHsweGMwMzgsIDIxMX0sCisgICAgICAgIHsweDgwMDMsIDIxMn0sCisgICAgICAgIHsweDgwMDYsIDIxMn0sCisgICAgICAgIHsweDgwMGEsIDIxMn0sCisgICAgICAgIHsweDgwMGYsIDIxMn0sCisgICAgICAgIHsweDgwMTgsIDIxMn0sCisgICAgICAgIHsweDgwMWYsIDIxMn0sCisgICAgICAgIHsweDgwMjksIDIxMn0sCisgICAgICAgIHsweGMwMzgsIDIxMn0sCisgICAgfSwKKyAgICAvKiAyMTIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIxNH0sCisgICAgICAgIHsweDgwMDYsIDIxNH0sCisgICAgICAgIHsweDgwMGEsIDIxNH0sCisgICAgICAgIHsweDgwMGYsIDIxNH0sCisgICAgICAgIHsweDgwMTgsIDIxNH0sCisgICAgICAgIHsweDgwMWYsIDIxNH0sCisgICAgICAgIHsweDgwMjksIDIxNH0sCisgICAgICAgIHsweGMwMzgsIDIxNH0sCisgICAgICAgIHsweDgwMDMsIDIyMX0sCisgICAgICAgIHsweDgwMDYsIDIyMX0sCisgICAgICAgIHsweDgwMGEsIDIyMX0sCisgICAgICAgIHsweDgwMGYsIDIyMX0sCisgICAgICAgIHsweDgwMTgsIDIyMX0sCisgICAgICAgIHsweDgwMWYsIDIyMX0sCisgICAgICAgIHsweDgwMjksIDIyMX0sCisgICAgICAgIHsweGMwMzgsIDIyMX0sCisgICAgfSwKKyAgICAvKiAyMTMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDIyMn0sCisgICAgICAgIHsweDgwMDksIDIyMn0sCisgICAgICAgIHsweDgwMTcsIDIyMn0sCisgICAgICAgIHsweGMwMjgsIDIyMn0sCisgICAgICAgIHsweDgwMDIsIDIyM30sCisgICAgICAgIHsweDgwMDksIDIyM30sCisgICAgICAgIHsweDgwMTcsIDIyM30sCisgICAgICAgIHsweGMwMjgsIDIyM30sCisgICAgICAgIHsweDgwMDIsIDI0MX0sCisgICAgICAgIHsweDgwMDksIDI0MX0sCisgICAgICAgIHsweDgwMTcsIDI0MX0sCisgICAgICAgIHsweGMwMjgsIDI0MX0sCisgICAgICAgIHsweDgwMDIsIDI0NH0sCisgICAgICAgIHsweDgwMDksIDI0NH0sCisgICAgICAgIHsweDgwMTcsIDI0NH0sCisgICAgICAgIHsweGMwMjgsIDI0NH0sCisgICAgfSwKKyAgICAvKiAyMTQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDIyMn0sCisgICAgICAgIHsweDgwMDYsIDIyMn0sCisgICAgICAgIHsweDgwMGEsIDIyMn0sCisgICAgICAgIHsweDgwMGYsIDIyMn0sCisgICAgICAgIHsweDgwMTgsIDIyMn0sCisgICAgICAgIHsweDgwMWYsIDIyMn0sCisgICAgICAgIHsweDgwMjksIDIyMn0sCisgICAgICAgIHsweGMwMzgsIDIyMn0sCisgICAgICAgIHsweDgwMDMsIDIyM30sCisgICAgICAgIHsweDgwMDYsIDIyM30sCisgICAgICAgIHsweDgwMGEsIDIyM30sCisgICAgICAgIHsweDgwMGYsIDIyM30sCisgICAgICAgIHsweDgwMTgsIDIyM30sCisgICAgICAgIHsweDgwMWYsIDIyM30sCisgICAgICAgIHsweDgwMjksIDIyM30sCisgICAgICAgIHsweGMwMzgsIDIyM30sCisgICAgfSwKKyAgICAvKiAyMTUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI0MX0sCisgICAgICAgIHsweDgwMDYsIDI0MX0sCisgICAgICAgIHsweDgwMGEsIDI0MX0sCisgICAgICAgIHsweDgwMGYsIDI0MX0sCisgICAgICAgIHsweDgwMTgsIDI0MX0sCisgICAgICAgIHsweDgwMWYsIDI0MX0sCisgICAgICAgIHsweDgwMjksIDI0MX0sCisgICAgICAgIHsweGMwMzgsIDI0MX0sCisgICAgICAgIHsweDgwMDMsIDI0NH0sCisgICAgICAgIHsweDgwMDYsIDI0NH0sCisgICAgICAgIHsweDgwMGEsIDI0NH0sCisgICAgICAgIHsweDgwMGYsIDI0NH0sCisgICAgICAgIHsweDgwMTgsIDI0NH0sCisgICAgICAgIHsweDgwMWYsIDI0NH0sCisgICAgICAgIHsweDgwMjksIDI0NH0sCisgICAgICAgIHsweGMwMzgsIDI0NH0sCisgICAgfSwKKyAgICAvKiAyMTYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDI0NX0sCisgICAgICAgIHsweGMwMTYsIDI0NX0sCisgICAgICAgIHsweDgwMDEsIDI0Nn0sCisgICAgICAgIHsweGMwMTYsIDI0Nn0sCisgICAgICAgIHsweDgwMDEsIDI0N30sCisgICAgICAgIHsweGMwMTYsIDI0N30sCisgICAgICAgIHsweDgwMDEsIDI0OH0sCisgICAgICAgIHsweGMwMTYsIDI0OH0sCisgICAgICAgIHsweDgwMDEsIDI1MH0sCisgICAgICAgIHsweGMwMTYsIDI1MH0sCisgICAgICAgIHsweDgwMDEsIDI1MX0sCisgICAgICAgIHsweGMwMTYsIDI1MX0sCisgICAgICAgIHsweDgwMDEsIDI1Mn0sCisgICAgICAgIHsweGMwMTYsIDI1Mn0sCisgICAgICAgIHsweDgwMDEsIDI1M30sCisgICAgICAgIHsweGMwMTYsIDI1M30sCisgICAgfSwKKyAgICAvKiAyMTcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDI0NX0sCisgICAgICAgIHsweDgwMDksIDI0NX0sCisgICAgICAgIHsweDgwMTcsIDI0NX0sCisgICAgICAgIHsweGMwMjgsIDI0NX0sCisgICAgICAgIHsweDgwMDIsIDI0Nn0sCisgICAgICAgIHsweDgwMDksIDI0Nn0sCisgICAgICAgIHsweDgwMTcsIDI0Nn0sCisgICAgICAgIHsweGMwMjgsIDI0Nn0sCisgICAgICAgIHsweDgwMDIsIDI0N30sCisgICAgICAgIHsweDgwMDksIDI0N30sCisgICAgICAgIHsweDgwMTcsIDI0N30sCisgICAgICAgIHsweGMwMjgsIDI0N30sCisgICAgICAgIHsweDgwMDIsIDI0OH0sCisgICAgICAgIHsweDgwMDksIDI0OH0sCisgICAgICAgIHsweDgwMTcsIDI0OH0sCisgICAgICAgIHsweGMwMjgsIDI0OH0sCisgICAgfSwKKyAgICAvKiAyMTggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI0NX0sCisgICAgICAgIHsweDgwMDYsIDI0NX0sCisgICAgICAgIHsweDgwMGEsIDI0NX0sCisgICAgICAgIHsweDgwMGYsIDI0NX0sCisgICAgICAgIHsweDgwMTgsIDI0NX0sCisgICAgICAgIHsweDgwMWYsIDI0NX0sCisgICAgICAgIHsweDgwMjksIDI0NX0sCisgICAgICAgIHsweGMwMzgsIDI0NX0sCisgICAgICAgIHsweDgwMDMsIDI0Nn0sCisgICAgICAgIHsweDgwMDYsIDI0Nn0sCisgICAgICAgIHsweDgwMGEsIDI0Nn0sCisgICAgICAgIHsweDgwMGYsIDI0Nn0sCisgICAgICAgIHsweDgwMTgsIDI0Nn0sCisgICAgICAgIHsweDgwMWYsIDI0Nn0sCisgICAgICAgIHsweDgwMjksIDI0Nn0sCisgICAgICAgIHsweGMwMzgsIDI0Nn0sCisgICAgfSwKKyAgICAvKiAyMTkgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI0N30sCisgICAgICAgIHsweDgwMDYsIDI0N30sCisgICAgICAgIHsweDgwMGEsIDI0N30sCisgICAgICAgIHsweDgwMGYsIDI0N30sCisgICAgICAgIHsweDgwMTgsIDI0N30sCisgICAgICAgIHsweDgwMWYsIDI0N30sCisgICAgICAgIHsweDgwMjksIDI0N30sCisgICAgICAgIHsweGMwMzgsIDI0N30sCisgICAgICAgIHsweDgwMDMsIDI0OH0sCisgICAgICAgIHsweDgwMDYsIDI0OH0sCisgICAgICAgIHsweDgwMGEsIDI0OH0sCisgICAgICAgIHsweDgwMGYsIDI0OH0sCisgICAgICAgIHsweDgwMTgsIDI0OH0sCisgICAgICAgIHsweDgwMWYsIDI0OH0sCisgICAgICAgIHsweDgwMjksIDI0OH0sCisgICAgICAgIHsweGMwMzgsIDI0OH0sCisgICAgfSwKKyAgICAvKiAyMjAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDI1MH0sCisgICAgICAgIHsweDgwMDksIDI1MH0sCisgICAgICAgIHsweDgwMTcsIDI1MH0sCisgICAgICAgIHsweGMwMjgsIDI1MH0sCisgICAgICAgIHsweDgwMDIsIDI1MX0sCisgICAgICAgIHsweDgwMDksIDI1MX0sCisgICAgICAgIHsweDgwMTcsIDI1MX0sCisgICAgICAgIHsweGMwMjgsIDI1MX0sCisgICAgICAgIHsweDgwMDIsIDI1Mn0sCisgICAgICAgIHsweDgwMDksIDI1Mn0sCisgICAgICAgIHsweDgwMTcsIDI1Mn0sCisgICAgICAgIHsweGMwMjgsIDI1Mn0sCisgICAgICAgIHsweDgwMDIsIDI1M30sCisgICAgICAgIHsweDgwMDksIDI1M30sCisgICAgICAgIHsweDgwMTcsIDI1M30sCisgICAgICAgIHsweGMwMjgsIDI1M30sCisgICAgfSwKKyAgICAvKiAyMjEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI1MH0sCisgICAgICAgIHsweDgwMDYsIDI1MH0sCisgICAgICAgIHsweDgwMGEsIDI1MH0sCisgICAgICAgIHsweDgwMGYsIDI1MH0sCisgICAgICAgIHsweDgwMTgsIDI1MH0sCisgICAgICAgIHsweDgwMWYsIDI1MH0sCisgICAgICAgIHsweDgwMjksIDI1MH0sCisgICAgICAgIHsweGMwMzgsIDI1MH0sCisgICAgICAgIHsweDgwMDMsIDI1MX0sCisgICAgICAgIHsweDgwMDYsIDI1MX0sCisgICAgICAgIHsweDgwMGEsIDI1MX0sCisgICAgICAgIHsweDgwMGYsIDI1MX0sCisgICAgICAgIHsweDgwMTgsIDI1MX0sCisgICAgICAgIHsweDgwMWYsIDI1MX0sCisgICAgICAgIHsweDgwMjksIDI1MX0sCisgICAgICAgIHsweGMwMzgsIDI1MX0sCisgICAgfSwKKyAgICAvKiAyMjIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI1Mn0sCisgICAgICAgIHsweDgwMDYsIDI1Mn0sCisgICAgICAgIHsweDgwMGEsIDI1Mn0sCisgICAgICAgIHsweDgwMGYsIDI1Mn0sCisgICAgICAgIHsweDgwMTgsIDI1Mn0sCisgICAgICAgIHsweDgwMWYsIDI1Mn0sCisgICAgICAgIHsweDgwMjksIDI1Mn0sCisgICAgICAgIHsweGMwMzgsIDI1Mn0sCisgICAgICAgIHsweDgwMDMsIDI1M30sCisgICAgICAgIHsweDgwMDYsIDI1M30sCisgICAgICAgIHsweDgwMGEsIDI1M30sCisgICAgICAgIHsweDgwMGYsIDI1M30sCisgICAgICAgIHsweDgwMTgsIDI1M30sCisgICAgICAgIHsweDgwMWYsIDI1M30sCisgICAgICAgIHsweDgwMjksIDI1M30sCisgICAgICAgIHsweGMwMzgsIDI1M30sCisgICAgfSwKKyAgICAvKiAyMjMgKi8KKyAgICB7CisgICAgICAgIHsweGMwMDAsIDI1NH0sCisgICAgICAgIHsweGUzLCAwfSwKKyAgICAgICAgezB4ZTUsIDB9LAorICAgICAgICB7MHhlNiwgMH0sCisgICAgICAgIHsweGU5LCAwfSwKKyAgICAgICAgezB4ZWEsIDB9LAorICAgICAgICB7MHhlYywgMH0sCisgICAgICAgIHsweGVkLCAwfSwKKyAgICAgICAgezB4ZjEsIDB9LAorICAgICAgICB7MHhmMiwgMH0sCisgICAgICAgIHsweGY0LCAwfSwKKyAgICAgICAgezB4ZjUsIDB9LAorICAgICAgICB7MHhmOCwgMH0sCisgICAgICAgIHsweGY5LCAwfSwKKyAgICAgICAgezB4ZmIsIDB9LAorICAgICAgICB7MHhmYywgMH0sCisgICAgfSwKKyAgICAvKiAyMjQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDI1NH0sCisgICAgICAgIHsweGMwMTYsIDI1NH0sCisgICAgICAgIHsweGMwMDAsIDJ9LAorICAgICAgICB7MHhjMDAwLCAzfSwKKyAgICAgICAgezB4YzAwMCwgNH0sCisgICAgICAgIHsweGMwMDAsIDV9LAorICAgICAgICB7MHhjMDAwLCA2fSwKKyAgICAgICAgezB4YzAwMCwgN30sCisgICAgICAgIHsweGMwMDAsIDh9LAorICAgICAgICB7MHhjMDAwLCAxMX0sCisgICAgICAgIHsweGMwMDAsIDEyfSwKKyAgICAgICAgezB4YzAwMCwgMTR9LAorICAgICAgICB7MHhjMDAwLCAxNX0sCisgICAgICAgIHsweGMwMDAsIDE2fSwKKyAgICAgICAgezB4YzAwMCwgMTd9LAorICAgICAgICB7MHhjMDAwLCAxOH0sCisgICAgfSwKKyAgICAvKiAyMjUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDI1NH0sCisgICAgICAgIHsweDgwMDksIDI1NH0sCisgICAgICAgIHsweDgwMTcsIDI1NH0sCisgICAgICAgIHsweGMwMjgsIDI1NH0sCisgICAgICAgIHsweDgwMDEsIDJ9LAorICAgICAgICB7MHhjMDE2LCAyfSwKKyAgICAgICAgezB4ODAwMSwgM30sCisgICAgICAgIHsweGMwMTYsIDN9LAorICAgICAgICB7MHg4MDAxLCA0fSwKKyAgICAgICAgezB4YzAxNiwgNH0sCisgICAgICAgIHsweDgwMDEsIDV9LAorICAgICAgICB7MHhjMDE2LCA1fSwKKyAgICAgICAgezB4ODAwMSwgNn0sCisgICAgICAgIHsweGMwMTYsIDZ9LAorICAgICAgICB7MHg4MDAxLCA3fSwKKyAgICAgICAgezB4YzAxNiwgN30sCisgICAgfSwKKyAgICAvKiAyMjYgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI1NH0sCisgICAgICAgIHsweDgwMDYsIDI1NH0sCisgICAgICAgIHsweDgwMGEsIDI1NH0sCisgICAgICAgIHsweDgwMGYsIDI1NH0sCisgICAgICAgIHsweDgwMTgsIDI1NH0sCisgICAgICAgIHsweDgwMWYsIDI1NH0sCisgICAgICAgIHsweDgwMjksIDI1NH0sCisgICAgICAgIHsweGMwMzgsIDI1NH0sCisgICAgICAgIHsweDgwMDIsIDJ9LAorICAgICAgICB7MHg4MDA5LCAyfSwKKyAgICAgICAgezB4ODAxNywgMn0sCisgICAgICAgIHsweGMwMjgsIDJ9LAorICAgICAgICB7MHg4MDAyLCAzfSwKKyAgICAgICAgezB4ODAwOSwgM30sCisgICAgICAgIHsweDgwMTcsIDN9LAorICAgICAgICB7MHhjMDI4LCAzfSwKKyAgICB9LAorICAgIC8qIDIyNyAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMn0sCisgICAgICAgIHsweDgwMDYsIDJ9LAorICAgICAgICB7MHg4MDBhLCAyfSwKKyAgICAgICAgezB4ODAwZiwgMn0sCisgICAgICAgIHsweDgwMTgsIDJ9LAorICAgICAgICB7MHg4MDFmLCAyfSwKKyAgICAgICAgezB4ODAyOSwgMn0sCisgICAgICAgIHsweGMwMzgsIDJ9LAorICAgICAgICB7MHg4MDAzLCAzfSwKKyAgICAgICAgezB4ODAwNiwgM30sCisgICAgICAgIHsweDgwMGEsIDN9LAorICAgICAgICB7MHg4MDBmLCAzfSwKKyAgICAgICAgezB4ODAxOCwgM30sCisgICAgICAgIHsweDgwMWYsIDN9LAorICAgICAgICB7MHg4MDI5LCAzfSwKKyAgICAgICAgezB4YzAzOCwgM30sCisgICAgfSwKKyAgICAvKiAyMjggKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDR9LAorICAgICAgICB7MHg4MDA5LCA0fSwKKyAgICAgICAgezB4ODAxNywgNH0sCisgICAgICAgIHsweGMwMjgsIDR9LAorICAgICAgICB7MHg4MDAyLCA1fSwKKyAgICAgICAgezB4ODAwOSwgNX0sCisgICAgICAgIHsweDgwMTcsIDV9LAorICAgICAgICB7MHhjMDI4LCA1fSwKKyAgICAgICAgezB4ODAwMiwgNn0sCisgICAgICAgIHsweDgwMDksIDZ9LAorICAgICAgICB7MHg4MDE3LCA2fSwKKyAgICAgICAgezB4YzAyOCwgNn0sCisgICAgICAgIHsweDgwMDIsIDd9LAorICAgICAgICB7MHg4MDA5LCA3fSwKKyAgICAgICAgezB4ODAxNywgN30sCisgICAgICAgIHsweGMwMjgsIDd9LAorICAgIH0sCisgICAgLyogMjI5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA0fSwKKyAgICAgICAgezB4ODAwNiwgNH0sCisgICAgICAgIHsweDgwMGEsIDR9LAorICAgICAgICB7MHg4MDBmLCA0fSwKKyAgICAgICAgezB4ODAxOCwgNH0sCisgICAgICAgIHsweDgwMWYsIDR9LAorICAgICAgICB7MHg4MDI5LCA0fSwKKyAgICAgICAgezB4YzAzOCwgNH0sCisgICAgICAgIHsweDgwMDMsIDV9LAorICAgICAgICB7MHg4MDA2LCA1fSwKKyAgICAgICAgezB4ODAwYSwgNX0sCisgICAgICAgIHsweDgwMGYsIDV9LAorICAgICAgICB7MHg4MDE4LCA1fSwKKyAgICAgICAgezB4ODAxZiwgNX0sCisgICAgICAgIHsweDgwMjksIDV9LAorICAgICAgICB7MHhjMDM4LCA1fSwKKyAgICB9LAorICAgIC8qIDIzMCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgNn0sCisgICAgICAgIHsweDgwMDYsIDZ9LAorICAgICAgICB7MHg4MDBhLCA2fSwKKyAgICAgICAgezB4ODAwZiwgNn0sCisgICAgICAgIHsweDgwMTgsIDZ9LAorICAgICAgICB7MHg4MDFmLCA2fSwKKyAgICAgICAgezB4ODAyOSwgNn0sCisgICAgICAgIHsweGMwMzgsIDZ9LAorICAgICAgICB7MHg4MDAzLCA3fSwKKyAgICAgICAgezB4ODAwNiwgN30sCisgICAgICAgIHsweDgwMGEsIDd9LAorICAgICAgICB7MHg4MDBmLCA3fSwKKyAgICAgICAgezB4ODAxOCwgN30sCisgICAgICAgIHsweDgwMWYsIDd9LAorICAgICAgICB7MHg4MDI5LCA3fSwKKyAgICAgICAgezB4YzAzOCwgN30sCisgICAgfSwKKyAgICAvKiAyMzEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDEsIDh9LAorICAgICAgICB7MHhjMDE2LCA4fSwKKyAgICAgICAgezB4ODAwMSwgMTF9LAorICAgICAgICB7MHhjMDE2LCAxMX0sCisgICAgICAgIHsweDgwMDEsIDEyfSwKKyAgICAgICAgezB4YzAxNiwgMTJ9LAorICAgICAgICB7MHg4MDAxLCAxNH0sCisgICAgICAgIHsweGMwMTYsIDE0fSwKKyAgICAgICAgezB4ODAwMSwgMTV9LAorICAgICAgICB7MHhjMDE2LCAxNX0sCisgICAgICAgIHsweDgwMDEsIDE2fSwKKyAgICAgICAgezB4YzAxNiwgMTZ9LAorICAgICAgICB7MHg4MDAxLCAxN30sCisgICAgICAgIHsweGMwMTYsIDE3fSwKKyAgICAgICAgezB4ODAwMSwgMTh9LAorICAgICAgICB7MHhjMDE2LCAxOH0sCisgICAgfSwKKyAgICAvKiAyMzIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDh9LAorICAgICAgICB7MHg4MDA5LCA4fSwKKyAgICAgICAgezB4ODAxNywgOH0sCisgICAgICAgIHsweGMwMjgsIDh9LAorICAgICAgICB7MHg4MDAyLCAxMX0sCisgICAgICAgIHsweDgwMDksIDExfSwKKyAgICAgICAgezB4ODAxNywgMTF9LAorICAgICAgICB7MHhjMDI4LCAxMX0sCisgICAgICAgIHsweDgwMDIsIDEyfSwKKyAgICAgICAgezB4ODAwOSwgMTJ9LAorICAgICAgICB7MHg4MDE3LCAxMn0sCisgICAgICAgIHsweGMwMjgsIDEyfSwKKyAgICAgICAgezB4ODAwMiwgMTR9LAorICAgICAgICB7MHg4MDA5LCAxNH0sCisgICAgICAgIHsweDgwMTcsIDE0fSwKKyAgICAgICAgezB4YzAyOCwgMTR9LAorICAgIH0sCisgICAgLyogMjMzICovCisgICAgeworICAgICAgICB7MHg4MDAzLCA4fSwKKyAgICAgICAgezB4ODAwNiwgOH0sCisgICAgICAgIHsweDgwMGEsIDh9LAorICAgICAgICB7MHg4MDBmLCA4fSwKKyAgICAgICAgezB4ODAxOCwgOH0sCisgICAgICAgIHsweDgwMWYsIDh9LAorICAgICAgICB7MHg4MDI5LCA4fSwKKyAgICAgICAgezB4YzAzOCwgOH0sCisgICAgICAgIHsweDgwMDMsIDExfSwKKyAgICAgICAgezB4ODAwNiwgMTF9LAorICAgICAgICB7MHg4MDBhLCAxMX0sCisgICAgICAgIHsweDgwMGYsIDExfSwKKyAgICAgICAgezB4ODAxOCwgMTF9LAorICAgICAgICB7MHg4MDFmLCAxMX0sCisgICAgICAgIHsweDgwMjksIDExfSwKKyAgICAgICAgezB4YzAzOCwgMTF9LAorICAgIH0sCisgICAgLyogMjM0ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxMn0sCisgICAgICAgIHsweDgwMDYsIDEyfSwKKyAgICAgICAgezB4ODAwYSwgMTJ9LAorICAgICAgICB7MHg4MDBmLCAxMn0sCisgICAgICAgIHsweDgwMTgsIDEyfSwKKyAgICAgICAgezB4ODAxZiwgMTJ9LAorICAgICAgICB7MHg4MDI5LCAxMn0sCisgICAgICAgIHsweGMwMzgsIDEyfSwKKyAgICAgICAgezB4ODAwMywgMTR9LAorICAgICAgICB7MHg4MDA2LCAxNH0sCisgICAgICAgIHsweDgwMGEsIDE0fSwKKyAgICAgICAgezB4ODAwZiwgMTR9LAorICAgICAgICB7MHg4MDE4LCAxNH0sCisgICAgICAgIHsweDgwMWYsIDE0fSwKKyAgICAgICAgezB4ODAyOSwgMTR9LAorICAgICAgICB7MHhjMDM4LCAxNH0sCisgICAgfSwKKyAgICAvKiAyMzUgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDE1fSwKKyAgICAgICAgezB4ODAwOSwgMTV9LAorICAgICAgICB7MHg4MDE3LCAxNX0sCisgICAgICAgIHsweGMwMjgsIDE1fSwKKyAgICAgICAgezB4ODAwMiwgMTZ9LAorICAgICAgICB7MHg4MDA5LCAxNn0sCisgICAgICAgIHsweDgwMTcsIDE2fSwKKyAgICAgICAgezB4YzAyOCwgMTZ9LAorICAgICAgICB7MHg4MDAyLCAxN30sCisgICAgICAgIHsweDgwMDksIDE3fSwKKyAgICAgICAgezB4ODAxNywgMTd9LAorICAgICAgICB7MHhjMDI4LCAxN30sCisgICAgICAgIHsweDgwMDIsIDE4fSwKKyAgICAgICAgezB4ODAwOSwgMTh9LAorICAgICAgICB7MHg4MDE3LCAxOH0sCisgICAgICAgIHsweGMwMjgsIDE4fSwKKyAgICB9LAorICAgIC8qIDIzNiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMTV9LAorICAgICAgICB7MHg4MDA2LCAxNX0sCisgICAgICAgIHsweDgwMGEsIDE1fSwKKyAgICAgICAgezB4ODAwZiwgMTV9LAorICAgICAgICB7MHg4MDE4LCAxNX0sCisgICAgICAgIHsweDgwMWYsIDE1fSwKKyAgICAgICAgezB4ODAyOSwgMTV9LAorICAgICAgICB7MHhjMDM4LCAxNX0sCisgICAgICAgIHsweDgwMDMsIDE2fSwKKyAgICAgICAgezB4ODAwNiwgMTZ9LAorICAgICAgICB7MHg4MDBhLCAxNn0sCisgICAgICAgIHsweDgwMGYsIDE2fSwKKyAgICAgICAgezB4ODAxOCwgMTZ9LAorICAgICAgICB7MHg4MDFmLCAxNn0sCisgICAgICAgIHsweDgwMjksIDE2fSwKKyAgICAgICAgezB4YzAzOCwgMTZ9LAorICAgIH0sCisgICAgLyogMjM3ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAxN30sCisgICAgICAgIHsweDgwMDYsIDE3fSwKKyAgICAgICAgezB4ODAwYSwgMTd9LAorICAgICAgICB7MHg4MDBmLCAxN30sCisgICAgICAgIHsweDgwMTgsIDE3fSwKKyAgICAgICAgezB4ODAxZiwgMTd9LAorICAgICAgICB7MHg4MDI5LCAxN30sCisgICAgICAgIHsweGMwMzgsIDE3fSwKKyAgICAgICAgezB4ODAwMywgMTh9LAorICAgICAgICB7MHg4MDA2LCAxOH0sCisgICAgICAgIHsweDgwMGEsIDE4fSwKKyAgICAgICAgezB4ODAwZiwgMTh9LAorICAgICAgICB7MHg4MDE4LCAxOH0sCisgICAgICAgIHsweDgwMWYsIDE4fSwKKyAgICAgICAgezB4ODAyOSwgMTh9LAorICAgICAgICB7MHhjMDM4LCAxOH0sCisgICAgfSwKKyAgICAvKiAyMzggKi8KKyAgICB7CisgICAgICAgIHsweGMwMDAsIDE5fSwKKyAgICAgICAgezB4YzAwMCwgMjB9LAorICAgICAgICB7MHhjMDAwLCAyMX0sCisgICAgICAgIHsweGMwMDAsIDIzfSwKKyAgICAgICAgezB4YzAwMCwgMjR9LAorICAgICAgICB7MHhjMDAwLCAyNX0sCisgICAgICAgIHsweGMwMDAsIDI2fSwKKyAgICAgICAgezB4YzAwMCwgMjd9LAorICAgICAgICB7MHhjMDAwLCAyOH0sCisgICAgICAgIHsweGMwMDAsIDI5fSwKKyAgICAgICAgezB4YzAwMCwgMzB9LAorICAgICAgICB7MHhjMDAwLCAzMX0sCisgICAgICAgIHsweGMwMDAsIDEyN30sCisgICAgICAgIHsweGMwMDAsIDIyMH0sCisgICAgICAgIHsweGMwMDAsIDI0OX0sCisgICAgICAgIHsweGZkLCAwfSwKKyAgICB9LAorICAgIC8qIDIzOSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMSwgMTl9LAorICAgICAgICB7MHhjMDE2LCAxOX0sCisgICAgICAgIHsweDgwMDEsIDIwfSwKKyAgICAgICAgezB4YzAxNiwgMjB9LAorICAgICAgICB7MHg4MDAxLCAyMX0sCisgICAgICAgIHsweGMwMTYsIDIxfSwKKyAgICAgICAgezB4ODAwMSwgMjN9LAorICAgICAgICB7MHhjMDE2LCAyM30sCisgICAgICAgIHsweDgwMDEsIDI0fSwKKyAgICAgICAgezB4YzAxNiwgMjR9LAorICAgICAgICB7MHg4MDAxLCAyNX0sCisgICAgICAgIHsweGMwMTYsIDI1fSwKKyAgICAgICAgezB4ODAwMSwgMjZ9LAorICAgICAgICB7MHhjMDE2LCAyNn0sCisgICAgICAgIHsweDgwMDEsIDI3fSwKKyAgICAgICAgezB4YzAxNiwgMjd9LAorICAgIH0sCisgICAgLyogMjQwICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAxOX0sCisgICAgICAgIHsweDgwMDksIDE5fSwKKyAgICAgICAgezB4ODAxNywgMTl9LAorICAgICAgICB7MHhjMDI4LCAxOX0sCisgICAgICAgIHsweDgwMDIsIDIwfSwKKyAgICAgICAgezB4ODAwOSwgMjB9LAorICAgICAgICB7MHg4MDE3LCAyMH0sCisgICAgICAgIHsweGMwMjgsIDIwfSwKKyAgICAgICAgezB4ODAwMiwgMjF9LAorICAgICAgICB7MHg4MDA5LCAyMX0sCisgICAgICAgIHsweDgwMTcsIDIxfSwKKyAgICAgICAgezB4YzAyOCwgMjF9LAorICAgICAgICB7MHg4MDAyLCAyM30sCisgICAgICAgIHsweDgwMDksIDIzfSwKKyAgICAgICAgezB4ODAxNywgMjN9LAorICAgICAgICB7MHhjMDI4LCAyM30sCisgICAgfSwKKyAgICAvKiAyNDEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDE5fSwKKyAgICAgICAgezB4ODAwNiwgMTl9LAorICAgICAgICB7MHg4MDBhLCAxOX0sCisgICAgICAgIHsweDgwMGYsIDE5fSwKKyAgICAgICAgezB4ODAxOCwgMTl9LAorICAgICAgICB7MHg4MDFmLCAxOX0sCisgICAgICAgIHsweDgwMjksIDE5fSwKKyAgICAgICAgezB4YzAzOCwgMTl9LAorICAgICAgICB7MHg4MDAzLCAyMH0sCisgICAgICAgIHsweDgwMDYsIDIwfSwKKyAgICAgICAgezB4ODAwYSwgMjB9LAorICAgICAgICB7MHg4MDBmLCAyMH0sCisgICAgICAgIHsweDgwMTgsIDIwfSwKKyAgICAgICAgezB4ODAxZiwgMjB9LAorICAgICAgICB7MHg4MDI5LCAyMH0sCisgICAgICAgIHsweGMwMzgsIDIwfSwKKyAgICB9LAorICAgIC8qIDI0MiAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjF9LAorICAgICAgICB7MHg4MDA2LCAyMX0sCisgICAgICAgIHsweDgwMGEsIDIxfSwKKyAgICAgICAgezB4ODAwZiwgMjF9LAorICAgICAgICB7MHg4MDE4LCAyMX0sCisgICAgICAgIHsweDgwMWYsIDIxfSwKKyAgICAgICAgezB4ODAyOSwgMjF9LAorICAgICAgICB7MHhjMDM4LCAyMX0sCisgICAgICAgIHsweDgwMDMsIDIzfSwKKyAgICAgICAgezB4ODAwNiwgMjN9LAorICAgICAgICB7MHg4MDBhLCAyM30sCisgICAgICAgIHsweDgwMGYsIDIzfSwKKyAgICAgICAgezB4ODAxOCwgMjN9LAorICAgICAgICB7MHg4MDFmLCAyM30sCisgICAgICAgIHsweDgwMjksIDIzfSwKKyAgICAgICAgezB4YzAzOCwgMjN9LAorICAgIH0sCisgICAgLyogMjQzICovCisgICAgeworICAgICAgICB7MHg4MDAyLCAyNH0sCisgICAgICAgIHsweDgwMDksIDI0fSwKKyAgICAgICAgezB4ODAxNywgMjR9LAorICAgICAgICB7MHhjMDI4LCAyNH0sCisgICAgICAgIHsweDgwMDIsIDI1fSwKKyAgICAgICAgezB4ODAwOSwgMjV9LAorICAgICAgICB7MHg4MDE3LCAyNX0sCisgICAgICAgIHsweGMwMjgsIDI1fSwKKyAgICAgICAgezB4ODAwMiwgMjZ9LAorICAgICAgICB7MHg4MDA5LCAyNn0sCisgICAgICAgIHsweDgwMTcsIDI2fSwKKyAgICAgICAgezB4YzAyOCwgMjZ9LAorICAgICAgICB7MHg4MDAyLCAyN30sCisgICAgICAgIHsweDgwMDksIDI3fSwKKyAgICAgICAgezB4ODAxNywgMjd9LAorICAgICAgICB7MHhjMDI4LCAyN30sCisgICAgfSwKKyAgICAvKiAyNDQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI0fSwKKyAgICAgICAgezB4ODAwNiwgMjR9LAorICAgICAgICB7MHg4MDBhLCAyNH0sCisgICAgICAgIHsweDgwMGYsIDI0fSwKKyAgICAgICAgezB4ODAxOCwgMjR9LAorICAgICAgICB7MHg4MDFmLCAyNH0sCisgICAgICAgIHsweDgwMjksIDI0fSwKKyAgICAgICAgezB4YzAzOCwgMjR9LAorICAgICAgICB7MHg4MDAzLCAyNX0sCisgICAgICAgIHsweDgwMDYsIDI1fSwKKyAgICAgICAgezB4ODAwYSwgMjV9LAorICAgICAgICB7MHg4MDBmLCAyNX0sCisgICAgICAgIHsweDgwMTgsIDI1fSwKKyAgICAgICAgezB4ODAxZiwgMjV9LAorICAgICAgICB7MHg4MDI5LCAyNX0sCisgICAgICAgIHsweGMwMzgsIDI1fSwKKyAgICB9LAorICAgIC8qIDI0NSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjZ9LAorICAgICAgICB7MHg4MDA2LCAyNn0sCisgICAgICAgIHsweDgwMGEsIDI2fSwKKyAgICAgICAgezB4ODAwZiwgMjZ9LAorICAgICAgICB7MHg4MDE4LCAyNn0sCisgICAgICAgIHsweDgwMWYsIDI2fSwKKyAgICAgICAgezB4ODAyOSwgMjZ9LAorICAgICAgICB7MHhjMDM4LCAyNn0sCisgICAgICAgIHsweDgwMDMsIDI3fSwKKyAgICAgICAgezB4ODAwNiwgMjd9LAorICAgICAgICB7MHg4MDBhLCAyN30sCisgICAgICAgIHsweDgwMGYsIDI3fSwKKyAgICAgICAgezB4ODAxOCwgMjd9LAorICAgICAgICB7MHg4MDFmLCAyN30sCisgICAgICAgIHsweDgwMjksIDI3fSwKKyAgICAgICAgezB4YzAzOCwgMjd9LAorICAgIH0sCisgICAgLyogMjQ2ICovCisgICAgeworICAgICAgICB7MHg4MDAxLCAyOH0sCisgICAgICAgIHsweGMwMTYsIDI4fSwKKyAgICAgICAgezB4ODAwMSwgMjl9LAorICAgICAgICB7MHhjMDE2LCAyOX0sCisgICAgICAgIHsweDgwMDEsIDMwfSwKKyAgICAgICAgezB4YzAxNiwgMzB9LAorICAgICAgICB7MHg4MDAxLCAzMX0sCisgICAgICAgIHsweGMwMTYsIDMxfSwKKyAgICAgICAgezB4ODAwMSwgMTI3fSwKKyAgICAgICAgezB4YzAxNiwgMTI3fSwKKyAgICAgICAgezB4ODAwMSwgMjIwfSwKKyAgICAgICAgezB4YzAxNiwgMjIwfSwKKyAgICAgICAgezB4ODAwMSwgMjQ5fSwKKyAgICAgICAgezB4YzAxNiwgMjQ5fSwKKyAgICAgICAgezB4ZmUsIDB9LAorICAgICAgICB7MHhmZiwgMH0sCisgICAgfSwKKyAgICAvKiAyNDcgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDI4fSwKKyAgICAgICAgezB4ODAwOSwgMjh9LAorICAgICAgICB7MHg4MDE3LCAyOH0sCisgICAgICAgIHsweGMwMjgsIDI4fSwKKyAgICAgICAgezB4ODAwMiwgMjl9LAorICAgICAgICB7MHg4MDA5LCAyOX0sCisgICAgICAgIHsweDgwMTcsIDI5fSwKKyAgICAgICAgezB4YzAyOCwgMjl9LAorICAgICAgICB7MHg4MDAyLCAzMH0sCisgICAgICAgIHsweDgwMDksIDMwfSwKKyAgICAgICAgezB4ODAxNywgMzB9LAorICAgICAgICB7MHhjMDI4LCAzMH0sCisgICAgICAgIHsweDgwMDIsIDMxfSwKKyAgICAgICAgezB4ODAwOSwgMzF9LAorICAgICAgICB7MHg4MDE3LCAzMX0sCisgICAgICAgIHsweGMwMjgsIDMxfSwKKyAgICB9LAorICAgIC8qIDI0OCAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjh9LAorICAgICAgICB7MHg4MDA2LCAyOH0sCisgICAgICAgIHsweDgwMGEsIDI4fSwKKyAgICAgICAgezB4ODAwZiwgMjh9LAorICAgICAgICB7MHg4MDE4LCAyOH0sCisgICAgICAgIHsweDgwMWYsIDI4fSwKKyAgICAgICAgezB4ODAyOSwgMjh9LAorICAgICAgICB7MHhjMDM4LCAyOH0sCisgICAgICAgIHsweDgwMDMsIDI5fSwKKyAgICAgICAgezB4ODAwNiwgMjl9LAorICAgICAgICB7MHg4MDBhLCAyOX0sCisgICAgICAgIHsweDgwMGYsIDI5fSwKKyAgICAgICAgezB4ODAxOCwgMjl9LAorICAgICAgICB7MHg4MDFmLCAyOX0sCisgICAgICAgIHsweDgwMjksIDI5fSwKKyAgICAgICAgezB4YzAzOCwgMjl9LAorICAgIH0sCisgICAgLyogMjQ5ICovCisgICAgeworICAgICAgICB7MHg4MDAzLCAzMH0sCisgICAgICAgIHsweDgwMDYsIDMwfSwKKyAgICAgICAgezB4ODAwYSwgMzB9LAorICAgICAgICB7MHg4MDBmLCAzMH0sCisgICAgICAgIHsweDgwMTgsIDMwfSwKKyAgICAgICAgezB4ODAxZiwgMzB9LAorICAgICAgICB7MHg4MDI5LCAzMH0sCisgICAgICAgIHsweGMwMzgsIDMwfSwKKyAgICAgICAgezB4ODAwMywgMzF9LAorICAgICAgICB7MHg4MDA2LCAzMX0sCisgICAgICAgIHsweDgwMGEsIDMxfSwKKyAgICAgICAgezB4ODAwZiwgMzF9LAorICAgICAgICB7MHg4MDE4LCAzMX0sCisgICAgICAgIHsweDgwMWYsIDMxfSwKKyAgICAgICAgezB4ODAyOSwgMzF9LAorICAgICAgICB7MHhjMDM4LCAzMX0sCisgICAgfSwKKyAgICAvKiAyNTAgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDEyN30sCisgICAgICAgIHsweDgwMDksIDEyN30sCisgICAgICAgIHsweDgwMTcsIDEyN30sCisgICAgICAgIHsweGMwMjgsIDEyN30sCisgICAgICAgIHsweDgwMDIsIDIyMH0sCisgICAgICAgIHsweDgwMDksIDIyMH0sCisgICAgICAgIHsweDgwMTcsIDIyMH0sCisgICAgICAgIHsweGMwMjgsIDIyMH0sCisgICAgICAgIHsweDgwMDIsIDI0OX0sCisgICAgICAgIHsweDgwMDksIDI0OX0sCisgICAgICAgIHsweDgwMTcsIDI0OX0sCisgICAgICAgIHsweGMwMjgsIDI0OX0sCisgICAgICAgIHsweGMwMDAsIDEwfSwKKyAgICAgICAgezB4YzAwMCwgMTN9LAorICAgICAgICB7MHhjMDAwLCAyMn0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgfSwKKyAgICAvKiAyNTEgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEyN30sCisgICAgICAgIHsweDgwMDYsIDEyN30sCisgICAgICAgIHsweDgwMGEsIDEyN30sCisgICAgICAgIHsweDgwMGYsIDEyN30sCisgICAgICAgIHsweDgwMTgsIDEyN30sCisgICAgICAgIHsweDgwMWYsIDEyN30sCisgICAgICAgIHsweDgwMjksIDEyN30sCisgICAgICAgIHsweGMwMzgsIDEyN30sCisgICAgICAgIHsweDgwMDMsIDIyMH0sCisgICAgICAgIHsweDgwMDYsIDIyMH0sCisgICAgICAgIHsweDgwMGEsIDIyMH0sCisgICAgICAgIHsweDgwMGYsIDIyMH0sCisgICAgICAgIHsweDgwMTgsIDIyMH0sCisgICAgICAgIHsweDgwMWYsIDIyMH0sCisgICAgICAgIHsweDgwMjksIDIyMH0sCisgICAgICAgIHsweGMwMzgsIDIyMH0sCisgICAgfSwKKyAgICAvKiAyNTIgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDI0OX0sCisgICAgICAgIHsweDgwMDYsIDI0OX0sCisgICAgICAgIHsweDgwMGEsIDI0OX0sCisgICAgICAgIHsweDgwMGYsIDI0OX0sCisgICAgICAgIHsweDgwMTgsIDI0OX0sCisgICAgICAgIHsweDgwMWYsIDI0OX0sCisgICAgICAgIHsweDgwMjksIDI0OX0sCisgICAgICAgIHsweGMwMzgsIDI0OX0sCisgICAgICAgIHsweDgwMDEsIDEwfSwKKyAgICAgICAgezB4YzAxNiwgMTB9LAorICAgICAgICB7MHg4MDAxLCAxM30sCisgICAgICAgIHsweGMwMTYsIDEzfSwKKyAgICAgICAgezB4ODAwMSwgMjJ9LAorICAgICAgICB7MHhjMDE2LCAyMn0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgfSwKKyAgICAvKiAyNTMgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDIsIDEwfSwKKyAgICAgICAgezB4ODAwOSwgMTB9LAorICAgICAgICB7MHg4MDE3LCAxMH0sCisgICAgICAgIHsweGMwMjgsIDEwfSwKKyAgICAgICAgezB4ODAwMiwgMTN9LAorICAgICAgICB7MHg4MDA5LCAxM30sCisgICAgICAgIHsweDgwMTcsIDEzfSwKKyAgICAgICAgezB4YzAyOCwgMTN9LAorICAgICAgICB7MHg4MDAyLCAyMn0sCisgICAgICAgIHsweDgwMDksIDIyfSwKKyAgICAgICAgezB4ODAxNywgMjJ9LAorICAgICAgICB7MHhjMDI4LCAyMn0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgfSwKKyAgICAvKiAyNTQgKi8KKyAgICB7CisgICAgICAgIHsweDgwMDMsIDEwfSwKKyAgICAgICAgezB4ODAwNiwgMTB9LAorICAgICAgICB7MHg4MDBhLCAxMH0sCisgICAgICAgIHsweDgwMGYsIDEwfSwKKyAgICAgICAgezB4ODAxOCwgMTB9LAorICAgICAgICB7MHg4MDFmLCAxMH0sCisgICAgICAgIHsweDgwMjksIDEwfSwKKyAgICAgICAgezB4YzAzOCwgMTB9LAorICAgICAgICB7MHg4MDAzLCAxM30sCisgICAgICAgIHsweDgwMDYsIDEzfSwKKyAgICAgICAgezB4ODAwYSwgMTN9LAorICAgICAgICB7MHg4MDBmLCAxM30sCisgICAgICAgIHsweDgwMTgsIDEzfSwKKyAgICAgICAgezB4ODAxZiwgMTN9LAorICAgICAgICB7MHg4MDI5LCAxM30sCisgICAgICAgIHsweGMwMzgsIDEzfSwKKyAgICB9LAorICAgIC8qIDI1NSAqLworICAgIHsKKyAgICAgICAgezB4ODAwMywgMjJ9LAorICAgICAgICB7MHg4MDA2LCAyMn0sCisgICAgICAgIHsweDgwMGEsIDIyfSwKKyAgICAgICAgezB4ODAwZiwgMjJ9LAorICAgICAgICB7MHg4MDE4LCAyMn0sCisgICAgICAgIHsweDgwMWYsIDIyfSwKKyAgICAgICAgezB4ODAyOSwgMjJ9LAorICAgICAgICB7MHhjMDM4LCAyMn0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgfSwKKyAgICAvKiAyNTYgKi8KKyAgICB7CisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgICAgIHsweDEwMCwgMH0sCisgICAgfSwKK307CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2hlbHBlci5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTEzNmE2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZWxwZXIuYwpAQCAtMCwwICsxLDYyOSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9oZWxwZXIuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibmdodHRwMl9uZXQuaCIKKwordm9pZCBuZ2h0dHAyX3B1dF91aW50MTZiZSh1aW50OF90ICpidWYsIHVpbnQxNl90IG4pIHsKKyAgdWludDE2X3QgeCA9IGh0b25zKG4pOworICBtZW1jcHkoYnVmLCAmeCwgc2l6ZW9mKHVpbnQxNl90KSk7Cit9CisKK3ZvaWQgbmdodHRwMl9wdXRfdWludDMyYmUodWludDhfdCAqYnVmLCB1aW50MzJfdCBuKSB7CisgIHVpbnQzMl90IHggPSBodG9ubChuKTsKKyAgbWVtY3B5KGJ1ZiwgJngsIHNpemVvZih1aW50MzJfdCkpOworfQorCit1aW50MTZfdCBuZ2h0dHAyX2dldF91aW50MTYoY29uc3QgdWludDhfdCAqZGF0YSkgeworICB1aW50MTZfdCBuOworICBtZW1jcHkoJm4sIGRhdGEsIHNpemVvZih1aW50MTZfdCkpOworICByZXR1cm4gbnRvaHMobik7Cit9CisKK3VpbnQzMl90IG5naHR0cDJfZ2V0X3VpbnQzMihjb25zdCB1aW50OF90ICpkYXRhKSB7CisgIHVpbnQzMl90IG47CisgIG1lbWNweSgmbiwgZGF0YSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgIHJldHVybiBudG9obChuKTsKK30KKworLyogR2VuZXJhdGVkIGJ5IGdlbmRvd25jYXNldGJsLnB5ICovCitzdGF0aWMgY29uc3QgdWludDhfdCBET1dOQ0FTRV9UQkxbXSA9IHsKKyAgICAwIC8qIE5VTCAgKi8sICAgMSAvKiBTT0ggICovLCAgIDIgLyogU1RYICAqLywgICAzIC8qIEVUWCAgKi8sCisgICAgNCAvKiBFT1QgICovLCAgIDUgLyogRU5RICAqLywgICA2IC8qIEFDSyAgKi8sICAgNyAvKiBCRUwgICovLAorICAgIDggLyogQlMgICAqLywgICA5IC8qIEhUICAgKi8sICAgMTAgLyogTEYgICAqLywgIDExIC8qIFZUICAgKi8sCisgICAgMTIgLyogRkYgICAqLywgIDEzIC8qIENSICAgKi8sICAxNCAvKiBTTyAgICovLCAgMTUgLyogU0kgICAqLywKKyAgICAxNiAvKiBETEUgICovLCAgMTcgLyogREMxICAqLywgIDE4IC8qIERDMiAgKi8sICAxOSAvKiBEQzMgICovLAorICAgIDIwIC8qIERDNCAgKi8sICAyMSAvKiBOQUsgICovLCAgMjIgLyogU1lOICAqLywgIDIzIC8qIEVUQiAgKi8sCisgICAgMjQgLyogQ0FOICAqLywgIDI1IC8qIEVNICAgKi8sICAyNiAvKiBTVUIgICovLCAgMjcgLyogRVNDICAqLywKKyAgICAyOCAvKiBGUyAgICovLCAgMjkgLyogR1MgICAqLywgIDMwIC8qIFJTICAgKi8sICAzMSAvKiBVUyAgICovLAorICAgIDMyIC8qIFNQQyAgKi8sICAzMyAvKiAhICAgICovLCAgMzQgLyogIiAgICAqLywgIDM1IC8qICMgICAgKi8sCisgICAgMzYgLyogJCAgICAqLywgIDM3IC8qICUgICAgKi8sICAzOCAvKiAmICAgICovLCAgMzkgLyogJyAgICAqLywKKyAgICA0MCAvKiAoICAgICovLCAgNDEgLyogKSAgICAqLywgIDQyIC8qICogICAgKi8sICA0MyAvKiArICAgICovLAorICAgIDQ0IC8qICwgICAgKi8sICA0NSAvKiAtICAgICovLCAgNDYgLyogLiAgICAqLywgIDQ3IC8qIC8gICAgKi8sCisgICAgNDggLyogMCAgICAqLywgIDQ5IC8qIDEgICAgKi8sICA1MCAvKiAyICAgICovLCAgNTEgLyogMyAgICAqLywKKyAgICA1MiAvKiA0ICAgICovLCAgNTMgLyogNSAgICAqLywgIDU0IC8qIDYgICAgKi8sICA1NSAvKiA3ICAgICovLAorICAgIDU2IC8qIDggICAgKi8sICA1NyAvKiA5ICAgICovLCAgNTggLyogOiAgICAqLywgIDU5IC8qIDsgICAgKi8sCisgICAgNjAgLyogPCAgICAqLywgIDYxIC8qID0gICAgKi8sICA2MiAvKiA+ICAgICovLCAgNjMgLyogPyAgICAqLywKKyAgICA2NCAvKiBAICAgICovLCAgOTcgLyogQSAgICAqLywgIDk4IC8qIEIgICAgKi8sICA5OSAvKiBDICAgICovLAorICAgIDEwMCAvKiBEICAgICovLCAxMDEgLyogRSAgICAqLywgMTAyIC8qIEYgICAgKi8sIDEwMyAvKiBHICAgICovLAorICAgIDEwNCAvKiBIICAgICovLCAxMDUgLyogSSAgICAqLywgMTA2IC8qIEogICAgKi8sIDEwNyAvKiBLICAgICovLAorICAgIDEwOCAvKiBMICAgICovLCAxMDkgLyogTSAgICAqLywgMTEwIC8qIE4gICAgKi8sIDExMSAvKiBPICAgICovLAorICAgIDExMiAvKiBQICAgICovLCAxMTMgLyogUSAgICAqLywgMTE0IC8qIFIgICAgKi8sIDExNSAvKiBTICAgICovLAorICAgIDExNiAvKiBUICAgICovLCAxMTcgLyogVSAgICAqLywgMTE4IC8qIFYgICAgKi8sIDExOSAvKiBXICAgICovLAorICAgIDEyMCAvKiBYICAgICovLCAxMjEgLyogWSAgICAqLywgMTIyIC8qIFogICAgKi8sIDkxIC8qIFsgICAgKi8sCisgICAgOTIgLyogXCAgICAqLywgIDkzIC8qIF0gICAgKi8sICA5NCAvKiBeICAgICovLCAgOTUgLyogXyAgICAqLywKKyAgICA5NiAvKiBgICAgICovLCAgOTcgLyogYSAgICAqLywgIDk4IC8qIGIgICAgKi8sICA5OSAvKiBjICAgICovLAorICAgIDEwMCAvKiBkICAgICovLCAxMDEgLyogZSAgICAqLywgMTAyIC8qIGYgICAgKi8sIDEwMyAvKiBnICAgICovLAorICAgIDEwNCAvKiBoICAgICovLCAxMDUgLyogaSAgICAqLywgMTA2IC8qIGogICAgKi8sIDEwNyAvKiBrICAgICovLAorICAgIDEwOCAvKiBsICAgICovLCAxMDkgLyogbSAgICAqLywgMTEwIC8qIG4gICAgKi8sIDExMSAvKiBvICAgICovLAorICAgIDExMiAvKiBwICAgICovLCAxMTMgLyogcSAgICAqLywgMTE0IC8qIHIgICAgKi8sIDExNSAvKiBzICAgICovLAorICAgIDExNiAvKiB0ICAgICovLCAxMTcgLyogdSAgICAqLywgMTE4IC8qIHYgICAgKi8sIDExOSAvKiB3ICAgICovLAorICAgIDEyMCAvKiB4ICAgICovLCAxMjEgLyogeSAgICAqLywgMTIyIC8qIHogICAgKi8sIDEyMyAvKiB7ICAgICovLAorICAgIDEyNCAvKiB8ICAgICovLCAxMjUgLyogfSAgICAqLywgMTI2IC8qIH4gICAgKi8sIDEyNyAvKiBERUwgICovLAorICAgIDEyOCAvKiAweDgwICovLCAxMjkgLyogMHg4MSAqLywgMTMwIC8qIDB4ODIgKi8sIDEzMSAvKiAweDgzICovLAorICAgIDEzMiAvKiAweDg0ICovLCAxMzMgLyogMHg4NSAqLywgMTM0IC8qIDB4ODYgKi8sIDEzNSAvKiAweDg3ICovLAorICAgIDEzNiAvKiAweDg4ICovLCAxMzcgLyogMHg4OSAqLywgMTM4IC8qIDB4OGEgKi8sIDEzOSAvKiAweDhiICovLAorICAgIDE0MCAvKiAweDhjICovLCAxNDEgLyogMHg4ZCAqLywgMTQyIC8qIDB4OGUgKi8sIDE0MyAvKiAweDhmICovLAorICAgIDE0NCAvKiAweDkwICovLCAxNDUgLyogMHg5MSAqLywgMTQ2IC8qIDB4OTIgKi8sIDE0NyAvKiAweDkzICovLAorICAgIDE0OCAvKiAweDk0ICovLCAxNDkgLyogMHg5NSAqLywgMTUwIC8qIDB4OTYgKi8sIDE1MSAvKiAweDk3ICovLAorICAgIDE1MiAvKiAweDk4ICovLCAxNTMgLyogMHg5OSAqLywgMTU0IC8qIDB4OWEgKi8sIDE1NSAvKiAweDliICovLAorICAgIDE1NiAvKiAweDljICovLCAxNTcgLyogMHg5ZCAqLywgMTU4IC8qIDB4OWUgKi8sIDE1OSAvKiAweDlmICovLAorICAgIDE2MCAvKiAweGEwICovLCAxNjEgLyogMHhhMSAqLywgMTYyIC8qIDB4YTIgKi8sIDE2MyAvKiAweGEzICovLAorICAgIDE2NCAvKiAweGE0ICovLCAxNjUgLyogMHhhNSAqLywgMTY2IC8qIDB4YTYgKi8sIDE2NyAvKiAweGE3ICovLAorICAgIDE2OCAvKiAweGE4ICovLCAxNjkgLyogMHhhOSAqLywgMTcwIC8qIDB4YWEgKi8sIDE3MSAvKiAweGFiICovLAorICAgIDE3MiAvKiAweGFjICovLCAxNzMgLyogMHhhZCAqLywgMTc0IC8qIDB4YWUgKi8sIDE3NSAvKiAweGFmICovLAorICAgIDE3NiAvKiAweGIwICovLCAxNzcgLyogMHhiMSAqLywgMTc4IC8qIDB4YjIgKi8sIDE3OSAvKiAweGIzICovLAorICAgIDE4MCAvKiAweGI0ICovLCAxODEgLyogMHhiNSAqLywgMTgyIC8qIDB4YjYgKi8sIDE4MyAvKiAweGI3ICovLAorICAgIDE4NCAvKiAweGI4ICovLCAxODUgLyogMHhiOSAqLywgMTg2IC8qIDB4YmEgKi8sIDE4NyAvKiAweGJiICovLAorICAgIDE4OCAvKiAweGJjICovLCAxODkgLyogMHhiZCAqLywgMTkwIC8qIDB4YmUgKi8sIDE5MSAvKiAweGJmICovLAorICAgIDE5MiAvKiAweGMwICovLCAxOTMgLyogMHhjMSAqLywgMTk0IC8qIDB4YzIgKi8sIDE5NSAvKiAweGMzICovLAorICAgIDE5NiAvKiAweGM0ICovLCAxOTcgLyogMHhjNSAqLywgMTk4IC8qIDB4YzYgKi8sIDE5OSAvKiAweGM3ICovLAorICAgIDIwMCAvKiAweGM4ICovLCAyMDEgLyogMHhjOSAqLywgMjAyIC8qIDB4Y2EgKi8sIDIwMyAvKiAweGNiICovLAorICAgIDIwNCAvKiAweGNjICovLCAyMDUgLyogMHhjZCAqLywgMjA2IC8qIDB4Y2UgKi8sIDIwNyAvKiAweGNmICovLAorICAgIDIwOCAvKiAweGQwICovLCAyMDkgLyogMHhkMSAqLywgMjEwIC8qIDB4ZDIgKi8sIDIxMSAvKiAweGQzICovLAorICAgIDIxMiAvKiAweGQ0ICovLCAyMTMgLyogMHhkNSAqLywgMjE0IC8qIDB4ZDYgKi8sIDIxNSAvKiAweGQ3ICovLAorICAgIDIxNiAvKiAweGQ4ICovLCAyMTcgLyogMHhkOSAqLywgMjE4IC8qIDB4ZGEgKi8sIDIxOSAvKiAweGRiICovLAorICAgIDIyMCAvKiAweGRjICovLCAyMjEgLyogMHhkZCAqLywgMjIyIC8qIDB4ZGUgKi8sIDIyMyAvKiAweGRmICovLAorICAgIDIyNCAvKiAweGUwICovLCAyMjUgLyogMHhlMSAqLywgMjI2IC8qIDB4ZTIgKi8sIDIyNyAvKiAweGUzICovLAorICAgIDIyOCAvKiAweGU0ICovLCAyMjkgLyogMHhlNSAqLywgMjMwIC8qIDB4ZTYgKi8sIDIzMSAvKiAweGU3ICovLAorICAgIDIzMiAvKiAweGU4ICovLCAyMzMgLyogMHhlOSAqLywgMjM0IC8qIDB4ZWEgKi8sIDIzNSAvKiAweGViICovLAorICAgIDIzNiAvKiAweGVjICovLCAyMzcgLyogMHhlZCAqLywgMjM4IC8qIDB4ZWUgKi8sIDIzOSAvKiAweGVmICovLAorICAgIDI0MCAvKiAweGYwICovLCAyNDEgLyogMHhmMSAqLywgMjQyIC8qIDB4ZjIgKi8sIDI0MyAvKiAweGYzICovLAorICAgIDI0NCAvKiAweGY0ICovLCAyNDUgLyogMHhmNSAqLywgMjQ2IC8qIDB4ZjYgKi8sIDI0NyAvKiAweGY3ICovLAorICAgIDI0OCAvKiAweGY4ICovLCAyNDkgLyogMHhmOSAqLywgMjUwIC8qIDB4ZmEgKi8sIDI1MSAvKiAweGZiICovLAorICAgIDI1MiAvKiAweGZjICovLCAyNTMgLyogMHhmZCAqLywgMjU0IC8qIDB4ZmUgKi8sIDI1NSAvKiAweGZmICovLAorfTsKKwordm9pZCBuZ2h0dHAyX2Rvd25jYXNlKHVpbnQ4X3QgKnMsIHNpemVfdCBsZW4pIHsKKyAgc2l6ZV90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgIHNbaV0gPSBET1dOQ0FTRV9UQkxbc1tpXV07CisgIH0KK30KKworLyoKKyAqICAgbG9jYWxfd2luZG93X3NpemUKKyAqICAgXiAgKgorICogICB8ICAqICAgIHJlY3Zfd2luZG93X3NpemUKKyAqICAgfCAgKiAgKiBeCisgKiAgIHwgICogICogfAorICogIDArKysrKysrKysKKyAqICAgfCAgKiAgKiAgIFwKKyAqICAgfCAgKiAgKiAgIHwgVGhpcyByYWdlIGlzIGhpZGRlbiBpbiBmbG93IGNvbnRyb2wuICBCdXQgaXQgbXVzdCBiZQorICogICB2ICAqICAqICAgLyBrZXB0IGluIG9yZGVyIHRvIHJlc3RvcmUgaXQgd2hlbiB3aW5kb3cgc2l6ZSBpcyBlbmxhcmdlZC4KKyAqICAgcmVjdl9yZWR1Y3Rpb24KKyAqICAgKCsgZm9yIG5lZ2F0aXZlIGRpcmVjdGlvbikKKyAqCisgKiAgIHJlY3Zfd2luZG93X3NpemUgY291bGQgYmUgbmVnYXRpdmUgaWYgd2UgZGVjcmVhc2UKKyAqICAgbG9jYWxfd2luZG93X3NpemUgbW9yZSB0aGFuIHJlY3Zfd2luZG93X3NpemU6CisgKgorICogICBsb2NhbF93aW5kb3dfc2l6ZQorICogICBeICAqCisgKiAgIHwgICoKKyAqICAgfCAgKgorICogICAwKysrKysrKysKKyAqICAgfCAgKiAgICBeIHJlY3Zfd2luZG93X3NpemUgKG5lZ2F0aXZlKQorICogICB8ICAqICAgIHwKKyAqICAgdiAgKiAgKgorICogICByZWN2X3JlZHVjdGlvbgorICovCitpbnQgbmdodHRwMl9hZGp1c3RfbG9jYWxfd2luZG93X3NpemUoaW50MzJfdCAqbG9jYWxfd2luZG93X3NpemVfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKnJlY3Zfd2luZG93X3NpemVfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKnJlY3ZfcmVkdWN0aW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpkZWx0YV9wdHIpIHsKKyAgaWYgKCpkZWx0YV9wdHIgPiAwKSB7CisgICAgaW50MzJfdCByZWN2X3JlZHVjdGlvbl9kZWx0YTsKKyAgICBpbnQzMl90IGRlbHRhOworICAgIGludDMyX3QgbmV3X3JlY3Zfd2luZG93X3NpemUgPQorICAgICAgICBuZ2h0dHAyX21heCgwLCAqcmVjdl93aW5kb3dfc2l6ZV9wdHIpIC0gKmRlbHRhX3B0cjsKKworICAgIGlmIChuZXdfcmVjdl93aW5kb3dfc2l6ZSA+PSAwKSB7CisgICAgICAqcmVjdl93aW5kb3dfc2l6ZV9wdHIgPSBuZXdfcmVjdl93aW5kb3dfc2l6ZTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGRlbHRhID0gLW5ld19yZWN2X3dpbmRvd19zaXplOworCisgICAgLyogVGhlIGRlbHRhIHNpemUgaXMgc3RyaWN0bHkgbW9yZSB0aGFuIHJlY2VpdmVkIGJ5dGVzLiBJbmNyZWFzZQorICAgICAgIGxvY2FsX3dpbmRvd19zaXplIGJ5IHRoYXQgZGlmZmVyZW5jZSB8ZGVsdGF8LiAqLworICAgIGlmICgqbG9jYWxfd2luZG93X3NpemVfcHRyID4gTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUgLSBkZWx0YSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0ZMT1dfQ09OVFJPTDsKKyAgICB9CisgICAgKmxvY2FsX3dpbmRvd19zaXplX3B0ciArPSBkZWx0YTsKKyAgICAvKiBJZiB0aGVyZSBpcyByZWN2X3JlZHVjdGlvbiBkdWUgdG8gZWFybGllciB3aW5kb3dfc2l6ZQorICAgICAgIHJlZHVjdGlvbiwgd2UgaGF2ZSB0byBhZGp1c3QgaXQgdG9vLiAqLworICAgIHJlY3ZfcmVkdWN0aW9uX2RlbHRhID0gbmdodHRwMl9taW4oKnJlY3ZfcmVkdWN0aW9uX3B0ciwgZGVsdGEpOworICAgICpyZWN2X3JlZHVjdGlvbl9wdHIgLT0gcmVjdl9yZWR1Y3Rpb25fZGVsdGE7CisgICAgaWYgKCpyZWN2X3dpbmRvd19zaXplX3B0ciA8IDApIHsKKyAgICAgICpyZWN2X3dpbmRvd19zaXplX3B0ciArPSByZWN2X3JlZHVjdGlvbl9kZWx0YTsKKyAgICB9IGVsc2UgeworICAgICAgLyogSWYgKnJlY3Zfd2luZG93X3NpemVfcHRyID4gMCwgdGhlbiB0aG9zZSBieXRlcyBhcmUgZ29pbmcgdG8KKyAgICAgICAgIGJlIHJldHVybmVkIHRvIHRoZSByZW1vdGUgcGVlciAoYnkgV0lORE9XX1VQREFURSB3aXRoIHRoZQorICAgICAgICAgYWRqdXN0ZWQgKmRlbHRhX3B0ciksIHNvIGl0IGlzIGVmZmVjdGl2ZWx5IDAgbm93LiAgV2Ugc2V0IHRvCisgICAgICAgICAqcmVjdl9yZWR1Y3Rpb25fZGVsdGEsIGJlY2F1c2UgY2FsbGVyIGRvZXMgbm90IHRha2UgaW50bworICAgICAgICAgYWNjb3VudCBpdCBpbiAqZGVsdGFfcHRyLiAqLworICAgICAgKnJlY3Zfd2luZG93X3NpemVfcHRyID0gcmVjdl9yZWR1Y3Rpb25fZGVsdGE7CisgICAgfQorICAgIC8qIHJlY3ZfcmVkdWN0aW9uX2RlbHRhIG11c3QgYmUgcGFpZCBmcm9tICpkZWx0YV9wdHIsIHNpbmNlIGl0IHdhcworICAgICAgIGFkZGVkIGluIHdpbmRvdyBzaXplIHJlZHVjdGlvbiAoc2VlIGJlbG93KS4gKi8KKyAgICAqZGVsdGFfcHRyIC09IHJlY3ZfcmVkdWN0aW9uX2RlbHRhOworCisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoKmxvY2FsX3dpbmRvd19zaXplX3B0ciArICpkZWx0YV9wdHIgPCAwIHx8CisgICAgICAqcmVjdl93aW5kb3dfc2l6ZV9wdHIgPCBJTlQzMl9NSU4gLSAqZGVsdGFfcHRyIHx8CisgICAgICAqcmVjdl9yZWR1Y3Rpb25fcHRyID4gSU5UMzJfTUFYICsgKmRlbHRhX3B0cikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9GTE9XX0NPTlRST0w7CisgIH0KKyAgLyogRGVjcmVhc2luZyBsb2NhbCB3aW5kb3cgc2l6ZS4gTm90ZSB0aGF0IHdlIGFjaGlldmUgdGhpcyB3aXRob3V0CisgICAgIG5vdGljaW5nIHRvIHRoZSByZW1vdGUgcGVlci4gVG8gZG8gdGhpcywgd2UgY3V0CisgICAgIHJlY3Zfd2luZG93X3NpemUgYnkgLWRlbHRhLiBUaGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qgc2VuZAorICAgICBXSU5ET1dfVVBEQVRFIGZvciAtZGVsdGEgYnl0ZXMuICovCisgICpsb2NhbF93aW5kb3dfc2l6ZV9wdHIgKz0gKmRlbHRhX3B0cjsKKyAgKnJlY3Zfd2luZG93X3NpemVfcHRyICs9ICpkZWx0YV9wdHI7CisgICpyZWN2X3JlZHVjdGlvbl9wdHIgLT0gKmRlbHRhX3B0cjsKKyAgKmRlbHRhX3B0ciA9IDA7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2luY3JlYXNlX2xvY2FsX3dpbmRvd19zaXplKGludDMyX3QgKmxvY2FsX3dpbmRvd19zaXplX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKnJlY3Zfd2luZG93X3NpemVfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqcmVjdl9yZWR1Y3Rpb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqZGVsdGFfcHRyKSB7CisgIGludDMyX3QgcmVjdl9yZWR1Y3Rpb25fZGVsdGE7CisgIGludDMyX3QgZGVsdGE7CisKKyAgZGVsdGEgPSAqZGVsdGFfcHRyOworCisgIGFzc2VydChkZWx0YSA+PSAwKTsKKworICAvKiBUaGUgZGVsdGEgc2l6ZSBpcyBzdHJpY3RseSBtb3JlIHRoYW4gcmVjZWl2ZWQgYnl0ZXMuIEluY3JlYXNlCisgICAgIGxvY2FsX3dpbmRvd19zaXplIGJ5IHRoYXQgZGlmZmVyZW5jZSB8ZGVsdGF8LiAqLworICBpZiAoKmxvY2FsX3dpbmRvd19zaXplX3B0ciA+IE5HSFRUUDJfTUFYX1dJTkRPV19TSVpFIC0gZGVsdGEpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MOworICB9CisKKyAgKmxvY2FsX3dpbmRvd19zaXplX3B0ciArPSBkZWx0YTsKKyAgLyogSWYgdGhlcmUgaXMgcmVjdl9yZWR1Y3Rpb24gZHVlIHRvIGVhcmxpZXIgd2luZG93X3NpemUKKyAgICAgcmVkdWN0aW9uLCB3ZSBoYXZlIHRvIGFkanVzdCBpdCB0b28uICovCisgIHJlY3ZfcmVkdWN0aW9uX2RlbHRhID0gbmdodHRwMl9taW4oKnJlY3ZfcmVkdWN0aW9uX3B0ciwgZGVsdGEpOworICAqcmVjdl9yZWR1Y3Rpb25fcHRyIC09IHJlY3ZfcmVkdWN0aW9uX2RlbHRhOworCisgICpyZWN2X3dpbmRvd19zaXplX3B0ciArPSByZWN2X3JlZHVjdGlvbl9kZWx0YTsKKworICAvKiByZWN2X3JlZHVjdGlvbl9kZWx0YSBtdXN0IGJlIHBhaWQgZnJvbSAqZGVsdGFfcHRyLCBzaW5jZSBpdCB3YXMKKyAgICAgYWRkZWQgaW4gd2luZG93IHNpemUgcmVkdWN0aW9uIChzZWUgYmVsb3cpLiAqLworICAqZGVsdGFfcHRyIC09IHJlY3ZfcmVkdWN0aW9uX2RlbHRhOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zaG91bGRfc2VuZF93aW5kb3dfdXBkYXRlKGludDMyX3QgbG9jYWxfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcmVjdl93aW5kb3dfc2l6ZSkgeworICByZXR1cm4gcmVjdl93aW5kb3dfc2l6ZSA+IDAgJiYgcmVjdl93aW5kb3dfc2l6ZSA+PSBsb2NhbF93aW5kb3dfc2l6ZSAvIDI7Cit9CisKK2NvbnN0IGNoYXIgKm5naHR0cDJfc3RyZXJyb3IoaW50IGVycm9yX2NvZGUpIHsKKyAgc3dpdGNoIChlcnJvcl9jb2RlKSB7CisgIGNhc2UgMDoKKyAgICByZXR1cm4gIlN1Y2Nlc3MiOworICBjYXNlIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ6CisgICAgcmV0dXJuICJJbnZhbGlkIGFyZ3VtZW50IjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9CVUZGRVJfRVJST1I6CisgICAgcmV0dXJuICJPdXQgb2YgYnVmZmVyIHNwYWNlIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9VTlNVUFBPUlRFRF9WRVJTSU9OOgorICAgIHJldHVybiAiVW5zdXBwb3J0ZWQgU1BEWSB2ZXJzaW9uIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9XT1VMREJMT0NLOgorICAgIHJldHVybiAiT3BlcmF0aW9uIHdvdWxkIGJsb2NrIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9QUk9UTzoKKyAgICByZXR1cm4gIlByb3RvY29sIGVycm9yIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9JTlZBTElEX0ZSQU1FOgorICAgIHJldHVybiAiSW52YWxpZCBmcmFtZSBvY3RldHMiOworICBjYXNlIE5HSFRUUDJfRVJSX0VPRjoKKyAgICByZXR1cm4gIkVPRiI7CisgIGNhc2UgTkdIVFRQMl9FUlJfREVGRVJSRUQ6CisgICAgcmV0dXJuICJEYXRhIHRyYW5zZmVyIGRlZmVycmVkIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9TVFJFQU1fSURfTk9UX0FWQUlMQUJMRToKKyAgICByZXR1cm4gIk5vIG1vcmUgU3RyZWFtIElEIGF2YWlsYWJsZSI7CisgIGNhc2UgTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRDoKKyAgICByZXR1cm4gIlN0cmVhbSB3YXMgYWxyZWFkeSBjbG9zZWQgb3IgaW52YWxpZCI7CisgIGNhc2UgTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkc6CisgICAgcmV0dXJuICJTdHJlYW0gaXMgY2xvc2luZyI7CisgIGNhc2UgTkdIVFRQMl9FUlJfU1RSRUFNX1NIVVRfV1I6CisgICAgcmV0dXJuICJUaGUgdHJhbnNtaXNzaW9uIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHN0cmVhbSI7CisgIGNhc2UgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fSUQ6CisgICAgcmV0dXJuICJTdHJlYW0gSUQgaXMgaW52YWxpZCI7CisgIGNhc2UgTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fU1RBVEU6CisgICAgcmV0dXJuICJJbnZhbGlkIHN0cmVhbSBzdGF0ZSI7CisgIGNhc2UgTkdIVFRQMl9FUlJfREVGRVJSRURfREFUQV9FWElTVDoKKyAgICByZXR1cm4gIkFub3RoZXIgREFUQSBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmVycmVkIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9TVEFSVF9TVFJFQU1fTk9UX0FMTE9XRUQ6CisgICAgcmV0dXJuICJyZXF1ZXN0IEhFQURFUlMgaXMgbm90IGFsbG93ZWQiOworICBjYXNlIE5HSFRUUDJfRVJSX0dPQVdBWV9BTFJFQURZX1NFTlQ6CisgICAgcmV0dXJuICJHT0FXQVkgaGFzIGFscmVhZHkgYmVlbiBzZW50IjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9JTlZBTElEX0hFQURFUl9CTE9DSzoKKyAgICByZXR1cm4gIkludmFsaWQgaGVhZGVyIGJsb2NrIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFOgorICAgIHJldHVybiAiSW52YWxpZCBzdGF0ZSI7CisgIGNhc2UgTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRToKKyAgICByZXR1cm4gIlRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZCBkdWUgdG8gdGhlIHRlbXBvcmFsIGVycm9yIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SOgorICAgIHJldHVybiAiVGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgaXMgaW52YWxpZCI7CisgIGNhc2UgTkdIVFRQMl9FUlJfSEVBREVSX0NPTVA6CisgICAgcmV0dXJuICJIZWFkZXIgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBlcnJvciI7CisgIGNhc2UgTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MOgorICAgIHJldHVybiAiRmxvdyBjb250cm9sIGVycm9yIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9JTlNVRkZfQlVGU0laRToKKyAgICByZXR1cm4gIkluc3VmZmljaWVudCBidWZmZXIgc2l6ZSBnaXZlbiB0byBmdW5jdGlvbiI7CisgIGNhc2UgTkdIVFRQMl9FUlJfUEFVU0U6CisgICAgcmV0dXJuICJDYWxsYmFjayB3YXMgcGF1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiI7CisgIGNhc2UgTkdIVFRQMl9FUlJfVE9PX01BTllfSU5GTElHSFRfU0VUVElOR1M6CisgICAgcmV0dXJuICJUb28gbWFueSBpbmZsaWdodCBTRVRUSU5HUyI7CisgIGNhc2UgTkdIVFRQMl9FUlJfUFVTSF9ESVNBQkxFRDoKKyAgICByZXR1cm4gIlNlcnZlciBwdXNoIGlzIGRpc2FibGVkIGJ5IHBlZXIiOworICBjYXNlIE5HSFRUUDJfRVJSX0RBVEFfRVhJU1Q6CisgICAgcmV0dXJuICJEQVRBIG9yIEhFQURFUlMgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBzdWJtaXR0ZWQgZm9yIHRoZSBzdHJlYW0iOworICBjYXNlIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORzoKKyAgICByZXR1cm4gIlRoZSBjdXJyZW50IHNlc3Npb24gaXMgY2xvc2luZyI7CisgIGNhc2UgTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI6CisgICAgcmV0dXJuICJJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIHdhcyByZWNlaXZlZCI7CisgIGNhc2UgTkdIVFRQMl9FUlJfSFRUUF9NRVNTQUdJTkc6CisgICAgcmV0dXJuICJWaW9sYXRpb24gaW4gSFRUUCBtZXNzYWdpbmcgcnVsZSI7CisgIGNhc2UgTkdIVFRQMl9FUlJfUkVGVVNFRF9TVFJFQU06CisgICAgcmV0dXJuICJTdHJlYW0gd2FzIHJlZnVzZWQiOworICBjYXNlIE5HSFRUUDJfRVJSX0lOVEVSTkFMOgorICAgIHJldHVybiAiSW50ZXJuYWwgZXJyb3IiOworICBjYXNlIE5HSFRUUDJfRVJSX0NBTkNFTDoKKyAgICByZXR1cm4gIkNhbmNlbCI7CisgIGNhc2UgTkdIVFRQMl9FUlJfU0VUVElOR1NfRVhQRUNURUQ6CisgICAgcmV0dXJuICJXaGVuIGEgbG9jYWwgZW5kcG9pbnQgZXhwZWN0cyB0byByZWNlaXZlIFNFVFRJTkdTIGZyYW1lLCBpdCAiCisgICAgICAgICAgICJyZWNlaXZlcyBhbiBvdGhlciB0eXBlIG9mIGZyYW1lIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9OT01FTToKKyAgICByZXR1cm4gIk91dCBvZiBtZW1vcnkiOworICBjYXNlIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU6CisgICAgcmV0dXJuICJUaGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbiBmYWlsZWQiOworICBjYXNlIE5HSFRUUDJfRVJSX0JBRF9DTElFTlRfTUFHSUM6CisgICAgcmV0dXJuICJSZWNlaXZlZCBiYWQgY2xpZW50IG1hZ2ljIGJ5dGUgc3RyaW5nIjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9GTE9PREVEOgorICAgIHJldHVybiAiRmxvb2Rpbmcgd2FzIGRldGVjdGVkIGluIHRoaXMgSFRUUC8yIHNlc3Npb24sIGFuZCBpdCBtdXN0IGJlICIKKyAgICAgICAgICAgImNsb3NlZCI7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuICJVbmtub3duIGVycm9yIGNvZGUiOworICB9Cit9CisKKy8qIEdlbmVyYXRlZCBieSBnZW5ubWNoYXJ0YmwucHkgKi8KK3N0YXRpYyBjb25zdCBpbnQgVkFMSURfSERfTkFNRV9DSEFSU1tdID0geworICAgIDAgLyogTlVMICAqLywgMCAvKiBTT0ggICovLCAwIC8qIFNUWCAgKi8sIDAgLyogRVRYICAqLywKKyAgICAwIC8qIEVPVCAgKi8sIDAgLyogRU5RICAqLywgMCAvKiBBQ0sgICovLCAwIC8qIEJFTCAgKi8sCisgICAgMCAvKiBCUyAgICovLCAwIC8qIEhUICAgKi8sIDAgLyogTEYgICAqLywgMCAvKiBWVCAgICovLAorICAgIDAgLyogRkYgICAqLywgMCAvKiBDUiAgICovLCAwIC8qIFNPICAgKi8sIDAgLyogU0kgICAqLywKKyAgICAwIC8qIERMRSAgKi8sIDAgLyogREMxICAqLywgMCAvKiBEQzIgICovLCAwIC8qIERDMyAgKi8sCisgICAgMCAvKiBEQzQgICovLCAwIC8qIE5BSyAgKi8sIDAgLyogU1lOICAqLywgMCAvKiBFVEIgICovLAorICAgIDAgLyogQ0FOICAqLywgMCAvKiBFTSAgICovLCAwIC8qIFNVQiAgKi8sIDAgLyogRVNDICAqLywKKyAgICAwIC8qIEZTICAgKi8sIDAgLyogR1MgICAqLywgMCAvKiBSUyAgICovLCAwIC8qIFVTICAgKi8sCisgICAgMCAvKiBTUEMgICovLCAxIC8qICEgICAgKi8sIDAgLyogIiAgICAqLywgMSAvKiAjICAgICovLAorICAgIDEgLyogJCAgICAqLywgMSAvKiAlICAgICovLCAxIC8qICYgICAgKi8sIDEgLyogJyAgICAqLywKKyAgICAwIC8qICggICAgKi8sIDAgLyogKSAgICAqLywgMSAvKiAqICAgICovLCAxIC8qICsgICAgKi8sCisgICAgMCAvKiAsICAgICovLCAxIC8qIC0gICAgKi8sIDEgLyogLiAgICAqLywgMCAvKiAvICAgICovLAorICAgIDEgLyogMCAgICAqLywgMSAvKiAxICAgICovLCAxIC8qIDIgICAgKi8sIDEgLyogMyAgICAqLywKKyAgICAxIC8qIDQgICAgKi8sIDEgLyogNSAgICAqLywgMSAvKiA2ICAgICovLCAxIC8qIDcgICAgKi8sCisgICAgMSAvKiA4ICAgICovLCAxIC8qIDkgICAgKi8sIDAgLyogOiAgICAqLywgMCAvKiA7ICAgICovLAorICAgIDAgLyogPCAgICAqLywgMCAvKiA9ICAgICovLCAwIC8qID4gICAgKi8sIDAgLyogPyAgICAqLywKKyAgICAwIC8qIEAgICAgKi8sIDAgLyogQSAgICAqLywgMCAvKiBCICAgICovLCAwIC8qIEMgICAgKi8sCisgICAgMCAvKiBEICAgICovLCAwIC8qIEUgICAgKi8sIDAgLyogRiAgICAqLywgMCAvKiBHICAgICovLAorICAgIDAgLyogSCAgICAqLywgMCAvKiBJICAgICovLCAwIC8qIEogICAgKi8sIDAgLyogSyAgICAqLywKKyAgICAwIC8qIEwgICAgKi8sIDAgLyogTSAgICAqLywgMCAvKiBOICAgICovLCAwIC8qIE8gICAgKi8sCisgICAgMCAvKiBQICAgICovLCAwIC8qIFEgICAgKi8sIDAgLyogUiAgICAqLywgMCAvKiBTICAgICovLAorICAgIDAgLyogVCAgICAqLywgMCAvKiBVICAgICovLCAwIC8qIFYgICAgKi8sIDAgLyogVyAgICAqLywKKyAgICAwIC8qIFggICAgKi8sIDAgLyogWSAgICAqLywgMCAvKiBaICAgICovLCAwIC8qIFsgICAgKi8sCisgICAgMCAvKiBcICAgICovLCAwIC8qIF0gICAgKi8sIDEgLyogXiAgICAqLywgMSAvKiBfICAgICovLAorICAgIDEgLyogYCAgICAqLywgMSAvKiBhICAgICovLCAxIC8qIGIgICAgKi8sIDEgLyogYyAgICAqLywKKyAgICAxIC8qIGQgICAgKi8sIDEgLyogZSAgICAqLywgMSAvKiBmICAgICovLCAxIC8qIGcgICAgKi8sCisgICAgMSAvKiBoICAgICovLCAxIC8qIGkgICAgKi8sIDEgLyogaiAgICAqLywgMSAvKiBrICAgICovLAorICAgIDEgLyogbCAgICAqLywgMSAvKiBtICAgICovLCAxIC8qIG4gICAgKi8sIDEgLyogbyAgICAqLywKKyAgICAxIC8qIHAgICAgKi8sIDEgLyogcSAgICAqLywgMSAvKiByICAgICovLCAxIC8qIHMgICAgKi8sCisgICAgMSAvKiB0ICAgICovLCAxIC8qIHUgICAgKi8sIDEgLyogdiAgICAqLywgMSAvKiB3ICAgICovLAorICAgIDEgLyogeCAgICAqLywgMSAvKiB5ICAgICovLCAxIC8qIHogICAgKi8sIDAgLyogeyAgICAqLywKKyAgICAxIC8qIHwgICAgKi8sIDAgLyogfSAgICAqLywgMSAvKiB+ICAgICovLCAwIC8qIERFTCAgKi8sCisgICAgMCAvKiAweDgwICovLCAwIC8qIDB4ODEgKi8sIDAgLyogMHg4MiAqLywgMCAvKiAweDgzICovLAorICAgIDAgLyogMHg4NCAqLywgMCAvKiAweDg1ICovLCAwIC8qIDB4ODYgKi8sIDAgLyogMHg4NyAqLywKKyAgICAwIC8qIDB4ODggKi8sIDAgLyogMHg4OSAqLywgMCAvKiAweDhhICovLCAwIC8qIDB4OGIgKi8sCisgICAgMCAvKiAweDhjICovLCAwIC8qIDB4OGQgKi8sIDAgLyogMHg4ZSAqLywgMCAvKiAweDhmICovLAorICAgIDAgLyogMHg5MCAqLywgMCAvKiAweDkxICovLCAwIC8qIDB4OTIgKi8sIDAgLyogMHg5MyAqLywKKyAgICAwIC8qIDB4OTQgKi8sIDAgLyogMHg5NSAqLywgMCAvKiAweDk2ICovLCAwIC8qIDB4OTcgKi8sCisgICAgMCAvKiAweDk4ICovLCAwIC8qIDB4OTkgKi8sIDAgLyogMHg5YSAqLywgMCAvKiAweDliICovLAorICAgIDAgLyogMHg5YyAqLywgMCAvKiAweDlkICovLCAwIC8qIDB4OWUgKi8sIDAgLyogMHg5ZiAqLywKKyAgICAwIC8qIDB4YTAgKi8sIDAgLyogMHhhMSAqLywgMCAvKiAweGEyICovLCAwIC8qIDB4YTMgKi8sCisgICAgMCAvKiAweGE0ICovLCAwIC8qIDB4YTUgKi8sIDAgLyogMHhhNiAqLywgMCAvKiAweGE3ICovLAorICAgIDAgLyogMHhhOCAqLywgMCAvKiAweGE5ICovLCAwIC8qIDB4YWEgKi8sIDAgLyogMHhhYiAqLywKKyAgICAwIC8qIDB4YWMgKi8sIDAgLyogMHhhZCAqLywgMCAvKiAweGFlICovLCAwIC8qIDB4YWYgKi8sCisgICAgMCAvKiAweGIwICovLCAwIC8qIDB4YjEgKi8sIDAgLyogMHhiMiAqLywgMCAvKiAweGIzICovLAorICAgIDAgLyogMHhiNCAqLywgMCAvKiAweGI1ICovLCAwIC8qIDB4YjYgKi8sIDAgLyogMHhiNyAqLywKKyAgICAwIC8qIDB4YjggKi8sIDAgLyogMHhiOSAqLywgMCAvKiAweGJhICovLCAwIC8qIDB4YmIgKi8sCisgICAgMCAvKiAweGJjICovLCAwIC8qIDB4YmQgKi8sIDAgLyogMHhiZSAqLywgMCAvKiAweGJmICovLAorICAgIDAgLyogMHhjMCAqLywgMCAvKiAweGMxICovLCAwIC8qIDB4YzIgKi8sIDAgLyogMHhjMyAqLywKKyAgICAwIC8qIDB4YzQgKi8sIDAgLyogMHhjNSAqLywgMCAvKiAweGM2ICovLCAwIC8qIDB4YzcgKi8sCisgICAgMCAvKiAweGM4ICovLCAwIC8qIDB4YzkgKi8sIDAgLyogMHhjYSAqLywgMCAvKiAweGNiICovLAorICAgIDAgLyogMHhjYyAqLywgMCAvKiAweGNkICovLCAwIC8qIDB4Y2UgKi8sIDAgLyogMHhjZiAqLywKKyAgICAwIC8qIDB4ZDAgKi8sIDAgLyogMHhkMSAqLywgMCAvKiAweGQyICovLCAwIC8qIDB4ZDMgKi8sCisgICAgMCAvKiAweGQ0ICovLCAwIC8qIDB4ZDUgKi8sIDAgLyogMHhkNiAqLywgMCAvKiAweGQ3ICovLAorICAgIDAgLyogMHhkOCAqLywgMCAvKiAweGQ5ICovLCAwIC8qIDB4ZGEgKi8sIDAgLyogMHhkYiAqLywKKyAgICAwIC8qIDB4ZGMgKi8sIDAgLyogMHhkZCAqLywgMCAvKiAweGRlICovLCAwIC8qIDB4ZGYgKi8sCisgICAgMCAvKiAweGUwICovLCAwIC8qIDB4ZTEgKi8sIDAgLyogMHhlMiAqLywgMCAvKiAweGUzICovLAorICAgIDAgLyogMHhlNCAqLywgMCAvKiAweGU1ICovLCAwIC8qIDB4ZTYgKi8sIDAgLyogMHhlNyAqLywKKyAgICAwIC8qIDB4ZTggKi8sIDAgLyogMHhlOSAqLywgMCAvKiAweGVhICovLCAwIC8qIDB4ZWIgKi8sCisgICAgMCAvKiAweGVjICovLCAwIC8qIDB4ZWQgKi8sIDAgLyogMHhlZSAqLywgMCAvKiAweGVmICovLAorICAgIDAgLyogMHhmMCAqLywgMCAvKiAweGYxICovLCAwIC8qIDB4ZjIgKi8sIDAgLyogMHhmMyAqLywKKyAgICAwIC8qIDB4ZjQgKi8sIDAgLyogMHhmNSAqLywgMCAvKiAweGY2ICovLCAwIC8qIDB4ZjcgKi8sCisgICAgMCAvKiAweGY4ICovLCAwIC8qIDB4ZjkgKi8sIDAgLyogMHhmYSAqLywgMCAvKiAweGZiICovLAorICAgIDAgLyogMHhmYyAqLywgMCAvKiAweGZkICovLCAwIC8qIDB4ZmUgKi8sIDAgLyogMHhmZiAqLworfTsKKworaW50IG5naHR0cDJfY2hlY2tfaGVhZGVyX25hbWUoY29uc3QgdWludDhfdCAqbmFtZSwgc2l6ZV90IGxlbikgeworICBjb25zdCB1aW50OF90ICpsYXN0OworICBpZiAobGVuID09IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoKm5hbWUgPT0gJzonKSB7CisgICAgaWYgKGxlbiA9PSAxKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgKytuYW1lOworICAgIC0tbGVuOworICB9CisgIGZvciAobGFzdCA9IG5hbWUgKyBsZW47IG5hbWUgIT0gbGFzdDsgKytuYW1lKSB7CisgICAgaWYgKCFWQUxJRF9IRF9OQU1FX0NIQVJTWypuYW1lXSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQorCisvKiBHZW5lcmF0ZWQgYnkgZ2VudmNoYXJ0YmwucHkgKi8KK3N0YXRpYyBjb25zdCBpbnQgVkFMSURfSERfVkFMVUVfQ0hBUlNbXSA9IHsKKyAgICAwIC8qIE5VTCAgKi8sIDAgLyogU09IICAqLywgMCAvKiBTVFggICovLCAwIC8qIEVUWCAgKi8sCisgICAgMCAvKiBFT1QgICovLCAwIC8qIEVOUSAgKi8sIDAgLyogQUNLICAqLywgMCAvKiBCRUwgICovLAorICAgIDAgLyogQlMgICAqLywgMSAvKiBIVCAgICovLCAwIC8qIExGICAgKi8sIDAgLyogVlQgICAqLywKKyAgICAwIC8qIEZGICAgKi8sIDAgLyogQ1IgICAqLywgMCAvKiBTTyAgICovLCAwIC8qIFNJICAgKi8sCisgICAgMCAvKiBETEUgICovLCAwIC8qIERDMSAgKi8sIDAgLyogREMyICAqLywgMCAvKiBEQzMgICovLAorICAgIDAgLyogREM0ICAqLywgMCAvKiBOQUsgICovLCAwIC8qIFNZTiAgKi8sIDAgLyogRVRCICAqLywKKyAgICAwIC8qIENBTiAgKi8sIDAgLyogRU0gICAqLywgMCAvKiBTVUIgICovLCAwIC8qIEVTQyAgKi8sCisgICAgMCAvKiBGUyAgICovLCAwIC8qIEdTICAgKi8sIDAgLyogUlMgICAqLywgMCAvKiBVUyAgICovLAorICAgIDEgLyogU1BDICAqLywgMSAvKiAhICAgICovLCAxIC8qICIgICAgKi8sIDEgLyogIyAgICAqLywKKyAgICAxIC8qICQgICAgKi8sIDEgLyogJSAgICAqLywgMSAvKiAmICAgICovLCAxIC8qICcgICAgKi8sCisgICAgMSAvKiAoICAgICovLCAxIC8qICkgICAgKi8sIDEgLyogKiAgICAqLywgMSAvKiArICAgICovLAorICAgIDEgLyogLCAgICAqLywgMSAvKiAtICAgICovLCAxIC8qIC4gICAgKi8sIDEgLyogLyAgICAqLywKKyAgICAxIC8qIDAgICAgKi8sIDEgLyogMSAgICAqLywgMSAvKiAyICAgICovLCAxIC8qIDMgICAgKi8sCisgICAgMSAvKiA0ICAgICovLCAxIC8qIDUgICAgKi8sIDEgLyogNiAgICAqLywgMSAvKiA3ICAgICovLAorICAgIDEgLyogOCAgICAqLywgMSAvKiA5ICAgICovLCAxIC8qIDogICAgKi8sIDEgLyogOyAgICAqLywKKyAgICAxIC8qIDwgICAgKi8sIDEgLyogPSAgICAqLywgMSAvKiA+ICAgICovLCAxIC8qID8gICAgKi8sCisgICAgMSAvKiBAICAgICovLCAxIC8qIEEgICAgKi8sIDEgLyogQiAgICAqLywgMSAvKiBDICAgICovLAorICAgIDEgLyogRCAgICAqLywgMSAvKiBFICAgICovLCAxIC8qIEYgICAgKi8sIDEgLyogRyAgICAqLywKKyAgICAxIC8qIEggICAgKi8sIDEgLyogSSAgICAqLywgMSAvKiBKICAgICovLCAxIC8qIEsgICAgKi8sCisgICAgMSAvKiBMICAgICovLCAxIC8qIE0gICAgKi8sIDEgLyogTiAgICAqLywgMSAvKiBPICAgICovLAorICAgIDEgLyogUCAgICAqLywgMSAvKiBRICAgICovLCAxIC8qIFIgICAgKi8sIDEgLyogUyAgICAqLywKKyAgICAxIC8qIFQgICAgKi8sIDEgLyogVSAgICAqLywgMSAvKiBWICAgICovLCAxIC8qIFcgICAgKi8sCisgICAgMSAvKiBYICAgICovLCAxIC8qIFkgICAgKi8sIDEgLyogWiAgICAqLywgMSAvKiBbICAgICovLAorICAgIDEgLyogXCAgICAqLywgMSAvKiBdICAgICovLCAxIC8qIF4gICAgKi8sIDEgLyogXyAgICAqLywKKyAgICAxIC8qIGAgICAgKi8sIDEgLyogYSAgICAqLywgMSAvKiBiICAgICovLCAxIC8qIGMgICAgKi8sCisgICAgMSAvKiBkICAgICovLCAxIC8qIGUgICAgKi8sIDEgLyogZiAgICAqLywgMSAvKiBnICAgICovLAorICAgIDEgLyogaCAgICAqLywgMSAvKiBpICAgICovLCAxIC8qIGogICAgKi8sIDEgLyogayAgICAqLywKKyAgICAxIC8qIGwgICAgKi8sIDEgLyogbSAgICAqLywgMSAvKiBuICAgICovLCAxIC8qIG8gICAgKi8sCisgICAgMSAvKiBwICAgICovLCAxIC8qIHEgICAgKi8sIDEgLyogciAgICAqLywgMSAvKiBzICAgICovLAorICAgIDEgLyogdCAgICAqLywgMSAvKiB1ICAgICovLCAxIC8qIHYgICAgKi8sIDEgLyogdyAgICAqLywKKyAgICAxIC8qIHggICAgKi8sIDEgLyogeSAgICAqLywgMSAvKiB6ICAgICovLCAxIC8qIHsgICAgKi8sCisgICAgMSAvKiB8ICAgICovLCAxIC8qIH0gICAgKi8sIDEgLyogfiAgICAqLywgMCAvKiBERUwgICovLAorICAgIDEgLyogMHg4MCAqLywgMSAvKiAweDgxICovLCAxIC8qIDB4ODIgKi8sIDEgLyogMHg4MyAqLywKKyAgICAxIC8qIDB4ODQgKi8sIDEgLyogMHg4NSAqLywgMSAvKiAweDg2ICovLCAxIC8qIDB4ODcgKi8sCisgICAgMSAvKiAweDg4ICovLCAxIC8qIDB4ODkgKi8sIDEgLyogMHg4YSAqLywgMSAvKiAweDhiICovLAorICAgIDEgLyogMHg4YyAqLywgMSAvKiAweDhkICovLCAxIC8qIDB4OGUgKi8sIDEgLyogMHg4ZiAqLywKKyAgICAxIC8qIDB4OTAgKi8sIDEgLyogMHg5MSAqLywgMSAvKiAweDkyICovLCAxIC8qIDB4OTMgKi8sCisgICAgMSAvKiAweDk0ICovLCAxIC8qIDB4OTUgKi8sIDEgLyogMHg5NiAqLywgMSAvKiAweDk3ICovLAorICAgIDEgLyogMHg5OCAqLywgMSAvKiAweDk5ICovLCAxIC8qIDB4OWEgKi8sIDEgLyogMHg5YiAqLywKKyAgICAxIC8qIDB4OWMgKi8sIDEgLyogMHg5ZCAqLywgMSAvKiAweDllICovLCAxIC8qIDB4OWYgKi8sCisgICAgMSAvKiAweGEwICovLCAxIC8qIDB4YTEgKi8sIDEgLyogMHhhMiAqLywgMSAvKiAweGEzICovLAorICAgIDEgLyogMHhhNCAqLywgMSAvKiAweGE1ICovLCAxIC8qIDB4YTYgKi8sIDEgLyogMHhhNyAqLywKKyAgICAxIC8qIDB4YTggKi8sIDEgLyogMHhhOSAqLywgMSAvKiAweGFhICovLCAxIC8qIDB4YWIgKi8sCisgICAgMSAvKiAweGFjICovLCAxIC8qIDB4YWQgKi8sIDEgLyogMHhhZSAqLywgMSAvKiAweGFmICovLAorICAgIDEgLyogMHhiMCAqLywgMSAvKiAweGIxICovLCAxIC8qIDB4YjIgKi8sIDEgLyogMHhiMyAqLywKKyAgICAxIC8qIDB4YjQgKi8sIDEgLyogMHhiNSAqLywgMSAvKiAweGI2ICovLCAxIC8qIDB4YjcgKi8sCisgICAgMSAvKiAweGI4ICovLCAxIC8qIDB4YjkgKi8sIDEgLyogMHhiYSAqLywgMSAvKiAweGJiICovLAorICAgIDEgLyogMHhiYyAqLywgMSAvKiAweGJkICovLCAxIC8qIDB4YmUgKi8sIDEgLyogMHhiZiAqLywKKyAgICAxIC8qIDB4YzAgKi8sIDEgLyogMHhjMSAqLywgMSAvKiAweGMyICovLCAxIC8qIDB4YzMgKi8sCisgICAgMSAvKiAweGM0ICovLCAxIC8qIDB4YzUgKi8sIDEgLyogMHhjNiAqLywgMSAvKiAweGM3ICovLAorICAgIDEgLyogMHhjOCAqLywgMSAvKiAweGM5ICovLCAxIC8qIDB4Y2EgKi8sIDEgLyogMHhjYiAqLywKKyAgICAxIC8qIDB4Y2MgKi8sIDEgLyogMHhjZCAqLywgMSAvKiAweGNlICovLCAxIC8qIDB4Y2YgKi8sCisgICAgMSAvKiAweGQwICovLCAxIC8qIDB4ZDEgKi8sIDEgLyogMHhkMiAqLywgMSAvKiAweGQzICovLAorICAgIDEgLyogMHhkNCAqLywgMSAvKiAweGQ1ICovLCAxIC8qIDB4ZDYgKi8sIDEgLyogMHhkNyAqLywKKyAgICAxIC8qIDB4ZDggKi8sIDEgLyogMHhkOSAqLywgMSAvKiAweGRhICovLCAxIC8qIDB4ZGIgKi8sCisgICAgMSAvKiAweGRjICovLCAxIC8qIDB4ZGQgKi8sIDEgLyogMHhkZSAqLywgMSAvKiAweGRmICovLAorICAgIDEgLyogMHhlMCAqLywgMSAvKiAweGUxICovLCAxIC8qIDB4ZTIgKi8sIDEgLyogMHhlMyAqLywKKyAgICAxIC8qIDB4ZTQgKi8sIDEgLyogMHhlNSAqLywgMSAvKiAweGU2ICovLCAxIC8qIDB4ZTcgKi8sCisgICAgMSAvKiAweGU4ICovLCAxIC8qIDB4ZTkgKi8sIDEgLyogMHhlYSAqLywgMSAvKiAweGViICovLAorICAgIDEgLyogMHhlYyAqLywgMSAvKiAweGVkICovLCAxIC8qIDB4ZWUgKi8sIDEgLyogMHhlZiAqLywKKyAgICAxIC8qIDB4ZjAgKi8sIDEgLyogMHhmMSAqLywgMSAvKiAweGYyICovLCAxIC8qIDB4ZjMgKi8sCisgICAgMSAvKiAweGY0ICovLCAxIC8qIDB4ZjUgKi8sIDEgLyogMHhmNiAqLywgMSAvKiAweGY3ICovLAorICAgIDEgLyogMHhmOCAqLywgMSAvKiAweGY5ICovLCAxIC8qIDB4ZmEgKi8sIDEgLyogMHhmYiAqLywKKyAgICAxIC8qIDB4ZmMgKi8sIDEgLyogMHhmZCAqLywgMSAvKiAweGZlICovLCAxIC8qIDB4ZmYgKi8KK307CisKK2ludCBuZ2h0dHAyX2NoZWNrX2hlYWRlcl92YWx1ZShjb25zdCB1aW50OF90ICp2YWx1ZSwgc2l6ZV90IGxlbikgeworICBjb25zdCB1aW50OF90ICpsYXN0OworICBmb3IgKGxhc3QgPSB2YWx1ZSArIGxlbjsgdmFsdWUgIT0gbGFzdDsgKyt2YWx1ZSkgeworICAgIGlmICghVkFMSURfSERfVkFMVUVfQ0hBUlNbKnZhbHVlXSkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQorCisvKiBHZW5lcmF0ZWQgYnkgZ2VuYXV0aHJvaXR5Y2hhcnRibC5weSAqLworc3RhdGljIGNoYXIgVkFMSURfQVVUSE9SSVRZX0NIQVJTW10gPSB7CisgICAgMCAvKiBOVUwgICovLCAwIC8qIFNPSCAgKi8sIDAgLyogU1RYICAqLywgMCAvKiBFVFggICovLAorICAgIDAgLyogRU9UICAqLywgMCAvKiBFTlEgICovLCAwIC8qIEFDSyAgKi8sIDAgLyogQkVMICAqLywKKyAgICAwIC8qIEJTICAgKi8sIDAgLyogSFQgICAqLywgMCAvKiBMRiAgICovLCAwIC8qIFZUICAgKi8sCisgICAgMCAvKiBGRiAgICovLCAwIC8qIENSICAgKi8sIDAgLyogU08gICAqLywgMCAvKiBTSSAgICovLAorICAgIDAgLyogRExFICAqLywgMCAvKiBEQzEgICovLCAwIC8qIERDMiAgKi8sIDAgLyogREMzICAqLywKKyAgICAwIC8qIERDNCAgKi8sIDAgLyogTkFLICAqLywgMCAvKiBTWU4gICovLCAwIC8qIEVUQiAgKi8sCisgICAgMCAvKiBDQU4gICovLCAwIC8qIEVNICAgKi8sIDAgLyogU1VCICAqLywgMCAvKiBFU0MgICovLAorICAgIDAgLyogRlMgICAqLywgMCAvKiBHUyAgICovLCAwIC8qIFJTICAgKi8sIDAgLyogVVMgICAqLywKKyAgICAwIC8qIFNQQyAgKi8sIDEgLyogISAgICAqLywgMCAvKiAiICAgICovLCAwIC8qICMgICAgKi8sCisgICAgMSAvKiAkICAgICovLCAxIC8qICUgICAgKi8sIDEgLyogJiAgICAqLywgMSAvKiAnICAgICovLAorICAgIDEgLyogKCAgICAqLywgMSAvKiApICAgICovLCAxIC8qICogICAgKi8sIDEgLyogKyAgICAqLywKKyAgICAxIC8qICwgICAgKi8sIDEgLyogLSAgICAqLywgMSAvKiAuICAgICovLCAwIC8qIC8gICAgKi8sCisgICAgMSAvKiAwICAgICovLCAxIC8qIDEgICAgKi8sIDEgLyogMiAgICAqLywgMSAvKiAzICAgICovLAorICAgIDEgLyogNCAgICAqLywgMSAvKiA1ICAgICovLCAxIC8qIDYgICAgKi8sIDEgLyogNyAgICAqLywKKyAgICAxIC8qIDggICAgKi8sIDEgLyogOSAgICAqLywgMSAvKiA6ICAgICovLCAxIC8qIDsgICAgKi8sCisgICAgMCAvKiA8ICAgICovLCAxIC8qID0gICAgKi8sIDAgLyogPiAgICAqLywgMCAvKiA/ICAgICovLAorICAgIDEgLyogQCAgICAqLywgMSAvKiBBICAgICovLCAxIC8qIEIgICAgKi8sIDEgLyogQyAgICAqLywKKyAgICAxIC8qIEQgICAgKi8sIDEgLyogRSAgICAqLywgMSAvKiBGICAgICovLCAxIC8qIEcgICAgKi8sCisgICAgMSAvKiBIICAgICovLCAxIC8qIEkgICAgKi8sIDEgLyogSiAgICAqLywgMSAvKiBLICAgICovLAorICAgIDEgLyogTCAgICAqLywgMSAvKiBNICAgICovLCAxIC8qIE4gICAgKi8sIDEgLyogTyAgICAqLywKKyAgICAxIC8qIFAgICAgKi8sIDEgLyogUSAgICAqLywgMSAvKiBSICAgICovLCAxIC8qIFMgICAgKi8sCisgICAgMSAvKiBUICAgICovLCAxIC8qIFUgICAgKi8sIDEgLyogViAgICAqLywgMSAvKiBXICAgICovLAorICAgIDEgLyogWCAgICAqLywgMSAvKiBZICAgICovLCAxIC8qIFogICAgKi8sIDEgLyogWyAgICAqLywKKyAgICAwIC8qIFwgICAgKi8sIDEgLyogXSAgICAqLywgMCAvKiBeICAgICovLCAxIC8qIF8gICAgKi8sCisgICAgMCAvKiBgICAgICovLCAxIC8qIGEgICAgKi8sIDEgLyogYiAgICAqLywgMSAvKiBjICAgICovLAorICAgIDEgLyogZCAgICAqLywgMSAvKiBlICAgICovLCAxIC8qIGYgICAgKi8sIDEgLyogZyAgICAqLywKKyAgICAxIC8qIGggICAgKi8sIDEgLyogaSAgICAqLywgMSAvKiBqICAgICovLCAxIC8qIGsgICAgKi8sCisgICAgMSAvKiBsICAgICovLCAxIC8qIG0gICAgKi8sIDEgLyogbiAgICAqLywgMSAvKiBvICAgICovLAorICAgIDEgLyogcCAgICAqLywgMSAvKiBxICAgICovLCAxIC8qIHIgICAgKi8sIDEgLyogcyAgICAqLywKKyAgICAxIC8qIHQgICAgKi8sIDEgLyogdSAgICAqLywgMSAvKiB2ICAgICovLCAxIC8qIHcgICAgKi8sCisgICAgMSAvKiB4ICAgICovLCAxIC8qIHkgICAgKi8sIDEgLyogeiAgICAqLywgMCAvKiB7ICAgICovLAorICAgIDAgLyogfCAgICAqLywgMCAvKiB9ICAgICovLCAxIC8qIH4gICAgKi8sIDAgLyogREVMICAqLywKKyAgICAwIC8qIDB4ODAgKi8sIDAgLyogMHg4MSAqLywgMCAvKiAweDgyICovLCAwIC8qIDB4ODMgKi8sCisgICAgMCAvKiAweDg0ICovLCAwIC8qIDB4ODUgKi8sIDAgLyogMHg4NiAqLywgMCAvKiAweDg3ICovLAorICAgIDAgLyogMHg4OCAqLywgMCAvKiAweDg5ICovLCAwIC8qIDB4OGEgKi8sIDAgLyogMHg4YiAqLywKKyAgICAwIC8qIDB4OGMgKi8sIDAgLyogMHg4ZCAqLywgMCAvKiAweDhlICovLCAwIC8qIDB4OGYgKi8sCisgICAgMCAvKiAweDkwICovLCAwIC8qIDB4OTEgKi8sIDAgLyogMHg5MiAqLywgMCAvKiAweDkzICovLAorICAgIDAgLyogMHg5NCAqLywgMCAvKiAweDk1ICovLCAwIC8qIDB4OTYgKi8sIDAgLyogMHg5NyAqLywKKyAgICAwIC8qIDB4OTggKi8sIDAgLyogMHg5OSAqLywgMCAvKiAweDlhICovLCAwIC8qIDB4OWIgKi8sCisgICAgMCAvKiAweDljICovLCAwIC8qIDB4OWQgKi8sIDAgLyogMHg5ZSAqLywgMCAvKiAweDlmICovLAorICAgIDAgLyogMHhhMCAqLywgMCAvKiAweGExICovLCAwIC8qIDB4YTIgKi8sIDAgLyogMHhhMyAqLywKKyAgICAwIC8qIDB4YTQgKi8sIDAgLyogMHhhNSAqLywgMCAvKiAweGE2ICovLCAwIC8qIDB4YTcgKi8sCisgICAgMCAvKiAweGE4ICovLCAwIC8qIDB4YTkgKi8sIDAgLyogMHhhYSAqLywgMCAvKiAweGFiICovLAorICAgIDAgLyogMHhhYyAqLywgMCAvKiAweGFkICovLCAwIC8qIDB4YWUgKi8sIDAgLyogMHhhZiAqLywKKyAgICAwIC8qIDB4YjAgKi8sIDAgLyogMHhiMSAqLywgMCAvKiAweGIyICovLCAwIC8qIDB4YjMgKi8sCisgICAgMCAvKiAweGI0ICovLCAwIC8qIDB4YjUgKi8sIDAgLyogMHhiNiAqLywgMCAvKiAweGI3ICovLAorICAgIDAgLyogMHhiOCAqLywgMCAvKiAweGI5ICovLCAwIC8qIDB4YmEgKi8sIDAgLyogMHhiYiAqLywKKyAgICAwIC8qIDB4YmMgKi8sIDAgLyogMHhiZCAqLywgMCAvKiAweGJlICovLCAwIC8qIDB4YmYgKi8sCisgICAgMCAvKiAweGMwICovLCAwIC8qIDB4YzEgKi8sIDAgLyogMHhjMiAqLywgMCAvKiAweGMzICovLAorICAgIDAgLyogMHhjNCAqLywgMCAvKiAweGM1ICovLCAwIC8qIDB4YzYgKi8sIDAgLyogMHhjNyAqLywKKyAgICAwIC8qIDB4YzggKi8sIDAgLyogMHhjOSAqLywgMCAvKiAweGNhICovLCAwIC8qIDB4Y2IgKi8sCisgICAgMCAvKiAweGNjICovLCAwIC8qIDB4Y2QgKi8sIDAgLyogMHhjZSAqLywgMCAvKiAweGNmICovLAorICAgIDAgLyogMHhkMCAqLywgMCAvKiAweGQxICovLCAwIC8qIDB4ZDIgKi8sIDAgLyogMHhkMyAqLywKKyAgICAwIC8qIDB4ZDQgKi8sIDAgLyogMHhkNSAqLywgMCAvKiAweGQ2ICovLCAwIC8qIDB4ZDcgKi8sCisgICAgMCAvKiAweGQ4ICovLCAwIC8qIDB4ZDkgKi8sIDAgLyogMHhkYSAqLywgMCAvKiAweGRiICovLAorICAgIDAgLyogMHhkYyAqLywgMCAvKiAweGRkICovLCAwIC8qIDB4ZGUgKi8sIDAgLyogMHhkZiAqLywKKyAgICAwIC8qIDB4ZTAgKi8sIDAgLyogMHhlMSAqLywgMCAvKiAweGUyICovLCAwIC8qIDB4ZTMgKi8sCisgICAgMCAvKiAweGU0ICovLCAwIC8qIDB4ZTUgKi8sIDAgLyogMHhlNiAqLywgMCAvKiAweGU3ICovLAorICAgIDAgLyogMHhlOCAqLywgMCAvKiAweGU5ICovLCAwIC8qIDB4ZWEgKi8sIDAgLyogMHhlYiAqLywKKyAgICAwIC8qIDB4ZWMgKi8sIDAgLyogMHhlZCAqLywgMCAvKiAweGVlICovLCAwIC8qIDB4ZWYgKi8sCisgICAgMCAvKiAweGYwICovLCAwIC8qIDB4ZjEgKi8sIDAgLyogMHhmMiAqLywgMCAvKiAweGYzICovLAorICAgIDAgLyogMHhmNCAqLywgMCAvKiAweGY1ICovLCAwIC8qIDB4ZjYgKi8sIDAgLyogMHhmNyAqLywKKyAgICAwIC8qIDB4ZjggKi8sIDAgLyogMHhmOSAqLywgMCAvKiAweGZhICovLCAwIC8qIDB4ZmIgKi8sCisgICAgMCAvKiAweGZjICovLCAwIC8qIDB4ZmQgKi8sIDAgLyogMHhmZSAqLywgMCAvKiAweGZmICovCit9OworCitpbnQgbmdodHRwMl9jaGVja19hdXRob3JpdHkoY29uc3QgdWludDhfdCAqdmFsdWUsIHNpemVfdCBsZW4pIHsKKyAgY29uc3QgdWludDhfdCAqbGFzdDsKKyAgZm9yIChsYXN0ID0gdmFsdWUgKyBsZW47IHZhbHVlICE9IGxhc3Q7ICsrdmFsdWUpIHsKKyAgICBpZiAoIVZBTElEX0FVVEhPUklUWV9DSEFSU1sqdmFsdWVdKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3VpbnQ4X3QgKm5naHR0cDJfY3B5bWVtKHVpbnQ4X3QgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbikgeworICBpZiAobGVuID09IDApIHsKKyAgICByZXR1cm4gZGVzdDsKKyAgfQorCisgIG1lbWNweShkZXN0LCBzcmMsIGxlbik7CisKKyAgcmV0dXJuIGRlc3QgKyBsZW47Cit9CisKK2NvbnN0IGNoYXIgKm5naHR0cDJfaHR0cDJfc3RyZXJyb3IodWludDMyX3QgZXJyb3JfY29kZSkgeworICBzd2l0Y2ggKGVycm9yX2NvZGUpIHsKKyAgY2FzZSBOR0hUVFAyX05PX0VSUk9SOgorICAgIHJldHVybiAiTk9fRVJST1IiOworICBjYXNlIE5HSFRUUDJfUFJPVE9DT0xfRVJST1I6CisgICAgcmV0dXJuICJQUk9UT0NPTF9FUlJPUiI7CisgIGNhc2UgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUjoKKyAgICByZXR1cm4gIklOVEVSTkFMX0VSUk9SIjsKKyAgY2FzZSBOR0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUjoKKyAgICByZXR1cm4gIkZMT1dfQ09OVFJPTF9FUlJPUiI7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19USU1FT1VUOgorICAgIHJldHVybiAiU0VUVElOR1NfVElNRU9VVCI7CisgIGNhc2UgTkdIVFRQMl9TVFJFQU1fQ0xPU0VEOgorICAgIHJldHVybiAiU1RSRUFNX0NMT1NFRCI7CisgIGNhc2UgTkdIVFRQMl9GUkFNRV9TSVpFX0VSUk9SOgorICAgIHJldHVybiAiRlJBTUVfU0laRV9FUlJPUiI7CisgIGNhc2UgTkdIVFRQMl9SRUZVU0VEX1NUUkVBTToKKyAgICByZXR1cm4gIlJFRlVTRURfU1RSRUFNIjsKKyAgY2FzZSBOR0hUVFAyX0NBTkNFTDoKKyAgICByZXR1cm4gIkNBTkNFTCI7CisgIGNhc2UgTkdIVFRQMl9DT01QUkVTU0lPTl9FUlJPUjoKKyAgICByZXR1cm4gIkNPTVBSRVNTSU9OX0VSUk9SIjsKKyAgY2FzZSBOR0hUVFAyX0NPTk5FQ1RfRVJST1I6CisgICAgcmV0dXJuICJDT05ORUNUX0VSUk9SIjsKKyAgY2FzZSBOR0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNOgorICAgIHJldHVybiAiRU5IQU5DRV9ZT1VSX0NBTE0iOworICBjYXNlIE5HSFRUUDJfSU5BREVRVUFURV9TRUNVUklUWToKKyAgICByZXR1cm4gIklOQURFUVVBVEVfU0VDVVJJVFkiOworICBjYXNlIE5HSFRUUDJfSFRUUF8xXzFfUkVRVUlSRUQ6CisgICAgcmV0dXJuICJIVFRQXzFfMV9SRVFVSVJFRCI7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9oZWxwZXIuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmMThjZQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaGVscGVyLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX0hFTFBFUl9ICisjZGVmaW5lIE5HSFRUUDJfSEVMUEVSX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisjaW5jbHVkZSAibmdodHRwMl9tZW0uaCIKKworI2RlZmluZSBuZ2h0dHAyX21pbihBLCBCKSAoKEEpIDwgKEIpID8gKEEpIDogKEIpKQorI2RlZmluZSBuZ2h0dHAyX21heChBLCBCKSAoKEEpID4gKEIpID8gKEEpIDogKEIpKQorCisjZGVmaW5lIGxzdHJlcShBLCBCLCBOKSAoKHNpemVvZigoQSkpIC0gMSkgPT0gKE4pICYmIG1lbWNtcCgoQSksIChCKSwgKE4pKSA9PSAwKQorCisjZGVmaW5lIG5naHR0cDJfc3RydWN0X29mKHB0ciwgdHlwZSwgbWVtYmVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKHR5cGUgKikodm9pZCAqKSgoY2hhciAqKShwdHIpLW9mZnNldG9mKHR5cGUsIG1lbWJlcikpKQorCisvKgorICogQ29waWVzIDIgYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyIHxufCBpbiBob3N0IGJ5dGUgb3JkZXIgdG8gfGJ1ZnwgaW4KKyAqIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqLwordm9pZCBuZ2h0dHAyX3B1dF91aW50MTZiZSh1aW50OF90ICpidWYsIHVpbnQxNl90IG4pOworCisvKgorICogQ29waWVzIDQgYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyIHxufCBpbiBob3N0IGJ5dGUgb3JkZXIgdG8gfGJ1ZnwgaW4KKyAqIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqLwordm9pZCBuZ2h0dHAyX3B1dF91aW50MzJiZSh1aW50OF90ICpidWYsIHVpbnQzMl90IG4pOworCisvKgorICogUmV0cmlldmVzIDIgYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyIHN0b3JlZCBpbiB8ZGF0YXwgaW4gbmV0d29yayBieXRlCisgKiBvcmRlciBhbmQgcmV0dXJucyBpdCBpbiBob3N0IGJ5dGUgb3JkZXIuCisgKi8KK3VpbnQxNl90IG5naHR0cDJfZ2V0X3VpbnQxNihjb25zdCB1aW50OF90ICpkYXRhKTsKKworLyoKKyAqIFJldHJpZXZlcyA0IGJ5dGUgdW5zaWduZWQgaW50ZWdlciBzdG9yZWQgaW4gfGRhdGF8IGluIG5ldHdvcmsgYnl0ZQorICogb3JkZXIgYW5kIHJldHVybnMgaXQgaW4gaG9zdCBieXRlIG9yZGVyLgorICovCit1aW50MzJfdCBuZ2h0dHAyX2dldF91aW50MzIoY29uc3QgdWludDhfdCAqZGF0YSk7CisKK3ZvaWQgbmdodHRwMl9kb3duY2FzZSh1aW50OF90ICpzLCBzaXplX3QgbGVuKTsKKworLyoKKyAqIEFkanVzdHMgfCpsb2NhbF93aW5kb3dfc2l6ZV9wdHJ8LCB8KnJlY3Zfd2luZG93X3NpemVfcHRyfCwKKyAqIHwqcmVjdl9yZWR1Y3Rpb25fcHRyfCB3aXRoIHwqZGVsdGFfcHRyfCB3aGljaCBpcyB0aGUKKyAqIFdJTkRPV19VUERBVEUncyB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgc2VudCBmcm9tIGxvY2FsIHNpZGUuIElmCisgKiB8ZGVsdGF8IGlzIHN0cmljdGx5IGxhcmdlciB0aGFuIHwqcmVjdl93aW5kb3dfc2l6ZV9wdHJ8LAorICogfCpsb2NhbF93aW5kb3dfc2l6ZV9wdHJ8IGlzIGluY3JlYXNlZCBieSBkZWx0YSAtCisgKiAqcmVjdl93aW5kb3dfc2l6ZV9wdHIuIElmIHxkZWx0YXwgaXMgbmVnYXRpdmUsCisgKiB8KmxvY2FsX3dpbmRvd19zaXplX3B0cnwgaXMgZGVjcmVhc2VkIGJ5IGRlbHRhLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MCisgKiAgICAgbG9jYWxfd2luZG93X3NpemUgb3ZlcmZsb3cgb3IgZ2V0cyBuZWdhdGl2ZS4KKyAqLworaW50IG5naHR0cDJfYWRqdXN0X2xvY2FsX3dpbmRvd19zaXplKGludDMyX3QgKmxvY2FsX3dpbmRvd19zaXplX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpyZWN2X3dpbmRvd19zaXplX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpyZWN2X3JlZHVjdGlvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqZGVsdGFfcHRyKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSBuZ2h0dHAyX2FkanVzdF9sb2NhbF93aW5kb3dfc2l6ZSgpLiAgVGhlCisgKiBkaWZmZXJlbmNlIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBhc3N1bWVzICpkZWx0YV9wdHIgPj0gMCwgYW5kCisgKiAqcmVjdl93aW5kb3dfc2l6ZV9wdHIgaXMgbm90IGRlY3JlYXNlZCBieSAqZGVsdGFfcHRyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MCisgKiAgICAgbG9jYWxfd2luZG93X3NpemUgb3ZlcmZsb3cgb3IgZ2V0cyBuZWdhdGl2ZS4KKyAqLworaW50IG5naHR0cDJfaW5jcmVhc2VfbG9jYWxfd2luZG93X3NpemUoaW50MzJfdCAqbG9jYWxfd2luZG93X3NpemVfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqcmVjdl93aW5kb3dfc2l6ZV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpyZWN2X3JlZHVjdGlvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpkZWx0YV9wdHIpOworCisvKgorICogUmV0dXJucyBub24temVybyBpZiB0aGUgZnVuY3Rpb24gZGVjaWRlZCB0aGF0IFdJTkRPV19VUERBVEUgc2hvdWxkCisgKiBiZSBzZW50LgorICovCitpbnQgbmdodHRwMl9zaG91bGRfc2VuZF93aW5kb3dfdXBkYXRlKGludDMyX3QgbG9jYWxfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcmVjdl93aW5kb3dfc2l6ZSk7CisKKy8qCisgKiBDb3BpZXMgdGhlIGJ1ZmZlciB8c3JjfCBvZiBsZW5ndGggfGxlbnwgdG8gdGhlIGRlc3RpbmF0aW9uIHBvaW50ZWQKKyAqIGJ5IHRoZSB8ZGVzdHwsIGFzc3VtaW5nIHRoYXQgdGhlIHxkZXN0fCBpcyBhdCBsZXN0IHxsZW58IGJ5dGVzIGxvbmcKKyAqIC4gUmV0dXJucyBkZXN0ICsgbGVuLgorICovCit1aW50OF90ICpuZ2h0dHAyX2NweW1lbSh1aW50OF90ICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pOworCisjZW5kaWYgLyogTkdIVFRQMl9IRUxQRVJfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9odHRwLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2h0dHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmY1N2I2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9odHRwLmMKQEAgLTAsMCArMSw1MzAgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfaHR0cC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIm5naHR0cDJfaGQuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2hlbHBlci5oIgorCitzdGF0aWMgdWludDhfdCBkb3duY2FzZSh1aW50OF90IGMpIHsKKyAgcmV0dXJuICdBJyA8PSBjICYmIGMgPD0gJ1onID8gKHVpbnQ4X3QpKGMgLSAnQScgKyAnYScpIDogYzsKK30KKworc3RhdGljIGludCBtZW1pZXEoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgc2l6ZV90IG4pIHsKKyAgc2l6ZV90IGk7CisgIGNvbnN0IHVpbnQ4X3QgKmFhID0gYSwgKmJiID0gYjsKKworICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgaWYgKGRvd25jYXNlKGFhW2ldKSAhPSBkb3duY2FzZShiYltpXSkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworI2RlZmluZSBsc3RyaWVxKEEsIEIsIE4pICgoc2l6ZW9mKChBKSkgLSAxKSA9PSAoTikgJiYgbWVtaWVxKChBKSwgKEIpLCAoTikpKQorCitzdGF0aWMgaW50NjRfdCBwYXJzZV91aW50KGNvbnN0IHVpbnQ4X3QgKnMsIHNpemVfdCBsZW4pIHsKKyAgaW50NjRfdCBuID0gMDsKKyAgc2l6ZV90IGk7CisgIGlmIChsZW4gPT0gMCkgeworICAgIHJldHVybiAtMTsKKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICBpZiAoJzAnIDw9IHNbaV0gJiYgc1tpXSA8PSAnOScpIHsKKyAgICAgIGlmIChuID4gSU5UNjRfTUFYIC8gMTApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICAgICAgbiAqPSAxMDsKKyAgICAgIGlmIChuID4gSU5UNjRfTUFYIC0gKHNbaV0gLSAnMCcpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgICAgIG4gKz0gc1tpXSAtICcwJzsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgbHdzKGNvbnN0IHVpbnQ4X3QgKnMsIHNpemVfdCBuKSB7CisgIHNpemVfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgaWYgKHNbaV0gIT0gJyAnICYmIHNbaV0gIT0gJ1x0JykgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNoZWNrX3BzZXVkb19oZWFkZXIobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgbmdodHRwMl9oZF9udiAqbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWcpIHsKKyAgaWYgKHN0cmVhbS0+aHR0cF9mbGFncyAmIGZsYWcpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAobHdzKG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgc3RyZWFtLT5odHRwX2ZsYWdzID0gKHVpbnQxNl90KShzdHJlYW0tPmh0dHBfZmxhZ3MgfCBmbGFnKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXhwZWN0X3Jlc3BvbnNlX2JvZHkobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfSEVBRCkgPT0gMCAmJgorICAgICAgICAgc3RyZWFtLT5zdGF0dXNfY29kZSAvIDEwMCAhPSAxICYmIHN0cmVhbS0+c3RhdHVzX2NvZGUgIT0gMzA0ICYmCisgICAgICAgICBzdHJlYW0tPnN0YXR1c19jb2RlICE9IDIwNDsKK30KKworLyogRm9yICJodHRwIiBvciAiaHR0cHMiIFVSSXMsIE9QVElPTlMgcmVxdWVzdCBtYXkgaGF2ZSAiKiIgaW4gOnBhdGgKKyAgIGhlYWRlciBmaWVsZCB0byByZXByZXNlbnQgc3lzdGVtLXdpZGUgT1BUSU9OUyByZXF1ZXN0LiAgT3RoZXJ3aXNlLAorICAgOnBhdGggaGVhZGVyIGZpZWxkIHZhbHVlIG11c3Qgc3RhcnQgd2l0aCAiLyIuICBUaGlzIGZ1bmN0aW9uIG11c3QKKyAgIGJlIGNhbGxlZCBhZnRlciAiOm1ldGhvZCIgaGVhZGVyIGZpZWxkIHdhcyByZWNlaXZlZC4gIFRoaXMgZnVuY3Rpb24KKyAgIHJldHVybnMgbm9uemVybyBpZiBwYXRoIGlzIHZhbGlkLiovCitzdGF0aWMgaW50IGNoZWNrX3BhdGgobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX1NDSEVNRV9IVFRQKSA9PSAwIHx8CisgICAgICAgICAoKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX1BBVEhfUkVHVUxBUikgfHwKKyAgICAgICAgICAoKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfT1BUSU9OUykgJiYKKyAgICAgICAgICAgKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX1BBVEhfQVNURVJJU0spKSk7Cit9CisKK3N0YXRpYyBpbnQgaHR0cF9yZXF1ZXN0X29uX2hlYWRlcihuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBuZ2h0dHAyX2hkX252ICpudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJhaWxlciwgaW50IGNvbm5lY3RfcHJvdG9jb2wpIHsKKyAgaWYgKG52LT5uYW1lLT5iYXNlWzBdID09ICc6JykgeworICAgIGlmICh0cmFpbGVyIHx8CisgICAgICAgIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19QU0VVRE9fSEVBREVSX0RJU0FMTE9XRUQpKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICB9CisKKyAgc3dpdGNoIChudi0+dG9rZW4pIHsKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX19BVVRIT1JJVFk6CisgICAgaWYgKCFjaGVja19wc2V1ZG9faGVhZGVyKHN0cmVhbSwgbnYsIE5HSFRUUDJfSFRUUF9GTEFHX19BVVRIT1JJVFkpKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfVE9LRU5fX01FVEhPRDoKKyAgICBpZiAoIWNoZWNrX3BzZXVkb19oZWFkZXIoc3RyZWFtLCBudiwgTkdIVFRQMl9IVFRQX0ZMQUdfX01FVEhPRCkpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgc3dpdGNoIChudi0+dmFsdWUtPmxlbikgeworICAgIGNhc2UgNDoKKyAgICAgIGlmIChsc3RyZXEoIkhFQUQiLCBudi0+dmFsdWUtPmJhc2UsIG52LT52YWx1ZS0+bGVuKSkgeworICAgICAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9IRUFEOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSA3OgorICAgICAgc3dpdGNoIChudi0+dmFsdWUtPmJhc2VbNl0pIHsKKyAgICAgIGNhc2UgJ1QnOgorICAgICAgICBpZiAobHN0cmVxKCJDT05ORUNUIiwgbnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbikpIHsKKyAgICAgICAgICBpZiAoc3RyZWFtLT5zdHJlYW1faWQgJSAyID09IDApIHsKKyAgICAgICAgICAgIC8qIHdlIHdvbid0IGFsbG93IENPTk5FQ1QgZm9yIHB1c2ggKi8KKyAgICAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICAgICAgICB9CisgICAgICAgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfQ09OTkVDVDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ1MnOgorICAgICAgICBpZiAobHN0cmVxKCJPUFRJT05TIiwgbnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbikpIHsKKyAgICAgICAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9PUFRJT05TOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfVE9LRU5fX1BBVEg6CisgICAgaWYgKCFjaGVja19wc2V1ZG9faGVhZGVyKHN0cmVhbSwgbnYsIE5HSFRUUDJfSFRUUF9GTEFHX19QQVRIKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBpZiAobnYtPnZhbHVlLT5iYXNlWzBdID09ICcvJykgeworICAgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX1BBVEhfUkVHVUxBUjsKKyAgICB9IGVsc2UgaWYgKG52LT52YWx1ZS0+bGVuID09IDEgJiYgbnYtPnZhbHVlLT5iYXNlWzBdID09ICcqJykgeworICAgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX1BBVEhfQVNURVJJU0s7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfVE9LRU5fX1NDSEVNRToKKyAgICBpZiAoIWNoZWNrX3BzZXVkb19oZWFkZXIoc3RyZWFtLCBudiwgTkdIVFRQMl9IVFRQX0ZMQUdfX1NDSEVNRSkpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgaWYgKChudi0+dmFsdWUtPmxlbiA9PSA0ICYmIG1lbWllcSgiaHR0cCIsIG52LT52YWx1ZS0+YmFzZSwgNCkpIHx8CisgICAgICAgIChudi0+dmFsdWUtPmxlbiA9PSA1ICYmIG1lbWllcSgiaHR0cHMiLCBudi0+dmFsdWUtPmJhc2UsIDUpKSkgeworICAgICAgc3RyZWFtLT5odHRwX2ZsYWdzIHw9IE5HSFRUUDJfSFRUUF9GTEFHX1NDSEVNRV9IVFRQOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX19QUk9UT0NPTDoKKyAgICBpZiAoIWNvbm5lY3RfcHJvdG9jb2wpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisKKyAgICBpZiAoIWNoZWNrX3BzZXVkb19oZWFkZXIoc3RyZWFtLCBudiwgTkdIVFRQMl9IVFRQX0ZMQUdfX1BST1RPQ09MKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX0hPU1Q6CisgICAgaWYgKCFjaGVja19wc2V1ZG9faGVhZGVyKHN0cmVhbSwgbnYsIE5HSFRUUDJfSFRUUF9GTEFHX0hPU1QpKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfVE9LRU5fQ09OVEVOVF9MRU5HVEg6IHsKKyAgICBpZiAoc3RyZWFtLT5jb250ZW50X2xlbmd0aCAhPSAtMSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBzdHJlYW0tPmNvbnRlbnRfbGVuZ3RoID0gcGFyc2VfdWludChudi0+dmFsdWUtPmJhc2UsIG52LT52YWx1ZS0+bGVuKTsKKyAgICBpZiAoc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9PSAtMSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICAvKiBkaXNhbGxvd2VkIGhlYWRlciBmaWVsZHMgKi8KKyAgY2FzZSBOR0hUVFAyX1RPS0VOX0NPTk5FQ1RJT046CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9LRUVQX0FMSVZFOgorICBjYXNlIE5HSFRUUDJfVE9LRU5fUFJPWFlfQ09OTkVDVElPTjoKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX1RSQU5TRkVSX0VOQ09ESU5HOgorICBjYXNlIE5HSFRUUDJfVE9LRU5fVVBHUkFERToKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9URToKKyAgICBpZiAoIWxzdHJpZXEoInRyYWlsZXJzIiwgbnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbikpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgaWYgKG52LT5uYW1lLT5iYXNlWzBdID09ICc6JykgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgfQorCisgIGlmIChudi0+bmFtZS0+YmFzZVswXSAhPSAnOicpIHsKKyAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfUFNFVURPX0hFQURFUl9ESVNBTExPV0VEOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHR0cF9yZXNwb25zZV9vbl9oZWFkZXIobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgbmdodHRwMl9oZF9udiAqbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cmFpbGVyKSB7CisgIGlmIChudi0+bmFtZS0+YmFzZVswXSA9PSAnOicpIHsKKyAgICBpZiAodHJhaWxlciB8fAorICAgICAgICAoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfUFNFVURPX0hFQURFUl9ESVNBTExPV0VEKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgfQorCisgIHN3aXRjaCAobnYtPnRva2VuKSB7CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9fU1RBVFVTOiB7CisgICAgaWYgKCFjaGVja19wc2V1ZG9faGVhZGVyKHN0cmVhbSwgbnYsIE5HSFRUUDJfSFRUUF9GTEFHX19TVEFUVVMpKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIGlmIChudi0+dmFsdWUtPmxlbiAhPSAzKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIHN0cmVhbS0+c3RhdHVzX2NvZGUgPSAoaW50MTZfdClwYXJzZV91aW50KG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pOworICAgIGlmIChzdHJlYW0tPnN0YXR1c19jb2RlID09IC0xIHx8IHN0cmVhbS0+c3RhdHVzX2NvZGUgPT0gMTAxKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIGJyZWFrOworICB9CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9DT05URU5UX0xFTkdUSDogeworICAgIGlmIChzdHJlYW0tPnN0YXR1c19jb2RlID09IDIwNCkgeworICAgICAgLyogY29udGVudC1sZW5ndGggaGVhZGVyIGZpZWxkIGluIDIwNCByZXNwb25zZSBpcyBwcm9oaWJpdGVkIGJ5CisgICAgICAgICBSRkMgNzIzMC4gIEJ1dCBzb21lIHdpZGVseSB1c2VkIHNlcnZlcnMgc2VuZCBjb250ZW50LWxlbmd0aDoKKyAgICAgICAgIDAuICBVbnRpbCB0aGV5IGdldCBmaXhlZCwgd2UgaWdub3JlIGl0LiAqLworICAgICAgaWYgKHN0cmVhbS0+Y29udGVudF9sZW5ndGggIT0gLTEpIHsKKyAgICAgICAgLyogRm91bmQgbXVsdGlwbGUgY29udGVudC1sZW5ndGggZmllbGQgKi8KKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgICAgfQorICAgICAgaWYgKCFsc3RyaWVxKCIwIiwgbnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgICAgfQorICAgICAgc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9IDA7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfUkVNT1ZFX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBpZiAoc3RyZWFtLT5zdGF0dXNfY29kZSAvIDEwMCA9PSAxKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgfQorICAgIC8qIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjMgKi8KKyAgICBpZiAoc3RyZWFtLT5zdGF0dXNfY29kZSAvIDEwMCA9PSAyICYmCisgICAgICAgIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0NPTk5FQ1QpKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfUkVNT1ZFX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBpZiAoc3RyZWFtLT5jb250ZW50X2xlbmd0aCAhPSAtMSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBzdHJlYW0tPmNvbnRlbnRfbGVuZ3RoID0gcGFyc2VfdWludChudi0+dmFsdWUtPmJhc2UsIG52LT52YWx1ZS0+bGVuKTsKKyAgICBpZiAoc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9PSAtMSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICAvKiBkaXNhbGxvd2VkIGhlYWRlciBmaWVsZHMgKi8KKyAgY2FzZSBOR0hUVFAyX1RPS0VOX0NPTk5FQ1RJT046CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9LRUVQX0FMSVZFOgorICBjYXNlIE5HSFRUUDJfVE9LRU5fUFJPWFlfQ09OTkVDVElPTjoKKyAgY2FzZSBOR0hUVFAyX1RPS0VOX1RSQU5TRkVSX0VOQ09ESU5HOgorICBjYXNlIE5HSFRUUDJfVE9LRU5fVVBHUkFERToKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgIGNhc2UgTkdIVFRQMl9UT0tFTl9URToKKyAgICBpZiAoIWxzdHJpZXEoInRyYWlsZXJzIiwgbnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbikpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjsKKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgaWYgKG52LT5uYW1lLT5iYXNlWzBdID09ICc6JykgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgfQorCisgIGlmIChudi0+bmFtZS0+YmFzZVswXSAhPSAnOicpIHsKKyAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfUFNFVURPX0hFQURFUl9ESVNBTExPV0VEOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfc2NoZW1lKGNvbnN0IHVpbnQ4X3QgKnZhbHVlLCBzaXplX3QgbGVuKSB7CisgIGNvbnN0IHVpbnQ4X3QgKmxhc3Q7CisgIGlmIChsZW4gPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKCEoKCdBJyA8PSAqdmFsdWUgJiYgKnZhbHVlIDw9ICdaJykgfHwgKCdhJyA8PSAqdmFsdWUgJiYgKnZhbHVlIDw9ICd6JykpKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBsYXN0ID0gdmFsdWUgKyBsZW47CisgICsrdmFsdWU7CisKKyAgZm9yICg7IHZhbHVlICE9IGxhc3Q7ICsrdmFsdWUpIHsKKyAgICBpZiAoISgoJ0EnIDw9ICp2YWx1ZSAmJiAqdmFsdWUgPD0gJ1onKSB8fAorICAgICAgICAgICgnYScgPD0gKnZhbHVlICYmICp2YWx1ZSA8PSAneicpIHx8CisgICAgICAgICAgKCcwJyA8PSAqdmFsdWUgJiYgKnZhbHVlIDw9ICc5JykgfHwgKnZhbHVlID09ICcrJyB8fCAqdmFsdWUgPT0gJy0nIHx8CisgICAgICAgICAgKnZhbHVlID09ICcuJykpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworaW50IG5naHR0cDJfaHR0cF9vbl9oZWFkZXIobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsIG5naHR0cDJfaGRfbnYgKm52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRyYWlsZXIpIHsKKyAgaW50IHJ2OworCisgIC8qIFdlIGFyZSBzdHJpY3QgZm9yIHBzZXVkbyBoZWFkZXIgZmllbGQuICBPbmUgYmFkIGNoYXJhY3RlciBzaG91bGQKKyAgICAgbGVhZCB0byBmYWlsLiAgT1RPSCwgd2Ugc2hvdWxkIGJlIGEgYml0IGZvcmdpdmluZyBmb3IgcmVndWxhcgorICAgICBoZWFkZXJzLCBzaW5jZSBleGlzdGluZyBwdWJsaWMgaW50ZXJuZXQgaGFzIHNvIG11Y2ggaWxsZWdhbAorICAgICBoZWFkZXJzIGZsb2F0aW5nIGFyb3VuZCBhbmQgaWYgd2Uga2lsbCB0aGUgc3RyZWFtIGJlY2F1c2Ugb2YKKyAgICAgdGhpcywgd2UgbWF5IGRpc3J1cHQgbWFueSB3ZWIgc2l0ZXMgYW5kL29yIGxpYnJhcmllcy4gIFNvIHdlCisgICAgIGJlY29tZSBjb25zZXJ2YXRpdmUgaGVyZSwgYW5kIGp1c3QgaWdub3JlIHRob3NlIGlsbGVnYWwgcmVndWxhcgorICAgICBoZWFkZXJzLiAqLworICBpZiAoIW5naHR0cDJfY2hlY2tfaGVhZGVyX25hbWUobnYtPm5hbWUtPmJhc2UsIG52LT5uYW1lLT5sZW4pKSB7CisgICAgc2l6ZV90IGk7CisgICAgaWYgKG52LT5uYW1lLT5sZW4gPiAwICYmIG52LT5uYW1lLT5iYXNlWzBdID09ICc6JykgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICAvKiBoZWFkZXIgZmllbGQgbmFtZSBtdXN0IGJlIGxvd2VyLWNhc2VkIHdpdGhvdXQgZXhjZXB0aW9uICovCisgICAgZm9yIChpID0gMDsgaSA8IG52LT5uYW1lLT5sZW47ICsraSkgeworICAgICAgdWludDhfdCBjID0gbnYtPm5hbWUtPmJhc2VbaV07CisgICAgICBpZiAoJ0EnIDw9IGMgJiYgYyA8PSAnWicpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgICAgfQorICAgIH0KKyAgICAvKiBXaGVuIGlnbm9yaW5nIHJlZ3VsYXIgaGVhZGVycywgd2Ugc2V0IHRoaXMgZmxhZyBzbyB0aGF0IHdlCisgICAgICAgc3RpbGwgZW5mb3JjZSBoZWFkZXIgZmllbGQgb3JkZXJpbmcgcnVsZSBmb3IgcHNldWRvIGhlYWRlcgorICAgICAgIGZpZWxkcy4gKi8KKyAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfUFNFVURPX0hFQURFUl9ESVNBTExPV0VEOworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fSFRUUF9IRUFERVI7CisgIH0KKworICBpZiAobnYtPnRva2VuID09IE5HSFRUUDJfVE9LRU5fX0FVVEhPUklUWSB8fAorICAgICAgbnYtPnRva2VuID09IE5HSFRUUDJfVE9LRU5fSE9TVCkgeworICAgIHJ2ID0gbmdodHRwMl9jaGVja19hdXRob3JpdHkobnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbik7CisgIH0gZWxzZSBpZiAobnYtPnRva2VuID09IE5HSFRUUDJfVE9LRU5fX1NDSEVNRSkgeworICAgIHJ2ID0gY2hlY2tfc2NoZW1lKG52LT52YWx1ZS0+YmFzZSwgbnYtPnZhbHVlLT5sZW4pOworICB9IGVsc2UgeworICAgIHJ2ID0gbmdodHRwMl9jaGVja19oZWFkZXJfdmFsdWUobnYtPnZhbHVlLT5iYXNlLCBudi0+dmFsdWUtPmxlbik7CisgIH0KKworICBpZiAocnYgPT0gMCkgeworICAgIGFzc2VydChudi0+bmFtZS0+bGVuID4gMCk7CisgICAgaWYgKG52LT5uYW1lLT5iYXNlWzBdID09ICc6JykgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSOworICAgIH0KKyAgICAvKiBXaGVuIGlnbm9yaW5nIHJlZ3VsYXIgaGVhZGVycywgd2Ugc2V0IHRoaXMgZmxhZyBzbyB0aGF0IHdlCisgICAgICAgc3RpbGwgZW5mb3JjZSBoZWFkZXIgZmllbGQgb3JkZXJpbmcgcnVsZSBmb3IgcHNldWRvIGhlYWRlcgorICAgICAgIGZpZWxkcy4gKi8KKyAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfUFNFVURPX0hFQURFUl9ESVNBTExPV0VEOworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fSFRUUF9IRUFERVI7CisgIH0KKworICBpZiAoc2Vzc2lvbi0+c2VydmVyIHx8IGZyYW1lLT5oZC50eXBlID09IE5HSFRUUDJfUFVTSF9QUk9NSVNFKSB7CisgICAgcmV0dXJuIGh0dHBfcmVxdWVzdF9vbl9oZWFkZXIoc3RyZWFtLCBudiwgdHJhaWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZXJ2ZXIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+cGVuZGluZ19lbmFibGVfY29ubmVjdF9wcm90b2NvbCk7CisgIH0KKworICByZXR1cm4gaHR0cF9yZXNwb25zZV9vbl9oZWFkZXIoc3RyZWFtLCBudiwgdHJhaWxlcik7Cit9CisKK2ludCBuZ2h0dHAyX2h0dHBfb25fcmVxdWVzdF9oZWFkZXJzKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpZiAoIShzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19fUFJPVE9DT0wpICYmCisgICAgICAoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9DT05ORUNUKSkgeworICAgIGlmICgoc3RyZWFtLT5odHRwX2ZsYWdzICYKKyAgICAgICAgIChOR0hUVFAyX0hUVFBfRkxBR19fU0NIRU1FIHwgTkdIVFRQMl9IVFRQX0ZMQUdfX1BBVEgpKSB8fAorICAgICAgICAoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfX0FVVEhPUklUWSkgPT0gMCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzdHJlYW0tPmNvbnRlbnRfbGVuZ3RoID0gLTE7CisgIH0gZWxzZSB7CisgICAgaWYgKChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19SRVFfSEVBREVSUykgIT0KKyAgICAgICAgICAgIE5HSFRUUDJfSFRUUF9GTEFHX1JFUV9IRUFERVJTIHx8CisgICAgICAgIChzdHJlYW0tPmh0dHBfZmxhZ3MgJgorICAgICAgICAgKE5HSFRUUDJfSFRUUF9GTEFHX19BVVRIT1JJVFkgfCBOR0hUVFAyX0hUVFBfRkxBR19IT1NUKSkgPT0gMCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX19QUk9UT0NPTCkgJiYKKyAgICAgICAgKChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0NPTk5FQ1QpID09IDAgfHwKKyAgICAgICAgIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19fQVVUSE9SSVRZKSA9PSAwKSkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoIWNoZWNrX3BhdGgoc3RyZWFtKSkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorCisgIGlmIChmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX1BVU0hfUFJPTUlTRSkgeworICAgIC8qIHdlIGFyZSBnb2luZyB0byByZXVzZSBkYXRhIGZpZWxkcyBmb3IgdXBjb21pbmcgcmVzcG9uc2UuICBDbGVhcgorICAgICAgIHRoZW0gbm93LCBleGNlcHQgZm9yIG1ldGhvZCBmbGFncy4gKi8KKyAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgJj0gTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9BTEw7CisgICAgc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9IC0xOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2h0dHBfb25fcmVzcG9uc2VfaGVhZGVycyhuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGlmICgoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfX1NUQVRVUykgPT0gMCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChzdHJlYW0tPnN0YXR1c19jb2RlIC8gMTAwID09IDEpIHsKKyAgICAvKiBub24tZmluYWwgcmVzcG9uc2UgKi8KKyAgICBzdHJlYW0tPmh0dHBfZmxhZ3MgPQorICAgICAgICAodWludDE2X3QpKChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0FMTCkgfAorICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfSFRUUF9GTEFHX0VYUEVDVF9GSU5BTF9SRVNQT05TRSk7CisgICAgc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9IC0xOworICAgIHN0cmVhbS0+c3RhdHVzX2NvZGUgPSAtMTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN0cmVhbS0+aHR0cF9mbGFncyA9CisgICAgICAodWludDE2X3QpKHN0cmVhbS0+aHR0cF9mbGFncyAmIH5OR0hUVFAyX0hUVFBfRkxBR19FWFBFQ1RfRklOQUxfUkVTUE9OU0UpOworCisgIGlmICghZXhwZWN0X3Jlc3BvbnNlX2JvZHkoc3RyZWFtKSkgeworICAgIHN0cmVhbS0+Y29udGVudF9sZW5ndGggPSAwOworICB9IGVsc2UgaWYgKHN0cmVhbS0+aHR0cF9mbGFncyAmIChOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0NPTk5FQ1QgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX1VQR1JBREVfV09SS0FST1VORCkpIHsKKyAgICBzdHJlYW0tPmNvbnRlbnRfbGVuZ3RoID0gLTE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfaHR0cF9vbl90cmFpbGVyX2hlYWRlcnMobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgICh2b2lkKXN0cmVhbTsKKworICBpZiAoKGZyYW1lLT5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNKSA9PSAwKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2h0dHBfb25fcmVtb3RlX2VuZF9zdHJlYW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpZiAoc3RyZWFtLT5odHRwX2ZsYWdzICYgTkdIVFRQMl9IVFRQX0ZMQUdfRVhQRUNUX0ZJTkFMX1JFU1BPTlNFKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYgKHN0cmVhbS0+Y29udGVudF9sZW5ndGggIT0gLTEgJiYKKyAgICAgIHN0cmVhbS0+Y29udGVudF9sZW5ndGggIT0gc3RyZWFtLT5yZWN2X2NvbnRlbnRfbGVuZ3RoKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX2h0dHBfb25fZGF0YV9jaHVuayhuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBzaXplX3QgbikgeworICBzdHJlYW0tPnJlY3ZfY29udGVudF9sZW5ndGggKz0gKGludDY0X3QpbjsKKworICBpZiAoKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX0VYUEVDVF9GSU5BTF9SRVNQT05TRSkgfHwKKyAgICAgIChzdHJlYW0tPmNvbnRlbnRfbGVuZ3RoICE9IC0xICYmCisgICAgICAgc3RyZWFtLT5yZWN2X2NvbnRlbnRfbGVuZ3RoID4gc3RyZWFtLT5jb250ZW50X2xlbmd0aCkpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX2h0dHBfcmVjb3JkX3JlcXVlc3RfbWV0aG9kKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgY29uc3QgbmdodHRwMl9udiAqbnZhOworICBzaXplX3QgbnZsZW47CisgIHNpemVfdCBpOworCisgIHN3aXRjaCAoZnJhbWUtPmhkLnR5cGUpIHsKKyAgY2FzZSBOR0hUVFAyX0hFQURFUlM6CisgICAgbnZhID0gZnJhbWUtPmhlYWRlcnMubnZhOworICAgIG52bGVuID0gZnJhbWUtPmhlYWRlcnMubnZsZW47CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9QVVNIX1BST01JU0U6CisgICAgbnZhID0gZnJhbWUtPnB1c2hfcHJvbWlzZS5udmE7CisgICAgbnZsZW4gPSBmcmFtZS0+cHVzaF9wcm9taXNlLm52bGVuOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHJldHVybjsKKyAgfQorCisgIC8qIFRPRE8gd2Ugc2hvdWxkIGRvIHRoaXMgc3RyaWN0bHkuICovCisgIGZvciAoaSA9IDA7IGkgPCBudmxlbjsgKytpKSB7CisgICAgY29uc3QgbmdodHRwMl9udiAqbnYgPSAmbnZhW2ldOworICAgIGlmICghKG52LT5uYW1lbGVuID09IDcgJiYgbnYtPm5hbWVbNl0gPT0gJ2QnICYmCisgICAgICAgICAgbWVtY21wKCI6bWV0aG8iLCBudi0+bmFtZSwgbnYtPm5hbWVsZW4gLSAxKSA9PSAwKSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmIChsc3RyZXEoIkNPTk5FQ1QiLCBudi0+dmFsdWUsIG52LT52YWx1ZWxlbikpIHsKKyAgICAgIHN0cmVhbS0+aHR0cF9mbGFncyB8PSBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0NPTk5FQ1Q7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChsc3RyZXEoIkhFQUQiLCBudi0+dmFsdWUsIG52LT52YWx1ZWxlbikpIHsKKyAgICAgIHN0cmVhbS0+aHR0cF9mbGFncyB8PSBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0hFQUQ7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHJldHVybjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9odHRwLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX2h0dHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDA1N2NkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9odHRwLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE1IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfSFRUUF9ICisjZGVmaW5lIE5HSFRUUDJfSFRUUF9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKyNpbmNsdWRlICJuZ2h0dHAyX3Nlc3Npb24uaCIKKyNpbmNsdWRlICJuZ2h0dHAyX3N0cmVhbS5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBIVFRQIGhlYWRlciBmaWVsZCB8bnZ8IGluIHxmcmFtZXwgaXMKKyAqIHJlY2VpdmVkIGZvciB8c3RyZWFtfC4gIFRoaXMgZnVuY3Rpb24gd2lsbCB2YWxpZGF0ZSB8bnZ8IGFnYWluc3QKKyAqIHRoZSBjdXJyZW50IHN0YXRlIG9mIHN0cmVhbS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSCisgKiAgICAgSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCB3YXMgcmVjZWl2ZWQuCisgKiBOR0hUVFAyX0VSUl9JR05fSFRUUF9IRUFERVIKKyAqICAgICBJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIHdhcyByZWNlaXZlZCBidXQgaXQgY2FuIGJlIHRyZWF0ZWQgYXMKKyAqICAgICBpZiBpdCB3YXMgbm90IHJlY2VpdmVkIGJlY2F1c2Ugb2YgY29tcGF0aWJpbGl0eSByZWFzb25zLgorICovCitpbnQgbmdodHRwMl9odHRwX29uX2hlYWRlcihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwgbmdodHRwMl9oZF9udiAqbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJhaWxlcik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHJlcXVlc3QgaGVhZGVyIGlzIHJlY2VpdmVkLiAgVGhpcworICogZnVuY3Rpb24gcGVyZm9ybXMgdmFsaWRhdGlvbiBhbmQgcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciAtMS4KKyAqLworaW50IG5naHR0cDJfaHR0cF9vbl9yZXF1ZXN0X2hlYWRlcnMobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gcmVzcG9uc2UgaGVhZGVyIGlzIHJlY2VpdmVkLiAgVGhpcworICogZnVuY3Rpb24gcGVyZm9ybXMgdmFsaWRhdGlvbiBhbmQgcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciAtMS4KKyAqLworaW50IG5naHR0cDJfaHR0cF9vbl9yZXNwb25zZV9oZWFkZXJzKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdHJhaWxlciBoZWFkZXIgKGZvciBib3RoIHJlcXVlc3QgYW5kCisgKiByZXNwb25zZSkgaXMgcmVjZWl2ZWQuICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHZhbGlkYXRpb24gYW5kCisgKiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIC0xLgorICovCitpbnQgbmdodHRwMl9odHRwX29uX3RyYWlsZXJfaGVhZGVycyhuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBFTkRfU1RSRUFNIGZsYWcgaXMgc2VlbiBpbiBpbmNvbWluZworICogZnJhbWUuICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHZhbGlkYXRpb24gYW5kIHJldHVybnMgMCBpZiBpdAorICogc3VjY2VlZHMsIG9yIC0xLgorICovCitpbnQgbmdodHRwMl9odHRwX29uX3JlbW90ZV9lbmRfc3RyZWFtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjaHVuayBvZiBkYXRhIGlzIHJlY2VpdmVkLiAgVGhpcworICogZnVuY3Rpb24gcGVyZm9ybXMgdmFsaWRhdGlvbiBhbmQgcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciAtMS4KKyAqLworaW50IG5naHR0cDJfaHR0cF9vbl9kYXRhX2NodW5rKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIHNpemVfdCBuKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5zcGVjdHMgaGVhZGVyIGZpZWxkIGluIHxmcmFtZXwgYW5kIHJlY29yZHMgaXRzCisgKiBtZXRob2QgaW4gc3RyZWFtLT5odHRwX2ZsYWdzLiAgSWYgZnJhbWUtPmhkLnR5cGUgaXMgbmVpdGhlcgorICogTkdIVFRQMl9IRUFERVJTIG5vciBOR0hUVFAyX1BVU0hfUFJPTUlTRSwgdGhpcyBmdW5jdGlvbiBkb2VzCisgKiBub3RoaW5nLgorICovCit2b2lkIG5naHR0cDJfaHR0cF9yZWNvcmRfcmVxdWVzdF9tZXRob2QobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKKyNlbmRpZiAvKiBOR0hUVFAyX0hUVFBfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9pbnQuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzNTg1YwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfaW50LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfSU5UX0gKKyNkZWZpbmUgTkdIVFRQMl9JTlRfSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisKKy8qIE1hY3JvcywgdHlwZXMgYW5kIGNvbnN0YW50cyBmb3IgaW50ZXJuYWwgdXNlICovCisKKy8qICJsZXNzIiBmdW5jdGlvbiwgcmV0dXJuIG5vbnplcm8gaWYgfGxoc3wgaXMgbGVzcyB0aGFuIHxyaHN8LiAqLwordHlwZWRlZiBpbnQgKCpuZ2h0dHAyX2xlc3MpKGNvbnN0IHZvaWQgKmxocywgY29uc3Qgdm9pZCAqcmhzKTsKKworLyogSW50ZXJuYWwgZXJyb3IgY29kZS4gVGhleSBtdXN0IGJlIGluIHRoZSByYW5nZSBbLTQ5OSwgLTEwMF0sCisgICBpbmNsdXNpdmUuICovCit0eXBlZGVmIGVudW0geworICBOR0hUVFAyX0VSUl9DUkVERU5USUFMX1BFTkRJTkcgPSAtMTAxLAorICBOR0hUVFAyX0VSUl9JR05fSEVBREVSX0JMT0NLID0gLTEwMywKKyAgTkdIVFRQMl9FUlJfSUdOX1BBWUxPQUQgPSAtMTA0LAorICAvKgorICAgKiBJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIHdhcyByZWNlaXZlZCBidXQgaXQgY2FuIGJlIHRyZWF0ZWQgYXMKKyAgICogaWYgaXQgd2FzIG5vdCByZWNlaXZlZCBiZWNhdXNlIG9mIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KKyAgICovCisgIE5HSFRUUDJfRVJSX0lHTl9IVFRQX0hFQURFUiA9IC0xMDUsCisgIC8qCisgICAqIEludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQgd2FzIHJlY2VpdmVkLCBhbmQgaXQgaXMgaWdub3JlZC4KKyAgICogVW5saWtlIE5HSFRUUDJfRVJSX0lHTl9IVFRQX0hFQURFUiwgdGhpcyBkb2VzIG5vdCBpbnZva2UKKyAgICogbmdodHRwMl9vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjay4KKyAgICovCisgIE5HSFRUUDJfRVJSX1JFTU9WRV9IVFRQX0hFQURFUiA9IC0xMDYKK30gbmdodHRwMl9pbnRlcm5hbF9lcnJvcjsKKworI2VuZGlmIC8qIE5HSFRUUDJfSU5UX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWFwLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOWY5N2IKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX21hcC5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX21hcC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgSU5JVElBTF9UQUJMRV9MRU5HVEggMjU2CisKK2ludCBuZ2h0dHAyX21hcF9pbml0KG5naHR0cDJfbWFwICptYXAsIG5naHR0cDJfbWVtICptZW0pIHsKKyAgbWFwLT5tZW0gPSBtZW07CisgIG1hcC0+dGFibGVsZW4gPSBJTklUSUFMX1RBQkxFX0xFTkdUSDsKKyAgbWFwLT50YWJsZSA9CisgICAgICBuZ2h0dHAyX21lbV9jYWxsb2MobWVtLCBtYXAtPnRhYmxlbGVuLCBzaXplb2YobmdodHRwMl9tYXBfZW50cnkgKikpOworICBpZiAobWFwLT50YWJsZSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgbWFwLT5zaXplID0gMDsKKworICByZXR1cm4gMDsKK30KKwordm9pZCBuZ2h0dHAyX21hcF9mcmVlKG5naHR0cDJfbWFwICptYXApIHsKKyAgbmdodHRwMl9tZW1fZnJlZShtYXAtPm1lbSwgbWFwLT50YWJsZSk7Cit9CisKK3ZvaWQgbmdodHRwMl9tYXBfZWFjaF9mcmVlKG5naHR0cDJfbWFwICptYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKShuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnksIHZvaWQgKnB0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIpIHsKKyAgdWludDMyX3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IG1hcC0+dGFibGVsZW47ICsraSkgeworICAgIG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeTsKKyAgICBmb3IgKGVudHJ5ID0gbWFwLT50YWJsZVtpXTsgZW50cnk7KSB7CisgICAgICBuZ2h0dHAyX21hcF9lbnRyeSAqbmV4dCA9IGVudHJ5LT5uZXh0OworICAgICAgZnVuYyhlbnRyeSwgcHRyKTsKKyAgICAgIGVudHJ5ID0gbmV4dDsKKyAgICB9CisgICAgbWFwLT50YWJsZVtpXSA9IE5VTEw7CisgIH0KK30KKworaW50IG5naHR0cDJfbWFwX2VhY2gobmdodHRwMl9tYXAgKm1hcCwKKyAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpKG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeSwgdm9pZCAqcHRyKSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB0cikgeworICBpbnQgcnY7CisgIHVpbnQzMl90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBtYXAtPnRhYmxlbGVuOyArK2kpIHsKKyAgICBuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnk7CisgICAgZm9yIChlbnRyeSA9IG1hcC0+dGFibGVbaV07IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CisgICAgICBydiA9IGZ1bmMoZW50cnksIHB0cik7CisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfbWFwX2VudHJ5X2luaXQobmdodHRwMl9tYXBfZW50cnkgKmVudHJ5LCBrZXlfdHlwZSBrZXkpIHsKKyAgZW50cnktPmtleSA9IGtleTsKKyAgZW50cnktPm5leHQgPSBOVUxMOworfQorCisvKiBTYW1lIGhhc2ggZnVuY3Rpb24gaW4gYW5kcm9pZCBIYXNoTWFwIHNvdXJjZSBjb2RlLiAqLworLyogVGhlIHxtb2R8IG11c3QgYmUgcG93ZXIgb2YgMiAqLworc3RhdGljIHVpbnQzMl90IGhhc2goaW50MzJfdCBrZXksIHVpbnQzMl90IG1vZCkgeworICB1aW50MzJfdCBoID0gKHVpbnQzMl90KWtleTsKKyAgaCBePSAoaCA+PiAyMCkgXiAoaCA+PiAxMik7CisgIGggXj0gKGggPj4gNykgXiAoaCA+PiA0KTsKKyAgcmV0dXJuIGggJiAobW9kIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgaW5zZXJ0KG5naHR0cDJfbWFwX2VudHJ5ICoqdGFibGUsIHVpbnQzMl90IHRhYmxlbGVuLAorICAgICAgICAgICAgICAgICAgbmdodHRwMl9tYXBfZW50cnkgKmVudHJ5KSB7CisgIHVpbnQzMl90IGggPSBoYXNoKGVudHJ5LT5rZXksIHRhYmxlbGVuKTsKKyAgaWYgKHRhYmxlW2hdID09IE5VTEwpIHsKKyAgICB0YWJsZVtoXSA9IGVudHJ5OworICB9IGVsc2UgeworICAgIG5naHR0cDJfbWFwX2VudHJ5ICpwOworICAgIC8qIFdlIHdvbid0IGFsbG93IGR1cGxpY2F0ZWQga2V5LCBzbyBjaGVjayBpdCBvdXQuICovCisgICAgZm9yIChwID0gdGFibGVbaF07IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgICBpZiAocC0+a2V5ID09IGVudHJ5LT5rZXkpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgICB9CisgICAgfQorICAgIGVudHJ5LT5uZXh0ID0gdGFibGVbaF07CisgICAgdGFibGVbaF0gPSBlbnRyeTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogbmV3X3RhYmxlbGVuIG11c3QgYmUgcG93ZXIgb2YgMiAqLworc3RhdGljIGludCByZXNpemUobmdodHRwMl9tYXAgKm1hcCwgdWludDMyX3QgbmV3X3RhYmxlbGVuKSB7CisgIHVpbnQzMl90IGk7CisgIG5naHR0cDJfbWFwX2VudHJ5ICoqbmV3X3RhYmxlOworCisgIG5ld190YWJsZSA9CisgICAgICBuZ2h0dHAyX21lbV9jYWxsb2MobWFwLT5tZW0sIG5ld190YWJsZWxlbiwgc2l6ZW9mKG5naHR0cDJfbWFwX2VudHJ5ICopKTsKKyAgaWYgKG5ld190YWJsZSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8IG1hcC0+dGFibGVsZW47ICsraSkgeworICAgIG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeTsKKyAgICBmb3IgKGVudHJ5ID0gbWFwLT50YWJsZVtpXTsgZW50cnk7KSB7CisgICAgICBuZ2h0dHAyX21hcF9lbnRyeSAqbmV4dCA9IGVudHJ5LT5uZXh0OworICAgICAgZW50cnktPm5leHQgPSBOVUxMOworICAgICAgLyogVGhpcyBmdW5jdGlvbiBtdXN0IHN1Y2NlZWQgKi8KKyAgICAgIGluc2VydChuZXdfdGFibGUsIG5ld190YWJsZWxlbiwgZW50cnkpOworICAgICAgZW50cnkgPSBuZXh0OworICAgIH0KKyAgfQorICBuZ2h0dHAyX21lbV9mcmVlKG1hcC0+bWVtLCBtYXAtPnRhYmxlKTsKKyAgbWFwLT50YWJsZWxlbiA9IG5ld190YWJsZWxlbjsKKyAgbWFwLT50YWJsZSA9IG5ld190YWJsZTsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfbWFwX2luc2VydChuZ2h0dHAyX21hcCAqbWFwLCBuZ2h0dHAyX21hcF9lbnRyeSAqbmV3X2VudHJ5KSB7CisgIGludCBydjsKKyAgLyogTG9hZCBmYWN0b3IgaXMgMC43NSAqLworICBpZiAoKG1hcC0+c2l6ZSArIDEpICogNCA+IG1hcC0+dGFibGVsZW4gKiAzKSB7CisgICAgcnYgPSByZXNpemUobWFwLCBtYXAtPnRhYmxlbGVuICogMik7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKyAgcnYgPSBpbnNlcnQobWFwLT50YWJsZSwgbWFwLT50YWJsZWxlbiwgbmV3X2VudHJ5KTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgKyttYXAtPnNpemU7CisgIHJldHVybiAwOworfQorCituZ2h0dHAyX21hcF9lbnRyeSAqbmdodHRwMl9tYXBfZmluZChuZ2h0dHAyX21hcCAqbWFwLCBrZXlfdHlwZSBrZXkpIHsKKyAgdWludDMyX3QgaDsKKyAgbmdodHRwMl9tYXBfZW50cnkgKmVudHJ5OworICBoID0gaGFzaChrZXksIG1hcC0+dGFibGVsZW4pOworICBmb3IgKGVudHJ5ID0gbWFwLT50YWJsZVtoXTsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpIHsKKyAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpIHsKKyAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBuZ2h0dHAyX21hcF9yZW1vdmUobmdodHRwMl9tYXAgKm1hcCwga2V5X3R5cGUga2V5KSB7CisgIHVpbnQzMl90IGg7CisgIG5naHR0cDJfbWFwX2VudHJ5ICoqZHN0OworCisgIGggPSBoYXNoKGtleSwgbWFwLT50YWJsZWxlbik7CisKKyAgZm9yIChkc3QgPSAmbWFwLT50YWJsZVtoXTsgKmRzdDsgZHN0ID0gJigqZHN0KS0+bmV4dCkgeworICAgIGlmICgoKmRzdCktPmtleSAhPSBrZXkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgICpkc3QgPSAoKmRzdCktPm5leHQ7CisgICAgLS1tYXAtPnNpemU7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Cit9CisKK3NpemVfdCBuZ2h0dHAyX21hcF9zaXplKG5naHR0cDJfbWFwICptYXApIHsgcmV0dXJuIG1hcC0+c2l6ZTsgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9tYXAuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlMjllMwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWFwLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX01BUF9ICisjZGVmaW5lIE5HSFRUUDJfTUFQX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorI2luY2x1ZGUgIm5naHR0cDJfaW50LmgiCisjaW5jbHVkZSAibmdodHRwMl9tZW0uaCIKKworLyogSW1wbGVtZW50YXRpb24gb2YgdW5vcmRlcmVkIG1hcCAqLworCit0eXBlZGVmIGludDMyX3Qga2V5X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IG5naHR0cDJfbWFwX2VudHJ5IHsKKyAgc3RydWN0IG5naHR0cDJfbWFwX2VudHJ5ICpuZXh0OworICBrZXlfdHlwZSBrZXk7CisjaWYgU0laRU9GX0lOVF9QID09IDQKKyAgLyogd2UgcmVxdWlyZXMgOCBieXRlcyBhbGlnbWVudCAqLworICBpbnQ2NF90IHBhZDsKKyNlbmRpZgorfSBuZ2h0dHAyX21hcF9lbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBuZ2h0dHAyX21hcF9lbnRyeSAqKnRhYmxlOworICBuZ2h0dHAyX21lbSAqbWVtOworICBzaXplX3Qgc2l6ZTsKKyAgdWludDMyX3QgdGFibGVsZW47Cit9IG5naHR0cDJfbWFwOworCisvKgorICogSW5pdGlhbGl6ZXMgdGhlIG1hcCB8bWFwfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfbWFwX2luaXQobmdodHRwMl9tYXAgKm1hcCwgbmdodHRwMl9tZW0gKm1lbSk7CisKKy8qCisgKiBEZWFsbG9jYXRlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgfG1hcHwuIFRoZSBzdG9yZWQgZW50cmllcworICogYXJlIG5vdCBmcmVlZCBieSB0aGlzIGZ1bmN0aW9uLiBVc2UgbmdodHRwMl9tYXBfZWFjaF9mcmVlKCkgdG8gZnJlZQorICogZWFjaCBlbnRyaWVzLgorICovCit2b2lkIG5naHR0cDJfbWFwX2ZyZWUobmdodHRwMl9tYXAgKm1hcCk7CisKKy8qCisgKiBEZWFsbG9jYXRlcyBlYWNoIGVudHJpZXMgdXNpbmcgfGZ1bmN8IGZ1bmN0aW9uIGFuZCBhbnkgcmVzb3VyY2VzCisgKiBhbGxvY2F0ZWQgZm9yIHxtYXB8LiBUaGUgfGZ1bmN8IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nCisgKiBnaXZlbiB0aGUgfGVudHJ5fCBvYmplY3QuIFRoZSB8cHRyfCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgfGZ1bmN8IGFzCisgKiBzZW5kIGFyZ3VtZW50LiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB8ZnVuY3wgd2lsbCBiZSBpZ25vcmVkLgorICovCit2b2lkIG5naHR0cDJfbWFwX2VhY2hfZnJlZShuZ2h0dHAyX21hcCAqbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnVuYykobmdodHRwMl9tYXBfZW50cnkgKmVudHJ5LCB2b2lkICpwdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHRyKTsKKworLyoKKyAqIEluaXRpYWxpemVzIHRoZSB8ZW50cnl8IHdpdGggdGhlIHxrZXl8LiBBbGwgZW50cmllcyB0byBiZSBpbnNlcnRlZAorICogdG8gdGhlIG1hcCBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggdGhpcyBmdW5jdGlvbi4KKyAqLwordm9pZCBuZ2h0dHAyX21hcF9lbnRyeV9pbml0KG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeSwga2V5X3R5cGUga2V5KTsKKworLyoKKyAqIEluc2VydHMgdGhlIG5ldyB8ZW50cnl8IHdpdGggdGhlIGtleSB8ZW50cnktPmtleXwgdG8gdGhlIG1hcCB8bWFwfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQKKyAqICAgICBUaGUgaXRlbSBhc3NvY2lhdGVkIGJ5IHxrZXl8IGFscmVhZHkgZXhpc3RzLgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9tYXBfaW5zZXJ0KG5naHR0cDJfbWFwICptYXAsIG5naHR0cDJfbWFwX2VudHJ5ICplbnRyeSk7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBlbnRyeSBhc3NvY2lhdGVkIGJ5IHRoZSBrZXkgfGtleXwuICBJZiB0aGVyZSBpcyBubyBzdWNoCisgKiBlbnRyeSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK25naHR0cDJfbWFwX2VudHJ5ICpuZ2h0dHAyX21hcF9maW5kKG5naHR0cDJfbWFwICptYXAsIGtleV90eXBlIGtleSk7CisKKy8qCisgKiBSZW1vdmVzIHRoZSBlbnRyeSBhc3NvY2lhdGVkIGJ5IHRoZSBrZXkgfGtleXwgZnJvbSB0aGUgfG1hcHwuICBUaGUKKyAqIHJlbW92ZWQgZW50cnkgaXMgbm90IGZyZWVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UCisgKiAgICAgVGhlIGVudHJ5IGFzc29jaWF0ZWQgYnkgfGtleXwgZG9lcyBub3QgZXhpc3QuCisgKi8KK2ludCBuZ2h0dHAyX21hcF9yZW1vdmUobmdodHRwMl9tYXAgKm1hcCwga2V5X3R5cGUga2V5KTsKKworLyoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBzdG9yZWQgaW4gdGhlIG1hcCB8bWFwfC4KKyAqLworc2l6ZV90IG5naHR0cDJfbWFwX3NpemUobmdodHRwMl9tYXAgKm1hcCk7CisKKy8qCisgKiBBcHBsaWVzIHRoZSBmdW5jdGlvbiB8ZnVuY3wgdG8gZWFjaCBlbnRyeSBpbiB0aGUgfG1hcHwgd2l0aCB0aGUKKyAqIG9wdGlvbmFsIHVzZXIgc3VwcGxpZWQgcG9pbnRlciB8cHRyfC4KKyAqCisgKiBJZiB0aGUgfGZ1bmN8IHJldHVybnMgMCwgdGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgfGZ1bmN8IHdpdGggdGhlCisgKiBuZXh0IGVudHJ5LiBJZiB0aGUgfGZ1bmN8IHJldHVybnMgbm9uemVybywgaXQgd2lsbCBub3QgY2FsbCB0aGUKKyAqIHxmdW5jfCBmb3IgZnVydGhlciBlbnRyaWVzIGFuZCByZXR1cm4gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKKyAqIHxmdW5jfCBpbW1lZGlhdGVseS4gIFRodXMsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGFsbCB0aGUKKyAqIGludm9jYXRpb25zIG9mIHRoZSB8ZnVuY3wgcmV0dXJuIDAsIG9yIG5vbnplcm8gdmFsdWUgd2hpY2ggdGhlIGxhc3QKKyAqIGludm9jYXRpb24gb2YgfGZ1bmN8IHJldHVybnMuCisgKgorICogRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gdG8gZnJlZSBlYWNoIGVudHJ5LiBVc2UKKyAqIG5naHR0cDJfbWFwX2VhY2hfZnJlZSgpIGluc3RlYWQuCisgKi8KK2ludCBuZ2h0dHAyX21hcF9lYWNoKG5naHR0cDJfbWFwICptYXAsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKShuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnksIHZvaWQgKnB0ciksCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIpOworCisjZW5kaWYgLyogTkdIVFRQMl9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9tZW0uYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0NDljZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWVtLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9tZW0uaCIKKworc3RhdGljIHZvaWQgKmRlZmF1bHRfbWFsbG9jKHNpemVfdCBzaXplLCB2b2lkICptZW1fdXNlcl9kYXRhKSB7CisgICh2b2lkKW1lbV91c2VyX2RhdGE7CisKKyAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKworc3RhdGljIHZvaWQgZGVmYXVsdF9mcmVlKHZvaWQgKnB0ciwgdm9pZCAqbWVtX3VzZXJfZGF0YSkgeworICAodm9pZCltZW1fdXNlcl9kYXRhOworCisgIGZyZWUocHRyKTsKK30KKworc3RhdGljIHZvaWQgKmRlZmF1bHRfY2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsIHZvaWQgKm1lbV91c2VyX2RhdGEpIHsKKyAgKHZvaWQpbWVtX3VzZXJfZGF0YTsKKworICByZXR1cm4gY2FsbG9jKG5tZW1iLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgKmRlZmF1bHRfcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplLCB2b2lkICptZW1fdXNlcl9kYXRhKSB7CisgICh2b2lkKW1lbV91c2VyX2RhdGE7CisKKyAgcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsKK30KKworc3RhdGljIG5naHR0cDJfbWVtIG1lbV9kZWZhdWx0ID0ge05VTEwsIGRlZmF1bHRfbWFsbG9jLCBkZWZhdWx0X2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9jYWxsb2MsIGRlZmF1bHRfcmVhbGxvY307CisKK25naHR0cDJfbWVtICpuZ2h0dHAyX21lbV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuICZtZW1fZGVmYXVsdDsgfQorCit2b2lkICpuZ2h0dHAyX21lbV9tYWxsb2MobmdodHRwMl9tZW0gKm1lbSwgc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIG1lbS0+bWFsbG9jKHNpemUsIG1lbS0+bWVtX3VzZXJfZGF0YSk7Cit9CisKK3ZvaWQgbmdodHRwMl9tZW1fZnJlZShuZ2h0dHAyX21lbSAqbWVtLCB2b2lkICpwdHIpIHsKKyAgbWVtLT5mcmVlKHB0ciwgbWVtLT5tZW1fdXNlcl9kYXRhKTsKK30KKwordm9pZCBuZ2h0dHAyX21lbV9mcmVlMihuZ2h0dHAyX2ZyZWUgZnJlZV9mdW5jLCB2b2lkICpwdHIsIHZvaWQgKm1lbV91c2VyX2RhdGEpIHsKKyAgZnJlZV9mdW5jKHB0ciwgbWVtX3VzZXJfZGF0YSk7Cit9CisKK3ZvaWQgKm5naHR0cDJfbWVtX2NhbGxvYyhuZ2h0dHAyX21lbSAqbWVtLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiBtZW0tPmNhbGxvYyhubWVtYiwgc2l6ZSwgbWVtLT5tZW1fdXNlcl9kYXRhKTsKK30KKwordm9pZCAqbmdodHRwMl9tZW1fcmVhbGxvYyhuZ2h0dHAyX21lbSAqbWVtLCB2b2lkICpwdHIsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiBtZW0tPnJlYWxsb2MocHRyLCBzaXplLCBtZW0tPm1lbV91c2VyX2RhdGEpOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9tZW0uaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzZGJjYgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbWVtLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfTUVNX0gKKyNkZWZpbmUgTkdIVFRQMl9NRU1fSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisKKy8qIFRoZSBkZWZhdWx0LCBzeXN0ZW0gc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRvciAqLworbmdodHRwMl9tZW0gKm5naHR0cDJfbWVtX2RlZmF1bHQodm9pZCk7CisKKy8qIENvbnZlbmllbnQgd3JhcHBlciBmdW5jdGlvbnMgdG8gY2FsbCBhbGxvY2F0b3IgZnVuY3Rpb24gaW4KKyAgIHxtZW18LiAqLwordm9pZCAqbmdodHRwMl9tZW1fbWFsbG9jKG5naHR0cDJfbWVtICptZW0sIHNpemVfdCBzaXplKTsKK3ZvaWQgbmdodHRwMl9tZW1fZnJlZShuZ2h0dHAyX21lbSAqbWVtLCB2b2lkICpwdHIpOwordm9pZCBuZ2h0dHAyX21lbV9mcmVlMihuZ2h0dHAyX2ZyZWUgZnJlZV9mdW5jLCB2b2lkICpwdHIsIHZvaWQgKm1lbV91c2VyX2RhdGEpOwordm9pZCAqbmdodHRwMl9tZW1fY2FsbG9jKG5naHR0cDJfbWVtICptZW0sIHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpOwordm9pZCAqbmdodHRwMl9tZW1fcmVhbGxvYyhuZ2h0dHAyX21lbSAqbWVtLCB2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKworI2VuZGlmIC8qIE5HSFRUUDJfTUVNX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbmV0LmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZmZlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX25ldC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX05FVF9ICisjZGVmaW5lIE5HSFRUUDJfTkVUX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmIC8qIEhBVkVfQVJQQV9JTkVUX0ggKi8KKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYgLyogSEFWRV9ORVRJTkVUX0lOX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCisjaWYgZGVmaW5lZChXSU4zMikKKy8qIFdpbmRvd3MgcmVxdWlyZXMgd3MyXzMyIGxpYnJhcnkgZm9yIG50b25sIGZhbWlseSBmdW5jdGlvbnMuICBXZQorICAgZGVmaW5lIGlubGluZSBmdW5jdGlvbnMgZm9yIHRob3NlIGZ1bmN0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZQorICAgZGVwZW5kZW55IG9uIHRoYXQgbGliLiAqLworCisjICBpZmRlZiBfTVNDX1ZFUgorIyAgICBkZWZpbmUgU1RJTiBzdGF0aWMgX19pbmxpbmUKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFNUSU4gc3RhdGljIGlubGluZQorIyAgZW5kaWYKKworU1RJTiB1aW50MzJfdCBodG9ubCh1aW50MzJfdCBob3N0bG9uZykgeworICB1aW50MzJfdCByZXM7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSZyZXM7CisgICpwKysgPSBob3N0bG9uZyA+PiAyNDsKKyAgKnArKyA9IChob3N0bG9uZyA+PiAxNikgJiAweGZmdTsKKyAgKnArKyA9IChob3N0bG9uZyA+PiA4KSAmIDB4ZmZ1OworICAqcCA9IGhvc3Rsb25nICYgMHhmZnU7CisgIHJldHVybiByZXM7Cit9CisKK1NUSU4gdWludDE2X3QgaHRvbnModWludDE2X3QgaG9zdHNob3J0KSB7CisgIHVpbnQxNl90IHJlczsKKyAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopJnJlczsKKyAgKnArKyA9IGhvc3RzaG9ydCA+PiA4OworICAqcCA9IGhvc3RzaG9ydCAmIDB4ZmZ1OworICByZXR1cm4gcmVzOworfQorCitTVElOIHVpbnQzMl90IG50b2hsKHVpbnQzMl90IG5ldGxvbmcpIHsKKyAgdWludDMyX3QgcmVzOworICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmbmV0bG9uZzsKKyAgcmVzID0gKnArKyA8PCAyNDsKKyAgcmVzICs9ICpwKysgPDwgMTY7CisgIHJlcyArPSAqcCsrIDw8IDg7CisgIHJlcyArPSAqcDsKKyAgcmV0dXJuIHJlczsKK30KKworU1RJTiB1aW50MTZfdCBudG9ocyh1aW50MTZfdCBuZXRzaG9ydCkgeworICB1aW50MTZfdCByZXM7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSZuZXRzaG9ydDsKKyAgcmVzID0gKnArKyA8PCA4OworICByZXMgKz0gKnA7CisgIHJldHVybiByZXM7Cit9CisKKyNlbmRpZiAvKiBXSU4zMiAqLworCisjZW5kaWYgLyogTkdIVFRQMl9ORVRfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9ucG4uYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbnBuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzODRjOAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbnBuLmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9ucG4uaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgaW50IHNlbGVjdF9uZXh0X3Byb3RvY29sKHVuc2lnbmVkIGNoYXIgKipvdXQsIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKSB7CisgIHVuc2lnbmVkIGludCBpOworICBmb3IgKGkgPSAwOyBpICsga2V5bGVuIDw9IGlubGVuOyBpICs9ICh1bnNpZ25lZCBpbnQpKGluW2ldICsgMSkpIHsKKyAgICBpZiAobWVtY21wKCZpbltpXSwga2V5LCBrZXlsZW4pID09IDApIHsKKyAgICAgICpvdXQgPSAodW5zaWduZWQgY2hhciAqKSZpbltpICsgMV07CisgICAgICAqb3V0bGVuID0gaW5baV07CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIC0xOworfQorCisjZGVmaW5lIE5HSFRUUDJfSFRUUF8xXzFfQUxQTiAiXHg4aHR0cC8xLjEiCisjZGVmaW5lIE5HSFRUUDJfSFRUUF8xXzFfQUxQTl9MRU4gKHNpemVvZihOR0hUVFAyX0hUVFBfMV8xX0FMUE4pIC0gMSkKKworaW50IG5naHR0cDJfc2VsZWN0X25leHRfcHJvdG9jb2wodW5zaWduZWQgY2hhciAqKm91dCwgdW5zaWduZWQgY2hhciAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxlbikgeworICBpZiAoc2VsZWN0X25leHRfcHJvdG9jb2wob3V0LCBvdXRsZW4sIGluLCBpbmxlbiwgTkdIVFRQMl9QUk9UT19BTFBOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9QUk9UT19BTFBOX0xFTikgPT0gMCkgeworICAgIHJldHVybiAxOworICB9CisgIGlmIChzZWxlY3RfbmV4dF9wcm90b2NvbChvdXQsIG91dGxlbiwgaW4sIGlubGVuLCBOR0hUVFAyX0hUVFBfMV8xX0FMUE4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0hUVFBfMV8xX0FMUE5fTEVOKSA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9ucG4uaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbnBuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZmMWMwNAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfbnBuLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfTlBOX0gKKyNkZWZpbmUgTkdIVFRQMl9OUE5fSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisKKyNlbmRpZiAvKiBOR0hUVFAyX05QTl9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX29wdGlvbi5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vcHRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTNmMjJkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vcHRpb24uYwpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9vcHRpb24uaCIKKworI2luY2x1ZGUgIm5naHR0cDJfc2Vzc2lvbi5oIgorCitpbnQgbmdodHRwMl9vcHRpb25fbmV3KG5naHR0cDJfb3B0aW9uICoqb3B0aW9uX3B0cikgeworICAqb3B0aW9uX3B0ciA9IGNhbGxvYygxLCBzaXplb2YobmdodHRwMl9vcHRpb24pKTsKKworICBpZiAoKm9wdGlvbl9wdHIgPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfb3B0aW9uX2RlbChuZ2h0dHAyX29wdGlvbiAqb3B0aW9uKSB7IGZyZWUob3B0aW9uKTsgfQorCit2b2lkIG5naHR0cDJfb3B0aW9uX3NldF9ub19hdXRvX3dpbmRvd191cGRhdGUobmdodHRwMl9vcHRpb24gKm9wdGlvbiwgaW50IHZhbCkgeworICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9OT19BVVRPX1dJTkRPV19VUERBVEU7CisgIG9wdGlvbi0+bm9fYXV0b193aW5kb3dfdXBkYXRlID0gdmFsOworfQorCit2b2lkIG5naHR0cDJfb3B0aW9uX3NldF9wZWVyX21heF9jb25jdXJyZW50X3N0cmVhbXMobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWwpIHsKKyAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfUEVFUl9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TOworICBvcHRpb24tPnBlZXJfbWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9IHZhbDsKK30KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfbm9fcmVjdl9jbGllbnRfbWFnaWMobmdodHRwMl9vcHRpb24gKm9wdGlvbiwgaW50IHZhbCkgeworICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9OT19SRUNWX0NMSUVOVF9NQUdJQzsKKyAgb3B0aW9uLT5ub19yZWN2X2NsaWVudF9tYWdpYyA9IHZhbDsKK30KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfbm9faHR0cF9tZXNzYWdpbmcobmdodHRwMl9vcHRpb24gKm9wdGlvbiwgaW50IHZhbCkgeworICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9OT19IVFRQX01FU1NBR0lORzsKKyAgb3B0aW9uLT5ub19odHRwX21lc3NhZ2luZyA9IHZhbDsKK30KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfbWF4X3Jlc2VydmVkX3JlbW90ZV9zdHJlYW1zKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsKSB7CisgIG9wdGlvbi0+b3B0X3NldF9tYXNrIHw9IE5HSFRUUDJfT1BUX01BWF9SRVNFUlZFRF9SRU1PVEVfU1RSRUFNUzsKKyAgb3B0aW9uLT5tYXhfcmVzZXJ2ZWRfcmVtb3RlX3N0cmVhbXMgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9leHRfdHlwZSh1aW50OF90ICpleHRfdHlwZXMsIHVpbnQ4X3QgdHlwZSkgeworICBleHRfdHlwZXNbdHlwZSAvIDhdID0gKHVpbnQ4X3QpKGV4dF90eXBlc1t0eXBlIC8gOF0gfCAoMSA8PCAodHlwZSAmIDB4NykpKTsKK30KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfdXNlcl9yZWN2X2V4dGVuc2lvbl90eXBlKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0eXBlKSB7CisgIGlmICh0eXBlIDwgMTApIHsKKyAgICByZXR1cm47CisgIH0KKworICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9VU0VSX1JFQ1ZfRVhUX1RZUEVTOworICBzZXRfZXh0X3R5cGUob3B0aW9uLT51c2VyX3JlY3ZfZXh0X3R5cGVzLCB0eXBlKTsKK30KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfYnVpbHRpbl9yZWN2X2V4dGVuc2lvbl90eXBlKG5naHR0cDJfb3B0aW9uICpvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0eXBlKSB7CisgIHN3aXRjaCAodHlwZSkgeworICBjYXNlIE5HSFRUUDJfQUxUU1ZDOgorICAgIG9wdGlvbi0+b3B0X3NldF9tYXNrIHw9IE5HSFRUUDJfT1BUX0JVSUxUSU5fUkVDVl9FWFRfVFlQRVM7CisgICAgb3B0aW9uLT5idWlsdGluX3JlY3ZfZXh0X3R5cGVzIHw9IE5HSFRUUDJfVFlQRU1BU0tfQUxUU1ZDOworICAgIHJldHVybjsKKyAgY2FzZSBOR0hUVFAyX09SSUdJTjoKKyAgICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9CVUlMVElOX1JFQ1ZfRVhUX1RZUEVTOworICAgIG9wdGlvbi0+YnVpbHRpbl9yZWN2X2V4dF90eXBlcyB8PSBOR0hUVFAyX1RZUEVNQVNLX09SSUdJTjsKKyAgICByZXR1cm47CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuOworICB9Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X25vX2F1dG9fcGluZ19hY2sobmdodHRwMl9vcHRpb24gKm9wdGlvbiwgaW50IHZhbCkgeworICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9OT19BVVRPX1BJTkdfQUNLOworICBvcHRpb24tPm5vX2F1dG9fcGluZ19hY2sgPSB2YWw7Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X21heF9zZW5kX2hlYWRlcl9ibG9ja19sZW5ndGgobmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbCkgeworICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9NQVhfU0VORF9IRUFERVJfQkxPQ0tfTEVOR1RIOworICBvcHRpb24tPm1heF9zZW5kX2hlYWRlcl9ibG9ja19sZW5ndGggPSB2YWw7Cit9CisKK3ZvaWQgbmdodHRwMl9vcHRpb25fc2V0X21heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZShuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWwpIHsKKyAgb3B0aW9uLT5vcHRfc2V0X21hc2sgfD0gTkdIVFRQMl9PUFRfTUFYX0RFRkxBVEVfRFlOQU1JQ19UQUJMRV9TSVpFOworICBvcHRpb24tPm1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZSA9IHZhbDsKK30KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfbm9fY2xvc2VkX3N0cmVhbXMobmdodHRwMl9vcHRpb24gKm9wdGlvbiwgaW50IHZhbCkgeworICBvcHRpb24tPm9wdF9zZXRfbWFzayB8PSBOR0hUVFAyX09QVF9OT19DTE9TRURfU1RSRUFNUzsKKyAgb3B0aW9uLT5ub19jbG9zZWRfc3RyZWFtcyA9IHZhbDsKK30KKwordm9pZCBuZ2h0dHAyX29wdGlvbl9zZXRfbWF4X291dGJvdW5kX2FjayhuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLCBzaXplX3QgdmFsKSB7CisgIG9wdGlvbi0+b3B0X3NldF9tYXNrIHw9IE5HSFRUUDJfT1BUX01BWF9PVVRCT1VORF9BQ0s7CisgIG9wdGlvbi0+bWF4X291dGJvdW5kX2FjayA9IHZhbDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfb3B0aW9uLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX29wdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzQwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX29wdGlvbi5oCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9PUFRJT05fSAorI2RlZmluZSBOR0hUVFAyX09QVElPTl9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKworLyoqCisgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqCisgICAqIFRoaXMgb3B0aW9uIHByZXZlbnRzIHRoZSBsaWJyYXJ5IGZyb20gc2VuZGluZyBXSU5ET1dfVVBEQVRFIGZvciBhCisgICAqIGNvbm5lY3Rpb24gYXV0b21hdGljYWxseS4gIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byBub256ZXJvLCB0aGUKKyAgICogbGlicmFyeSB3b24ndCBzZW5kIFdJTkRPV19VUERBVEUgZm9yIERBVEEgdW50aWwgYXBwbGljYXRpb24gY2FsbHMKKyAgICogbmdodHRwMl9zZXNzaW9uX2NvbnN1bWUoKSB0byBpbmRpY2F0ZSB0aGUgYW1vdW50IG9mIGNvbnN1bWVkCisgICAqIERBVEEuICBCeSBkZWZhdWx0LCB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gemVyby4KKyAgICovCisgIE5HSFRUUDJfT1BUX05PX0FVVE9fV0lORE9XX1VQREFURSA9IDEsCisgIC8qKgorICAgKiBUaGlzIG9wdGlvbiBzZXRzIHRoZSBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIHZhbHVlIG9mCisgICAqIHJlbW90ZSBlbmRwb2ludCBhcyBpZiBpdCBpcyByZWNlaXZlZCBpbiBTRVRUSU5HUyBmcmFtZS4gV2l0aG91dAorICAgKiBzcGVjaWZ5aW5nIHRoaXMgb3B0aW9uLCBiZWZvcmUgdGhlIGxvY2FsIGVuZHBvaW50IHJlY2VpdmVzCisgICAqIFNFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgaW4gU0VUVElOR1MgZnJhbWUgZnJvbSByZW1vdGUKKyAgICogZW5kcG9pbnQsIFNFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgaXMgdW5saW1pdGVkLiBUaGlzIG1heQorICAgKiBjYXVzZSBwcm9ibGVtIGlmIGxvY2FsIGVuZHBvaW50IHN1Ym1pdHMgbG90cyBvZiByZXF1ZXN0cworICAgKiBpbml0aWFsbHkgYW5kIHNlbmRpbmcgdGhlbSBhdCBvbmNlIHRvIHRoZSByZW1vdGUgcGVlciBtYXkgbGVhZCB0bworICAgKiB0aGUgcmVqZWN0aW9uIG9mIHNvbWUgcmVxdWVzdHMuIFNwZWNpZnlpbmcgdGhpcyBvcHRpb24gdG8gdGhlCisgICAqIHNlbnNpYmxlIHZhbHVlLCBzYXkgMTAwLCBtYXkgYXZvaWQgdGhpcyBraW5kIG9mIGlzc3VlLiBUaGlzIHZhbHVlCisgICAqIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaWYgdGhlIGxvY2FsIGVuZHBvaW50IHJlY2VpdmVzCisgICAqIFNFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgZnJvbSB0aGUgcmVtb3RlIGVuZHBvaW50LgorICAgKi8KKyAgTkdIVFRQMl9PUFRfUEVFUl9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TID0gMSA8PCAxLAorICBOR0hUVFAyX09QVF9OT19SRUNWX0NMSUVOVF9NQUdJQyA9IDEgPDwgMiwKKyAgTkdIVFRQMl9PUFRfTk9fSFRUUF9NRVNTQUdJTkcgPSAxIDw8IDMsCisgIE5HSFRUUDJfT1BUX01BWF9SRVNFUlZFRF9SRU1PVEVfU1RSRUFNUyA9IDEgPDwgNCwKKyAgTkdIVFRQMl9PUFRfVVNFUl9SRUNWX0VYVF9UWVBFUyA9IDEgPDwgNSwKKyAgTkdIVFRQMl9PUFRfTk9fQVVUT19QSU5HX0FDSyA9IDEgPDwgNiwKKyAgTkdIVFRQMl9PUFRfQlVJTFRJTl9SRUNWX0VYVF9UWVBFUyA9IDEgPDwgNywKKyAgTkdIVFRQMl9PUFRfTUFYX1NFTkRfSEVBREVSX0JMT0NLX0xFTkdUSCA9IDEgPDwgOCwKKyAgTkdIVFRQMl9PUFRfTUFYX0RFRkxBVEVfRFlOQU1JQ19UQUJMRV9TSVpFID0gMSA8PCA5LAorICBOR0hUVFAyX09QVF9OT19DTE9TRURfU1RSRUFNUyA9IDEgPDwgMTAsCisgIE5HSFRUUDJfT1BUX01BWF9PVVRCT1VORF9BQ0sgPSAxIDw8IDExLAorfSBuZ2h0dHAyX29wdGlvbl9mbGFnOworCisvKioKKyAqIFN0cnVjdCB0byBzdG9yZSBvcHRpb24gdmFsdWVzIGZvciBuZ2h0dHAyX3Nlc3Npb24uCisgKi8KK3N0cnVjdCBuZ2h0dHAyX29wdGlvbiB7CisgIC8qKgorICAgKiBOR0hUVFAyX09QVF9NQVhfU0VORF9IRUFERVJfQkxPQ0tfTEVOR1RICisgICAqLworICBzaXplX3QgbWF4X3NlbmRfaGVhZGVyX2Jsb2NrX2xlbmd0aDsKKyAgLyoqCisgICAqIE5HSFRUUDJfT1BUX01BWF9ERUZMQVRFX0RZTkFNSUNfVEFCTEVfU0laRQorICAgKi8KKyAgc2l6ZV90IG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZTsKKyAgLyoqCisgICAqIE5HSFRUUDJfT1BUX01BWF9PVVRCT1VORF9BQ0sKKyAgICovCisgIHNpemVfdCBtYXhfb3V0Ym91bmRfYWNrOworICAvKioKKyAgICogQml0d2lzZSBPUiBvZiBuZ2h0dHAyX29wdGlvbl9mbGFnIHRvIGRldGVybWluZSB0aGF0IHdoaWNoIGZpZWxkcworICAgKiBhcmUgc3BlY2lmaWVkLgorICAgKi8KKyAgdWludDMyX3Qgb3B0X3NldF9tYXNrOworICAvKioKKyAgICogTkdIVFRQMl9PUFRfUEVFUl9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TCisgICAqLworICB1aW50MzJfdCBwZWVyX21heF9jb25jdXJyZW50X3N0cmVhbXM7CisgIC8qKgorICAgKiBOR0hUVFAyX09QVF9NQVhfUkVTRVJWRURfUkVNT1RFX1NUUkVBTVMKKyAgICovCisgIHVpbnQzMl90IG1heF9yZXNlcnZlZF9yZW1vdGVfc3RyZWFtczsKKyAgLyoqCisgICAqIE5HSFRUUDJfT1BUX0JVSUxUSU5fUkVDVl9FWFRfVFlQRVMKKyAgICovCisgIHVpbnQzMl90IGJ1aWx0aW5fcmVjdl9leHRfdHlwZXM7CisgIC8qKgorICAgKiBOR0hUVFAyX09QVF9OT19BVVRPX1dJTkRPV19VUERBVEUKKyAgICovCisgIGludCBub19hdXRvX3dpbmRvd191cGRhdGU7CisgIC8qKgorICAgKiBOR0hUVFAyX09QVF9OT19SRUNWX0NMSUVOVF9NQUdJQworICAgKi8KKyAgaW50IG5vX3JlY3ZfY2xpZW50X21hZ2ljOworICAvKioKKyAgICogTkdIVFRQMl9PUFRfTk9fSFRUUF9NRVNTQUdJTkcKKyAgICovCisgIGludCBub19odHRwX21lc3NhZ2luZzsKKyAgLyoqCisgICAqIE5HSFRUUDJfT1BUX05PX0FVVE9fUElOR19BQ0sKKyAgICovCisgIGludCBub19hdXRvX3BpbmdfYWNrOworICAvKioKKyAgICogTkdIVFRQMl9PUFRfTk9fQ0xPU0VEX1NUUkVBTVMKKyAgICovCisgIGludCBub19jbG9zZWRfc3RyZWFtczsKKyAgLyoqCisgICAqIE5HSFRUUDJfT1BUX1VTRVJfUkVDVl9FWFRfVFlQRVMKKyAgICovCisgIHVpbnQ4X3QgdXNlcl9yZWN2X2V4dF90eXBlc1szMl07Cit9OworCisjZW5kaWYgLyogTkdIVFRQMl9PUFRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vdXRib3VuZF9pdGVtLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX291dGJvdW5kX2l0ZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjUxYzgwCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vdXRib3VuZF9pdGVtLmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfb3V0Ym91bmRfaXRlbS5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQobmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtKSB7CisgIGl0ZW0tPmN5Y2xlID0gMDsKKyAgaXRlbS0+cW5leHQgPSBOVUxMOworICBpdGVtLT5xdWV1ZWQgPSAwOworCisgIG1lbXNldCgmaXRlbS0+YXV4X2RhdGEsIDAsIHNpemVvZihuZ2h0dHAyX2F1eF9kYXRhKSk7Cit9CisKK3ZvaWQgbmdodHRwMl9vdXRib3VuZF9pdGVtX2ZyZWUobmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworCisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICBzd2l0Y2ggKGZyYW1lLT5oZC50eXBlKSB7CisgIGNhc2UgTkdIVFRQMl9EQVRBOgorICAgIG5naHR0cDJfZnJhbWVfZGF0YV9mcmVlKCZmcmFtZS0+ZGF0YSk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9IRUFERVJTOgorICAgIG5naHR0cDJfZnJhbWVfaGVhZGVyc19mcmVlKCZmcmFtZS0+aGVhZGVycywgbWVtKTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1BSSU9SSVRZOgorICAgIG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfZnJlZSgmZnJhbWUtPnByaW9yaXR5KTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1JTVF9TVFJFQU06CisgICAgbmdodHRwMl9mcmFtZV9yc3Rfc3RyZWFtX2ZyZWUoJmZyYW1lLT5yc3Rfc3RyZWFtKTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTOgorICAgIG5naHR0cDJfZnJhbWVfc2V0dGluZ3NfZnJlZSgmZnJhbWUtPnNldHRpbmdzLCBtZW0pOworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfUFVTSF9QUk9NSVNFOgorICAgIG5naHR0cDJfZnJhbWVfcHVzaF9wcm9taXNlX2ZyZWUoJmZyYW1lLT5wdXNoX3Byb21pc2UsIG1lbSk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9QSU5HOgorICAgIG5naHR0cDJfZnJhbWVfcGluZ19mcmVlKCZmcmFtZS0+cGluZyk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9HT0FXQVk6CisgICAgbmdodHRwMl9mcmFtZV9nb2F3YXlfZnJlZSgmZnJhbWUtPmdvYXdheSwgbWVtKTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1dJTkRPV19VUERBVEU6CisgICAgbmdodHRwMl9mcmFtZV93aW5kb3dfdXBkYXRlX2ZyZWUoJmZyYW1lLT53aW5kb3dfdXBkYXRlKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDogeworICAgIG5naHR0cDJfZXh0X2F1eF9kYXRhICphdXhfZGF0YTsKKworICAgIGF1eF9kYXRhID0gJml0ZW0tPmF1eF9kYXRhLmV4dDsKKworICAgIGlmIChhdXhfZGF0YS0+YnVpbHRpbiA9PSAwKSB7CisgICAgICBuZ2h0dHAyX2ZyYW1lX2V4dGVuc2lvbl9mcmVlKCZmcmFtZS0+ZXh0KTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoZnJhbWUtPmhkLnR5cGUpIHsKKyAgICBjYXNlIE5HSFRUUDJfQUxUU1ZDOgorICAgICAgbmdodHRwMl9mcmFtZV9hbHRzdmNfZnJlZSgmZnJhbWUtPmV4dCwgbWVtKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9PUklHSU46CisgICAgICBuZ2h0dHAyX2ZyYW1lX29yaWdpbl9mcmVlKCZmcmFtZS0+ZXh0LCBtZW0pOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGFzc2VydCgwKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICB9Cit9CisKK3ZvaWQgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9pbml0KG5naHR0cDJfb3V0Ym91bmRfcXVldWUgKnEpIHsKKyAgcS0+aGVhZCA9IHEtPnRhaWwgPSBOVUxMOworICBxLT5uID0gMDsKK30KKwordm9pZCBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3B1c2gobmdodHRwMl9vdXRib3VuZF9xdWV1ZSAqcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSkgeworICBpZiAocS0+dGFpbCkgeworICAgIHEtPnRhaWwgPSBxLT50YWlsLT5xbmV4dCA9IGl0ZW07CisgIH0gZWxzZSB7CisgICAgcS0+aGVhZCA9IHEtPnRhaWwgPSBpdGVtOworICB9CisgICsrcS0+bjsKK30KKwordm9pZCBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3BvcChuZ2h0dHAyX291dGJvdW5kX3F1ZXVlICpxKSB7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgaWYgKCFxLT5oZWFkKSB7CisgICAgcmV0dXJuOworICB9CisgIGl0ZW0gPSBxLT5oZWFkOworICBxLT5oZWFkID0gcS0+aGVhZC0+cW5leHQ7CisgIGl0ZW0tPnFuZXh0ID0gTlVMTDsKKyAgaWYgKCFxLT5oZWFkKSB7CisgICAgcS0+dGFpbCA9IE5VTEw7CisgIH0KKyAgLS1xLT5uOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vdXRib3VuZF9pdGVtLmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX291dGJvdW5kX2l0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY1MDNhCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9vdXRib3VuZF9pdGVtLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX09VVEJPVU5EX0lURU1fSAorI2RlZmluZSBOR0hUVFAyX09VVEJPVU5EX0lURU1fSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisjaW5jbHVkZSAibmdodHRwMl9mcmFtZS5oIgorI2luY2x1ZGUgIm5naHR0cDJfbWVtLmgiCisKKy8qIHN0cnVjdCB1c2VkIGZvciBIRUFERVJTIGFuZCBQVVNIX1BST01JU0UgZnJhbWUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgbmdodHRwMl9kYXRhX3Byb3ZpZGVyIGRhdGFfcHJkOworICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhOworICAvKiBlcnJvciBjb2RlIHdoZW4gcmVxdWVzdCBIRUFERVJTIGlzIGNhbmNlbGVkIGJ5IFJTVF9TVFJFQU0gd2hpbGUKKyAgICAgaXQgaXMgaW4gcXVldWUuICovCisgIHVpbnQzMl90IGVycm9yX2NvZGU7CisgIC8qIG5vbnplcm8gaWYgcmVxdWVzdCBIRUFERVJTIGlzIGNhbmNlbGVkLiAgVGhlIGVycm9yIGNvZGUgaXMgc3RvcmVkCisgICAgIGluIHxlcnJvcl9jb2RlfC4gKi8KKyAgdWludDhfdCBjYW5jZWxlZDsKK30gbmdodHRwMl9oZWFkZXJzX2F1eF9kYXRhOworCisvKiBzdHJ1Y3QgdXNlZCBmb3IgREFUQSBmcmFtZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKioKKyAgICogVGhlIGRhdGEgdG8gYmUgc2VudCBmb3IgdGhpcyBEQVRBIGZyYW1lLgorICAgKi8KKyAgbmdodHRwMl9kYXRhX3Byb3ZpZGVyIGRhdGFfcHJkOworICAvKioKKyAgICogVGhlIGZsYWdzIG9mIERBVEEgZnJhbWUuICBXZSB1c2Ugc2VwYXJhdGUgZmxhZ3MgaGVyZSBhbmQKKyAgICogbmdodHRwMl9kYXRhIGZyYW1lLiAgVGhlIGxhdHRlciBjb250YWlucyBmbGFncyBhY3R1YWxseSBzZW50IHRvCisgICAqIHBlZXIuICBUaGlzIHxmbGFnc3wgbWF5IGNvbnRhaW4gTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0gYW5kIG9ubHkKKyAgICogd2hlbiB8ZW9mfCBiZWNvbWVzIG5vbnplcm8sIGZsYWdzIGluIG5naHR0cDJfZGF0YSBoYXMKKyAgICogTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0gc2V0LgorICAgKi8KKyAgdWludDhfdCBmbGFnczsKKyAgLyoqCisgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgRU9GIHdhcyByZWFjaGVkIG9yIG5vdC4gSW5pdGlhbGx5CisgICAqIHxlb2Z8IGlzIDAuIEl0IGJlY29tZXMgMSBhZnRlciBhbGwgZGF0YSB3ZXJlIHJlYWQuCisgICAqLworICB1aW50OF90IGVvZjsKKyAgLyoqCisgICAqIFRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQgTkdIVFRQMl9EQVRBX0ZMQUdfTk9fQ09QWSBpcyB1c2VkLgorICAgKi8KKyAgdWludDhfdCBub19jb3B5OworfSBuZ2h0dHAyX2RhdGFfYXV4X2RhdGE7CisKK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfR09BV0FZX0FVWF9OT05FID0gMHgwLAorICAvKiBpbmRpY2F0ZXMgdGhhdCBzZXNzaW9uIHNob3VsZCBiZSB0ZXJtaW5hdGVkIGFmdGVyIHRoZQorICAgICB0cmFuc21pc3Npb24gb2YgdGhpcyBmcmFtZS4gKi8KKyAgTkdIVFRQMl9HT0FXQVlfQVVYX1RFUk1fT05fU0VORCA9IDB4MSwKKyAgLyogaW5kaWNhdGVzIHRoYXQgdGhpcyBHT0FXQVkgaXMganVzdCBhIG5vdGlmaWNhdGlvbiBmb3IgZ3JhY2VmdWwKKyAgICAgc2h1dGRvd24uICBObyBuZ2h0dHAyX3Nlc3Npb24uZ29hd2F5X2ZsYWdzIHNob3VsZCBiZSB1cGRhdGVkIG9uCisgICAgIHRoZSByZWFjdGlvbiB0byB0aGlzIGZyYW1lLiAqLworICBOR0hUVFAyX0dPQVdBWV9BVVhfU0hVVERPV05fTk9USUNFID0gMHgyCit9IG5naHR0cDJfZ29hd2F5X2F1eF9mbGFnOworCisvKiBzdHJ1Y3QgdXNlZCBmb3IgR09BV0FZIGZyYW1lICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIGJpdHdpc2UtT1Igb2Ygb25lIG9yIG1vcmUgb2YgbmdodHRwMl9nb2F3YXlfYXV4X2ZsYWcuICovCisgIHVpbnQ4X3QgZmxhZ3M7Cit9IG5naHR0cDJfZ29hd2F5X2F1eF9kYXRhOworCisvKiBzdHJ1Y3QgdXNlZCBmb3IgZXh0ZW5zaW9uIGZyYW1lICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIG5vbnplcm8gaWYgdGhpcyBleHRlbnNpb24gZnJhbWUgaXMgc2VyaWFsaXplZCBieSBsaWJyYXJ5CisgICAgIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHVzZXItZGVmaW5lZCBjYWxsYmFja3MuICovCisgIHVpbnQ4X3QgYnVpbHRpbjsKK30gbmdodHRwMl9leHRfYXV4X2RhdGE7CisKKy8qIEFkZGl0aW9uYWwgZGF0YSB3aGljaCBjYW5ub3QgYmUgc3RvcmVkIGluIG5naHR0cDJfZnJhbWUgc3RydWN0ICovCit0eXBlZGVmIHVuaW9uIHsKKyAgbmdodHRwMl9kYXRhX2F1eF9kYXRhIGRhdGE7CisgIG5naHR0cDJfaGVhZGVyc19hdXhfZGF0YSBoZWFkZXJzOworICBuZ2h0dHAyX2dvYXdheV9hdXhfZGF0YSBnb2F3YXk7CisgIG5naHR0cDJfZXh0X2F1eF9kYXRhIGV4dDsKK30gbmdodHRwMl9hdXhfZGF0YTsKKworc3RydWN0IG5naHR0cDJfb3V0Ym91bmRfaXRlbTsKK3R5cGVkZWYgc3RydWN0IG5naHR0cDJfb3V0Ym91bmRfaXRlbSBuZ2h0dHAyX291dGJvdW5kX2l0ZW07CisKK3N0cnVjdCBuZ2h0dHAyX291dGJvdW5kX2l0ZW0geworICBuZ2h0dHAyX2ZyYW1lIGZyYW1lOworICAvKiBTdG9yYWdlIGZvciBleHRlbnNpb24gZnJhbWUgcGF5bG9hZC4gIGZyYW1lLT5leHQucGF5bG9hZCBwb2ludHMKKyAgICAgdG8gdGhpcyBzdHJ1Y3R1cmUgdG8gYXZvaWQgZnJlcXVlbnQgbWVtb3J5IGFsbG9jYXRpb24uICovCisgIG5naHR0cDJfZXh0X2ZyYW1lX3BheWxvYWQgZXh0X2ZyYW1lX3BheWxvYWQ7CisgIG5naHR0cDJfYXV4X2RhdGEgYXV4X2RhdGE7CisgIC8qIFRoZSBwcmlvcml0eSB1c2VkIGluIHByaW9yaXR5IGNvbXBhcmlvbi4gIFNtYWxsZXIgaXMgc2VydmVkCisgICAgIGVhcmxpZXIuICBGb3IgUElORywgU0VUVElOR1MgYW5kIG5vbi1EQVRBIGZyYW1lcyAoZXhjbHVkaW5nCisgICAgIHJlc3BvbnNlIEhFQURFUlMgZnJhbWUpIGhhdmUgZGVkaWNhdGVkIGN5Y2xlIHZhbHVlIGRlZmluZWQgYWJvdmUuCisgICAgIEZvciBEQVRBIGZyYW1lLCBjeWNsZSBpcyBjb21wdXRlZCBieSB0YWtpbmcgaW50byBhY2NvdW50IG9mCisgICAgIGVmZmVjdGl2ZSB3ZWlnaHQgYW5kIGZyYW1lIHBheWxvYWQgbGVuZ3RoIHByZXZpb3VzbHkgc2VudCwgc28KKyAgICAgdGhhdCB0aGUgYW1vdW50IG9mIHRyYW5zbWlzc2lvbiBpcyBkaXN0cmlidXRlZCBhY3Jvc3Mgc3RyZWFtcworICAgICBwcm9wb3J0aW9uYWwgdG8gZWZmZWN0aXZlIHdlaWdodCAoaW5zaWRlIGEgdHJlZSkuICovCisgIHVpbnQ2NF90IGN5Y2xlOworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKnFuZXh0OworICAvKiBub256ZXJvIGlmIHRoaXMgb2JqZWN0IGlzIHF1ZXVlZCwgZXhjZXB0IGZvciBEQVRBIG9yIEhFQURFUlMKKyAgICAgd2hpY2ggYXJlIGF0dGFjaGVkIHRvIHN0cmVhbSBhcyBpdGVtLiAqLworICB1aW50OF90IHF1ZXVlZDsKK307CisKKy8qCisgKiBJbml0aWFsaXplcyB8aXRlbXwuICBObyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBkb25lIGluIHRoaXMgZnVuY3Rpb24uCisgKiBEb24ndCBjYWxsIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9mcmVlKCkgdW50aWwgZnJhbWUgbWVtYmVyIGlzCisgKiBpbml0aWFsaXplZC4KKyAqLwordm9pZCBuZ2h0dHAyX291dGJvdW5kX2l0ZW1faW5pdChuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0pOworCisvKgorICogRGVhbGxvY2F0ZXMgcmVzb3VyY2UgZm9yIHxpdGVtfC4gSWYgfGl0ZW18IGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24KKyAqIGRvZXMgbm90aGluZy4KKyAqLwordm9pZCBuZ2h0dHAyX291dGJvdW5kX2l0ZW1fZnJlZShuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0sIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogcXVldWUgZm9yIG5naHR0cDJfb3V0Ym91bmRfaXRlbS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKmhlYWQsICp0YWlsOworICAvKiBudW1iZXIgb2YgaXRlbXMgaW4gdGhpcyBxdWV1ZS4gKi8KKyAgc2l6ZV90IG47Cit9IG5naHR0cDJfb3V0Ym91bmRfcXVldWU7CisKK3ZvaWQgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9pbml0KG5naHR0cDJfb3V0Ym91bmRfcXVldWUgKnEpOworCisvKiBQdXNoZXMgfGl0ZW18IGludG8gfHF8ICovCit2b2lkIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfcHVzaChuZ2h0dHAyX291dGJvdW5kX3F1ZXVlICpxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtKTsKKworLyogUG9wcyB8aXRlbXwgYXQgdGhlIHRvcCBmcm9tIHxxfC4gIElmIHxxfCBpcyBlbXB0eSwgbm90aGluZworICAgaGFwcGVucy4gKi8KK3ZvaWQgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wb3AobmdodHRwMl9vdXRib3VuZF9xdWV1ZSAqcSk7CisKKy8qIFJldHVybnMgdGhlIHRvcCBpdGVtLiAqLworI2RlZmluZSBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcChRKSAoKFEpLT5oZWFkKQorCisvKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBxdWV1ZSAqLworI2RlZmluZSBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3NpemUoUSkgKChRKS0+bikKKworI2VuZGlmIC8qIE5HSFRUUDJfT1VUQk9VTkRfSVRFTV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3BxLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3BxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmViY2NjNwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcHEuYwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9wcS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIm5naHR0cDJfaGVscGVyLmgiCisKK2ludCBuZ2h0dHAyX3BxX2luaXQobmdodHRwMl9wcSAqcHEsIG5naHR0cDJfbGVzcyBsZXNzLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIHBxLT5tZW0gPSBtZW07CisgIHBxLT5jYXBhY2l0eSA9IDA7CisgIHBxLT5xID0gTlVMTDsKKyAgcHEtPmxlbmd0aCA9IDA7CisgIHBxLT5sZXNzID0gbGVzczsKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmdodHRwMl9wcV9mcmVlKG5naHR0cDJfcHEgKnBxKSB7CisgIG5naHR0cDJfbWVtX2ZyZWUocHEtPm1lbSwgcHEtPnEpOworICBwcS0+cSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHN3YXAobmdodHRwMl9wcSAqcHEsIHNpemVfdCBpLCBzaXplX3QgaikgeworICBuZ2h0dHAyX3BxX2VudHJ5ICphID0gcHEtPnFbaV07CisgIG5naHR0cDJfcHFfZW50cnkgKmIgPSBwcS0+cVtqXTsKKworICBwcS0+cVtpXSA9IGI7CisgIGItPmluZGV4ID0gaTsKKyAgcHEtPnFbal0gPSBhOworICBhLT5pbmRleCA9IGo7Cit9CisKK3N0YXRpYyB2b2lkIGJ1YmJsZV91cChuZ2h0dHAyX3BxICpwcSwgc2l6ZV90IGluZGV4KSB7CisgIHNpemVfdCBwYXJlbnQ7CisgIHdoaWxlIChpbmRleCAhPSAwKSB7CisgICAgcGFyZW50ID0gKGluZGV4IC0gMSkgLyAyOworICAgIGlmICghcHEtPmxlc3MocHEtPnFbaW5kZXhdLCBwcS0+cVtwYXJlbnRdKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2FwKHBxLCBwYXJlbnQsIGluZGV4KTsKKyAgICBpbmRleCA9IHBhcmVudDsKKyAgfQorfQorCitpbnQgbmdodHRwMl9wcV9wdXNoKG5naHR0cDJfcHEgKnBxLCBuZ2h0dHAyX3BxX2VudHJ5ICppdGVtKSB7CisgIGlmIChwcS0+Y2FwYWNpdHkgPD0gcHEtPmxlbmd0aCkgeworICAgIHZvaWQgKm5xOworICAgIHNpemVfdCBuY2FwYWNpdHk7CisKKyAgICBuY2FwYWNpdHkgPSBuZ2h0dHAyX21heCg0LCAocHEtPmNhcGFjaXR5ICogMikpOworCisgICAgbnEgPSBuZ2h0dHAyX21lbV9yZWFsbG9jKHBxLT5tZW0sIHBxLT5xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2FwYWNpdHkgKiBzaXplb2YobmdodHRwMl9wcV9lbnRyeSAqKSk7CisgICAgaWYgKG5xID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICB9CisgICAgcHEtPmNhcGFjaXR5ID0gbmNhcGFjaXR5OworICAgIHBxLT5xID0gbnE7CisgIH0KKyAgcHEtPnFbcHEtPmxlbmd0aF0gPSBpdGVtOworICBpdGVtLT5pbmRleCA9IHBxLT5sZW5ndGg7CisgICsrcHEtPmxlbmd0aDsKKyAgYnViYmxlX3VwKHBxLCBwcS0+bGVuZ3RoIC0gMSk7CisgIHJldHVybiAwOworfQorCituZ2h0dHAyX3BxX2VudHJ5ICpuZ2h0dHAyX3BxX3RvcChuZ2h0dHAyX3BxICpwcSkgeworICBpZiAocHEtPmxlbmd0aCA9PSAwKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHBxLT5xWzBdOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGJ1YmJsZV9kb3duKG5naHR0cDJfcHEgKnBxLCBzaXplX3QgaW5kZXgpIHsKKyAgc2l6ZV90IGksIGosIG1pbmluZGV4OworICBmb3IgKDs7KSB7CisgICAgaiA9IGluZGV4ICogMiArIDE7CisgICAgbWluaW5kZXggPSBpbmRleDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpLCArK2opIHsKKyAgICAgIGlmIChqID49IHBxLT5sZW5ndGgpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAocHEtPmxlc3MocHEtPnFbal0sIHBxLT5xW21pbmluZGV4XSkpIHsKKyAgICAgICAgbWluaW5kZXggPSBqOworICAgICAgfQorICAgIH0KKyAgICBpZiAobWluaW5kZXggPT0gaW5kZXgpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3dhcChwcSwgaW5kZXgsIG1pbmluZGV4KTsKKyAgICBpbmRleCA9IG1pbmluZGV4OworICB9Cit9CisKK3ZvaWQgbmdodHRwMl9wcV9wb3AobmdodHRwMl9wcSAqcHEpIHsKKyAgaWYgKHBxLT5sZW5ndGggPiAwKSB7CisgICAgcHEtPnFbMF0gPSBwcS0+cVtwcS0+bGVuZ3RoIC0gMV07CisgICAgcHEtPnFbMF0tPmluZGV4ID0gMDsKKyAgICAtLXBxLT5sZW5ndGg7CisgICAgYnViYmxlX2Rvd24ocHEsIDApOworICB9Cit9CisKK3ZvaWQgbmdodHRwMl9wcV9yZW1vdmUobmdodHRwMl9wcSAqcHEsIG5naHR0cDJfcHFfZW50cnkgKml0ZW0pIHsKKyAgYXNzZXJ0KHBxLT5xW2l0ZW0tPmluZGV4XSA9PSBpdGVtKTsKKworICBpZiAoaXRlbS0+aW5kZXggPT0gMCkgeworICAgIG5naHR0cDJfcHFfcG9wKHBxKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoaXRlbS0+aW5kZXggPT0gcHEtPmxlbmd0aCAtIDEpIHsKKyAgICAtLXBxLT5sZW5ndGg7CisgICAgcmV0dXJuOworICB9CisKKyAgcHEtPnFbaXRlbS0+aW5kZXhdID0gcHEtPnFbcHEtPmxlbmd0aCAtIDFdOworICBwcS0+cVtpdGVtLT5pbmRleF0tPmluZGV4ID0gaXRlbS0+aW5kZXg7CisgIC0tcHEtPmxlbmd0aDsKKworICBpZiAocHEtPmxlc3MoaXRlbSwgcHEtPnFbaXRlbS0+aW5kZXhdKSkgeworICAgIGJ1YmJsZV9kb3duKHBxLCBpdGVtLT5pbmRleCk7CisgIH0gZWxzZSB7CisgICAgYnViYmxlX3VwKHBxLCBpdGVtLT5pbmRleCk7CisgIH0KK30KKworaW50IG5naHR0cDJfcHFfZW1wdHkobmdodHRwMl9wcSAqcHEpIHsgcmV0dXJuIHBxLT5sZW5ndGggPT0gMDsgfQorCitzaXplX3QgbmdodHRwMl9wcV9zaXplKG5naHR0cDJfcHEgKnBxKSB7IHJldHVybiBwcS0+bGVuZ3RoOyB9CisKK3ZvaWQgbmdodHRwMl9wcV91cGRhdGUobmdodHRwMl9wcSAqcHEsIG5naHR0cDJfcHFfaXRlbV9jYiBmdW4sIHZvaWQgKmFyZykgeworICBzaXplX3QgaTsKKyAgaW50IHJ2ID0gMDsKKyAgaWYgKHBxLT5sZW5ndGggPT0gMCkgeworICAgIHJldHVybjsKKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgcHEtPmxlbmd0aDsgKytpKSB7CisgICAgcnYgfD0gKCpmdW4pKHBxLT5xW2ldLCBhcmcpOworICB9CisgIGlmIChydikgeworICAgIGZvciAoaSA9IHBxLT5sZW5ndGg7IGkgPiAwOyAtLWkpIHsKKyAgICAgIGJ1YmJsZV9kb3duKHBxLCBpIC0gMSk7CisgICAgfQorICB9Cit9CisKK2ludCBuZ2h0dHAyX3BxX2VhY2gobmdodHRwMl9wcSAqcHEsIG5naHR0cDJfcHFfaXRlbV9jYiBmdW4sIHZvaWQgKmFyZykgeworICBzaXplX3QgaTsKKworICBpZiAocHEtPmxlbmd0aCA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IHBxLT5sZW5ndGg7ICsraSkgeworICAgIGlmICgoKmZ1bikocHEtPnFbaV0sIGFyZykpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcHEuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcHEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDdiNzAyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9wcS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9QUV9ICisjZGVmaW5lIE5HSFRUUDJfUFFfSAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisjaW5jbHVkZSAibmdodHRwMl9pbnQuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX21lbS5oIgorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBwcmlvcml0eSBxdWV1ZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHNpemVfdCBpbmRleDsKK30gbmdodHRwMl9wcV9lbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBUaGUgcG9pbnRlciB0byB0aGUgcG9pbnRlciB0byB0aGUgaXRlbSBzdG9yZWQgKi8KKyAgbmdodHRwMl9wcV9lbnRyeSAqKnE7CisgIC8qIE1lbW9yeSBhbGxvY2F0b3IgKi8KKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgLyogVGhlIG51bWJlciBvZiBpdGVtcyBzdG9yZWQgKi8KKyAgc2l6ZV90IGxlbmd0aDsKKyAgLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoaXMgcHEgY2FuIHN0b3JlLiBUaGlzIGlzCisgICAgIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgd2hlbiBsZW5ndGggaXMgcmVhY2hlZCB0byB0aGlzIHZhbHVlLiAqLworICBzaXplX3QgY2FwYWNpdHk7CisgIC8qIFRoZSBsZXNzIGZ1bmN0aW9uIGJldHdlZW4gaXRlbXMgKi8KKyAgbmdodHRwMl9sZXNzIGxlc3M7Cit9IG5naHR0cDJfcHE7CisKKy8qCisgKiBJbml0aWFsaXplcyBwcmlvcml0eSBxdWV1ZSB8cHF8IHdpdGggY29tcGFyZSBmdW5jdGlvbiB8Y21wfC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfcHFfaW5pdChuZ2h0dHAyX3BxICpwcSwgbmdodHRwMl9sZXNzIGxlc3MsIG5naHR0cDJfbWVtICptZW0pOworCisvKgorICogRGVhbGxvY2F0ZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHxwcXwuICBUaGUgc3RvcmVkIGl0ZW1zIGFyZQorICogbm90IGZyZWVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgbmdodHRwMl9wcV9mcmVlKG5naHR0cDJfcHEgKnBxKTsKKworLyoKKyAqIEFkZHMgfGl0ZW18IHRvIHRoZSBwcmlvcml0eSBxdWV1ZSB8cHF8LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9wcV9wdXNoKG5naHR0cDJfcHEgKnBxLCBuZ2h0dHAyX3BxX2VudHJ5ICppdGVtKTsKKworLyoKKyAqIFJldHVybnMgaXRlbSBhdCB0aGUgdG9wIG9mIHRoZSBxdWV1ZSB8cHF8LiBJZiB0aGUgcXVldWUgaXMgZW1wdHksCisgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KKyAqLworbmdodHRwMl9wcV9lbnRyeSAqbmdodHRwMl9wcV90b3AobmdodHRwMl9wcSAqcHEpOworCisvKgorICogUG9wcyBpdGVtIGF0IHRoZSB0b3Agb2YgdGhlIHF1ZXVlIHxwcXwuIFRoZSBwb3BwZWQgaXRlbSBpcyBub3QKKyAqIGZyZWVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgbmdodHRwMl9wcV9wb3AobmdodHRwMl9wcSAqcHEpOworCisvKgorICogUmV0dXJucyBub256ZXJvIGlmIHRoZSBxdWV1ZSB8cHF8IGlzIGVtcHR5LgorICovCitpbnQgbmdodHRwMl9wcV9lbXB0eShuZ2h0dHAyX3BxICpwcSk7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHF1ZXVlIHxwcXwuCisgKi8KK3NpemVfdCBuZ2h0dHAyX3BxX3NpemUobmdodHRwMl9wcSAqcHEpOworCit0eXBlZGVmIGludCAoKm5naHR0cDJfcHFfaXRlbV9jYikobmdodHRwMl9wcV9lbnRyeSAqaXRlbSwgdm9pZCAqYXJnKTsKKworLyoKKyAqIFVwZGF0ZXMgZWFjaCBpdGVtIGluIHxwcXwgdXNpbmcgZnVuY3Rpb24gfGZ1bnwgYW5kIHJlLWNvbnN0cnVjdAorICogcHJpb3JpdHkgcXVldWUuIFRoZSB8ZnVufCBtdXN0IHJldHVybiBub24temVybyBpZiBpdCBtb2RpZmllcyB0aGUKKyAqIGl0ZW0gaW4gYSB3YXkgdGhhdCBpdCBhZmZlY3RzIG9yZGVyaW5nIGluIHRoZSBwcmlvcml0eSBxdWV1ZS4gVGhlCisgKiB8YXJnfCBpcyBwYXNzZWQgdG8gdGhlIDJuZCBwYXJhbWV0ZXIgb2YgfGZ1bnwuCisgKi8KK3ZvaWQgbmdodHRwMl9wcV91cGRhdGUobmdodHRwMl9wcSAqcHEsIG5naHR0cDJfcHFfaXRlbV9jYiBmdW4sIHZvaWQgKmFyZyk7CisKKy8qCisgKiBBcHBseXMgfGZ1bnwgdG8gZWFjaCBpdGVtIGluIHxwcXwuICBUaGUgfGFyZ3wgaXMgcGFzc2VkIGFzIGFyZworICogcGFyYW1ldGVyIHRvIGNhbGxiYWNrIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBjaGFuZ2UgdGhlCisgKiBvcmRlcmluZyBrZXkuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gY2FsbGJhY2sgaXMgbm9uemVybywgdGhpcworICogZnVuY3Rpb24gcmV0dXJucyAxIGltbWVkaWF0ZWx5IHdpdGhvdXQgaXRlcmF0aW5nIHJlbWFpbmluZyBpdGVtcy4KKyAqIE90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMC4KKyAqLworaW50IG5naHR0cDJfcHFfZWFjaChuZ2h0dHAyX3BxICpwcSwgbmdodHRwMl9wcV9pdGVtX2NiIGZ1biwgdm9pZCAqYXJnKTsKKworLyoKKyAqIFJlbW92ZXMgfGl0ZW18IGZyb20gcHJpb3JpdHkgcXVldWUuCisgKi8KK3ZvaWQgbmdodHRwMl9wcV9yZW1vdmUobmdodHRwMl9wcSAqcHEsIG5naHR0cDJfcHFfZW50cnkgKml0ZW0pOworCisjZW5kaWYgLyogTkdIVFRQMl9QUV9IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3ByaW9yaXR5X3NwZWMuYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcHJpb3JpdHlfc3BlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMTk2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3ByaW9yaXR5X3NwZWMuYwpAQCAtMCwwICsxLDUyIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX3ByaW9yaXR5X3NwZWMuaCIKKwordm9pZCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfaW5pdChuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwgaW50MzJfdCB3ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleGNsdXNpdmUpIHsKKyAgcHJpX3NwZWMtPnN0cmVhbV9pZCA9IHN0cmVhbV9pZDsKKyAgcHJpX3NwZWMtPndlaWdodCA9IHdlaWdodDsKKyAgcHJpX3NwZWMtPmV4Y2x1c2l2ZSA9IGV4Y2x1c2l2ZSAhPSAwOworfQorCit2b2lkIG5naHR0cDJfcHJpb3JpdHlfc3BlY19kZWZhdWx0X2luaXQobmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYykgeworICBwcmlfc3BlYy0+c3RyZWFtX2lkID0gMDsKKyAgcHJpX3NwZWMtPndlaWdodCA9IE5HSFRUUDJfREVGQVVMVF9XRUlHSFQ7CisgIHByaV9zcGVjLT5leGNsdXNpdmUgPSAwOworfQorCitpbnQgbmdodHRwMl9wcmlvcml0eV9zcGVjX2NoZWNrX2RlZmF1bHQoY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYykgeworICByZXR1cm4gcHJpX3NwZWMtPnN0cmVhbV9pZCA9PSAwICYmCisgICAgICAgICBwcmlfc3BlYy0+d2VpZ2h0ID09IE5HSFRUUDJfREVGQVVMVF9XRUlHSFQgJiYgcHJpX3NwZWMtPmV4Y2x1c2l2ZSA9PSAwOworfQorCit2b2lkIG5naHR0cDJfcHJpb3JpdHlfc3BlY19ub3JtYWxpemVfd2VpZ2h0KG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpIHsKKyAgaWYgKHByaV9zcGVjLT53ZWlnaHQgPCBOR0hUVFAyX01JTl9XRUlHSFQpIHsKKyAgICBwcmlfc3BlYy0+d2VpZ2h0ID0gTkdIVFRQMl9NSU5fV0VJR0hUOworICB9IGVsc2UgaWYgKHByaV9zcGVjLT53ZWlnaHQgPiBOR0hUVFAyX01BWF9XRUlHSFQpIHsKKyAgICBwcmlfc3BlYy0+d2VpZ2h0ID0gTkdIVFRQMl9NQVhfV0VJR0hUOworICB9Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3ByaW9yaXR5X3NwZWMuaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcHJpb3JpdHlfc3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZWNlODIKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3ByaW9yaXR5X3NwZWMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgTkdIVFRQMl9QUklPUklUWV9TUEVDX0gKKyNkZWZpbmUgTkdIVFRQMl9QUklPUklUWV9TUEVDX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCisvKgorICogVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIHByaV9zcGVjLT53ZWlnaHQgaWYgaXQgaXMgb3V0IG9mIHJhbmdlLgorICogSWYgcHJpX3NwZWMtPndlaWdodCBpcyBsZXNzIHRoYW4gTkdIVFRQMl9NSU5fV0VJR0hULCBpdCBpcyBzZXQgdG8KKyAqIE5HSFRUUDJfTUlOX1dFSUdIVC4gIElmIHByaV9zcGVjLT53ZWlnaHQgaXMgbGFyZ2VyIHRoYW4KKyAqIE5HSFRUUDJfTUFYX1dFSUdIVCwgaXQgaXMgc2V0IHRvIE5HSFRUUDJfTUFYX1dFSUdIVC4KKyAqLwordm9pZCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfbm9ybWFsaXplX3dlaWdodChuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKTsKKworI2VuZGlmIC8qIE5HSFRUUDJfUFJJT1JJVFlfU1BFQ19IICovCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3F1ZXVlLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3F1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1ZWI2OQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcXVldWUuYwpAQCAtMCwwICsxLDg1IEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX3F1ZXVlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKwordm9pZCBuZ2h0dHAyX3F1ZXVlX2luaXQobmdodHRwMl9xdWV1ZSAqcXVldWUpIHsKKyAgcXVldWUtPmZyb250ID0gcXVldWUtPmJhY2sgPSBOVUxMOworfQorCit2b2lkIG5naHR0cDJfcXVldWVfZnJlZShuZ2h0dHAyX3F1ZXVlICpxdWV1ZSkgeworICBpZiAoIXF1ZXVlKSB7CisgICAgcmV0dXJuOworICB9IGVsc2UgeworICAgIG5naHR0cDJfcXVldWVfY2VsbCAqcCA9IHF1ZXVlLT5mcm9udDsKKyAgICB3aGlsZSAocCkgeworICAgICAgbmdodHRwMl9xdWV1ZV9jZWxsICpuZXh0ID0gcC0+bmV4dDsKKyAgICAgIGZyZWUocCk7CisgICAgICBwID0gbmV4dDsKKyAgICB9CisgIH0KK30KKworaW50IG5naHR0cDJfcXVldWVfcHVzaChuZ2h0dHAyX3F1ZXVlICpxdWV1ZSwgdm9pZCAqZGF0YSkgeworICBuZ2h0dHAyX3F1ZXVlX2NlbGwgKm5ld19jZWxsID0KKyAgICAgIChuZ2h0dHAyX3F1ZXVlX2NlbGwgKiltYWxsb2Moc2l6ZW9mKG5naHR0cDJfcXVldWVfY2VsbCkpOworICBpZiAoIW5ld19jZWxsKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisgIG5ld19jZWxsLT5kYXRhID0gZGF0YTsKKyAgbmV3X2NlbGwtPm5leHQgPSBOVUxMOworICBpZiAocXVldWUtPmJhY2spIHsKKyAgICBxdWV1ZS0+YmFjay0+bmV4dCA9IG5ld19jZWxsOworICAgIHF1ZXVlLT5iYWNrID0gbmV3X2NlbGw7CisKKyAgfSBlbHNlIHsKKyAgICBxdWV1ZS0+ZnJvbnQgPSBxdWV1ZS0+YmFjayA9IG5ld19jZWxsOworICB9CisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfcXVldWVfcG9wKG5naHR0cDJfcXVldWUgKnF1ZXVlKSB7CisgIG5naHR0cDJfcXVldWVfY2VsbCAqZnJvbnQgPSBxdWV1ZS0+ZnJvbnQ7CisgIGFzc2VydChmcm9udCk7CisgIHF1ZXVlLT5mcm9udCA9IGZyb250LT5uZXh0OworICBpZiAoZnJvbnQgPT0gcXVldWUtPmJhY2spIHsKKyAgICBxdWV1ZS0+YmFjayA9IE5VTEw7CisgIH0KKyAgZnJlZShmcm9udCk7Cit9CisKK3ZvaWQgKm5naHR0cDJfcXVldWVfZnJvbnQobmdodHRwMl9xdWV1ZSAqcXVldWUpIHsKKyAgYXNzZXJ0KHF1ZXVlLT5mcm9udCk7CisgIHJldHVybiBxdWV1ZS0+ZnJvbnQtPmRhdGE7Cit9CisKK3ZvaWQgKm5naHR0cDJfcXVldWVfYmFjayhuZ2h0dHAyX3F1ZXVlICpxdWV1ZSkgeworICBhc3NlcnQocXVldWUtPmJhY2spOworICByZXR1cm4gcXVldWUtPmJhY2stPmRhdGE7Cit9CisKK2ludCBuZ2h0dHAyX3F1ZXVlX2VtcHR5KG5naHR0cDJfcXVldWUgKnF1ZXVlKSB7IHJldHVybiBxdWV1ZS0+ZnJvbnQgPT0gTlVMTDsgfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9xdWV1ZS5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNmZhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3F1ZXVlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfUVVFVUVfSAorI2RlZmluZSBOR0hUVFAyX1FVRVVFX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCit0eXBlZGVmIHN0cnVjdCBuZ2h0dHAyX3F1ZXVlX2NlbGwgeworICB2b2lkICpkYXRhOworICBzdHJ1Y3QgbmdodHRwMl9xdWV1ZV9jZWxsICpuZXh0OworfSBuZ2h0dHAyX3F1ZXVlX2NlbGw7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgbmdodHRwMl9xdWV1ZV9jZWxsICpmcm9udCwgKmJhY2s7Cit9IG5naHR0cDJfcXVldWU7CisKK3ZvaWQgbmdodHRwMl9xdWV1ZV9pbml0KG5naHR0cDJfcXVldWUgKnF1ZXVlKTsKK3ZvaWQgbmdodHRwMl9xdWV1ZV9mcmVlKG5naHR0cDJfcXVldWUgKnF1ZXVlKTsKK2ludCBuZ2h0dHAyX3F1ZXVlX3B1c2gobmdodHRwMl9xdWV1ZSAqcXVldWUsIHZvaWQgKmRhdGEpOwordm9pZCBuZ2h0dHAyX3F1ZXVlX3BvcChuZ2h0dHAyX3F1ZXVlICpxdWV1ZSk7Cit2b2lkICpuZ2h0dHAyX3F1ZXVlX2Zyb250KG5naHR0cDJfcXVldWUgKnF1ZXVlKTsKK3ZvaWQgKm5naHR0cDJfcXVldWVfYmFjayhuZ2h0dHAyX3F1ZXVlICpxdWV1ZSk7CitpbnQgbmdodHRwMl9xdWV1ZV9lbXB0eShuZ2h0dHAyX3F1ZXVlICpxdWV1ZSk7CisKKyNlbmRpZiAvKiBOR0hUVFAyX1FVRVVFX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcmNidWYuYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfcmNidWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc4MTRkCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9yY2J1Zi5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX3JjYnVmLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIm5naHR0cDJfbWVtLmgiCisjaW5jbHVkZSAibmdodHRwMl9oZWxwZXIuaCIKKworaW50IG5naHR0cDJfcmNidWZfbmV3KG5naHR0cDJfcmNidWYgKipyY2J1Zl9wdHIsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pIHsKKyAgdWludDhfdCAqcDsKKworICBwID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfcmNidWYpICsgc2l6ZSk7CisgIGlmIChwID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICAqcmNidWZfcHRyID0gKHZvaWQgKilwOworCisgICgqcmNidWZfcHRyKS0+bWVtX3VzZXJfZGF0YSA9IG1lbS0+bWVtX3VzZXJfZGF0YTsKKyAgKCpyY2J1Zl9wdHIpLT5mcmVlID0gbWVtLT5mcmVlOworICAoKnJjYnVmX3B0ciktPmJhc2UgPSBwICsgc2l6ZW9mKG5naHR0cDJfcmNidWYpOworICAoKnJjYnVmX3B0ciktPmxlbiA9IHNpemU7CisgICgqcmNidWZfcHRyKS0+cmVmID0gMTsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfcmNidWZfbmV3MihuZ2h0dHAyX3JjYnVmICoqcmNidWZfcHRyLCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzcmNsZW4sIG5naHR0cDJfbWVtICptZW0pIHsKKyAgaW50IHJ2OworCisgIHJ2ID0gbmdodHRwMl9yY2J1Zl9uZXcocmNidWZfcHRyLCBzcmNsZW4gKyAxLCBtZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgICgqcmNidWZfcHRyKS0+bGVuID0gc3JjbGVuOworICAqbmdodHRwMl9jcHltZW0oKCpyY2J1Zl9wdHIpLT5iYXNlLCBzcmMsIHNyY2xlbikgPSAnXDAnOworCisgIHJldHVybiAwOworfQorCisvKgorICogRnJlZXMgfHJjYnVmfCBpdHNlbGYsIHJlZ2FyZGxlc3Mgb2YgaXRzIHJlZmVyZW5jZSBjb3V0LgorICovCit2b2lkIG5naHR0cDJfcmNidWZfZGVsKG5naHR0cDJfcmNidWYgKnJjYnVmKSB7CisgIG5naHR0cDJfbWVtX2ZyZWUyKHJjYnVmLT5mcmVlLCByY2J1ZiwgcmNidWYtPm1lbV91c2VyX2RhdGEpOworfQorCit2b2lkIG5naHR0cDJfcmNidWZfaW5jcmVmKG5naHR0cDJfcmNidWYgKnJjYnVmKSB7CisgIGlmIChyY2J1Zi0+cmVmID09IC0xKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgKytyY2J1Zi0+cmVmOworfQorCit2b2lkIG5naHR0cDJfcmNidWZfZGVjcmVmKG5naHR0cDJfcmNidWYgKnJjYnVmKSB7CisgIGlmIChyY2J1ZiA9PSBOVUxMIHx8IHJjYnVmLT5yZWYgPT0gLTEpIHsKKyAgICByZXR1cm47CisgIH0KKworICBhc3NlcnQocmNidWYtPnJlZiA+IDApOworCisgIGlmICgtLXJjYnVmLT5yZWYgPT0gMCkgeworICAgIG5naHR0cDJfcmNidWZfZGVsKHJjYnVmKTsKKyAgfQorfQorCituZ2h0dHAyX3ZlYyBuZ2h0dHAyX3JjYnVmX2dldF9idWYobmdodHRwMl9yY2J1ZiAqcmNidWYpIHsKKyAgbmdodHRwMl92ZWMgcmVzID0ge3JjYnVmLT5iYXNlLCByY2J1Zi0+bGVufTsKKyAgcmV0dXJuIHJlczsKK30KKworaW50IG5naHR0cDJfcmNidWZfaXNfc3RhdGljKGNvbnN0IG5naHR0cDJfcmNidWYgKnJjYnVmKSB7CisgIHJldHVybiByY2J1Zi0+cmVmID09IC0xOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9yY2J1Zi5oIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9yY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MTRlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3JjYnVmLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2IFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfUkNCVUZfSAorI2RlZmluZSBOR0hUVFAyX1JDQlVGX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCitzdHJ1Y3QgbmdodHRwMl9yY2J1ZiB7CisgIC8qIGN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yIGJlbG9uZ3MgdG8gdGhlIG1lbSBwYXJhbWV0ZXIgd2hlbgorICAgICBjcmVhdGluZyB0aGlzIG9iamVjdC4gKi8KKyAgdm9pZCAqbWVtX3VzZXJfZGF0YTsKKyAgbmdodHRwMl9mcmVlIGZyZWU7CisgIC8qIFRoZSBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciAqLworICB1aW50OF90ICpiYXNlOworICAvKiBTaXplIG9mIGJ1ZmZlciBwb2ludGVkIGJ5IHxiYXNlfC4gKi8KKyAgc2l6ZV90IGxlbjsKKyAgLyogUmVmZXJlbmNlIGNvdW50ICovCisgIGludDMyX3QgcmVmOworfTsKKworLyoKKyAqIEFsbG9jYXRlcyBuZ2h0dHAyX3JjYnVmIG9iamVjdCB3aXRoIHxzaXplfCBhcyBpbml0aWFsIGJ1ZmZlciBzaXplLgorICogV2hlbiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZWZlcmVuY2UgY291bnQgYmVjb21lcyAxLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU06CisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfcmNidWZfbmV3KG5naHR0cDJfcmNidWYgKipyY2J1Zl9wdHIsIHNpemVfdCBzaXplLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIExpa2UgbmdodHRwMl9yY2J1Zl9uZXcoKSwgYnV0IGluaXRpYWxpemVzIHRoZSBidWZmZXIgd2l0aCB8c3JjfCBvZgorICogbGVuZ3RoIHxzcmNsZW58LiAgVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYWRkaXRpb25hbCBieXRlIGF0IHRoZQorICogZW5kIGFuZCBwdXRzICdcMCcgaW50byBpdCwgc28gdGhhdCB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBjb3VsZCBiZQorICogdXNlZCBhcyBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLiAgU3RpbGwgKCpyY2J1Zl9wdHIpLT5sZW4gZXF1YWxzIHRvCisgKiB8c3JjbGVufC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNOgorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK2ludCBuZ2h0dHAyX3JjYnVmX25ldzIobmdodHRwMl9yY2J1ZiAqKnJjYnVmX3B0ciwgY29uc3QgdWludDhfdCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjbGVuLCBuZ2h0dHAyX21lbSAqbWVtKTsKKworLyoKKyAqIEZyZWVzIHxyY2J1ZnwgaXRzZWxmLCByZWdhcmRsZXNzIG9mIGl0cyByZWZlcmVuY2UgY291dC4KKyAqLwordm9pZCBuZ2h0dHAyX3JjYnVmX2RlbChuZ2h0dHAyX3JjYnVmICpyY2J1Zik7CisKKyNlbmRpZiAvKiBOR0hUVFAyX1JDQlVGX0ggKi8KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc2Vzc2lvbi5jIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9zZXNzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmM2Q2ZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc2Vzc2lvbi5jCkBAIC0wLDAgKzEsNzc4MCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAibmdodHRwMl9zZXNzaW9uLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAibmdodHRwMl9oZWxwZXIuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX25ldC5oIgorI2luY2x1ZGUgIm5naHR0cDJfcHJpb3JpdHlfc3BlYy5oIgorI2luY2x1ZGUgIm5naHR0cDJfb3B0aW9uLmgiCisjaW5jbHVkZSAibmdodHRwMl9odHRwLmgiCisjaW5jbHVkZSAibmdodHRwMl9wcS5oIgorI2luY2x1ZGUgIm5naHR0cDJfZGVidWcuaCIKKworLyoKKyAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIG51bWJlciBvZiBvdXRnb2luZyBvcGVuZWQgc3RyZWFtcyBpcyBsYXJnZXIKKyAqIHRoYW4gb3IgZXF1YWwgdG8KKyAqIHJlbW90ZV9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zLgorICovCitzdGF0aWMgaW50CitzZXNzaW9uX2lzX291dGdvaW5nX2NvbmN1cnJlbnRfc3RyZWFtc19tYXgobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA8PQorICAgICAgICAgc2Vzc2lvbi0+bnVtX291dGdvaW5nX3N0cmVhbXM7Cit9CisKKy8qCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBudW1iZXIgb2YgaW5jb21pbmcgb3BlbmVkIHN0cmVhbXMgaXMgbGFyZ2VyCisgKiB0aGFuIG9yIGVxdWFsIHRvCisgKiBsb2NhbF9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zLgorICovCitzdGF0aWMgaW50CitzZXNzaW9uX2lzX2luY29taW5nX2NvbmN1cnJlbnRfc3RyZWFtc19tYXgobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zIDw9CisgICAgICAgICBzZXNzaW9uLT5udW1faW5jb21pbmdfc3RyZWFtczsKK30KKworLyoKKyAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIG51bWJlciBvZiBpbmNvbWluZyBvcGVuZWQgc3RyZWFtcyBpcyBsYXJnZXIKKyAqIHRoYW4gb3IgZXF1YWwgdG8KKyAqIHNlc3Npb24tPnBlbmRpbmdfbG9jYWxfbWF4X2NvbmN1cnJlbnRfc3RyZWFtLgorICovCitzdGF0aWMgaW50CitzZXNzaW9uX2lzX2luY29taW5nX2NvbmN1cnJlbnRfc3RyZWFtc19wZW5kaW5nX21heChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIHNlc3Npb24tPnBlbmRpbmdfbG9jYWxfbWF4X2NvbmN1cnJlbnRfc3RyZWFtIDw9CisgICAgICAgICBzZXNzaW9uLT5udW1faW5jb21pbmdfc3RyZWFtczsKK30KKworLyoKKyAqIFJldHVybnMgbm9uLXplcm8gaWYgfGxpYl9lcnJvcnwgaXMgbm9uLWZhdGFsIGVycm9yLgorICovCitzdGF0aWMgaW50IGlzX25vbl9mYXRhbChpbnQgbGliX2Vycm9yX2NvZGUpIHsKKyAgcmV0dXJuIGxpYl9lcnJvcl9jb2RlIDwgMCAmJiBsaWJfZXJyb3JfY29kZSA+IE5HSFRUUDJfRVJSX0ZBVEFMOworfQorCitpbnQgbmdodHRwMl9pc19mYXRhbChpbnQgbGliX2Vycm9yX2NvZGUpIHsKKyAgcmV0dXJuIGxpYl9lcnJvcl9jb2RlIDwgTkdIVFRQMl9FUlJfRkFUQUw7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9lbmZvcmNlX2h0dHBfbWVzc2FnaW5nKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gKHNlc3Npb24tPm9wdF9mbGFncyAmIE5HSFRUUDJfT1BUTUFTS19OT19IVFRQX01FU1NBR0lORykgPT0gMDsKK30KKworLyoKKyAqIFJldHVybnMgbm9uemVybyBpZiB8ZnJhbWV8IGlzIHRyYWlsZXIgaGVhZGVycy4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX3RyYWlsZXJfaGVhZGVycyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGlmICghc3RyZWFtIHx8IGZyYW1lLT5oZC50eXBlICE9IE5HSFRUUDJfSEVBREVSUykgeworICAgIHJldHVybiAwOworICB9CisgIGlmIChzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gZnJhbWUtPmhlYWRlcnMuY2F0ID09IE5HSFRUUDJfSENBVF9IRUFERVJTOworICB9CisKKyAgcmV0dXJuIGZyYW1lLT5oZWFkZXJzLmNhdCA9PSBOR0hUVFAyX0hDQVRfSEVBREVSUyAmJgorICAgICAgICAgKHN0cmVhbS0+aHR0cF9mbGFncyAmIE5HSFRUUDJfSFRUUF9GTEFHX0VYUEVDVF9GSU5BTF9SRVNQT05TRSkgPT0gMDsKK30KKworLyogUmV0dXJucyBub256ZXJvIGlmIHRoZSB8c3RyZWFtfCBpcyBpbiByZXNlcnZlZChyZW1vdGUpIHN0YXRlICovCitzdGF0aWMgaW50IHN0YXRlX3Jlc2VydmVkX3JlbW90ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHJldHVybiBzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVEICYmCisgICAgICAgICAhbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCk7Cit9CisKKy8qIFJldHVybnMgbm9uemVybyBpZiB0aGUgfHN0cmVhbXwgaXMgaW4gcmVzZXJ2ZWQobG9jYWwpIHN0YXRlICovCitzdGF0aWMgaW50IHN0YXRlX3Jlc2VydmVkX2xvY2FsKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9SRVNFUlZFRCAmJgorICAgICAgICAgbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCk7Cit9CisKKy8qCisgKiBDaGVja3Mgd2hldGhlciByZWNlaXZlZCBzdHJlYW1faWQgaXMgdmFsaWQuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIDEgaWYgaXQgc3VjY2VlZHMsIG9yIDAuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9pc19uZXdfcGVlcl9zdHJlYW1faWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICByZXR1cm4gc3RyZWFtX2lkICE9IDAgJiYKKyAgICAgICAgICFuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIHN0cmVhbV9pZCkgJiYKKyAgICAgICAgIHNlc3Npb24tPmxhc3RfcmVjdl9zdHJlYW1faWQgPCBzdHJlYW1faWQ7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9kZXRlY3RfaWRsZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICAvKiBBc3N1bWUgdGhhdCBzdHJlYW0gb2JqZWN0IHdpdGggc3RyZWFtX2lkIGRvZXMgbm90IGV4aXN0ICovCisgIGlmIChuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIHN0cmVhbV9pZCkpIHsKKyAgICBpZiAoc2Vzc2lvbi0+bGFzdF9zZW50X3N0cmVhbV9pZCA8IHN0cmVhbV9pZCkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworICB9CisgIGlmIChzZXNzaW9uX2lzX25ld19wZWVyX3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW1faWQpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZXh0X3R5cGVfc2V0KGNvbnN0IHVpbnQ4X3QgKmV4dF90eXBlcywgdWludDhfdCB0eXBlKSB7CisgIHJldHVybiAoZXh0X3R5cGVzW3R5cGUgLyA4XSAmICgxIDw8ICh0eXBlICYgMHg3KSkpID4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX2NhbGxfZXJyb3JfY2FsbGJhY2sobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpYl9lcnJvcl9jb2RlLCBjb25zdCBjaGFyICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIHsKKyAgc2l6ZV90IGJ1ZnNpemU7CisgIHZhX2xpc3QgYXA7CisgIGNoYXIgKmJ1ZjsKKyAgaW50IHJ2OworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIGlmICghc2Vzc2lvbi0+Y2FsbGJhY2tzLmVycm9yX2NhbGxiYWNrICYmCisgICAgICAhc2Vzc2lvbi0+Y2FsbGJhY2tzLmVycm9yX2NhbGxiYWNrMikgeworICAgIHJldHVybiAwOworICB9CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICB2YV9zdGFydChhcCwgZm10KTsKKyAgcnYgPSB2c25wcmludGYoTlVMTCwgMCwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisKKyAgaWYgKHJ2IDwgMCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIGJ1ZnNpemUgPSAoc2l6ZV90KShydiArIDEpOworCisgIGJ1ZiA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIGJ1ZnNpemUpOworICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICB2YV9zdGFydChhcCwgZm10KTsKKyAgcnYgPSB2c25wcmludGYoYnVmLCBidWZzaXplLCBmbXQsIGFwKTsKKyAgdmFfZW5kKGFwKTsKKworICBpZiAocnYgPCAwKSB7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGJ1Zik7CisgICAgLyogdnNucHJpbnRmIG1heSByZXR1cm4gZXJyb3IgYmVjYXVzZSBvZiB2YXJpb3VzIHRoaW5ncyB3ZSBjYW4KKyAgICAgICBpbWFnaW5lLCBidXQgdHlwaWNhbGx5IHdlIGRvbid0IHdhbnQgdG8gZHJvcCBzZXNzaW9uIGp1c3QgZm9yCisgICAgICAgZGVidWcgY2FsbGJhY2suICovCisgICAgREVCVUdGKCJlcnJvcl9jYWxsYmFjazogdnNucHJpbnRmIGZhaWxlZC4gVGhlIHRlbXBsYXRlIHdhcyAlc1xuIiwgZm10KTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3MuZXJyb3JfY2FsbGJhY2syKSB7CisgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3MuZXJyb3JfY2FsbGJhY2syKHNlc3Npb24sIGxpYl9lcnJvcl9jb2RlLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcnYsIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgIH0gZWxzZSB7CisgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3MuZXJyb3JfY2FsbGJhY2soc2Vzc2lvbiwgYnVmLCAoc2l6ZV90KXJ2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgIH0KKworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgYnVmKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsYXN0X3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlLCBjb25zdCBjaGFyICpyZWFzb24pIHsKKyAgaW50IHJ2OworICBjb25zdCB1aW50OF90ICpkZWJ1Z19kYXRhOworICBzaXplX3QgZGVidWdfZGF0YWxlbjsKKworICBpZiAoc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzICYgTkdIVFRQMl9HT0FXQVlfVEVSTV9PTl9TRU5EKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBJZ25vcmUgYWxsIGluY29taW5nIGZyYW1lcyBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byB0ZWFyIGRvd24gdGhlCisgICAgIHNlc3Npb24uICovCisgIHNlc3Npb24tPmlmcmFtZS5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0FMTDsKKworICBpZiAocmVhc29uID09IE5VTEwpIHsKKyAgICBkZWJ1Z19kYXRhID0gTlVMTDsKKyAgICBkZWJ1Z19kYXRhbGVuID0gMDsKKyAgfSBlbHNlIHsKKyAgICBkZWJ1Z19kYXRhID0gKGNvbnN0IHVpbnQ4X3QgKilyZWFzb247CisgICAgZGVidWdfZGF0YWxlbiA9IHN0cmxlbihyZWFzb24pOworICB9CisKKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX2dvYXdheShzZXNzaW9uLCBsYXN0X3N0cmVhbV9pZCwgZXJyb3JfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19kYXRhLCBkZWJ1Z19kYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfR09BV0FZX0FVWF9URVJNX09OX1NFTkQpOworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzIHw9IE5HSFRUUDJfR09BV0FZX1RFUk1fT05fU0VORDsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUpIHsKKyAgcmV0dXJuIHNlc3Npb25fdGVybWluYXRlX3Nlc3Npb24oc2Vzc2lvbiwgc2Vzc2lvbi0+bGFzdF9wcm9jX3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSwgTlVMTCk7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb24yKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGFzdF9zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlKSB7CisgIHJldHVybiBzZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uKHNlc3Npb24sIGxhc3Rfc3RyZWFtX2lkLCBlcnJvcl9jb2RlLCBOVUxMKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbikgeworICByZXR1cm4gc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbihzZXNzaW9uLCBzZXNzaW9uLT5sYXN0X3Byb2Nfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlLCByZWFzb24pOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBpbnQgcmVtOworICBpZiAoc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZW0gPSBzdHJlYW1faWQgJiAweDE7CisgIGlmIChzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gcmVtID09IDA7CisgIH0KKyAgcmV0dXJuIHJlbSA9PSAxOworfQorCituZ2h0dHAyX3N0cmVhbSAqbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgc3RyZWFtID0gKG5naHR0cDJfc3RyZWFtICopbmdodHRwMl9tYXBfZmluZCgmc2Vzc2lvbi0+c3RyZWFtcywgc3RyZWFtX2lkKTsKKworICBpZiAoc3RyZWFtID09IE5VTEwgfHwgKHN0cmVhbS0+ZmxhZ3MgJiBOR0hUVFAyX1NUUkVBTV9GTEFHX0NMT1NFRCkgfHwKKyAgICAgIHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fSURMRSkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcmV0dXJuIHN0cmVhbTsKK30KKworbmdodHRwMl9zdHJlYW0gKm5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIHJldHVybiAobmdodHRwMl9zdHJlYW0gKiluZ2h0dHAyX21hcF9maW5kKCZzZXNzaW9uLT5zdHJlYW1zLCBzdHJlYW1faWQpOworfQorCitzdGF0aWMgdm9pZCBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgbmdodHRwMl9tZW0gKm1lbSA9ICZzZXNzaW9uLT5tZW07CisgIC8qIEEgYml0IHJpc2t5IGNvZGUsIHNpbmNlIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20KKyAgICAgbmdodHRwMl9zZXNzaW9uX25ldygpLCB3ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQKKyAgICAgaWZyYW1lLT5mcmFtZS5oZC50eXBlIGlzIDAsIHNvIHRoYXQgbm8gZnJlZSBpcyBwZXJmb3JtZWQuICovCisgIHN3aXRjaCAoaWZyYW1lLT5mcmFtZS5oZC50eXBlKSB7CisgIGNhc2UgTkdIVFRQMl9EQVRBOgorICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfSEVBREVSUzoKKyAgICBuZ2h0dHAyX2ZyYW1lX2hlYWRlcnNfZnJlZSgmaWZyYW1lLT5mcmFtZS5oZWFkZXJzLCBtZW0pOworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfUFJJT1JJVFk6CisgICAgbmdodHRwMl9mcmFtZV9wcmlvcml0eV9mcmVlKCZpZnJhbWUtPmZyYW1lLnByaW9yaXR5KTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1JTVF9TVFJFQU06CisgICAgbmdodHRwMl9mcmFtZV9yc3Rfc3RyZWFtX2ZyZWUoJmlmcmFtZS0+ZnJhbWUucnN0X3N0cmVhbSk7CisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HUzoKKyAgICBuZ2h0dHAyX2ZyYW1lX3NldHRpbmdzX2ZyZWUoJmlmcmFtZS0+ZnJhbWUuc2V0dGluZ3MsIG1lbSk7CisKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaWZyYW1lLT5pdik7CisKKyAgICBpZnJhbWUtPml2ID0gTlVMTDsKKyAgICBpZnJhbWUtPm5pdiA9IDA7CisgICAgaWZyYW1lLT5tYXhfbml2ID0gMDsKKworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfUFVTSF9QUk9NSVNFOgorICAgIG5naHR0cDJfZnJhbWVfcHVzaF9wcm9taXNlX2ZyZWUoJmlmcmFtZS0+ZnJhbWUucHVzaF9wcm9taXNlLCBtZW0pOworICAgIGJyZWFrOworICBjYXNlIE5HSFRUUDJfUElORzoKKyAgICBuZ2h0dHAyX2ZyYW1lX3BpbmdfZnJlZSgmaWZyYW1lLT5mcmFtZS5waW5nKTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX0dPQVdBWToKKyAgICBuZ2h0dHAyX2ZyYW1lX2dvYXdheV9mcmVlKCZpZnJhbWUtPmZyYW1lLmdvYXdheSwgbWVtKTsKKyAgICBicmVhazsKKyAgY2FzZSBOR0hUVFAyX1dJTkRPV19VUERBVEU6CisgICAgbmdodHRwMl9mcmFtZV93aW5kb3dfdXBkYXRlX2ZyZWUoJmlmcmFtZS0+ZnJhbWUud2luZG93X3VwZGF0ZSk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgLyogZXh0ZW5zaW9uIGZyYW1lICovCisgICAgaWYgKGNoZWNrX2V4dF90eXBlX3NldChzZXNzaW9uLT51c2VyX3JlY3ZfZXh0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC50eXBlKSkgeworICAgICAgbmdodHRwMl9mcmFtZV9leHRlbnNpb25fZnJlZSgmaWZyYW1lLT5mcmFtZS5leHQpOworICAgIH0gZWxzZSB7CisgICAgICBzd2l0Y2ggKGlmcmFtZS0+ZnJhbWUuaGQudHlwZSkgeworICAgICAgY2FzZSBOR0hUVFAyX0FMVFNWQzoKKyAgICAgICAgaWYgKChzZXNzaW9uLT5idWlsdGluX3JlY3ZfZXh0X3R5cGVzICYgTkdIVFRQMl9UWVBFTUFTS19BTFRTVkMpID09IDApIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBuZ2h0dHAyX2ZyYW1lX2FsdHN2Y19mcmVlKCZpZnJhbWUtPmZyYW1lLmV4dCwgbWVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE5HSFRUUDJfT1JJR0lOOgorICAgICAgICBpZiAoKHNlc3Npb24tPmJ1aWx0aW5fcmVjdl9leHRfdHlwZXMgJiBOR0hUVFAyX1RZUEVNQVNLX09SSUdJTikgPT0gMCkgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5naHR0cDJfZnJhbWVfb3JpZ2luX2ZyZWUoJmlmcmFtZS0+ZnJhbWUuZXh0LCBtZW0pOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBicmVhazsKKyAgfQorCisgIG1lbXNldCgmaWZyYW1lLT5mcmFtZSwgMCwgc2l6ZW9mKG5naHR0cDJfZnJhbWUpKTsKKyAgbWVtc2V0KCZpZnJhbWUtPmV4dF9mcmFtZV9wYXlsb2FkLCAwLCBzaXplb2YobmdodHRwMl9leHRfZnJhbWVfcGF5bG9hZCkpOworCisgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfSEVBRDsKKworICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJmlmcmFtZS0+c2J1ZiwgaWZyYW1lLT5yYXdfc2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpZnJhbWUtPnJhd19zYnVmKSk7CisgIGlmcmFtZS0+c2J1Zi5tYXJrICs9IE5HSFRUUDJfRlJBTUVfSERMRU47CisKKyAgbmdodHRwMl9idWZfZnJlZSgmaWZyYW1lLT5sYnVmLCBtZW0pOworICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJmlmcmFtZS0+bGJ1ZiwgTlVMTCwgMCk7CisKKyAgaWZyYW1lLT5yYXdfbGJ1ZiA9IE5VTEw7CisKKyAgaWZyYW1lLT5wYXlsb2FkbGVmdCA9IDA7CisgIGlmcmFtZS0+cGFkbGVuID0gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9zZXR0aW5ncyhuZ2h0dHAyX3NldHRpbmdzX3N0b3JhZ2UgKnNldHRpbmdzKSB7CisgIHNldHRpbmdzLT5oZWFkZXJfdGFibGVfc2l6ZSA9IE5HSFRUUDJfSERfREVGQVVMVF9NQVhfQlVGRkVSX1NJWkU7CisgIHNldHRpbmdzLT5lbmFibGVfcHVzaCA9IDE7CisgIHNldHRpbmdzLT5tYXhfY29uY3VycmVudF9zdHJlYW1zID0gTkdIVFRQMl9ERUZBVUxUX01BWF9DT05DVVJSRU5UX1NUUkVBTVM7CisgIHNldHRpbmdzLT5pbml0aWFsX3dpbmRvd19zaXplID0gTkdIVFRQMl9JTklUSUFMX1dJTkRPV19TSVpFOworICBzZXR0aW5ncy0+bWF4X2ZyYW1lX3NpemUgPSBOR0hUVFAyX01BWF9GUkFNRV9TSVpFX01JTjsKKyAgc2V0dGluZ3MtPm1heF9oZWFkZXJfbGlzdF9zaXplID0gVUlOVDMyX01BWDsKK30KKworc3RhdGljIHZvaWQgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQobmdodHRwMl9hY3RpdmVfb3V0Ym91bmRfaXRlbSAqYW9iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBERUJVR0YoInNlbmQ6IHJlc2V0IG5naHR0cDJfYWN0aXZlX291dGJvdW5kX2l0ZW1cbiIpOworICBERUJVR0YoInNlbmQ6IGFvYi0+aXRlbSA9ICVwXG4iLCBhb2ItPml0ZW0pOworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1fZnJlZShhb2ItPml0ZW0sIG1lbSk7CisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBhb2ItPml0ZW0pOworICBhb2ItPml0ZW0gPSBOVUxMOworICBuZ2h0dHAyX2J1ZnNfcmVzZXQoJmFvYi0+ZnJhbWVidWZzKTsKKyAgYW9iLT5zdGF0ZSA9IE5HSFRUUDJfT0JfUE9QX0lURU07Cit9CisKK2ludCBuZ2h0dHAyX2VuYWJsZV9zdHJpY3RfcHJlZmFjZSA9IDE7CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9uZXcobmdodHRwMl9zZXNzaW9uICoqc2Vzc2lvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCBpbnQgc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIGludCBydjsKKyAgc2l6ZV90IG5idWZmZXI7CisgIHNpemVfdCBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUgPQorICAgICAgTkdIVFRQMl9IRF9ERUZBVUxUX01BWF9ERUZMQVRFX0JVRkZFUl9TSVpFOworCisgIGlmIChtZW0gPT0gTlVMTCkgeworICAgIG1lbSA9IG5naHR0cDJfbWVtX2RlZmF1bHQoKTsKKyAgfQorCisgICpzZXNzaW9uX3B0ciA9IG5naHR0cDJfbWVtX2NhbGxvYyhtZW0sIDEsIHNpemVvZihuZ2h0dHAyX3Nlc3Npb24pKTsKKyAgaWYgKCpzZXNzaW9uX3B0ciA9PSBOVUxMKSB7CisgICAgcnYgPSBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICBnb3RvIGZhaWxfc2Vzc2lvbjsKKyAgfQorCisgICgqc2Vzc2lvbl9wdHIpLT5tZW0gPSAqbWVtOworICBtZW0gPSAmKCpzZXNzaW9uX3B0ciktPm1lbTsKKworICAvKiBuZXh0X3N0cmVhbV9pZCBpcyBpbml0aWFsaXplZCBpbiBlaXRoZXIKKyAgICAgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcyIG9yIG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3MiAqLworCisgIG5naHR0cDJfc3RyZWFtX2luaXQoJigqc2Vzc2lvbl9wdHIpLT5yb290LCAwLCBOR0hUVFAyX1NUUkVBTV9GTEFHX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9TVFJFQU1fSURMRSwgTkdIVFRQMl9ERUZBVUxUX1dFSUdIVCwgMCwgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICBtZW0pOworCisgICgqc2Vzc2lvbl9wdHIpLT5yZW1vdGVfd2luZG93X3NpemUgPSBOR0hUVFAyX0lOSVRJQUxfQ09OTkVDVElPTl9XSU5ET1dfU0laRTsKKyAgKCpzZXNzaW9uX3B0ciktPnJlY3Zfd2luZG93X3NpemUgPSAwOworICAoKnNlc3Npb25fcHRyKS0+Y29uc3VtZWRfc2l6ZSA9IDA7CisgICgqc2Vzc2lvbl9wdHIpLT5yZWN2X3JlZHVjdGlvbiA9IDA7CisgICgqc2Vzc2lvbl9wdHIpLT5sb2NhbF93aW5kb3dfc2l6ZSA9IE5HSFRUUDJfSU5JVElBTF9DT05ORUNUSU9OX1dJTkRPV19TSVpFOworCisgICgqc2Vzc2lvbl9wdHIpLT5nb2F3YXlfZmxhZ3MgPSBOR0hUVFAyX0dPQVdBWV9OT05FOworICAoKnNlc3Npb25fcHRyKS0+bG9jYWxfbGFzdF9zdHJlYW1faWQgPSAoMXUgPDwgMzEpIC0gMTsKKyAgKCpzZXNzaW9uX3B0ciktPnJlbW90ZV9sYXN0X3N0cmVhbV9pZCA9ICgxdSA8PCAzMSkgLSAxOworCisgICgqc2Vzc2lvbl9wdHIpLT5wZW5kaW5nX2xvY2FsX21heF9jb25jdXJyZW50X3N0cmVhbSA9CisgICAgICBOR0hUVFAyX0RFRkFVTFRfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUzsKKyAgKCpzZXNzaW9uX3B0ciktPnBlbmRpbmdfZW5hYmxlX3B1c2ggPSAxOworCisgIGlmIChzZXJ2ZXIpIHsKKyAgICAoKnNlc3Npb25fcHRyKS0+c2VydmVyID0gMTsKKyAgfQorCisgIGluaXRfc2V0dGluZ3MoJigqc2Vzc2lvbl9wdHIpLT5yZW1vdGVfc2V0dGluZ3MpOworICBpbml0X3NldHRpbmdzKCYoKnNlc3Npb25fcHRyKS0+bG9jYWxfc2V0dGluZ3MpOworCisgICgqc2Vzc2lvbl9wdHIpLT5tYXhfaW5jb21pbmdfcmVzZXJ2ZWRfc3RyZWFtcyA9CisgICAgICBOR0hUVFAyX01BWF9JTkNPTUlOR19SRVNFUlZFRF9TVFJFQU1TOworCisgIC8qIExpbWl0IG1heCBvdXRnb2luZyBjb25jdXJyZW50IHN0cmVhbXMgdG8gc2Vuc2libGUgdmFsdWUgKi8KKyAgKCpzZXNzaW9uX3B0ciktPnJlbW90ZV9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zID0gMTAwOworCisgICgqc2Vzc2lvbl9wdHIpLT5tYXhfc2VuZF9oZWFkZXJfYmxvY2tfbGVuZ3RoID0gTkdIVFRQMl9NQVhfSEVBREVSU0xFTjsKKyAgKCpzZXNzaW9uX3B0ciktPm1heF9vdXRib3VuZF9hY2sgPSBOR0hUVFAyX0RFRkFVTFRfTUFYX09CUV9GTE9PRF9JVEVNOworCisgIGlmIChvcHRpb24pIHsKKyAgICBpZiAoKG9wdGlvbi0+b3B0X3NldF9tYXNrICYgTkdIVFRQMl9PUFRfTk9fQVVUT19XSU5ET1dfVVBEQVRFKSAmJgorICAgICAgICBvcHRpb24tPm5vX2F1dG9fd2luZG93X3VwZGF0ZSkgeworCisgICAgICAoKnNlc3Npb25fcHRyKS0+b3B0X2ZsYWdzIHw9IE5HSFRUUDJfT1BUTUFTS19OT19BVVRPX1dJTkRPV19VUERBVEU7CisgICAgfQorCisgICAgaWYgKG9wdGlvbi0+b3B0X3NldF9tYXNrICYgTkdIVFRQMl9PUFRfUEVFUl9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7CisKKyAgICAgICgqc2Vzc2lvbl9wdHIpLT5yZW1vdGVfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9CisgICAgICAgICAgb3B0aW9uLT5wZWVyX21heF9jb25jdXJyZW50X3N0cmVhbXM7CisgICAgfQorCisgICAgaWYgKG9wdGlvbi0+b3B0X3NldF9tYXNrICYgTkdIVFRQMl9PUFRfTUFYX1JFU0VSVkVEX1JFTU9URV9TVFJFQU1TKSB7CisKKyAgICAgICgqc2Vzc2lvbl9wdHIpLT5tYXhfaW5jb21pbmdfcmVzZXJ2ZWRfc3RyZWFtcyA9CisgICAgICAgICAgb3B0aW9uLT5tYXhfcmVzZXJ2ZWRfcmVtb3RlX3N0cmVhbXM7CisgICAgfQorCisgICAgaWYgKChvcHRpb24tPm9wdF9zZXRfbWFzayAmIE5HSFRUUDJfT1BUX05PX1JFQ1ZfQ0xJRU5UX01BR0lDKSAmJgorICAgICAgICBvcHRpb24tPm5vX3JlY3ZfY2xpZW50X21hZ2ljKSB7CisKKyAgICAgICgqc2Vzc2lvbl9wdHIpLT5vcHRfZmxhZ3MgfD0gTkdIVFRQMl9PUFRNQVNLX05PX1JFQ1ZfQ0xJRU5UX01BR0lDOworICAgIH0KKworICAgIGlmICgob3B0aW9uLT5vcHRfc2V0X21hc2sgJiBOR0hUVFAyX09QVF9OT19IVFRQX01FU1NBR0lORykgJiYKKyAgICAgICAgb3B0aW9uLT5ub19odHRwX21lc3NhZ2luZykgeworCisgICAgICAoKnNlc3Npb25fcHRyKS0+b3B0X2ZsYWdzIHw9IE5HSFRUUDJfT1BUTUFTS19OT19IVFRQX01FU1NBR0lORzsKKyAgICB9CisKKyAgICBpZiAob3B0aW9uLT5vcHRfc2V0X21hc2sgJiBOR0hUVFAyX09QVF9VU0VSX1JFQ1ZfRVhUX1RZUEVTKSB7CisgICAgICBtZW1jcHkoKCpzZXNzaW9uX3B0ciktPnVzZXJfcmVjdl9leHRfdHlwZXMsIG9wdGlvbi0+dXNlcl9yZWN2X2V4dF90eXBlcywKKyAgICAgICAgICAgICBzaXplb2YoKCpzZXNzaW9uX3B0ciktPnVzZXJfcmVjdl9leHRfdHlwZXMpKTsKKyAgICB9CisKKyAgICBpZiAob3B0aW9uLT5vcHRfc2V0X21hc2sgJiBOR0hUVFAyX09QVF9CVUlMVElOX1JFQ1ZfRVhUX1RZUEVTKSB7CisgICAgICAoKnNlc3Npb25fcHRyKS0+YnVpbHRpbl9yZWN2X2V4dF90eXBlcyA9IG9wdGlvbi0+YnVpbHRpbl9yZWN2X2V4dF90eXBlczsKKyAgICB9CisKKyAgICBpZiAoKG9wdGlvbi0+b3B0X3NldF9tYXNrICYgTkdIVFRQMl9PUFRfTk9fQVVUT19QSU5HX0FDSykgJiYKKyAgICAgICAgb3B0aW9uLT5ub19hdXRvX3BpbmdfYWNrKSB7CisgICAgICAoKnNlc3Npb25fcHRyKS0+b3B0X2ZsYWdzIHw9IE5HSFRUUDJfT1BUTUFTS19OT19BVVRPX1BJTkdfQUNLOworICAgIH0KKworICAgIGlmIChvcHRpb24tPm9wdF9zZXRfbWFzayAmIE5HSFRUUDJfT1BUX01BWF9TRU5EX0hFQURFUl9CTE9DS19MRU5HVEgpIHsKKyAgICAgICgqc2Vzc2lvbl9wdHIpLT5tYXhfc2VuZF9oZWFkZXJfYmxvY2tfbGVuZ3RoID0KKyAgICAgICAgICBvcHRpb24tPm1heF9zZW5kX2hlYWRlcl9ibG9ja19sZW5ndGg7CisgICAgfQorCisgICAgaWYgKG9wdGlvbi0+b3B0X3NldF9tYXNrICYgTkdIVFRQMl9PUFRfTUFYX0RFRkxBVEVfRFlOQU1JQ19UQUJMRV9TSVpFKSB7CisgICAgICBtYXhfZGVmbGF0ZV9keW5hbWljX3RhYmxlX3NpemUgPSBvcHRpb24tPm1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZTsKKyAgICB9CisKKyAgICBpZiAoKG9wdGlvbi0+b3B0X3NldF9tYXNrICYgTkdIVFRQMl9PUFRfTk9fQ0xPU0VEX1NUUkVBTVMpICYmCisgICAgICAgIG9wdGlvbi0+bm9fY2xvc2VkX3N0cmVhbXMpIHsKKyAgICAgICgqc2Vzc2lvbl9wdHIpLT5vcHRfZmxhZ3MgfD0gTkdIVFRQMl9PUFRNQVNLX05PX0NMT1NFRF9TVFJFQU1TOworICAgIH0KKworICAgIGlmIChvcHRpb24tPm9wdF9zZXRfbWFzayAmIE5HSFRUUDJfT1BUX01BWF9PVVRCT1VORF9BQ0spIHsKKyAgICAgICgqc2Vzc2lvbl9wdHIpLT5tYXhfb3V0Ym91bmRfYWNrID0gb3B0aW9uLT5tYXhfb3V0Ym91bmRfYWNrOworICAgIH0KKyAgfQorCisgIHJ2ID0gbmdodHRwMl9oZF9kZWZsYXRlX2luaXQyKCYoKnNlc3Npb25fcHRyKS0+aGRfZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kZWZsYXRlX2R5bmFtaWNfdGFibGVfc2l6ZSwgbWVtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBnb3RvIGZhaWxfaGRfZGVmbGF0ZXI7CisgIH0KKyAgcnYgPSBuZ2h0dHAyX2hkX2luZmxhdGVfaW5pdCgmKCpzZXNzaW9uX3B0ciktPmhkX2luZmxhdGVyLCBtZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIGdvdG8gZmFpbF9oZF9pbmZsYXRlcjsKKyAgfQorICBydiA9IG5naHR0cDJfbWFwX2luaXQoJigqc2Vzc2lvbl9wdHIpLT5zdHJlYW1zLCBtZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIGdvdG8gZmFpbF9tYXA7CisgIH0KKworICBuYnVmZmVyID0gKCgqc2Vzc2lvbl9wdHIpLT5tYXhfc2VuZF9oZWFkZXJfYmxvY2tfbGVuZ3RoICsKKyAgICAgICAgICAgICBOR0hUVFAyX0ZSQU1FQlVGX0NIVU5LTEVOIC0gMSkgLworICAgICAgICAgICAgTkdIVFRQMl9GUkFNRUJVRl9DSFVOS0xFTjsKKworICBpZiAobmJ1ZmZlciA9PSAwKSB7CisgICAgbmJ1ZmZlciA9IDE7CisgIH0KKworICAvKiAxIGZvciBQYWQgRmllbGQuICovCisgIHJ2ID0gbmdodHRwMl9idWZzX2luaXQzKCYoKnNlc3Npb25fcHRyKS0+YW9iLmZyYW1lYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9GUkFNRUJVRl9DSFVOS0xFTiwgbmJ1ZmZlciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9GUkFNRV9IRExFTiArIDEsIG1lbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgZ290byBmYWlsX2FvYl9mcmFtZWJ1ZjsKKyAgfQorCisgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KCYoKnNlc3Npb25fcHRyKS0+YW9iLCBtZW0pOworCisgICgqc2Vzc2lvbl9wdHIpLT5jYWxsYmFja3MgPSAqY2FsbGJhY2tzOworICAoKnNlc3Npb25fcHRyKS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCisgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldCgqc2Vzc2lvbl9wdHIpOworCisgIGlmIChuZ2h0dHAyX2VuYWJsZV9zdHJpY3RfcHJlZmFjZSkgeworICAgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJigqc2Vzc2lvbl9wdHIpLT5pZnJhbWU7CisKKyAgICBpZiAoc2VydmVyICYmICgoKnNlc3Npb25fcHRyKS0+b3B0X2ZsYWdzICYKKyAgICAgICAgICAgICAgICAgICBOR0hUVFAyX09QVE1BU0tfTk9fUkVDVl9DTElFTlRfTUFHSUMpID09IDApIHsKKyAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfQ0xJRU5UX01BR0lDOworICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCA9IE5HSFRUUDJfQ0xJRU5UX01BR0lDX0xFTjsKKyAgICB9IGVsc2UgeworICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9GSVJTVF9TRVRUSU5HUzsKKyAgICB9CisKKyAgICBpZiAoIXNlcnZlcikgeworICAgICAgKCpzZXNzaW9uX3B0ciktPmFvYi5zdGF0ZSA9IE5HSFRUUDJfT0JfU0VORF9DTElFTlRfTUFHSUM7CisgICAgICBuZ2h0dHAyX2J1ZnNfYWRkKCYoKnNlc3Npb25fcHRyKS0+YW9iLmZyYW1lYnVmcywgTkdIVFRQMl9DTElFTlRfTUFHSUMsCisgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfQ0xJRU5UX01BR0lDX0xFTik7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7CisKK2ZhaWxfYW9iX2ZyYW1lYnVmOgorICBuZ2h0dHAyX21hcF9mcmVlKCYoKnNlc3Npb25fcHRyKS0+c3RyZWFtcyk7CitmYWlsX21hcDoKKyAgbmdodHRwMl9oZF9pbmZsYXRlX2ZyZWUoJigqc2Vzc2lvbl9wdHIpLT5oZF9pbmZsYXRlcik7CitmYWlsX2hkX2luZmxhdGVyOgorICBuZ2h0dHAyX2hkX2RlZmxhdGVfZnJlZSgmKCpzZXNzaW9uX3B0ciktPmhkX2RlZmxhdGVyKTsKK2ZhaWxfaGRfZGVmbGF0ZXI6CisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCAqc2Vzc2lvbl9wdHIpOworZmFpbF9zZXNzaW9uOgorICByZXR1cm4gcnY7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldyhuZ2h0dHAyX3Nlc3Npb24gKipzZXNzaW9uX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKSB7CisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fY2xpZW50X25ldzMoc2Vzc2lvbl9wdHIsIGNhbGxiYWNrcywgdXNlcl9kYXRhLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXcyKG5naHR0cDJfc2Vzc2lvbiAqKnNlc3Npb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgbmdodHRwMl9vcHRpb24gKm9wdGlvbikgeworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXczKHNlc3Npb25fcHRyLCBjYWxsYmFja3MsIHVzZXJfZGF0YSwgb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NsaWVudF9uZXczKG5naHR0cDJfc2Vzc2lvbiAqKnNlc3Npb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3Nlc3Npb25fY2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgbmdodHRwMl9vcHRpb24gKm9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9tZW0gKm1lbSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbjsKKworICBydiA9IHNlc3Npb25fbmV3KCZzZXNzaW9uLCBjYWxsYmFja3MsIHVzZXJfZGF0YSwgMCwgb3B0aW9uLCBtZW0pOworCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIC8qIElEcyBmb3IgdXNlIGluIGNsaWVudCAqLworICBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCA9IDE7CisKKyAgKnNlc3Npb25fcHRyID0gc2Vzc2lvbjsKKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3KG5naHR0cDJfc2Vzc2lvbiAqKnNlc3Npb25fcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpIHsKKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9zZXJ2ZXJfbmV3MyhzZXNzaW9uX3B0ciwgY2FsbGJhY2tzLCB1c2VyX2RhdGEsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldzIobmdodHRwMl9zZXNzaW9uICoqc2Vzc2lvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCBjb25zdCBuZ2h0dHAyX29wdGlvbiAqb3B0aW9uKSB7CisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldzMoc2Vzc2lvbl9wdHIsIGNhbGxiYWNrcywgdXNlcl9kYXRhLCBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fc2VydmVyX25ldzMobmdodHRwMl9zZXNzaW9uICoqc2Vzc2lvbl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCBjb25zdCBuZ2h0dHAyX29wdGlvbiAqb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zZXNzaW9uICpzZXNzaW9uOworCisgIHJ2ID0gc2Vzc2lvbl9uZXcoJnNlc3Npb24sIGNhbGxiYWNrcywgdXNlcl9kYXRhLCAxLCBvcHRpb24sIG1lbSk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgLyogSURzIGZvciB1c2UgaW4gY2xpZW50ICovCisgIHNlc3Npb24tPm5leHRfc3RyZWFtX2lkID0gMjsKKworICAqc2Vzc2lvbl9wdHIgPSBzZXNzaW9uOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZyZWVfc3RyZWFtcyhuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnksIHZvaWQgKnB0cikgeworICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb247CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBzZXNzaW9uID0gKG5naHR0cDJfc2Vzc2lvbiAqKXB0cjsKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKyAgc3RyZWFtID0gKG5naHR0cDJfc3RyZWFtICopZW50cnk7CisgIGl0ZW0gPSBzdHJlYW0tPml0ZW07CisKKyAgaWYgKGl0ZW0gJiYgIWl0ZW0tPnF1ZXVlZCAmJiBpdGVtICE9IHNlc3Npb24tPmFvYi5pdGVtKSB7CisgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2ZyZWUoaXRlbSwgbWVtKTsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisgIH0KKworICBuZ2h0dHAyX3N0cmVhbV9mcmVlKHN0cmVhbSk7CisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBzdHJlYW0pOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvYl9xX2ZyZWUobmdodHRwMl9vdXRib3VuZF9xdWV1ZSAqcSwgbmdodHRwMl9tZW0gKm1lbSkgeworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0sICpuZXh0OworICBmb3IgKGl0ZW0gPSBxLT5oZWFkOyBpdGVtOykgeworICAgIG5leHQgPSBpdGVtLT5xbmV4dDsKKyAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1fZnJlZShpdGVtLCBtZW0pOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICBpdGVtID0gbmV4dDsKKyAgfQorfQorCitzdGF0aWMgaW50IGluZmxpZ2h0X3NldHRpbmdzX25ldyhuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzICoqc2V0dGluZ3NfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsIHNpemVfdCBuaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX21lbSAqbWVtKSB7CisgICpzZXR0aW5nc19wdHIgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9pbmZsaWdodF9zZXR0aW5ncykpOworICBpZiAoISpzZXR0aW5nc19wdHIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBpZiAobml2ID4gMCkgeworICAgICgqc2V0dGluZ3NfcHRyKS0+aXYgPSBuZ2h0dHAyX2ZyYW1lX2l2X2NvcHkoaXYsIG5pdiwgbWVtKTsKKyAgICBpZiAoISgqc2V0dGluZ3NfcHRyKS0+aXYpIHsKKyAgICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCAqc2V0dGluZ3NfcHRyKTsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgKCpzZXR0aW5nc19wdHIpLT5pdiA9IE5VTEw7CisgIH0KKworICAoKnNldHRpbmdzX3B0ciktPm5pdiA9IG5pdjsKKyAgKCpzZXR0aW5nc19wdHIpLT5uZXh0ID0gTlVMTDsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5mbGlnaHRfc2V0dGluZ3NfZGVsKG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3MgKnNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfbWVtICptZW0pIHsKKyAgaWYgKCFzZXR0aW5ncykgeworICAgIHJldHVybjsKKyAgfQorCisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBzZXR0aW5ncy0+aXYpOworICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgc2V0dGluZ3MpOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9kZWwobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIG5naHR0cDJfbWVtICptZW07CisgIG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3MgKnNldHRpbmdzOworCisgIGlmIChzZXNzaW9uID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGZvciAoc2V0dGluZ3MgPSBzZXNzaW9uLT5pbmZsaWdodF9zZXR0aW5nc19oZWFkOyBzZXR0aW5nczspIHsKKyAgICBuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzICpuZXh0ID0gc2V0dGluZ3MtPm5leHQ7CisgICAgaW5mbGlnaHRfc2V0dGluZ3NfZGVsKHNldHRpbmdzLCBtZW0pOworICAgIHNldHRpbmdzID0gbmV4dDsKKyAgfQorCisgIG5naHR0cDJfc3RyZWFtX2ZyZWUoJnNlc3Npb24tPnJvb3QpOworCisgIC8qIEhhdmUgdG8gZnJlZSBzdHJlYW1zIGZpcnN0LCBzbyB0aGF0IHdlIGNhbiBjaGVjaworICAgICBzdHJlYW0tPml0ZW0tPnF1ZXVlZCAqLworICBuZ2h0dHAyX21hcF9lYWNoX2ZyZWUoJnNlc3Npb24tPnN0cmVhbXMsIGZyZWVfc3RyZWFtcywgc2Vzc2lvbik7CisgIG5naHR0cDJfbWFwX2ZyZWUoJnNlc3Npb24tPnN0cmVhbXMpOworCisgIG9iX3FfZnJlZSgmc2Vzc2lvbi0+b2JfdXJnZW50LCBtZW0pOworICBvYl9xX2ZyZWUoJnNlc3Npb24tPm9iX3JlZywgbWVtKTsKKyAgb2JfcV9mcmVlKCZzZXNzaW9uLT5vYl9zeW4sIG1lbSk7CisKKyAgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQoJnNlc3Npb24tPmFvYiwgbWVtKTsKKyAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworICBuZ2h0dHAyX2hkX2RlZmxhdGVfZnJlZSgmc2Vzc2lvbi0+aGRfZGVmbGF0ZXIpOworICBuZ2h0dHAyX2hkX2luZmxhdGVfZnJlZSgmc2Vzc2lvbi0+aGRfaW5mbGF0ZXIpOworICBuZ2h0dHAyX2J1ZnNfZnJlZSgmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcyk7CisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBzZXNzaW9uKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9yZXByaW9yaXRpemVfc3RyZWFtKAorICAgIG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjX2luKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0gPSBOVUxMOworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgcHJpX3NwZWNfZGVmYXVsdDsKKyAgY29uc3QgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYyA9IHByaV9zcGVjX2luOworCisgIGFzc2VydChwcmlfc3BlYy0+c3RyZWFtX2lkICE9IHN0cmVhbS0+c3RyZWFtX2lkKTsKKworICBpZiAoIW5naHR0cDJfc3RyZWFtX2luX2RlcF90cmVlKHN0cmVhbSkpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChwcmlfc3BlYy0+c3RyZWFtX2lkICE9IDApIHsKKyAgICBkZXBfc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmF3KHNlc3Npb24sIHByaV9zcGVjLT5zdHJlYW1faWQpOworCisgICAgaWYgKCFkZXBfc3RyZWFtICYmCisgICAgICAgIHNlc3Npb25fZGV0ZWN0X2lkbGVfc3RyZWFtKHNlc3Npb24sIHByaV9zcGVjLT5zdHJlYW1faWQpKSB7CisKKyAgICAgIG5naHR0cDJfcHJpb3JpdHlfc3BlY19kZWZhdWx0X2luaXQoJnByaV9zcGVjX2RlZmF1bHQpOworCisgICAgICBkZXBfc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX29wZW5fc3RyZWFtKAorICAgICAgICAgIHNlc3Npb24sIHByaV9zcGVjLT5zdHJlYW1faWQsIE5HSFRUUDJfRkxBR19OT05FLCAmcHJpX3NwZWNfZGVmYXVsdCwKKyAgICAgICAgICBOR0hUVFAyX1NUUkVBTV9JRExFLCBOVUxMKTsKKworICAgICAgaWYgKGRlcF9zdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgICB9CisgICAgfSBlbHNlIGlmICghZGVwX3N0cmVhbSB8fCAhbmdodHRwMl9zdHJlYW1faW5fZGVwX3RyZWUoZGVwX3N0cmVhbSkpIHsKKyAgICAgIG5naHR0cDJfcHJpb3JpdHlfc3BlY19kZWZhdWx0X2luaXQoJnByaV9zcGVjX2RlZmF1bHQpOworICAgICAgcHJpX3NwZWMgPSAmcHJpX3NwZWNfZGVmYXVsdDsKKyAgICB9CisgIH0KKworICBpZiAocHJpX3NwZWMtPnN0cmVhbV9pZCA9PSAwKSB7CisgICAgZGVwX3N0cmVhbSA9ICZzZXNzaW9uLT5yb290OworICB9IGVsc2UgaWYgKG5naHR0cDJfc3RyZWFtX2RlcF9maW5kX2FuY2VzdG9yKGRlcF9zdHJlYW0sIHN0cmVhbSkpIHsKKyAgICBERUJVR0YoInN0cmVhbTogY3ljbGUgZGV0ZWN0ZWQsIGRlcF9zdHJlYW0oJXApPSVkIHN0cmVhbSglcCk9JWRcbiIsCisgICAgICAgICAgIGRlcF9zdHJlYW0sIGRlcF9zdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisKKyAgICBuZ2h0dHAyX3N0cmVhbV9kZXBfcmVtb3ZlX3N1YnRyZWUoZGVwX3N0cmVhbSk7CisgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXBfYWRkX3N1YnRyZWUoc3RyZWFtLT5kZXBfcHJldiwgZGVwX3N0cmVhbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICBhc3NlcnQoZGVwX3N0cmVhbSk7CisKKyAgaWYgKGRlcF9zdHJlYW0gPT0gc3RyZWFtLT5kZXBfcHJldiAmJiAhcHJpX3NwZWMtPmV4Y2x1c2l2ZSkgeworICAgIC8qIFRoaXMgaXMgbWlub3Igb3B0aW1pemF0aW9uIHdoZW4ganVzdCB3ZWlnaHQgaXMgY2hhbmdlZC4gKi8KKyAgICBuZ2h0dHAyX3N0cmVhbV9jaGFuZ2Vfd2VpZ2h0KHN0cmVhbSwgcHJpX3NwZWMtPndlaWdodCk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIG5naHR0cDJfc3RyZWFtX2RlcF9yZW1vdmVfc3VidHJlZShzdHJlYW0pOworCisgIC8qIFdlIGhhdmUgdG8gdXBkYXRlIHdlaWdodCBhZnRlciByZW1vdmluZyBzdHJlYW0gZnJvbSB0cmVlICovCisgIHN0cmVhbS0+d2VpZ2h0ID0gcHJpX3NwZWMtPndlaWdodDsKKworICBpZiAocHJpX3NwZWMtPmV4Y2x1c2l2ZSkgeworICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fZGVwX2luc2VydF9zdWJ0cmVlKGRlcF9zdHJlYW0sIHN0cmVhbSk7CisgIH0gZWxzZSB7CisgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXBfYWRkX3N1YnRyZWUoZGVwX3N0cmVhbSwgc3RyZWFtKTsKKyAgfQorCisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fYWRkX2l0ZW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0pIHsKKyAgLyogVE9ETyBSZXR1cm4gZXJyb3IgaWYgc3RyZWFtIGlzIG5vdCBmb3VuZCBmb3IgdGhlIGZyYW1lIHJlcXVpcmluZworICAgICBzdHJlYW0gcHJlc2VuY2UuICovCisgIGludCBydiA9IDA7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKworICBzd2l0Y2ggKGZyYW1lLT5oZC50eXBlKSB7CisgIGNhc2UgTkdIVFRQMl9EQVRBOgorICAgIGlmICghc3RyZWFtKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRDsKKyAgICB9CisKKyAgICBpZiAoc3RyZWFtLT5pdGVtKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfREFUQV9FWElTVDsKKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfc3RyZWFtX2F0dGFjaF9pdGVtKHN0cmVhbSwgaXRlbSk7CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIHJldHVybiAwOworICBjYXNlIE5HSFRUUDJfSEVBREVSUzoKKyAgICAvKiBXZSBwdXNoIHJlcXVlc3QgSEVBREVSUyBhbmQgcHVzaCByZXNwb25zZSBIRUFERVJTIHRvCisgICAgICAgZGVkaWNhdGVkIHF1ZXVlIGJlY2F1c2UgdGhlaXIgdHJhbnNtaXNzaW9uIGlzIGFmZmVjdGVkIGJ5CisgICAgICAgU0VUVElOR1NfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyAqLworICAgIC8qIFRPRE8gSWYgMiBIRUFERVJTIGFyZSBzdWJtaXR0ZWQgZm9yIHJlc2VydmVkIHN0cmVhbSwgdGhlbgorICAgICAgIGJvdGggb2YgdGhlbSBhcmUgcXVldWVkIGludG8gb2Jfc3luLCB3aGljaCBpcyBub3QKKyAgICAgICBkZXNpcmFibGUuICovCisgICAgaWYgKGZyYW1lLT5oZWFkZXJzLmNhdCA9PSBOR0hUVFAyX0hDQVRfUkVRVUVTVCB8fAorICAgICAgICAoc3RyZWFtICYmIHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQpKSB7CisgICAgICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3B1c2goJnNlc3Npb24tPm9iX3N5biwgaXRlbSk7CisgICAgICBpdGVtLT5xdWV1ZWQgPSAxOworICAgICAgcmV0dXJuIDA7CisgICAgICA7CisgICAgfQorCisgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wdXNoKCZzZXNzaW9uLT5vYl9yZWcsIGl0ZW0pOworICAgIGl0ZW0tPnF1ZXVlZCA9IDE7CisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HUzoKKyAgY2FzZSBOR0hUVFAyX1BJTkc6CisgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wdXNoKCZzZXNzaW9uLT5vYl91cmdlbnQsIGl0ZW0pOworICAgIGl0ZW0tPnF1ZXVlZCA9IDE7CisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9SU1RfU1RSRUFNOgorICAgIGlmIChzdHJlYW0pIHsKKyAgICAgIHN0cmVhbS0+c3RhdGUgPSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HOworICAgIH0KKyAgICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3B1c2goJnNlc3Npb24tPm9iX3JlZywgaXRlbSk7CisgICAgaXRlbS0+cXVldWVkID0gMTsKKyAgICByZXR1cm4gMDsKKyAgY2FzZSBOR0hUVFAyX1BVU0hfUFJPTUlTRTogeworICAgIG5naHR0cDJfaGVhZGVyc19hdXhfZGF0YSAqYXV4X2RhdGE7CisgICAgbmdodHRwMl9wcmlvcml0eV9zcGVjIHByaV9zcGVjOworCisgICAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuaGVhZGVyczsKKworICAgIGlmICghc3RyZWFtKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRDsKKyAgICB9CisKKyAgICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfaW5pdCgmcHJpX3NwZWMsIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfREVGQVVMVF9XRUlHSFQsIDApOworCisgICAgaWYgKCFuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0oCisgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZS0+cHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZCwKKyAgICAgICAgICAgIE5HSFRUUDJfU1RSRUFNX0ZMQUdfTk9ORSwgJnByaV9zcGVjLCBOR0hUVFAyX1NUUkVBTV9SRVNFUlZFRCwKKyAgICAgICAgICAgIGF1eF9kYXRhLT5zdHJlYW1fdXNlcl9kYXRhKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICAgIH0KKworICAgIC8qIFdlIGRvbid0IGhhdmUgdG8gY2FsbCBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2Nsb3NlZF9zdHJlYW0oKQorICAgICAgIGhlcmUsIHNpbmNlIHN0cmVhbS0+c3RyZWFtX2lkIGlzIGxvY2FsIHN0cmVhbV9pZCwgYW5kIGl0IGRvZXMKKyAgICAgICBub3QgYWZmZWN0IGNsb3NlZCBzdHJlYW0gY291bnQuICovCisKKyAgICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3B1c2goJnNlc3Npb24tPm9iX3JlZywgaXRlbSk7CisgICAgaXRlbS0+cXVldWVkID0gMTsKKworICAgIHJldHVybiAwOworICB9CisgIGNhc2UgTkdIVFRQMl9XSU5ET1dfVVBEQVRFOgorICAgIGlmIChzdHJlYW0pIHsKKyAgICAgIHN0cmVhbS0+d2luZG93X3VwZGF0ZV9xdWV1ZWQgPSAxOworICAgIH0gZWxzZSBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA9PSAwKSB7CisgICAgICBzZXNzaW9uLT53aW5kb3dfdXBkYXRlX3F1ZXVlZCA9IDE7CisgICAgfQorICAgIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfcHVzaCgmc2Vzc2lvbi0+b2JfcmVnLCBpdGVtKTsKKyAgICBpdGVtLT5xdWV1ZWQgPSAxOworICAgIHJldHVybiAwOworICBkZWZhdWx0OgorICAgIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfcHVzaCgmc2Vzc2lvbi0+b2JfcmVnLCBpdGVtKTsKKyAgICBpdGVtLT5xdWV1ZWQgPSAxOworICAgIHJldHVybiAwOworICB9Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgaWYgKHN0cmVhbSAmJiBzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIENhbmNlbCBwZW5kaW5nIHJlcXVlc3QgSEVBREVSUyBpbiBvYl9zeW4gaWYgdGhpcyBSU1RfU1RSRUFNCisgICAgIHJlZmVycyB0byB0aGF0IHN0cmVhbS4gKi8KKyAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIgJiYgbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW1faWQpICYmCisgICAgICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcCgmc2Vzc2lvbi0+b2Jfc3luKSkgeworICAgIG5naHR0cDJfaGVhZGVyc19hdXhfZGF0YSAqYXV4X2RhdGE7CisgICAgbmdodHRwMl9mcmFtZSAqaGVhZGVyc19mcmFtZTsKKworICAgIGhlYWRlcnNfZnJhbWUgPSAmbmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3N5biktPmZyYW1lOworICAgIGFzc2VydChoZWFkZXJzX2ZyYW1lLT5oZC50eXBlID09IE5HSFRUUDJfSEVBREVSUyk7CisKKyAgICBpZiAoaGVhZGVyc19mcmFtZS0+aGQuc3RyZWFtX2lkIDw9IHN0cmVhbV9pZCAmJgorICAgICAgICAodWludDMyX3Qpc3RyZWFtX2lkIDwgc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQpIHsKKworICAgICAgZm9yIChpdGVtID0gc2Vzc2lvbi0+b2Jfc3luLmhlYWQ7IGl0ZW07IGl0ZW0gPSBpdGVtLT5xbmV4dCkgeworICAgICAgICBhdXhfZGF0YSA9ICZpdGVtLT5hdXhfZGF0YS5oZWFkZXJzOworCisgICAgICAgIGlmIChpdGVtLT5mcmFtZS5oZC5zdHJlYW1faWQgPCBzdHJlYW1faWQpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHN0cmVhbV9pZCBpbiBvYl9zeW4gcXVldWUgbXVzdCBiZSBzdHJpY3RseSBpbmNyZWFzaW5nLiAgSWYKKyAgICAgICAgICAgd2UgZm91bmQgbGFyZ2VyIElELCB0aGVuIHdlIGNhbiBicmVhayBoZXJlLiAqLworICAgICAgICBpZiAoaXRlbS0+ZnJhbWUuaGQuc3RyZWFtX2lkID4gc3RyZWFtX2lkIHx8IGF1eF9kYXRhLT5jYW5jZWxlZCkgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXV4X2RhdGEtPmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOworICAgICAgICBhdXhfZGF0YS0+Y2FuY2VsZWQgPSAxOworCisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1faW5pdChpdGVtKTsKKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICBuZ2h0dHAyX2ZyYW1lX3JzdF9zdHJlYW1faW5pdCgmZnJhbWUtPnJzdF9zdHJlYW0sIHN0cmVhbV9pZCwgZXJyb3JfY29kZSk7CisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKHNlc3Npb24sIGl0ZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfcnN0X3N0cmVhbV9mcmVlKCZmcmFtZS0+cnN0X3N0cmVhbSk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gMDsKK30KKworbmdodHRwMl9zdHJlYW0gKm5naHR0cDJfc2Vzc2lvbl9vcGVuX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbV9zdGF0ZSBpbml0aWFsX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgbmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0gPSBOVUxMOworICBpbnQgc3RyZWFtX2FsbG9jID0gMDsKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjIHByaV9zcGVjX2RlZmF1bHQ7CisgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMgPSBwcmlfc3BlY19pbjsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9yYXcoc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKworICBpZiAoc3RyZWFtKSB7CisgICAgYXNzZXJ0KHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fSURMRSk7CisgICAgYXNzZXJ0KG5naHR0cDJfc3RyZWFtX2luX2RlcF90cmVlKHN0cmVhbSkpOworICAgIG5naHR0cDJfc2Vzc2lvbl9kZXRhY2hfaWRsZV9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtKTsKKyAgICBydiA9IG5naHR0cDJfc3RyZWFtX2RlcF9yZW1vdmUoc3RyZWFtKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB9IGVsc2UgeworICAgIHN0cmVhbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX3N0cmVhbSkpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3RyZWFtX2FsbG9jID0gMTsKKyAgfQorCisgIGlmIChwcmlfc3BlYy0+c3RyZWFtX2lkICE9IDApIHsKKyAgICBkZXBfc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmF3KHNlc3Npb24sIHByaV9zcGVjLT5zdHJlYW1faWQpOworCisgICAgaWYgKCFkZXBfc3RyZWFtICYmCisgICAgICAgIHNlc3Npb25fZGV0ZWN0X2lkbGVfc3RyZWFtKHNlc3Npb24sIHByaV9zcGVjLT5zdHJlYW1faWQpKSB7CisgICAgICAvKiBEZXBlbmRzIG9uIGlkbGUgc3RyZWFtLCB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBtZW1vcnkuCisgICAgICAgICBBc3NpZ24gZGVmYXVsdCBwcmlvcml0eSBmb3IgaXQuICovCisgICAgICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KCZwcmlfc3BlY19kZWZhdWx0KTsKKworICAgICAgZGVwX3N0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9vcGVuX3N0cmVhbSgKKyAgICAgICAgICBzZXNzaW9uLCBwcmlfc3BlYy0+c3RyZWFtX2lkLCBOR0hUVFAyX0ZMQUdfTk9ORSwgJnByaV9zcGVjX2RlZmF1bHQsCisgICAgICAgICAgTkdIVFRQMl9TVFJFQU1fSURMRSwgTlVMTCk7CisKKyAgICAgIGlmIChkZXBfc3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHN0cmVhbV9hbGxvYykgeworICAgICAgICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBzdHJlYW0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgfSBlbHNlIGlmICghZGVwX3N0cmVhbSB8fCAhbmdodHRwMl9zdHJlYW1faW5fZGVwX3RyZWUoZGVwX3N0cmVhbSkpIHsKKyAgICAgIC8qIElmIGRlcF9zdHJlYW0gaXMgbm90IHBhcnQgb2YgZGVwZW5kZW5jeSB0cmVlLCBzdHJlYW0gd2lsbCBnZXQKKyAgICAgICAgIGRlZmF1bHQgcHJpb3JpdHkuICBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbgorICAgICAgICAgcHJpX3NwZWMtPnN0cmVhbV9pZCA9PSBzdHJlYW1faWQuICBUaGlzIGhhcHBlbnMgYmVjYXVzZSB3ZQorICAgICAgICAgZG9uJ3QgY2hlY2sgcHJpX3NwZWMtPnN0cmVhbV9pZCBhZ2FpbnN0IG5ldyBzdHJlYW0gSUQgaW4KKyAgICAgICAgIG5naHR0cDJfc3VibWl0X3JlcXVlc3QuICBUaGlzIGFsc28gaGFuZGxlcyB0aGUgY2FzZSB3aGVuIGlkbGUKKyAgICAgICAgIHN0cmVhbSBjcmVhdGVkIGJ5IFBSSU9SSVRZIGZyYW1lIHdhcyBvcGVuZWQuICBTb21laG93IHdlCisgICAgICAgICBmaXJzdCByZW1vdmUgdGhlIGlkbGUgc3RyZWFtIGZyb20gZGVwZW5kZW5jeSB0cmVlLiAgVGhpcyBpcworICAgICAgICAgZG9uZSB0byBzaW1wbGlmeSBjb2RlIGJhc2UsIGJ1dCBpZGVhbGx5IHdlIHNob3VsZCByZXRhaW4gb2xkCisgICAgICAgICBkZXBlbmRlbmN5LiAgQnV0IEknbSBub3Qgc3VyZSB0aGlzIGFkZHMgdmFsdWVzLiAqLworICAgICAgbmdodHRwMl9wcmlvcml0eV9zcGVjX2RlZmF1bHRfaW5pdCgmcHJpX3NwZWNfZGVmYXVsdCk7CisgICAgICBwcmlfc3BlYyA9ICZwcmlfc3BlY19kZWZhdWx0OworICAgIH0KKyAgfQorCisgIGlmIChpbml0aWFsX3N0YXRlID09IE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVEKSB7CisgICAgZmxhZ3MgfD0gTkdIVFRQMl9TVFJFQU1fRkxBR19QVVNIOworICB9CisKKyAgaWYgKHN0cmVhbV9hbGxvYykgeworICAgIG5naHR0cDJfc3RyZWFtX2luaXQoc3RyZWFtLCBzdHJlYW1faWQsIGZsYWdzLCBpbml0aWFsX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpX3NwZWMtPndlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQzMl90KXNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5pbml0aWFsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgKGludDMyX3Qpc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MuaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV91c2VyX2RhdGEsIG1lbSk7CisKKyAgICBydiA9IG5naHR0cDJfbWFwX2luc2VydCgmc2Vzc2lvbi0+c3RyZWFtcywgJnN0cmVhbS0+bWFwX2VudHJ5KTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgbmdodHRwMl9zdHJlYW1fZnJlZShzdHJlYW0pOworICAgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIHN0cmVhbSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc3RyZWFtLT5mbGFncyA9IGZsYWdzOworICAgIHN0cmVhbS0+c3RhdGUgPSBpbml0aWFsX3N0YXRlOworICAgIHN0cmVhbS0+d2VpZ2h0ID0gcHJpX3NwZWMtPndlaWdodDsKKyAgICBzdHJlYW0tPnN0cmVhbV91c2VyX2RhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICB9CisKKyAgc3dpdGNoIChpbml0aWFsX3N0YXRlKSB7CisgIGNhc2UgTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQ6CisgICAgaWYgKG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtX2lkKSkgeworICAgICAgLyogcmVzZXJ2ZWQgKGxvY2FsKSAqLworICAgICAgbmdodHRwMl9zdHJlYW1fc2h1dGRvd24oc3RyZWFtLCBOR0hUVFAyX1NIVVRfUkQpOworICAgIH0gZWxzZSB7CisgICAgICAvKiByZXNlcnZlZCAocmVtb3RlKSAqLworICAgICAgbmdodHRwMl9zdHJlYW1fc2h1dGRvd24oc3RyZWFtLCBOR0hUVFAyX1NIVVRfV1IpOworICAgICAgKytzZXNzaW9uLT5udW1faW5jb21pbmdfcmVzZXJ2ZWRfc3RyZWFtczsKKyAgICB9CisgICAgLyogUmVzZXJ2ZWQgc3RyZWFtIGRvZXMgbm90IGNvdW50IGluIHRoZSBjb25jdXJyZW50IHN0cmVhbXMKKyAgICAgICBsaW1pdC4gVGhhdCBpcyBvbmUgb2YgdGhlIERPUyB2ZWN0b3IuICovCisgICAgYnJlYWs7CisgIGNhc2UgTkdIVFRQMl9TVFJFQU1fSURMRToKKyAgICAvKiBJZGxlIHN0cmVhbSBkb2VzIG5vdCBjb3VudCB0b3dhcmQgdGhlIGNvbmN1cnJlbnQgc3RyZWFtcyBsaW1pdC4KKyAgICAgICBUaGlzIGlzIHVzZWQgYXMgYW5jaG9yIG5vZGUgaW4gZGVwZW5kZW5jeSB0cmVlLiAqLworICAgIG5naHR0cDJfc2Vzc2lvbl9rZWVwX2lkbGVfc3RyZWFtKHNlc3Npb24sIHN0cmVhbSk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgaWYgKG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtX2lkKSkgeworICAgICAgKytzZXNzaW9uLT5udW1fb3V0Z29pbmdfc3RyZWFtczsKKyAgICB9IGVsc2UgeworICAgICAgKytzZXNzaW9uLT5udW1faW5jb21pbmdfc3RyZWFtczsKKyAgICB9CisgIH0KKworICBpZiAocHJpX3NwZWMtPnN0cmVhbV9pZCA9PSAwKSB7CisgICAgZGVwX3N0cmVhbSA9ICZzZXNzaW9uLT5yb290OworICB9CisKKyAgYXNzZXJ0KGRlcF9zdHJlYW0pOworCisgIGlmIChwcmlfc3BlYy0+ZXhjbHVzaXZlKSB7CisgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXBfaW5zZXJ0KGRlcF9zdHJlYW0sIHN0cmVhbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBuZ2h0dHAyX3N0cmVhbV9kZXBfYWRkKGRlcF9zdHJlYW0sIHN0cmVhbSk7CisgIH0KKworICByZXR1cm4gc3RyZWFtOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfbWVtICptZW07CisgIGludCBpc19teV9zdHJlYW1faWQ7CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKworICBpZiAoIXN0cmVhbSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgREVCVUdGKCJzdHJlYW06IHN0cmVhbSglcCk9JWQgY2xvc2VcbiIsIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQpOworCisgIGlmIChzdHJlYW0tPml0ZW0pIHsKKyAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisKKyAgICBpdGVtID0gc3RyZWFtLT5pdGVtOworCisgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbShzdHJlYW0pOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICAvKiBJZiBpdGVtIGlzIHF1ZXVlZCwgaXQgd2lsbCBiZSBkZWxldGVkIHdoZW4gaXQgaXMgcG9wcGVkCisgICAgICAgKG5naHR0cDJfc2Vzc2lvbl9wcmVwX2ZyYW1lKCkgd2lsbCBmYWlsKS4gIElmIHNlc3Npb24tPmFvYi5pdGVtCisgICAgICAgcG9pbnRzIHRvIHRoaXMgaXRlbSwgbGV0IGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KCkKKyAgICAgICBmcmVlIHRoZSBpdGVtLiAqLworICAgIGlmICghaXRlbS0+cXVldWVkICYmIGl0ZW0gIT0gc2Vzc2lvbi0+YW9iLml0ZW0pIHsKKyAgICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9mcmVlKGl0ZW0sIG1lbSk7CisgICAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisgICAgfQorICB9CisKKyAgLyogV2UgY2FsbCBvbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2sgZXZlbiBpZiBzdHJlYW0tPnN0YXRlIGlzCisgICAgIE5HSFRUUDJfU1RSRUFNX0lOSVRJQUwuIFRoaXMgd2lsbCBoYXBwZW4gd2hpbGUgc2VuZGluZyByZXF1ZXN0CisgICAgIEhFQURFUlMsIGEgbG9jYWwgZW5kcG9pbnQgcmVjZWl2ZXMgUlNUX1NUUkVBTSBmb3IgdGhhdCBzdHJlYW0uIEl0CisgICAgIG1heSBiZSBQUk9UT0NPTF9FUlJPUiwgYnV0IHdpdGhvdXQgbm90aWZ5aW5nIHN0cmVhbSBjbG9zdXJlIHdpbGwKKyAgICAgaGFuZyB0aGUgc3RyZWFtIGluIGEgbG9jYWwgZW5kcG9pbnQuCisgICovCisKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2spIHsKKyAgICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX3N0cmVhbV9jbG9zZV9jYWxsYmFjaygKKyAgICAgICAgICAgIHNlc3Npb24sIHN0cmVhbV9pZCwgZXJyb3JfY29kZSwgc2Vzc2lvbi0+dXNlcl9kYXRhKSAhPSAwKSB7CisKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgIH0KKyAgfQorCisgIGlzX215X3N0cmVhbV9pZCA9IG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKworICAvKiBwdXNoZWQgc3RyZWFtcyB3aGljaCBpcyBub3Qgb3BlbmVkIHlldCBpcyBub3QgY291bnRlZCB0b3dhcmQgbWF4CisgICAgIGNvbmN1cnJlbnQgbGltaXRzICovCisgIGlmICgoc3RyZWFtLT5mbGFncyAmIE5HSFRUUDJfU1RSRUFNX0ZMQUdfUFVTSCkpIHsKKyAgICBpZiAoIWlzX215X3N0cmVhbV9pZCkgeworICAgICAgLS1zZXNzaW9uLT5udW1faW5jb21pbmdfcmVzZXJ2ZWRfc3RyZWFtczsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKGlzX215X3N0cmVhbV9pZCkgeworICAgICAgLS1zZXNzaW9uLT5udW1fb3V0Z29pbmdfc3RyZWFtczsKKyAgICB9IGVsc2UgeworICAgICAgLS1zZXNzaW9uLT5udW1faW5jb21pbmdfc3RyZWFtczsKKyAgICB9CisgIH0KKworICAvKiBDbG9zZXMgYm90aCBkaXJlY3Rpb25zIGp1c3QgaW4gY2FzZSB0aGV5IGFyZSBub3QgY2xvc2VkIHlldCAqLworICBzdHJlYW0tPmZsYWdzIHw9IE5HSFRUUDJfU1RSRUFNX0ZMQUdfQ0xPU0VEOworCisgIGlmICgoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0NMT1NFRF9TVFJFQU1TKSA9PSAwICYmCisgICAgICBzZXNzaW9uLT5zZXJ2ZXIgJiYgIWlzX215X3N0cmVhbV9pZCAmJgorICAgICAgbmdodHRwMl9zdHJlYW1faW5fZGVwX3RyZWUoc3RyZWFtKSkgeworICAgIC8qIE9uIHNlcnZlciBzaWRlLCByZXRhaW4gc3RyZWFtIGF0IG1vc3QgTUFYX0NPTkNVUlJFTlRfU1RSRUFNUworICAgICAgIGNvbWJpbmVkIHdpdGggdGhlIGN1cnJlbnQgYWN0aXZlIGluY29taW5nIHN0cmVhbXMgdG8gbWFrZQorICAgICAgIGRlcGVuZGVuY3kgdHJlZSB3b3JrIGJldHRlci4gKi8KKyAgICBuZ2h0dHAyX3Nlc3Npb25fa2VlcF9jbG9zZWRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbSk7CisgIH0gZWxzZSB7CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fZGVzdHJveV9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2Rlc3Ryb3lfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX21lbSAqbWVtOworICBpbnQgcnY7CisKKyAgREVCVUdGKCJzdHJlYW06IGRlc3Ryb3kgY2xvc2VkIHN0cmVhbSglcCk9JWRcbiIsIHN0cmVhbSwgc3RyZWFtLT5zdHJlYW1faWQpOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKG5naHR0cDJfc3RyZWFtX2luX2RlcF90cmVlKHN0cmVhbSkpIHsKKyAgICBydiA9IG5naHR0cDJfc3RyZWFtX2RlcF9yZW1vdmUoc3RyZWFtKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorCisgIG5naHR0cDJfbWFwX3JlbW92ZSgmc2Vzc2lvbi0+c3RyZWFtcywgc3RyZWFtLT5zdHJlYW1faWQpOworICBuZ2h0dHAyX3N0cmVhbV9mcmVlKHN0cmVhbSk7CisgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBzdHJlYW0pOworCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9rZWVwX2Nsb3NlZF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgREVCVUdGKCJzdHJlYW06IGtlZXAgY2xvc2VkIHN0cmVhbSglcCk9JWQsIHN0YXRlPSVkXG4iLCBzdHJlYW0sCisgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtLT5zdGF0ZSk7CisKKyAgaWYgKHNlc3Npb24tPmNsb3NlZF9zdHJlYW1fdGFpbCkgeworICAgIHNlc3Npb24tPmNsb3NlZF9zdHJlYW1fdGFpbC0+Y2xvc2VkX25leHQgPSBzdHJlYW07CisgICAgc3RyZWFtLT5jbG9zZWRfcHJldiA9IHNlc3Npb24tPmNsb3NlZF9zdHJlYW1fdGFpbDsKKyAgfSBlbHNlIHsKKyAgICBzZXNzaW9uLT5jbG9zZWRfc3RyZWFtX2hlYWQgPSBzdHJlYW07CisgIH0KKyAgc2Vzc2lvbi0+Y2xvc2VkX3N0cmVhbV90YWlsID0gc3RyZWFtOworCisgICsrc2Vzc2lvbi0+bnVtX2Nsb3NlZF9zdHJlYW1zOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9rZWVwX2lkbGVfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBERUJVR0YoInN0cmVhbToga2VlcCBpZGxlIHN0cmVhbSglcCk9JWQsIHN0YXRlPSVkXG4iLCBzdHJlYW0sCisgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtLT5zdGF0ZSk7CisKKyAgaWYgKHNlc3Npb24tPmlkbGVfc3RyZWFtX3RhaWwpIHsKKyAgICBzZXNzaW9uLT5pZGxlX3N0cmVhbV90YWlsLT5jbG9zZWRfbmV4dCA9IHN0cmVhbTsKKyAgICBzdHJlYW0tPmNsb3NlZF9wcmV2ID0gc2Vzc2lvbi0+aWRsZV9zdHJlYW1fdGFpbDsKKyAgfSBlbHNlIHsKKyAgICBzZXNzaW9uLT5pZGxlX3N0cmVhbV9oZWFkID0gc3RyZWFtOworICB9CisgIHNlc3Npb24tPmlkbGVfc3RyZWFtX3RhaWwgPSBzdHJlYW07CisKKyAgKytzZXNzaW9uLT5udW1faWRsZV9zdHJlYW1zOworfQorCit2b2lkIG5naHR0cDJfc2Vzc2lvbl9kZXRhY2hfaWRsZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnByZXZfc3RyZWFtLCAqbmV4dF9zdHJlYW07CisKKyAgREVCVUdGKCJzdHJlYW06IGRldGFjaCBpZGxlIHN0cmVhbSglcCk9JWQsIHN0YXRlPSVkXG4iLCBzdHJlYW0sCisgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtLT5zdGF0ZSk7CisKKyAgcHJldl9zdHJlYW0gPSBzdHJlYW0tPmNsb3NlZF9wcmV2OworICBuZXh0X3N0cmVhbSA9IHN0cmVhbS0+Y2xvc2VkX25leHQ7CisKKyAgaWYgKHByZXZfc3RyZWFtKSB7CisgICAgcHJldl9zdHJlYW0tPmNsb3NlZF9uZXh0ID0gbmV4dF9zdHJlYW07CisgIH0gZWxzZSB7CisgICAgc2Vzc2lvbi0+aWRsZV9zdHJlYW1faGVhZCA9IG5leHRfc3RyZWFtOworICB9CisKKyAgaWYgKG5leHRfc3RyZWFtKSB7CisgICAgbmV4dF9zdHJlYW0tPmNsb3NlZF9wcmV2ID0gcHJldl9zdHJlYW07CisgIH0gZWxzZSB7CisgICAgc2Vzc2lvbi0+aWRsZV9zdHJlYW1fdGFpbCA9IHByZXZfc3RyZWFtOworICB9CisKKyAgc3RyZWFtLT5jbG9zZWRfcHJldiA9IE5VTEw7CisgIHN0cmVhbS0+Y2xvc2VkX25leHQgPSBOVUxMOworCisgIC0tc2Vzc2lvbi0+bnVtX2lkbGVfc3RyZWFtczsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfY2xvc2VkX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgc2l6ZV90IG51bV9zdHJlYW1fbWF4OworICBpbnQgcnY7CisKKyAgaWYgKHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXMgPT0KKyAgICAgIE5HSFRUUDJfREVGQVVMVF9NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7CisgICAgbnVtX3N0cmVhbV9tYXggPSBzZXNzaW9uLT5wZW5kaW5nX2xvY2FsX21heF9jb25jdXJyZW50X3N0cmVhbTsKKyAgfSBlbHNlIHsKKyAgICBudW1fc3RyZWFtX21heCA9IHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXM7CisgIH0KKworICBERUJVR0YoInN0cmVhbTogYWRqdXN0aW5nIGtlcHQgY2xvc2VkIHN0cmVhbXMgbnVtX2Nsb3NlZF9zdHJlYW1zPSV6dSwgIgorICAgICAgICAgIm51bV9pbmNvbWluZ19zdHJlYW1zPSV6dSwgbWF4X2NvbmN1cnJlbnRfc3RyZWFtcz0lenVcbiIsCisgICAgICAgICBzZXNzaW9uLT5udW1fY2xvc2VkX3N0cmVhbXMsIHNlc3Npb24tPm51bV9pbmNvbWluZ19zdHJlYW1zLAorICAgICAgICAgbnVtX3N0cmVhbV9tYXgpOworCisgIHdoaWxlIChzZXNzaW9uLT5udW1fY2xvc2VkX3N0cmVhbXMgPiAwICYmCisgICAgICAgICBzZXNzaW9uLT5udW1fY2xvc2VkX3N0cmVhbXMgKyBzZXNzaW9uLT5udW1faW5jb21pbmdfc3RyZWFtcyA+CisgICAgICAgICAgICAgbnVtX3N0cmVhbV9tYXgpIHsKKyAgICBuZ2h0dHAyX3N0cmVhbSAqaGVhZF9zdHJlYW07CisgICAgbmdodHRwMl9zdHJlYW0gKm5leHQ7CisKKyAgICBoZWFkX3N0cmVhbSA9IHNlc3Npb24tPmNsb3NlZF9zdHJlYW1faGVhZDsKKworICAgIGFzc2VydChoZWFkX3N0cmVhbSk7CisKKyAgICBuZXh0ID0gaGVhZF9zdHJlYW0tPmNsb3NlZF9uZXh0OworCisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fZGVzdHJveV9zdHJlYW0oc2Vzc2lvbiwgaGVhZF9zdHJlYW0pOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgLyogaGVhZF9zdHJlYW0gaXMgbm93IGZyZWVkICovCisKKyAgICBzZXNzaW9uLT5jbG9zZWRfc3RyZWFtX2hlYWQgPSBuZXh0OworCisgICAgaWYgKHNlc3Npb24tPmNsb3NlZF9zdHJlYW1faGVhZCkgeworICAgICAgc2Vzc2lvbi0+Y2xvc2VkX3N0cmVhbV9oZWFkLT5jbG9zZWRfcHJldiA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgIHNlc3Npb24tPmNsb3NlZF9zdHJlYW1fdGFpbCA9IE5VTEw7CisgICAgfQorCisgICAgLS1zZXNzaW9uLT5udW1fY2xvc2VkX3N0cmVhbXM7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHNpemVfdCBtYXg7CisgIGludCBydjsKKworICAvKiBNYWtlIG1pbmltdW0gbnVtYmVyIG9mIGlkbGUgc3RyZWFtcyAxNiwgYW5kIG1heGltdW0gMTAwLCB3aGljaAorICAgICBhcmUgYXJiaXRyYXJ5IGNob3NlbiBudW1iZXJzLiAqLworICBtYXggPSBuZ2h0dHAyX21pbigKKyAgICAgIDEwMCwgbmdodHRwMl9tYXgoCisgICAgICAgICAgICAgICAxNiwgbmdodHRwMl9taW4oc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5wZW5kaW5nX2xvY2FsX21heF9jb25jdXJyZW50X3N0cmVhbSkpKTsKKworICBERUJVR0YoInN0cmVhbTogYWRqdXN0aW5nIGtlcHQgaWRsZSBzdHJlYW1zIG51bV9pZGxlX3N0cmVhbXM9JXp1LCBtYXg9JXp1XG4iLAorICAgICAgICAgc2Vzc2lvbi0+bnVtX2lkbGVfc3RyZWFtcywgbWF4KTsKKworICB3aGlsZSAoc2Vzc2lvbi0+bnVtX2lkbGVfc3RyZWFtcyA+IG1heCkgeworICAgIG5naHR0cDJfc3RyZWFtICpoZWFkOworICAgIG5naHR0cDJfc3RyZWFtICpuZXh0OworCisgICAgaGVhZCA9IHNlc3Npb24tPmlkbGVfc3RyZWFtX2hlYWQ7CisgICAgYXNzZXJ0KGhlYWQpOworCisgICAgbmV4dCA9IGhlYWQtPmNsb3NlZF9uZXh0OworCisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fZGVzdHJveV9zdHJlYW0oc2Vzc2lvbiwgaGVhZCk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICAvKiBoZWFkIGlzIG5vdyBkZXN0cm95ZWQgKi8KKworICAgIHNlc3Npb24tPmlkbGVfc3RyZWFtX2hlYWQgPSBuZXh0OworCisgICAgaWYgKHNlc3Npb24tPmlkbGVfc3RyZWFtX2hlYWQpIHsKKyAgICAgIHNlc3Npb24tPmlkbGVfc3RyZWFtX2hlYWQtPmNsb3NlZF9wcmV2ID0gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgc2Vzc2lvbi0+aWRsZV9zdHJlYW1fdGFpbCA9IE5VTEw7CisgICAgfQorCisgICAgLS1zZXNzaW9uLT5udW1faWRsZV9zdHJlYW1zOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDbG9zZXMgc3RyZWFtIHdpdGggc3RyZWFtIElEIHxzdHJlYW1faWR8IGlmIGJvdGggdHJhbnNtaXNzaW9uIGFuZAorICogcmVjZXB0aW9uIG9mIHRoZSBzdHJlYW0gd2VyZSBkaXNhbGxvd2VkLiBUaGUgfGVycm9yX2NvZGV8IGluZGljYXRlcworICogdGhlIHJlYXNvbiBvZiB0aGUgY2xvc3VyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQKKyAqICAgVGhlIHN0cmVhbSBpcyBub3QgZm91bmQuCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBmYWlsZWQuCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtX2lmX3NodXRfcmR3cihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpZiAoKHN0cmVhbS0+c2h1dF9mbGFncyAmIE5HSFRUUDJfU0hVVF9SRFdSKSA9PSBOR0hUVFAyX1NIVVRfUkRXUikgeworICAgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtKHNlc3Npb24sIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfTk9fRVJST1IpOworICB9CisgIHJldHVybiAwOworfQorCisvKgorICogUmV0dXJucyBub256ZXJvIGlmIGxvY2FsIGVuZHBvaW50IGFsbG93cyByZWNlcHRpb24gb2YgbmV3IHN0cmVhbQorICogZnJvbSByZW1vdGUuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9hbGxvd19pbmNvbWluZ19uZXdfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gKHNlc3Npb24tPmdvYXdheV9mbGFncyAmCisgICAgICAgICAgKE5HSFRUUDJfR09BV0FZX1RFUk1fT05fU0VORCB8IE5HSFRUUDJfR09BV0FZX1NFTlQpKSA9PSAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIG5vbnplcm8gaWYgc2Vzc2lvbiBpcyBjbG9zaW5nLgorICovCitzdGF0aWMgaW50IHNlc3Npb25faXNfY2xvc2luZyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgJiBOR0hUVFAyX0dPQVdBWV9URVJNX09OX1NFTkQpICE9IDAgfHwKKyAgICAgICAgIChuZ2h0dHAyX3Nlc3Npb25fd2FudF9yZWFkKHNlc3Npb24pID09IDAgJiYKKyAgICAgICAgICBuZ2h0dHAyX3Nlc3Npb25fd2FudF93cml0ZShzZXNzaW9uKSA9PSAwKTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgd2UgY2FuIHNlbmQgYSBmcmFtZSB0byB0aGUgfHN0cmVhbXwuIFRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgMCBpZiB3ZSBjYW4gc2VuZCBhIGZyYW1lIHRvIHRoZSB8ZnJhbWV8LCBvciBvbmUgb2YgdGhlCisgKiBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRAorICogICBUaGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkLgorICogTkdIVFRQMl9FUlJfU1RSRUFNX1NIVVRfV1IKKyAqICAgVGhlIHN0cmVhbSBpcyBoYWxmLWNsb3NlZCBmb3IgdHJhbnNtaXNzaW9uLgorICogTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HCisgKiAgIFRoaXMgc2Vzc2lvbiBpcyBjbG9zaW5nLgorICovCitzdGF0aWMgaW50IHNlc3Npb25fcHJlZGljYXRlX2Zvcl9zdHJlYW1fc2VuZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VEOworICB9CisgIGlmIChzZXNzaW9uX2lzX2Nsb3Npbmcoc2Vzc2lvbikpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HOworICB9CisgIGlmIChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfV1IpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX1NIVVRfV1I7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fY2hlY2tfcmVxdWVzdF9hbGxvd2VkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gIXNlc3Npb24tPnNlcnZlciAmJiBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCA8PSBJTlQzMl9NQVggJiYKKyAgICAgICAgIChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgJiBOR0hUVFAyX0dPQVdBWV9SRUNWKSA9PSAwICYmCisgICAgICAgICAhc2Vzc2lvbl9pc19jbG9zaW5nKHNlc3Npb24pOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgcmVxdWVzdCBIRUFERVJTIGZyYW1lLCB3aGljaCBvcGVucyBzdHJlYW0sIGNhbgorICogYmUgc2VudCBhdCB0aGlzIHRpbWUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9TVEFSVF9TVFJFQU1fTk9UX0FMTE9XRUQKKyAqICAgICBOZXcgc3RyZWFtIGNhbm5vdCBiZSBjcmVhdGVkIGJlY2F1c2Ugb2YgR09BV0FZOiBzZXNzaW9uIGlzCisgKiAgICAgZ29pbmcgZG93biBvciByZWNlaXZlZCBsYXN0X3N0cmVhbV9pZCBpcyBzdHJpY3RseSBsZXNzIHRoYW4KKyAqICAgICBmcmFtZS0+aGQuc3RyZWFtX2lkLgorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkcKKyAqICAgICByZXF1ZXN0IEhFQURFUlMgd2FzIGNhbmNlbGVkIGJ5IFJTVF9TVFJFQU0gd2hpbGUgaXQgaXMgaW4gcXVldWUuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcmVkaWNhdGVfcmVxdWVzdF9oZWFkZXJzX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0pIHsKKyAgaWYgKGl0ZW0tPmF1eF9kYXRhLmhlYWRlcnMuY2FuY2VsZWQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkc7CisgIH0KKyAgLyogSWYgd2UgYXJlIHRlcm1pbmF0aW5nIHNlc3Npb24gKE5HSFRUUDJfR09BV0FZX1RFUk1fT05fU0VORCksCisgICAgIEdPQVdBWSB3YXMgcmVjZWl2ZWQgZnJvbSBwZWVyLCBvciBzZXNzaW9uIGlzIGFib3V0IHRvIGNsb3NlLCBuZXcKKyAgICAgcmVxdWVzdCBpcyBub3QgYWxsb3dlZC4gKi8KKyAgaWYgKChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgJiBOR0hUVFAyX0dPQVdBWV9SRUNWKSB8fAorICAgICAgc2Vzc2lvbl9pc19jbG9zaW5nKHNlc3Npb24pKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUQVJUX1NUUkVBTV9OT1RfQUxMT1dFRDsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIEhFQURFUlMsIHdoaWNoIGlzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZQorICogc2VydmVyLCB3aXRoIHRoZSB8c3RyZWFtfCBjYW4gYmUgc2VudCBhdCB0aGlzIHRpbWUuICBUaGUgfHN0cmVhbXwKKyAqIGNhbiBiZSBOVUxMLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRAorICogICAgIFRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQgb3IgZG9lcyBub3QgZXhpc3QuCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fU0hVVF9XUgorICogICAgIFRoZSB0cmFuc21pc3Npb24gaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgc3RyZWFtIChlLmcuLCBhIGZyYW1lCisgKiAgICAgd2l0aCBFTkRfU1RSRUFNIGZsYWcgc2V0IGhhcyBhbHJlYWR5IHNlbnQpCisgKiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUUkVBTV9JRAorICogICAgIFRoZSBzdHJlYW0gSUQgaXMgaW52YWxpZC4KKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HCisgKiAgICAgUlNUX1NUUkVBTSB3YXMgcXVldWVkIGZvciB0aGlzIHN0cmVhbS4KKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RSRUFNX1NUQVRFCisgKiAgICAgVGhlIHN0YXRlIG9mIHRoZSBzdHJlYW0gaXMgbm90IHZhbGlkLgorICogTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HCisgKiAgICAgVGhpcyBzZXNzaW9uIGlzIGNsb3NpbmcuCisgKiBOR0hUVFAyX0VSUl9QUk9UTworICogICAgIENsaWVudCBzaWRlIGF0dGVtcHRlZCB0byBzZW5kIHJlc3BvbnNlLgorICovCitzdGF0aWMgaW50IHNlc3Npb25fcHJlZGljYXRlX3Jlc3BvbnNlX2hlYWRlcnNfc2VuZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGludCBydjsKKyAgcnYgPSBzZXNzaW9uX3ByZWRpY2F0ZV9mb3Jfc3RyZWFtX3NlbmQoc2Vzc2lvbiwgc3RyZWFtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgYXNzZXJ0KHN0cmVhbSk7CisgIGlmICghc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1BST1RPOworICB9CisgIGlmIChuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIHN0cmVhbS0+c3RyZWFtX2lkKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUUkVBTV9JRDsKKyAgfQorICBzd2l0Y2ggKHN0cmVhbS0+c3RhdGUpIHsKKyAgY2FzZSBOR0hUVFAyX1NUUkVBTV9PUEVOSU5HOgorICAgIHJldHVybiAwOworICBjYXNlIE5HSFRUUDJfU1RSRUFNX0NMT1NJTkc6CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HOworICBkZWZhdWx0OgorICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUUkVBTV9TVEFURTsKKyAgfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgSEVBREVSUyBmb3IgcmVzZXJ2ZWQgc3RyZWFtIGNhbiBiZSBzZW50LiBUaGUKKyAqIHxzdHJlYW18IG11c3QgYmUgcmVzZXJ2ZWQgc3RhdGUgYW5kIHRoZSB8c2Vzc2lvbnwgaXMgc2VydmVyIHNpZGUuCisgKiBUaGUgfHN0cmVhbXwgY2FuIGJlIE5VTEwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VECisgKiAgIFRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQuCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fU0hVVF9XUgorICogICBUaGUgc3RyZWFtIGlzIGhhbGYtY2xvc2VkIGZvciB0cmFuc21pc3Npb24uCisgKiBOR0hUVFAyX0VSUl9QUk9UTworICogICBUaGUgc3RyZWFtIGlzIG5vdCByZXNlcnZlZCBzdGF0ZQorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRAorICogICBSU1RfU1RSRUFNIHdhcyBxdWV1ZWQgZm9yIHRoaXMgc3RyZWFtLgorICogTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HCisgKiAgIFRoaXMgc2Vzc2lvbiBpcyBjbG9zaW5nLgorICogTkdIVFRQMl9FUlJfU1RBUlRfU1RSRUFNX05PVF9BTExPV0VECisgKiAgIE5ldyBzdHJlYW0gY2Fubm90IGJlIGNyZWF0ZWQgYmVjYXVzZSBHT0FXQVkgaXMgYWxyZWFkeSBzZW50IG9yCisgKiAgIHJlY2VpdmVkLgorICogTkdIVFRQMl9FUlJfUFJPVE8KKyAqICAgQ2xpZW50IHNpZGUgYXR0ZW1wdGVkIHRvIHNlbmQgcHVzaCByZXNwb25zZS4KKyAqLworc3RhdGljIGludAorc2Vzc2lvbl9wcmVkaWNhdGVfcHVzaF9yZXNwb25zZV9oZWFkZXJzX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpbnQgcnY7CisgIC8qIFRPRE8gU2hvdWxkIGRpc2FsbG93IEhFQURFUlMgaWYgR09BV0FZIGhhcyBhbHJlYWR5IGJlZW4gaXNzdWVkPyAqLworICBydiA9IHNlc3Npb25fcHJlZGljYXRlX2Zvcl9zdHJlYW1fc2VuZChzZXNzaW9uLCBzdHJlYW0pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorICBhc3NlcnQoc3RyZWFtKTsKKyAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfUFJPVE87CisgIH0KKyAgaWYgKHN0cmVhbS0+c3RhdGUgIT0gTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfUFJPVE87CisgIH0KKyAgaWYgKHNlc3Npb24tPmdvYXdheV9mbGFncyAmIE5HSFRUUDJfR09BV0FZX1JFQ1YpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RBUlRfU1RSRUFNX05PVF9BTExPV0VEOworICB9CisgIHJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgSEVBREVSUywgd2hpY2ggaXMgbmVpdGhlciBzdHJlYW0tb3BlbmluZyBub3IKKyAqIGZpcnN0IHJlc3BvbnNlIGhlYWRlciwgd2l0aCB0aGUgfHN0cmVhbXwgY2FuIGJlIHNlbnQgYXQgdGhpcyB0aW1lLgorICogVGhlIHxzdHJlYW18IGNhbiBiZSBOVUxMLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRAorICogICAgIFRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQgb3IgZG9lcyBub3QgZXhpc3QuCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fU0hVVF9XUgorICogICAgIFRoZSB0cmFuc21pc3Npb24gaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgc3RyZWFtIChlLmcuLCBhIGZyYW1lCisgKiAgICAgd2l0aCBFTkRfU1RSRUFNIGZsYWcgc2V0IGhhcyBhbHJlYWR5IHNlbnQpCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0lORworICogICAgIFJTVF9TVFJFQU0gd2FzIHF1ZXVlZCBmb3IgdGhpcyBzdHJlYW0uCisgKiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUUkVBTV9TVEFURQorICogICAgIFRoZSBzdGF0ZSBvZiB0aGUgc3RyZWFtIGlzIG5vdCB2YWxpZC4KKyAqIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORworICogICBUaGlzIHNlc3Npb24gaXMgY2xvc2luZy4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX3ByZWRpY2F0ZV9oZWFkZXJzX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpbnQgcnY7CisgIHJ2ID0gc2Vzc2lvbl9wcmVkaWNhdGVfZm9yX3N0cmVhbV9zZW5kKHNlc3Npb24sIHN0cmVhbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIGFzc2VydChzdHJlYW0pOworCisgIHN3aXRjaCAoc3RyZWFtLT5zdGF0ZSkgeworICBjYXNlIE5HSFRUUDJfU1RSRUFNX09QRU5FRDoKKyAgICByZXR1cm4gMDsKKyAgY2FzZSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HOgorICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0lORzsKKyAgZGVmYXVsdDoKKyAgICBpZiAobmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fU1RBVEU7CisgIH0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIFBVU0hfUFJPTUlTRSBmcmFtZSB8ZnJhbWV8IHdpdGggdGhlIHxzdHJlYW18CisgKiBjYW4gYmUgc2VudCBhdCB0aGlzIHRpbWUuICBUaGUgfHN0cmVhbXwgY2FuIGJlIE5VTEwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9TVEFSVF9TVFJFQU1fTk9UX0FMTE9XRUQKKyAqICAgICBOZXcgc3RyZWFtIGNhbm5vdCBiZSBjcmVhdGVkIGJlY2F1c2UgR09BV0FZIGlzIGFscmVhZHkgc2VudCBvcgorICogICAgIHJlY2VpdmVkLgorICogTkdIVFRQMl9FUlJfUFJPVE8KKyAqICAgICBUaGUgY2xpZW50IHNpZGUgYXR0ZW1wdHMgdG8gc2VuZCBQVVNIX1BST01JU0UsIG9yIHRoZSBzZXJ2ZXIKKyAqICAgICBzZW5kcyBQVVNIX1BST01JU0UgZm9yIHRoZSBzdHJlYW0gbm90IGluaXRpYXRlZCBieSB0aGUgY2xpZW50LgorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRAorICogICAgIFRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQgb3IgZG9lcyBub3QgZXhpc3QuCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0lORworICogICAgIFJTVF9TVFJFQU0gd2FzIHF1ZXVlZCBmb3IgdGhpcyBzdHJlYW0uCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fU0hVVF9XUgorICogICAgIFRoZSB0cmFuc21pc3Npb24gaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgc3RyZWFtIChlLmcuLCBhIGZyYW1lCisgKiAgICAgd2l0aCBFTkRfU1RSRUFNIGZsYWcgc2V0IGhhcyBhbHJlYWR5IHNlbnQpCisgKiBOR0hUVFAyX0VSUl9QVVNIX0RJU0FCTEVECisgKiAgICAgVGhlIHJlbW90ZSBwZWVyIGRpc2FibGVkIHJlY2VwdGlvbiBvZiBQVVNIX1BST01JU0UuCisgKiBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkcKKyAqICAgVGhpcyBzZXNzaW9uIGlzIGNsb3NpbmcuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcmVkaWNhdGVfcHVzaF9wcm9taXNlX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGludCBydjsKKworICBpZiAoIXNlc3Npb24tPnNlcnZlcikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9QUk9UTzsKKyAgfQorCisgIHJ2ID0gc2Vzc2lvbl9wcmVkaWNhdGVfZm9yX3N0cmVhbV9zZW5kKHNlc3Npb24sIHN0cmVhbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgYXNzZXJ0KHN0cmVhbSk7CisKKyAgaWYgKHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5lbmFibGVfcHVzaCA9PSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1BVU0hfRElTQUJMRUQ7CisgIH0KKyAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fQ0xPU0lORykgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0lORzsKKyAgfQorICBpZiAoc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzICYgTkdIVFRQMl9HT0FXQVlfUkVDVikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVEFSVF9TVFJFQU1fTk9UX0FMTE9XRUQ7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBXSU5ET1dfVVBEQVRFIHdpdGggdGhlIHN0cmVhbSBJRCB8c3RyZWFtX2lkfAorICogY2FuIGJlIHNlbnQgYXQgdGhpcyB0aW1lLiBOb3RlIHRoYXQgRU5EX1NUUkVBTSBmbGFnIG9mIHRoZSBwcmV2aW91cworICogZnJhbWUgZG9lcyBub3QgYWZmZWN0IHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIFdJTkRPV19VUERBVEUgZnJhbWUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VECisgKiAgICAgVGhlIHN0cmVhbSBpcyBhbHJlYWR5IGNsb3NlZCBvciBkb2VzIG5vdCBleGlzdC4KKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HCisgKiAgICAgUlNUX1NUUkVBTSB3YXMgcXVldWVkIGZvciB0aGlzIHN0cmVhbS4KKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RSRUFNX1NUQVRFCisgKiAgICAgVGhlIHN0YXRlIG9mIHRoZSBzdHJlYW0gaXMgbm90IHZhbGlkLgorICogTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HCisgKiAgIFRoaXMgc2Vzc2lvbiBpcyBjbG9zaW5nLgorICovCitzdGF0aWMgaW50IHNlc3Npb25fcHJlZGljYXRlX3dpbmRvd191cGRhdGVfc2VuZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIGlmIChzZXNzaW9uX2lzX2Nsb3Npbmcoc2Vzc2lvbikpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HOworICB9CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgLyogQ29ubmVjdGlvbi1sZXZlbCB3aW5kb3cgdXBkYXRlICovCisgICAgcmV0dXJuIDA7CisgIH0KKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQ7CisgIH0KKyAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fQ0xPU0lORykgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0lORzsKKyAgfQorICBpZiAoc3RhdGVfcmVzZXJ2ZWRfbG9jYWwoc2Vzc2lvbiwgc3RyZWFtKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUUkVBTV9TVEFURTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3ByZWRpY2F0ZV9hbHRzdmNfc2VuZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgaWYgKHNlc3Npb25faXNfY2xvc2luZyhzZXNzaW9uKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkc7CisgIH0KKworICBpZiAoc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VEOworICB9CisgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkc7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3ByZWRpY2F0ZV9vcmlnaW5fc2VuZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgaWYgKHNlc3Npb25faXNfY2xvc2luZyhzZXNzaW9uKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkc7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgaW50byBhY2NvdW50IHNldHRpbmdzIG1heCBmcmFtZSBzaXplIGFuZCBib3RoIGNvbm5lY3Rpb24tbGV2ZWwKKyAgIGZsb3cgY29udHJvbCBoZXJlICovCitzdGF0aWMgc3NpemVfdAorbmdodHRwMl9zZXNzaW9uX2VuZm9yY2VfZmxvd19jb250cm9sX2xpbWl0cyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgcmVxdWVzdGVkX3dpbmRvd19zaXplKSB7CisgIERFQlVHRigic2VuZDogcmVtb3RlIHdpbmRvd3NpemUgY29ubmVjdGlvbj0lZCwgcmVtb3RlIG1heGZyYW1zaXplPSV1LCAiCisgICAgICAgICAic3RyZWFtKGlkICVkKT0lZFxuIiwKKyAgICAgICAgIHNlc3Npb24tPnJlbW90ZV93aW5kb3dfc2l6ZSwgc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLm1heF9mcmFtZV9zaXplLAorICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbS0+cmVtb3RlX3dpbmRvd19zaXplKTsKKworICByZXR1cm4gbmdodHRwMl9taW4obmdodHRwMl9taW4obmdodHRwMl9taW4ocmVxdWVzdGVkX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5yZW1vdGVfd2luZG93X3NpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+cmVtb3RlX3dpbmRvd19zaXplKSwKKyAgICAgICAgICAgICAgICAgICAgIChpbnQzMl90KXNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5tYXhfZnJhbWVfc2l6ZSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBuZXh0IGRhdGEgcmVhZC4gSWYgdGhlCisgKiBjb25uZWN0aW9uLWxldmVsIGFuZC9vciBzdHJlYW0td2lzZSBmbG93IGNvbnRyb2wgYXJlIGVuYWJsZWQsIHRoZQorICogcmV0dXJuIHZhbHVlIHRha2VzIGludG8gYWNjb3VudCB0aG9zZSBjdXJyZW50IHdpbmRvdyBzaXplcy4gVGhlIHJlbW90ZQorICogc2V0dGluZ3MgZm9yIG1heCBmcmFtZSBzaXplIGlzIGFsc28gdGFrZW4gaW50byBhY2NvdW50LgorICovCitzdGF0aWMgc2l6ZV90IG5naHR0cDJfc2Vzc2lvbl9uZXh0X2RhdGFfcmVhZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHNzaXplX3Qgd2luZG93X3NpemU7CisKKyAgd2luZG93X3NpemUgPSBuZ2h0dHAyX3Nlc3Npb25fZW5mb3JjZV9mbG93X2NvbnRyb2xfbGltaXRzKAorICAgICAgc2Vzc2lvbiwgc3RyZWFtLCBOR0hUVFAyX0RBVEFfUEFZTE9BRExFTik7CisKKyAgREVCVUdGKCJzZW5kOiBhdmFpbGFibGUgd2luZG93PSV6ZFxuIiwgd2luZG93X3NpemUpOworCisgIHJldHVybiB3aW5kb3dfc2l6ZSA+IDAgPyAoc2l6ZV90KXdpbmRvd19zaXplIDogMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIERBVEEgd2l0aCB0aGUgfHN0cmVhbXwgY2FuIGJlIHNlbnQgYXQgdGhpcworICogdGltZS4gIFRoZSB8c3RyZWFtfCBjYW4gYmUgTlVMTC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQKKyAqICAgICBUaGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkIG9yIGRvZXMgbm90IGV4aXN0LgorICogTkdIVFRQMl9FUlJfU1RSRUFNX1NIVVRfV1IKKyAqICAgICBUaGUgdHJhbnNtaXNzaW9uIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHN0cmVhbSAoZS5nLiwgYSBmcmFtZQorICogICAgIHdpdGggRU5EX1NUUkVBTSBmbGFnIHNldCBoYXMgYWxyZWFkeSBzZW50KQorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkcKKyAqICAgICBSU1RfU1RSRUFNIHdhcyBxdWV1ZWQgZm9yIHRoaXMgc3RyZWFtLgorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fU1RBVEUKKyAqICAgICBUaGUgc3RhdGUgb2YgdGhlIHN0cmVhbSBpcyBub3QgdmFsaWQuCisgKiBOR0hUVFAyX0VSUl9TRVNTSU9OX0NMT1NJTkcKKyAqICAgVGhpcyBzZXNzaW9uIGlzIGNsb3NpbmcuCisgKi8KK3N0YXRpYyBpbnQgbmdodHRwMl9zZXNzaW9uX3ByZWRpY2F0ZV9kYXRhX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGludCBydjsKKyAgcnYgPSBzZXNzaW9uX3ByZWRpY2F0ZV9mb3Jfc3RyZWFtX3NlbmQoc2Vzc2lvbiwgc3RyZWFtKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgYXNzZXJ0KHN0cmVhbSk7CisgIGlmIChuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIHN0cmVhbS0+c3RyZWFtX2lkKSkgeworICAgIC8qIFJlcXVlc3QgYm9keSBkYXRhICovCisgICAgLyogSWYgc3RyZWFtLT5zdGF0ZSBpcyBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HLCBSU1RfU1RSRUFNIHdhcworICAgICAgIHF1ZXVlZCBidXQgbm90IHlldCBzZW50LiBJbiB0aGlzIGNhc2UsIHdlIHdvbid0IHNlbmQgREFUQQorICAgICAgIGZyYW1lcy4gKi8KKyAgICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NJTkc7CisgICAgfQorICAgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVEKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVFJFQU1fU1RBVEU7CisgICAgfQorICAgIHJldHVybiAwOworICB9CisgIC8qIFJlc3BvbnNlIGJvZHkgZGF0YSAqLworICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9PUEVORUQpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TSU5HOworICB9CisgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUUkVBTV9TVEFURTsKK30KKworc3RhdGljIHNzaXplX3Qgc2Vzc2lvbl9jYWxsX3NlbGVjdF9wYWRkaW5nKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X3BheWxvYWRsZW4pIHsKKyAgc3NpemVfdCBydjsKKworICBpZiAoZnJhbWUtPmhkLmxlbmd0aCA+PSBtYXhfcGF5bG9hZGxlbikgeworICAgIHJldHVybiAoc3NpemVfdClmcmFtZS0+aGQubGVuZ3RoOworICB9CisKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5zZWxlY3RfcGFkZGluZ19jYWxsYmFjaykgeworICAgIHNpemVfdCBtYXhfcGFkZGVkbGVuOworCisgICAgbWF4X3BhZGRlZGxlbiA9CisgICAgICAgIG5naHR0cDJfbWluKGZyYW1lLT5oZC5sZW5ndGggKyBOR0hUVFAyX01BWF9QQURMRU4sIG1heF9wYXlsb2FkbGVuKTsKKworICAgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLnNlbGVjdF9wYWRkaW5nX2NhbGxiYWNrKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgbWF4X3BhZGRlZGxlbiwgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKyAgICBpZiAocnYgPCAoc3NpemVfdClmcmFtZS0+aGQubGVuZ3RoIHx8IHJ2ID4gKHNzaXplX3QpbWF4X3BhZGRlZGxlbikgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gKHNzaXplX3QpZnJhbWUtPmhkLmxlbmd0aDsKK30KKworLyogQWRkIHBhZGRpbmcgdG8gSEVBREVSUyBvciBQVVNIX1BST01JU0UuIFdlIHVzZQorICAgZnJhbWUtPmhlYWRlcnMucGFkbGVuIGluIHRoaXMgZnVuY3Rpb24gdG8gdXNlIHRoZSBmYWN0IHRoYXQKKyAgIGZyYW1lLT5wdXNoX3Byb21pc2UgaGFzIGFsc28gcGFkbGVuIGluIHRoZSBzYW1lIHBvc2l0aW9uLiAqLworc3RhdGljIGludCBzZXNzaW9uX2hlYWRlcnNfYWRkX3BhZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydjsKKyAgc3NpemVfdCBwYWRkZWRfcGF5bG9hZGxlbjsKKyAgbmdodHRwMl9hY3RpdmVfb3V0Ym91bmRfaXRlbSAqYW9iOworICBuZ2h0dHAyX2J1ZnMgKmZyYW1lYnVmczsKKyAgc2l6ZV90IHBhZGxlbjsKKyAgc2l6ZV90IG1heF9wYXlsb2FkbGVuOworCisgIGFvYiA9ICZzZXNzaW9uLT5hb2I7CisgIGZyYW1lYnVmcyA9ICZhb2ItPmZyYW1lYnVmczsKKworICBtYXhfcGF5bG9hZGxlbiA9IG5naHR0cDJfbWluKE5HSFRUUDJfTUFYX1BBWUxPQURMRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmhkLmxlbmd0aCArIE5HSFRUUDJfTUFYX1BBRExFTik7CisKKyAgcGFkZGVkX3BheWxvYWRsZW4gPQorICAgICAgc2Vzc2lvbl9jYWxsX3NlbGVjdF9wYWRkaW5nKHNlc3Npb24sIGZyYW1lLCBtYXhfcGF5bG9hZGxlbik7CisKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwoKGludClwYWRkZWRfcGF5bG9hZGxlbikpIHsKKyAgICByZXR1cm4gKGludClwYWRkZWRfcGF5bG9hZGxlbjsKKyAgfQorCisgIHBhZGxlbiA9IChzaXplX3QpcGFkZGVkX3BheWxvYWRsZW4gLSBmcmFtZS0+aGQubGVuZ3RoOworCisgIERFQlVHRigic2VuZDogcGFkZGluZyBzZWxlY3RlZDogcGF5bG9hZGxlbj0lemQsIHBhZGxlbj0lenVcbiIsCisgICAgICAgICBwYWRkZWRfcGF5bG9hZGxlbiwgcGFkbGVuKTsKKworICBydiA9IG5naHR0cDJfZnJhbWVfYWRkX3BhZChmcmFtZWJ1ZnMsICZmcmFtZS0+aGQsIHBhZGxlbiwgMCk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBmcmFtZS0+aGVhZGVycy5wYWRsZW4gPSBwYWRsZW47CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3Qgc2Vzc2lvbl9lc3RpbWF0ZV9oZWFkZXJzX3BheWxvYWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkZGl0aW9uYWwpIHsKKyAgcmV0dXJuIG5naHR0cDJfaGRfZGVmbGF0ZV9ib3VuZCgmc2Vzc2lvbi0+aGRfZGVmbGF0ZXIsIG52YSwgbnZsZW4pICsKKyAgICAgICAgIGFkZGl0aW9uYWw7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9wYWNrX2V4dGVuc2lvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIG5naHR0cDJfYnVmcyAqYnVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBzc2l6ZV90IHJ2OworICBuZ2h0dHAyX2J1ZiAqYnVmOworICBzaXplX3QgYnVmbGVuOworICBzaXplX3QgZnJhbWVsZW47CisKKyAgYXNzZXJ0KHNlc3Npb24tPmNhbGxiYWNrcy5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjayk7CisKKyAgYnVmID0gJmJ1ZnMtPmhlYWQtPmJ1ZjsKKyAgYnVmbGVuID0gbmdodHRwMl9taW4obmdodHRwMl9idWZfYXZhaWwoYnVmKSwgTkdIVFRQMl9NQVhfUEFZTE9BRExFTik7CisKKyAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3MucGFja19leHRlbnNpb25fY2FsbGJhY2soc2Vzc2lvbiwgYnVmLT5sYXN0LCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLCBzZXNzaW9uLT51c2VyX2RhdGEpOworICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfQ0FOQ0VMKSB7CisgICAgcmV0dXJuIChpbnQpcnY7CisgIH0KKworICBpZiAocnYgPCAwIHx8IChzaXplX3QpcnYgPiBidWZsZW4pIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIGZyYW1lbGVuID0gKHNpemVfdClydjsKKworICBmcmFtZS0+aGQubGVuZ3RoID0gZnJhbWVsZW47CisKKyAgYXNzZXJ0KGJ1Zi0+cG9zID09IGJ1Zi0+bGFzdCk7CisgIGJ1Zi0+bGFzdCArPSBmcmFtZWxlbjsKKyAgYnVmLT5wb3MgLT0gTkdIVFRQMl9GUkFNRV9IRExFTjsKKworICBuZ2h0dHAyX2ZyYW1lX3BhY2tfZnJhbWVfaGQoYnVmLT5wb3MsICZmcmFtZS0+aGQpOworCisgIHJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZXJpYWxpemVzIGZyYW1lIGZvciB0cmFuc21pc3Npb24uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiBuZWdhdGl2ZSBlcnJvcgorICogY29kZXMsIGluY2x1ZGluZyBib3RoIGZhdGFsIGFuZCBub24tZmF0YWwgb25lcy4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX3ByZXBfZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisKKyAgc3dpdGNoIChmcmFtZS0+aGQudHlwZSkgeworICBjYXNlIE5HSFRUUDJfREFUQTogeworICAgIHNpemVfdCBuZXh0X3JlYWRtYXg7CisgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworCisgICAgaWYgKHN0cmVhbSkgeworICAgICAgYXNzZXJ0KHN0cmVhbS0+aXRlbSA9PSBpdGVtKTsKKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9wcmVkaWNhdGVfZGF0YV9zZW5kKHNlc3Npb24sIHN0cmVhbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIC8vIElmIHN0cmVhbSB3YXMgYWxyZWFkeSBjbG9zZWQsIG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKCkKKyAgICAgIC8vIHJldHVybnMgTlVMTCwgYnV0IGl0ZW0gaXMgc3RpbGwgYXR0YWNoZWQgdG8gdGhlIHN0cmVhbS4KKyAgICAgIC8vIFNlYXJjaCBzdHJlYW0gaW5jbHVkaW5nIGNsb3NlZCBhZ2Fpbi4KKyAgICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgICAgIGlmIChzdHJlYW0pIHsKKyAgICAgICAgaW50IHJ2MjsKKworICAgICAgICBydjIgPSBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbShzdHJlYW0pOworCisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2MikpIHsKKyAgICAgICAgICByZXR1cm4gcnYyOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgLyogQXNzdW1pbmcgc3RyZWFtIGlzIG5vdCBOVUxMICovCisgICAgYXNzZXJ0KHN0cmVhbSk7CisgICAgbmV4dF9yZWFkbWF4ID0gbmdodHRwMl9zZXNzaW9uX25leHRfZGF0YV9yZWFkKHNlc3Npb24sIHN0cmVhbSk7CisKKyAgICBpZiAobmV4dF9yZWFkbWF4ID09IDApIHsKKworICAgICAgLyogVGhpcyBtdXN0IGJlIHRydWUgc2luY2Ugd2Ugb25seSBwb3AgREFUQSBmcmFtZSBpdGVtIGZyb20KKyAgICAgICAgIHF1ZXVlIHdoZW4gc2Vzc2lvbi0+cmVtb3RlX3dpbmRvd19zaXplID4gMCAqLworICAgICAgYXNzZXJ0KHNlc3Npb24tPnJlbW90ZV93aW5kb3dfc2l6ZSA+IDApOworCisgICAgICBydiA9IG5naHR0cDJfc3RyZWFtX2RlZmVyX2l0ZW0oc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfRkxPV19DT05UUk9MKTsKKworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbi0+YW9iLml0ZW0gPSBOVUxMOworICAgICAgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQoJnNlc3Npb24tPmFvYiwgbWVtKTsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9ERUZFUlJFRDsKKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9wYWNrX2RhdGEoc2Vzc2lvbiwgJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfcmVhZG1heCwgZnJhbWUsICZpdGVtLT5hdXhfZGF0YS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0pOworICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9QQVVTRSkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfREVGRVJSRUQpIHsKKyAgICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fZGVmZXJfaXRlbShzdHJlYW0sIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfVVNFUik7CisKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIHNlc3Npb24tPmFvYi5pdGVtID0gTlVMTDsKKyAgICAgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KCZzZXNzaW9uLT5hb2IsIG1lbSk7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfREVGRVJSRUQ7CisgICAgfQorICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSB7CisgICAgICBydiA9IG5naHR0cDJfc3RyZWFtX2RldGFjaF9pdGVtKHN0cmVhbSk7CisKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIGludCBydjI7CisKKyAgICAgIHJ2MiA9IG5naHR0cDJfc3RyZWFtX2RldGFjaF9pdGVtKHN0cmVhbSk7CisKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2MikpIHsKKyAgICAgICAgcmV0dXJuIHJ2MjsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorICBjYXNlIE5HSFRUUDJfSEVBREVSUzogeworICAgIG5naHR0cDJfaGVhZGVyc19hdXhfZGF0YSAqYXV4X2RhdGE7CisgICAgc2l6ZV90IGVzdGltYXRlZF9wYXlsb2FkbGVuOworCisgICAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuaGVhZGVyczsKKworICAgIGlmIChmcmFtZS0+aGVhZGVycy5jYXQgPT0gTkdIVFRQMl9IQ0FUX1JFUVVFU1QpIHsKKyAgICAgIC8qIGluaXRpYWwgSEVBREVSUywgd2hpY2ggb3BlbnMgc3RyZWFtICovCisgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgICAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0oCisgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCwgTkdIVFRQMl9TVFJFQU1fRkxBR19OT05FLAorICAgICAgICAgICZmcmFtZS0+aGVhZGVycy5wcmlfc3BlYywgTkdIVFRQMl9TVFJFQU1fSU5JVElBTCwKKyAgICAgICAgICBhdXhfZGF0YS0+c3RyZWFtX3VzZXJfZGF0YSk7CisKKyAgICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgICB9CisKKyAgICAgIC8qIFdlIGRvbid0IGNhbGwgbmdodHRwMl9zZXNzaW9uX2FkanVzdF9jbG9zZWRfc3RyZWFtKCkgaGVyZSwKKyAgICAgICAgIHNpbmNlIHdlIGRvbid0IGtlZXAgY2xvc2VkIHN0cmVhbSBpbiBjbGllbnQgc2lkZSAqLworCisgICAgICBydiA9IHNlc3Npb25fcHJlZGljYXRlX3JlcXVlc3RfaGVhZGVyc19zZW5kKHNlc3Npb24sIGl0ZW0pOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBpZiAoc2Vzc2lvbl9lbmZvcmNlX2h0dHBfbWVzc2FnaW5nKHNlc3Npb24pKSB7CisgICAgICAgIG5naHR0cDJfaHR0cF9yZWNvcmRfcmVxdWVzdF9tZXRob2Qoc3RyZWFtLCBmcmFtZSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworCisgICAgICBpZiAoc3RyZWFtICYmIHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQpIHsKKyAgICAgICAgcnYgPSBzZXNzaW9uX3ByZWRpY2F0ZV9wdXNoX3Jlc3BvbnNlX2hlYWRlcnNfc2VuZChzZXNzaW9uLCBzdHJlYW0pOworICAgICAgICBpZiAocnYgPT0gMCkgeworICAgICAgICAgIGZyYW1lLT5oZWFkZXJzLmNhdCA9IE5HSFRUUDJfSENBVF9QVVNIX1JFU1BPTlNFOworCisgICAgICAgICAgaWYgKGF1eF9kYXRhLT5zdHJlYW1fdXNlcl9kYXRhKSB7CisgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV91c2VyX2RhdGEgPSBhdXhfZGF0YS0+c3RyZWFtX3VzZXJfZGF0YTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbl9wcmVkaWNhdGVfcmVzcG9uc2VfaGVhZGVyc19zZW5kKHNlc3Npb24sIHN0cmVhbSkgPT0KKyAgICAgICAgICAgICAgICAgMCkgeworICAgICAgICBmcmFtZS0+aGVhZGVycy5jYXQgPSBOR0hUVFAyX0hDQVRfUkVTUE9OU0U7CisgICAgICAgIHJ2ID0gMDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGZyYW1lLT5oZWFkZXJzLmNhdCA9IE5HSFRUUDJfSENBVF9IRUFERVJTOworCisgICAgICAgIHJ2ID0gc2Vzc2lvbl9wcmVkaWNhdGVfaGVhZGVyc19zZW5kKHNlc3Npb24sIHN0cmVhbSk7CisgICAgICB9CisKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlc3RpbWF0ZWRfcGF5bG9hZGxlbiA9IHNlc3Npb25fZXN0aW1hdGVfaGVhZGVyc19wYXlsb2FkKAorICAgICAgICBzZXNzaW9uLCBmcmFtZS0+aGVhZGVycy5udmEsIGZyYW1lLT5oZWFkZXJzLm52bGVuLAorICAgICAgICBOR0hUVFAyX1BSSU9SSVRZX1NQRUNMRU4pOworCisgICAgaWYgKGVzdGltYXRlZF9wYXlsb2FkbGVuID4gc2Vzc2lvbi0+bWF4X3NlbmRfaGVhZGVyX2Jsb2NrX2xlbmd0aCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0ZSQU1FX1NJWkVfRVJST1I7CisgICAgfQorCisgICAgcnYgPSBuZ2h0dHAyX2ZyYW1lX3BhY2tfaGVhZGVycygmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcywgJmZyYW1lLT5oZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3Npb24tPmhkX2RlZmxhdGVyKTsKKworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgREVCVUdGKCJzZW5kOiBiZWZvcmUgcGFkZGluZywgSEVBREVSUyBzZXJpYWxpemVkIGluICV6ZCBieXRlc1xuIiwKKyAgICAgICAgICAgbmdodHRwMl9idWZzX2xlbigmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcykpOworCisgICAgcnYgPSBzZXNzaW9uX2hlYWRlcnNfYWRkX3BhZChzZXNzaW9uLCBmcmFtZSk7CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIERFQlVHRigic2VuZDogSEVBREVSUyBmaW5hbGx5IHNlcmlhbGl6ZWQgaW4gJXpkIGJ5dGVzXG4iLAorICAgICAgICAgICBuZ2h0dHAyX2J1ZnNfbGVuKCZzZXNzaW9uLT5hb2IuZnJhbWVidWZzKSk7CisKKyAgICBpZiAoZnJhbWUtPmhlYWRlcnMuY2F0ID09IE5HSFRUUDJfSENBVF9SRVFVRVNUKSB7CisgICAgICBhc3NlcnQoc2Vzc2lvbi0+bGFzdF9zZW50X3N0cmVhbV9pZCA8IGZyYW1lLT5oZC5zdHJlYW1faWQpOworICAgICAgc2Vzc2lvbi0+bGFzdF9zZW50X3N0cmVhbV9pZCA9IGZyYW1lLT5oZC5zdHJlYW1faWQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKyAgY2FzZSBOR0hUVFAyX1BSSU9SSVRZOiB7CisgICAgaWYgKHNlc3Npb25faXNfY2xvc2luZyhzZXNzaW9uKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORzsKKyAgICB9CisgICAgLyogUFJJT1JJVFkgZnJhbWUgY2FuIGJlIHNlbnQgYXQgYW55IHRpbWUgYW5kIHRvIGFueSBzdHJlYW0KKyAgICAgICBJRC4gKi8KKyAgICBuZ2h0dHAyX2ZyYW1lX3BhY2tfcHJpb3JpdHkoJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMsICZmcmFtZS0+cHJpb3JpdHkpOworCisgICAgLyogUGVlciBjYW4gc2VuZCBQUklPUklUWSBmcmFtZSBhZ2FpbnN0IGlkbGUgc3RyZWFtIHRvIGNyZWF0ZQorICAgICAgICJhbmNob3IiIGluIGRlcGVuZGVuY3kgdHJlZS4gIE9ubHkgY2xpZW50IGNhbiBkbyB0aGlzIGluCisgICAgICAgbmdodHRwMi4gIEluIG5naHR0cDIsIG9ubHkgc2VydmVyIHJldGFpbnMgbm9uLWFjdGl2ZSAoY2xvc2VkCisgICAgICAgb3IgaWRsZSkgc3RyZWFtcyBpbiBtZW1vcnksIHNvIHdlIGRvbid0IG9wZW4gc3RyZWFtIGhlcmUuICovCisgICAgcmV0dXJuIDA7CisgIH0KKyAgY2FzZSBOR0hUVFAyX1JTVF9TVFJFQU06CisgICAgaWYgKHNlc3Npb25faXNfY2xvc2luZyhzZXNzaW9uKSkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORzsKKyAgICB9CisgICAgbmdodHRwMl9mcmFtZV9wYWNrX3JzdF9zdHJlYW0oJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMsICZmcmFtZS0+cnN0X3N0cmVhbSk7CisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HUzogeworICAgIGlmIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfQUNLKSB7CisgICAgICBhc3NlcnQoc2Vzc2lvbi0+b2JxX2Zsb29kX2NvdW50ZXJfID4gMCk7CisgICAgICAtLXNlc3Npb24tPm9icV9mbG9vZF9jb3VudGVyXzsKKyAgICAgIC8qIFdoZW4gc2Vzc2lvbiBpcyBhYm91dCB0byBjbG9zZSwgZG9uJ3Qgc2VuZCBTRVRUSU5HUyBBQ0suCisgICAgICAgICBXZSBhcmUgcmVxdWlyZWQgdG8gc2VuZCBTRVRUSU5HUyB3aXRob3V0IEFDSyB0aG91Z2g7IGZvcgorICAgICAgICAgZXhhbXBsZSwgd2UgaGF2ZSB0byBzZW5kIFNFVFRJTkdTIGFzIGEgcGFydCBvZiBjb25uZWN0aW9uCisgICAgICAgICBwcmVmYWNlLiAqLworICAgICAgaWYgKHNlc3Npb25faXNfY2xvc2luZyhzZXNzaW9uKSkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfU0VTU0lPTl9DTE9TSU5HOworICAgICAgfQorICAgIH0KKworICAgIHJ2ID0gbmdodHRwMl9mcmFtZV9wYWNrX3NldHRpbmdzKCZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLCAmZnJhbWUtPnNldHRpbmdzKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorICBjYXNlIE5HSFRUUDJfUFVTSF9QUk9NSVNFOiB7CisgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgICBzaXplX3QgZXN0aW1hdGVkX3BheWxvYWRsZW47CisKKyAgICAvKiBzdHJlYW0gY291bGQgYmUgTlVMTCBpZiBhc3NvY2lhdGVkIHN0cmVhbSB3YXMgYWxyZWFkeQorICAgICAgIGNsb3NlZC4gKi8KKyAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKworICAgIC8qIHByZWRpY2F0ZSBzaG91bGQgZmFpbCBpZiBzdHJlYW0gaXMgTlVMTC4gKi8KKyAgICBydiA9IHNlc3Npb25fcHJlZGljYXRlX3B1c2hfcHJvbWlzZV9zZW5kKHNlc3Npb24sIHN0cmVhbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICBhc3NlcnQoc3RyZWFtKTsKKworICAgIGVzdGltYXRlZF9wYXlsb2FkbGVuID0gc2Vzc2lvbl9lc3RpbWF0ZV9oZWFkZXJzX3BheWxvYWQoCisgICAgICAgIHNlc3Npb24sIGZyYW1lLT5wdXNoX3Byb21pc2UubnZhLCBmcmFtZS0+cHVzaF9wcm9taXNlLm52bGVuLCAwKTsKKworICAgIGlmIChlc3RpbWF0ZWRfcGF5bG9hZGxlbiA+IHNlc3Npb24tPm1heF9zZW5kX2hlYWRlcl9ibG9ja19sZW5ndGgpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SOworICAgIH0KKworICAgIHJ2ID0gbmdodHRwMl9mcmFtZV9wYWNrX3B1c2hfcHJvbWlzZSgKKyAgICAgICAgJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMsICZmcmFtZS0+cHVzaF9wcm9taXNlLCAmc2Vzc2lvbi0+aGRfZGVmbGF0ZXIpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICAgIHJ2ID0gc2Vzc2lvbl9oZWFkZXJzX2FkZF9wYWQoc2Vzc2lvbiwgZnJhbWUpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgYXNzZXJ0KHNlc3Npb24tPmxhc3Rfc2VudF9zdHJlYW1faWQgKyAyIDw9CisgICAgICAgICAgIGZyYW1lLT5wdXNoX3Byb21pc2UucHJvbWlzZWRfc3RyZWFtX2lkKTsKKyAgICBzZXNzaW9uLT5sYXN0X3NlbnRfc3RyZWFtX2lkID0gZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQ7CisKKyAgICByZXR1cm4gMDsKKyAgfQorICBjYXNlIE5HSFRUUDJfUElORzoKKyAgICBpZiAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0FDSykgeworICAgICAgYXNzZXJ0KHNlc3Npb24tPm9icV9mbG9vZF9jb3VudGVyXyA+IDApOworICAgICAgLS1zZXNzaW9uLT5vYnFfZmxvb2RfY291bnRlcl87CisgICAgfQorICAgIC8qIFBJTkcgZnJhbWUgaXMgYWxsb3dlZCB0byBiZSBzZW50IHVubGVzcyB0ZXJtaW5hdGlvbiBHT0FXQVkgaXMKKyAgICAgICBzZW50ICovCisgICAgaWYgKHNlc3Npb24tPmdvYXdheV9mbGFncyAmIE5HSFRUUDJfR09BV0FZX1RFUk1fT05fU0VORCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORzsKKyAgICB9CisgICAgbmdodHRwMl9mcmFtZV9wYWNrX3BpbmcoJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMsICZmcmFtZS0+cGluZyk7CisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9HT0FXQVk6CisgICAgcnYgPSBuZ2h0dHAyX2ZyYW1lX3BhY2tfZ29hd2F5KCZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLCAmZnJhbWUtPmdvYXdheSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgc2Vzc2lvbi0+bG9jYWxfbGFzdF9zdHJlYW1faWQgPSBmcmFtZS0+Z29hd2F5Lmxhc3Rfc3RyZWFtX2lkOworCisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9XSU5ET1dfVVBEQVRFOgorICAgIHJ2ID0gc2Vzc2lvbl9wcmVkaWNhdGVfd2luZG93X3VwZGF0ZV9zZW5kKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICAgIG5naHR0cDJfZnJhbWVfcGFja193aW5kb3dfdXBkYXRlKCZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZS0+d2luZG93X3VwZGF0ZSk7CisgICAgcmV0dXJuIDA7CisgIGNhc2UgTkdIVFRQMl9DT05USU5VQVRJT046CisgICAgLyogV2UgbmV2ZXIgaGFuZGxlIENPTlRJTlVBVElPTiBoZXJlLiAqLworICAgIGFzc2VydCgwKTsKKyAgICByZXR1cm4gMDsKKyAgZGVmYXVsdDogeworICAgIG5naHR0cDJfZXh0X2F1eF9kYXRhICphdXhfZGF0YTsKKworICAgIC8qIGV4dGVuc2lvbiBmcmFtZSAqLworCisgICAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuZXh0OworCisgICAgaWYgKGF1eF9kYXRhLT5idWlsdGluID09IDApIHsKKyAgICAgIGlmIChzZXNzaW9uX2lzX2Nsb3Npbmcoc2Vzc2lvbikpIHsKKyAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1NFU1NJT05fQ0xPU0lORzsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHNlc3Npb25fcGFja19leHRlbnNpb24oc2Vzc2lvbiwgJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMsIGZyYW1lKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGZyYW1lLT5oZC50eXBlKSB7CisgICAgY2FzZSBOR0hUVFAyX0FMVFNWQzoKKyAgICAgIHJ2ID0gc2Vzc2lvbl9wcmVkaWNhdGVfYWx0c3ZjX3NlbmQoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIG5naHR0cDJfZnJhbWVfcGFja19hbHRzdmMoJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnMsICZmcmFtZS0+ZXh0KTsKKworICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBOR0hUVFAyX09SSUdJTjoKKyAgICAgIHJ2ID0gc2Vzc2lvbl9wcmVkaWNhdGVfb3JpZ2luX3NlbmQoc2Vzc2lvbik7CisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIHJ2ID0gbmdodHRwMl9mcmFtZV9wYWNrX29yaWdpbigmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcywgJmZyYW1lLT5leHQpOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICByZXR1cm4gMDsKKyAgICBkZWZhdWx0OgorICAgICAgLyogVW5yZWFjaGFibGUgaGVyZSAqLworICAgICAgYXNzZXJ0KDApOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIH0KK30KKworbmdodHRwMl9vdXRib3VuZF9pdGVtICoKK25naHR0cDJfc2Vzc2lvbl9nZXRfbmV4dF9vYl9pdGVtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpZiAobmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3VyZ2VudCkpIHsKKyAgICByZXR1cm4gbmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3VyZ2VudCk7CisgIH0KKworICBpZiAobmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3JlZykpIHsKKyAgICByZXR1cm4gbmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3JlZyk7CisgIH0KKworICBpZiAoIXNlc3Npb25faXNfb3V0Z29pbmdfY29uY3VycmVudF9zdHJlYW1zX21heChzZXNzaW9uKSkgeworICAgIGlmIChuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcCgmc2Vzc2lvbi0+b2Jfc3luKSkgeworICAgICAgcmV0dXJuIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl9zeW4pOworICAgIH0KKyAgfQorCisgIGlmIChzZXNzaW9uLT5yZW1vdGVfd2luZG93X3NpemUgPiAwKSB7CisgICAgcmV0dXJuIG5naHR0cDJfc3RyZWFtX25leHRfb3V0Ym91bmRfaXRlbSgmc2Vzc2lvbi0+cm9vdCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworbmdodHRwMl9vdXRib3VuZF9pdGVtICoKK25naHR0cDJfc2Vzc2lvbl9wb3BfbmV4dF9vYl9pdGVtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisKKyAgaXRlbSA9IG5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl91cmdlbnQpOworICBpZiAoaXRlbSkgeworICAgIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfcG9wKCZzZXNzaW9uLT5vYl91cmdlbnQpOworICAgIGl0ZW0tPnF1ZXVlZCA9IDA7CisgICAgcmV0dXJuIGl0ZW07CisgIH0KKworICBpdGVtID0gbmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3JlZyk7CisgIGlmIChpdGVtKSB7CisgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9wb3AoJnNlc3Npb24tPm9iX3JlZyk7CisgICAgaXRlbS0+cXVldWVkID0gMDsKKyAgICByZXR1cm4gaXRlbTsKKyAgfQorCisgIGlmICghc2Vzc2lvbl9pc19vdXRnb2luZ19jb25jdXJyZW50X3N0cmVhbXNfbWF4KHNlc3Npb24pKSB7CisgICAgaXRlbSA9IG5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl9zeW4pOworICAgIGlmIChpdGVtKSB7CisgICAgICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3BvcCgmc2Vzc2lvbi0+b2Jfc3luKTsKKyAgICAgIGl0ZW0tPnF1ZXVlZCA9IDA7CisgICAgICByZXR1cm4gaXRlbTsKKyAgICB9CisgIH0KKworICBpZiAoc2Vzc2lvbi0+cmVtb3RlX3dpbmRvd19zaXplID4gMCkgeworICAgIHJldHVybiBuZ2h0dHAyX3N0cmVhbV9uZXh0X291dGJvdW5kX2l0ZW0oJnNlc3Npb24tPnJvb3QpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9jYWxsX2JlZm9yZV9mcmFtZV9zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydjsKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5iZWZvcmVfZnJhbWVfc2VuZF9jYWxsYmFjaykgeworICAgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLmJlZm9yZV9mcmFtZV9zZW5kX2NhbGxiYWNrKHNlc3Npb24sIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0NBTkNFTCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpbnQgcnY7CisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fZnJhbWVfc2VuZF9jYWxsYmFjaykgeworICAgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ZyYW1lX3NlbmRfY2FsbGJhY2soc2Vzc2lvbiwgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT51c2VyX2RhdGEpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9zdHJlYW1fb25fZ29hd2F5X2Z1bmMobmdodHRwMl9tYXBfZW50cnkgKmVudHJ5LCB2b2lkICpwdHIpIHsKKyAgbmdodHRwMl9jbG9zZV9zdHJlYW1fb25fZ29hd2F5X2FyZyAqYXJnOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIGFyZyA9IChuZ2h0dHAyX2Nsb3NlX3N0cmVhbV9vbl9nb2F3YXlfYXJnICopcHRyOworICBzdHJlYW0gPSAobmdodHRwMl9zdHJlYW0gKillbnRyeTsKKworICBpZiAobmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChhcmctPnNlc3Npb24sIHN0cmVhbS0+c3RyZWFtX2lkKSkgeworICAgIGlmIChhcmctPmluY29taW5nKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0gZWxzZSBpZiAoIWFyZy0+aW5jb21pbmcpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChzdHJlYW0tPnN0YXRlICE9IE5HSFRUUDJfU1RSRUFNX0lETEUgJiYKKyAgICAgIChzdHJlYW0tPmZsYWdzICYgTkdIVFRQMl9TVFJFQU1fRkxBR19DTE9TRUQpID09IDAgJiYKKyAgICAgIHN0cmVhbS0+c3RyZWFtX2lkID4gYXJnLT5sYXN0X3N0cmVhbV9pZCkgeworICAgIC8qIFdlIGFyZSBjb2xsZWN0aW5nIHN0cmVhbXMgdG8gY2xvc2UgYmVjYXVzZSB3ZSBjYW5ub3QgY2FsbAorICAgICAgIG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW0oKSBpbnNpZGUgbmdodHRwMl9tYXBfZWFjaCgpLgorICAgICAgIFJldXNlIGNsb3NlZF9uZXh0IG1lbWJlci4uIGJhZCBjaG9pY2U/ICovCisgICAgYXNzZXJ0KHN0cmVhbS0+Y2xvc2VkX25leHQgPT0gTlVMTCk7CisgICAgYXNzZXJ0KHN0cmVhbS0+Y2xvc2VkX3ByZXYgPT0gTlVMTCk7CisKKyAgICBpZiAoYXJnLT5oZWFkKSB7CisgICAgICBzdHJlYW0tPmNsb3NlZF9uZXh0ID0gYXJnLT5oZWFkOworICAgICAgYXJnLT5oZWFkID0gc3RyZWFtOworICAgIH0gZWxzZSB7CisgICAgICBhcmctPmhlYWQgPSBzdHJlYW07CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIENsb3NlcyBub24taWRsZSBhbmQgbm9uLWNsb3NlZCBzdHJlYW1zIHdob3NlIHN0cmVhbSBJRCA+CisgICBsYXN0X3N0cmVhbV9pZC4gIElmIGluY29taW5nIGlzIG5vbnplcm8sIHdlIGFyZSBnb2luZyB0byBjbG9zZQorICAgaW5jb21pbmcgc3RyZWFtcy4gIE90aGVyd2lzZSwgY2xvc2Ugb3V0Z29pbmcgc3RyZWFtcy4gKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9jbG9zZV9zdHJlYW1fb25fZ29hd2F5KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGFzdF9zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5jb21pbmcpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCAqbmV4dF9zdHJlYW07CisgIG5naHR0cDJfY2xvc2Vfc3RyZWFtX29uX2dvYXdheV9hcmcgYXJnID0ge3Nlc3Npb24sIE5VTEwsIGxhc3Rfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWluZ307CisKKyAgcnYgPSBuZ2h0dHAyX21hcF9lYWNoKCZzZXNzaW9uLT5zdHJlYW1zLCBmaW5kX3N0cmVhbV9vbl9nb2F3YXlfZnVuYywgJmFyZyk7CisgIGFzc2VydChydiA9PSAwKTsKKworICBzdHJlYW0gPSBhcmcuaGVhZDsKKyAgd2hpbGUgKHN0cmVhbSkgeworICAgIG5leHRfc3RyZWFtID0gc3RyZWFtLT5jbG9zZWRfbmV4dDsKKyAgICBzdHJlYW0tPmNsb3NlZF9uZXh0ID0gTlVMTDsKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfUkVGVVNFRF9TVFJFQU0pOworCisgICAgLyogc3RyZWFtIG1heSBiZSBkZWxldGVkIGhlcmUgKi8KKworICAgIHN0cmVhbSA9IG5leHRfc3RyZWFtOworCisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAvKiBDbGVhbiB1cCBjbG9zZWRfbmV4dCBtZW1iZXIganVzdCBpbiBjYXNlICovCisgICAgICB3aGlsZSAoc3RyZWFtKSB7CisgICAgICAgIG5leHRfc3RyZWFtID0gc3RyZWFtLT5jbG9zZWRfbmV4dDsKKyAgICAgICAgc3RyZWFtLT5jbG9zZWRfbmV4dCA9IE5VTEw7CisgICAgICAgIHN0cmVhbSA9IG5leHRfc3RyZWFtOworICAgICAgfQorICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZXNjaGVkdWxlX3N0cmVhbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHN0cmVhbS0+bGFzdF93cml0ZWxlbiA9IHN0cmVhbS0+aXRlbS0+ZnJhbWUuaGQubGVuZ3RoOworCisgIG5naHR0cDJfc3RyZWFtX3Jlc2NoZWR1bGUoc3RyZWFtKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3VwZGF0ZV9zdHJlYW1fY29uc3VtZWRfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkZWx0YV9zaXplKTsKKworc3RhdGljIGludCBzZXNzaW9uX3VwZGF0ZV9jb25uZWN0aW9uX2NvbnN1bWVkX3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhX3NpemUpOworCitzdGF0aWMgaW50IHNlc3Npb25fdXBkYXRlX3JlY3ZfY29ubmVjdGlvbl93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVsdGFfc2l6ZSk7CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl91cGRhdGVfcmVjdl9zdHJlYW1fd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVsdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlbmRfd2luZG93X3VwZGF0ZSk7CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgYSBmcmFtZSBpcyBzZW50LiAgVGhpcyBmdW5jdGlvbiBydW5zCisgKiBvbl9mcmFtZV9zZW5kX2NhbGxiYWNrIGFuZCBoYW5kbGVzIHN0cmVhbSBjbG9zdXJlIHVwb24gRU5EX1NUUkVBTQorICogb3IgUlNUX1NUUkVBTS4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgc2Vzc2lvbi0+YW9iLiAgSXQgaXMgYQorICogcmVzcG9uc2liaWxpdHkgb2Ygc2Vzc2lvbl9hZnRlcl9mcmFtZV9zZW50Mi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICovCitzdGF0aWMgaW50IHNlc3Npb25fYWZ0ZXJfZnJhbWVfc2VudDEobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9hY3RpdmVfb3V0Ym91bmRfaXRlbSAqYW9iID0gJnNlc3Npb24tPmFvYjsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtID0gYW9iLT5pdGVtOworICBuZ2h0dHAyX2J1ZnMgKmZyYW1lYnVmcyA9ICZhb2ItPmZyYW1lYnVmczsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisKKyAgaWYgKGZyYW1lLT5oZC50eXBlID09IE5HSFRUUDJfREFUQSkgeworICAgIG5naHR0cDJfZGF0YV9hdXhfZGF0YSAqYXV4X2RhdGE7CisKKyAgICBhdXhfZGF0YSA9ICZpdGVtLT5hdXhfZGF0YS5kYXRhOworCisgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgICAgLyogV2UgdXBkYXRlIGZsb3cgY29udHJvbCB3aW5kb3cgYWZ0ZXIgYSBmcmFtZSB3YXMgY29tcGxldGVseQorICAgICAgIHNlbnQuIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB3ZSBjaG9vc2UgcGF5bG9hZCBsZW5ndGggbm90IHRvCisgICAgICAgZXhjZWVkIHRoZSB3aW5kb3cgKi8KKyAgICBzZXNzaW9uLT5yZW1vdGVfd2luZG93X3NpemUgLT0gKGludDMyX3QpZnJhbWUtPmhkLmxlbmd0aDsKKyAgICBpZiAoc3RyZWFtKSB7CisgICAgICBzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSAtPSAoaW50MzJfdClmcmFtZS0+aGQubGVuZ3RoOworICAgIH0KKworICAgIGlmIChzdHJlYW0gJiYgYXV4X2RhdGEtPmVvZikgeworICAgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbShzdHJlYW0pOworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgLyogQ2FsbCBvbl9mcmFtZV9zZW5kX2NhbGxiYWNrIGFmdGVyCisgICAgICAgICBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbSgpLCBzbyB0aGF0IGFwcGxpY2F0aW9uIGNhbiBpc3N1ZQorICAgICAgICAgbmdodHRwMl9zdWJtaXRfZGF0YSgpIGluIHRoZSBjYWxsYmFjay4gKi8KKyAgICAgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fZnJhbWVfc2VuZF9jYWxsYmFjaykgeworICAgICAgICBydiA9IHNlc3Npb25fY2FsbF9vbl9mcmFtZV9zZW5kKHNlc3Npb24sIGZyYW1lKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkgeworICAgICAgICBpbnQgc3RyZWFtX2Nsb3NlZDsKKworICAgICAgICBzdHJlYW1fY2xvc2VkID0KKyAgICAgICAgICAgIChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfUkRXUikgPT0gTkdIVFRQMl9TSFVUX1JEV1I7CisKKyAgICAgICAgbmdodHRwMl9zdHJlYW1fc2h1dGRvd24oc3RyZWFtLCBOR0hUVFAyX1NIVVRfV1IpOworCisgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbV9pZl9zaHV0X3Jkd3Ioc2Vzc2lvbiwgc3RyZWFtKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisgICAgICAgIC8qIHN0cmVhbSBtYXkgYmUgTlVMTCBpZiBpdCB3YXMgY2xvc2VkICovCisgICAgICAgIGlmIChzdHJlYW1fY2xvc2VkKSB7CisgICAgICAgICAgc3RyZWFtID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9mcmFtZV9zZW5kX2NhbGxiYWNrKSB7CisgICAgICBydiA9IHNlc3Npb25fY2FsbF9vbl9mcmFtZV9zZW5kKHNlc3Npb24sIGZyYW1lKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBub24tREFUQSBmcmFtZSAqLworCisgIGlmIChmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX0hFQURFUlMgfHwKKyAgICAgIGZyYW1lLT5oZC50eXBlID09IE5HSFRUUDJfUFVTSF9QUk9NSVNFKSB7CisgICAgaWYgKG5naHR0cDJfYnVmc19uZXh0X3ByZXNlbnQoZnJhbWVidWZzKSkgeworICAgICAgREVCVUdGKCJzZW5kOiBDT05USU5VQVRJT04gZXhpc3RzLCBqdXN0IHJldHVyblxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcnYgPSBzZXNzaW9uX2NhbGxfb25fZnJhbWVfc2VuZChzZXNzaW9uLCBmcmFtZSk7CisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorICBzd2l0Y2ggKGZyYW1lLT5oZC50eXBlKSB7CisgIGNhc2UgTkdIVFRQMl9IRUFERVJTOiB7CisgICAgbmdodHRwMl9oZWFkZXJzX2F1eF9kYXRhICphdXhfZGF0YTsKKworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICAgIGlmICghc3RyZWFtKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGZyYW1lLT5oZWFkZXJzLmNhdCkgeworICAgIGNhc2UgTkdIVFRQMl9IQ0FUX1JFUVVFU1Q6IHsKKyAgICAgIHN0cmVhbS0+c3RhdGUgPSBOR0hUVFAyX1NUUkVBTV9PUEVOSU5HOworICAgICAgaWYgKGZyYW1lLT5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNKSB7CisgICAgICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1dSKTsKKyAgICAgIH0KKyAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbV9pZl9zaHV0X3Jkd3Ioc2Vzc2lvbiwgc3RyZWFtKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgICAvKiBXZSBhc3N1bWUgYXV4X2RhdGEgaXMgYSBwb2ludGVyIHRvIG5naHR0cDJfaGVhZGVyc19hdXhfZGF0YSAqLworICAgICAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuaGVhZGVyczsKKyAgICAgIGlmIChhdXhfZGF0YS0+ZGF0YV9wcmQucmVhZF9jYWxsYmFjaykgeworICAgICAgICAvKiBuZ2h0dHAyX3N1Ym1pdF9kYXRhKCkgbWFrZXMgYSBjb3B5IG9mIGF1eF9kYXRhLT5kYXRhX3ByZCAqLworICAgICAgICBydiA9IG5naHR0cDJfc3VibWl0X2RhdGEoc2Vzc2lvbiwgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+aGQuc3RyZWFtX2lkLCAmYXV4X2RhdGEtPmRhdGFfcHJkKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisgICAgICAgIC8qIFRPRE8gbmdodHRwMl9zdWJtaXRfZGF0YSgpIG1heSBmYWlsIGlmIHN0cmVhbSBoYXMgYWxyZWFkeQorICAgICAgICAgICBEQVRBIGZyYW1lIGl0ZW0uICBXZSBtaWdodCBoYXZlIHRvIGhhbmRsZSBpdCBoZXJlLiAqLworICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGNhc2UgTkdIVFRQMl9IQ0FUX1BVU0hfUkVTUE9OU0U6CisgICAgICBzdHJlYW0tPmZsYWdzID0gKHVpbnQ4X3QpKHN0cmVhbS0+ZmxhZ3MgJiB+TkdIVFRQMl9TVFJFQU1fRkxBR19QVVNIKTsKKyAgICAgICsrc2Vzc2lvbi0+bnVtX291dGdvaW5nX3N0cmVhbXM7CisgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBOR0hUVFAyX0hDQVRfUkVTUE9OU0U6CisgICAgICBzdHJlYW0tPnN0YXRlID0gTkdIVFRQMl9TVFJFQU1fT1BFTkVEOworICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgTkdIVFRQMl9IQ0FUX0hFQURFUlM6CisgICAgICBpZiAoZnJhbWUtPmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU0pIHsKKyAgICAgICAgbmdodHRwMl9zdHJlYW1fc2h1dGRvd24oc3RyZWFtLCBOR0hUVFAyX1NIVVRfV1IpOworICAgICAgfQorICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtX2lmX3NodXRfcmR3cihzZXNzaW9uLCBzdHJlYW0pOworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICAgIC8qIFdlIGFzc3VtZSBhdXhfZGF0YSBpcyBhIHBvaW50ZXIgdG8gbmdodHRwMl9oZWFkZXJzX2F1eF9kYXRhICovCisgICAgICBhdXhfZGF0YSA9ICZpdGVtLT5hdXhfZGF0YS5oZWFkZXJzOworICAgICAgaWYgKGF1eF9kYXRhLT5kYXRhX3ByZC5yZWFkX2NhbGxiYWNrKSB7CisgICAgICAgIHJ2ID0gbmdodHRwMl9zdWJtaXRfZGF0YShzZXNzaW9uLCBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5oZC5zdHJlYW1faWQsICZhdXhfZGF0YS0+ZGF0YV9wcmQpOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKyAgICAgICAgLyogVE9ETyBuZ2h0dHAyX3N1Ym1pdF9kYXRhKCkgbWF5IGZhaWwgaWYgc3RyZWFtIGhhcyBhbHJlYWR5CisgICAgICAgICAgIERBVEEgZnJhbWUgaXRlbS4gIFdlIG1pZ2h0IGhhdmUgdG8gaGFuZGxlIGl0IGhlcmUuICovCisgICAgICB9CisgICAgICByZXR1cm4gMDsKKyAgICBkZWZhdWx0OgorICAgICAgLyogVW5yZWFjaGFibGUgKi8KKyAgICAgIGFzc2VydCgwKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICBjYXNlIE5HSFRUUDJfUFJJT1JJVFk6CisgICAgaWYgKHNlc3Npb24tPnNlcnZlcikgeworICAgICAgcmV0dXJuIDA7CisgICAgICA7CisgICAgfQorCisgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmF3KHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworCisgICAgaWYgKCFzdHJlYW0pIHsKKyAgICAgIGlmICghc2Vzc2lvbl9kZXRlY3RfaWRsZV9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9vcGVuX3N0cmVhbSgKKyAgICAgICAgICBzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkLCBOR0hUVFAyX0ZMQUdfTk9ORSwKKyAgICAgICAgICAmZnJhbWUtPnByaW9yaXR5LnByaV9zcGVjLCBOR0hUVFAyX1NUUkVBTV9JRExFLCBOVUxMKTsKKyAgICAgIGlmICghc3RyZWFtKSB7CisgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fcmVwcmlvcml0aXplX3N0cmVhbShzZXNzaW9uLCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZS0+cHJpb3JpdHkucHJpX3NwZWMpOworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0oc2Vzc2lvbik7CisKKyAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgY2FzZSBOR0hUVFAyX1JTVF9TVFJFQU06CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5yc3Rfc3RyZWFtLmVycm9yX2NvZGUpOworICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgY2FzZSBOR0hUVFAyX0dPQVdBWTogeworICAgIG5naHR0cDJfZ29hd2F5X2F1eF9kYXRhICphdXhfZGF0YTsKKworICAgIGF1eF9kYXRhID0gJml0ZW0tPmF1eF9kYXRhLmdvYXdheTsKKworICAgIGlmICgoYXV4X2RhdGEtPmZsYWdzICYgTkdIVFRQMl9HT0FXQVlfQVVYX1NIVVRET1dOX05PVElDRSkgPT0gMCkgeworCisgICAgICBpZiAoYXV4X2RhdGEtPmZsYWdzICYgTkdIVFRQMl9HT0FXQVlfQVVYX1RFUk1fT05fU0VORCkgeworICAgICAgICBzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgfD0gTkdIVFRQMl9HT0FXQVlfVEVSTV9TRU5UOworICAgICAgfQorCisgICAgICBzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgfD0gTkdIVFRQMl9HT0FXQVlfU0VOVDsKKworICAgICAgcnYgPSBzZXNzaW9uX2Nsb3NlX3N0cmVhbV9vbl9nb2F3YXkoc2Vzc2lvbiwgZnJhbWUtPmdvYXdheS5sYXN0X3N0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworCisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworICB9CisgIGNhc2UgTkdIVFRQMl9XSU5ET1dfVVBEQVRFOgorICAgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDApIHsKKyAgICAgIHNlc3Npb24tPndpbmRvd191cGRhdGVfcXVldWVkID0gMDsKKyAgICAgIGlmIChzZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19XSU5ET1dfVVBEQVRFKSB7CisgICAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfY29ubmVjdGlvbl9jb25zdW1lZF9zaXplKHNlc3Npb24sIDApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9yZWN2X2Nvbm5lY3Rpb25fd2luZG93X3NpemUoc2Vzc2lvbiwgMCk7CisgICAgICB9CisKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICAgIGlmICghc3RyZWFtKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzdHJlYW0tPndpbmRvd191cGRhdGVfcXVldWVkID0gMDsKKworICAgIC8qIFdlIGRvbid0IGhhdmUgdG8gc2VuZCBXSU5ET1dfVVBEQVRFIGlmIEVORF9TVFJFQU0gZnJvbSBwZWVyCisgICAgICAgaXMgc2Vlbi4gKi8KKyAgICBpZiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSkgeworICAgICAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9zdHJlYW1fY29uc3VtZWRfc2l6ZShzZXNzaW9uLCBzdHJlYW0sIDApOworICAgIH0gZWxzZSB7CisgICAgICBydiA9IHNlc3Npb25fdXBkYXRlX3JlY3Zfc3RyZWFtX3dpbmRvd19zaXplKHNlc3Npb24sIHN0cmVhbSwgMCwgMSk7CisgICAgfQorCisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBhIGZyYW1lIGlzIHNlbnQgYW5kIHNlc3Npb25fYWZ0ZXJfZnJhbWVfc2VudDEuICBUaGlzCisgKiBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSB0byByZXNldCBzZXNzaW9uLT5hb2IuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX2FmdGVyX2ZyYW1lX3NlbnQyKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpbnQgcnY7CisgIG5naHR0cDJfYWN0aXZlX291dGJvdW5kX2l0ZW0gKmFvYiA9ICZzZXNzaW9uLT5hb2I7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSA9IGFvYi0+aXRlbTsKKyAgbmdodHRwMl9idWZzICpmcmFtZWJ1ZnMgPSAmYW9iLT5mcmFtZWJ1ZnM7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX21lbSAqbWVtOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBuZ2h0dHAyX2RhdGFfYXV4X2RhdGEgKmF1eF9kYXRhOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworCisgIGlmIChmcmFtZS0+aGQudHlwZSAhPSBOR0hUVFAyX0RBVEEpIHsKKworICAgIGlmIChmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX0hFQURFUlMgfHwKKyAgICAgICAgZnJhbWUtPmhkLnR5cGUgPT0gTkdIVFRQMl9QVVNIX1BST01JU0UpIHsKKworICAgICAgaWYgKG5naHR0cDJfYnVmc19uZXh0X3ByZXNlbnQoZnJhbWVidWZzKSkgeworICAgICAgICBmcmFtZWJ1ZnMtPmN1ciA9IGZyYW1lYnVmcy0+Y3VyLT5uZXh0OworCisgICAgICAgIERFQlVHRigic2VuZDogbmV4dCBDT05USU5VQVRJT04gZnJhbWUsICV6dSBieXRlc1xuIiwKKyAgICAgICAgICAgICAgIG5naHR0cDJfYnVmX2xlbigmZnJhbWVidWZzLT5jdXItPmJ1ZikpOworCisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKworICAgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KCZzZXNzaW9uLT5hb2IsIG1lbSk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIERBVEEgZnJhbWUgKi8KKworICBhdXhfZGF0YSA9ICZpdGVtLT5hdXhfZGF0YS5kYXRhOworCisgIC8qIE9uIEVPRiwgd2UgaGF2ZSBhbHJlYWR5IGRldGFjaGVkIGRhdGEuICBQbGVhc2Ugbm90ZSB0aGF0CisgICAgIGFwcGxpY2F0aW9uIG1heSBpc3N1ZSBuZ2h0dHAyX3N1Ym1pdF9kYXRhKCkgaW4KKyAgICAgb25fZnJhbWVfc2VuZF9jYWxsYmFjayAoY2FsbCBmcm9tIHNlc3Npb25fYWZ0ZXJfZnJhbWVfc2VudDEpLAorICAgICB3aGljaCBhdHRhY2ggZGF0YSB0byBzdHJlYW0uICBXZSBkb24ndCB3YW50IHRvIGRldGFjaCBpdC4gKi8KKyAgaWYgKGF1eF9kYXRhLT5lb2YpIHsKKyAgICBhY3RpdmVfb3V0Ym91bmRfaXRlbV9yZXNldChhb2IsIG1lbSk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIFJlc2V0IG5vX2NvcHkgaGVyZSBiZWNhdXNlIG5leHQgd3JpdGUgbWF5IG5vdCB1c2UgdGhpcy4gKi8KKyAgYXV4X2RhdGEtPm5vX2NvcHkgPSAwOworCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworCisgIC8qIElmIHNlc3Npb24gaXMgY2xvc2VkIG9yIFJTVF9TVFJFQU0gd2FzIHF1ZXVlZCwgd2Ugd29uJ3Qgc2VuZAorICAgICBmdXJ0aGVyIGRhdGEuICovCisgIGlmIChuZ2h0dHAyX3Nlc3Npb25fcHJlZGljYXRlX2RhdGFfc2VuZChzZXNzaW9uLCBzdHJlYW0pICE9IDApIHsKKyAgICBpZiAoc3RyZWFtKSB7CisgICAgICBydiA9IG5naHR0cDJfc3RyZWFtX2RldGFjaF9pdGVtKHN0cmVhbSk7CisKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgfQorCisgICAgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQoYW9iLCBtZW0pOworCisgICAgcmV0dXJuIDA7CisgIH0KKworICBhb2ItPml0ZW0gPSBOVUxMOworICBhY3RpdmVfb3V0Ym91bmRfaXRlbV9yZXNldCgmc2Vzc2lvbi0+YW9iLCBtZW0pOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fY2FsbF9zZW5kX2RhdGEobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2J1ZnMgKmZyYW1lYnVmcykgeworICBpbnQgcnY7CisgIG5naHR0cDJfYnVmICpidWY7CisgIHNpemVfdCBsZW5ndGg7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX2RhdGFfYXV4X2RhdGEgKmF1eF9kYXRhOworCisgIGJ1ZiA9ICZmcmFtZWJ1ZnMtPmN1ci0+YnVmOworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKyAgbGVuZ3RoID0gZnJhbWUtPmhkLmxlbmd0aCAtIGZyYW1lLT5kYXRhLnBhZGxlbjsKKyAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuZGF0YTsKKworICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5zZW5kX2RhdGFfY2FsbGJhY2soc2Vzc2lvbiwgZnJhbWUsIGJ1Zi0+cG9zLCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXV4X2RhdGEtPmRhdGFfcHJkLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnVzZXJfZGF0YSk7CisKKyAgc3dpdGNoIChydikgeworICBjYXNlIDA6CisgIGNhc2UgTkdIVFRQMl9FUlJfV09VTERCTE9DSzoKKyAgY2FzZSBOR0hUVFAyX0VSUl9QQVVTRToKKyAgY2FzZSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFOgorICAgIHJldHVybiBydjsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorfQorCitzdGF0aWMgc3NpemVfdCBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmRfaW50ZXJuYWwobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKipkYXRhX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFzdF9jYikgeworICBpbnQgcnY7CisgIG5naHR0cDJfYWN0aXZlX291dGJvdW5kX2l0ZW0gKmFvYjsKKyAgbmdodHRwMl9idWZzICpmcmFtZWJ1ZnM7CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKyAgYW9iID0gJnNlc3Npb24tPmFvYjsKKyAgZnJhbWVidWZzID0gJmFvYi0+ZnJhbWVidWZzOworCisgIC8qIFdlIG1heSBoYXZlIGlkbGUgc3RyZWFtcyBtb3JlIHRoYW4gd2UgZXhwZWN0IChlLmcuLAorICAgICBuZ2h0dHAyX3Nlc3Npb25fY2hhbmdlX3N0cmVhbV9wcmlvcml0eSgpIG9yCisgICAgIG5naHR0cDJfc2Vzc2lvbl9jcmVhdGVfaWRsZV9zdHJlYW0oKSkuICBBZGp1c3QgdGhlbSBoZXJlLiAqLworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0oc2Vzc2lvbik7CisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIGZvciAoOzspIHsKKyAgICBzd2l0Y2ggKGFvYi0+c3RhdGUpIHsKKyAgICBjYXNlIE5HSFRUUDJfT0JfUE9QX0lURU06IHsKKyAgICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKworICAgICAgaXRlbSA9IG5naHR0cDJfc2Vzc2lvbl9wb3BfbmV4dF9vYl9pdGVtKHNlc3Npb24pOworICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgcnYgPSBzZXNzaW9uX3ByZXBfZnJhbWUoc2Vzc2lvbiwgaXRlbSk7CisgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfUEFVU0UpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfREVGRVJSRUQpIHsKKyAgICAgICAgREVCVUdGKCJzZW5kOiBmcmFtZSB0cmFuc21pc3Npb24gZGVmZXJyZWRcbiIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgaW50MzJfdCBvcGVuZWRfc3RyZWFtX2lkID0gMDsKKyAgICAgICAgdWludDMyX3QgZXJyb3JfY29kZSA9IE5HSFRUUDJfSU5URVJOQUxfRVJST1I7CisKKyAgICAgICAgREVCVUdGKCJzZW5kOiBmcmFtZSBwcmVwYXJhdGlvbiBmYWlsZWQgd2l0aCAlc1xuIiwKKyAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZXJyb3IocnYpKTsKKyAgICAgICAgLyogVE9ETyBJZiB0aGUgZXJyb3IgY29tZXMgZnJvbSBjb21wcmVzc29yLCB0aGUgY29ubmVjdGlvbgorICAgICAgICAgICBtdXN0IGJlIGNsb3NlZC4gKi8KKyAgICAgICAgaWYgKGl0ZW0tPmZyYW1lLmhkLnR5cGUgIT0gTkdIVFRQMl9EQVRBICYmCisgICAgICAgICAgICBzZXNzaW9uLT5jYWxsYmFja3Mub25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2sgJiYgaXNfbm9uX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJml0ZW0tPmZyYW1lOworICAgICAgICAgIC8qIFRoZSBsaWJyYXJ5IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhbnNtaXNzaW9uIG9mCisgICAgICAgICAgICAgV0lORE9XX1VQREFURSBmcmFtZSwgc28gd2UgZG9uJ3QgY2FsbCBlcnJvciBjYWxsYmFjayBmb3IKKyAgICAgICAgICAgICBpdC4gKi8KKyAgICAgICAgICBpZiAoZnJhbWUtPmhkLnR5cGUgIT0gTkdIVFRQMl9XSU5ET1dfVVBEQVRFICYmCisgICAgICAgICAgICAgIHNlc3Npb24tPmNhbGxiYWNrcy5vbl9mcmFtZV9ub3Rfc2VuZF9jYWxsYmFjaygKKyAgICAgICAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBydiwgc2Vzc2lvbi0+dXNlcl9kYXRhKSAhPSAwKSB7CisKKyAgICAgICAgICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9mcmVlKGl0ZW0sIG1lbSk7CisgICAgICAgICAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisKKyAgICAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBXZSBoYXZlIHRvIGNsb3NlIHN0cmVhbSBvcGVuZWQgYnkgZmFpbGVkIHJlcXVlc3QgSEVBREVSUworICAgICAgICAgICBvciBQVVNIX1BST01JU0UuICovCisgICAgICAgIHN3aXRjaCAoaXRlbS0+ZnJhbWUuaGQudHlwZSkgeworICAgICAgICBjYXNlIE5HSFRUUDJfSEVBREVSUzoKKyAgICAgICAgICBpZiAoaXRlbS0+ZnJhbWUuaGVhZGVycy5jYXQgPT0gTkdIVFRQMl9IQ0FUX1JFUVVFU1QpIHsKKyAgICAgICAgICAgIG9wZW5lZF9zdHJlYW1faWQgPSBpdGVtLT5mcmFtZS5oZC5zdHJlYW1faWQ7CisgICAgICAgICAgICBpZiAoaXRlbS0+YXV4X2RhdGEuaGVhZGVycy5jYW5jZWxlZCkgeworICAgICAgICAgICAgICBlcnJvcl9jb2RlID0gaXRlbS0+YXV4X2RhdGEuaGVhZGVycy5lcnJvcl9jb2RlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgLyogU2V0IGVycm9yX2NvZGUgdG8gUkVGVVNFRF9TVFJFQU0gc28gdGhhdCBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICBjYW4gc2VuZCByZXF1ZXN0IGFnYWluLiAqLworICAgICAgICAgICAgICBlcnJvcl9jb2RlID0gTkdIVFRQMl9SRUZVU0VEX1NUUkVBTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTkdIVFRQMl9QVVNIX1BST01JU0U6CisgICAgICAgICAgb3BlbmVkX3N0cmVhbV9pZCA9IGl0ZW0tPmZyYW1lLnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZW5lZF9zdHJlYW1faWQpIHsKKyAgICAgICAgICAvKiBjYXJlZnVsIG5vdCB0byBvdmVycmlkZSBydiAqLworICAgICAgICAgIGludCBydjI7CisgICAgICAgICAgcnYyID0gbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbShzZXNzaW9uLCBvcGVuZWRfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSk7CisKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydjIpKSB7CisgICAgICAgICAgICByZXR1cm4gcnYyOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9mcmVlKGl0ZW0sIG1lbSk7CisgICAgICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICAgICAgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQoYW9iLCBtZW0pOworCisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUCkgeworICAgICAgICAgIC8qIElmIGhlYWRlciBjb21wcmVzc2lvbiBlcnJvciBvY2N1cnJlZCwgc2hvdWxkIHRlcm1pbmlhdGUKKyAgICAgICAgICAgICBjb25uZWN0aW9uLiAqLworICAgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBhb2ItPml0ZW0gPSBpdGVtOworCisgICAgICBuZ2h0dHAyX2J1ZnNfcmV3aW5kKGZyYW1lYnVmcyk7CisKKyAgICAgIGlmIChpdGVtLT5mcmFtZS5oZC50eXBlICE9IE5HSFRUUDJfREFUQSkgeworICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKworICAgICAgICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICAgICAgICBERUJVR0YoInNlbmQ6IG5leHQgZnJhbWU6IHBheWxvYWRsZW49JXp1LCB0eXBlPSV1LCBmbGFncz0weCUwMngsICIKKyAgICAgICAgICAgICAgICJzdHJlYW1faWQ9JWRcbiIsCisgICAgICAgICAgICAgICBmcmFtZS0+aGQubGVuZ3RoLCBmcmFtZS0+aGQudHlwZSwgZnJhbWUtPmhkLmZsYWdzLAorICAgICAgICAgICAgICAgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisKKyAgICAgICAgcnYgPSBzZXNzaW9uX2NhbGxfYmVmb3JlX2ZyYW1lX3NlbmQoc2Vzc2lvbiwgZnJhbWUpOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfQ0FOQ0VMKSB7CisgICAgICAgICAgaW50MzJfdCBvcGVuZWRfc3RyZWFtX2lkID0gMDsKKyAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlID0gTkdIVFRQMl9JTlRFUk5BTF9FUlJPUjsKKworICAgICAgICAgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fZnJhbWVfbm90X3NlbmRfY2FsbGJhY2soCisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBydiwgc2Vzc2lvbi0+dXNlcl9kYXRhKSAhPSAwKSB7CisgICAgICAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIC8qIFdlIGhhdmUgdG8gY2xvc2Ugc3RyZWFtIG9wZW5lZCBieSBjYW5jZWxlZCByZXF1ZXN0CisgICAgICAgICAgICAgSEVBREVSUyBvciBQVVNIX1BST01JU0UuICovCisgICAgICAgICAgc3dpdGNoIChpdGVtLT5mcmFtZS5oZC50eXBlKSB7CisgICAgICAgICAgY2FzZSBOR0hUVFAyX0hFQURFUlM6CisgICAgICAgICAgICBpZiAoaXRlbS0+ZnJhbWUuaGVhZGVycy5jYXQgPT0gTkdIVFRQMl9IQ0FUX1JFUVVFU1QpIHsKKyAgICAgICAgICAgICAgb3BlbmVkX3N0cmVhbV9pZCA9IGl0ZW0tPmZyYW1lLmhkLnN0cmVhbV9pZDsKKyAgICAgICAgICAgICAgLyogV2UgZG9uJ3QgaGF2ZSB0byBjaGVjaworICAgICAgICAgICAgICAgICBpdGVtLT5hdXhfZGF0YS5oZWFkZXJzLmNhbmNlbGVkIHNpbmNlIGl0IGhhcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgIGJlZW4gY2hlY2tlZC4gKi8KKyAgICAgICAgICAgICAgLyogU2V0IGVycm9yX2NvZGUgdG8gUkVGVVNFRF9TVFJFQU0gc28gdGhhdCBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICBjYW4gc2VuZCByZXF1ZXN0IGFnYWluLiAqLworICAgICAgICAgICAgICBlcnJvcl9jb2RlID0gTkdIVFRQMl9SRUZVU0VEX1NUUkVBTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTkdIVFRQMl9QVVNIX1BST01JU0U6CisgICAgICAgICAgICBvcGVuZWRfc3RyZWFtX2lkID0gaXRlbS0+ZnJhbWUucHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAob3BlbmVkX3N0cmVhbV9pZCkgeworICAgICAgICAgICAgLyogY2FyZWZ1bCBub3QgdG8gb3ZlcnJpZGUgcnYgKi8KKyAgICAgICAgICAgIGludCBydjI7CisgICAgICAgICAgICBydjIgPSBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtKHNlc3Npb24sIG9wZW5lZF9zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUpOworCisgICAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydjIpKSB7CisgICAgICAgICAgICAgIHJldHVybiBydjI7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQoYW9iLCBtZW0pOworCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHRigic2VuZDogbmV4dCBmcmFtZTogREFUQVxuIik7CisKKyAgICAgICAgaWYgKGl0ZW0tPmF1eF9kYXRhLmRhdGEubm9fY29weSkgeworICAgICAgICAgIGFvYi0+c3RhdGUgPSBOR0hUVFAyX09CX1NFTkRfTk9fQ09QWTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBERUJVR0YoInNlbmQ6IHN0YXJ0IHRyYW5zbWl0dGluZyBmcmFtZSB0eXBlPSV1LCBsZW5ndGg9JXpkXG4iLAorICAgICAgICAgICAgIGZyYW1lYnVmcy0+Y3VyLT5idWYucG9zWzNdLAorICAgICAgICAgICAgIGZyYW1lYnVmcy0+Y3VyLT5idWYubGFzdCAtIGZyYW1lYnVmcy0+Y3VyLT5idWYucG9zKTsKKworICAgICAgYW9iLT5zdGF0ZSA9IE5HSFRUUDJfT0JfU0VORF9EQVRBOworCisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOR0hUVFAyX09CX1NFTkRfREFUQTogeworICAgICAgc2l6ZV90IGRhdGFsZW47CisgICAgICBuZ2h0dHAyX2J1ZiAqYnVmOworCisgICAgICBidWYgPSAmZnJhbWVidWZzLT5jdXItPmJ1ZjsKKworICAgICAgaWYgKGJ1Zi0+cG9zID09IGJ1Zi0+bGFzdCkgeworICAgICAgICBERUJVR0YoInNlbmQ6IGVuZCB0cmFuc21pc3Npb24gb2YgYSBmcmFtZVxuIik7CisKKyAgICAgICAgLyogRnJhbWUgaGFzIGNvbXBsZXRlbHkgc2VudCAqLworICAgICAgICBpZiAoZmFzdF9jYikgeworICAgICAgICAgIHJ2ID0gc2Vzc2lvbl9hZnRlcl9mcmFtZV9zZW50MihzZXNzaW9uKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBydiA9IHNlc3Npb25fYWZ0ZXJfZnJhbWVfc2VudDEoc2Vzc2lvbik7CisgICAgICAgICAgaWYgKHJ2IDwgMCkgeworICAgICAgICAgICAgLyogRkFUQUwgKi8KKyAgICAgICAgICAgIGFzc2VydChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSk7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICAgIHJ2ID0gc2Vzc2lvbl9hZnRlcl9mcmFtZV9zZW50MihzZXNzaW9uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgICAgLyogRkFUQUwgKi8KKyAgICAgICAgICBhc3NlcnQobmdodHRwMl9pc19mYXRhbChydikpOworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorICAgICAgICAvKiBXZSBoYXZlIGFscmVhZHkgYWRqdXN0ZWQgdGhlIG5leHQgc3RhdGUgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgICpkYXRhX3B0ciA9IGJ1Zi0+cG9zOworICAgICAgZGF0YWxlbiA9IG5naHR0cDJfYnVmX2xlbihidWYpOworCisgICAgICAvKiBXZSBpbmNyZW1lbnQgdGhlIG9mZnNldCBoZXJlLiBJZiBzZW5kX2NhbGxiYWNrIGRvZXMgbm90IHNlbmQKKyAgICAgICAgIGV2ZXJ5dGhpbmcsIHdlIHdpbGwgYWRqdXN0IGl0LiAqLworICAgICAgYnVmLT5wb3MgKz0gZGF0YWxlbjsKKworICAgICAgcmV0dXJuIChzc2l6ZV90KWRhdGFsZW47CisgICAgfQorICAgIGNhc2UgTkdIVFRQMl9PQl9TRU5EX05PX0NPUFk6IHsKKyAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgICAgIGludCBwYXVzZTsKKworICAgICAgREVCVUdGKCJzZW5kOiBubyBjb3B5IERBVEFcbiIpOworCisgICAgICBmcmFtZSA9ICZhb2ItPml0ZW0tPmZyYW1lOworCisgICAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgICBERUJVR0YoInNlbmQ6IG5vIGNvcHkgREFUQSBjYW5jZWxsZWQgYmVjYXVzZSBzdHJlYW0gd2FzIGNsb3NlZFxuIik7CisKKyAgICAgICAgYWN0aXZlX291dGJvdW5kX2l0ZW1fcmVzZXQoYW9iLCBtZW0pOworCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBydiA9IHNlc3Npb25fY2FsbF9zZW5kX2RhdGEoc2Vzc2lvbiwgYW9iLT5pdGVtLCBmcmFtZWJ1ZnMpOworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUpIHsKKyAgICAgICAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbShzdHJlYW0pOworCisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfSU5URVJOQUxfRVJST1IpOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBhY3RpdmVfb3V0Ym91bmRfaXRlbV9yZXNldChhb2IsIG1lbSk7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9XT1VMREJMT0NLKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBwYXVzZSA9IChydiA9PSBOR0hUVFAyX0VSUl9QQVVTRSk7CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl9hZnRlcl9mcmFtZV9zZW50MShzZXNzaW9uKTsKKyAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgYXNzZXJ0KG5naHR0cDJfaXNfZmF0YWwocnYpKTsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgICAgcnYgPSBzZXNzaW9uX2FmdGVyX2ZyYW1lX3NlbnQyKHNlc3Npb24pOworICAgICAgaWYgKHJ2IDwgMCkgeworICAgICAgICBhc3NlcnQobmdodHRwMl9pc19mYXRhbChydikpOworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIC8qIFdlIGhhdmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbmV4dCBzdGF0ZSAqLworCisgICAgICBpZiAocGF1c2UpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5HSFRUUDJfT0JfU0VORF9DTElFTlRfTUFHSUM6IHsKKyAgICAgIHNpemVfdCBkYXRhbGVuOworICAgICAgbmdodHRwMl9idWYgKmJ1ZjsKKworICAgICAgYnVmID0gJmZyYW1lYnVmcy0+Y3VyLT5idWY7CisKKyAgICAgIGlmIChidWYtPnBvcyA9PSBidWYtPmxhc3QpIHsKKyAgICAgICAgREVCVUdGKCJzZW5kOiBlbmQgdHJhbnNtaXNzaW9uIG9mIGNsaWVudCBtYWdpY1xuIik7CisgICAgICAgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KGFvYiwgbWVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgICpkYXRhX3B0ciA9IGJ1Zi0+cG9zOworICAgICAgZGF0YWxlbiA9IG5naHR0cDJfYnVmX2xlbihidWYpOworCisgICAgICBidWYtPnBvcyArPSBkYXRhbGVuOworCisgICAgICByZXR1cm4gKHNzaXplX3QpZGF0YWxlbjsKKyAgICB9CisgICAgfQorICB9Cit9CisKK3NzaXplX3QgbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKipkYXRhX3B0cikgeworICBpbnQgcnY7CisgIHNzaXplX3QgbGVuOworCisgICpkYXRhX3B0ciA9IE5VTEw7CisKKyAgbGVuID0gbmdodHRwMl9zZXNzaW9uX21lbV9zZW5kX2ludGVybmFsKHNlc3Npb24sIGRhdGFfcHRyLCAxKTsKKyAgaWYgKGxlbiA8PSAwKSB7CisgICAgcmV0dXJuIGxlbjsKKyAgfQorCisgIGlmIChzZXNzaW9uLT5hb2IuaXRlbSkgeworICAgIC8qIFdlIGhhdmUgdG8gY2FsbCBzZXNzaW9uX2FmdGVyX2ZyYW1lX3NlbnQxIGhlcmUgdG8gaGFuZGxlIHN0cmVhbQorICAgICAgIGNsb3N1cmUgdXBvbiB0cmFuc21pc3Npb24gb2YgZnJhbWVzLiAgT3RoZXJ3aXNlLCBFTkRfU1RSRUFNIG1heQorICAgICAgIGJlIHJlYWNoZWQgdG8gY2xpZW50IGJlZm9yZSB3ZSBjYWxsIG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZAorICAgICAgIGFnYWluIGFuZCB3ZSBtYXkgZ2V0IGV4Y2VlZGluZyBudW1iZXIgb2YgaW5jb21pbmcgc3RyZWFtcy4gKi8KKyAgICBydiA9IHNlc3Npb25fYWZ0ZXJfZnJhbWVfc2VudDEoc2Vzc2lvbik7CisgICAgaWYgKHJ2IDwgMCkgeworICAgICAgYXNzZXJ0KG5naHR0cDJfaXNfZmF0YWwocnYpKTsKKyAgICAgIHJldHVybiAoc3NpemVfdClydjsKKyAgICB9CisgIH0KKworICByZXR1cm4gbGVuOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3NlbmQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIGNvbnN0IHVpbnQ4X3QgKmRhdGEgPSBOVUxMOworICBzc2l6ZV90IGRhdGFsZW47CisgIHNzaXplX3Qgc2VudGxlbjsKKyAgbmdodHRwMl9idWZzICpmcmFtZWJ1ZnM7CisKKyAgZnJhbWVidWZzID0gJnNlc3Npb24tPmFvYi5mcmFtZWJ1ZnM7CisKKyAgZm9yICg7OykgeworICAgIGRhdGFsZW4gPSBuZ2h0dHAyX3Nlc3Npb25fbWVtX3NlbmRfaW50ZXJuYWwoc2Vzc2lvbiwgJmRhdGEsIDApOworICAgIGlmIChkYXRhbGVuIDw9IDApIHsKKyAgICAgIHJldHVybiAoaW50KWRhdGFsZW47CisgICAgfQorICAgIHNlbnRsZW4gPSBzZXNzaW9uLT5jYWxsYmFja3Muc2VuZF9jYWxsYmFjayhzZXNzaW9uLCBkYXRhLCAoc2l6ZV90KWRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgICAgaWYgKHNlbnRsZW4gPCAwKSB7CisgICAgICBpZiAoc2VudGxlbiA9PSBOR0hUVFAyX0VSUl9XT1VMREJMT0NLKSB7CisgICAgICAgIC8qIFRyYW5zbWlzc2lvbiBjYW5jZWxlZC4gUmV3aW5kIHRoZSBvZmZzZXQgKi8KKyAgICAgICAgZnJhbWVidWZzLT5jdXItPmJ1Zi5wb3MgLT0gZGF0YWxlbjsKKworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgIH0KKyAgICAvKiBSZXdpbmQgdGhlIG9mZnNldCB0byB0aGUgYW1vdW50IG9mIHVuc2VudCBieXRlcyAqLworICAgIGZyYW1lYnVmcy0+Y3VyLT5idWYucG9zIC09IGRhdGFsZW4gLSBzZW50bGVuOworICB9Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNlc3Npb25fcmVjdihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKSB7CisgIHNzaXplX3QgcnY7CisgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLnJlY3ZfY2FsbGJhY2soc2Vzc2lvbiwgYnVmLCBsZW4sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKyAgaWYgKHJ2ID4gMCkgeworICAgIGlmICgoc2l6ZV90KXJ2ID4gbGVuKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgIH0gZWxzZSBpZiAocnYgPCAwICYmIHJ2ICE9IE5HSFRUUDJfRVJSX1dPVUxEQkxPQ0sgJiYgcnYgIT0gTkdIVFRQMl9FUlJfRU9GKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KKyAgcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9mcmFtZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lX2hkICpoZCkgeworICBpbnQgcnY7CisKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9iZWdpbl9mcmFtZV9jYWxsYmFjaykgeworCisgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3Mub25fYmVnaW5fZnJhbWVfY2FsbGJhY2soc2Vzc2lvbiwgaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgaW50IHJ2OworICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ZyYW1lX3JlY3ZfY2FsbGJhY2spIHsKKyAgICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5vbl9mcmFtZV9yZWN2X2NhbGxiYWNrKHNlc3Npb24sIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9oZWFkZXJzKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgaW50IHJ2OworICBERUJVR0YoInJlY3Y6IGNhbGwgb25fYmVnaW5faGVhZGVycyBjYWxsYmFjayBzdHJlYW1faWQ9JWRcbiIsCisgICAgICAgICBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrKSB7CisgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3Mub25fYmVnaW5faGVhZGVyc19jYWxsYmFjayhzZXNzaW9uLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUpIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX2NhbGxfb25faGVhZGVyKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2hkX252ICpudikgeworICBpbnQgcnYgPSAwOworICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2hlYWRlcl9jYWxsYmFjazIpIHsKKyAgICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5vbl9oZWFkZXJfY2FsbGJhY2syKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgbnYtPm5hbWUsIG52LT52YWx1ZSwgbnYtPmZsYWdzLCBzZXNzaW9uLT51c2VyX2RhdGEpOworICB9IGVsc2UgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9oZWFkZXJfY2FsbGJhY2spIHsKKyAgICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5vbl9oZWFkZXJfY2FsbGJhY2soCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBudi0+bmFtZS0+YmFzZSwgbnYtPm5hbWUtPmxlbiwgbnYtPnZhbHVlLT5iYXNlLAorICAgICAgICBudi0+dmFsdWUtPmxlbiwgbnYtPmZsYWdzLCBzZXNzaW9uLT51c2VyX2RhdGEpOworICB9CisKKyAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX1BBVVNFIHx8IHJ2ID09IE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fY2FsbF9vbl9pbnZhbGlkX2hlYWRlcihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfaGRfbnYgKm52KSB7CisgIGludCBydjsKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazIpIHsKKyAgICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5vbl9pbnZhbGlkX2hlYWRlcl9jYWxsYmFjazIoCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBudi0+bmFtZSwgbnYtPnZhbHVlLCBudi0+ZmxhZ3MsIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgIH0gZWxzZSBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ludmFsaWRfaGVhZGVyX2NhbGxiYWNrKSB7CisgICAgcnYgPSBzZXNzaW9uLT5jYWxsYmFja3Mub25faW52YWxpZF9oZWFkZXJfY2FsbGJhY2soCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBudi0+bmFtZS0+YmFzZSwgbnYtPm5hbWUtPmxlbiwgbnYtPnZhbHVlLT5iYXNlLAorICAgICAgICBudi0+dmFsdWUtPmxlbiwgbnYtPmZsYWdzLCBzZXNzaW9uLT51c2VyX2RhdGEpOworICB9IGVsc2UgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFOworICB9CisKKyAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX1BBVVNFIHx8IHJ2ID09IE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXNzaW9uX2NhbGxfb25fZXh0ZW5zaW9uX2NodW5rX3JlY3ZfY2FsbGJhY2sobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4pIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9leHRlbnNpb25fY2h1bmtfcmVjdl9jYWxsYmFjaykgeworICAgIHJ2ID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2V4dGVuc2lvbl9jaHVua19yZWN2X2NhbGxiYWNrKAorICAgICAgICBzZXNzaW9uLCAmZnJhbWUtPmhkLCBkYXRhLCBsZW4sIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0NBTkNFTCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9jYWxsX3VucGFja19leHRlbnNpb25fY2FsbGJhY2sobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUgPSAmc2Vzc2lvbi0+aWZyYW1lOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9ICZpZnJhbWUtPmZyYW1lOworICB2b2lkICpwYXlsb2FkID0gTlVMTDsKKworICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy51bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKAorICAgICAgc2Vzc2lvbiwgJnBheWxvYWQsICZmcmFtZS0+aGQsIHNlc3Npb24tPnVzZXJfZGF0YSk7CisgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9DQU5DRUwpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgfQorCisgIGZyYW1lLT5leHQucGF5bG9hZCA9IHBheWxvYWQ7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIYW5kbGVzIGZyYW1lIHNpemUgZXJyb3IuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICBPdXQgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW50IHNlc3Npb25faGFuZGxlX2ZyYW1lX3NpemVfZXJyb3IobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIC8qIFRPRE8gQ3VycmVudGx5IG5vIGNhbGxiYWNrIGlzIGNhbGxlZCBmb3IgdGhpcyBlcnJvciwgYmVjYXVzZSB3ZQorICAgICBjYWxsIHRoaXMgY2FsbGJhY2sgYmVmb3JlIHJlYWRpbmcgYW55IHBheWxvYWQgKi8KKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbihzZXNzaW9uLCBOR0hUVFAyX0ZSQU1FX1NJWkVfRVJST1IpOworfQorCitzdGF0aWMgdWludDMyX3QgZ2V0X2Vycm9yX2NvZGVfZnJvbV9saWJfZXJyb3JfY29kZShpbnQgbGliX2Vycm9yX2NvZGUpIHsKKyAgc3dpdGNoIChsaWJfZXJyb3JfY29kZSkgeworICBjYXNlIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQ6CisgICAgcmV0dXJuIE5HSFRUUDJfU1RSRUFNX0NMT1NFRDsKKyAgY2FzZSBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDoKKyAgICByZXR1cm4gTkdIVFRQMl9DT01QUkVTU0lPTl9FUlJPUjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9GUkFNRV9TSVpFX0VSUk9SOgorICAgIHJldHVybiBOR0hUVFAyX0ZSQU1FX1NJWkVfRVJST1I7CisgIGNhc2UgTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MOgorICAgIHJldHVybiBOR0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUjsKKyAgY2FzZSBOR0hUVFAyX0VSUl9SRUZVU0VEX1NUUkVBTToKKyAgICByZXR1cm4gTkdIVFRQMl9SRUZVU0VEX1NUUkVBTTsKKyAgY2FzZSBOR0hUVFAyX0VSUl9QUk9UTzoKKyAgY2FzZSBOR0hUVFAyX0VSUl9IVFRQX0hFQURFUjoKKyAgY2FzZSBOR0hUVFAyX0VSUl9IVFRQX01FU1NBR0lORzoKKyAgICByZXR1cm4gTkdIVFRQMl9QUk9UT0NPTF9FUlJPUjsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gTkdIVFRQMl9JTlRFUk5BTF9FUlJPUjsKKyAgfQorfQorCisvKgorICogQ2FsbHMgb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrIGlmIGl0IGlzIHNldCB0byB8c2Vzc2lvbnwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgIFVzZXIgZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiBmYWlscy4KKyAqLworc3RhdGljIGludCBzZXNzaW9uX2NhbGxfb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGliX2Vycm9yX2NvZGUpIHsKKyAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2spIHsKKyAgICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjaygKKyAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBsaWJfZXJyb3JfY29kZSwgc2Vzc2lvbi0+dXNlcl9kYXRhKSAhPSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9zdHJlYW0yKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGliX2Vycm9yX2NvZGUpIHsKKyAgaW50IHJ2OworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbSgKKyAgICAgIHNlc3Npb24sIHN0cmVhbV9pZCwgZ2V0X2Vycm9yX2NvZGVfZnJvbV9saWJfZXJyb3JfY29kZShsaWJfZXJyb3JfY29kZSkpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLm9uX2ludmFsaWRfZnJhbWVfcmVjdl9jYWxsYmFjaykgeworICAgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKAorICAgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIGxpYl9lcnJvcl9jb2RlLCBzZXNzaW9uLT51c2VyX2RhdGEpICE9IDApIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGliX2Vycm9yX2NvZGUpIHsKKyAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfc3RyZWFtMihzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfZXJyb3JfY29kZSk7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpYl9lcnJvcl9jb2RlKSB7CisgIGludCBydjsKKyAgcnYgPSBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX3N0cmVhbShzZXNzaW9uLCBmcmFtZSwgbGliX2Vycm9yX2NvZGUpOworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0s7Cit9CisKKy8qCisgKiBIYW5kbGVzIGludmFsaWQgZnJhbWUgd2hpY2ggY2F1c2VzIGNvbm5lY3Rpb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpYl9lcnJvcl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uKSB7CisgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKSB7CisgICAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2soCisgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgbGliX2Vycm9yX2NvZGUsIHNlc3Npb24tPnVzZXJfZGF0YSkgIT0gMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICB9CisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICBzZXNzaW9uLCBnZXRfZXJyb3JfY29kZV9mcm9tX2xpYl9lcnJvcl9jb2RlKGxpYl9lcnJvcl9jb2RlKSwgcmVhc29uKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGliX2Vycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbikgeworICBpbnQgcnY7CisgIHJ2ID0KKyAgICAgIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbihzZXNzaW9uLCBmcmFtZSwgbGliX2Vycm9yX2NvZGUsIHJlYXNvbik7CisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSzsKK30KKworLyoKKyAqIEluZmxhdGVzIGhlYWRlciBibG9jayBpbiB0aGUgbWVtb3J5IHBvaW50ZWQgYnkgfGlufCB3aXRoIHxpbmxlbnwKKyAqIGJ5dGVzLiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTkdIVFRQMl9FUlJfUEFVU0UsIHRoZSBjYWxsZXIgbXVzdAorICogY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLCB1bnRpbCBpdCByZXR1cm5zIDAgb3Igb25lIG9mIG5lZ2F0aXZlCisgKiBlcnJvciBjb2RlLiAgSWYgfGNhbGxfaGVhZGVyX2NifCBpcyB6ZXJvLCB0aGUgb25faGVhZGVyX2NhbGxiYWNrCisgKiBhcmUgbm90IGludm9rZWQgYW5kIHRoZSBmdW5jdGlvbiBuZXZlciByZXR1cm4gTkdIVFRQMl9FUlJfUEFVU0UuIElmCisgKiB0aGUgZ2l2ZW4gfGlufCBpcyB0aGUgbGFzdCBjaHVuayBvZiBoZWFkZXIgYmxvY2ssIHRoZSB8ZmluYWx8IG11c3QKKyAqIGJlIG5vbnplcm8uIElmIGhlYWRlciBibG9jayBpcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkICh3aGljaCBpcworICogaW5kaWNhdGVkIGJ5IHRoZSByZXR1cm4gdmFsdWUgMCwgTkdIVFRQMl9FUlJfUEFVU0Ugb3IKKyAqIE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUpLCB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlZAorICogaW5wdXQgYnl0ZXMgaXMgYXNzaWduZWQgdG8gdGhlIHwqcmVhZGxlbl9wdHJ8LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJuIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICogTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSBjYWxsYmFjayByZXR1cm5zIHRoaXMgZXJyb3IgY29kZSwgaW5kaWNhdGluZyB0aGF0IHRoaXMKKyAqICAgICBzdHJlYW0gc2hvdWxkIGJlIFJTVF9TVFJFQU1lZC4KKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX1BBVVNFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHJldHVybmVkIE5HSFRUUDJfRVJSX1BBVVNFCisgKiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUAorICogICAgIEhlYWRlciBkZWNvbXByZXNzaW9uIGZhaWxlZAorICovCitzdGF0aWMgaW50IGluZmxhdGVfaGVhZGVyX2Jsb2NrKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqcmVhZGxlbl9wdHIsIHVpbnQ4X3QgKmluLCBzaXplX3QgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaW5hbCwgaW50IGNhbGxfaGVhZGVyX2NiKSB7CisgIHNzaXplX3QgcHJvY2xlbjsKKyAgaW50IHJ2OworICBpbnQgaW5mbGF0ZV9mbGFnczsKKyAgbmdodHRwMl9oZF9udiBudjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgbmdodHRwMl9zdHJlYW0gKnN1YmplY3Rfc3RyZWFtOworICBpbnQgdHJhaWxlciA9IDA7CisKKyAgKnJlYWRsZW5fcHRyID0gMDsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisKKyAgaWYgKGZyYW1lLT5oZC50eXBlID09IE5HSFRUUDJfUFVTSF9QUk9NSVNFKSB7CisgICAgc3ViamVjdF9zdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbSgKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQpOworICB9IGVsc2UgeworICAgIHN1YmplY3Rfc3RyZWFtID0gc3RyZWFtOworICAgIHRyYWlsZXIgPSBzZXNzaW9uX3RyYWlsZXJfaGVhZGVycyhzZXNzaW9uLCBzdHJlYW0sIGZyYW1lKTsKKyAgfQorCisgIERFQlVHRigicmVjdjogZGVjb2RpbmcgaGVhZGVyIGJsb2NrICV6dSBieXRlc1xuIiwgaW5sZW4pOworICBmb3IgKDs7KSB7CisgICAgaW5mbGF0ZV9mbGFncyA9IDA7CisgICAgcHJvY2xlbiA9IG5naHR0cDJfaGRfaW5mbGF0ZV9oZF9udigmc2Vzc2lvbi0+aGRfaW5mbGF0ZXIsICZudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmZsYXRlX2ZsYWdzLCBpbiwgaW5sZW4sIGZpbmFsKTsKKyAgICBpZiAobmdodHRwMl9pc19mYXRhbCgoaW50KXByb2NsZW4pKSB7CisgICAgICByZXR1cm4gKGludClwcm9jbGVuOworICAgIH0KKyAgICBpZiAocHJvY2xlbiA8IDApIHsKKyAgICAgIGlmIChzZXNzaW9uLT5pZnJhbWUuc3RhdGUgPT0gTkdIVFRQMl9JQl9SRUFEX0hFQURFUl9CTE9DSykgeworICAgICAgICBpZiAoc3ViamVjdF9zdHJlYW0gJiYgc3ViamVjdF9zdHJlYW0tPnN0YXRlICE9IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICAgICAgICAvKiBBZGRpbmcgUlNUX1NUUkVBTSBoZXJlIGlzIHZlcnkgaW1wb3J0YW50LiBJdCBwcmV2ZW50cworICAgICAgICAgICAgIGZyb20gaW52b2tpbmcgc3Vic2VxdWVudCBjYWxsYmFja3MgZm9yIHRoZSBzYW1lIHN0cmVhbQorICAgICAgICAgICAgIElELiAqLworICAgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKAorICAgICAgICAgICAgICBzZXNzaW9uLCBzdWJqZWN0X3N0cmVhbS0+c3RyZWFtX2lkLCBOR0hUVFAyX0NPTVBSRVNTSU9OX0VSUk9SKTsKKworICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcnYgPQorICAgICAgICAgIG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbihzZXNzaW9uLCBOR0hUVFAyX0NPTVBSRVNTSU9OX0VSUk9SKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUDsKKyAgICB9CisgICAgaW4gKz0gcHJvY2xlbjsKKyAgICBpbmxlbiAtPSAoc2l6ZV90KXByb2NsZW47CisgICAgKnJlYWRsZW5fcHRyICs9IChzaXplX3QpcHJvY2xlbjsKKworICAgIERFQlVHRigicmVjdjogcHJvY2xlbj0lemRcbiIsIHByb2NsZW4pOworCisgICAgaWYgKGNhbGxfaGVhZGVyX2NiICYmIChpbmZsYXRlX2ZsYWdzICYgTkdIVFRQMl9IRF9JTkZMQVRFX0VNSVQpKSB7CisgICAgICBydiA9IDA7CisgICAgICBpZiAoc3ViamVjdF9zdHJlYW0pIHsKKyAgICAgICAgaWYgKHNlc3Npb25fZW5mb3JjZV9odHRwX21lc3NhZ2luZyhzZXNzaW9uKSkgeworICAgICAgICAgIHJ2ID0gbmdodHRwMl9odHRwX29uX2hlYWRlcihzZXNzaW9uLCBzdWJqZWN0X3N0cmVhbSwgZnJhbWUsICZudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxlcik7CisKKyAgICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfSUdOX0hUVFBfSEVBREVSKSB7CisgICAgICAgICAgICAvKiBEb24ndCBvdmVyd3JpdGUgcnYgaGVyZSAqLworICAgICAgICAgICAgaW50IHJ2MjsKKworICAgICAgICAgICAgcnYyID0gc2Vzc2lvbl9jYWxsX29uX2ludmFsaWRfaGVhZGVyKHNlc3Npb24sIGZyYW1lLCAmbnYpOworICAgICAgICAgICAgaWYgKHJ2MiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSB7CisgICAgICAgICAgICAgIHJ2ID0gTkdIVFRQMl9FUlJfSFRUUF9IRUFERVI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpZiAocnYyICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnYyOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgLyogaGVhZGVyIGlzIGlnbm9yZWQgKi8KKyAgICAgICAgICAgICAgREVCVUdGKCJyZWN2OiBIVFRQIGlnbm9yZWQ6IHR5cGU9JXUsIGlkPSVkLCBoZWFkZXIgJS4qczogJS4qc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5oZC50eXBlLCBmcmFtZS0+aGQuc3RyZWFtX2lkLCAoaW50KW52Lm5hbWUtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIG52Lm5hbWUtPmJhc2UsIChpbnQpbnYudmFsdWUtPmxlbiwgbnYudmFsdWUtPmJhc2UpOworCisgICAgICAgICAgICAgIHJ2MiA9IHNlc3Npb25fY2FsbF9lcnJvcl9jYWxsYmFjaygKKyAgICAgICAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSLAorICAgICAgICAgICAgICAgICAgIklnbm9yaW5nIHJlY2VpdmVkIGludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQ6IGZyYW1lIHR5cGU6ICIKKyAgICAgICAgICAgICAgICAgICIldSwgc3RyZWFtOiAlZCwgbmFtZTogWyUuKnNdLCB2YWx1ZTogWyUuKnNdIiwKKyAgICAgICAgICAgICAgICAgIGZyYW1lLT5oZC50eXBlLCBmcmFtZS0+aGQuc3RyZWFtX2lkLCAoaW50KW52Lm5hbWUtPmxlbiwKKyAgICAgICAgICAgICAgICAgIG52Lm5hbWUtPmJhc2UsIChpbnQpbnYudmFsdWUtPmxlbiwgbnYudmFsdWUtPmJhc2UpOworCisgICAgICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2MikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnYyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSKSB7CisgICAgICAgICAgICBERUJVR0YoInJlY3Y6IEhUVFAgZXJyb3I6IHR5cGU9JXUsIGlkPSVkLCBoZWFkZXIgJS4qczogJS4qc1xuIiwKKyAgICAgICAgICAgICAgICAgICBmcmFtZS0+aGQudHlwZSwgZnJhbWUtPmhkLnN0cmVhbV9pZCwgKGludCludi5uYW1lLT5sZW4sCisgICAgICAgICAgICAgICAgICAgbnYubmFtZS0+YmFzZSwgKGludCludi52YWx1ZS0+bGVuLCBudi52YWx1ZS0+YmFzZSk7CisKKyAgICAgICAgICAgIHJ2ID0gc2Vzc2lvbl9jYWxsX2Vycm9yX2NhbGxiYWNrKAorICAgICAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSLAorICAgICAgICAgICAgICAgICJJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIHdhcyByZWNlaXZlZDogZnJhbWUgdHlwZTogIgorICAgICAgICAgICAgICAgICIldSwgc3RyZWFtOiAlZCwgbmFtZTogWyUuKnNdLCB2YWx1ZTogWyUuKnNdIiwKKyAgICAgICAgICAgICAgICBmcmFtZS0+aGQudHlwZSwgZnJhbWUtPmhkLnN0cmVhbV9pZCwgKGludCludi5uYW1lLT5sZW4sCisgICAgICAgICAgICAgICAgbnYubmFtZS0+YmFzZSwgKGludCludi52YWx1ZS0+bGVuLCBudi52YWx1ZS0+YmFzZSk7CisKKyAgICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJ2ID0gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9zdHJlYW0yKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0X3N0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUsIE5HSFRUUDJfRVJSX0hUVFBfSEVBREVSKTsKKyAgICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJ2ID09IDApIHsKKyAgICAgICAgICBydiA9IHNlc3Npb25fY2FsbF9vbl9oZWFkZXIoc2Vzc2lvbiwgZnJhbWUsICZudik7CisgICAgICAgICAgLyogVGhpcyBoYW5kbGVzIE5HSFRUUDJfRVJSX1BBVVNFIGFuZAorICAgICAgICAgICAgIE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUgYXMgd2VsbCAqLworICAgICAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIChpbmZsYXRlX2ZsYWdzICYgTkdIVFRQMl9IRF9JTkZMQVRFX0ZJTkFMKSB7CisgICAgICBuZ2h0dHAyX2hkX2luZmxhdGVfZW5kX2hlYWRlcnMoJnNlc3Npb24tPmhkX2luZmxhdGVyKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoKGluZmxhdGVfZmxhZ3MgJiBOR0hUVFAyX0hEX0lORkxBVEVfRU1JVCkgPT0gMCAmJiBpbmxlbiA9PSAwKSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBIRUFERVJTIGZyYW1lIHdhcyBjb21wbGV0ZWx5IHJlY2VpdmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW50IHNlc3Npb25fZW5kX3N0cmVhbV9oZWFkZXJzX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaW50IHJ2OworICBpZiAoKGZyYW1lLT5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNKSA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBuZ2h0dHAyX3N0cmVhbV9zaHV0ZG93bihzdHJlYW0sIE5HSFRUUDJfU0hVVF9SRCk7CisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbV9pZl9zaHV0X3Jkd3Ioc2Vzc2lvbiwgc3RyZWFtKTsKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9hZnRlcl9oZWFkZXJfYmxvY2tfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIGludCBydiA9IDA7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJnNlc3Npb24tPmlmcmFtZS5mcmFtZTsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICAvKiBXZSBkb24ndCBjYWxsIG9uX2ZyYW1lX3JlY3ZfY2FsbGJhY2sgaWYgc3RyZWFtIGhhcyBiZWVuIGNsb3NlZAorICAgICBhbHJlYWR5IG9yIGJlaW5nIGNsb3NlZC4gKi8KKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgIGlmICghc3RyZWFtIHx8IHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fQ0xPU0lORykgeworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKHNlc3Npb25fZW5mb3JjZV9odHRwX21lc3NhZ2luZyhzZXNzaW9uKSkgeworICAgIGlmIChmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX1BVU0hfUFJPTUlTRSkgeworICAgICAgbmdodHRwMl9zdHJlYW0gKnN1YmplY3Rfc3RyZWFtOworCisgICAgICBzdWJqZWN0X3N0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKAorICAgICAgICAgIHNlc3Npb24sIGZyYW1lLT5wdXNoX3Byb21pc2UucHJvbWlzZWRfc3RyZWFtX2lkKTsKKyAgICAgIGlmIChzdWJqZWN0X3N0cmVhbSkgeworICAgICAgICBydiA9IG5naHR0cDJfaHR0cF9vbl9yZXF1ZXN0X2hlYWRlcnMoc3ViamVjdF9zdHJlYW0sIGZyYW1lKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgYXNzZXJ0KGZyYW1lLT5oZC50eXBlID09IE5HSFRUUDJfSEVBREVSUyk7CisgICAgICBzd2l0Y2ggKGZyYW1lLT5oZWFkZXJzLmNhdCkgeworICAgICAgY2FzZSBOR0hUVFAyX0hDQVRfUkVRVUVTVDoKKyAgICAgICAgcnYgPSBuZ2h0dHAyX2h0dHBfb25fcmVxdWVzdF9oZWFkZXJzKHN0cmVhbSwgZnJhbWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9IQ0FUX1JFU1BPTlNFOgorICAgICAgY2FzZSBOR0hUVFAyX0hDQVRfUFVTSF9SRVNQT05TRToKKyAgICAgICAgcnYgPSBuZ2h0dHAyX2h0dHBfb25fcmVzcG9uc2VfaGVhZGVycyhzdHJlYW0pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9IQ0FUX0hFQURFUlM6CisgICAgICAgIGlmIChzdHJlYW0tPmh0dHBfZmxhZ3MgJiBOR0hUVFAyX0hUVFBfRkxBR19FWFBFQ1RfRklOQUxfUkVTUE9OU0UpIHsKKyAgICAgICAgICBhc3NlcnQoIXNlc3Npb24tPnNlcnZlcik7CisgICAgICAgICAgcnYgPSBuZ2h0dHAyX2h0dHBfb25fcmVzcG9uc2VfaGVhZGVycyhzdHJlYW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJ2ID0gbmdodHRwMl9odHRwX29uX3RyYWlsZXJfaGVhZGVycyhzdHJlYW0sIGZyYW1lKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICAgIH0KKyAgICAgIGlmIChydiA9PSAwICYmIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkpIHsKKyAgICAgICAgcnYgPSBuZ2h0dHAyX2h0dHBfb25fcmVtb3RlX2VuZF9zdHJlYW0oc3RyZWFtKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIGludDMyX3Qgc3RyZWFtX2lkOworCisgICAgICBpZiAoZnJhbWUtPmhkLnR5cGUgPT0gTkdIVFRQMl9QVVNIX1BST01JU0UpIHsKKyAgICAgICAgc3RyZWFtX2lkID0gZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdHJlYW1faWQgPSBmcmFtZS0+aGQuc3RyZWFtX2lkOworICAgICAgfQorCisgICAgICBydiA9IHNlc3Npb25faGFuZGxlX2ludmFsaWRfc3RyZWFtMihzZXNzaW9uLCBzdHJlYW1faWQsIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9FUlJfSFRUUF9NRVNTQUdJTkcpOworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgaWYgKGZyYW1lLT5oZC50eXBlID09IE5HSFRUUDJfSEVBREVSUyAmJgorICAgICAgICAgIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkpIHsKKyAgICAgICAgbmdodHRwMl9zdHJlYW1fc2h1dGRvd24oc3RyZWFtLCBOR0hUVFAyX1NIVVRfUkQpOworICAgICAgICAvKiBEb24ndCBjYWxsIG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW1faWZfc2h1dF9yZHdyCisgICAgICAgICAgIGJlY2F1c2UgUlNUX1NUUkVBTSBoYXMgYmVlbiBzdWJtaXR0ZWQuICovCisgICAgICB9CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBydiA9IHNlc3Npb25fY2FsbF9vbl9mcmFtZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7CisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIGlmIChmcmFtZS0+aGQudHlwZSAhPSBOR0hUVFAyX0hFQURFUlMpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBzZXNzaW9uX2VuZF9zdHJlYW1faGVhZGVyc19yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSwgc3RyZWFtKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9yZXF1ZXN0X2hlYWRlcnNfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgaW50IHJ2ID0gMDsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgaWYgKGZyYW1lLT5oZC5zdHJlYW1faWQgPT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLCAicmVxdWVzdCBIRUFERVJTOiBzdHJlYW1faWQgPT0gMCIpOworICB9CisKKyAgLyogSWYgY2xpZW50IHJlY2VpdmVzIGlkbGUgc3RyZWFtIGZyb20gc2VydmVyLCBpdCBpcyBpbnZhbGlkCisgICAgIHJlZ2FyZGxlc3Mgc3RyZWFtIElEIGlzIGV2ZW4gb3Igb2RkLiAgVGhpcyBpcyBiZWNhdXNlIGNsaWVudCBpcworICAgICBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSByZXF1ZXN0IGZyb20gc2VydmVyLiAqLworICBpZiAoIXNlc3Npb24tPnNlcnZlcikgeworICAgIGlmIChzZXNzaW9uX2RldGVjdF9pZGxlX3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKSkgeworICAgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAicmVxdWVzdCBIRUFERVJTOiBjbGllbnQgcmVjZWl2ZWQgcmVxdWVzdCIpOworICAgIH0KKworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fSEVBREVSX0JMT0NLOworICB9CisKKyAgYXNzZXJ0KHNlc3Npb24tPnNlcnZlcik7CisKKyAgaWYgKCFzZXNzaW9uX2lzX25ld19wZWVyX3N0cmVhbV9pZChzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKSkgeworICAgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDAgfHwKKyAgICAgICAgbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKSkgeworICAgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAicmVxdWVzdCBIRUFERVJTOiBpbnZhbGlkIHN0cmVhbV9pZCIpOworICAgIH0KKworICAgIC8qIFJGQyA3NTQwIHNheXMgaWYgYW4gZW5kcG9pbnQgcmVjZWl2ZXMgYSBIRUFERVJTIHdpdGggaW52YWxpZAorICAgICAqIHN0cmVhbSBJRCAoZS5nLCBudW1lcmljYWxseSBzbWFsbGVyIHRoYW4gcHJldmlvdXMpLCBpdCBNVVNUCisgICAgICogaXNzdWUgY29ubmVjdGlvbiBlcnJvciB3aXRoIGVycm9yIGNvZGUgUFJPVE9DT0xfRVJST1IuICBJdCBpcyBhCisgICAgICogYml0IGhhcmQgdG8gZGV0ZWN0IHRoaXMsIHNpbmNlIHdlIGNhbm5vdCByZW1lbWJlciBhbGwgc3RyZWFtcworICAgICAqIHdlIG9ic2VydmVkIHNvIGZhci4KKyAgICAgKgorICAgICAqIFlvdSBtaWdodCBpbWFnaW5lIHRoaXMgaXMgcmVhbGx5IGVhc3kuICBCdXQgbm8uICBIVFRQLzIgaXMKKyAgICAgKiBhc3luY2hyb25vdXMgcHJvdG9jb2wsIGFuZCB1c3VhbGx5IGNsaWVudCBhbmQgc2VydmVyIGRvIG5vdAorICAgICAqIHNoYXJlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIG9wZW4vY2xvc2VkIHN0cmVhbSBzdGF0dXMuICBGb3IKKyAgICAgKiBleGFtcGxlLCBhZnRlciBzZXJ2ZXIgc2VuZHMgUlNUX1NUUkVBTSBmb3IgYSBzdHJlYW0sIGNsaWVudCBtYXkKKyAgICAgKiBzZW5kIHRyYWlsZXIgSEVBREVSUyBmb3IgdGhhdCBzdHJlYW0uICBJZiBuYWl2ZSBzZXJ2ZXIgZGV0ZWN0cworICAgICAqIHRoYXQsIGFuZCBpc3N1ZWQgY29ubmVjdGlvbiBlcnJvciwgdGhlbiBpdCBpcyBhIGJ1ZyBvZiBzZXJ2ZXIKKyAgICAgKiBpbXBsZW1lbnRhdGlvbiBzaW5jZSBjbGllbnQgaXMgbm90IHdyb25nIGlmIGl0IGRpZCBub3QgZ2V0CisgICAgICogUlNUX1NUUkVBTSB3aGVuIGl0IGlzc3VlZCB0cmFpbGVyIEhFQURFUlMuCisgICAgICoKKyAgICAgKiBBdCB0aGUgbW9tZW50LCB3ZSBhcmUgdmVyeSBjb25zZXJ2YXRpdmUgaGVyZS4gIFdlIG9ubHkgdXNlCisgICAgICogY29ubmVjdGlvbiBlcnJvciBpZiBzdHJlYW0gSUQgcmVmZXJzIGlkbGUgc3RyZWFtLCBvciB3ZSBhcmUKKyAgICAgKiBzdXJlIHRoYXQgc3RyZWFtIGlzIGhhbGYtY2xvc2VkKHJlbW90ZSkgb3IgY2xvc2VkLiAgT3RoZXJ3aXNlCisgICAgICogd2UganVzdCBpZ25vcmUgSEVBREVSUyBmb3Igbm93LgorICAgICAqLworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgICBpZiAoc3RyZWFtICYmIChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfUkQpKSB7CisgICAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQsICJIRUFERVJTOiBzdHJlYW0gY2xvc2VkIik7CisgICAgfQorCisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0s7CisgIH0KKyAgc2Vzc2lvbi0+bGFzdF9yZWN2X3N0cmVhbV9pZCA9IGZyYW1lLT5oZC5zdHJlYW1faWQ7CisKKyAgaWYgKHNlc3Npb25faXNfaW5jb21pbmdfY29uY3VycmVudF9zdHJlYW1zX21heChzZXNzaW9uKSkgeworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAicmVxdWVzdCBIRUFERVJTOiBtYXggY29uY3VycmVudCBzdHJlYW1zIGV4Y2VlZGVkIik7CisgIH0KKworICBpZiAoIXNlc3Npb25fYWxsb3dfaW5jb21pbmdfbmV3X3N0cmVhbShzZXNzaW9uKSkgeworICAgIC8qIFdlIGp1c3QgaWdub3JlIHN0cmVhbSBhZnRlciBHT0FXQVkgd2FzIHNlbnQgKi8KKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSzsKKyAgfQorCisgIGlmIChmcmFtZS0+aGVhZGVycy5wcmlfc3BlYy5zdHJlYW1faWQgPT0gZnJhbWUtPmhkLnN0cmVhbV9pZCkgeworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLCAicmVxdWVzdCBIRUFERVJTOiBkZXBlbmQgb24gaXRzZWxmIik7CisgIH0KKworICBpZiAoc2Vzc2lvbl9pc19pbmNvbWluZ19jb25jdXJyZW50X3N0cmVhbXNfcGVuZGluZ19tYXgoc2Vzc2lvbikpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX3N0cmVhbShzZXNzaW9uLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0VSUl9SRUZVU0VEX1NUUkVBTSk7CisgIH0KKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0oCisgICAgICBzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkLCBOR0hUVFAyX1NUUkVBTV9GTEFHX05PTkUsCisgICAgICAmZnJhbWUtPmhlYWRlcnMucHJpX3NwZWMsIE5HSFRUUDJfU1RSRUFNX09QRU5JTkcsIE5VTEwpOworICBpZiAoIXN0cmVhbSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkanVzdF9jbG9zZWRfc3RyZWFtKHNlc3Npb24pOworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBzZXNzaW9uLT5sYXN0X3Byb2Nfc3RyZWFtX2lkID0gc2Vzc2lvbi0+bGFzdF9yZWN2X3N0cmVhbV9pZDsKKworICBydiA9IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9oZWFkZXJzKHNlc3Npb24sIGZyYW1lKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcmVzcG9uc2VfaGVhZGVyc19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpbnQgcnY7CisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYgc3RyZWFtLT5zdGF0ZSA9PQorICAgICBOR0hUVFAyX1NUUkVBTV9PUEVOSU5HIGFuZCBzdHJlYW1faWQgaXMgbG9jYWwgc2lkZSBpbml0aWF0ZWQuICovCisgIGFzc2VydChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX09QRU5JTkcgJiYKKyAgICAgICAgIG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpOworICBpZiAoZnJhbWUtPmhkLnN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sICJyZXNwb25zZSBIRUFERVJTOiBzdHJlYW1faWQgPT0gMCIpOworICB9CisgIGlmIChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfUkQpIHsKKyAgICAvKiBoYWxmIGNsb3NlZCAocmVtb3RlKTogZnJvbSB0aGUgc3BlYzoKKworICAgICAgIElmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGFkZGl0aW9uYWwgZnJhbWVzIGZvciBhIHN0cmVhbSB0aGF0IGlzCisgICAgICAgaW4gdGhpcyBzdGF0ZSBpdCBNVVNUIHJlc3BvbmQgd2l0aCBhIHN0cmVhbSBlcnJvciAoU2VjdGlvbgorICAgICAgIDUuNC4yKSBvZiB0eXBlIFNUUkVBTV9DTE9TRUQuCisKKyAgICAgICBXZSBnbyBmdXJ0aGVyLCBhbmQgbWFrZSBpdCBjb25uZWN0aW9uIGVycm9yLgorICAgICovCisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRCwgIkhFQURFUlM6IHN0cmVhbSBjbG9zZWQiKTsKKyAgfQorICBzdHJlYW0tPnN0YXRlID0gTkdIVFRQMl9TVFJFQU1fT1BFTkVEOworICBydiA9IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9oZWFkZXJzKHNlc3Npb24sIGZyYW1lKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcHVzaF9yZXNwb25zZV9oZWFkZXJzX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBpbnQgcnYgPSAwOworICBhc3NlcnQoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9SRVNFUlZFRCk7CisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgInB1c2ggcmVzcG9uc2UgSEVBREVSUzogc3RyZWFtX2lkID09IDAiKTsKKyAgfQorCisgIGlmIChzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgIkhFQURFUlM6IG5vIEhFQURFUlMgYWxsb3dlZCBmcm9tIGNsaWVudCBpbiByZXNlcnZlZCBzdGF0ZSIpOworICB9CisKKyAgaWYgKHNlc3Npb25faXNfaW5jb21pbmdfY29uY3VycmVudF9zdHJlYW1zX21heChzZXNzaW9uKSkgeworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAicHVzaCByZXNwb25zZSBIRUFERVJTOiBtYXggY29uY3VycmVudCBzdHJlYW1zIGV4Y2VlZGVkIik7CisgIH0KKworICBpZiAoIXNlc3Npb25fYWxsb3dfaW5jb21pbmdfbmV3X3N0cmVhbShzZXNzaW9uKSkgeworICAgIC8qIFdlIGRvbid0IGFjY2VwdCBuZXcgc3RyZWFtIGFmdGVyIEdPQVdBWSB3YXMgc2VudC4gKi8KKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSzsKKyAgfQorCisgIGlmIChzZXNzaW9uX2lzX2luY29taW5nX2NvbmN1cnJlbnRfc3RyZWFtc19wZW5kaW5nX21heChzZXNzaW9uKSkgeworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRVJSX1JFRlVTRURfU1RSRUFNKTsKKyAgfQorCisgIG5naHR0cDJfc3RyZWFtX3Byb21pc2VfZnVsZmlsbGVkKHN0cmVhbSk7CisgIGlmICghbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCkpIHsKKyAgICAtLXNlc3Npb24tPm51bV9pbmNvbWluZ19yZXNlcnZlZF9zdHJlYW1zOworICB9CisgICsrc2Vzc2lvbi0+bnVtX2luY29taW5nX3N0cmVhbXM7CisgIHJ2ID0gc2Vzc2lvbl9jYWxsX29uX2JlZ2luX2hlYWRlcnMoc2Vzc2lvbiwgZnJhbWUpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9oZWFkZXJzX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGludCBydiA9IDA7CisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywgIkhFQURFUlM6IHN0cmVhbV9pZCA9PSAwIik7CisgIH0KKyAgaWYgKChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfUkQpKSB7CisgICAgLyogaGFsZiBjbG9zZWQgKHJlbW90ZSk6IGZyb20gdGhlIHNwZWM6CisKKyAgICAgICBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhZGRpdGlvbmFsIGZyYW1lcyBmb3IgYSBzdHJlYW0gdGhhdCBpcworICAgICAgIGluIHRoaXMgc3RhdGUgaXQgTVVTVCByZXNwb25kIHdpdGggYSBzdHJlYW0gZXJyb3IgKFNlY3Rpb24KKyAgICAgICA1LjQuMikgb2YgdHlwZSBTVFJFQU1fQ0xPU0VELgorCisgICAgICAgd2UgZ28gZnVydGhlciwgYW5kIG1ha2UgaXQgY29ubmVjdGlvbiBlcnJvci4KKyAgICAqLworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1NUUkVBTV9DTE9TRUQsICJIRUFERVJTOiBzdHJlYW0gY2xvc2VkIik7CisgIH0KKyAgaWYgKG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9PUEVORUQpIHsKKyAgICAgIHJ2ID0gc2Vzc2lvbl9jYWxsX29uX2JlZ2luX2hlYWRlcnMoc2Vzc2lvbiwgZnJhbWUpOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lHTl9IRUFERVJfQkxPQ0s7CisgIH0KKyAgLyogSWYgdGhpcyBpcyByZW1vdGUgcGVlciBpbml0aWF0ZWQgc3RyZWFtLCBpdCBpcyBPSyB1bmxlc3MgaXQKKyAgICAgaGFzIHNlbnQgRU5EX1NUUkVBTSBmcmFtZSBhbHJlYWR5LiBCdXQgaWYgc3RyZWFtIGlzIGluCisgICAgIE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcsIHdlIGRpc2NhcmQgdGhlIGZyYW1lLiBUaGlzIGlzIGEgcmFjZQorICAgICBjb25kaXRpb24uICovCisgIGlmIChzdHJlYW0tPnN0YXRlICE9IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICBydiA9IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9oZWFkZXJzKHNlc3Npb24sIGZyYW1lKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSzsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3NfaGVhZGVyc19mcmFtZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgcnYgPSBuZ2h0dHAyX2ZyYW1lX3VucGFja19oZWFkZXJzX3BheWxvYWQoJmZyYW1lLT5oZWFkZXJzLCBpZnJhbWUtPnNidWYucG9zKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IsICJIRUFERVJTOiBjb3VsZCBub3QgdW5wYWNrIik7CisgIH0KKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgIGlmICghc3RyZWFtKSB7CisgICAgZnJhbWUtPmhlYWRlcnMuY2F0ID0gTkdIVFRQMl9IQ0FUX1JFUVVFU1Q7CisgICAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9vbl9yZXF1ZXN0X2hlYWRlcnNfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworICB9CisKKyAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQpIHsKKyAgICBmcmFtZS0+aGVhZGVycy5jYXQgPSBOR0hUVFAyX0hDQVRfUFVTSF9SRVNQT05TRTsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX29uX3B1c2hfcmVzcG9uc2VfaGVhZGVyc19yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0pOworICB9CisKKyAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fT1BFTklORyAmJgorICAgICAgbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKSkgeworICAgIGZyYW1lLT5oZWFkZXJzLmNhdCA9IE5HSFRUUDJfSENBVF9SRVNQT05TRTsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX29uX3Jlc3BvbnNlX2hlYWRlcnNfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUsIHN0cmVhbSk7CisgIH0KKworICBmcmFtZS0+aGVhZGVycy5jYXQgPSBOR0hUVFAyX0hDQVRfSEVBREVSUzsKKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9vbl9oZWFkZXJzX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lLCBzdHJlYW0pOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3ByaW9yaXR5X3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQUklPUklUWTogc3RyZWFtX2lkID09IDAiKTsKKyAgfQorCisgIGlmIChmcmFtZS0+cHJpb3JpdHkucHJpX3NwZWMuc3RyZWFtX2lkID09IGZyYW1lLT5oZC5zdHJlYW1faWQpIHsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX1BST1RPQ09MX0VSUk9SLCAiZGVwZW5kIG9uIGl0c2VsZiIpOworICB9CisKKyAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICAvKiBSZS1wcmlvcml0aXphdGlvbiB3b3JrcyBvbmx5IGluIHNlcnZlciAqLworICAgIHJldHVybiBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworICB9CisKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmF3KHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworCisgIGlmICghc3RyZWFtKSB7CisgICAgLyogUFJJT1JJVFkgYWdhaW5zdCBpZGxlIHN0cmVhbSBjYW4gY3JlYXRlIGFuY2hvciBub2RlIGluCisgICAgICAgZGVwZW5kZW5jeSB0cmVlLiAqLworICAgIGlmICghc2Vzc2lvbl9kZXRlY3RfaWRsZV9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9vcGVuX3N0cmVhbSgKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCwgTkdIVFRQMl9TVFJFQU1fRkxBR19OT05FLAorICAgICAgICAmZnJhbWUtPnByaW9yaXR5LnByaV9zcGVjLCBOR0hUVFAyX1NUUkVBTV9JRExFLCBOVUxMKTsKKworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICAgIH0KKworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkanVzdF9pZGxlX3N0cmVhbShzZXNzaW9uKTsKKyAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fcmVwcmlvcml0aXplX3N0cmVhbShzZXNzaW9uLCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWUtPnByaW9yaXR5LnByaV9zcGVjKTsKKworICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkanVzdF9pZGxlX3N0cmVhbShzZXNzaW9uKTsKKyAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICByZXR1cm4gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3NfcHJpb3JpdHlfZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWUgPSAmaWZyYW1lLT5mcmFtZTsKKworICBuZ2h0dHAyX2ZyYW1lX3VucGFja19wcmlvcml0eV9wYXlsb2FkKCZmcmFtZS0+cHJpb3JpdHksIGlmcmFtZS0+c2J1Zi5wb3MpOworCisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fb25fcHJpb3JpdHlfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3JzdF9zdHJlYW1fcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgaWYgKGZyYW1lLT5oZC5zdHJlYW1faWQgPT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTVF9TVFJFQU06IHN0cmVhbV9pZCA9PSAwIik7CisgIH0KKworICBpZiAoc2Vzc2lvbl9kZXRlY3RfaWRsZV9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU1RfU1RSRUFNOiBzdHJlYW0gaW4gaWRsZSIpOworICB9CisKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgIGlmIChzdHJlYW0pIHsKKyAgICAvKiBXZSBtYXkgdXNlIHN0cmVhbS0+c2h1dF9mbGFncyBmb3Igc3RyaWN0IGVycm9yIGNoZWNraW5nLiAqLworICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1JEKTsKKyAgfQorCisgIHJ2ID0gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+cnN0X3N0cmVhbS5lcnJvcl9jb2RlKTsKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fcHJvY2Vzc19yc3Rfc3RyZWFtX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisKKyAgbmdodHRwMl9mcmFtZV91bnBhY2tfcnN0X3N0cmVhbV9wYXlsb2FkKCZmcmFtZS0+cnN0X3N0cmVhbSwgaWZyYW1lLT5zYnVmLnBvcyk7CisKKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9vbl9yc3Rfc3RyZWFtX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfcmVtb3RlX2luaXRpYWxfd2luZG93X3NpemVfZnVuYyhuZ2h0dHAyX21hcF9lbnRyeSAqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB0cikgeworICBpbnQgcnY7CisgIG5naHR0cDJfdXBkYXRlX3dpbmRvd19zaXplX2FyZyAqYXJnOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIGFyZyA9IChuZ2h0dHAyX3VwZGF0ZV93aW5kb3dfc2l6ZV9hcmcgKilwdHI7CisgIHN0cmVhbSA9IChuZ2h0dHAyX3N0cmVhbSAqKWVudHJ5OworCisgIHJ2ID0gbmdodHRwMl9zdHJlYW1fdXBkYXRlX3JlbW90ZV9pbml0aWFsX3dpbmRvd19zaXplKAorICAgICAgc3RyZWFtLCBhcmctPm5ld193aW5kb3dfc2l6ZSwgYXJnLT5vbGRfd2luZG93X3NpemUpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oYXJnLT5zZXNzaW9uLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SKTsKKyAgfQorCisgIC8qIElmIHdpbmRvdyBzaXplIGdldHMgcG9zaXRpdmUsIHB1c2ggZGVmZXJyZWQgREFUQSBmcmFtZSB0bworICAgICBvdXRib3VuZCBxdWV1ZS4gKi8KKyAgaWYgKHN0cmVhbS0+cmVtb3RlX3dpbmRvd19zaXplID4gMCAmJgorICAgICAgbmdodHRwMl9zdHJlYW1fY2hlY2tfZGVmZXJyZWRfYnlfZmxvd19jb250cm9sKHN0cmVhbSkpIHsKKworICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fcmVzdW1lX2RlZmVycmVkX2l0ZW0oCisgICAgICAgIHN0cmVhbSwgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9GTE9XX0NPTlRST0wpOworCisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKgorICogVXBkYXRlcyB0aGUgcmVtb3RlIGluaXRpYWwgd2luZG93IHNpemUgb2YgYWxsIGFjdGl2ZSBzdHJlYW1zLiAgSWYKKyAqIGVycm9yIG9jY3VycywgYWxsIHN0cmVhbXMgbWF5IG5vdCBiZSB1cGRhdGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW50CitzZXNzaW9uX3VwZGF0ZV9yZW1vdGVfaW5pdGlhbF93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG5ld19pbml0aWFsX3dpbmRvd19zaXplKSB7CisgIG5naHR0cDJfdXBkYXRlX3dpbmRvd19zaXplX2FyZyBhcmc7CisKKyAgYXJnLnNlc3Npb24gPSBzZXNzaW9uOworICBhcmcubmV3X3dpbmRvd19zaXplID0gbmV3X2luaXRpYWxfd2luZG93X3NpemU7CisgIGFyZy5vbGRfd2luZG93X3NpemUgPSAoaW50MzJfdClzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MuaW5pdGlhbF93aW5kb3dfc2l6ZTsKKworICByZXR1cm4gbmdodHRwMl9tYXBfZWFjaCgmc2Vzc2lvbi0+c3RyZWFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3JlbW90ZV9pbml0aWFsX3dpbmRvd19zaXplX2Z1bmMsICZhcmcpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9sb2NhbF9pbml0aWFsX3dpbmRvd19zaXplX2Z1bmMobmdodHRwMl9tYXBfZW50cnkgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB0cikgeworICBpbnQgcnY7CisgIG5naHR0cDJfdXBkYXRlX3dpbmRvd19zaXplX2FyZyAqYXJnOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBhcmcgPSAobmdodHRwMl91cGRhdGVfd2luZG93X3NpemVfYXJnICopcHRyOworICBzdHJlYW0gPSAobmdodHRwMl9zdHJlYW0gKillbnRyeTsKKyAgcnYgPSBuZ2h0dHAyX3N0cmVhbV91cGRhdGVfbG9jYWxfaW5pdGlhbF93aW5kb3dfc2l6ZSgKKyAgICAgIHN0cmVhbSwgYXJnLT5uZXdfd2luZG93X3NpemUsIGFyZy0+b2xkX3dpbmRvd19zaXplKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKGFyZy0+c2Vzc2lvbiwgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUik7CisgIH0KKyAgaWYgKCEoYXJnLT5zZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19XSU5ET1dfVVBEQVRFKSAmJgorICAgICAgc3RyZWFtLT53aW5kb3dfdXBkYXRlX3F1ZXVlZCA9PSAwICYmCisgICAgICBuZ2h0dHAyX3Nob3VsZF9zZW5kX3dpbmRvd191cGRhdGUoc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnJlY3Zfd2luZG93X3NpemUpKSB7CisKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfd2luZG93X3VwZGF0ZShhcmctPnNlc3Npb24sIE5HSFRUUDJfRkxBR19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICBzdHJlYW0tPnJlY3Zfd2luZG93X3NpemUgPSAwOworICB9CisgIHJldHVybiAwOworfQorCisvKgorICogVXBkYXRlcyB0aGUgbG9jYWwgaW5pdGlhbCB3aW5kb3cgc2l6ZSBvZiBhbGwgYWN0aXZlIHN0cmVhbXMuICBJZgorICogZXJyb3Igb2NjdXJzLCBhbGwgc3RyZWFtcyBtYXkgbm90IGJlIHVwZGF0ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQKK3Nlc3Npb25fdXBkYXRlX2xvY2FsX2luaXRpYWxfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG5ld19pbml0aWFsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG9sZF9pbml0aWFsX3dpbmRvd19zaXplKSB7CisgIG5naHR0cDJfdXBkYXRlX3dpbmRvd19zaXplX2FyZyBhcmc7CisgIGFyZy5zZXNzaW9uID0gc2Vzc2lvbjsKKyAgYXJnLm5ld193aW5kb3dfc2l6ZSA9IG5ld19pbml0aWFsX3dpbmRvd19zaXplOworICBhcmcub2xkX3dpbmRvd19zaXplID0gb2xkX2luaXRpYWxfd2luZG93X3NpemU7CisgIHJldHVybiBuZ2h0dHAyX21hcF9lYWNoKCZzZXNzaW9uLT5zdHJlYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfbG9jYWxfaW5pdGlhbF93aW5kb3dfc2l6ZV9mdW5jLCAmYXJnKTsKK30KKworLyoKKyAqIEFwcGx5IFNFVFRJTkdTIHZhbHVlcyB8aXZ8IGhhdmluZyB8bml2fCBlbGVtZW50cyB0byB0aGUgbG9jYWwKKyAqIHNldHRpbmdzLiAgV2UgYXNzdW1lcyB0aGF0IGFsbCB2YWx1ZXMgaW4gfGl2fCBpcyBjb3JyZWN0LCBzaW5jZSB3ZQorICogdmFsaWRhdGVkIHRoZW0gaW4gbmdodHRwMl9zZXNzaW9uX2FkZF9zZXR0aW5ncygpIGFscmVhZHkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUAorICogICAgIFRoZSBoZWFkZXIgdGFibGUgc2l6ZSBpcyBvdXQgb2YgcmFuZ2UKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX3VwZGF0ZV9sb2NhbF9zZXR0aW5ncyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuaXYpIHsKKyAgaW50IHJ2OworICBzaXplX3QgaTsKKyAgaW50MzJfdCBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSA9IC0xOworICB1aW50MzJfdCBoZWFkZXJfdGFibGVfc2l6ZSA9IDA7CisgIHVpbnQzMl90IG1pbl9oZWFkZXJfdGFibGVfc2l6ZSA9IFVJTlQzMl9NQVg7CisgIHVpbnQ4X3QgaGVhZGVyX3RhYmxlX3NpemVfc2VlbiA9IDA7CisgIC8qIEZvciBOR0hUVFAyX1NFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkUsIHVzZSB0aGUgdmFsdWUgbGFzdAorICAgICBzZWVuLiAgRm9yIE5HSFRUUDJfU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkUsIHVzZSBib3RoIG1pbmltdW0KKyAgICAgdmFsdWUgYW5kIGxhc3Qgc2VlbiB2YWx1ZS4gKi8KKyAgZm9yIChpID0gMDsgaSA8IG5pdjsgKytpKSB7CisgICAgc3dpdGNoIChpdltpXS5zZXR0aW5nc19pZCkgeworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRToKKyAgICAgIGhlYWRlcl90YWJsZV9zaXplX3NlZW4gPSAxOworICAgICAgaGVhZGVyX3RhYmxlX3NpemUgPSBpdltpXS52YWx1ZTsKKyAgICAgIG1pbl9oZWFkZXJfdGFibGVfc2l6ZSA9IG5naHR0cDJfbWluKG1pbl9oZWFkZXJfdGFibGVfc2l6ZSwgaXZbaV0udmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkU6CisgICAgICBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSA9IChpbnQzMl90KWl2W2ldLnZhbHVlOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGlmIChoZWFkZXJfdGFibGVfc2l6ZV9zZWVuKSB7CisgICAgaWYgKG1pbl9oZWFkZXJfdGFibGVfc2l6ZSA8IGhlYWRlcl90YWJsZV9zaXplKSB7CisgICAgICBydiA9IG5naHR0cDJfaGRfaW5mbGF0ZV9jaGFuZ2VfdGFibGVfc2l6ZSgmc2Vzc2lvbi0+aGRfaW5mbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5faGVhZGVyX3RhYmxlX3NpemUpOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgIH0KKworICAgIHJ2ID0gbmdodHRwMl9oZF9pbmZsYXRlX2NoYW5nZV90YWJsZV9zaXplKCZzZXNzaW9uLT5oZF9pbmZsYXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfdGFibGVfc2l6ZSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKyAgaWYgKG5ld19pbml0aWFsX3dpbmRvd19zaXplICE9IC0xKSB7CisgICAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9sb2NhbF9pbml0aWFsX3dpbmRvd19zaXplKAorICAgICAgICBzZXNzaW9uLCBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgKGludDMyX3Qpc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MuaW5pdGlhbF93aW5kb3dfc2l6ZSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgbml2OyArK2kpIHsKKyAgICBzd2l0Y2ggKGl2W2ldLnNldHRpbmdzX2lkKSB7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFOgorICAgICAgc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MuaGVhZGVyX3RhYmxlX3NpemUgPSBpdltpXS52YWx1ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfUFVTSDoKKyAgICAgIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmVuYWJsZV9wdXNoID0gaXZbaV0udmFsdWU7CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUzoKKyAgICAgIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXMgPSBpdltpXS52YWx1ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFOgorICAgICAgc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MuaW5pdGlhbF93aW5kb3dfc2l6ZSA9IGl2W2ldLnZhbHVlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9GUkFNRV9TSVpFOgorICAgICAgc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MubWF4X2ZyYW1lX3NpemUgPSBpdltpXS52YWx1ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfSEVBREVSX0xJU1RfU0laRToKKyAgICAgIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLm1heF9oZWFkZXJfbGlzdF9zaXplID0gaXZbaV0udmFsdWU7CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX0NPTk5FQ1RfUFJPVE9DT0w6CisgICAgICBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5lbmFibGVfY29ubmVjdF9wcm90b2NvbCA9IGl2W2ldLnZhbHVlOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fc2V0dGluZ3NfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwgaW50IG5vYWNrKSB7CisgIGludCBydjsKKyAgc2l6ZV90IGk7CisgIG5naHR0cDJfbWVtICptZW07CisgIG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3MgKnNldHRpbmdzOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKGZyYW1lLT5oZC5zdHJlYW1faWQgIT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFVFRJTkdTOiBzdHJlYW1faWQgIT0gMCIpOworICB9CisgIGlmIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfQUNLKSB7CisgICAgaWYgKGZyYW1lLT5zZXR0aW5ncy5uaXYgIT0gMCkgeworICAgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfRlJBTUVfU0laRV9FUlJPUiwKKyAgICAgICAgICAiU0VUVElOR1M6IEFDSyBhbmQgcGF5bG9hZCAhPSAwIik7CisgICAgfQorCisgICAgc2V0dGluZ3MgPSBzZXNzaW9uLT5pbmZsaWdodF9zZXR0aW5nc19oZWFkOworCisgICAgaWYgKCFzZXR0aW5ncykgeworICAgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sICJTRVRUSU5HUzogdW5leHBlY3RlZCBBQ0siKTsKKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl91cGRhdGVfbG9jYWxfc2V0dGluZ3Moc2Vzc2lvbiwgc2V0dGluZ3MtPml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy0+bml2KTsKKworICAgIHNlc3Npb24tPmluZmxpZ2h0X3NldHRpbmdzX2hlYWQgPSBzZXR0aW5ncy0+bmV4dDsKKworICAgIGluZmxpZ2h0X3NldHRpbmdzX2RlbChzZXR0aW5ncywgbWVtKTsKKworICAgIGlmIChydiAhPSAwKSB7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorICAgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbihzZXNzaW9uLCBmcmFtZSwgcnYsIE5VTEwpOworICAgIH0KKyAgICByZXR1cm4gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKKyAgfQorCisgIGlmICghc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzX3JlY2VpdmVkKSB7CisgICAgc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLm1heF9jb25jdXJyZW50X3N0cmVhbXMgPQorICAgICAgICBOR0hUVFAyX0RFRkFVTFRfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUzsKKyAgICBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3NfcmVjZWl2ZWQgPSAxOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8IGZyYW1lLT5zZXR0aW5ncy5uaXY7ICsraSkgeworICAgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKmVudHJ5ID0gJmZyYW1lLT5zZXR0aW5ncy5pdltpXTsKKworICAgIHN3aXRjaCAoZW50cnktPnNldHRpbmdzX2lkKSB7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFOgorCisgICAgICBydiA9IG5naHR0cDJfaGRfZGVmbGF0ZV9jaGFuZ2VfdGFibGVfc2l6ZSgmc2Vzc2lvbi0+aGRfZGVmbGF0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+dmFsdWUpOworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9IRUFERVJfQ09NUCwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLmhlYWRlcl90YWJsZV9zaXplID0gZW50cnktPnZhbHVlOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX1BVU0g6CisKKyAgICAgIGlmIChlbnRyeS0+dmFsdWUgIT0gMCAmJiBlbnRyeS0+dmFsdWUgIT0gMSkgeworICAgICAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAgICAgIlNFVFRJTkdTOiBpbnZhbGlkIFNFVFRJTkdTX0VOQkxFX1BVU0giKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIgJiYgZW50cnktPnZhbHVlICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICJTRVRUSU5HUzogc2VydmVyIGF0dGVtcHRlZCB0byBlbmFibGUgcHVzaCIpOworICAgICAgfQorCisgICAgICBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MuZW5hYmxlX3B1c2ggPSBlbnRyeS0+dmFsdWU7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TOgorCisgICAgICBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtcyA9IGVudHJ5LT52YWx1ZTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkU6CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgaW5pdGlhbCB3aW5kb3cgc2l6ZSBvZiB0aGUgYWxsIGFjdGl2ZSBzdHJlYW1zICovCisgICAgICAvKiBDaGVjayB0aGF0IGluaXRpYWxfd2luZG93X3NpemUgPCAoMXUgPDwgMzEpICovCisgICAgICBpZiAoZW50cnktPnZhbHVlID4gTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUpIHsKKyAgICAgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9GTE9XX0NPTlRST0wsCisgICAgICAgICAgICAiU0VUVElOR1M6IHRvbyBsYXJnZSBTRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFIik7CisgICAgICB9CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfcmVtb3RlX2luaXRpYWxfd2luZG93X3NpemUoc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludDMyX3QpZW50cnktPnZhbHVlKTsKKworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9GTE9XX0NPTlRST0wsIE5VTEwpOworICAgICAgfQorCisgICAgICBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MuaW5pdGlhbF93aW5kb3dfc2l6ZSA9IGVudHJ5LT52YWx1ZTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9GUkFNRV9TSVpFOgorCisgICAgICBpZiAoZW50cnktPnZhbHVlIDwgTkdIVFRQMl9NQVhfRlJBTUVfU0laRV9NSU4gfHwKKyAgICAgICAgICBlbnRyeS0+dmFsdWUgPiBOR0hUVFAyX01BWF9GUkFNRV9TSVpFX01BWCkgeworICAgICAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAgICAgIlNFVFRJTkdTOiBpbnZhbGlkIFNFVFRJTkdTX01BWF9GUkFNRV9TSVpFIik7CisgICAgICB9CisKKyAgICAgIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5tYXhfZnJhbWVfc2l6ZSA9IGVudHJ5LT52YWx1ZTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9IRUFERVJfTElTVF9TSVpFOgorCisgICAgICBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MubWF4X2hlYWRlcl9saXN0X3NpemUgPSBlbnRyeS0+dmFsdWU7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfQ09OTkVDVF9QUk9UT0NPTDoKKworICAgICAgaWYgKGVudHJ5LT52YWx1ZSAhPSAwICYmIGVudHJ5LT52YWx1ZSAhPSAxKSB7CisgICAgICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICAgICAiU0VUVElOR1M6IGludmFsaWQgU0VUVElOR1NfRU5BQkxFX0NPTk5FQ1RfUFJPVE9DT0wiKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIgJiYKKyAgICAgICAgICBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MuZW5hYmxlX2Nvbm5lY3RfcHJvdG9jb2wgJiYKKyAgICAgICAgICBlbnRyeS0+dmFsdWUgPT0gMCkgeworICAgICAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAgICAgIlNFVFRJTkdTOiBzZXJ2ZXIgYXR0ZW1wdGVkIHRvIGRpc2FibGUgIgorICAgICAgICAgICAgIlNFVFRJTkdTX0VOQUJMRV9DT05ORUNUX1BST1RPQ09MIik7CisgICAgICB9CisKKyAgICAgIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5lbmFibGVfY29ubmVjdF9wcm90b2NvbCA9IGVudHJ5LT52YWx1ZTsKKworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgaWYgKCFub2FjayAmJiAhc2Vzc2lvbl9pc19jbG9zaW5nKHNlc3Npb24pKSB7CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3NldHRpbmdzKHNlc3Npb24sIE5HSFRUUDJfRkxBR19BQ0ssIE5VTEwsIDApOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oc2Vzc2lvbiwgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRVJSX0lOVEVSTkFMLCBOVUxMKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gc2Vzc2lvbl9jYWxsX29uX2ZyYW1lX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3Nfc2V0dGluZ3NfZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWUgPSAmaWZyYW1lLT5mcmFtZTsKKyAgc2l6ZV90IGk7CisgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgbWluX2hlYWRlcl9zaXplX2VudHJ5OworCisgIGlmIChpZnJhbWUtPm1heF9uaXYpIHsKKyAgICBtaW5faGVhZGVyX3NpemVfZW50cnkgPSBpZnJhbWUtPml2W2lmcmFtZS0+bWF4X25pdiAtIDFdOworCisgICAgaWYgKG1pbl9oZWFkZXJfc2l6ZV9lbnRyeS52YWx1ZSA8IFVJTlQzMl9NQVgpIHsKKyAgICAgIC8qIElmIHdlIGhhdmUgbGVzcyB2YWx1ZSwgdGhlbiB3ZSBtdXN0IGhhdmUKKyAgICAgICAgIFNFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFIGluIGkgPCBpZnJhbWUtPm5pdiAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGlmcmFtZS0+bml2OyArK2kpIHsKKyAgICAgICAgaWYgKGlmcmFtZS0+aXZbaV0uc2V0dGluZ3NfaWQgPT0gTkdIVFRQMl9TRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRSkgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGFzc2VydChpIDwgaWZyYW1lLT5uaXYpOworCisgICAgICBpZiAobWluX2hlYWRlcl9zaXplX2VudHJ5LnZhbHVlICE9IGlmcmFtZS0+aXZbaV0udmFsdWUpIHsKKyAgICAgICAgaWZyYW1lLT5pdltpZnJhbWUtPm5pdisrXSA9IGlmcmFtZS0+aXZbaV07CisgICAgICAgIGlmcmFtZS0+aXZbaV0gPSBtaW5faGVhZGVyX3NpemVfZW50cnk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgbmdodHRwMl9mcmFtZV91bnBhY2tfc2V0dGluZ3NfcGF5bG9hZCgmZnJhbWUtPnNldHRpbmdzLCBpZnJhbWUtPml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS0+bml2KTsKKworICBpZnJhbWUtPml2ID0gTlVMTDsKKyAgaWZyYW1lLT5uaXYgPSAwOworICBpZnJhbWUtPm1heF9uaXYgPSAwOworCisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fb25fc2V0dGluZ3NfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUsIDAgLyogQUNLICovKTsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9wdXNoX3Byb21pc2VfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBuZ2h0dHAyX3N0cmVhbSAqcHJvbWlzZWRfc3RyZWFtOworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgcHJpX3NwZWM7CisKKyAgaWYgKGZyYW1lLT5oZC5zdHJlYW1faWQgPT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLCAiUFVTSF9QUk9NSVNFOiBzdHJlYW1faWQgPT0gMCIpOworICB9CisgIGlmIChzZXNzaW9uLT5zZXJ2ZXIgfHwgc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MuZW5hYmxlX3B1c2ggPT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2luZmxhdGVfaGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLCAiUFVTSF9QUk9NSVNFOiBwdXNoIGRpc2FibGVkIik7CisgIH0KKworICBpZiAoIW5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywgIlBVU0hfUFJPTUlTRTogaW52YWxpZCBzdHJlYW1faWQiKTsKKyAgfQorCisgIGlmICghc2Vzc2lvbl9hbGxvd19pbmNvbWluZ19uZXdfc3RyZWFtKHNlc3Npb24pKSB7CisgICAgLyogV2UganVzdCBkaXNjYXJkIFBVU0hfUFJPTUlTRSBhZnRlciBHT0FXQVkgd2FzIHNlbnQgKi8KKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSzsKKyAgfQorCisgIGlmICghc2Vzc2lvbl9pc19uZXdfcGVlcl9zdHJlYW1faWQoc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+cHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZCkpIHsKKyAgICAvKiBUaGUgc3BlYyBzYXlzIGlmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGEgUFVTSF9QUk9NSVNFIHdpdGgKKyAgICAgICBpbGxlZ2FsIHN0cmVhbSBJRCBpcyBzdWJqZWN0IHRvIGEgY29ubmVjdGlvbiBlcnJvciBvZiB0eXBlCisgICAgICAgUFJPVE9DT0xfRVJST1IuICovCisgICAgcmV0dXJuIHNlc3Npb25faW5mbGF0ZV9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICJQVVNIX1BST01JU0U6IGludmFsaWQgcHJvbWlzZWRfc3RyZWFtX2lkIik7CisgIH0KKworICBpZiAoc2Vzc2lvbl9kZXRlY3RfaWRsZV9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywgIlBVU0hfUFJPTUlTRTogc3RyZWFtIGluIGlkbGUiKTsKKyAgfQorCisgIHNlc3Npb24tPmxhc3RfcmVjdl9zdHJlYW1faWQgPSBmcmFtZS0+cHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZDsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgIGlmICghc3RyZWFtIHx8IHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fQ0xPU0lORyB8fAorICAgICAgIXNlc3Npb24tPnBlbmRpbmdfZW5hYmxlX3B1c2ggfHwKKyAgICAgIHNlc3Npb24tPm51bV9pbmNvbWluZ19yZXNlcnZlZF9zdHJlYW1zID49CisgICAgICAgICAgc2Vzc2lvbi0+bWF4X2luY29taW5nX3Jlc2VydmVkX3N0cmVhbXMpIHsKKyAgICAvKiBDdXJyZW50bHksIGNsaWVudCBkb2VzIG5vdCByZXRhaW4gY2xvc2VkIHN0cmVhbSwgc28gd2UgZG9uJ3QKKyAgICAgICBjaGVjayBOR0hUVFAyX1NIVVRfUkQgY29uZGl0aW9uIGhlcmUuICovCisKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbSgKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUtPnB1c2hfcHJvbWlzZS5wcm9taXNlZF9zdHJlYW1faWQsIE5HSFRUUDJfQ0FOQ0VMKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSzsKKyAgfQorCisgIGlmIChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfUkQpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9pbmZsYXRlX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oCisgICAgICAgIHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9TVFJFQU1fQ0xPU0VELAorICAgICAgICAiUFVTSF9QUk9NSVNFOiBzdHJlYW0gY2xvc2VkIik7CisgIH0KKworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfaW5pdCgmcHJpX3NwZWMsIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0RFRkFVTFRfV0VJR0hULCAwKTsKKworICBwcm9taXNlZF9zdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0oCisgICAgICBzZXNzaW9uLCBmcmFtZS0+cHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZCwgTkdIVFRQMl9TVFJFQU1fRkxBR19OT05FLAorICAgICAgJnByaV9zcGVjLCBOR0hUVFAyX1NUUkVBTV9SRVNFUlZFRCwgTlVMTCk7CisKKyAgaWYgKCFwcm9taXNlZF9zdHJlYW0pIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICAvKiBXZSBkb24ndCBjYWxsIG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfY2xvc2VkX3N0cmVhbSgpLCBzaW5jZSB3ZQorICAgICBkb24ndCBrZWVwIGNsb3NlZCBzdHJlYW0gaW4gY2xpZW50IHNpZGUgKi8KKworICBzZXNzaW9uLT5sYXN0X3Byb2Nfc3RyZWFtX2lkID0gc2Vzc2lvbi0+bGFzdF9yZWN2X3N0cmVhbV9pZDsKKyAgcnYgPSBzZXNzaW9uX2NhbGxfb25fYmVnaW5faGVhZGVycyhzZXNzaW9uLCBmcmFtZSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fcHJvY2Vzc19wdXNoX3Byb21pc2VfZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWUgPSAmc2Vzc2lvbi0+aWZyYW1lOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSA9ICZpZnJhbWUtPmZyYW1lOworCisgIHJ2ID0gbmdodHRwMl9mcmFtZV91bnBhY2tfcHVzaF9wcm9taXNlX3BheWxvYWQoJmZyYW1lLT5wdXNoX3Byb21pc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLT5zYnVmLnBvcyk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX1BST1RPQ09MX0VSUk9SLCAiUFVTSF9QUk9NSVNFOiBjb3VsZCBub3QgdW5wYWNrIik7CisgIH0KKworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX29uX3B1c2hfcHJvbWlzZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcGluZ19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpIHsKKyAgaW50IHJ2ID0gMDsKKyAgaWYgKGZyYW1lLT5oZC5zdHJlYW1faWQgIT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBJTkc6IHN0cmVhbV9pZCAhPSAwIik7CisgIH0KKyAgaWYgKChzZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19QSU5HX0FDSykgPT0gMCAmJgorICAgICAgKGZyYW1lLT5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19BQ0spID09IDAgJiYKKyAgICAgICFzZXNzaW9uX2lzX2Nsb3Npbmcoc2Vzc2lvbikpIHsKKyAgICAvKiBQZWVyIHNlbnQgcGluZywgc28gcGluZyBpdCBiYWNrICovCisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3Bpbmcoc2Vzc2lvbiwgTkdIVFRQMl9GTEFHX0FDSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+cGluZy5vcGFxdWVfZGF0YSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHNlc3Npb25fY2FsbF9vbl9mcmFtZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcm9jZXNzX3BpbmdfZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWUgPSAmaWZyYW1lLT5mcmFtZTsKKworICBuZ2h0dHAyX2ZyYW1lX3VucGFja19waW5nX3BheWxvYWQoJmZyYW1lLT5waW5nLCBpZnJhbWUtPnNidWYucG9zKTsKKworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX29uX3BpbmdfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX2dvYXdheV9yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICBpbnQgcnY7CisKKyAgaWYgKGZyYW1lLT5oZC5zdHJlYW1faWQgIT0gMCkgeworICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdPQVdBWTogc3RyZWFtX2lkICE9IDAiKTsKKyAgfQorICAvKiBTcGVjIHNheXMgRW5kcG9pbnRzIE1VU1QgTk9UIGluY3JlYXNlIHRoZSB2YWx1ZSB0aGV5IHNlbmQgaW4gdGhlCisgICAgIGxhc3Qgc3RyZWFtIGlkZW50aWZpZXIuICovCisgIGlmICgoZnJhbWUtPmdvYXdheS5sYXN0X3N0cmVhbV9pZCA+IDAgJiYKKyAgICAgICAhbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5nb2F3YXkubGFzdF9zdHJlYW1faWQpKSB8fAorICAgICAgc2Vzc2lvbi0+cmVtb3RlX2xhc3Rfc3RyZWFtX2lkIDwgZnJhbWUtPmdvYXdheS5sYXN0X3N0cmVhbV9pZCkgeworICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX2Nvbm5lY3Rpb24oc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdPQVdBWTogaW52YWxpZCBsYXN0X3N0cmVhbV9pZCIpOworICB9CisKKyAgc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzIHw9IE5HSFRUUDJfR09BV0FZX1JFQ1Y7CisKKyAgc2Vzc2lvbi0+cmVtb3RlX2xhc3Rfc3RyZWFtX2lkID0gZnJhbWUtPmdvYXdheS5sYXN0X3N0cmVhbV9pZDsKKworICBydiA9IHNlc3Npb25fY2FsbF9vbl9mcmFtZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7CisKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIHNlc3Npb25fY2xvc2Vfc3RyZWFtX29uX2dvYXdheShzZXNzaW9uLCBmcmFtZS0+Z29hd2F5Lmxhc3Rfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fcHJvY2Vzc19nb2F3YXlfZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWUgPSAmaWZyYW1lLT5mcmFtZTsKKworICBuZ2h0dHAyX2ZyYW1lX3VucGFja19nb2F3YXlfcGF5bG9hZCgmZnJhbWUtPmdvYXdheSwgaWZyYW1lLT5zYnVmLnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLT5sYnVmLnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9idWZfbGVuKCZpZnJhbWUtPmxidWYpKTsKKworICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJmlmcmFtZS0+bGJ1ZiwgTlVMTCwgMCk7CisKKyAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9vbl9nb2F3YXlfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitzdGF0aWMgaW50CitzZXNzaW9uX29uX2Nvbm5lY3Rpb25fd2luZG93X3VwZGF0ZV9yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSkgeworICAvKiBIYW5kbGUgY29ubmVjdGlvbi1sZXZlbCBmbG93IGNvbnRyb2wgKi8KKyAgaWYgKGZyYW1lLT53aW5kb3dfdXBkYXRlLndpbmRvd19zaXplX2luY3JlbWVudCA9PSAwKSB7CisgICAgcmV0dXJuIHNlc3Npb25faGFuZGxlX2ludmFsaWRfY29ubmVjdGlvbigKKyAgICAgICAgc2Vzc2lvbiwgZnJhbWUsIE5HSFRUUDJfRVJSX1BST1RPLAorICAgICAgICAiV0lORE9XX1VQREFURTogd2luZG93X3NpemVfaW5jcmVtZW50ID09IDAiKTsKKyAgfQorCisgIGlmIChOR0hUVFAyX01BWF9XSU5ET1dfU0laRSAtIGZyYW1lLT53aW5kb3dfdXBkYXRlLndpbmRvd19zaXplX2luY3JlbWVudCA8CisgICAgICBzZXNzaW9uLT5yZW1vdGVfd2luZG93X3NpemUpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MLCBOVUxMKTsKKyAgfQorICBzZXNzaW9uLT5yZW1vdGVfd2luZG93X3NpemUgKz0gZnJhbWUtPndpbmRvd191cGRhdGUud2luZG93X3NpemVfaW5jcmVtZW50OworCisgIHJldHVybiBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fb25fc3RyZWFtX3dpbmRvd191cGRhdGVfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKworICBpZiAoc2Vzc2lvbl9kZXRlY3RfaWRsZV9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCkpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKHNlc3Npb24sIGZyYW1lLCBOR0hUVFAyX0VSUl9QUk9UTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSU5ET1dfVVBEQVRFIHRvIGlkbGUgc3RyZWFtIik7CisgIH0KKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBmcmFtZS0+aGQuc3RyZWFtX2lkKTsKKyAgaWYgKCFzdHJlYW0pIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoc3RhdGVfcmVzZXJ2ZWRfcmVtb3RlKHNlc3Npb24sIHN0cmVhbSkpIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sICJXSU5ET1dfVVBBREFURSB0byByZXNlcnZlZCBzdHJlYW0iKTsKKyAgfQorICBpZiAoZnJhbWUtPndpbmRvd191cGRhdGUud2luZG93X3NpemVfaW5jcmVtZW50ID09IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9oYW5kbGVfaW52YWxpZF9jb25uZWN0aW9uKAorICAgICAgICBzZXNzaW9uLCBmcmFtZSwgTkdIVFRQMl9FUlJfUFJPVE8sCisgICAgICAgICJXSU5ET1dfVVBEQVRFOiB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPT0gMCIpOworICB9CisgIGlmIChOR0hUVFAyX01BWF9XSU5ET1dfU0laRSAtIGZyYW1lLT53aW5kb3dfdXBkYXRlLndpbmRvd19zaXplX2luY3JlbWVudCA8CisgICAgICBzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSkgeworICAgIHJldHVybiBzZXNzaW9uX2hhbmRsZV9pbnZhbGlkX3N0cmVhbShzZXNzaW9uLCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9FUlJfRkxPV19DT05UUk9MKTsKKyAgfQorICBzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSArPSBmcmFtZS0+d2luZG93X3VwZGF0ZS53aW5kb3dfc2l6ZV9pbmNyZW1lbnQ7CisKKyAgaWYgKHN0cmVhbS0+cmVtb3RlX3dpbmRvd19zaXplID4gMCAmJgorICAgICAgbmdodHRwMl9zdHJlYW1fY2hlY2tfZGVmZXJyZWRfYnlfZmxvd19jb250cm9sKHN0cmVhbSkpIHsKKworICAgIHJ2ID0gbmdodHRwMl9zdHJlYW1fcmVzdW1lX2RlZmVycmVkX2l0ZW0oCisgICAgICAgIHN0cmVhbSwgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9GTE9XX0NPTlRST0wpOworCisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisgIHJldHVybiBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3dpbmRvd191cGRhdGVfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gc2Vzc2lvbl9vbl9jb25uZWN0aW9uX3dpbmRvd191cGRhdGVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworICB9IGVsc2UgeworICAgIHJldHVybiBzZXNzaW9uX29uX3N0cmVhbV93aW5kb3dfdXBkYXRlX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKKyAgfQorfQorCitzdGF0aWMgaW50IHNlc3Npb25fcHJvY2Vzc193aW5kb3dfdXBkYXRlX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisKKyAgbmdodHRwMl9mcmFtZV91bnBhY2tfd2luZG93X3VwZGF0ZV9wYXlsb2FkKCZmcmFtZS0+d2luZG93X3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS0+c2J1Zi5wb3MpOworCisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fb25fd2luZG93X3VwZGF0ZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fYWx0c3ZjX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIG5naHR0cDJfZXh0X2FsdHN2YyAqYWx0c3ZjOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIGFsdHN2YyA9IGZyYW1lLT5leHQucGF5bG9hZDsKKworICAvKiBzZXNzaW9uLT5zZXJ2ZXIgY2FzZSBoYXMgYmVlbiBleGNsdWRlZCAqLworCisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID09IDApIHsKKyAgICBpZiAoYWx0c3ZjLT5vcmlnaW5fbGVuID09IDApIHsKKyAgICAgIHJldHVybiBzZXNzaW9uX2NhbGxfb25faW52YWxpZF9mcmFtZV9yZWN2X2NhbGxiYWNrKHNlc3Npb24sIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9FUlJfUFJPVE8pOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoYWx0c3ZjLT5vcmlnaW5fbGVuID4gMCkgeworICAgICAgcmV0dXJuIHNlc3Npb25fY2FsbF9vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2soc2Vzc2lvbiwgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0VSUl9QUk9UTyk7CisgICAgfQorCisgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgZnJhbWUtPmhkLnN0cmVhbV9pZCk7CisgICAgaWYgKCFzdHJlYW0pIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIGlmIChhbHRzdmMtPmZpZWxkX3ZhbHVlX2xlbiA9PSAwKSB7CisgICAgcmV0dXJuIHNlc3Npb25fY2FsbF9vbl9pbnZhbGlkX2ZyYW1lX3JlY3ZfY2FsbGJhY2soc2Vzc2lvbiwgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9FUlJfUFJPVE8pOworICB9CisKKyAgcmV0dXJuIHNlc3Npb25fY2FsbF9vbl9mcmFtZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fb3JpZ2luX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIHJldHVybiBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fcHJvY2Vzc19hbHRzdmNfZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWUgPSAmaWZyYW1lLT5mcmFtZTsKKworICBuZ2h0dHAyX2ZyYW1lX3VucGFja19hbHRzdmNfcGF5bG9hZCgKKyAgICAgICZmcmFtZS0+ZXh0LCBuZ2h0dHAyX2dldF91aW50MTYoaWZyYW1lLT5zYnVmLnBvcyksIGlmcmFtZS0+bGJ1Zi5wb3MsCisgICAgICBuZ2h0dHAyX2J1Zl9sZW4oJmlmcmFtZS0+bGJ1ZikpOworCisgIC8qIG5naHR0cDJfZnJhbWVfdW5wYWNrX2FsdHN2Y19wYXlsb2FkIHN0ZWFscyBidWZmZXIgZnJvbQorICAgICBpZnJhbWUtPmxidWYgKi8KKyAgbmdodHRwMl9idWZfd3JhcF9pbml0KCZpZnJhbWUtPmxidWYsIE5VTEwsIDApOworCisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fb25fYWx0c3ZjX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3Nfb3JpZ2luX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSA9ICZzZXNzaW9uLT5pZnJhbWU7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gJmlmcmFtZS0+ZnJhbWU7CisgIG5naHR0cDJfbWVtICptZW0gPSAmc2Vzc2lvbi0+bWVtOworICBpbnQgcnY7CisKKyAgcnYgPSBuZ2h0dHAyX2ZyYW1lX3VucGFja19vcmlnaW5fcGF5bG9hZCgmZnJhbWUtPmV4dCwgaWZyYW1lLT5sYnVmLnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2J1Zl9sZW4oJmlmcmFtZS0+bGJ1ZiksIG1lbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICAgIC8qIElnbm9yZSBPUklHSU4gZnJhbWUgd2hpY2ggY2Fubm90IGJlIHBhcnNlZC4gKi8KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fb25fb3JpZ2luX3JlY2VpdmVkKHNlc3Npb24sIGZyYW1lKTsKK30KKworc3RhdGljIGludCBzZXNzaW9uX3Byb2Nlc3NfZXh0ZW5zaW9uX2ZyYW1lKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpbnQgcnY7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWUgPSAmaWZyYW1lLT5mcmFtZTsKKworICBydiA9IHNlc3Npb25fY2FsbF91bnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKHNlc3Npb24pOworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICAvKiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgcnYgPT0gTkdIVFRQMl9FUlJfQ0FOQ0VMIGFzIHdlbGwgKi8KKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBzZXNzaW9uX2NhbGxfb25fZnJhbWVfcmVjZWl2ZWQoc2Vzc2lvbiwgZnJhbWUpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX2RhdGFfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKSB7CisgIGludCBydiA9IDA7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgLyogV2UgZG9uJ3QgY2FsbCBvbl9mcmFtZV9yZWN2X2NhbGxiYWNrIGlmIHN0cmVhbSBoYXMgYmVlbiBjbG9zZWQKKyAgICAgYWxyZWFkeSBvciBiZWluZyBjbG9zZWQuICovCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQpOworICBpZiAoIXN0cmVhbSB8fCBzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICAvKiBUaGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIHN0cmVhbSBlcnJvciwgYnV0IGl0IHJlc3VsdHMgaW4gbG90cworICAgICAgIG9mIFJTVF9TVFJFQU0uIFNvIGp1c3QgaWdub3JlIGZyYW1lIGFnYWluc3Qgbm9uZXhpc3RlbnQgc3RyZWFtCisgICAgICAgZm9yIG5vdy4gKi8KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChzZXNzaW9uX2VuZm9yY2VfaHR0cF9tZXNzYWdpbmcoc2Vzc2lvbikgJiYKKyAgICAgIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkpIHsKKyAgICBpZiAobmdodHRwMl9odHRwX29uX3JlbW90ZV9lbmRfc3RyZWFtKHN0cmVhbSkgIT0gMCkgeworICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX1BST1RPQ09MX0VSUk9SKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1JEKTsKKyAgICAgIC8qIERvbid0IGNhbGwgbmdodHRwMl9zZXNzaW9uX2Nsb3NlX3N0cmVhbV9pZl9zaHV0X3Jkd3IgYmVjYXVzZQorICAgICAgICAgUlNUX1NUUkVBTSBoYXMgYmVlbiBzdWJtaXR0ZWQuICovCisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBydiA9IHNlc3Npb25fY2FsbF9vbl9mcmFtZV9yZWNlaXZlZChzZXNzaW9uLCBmcmFtZSk7CisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIGlmIChmcmFtZS0+aGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkgeworICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1JEKTsKKyAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9jbG9zZV9zdHJlYW1faWZfc2h1dF9yZHdyKHNlc3Npb24sIHN0cmVhbSk7CisgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBGb3IgZXJyb3JzLCB0aGlzIGZ1bmN0aW9uIG9ubHkgcmV0dXJucyBGQVRBTCBlcnJvci4gKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl9wcm9jZXNzX2RhdGFfZnJhbWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9mcmFtZSAqcHVibGljX2RhdGFfZnJhbWUgPSAmc2Vzc2lvbi0+aWZyYW1lLmZyYW1lOworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9vbl9kYXRhX3JlY2VpdmVkKHNlc3Npb24sIHB1YmxpY19kYXRhX2ZyYW1lKTsKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIHJldHVybiAwOworfQorCisvKgorICogTm93IHdlIGhhdmUgU0VUVElOR1Mgc3luY2hyb25pemF0aW9uLCBmbG93IGNvbnRyb2wgZXJyb3IgY2FuIGJlCisgKiBkZXRlY3RlZCBzdHJpY3RseS4gSWYgREFUQSBmcmFtZSBpcyByZWNlaXZlZCB3aXRoIGxlbmd0aCA+IDAgYW5kCisgKiBjdXJyZW50IHJlY2VpdmVkIHdpbmRvdyBzaXplICsgZGVsdGEgbGVuZ3RoIGlzIHN0cmljdGx5IGxhcmdlciB0aGFuCisgKiBsb2NhbCB3aW5kb3cgc2l6ZSwgaXQgaXMgc3ViamVjdCB0byBGTE9XX0NPTlRST0xfRVJST1IsIHNvIHJldHVybgorICogLTEuIE5vdGUgdGhhdCBsb2NhbF93aW5kb3dfc2l6ZSBpcyBjYWxjdWxhdGVkIGFmdGVyIFNFVFRJTkdTIEFDSyBpcworICogcmVjZWl2ZWQgZnJvbSBwZWVyLCBzbyBwZWVyIG11c3QgaG9ub3IgdGhpcyBsaW1pdC4gSWYgdGhlIHJlc3VsdGluZworICogcmVjdl93aW5kb3dfc2l6ZSBpcyBzdHJpY3RseSBsYXJnZXIgdGhhbiBOR0hUVFAyX01BWF9XSU5ET1dfU0laRSwKKyAqIHJldHVybiAtMSB0b28uCisgKi8KK3N0YXRpYyBpbnQgYWRqdXN0X3JlY3Zfd2luZG93X3NpemUoaW50MzJfdCAqcmVjdl93aW5kb3dfc2l6ZV9wdHIsIHNpemVfdCBkZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsb2NhbF93aW5kb3dfc2l6ZSkgeworICBpZiAoKnJlY3Zfd2luZG93X3NpemVfcHRyID4gbG9jYWxfd2luZG93X3NpemUgLSAoaW50MzJfdClkZWx0YSB8fAorICAgICAgKnJlY3Zfd2luZG93X3NpemVfcHRyID4gTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUgLSAoaW50MzJfdClkZWx0YSkgeworICAgIHJldHVybiAtMTsKKyAgfQorICAqcmVjdl93aW5kb3dfc2l6ZV9wdHIgKz0gKGludDMyX3QpZGVsdGE7CisgIHJldHVybiAwOworfQorCisvKgorICogQWNjdW11bGF0ZXMgcmVjZWl2ZWQgYnl0ZXMgfGRlbHRhX3NpemV8IGZvciBzdHJlYW0tbGV2ZWwgZmxvdworICogY29udHJvbCBhbmQgZGVjaWRlcyB3aGV0aGVyIHRvIHNlbmQgV0lORE9XX1VQREFURSB0byB0aGF0IHN0cmVhbS4KKyAqIElmIE5HSFRUUDJfT1BUX05PX0FVVE9fV0lORE9XX1VQREFURSBpcyBzZXQsIFdJTkRPV19VUERBVEUgd2lsbCBub3QKKyAqIGJlIHNlbnQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbl91cGRhdGVfcmVjdl9zdHJlYW1fd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVsdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlbmRfd2luZG93X3VwZGF0ZSkgeworICBpbnQgcnY7CisgIHJ2ID0gYWRqdXN0X3JlY3Zfd2luZG93X3NpemUoJnN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZSwgZGVsdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPmxvY2FsX3dpbmRvd19zaXplKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKHNlc3Npb24sIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9GTE9XX0NPTlRST0xfRVJST1IpOworICB9CisgIC8qIFdlIGRvbid0IGhhdmUgdG8gc2VuZCBXSU5ET1dfVVBEQVRFIGlmIHRoZSBkYXRhIHJlY2VpdmVkIGlzIHRoZQorICAgICBsYXN0IGNodW5rIGluIHRoZSBpbmNvbWluZyBzdHJlYW0uICovCisgIC8qIFdlIGhhdmUgdG8gdXNlIGxvY2FsX3NldHRpbmdzIGhlcmUgYmVjYXVzZSBpdCBpcyB0aGUgY29uc3RyYWludAorICAgICB0aGUgcmVtb3RlIGVuZHBvaW50IHNob3VsZCBob25vci4gKi8KKyAgaWYgKHNlbmRfd2luZG93X3VwZGF0ZSAmJgorICAgICAgIShzZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19XSU5ET1dfVVBEQVRFKSAmJgorICAgICAgc3RyZWFtLT53aW5kb3dfdXBkYXRlX3F1ZXVlZCA9PSAwICYmCisgICAgICBuZ2h0dHAyX3Nob3VsZF9zZW5kX3dpbmRvd191cGRhdGUoc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnJlY3Zfd2luZG93X3NpemUpKSB7CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3dpbmRvd191cGRhdGUoc2Vzc2lvbiwgTkdIVFRQMl9GTEFHX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIHN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZSA9IDA7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBY2N1bXVsYXRlcyByZWNlaXZlZCBieXRlcyB8ZGVsdGFfc2l6ZXwgZm9yIGNvbm5lY3Rpb24tbGV2ZWwgZmxvdworICogY29udHJvbCBhbmQgZGVjaWRlcyB3aGV0aGVyIHRvIHNlbmQgV0lORE9XX1VQREFURSB0byB0aGUKKyAqIGNvbm5lY3Rpb24uICBJZiBOR0hUVFAyX09QVF9OT19BVVRPX1dJTkRPV19VUERBVEUgaXMgc2V0LAorICogV0lORE9XX1VQREFURSB3aWxsIG5vdCBiZSBzZW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW50IHNlc3Npb25fdXBkYXRlX3JlY3ZfY29ubmVjdGlvbl93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVsdGFfc2l6ZSkgeworICBpbnQgcnY7CisgIHJ2ID0gYWRqdXN0X3JlY3Zfd2luZG93X3NpemUoJnNlc3Npb24tPnJlY3Zfd2luZG93X3NpemUsIGRlbHRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+bG9jYWxfd2luZG93X3NpemUpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb24oc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SKTsKKyAgfQorICBpZiAoIShzZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19XSU5ET1dfVVBEQVRFKSAmJgorICAgICAgc2Vzc2lvbi0+d2luZG93X3VwZGF0ZV9xdWV1ZWQgPT0gMCAmJgorICAgICAgbmdodHRwMl9zaG91bGRfc2VuZF93aW5kb3dfdXBkYXRlKHNlc3Npb24tPmxvY2FsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnJlY3Zfd2luZG93X3NpemUpKSB7CisgICAgLyogVXNlIHN0cmVhbSBJRCAwIHRvIHVwZGF0ZSBjb25uZWN0aW9uLWxldmVsIGZsb3cgY29udHJvbAorICAgICAgIHdpbmRvdyAqLworICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF93aW5kb3dfdXBkYXRlKHNlc3Npb24sIE5HSFRUUDJfRkxBR19OT05FLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnJlY3Zfd2luZG93X3NpemUpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgc2Vzc2lvbi0+cmVjdl93aW5kb3dfc2l6ZSA9IDA7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl91cGRhdGVfY29uc3VtZWRfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqY29uc3VtZWRfc2l6ZV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqcmVjdl93aW5kb3dfc2l6ZV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB3aW5kb3dfdXBkYXRlX3F1ZXVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwgc2l6ZV90IGRlbHRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsb2NhbF93aW5kb3dfc2l6ZSkgeworICBpbnQzMl90IHJlY3Zfc2l6ZTsKKyAgaW50IHJ2OworCisgIGlmICgoc2l6ZV90KSpjb25zdW1lZF9zaXplX3B0ciA+IE5HSFRUUDJfTUFYX1dJTkRPV19TSVpFIC0gZGVsdGFfc2l6ZSkgeworICAgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb24oc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SKTsKKyAgfQorCisgICpjb25zdW1lZF9zaXplX3B0ciArPSAoaW50MzJfdClkZWx0YV9zaXplOworCisgIGlmICh3aW5kb3dfdXBkYXRlX3F1ZXVlZCA9PSAwKSB7CisgICAgLyogcmVjdl93aW5kb3dfc2l6ZSBtYXkgYmUgc21hbGxlciB0aGFuIGNvbnN1bWVkX3NpemUsIGJlY2F1c2UgaXQKKyAgICAgICBtYXkgYmUgZGVjcmVhc2VkIGJ5IG5lZ2F0aXZlIHZhbHVlIHdpdGgKKyAgICAgICBuZ2h0dHAyX3N1Ym1pdF93aW5kb3dfdXBkYXRlKCkuICovCisgICAgcmVjdl9zaXplID0gbmdodHRwMl9taW4oKmNvbnN1bWVkX3NpemVfcHRyLCAqcmVjdl93aW5kb3dfc2l6ZV9wdHIpOworCisgICAgaWYgKG5naHR0cDJfc2hvdWxkX3NlbmRfd2luZG93X3VwZGF0ZShsb2NhbF93aW5kb3dfc2l6ZSwgcmVjdl9zaXplKSkgeworICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3dpbmRvd191cGRhdGUoc2Vzc2lvbiwgTkdIVFRQMl9GTEFHX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1faWQsIHJlY3Zfc2l6ZSk7CisKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgKnJlY3Zfd2luZG93X3NpemVfcHRyIC09IHJlY3Zfc2l6ZTsKKyAgICAgICpjb25zdW1lZF9zaXplX3B0ciAtPSByZWN2X3NpemU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl91cGRhdGVfc3RyZWFtX2NvbnN1bWVkX3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVsdGFfc2l6ZSkgeworICByZXR1cm4gc2Vzc2lvbl91cGRhdGVfY29uc3VtZWRfc2l6ZSgKKyAgICAgIHNlc3Npb24sICZzdHJlYW0tPmNvbnN1bWVkX3NpemUsICZzdHJlYW0tPnJlY3Zfd2luZG93X3NpemUsCisgICAgICBzdHJlYW0tPndpbmRvd191cGRhdGVfcXVldWVkLCBzdHJlYW0tPnN0cmVhbV9pZCwgZGVsdGFfc2l6ZSwKKyAgICAgIHN0cmVhbS0+bG9jYWxfd2luZG93X3NpemUpOworfQorCitzdGF0aWMgaW50IHNlc3Npb25fdXBkYXRlX2Nvbm5lY3Rpb25fY29uc3VtZWRfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVsdGFfc2l6ZSkgeworICByZXR1cm4gc2Vzc2lvbl91cGRhdGVfY29uc3VtZWRfc2l6ZSgKKyAgICAgIHNlc3Npb24sICZzZXNzaW9uLT5jb25zdW1lZF9zaXplLCAmc2Vzc2lvbi0+cmVjdl93aW5kb3dfc2l6ZSwKKyAgICAgIHNlc3Npb24tPndpbmRvd191cGRhdGVfcXVldWVkLCAwLCBkZWx0YV9zaXplLCBzZXNzaW9uLT5sb2NhbF93aW5kb3dfc2l6ZSk7Cit9CisKKy8qCisgKiBDaGVja3MgdGhhdCB3ZSBjYW4gcmVjZWl2ZSB0aGUgREFUQSBmcmFtZSBmb3Igc3RyZWFtLCB3aGljaCBpcworICogaW5kaWNhdGVkIGJ5IHxzZXNzaW9uLT5pZnJhbWUuZnJhbWUuaGQuc3RyZWFtX2lkfC4gSWYgaXQgaXMgYQorICogY29ubmVjdGlvbiBlcnJvciBzaXR1YXRpb24sIEdPQVdBWSBmcmFtZSB3aWxsIGJlIGlzc3VlZCBieSB0aGlzCisgKiBmdW5jdGlvbi4KKyAqCisgKiBJZiB0aGUgREFUQSBmcmFtZSBpcyBhbGxvd2VkLCByZXR1cm5zIDAuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9JR05fUEFZTE9BRAorICogICBUaGUgcmVjZXB0aW9uIG9mIERBVEEgZnJhbWUgaXMgY29ubmVjdGlvbiBlcnJvcjsgb3Igc2hvdWxkIGJlCisgKiAgIGlnbm9yZWQuCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICBPdXQgb2YgbWVtb3J5LgorICovCitzdGF0aWMgaW50IHNlc3Npb25fb25fZGF0YV9yZWNlaXZlZF9mYWlsX2Zhc3QobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgbmdodHRwMl9pbmJvdW5kX2ZyYW1lICppZnJhbWU7CisgIGludDMyX3Qgc3RyZWFtX2lkOworICBjb25zdCBjaGFyICpmYWlsdXJlX3JlYXNvbjsKKyAgdWludDMyX3QgZXJyb3JfY29kZSA9IE5HSFRUUDJfUFJPVE9DT0xfRVJST1I7CisKKyAgaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgc3RyZWFtX2lkID0gaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQ7CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgLyogVGhlIHNwZWMgc2F5cyB0aGF0IGlmIGEgREFUQSBmcmFtZSBpcyByZWNlaXZlZCB3aG9zZSBzdHJlYW0gSUQKKyAgICAgICBpcyAwLCB0aGUgcmVjaXBpZW50IE1VU1QgcmVzcG9uZCB3aXRoIGEgY29ubmVjdGlvbiBlcnJvciBvZgorICAgICAgIHR5cGUgUFJPVE9DT0xfRVJST1IuICovCisgICAgZmFpbHVyZV9yZWFzb24gPSAiREFUQTogc3RyZWFtX2lkID09IDAiOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIGlmIChzZXNzaW9uX2RldGVjdF9pZGxlX3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpKSB7CisgICAgZmFpbHVyZV9yZWFzb24gPSAiREFUQTogc3RyZWFtIGluIGlkbGUiOworICAgIGVycm9yX2NvZGUgPSBOR0hUVFAyX1BST1RPQ09MX0VSUk9SOworICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisgIGlmICghc3RyZWFtKSB7CisgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmF3KHNlc3Npb24sIHN0cmVhbV9pZCk7CisgICAgaWYgKHN0cmVhbSAmJiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSkgeworICAgICAgZmFpbHVyZV9yZWFzb24gPSAiREFUQTogc3RyZWFtIGNsb3NlZCI7CisgICAgICBlcnJvcl9jb2RlID0gTkdIVFRQMl9TVFJFQU1fQ0xPU0VEOworICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fUEFZTE9BRDsKKyAgfQorICBpZiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSB7CisgICAgZmFpbHVyZV9yZWFzb24gPSAiREFUQTogc3RyZWFtIGluIGhhbGYtY2xvc2VkKHJlbW90ZSkiOworICAgIGVycm9yX2NvZGUgPSBOR0hUVFAyX1NUUkVBTV9DTE9TRUQ7CisgICAgZ290byBmYWlsOworICB9CisKKyAgaWYgKG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtX2lkKSkgeworICAgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX0NMT1NJTkcpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fUEFZTE9BRDsKKyAgICB9CisgICAgaWYgKHN0cmVhbS0+c3RhdGUgIT0gTkdIVFRQMl9TVFJFQU1fT1BFTkVEKSB7CisgICAgICBmYWlsdXJlX3JlYXNvbiA9ICJEQVRBOiBzdHJlYW0gbm90IG9wZW5lZCI7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIHJldHVybiAwOworICB9CisgIGlmIChzdHJlYW0tPnN0YXRlID09IE5HSFRUUDJfU1RSRUFNX1JFU0VSVkVEKSB7CisgICAgZmFpbHVyZV9yZWFzb24gPSAiREFUQTogc3RyZWFtIGluIHJlc2VydmVkIjsKKyAgICBnb3RvIGZhaWw7CisgIH0KKyAgaWYgKHN0cmVhbS0+c3RhdGUgPT0gTkdIVFRQMl9TVFJFQU1fQ0xPU0lORykgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fUEFZTE9BRDsKKyAgfQorICByZXR1cm4gMDsKK2ZhaWw6CisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKHNlc3Npb24sIGVycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVfcmVhc29uKTsKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisgIHJldHVybiBOR0hUVFAyX0VSUl9JR05fUEFZTE9BRDsKK30KKworc3RhdGljIHNpemVfdCBpbmJvdW5kX2ZyYW1lX3BheWxvYWRfcmVhZGxlbihuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmxhc3QpIHsKKyAgcmV0dXJuIG5naHR0cDJfbWluKChzaXplX3QpKGxhc3QgLSBpbiksIGlmcmFtZS0+cGF5bG9hZGxlZnQpOworfQorCisvKgorICogUmVzZXRzIGlmcmFtZS0+c2J1ZiBhbmQgYWR2YW5jZSBpdHMgbWFyayBwb2ludGVyIGJ5IHxsZWZ0fCBieXRlcy4KKyAqLworc3RhdGljIHZvaWQgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSwgc2l6ZV90IGxlZnQpIHsKKyAgbmdodHRwMl9idWZfcmVzZXQoJmlmcmFtZS0+c2J1Zik7CisgIGlmcmFtZS0+c2J1Zi5tYXJrICs9IGxlZnQ7Cit9CisKK3N0YXRpYyBzaXplX3QgaW5ib3VuZF9mcmFtZV9idWZfcmVhZChuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbiwgY29uc3QgdWludDhfdCAqbGFzdCkgeworICBzaXplX3QgcmVhZGxlbjsKKworICByZWFkbGVuID0KKyAgICAgIG5naHR0cDJfbWluKChzaXplX3QpKGxhc3QgLSBpbiksIG5naHR0cDJfYnVmX21hcmtfYXZhaWwoJmlmcmFtZS0+c2J1ZikpOworCisgIGlmcmFtZS0+c2J1Zi5sYXN0ID0gbmdodHRwMl9jcHltZW0oaWZyYW1lLT5zYnVmLmxhc3QsIGluLCByZWFkbGVuKTsKKworICByZXR1cm4gcmVhZGxlbjsKK30KKworLyoKKyAqIFVucGFja3MgU0VUVElOR1MgZW50cnkgaW4gaWZyYW1lLT5zYnVmLgorICovCitzdGF0aWMgdm9pZCBpbmJvdW5kX2ZyYW1lX3NldF9zZXR0aW5nc19lbnRyeShuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSkgeworICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5IGl2OworICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICptaW5faGVhZGVyX3RhYmxlX3NpemVfZW50cnk7CisgIHNpemVfdCBpOworCisgIG5naHR0cDJfZnJhbWVfdW5wYWNrX3NldHRpbmdzX2VudHJ5KCZpdiwgaWZyYW1lLT5zYnVmLnBvcyk7CisKKyAgc3dpdGNoIChpdi5zZXR0aW5nc19pZCkgeworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkU6CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfUFVTSDoKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVM6CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFOgorICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0ZSQU1FX1NJWkU6CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfSEVBREVSX0xJU1RfU0laRToKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9DT05ORUNUX1BST1RPQ09MOgorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIERFQlVHRigicmVjdjogdW5rbm93biBzZXR0aW5ncyBpZD0weCUwMnhcbiIsIGl2LnNldHRpbmdzX2lkKTsKKworICAgIGlmcmFtZS0+aXZbaWZyYW1lLT5uaXYrK10gPSBpdjsKKworICAgIHJldHVybjsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBpZnJhbWUtPm5pdjsgKytpKSB7CisgICAgaWYgKGlmcmFtZS0+aXZbaV0uc2V0dGluZ3NfaWQgPT0gaXYuc2V0dGluZ3NfaWQpIHsKKyAgICAgIGlmcmFtZS0+aXZbaV0gPSBpdjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChpID09IGlmcmFtZS0+bml2KSB7CisgICAgaWZyYW1lLT5pdltpZnJhbWUtPm5pdisrXSA9IGl2OworICB9CisKKyAgaWYgKGl2LnNldHRpbmdzX2lkID09IE5HSFRUUDJfU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkUpIHsKKyAgICAvKiBLZWVwIHRyYWNrIG9mIG1pbmltdW0gdmFsdWUgb2YgU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkUgKi8KKyAgICBtaW5faGVhZGVyX3RhYmxlX3NpemVfZW50cnkgPSAmaWZyYW1lLT5pdltpZnJhbWUtPm1heF9uaXYgLSAxXTsKKworICAgIGlmIChpdi52YWx1ZSA8IG1pbl9oZWFkZXJfdGFibGVfc2l6ZV9lbnRyeS0+dmFsdWUpIHsKKyAgICAgIG1pbl9oZWFkZXJfdGFibGVfc2l6ZV9lbnRyeS0+dmFsdWUgPSBpdi52YWx1ZTsKKyAgICB9CisgIH0KK30KKworLyoKKyAqIENoZWNrcyBQQURERUQgZmxhZ3MgYW5kIHNldCBpZnJhbWUtPnNidWYgdG8gcmVhZCB0aGVtIGFjY29yZGluZ2x5LgorICogSWYgcGFkZGluZyBpcyBzZXQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAxLiAgSWYgbm8gcGFkZGluZyBpcyBzZXQsCisgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMC4gIE9uIGVycm9yLCByZXR1cm5zIC0xLgorICovCitzdGF0aWMgaW50IGluYm91bmRfZnJhbWVfaGFuZGxlX3BhZChuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWVfaGQgKmhkKSB7CisgIGlmIChoZC0+ZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfUEFEREVEKSB7CisgICAgaWYgKGhkLT5sZW5ndGggPCAxKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCAxKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBERUJVR0YoInJlY3Y6IG5vIHBhZGRpbmcgaW4gcGF5bG9hZFxuIik7CisgIHJldHVybiAwOworfQorCisvKgorICogQ29tcHV0ZXMgbnVtYmVyIG9mIHBhZGRpbmcgYmFzZWQgb24gZmxhZ3MuIFRoaXMgZnVuY3Rpb24gcmV0dXJucworICogdGhlIGNhbGN1bGF0ZWQgbGVuZ3RoIGlmIGl0IHN1Y2NlZWRzLCBvciAtMS4KKyAqLworc3RhdGljIHNzaXplX3QgaW5ib3VuZF9mcmFtZV9jb21wdXRlX3BhZChuZ2h0dHAyX2luYm91bmRfZnJhbWUgKmlmcmFtZSkgeworICBzaXplX3QgcGFkbGVuOworCisgIC8qIDEgZm9yIFBhZCBMZW5ndGggZmllbGQgKi8KKyAgcGFkbGVuID0gKHNpemVfdCkoaWZyYW1lLT5zYnVmLnBvc1swXSArIDEpOworCisgIERFQlVHRigicmVjdjogcGFkbGVuPSV6dVxuIiwgcGFkbGVuKTsKKworICAvKiBXZSBjYW5ub3QgdXNlIGlmcmFtZS0+ZnJhbWUuaGQubGVuZ3RoIGJlY2F1c2Ugb2YgQ09OVElOVUFUSU9OICovCisgIGlmIChwYWRsZW4gLSAxID4gaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmcmFtZS0+cGFkbGVuID0gcGFkbGVuOworCisgIHJldHVybiAoc3NpemVfdClwYWRsZW47Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGVmZmVjdGl2ZSBwYXlsb2FkIGxlbmd0aCBpbiB0aGUgZGF0YSBvZgorICogbGVuZ3RoIHxyZWFkbGVufCB3aGVuIHRoZSByZW1hbmluZyBwYXlsb2FkIGlzIHxwYXlsb2FkbGVmdHwuIFRoZQorICogfHBheWxvYWRsZWZ0fCBkb2VzIG5vdCBpbmNsdWRlIHxyZWFkbGVufC4gSWYgcGFkZGluZyB3YXMgc3RhcnRlZAorICogc3RyaWN0bHkgYmVmb3JlIHRoaXMgZGF0YSBjaHVuaywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xLgorICovCitzdGF0aWMgc3NpemVfdCBpbmJvdW5kX2ZyYW1lX2VmZmVjdGl2ZV9yZWFkbGVuKG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGF5bG9hZGxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWFkbGVuKSB7CisgIHNpemVfdCB0cmFpbF9wYWRsZW4gPQorICAgICAgbmdodHRwMl9mcmFtZV90cmFpbF9wYWRsZW4oJmlmcmFtZS0+ZnJhbWUsIGlmcmFtZS0+cGFkbGVuKTsKKworICBpZiAodHJhaWxfcGFkbGVuID4gcGF5bG9hZGxlZnQpIHsKKyAgICBzaXplX3QgcGFkbGVuOworICAgIHBhZGxlbiA9IHRyYWlsX3BhZGxlbiAtIHBheWxvYWRsZWZ0OworICAgIGlmIChyZWFkbGVuIDwgcGFkbGVuKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAoc3NpemVfdCkocmVhZGxlbiAtIHBhZGxlbik7CisgIH0KKyAgcmV0dXJuIChzc2l6ZV90KShyZWFkbGVuKTsKK30KKworc3NpemVfdCBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBjb25zdCB1aW50OF90ICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmxlbikgeworICBjb25zdCB1aW50OF90ICpmaXJzdCA9IGluLCAqbGFzdCA9IGluICsgaW5sZW47CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSAqaWZyYW1lID0gJnNlc3Npb24tPmlmcmFtZTsKKyAgc2l6ZV90IHJlYWRsZW47CisgIHNzaXplX3QgcGFkbGVuOworICBpbnQgcnY7CisgIGludCBidXN5ID0gMDsKKyAgbmdodHRwMl9mcmFtZV9oZCBjb250X2hkOworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBzaXplX3QgcHJpX2ZpZWxkbGVuOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIERFQlVHRigicmVjdjogY29ubmVjdGlvbiByZWN2X3dpbmRvd19zaXplPSVkLCBsb2NhbF93aW5kb3c9JWRcbiIsCisgICAgICAgICBzZXNzaW9uLT5yZWN2X3dpbmRvd19zaXplLCBzZXNzaW9uLT5sb2NhbF93aW5kb3dfc2l6ZSk7CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICAvKiBXZSBtYXkgaGF2ZSBpZGxlIHN0cmVhbXMgbW9yZSB0aGFuIHdlIGV4cGVjdCAoZS5nLiwKKyAgICAgbmdodHRwMl9zZXNzaW9uX2NoYW5nZV9zdHJlYW1fcHJpb3JpdHkoKSBvcgorICAgICBuZ2h0dHAyX3Nlc3Npb25fY3JlYXRlX2lkbGVfc3RyZWFtKCkpLiAgQWRqdXN0IHRoZW0gaGVyZS4gKi8KKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2lkbGVfc3RyZWFtKHNlc3Npb24pOworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBpZiAoIW5naHR0cDJfc2Vzc2lvbl93YW50X3JlYWQoc2Vzc2lvbikpIHsKKyAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgIH0KKworICBmb3IgKDs7KSB7CisgICAgc3dpdGNoIChpZnJhbWUtPnN0YXRlKSB7CisgICAgY2FzZSBOR0hUVFAyX0lCX1JFQURfQ0xJRU5UX01BR0lDOgorICAgICAgcmVhZGxlbiA9IG5naHR0cDJfbWluKGlubGVuLCBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgaWYgKG1lbWNtcCgmTkdIVFRQMl9DTElFTlRfTUFHSUNbTkdIVFRQMl9DTElFTlRfTUFHSUNfTEVOIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnRdLAorICAgICAgICAgICAgICAgICBpbiwgcmVhZGxlbikgIT0gMCkgeworICAgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQkFEX0NMSUVOVF9NQUdJQzsKKyAgICAgIH0KKworICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtPSByZWFkbGVuOworICAgICAgaW4gKz0gcmVhZGxlbjsKKworICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQgPT0gMCkgeworICAgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfRklSU1RfU0VUVElOR1M7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9JQl9SRUFEX0ZJUlNUX1NFVFRJTkdTOgorICAgICAgREVCVUdGKCJyZWN2OiBbSUJfUkVBRF9GSVJTVF9TRVRUSU5HU11cbiIpOworCisgICAgICByZWFkbGVuID0gaW5ib3VuZF9mcmFtZV9idWZfcmVhZChpZnJhbWUsIGluLCBsYXN0KTsKKyAgICAgIGluICs9IHJlYWRsZW47CisKKyAgICAgIGlmIChuZ2h0dHAyX2J1Zl9tYXJrX2F2YWlsKCZpZnJhbWUtPnNidWYpKSB7CisgICAgICAgIHJldHVybiBpbiAtIGZpcnN0OworICAgICAgfQorCisgICAgICBpZiAoaWZyYW1lLT5zYnVmLnBvc1szXSAhPSBOR0hUVFAyX1NFVFRJTkdTIHx8CisgICAgICAgICAgKGlmcmFtZS0+c2J1Zi5wb3NbNF0gJiBOR0hUVFAyX0ZMQUdfQUNLKSkgeworICAgICAgICBydiA9IHNlc3Npb25fY2FsbF9lcnJvcl9jYWxsYmFjaygKKyAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfRVJSX1NFVFRJTkdTX0VYUEVDVEVELAorICAgICAgICAgICAgIlJlbW90ZSBwZWVyIHJldHVybmVkIHVuZXhwZWN0ZWQgZGF0YSB3aGlsZSB3ZSBleHBlY3RlZCAiCisgICAgICAgICAgICAiU0VUVElOR1MgZnJhbWUuICBQZXJoYXBzLCBwZWVyIGRvZXMgbm90IHN1cHBvcnQgSFRUUC8yICIKKyAgICAgICAgICAgICJwcm9wZXJseS4iKTsKKworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbigKKyAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IsICJTRVRUSU5HUyBleHBlY3RlZCIpOworCisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgIH0KKworICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9IRUFEOworCisgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBOR0hUVFAyX0lCX1JFQURfSEVBRDogeworICAgICAgaW50IG9uX2JlZ2luX2ZyYW1lX2NhbGxlZCA9IDA7CisKKyAgICAgIERFQlVHRigicmVjdjogW0lCX1JFQURfSEVBRF1cbiIpOworCisgICAgICByZWFkbGVuID0gaW5ib3VuZF9mcmFtZV9idWZfcmVhZChpZnJhbWUsIGluLCBsYXN0KTsKKyAgICAgIGluICs9IHJlYWRsZW47CisKKyAgICAgIGlmIChuZ2h0dHAyX2J1Zl9tYXJrX2F2YWlsKCZpZnJhbWUtPnNidWYpKSB7CisgICAgICAgIHJldHVybiBpbiAtIGZpcnN0OworICAgICAgfQorCisgICAgICBuZ2h0dHAyX2ZyYW1lX3VucGFja19mcmFtZV9oZCgmaWZyYW1lLT5mcmFtZS5oZCwgaWZyYW1lLT5zYnVmLnBvcyk7CisgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0ID0gaWZyYW1lLT5mcmFtZS5oZC5sZW5ndGg7CisKKyAgICAgIERFQlVHRigicmVjdjogcGF5bG9hZGxlbj0lenUsIHR5cGU9JXUsIGZsYWdzPTB4JTAyeCwgc3RyZWFtX2lkPSVkXG4iLAorICAgICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQubGVuZ3RoLCBpZnJhbWUtPmZyYW1lLmhkLnR5cGUsCisgICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5mbGFncywgaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQpOworCisgICAgICBpZiAoaWZyYW1lLT5mcmFtZS5oZC5sZW5ndGggPiBzZXNzaW9uLT5sb2NhbF9zZXR0aW5ncy5tYXhfZnJhbWVfc2l6ZSkgeworICAgICAgICBERUJVR0YoInJlY3Y6IGxlbmd0aCBpcyB0b28gbGFyZ2UgJXp1ID4gJXVcbiIsIGlmcmFtZS0+ZnJhbWUuaGQubGVuZ3RoLAorICAgICAgICAgICAgICAgc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MubWF4X2ZyYW1lX3NpemUpOworCisgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgICAgICAgc2Vzc2lvbiwgTkdIVFRQMl9GUkFNRV9TSVpFX0VSUk9SLCAidG9vIGxhcmdlIGZyYW1lIHNpemUiKTsKKworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICB9CisKKyAgICAgIHN3aXRjaCAoaWZyYW1lLT5mcmFtZS5oZC50eXBlKSB7CisgICAgICBjYXNlIE5HSFRUUDJfREFUQTogeworICAgICAgICBERUJVR0YoInJlY3Y6IERBVEFcbiIpOworCisgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJj0KKyAgICAgICAgICAgIChOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSB8IE5HSFRUUDJfRkxBR19QQURERUQpOworICAgICAgICAvKiBDaGVjayBzdHJlYW0gaXMgb3Blbi4gSWYgaXQgaXMgbm90IG9wZW4gb3IgY2xvc2luZywKKyAgICAgICAgICAgaWdub3JlIHBheWxvYWQuICovCisgICAgICAgIGJ1c3kgPSAxOworCisgICAgICAgIHJ2ID0gc2Vzc2lvbl9vbl9kYXRhX3JlY2VpdmVkX2ZhaWxfZmFzdChzZXNzaW9uKTsKKyAgICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgICB9CisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9JR05fUEFZTE9BRCkgeworICAgICAgICAgIERFQlVHRigicmVjdjogREFUQSBub3QgYWxsb3dlZCBzdHJlYW1faWQ9JWRcbiIsCisgICAgICAgICAgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkKTsKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fREFUQTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIHJ2ID0gaW5ib3VuZF9mcmFtZV9oYW5kbGVfcGFkKGlmcmFtZSwgJmlmcmFtZS0+ZnJhbWUuaGQpOworICAgICAgICBpZiAocnYgPCAwKSB7CisgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IsCisgICAgICAgICAgICAgICJEQVRBOiBpbnN1ZmZpY2llbnQgcGFkZGluZyBzcGFjZSIpOworCisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSAxKSB7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9QQURfREFUQTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfREFUQTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIE5HSFRUUDJfSEVBREVSUzoKKworICAgICAgICBERUJVR0YoInJlY3Y6IEhFQURFUlNcbiIpOworCisgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJj0KKyAgICAgICAgICAgIChOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSB8IE5HSFRUUDJfRkxBR19FTkRfSEVBREVSUyB8CisgICAgICAgICAgICAgTkdIVFRQMl9GTEFHX1BBRERFRCB8IE5HSFRUUDJfRkxBR19QUklPUklUWSk7CisKKyAgICAgICAgcnYgPSBpbmJvdW5kX2ZyYW1lX2hhbmRsZV9wYWQoaWZyYW1lLCAmaWZyYW1lLT5mcmFtZS5oZCk7CisgICAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbigKKyAgICAgICAgICAgICAgc2Vzc2lvbiwgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUiwKKyAgICAgICAgICAgICAgIkhFQURFUlM6IGluc3VmZmljaWVudCBwYWRkaW5nIHNwYWNlIik7CisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSAxKSB7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9OQllURTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHByaV9maWVsZGxlbiA9IG5naHR0cDJfZnJhbWVfcHJpb3JpdHlfbGVuKGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MpOworCisgICAgICAgIGlmIChwcmlfZmllbGRsZW4gPiAwKSB7CisgICAgICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQgPCBwcmlfZmllbGRsZW4pIHsKKyAgICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfTkJZVEU7CisKKyAgICAgICAgICBpbmJvdW5kX2ZyYW1lX3NldF9tYXJrKGlmcmFtZSwgcHJpX2ZpZWxkbGVuKTsKKworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogQ2FsbCBvbl9iZWdpbl9mcmFtZV9jYWxsYmFjayBoZXJlIGJlY2F1c2UKKyAgICAgICAgICAgc2Vzc2lvbl9wcm9jZXNzX2hlYWRlcnNfZnJhbWUoKSBtYXkgY2FsbAorICAgICAgICAgICBvbl9iZWdpbl9oZWFkZXJzX2NhbGxiYWNrICovCisgICAgICAgIHJ2ID0gc2Vzc2lvbl9jYWxsX29uX2JlZ2luX2ZyYW1lKHNlc3Npb24sICZpZnJhbWUtPmZyYW1lLmhkKTsKKworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBvbl9iZWdpbl9mcmFtZV9jYWxsZWQgPSAxOworCisgICAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX2hlYWRlcnNfZnJhbWUoc2Vzc2lvbik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGJ1c3kgPSAxOworCisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSB7CisgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oCisgICAgICAgICAgICAgIHNlc3Npb24sIGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkLCBOR0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0hFQURFUl9CTE9DSzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9JR05fSEVBREVSX0JMT0NLKSB7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0hFQURFUl9CTE9DSzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfSEVBREVSX0JMT0NLOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX1BSSU9SSVRZOgorICAgICAgICBERUJVR0YoInJlY3Y6IFBSSU9SSVRZXG4iKTsKKworICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLmZsYWdzID0gTkdIVFRQMl9GTEFHX05PTkU7CisKKyAgICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQgIT0gTkdIVFRQMl9QUklPUklUWV9TUEVDTEVOKSB7CisgICAgICAgICAgYnVzeSA9IDE7CisKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9GUkFNRV9TSVpFX0VSUk9SOworCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX05CWVRFOworCisgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCBOR0hUVFAyX1BSSU9SSVRZX1NQRUNMRU4pOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX1JTVF9TVFJFQU06CisgICAgICBjYXNlIE5HSFRUUDJfV0lORE9XX1VQREFURToKKyNpZmRlZiBERUJVR0JVSUxECisgICAgICAgIHN3aXRjaCAoaWZyYW1lLT5mcmFtZS5oZC50eXBlKSB7CisgICAgICAgIGNhc2UgTkdIVFRQMl9SU1RfU1RSRUFNOgorICAgICAgICAgIERFQlVHRigicmVjdjogUlNUX1NUUkVBTVxuIik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTkdIVFRQMl9XSU5ET1dfVVBEQVRFOgorICAgICAgICAgIERFQlVHRigicmVjdjogV0lORE9XX1VQREFURVxuIik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVR0JVSUxEICovCisKKyAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5mbGFncyA9IE5HSFRUUDJfRkxBR19OT05FOworCisgICAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0ICE9IDQpIHsKKyAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9GUkFNRV9TSVpFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9OQllURTsKKworICAgICAgICBpbmJvdW5kX2ZyYW1lX3NldF9tYXJrKGlmcmFtZSwgNCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE5HSFRUUDJfU0VUVElOR1M6CisgICAgICAgIERFQlVHRigicmVjdjogU0VUVElOR1NcbiIpOworCisgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJj0gTkdIVFRQMl9GTEFHX0FDSzsKKworICAgICAgICBpZiAoKGlmcmFtZS0+ZnJhbWUuaGQubGVuZ3RoICUgTkdIVFRQMl9GUkFNRV9TRVRUSU5HU19FTlRSWV9MRU5HVEgpIHx8CisgICAgICAgICAgICAoKGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfQUNLKSAmJgorICAgICAgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgPiAwKSkgeworICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0ZSQU1FX1NJWkVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX1NFVFRJTkdTOworCisgICAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0KSB7CisgICAgICAgICAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqbWluX2hlYWRlcl90YWJsZV9zaXplX2VudHJ5OworCisgICAgICAgICAgLyogV2UgYWxsb2NhdGUgaXYgd2l0aCBhZGRpdGlvbmFsIG9uZSBlbnRyeSwgdG8gc3RvcmUgdGhlCisgICAgICAgICAgICAgbWluaW11bSBoZWFkZXIgdGFibGUgc2l6ZS4gKi8KKyAgICAgICAgICBpZnJhbWUtPm1heF9uaXYgPQorICAgICAgICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLmxlbmd0aCAvIE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIICsgMTsKKworICAgICAgICAgIGlmcmFtZS0+aXYgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9zZXR0aW5nc19lbnRyeSkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLT5tYXhfbml2KTsKKworICAgICAgICAgIGlmICghaWZyYW1lLT5pdikgeworICAgICAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICAgICAgICAgIH0KKworICAgICAgICAgIG1pbl9oZWFkZXJfdGFibGVfc2l6ZV9lbnRyeSA9ICZpZnJhbWUtPml2W2lmcmFtZS0+bWF4X25pdiAtIDFdOworICAgICAgICAgIG1pbl9oZWFkZXJfdGFibGVfc2l6ZV9lbnRyeS0+c2V0dGluZ3NfaWQgPQorICAgICAgICAgICAgICBOR0hUVFAyX1NFVFRJTkdTX0hFQURFUl9UQUJMRV9TSVpFOworICAgICAgICAgIG1pbl9oZWFkZXJfdGFibGVfc2l6ZV9lbnRyeS0+dmFsdWUgPSBVSU5UMzJfTUFYOworCisgICAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJ1c3kgPSAxOworCisgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCAwKTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9QVVNIX1BST01JU0U6CisgICAgICAgIERFQlVHRigicmVjdjogUFVTSF9QUk9NSVNFXG4iKTsKKworICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICY9CisgICAgICAgICAgICAoTkdIVFRQMl9GTEFHX0VORF9IRUFERVJTIHwgTkdIVFRQMl9GTEFHX1BBRERFRCk7CisKKyAgICAgICAgcnYgPSBpbmJvdW5kX2ZyYW1lX2hhbmRsZV9wYWQoaWZyYW1lLCAmaWZyYW1lLT5mcmFtZS5oZCk7CisgICAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbigKKyAgICAgICAgICAgICAgc2Vzc2lvbiwgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUiwKKyAgICAgICAgICAgICAgIlBVU0hfUFJPTUlTRTogaW5zdWZmaWNpZW50IHBhZGRpbmcgc3BhY2UiKTsKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ2ID09IDEpIHsKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX05CWVRFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQgPCA0KSB7CisgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfTkJZVEU7CisKKyAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIDQpOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX1BJTkc6CisgICAgICAgIERFQlVHRigicmVjdjogUElOR1xuIik7CisKKyAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5mbGFncyAmPSBOR0hUVFAyX0ZMQUdfQUNLOworCisgICAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0ICE9IDgpIHsKKyAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9GUkFNRV9TSVpFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9OQllURTsKKyAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIDgpOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX0dPQVdBWToKKyAgICAgICAgREVCVUdGKCJyZWN2OiBHT0FXQVlcbiIpOworCisgICAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgPSBOR0hUVFAyX0ZMQUdfTk9ORTsKKworICAgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCA8IDgpIHsKKyAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9GUkFNRV9TSVpFX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9OQllURTsKKyAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIDgpOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX0NPTlRJTlVBVElPTjoKKyAgICAgICAgREVCVUdGKCJyZWN2OiB1bmV4cGVjdGVkIENPTlRJTlVBVElPTlxuIik7CisKKyAgICAgICAgLyogUmVjZWl2aW5nIENPTlRJTlVBVElPTiBpbiB0aGlzIHN0YXRlIGFyZSBzdWJqZWN0IHRvCisgICAgICAgICAgIGNvbm5lY3Rpb24gZXJyb3Igb2YgdHlwZSBQUk9UT0NPTF9FUlJPUiAqLworICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbigKKyAgICAgICAgICAgIHNlc3Npb24sIE5HSFRUUDJfUFJPVE9DT0xfRVJST1IsICJDT05USU5VQVRJT046IHVuZXhwZWN0ZWQiKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdGKCJyZWN2OiBleHRlbnNpb24gZnJhbWVcbiIpOworCisgICAgICAgIGlmIChjaGVja19leHRfdHlwZV9zZXQoc2Vzc2lvbi0+dXNlcl9yZWN2X2V4dF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLnR5cGUpKSB7CisgICAgICAgICAgaWYgKCFzZXNzaW9uLT5jYWxsYmFja3MudW5wYWNrX2V4dGVuc2lvbl9jYWxsYmFjaykgeworICAgICAgICAgICAgLyogU2lsZW50bHkgaWdub3JlIHVua25vd24gZnJhbWUgdHlwZS4gKi8KKworICAgICAgICAgICAgYnVzeSA9IDE7CisKKyAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9QQVlMT0FEOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBidXN5ID0gMTsKKworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfRVhURU5TSU9OX1BBWUxPQUQ7CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzd2l0Y2ggKGlmcmFtZS0+ZnJhbWUuaGQudHlwZSkgeworICAgICAgICAgIGNhc2UgTkdIVFRQMl9BTFRTVkM6CisgICAgICAgICAgICBpZiAoKHNlc3Npb24tPmJ1aWx0aW5fcmVjdl9leHRfdHlwZXMgJiBOR0hUVFAyX1RZUEVNQVNLX0FMVFNWQykgPT0KKyAgICAgICAgICAgICAgICAwKSB7CisgICAgICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fUEFZTE9BRDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIERFQlVHRigicmVjdjogQUxUU1ZDXG4iKTsKKworICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5mbGFncyA9IE5HSFRUUDJfRkxBR19OT05FOworICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5leHQucGF5bG9hZCA9ICZpZnJhbWUtPmV4dF9mcmFtZV9wYXlsb2FkLmFsdHN2YzsKKworICAgICAgICAgICAgaWYgKHNlc3Npb24tPnNlcnZlcikgeworICAgICAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX1BBWUxPQUQ7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCA8IDIpIHsKKyAgICAgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0ZSQU1FX1NJWkVfRVJST1I7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidXN5ID0gMTsKKworICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9OQllURTsKKyAgICAgICAgICAgIGluYm91bmRfZnJhbWVfc2V0X21hcmsoaWZyYW1lLCAyKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBOR0hUVFAyX09SSUdJTjoKKyAgICAgICAgICAgIGlmICghKHNlc3Npb24tPmJ1aWx0aW5fcmVjdl9leHRfdHlwZXMgJiBOR0hUVFAyX1RZUEVNQVNLX09SSUdJTikpIHsKKyAgICAgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9QQVlMT0FEOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgREVCVUdGKCJyZWN2OiBPUklHSU5cbiIpOworCisgICAgICAgICAgICBpZnJhbWUtPmZyYW1lLmV4dC5wYXlsb2FkID0gJmlmcmFtZS0+ZXh0X2ZyYW1lX3BheWxvYWQub3JpZ2luOworCisgICAgICAgICAgICBpZiAoc2Vzc2lvbi0+c2VydmVyIHx8IGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkIHx8CisgICAgICAgICAgICAgICAgKGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJiAweGYwKSkgeworICAgICAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX1BBWUxPQUQ7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZnJhbWUtPmZyYW1lLmhkLmZsYWdzID0gTkdIVFRQMl9GTEFHX05PTkU7CisKKyAgICAgICAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0KSB7CisgICAgICAgICAgICAgIGlmcmFtZS0+cmF3X2xidWYgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgICAgICAgICBpZiAoaWZyYW1lLT5yYXdfbGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgbmdodHRwMl9idWZfd3JhcF9pbml0KCZpZnJhbWUtPmxidWYsIGlmcmFtZS0+cmF3X2xidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX09SSUdJTl9QQVlMT0FEOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnVzeSA9IDE7CisKKyAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9QQVlMT0FEOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCFvbl9iZWdpbl9mcmFtZV9jYWxsZWQpIHsKKyAgICAgICAgc3dpdGNoIChpZnJhbWUtPnN0YXRlKSB7CisgICAgICAgIGNhc2UgTkdIVFRQMl9JQl9JR05fSEVBREVSX0JMT0NLOgorICAgICAgICBjYXNlIE5HSFRUUDJfSUJfSUdOX1BBWUxPQUQ6CisgICAgICAgIGNhc2UgTkdIVFRQMl9JQl9GUkFNRV9TSVpFX0VSUk9SOgorICAgICAgICBjYXNlIE5HSFRUUDJfSUJfSUdOX0RBVEE6CisgICAgICAgIGNhc2UgTkdIVFRQMl9JQl9JR05fQUxMOgorICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJ2ID0gc2Vzc2lvbl9jYWxsX29uX2JlZ2luX2ZyYW1lKHNlc3Npb24sICZpZnJhbWUtPmZyYW1lLmhkKTsKKworICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOR0hUVFAyX0lCX1JFQURfTkJZVEU6CisgICAgICBERUJVR0YoInJlY3Y6IFtJQl9SRUFEX05CWVRFXVxuIik7CisKKyAgICAgIHJlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX2J1Zl9yZWFkKGlmcmFtZSwgaW4sIGxhc3QpOworICAgICAgaW4gKz0gcmVhZGxlbjsKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKworICAgICAgREVCVUdGKCJyZWN2OiByZWFkbGVuPSV6dSwgcGF5bG9hZGxlZnQ9JXp1LCBsZWZ0PSV6ZFxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0LCBuZ2h0dHAyX2J1Zl9tYXJrX2F2YWlsKCZpZnJhbWUtPnNidWYpKTsKKworICAgICAgaWYgKG5naHR0cDJfYnVmX21hcmtfYXZhaWwoJmlmcmFtZS0+c2J1ZikpIHsKKyAgICAgICAgcmV0dXJuIGluIC0gZmlyc3Q7CisgICAgICB9CisKKyAgICAgIHN3aXRjaCAoaWZyYW1lLT5mcmFtZS5oZC50eXBlKSB7CisgICAgICBjYXNlIE5HSFRUUDJfSEVBREVSUzoKKyAgICAgICAgaWYgKGlmcmFtZS0+cGFkbGVuID09IDAgJiYKKyAgICAgICAgICAgIChpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX1BBRERFRCkpIHsKKyAgICAgICAgICBwcmlfZmllbGRsZW4gPSBuZ2h0dHAyX2ZyYW1lX3ByaW9yaXR5X2xlbihpZnJhbWUtPmZyYW1lLmhkLmZsYWdzKTsKKyAgICAgICAgICBwYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX2NvbXB1dGVfcGFkKGlmcmFtZSk7CisgICAgICAgICAgaWYgKHBhZGxlbiA8IDAgfHwKKyAgICAgICAgICAgICAgKHNpemVfdClwYWRsZW4gKyBwcmlfZmllbGRsZW4gPiAxICsgaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICAgICAgICAgICAgc2Vzc2lvbiwgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUiwgIkhFQURFUlM6IGludmFsaWQgcGFkZGluZyIpOworICAgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZWFkZXJzLnBhZGxlbiA9IChzaXplX3QpcGFkbGVuOworCisgICAgICAgICAgaWYgKHByaV9maWVsZGxlbiA+IDApIHsKKyAgICAgICAgICAgIGlmIChpZnJhbWUtPnBheWxvYWRsZWZ0IDwgcHJpX2ZpZWxkbGVuKSB7CisgICAgICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9GUkFNRV9TSVpFX0VSUk9SOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfTkJZVEU7CisgICAgICAgICAgICBpbmJvdW5kX2ZyYW1lX3NldF9tYXJrKGlmcmFtZSwgcHJpX2ZpZWxkbGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBUcnVuY2F0ZSBidWZmZXJzIHVzZWQgZm9yIHBhZGRpbmcgc3BlYyAqLworICAgICAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIDApOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX2hlYWRlcnNfZnJhbWUoc2Vzc2lvbik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGJ1c3kgPSAxOworCisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFKSB7CisgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oCisgICAgICAgICAgICAgIHNlc3Npb24sIGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkLCBOR0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0hFQURFUl9CTE9DSzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9JR05fSEVBREVSX0JMT0NLKSB7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0hFQURFUl9CTE9DSzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfSEVBREVSX0JMT0NLOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX1BSSU9SSVRZOgorICAgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc19wcmlvcml0eV9mcmFtZShzZXNzaW9uKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgICB9CisKKyAgICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX1JTVF9TVFJFQU06CisgICAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX3JzdF9zdHJlYW1fZnJhbWUoc2Vzc2lvbik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9QVVNIX1BST01JU0U6CisgICAgICAgIGlmIChpZnJhbWUtPnBhZGxlbiA9PSAwICYmCisgICAgICAgICAgICAoaWZyYW1lLT5mcmFtZS5oZC5mbGFncyAmIE5HSFRUUDJfRkxBR19QQURERUQpKSB7CisgICAgICAgICAgcGFkbGVuID0gaW5ib3VuZF9mcmFtZV9jb21wdXRlX3BhZChpZnJhbWUpOworICAgICAgICAgIGlmIChwYWRsZW4gPCAwIHx8IChzaXplX3QpcGFkbGVuICsgNCAvKiBwcm9taXNlZCBzdHJlYW0gaWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAxICsgaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICAgICAgICAgICAgc2Vzc2lvbiwgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAiUFVTSF9QUk9NSVNFOiBpbnZhbGlkIHBhZGRpbmciKTsKKyAgICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgICAgfQorCisgICAgICAgICAgaWZyYW1lLT5mcmFtZS5wdXNoX3Byb21pc2UucGFkbGVuID0gKHNpemVfdClwYWRsZW47CisKKyAgICAgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCA8IDQpIHsKKyAgICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfTkJZVEU7CisKKyAgICAgICAgICBpbmJvdW5kX2ZyYW1lX3NldF9tYXJrKGlmcmFtZSwgNCk7CisKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX3B1c2hfcHJvbWlzZV9mcmFtZShzZXNzaW9uKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgYnVzeSA9IDE7CisKKyAgICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUpIHsKKyAgICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbSgKKyAgICAgICAgICAgICAgc2Vzc2lvbiwgaWZyYW1lLT5mcmFtZS5wdXNoX3Byb21pc2UucHJvbWlzZWRfc3RyZWFtX2lkLAorICAgICAgICAgICAgICBOR0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0hFQURFUl9CTE9DSzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9JR05fSEVBREVSX0JMT0NLKSB7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0hFQURFUl9CTE9DSzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX1JFQURfSEVBREVSX0JMT0NLOworCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBOR0hUVFAyX1BJTkc6CisgICAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX3BpbmdfZnJhbWUoc2Vzc2lvbik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTkdIVFRQMl9HT0FXQVk6IHsKKyAgICAgICAgc2l6ZV90IGRlYnVnbGVuOworCisgICAgICAgIC8qIDggaXMgTGFzdC1zdHJlYW0tSUQgKyBFcnJvciBDb2RlICovCisgICAgICAgIGRlYnVnbGVuID0gaWZyYW1lLT5mcmFtZS5oZC5sZW5ndGggLSA4OworCisgICAgICAgIGlmIChkZWJ1Z2xlbiA+IDApIHsKKyAgICAgICAgICBpZnJhbWUtPnJhd19sYnVmID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgZGVidWdsZW4pOworCisgICAgICAgICAgaWYgKGlmcmFtZS0+cmF3X2xidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICAgICAgICAgIH0KKworICAgICAgICAgIG5naHR0cDJfYnVmX3dyYXBfaW5pdCgmaWZyYW1lLT5sYnVmLCBpZnJhbWUtPnJhd19sYnVmLCBkZWJ1Z2xlbik7CisgICAgICAgIH0KKworICAgICAgICBidXN5ID0gMTsKKworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0dPQVdBWV9ERUJVRzsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgTkdIVFRQMl9XSU5ET1dfVVBEQVRFOgorICAgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc193aW5kb3dfdXBkYXRlX2ZyYW1lKHNlc3Npb24pOworICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICAgIH0KKworICAgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE5HSFRUUDJfQUxUU1ZDOiB7CisgICAgICAgIHNpemVfdCBvcmlnaW5fbGVuOworCisgICAgICAgIG9yaWdpbl9sZW4gPSBuZ2h0dHAyX2dldF91aW50MTYoaWZyYW1lLT5zYnVmLnBvcyk7CisKKyAgICAgICAgREVCVUdGKCJyZWN2OiBvcmlnaW5fbGVuPSV6dVxuIiwgb3JpZ2luX2xlbik7CisKKyAgICAgICAgaWYgKG9yaWdpbl9sZW4gPiBpZnJhbWUtPnBheWxvYWRsZWZ0KSB7CisgICAgICAgICAgYnVzeSA9IDE7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZnJhbWUtPmZyYW1lLmhkLmxlbmd0aCA+IDIpIHsKKyAgICAgICAgICBpZnJhbWUtPnJhd19sYnVmID0KKyAgICAgICAgICAgICAgbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgaWZyYW1lLT5mcmFtZS5oZC5sZW5ndGggLSAyKTsKKworICAgICAgICAgIGlmIChpZnJhbWUtPnJhd19sYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBuZ2h0dHAyX2J1Zl93cmFwX2luaXQoJmlmcmFtZS0+bGJ1ZiwgaWZyYW1lLT5yYXdfbGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5sZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgYnVzeSA9IDE7CisKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9BTFRTVkNfUEFZTE9BRDsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIFRoaXMgaXMgdW5rbm93biBmcmFtZSAqLworICAgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSUJfUkVBRF9IRUFERVJfQkxPQ0s6CisgICAgY2FzZSBOR0hUVFAyX0lCX0lHTl9IRUFERVJfQkxPQ0s6IHsKKyAgICAgIHNzaXplX3QgZGF0YV9yZWFkbGVuOworICAgICAgc2l6ZV90IHRyYWlsX3BhZGxlbjsKKyAgICAgIGludCBmaW5hbDsKKyNpZmRlZiBERUJVR0JVSUxECisgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX1JFQURfSEVBREVSX0JMT0NLKSB7CisgICAgICAgIERFQlVHRigicmVjdjogW0lCX1JFQURfSEVBREVSX0JMT0NLXVxuIik7CisgICAgICB9IGVsc2UgeworICAgICAgICBERUJVR0YoInJlY3Y6IFtJQl9JR05fSEVBREVSX0JMT0NLXVxuIik7CisgICAgICB9CisjZW5kaWYgLyogREVCVUdCVUlMRCAqLworCisgICAgICByZWFkbGVuID0gaW5ib3VuZF9mcmFtZV9wYXlsb2FkX3JlYWRsZW4oaWZyYW1lLCBpbiwgbGFzdCk7CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC0gcmVhZGxlbik7CisKKyAgICAgIGRhdGFfcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfZWZmZWN0aXZlX3JlYWRsZW4oCisgICAgICAgICAgaWZyYW1lLCBpZnJhbWUtPnBheWxvYWRsZWZ0IC0gcmVhZGxlbiwgcmVhZGxlbik7CisKKyAgICAgIGlmIChkYXRhX3JlYWRsZW4gPT0gLTEpIHsKKyAgICAgICAgLyogZXZlcnl0aGluZyBpcyBwYWRkaW5nICovCisgICAgICAgIGRhdGFfcmVhZGxlbiA9IDA7CisgICAgICB9CisKKyAgICAgIHRyYWlsX3BhZGxlbiA9IG5naHR0cDJfZnJhbWVfdHJhaWxfcGFkbGVuKCZpZnJhbWUtPmZyYW1lLCBpZnJhbWUtPnBhZGxlbik7CisKKyAgICAgIGZpbmFsID0gKGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX0hFQURFUlMpICYmCisgICAgICAgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLSAoc2l6ZV90KWRhdGFfcmVhZGxlbiA9PSB0cmFpbF9wYWRsZW47CisKKyAgICAgIGlmIChkYXRhX3JlYWRsZW4gPiAwIHx8IChkYXRhX3JlYWRsZW4gPT0gMCAmJiBmaW5hbCkpIHsKKyAgICAgICAgc2l6ZV90IGhkX3Byb2NsZW4gPSAwOworCisgICAgICAgIERFQlVHRigicmVjdjogYmxvY2sgZmluYWw9JWRcbiIsIGZpbmFsKTsKKworICAgICAgICBydiA9CisgICAgICAgICAgICBpbmZsYXRlX2hlYWRlcl9ibG9jayhzZXNzaW9uLCAmaWZyYW1lLT5mcmFtZSwgJmhkX3Byb2NsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWluLCAoc2l6ZV90KWRhdGFfcmVhZGxlbiwgZmluYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfUkVBRF9IRUFERVJfQkxPQ0spOworCisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9QQVVTRSkgeworICAgICAgICAgIGluICs9IGhkX3Byb2NsZW47CisgICAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtPSBoZF9wcm9jbGVuOworCisgICAgICAgICAgcmV0dXJuIGluIC0gZmlyc3Q7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnYgPT0gTkdIVFRQMl9FUlJfVEVNUE9SQUxfQ0FMTEJBQ0tfRkFJTFVSRSkgeworICAgICAgICAgIC8qIFRoZSBhcHBsaWNhdGlvbiBzYXlzIG5vIG1vcmUgaGVhZGVycy4gV2UgZGVjb21wcmVzcyB0aGUKKyAgICAgICAgICAgICByZXN0IG9mIHRoZSBoZWFkZXIgYmxvY2sgYnV0IG5vdCBpbnZva2Ugb25faGVhZGVyX2NhbGxiYWNrCisgICAgICAgICAgICAgYW5kIG9uX2ZyYW1lX3JlY3ZfY2FsbGJhY2suICovCisgICAgICAgICAgaW4gKz0gaGRfcHJvY2xlbjsKKyAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC09IGhkX3Byb2NsZW47CisKKyAgICAgICAgICAvKiBVc2UgcHJvbWlzZWQgc3RyZWFtIElEIGZvciBQVVNIX1BST01JU0UgKi8KKyAgICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbSgKKyAgICAgICAgICAgICAgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC50eXBlID09IE5HSFRUUDJfUFVTSF9QUk9NSVNFCisgICAgICAgICAgICAgICAgICA/IGlmcmFtZS0+ZnJhbWUucHVzaF9wcm9taXNlLnByb21pc2VkX3N0cmVhbV9pZAorICAgICAgICAgICAgICAgICAgOiBpZnJhbWUtPmZyYW1lLmhkLnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgTkdIVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgfQorICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9IRUFERVJfQkxPQ0s7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpbiArPSByZWFkbGVuOworICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC09IHJlYWRsZW47CisKKyAgICAgICAgaWYgKHJ2ID09IE5HSFRUUDJfRVJSX0hFQURFUl9DT01QKSB7CisgICAgICAgICAgLyogR09BV0FZIGlzIGFscmVhZHkgaXNzdWVkICovCisgICAgICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQgPT0gMCkgeworICAgICAgICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9QQVlMT0FEOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaW4gKz0gcmVhZGxlbjsKKyAgICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtPSByZWFkbGVuOworICAgICAgfQorCisgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYgKChpZnJhbWUtPmZyYW1lLmhkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9IRUFERVJTKSA9PSAwKSB7CisKKyAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIE5HSFRUUDJfRlJBTUVfSERMRU4pOworCisgICAgICAgIGlmcmFtZS0+cGFkbGVuID0gMDsKKworICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX1JFQURfSEVBREVSX0JMT0NLKSB7CisgICAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfRVhQRUNUX0NPTlRJTlVBVElPTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fQ09OVElOVUFUSU9OOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX1JFQURfSEVBREVSX0JMT0NLKSB7CisgICAgICAgICAgcnYgPSBzZXNzaW9uX2FmdGVyX2hlYWRlcl9ibG9ja19yZWNlaXZlZChzZXNzaW9uKTsKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTkdIVFRQMl9JQl9JR05fUEFZTE9BRDoKKyAgICAgIERFQlVHRigicmVjdjogW0lCX0lHTl9QQVlMT0FEXVxuIik7CisKKyAgICAgIHJlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX3BheWxvYWRfcmVhZGxlbihpZnJhbWUsIGluLCBsYXN0KTsKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKyAgICAgIGluICs9IHJlYWRsZW47CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHN3aXRjaCAoaWZyYW1lLT5mcmFtZS5oZC50eXBlKSB7CisgICAgICBjYXNlIE5HSFRUUDJfSEVBREVSUzoKKyAgICAgIGNhc2UgTkdIVFRQMl9QVVNIX1BST01JU0U6CisgICAgICBjYXNlIE5HSFRUUDJfQ09OVElOVUFUSU9OOgorICAgICAgICAvKiBNYXJrIGluZmxhdGVyIGJhZCBzbyB0aGF0IHdlIHdvbid0IHBlcmZvcm0gZnVydGhlciBkZWNvZGluZyAqLworICAgICAgICBzZXNzaW9uLT5oZF9pbmZsYXRlci5jdHguYmFkID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSUJfRlJBTUVfU0laRV9FUlJPUjoKKyAgICAgIERFQlVHRigicmVjdjogW0lCX0ZSQU1FX1NJWkVfRVJST1JdXG4iKTsKKworICAgICAgcnYgPSBzZXNzaW9uX2hhbmRsZV9mcmFtZV9zaXplX2Vycm9yKHNlc3Npb24pOworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgYXNzZXJ0KGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKTsKKworICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgIGNhc2UgTkdIVFRQMl9JQl9SRUFEX1NFVFRJTkdTOgorICAgICAgREVCVUdGKCJyZWN2OiBbSUJfUkVBRF9TRVRUSU5HU11cbiIpOworCisgICAgICByZWFkbGVuID0gaW5ib3VuZF9mcmFtZV9idWZfcmVhZChpZnJhbWUsIGluLCBsYXN0KTsKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKyAgICAgIGluICs9IHJlYWRsZW47CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgaWYgKG5naHR0cDJfYnVmX21hcmtfYXZhaWwoJmlmcmFtZS0+c2J1ZikpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmIChyZWFkbGVuID4gMCkgeworICAgICAgICBpbmJvdW5kX2ZyYW1lX3NldF9zZXR0aW5nc19lbnRyeShpZnJhbWUpOworICAgICAgfQorICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgaW5ib3VuZF9mcmFtZV9zZXRfbWFyayhpZnJhbWUsIE5HSFRUUDJfRlJBTUVfU0VUVElOR1NfRU5UUllfTEVOR1RIKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX3NldHRpbmdzX2ZyYW1lKHNlc3Npb24pOworCisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgfQorCisgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9JQl9SRUFEX0dPQVdBWV9ERUJVRzoKKyAgICAgIERFQlVHRigicmVjdjogW0lCX1JFQURfR09BV0FZX0RFQlVHXVxuIik7CisKKyAgICAgIHJlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX3BheWxvYWRfcmVhZGxlbihpZnJhbWUsIGluLCBsYXN0KTsKKworICAgICAgaWYgKHJlYWRsZW4gPiAwKSB7CisgICAgICAgIGlmcmFtZS0+bGJ1Zi5sYXN0ID0gbmdodHRwMl9jcHltZW0oaWZyYW1lLT5sYnVmLmxhc3QsIGluLCByZWFkbGVuKTsKKworICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IC09IHJlYWRsZW47CisgICAgICAgIGluICs9IHJlYWRsZW47CisgICAgICB9CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgYXNzZXJ0KG5naHR0cDJfYnVmX2F2YWlsKCZpZnJhbWUtPmxidWYpID4gMCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJ2ID0gc2Vzc2lvbl9wcm9jZXNzX2dvYXdheV9mcmFtZShzZXNzaW9uKTsKKworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSUJfRVhQRUNUX0NPTlRJTlVBVElPTjoKKyAgICBjYXNlIE5HSFRUUDJfSUJfSUdOX0NPTlRJTlVBVElPTjoKKyNpZmRlZiBERUJVR0JVSUxECisgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0VYUEVDVF9DT05USU5VQVRJT04pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJyZWN2OiBbSUJfRVhQRUNUX0NPTlRJTlVBVElPTl1cbiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJyZWN2OiBbSUJfSUdOX0NPTlRJTlVBVElPTl1cbiIpOworICAgICAgfQorI2VuZGlmIC8qIERFQlVHQlVJTEQgKi8KKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfYnVmX3JlYWQoaWZyYW1lLCBpbiwgbGFzdCk7CisgICAgICBpbiArPSByZWFkbGVuOworCisgICAgICBpZiAobmdodHRwMl9idWZfbWFya19hdmFpbCgmaWZyYW1lLT5zYnVmKSkgeworICAgICAgICByZXR1cm4gaW4gLSBmaXJzdDsKKyAgICAgIH0KKworICAgICAgbmdodHRwMl9mcmFtZV91bnBhY2tfZnJhbWVfaGQoJmNvbnRfaGQsIGlmcmFtZS0+c2J1Zi5wb3MpOworICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCA9IGNvbnRfaGQubGVuZ3RoOworCisgICAgICBERUJVR0YoInJlY3Y6IHBheWxvYWRsZW49JXp1LCB0eXBlPSV1LCBmbGFncz0weCUwMngsIHN0cmVhbV9pZD0lZFxuIiwKKyAgICAgICAgICAgICBjb250X2hkLmxlbmd0aCwgY29udF9oZC50eXBlLCBjb250X2hkLmZsYWdzLCBjb250X2hkLnN0cmVhbV9pZCk7CisKKyAgICAgIGlmIChjb250X2hkLnR5cGUgIT0gTkdIVFRQMl9DT05USU5VQVRJT04gfHwKKyAgICAgICAgICBjb250X2hkLnN0cmVhbV9pZCAhPSBpZnJhbWUtPmZyYW1lLmhkLnN0cmVhbV9pZCkgeworICAgICAgICBERUJVR0YoInJlY3Y6IGV4cGVjdGVkIHN0cmVhbV9pZD0lZCwgdHlwZT0lZCwgYnV0IGdvdCBzdHJlYW1faWQ9JWQsICIKKyAgICAgICAgICAgICAgICJ0eXBlPSV1XG4iLAorICAgICAgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQsIE5HSFRUUDJfQ09OVElOVUFUSU9OLAorICAgICAgICAgICAgICAgY29udF9oZC5zdHJlYW1faWQsIGNvbnRfaGQudHlwZSk7CisgICAgICAgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3Rlcm1pbmF0ZV9zZXNzaW9uX3dpdGhfcmVhc29uKAorICAgICAgICAgICAgc2Vzc2lvbiwgTkdIVFRQMl9QUk9UT0NPTF9FUlJPUiwKKyAgICAgICAgICAgICJ1bmV4cGVjdGVkIG5vbi1DT05USU5VQVRJT04gZnJhbWUgb3Igc3RyZWFtX2lkIGlzIGludmFsaWQiKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgfQorCisgICAgICAvKiBDT05USU5VQVRJT04gd29uJ3QgYmVhciBOR0hUVFAyX1BBRERFRCBmbGFnICovCisKKyAgICAgIGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgPSAodWludDhfdCkoCisgICAgICAgICAgaWZyYW1lLT5mcmFtZS5oZC5mbGFncyB8IChjb250X2hkLmZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9IRUFERVJTKSk7CisgICAgICBpZnJhbWUtPmZyYW1lLmhkLmxlbmd0aCArPSBjb250X2hkLmxlbmd0aDsKKworICAgICAgYnVzeSA9IDE7CisKKyAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfRVhQRUNUX0NPTlRJTlVBVElPTikgeworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9SRUFEX0hFQURFUl9CTE9DSzsKKworICAgICAgICBydiA9IHNlc3Npb25fY2FsbF9vbl9iZWdpbl9mcmFtZShzZXNzaW9uLCAmY29udF9oZCk7CisKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fSEVBREVSX0JMT0NLOworICAgICAgfQorCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSUJfUkVBRF9QQURfREFUQToKKyAgICAgIERFQlVHRigicmVjdjogW0lCX1JFQURfUEFEX0RBVEFdXG4iKTsKKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfYnVmX3JlYWQoaWZyYW1lLCBpbiwgbGFzdCk7CisgICAgICBpbiArPSByZWFkbGVuOworICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtPSByZWFkbGVuOworCisgICAgICBERUJVR0YoInJlY3Y6IHJlYWRsZW49JXp1LCBwYXlsb2FkbGVmdD0lenUsIGxlZnQ9JXp1XG4iLCByZWFkbGVuLAorICAgICAgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQsIG5naHR0cDJfYnVmX21hcmtfYXZhaWwoJmlmcmFtZS0+c2J1ZikpOworCisgICAgICBpZiAobmdodHRwMl9idWZfbWFya19hdmFpbCgmaWZyYW1lLT5zYnVmKSkgeworICAgICAgICByZXR1cm4gaW4gLSBmaXJzdDsKKyAgICAgIH0KKworICAgICAgLyogUGFkIExlbmd0aCBmaWVsZCBpcyBzdWJqZWN0IHRvIGZsb3cgY29udHJvbCAqLworICAgICAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9yZWN2X2Nvbm5lY3Rpb25fd2luZG93X3NpemUoc2Vzc2lvbiwgcmVhZGxlbik7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgfQorCisgICAgICAvKiBQYWQgTGVuZ3RoIGZpZWxkIGlzIGNvbnN1bWVkIGltbWVkaWF0ZWx5ICovCisgICAgICBydiA9CisgICAgICAgICAgbmdodHRwMl9zZXNzaW9uX2NvbnN1bWUoc2Vzc2lvbiwgaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQsIHJlYWRsZW4pOworCisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgfQorCisgICAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBpZnJhbWUtPmZyYW1lLmhkLnN0cmVhbV9pZCk7CisgICAgICBpZiAoc3RyZWFtKSB7CisgICAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfcmVjdl9zdHJlYW1fd2luZG93X3NpemUoCisgICAgICAgICAgICBzZXNzaW9uLCBzdHJlYW0sIHJlYWRsZW4sCisgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IHx8CisgICAgICAgICAgICAgICAgKGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkgPT0gMCk7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBidXN5ID0gMTsKKworICAgICAgcGFkbGVuID0gaW5ib3VuZF9mcmFtZV9jb21wdXRlX3BhZChpZnJhbWUpOworICAgICAgaWYgKHBhZGxlbiA8IDApIHsKKyAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdGVybWluYXRlX3Nlc3Npb25fd2l0aF9yZWFzb24oCisgICAgICAgICAgICBzZXNzaW9uLCBOR0hUVFAyX1BST1RPQ09MX0VSUk9SLCAiREFUQTogaW52YWxpZCBwYWRkaW5nIik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgICB9CisKKyAgICAgIGlmcmFtZS0+ZnJhbWUuZGF0YS5wYWRsZW4gPSAoc2l6ZV90KXBhZGxlbjsKKworICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfUkVBRF9EQVRBOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSUJfUkVBRF9EQVRBOgorICAgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQpOworCisgICAgICBpZiAoIXN0cmVhbSkgeworICAgICAgICBidXN5ID0gMTsKKyAgICAgICAgaWZyYW1lLT5zdGF0ZSA9IE5HSFRUUDJfSUJfSUdOX0RBVEE7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBERUJVR0YoInJlY3Y6IFtJQl9SRUFEX0RBVEFdXG4iKTsKKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfcGF5bG9hZF9yZWFkbGVuKGlmcmFtZSwgaW4sIGxhc3QpOworICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtPSByZWFkbGVuOworICAgICAgaW4gKz0gcmVhZGxlbjsKKworICAgICAgREVCVUdGKCJyZWN2OiByZWFkbGVuPSV6dSwgcGF5bG9hZGxlZnQ9JXp1XG4iLCByZWFkbGVuLAorICAgICAgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQpOworCisgICAgICBpZiAocmVhZGxlbiA+IDApIHsKKyAgICAgICAgc3NpemVfdCBkYXRhX3JlYWRsZW47CisKKyAgICAgICAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9yZWN2X2Nvbm5lY3Rpb25fd2luZG93X3NpemUoc2Vzc2lvbiwgcmVhZGxlbik7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgfQorCisgICAgICAgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfcmVjdl9zdHJlYW1fd2luZG93X3NpemUoCisgICAgICAgICAgICBzZXNzaW9uLCBzdHJlYW0sIHJlYWRsZW4sCisgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0IHx8CisgICAgICAgICAgICAgICAgKGlmcmFtZS0+ZnJhbWUuaGQuZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkgPT0gMCk7CisgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFfcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfZWZmZWN0aXZlX3JlYWRsZW4oCisgICAgICAgICAgICBpZnJhbWUsIGlmcmFtZS0+cGF5bG9hZGxlZnQsIHJlYWRsZW4pOworCisgICAgICAgIGlmIChkYXRhX3JlYWRsZW4gPT0gLTEpIHsKKyAgICAgICAgICAvKiBldmVyeXRoaW5nIGlzIHBhZGRpbmcgKi8KKyAgICAgICAgICBkYXRhX3JlYWRsZW4gPSAwOworICAgICAgICB9CisKKyAgICAgICAgcGFkbGVuID0gKHNzaXplX3QpcmVhZGxlbiAtIGRhdGFfcmVhZGxlbjsKKworICAgICAgICBpZiAocGFkbGVuID4gMCkgeworICAgICAgICAgIC8qIFBhZGRpbmcgaXMgY29uc2lkZXJlZCBhcyAiY29uc3VtZWQiIGltbWVkaWF0ZWx5ICovCisgICAgICAgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZShzZXNzaW9uLCBpZnJhbWUtPmZyYW1lLmhkLnN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcGFkbGVuKTsKKworICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0FMTCkgeworICAgICAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIERFQlVHRigicmVjdjogZGF0YV9yZWFkbGVuPSV6ZFxuIiwgZGF0YV9yZWFkbGVuKTsKKworICAgICAgICBpZiAoZGF0YV9yZWFkbGVuID4gMCkgeworICAgICAgICAgIGlmIChzZXNzaW9uX2VuZm9yY2VfaHR0cF9tZXNzYWdpbmcoc2Vzc2lvbikpIHsKKyAgICAgICAgICAgIGlmIChuZ2h0dHAyX2h0dHBfb25fZGF0YV9jaHVuayhzdHJlYW0sIChzaXplX3QpZGF0YV9yZWFkbGVuKSAhPSAwKSB7CisgICAgICAgICAgICAgIGlmIChzZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19XSU5ET1dfVVBEQVRFKSB7CisgICAgICAgICAgICAgICAgLyogQ29uc3VtZSBhbGwgZGF0YSBmb3IgY29ubmVjdGlvbiBpbW1lZGlhdGVseSBoZXJlICovCisgICAgICAgICAgICAgICAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9jb25uZWN0aW9uX2NvbnN1bWVkX3NpemUoCisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24sIChzaXplX3QpZGF0YV9yZWFkbGVuKTsKKworICAgICAgICAgICAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpZnJhbWUtPnN0YXRlID09IE5HSFRUUDJfSUJfSUdOX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfcnN0X3N0cmVhbSgKKyAgICAgICAgICAgICAgICAgIHNlc3Npb24sIGlmcmFtZS0+ZnJhbWUuaGQuc3RyZWFtX2lkLCBOR0hUVFAyX1BST1RPQ09MX0VSUk9SKTsKKyAgICAgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJ1c3kgPSAxOworICAgICAgICAgICAgICBpZnJhbWUtPnN0YXRlID0gTkdIVFRQMl9JQl9JR05fREFUQTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChzZXNzaW9uLT5jYWxsYmFja3Mub25fZGF0YV9jaHVua19yZWN2X2NhbGxiYWNrKSB7CisgICAgICAgICAgICBydiA9IHNlc3Npb24tPmNhbGxiYWNrcy5vbl9kYXRhX2NodW5rX3JlY3ZfY2FsbGJhY2soCisgICAgICAgICAgICAgICAgc2Vzc2lvbiwgaWZyYW1lLT5mcmFtZS5oZC5mbGFncywgaWZyYW1lLT5mcmFtZS5oZC5zdHJlYW1faWQsCisgICAgICAgICAgICAgICAgaW4gLSByZWFkbGVuLCAoc2l6ZV90KWRhdGFfcmVhZGxlbiwgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKyAgICAgICAgICAgIGlmIChydiA9PSBOR0hUVFAyX0VSUl9QQVVTRSkgeworICAgICAgICAgICAgICByZXR1cm4gaW4gLSBmaXJzdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgcnYgPSBzZXNzaW9uX3Byb2Nlc3NfZGF0YV9mcmFtZShzZXNzaW9uKTsKKyAgICAgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisKKyAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0lCX0lHTl9EQVRBOgorICAgICAgREVCVUdGKCJyZWN2OiBbSUJfSUdOX0RBVEFdXG4iKTsKKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfcGF5bG9hZF9yZWFkbGVuKGlmcmFtZSwgaW4sIGxhc3QpOworICAgICAgaWZyYW1lLT5wYXlsb2FkbGVmdCAtPSByZWFkbGVuOworICAgICAgaW4gKz0gcmVhZGxlbjsKKworICAgICAgREVCVUdGKCJyZWN2OiByZWFkbGVuPSV6dSwgcGF5bG9hZGxlZnQ9JXp1XG4iLCByZWFkbGVuLAorICAgICAgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQpOworCisgICAgICBpZiAocmVhZGxlbiA+IDApIHsKKyAgICAgICAgLyogVXBkYXRlIGNvbm5lY3Rpb24tbGV2ZWwgZmxvdyBjb250cm9sIHdpbmRvdyBmb3IgaWdub3JlZAorICAgICAgICAgICBEQVRBIGZyYW1lIHRvbyAqLworICAgICAgICBydiA9IHNlc3Npb25fdXBkYXRlX3JlY3ZfY29ubmVjdGlvbl93aW5kb3dfc2l6ZShzZXNzaW9uLCByZWFkbGVuKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlmcmFtZS0+c3RhdGUgPT0gTkdIVFRQMl9JQl9JR05fQUxMKSB7CisgICAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlc3Npb24tPm9wdF9mbGFncyAmIE5HSFRUUDJfT1BUTUFTS19OT19BVVRPX1dJTkRPV19VUERBVEUpIHsKKworICAgICAgICAgIC8qIElnbm9yZWQgREFUQSBpcyBjb25zaWRlcmVkIGFzICJjb25zdW1lZCIgaW1tZWRpYXRlbHkuICovCisgICAgICAgICAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9jb25uZWN0aW9uX2NvbnN1bWVkX3NpemUoc2Vzc2lvbiwgcmVhZGxlbik7CisKKyAgICAgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAoc3NpemVfdClpbmxlbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHNlc3Npb25faW5ib3VuZF9mcmFtZV9yZXNldChzZXNzaW9uKTsKKworICAgICAgYnJlYWs7CisgICAgY2FzZSBOR0hUVFAyX0lCX0lHTl9BTEw6CisgICAgICByZXR1cm4gKHNzaXplX3QpaW5sZW47CisgICAgY2FzZSBOR0hUVFAyX0lCX1JFQURfRVhURU5TSU9OX1BBWUxPQUQ6CisgICAgICBERUJVR0YoInJlY3Y6IFtJQl9SRUFEX0VYVEVOU0lPTl9QQVlMT0FEXVxuIik7CisKKyAgICAgIHJlYWRsZW4gPSBpbmJvdW5kX2ZyYW1lX3BheWxvYWRfcmVhZGxlbihpZnJhbWUsIGluLCBsYXN0KTsKKyAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKyAgICAgIGluICs9IHJlYWRsZW47CisKKyAgICAgIERFQlVHRigicmVjdjogcmVhZGxlbj0lenUsIHBheWxvYWRsZWZ0PSV6dVxuIiwgcmVhZGxlbiwKKyAgICAgICAgICAgICBpZnJhbWUtPnBheWxvYWRsZWZ0KTsKKworICAgICAgaWYgKHJlYWRsZW4gPiAwKSB7CisgICAgICAgIHJ2ID0gc2Vzc2lvbl9jYWxsX29uX2V4dGVuc2lvbl9jaHVua19yZWN2X2NhbGxiYWNrKAorICAgICAgICAgICAgc2Vzc2lvbiwgaW4gLSByZWFkbGVuLCByZWFkbGVuKTsKKyAgICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgICBidXN5ID0gMTsKKworICAgICAgICAgIGlmcmFtZS0+c3RhdGUgPSBOR0hUVFAyX0lCX0lHTl9QQVlMT0FEOworCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGlmcmFtZS0+cGF5bG9hZGxlZnQgPiAwKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBydiA9IHNlc3Npb25fcHJvY2Vzc19leHRlbnNpb25fZnJhbWUoc2Vzc2lvbik7CisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTkdIVFRQMl9JQl9SRUFEX0FMVFNWQ19QQVlMT0FEOgorICAgICAgREVCVUdGKCJyZWN2OiBbSUJfUkVBRF9BTFRTVkNfUEFZTE9BRF1cbiIpOworCisgICAgICByZWFkbGVuID0gaW5ib3VuZF9mcmFtZV9wYXlsb2FkX3JlYWRsZW4oaWZyYW1lLCBpbiwgbGFzdCk7CisgICAgICBpZiAocmVhZGxlbiA+IDApIHsKKyAgICAgICAgaWZyYW1lLT5sYnVmLmxhc3QgPSBuZ2h0dHAyX2NweW1lbShpZnJhbWUtPmxidWYubGFzdCwgaW4sIHJlYWRsZW4pOworCisgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKyAgICAgICAgaW4gKz0gcmVhZGxlbjsKKyAgICAgIH0KKworICAgICAgREVCVUdGKCJyZWN2OiByZWFkbGVuPSV6dSwgcGF5bG9hZGxlZnQ9JXp1XG4iLCByZWFkbGVuLAorICAgICAgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQpOworCisgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgICAgICBhc3NlcnQobmdodHRwMl9idWZfYXZhaWwoJmlmcmFtZS0+bGJ1ZikgPiAwKTsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgcnYgPSBzZXNzaW9uX3Byb2Nlc3NfYWx0c3ZjX2ZyYW1lKHNlc3Npb24pOworICAgICAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKworICAgICAgc2Vzc2lvbl9pbmJvdW5kX2ZyYW1lX3Jlc2V0KHNlc3Npb24pOworCisgICAgICBicmVhazsKKyAgICBjYXNlIE5HSFRUUDJfSUJfUkVBRF9PUklHSU5fUEFZTE9BRDoKKyAgICAgIERFQlVHRigicmVjdjogW0lCX1JFQURfT1JJR0lOX1BBWUxPQURdXG4iKTsKKworICAgICAgcmVhZGxlbiA9IGluYm91bmRfZnJhbWVfcGF5bG9hZF9yZWFkbGVuKGlmcmFtZSwgaW4sIGxhc3QpOworCisgICAgICBpZiAocmVhZGxlbiA+IDApIHsKKyAgICAgICAgaWZyYW1lLT5sYnVmLmxhc3QgPSBuZ2h0dHAyX2NweW1lbShpZnJhbWUtPmxidWYubGFzdCwgaW4sIHJlYWRsZW4pOworCisgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQgLT0gcmVhZGxlbjsKKyAgICAgICAgaW4gKz0gcmVhZGxlbjsKKyAgICAgIH0KKworICAgICAgREVCVUdGKCJyZWN2OiByZWFkbGVuPSV6dSwgcGF5bG9hZGxlZnQ9JXp1XG4iLCByZWFkbGVuLAorICAgICAgICAgICAgIGlmcmFtZS0+cGF5bG9hZGxlZnQpOworCisgICAgICBpZiAoaWZyYW1lLT5wYXlsb2FkbGVmdCkgeworICAgICAgICBhc3NlcnQobmdodHRwMl9idWZfYXZhaWwoJmlmcmFtZS0+bGJ1ZikgPiAwKTsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgcnYgPSBzZXNzaW9uX3Byb2Nlc3Nfb3JpZ2luX2ZyYW1lKHNlc3Npb24pOworCisgICAgICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgICAgfQorCisgICAgICBpZiAoaWZyYW1lLT5zdGF0ZSA9PSBOR0hUVFAyX0lCX0lHTl9BTEwpIHsKKyAgICAgICAgcmV0dXJuIChzc2l6ZV90KWlubGVuOworICAgICAgfQorCisgICAgICBzZXNzaW9uX2luYm91bmRfZnJhbWVfcmVzZXQoc2Vzc2lvbik7CisKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghYnVzeSAmJiBpbiA9PSBsYXN0KSB7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBidXN5ID0gMDsKKyAgfQorCisgIGFzc2VydChpbiA9PSBsYXN0KTsKKworICByZXR1cm4gaW4gLSBmaXJzdDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9yZWN2KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICB1aW50OF90IGJ1ZltOR0hUVFAyX0lOQk9VTkRfQlVGRkVSX0xFTkdUSF07CisgIHdoaWxlICgxKSB7CisgICAgc3NpemVfdCByZWFkbGVuOworICAgIHJlYWRsZW4gPSBzZXNzaW9uX3JlY3Yoc2Vzc2lvbiwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgaWYgKHJlYWRsZW4gPiAwKSB7CisgICAgICBzc2l6ZV90IHByb2NsZW4gPSBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3Yoc2Vzc2lvbiwgYnVmLCAoc2l6ZV90KXJlYWRsZW4pOworICAgICAgaWYgKHByb2NsZW4gPCAwKSB7CisgICAgICAgIHJldHVybiAoaW50KXByb2NsZW47CisgICAgICB9CisgICAgICBhc3NlcnQocHJvY2xlbiA9PSByZWFkbGVuKTsKKyAgICB9IGVsc2UgaWYgKHJlYWRsZW4gPT0gMCB8fCByZWFkbGVuID09IE5HSFRUUDJfRVJSX1dPVUxEQkxPQ0spIHsKKyAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAocmVhZGxlbiA9PSBOR0hUVFAyX0VSUl9FT0YpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9FT0Y7CisgICAgfSBlbHNlIGlmIChyZWFkbGVuIDwgMCkgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgICAgfQorICB9Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYWN0aXZlIHN0cmVhbXMsIHdoaWNoIGluY2x1ZGVzIHN0cmVhbXMgaW4KKyAqIHJlc2VydmVkIHN0YXRlLgorICovCitzdGF0aWMgc2l6ZV90IHNlc3Npb25fZ2V0X251bV9hY3RpdmVfc3RyZWFtcyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIG5naHR0cDJfbWFwX3NpemUoJnNlc3Npb24tPnN0cmVhbXMpIC0gc2Vzc2lvbi0+bnVtX2Nsb3NlZF9zdHJlYW1zIC0KKyAgICAgICAgIHNlc3Npb24tPm51bV9pZGxlX3N0cmVhbXM7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fd2FudF9yZWFkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBzaXplX3QgbnVtX2FjdGl2ZV9zdHJlYW1zOworCisgIC8qIElmIHRoaXMgZmxhZyBpcyBzZXQsIHdlIGRvbid0IHdhbnQgdG8gcmVhZC4gVGhlIGFwcGxpY2F0aW9uCisgICAgIHNob3VsZCBkcm9wIHRoZSBjb25uZWN0aW9uLiAqLworICBpZiAoc2Vzc2lvbi0+Z29hd2F5X2ZsYWdzICYgTkdIVFRQMl9HT0FXQVlfVEVSTV9TRU5UKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBudW1fYWN0aXZlX3N0cmVhbXMgPSBzZXNzaW9uX2dldF9udW1fYWN0aXZlX3N0cmVhbXMoc2Vzc2lvbik7CisKKyAgLyogVW5sZXNzIHRlcm1pbmF0aW9uIEdPQVdBWSBpcyBzZW50IG9yIHJlY2VpdmVkLCB3ZSBhbHdheXMgd2FudCB0bworICAgICByZWFkIGluY29taW5nIGZyYW1lcy4gKi8KKworICBpZiAobnVtX2FjdGl2ZV9zdHJlYW1zID4gMCkgeworICAgIHJldHVybiAxOworICB9CisKKyAgLyogSWYgdGhlcmUgaXMgbm8gYWN0aXZlIHN0cmVhbXMgYW5kIEdPQVdBWSBoYXMgYmVlbiBzZW50IG9yCisgICAgIHJlY2VpdmVkLCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgc2Vzc2lvbi4gKi8KKyAgcmV0dXJuIChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgJgorICAgICAgICAgIChOR0hUVFAyX0dPQVdBWV9TRU5UIHwgTkdIVFRQMl9HT0FXQVlfUkVDVikpID09IDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fd2FudF93cml0ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgLyogSWYgdGhlc2UgZmxhZyBpcyBzZXQsIHdlIGRvbid0IHdhbnQgdG8gd3JpdGUgYW55IGRhdGEuIFRoZQorICAgICBhcHBsaWNhdGlvbiBzaG91bGQgZHJvcCB0aGUgY29ubmVjdGlvbi4gKi8KKyAgaWYgKHNlc3Npb24tPmdvYXdheV9mbGFncyAmIE5HSFRUUDJfR09BV0FZX1RFUk1fU0VOVCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgLyoKKyAgICogVW5sZXNzIHRlcm1pbmF0aW9uIEdPQVdBWSBpcyBzZW50IG9yIHJlY2VpdmVkLCB3ZSB3YW50IHRvIHdyaXRlCisgICAqIGZyYW1lcyBpZiB0aGVyZSBpcyBwZW5kaW5nIG9uZXMuIElmIHBlbmRpbmcgZnJhbWUgaXMgcmVxdWVzdC9wdXNoCisgICAqIHJlc3BvbnNlIEhFQURFUlMgYW5kIGNvbmN1cnJlbnQgc3RyZWFtIGxpbWl0IGlzIHJlYWNoZWQsIHdlIGRvbid0CisgICAqIHdhbnQgdG8gd3JpdGUgdGhlbS4KKyAgICovCisgIHJldHVybiBzZXNzaW9uLT5hb2IuaXRlbSB8fCBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcCgmc2Vzc2lvbi0+b2JfdXJnZW50KSB8fAorICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV90b3AoJnNlc3Npb24tPm9iX3JlZykgfHwKKyAgICAgICAgICghbmdodHRwMl9wcV9lbXB0eSgmc2Vzc2lvbi0+cm9vdC5vYnEpICYmCisgICAgICAgICAgc2Vzc2lvbi0+cmVtb3RlX3dpbmRvd19zaXplID4gMCkgfHwKKyAgICAgICAgIChuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcCgmc2Vzc2lvbi0+b2Jfc3luKSAmJgorICAgICAgICAgICFzZXNzaW9uX2lzX291dGdvaW5nX2NvbmN1cnJlbnRfc3RyZWFtc19tYXgoc2Vzc2lvbikpOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9waW5nKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqb3BhcXVlX2RhdGEpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKChmbGFncyAmIE5HSFRUUDJfRkxBR19BQ0spICYmCisgICAgICBzZXNzaW9uLT5vYnFfZmxvb2RfY291bnRlcl8gPj0gc2Vzc2lvbi0+bWF4X291dGJvdW5kX2FjaykgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9GTE9PREVEOworICB9CisKKyAgaXRlbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX291dGJvdW5kX2l0ZW0pKTsKKyAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9pbml0KGl0ZW0pOworCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworCisgIG5naHR0cDJfZnJhbWVfcGluZ19pbml0KCZmcmFtZS0+cGluZywgZmxhZ3MsIG9wYXF1ZV9kYXRhKTsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfcGluZ19mcmVlKCZmcmFtZS0+cGluZyk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworICAgIHJldHVybiBydjsKKyAgfQorCisgIGlmIChmbGFncyAmIE5HSFRUUDJfRkxBR19BQ0spIHsKKyAgICArK3Nlc3Npb24tPm9icV9mbG9vZF9jb3VudGVyXzsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9nb2F3YXkobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IGxhc3Rfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUsIGNvbnN0IHVpbnQ4X3QgKm9wYXF1ZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvcGFxdWVfZGF0YV9sZW4sIHVpbnQ4X3QgYXV4X2ZsYWdzKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgdWludDhfdCAqb3BhcXVlX2RhdGFfY29weSA9IE5VTEw7CisgIG5naHR0cDJfZ29hd2F5X2F1eF9kYXRhICphdXhfZGF0YTsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmIChuZ2h0dHAyX3Nlc3Npb25faXNfbXlfc3RyZWFtX2lkKHNlc3Npb24sIGxhc3Rfc3RyZWFtX2lkKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgaWYgKG9wYXF1ZV9kYXRhX2xlbikgeworICAgIGlmIChvcGFxdWVfZGF0YV9sZW4gKyA4ID4gTkdIVFRQMl9NQVhfUEFZTE9BRExFTikgeworICAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgfQorICAgIG9wYXF1ZV9kYXRhX2NvcHkgPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBvcGFxdWVfZGF0YV9sZW4pOworICAgIGlmIChvcGFxdWVfZGF0YV9jb3B5ID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICB9CisgICAgbWVtY3B5KG9wYXF1ZV9kYXRhX2NvcHksIG9wYXF1ZV9kYXRhLCBvcGFxdWVfZGF0YV9sZW4pOworICB9CisKKyAgaXRlbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX291dGJvdW5kX2l0ZW0pKTsKKyAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBvcGFxdWVfZGF0YV9jb3B5KTsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1faW5pdChpdGVtKTsKKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICAvKiBsYXN0X3N0cmVhbV9pZCBtdXN0IG5vdCBiZSBpbmNyZWFzZWQgZnJvbSB0aGUgdmFsdWUgcHJldmlvdXNseQorICAgICBzZW50ICovCisgIGxhc3Rfc3RyZWFtX2lkID0gbmdodHRwMl9taW4obGFzdF9zdHJlYW1faWQsIHNlc3Npb24tPmxvY2FsX2xhc3Rfc3RyZWFtX2lkKTsKKworICBuZ2h0dHAyX2ZyYW1lX2dvYXdheV9pbml0KCZmcmFtZS0+Z29hd2F5LCBsYXN0X3N0cmVhbV9pZCwgZXJyb3JfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFxdWVfZGF0YV9jb3B5LCBvcGFxdWVfZGF0YV9sZW4pOworCisgIGF1eF9kYXRhID0gJml0ZW0tPmF1eF9kYXRhLmdvYXdheTsKKyAgYXV4X2RhdGEtPmZsYWdzID0gYXV4X2ZsYWdzOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKHNlc3Npb24sIGl0ZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfZ29hd2F5X2ZyZWUoJmZyYW1lLT5nb2F3YXksIG1lbSk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGRfd2luZG93X3VwZGF0ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdpbmRvd19zaXplX2luY3JlbWVudCkgeworICBpbnQgcnY7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKyAgaXRlbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX291dGJvdW5kX2l0ZW0pKTsKKyAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbV9pbml0KGl0ZW0pOworCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworCisgIG5naHR0cDJfZnJhbWVfd2luZG93X3VwZGF0ZV9pbml0KCZmcmFtZS0+d2luZG93X3VwZGF0ZSwgZmxhZ3MsIHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93X3NpemVfaW5jcmVtZW50KTsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfd2luZG93X3VwZGF0ZV9mcmVlKCZmcmFtZS0+d2luZG93X3VwZGF0ZSk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Nlc3Npb25fYXBwZW5kX2luZmxpZ2h0X3NldHRpbmdzKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3MgKnNldHRpbmdzKSB7CisgIG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3MgKippOworCisgIGZvciAoaSA9ICZzZXNzaW9uLT5pbmZsaWdodF9zZXR0aW5nc19oZWFkOyAqaTsgaSA9ICYoKmkpLT5uZXh0KQorICAgIDsKKworICAqaSA9IHNldHRpbmdzOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9zZXR0aW5ncyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdiwgc2l6ZV90IG5pdikgeworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdl9jb3B5OworICBzaXplX3QgaTsKKyAgaW50IHJ2OworICBuZ2h0dHAyX21lbSAqbWVtOworICBuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzICppbmZsaWdodF9zZXR0aW5ncyA9IE5VTEw7CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICBpZiAoZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfQUNLKSB7CisgICAgaWYgKG5pdiAhPSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICB9CisKKyAgICBpZiAoc2Vzc2lvbi0+b2JxX2Zsb29kX2NvdW50ZXJfID49IHNlc3Npb24tPm1heF9vdXRib3VuZF9hY2spIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9GTE9PREVEOworICAgIH0KKyAgfQorCisgIGlmICghbmdodHRwMl9pdl9jaGVjayhpdiwgbml2KSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgaXRlbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX291dGJvdW5kX2l0ZW0pKTsKKyAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIGlmIChuaXYgPiAwKSB7CisgICAgaXZfY29weSA9IG5naHR0cDJfZnJhbWVfaXZfY29weShpdiwgbml2LCBtZW0pOworICAgIGlmIChpdl9jb3B5ID09IE5VTEwpIHsKKyAgICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaXZfY29weSA9IE5VTEw7CisgIH0KKworICBpZiAoKGZsYWdzICYgTkdIVFRQMl9GTEFHX0FDSykgPT0gMCkgeworICAgIHJ2ID0gaW5mbGlnaHRfc2V0dGluZ3NfbmV3KCZpbmZsaWdodF9zZXR0aW5ncywgaXYsIG5pdiwgbWVtKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgYXNzZXJ0KG5naHR0cDJfaXNfZmF0YWwocnYpKTsKKyAgICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdl9jb3B5KTsKKyAgICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1faW5pdChpdGVtKTsKKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKworICBuZ2h0dHAyX2ZyYW1lX3NldHRpbmdzX2luaXQoJmZyYW1lLT5zZXR0aW5ncywgZmxhZ3MsIGl2X2NvcHksIG5pdik7CisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKHNlc3Npb24sIGl0ZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIC8qIFRoZSBvbmx5IGV4cGVjdGVkIGVycm9yIGlzIGZhdGFsIG9uZSAqLworICAgIGFzc2VydChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSk7CisKKyAgICBpbmZsaWdodF9zZXR0aW5nc19kZWwoaW5mbGlnaHRfc2V0dGluZ3MsIG1lbSk7CisKKyAgICBuZ2h0dHAyX2ZyYW1lX3NldHRpbmdzX2ZyZWUoJmZyYW1lLT5zZXR0aW5ncywgbWVtKTsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBpZiAoZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfQUNLKSB7CisgICAgKytzZXNzaW9uLT5vYnFfZmxvb2RfY291bnRlcl87CisgIH0gZWxzZSB7CisgICAgc2Vzc2lvbl9hcHBlbmRfaW5mbGlnaHRfc2V0dGluZ3Moc2Vzc2lvbiwgaW5mbGlnaHRfc2V0dGluZ3MpOworICB9CisKKyAgLyogRXh0cmFjdCBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgYW5kIEVOQUJMRV9QVVNICisgICAgIGhlcmUuICBXZSB1c2UgaXQgdG8gcmVmdXNlIHRoZSBpbmNvbWluZyBzdHJlYW0gYW5kIFBVU0hfUFJPTUlTRQorICAgICB3aXRoIFJTVF9TVFJFQU0uICovCisKKyAgZm9yIChpID0gbml2OyBpID4gMDsgLS1pKSB7CisgICAgaWYgKGl2W2kgLSAxXS5zZXR0aW5nc19pZCA9PSBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHsKKyAgICAgIHNlc3Npb24tPnBlbmRpbmdfbG9jYWxfbWF4X2NvbmN1cnJlbnRfc3RyZWFtID0gaXZbaSAtIDFdLnZhbHVlOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgZm9yIChpID0gbml2OyBpID4gMDsgLS1pKSB7CisgICAgaWYgKGl2W2kgLSAxXS5zZXR0aW5nc19pZCA9PSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9QVVNIKSB7CisgICAgICBzZXNzaW9uLT5wZW5kaW5nX2VuYWJsZV9wdXNoID0gKHVpbnQ4X3QpaXZbaSAtIDFdLnZhbHVlOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgZm9yIChpID0gbml2OyBpID4gMDsgLS1pKSB7CisgICAgaWYgKGl2W2kgLSAxXS5zZXR0aW5nc19pZCA9PSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9DT05ORUNUX1BST1RPQ09MKSB7CisgICAgICBzZXNzaW9uLT5wZW5kaW5nX2VuYWJsZV9jb25uZWN0X3Byb3RvY29sID0gKHVpbnQ4X3QpaXZbaSAtIDFdLnZhbHVlOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fcGFja19kYXRhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgbmdodHRwMl9idWZzICpidWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFtYXgsIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9kYXRhX2F1eF9kYXRhICphdXhfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaW50IHJ2OworICB1aW50MzJfdCBkYXRhX2ZsYWdzOworICBzc2l6ZV90IHBheWxvYWRsZW47CisgIHNzaXplX3QgcGFkZGVkX3BheWxvYWRsZW47CisgIG5naHR0cDJfYnVmICpidWY7CisgIHNpemVfdCBtYXhfcGF5bG9hZGxlbjsKKworICBhc3NlcnQoYnVmcy0+aGVhZCA9PSBidWZzLT5jdXIpOworCisgIGJ1ZiA9ICZidWZzLT5jdXItPmJ1ZjsKKworICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLnJlYWRfbGVuZ3RoX2NhbGxiYWNrKSB7CisKKyAgICBwYXlsb2FkbGVuID0gc2Vzc2lvbi0+Y2FsbGJhY2tzLnJlYWRfbGVuZ3RoX2NhbGxiYWNrKAorICAgICAgICBzZXNzaW9uLCBmcmFtZS0+aGQudHlwZSwgc3RyZWFtLT5zdHJlYW1faWQsIHNlc3Npb24tPnJlbW90ZV93aW5kb3dfc2l6ZSwKKyAgICAgICAgc3RyZWFtLT5yZW1vdGVfd2luZG93X3NpemUsIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5tYXhfZnJhbWVfc2l6ZSwKKyAgICAgICAgc2Vzc2lvbi0+dXNlcl9kYXRhKTsKKworICAgIERFQlVHRigic2VuZDogcmVhZF9sZW5ndGhfY2FsbGJhY2s9JXpkXG4iLCBwYXlsb2FkbGVuKTsKKworICAgIHBheWxvYWRsZW4gPSBuZ2h0dHAyX3Nlc3Npb25fZW5mb3JjZV9mbG93X2NvbnRyb2xfbGltaXRzKHNlc3Npb24sIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkbGVuKTsKKworICAgIERFQlVHRigic2VuZDogcmVhZF9sZW5ndGhfY2FsbGJhY2sgYWZ0ZXIgZmxvdyBjb250cm9sPSV6ZFxuIiwgcGF5bG9hZGxlbik7CisKKyAgICBpZiAocGF5bG9hZGxlbiA8PSAwKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpZiAoKHNpemVfdClwYXlsb2FkbGVuID4gbmdodHRwMl9idWZfYXZhaWwoYnVmKSkgeworICAgICAgLyogUmVzaXplIHRoZSBjdXJyZW50IGJ1ZmZlcihzKS4gIFRoZSByZWFzb24gd2h5IHdlIGRvICsxIGZvcgorICAgICAgICAgYnVmZmVyIHNpemUgaXMgZm9yIHBvc3NpYmxlIHBhZGRpbmcgZmllbGQuICovCisgICAgICBydiA9IG5naHR0cDJfYnVmc19yZWFsbG9jKCZzZXNzaW9uLT5hb2IuZnJhbWVidWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KShOR0hUVFAyX0ZSQU1FX0hETEVOICsgMSArIHBheWxvYWRsZW4pKTsKKworICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgREVCVUdGKCJzZW5kOiByZWFsbG9jIGJ1ZmZlciBmYWlsZWQgcnY9JWQiLCBydik7CisgICAgICAgIC8qIElmIHJlYWxsb2NhdGlvbiBmYWlsZWQsIG9sZCBidWZmZXJzIGFyZSBzdGlsbCBpbiB0YWN0LiAgU28KKyAgICAgICAgICAgdXNlIHNhZmUgbGltaXQuICovCisgICAgICAgIHBheWxvYWRsZW4gPSAoc3NpemVfdClkYXRhbWF4OworCisgICAgICAgIERFQlVHRigic2VuZDogdXNlIHNhZmUgbGltaXQgcGF5bG9hZGxlbj0lemQiLCBwYXlsb2FkbGVuKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydCgmc2Vzc2lvbi0+YW9iLmZyYW1lYnVmcyA9PSBidWZzKTsKKworICAgICAgICBidWYgPSAmYnVmcy0+Y3VyLT5idWY7CisgICAgICB9CisgICAgfQorICAgIGRhdGFtYXggPSAoc2l6ZV90KXBheWxvYWRsZW47CisgIH0KKworICAvKiBDdXJyZW50IG1heCBEQVRBIGxlbmd0aCBpcyBsZXNzIHRoZW4gYnVmZmVyIGNodW5rIHNpemUgKi8KKyAgYXNzZXJ0KG5naHR0cDJfYnVmX2F2YWlsKGJ1ZikgPj0gZGF0YW1heCk7CisKKyAgZGF0YV9mbGFncyA9IE5HSFRUUDJfREFUQV9GTEFHX05PTkU7CisgIHBheWxvYWRsZW4gPSBhdXhfZGF0YS0+ZGF0YV9wcmQucmVhZF9jYWxsYmFjaygKKyAgICAgIHNlc3Npb24sIGZyYW1lLT5oZC5zdHJlYW1faWQsIGJ1Zi0+cG9zLCBkYXRhbWF4LCAmZGF0YV9mbGFncywKKyAgICAgICZhdXhfZGF0YS0+ZGF0YV9wcmQuc291cmNlLCBzZXNzaW9uLT51c2VyX2RhdGEpOworCisgIGlmIChwYXlsb2FkbGVuID09IE5HSFRUUDJfRVJSX0RFRkVSUkVEIHx8CisgICAgICBwYXlsb2FkbGVuID09IE5HSFRUUDJfRVJSX1RFTVBPUkFMX0NBTExCQUNLX0ZBSUxVUkUgfHwKKyAgICAgIHBheWxvYWRsZW4gPT0gTkdIVFRQMl9FUlJfUEFVU0UpIHsKKyAgICBERUJVR0YoInNlbmQ6IERBVEEgcG9zdHBvbmVkIGR1ZSB0byAlc1xuIiwKKyAgICAgICAgICAgbmdodHRwMl9zdHJlcnJvcigoaW50KXBheWxvYWRsZW4pKTsKKworICAgIHJldHVybiAoaW50KXBheWxvYWRsZW47CisgIH0KKworICBpZiAocGF5bG9hZGxlbiA8IDAgfHwgZGF0YW1heCA8IChzaXplX3QpcGF5bG9hZGxlbikgeworICAgIC8qIFRoaXMgaXMgdGhlIGVycm9yIGNvZGUgd2hlbiBjYWxsYmFjayBpcyBmYWlsZWQuICovCisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkU7CisgIH0KKworICBidWYtPmxhc3QgPSBidWYtPnBvcyArIHBheWxvYWRsZW47CisgIGJ1Zi0+cG9zIC09IE5HSFRUUDJfRlJBTUVfSERMRU47CisKKyAgLyogQ2xlYXIgZmxhZ3MsIGJlY2F1c2UgdGhpcyBtYXkgY29udGFpbiBwcmV2aW91cyBmbGFncyBvZiBwcmV2aW91cworICAgICBEQVRBICovCisgIGZyYW1lLT5oZC5mbGFncyA9IE5HSFRUUDJfRkxBR19OT05FOworCisgIGlmIChkYXRhX2ZsYWdzICYgTkdIVFRQMl9EQVRBX0ZMQUdfRU9GKSB7CisgICAgYXV4X2RhdGEtPmVvZiA9IDE7CisgICAgLyogSWYgTkdIVFRQMl9EQVRBX0ZMQUdfTk9fRU5EX1NUUkVBTSBpcyBzZXQsIGRvbid0IHNldAorICAgICAgIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNICovCisgICAgaWYgKChhdXhfZGF0YS0+ZmxhZ3MgJiBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTSkgJiYKKyAgICAgICAgKGRhdGFfZmxhZ3MgJiBOR0hUVFAyX0RBVEFfRkxBR19OT19FTkRfU1RSRUFNKSA9PSAwKSB7CisgICAgICBmcmFtZS0+aGQuZmxhZ3MgfD0gTkdIVFRQMl9GTEFHX0VORF9TVFJFQU07CisgICAgfQorICB9CisKKyAgaWYgKGRhdGFfZmxhZ3MgJiBOR0hUVFAyX0RBVEFfRkxBR19OT19DT1BZKSB7CisgICAgaWYgKHNlc3Npb24tPmNhbGxiYWNrcy5zZW5kX2RhdGFfY2FsbGJhY2sgPT0gTlVMTCkgeworICAgICAgREVCVUdGKCJOR0hUVFAyX0RBVEFfRkxBR19OT19DT1BZIHJlcXVpcmVzIHNlbmRfZGF0YV9jYWxsYmFjayBzZXRcbiIpOworCisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRTsKKyAgICB9CisgICAgYXV4X2RhdGEtPm5vX2NvcHkgPSAxOworICB9CisKKyAgZnJhbWUtPmhkLmxlbmd0aCA9IChzaXplX3QpcGF5bG9hZGxlbjsKKyAgZnJhbWUtPmRhdGEucGFkbGVuID0gMDsKKworICBtYXhfcGF5bG9hZGxlbiA9IG5naHR0cDJfbWluKGRhdGFtYXgsIGZyYW1lLT5oZC5sZW5ndGggKyBOR0hUVFAyX01BWF9QQURMRU4pOworCisgIHBhZGRlZF9wYXlsb2FkbGVuID0KKyAgICAgIHNlc3Npb25fY2FsbF9zZWxlY3RfcGFkZGluZyhzZXNzaW9uLCBmcmFtZSwgbWF4X3BheWxvYWRsZW4pOworCisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKChpbnQpcGFkZGVkX3BheWxvYWRsZW4pKSB7CisgICAgcmV0dXJuIChpbnQpcGFkZGVkX3BheWxvYWRsZW47CisgIH0KKworICBmcmFtZS0+ZGF0YS5wYWRsZW4gPSAoc2l6ZV90KShwYWRkZWRfcGF5bG9hZGxlbiAtIHBheWxvYWRsZW4pOworCisgIG5naHR0cDJfZnJhbWVfcGFja19mcmFtZV9oZChidWYtPnBvcywgJmZyYW1lLT5oZCk7CisKKyAgcnYgPSBuZ2h0dHAyX2ZyYW1lX2FkZF9wYWQoYnVmcywgJmZyYW1lLT5oZCwgZnJhbWUtPmRhdGEucGFkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXhfZGF0YS0+bm9fY29weSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmVzY2hlZHVsZV9zdHJlYW0oc3RyZWFtKTsKKworICBpZiAoZnJhbWUtPmhkLmxlbmd0aCA9PSAwICYmIChkYXRhX2ZsYWdzICYgTkdIVFRQMl9EQVRBX0ZMQUdfRU9GKSAmJgorICAgICAgKGRhdGFfZmxhZ3MgJiBOR0hUVFAyX0RBVEFfRkxBR19OT19FTkRfU1RSRUFNKSkgeworICAgIC8qIERBVEEgcGF5bG9hZCBsZW5ndGggaXMgMCwgYW5kIERBVEEgZnJhbWUgZG9lcyBub3QgYmVhcgorICAgICAgIEVORF9TVFJFQU0uICBJbiB0aGlzIGNhc2UsIHRoZXJlIGlzIG5vIHBvaW50IHRvIHNlbmQgMCBsZW5ndGgKKyAgICAgICBEQVRBIGZyYW1lLiAqLworICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQU5DRUw7CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCAqbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fdXNlcl9kYXRhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoc3RyZWFtKSB7CisgICAgcmV0dXJuIHN0cmVhbS0+c3RyZWFtX3VzZXJfZGF0YTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3NldF9zdHJlYW1fdXNlcl9kYXRhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpIHsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoc3RyZWFtKSB7CisgICAgc3RyZWFtLT5zdHJlYW1fdXNlcl9kYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChzZXNzaW9uLT5zZXJ2ZXIgfHwgIW5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQoc2Vzc2lvbiwgc3RyZWFtX2lkKSB8fAorICAgICAgIW5naHR0cDJfb3V0Ym91bmRfcXVldWVfdG9wKCZzZXNzaW9uLT5vYl9zeW4pKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBmcmFtZSA9ICZuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3RvcCgmc2Vzc2lvbi0+b2Jfc3luKS0+ZnJhbWU7CisgIGFzc2VydChmcmFtZS0+aGQudHlwZSA9PSBOR0hUVFAyX0hFQURFUlMpOworCisgIGlmIChmcmFtZS0+aGQuc3RyZWFtX2lkID4gc3RyZWFtX2lkIHx8CisgICAgICAodWludDMyX3Qpc3RyZWFtX2lkID49IHNlc3Npb24tPm5leHRfc3RyZWFtX2lkKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBmb3IgKGl0ZW0gPSBzZXNzaW9uLT5vYl9zeW4uaGVhZDsgaXRlbTsgaXRlbSA9IGl0ZW0tPnFuZXh0KSB7CisgICAgaWYgKGl0ZW0tPmZyYW1lLmhkLnN0cmVhbV9pZCA8IHN0cmVhbV9pZCkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgaWYgKGl0ZW0tPmZyYW1lLmhkLnN0cmVhbV9pZCA+IHN0cmVhbV9pZCkgeworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaXRlbS0+YXV4X2RhdGEuaGVhZGVycy5zdHJlYW1fdXNlcl9kYXRhID0gc3RyZWFtX3VzZXJfZGF0YTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3Jlc3VtZV9kYXRhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoc3RyZWFtID09IE5VTEwgfHwgIW5naHR0cDJfc3RyZWFtX2NoZWNrX2RlZmVycmVkX2l0ZW0oc3RyZWFtKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgcnYgPSBuZ2h0dHAyX3N0cmVhbV9yZXN1bWVfZGVmZXJyZWRfaXRlbShzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9VU0VSKTsKKworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc2l6ZV90IG5naHR0cDJfc2Vzc2lvbl9nZXRfb3V0Ym91bmRfcXVldWVfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIG5naHR0cDJfb3V0Ym91bmRfcXVldWVfc2l6ZSgmc2Vzc2lvbi0+b2JfdXJnZW50KSArCisgICAgICAgICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlX3NpemUoJnNlc3Npb24tPm9iX3JlZykgKworICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9xdWV1ZV9zaXplKCZzZXNzaW9uLT5vYl9zeW4pOworICAvKiBUT0RPIGFjY291bnQgZm9yIGl0ZW0gYXR0YWNoZWQgdG8gc3RyZWFtICovCit9CisKK2ludDMyX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2VmZmVjdGl2ZV9yZWN2X2RhdGFfbGVuZ3RoKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplIDwgMCA/IDAgOiBzdHJlYW0tPnJlY3Zfd2luZG93X3NpemU7Cit9CisKK2ludDMyX3QKK25naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2VmZmVjdGl2ZV9sb2NhbF93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKyAgaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiBzdHJlYW0tPmxvY2FsX3dpbmRvd19zaXplOworfQorCitpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2xvY2FsX3dpbmRvd19zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpIHsKKyAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbTsKKyAgaW50MzJfdCBzaXplOworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBzaXplID0gc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZSAtIHN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZTsKKworICAvKiBzaXplIGNvdWxkIGJlIG5lZ2F0aXZlIGlmIGxvY2FsIGVuZHBvaW50IHJlZHVjZWQKKyAgICAgU0VUVElOR1NfSU5JVElBTF9XSU5ET1dfU0laRSAqLworICBpZiAoc2l6ZSA8IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBzaXplOworfQorCitpbnQzMl90CituZ2h0dHAyX3Nlc3Npb25fZ2V0X2VmZmVjdGl2ZV9yZWN2X2RhdGFfbGVuZ3RoKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gc2Vzc2lvbi0+cmVjdl93aW5kb3dfc2l6ZSA8IDAgPyAwIDogc2Vzc2lvbi0+cmVjdl93aW5kb3dfc2l6ZTsKK30KKworaW50MzJfdAorbmdodHRwMl9zZXNzaW9uX2dldF9lZmZlY3RpdmVfbG9jYWxfd2luZG93X3NpemUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBzZXNzaW9uLT5sb2NhbF93aW5kb3dfc2l6ZTsKK30KKworaW50MzJfdCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X2xvY2FsX3dpbmRvd19zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gc2Vzc2lvbi0+bG9jYWxfd2luZG93X3NpemUgLSBzZXNzaW9uLT5yZWN2X3dpbmRvd19zaXplOworfQorCitpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JlbW90ZV93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8qIHN0cmVhbS0+cmVtb3RlX3dpbmRvd19zaXplIGNhbiBiZSBuZWdhdGl2ZSB3aGVuCisgICAgIFNFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkUgaXMgY2hhbmdlZC4gKi8KKyAgcmV0dXJuIG5naHR0cDJfbWF4KDAsIHN0cmVhbS0+cmVtb3RlX3dpbmRvd19zaXplKTsKK30KKworaW50MzJfdCBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3JlbW90ZV93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIHNlc3Npb24tPnJlbW90ZV93aW5kb3dfc2l6ZTsKK30KKwordWludDMyX3QgbmdodHRwMl9zZXNzaW9uX2dldF9yZW1vdGVfc2V0dGluZ3MobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zZXR0aW5nc19pZCBpZCkgeworICBzd2l0Y2ggKGlkKSB7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRToKKyAgICByZXR1cm4gc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLmhlYWRlcl90YWJsZV9zaXplOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX1BVU0g6CisgICAgcmV0dXJuIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5lbmFibGVfcHVzaDsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVM6CisgICAgcmV0dXJuIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfSU5JVElBTF9XSU5ET1dfU0laRToKKyAgICByZXR1cm4gc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLmluaXRpYWxfd2luZG93X3NpemU7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfRlJBTUVfU0laRToKKyAgICByZXR1cm4gc2Vzc2lvbi0+cmVtb3RlX3NldHRpbmdzLm1heF9mcmFtZV9zaXplOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0hFQURFUl9MSVNUX1NJWkU6CisgICAgcmV0dXJuIHNlc3Npb24tPnJlbW90ZV9zZXR0aW5ncy5tYXhfaGVhZGVyX2xpc3Rfc2l6ZTsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0VOQUJMRV9DT05ORUNUX1BST1RPQ09MOgorICAgIHJldHVybiBzZXNzaW9uLT5yZW1vdGVfc2V0dGluZ3MuZW5hYmxlX2Nvbm5lY3RfcHJvdG9jb2w7CisgIH0KKworICBhc3NlcnQoMCk7CisgIGFib3J0KCk7IC8qIGlmIE5ERUJVRyBpcyBzZXQgKi8KK30KKwordWludDMyX3QgbmdodHRwMl9zZXNzaW9uX2dldF9sb2NhbF9zZXR0aW5ncyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc2V0dGluZ3NfaWQgaWQpIHsKKyAgc3dpdGNoIChpZCkgeworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfSEVBREVSX1RBQkxFX1NJWkU6CisgICAgcmV0dXJuIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmhlYWRlcl90YWJsZV9zaXplOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfRU5BQkxFX1BVU0g6CisgICAgcmV0dXJuIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmVuYWJsZV9wdXNoOworICBjYXNlIE5HSFRUUDJfU0VUVElOR1NfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUzoKKyAgICByZXR1cm4gc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MubWF4X2NvbmN1cnJlbnRfc3RyZWFtczsKKyAgY2FzZSBOR0hUVFAyX1NFVFRJTkdTX0lOSVRJQUxfV0lORE9XX1NJWkU6CisgICAgcmV0dXJuIHNlc3Npb24tPmxvY2FsX3NldHRpbmdzLmluaXRpYWxfd2luZG93X3NpemU7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfRlJBTUVfU0laRToKKyAgICByZXR1cm4gc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MubWF4X2ZyYW1lX3NpemU7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19NQVhfSEVBREVSX0xJU1RfU0laRToKKyAgICByZXR1cm4gc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MubWF4X2hlYWRlcl9saXN0X3NpemU7CisgIGNhc2UgTkdIVFRQMl9TRVRUSU5HU19FTkFCTEVfQ09OTkVDVF9QUk9UT0NPTDoKKyAgICByZXR1cm4gc2Vzc2lvbi0+bG9jYWxfc2V0dGluZ3MuZW5hYmxlX2Nvbm5lY3RfcHJvdG9jb2w7CisgIH0KKworICBhc3NlcnQoMCk7CisgIGFib3J0KCk7IC8qIGlmIE5ERUJVRyBpcyBzZXQgKi8KK30KKworc3RhdGljIGludCBuZ2h0dHAyX3Nlc3Npb25fdXBncmFkZV9pbnRlcm5hbChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNldHRpbmdzX3BheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZXR0aW5nc19wYXlsb2FkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKSB7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfZnJhbWUgZnJhbWU7CisgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2OworICBzaXplX3Qgbml2OworICBpbnQgcnY7CisgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyBwcmlfc3BlYzsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmICgoIXNlc3Npb24tPnNlcnZlciAmJiBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCAhPSAxKSB8fAorICAgICAgKHNlc3Npb24tPnNlcnZlciAmJiBzZXNzaW9uLT5sYXN0X3JlY3Zfc3RyZWFtX2lkID49IDEpKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX1BST1RPOworICB9CisgIGlmIChzZXR0aW5nc19wYXlsb2FkbGVuICUgTkdIVFRQMl9GUkFNRV9TRVRUSU5HU19FTlRSWV9MRU5HVEgpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorICBydiA9IG5naHR0cDJfZnJhbWVfdW5wYWNrX3NldHRpbmdzX3BheWxvYWQyKCZpdiwgJm5pdiwgc2V0dGluZ3NfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc19wYXlsb2FkbGVuLCBtZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIGlmIChzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX2hkX2luaXQoJmZyYW1lLmhkLCBzZXR0aW5nc19wYXlsb2FkbGVuLCBOR0hUVFAyX1NFVFRJTkdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0ZMQUdfTk9ORSwgMCk7CisgICAgZnJhbWUuc2V0dGluZ3MuaXYgPSBpdjsKKyAgICBmcmFtZS5zZXR0aW5ncy5uaXYgPSBuaXY7CisgICAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fb25fc2V0dGluZ3NfcmVjZWl2ZWQoc2Vzc2lvbiwgJmZyYW1lLCAxIC8qIE5vIEFDSyAqLyk7CisgIH0gZWxzZSB7CisgICAgcnYgPSBuZ2h0dHAyX3N1Ym1pdF9zZXR0aW5ncyhzZXNzaW9uLCBOR0hUVFAyX0ZMQUdfTk9ORSwgaXYsIG5pdik7CisgIH0KKyAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl2KTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfZGVmYXVsdF9pbml0KCZwcmlfc3BlYyk7CisKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX29wZW5fc3RyZWFtKAorICAgICAgc2Vzc2lvbiwgMSwgTkdIVFRQMl9TVFJFQU1fRkxBR19OT05FLCAmcHJpX3NwZWMsIE5HSFRUUDJfU1RSRUFNX09QRU5JTkcsCisgICAgICBzZXNzaW9uLT5zZXJ2ZXIgPyBOVUxMIDogc3RyZWFtX3VzZXJfZGF0YSk7CisgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgfQorCisgIC8qIFdlIGRvbid0IGNhbGwgbmdodHRwMl9zZXNzaW9uX2FkanVzdF9jbG9zZWRfc3RyZWFtKCksIHNpbmNlIHRoaXMKKyAgICAgc2hvdWxkIGJlIHRoZSBmaXJzdCBzdHJlYW0gb3Blbi4gKi8KKworICBpZiAoc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgbmdodHRwMl9zdHJlYW1fc2h1dGRvd24oc3RyZWFtLCBOR0hUVFAyX1NIVVRfUkQpOworICAgIHNlc3Npb24tPmxhc3RfcmVjdl9zdHJlYW1faWQgPSAxOworICAgIHNlc3Npb24tPmxhc3RfcHJvY19zdHJlYW1faWQgPSAxOworICB9IGVsc2UgeworICAgIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKHN0cmVhbSwgTkdIVFRQMl9TSFVUX1dSKTsKKyAgICBzZXNzaW9uLT5sYXN0X3NlbnRfc3RyZWFtX2lkID0gMTsKKyAgICBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCArPSAyOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3VwZ3JhZGUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNldHRpbmdzX3BheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNldHRpbmdzX3BheWxvYWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fdXBncmFkZV9pbnRlcm5hbChzZXNzaW9uLCBzZXR0aW5nc19wYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzX3BheWxvYWRsZW4sIHN0cmVhbV91c2VyX2RhdGEpOworICBpZiAocnYgIT0gMCkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIDEpOworICBhc3NlcnQoc3RyZWFtKTsKKworICAvKiBXZSBoYXZlIG5vIGluZm9ybWF0aW9uIGFib3V0IHJlcXVlc3QgaGVhZGVyIGZpZWxkcyB3aGVuIFVwZ3JhZGUKKyAgICAgd2FzIGhhcHBlbmVkLiAgU28gd2UgZG9uJ3Qga25vdyB0aGUgcmVxdWVzdCBtZXRob2QgaGVyZS4gIElmCisgICAgIHJlcXVlc3QgbWV0aG9kIGlzIEhFQUQsIHdlIGhhdmUgYSB0cm91YmxlIGJlY2F1c2Ugd2UgbWF5IGhhdmUKKyAgICAgbm9uemVybyBjb250ZW50LWxlbmd0aCBoZWFkZXIgZmllbGQgaW4gcmVzcG9uc2UgaGVhZGVycywgYW5kIHdlCisgICAgIHdpbGwgZ29pbmcgdG8gY2hlY2sgaXQgYWdhaW5zdCB0aGUgYWN0dWFsIERBVEEgZnJhbWVzLCBidXQgd2UgbWF5CisgICAgIGdldCBtaXNtYXRjaCBiZWNhdXNlIEhFQUQgcmVzcG9uc2UgYm9keSBtdXN0IGJlIGVtcHR5LiAgQmVjYXVzZQorICAgICBvZiB0aGlzIHJlYXNvbiwgbmdodHRwMl9zZXNzaW9uX3VwZ3JhZGUoKSB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvcgorICAgICBvZiBuZ2h0dHAyX3Nlc3Npb25fdXBncmFkZTIoKSwgd2hpY2ggaGFzIHxoZWFkX3JlcXVlc3R8IHBhcmFtZXRlcgorICAgICB0byBpbmRpY2F0ZSB0aGF0IHJlcXVlc3QgbWV0aG9kIGlzIEhFQUQgb3Igbm90LiAqLworICBzdHJlYW0tPmh0dHBfZmxhZ3MgfD0gTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9VUEdSQURFX1dPUktBUk9VTkQ7CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3VwZ3JhZGUyKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc2V0dGluZ3NfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNldHRpbmdzX3BheWxvYWRsZW4sIGludCBoZWFkX3JlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3VwZ3JhZGVfaW50ZXJuYWwoc2Vzc2lvbiwgc2V0dGluZ3NfcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc19wYXlsb2FkbGVuLCBzdHJlYW1fdXNlcl9kYXRhKTsKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCAxKTsKKyAgYXNzZXJ0KHN0cmVhbSk7CisKKyAgaWYgKGhlYWRfcmVxdWVzdCkgeworICAgIHN0cmVhbS0+aHR0cF9mbGFncyB8PSBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0hFQUQ7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX2xvY2FsX2Nsb3NlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisKKyAgaWYgKCFzdHJlYW0pIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gKHN0cmVhbS0+c2h1dF9mbGFncyAmIE5HSFRUUDJfU0hVVF9XUikgIT0gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JlbW90ZV9jbG9zZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkKSB7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKworICBpZiAoIXN0cmVhbSkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJldHVybiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSAhPSAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NvbnN1bWUobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSkgeworICBpbnQgcnY7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBpZiAoIShzZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19XSU5ET1dfVVBEQVRFKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFOworICB9CisKKyAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9jb25uZWN0aW9uX2NvbnN1bWVkX3NpemUoc2Vzc2lvbiwgc2l6ZSk7CisKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKworICBpZiAoIXN0cmVhbSkgeworICAgIHJldHVybiAwOworICB9CisKKyAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9zdHJlYW1fY29uc3VtZWRfc2l6ZShzZXNzaW9uLCBzdHJlYW0sIHNpemUpOworCisgIGlmIChuZ2h0dHAyX2lzX2ZhdGFsKHJ2KSkgeworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX2NvbnN1bWVfY29ubmVjdGlvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHNpemVfdCBzaXplKSB7CisgIGludCBydjsKKworICBpZiAoIShzZXNzaW9uLT5vcHRfZmxhZ3MgJiBOR0hUVFAyX09QVE1BU0tfTk9fQVVUT19XSU5ET1dfVVBEQVRFKSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFOworICB9CisKKyAgcnYgPSBzZXNzaW9uX3VwZGF0ZV9jb25uZWN0aW9uX2NvbnN1bWVkX3NpemUoc2Vzc2lvbiwgc2l6ZSk7CisKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fY29uc3VtZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworCisgIGlmIChzdHJlYW1faWQgPT0gMCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgaWYgKCEoc2Vzc2lvbi0+b3B0X2ZsYWdzICYgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURTsKKyAgfQorCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCk7CisKKyAgaWYgKCFzdHJlYW0pIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJ2ID0gc2Vzc2lvbl91cGRhdGVfc3RyZWFtX2NvbnN1bWVkX3NpemUoc2Vzc2lvbiwgc3RyZWFtLCBzaXplKTsKKworICBpZiAobmdodHRwMl9pc19mYXRhbChydikpIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9zZXRfbmV4dF9zdHJlYW1faWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBuZXh0X3N0cmVhbV9pZCkgeworICBpZiAobmV4dF9zdHJlYW1faWQgPD0gMCB8fAorICAgICAgc2Vzc2lvbi0+bmV4dF9zdHJlYW1faWQgPiAodWludDMyX3QpbmV4dF9zdHJlYW1faWQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGlmIChzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICBpZiAobmV4dF9zdHJlYW1faWQgJSAyKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICB9CisgIH0gZWxzZSBpZiAobmV4dF9zdHJlYW1faWQgJSAyID09IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIHNlc3Npb24tPm5leHRfc3RyZWFtX2lkID0gKHVpbnQzMl90KW5leHRfc3RyZWFtX2lkOworICByZXR1cm4gMDsKK30KKwordWludDMyX3QgbmdodHRwMl9zZXNzaW9uX2dldF9uZXh0X3N0cmVhbV9pZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIHNlc3Npb24tPm5leHRfc3RyZWFtX2lkOworfQorCitpbnQzMl90IG5naHR0cDJfc2Vzc2lvbl9nZXRfbGFzdF9wcm9jX3N0cmVhbV9pZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pIHsKKyAgcmV0dXJuIHNlc3Npb24tPmxhc3RfcHJvY19zdHJlYW1faWQ7Cit9CisKK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3Nlc3Npb25fZmluZF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCkgeworICBpZiAoc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gJnNlc3Npb24tPnJvb3Q7CisgIH0KKworICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW1fcmF3KHNlc3Npb24sIHN0cmVhbV9pZCk7Cit9CisKK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3Nlc3Npb25fZ2V0X3Jvb3Rfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gJnNlc3Npb24tPnJvb3Q7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fY2hlY2tfc2VydmVyX3Nlc3Npb24obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKSB7CisgIHJldHVybiBzZXNzaW9uLT5zZXJ2ZXI7Cit9CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fY2hhbmdlX3N0cmVhbV9wcmlvcml0eSgKKyAgICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkLAorICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtOworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgcHJpX3NwZWNfY29weTsKKworICBpZiAoc3RyZWFtX2lkID09IDAgfHwgc3RyZWFtX2lkID09IHByaV9zcGVjLT5zdHJlYW1faWQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoIXN0cmVhbSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgcHJpX3NwZWNfY29weSA9ICpwcmlfc3BlYzsKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjX25vcm1hbGl6ZV93ZWlnaHQoJnByaV9zcGVjX2NvcHkpOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3JlcHJpb3JpdGl6ZV9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtLCAmcHJpX3NwZWNfY29weSk7CisKKyAgaWYgKG5naHR0cDJfaXNfZmF0YWwocnYpKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgLyogV2UgZG9uJ3QgaW50ZW50aW9uYWxseSBjYWxsIG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0oKQorICAgICBzbyB0aGF0IGlkbGUgc3RyZWFtIGNyZWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiwgYW5kIGV4aXN0aW5nIG9uZXMKKyAgICAgYXJlIGtlcHQgZm9yIGFwcGxpY2F0aW9uLiAgV2Ugd2lsbCBhZGp1c3QgbnVtYmVyIG9mIGlkbGUgc3RyZWFtCisgICAgIGluIG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCBvciBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YgaXMKKyAgICAgY2FsbGVkLiAqLworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc2Vzc2lvbl9jcmVhdGVfaWRsZV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKSB7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyBwcmlfc3BlY19jb3B5OworCisgIGlmIChzdHJlYW1faWQgPT0gMCB8fCBzdHJlYW1faWQgPT0gcHJpX3NwZWMtPnN0cmVhbV9pZCB8fAorICAgICAgIXNlc3Npb25fZGV0ZWN0X2lkbGVfc3RyZWFtKHNlc3Npb24sIHN0cmVhbV9pZCkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIHN0cmVhbSA9IG5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtX3JhdyhzZXNzaW9uLCBzdHJlYW1faWQpOworICBpZiAoc3RyZWFtKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBwcmlfc3BlY19jb3B5ID0gKnByaV9zcGVjOworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfbm9ybWFsaXplX3dlaWdodCgmcHJpX3NwZWNfY29weSk7CisKKyAgc3RyZWFtID0KKyAgICAgIG5naHR0cDJfc2Vzc2lvbl9vcGVuX3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQsIE5HSFRUUDJfU1RSRUFNX0ZMQUdfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJpX3NwZWNfY29weSwgTkdIVFRQMl9TVFJFQU1fSURMRSwgTlVMTCk7CisgIGlmICghc3RyZWFtKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgLyogV2UgZG9uJ3QgaW50ZW50aW9uYWxseSBjYWxsIG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0oKQorICAgICBzbyB0aGF0IGlkbGUgc3RyZWFtIGNyZWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiwgYW5kIGV4aXN0aW5nIG9uZXMKKyAgICAgYXJlIGtlcHQgZm9yIGFwcGxpY2F0aW9uLiAgV2Ugd2lsbCBhZGp1c3QgbnVtYmVyIG9mIGlkbGUgc3RyZWFtCisgICAgIGluIG5naHR0cDJfc2Vzc2lvbl9tZW1fc2VuZCBvciBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YgaXMKKyAgICAgY2FsbGVkLiAqLworICByZXR1cm4gMDsKK30KKworc2l6ZV90CituZ2h0dHAyX3Nlc3Npb25fZ2V0X2hkX2luZmxhdGVfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gbmdodHRwMl9oZF9pbmZsYXRlX2dldF9keW5hbWljX3RhYmxlX3NpemUoJnNlc3Npb24tPmhkX2luZmxhdGVyKTsKK30KKworc2l6ZV90CituZ2h0dHAyX3Nlc3Npb25fZ2V0X2hkX2RlZmxhdGVfZHluYW1pY190YWJsZV9zaXplKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICByZXR1cm4gbmdodHRwMl9oZF9kZWZsYXRlX2dldF9keW5hbWljX3RhYmxlX3NpemUoJnNlc3Npb24tPmhkX2RlZmxhdGVyKTsKK30KKwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fc2V0X3VzZXJfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHZvaWQgKnVzZXJfZGF0YSkgeworICBzZXNzaW9uLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3Nlc3Npb24uaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc2Vzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZWFkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3Nlc3Npb24uaApAQCAtMCwwICsxLDkwMSBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIE5HSFRUUDJfU0VTU0lPTl9ICisjZGVmaW5lIE5HSFRUUDJfU0VTU0lPTl9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpbmNsdWRlIDxuZ2h0dHAyL25naHR0cDIuaD4KKyNpbmNsdWRlICJuZ2h0dHAyX21hcC5oIgorI2luY2x1ZGUgIm5naHR0cDJfZnJhbWUuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2hkLmgiCisjaW5jbHVkZSAibmdodHRwMl9zdHJlYW0uaCIKKyNpbmNsdWRlICJuZ2h0dHAyX291dGJvdW5kX2l0ZW0uaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2ludC5oIgorI2luY2x1ZGUgIm5naHR0cDJfYnVmLmgiCisjaW5jbHVkZSAibmdodHRwMl9jYWxsYmFja3MuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX21lbS5oIgorCisvKiBUaGUgZ2xvYmFsIHZhcmlhYmxlIGZvciB0ZXN0cyB3aGVyZSB3ZSB3YW50IHRvIGRpc2FibGUgc3RyaWN0CisgICBwcmVmYWNlIGhhbmRsaW5nLiAqLworZXh0ZXJuIGludCBuZ2h0dHAyX2VuYWJsZV9zdHJpY3RfcHJlZmFjZTsKKworLyoKKyAqIE9wdGlvbiBmbGFncy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgTkdIVFRQMl9PUFRNQVNLX05PX0FVVE9fV0lORE9XX1VQREFURSA9IDEgPDwgMCwKKyAgTkdIVFRQMl9PUFRNQVNLX05PX1JFQ1ZfQ0xJRU5UX01BR0lDID0gMSA8PCAxLAorICBOR0hUVFAyX09QVE1BU0tfTk9fSFRUUF9NRVNTQUdJTkcgPSAxIDw8IDIsCisgIE5HSFRUUDJfT1BUTUFTS19OT19BVVRPX1BJTkdfQUNLID0gMSA8PCAzLAorICBOR0hUVFAyX09QVE1BU0tfTk9fQ0xPU0VEX1NUUkVBTVMgPSAxIDw8IDQKK30gbmdodHRwMl9vcHRtYXNrOworCisvKgorICogYml0bWFzayBmb3IgYnVpbHQtaW4gdHlwZSB0byBlbmFibGUgdGhlIGRlZmF1bHQgaGFuZGxpbmcgZm9yIHRoYXQKKyAqIHR5cGUgb2YgdGhlIGZyYW1lLgorICovCit0eXBlZGVmIGVudW0geworICBOR0hUVFAyX1RZUEVNQVNLX05PTkUgPSAwLAorICBOR0hUVFAyX1RZUEVNQVNLX0FMVFNWQyA9IDEgPDwgMCwKKyAgTkdIVFRQMl9UWVBFTUFTS19PUklHSU4gPSAxIDw8IDEKK30gbmdodHRwMl90eXBlbWFzazsKKwordHlwZWRlZiBlbnVtIHsKKyAgTkdIVFRQMl9PQl9QT1BfSVRFTSwKKyAgTkdIVFRQMl9PQl9TRU5EX0RBVEEsCisgIE5HSFRUUDJfT0JfU0VORF9OT19DT1BZLAorICBOR0hUVFAyX09CX1NFTkRfQ0xJRU5UX01BR0lDCit9IG5naHR0cDJfb3V0Ym91bmRfc3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworICBuZ2h0dHAyX2J1ZnMgZnJhbWVidWZzOworICBuZ2h0dHAyX291dGJvdW5kX3N0YXRlIHN0YXRlOworfSBuZ2h0dHAyX2FjdGl2ZV9vdXRib3VuZF9pdGVtOworCisvKiBCdWZmZXIgbGVuZ3RoIGZvciBpbmJvdW5kIHJhdyBieXRlIHN0cmVhbSB1c2VkIGluCisgICBuZ2h0dHAyX3Nlc3Npb25fcmVjdigpLiAqLworI2RlZmluZSBOR0hUVFAyX0lOQk9VTkRfQlVGRkVSX0xFTkdUSCAxNjM4NAorCisvKiBUaGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBpbmNvbWluZyByZXNlcnZlZCBzdHJlYW1zICovCisjZGVmaW5lIE5HSFRUUDJfTUFYX0lOQ09NSU5HX1JFU0VSVkVEX1NUUkVBTVMgMjAwCisKKy8qIEV2ZW4gaWYgd2UgaGF2ZSBsZXNzIFNFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMgdGhhbiB0aGlzCisgICBudW1iZXIsIHdlIGtlZXAgTkdIVFRQMl9NSU5fSURMRV9TVFJFQU1TIHN0cmVhbXMgaW4gaWRsZSBzdGF0ZSAqLworI2RlZmluZSBOR0hUVFAyX01JTl9JRExFX1NUUkVBTVMgMTYKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIGluIG91dGJvdW5kIHF1ZXVlLCB3aGljaCBpcyBjb25zaWRlcmVkCisgICBhcyBmbG9vZGluZyBjYXVzZWQgYnkgcGVlci4gIEFsbCBmcmFtZXMgYXJlIG5vdCBjb25zaWRlcmVkIGhlcmUuCisgICBXZSBvbmx5IGNvbnNpZGVyIFBJTkcgKyBBQ0sgYW5kIFNFVFRJTkdTICsgQUNLLiAgVGhpcyBpcyBiZWNhdXNlCisgICB0aGV5IGJvdGggYXJlIHJlc3BvbnNlIHRvIHRoZSBmcmFtZSBpbml0aWF0ZWQgYnkgcGVlciBhbmQgcGVlciBjYW4KKyAgIHNlbmQgYXMgbWFueSBvZiB0aGVtIGFzIHRoZXkgd2FudC4gIElmIHBlZXIgZG9lcyBub3QgcmVhZCBuZXR3b3JrLAorICAgcmVzcG9uc2UgZnJhbWVzIGFyZSBzdGFja2VkIHVwLCB3aGljaCBsZWFkcyB0byBtZW1vcnkgZXhoYXVzdGlvbi4KKyAgIFRoZSB2YWx1ZSBzZWxlY3RlZCBoZXJlIGlzIGFyYml0cmFyeSwgYnV0IHNhZmUgdmFsdWUgYW5kIGlmIHdlIGhhdmUKKyAgIHRoZXNlIGZyYW1lcyBpbiB0aGlzIG51bWJlciwgaXQgaXMgY29uc2lkZXJlZCBzdXNwaWNpb3VzLiAqLworI2RlZmluZSBOR0hUVFAyX0RFRkFVTFRfTUFYX09CUV9GTE9PRF9JVEVNIDEwMDAKKworLyogVGhlIGRlZmF1bHQgdmFsdWUgb2YgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBzdHJlYW1zLiAqLworI2RlZmluZSBOR0hUVFAyX0RFRkFVTFRfTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyAweGZmZmZmZmZmdQorCisvKiBJbnRlcm5hbCBzdGF0ZSB3aGVuIHJlY2VpdmluZyBpbmNvbWluZyBmcmFtZSAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyogUmVjZWl2aW5nIGZyYW1lIGhlYWRlciAqLworICBOR0hUVFAyX0lCX1JFQURfQ0xJRU5UX01BR0lDLAorICBOR0hUVFAyX0lCX1JFQURfRklSU1RfU0VUVElOR1MsCisgIE5HSFRUUDJfSUJfUkVBRF9IRUFELAorICBOR0hUVFAyX0lCX1JFQURfTkJZVEUsCisgIE5HSFRUUDJfSUJfUkVBRF9IRUFERVJfQkxPQ0ssCisgIE5HSFRUUDJfSUJfSUdOX0hFQURFUl9CTE9DSywKKyAgTkdIVFRQMl9JQl9JR05fUEFZTE9BRCwKKyAgTkdIVFRQMl9JQl9GUkFNRV9TSVpFX0VSUk9SLAorICBOR0hUVFAyX0lCX1JFQURfU0VUVElOR1MsCisgIE5HSFRUUDJfSUJfUkVBRF9HT0FXQVlfREVCVUcsCisgIE5HSFRUUDJfSUJfRVhQRUNUX0NPTlRJTlVBVElPTiwKKyAgTkdIVFRQMl9JQl9JR05fQ09OVElOVUFUSU9OLAorICBOR0hUVFAyX0lCX1JFQURfUEFEX0RBVEEsCisgIE5HSFRUUDJfSUJfUkVBRF9EQVRBLAorICBOR0hUVFAyX0lCX0lHTl9EQVRBLAorICBOR0hUVFAyX0lCX0lHTl9BTEwsCisgIE5HSFRUUDJfSUJfUkVBRF9BTFRTVkNfUEFZTE9BRCwKKyAgTkdIVFRQMl9JQl9SRUFEX09SSUdJTl9QQVlMT0FELAorICBOR0hUVFAyX0lCX1JFQURfRVhURU5TSU9OX1BBWUxPQUQKK30gbmdodHRwMl9pbmJvdW5kX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIG5naHR0cDJfZnJhbWUgZnJhbWU7CisgIC8qIFN0b3JhZ2UgZm9yIGV4dGVuc2lvbiBmcmFtZSBwYXlsb2FkLiAgZnJhbWUtPmV4dC5wYXlsb2FkIHBvaW50cworICAgICB0byB0aGlzIHN0cnVjdHVyZSB0byBhdm9pZCBmcmVxdWVudCBtZW1vcnkgYWxsb2NhdGlvbi4gKi8KKyAgbmdodHRwMl9leHRfZnJhbWVfcGF5bG9hZCBleHRfZnJhbWVfcGF5bG9hZDsKKyAgLyogVGhlIHJlY2VpdmVkIFNFVFRJTkdTIGVudHJ5LiAgRm9yIHRoZSBzdGFuZGFyZCBzZXR0aW5ncyBlbnRyaWVzLAorICAgICB3ZSBvbmx5IGtlZXAgdGhlIGxhc3Qgc2VlbiB2YWx1ZS4gIEZvcgorICAgICBTRVRUSU5HU19IRUFERVJfVEFCTEVfU0laRSwgd2UgYWxzbyBrZWVwIG1pbmltdW0gdmFsdWUgaW4gdGhlCisgICAgIGxhc3QgaW5kZXguICovCisgIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2OworICAvKiBidWZmZXIgcG9pbnRlcnMgdG8gc21hbGwgYnVmZmVyLCByYXdfc2J1ZiAqLworICBuZ2h0dHAyX2J1ZiBzYnVmOworICAvKiBidWZmZXIgcG9pbnRlcnMgdG8gbGFyZ2UgYnVmZmVyLCByYXdfbGJ1ZiAqLworICBuZ2h0dHAyX2J1ZiBsYnVmOworICAvKiBMYXJnZSBidWZmZXIsIG1hbGxvY2VkIG9uIGRlbWFuZCAqLworICB1aW50OF90ICpyYXdfbGJ1ZjsKKyAgLyogVGhlIG51bWJlciBvZiBlbnRyeSBmaWxsZWQgaW4gfGl2fCAqLworICBzaXplX3Qgbml2OworICAvKiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgfGl2fCBjYW4gc3RvcmUuICovCisgIHNpemVfdCBtYXhfbml2OworICAvKiBIb3cgbWFueSBieXRlcyB3ZSBzdGlsbCBuZWVkIHRvIHJlY2VpdmUgZm9yIGN1cnJlbnQgZnJhbWUgKi8KKyAgc2l6ZV90IHBheWxvYWRsZWZ0OworICAvKiBwYWRkaW5nIGxlbmd0aCBmb3IgdGhlIGN1cnJlbnQgZnJhbWUgKi8KKyAgc2l6ZV90IHBhZGxlbjsKKyAgbmdodHRwMl9pbmJvdW5kX3N0YXRlIHN0YXRlOworICAvKiBTbWFsbCBidWZmZXIuICBDdXJyZW50bHkgdGhlIGxhcmdlc3QgY29udGlndW91cyBjaHVuayB0byBidWZmZXIKKyAgICAgaXMgZnJhbWUgaGVhZGVyLiAgV2UgYnVmZmVyIHBhcnQgb2YgcGF5bG9hZCwgYnV0IHRoZXkgYXJlIHNtYWxsZXIKKyAgICAgdGhhbiBmcmFtZSBoZWFkZXIuICovCisgIHVpbnQ4X3QgcmF3X3NidWZbTkdIVFRQMl9GUkFNRV9IRExFTl07Cit9IG5naHR0cDJfaW5ib3VuZF9mcmFtZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50MzJfdCBoZWFkZXJfdGFibGVfc2l6ZTsKKyAgdWludDMyX3QgZW5hYmxlX3B1c2g7CisgIHVpbnQzMl90IG1heF9jb25jdXJyZW50X3N0cmVhbXM7CisgIHVpbnQzMl90IGluaXRpYWxfd2luZG93X3NpemU7CisgIHVpbnQzMl90IG1heF9mcmFtZV9zaXplOworICB1aW50MzJfdCBtYXhfaGVhZGVyX2xpc3Rfc2l6ZTsKKyAgdWludDMyX3QgZW5hYmxlX2Nvbm5lY3RfcHJvdG9jb2w7Cit9IG5naHR0cDJfc2V0dGluZ3Nfc3RvcmFnZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgTkdIVFRQMl9HT0FXQVlfTk9ORSA9IDAsCisgIC8qIEZsYWcgbWVhbnMgdGhhdCBjb25uZWN0aW9uIHNob3VsZCBiZSB0ZXJtaW5hdGVkIGFmdGVyIHNlbmRpbmcgR09BV0FZLiAqLworICBOR0hUVFAyX0dPQVdBWV9URVJNX09OX1NFTkQgPSAweDEsCisgIC8qIEZsYWcgbWVhbnMgR09BV0FZIHRvIHRlcm1pbmF0ZSBzZXNzaW9uIGhhcyBiZWVuIHNlbnQgKi8KKyAgTkdIVFRQMl9HT0FXQVlfVEVSTV9TRU5UID0gMHgyLAorICAvKiBGbGFnIG1lYW5zIEdPQVdBWSB3YXMgc2VudCAqLworICBOR0hUVFAyX0dPQVdBWV9TRU5UID0gMHg0LAorICAvKiBGbGFnIG1lYW5zIEdPQVdBWSB3YXMgcmVjZWl2ZWQgKi8KKyAgTkdIVFRQMl9HT0FXQVlfUkVDViA9IDB4OAorfSBuZ2h0dHAyX2dvYXdheV9mbGFnOworCisvKiBuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzIHN0b3JlcyB0aGUgU0VUVElOR1MgZW50cmllcyB3aGljaCBsb2NhbAorICAgZW5kcG9pbnQgaGFzIHNlbnQgdG8gdGhlIHJlbW90ZSBlbmRwb2ludCwgYW5kIGhhcyBub3QgcmVjZWl2ZWQgQUNLCisgICB5ZXQuICovCitzdHJ1Y3QgbmdodHRwMl9pbmZsaWdodF9zZXR0aW5ncyB7CisgIHN0cnVjdCBuZ2h0dHAyX2luZmxpZ2h0X3NldHRpbmdzICpuZXh0OworICBuZ2h0dHAyX3NldHRpbmdzX2VudHJ5ICppdjsKKyAgc2l6ZV90IG5pdjsKK307CisKK3R5cGVkZWYgc3RydWN0IG5naHR0cDJfaW5mbGlnaHRfc2V0dGluZ3MgbmdodHRwMl9pbmZsaWdodF9zZXR0aW5nczsKKworc3RydWN0IG5naHR0cDJfc2Vzc2lvbiB7CisgIG5naHR0cDJfbWFwIC8qIDxuZ2h0dHAyX3N0cmVhbSo+ICovIHN0cmVhbXM7CisgIC8qIHJvb3Qgb2YgZGVwZW5kZW5jeSB0cmVlKi8KKyAgbmdodHRwMl9zdHJlYW0gcm9vdDsKKyAgLyogUXVldWUgZm9yIG91dGJvdW5kIHVyZ2VudCBmcmFtZXMgKFBJTkcgYW5kIFNFVFRJTkdTKSAqLworICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlIG9iX3VyZ2VudDsKKyAgLyogUXVldWUgZm9yIG5vbi1EQVRBIGZyYW1lcyAqLworICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlIG9iX3JlZzsKKyAgLyogUXVldWUgZm9yIG91dGJvdW5kIHN0cmVhbS1jcmVhdGluZyBIRUFERVJTIChyZXF1ZXN0IG9yIHB1c2gKKyAgICAgcmVzcG9uc2UpIGZyYW1lLCB3aGljaCBhcmUgc3ViamVjdCB0bworICAgICBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIGxpbWl0LiAqLworICBuZ2h0dHAyX291dGJvdW5kX3F1ZXVlIG9iX3N5bjsKKyAgbmdodHRwMl9hY3RpdmVfb3V0Ym91bmRfaXRlbSBhb2I7CisgIG5naHR0cDJfaW5ib3VuZF9mcmFtZSBpZnJhbWU7CisgIG5naHR0cDJfaGRfZGVmbGF0ZXIgaGRfZGVmbGF0ZXI7CisgIG5naHR0cDJfaGRfaW5mbGF0ZXIgaGRfaW5mbGF0ZXI7CisgIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3MgY2FsbGJhY2tzOworICAvKiBNZW1vcnkgYWxsb2NhdG9yICovCisgIG5naHR0cDJfbWVtIG1lbTsKKyAgdm9pZCAqdXNlcl9kYXRhOworICAvKiBQb2ludHMgdG8gdGhlIGxhdGVzdCBpbmNvbWluZyBjbG9zZWQgc3RyZWFtLiAgTlVMTCBpZiB0aGVyZSBpcyBubworICAgICBjbG9zZWQgc3RyZWFtLiAgT25seSB1c2VkIHdoZW4gc2Vzc2lvbiBpcyBpbml0aWFsaXplZCBhcworICAgICBzZXJ2ZXIuICovCisgIG5naHR0cDJfc3RyZWFtICpjbG9zZWRfc3RyZWFtX2hlYWQ7CisgIC8qIFBvaW50cyB0byB0aGUgb2xkZXN0IGluY29taW5nIGNsb3NlZCBzdHJlYW0uICBOVUxMIGlmIHRoZXJlIGlzIG5vCisgICAgIGNsb3NlZCBzdHJlYW0uICBPbmx5IHVzZWQgd2hlbiBzZXNzaW9uIGlzIGluaXRpYWxpemVkIGFzCisgICAgIHNlcnZlci4gKi8KKyAgbmdodHRwMl9zdHJlYW0gKmNsb3NlZF9zdHJlYW1fdGFpbDsKKyAgLyogUG9pbnRzIHRvIHRoZSBsYXRlc3QgaWRsZSBzdHJlYW0uICBOVUxMIGlmIHRoZXJlIGlzIG5vIGlkbGUKKyAgICAgc3RyZWFtLiAgT25seSB1c2VkIHdoZW4gc2Vzc2lvbiBpcyBpbml0aWFsaXplZCBhcyBzZXJ2ZXIgLiovCisgIG5naHR0cDJfc3RyZWFtICppZGxlX3N0cmVhbV9oZWFkOworICAvKiBQb2ludHMgdG8gdGhlIG9sZGVzdCBpZGxlIHN0cmVhbS4gIE5VTEwgaWYgdGhlcmUgaXMgbm8gaWRsZQorICAgICBzdHJlYW0uICBPbmx5IHVzZWQgd2hlbiBzZXNzaW9uIGlzIGluaXRpYWxpemVkIGFzIGVydmVyLiAqLworICBuZ2h0dHAyX3N0cmVhbSAqaWRsZV9zdHJlYW1fdGFpbDsKKyAgLyogUXVldWUgb2YgSW4tZmxpZ2h0IFNFVFRJTkdTIHZhbHVlcy4gIFNFVFRJTkdTIGJlYXJpbmcgQUNLIGlzIG5vdAorICAgICBjb25zaWRlcmVkIGFzIGluLWZsaWdodC4gKi8KKyAgbmdodHRwMl9pbmZsaWdodF9zZXR0aW5ncyAqaW5mbGlnaHRfc2V0dGluZ3NfaGVhZDsKKyAgLyogVGhlIG51bWJlciBvZiBvdXRnb2luZyBzdHJlYW1zLiBUaGlzIHdpbGwgYmUgY2FwcGVkIGJ5CisgICAgIHJlbW90ZV9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zLiAqLworICBzaXplX3QgbnVtX291dGdvaW5nX3N0cmVhbXM7CisgIC8qIFRoZSBudW1iZXIgb2YgaW5jb21pbmcgc3RyZWFtcy4gVGhpcyB3aWxsIGJlIGNhcHBlZCBieQorICAgICBsb2NhbF9zZXR0aW5ncy5tYXhfY29uY3VycmVudF9zdHJlYW1zLiAqLworICBzaXplX3QgbnVtX2luY29taW5nX3N0cmVhbXM7CisgIC8qIFRoZSBudW1iZXIgb2YgaW5jb21pbmcgcmVzZXJ2ZWQgc3RyZWFtcy4gIFRoaXMgaXMgdGhlIG51bWJlciBvZgorICAgICBzdHJlYW1zIGluIHJlc2VydmVkIChyZW1vdGUpIHN0YXRlLiAgUkZDIDc1NDAgZG9lcyBub3QgbGltaXQgdGhpcworICAgICBudW1iZXIuICBuZ2h0dHAyIG9mZmVycworICAgICBuZ2h0dHAyX29wdGlvbl9zZXRfbWF4X3Jlc2VydmVkX3JlbW90ZV9zdHJlYW1zKCkgdG8gYWNoaWV2ZSB0aGlzLgorICAgICBJZiBpdCBpcyB1c2VkLCBudW1faW5jb21pbmdfc3RyZWFtcyBpcyBjYXBwZWQgYnkKKyAgICAgbWF4X2luY29taW5nX3Jlc2VydmVkX3N0cmVhbXMuICBDbGllbnQgYXBwbGljYXRpb24gc2hvdWxkCisgICAgIGNvbnNpZGVyIHRvIHNldCB0aGlzIGJlY2F1c2Ugd2l0aG91dCB0aGF0IHNlcnZlciBjYW4gc2VuZAorICAgICBhcmJpdHJhcnkgbnVtYmVyIG9mIFBVU0hfUFJPTUlTRSwgYW5kIGV4aGF1c3QgY2xpZW50J3MgbWVtb3J5LiAqLworICBzaXplX3QgbnVtX2luY29taW5nX3Jlc2VydmVkX3N0cmVhbXM7CisgIC8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbmNvbWluZyByZXNlcnZlZCBzdHJlYW1zIChyZXNlcnZlZAorICAgICAocmVtb3RlKSBzdGF0ZSkuICBSU1RfU1RSRUFNIHdpbGwgYmUgc2VudCBmb3IgdGhlIHB1c2hlZCBzdHJlYW0KKyAgICAgd2hpY2ggZXhjZWVkcyB0aGlzIGxpbWl0LiAqLworICBzaXplX3QgbWF4X2luY29taW5nX3Jlc2VydmVkX3N0cmVhbXM7CisgIC8qIFRoZSBudW1iZXIgb2YgY2xvc2VkIHN0cmVhbXMgc3RpbGwga2VwdCBpbiB8c3RyZWFtc3wgaGFzaC4gIFRoZQorICAgICBjbG9zZWQgc3RyZWFtcyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBzaW5nbGUgbGlua2VkIGxpc3QKKyAgICAgfGNsb3NlZF9zdHJlYW1faGVhZHwuICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5IGtlZXBzCisgICAgIGluY29taW5nIHN0cmVhbXMgYW5kIHNlc3Npb24gaXMgaW5pdGlhbGl6ZWQgYXMgc2VydmVyLiAqLworICBzaXplX3QgbnVtX2Nsb3NlZF9zdHJlYW1zOworICAvKiBUaGUgbnVtYmVyIG9mIGlkbGUgc3RyZWFtcyBrZXB0IGluIHxzdHJlYW1zfCBoYXNoLiAgVGhlIGlkbGUKKyAgICAgc3RyZWFtcyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBkb3VibHkgbGlua2VkIGxpc3QKKyAgICAgfGlkbGVfc3RyZWFtX2hlYWR8LiAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seSBrZWVwcyBpZGxlCisgICAgIHN0cmVhbXMgaWYgc2Vzc2lvbiBpcyBpbml0aWFsaXplZCBhcyBzZXJ2ZXIuICovCisgIHNpemVfdCBudW1faWRsZV9zdHJlYW1zOworICAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBmb3IgbnZidWYgKi8KKyAgc2l6ZV90IG52YnVmbGVuOworICAvKiBDb3VudGVyIGZvciBkZXRlY3RpbmcgZmxvb2RpbmcgaW4gb3V0Ym91bmQgcXVldWUuICBJZiBpdCBleGNlZWRzCisgICAgIG1heF9vdXRib3VuZF9hY2ssIHNlc3Npb24gd2lsbCBiZSBjbG9zZWQuICovCisgIHNpemVfdCBvYnFfZmxvb2RfY291bnRlcl87CisgIC8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRnb2luZyBTRVRUSU5HUyBBQ0sgYW5kIFBJTkcgQUNLIGluCisgICAgIG91dGJvdW5kIHF1ZXVlLiAqLworICBzaXplX3QgbWF4X291dGJvdW5kX2FjazsKKyAgLyogVGhlIG1heGltdW0gbGVuZ3RoIG9mIGhlYWRlciBibG9jayB0byBzZW5kLiAgQ2FsY3VsYXRlZCBieSB0aGUKKyAgICAgc2FtZSB3YXkgYXMgbmdodHRwMl9oZF9kZWZsYXRlX2JvdW5kKCkgZG9lcy4gKi8KKyAgc2l6ZV90IG1heF9zZW5kX2hlYWRlcl9ibG9ja19sZW5ndGg7CisgIC8qIE5leHQgU3RyZWFtIElELiBNYWRlIHVuc2lnbmVkIGludCB0byBkZXRlY3QgPj0gKDEgPDwgMzEpLiAqLworICB1aW50MzJfdCBuZXh0X3N0cmVhbV9pZDsKKyAgLyogVGhlIGxhc3Qgc3RyZWFtIElEIHRoaXMgc2Vzc2lvbiBpbml0aWF0ZWQuICBGb3IgY2xpZW50IHNlc3Npb24sCisgICAgIHRoaXMgaXMgdGhlIGxhc3Qgc3RyZWFtIElEIGl0IGhhcyBzZW50LiAgRm9yIHNlcnZlciBzZXNzaW9uLCBpdAorICAgICBpcyB0aGUgbGFzdCBwcm9taXNlZCBzdHJlYW0gSUQgc2VudCBpbiBQVVNIX1BST01JU0UuICovCisgIGludDMyX3QgbGFzdF9zZW50X3N0cmVhbV9pZDsKKyAgLyogVGhlIGxhcmdlc3Qgc3RyZWFtIElEIHJlY2VpdmVkIHNvIGZhciAqLworICBpbnQzMl90IGxhc3RfcmVjdl9zdHJlYW1faWQ7CisgIC8qIFRoZSBsYXJnZXN0IHN0cmVhbSBJRCB3aGljaCBoYXMgYmVlbiBwcm9jZXNzZWQgaW4gc29tZSB3YXkuIFRoaXMKKyAgICAgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIGxhc3Qtc3RyZWFtLWlkIHdoZW4gc2VuZGluZyBHT0FXQVkKKyAgICAgZnJhbWUuICovCisgIGludDMyX3QgbGFzdF9wcm9jX3N0cmVhbV9pZDsKKyAgLyogQ291bnRlciBvZiB1bmlxdWUgSUQgb2YgUElORy4gV3JhcHMgd2hlbiBpdCBleGNlZWRzCisgICAgIE5HSFRUUDJfTUFYX1VOSVFVRV9JRCAqLworICB1aW50MzJfdCBuZXh0X3VuaXF1ZV9pZDsKKyAgLyogVGhpcyBpcyB0aGUgbGFzdC1zdHJlYW0tSUQgd2UgaGF2ZSBzZW50IGluIEdPQVdBWSAqLworICBpbnQzMl90IGxvY2FsX2xhc3Rfc3RyZWFtX2lkOworICAvKiBUaGlzIGlzIHRoZSB2YWx1ZSBpbiBHT0FXQVkgZnJhbWUgcmVjZWl2ZWQgZnJvbSByZW1vdGUgZW5kcG9pbnQuICovCisgIGludDMyX3QgcmVtb3RlX2xhc3Rfc3RyZWFtX2lkOworICAvKiBDdXJyZW50IHNlbmRlciB3aW5kb3cgc2l6ZS4gVGhpcyB2YWx1ZSBpcyBjb21wdXRlZCBhZ2FpbnN0IHRoZQorICAgICBjdXJyZW50IGluaXRpYWwgd2luZG93IHNpemUgb2YgcmVtb3RlIGVuZHBvaW50LiAqLworICBpbnQzMl90IHJlbW90ZV93aW5kb3dfc2l6ZTsKKyAgLyogS2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIHdpdGhvdXQKKyAgICAgV0lORE9XX1VQREFURS4gVGhpcyBjb3VsZCBiZSBuZWdhdGl2ZSBhZnRlciBzdWJtaXR0aW5nIG5lZ2F0aXZlCisgICAgIHZhbHVlIHRvIFdJTkRPV19VUERBVEUuICovCisgIGludDMyX3QgcmVjdl93aW5kb3dfc2l6ZTsKKyAgLyogVGhlIG51bWJlciBvZiBieXRlcyBjb25zdW1lZCBieSB0aGUgYXBwbGljYXRpb24gYW5kIG5vdyBpcworICAgICBzdWJqZWN0IHRvIFdJTkRPV19VUERBVEUuICBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIGF1dG8KKyAgICAgV0lORE9XX1VQREFURSBpcyB0dXJuZWQgb2ZmLiAqLworICBpbnQzMl90IGNvbnN1bWVkX3NpemU7CisgIC8qIFRoZSBhbW91bnQgb2YgcmVjdl93aW5kb3dfc2l6ZSBjdXQgdXNpbmcgc3VibWl0dGluZyBuZWdhdGl2ZQorICAgICB2YWx1ZSB0byBXSU5ET1dfVVBEQVRFICovCisgIGludDMyX3QgcmVjdl9yZWR1Y3Rpb247CisgIC8qIHdpbmRvdyBzaXplIGZvciBsb2NhbCBmbG93IGNvbnRyb2wuIEl0IGlzIGluaXRpYWxseSBzZXQgdG8KKyAgICAgTkdIVFRQMl9JTklUSUFMX0NPTk5FQ1RJT05fV0lORE9XX1NJWkUgYW5kIGNvdWxkIGJlCisgICAgIGluY3JlYXNlZC9kZWNyZWFzZWQgYnkgc3VibWl0dGluZyBXSU5ET1dfVVBEQVRFLiBTZWUKKyAgICAgbmdodHRwMl9zdWJtaXRfd2luZG93X3VwZGF0ZSgpLiAqLworICBpbnQzMl90IGxvY2FsX3dpbmRvd19zaXplOworICAvKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBsb2NhbCBlbmRwb2ludCByZWNlaXZlZCBpbml0aWFsCisgICAgIFNFVFRJTkdTIGZyYW1lIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludC4gKi8KKyAgdWludDhfdCByZW1vdGVfc2V0dGluZ3NfcmVjZWl2ZWQ7CisgIC8qIFNldHRpbmdzIHZhbHVlIHJlY2VpdmVkIGZyb20gdGhlIHJlbW90ZSBlbmRwb2ludC4gKi8KKyAgbmdodHRwMl9zZXR0aW5nc19zdG9yYWdlIHJlbW90ZV9zZXR0aW5nczsKKyAgLyogU2V0dGluZ3MgdmFsdWUgb2YgdGhlIGxvY2FsIGVuZHBvaW50LiAqLworICBuZ2h0dHAyX3NldHRpbmdzX3N0b3JhZ2UgbG9jYWxfc2V0dGluZ3M7CisgIC8qIE9wdGlvbiBmbGFncy4gVGhpcyBpcyBiaXR3aXNlLU9SIG9mIDAgb3IgbW9yZSBvZiBuZ2h0dHAyX29wdG1hc2suICovCisgIHVpbnQzMl90IG9wdF9mbGFnczsKKyAgLyogVW5hY2tlZCBsb2NhbCBTRVRUSU5HU19NQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIHZhbHVlLiBXZSB1c2UgdGhpcworICAgICB0byByZWZ1c2UgdGhlIGluY29taW5nIHN0cmVhbSBpZiBpdCBleGNlZWRzIHRoaXMgdmFsdWUuICovCisgIHVpbnQzMl90IHBlbmRpbmdfbG9jYWxfbWF4X2NvbmN1cnJlbnRfc3RyZWFtOworICAvKiBUaGUgYml0d2lzZSBPUiBvZiB6ZXJvIG9yIG1vcmUgb2YgbmdodHRwMl90eXBlbWFzayB0byBpbmRpY2F0ZQorICAgICB0aGF0IHRoZSBkZWZhdWx0IGhhbmRsaW5nIG9mIGV4dGVuc2lvbiBmcmFtZSBpcyBlbmFibGVkLiAqLworICB1aW50MzJfdCBidWlsdGluX3JlY3ZfZXh0X3R5cGVzOworICAvKiBVbmFja2VkIGxvY2FsIEVOQUJMRV9QVVNIIHZhbHVlLiAgV2UgdXNlIHRoaXMgdG8gcmVmdXNlCisgICAgIFBVU0hfUFJPTUlTRSBiZWZvcmUgU0VUVElOR1MgQUNLIGlzIHJlY2VpdmVkLiAqLworICB1aW50OF90IHBlbmRpbmdfZW5hYmxlX3B1c2g7CisgIC8qIFVuYWNrZWQgbG9jYWwgRU5BQkxFX0NPTk5FQ1RfUFJPVE9DT0wgdmFsdWUuICBXZSB1c2UgdGhpcyB0bworICAgICBhY2NlcHQgOnByb3RvY29sIGhlYWRlciBmaWVsZCBiZWZvcmUgU0VUVElOR1NfQUNLIGlzIHJlY2VpdmVkLiAqLworICB1aW50OF90IHBlbmRpbmdfZW5hYmxlX2Nvbm5lY3RfcHJvdG9jb2w7CisgIC8qIE5vbnplcm8gaWYgdGhlIHNlc3Npb24gaXMgc2VydmVyIHNpZGUuICovCisgIHVpbnQ4X3Qgc2VydmVyOworICAvKiBGbGFncyBpbmRpY2F0aW5nIEdPQVdBWSBpcyBzZW50IGFuZC9vciByZWNlaXZlZC4gVGhlIGZsYWdzIGFyZQorICAgICBjb21wb3NlZCBieSBiaXR3aXNlIE9SLWluZyBuZ2h0dHAyX2dvYXdheV9mbGFnLiAqLworICB1aW50OF90IGdvYXdheV9mbGFnczsKKyAgLyogVGhpcyBmbGFnIGlzIHVzZWQgdG8gcmVkdWNlIGV4Y2Vzc2l2ZSBxdWV1aW5nIG9mIFdJTkRPV19VUERBVEUgdG8KKyAgICAgdGhpcyBzZXNzaW9uLiAgVGhlIG5vbnplcm8gZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbgorICAgICBXSU5ET1dfVVBEQVRFIGlzIG5vdCBxdWV1ZWQuICovCisgIHVpbnQ4X3Qgd2luZG93X3VwZGF0ZV9xdWV1ZWQ7CisgIC8qIEJpdGZpZWxkIG9mIGV4dGVuc2lvbiBmcmFtZSB0eXBlcyB0aGF0IGFwcGxpY2F0aW9uIGlzIHdpbGxpbmcgdG8KKyAgICAgcmVjZWl2ZS4gIFRvIGRlc2lnbmF0ZSB0aGUgYml0IG9mIGdpdmVuIGZyYW1lIHR5cGUgaSwgdXNlCisgICAgIHVzZXJfcmVjdl9leHRfdHlwZXNbaSAvIDhdICYgKDEgPDwgKGkgJiAweDcpKS4gIEZpcnN0IDEwIGZyYW1lCisgICAgIHR5cGVzIGFyZSBzdGFuZGFyZCBmcmFtZSB0eXBlcyBhbmQgbm90IHVzZWQgaW4gdGhpcyBiaXRmaWVsZC4gIElmCisgICAgIGJpdCBpcyBzZXQsIGl0IGluZGljYXRlcyB0aGF0IGluY29taW5nIGZyYW1lIHdpdGggdGhhdCB0eXBlIGlzCisgICAgIHBhc3NlZCB0byB1c2VyIGRlZmluZWQgY2FsbGJhY2tzLCBvdGhlcndpc2UgdGhleSBhcmUgaWdub3JlZC4gKi8KKyAgdWludDhfdCB1c2VyX3JlY3ZfZXh0X3R5cGVzWzMyXTsKK307CisKKy8qIFN0cnVjdCB1c2VkIHdoZW4gdXBkYXRpbmcgaW5pdGlhbCB3aW5kb3cgc2l6ZSBvZiBlYWNoIGFjdGl2ZQorICAgc3RyZWFtLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb247CisgIGludDMyX3QgbmV3X3dpbmRvd19zaXplLCBvbGRfd2luZG93X3NpemU7Cit9IG5naHR0cDJfdXBkYXRlX3dpbmRvd19zaXplX2FyZzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb247CisgIC8qIGxpbmtlZCBsaXN0IG9mIHN0cmVhbXMgdG8gY2xvc2UgKi8KKyAgbmdodHRwMl9zdHJlYW0gKmhlYWQ7CisgIGludDMyX3QgbGFzdF9zdHJlYW1faWQ7CisgIC8qIG5vbnplcm8gaWYgR09BV0FZIGlzIHNlbnQgdG8gcGVlciwgd2hpY2ggbWVhbnMgd2UgYXJlIGdvaW5nIHRvCisgICAgIGNsb3NlIGluY29taW5nIHN0cmVhbXMuICB6ZXJvIGlmIEdPQVdBWSBpcyByZWNlaXZlZCBmcm9tIHBlZXIgYW5kCisgICAgIHdlIGFyZSBnb2luZyB0byBjbG9zZSBvdXRnb2luZyBzdHJlYW1zLiAqLworICBpbnQgaW5jb21pbmc7Cit9IG5naHR0cDJfY2xvc2Vfc3RyZWFtX29uX2dvYXdheV9hcmc7CisKKy8qIFRPRE8gc3RyZWFtIHRpbWVvdXQgZXRjICovCisKKy8qCisgKiBSZXR1cm5zIG5vbnplcm8gdmFsdWUgaWYgfHN0cmVhbV9pZHwgaXMgaW5pdGlhdGVkIGJ5IGxvY2FsCisgKiBlbmRwb2ludC4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9pc19teV9zdHJlYW1faWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQpOworCisvKgorICogQWRkcyB8aXRlbXwgdG8gdGhlIG91dGJvdW5kIHF1ZXVlIGluIHxzZXNzaW9ufC4gIFdoZW4gdGhpcyBmdW5jdGlvbgorICogc3VjY2VlZHMsIGl0IHRha2VzIG93bmVyc2hpcCBvZiB8aXRlbXwuIFNvIGNhbGxlciBtdXN0IG5vdCBmcmVlIGl0CisgKiBvbiBzdWNjZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfU1RSRUFNX0NMT1NFRAorICogICAgIFN0cmVhbSBhbHJlYWR5IGNsb3NlZCAoREFUQSBhbmQgUFVTSF9QUk9NSVNFIGZyYW1lIG9ubHkpCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fYWRkX2l0ZW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0pOworCisvKgorICogQWRkcyBSU1RfU1RSRUFNIGZyYW1lIGZvciB0aGUgc3RyZWFtIHxzdHJlYW1faWR8IHdpdGggdGhlIGVycm9yCisgKiBjb2RlIHxlcnJvcl9jb2RlfC4gVGhpcyBpcyBhIGNvbnZlbmllbnQgZnVuY3Rpb24gYnVpbHQgb24gdG9wIG9mCisgKiBuZ2h0dHAyX3Nlc3Npb25fYWRkX2ZyYW1lKCkgdG8gYWRkIFJTVF9TVFJFQU0gZWFzaWx5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IHJldHVybnMgMCB3aXRob3V0IGFkZGluZyBSU1RfU1RSRUFNIGZyYW1lIGlmCisgKiBnaXZlbiBzdHJlYW0gaXMgaW4gTkdIVFRQMl9TVFJFQU1fQ0xPU0lORyBzdGF0ZSwgYmVjYXVzZSBtdWx0aXBsZQorICogUlNUX1NUUkVBTSBmb3IgYSBzdHJlYW0gaXMgcmVkdW5kYW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9yc3Rfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUpOworCisvKgorICogQWRkcyBQSU5HIGZyYW1lLiBUaGlzIGlzIGEgY29udmVuaWVudCBmdW5jdGluIGJ1aWx0IG9uIHRvcCBvZgorICogbmdodHRwMl9zZXNzaW9uX2FkZF9mcmFtZSgpIHRvIGFkZCBQSU5HIGVhc2lseS4KKyAqCisgKiBJZiB0aGUgfG9wYXF1ZV9kYXRhfCBpcyBub3QgTlVMTCwgaXQgbXVzdCBwb2ludCB0byA4IGJ5dGVzIG1lbW9yeQorICogcmVnaW9uIG9mIGRhdGEuIFRoZSBkYXRhIHBvaW50ZWQgYnkgfG9wYXF1ZV9kYXRhfCBpcyBjb3BpZWQuIEl0IGNhbgorICogYmUgTlVMTC4gSW4gdGhpcyBjYXNlLCA4IGJ5dGVzIE5VTEwgaXMgdXNlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0ZMT09ERUQKKyAqICAgICBUaGVyZSBhcmUgdG9vIG1hbnkgaXRlbXMgaW4gb3V0Ym91bmQgcXVldWU7IHRoaXMgb25seSBoYXBwZW5zCisgKiAgICAgaWYgTkdIVFRQMl9GTEFHX0FDSyBpcyBzZXQgaW4gfGZsYWdzfAorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9waW5nKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqb3BhcXVlX2RhdGEpOworCisvKgorICogQWRkcyBHT0FXQVkgZnJhbWUgd2l0aCB0aGUgbGFzdC1zdHJlYW0tSUQgfGxhc3Rfc3RyZWFtX2lkfCBhbmQgdGhlCisgKiBlcnJvciBjb2RlIHxlcnJvcl9jb2RlfC4gVGhpcyBpcyBhIGNvbnZlbmllbnQgZnVuY3Rpb24gYnVpbHQgb24gdG9wCisgKiBvZiBuZ2h0dHAyX3Nlc3Npb25fYWRkX2ZyYW1lKCkgdG8gYWRkIEdPQVdBWSBlYXNpbHkuICBUaGUKKyAqIHxhdXhfZmxhZ3N8IGFyZSBiaXR3aXNlLU9SIG9mIG9uZSBvciBtb3JlIG9mCisgKiBuZ2h0dHAyX2dvYXdheV9hdXhfZmxhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQKKyAqICAgICBUaGUgfG9wYXF1ZV9kYXRhX2xlbnwgaXMgdG9vIGxhcmdlLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkZF9nb2F3YXkobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IGxhc3Rfc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUsIGNvbnN0IHVpbnQ4X3QgKm9wYXF1ZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvcGFxdWVfZGF0YV9sZW4sIHVpbnQ4X3QgYXV4X2ZsYWdzKTsKKworLyoKKyAqIEFkZHMgV0lORE9XX1VQREFURSBmcmFtZSB3aXRoIHN0cmVhbSBJRCB8c3RyZWFtX2lkfCBhbmQKKyAqIHdpbmRvdy1zaXplLWluY3JlbWVudCB8d2luZG93X3NpemVfaW5jcmVtZW50fC4gVGhpcyBpcyBhIGNvbnZlbmllbnQKKyAqIGZ1bmN0aW9uIGJ1aWx0IG9uIHRvcCBvZiBuZ2h0dHAyX3Nlc3Npb25fYWRkX2ZyYW1lKCkgdG8gYWRkCisgKiBXSU5ET1dfVVBEQVRFIGVhc2lseS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9hZGRfd2luZG93X3VwZGF0ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdpbmRvd19zaXplX2luY3JlbWVudCk7CisKKy8qCisgKiBBZGRzIFNFVFRJTkdTIGZyYW1lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfRkxPT0RFRAorICogICAgIFRoZXJlIGFyZSB0b28gbWFueSBpdGVtcyBpbiBvdXRib3VuZCBxdWV1ZTsgdGhpcyBvbmx5IGhhcHBlbnMKKyAqICAgICBpZiBOR0hUVFAyX0ZMQUdfQUNLIGlzIHNldCBpbiB8ZmxhZ3N8CisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fYWRkX3NldHRpbmdzKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LCBzaXplX3Qgbml2KTsKKworLyoKKyAqIENyZWF0ZXMgbmV3IHN0cmVhbSBpbiB8c2Vzc2lvbnwgd2l0aCBzdHJlYW0gSUQgfHN0cmVhbV9pZHwsCisgKiBwcmlvcml0eSB8cHJpX3NwZWN8IGFuZCBmbGFncyB8ZmxhZ3N8LiAgVGhlIHxmbGFnc3wgaXMgYml0d2lzZSBPUgorICogb2YgbmdodHRwMl9zdHJlYW1fZmxhZy4gIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gaW5pdGlhbAorICogSEVBREVSUyBpcyBzZW50IG9yIHJlY2VpdmVkLCB0aGVzZSBmbGFncyBhcmUgdGFrZW4gZnJvbSBpdC4gIFRoZQorICogc3RhdGUgb2Ygc3RyZWFtIGlzIHNldCB0byB8aW5pdGlhbF9zdGF0ZXwuIFRoZSB8c3RyZWFtX3VzZXJfZGF0YXwKKyAqIGlzIGEgcG9pbnRlciB0byB0aGUgYXJiaXRyYXJ5IHVzZXIgc3VwcGxpZWQgZGF0YSB0byBiZSBhc3NvY2lhdGVkCisgKiB0byB0aGlzIHN0cmVhbS4KKyAqCisgKiBJZiB8aW5pdGlhbF9zdGF0ZXwgaXMgTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQsIHRoaXMgZnVuY3Rpb24gc2V0cworICogTkdIVFRQMl9TVFJFQU1fRkxBR19QVVNIIGZsYWcgc2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gY3JlYXRlZCBuZXcgc3RyZWFtIG9iamVjdCwgb3IKKyAqIE5VTEwuCisgKgorICogVGhpcyBmdW5jdGlvbiBhZGp1c3RzIG5laXRoZXIgdGhlIG51bWJlciBvZiBjbG9zZWQgc3RyZWFtcyBvciBpZGxlCisgKiBzdHJlYW1zLiAgVGhlIGNhbGxlciBzaG91bGQgbWFudWFsbHkgY2FsbAorICogbmdodHRwMl9zZXNzaW9uX2FkanVzdF9jbG9zZWRfc3RyZWFtKCkgb3IKKyAqIG5naHR0cDJfc2Vzc2lvbl9hZGp1c3RfaWRsZV9zdHJlYW0oKSByZXNwZWN0aXZlbHkuCisgKi8KK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3Nlc3Npb25fb3Blbl9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9wcmlvcml0eV9zcGVjICpwcmlfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW1fc3RhdGUgaW5pdGlhbF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSk7CisKKy8qCisgKiBDbG9zZXMgc3RyZWFtIHdob3NlIHN0cmVhbSBJRCBpcyB8c3RyZWFtX2lkfC4gVGhlIHJlYXNvbiBvZiBjbG9zdXJlCisgKiBpcyBpbmRpY2F0ZWQgYnkgdGhlIHxlcnJvcl9jb2RlfC4gV2hlbiBjbG9zaW5nIHRoZSBzdHJlYW0sCisgKiBvbl9zdHJlYW1fY2xvc2VfY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuCisgKgorICogSWYgdGhlIHNlc3Npb24gaXMgaW5pdGlhbGl6ZWQgYXMgc2VydmVyIGFuZCB8c3RyZWFtfCBpcyBpbmNvbWluZworICogc3RyZWFtLCBzdHJlYW0gaXMganVzdCBtYXJrZWQgY2xvc2VkIGFuZCB0aGlzIGZ1bmN0aW9uIGNhbGxzCisgKiBuZ2h0dHAyX3Nlc3Npb25fa2VlcF9jbG9zZWRfc3RyZWFtKCkgd2l0aCB8c3RyZWFtfC4gIE90aGVyd2lzZSwKKyAqIHxzdHJlYW18IHdpbGwgYmUgZGVsZXRlZCBmcm9tIG1lbW9yeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVAorICogICAgIFRoZSBzcGVjaWZpZWQgc3RyZWFtIGRvZXMgbm90IGV4aXN0LgorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBmYWlsZWQuCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlcnJvcl9jb2RlKTsKKworLyoKKyAqIERlbGV0ZXMgfHN0cmVhbXwgZnJvbSBtZW1vcnkuICBBZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHN0cmVhbQorICogY2Fubm90IGJlIGFjY2Vzc2VkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fZGVzdHJveV9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFRyaWVzIHRvIGtlZXAgaW5jb21pbmcgY2xvc2VkIHN0cmVhbSB8c3RyZWFtfC4gIER1ZSB0byB0aGUKKyAqIGxpbWl0YXRpb24gb2YgbWF4aW11bSBudW1iZXIgb2Ygc3RyZWFtcyBpbiBtZW1vcnksIHxzdHJlYW18IGlzIG5vdAorICogY2xvc2VkIGFuZCBqdXN0IGRlbGV0ZWQgZnJvbSBtZW1vcnkgKHNlZQorICogbmdodHRwMl9zZXNzaW9uX2Rlc3Ryb3lfc3RyZWFtKS4KKyAqLwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fa2VlcF9jbG9zZWRfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIEFwcGVuZHMgfHN0cmVhbXwgdG8gbGlua2VkIGxpc3QgfHNlc3Npb24tPmlkbGVfc3RyZWFtX2hlYWR8LiAgV2UKKyAqIGFwcGx5IGZpeGVkIGxpbWl0IGZvciBsaXN0IHNpemUuICBUbyBmaXQgaW50byB0aGF0IGxpbWl0LCBvbmUgb3IKKyAqIG1vcmUgb2xkZXN0IHN0cmVhbXMgYXJlIHJlbW92ZWQgZnJvbSBsaXN0IGFzIG5lY2Vzc2FyeS4KKyAqLwordm9pZCBuZ2h0dHAyX3Nlc3Npb25fa2VlcF9pZGxlX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogRGV0YWNoZXMgfHN0cmVhbXwgZnJvbSBpZGxlIHN0cmVhbXMgbGlua2VkIGxpc3QuCisgKi8KK3ZvaWQgbmdodHRwMl9zZXNzaW9uX2RldGFjaF9pZGxlX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBEZWxldGVzIGNsb3NlZCBzdHJlYW0gdG8gZW5zdXJlIHRoYXQgbnVtYmVyIG9mIGluY29taW5nIHN0cmVhbXMKKyAqIGluY2x1ZGluZyBhY3RpdmUgYW5kIGNsb3NlZCBpcyBpbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZAorICogc3RyZWFtLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fYWRqdXN0X2Nsb3NlZF9zdHJlYW0obmdodHRwMl9zZXNzaW9uICpzZXNzaW9uKTsKKworLyoKKyAqIERlbGV0ZXMgaWRsZSBzdHJlYW0gdG8gZW5zdXJlIHRoYXQgbnVtYmVyIG9mIGlkbGUgc3RyZWFtcyBpcyBpbgorICogY2VydGFpbiBsaW1pdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX2FkanVzdF9pZGxlX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKgorICogSWYgZnVydGhlciByZWNlcHRpb25zIGFuZCB0cmFuc21pc3Npb25zIG92ZXIgdGhlIHN0cmVhbSB8c3RyZWFtX2lkfAorICogYXJlIGRpc2FsbG93ZWQsIGNsb3NlIHRoZSBzdHJlYW0gd2l0aCBlcnJvciBjb2RlIE5HSFRUUDJfTk9fRVJST1IuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQKKyAqIHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UCisgKiAgICAgVGhlIHNwZWNpZmllZCBzdHJlYW0gZG9lcyBub3QgZXhpc3QuCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fY2xvc2Vfc3RyZWFtX2lmX3NodXRfcmR3cihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcmVxdWVzdF9oZWFkZXJzX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKTsKKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9yZXNwb25zZV9oZWFkZXJzX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9wdXNoX3Jlc3BvbnNlX2hlYWRlcnNfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIENhbGxlZCB3aGVuIEhFQURFUlMgaXMgcmVjZWl2ZWQsIGFzc3VtaW5nIHxmcmFtZXwgaXMgcHJvcGVybHkKKyAqIGluaXRpYWxpemVkLiAgVGhpcyBmdW5jdGlvbiBkb2VzIGZpcnN0IHZhbGlkYXRlIHJlY2VpdmVkIGZyYW1lIGFuZAorICogdGhlbiBvcGVuIHN0cmVhbSBhbmQgY2FsbCBjYWxsYmFjayBmdW5jdGlvbnMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9JR05fSEVBREVSX0JMT0NLCisgKiAgICAgRnJhbWUgd2FzIHJlamVjdGVkIGFuZCBoZWFkZXIgYmxvY2sgbXVzdCBiZSBkZWNvZGVkIGJ1dAorICogICAgIHJlc3VsdCBtdXN0IGJlIGlnbm9yZWQuCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIHJlYWRfY2FsbGJhY2sgZmFpbGVkCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25faGVhZGVyc19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBQUklPUklUWSBpcyByZWNlaXZlZCwgYXNzdW1pbmcgfGZyYW1lfCBpcyBwcm9wZXJseQorICogaW5pdGlhbGl6ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkuCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIHJlYWRfY2FsbGJhY2sgZmFpbGVkCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcHJpb3JpdHlfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBSU1RfU1RSRUFNIGlzIHJlY2VpdmVkLCBhc3N1bWluZyB8ZnJhbWV8IGlzIHByb3Blcmx5CisgKiBpbml0aWFsaXplZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSByZWFkX2NhbGxiYWNrIGZhaWxlZAorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3JzdF9zdHJlYW1fcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKTsKKworLyoKKyAqIENhbGxlZCB3aGVuIFNFVFRJTkdTIGlzIHJlY2VpdmVkLCBhc3N1bWluZyB8ZnJhbWV8IGlzIHByb3Blcmx5CisgKiBpbml0aWFsaXplZC4gSWYgfG5vYWNrfCBpcyBub24temVybywgU0VUVElOR1Mgd2l0aCBBQ0sgd2lsbCBub3QgYmUKKyAqIHN1Ym1pdHRlZC4gSWYgfGZyYW1lfCBoYXMgTkdIVFRQMl9GTEFHX0FDSyBmbGFnIHNldCwgbm8gU0VUVElOR1MKKyAqIHdpdGggQUNLIHdpbGwgbm90IGJlIHN1Ym1pdHRlZCByZWdhcmRsZXNzIG9mIHxub2Fja3wuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgcmVhZF9jYWxsYmFjayBmYWlsZWQKKyAqIE5HSFRUUDJfRVJSX0ZMT09ERUQKKyAqICAgICBUaGVyZSBhcmUgdG9vIG1hbnkgaXRlbXMgaW4gb3V0Ym91bmQgcXVldWUsIGFuZCB0aGlzIGlzIG1vc3QKKyAqICAgICBsaWtlbHkgY2F1c2VkIGJ5IG1pc2JlaGF2aW91ciBvZiBwZWVyLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3NldHRpbmdzX3JlY2VpdmVkKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUsIGludCBub2Fjayk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBQVVNIX1BST01JU0UgaXMgcmVjZWl2ZWQsIGFzc3VtaW5nIHxmcmFtZXwgaXMgcHJvcGVybHkKKyAqIGluaXRpYWxpemVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfSUdOX0hFQURFUl9CTE9DSworICogICAgIEZyYW1lIHdhcyByZWplY3RlZCBhbmQgaGVhZGVyIGJsb2NrIG11c3QgYmUgZGVjb2RlZCBidXQKKyAqICAgICByZXN1bHQgbXVzdCBiZSBpZ25vcmVkLgorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSByZWFkX2NhbGxiYWNrIGZhaWxlZAorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3B1c2hfcHJvbWlzZV9yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBQSU5HIGlzIHJlY2VpdmVkLCBhc3N1bWluZyB8ZnJhbWV8IGlzIHByb3Blcmx5CisgKiBpbml0aWFsaXplZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICogTkdIVFRQMl9FUlJfRkxPT0RFRAorICogICAgIFRoZXJlIGFyZSB0b28gbWFueSBpdGVtcyBpbiBvdXRib3VuZCBxdWV1ZSwgYW5kIHRoaXMgaXMgbW9zdAorICogICAgIGxpa2VseSBjYXVzZWQgYnkgbWlzYmVoYXZpb3VyIG9mIHBlZXIuCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fb25fcGluZ19yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpOworCisvKgorICogQ2FsbGVkIHdoZW4gR09BV0FZIGlzIHJlY2VpdmVkLCBhc3N1bWluZyB8ZnJhbWV8IGlzIHByb3Blcmx5CisgKiBpbml0aWFsaXplZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX2dvYXdheV9yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBXSU5ET1dfVVBEQVRFIGlzIHJlY2VpdmVkLCBhc3N1bWluZyB8ZnJhbWV8IGlzIHByb3Blcmx5CisgKiBpbml0aWFsaXplZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX3dpbmRvd191cGRhdGVfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKTsKKworLyoKKyAqIENhbGxlZCB3aGVuIEFMVFNWQyBpcyByZWNlaXZlZCwgYXNzdW1pbmcgfGZyYW1lfCBpcyBwcm9wZXJseQorICogaW5pdGlhbGl6ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZhaWxlZC4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl9vbl9hbHRzdmNfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9mcmFtZSAqZnJhbWUpOworCisvKgorICogQ2FsbGVkIHdoZW4gT1JJR0lOIGlzIHJlY2VpdmVkLCBhc3N1bWluZyB8ZnJhbWV8IGlzIHByb3Blcmx5CisgKiBpbml0aWFsaXplZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX29yaWdpbl9yZWNlaXZlZChuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX2ZyYW1lICpmcmFtZSk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBEQVRBIGlzIHJlY2VpdmVkLCBhc3N1bWluZyB8ZnJhbWV8IGlzIHByb3Blcmx5CisgKiBpbml0aWFsaXplZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeS4KKyAqIE5HSFRUUDJfRVJSX0NBTExCQUNLX0ZBSUxVUkUKKyAqICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZmFpbGVkLgorICovCitpbnQgbmdodHRwMl9zZXNzaW9uX29uX2RhdGFfcmVjZWl2ZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfZnJhbWUgKmZyYW1lKTsKKworLyoKKyAqIFJldHVybnMgbmdodHRwMl9zdHJlYW0qIG9iamVjdCB3aG9zZSBzdHJlYW0gSUQgaXMgfHN0cmVhbV9pZHwuICBJdAorICogY291bGQgYmUgTlVMTCBpZiBzdWNoIHN0cmVhbSBkb2VzIG5vdCBleGlzdC4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucworICogTlVMTCBpZiBzdHJlYW0gaXMgbWFya2VkIGFzIGNsb3NlZC4KKyAqLworbmdodHRwMl9zdHJlYW0gKm5naHR0cDJfc2Vzc2lvbl9nZXRfc3RyZWFtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGJlaGF2ZXMgbGlrZSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbSgpLCBidXQgaXQKKyAqIHJldHVybnMgc3RyZWFtIG9iamVjdCBldmVuIGlmIGl0IGlzIG1hcmtlZCBhcyBjbG9zZWQgb3IgaW4KKyAqIE5HSFRUUDJfU1RSRUFNX0lETEUgc3RhdGUuCisgKi8KK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbV9yYXcobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCk7CisKKy8qCisgKiBQYWNrcyBEQVRBIGZyYW1lIHxmcmFtZXwgaW4gd2lyZSBmcmFtZSBmb3JtYXQgYW5kIHN0b3JlcyBpdCBpbgorICogfGJ1ZnN8LiAgUGF5bG9hZCB3aWxsIGJlIHJlYWQgdXNpbmcgfGF1eF9kYXRhLT5kYXRhX3ByZHwuICBUaGUKKyAqIGxlbmd0aCBvZiBwYXlsb2FkIGlzIGF0IG1vc3QgfGRhdGFtYXh8IGJ5dGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfREVGRVJSRUQKKyAqICAgICBUaGUgREFUQSBmcmFtZSBpcyBwb3N0cG9uZWQuCisgKiBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFCisgKiAgICAgVGhlIHJlYWRfY2FsbGJhY2sgZmFpbGVkIChzdHJlYW0gZXJyb3IpLgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfQ0FMTEJBQ0tfRkFJTFVSRQorICogICAgIFRoZSByZWFkX2NhbGxiYWNrIGZhaWxlZCAoc2Vzc2lvbiBlcnJvcikuCisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fcGFja19kYXRhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgbmdodHRwMl9idWZzICpidWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFtYXgsIG5naHR0cDJfZnJhbWUgKmZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9kYXRhX2F1eF9kYXRhICphdXhfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogUG9wcyBhbmQgcmV0dXJucyBuZXh0IGl0ZW0gdG8gc2VuZC4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggaXRlbSwKKyAqIHJldHVybnMgTlVMTC4gIFRoaXMgZnVuY3Rpb24gdGFrZXMgaW50byBhY2NvdW50IG1heCBjb25jdXJyZW50CisgKiBzdHJlYW1zLiAgVGhhdCBtZWFucyBpZiBzZXNzaW9uLT5vYl9zeW4gaGFzIGl0ZW0gYW5kIG1heCBjb25jdXJyZW50CisgKiBzdHJlYW1zIGlzIHJlYWNoZWQsIHRoZSBldmVuIGlmIG90aGVyIHF1ZXVlcyBjb250YWluIGl0ZW1zLCB0aGVuCisgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KKyAqLworbmdodHRwMl9vdXRib3VuZF9pdGVtICoKK25naHR0cDJfc2Vzc2lvbl9wb3BfbmV4dF9vYl9pdGVtKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbik7CisKKy8qCisgKiBSZXR1cm5zIG5leHQgaXRlbSB0byBzZW5kLiAgSWYgdGhlcmUgaXMgbm8gc3VjaCBpdGVtLCB0aGlzIGZ1bmN0aW9uCisgKiByZXR1cm5zIE5VTEwuICBUaGlzIGZ1bmN0aW9uIHRha2VzIGludG8gYWNjb3VudCBtYXggY29uY3VycmVudAorICogc3RyZWFtcy4gIFRoYXQgbWVhbnMgaWYgc2Vzc2lvbi0+b2Jfc3luIGhhcyBpdGVtIGFuZCBtYXggY29uY3VycmVudAorICogc3RyZWFtcyBpcyByZWFjaGVkLCB0aGUgZXZlbiBpZiBvdGhlciBxdWV1ZXMgY29udGFpbiBpdGVtcywgdGhlbgorICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK25naHR0cDJfb3V0Ym91bmRfaXRlbSAqCituZ2h0dHAyX3Nlc3Npb25fZ2V0X25leHRfb2JfaXRlbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24pOworCisvKgorICogVXBkYXRlcyBsb2NhbCBzZXR0aW5ncyB3aXRoIHRoZSB8aXZ8LiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQorICogYXJyYXkgcG9pbnRlZCBieSB0aGUgfGl2fCBpcyBnaXZlbiBieSB0aGUgfG5pdnwuICBUaGlzIGZ1bmN0aW9uCisgKiBhc3N1bWVzIHRoYXQgdGhlIGFsbCBzZXR0aW5nc19pZCBtZW1iZXIgaW4gfGl2fCBhcmUgaW4gcmFuZ2UgMSB0bworICogTkdIVFRQMl9TRVRUSU5HU19NQVgsIGluY2x1c2l2ZS4KKyAqCisgKiBXaGlsZSB1cGRhdGluZyBpbmRpdmlkdWFsIHN0cmVhbSdzIGxvY2FsIHdpbmRvdyBzaXplLCBpZiB0aGUgd2luZG93CisgKiBzaXplIGJlY29tZXMgc3RyaWN0bHkgbGFyZ2VyIHRoYW4gTkdIVFRQMl9NQVhfV0lORE9XX1NJWkUsCisgKiBSU1RfU1RSRUFNIGlzIGlzc3VlZCBhZ2FpbnN0IHN1Y2ggYSBzdHJlYW0uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl91cGRhdGVfbG9jYWxfc2V0dGluZ3MobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml2KTsKKworLyoKKyAqIFJlLXByaW9yaXRpemUgfHN0cmVhbXwuIFRoZSBuZXcgcHJpb3JpdHkgc3BlY2lmaWNhdGlvbiBpcworICogfHByaV9zcGVjfC4gIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHN0cmVhbS0+aGQuc3RyZWFtX2lkICE9CisgKiBwcmlfc3BlYy0+c3RyZWFtX2lkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWRqdXN0IHRoZSBudW1iZXIgb2YgaWRsZSBzdHJlYW1zLiAgVGhlCisgKiBjYWxsZXIgc2hvdWxkIGNhbGwgbmdodHRwMl9zZXNzaW9uX2FkanVzdF9pZGxlX3N0cmVhbSgpIGxhdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX3Nlc3Npb25fcmVwcmlvcml0aXplX3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKTsKKworLyoKKyAqIFRlcm1pbmF0ZXMgY3VycmVudCB8c2Vzc2lvbnwgd2l0aCB0aGUgfGVycm9yX2NvZGV8LiAgVGhlIHxyZWFzb258CisgKiBpcyBOVUxMLXRlcm1pbmF0ZWQgZGVidWcgc3RyaW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5LgorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVAorICogICAgIFRoZSB8cmVhc29ufCBpcyB0b28gbG9uZy4KKyAqLworaW50IG5naHR0cDJfc2Vzc2lvbl90ZXJtaW5hdGVfc2Vzc2lvbl93aXRoX3JlYXNvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGVycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbik7CisKKyNlbmRpZiAvKiBOR0hUVFAyX1NFU1NJT05fSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9zdHJlYW0uYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzYTZiMQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3RyZWFtLmMKQEAgLTAsMCArMSwxMDAxIEBACisvKgorICogbmdodHRwMiAtIEhUVFAvMiBDIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGF0c3VoaXJvIFRzdWppa2F3YQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJuZ2h0dHAyX3N0cmVhbS5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIm5naHR0cDJfc2Vzc2lvbi5oIgorI2luY2x1ZGUgIm5naHR0cDJfaGVscGVyLmgiCisjaW5jbHVkZSAibmdodHRwMl9kZWJ1Zy5oIgorI2luY2x1ZGUgIm5naHR0cDJfZnJhbWUuaCIKKworLyogTWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIGFueSB0d28gc3RyZWFtJ3MgY3ljbGUgaW4gdGhlIHNhbWUKKyAgIHByaXJvcml0eSBxdWV1ZS4gIEltYWdpbmUgc3RyZWFtIEEncyBjeWNsZSBpcyBBLCBhbmQgc3RyZWFtIEIncworICAgY3ljbGUgaXMgQiwgYW5kIEEgPCBCLiAgVGhlIGN5Y2xlIGlzIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLCBpdAorICAgbWF5IGdldCBvdmVyZmxvdy4gIEJlY2F1c2Ugb2YgaG93IHdlIGNhbGN1bGF0ZSB0aGUgbmV4dCBjeWNsZQorICAgdmFsdWUsIGlmIEIgLSBBIGlzIGxlc3MgdGhhbiBvciBlcXVhbHMgdG8KKyAgIE5HSFRUUDJfTUFYX0NZQ0xFX0RJU1RBTkNFLCBBIGFuZCBCIGFyZSBpbiB0aGUgc2FtZSBzY2FsZSwgaW4gb3RoZXIKKyAgIHdvcmRzLCBCIGlzIHJlYWxseSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gQS4gIE90aGVyd2lzZSwgQSBpcyBhCisgICByZXN1bHQgb2Ygb3ZlcmZsb3csIGFuZCBpdCBpcyBhY3R1YWxseSBBID4gQiBpZiB3ZSBjb25zaWRlciB0aGF0CisgICBmYWN0LiAqLworI2RlZmluZSBOR0hUVFAyX01BWF9DWUNMRV9ESVNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCh1aW50NjRfdClOR0hUVFAyX01BWF9GUkFNRV9TSVpFX01BWCAqIDI1NiArIDI1NSkKKworc3RhdGljIGludCBzdHJlYW1fbGVzcyhjb25zdCB2b2lkICpsaHN4LCBjb25zdCB2b2lkICpyaHN4KSB7CisgIGNvbnN0IG5naHR0cDJfc3RyZWFtICpsaHMsICpyaHM7CisKKyAgbGhzID0gbmdodHRwMl9zdHJ1Y3Rfb2YobGhzeCwgbmdodHRwMl9zdHJlYW0sIHBxX2VudHJ5KTsKKyAgcmhzID0gbmdodHRwMl9zdHJ1Y3Rfb2YocmhzeCwgbmdodHRwMl9zdHJlYW0sIHBxX2VudHJ5KTsKKworICBpZiAobGhzLT5jeWNsZSA9PSByaHMtPmN5Y2xlKSB7CisgICAgcmV0dXJuIGxocy0+c2VxIDwgcmhzLT5zZXE7CisgIH0KKworICByZXR1cm4gcmhzLT5jeWNsZSAtIGxocy0+Y3ljbGUgPD0gTkdIVFRQMl9NQVhfQ1lDTEVfRElTVEFOQ0U7Cit9CisKK3ZvaWQgbmdodHRwMl9zdHJlYW1faW5pdChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBuZ2h0dHAyX3N0cmVhbV9zdGF0ZSBpbml0aWFsX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgd2VpZ2h0LCBpbnQzMl90IHJlbW90ZV9pbml0aWFsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbG9jYWxfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhLCBuZ2h0dHAyX21lbSAqbWVtKSB7CisgIG5naHR0cDJfbWFwX2VudHJ5X2luaXQoJnN0cmVhbS0+bWFwX2VudHJ5LCAoa2V5X3R5cGUpc3RyZWFtX2lkKTsKKyAgbmdodHRwMl9wcV9pbml0KCZzdHJlYW0tPm9icSwgc3RyZWFtX2xlc3MsIG1lbSk7CisKKyAgc3RyZWFtLT5zdHJlYW1faWQgPSBzdHJlYW1faWQ7CisgIHN0cmVhbS0+ZmxhZ3MgPSBmbGFnczsKKyAgc3RyZWFtLT5zdGF0ZSA9IGluaXRpYWxfc3RhdGU7CisgIHN0cmVhbS0+c2h1dF9mbGFncyA9IE5HSFRUUDJfU0hVVF9OT05FOworICBzdHJlYW0tPnN0cmVhbV91c2VyX2RhdGEgPSBzdHJlYW1fdXNlcl9kYXRhOworICBzdHJlYW0tPml0ZW0gPSBOVUxMOworICBzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSA9IHJlbW90ZV9pbml0aWFsX3dpbmRvd19zaXplOworICBzdHJlYW0tPmxvY2FsX3dpbmRvd19zaXplID0gbG9jYWxfaW5pdGlhbF93aW5kb3dfc2l6ZTsKKyAgc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplID0gMDsKKyAgc3RyZWFtLT5jb25zdW1lZF9zaXplID0gMDsKKyAgc3RyZWFtLT5yZWN2X3JlZHVjdGlvbiA9IDA7CisgIHN0cmVhbS0+d2luZG93X3VwZGF0ZV9xdWV1ZWQgPSAwOworCisgIHN0cmVhbS0+ZGVwX3ByZXYgPSBOVUxMOworICBzdHJlYW0tPmRlcF9uZXh0ID0gTlVMTDsKKyAgc3RyZWFtLT5zaWJfcHJldiA9IE5VTEw7CisgIHN0cmVhbS0+c2liX25leHQgPSBOVUxMOworCisgIHN0cmVhbS0+Y2xvc2VkX3ByZXYgPSBOVUxMOworICBzdHJlYW0tPmNsb3NlZF9uZXh0ID0gTlVMTDsKKworICBzdHJlYW0tPndlaWdodCA9IHdlaWdodDsKKyAgc3RyZWFtLT5zdW1fZGVwX3dlaWdodCA9IDA7CisKKyAgc3RyZWFtLT5odHRwX2ZsYWdzID0gTkdIVFRQMl9IVFRQX0ZMQUdfTk9ORTsKKyAgc3RyZWFtLT5jb250ZW50X2xlbmd0aCA9IC0xOworICBzdHJlYW0tPnJlY3ZfY29udGVudF9sZW5ndGggPSAwOworICBzdHJlYW0tPnN0YXR1c19jb2RlID0gLTE7CisKKyAgc3RyZWFtLT5xdWV1ZWQgPSAwOworICBzdHJlYW0tPmRlc2NlbmRhbnRfbGFzdF9jeWNsZSA9IDA7CisgIHN0cmVhbS0+Y3ljbGUgPSAwOworICBzdHJlYW0tPnBlbmRpbmdfcGVuYWx0eSA9IDA7CisgIHN0cmVhbS0+ZGVzY2VuZGFudF9uZXh0X3NlcSA9IDA7CisgIHN0cmVhbS0+c2VxID0gMDsKKyAgc3RyZWFtLT5sYXN0X3dyaXRlbGVuID0gMDsKK30KKwordm9pZCBuZ2h0dHAyX3N0cmVhbV9mcmVlKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9wcV9mcmVlKCZzdHJlYW0tPm9icSk7CisgIC8qIFdlIGRvbid0IGZyZWUgc3RyZWFtLT5pdGVtLiAgSWYgaXQgaXMgYXNzaWduZWQgdG8gYW9iLCB0aGVuCisgICAgIGFjdGl2ZV9vdXRib3VuZF9pdGVtX3Jlc2V0KCkgd2lsbCBkZWxldGUgaXQuICBPdGhlcndpc2UsCisgICAgIG5naHR0cDJfc3RyZWFtX2Nsb3NlKCkgb3Igc2Vzc2lvbl9kZWwoKSB3aWxsIGRlbGV0ZSBpdC4gKi8KK30KKwordm9pZCBuZ2h0dHAyX3N0cmVhbV9zaHV0ZG93bihuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBuZ2h0dHAyX3NodXRfZmxhZyBmbGFnKSB7CisgIHN0cmVhbS0+c2h1dF9mbGFncyA9ICh1aW50OF90KShzdHJlYW0tPnNodXRfZmxhZ3MgfCBmbGFnKTsKK30KKworLyoKKyAqIFJldHVybnMgbm9uemVybyBpZiB8c3RyZWFtfCBpcyBhY3RpdmUuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UKKyAqIGludG8gYWNjb3VudCBpdHMgZGVzY2VuZGFudHMuCisgKi8KK3N0YXRpYyBpbnQgc3RyZWFtX2FjdGl2ZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHJldHVybiBzdHJlYW0tPml0ZW0gJiYKKyAgICAgICAgIChzdHJlYW0tPmZsYWdzICYgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9BTEwpID09IDA7Cit9CisKKy8qCisgKiBSZXR1cm5zIG5vbnplcm8gaWYgfHN0cmVhbXwgb3Igb25lIG9mIGl0cyBkZXNjZW5kYW50cyBpcyBhY3RpdmUKKyAqLworc3RhdGljIGludCBzdHJlYW1fc3VidHJlZV9hY3RpdmUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtX2FjdGl2ZShzdHJlYW0pIHx8ICFuZ2h0dHAyX3BxX2VtcHR5KCZzdHJlYW0tPm9icSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIG5leHQgY3ljbGUgZm9yIHxzdHJlYW18LgorICovCitzdGF0aWMgdm9pZCBzdHJlYW1fbmV4dF9jeWNsZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCB1aW50NjRfdCBsYXN0X2N5Y2xlKSB7CisgIHVpbnQ2NF90IHBlbmFsdHk7CisKKyAgcGVuYWx0eSA9ICh1aW50NjRfdClzdHJlYW0tPmxhc3Rfd3JpdGVsZW4gKiBOR0hUVFAyX01BWF9XRUlHSFQgKworICAgICAgICAgICAgc3RyZWFtLT5wZW5kaW5nX3BlbmFsdHk7CisKKyAgc3RyZWFtLT5jeWNsZSA9IGxhc3RfY3ljbGUgKyBwZW5hbHR5IC8gKHVpbnQzMl90KXN0cmVhbS0+d2VpZ2h0OworICBzdHJlYW0tPnBlbmRpbmdfcGVuYWx0eSA9ICh1aW50MzJfdCkocGVuYWx0eSAlICh1aW50MzJfdClzdHJlYW0tPndlaWdodCk7Cit9CisKK3N0YXRpYyBpbnQgc3RyZWFtX29icV9wdXNoKG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtLCBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGludCBydjsKKworICBmb3IgKDsgZGVwX3N0cmVhbSAmJiAhc3RyZWFtLT5xdWV1ZWQ7CisgICAgICAgc3RyZWFtID0gZGVwX3N0cmVhbSwgZGVwX3N0cmVhbSA9IGRlcF9zdHJlYW0tPmRlcF9wcmV2KSB7CisgICAgc3RyZWFtX25leHRfY3ljbGUoc3RyZWFtLCBkZXBfc3RyZWFtLT5kZXNjZW5kYW50X2xhc3RfY3ljbGUpOworICAgIHN0cmVhbS0+c2VxID0gZGVwX3N0cmVhbS0+ZGVzY2VuZGFudF9uZXh0X3NlcSsrOworCisgICAgREVCVUdGKCJzdHJlYW06IHN0cmVhbT0lZCBvYnEgcHVzaCBjeWNsZT0lbHVcbiIsIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICBzdHJlYW0tPmN5Y2xlKTsKKworICAgIERFQlVHRigic3RyZWFtOiBwdXNoIHN0cmVhbSAlZCB0byBzdHJlYW0gJWRcbiIsIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICBkZXBfc3RyZWFtLT5zdHJlYW1faWQpOworCisgICAgcnYgPSBuZ2h0dHAyX3BxX3B1c2goJmRlcF9zdHJlYW0tPm9icSwgJnN0cmVhbS0+cHFfZW50cnkpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICAgIHN0cmVhbS0+cXVldWVkID0gMTsKKyAgfQorCisgIHJldHVybiAwOworfQorCisvKgorICogUmVtb3ZlcyB8c3RyZWFtfCBmcm9tIHBhcmVudCdzIG9icS4gIElmIHJlbW92YWwgb2YgfHN0cmVhbXwgbWFrZXMKKyAqIHBhcmVudCdzIG9icSBlbXB0eSwgYW5kIHBhcmVudCBpcyBub3QgYWN0aXZlLCB0aGVuIHBhcmVudCBpcyBhbHNvCisgKiByZW1vdmVkLiAgVGhpcyBwcm9jZXNzIGlzIHJlcGVhdGVkIHJlY3Vyc2l2ZWx5LgorICovCitzdGF0aWMgdm9pZCBzdHJlYW1fb2JxX3JlbW92ZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtOworCisgIGRlcF9zdHJlYW0gPSBzdHJlYW0tPmRlcF9wcmV2OworCisgIGlmICghc3RyZWFtLT5xdWV1ZWQpIHsKKyAgICByZXR1cm47CisgIH0KKworICBmb3IgKDsgZGVwX3N0cmVhbTsgc3RyZWFtID0gZGVwX3N0cmVhbSwgZGVwX3N0cmVhbSA9IGRlcF9zdHJlYW0tPmRlcF9wcmV2KSB7CisgICAgREVCVUdGKCJzdHJlYW06IHJlbW92ZSBzdHJlYW0gJWQgZnJvbSBzdHJlYW0gJWRcbiIsIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgICBkZXBfc3RyZWFtLT5zdHJlYW1faWQpOworCisgICAgbmdodHRwMl9wcV9yZW1vdmUoJmRlcF9zdHJlYW0tPm9icSwgJnN0cmVhbS0+cHFfZW50cnkpOworCisgICAgYXNzZXJ0KHN0cmVhbS0+cXVldWVkKTsKKworICAgIHN0cmVhbS0+cXVldWVkID0gMDsKKyAgICBzdHJlYW0tPmN5Y2xlID0gMDsKKyAgICBzdHJlYW0tPnBlbmRpbmdfcGVuYWx0eSA9IDA7CisgICAgc3RyZWFtLT5kZXNjZW5kYW50X2xhc3RfY3ljbGUgPSAwOworICAgIHN0cmVhbS0+bGFzdF93cml0ZWxlbiA9IDA7CisKKyAgICBpZiAoc3RyZWFtX3N1YnRyZWVfYWN0aXZlKGRlcF9zdHJlYW0pKSB7CisgICAgICByZXR1cm47CisgICAgfQorICB9Cit9CisKKy8qCisgKiBNb3ZlcyB8c3RyZWFtfCBmcm9tIHxzcmN8J3Mgb2JxIHRvIHxkZXN0fCdzIG9icS4gIFJlbW92YWwgZnJvbQorICogfHNyY3wncyBvYnEgaXMganVzdCBkb25lIGNhbGxpbmcgbmdodHRwMl9wcV9yZW1vdmUoKSwgc28gaXQgZG9lcworICogbm90IHJlY3Vyc2l2ZWx5IHJlbW92ZSB8c3JjfCBhbmQgYW5jZXN0b3JzLCBsaWtlCisgKiBzdHJlYW1fb2JxX3JlbW92ZSgpLgorICovCitzdGF0aWMgaW50IHN0cmVhbV9vYnFfbW92ZShuZ2h0dHAyX3N0cmVhbSAqZGVzdCwgbmdodHRwMl9zdHJlYW0gKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaWYgKCFzdHJlYW0tPnF1ZXVlZCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgREVCVUdGKCJzdHJlYW06IHJlbW92ZSBzdHJlYW0gJWQgZnJvbSBzdHJlYW0gJWQgKG1vdmUpXG4iLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgIHNyYy0+c3RyZWFtX2lkKTsKKworICBuZ2h0dHAyX3BxX3JlbW92ZSgmc3JjLT5vYnEsICZzdHJlYW0tPnBxX2VudHJ5KTsKKyAgc3RyZWFtLT5xdWV1ZWQgPSAwOworCisgIHJldHVybiBzdHJlYW1fb2JxX3B1c2goZGVzdCwgc3RyZWFtKTsKK30KKwordm9pZCBuZ2h0dHAyX3N0cmVhbV9yZXNjaGVkdWxlKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW07CisKKyAgYXNzZXJ0KHN0cmVhbS0+cXVldWVkKTsKKworICBkZXBfc3RyZWFtID0gc3RyZWFtLT5kZXBfcHJldjsKKworICBmb3IgKDsgZGVwX3N0cmVhbTsgc3RyZWFtID0gZGVwX3N0cmVhbSwgZGVwX3N0cmVhbSA9IGRlcF9zdHJlYW0tPmRlcF9wcmV2KSB7CisgICAgbmdodHRwMl9wcV9yZW1vdmUoJmRlcF9zdHJlYW0tPm9icSwgJnN0cmVhbS0+cHFfZW50cnkpOworCisgICAgc3RyZWFtX25leHRfY3ljbGUoc3RyZWFtLCBkZXBfc3RyZWFtLT5kZXNjZW5kYW50X2xhc3RfY3ljbGUpOworICAgIHN0cmVhbS0+c2VxID0gZGVwX3N0cmVhbS0+ZGVzY2VuZGFudF9uZXh0X3NlcSsrOworCisgICAgbmdodHRwMl9wcV9wdXNoKCZkZXBfc3RyZWFtLT5vYnEsICZzdHJlYW0tPnBxX2VudHJ5KTsKKworICAgIERFQlVHRigic3RyZWFtOiBzdHJlYW09JWQgb2JxIHJlc2NoZWQgY3ljbGU9JWx1XG4iLCBzdHJlYW0tPnN0cmVhbV9pZCwKKyAgICAgICAgICAgc3RyZWFtLT5jeWNsZSk7CisKKyAgICBkZXBfc3RyZWFtLT5sYXN0X3dyaXRlbGVuID0gc3RyZWFtLT5sYXN0X3dyaXRlbGVuOworICB9Cit9CisKK3ZvaWQgbmdodHRwMl9zdHJlYW1fY2hhbmdlX3dlaWdodChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBpbnQzMl90IHdlaWdodCkgeworICBuZ2h0dHAyX3N0cmVhbSAqZGVwX3N0cmVhbTsKKyAgdWludDY0X3QgbGFzdF9jeWNsZTsKKyAgaW50MzJfdCBvbGRfd2VpZ2h0OworICB1aW50NjRfdCB3bGVuX3BlbmFsdHk7CisKKyAgaWYgKHN0cmVhbS0+d2VpZ2h0ID09IHdlaWdodCkgeworICAgIHJldHVybjsKKyAgfQorCisgIG9sZF93ZWlnaHQgPSBzdHJlYW0tPndlaWdodDsKKyAgc3RyZWFtLT53ZWlnaHQgPSB3ZWlnaHQ7CisKKyAgZGVwX3N0cmVhbSA9IHN0cmVhbS0+ZGVwX3ByZXY7CisKKyAgaWYgKCFkZXBfc3RyZWFtKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgZGVwX3N0cmVhbS0+c3VtX2RlcF93ZWlnaHQgKz0gd2VpZ2h0IC0gb2xkX3dlaWdodDsKKworICBpZiAoIXN0cmVhbS0+cXVldWVkKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgbmdodHRwMl9wcV9yZW1vdmUoJmRlcF9zdHJlYW0tPm9icSwgJnN0cmVhbS0+cHFfZW50cnkpOworCisgIHdsZW5fcGVuYWx0eSA9ICh1aW50NjRfdClzdHJlYW0tPmxhc3Rfd3JpdGVsZW4gKiBOR0hUVFAyX01BWF9XRUlHSFQ7CisKKyAgLyogQ29tcHV0ZSBvbGQgc3RyZWFtLT5wZW5kaW5nX3BlbmFsdHkgd2UgdXNlZCB0byBjYWxjdWxhdGUKKyAgICAgc3RyZWFtLT5jeWNsZSAqLworICBzdHJlYW0tPnBlbmRpbmdfcGVuYWx0eSA9CisgICAgICAodWludDMyX3QpKChzdHJlYW0tPnBlbmRpbmdfcGVuYWx0eSArICh1aW50MzJfdClvbGRfd2VpZ2h0IC0KKyAgICAgICAgICAgICAgICAgICh3bGVuX3BlbmFsdHkgJSAodWludDMyX3Qpb2xkX3dlaWdodCkpICUKKyAgICAgICAgICAgICAgICAgKHVpbnQzMl90KW9sZF93ZWlnaHQpOworCisgIGxhc3RfY3ljbGUgPSBzdHJlYW0tPmN5Y2xlIC0KKyAgICAgICAgICAgICAgICh3bGVuX3BlbmFsdHkgKyBzdHJlYW0tPnBlbmRpbmdfcGVuYWx0eSkgLyAodWludDMyX3Qpb2xkX3dlaWdodDsKKworICAvKiBOb3cgd2UgaGF2ZSBvbGQgc3RyZWFtLT5wZW5kaW5nX3BlbmFsdHkgYW5kIG5ldyBzdHJlYW0tPndlaWdodCBpbgorICAgICBwbGFjZSAqLworICBzdHJlYW1fbmV4dF9jeWNsZShzdHJlYW0sIGxhc3RfY3ljbGUpOworCisgIGlmIChkZXBfc3RyZWFtLT5kZXNjZW5kYW50X2xhc3RfY3ljbGUgLSBzdHJlYW0tPmN5Y2xlIDw9CisgICAgICBOR0hUVFAyX01BWF9DWUNMRV9ESVNUQU5DRSkgeworICAgIHN0cmVhbS0+Y3ljbGUgPSBkZXBfc3RyZWFtLT5kZXNjZW5kYW50X2xhc3RfY3ljbGU7CisgIH0KKworICAvKiBDb250aW51ZSB0byB1c2Ugc2FtZSBzdHJlYW0tPnNlcSAqLworCisgIG5naHR0cDJfcHFfcHVzaCgmZGVwX3N0cmVhbS0+b2JxLCAmc3RyZWFtLT5wcV9lbnRyeSk7CisKKyAgREVCVUdGKCJzdHJlYW06IHN0cmVhbT0lZCBvYnEgcmVzY2hlZCBjeWNsZT0lbHVcbiIsIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgc3RyZWFtLT5jeWNsZSk7Cit9CisKK3N0YXRpYyBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtX2xhc3Rfc2liKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgZm9yICg7IHN0cmVhbS0+c2liX25leHQ7IHN0cmVhbSA9IHN0cmVhbS0+c2liX25leHQpCisgICAgOworCisgIHJldHVybiBzdHJlYW07Cit9CisKK2ludDMyX3QgbmdodHRwMl9zdHJlYW1fZGVwX2Rpc3RyaWJ1dGVkX3dlaWdodChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgd2VpZ2h0KSB7CisgIHdlaWdodCA9IHN0cmVhbS0+d2VpZ2h0ICogd2VpZ2h0IC8gc3RyZWFtLT5zdW1fZGVwX3dlaWdodDsKKworICByZXR1cm4gbmdodHRwMl9tYXgoMSwgd2VpZ2h0KTsKK30KKworI2lmZGVmIFNUUkVBTV9ERVBfREVCVUcKKworc3RhdGljIHZvaWQgZW5zdXJlX2luYWN0aXZlKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnNpOworCisgIGlmIChzdHJlYW0tPnF1ZXVlZCkgeworICAgIGZwcmludGYoc3RkZXJyLCAic3RyZWFtKCVwKT0lZCwgc3RyZWFtLT5xdWV1ZWQgPSAxOyB3YW50IDBcbiIsIHN0cmVhbSwKKyAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtX2lkKTsKKyAgICBhc3NlcnQoMCk7CisgIH0KKworICBpZiAoc3RyZWFtX2FjdGl2ZShzdHJlYW0pKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJzdHJlYW0oJXApPSVkLCBzdHJlYW1fYWN0aXZlKHN0cmVhbSkgPSAxOyB3YW50IDBcbiIsCisgICAgICAgICAgICBzdHJlYW0sIHN0cmVhbS0+c3RyZWFtX2lkKTsKKyAgICBhc3NlcnQoMCk7CisgIH0KKworICBpZiAoIW5naHR0cDJfcHFfZW1wdHkoJnN0cmVhbS0+b2JxKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAic3RyZWFtKCVwKT0lZCwgbmdodHRwMl9wcV9zaXplKCkgPSAlenU7IHdhbnQgMFxuIiwgc3RyZWFtLAorICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIG5naHR0cDJfcHFfc2l6ZSgmc3RyZWFtLT5vYnEpKTsKKyAgICBhc3NlcnQoMCk7CisgIH0KKworICBmb3IgKHNpID0gc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgZW5zdXJlX2luYWN0aXZlKHNpKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19xdWV1ZWQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3N0cmVhbSAqc2k7CisgIGludCBxdWV1ZWQ7CisKKyAgaWYgKHN0cmVhbS0+cXVldWVkKSB7CisgICAgaWYgKCFzdHJlYW1fc3VidHJlZV9hY3RpdmUoc3RyZWFtKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICJzdHJlYW0oJXApPSVkLCBzdHJlYW0tPnF1ZXVlZCA9PSAxLCBidXQgIgorICAgICAgICAgICAgICAic3RyZWFtX2FjdGl2ZSgpID09ICVkIGFuZCBuZ2h0dHAyX3BxX3NpemUoJnN0cmVhbS0+b2JxKSA9ICV6dVxuIiwKKyAgICAgICAgICAgICAgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtX2FjdGl2ZShzdHJlYW0pLAorICAgICAgICAgICAgICBuZ2h0dHAyX3BxX3NpemUoJnN0cmVhbS0+b2JxKSk7CisgICAgICBhc3NlcnQoMCk7CisgICAgfQorICAgIGlmICghc3RyZWFtX2FjdGl2ZShzdHJlYW0pKSB7CisgICAgICBxdWV1ZWQgPSAwOworICAgICAgZm9yIChzaSA9IHN0cmVhbS0+ZGVwX25leHQ7IHNpOyBzaSA9IHNpLT5zaWJfbmV4dCkgeworICAgICAgICBpZiAoc2ktPnF1ZXVlZCkgeworICAgICAgICAgICsrcXVldWVkOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAocXVldWVkID09IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgInN0cmVhbSglcCk9JWQsIHN0cmVhbS0+cXVldWVkID09IDEsIGFuZCAiCisgICAgICAgICAgICAgICAgIiFzdHJlYW1fYWN0aXZlKCksIGJ1dCBubyBkZXNjZW5kYW50cyBpcyBxdWV1ZWRcbiIsCisgICAgICAgICAgICAgICAgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisgICAgICAgIGFzc2VydCgwKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHNpID0gc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgICBjaGVja19xdWV1ZWQoc2kpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoc3RyZWFtX2FjdGl2ZShzdHJlYW0pIHx8ICFuZ2h0dHAyX3BxX2VtcHR5KCZzdHJlYW0tPm9icSkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAic3RyZWFtKCVwKSA9ICVkLCBzdHJlYW0tPnF1ZXVlZCA9PSAwLCBidXQgIgorICAgICAgICAgICAgICAic3RyZWFtX2FjdGl2ZShzdHJlYW0pID09ICVkIGFuZCAiCisgICAgICAgICAgICAgICJuZ2h0dHAyX3BxX3NpemUoJnN0cmVhbS0+b2JxKSA9ICV6dVxuIiwKKyAgICAgICAgICAgICAgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtX2FjdGl2ZShzdHJlYW0pLAorICAgICAgICAgICAgICBuZ2h0dHAyX3BxX3NpemUoJnN0cmVhbS0+b2JxKSk7CisgICAgICBhc3NlcnQoMCk7CisgICAgfQorICAgIGZvciAoc2kgPSBzdHJlYW0tPmRlcF9uZXh0OyBzaTsgc2kgPSBzaS0+c2liX25leHQpIHsKKyAgICAgIGVuc3VyZV9pbmFjdGl2ZShzaSk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3N1bV9kZXAobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3N0cmVhbSAqc2k7CisgIGludDMyX3QgbiA9IDA7CisgIGZvciAoc2kgPSBzdHJlYW0tPmRlcF9uZXh0OyBzaTsgc2kgPSBzaS0+c2liX25leHQpIHsKKyAgICBuICs9IHNpLT53ZWlnaHQ7CisgIH0KKyAgaWYgKG4gIT0gc3RyZWFtLT5zdW1fZGVwX3dlaWdodCkgeworICAgIGZwcmludGYoc3RkZXJyLCAic3RyZWFtKCVwKT0lZCwgc3VtX2RlcF93ZWlnaHQgPSAlZDsgd2FudCAlZFxuIiwgc3RyZWFtLAorICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW1faWQsIG4sIHN0cmVhbS0+c3VtX2RlcF93ZWlnaHQpOworICAgIGFzc2VydCgwKTsKKyAgfQorICBmb3IgKHNpID0gc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgY2hlY2tfc3VtX2RlcChzaSk7CisgIH0KK30KKworc3RhdGljIHZvaWQgY2hlY2tfZGVwX3ByZXYobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3N0cmVhbSAqc2k7CisgIGZvciAoc2kgPSBzdHJlYW0tPmRlcF9uZXh0OyBzaTsgc2kgPSBzaS0+c2liX25leHQpIHsKKyAgICBpZiAoc2ktPmRlcF9wcmV2ICE9IHN0cmVhbSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJzaS0+ZGVwX3ByZXYgPSAlcDsgd2FudCAlcFxuIiwgc2ktPmRlcF9wcmV2LCBzdHJlYW0pOworICAgICAgYXNzZXJ0KDApOworICAgIH0KKyAgICBjaGVja19kZXBfcHJldihzaSk7CisgIH0KK30KKworI2VuZGlmIC8qIFNUUkVBTV9ERVBfREVCVUcgKi8KKworI2lmZGVmIFNUUkVBTV9ERVBfREVCVUcKK3N0YXRpYyB2b2lkIHZhbGlkYXRlX3RyZWUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3N0cmVhbSAqc2k7CisKKyAgaWYgKCFzdHJlYW0pIHsKKyAgICByZXR1cm47CisgIH0KKworICBmb3IgKDsgc3RyZWFtLT5kZXBfcHJldjsgc3RyZWFtID0gc3RyZWFtLT5kZXBfcHJldikKKyAgICA7CisKKyAgYXNzZXJ0KHN0cmVhbS0+c3RyZWFtX2lkID09IDApOworICBhc3NlcnQoIXN0cmVhbS0+cXVldWVkKTsKKworICBmcHJpbnRmKHN0ZGVyciwgImNoZWNraW5nLi4uXG4iKTsKKyAgaWYgKG5naHR0cDJfcHFfZW1wdHkoJnN0cmVhbS0+b2JxKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAicm9vdCBvYnEgZW1wdHlcbiIpOworICAgIGZvciAoc2kgPSBzdHJlYW0tPmRlcF9uZXh0OyBzaTsgc2kgPSBzaS0+c2liX25leHQpIHsKKyAgICAgIGVuc3VyZV9pbmFjdGl2ZShzaSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoc2kgPSBzdHJlYW0tPmRlcF9uZXh0OyBzaTsgc2kgPSBzaS0+c2liX25leHQpIHsKKyAgICAgIGNoZWNrX3F1ZXVlZChzaSk7CisgICAgfQorICB9CisKKyAgY2hlY2tfc3VtX2RlcChzdHJlYW0pOworICBjaGVja19kZXBfcHJldihzdHJlYW0pOworfQorI2Vsc2UgIC8qICFTVFJFQU1fREVQX0RFQlVHICovCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV90cmVlKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsgKHZvaWQpc3RyZWFtOyB9CisjZW5kaWYgLyogIVNUUkVBTV9ERVBfREVCVUcqLworCitzdGF0aWMgaW50IHN0cmVhbV91cGRhdGVfZGVwX29uX2F0dGFjaF9pdGVtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaW50IHJ2OworCisgIHJ2ID0gc3RyZWFtX29icV9wdXNoKHN0cmVhbS0+ZGVwX3ByZXYsIHN0cmVhbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgdmFsaWRhdGVfdHJlZShzdHJlYW0pOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHJlYW1fdXBkYXRlX2RlcF9vbl9kZXRhY2hfaXRlbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGlmIChuZ2h0dHAyX3BxX2VtcHR5KCZzdHJlYW0tPm9icSkpIHsKKyAgICBzdHJlYW1fb2JxX3JlbW92ZShzdHJlYW0pOworICB9CisKKyAgdmFsaWRhdGVfdHJlZShzdHJlYW0pOworCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1fYXR0YWNoX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW0pIHsKKyAgaW50IHJ2OworCisgIGFzc2VydCgoc3RyZWFtLT5mbGFncyAmIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfQUxMKSA9PSAwKTsKKyAgYXNzZXJ0KHN0cmVhbS0+aXRlbSA9PSBOVUxMKTsKKworICBERUJVR0YoInN0cmVhbTogc3RyZWFtPSVkIGF0dGFjaCBpdGVtPSVwXG4iLCBzdHJlYW0tPnN0cmVhbV9pZCwgaXRlbSk7CisKKyAgc3RyZWFtLT5pdGVtID0gaXRlbTsKKworICBydiA9IHN0cmVhbV91cGRhdGVfZGVwX29uX2F0dGFjaF9pdGVtKHN0cmVhbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgLyogVGhpcyBtYXkgcmVsYXZlIHN0cmVhbS0+cXVldWVkID09IDEsIGJ1dCBzdHJlYW0tPml0ZW0gPT0gTlVMTC4KKyAgICAgICBCdXQgb25seSBjb25zZXF1ZW5jZSBvZiB0aGlzIGVycm9yIGlzIGZhdGFsIG9uZSwgYW5kIHNlc3Npb24KKyAgICAgICBkZXN0cnVjdGlvbi4gIEluIHRoYXQgZXhlY3V0aW9uIHBhdGgsIHRoZXNlIGluY29uc2lzdGVuY3kgZG9lcworICAgICAgIG5vdCBtYXR0ZXIuICovCisgICAgc3RyZWFtLT5pdGVtID0gTlVMTDsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc3RyZWFtX2RldGFjaF9pdGVtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgREVCVUdGKCJzdHJlYW06IHN0cmVhbT0lZCBkZXRhY2ggaXRlbT0lcFxuIiwgc3RyZWFtLT5zdHJlYW1faWQsIHN0cmVhbS0+aXRlbSk7CisKKyAgc3RyZWFtLT5pdGVtID0gTlVMTDsKKyAgc3RyZWFtLT5mbGFncyA9ICh1aW50OF90KShzdHJlYW0tPmZsYWdzICYgfk5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfQUxMKTsKKworICByZXR1cm4gc3RyZWFtX3VwZGF0ZV9kZXBfb25fZGV0YWNoX2l0ZW0oc3RyZWFtKTsKK30KKworaW50IG5naHR0cDJfc3RyZWFtX2RlZmVyX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgdWludDhfdCBmbGFncykgeworICBhc3NlcnQoc3RyZWFtLT5pdGVtKTsKKworICBERUJVR0YoInN0cmVhbTogc3RyZWFtPSVkIGRlZmVyIGl0ZW09JXAgY2F1c2U9JTAyeFxuIiwgc3RyZWFtLT5zdHJlYW1faWQsCisgICAgICAgICBzdHJlYW0tPml0ZW0sIGZsYWdzKTsKKworICBzdHJlYW0tPmZsYWdzIHw9IGZsYWdzOworCisgIHJldHVybiBzdHJlYW1fdXBkYXRlX2RlcF9vbl9kZXRhY2hfaXRlbShzdHJlYW0pOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1fcmVzdW1lX2RlZmVycmVkX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgdWludDhfdCBmbGFncykgeworICBhc3NlcnQoc3RyZWFtLT5pdGVtKTsKKworICBERUJVR0YoInN0cmVhbTogc3RyZWFtPSVkIHJlc3VtZSBpdGVtPSVwIGZsYWdzPSUwMnhcbiIsIHN0cmVhbS0+c3RyZWFtX2lkLAorICAgICAgICAgc3RyZWFtLT5pdGVtLCBmbGFncyk7CisKKyAgc3RyZWFtLT5mbGFncyA9ICh1aW50OF90KShzdHJlYW0tPmZsYWdzICYgfmZsYWdzKTsKKworICBpZiAoc3RyZWFtLT5mbGFncyAmIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfQUxMKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gc3RyZWFtX3VwZGF0ZV9kZXBfb25fYXR0YWNoX2l0ZW0oc3RyZWFtKTsKK30KKworaW50IG5naHR0cDJfc3RyZWFtX2NoZWNrX2RlZmVycmVkX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtLT5pdGVtICYmIChzdHJlYW0tPmZsYWdzICYgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9BTEwpOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1fY2hlY2tfZGVmZXJyZWRfYnlfZmxvd19jb250cm9sKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+aXRlbSAmJgorICAgICAgICAgKHN0cmVhbS0+ZmxhZ3MgJiBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX0ZMT1dfQ09OVFJPTCk7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2luaXRpYWxfd2luZG93X3NpemUoaW50MzJfdCAqd2luZG93X3NpemVfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG5ld19pbml0aWFsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG9sZF9pbml0aWFsX3dpbmRvd19zaXplKSB7CisgIGludDY0X3QgbmV3X3dpbmRvd19zaXplID0gKGludDY0X3QpKCp3aW5kb3dfc2l6ZV9wdHIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSAtIG9sZF9pbml0aWFsX3dpbmRvd19zaXplOworICBpZiAoSU5UMzJfTUlOID4gbmV3X3dpbmRvd19zaXplIHx8CisgICAgICBuZXdfd2luZG93X3NpemUgPiBOR0hUVFAyX01BWF9XSU5ET1dfU0laRSkgeworICAgIHJldHVybiAtMTsKKyAgfQorICAqd2luZG93X3NpemVfcHRyID0gKGludDMyX3QpbmV3X3dpbmRvd19zaXplOworICByZXR1cm4gMDsKK30KKworaW50IG5naHR0cDJfc3RyZWFtX3VwZGF0ZV9yZW1vdGVfaW5pdGlhbF93aW5kb3dfc2l6ZSgKKyAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBpbnQzMl90IG5ld19pbml0aWFsX3dpbmRvd19zaXplLAorICAgIGludDMyX3Qgb2xkX2luaXRpYWxfd2luZG93X3NpemUpIHsKKyAgcmV0dXJuIHVwZGF0ZV9pbml0aWFsX3dpbmRvd19zaXplKCZzdHJlYW0tPnJlbW90ZV93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19pbml0aWFsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2luaXRpYWxfd2luZG93X3NpemUpOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1fdXBkYXRlX2xvY2FsX2luaXRpYWxfd2luZG93X3NpemUoCisgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgaW50MzJfdCBuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICBpbnQzMl90IG9sZF9pbml0aWFsX3dpbmRvd19zaXplKSB7CisgIHJldHVybiB1cGRhdGVfaW5pdGlhbF93aW5kb3dfc2l6ZSgmc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19pbml0aWFsX3dpbmRvd19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2luaXRpYWxfd2luZG93X3NpemUpOworfQorCit2b2lkIG5naHR0cDJfc3RyZWFtX3Byb21pc2VfZnVsZmlsbGVkKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgc3RyZWFtLT5zdGF0ZSA9IE5HSFRUUDJfU1RSRUFNX09QRU5FRDsKKyAgc3RyZWFtLT5mbGFncyA9ICh1aW50OF90KShzdHJlYW0tPmZsYWdzICYgfk5HSFRUUDJfU1RSRUFNX0ZMQUdfUFVTSCk7Cit9CisKK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXBfZmluZF9hbmNlc3RvcihuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICp0YXJnZXQpIHsKKyAgZm9yICg7IHN0cmVhbTsgc3RyZWFtID0gc3RyZWFtLT5kZXBfcHJldikgeworICAgIGlmIChzdHJlYW0gPT0gdGFyZ2V0KSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXBfaW5zZXJ0KG5naHR0cDJfc3RyZWFtICpkZXBfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3N0cmVhbSAqc2k7CisgIGludCBydjsKKworICBERUJVR0YoInN0cmVhbTogZGVwX2luc2VydCBkZXBfc3RyZWFtKCVwKT0lZCwgc3RyZWFtKCVwKT0lZFxuIiwgZGVwX3N0cmVhbSwKKyAgICAgICAgIGRlcF9zdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisKKyAgc3RyZWFtLT5zdW1fZGVwX3dlaWdodCA9IGRlcF9zdHJlYW0tPnN1bV9kZXBfd2VpZ2h0OworICBkZXBfc3RyZWFtLT5zdW1fZGVwX3dlaWdodCA9IHN0cmVhbS0+d2VpZ2h0OworCisgIGlmIChkZXBfc3RyZWFtLT5kZXBfbmV4dCkgeworICAgIGZvciAoc2kgPSBkZXBfc3RyZWFtLT5kZXBfbmV4dDsgc2k7IHNpID0gc2ktPnNpYl9uZXh0KSB7CisgICAgICBzaS0+ZGVwX3ByZXYgPSBzdHJlYW07CisgICAgICBpZiAoc2ktPnF1ZXVlZCkgeworICAgICAgICBydiA9IHN0cmVhbV9vYnFfbW92ZShzdHJlYW0sIGRlcF9zdHJlYW0sIHNpKTsKKyAgICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RyZWFtX3N1YnRyZWVfYWN0aXZlKHN0cmVhbSkpIHsKKyAgICAgIHJ2ID0gc3RyZWFtX29icV9wdXNoKGRlcF9zdHJlYW0sIHN0cmVhbSk7CisgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICByZXR1cm4gcnY7CisgICAgICB9CisgICAgfQorCisgICAgc3RyZWFtLT5kZXBfbmV4dCA9IGRlcF9zdHJlYW0tPmRlcF9uZXh0OworICB9CisKKyAgZGVwX3N0cmVhbS0+ZGVwX25leHQgPSBzdHJlYW07CisgIHN0cmVhbS0+ZGVwX3ByZXYgPSBkZXBfc3RyZWFtOworCisgIHZhbGlkYXRlX3RyZWUoc3RyZWFtKTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X2RlcF9wcmV2KG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIG5naHR0cDJfc3RyZWFtICpkZXApIHsKKyAgZm9yICg7IHN0cmVhbTsgc3RyZWFtID0gc3RyZWFtLT5zaWJfbmV4dCkgeworICAgIHN0cmVhbS0+ZGVwX3ByZXYgPSBkZXA7CisgIH0KK30KKworc3RhdGljIHZvaWQgbGlua19kZXAobmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0sIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgZGVwX3N0cmVhbS0+ZGVwX25leHQgPSBzdHJlYW07CisgIGlmIChzdHJlYW0pIHsKKyAgICBzdHJlYW0tPmRlcF9wcmV2ID0gZGVwX3N0cmVhbTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBsaW5rX3NpYihuZ2h0dHAyX3N0cmVhbSAqYSwgbmdodHRwMl9zdHJlYW0gKmIpIHsKKyAgYS0+c2liX25leHQgPSBiOworICBpZiAoYikgeworICAgIGItPnNpYl9wcmV2ID0gYTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfbGlua19kZXAobmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBuZ2h0dHAyX3N0cmVhbSAqc2liX25leHQ7CisKKyAgYXNzZXJ0KHN0cmVhbS0+c2liX3ByZXYgPT0gTlVMTCk7CisKKyAgc2liX25leHQgPSBkZXBfc3RyZWFtLT5kZXBfbmV4dDsKKworICBsaW5rX3NpYihzdHJlYW0sIHNpYl9uZXh0KTsKKworICBsaW5rX2RlcChkZXBfc3RyZWFtLCBzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCB1bmxpbmtfc2liKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnByZXYsICpuZXh0LCAqZGVwX25leHQ7CisKKyAgcHJldiA9IHN0cmVhbS0+c2liX3ByZXY7CisgIGRlcF9uZXh0ID0gc3RyZWFtLT5kZXBfbmV4dDsKKworICBhc3NlcnQocHJldik7CisKKyAgaWYgKGRlcF9uZXh0KSB7CisgICAgLyoKKyAgICAgKiAgcHJldi0tc3RyZWFtKC0tc2liX25leHQtLS4uLikKKyAgICAgKiAgICAgICAgIHwKKyAgICAgKiAgICAgICAgZGVwX25leHQKKyAgICAgKi8KKworICAgIGxpbmtfc2liKHByZXYsIGRlcF9uZXh0KTsKKworICAgIHNldF9kZXBfcHJldihkZXBfbmV4dCwgc3RyZWFtLT5kZXBfcHJldik7CisKKyAgICBpZiAoc3RyZWFtLT5zaWJfbmV4dCkgeworICAgICAgbGlua19zaWIoc3RyZWFtX2xhc3Rfc2liKGRlcF9uZXh0KSwgc3RyZWFtLT5zaWJfbmV4dCk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qCisgICAgICogIHByZXYtLXN0cmVhbSgtLXNpYl9uZXh0LS0uLi4pCisgICAgICovCisgICAgbmV4dCA9IHN0cmVhbS0+c2liX25leHQ7CisKKyAgICBwcmV2LT5zaWJfbmV4dCA9IG5leHQ7CisKKyAgICBpZiAobmV4dCkgeworICAgICAgbmV4dC0+c2liX3ByZXYgPSBwcmV2OworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZCB1bmxpbmtfZGVwKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKnByZXYsICpuZXh0LCAqZGVwX25leHQ7CisKKyAgcHJldiA9IHN0cmVhbS0+ZGVwX3ByZXY7CisgIGRlcF9uZXh0ID0gc3RyZWFtLT5kZXBfbmV4dDsKKworICBhc3NlcnQocHJldik7CisKKyAgaWYgKGRlcF9uZXh0KSB7CisgICAgLyoKKyAgICAgKiBwcmV2CisgICAgICogICB8CisgICAgICogc3RyZWFtKC0tc2liX25leHQtLS4uLikKKyAgICAgKiAgIHwKKyAgICAgKiBkZXBfbmV4dAorICAgICAqLworICAgIGxpbmtfZGVwKHByZXYsIGRlcF9uZXh0KTsKKworICAgIHNldF9kZXBfcHJldihkZXBfbmV4dCwgc3RyZWFtLT5kZXBfcHJldik7CisKKyAgICBpZiAoc3RyZWFtLT5zaWJfbmV4dCkgeworICAgICAgbGlua19zaWIoc3RyZWFtX2xhc3Rfc2liKGRlcF9uZXh0KSwgc3RyZWFtLT5zaWJfbmV4dCk7CisgICAgfQorCisgIH0gZWxzZSBpZiAoc3RyZWFtLT5zaWJfbmV4dCkgeworICAgIC8qCisgICAgICogcHJldgorICAgICAqICAgfAorICAgICAqIHN0cmVhbS0tc2liX25leHQKKyAgICAgKi8KKyAgICBuZXh0ID0gc3RyZWFtLT5zaWJfbmV4dDsKKworICAgIG5leHQtPnNpYl9wcmV2ID0gTlVMTDsKKworICAgIGxpbmtfZGVwKHByZXYsIG5leHQpOworICB9IGVsc2UgeworICAgIHByZXYtPmRlcF9uZXh0ID0gTlVMTDsKKyAgfQorfQorCit2b2lkIG5naHR0cDJfc3RyZWFtX2RlcF9hZGQobmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICBERUJVR0YoInN0cmVhbTogZGVwX2FkZCBkZXBfc3RyZWFtKCVwKT0lZCwgc3RyZWFtKCVwKT0lZFxuIiwgZGVwX3N0cmVhbSwKKyAgICAgICAgIGRlcF9zdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisKKyAgZGVwX3N0cmVhbS0+c3VtX2RlcF93ZWlnaHQgKz0gc3RyZWFtLT53ZWlnaHQ7CisKKyAgaWYgKGRlcF9zdHJlYW0tPmRlcF9uZXh0ID09IE5VTEwpIHsKKyAgICBsaW5rX2RlcChkZXBfc3RyZWFtLCBzdHJlYW0pOworICB9IGVsc2UgeworICAgIGluc2VydF9saW5rX2RlcChkZXBfc3RyZWFtLCBzdHJlYW0pOworICB9CisKKyAgdmFsaWRhdGVfdHJlZShzdHJlYW0pOworfQorCitpbnQgbmdodHRwMl9zdHJlYW1fZGVwX3JlbW92ZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfc3RyZWFtICpkZXBfcHJldiwgKnNpOworICBpbnQzMl90IHN1bV9kZXBfd2VpZ2h0X2RlbHRhOworICBpbnQgcnY7CisKKyAgREVCVUdGKCJzdHJlYW06IGRlcF9yZW1vdmUgc3RyZWFtKCVwKT0lZFxuIiwgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisKKyAgLyogRGlzdHJpYnV0ZSB3ZWlnaHQgb2YgfHN0cmVhbXwgdG8gZGlyZWN0IGRlc2NlbmRhbnRzICovCisgIHN1bV9kZXBfd2VpZ2h0X2RlbHRhID0gLXN0cmVhbS0+d2VpZ2h0OworCisgIGZvciAoc2kgPSBzdHJlYW0tPmRlcF9uZXh0OyBzaTsgc2kgPSBzaS0+c2liX25leHQpIHsKKyAgICBzaS0+d2VpZ2h0ID0gbmdodHRwMl9zdHJlYW1fZGVwX2Rpc3RyaWJ1dGVkX3dlaWdodChzdHJlYW0sIHNpLT53ZWlnaHQpOworCisgICAgc3VtX2RlcF93ZWlnaHRfZGVsdGEgKz0gc2ktPndlaWdodDsKKworICAgIGlmIChzaS0+cXVldWVkKSB7CisgICAgICBydiA9IHN0cmVhbV9vYnFfbW92ZShzdHJlYW0tPmRlcF9wcmV2LCBzdHJlYW0sIHNpKTsKKyAgICAgIGlmIChydiAhPSAwKSB7CisgICAgICAgIHJldHVybiBydjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBhc3NlcnQoc3RyZWFtLT5kZXBfcHJldik7CisKKyAgZGVwX3ByZXYgPSBzdHJlYW0tPmRlcF9wcmV2OworCisgIGRlcF9wcmV2LT5zdW1fZGVwX3dlaWdodCArPSBzdW1fZGVwX3dlaWdodF9kZWx0YTsKKworICBpZiAoc3RyZWFtLT5xdWV1ZWQpIHsKKyAgICBzdHJlYW1fb2JxX3JlbW92ZShzdHJlYW0pOworICB9CisKKyAgaWYgKHN0cmVhbS0+c2liX3ByZXYpIHsKKyAgICB1bmxpbmtfc2liKHN0cmVhbSk7CisgIH0gZWxzZSB7CisgICAgdW5saW5rX2RlcChzdHJlYW0pOworICB9CisKKyAgc3RyZWFtLT5zdW1fZGVwX3dlaWdodCA9IDA7CisKKyAgc3RyZWFtLT5kZXBfcHJldiA9IE5VTEw7CisgIHN0cmVhbS0+ZGVwX25leHQgPSBOVUxMOworICBzdHJlYW0tPnNpYl9wcmV2ID0gTlVMTDsKKyAgc3RyZWFtLT5zaWJfbmV4dCA9IE5VTEw7CisKKyAgdmFsaWRhdGVfdHJlZShkZXBfcHJldik7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXBfaW5zZXJ0X3N1YnRyZWUobmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgbmdodHRwMl9zdHJlYW0gKmxhc3Rfc2liOworICBuZ2h0dHAyX3N0cmVhbSAqZGVwX25leHQ7CisgIG5naHR0cDJfc3RyZWFtICpzaTsKKyAgaW50IHJ2OworCisgIERFQlVHRigic3RyZWFtOiBkZXBfaW5zZXJ0X3N1YnRyZWUgZGVwX3N0cmVhbSglcCk9JWQgc3RyZWFtKCVwKT0lZFxuIiwKKyAgICAgICAgIGRlcF9zdHJlYW0sIGRlcF9zdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisKKyAgc3RyZWFtLT5zdW1fZGVwX3dlaWdodCArPSBkZXBfc3RyZWFtLT5zdW1fZGVwX3dlaWdodDsKKyAgZGVwX3N0cmVhbS0+c3VtX2RlcF93ZWlnaHQgPSBzdHJlYW0tPndlaWdodDsKKworICBpZiAoZGVwX3N0cmVhbS0+ZGVwX25leHQpIHsKKyAgICBkZXBfbmV4dCA9IGRlcF9zdHJlYW0tPmRlcF9uZXh0OworCisgICAgbGlua19kZXAoZGVwX3N0cmVhbSwgc3RyZWFtKTsKKworICAgIGlmIChzdHJlYW0tPmRlcF9uZXh0KSB7CisgICAgICBsYXN0X3NpYiA9IHN0cmVhbV9sYXN0X3NpYihzdHJlYW0tPmRlcF9uZXh0KTsKKworICAgICAgbGlua19zaWIobGFzdF9zaWIsIGRlcF9uZXh0KTsKKyAgICB9IGVsc2UgeworICAgICAgbGlua19kZXAoc3RyZWFtLCBkZXBfbmV4dCk7CisgICAgfQorCisgICAgZm9yIChzaSA9IGRlcF9uZXh0OyBzaTsgc2kgPSBzaS0+c2liX25leHQpIHsKKyAgICAgIHNpLT5kZXBfcHJldiA9IHN0cmVhbTsKKyAgICAgIGlmIChzaS0+cXVldWVkKSB7CisgICAgICAgIHJ2ID0gc3RyZWFtX29icV9tb3ZlKHN0cmVhbSwgZGVwX3N0cmVhbSwgc2kpOworICAgICAgICBpZiAocnYgIT0gMCkgeworICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBsaW5rX2RlcChkZXBfc3RyZWFtLCBzdHJlYW0pOworICB9CisKKyAgaWYgKHN0cmVhbV9zdWJ0cmVlX2FjdGl2ZShzdHJlYW0pKSB7CisgICAgcnYgPSBzdHJlYW1fb2JxX3B1c2goZGVwX3N0cmVhbSwgc3RyZWFtKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorCisgIHZhbGlkYXRlX3RyZWUoZGVwX3N0cmVhbSk7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXBfYWRkX3N1YnRyZWUobmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgaW50IHJ2OworCisgIERFQlVHRigic3RyZWFtOiBkZXBfYWRkX3N1YnRyZWUgZGVwX3N0cmVhbSglcCk9JWQgc3RyZWFtKCVwKT0lZFxuIiwKKyAgICAgICAgIGRlcF9zdHJlYW0sIGRlcF9zdHJlYW0tPnN0cmVhbV9pZCwgc3RyZWFtLCBzdHJlYW0tPnN0cmVhbV9pZCk7CisKKyAgZGVwX3N0cmVhbS0+c3VtX2RlcF93ZWlnaHQgKz0gc3RyZWFtLT53ZWlnaHQ7CisKKyAgaWYgKGRlcF9zdHJlYW0tPmRlcF9uZXh0KSB7CisgICAgaW5zZXJ0X2xpbmtfZGVwKGRlcF9zdHJlYW0sIHN0cmVhbSk7CisgIH0gZWxzZSB7CisgICAgbGlua19kZXAoZGVwX3N0cmVhbSwgc3RyZWFtKTsKKyAgfQorCisgIGlmIChzdHJlYW1fc3VidHJlZV9hY3RpdmUoc3RyZWFtKSkgeworICAgIHJ2ID0gc3RyZWFtX29icV9wdXNoKGRlcF9zdHJlYW0sIHN0cmVhbSk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0KKworICB2YWxpZGF0ZV90cmVlKGRlcF9zdHJlYW0pOworCisgIHJldHVybiAwOworfQorCit2b2lkIG5naHR0cDJfc3RyZWFtX2RlcF9yZW1vdmVfc3VidHJlZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfc3RyZWFtICpuZXh0LCAqZGVwX3ByZXY7CisKKyAgREVCVUdGKCJzdHJlYW06IGRlcF9yZW1vdmVfc3VidHJlZSBzdHJlYW0oJXApPSVkXG4iLCBzdHJlYW0sCisgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCk7CisKKyAgYXNzZXJ0KHN0cmVhbS0+ZGVwX3ByZXYpOworCisgIGRlcF9wcmV2ID0gc3RyZWFtLT5kZXBfcHJldjsKKworICBpZiAoc3RyZWFtLT5zaWJfcHJldikgeworICAgIGxpbmtfc2liKHN0cmVhbS0+c2liX3ByZXYsIHN0cmVhbS0+c2liX25leHQpOworICB9IGVsc2UgeworICAgIG5leHQgPSBzdHJlYW0tPnNpYl9uZXh0OworCisgICAgbGlua19kZXAoZGVwX3ByZXYsIG5leHQpOworCisgICAgaWYgKG5leHQpIHsKKyAgICAgIG5leHQtPnNpYl9wcmV2ID0gTlVMTDsKKyAgICB9CisgIH0KKworICBkZXBfcHJldi0+c3VtX2RlcF93ZWlnaHQgLT0gc3RyZWFtLT53ZWlnaHQ7CisKKyAgaWYgKHN0cmVhbS0+cXVldWVkKSB7CisgICAgc3RyZWFtX29icV9yZW1vdmUoc3RyZWFtKTsKKyAgfQorCisgIHZhbGlkYXRlX3RyZWUoZGVwX3ByZXYpOworCisgIHN0cmVhbS0+c2liX3ByZXYgPSBOVUxMOworICBzdHJlYW0tPnNpYl9uZXh0ID0gTlVMTDsKKyAgc3RyZWFtLT5kZXBfcHJldiA9IE5VTEw7Cit9CisKK2ludCBuZ2h0dHAyX3N0cmVhbV9pbl9kZXBfdHJlZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIHJldHVybiBzdHJlYW0tPmRlcF9wcmV2IHx8IHN0cmVhbS0+ZGVwX25leHQgfHwgc3RyZWFtLT5zaWJfcHJldiB8fAorICAgICAgICAgc3RyZWFtLT5zaWJfbmV4dDsKK30KKworbmdodHRwMl9vdXRib3VuZF9pdGVtICoKK25naHR0cDJfc3RyZWFtX25leHRfb3V0Ym91bmRfaXRlbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIG5naHR0cDJfcHFfZW50cnkgKmVudDsKKyAgbmdodHRwMl9zdHJlYW0gKnNpOworCisgIGZvciAoOzspIHsKKyAgICBpZiAoc3RyZWFtX2FjdGl2ZShzdHJlYW0pKSB7CisgICAgICAvKiBVcGRhdGUgYXNjZW5kYW50J3MgZGVzY2VuZGFudF9sYXN0X2N5Y2xlIGhlcmUsIHNvIHRoYXQgd2UgY2FuCisgICAgICAgICBhc3N1cmUgdGhhdCBuZXcgc3RyZWFtIGlzIHNjaGVkdWxlZCBiYXNlZCBvbiBpdC4gKi8KKyAgICAgIGZvciAoc2kgPSBzdHJlYW07IHNpLT5kZXBfcHJldjsgc2kgPSBzaS0+ZGVwX3ByZXYpIHsKKyAgICAgICAgc2ktPmRlcF9wcmV2LT5kZXNjZW5kYW50X2xhc3RfY3ljbGUgPSBzaS0+Y3ljbGU7CisgICAgICB9CisgICAgICByZXR1cm4gc3RyZWFtLT5pdGVtOworICAgIH0KKyAgICBlbnQgPSBuZ2h0dHAyX3BxX3RvcCgmc3RyZWFtLT5vYnEpOworICAgIGlmICghZW50KSB7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3RyZWFtID0gbmdodHRwMl9zdHJ1Y3Rfb2YoZW50LCBuZ2h0dHAyX3N0cmVhbSwgcHFfZW50cnkpOworICB9Cit9CisKK25naHR0cDJfc3RyZWFtX3Byb3RvX3N0YXRlIG5naHR0cDJfc3RyZWFtX2dldF9zdGF0ZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKSB7CisgIGlmIChzdHJlYW0tPmZsYWdzICYgTkdIVFRQMl9TVFJFQU1fRkxBR19DTE9TRUQpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9TVFJFQU1fU1RBVEVfQ0xPU0VEOworICB9CisKKyAgaWYgKHN0cmVhbS0+ZmxhZ3MgJiBOR0hUVFAyX1NUUkVBTV9GTEFHX1BVU0gpIHsKKyAgICBpZiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9TVFJFQU1fU1RBVEVfUkVTRVJWRURfTE9DQUw7CisgICAgfQorCisgICAgaWYgKHN0cmVhbS0+c2h1dF9mbGFncyAmIE5HSFRUUDJfU0hVVF9XUikgeworICAgICAgcmV0dXJuIE5HSFRUUDJfU1RSRUFNX1NUQVRFX1JFU0VSVkVEX1JFTU9URTsKKyAgICB9CisgIH0KKworICBpZiAoc3RyZWFtLT5zaHV0X2ZsYWdzICYgTkdIVFRQMl9TSFVUX1JEKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfU1RSRUFNX1NUQVRFX0hBTEZfQ0xPU0VEX1JFTU9URTsKKyAgfQorCisgIGlmIChzdHJlYW0tPnNodXRfZmxhZ3MgJiBOR0hUVFAyX1NIVVRfV1IpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9TVFJFQU1fU1RBVEVfSEFMRl9DTE9TRURfTE9DQUw7CisgIH0KKworICBpZiAoc3RyZWFtLT5zdGF0ZSA9PSBOR0hUVFAyX1NUUkVBTV9JRExFKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfU1RSRUFNX1NUQVRFX0lETEU7CisgIH0KKworICByZXR1cm4gTkdIVFRQMl9TVFJFQU1fU1RBVEVfT1BFTjsKK30KKworbmdodHRwMl9zdHJlYW0gKm5naHR0cDJfc3RyZWFtX2dldF9wYXJlbnQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtLT5kZXBfcHJldjsKK30KKworbmdodHRwMl9zdHJlYW0gKm5naHR0cDJfc3RyZWFtX2dldF9uZXh0X3NpYmxpbmcobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtLT5zaWJfbmV4dDsKK30KKworbmdodHRwMl9zdHJlYW0gKm5naHR0cDJfc3RyZWFtX2dldF9wcmV2aW91c19zaWJsaW5nKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+c2liX3ByZXY7Cit9CisKK25naHR0cDJfc3RyZWFtICpuZ2h0dHAyX3N0cmVhbV9nZXRfZmlyc3RfY2hpbGQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtLT5kZXBfbmV4dDsKK30KKworaW50MzJfdCBuZ2h0dHAyX3N0cmVhbV9nZXRfd2VpZ2h0KG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+d2VpZ2h0OworfQorCitpbnQzMl90IG5naHR0cDJfc3RyZWFtX2dldF9zdW1fZGVwZW5kZW5jeV93ZWlnaHQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSkgeworICByZXR1cm4gc3RyZWFtLT5zdW1fZGVwX3dlaWdodDsKK30KKworaW50MzJfdCBuZ2h0dHAyX3N0cmVhbV9nZXRfc3RyZWFtX2lkKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pIHsKKyAgcmV0dXJuIHN0cmVhbS0+c3RyZWFtX2lkOworfQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9zdHJlYW0uaCBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiODA3ZAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3RyZWFtLmgKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX1NUUkVBTV9ICisjZGVmaW5lIE5HSFRUUDJfU1RSRUFNX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorI2luY2x1ZGUgIm5naHR0cDJfb3V0Ym91bmRfaXRlbS5oIgorI2luY2x1ZGUgIm5naHR0cDJfbWFwLmgiCisjaW5jbHVkZSAibmdodHRwMl9wcS5oIgorI2luY2x1ZGUgIm5naHR0cDJfaW50LmgiCisKKy8qCisgKiBJZiBsb2NhbCBwZWVyIGlzIHN0cmVhbSBpbml0aWF0b3I6CisgKiBOR0hUVFAyX1NUUkVBTV9PUEVOSU5HIDogdXBvbiBzZW5kaW5nIHJlcXVlc3QgSEVBREVSUworICogTkdIVFRQMl9TVFJFQU1fT1BFTkVEIDogdXBvbiByZWNlaXZpbmcgcmVzcG9uc2UgSEVBREVSUworICogTkdIVFRQMl9TVFJFQU1fQ0xPU0lORyA6IHVwb24gcXVldWluZyBSU1RfU1RSRUFNCisgKgorICogSWYgcmVtb3RlIHBlZXIgaXMgc3RyZWFtIGluaXRpYXRvcjoKKyAqIE5HSFRUUDJfU1RSRUFNX09QRU5JTkcgOiB1cG9uIHJlY2VpdmluZyByZXF1ZXN0IEhFQURFUlMKKyAqIE5HSFRUUDJfU1RSRUFNX09QRU5FRCA6IHVwb24gc2VuZGluZyByZXNwb25zZSBIRUFERVJTCisgKiBOR0hUVFAyX1NUUkVBTV9DTE9TSU5HIDogdXBvbiBxdWV1aW5nIFJTVF9TVFJFQU0KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyogSW5pdGlhbCBzdGF0ZSAqLworICBOR0hUVFAyX1NUUkVBTV9JTklUSUFMLAorICAvKiBGb3Igc3RyZWFtIGluaXRpYXRvcjogcmVxdWVzdCBIRUFERVJTIGhhcyBiZWVuIHNlbnQsIGJ1dCByZXNwb25zZQorICAgICBIRUFERVJTIGhhcyBub3QgYmVlbiByZWNlaXZlZCB5ZXQuICBGb3IgcmVjZWl2ZXI6IHJlcXVlc3QgSEVBREVSUworICAgICBoYXMgYmVlbiByZWNlaXZlZCwgYnV0IGl0IGRvZXMgbm90IHNlbmQgcmVzcG9uc2UgSEVBREVSUyB5ZXQuICovCisgIE5HSFRUUDJfU1RSRUFNX09QRU5JTkcsCisgIC8qIEZvciBzdHJlYW0gaW5pdGlhdG9yOiByZXNwb25zZSBIRUFERVJTIGlzIHJlY2VpdmVkLiBGb3IgcmVjZWl2ZXI6CisgICAgIHJlc3BvbnNlIEhFQURFUlMgaXMgc2VudC4gKi8KKyAgTkdIVFRQMl9TVFJFQU1fT1BFTkVELAorICAvKiBSU1RfU1RSRUFNIGlzIHJlY2VpdmVkLCBidXQgc29tZWhvdyB3ZSBuZWVkIHRvIGtlZXAgc3RyZWFtIGluCisgICAgIG1lbW9yeS4gKi8KKyAgTkdIVFRQMl9TVFJFQU1fQ0xPU0lORywKKyAgLyogUFVTSF9QUk9NSVNFIGlzIHJlY2VpdmVkIG9yIHNlbnQgKi8KKyAgTkdIVFRQMl9TVFJFQU1fUkVTRVJWRUQsCisgIC8qIFN0cmVhbSBpcyBjcmVhdGVkIGluIHRoaXMgc3RhdGUgaWYgaXQgaXMgdXNlZCBhcyBhbmNob3IgaW4KKyAgICAgZGVwZW5kZW5jeSB0cmVlLiAqLworICBOR0hUVFAyX1NUUkVBTV9JRExFCit9IG5naHR0cDJfc3RyZWFtX3N0YXRlOworCit0eXBlZGVmIGVudW0geworICBOR0hUVFAyX1NIVVRfTk9ORSA9IDAsCisgIC8qIEluZGljYXRlcyBmdXJ0aGVyIHJlY2VwdGlvbnMgd2lsbCBiZSBkaXNhbGxvd2VkLiAqLworICBOR0hUVFAyX1NIVVRfUkQgPSAweDAxLAorICAvKiBJbmRpY2F0ZXMgZnVydGhlciB0cmFuc21pc3Npb25zIHdpbGwgYmUgZGlzYWxsb3dlZC4gKi8KKyAgTkdIVFRQMl9TSFVUX1dSID0gMHgwMiwKKyAgLyogSW5kaWNhdGVzIGJvdGggZnVydGhlciByZWNlcHRpb25zIGFuZCB0cmFuc21pc3Npb25zIHdpbGwgYmUKKyAgICAgZGlzYWxsb3dlZC4gKi8KKyAgTkdIVFRQMl9TSFVUX1JEV1IgPSBOR0hUVFAyX1NIVVRfUkQgfCBOR0hUVFAyX1NIVVRfV1IKK30gbmdodHRwMl9zaHV0X2ZsYWc7CisKK3R5cGVkZWYgZW51bSB7CisgIE5HSFRUUDJfU1RSRUFNX0ZMQUdfTk9ORSA9IDAsCisgIC8qIEluZGljYXRlcyB0aGF0IHRoaXMgc3RyZWFtIGlzIHB1c2hlZCBzdHJlYW0gYW5kIG5vdCBvcGVuZWQKKyAgICAgeWV0LiAqLworICBOR0hUVFAyX1NUUkVBTV9GTEFHX1BVU0ggPSAweDAxLAorICAvKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIHN0cmVhbSB3YXMgY2xvc2VkICovCisgIE5HSFRUUDJfU1RSRUFNX0ZMQUdfQ0xPU0VEID0gMHgwMiwKKyAgLyogSW5kaWNhdGVzIHRoZSBpdGVtIGlzIGRlZmVycmVkIGR1ZSB0byBmbG93IGNvbnRyb2wuICovCisgIE5HSFRUUDJfU1RSRUFNX0ZMQUdfREVGRVJSRURfRkxPV19DT05UUk9MID0gMHgwNCwKKyAgLyogSW5kaWNhdGVzIHRoZSBpdGVtIGlzIGRlZmVycmVkIGJ5IHVzZXIgY2FsbGJhY2sgKi8KKyAgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9VU0VSID0gMHgwOCwKKyAgLyogYml0d2lzZSBPUiBvZiBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX0ZMT1dfQ09OVFJPTCBhbmQKKyAgICAgTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9VU0VSLiAqLworICBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX0FMTCA9IDB4MGMKKworfSBuZ2h0dHAyX3N0cmVhbV9mbGFnOworCisvKiBIVFRQIHJlbGF0ZWQgZmxhZ3MgdG8gZW5mb3JjZSBIVFRQIHNlbWFudGljcyAqLwordHlwZWRlZiBlbnVtIHsKKyAgTkdIVFRQMl9IVFRQX0ZMQUdfTk9ORSA9IDAsCisgIC8qIGhlYWRlciBmaWVsZCBzZWVuIHNvIGZhciAqLworICBOR0hUVFAyX0hUVFBfRkxBR19fQVVUSE9SSVRZID0gMSwKKyAgTkdIVFRQMl9IVFRQX0ZMQUdfX1BBVEggPSAxIDw8IDEsCisgIE5HSFRUUDJfSFRUUF9GTEFHX19NRVRIT0QgPSAxIDw8IDIsCisgIE5HSFRUUDJfSFRUUF9GTEFHX19TQ0hFTUUgPSAxIDw8IDMsCisgIC8qIGhvc3QgaXMgbm90IHBzZXVkbyBoZWFkZXIsIGJ1dCB3ZSByZXF1aXJlIGVpdGhlciBob3N0IG9yCisgICAgIDphdXRob3JpdHkgKi8KKyAgTkdIVFRQMl9IVFRQX0ZMQUdfSE9TVCA9IDEgPDwgNCwKKyAgTkdIVFRQMl9IVFRQX0ZMQUdfX1NUQVRVUyA9IDEgPDwgNSwKKyAgLyogcmVxdWlyZWQgaGVhZGVyIGZpZWxkcyBmb3IgSFRUUCByZXF1ZXN0IGV4Y2VwdCBmb3IgQ09OTkVDVAorICAgICBtZXRob2QuICovCisgIE5HSFRUUDJfSFRUUF9GTEFHX1JFUV9IRUFERVJTID0gTkdIVFRQMl9IVFRQX0ZMQUdfX01FVEhPRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9IVFRQX0ZMQUdfX1BBVEggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfSFRUUF9GTEFHX19TQ0hFTUUsCisgIE5HSFRUUDJfSFRUUF9GTEFHX1BTRVVET19IRUFERVJfRElTQUxMT1dFRCA9IDEgPDwgNiwKKyAgLyogSFRUUCBtZXRob2QgZmxhZ3MgKi8KKyAgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9DT05ORUNUID0gMSA8PCA3LAorICBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0hFQUQgPSAxIDw8IDgsCisgIE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfT1BUSU9OUyA9IDEgPDwgOSwKKyAgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9VUEdSQURFX1dPUktBUk9VTkQgPSAxIDw8IDEwLAorICBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX0FMTCA9IE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfQ09OTkVDVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9IVFRQX0ZMQUdfTUVUSF9IRUFEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0hUVFAyX0hUVFBfRkxBR19NRVRIX09QVElPTlMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfSFRUUF9GTEFHX01FVEhfVVBHUkFERV9XT1JLQVJPVU5ELAorICAvKiA6cGF0aCBjYXRlZ29yeSAqLworICAvKiBwYXRoIHN0YXJ0cyB3aXRoICIvIiAqLworICBOR0hUVFAyX0hUVFBfRkxBR19QQVRIX1JFR1VMQVIgPSAxIDw8IDExLAorICAvKiBwYXRoICIqIiAqLworICBOR0hUVFAyX0hUVFBfRkxBR19QQVRIX0FTVEVSSVNLID0gMSA8PCAxMiwKKyAgLyogc2NoZW1lICovCisgIC8qICJodHRwIiBvciAiaHR0cHMiIHNjaGVtZSAqLworICBOR0hUVFAyX0hUVFBfRkxBR19TQ0hFTUVfSFRUUCA9IDEgPDwgMTMsCisgIC8qIHNldCBpZiBmaW5hbCByZXNwb25zZSBpcyBleHBlY3RlZCAqLworICBOR0hUVFAyX0hUVFBfRkxBR19FWFBFQ1RfRklOQUxfUkVTUE9OU0UgPSAxIDw8IDE0LAorICBOR0hUVFAyX0hUVFBfRkxBR19fUFJPVE9DT0wgPSAxIDw8IDE1LAorfSBuZ2h0dHAyX2h0dHBfZmxhZzsKKworc3RydWN0IG5naHR0cDJfc3RyZWFtIHsKKyAgLyogSW50cnVzaXZlIE1hcCAqLworICBuZ2h0dHAyX21hcF9lbnRyeSBtYXBfZW50cnk7CisgIC8qIEVudHJ5IGZvciBkZXBfcHJldi0+b2JxICovCisgIG5naHR0cDJfcHFfZW50cnkgcHFfZW50cnk7CisgIC8qIFByaW9yaXR5IFF1ZXVlIHN0b3JpbmcgZGlyZWN0IGRlc2NlbmRhbnQgKG5naHR0cDJfc3RyZWFtKS4gIE9ubHkKKyAgICAgc3RyZWFtcyB3aGljaCBpdHNlbGYgaGFzIHNvbWUgZGF0YSB0byBzZW5kLCBvciBoYXMgYSBkZXNjZW5kYW50CisgICAgIHdoaWNoIGhhcyBzb21lIGRhdGEgdG8gc2VudC4gKi8KKyAgbmdodHRwMl9wcSBvYnE7CisgIC8qIENvbnRlbnQtTGVuZ3RoIG9mIHJlcXVlc3QvcmVzcG9uc2UgYm9keS4gIC0xIGlmIHVua25vd24uICovCisgIGludDY0X3QgY29udGVudF9sZW5ndGg7CisgIC8qIFJlY2VpdmVkIGJvZHkgc28gZmFyICovCisgIGludDY0X3QgcmVjdl9jb250ZW50X2xlbmd0aDsKKyAgLyogQmFzZSBsYXN0X2N5Y2xlIGZvciBkaXJlY3QgZGVzY2VuZGVudCBzdHJlYW1zLiAqLworICB1aW50NjRfdCBkZXNjZW5kYW50X2xhc3RfY3ljbGU7CisgIC8qIE5leHQgc2NoZWR1bGVkIHRpbWUgdG8gc2VudCBpdGVtICovCisgIHVpbnQ2NF90IGN5Y2xlOworICAvKiBOZXh0IHNlcSB1c2VkIGZvciBkaXJlY3QgZGVzY2VuZGFudCBzdHJlYW1zICovCisgIHVpbnQ2NF90IGRlc2NlbmRhbnRfbmV4dF9zZXE7CisgIC8qIFNlY29uZGFyeSBrZXkgZm9yIHByaW9yaXRpemF0aW9uIHRvIGJyZWFrIGEgdGllIGZvciBjeWNsZS4gIFRoaXMKKyAgICAgdmFsdWUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzZWQgZm9yIHNpbmdsZSBwYXJlbnQgc3RyZWFtLiAqLworICB1aW50NjRfdCBzZXE7CisgIC8qIHBvaW50ZXJzIHRvIGZvcm0gZGVwZW5kZW5jeSB0cmVlLiAgSWYgbXVsdGlwbGUgc3RyZWFtcyBkZXBlbmQgb24KKyAgICAgYSBzdHJlYW0sIG9ubHkgb25lIHN0cmVhbSAobGVmdCBtb3N0KSBoYXMgbm9uLU5VTEwgZGVwX3ByZXYgd2hpY2gKKyAgICAgcG9pbnRzIHRvIHRoZSBzdHJlYW0gaXQgZGVwZW5kcyBvbi4gVGhlIHJlbWFpbmluZyBzdHJlYW1zIGFyZQorICAgICBsaW5rZWQgdXNpbmcgc2liX3ByZXYgYW5kIHNpYl9uZXh0LiAgVGhlIHN0cmVhbSB3aGljaCBoYXMKKyAgICAgbm9uLU5VTEwgZGVwX3ByZXYgYWx3YXlzIE5VTEwgc2liX3ByZXYuICBUaGUgcmlnaHQgbW9zdCBzdHJlYW0KKyAgICAgaGFzIE5VTEwgc2liX25leHQuICBJZiB0aGlzIHN0cmVhbSBpcyBhIHJvb3Qgb2YgZGVwZW5kZW5jeSB0cmVlLAorICAgICBkZXBfcHJldiBhbmQgc2liX3ByZXYgYXJlIE5VTEwuICovCisgIG5naHR0cDJfc3RyZWFtICpkZXBfcHJldiwgKmRlcF9uZXh0OworICBuZ2h0dHAyX3N0cmVhbSAqc2liX3ByZXYsICpzaWJfbmV4dDsKKyAgLyogV2hlbiBzdHJlYW0gaXMga2VwdCBhZnRlciBjbG9zdXJlLCBpdCBtYXkgYmUga2VwdCBpbiBkb3VibHkKKyAgICAgbGlua2VkIGxpc3QgcG9pbnRlZCBieSBuZ2h0dHAyX3Nlc3Npb24gY2xvc2VkX3N0cmVhbV9oZWFkLgorICAgICBjbG9zZWRfbmV4dCBwb2ludHMgdG8gdGhlIG5leHQgc3RyZWFtIG9iamVjdCBpZiBpdCBpcyB0aGUgZWxlbWVudAorICAgICBvZiB0aGUgbGlzdC4gKi8KKyAgbmdodHRwMl9zdHJlYW0gKmNsb3NlZF9wcmV2LCAqY2xvc2VkX25leHQ7CisgIC8qIFRoZSBhcmJpdHJhcnkgZGF0YSBwcm92aWRlZCBieSB1c2VyIGZvciB0aGlzIHN0cmVhbS4gKi8KKyAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YTsKKyAgLyogSXRlbSB0byBzZW5kICovCisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgLyogTGFzdCB3cml0dGVuIGxlbmd0aCBvZiBmcmFtZSBwYXlsb2FkICovCisgIHNpemVfdCBsYXN0X3dyaXRlbGVuOworICAvKiBzdHJlYW0gSUQgKi8KKyAgaW50MzJfdCBzdHJlYW1faWQ7CisgIC8qIEN1cnJlbnQgcmVtb3RlIHdpbmRvdyBzaXplLiBUaGlzIHZhbHVlIGlzIGNvbXB1dGVkIGFnYWluc3QgdGhlCisgICAgIGN1cnJlbnQgaW5pdGlhbCB3aW5kb3cgc2l6ZSBvZiByZW1vdGUgZW5kcG9pbnQuICovCisgIGludDMyX3QgcmVtb3RlX3dpbmRvd19zaXplOworICAvKiBLZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgd2l0aG91dAorICAgICBXSU5ET1dfVVBEQVRFLiBUaGlzIGNvdWxkIGJlIG5lZ2F0aXZlIGFmdGVyIHN1Ym1pdHRpbmcgbmVnYXRpdmUKKyAgICAgdmFsdWUgdG8gV0lORE9XX1VQREFURSAqLworICBpbnQzMl90IHJlY3Zfd2luZG93X3NpemU7CisgIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29uc3VtZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGFuZCBub3cgaXMKKyAgICAgc3ViamVjdCB0byBXSU5ET1dfVVBEQVRFLiAgVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiBhdXRvCisgICAgIFdJTkRPV19VUERBVEUgaXMgdHVybmVkIG9mZi4gKi8KKyAgaW50MzJfdCBjb25zdW1lZF9zaXplOworICAvKiBUaGUgYW1vdW50IG9mIHJlY3Zfd2luZG93X3NpemUgY3V0IHVzaW5nIHN1Ym1pdHRpbmcgbmVnYXRpdmUKKyAgICAgdmFsdWUgdG8gV0lORE9XX1VQREFURSAqLworICBpbnQzMl90IHJlY3ZfcmVkdWN0aW9uOworICAvKiB3aW5kb3cgc2l6ZSBmb3IgbG9jYWwgZmxvdyBjb250cm9sLiBJdCBpcyBpbml0aWFsbHkgc2V0IHRvCisgICAgIE5HSFRUUDJfSU5JVElBTF9XSU5ET1dfU0laRSBhbmQgY291bGQgYmUgaW5jcmVhc2VkL2RlY3JlYXNlZCBieQorICAgICBzdWJtaXR0aW5nIFdJTkRPV19VUERBVEUuIFNlZSBuZ2h0dHAyX3N1Ym1pdF93aW5kb3dfdXBkYXRlKCkuICovCisgIGludDMyX3QgbG9jYWxfd2luZG93X3NpemU7CisgIC8qIHdlaWdodCBvZiB0aGlzIHN0cmVhbSAqLworICBpbnQzMl90IHdlaWdodDsKKyAgLyogVGhpcyBpcyB1bnBhaWQgcGVuYWx0eSAob2Zmc2V0KSB3aGVuIGNhbGN1bGF0aW5nIGN5Y2xlLiAqLworICB1aW50MzJfdCBwZW5kaW5nX3BlbmFsdHk7CisgIC8qIHN1bSBvZiB3ZWlnaHQgb2YgZGlyZWN0IGRlc2NlbmRhbnRzICovCisgIGludDMyX3Qgc3VtX2RlcF93ZWlnaHQ7CisgIG5naHR0cDJfc3RyZWFtX3N0YXRlIHN0YXRlOworICAvKiBzdGF0dXMgY29kZSBmcm9tIHJlbW90ZSBzZXJ2ZXIgKi8KKyAgaW50MTZfdCBzdGF0dXNfY29kZTsKKyAgLyogQml0d2lzZSBPUiBvZiB6ZXJvIG9yIG1vcmUgbmdodHRwMl9odHRwX2ZsYWcgdmFsdWVzICovCisgIHVpbnQxNl90IGh0dHBfZmxhZ3M7CisgIC8qIFRoaXMgaXMgYml0d2lzZS1PUiBvZiAwIG9yIG1vcmUgb2YgbmdodHRwMl9zdHJlYW1fZmxhZy4gKi8KKyAgdWludDhfdCBmbGFnczsKKyAgLyogQml0d2lzZSBPUiBvZiB6ZXJvIG9yIG1vcmUgbmdodHRwMl9zaHV0X2ZsYWcgdmFsdWVzICovCisgIHVpbnQ4X3Qgc2h1dF9mbGFnczsKKyAgLyogTm9uemVybyBpZiB0aGlzIHN0cmVhbSBoYXMgYmVlbiBxdWV1ZWQgdG8gc3RyZWFtIHBvaW50ZWQgYnkKKyAgICAgZGVwX3ByZXYuICBXZSBtYWludGFpbiB0aGUgaW52YXJpYW50IHRoYXQgaWYgYSBzdHJlYW0gaXMgcXVldWVkLAorICAgICB0aGVuIGl0cyBhbmNlc3RvcnMsIGV4Y2VwdCBmb3Igcm9vdCwgYXJlIGFsc28gcXVldWVkLiAgVGhpcworICAgICBpbnZhcmlhbnQgbWF5IGJyZWFrIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbi4gKi8KKyAgdWludDhfdCBxdWV1ZWQ7CisgIC8qIFRoaXMgZmxhZyBpcyB1c2VkIHRvIHJlZHVjZSBleGNlc3NpdmUgcXVldWluZyBvZiBXSU5ET1dfVVBEQVRFIHRvCisgICAgIHRoaXMgc3RyZWFtLiAgVGhlIG5vbnplcm8gZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBXSU5ET1dfVVBEQVRFCisgICAgIGlzIG5vdCBxdWV1ZWQuICovCisgIHVpbnQ4X3Qgd2luZG93X3VwZGF0ZV9xdWV1ZWQ7Cit9OworCit2b2lkIG5naHR0cDJfc3RyZWFtX2luaXQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgbmdodHRwMl9zdHJlYW1fc3RhdGUgaW5pdGlhbF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdlaWdodCwgaW50MzJfdCByZW1vdGVfaW5pdGlhbF93aW5kb3dfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxvY2FsX2luaXRpYWxfd2luZG93X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSwgbmdodHRwMl9tZW0gKm1lbSk7CisKK3ZvaWQgbmdodHRwMl9zdHJlYW1fZnJlZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIERpc2FsbG93IGVpdGhlciBmdXJ0aGVyIHJlY2VwdGlvbnMgb3IgdHJhbnNtaXNzaW9ucywgb3IgYm90aC4KKyAqIHxmbGFnfCBpcyBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIG5naHR0cDJfc2h1dF9mbGFnLgorICovCit2b2lkIG5naHR0cDJfc3RyZWFtX3NodXRkb3duKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIG5naHR0cDJfc2h1dF9mbGFnIGZsYWcpOworCisvKgorICogRGVmZXIgfHN0cmVhbS0+aXRlbXwuICBXZSB3b24ndCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gdGhlIHNpdHVhdGlvbgorICogd2hlcmUgfHN0cmVhbS0+aXRlbXwgPT0gTlVMTC4gIFRoZSB8ZmxhZ3N8IGlzIGJpdHdpc2UgT1Igb2YgemVybyBvcgorICogbW9yZSBvZiBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX1VTRVIgYW5kCisgKiBOR0hUVFAyX1NUUkVBTV9GTEFHX0RFRkVSUkVEX0ZMT1dfQ09OVFJPTC4gIFRoZSB8ZmxhZ3N8IGluZGljYXRlcworICogdGhlIHJlYXNvbiBvZiB0aGlzIGFjdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zdHJlYW1fZGVmZXJfaXRlbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCB1aW50OF90IGZsYWdzKTsKKworLyoKKyAqIFB1dCBiYWNrIGRlZmVycmVkIGRhdGEgaW4gdGhpcyBzdHJlYW0gdG8gYWN0aXZlIHN0YXRlLiAgVGhlIHxmbGFnc3wKKyAqIGFyZSBvbmUgb3IgbW9yZSBvZiBiaXR3aXNlIE9SIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICogTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9VU0VSIGFuZAorICogTkdIVFRQMl9TVFJFQU1fRkxBR19ERUZFUlJFRF9GTE9XX0NPTlRST0wgYW5kIGdpdmVuIG1hc2tzIGFyZQorICogY2xlYXJlZCBpZiB0aGV5IGFyZSBzZXQuICBTbyBldmVuIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBpZgorICogb25lIG9mIGZsYWcgaXMgc3RpbGwgc2V0LCBkYXRhIGRvZXMgbm90IGJlY29tZSBhY3RpdmUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfc3RyZWFtX3Jlc3VtZV9kZWZlcnJlZF9pdGVtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sIHVpbnQ4X3QgZmxhZ3MpOworCisvKgorICogUmV0dXJucyBub256ZXJvIGlmIGl0ZW0gaXMgZGVmZXJyZWQgYnkgd2hhdGV2ZXIgcmVhc29uLgorICovCitpbnQgbmdodHRwMl9zdHJlYW1fY2hlY2tfZGVmZXJyZWRfaXRlbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFJldHVybnMgbm9uemVybyBpZiBpdGVtIGlzIGRlZmVycmVkIGJ5IGZsb3cgY29udHJvbC4KKyAqLworaW50IG5naHR0cDJfc3RyZWFtX2NoZWNrX2RlZmVycmVkX2J5X2Zsb3dfY29udHJvbChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFVwZGF0ZXMgdGhlIHJlbW90ZSB3aW5kb3cgc2l6ZSB3aXRoIHRoZSBuZXcgdmFsdWUKKyAqIHxuZXdfaW5pdGlhbF93aW5kb3dfc2l6ZXwuIFRoZSB8b2xkX2luaXRpYWxfd2luZG93X3NpemV8IGlzIHVzZWQgdG8KKyAqIGNhbGN1bGF0ZSB0aGUgY3VycmVudCB3aW5kb3cgc2l6ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcyBvciAtMS4gVGhlIGZhaWx1cmUgaXMgZHVlIHRvCisgKiBvdmVyZmxvdy4KKyAqLworaW50IG5naHR0cDJfc3RyZWFtX3VwZGF0ZV9yZW1vdGVfaW5pdGlhbF93aW5kb3dfc2l6ZSgKKyAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBpbnQzMl90IG5ld19pbml0aWFsX3dpbmRvd19zaXplLAorICAgIGludDMyX3Qgb2xkX2luaXRpYWxfd2luZG93X3NpemUpOworCisvKgorICogVXBkYXRlcyB0aGUgbG9jYWwgd2luZG93IHNpemUgd2l0aCB0aGUgbmV3IHZhbHVlCisgKiB8bmV3X2luaXRpYWxfd2luZG93X3NpemV8LiBUaGUgfG9sZF9pbml0aWFsX3dpbmRvd19zaXplfCBpcyB1c2VkIHRvCisgKiBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgd2luZG93IHNpemUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMgb3IgLTEuIFRoZSBmYWlsdXJlIGlzIGR1ZSB0bworICogb3ZlcmZsb3cuCisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV91cGRhdGVfbG9jYWxfaW5pdGlhbF93aW5kb3dfc2l6ZSgKKyAgICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtLCBpbnQzMl90IG5ld19pbml0aWFsX3dpbmRvd19zaXplLAorICAgIGludDMyX3Qgb2xkX2luaXRpYWxfd2luZG93X3NpemUpOworCisvKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHByb21pc2VkIHN0cmVhbSB8c3RyZWFtfCBpcyByZXBsaWVkIHdpdGgKKyAqIEhFQURFUlMuICBUaGlzIGZ1bmN0aW9uIG1ha2VzIHRoZSBzdGF0ZSBvZiB0aGUgfHN0cmVhbXwgdG8KKyAqIE5HSFRUUDJfU1RSRUFNX09QRU5FRC4KKyAqLwordm9pZCBuZ2h0dHAyX3N0cmVhbV9wcm9taXNlX2Z1bGZpbGxlZChuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFJldHVybnMgbm9uemVybyBpZiB8dGFyZ2V0fCBpcyBhbiBhbmNlc3RvciBvZiB8c3RyZWFtfC4KKyAqLworaW50IG5naHR0cDJfc3RyZWFtX2RlcF9maW5kX2FuY2VzdG9yKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9zdHJlYW0gKnRhcmdldCk7CisKKy8qCisgKiBDb21wdXRlcyBkaXN0cmlidXRlZCB3ZWlnaHQgb2YgYSBzdHJlYW0gb2YgdGhlIHx3ZWlnaHR8IHVuZGVyIHRoZQorICogfHN0cmVhbXwgaWYgfHN0cmVhbXwgaXMgcmVtb3ZlZCBmcm9tIGEgZGVwZW5kZW5jeSB0cmVlLgorICovCitpbnQzMl90IG5naHR0cDJfc3RyZWFtX2RlcF9kaXN0cmlidXRlZF93ZWlnaHQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHdlaWdodCk7CisKKy8qCisgKiBNYWtlcyB0aGUgfHN0cmVhbXwgZGVwZW5kIG9uIHRoZSB8ZGVwX3N0cmVhbXwuICBUaGlzIGRlcGVuZGVuY3kgaXMKKyAqIGV4Y2x1c2l2ZS4gIEFsbCBleGlzdGluZyBkaXJlY3QgZGVzY2VuZGFudHMgb2YgfGRlcF9zdHJlYW18IGJlY29tZQorICogdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSB8c3RyZWFtfC4gIFRoaXMgZnVuY3Rpb24gYXNzdW1lcworICogfHN0cmVhbS0+aXRlbXwgaXMgTlVMTC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorICoKKyAqIE5HSFRUUDJfRVJSX05PTUVNCisgKiAgICAgT3V0IG9mIG1lbW9yeQorICovCitpbnQgbmdodHRwMl9zdHJlYW1fZGVwX2luc2VydChuZ2h0dHAyX3N0cmVhbSAqZGVwX3N0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogTWFrZXMgdGhlIHxzdHJlYW18IGRlcGVuZCBvbiB0aGUgfGRlcF9zdHJlYW18LiAgVGhpcyBkZXBlbmRlbmN5IGlzCisgKiBub3QgZXhjbHVzaXZlLiAgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHxzdHJlYW0tPml0ZW18IGlzIE5VTEwuCisgKi8KK3ZvaWQgbmdodHRwMl9zdHJlYW1fZGVwX2FkZChuZ2h0dHAyX3N0cmVhbSAqZGVwX3N0cmVhbSwgbmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBSZW1vdmVzIHRoZSB8c3RyZWFtfCBmcm9tIHRoZSBjdXJyZW50IGRlcGVuZGVuY3kgdHJlZS4gIFRoaXMKKyAqIGZ1bmN0aW9uIGFzc3VtZXMgfHN0cmVhbS0+aXRlbXwgaXMgTlVMTC4KKyAqLworaW50IG5naHR0cDJfc3RyZWFtX2RlcF9yZW1vdmUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBBdHRhY2hlcyB8aXRlbXwgdG8gfHN0cmVhbXwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKyAqCisgKiBOR0hUVFAyX0VSUl9OT01FTQorICogICAgIE91dCBvZiBtZW1vcnkKKyAqLworaW50IG5naHR0cDJfc3RyZWFtX2F0dGFjaF9pdGVtKG5naHR0cDJfc3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtKTsKKworLyoKKyAqIERldGFjaGVzIHxzdHJlYW0tPml0ZW18LiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBmcmVlCisgKiB8c3RyZWFtLT5pdGVtfC4gIFRoZSBjYWxsZXIgbXVzdCBmcmVlIGl0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXRhY2hfaXRlbShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIE1ha2VzIHRoZSB8c3RyZWFtfCBkZXBlbmQgb24gdGhlIHxkZXBfc3RyZWFtfC4gIFRoaXMgZGVwZW5kZW5jeSBpcworICogZXhjbHVzaXZlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXBfaW5zZXJ0X3N1YnRyZWUobmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogTWFrZXMgdGhlIHxzdHJlYW18IGRlcGVuZCBvbiB0aGUgfGRlcF9zdHJlYW18LiAgVGhpcyBkZXBlbmRlbmN5IGlzCisgKiBub3QgZXhjbHVzaXZlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV9kZXBfYWRkX3N1YnRyZWUobmdodHRwMl9zdHJlYW0gKmRlcF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogUmVtb3ZlcyBzdWJ0cmVlIHdob3NlIHJvb3Qgc3RyZWFtIGlzIHxzdHJlYW18LiAgVGhlCisgKiBlZmZlY3RpdmVfd2VpZ2h0IG9mIHN0cmVhbXMgaW4gcmVtb3ZlZCBzdWJ0cmVlIGlzIG5vdCB1cGRhdGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfTk9NRU0KKyAqICAgICBPdXQgb2YgbWVtb3J5CisgKi8KK3ZvaWQgbmdodHRwMl9zdHJlYW1fZGVwX3JlbW92ZV9zdWJ0cmVlKG5naHR0cDJfc3RyZWFtICpzdHJlYW0pOworCisvKgorICogUmV0dXJucyBub256ZXJvIGlmIHxzdHJlYW18IGlzIGluIGFueSBkZXBlbmRlbmN5IHRyZWUuCisgKi8KK2ludCBuZ2h0dHAyX3N0cmVhbV9pbl9kZXBfdHJlZShuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtKTsKKworLyoKKyAqIFNjaGVkdWxlcyB0cmFuc21pc3Npb24gb2YgfHN0cmVhbXwncyBpdGVtLCBhc3N1bWluZyBzdHJlYW0tPml0ZW0gaXMKKyAqIGF0dGFjaGVkLCBhbmQgc3RyZWFtLT5sYXN0X3dyaXRlbGVuIHdhcyB1cGRhdGVkLgorICovCit2b2lkIG5naHR0cDJfc3RyZWFtX3Jlc2NoZWR1bGUobmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKy8qCisgKiBDaGFuZ2VzIHxzdHJlYW18J3Mgd2VpZ2h0IHRvIHx3ZWlnaHR8LiAgSWYgfHN0cmVhbXwgaXMgcXVldWVkLCBpdAorICogd2lsbCBiZSByZXNjaGVkdWxlZCBiYXNlZCBvbiBuZXcgd2VpZ2h0LgorICovCit2b2lkIG5naHR0cDJfc3RyZWFtX2NoYW5nZV93ZWlnaHQobmdodHRwMl9zdHJlYW0gKnN0cmVhbSwgaW50MzJfdCB3ZWlnaHQpOworCisvKgorICogUmV0dXJucyBhIHN0cmVhbSB3aGljaCBoYXMgaGlnaGVzdCBwcmlvcml0eSwgdXBkYXRpbmcKKyAqIGRlc2NlbmRhbnRfbGFzdF9jeWNsZSBvZiBzZWxlY3RlZCBzdHJlYW0ncyBhbmNlc3RvcnMuCisgKi8KK25naHR0cDJfb3V0Ym91bmRfaXRlbSAqCituZ2h0dHAyX3N0cmVhbV9uZXh0X291dGJvdW5kX2l0ZW0obmdodHRwMl9zdHJlYW0gKnN0cmVhbSk7CisKKyNlbmRpZiAvKiBOR0hUVFAyX1NUUkVBTSAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl9zdWJtaXQuYyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3VibWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwNGVmZgotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3VibWl0LmMKQEAgLTAsMCArMSw4MTQgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiwgMjAxMyBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIm5naHR0cDJfc3VibWl0LmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgIm5naHR0cDJfc2Vzc2lvbi5oIgorI2luY2x1ZGUgIm5naHR0cDJfZnJhbWUuaCIKKyNpbmNsdWRlICJuZ2h0dHAyX2hlbHBlci5oIgorI2luY2x1ZGUgIm5naHR0cDJfcHJpb3JpdHlfc3BlYy5oIgorCisvKgorICogRGV0ZWN0cyB0aGUgZGVwZW5kZW5jeSBlcnJvciwgdGhhdCBpcyBzdHJlYW0gYXR0ZW1wdGVkIHRvIGRlcGVuZCBvbgorICogaXRzZWxmLiAgSWYgfHN0cmVhbV9pZHwgaXMgLTEsIHdlIHVzZSBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCBhcworICogc3RyZWFtIElELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogZXJyb3IgY29kZXM6CisgKgorICogTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVAorICogICBTdHJlYW0gYXR0ZW1wdGVkIHRvIGRlcGVuZCBvbiBpdHNlbGYuCisgKi8KK3N0YXRpYyBpbnQgZGV0ZWN0X3NlbGZfZGVwZW5kZW5jeShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMpIHsKKyAgYXNzZXJ0KHByaV9zcGVjKTsKKworICBpZiAoc3RyZWFtX2lkID09IC0xKSB7CisgICAgaWYgKChpbnQzMl90KXNlc3Npb24tPm5leHRfc3RyZWFtX2lkID09IHByaV9zcGVjLT5zdHJlYW1faWQpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmIChzdHJlYW1faWQgPT0gcHJpX3NwZWMtPnN0cmVhbV9pZCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIHxudmFfY29weXwuIFJlZ2FyZGxlc3Mgb2YgdGhlCisgICByZXR1cm4gdmFsdWUsIHRoZSBjYWxsZXIgbXVzdCBub3QgZnJlZSB8bnZhX2NvcHl8IGFmdGVyIHRoaXMKKyAgIGZ1bmN0aW9uIHJldHVybnMuICovCitzdGF0aWMgaW50MzJfdCBzdWJtaXRfaGVhZGVyc19zaGFyZWQobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdodHRwMl9udiAqbnZhX2NvcHksIHNpemVfdCBudmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2RhdGFfcHJvdmlkZXIgKmRhdGFfcHJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpIHsKKyAgaW50IHJ2OworICB1aW50OF90IGZsYWdzX2NvcHk7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbSA9IE5VTEw7CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lID0gTlVMTDsKKyAgbmdodHRwMl9oZWFkZXJzX2NhdGVnb3J5IGhjYXQ7CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICBpdGVtID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfb3V0Ym91bmRfaXRlbSkpOworICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgcnYgPSBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1faW5pdChpdGVtKTsKKworICBpZiAoZGF0YV9wcmQgIT0gTlVMTCAmJiBkYXRhX3ByZC0+cmVhZF9jYWxsYmFjayAhPSBOVUxMKSB7CisgICAgaXRlbS0+YXV4X2RhdGEuaGVhZGVycy5kYXRhX3ByZCA9ICpkYXRhX3ByZDsKKyAgfQorCisgIGl0ZW0tPmF1eF9kYXRhLmhlYWRlcnMuc3RyZWFtX3VzZXJfZGF0YSA9IHN0cmVhbV91c2VyX2RhdGE7CisKKyAgZmxhZ3NfY29weSA9CisgICAgICAodWludDhfdCkoKGZsYWdzICYgKE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNIHwgTkdIVFRQMl9GTEFHX1BSSU9SSVRZKSkgfAorICAgICAgICAgICAgICAgIE5HSFRUUDJfRkxBR19FTkRfSEVBREVSUyk7CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAtMSkgeworICAgIGlmIChzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCA+IElOVDMyX01BWCkgeworICAgICAgcnYgPSBOR0hUVFAyX0VSUl9TVFJFQU1fSURfTk9UX0FWQUlMQUJMRTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzdHJlYW1faWQgPSAoaW50MzJfdClzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZDsKKyAgICBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCArPSAyOworCisgICAgaGNhdCA9IE5HSFRUUDJfSENBVF9SRVFVRVNUOworICB9IGVsc2UgeworICAgIC8qIE1vcmUgc3BlY2lmaWMgY2F0ZWdvcml6YXRpb24gd2lsbCBiZSBkb25lIGxhdGVyLiAqLworICAgIGhjYXQgPSBOR0hUVFAyX0hDQVRfSEVBREVSUzsKKyAgfQorCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworCisgIG5naHR0cDJfZnJhbWVfaGVhZGVyc19pbml0KCZmcmFtZS0+aGVhZGVycywgZmxhZ3NfY29weSwgc3RyZWFtX2lkLCBoY2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlfc3BlYywgbnZhX2NvcHksIG52bGVuKTsKKworICBydiA9IG5naHR0cDJfc2Vzc2lvbl9hZGRfaXRlbShzZXNzaW9uLCBpdGVtKTsKKworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfaGVhZGVyc19mcmVlKCZmcmFtZS0+aGVhZGVycywgbWVtKTsKKyAgICBnb3RvIGZhaWwyOworICB9CisKKyAgaWYgKGhjYXQgPT0gTkdIVFRQMl9IQ0FUX1JFUVVFU1QpIHsKKyAgICByZXR1cm4gc3RyZWFtX2lkOworICB9CisKKyAgcmV0dXJuIDA7CisKK2ZhaWw6CisgIC8qIG5naHR0cDJfZnJhbWVfaGVhZGVyc19pbml0KCkgdGFrZXMgb3duZXJzaGlwIG9mIG52YV9jb3B5LiAqLworICBuZ2h0dHAyX252X2FycmF5X2RlbChudmFfY29weSwgbWVtKTsKK2ZhaWwyOgorICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisKKyAgcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50MzJfdCBzdWJtaXRfaGVhZGVyc19zaGFyZWRfbnZhKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgaW50MzJfdCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfcHJpb3JpdHlfc3BlYyAqcHJpX3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2RhdGFfcHJvdmlkZXIgKmRhdGFfcHJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW1fdXNlcl9kYXRhKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9udiAqbnZhX2NvcHk7CisgIG5naHR0cDJfcHJpb3JpdHlfc3BlYyBjb3B5X3ByaV9zcGVjOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKHByaV9zcGVjKSB7CisgICAgY29weV9wcmlfc3BlYyA9ICpwcmlfc3BlYzsKKyAgICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfbm9ybWFsaXplX3dlaWdodCgmY29weV9wcmlfc3BlYyk7CisgIH0gZWxzZSB7CisgICAgbmdodHRwMl9wcmlvcml0eV9zcGVjX2RlZmF1bHRfaW5pdCgmY29weV9wcmlfc3BlYyk7CisgIH0KKworICBydiA9IG5naHR0cDJfbnZfYXJyYXlfY29weSgmbnZhX2NvcHksIG52YSwgbnZsZW4sIG1lbSk7CisgIGlmIChydiA8IDApIHsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gc3VibWl0X2hlYWRlcnNfc2hhcmVkKHNlc3Npb24sIGZsYWdzLCBzdHJlYW1faWQsICZjb3B5X3ByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG52YV9jb3B5LCBudmxlbiwgZGF0YV9wcmQsIHN0cmVhbV91c2VyX2RhdGEpOworfQorCitpbnQgbmdodHRwMl9zdWJtaXRfdHJhaWxlcihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9udiAqbnZhLCBzaXplX3QgbnZsZW4pIHsKKyAgaWYgKHN0cmVhbV9pZCA8PSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICByZXR1cm4gKGludClzdWJtaXRfaGVhZGVyc19zaGFyZWRfbnZhKHNlc3Npb24sIE5HSFRUUDJfRkxBR19FTkRfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9pZCwgTlVMTCwgbnZhLCBudmxlbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30KKworaW50MzJfdCBuZ2h0dHAyX3N1Ym1pdF9oZWFkZXJzKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbV91c2VyX2RhdGEpIHsKKyAgaW50IHJ2OworCisgIGlmIChzdHJlYW1faWQgPT0gLTEpIHsKKyAgICBpZiAoc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgICByZXR1cm4gTkdIVFRQMl9FUlJfUFJPVE87CisgICAgfQorICB9IGVsc2UgaWYgKHN0cmVhbV9pZCA8PSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBmbGFncyAmPSBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTTsKKworICBpZiAocHJpX3NwZWMgJiYgIW5naHR0cDJfcHJpb3JpdHlfc3BlY19jaGVja19kZWZhdWx0KHByaV9zcGVjKSkgeworICAgIHJ2ID0gZGV0ZWN0X3NlbGZfZGVwZW5kZW5jeShzZXNzaW9uLCBzdHJlYW1faWQsIHByaV9zcGVjKTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIGZsYWdzIHw9IE5HSFRUUDJfRkxBR19QUklPUklUWTsKKyAgfSBlbHNlIHsKKyAgICBwcmlfc3BlYyA9IE5VTEw7CisgIH0KKworICByZXR1cm4gc3VibWl0X2hlYWRlcnNfc2hhcmVkX252YShzZXNzaW9uLCBmbGFncywgc3RyZWFtX2lkLCBwcmlfc3BlYywgbnZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudmxlbiwgTlVMTCwgc3RyZWFtX3VzZXJfZGF0YSk7Cit9CisKK2ludCBuZ2h0dHAyX3N1Ym1pdF9waW5nKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm9wYXF1ZV9kYXRhKSB7CisgIGZsYWdzICY9IE5HSFRUUDJfRkxBR19BQ0s7CisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fYWRkX3Bpbmcoc2Vzc2lvbiwgZmxhZ3MsIG9wYXF1ZV9kYXRhKTsKK30KKworaW50IG5naHR0cDJfc3VibWl0X3ByaW9yaXR5KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjKSB7CisgIGludCBydjsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgbmdodHRwMl9wcmlvcml0eV9zcGVjIGNvcHlfcHJpX3NwZWM7CisgIG5naHR0cDJfbWVtICptZW07CisgICh2b2lkKWZsYWdzOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAwIHx8IHByaV9zcGVjID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGlmIChzdHJlYW1faWQgPT0gcHJpX3NwZWMtPnN0cmVhbV9pZCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgY29weV9wcmlfc3BlYyA9ICpwcmlfc3BlYzsKKworICBuZ2h0dHAyX3ByaW9yaXR5X3NwZWNfbm9ybWFsaXplX3dlaWdodCgmY29weV9wcmlfc3BlYyk7CisKKyAgaXRlbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX291dGJvdW5kX2l0ZW0pKTsKKworICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisKKyAgbmdodHRwMl9mcmFtZV9wcmlvcml0eV9pbml0KCZmcmFtZS0+cHJpb3JpdHksIHN0cmVhbV9pZCwgJmNvcHlfcHJpX3NwZWMpOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKHNlc3Npb24sIGl0ZW0pOworCisgIGlmIChydiAhPSAwKSB7CisgICAgbmdodHRwMl9mcmFtZV9wcmlvcml0eV9mcmVlKCZmcmFtZS0+cHJpb3JpdHkpOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zdWJtaXRfcnN0X3N0cmVhbShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwgdWludDMyX3QgZXJyb3JfY29kZSkgeworICAodm9pZClmbGFnczsKKworICBpZiAoc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fYWRkX3JzdF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkLCBlcnJvcl9jb2RlKTsKK30KKworaW50IG5naHR0cDJfc3VibWl0X2dvYXdheShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGFzdF9zdHJlYW1faWQsIHVpbnQzMl90IGVycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm9wYXF1ZV9kYXRhLCBzaXplX3Qgb3BhcXVlX2RhdGFfbGVuKSB7CisgICh2b2lkKWZsYWdzOworCisgIGlmIChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MgJiBOR0hUVFAyX0dPQVdBWV9URVJNX09OX1NFTkQpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2FkZF9nb2F3YXkoc2Vzc2lvbiwgbGFzdF9zdHJlYW1faWQsIGVycm9yX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFxdWVfZGF0YSwgb3BhcXVlX2RhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9HT0FXQVlfQVVYX05PTkUpOworfQorCitpbnQgbmdodHRwMl9zdWJtaXRfc2h1dGRvd25fbm90aWNlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbikgeworICBpZiAoIXNlc3Npb24tPnNlcnZlcikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX1NUQVRFOworICB9CisgIGlmIChzZXNzaW9uLT5nb2F3YXlfZmxhZ3MpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX2FkZF9nb2F3YXkoc2Vzc2lvbiwgKDF1IDw8IDMxKSAtIDEsIE5HSFRUUDJfTk9fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9HT0FXQVlfQVVYX1NIVVRET1dOX05PVElDRSk7Cit9CisKK2ludCBuZ2h0dHAyX3N1Ym1pdF9zZXR0aW5ncyhuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9zZXR0aW5nc19lbnRyeSAqaXYsIHNpemVfdCBuaXYpIHsKKyAgKHZvaWQpZmxhZ3M7CisgIHJldHVybiBuZ2h0dHAyX3Nlc3Npb25fYWRkX3NldHRpbmdzKHNlc3Npb24sIE5HSFRUUDJfRkxBR19OT05FLCBpdiwgbml2KTsKK30KKworaW50MzJfdCBuZ2h0dHAyX3N1Ym1pdF9wdXNoX3Byb21pc2UobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzdHJlYW1faWQsIGNvbnN0IG5naHR0cDJfbnYgKm52YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21pc2VkX3N0cmVhbV91c2VyX2RhdGEpIHsKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtICppdGVtOworICBuZ2h0dHAyX2ZyYW1lICpmcmFtZTsKKyAgbmdodHRwMl9udiAqbnZhX2NvcHk7CisgIHVpbnQ4X3QgZmxhZ3NfY29weTsKKyAgaW50MzJfdCBwcm9taXNlZF9zdHJlYW1faWQ7CisgIGludCBydjsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgKHZvaWQpZmxhZ3M7CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICBpZiAoc3RyZWFtX2lkIDw9IDAgfHwgbmdodHRwMl9zZXNzaW9uX2lzX215X3N0cmVhbV9pZChzZXNzaW9uLCBzdHJlYW1faWQpKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBpZiAoIXNlc3Npb24tPnNlcnZlcikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9QUk9UTzsKKyAgfQorCisgIC8qIEFsbCAzMmJpdCBzaWduZWQgc3RyZWFtIElEcyBhcmUgc3BlbnQuICovCisgIGlmIChzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCA+IElOVDMyX01BWCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9TVFJFQU1fSURfTk9UX0FWQUlMQUJMRTsKKyAgfQorCisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1faW5pdChpdGVtKTsKKworICBpdGVtLT5hdXhfZGF0YS5oZWFkZXJzLnN0cmVhbV91c2VyX2RhdGEgPSBwcm9taXNlZF9zdHJlYW1fdXNlcl9kYXRhOworCisgIGZyYW1lID0gJml0ZW0tPmZyYW1lOworCisgIHJ2ID0gbmdodHRwMl9udl9hcnJheV9jb3B5KCZudmFfY29weSwgbnZhLCBudmxlbiwgbWVtKTsKKyAgaWYgKHJ2IDwgMCkgeworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICBmbGFnc19jb3B5ID0gTkdIVFRQMl9GTEFHX0VORF9IRUFERVJTOworCisgIHByb21pc2VkX3N0cmVhbV9pZCA9IChpbnQzMl90KXNlc3Npb24tPm5leHRfc3RyZWFtX2lkOworICBzZXNzaW9uLT5uZXh0X3N0cmVhbV9pZCArPSAyOworCisgIG5naHR0cDJfZnJhbWVfcHVzaF9wcm9taXNlX2luaXQoJmZyYW1lLT5wdXNoX3Byb21pc2UsIGZsYWdzX2NvcHksIHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlZF9zdHJlYW1faWQsIG52YV9jb3B5LCBudmxlbik7CisKKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX2l0ZW0oc2Vzc2lvbiwgaXRlbSk7CisKKyAgaWYgKHJ2ICE9IDApIHsKKyAgICBuZ2h0dHAyX2ZyYW1lX3B1c2hfcHJvbWlzZV9mcmVlKCZmcmFtZS0+cHVzaF9wcm9taXNlLCBtZW0pOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKworICAgIHJldHVybiBydjsKKyAgfQorCisgIHJldHVybiBwcm9taXNlZF9zdHJlYW1faWQ7Cit9CisKK2ludCBuZ2h0dHAyX3N1Ym1pdF93aW5kb3dfdXBkYXRlKG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX3N0cmVhbSAqc3RyZWFtID0gMDsKKyAgKHZvaWQpZmxhZ3M7CisKKyAgaWYgKHdpbmRvd19zaXplX2luY3JlbWVudCA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgcnYgPSBuZ2h0dHAyX2FkanVzdF9sb2NhbF93aW5kb3dfc2l6ZSgKKyAgICAgICAgJnNlc3Npb24tPmxvY2FsX3dpbmRvd19zaXplLCAmc2Vzc2lvbi0+cmVjdl93aW5kb3dfc2l6ZSwKKyAgICAgICAgJnNlc3Npb24tPnJlY3ZfcmVkdWN0aW9uLCAmd2luZG93X3NpemVfaW5jcmVtZW50KTsKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzdHJlYW0gPSBuZ2h0dHAyX3Nlc3Npb25fZ2V0X3N0cmVhbShzZXNzaW9uLCBzdHJlYW1faWQpOworICAgIGlmICghc3RyZWFtKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfYWRqdXN0X2xvY2FsX3dpbmRvd19zaXplKAorICAgICAgICAmc3RyZWFtLT5sb2NhbF93aW5kb3dfc2l6ZSwgJnN0cmVhbS0+cmVjdl93aW5kb3dfc2l6ZSwKKyAgICAgICAgJnN0cmVhbS0+cmVjdl9yZWR1Y3Rpb24sICZ3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworICAgIGlmIChydiAhPSAwKSB7CisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisKKyAgaWYgKHdpbmRvd19zaXplX2luY3JlbWVudCA+IDApIHsKKyAgICBpZiAoc3RyZWFtX2lkID09IDApIHsKKyAgICAgIHNlc3Npb24tPmNvbnN1bWVkX3NpemUgPQorICAgICAgICAgIG5naHR0cDJfbWF4KDAsIHNlc3Npb24tPmNvbnN1bWVkX3NpemUgLSB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworICAgIH0gZWxzZSB7CisgICAgICBzdHJlYW0tPmNvbnN1bWVkX3NpemUgPQorICAgICAgICAgIG5naHR0cDJfbWF4KDAsIHN0cmVhbS0+Y29uc3VtZWRfc2l6ZSAtIHdpbmRvd19zaXplX2luY3JlbWVudCk7CisgICAgfQorCisgICAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9hZGRfd2luZG93X3VwZGF0ZShzZXNzaW9uLCAwLCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgbmdodHRwMl9zZXNzaW9uX3NldF9sb2NhbF93aW5kb3dfc2l6ZShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGZsYWdzLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgd2luZG93X3NpemUpIHsKKyAgaW50MzJfdCB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQ7CisgIG5naHR0cDJfc3RyZWFtICpzdHJlYW07CisgIGludCBydjsKKyAgKHZvaWQpZmxhZ3M7CisKKyAgaWYgKHdpbmRvd19zaXplIDwgMCkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisgICAgd2luZG93X3NpemVfaW5jcmVtZW50ID0gd2luZG93X3NpemUgLSBzZXNzaW9uLT5sb2NhbF93aW5kb3dfc2l6ZTsKKworICAgIGlmICh3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPT0gMCkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHdpbmRvd19zaXplX2luY3JlbWVudCA8IDApIHsKKyAgICAgIHJldHVybiBuZ2h0dHAyX2FkanVzdF9sb2NhbF93aW5kb3dfc2l6ZSgKKyAgICAgICAgICAmc2Vzc2lvbi0+bG9jYWxfd2luZG93X3NpemUsICZzZXNzaW9uLT5yZWN2X3dpbmRvd19zaXplLAorICAgICAgICAgICZzZXNzaW9uLT5yZWN2X3JlZHVjdGlvbiwgJndpbmRvd19zaXplX2luY3JlbWVudCk7CisgICAgfQorCisgICAgcnYgPSBuZ2h0dHAyX2luY3JlYXNlX2xvY2FsX3dpbmRvd19zaXplKAorICAgICAgICAmc2Vzc2lvbi0+bG9jYWxfd2luZG93X3NpemUsICZzZXNzaW9uLT5yZWN2X3dpbmRvd19zaXplLAorICAgICAgICAmc2Vzc2lvbi0+cmVjdl9yZWR1Y3Rpb24sICZ3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworCisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc3RyZWFtID0gbmdodHRwMl9zZXNzaW9uX2dldF9zdHJlYW0oc2Vzc2lvbiwgc3RyZWFtX2lkKTsKKworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgd2luZG93X3NpemVfaW5jcmVtZW50ID0gd2luZG93X3NpemUgLSBzdHJlYW0tPmxvY2FsX3dpbmRvd19zaXplOworCisgICAgaWYgKHdpbmRvd19zaXplX2luY3JlbWVudCA9PSAwKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAod2luZG93X3NpemVfaW5jcmVtZW50IDwgMCkgeworICAgICAgcmV0dXJuIG5naHR0cDJfYWRqdXN0X2xvY2FsX3dpbmRvd19zaXplKAorICAgICAgICAgICZzdHJlYW0tPmxvY2FsX3dpbmRvd19zaXplLCAmc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplLAorICAgICAgICAgICZzdHJlYW0tPnJlY3ZfcmVkdWN0aW9uLCAmd2luZG93X3NpemVfaW5jcmVtZW50KTsKKyAgICB9CisKKyAgICBydiA9IG5naHR0cDJfaW5jcmVhc2VfbG9jYWxfd2luZG93X3NpemUoCisgICAgICAgICZzdHJlYW0tPmxvY2FsX3dpbmRvd19zaXplLCAmc3RyZWFtLT5yZWN2X3dpbmRvd19zaXplLAorICAgICAgICAmc3RyZWFtLT5yZWN2X3JlZHVjdGlvbiwgJndpbmRvd19zaXplX2luY3JlbWVudCk7CisKKyAgICBpZiAocnYgIT0gMCkgeworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorCisgIGlmICh3aW5kb3dfc2l6ZV9pbmNyZW1lbnQgPiAwKSB7CisgICAgcmV0dXJuIG5naHR0cDJfc2Vzc2lvbl9hZGRfd2luZG93X3VwZGF0ZShzZXNzaW9uLCAwLCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dfc2l6ZV9pbmNyZW1lbnQpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBuZ2h0dHAyX3N1Ym1pdF9hbHRzdmMobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCB1aW50OF90IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwgY29uc3QgdWludDhfdCAqb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3JpZ2luX2xlbiwgY29uc3QgdWludDhfdCAqZmllbGRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmaWVsZF92YWx1ZV9sZW4pIHsKKyAgbmdodHRwMl9tZW0gKm1lbTsKKyAgdWludDhfdCAqYnVmLCAqcDsKKyAgdWludDhfdCAqb3JpZ2luX2NvcHk7CisgIHVpbnQ4X3QgKmZpZWxkX3ZhbHVlX2NvcHk7CisgIG5naHR0cDJfb3V0Ym91bmRfaXRlbSAqaXRlbTsKKyAgbmdodHRwMl9mcmFtZSAqZnJhbWU7CisgIG5naHR0cDJfZXh0X2FsdHN2YyAqYWx0c3ZjOworICBpbnQgcnY7CisgICh2b2lkKWZsYWdzOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKCFzZXNzaW9uLT5zZXJ2ZXIpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9TVEFURTsKKyAgfQorCisgIGlmICgyICsgb3JpZ2luX2xlbiArIGZpZWxkX3ZhbHVlX2xlbiA+IE5HSFRUUDJfTUFYX1BBWUxPQURMRU4pIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGlmIChzdHJlYW1faWQgPT0gMCkgeworICAgIGlmIChvcmlnaW5fbGVuID09IDApIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICAgIH0KKyAgfSBlbHNlIGlmIChvcmlnaW5fbGVuICE9IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGJ1ZiA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIG9yaWdpbl9sZW4gKyBmaWVsZF92YWx1ZV9sZW4gKyAyKTsKKyAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgcCA9IGJ1ZjsKKworICBvcmlnaW5fY29weSA9IHA7CisgIGlmIChvcmlnaW5fbGVuKSB7CisgICAgcCA9IG5naHR0cDJfY3B5bWVtKHAsIG9yaWdpbiwgb3JpZ2luX2xlbik7CisgIH0KKyAgKnArKyA9ICdcMCc7CisKKyAgZmllbGRfdmFsdWVfY29weSA9IHA7CisgIGlmIChmaWVsZF92YWx1ZV9sZW4pIHsKKyAgICBwID0gbmdodHRwMl9jcHltZW0ocCwgZmllbGRfdmFsdWUsIGZpZWxkX3ZhbHVlX2xlbik7CisgIH0KKyAgKnArKyA9ICdcMCc7CisKKyAgaXRlbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX291dGJvdW5kX2l0ZW0pKTsKKyAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgIHJ2ID0gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgZ290byBmYWlsX2l0ZW1fbWFsbG9jOworICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgaXRlbS0+YXV4X2RhdGEuZXh0LmJ1aWx0aW4gPSAxOworCisgIGFsdHN2YyA9ICZpdGVtLT5leHRfZnJhbWVfcGF5bG9hZC5hbHRzdmM7CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisgIGZyYW1lLT5leHQucGF5bG9hZCA9IGFsdHN2YzsKKworICBuZ2h0dHAyX2ZyYW1lX2FsdHN2Y19pbml0KCZmcmFtZS0+ZXh0LCBzdHJlYW1faWQsIG9yaWdpbl9jb3B5LCBvcmlnaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX3ZhbHVlX2NvcHksIGZpZWxkX3ZhbHVlX2xlbik7CisKKyAgcnYgPSBuZ2h0dHAyX3Nlc3Npb25fYWRkX2l0ZW0oc2Vzc2lvbiwgaXRlbSk7CisgIGlmIChydiAhPSAwKSB7CisgICAgbmdodHRwMl9mcmFtZV9hbHRzdmNfZnJlZSgmZnJhbWUtPmV4dCwgbWVtKTsKKyAgICBuZ2h0dHAyX21lbV9mcmVlKG1lbSwgaXRlbSk7CisKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKKworZmFpbF9pdGVtX21hbGxvYzoKKyAgZnJlZShidWYpOworCisgIHJldHVybiBydjsKK30KKworaW50IG5naHR0cDJfc3VibWl0X29yaWdpbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfb3JpZ2luX2VudHJ5ICpvdiwgc2l6ZV90IG5vdikgeworICBuZ2h0dHAyX21lbSAqbWVtOworICB1aW50OF90ICpwOworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX2V4dF9vcmlnaW4gKm9yaWdpbjsKKyAgbmdodHRwMl9vcmlnaW5fZW50cnkgKm92X2NvcHk7CisgIHNpemVfdCBsZW4gPSAwOworICBzaXplX3QgaTsKKyAgaW50IHJ2OworICAodm9pZClmbGFnczsKKworICBtZW0gPSAmc2Vzc2lvbi0+bWVtOworCisgIGlmICghc2Vzc2lvbi0+c2VydmVyKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEU7CisgIH0KKworICBpZiAobm92KSB7CisgICAgZm9yIChpID0gMDsgaSA8IG5vdjsgKytpKSB7CisgICAgICBsZW4gKz0gb3ZbaV0ub3JpZ2luX2xlbjsKKyAgICB9CisKKyAgICBpZiAoMiAqIG5vdiArIGxlbiA+IE5HSFRUUDJfTUFYX1BBWUxPQURMRU4pIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICAgIH0KKworICAgIC8qIFRoZSBsYXN0IG5vdiBpcyBhZGRlZCBmb3IgdGVybWluYWwgTlVMTCBjaGFyYWN0ZXIuICovCisgICAgb3ZfY29weSA9CisgICAgICAgIG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIG5vdiAqIHNpemVvZihuZ2h0dHAyX29yaWdpbl9lbnRyeSkgKyBsZW4gKyBub3YpOworICAgIGlmIChvdl9jb3B5ID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9OT01FTTsKKyAgICB9CisKKyAgICBwID0gKHVpbnQ4X3QgKilvdl9jb3B5ICsgbm92ICogc2l6ZW9mKG5naHR0cDJfb3JpZ2luX2VudHJ5KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBub3Y7ICsraSkgeworICAgICAgb3ZfY29weVtpXS5vcmlnaW4gPSBwOworICAgICAgb3ZfY29weVtpXS5vcmlnaW5fbGVuID0gb3ZbaV0ub3JpZ2luX2xlbjsKKyAgICAgIHAgPSBuZ2h0dHAyX2NweW1lbShwLCBvdltpXS5vcmlnaW4sIG92W2ldLm9yaWdpbl9sZW4pOworICAgICAgKnArKyA9ICdcMCc7CisgICAgfQorCisgICAgYXNzZXJ0KChzaXplX3QpKHAgLSAodWludDhfdCAqKW92X2NvcHkpID09CisgICAgICAgICAgIG5vdiAqIHNpemVvZihuZ2h0dHAyX29yaWdpbl9lbnRyeSkgKyBsZW4gKyBub3YpOworICB9IGVsc2UgeworICAgIG92X2NvcHkgPSBOVUxMOworICB9CisKKyAgaXRlbSA9IG5naHR0cDJfbWVtX21hbGxvYyhtZW0sIHNpemVvZihuZ2h0dHAyX291dGJvdW5kX2l0ZW0pKTsKKyAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgIHJ2ID0gTkdIVFRQMl9FUlJfTk9NRU07CisgICAgZ290byBmYWlsX2l0ZW1fbWFsbG9jOworICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgaXRlbS0+YXV4X2RhdGEuZXh0LmJ1aWx0aW4gPSAxOworCisgIG9yaWdpbiA9ICZpdGVtLT5leHRfZnJhbWVfcGF5bG9hZC5vcmlnaW47CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisgIGZyYW1lLT5leHQucGF5bG9hZCA9IG9yaWdpbjsKKworICBuZ2h0dHAyX2ZyYW1lX29yaWdpbl9pbml0KCZmcmFtZS0+ZXh0LCBvdl9jb3B5LCBub3YpOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKHNlc3Npb24sIGl0ZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfb3JpZ2luX2ZyZWUoJmZyYW1lLT5leHQsIG1lbSk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworCisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgcmV0dXJuIDA7CisKK2ZhaWxfaXRlbV9tYWxsb2M6CisgIGZyZWUob3ZfY29weSk7CisKKyAgcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdWludDhfdCBzZXRfcmVxdWVzdF9mbGFncyhjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmdodHRwMl9kYXRhX3Byb3ZpZGVyICpkYXRhX3ByZCkgeworICB1aW50OF90IGZsYWdzID0gTkdIVFRQMl9GTEFHX05PTkU7CisgIGlmIChkYXRhX3ByZCA9PSBOVUxMIHx8IGRhdGFfcHJkLT5yZWFkX2NhbGxiYWNrID09IE5VTEwpIHsKKyAgICBmbGFncyB8PSBOR0hUVFAyX0ZMQUdfRU5EX1NUUkVBTTsKKyAgfQorCisgIGlmIChwcmlfc3BlYykgeworICAgIGZsYWdzIHw9IE5HSFRUUDJfRkxBR19QUklPUklUWTsKKyAgfQorCisgIHJldHVybiBmbGFnczsKK30KKworaW50MzJfdCBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0KG5naHR0cDJfc2Vzc2lvbiAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX3ByaW9yaXR5X3NwZWMgKnByaV9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfbnYgKm52YSwgc2l6ZV90IG52bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZGF0YV9wcm92aWRlciAqZGF0YV9wcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtX3VzZXJfZGF0YSkgeworICB1aW50OF90IGZsYWdzOworICBpbnQgcnY7CisKKyAgaWYgKHNlc3Npb24tPnNlcnZlcikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9QUk9UTzsKKyAgfQorCisgIGlmIChwcmlfc3BlYyAmJiAhbmdodHRwMl9wcmlvcml0eV9zcGVjX2NoZWNrX2RlZmF1bHQocHJpX3NwZWMpKSB7CisgICAgcnYgPSBkZXRlY3Rfc2VsZl9kZXBlbmRlbmN5KHNlc3Npb24sIC0xLCBwcmlfc3BlYyk7CisgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgIHJldHVybiBydjsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgcHJpX3NwZWMgPSBOVUxMOworICB9CisKKyAgZmxhZ3MgPSBzZXRfcmVxdWVzdF9mbGFncyhwcmlfc3BlYywgZGF0YV9wcmQpOworCisgIHJldHVybiBzdWJtaXRfaGVhZGVyc19zaGFyZWRfbnZhKHNlc3Npb24sIGZsYWdzLCAtMSwgcHJpX3NwZWMsIG52YSwgbnZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfcHJkLCBzdHJlYW1fdXNlcl9kYXRhKTsKK30KKworc3RhdGljIHVpbnQ4X3Qgc2V0X3Jlc3BvbnNlX2ZsYWdzKGNvbnN0IG5naHR0cDJfZGF0YV9wcm92aWRlciAqZGF0YV9wcmQpIHsKKyAgdWludDhfdCBmbGFncyA9IE5HSFRUUDJfRkxBR19OT05FOworICBpZiAoZGF0YV9wcmQgPT0gTlVMTCB8fCBkYXRhX3ByZC0+cmVhZF9jYWxsYmFjayA9PSBOVUxMKSB7CisgICAgZmxhZ3MgfD0gTkdIVFRQMl9GTEFHX0VORF9TVFJFQU07CisgIH0KKyAgcmV0dXJuIGZsYWdzOworfQorCitpbnQgbmdodHRwMl9zdWJtaXRfcmVzcG9uc2UobmdodHRwMl9zZXNzaW9uICpzZXNzaW9uLCBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX252ICpudmEsIHNpemVfdCBudmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ2h0dHAyX2RhdGFfcHJvdmlkZXIgKmRhdGFfcHJkKSB7CisgIHVpbnQ4X3QgZmxhZ3M7CisKKyAgaWYgKHN0cmVhbV9pZCA8PSAwKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgIH0KKworICBpZiAoIXNlc3Npb24tPnNlcnZlcikgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9QUk9UTzsKKyAgfQorCisgIGZsYWdzID0gc2V0X3Jlc3BvbnNlX2ZsYWdzKGRhdGFfcHJkKTsKKyAgcmV0dXJuIHN1Ym1pdF9oZWFkZXJzX3NoYXJlZF9udmEoc2Vzc2lvbiwgZmxhZ3MsIHN0cmVhbV9pZCwgTlVMTCwgbnZhLCBudmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9wcmQsIE5VTEwpOworfQorCitpbnQgbmdodHRwMl9zdWJtaXRfZGF0YShuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0cmVhbV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfZGF0YV9wcm92aWRlciAqZGF0YV9wcmQpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX2RhdGFfYXV4X2RhdGEgKmF1eF9kYXRhOworICB1aW50OF90IG5mbGFncyA9IGZsYWdzICYgTkdIVFRQMl9GTEFHX0VORF9TVFJFQU07CisgIG5naHR0cDJfbWVtICptZW07CisKKyAgbWVtID0gJnNlc3Npb24tPm1lbTsKKworICBpZiAoc3RyZWFtX2lkID09IDApIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGl0ZW0gPSBuZ2h0dHAyX21lbV9tYWxsb2MobWVtLCBzaXplb2YobmdodHRwMl9vdXRib3VuZF9pdGVtKSk7CisgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfTk9NRU07CisgIH0KKworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW1faW5pdChpdGVtKTsKKworICBmcmFtZSA9ICZpdGVtLT5mcmFtZTsKKyAgYXV4X2RhdGEgPSAmaXRlbS0+YXV4X2RhdGEuZGF0YTsKKyAgYXV4X2RhdGEtPmRhdGFfcHJkID0gKmRhdGFfcHJkOworICBhdXhfZGF0YS0+ZW9mID0gMDsKKyAgYXV4X2RhdGEtPmZsYWdzID0gbmZsYWdzOworCisgIC8qIGZsYWdzIGFyZSBzZW50IG9uIHRyYW5zbWlzc2lvbiAqLworICBuZ2h0dHAyX2ZyYW1lX2RhdGFfaW5pdCgmZnJhbWUtPmRhdGEsIE5HSFRUUDJfRkxBR19OT05FLCBzdHJlYW1faWQpOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKHNlc3Npb24sIGl0ZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfZGF0YV9mcmVlKCZmcmFtZS0+ZGF0YSk7CisgICAgbmdodHRwMl9tZW1fZnJlZShtZW0sIGl0ZW0pOworICAgIHJldHVybiBydjsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3NpemVfdCBuZ2h0dHAyX3BhY2tfc2V0dGluZ3NfcGF5bG9hZCh1aW50OF90ICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5naHR0cDJfc2V0dGluZ3NfZW50cnkgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml2KSB7CisgIGlmICghbmdodHRwMl9pdl9jaGVjayhpdiwgbml2KSkgeworICAgIHJldHVybiBOR0hUVFAyX0VSUl9JTlZBTElEX0FSR1VNRU5UOworICB9CisKKyAgaWYgKGJ1ZmxlbiA8IChuaXYgKiBOR0hUVFAyX0ZSQU1FX1NFVFRJTkdTX0VOVFJZX0xFTkdUSCkpIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5TVUZGX0JVRlNJWkU7CisgIH0KKworICByZXR1cm4gKHNzaXplX3QpbmdodHRwMl9mcmFtZV9wYWNrX3NldHRpbmdzX3BheWxvYWQoYnVmLCBpdiwgbml2KTsKK30KKworaW50IG5naHR0cDJfc3VibWl0X2V4dGVuc2lvbihuZ2h0dHAyX3Nlc3Npb24gKnNlc3Npb24sIHVpbnQ4X3QgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBmbGFncywgaW50MzJfdCBzdHJlYW1faWQsIHZvaWQgKnBheWxvYWQpIHsKKyAgaW50IHJ2OworICBuZ2h0dHAyX291dGJvdW5kX2l0ZW0gKml0ZW07CisgIG5naHR0cDJfZnJhbWUgKmZyYW1lOworICBuZ2h0dHAyX21lbSAqbWVtOworCisgIG1lbSA9ICZzZXNzaW9uLT5tZW07CisKKyAgaWYgKHR5cGUgPD0gTkdIVFRQMl9DT05USU5VQVRJT04pIHsKKyAgICByZXR1cm4gTkdIVFRQMl9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgfQorCisgIGlmICghc2Vzc2lvbi0+Y2FsbGJhY2tzLnBhY2tfZXh0ZW5zaW9uX2NhbGxiYWNrKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0lOVkFMSURfU1RBVEU7CisgIH0KKworICBpdGVtID0gbmdodHRwMl9tZW1fbWFsbG9jKG1lbSwgc2l6ZW9mKG5naHR0cDJfb3V0Ym91bmRfaXRlbSkpOworICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5HSFRUUDJfRVJSX05PTUVNOworICB9CisKKyAgbmdodHRwMl9vdXRib3VuZF9pdGVtX2luaXQoaXRlbSk7CisKKyAgZnJhbWUgPSAmaXRlbS0+ZnJhbWU7CisgIG5naHR0cDJfZnJhbWVfZXh0ZW5zaW9uX2luaXQoJmZyYW1lLT5leHQsIHR5cGUsIGZsYWdzLCBzdHJlYW1faWQsIHBheWxvYWQpOworCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX2FkZF9pdGVtKHNlc3Npb24sIGl0ZW0pOworICBpZiAocnYgIT0gMCkgeworICAgIG5naHR0cDJfZnJhbWVfZXh0ZW5zaW9uX2ZyZWUoJmZyYW1lLT5leHQpOworICAgIG5naHR0cDJfbWVtX2ZyZWUobWVtLCBpdGVtKTsKKyAgICByZXR1cm4gcnY7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9jbW5naHR0cDIvbGliL25naHR0cDJfc3VibWl0LmggYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3N1Ym1pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZDcwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3N1Ym1pdC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBuZ2h0dHAyIC0gSFRUUC8yIEMgTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUYXRzdWhpcm8gVHN1amlrYXdhCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBOR0hUVFAyX1NVQk1JVF9ICisjZGVmaW5lIE5HSFRUUDJfU1VCTUlUX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmIC8qIEhBVkVfQ09ORklHX0ggKi8KKworI2luY2x1ZGUgPG5naHR0cDIvbmdodHRwMi5oPgorCisjZW5kaWYgLyogTkdIVFRQMl9TVUJNSVRfSCAqLwpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl92ZXJzaW9uLmMgYi9VdGlsaXRpZXMvY21uZ2h0dHAyL2xpYi9uZ2h0dHAyX3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjExZjJjCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL2NtbmdodHRwMi9saWIvbmdodHRwMl92ZXJzaW9uLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIG5naHR0cDIgLSBIVFRQLzIgQyBMaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCAyMDEzIFRhdHN1aGlybyBUc3VqaWthd2EKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisjaW5jbHVkZSA8bmdodHRwMi9uZ2h0dHAyLmg+CisKK3N0YXRpYyBuZ2h0dHAyX2luZm8gdmVyc2lvbiA9IHtOR0hUVFAyX1ZFUlNJT05fQUdFLCBOR0hUVFAyX1ZFUlNJT05fTlVNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HSFRUUDJfVkVSU0lPTiwgTkdIVFRQMl9QUk9UT19WRVJTSU9OX0lEfTsKKworbmdodHRwMl9pbmZvICpuZ2h0dHAyX3ZlcnNpb24oaW50IGxlYXN0X3ZlcnNpb24pIHsKKyAgaWYgKGxlYXN0X3ZlcnNpb24gPiBOR0hUVFAyX1ZFUlNJT05fTlVNKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gJnZlcnNpb247Cit9CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvY216bGliL0NNYWtlTGlzdHMudHh0IGIvVXRpbGl0aWVzL2NtemxpYi9DTWFrZUxpc3RzLnR4dAppbmRleCA4ODhjM2ZmLi4wNTg0YzU1IDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvY216bGliL0NNYWtlTGlzdHMudHh0CisrKyBiL1V0aWxpdGllcy9jbXpsaWIvQ01ha2VMaXN0cy50eHQKQEAgLTM4LDExICszOCw2IEBACiBDT05GSUdVUkVfRklMRSgke0NNWkxJQl9TT1VSQ0VfRElSfS96bGliRGxsQ29uZmlnLmguaW4KICAgJHtDTVpMSUJfQklOQVJZX0RJUn0vemxpYkRsbENvbmZpZy5oKQogCi1GT1JFQUNIKG5hbWUgemxpYiB6Y29uZiBjbV96bGliX21hbmdsZSkKLSAgQ09ORklHVVJFX0ZJTEUoJHtDTVpMSUJfU09VUkNFX0RJUn0vJHtuYW1lfS5oCi0gICAgJHtDTVpMSUJfQklOQVJZX0RJUn0vJHtuYW1lfS5oIENPUFlPTkxZKQotRU5ERk9SRUFDSChuYW1lKQotCiAKIEFERF9MSUJSQVJZKGNtemxpYiAke1pMSUJfU1JDU30pCiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvLmdpdGF0dHJpYnV0ZXMgYi9VdGlsaXRpZXMvc3RkLy5naXRhdHRyaWJ1dGVzCmluZGV4IGNkMjA1NDkuLmFkNTQ1OWQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9zdGQvLmdpdGF0dHJpYnV0ZXMKKysrIGIvVXRpbGl0aWVzL3N0ZC8uZ2l0YXR0cmlidXRlcwpAQCAtMSArMSwyIEBACi1jbS8qIG91ci1jLXN0eWxlCitjbS8qKiBvdXItYy1zdHlsZQorY21leHQvKiogb3VyLWMtc3R5bGUKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvc3RkL0NNYWtlTGlzdHMudHh0CmluZGV4IDYzYzBhNjAuLjIzZDkxMDQgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9zdGQvQ01ha2VMaXN0cy50eHQKKysrIGIvVXRpbGl0aWVzL3N0ZC9DTWFrZUxpc3RzLnR4dApAQCAtMSwxMCArMSwxNyBAQAogCisjIFRvIGVuc3VyZSBtYXhpbXVtIHBvcnRhYmlsaXR5IGFjcm9zcyB2YXJpb3VzIGNvbXBpbGVycyBhbmQgcGxhdGZvcm1zCisjIGRlYWN0aXZhdGUgYW55IGNvbXBpbGVyIGV4dGVuc2lvbnMKK3NldChDTUFLRV9DWFhfRVhURU5TSU9OUyBGQUxTRSkKKwogIyBzb3VyY2UgZmlsZXMgZm9yIENNYWtlIHN0ZCBsaWJyYXJ5Ci1zZXQoU1JDUyBjbS9iaXRzL3N0cmluZ192aWV3LmN4eAorc2V0KFNSQ1MgY20vYml0cy9mc19wYXRoLmN4eAorICAgICAgICAgY20vYml0cy9zdHJpbmdfdmlldy5jeHgKKyAgICAgICAgIGNtL2ZpbGVzeXN0ZW0KICAgICAgICAgIGNtL21lbW9yeQogICAgICAgICAgY20vb3B0aW9uYWwKICAgICAgICAgIGNtL3NoYXJlZF9tdXRleAogICAgICAgICAgY20vc3RyaW5nX3ZpZXcKLSAgICAgICAgIGNtL3V0aWxpdHkpCisgICAgICAgICBjbS91dGlsaXR5CisgICAgICAgICBjbWV4dC9zdHJpbmdfdmlldykKIAogYWRkX2xpYnJhcnkoY21zdGQgU1RBVElDICR7U1JDU30pCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL2JpdHMvZXJhc2VfaWYuaHh4IGIvVXRpbGl0aWVzL3N0ZC9jbS9iaXRzL2VyYXNlX2lmLmh4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTUyZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS9iaXRzL2VyYXNlX2lmLmh4eApAQCAtMCwwICsxLDI5IEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisjaWZuZGVmIGNtX2JpdHNfZXJhc2VfaWZfaHh4CisjZGVmaW5lIGNtX2JpdHNfZXJhc2VfaWZfaHh4CisKK25hbWVzcGFjZSBjbSB7CituYW1lc3BhY2UgaW50ZXJuYWxzIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENvbnRhaW5lciwgdHlwZW5hbWUgUHJlZGljYXRlPgordm9pZCBlcmFzZV9pZihDb250YWluZXImIGNvbnQsIFByZWRpY2F0ZSBwcmVkKQoreworICBmb3IgKHR5cGVuYW1lIENvbnRhaW5lcjo6aXRlcmF0b3IgaXRlciA9IGNvbnQuYmVnaW4oKSwgbGFzdCA9IGNvbnQuZW5kKCk7CisgICAgICAgaXRlciAhPSBsYXN0OykgeworICAgIGlmIChwcmVkKCppdGVyKSkgeworICAgICAgaXRlciA9IGNvbnQuZXJhc2UoaXRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICsraXRlcjsKKyAgICB9CisgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgaW50ZXJuYWxzCit9IC8vIG5hbWVzcGFjZSBjbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY20vYml0cy9mc19wYXRoLmN4eCBiL1V0aWxpdGllcy9zdGQvY20vYml0cy9mc19wYXRoLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDg5OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS9iaXRzL2ZzX3BhdGguY3h4CkBAIC0wLDAgKzEsMTAyOSBAQAorLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworCisjaW5jbHVkZSA8Y20vZmlsZXN5c3RlbT4gLy8gSVdZVSBwcmFnbWE6IGFzc29jaWF0ZWQKKworI2lmICFkZWZpbmVkKENNYWtlX0hBVkVfQ1hYX0ZJTEVTWVNURU0pCisKKyMgIGluY2x1ZGUgPGFsZ29yaXRobT4KKyMgIGluY2x1ZGUgPGNhc3NlcnQ+CisjICBpbmNsdWRlIDxjc3RkZGVmPgorIyAgaW5jbHVkZSA8Y3N0ZGxpYj4KKyMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjICBpbmNsdWRlIDxzdHJpbmc+CisjICBpbmNsdWRlIDx1dGlsaXR5PgorIyAgaW5jbHVkZSA8dmVjdG9yPgorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjICAgIGluY2x1ZGUgPGNjdHlwZT4KKyMgIGVuZGlmCisjICBpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorIyAgICBpbmNsdWRlIDxpdGVyYXRvcj4KKyMgIGVuZGlmCisKKyMgIGluY2x1ZGUgPGNtL21lbW9yeT4KKyMgIGluY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorIyAgaW5jbHVkZSA8Y21leHQvc3RyaW5nX3ZpZXc+CisKK25hbWVzcGFjZSBjbSB7CituYW1lc3BhY2UgZmlsZXN5c3RlbSB7CituYW1lc3BhY2UgaW50ZXJuYWxzIHsKKworY2xhc3MgcGF0aF9wYXJzZXIKK3sKKyMgIGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpICYmIGRlZmluZWQoX19zcGFyYykKKyAgLy8gT3JhY2xlIERldmVsb3BlclN0dWRpbyBDKysgY29tcGlsZXIgZ2VuZXJhdGVzIHdyb25nIGNvZGUgaWYgZW51bSBzaXplCisgIC8vIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBkZWZhdWx0LgorICB1c2luZyBlbnVtX3NpemUgPSBpbnQ7CisjICBlbHNlCisgIHVzaW5nIGVudW1fc2l6ZSA9IHVuc2lnbmVkIGNoYXI7CisjICBlbmRpZgorCisgIGVudW0gY2xhc3Mgc3RhdGUgOiBlbnVtX3NpemUKKyAgeworICAgIGJlZm9yZV9iZWdpbiwKKyAgICBpbl9yb290X25hbWUsCisgICAgaW5fcm9vdF9kaXIsCisgICAgaW5fZmlsZW5hbWUsCisgICAgdHJhaWxpbmdfc2VwYXJhdG9yLAorICAgIGF0X2VuZAorICB9OworCisgIHVzaW5nIHBvaW50ZXIgPSBjaGFyIGNvbnN0KjsKKworcHVibGljOgorICBlbnVtIGNsYXNzIHNlZWtfcG9zaXRpb24gOiBlbnVtX3NpemUKKyAgeworICAgIHJvb3RfbmFtZSA9IHN0YXRpY19jYXN0PGVudW1fc2l6ZT4oc3RhdGU6OmluX3Jvb3RfbmFtZSksCisgICAgcm9vdF9kaXJlY3RvcnkgPSBzdGF0aWNfY2FzdDxlbnVtX3NpemU+KHN0YXRlOjppbl9yb290X2RpcikKKyAgfTsKKyAgZW51bSBjbGFzcyBwZWVrX2ZyYWdtZW50IDogZW51bV9zaXplCisgIHsKKyAgICByZW1haW5kZXIsCisgICAgcGF0aAorICB9OworCisgIHBhdGhfcGFyc2VyKGNtOjpzdHJpbmdfdmlldyBwYXRoLCBib29sIHNldF9hdF9lbmQgPSBmYWxzZSkKKyAgICA6IFN0YXRlKHNldF9hdF9lbmQgPyBzdGF0ZTo6YXRfZW5kIDogc3RhdGU6OmJlZm9yZV9iZWdpbikKKyAgICAsIFBhdGgocGF0aCkKKyAgeworICB9CisKKyAgcGF0aF9wYXJzZXIoY29uc3QgcGF0aF9wYXJzZXImKSA9IGRlZmF1bHQ7CisKKyAgfnBhdGhfcGFyc2VyKCkgPSBkZWZhdWx0OworCisgIHZvaWQgcmVzZXQoKSBub2V4Y2VwdCB7IHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6YmVmb3JlX2JlZ2luKTsgfQorCisgIHZvaWQgaW5jcmVtZW50KCkgbm9leGNlcHQKKyAgeworICAgIGNvbnN0IHBvaW50ZXIgc3RhcnQgPSB0aGlzLT5uZXh0X3Rva2VuKCk7CisgICAgY29uc3QgcG9pbnRlciBlbmQgPSB0aGlzLT5hZnRlcl9lbmQoKTsKKworICAgIGlmIChzdGFydCA9PSBlbmQpIHsKKyAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6YXRfZW5kKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRoaXMtPlN0YXRlKSB7CisgICAgICBjYXNlIHN0YXRlOjpiZWZvcmVfYmVnaW46IHsKKyAgICAgICAgYXV0byBwb3MgPSB0aGlzLT5jb25zdW1lX3Jvb3RfbmFtZShzdGFydCwgZW5kKTsKKyAgICAgICAgaWYgKHBvcykgeworICAgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6aW5fcm9vdF9uYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwb3MgPSB0aGlzLT5jb25zdW1lX3NlcGFyYXRvcihzdGFydCwgZW5kKTsKKyAgICAgICAgICBpZiAocG9zKSB7CisgICAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX3Jvb3RfZGlyKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy0+Y29uc3VtZV9maWxlbmFtZShzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6aW5fZmlsZW5hbWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2Ugc3RhdGU6OmluX3Jvb3RfbmFtZTogeworICAgICAgICBhdXRvIHBvcyA9IHRoaXMtPmNvbnN1bWVfc2VwYXJhdG9yKHN0YXJ0LCBlbmQpOworICAgICAgICBpZiAocG9zKSB7CisgICAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9yb290X2Rpcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy0+Y29uc3VtZV9maWxlbmFtZShzdGFydCwgZW5kKTsKKyAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX2ZpbGVuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2Ugc3RhdGU6OmluX3Jvb3RfZGlyOiB7CisgICAgICAgIHRoaXMtPmNvbnN1bWVfZmlsZW5hbWUoc3RhcnQsIGVuZCk7CisgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6aW5fZmlsZW5hbWUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2Ugc3RhdGU6OmluX2ZpbGVuYW1lOiB7CisgICAgICAgIGF1dG8gcG9zU2VwID0gdGhpcy0+Y29uc3VtZV9zZXBhcmF0b3Ioc3RhcnQsIGVuZCk7CisgICAgICAgIGlmIChwb3NTZXAgIT0gZW5kKSB7CisgICAgICAgICAgYXV0byBwb3MgPSB0aGlzLT5jb25zdW1lX2ZpbGVuYW1lKHBvc1NlcCwgZW5kKTsKKyAgICAgICAgICBpZiAocG9zKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNldF9zdGF0ZShzdGF0ZTo6dHJhaWxpbmdfc2VwYXJhdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIHN0YXRlOjp0cmFpbGluZ19zZXBhcmF0b3I6IHsKKyAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjphdF9lbmQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2Ugc3RhdGU6OmF0X2VuZDoKKyAgICAgICAgLy8gdW5yZWFjaGFibGUKKyAgICAgICAgc3RkOjphYm9ydCgpOworICAgIH0KKyAgfQorCisgIHZvaWQgZGVjcmVtZW50KCkgbm9leGNlcHQKKyAgeworICAgIGNvbnN0IHBvaW50ZXIgcnN0YXJ0ID0gdGhpcy0+Y3VycmVudF90b2tlbigpIC0gMTsKKyAgICBjb25zdCBwb2ludGVyIHJlbmQgPSB0aGlzLT5iZWZvcmVfc3RhcnQoKTsKKworICAgIGlmIChyc3RhcnQgPT0gcmVuZCkgeworICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjpiZWZvcmVfYmVnaW4pOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAodGhpcy0+U3RhdGUpIHsKKyAgICAgIGNhc2Ugc3RhdGU6OmF0X2VuZDogeworICAgICAgICBhdXRvIHBvc1NlcCA9IHRoaXMtPmNvbnN1bWVfc2VwYXJhdG9yKHJzdGFydCwgcmVuZCk7CisgICAgICAgIGlmIChwb3NTZXApIHsKKyAgICAgICAgICBpZiAocG9zU2VwID09IHJlbmQpIHsKKyAgICAgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6aW5fcm9vdF9kaXIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIHBvcyA9IHRoaXMtPmNvbnN1bWVfcm9vdF9uYW1lKHBvc1NlcCwgcmVuZCwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAocG9zID09IHJlbmQpIHsKKyAgICAgICAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9yb290X2Rpcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OnRyYWlsaW5nX3NlcGFyYXRvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGF1dG8gcG9zID0gdGhpcy0+Y29uc3VtZV9yb290X25hbWUocnN0YXJ0LCByZW5kKTsKKyAgICAgICAgICBpZiAocG9zID09IHJlbmQpIHsKKyAgICAgICAgICAgIHRoaXMtPnNldF9zdGF0ZShzdGF0ZTo6aW5fcm9vdF9uYW1lKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy0+Y29uc3VtZV9maWxlbmFtZShyc3RhcnQsIHJlbmQpOworICAgICAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9maWxlbmFtZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBzdGF0ZTo6dHJhaWxpbmdfc2VwYXJhdG9yOiB7CisgICAgICAgIHRoaXMtPmNvbnN1bWVfZmlsZW5hbWUocnN0YXJ0LCByZW5kKTsKKyAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9maWxlbmFtZSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBzdGF0ZTo6aW5fZmlsZW5hbWU6IHsKKyAgICAgICAgYXV0byBwb3NTZXAgPSB0aGlzLT5jb25zdW1lX3NlcGFyYXRvcihyc3RhcnQsIHJlbmQpOworICAgICAgICBpZiAocG9zU2VwID09IHJlbmQpIHsKKyAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX3Jvb3RfZGlyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBhdXRvIHBvcyA9IHRoaXMtPmNvbnN1bWVfcm9vdF9uYW1lKHBvc1NlcCwgcmVuZCwgdHJ1ZSk7CisgICAgICAgICAgaWYgKHBvcyA9PSByZW5kKSB7CisgICAgICAgICAgICB0aGlzLT5zZXRfc3RhdGUoc3RhdGU6OmluX3Jvb3RfZGlyKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy0+Y29uc3VtZV9maWxlbmFtZShwb3NTZXAsIHJlbmQpOworICAgICAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9maWxlbmFtZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBzdGF0ZTo6aW5fcm9vdF9kaXI6IHsKKyAgICAgICAgYXV0byBwb3MgPSB0aGlzLT5jb25zdW1lX3Jvb3RfbmFtZShyc3RhcnQsIHJlbmQpOworICAgICAgICBpZiAocG9zKSB7CisgICAgICAgICAgdGhpcy0+c2V0X3N0YXRlKHN0YXRlOjppbl9yb290X25hbWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBzdGF0ZTo6aW5fcm9vdF9uYW1lOgorICAgICAgY2FzZSBzdGF0ZTo6YmVmb3JlX2JlZ2luOiB7CisgICAgICAgIC8vIHVucmVhY2hhYmxlCisgICAgICAgIHN0ZDo6YWJvcnQoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwYXRoX3BhcnNlciYgb3BlcmF0b3IrKygpIG5vZXhjZXB0CisgIHsKKyAgICB0aGlzLT5pbmNyZW1lbnQoKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBwYXRoX3BhcnNlciYgb3BlcmF0b3ItLSgpIG5vZXhjZXB0CisgIHsKKyAgICB0aGlzLT5kZWNyZW1lbnQoKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBjbTo6c3RyaW5nX3ZpZXcgb3BlcmF0b3IqKCkgY29uc3Qgbm9leGNlcHQKKyAgeworICAgIHN3aXRjaCAodGhpcy0+U3RhdGUpIHsKKyAgICAgIGNhc2Ugc3RhdGU6OmJlZm9yZV9iZWdpbjoKKyAgICAgIGNhc2Ugc3RhdGU6OmF0X2VuZDoKKyAgICAgICAgcmV0dXJuIGNtOjpzdHJpbmdfdmlldygpOworICAgICAgY2FzZSBzdGF0ZTo6dHJhaWxpbmdfc2VwYXJhdG9yOgorICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIHN0YXRlOjppbl9yb290X2RpcjoKKyAgICAgIGNhc2Ugc3RhdGU6OmluX3Jvb3RfbmFtZToKKyAgICAgIGNhc2Ugc3RhdGU6OmluX2ZpbGVuYW1lOgorICAgICAgICByZXR1cm4gdGhpcy0+RW50cnk7CisgICAgICBkZWZhdWx0OgorICAgICAgICAvLyB1bnJlYWNoYWJsZQorICAgICAgICBzdGQ6OmFib3J0KCk7CisgICAgfQorICB9CisKKyAgdm9pZCBzZWVrKHNlZWtfcG9zaXRpb24gcG9zaXRpb24pCisgIHsKKyAgICBzdGF0ZSBzID0gc3RhdGljX2Nhc3Q8c3RhdGU+KHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pKTsKKworICAgIHdoaWxlICh0aGlzLT5TdGF0ZSA8PSBzKSB7CisgICAgICB0aGlzLT5pbmNyZW1lbnQoKTsKKyAgICB9CisgIH0KKworICBjbTo6c3RyaW5nX3ZpZXcgcGVlayhwZWVrX2ZyYWdtZW50IGZyYWdtZW50KQorICB7CisgICAgaWYgKGZyYWdtZW50ID09IHBlZWtfZnJhZ21lbnQ6OnJlbWFpbmRlcikgeworICAgICAgLy8gcGVlay11cCByZW1haW4gcGFydCBvZiB0aGUgaW5pdGlhbCBwYXRoCisgICAgICByZXR1cm4geyB0aGlzLT5FbnRyeS5kYXRhKCksCisgICAgICAgICAgICAgICBzdGQ6OnNpemVfdCgmdGhpcy0+UGF0aC5iYWNrKCkgLSB0aGlzLT5FbnRyeS5kYXRhKCkgKyAxKSB9OworICAgIH0KKyAgICBpZiAoZnJhZ21lbnQgPT0gcGVla19mcmFnbWVudDo6cGF0aCkgeworICAgICAgLy8gcGVlay11cCBmdWxsIHBhdGggdW50aWwgY3VycmVudCBwb3NpdGlvbgorICAgICAgcmV0dXJuIHsgdGhpcy0+UGF0aC5kYXRhKCksCisgICAgICAgICAgICAgICBzdGQ6OnNpemVfdCgmdGhpcy0+RW50cnkuYmFjaygpIC0gdGhpcy0+UGF0aC5kYXRhKCkgKyAxKSB9OworICAgIH0KKyAgICByZXR1cm4ge307CisgIH0KKworICBib29sIGluX3Jvb3RfbmFtZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlN0YXRlID09IHN0YXRlOjppbl9yb290X25hbWU7IH0KKyAgYm9vbCBpbl9yb290X2RpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlN0YXRlID09IHN0YXRlOjppbl9yb290X2RpcjsgfQorICBib29sIGF0X2VuZCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPlN0YXRlID09IHN0YXRlOjphdF9lbmQ7IH0KKworICBib29sIGF0X3N0YXJ0KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+RW50cnkuZGF0YSgpID09IHRoaXMtPlBhdGguZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgIHZvaWQgc2V0X3N0YXRlKHN0YXRlIG5ld1N0YXRlKSBub2V4Y2VwdAorICB7CisgICAgdGhpcy0+U3RhdGUgPSBuZXdTdGF0ZTsKKyAgICBpZiAobmV3U3RhdGUgPT0gc3RhdGU6OmJlZm9yZV9iZWdpbiB8fCBuZXdTdGF0ZSA9PSBzdGF0ZTo6YXRfZW5kKSB7CisgICAgICB0aGlzLT5FbnRyeSA9IHt9OworICAgIH0KKyAgfQorCisgIHBvaW50ZXIgYmVmb3JlX3N0YXJ0KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gdGhpcy0+UGF0aC5kYXRhKCkgLSAxOyB9CisgIHBvaW50ZXIgYWZ0ZXJfZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgeworICAgIHJldHVybiB0aGlzLT5QYXRoLmRhdGEoKSArIHRoaXMtPlBhdGguc2l6ZSgpOworICB9CisKKyAgcG9pbnRlciBjdXJyZW50X3Rva2VuKCkgY29uc3Qgbm9leGNlcHQKKyAgeworICAgIHN3aXRjaCAodGhpcy0+U3RhdGUpIHsKKyAgICAgIGNhc2Ugc3RhdGU6OmJlZm9yZV9iZWdpbjoKKyAgICAgIGNhc2Ugc3RhdGU6OmluX3Jvb3RfbmFtZToKKyAgICAgICAgcmV0dXJuICZ0aGlzLT5QYXRoLmZyb250KCk7CisgICAgICBjYXNlIHN0YXRlOjppbl9yb290X2RpcjoKKyAgICAgIGNhc2Ugc3RhdGU6OmluX2ZpbGVuYW1lOgorICAgICAgY2FzZSBzdGF0ZTo6dHJhaWxpbmdfc2VwYXJhdG9yOgorICAgICAgICByZXR1cm4gJnRoaXMtPkVudHJ5LmZyb250KCk7CisgICAgICBjYXNlIHN0YXRlOjphdF9lbmQ6CisgICAgICAgIHJldHVybiAmdGhpcy0+UGF0aC5iYWNrKCkgKyAxOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gdW5yZWFjaGFibGUKKyAgICAgICAgc3RkOjphYm9ydCgpOworICAgIH0KKyAgfQorICBwb2ludGVyIG5leHRfdG9rZW4oKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgc3dpdGNoICh0aGlzLT5TdGF0ZSkgeworICAgICAgY2FzZSBzdGF0ZTo6YmVmb3JlX2JlZ2luOgorICAgICAgICByZXR1cm4gdGhpcy0+UGF0aC5kYXRhKCk7CisgICAgICBjYXNlIHN0YXRlOjppbl9yb290X25hbWU6CisgICAgICBjYXNlIHN0YXRlOjppbl9yb290X2RpcjoKKyAgICAgIGNhc2Ugc3RhdGU6OmluX2ZpbGVuYW1lOgorICAgICAgICByZXR1cm4gJnRoaXMtPkVudHJ5LmJhY2soKSArIDE7CisgICAgICBjYXNlIHN0YXRlOjp0cmFpbGluZ19zZXBhcmF0b3I6CisgICAgICBjYXNlIHN0YXRlOjphdF9lbmQ6CisgICAgICAgIHJldHVybiBhZnRlcl9lbmQoKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIHVucmVhY2hhYmxlCisgICAgICAgIHN0ZDo6YWJvcnQoKTsKKyAgICB9CisgIH0KKworICBwb2ludGVyIGNvbnN1bWVfc2VwYXJhdG9yKHBvaW50ZXIgcHRyLCBwb2ludGVyIGVuZCkgbm9leGNlcHQKKyAgeworICAgIGlmIChwdHIgPT0gZW5kIHx8CisgICAgICAgICgqcHRyICE9ICcvJworIyAgaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgICAmJiAqcHRyICE9ICdcXCcKKyMgIGVuZGlmCisgICAgICAgICApKSB7CisgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgY29uc3QgYXV0byBzdGVwID0gcHRyIDwgZW5kID8gMSA6IC0xOworICAgIHB0ciArPSBzdGVwOworICAgIHdoaWxlIChwdHIgIT0gZW5kICYmCisgICAgICAgICAgICgqcHRyID09ICcvJworIyAgaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgICAgICB8fCAqcHRyID09ICdcXCcKKyMgIGVuZGlmCisgICAgICAgICAgICApKSB7CisgICAgICBwdHIgKz0gc3RlcDsKKyAgICB9CisgICAgaWYgKHN0ZXAgPT0gMSkgeworICAgICAgdGhpcy0+RW50cnkgPSBjbTo6c3RyaW5nX3ZpZXcocHRyIC0gMSwgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMtPkVudHJ5ID0gY206OnN0cmluZ192aWV3KHB0ciArIDEsIDEpOworICAgIH0KKworICAgIHJldHVybiBwdHI7CisgIH0KKworICBwb2ludGVyIGNvbnN1bWVfZmlsZW5hbWUocG9pbnRlciBwdHIsIHBvaW50ZXIgZW5kKSBub2V4Y2VwdAorICB7CisgICAgYXV0byBzdGFydCA9IHB0cjsKKworICAgIGlmIChwdHIgPT0gZW5kIHx8ICpwdHIgPT0gJy8nCisjICBpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgICAgfHwgKnB0ciA9PSAnXFwnCisjICBlbmRpZgorICAgICkgeworICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGNvbnN0IGF1dG8gc3RlcCA9IHB0ciA8IGVuZCA/IDEgOiAtMTsKKyAgICBwdHIgKz0gc3RlcDsKKyAgICB3aGlsZSAocHRyICE9IGVuZCAmJiAqcHRyICE9ICcvJworIyAgaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAgICAgICYmICpwdHIgIT0gJ1xcJworIyAgZW5kaWYKKyAgICApIHsKKyAgICAgIHB0ciArPSBzdGVwOworICAgIH0KKworIyAgaWYgZGVmaW5lZChfV0lOMzIpCisgICAgaWYgKHN0ZXAgPT0gLTEgJiYgKHN0YXJ0IC0gcHRyKSA+PSAyICYmIHB0ciA9PSBlbmQpIHsKKyAgICAgIC8vIHJvbGxiYWNrIGRyaXZlIG5hbWUgY29uc3VtcHRpb24sIGlmIGFueQorICAgICAgaWYgKHRoaXMtPmlzX2RyaXZlX25hbWUocHRyICsgMSkpIHsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICB9CisgICAgICBpZiAocHRyID09IHN0YXJ0KSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgfQorICAgIH0KKyMgIGVuZGlmCisKKyAgICBpZiAoc3RlcCA9PSAxKSB7CisgICAgICB0aGlzLT5FbnRyeSA9IGNtOjpzdHJpbmdfdmlldyhzdGFydCwgcHRyIC0gc3RhcnQpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLT5FbnRyeSA9IGNtOjpzdHJpbmdfdmlldyhwdHIgKyAxLCBzdGFydCAtIHB0cik7CisgICAgfQorCisgICAgcmV0dXJuIHB0cjsKKyAgfQorCisjICBpZiBkZWZpbmVkKF9XSU4zMikKKyAgYm9vbCBpc19kcml2ZV9uYW1lKHBvaW50ZXIgcHRyKQorICB7CisgICAgcmV0dXJuIHN0ZDo6dG91cHBlcihwdHJbMF0pID49ICdBJyAmJiBzdGQ6OnRvdXBwZXIocHRyWzBdKSA8PSAnWicgJiYKKyAgICAgIHB0clsxXSA9PSAnOic7CisgIH0KKyMgIGVuZGlmCisKKyAgcG9pbnRlciBjb25zdW1lX3Jvb3RfbmFtZShwb2ludGVyIHB0ciwgcG9pbnRlciBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGVja19vbmx5ID0gZmFsc2UpIG5vZXhjZXB0CisgIHsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIGlmIChwdHIgPCBlbmQpIHsKKyAgICAgIGlmICgoZW5kIC0gcHRyKSA+PSAyICYmIHRoaXMtPmlzX2RyaXZlX25hbWUocHRyKSkgeworICAgICAgICAvLyBEcml2ZSBsZXR0ZXIgKFg6KSBpcyBhIHJvb3QgbmFtZQorICAgICAgICBpZiAoIWNoZWNrX29ubHkpIHsKKyAgICAgICAgICB0aGlzLT5FbnRyeSA9IGNtOjpzdHJpbmdfdmlldyhwdHIsIDIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwdHIgKyAyOworICAgICAgfQorICAgICAgaWYgKChlbmQgLSBwdHIpID4gMiAmJiAocHRyWzBdID09ICcvJyB8fCBwdHJbMF0gPT0gJ1xcJykgJiYKKyAgICAgICAgICAocHRyWzFdID09ICcvJyB8fCBwdHJbMV0gPT0gJ1xcJykgJiYKKyAgICAgICAgICAocHRyWzJdICE9ICcvJyAmJiBwdHJbMl0gIT0gJ1xcJykpIHsKKyAgICAgICAgLy8gc2VydmVyIG5hbWUgKC8vc2VydmVyKSBpcyBhIHJvb3QgbmFtZQorICAgICAgICBhdXRvIHBvcyA9IHN0ZDo6ZmluZF9pZihwdHIgKyAyLCBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNoYXIgYykgeyByZXR1cm4gYyA9PSAnLycgfHwgYyA9PSAnXFwnOyB9KTsKKyAgICAgICAgaWYgKCFjaGVja19vbmx5KSB7CisgICAgICAgICAgdGhpcy0+RW50cnkgPSBjbTo6c3RyaW5nX3ZpZXcocHRyLCBwb3MgLSBwdHIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwb3M7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICgocHRyIC0gZW5kKSA+PSAyICYmIHRoaXMtPmlzX2RyaXZlX25hbWUocHRyIC0gMSkpIHsKKyAgICAgICAgLy8gRHJpdmUgbGV0dGVyIChYOikgaXMgYSByb290IG5hbWUKKyAgICAgICAgaWYgKCFjaGVja19vbmx5KSB7CisgICAgICAgICAgdGhpcy0+RW50cnkgPSBjbTo6c3RyaW5nX3ZpZXcocHRyIC0gMSwgMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHB0ciAtIDI7CisgICAgICB9CisgICAgICBpZiAoKHB0ciAtIGVuZCkgPiAyICYmIChwdHJbMF0gIT0gJy8nICYmIHB0clswXSAhPSAnXFwnKSkgeworICAgICAgICBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8cG9pbnRlcj4gc3RhcnQocHRyKTsKKyAgICAgICAgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPHBvaW50ZXI+IHN0b3AoZW5kKTsKKyAgICAgICAgYXV0byByZXMgPSBzdGQ6OmZpbmRfaWYoc3RhcnQsIHN0b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNoYXIgYykgeyByZXR1cm4gYyA9PSAnLycgfHwgYyA9PSAnXFwnOyB9KTsKKyAgICAgICAgcG9pbnRlciBwb3MgPSByZXMuYmFzZSgpIC0gMTsKKyAgICAgICAgaWYgKChwb3MgLSAxKSA+IGVuZCAmJiAocG9zWy0xXSA9PSAnLycgfHwgcG9zWy0xXSA9PSAnXFwnKSkgeworICAgICAgICAgIC8vIHNlcnZlciBuYW1lICgvL3NlcnZlcikgaXMgYSByb290IG5hbWUKKyAgICAgICAgICBpZiAoIWNoZWNrX29ubHkpIHsKKyAgICAgICAgICAgIHRoaXMtPkVudHJ5ID0gY206OnN0cmluZ192aWV3KHBvcyAtIDEsIHB0ciAtIHBvcyArIDIpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gcG9zIC0gMjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyMgIGVsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIGlmIChwdHIgPCBlbmQpIHsKKyAgICAgIGlmICgoZW5kIC0gcHRyKSA+IDIgJiYgcHRyWzBdID09ICcvJyAmJiBwdHJbMV0gPT0gJy8nICYmIHB0clsyXSAhPSAnLycpIHsKKyAgICAgICAgLy8gc2VydmVyIG5hbWUgKC8vc2VydmVyKSBpcyBhIHJvb3QgbmFtZQorICAgICAgICBhdXRvIHBvcyA9IHN0ZDo6ZmluZChwdHIgKyAyLCBlbmQsICcvJyk7CisgICAgICAgIGlmICghY2hlY2tfb25seSkgeworICAgICAgICAgIHRoaXMtPkVudHJ5ID0gY206OnN0cmluZ192aWV3KHB0ciwgcG9zIC0gcHRyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcG9zOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAoKHB0ciAtIGVuZCkgPiAyICYmIHB0clswXSAhPSAnLycpIHsKKyAgICAgICAgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPHBvaW50ZXI+IHN0YXJ0KHB0cik7CisgICAgICAgIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxwb2ludGVyPiBzdG9wKGVuZCk7CisgICAgICAgIGF1dG8gcmVzID0gc3RkOjpmaW5kKHN0YXJ0LCBzdG9wLCAnLycpOworICAgICAgICBwb2ludGVyIHBvcyA9IHJlcy5iYXNlKCkgLSAxOworICAgICAgICBpZiAoKHBvcyAtIDEpID4gZW5kICYmIHBvc1stMV0gPT0gJy8nKSB7CisgICAgICAgICAgLy8gc2VydmVyIG5hbWUgKC8vc2VydmVyKSBpcyBhIHJvb3QgbmFtZQorICAgICAgICAgIGlmICghY2hlY2tfb25seSkgeworICAgICAgICAgICAgdGhpcy0+RW50cnkgPSBjbTo6c3RyaW5nX3ZpZXcocG9zIC0gMSwgcHRyIC0gcG9zICsgMik7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBwb3MgLSAyOworICAgICAgICB9CisgICAgICB9CisgICAgfQorIyAgZWxzZQorICAgICh2b2lkKXB0cjsKKyAgICAodm9pZCllbmQ7CisgICAgKHZvaWQpY2hlY2tfb25seTsKKyMgIGVuZGlmCisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKworICBzdGF0ZSBTdGF0ZTsKKyAgY29uc3QgY206OnN0cmluZ192aWV3IFBhdGg7CisgIGNtOjpzdHJpbmdfdmlldyBFbnRyeTsKK307CisKKy8vIGNsYXNzIHVuaWNvZGVfaGVscGVyCit2b2lkIHVuaWNvZGVfaGVscGVyOjphcHBlbmQoc3RkOjpzdHJpbmcmIHN0ciwgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQpCit7CisgIGlmIChjb2RlcG9pbnQgPD0gMHg3ZikgeworICAgIHN0ci5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4oY29kZXBvaW50KSk7CisgIH0gZWxzZSBpZiAoY29kZXBvaW50ID49IDB4ODAgJiYgY29kZXBvaW50IDw9IDB4N2ZmKSB7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoY29kZXBvaW50ID4+IDYpICsgMTkyKSk7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoY29kZXBvaW50ICYgMHgzZikgKyAxMjgpKTsKKyAgfSBlbHNlIGlmICgoY29kZXBvaW50ID49IDB4ODAwICYmIGNvZGVwb2ludCA8PSAweGQ3ZmYpIHx8CisgICAgICAgICAgICAgKGNvZGVwb2ludCA+PSAweGUwMDAgJiYgY29kZXBvaW50IDw9IDB4ZmZmZikpIHsKKyAgICBzdHIucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KChjb2RlcG9pbnQgPj4gMTIpICsgMjI0KSk7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoKGNvZGVwb2ludCAmIDB4ZmZmKSA+PiA2KSArIDEyOCkpOworICAgIHN0ci5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4oKGNvZGVwb2ludCAmIDB4M2YpICsgMTI4KSk7CisgIH0gZWxzZSBpZiAoY29kZXBvaW50ID49IDB4MTAwMDAgJiYgY29kZXBvaW50IDw9IDB4MTBmZmZmKSB7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoY29kZXBvaW50ID4+IDE4KSArIDI0MCkpOworICAgIHN0ci5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4oKChjb2RlcG9pbnQgJiAweDNmZmZmKSA+PiAxMikgKyAxMjgpKTsKKyAgICBzdHIucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KCgoY29kZXBvaW50ICYgMHhmZmYpID4+IDYpICsgMTI4KSk7CisgICAgc3RyLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigoY29kZXBvaW50ICYgMHgzZikgKyAxMjgpKTsKKyAgfSBlbHNlIHsKKyAgICBhcHBlbmQoc3RyLCAweGZmZmQpOworICB9Cit9CisKK3VuaWNvZGVfaGVscGVyOjp1dGY4X3N0YXRlIHVuaWNvZGVfaGVscGVyOjpkZWNvZGUoY29uc3QgdXRmOF9zdGF0ZSBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1aW50OF90IGZyYWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVpbnQzMl90JiBjb2RlcG9pbnQpCit7CisgIGNvbnN0IHN0ZDo6dWludDMyX3QgdXRmOF9zdGF0ZV9pbmZvW10gPSB7CisgICAgLy8gZW5jb2RlZCBzdGF0ZXMKKyAgICAweDExMTExMTExdSwgMHgxMTExMTExMXUsIDB4Nzc3Nzc3Nzd1LCAweDc3Nzc3Nzc3dSwgMHg4ODg4ODg4OHUsCisgICAgMHg4ODg4ODg4OHUsIDB4ODg4ODg4ODh1LCAweDg4ODg4ODg4dSwgMHgyMjIyMjI5OXUsIDB4MjIyMjIyMjJ1LAorICAgIDB4MjIyMjIyMjJ1LCAweDIyMjIyMjIydSwgMHgzMzMzMzMzYXUsIDB4MzM0MzMzMzN1LCAweDk5OTU2NjZidSwKKyAgICAweDk5OTk5OTk5dSwgMHg4ODg4ODg4MHUsIDB4MjI4MTgxMDh1LCAweDg4ODg4ODgxdSwgMHg4ODg4ODg4MnUsCisgICAgMHg4ODg4ODg4NHUsIDB4ODg4ODg4ODd1LCAweDg4ODg4ODg2dSwgMHg4MjIxODEwOHUsIDB4ODIyODExMDh1LAorICAgIDB4ODg4ODg4ODh1LCAweDg4ODg4ODgzdSwgMHg4ODg4ODg4NXUsIDB1LCAgICAgICAgICAwdSwKKyAgICAwdSwgICAgICAgICAgMHUsCisgIH07CisgIHN0ZDo6dWludDhfdCBjYXRlZ29yeSA9IGZyYWdtZW50IDwgMTI4CisgICAgPyAwCisgICAgOiAodXRmOF9zdGF0ZV9pbmZvWyhmcmFnbWVudCA+PiAzKSAmIDB4Zl0gPj4gKChmcmFnbWVudCAmIDcpIDw8IDIpKSAmIDB4ZjsKKyAgY29kZXBvaW50ID0gKHN0YXRlID8gKGNvZGVwb2ludCA8PCA2KSB8IChmcmFnbWVudCAmIDB4M2Z1KQorICAgICAgICAgICAgICAgICAgICAgOiAoMHhmZnUgPj4gY2F0ZWdvcnkpICYgZnJhZ21lbnQpOworICByZXR1cm4gc3RhdGUgPT0gc19yZWplY3QKKyAgICA/IHNfcmVqZWN0CisgICAgOiBzdGF0aWNfY2FzdDx1dGY4X3N0YXRlPigKKyAgICAgICAgKHV0Zjhfc3RhdGVfaW5mb1tjYXRlZ29yeSArIDE2XSA+PiAoc3RhdGUgPDwgMikpICYgMHhmKTsKK30KKworfSAvLyBpbnRlcm5hbHMKKworLy8gQ2xhc3MgcGF0aAorcGF0aCYgcGF0aDo6b3BlcmF0b3IvPShjb25zdCBwYXRoJiBwKQoreworICBpZiAocC5pc19hYnNvbHV0ZSgpIHx8CisgICAgICAocC5oYXNfcm9vdF9uYW1lKCkgJiYgcC5nZXRfcm9vdF9uYW1lKCkgIT0gdGhpcy0+Z2V0X3Jvb3RfbmFtZSgpKSkgeworICAgIHRoaXMtPnBhdGhfID0gcC5wYXRoXzsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgaWYgKHAuaGFzX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICB0aGlzLT5wYXRoXyA9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPih0aGlzLT5nZXRfcm9vdF9uYW1lKCkpOworICAgIHRoaXMtPnBhdGhfICs9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihwLmdldF9yb290X2RpcmVjdG9yeSgpKTsKKyAgfSBlbHNlIGlmICh0aGlzLT5oYXNfZmlsZW5hbWUoKSkgeworICAgIHRoaXMtPnBhdGhfICs9IHRoaXMtPnByZWZlcnJlZF9zZXBhcmF0b3I7CisjICBpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIC8vIHNwZWNpYWwgY2FzZTogIi8vaG9zdCIgLyAiYiIgPT4gIi8vaG9zdC9iIgorICB9IGVsc2UgaWYgKHRoaXMtPmhhc19yb290X25hbWUoKSAmJiAhdGhpcy0+aGFzX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICBpZiAodGhpcy0+cGF0aF8ubGVuZ3RoKCkgPj0gMyAmJgorICAgICAgICAodGhpcy0+cGF0aF9bMF0gPT0gJy8nCisjICAgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgICAgICAgfHwgdGhpcy0+cGF0aF9bMF0gPT0gJ1xcJworIyAgICBlbmRpZgorICAgICAgICAgKSAmJgorICAgICAgICAodGhpcy0+cGF0aF9bMV0gPT0gJy8nCisjICAgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgICAgICAgfHwgdGhpcy0+cGF0aF9bMV0gPT0gJ1xcJworIyAgICBlbmRpZgorICAgICAgICAgKSAmJgorICAgICAgICAodGhpcy0+cGF0aF9bMl0gIT0gJy8nCisjICAgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgICAgICAgJiYgdGhpcy0+cGF0aF9bMl0gIT0gJ1xcJworIyAgICBlbmRpZgorICAgICAgICAgKSkgeworICAgICAgdGhpcy0+cGF0aF8gKz0gdGhpcy0+cHJlZmVycmVkX3NlcGFyYXRvcjsKKyAgICB9CisjICBlbmRpZgorICB9CisKKyAgdGhpcy0+cGF0aF8gKz0gcC5nZXRfcmVsYXRpdmVfcGF0aCgpOworICByZXR1cm4gKnRoaXM7Cit9CisKK3BhdGggcGF0aDo6bGV4aWNhbGx5X25vcm1hbCgpIGNvbnN0Cit7CisgIGlmICh0aGlzLT5wYXRoXy5lbXB0eSgpKSB7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgY29uc3QgY206OnN0cmluZ192aWV3IGRvdCA9ICIuIl9zOworICBjb25zdCBjbTo6c3RyaW5nX3ZpZXcgZG90ZG90ID0gIi4uIl9zOworCisgIHN0ZDo6dmVjdG9yPGNtOjpzdHJpbmdfdmlldz4gcm9vdF9wYXJ0czsKKyAgc3RkOjp2ZWN0b3I8Y206OnN0cmluZ192aWV3PiBwYXJ0czsKKyAgYm9vbCByb290X2RpcmVjdG9yeV9kZWZpbmVkID0gZmFsc2U7CisgIGJvb2wgbmVlZF9maW5hbF9zZXBhcmF0b3IgPSBmYWxzZTsKKyAgc3RkOjpzaXplX3QgcGF0aF9zaXplID0gMDsKKworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXyk7CisgICsrcGFyc2VyOworICB3aGlsZSAoIXBhcnNlci5hdF9lbmQoKSkgeworICAgIGF1dG8gcGFydCA9ICpwYXJzZXI7CisKKyAgICBpZiAocGFyc2VyLmluX3Jvb3RfbmFtZSgpIHx8IHBhcnNlci5pbl9yb290X2RpcmVjdG9yeSgpKSB7CisgICAgICBpZiAocGFyc2VyLmluX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICAgICAgcm9vdF9kaXJlY3RvcnlfZGVmaW5lZCA9IHRydWU7CisgICAgICB9CisgICAgICByb290X3BhcnRzLnB1c2hfYmFjayhwYXJ0KTsKKyAgICAgIHBhdGhfc2l6ZSArPSBwYXJ0LnNpemUoKTsKKyAgICB9IGVsc2UgaWYgKHBhcnQgPT0gZG90ZG90KSB7CisgICAgICBpZiAoIXBhcnRzLmVtcHR5KCkgJiYgcGFydHMuYmFjaygpICE9IGRvdGRvdCkgeworICAgICAgICBuZWVkX2ZpbmFsX3NlcGFyYXRvciA9IHRydWU7CisgICAgICAgIHBhdGhfc2l6ZSAtPSBwYXJ0cy5iYWNrKCkuc2l6ZSgpOworICAgICAgICBwYXJ0cy5wb3BfYmFjaygpOworICAgICAgfSBlbHNlIGlmICgocGFydHMuZW1wdHkoKSB8fCBwYXJ0cy5iYWNrKCkgPT0gZG90ZG90KSAmJgorICAgICAgICAgICAgICAgICAhcm9vdF9kaXJlY3RvcnlfZGVmaW5lZCkgeworICAgICAgICBwYXJ0cy5wdXNoX2JhY2soZG90ZG90KTsKKyAgICAgICAgcGF0aF9zaXplICs9IDI7CisgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKHBhcnQgPT0gZG90IHx8IHBhcnQuZW1wdHkoKSkgeworICAgICAgbmVlZF9maW5hbF9zZXBhcmF0b3IgPSB0cnVlOworICAgICAgaWYgKHBhcnQuZW1wdHkoKSkgeworICAgICAgICBwYXJ0cy5wdXNoX2JhY2socGFydCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIGZpbGVuYW1lCisgICAgICBuZWVkX2ZpbmFsX3NlcGFyYXRvciA9IGZhbHNlOworICAgICAgcGFydHMucHVzaF9iYWNrKHBhcnQpOworICAgICAgcGF0aF9zaXplICs9IHBhcnQuc2l6ZSgpOworICAgIH0KKyAgICArK3BhcnNlcjsKKyAgfQorCisgIC8vIG5vIGZpbmFsIHNlcGFyYXRvciBpZiBsYXN0IGVsZW1lbnQgb2YgcGF0aCBpcyAiLi4iCisgIG5lZWRfZmluYWxfc2VwYXJhdG9yID0KKyAgICBuZWVkX2ZpbmFsX3NlcGFyYXRvciAmJiAhcGFydHMuZW1wdHkoKSAmJiBwYXJ0cy5iYWNrKCkgIT0gZG90ZG90OworCisgIC8vIGJ1aWxkIGZpbmFsIHBhdGgKKyAgLy8vLyBjb21wdXRlIGZpbmFsIHNpemUgb2YgcGF0aAorICBwYXRoX3NpemUgKz0gcGFydHMuc2l6ZSgpICsgKG5lZWRfZmluYWxfc2VwYXJhdG9yID8gMSA6IDApOworCisgIHN0ZDo6c3RyaW5nIG5wOworICBucC5yZXNlcnZlKHBhdGhfc2l6ZSk7CisgIGZvciAoY29uc3QgYXV0byYgcCA6IHJvb3RfcGFydHMpIHsKKyAgICBucCArPSBwOworICB9CisgIC8vIGNvbnZlcnQgYW55IHNsYXNoIHRvIHRoZSBwcmVmZXJyZWRfc2VwYXJhdG9yCisgIGlmIChzdGF0aWNfY2FzdDxzdGQ6OnN0cmluZzo6dmFsdWVfdHlwZT4odGhpcy0+cHJlZmVycmVkX3NlcGFyYXRvcikgIT0gJy8nKSB7CisgICAgc3RkOjpyZXBsYWNlKAorICAgICAgbnAuYmVnaW4oKSwgbnAuZW5kKCksICcvJywKKyAgICAgIHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nOjp2YWx1ZV90eXBlPih0aGlzLT5wcmVmZXJyZWRfc2VwYXJhdG9yKSk7CisgIH0KKyAgZm9yIChjb25zdCBhdXRvJiBwIDogcGFydHMpIHsKKyAgICBpZiAoIXAuZW1wdHkoKSkgeworICAgICAgbnAgKz0gcDsKKyAgICAgIG5wICs9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nOjp2YWx1ZV90eXBlPih0aGlzLT5wcmVmZXJyZWRfc2VwYXJhdG9yKTsKKyAgICB9CisgIH0KKyAgaWYgKCFwYXJ0cy5lbXB0eSgpICYmICFuZWVkX2ZpbmFsX3NlcGFyYXRvcikgeworICAgIC8vIHJlbW92ZSBleHRyYSBzZXBhcmF0b3IKKyAgICBucC5wb3BfYmFjaygpOworICB9CisgIGlmIChucC5lbXB0eSgpKSB7CisgICAgbnAuYXNzaWduKDEsICcuJyk7CisgIH0KKworICByZXR1cm4gcGF0aChzdGQ6Om1vdmUobnApKTsKK30KKworcGF0aCBwYXRoOjpsZXhpY2FsbHlfcmVsYXRpdmUoY29uc3QgcGF0aCYgYmFzZSkgY29uc3QKK3sKKyAgaW50ZXJuYWxzOjpwYXRoX3BhcnNlciBwYXJzZXIodGhpcy0+cGF0aF8pOworICArK3BhcnNlcjsKKyAgaW50ZXJuYWxzOjpwYXRoX3BhcnNlciBwYXJzZXJiYXNlKGJhc2UucGF0aF8pOworICArK3BhcnNlcmJhc2U7CisgIGNtOjpzdHJpbmdfdmlldyB0aGlzX3Jvb3RfbmFtZSwgYmFzZV9yb290X25hbWU7CisgIGNtOjpzdHJpbmdfdmlldyB0aGlzX3Jvb3RfZGlyLCBiYXNlX3Jvb3RfZGlyOworCisgIGlmIChwYXJzZXIuaW5fcm9vdF9uYW1lKCkpIHsKKyAgICB0aGlzX3Jvb3RfbmFtZSA9ICpwYXJzZXI7CisgICAgKytwYXJzZXI7CisgIH0KKyAgaWYgKHBhcnNlci5pbl9yb290X2RpcmVjdG9yeSgpKSB7CisgICAgdGhpc19yb290X2RpciA9ICpwYXJzZXI7CisgICAgKytwYXJzZXI7CisgIH0KKyAgaWYgKHBhcnNlcmJhc2UuaW5fcm9vdF9uYW1lKCkpIHsKKyAgICBiYXNlX3Jvb3RfbmFtZSA9ICpwYXJzZXJiYXNlOworICAgICsrcGFyc2VyYmFzZTsKKyAgfQorICBpZiAocGFyc2VyYmFzZS5pbl9yb290X2RpcmVjdG9yeSgpKSB7CisgICAgYmFzZV9yb290X2RpciA9ICpwYXJzZXJiYXNlOworICAgICsrcGFyc2VyYmFzZTsKKyAgfQorCisgIGF1dG8gaXNfcGF0aF9hYnNvbHV0ZSA9IFtdKGNtOjpzdHJpbmdfdmlldyBybiwgY206OnN0cmluZ192aWV3IHJkKSAtPiBib29sIHsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIHJldHVybiAhcm4uZW1wdHkoKSAmJiAhcmQuZW1wdHkoKTsKKyMgIGVsc2UKKyAgICAodm9pZClybjsKKyAgICByZXR1cm4gIXJkLmVtcHR5KCk7CisjICBlbmRpZgorICB9OworCisgIGlmICh0aGlzX3Jvb3RfbmFtZSAhPSBiYXNlX3Jvb3RfbmFtZSB8fAorICAgICAgaXNfcGF0aF9hYnNvbHV0ZSh0aGlzX3Jvb3RfbmFtZSwgdGhpc19yb290X2RpcikgIT0KKyAgICAgICAgaXNfcGF0aF9hYnNvbHV0ZShiYXNlX3Jvb3RfbmFtZSwgYmFzZV9yb290X2RpcikgfHwKKyAgICAgICh0aGlzX3Jvb3RfZGlyLmVtcHR5KCkgJiYgIWJhc2Vfcm9vdF9kaXIuZW1wdHkoKSkpIHsKKyAgICByZXR1cm4gcGF0aCgpOworICB9CisKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAvLyBMV0czMDcwIGhhbmRsZSBzcGVjaWFsIGNhc2U6IGZpbGVuYW1lIGNhbiBhbHNvIGJlIGEgcm9vdC1uYW1lCisgIGF1dG8gaXNfZHJpdmVfbmFtZSA9IFtdKGNtOjpzdHJpbmdfdmlldyBpdGVtKSAtPiBib29sIHsKKyAgICByZXR1cm4gaXRlbS5sZW5ndGgoKSA9PSAyICYmIGl0ZW1bMV0gPT0gJzonOworICB9OworICBwYXJzZXIucmVzZXQoKTsKKyAgcGFyc2VyLnNlZWsoaW50ZXJuYWxzOjpwYXRoX3BhcnNlcjo6c2Vla19wb3NpdGlvbjo6cm9vdF9kaXJlY3RvcnkpOworICB3aGlsZSAoIXBhcnNlci5hdF9lbmQoKSkgeworICAgIGlmIChpc19kcml2ZV9uYW1lKCpwYXJzZXIpKSB7CisgICAgICByZXR1cm4gcGF0aCgpOworICAgIH0KKyAgICArK3BhcnNlcjsKKyAgfQorICBwYXJzZXJiYXNlLnJlc2V0KCk7CisgIHBhcnNlcmJhc2Uuc2VlayhpbnRlcm5hbHM6OnBhdGhfcGFyc2VyOjpzZWVrX3Bvc2l0aW9uOjpyb290X2RpcmVjdG9yeSk7CisgIHdoaWxlICghcGFyc2VyYmFzZS5hdF9lbmQoKSkgeworICAgIGlmIChpc19kcml2ZV9uYW1lKCpwYXJzZXJiYXNlKSkgeworICAgICAgcmV0dXJuIHBhdGgoKTsKKyAgICB9CisgICAgKytwYXJzZXJiYXNlOworICB9CisjICBlbmRpZgorCisgIGNvbnN0IGNtOjpzdHJpbmdfdmlldyBkb3QgPSAiLiJfczsKKyAgY29uc3QgY206OnN0cmluZ192aWV3IGRvdGRvdCA9ICIuLiJfczsKKworICBhdXRvIGEgPSB0aGlzLT5iZWdpbigpLCBhZW5kID0gdGhpcy0+ZW5kKCk7CisgIGF1dG8gYiA9IGJhc2UuYmVnaW4oKSwgYmVuZCA9IGJhc2UuZW5kKCk7CisgIHdoaWxlIChhICE9IGFlbmQgJiYgYiAhPSBiZW5kICYmIGEtPnN0cmluZygpID09IGItPnN0cmluZygpKSB7CisgICAgKythOworICAgICsrYjsKKyAgfQorCisgIGludCBjb3VudCA9IDA7CisgIGZvciAoOyBiICE9IGJlbmQ7ICsrYikgeworICAgIGF1dG8gcGFydCA9ICpiOworICAgIGlmIChwYXJ0ID09IGRvdGRvdCkgeworICAgICAgLS1jb3VudDsKKyAgICB9IGVsc2UgaWYgKHBhcnQuc3RyaW5nKCkgIT0gZG90ICYmICFwYXJ0LmVtcHR5KCkpIHsKKyAgICAgICsrY291bnQ7CisgICAgfQorICB9CisKKyAgaWYgKGNvdW50ID09IDAgJiYgKGEgPT0gdGhpcy0+ZW5kKCkgfHwgYS0+ZW1wdHkoKSkpIHsKKyAgICByZXR1cm4gcGF0aChkb3QpOworICB9CisgIGlmIChjb3VudCA+PSAwKSB7CisgICAgcGF0aCByZXN1bHQ7CisgICAgcGF0aCBwX2RvdGRvdChkb3Rkb3QpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgcmVzdWx0IC89IHBfZG90ZG90OworICAgIH0KKyAgICBmb3IgKDsgYSAhPSBhZW5kOyArK2EpIHsKKyAgICAgIHJlc3VsdCAvPSAqYTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICAvLyBjb3VudCA8IDAKKyAgcmV0dXJuIHBhdGgoKTsKK30KKworcGF0aDo6cGF0aF90eXBlIHBhdGg6OmdldF9nZW5lcmljKCkgY29uc3QKK3sKKyAgYXV0byBnZW5fcGF0aCA9IHRoaXMtPnBhdGhfOworICBhdXRvIHN0YXJ0ID0gZ2VuX3BhdGguYmVnaW4oKTsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICBzdGQ6OnJlcGxhY2UoZ2VuX3BhdGguYmVnaW4oKSwgZ2VuX3BhdGguZW5kKCksICdcXCcsICcvJyk7CisgIC8vIHByZXNlcnZlIHNwZWNpYWwgc3ludGF4IGZvciByb290X25hbWUgKCcvL3NlcnZlcicgb3IgJy8vPycpCisgIGlmIChnZW5fcGF0aC5sZW5ndGgoKSA+IDIgJiYgZ2VuX3BhdGhbMl0gIT0gJy8nKSB7CisgICAgc3RhcnQgKz0gMjsKKyAgfQorIyAgZW5kaWYKKyAgLy8gcmVtb3ZlIGR1cGxpY2F0ZSBzZXBhcmF0b3JzCisgIGF1dG8gbmV3X2VuZCA9IHN0ZDo6dW5pcXVlKHN0YXJ0LCBnZW5fcGF0aC5lbmQoKSwgW10oY2hhciBsaHMsIGNoYXIgcmhzKSB7CisgICAgcmV0dXJuIGxocyA9PSByaHMgJiYgbGhzID09ICcvJzsKKyAgfSk7CisgIGdlbl9wYXRoLmVyYXNlKG5ld19lbmQsIGdlbl9wYXRoLmVuZCgpKTsKKyAgcmV0dXJuIGdlbl9wYXRoOworfQorCitjbTo6c3RyaW5nX3ZpZXcgcGF0aDo6Z2V0X3Jvb3RfbmFtZSgpIGNvbnN0Cit7CisgIGludGVybmFsczo6cGF0aF9wYXJzZXIgcGFyc2VyKHRoaXMtPnBhdGhfKTsKKyAgKytwYXJzZXI7CisgIGlmIChwYXJzZXIuaW5fcm9vdF9uYW1lKCkpIHsKKyAgICByZXR1cm4gKnBhcnNlcjsKKyAgfQorICByZXR1cm4ge307Cit9CisKK2NtOjpzdHJpbmdfdmlldyBwYXRoOjpnZXRfcm9vdF9kaXJlY3RvcnkoKSBjb25zdAoreworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXyk7CisgICsrcGFyc2VyOworICBpZiAocGFyc2VyLmluX3Jvb3RfbmFtZSgpKSB7CisgICAgKytwYXJzZXI7CisgIH0KKyAgaWYgKHBhcnNlci5pbl9yb290X2RpcmVjdG9yeSgpKSB7CisgICAgcmV0dXJuICpwYXJzZXI7CisgIH0KKyAgcmV0dXJuIHt9OworfQorCitjbTo6c3RyaW5nX3ZpZXcgcGF0aDo6Z2V0X3JlbGF0aXZlX3BhdGgoKSBjb25zdAoreworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXyk7CisgIHBhcnNlci5zZWVrKGludGVybmFsczo6cGF0aF9wYXJzZXI6OnNlZWtfcG9zaXRpb246OnJvb3RfZGlyZWN0b3J5KTsKKyAgaWYgKHBhcnNlci5hdF9lbmQoKSkgeworICAgIHJldHVybiB7fTsKKyAgfQorICByZXR1cm4gcGFyc2VyLnBlZWsoaW50ZXJuYWxzOjpwYXRoX3BhcnNlcjo6cGVla19mcmFnbWVudDo6cmVtYWluZGVyKTsKK30KKworY206OnN0cmluZ192aWV3IHBhdGg6OmdldF9wYXJlbnRfcGF0aCgpIGNvbnN0Cit7CisgIGlmICghdGhpcy0+aGFzX3JlbGF0aXZlX3BhdGgoKSkgeworICAgIHJldHVybiB0aGlzLT5wYXRoXzsKKyAgfQorCisgIC8vIHBlZWstdXAgZnVsbCBwYXRoIG1pbnVzIGxhc3QgZWxlbWVudAorICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXywgdHJ1ZSk7CisgIC0tcGFyc2VyOworICBpZiAocGFyc2VyLmF0X3N0YXJ0KCkpIHsKKyAgICByZXR1cm4ge307CisgIH0KKyAgLS1wYXJzZXI7CisgIHJldHVybiBwYXJzZXIucGVlayhpbnRlcm5hbHM6OnBhdGhfcGFyc2VyOjpwZWVrX2ZyYWdtZW50OjpwYXRoKTsKK30KKworY206OnN0cmluZ192aWV3IHBhdGg6OmdldF9maWxlbmFtZSgpIGNvbnN0Cit7CisgIHsKKyAgICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcih0aGlzLT5wYXRoXyk7CisgICAgcGFyc2VyLnNlZWsoaW50ZXJuYWxzOjpwYXRoX3BhcnNlcjo6c2Vla19wb3NpdGlvbjo6cm9vdF9kaXJlY3RvcnkpOworICAgIGlmIChwYXJzZXIuYXRfZW5kKCkpIHsKKyAgICAgIHJldHVybiB7fTsKKyAgICB9CisgIH0KKyAgeworICAgIGludGVybmFsczo6cGF0aF9wYXJzZXIgcGFyc2VyKHRoaXMtPnBhdGhfLCB0cnVlKTsKKyAgICByZXR1cm4gKigtLXBhcnNlcik7CisgIH0KK30KKworY206OnN0cmluZ192aWV3IHBhdGg6OmdldF9maWxlbmFtZV9mcmFnbWVudChmaWxlbmFtZV9mcmFnbWVudCBmcmFnbWVudCkgY29uc3QKK3sKKyAgYXV0byBmaWxlID0gdGhpcy0+Z2V0X2ZpbGVuYW1lKCk7CisKKyAgaWYgKGZpbGUgPT0gIi4iIHx8IGZpbGUgPT0gIi4uIiB8fCBmaWxlLmVtcHR5KCkpIHsKKyAgICByZXR1cm4gZnJhZ21lbnQgPT0gZmlsZW5hbWVfZnJhZ21lbnQ6OnN0ZW0gPyBmaWxlIDogY206OnN0cmluZ192aWV3e307CisgIH0KKworICBhdXRvIHBvcyA9IGZpbGUuZmluZF9sYXN0X29mKCcuJyk7CisgIGlmIChwb3MgPT0gY206OnN0cmluZ192aWV3OjpucG9zIHx8IHBvcyA9PSAwKSB7CisgICAgcmV0dXJuIGZyYWdtZW50ID09IGZpbGVuYW1lX2ZyYWdtZW50OjpzdGVtID8gZmlsZSA6IGNtOjpzdHJpbmdfdmlld3t9OworICB9CisgIHJldHVybiBmcmFnbWVudCA9PSBmaWxlbmFtZV9mcmFnbWVudDo6c3RlbSA/IGZpbGUuc3Vic3RyKDAsIHBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmlsZS5zdWJzdHIocG9zKTsKK30KKworaW50IHBhdGg6OmNvbXBhcmVfcGF0aChjbTo6c3RyaW5nX3ZpZXcgc3RyKSBjb25zdAoreworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHRoaXNfcHAodGhpcy0+cGF0aF8pOworICArK3RoaXNfcHA7CisgIGludGVybmFsczo6cGF0aF9wYXJzZXIgb3RoZXJfcHAoc3RyKTsKKyAgKytvdGhlcl9wcDsKKworICAvLyBjb21wYXJlIHJvb3RfbmFtZSBwYXJ0CisgIHsKKyAgICBib29sIGNvbXBhcmVfcm9vdF9uYW1lcyA9IGZhbHNlOworICAgIGNtOjpzdHJpbmdfdmlldyB0aGlzX3Jvb3RfbmFtZSwgb3RoZXJfcm9vdF9uYW1lOworICAgIGludCByZXM7CisKKyAgICBpZiAodGhpc19wcC5pbl9yb290X25hbWUoKSkgeworICAgICAgY29tcGFyZV9yb290X25hbWVzID0gdHJ1ZTsKKyAgICAgIHRoaXNfcm9vdF9uYW1lID0gKnRoaXNfcHA7CisgICAgICArK3RoaXNfcHA7CisgICAgfQorICAgIGlmIChvdGhlcl9wcC5pbl9yb290X25hbWUoKSkgeworICAgICAgY29tcGFyZV9yb290X25hbWVzID0gdHJ1ZTsKKyAgICAgIG90aGVyX3Jvb3RfbmFtZSA9ICpvdGhlcl9wcDsKKyAgICAgICsrb3RoZXJfcHA7CisgICAgfQorICAgIGlmIChjb21wYXJlX3Jvb3RfbmFtZXMgJiYKKyAgICAgICAgKHJlcyA9IHRoaXNfcm9vdF9uYW1lLmNvbXBhcmUob3RoZXJfcm9vdF9uYW1lKSAhPSAwKSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKworICAvLyBjb21wYXJlIHJvb3RfZGlyZWN0b3J5IHBhcnQKKyAgeworICAgIGlmICghdGhpc19wcC5pbl9yb290X2RpcmVjdG9yeSgpICYmIG90aGVyX3BwLmluX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKHRoaXNfcHAuaW5fcm9vdF9kaXJlY3RvcnkoKSAmJiAhb3RoZXJfcHAuaW5fcm9vdF9kaXJlY3RvcnkoKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmICh0aGlzX3BwLmluX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICAgICsrdGhpc19wcDsKKyAgICB9CisgICAgaWYgKG90aGVyX3BwLmluX3Jvb3RfZGlyZWN0b3J5KCkpIHsKKyAgICAgICsrb3RoZXJfcHA7CisgICAgfQorICB9CisKKyAgLy8gY29tcGFyZSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBwYXRocworICB3aGlsZSAoIXRoaXNfcHAuYXRfZW5kKCkgJiYgIW90aGVyX3BwLmF0X2VuZCgpKSB7CisgICAgaW50IHJlczsKKyAgICBpZiAoKHJlcyA9ICgqdGhpc19wcCkuY29tcGFyZSgqb3RoZXJfcHApKSAhPSAwKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICArK3RoaXNfcHA7CisgICAgKytvdGhlcl9wcDsKKyAgfQorCisgIC8vIGZpbmFsIHN0ZXAKKyAgaWYgKHRoaXNfcHAuYXRfZW5kKCkgJiYgIW90aGVyX3BwLmF0X2VuZCgpKSB7CisgICAgcmV0dXJuIC0xOworICB9IGVsc2UgaWYgKCF0aGlzX3BwLmF0X2VuZCgpICYmIG90aGVyX3BwLmF0X2VuZCgpKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworLy8gQ2xhc3MgcGF0aDo6aXRlcmF0b3IKK3BhdGg6Oml0ZXJhdG9yOjppdGVyYXRvcigpCisgIDogcGF0aF8obnVsbHB0cikKK3sKK30KK3BhdGg6Oml0ZXJhdG9yOjppdGVyYXRvcihjb25zdCBpdGVyYXRvciYgb3RoZXIpCit7CisgIHRoaXMtPnBhdGhfID0gb3RoZXIucGF0aF87CisgIGlmIChvdGhlci5wYXJzZXJfKSB7CisgICAgdGhpcy0+cGFyc2VyXyA9IGNtOjptYWtlX3VuaXF1ZTxpbnRlcm5hbHM6OnBhdGhfcGFyc2VyPigqb3RoZXIucGFyc2VyXyk7CisgICAgdGhpcy0+cGF0aF9lbGVtZW50XyA9IHBhdGgoKip0aGlzLT5wYXJzZXJfKTsKKyAgfQorfQorcGF0aDo6aXRlcmF0b3I6Oml0ZXJhdG9yKGNvbnN0IHBhdGgqIHAsIGJvb2wgYXRfZW5kKQorICA6IHBhdGhfKHApCisgICwgcGFyc2VyXyhjbTo6bWFrZV91bmlxdWU8aW50ZXJuYWxzOjpwYXRoX3BhcnNlcj4ocC0+cGF0aF8sIGF0X2VuZCkpCit7CisgIGlmICghYXRfZW5kKSB7CisgICAgKysoKnRoaXMtPnBhcnNlcl8pOworICAgIHRoaXMtPnBhdGhfZWxlbWVudF8gPSBwYXRoKCoqdGhpcy0+cGFyc2VyXyk7CisgIH0KK30KKworcGF0aDo6aXRlcmF0b3I6On5pdGVyYXRvcigpID0gZGVmYXVsdDsKKworcGF0aDo6aXRlcmF0b3ImIHBhdGg6Oml0ZXJhdG9yOjpvcGVyYXRvcj0oY29uc3QgaXRlcmF0b3ImIG90aGVyKQoreworICB0aGlzLT5wYXRoXyA9IG90aGVyLnBhdGhfOworICBpZiAob3RoZXIucGFyc2VyXykgeworICAgIHRoaXMtPnBhcnNlcl8gPSBjbTo6bWFrZV91bmlxdWU8aW50ZXJuYWxzOjpwYXRoX3BhcnNlcj4oKm90aGVyLnBhcnNlcl8pOworICAgIHRoaXMtPnBhdGhfZWxlbWVudF8gPSBwYXRoKCoqdGhpcy0+cGFyc2VyXyk7CisgIH0KKworICByZXR1cm4gKnRoaXM7Cit9CisKK3BhdGg6Oml0ZXJhdG9yJiBwYXRoOjppdGVyYXRvcjo6b3BlcmF0b3IrKygpCit7CisgIGFzc2VydCh0aGlzLT5wYXJzZXJfKTsKKworICBpZiAodGhpcy0+cGFyc2VyXykgeworICAgIGFzc2VydCghdGhpcy0+cGFyc2VyXy0+YXRfZW5kKCkpOworCisgICAgaWYgKCF0aGlzLT5wYXJzZXJfLT5hdF9lbmQoKSkgeworICAgICAgKysoKnRoaXMtPnBhcnNlcl8pOworICAgICAgaWYgKHRoaXMtPnBhcnNlcl8tPmF0X2VuZCgpKSB7CisgICAgICAgIHRoaXMtPnBhdGhfZWxlbWVudF8gPSBwYXRoKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLT5wYXRoX2VsZW1lbnRfID0gcGF0aCgqKnRoaXMtPnBhcnNlcl8pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAqdGhpczsKK30KKworcGF0aDo6aXRlcmF0b3ImIHBhdGg6Oml0ZXJhdG9yOjpvcGVyYXRvci0tKCkKK3sKKyAgYXNzZXJ0KHRoaXMtPnBhcnNlcl8pOworCisgIGlmICh0aGlzLT5wYXJzZXJfKSB7CisgICAgYXNzZXJ0KCF0aGlzLT5wYXJzZXJfLT5hdF9zdGFydCgpKTsKKworICAgIGlmICghdGhpcy0+cGFyc2VyXy0+YXRfc3RhcnQoKSkgeworICAgICAgLS0oKnRoaXMtPnBhcnNlcl8pOworICAgICAgdGhpcy0+cGF0aF9lbGVtZW50XyA9IHBhdGgoKip0aGlzLT5wYXJzZXJfKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoOjppdGVyYXRvciYgbGhzLCBjb25zdCBwYXRoOjppdGVyYXRvciYgcmhzKQoreworICByZXR1cm4gbGhzLnBhdGhfID09IHJocy5wYXRoXyAmJiBsaHMucGFyc2VyXyAhPSBudWxscHRyICYmCisgICAgKChsaHMucGFyc2VyXy0+YXRfZW5kKCkgJiYgcmhzLnBhcnNlcl8tPmF0X2VuZCgpKSB8fAorICAgICAobGhzLnBhcnNlcl8tPmF0X3N0YXJ0KCkgJiYgcmhzLnBhcnNlcl8tPmF0X3N0YXJ0KCkpIHx8CisgICAgICgoKipsaHMucGFyc2VyXykuZGF0YSgpID09ICgqKnJocy5wYXJzZXJfKS5kYXRhKCkpKTsKK30KKworc3RkOjpzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBwKSBub2V4Y2VwdAoreworICBpbnRlcm5hbHM6OnBhdGhfcGFyc2VyIHBhcnNlcihwLnBhdGhfKTsKKyAgc3RkOjpoYXNoPGNtOjpzdHJpbmdfdmlldz4gaGFzaGVyOworICBzdGQ6OnNpemVfdCB2YWx1ZSA9IDA7CisKKyAgd2hpbGUgKCFwYXJzZXIuYXRfZW5kKCkpIHsKKyAgICB2YWx1ZSA9IGhhc2hlcigqcGFyc2VyKSArIDB4OWUzNzc5YjkgKyAodmFsdWUgPDwgNikgKyAodmFsdWUgPj4gMik7CisgICAgKytwYXJzZXI7CisgIH0KKworICByZXR1cm4gdmFsdWU7Cit9Cit9IC8vIGZpbGVzeXN0ZW0KK30gLy8gY20KKworI2Vsc2UKKworLy8gQXZvaWQgZW1wdHkgdHJhbnNsYXRpb24gdW5pdC4KK3ZvaWQgY21fZmlsZXN5c3RlbV9wYXRoX2N4eCgpCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9iaXRzL3N0cmluZ192aWV3LmN4eCBiL1V0aWxpdGllcy9zdGQvY20vYml0cy9zdHJpbmdfdmlldy5jeHgKaW5kZXggZTM0NWZkMy4uNTM4MWZlNiAxMDA2NDQKLS0tIGEvVXRpbGl0aWVzL3N0ZC9jbS9iaXRzL3N0cmluZ192aWV3LmN4eAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL2JpdHMvc3RyaW5nX3ZpZXcuY3h4CkBAIC05LDcgKzksNyBAQAogIyAgaW5jbHVkZSA8b3N0cmVhbT4KICMgIGluY2x1ZGUgPHN0ZGV4Y2VwdD4KIAotIyAgaW5jbHVkZSAiY21fa3dpbWwuaCIKKyMgIGluY2x1ZGUgPGNtM3Ava3dpbWwvaW50Lmg+CiAKIG5hbWVzcGFjZSBjbSB7CiAKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY20vZGVxdWUgYi9VdGlsaXRpZXMvc3RkL2NtL2RlcXVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYjY3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL2RlcXVlCkBAIC0wLDAgKzEsNDAgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtX2RlcXVlCisjZGVmaW5lIGNtX2RlcXVlCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZGVxdWU+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworbmFtZXNwYWNlIGNtIHsKKworLy8gc2hvdWxkIGJlIHVwZGF0ZWQgd2hlbiBDKysyMCBpcyBmaW5hbGl6ZWQKKyNpZiAoX19jcGx1c3BsdXMgPiAyMDE3MDNMIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKGRlZmluZWQoX01TVkNfTEFORykgJiYgX01TVkNfTEFORyA+IDIwMTcwMykpICYmICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZGVmaW5lZChfX2NwcF9saWJfZXJhc2VfaWYpCisKK3VzaW5nIHN0ZDo6ZXJhc2U7Cit1c2luZyBzdGQ6OmVyYXNlX2lmOworCisjZWxzZQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxsb2NhdG9yLCB0eXBlbmFtZSBWPgoraW5saW5lIHZvaWQgZXJhc2Uoc3RkOjpkZXF1ZTxULCBBbGxvY2F0b3I+JiBjb250LCBjb25zdCBWJiB2YWx1ZSkKK3sKKyAgY29udC5lcmFzZShzdGQ6OnJlbW92ZShjb250LmJlZ2luKCksIGNvbnQuZW5kKCksIHZhbHVlKSwgY29udC5lbmQoKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKHN0ZDo6ZGVxdWU8VCwgQWxsb2NhdG9yPiYgY29udCwgUHJlZGljYXRlIHByZWQpCit7CisgIGNvbnQuZXJhc2Uoc3RkOjpyZW1vdmVfaWYoY29udC5iZWdpbigpLCBjb250LmVuZCgpLCBwcmVkKSwgY29udC5lbmQoKSk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBjbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY20vZmlsZXN5c3RlbSBiL1V0aWxpdGllcy9zdGQvY20vZmlsZXN5c3RlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDIxNzEyCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS9maWxlc3lzdGVtCkBAIC0wLDAgKzEsMTE3NSBAQAorLy8gLSotYysrLSotCisvLyB2aW06IHNldCBmdD1jcHA6CisKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21fZmlsZXN5c3RlbQorI2RlZmluZSBjbV9maWxlc3lzdGVtCisKKyNpbmNsdWRlICJjbVNUTC5oeHgiIC8vIElXWVUgcHJhZ21hOiBrZWVwCisKKyNpZiBkZWZpbmVkKENNYWtlX0hBVkVfQ1hYX0ZJTEVTWVNURU0pCisKKyMgIGluY2x1ZGUgPGZpbGVzeXN0ZW0+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworI2Vsc2UKKworIyAgaW5jbHVkZSA8Y3N0ZGRlZj4KKyMgIGluY2x1ZGUgPGNzdGRpbnQ+CisjICBpbmNsdWRlIDxpb3N0cmVhbT4KKyMgIGluY2x1ZGUgPGl0ZXJhdG9yPgorIyAgaW5jbHVkZSA8bWVtb3J5PgorIyAgaW5jbHVkZSA8c3RyaW5nPgorIyAgaW5jbHVkZSA8dXRpbGl0eT4KKworIyAgaW5jbHVkZSA8Y20vaW9tYW5pcD4KKyMgIGluY2x1ZGUgPGNtL3N0cmluZ192aWV3PgorIyAgaW5jbHVkZSA8Y20vdHlwZV90cmFpdHM+CisjICBpbmNsdWRlIDxjbWV4dC9pdGVyYXRvcj4KKworIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjICAgIGluY2x1ZGUgPGFsZ29yaXRobT4KKyMgIGVuZGlmCisKKyNlbmRpZgorCituYW1lc3BhY2UgY20geworbmFtZXNwYWNlIGZpbGVzeXN0ZW0geworCisjaWYgZGVmaW5lZChDTWFrZV9IQVZFX0NYWF9GSUxFU1lTVEVNKQorCit1c2luZyBzdGQ6OmZpbGVzeXN0ZW06OnBhdGg7Cit1c2luZyBzdGQ6OmZpbGVzeXN0ZW06OnN3YXA7Cit1c2luZyBzdGQ6OmZpbGVzeXN0ZW06Omhhc2hfdmFsdWU7CisKKyNlbHNlCisKKyMgIGlmICFkZWZpbmVkKENNX0ZJTEVTWVNURU1fU09VUkNFX1RSQUlUU19JVEVSQVRPUikKKy8vIE9yYWNsZSBEZXZlbG9wZXJTdHVkaW8gQysrIGNvbXBpbGVyIG9uIFNvbGFyaXMvU3BhcmMgZmFpbHMgdG8gY29tcGlsZQorLy8gdGhlIHNvdXJjZV90cmFpdHMgZm9yIGl0ZXJhdG9yIGNoZWNrLiAgU28gZGlzYWJsZSBpdCBmb3Igbm93LgorIyAgICBkZWZpbmUgQ01fRklMRVNZU1RFTV9TT1VSQ0VfVFJBSVRTX0lURVJBVE9SIDAKKyMgIGVuZGlmCisKK25hbWVzcGFjZSBpbnRlcm5hbHMgeworCitjbGFzcyBwYXRoX3BhcnNlcjsKKworY2xhc3MgdW5pY29kZV9oZWxwZXIKK3sKK3Byb3RlY3RlZDoKKyAgdXNpbmcgdXRmOF9zdGF0ZSA9IHVuc2lnbmVkIGNoYXI7CisgIHN0YXRpYyBjb25zdCB1dGY4X3N0YXRlIHNfc3RhcnQgPSAwOworICBzdGF0aWMgY29uc3QgdXRmOF9zdGF0ZSBzX3JlamVjdCA9IDg7CisKKyAgc3RhdGljIGlubGluZSBib29sIGluX3JhbmdlKHN0ZDo6dWludDMyX3QgYywgc3RkOjp1aW50MzJfdCBsbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dWludDMyX3QgaGkpCisgIHsKKyAgICByZXR1cm4gKHN0YXRpY19jYXN0PHN0ZDo6dWludDMyX3Q+KGMgLSBsbykgPCAoaGkgLSBsbyArIDEpKTsKKyAgfQorCisgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19zdXJyb2dhdGUoc3RkOjp1aW50MzJfdCBjKQorICB7CisgICAgcmV0dXJuIGluX3JhbmdlKGMsIDB4ZDgwMCwgMHhkZmZmKTsKKyAgfQorCisgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19oaWdoX3N1cnJvZ2F0ZShzdGQ6OnVpbnQzMl90IGMpCisgIHsKKyAgICByZXR1cm4gKGMgJiAweGZmZmZmYzAwKSA9PSAweGQ4MDA7CisgIH0KKworICBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbG93X3N1cnJvZ2F0ZShzdGQ6OnVpbnQzMl90IGMpCisgIHsKKyAgICByZXR1cm4gKGMgJiAweGZmZmZmYzAwKSA9PSAweGRjMDA7CisgIH0KKworICBzdGF0aWMgdm9pZCBhcHBlbmQoc3RkOjpzdHJpbmcmIHN0ciwgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQpOworCisgIHN0YXRpYyB1dGY4X3N0YXRlIGRlY29kZShjb25zdCB1dGY4X3N0YXRlIHN0YXRlLCBjb25zdCBzdGQ6OnVpbnQ4X3QgZnJhZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVpbnQzMl90JiBjb2RlcG9pbnQpOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lID0gdm9pZD4KK2NsYXNzIHVuaWNvZGUKK3sKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorY2xhc3MgdW5pY29kZTxDaGFyLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwoc2l6ZW9mKENoYXIpID09IDQpPjo6dHlwZT4KKyAgOiBwdWJsaWMgdW5pY29kZV9oZWxwZXIKK3sKK3B1YmxpYzoKKyAgLy8gVVRGMzIgLT4gVVRGOAorICBzdGF0aWMgc3RkOjpzdHJpbmcgdG9fdXRmOChjb25zdCBzdGQ6OndzdHJpbmcmIHN0cikKKyAgeworICAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKyAgICBmb3IgKGF1dG8gYyA6IHN0cikgeworICAgICAgYXBwZW5kKHJlc3VsdCwgYyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvX3V0ZjgoQ2hhciBjKQorICB7CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0OworICAgIGFwcGVuZChyZXN1bHQsIGMpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvLyBVVEY4IC0+IFVURjMyCisgIHN0YXRpYyBzdGQ6OndzdHJpbmcgZnJvbV91dGY4KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCisgIHsKKyAgICBzdGQ6OndzdHJpbmcgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlKHN0ci5sZW5ndGgoKSk7CisgICAgYXV0byBpdGVyID0gc3RyLmJlZ2luKCk7CisgICAgdXRmOF9zdGF0ZSBzdGF0ZSA9IHNfc3RhcnQ7CisgICAgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQgPSAwOworICAgIHdoaWxlIChpdGVyIDwgc3RyLmVuZCgpKSB7CisgICAgICBpZiAoKHN0YXRlID0gZGVjb2RlKHN0YXRlLCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ4X3Q+KCppdGVyKyspLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlcG9pbnQpKSA9PSBzX3N0YXJ0KSB7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KGNvZGVwb2ludCk7CisgICAgICAgIGNvZGVwb2ludCA9IDA7CisgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IHNfcmVqZWN0KSB7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KDB4ZmZmZCk7CisgICAgICAgIHN0YXRlID0gc19zdGFydDsKKyAgICAgICAgY29kZXBvaW50ID0gMDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHN0YXRlKSB7CisgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c3RkOjp3c3RyaW5nOjp2YWx1ZV90eXBlPigweGZmZmQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIHN0YXRpYyBzdGQ6OndzdHJpbmcgZnJvbV91dGY4KGNoYXIgYykKKyAgeworICAgIHN0ZDo6d3N0cmluZyByZXN1bHQ7CisgICAgdXRmOF9zdGF0ZSBzdGF0ZSA9IHNfc3RhcnQ7CisgICAgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQgPSAwOworICAgIGlmICgoc3RhdGUgPSBkZWNvZGUoc3RhdGUsIHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oYyksIGNvZGVwb2ludCkpID09CisgICAgICAgIHNfc3RhcnQpIHsKKyAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KGNvZGVwb2ludCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KDB4ZmZmZCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CitjbGFzcyB1bmljb2RlPENoYXIsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPChzaXplb2YoQ2hhcikgPT0gMik+Ojp0eXBlPgorICA6IHB1YmxpYyB1bmljb2RlX2hlbHBlcgoreworcHVibGljOgorICAvLyBVVEYxNiAtPiBVVEY4CisgIHN0YXRpYyBzdGQ6OnN0cmluZyB0b191dGY4KGNvbnN0IHN0ZDo6d3N0cmluZyYgc3RyKQorICB7CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0OworICAgIGZvciAoYXV0byBpdGVyID0gc3RyLmJlZ2luKCk7IGl0ZXIgIT0gc3RyLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgIHN0ZDo6dWludDMyX3QgYyA9ICppdGVyOworICAgICAgaWYgKGlzX3N1cnJvZ2F0ZShjKSkgeworICAgICAgICArK2l0ZXI7CisgICAgICAgIGlmIChpdGVyICE9IHN0ci5lbmQoKSAmJiBpc19oaWdoX3N1cnJvZ2F0ZShjKSAmJgorICAgICAgICAgICAgaXNfbG93X3N1cnJvZ2F0ZSgqaXRlcikpIHsKKyAgICAgICAgICBhcHBlbmQocmVzdWx0LCAoc3RkOjp1aW50MzJfdChjKSA8PCAxMCkgKyAqaXRlciAtIDB4MzVmZGMwMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgMHhmZmZkKTsKKyAgICAgICAgICBpZiAoaXRlciA9PSBzdHIuZW5kKCkpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgYXBwZW5kKHJlc3VsdCwgYyk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgc3RhdGljIHN0ZDo6c3RyaW5nIHRvX3V0ZjgoQ2hhciBjKQorICB7CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0OworICAgIGlmIChpc19zdXJyb2dhdGUoYykpIHsKKyAgICAgIGFwcGVuZChyZXN1bHQsIDB4ZmZmZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGFwcGVuZChyZXN1bHQsIGMpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgLy8gVVRGOCAtPiBVVEYxNgorICBzdGF0aWMgc3RkOjp3c3RyaW5nIGZyb21fdXRmOChjb25zdCBzdGQ6OnN0cmluZyYgc3RyKQorICB7CisgICAgc3RkOjp3c3RyaW5nIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZShzdHIubGVuZ3RoKCkpOworICAgIGF1dG8gaXRlciA9IHN0ci5iZWdpbigpOworICAgIHV0Zjhfc3RhdGUgc3RhdGUgPSBzX3N0YXJ0OworICAgIHN0ZDo6dWludDMyX3QgY29kZXBvaW50ID0gMDsKKyAgICB3aGlsZSAoaXRlciA8IHN0ci5lbmQoKSkgeworICAgICAgaWYgKChzdGF0ZSA9IGRlY29kZShzdGF0ZSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50OF90PigqaXRlcisrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXBvaW50KSkgPT0gc19zdGFydCkgeworICAgICAgICBpZiAoY29kZXBvaW50IDw9IDB4ZmZmZikgeworICAgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KGNvZGVwb2ludCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY29kZXBvaW50IC09IDB4MTAwMDA7CisgICAgICAgICAgcmVzdWx0ICs9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KChjb2RlcG9pbnQgPj4gMTApICsgMHhkODAwKTsKKyAgICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c3RkOjp3c3RyaW5nOjp2YWx1ZV90eXBlPigoY29kZXBvaW50ICYgMHgzZmYpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGRjMDApOworICAgICAgICB9CisgICAgICAgIGNvZGVwb2ludCA9IDA7CisgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IHNfcmVqZWN0KSB7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KDB4ZmZmZCk7CisgICAgICAgIHN0YXRlID0gc19zdGFydDsKKyAgICAgICAgY29kZXBvaW50ID0gMDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHN0YXRlKSB7CisgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8c3RkOjp3c3RyaW5nOjp2YWx1ZV90eXBlPigweGZmZmQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIHN0YXRpYyBzdGQ6OndzdHJpbmcgZnJvbV91dGY4KGNoYXIgYykKKyAgeworICAgIHN0ZDo6d3N0cmluZyByZXN1bHQ7CisgICAgdXRmOF9zdGF0ZSBzdGF0ZSA9IHNfc3RhcnQ7CisgICAgc3RkOjp1aW50MzJfdCBjb2RlcG9pbnQgPSAwOworICAgIGlmICgoc3RhdGUgPSBkZWNvZGUoc3RhdGUsIHN0YXRpY19jYXN0PHN0ZDo6dWludDhfdD4oYyksIGNvZGVwb2ludCkpID09CisgICAgICAgIHNfc3RhcnQpIHsKKyAgICAgIGlmIChjb2RlcG9pbnQgPD0gMHhmZmZmKSB7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KGNvZGVwb2ludCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb2RlcG9pbnQgLT0gMHgxMDAwMDsKKyAgICAgICAgcmVzdWx0ICs9CisgICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjp3c3RyaW5nOjp2YWx1ZV90eXBlPigoY29kZXBvaW50ID4+IDEwKSArIDB4ZDgwMCk7CisgICAgICAgIHJlc3VsdCArPQorICAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6d3N0cmluZzo6dmFsdWVfdHlwZT4oKGNvZGVwb2ludCAmIDB4M2ZmKSArIDB4ZGMwMCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDxzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KDB4ZmZmZCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbiwgdHlwZW5hbWUgT3V0PgorY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXI7CisKK3RlbXBsYXRlIDw+CitjbGFzcyB1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCB3Y2hhcl90PgoreworcHVibGljOgorICBzdGQ6OndzdHJpbmcgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnN0cmluZyYgaW4pCisgIHsKKyAgICByZXR1cm4gdW5pY29kZTx3Y2hhcl90Pjo6ZnJvbV91dGY4KGluKTsKKyAgfQorICBzdGQ6OndzdHJpbmcgb3BlcmF0b3IoKShjb25zdCBjaGFyKiBpbikKKyAgeworICAgIHJldHVybiB1bmljb2RlPHdjaGFyX3Q+Ojpmcm9tX3V0ZjgoaW4pOworICB9CisgIHN0ZDo6d3N0cmluZyBvcGVyYXRvcigpKGNoYXIgaW4pIHsgcmV0dXJuIHVuaWNvZGU8d2NoYXJfdD46OmZyb21fdXRmOChpbik7IH0KK307Cit0ZW1wbGF0ZSA8PgorY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXI8d2NoYXJfdCwgY2hhcj4KK3sKK3B1YmxpYzoKKyAgc3RkOjpzdHJpbmcgb3BlcmF0b3IoKShjb25zdCBzdGQ6OndzdHJpbmcmIGluKQorICB7CisgICAgcmV0dXJuIHVuaWNvZGU8d2NoYXJfdD46OnRvX3V0ZjgoaW4pOworICB9CisgIHN0ZDo6c3RyaW5nIG9wZXJhdG9yKCkoY29uc3Qgd2NoYXJfdCogaW4pCisgIHsKKyAgICByZXR1cm4gdW5pY29kZTx3Y2hhcl90Pjo6dG9fdXRmOChpbik7CisgIH0KKyAgc3RkOjpzdHJpbmcgb3BlcmF0b3IoKSh3Y2hhcl90IGluKSB7IHJldHVybiB1bmljb2RlPHdjaGFyX3Q+Ojp0b191dGY4KGluKTsgfQorfTsKK3RlbXBsYXRlIDw+CitjbGFzcyB1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBjaGFyPgoreworcHVibGljOgorICBzdGQ6OnN0cmluZyBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbikgeyByZXR1cm4gaW47IH0KKyAgc3RkOjpzdHJpbmcgb3BlcmF0b3IoKShjb25zdCBjaGFyKiBpbikgeyByZXR1cm4gc3RkOjpzdHJpbmcoaW4pOyB9CisgIHN0ZDo6c3RyaW5nIG9wZXJhdG9yKCkoY2hhciBpbikgeyByZXR1cm4gc3RkOjpzdHJpbmcoMSwgaW4pOyB9Cit9OwordGVtcGxhdGUgPD4KK2NsYXNzIHVuaWNvZGVfY29udmVydGVyPHdjaGFyX3QsIHdjaGFyX3Q+Cit7CitwdWJsaWM6CisgIHN0ZDo6d3N0cmluZyBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6d3N0cmluZyYgaW4pIHsgcmV0dXJuIGluOyB9CisgIHN0ZDo6d3N0cmluZyBvcGVyYXRvcigpKGNvbnN0IHdjaGFyX3QqIGluKSB7IHJldHVybiBzdGQ6OndzdHJpbmcoaW4pOyB9CisgIHN0ZDo6d3N0cmluZyBvcGVyYXRvcigpKHdjaGFyX3QgaW4pIHsgcmV0dXJuIHN0ZDo6d3N0cmluZygxLCBpbik7IH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbj4KK3N0cnVjdCBzdHJpbmdfY29udmVydGVyCit7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IHN0cmluZ19jb252ZXJ0ZXI8Y2hhcj4KK3sKKyAgLy8gc29tZSBjb21waWxlcnMsIGxpa2UgZ2NjIDQuOCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBDKysxMQorICAvLyBzaWduYXR1cmU6CisgIC8vIHN0ZDo6c3RyaW5nOjpzdHJpbmcoY29uc3Qgc3RyaW5nJiwgY29uc3QgQWxsb2NhdG9yJikKKyAgLy8gQXMgd29ya2Fyb3VuZCwgdXNlIGNoYXIqIHBvaW50ZXIuCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgorICBzdGF0aWMgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4gdG8oY29uc3Qgc3RkOjpzdHJpbmcmIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2MmIGEpCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4oCisgICAgICB1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBDaGFyPigpKGluKS5jX3N0cigpLCBhKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+IHRvKGNvbnN0IGNoYXIqIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2MmIGEpCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4oCisgICAgICB1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBDaGFyPigpKGluKS5jX3N0cigpLCBhKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+IHRvKGNoYXIgaW4sIGNvbnN0IEFsbG9jJiBhKQorICB7CisgICAgcmV0dXJuIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+KAorICAgICAgdW5pY29kZV9jb252ZXJ0ZXI8Y2hhciwgQ2hhcj4oKShpbikuY19zdHIoKSwgYSk7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXI+IHRvKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbikKKyAgeworICAgIHJldHVybiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPih1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBDaGFyPigpKGluKSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CisgIHN0YXRpYyBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiB0byhjb25zdCBjaGFyKiBpbikKKyAgeworICAgIHJldHVybiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPih1bmljb2RlX2NvbnZlcnRlcjxjaGFyLCBDaGFyPigpKGluKSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXI+CisgIHN0YXRpYyBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiB0byhjaGFyIGluKQorICB7CisgICAgcmV0dXJuIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXI+KHVuaWNvZGVfY29udmVydGVyPGNoYXIsIENoYXI+KCkoaW4pKTsKKyAgfQorfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qgc3RyaW5nX2NvbnZlcnRlcjx3Y2hhcl90PgoreworICAvLyBzb21lIGNvbXBpbGVycywgbGlrZSBnY2MgNC44IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEMrKzExCisgIC8vIHNpZ25hdHVyZToKKyAgLy8gc3RkOjpzdHJpbmc6OnN0cmluZyhjb25zdCBzdHJpbmcmLCBjb25zdCBBbGxvY2F0b3ImKQorICAvLyBBcyB3b3JrYXJvdW5kLCB1c2UgY2hhciogcG9pbnRlci4KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgQWxsb2M+CisgIHN0YXRpYyBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCBUcmFpdHMsIEFsbG9jPiB0byhjb25zdCBzdGQ6OndzdHJpbmcmIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2MmIGEpCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4oCisgICAgICB1bmljb2RlX2NvbnZlcnRlcjx3Y2hhcl90LCBDaGFyPigpKGluKS5jX3N0cigpLCBhKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+IHRvKGNvbnN0IHdjaGFyX3QqIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2MmIGEpCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4oCisgICAgICB1bmljb2RlX2NvbnZlcnRlcjx3Y2hhcl90LCBDaGFyPigpKGluKS5jX3N0cigpLCBhKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+IHRvKHdjaGFyX3QgaW4sIGNvbnN0IEFsbG9jJiBhKQorICB7CisgICAgcmV0dXJuIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+KAorICAgICAgdW5pY29kZV9jb252ZXJ0ZXI8d2NoYXJfdCwgQ2hhcj4oKShpbikuY19zdHIoKSwgYSk7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KKyAgc3RhdGljIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXI+IHRvKGNvbnN0IHN0ZDo6d3N0cmluZyYgaW4pCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4odW5pY29kZV9jb252ZXJ0ZXI8d2NoYXJfdCwgQ2hhcj4oKShpbikpOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorICBzdGF0aWMgc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4gdG8oY29uc3Qgd2NoYXJfdCogaW4pCisgIHsKKyAgICByZXR1cm4gc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4odW5pY29kZV9jb252ZXJ0ZXI8d2NoYXJfdCwgQ2hhcj4oKShpbikpOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyPgorICBzdGF0aWMgc3RkOjpiYXNpY19zdHJpbmc8Q2hhcj4gdG8od2NoYXJfdCBpbikKKyAgeworICAgIHJldHVybiBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPih1bmljb2RlX2NvbnZlcnRlcjx3Y2hhcl90LCBDaGFyPigpKGluKSk7CisgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3Qgc291cmNlX3RyYWl0cworeworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CitzdHJ1Y3Qgc291cmNlX3RyYWl0czxUW05dPgoreworICB1c2luZyB2YWx1ZV90eXBlID0gVDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgorc3RydWN0IHNvdXJjZV90cmFpdHM8c3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4+Cit7CisgIHVzaW5nIHZhbHVlX3R5cGUgPQorICAgIHR5cGVuYW1lIHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+Ojp2YWx1ZV90eXBlOworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBzb3VyY2VfdHJhaXRzPGNtOjpzdHJpbmdfdmlldz4KK3sKKyAgdXNpbmcgdmFsdWVfdHlwZSA9IGNtOjpzdHJpbmdfdmlldzo6dmFsdWVfdHlwZTsKK307CisKKyMgIGlmIENNX0ZJTEVTWVNURU1fU09VUkNFX1RSQUlUU19JVEVSQVRPUgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qgc291cmNlX3RyYWl0czxULCBjbTo6ZW5hYmxlX2lmX3Q8Y206OmlzX2l0ZXJhdG9yPFQ+Ojp2YWx1ZSwgdm9pZD4+Cit7CisgIHVzaW5nIHZhbHVlX3R5cGUgPQorICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZV90eXBlOworfTsKKyMgIGVuZGlmCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbiwgdHlwZW5hbWUgT3V0Pgorc3RydWN0IHNvdXJjZV9jb252ZXJ0ZXIKK3sKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qgc291cmNlX2NvbnZlcnRlcjxjaGFyLCBjaGFyPgoreworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3I+CisgIHN0YXRpYyB2b2lkIGFwcGVuZF9yYW5nZShzdGQ6OnN0cmluZyYgcCwgSXRlcmF0b3IgYiwgSXRlcmF0b3IgZSkKKyAgeworICAgIGlmIChiID09IGUpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgcC5hcHBlbmQoYiwgZSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yPgorICBzdGF0aWMgdm9pZCBhcHBlbmRfcmFuZ2Uoc3RkOjpzdHJpbmcmIHAsIEl0ZXJhdG9yIGIpCisgIHsKKyAgICBjaGFyIGUgPSAnXDAnOworCisgICAgaWYgKCpiID09IGUpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yICg7ICpiICE9IGU7ICsrYikgeworICAgICAgcC5wdXNoX2JhY2soKmIpOworICAgIH0KKyAgfQorCisgIHN0YXRpYyB2b2lkIGFwcGVuZF9zb3VyY2Uoc3RkOjpzdHJpbmcmIHAsIGNvbnN0IGNtOjpzdHJpbmdfdmlldyBzKQorICB7CisgICAgYXBwZW5kX3JhbmdlKHAsIHMuYmVnaW4oKSwgcy5lbmQoKSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgQWxsb2M+CisgIHN0YXRpYyB2b2lkIGFwcGVuZF9zb3VyY2Uoc3RkOjpzdHJpbmcmIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8Y2hhciwgVHJhaXRzLCBBbGxvYz4mIHMpCisgIHsKKyAgICBhcHBlbmRfcmFuZ2UocCwgcy5iZWdpbigpLCBzLmVuZCgpKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlPgorICBzdGF0aWMgdm9pZCBhcHBlbmRfc291cmNlKHN0ZDo6c3RyaW5nJiBwLCBjb25zdCBTb3VyY2UmIHMpCisgIHsKKyAgICBhcHBlbmRfcmFuZ2UocCwgcyk7CisgIH0KKworICBzdGF0aWMgdm9pZCBzZXRfc291cmNlKHN0ZDo6c3RyaW5nJiBwLCBzdGQ6OnN0cmluZyYmIHMpIHsgcCA9IHN0ZDo6bW92ZShzKTsgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBzb3VyY2VfY29udmVydGVyPHdjaGFyX3QsIGNoYXI+Cit7CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvcj4KKyAgc3RhdGljIHZvaWQgYXBwZW5kX3JhbmdlKHN0ZDo6c3RyaW5nJiBwLCBJdGVyYXRvciBiLCBJdGVyYXRvciBlKQorICB7CisgICAgaWYgKGIgPT0gZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6d3N0cmluZyB0bXAoYiwgZSk7CisgICAgc3RkOjpzdHJpbmcgZGVzdCA9IHN0cmluZ19jb252ZXJ0ZXI8d2NoYXJfdD46OnRvPGNoYXI+KHRtcCk7CisgICAgcC5hcHBlbmQoZGVzdC5iZWdpbigpLCBkZXN0LmVuZCgpKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3I+CisgIHN0YXRpYyB2b2lkIGFwcGVuZF9yYW5nZShzdGQ6OnN0cmluZyYgcCwgSXRlcmF0b3IgYikKKyAgeworICAgIHdjaGFyX3QgZSA9ICdcMCc7CisKKyAgICBpZiAoKmIgPT0gZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdGQ6OndzdHJpbmcgdG1wOworICAgIGZvciAoOyAqYiAhPSBlOyArK2IpIHsKKyAgICAgIHRtcC5wdXNoX2JhY2soKmIpOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIGRlc3QgPSBzdHJpbmdfY29udmVydGVyPHdjaGFyX3Q+Ojp0bzxjaGFyPih0bXApOworICAgIHAuYXBwZW5kKGRlc3QuYmVnaW4oKSwgZGVzdC5lbmQoKSk7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KKyAgc3RhdGljIHZvaWQgYXBwZW5kX3NvdXJjZShzdGQ6OnN0cmluZyYgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzx3Y2hhcl90LCBUcmFpdHMsIEFsbG9jPiYgcykKKyAgeworICAgIGFwcGVuZF9yYW5nZShwLCBzLmJlZ2luKCksIHMuZW5kKCkpOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBTb3VyY2U+CisgIHN0YXRpYyB2b2lkIGFwcGVuZF9zb3VyY2Uoc3RkOjpzdHJpbmcmIHAsIGNvbnN0IFNvdXJjZSYgcykKKyAgeworICAgIGFwcGVuZF9yYW5nZShwLCBzKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIHNldF9zb3VyY2Uoc3RkOjpzdHJpbmcmIHAsIHN0ZDo6d3N0cmluZyYmIHMpCisgIHsKKyAgICBwID0gc3RyaW5nX2NvbnZlcnRlcjx3Y2hhcl90Pjo6dG88Y2hhcj4ocyk7CisgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IGlzX3BhdGhhYmxlX3N0cmluZyA6IHN0ZDo6ZmFsc2VfdHlwZQoreworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgorc3RydWN0IGlzX3BhdGhhYmxlX3N0cmluZzxzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBUcmFpdHMsIEFsbG9jPj4KKyAgOiBzdGQ6OnRydWVfdHlwZQoreworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgorc3RydWN0IGlzX3BhdGhhYmxlX3N0cmluZzxzdGQ6OmJhc2ljX3N0cmluZzx3Y2hhcl90LCBUcmFpdHMsIEFsbG9jPj4KKyAgOiBzdGQ6OnRydWVfdHlwZQoreworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgaXNfcGF0aGFibGVfc3RyaW5nPGNtOjpzdHJpbmdfdmlldz4gOiBzdGQ6OnRydWVfdHlwZQoreworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdm9pZD4KK3N0cnVjdCBpc19wYXRoYWJsZV9jaGFyX2FycmF5IDogc3RkOjpmYWxzZV90eXBlCit7Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgaXNfcGF0aGFibGVfY2hhcl9hcnJheTwKKyAgVCwKKyAgY206OmVuYWJsZV9pZl90PAorICAgIHN0ZDo6aXNfc2FtZTxjaGFyKiwgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT46OnZhbHVlIHx8CisgICAgICBzdGQ6OmlzX3NhbWU8d2NoYXJfdCosIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZSwKKyAgICB2b2lkPj4KKyAgOiBib29sX2NvbnN0YW50PHN0ZDo6aXNfc2FtZTxjaGFyKiwgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8d2NoYXJfdCosIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZT4KK3sKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgaXNfcGF0aGFibGVfaXRlcmF0b3IgOiBzdGQ6OmZhbHNlX3R5cGUKK3sKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBpc19wYXRoYWJsZV9pdGVyYXRvcjwKKyAgVCwKKyAgY206OmVuYWJsZV9pZl90PAorICAgIGlzX2lucHV0X2l0ZXJhdG9yPFQ+Ojp2YWx1ZSAmJgorICAgICAgKHN0ZDo6aXNfc2FtZTxjaGFyLAorICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPjo6dmFsdWVfdHlwZT46OnZhbHVlIHx8CisgICAgICAgc3RkOjppc19zYW1lPHdjaGFyX3QsCisgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPAorICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZV90eXBlPjo6dmFsdWUpLAorICAgIHZvaWQ+PgorICA6IGJvb2xfY29uc3RhbnQ8CisgICAgICBzdGQ6OmlzX3NhbWU8Y2hhciwKKyAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czwKKyAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+Ojp2YWx1ZV90eXBlPjo6dmFsdWUgfHwKKyAgICAgIHN0ZDo6aXNfc2FtZTx3Y2hhcl90LAorICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPAorICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT46OnZhbHVlX3R5cGU+Ojp2YWx1ZT4KK3sKK307CisKKyMgIGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpICYmIGRlZmluZWQoX19zcGFyYykKKy8vIE9yYWNsZSBEZXZlbG9wZXJTdHVkaW8gQysrIGNvbXBpbGVyIG9uIFNvbGFyaXMvU3BhcmMgZmFpbHMgdG8gY29tcGlsZQorLy8gdGhlIGZ1bGwgJ2lzX3BhdGhhYmxlJyBjaGVjay4gIFdlIHVzZSBpdCBvbmx5IHRvIGltcHJvdmUgZXJyb3IgbWVzc2FnZXMKKy8vIHZpYSAnZW5hYmxlX2lmJyB3aGVuIGNhbGxpbmcgbWV0aG9kcyB3aXRoIGluY29ycmVjdCB0eXBlcy4gIEp1c3QKKy8vIHByZXRlbmQgYWxsIHR5cGVzIGFyZSBhbGxvd2VkIHNvIHdlIGNhbiBhdCBsZWFzdCBjb21waWxlIHZhbGlkIGNvZGUuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBpc19wYXRoYWJsZSA6IHN0ZDo6dHJ1ZV90eXBlCit7Cit9OworIyAgZWxzZQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgaXNfcGF0aGFibGUKKyAgOiBib29sX2NvbnN0YW50PGlzX3BhdGhhYmxlX3N0cmluZzxUPjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAgIGlzX3BhdGhhYmxlX2NoYXJfYXJyYXk8VD46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICBpc19wYXRoYWJsZV9pdGVyYXRvcjxUPjo6dmFsdWU+Cit7Cit9OworIyAgZW5kaWYKK30KKworY2xhc3MgcGF0aAoreworICB1c2luZyBwYXRoX3R5cGUgPSBzdGQ6OnN0cmluZzsKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlPgorICB1c2luZyBlbmFibGVfaWZfcGF0aGFibGUgPQorICAgIGVuYWJsZV9pZl90PGludGVybmFsczo6aXNfcGF0aGFibGU8U291cmNlPjo6dmFsdWUsIHBhdGgmPjsKKworICBlbnVtIGNsYXNzIGZpbGVuYW1lX2ZyYWdtZW50IDogdW5zaWduZWQgY2hhcgorICB7CisgICAgc3RlbSwKKyAgICBleHRlbnNpb24KKyAgfTsKKworcHVibGljOgorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisgIHVzaW5nIHZhbHVlX3R5cGUgPSB3Y2hhcl90OworIyAgZWxzZQorICB1c2luZyB2YWx1ZV90eXBlID0gY2hhcjsKKyMgIGVuZGlmCisgIHVzaW5nIHN0cmluZ190eXBlID0gc3RkOjpiYXNpY19zdHJpbmc8dmFsdWVfdHlwZT47CisKKyAgY2xhc3MgaXRlcmF0b3I7CisgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gaXRlcmF0b3I7CisKKyAgZW51bSBmb3JtYXQgOiB1bnNpZ25lZCBjaGFyCisgIHsKKyAgICBhdXRvX2Zvcm1hdCwKKyAgICBuYXRpdmVfZm9ybWF0LAorICAgIGdlbmVyaWNfZm9ybWF0CisgIH07CisKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICBzdGF0aWMgY29uc3RleHByIHZhbHVlX3R5cGUgcHJlZmVycmVkX3NlcGFyYXRvciA9IEwnXFwnOworIyAgZWxzZQorICBzdGF0aWMgY29uc3RleHByIHZhbHVlX3R5cGUgcHJlZmVycmVkX3NlcGFyYXRvciA9ICcvJzsKKyMgIGVuZGlmCisKKyAgLy8gQ29uc3RydWN0b3JzCisgIC8vID09PT09PT09PT09PQorICBwYXRoKCkgbm9leGNlcHQge30KKyAgcGF0aChjb25zdCBwYXRoJiBwKQorICAgIDogcGF0aF8ocC5wYXRoXykKKyAgeworICB9CisgIHBhdGgocGF0aCYmIHApIG5vZXhjZXB0CisgICAgOiBwYXRoXyhzdGQ6Om1vdmUocC5wYXRoXykpCisgIHsKKyAgfQorICBwYXRoKHN0cmluZ190eXBlJiYgc291cmNlLCBmb3JtYXQgZm10ID0gYXV0b19mb3JtYXQpCisgIHsKKyAgICAodm9pZClmbXQ7CisgICAgaW50ZXJuYWxzOjpzb3VyY2VfY29udmVydGVyPHZhbHVlX3R5cGUsIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnNldF9zb3VyY2UoCisgICAgICB0aGlzLT5wYXRoXywgc3RkOjptb3ZlKHNvdXJjZSkpOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBTb3VyY2UsIHR5cGVuYW1lID0gZW5hYmxlX2lmX3BhdGhhYmxlPFNvdXJjZT4+CisgIHBhdGgoY29uc3QgU291cmNlJiBzb3VyY2UsIGZvcm1hdCBmbXQgPSBhdXRvX2Zvcm1hdCkKKyAgeworICAgICh2b2lkKWZtdDsKKyAgICBpbnRlcm5hbHM6OnNvdXJjZV9jb252ZXJ0ZXI8CisgICAgICB0eXBlbmFtZSBpbnRlcm5hbHM6OnNvdXJjZV90cmFpdHM8U291cmNlPjo6dmFsdWVfdHlwZSwKKyAgICAgIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OmFwcGVuZF9zb3VyY2UodGhpcy0+cGF0aF8sIHNvdXJjZSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxJdGVyYXRvcj4+CisgIHBhdGgoY29uc3QgSXRlcmF0b3IgZmlyc3QsIEl0ZXJhdG9yIGxhc3QsIGZvcm1hdCBmbXQgPSBhdXRvX2Zvcm1hdCkKKyAgeworICAgICh2b2lkKWZtdDsKKyAgICBpbnRlcm5hbHM6OnNvdXJjZV9jb252ZXJ0ZXI8CisgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisgICAgICBwYXRoX3R5cGU6OnZhbHVlX3R5cGU+OjphcHBlbmRfcmFuZ2UodGhpcy0+cGF0aF8sIGZpcnN0LCBsYXN0KTsKKyAgfQorCisgIH5wYXRoKCkgPSBkZWZhdWx0OworCisgIC8vIEFzc2lnbm1lbnRzCisgIC8vID09PT09PT09PT09CisgIHBhdGgmIG9wZXJhdG9yPShjb25zdCBwYXRoJiBwKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnApIHsKKyAgICAgIHRoaXMtPnBhdGhfID0gcC5wYXRoXzsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHBhdGgmIG9wZXJhdG9yPShwYXRoJiYgcCkgbm9leGNlcHQKKyAgeworICAgIGlmICh0aGlzICE9ICZwKSB7CisgICAgICB0aGlzLT5wYXRoXyA9IHN0ZDo6bW92ZShwLnBhdGhfKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHBhdGgmIG9wZXJhdG9yPShzdHJpbmdfdHlwZSYmIHNvdXJjZSkgeyByZXR1cm4gdGhpcy0+YXNzaWduKHNvdXJjZSk7IH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgPSBlbmFibGVfaWZfcGF0aGFibGU8U291cmNlPj4KKyAgcGF0aCYgb3BlcmF0b3I9KGNvbnN0IFNvdXJjZSYgc291cmNlKQorICB7CisgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihzb3VyY2UpOworICB9CisKKyAgcGF0aCYgYXNzaWduKHN0cmluZ190eXBlJiYgc291cmNlKQorICB7CisgICAgaW50ZXJuYWxzOjpzb3VyY2VfY29udmVydGVyPHZhbHVlX3R5cGUsIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnNldF9zb3VyY2UoCisgICAgICB0aGlzLT5wYXRoXywgc3RkOjptb3ZlKHNvdXJjZSkpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxTb3VyY2U+PgorICBwYXRoJiBhc3NpZ24oY29uc3QgU291cmNlJiBzb3VyY2UpCisgIHsKKyAgICB0aGlzLT5wYXRoXy5jbGVhcigpOworICAgIGludGVybmFsczo6c291cmNlX2NvbnZlcnRlcjwKKyAgICAgIHR5cGVuYW1lIGludGVybmFsczo6c291cmNlX3RyYWl0czxTb3VyY2U+Ojp2YWx1ZV90eXBlLAorICAgICAgcGF0aF90eXBlOjp2YWx1ZV90eXBlPjo6YXBwZW5kX3NvdXJjZSh0aGlzLT5wYXRoXywgc291cmNlKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxJdGVyYXRvcj4+CisgIHBhdGgmIGFzc2lnbihJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCkKKyAgeworICAgIHRoaXMtPnBhdGhfLmNsZWFyKCk7CisgICAgaW50ZXJuYWxzOjpzb3VyY2VfY29udmVydGVyPAorICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorICAgICAgcGF0aF90eXBlOjp2YWx1ZV90eXBlPjo6YXBwZW5kX3JhbmdlKHRoaXMtPnBhdGhfLCBmaXJzdCwgbGFzdCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgLy8gQ29uY2F0ZW5hdGlvbgorICAvLyA9PT09PT09PT09PT09CisgIHBhdGgmIG9wZXJhdG9yLz0oY29uc3QgcGF0aCYgcCk7CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFNvdXJjZSwgdHlwZW5hbWUgPSBlbmFibGVfaWZfcGF0aGFibGU8U291cmNlPj4KKyAgcGF0aCYgYXBwZW5kKGNvbnN0IFNvdXJjZSYgc291cmNlKQorICB7CisgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yLz0ocGF0aChzb3VyY2UpKTsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlPgorICBwYXRoJiBvcGVyYXRvci89KGNvbnN0IFNvdXJjZSYgc291cmNlKQorICB7CisgICAgcmV0dXJuIHRoaXMtPmFwcGVuZChzb3VyY2UpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxJdGVyYXRvcj4+CisgIHBhdGgmIGFwcGVuZChJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCkKKyAgeworICAgIHJldHVybiB0aGlzLT5vcGVyYXRvci89KHBhdGgoZmlyc3QsIGxhc3QpKTsKKyAgfQorCisgIHBhdGgmIG9wZXJhdG9yKz0oY29uc3QgcGF0aCYgcCkKKyAgeworICAgIHRoaXMtPnBhdGhfICs9IHAucGF0aF87CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHBhdGgmIG9wZXJhdG9yKz0oY29uc3Qgc3RyaW5nX3R5cGUmIHN0cikKKyAgeworICAgIHRoaXMtPnBhdGhfICs9CisgICAgICBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8dmFsdWVfdHlwZT46OnRvPHBhdGhfdHlwZTo6dmFsdWVfdHlwZT4oc3RyKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgcGF0aCYgb3BlcmF0b3IrPShjbTo6c3RyaW5nX3ZpZXcgc3RyKQorICB7CisgICAgdGhpcy0+cGF0aF8uYXBwZW5kKHN0ci5iZWdpbigpLCBzdHIuZW5kKCkpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorICBwYXRoJiBvcGVyYXRvcis9KGNvbnN0IHZhbHVlX3R5cGUqIHN0cikKKyAgeworICAgIHRoaXMtPnBhdGhfICs9CisgICAgICBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8dmFsdWVfdHlwZT46OnRvPHBhdGhfdHlwZTo6dmFsdWVfdHlwZT4oc3RyKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgcGF0aCYgb3BlcmF0b3IrPShjb25zdCB2YWx1ZV90eXBlIGMpCisgIHsKKyAgICB0aGlzLT5wYXRoXyArPQorICAgICAgaW50ZXJuYWxzOjpzdHJpbmdfY29udmVydGVyPHZhbHVlX3R5cGU+Ojp0bzxwYXRoX3R5cGU6OnZhbHVlX3R5cGU+KGMpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxTb3VyY2U+PgorICBwYXRoJiBjb25jYXQoY29uc3QgU291cmNlJiBzb3VyY2UpCisgIHsKKyAgICBpbnRlcm5hbHM6OnNvdXJjZV9jb252ZXJ0ZXI8CisgICAgICB0eXBlbmFtZSBpbnRlcm5hbHM6OnNvdXJjZV90cmFpdHM8U291cmNlPjo6dmFsdWVfdHlwZSwKKyAgICAgIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OmFwcGVuZF9zb3VyY2UodGhpcy0+cGF0aF8sIHNvdXJjZSk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBTb3VyY2U+CisgIHBhdGgmIG9wZXJhdG9yKz0oY29uc3QgU291cmNlJiBzb3VyY2UpCisgIHsKKyAgICByZXR1cm4gdGhpcy0+Y29uY2F0KHNvdXJjZSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSA9IGVuYWJsZV9pZl9wYXRoYWJsZTxJdGVyYXRvcj4+CisgIHBhdGgmIGNvbmNhdChJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCkKKyAgeworICAgIGludGVybmFsczo6c291cmNlX2NvbnZlcnRlcjwKKyAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKyAgICAgIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OmFwcGVuZF9yYW5nZSh0aGlzLT5wYXRoXywgZmlyc3QsIGxhc3QpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vIE1vZGlmaWVycworICAvLyA9PT09PT09PT0KKyAgdm9pZCBjbGVhcigpIG5vZXhjZXB0IHsgdGhpcy0+cGF0aF8uY2xlYXIoKTsgfQorCisgIHBhdGgmIG1ha2VfcHJlZmVycmVkKCkKKyAgeworIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisgICAgc3RkOjpyZXBsYWNlKAorICAgICAgdGhpcy0+cGF0aF8uYmVnaW4oKSwgdGhpcy0+cGF0aF8uZW5kKCksICcvJywKKyAgICAgIHN0YXRpY19jYXN0PHBhdGhfdHlwZTo6dmFsdWVfdHlwZT4odGhpcy0+cHJlZmVycmVkX3NlcGFyYXRvcikpOworIyAgZW5kaWYKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBwYXRoJiByZW1vdmVfZmlsZW5hbWUoKQorICB7CisgICAgYXV0byBmbmFtZSA9IHRoaXMtPmdldF9maWxlbmFtZSgpOworICAgIGlmICghZm5hbWUuZW1wdHkoKSkgeworICAgICAgdGhpcy0+cGF0aF8uZXJhc2UoZm5hbWUuZGF0YSgpIC0gdGhpcy0+cGF0aF8uZGF0YSgpKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgcGF0aCYgcmVwbGFjZV9maWxlbmFtZShjb25zdCBwYXRoJiByZXBsYWNlbWVudCkKKyAgeworICAgIHRoaXMtPnJlbW92ZV9maWxlbmFtZSgpOworICAgIHRoaXMtPm9wZXJhdG9yLz0ocmVwbGFjZW1lbnQpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHBhdGgmIHJlcGxhY2VfZXh0ZW5zaW9uKGNvbnN0IHBhdGgmIHJlcGxhY2VtZW50ID0gcGF0aCgpKQorICB7CisgICAgYXV0byBleHQgPSB0aGlzLT5nZXRfZmlsZW5hbWVfZnJhZ21lbnQoZmlsZW5hbWVfZnJhZ21lbnQ6OmV4dGVuc2lvbik7CisgICAgaWYgKCFleHQuZW1wdHkoKSkgeworICAgICAgdGhpcy0+cGF0aF8uZXJhc2UoZXh0LmRhdGEoKSAtIHRoaXMtPnBhdGhfLmRhdGEoKSk7CisgICAgfQorICAgIGlmICghcmVwbGFjZW1lbnQucGF0aF8uZW1wdHkoKSkgeworICAgICAgaWYgKHJlcGxhY2VtZW50LnBhdGhfWzBdICE9ICcuJykgeworICAgICAgICB0aGlzLT5wYXRoXyArPSAnLic7CisgICAgICB9CisgICAgICB0aGlzLT5wYXRoXy5hcHBlbmQocmVwbGFjZW1lbnQucGF0aF8pOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB2b2lkIHN3YXAocGF0aCYgb3RoZXIpIG5vZXhjZXB0IHsgdGhpcy0+cGF0aF8uc3dhcChvdGhlci5wYXRoXyk7IH0KKworICAvLyBGb3JtYXQgb2JzZXJ2ZXJzCisgIC8vID09PT09PT09PT09PT09PT0KKyAgY29uc3Qgc3RyaW5nX3R5cGUmIG5hdGl2ZSgpIGNvbnN0IG5vZXhjZXB0CisgIHsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIHRoaXMtPm5hdGl2ZV9wYXRoXyA9IGludGVybmFsczo6c3RyaW5nX2NvbnZlcnRlcjwKKyAgICAgIHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnRvPHN0cmluZ190eXBlOjp2YWx1ZV90eXBlPih0aGlzLT5wYXRoXyk7CisgICAgcmV0dXJuIHRoaXMtPm5hdGl2ZV9wYXRoXzsKKyMgIGVsc2UKKyAgICByZXR1cm4gdGhpcy0+cGF0aF87CisjICBlbmRpZgorICB9CisgIGNvbnN0IHZhbHVlX3R5cGUqIGNfc3RyKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gdGhpcy0+bmF0aXZlKCkuY19zdHIoKTsgfQorICBvcGVyYXRvciBzdHJpbmdfdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPm5hdGl2ZSgpOyB9CisKKyAgdGVtcGxhdGUgPAorICAgIHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIFRyYWl0cyA9IHN0ZDo6Y2hhcl90cmFpdHM8Q2hhcj4sCisgICAgdHlwZW5hbWUgQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxDaGFyPiwKKyAgICBjbTo6ZW5hYmxlX2lmX3Q8KHN0ZDo6aXNfc2FtZTxDaGFyLCBjaGFyPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxUcmFpdHMsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4+Ojp2YWx1ZSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoc3RkOjppc19zYW1lPENoYXIsIHdjaGFyX3Q+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VHJhaXRzLCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+Pjo6dmFsdWUpLAorICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMT4KKyAgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4gc3RyaW5nKGNvbnN0IEFsbG9jJiBhID0gQWxsb2MoKSkgY29uc3QKKyAgeworICAgIHJldHVybiBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8cGF0aF90eXBlOjp2YWx1ZV90eXBlPjo6dG88Q2hhciwgVHJhaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2M+KAorICAgICAgdGhpcy0+cGF0aF8sIGEpOworICB9CisgIGNvbnN0IHN0ZDo6c3RyaW5nIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnBhdGhfOyB9CisgIHN0ZDo6d3N0cmluZyB3c3RyaW5nKCkgY29uc3QKKyAgeworICAgIHN0ZDo6c3RyaW5nIG91dCA9IHRoaXMtPnN0cmluZygpOworICAgIHJldHVybiBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8cGF0aF90eXBlOjp2YWx1ZV90eXBlPjo6dG88CisgICAgICBzdGQ6OndzdHJpbmc6OnZhbHVlX3R5cGU+KG91dCk7CisgIH0KKworICB0ZW1wbGF0ZSA8CisgICAgdHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzID0gc3RkOjpjaGFyX3RyYWl0czxDaGFyPiwKKyAgICB0eXBlbmFtZSBBbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPENoYXI+LAorICAgIGNtOjplbmFibGVfaWZfdDwoc3RkOjppc19zYW1lPENoYXIsIGNoYXI+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPFRyYWl0cywgc3RkOjpjaGFyX3RyYWl0czxjaGFyPj46OnZhbHVlKSB8fAorICAgICAgICAgICAgICAgICAgICAgIChzdGQ6OmlzX3NhbWU8Q2hhciwgd2NoYXJfdD46OnZhbHVlICYmCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxUcmFpdHMsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4+Ojp2YWx1ZSksCisgICAgICAgICAgICAgICAgICAgIGludD4gPSAxPgorICBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCBUcmFpdHMsIEFsbG9jPiBnZW5lcmljX3N0cmluZygKKyAgICBjb25zdCBBbGxvYyYgYSA9IEFsbG9jKCkpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gaW50ZXJuYWxzOjpzdHJpbmdfY29udmVydGVyPHBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnRvPENoYXIsIFRyYWl0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jPigKKyAgICAgIHRoaXMtPmdldF9nZW5lcmljKCksIGEpOworICB9CisgIHN0ZDo6c3RyaW5nIGdlbmVyaWNfc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+Z2V0X2dlbmVyaWMoKTsgfQorICBzdGQ6OndzdHJpbmcgZ2VuZXJpY193c3RyaW5nKCkgY29uc3QKKyAgeworICAgIGF1dG8gZGVzdCA9IHRoaXMtPmdlbmVyaWNfc3RyaW5nKCk7CisgICAgcmV0dXJuIGludGVybmFsczo6c3RyaW5nX2NvbnZlcnRlcjxwYXRoX3R5cGU6OnZhbHVlX3R5cGU+Ojp0bzwKKyAgICAgIHN0ZDo6d3N0cmluZzo6dmFsdWVfdHlwZT4oZGVzdCk7CisgIH0KKworICAvLyBDb21wYXJlCisgIC8vID09PT09PT0KKyAgaW50IGNvbXBhcmUoY29uc3QgcGF0aCYgcCkgY29uc3Qgbm9leGNlcHQKKyAgeworICAgIHJldHVybiB0aGlzLT5jb21wYXJlX3BhdGgocC5wYXRoXyk7CisgIH0KKyAgaW50IGNvbXBhcmUoY29uc3Qgc3RyaW5nX3R5cGUmIHN0cikgY29uc3QKKyAgeworICAgIHJldHVybiB0aGlzLT5jb21wYXJlX3BhdGgoCisgICAgICBpbnRlcm5hbHM6OnN0cmluZ19jb252ZXJ0ZXI8dmFsdWVfdHlwZT46OnRvPHBhdGhfdHlwZTo6dmFsdWVfdHlwZT4oc3RyKSk7CisgIH0KKyAgaW50IGNvbXBhcmUoY29uc3QgdmFsdWVfdHlwZSogc3RyKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPmNvbXBhcmVfcGF0aCgKKyAgICAgIGludGVybmFsczo6c3RyaW5nX2NvbnZlcnRlcjx2YWx1ZV90eXBlPjo6dG88cGF0aF90eXBlOjp2YWx1ZV90eXBlPihzdHIpKTsKKyAgfQorICBpbnQgY29tcGFyZShjbTo6c3RyaW5nX3ZpZXcgc3RyKSBjb25zdCB7IHJldHVybiB0aGlzLT5jb21wYXJlX3BhdGgoc3RyKTsgfQorCisgIC8vIEdlbmVyYXRpb24KKyAgLy8gPT09PT09PT09PQorICBwYXRoIGxleGljYWxseV9ub3JtYWwoKSBjb25zdDsKKworICBwYXRoIGxleGljYWxseV9yZWxhdGl2ZShjb25zdCBwYXRoJiBiYXNlKSBjb25zdDsKKworICBwYXRoIGxleGljYWxseV9wcm94aW1hdGUoY29uc3QgcGF0aCYgYmFzZSkgY29uc3QKKyAgeworICAgIHBhdGggcmVzdWx0ID0gdGhpcy0+bGV4aWNhbGx5X3JlbGF0aXZlKGJhc2UpOworICAgIHJldHVybiByZXN1bHQuZW1wdHkoKSA/ICp0aGlzIDogcmVzdWx0OworICB9CisKKyAgLy8gRGVjb21wb3NpdGlvbgorICAvLyA9PT09PT09PT09PT09CisgIHBhdGggcm9vdF9uYW1lKCkgY29uc3QgeyByZXR1cm4gZ2V0X3Jvb3RfbmFtZSgpOyB9CisKKyAgcGF0aCByb290X2RpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPmdldF9yb290X2RpcmVjdG9yeSgpOyB9CisKKyAgcGF0aCByb290X3BhdGgoKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPnJvb3RfbmFtZSgpLmFwcGVuZCh0aGlzLT5nZXRfcm9vdF9kaXJlY3RvcnkoKSk7CisgIH0KKworICBwYXRoIHJlbGF0aXZlX3BhdGgoKSBjb25zdCB7IHJldHVybiB0aGlzLT5nZXRfcmVsYXRpdmVfcGF0aCgpOyB9CisKKyAgcGF0aCBwYXJlbnRfcGF0aCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPmdldF9wYXJlbnRfcGF0aCgpOyB9CisKKyAgcGF0aCBmaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPmdldF9maWxlbmFtZSgpOyB9CisKKyAgcGF0aCBzdGVtKCkgY29uc3QKKyAgeworICAgIHJldHVybiB0aGlzLT5nZXRfZmlsZW5hbWVfZnJhZ21lbnQoZmlsZW5hbWVfZnJhZ21lbnQ6OnN0ZW0pOworICB9CisgIHBhdGggZXh0ZW5zaW9uKCkgY29uc3QKKyAgeworICAgIHJldHVybiB0aGlzLT5nZXRfZmlsZW5hbWVfZnJhZ21lbnQoZmlsZW5hbWVfZnJhZ21lbnQ6OmV4dGVuc2lvbik7CisgIH0KKworICAvLyBRdWVyaWVzCisgIC8vID09PT09PT0KKyAgYm9vbCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIHRoaXMtPnBhdGhfLmVtcHR5KCk7IH0KKworICBib29sIGhhc19yb290X25hbWUoKSBjb25zdCB7IHJldHVybiAhdGhpcy0+Z2V0X3Jvb3RfbmFtZSgpLmVtcHR5KCk7IH0KKworICBib29sIGhhc19yb290X2RpcmVjdG9yeSgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gIXRoaXMtPmdldF9yb290X2RpcmVjdG9yeSgpLmVtcHR5KCk7CisgIH0KKworICBib29sIGhhc19yb290X3BhdGgoKSBjb25zdAorICB7CisgICAgcmV0dXJuIHRoaXMtPmhhc19yb290X25hbWUoKSB8fCB0aGlzLT5oYXNfcm9vdF9kaXJlY3RvcnkoKTsKKyAgfQorCisgIGJvb2wgaGFzX3JlbGF0aXZlX3BhdGgoKSBjb25zdCB7IHJldHVybiAhdGhpcy0+Z2V0X3JlbGF0aXZlX3BhdGgoKS5lbXB0eSgpOyB9CisKKyAgYm9vbCBoYXNfcGFyZW50X3BhdGgoKSBjb25zdCB7IHJldHVybiAhdGhpcy0+Z2V0X3BhcmVudF9wYXRoKCkuZW1wdHkoKTsgfQorCisgIGJvb2wgaGFzX2ZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gIXRoaXMtPmdldF9maWxlbmFtZSgpLmVtcHR5KCk7IH0KKworICBib29sIGhhc19zdGVtKCkgY29uc3QKKyAgeworICAgIHJldHVybiAhdGhpcy0+Z2V0X2ZpbGVuYW1lX2ZyYWdtZW50KGZpbGVuYW1lX2ZyYWdtZW50OjpzdGVtKS5lbXB0eSgpOworICB9CisgIGJvb2wgaGFzX2V4dGVuc2lvbigpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gIXRoaXMtPmdldF9maWxlbmFtZV9mcmFnbWVudChmaWxlbmFtZV9mcmFnbWVudDo6ZXh0ZW5zaW9uKS5lbXB0eSgpOworICB9CisKKyAgYm9vbCBpc19hYnNvbHV0ZSgpIGNvbnN0CisgIHsKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorICAgIHJldHVybiB0aGlzLT5oYXNfcm9vdF9uYW1lKCkgJiYgdGhpcy0+aGFzX3Jvb3RfZGlyZWN0b3J5KCk7CisjICBlbHNlCisgICAgLy8gRm9yIENZR1dJTiwgcm9vdF9uYW1lIChpLmUuIC8vaG9zdCBvciAvY3lnZHJpdmUveCkgaXMgbm90IGNvbnNpZGVyZWQuCisgICAgLy8gU2FtZSBhcyBjdXJyZW50IEdOVSBnKysgaW1wbGVtZW50YXRpb24gKDkuMykuCisgICAgcmV0dXJuIHRoaXMtPmhhc19yb290X2RpcmVjdG9yeSgpOworIyAgZW5kaWYKKyAgfQorCisgIGJvb2wgaXNfcmVsYXRpdmUoKSBjb25zdCB7IHJldHVybiAhdGhpcy0+aXNfYWJzb2x1dGUoKTsgfQorCisgIC8vIEl0ZXJhdG9ycworICAvLyA9PT09PT09PT0KKyAgaW5saW5lIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgIGlubGluZSBpdGVyYXRvciBlbmQoKSBjb25zdDsKKworICAvLyBOb24tbWVtYmVycworICAvLyA9PT09PT09PT09PQorICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQKKyAgeworICAgIHJldHVybiBsaHMuY29tcGFyZShyaHMpID09IDA7CisgIH0KKyAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSAhPSAwOworICB9CisgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSA8IDA7CisgIH0KKyAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSA8PSAwOworICB9CisgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSA+IDA7CisgIH0KKyAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbGhzLmNvbXBhcmUocmhzKSA+PSAwOworICB9CisKKyAgZnJpZW5kIGlubGluZSBwYXRoIG9wZXJhdG9yLyhjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykKKyAgeworICAgIHBhdGggcmVzdWx0KGxocyk7CisgICAgcmVzdWx0IC89IHJoczsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzPgorICBmcmllbmQgaW5saW5lIGNtOjplbmFibGVfaWZfdDwKKyAgICAoc3RkOjppc19zYW1lPENoYXIsIHBhdGg6OnZhbHVlX3R5cGU+Ojp2YWx1ZSAmJgorICAgICBzdGQ6OmlzX3NhbWU8VHJhaXRzLCBzdGQ6OmNoYXJfdHJhaXRzPHBhdGg6OnZhbHVlX3R5cGU+Pjo6dmFsdWUpIHx8CisgICAgICAoc3RkOjppc19zYW1lPENoYXIsIHBhdGg6OnBhdGhfdHlwZTo6dmFsdWVfdHlwZT46OnZhbHVlICYmCisgICAgICAgc3RkOjppc19zYW1lPFRyYWl0cywKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpjaGFyX3RyYWl0czxwYXRoOjpwYXRoX3R5cGU6OnZhbHVlX3R5cGU+Pjo6dmFsdWUpLAorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyLCBUcmFpdHM+Jj4KKyAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiYgb3MsIGNvbnN0IHBhdGgmIHApCisgIHsKKyAgICBvcyA8PCBjbTo6cXVvdGVkKHAuc3RyaW5nPENoYXIsIFRyYWl0cz4oKSk7CisgICAgcmV0dXJuIG9zOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIFRyYWl0cz4KKyAgZnJpZW5kIGlubGluZSBjbTo6ZW5hYmxlX2lmX3Q8CisgICAgKHN0ZDo6aXNfc2FtZTxDaGFyLCBwYXRoOjp2YWx1ZV90eXBlPjo6dmFsdWUgJiYKKyAgICAgc3RkOjppc19zYW1lPFRyYWl0cywgc3RkOjpjaGFyX3RyYWl0czxwYXRoOjp2YWx1ZV90eXBlPj46OnZhbHVlKSB8fAorICAgICAgKHN0ZDo6aXNfc2FtZTxDaGFyLCBwYXRoOjpwYXRoX3R5cGU6OnZhbHVlX3R5cGU+Ojp2YWx1ZSAmJgorICAgICAgIHN0ZDo6aXNfc2FtZTxUcmFpdHMsCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2hhcl90cmFpdHM8cGF0aDo6cGF0aF90eXBlOjp2YWx1ZV90eXBlPj46OnZhbHVlKSwKKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhciwgVHJhaXRzPiY+CisgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPENoYXIsIFRyYWl0cz4mIGlzLCBwYXRoJiBwKQorICB7CisgICAgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzPiB0bXA7CisgICAgaXMgPj4gY206OnF1b3RlZCh0bXApOworICAgIHAgPSB0bXA7CisgICAgcmV0dXJuIGlzOworICB9CisKK3ByaXZhdGU6CisgIGZyaWVuZCBjbGFzcyBpdGVyYXRvcjsKKyAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY29uc3QgcGF0aCYgcCkgbm9leGNlcHQ7CisKKyAgcGF0aF90eXBlIGdldF9nZW5lcmljKCkgY29uc3Q7CisKKyAgY206OnN0cmluZ192aWV3IGdldF9yb290X25hbWUoKSBjb25zdDsKKyAgY206OnN0cmluZ192aWV3IGdldF9yb290X2RpcmVjdG9yeSgpIGNvbnN0OworICBjbTo6c3RyaW5nX3ZpZXcgZ2V0X3JlbGF0aXZlX3BhdGgoKSBjb25zdDsKKyAgY206OnN0cmluZ192aWV3IGdldF9wYXJlbnRfcGF0aCgpIGNvbnN0OworICBjbTo6c3RyaW5nX3ZpZXcgZ2V0X2ZpbGVuYW1lKCkgY29uc3Q7CisgIGNtOjpzdHJpbmdfdmlldyBnZXRfZmlsZW5hbWVfZnJhZ21lbnQoZmlsZW5hbWVfZnJhZ21lbnQgZnJhZ21lbnQpIGNvbnN0OworCisgIGludCBjb21wYXJlX3BhdGgoY206OnN0cmluZ192aWV3IHN0cikgY29uc3Q7CisKKyAgcGF0aF90eXBlIHBhdGhfOworIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisgIG11dGFibGUgc3RyaW5nX3R5cGUgbmF0aXZlX3BhdGhfOworIyAgZW5kaWYKK307CisKK2NsYXNzIHBhdGg6Oml0ZXJhdG9yCit7CitwdWJsaWM6CisgIHVzaW5nIGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZzsKKworICB1c2luZyB2YWx1ZV90eXBlID0gcGF0aDsKKyAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gc3RkOjpwdHJkaWZmX3Q7CisgIHVzaW5nIHBvaW50ZXIgPSBjb25zdCBwYXRoKjsKKyAgdXNpbmcgcmVmZXJlbmNlID0gY29uc3QgcGF0aCY7CisKKyAgaXRlcmF0b3IoKTsKKyAgaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIG90aGVyKTsKKworICB+aXRlcmF0b3IoKTsKKworICBpdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcik7CisKKyAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnBhdGhfZWxlbWVudF87IH0KKworICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmdGhpcy0+cGF0aF9lbGVtZW50XzsgfQorCisgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisKKyAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgIHsKKyAgICBpdGVyYXRvciBpdCgqdGhpcyk7CisgICAgdGhpcy0+b3BlcmF0b3IrKygpOworICAgIHJldHVybiBpdDsKKyAgfQorCisgIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCk7CisKKyAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCisgIHsKKyAgICBpdGVyYXRvciBpdCgqdGhpcyk7CisgICAgdGhpcy0+b3BlcmF0b3ItLSgpOworICAgIHJldHVybiBpdDsKKyAgfQorCitwcml2YXRlOgorICBmcmllbmQgY2xhc3MgcGF0aDsKKyAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYsIGNvbnN0IGl0ZXJhdG9yJik7CisKKyAgaXRlcmF0b3IoY29uc3QgcGF0aCogcCwgYm9vbCBhdF9lbmQgPSBmYWxzZSk7CisKKyAgY29uc3QgcGF0aCogcGF0aF87CisgIHN0ZDo6dW5pcXVlX3B0cjxpbnRlcm5hbHM6OnBhdGhfcGFyc2VyPiBwYXJzZXJfOworICBwYXRoIHBhdGhfZWxlbWVudF87Cit9OworCitpbmxpbmUgcGF0aDo6aXRlcmF0b3IgcGF0aDo6YmVnaW4oKSBjb25zdAoreworICByZXR1cm4gaXRlcmF0b3IodGhpcyk7Cit9CitpbmxpbmUgcGF0aDo6aXRlcmF0b3IgcGF0aDo6ZW5kKCkgY29uc3QKK3sKKyAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHRydWUpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgcGF0aDo6aXRlcmF0b3ImIGxocywgY29uc3QgcGF0aDo6aXRlcmF0b3ImIHJocyk7CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGF0aDo6aXRlcmF0b3ImIGxocywgY29uc3QgcGF0aDo6aXRlcmF0b3ImIHJocykKK3sKKyAgcmV0dXJuICEobGhzID09IHJocyk7Cit9CisKKy8vIE5vbi1tZW1iZXIgZnVuY3Rpb25zCisvLyA9PT09PT09PT09PT09PT09PT09PQoraW5saW5lIHZvaWQgc3dhcChwYXRoJiBsaHMsIHBhdGgmIHJocykgbm9leGNlcHQKK3sKKyAgbGhzLnN3YXAocmhzKTsKK30KKworc3RkOjpzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBwKSBub2V4Y2VwdDsKKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIGZpbGVzeXN0ZW0KK30gLy8gbmFtZXNwYWNlIGNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9pb21hbmlwIGIvVXRpbGl0aWVzL3N0ZC9jbS9pb21hbmlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjg1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL2lvbWFuaXAKQEAgLTAsMCArMSwxODMgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtX2lvbWFuaXAKKyNkZWZpbmUgY21faW9tYW5pcAorCisjaW5jbHVkZSA8aW9tYW5pcD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorI2lmIF9fY3BsdXNwbHVzIDwgMjAxNDAyTCB8fCBkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPCAyMDE0MDJMCisjICBpbmNsdWRlIDxpb3M+CisjICBpbmNsdWRlIDxpb3N0cmVhbT4KKyMgIGluY2x1ZGUgPHNzdHJlYW0+CisjICBpbmNsdWRlIDxzdHJpbmc+CisjICBpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNlbmRpZgorI2lmIF9fY3BsdXNwbHVzIDwgMjAxNzAzTCB8fCBkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPCAyMDE3MDNMCisjICBpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKyNlbmRpZgorCituYW1lc3BhY2UgY20geworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTCB8fCBkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPj0gMjAxNDAyTAorCit1c2luZyBzdGQ6OnF1b3RlZDsKKworIyAgaWYgX19jcGx1c3BsdXMgPCAyMDE3MDNMIHx8IGRlZmluZWQoX01TVkNfTEFORykgJiYgX01TVkNfTEFORyA8IDIwMTcwM0wKKworaW5saW5lIGF1dG8gcXVvdGVkKGNtOjpzdHJpbmdfdmlldyBzdHIsIGNoYXIgZGVsaW0gPSAnIicsIGNoYXIgZXNjYXBlID0gJ1xcJykKK3sKKyAgcmV0dXJuIHN0ZDo6cXVvdGVkKHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPihzdHIpLCBkZWxpbSwgZXNjYXBlKTsKK30KKworIyAgZW5kaWYKKworI2Vsc2UKKworbmFtZXNwYWNlIGludGVybmFscyB7CisKKy8vIFN0cnVjdCBmb3IgZGVsaW1pdGVkIHN0cmluZ3MuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nLCB0eXBlbmFtZSBDaGFyPgorc3RydWN0IHF1b3RlZF9zdHJpbmcKK3sKKyAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3JlZmVyZW5jZTxTdHJpbmc+Ojp2YWx1ZSB8fAorICAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPFN0cmluZz46OnZhbHVlLAorICAgICAgICAgICAgICAgICJTdHJpbmcgdHlwZSBtdXN0IGJlIHBvaW50ZXIgb3IgcmVmZXJlbmNlIik7CisKKyAgcXVvdGVkX3N0cmluZyhTdHJpbmcgc3RyLCBDaGFyIGRlbCwgQ2hhciBlc2MpCisgICAgOiBzdHJpbmdfKHN0cikKKyAgICAsIGRlbGltX3sgZGVsIH0KKyAgICAsIGVzY2FwZV97IGVzYyB9CisgIHsKKyAgfQorCisgIHF1b3RlZF9zdHJpbmcmIG9wZXJhdG9yPShxdW90ZWRfc3RyaW5nJikgPSBkZWxldGU7CisKKyAgU3RyaW5nIHN0cmluZ187CisgIENoYXIgZGVsaW1fOworICBDaGFyIGVzY2FwZV87Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IHF1b3RlZF9zdHJpbmc8Y206OnN0cmluZ192aWV3LCBjaGFyPgoreworICBxdW90ZWRfc3RyaW5nKGNtOjpzdHJpbmdfdmlldyBzdHIsIGNoYXIgZGVsLCBjaGFyIGVzYykKKyAgICA6IHN0cmluZ18oc3RyKQorICAgICwgZGVsaW1feyBkZWwgfQorICAgICwgZXNjYXBlX3sgZXNjIH0KKyAgeworICB9CisKKyAgcXVvdGVkX3N0cmluZyYgb3BlcmF0b3I9KHF1b3RlZF9zdHJpbmcmKSA9IGRlbGV0ZTsKKworICBjbTo6c3RyaW5nX3ZpZXcgc3RyaW5nXzsKKyAgY2hhciBkZWxpbV87CisgIGNoYXIgZXNjYXBlXzsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBUcmFpdHM+CitzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiYgb3BlcmF0b3I8PCgKKyAgc3RkOjpiYXNpY19vc3RyZWFtPENoYXIsIFRyYWl0cz4mIG9zLAorICBjb25zdCBxdW90ZWRfc3RyaW5nPGNvbnN0IENoYXIqLCBDaGFyPiYgc3RyKQoreworICBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Q2hhciwgVHJhaXRzPiBvc3RyOworICBvc3RyIDw8IHN0ci5kZWxpbV87CisgIGZvciAoY29uc3QgQ2hhciogYyA9IHN0ci5zdHJpbmdfOyAqYzsgKytjKSB7CisgICAgaWYgKCpjID09IHN0ci5kZWxpbV8gfHwgKmMgPT0gc3RyLmVzY2FwZV8pCisgICAgICBvc3RyIDw8IHN0ci5lc2NhcGVfOworICAgIG9zdHIgPDwgKmM7CisgIH0KKyAgb3N0ciA8PCBzdHIuZGVsaW1fOworCisgIHJldHVybiBvcyA8PCBvc3RyLnN0cigpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBTdHJpbmc+CitzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiYgb3BlcmF0b3I8PCgKKyAgc3RkOjpiYXNpY19vc3RyZWFtPENoYXIsIFRyYWl0cz4mIG9zLCBjb25zdCBxdW90ZWRfc3RyaW5nPFN0cmluZywgQ2hhcj4mIHN0cikKK3sKKyAgc3RkOjpiYXNpY19vc3RyaW5nc3RyZWFtPENoYXIsIFRyYWl0cz4gb3N0cjsKKyAgb3N0ciA8PCBzdHIuZGVsaW1fOworICBmb3IgKGF1dG8gYyA6IHN0ci5zdHJpbmdfKSB7CisgICAgaWYgKGMgPT0gc3RyLmRlbGltXyB8fCBjID09IHN0ci5lc2NhcGVfKQorICAgICAgb3N0ciA8PCBzdHIuZXNjYXBlXzsKKyAgICBvc3RyIDw8IGM7CisgIH0KKyAgb3N0ciA8PCBzdHIuZGVsaW1fOworCisgIHJldHVybiBvcyA8PCBvc3RyLnN0cigpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KK3N0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyLCBUcmFpdHM+JiBvcGVyYXRvcj4+KAorICBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhciwgVHJhaXRzPiYgaXMsCisgIGNvbnN0IHF1b3RlZF9zdHJpbmc8c3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4mLCBDaGFyPiYgc3RyKQoreworICBDaGFyIGM7CisgIGlzID4+IGM7CisgIGlmICghaXMuZ29vZCgpKQorICAgIHJldHVybiBpczsKKyAgaWYgKGMgIT0gc3RyLmRlbGltXykgeworICAgIGlzLnVuZ2V0KCk7CisgICAgaXMgPj4gc3RyLnN0cmluZ187CisgICAgcmV0dXJuIGlzOworICB9CisgIHN0ci5zdHJpbmdfLmNsZWFyKCk7CisgIHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzIGZsYWdzID0KKyAgICBpcy5mbGFncyhpcy5mbGFncygpICYgfnN0ZDo6aW9zX2Jhc2U6OnNraXB3cyk7CisgIGRvIHsKKyAgICBpcyA+PiBjOworICAgIGlmICghaXMuZ29vZCgpKQorICAgICAgYnJlYWs7CisgICAgaWYgKGMgPT0gc3RyLmVzY2FwZV8pIHsKKyAgICAgIGlzID4+IGM7CisgICAgICBpZiAoIWlzLmdvb2QoKSkKKyAgICAgICAgYnJlYWs7CisgICAgfSBlbHNlIGlmIChjID09IHN0ci5kZWxpbV8pCisgICAgICBicmVhazsKKyAgICBzdHIuc3RyaW5nXyArPSBjOworICB9IHdoaWxlICh0cnVlKTsKKyAgaXMuc2V0ZihmbGFncyk7CisKKyAgcmV0dXJuIGlzOworfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KK2lubGluZSBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8Y29uc3QgQ2hhciosIENoYXI+IHF1b3RlZCgKKyAgY29uc3QgQ2hhciogc3RyLCBDaGFyIGRlbGltID0gQ2hhcignIicpLCBDaGFyIGVzY2FwZSA9IENoYXIoJ1xcJykpCit7CisgIHJldHVybiBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8Y29uc3QgQ2hhciosIENoYXI+KHN0ciwgZGVsaW0sIGVzY2FwZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEFsbG9jPgoraW5saW5lIGludGVybmFsczo6cXVvdGVkX3N0cmluZzxjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCBUcmFpdHMsIEFsbG9jPiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXI+CitxdW90ZWQoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4mIHN0ciwKKyAgICAgICBDaGFyIGRlbGltID0gQ2hhcignIicpLCBDaGFyIGVzY2FwZSA9IENoYXIoJ1xcJykpCit7CisgIHJldHVybiBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8CisgICAgY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4mLCBDaGFyPihzdHIsIGRlbGltLCBlc2NhcGUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvYz4KK2lubGluZSBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8c3RkOjpiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXRzLCBBbGxvYz4mLCBDaGFyPgorcXVvdGVkKHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+JiBzdHIsIENoYXIgZGVsaW0gPSBDaGFyKCciJyksCisgICAgICAgQ2hhciBlc2NhcGUgPSBDaGFyKCdcXCcpKQoreworICByZXR1cm4gaW50ZXJuYWxzOjpxdW90ZWRfc3RyaW5nPHN0ZDo6YmFzaWNfc3RyaW5nPENoYXIsIFRyYWl0cywgQWxsb2M+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyPihzdHIsIGRlbGltLCBlc2NhcGUpOworfQorCitpbmxpbmUgaW50ZXJuYWxzOjpxdW90ZWRfc3RyaW5nPGNtOjpzdHJpbmdfdmlldywgY2hhcj4gcXVvdGVkKAorICBjbTo6c3RyaW5nX3ZpZXcgc3RyLCBjaGFyIGRlbGltID0gJyInLCBjaGFyIGVzY2FwZSA9ICdcXCcpCit7CisgIHJldHVybiBpbnRlcm5hbHM6OnF1b3RlZF9zdHJpbmc8Y206OnN0cmluZ192aWV3LCBjaGFyPihzdHIsIGRlbGltLCBlc2NhcGUpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL2xpc3QgYi9VdGlsaXRpZXMvc3RkL2NtL2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE1ZDk0YQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9zdGQvY20vbGlzdApAQCAtMCwwICsxLDM5IEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbV9saXN0CisjZGVmaW5lIGNtX2xpc3QKKworI2luY2x1ZGUgPGxpc3Q+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworbmFtZXNwYWNlIGNtIHsKKworLy8gc2hvdWxkIGJlIHVwZGF0ZWQgd2hlbiBDKysyMCBpcyBmaW5hbGl6ZWQKKyNpZiAoX19jcGx1c3BsdXMgPiAyMDE3MDNMIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKGRlZmluZWQoX01TVkNfTEFORykgJiYgX01TVkNfTEFORyA+IDIwMTcwMykpICYmICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZGVmaW5lZChfX2NwcF9saWJfZXJhc2VfaWYpCisKK3VzaW5nIHN0ZDo6ZXJhc2U7Cit1c2luZyBzdGQ6OmVyYXNlX2lmOworCisjZWxzZQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxsb2NhdG9yLCB0eXBlbmFtZSBWPgoraW5saW5lIHZvaWQgZXJhc2Uoc3RkOjpsaXN0PFQsIEFsbG9jYXRvcj4mIGNvbnQsIGNvbnN0IFYmIHZhbHVlKQoreworICBjb250LnJlbW92ZV9pZihbJl0oYXV0byYgZWxlbSkgeyByZXR1cm4gZWxlbSA9PSB2YWx1ZTsgfSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKHN0ZDo6bGlzdDxULCBBbGxvY2F0b3I+JiBjb250LCBQcmVkaWNhdGUgcHJlZCkKK3sKKyAgY29udC5yZW1vdmVfaWYocHJlZCk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBjbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY20vbWFwIGIvVXRpbGl0aWVzL3N0ZC9jbS9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0OGRlYwotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9zdGQvY20vbWFwCkBAIC0wLDAgKzEsNDQgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtX21hcAorI2RlZmluZSBjbV9tYXAKKworI2luY2x1ZGUgPG1hcD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCisjaW5jbHVkZSA8Y20vYml0cy9lcmFzZV9pZi5oeHg+CisKK25hbWVzcGFjZSBjbSB7CisKKy8vIHNob3VsZCBiZSB1cGRhdGVkIHdoZW4gQysrMjAgaXMgZmluYWxpemVkCisjaWYgKF9fY3BsdXNwbHVzID4gMjAxNzAzTCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPiAyMDE3MDMpKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRlZmluZWQoX19jcHBfbGliX2VyYXNlX2lmKQorCit1c2luZyBzdGQ6OmVyYXNlX2lmOworCisjZWxzZQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wYXJlLCB0eXBlbmFtZSBBbGxvY2F0b3IsCisgICAgICAgICAgdHlwZW5hbWUgUHJlZGljYXRlPgoraW5saW5lIHZvaWQgZXJhc2VfaWYoc3RkOjptYXA8S2V5LCBULCBDb21wYXJlLCBBbGxvY2F0b3I+JiBjb250LAorICAgICAgICAgICAgICAgICAgICAgUHJlZGljYXRlIHByZWQpCit7CisgIGludGVybmFsczo6ZXJhc2VfaWYoY29udCwgcHJlZCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBhcmUsIHR5cGVuYW1lIEFsbG9jYXRvciwKKyAgICAgICAgICB0eXBlbmFtZSBQcmVkaWNhdGU+CitpbmxpbmUgdm9pZCBlcmFzZV9pZihzdGQ6Om11bHRpbWFwPEtleSwgVCwgQ29tcGFyZSwgQWxsb2NhdG9yPiYgY29udCwKKyAgICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZSBwcmVkKQoreworICBpbnRlcm5hbHM6OmVyYXNlX2lmKGNvbnQsIHByZWQpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL21lbW9yeSBiL1V0aWxpdGllcy9zdGQvY20vbWVtb3J5CmluZGV4IDhlYmRlZDIuLjU2MTFmNmIgMTAwNjQ0Ci0tLSBhL1V0aWxpdGllcy9zdGQvY20vbWVtb3J5CisrKyBiL1V0aWxpdGllcy9zdGQvY20vbWVtb3J5CkBAIC02LDggKzYsMTMgQEAKICNpZm5kZWYgY21fbWVtb3J5CiAjZGVmaW5lIGNtX21lbW9yeQogCisjaW5jbHVkZSAiY21TVEwuaHh4IiAvLyBJV1lVIHByYWdtYToga2VlcAorCiAjaW5jbHVkZSA8bWVtb3J5PiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisKICNpZiAhZGVmaW5lZChDTWFrZV9IQVZFX0NYWF9NQUtFX1VOSVFVRSkKKyMgIGluY2x1ZGUgPGNzdGRkZWY+CisjICBpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICMgIGluY2x1ZGUgPHV0aWxpdHk+CiAjZW5kaWYKIApAQCAtMTksMTIgKzI0LDQ1IEBACiAKICNlbHNlCiAKK25hbWVzcGFjZSBpbnRlcm5hbHMgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBtYWtlX3VuaXF1ZV9pZgoreworICB1c2luZyBzaW5nbGUgPSBzdGQ6OnVuaXF1ZV9wdHI8VD47Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBtYWtlX3VuaXF1ZV9pZjxUW10+Cit7CisgIHVzaW5nIHVuYm91bmRfYXJyYXkgPSBzdGQ6OnVuaXF1ZV9wdHI8VFtdPjsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPgorc3RydWN0IG1ha2VfdW5pcXVlX2lmPFRbTl0+Cit7CisgIHVzaW5nIGJvdW5kX2FycmF5ID0gdm9pZDsKK307Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgotc3RkOjp1bmlxdWVfcHRyPFQ+IG1ha2VfdW5pcXVlKEFyZ3MmJi4uLiBhcmdzKQordHlwZW5hbWUgaW50ZXJuYWxzOjptYWtlX3VuaXF1ZV9pZjxUPjo6c2luZ2xlIG1ha2VfdW5pcXVlKEFyZ3MmJi4uLiBhcmdzKQogewogICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFQ+KG5ldyBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3R5cGVuYW1lIGludGVybmFsczo6bWFrZV91bmlxdWVfaWY8VD46OnVuYm91bmRfYXJyYXkgbWFrZV91bmlxdWUoc3RkOjpzaXplX3QgbikKK3sKKyAgdXNpbmcgRSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2V4dGVudDxUPjo6dHlwZTsKKworICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFQ+KG5ldyBFW25dKCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KK3R5cGVuYW1lIGludGVybmFsczo6bWFrZV91bmlxdWVfaWY8VD46OmJvdW5kX2FycmF5IG1ha2VfdW5pcXVlKEFyZ3MmJi4uLikgPQorICBkZWxldGU7CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBjbQpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9zZXQgYi9VdGlsaXRpZXMvc3RkL2NtL3NldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmRkNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS9zZXQKQEAgLTAsMCArMSw0MyBAQAorLy8gLSotYysrLSotCisvLyB2aW06IHNldCBmdD1jcHA6CisKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21fc2V0CisjZGVmaW5lIGNtX3NldAorCisjaW5jbHVkZSA8c2V0PiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisKKyNpbmNsdWRlIDxjbS9iaXRzL2VyYXNlX2lmLmh4eD4KKworbmFtZXNwYWNlIGNtIHsKKworLy8gc2hvdWxkIGJlIHVwZGF0ZWQgd2hlbiBDKysyMCBpcyBmaW5hbGl6ZWQKKyNpZiAoX19jcGx1c3BsdXMgPiAyMDE3MDNMIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKGRlZmluZWQoX01TVkNfTEFORykgJiYgX01TVkNfTEFORyA+IDIwMTcwMykpICYmICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZGVmaW5lZChfX2NwcF9saWJfZXJhc2VfaWYpCisKK3VzaW5nIHN0ZDo6ZXJhc2VfaWY7CisKKyNlbHNlCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIENvbXBhcmUsIHR5cGVuYW1lIEFsbG9jYXRvciwKKyAgICAgICAgICB0eXBlbmFtZSBQcmVkaWNhdGU+CitpbmxpbmUgdm9pZCBlcmFzZV9pZihzdGQ6OnNldDxLZXksIENvbXBhcmUsIEFsbG9jYXRvcj4mIGNvbnQsIFByZWRpY2F0ZSBwcmVkKQoreworICBpbnRlcm5hbHM6OmVyYXNlX2lmKGNvbnQsIHByZWQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBDb21wYXJlLCB0eXBlbmFtZSBBbGxvY2F0b3IsCisgICAgICAgICAgdHlwZW5hbWUgUHJlZGljYXRlPgoraW5saW5lIHZvaWQgZXJhc2VfaWYoc3RkOjptdWx0aXNldDxLZXksIENvbXBhcmUsIEFsbG9jYXRvcj4mIGNvbnQsCisgICAgICAgICAgICAgICAgICAgICBQcmVkaWNhdGUgcHJlZCkKK3sKKyAgaW50ZXJuYWxzOjplcmFzZV9pZihjb250LCBwcmVkKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIGNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS9zaGFyZWRfbXV0ZXggYi9VdGlsaXRpZXMvc3RkL2NtL3NoYXJlZF9tdXRleAppbmRleCAyYWM5NDQ3Li5lYzYzYTdiIDEwMDY0NAotLS0gYS9VdGlsaXRpZXMvc3RkL2NtL3NoYXJlZF9tdXRleAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL3NoYXJlZF9tdXRleApAQCAtMTcsNyArMTcsNyBAQAogIyAgaW5jbHVkZSA8c2hhcmVkX211dGV4PiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CiAjZW5kaWYKICNpZiAhZGVmaW5lZChDTWFrZV9IQVZFX0NYWF9TSEFSRURfTVVURVgpCi0jICBpbmNsdWRlICJjbV91di5oIgorIyAgaW5jbHVkZSA8Y20zcC91di5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBjbSB7CmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL3N0cmluZyBiL1V0aWxpdGllcy9zdGQvY20vc3RyaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNGM3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtL3N0cmluZwpAQCAtMCwwICsxLDQyIEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbV9zdHJpbmcKKyNkZWZpbmUgY21fc3RyaW5nCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3RyaW5nPiAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisKK25hbWVzcGFjZSBjbSB7CisKKy8vIHNob3VsZCBiZSB1cGRhdGVkIHdoZW4gQysrMjAgaXMgZmluYWxpemVkCisjaWYgKF9fY3BsdXNwbHVzID4gMjAxNzAzTCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPiAyMDE3MDMpKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRlZmluZWQoX19jcHBfbGliX2VyYXNlX2lmKQorCit1c2luZyBzdGQ6OmVyYXNlOwordXNpbmcgc3RkOjplcmFzZV9pZjsKKworI2Vsc2UKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgQWxsb2NhdG9yLCB0eXBlbmFtZSBWPgoraW5saW5lIHZvaWQgZXJhc2Uoc3RkOjpiYXNpY19zdHJpbmc8VCwgVHJhaXRzLCBBbGxvY2F0b3I+JiBjb250LAorICAgICAgICAgICAgICAgICAgY29uc3QgViYgdmFsdWUpCit7CisgIGNvbnQuZXJhc2Uoc3RkOjpyZW1vdmUoY29udC5iZWdpbigpLCBjb250LmVuZCgpLCB2YWx1ZSksIGNvbnQuZW5kKCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKHN0ZDo6YmFzaWNfc3RyaW5nPFQsIFRyYWl0cywgQWxsb2NhdG9yPiYgY29udCwKKyAgICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZSBwcmVkKQoreworICBjb250LmVyYXNlKHN0ZDo6cmVtb3ZlX2lmKGNvbnQuYmVnaW4oKSwgY29udC5lbmQoKSwgcHJlZCksIGNvbnQuZW5kKCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL3R5cGVfdHJhaXRzIGIvVXRpbGl0aWVzL3N0ZC9jbS90eXBlX3RyYWl0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzJjMmM2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS90eXBlX3RyYWl0cwpAQCAtMCwwICsxLDYzIEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbV90eXBlX3RyYWl0cworI2RlZmluZSBjbV90eXBlX3RyYWl0cworCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworbmFtZXNwYWNlIGNtIHsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTQwMkwgfHwgKGRlZmluZWQoX01TVkNfTEFORykgJiYgX01TVkNfTEFORyA+PSAyMDE0MDJMKQorCisvLyBNaXNjZWxsYW5lb3VzIHRyYW5zZm9ybWF0aW9ucwordGVtcGxhdGUgPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+Cit1c2luZyBlbmFibGVfaWZfdCA9IHN0ZDo6ZW5hYmxlX2lmX3Q8QiwgVD47CisKKyNlbHNlCisKKy8vIE1pc2NlbGxhbmVvdXMgdHJhbnNmb3JtYXRpb25zCit0ZW1wbGF0ZSA8Ym9vbCBCLCB0eXBlbmFtZSBUID0gdm9pZD4KK3VzaW5nIGVuYWJsZV9pZl90ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgVD46OnR5cGU7CisKKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTCB8fCAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID49IDIwMTcwMykKKworLy8gSGVscGVyIGNsYXNzZXMKK3VzaW5nIHN0ZDo6Ym9vbF9jb25zdGFudDsKKworLy8gTWlzY2VsbGFuZW91cyB0cmFuc2Zvcm1hdGlvbnMKK3VzaW5nIHN0ZDo6aW52b2tlX3Jlc3VsdDsKK3VzaW5nIHN0ZDo6aW52b2tlX3Jlc3VsdF90OworCit1c2luZyBzdGQ6OnZvaWRfdDsKKworI2Vsc2UKKworLy8gSGVscGVyIGNsYXNzZXMKK3RlbXBsYXRlIDxib29sIEI+Cit1c2luZyBib29sX2NvbnN0YW50ID0gc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLCBCPjsKKworLy8gTWlzY2VsbGFuZW91cyB0cmFuc2Zvcm1hdGlvbnMKK3RlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdUeXBlcz4KK3VzaW5nIGludm9rZV9yZXN1bHQgPSBzdGQ6OnJlc3VsdF9vZjxGKEFyZ1R5cGVzLi4uKT47CisKK3RlbXBsYXRlIDxjbGFzcyBGLCB0eXBlbmFtZS4uLiBBcmdUeXBlcz4KK3VzaW5nIGludm9rZV9yZXN1bHRfdCA9IHR5cGVuYW1lIGludm9rZV9yZXN1bHQ8RiwgQXJnVHlwZXMuLi4+Ojp0eXBlOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJnVHlwZXM+CitzdHJ1Y3QgbWFrZV92b2lkCit7CisgIHR5cGVkZWYgdm9pZCB0eXBlOworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdUeXBlcz4KK3VzaW5nIHZvaWRfdCA9IHR5cGVuYW1lIG1ha2Vfdm9pZDxBcmdUeXBlcy4uLj46OnR5cGU7CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBjbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY20vdW5vcmRlcmVkX21hcCBiL1V0aWxpdGllcy9zdGQvY20vdW5vcmRlcmVkX21hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjhhNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS91bm9yZGVyZWRfbWFwCkBAIC0wLDAgKzEsNDUgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtX3Vub3JkZXJlZF9tYXAKKyNkZWZpbmUgY21fdW5vcmRlcmVkX21hcAorCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCisjaW5jbHVkZSA8Y20vYml0cy9lcmFzZV9pZi5oeHg+CisKK25hbWVzcGFjZSBjbSB7CisKKy8vIHNob3VsZCBiZSB1cGRhdGVkIHdoZW4gQysrMjAgaXMgZmluYWxpemVkCisjaWYgKF9fY3BsdXNwbHVzID4gMjAxNzAzTCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPiAyMDE3MDMpKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRlZmluZWQoX19jcHBfbGliX2VyYXNlX2lmKQorCit1c2luZyBzdGQ6OmVyYXNlX2lmOworCisjZWxzZQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoLCB0eXBlbmFtZSBLZXlFcXVhbCwKKyAgICAgICAgICB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKAorICBzdGQ6OnVub3JkZXJlZF9tYXA8S2V5LCBULCBIYXNoLCBLZXlFcXVhbCwgQWxsb2NhdG9yPiYgY29udCwgUHJlZGljYXRlIHByZWQpCit7CisgIGludGVybmFsczo6ZXJhc2VfaWYoY29udCwgcHJlZCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2gsIHR5cGVuYW1lIEtleUVxdWFsLAorICAgICAgICAgIHR5cGVuYW1lIEFsbG9jYXRvciwgdHlwZW5hbWUgUHJlZGljYXRlPgoraW5saW5lIHZvaWQgZXJhc2VfaWYoCisgIHN0ZDo6dW5vcmRlcmVkX211bHRpbWFwPEtleSwgVCwgSGFzaCwgS2V5RXF1YWwsIEFsbG9jYXRvcj4mIGNvbnQsCisgIFByZWRpY2F0ZSBwcmVkKQoreworICBpbnRlcm5hbHM6OmVyYXNlX2lmKGNvbnQsIHByZWQpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtL3Vub3JkZXJlZF9zZXQgYi9VdGlsaXRpZXMvc3RkL2NtL3Vub3JkZXJlZF9zZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlYmFjNAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9zdGQvY20vdW5vcmRlcmVkX3NldApAQCAtMCwwICsxLDQ1IEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbV91bm9yZGVyZWRfc2V0CisjZGVmaW5lIGNtX3Vub3JkZXJlZF9zZXQKKworI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+IC8vIElXWVUgcHJhZ21hOiBleHBvcnQKKworI2luY2x1ZGUgPGNtL2JpdHMvZXJhc2VfaWYuaHh4PgorCituYW1lc3BhY2UgY20geworCisvLyBzaG91bGQgYmUgdXBkYXRlZCB3aGVuIEMrKzIwIGlzIGZpbmFsaXplZAorI2lmIChfX2NwbHVzcGx1cyA+IDIwMTcwM0wgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID4gMjAxNzAzKSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkZWZpbmVkKF9fY3BwX2xpYl9lcmFzZV9pZikKKwordXNpbmcgc3RkOjplcmFzZV9pZjsKKworI2Vsc2UKKwordGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaCwgdHlwZW5hbWUgS2V5RXF1YWwsIHR5cGVuYW1lIEFsbG9jYXRvciwKKyAgICAgICAgICB0eXBlbmFtZSBQcmVkaWNhdGU+CitpbmxpbmUgdm9pZCBlcmFzZV9pZihzdGQ6OnVub3JkZXJlZF9zZXQ8S2V5LCBIYXNoLCBLZXlFcXVhbCwgQWxsb2NhdG9yPiYgY29udCwKKyAgICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZSBwcmVkKQoreworICBpbnRlcm5hbHM6OmVyYXNlX2lmKGNvbnQsIHByZWQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBIYXNoLCB0eXBlbmFtZSBLZXlFcXVhbCwgdHlwZW5hbWUgQWxsb2NhdG9yLAorICAgICAgICAgIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKAorICBzdGQ6OnVub3JkZXJlZF9tdWx0aXNldDxLZXksIEhhc2gsIEtleUVxdWFsLCBBbGxvY2F0b3I+JiBjb250LAorICBQcmVkaWNhdGUgcHJlZCkKK3sKKyAgaW50ZXJuYWxzOjplcmFzZV9pZihjb250LCBwcmVkKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIGNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbS92ZWN0b3IgYi9VdGlsaXRpZXMvc3RkL2NtL3ZlY3RvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGJlNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbS92ZWN0b3IKQEAgLTAsMCArMSw0MCBAQAorLy8gLSotYysrLSotCisvLyB2aW06IHNldCBmdD1jcHA6CisKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21fdmVjdG9yCisjZGVmaW5lIGNtX3ZlY3RvcgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHZlY3Rvcj4gLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCituYW1lc3BhY2UgY20geworCisvLyBzaG91bGQgYmUgdXBkYXRlZCB3aGVuIEMrKzIwIGlzIGZpbmFsaXplZAorI2lmIChfX2NwbHVzcGx1cyA+IDIwMTcwM0wgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID4gMjAxNzAzKSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkZWZpbmVkKF9fY3BwX2xpYl9lcmFzZV9pZikKKwordXNpbmcgc3RkOjplcmFzZTsKK3VzaW5nIHN0ZDo6ZXJhc2VfaWY7CisKKyNlbHNlCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFY+CitpbmxpbmUgdm9pZCBlcmFzZShzdGQ6OnZlY3RvcjxULCBBbGxvY2F0b3I+JiBjb250LCBjb25zdCBWJiB2YWx1ZSkKK3sKKyAgY29udC5lcmFzZShzdGQ6OnJlbW92ZShjb250LmJlZ2luKCksIGNvbnQuZW5kKCksIHZhbHVlKSwgY29udC5lbmQoKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3IsIHR5cGVuYW1lIFByZWRpY2F0ZT4KK2lubGluZSB2b2lkIGVyYXNlX2lmKHN0ZDo6dmVjdG9yPFQsIEFsbG9jYXRvcj4mIGNvbnQsIFByZWRpY2F0ZSBwcmVkKQoreworICBjb250LmVyYXNlKHN0ZDo6cmVtb3ZlX2lmKGNvbnQuYmVnaW4oKSwgY29udC5lbmQoKSwgcHJlZCksIGNvbnQuZW5kKCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtU1RMLmh4eC5pbiBiL1V0aWxpdGllcy9zdGQvY21TVEwuaHh4LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljODYwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtU1RMLmh4eC5pbgpAQCAtMCwwICsxLDEwIEBACisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtU1RMX2h4eAorI2RlZmluZSBjbVNUTF9oeHgKKworLyogV2hldGhlciBDTWFrZSBpcyB1c2luZyBpdHMgb3duIFNUTCBpbXBsZW1lbnRhdGlvbi4gICovCisjY21ha2VkZWZpbmUgQ01ha2VfSEFWRV9DWFhfTUFLRV9VTklRVUUKKyNjbWFrZWRlZmluZSBDTWFrZV9IQVZFX0NYWF9GSUxFU1lTVEVNCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbWV4dC9hbGdvcml0aG0gYi9VdGlsaXRpZXMvc3RkL2NtZXh0L2FsZ29yaXRobQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTFjODlhCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC9hbGdvcml0aG0KQEAgLTAsMCArMSwyNTEgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtZXh0X2FsZ29yaXRobQorI2RlZmluZSBjbWV4dF9hbGdvcml0aG0KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgPGNtL3R5cGVfdHJhaXRzPgorI2luY2x1ZGUgPGNtZXh0L2l0ZXJhdG9yPgorI2luY2x1ZGUgPGNtZXh0L3R5cGVfdHJhaXRzPgorCisjaWYgZGVmaW5lZChfX1NVTlBST19DQykgJiYgZGVmaW5lZChfX3NwYXJjKQorIyAgaW5jbHVkZSA8bGlzdD4KKyMgIGluY2x1ZGUgPHZlY3Rvcj4KKyNlbmRpZgorCituYW1lc3BhY2UgY20geworCisjaWYgZGVmaW5lZChfX1NVTlBST19DQykgJiYgZGVmaW5lZChfX3NwYXJjKQorLy8gT3JhY2xlIERldmVsb3BlclN0dWRpbyBDKysgY29tcGlsZXIgb24gU29sYXJpcy9TcGFyYyBmYWlscyB0byBjb21waWxlCisvLyB0ZW1wbGF0ZXMgd2l0aCBjb25zdHJhaW50cy4KKy8vIFNvLCBvbiB0aGlzIHBsYXRmb3JtLCB1c2Ugb25seSBzaW1wbGUgdGVtcGxhdGVzLgorIyAgZGVmaW5lIEFQUEVORF9UV08oQzEsIEMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQgYXBwZW5kKEMxPHN0ZDo6dW5pcXVlX3B0cjxUPj4mIHYsIEMyPHN0ZDo6dW5pcXVlX3B0cjxVPj4mJiByKSAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RkOjp0cmFuc2Zvcm0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByLmJlZ2luKCksIHIuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcih2KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBbXShzdGQ6OnVuaXF1ZV9wdHI8VT4mIGl0ZW0pIHsgcmV0dXJuIHN0ZDo6bW92ZShpdGVtKTsgfSk7ICAgICAgICAgICAgXAorICAgICAgci5jbGVhcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQgYXBwZW5kKEMxPFQqPiYgdiwgQzI8c3RkOjp1bmlxdWVfcHRyPFU+PiBjb25zdCYgcikgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RkOjp0cmFuc2Zvcm0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByLmJlZ2luKCksIHIuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcih2KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBbXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VT4mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uZ2V0KCk7IH0pOyAgICAgICAgICAgXAorICAgIH0KKworIyAgZGVmaW5lIEFQUEVORF9PTkUoQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJbnB1dEl0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBjbTo6ZW5hYmxlX2lmX3Q8Y206OmlzX2lucHV0X2l0ZXJhdG9yPElucHV0SXQ+Ojp2YWx1ZSwgaW50PiA9ICAgXAorICAgICAgICAgICAgICAgIDA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZvaWQgYXBwZW5kKEM8VD4mIHYsIElucHV0SXQgZmlyc3QsIElucHV0SXQgbGFzdCkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdi5pbnNlcnQodi5lbmQoKSwgZmlyc3QsIGxhc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYW5nZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBjbTo6ZW5hYmxlX2lmX3Q8Y206OmlzX2lucHV0X3JhbmdlPFJhbmdlPjo6dmFsdWUsIGludD4gPSAwPiAgICAgXAorICAgIHZvaWQgYXBwZW5kKEM8VD4mIHYsIFJhbmdlIGNvbnN0JiByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdi5pbnNlcnQodi5lbmQoKSwgci5iZWdpbigpLCByLmVuZCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworIyAgZGVmaW5lIEFQUEVORChDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFQUEVORF9UV08oQywgQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFQUEVORF9PTkUoQykKKworIyAgZGVmaW5lIEFQUEVORF9NSVgoQzEsIEMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFQUEVORF9UV08oQzEsIEMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFQUEVORF9UV08oQzIsIEMxKQorCisvLyBGb3Igbm93LCBtYW5hZ2Ugb25seSBzdXBwb3J0IGZvciBzdGQ6OnZlY3RvciBhbmQgc3RkOjpsaXN0LgorLy8gT3RoZXIgc2VxdWVudGlhbCBjb250YWluZXIgc3VwcG9ydCBjYW4gYmUgYWRkZWQgaWYgbmVlZGVkLgorQVBQRU5EKHN0ZDo6dmVjdG9yKQorQVBQRU5EKHN0ZDo6bGlzdCkKK0FQUEVORF9NSVgoc3RkOjp2ZWN0b3IsIHN0ZDo6bGlzdCkKKworIyAgdW5kZWYgQVBQRU5ECisjICB1bmRlZiBBUFBFTkRfTUlYCisjICB1bmRlZiBBUFBFTkRfVFdPCisjICB1bmRlZiBBUFBFTkRfT05FCisKKyNlbHNlCisKK3RlbXBsYXRlIDwKKyAgdHlwZW5hbWUgQ29udGFpbmVyMSwgdHlwZW5hbWUgQ29udGFpbmVyMiwKKyAgY206OmVuYWJsZV9pZl90PAorICAgIGNtOjppc19zZXF1ZW5jZV9jb250YWluZXI8Q29udGFpbmVyMT46OnZhbHVlICYmCisgICAgICBjbTo6aXNfdW5pcXVlX3B0cjx0eXBlbmFtZSBDb250YWluZXIxOjp2YWx1ZV90eXBlPjo6dmFsdWUgJiYKKyAgICAgIGNtOjppc191bmlxdWVfcHRyPHR5cGVuYW1lIENvbnRhaW5lcjI6OnZhbHVlX3R5cGU+Ojp2YWx1ZSAmJgorICAgICAgc3RkOjppc19jb252ZXJ0aWJsZTx0eXBlbmFtZSBDb250YWluZXIyOjp2YWx1ZV90eXBlOjpwb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBDb250YWluZXIxOjp2YWx1ZV90eXBlOjpwb2ludGVyPjo6dmFsdWUsCisgICAgaW50PiA9IDA+Cit2b2lkIGFwcGVuZChDb250YWluZXIxJiB2LCBDb250YWluZXIyJiYgcikKK3sKKyAgc3RkOjp0cmFuc2Zvcm0oCisgICAgci5iZWdpbigpLCByLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIodiksCisgICAgW10odHlwZW5hbWUgQ29udGFpbmVyMjo6dmFsdWVfdHlwZSYgaXRlbSkgeyByZXR1cm4gc3RkOjptb3ZlKGl0ZW0pOyB9KTsKKyAgci5jbGVhcigpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyMSwgdHlwZW5hbWUgQ29udGFpbmVyMiwKKyAgICAgICAgICBjbTo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICAgICBjbTo6aXNfc2VxdWVuY2VfY29udGFpbmVyPENvbnRhaW5lcjE+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8dHlwZW5hbWUgQ29udGFpbmVyMTo6dmFsdWVfdHlwZT46OnZhbHVlICYmCisgICAgICAgICAgICAgIGNtOjppc191bmlxdWVfcHRyPHR5cGVuYW1lIENvbnRhaW5lcjI6OnZhbHVlX3R5cGU+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxlPHR5cGVuYW1lIENvbnRhaW5lcjI6OnZhbHVlX3R5cGU6OnBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgQ29udGFpbmVyMTo6dmFsdWVfdHlwZT46OnZhbHVlLAorICAgICAgICAgICAgaW50PiA9IDA+CisjICBpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQordm9pZCBhcHBlbmQoQ29udGFpbmVyMSYgdiwgQ29udGFpbmVyMiBjb25zdCYgciwgZGV0YWlsOjpvdmVybG9hZF9zZWxlY3RvcjwwPikKKyMgIGVsc2UKK3ZvaWQgYXBwZW5kKENvbnRhaW5lcjEmIHYsIENvbnRhaW5lcjIgY29uc3QmIHIpCisjICBlbmRpZgoreworICBzdGQ6OnRyYW5zZm9ybSgKKyAgICByLmJlZ2luKCksIHIuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcih2KSwKKyAgICBbXShjb25zdCB0eXBlbmFtZSBDb250YWluZXIyOjp2YWx1ZV90eXBlJiBpdGVtKSB7IHJldHVybiBpdGVtLmdldCgpOyB9KTsKK30KKwordGVtcGxhdGUgPAorICB0eXBlbmFtZSBDb250YWluZXIsIHR5cGVuYW1lIElucHV0SXQsCisgIGNtOjplbmFibGVfaWZfdDwKKyAgICBjbTo6aXNfc2VxdWVuY2VfY29udGFpbmVyPENvbnRhaW5lcj46OnZhbHVlICYmCisgICAgICBjbTo6aXNfaW5wdXRfaXRlcmF0b3I8SW5wdXRJdD46OnZhbHVlICYmCisgICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxlPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPElucHV0SXQ+Ojp2YWx1ZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGU+Ojp2YWx1ZSwKKyAgICBpbnQ+ID0gMD4KK3ZvaWQgYXBwZW5kKENvbnRhaW5lciYgdiwgSW5wdXRJdCBmaXJzdCwgSW5wdXRJdCBsYXN0KQoreworICB2Lmluc2VydCh2LmVuZCgpLCBmaXJzdCwgbGFzdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXIsIHR5cGVuYW1lIFJhbmdlLAorICAgICAgICAgIGNtOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIGNtOjppc19zZXF1ZW5jZV9jb250YWluZXI8Q29udGFpbmVyPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgY206OmlzX2lucHV0X3JhbmdlPFJhbmdlPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIWNtOjppc191bmlxdWVfcHRyPHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZT46OnZhbHVlICYmCisgICAgICAgICAgICAgICFjbTo6aXNfdW5pcXVlX3B0cjx0eXBlbmFtZSBSYW5nZTo6dmFsdWVfdHlwZT46OnZhbHVlICYmCisgICAgICAgICAgICAgIHN0ZDo6aXNfY29udmVydGlibGU8dHlwZW5hbWUgUmFuZ2U6OnZhbHVlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlPjo6dmFsdWUsCisgICAgICAgICAgICBpbnQ+ID0gMD4KKyMgIGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpCit2b2lkIGFwcGVuZChDb250YWluZXImIHYsIFJhbmdlIGNvbnN0JiByLCBkZXRhaWw6Om92ZXJsb2FkX3NlbGVjdG9yPDE+KQorIyAgZWxzZQordm9pZCBhcHBlbmQoQ29udGFpbmVyJiB2LCBSYW5nZSBjb25zdCYgcikKKyMgIGVuZGlmCit7CisgIHYuaW5zZXJ0KHYuZW5kKCksIHIuYmVnaW4oKSwgci5lbmQoKSk7Cit9CisKKyMgIGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3ZvaWQgYXBwZW5kKFQmIHYsIFUgY29uc3QmIHIpCit7CisgIGNtOjphcHBlbmQodiwgciwgZGV0YWlsOjpvdmVybG9hZF9zZWxlY3RvcjwxPnt9KTsKK30KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIEtleT4KK2F1dG8gY29udGFpbnMoSXRlcmF0b3IgZmlyc3QsIEl0ZXJhdG9yIGxhc3QsIEtleSBjb25zdCYga2V5LAorICAgICAgICAgICAgICBkZXRhaWw6Om92ZXJsb2FkX3NlbGVjdG9yPDE+KSAtPiBkZWNsdHlwZShmaXJzdC0+Zmlyc3QgPT0ga2V5KQorI2Vsc2UKK3RlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgS2V5LAorICAgICAgICAgIGNtOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIGNtOjppc19pbnB1dF9pdGVyYXRvcjxJdGVyYXRvcj46OnZhbHVlICYmCisgICAgICAgICAgICAgIHN0ZDo6aXNfY29udmVydGlibGU8S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3I+Ojp2YWx1ZV90eXBlOjpmaXJzdF90eXBlPjo6dmFsdWUsCisgICAgICAgICAgICBpbnQ+ID0gMD4KK2Jvb2wgY29udGFpbnMoSXRlcmF0b3IgZmlyc3QsIEl0ZXJhdG9yIGxhc3QsIEtleSBjb25zdCYga2V5KQorI2VuZGlmCit7CisgIHJldHVybiBzdGQ6OmZpbmRfaWYoCisgICAgICAgICAgIGZpcnN0LCBsYXN0LAorICAgICAgICAgICBbJmtleV0oCisgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIGNvbnN0JiBpdGVtKSB7CisgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZmlyc3QgPT0ga2V5OworICAgICAgICAgICB9KSAhPSBsYXN0OworfQorCisjaWYgZGVmaW5lZChfX1NVTlBST19DQykKK3RlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgS2V5PgorYm9vbCBjb250YWlucyhJdGVyYXRvciBmaXJzdCwgSXRlcmF0b3IgbGFzdCwgS2V5IGNvbnN0JiBrZXksCisgICAgICAgICAgICAgIGRldGFpbDo6b3ZlcmxvYWRfc2VsZWN0b3I8MD4pCisjZWxzZQordGVtcGxhdGUgPAorICB0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgS2V5LAorICBjbTo6ZW5hYmxlX2lmX3Q8CisgICAgY206OmlzX2lucHV0X2l0ZXJhdG9yPEl0ZXJhdG9yPjo6dmFsdWUgJiYKKyAgICAgIHN0ZDo6aXNfY29udmVydGlibGU8CisgICAgICAgIEtleSwgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPjo6dmFsdWUsCisgICAgaW50PiA9IDA+Citib29sIGNvbnRhaW5zKEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0LCBLZXkgY29uc3QmIGtleSkKKyNlbmRpZgoreworICByZXR1cm4gc3RkOjpmaW5kKGZpcnN0LCBsYXN0LCBrZXkpICE9IGxhc3Q7Cit9CisKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQordGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBLZXk+Citib29sIGNvbnRhaW5zKEl0ZXJhdG9yIGZpcnN0LCBJdGVyYXRvciBsYXN0LCBLZXkgY29uc3QmIGtleSkKK3sKKyAgcmV0dXJuIGNvbnRhaW5zKGZpcnN0LCBsYXN0LCBrZXksIGRldGFpbDo6b3ZlcmxvYWRfc2VsZWN0b3I8MT57fSk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2UsIHR5cGVuYW1lIEtleT4KK2F1dG8gY29udGFpbnMoUmFuZ2UgY29uc3QmIHJhbmdlLCBLZXkgY29uc3QmIGtleSwgZGV0YWlsOjpvdmVybG9hZF9zZWxlY3RvcjwxPikKKyAgLT4gZGVjbHR5cGUocmFuZ2UuZmluZChrZXkpICE9IHJhbmdlLmVuZCgpKQorI2Vsc2UKK3RlbXBsYXRlIDwKKyAgdHlwZW5hbWUgUmFuZ2UsIHR5cGVuYW1lIEtleSwKKyAgY206OmVuYWJsZV9pZl90PGNtOjppc19hc3NvY2lhdGl2ZV9jb250YWluZXI8UmFuZ2U+Ojp2YWx1ZSB8fAorICAgICAgICAgICAgICAgICAgICBjbTo6aXNfdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcjxSYW5nZT46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgaW50PiA9IDA+Citib29sIGNvbnRhaW5zKFJhbmdlIGNvbnN0JiByYW5nZSwgS2V5IGNvbnN0JiBrZXkpCisjZW5kaWYKK3sKKyAgcmV0dXJuIHJhbmdlLmZpbmQoa2V5KSAhPSByYW5nZS5lbmQoKTsKK30KKworI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2UsIHR5cGVuYW1lIEtleT4KK2Jvb2wgY29udGFpbnMoUmFuZ2UgY29uc3QmIHJhbmdlLCBLZXkgY29uc3QmIGtleSwgZGV0YWlsOjpvdmVybG9hZF9zZWxlY3RvcjwwPikKKyNlbHNlCit0ZW1wbGF0ZSA8CisgIHR5cGVuYW1lIFJhbmdlLCB0eXBlbmFtZSBLZXksCisgIGNtOjplbmFibGVfaWZfdDxjbTo6aXNfaW5wdXRfcmFuZ2U8UmFuZ2U+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAhKGNtOjppc19hc3NvY2lhdGl2ZV9jb250YWluZXI8UmFuZ2U+Ojp2YWx1ZSB8fAorICAgICAgICAgICAgICAgICAgICAgIGNtOjppc191bm9yZGVyZWRfYXNzb2NpYXRpdmVfY29udGFpbmVyPFJhbmdlPjo6dmFsdWUpLAorICAgICAgICAgICAgICAgICAgaW50PiA9IDA+Citib29sIGNvbnRhaW5zKFJhbmdlIGNvbnN0JiByYW5nZSwgS2V5IGNvbnN0JiBrZXkpCisjZW5kaWYKK3sKKyAgcmV0dXJuIHN0ZDo6ZmluZChzdGQ6OmJlZ2luKHJhbmdlKSwgc3RkOjplbmQocmFuZ2UpLCBrZXkpICE9IHN0ZDo6ZW5kKHJhbmdlKTsKK30KKworI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2UsIHR5cGVuYW1lIEtleT4KK2Jvb2wgY29udGFpbnMoUmFuZ2UgY29uc3QmIHJhbmdlLCBLZXkgY29uc3QmIGtleSkKK3sKKyAgcmV0dXJuIGNvbnRhaW5zKHJhbmdlLCBrZXksIGRldGFpbDo6b3ZlcmxvYWRfc2VsZWN0b3I8MT57fSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgY20KKworI2VuZGlmCmRpZmYgLS1naXQgYS9VdGlsaXRpZXMvc3RkL2NtZXh0L2l0ZXJhdG9yIGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC9pdGVyYXRvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTk0NjJmCi0tLSAvZGV2L251bGwKKysrIGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC9pdGVyYXRvcgpAQCAtMCwwICsxLDUxIEBACisvLyAtKi1jKystKi0KKy8vIHZpbTogc2V0IGZ0PWNwcDoKKworLyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE9TSS1hcHByb3ZlZCBCU0QgMy1DbGF1c2UgTGljZW5zZS4gIFNlZSBhY2NvbXBhbnlpbmcKKyAgIGZpbGUgQ29weXJpZ2h0LnR4dCBvciBodHRwczovL2NtYWtlLm9yZy9saWNlbnNpbmcgZm9yIGRldGFpbHMuICAqLworI2lmbmRlZiBjbWV4dF9pdGVyYXRvcgorI2RlZmluZSBjbWV4dF9pdGVyYXRvcgorCisjaW5jbHVkZSA8aXRlcmF0b3I+CisKKyNpbmNsdWRlIDxjbS90eXBlX3RyYWl0cz4KKworbmFtZXNwYWNlIGNtIHsKKworLy8gY2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpdGVyYXRvciB0eXBlCit0ZW1wbGF0ZSA8dHlwZW5hbWUgST4KK3VzaW5nIGlzX2l0ZXJhdG9yID0KKyAgc3RkOjppc19pbnRlZ3JhbDx0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJPjo6ZGlmZmVyZW5jZV90eXBlPjsKKworLy8gY2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpbnB1dCBpdGVyYXRvciB0eXBlCit0ZW1wbGF0ZSA8dHlwZW5hbWUgST4KK3VzaW5nIGlzX2lucHV0X2l0ZXJhdG9yID0KKyAgc3RkOjppc19iYXNlX29mPHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8ST46Oml0ZXJhdG9yX2NhdGVnb3J5PjsKKworLy8gY2hlY2tzIGlmIGEgdHlwZSBpcyBhIHJhbmdlIHR5cGU6IHN0ZDo6YmVnaW4oKSBhbmQgc3RkOjplbmQoKSBhcmUgc3VwcG9ydGVkCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2U+Cit1c2luZyBpc19yYW5nZSA9IGNtOjpib29sX2NvbnN0YW50PAorICBjbTo6aXNfaXRlcmF0b3I8ZGVjbHR5cGUoc3RkOjpiZWdpbihzdGQ6OmRlY2x2YWw8Y29uc3QgUmFuZ2U+KCkpKT46OnZhbHVlICYmCisgIGNtOjppc19pdGVyYXRvcjxkZWNsdHlwZShzdGQ6OmVuZChzdGQ6OmRlY2x2YWw8Y29uc3QgUmFuZ2U+KCkpKT46OnZhbHVlPjsKKworLy8gY2hlY2tzIGlmIGEgdHlwZSBpcyBhbiBpbnB1dCByYW5nZSB0eXBlOiBzdGQ6OmJlZ2luKCkgYW5kIHN0ZDo6ZW5kKCkgYXJlCisvLyByZXR1cm5pbmcgYW4gaW5wdXQgaXRlcmF0b3IKK3RlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KK3VzaW5nIGlzX2lucHV0X3JhbmdlID0KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE5MjAKKyAgLy8gTVMgQysrIGlzIG5vdCBhYmxlIHRvIGV2YWx1YXRlIGNvbXBsZXggdHlwZSBpbnRyb3NwZWN0aW9uLAorICAvLyBzbyB1c2UgYSBzaW1wbGlmaWVkIHZlcnNpb24KKyAgY206OmJvb2xfY29uc3RhbnQ8c3RkOjppc19jbGFzczxSYW5nZT46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfcG9pbnRlcjxSYW5nZT46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfYXJyYXk8UmFuZ2U+Ojp2YWx1ZT47CisjZWxzZQorICBjbTo6Ym9vbF9jb25zdGFudDxjbTo6aXNfaW5wdXRfaXRlcmF0b3I8ZGVjbHR5cGUoCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjpiZWdpbihzdGQ6OmRlY2x2YWw8Y29uc3QgUmFuZ2U+KCkpKT46OnZhbHVlICYmCisgICAgICAgICAgICAgICAgICAgIGNtOjppc19pbnB1dF9pdGVyYXRvcjxkZWNsdHlwZSgKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmVuZChzdGQ6OmRlY2x2YWw8Y29uc3QgUmFuZ2U+KCkpKT46OnZhbHVlPjsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBjbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY21leHQvbWVtb3J5IGIvVXRpbGl0aWVzL3N0ZC9jbWV4dC9tZW1vcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEzMjZmMAotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9zdGQvY21leHQvbWVtb3J5CkBAIC0wLDAgKzEsNDEgQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtZXh0X21lbW9yeQorI2RlZmluZSBjbWV4dF9tZW1vcnkKKworI2luY2x1ZGUgPHR5cGVpbmZvPgorCisjaW5jbHVkZSA8Y20vdHlwZV90cmFpdHM+CisKK25hbWVzcGFjZSBjbSB7CisKK3RlbXBsYXRlIDwKKyAgdHlwZW5hbWUgVCwgdHlwZW5hbWUgTywKKyAgY206OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8Tz4oKS5nZXQoKSk+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorVCYgc3RhdGljX3JlZmVyZW5jZV9jYXN0KE8mIGl0ZW0pCit7CisgIHJldHVybiAqKHN0YXRpY19jYXN0PFQqPihpdGVtLmdldCgpKSk7Cit9CisKK3RlbXBsYXRlIDwKKyAgdHlwZW5hbWUgVCwgdHlwZW5hbWUgTywKKyAgY206OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8Tz4oKS5nZXQoKSk+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorVCYgZHluYW1pY19yZWZlcmVuY2VfY2FzdChPJiBpdGVtKQoreworICBhdXRvIHAgPSBkeW5hbWljX2Nhc3Q8VCo+KGl0ZW0uZ2V0KCkpOworCisgIGlmIChwID09IG51bGxwdHIpIHsKKyAgICB0aHJvdyBzdGQ6OmJhZF9jYXN0KCk7CisgIH0KKworICByZXR1cm4gKnA7Cit9CisKK30gLy8gbmFtZXNwYWNlIGNtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL3N0ZC9jbWV4dC9zdHJpbmdfdmlldyBiL1V0aWxpdGllcy9zdGQvY21leHQvc3RyaW5nX3ZpZXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1MmIxMQotLS0gL2Rldi9udWxsCisrKyBiL1V0aWxpdGllcy9zdGQvY21leHQvc3RyaW5nX3ZpZXcKQEAgLTAsMCArMSw0MiBAQAorLy8gLSotYysrLSotCisvLyB2aW06IHNldCBmdD1jcHA6CisKKy8qIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBPU0ktYXBwcm92ZWQgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuICBTZWUgYWNjb21wYW55aW5nCisgICBmaWxlIENvcHlyaWdodC50eHQgb3IgaHR0cHM6Ly9jbWFrZS5vcmcvbGljZW5zaW5nIGZvciBkZXRhaWxzLiAgKi8KKyNpZm5kZWYgY21leHRfc3RyaW5nX3ZpZXcKKyNkZWZpbmUgY21leHRfc3RyaW5nX3ZpZXcKKworI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNpbmNsdWRlIDxjbS9zdHJpbmdfdmlldz4KKworbmFtZXNwYWNlIGNtIHsKKworLyoqIEEgc3RyaW5nX3ZpZXcgdGhhdCBvbmx5IGJpbmRzIHRvIHN0YXRpYyBzdG9yYWdlLgorICoKKyAqIFRoaXMgaXMgdXNlZCB0b2dldGhlciB3aXRoIHRoZSBgIiJfc2AgdXNlci1kZWZpbmVkIGxpdGVyYWwgb3BlcmF0b3IKKyAqIHRvIGNvbnN0cnVjdCBhIHR5cGUtc2FmZSBhYnN0cmFjdGlvbiBvZiBhIHN0cmluZ192aWV3IHRoYXQgb25seSB2aWV3cworICogc3RhdGljYWxseSBhbGxvY2F0ZWQgc3RyaW5ncy4gIFRoZXNlIHN0cmluZ3MgYXJlIGNvbnN0IGFuZCBhdmFpbGFibGUKKyAqIGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIHRoZSBwcm9ncmFtLgorICovCitjbGFzcyBzdGF0aWNfc3RyaW5nX3ZpZXcgOiBwdWJsaWMgc3RyaW5nX3ZpZXcKK3sKKyAgc3RhdGljX3N0cmluZ192aWV3KHN0cmluZ192aWV3IHYpCisgICAgOiBzdHJpbmdfdmlldyh2KQorICB7CisgIH0KKworICBmcmllbmQgc3RhdGljX3N0cmluZ192aWV3IG9wZXJhdG9yIiIgX3MoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworfTsKKworLyoqIENyZWF0ZSBhIHN0YXRpY19zdHJpbmdfdmlldyB1c2luZyBgIiJfc2AgbGl0ZXJhbCBzeW50YXguICAqLworaW5saW5lIHN0YXRpY19zdHJpbmdfdmlldyBvcGVyYXRvciIiIF9zKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICByZXR1cm4gc3RyaW5nX3ZpZXcoZGF0YSwgc2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGNtCisKK3VzaW5nIGNtOjpvcGVyYXRvciIiIF9zOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1V0aWxpdGllcy9zdGQvY21leHQvdHlwZV90cmFpdHMgYi9VdGlsaXRpZXMvc3RkL2NtZXh0L3R5cGVfdHJhaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMmI0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9VdGlsaXRpZXMvc3RkL2NtZXh0L3R5cGVfdHJhaXRzCkBAIC0wLDAgKzEsODggQEAKKy8vIC0qLWMrKy0qLQorLy8gdmltOiBzZXQgZnQ9Y3BwOgorCisvKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgT1NJLWFwcHJvdmVkIEJTRCAzLUNsYXVzZSBMaWNlbnNlLiAgU2VlIGFjY29tcGFueWluZworICAgZmlsZSBDb3B5cmlnaHQudHh0IG9yIGh0dHBzOi8vY21ha2Uub3JnL2xpY2Vuc2luZyBmb3IgZGV0YWlscy4gICovCisjaWZuZGVmIGNtZXh0X3R5cGVfdHJhaXRzCisjZGVmaW5lIGNtZXh0X3R5cGVfdHJhaXRzCisKKyNpbmNsdWRlIDxtZW1vcnk+CisKKyNpbmNsdWRlIDxjbS90eXBlX3RyYWl0cz4KKworbmFtZXNwYWNlIGNtIHsKKworI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpCisvLyBPcmFjbGUgRGV2ZWxvcGVyU3R1ZGlvIEMrKyBjb21waWxlciBkbyBub3Qgc3VwcG9ydCBvdmVybG9hZGVkIHRlbXBsYXRlcyB3aXRoCisvLyBzYW1lIHNpZ25hdHVyZSBidXQgZGlmZmVyZW50IGNvbnN0cmFpbnRzIG92ZXIgdGVtcGxhdGUgYXJndW1lbnRzCisvLyAoaS5lLiBtZXRhLXByb2dyYW1taW5nKS4KKy8vIEFzIGEgd29yay1hcm91bmQsIHVzZSBhIHN0cnVjdHVyZSB0byBhdm9pZCB0ZW1wbGF0ZXMgd2l0aCBzYW1lIHNpZ25hdHVyZS4KK25hbWVzcGFjZSBkZXRhaWwgewordGVtcGxhdGUgPGludCBOPgorc3RydWN0IG92ZXJsb2FkX3NlbGVjdG9yIDogb3ZlcmxvYWRfc2VsZWN0b3I8TiAtIDE+Cit7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IG92ZXJsb2FkX3NlbGVjdG9yPDA+Cit7Cit9OworfQorI2VuZGlmCisKKy8vIHR5cGUgdHJhaXRzIGZvciBtYW5hZ2VkIHBvaW50ZXIgdHlwZXMKK3RlbXBsYXRlIDx0eXBlbmFtZT4KK3N0cnVjdCBpc191bmlxdWVfcHRyIDogc3RkOjpmYWxzZV90eXBlCit7Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgaXNfdW5pcXVlX3B0cjxzdGQ6OnVuaXF1ZV9wdHI8VD4+IDogc3RkOjp0cnVlX3R5cGUKK3sKK307CisKKy8vIHR5cGUgdHJhaXRzIGZvciBjb250YWluZXJzCit0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZF90PD4+CitzdHJ1Y3QgaXNfY29udGFpbmVyIDogc3RkOjpmYWxzZV90eXBlCit7Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgaXNfY29udGFpbmVyPAorICBULAorICBjbTo6dm9pZF90PHR5cGVuYW1lIFQ6OnZhbHVlX3R5cGUsIHR5cGVuYW1lIFQ6OnNpemVfdHlwZSwKKyAgICAgICAgICAgICB0eXBlbmFtZSBUOjpkaWZmZXJlbmNlX3R5cGUsIHR5cGVuYW1lIFQ6Oml0ZXJhdG9yPj4KKyAgOiBzdGQ6OnRydWVfdHlwZQoreworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWRfdDw+Pgorc3RydWN0IGlzX2Fzc29jaWF0aXZlX2NvbnRhaW5lciA6IHN0ZDo6ZmFsc2VfdHlwZQoreworfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IGlzX2Fzc29jaWF0aXZlX2NvbnRhaW5lcjwKKyAgVCwgY206OnZvaWRfdDx0eXBlbmFtZSBUOjprZXlfdHlwZSwgdHlwZW5hbWUgVDo6a2V5X2NvbXBhcmU+PgorICA6IGNtOjppc19jb250YWluZXI8VD4KK3sKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkX3Q8Pj4KK3N0cnVjdCBpc191bm9yZGVyZWRfYXNzb2NpYXRpdmVfY29udGFpbmVyIDogc3RkOjpmYWxzZV90eXBlCit7Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgaXNfdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcjwKKyAgVCwKKyAgY206OnZvaWRfdDx0eXBlbmFtZSBUOjprZXlfdHlwZSwgdHlwZW5hbWUgVDo6aGFzaGVyLCB0eXBlbmFtZSBUOjprZXlfZXF1YWwsCisgICAgICAgICAgICAgdHlwZW5hbWUgVDo6bG9jYWxfaXRlcmF0b3I+PiA6IGNtOjppc19jb250YWluZXI8VD4KK3sKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgaXNfc2VxdWVuY2VfY29udGFpbmVyID0KKyAgY206OmJvb2xfY29uc3RhbnQ8Y206OmlzX2NvbnRhaW5lcjxUPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgIWNtOjppc19hc3NvY2lhdGl2ZV9jb250YWluZXI8VD46OnZhbHVlICYmCisgICAgICAgICAgICAgICAgICAgICFjbTo6aXNfdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcjxUPjo6dmFsdWU+OworCit9IC8vIG5hbWVzcGFjZSBjbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Jvb3RzdHJhcCBiL2Jvb3RzdHJhcAppbmRleCAxZjhlYWE1Li4yZWYwZmJiIDEwMDc1NQotLS0gYS9ib290c3RyYXAKKysrIGIvYm9vdHN0cmFwCkBAIC05LDE1ICs5LDIzIEBACiAjIENvbXBpbGUgZmxhZyBleHRyYWN0aW9uIGZ1bmN0aW9uLgogY21ha2VfZXh0cmFjdF9zdGFuZGFyZF9mbGFncygpCiB7Ci0gIHNlZCAtbiAicy8gKnNldCAqKCAqQ01BS0VfJHsyfSR7M31fRVhURU5TSU9OX0NPTVBJTEVfT1BUSU9OICpcIlx7MCwxXH1cKFteXCIpXSpcKS4qL1wxL3AiIFwKLSAgICAiJHtjbWFrZV9zb3VyY2VfZGlyfS9Nb2R1bGVzL0NvbXBpbGVyLyIkezE6LSp9LSR7Mn0uY21ha2UgMj4vZGV2L251bGwgfCB0ciAnOycgJyAnCisgIGlkPSIkezE6LSp9IgorICBsYW5nPSIkezJ9IgorICB2ZXI9IiR7M30iCisgIHNlZCAtbiAicy8gKnNldCAqKCAqQ01BS0VfJHtsYW5nfSR7dmVyfV9FWFRFTlNJT05fQ09NUElMRV9PUFRJT04gKlwiXHswLDFcfVwoW15cIildKlwpLiovXDEvcCIgXAorICAgICIke2NtYWtlX3NvdXJjZV9kaXJ9L01vZHVsZXMvQ29tcGlsZXIvIiR7aWR9LSR7bGFuZ30uY21ha2UgXAorICAgIDI+L2Rldi9udWxsIHwgdHIgJzsnICcgJworICAjIENsYW5nJ3MgQ1hYIGNvbXBpbGVyIGZsYWdzIGFyZSBpbiB0aGUgY29tbW9uIG1vZHVsZS4KKyAgc2VkIC1uICJzLyAqc2V0ICooICpDTUFLRV9cXFwke2xhbmd9JHt2ZXJ9X0VYVEVOU0lPTl9DT01QSUxFX09QVElPTiAqXCJcezAsMVx9XChbXlwiKV0qXCkuKi9cMS9wIiBcCisgICAgIiR7Y21ha2Vfc291cmNlX2Rpcn0vTW9kdWxlcy9Db21waWxlci9DbGFuZy5jbWFrZSIgXAorICAgIDI+L2Rldi9udWxsIHwgdHIgJzsnICcgJwogfQogCiAjIFZlcnNpb24gbnVtYmVyIGV4dHJhY3Rpb24gZnVuY3Rpb24uCiBjbWFrZV92ZXJzaW9uX2NvbXBvbmVudCgpCiB7CiAgIHNlZCAtbiAiCi0vXnNldChDTWFrZV9WRVJTSU9OXyR7MX0vIHtzL3NldChDTWFrZV9WRVJTSU9OXyR7MX0gKlwoWzAtOV0qXCkpL1wxLztwO30KKy9ec2V0KENNYWtlX1ZFUlNJT05fJHsxfS8ge3Mvc2V0KENNYWtlX1ZFUlNJT05fJHsxfSAqXChbMC05XSpcKSkuKi9cMS87cDt9CiAiICIke2NtYWtlX3NvdXJjZV9kaXJ9L1NvdXJjZS9DTWFrZVZlcnNpb24uY21ha2UiCiB9CiAKQEAgLTM4LDcgKzQ2LDcgQEAKIAogY21ha2VfdG91cHBlcigpCiB7Ci0gICAgZWNobyAiJDEiIHwgdHIgJ1s6bG93ZXI6XScgJ1s6dXBwZXI6XScKKyAgICBlY2hvICIkMSIgfCB0ciAnW2Etel0nICdbQS1aXScKIH0KIAogIyBEZXRlY3Qgc3lzdGVtIGFuZCBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCkBAIC01Miw3ICs2MCw3IEBACiBjbWFrZV92ZXJzaW9uX3BhdGNoPSJgY21ha2VfdmVyc2lvbl9jb21wb25lbnQgUEFUQ0hgIgogY21ha2VfdmVyc2lvbj0iJHtjbWFrZV92ZXJzaW9uX21ham9yfS4ke2NtYWtlX3ZlcnNpb25fbWlub3J9LiR7Y21ha2VfdmVyc2lvbl9wYXRjaH0iCiBjbWFrZV92ZXJzaW9uX3JjPSJgY21ha2VfdmVyc2lvbl9jb21wb25lbnQgUkNgIgotaWYgWyAiJGNtYWtlX3ZlcnNpb25fcmMiICE9ICIiIF07IHRoZW4KK2lmIHRlc3QgIiRjbWFrZV92ZXJzaW9uX3JjIiAhPSAiIjsgdGhlbgogICBjbWFrZV92ZXJzaW9uPSIke2NtYWtlX3ZlcnNpb259LXJjJHtjbWFrZV92ZXJzaW9uX3JjfSIKIGZpCiAKQEAgLTEzMSw3ICsxMzksNyBAQAogaWYgZWNobyAiJHtjbWFrZV9zeXN0ZW19IiB8IGdyZXAgSFAtVVggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgIGRpZSAnQ01ha2Ugbm8gbG9uZ2VyIGNvbXBpbGVzIG9uIEhQLVVYLiAgU2VlCiAKLSAgaHR0cHM6Ly9naXRsYWIua2l0d2FyZS5jb20vY21ha2UvY21ha2UvaXNzdWVzLzE3MTM3CisgIGh0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlLy0vaXNzdWVzLzE3MTM3CiAKIFVzZSBDTWFrZSAzLjkgb3IgbG93ZXIgaW5zdGVhZC4nCiAgIGNtYWtlX3N5c3RlbV9ocHV4PXRydWUKQEAgLTIwMSwxMyArMjA5LDEzIEBACiAKICMgQ2hvb3NlIHRoZSBkZWZhdWx0IGluc3RhbGwgcHJlZml4LgogaWYgJHtjbWFrZV9zeXN0ZW1fbWluZ3d9OyB0aGVuCi0gIGlmIFsgIngke1BST0dSQU1GSUxFU30iICE9ICJ4IiBdOyB0aGVuCisgIGlmIHRlc3QgIngke1BST0dSQU1GSUxFU30iICE9ICJ4IjsgdGhlbgogICAgIGNtYWtlX2RlZmF1bHRfcHJlZml4PWBjbWFrZV9maXhfc2xhc2hlcyAiJHtQUk9HUkFNRklMRVN9L0NNYWtlImAKLSAgZWxpZiBbICJ4JHtQcm9ncmFtRmlsZXN9IiAhPSAieCIgXTsgdGhlbgorICBlbGlmIHRlc3QgIngke1Byb2dyYW1GaWxlc30iICE9ICJ4IjsgdGhlbgogICAgIGNtYWtlX2RlZmF1bHRfcHJlZml4PWBjbWFrZV9maXhfc2xhc2hlcyAiJHtQcm9ncmFtRmlsZXN9L0NNYWtlImAKLSAgZWxpZiBbICJ4JHtTWVNURU1EUklWRX0iICE9ICJ4IiBdOyB0aGVuCisgIGVsaWYgdGVzdCAieCR7U1lTVEVNRFJJVkV9IiAhPSAieCI7IHRoZW4KICAgICBjbWFrZV9kZWZhdWx0X3ByZWZpeD1gY21ha2VfZml4X3NsYXNoZXMgIiR7U1lTVEVNRFJJVkV9L1Byb2dyYW0gRmlsZXMvQ01ha2UiYAotICBlbGlmIFsgIngke1N5c3RlbURyaXZlfSIgIT0gIngiIF07IHRoZW4KKyAgZWxpZiB0ZXN0ICJ4JHtTeXN0ZW1Ecml2ZX0iICE9ICJ4IjsgdGhlbgogICAgIGNtYWtlX2RlZmF1bHRfcHJlZml4PWBjbWFrZV9maXhfc2xhc2hlcyAiJHtTeXN0ZW1Ecml2ZX0vUHJvZ3JhbSBGaWxlcy9DTWFrZSJgCiAgIGVsc2UKICAgICBjbWFrZV9kZWZhdWx0X3ByZWZpeD0iYzovUHJvZ3JhbSBGaWxlcy9DTWFrZSIKQEAgLTIzOSw4ICsyNDcsMTIgQEAKICAgKi9DTWFrZUNYWENvbXBpbGVyLmNtYWtlIFwKICAgU291cmNlL2NtQ29uZmlndXJlLmggXAogICBTb3VyY2UvQ1Rlc3QvQ3VybC9jb25maWcuaCBcCi0gIFV0aWxpdGllcy9jbWV4cGF0L2V4cGF0Q29uZmlnLmggXAotICBVdGlsaXRpZXMvY21leHBhdC9leHBhdERsbENvbmZpZy5oIFwKKyAgVXRpbGl0aWVzL2NtVGhpcmRQYXJ0eS5oIFwKKyAgVXRpbGl0aWVzL2NtY3VybC9saWIvY3VybF9jb25maWcuaCBcCisgIFV0aWxpdGllcy9jbWxpYmFyY2hpdmUvY29uZmlnLmggXAorICBVdGlsaXRpZXMvY21saWJsem1hL2NvbmZpZy5oIFwKKyAgVXRpbGl0aWVzL2NtbmdodHRwMi9jb25maWcuaCBcCisgIFV0aWxpdGllcy9jbXpsaWIvemxpYkRsbENvbmZpZy5oIFwKICAgIgogCiBDTUFLRV9VTlVTRURfU09VUkNFUz0iXApAQCAtMjk0LDYgKzMwNiw3IEBACiAgIGNtQ3JlYXRlVGVzdFNvdXJjZUxpc3QgXAogICBjbUN1c3RvbUNvbW1hbmQgXAogICBjbUN1c3RvbUNvbW1hbmRHZW5lcmF0b3IgXAorICBjbUN1c3RvbUNvbW1hbmRMaW5lcyBcCiAgIGNtRGVmaW5lUHJvcGVydHlDb21tYW5kIFwKICAgY21EZWZpbml0aW9ucyBcCiAgIGNtRGVwZW5kcyBcCkBAIC0zNzIsNiArMzg1LDcgQEAKICAgY21MRENvbmZpZ1Rvb2wgXAogICBjbUxpbmtEaXJlY3Rvcmllc0NvbW1hbmQgXAogICBjbUxpbmtJdGVtIFwKKyAgY21MaW5rSXRlbUdyYXBoVmlzaXRvciBcCiAgIGNtTGlua0xpbmVDb21wdXRlciBcCiAgIGNtTGlua0xpbmVEZXZpY2VDb21wdXRlciBcCiAgIGNtTGlzdENvbW1hbmQgXApAQCAtNDAyLDcgKzQxNiw2IEBACiAgIGNtUHJvY2Vzc091dHB1dCBcCiAgIGNtUHJvamVjdENvbW1hbmQgXAogICBjbVByb3BlcnR5RGVmaW5pdGlvbiBcCi0gIGNtUHJvcGVydHlEZWZpbml0aW9uTWFwIFwKICAgY21Qcm9wZXJ0eU1hcCBcCiAgIGNtUmV0dXJuQ29tbWFuZCBcCiAgIGNtUnVsZVBsYWNlaG9sZGVyRXhwYW5kZXIgXApAQCAtNDE5LDYgKzQzMiw3IEBACiAgIGNtU2l0ZU5hbWVDb21tYW5kIFwKICAgY21Tb3VyY2VGaWxlIFwKICAgY21Tb3VyY2VGaWxlTG9jYXRpb24gXAorICBjbVN0YW5kYXJkTGV2ZWxSZXNvbHZlciBcCiAgIGNtU3RhdGUgXAogICBjbVN0YXRlRGlyZWN0b3J5IFwKICAgY21TdGF0ZVNuYXBzaG90IFwKQEAgLTQ2NSw2ICs0NzksNyBAQAogZmkKIAogQ01BS0VfU1REX0NYWF9IRUFERVJTPSJcCisgIGZpbGVzeXN0ZW0gXAogICBtZW1vcnkgXAogICBvcHRpb25hbCBcCiAgIHNoYXJlZF9tdXRleCBcCkBAIC00NzIsNiArNDg3LDcgQEAKICAgdXRpbGl0eSBcCiAiCiBDTUFLRV9TVERfQ1hYX1NPVVJDRVM9IlwKKyAgZnNfcGF0aCBcCiAgIHN0cmluZ192aWV3IFwKICIKIApAQCAtNjA5LDYgKzYyNSw4IEBACiAgIC0tbm8tc3lzdGVtLWJ6aXAyICAgICAgIHVzZSBjbWFrZS1wcm92aWRlZCBiemlwMiBsaWJyYXJ5IChkZWZhdWx0KQogICAtLXN5c3RlbS1saWJsem1hICAgICAgICB1c2Ugc3lzdGVtLWluc3RhbGxlZCBsaWJsem1hIGxpYnJhcnkKICAgLS1uby1zeXN0ZW0tbGlibHptYSAgICAgdXNlIGNtYWtlLXByb3ZpZGVkIGxpYmx6bWEgbGlicmFyeSAoZGVmYXVsdCkKKyAgLS1zeXN0ZW0tbmdodHRwMiAgICAgICAgdXNlIHN5c3RlbS1pbnN0YWxsZWQgbmdodHRwMiBsaWJyYXJ5CisgIC0tbm8tc3lzdGVtLW5naHR0cDIgICAgIHVzZSBjbWFrZS1wcm92aWRlZCBuZ2h0dHAyIGxpYnJhcnkgKGRlZmF1bHQpCiAgIC0tc3lzdGVtLXpzdGQgICAgICAgICAgIHVzZSBzeXN0ZW0taW5zdGFsbGVkIHpzdGQgbGlicmFyeQogICAtLW5vLXN5c3RlbS16c3RkICAgICAgICB1c2UgY21ha2UtcHJvdmlkZWQgenN0ZCBsaWJyYXJ5IChkZWZhdWx0KQogICAtLXN5c3RlbS1saWJhcmNoaXZlICAgICB1c2Ugc3lzdGVtLWluc3RhbGxlZCBsaWJhcmNoaXZlIGxpYnJhcnkKQEAgLTYxOCw2ICs2MzYsOCBAQAogICAtLXN5c3RlbS1saWJ1diAgICAgICAgICB1c2Ugc3lzdGVtLWluc3RhbGxlZCBsaWJ1diBsaWJyYXJ5CiAgIC0tbm8tc3lzdGVtLWxpYnV2ICAgICAgIHVzZSBjbWFrZS1wcm92aWRlZCBsaWJ1diBsaWJyYXJ5IChkZWZhdWx0KQogCisgIC0tYm9vdHN0cmFwLXN5c3RlbS1saWJ1diB1c2Ugc3lzdGVtLWluc3RhbGxlZCBsaWJ1diBsaWJyYXJ5IGZvciBib290c3RyYXAKKwogICAtLXF0LWd1aSAgICAgICAgICAgICAgICBidWlsZCB0aGUgUXQtYmFzZWQgR1VJIChyZXF1aXJlcyBRdCA+PSA0LjIpCiAgIC0tbm8tcXQtZ3VpICAgICAgICAgICAgIGRvIG5vdCBidWlsZCB0aGUgUXQtYmFzZWQgR1VJIChkZWZhdWx0KQogICAtLXF0LXFtYWtlPTxxbWFrZT4gICAgICB1c2UgPHFtYWtlPiBhcyB0aGUgcW1ha2UgZXhlY3V0YWJsZSB0byBmaW5kIFF0CkBAIC02NjEsNyArNjgxLDcgQEAKICAgZWNobyAiRXJyb3Igd2hlbiBib290c3RyYXBwaW5nIENNYWtlOiIKICAgZWNobyAiJCoiCiAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSAgaWYgWyAtZiBjbWFrZV9ib290c3RyYXAubG9nIF07IHRoZW4KKyAgaWYgdGVzdCAtZiBjbWFrZV9ib290c3RyYXAubG9nOyB0aGVuCiAgICAgZWNobyAiTG9nIG9mIGVycm9yczogYHB3ZGAvY21ha2VfYm9vdHN0cmFwLmxvZyIKICAgICAjY2F0IGNtYWtlX2Jvb3RzdHJhcC5sb2cKICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCkBAIC02ODgsOSArNzA4LDkgQEAKICAgT1VURklMRT0iJDIiCiAgIFNFQVJDSEZPUj0iJDMiCiAgIFJFUExBQ0VXSVRIPSIkNCIKLSAgaWYgWyAtZiAiJHtJTkZJTEV9IiBdIHx8ICR7Y21ha2Vfc3lzdGVtX29wZW52bXN9OyB0aGVuCisgIGlmIHRlc3QgLWYgIiR7SU5GSUxFfSIgfHwgJHtjbWFrZV9zeXN0ZW1fb3BlbnZtc307IHRoZW4KICAgICBzZWQgInMvXEAke1NFQVJDSEZPUn1cQC8ke1JFUExBQ0VXSVRIfS9nIiAiJHtJTkZJTEV9IiA+ICIke09VVEZJTEV9JHtfdG1wfSIKLSAgICBpZiBbIC1mICIke09VVEZJTEV9JHtfdG1wfSIgXTsgdGhlbgorICAgIGlmIHRlc3QgLWYgIiR7T1VURklMRX0ke190bXB9IjsgdGhlbgogICAgICAgaWYgIiR7X2RpZmZ9IiAiJHtPVVRGSUxFfSIgIiR7T1VURklMRX0ke190bXB9IiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgOyB0aGVuCiAgICAgICAgICNlY2hvICJGaWxlcyBhcmUgdGhlIHNhbWUiCiAgICAgICAgIHJtIC1mICIke09VVEZJTEV9JHtfdG1wfSIKQEAgLTcwOSw3ICs3MjksNyBAQAogICBPVVRGSUxFPSIkMiIKICAgc2hpZnQgMgogICBBUFBFTkQ9IiQqIgotICBpZiBbIC1mICIke0lORklMRX0iIF0gfHwgJHtjbWFrZV9zeXN0ZW1fb3BlbnZtc307IHRoZW4KKyAgaWYgdGVzdCAtZiAiJHtJTkZJTEV9IiB8fCAke2NtYWtlX3N5c3RlbV9vcGVudm1zfTsgdGhlbgogICAgIGVjaG8gIiR7QVBQRU5EfSIgPiAiJHtPVVRGSUxFfSR7X3RtcH0iCiAgICAgc2VkICIvLi8ge3MvXEBLV1NZU19OQU1FU1BBQ0VcQC9jbXN5cy9nOwogICAgICAgICAgICAgICBzL0BLV1NZU19CVUlMRF9TSEFSRURALyR7S1dTWVNfQlVJTERfU0hBUkVEfS9nOwpAQCAtNzIwLDcgKzc0MCw3IEBACiAgICAgICAgICAgICAgIHMvQEtXU1lTX0NYWF9IQVNfRVhUX1NURElPX0ZJTEVCVUZfSEAvJHtLV1NZU19DWFhfSEFTX0VYVF9TVERJT19GSUxFQlVGX0h9L2c7CiAgICAgICAgICAgICAgIHMvQEtXU1lTX1NZU1RFTVRPT0xTX1VTRV9UUkFOU0xBVElPTl9NQVBALyR7S1dTWVNfU1lTVEVNVE9PTFNfVVNFX1RSQU5TTEFUSU9OX01BUH0vZzsKICAgICAgICAgICAgICB9IiAiJHtJTkZJTEV9IiA+PiAiJHtPVVRGSUxFfSR7X3RtcH0iCi0gICAgaWYgWyAtZiAiJHtPVVRGSUxFfSR7X3RtcH0iIF07IHRoZW4KKyAgICBpZiB0ZXN0IC1mICIke09VVEZJTEV9JHtfdG1wfSI7IHRoZW4KICAgICAgIGlmICIke19kaWZmfSIgIiR7T1VURklMRX0iICIke09VVEZJTEV9JHtfdG1wfSIgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIDsgdGhlbgogICAgICAgICAjZWNobyAiRmlsZXMgYXJlIHRoZSBzYW1lIgogICAgICAgICBybSAtZiAiJHtPVVRGSUxFfSR7X3RtcH0iCkBAIC03NzcsNyArNzk3LDcgQEAKICAgQ09NUElMRVI9JDEKICAgRkxBR1M9JDIKICAgVEVTVEZJTEU9JDMKLSAgaWYgWyAhIC1mICIke1RFU1RGSUxFfSIgXTsgdGhlbgorICBpZiB0ZXN0ICEgLWYgIiR7VEVTVEZJTEV9IjsgdGhlbgogICAgIGVjaG8gIlRlc3QgZmlsZSAke1RFU1RGSUxFfSBtaXNzaW5nLiBQbGVhc2UgdmVyaWZ5IHlvdXIgQ01ha2Ugc291cmNlIHRyZWUuIgogICAgIGV4aXQgNAogICBmaQpAQCAtNzg5LDE4ICs4MDksMTggQEAKICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICAiJHtDT01QSUxFUn0iICR7RkxBR1N9ICIke1RFU1RGSUxFfSIgLW8gIiR7VE1QRklMRX0iCiAgIFJFUz0kPwotICBpZiBbICIke1JFU30iIC1uZSAiMCIgXTsgdGhlbgorICBpZiB0ZXN0ICIke1JFU30iIC1uZSAiMCI7IHRoZW4KICAgICBlY2hvICJUZXN0IGZhaWxlZCB0byBjb21waWxlIgogICAgIHJldHVybiAxCiAgIGZpCi0gIGlmIFsgISAtZiAiJHtUTVBGSUxFfSIgXSAmJiBbICEgLWYgIiR7VE1QRklMRX0uZXhlIiBdOyB0aGVuCisgIGlmIHRlc3QgISAtZiAiJHtUTVBGSUxFfSIgJiYgdGVzdCAhIC1mICIke1RNUEZJTEV9LmV4ZSI7IHRoZW4KICAgICBlY2hvICJUZXN0IGZhaWxlZCB0byBwcm9kdWNlIGV4ZWN1dGFibGUiCiAgICAgcmV0dXJuIDIKICAgZmkKICAgLi8ke1RNUEZJTEV9CiAgIFJFUz0kPwogICBybSAtZiAiJHtUTVBGSUxFfSIKLSAgaWYgWyAiJHtSRVN9IiAtbmUgIjAiIF07IHRoZW4KKyAgaWYgdGVzdCAiJHtSRVN9IiAtbmUgIjAiOyB0aGVuCiAgICAgZWNobyAiVGVzdCBwcm9kdWNlZCBub24temVybyByZXR1cm4gY29kZSIKICAgICByZXR1cm4gMwogICBmaQpAQCAtODE2LDE4ICs4MzYsMTggQEAKICAgZWNobyAiVHJ5OiAke01BS0VfUFJPQ30iCiAgICIke01BS0VfUFJPQ30iICR7TUFLRV9GTEFHU30KICAgUkVTPSQ/Ci0gIGlmIFsgIiR7UkVTfSIgLW5lICIwIiBdOyB0aGVuCisgIGlmIHRlc3QgIiR7UkVTfSIgLW5lICIwIjsgdGhlbgogICAgIGVjaG8gIiR7TUFLRV9QUk9DfSBkb2VzIG5vdCB3b3JrIgogICAgIHJldHVybiAxCiAgIGZpCi0gIGlmIFsgISAtZiAidGVzdCIgXSAmJiBbICEgLWYgInRlc3QuZXhlIiBdOyB0aGVuCisgIGlmIHRlc3QgISAtZiAidGVzdCIgJiYgdGVzdCAhIC1mICJ0ZXN0LmV4ZSI7IHRoZW4KICAgICBlY2hvICIke0NPTVBJTEVSfSBkb2VzIG5vdCBwcm9kdWNlIG91dHB1dCIKICAgICByZXR1cm4gMgogICBmaQogICAuL3Rlc3QKICAgUkVTPSQ/CiAgIHJtIC1mICJ0ZXN0IgotICBpZiBbICIke1JFU30iIC1uZSAiMCIgXTsgdGhlbgorICBpZiB0ZXN0ICIke1JFU30iIC1uZSAiMCI7IHRoZW4KICAgICBlY2hvICIke01BS0VfUFJPQ30gcHJvZHVjZXMgc3RyYW5nZSBleGVjdXRhYmxlIgogICAgIHJldHVybiAzCiAgIGZpCkBAIC04NDAsNiArODYwLDcgQEAKIGNtYWtlX3BhcmFsbGVsX21ha2U9CiBjbWFrZV9jY2FjaGVfZW5hYmxlZD0KIGNtYWtlX3ByZWZpeF9kaXI9IiR7Y21ha2VfZGVmYXVsdF9wcmVmaXh9IgorYm9vdHN0cmFwX3N5c3RlbV9saWJ1dj0KIHdoaWxlIHRlc3QgJCMgIT0gMDsgZG8KICAgY2FzZSAiJDEiIGluCiAgIC0tcHJlZml4PSopIGRpcj1gY21ha2VfYXJnICIkMSJgCkBAIC04NTMsMTIgKzg3NCwxMyBAQAogICAtLWluaXQ9KikgY21ha2VfaW5pdF9maWxlPWBjbWFrZV9hcmcgIiQxImAgOzsKICAgLS1zeXN0ZW0tbGlicykgY21ha2VfYm9vdHN0cmFwX3N5c3RlbV9saWJzPSIke2NtYWtlX2Jvb3RzdHJhcF9zeXN0ZW1fbGlic30gLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUklFUz0xIiA7OwogICAtLW5vLXN5c3RlbS1saWJzKSBjbWFrZV9ib290c3RyYXBfc3lzdGVtX2xpYnM9IiR7Y21ha2VfYm9vdHN0cmFwX3N5c3RlbV9saWJzfSAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSSUVTPTAiIDs7Ci0gIC0tc3lzdGVtLWJ6aXAyfC0tc3lzdGVtLWN1cmx8LS1zeXN0ZW0tZXhwYXR8LS1zeXN0ZW0tanNvbmNwcHwtLXN5c3RlbS1saWJhcmNoaXZlfC0tc3lzdGVtLWxpYnJoYXNofC0tc3lzdGVtLXpsaWJ8LS1zeXN0ZW0tbGlibHptYXwtLXN5c3RlbS16c3RkfC0tc3lzdGVtLWxpYnV2KQorICAtLXN5c3RlbS1iemlwMnwtLXN5c3RlbS1jdXJsfC0tc3lzdGVtLWV4cGF0fC0tc3lzdGVtLWpzb25jcHB8LS1zeXN0ZW0tbGliYXJjaGl2ZXwtLXN5c3RlbS1saWJyaGFzaHwtLXN5c3RlbS16bGlifC0tc3lzdGVtLWxpYmx6bWF8LS1zeXN0ZW0tbmdodHRwMnwtLXN5c3RlbS16c3RkfC0tc3lzdGVtLWxpYnV2KQogICAgIGxpYj1gY21ha2VfYXJnICIkMSIgIi0tc3lzdGVtLSJgCiAgICAgY21ha2VfYm9vdHN0cmFwX3N5c3RlbV9saWJzPSIke2NtYWtlX2Jvb3RzdHJhcF9zeXN0ZW1fbGlic30gLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfYGNtYWtlX3RvdXBwZXIgJGxpYmA9MSIgOzsKLSAgLS1uby1zeXN0ZW0tYnppcDJ8LS1uby1zeXN0ZW0tY3VybHwtLW5vLXN5c3RlbS1leHBhdHwtLW5vLXN5c3RlbS1qc29uY3BwfC0tbm8tc3lzdGVtLWxpYmFyY2hpdmV8LS1uby1zeXN0ZW0tbGlicmhhc2h8LS1uby1zeXN0ZW0temxpYnwtLW5vLXN5c3RlbS1saWJsem1hfC0tbm8tc3lzdGVtLXpzdGR8LS1uby1zeXN0ZW0tbGlidXYpCisgIC0tbm8tc3lzdGVtLWJ6aXAyfC0tbm8tc3lzdGVtLWN1cmx8LS1uby1zeXN0ZW0tZXhwYXR8LS1uby1zeXN0ZW0tanNvbmNwcHwtLW5vLXN5c3RlbS1saWJhcmNoaXZlfC0tbm8tc3lzdGVtLWxpYnJoYXNofC0tbm8tc3lzdGVtLXpsaWJ8LS1uby1zeXN0ZW0tbGlibHptYXwtLW5vLXN5c3RlbS1uZ2h0dHAyfC0tbm8tc3lzdGVtLXpzdGR8LS1uby1zeXN0ZW0tbGlidXYpCiAgICAgbGliPWBjbWFrZV9hcmcgIiQxIiAiLS1uby1zeXN0ZW0tImAKICAgICBjbWFrZV9ib290c3RyYXBfc3lzdGVtX2xpYnM9IiR7Y21ha2VfYm9vdHN0cmFwX3N5c3RlbV9saWJzfSAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9gY21ha2VfdG91cHBlciAkbGliYD0wIiA7OworICAtLWJvb3RzdHJhcC1zeXN0ZW0tbGlidXYpIGJvb3RzdHJhcF9zeXN0ZW1fbGlidXY9IjEiIDs7CiAgIC0tcXQtZ3VpKSBjbWFrZV9ib290c3RyYXBfcXRfZ3VpPSIxIiA7OwogICAtLW5vLXF0LWd1aSkgY21ha2VfYm9vdHN0cmFwX3F0X2d1aT0iMCIgOzsKICAgLS1xdC1xbWFrZT0qKSBjbWFrZV9ib290c3RyYXBfcXRfcW1ha2U9YGNtYWtlX2FyZyAiJDEiYCA7OwpAQCAtODg0LDEzICs5MDYsMTMgQEAKIGRvbmUKIAogIyBJZiB2ZXJib3NlLCBkaXNwbGF5IHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgYm9vdHN0cmFwCi1pZiBbIC1uICIke2NtYWtlX3ZlcmJvc2V9IiBdOyB0aGVuCitpZiB0ZXN0IC1uICIke2NtYWtlX3ZlcmJvc2V9IjsgdGhlbgogICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIGVjaG8gIlNvdXJjZSBkaXJlY3Rvcnk6ICR7Y21ha2Vfc291cmNlX2Rpcn0iCiAgIGVjaG8gIkJpbmFyeSBkaXJlY3Rvcnk6ICR7Y21ha2VfYmluYXJ5X2Rpcn0iCiAgIGVjaG8gIlByZWZpeCBkaXJlY3Rvcnk6ICR7Y21ha2VfcHJlZml4X2Rpcn0iCiAgIGVjaG8gIlN5c3RlbTogICAgICAgICAgICR7Y21ha2Vfc3lzdGVtfSIKLSAgaWYgWyAieCR7Y21ha2VfcGFyYWxsZWxfbWFrZX0iICE9ICJ4IiBdOyB0aGVuCisgIGlmIHRlc3QgIngke2NtYWtlX3BhcmFsbGVsX21ha2V9IiAhPSAieCI7IHRoZW4KICAgICBlY2hvICJEb2luZyBwYXJhbGxlbCBtYWtlOiAke2NtYWtlX3BhcmFsbGVsX21ha2V9IgogICBmaQogICBlY2hvICIiCkBAIC05MDIsMTggKzkyNCwxOCBAQAogCiAjIENoZWNrIGZvciBpbi1zb3VyY2UgYnVpbGQKIGNtYWtlX2luX3NvdXJjZV9idWlsZD0KLWlmIFsgLWYgIiR7Y21ha2VfYmluYXJ5X2Rpcn0vU291cmNlL2NtYWtlLmN4eCIgLWEgXAotICAgICAtZiAiJHtjbWFrZV9iaW5hcnlfZGlyfS9Tb3VyY2UvY21ha2UuaCIgXTsgdGhlbgotICBpZiBbIC1uICIke2NtYWtlX3ZlcmJvc2V9IiBdOyB0aGVuCitpZiB0ZXN0IC1mICIke2NtYWtlX2JpbmFyeV9kaXJ9L1NvdXJjZS9jbWFrZS5jeHgiICYmCisgICAgIHRlc3QgLWYgIiR7Y21ha2VfYmluYXJ5X2Rpcn0vU291cmNlL2NtYWtlLmgiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiR7Y21ha2VfdmVyYm9zZX0iOyB0aGVuCiAgICAgZWNobyAiV2FybmluZzogVGhpcyBpcyBhbiBpbi1zb3VyY2UgYnVpbGQiCiAgIGZpCiAgIGNtYWtlX2luX3NvdXJjZV9idWlsZD1UUlVFCiBmaQogCiAjIElmIHRoaXMgaXMgbm90IGFuIGluLXNvdXJjZSBidWlsZCwgdGhlbiBCb290c3RyYXAgc3R1ZmYgc2hvdWxkIG5vdCBleGlzdC4KLWlmIFsgLXogIiR7Y21ha2VfaW5fc291cmNlX2J1aWxkfSIgXTsgdGhlbgoraWYgdGVzdCAteiAiJHtjbWFrZV9pbl9zb3VyY2VfYnVpbGR9IjsgdGhlbgogICAjIERpZCBzb21lYm9keSBib290c3RyYXAgaW4gdGhlIHNvdXJjZSB0cmVlPwotICBpZiBbIC1kICIke2NtYWtlX3NvdXJjZV9kaXJ9L0Jvb3RzdHJhcCR7X2Nta30iIF07IHRoZW4KKyAgaWYgdGVzdCAtZCAiJHtjbWFrZV9zb3VyY2VfZGlyfS9Cb290c3RyYXAke19jbWt9IjsgdGhlbgogICAgIGNtYWtlX2Vycm9yIDEwICJGb3VuZCBkaXJlY3RvcnkgXCIke2NtYWtlX3NvdXJjZV9kaXJ9L0Jvb3RzdHJhcCR7X2Nta31cIi4KIExvb2tzIGxpa2Ugc29tZWJvZHkgZGlkIGJvb3RzdHJhcCBDTWFrZSBpbiB0aGUgc291cmNlIHRyZWUsIGJ1dCBub3cgeW91IGFyZQogdHJ5aW5nIHRvIGRvIGJvb3RzdHJhcCBpbiB0aGUgYmluYXJ5IHRyZWUuIFBsZWFzZSByZW1vdmUgQm9vdHN0cmFwJHtfY21rfQpAQCAtOTIxLDcgKzk0Myw3IEBACiAgIGZpCiAgICMgSXMgdGhlcmUgYSBjYWNoZSBpbiB0aGUgc291cmNlIHRyZWU/CiAgIGZvciBjbWFrZV9wcm9ibGVtYXRpY19maWxlIGluICR7Q01BS0VfUFJPQkxFTUFUSUNfRklMRVN9OyBkbwotICAgIGlmIFsgLWYgIiR7Y21ha2Vfc291cmNlX2Rpcn0vJHtjbWFrZV9wcm9ibGVtYXRpY19maWxlfSIgXTsgdGhlbgorICAgIGlmIHRlc3QgLWYgIiR7Y21ha2Vfc291cmNlX2Rpcn0vJHtjbWFrZV9wcm9ibGVtYXRpY19maWxlfSI7IHRoZW4KICAgICAgIGNtYWtlX2Vycm9yIDEwICJGb3VuZCBcIiR7Y21ha2Vfc291cmNlX2Rpcn0vJHtjbWFrZV9wcm9ibGVtYXRpY19maWxlfVwiLgogTG9va3MgbGlrZSBzb21lYm9keSB0cmllZCB0byBidWlsZCBDTWFrZSBpbiB0aGUgc291cmNlIHRyZWUsIGJ1dCBub3cgeW91IGFyZQogdHJ5aW5nIHRvIGRvIGJvb3RzdHJhcCBpbiB0aGUgYmluYXJ5IHRyZWUuIFBsZWFzZSByZW1vdmUgXCIke2NtYWtlX3Byb2JsZW1hdGljX2ZpbGV9XCIKQEAgLTkzMSwxNCArOTUzLDE0IEBACiBmaQogCiAjIE1ha2UgYm9vdHN0cmFwIGRpcmVjdG9yeQotWyAtZCAiJHtjbWFrZV9ib290c3RyYXBfZGlyfSIgXSB8fCBta2RpciAiJHtjbWFrZV9ib290c3RyYXBfZGlyfSIKLWlmIFsgISAtZCAiJHtjbWFrZV9ib290c3RyYXBfZGlyfSIgXTsgdGhlbgordGVzdCAtZCAiJHtjbWFrZV9ib290c3RyYXBfZGlyfSIgfHwgbWtkaXIgIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0iCitpZiB0ZXN0ICEgLWQgIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0iOyB0aGVuCiAgIGNtYWtlX2Vycm9yIDMgIkNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0gdG8gYm9vdHN0cmFwIENNYWtlLiIKIGZpCiBjZCAiJHtjbWFrZV9ib290c3RyYXBfZGlyfSIKIAotWyAtZCAiY21zeXMiIF0gfHwgbWtkaXIgImNtc3lzIgotaWYgWyAhIC1kICJjbXN5cyIgXTsgdGhlbgordGVzdCAtZCAiY21zeXMiIHx8IG1rZGlyICJjbXN5cyIKK2lmIHRlc3QgISAtZCAiY21zeXMiOyB0aGVuCiAgIGNtYWtlX2Vycm9yIDQgIkNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vY21zeXMiCiBmaQogCkBAIC05NDksNyArOTcxLDcgQEAKIAogIyBJZiBidWlsZGluZyBpbi1zb3VyY2UsIHJlbW92ZSBhbnkgY21Db25maWd1cmUuaCB0aGF0IG1heQogIyBoYXZlIGJlZW4gY3JlYXRlZCBieSBhIHByZXZpb3VzIHJ1biBvZiB0aGUgYm9vdHN0cmFwIGNtYWtlLgotaWYgWyAtbiAiJHtjbWFrZV9pbl9zb3VyY2VfYnVpbGR9IiBdOyB0aGVuCitpZiB0ZXN0IC1uICIke2NtYWtlX2luX3NvdXJjZV9idWlsZH0iOyB0aGVuCiAgIHJtIC1mICIke2NtYWtlX3NvdXJjZV9kaXJ9L1NvdXJjZS9jbUNvbmZpZ3VyZS5oIgogZmkKIApAQCAtMTAzNCw3ICsxMDU2LDcgQEAKICAgZG9uZQogfQogCi1pZiBbIC16ICIke0NDfSIgLWEgLXogIiR7Q1hYfSIgXTsgdGhlbgoraWYgdGVzdCAteiAiJHtDQ30iICYmIHRlc3QgLXogIiR7Q1hYfSI7IHRoZW4KICAgY21ha2VfdG9vbGNoYWluX2RldGVjdAogZmkKIApAQCAtMTA0OCw5ICsxMDcwLDkgQEAKIGNtYWtlX2NfY29tcGlsZXI9CiAKICMgSWYgQ0MgaXMgc2V0LCB1c2UgdGhhdCBmb3IgY29tcGlsZXIsIG90aGVyd2lzZSB1c2UgbGlzdCBvZiBrbm93biBjb21waWxlcnMKLWlmIFsgLW4gIiR7Y21ha2VfdG9vbGNoYWlufSIgXTsgdGhlbgoraWYgdGVzdCAtbiAiJHtjbWFrZV90b29sY2hhaW59IjsgdGhlbgogICBldmFsIGNtYWtlX2NfY29tcGlsZXJzPSJcJHtjbWFrZV90b29sY2hhaW5fJHtjbWFrZV90b29sY2hhaW59X0NDfSIKLWVsaWYgWyAtbiAiJHtDQ30iIF07IHRoZW4KK2VsaWYgdGVzdCAtbiAiJHtDQ30iOyB0aGVuCiAgIGNtYWtlX2NfY29tcGlsZXJzPSIke0NDfSIKIGVsc2UKICAgY21ha2VfY19jb21waWxlcnM9IiR7Q01BS0VfS05PV05fQ19DT01QSUxFUlN9IgpAQCAtMTEwMSw3ICsxMTIzLDcgQEAKIGRvbmUKIHJtIC1mICIke1RNUEZJTEV9LmMiCiAKLWlmIFsgLXogIiR7Y21ha2VfY19jb21waWxlcn0iIF07IHRoZW4KK2lmIHRlc3QgLXogIiR7Y21ha2VfY19jb21waWxlcn0iOyB0aGVuCiAgIGNtYWtlX2Vycm9yIDYgIkNhbm5vdCBmaW5kIGFwcHJvcHJpYXRlIEMgY29tcGlsZXIgb24gdGhpcyBzeXN0ZW0uCiBQbGVhc2Ugc3BlY2lmeSBvbmUgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgQ0MuCiBTZWUgY21ha2VfYm9vdHN0cmFwLmxvZyBmb3IgY29tcGlsZXJzIGF0dGVtcHRlZC4KQEAgLTExMTYsOSArMTEzOCw5IEBACiAjIE9uIE1hYyBPU1gsIENDIGlzIHRoZSBzYW1lIGFzIGNjLCBzbyBtYWtlIHN1cmUgbm90IHRvIHRyeSBDQyBhcyBjKysgY29tcGlsZXIuCiAKICMgSWYgQ0MgaXMgc2V0LCB1c2UgdGhhdCBmb3IgY29tcGlsZXIsIG90aGVyd2lzZSB1c2UgbGlzdCBvZiBrbm93biBjb21waWxlcnMKLWlmIFsgLW4gIiR7Y21ha2VfdG9vbGNoYWlufSIgXTsgdGhlbgoraWYgdGVzdCAtbiAiJHtjbWFrZV90b29sY2hhaW59IjsgdGhlbgogICBldmFsIGNtYWtlX2N4eF9jb21waWxlcnM9Ilwke2NtYWtlX3Rvb2xjaGFpbl8ke2NtYWtlX3Rvb2xjaGFpbn1fQ1hYfSIKLWVsaWYgWyAtbiAiJHtDWFh9IiBdOyB0aGVuCitlbGlmIHRlc3QgLW4gIiR7Q1hYfSI7IHRoZW4KICAgY21ha2VfY3h4X2NvbXBpbGVycz0iJHtDWFh9IgogZWxzZQogICBjbWFrZV9jeHhfY29tcGlsZXJzPSIke0NNQUtFX0tOT1dOX0NYWF9DT01QSUxFUlN9IgpAQCAtMTE2NiwxMCArMTE4OCwyMCBAQAogfQogI2VuZGlmCiAKLSNpZiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNMCisjaWYgKF9fY3BsdXNwbHVzID49IDIwMTcwM0wgfHwgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAmJiBkZWZpbmVkKF9fY3BwX2RlZHVjdGlvbl9ndWlkZXMpKQogI2luY2x1ZGUgPG9wdGlvbmFsPgordGVtcGxhdGUgPHR5cGVuYW1lIFQsCisgICAgICAgICAgdHlwZW5hbWUgc3RkOjppbnZva2VfcmVzdWx0PGRlY2x0eXBlKCZUOjpnZXQpLCBUPjo6dHlwZSA9IG51bGxwdHI+Cit0eXBlbmFtZSBUOjpwb2ludGVyIGdldF9wdHIoVCYgaXRlbSkKK3sKKyAgcmV0dXJuIGl0ZW0uZ2V0KCk7Cit9CisKIGludCBjaGVja19jeHgxNygpCiB7CisgIC8vIEludGVsIGNvbXBpbGVyIGRvIG5vdCBoYW5kbGUgY29ycmVjdGx5ICdkZWNsdHlwZScgaW5zaWRlICdpbnZva2VfcmVzdWx0JworICBzdGQ6OnVuaXF1ZV9wdHI8aW50PiB1KG5ldyBpbnQoMCkpOworICBnZXRfcHRyKHUpOwogICBzdGQ6Om9wdGlvbmFsPGludD4gb2kgPSAwOwogICByZXR1cm4gb2kudmFsdWUoKTsKIH0KQEAgLTEyMTIsNyArMTI0NCw3IEBACiBkb25lCiBybSAtZiAiJHtUTVBGSUxFfS5jeHgiCiAKLWlmIFsgLXogIiR7Y21ha2VfY3h4X2NvbXBpbGVyfSIgXTsgdGhlbgoraWYgdGVzdCAteiAiJHtjbWFrZV9jeHhfY29tcGlsZXJ9IjsgdGhlbgogY21ha2VfZXJyb3IgNyAiQ2Fubm90IGZpbmQgYSBDKysgY29tcGlsZXIgdGhhdCBzdXBwb3J0cyBib3RoIEMrKzExIGFuZCB0aGUgc3BlY2lmaWVkIEMrKyBmbGFncy4KIFBsZWFzZSBzcGVjaWZ5IG9uZSB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBDWFguCiBUaGUgQysrIGZsYWdzIGFyZSBcIiRjbWFrZV9jeHhfZmxhZ3NcIi4KQEAgLTEyMjIsMTMgKzEyNTQsMzkgQEAKIGVjaG8gIkMrKyBjb21waWxlciBvbiB0aGlzIHN5c3RlbSBpczogJHtjbWFrZV9jeHhfY29tcGlsZXJ9ICR7Y21ha2VfY3h4X2ZsYWdzfSIKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgQ1hYIGZlYXR1cmVzCisKK2NtYWtlX2N4eF9mZWF0dXJlcz0ibWFrZV91bmlxdWUgZmlsZXN5c3RlbSIKKworZm9yIGZlYXR1cmUgaW4gJHtjbWFrZV9jeHhfZmVhdHVyZXN9OyBkbworICBldmFsICJjbWFrZV9oYXZlX2N4eF8ke2ZlYXR1cmV9PTAiCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgJyR7Y21ha2VfY3h4X2NvbXBpbGVyfSAke2NtYWtlX2N4eF9mbGFnc30nIHN1cHBvcnRzICcke2ZlYXR1cmV9Jy4iID4+IGNtYWtlX2Jvb3RzdHJhcC5sb2cgMj4mMQorICBpZiBjbWFrZV90cnlfcnVuICIke2NtYWtlX2N4eF9jb21waWxlcn0iICIke2NtYWtlX2N4eF9mbGFnc30iIFwKKyAgICAgICAgICAgICAgICAgICAiJHtjbWFrZV9zb3VyY2VfZGlyfS9Tb3VyY2UvQ2hlY2tzL2NtX2N4eF8ke2ZlYXR1cmV9LmN4eCIgPj4gY21ha2VfYm9vdHN0cmFwLmxvZyAyPiYxOyB0aGVuCisgICAgZXZhbCAiY21ha2VfaGF2ZV9jeHhfJHtmZWF0dXJlfT0xIgorICBmaQorZG9uZQorCitjbWFrZV9oYXZlX2N4eF9mZWF0dXJlcz0iIgorZm9yIGZlYXR1cmUgaW4gJHtjbWFrZV9jeHhfZmVhdHVyZXN9OyBkbworICBmZWF0dXJlX3ZhcmlhYmxlPSJjbWFrZV9oYXZlX2N4eF8ke2ZlYXR1cmV9IgorICBldmFsICJmZWF0dXJlX3ZhbHVlPVwkeyR7ZmVhdHVyZV92YXJpYWJsZX19IgorICBpZiB0ZXN0ICIke2ZlYXR1cmVfdmFsdWV9IiAtZXEgIjEiOyB0aGVuCisgICAgY21ha2VfaGF2ZV9jeHhfZmVhdHVyZXM9IiR7Y21ha2VfaGF2ZV9jeHhfZmVhdHVyZXN9IC1EQ01ha2VfSEFWRV9DWFhfYGNtYWtlX3RvdXBwZXIgJHtmZWF0dXJlfWA9JHtmZWF0dXJlX3ZhbHVlfSIKKyAgZmkKK2RvbmUKKworY21ha2VfZ2VuZXJhdGVfZmlsZSAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9jbVNUTC5oeHgiICIiCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRlc3QgTWFrZQogCiBjbWFrZV9tYWtlX3Byb2Nlc3Nvcj0KIGNtYWtlX21ha2VfZmxhZ3M9CiAKICMgSWYgTUFLRSBpcyBzZXQsIHVzZSB0aGF0IGZvciBtYWtlIHByb2Nlc3Nvciwgb3RoZXJ3aXNlIHVzZSBsaXN0IG9mIGtub3duIG1ha2UKLWlmIFsgLW4gIiR7TUFLRX0iIF07IHRoZW4KK2lmIHRlc3QgLW4gIiR7TUFLRX0iOyB0aGVuCiAgIGNtYWtlX21ha2VfcHJvY2Vzc29ycz0iJHtNQUtFfSIKIGVsc2UKICAgY21ha2VfbWFrZV9wcm9jZXNzb3JzPSIke0NNQUtFX0tOT1dOX01BS0VfUFJPQ0VTU09SU30iCkBAIC0xMjQ3LDIwICsxMzA1LDIwIEBACiBpbnQgbWFpbigpeyBwcmludGYoIjElYyIsIChjaGFyKTB4MGEpOyByZXR1cm4gMDsgfQogJyA+ICJ0ZXN0LmMiCiBjbWFrZV9vcmlnaW5hbF9tYWtlX2ZsYWdzPSIke2NtYWtlX21ha2VfZmxhZ3N9IgotaWYgWyAieCR7Y21ha2VfcGFyYWxsZWxfbWFrZX0iICE9ICJ4IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9wYXJhbGxlbF9tYWtlfSIgIT0gIngiOyB0aGVuCiAgIGNtYWtlX21ha2VfZmxhZ3M9IiR7Y21ha2VfbWFrZV9mbGFnc30gLWogJHtjbWFrZV9wYXJhbGxlbF9tYWtlfSIKIGZpCiBmb3IgYSBpbiAke2NtYWtlX21ha2VfcHJvY2Vzc29yc307IGRvCi0gIGlmIFsgLXogIiR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9IiBdICYmIGNtYWtlX3RyeV9tYWtlICIke2F9IiAiJHtjbWFrZV9tYWtlX2ZsYWdzfSIgPj4gLi4vY21ha2VfYm9vdHN0cmFwLmxvZyAyPiYxOyB0aGVuCisgIGlmIHRlc3QgLXogIiR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9IiAmJiBjbWFrZV90cnlfbWFrZSAiJHthfSIgIiR7Y21ha2VfbWFrZV9mbGFnc30iID4+IC4uL2NtYWtlX2Jvb3RzdHJhcC5sb2cgMj4mMTsgdGhlbgogICAgIGNtYWtlX21ha2VfcHJvY2Vzc29yPSIke2F9IgogICBmaQogZG9uZQogY21ha2VfZnVsbF9tYWtlX2ZsYWdzPSIke2NtYWtlX21ha2VfZmxhZ3N9IgotaWYgWyAieCR7Y21ha2Vfb3JpZ2luYWxfbWFrZV9mbGFnc30iICE9ICJ4JHtjbWFrZV9tYWtlX2ZsYWdzfSIgXTsgdGhlbgotICBpZiBbIC16ICIke2NtYWtlX21ha2VfcHJvY2Vzc29yfSIgXTsgdGhlbgoraWYgdGVzdCAieCR7Y21ha2Vfb3JpZ2luYWxfbWFrZV9mbGFnc30iICE9ICJ4JHtjbWFrZV9tYWtlX2ZsYWdzfSI7IHRoZW4KKyAgaWYgdGVzdCAteiAiJHtjbWFrZV9tYWtlX3Byb2Nlc3Nvcn0iOyB0aGVuCiAgICAgY21ha2VfbWFrZV9mbGFncz0iJHtjbWFrZV9vcmlnaW5hbF9tYWtlX2ZsYWdzfSIKICAgICBmb3IgYSBpbiAke2NtYWtlX21ha2VfcHJvY2Vzc29yc307IGRvCi0gICAgICBpZiBbIC16ICIke2NtYWtlX21ha2VfcHJvY2Vzc29yfSIgXSAmJiBjbWFrZV90cnlfbWFrZSAiJHthfSIgIiR7Y21ha2VfbWFrZV9mbGFnc30iID4+IC4uL2NtYWtlX2Jvb3RzdHJhcC5sb2cgMj4mMTsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJHtjbWFrZV9tYWtlX3Byb2Nlc3Nvcn0iICYmIGNtYWtlX3RyeV9tYWtlICIke2F9IiAiJHtjbWFrZV9tYWtlX2ZsYWdzfSIgPj4gLi4vY21ha2VfYm9vdHN0cmFwLmxvZyAyPiYxOyB0aGVuCiAgICAgICAgIGNtYWtlX21ha2VfcHJvY2Vzc29yPSIke2F9IgogICAgICAgZmkKICAgICBkb25lCkBAIC0xMjY4LDEzICsxMzI2LDEzIEBACiBmaQogY2QgIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0iCiAKLWlmIFsgLXogIiR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9IiBdOyB0aGVuCitpZiB0ZXN0IC16ICIke2NtYWtlX21ha2VfcHJvY2Vzc29yfSI7IHRoZW4KICAgY21ha2VfZXJyb3IgOCAiQ2Fubm90IGZpbmQgYXBwcm9wcmlhdGUgTWFrZWZpbGUgcHJvY2Vzc29yIG9uIHRoaXMgc3lzdGVtLgogUGxlYXNlIHNwZWNpZnkgb25lIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlIE1BS0UuIgogZmkKIHJtIC1yZiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS8ke1RNUEZJTEV9IgogZWNobyAiTWFrZWZpbGUgcHJvY2Vzc29yIG9uIHRoaXMgc3lzdGVtIGlzOiAke2NtYWtlX21ha2VfcHJvY2Vzc29yfSIKLWlmIFsgIngke2NtYWtlX2Z1bGxfbWFrZV9mbGFnc30iICE9ICJ4JHtjbWFrZV9tYWtlX2ZsYWdzfSIgXTsgdGhlbgoraWYgdGVzdCAieCR7Y21ha2VfZnVsbF9tYWtlX2ZsYWdzfSIgIT0gIngke2NtYWtlX21ha2VfZmxhZ3N9IjsgdGhlbgogICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIGVjaG8gIk1ha2VmaWxlIHByb2Nlc3NvciAke2NtYWtlX21ha2VfcHJvY2Vzc29yfSBkb2VzIG5vdCBzdXBwb3J0IHBhcmFsbGVsIGJ1aWxkIgogICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCkBAIC0xMzM5LDcgKzEzOTcsNyBAQAogICBlY2hvICIke2NtYWtlX2N4eF9jb21waWxlcn0gZG9lcyBub3QgaGF2ZSA8ZXh0L3N0ZGlvX2ZpbGVidWYuaD4iCiBmaQogCi1pZiBbIC1uICIke2NtYWtlX2NjYWNoZV9lbmFibGVkfSIgXTsgdGhlbgoraWYgdGVzdCAtbiAiJHtjbWFrZV9jY2FjaGVfZW5hYmxlZH0iOyB0aGVuCiAgIGVjaG8gIkJ1aWxkaW5nIENNYWtlIHdpdGggY2NhY2hlIgogICBjbWFrZV9jX2NvbXBpbGVyPSJjY2FjaGUgJHtjbWFrZV9jX2NvbXBpbGVyfSIKICAgY21ha2VfY3h4X2NvbXBpbGVyPSJjY2FjaGUgJHtjbWFrZV9jeHhfY29tcGlsZXJ9IgpAQCAtMTQ0MSw5ICsxNDk5LDExIEBACiBmb3IgYSBpbiAke0NNQUtFX0NYWF9TT1VSQ0VTfSAke0NNQUtFX0NfU09VUkNFU30gJHtDTUFLRV9TVERfQ1hYX1NPVVJDRVN9ICR7TGV4ZXJQYXJzZXJfQ1hYX1NPVVJDRVN9ICR7TGV4ZXJQYXJzZXJfQ19TT1VSQ0VTfSAke0tXU1lTX0NYWF9TT1VSQ0VTfSAke0tXU1lTX0NfU09VUkNFU307IGRvCiAgIG9ianM9IiR7b2Jqc30gJHthfS5vIgogZG9uZQotZm9yIGEgaW4gJHtMSUJVVl9DX1NPVVJDRVN9OyBkbwotICBvYmpzPSIke29ianN9IHV2LWBjbWFrZV9vYmogJHthfWAiCi1kb25lCitpZiB0ZXN0ICJ4JHtib290c3RyYXBfc3lzdGVtX2xpYnV2fSIgPSAieCI7IHRoZW4KKyAgZm9yIGEgaW4gJHtMSUJVVl9DX1NPVVJDRVN9OyBkbworICAgIG9ianM9IiR7b2Jqc30gdXYtYGNtYWtlX29iaiAke2F9YCIKKyAgZG9uZQorZmkKIAogbGlicz0iIgogCkBAIC0xNDgxLDIzICsxNTQxLDI5IEBACiAgICAgICA7OwogICBlc2FjCiBmaQotdXZfY19mbGFncz0iJHt1dl9jX2ZsYWdzfSBgY21ha2VfZXNjYXBlICItSSR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvaW5jbHVkZSJgIgotaWYgJHtjbWFrZV9zeXN0ZW1fbWluZ3d9OyB0aGVuCi0gIHV2X2NfZmxhZ3M9IiR7dXZfY19mbGFnc30gYGNtYWtlX2VzY2FwZSAiLUkke2NtYWtlX3NvdXJjZV9kaXJ9L1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4iYCIKK2lmIHRlc3QgIngke2Jvb3RzdHJhcF9zeXN0ZW1fbGlidXZ9IiA9ICJ4IjsgdGhlbgorICB1dl9jX2ZsYWdzPSIke3V2X2NfZmxhZ3N9IGBjbWFrZV9lc2NhcGUgIi1JJHtjbWFrZV9zb3VyY2VfZGlyfS9VdGlsaXRpZXMvY21saWJ1di9pbmNsdWRlImAiCisgIGlmICR7Y21ha2Vfc3lzdGVtX21pbmd3fTsgdGhlbgorICAgIHV2X2NfZmxhZ3M9IiR7dXZfY19mbGFnc30gYGNtYWtlX2VzY2FwZSAiLUkke2NtYWtlX3NvdXJjZV9kaXJ9L1V0aWxpdGllcy9jbWxpYnV2L3NyYy93aW4iYCIKKyAgZWxzZQorICAgIHV2X2NfZmxhZ3M9IiR7dXZfY19mbGFnc30gYGNtYWtlX2VzY2FwZSAiLUkke2NtYWtlX3NvdXJjZV9kaXJ9L1V0aWxpdGllcy9jbWxpYnV2L3NyYy91bml4ImAiCisgIGZpCisgIHV2X2NfZmxhZ3M9IiR7dXZfY19mbGFnc30gYGNtYWtlX2VzY2FwZSAiLUkke2NtYWtlX3NvdXJjZV9kaXJ9L1V0aWxpdGllcy9jbWxpYnV2L3NyYyJgIgogZWxzZQotICB1dl9jX2ZsYWdzPSIke3V2X2NfZmxhZ3N9IGBjbWFrZV9lc2NhcGUgIi1JJHtjbWFrZV9zb3VyY2VfZGlyfS9VdGlsaXRpZXMvY21saWJ1di9zcmMvdW5peCJgIgorICBpZiB0ZXN0IGB3aGljaCBwa2ctY29uZmlnYDsgdGhlbgorICAgIHV2X2NfZmxhZ3M9IiR7dXZfY19mbGFnc30gYHBrZy1jb25maWcgLS1jZmxhZ3MgbGlidXZgIgorICBmaQorICBsaWJzPSIke2xpYnN9IC1sdXYiCiBmaQotdXZfY19mbGFncz0iJHt1dl9jX2ZsYWdzfSBgY21ha2VfZXNjYXBlICItSSR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvc3JjImAiCi0KLWlmIFsgIngke2NtYWtlX2Fuc2lfY3h4X2ZsYWdzfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX2Fuc2lfY3h4X2ZsYWdzfSIgIT0gIngiOyB0aGVuCiAgIGNtYWtlX2N4eF9mbGFncz0iJHtjbWFrZV9hbnNpX2N4eF9mbGFnc30gJHtjbWFrZV9jeHhfZmxhZ3N9IgogZmkKIAotaWYgWyAieCR7Y21ha2VfY19mbGFnc30iICE9ICJ4IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9jX2ZsYWdzfSIgIT0gIngiOyB0aGVuCiAgIGNtYWtlX2NfZmxhZ3M9IiR7Y21ha2VfY19mbGFnc30gIgogZmkKIAotaWYgWyAieCR7Y21ha2VfY3h4X2ZsYWdzfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX2N4eF9mbGFnc30iICE9ICJ4IjsgdGhlbgogICBjbWFrZV9jeHhfZmxhZ3M9IiR7Y21ha2VfY3h4X2ZsYWdzfSAiCiBmaQogCkBAIC0xNTIyLDYgKzE1ODgsNyBAQAogICAtSWBjbWFrZV9lc2NhcGUgXCIke2NtYWtlX3NvdXJjZV9kaXJ9L1V0aWxpdGllc1wiYCIKIGNtYWtlX2N4eF9mbGFncz0iJHtjbWFrZV9jeHhfZmxhZ3N9IFwKICAgLURDTUFLRV9CT09UU1RSQVAgXAorICAke2NtYWtlX2hhdmVfY3h4X2ZlYXR1cmVzfSBcCiAgIC1JYGNtYWtlX2VzY2FwZSBcIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn1cImAgXAogICAtSWBjbWFrZV9lc2NhcGUgXCIke2NtYWtlX3NvdXJjZV9kaXJ9L1NvdXJjZVwiYCBcCiAgIC1JYGNtYWtlX2VzY2FwZSBcIiR7Y21ha2Vfc291cmNlX2Rpcn0vU291cmNlL0xleGVyUGFyc2VyXCJgIFwKQEAgLTE1NjksMTEgKzE2MzYsMTMgQEAKICAgZWNobyAiJHthfS5vIDogJHtzcmN9ICR7ZGVwfSIgPj4gIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vTWFrZWZpbGUiCiAgIGVjaG8gIgkke2NtYWtlX2N4eF9jb21waWxlcn0gJHtjbWFrZV9jeHhfZmxhZ3N9IC1ES1dTWVNfTkFNRVNQQUNFPWNtc3lzICR7c3JjX2ZsYWdzfSAtYyAke3NyY30gLW8gJHthfS5vIiA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9NYWtlZmlsZSIKIGRvbmUKLWZvciBhIGluICR7TElCVVZfQ19TT1VSQ0VTfTsgZG8KLSAgc3JjPWBjbWFrZV9lc2NhcGUgIiR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvJHthfSJgCi0gIGVjaG8gInV2LWBjbWFrZV9vYmogJHthfWAgOiAke3NyY30gJHtkZXB9IiA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9NYWtlZmlsZSIKLSAgZWNobyAiCSR7Y21ha2VfY19jb21waWxlcn0gJHtjbWFrZV9jX2ZsYWdzfSAke3V2X2NfZmxhZ3N9IC1jICR7c3JjfSAtbyB1di1gY21ha2Vfb2JqICR7YX1gIiA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9NYWtlZmlsZSIKLWRvbmUKK2lmIHRlc3QgIngke2Jvb3RzdHJhcF9zeXN0ZW1fbGlidXZ9IiA9ICJ4IjsgdGhlbgorICBmb3IgYSBpbiAke0xJQlVWX0NfU09VUkNFU307IGRvCisgICAgc3JjPWBjbWFrZV9lc2NhcGUgIiR7Y21ha2Vfc291cmNlX2Rpcn0vVXRpbGl0aWVzL2NtbGlidXYvJHthfSJgCisgICAgZWNobyAidXYtYGNtYWtlX29iaiAke2F9YCA6ICR7c3JjfSAke2RlcH0iID4+ICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L01ha2VmaWxlIgorICAgIGVjaG8gIgkke2NtYWtlX2NfY29tcGlsZXJ9ICR7Y21ha2VfY19mbGFnc30gJHt1dl9jX2ZsYWdzfSAtYyAke3NyY30gLW8gdXYtYGNtYWtlX29iaiAke2F9YCIgPj4gIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vTWFrZWZpbGUiCisgIGRvbmUKK2ZpCiBlY2hvICcKIHJlYnVpbGRfY2FjaGU6CiAJY2QgIiR7Y21ha2VfYmluYXJ5X2Rpcn0iICYmICIke2NtYWtlX3NvdXJjZV9kaXJ9L2Jvb3RzdHJhcCIKQEAgLTE1ODMsNiArMTY1Miw3IEBACiBlY2hvICcKICMgR2VuZXJhdGVkIGJ5ICciJHtjbWFrZV9zb3VyY2VfZGlyfSInL2Jvb3RzdHJhcAogIyBEZWZhdWx0IGNtYWtlIHNldHRpbmdzLiAgVGhlc2UgbWF5IGJlIG92ZXJyaWRkZW4gYW55IHNldHRpbmdzIGJlbG93Lgorc2V0IChDTUFLRV9CVUlMRF9UWVBFICJSZWxlYXNlIiBDQUNIRSBTVFJJTkcgIkNob29zZSB0aGUgdHlwZSBvZiBidWlsZC4iKSAjIG5vdCBGT1JDRSB0byBwcmVzZXJ2ZSBkZWZhdWx0cyBzcGVjaWZpZWQgZWxzZXdoZXJlCiBzZXQgKENNQUtFX0lOU1RBTExfUFJFRklYICInIiR7Y21ha2VfcHJlZml4X2Rpcn0iJyIgQ0FDSEUgUEFUSCAiSW5zdGFsbCBwYXRoIHByZWZpeCwgcHJlcGVuZGVkIG9udG8gaW5zdGFsbCBkaXJlY3Rvcmllcy4iIEZPUkNFKQogc2V0IChDTUFLRV9ET0NfRElSICInIiR7Y21ha2VfZG9jX2Rpcn0iJyIgQ0FDSEUgUEFUSCAiSW5zdGFsbCBsb2NhdGlvbiBmb3IgZG9jdW1lbnRhdGlvbiAocmVsYXRpdmUgdG8gcHJlZml4KS4iIEZPUkNFKQogc2V0IChDTUFLRV9NQU5fRElSICInIiR7Y21ha2VfbWFuX2Rpcn0iJyIgQ0FDSEUgUEFUSCAiSW5zdGFsbCBsb2NhdGlvbiBmb3IgbWFuIHBhZ2VzIChyZWxhdGl2ZSB0byBwcmVmaXgpLiIgRk9SQ0UpCkBAIC0xNTkyLDQyICsxNjYyLDQyIEBACiAnID4gIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vSW5pdGlhbENhY2hlRmxhZ3MuY21ha2UiCiAKICMgQWRkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZ2l2ZW4gYXMgY29tbWFuZC1saW5lIG9wdGlvbnMuCi1pZiBbICJ4JHtjbWFrZV9ib290c3RyYXBfcXRfZ3VpfSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX2Jvb3RzdHJhcF9xdF9ndWl9IiAhPSAieCI7IHRoZW4KICAgZWNobyAnCiBzZXQgKEJVSUxEX1F0RGlhbG9nICciJHtjbWFrZV9ib290c3RyYXBfcXRfZ3VpfSInIENBQ0hFIEJPT0wgIkJ1aWxkIFF0IGRpYWxvZyBmb3IgQ01ha2UiIEZPUkNFKQogJyA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9Jbml0aWFsQ2FjaGVGbGFncy5jbWFrZSIKIGZpCi1pZiBbICJ4JHtjbWFrZV9ib290c3RyYXBfcXRfcW1ha2V9IiAhPSAieCIgXTsgdGhlbgoraWYgdGVzdCAieCR7Y21ha2VfYm9vdHN0cmFwX3F0X3FtYWtlfSIgIT0gIngiOyB0aGVuCiAgIGVjaG8gJwogc2V0IChRVF9RTUFLRV9FWEVDVVRBQkxFICInIiR7Y21ha2VfYm9vdHN0cmFwX3F0X3FtYWtlfSInIiBDQUNIRSBGSUxFUEFUSCAiTG9jYXRpb24gb2YgUXQgcW1ha2UiIEZPUkNFKQogJyA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9Jbml0aWFsQ2FjaGVGbGFncy5jbWFrZSIKIGZpCi1pZiBbICJ4JHtjbWFrZV9zcGhpbnhfaW5mb30iICE9ICJ4IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9zcGhpbnhfaW5mb30iICE9ICJ4IjsgdGhlbgogICBlY2hvICcKIHNldCAoU1BISU5YX0lORk8gIiciJHtjbWFrZV9zcGhpbnhfaW5mb30iJyIgQ0FDSEUgQk9PTCAiQnVpbGQgSW5mbyBtYW51YWwgd2l0aCBTcGhpbngiIEZPUkNFKQogJyA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9Jbml0aWFsQ2FjaGVGbGFncy5jbWFrZSIKIGZpCi1pZiBbICJ4JHtjbWFrZV9zcGhpbnhfbWFufSIgIT0gIngiIF07IHRoZW4KK2lmIHRlc3QgIngke2NtYWtlX3NwaGlueF9tYW59IiAhPSAieCI7IHRoZW4KICAgZWNobyAnCiBzZXQgKFNQSElOWF9NQU4gIiciJHtjbWFrZV9zcGhpbnhfbWFufSInIiBDQUNIRSBCT09MICJCdWlsZCBtYW4gcGFnZXMgd2l0aCBTcGhpbngiIEZPUkNFKQogJyA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9Jbml0aWFsQ2FjaGVGbGFncy5jbWFrZSIKIGZpCi1pZiBbICJ4JHtjbWFrZV9zcGhpbnhfaHRtbH0iICE9ICJ4IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9zcGhpbnhfaHRtbH0iICE9ICJ4IjsgdGhlbgogICBlY2hvICcKIHNldCAoU1BISU5YX0hUTUwgIiciJHtjbWFrZV9zcGhpbnhfaHRtbH0iJyIgQ0FDSEUgQk9PTCAiQnVpbGQgaHRtbCBoZWxwIHdpdGggU3BoaW54IiBGT1JDRSkKICcgPj4gIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vSW5pdGlhbENhY2hlRmxhZ3MuY21ha2UiCiBmaQotaWYgWyAieCR7Y21ha2Vfc3BoaW54X3F0aGVscH0iICE9ICJ4IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9zcGhpbnhfcXRoZWxwfSIgIT0gIngiOyB0aGVuCiAgIGVjaG8gJwogc2V0IChTUEhJTlhfUVRIRUxQICInIiR7Y21ha2Vfc3BoaW54X3F0aGVscH0iJyIgQ0FDSEUgQk9PTCAiQnVpbGQgcWNoIGhlbHAgd2l0aCBTcGhpbngiIEZPUkNFKQogJyA+PiAiJHtjbWFrZV9ib290c3RyYXBfZGlyfS9Jbml0aWFsQ2FjaGVGbGFncy5jbWFrZSIKIGZpCi1pZiBbICJ4JHtjbWFrZV9zcGhpbnhfYnVpbGR9IiAhPSAieCIgXTsgdGhlbgoraWYgdGVzdCAieCR7Y21ha2Vfc3BoaW54X2J1aWxkfSIgIT0gIngiOyB0aGVuCiAgIGVjaG8gJwogc2V0IChTUEhJTlhfRVhFQ1VUQUJMRSAiJyIke2NtYWtlX3NwaGlueF9idWlsZH0iJyIgQ0FDSEUgRklMRVBBVEggIkxvY2F0aW9uIG9mIFF0IHNwaGlueC1idWlsZCIgRk9SQ0UpCiAnID4+ICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L0luaXRpYWxDYWNoZUZsYWdzLmNtYWtlIgogZmkKLWlmIFsgIngke2NtYWtlX3NwaGlueF9mbGFnc30iICE9ICJ4IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9zcGhpbnhfZmxhZ3N9IiAhPSAieCI7IHRoZW4KICAgZWNobyAnCiBzZXQgKFNQSElOWF9GTEFHUyBbPT1bJyIke2NtYWtlX3NwaGlueF9mbGFnc30iJ109PV0gQ0FDSEUgU1RSSU5HICJGbGFncyB0byBwYXNzIHRvIHNwaGlueC1idWlsZCIgRk9SQ0UpCiAnID4+ICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L0luaXRpYWxDYWNoZUZsYWdzLmNtYWtlIgpAQCAtMTYzNyw3ICsxNzA3LDcgQEAKICMgc3BlY2lmaWNhdGlvbiBvZiBjbWFrZV9pbml0X2ZpbGUuCiAoCiBjZCAiJHtjbWFrZV9iaW5hcnlfZGlyfSIKLWlmIFsgLWYgIiR7Y21ha2VfaW5pdF9maWxlfSIgXTsgdGhlbgoraWYgdGVzdCAtZiAiJHtjbWFrZV9pbml0X2ZpbGV9IjsgdGhlbgogICBjYXQgIiR7Y21ha2VfaW5pdF9maWxlfSIgPj4gIiR7Y21ha2VfYm9vdHN0cmFwX2Rpcn0vSW5pdGlhbENhY2hlRmxhZ3MuY21ha2UiCiBmaQogKQpAQCAtMTY0NSwxMyArMTcxNSwxMyBAQAogZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogCiAjIFJ1biBtYWtlIHRvIGJ1aWxkIGJvb3RzdHJhcCBjbWFrZQotaWYgWyAieCR7Y21ha2VfcGFyYWxsZWxfbWFrZX0iICE9ICJ4IiBdOyB0aGVuCitpZiB0ZXN0ICJ4JHtjbWFrZV9wYXJhbGxlbF9tYWtlfSIgIT0gIngiOyB0aGVuCiAgICR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9ICR7Y21ha2VfbWFrZV9mbGFnc30KIGVsc2UKICAgJHtjbWFrZV9tYWtlX3Byb2Nlc3Nvcn0KIGZpCiBSRVM9JD8KLWlmIFsgIiR7UkVTfSIgLW5lICIwIiBdOyB0aGVuCitpZiB0ZXN0ICIke1JFU30iIC1uZSAiMCI7IHRoZW4KICAgY21ha2VfZXJyb3IgOSAiUHJvYmxlbSB3aGlsZSBydW5uaW5nICR7Y21ha2VfbWFrZV9wcm9jZXNzb3J9IgogZmkKIGNkICIke2NtYWtlX2JpbmFyeV9kaXJ9IgpAQCAtMTY3MCwxMiArMTc0MCwxMiBAQAogCiAjIFJ1biBib290c3RyYXAgQ01ha2UgdG8gY29uZmlndXJlIHJlYWwgQ01ha2UKIGNtYWtlX29wdGlvbnM9Ii1EQ01BS0VfQk9PVFNUUkFQPTEiCi1pZiBbIC1uICIke2NtYWtlX3ZlcmJvc2V9IiBdOyB0aGVuCitpZiB0ZXN0IC1uICIke2NtYWtlX3ZlcmJvc2V9IjsgdGhlbgogICBjbWFrZV9vcHRpb25zPSIke2NtYWtlX29wdGlvbnN9IC1EQ01BS0VfVkVSQk9TRV9NQUtFRklMRT0xIgogZmkKICIke2NtYWtlX2Jvb3RzdHJhcF9kaXJ9L2NtYWtlIiAiJHtjbWFrZV9zb3VyY2VfZGlyfSIgIi1DJHtjbWFrZV9ib290c3RyYXBfZGlyfS9Jbml0aWFsQ2FjaGVGbGFncy5jbWFrZSIgIi1HJHtjbWFrZV9ib290c3RyYXBfZ2VuZXJhdG9yfSIgJHtjbWFrZV9vcHRpb25zfSAke2NtYWtlX2Jvb3RzdHJhcF9zeXN0ZW1fbGlic30gIiRAIgogUkVTPSQ/Ci1pZiBbICIke1JFU30iIC1uZSAiMCIgXTsgdGhlbgoraWYgdGVzdCAiJHtSRVN9IiAtbmUgIjAiOyB0aGVuCiAgIGNtYWtlX2Vycm9yIDExICJQcm9ibGVtIHdoaWxlIHJ1bm5pbmcgaW5pdGlhbCBDTWFrZSIKIGZpCiAKZGlmZiAtLWdpdCBhL2NtYWtlX3VuaW5zdGFsbC5jbWFrZS5pbiBiL2NtYWtlX3VuaW5zdGFsbC5jbWFrZS5pbgppbmRleCBkODFmNjJhLi5iNWZjNzAwIDEwMDY0NAotLS0gYS9jbWFrZV91bmluc3RhbGwuY21ha2UuaW4KKysrIGIvY21ha2VfdW5pbnN0YWxsLmNtYWtlLmluCkBAIC04LDcgKzgsNyBAQAogICBtZXNzYWdlKFNUQVRVUyAiVW5pbnN0YWxsaW5nIFwiJEVOVntERVNURElSfSR7ZmlsZX1cIiIpCiAgIGlmKEVYSVNUUyAiJEVOVntERVNURElSfSR7ZmlsZX0iKQogICAgIGV4ZWNfcHJvZ3JhbSgKLSAgICAgICJAQ01BS0VfQ09NTUFOREAiIEFSR1MgIi1FIHJlbW92ZSBcIiRFTlZ7REVTVERJUn0ke2ZpbGV9XCIiCisgICAgICAiQENNQUtFX0NPTU1BTkRAIiBBUkdTICItRSBybSAtZiBcIiRFTlZ7REVTVERJUn0ke2ZpbGV9XCIiCiAgICAgICBPVVRQVVRfVkFSSUFCTEUgcm1fb3V0CiAgICAgICBSRVRVUk5fVkFMVUUgcm1fcmV0dmFsCiAgICAgICApCg==